diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/acinclude.m4 ./bfd/acinclude.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/acinclude.m4	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/acinclude.m4	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 dnl
-dnl   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+dnl   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 dnl
 dnl This file is free software; you can redistribute it and/or modify
 dnl it under the terms of the GNU General Public License as published by
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aclocal.m4 ./bfd/aclocal.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aclocal.m4	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aclocal.m4	2024-02-01 01:47:13.000000000 +0000
@@ -1168,22 +1168,32 @@ AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
 m4_include([../config/acx.m4])
+m4_include([../config/bfd64.m4])
 m4_include([../config/depstand.m4])
 m4_include([../config/gettext-sister.m4])
+m4_include([../config/gettext.m4])
+m4_include([../config/iconv.m4])
+m4_include([../config/intlmacosx.m4])
+m4_include([../config/jobserver.m4])
 m4_include([../config/largefile.m4])
 m4_include([../config/lead-dot.m4])
+m4_include([../config/lib-ld.m4])
+m4_include([../config/lib-link.m4])
+m4_include([../config/lib-prefix.m4])
 m4_include([../config/nls.m4])
 m4_include([../config/override.m4])
+m4_include([../config/pkg.m4])
 m4_include([../config/plugins.m4])
 m4_include([../config/po.m4])
 m4_include([../config/progtest.m4])
-m4_include([../config/stdint.m4])
 m4_include([../config/zlib.m4])
+m4_include([../config/zstd.m4])
 m4_include([../libtool.m4])
 m4_include([../ltoptions.m4])
 m4_include([../ltsugar.m4])
 m4_include([../ltversion.m4])
 m4_include([../lt~obsolete.m4])
+m4_include([ax_tls.m4])
 m4_include([bfd.m4])
 m4_include([warning.m4])
 m4_include([acinclude.m4])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aix386-core.c ./bfd/aix386-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aix386-core.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aix386-core.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,281 +0,0 @@
-/* BFD back-end for AIX on PS/2 core files.
-   This was based on trad-core.c, which was written by John Gilmore of
-	Cygnus Support.
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
-   Written by Minh Tran-Le <TRANLE@INTELLICORP.COM>.
-   Converted to back end form by Ian Lance Taylor <ian@cygnus.com>.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-#include "coff/i386.h"
-#include "coff/internal.h"
-#include "libcoff.h"
-
-#include <signal.h>
-
-#if defined (_AIX) && defined (_I386)
-#define NOCHECKS		/* This is for coredump.h.  */
-#define _h_USER			/* Avoid including user.h from coredump.h.  */
-#include <uinfo.h>
-#include <sys/i386/coredump.h>
-#endif /* _AIX && _I386 */
-
-/* Maybe this could work on some other i386 but I have not tried it
- * mtranle@paris - Tue Sep 24 12:49:35 1991
- */
-
-#ifndef COR_MAGIC
-# define COR_MAGIC "core"
-#endif
-
-/* Need this cast because ptr is really void *.  */
-#define core_hdr(bfd) \
-    (((bfd->tdata.trad_core_data))->hdr)
-#define core_section(bfd,n) \
-    (((bfd)->tdata.trad_core_data)->sections[n])
-#define core_regsec(bfd) \
-    (((bfd)->tdata.trad_core_data)->reg_section)
-#define core_reg2sec(bfd) \
-    (((bfd)->tdata.trad_core_data)->reg2_section)
-
-/* These are stored in the bfd's tdata.  */
-struct trad_core_struct
-{
-  struct corehdr *hdr;		/* core file header */
-  asection *reg_section;
-  asection *reg2_section;
-  asection *sections[MAX_CORE_SEGS];
-};
-
-static const bfd_target *
-aix386_core_file_p (bfd *abfd)
-{
-  int i, n;
-  unsigned char longbuf[4];	/* Raw bytes of various header fields */
-  bfd_size_type core_size = sizeof (struct corehdr);
-  bfd_size_type amt;
-  struct corehdr *core;
-  struct mergem
-  {
-    struct trad_core_struct coredata;
-    struct corehdr internal_core;
-  } *mergem;
-  flagword flags;
-
-  amt = sizeof (longbuf);
-  if (bfd_bread (longbuf, amt, abfd) != amt)
-    {
-      if (bfd_get_error () != bfd_error_system_call)
-	bfd_set_error (bfd_error_wrong_format);
-      return 0;
-    }
-
-  if (strncmp (longbuf, COR_MAGIC, 4))
-    return 0;
-
-  if (bfd_seek (abfd, (file_ptr) 0, 0) != 0)
-    return 0;
-
-  amt = sizeof (struct mergem);
-  mergem = (struct mergem *) bfd_zalloc (abfd, amt);
-  if (mergem == NULL)
-    return 0;
-
-  core = &mergem->internal_core;
-
-  if ((bfd_bread (core, core_size, abfd)) != core_size)
-    {
-      if (bfd_get_error () != bfd_error_system_call)
-	bfd_set_error (bfd_error_wrong_format);
-    loser:
-      bfd_release (abfd, (char *) mergem);
-      abfd->tdata.any = NULL;
-      bfd_section_list_clear (abfd);
-      return 0;
-    }
-
-  set_tdata (abfd, &mergem->coredata);
-  core_hdr (abfd) = core;
-
-  /* Create the sections.  */
-  flags = SEC_HAS_CONTENTS;
-  core_regsec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg",
-							   flags);
-  if (core_regsec (abfd) == NULL)
-    goto loser;
-
-  core_regsec (abfd)->size = sizeof (core->cd_regs);
-  core_regsec (abfd)->vma = (bfd_vma) -1;
-
-  /* We'll access the regs afresh in the core file, like any section.  */
-  core_regsec (abfd)->filepos =
-    (file_ptr) offsetof (struct corehdr, cd_regs[0]);
-
-  flags = SEC_HAS_CONTENTS;
-  core_reg2sec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg2",
-							    flags);
-  if (core_reg2sec (abfd) == NULL)
-    /* bfd_release frees everything allocated after it's arg.  */
-    goto loser;
-
-  core_reg2sec (abfd)->size = sizeof (core->cd_fpregs);
-  core_reg2sec (abfd)->vma = (bfd_vma) -1;
-  core_reg2sec (abfd)->filepos =
-    (file_ptr) offsetof (struct corehdr, cd_fpregs);
-
-  for (i = 0, n = 0; (i < MAX_CORE_SEGS) && (core->cd_segs[i].cs_type); i++)
-    {
-      const char *sname;
-      flagword flags;
-
-      if (core->cd_segs[i].cs_offset == 0)
-	continue;
-
-      switch (core->cd_segs[i].cs_type)
-	{
-	case COR_TYPE_DATA:
-	  sname = ".data";
-	  flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
-	  break;
-	case COR_TYPE_STACK:
-	  sname = ".stack";
-	  flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
-	  break;
-	case COR_TYPE_LIBDATA:
-	  sname = ".libdata";
-	  flags = SEC_ALLOC + SEC_HAS_CONTENTS;
-	  break;
-	case COR_TYPE_WRITE:
-	  sname = ".writeable";
-	  flags = SEC_ALLOC + SEC_HAS_CONTENTS;
-	  break;
-	case COR_TYPE_MSC:
-	  sname = ".misc";
-	  flags = SEC_ALLOC + SEC_HAS_CONTENTS;
-	  break;
-	default:
-	  sname = ".unknown";
-	  flags = SEC_ALLOC + SEC_HAS_CONTENTS;
-	  break;
-	}
-      core_section (abfd, n) = bfd_make_section_anyway_with_flags (abfd,
-								   sname,
-								   flags);
-      if (core_section (abfd, n) == NULL)
-	goto loser;
-
-      core_section (abfd, n)->size = core->cd_segs[i].cs_len;
-      core_section (abfd, n)->vma       = core->cd_segs[i].cs_address;
-      core_section (abfd, n)->filepos   = core->cd_segs[i].cs_offset;
-      core_section (abfd, n)->alignment_power = 2;
-      n++;
-    }
-
-  return abfd->xvec;
-}
-
-static char *
-aix386_core_file_failing_command (bfd *abfd)
-{
-  return core_hdr (abfd)->cd_comm;
-}
-
-static int
-aix386_core_file_failing_signal (bfd *abfd)
-{
-  return core_hdr (abfd)->cd_cursig;
-}
-
-#define aix386_core_file_matches_executable_p generic_core_file_matches_executable_p
-
-#define aix386_core_file_pid _bfd_nocore_core_file_pid
-
-/* If somebody calls any byte-swapping routines, shoot them.  */
-
-static void
-swap_abort (void)
-{
-  /* This way doesn't require any declaration for ANSI to fuck up.  */
-  abort ();
-}
-
-#define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
-#define	NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
-#define	NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
-#define	NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
-#define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
-#define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
-
-const bfd_target core_aix386_vec =
-{
-  "aix386-core",
-  bfd_target_unknown_flavour,
-  BFD_ENDIAN_BIG,		/* target byte order */
-  BFD_ENDIAN_BIG,		/* target headers byte order */
-  (HAS_RELOC | EXEC_P |		/* object flags */
-   HAS_LINENO | HAS_DEBUG |
-   HAS_SYMS | HAS_LOCALS | WP_TEXT),
-
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
-  0,				/* leading underscore */
-  ' ',				/* ar_pad_char */
-  16,				/* ar_max_namelen */
-  0,				/* match priority.  */
-  NO_GET64, NO_GETS64, NO_PUT64,
-  NO_GET, NO_GETS, NO_PUT,
-  NO_GET, NO_GETS, NO_PUT,	/* data */
-  NO_GET64, NO_GETS64, NO_PUT64,
-  NO_GET, NO_GETS, NO_PUT,
-  NO_GET, NO_GETS, NO_PUT,	/* hdrs */
-
-  {				/* bfd_check_format */
-    _bfd_dummy_target,
-    _bfd_dummy_target,
-    _bfd_dummy_target,
-    aix386_core_file_p
-  },
-  {				/* bfd_create_object */
-    _bfd_bool_bfd_false_error,
-    _bfd_bool_bfd_false_error,
-    _bfd_bool_bfd_false_error,
-    _bfd_bool_bfd_false_error
-  },
-  {				/* bfd_write_contents */
-    _bfd_bool_bfd_false_error,
-    _bfd_bool_bfd_false_error,
-    _bfd_bool_bfd_false_error,
-    _bfd_bool_bfd_false_error
-  },
-
-  BFD_JUMP_TABLE_GENERIC (_bfd_generic),
-  BFD_JUMP_TABLE_COPY (_bfd_generic),
-  BFD_JUMP_TABLE_CORE (aix386),
-  BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
-  BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols),
-  BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
-  BFD_JUMP_TABLE_WRITE (_bfd_generic),
-  BFD_JUMP_TABLE_LINK (_bfd_nolink),
-  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
-
-  NULL,
-
-  NULL
-};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aix5ppc-core.c ./bfd/aix5ppc-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aix5ppc-core.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aix5ppc-core.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* IBM RS/6000 "XCOFF" back-end for BFD.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Written by Tom Rix
    Contributed by Red Hat Inc.
 
@@ -23,8 +23,8 @@
 #include "sysdep.h"
 #include "bfd.h"
 
-const bfd_target *xcoff64_core_p (bfd *);
-bfd_boolean xcoff64_core_file_matches_executable_p (bfd *, bfd *);
+bfd_cleanup xcoff64_core_p (bfd *);
+bool xcoff64_core_file_matches_executable_p (bfd *, bfd *);
 char *xcoff64_core_file_failing_command (bfd *);
 int xcoff64_core_file_failing_signal (bfd *);
 
@@ -48,7 +48,7 @@ int xcoff64_core_file_failing_signal (bf
 #define CHECK_FILE_OFFSET(s, v) \
   ((bfd_signed_vma)(v) < 0 || (bfd_signed_vma)(v) > (bfd_signed_vma)(s).st_size)
 
-const bfd_target *
+bfd_cleanup
 xcoff64_core_p (bfd *abfd)
 {
   enum bfd_architecture arch;
@@ -60,7 +60,6 @@ xcoff64_core_p (bfd *abfd)
   bfd_vma ld_offset;
   bfd_size_type i;
   struct vm_infox vminfo;
-  const bfd_target *return_value = NULL;
   flagword flags;
 
   /* Get the header.  */
@@ -68,7 +67,7 @@ xcoff64_core_p (bfd *abfd)
     goto xcoff64_core_p_error;
 
   if (sizeof (struct core_dumpxx)
-      != bfd_bread (&core, sizeof (struct core_dumpxx), abfd))
+      != bfd_read (&core, sizeof (struct core_dumpxx), abfd))
     goto xcoff64_core_p_error;
 
   if (bfd_stat (abfd, &statbuf) < 0)
@@ -109,12 +108,12 @@ xcoff64_core_p (bfd *abfd)
     {
       bfd_set_error (bfd_error_file_truncated);
 
-      return return_value;
+      return NULL;
     }
 
   new_core_hdr = bfd_zalloc (abfd, sizeof (struct core_dumpxx));
   if (NULL == new_core_hdr)
-    return return_value;
+    return NULL;
 
   memcpy (new_core_hdr, &core, sizeof (struct core_dumpxx));
   /* The core_hdr() macro is no longer used here because it would
@@ -126,7 +125,7 @@ xcoff64_core_p (bfd *abfd)
   flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
   sec = bfd_make_section_anyway_with_flags (abfd, ".stack", flags);
   if (NULL == sec)
-    return return_value;
+    return NULL;
 
   sec->size = core.c_size;
   sec->vma = core.c_stackorg;
@@ -136,13 +135,34 @@ xcoff64_core_p (bfd *abfd)
   flags = SEC_HAS_CONTENTS | SEC_IN_MEMORY;
   sec = bfd_make_section_anyway_with_flags (abfd, ".reg", flags);
   if (NULL == sec)
-    return return_value;
+    return NULL;
 
   sec->size = sizeof (struct __context64);
   sec->vma = 0;
   sec->filepos = 0;
   sec->contents = (bfd_byte *)&new_core_hdr->c_flt.r64;
 
+  if (core.c_extctx)
+    {
+      /* vmx section.  */
+      flags = SEC_HAS_CONTENTS;
+      sec = bfd_make_section_anyway_with_flags (abfd, ".aix-vmx", flags);
+      if (sec == NULL)
+	return NULL;
+      sec->size = 560;
+      sec->vma = 0;
+      sec->filepos = core.c_extctx;
+
+      /* vmx section.  */
+      flags = SEC_HAS_CONTENTS;
+      sec = bfd_make_section_anyway_with_flags (abfd, ".aix-vsx", flags);
+      if (sec == NULL)
+	return NULL;
+      sec->size = 256;
+      sec->vma = 0;
+      sec->filepos = core.c_extctx + 584;
+    }
+
   /* .ldinfo section.
      To actually find out how long this section is in this particular
      core dump would require going down the whole list of struct
@@ -150,7 +170,7 @@ xcoff64_core_p (bfd *abfd)
   flags = SEC_HAS_CONTENTS;
   sec = bfd_make_section_anyway_with_flags (abfd, ".ldinfo", flags);
   if (NULL == sec)
-    return return_value;
+    return NULL;
 
   sec->size = core.c_lsize;
   sec->vma = 0;
@@ -164,7 +184,7 @@ xcoff64_core_p (bfd *abfd)
   flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
   sec = bfd_make_section_anyway_with_flags (abfd, ".data", flags);
   if (NULL == sec)
-    return return_value;
+    return NULL;
 
   sec->size = core.c_datasize;
   sec->vma = core.c_dataorg;
@@ -176,18 +196,18 @@ xcoff64_core_p (bfd *abfd)
   while (1)
     {
       if (bfd_seek (abfd, ld_offset, SEEK_SET) != 0)
-	return return_value;
+	return NULL;
 
       if (sizeof (struct __ld_info64) !=
-	  bfd_bread (&ldinfo, sizeof (struct __ld_info64), abfd))
-	return return_value;
+	  bfd_read (&ldinfo, sizeof (struct __ld_info64), abfd))
+	return NULL;
 
       if (ldinfo.ldinfo_core)
 	{
 	  flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
 	  sec = bfd_make_section_anyway_with_flags (abfd, ".data", flags);
 	  if (NULL == sec)
-	    return return_value;
+	    return NULL;
 
 	  sec->size = ldinfo.ldinfo_datasize;
 	  sec->vma = ldinfo.ldinfo_dataorg;
@@ -203,19 +223,19 @@ xcoff64_core_p (bfd *abfd)
   if (core.c_vmregions)
     {
       if (bfd_seek (abfd, core.c_vmm, SEEK_SET) != 0)
-	return return_value;
+	return NULL;
 
       for (i = 0; i < core.c_vmregions; i++)
 	if (sizeof (struct vm_infox) !=
-	    bfd_bread (&vminfo, sizeof (struct vm_infox), abfd))
-	  return return_value;
+	    bfd_read (&vminfo, sizeof (struct vm_infox), abfd))
+	  return NULL;
 
       if (vminfo.vminfo_offset)
 	{
 	  flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
 	  sec = bfd_make_section_anyway_with_flags (abfd, ".vmdata", flags);
 	  if (NULL == sec)
-	    return return_value;
+	    return NULL;
 
 	  sec->size = vminfo.vminfo_size;
 	  sec->vma = vminfo.vminfo_addr;
@@ -228,32 +248,32 @@ xcoff64_core_p (bfd *abfd)
   mach = DEFAULT_MACHINE;
   bfd_default_set_arch_mach (abfd, arch, mach);
 
-  return_value = (bfd_target *) abfd->xvec;	/* This is garbage for now.  */
+  return _bfd_no_cleanup;
 
  xcoff64_core_p_error:
   if (bfd_get_error () != bfd_error_system_call)
     bfd_set_error (bfd_error_wrong_format);
 
-  return return_value;
+  return NULL;
 }
 
 /* Return `TRUE' if given core is from the given executable.  */
 
-bfd_boolean
+bool
 xcoff64_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
 {
   struct core_dumpxx core;
   char *path, *s;
   size_t alloc;
   const char *str1, *str2;
-  bfd_boolean return_value = FALSE;
+  bool return_value = false;
 
   /* Get the header.  */
   if (bfd_seek (core_bfd, 0, SEEK_SET) != 0)
     return return_value;
 
   if (sizeof (struct core_dumpxx) !=
-      bfd_bread (&core, sizeof (struct core_dumpxx), core_bfd))
+      bfd_read (&core, sizeof (struct core_dumpxx), core_bfd))
     return return_value;
 
   if (bfd_seek (core_bfd, core.c_loader, SEEK_SET) != 0)
@@ -268,7 +288,7 @@ xcoff64_core_file_matches_executable_p (
 
   while (1)
     {
-      if (bfd_bread (s, 1, core_bfd) != 1)
+      if (bfd_read (s, 1, core_bfd) != 1)
 	goto xcoff64_core_file_matches_executable_p_end_1;
 
       if (*s == '\0')
@@ -289,14 +309,14 @@ xcoff64_core_file_matches_executable_p (
     }
 
   str1 = strrchr (path, '/');
-  str2 = strrchr (exec_bfd->filename, '/');
+  str2 = strrchr (bfd_get_filename (exec_bfd), '/');
 
   /* Step over character '/'.  */
   str1 = str1 != NULL ? str1 + 1 : path;
-  str2 = str2 != NULL ? str2 + 1 : exec_bfd->filename;
+  str2 = str2 != NULL ? str2 + 1 : bfd_get_filename (exec_bfd);
 
   if (strcmp (str1, str2) == 0)
-    return_value = TRUE;
+    return_value = true;
 
  xcoff64_core_file_matches_executable_p_end_1:
   free (path);
@@ -329,14 +349,14 @@ xcoff64_core_file_failing_signal (bfd *a
 
 #else /* AIX_5_CORE */
 
-const bfd_target *
+bfd_cleanup
 xcoff64_core_p (bfd *abfd ATTRIBUTE_UNUSED)
 {
   bfd_set_error (bfd_error_wrong_format);
   return 0;
 }
 
-bfd_boolean
+bool
 xcoff64_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
 {
   return generic_core_file_matches_executable_p (core_bfd, exec_bfd);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout32.c ./bfd/aout32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout32.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aout32.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for 32-bit a.out files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout64.c ./bfd/aout64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout64.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aout64.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for 64-bit a.out files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -21,12 +21,4 @@
 
 #define ARCH_SIZE 64
 
-/* aoutx.h requires definitions for BMAGIC and QMAGIC.  */
-#ifndef BMAGIC
-#define BMAGIC 0
-#endif
-#ifndef QMAGIC
-#define QMAGIC 0
-#endif
-
 #include "aoutx.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout-cris.c ./bfd/aout-cris.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout-cris.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aout-cris.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD backend for CRIS a.out binaries.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Contributed by Axis Communications AB.
    Written by Hans-Peter Nilsson.
 
@@ -56,9 +56,6 @@
 #define TARGET_PAGE_SIZE SEGMENT_SIZE
 #define TARGETNAME "a.out-cris"
 
-/* The definition here seems not used; just provided as a convention.  */
-#define DEFAULT_ARCH bfd_arch_cris
-
 /* Do not "beautify" the CONCAT* macro args.  Traditional C will not
    remove whitespace added here, and thus will fail to concatenate
    the tokens.  */
@@ -72,7 +69,7 @@
 #define MY_exec_hdr_flags 1
 
 #define MY_write_object_contents MY (write_object_contents)
-static bfd_boolean MY (write_object_contents) (bfd *);
+static bool MY (write_object_contents) (bfd *);
 
 /* Forward this, so we can use a pointer to it in PARAMS.  */
 struct reloc_ext_external;
@@ -85,16 +82,15 @@ static void MY (swap_ext_reloc_in) (bfd
 				    arelent *, asymbol **, bfd_size_type);
 
 #define MY_set_sizes MY (set_sizes)
-static bfd_boolean MY (set_sizes) (bfd *);
+static bool MY (set_sizes) (bfd *);
 
 /* To set back reloc_size to ext, we make MY (set_sizes) be called
    through this construct.  Note that MY_set_arch_mach is only called
    through SET_ARCH_MACH.  The default bfd_default_set_arch_mach will
    not call set_sizes.  */
 
-#define MY_set_arch_mach NAME (aout, set_arch_mach)
 #define SET_ARCH_MACH(BFD, EXECP) \
- MY_set_arch_mach (BFD, DEFAULT_ARCH, N_MACHTYPE (EXECP))
+  bfd_set_arch_mach (BFD, bfd_arch_cris, N_MACHTYPE (EXECP))
 
 /* These macros describe the binary layout of the reloc information we
    use in a file.  */
@@ -114,7 +110,7 @@ static bfd_boolean MY (set_sizes) (bfd *
 
 /* We need our own version to set header flags.  */
 
-static bfd_boolean
+static bool
 MY (write_object_contents) (bfd *abfd)
 {
   struct external_exec exec_bytes;
@@ -135,7 +131,7 @@ MY (write_object_contents) (bfd *abfd)
 
   WRITE_HEADERS (abfd, execp);
 
-  return TRUE;
+  return true;
 }
 
 /* We need our own for these reasons:
@@ -231,12 +227,14 @@ MY (swap_ext_reloc_in) (bfd *abfd,
   cache_ptr->address = (GET_SWORD (abfd, bytes->r_address));
 
   /* Now the fun stuff.  */
-  r_index =  (bytes->r_index[2] << 16)
-    | (bytes->r_index[1] << 8)
-    |  bytes->r_index[0];
+  r_index =  (((unsigned int) bytes->r_index[2] << 16)
+    | ((unsigned int) bytes->r_index[1] << 8)
+    |  bytes->r_index[0]);
+  
   r_extern = (0 != (bytes->r_type[0] & RELOC_EXT_BITS_EXTERN_LITTLE));
-  r_type = ((bytes->r_type[0]) >> RELOC_EXT_BITS_TYPE_SH_LITTLE)
-    & RELOC_EXT_BITS_TYPE_LITTLE;
+
+  r_type = ((bytes->r_type[0] & RELOC_EXT_BITS_TYPE_LITTLE)
+    >> RELOC_EXT_BITS_TYPE_SH_LITTLE);
 
   if (r_type > 2)
     {
@@ -271,7 +269,7 @@ MY (swap_ext_reloc_in) (bfd *abfd,
    "obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE;", to avoid changing
    NAME (aout, set_arch_mach) in aoutx.  */
 
-static bfd_boolean
+static bool
 MY (set_sizes) (bfd *abfd)
 {
   /* Just as the default in aout-target.h (with some #ifdefs folded)...  */
@@ -288,5 +286,5 @@ MY (set_sizes) (bfd *abfd)
 
   obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE;
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout-ns32k.c ./bfd/aout-ns32k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout-ns32k.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aout-ns32k.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ns32k a.out-ish binaries.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Contributed by Ian Dall (idall@eleceng.adelaide.edu.au).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -21,6 +21,7 @@
 
 #include "sysdep.h"
 #include "bfd.h"
+#include "libbfd.h"
 #include "aout/aout64.h"
 #include "ns32k.h"
 
@@ -31,7 +32,7 @@
 
 reloc_howto_type * MYNS (bfd_reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
 reloc_howto_type * MYNS (bfd_reloc_name_lookup) (bfd *, const char *);
-bfd_boolean	   MYNS (write_object_contents) (bfd *);
+bool MYNS (write_object_contents) (bfd *);
 
 /* Avoid multiple definitions from aoutx if supporting
    standard a.out format(s) as well as this one.  */
@@ -79,58 +80,58 @@ void bfd_ns32k_arch (void);
 reloc_howto_type MY (howto_table)[] =
 {
   /* ns32k immediate operands.  */
-  HOWTO (BFD_RELOC_NS32K_IMM_8, 0, 0, 8, FALSE, 0, complain_overflow_signed,
+  HOWTO (BFD_RELOC_NS32K_IMM_8, 0, 1, 8, false, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_imm, "NS32K_IMM_8",
-	 TRUE, 0x000000ff,0x000000ff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_IMM_16, 0, 1, 16, FALSE, 0, complain_overflow_signed,
+	 true, 0x000000ff,0x000000ff, false),
+  HOWTO (BFD_RELOC_NS32K_IMM_16, 0, 2, 16, false, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_imm,  "NS32K_IMM_16",
-	 TRUE, 0x0000ffff,0x0000ffff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_IMM_32, 0, 2, 32, FALSE, 0, complain_overflow_signed,
+	 true, 0x0000ffff,0x0000ffff, false),
+  HOWTO (BFD_RELOC_NS32K_IMM_32, 0, 4, 32, false, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_imm, "NS32K_IMM_32",
-	 TRUE, 0xffffffff,0xffffffff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_IMM_8_PCREL, 0, 0, 8, TRUE, 0, complain_overflow_signed,
+	 true, 0xffffffff,0xffffffff, false),
+  HOWTO (BFD_RELOC_NS32K_IMM_8_PCREL, 0, 1, 8, true, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_8",
-	 TRUE, 0x000000ff, 0x000000ff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_IMM_16_PCREL, 0, 1, 16, TRUE, 0, complain_overflow_signed,
+	 true, 0x000000ff, 0x000000ff, false),
+  HOWTO (BFD_RELOC_NS32K_IMM_16_PCREL, 0, 2, 16, true, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_16",
-	 TRUE, 0x0000ffff,0x0000ffff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_IMM_32_PCREL, 0, 2, 32, TRUE, 0, complain_overflow_signed,
+	 true, 0x0000ffff,0x0000ffff, false),
+  HOWTO (BFD_RELOC_NS32K_IMM_32_PCREL, 0, 4, 32, true, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_32",
-	 TRUE, 0xffffffff,0xffffffff, FALSE),
+	 true, 0xffffffff,0xffffffff, false),
 
   /* ns32k displacements.  */
-  HOWTO (BFD_RELOC_NS32K_DISP_8, 0, 0, 7, FALSE, 0, complain_overflow_signed,
+  HOWTO (BFD_RELOC_NS32K_DISP_8, 0, 1, 7, false, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_disp, "NS32K_DISP_8",
-	 TRUE, 0x000000ff,0x000000ff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_DISP_16, 0, 1, 14, FALSE, 0, complain_overflow_signed,
+	 true, 0x000000ff,0x000000ff, false),
+  HOWTO (BFD_RELOC_NS32K_DISP_16, 0, 2, 14, false, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_disp, "NS32K_DISP_16",
-	 TRUE, 0x0000ffff, 0x0000ffff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_DISP_32, 0, 2, 30, FALSE, 0, complain_overflow_signed,
+	 true, 0x0000ffff, 0x0000ffff, false),
+  HOWTO (BFD_RELOC_NS32K_DISP_32, 0, 4, 30, false, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_disp, "NS32K_DISP_32",
-	 TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_DISP_8_PCREL, 0, 0, 7, TRUE, 0, complain_overflow_signed,
+	 true, 0xffffffff, 0xffffffff, false),
+  HOWTO (BFD_RELOC_NS32K_DISP_8_PCREL, 0, 1, 7, true, 0, complain_overflow_signed,
 	   _bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_8",
-	 TRUE, 0x000000ff,0x000000ff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_DISP_16_PCREL, 0, 1, 14, TRUE, 0, complain_overflow_signed,
+	 true, 0x000000ff,0x000000ff, false),
+  HOWTO (BFD_RELOC_NS32K_DISP_16_PCREL, 0, 2, 14, true, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_16",
-	 TRUE, 0x0000ffff,0x0000ffff, FALSE),
-  HOWTO (BFD_RELOC_NS32K_DISP_32_PCREL, 0, 2, 30, TRUE, 0, complain_overflow_signed,
+	 true, 0x0000ffff,0x0000ffff, false),
+  HOWTO (BFD_RELOC_NS32K_DISP_32_PCREL, 0, 4, 30, true, 0, complain_overflow_signed,
 	 _bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_32",
-	 TRUE, 0xffffffff,0xffffffff, FALSE),
+	 true, 0xffffffff,0xffffffff, false),
 
   /* Normal 2's complement.  */
-  HOWTO (BFD_RELOC_8, 0, 0, 8, FALSE, 0, complain_overflow_bitfield,0,
-	 "8", TRUE, 0x000000ff,0x000000ff, FALSE),
-  HOWTO (BFD_RELOC_16, 0, 1, 16, FALSE, 0, complain_overflow_bitfield,0,
-	 "16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
-  HOWTO (BFD_RELOC_32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,0,
-	 "32", TRUE, 0xffffffff,0xffffffff, FALSE),
-  HOWTO (BFD_RELOC_8_PCREL, 0, 0, 8, TRUE, 0, complain_overflow_signed, 0,
-	 "PCREL_8", TRUE, 0x000000ff,0x000000ff, FALSE),
-  HOWTO (BFD_RELOC_16_PCREL, 0, 1, 16, TRUE, 0, complain_overflow_signed, 0,
-	 "PCREL_16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
-  HOWTO (BFD_RELOC_32_PCREL, 0, 2, 32, TRUE, 0, complain_overflow_signed, 0,
-	 "PCREL_32", TRUE, 0xffffffff,0xffffffff, FALSE),
+  HOWTO (BFD_RELOC_8, 0, 1, 8, false, 0, complain_overflow_bitfield,0,
+	 "8", true, 0x000000ff,0x000000ff, false),
+  HOWTO (BFD_RELOC_16, 0, 2, 16, false, 0, complain_overflow_bitfield,0,
+	 "16", true, 0x0000ffff,0x0000ffff, false),
+  HOWTO (BFD_RELOC_32, 0, 4, 32, false, 0, complain_overflow_bitfield,0,
+	 "32", true, 0xffffffff,0xffffffff, false),
+  HOWTO (BFD_RELOC_8_PCREL, 0, 1, 8, true, 0, complain_overflow_signed, 0,
+	 "PCREL_8", true, 0x000000ff,0x000000ff, false),
+  HOWTO (BFD_RELOC_16_PCREL, 0, 2, 16, true, 0, complain_overflow_signed, 0,
+	 "PCREL_16", true, 0x0000ffff,0x0000ffff, false),
+  HOWTO (BFD_RELOC_32_PCREL, 0, 4, 32, true, 0, complain_overflow_signed, 0,
+	 "PCREL_32", true, 0xffffffff,0xffffffff, false),
 };
 
 #define CTOR_TABLE_RELOC_HOWTO(BFD) (MY (howto_table) + 14)
@@ -143,12 +144,12 @@ reloc_howto_type MY (howto_table)[] =
 static reloc_howto_type *
 MY (reloc_howto) (bfd *abfd ATTRIBUTE_UNUSED,
 		  struct reloc_std_external *rel,
-		  int *r_index,
+		  unsigned int *r_index,
 		  int *r_extern,
 		  int *r_pcrel)
 {
   unsigned int r_length;
-  int r_ns32k_type;
+  unsigned int r_ns32k_type;
 
   *r_index =  ((rel->r_index[2] << 16)
 	       | (rel->r_index[1] << 8)
@@ -159,6 +160,8 @@ MY (reloc_howto) (bfd *abfd ATTRIBUTE_UN
 		>> RELOC_STD_BITS_LENGTH_SH_LITTLE);
   r_ns32k_type  =  ((rel->r_type[0] & RELOC_STD_BITS_NS32K_TYPE_LITTLE)
 		    >> RELOC_STD_BITS_NS32K_TYPE_SH_LITTLE);
+  if (r_length > 2 || r_ns32k_type > 2)
+    return NULL;
   return (MY (howto_table) + r_length + 3 * (*r_pcrel) + 6 * r_ns32k_type);
 }
 
@@ -178,7 +181,7 @@ MY (put_reloc) (bfd *abfd,
   int r_ns32k_type;
 
   PUT_WORD (abfd, value, reloc->r_address);
-  r_length = howto->size ;	/* Size as a power of two.  */
+  r_length = bfd_log2 (bfd_get_reloc_size (howto));
   r_pcrel  = (int) howto->pc_relative; /* Relative to PC?  */
   r_ns32k_type = (howto - MY (howto_table) )/6;
 
@@ -271,7 +274,7 @@ MY_swap_std_reloc_in (bfd *abfd,
 		      asymbol **symbols,
 		      bfd_size_type symcount ATTRIBUTE_UNUSED)
 {
-  int r_index;
+  unsigned int r_index;
   int r_extern;
   int r_pcrel;
   struct aoutdata  *su = &(abfd->tdata.aout_data->a);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout-target.h ./bfd/aout-target.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout-target.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aout-target.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Define a target vector and some small routines for a variant of a.out.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -34,7 +34,7 @@ extern reloc_howto_type * NAME (aout, re
    This routine is called from some_aout_object_p just before it returns.  */
 #ifndef MY_callback
 
-static const bfd_target *
+static bfd_cleanup
 MY (callback) (bfd *abfd)
 {
   struct internal_exec *execp = exec_hdr (abfd);
@@ -121,22 +121,22 @@ MY (callback) (bfd *abfd)
   /* Don't set sizes now -- can't be sure until we know arch & mach.
      Sizes get set in set_sizes callback, later.  */
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 #endif
 
 #ifndef MY_object_p
 /* Finish up the reading of an a.out file header.  */
 
-static const bfd_target *
+static bfd_cleanup
 MY (object_p) (bfd *abfd)
 {
   struct external_exec exec_bytes;	/* Raw exec header from file.  */
   struct internal_exec exec;		/* Cleaned-up exec header.  */
-  const bfd_target *target;
-  bfd_size_type amt = EXEC_BYTES_SIZE;
+  bfd_cleanup cleanup;
+  size_t amt = EXEC_BYTES_SIZE;
 
-  if (bfd_bread ((void *) &exec_bytes, amt, abfd) != amt)
+  if (bfd_read (&exec_bytes, amt, abfd) != amt)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -164,7 +164,7 @@ MY (object_p) (bfd *abfd)
   exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
 #endif
 
-  target = NAME (aout, some_aout_object_p) (abfd, &exec, MY (callback));
+  cleanup = NAME (aout, some_aout_object_p) (abfd, &exec, MY (callback));
 
 #ifdef ENTRY_CAN_BE_ZERO
   /* The NEWSOS3 entry-point is/was 0, which (amongst other lossage)
@@ -180,19 +180,20 @@ MY (object_p) (bfd *abfd)
 #ifndef S_IXUSR
 #define S_IXUSR 0100	/* Execute by owner.  */
 #endif
-      if (stat (abfd->filename, &buf) == 0 && (buf.st_mode & S_IXUSR))
+      if (stat (bfd_get_filename (abfd), &buf) == 0
+	  && (buf.st_mode & S_IXUSR) != 0)
 	abfd->flags |= EXEC_P;
     }
 #endif /* ENTRY_CAN_BE_ZERO */
 
-  return target;
+  return cleanup;
 }
 #define MY_object_p MY (object_p)
 #endif
 
 #ifndef MY_mkobject
 
-static bfd_boolean
+static bool
 MY (mkobject) (bfd *abfd)
 {
   return NAME (aout, mkobject (abfd));
@@ -209,7 +210,7 @@ MY (mkobject) (bfd *abfd)
    section contents, and copy_private_bfd_data is not called until
    after the section contents have been set.  */
 
-static bfd_boolean
+static bool
 MY_bfd_copy_private_section_data (bfd *ibfd,
 				  asection *isec ATTRIBUTE_UNUSED,
 				  bfd *obfd,
@@ -218,7 +219,7 @@ MY_bfd_copy_private_section_data (bfd *i
   if (bfd_get_flavour (ibfd) == bfd_target_aout_flavour
       && bfd_get_flavour (obfd) == bfd_target_aout_flavour)
     obj_aout_subformat (obfd) = obj_aout_subformat (ibfd);
-  return TRUE;
+  return true;
 }
 
 #endif
@@ -229,7 +230,7 @@ MY_bfd_copy_private_section_data (bfd *i
 
 #ifndef MY_write_object_contents
 
-static bfd_boolean
+static bool
 MY (write_object_contents) (bfd *abfd)
 {
   struct external_exec exec_bytes;
@@ -239,14 +240,14 @@ MY (write_object_contents) (bfd *abfd)
 
   WRITE_HEADERS (abfd, execp);
 
-  return TRUE;
+  return true;
 }
 #define MY_write_object_contents MY (write_object_contents)
 #endif
 
 #ifndef MY_set_sizes
 
-static bfd_boolean
+static bool
 MY (set_sizes) (bfd *abfd)
 {
   adata(abfd).page_size = TARGET_PAGE_SIZE;
@@ -259,7 +260,7 @@ MY (set_sizes) (bfd *abfd)
 #endif
 
   adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
-  return TRUE;
+  return true;
 }
 #define MY_set_sizes MY (set_sizes)
 #endif
@@ -344,7 +345,7 @@ MY_final_link_callback (bfd *abfd,
 /* Final link routine.  We need to use a call back to get the correct
    offsets in the output file.  */
 
-static bfd_boolean
+static bool
 MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   return NAME (aout, final_link) (abfd, info, MY_final_link_callback);
@@ -474,6 +475,9 @@ MY_bfd_final_link (bfd *abfd, struct bfd
 #ifndef MY_find_nearest_line
 #define MY_find_nearest_line NAME (aout, find_nearest_line)
 #endif
+#ifndef MY_find_nearest_line_with_alt
+#define MY_find_nearest_line_with_alt _bfd_nosymbols_find_nearest_line_with_alt
+#endif
 #ifndef MY_find_line
 #define MY_find_line _bfd_nosymbols_find_line
 #endif
@@ -594,18 +598,7 @@ MY_bfd_final_link (bfd *abfd, struct bfd
 #endif
 
 #ifndef MY_close_and_cleanup
-
-/* Handle closing of a BFD including the resource-releasing parts.  */
-
-static bfd_boolean
-MY_close_and_cleanup (bfd *abfd)
-{
-  if (!MY_bfd_free_cached_info (abfd))
-    return FALSE;
-
-  return _bfd_generic_close_and_cleanup (abfd);
-}
-
+#define MY_close_and_cleanup _bfd_generic_close_and_cleanup
 #endif
 
 #ifndef MY_get_dynamic_symtab_upper_bound
@@ -659,6 +652,7 @@ const bfd_target MY (vec) =
   AR_PAD_CHAR,			/* AR_pad_char.  */
   15,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 #ifdef TARGET_IS_BIG_ENDIAN_P
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
      bfd_getb32, bfd_getb_signed_32, bfd_putb32,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout-tic30.c ./bfd/aout-tic30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aout-tic30.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aout-tic30.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1173 +0,0 @@
-/* BFD back-end for TMS320C30 a.out binaries.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
-   Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-   02110-1301, USA.  */
-
-#define TARGET_IS_BIG_ENDIAN_P
-#define N_HEADER_IN_TEXT(x)	1
-#define TEXT_START_ADDR		1024
-#define TARGET_PAGE_SIZE	128
-#define SEGMENT_SIZE		TARGET_PAGE_SIZE
-#define DEFAULT_ARCH		bfd_arch_tic30
-#define ARCH_SIZE 32
-
-/* Do not "beautify" the CONCAT* macro args.  Traditional C will not
-   remove whitespace added here, and thus will fail to concatenate
-   the tokens.  */
-#define MY(OP) CONCAT2 (tic30_aout_,OP)
-#define TARGETNAME "a.out-tic30"
-#define NAME(x,y) CONCAT3 (tic30_aout,_32_,y)
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libaout.h"
-#include "aout/aout64.h"
-#include "aout/stab_gnu.h"
-#include "aout/ar.h"
-
-#define MY_reloc_howto(BFD, REL, IN, EX, PC)   tic30_aout_reloc_howto (BFD, REL, & IN, & EX, & PC)
-
-#define MY_final_link_relocate	  tic30_aout_final_link_relocate
-#define MY_object_p		  tic30_aout_object_p
-#define MY_mkobject		  NAME (aout,mkobject)
-#define MY_write_object_contents  tic30_aout_write_object_contents
-#define MY_set_sizes		  tic30_aout_set_sizes
-
-#ifndef MY_exec_hdr_flags
-#define MY_exec_hdr_flags 1
-#endif
-
-#ifndef MY_backend_data
-
-#ifndef MY_zmagic_contiguous
-#define MY_zmagic_contiguous 0
-#endif
-#ifndef MY_text_includes_header
-#define MY_text_includes_header 0
-#endif
-#ifndef MY_entry_is_text_address
-#define MY_entry_is_text_address 0
-#endif
-#ifndef MY_exec_header_not_counted
-#define MY_exec_header_not_counted 1
-#endif
-#ifndef MY_add_dynamic_symbols
-#define MY_add_dynamic_symbols 0
-#endif
-#ifndef MY_add_one_symbol
-#define MY_add_one_symbol 0
-#endif
-#ifndef MY_link_dynamic_object
-#define MY_link_dynamic_object 0
-#endif
-#ifndef MY_write_dynamic_symbol
-#define MY_write_dynamic_symbol 0
-#endif
-#ifndef MY_check_dynamic_reloc
-#define MY_check_dynamic_reloc 0
-#endif
-#ifndef MY_finish_dynamic_link
-#define MY_finish_dynamic_link 0
-#endif
-
-static bfd_boolean
-tic30_aout_set_sizes (bfd *abfd)
-{
-  adata (abfd).page_size = TARGET_PAGE_SIZE;
-
-#ifdef SEGMENT_SIZE
-  adata (abfd).segment_size = SEGMENT_SIZE;
-#else
-  adata (abfd).segment_size = TARGET_PAGE_SIZE;
-#endif
-
-#ifdef ZMAGIC_DISK_BLOCK_SIZE
-  adata (abfd).zmagic_disk_block_size = ZMAGIC_DISK_BLOCK_SIZE;
-#else
-  adata (abfd).zmagic_disk_block_size = TARGET_PAGE_SIZE;
-#endif
-
-  adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE;
-
-  return TRUE;
-}
-
-static const struct aout_backend_data tic30_aout_backend_data =
-{
-  MY_zmagic_contiguous,
-  MY_text_includes_header,
-  MY_entry_is_text_address,
-  MY_exec_hdr_flags,
-  0,				/* Text vma?  */
-  MY_set_sizes,
-  MY_exec_header_not_counted,
-  MY_add_dynamic_symbols,
-  MY_add_one_symbol,
-  MY_link_dynamic_object,
-  MY_write_dynamic_symbol,
-  MY_check_dynamic_reloc,
-  MY_finish_dynamic_link
-};
-#define MY_backend_data &tic30_aout_backend_data
-#endif
-
-static reloc_howto_type *
-  tic30_aout_reloc_howto (bfd *, struct reloc_std_external *, int *, int *, int *);
-static bfd_reloc_status_type
-  tic30_aout_final_link_relocate
-    (reloc_howto_type *, bfd *, asection *, bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
-
-/* FIXME: This is wrong.  aoutx.h should really only be included by
-   aout32.c.  */
-
-#include "aoutx.h"
-
-/* This function is used to work out pc-relative offsets for the
-   TMS320C30.  The data already placed by md_pcrel_from within gas is
-   useless for a relocation, so we just get the offset value and place
-   a version of this within the object code.
-   tic30_aout_final_link_relocate will then calculate the required
-   relocation to add on to the value in the object code.  */
-
-static bfd_reloc_status_type
-tic30_aout_fix_pcrel_16 (bfd *abfd,
-			 arelent *reloc_entry,
-			 asymbol *symbol ATTRIBUTE_UNUSED,
-			 void * data,
-			 asection *input_section ATTRIBUTE_UNUSED,
-			 bfd *output_bfd ATTRIBUTE_UNUSED,
-			 char **error_message ATTRIBUTE_UNUSED)
-{
-  bfd_vma relocation = 1;
-  bfd_byte offset_data = bfd_get_8 (abfd, (bfd_byte *) data + reloc_entry->address - 1);
-
-  /* The byte before the location of the fix contains bits 23-16 of
-     the pcrel instruction.  Bit 21 is set for a delayed instruction
-     which requires on offset of 3 instead of 1.  */
-  if (offset_data & 0x20)
-    relocation -= 3;
-  else
-    relocation -= 1;
-  bfd_put_16 (abfd, relocation, (bfd_byte *) data + reloc_entry->address);
-  return bfd_reloc_ok;
-}
-
-/* This function is used as a callback for 16-bit relocs.  This is
-   required for relocations between segments.  A line in aoutx.h
-   requires that any relocations for the data section should point to
-   the end of the aligned text section, plus an offset.  By default,
-   this does not happen, therefore this function takes care of
-   that.  */
-
-static bfd_reloc_status_type
-tic30_aout_fix_16 (bfd *abfd,
-		   arelent *reloc_entry,
-		   asymbol *symbol,
-		   void * data,
-		   asection *input_section ATTRIBUTE_UNUSED,
-		   bfd *output_bfd,
-		   char **error_message ATTRIBUTE_UNUSED)
-{
-  bfd_vma relocation;
-
-  /* Make sure that the symbol's section is defined.  */
-  if (bfd_is_und_section (symbol->section) && (symbol->flags & BSF_WEAK) == 0)
-    return output_bfd ? bfd_reloc_ok : bfd_reloc_undefined;
-  /* Get the size of the input section and turn it into the TMS320C30
-     32-bit address format.  */
-  relocation = (symbol->section->vma >> 2);
-  relocation += bfd_get_16 (abfd, (bfd_byte *) data + reloc_entry->address);
-  bfd_put_16 (abfd, relocation, (bfd_byte *) data + reloc_entry->address);
-  return bfd_reloc_ok;
-}
-
-/* This function does the same thing as tic30_aout_fix_16 except for 32
-   bit relocations.  */
-
-static bfd_reloc_status_type
-tic30_aout_fix_32 (bfd *abfd,
-		   arelent *reloc_entry,
-		   asymbol *symbol,
-		   void * data,
-		   asection *input_section ATTRIBUTE_UNUSED,
-		   bfd *output_bfd,
-		   char **error_message ATTRIBUTE_UNUSED)
-{
-  bfd_vma relocation;
-
-  /* Make sure that the symbol's section is defined.  */
-  if (bfd_is_und_section (symbol->section) && (symbol->flags & BSF_WEAK) == 0)
-    return output_bfd ? bfd_reloc_ok : bfd_reloc_undefined;
-  /* Get the size of the input section and turn it into the TMS320C30
-     32-bit address format.  */
-  relocation = (symbol->section->vma >> 2);
-  relocation += bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
-  bfd_put_32 (abfd, relocation, (bfd_byte *) data + reloc_entry->address);
-  return bfd_reloc_ok;
-}
-
-/* This table lists the relocation types for the TMS320C30.  There are
-   only a few relocations required, and all must be divided by 4 (>>
-   2) to get the 32-bit addresses in the format the TMS320C30 likes
-   it.  */
-reloc_howto_type tic30_aout_howto_table[] =
-{
-  EMPTY_HOWTO (-1),
-  HOWTO (1, 2, 1, 16, FALSE, 0, 0, tic30_aout_fix_16,
-	 "16", FALSE, 0x0000FFFF, 0x0000FFFF, FALSE),
-  HOWTO (2, 2, 2, 24, FALSE, 0, complain_overflow_bitfield, NULL,
-	 "24", FALSE, 0x00FFFFFF, 0x00FFFFFF, FALSE),
-  HOWTO (3, 18, 3, 24, FALSE, 0, complain_overflow_bitfield, NULL,
-	 "LDP", FALSE, 0x00FF0000, 0x000000FF, FALSE),
-  HOWTO (4, 2, 4, 32, FALSE, 0, complain_overflow_bitfield, tic30_aout_fix_32,
-	 "32", FALSE, 0xFFFFFFFF, 0xFFFFFFFF, FALSE),
-  HOWTO (5, 2, 1, 16, TRUE, 0, complain_overflow_signed,
-	 tic30_aout_fix_pcrel_16, "PCREL", TRUE, 0x0000FFFF, 0x0000FFFF, TRUE),
-  EMPTY_HOWTO (-1),
-  EMPTY_HOWTO (-1),
-  EMPTY_HOWTO (-1),
-  EMPTY_HOWTO (-1),
-  EMPTY_HOWTO (-1)
-};
-
-
-static reloc_howto_type *
-tic30_aout_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			      bfd_reloc_code_real_type code)
-{
-  switch (code)
-    {
-    case BFD_RELOC_8:
-    case BFD_RELOC_TIC30_LDP:
-      return &tic30_aout_howto_table[3];
-    case BFD_RELOC_16:
-      return &tic30_aout_howto_table[1];
-    case BFD_RELOC_24:
-      return &tic30_aout_howto_table[2];
-    case BFD_RELOC_16_PCREL:
-      return &tic30_aout_howto_table[5];
-    case BFD_RELOC_32:
-      return &tic30_aout_howto_table[4];
-    default:
-      return NULL;
-    }
-}
-
-static reloc_howto_type *
-tic30_aout_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			      const char *r_name)
-{
-  unsigned int i;
-
-  for (i = 0;
-       i < (sizeof (tic30_aout_howto_table)
-	    / sizeof (tic30_aout_howto_table[0]));
-       i++)
-    if (tic30_aout_howto_table[i].name != NULL
-	&& strcasecmp (tic30_aout_howto_table[i].name, r_name) == 0)
-      return &tic30_aout_howto_table[i];
-
-  return NULL;
-}
-
-static reloc_howto_type *
-tic30_aout_reloc_howto (bfd *abfd,
-			struct reloc_std_external *relocs,
-			int *r_index,
-			int *r_extern,
-			int *r_pcrel)
-{
-  unsigned int r_length;
-  unsigned int r_pcrel_done;
-  int howto_index;
-
-  *r_pcrel = 0;
-  if (bfd_header_big_endian (abfd))
-    {
-      *r_index = ((relocs->r_index[0] << 16) | (relocs->r_index[1] << 8) | relocs->r_index[2]);
-      *r_extern = (0 != (relocs->r_type[0] & RELOC_STD_BITS_EXTERN_BIG));
-      r_pcrel_done = (0 != (relocs->r_type[0] & RELOC_STD_BITS_PCREL_BIG));
-      r_length = ((relocs->r_type[0] & RELOC_STD_BITS_LENGTH_BIG) >> RELOC_STD_BITS_LENGTH_SH_BIG);
-    }
-  else
-    {
-      *r_index = ((relocs->r_index[2] << 16) | (relocs->r_index[1] << 8) | relocs->r_index[0]);
-      *r_extern = (0 != (relocs->r_type[0] & RELOC_STD_BITS_EXTERN_LITTLE));
-      r_pcrel_done = (0 != (relocs->r_type[0] & RELOC_STD_BITS_PCREL_LITTLE));
-      r_length = ((relocs->r_type[0] & RELOC_STD_BITS_LENGTH_LITTLE) >> RELOC_STD_BITS_LENGTH_SH_LITTLE);
-    }
-  howto_index = r_length + 4 * r_pcrel_done;
-  return tic30_aout_howto_table + howto_index;
-}
-
-/* These macros will get 24-bit values from the bfd definition.
-   Big-endian only.  */
-#define bfd_getb_24(BFD,ADDR)			\
- (bfd_get_8 (BFD, ADDR    ) << 16) |		\
- (bfd_get_8 (BFD, ADDR + 1) <<  8) |		\
- (bfd_get_8 (BFD, ADDR + 2)      )
-
-#define bfd_putb_24(BFD,DATA,ADDR)				\
- bfd_put_8 (BFD, (bfd_byte) ((DATA >> 16) & 0xFF), ADDR	   );	\
- bfd_put_8 (BFD, (bfd_byte) ((DATA >>  8) & 0xFF), ADDR + 1);	\
- bfd_put_8 (BFD, (bfd_byte) ( DATA	  & 0xFF), ADDR + 2)
-
-/* Set parameters about this a.out file that are machine-dependent.
-   This routine is called from some_aout_object_p just before it returns.  */
-
-static const bfd_target *
-tic30_aout_callback (bfd *abfd)
-{
-  struct internal_exec *execp = exec_hdr (abfd);
-  unsigned int arch_align_power;
-  unsigned long arch_align;
-
-  /* Calculate the file positions of the parts of a newly read aout header.  */
-  obj_textsec (abfd)->size = N_TXTSIZE (execp);
-
-  /* The virtual memory addresses of the sections.  */
-  obj_textsec (abfd)->vma = N_TXTADDR (execp);
-  obj_datasec (abfd)->vma = N_DATADDR (execp);
-  obj_bsssec (abfd)->vma = N_BSSADDR (execp);
-
-  obj_textsec (abfd)->lma = obj_textsec (abfd)->vma;
-  obj_datasec (abfd)->lma = obj_datasec (abfd)->vma;
-  obj_bsssec (abfd)->lma = obj_bsssec (abfd)->vma;
-
-  /* The file offsets of the sections.  */
-  obj_textsec (abfd)->filepos = N_TXTOFF (execp);
-  obj_datasec (abfd)->filepos = N_DATOFF (execp);
-
-  /* The file offsets of the relocation info.  */
-  obj_textsec (abfd)->rel_filepos = N_TRELOFF (execp);
-  obj_datasec (abfd)->rel_filepos = N_DRELOFF (execp);
-
-  /* The file offsets of the string table and symbol table.  */
-  obj_sym_filepos (abfd) = N_SYMOFF (execp);
-  obj_str_filepos (abfd) = N_STROFF (execp);
-
-  /* Determine the architecture and machine type of the object file.  */
-#ifdef SET_ARCH_MACH
-  SET_ARCH_MACH (abfd, execp);
-#else
-  bfd_default_set_arch_mach (abfd, DEFAULT_ARCH, 0L);
-#endif
-
-  /* Now that we know the architecture, set the alignments of the
-     sections.  This is normally done by NAME (aout,new_section_hook),
-     but when the initial sections were created the architecture had
-     not yet been set.  However, for backward compatibility, we don't
-     set the alignment power any higher than as required by the size
-     of the section.  */
-  arch_align_power = bfd_get_arch_info (abfd)->section_align_power;
-  arch_align = 1 << arch_align_power;
-  if ((BFD_ALIGN (obj_textsec (abfd)->size, arch_align)
-       == obj_textsec (abfd)->size)
-      && (BFD_ALIGN (obj_datasec (abfd)->size, arch_align)
-	  == obj_datasec (abfd)->size)
-      && (BFD_ALIGN (obj_bsssec (abfd)->size, arch_align)
-	  == obj_bsssec (abfd)->size))
-    {
-      obj_textsec (abfd)->alignment_power = arch_align_power;
-      obj_datasec (abfd)->alignment_power = arch_align_power;
-      obj_bsssec (abfd)->alignment_power = arch_align_power;
-    }
-  return abfd->xvec;
-}
-
-static bfd_reloc_status_type
-tic30_aout_relocate_contents (reloc_howto_type *howto,
-			      bfd *input_bfd,
-			      bfd_vma relocation,
-			      bfd_byte *location)
-{
-  bfd_vma x;
-  bfd_boolean overflow;
-
-  if (howto->size < 0)
-    relocation = -relocation;
-
-  switch (howto->size)
-    {
-    default:
-    case 0:
-      abort ();
-      break;
-    case 1:
-      x = bfd_get_16 (input_bfd, location);
-      break;
-    case 2:
-      x = bfd_getb_24 (input_bfd, location);
-      break;
-    case 3:
-      x = bfd_get_8 (input_bfd, location);
-      break;
-    case 4:
-      x = bfd_get_32 (input_bfd, location);
-      break;
-    }
-
-  overflow = FALSE;
-
-  if (howto->complain_on_overflow != complain_overflow_dont)
-    {
-      bfd_vma check;
-      bfd_signed_vma signed_check;
-      bfd_vma add;
-      bfd_signed_vma signed_add;
-
-      if (howto->rightshift == 0)
-	{
-	  check = relocation;
-	  signed_check = (bfd_signed_vma) relocation;
-	}
-      else
-	{
-	  check = relocation >> howto->rightshift;
-	  if ((bfd_signed_vma) relocation >= 0)
-	    signed_check = check;
-	  else
-	    signed_check = (check | ((bfd_vma) - 1 & ~((bfd_vma) - 1 >> howto->rightshift)));
-	}
-      add = x & howto->src_mask;
-      signed_add = add;
-      if ((add & (((~howto->src_mask) >> 1) & howto->src_mask)) != 0)
-	signed_add -= (((~howto->src_mask) >> 1) & howto->src_mask) << 1;
-      if (howto->bitpos == 0)
-	{
-	  check += add;
-	  signed_check += signed_add;
-	}
-      else
-	{
-	  check += add >> howto->bitpos;
-	  if (signed_add >= 0)
-	    signed_check += add >> howto->bitpos;
-	  else
-	    signed_check += ((add >> howto->bitpos) | ((bfd_vma) - 1 & ~((bfd_vma) - 1 >> howto->bitpos)));
-	}
-      switch (howto->complain_on_overflow)
-	{
-	case complain_overflow_signed:
-	  {
-	    bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1;
-	    bfd_signed_vma reloc_signed_min = ~reloc_signed_max;
-
-	    if (signed_check > reloc_signed_max || signed_check < reloc_signed_min)
-	      overflow = TRUE;
-	  }
-	  break;
-	case complain_overflow_unsigned:
-	  {
-	    bfd_vma reloc_unsigned_max = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
-
-	    if (check > reloc_unsigned_max)
-	      overflow = TRUE;
-	  }
-	  break;
-	case complain_overflow_bitfield:
-	  {
-	    bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
-
-	    if ((check & ~reloc_bits) != 0
-		&& (((bfd_vma) signed_check & ~reloc_bits)
-		    != ((bfd_vma) -1 & ~reloc_bits)))
-	      overflow = TRUE;
-	  }
-	  break;
-	default:
-	  abort ();
-	}
-    }
-  relocation >>= (bfd_vma) howto->rightshift;
-  relocation <<= (bfd_vma) howto->bitpos;
-  x = ((x & ~howto->dst_mask) | (((x & howto->src_mask) + relocation) & howto->dst_mask));
-  switch (howto->size)
-    {
-    default:
-    case 0:
-      abort ();
-      break;
-    case 1:
-      bfd_put_16 (input_bfd, x, location);
-      break;
-    case 2:
-      bfd_putb_24 (input_bfd, x, location);
-      break;
-    case 3:
-      bfd_put_8 (input_bfd, x, location);
-      break;
-    case 4:
-      bfd_put_32 (input_bfd, x, location);
-      break;
-    }
-  return overflow ? bfd_reloc_overflow : bfd_reloc_ok;
-}
-
-static bfd_reloc_status_type
-tic30_aout_final_link_relocate (reloc_howto_type *howto,
-				bfd *input_bfd,
-				asection *input_section,
-				bfd_byte *contents,
-				bfd_vma address,
-				bfd_vma value,
-				bfd_vma addend)
-{
-  bfd_vma relocation;
-
-  if (address > bfd_get_section_limit (input_bfd, input_section))
-    return bfd_reloc_outofrange;
-
-  relocation = value + addend;
-  if (howto->pc_relative)
-    {
-      relocation -= (input_section->output_section->vma + input_section->output_offset);
-      if (howto->pcrel_offset)
-	relocation -= address;
-    }
-  return tic30_aout_relocate_contents (howto, input_bfd, relocation,
-				       contents + address);
-}
-
-/* Finish up the reading of an a.out file header.  */
-
-static const bfd_target *
-tic30_aout_object_p (bfd *abfd)
-{
-  struct external_exec exec_bytes;	/* Raw exec header from file.  */
-  struct internal_exec exec;		/* Cleaned-up exec header.  */
-  const bfd_target *target;
-  bfd_size_type amt = EXEC_BYTES_SIZE;
-
-  if (bfd_bread (& exec_bytes, amt, abfd) != amt)
-    {
-      if (bfd_get_error () != bfd_error_system_call)
-	bfd_set_error (bfd_error_wrong_format);
-      return 0;
-    }
-
-#ifdef SWAP_MAGIC
-  exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
-#else
-  exec.a_info = H_GET_32 (abfd, exec_bytes.e_info);
-#endif /* SWAP_MAGIC */
-
-  if (N_BADMAG (&exec))
-    return 0;
-#ifdef MACHTYPE_OK
-  if (!(MACHTYPE_OK (N_MACHTYPE (&exec))))
-    return 0;
-#endif
-
-  NAME (aout, swap_exec_header_in) (abfd, &exec_bytes, &exec);
-
-#ifdef SWAP_MAGIC
-  /* Swap_exec_header_in read in a_info with the wrong byte order.  */
-  exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
-#endif
-
-  target = NAME (aout, some_aout_object_p) (abfd, &exec, tic30_aout_callback);
-
-#ifdef ENTRY_CAN_BE_ZERO
-  /* The NEWSOS3 entry-point is/was 0, which (amongst other lossage)
-     means that it isn't obvious if EXEC_P should be set.
-     All of the following must be true for an executable:
-     There must be no relocations, the bfd can be neither an
-     archive nor an archive element, and the file must be executable.  */
-
-  if (exec.a_trsize + exec.a_drsize == 0
-      && bfd_get_format (abfd) == bfd_object && abfd->my_archive == NULL)
-    {
-      struct stat buf;
-#ifndef S_IXUSR
-#define S_IXUSR 0100		/* Execute by owner.  */
-#endif
-      if (stat (abfd->filename, &buf) == 0 && (buf.st_mode & S_IXUSR))
-	abfd->flags |= EXEC_P;
-    }
-#endif
-
-  return target;
-}
-
-/* Copy private section data.  This actually does nothing with the
-   sections.  It copies the subformat field.  We copy it here, because
-   we need to know whether this is a QMAGIC file before we set the
-   section contents, and copy_private_bfd_data is not called until
-   after the section contents have been set.  */
-
-static bfd_boolean
-MY_bfd_copy_private_section_data (bfd *ibfd,
-				  asection *isec ATTRIBUTE_UNUSED,
-				  bfd *obfd,
-				  asection *osec ATTRIBUTE_UNUSED)
-{
-  if (bfd_get_flavour (obfd) == bfd_target_aout_flavour)
-    obj_aout_subformat (obfd) = obj_aout_subformat (ibfd);
-  return TRUE;
-}
-
-/* Write an object file.
-   Section contents have already been written.  We write the
-   file header, symbols, and relocation.  */
-
-static bfd_boolean
-tic30_aout_write_object_contents (bfd *abfd)
-{
-  struct external_exec exec_bytes;
-  struct internal_exec *execp = exec_hdr (abfd);
-
-  obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
-
-  {
-    if (adata (abfd).magic == undecided_magic)
-      NAME (aout, adjust_sizes_and_vmas) (abfd);
-
-    execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE;
-    execp->a_entry = bfd_get_start_address (abfd);
-
-    execp->a_trsize = ((obj_textsec (abfd)->reloc_count) * obj_reloc_entry_size (abfd));
-    execp->a_drsize = ((obj_datasec (abfd)->reloc_count) * obj_reloc_entry_size (abfd));
-    NAME (aout, swap_exec_header_out) (abfd, execp, &exec_bytes);
-
-    if (adata (abfd).exec_bytes_size > 0)
-      {
-	bfd_size_type amt;
-
-	if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-	  return FALSE;
-	amt = adata (abfd).exec_bytes_size;
-	if (bfd_bwrite (& exec_bytes, amt, abfd) != amt)
-	  return FALSE;
-      }
-
-    /* Now write out reloc info, followed by syms and strings.  */
-    if (bfd_get_outsymbols (abfd) != (asymbol **) NULL
-	&& bfd_get_symcount (abfd) != 0)
-      {
-	if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (execp)), SEEK_SET) != 0)
-	  return FALSE;
-
-	if (!NAME (aout, write_syms) (abfd))
-	  return FALSE;
-      }
-
-    if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (execp)), SEEK_SET) != 0)
-      return FALSE;
-    if (!NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd)))
-      return FALSE;
-
-    if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (execp)), SEEK_SET) != 0)
-      return FALSE;
-    if (!NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd)))
-      return FALSE;
-  }
-
-  return TRUE;
-}
-
-#ifndef MY_final_link_callback
-
-/* Callback for the final_link routine to set the section offsets.  */
-
-static void
-MY_final_link_callback (bfd *abfd,
-			file_ptr *ptreloff,
-			file_ptr *pdreloff,
-			file_ptr *psymoff)
-{
-  struct internal_exec *execp = exec_hdr (abfd);
-
-  *ptreloff = obj_datasec (abfd)->filepos + execp->a_data;
-  *pdreloff = *ptreloff + execp->a_trsize;
-  *psymoff = *pdreloff + execp->a_drsize;
-}
-
-#endif
-
-#ifndef MY_bfd_final_link
-
-/* Final link routine.  We need to use a call back to get the correct
-   offsets in the output file.  */
-
-static bfd_boolean
-MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
-{
-  struct internal_exec *execp = exec_hdr (abfd);
-  asection *objsym_section;
-  file_ptr pos;
-  bfd_vma vma = 0;
-
-  /* Set the executable header size to 0, as we don't want one for an
-     output.  FIXME: Really?  tic30_aout_object_p doesn't accept such
-     an executable!  */
-  adata (abfd).exec_bytes_size = 0;
-
-  pos = adata (abfd).exec_bytes_size;
-  /* ??? Why are we looking at create_object_symbols_section?  */
-  objsym_section = info->create_object_symbols_section;
-  if (objsym_section != NULL)
-    vma = objsym_section->vma;
-
-  /* Text.  */
-  if (obj_textsec (abfd) != NULL)
-    {
-      pos += vma;
-      obj_textsec (abfd)->filepos = pos;
-      obj_textsec (abfd)->vma = vma;
-      obj_textsec (abfd)->user_set_vma = 1;
-      execp->a_text = obj_textsec (abfd)->size;
-      pos += obj_textsec (abfd)->size;
-      vma += obj_textsec (abfd)->size;
-    }
-
-  /* Data.  */
-  if (obj_datasec (abfd) != NULL)
-    {
-      if (abfd->flags & D_PAGED)
-	{
-	  if (objsym_section != NULL
-	      && objsym_section->next != NULL
-	      && objsym_section->next->vma != 0)
-	    obj_datasec (abfd)->vma = objsym_section->next->vma;
-	  else
-	    obj_datasec (abfd)->vma = BFD_ALIGN (vma, adata (abfd).segment_size);
-	}
-      else
-	obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4);
-
-      if (obj_datasec (abfd)->vma < vma)
-	obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4);
-
-      pos += obj_datasec (abfd)->vma - vma;
-      obj_datasec (abfd)->filepos = pos;
-      obj_datasec (abfd)->user_set_vma = 1;
-
-      vma = obj_datasec (abfd)->vma;
-      if (obj_textsec (abfd) != NULL)
-	{
-	  execp->a_text = vma - obj_textsec (abfd)->vma;
-	  obj_textsec (abfd)->size = execp->a_text;
-	}
-      execp->a_data = obj_datasec (abfd)->size;
-      vma += obj_datasec (abfd)->size;
-    }
-
-  /* Since BSS follows data immediately, see if it needs alignment.  */
-  if (obj_bsssec (abfd) != NULL)
-    {
-      int pad;
-
-      pad = align_power (vma, obj_bsssec (abfd)->alignment_power) - vma;
-      if (obj_datasec (abfd) != NULL)
-	{
-	  obj_datasec (abfd)->size += pad;
-	  execp->a_data += pad;
-	}
-      else if (obj_textsec (abfd) != NULL)
-	{
-	  obj_textsec (abfd)->size += pad;
-	  execp->a_text += pad;
-	}
-
-      /* BSS.  */
-      vma += pad;
-      obj_bsssec (abfd)->vma = vma;
-      obj_bsssec (abfd)->user_set_vma = 1;
-    }
-
-  /* We are fully resized, so don't readjust in final_link.  */
-  adata (abfd).magic = z_magic;
-
-  return NAME (aout, final_link) (abfd, info, MY_final_link_callback);
-}
-
-#endif
-
-static enum machine_type
-tic30_aout_machine_type (enum bfd_architecture arch,
-			 unsigned long machine ATTRIBUTE_UNUSED,
-			 bfd_boolean *unknown)
-{
-  enum machine_type arch_flags;
-
-  arch_flags = M_UNKNOWN;
-  *unknown = TRUE;
-
-  switch (arch)
-    {
-    case bfd_arch_tic30:
-      *unknown = FALSE;
-      break;
-    default:
-      arch_flags = M_UNKNOWN;
-    }
-  if (arch_flags != M_UNKNOWN)
-    *unknown = FALSE;
-  return arch_flags;
-}
-
-static bfd_boolean
-tic30_aout_set_arch_mach (bfd *abfd,
-			  enum bfd_architecture arch,
-			  unsigned long machine)
-{
-  if (!bfd_default_set_arch_mach (abfd, arch, machine))
-    return FALSE;
-  if (arch != bfd_arch_unknown)
-    {
-      bfd_boolean unknown;
-      tic30_aout_machine_type (arch, machine, &unknown);
-      if (unknown)
-	return FALSE;
-    }
-  obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
-  return (*aout_backend_info (abfd)->set_sizes) (abfd);
-}
-
-/* We assume BFD generic archive files.  */
-#ifndef	MY_openr_next_archived_file
-#define	MY_openr_next_archived_file	bfd_generic_openr_next_archived_file
-#endif
-#ifndef MY_get_elt_at_index
-#define MY_get_elt_at_index		_bfd_generic_get_elt_at_index
-#endif
-#ifndef	MY_generic_stat_arch_elt
-#define	MY_generic_stat_arch_elt	bfd_generic_stat_arch_elt
-#endif
-#ifndef	MY_slurp_armap
-#define	MY_slurp_armap			bfd_slurp_bsd_armap
-#endif
-#ifndef	MY_slurp_extended_name_table
-#define	MY_slurp_extended_name_table	_bfd_slurp_extended_name_table
-#endif
-#ifndef MY_construct_extended_name_table
-#define MY_construct_extended_name_table \
-  _bfd_archive_bsd_construct_extended_name_table
-#endif
-#ifndef	MY_write_armap
-#define	MY_write_armap			_bfd_bsd_write_armap
-#endif
-#ifndef MY_read_ar_hdr
-#define MY_read_ar_hdr			_bfd_generic_read_ar_hdr
-#endif
-#ifndef MY_write_ar_hdr
-#define MY_write_ar_hdr			_bfd_generic_write_ar_hdr
-#endif
-#ifndef	MY_truncate_arname
-#define	MY_truncate_arname		bfd_bsd_truncate_arname
-#endif
-#ifndef MY_update_armap_timestamp
-#define MY_update_armap_timestamp	_bfd_archive_bsd_update_armap_timestamp
-#endif
-
-/* No core file defined here -- configure in trad-core.c separately.  */
-#ifndef	MY_core_file_failing_command
-#define	MY_core_file_failing_command	_bfd_nocore_core_file_failing_command
-#endif
-#ifndef	MY_core_file_failing_signal
-#define	MY_core_file_failing_signal	_bfd_nocore_core_file_failing_signal
-#endif
-#ifndef	MY_core_file_matches_executable_p
-#define	MY_core_file_matches_executable_p	\
-				_bfd_nocore_core_file_matches_executable_p
-#endif
-#ifndef	MY_core_file_pid
-#define	MY_core_file_pid		_bfd_nocore_core_file_pid
-#endif
-#ifndef	MY_core_file_p
-#define	MY_core_file_p			_bfd_dummy_target
-#endif
-
-#ifndef MY_bfd_debug_info_start
-#define MY_bfd_debug_info_start		_bfd_void_bfd
-#endif
-#ifndef MY_bfd_debug_info_end
-#define MY_bfd_debug_info_end		_bfd_void_bfd
-#endif
-#ifndef MY_bfd_debug_info_accumulate
-#define MY_bfd_debug_info_accumulate	_bfd_void_bfd_asection
-#endif
-
-#ifndef MY_core_file_failing_command
-#define MY_core_file_failing_command NAME (aout, core_file_failing_command)
-#endif
-#ifndef MY_core_file_failing_signal
-#define MY_core_file_failing_signal NAME (aout, core_file_failing_signal)
-#endif
-#ifndef MY_core_file_matches_executable_p
-#define MY_core_file_matches_executable_p NAME (aout, core_file_matches_executable_p)
-#endif
-#ifndef MY_set_section_contents
-#define MY_set_section_contents NAME (aout, set_section_contents)
-#endif
-#ifndef MY_get_section_contents
-#define MY_get_section_contents aout_32_get_section_contents
-#endif
-#ifndef MY_get_section_contents_in_window
-#define MY_get_section_contents_in_window _bfd_generic_get_section_contents_in_window
-#endif
-#ifndef MY_new_section_hook
-#define MY_new_section_hook NAME (aout, new_section_hook)
-#endif
-#ifndef MY_get_symtab_upper_bound
-#define MY_get_symtab_upper_bound NAME (aout, get_symtab_upper_bound)
-#endif
-#ifndef MY_canonicalize_symtab
-#define MY_canonicalize_symtab NAME (aout, canonicalize_symtab)
-#endif
-#ifndef MY_get_reloc_upper_bound
-#define MY_get_reloc_upper_bound NAME (aout, get_reloc_upper_bound)
-#endif
-#ifndef MY_canonicalize_reloc
-#define MY_canonicalize_reloc NAME (aout, canonicalize_reloc)
-#endif
-#ifndef MY_set_reloc
-#define MY_set_reloc _bfd_generic_set_reloc
-#endif
-#ifndef MY_make_empty_symbol
-#define MY_make_empty_symbol NAME (aout, make_empty_symbol)
-#endif
-#ifndef MY_print_symbol
-#define MY_print_symbol NAME (aout, print_symbol)
-#endif
-#ifndef MY_get_symbol_info
-#define MY_get_symbol_info NAME (aout, get_symbol_info)
-#endif
-#ifndef MY_get_symbol_version_string
-#define MY_get_symbol_version_string \
-  _bfd_nosymbols_get_symbol_version_string
-#endif
-#ifndef MY_get_lineno
-#define MY_get_lineno NAME (aout, get_lineno)
-#endif
-#ifndef MY_set_arch_mach
-#define MY_set_arch_mach tic30_aout_set_arch_mach
-#endif
-#ifndef MY_find_nearest_line
-#define MY_find_nearest_line NAME (aout, find_nearest_line)
-#endif
-#ifndef MY_find_line
-#define MY_find_line _bfd_nosymbols_find_line
-#endif
-#ifndef MY_find_inliner_info
-#define MY_find_inliner_info _bfd_nosymbols_find_inliner_info
-#endif
-#ifndef MY_sizeof_headers
-#define MY_sizeof_headers NAME (aout, sizeof_headers)
-#endif
-#ifndef MY_bfd_get_relocated_section_contents
-#define MY_bfd_get_relocated_section_contents \
-			bfd_generic_get_relocated_section_contents
-#endif
-#ifndef MY_bfd_relax_section
-#define MY_bfd_relax_section bfd_generic_relax_section
-#endif
-#ifndef MY_bfd_gc_sections
-#define MY_bfd_gc_sections bfd_generic_gc_sections
-#endif
-#ifndef MY_bfd_lookup_section_flags
-#define MY_bfd_lookup_section_flags bfd_generic_lookup_section_flags
-#endif
-#ifndef MY_bfd_merge_sections
-#define MY_bfd_merge_sections bfd_generic_merge_sections
-#endif
-#ifndef MY_bfd_is_group_section
-#define MY_bfd_is_group_section bfd_generic_is_group_section
-#endif
-#ifndef MY_bfd_group_name
-#define MY_bfd_group_name bfd_generic_group_name
-#endif
-#ifndef MY_bfd_discard_group
-#define MY_bfd_discard_group bfd_generic_discard_group
-#endif
-#ifndef MY_section_already_linked
-#define MY_section_already_linked \
-  _bfd_generic_section_already_linked
-#endif
-#ifndef MY_bfd_define_common_symbol
-#define MY_bfd_define_common_symbol bfd_generic_define_common_symbol
-#endif
-#ifndef MY_bfd_link_hide_symbol
-#define MY_bfd_link_hide_symbol _bfd_generic_link_hide_symbol
-#endif
-#ifndef MY_bfd_define_start_stop
-#define MY_bfd_define_start_stop bfd_generic_define_start_stop
-#endif
-#ifndef MY_bfd_reloc_type_lookup
-#define MY_bfd_reloc_type_lookup tic30_aout_reloc_type_lookup
-#endif
-#ifndef MY_bfd_reloc_name_lookup
-#define MY_bfd_reloc_name_lookup tic30_aout_reloc_name_lookup
-#endif
-#ifndef MY_bfd_make_debug_symbol
-#define MY_bfd_make_debug_symbol 0
-#endif
-#ifndef MY_read_minisymbols
-#define MY_read_minisymbols NAME (aout, read_minisymbols)
-#endif
-#ifndef MY_minisymbol_to_symbol
-#define MY_minisymbol_to_symbol NAME (aout, minisymbol_to_symbol)
-#endif
-#ifndef MY_bfd_link_hash_table_create
-#define MY_bfd_link_hash_table_create NAME (aout, link_hash_table_create)
-#endif
-#ifndef MY_bfd_link_add_symbols
-#define MY_bfd_link_add_symbols NAME (aout, link_add_symbols)
-#endif
-#ifndef MY_bfd_link_just_syms
-#define MY_bfd_link_just_syms _bfd_generic_link_just_syms
-#endif
-#ifndef MY_bfd_copy_link_hash_symbol_type
-#define MY_bfd_copy_link_hash_symbol_type \
-  _bfd_generic_copy_link_hash_symbol_type
-#endif
-#ifndef MY_bfd_link_split_section
-#define MY_bfd_link_split_section  _bfd_generic_link_split_section
-#endif
-
-#ifndef MY_bfd_link_check_relocs
-#define MY_bfd_link_check_relocs   _bfd_generic_link_check_relocs
-#endif
-
-#ifndef MY_bfd_copy_private_bfd_data
-#define MY_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data
-#endif
-
-#ifndef MY_bfd_merge_private_bfd_data
-#define MY_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data
-#endif
-
-#ifndef MY_bfd_copy_private_symbol_data
-#define MY_bfd_copy_private_symbol_data _bfd_generic_bfd_copy_private_symbol_data
-#endif
-
-#ifndef MY_bfd_copy_private_header_data
-#define MY_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
-#endif
-
-#ifndef MY_bfd_print_private_bfd_data
-#define MY_bfd_print_private_bfd_data _bfd_generic_bfd_print_private_bfd_data
-#endif
-
-#ifndef MY_bfd_set_private_flags
-#define MY_bfd_set_private_flags _bfd_generic_bfd_set_private_flags
-#endif
-
-#ifndef MY_bfd_is_local_label_name
-#define MY_bfd_is_local_label_name bfd_generic_is_local_label_name
-#endif
-
-#ifndef MY_bfd_is_target_special_symbol
-#define MY_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false
-#endif
-
-#ifndef MY_bfd_free_cached_info
-#define MY_bfd_free_cached_info NAME (aout, bfd_free_cached_info)
-#endif
-
-#ifndef MY_close_and_cleanup
-#define MY_close_and_cleanup MY_bfd_free_cached_info
-#endif
-
-#ifndef MY_get_dynamic_symtab_upper_bound
-#define MY_get_dynamic_symtab_upper_bound \
-  _bfd_nodynamic_get_dynamic_symtab_upper_bound
-#endif
-#ifndef MY_canonicalize_dynamic_symtab
-#define MY_canonicalize_dynamic_symtab \
-  _bfd_nodynamic_canonicalize_dynamic_symtab
-#endif
-#ifndef MY_get_synthetic_symtab
-#define MY_get_synthetic_symtab \
-  _bfd_nodynamic_get_synthetic_symtab
-#endif
-#ifndef MY_get_dynamic_reloc_upper_bound
-#define MY_get_dynamic_reloc_upper_bound \
-  _bfd_nodynamic_get_dynamic_reloc_upper_bound
-#endif
-#ifndef MY_canonicalize_dynamic_reloc
-#define MY_canonicalize_dynamic_reloc \
-  _bfd_nodynamic_canonicalize_dynamic_reloc
-#endif
-
-/* Aout symbols normally have leading underscores.  */
-#ifndef MY_symbol_leading_char
-#define MY_symbol_leading_char '_'
-#endif
-
-/* Aout archives normally use spaces for padding.  */
-#ifndef AR_PAD_CHAR
-#define AR_PAD_CHAR ' '
-#endif
-
-#ifndef MY_BFD_TARGET
-const bfd_target tic30_aout_vec =
-{
-  TARGETNAME,			/* Name.  */
-  bfd_target_aout_flavour,
-  BFD_ENDIAN_BIG,		/* Target byte order (big).  */
-  BFD_ENDIAN_BIG,		/* Target headers byte order (big).  */
-  (HAS_RELOC |			/* Object flags.  */
-   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC),	/* Section flags.  */
-  MY_symbol_leading_char,
-  AR_PAD_CHAR,			/* AR_pad_char.  */
-  15,				/* AR_max_namelen.  */
-  0,				/* match priority.  */
-  bfd_getb64, bfd_getb_signed_64, bfd_putb64,
-  bfd_getb32, bfd_getb_signed_32, bfd_putb32,
-  bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
-  bfd_getb64, bfd_getb_signed_64, bfd_putb64,
-  bfd_getb32, bfd_getb_signed_32, bfd_putb32,
-  bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Headers.  */
-  {				/* bfd_check_format.  */
-    _bfd_dummy_target,
-    MY_object_p,
-    bfd_generic_archive_p,
-    MY_core_file_p
-  },
-  {				/* bfd_set_format.  */
-    _bfd_bool_bfd_false_error,
-    MY_mkobject,
-    _bfd_generic_mkarchive,
-    _bfd_bool_bfd_false_error
-  },
-  {				/* bfd_write_contents.  */
-    _bfd_bool_bfd_false_error,
-    MY_write_object_contents,
-    _bfd_write_archive_contents,
-    _bfd_bool_bfd_false_error
-  },
-
-  BFD_JUMP_TABLE_GENERIC (MY),
-  BFD_JUMP_TABLE_COPY (MY),
-  BFD_JUMP_TABLE_CORE (MY),
-  BFD_JUMP_TABLE_ARCHIVE (MY),
-  BFD_JUMP_TABLE_SYMBOLS (MY),
-  BFD_JUMP_TABLE_RELOCS (MY),
-  BFD_JUMP_TABLE_WRITE (MY),
-  BFD_JUMP_TABLE_LINK (MY),
-  BFD_JUMP_TABLE_DYNAMIC (MY),
-
-  NULL,
-
-  MY_backend_data
-};
-#endif /* MY_BFD_TARGET */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aoutx.h ./bfd/aoutx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/aoutx.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/aoutx.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD semi-generic back-end for a.out binaries.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -128,6 +128,18 @@ DESCRIPTION
 #include "aout/stab_gnu.h"
 #include "aout/ar.h"
 
+#ifdef BMAGIC
+#define N_IS_BMAGIC(x) (N_MAGIC (x) == BMAGIC)
+#else
+#define N_IS_BMAGIC(x) (0)
+#endif
+
+#ifdef QMAGIC
+#define N_SET_QMAGIC(x) N_SET_MAGIC (x, QMAGIC)
+#else
+#define N_SET_QMAGIC(x) do { /**/ } while (0)
+#endif
+
 /*
 SUBSECTION
 	Relocations
@@ -178,34 +190,34 @@ DESCRIPTION
 reloc_howto_type howto_table_ext[] =
 {
   /*	 Type	      rs   size bsz  pcrel bitpos ovrf			sf name		 part_inpl readmask setmask pcdone.  */
-  HOWTO (RELOC_8,	0,  0,	8,  FALSE, 0, complain_overflow_bitfield, 0, "8",	    FALSE, 0, 0x000000ff, FALSE),
-  HOWTO (RELOC_16,	0,  1,	16, FALSE, 0, complain_overflow_bitfield, 0, "16",	    FALSE, 0, 0x0000ffff, FALSE),
-  HOWTO (RELOC_32,	0,  2,	32, FALSE, 0, complain_overflow_bitfield, 0, "32",	    FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (RELOC_DISP8,	0,  0,	8,  TRUE,  0, complain_overflow_signed,	  0, "DISP8",	    FALSE, 0, 0x000000ff, FALSE),
-  HOWTO (RELOC_DISP16,	0,  1,	16, TRUE,  0, complain_overflow_signed,	  0, "DISP16",	    FALSE, 0, 0x0000ffff, FALSE),
-  HOWTO (RELOC_DISP32,	0,  2,	32, TRUE,  0, complain_overflow_signed,	  0, "DISP32",	    FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (RELOC_WDISP30, 2,  2,	30, TRUE,  0, complain_overflow_signed,	  0, "WDISP30",	    FALSE, 0, 0x3fffffff, FALSE),
-  HOWTO (RELOC_WDISP22, 2,  2,	22, TRUE,  0, complain_overflow_signed,	  0, "WDISP22",	    FALSE, 0, 0x003fffff, FALSE),
-  HOWTO (RELOC_HI22,   10,  2,	22, FALSE, 0, complain_overflow_bitfield, 0, "HI22",	    FALSE, 0, 0x003fffff, FALSE),
-  HOWTO (RELOC_22,	0,  2,	22, FALSE, 0, complain_overflow_bitfield, 0, "22",	    FALSE, 0, 0x003fffff, FALSE),
-  HOWTO (RELOC_13,	0,  2,	13, FALSE, 0, complain_overflow_bitfield, 0, "13",	    FALSE, 0, 0x00001fff, FALSE),
-  HOWTO (RELOC_LO10,	0,  2,	10, FALSE, 0, complain_overflow_dont,	  0, "LO10",	    FALSE, 0, 0x000003ff, FALSE),
-  HOWTO (RELOC_SFA_BASE,0,  2,	32, FALSE, 0, complain_overflow_bitfield, 0, "SFA_BASE",    FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (RELOC_SFA_OFF13,0, 2,	32, FALSE, 0, complain_overflow_bitfield, 0, "SFA_OFF13",   FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (RELOC_BASE10,	0,  2,	10, FALSE, 0, complain_overflow_dont,	  0, "BASE10",	    FALSE, 0, 0x000003ff, FALSE),
-  HOWTO (RELOC_BASE13,	0,  2,	13, FALSE, 0, complain_overflow_signed,	  0, "BASE13",	    FALSE, 0, 0x00001fff, FALSE),
-  HOWTO (RELOC_BASE22, 10,  2,	22, FALSE, 0, complain_overflow_bitfield, 0, "BASE22",	    FALSE, 0, 0x003fffff, FALSE),
-  HOWTO (RELOC_PC10,	0,  2,	10, TRUE,  0, complain_overflow_dont,	  0, "PC10",	    FALSE, 0, 0x000003ff, TRUE),
-  HOWTO (RELOC_PC22,   10,  2,	22, TRUE,  0, complain_overflow_signed,	  0, "PC22",	    FALSE, 0, 0x003fffff, TRUE),
-  HOWTO (RELOC_JMP_TBL, 2,  2,	30, TRUE,  0, complain_overflow_signed,	  0, "JMP_TBL",	    FALSE, 0, 0x3fffffff, FALSE),
-  HOWTO (RELOC_SEGOFF16,0,  2,	0,  FALSE, 0, complain_overflow_bitfield, 0, "SEGOFF16",    FALSE, 0, 0x00000000, FALSE),
-  HOWTO (RELOC_GLOB_DAT,0,  2,	0,  FALSE, 0, complain_overflow_bitfield, 0, "GLOB_DAT",    FALSE, 0, 0x00000000, FALSE),
-  HOWTO (RELOC_JMP_SLOT,0,  2,	0,  FALSE, 0, complain_overflow_bitfield, 0, "JMP_SLOT",    FALSE, 0, 0x00000000, FALSE),
-  HOWTO (RELOC_RELATIVE,0,  2,	0,  FALSE, 0, complain_overflow_bitfield, 0, "RELATIVE",    FALSE, 0, 0x00000000, FALSE),
-  HOWTO (0,		0,  3,	0,  FALSE, 0, complain_overflow_dont,	  0, "R_SPARC_NONE",FALSE, 0, 0x00000000, TRUE),
-  HOWTO (0,		0,  3,	0,  FALSE, 0, complain_overflow_dont,	  0, "R_SPARC_NONE",FALSE, 0, 0x00000000, TRUE),
+  HOWTO (RELOC_8,	0,  1,	8,  false, 0, complain_overflow_bitfield, 0, "8",	    false, 0, 0x000000ff, false),
+  HOWTO (RELOC_16,	0,  2,	16, false, 0, complain_overflow_bitfield, 0, "16",	    false, 0, 0x0000ffff, false),
+  HOWTO (RELOC_32,	0,  4,	32, false, 0, complain_overflow_bitfield, 0, "32",	    false, 0, 0xffffffff, false),
+  HOWTO (RELOC_DISP8,	0,  1,	8,  true,  0, complain_overflow_signed,	  0, "DISP8",	    false, 0, 0x000000ff, false),
+  HOWTO (RELOC_DISP16,	0,  2,	16, true,  0, complain_overflow_signed,	  0, "DISP16",	    false, 0, 0x0000ffff, false),
+  HOWTO (RELOC_DISP32,	0,  4,	32, true,  0, complain_overflow_signed,	  0, "DISP32",	    false, 0, 0xffffffff, false),
+  HOWTO (RELOC_WDISP30, 2,  4,	30, true,  0, complain_overflow_signed,	  0, "WDISP30",	    false, 0, 0x3fffffff, false),
+  HOWTO (RELOC_WDISP22, 2,  4,	22, true,  0, complain_overflow_signed,	  0, "WDISP22",	    false, 0, 0x003fffff, false),
+  HOWTO (RELOC_HI22,   10,  4,	22, false, 0, complain_overflow_bitfield, 0, "HI22",	    false, 0, 0x003fffff, false),
+  HOWTO (RELOC_22,	0,  4,	22, false, 0, complain_overflow_bitfield, 0, "22",	    false, 0, 0x003fffff, false),
+  HOWTO (RELOC_13,	0,  4,	13, false, 0, complain_overflow_bitfield, 0, "13",	    false, 0, 0x00001fff, false),
+  HOWTO (RELOC_LO10,	0,  4,	10, false, 0, complain_overflow_dont,	  0, "LO10",	    false, 0, 0x000003ff, false),
+  HOWTO (RELOC_SFA_BASE,0,  4,	32, false, 0, complain_overflow_bitfield, 0, "SFA_BASE",    false, 0, 0xffffffff, false),
+  HOWTO (RELOC_SFA_OFF13,0, 4,	32, false, 0, complain_overflow_bitfield, 0, "SFA_OFF13",   false, 0, 0xffffffff, false),
+  HOWTO (RELOC_BASE10,	0,  4,	10, false, 0, complain_overflow_dont,	  0, "BASE10",	    false, 0, 0x000003ff, false),
+  HOWTO (RELOC_BASE13,	0,  4,	13, false, 0, complain_overflow_signed,	  0, "BASE13",	    false, 0, 0x00001fff, false),
+  HOWTO (RELOC_BASE22, 10,  4,	22, false, 0, complain_overflow_bitfield, 0, "BASE22",	    false, 0, 0x003fffff, false),
+  HOWTO (RELOC_PC10,	0,  4,	10, true,  0, complain_overflow_dont,	  0, "PC10",	    false, 0, 0x000003ff, true),
+  HOWTO (RELOC_PC22,   10,  4,	22, true,  0, complain_overflow_signed,	  0, "PC22",	    false, 0, 0x003fffff, true),
+  HOWTO (RELOC_JMP_TBL, 2,  4,	30, true,  0, complain_overflow_signed,	  0, "JMP_TBL",	    false, 0, 0x3fffffff, false),
+  HOWTO (RELOC_SEGOFF16,0,  4,	0,  false, 0, complain_overflow_bitfield, 0, "SEGOFF16",    false, 0, 0x00000000, false),
+  HOWTO (RELOC_GLOB_DAT,0,  4,	0,  false, 0, complain_overflow_bitfield, 0, "GLOB_DAT",    false, 0, 0x00000000, false),
+  HOWTO (RELOC_JMP_SLOT,0,  4,	0,  false, 0, complain_overflow_bitfield, 0, "JMP_SLOT",    false, 0, 0x00000000, false),
+  HOWTO (RELOC_RELATIVE,0,  4,	0,  false, 0, complain_overflow_bitfield, 0, "RELATIVE",    false, 0, 0x00000000, false),
+  HOWTO (0,		0,  0,	0,  false, 0, complain_overflow_dont,	  0, "R_SPARC_NONE",false, 0, 0x00000000, true),
+  HOWTO (0,		0,  0,	0,  false, 0, complain_overflow_dont,	  0, "R_SPARC_NONE",false, 0, 0x00000000, true),
 #define RELOC_SPARC_REV32 RELOC_WDISP19
-  HOWTO (RELOC_SPARC_REV32, 0, 2, 32, FALSE, 0, complain_overflow_dont,	  0,"R_SPARC_REV32",FALSE, 0, 0xffffffff, FALSE),
+  HOWTO (RELOC_SPARC_REV32, 0, 4, 32, false, 0, complain_overflow_dont,	  0,"R_SPARC_REV32",false, 0, 0xffffffff, false),
 };
 
 /* Convert standard reloc records to "arelent" format (incl byte swap).  */
@@ -213,23 +225,23 @@ reloc_howto_type howto_table_ext[] =
 reloc_howto_type howto_table_std[] =
 {
   /* type	       rs size bsz  pcrel bitpos ovrf			  sf name     part_inpl readmask  setmask    pcdone.  */
-HOWTO ( 0,	       0,  0,	8,  FALSE, 0, complain_overflow_bitfield,0,"8",		TRUE, 0x000000ff,0x000000ff, FALSE),
-HOWTO ( 1,	       0,  1,	16, FALSE, 0, complain_overflow_bitfield,0,"16",	TRUE, 0x0000ffff,0x0000ffff, FALSE),
-HOWTO ( 2,	       0,  2,	32, FALSE, 0, complain_overflow_bitfield,0,"32",	TRUE, 0xffffffff,0xffffffff, FALSE),
-HOWTO ( 3,	       0,  4,	64, FALSE, 0, complain_overflow_bitfield,0,"64",	TRUE, 0xdeaddead,0xdeaddead, FALSE),
-HOWTO ( 4,	       0,  0,	8,  TRUE,  0, complain_overflow_signed,	 0,"DISP8",	TRUE, 0x000000ff,0x000000ff, FALSE),
-HOWTO ( 5,	       0,  1,	16, TRUE,  0, complain_overflow_signed,	 0,"DISP16",	TRUE, 0x0000ffff,0x0000ffff, FALSE),
-HOWTO ( 6,	       0,  2,	32, TRUE,  0, complain_overflow_signed,	 0,"DISP32",	TRUE, 0xffffffff,0xffffffff, FALSE),
-HOWTO ( 7,	       0,  4,	64, TRUE,  0, complain_overflow_signed,	 0,"DISP64",	TRUE, 0xfeedface,0xfeedface, FALSE),
-HOWTO ( 8,	       0,  2,	 0, FALSE, 0, complain_overflow_bitfield,0,"GOT_REL",	FALSE,	       0,0x00000000, FALSE),
-HOWTO ( 9,	       0,  1,	16, FALSE, 0, complain_overflow_bitfield,0,"BASE16",	FALSE,0xffffffff,0xffffffff, FALSE),
-HOWTO (10,	       0,  2,	32, FALSE, 0, complain_overflow_bitfield,0,"BASE32",	FALSE,0xffffffff,0xffffffff, FALSE),
+HOWTO ( 0,	       0,  1,	8,  false, 0, complain_overflow_bitfield,0,"8",		true, 0x000000ff,0x000000ff, false),
+HOWTO ( 1,	       0,  2,	16, false, 0, complain_overflow_bitfield,0,"16",	true, 0x0000ffff,0x0000ffff, false),
+HOWTO ( 2,	       0,  4,	32, false, 0, complain_overflow_bitfield,0,"32",	true, 0xffffffff,0xffffffff, false),
+HOWTO ( 3,	       0,  8,	64, false, 0, complain_overflow_bitfield,0,"64",	true, 0xdeaddead,0xdeaddead, false),
+HOWTO ( 4,	       0,  1,	8,  true,  0, complain_overflow_signed,	 0,"DISP8",	true, 0x000000ff,0x000000ff, false),
+HOWTO ( 5,	       0,  2,	16, true,  0, complain_overflow_signed,	 0,"DISP16",	true, 0x0000ffff,0x0000ffff, false),
+HOWTO ( 6,	       0,  4,	32, true,  0, complain_overflow_signed,	 0,"DISP32",	true, 0xffffffff,0xffffffff, false),
+HOWTO ( 7,	       0,  8,	64, true,  0, complain_overflow_signed,	 0,"DISP64",	true, 0xfeedface,0xfeedface, false),
+HOWTO ( 8,	       0,  4,	 0, false, 0, complain_overflow_bitfield,0,"GOT_REL",	false,	       0,0x00000000, false),
+HOWTO ( 9,	       0,  2,	16, false, 0, complain_overflow_bitfield,0,"BASE16",	false,0xffffffff,0xffffffff, false),
+HOWTO (10,	       0,  4,	32, false, 0, complain_overflow_bitfield,0,"BASE32",	false,0xffffffff,0xffffffff, false),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
-  HOWTO (16,	       0,  2,	 0, FALSE, 0, complain_overflow_bitfield,0,"JMP_TABLE", FALSE,	       0,0x00000000, FALSE),
+  HOWTO (16,	       0,  4,	 0, false, 0, complain_overflow_bitfield,0,"JMP_TABLE", false,	       0,0x00000000, false),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
@@ -245,7 +257,7 @@ EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
-  HOWTO (32,	       0,  2,	 0, FALSE, 0, complain_overflow_bitfield,0,"RELATIVE",	FALSE,	       0,0x00000000, FALSE),
+  HOWTO (32,	       0,  4,	 0, false, 0, complain_overflow_bitfield,0,"RELATIVE",	false,	       0,0x00000000, false),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
@@ -253,7 +265,7 @@ EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
 EMPTY_HOWTO (-1),
-  HOWTO (40,	       0,  2,	 0, FALSE, 0, complain_overflow_bitfield,0,"BASEREL",	FALSE,	       0,0x00000000, FALSE),
+  HOWTO (40,	       0,  4,	 0, false, 0, complain_overflow_bitfield,0,"BASEREL",	false,	       0,0x00000000, false),
 };
 
 #define TABLE_SIZE(TABLE)	(sizeof (TABLE) / sizeof (TABLE[0]))
@@ -422,16 +434,16 @@ NAME (aout, swap_exec_header_out) (bfd *
 
 /* Make all the section for an a.out file.  */
 
-bfd_boolean
+bool
 NAME (aout, make_sections) (bfd *abfd)
 {
   if (obj_textsec (abfd) == NULL && bfd_make_section (abfd, ".text") == NULL)
-    return FALSE;
+    return false;
   if (obj_datasec (abfd) == NULL && bfd_make_section (abfd, ".data") == NULL)
-    return FALSE;
+    return false;
   if (obj_bsssec (abfd) == NULL && bfd_make_section (abfd, ".bss") == NULL)
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 /*
@@ -439,10 +451,10 @@ FUNCTION
 	aout_@var{size}_some_aout_object_p
 
 SYNOPSIS
-	const bfd_target *aout_@var{size}_some_aout_object_p
+	bfd_cleanup aout_@var{size}_some_aout_object_p
 	 (bfd *abfd,
 	  struct internal_exec *execp,
-	  const bfd_target *(*callback_to_real_object_p) (bfd *));
+	  bfd_cleanup (*callback_to_real_object_p) (bfd *));
 
 DESCRIPTION
 	Some a.out variant thinks that the file open in @var{abfd}
@@ -452,14 +464,14 @@ DESCRIPTION
 	handle any last-minute setup.
 */
 
-const bfd_target *
+bfd_cleanup
 NAME (aout, some_aout_object_p) (bfd *abfd,
 				 struct internal_exec *execp,
-				 const bfd_target *(*callback_to_real_object_p) (bfd *))
+				 bfd_cleanup (*callback_to_real_object_p) (bfd *))
 {
   struct aout_data_struct *rawptr, *oldrawptr;
-  const bfd_target *result;
-  bfd_size_type amt = sizeof (* rawptr);
+  bfd_cleanup result;
+  size_t amt = sizeof (* rawptr);
 
   rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, amt);
   if (rawptr == NULL)
@@ -492,7 +504,7 @@ NAME (aout, some_aout_object_p) (bfd *ab
       abfd->flags |= D_PAGED | WP_TEXT;
       adata (abfd).magic = z_magic;
     }
-  else if (N_MAGIC (execp) == QMAGIC)
+  else if (N_IS_QMAGIC (execp))
     {
       abfd->flags |= D_PAGED | WP_TEXT;
       adata (abfd).magic = z_magic;
@@ -503,8 +515,7 @@ NAME (aout, some_aout_object_p) (bfd *ab
       abfd->flags |= WP_TEXT;
       adata (abfd).magic = n_magic;
     }
-  else if (N_MAGIC (execp) == OMAGIC
-	   || N_MAGIC (execp) == BMAGIC)
+  else if (N_MAGIC (execp) == OMAGIC || N_IS_BMAGIC (execp))
     adata (abfd).magic = o_magic;
   else
     /* Should have been checked with N_BADMAG before this routine
@@ -591,7 +602,7 @@ NAME (aout, some_aout_object_p) (bfd *ab
   adata (abfd)->segment_size = SEGMENT_SIZE;
   adata (abfd)->exec_bytes_size = EXEC_BYTES_SIZE;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup
 
   /* The architecture is encoded in various ways in various a.out variants,
      or is not encoded at all in some of them.  The relocation size depends
@@ -661,23 +672,23 @@ FUNCTION
 	aout_@var{size}_mkobject
 
 SYNOPSIS
-	bfd_boolean aout_@var{size}_mkobject, (bfd *abfd);
+	bool aout_@var{size}_mkobject, (bfd *abfd);
 
 DESCRIPTION
 	Initialize BFD @var{abfd} for use with a.out files.
 */
 
-bfd_boolean
+bool
 NAME (aout, mkobject) (bfd *abfd)
 {
   struct aout_data_struct *rawptr;
-  bfd_size_type amt = sizeof (* rawptr);
+  size_t amt = sizeof (* rawptr);
 
   bfd_set_error (bfd_error_system_call);
 
   rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, amt);
   if (rawptr == NULL)
-    return FALSE;
+    return false;
 
   abfd->tdata.aout_data = rawptr;
   exec_hdr (abfd) = &(rawptr->e);
@@ -686,7 +697,7 @@ NAME (aout, mkobject) (bfd *abfd)
   obj_datasec (abfd) = NULL;
   obj_bsssec (abfd) = NULL;
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -697,7 +708,7 @@ SYNOPSIS
 	enum machine_type  aout_@var{size}_machine_type
 	 (enum bfd_architecture arch,
 	  unsigned long machine,
-	  bfd_boolean *unknown);
+	  bool *unknown);
 
 DESCRIPTION
 	Keep track of machine architecture and machine type for
@@ -712,12 +723,12 @@ DESCRIPTION
 enum machine_type
 NAME (aout, machine_type) (enum bfd_architecture arch,
 			   unsigned long machine,
-			   bfd_boolean *unknown)
+			   bool *unknown)
 {
   enum machine_type arch_flags;
 
   arch_flags = M_UNKNOWN;
-  *unknown = TRUE;
+  *unknown = true;
 
   switch (arch)
     {
@@ -819,7 +830,7 @@ NAME (aout, machine_type) (enum bfd_arch
       break;
 
     case bfd_arch_vax:
-      *unknown = FALSE;
+      *unknown = false;
       break;
 
     case bfd_arch_cris:
@@ -832,7 +843,7 @@ NAME (aout, machine_type) (enum bfd_arch
     }
 
   if (arch_flags != M_UNKNOWN)
-    *unknown = FALSE;
+    *unknown = false;
 
   return arch_flags;
 }
@@ -842,7 +853,7 @@ FUNCTION
 	aout_@var{size}_set_arch_mach
 
 SYNOPSIS
-	bfd_boolean aout_@var{size}_set_arch_mach,
+	bool aout_@var{size}_set_arch_mach,
 	 (bfd *,
 	  enum bfd_architecture arch,
 	  unsigned long machine);
@@ -853,21 +864,21 @@ DESCRIPTION
 	can support the architecture required.
 */
 
-bfd_boolean
+bool
 NAME (aout, set_arch_mach) (bfd *abfd,
 			    enum bfd_architecture arch,
 			    unsigned long machine)
 {
   if (! bfd_default_set_arch_mach (abfd, arch, machine))
-    return FALSE;
+    return false;
 
   if (arch != bfd_arch_unknown)
     {
-      bfd_boolean unknown;
+      bool unknown;
 
       NAME (aout, machine_type) (arch, machine, &unknown);
       if (unknown)
-	return FALSE;
+	return false;
     }
 
   /* Determine the size of a relocation entry.  */
@@ -891,57 +902,56 @@ adjust_o_magic (bfd *abfd, struct intern
   file_ptr pos = adata (abfd).exec_bytes_size;
   bfd_vma vma = 0;
   int pad = 0;
+  asection *text = obj_textsec (abfd);
+  asection *data = obj_datasec (abfd);
+  asection *bss = obj_bsssec (abfd);
 
   /* Text.  */
-  obj_textsec (abfd)->filepos = pos;
-  if (!obj_textsec (abfd)->user_set_vma)
-    obj_textsec (abfd)->vma = vma;
+  text->filepos = pos;
+  if (!text->user_set_vma)
+    text->vma = vma;
   else
-    vma = obj_textsec (abfd)->vma;
+    vma = text->vma;
 
-  pos += obj_textsec (abfd)->size;
-  vma += obj_textsec (abfd)->size;
+  pos += execp->a_text;
+  vma += execp->a_text;
 
   /* Data.  */
-  if (!obj_datasec (abfd)->user_set_vma)
+  if (!data->user_set_vma)
     {
-      obj_textsec (abfd)->size += pad;
       pos += pad;
       vma += pad;
-      obj_datasec (abfd)->vma = vma;
+      data->vma = vma;
     }
   else
-    vma = obj_datasec (abfd)->vma;
-  obj_datasec (abfd)->filepos = pos;
-  pos += obj_datasec (abfd)->size;
-  vma += obj_datasec (abfd)->size;
+    vma = data->vma;
+  execp->a_text += pad;
+
+  data->filepos = pos;
+  pos += data->size;
+  vma += data->size;
 
   /* BSS.  */
-  if (!obj_bsssec (abfd)->user_set_vma)
+  if (!bss->user_set_vma)
     {
-      obj_datasec (abfd)->size += pad;
       pos += pad;
       vma += pad;
-      obj_bsssec (abfd)->vma = vma;
+      bss->vma = vma;
     }
   else
     {
       /* The VMA of the .bss section is set by the VMA of the
 	 .data section plus the size of the .data section.  We may
 	 need to add padding bytes to make this true.  */
-      pad = obj_bsssec (abfd)->vma - vma;
-      if (pad > 0)
-	{
-	  obj_datasec (abfd)->size += pad;
-	  pos += pad;
-	}
+      pad = bss->vma - vma;
+      if (pad < 0)
+	pad = 0;
+      pos += pad;
     }
-  obj_bsssec (abfd)->filepos = pos;
+  execp->a_data = data->size + pad;
+  bss->filepos = pos;
+  execp->a_bss = bss->size;
 
-  /* Fix up the exec header.  */
-  execp->a_text = obj_textsec (abfd)->size;
-  execp->a_data = obj_datasec (abfd)->size;
-  execp->a_bss = obj_bsssec (abfd)->size;
   N_SET_MAGIC (execp, OMAGIC);
 }
 
@@ -952,7 +962,10 @@ adjust_z_magic (bfd *abfd, struct intern
   file_ptr text_end;
   const struct aout_backend_data *abdp;
   /* TRUE if text includes exec header.  */
-  bfd_boolean ztih;
+  bool ztih;
+  asection *text = obj_textsec (abfd);
+  asection *data = obj_datasec (abfd);
+  asection *bss = obj_bsssec (abfd);
 
   abdp = aout_backend_info (abfd);
 
@@ -960,18 +973,17 @@ adjust_z_magic (bfd *abfd, struct intern
   ztih = (abdp != NULL
 	  && (abdp->text_includes_header
 	      || obj_aout_subformat (abfd) == q_magic_format));
-  obj_textsec (abfd)->filepos = (ztih
-				 ? adata (abfd).exec_bytes_size
-				 : adata (abfd).zmagic_disk_block_size);
-  if (! obj_textsec (abfd)->user_set_vma)
+  text->filepos = (ztih
+		   ? adata (abfd).exec_bytes_size
+		   : adata (abfd).zmagic_disk_block_size);
+  if (!text->user_set_vma)
     {
       /* ?? Do we really need to check for relocs here?  */
-      obj_textsec (abfd)->vma = ((abfd->flags & HAS_RELOC)
-				 ? 0
-				 : (ztih
-				    ? (abdp->default_text_vma
-				       + adata (abfd).exec_bytes_size)
-				    : abdp->default_text_vma));
+      text->vma = ((abfd->flags & HAS_RELOC)
+		   ? 0
+		   : (ztih
+		      ? abdp->default_text_vma + adata (abfd).exec_bytes_size
+		      : abdp->default_text_vma));
       text_pad = 0;
     }
   else
@@ -980,17 +992,17 @@ adjust_z_magic (bfd *abfd, struct intern
 	 may need to pad it such that the .data section starts at a page
 	 boundary.  */
       if (ztih)
-	text_pad = ((obj_textsec (abfd)->filepos - obj_textsec (abfd)->vma)
+	text_pad = ((text->filepos - text->vma)
 		    & (adata (abfd).page_size - 1));
       else
-	text_pad = ((- obj_textsec (abfd)->vma)
+	text_pad = (-text->vma
 		    & (adata (abfd).page_size - 1));
     }
 
   /* Find start of data.  */
   if (ztih)
     {
-      text_end = obj_textsec (abfd)->filepos + obj_textsec (abfd)->size;
+      text_end = text->filepos + execp->a_text;
       text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end;
     }
   else
@@ -998,55 +1010,45 @@ adjust_z_magic (bfd *abfd, struct intern
       /* Note that if page_size == zmagic_disk_block_size, then
 	 filepos == page_size, and this case is the same as the ztih
 	 case.  */
-      text_end = obj_textsec (abfd)->size;
+      text_end = execp->a_text;
       text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end;
-      text_end += obj_textsec (abfd)->filepos;
+      text_end += text->filepos;
     }
-  obj_textsec (abfd)->size += text_pad;
-  text_end += text_pad;
+  execp->a_text += text_pad;
 
   /* Data.  */
-  if (!obj_datasec (abfd)->user_set_vma)
+  if (!data->user_set_vma)
     {
       bfd_vma vma;
-      vma = obj_textsec (abfd)->vma + obj_textsec (abfd)->size;
-      obj_datasec (abfd)->vma = BFD_ALIGN (vma, adata (abfd).segment_size);
+      vma = text->vma + execp->a_text;
+      data->vma = BFD_ALIGN (vma, adata (abfd).segment_size);
     }
   if (abdp && abdp->zmagic_mapped_contiguous)
     {
-      asection * text = obj_textsec (abfd);
-      asection * data = obj_datasec (abfd);
-
-      text_pad = data->vma - (text->vma + text->size);
+      text_pad = data->vma - (text->vma + execp->a_text);
       /* Only pad the text section if the data
 	 section is going to be placed after it.  */
       if (text_pad > 0)
-	text->size += text_pad;
+	execp->a_text += text_pad;
     }
-  obj_datasec (abfd)->filepos = (obj_textsec (abfd)->filepos
-				 + obj_textsec (abfd)->size);
+  data->filepos = text->filepos + execp->a_text;
 
   /* Fix up exec header while we're at it.  */
-  execp->a_text = obj_textsec (abfd)->size;
   if (ztih && (!abdp || (abdp && !abdp->exec_header_not_counted)))
     execp->a_text += adata (abfd).exec_bytes_size;
   if (obj_aout_subformat (abfd) == q_magic_format)
-    N_SET_MAGIC (execp, QMAGIC);
+    N_SET_QMAGIC (execp);
   else
     N_SET_MAGIC (execp, ZMAGIC);
 
   /* Spec says data section should be rounded up to page boundary.  */
-  obj_datasec (abfd)->size
-    = align_power (obj_datasec (abfd)->size,
-		   obj_bsssec (abfd)->alignment_power);
-  execp->a_data = BFD_ALIGN (obj_datasec (abfd)->size,
-			     adata (abfd).page_size);
-  data_pad = execp->a_data - obj_datasec (abfd)->size;
+  execp->a_data = align_power (data->size, bss->alignment_power);
+  execp->a_data = BFD_ALIGN (execp->a_data, adata (abfd).page_size);
+  data_pad = execp->a_data - data->size;
 
   /* BSS.  */
-  if (!obj_bsssec (abfd)->user_set_vma)
-    obj_bsssec (abfd)->vma = (obj_datasec (abfd)->vma
-			      + obj_datasec (abfd)->size);
+  if (!bss->user_set_vma)
+    bss->vma = data->vma + execp->a_data;
   /* If the BSS immediately follows the data section and extra space
      in the page is left after the data section, fudge data
      in the header so that the bss section looks smaller by that
@@ -1054,12 +1056,10 @@ adjust_z_magic (bfd *abfd, struct intern
      (Note that a linker script, as well as the above assignment,
      could have explicitly set the BSS vma to immediately follow
      the data section.)  */
-  if (align_power (obj_bsssec (abfd)->vma, obj_bsssec (abfd)->alignment_power)
-      == obj_datasec (abfd)->vma + obj_datasec (abfd)->size)
-    execp->a_bss = (data_pad > obj_bsssec (abfd)->size
-		    ? 0 : obj_bsssec (abfd)->size - data_pad);
+  if (align_power (bss->vma, bss->alignment_power) == data->vma + execp->a_data)
+    execp->a_bss = data_pad > bss->size ? 0 : bss->size - data_pad;
   else
-    execp->a_bss = obj_bsssec (abfd)->size;
+    execp->a_bss = bss->size;
 }
 
 static void
@@ -1068,55 +1068,55 @@ adjust_n_magic (bfd *abfd, struct intern
   file_ptr pos = adata (abfd).exec_bytes_size;
   bfd_vma vma = 0;
   int pad;
+  asection *text = obj_textsec (abfd);
+  asection *data = obj_datasec (abfd);
+  asection *bss = obj_bsssec (abfd);
 
   /* Text.  */
-  obj_textsec (abfd)->filepos = pos;
-  if (!obj_textsec (abfd)->user_set_vma)
-    obj_textsec (abfd)->vma = vma;
+  text->filepos = pos;
+  if (!text->user_set_vma)
+    text->vma = vma;
   else
-    vma = obj_textsec (abfd)->vma;
-  pos += obj_textsec (abfd)->size;
-  vma += obj_textsec (abfd)->size;
+    vma = text->vma;
+  pos += execp->a_text;
+  vma += execp->a_text;
 
   /* Data.  */
-  obj_datasec (abfd)->filepos = pos;
-  if (!obj_datasec (abfd)->user_set_vma)
-    obj_datasec (abfd)->vma = BFD_ALIGN (vma, adata (abfd).segment_size);
-  vma = obj_datasec (abfd)->vma;
+  data->filepos = pos;
+  if (!data->user_set_vma)
+    data->vma = BFD_ALIGN (vma, adata (abfd).segment_size);
+  vma = data->vma;
 
   /* Since BSS follows data immediately, see if it needs alignment.  */
-  vma += obj_datasec (abfd)->size;
-  pad = align_power (vma, obj_bsssec (abfd)->alignment_power) - vma;
-  obj_datasec (abfd)->size += pad;
-  pos += obj_datasec (abfd)->size;
+  vma += data->size;
+  pad = align_power (vma, bss->alignment_power) - vma;
+  execp->a_data = data->size + pad;
+  pos += execp->a_data;
 
   /* BSS.  */
-  if (!obj_bsssec (abfd)->user_set_vma)
-    obj_bsssec (abfd)->vma = vma;
+  if (!bss->user_set_vma)
+    bss->vma = vma;
   else
-    vma = obj_bsssec (abfd)->vma;
+    vma = bss->vma;
 
   /* Fix up exec header.  */
-  execp->a_text = obj_textsec (abfd)->size;
-  execp->a_data = obj_datasec (abfd)->size;
-  execp->a_bss = obj_bsssec (abfd)->size;
+  execp->a_bss = bss->size;
   N_SET_MAGIC (execp, NMAGIC);
 }
 
-bfd_boolean
+bool
 NAME (aout, adjust_sizes_and_vmas) (bfd *abfd)
 {
   struct internal_exec *execp = exec_hdr (abfd);
 
   if (! NAME (aout, make_sections) (abfd))
-    return FALSE;
+    return false;
 
   if (adata (abfd).magic != undecided_magic)
-    return TRUE;
+    return true;
 
-  obj_textsec (abfd)->size =
-    align_power (obj_textsec (abfd)->size,
-		 obj_textsec (abfd)->alignment_power);
+  execp->a_text = align_power (obj_textsec (abfd)->size,
+			       obj_textsec (abfd)->alignment_power);
 
   /* Rule (heuristic) for when to pad to a new page.  Note that there
      are (at least) two ways demand-paged (ZMAGIC) files have been
@@ -1181,14 +1181,14 @@ NAME (aout, adjust_sizes_and_vmas) (bfd
 
 #ifdef BFD_AOUT_DEBUG
   fprintf (stderr, "       text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x>\n",
-	   obj_textsec (abfd)->vma, obj_textsec (abfd)->size,
+	   obj_textsec (abfd)->vma, execp->a_text,
 		obj_textsec (abfd)->filepos,
-	   obj_datasec (abfd)->vma, obj_datasec (abfd)->size,
+	   obj_datasec (abfd)->vma, execp->a_data,
 		obj_datasec (abfd)->filepos,
-	   obj_bsssec (abfd)->vma, obj_bsssec (abfd)->size);
+	   obj_bsssec (abfd)->vma, execp->a_bss);
 #endif
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -1196,7 +1196,7 @@ FUNCTION
 	aout_@var{size}_new_section_hook
 
 SYNOPSIS
-	bfd_boolean aout_@var{size}_new_section_hook,
+	bool aout_@var{size}_new_section_hook,
 	   (bfd *abfd,
 	    asection *newsect);
 
@@ -1204,7 +1204,7 @@ DESCRIPTION
 	Called by the BFD in response to a @code{bfd_make_section}
 	request.
 */
-bfd_boolean
+bool
 NAME (aout, new_section_hook) (bfd *abfd, asection *newsect)
 {
   /* Align to double at least.  */
@@ -1233,7 +1233,7 @@ NAME (aout, new_section_hook) (bfd *abfd
   return _bfd_generic_new_section_hook (abfd, newsect);
 }
 
-bfd_boolean
+bool
 NAME (aout, set_section_contents) (bfd *abfd,
 				   sec_ptr section,
 				   const void * location,
@@ -1243,13 +1243,13 @@ NAME (aout, set_section_contents) (bfd *
   if (! abfd->output_has_begun)
     {
       if (! NAME (aout, adjust_sizes_and_vmas) (abfd))
-	return FALSE;
+	return false;
     }
 
   if (section == obj_bsssec (abfd))
     {
       bfd_set_error (bfd_error_no_contents);
-      return FALSE;
+      return false;
     }
 
   if (section != obj_textsec (abfd)
@@ -1265,23 +1265,23 @@ NAME (aout, set_section_contents) (bfd *
 	   (_("%pB: can not represent section `%pA' in a.out object file format"),
 	     abfd, section);
 	  bfd_set_error (bfd_error_nonrepresentable_section);
-	  return FALSE;
+	  return false;
 	}
     }
 
   if (count != 0)
     {
       if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
-	  || bfd_bwrite (location, count, abfd) != count)
-	return FALSE;
+	  || bfd_write (location, count, abfd) != count)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read the external symbols from an a.out file.  */
 
-static bfd_boolean
+static bool
 aout_get_external_symbols (bfd *abfd)
 {
   if (obj_aout_external_syms (abfd) == NULL)
@@ -1292,27 +1292,22 @@ aout_get_external_symbols (bfd *abfd)
 
       count = amt / EXTERNAL_NLIST_SIZE;
       if (count == 0)
-	return TRUE;		/* Nothing to do.  */
+	return true;		/* Nothing to do.  */
 
 #ifdef USE_MMAP
       if (! bfd_get_file_window (abfd, obj_sym_filepos (abfd), amt,
-				 &obj_aout_sym_window (abfd), TRUE))
-	return FALSE;
+				 &obj_aout_sym_window (abfd), true))
+	return false;
       syms = (struct external_nlist *) obj_aout_sym_window (abfd).data;
 #else
       /* We allocate using malloc to make the values easy to free
 	 later on.  If we put them on the objalloc it might not be
 	 possible to free them.  */
-      syms = (struct external_nlist *) bfd_malloc (amt);
+      if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0)
+	return false;
+      syms = (struct external_nlist *) _bfd_malloc_and_read (abfd, amt, amt);
       if (syms == NULL)
-	return FALSE;
-
-      if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
-	  || bfd_bread (syms, amt, abfd) != amt)
-	{
-	  free (syms);
-	  return FALSE;
-	}
+	return false;
 #endif
 
       obj_aout_external_syms (abfd) = syms;
@@ -1329,8 +1324,8 @@ aout_get_external_symbols (bfd *abfd)
 
       /* Get the size of the strings.  */
       if (bfd_seek (abfd, obj_str_filepos (abfd), SEEK_SET) != 0
-	  || bfd_bread ((void *) string_chars, amt, abfd) != amt)
-	return FALSE;
+	  || bfd_read (string_chars, amt, abfd) != amt)
+	return false;
       stringsize = GET_WORD (abfd, string_chars);
       if (stringsize == 0)
 	stringsize = 1;
@@ -1338,15 +1333,15 @@ aout_get_external_symbols (bfd *abfd)
 	       || (size_t) stringsize != stringsize)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
 #ifdef USE_MMAP
       if (stringsize >= BYTES_IN_WORD)
 	{
 	  if (! bfd_get_file_window (abfd, obj_str_filepos (abfd), stringsize + 1,
-				     &obj_aout_string_window (abfd), TRUE))
-	    return FALSE;
+				     &obj_aout_string_window (abfd), true))
+	    return false;
 	  strings = (char *) obj_aout_string_window (abfd).data;
 	}
       else
@@ -1354,22 +1349,21 @@ aout_get_external_symbols (bfd *abfd)
 	{
 	  strings = (char *) bfd_malloc (stringsize + 1);
 	  if (strings == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (stringsize >= BYTES_IN_WORD)
 	    {
-	      /* Keep the string count in the buffer for convenience
-		 when indexing with e_strx.  */
 	      amt = stringsize - BYTES_IN_WORD;
-	      if (bfd_bread (strings + BYTES_IN_WORD, amt, abfd) != amt)
+	      if (bfd_read (strings + BYTES_IN_WORD, amt, abfd) != amt)
 		{
 		  free (strings);
-		  return FALSE;
+		  return false;
 		}
 	    }
 	}
       /* Ensure that a zero index yields an empty string.  */
-      strings[0] = '\0';
+      if (stringsize >= BYTES_IN_WORD)
+	memset (strings, 0, BYTES_IN_WORD);
 
       /* Ensure that the string buffer is NUL terminated.  */
       strings[stringsize] = 0;
@@ -1378,7 +1372,7 @@ aout_get_external_symbols (bfd *abfd)
       obj_aout_external_string_size (abfd) = stringsize;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Translate an a.out symbol into a BFD symbol.  The desc, other, type
@@ -1386,7 +1380,7 @@ aout_get_external_symbols (bfd *abfd)
    nlist structure.  This function is responsible for setting
    symbol->flags and symbol->section, and adjusting symbol->value.  */
 
-static bfd_boolean
+static bool
 translate_from_native_sym_flags (bfd *abfd, aout_symbol_type *cache_ptr)
 {
   flagword visible;
@@ -1421,7 +1415,7 @@ translate_from_native_sym_flags (bfd *ab
       cache_ptr->symbol.section = sec;
       cache_ptr->symbol.value -= sec->vma;
 
-      return TRUE;
+      return true;
     }
 
   /* Get the default visibility.  This does not apply to all types, so
@@ -1552,12 +1546,12 @@ translate_from_native_sym_flags (bfd *ab
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the fields of SYM_POINTER according to CACHE_PTR.  */
 
-static bfd_boolean
+static bool
 translate_to_native_sym_flags (bfd *abfd,
 			       asymbol *cache_ptr,
 			       struct external_nlist *sym_pointer)
@@ -1584,7 +1578,7 @@ translate_to_native_sym_flags (bfd *abfd
 	 abfd,
 	 cache_ptr->name != NULL ? cache_ptr->name : _("*unknown*"));
       bfd_set_error (bfd_error_nonrepresentable_section);
-      return FALSE;
+      return false;
     }
 
   if (sec->output_section != NULL)
@@ -1618,7 +1612,7 @@ translate_to_native_sym_flags (bfd *abfd
 	   (_("%pB: can not represent section `%pA' in a.out object file format"),
 	     abfd, sec);
 	  bfd_set_error (bfd_error_nonrepresentable_section);
-	  return FALSE;
+	  return false;
 	}
     }
 
@@ -1667,7 +1661,7 @@ translate_to_native_sym_flags (bfd *abfd
 
   PUT_WORD (abfd, value, sym_pointer->e_value);
 
-  return TRUE;
+  return true;
 }
 
 /* Native-level interface to symbols.  */
@@ -1675,7 +1669,7 @@ translate_to_native_sym_flags (bfd *abfd
 asymbol *
 NAME (aout, make_empty_symbol) (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (aout_symbol_type);
+  size_t amt = sizeof (aout_symbol_type);
 
   aout_symbol_type *new_symbol = (aout_symbol_type *) bfd_zalloc (abfd, amt);
   if (!new_symbol)
@@ -1685,16 +1679,16 @@ NAME (aout, make_empty_symbol) (bfd *abf
   return &new_symbol->symbol;
 }
 
-/* Translate a set of internal symbols into external symbols.  */
+/* Translate a set of external symbols into internal symbols.  */
 
-bfd_boolean
+bool
 NAME (aout, translate_symbol_table) (bfd *abfd,
 				     aout_symbol_type *in,
 				     struct external_nlist *ext,
 				     bfd_size_type count,
 				     char *str,
 				     bfd_size_type strsize,
-				     bfd_boolean dynamic)
+				     bool dynamic)
 {
   struct external_nlist *ext_end;
 
@@ -1721,7 +1715,7 @@ NAME (aout, translate_symbol_table) (bfd
 	    (_("%pB: invalid string offset %" PRIu64 " >= %" PRIu64),
 	     abfd, (uint64_t) x, (uint64_t) strsize);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       in->symbol.value = GET_SWORD (abfd,  ext->e_value);
@@ -1731,20 +1725,20 @@ NAME (aout, translate_symbol_table) (bfd
       in->symbol.udata.p = NULL;
 
       if (! translate_from_native_sym_flags (abfd, in))
-	return FALSE;
+	return false;
 
       if (dynamic)
 	in->symbol.flags |= BSF_DYNAMIC;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We read the symbols into a buffer, which is discarded when this
    function exits.  We read the strings into a buffer large enough to
    hold them all plus all the cached symbol entries.  */
 
-bfd_boolean
+bool
 NAME (aout, slurp_symbol_table) (bfd *abfd)
 {
   struct external_nlist *old_external_syms;
@@ -1753,21 +1747,21 @@ NAME (aout, slurp_symbol_table) (bfd *ab
 
   /* If there's no work to be done, don't do any.  */
   if (obj_aout_symbols (abfd) != NULL)
-    return TRUE;
+    return true;
 
   old_external_syms = obj_aout_external_syms (abfd);
 
   if (! aout_get_external_symbols (abfd))
-    return FALSE;
+    return false;
 
   cached_size = obj_aout_external_sym_count (abfd);
   if (cached_size == 0)
-    return TRUE;		/* Nothing to do.  */
+    return true;		/* Nothing to do.  */
 
   cached_size *= sizeof (aout_symbol_type);
   cached = (aout_symbol_type *) bfd_zmalloc (cached_size);
   if (cached == NULL)
-    return FALSE;
+    return false;
 
   /* Convert from external symbol information to internal.  */
   if (! (NAME (aout, translate_symbol_table)
@@ -1776,10 +1770,10 @@ NAME (aout, slurp_symbol_table) (bfd *ab
 	  obj_aout_external_sym_count (abfd),
 	  obj_aout_external_strings (abfd),
 	  obj_aout_external_string_size (abfd),
-	  FALSE)))
+	  false)))
     {
       free (cached);
-      return FALSE;
+      return false;
     }
 
   abfd->symcount = obj_aout_external_sym_count (abfd);
@@ -1801,7 +1795,7 @@ NAME (aout, slurp_symbol_table) (bfd *ab
       obj_aout_external_syms (abfd) = NULL;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We use a hash table when writing out symbols so that we only write
@@ -1820,9 +1814,9 @@ static inline bfd_size_type
 add_to_stringtab (bfd *abfd,
 		  struct bfd_strtab_hash *tab,
 		  const char *str,
-		  bfd_boolean copy)
+		  bool copy)
 {
-  bfd_boolean hash;
+  bool hash;
   bfd_size_type str_index;
 
   /* An index of 0 always means the empty string.  */
@@ -1831,9 +1825,9 @@ add_to_stringtab (bfd *abfd,
 
   /* Don't hash if BFD_TRADITIONAL_FORMAT is set, because SunOS dbx
      doesn't understand a hashed string table.  */
-  hash = TRUE;
+  hash = true;
   if ((abfd->flags & BFD_TRADITIONAL_FORMAT) != 0)
-    hash = FALSE;
+    hash = false;
 
   str_index = _bfd_stringtab_add (tab, str, hash, copy);
 
@@ -1848,21 +1842,21 @@ add_to_stringtab (bfd *abfd,
 /* Write out a strtab.  ABFD is already at the right location in the
    file.  */
 
-static bfd_boolean
+static bool
 emit_stringtab (bfd *abfd, struct bfd_strtab_hash *tab)
 {
   bfd_byte buffer[BYTES_IN_WORD];
-  bfd_size_type amt = BYTES_IN_WORD;
+  size_t amt = BYTES_IN_WORD;
 
   /* The string table starts with the size.  */
   PUT_WORD (abfd, _bfd_stringtab_size (tab) + BYTES_IN_WORD, buffer);
-  if (bfd_bwrite ((void *) buffer, amt, abfd) != amt)
-    return FALSE;
+  if (bfd_write (buffer, amt, abfd) != amt)
+    return false;
 
   return _bfd_stringtab_emit (abfd, tab);
 }
 
-bfd_boolean
+bool
 NAME (aout, write_syms) (bfd *abfd)
 {
   unsigned int count ;
@@ -1871,16 +1865,16 @@ NAME (aout, write_syms) (bfd *abfd)
 
   strtab = _bfd_stringtab_init ();
   if (strtab == NULL)
-    return FALSE;
+    return false;
 
   for (count = 0; count < bfd_get_symcount (abfd); count++)
     {
       asymbol *g = generic[count];
       bfd_size_type indx;
       struct external_nlist nsp;
-      bfd_size_type amt;
+      size_t amt;
 
-      indx = add_to_stringtab (abfd, strtab, g->name, FALSE);
+      indx = add_to_stringtab (abfd, strtab, g->name, false);
       if (indx == (bfd_size_type) -1)
 	goto error_return;
       PUT_WORD (abfd, indx, (bfd_byte *) nsp.e_strx);
@@ -1902,7 +1896,7 @@ NAME (aout, write_syms) (bfd *abfd)
 	goto error_return;
 
       amt = EXTERNAL_NLIST_SIZE;
-      if (bfd_bwrite ((void *) &nsp, amt, abfd) != amt)
+      if (bfd_write (&nsp, amt, abfd) != amt)
 	goto error_return;
 
       /* NB: `KEEPIT' currently overlays `udata.p', so set this only
@@ -1915,11 +1909,11 @@ NAME (aout, write_syms) (bfd *abfd)
 
   _bfd_stringtab_free (strtab);
 
-  return TRUE;
+  return true;
 
-error_return:
+ error_return:
   _bfd_stringtab_free (strtab);
-  return FALSE;
+  return false;
 }
 
 long
@@ -1953,7 +1947,7 @@ NAME (aout, swap_std_reloc_out) (bfd *ab
   int r_index;
   asymbol *sym = *(g->sym_ptr_ptr);
   int r_extern;
-  unsigned int r_length;
+  unsigned int r_length, r_size;
   int r_pcrel;
   int r_baserel, r_jmptable, r_relative;
   asection *output_section = sym->section->output_section;
@@ -1961,7 +1955,17 @@ NAME (aout, swap_std_reloc_out) (bfd *ab
   PUT_WORD (abfd, g->address, natptr->r_address);
 
   BFD_ASSERT (g->howto != NULL);
-  r_length = g->howto->size ;	/* Size as a power of two.  */
+
+  r_size = bfd_get_reloc_size (g->howto);
+  r_length = bfd_log2 (r_size);
+  if (1u << r_length != r_size)
+    {
+      _bfd_error_handler (_("%pB: unsupported AOUT relocation size: %d"),
+			  abfd, r_size);
+      bfd_set_error (bfd_error_bad_value);
+      return;
+    }
+
   r_pcrel  = (int) g->howto->pc_relative; /* Relative to PC?  */
   /* XXX This relies on relocs coming from a.out files.  */
   r_baserel = (g->howto->type & 8) != 0;
@@ -2118,7 +2122,10 @@ NAME (aout, swap_ext_reloc_out) (bfd *ab
   if (r_extern)								\
     {									\
       /* Undefined symbol.  */						\
-      cache_ptr->sym_ptr_ptr = symbols + r_index;			\
+      if (symbols != NULL && r_index < bfd_get_symcount (abfd))		\
+	cache_ptr->sym_ptr_ptr = symbols + r_index;			\
+      else								\
+	cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;	\
       cache_ptr->addend = ad;						\
     }									\
    else									\
@@ -2286,7 +2293,7 @@ NAME (aout, swap_std_reloc_in) (bfd *abf
 
 /* Read and swap the relocs for a section.  */
 
-bfd_boolean
+bool
 NAME (aout, slurp_reloc_table) (bfd *abfd, sec_ptr asect, asymbol **symbols)
 {
   bfd_size_type count;
@@ -2299,10 +2306,10 @@ NAME (aout, slurp_reloc_table) (bfd *abf
   bfd_size_type amt;
 
   if (asect->relocation)
-    return TRUE;
+    return true;
 
   if (asect->flags & SEC_CONSTRUCTOR)
-    return TRUE;
+    return true;
 
   if (asect == obj_datasec (abfd))
     reloc_size = exec_hdr (abfd)->a_drsize;
@@ -2313,38 +2320,26 @@ NAME (aout, slurp_reloc_table) (bfd *abf
   else
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
-  if (reloc_size == 0)
-    return TRUE;		/* Nothing to be done.  */
-
-  if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
-    return FALSE;
-
   each_size = obj_reloc_entry_size (abfd);
-
   count = reloc_size / each_size;
   if (count == 0)
-    return TRUE;		/* Nothing to be done.  */
+    return true;		/* Nothing to be done.  */
+
+  if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
+    return false;
+  relocs = _bfd_malloc_and_read (abfd, reloc_size, reloc_size);
+  if (relocs == NULL)
+    return false;
 
   amt = count * sizeof (arelent);
   reloc_cache = (arelent *) bfd_zmalloc (amt);
   if (reloc_cache == NULL)
-    return FALSE;
-
-  relocs = bfd_malloc (reloc_size);
-  if (relocs == NULL)
-    {
-      free (reloc_cache);
-      return FALSE;
-    }
-
-  if (bfd_bread (relocs, reloc_size, abfd) != reloc_size)
     {
       free (relocs);
-      free (reloc_cache);
-      return FALSE;
+      return false;
     }
 
   cache_ptr = reloc_cache;
@@ -2370,12 +2365,12 @@ NAME (aout, slurp_reloc_table) (bfd *abf
   asect->relocation = reloc_cache;
   asect->reloc_count = cache_ptr - reloc_cache;
 
-  return TRUE;
+  return true;
 }
 
 /* Write out a relocation section into an object file.  */
 
-bfd_boolean
+bool
 NAME (aout, squirt_out_relocs) (bfd *abfd, asection *section)
 {
   arelent **generic;
@@ -2386,13 +2381,13 @@ NAME (aout, squirt_out_relocs) (bfd *abf
   bfd_size_type natsize;
 
   if (count == 0 || section->orelocation == NULL)
-    return TRUE;
+    return true;
 
   each_size = obj_reloc_entry_size (abfd);
   natsize = (bfd_size_type) each_size * count;
   native = (unsigned char *) bfd_zalloc (abfd, natsize);
   if (!native)
-    return FALSE;
+    return false;
 
   generic = section->orelocation;
 
@@ -2409,9 +2404,9 @@ NAME (aout, squirt_out_relocs) (bfd *abf
 	      || (*generic)->sym_ptr_ptr == NULL)
 	    {
 	      bfd_set_error (bfd_error_invalid_operation);
-	      _bfd_error_handler (_("\
-%pB: attempt to write out unknown reloc type"), abfd);
-	      return FALSE;
+	      _bfd_error_handler (_("%pB: attempt to write out "
+				    "unknown reloc type"), abfd);
+	      return false;
 	    }
 	  MY_swap_ext_reloc_out (abfd, *generic,
 				 (struct reloc_ext_external *) natptr);
@@ -2427,23 +2422,23 @@ NAME (aout, squirt_out_relocs) (bfd *abf
 	      || (*generic)->sym_ptr_ptr == NULL)
 	    {
 	      bfd_set_error (bfd_error_invalid_operation);
-	      _bfd_error_handler (_("\
-%pB: attempt to write out unknown reloc type"), abfd);
-	      return FALSE;
+	      _bfd_error_handler (_("%pB: attempt to write out "
+				    "unknown reloc type"), abfd);
+	      return false;
 	    }
 	  MY_swap_std_reloc_out (abfd, *generic,
 				 (struct reloc_std_external *) natptr);
 	}
     }
 
-  if (bfd_bwrite ((void *) native, natsize, abfd) != natsize)
+  if (bfd_write (native, natsize, abfd) != natsize)
     {
       bfd_release (abfd, native);
-      return FALSE;
+      return false;
     }
   bfd_release (abfd, native);
 
-  return TRUE;
+  return true;
 }
 
 /* This is stupid.  This function should be a boolean predicate.  */
@@ -2492,13 +2487,7 @@ NAME (aout, canonicalize_reloc) (bfd *ab
 long
 NAME (aout, get_reloc_upper_bound) (bfd *abfd, sec_ptr asect)
 {
-  bfd_size_type count;
-
-  if (bfd_get_format (abfd) != bfd_object)
-    {
-      bfd_set_error (bfd_error_invalid_operation);
-      return -1;
-    }
+  size_t count, raw;
 
   if (asect->flags & SEC_CONSTRUCTOR)
     count = asect->reloc_count;
@@ -2514,11 +2503,21 @@ NAME (aout, get_reloc_upper_bound) (bfd
       return -1;
     }
 
-  if (count >= LONG_MAX / sizeof (arelent *))
+  if (count >= LONG_MAX / sizeof (arelent *)
+      || _bfd_mul_overflow (count, obj_reloc_entry_size (abfd), &raw))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
+  if (!bfd_write_p (abfd))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && raw > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
+    }
   return (count + 1) * sizeof (arelent *);
 }
 
@@ -2613,7 +2612,7 @@ NAME (aout, print_symbol) (bfd *abfd,
 
 long
 NAME (aout, read_minisymbols) (bfd *abfd,
-			       bfd_boolean dynamic,
+			       bool dynamic,
 			       void * *minisymsp,
 			       unsigned int *sizep)
 {
@@ -2646,7 +2645,7 @@ NAME (aout, read_minisymbols) (bfd *abfd
 
 asymbol *
 NAME (aout, minisymbol_to_symbol) (bfd *abfd,
-				   bfd_boolean dynamic,
+				   bool dynamic,
 				   const void * minisym,
 				   asymbol *sym)
 {
@@ -2664,7 +2663,7 @@ NAME (aout, minisymbol_to_symbol) (bfd *
 	  (bfd_size_type) 1,
 	  obj_aout_external_strings (abfd),
 	  obj_aout_external_string_size (abfd),
-	  FALSE)))
+	  false)))
     return NULL;
 
   return sym;
@@ -2674,7 +2673,7 @@ NAME (aout, minisymbol_to_symbol) (bfd *
    and return the name of the source file and the line nearest to the
    wanted location.  */
 
-bfd_boolean
+bool
 NAME (aout, find_nearest_line) (bfd *abfd,
 				asymbol **symbols,
 				asection *section,
@@ -2697,7 +2696,7 @@ NAME (aout, find_nearest_line) (bfd *abf
   bfd_size_type filelen, funclen;
   char *buf;
 
-  *filename_ptr = abfd->filename;
+  *filename_ptr = bfd_get_filename (abfd);
   *functionname_ptr = NULL;
   *line_ptr = 0;
   if (disriminator_ptr)
@@ -2827,8 +2826,7 @@ NAME (aout, find_nearest_line) (bfd *abf
   else
     funclen = strlen (bfd_asymbol_name (func));
 
-  if (adata (abfd).line_buf != NULL)
-    free (adata (abfd).line_buf);
+  free (adata (abfd).line_buf);
 
   if (filelen + funclen == 0)
     adata (abfd).line_buf = buf = NULL;
@@ -2837,7 +2835,7 @@ NAME (aout, find_nearest_line) (bfd *abf
       buf = (char *) bfd_malloc (filelen + funclen + 3);
       adata (abfd).line_buf = buf;
       if (buf == NULL)
-	return FALSE;
+	return false;
     }
 
   if (main_file_name != NULL)
@@ -2869,7 +2867,7 @@ NAME (aout, find_nearest_line) (bfd *abf
 	{
 	  /* PR binutils/20892: In a corrupt input file func can be empty.  */
 	  * functionname_ptr = NULL;
-	  return TRUE;
+	  return true;
 	}
       /* The caller expects a symbol name.  We actually have a
 	 function name, without the leading underscore.  Put the
@@ -2888,7 +2886,7 @@ NAME (aout, find_nearest_line) (bfd *abf
       *functionname_ptr = buf;
     }
 
-  return TRUE;
+  return true;
 }
 
 int
@@ -2898,34 +2896,33 @@ NAME (aout, sizeof_headers) (bfd *abfd,
   return adata (abfd).exec_bytes_size;
 }
 
-/* Free all information we have cached for this BFD.  We can always
-   read it again later if we need it.  */
+/* Throw away most malloc'd and alloc'd information for this BFD.  */
 
-bfd_boolean
+bool
 NAME (aout, bfd_free_cached_info) (bfd *abfd)
 {
-  asection *o;
-
-  if (bfd_get_format (abfd) != bfd_object
-      || abfd->tdata.aout_data == NULL)
-    return TRUE;
-
-#define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; }
-  BFCI_FREE (obj_aout_symbols (abfd));
+  if ((bfd_get_format (abfd) == bfd_object
+       || bfd_get_format (abfd) == bfd_core)
+      && abfd->tdata.aout_data != NULL)
+    {
+#define BFCI_FREE(x) do { free (x); x = NULL; } while (0)
+      BFCI_FREE (adata (abfd).line_buf);
+      BFCI_FREE (obj_aout_symbols (abfd));
 #ifdef USE_MMAP
-  obj_aout_external_syms (abfd) = 0;
-  bfd_free_window (&obj_aout_sym_window (abfd));
-  bfd_free_window (&obj_aout_string_window (abfd));
-  obj_aout_external_strings (abfd) = 0;
+      obj_aout_external_syms (abfd) = 0;
+      bfd_free_window (&obj_aout_sym_window (abfd));
+      bfd_free_window (&obj_aout_string_window (abfd));
+      obj_aout_external_strings (abfd) = 0;
 #else
-  BFCI_FREE (obj_aout_external_syms (abfd));
-  BFCI_FREE (obj_aout_external_strings (abfd));
+      BFCI_FREE (obj_aout_external_syms (abfd));
+      BFCI_FREE (obj_aout_external_strings (abfd));
 #endif
-  for (o = abfd->sections; o != NULL; o = o->next)
-    BFCI_FREE (o->relocation);
+      for (asection *o = abfd->sections; o != NULL; o = o->next)
+	BFCI_FREE (o->relocation);
 #undef BFCI_FREE
+    }
 
-  return TRUE;
+  return _bfd_generic_bfd_free_cached_info (abfd);
 }
 
 /* a.out link code.  */
@@ -2954,7 +2951,7 @@ NAME (aout, link_hash_newfunc) (struct b
   if (ret)
     {
       /* Set local fields.  */
-      ret->written = FALSE;
+      ret->written = false;
       ret->indx = -1;
     }
 
@@ -2963,7 +2960,7 @@ NAME (aout, link_hash_newfunc) (struct b
 
 /* Initialize an a.out link hash table.  */
 
-bfd_boolean
+bool
 NAME (aout, link_hash_table_init) (struct aout_link_hash_table *table,
 				   bfd *abfd,
 				   struct bfd_hash_entry *(*newfunc)
@@ -2980,7 +2977,7 @@ struct bfd_link_hash_table *
 NAME (aout, link_hash_table_create) (bfd *abfd)
 {
   struct aout_link_hash_table *ret;
-  bfd_size_type amt = sizeof (* ret);
+  size_t amt = sizeof (* ret);
 
   ret = (struct aout_link_hash_table *) bfd_malloc (amt);
   if (ret == NULL)
@@ -2998,17 +2995,16 @@ NAME (aout, link_hash_table_create) (bfd
 
 /* Add all symbols from an object file to the hash table.  */
 
-static bfd_boolean
+static bool
 aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
-  bfd_boolean (*add_one_symbol)
+  bool (*add_one_symbol)
     (struct bfd_link_info *, bfd *, const char *, flagword, asection *,
-	     bfd_vma, const char *, bfd_boolean, bfd_boolean,
-	     struct bfd_link_hash_entry **);
+     bfd_vma, const char *, bool, bool, struct bfd_link_hash_entry **);
   struct external_nlist *syms;
   bfd_size_type sym_count;
   char *strings;
-  bfd_boolean copy;
+  bool copy;
   struct aout_link_hash_entry **sym_hash;
   struct external_nlist *p;
   struct external_nlist *pend;
@@ -3018,19 +3014,19 @@ aout_link_add_symbols (bfd *abfd, struct
   sym_count = obj_aout_external_sym_count (abfd);
   strings = obj_aout_external_strings (abfd);
   if (info->keep_memory)
-    copy = FALSE;
+    copy = false;
   else
-    copy = TRUE;
+    copy = true;
 
   if (aout_backend_info (abfd)->add_dynamic_symbols != NULL)
     {
       if (! ((*aout_backend_info (abfd)->add_dynamic_symbols)
 	     (abfd, info, &syms, &sym_count, &strings)))
-	return FALSE;
+	return false;
     }
 
   if (sym_count == 0)
-    return TRUE;		/* Nothing to do.  */
+    return true;		/* Nothing to do.  */
 
   /* We keep a list of the linker hash table entries that correspond
      to particular symbols.  We could just look them up in the hash
@@ -3039,7 +3035,7 @@ aout_link_add_symbols (bfd *abfd, struct
   amt = sym_count * sizeof (struct aout_link_hash_entry *);
   sym_hash = (struct aout_link_hash_entry **) bfd_alloc (abfd, amt);
   if (sym_hash == NULL)
-    return FALSE;
+    return false;
   obj_aout_sym_hashes (abfd) = sym_hash;
 
   add_one_symbol = aout_backend_info (abfd)->add_one_symbol;
@@ -3067,7 +3063,7 @@ aout_link_add_symbols (bfd *abfd, struct
 
       /* PR 19629: Corrupt binaries can contain illegal string offsets.  */
       if (GET_WORD (abfd, p->e_strx) >= obj_aout_external_string_size (abfd))
-	return FALSE;
+	return false;
       name = strings + GET_WORD (abfd, p->e_strx);
       value = GET_WORD (abfd, p->e_value);
       flags = BSF_GLOBAL;
@@ -3126,11 +3122,11 @@ aout_link_add_symbols (bfd *abfd, struct
 	     which this one really is.  */
 	  /* See PR 20925 for a reproducer.  */
 	  if (p + 1 >= pend)
-	    return FALSE;
+	    return false;
 	  ++p;
 	  /* PR 19629: Corrupt binaries can contain illegal string offsets.  */
 	  if (GET_WORD (abfd, p->e_strx) >= obj_aout_external_string_size (abfd))
-	    return FALSE;
+	    return false;
 	  string = strings + GET_WORD (abfd, p->e_strx);
 	  section = bfd_ind_section_ptr;
 	  flags |= BSF_INDIRECT;
@@ -3161,12 +3157,12 @@ aout_link_add_symbols (bfd *abfd, struct
 	  /* A warning symbol.  The next symbol is the one to warn
 	     about.  If there is no next symbol, just look away.  */
 	  if (p + 1 >= pend)
-	    return TRUE;
+	    return true;
 	  ++p;
 	  string = name;
 	  /* PR 19629: Corrupt binaries can contain illegal string offsets.  */
 	  if (GET_WORD (abfd, p->e_strx) >= obj_aout_external_string_size (abfd))
-	    return FALSE;
+	    return false;
 	  name = strings + GET_WORD (abfd, p->e_strx);
 	  section = bfd_und_section_ptr;
 	  flags |= BSF_WARNING;
@@ -3197,9 +3193,9 @@ aout_link_add_symbols (bfd *abfd, struct
 	}
 
       if (! ((*add_one_symbol)
-	     (info, abfd, name, flags, section, value, string, copy, FALSE,
+	     (info, abfd, name, flags, section, value, string, copy, false,
 	      (struct bfd_link_hash_entry **) sym_hash)))
-	return FALSE;
+	return false;
 
       /* Restrict the maximum alignment of a common symbol based on
 	 the architecture, since a.out has no way to represent
@@ -3225,12 +3221,12 @@ aout_link_add_symbols (bfd *abfd, struct
 	++sym_hash;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Free up the internal symbols read from an a.out file.  */
 
-static bfd_boolean
+static bool
 aout_link_free_symbols (bfd *abfd)
 {
   if (obj_aout_external_syms (abfd) != NULL)
@@ -3251,24 +3247,24 @@ aout_link_free_symbols (bfd *abfd)
 #endif
       obj_aout_external_strings (abfd) = NULL;
     }
-  return TRUE;
+  return true;
 }
 
 /* Add symbols from an a.out object file.  */
 
-static bfd_boolean
+static bool
 aout_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   if (! aout_get_external_symbols (abfd))
-    return FALSE;
+    return false;
   if (! aout_link_add_symbols (abfd, info))
-    return FALSE;
+    return false;
   if (! info->keep_memory)
     {
       if (! aout_link_free_symbols (abfd))
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Look through the internal symbols to see if this object file should
@@ -3278,17 +3274,17 @@ aout_link_add_object_symbols (bfd *abfd,
    known symbol but we do not include the object file in the link
    (unless there is some other reason to include it).  */
 
-static bfd_boolean
+static bool
 aout_link_check_ar_symbols (bfd *abfd,
 			    struct bfd_link_info *info,
-			    bfd_boolean *pneeded,
+			    bool *pneeded,
 			    bfd **subsbfd)
 {
   struct external_nlist *p;
   struct external_nlist *pend;
   char *strings;
 
-  *pneeded = FALSE;
+  *pneeded = false;
 
   /* Look through all the symbols.  */
   p = obj_aout_external_syms (abfd);
@@ -3318,7 +3314,7 @@ aout_link_check_ar_symbols (bfd *abfd,
 	}
 
       name = strings + GET_WORD (abfd, p->e_strx);
-      h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->hash, name, false, false, true);
 
       /* We are only interested in symbols that are currently
 	 undefined or common.  */
@@ -3379,9 +3375,9 @@ aout_link_check_ar_symbols (bfd *abfd,
 
 	  if (!(*info->callbacks
 		->add_archive_element) (info, abfd, name, subsbfd))
-	    return FALSE;
-	  *pneeded = TRUE;
-	  return TRUE;
+	    return false;
+	  *pneeded = true;
+	  return true;
 	}
 
       if (type == (N_UNDF | N_EXT))
@@ -3407,9 +3403,9 @@ aout_link_check_ar_symbols (bfd *abfd,
 			 option in the linker.  */
 		      if (!(*info->callbacks
 			    ->add_archive_element) (info, abfd, name, subsbfd))
-			return FALSE;
-		      *pneeded = TRUE;
-		      return TRUE;
+			return false;
+		      *pneeded = true;
+		      return true;
 		    }
 		  /* Turn the current link symbol into a common
 		     symbol.  It is already on the undefs list.  */
@@ -3418,7 +3414,7 @@ aout_link_check_ar_symbols (bfd *abfd,
 		    bfd_hash_allocate (&info->hash->table,
 				       sizeof (struct bfd_link_hash_common_entry));
 		  if (h->u.c.p == NULL)
-		    return FALSE;
+		    return false;
 
 		  h->u.c.size = value;
 
@@ -3456,37 +3452,37 @@ aout_link_check_ar_symbols (bfd *abfd,
 	    {
 	      if (!(*info->callbacks
 		    ->add_archive_element) (info, abfd, name, subsbfd))
-		return FALSE;
-	      *pneeded = TRUE;
-	      return TRUE;
+		return false;
+	      *pneeded = true;
+	      return true;
 	    }
 	}
     }
 
   /* We do not need this object file.  */
-  return TRUE;
+  return true;
 }
 /* Check a single archive element to see if we need to include it in
    the link.  *PNEEDED is set according to whether this element is
    needed in the link or not.  This is called from
    _bfd_generic_link_add_archive_symbols.  */
 
-static bfd_boolean
+static bool
 aout_link_check_archive_element (bfd *abfd,
 				 struct bfd_link_info *info,
 				 struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED,
 				 const char *name ATTRIBUTE_UNUSED,
-				 bfd_boolean *pneeded)
+				 bool *pneeded)
 {
   bfd *oldbfd;
-  bfd_boolean needed;
+  bool needed;
 
   if (!aout_get_external_symbols (abfd))
-    return FALSE;
+    return false;
 
   oldbfd = abfd;
   if (!aout_link_check_ar_symbols (abfd, info, pneeded, &abfd))
-    return FALSE;
+    return false;
 
   needed = *pneeded;
   if (needed)
@@ -3497,27 +3493,27 @@ aout_link_check_archive_element (bfd *ab
 	{
 	  if (!info->keep_memory
 	      && !aout_link_free_symbols (oldbfd))
-	    return FALSE;
+	    return false;
 	  if (!aout_get_external_symbols (abfd))
-	    return FALSE;
+	    return false;
 	}
       if (!aout_link_add_symbols (abfd, info))
-	return FALSE;
+	return false;
     }
 
   if (!info->keep_memory || !needed)
     {
       if (!aout_link_free_symbols (abfd))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Given an a.out BFD, add symbols to the global hash table as
    appropriate.  */
 
-bfd_boolean
+bool
 NAME (aout, link_add_symbols) (bfd *abfd, struct bfd_link_info *info)
 {
   switch (bfd_get_format (abfd))
@@ -3529,7 +3525,7 @@ NAME (aout, link_add_symbols) (bfd *abfd
 	(abfd, info, aout_link_check_archive_element);
     default:
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 }
 
@@ -3624,7 +3620,7 @@ aout_link_includes_newfunc (struct bfd_h
 /* Write out a symbol that was not associated with an a.out input
    object.  */
 
-static bfd_boolean
+static bool
 aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 {
   struct aout_link_hash_entry *h = (struct aout_link_hash_entry *) bh;
@@ -3634,13 +3630,13 @@ aout_link_write_other_symbol (struct bfd
   bfd_vma val;
   struct external_nlist outsym;
   bfd_size_type indx;
-  bfd_size_type amt;
+  size_t amt;
 
   if (h->root.type == bfd_link_hash_warning)
     {
       h = (struct aout_link_hash_entry *) h->root.u.i.link;
       if (h->root.type == bfd_link_hash_new)
-	return TRUE;
+	return true;
     }
 
   output_bfd = flaginfo->output_bfd;
@@ -3656,17 +3652,17 @@ aout_link_write_other_symbol (struct bfd
     }
 
   if (h->written)
-    return TRUE;
+    return true;
 
-  h->written = TRUE;
+  h->written = true;
 
   /* An indx of -2 means the symbol must be written.  */
   if (h->indx != -2
       && (flaginfo->info->strip == strip_all
 	  || (flaginfo->info->strip == strip_some
 	      && bfd_hash_lookup (flaginfo->info->keep_hash, h->root.root.string,
-				  FALSE, FALSE) == NULL)))
-    return TRUE;
+				  false, false) == NULL)))
+    return true;
 
   switch (h->root.type)
     {
@@ -3674,11 +3670,11 @@ aout_link_write_other_symbol (struct bfd
     case bfd_link_hash_warning:
       abort ();
       /* Avoid variable not initialized warnings.  */
-      return TRUE;
+      return true;
     case bfd_link_hash_new:
       /* This can happen for set symbols when sets are not being
 	 built.  */
-      return TRUE;
+      return true;
     case bfd_link_hash_undefined:
       type = N_UNDF | N_EXT;
       val = 0;
@@ -3716,14 +3712,14 @@ aout_link_write_other_symbol (struct bfd
     case bfd_link_hash_indirect:
       /* We ignore these symbols, since the indirected symbol is
 	 already in the hash table.  */
-      return TRUE;
+      return true;
     }
 
   H_PUT_8 (output_bfd, type, outsym.e_type);
   H_PUT_8 (output_bfd, 0, outsym.e_other);
   H_PUT_16 (output_bfd, 0, outsym.e_desc);
   indx = add_to_stringtab (output_bfd, flaginfo->strtab, h->root.root.string,
-			   FALSE);
+			   false);
   if (indx == - (bfd_size_type) 1)
     /* FIXME: No way to handle errors.  */
     abort ();
@@ -3733,7 +3729,7 @@ aout_link_write_other_symbol (struct bfd
 
   amt = EXTERNAL_NLIST_SIZE;
   if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0
-      || bfd_bwrite ((void *) &outsym, amt, output_bfd) != amt)
+      || bfd_write (&outsym, amt, output_bfd) != amt)
     /* FIXME: No way to handle errors.  */
     abort ();
 
@@ -3741,12 +3737,12 @@ aout_link_write_other_symbol (struct bfd
   h->indx = obj_aout_external_sym_count (output_bfd);
   ++obj_aout_external_sym_count (output_bfd);
 
-  return TRUE;
+  return true;
 }
 
 /* Handle a link order which is supposed to generate a reloc.  */
 
-static bfd_boolean
+static bool
 aout_link_reloc_link_order (struct aout_final_link_info *flaginfo,
 			    asection *o,
 			    struct bfd_link_order *p)
@@ -3759,7 +3755,7 @@ aout_link_reloc_link_order (struct aout_
   struct reloc_std_external srel;
   struct reloc_ext_external erel;
   void * rel_ptr;
-  bfd_size_type amt;
+  size_t amt;
 
   pr = p->u.reloc.p;
 
@@ -3782,7 +3778,7 @@ aout_link_reloc_link_order (struct aout_
       r_extern = 1;
       h = ((struct aout_link_hash_entry *)
 	   bfd_wrapped_link_hash_lookup (flaginfo->output_bfd, flaginfo->info,
-					 pr->u.name, FALSE, FALSE, TRUE));
+					 pr->u.name, false, false, true));
       if (h != NULL
 	  && h->indx >= 0)
 	r_index = h->indx;
@@ -3793,9 +3789,9 @@ aout_link_reloc_link_order (struct aout_
 	     here.  I don't think that will ever matter for a global
 	     symbol.  */
 	  h->indx = -2;
-	  h->written = FALSE;
+	  h->written = false;
 	  if (!aout_link_write_other_symbol (&h->root.root, flaginfo))
-	    return FALSE;
+	    return false;
 	  r_index = h->indx;
 	}
       else
@@ -3810,7 +3806,7 @@ aout_link_reloc_link_order (struct aout_
   if (howto == 0)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   if (o == obj_textsec (flaginfo->output_bfd))
@@ -3831,13 +3827,13 @@ aout_link_reloc_link_order (struct aout_
 	int r_baserel;
 	int r_jmptable;
 	int r_relative;
-	int r_length;
+	unsigned int r_length;
 
 	r_pcrel = (int) howto->pc_relative;
 	r_baserel = (howto->type & 8) != 0;
 	r_jmptable = (howto->type & 16) != 0;
 	r_relative = (howto->type & 32) != 0;
-	r_length = howto->size;
+	r_length = bfd_log2 (bfd_get_reloc_size (howto));
 
 	PUT_WORD (flaginfo->output_bfd, p->offset, srel.r_address);
 	if (bfd_header_big_endian (flaginfo->output_bfd))
@@ -3880,12 +3876,12 @@ aout_link_reloc_link_order (struct aout_
 	  bfd_size_type size;
 	  bfd_reloc_status_type r;
 	  bfd_byte *buf;
-	  bfd_boolean ok;
+	  bool ok;
 
 	  size = bfd_get_reloc_size (howto);
 	  buf = (bfd_byte *) bfd_zmalloc (size);
 	  if (buf == NULL && size != 0)
-	    return FALSE;
+	    return false;
 	  r = MY_relocate_contents (howto, flaginfo->output_bfd,
 				    (bfd_vma) pr->addend, buf);
 	  switch (r)
@@ -3908,7 +3904,7 @@ aout_link_reloc_link_order (struct aout_
 					 (file_ptr) p->offset, size);
 	  free (buf);
 	  if (! ok)
-	    return FALSE;
+	    return false;
 	}
     }
   else
@@ -3946,8 +3942,8 @@ aout_link_reloc_link_order (struct aout_
 
   amt = obj_reloc_entry_size (flaginfo->output_bfd);
   if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0
-      || bfd_bwrite (rel_ptr, amt, flaginfo->output_bfd) != amt)
-    return FALSE;
+      || bfd_write (rel_ptr, amt, flaginfo->output_bfd) != amt)
+    return false;
 
   *reloff_ptr += obj_reloc_entry_size (flaginfo->output_bfd);
 
@@ -3958,12 +3954,12 @@ aout_link_reloc_link_order (struct aout_
 		  || (*reloff_ptr
 		      <= obj_datasec (flaginfo->output_bfd)->rel_filepos)));
 
-  return TRUE;
+  return true;
 }
 
 /* Get the section corresponding to a reloc index.  */
 
-static INLINE asection *
+static inline asection *
 aout_reloc_index_to_section (bfd *abfd, int indx)
 {
   switch (indx & N_TYPE)
@@ -3980,7 +3976,7 @@ aout_reloc_index_to_section (bfd *abfd,
 
 /* Relocate an a.out section using standard a.out relocs.  */
 
-static bfd_boolean
+static bool
 aout_link_input_section_std (struct aout_final_link_info *flaginfo,
 			     bfd *input_bfd,
 			     asection *input_section,
@@ -3988,12 +3984,11 @@ aout_link_input_section_std (struct aout
 			     bfd_size_type rel_size,
 			     bfd_byte *contents)
 {
-  bfd_boolean (*check_dynamic_reloc)
+  bool (*check_dynamic_reloc)
     (struct bfd_link_info *, bfd *, asection *,
-	     struct aout_link_hash_entry *, void *, bfd_byte *, bfd_boolean *,
-	     bfd_vma *);
+     struct aout_link_hash_entry *, void *, bfd_byte *, bool *, bfd_vma *);
   bfd *output_bfd;
-  bfd_boolean relocatable;
+  bool relocatable;
   struct external_nlist *syms;
   char *strings;
   struct aout_link_hash_entry **sym_hashes;
@@ -4021,7 +4016,7 @@ aout_link_input_section_std (struct aout
   for (; rel < rel_end; rel++)
     {
       bfd_vma r_addr;
-      int r_index;
+      unsigned int r_index;
       int r_extern;
       int r_pcrel;
       int r_baserel = 0;
@@ -4085,7 +4080,7 @@ aout_link_input_section_std (struct aout
 	  _bfd_error_handler (_("%pB: unsupported relocation type"),
 			      input_bfd);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       if (relocatable)
@@ -4133,7 +4128,7 @@ aout_link_input_section_std (struct aout
 		     map.  */
 		  r_index = symbol_map[r_index];
 
-		  if (r_index == -1)
+		  if (r_index == -1u)
 		    {
 		      if (h != NULL)
 			{
@@ -4145,10 +4140,10 @@ aout_link_input_section_std (struct aout
 			  if (h->indx < 0)
 			    {
 			      h->indx = -2;
-			      h->written = FALSE;
+			      h->written = false;
 			      if (!aout_link_write_other_symbol (&h->root.root,
 								 flaginfo))
-				return FALSE;
+				return false;
 			    }
 			  r_index = h->indx;
 			}
@@ -4220,11 +4215,11 @@ aout_link_input_section_std (struct aout
 	}
       else
 	{
-	  bfd_boolean hundef;
+	  bool hundef;
 
 	  /* We are generating an executable, and must do a full
 	     relocation.  */
-	  hundef = FALSE;
+	  hundef = false;
 
 	  if (r_extern)
 	    {
@@ -4243,7 +4238,7 @@ aout_link_input_section_std (struct aout
 		relocation = 0;
 	      else
 		{
-		  hundef = TRUE;
+		  hundef = true;
 		  relocation = 0;
 		}
 	    }
@@ -4261,12 +4256,12 @@ aout_link_input_section_std (struct aout
 
 	  if (check_dynamic_reloc != NULL)
 	    {
-	      bfd_boolean skip;
+	      bool skip;
 
 	      if (! ((*check_dynamic_reloc)
 		     (flaginfo->info, input_bfd, input_section, h,
 		      (void *) rel, contents, &skip, &relocation)))
-		return FALSE;
+		return false;
 	      if (skip)
 		continue;
 	    }
@@ -4283,7 +4278,7 @@ aout_link_input_section_std (struct aout
 	      else
 		name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
 	      (*flaginfo->info->callbacks->undefined_symbol)
-		(flaginfo->info, name, input_bfd, input_section, r_addr, TRUE);
+		(flaginfo->info, name, input_bfd, input_section, r_addr, true);
 	    }
 
 	  r = MY_final_link_relocate (howto,
@@ -4324,12 +4319,12 @@ aout_link_input_section_std (struct aout
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relocate an a.out section using extended a.out relocs.  */
 
-static bfd_boolean
+static bool
 aout_link_input_section_ext (struct aout_final_link_info *flaginfo,
 			     bfd *input_bfd,
 			     asection *input_section,
@@ -4337,12 +4332,11 @@ aout_link_input_section_ext (struct aout
 			     bfd_size_type rel_size,
 			     bfd_byte *contents)
 {
-  bfd_boolean (*check_dynamic_reloc)
+  bool (*check_dynamic_reloc)
     (struct bfd_link_info *, bfd *, asection *,
-	     struct aout_link_hash_entry *, void *, bfd_byte *, bfd_boolean *,
-	     bfd_vma *);
+     struct aout_link_hash_entry *, void *, bfd_byte *, bool *, bfd_vma *);
   bfd *output_bfd;
-  bfd_boolean relocatable;
+  bool relocatable;
   struct external_nlist *syms;
   char *strings;
   struct aout_link_hash_entry **sym_hashes;
@@ -4370,7 +4364,7 @@ aout_link_input_section_ext (struct aout
   for (; rel < rel_end; rel++)
     {
       bfd_vma r_addr;
-      int r_index;
+      unsigned int r_index;
       int r_extern;
       unsigned int r_type;
       bfd_vma r_addend;
@@ -4406,7 +4400,7 @@ aout_link_input_section_ext (struct aout
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      input_bfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       if (relocatable)
@@ -4470,7 +4464,7 @@ aout_link_input_section_ext (struct aout
 		     map.  */
 		  r_index = symbol_map[r_index];
 
-		  if (r_index == -1)
+		  if (r_index == -1u)
 		    {
 		      if (h != NULL)
 			{
@@ -4482,10 +4476,10 @@ aout_link_input_section_ext (struct aout
 			  if (h->indx < 0)
 			    {
 			      h->indx = -2;
-			      h->written = FALSE;
+			      h->written = false;
 			      if (!aout_link_write_other_symbol (&h->root.root,
 								 flaginfo))
-				return FALSE;
+				return false;
 			    }
 			  r_index = h->indx;
 			}
@@ -4562,12 +4556,12 @@ aout_link_input_section_ext (struct aout
 	}
       else
 	{
-	  bfd_boolean hundef;
+	  bool hundef;
 	  bfd_reloc_status_type r;
 
 	  /* We are generating an executable, and must do a full
 	     relocation.  */
-	  hundef = FALSE;
+	  hundef = false;
 
 	  if (r_extern)
 	    {
@@ -4586,7 +4580,7 @@ aout_link_input_section_ext (struct aout
 		relocation = 0;
 	      else
 		{
-		  hundef = TRUE;
+		  hundef = true;
 		  relocation = 0;
 		}
 	    }
@@ -4659,12 +4653,12 @@ aout_link_input_section_ext (struct aout
 
 	  if (check_dynamic_reloc != NULL)
 	    {
-	      bfd_boolean skip;
+	      bool skip;
 
 	      if (! ((*check_dynamic_reloc)
 		     (flaginfo->info, input_bfd, input_section, h,
 		      (void *) rel, contents, &skip, &relocation)))
-		return FALSE;
+		return false;
 	      if (skip)
 		continue;
 	    }
@@ -4685,7 +4679,7 @@ aout_link_input_section_ext (struct aout
 	      else
 		name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
 	      (*flaginfo->info->callbacks->undefined_symbol)
-		(flaginfo->info, name, input_bfd, input_section, r_addr, TRUE);
+		(flaginfo->info, name, input_bfd, input_section, r_addr, true);
 	    }
 
 	  if (r_type != (unsigned int) RELOC_SPARC_REV32)
@@ -4740,12 +4734,12 @@ aout_link_input_section_ext (struct aout
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Link an a.out section into the output file.  */
 
-static bfd_boolean
+static bool
 aout_link_input_section (struct aout_final_link_info *flaginfo,
 			 bfd *input_bfd,
 			 asection *input_section,
@@ -4760,7 +4754,7 @@ aout_link_input_section (struct aout_fin
   if (! bfd_get_section_contents (input_bfd, input_section,
 				  (void *) flaginfo->contents,
 				  (file_ptr) 0, input_size))
-    return FALSE;
+    return false;
 
   /* Read in the relocs if we haven't already done it.  */
   if (aout_section_data (input_section) != NULL
@@ -4772,8 +4766,8 @@ aout_link_input_section (struct aout_fin
       if (rel_size > 0)
 	{
 	  if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0
-	      || bfd_bread (relocs, rel_size, input_bfd) != rel_size)
-	    return FALSE;
+	      || bfd_read (relocs, rel_size, input_bfd) != rel_size)
+	    return false;
 	}
     }
 
@@ -4783,14 +4777,14 @@ aout_link_input_section (struct aout_fin
       if (! aout_link_input_section_std (flaginfo, input_bfd, input_section,
 					 (struct reloc_std_external *) relocs,
 					 rel_size, flaginfo->contents))
-	return FALSE;
+	return false;
     }
   else
     {
       if (! aout_link_input_section_ext (flaginfo, input_bfd, input_section,
 					 (struct reloc_ext_external *) relocs,
 					 rel_size, flaginfo->contents))
-	return FALSE;
+	return false;
     }
 
   /* Write out the section contents.  */
@@ -4799,16 +4793,16 @@ aout_link_input_section (struct aout_fin
 				  (void *) flaginfo->contents,
 				  (file_ptr) input_section->output_offset,
 				  input_size))
-    return FALSE;
+    return false;
 
   /* If we are producing relocatable output, the relocs were
      modified, and we now write them out.  */
   if (bfd_link_relocatable (flaginfo->info) && rel_size > 0)
     {
       if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0)
-	return FALSE;
-      if (bfd_bwrite (relocs, rel_size, flaginfo->output_bfd) != rel_size)
-	return FALSE;
+	return false;
+      if (bfd_write (relocs, rel_size, flaginfo->output_bfd) != rel_size)
+	return false;
       *reloff_ptr += rel_size;
 
       /* Assert that the relocs have not run into the symbols, and
@@ -4820,13 +4814,13 @@ aout_link_input_section (struct aout_fin
 			  <= obj_datasec (flaginfo->output_bfd)->rel_filepos)));
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust and write out the symbols for an a.out file.  Set the new
    symbol indices into a symbol_map.  */
 
-static bfd_boolean
+static bool
 aout_link_write_symbols (struct aout_final_link_info *flaginfo, bfd *input_bfd)
 {
   bfd *output_bfd;
@@ -4840,8 +4834,8 @@ aout_link_write_symbols (struct aout_fin
   struct external_nlist *sym_end;
   struct aout_link_hash_entry **sym_hash;
   int *symbol_map;
-  bfd_boolean pass;
-  bfd_boolean skip_next;
+  bool pass;
+  bool skip_next;
 
   output_bfd = flaginfo->output_bfd;
   sym_count = obj_aout_external_sym_count (input_bfd);
@@ -4854,17 +4848,18 @@ aout_link_write_symbols (struct aout_fin
      discarding such symbols.  */
   if (strip != strip_all
       && (strip != strip_some
-	  || bfd_hash_lookup (flaginfo->info->keep_hash, input_bfd->filename,
-			      FALSE, FALSE) != NULL)
+	  || bfd_hash_lookup (flaginfo->info->keep_hash,
+			      bfd_get_filename (input_bfd),
+			      false, false) != NULL)
       && discard != discard_all)
     {
       H_PUT_8 (output_bfd, N_TEXT, outsym->e_type);
       H_PUT_8 (output_bfd, 0, outsym->e_other);
       H_PUT_16 (output_bfd, 0, outsym->e_desc);
       strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab,
-				       input_bfd->filename, FALSE);
+				       bfd_get_filename (input_bfd), false);
       if (strtab_index == (bfd_size_type) -1)
-	return FALSE;
+	return false;
       PUT_WORD (output_bfd, strtab_index, outsym->e_strx);
       PUT_WORD (output_bfd,
 		(bfd_section_vma (obj_textsec (input_bfd)->output_section)
@@ -4874,8 +4869,8 @@ aout_link_write_symbols (struct aout_fin
       ++outsym;
     }
 
-  pass = FALSE;
-  skip_next = FALSE;
+  pass = false;
+  skip_next = false;
   sym = obj_aout_external_syms (input_bfd);
   sym_end = sym + sym_count;
   sym_hash = obj_aout_sym_hashes (input_bfd);
@@ -4886,10 +4881,10 @@ aout_link_write_symbols (struct aout_fin
       const char *name;
       int type;
       struct aout_link_hash_entry *h;
-      bfd_boolean skip;
+      bool skip;
       asection *symsec;
       bfd_vma val = 0;
-      bfd_boolean copy;
+      bool copy;
 
       /* We set *symbol_map to 0 above for all symbols.  If it has
 	 already been set to -1 for this symbol, it means that we are
@@ -4913,14 +4908,14 @@ aout_link_write_symbols (struct aout_fin
 	  /* Pass this symbol through.  It is the target of an
 	     indirect or warning symbol.  */
 	  val = GET_WORD (input_bfd, sym->e_value);
-	  pass = FALSE;
+	  pass = false;
 	}
       else if (skip_next)
 	{
 	  /* Skip this symbol, which is the target of an indirect
 	     symbol that we have changed to no longer be an indirect
 	     symbol.  */
-	  skip_next = FALSE;
+	  skip_next = false;
 	  continue;
 	}
       else
@@ -4962,34 +4957,34 @@ aout_link_write_symbols (struct aout_fin
 	    {
 	      if ((type & N_TYPE) == N_INDR
 		  || type == N_WARNING)
-		skip_next = TRUE;
+		skip_next = true;
 	      *symbol_map = h->indx;
 	      continue;
 	    }
 
 	  /* See if we are stripping this symbol.  */
-	  skip = FALSE;
+	  skip = false;
 	  switch (strip)
 	    {
 	    case strip_none:
 	      break;
 	    case strip_debugger:
 	      if ((type & N_STAB) != 0)
-		skip = TRUE;
+		skip = true;
 	      break;
 	    case strip_some:
-	      if (bfd_hash_lookup (flaginfo->info->keep_hash, name, FALSE, FALSE)
+	      if (bfd_hash_lookup (flaginfo->info->keep_hash, name, false, false)
 		  == NULL)
-		skip = TRUE;
+		skip = true;
 	      break;
 	    case strip_all:
-	      skip = TRUE;
+	      skip = true;
 	      break;
 	    }
 	  if (skip)
 	    {
 	      if (h != NULL)
-		h->written = TRUE;
+		h->written = true;
 	      continue;
 	    }
 
@@ -5018,7 +5013,7 @@ aout_link_write_symbols (struct aout_fin
 		 the indirect symbol was defined, we output it with
 		 the correct definition so the debugger will
 		 understand it.  */
-	      pass = TRUE;
+	      pass = true;
 	      val = GET_WORD (input_bfd, sym->e_value);
 	      symsec = NULL;
 	    }
@@ -5034,7 +5029,7 @@ aout_link_write_symbols (struct aout_fin
 		 a case we do not want to output the next symbol,
 		 which is the target of the indirection.  */
 	      if ((type & N_TYPE) == N_INDR)
-		skip_next = TRUE;
+		skip_next = true;
 
 	      symsec = NULL;
 
@@ -5126,7 +5121,7 @@ aout_link_write_symbols (struct aout_fin
 	     it is a local symbol see if we should discard it.  */
 	  if (h != NULL)
 	    {
-	      h->written = TRUE;
+	      h->written = true;
 	      h->indx = obj_aout_external_sym_count (output_bfd);
 	    }
 	  else if ((type & N_TYPE) != N_SETT
@@ -5142,15 +5137,15 @@ aout_link_write_symbols (struct aout_fin
 		case discard_l:
 		  if ((type & N_STAB) == 0
 		      && bfd_is_local_label_name (input_bfd, name))
-		    skip = TRUE;
+		    skip = true;
 		  break;
 		case discard_all:
-		  skip = TRUE;
+		  skip = true;
 		  break;
 		}
 	      if (skip)
 		{
-		  pass = FALSE;
+		  pass = false;
 		  continue;
 		}
 	    }
@@ -5206,11 +5201,11 @@ aout_link_write_symbols (struct aout_fin
 	      /* If we have already included a header file with the
 		 same value, then replace this one with an N_EXCL
 		 symbol.  */
-	      copy = (bfd_boolean) (! flaginfo->info->keep_memory);
+	      copy = !flaginfo->info->keep_memory;
 	      incl_entry = aout_link_includes_lookup (&flaginfo->includes,
-						      name, TRUE, copy);
+						      name, true, copy);
 	      if (incl_entry == NULL)
-		return FALSE;
+		return false;
 	      for (t = incl_entry->totals; t != NULL; t = t->next)
 		if (t->total == val)
 		  break;
@@ -5222,7 +5217,7 @@ aout_link_write_symbols (struct aout_fin
 		      bfd_hash_allocate (&flaginfo->includes.root,
 					 sizeof *t);
 		  if (t == NULL)
-		    return FALSE;
+		    return false;
 		  t->total = val;
 		  t->next = incl_entry->totals;
 		  incl_entry->totals = t;
@@ -5267,7 +5262,7 @@ aout_link_write_symbols (struct aout_fin
       H_PUT_8 (output_bfd, type, outsym->e_type);
       H_PUT_8 (output_bfd, H_GET_8 (input_bfd, sym->e_other), outsym->e_other);
       H_PUT_16 (output_bfd, H_GET_16 (input_bfd, sym->e_desc), outsym->e_desc);
-      copy = FALSE;
+      copy = false;
       if (! flaginfo->info->keep_memory)
 	{
 	  /* name points into a string table which we are going to
@@ -5276,12 +5271,12 @@ aout_link_write_symbols (struct aout_fin
 	  if (h != NULL)
 	    name = h->root.root.string;
 	  else
-	    copy = TRUE;
+	    copy = true;
 	}
       strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab,
 				       name, copy);
       if (strtab_index == (bfd_size_type) -1)
-	return FALSE;
+	return false;
       PUT_WORD (output_bfd, strtab_index, outsym->e_strx);
       PUT_WORD (output_bfd, val, outsym->e_value);
       *symbol_map = obj_aout_external_sym_count (output_bfd);
@@ -5295,21 +5290,21 @@ aout_link_write_symbols (struct aout_fin
       bfd_size_type outsym_size;
 
       if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
       outsym_size = outsym - flaginfo->output_syms;
       outsym_size *= EXTERNAL_NLIST_SIZE;
-      if (bfd_bwrite ((void *) flaginfo->output_syms, outsym_size, output_bfd)
+      if (bfd_write (flaginfo->output_syms, outsym_size, output_bfd)
 	  != outsym_size)
-	return FALSE;
+	return false;
       flaginfo->symoff += outsym_size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Link an a.out input BFD into the output file.  */
 
-static bfd_boolean
+static bool
 aout_link_input_bfd (struct aout_final_link_info *flaginfo, bfd *input_bfd)
 {
   BFD_ASSERT (bfd_get_format (input_bfd) == bfd_object);
@@ -5323,12 +5318,12 @@ aout_link_input_bfd (struct aout_final_l
   /* Get the symbols.  We probably have them already, unless
      flaginfo->info->keep_memory is FALSE.  */
   if (! aout_get_external_symbols (input_bfd))
-    return FALSE;
+    return false;
 
   /* Write out the symbols and get a map of the new indices.  The map
      is placed into flaginfo->symbol_map.  */
   if (! aout_link_write_symbols (flaginfo, input_bfd))
-    return FALSE;
+    return false;
 
   /* Relocate and write out the sections.  These functions use the
      symbol map created by aout_link_write_symbols.  The linker_mark
@@ -5340,7 +5335,7 @@ aout_link_input_bfd (struct aout_final_l
 				     obj_textsec (input_bfd),
 				     &flaginfo->treloff,
 				     exec_hdr (input_bfd)->a_trsize))
-	return FALSE;
+	return false;
     }
   if (obj_datasec (input_bfd)->linker_mark)
     {
@@ -5348,7 +5343,7 @@ aout_link_input_bfd (struct aout_final_l
 				     obj_datasec (input_bfd),
 				     &flaginfo->dreloff,
 				     exec_hdr (input_bfd)->a_drsize))
-	return FALSE;
+	return false;
     }
 
   /* If we are not keeping memory, we don't need the symbols any
@@ -5357,10 +5352,10 @@ aout_link_input_bfd (struct aout_final_l
   if (! flaginfo->info->keep_memory)
     {
       if (! aout_link_free_symbols (input_bfd))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Do the final link step.  This is called on the output BFD.  The
@@ -5370,13 +5365,13 @@ aout_link_input_bfd (struct aout_final_l
    of bfd_link_order structures which list all the input sections for
    the output section.  */
 
-bfd_boolean
+bool
 NAME (aout, final_link) (bfd *abfd,
 			 struct bfd_link_info *info,
 			 void (*callback) (bfd *, file_ptr *, file_ptr *, file_ptr *))
 {
   struct aout_final_link_info aout_info;
-  bfd_boolean includes_hash_initialized = FALSE;
+  bool includes_hash_initialized = false;
   bfd *sub;
   bfd_size_type trsize, drsize;
   bfd_size_type max_contents_size;
@@ -5384,7 +5379,7 @@ NAME (aout, final_link) (bfd *abfd,
   bfd_size_type max_sym_count;
   struct bfd_link_order *p;
   asection *o;
-  bfd_boolean have_link_order_relocs;
+  bool have_link_order_relocs;
 
   if (bfd_link_pic (info))
     abfd->flags |= DYNAMIC;
@@ -5401,7 +5396,7 @@ NAME (aout, final_link) (bfd *abfd,
 			      sizeof (struct aout_link_includes_entry),
 			      251))
     goto error_return;
-  includes_hash_initialized = TRUE;
+  includes_hash_initialized = true;
 
   /* Figure out the largest section size.  Also, if generating
      relocatable output, count the relocs.  */
@@ -5522,7 +5517,7 @@ NAME (aout, final_link) (bfd *abfd,
     struct aout_link_hash_entry *h;
 
     h = aout_link_hash_lookup (aout_hash_table (info), "__DYNAMIC",
-			       FALSE, FALSE, FALSE);
+			       false, false, false);
     if (h != NULL)
       aout_link_write_other_symbol (&h->root.root, &aout_info);
   }
@@ -5549,7 +5544,7 @@ NAME (aout, final_link) (bfd *abfd,
      We use the output_has_begun field of the input BFDs to see
      whether we have already handled it.  */
   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
-    sub->output_has_begun = FALSE;
+    sub->output_has_begun = false;
 
   /* Mark all sections which are to be included in the link.  This
      will normally be every section.  We need to do this so that we
@@ -5559,10 +5554,10 @@ NAME (aout, final_link) (bfd *abfd,
     {
       for (p = o->map_head.link_order; p != NULL; p = p->next)
 	if (p->type == bfd_indirect_link_order)
-	  p->u.indirect.section->linker_mark = TRUE;
+	  p->u.indirect.section->linker_mark = true;
     }
 
-  have_link_order_relocs = FALSE;
+  have_link_order_relocs = false;
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       for (p = o->map_head.link_order;
@@ -5580,14 +5575,14 @@ NAME (aout, final_link) (bfd *abfd,
 		{
 		  if (! aout_link_input_bfd (&aout_info, input_bfd))
 		    goto error_return;
-		  input_bfd->output_has_begun = TRUE;
+		  input_bfd->output_has_begun = true;
 		}
 	    }
 	  else if (p->type == bfd_section_reloc_link_order
 		   || p->type == bfd_symbol_reloc_link_order)
 	    {
 	      /* These are handled below.  */
-	      have_link_order_relocs = TRUE;
+	      have_link_order_relocs = true;
 	    }
 	  else
 	    {
@@ -5624,30 +5619,19 @@ NAME (aout, final_link) (bfd *abfd,
 	}
     }
 
-  if (aout_info.contents != NULL)
-    {
-      free (aout_info.contents);
-      aout_info.contents = NULL;
-    }
-  if (aout_info.relocs != NULL)
-    {
-      free (aout_info.relocs);
-      aout_info.relocs = NULL;
-    }
-  if (aout_info.symbol_map != NULL)
-    {
-      free (aout_info.symbol_map);
-      aout_info.symbol_map = NULL;
-    }
-  if (aout_info.output_syms != NULL)
-    {
-      free (aout_info.output_syms);
-      aout_info.output_syms = NULL;
-    }
+  free (aout_info.contents);
+  aout_info.contents = NULL;
+  free (aout_info.relocs);
+  aout_info.relocs = NULL;
+  free (aout_info.symbol_map);
+  aout_info.symbol_map = NULL;
+  free (aout_info.output_syms);
+  aout_info.output_syms = NULL;
+
   if (includes_hash_initialized)
     {
       bfd_hash_table_free (&aout_info.includes.root);
-      includes_hash_initialized = FALSE;
+      includes_hash_initialized = false;
     }
 
   /* Finish up any dynamic linking we may be doing.  */
@@ -5679,22 +5663,18 @@ NAME (aout, final_link) (bfd *abfd,
       bfd_byte b[BYTES_IN_WORD];
 
       memset (b, 0, BYTES_IN_WORD);
-      if (bfd_bwrite (b, (bfd_size_type) BYTES_IN_WORD, abfd) != BYTES_IN_WORD)
+      if (bfd_write (b, BYTES_IN_WORD, abfd) != BYTES_IN_WORD)
 	goto error_return;
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (aout_info.contents != NULL)
-    free (aout_info.contents);
-  if (aout_info.relocs != NULL)
-    free (aout_info.relocs);
-  if (aout_info.symbol_map != NULL)
-    free (aout_info.symbol_map);
-  if (aout_info.output_syms != NULL)
-    free (aout_info.output_syms);
+  free (aout_info.contents);
+  free (aout_info.relocs);
+  free (aout_info.symbol_map);
+  free (aout_info.output_syms);
   if (includes_hash_initialized)
     bfd_hash_table_free (&aout_info.includes.root);
-  return FALSE;
+  return false;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/arc-got.h ./bfd/arc-got.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/arc-got.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/arc-got.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* ARC-specific support for 32-bit ELF
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
    Contributed by Cupertino Miranda (cmiranda@synopsys.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -49,8 +49,8 @@ struct got_entry
   struct got_entry *next;
   enum tls_type_e type;
   bfd_vma offset;
-  bfd_boolean processed;
-  bfd_boolean created_dyn_relocation;
+  bool processed;
+  bool created_dyn_relocation;
   enum tls_got_entries existing_entries;
 };
 
@@ -114,8 +114,8 @@ new_got_entry_to_list (struct got_entry
   entry->type = type;
   entry->offset = offset;
   entry->next = NULL;
-  entry->processed = FALSE;
-  entry->created_dyn_relocation = FALSE;
+  entry->processed = false;
+  entry->created_dyn_relocation = false;
   entry->existing_entries = existing_entries;
 
   ARC_DEBUG ("New GOT got entry added to list: "
@@ -210,11 +210,11 @@ arc_got_entry_type_for_reloc (reloc_howt
     if (H)								\
       if (H->dynindx == -1 && !H->forced_local)				\
 	if (! bfd_elf_link_record_dynamic_symbol (info, H))		\
-	  return FALSE;							\
+	  return false;							\
      htab->s##SECNAME->size += 4;					\
    }									\
 
-static bfd_boolean
+static bool
 arc_fill_got_info_for_reloc (enum tls_type_e type,
 			     struct got_entry **list,
 			     struct bfd_link_info *  info,
@@ -223,7 +223,7 @@ arc_fill_got_info_for_reloc (enum tls_ty
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
   if (got_entry_for_type (list, type) != NULL)
-    return TRUE;
+    return true;
 
   switch (type)
     {
@@ -240,9 +240,9 @@ arc_fill_got_info_for_reloc (enum tls_ty
       case GOT_TLS_GD:
 	{
 	  bfd_vma offset
-	    = ADD_SYMBOL_REF_SEC_AND_RELOC (got, TRUE, h);
+	    = ADD_SYMBOL_REF_SEC_AND_RELOC (got, true, h);
 	  bfd_vma ATTRIBUTE_UNUSED notneeded
-	    = ADD_SYMBOL_REF_SEC_AND_RELOC (got, TRUE, h);
+	    = ADD_SYMBOL_REF_SEC_AND_RELOC (got, true, h);
 	  new_got_entry_to_list (list, type, offset, TLS_GOT_MOD_AND_OFF);
 	}
 	break;
@@ -250,18 +250,60 @@ arc_fill_got_info_for_reloc (enum tls_ty
       case GOT_TLS_LE:
 	{
 	  bfd_vma offset
-	    = ADD_SYMBOL_REF_SEC_AND_RELOC (got, TRUE, h);
+	    = ADD_SYMBOL_REF_SEC_AND_RELOC (got, true, h);
 	  new_got_entry_to_list (list, type, offset, TLS_GOT_OFF);
 	}
 	break;
 
       default:
-	return FALSE;
+	return false;
 	break;
     }
-  return TRUE;
+  return true;
 }
 
+struct arc_static_sym_data {
+  bfd_vma sym_value;
+  const char *symbol_name;
+};
+
+static struct arc_static_sym_data
+get_static_sym_data (unsigned long  r_symndx,
+		     Elf_Internal_Sym  *local_syms,
+		     asection **local_sections,
+		     struct elf_link_hash_entry *h,
+		     struct arc_relocation_data *reloc_data)
+{
+  static const char local_name[] = "(local)";
+  struct arc_static_sym_data ret = { 0, NULL };
+
+  if (h != NULL)
+    {
+      BFD_ASSERT (h->root.type != bfd_link_hash_undefweak
+		  && h->root.type != bfd_link_hash_undefined);
+      /* TODO: This should not be here.  */
+      reloc_data->sym_value = h->root.u.def.value;
+      reloc_data->sym_section = h->root.u.def.section;
+
+      ret.sym_value = h->root.u.def.value
+	+ h->root.u.def.section->output_section->vma
+	+ h->root.u.def.section->output_offset;
+
+      ret.symbol_name = h->root.root.string;
+    }
+  else
+  {
+    Elf_Internal_Sym *sym = local_syms + r_symndx;
+    asection *sec = local_sections[r_symndx];
+
+    ret.sym_value = sym->st_value
+      + sec->output_section->vma
+      + sec->output_offset;
+
+    ret.symbol_name = local_name;
+  }
+  return ret;
+}
 
 static bfd_vma
 relocate_fix_got_relocs_for_got_info (struct got_entry **	   list_p,
@@ -284,44 +326,13 @@ relocate_fix_got_relocs_for_got_info (st
   BFD_ASSERT (entry);
 
   if (h == NULL
-      || h->forced_local == TRUE
+      || h->forced_local == true
       || (! elf_hash_table (info)->dynamic_sections_created
 	  || (bfd_link_pic (info)
 	      && SYMBOL_REFERENCES_LOCAL (info, h))))
     {
       const char ATTRIBUTE_UNUSED *symbol_name;
-      static const char local_name[] = "(local)";
-      asection *tls_sec = NULL;
-      bfd_vma sym_value = 0;
-
-      if (h != NULL)
-	{
-	  // TODO: This should not be here.
-	  reloc_data->sym_value = h->root.u.def.value;
-	  reloc_data->sym_section = h->root.u.def.section;
-
-	  sym_value = h->root.u.def.value
-	    + h->root.u.def.section->output_section->vma
-	    + h->root.u.def.section->output_offset;
-
-	  tls_sec = elf_hash_table (info)->tls_sec;
-
-	  symbol_name = h->root.root.string;
-	}
-      else
-	{
-	  Elf_Internal_Sym *sym = local_syms + r_symndx;
-	  asection *sec = local_sections[r_symndx];
-
-	  sym_value = sym->st_value
-	    + sec->output_section->vma
-	    + sec->output_offset;
-
-	  tls_sec = elf_hash_table (info)->tls_sec;
-
-	  symbol_name = local_name;
-	}
-
+      asection *tls_sec = elf_hash_table (info)->tls_sec;
 
       if (entry && !entry->processed)
 	{
@@ -335,8 +346,12 @@ relocate_fix_got_relocs_for_got_info (st
 		if (h == NULL || h->forced_local
 		   || !elf_hash_table (info)->dynamic_sections_created)
 		  {
+		    struct arc_static_sym_data tmp =
+		      get_static_sym_data (r_symndx, local_syms, local_sections,
+					   h, reloc_data);
+
 		    bfd_put_32 (output_bfd,
-			    sym_value - sec_vma
+			    tmp.sym_value - sec_vma
 			    + (elf_hash_table (info)->dynamic_sections_created
 			       ? 0
 			       : (align_power (0,
@@ -355,7 +370,7 @@ relocate_fix_got_relocs_for_got_info (st
 			     + entry->offset
 			     + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
 				? 4 : 0)),
-			  symbol_name);
+			  tmp.symbol_name);
 		  }
 	      }
 	      break;
@@ -366,8 +381,12 @@ relocate_fix_got_relocs_for_got_info (st
 		bfd_vma ATTRIBUTE_UNUSED sec_vma
 		  = tls_sec->output_section->vma;
 
+		struct arc_static_sym_data tmp =
+		  get_static_sym_data (r_symndx, local_syms, local_sections,
+				       h, reloc_data);
+
 		bfd_put_32 (output_bfd,
-			    sym_value - sec_vma
+			    tmp.sym_value - sec_vma
 			    + (elf_hash_table (info)->dynamic_sections_created
 			       ? 0
 			       : (align_power (TCB_SIZE,
@@ -386,7 +405,7 @@ relocate_fix_got_relocs_for_got_info (st
 			      + entry->offset
 			      + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
 				 ? 4 : 0)),
-			   symbol_name);
+			   tmp.symbol_name);
 	      }
 	      break;
 
@@ -415,7 +434,8 @@ relocate_fix_got_relocs_for_got_info (st
 			       "@ %#08lx for sym %s in got offset %#lx\n",
 			       (long) (reloc_data->sym_value + sec_vma),
 			       (long) (htab->sgot->output_section->vma
-				       + htab->sgot->output_offset + entry->offset),
+				       + htab->sgot->output_offset
+				       + entry->offset),
 			       symbol_name,
 			       (long) entry->offset);
 		  }
@@ -425,7 +445,7 @@ relocate_fix_got_relocs_for_got_info (st
 	      BFD_ASSERT (0);
 	      break;
 	    }
-	  entry->processed = TRUE;
+	  entry->processed = true;
 	}
     }
 
@@ -460,7 +480,7 @@ create_got_dynrelocs_for_single_entry (s
 	{
 	  ADD_RELA (output_bfd, got, got_offset, h->dynindx, R_ARC_GLOB_DAT, 0);
 	}
-      list->created_dyn_relocation = TRUE;
+      list->created_dyn_relocation = true;
     }
   else if (list->existing_entries != TLS_GOT_NONE
 	   && !list->created_dyn_relocation)
@@ -515,7 +535,7 @@ GOT_OFFSET = %#lx, GOT_VMA = %#lx, INDEX
 			     + htab->sgot->output_offset + got_offset),
 		     (long) dynindx, (long) addend);
 	}
-      list->created_dyn_relocation = TRUE;
+      list->created_dyn_relocation = true;
     }
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/archive64.c ./bfd/archive64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/archive64.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/archive64.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for 64-bit archives.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Ian Lance Taylor, Cygnus Support
    Linker support added by Mark Mitchell, CodeSourcery, LLC.
    <mark@codesourcery.com>
@@ -34,7 +34,7 @@
 
 /* Read an Irix 6 armap.  */
 
-bfd_boolean
+bool
 _bfd_archive_64_bit_slurp_armap (bfd *abfd)
 {
   struct artdata *ardata = bfd_ardata (abfd);
@@ -47,40 +47,48 @@ _bfd_archive_64_bit_slurp_armap (bfd *ab
   bfd_byte *raw_armap = NULL;
   carsym *carsyms;
   bfd_size_type amt;
+  ufile_ptr filesize;
 
   ardata->symdefs = NULL;
 
   /* Get the name of the first element.  */
-  i = bfd_bread (nextname, 16, abfd);
+  i = bfd_read (nextname, 16, abfd);
   if (i == 0)
-    return TRUE;
+    return true;
   if (i != 16)
-    return FALSE;
+    return false;
 
-  if (bfd_seek (abfd, (file_ptr) - 16, SEEK_CUR) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, -16, SEEK_CUR) != 0)
+    return false;
 
   /* Archives with traditional armaps are still permitted.  */
-  if (CONST_STRNEQ (nextname, "/               "))
+  if (startswith (nextname, "/               "))
     return bfd_slurp_armap (abfd);
 
-  if (! CONST_STRNEQ (nextname, "/SYM64/         "))
+  if (! startswith (nextname, "/SYM64/         "))
     {
-      abfd->has_armap = FALSE;
-      return TRUE;
+      abfd->has_armap = false;
+      return true;
     }
 
   mapdata = (struct areltdata *) _bfd_read_ar_hdr (abfd);
   if (mapdata == NULL)
-    return FALSE;
+    return false;
   parsed_size = mapdata->parsed_size;
   free (mapdata);
 
-  if (bfd_bread (int_buf, 8, abfd) != 8)
+  filesize = bfd_get_file_size (abfd);
+  if (filesize != 0 && parsed_size > filesize)
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return false;
+    }
+
+  if (bfd_read (int_buf, 8, abfd) != 8)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_malformed_archive);
-      return FALSE;
+      return false;
     }
 
   nsymz = bfd_getb64 (int_buf);
@@ -100,24 +108,21 @@ _bfd_archive_64_bit_slurp_armap (bfd *ab
       || amt <= stringsize)
     {
       bfd_set_error (bfd_error_malformed_archive);
-      return FALSE;
+      return false;
     }
-  ardata->symdefs = (struct carsym *) bfd_zalloc (abfd, amt);
+  ardata->symdefs = (struct carsym *) bfd_alloc (abfd, amt);
   if (ardata->symdefs == NULL)
-    return FALSE;
+    return false;
   carsyms = ardata->symdefs;
   stringbase = ((char *) ardata->symdefs) + carsym_size;
 
-  raw_armap = (bfd_byte *) bfd_alloc (abfd, ptrsize);
-  if (raw_armap == NULL)
-    goto release_symdefs;
-
-  if (bfd_bread (raw_armap, ptrsize, abfd) != ptrsize
-      || bfd_bread (stringbase, stringsize, abfd) != stringsize)
+  raw_armap = (bfd_byte *) _bfd_alloc_and_read (abfd, ptrsize, ptrsize);
+  if (raw_armap == NULL
+      || bfd_read (stringbase, stringsize, abfd) != stringsize)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_malformed_archive);
-      goto release_raw_armap;
+      goto release_symdefs;
     }
 
   stringend = stringbase + stringsize;
@@ -137,23 +142,21 @@ _bfd_archive_64_bit_slurp_armap (bfd *ab
   /* Pad to an even boundary if you have to.  */
   ardata->first_file_filepos += (ardata->first_file_filepos) % 2;
 
-  abfd->has_armap = TRUE;
+  abfd->has_armap = true;
   bfd_release (abfd, raw_armap);
 
-  return TRUE;
+  return true;
 
-release_raw_armap:
-  bfd_release (abfd, raw_armap);
-release_symdefs:
+ release_symdefs:
   bfd_release (abfd, ardata->symdefs);
-  return FALSE;
+  return false;
 }
 
 /* Write out an Irix 6 armap.  The Irix 6 tools are supposed to be
    able to handle ordinary ELF armaps, but at least on Irix 6.2 the
    linker crashes.  */
 
-bfd_boolean
+bool
 _bfd_archive_64_bit_write_armap (bfd *arch,
 				 unsigned int elength,
 				 struct orl *map,
@@ -182,9 +185,17 @@ _bfd_archive_64_bit_write_armap (bfd *ar
   memset (&hdr, ' ', sizeof (struct ar_hdr));
   memcpy (hdr.ar_name, "/SYM64/", strlen ("/SYM64/"));
   if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize))
-    return FALSE;
-  _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
-		    time (NULL));
+    return false;
+
+  time_t date;
+
+  if (arch->flags & BFD_DETERMINISTIC_OUTPUT)
+    date = 0;
+  else
+    date = bfd_get_current_time (0);
+
+  _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld", (long) date);
+  
   /* This, at least, is what Intel coff sets the values to.: */
   _bfd_ar_spacepad (hdr.ar_uid, sizeof (hdr.ar_uid), "%ld", 0);
   _bfd_ar_spacepad (hdr.ar_gid, sizeof (hdr.ar_gid), "%ld", 0);
@@ -193,13 +204,13 @@ _bfd_archive_64_bit_write_armap (bfd *ar
 
   /* Write the ar header for this item and the number of symbols */
 
-  if (bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
+  if (bfd_write (&hdr, sizeof (struct ar_hdr), arch)
       != sizeof (struct ar_hdr))
-    return FALSE;
+    return false;
 
   bfd_putb64 ((bfd_vma) symbol_count, buf);
-  if (bfd_bwrite (buf, 8, arch) != 8)
-    return FALSE;
+  if (bfd_write (buf, 8, arch) != 8)
+    return false;
 
   /* Two passes, first write the file offsets for each symbol -
      remembering that each offset is on a two byte boundary.  */
@@ -219,8 +230,8 @@ _bfd_archive_64_bit_write_armap (bfd *ar
 	   count++)
 	{
 	  bfd_putb64 ((bfd_vma) archive_member_file_ptr, buf);
-	  if (bfd_bwrite (buf, 8, arch) != 8)
-	    return FALSE;
+	  if (bfd_write (buf, 8, arch) != 8)
+	    return false;
 	}
 
       /* Add size of this archive entry */
@@ -236,18 +247,18 @@ _bfd_archive_64_bit_write_armap (bfd *ar
     {
       size_t len = strlen (*map[count].name) + 1;
 
-      if (bfd_bwrite (*map[count].name, len, arch) != len)
-	return FALSE;
+      if (bfd_write (*map[count].name, len, arch) != len)
+	return false;
     }
 
   /* The spec says that this should be padded to an 8 byte boundary.
      However, the Irix 6.2 tools do not appear to do this.  */
   while (padding != 0)
     {
-      if (bfd_bwrite ("", 1, arch) != 1)
-	return FALSE;
+      if (bfd_write ("", 1, arch) != 1)
+	return false;
       --padding;
     }
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/archive.c ./bfd/archive.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/archive.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/archive.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for archive files (libraries).
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.  Mostly Gumby Henkel-Wallace's fault.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -146,6 +146,37 @@ SUBSECTION
 extern int errno;
 #endif
 
+/*
+EXTERNAL
+.{* A canonical archive symbol.  *}
+.{* This is a type pun with struct symdef/struct ranlib on purpose!  *}
+.typedef struct carsym
+.{
+.  const char *name;
+.  file_ptr file_offset;	{* Look here to find the file.  *}
+.}
+.carsym;
+.
+.{* A count of carsyms (canonical archive symbols).  *}
+. typedef unsigned long symindex;
+.#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
+.
+
+INTERNAL
+.{* Used in generating armaps (archive tables of contents).  *}
+.struct orl		{* Output ranlib.  *}
+.{
+.  char **name;		{* Symbol name.  *}
+.  union
+.  {
+.    file_ptr pos;
+.    bfd *abfd;
+.  } u;			{* bfd* or file position.  *}
+.  int namidx;		{* Index into string table.  *}
+.};
+.
+*/
+
 /* We keep a cache of archive filepointers to archive elements to
    speed up searching the archive by filepos.  We only add an entry to
    the cache when we actually read one.  We also don't sort the cache;
@@ -172,7 +203,7 @@ struct ar_cache
 void
 _bfd_ar_spacepad (char *p, size_t n, const char *fmt, long val)
 {
-  static char buf[20];
+  char buf[20];
   size_t len;
 
   snprintf (buf, sizeof (buf), fmt, val);
@@ -186,18 +217,18 @@ _bfd_ar_spacepad (char *p, size_t n, con
     memcpy (p, buf, n);
 }
 
-bfd_boolean
+bool
 _bfd_ar_sizepad (char *p, size_t n, bfd_size_type size)
 {
-  static char buf[21];
+  char buf[21];
   size_t len;
 
-  snprintf (buf, sizeof (buf), "%-10" BFD_VMA_FMT "u", size);
+  snprintf (buf, sizeof (buf), "%-10" PRIu64, (uint64_t) size);
   len = strlen (buf);
   if (len > n)
     {
       bfd_set_error (bfd_error_file_too_big);
-      return FALSE;
+      return false;
     }
   if (len < n)
     {
@@ -206,27 +237,16 @@ _bfd_ar_sizepad (char *p, size_t n, bfd_
     }
   else
     memcpy (p, buf, n);
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_generic_mkarchive (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (struct artdata);
+  size_t amt = sizeof (struct artdata);
 
   abfd->tdata.aout_ar_data = (struct artdata *) bfd_zalloc (abfd, amt);
-  if (bfd_ardata (abfd) == NULL)
-    return FALSE;
-
-  /* Already cleared by bfd_zalloc above.
-     bfd_ardata (abfd)->cache = NULL;
-     bfd_ardata (abfd)->archive_head = NULL;
-     bfd_ardata (abfd)->symdefs = NULL;
-     bfd_ardata (abfd)->extended_names = NULL;
-     bfd_ardata (abfd)->extended_names_size = 0;
-     bfd_ardata (abfd)->tdata = NULL;  */
-
-  return TRUE;
+  return bfd_ardata (abfd) != NULL;
 }
 
 /*
@@ -284,18 +304,18 @@ FUNCTION
 	bfd_set_archive_head
 
 SYNOPSIS
-	bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
+	bool bfd_set_archive_head (bfd *output, bfd *new_head);
 
 DESCRIPTION
 	Set the head of the chain of
 	BFDs contained in the archive @var{output} to @var{new_head}.
 */
 
-bfd_boolean
+bool
 bfd_set_archive_head (bfd *output_archive, bfd *new_head)
 {
   output_archive->archive_head = new_head;
-  return TRUE;
+  return true;
 }
 
 bfd *
@@ -349,7 +369,7 @@ _bfd_calloc_wrapper (size_t a, size_t b)
 
 /* Kind of stupid to call cons for each one, but we don't do too many.  */
 
-bfd_boolean
+bool
 _bfd_add_bfd_to_archive_cache (bfd *arch_bfd, file_ptr filepos, bfd *new_elt)
 {
   struct ar_cache *cache;
@@ -361,7 +381,7 @@ _bfd_add_bfd_to_archive_cache (bfd *arch
       hash_table = htab_create_alloc (16, hash_file_ptr, eq_file_ptr,
 				      NULL, _bfd_calloc_wrapper, free);
       if (hash_table == NULL)
-	return FALSE;
+	return false;
       bfd_ardata (arch_bfd)->cache = hash_table;
     }
 
@@ -375,7 +395,7 @@ _bfd_add_bfd_to_archive_cache (bfd *arch
   arch_eltdata (new_elt)->parent_cache = hash_table;
   arch_eltdata (new_elt)->key = filepos;
 
-  return TRUE;
+  return true;
 }
 
 static bfd *
@@ -403,7 +423,7 @@ find_nested_archive (const char *filenam
   bfd *abfd;
 
   /* PR 15140: Don't allow a nested archive pointing to itself.  */
-  if (filename_cmp (filename, arch_bfd->filename) == 0)
+  if (filename_cmp (filename, bfd_get_filename (arch_bfd)) == 0)
     {
       bfd_set_error (bfd_error_malformed_archive);
       return NULL;
@@ -413,7 +433,7 @@ find_nested_archive (const char *filenam
        abfd != NULL;
        abfd = abfd->archive_next)
     {
-      if (filename_cmp (filename, abfd->filename) == 0)
+      if (filename_cmp (filename, bfd_get_filename (abfd)) == 0)
 	return abfd;
     }
   abfd = open_nested_file (filename, arch_bfd);
@@ -485,9 +505,10 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd,
 {
   struct ar_hdr hdr;
   char *hdrp = (char *) &hdr;
-  bfd_size_type parsed_size;
+  uint64_t parsed_size;
   struct areltdata *ared;
   char *filename = NULL;
+  ufile_ptr filesize;
   bfd_size_type namelen = 0;
   bfd_size_type allocsize = sizeof (struct areltdata) + sizeof (struct ar_hdr);
   char *allocptr = 0;
@@ -496,7 +517,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd,
   char fmag_save;
   int scan;
 
-  if (bfd_bread (hdrp, sizeof (struct ar_hdr), abfd) != sizeof (struct ar_hdr))
+  if (bfd_read (hdrp, sizeof (struct ar_hdr), abfd) != sizeof (struct ar_hdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_no_more_archived_files);
@@ -513,7 +534,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd,
   errno = 0;
   fmag_save = hdr.ar_fmag[0];
   hdr.ar_fmag[0] = 0;
-  scan = sscanf (hdr.ar_size, "%" BFD_VMA_FMT "u", &parsed_size);
+  scan = sscanf (hdr.ar_size, "%" SCNu64, &parsed_size);
   hdr.ar_fmag[0] = fmag_save;
   if (scan != 1)
     {
@@ -538,17 +559,25 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd,
     {
       /* BSD-4.4 extended name */
       namelen = atoi (&hdr.ar_name[3]);
+      filesize = bfd_get_file_size (abfd);
+      if (namelen > parsed_size
+	  || namelen > -allocsize - 2
+	  || (filesize != 0 && namelen > filesize))
+	{
+	  bfd_set_error (bfd_error_malformed_archive);
+	  return NULL;
+	}
       allocsize += namelen + 1;
       parsed_size -= namelen;
       extra_size = namelen;
 
-      allocptr = (char *) bfd_zmalloc (allocsize);
+      allocptr = (char *) bfd_malloc (allocsize);
       if (allocptr == NULL)
 	return NULL;
       filename = (allocptr
 		  + sizeof (struct areltdata)
 		  + sizeof (struct ar_hdr));
-      if (bfd_bread (filename, namelen, abfd) != namelen)
+      if (bfd_read (filename, namelen, abfd) != namelen)
 	{
 	  free (allocptr);
 	  if (bfd_get_error () != bfd_error_system_call)
@@ -586,13 +615,13 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd,
 
   if (!allocptr)
     {
-      allocptr = (char *) bfd_zmalloc (allocsize);
+      allocptr = (char *) bfd_malloc (allocsize);
       if (allocptr == NULL)
 	return NULL;
     }
 
+  memset (allocptr, 0, sizeof (struct areltdata));
   ared = (struct areltdata *) allocptr;
-
   ared->arch_header = allocptr + sizeof (struct areltdata);
   memcpy (ared->arch_header, &hdr, sizeof (struct ar_hdr));
   ared->parsed_size = parsed_size;
@@ -619,7 +648,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd,
 char *
 _bfd_append_relative_path (bfd *arch, char *elt_name)
 {
-  const char *arch_name = arch->filename;
+  const char *arch_name = bfd_get_filename (arch);
   const char *base_name = lbasename (arch_name);
   size_t prefix_len;
   char *filename;
@@ -642,7 +671,8 @@ _bfd_append_relative_path (bfd *arch, ch
    element, since it handles the bookkeeping so nicely for us.  */
 
 bfd *
-_bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
+_bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos,
+			 struct bfd_link_info *info)
 {
   struct areltdata *new_areldata;
   bfd *n_bfd;
@@ -685,7 +715,8 @@ _bfd_get_elt_at_filepos (bfd *archive, f
 	      free (new_areldata);
 	      return NULL;
 	    }
-	  n_bfd = _bfd_get_elt_at_filepos (ext_arch, new_areldata->origin);
+	  n_bfd = _bfd_get_elt_at_filepos (ext_arch,
+					   new_areldata->origin, info);
 	  if (n_bfd == NULL)
 	    {
 	      free (new_areldata);
@@ -704,9 +735,28 @@ _bfd_get_elt_at_filepos (bfd *archive, f
 
       /* It's not an element of a nested archive;
 	 open the external file as a bfd.  */
+      bfd_set_error (bfd_error_no_error);
       n_bfd = open_nested_file (filename, archive);
       if (n_bfd == NULL)
-	bfd_set_error (bfd_error_malformed_archive);
+	{
+	  switch (bfd_get_error ())
+	    {
+	    default:
+	      break;
+	    case bfd_error_no_error:
+	      bfd_set_error (bfd_error_malformed_archive);
+	      break;
+	    case bfd_error_system_call:
+	      if (info != NULL)
+		{
+		  info->callbacks->einfo
+		    (_("%F%P: %pB(%s): error opening thin archive member: %E\n"),
+		     archive, filename);
+		  break;
+		}
+	      break;
+	    }
+	}
     }
   else
     {
@@ -728,8 +778,7 @@ _bfd_get_elt_at_filepos (bfd *archive, f
   else
     {
       n_bfd->origin = n_bfd->proxy_origin;
-      n_bfd->filename = bfd_strdup (filename);
-      if (n_bfd->filename == NULL)
+      if (!bfd_set_filename (n_bfd, filename))
 	goto out;
     }
 
@@ -763,7 +812,7 @@ _bfd_generic_get_elt_at_index (bfd *abfd
   carsym *entry;
 
   entry = bfd_ardata (abfd)->symdefs + sym_index;
-  return _bfd_get_elt_at_filepos (abfd, entry->file_offset);
+  return _bfd_get_elt_at_filepos (abfd, entry->file_offset, NULL);
 }
 
 bfd *
@@ -832,7 +881,7 @@ bfd_generic_openr_next_archived_file (bf
 	}
     }
 
-  return _bfd_get_elt_at_filepos (archive, filestart);
+  return _bfd_get_elt_at_filepos (archive, filestart, NULL);
 }
 
 bfd *
@@ -842,14 +891,14 @@ _bfd_noarchive_openr_next_archived_file
   return (bfd *) _bfd_ptr_bfd_null_error (archive);
 }
 
-const bfd_target *
+bfd_cleanup
 bfd_generic_archive_p (bfd *abfd)
 {
   struct artdata *tdata_hold;
   char armag[SARMAG + 1];
-  bfd_size_type amt;
+  size_t amt;
 
-  if (bfd_bread (armag, SARMAG, abfd) != SARMAG)
+  if (bfd_read (armag, SARMAG, abfd) != SARMAG)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -876,13 +925,6 @@ bfd_generic_archive_p (bfd *abfd)
     }
 
   bfd_ardata (abfd)->first_file_filepos = SARMAG;
-  /* Cleared by bfd_zalloc above.
-     bfd_ardata (abfd)->cache = NULL;
-     bfd_ardata (abfd)->archive_head = NULL;
-     bfd_ardata (abfd)->symdefs = NULL;
-     bfd_ardata (abfd)->extended_names = NULL;
-     bfd_ardata (abfd)->extended_names_size = 0;
-     bfd_ardata (abfd)->tdata = NULL;  */
 
   if (!BFD_SEND (abfd, _bfd_slurp_armap, (abfd))
       || !BFD_SEND (abfd, _bfd_slurp_extended_name_table, (abfd)))
@@ -916,7 +958,7 @@ bfd_generic_archive_p (bfd *abfd)
       abfd->no_element_cache = save;
       if (first != NULL)
 	{
-	  first->target_defaulted = FALSE;
+	  first->target_defaulted = false;
 	  if (bfd_check_format (first, bfd_object)
 	      && first->xvec != abfd->xvec)
 	    bfd_set_error (bfd_error_wrong_object_format);
@@ -924,7 +966,7 @@ bfd_generic_archive_p (bfd *abfd)
 	}
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 /* Some constants for a 32 bit BSD archive structure.  We do not
@@ -947,63 +989,70 @@ bfd_generic_archive_p (bfd *abfd)
 /* Read a BSD-style archive symbol table.  Returns FALSE on error,
    TRUE otherwise.  */
 
-static bfd_boolean
+static bool
 do_slurp_bsd_armap (bfd *abfd)
 {
   struct areltdata *mapdata;
-  unsigned int counter;
+  size_t counter;
   bfd_byte *raw_armap, *rbase;
   struct artdata *ardata = bfd_ardata (abfd);
   char *stringbase;
-  bfd_size_type parsed_size, amt;
+  bfd_size_type parsed_size;
+  size_t amt, string_size;
   carsym *set;
 
   mapdata = (struct areltdata *) _bfd_read_ar_hdr (abfd);
   if (mapdata == NULL)
-    return FALSE;
+    return false;
   parsed_size = mapdata->parsed_size;
   free (mapdata);
   /* PR 17512: file: 883ff754.  */
   /* PR 17512: file: 0458885f.  */
-  if (parsed_size < 4)
-    return FALSE;
-
-  raw_armap = (bfd_byte *) bfd_zalloc (abfd, parsed_size);
-  if (raw_armap == NULL)
-    return FALSE;
-
-  if (bfd_bread (raw_armap, parsed_size, abfd) != parsed_size)
+  if (parsed_size < BSD_SYMDEF_COUNT_SIZE + BSD_STRING_COUNT_SIZE)
     {
-      if (bfd_get_error () != bfd_error_system_call)
-	bfd_set_error (bfd_error_malformed_archive);
-    byebye:
-      bfd_release (abfd, raw_armap);
-      return FALSE;
+      bfd_set_error (bfd_error_malformed_archive);
+      return false;
     }
 
-  ardata->symdef_count = H_GET_32 (abfd, raw_armap) / BSD_SYMDEF_SIZE;
-  if (ardata->symdef_count * BSD_SYMDEF_SIZE >
-      parsed_size - BSD_SYMDEF_COUNT_SIZE)
+  raw_armap = (bfd_byte *) _bfd_alloc_and_read (abfd, parsed_size, parsed_size);
+  if (raw_armap == NULL)
+    return false;
+
+  parsed_size -= BSD_SYMDEF_COUNT_SIZE + BSD_STRING_COUNT_SIZE;
+  amt = H_GET_32 (abfd, raw_armap);
+  if (amt > parsed_size
+      || amt % BSD_SYMDEF_SIZE != 0)
     {
       /* Probably we're using the wrong byte ordering.  */
       bfd_set_error (bfd_error_wrong_format);
-      goto byebye;
+      goto release_armap;
     }
 
   rbase = raw_armap + BSD_SYMDEF_COUNT_SIZE;
-  stringbase = ((char *) rbase
-		+ ardata->symdef_count * BSD_SYMDEF_SIZE
-		+ BSD_STRING_COUNT_SIZE);
-  amt = ardata->symdef_count * sizeof (carsym);
+  stringbase = (char *) rbase + amt + BSD_STRING_COUNT_SIZE;
+  string_size = parsed_size - amt;
+
+  ardata->symdef_count = amt / BSD_SYMDEF_SIZE;
+  if (_bfd_mul_overflow (ardata->symdef_count, sizeof (carsym), &amt))
+    {
+      bfd_set_error (bfd_error_no_memory);
+      goto release_armap;
+    }
   ardata->symdefs = (struct carsym *) bfd_alloc (abfd, amt);
   if (!ardata->symdefs)
-    return FALSE;
+    goto release_armap;
 
   for (counter = 0, set = ardata->symdefs;
        counter < ardata->symdef_count;
        counter++, set++, rbase += BSD_SYMDEF_SIZE)
     {
-      set->name = H_GET_32 (abfd, rbase) + stringbase;
+      unsigned nameoff = H_GET_32 (abfd, rbase);
+      if (nameoff >= string_size)
+	{
+	  bfd_set_error (bfd_error_malformed_archive);
+	  goto release_armap;
+	}
+      set->name = stringbase + nameoff;
       set->file_offset = H_GET_32 (abfd, rbase + BSD_SYMDEF_OFFSET_SIZE);
     }
 
@@ -1013,14 +1062,20 @@ do_slurp_bsd_armap (bfd *abfd)
   /* FIXME, we should provide some way to free raw_ardata when
      we are done using the strings from it.  For now, it seems
      to be allocated on an objalloc anyway...  */
-  abfd->has_armap = TRUE;
-  return TRUE;
+  abfd->has_armap = true;
+  return true;
+
+ release_armap:
+  ardata->symdef_count = 0;
+  ardata->symdefs = NULL;
+  bfd_release (abfd, raw_armap);
+  return false;
 }
 
 /* Read a COFF archive symbol table.  Returns FALSE on error, TRUE
    otherwise.  */
 
-static bfd_boolean
+static bool
 do_slurp_coff_armap (bfd *abfd)
 {
   struct areltdata *mapdata;
@@ -1030,61 +1085,68 @@ do_slurp_coff_armap (bfd *abfd)
   char *stringend;
   bfd_size_type stringsize;
   bfd_size_type parsed_size;
+  ufile_ptr filesize;
+  size_t nsymz, carsym_size, ptrsize, i;
   carsym *carsyms;
-  bfd_size_type nsymz;		/* Number of symbols in armap.  */
   bfd_vma (*swap) (const void *);
-  char int_buf[sizeof (long)];
-  bfd_size_type carsym_size, ptrsize;
-  unsigned int i;
+  char int_buf[4];
+  struct areltdata *tmp;
 
   mapdata = (struct areltdata *) _bfd_read_ar_hdr (abfd);
   if (mapdata == NULL)
-    return FALSE;
+    return false;
   parsed_size = mapdata->parsed_size;
   free (mapdata);
 
-  if (bfd_bread (int_buf, 4, abfd) != 4)
-    {
-      if (bfd_get_error () != bfd_error_system_call)
-	bfd_set_error (bfd_error_malformed_archive);
-      return FALSE;
-    }
+  if (bfd_read (int_buf, 4, abfd) != 4)
+    return false;
+
   /* It seems that all numeric information in a coff archive is always
-     in big endian format, nomatter the host or target.  */
+     in big endian format, no matter the host or target.  */
   swap = bfd_getb32;
   nsymz = bfd_getb32 (int_buf);
-  stringsize = parsed_size - (4 * nsymz) - 4;
 
   /* The coff armap must be read sequentially.  So we construct a
      bsd-style one in core all at once, for simplicity.  */
 
-  if (nsymz > ~ (bfd_size_type) 0 / sizeof (carsym))
-    return FALSE;
+  if (_bfd_mul_overflow (nsymz, sizeof (carsym), &carsym_size))
+    {
+      bfd_set_error (bfd_error_no_memory);
+      return false;
+    }
+
+  filesize = bfd_get_file_size (abfd);
+  ptrsize = 4 * nsymz;
+  if ((filesize != 0 && parsed_size > filesize)
+      || parsed_size < 4
+      || parsed_size - 4 < ptrsize)
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return false;
+    }
 
-  carsym_size = (nsymz * sizeof (carsym));
-  ptrsize = (4 * nsymz);
+  stringsize = parsed_size - ptrsize - 4;
 
   if (carsym_size + stringsize + 1 <= carsym_size)
-    return FALSE;
+    {
+      bfd_set_error (bfd_error_no_memory);
+      return false;
+    }
+
+  /* Allocate and read in the raw offsets.  */
+  raw_armap = (int *) _bfd_malloc_and_read (abfd, ptrsize, ptrsize);
+  if (raw_armap == NULL)
+    return false;
 
-  ardata->symdefs = (struct carsym *) bfd_zalloc (abfd,
-						  carsym_size + stringsize + 1);
+  ardata->symdefs = (struct carsym *) bfd_alloc (abfd,
+						 carsym_size + stringsize + 1);
   if (ardata->symdefs == NULL)
-    return FALSE;
+    goto free_armap;
   carsyms = ardata->symdefs;
   stringbase = ((char *) ardata->symdefs) + carsym_size;
 
-  /* Allocate and read in the raw offsets.  */
-  raw_armap = (int *) bfd_alloc (abfd, ptrsize);
-  if (raw_armap == NULL)
+  if (bfd_read (stringbase, stringsize, abfd) != stringsize)
     goto release_symdefs;
-  if (bfd_bread (raw_armap, ptrsize, abfd) != ptrsize
-      || (bfd_bread (stringbase, stringsize, abfd) != stringsize))
-    {
-      if (bfd_get_error () != bfd_error_system_call)
-	bfd_set_error (bfd_error_malformed_archive);
-      goto release_raw_armap;
-    }
 
   /* OK, build the carsyms.  */
   stringend = stringbase + stringsize;
@@ -1104,70 +1166,65 @@ do_slurp_coff_armap (bfd *abfd)
   ardata->first_file_filepos = bfd_tell (abfd);
   /* Pad to an even boundary if you have to.  */
   ardata->first_file_filepos += (ardata->first_file_filepos) % 2;
+  if (bfd_seek (abfd, ardata->first_file_filepos, SEEK_SET) != 0)
+    goto release_symdefs;
 
-  abfd->has_armap = TRUE;
-  bfd_release (abfd, raw_armap);
+  abfd->has_armap = true;
+  free (raw_armap);
 
   /* Check for a second archive header (as used by PE).  */
-  {
-    struct areltdata *tmp;
-
-    bfd_seek (abfd, ardata->first_file_filepos, SEEK_SET);
-    tmp = (struct areltdata *) _bfd_read_ar_hdr (abfd);
-    if (tmp != NULL)
-      {
-	if (tmp->arch_header[0] == '/'
-	    && tmp->arch_header[1] == ' ')
-	  {
-	    ardata->first_file_filepos +=
-	      (tmp->parsed_size + sizeof (struct ar_hdr) + 1) & ~(unsigned) 1;
-	  }
-	free (tmp);
-      }
-  }
+  tmp = (struct areltdata *) _bfd_read_ar_hdr (abfd);
+  if (tmp != NULL)
+    {
+      if (tmp->arch_header[0] == '/'
+	  && tmp->arch_header[1] == ' ')
+	ardata->first_file_filepos
+	  += (tmp->parsed_size + sizeof (struct ar_hdr) + 1) & ~(unsigned) 1;
+      free (tmp);
+    }
 
-  return TRUE;
+  return true;
 
-release_raw_armap:
-  bfd_release (abfd, raw_armap);
-release_symdefs:
+ release_symdefs:
   bfd_release (abfd, (ardata)->symdefs);
-  return FALSE;
+ free_armap:
+  free (raw_armap);
+  return false;
 }
 
 /* This routine can handle either coff-style or bsd-style armaps
    (archive symbol table).  Returns FALSE on error, TRUE otherwise */
 
-bfd_boolean
+bool
 bfd_slurp_armap (bfd *abfd)
 {
   char nextname[17];
-  int i = bfd_bread (nextname, 16, abfd);
+  int i = bfd_read (nextname, 16, abfd);
 
   if (i == 0)
-    return TRUE;
+    return true;
   if (i != 16)
-    return FALSE;
+    return false;
 
-  if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, -16, SEEK_CUR) != 0)
+    return false;
 
-  if (CONST_STRNEQ (nextname, "__.SYMDEF       ")
-      || CONST_STRNEQ (nextname, "__.SYMDEF/      ")) /* Old Linux archives.  */
+  if (startswith (nextname, "__.SYMDEF       ")
+      || startswith (nextname, "__.SYMDEF/      ")) /* Old Linux archives.  */
     return do_slurp_bsd_armap (abfd);
-  else if (CONST_STRNEQ (nextname, "/               "))
+  else if (startswith (nextname, "/               "))
     return do_slurp_coff_armap (abfd);
-  else if (CONST_STRNEQ (nextname, "/SYM64/         "))
+  else if (startswith (nextname, "/SYM64/         "))
     {
       /* 64bit (Irix 6) archive.  */
 #ifdef BFD64
       return _bfd_archive_64_bit_slurp_armap (abfd);
 #else
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
 #endif
     }
-  else if (CONST_STRNEQ (nextname, "#1/20           "))
+  else if (startswith (nextname, "#1/20           "))
     {
       /* Mach-O has a special name for armap when the map is sorted by name.
 	 However because this name has a space it is slightly more difficult
@@ -1175,21 +1232,21 @@ bfd_slurp_armap (bfd *abfd)
       struct ar_hdr hdr;
       char extname[21];
 
-      if (bfd_bread (&hdr, sizeof (hdr), abfd) != sizeof (hdr))
-	return FALSE;
+      if (bfd_read (&hdr, sizeof (hdr), abfd) != sizeof (hdr))
+	return false;
       /* Read the extended name.  We know its length.  */
-      if (bfd_bread (extname, 20, abfd) != 20)
-	return FALSE;
+      if (bfd_read (extname, 20, abfd) != 20)
+	return false;
       if (bfd_seek (abfd, -(file_ptr) (sizeof (hdr) + 20), SEEK_CUR) != 0)
-	return FALSE;
+	return false;
       extname[20] = 0;
-      if (CONST_STRNEQ (extname, "__.SYMDEF SORTED")
-	  || CONST_STRNEQ (extname, "__.SYMDEF"))
+      if (startswith (extname, "__.SYMDEF SORTED")
+	  || startswith (extname, "__.SYMDEF"))
 	return do_slurp_bsd_armap (abfd);
     }
 
-  abfd->has_armap = FALSE;
-  return TRUE;
+  abfd->has_armap = false;
+  return true;
 }
 
 /** Extended name table.
@@ -1204,51 +1261,57 @@ bfd_slurp_armap (bfd *abfd)
 
 /* Returns FALSE on error, TRUE otherwise.  */
 
-bfd_boolean
+bool
 _bfd_slurp_extended_name_table (bfd *abfd)
 {
   char nextname[17];
-  struct areltdata *namedata;
-  bfd_size_type amt;
 
   /* FIXME:  Formatting sucks here, and in case of failure of BFD_READ,
      we probably don't want to return TRUE.  */
   if (bfd_seek (abfd, bfd_ardata (abfd)->first_file_filepos, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
-  if (bfd_bread (nextname, 16, abfd) == 16)
+  if (bfd_read (nextname, 16, abfd) == 16)
     {
-      if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0)
-	return FALSE;
+      struct areltdata *namedata;
+      bfd_size_type amt;
+      ufile_ptr filesize;
+
+      if (bfd_seek (abfd, -16, SEEK_CUR) != 0)
+	return false;
 
-      if (! CONST_STRNEQ (nextname, "ARFILENAMES/    ")
-	  && ! CONST_STRNEQ (nextname, "//              "))
+      if (! startswith (nextname, "ARFILENAMES/    ")
+	  && ! startswith (nextname, "//              "))
 	{
 	  bfd_ardata (abfd)->extended_names = NULL;
 	  bfd_ardata (abfd)->extended_names_size = 0;
-	  return TRUE;
+	  return true;
 	}
 
       namedata = (struct areltdata *) _bfd_read_ar_hdr (abfd);
       if (namedata == NULL)
-	return FALSE;
+	return false;
 
+      filesize = bfd_get_file_size (abfd);
       amt = namedata->parsed_size;
-      if (amt + 1 == 0)
-	goto byebye;
+      if (amt + 1 == 0 || (filesize != 0 && amt > filesize))
+	{
+	  bfd_set_error (bfd_error_malformed_archive);
+	  goto byebye;
+	}
 
       bfd_ardata (abfd)->extended_names_size = amt;
-      bfd_ardata (abfd)->extended_names = (char *) bfd_zalloc (abfd, amt + 1);
+      bfd_ardata (abfd)->extended_names = (char *) bfd_alloc (abfd, amt + 1);
       if (bfd_ardata (abfd)->extended_names == NULL)
 	{
 	byebye:
 	  free (namedata);
 	  bfd_ardata (abfd)->extended_names = NULL;
 	  bfd_ardata (abfd)->extended_names_size = 0;
-	  return FALSE;
+	  return false;
 	}
 
-      if (bfd_bread (bfd_ardata (abfd)->extended_names, amt, abfd) != amt)
+      if (bfd_read (bfd_ardata (abfd)->extended_names, amt, abfd) != amt)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_malformed_archive);
@@ -1256,6 +1319,7 @@ _bfd_slurp_extended_name_table (bfd *abf
 	  bfd_ardata (abfd)->extended_names = NULL;
 	  goto byebye;
 	}
+      bfd_ardata (abfd)->extended_names[amt] = 0;
 
       /* Since the archive is supposed to be printable if it contains
 	 text, the entries in the list are newline-padded, not null
@@ -1284,7 +1348,7 @@ _bfd_slurp_extended_name_table (bfd *abf
 
       free (namedata);
     }
-  return TRUE;
+  return true;
 }
 
 #ifdef VMS
@@ -1438,8 +1502,7 @@ adjust_relative_path (const char * path,
 
   if (len > pathbuf_len)
     {
-      if (pathbuf != NULL)
-	free (pathbuf);
+      free (pathbuf);
       pathbuf_len = 0;
       pathbuf = (char *) bfd_malloc (len);
       if (pathbuf == NULL)
@@ -1468,35 +1531,35 @@ adjust_relative_path (const char * path,
 
 /* Build a BFD style extended name table.  */
 
-bfd_boolean
+bool
 _bfd_archive_bsd_construct_extended_name_table (bfd *abfd,
 						char **tabloc,
 						bfd_size_type *tablen,
 						const char **name)
 {
   *name = "ARFILENAMES/";
-  return _bfd_construct_extended_name_table (abfd, FALSE, tabloc, tablen);
+  return _bfd_construct_extended_name_table (abfd, false, tabloc, tablen);
 }
 
 /* Build an SVR4 style extended name table.  */
 
-bfd_boolean
+bool
 _bfd_archive_coff_construct_extended_name_table (bfd *abfd,
 						 char **tabloc,
 						 bfd_size_type *tablen,
 						 const char **name)
 {
   *name = "//";
-  return _bfd_construct_extended_name_table (abfd, TRUE, tabloc, tablen);
+  return _bfd_construct_extended_name_table (abfd, true, tabloc, tablen);
 }
 
-bfd_boolean
+bool
 _bfd_noarchive_construct_extended_name_table (bfd *abfd ATTRIBUTE_UNUSED,
 					      char **tabloc ATTRIBUTE_UNUSED,
 					      bfd_size_type *len ATTRIBUTE_UNUSED,
 					      const char **name ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* Follows archive_head and produces an extended name table if
@@ -1507,9 +1570,9 @@ _bfd_noarchive_construct_extended_name_t
    something went wrong.  A successful return may still involve a
    zero-length tablen!  */
 
-bfd_boolean
+bool
 _bfd_construct_extended_name_table (bfd *abfd,
-				    bfd_boolean trailing_slash,
+				    bool trailing_slash,
 				    char **tabloc,
 				    bfd_size_type *tablen)
 {
@@ -1533,13 +1596,13 @@ _bfd_construct_extended_name_table (bfd
 
       if (bfd_is_thin_archive (abfd))
 	{
-	  const char *filename = current->filename;
+	  const char *filename = bfd_get_filename (current);
 
 	  /* If the element being added is a member of another archive
 	     (i.e., we are flattening), use the containing archive's name.  */
 	  if (current->my_archive
 	      && ! bfd_is_thin_archive (current->my_archive))
-	    filename = current->my_archive->filename;
+	    filename = bfd_get_filename (current->my_archive);
 
 	  /* If the path is the same as the previous path seen,
 	     reuse it.  This can happen when flattening a thin
@@ -1552,8 +1615,8 @@ _bfd_construct_extended_name_table (bfd
 	  /* If the path is relative, adjust it relative to
 	     the containing archive. */
 	  if (! IS_ABSOLUTE_PATH (filename)
-	      && ! IS_ABSOLUTE_PATH (abfd->filename))
-	    normal = adjust_relative_path (filename, abfd->filename);
+	      && ! IS_ABSOLUTE_PATH (bfd_get_filename (abfd)))
+	    normal = adjust_relative_path (filename, bfd_get_filename (abfd));
 	  else
 	    normal = filename;
 
@@ -1567,9 +1630,9 @@ _bfd_construct_extended_name_table (bfd
 	  continue;
 	}
 
-      normal = normalize (abfd, current->filename);
+      normal = normalize (abfd, bfd_get_filename (current));
       if (normal == NULL)
-	return FALSE;
+	return false;
 
       thislen = strlen (normal);
 
@@ -1605,11 +1668,11 @@ _bfd_construct_extended_name_table (bfd
     }
 
   if (total_namelen == 0)
-    return TRUE;
+    return true;
 
-  *tabloc = (char *) bfd_zalloc (abfd, total_namelen);
+  *tabloc = (char *) bfd_alloc (abfd, total_namelen);
   if (*tabloc == NULL)
-    return FALSE;
+    return false;
 
   *tablen = total_namelen;
   strptr = *tabloc;
@@ -1624,7 +1687,7 @@ _bfd_construct_extended_name_table (bfd
       const char *normal;
       unsigned int thislen;
       long stroff;
-      const char *filename = current->filename;
+      const char *filename = bfd_get_filename (current);
 
       if (bfd_is_thin_archive (abfd))
 	{
@@ -1632,7 +1695,7 @@ _bfd_construct_extended_name_table (bfd
 	     (i.e., we are flattening), use the containing archive's name.  */
 	  if (current->my_archive
 	      && ! bfd_is_thin_archive (current->my_archive))
-	    filename = current->my_archive->filename;
+	    filename = bfd_get_filename (current->my_archive);
 	  /* If the path is the same as the previous path seen,
 	     reuse it.  This can happen when flattening a thin
 	     archive that contains other archives.
@@ -1641,8 +1704,8 @@ _bfd_construct_extended_name_table (bfd
 	  if (last_filename && filename_cmp (last_filename, filename) == 0)
 	    normal = last_filename;
 	  else if (! IS_ABSOLUTE_PATH (filename)
-		   && ! IS_ABSOLUTE_PATH (abfd->filename))
-	    normal = adjust_relative_path (filename, abfd->filename);
+		   && ! IS_ABSOLUTE_PATH (bfd_get_filename (abfd)))
+	    normal = adjust_relative_path (filename, bfd_get_filename (abfd));
 	  else
 	    normal = filename;
 	}
@@ -1650,7 +1713,7 @@ _bfd_construct_extended_name_table (bfd
 	{
 	  normal = normalize (abfd, filename);
 	  if (normal == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       thislen = strlen (normal);
@@ -1664,16 +1727,14 @@ _bfd_construct_extended_name_table (bfd
 	    stroff = last_stroff;
 	  else
 	    {
-	      strcpy (strptr, normal);
-	      if (! trailing_slash)
-		strptr[thislen] = ARFMAG[1];
-	      else
-		{
-		  strptr[thislen] = '/';
-		  strptr[thislen + 1] = ARFMAG[1];
-		}
+	      last_filename = filename;
 	      stroff = strptr - *tabloc;
 	      last_stroff = stroff;
+	      memcpy (strptr, normal, thislen);
+	      strptr += thislen;
+	      if (trailing_slash)
+		*strptr++ = '/';
+	      *strptr++ = ARFMAG[1];
 	    }
 	  hdr->ar_name[0] = ar_padchar (current);
 	  if (bfd_is_thin_archive (abfd) && current->origin > 0)
@@ -1686,23 +1747,16 @@ _bfd_construct_extended_name_table (bfd
 	    }
 	  else
 	    _bfd_ar_spacepad (hdr->ar_name + 1, maxname - 1, "%-ld", stroff);
-	  if (normal != last_filename)
-	    {
-	      strptr += thislen + 1;
-	      if (trailing_slash)
-		++strptr;
-	      last_filename = filename;
-	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Do not construct an extended name table but transforms name field into
    its extended form.  */
 
-bfd_boolean
+bool
 _bfd_archive_bsd44_construct_extended_name_table (bfd *abfd,
 						  char **tabloc,
 						  bfd_size_type *tablen,
@@ -1719,12 +1773,12 @@ _bfd_archive_bsd44_construct_extended_na
        current != NULL;
        current = current->archive_next)
     {
-      const char *normal = normalize (abfd, current->filename);
+      const char *normal = normalize (abfd, bfd_get_filename (current));
       int has_space = 0;
       unsigned int len;
 
       if (normal == NULL)
-	return FALSE;
+	return false;
 
       for (len = 0; normal[len]; len++)
 	if (normal[len] == ' ')
@@ -1740,24 +1794,24 @@ _bfd_archive_bsd44_construct_extended_na
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write an archive header.  */
 
-bfd_boolean
+bool
 _bfd_generic_write_ar_hdr (bfd *archive, bfd *abfd)
 {
   struct ar_hdr *hdr = arch_hdr (abfd);
 
-  if (bfd_bwrite (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
-    return FALSE;
-  return TRUE;
+  if (bfd_write (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
+    return false;
+  return true;
 }
 
 /* Write an archive header using BSD4.4 convention.  */
 
-bfd_boolean
+bool
 _bfd_bsd44_write_ar_hdr (bfd *archive, bfd *abfd)
 {
   struct ar_hdr *hdr = arch_hdr (abfd);
@@ -1765,7 +1819,7 @@ _bfd_bsd44_write_ar_hdr (bfd *archive, b
   if (is_bsd44_extended_name (hdr->ar_name))
     {
       /* This is a BSD 4.4 extended name.  */
-      const char *fullname = normalize (abfd, abfd->filename);
+      const char *fullname = normalize (abfd, bfd_get_filename (abfd));
       unsigned int len = strlen (fullname);
       unsigned int padded_len = (len + 3) & ~3;
 
@@ -1773,32 +1827,32 @@ _bfd_bsd44_write_ar_hdr (bfd *archive, b
 
       if (!_bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size),
 			    arch_eltdata (abfd)->parsed_size + padded_len))
-	return FALSE;
+	return false;
 
-      if (bfd_bwrite (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
-	return FALSE;
+      if (bfd_write (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
+	return false;
 
-      if (bfd_bwrite (fullname, len, archive) != len)
-	return FALSE;
+      if (bfd_write (fullname, len, archive) != len)
+	return false;
 
       if (len & 3)
 	{
 	  static const char pad[3] = { 0, 0, 0 };
 
 	  len = 4 - (len & 3);
-	  if (bfd_bwrite (pad, len, archive) != len)
-	    return FALSE;
+	  if (bfd_write (pad, len, archive) != len)
+	    return false;
 	}
     }
   else
     {
-      if (bfd_bwrite (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
-	return FALSE;
+      if (bfd_write (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_noarchive_write_ar_hdr (bfd *archive, bfd *abfd ATTRIBUTE_UNUSED)
 {
   return _bfd_bool_bfd_false_error (archive);
@@ -1822,14 +1876,6 @@ hpux_uid_gid_encode (char str[6], long i
 }
 #endif	/* HPUX_LARGE_AR_IDS */
 
-#ifndef HAVE_GETUID
-#define getuid() 0
-#endif
-
-#ifndef HAVE_GETGID
-#define getgid() 0
-#endif
-
 /* Takes a filename, returns an arelt_data for it, or NULL if it can't
    make one.  The filename must refer to a filename in the filesystem.
    The filename field of the ar_hdr will NOT be initialized.  If member
@@ -1841,13 +1887,13 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, c
   struct stat status;
   struct areltdata *ared;
   struct ar_hdr *hdr;
-  bfd_size_type amt;
+  size_t amt;
 
   if (member && (member->flags & BFD_IN_MEMORY) != 0)
     {
       /* Assume we just "made" the member, and fake it.  */
       struct bfd_in_memory *bim = (struct bfd_in_memory *) member->iostream;
-      time (&status.st_mtime);
+      status.st_mtime = bfd_get_current_time (0);
       status.st_uid = getuid ();
       status.st_gid = getgid ();
       status.st_mode = 0644;
@@ -1858,6 +1904,15 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, c
       bfd_set_error (bfd_error_system_call);
       return NULL;
     }
+  else
+    {
+      /* The call to stat() above has filled in the st_mtime field
+	 with the real time that the object was modified.  But if
+	 we are trying to generate deterministic archives based upon
+	 the SOURCE_DATE_EPOCH environment variable then we want to
+	 override that.  */
+      status.st_mtime = bfd_get_current_time (status.st_mtime);
+    }
 
   /* If the caller requested that the BFD generate deterministic output,
      fake values for modification time, UID, GID, and file mode.  */
@@ -2083,19 +2138,20 @@ _bfd_noarchive_truncate_arname (bfd *abf
 
 /* The BFD is open for write and has its format set to bfd_archive.  */
 
-bfd_boolean
+bool
 _bfd_write_archive_contents (bfd *arch)
 {
   bfd *current;
   char *etable = NULL;
   bfd_size_type elength = 0;
   const char *ename = NULL;
-  bfd_boolean makemap = bfd_has_map (arch);
+  bool makemap = bfd_has_map (arch);
   /* If no .o's, don't bother to make a map.  */
-  bfd_boolean hasobjects = FALSE;
+  bool hasobjects = false;
   bfd_size_type wrote;
   int tries;
   char *armag;
+  char *buffer = NULL;
 
   /* Verify the viability of all entries; if any of them live in the
      filesystem (as opposed to living in an archive open for input)
@@ -2117,39 +2173,41 @@ _bfd_write_archive_contents (bfd *arch)
       if (!current->arelt_data)
 	{
 	  current->arelt_data =
-	    bfd_ar_hdr_from_filesystem (arch, current->filename, current);
+	    bfd_ar_hdr_from_filesystem (arch, bfd_get_filename (current),
+					current);
 	  if (!current->arelt_data)
 	    goto input_err;
 
 	  /* Put in the file name.  */
 	  BFD_SEND (arch, _bfd_truncate_arname,
-		    (arch, current->filename, (char *) arch_hdr (current)));
+		    (arch, bfd_get_filename (current),
+		     (char *) arch_hdr (current)));
 	}
 
       if (makemap && ! hasobjects)
 	{			/* Don't bother if we won't make a map!  */
 	  if ((bfd_check_format (current, bfd_object)))
-	    hasobjects = TRUE;
+	    hasobjects = true;
 	}
     }
 
   if (!BFD_SEND (arch, _bfd_construct_extended_name_table,
 		 (arch, &etable, &elength, &ename)))
-    return FALSE;
+    return false;
 
-  if (bfd_seek (arch, (file_ptr) 0, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (arch, 0, SEEK_SET) != 0)
+    return false;
   armag = ARMAG;
   if (bfd_is_thin_archive (arch))
     armag = ARMAGT;
-  wrote = bfd_bwrite (armag, SARMAG, arch);
+  wrote = bfd_write (armag, SARMAG, arch);
   if (wrote != SARMAG)
-    return FALSE;
+    return false;
 
   if (makemap && hasobjects)
     {
       if (! _bfd_compute_and_write_armap (arch, (unsigned int) elength))
-	return FALSE;
+	return false;
     }
 
   if (elength != 0)
@@ -2161,59 +2219,64 @@ _bfd_write_archive_contents (bfd *arch)
       /* Round size up to even number in archive header.  */
       if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size),
 			    (elength + 1) & ~(bfd_size_type) 1))
-	return FALSE;
+	return false;
       memcpy (hdr.ar_fmag, ARFMAG, 2);
-      if ((bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
+      if ((bfd_write (&hdr, sizeof (struct ar_hdr), arch)
 	   != sizeof (struct ar_hdr))
-	  || bfd_bwrite (etable, elength, arch) != elength)
-	return FALSE;
+	  || bfd_write (etable, elength, arch) != elength)
+	return false;
       if ((elength % 2) == 1)
 	{
-	  if (bfd_bwrite (&ARFMAG[1], 1, arch) != 1)
-	    return FALSE;
+	  if (bfd_write (&ARFMAG[1], 1, arch) != 1)
+	    return false;
 	}
     }
 
+#define AR_WRITE_BUFFERSIZE (8 * 1024 * 1024)
+
+  /* FIXME: Find a way to test link_info.reduce_memory_overheads
+     and change the buffer size.  */
+  buffer = bfd_malloc (AR_WRITE_BUFFERSIZE);
+  if (buffer == NULL)
+    goto input_err;
+
   for (current = arch->archive_head;
        current != NULL;
        current = current->archive_next)
     {
-      char buffer[DEFAULT_BUFFERSIZE];
       bfd_size_type remaining = arelt_size (current);
 
       /* Write ar header.  */
       if (!_bfd_write_ar_hdr (arch, current))
-	return FALSE;
+	goto input_err;
       if (bfd_is_thin_archive (arch))
 	continue;
-      if (bfd_seek (current, (file_ptr) 0, SEEK_SET) != 0)
+      if (bfd_seek (current, 0, SEEK_SET) != 0)
 	goto input_err;
 
       while (remaining)
 	{
-	  unsigned int amt = DEFAULT_BUFFERSIZE;
+	  size_t amt = AR_WRITE_BUFFERSIZE;
 
 	  if (amt > remaining)
 	    amt = remaining;
 	  errno = 0;
-	  if (bfd_bread (buffer, amt, current) != amt)
-	    {
-	      if (bfd_get_error () != bfd_error_system_call)
-		bfd_set_error (bfd_error_file_truncated);
-	      goto input_err;
-	    }
-	  if (bfd_bwrite (buffer, amt, arch) != amt)
-	    return FALSE;
+	  if (bfd_read (buffer, amt, current) != amt)
+	    goto input_err;
+	  if (bfd_write (buffer, amt, arch) != amt)
+	    goto input_err;
 	  remaining -= amt;
 	}
 
       if ((arelt_size (current) % 2) == 1)
 	{
-	  if (bfd_bwrite (&ARFMAG[1], 1, arch) != 1)
-	    return FALSE;
+	  if (bfd_write (&ARFMAG[1], 1, arch) != 1)
+	    goto input_err;
 	}
     }
 
+  free (buffer);
+
   if (makemap && hasobjects)
     {
       /* Verify the timestamp in the archive file.  If it would not be
@@ -2233,16 +2296,17 @@ _bfd_write_archive_contents (bfd *arch)
       while (++tries < 6);
     }
 
-  return TRUE;
+  return true;
 
  input_err:
   bfd_set_input_error (current, bfd_get_error ());
-  return FALSE;
+  free (buffer);
+  return false;
 }
 
 /* Note that the namidx for the first symbol is 0.  */
 
-bfd_boolean
+bool
 _bfd_compute_and_write_armap (bfd *arch, unsigned int elength)
 {
   char *first_name = NULL;
@@ -2254,9 +2318,9 @@ _bfd_compute_and_write_armap (bfd *arch,
   int stridx = 0;
   asymbol **syms = NULL;
   long syms_max = 0;
-  bfd_boolean ret;
-  bfd_size_type amt;
-  static bfd_boolean report_plugin_err = TRUE;
+  bool ret;
+  size_t amt;
+  static bool report_plugin_err = true;
 
   /* Dunno if this is the best place for this info...  */
   if (elength != 0)
@@ -2276,7 +2340,7 @@ _bfd_compute_and_write_armap (bfd *arch,
 
   /* Drop all the files called __.SYMDEF, we're going to make our own.  */
   while (arch->archive_head
-	 && strcmp (arch->archive_head->filename, "__.SYMDEF") == 0)
+	 && strcmp (bfd_get_filename (arch->archive_head), "__.SYMDEF") == 0)
     arch->archive_head = arch->archive_head->archive_next;
 
   /* Map over each element.  */
@@ -2293,7 +2357,7 @@ _bfd_compute_and_write_armap (bfd *arch,
 
 	  if (current->lto_slim_object && report_plugin_err)
 	    {
-	      report_plugin_err = FALSE;
+	      report_plugin_err = false;
 	      _bfd_error_handler
 		(_("%pB: plugin needed to handle lto object"),
 		 current);
@@ -2307,8 +2371,7 @@ _bfd_compute_and_write_armap (bfd *arch,
 	    {
 	      if (storage > syms_max)
 		{
-		  if (syms_max > 0)
-		    free (syms);
+		  free (syms);
 		  syms_max = storage;
 		  syms = (asymbol **) bfd_malloc (syms_max);
 		  if (syms == NULL)
@@ -2347,14 +2410,15 @@ _bfd_compute_and_write_armap (bfd *arch,
 			  map = new_map;
 			}
 
-		      if (syms[src_count]->name[0] == '_'
+		      if (syms[src_count]->name != NULL
+			  && syms[src_count]->name[0] == '_'
 			  && syms[src_count]->name[1] == '_'
 			  && strcmp (syms[src_count]->name
 				     + (syms[src_count]->name[2] == '_'),
 				     "__gnu_lto_slim") == 0
 			  && report_plugin_err)
 			{
-			  report_plugin_err = FALSE;
+			  report_plugin_err = false;
 			  _bfd_error_handler
 			    (_("%pB: plugin needed to handle lto object"),
 			     current);
@@ -2389,27 +2453,23 @@ _bfd_compute_and_write_armap (bfd *arch,
   ret = BFD_SEND (arch, write_armap,
 		  (arch, elength, map, orl_count, stridx));
 
-  if (syms_max > 0)
-    free (syms);
-  if (map != NULL)
-    free (map);
+  free (syms);
+  free (map);
   if (first_name != NULL)
     bfd_release (arch, first_name);
 
   return ret;
 
  error_return:
-  if (syms_max > 0)
-    free (syms);
-  if (map != NULL)
-    free (map);
+  free (syms);
+  free (map);
   if (first_name != NULL)
     bfd_release (arch, first_name);
 
-  return FALSE;
+  return false;
 }
 
-bfd_boolean
+bool
 _bfd_bsd_write_armap (bfd *arch,
 		      unsigned int elength,
 		      struct orl *map,
@@ -2477,9 +2537,14 @@ _bfd_bsd_write_armap (bfd *arch,
     {
       struct stat statbuf;
 
-      if (stat (arch->filename, &statbuf) == 0)
-	bfd_ardata (arch)->armap_timestamp = (statbuf.st_mtime
-					      + ARMAP_TIME_OFFSET);
+      if (stat (bfd_get_filename (arch), &statbuf) == 0)
+	{
+	  /* If asked, replace the time with a deterministic value. */
+	  statbuf.st_mtime = bfd_get_current_time (statbuf.st_mtime);
+
+	  bfd_ardata (arch)->armap_timestamp = (statbuf.st_mtime
+						+ ARMAP_TIME_OFFSET);
+	}
       uid = getuid();
       gid = getgid();
     }
@@ -2493,14 +2558,14 @@ _bfd_bsd_write_armap (bfd *arch,
   _bfd_ar_spacepad (hdr.ar_uid, sizeof (hdr.ar_uid), "%ld", uid);
   _bfd_ar_spacepad (hdr.ar_gid, sizeof (hdr.ar_gid), "%ld", gid);
   if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize))
-    return FALSE;
+    return false;
   memcpy (hdr.ar_fmag, ARFMAG, 2);
-  if (bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
+  if (bfd_write (&hdr, sizeof (struct ar_hdr), arch)
       != sizeof (struct ar_hdr))
-    return FALSE;
+    return false;
   H_PUT_32 (arch, ranlibsize, temp);
-  if (bfd_bwrite (temp, sizeof (temp), arch) != sizeof (temp))
-    return FALSE;
+  if (bfd_write (temp, sizeof (temp), arch) != sizeof (temp))
+    return false;
 
   firstreal = first;
   current = arch->archive_head;
@@ -2531,47 +2596,48 @@ _bfd_bsd_write_armap (bfd *arch,
       if (firstreal != (file_ptr) offset)
 	{
 	  bfd_set_error (bfd_error_file_truncated);
-	  return FALSE;
+	  return false;
 	}
 
       last_elt = current;
       H_PUT_32 (arch, map[count].namidx, buf);
       H_PUT_32 (arch, firstreal, buf + BSD_SYMDEF_OFFSET_SIZE);
-      if (bfd_bwrite (buf, BSD_SYMDEF_SIZE, arch)
+      if (bfd_write (buf, BSD_SYMDEF_SIZE, arch)
 	  != BSD_SYMDEF_SIZE)
-	return FALSE;
+	return false;
     }
 
   /* Now write the strings themselves.  */
   H_PUT_32 (arch, stringsize, temp);
-  if (bfd_bwrite (temp, sizeof (temp), arch) != sizeof (temp))
-    return FALSE;
+  if (bfd_write (temp, sizeof (temp), arch) != sizeof (temp))
+    return false;
   for (count = 0; count < orl_count; count++)
     {
       size_t len = strlen (*map[count].name) + 1;
 
-      if (bfd_bwrite (*map[count].name, len, arch) != len)
-	return FALSE;
+      if (bfd_write (*map[count].name, len, arch) != len)
+	return false;
     }
 
   /* The spec sez this should be a newline.  But in order to be
      bug-compatible for sun's ar we use a null.  */
   if (padit)
     {
-      if (bfd_bwrite ("", 1, arch) != 1)
-	return FALSE;
+      if (bfd_write ("", 1, arch) != 1)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* At the end of archive file handling, update the timestamp in the
-   file, so the linker will accept it.
+   file, so older linkers will accept it.  (This does not apply to
+   ld.bfd or ld.gold).
 
    Return TRUE if the timestamp was OK, or an unusual problem happened.
    Return FALSE if we updated the timestamp.  */
 
-bfd_boolean
+bool
 _bfd_archive_bsd_update_armap_timestamp (bfd *arch)
 {
   struct stat archstat;
@@ -2579,7 +2645,7 @@ _bfd_archive_bsd_update_armap_timestamp
 
   /* If creating deterministic archives, just leave the timestamp as-is.  */
   if ((arch->flags & BFD_DETERMINISTIC_OUTPUT) != 0)
-    return TRUE;
+    return true;
 
   /* Flush writes, get last-write timestamp from file, and compare it
      to the timestamp IN the file.  */
@@ -2589,12 +2655,19 @@ _bfd_archive_bsd_update_armap_timestamp
       bfd_perror (_("Reading archive file mod timestamp"));
 
       /* Can't read mod time for some reason.  */
-      return TRUE;
+      return true;
     }
+
   if (((long) archstat.st_mtime) <= bfd_ardata (arch)->armap_timestamp)
     /* OK by the linker's rules.  */
-    return TRUE;
+    return true;
 
+  if (getenv ("SOURCE_DATE_EPOCH") != NULL
+      && bfd_ardata (arch)->armap_timestamp == bfd_get_current_time (0) + ARMAP_TIME_OFFSET)
+    /* If the archive's timestamp has been set to SOURCE_DATE_EPOCH
+       then leave it as-is.  */
+    return true;
+  
   /* Update the timestamp.  */
   bfd_ardata (arch)->armap_timestamp = archstat.st_mtime + ARMAP_TIME_OFFSET;
 
@@ -2607,17 +2680,17 @@ _bfd_archive_bsd_update_armap_timestamp
   bfd_ardata (arch)->armap_datepos = (SARMAG
 				      + offsetof (struct ar_hdr, ar_date[0]));
   if (bfd_seek (arch, bfd_ardata (arch)->armap_datepos, SEEK_SET) != 0
-      || (bfd_bwrite (hdr.ar_date, sizeof (hdr.ar_date), arch)
+      || (bfd_write (hdr.ar_date, sizeof (hdr.ar_date), arch)
 	  != sizeof (hdr.ar_date)))
     {
       bfd_perror (_("Writing updated armap timestamp"));
 
       /* Some error while writing.  */
-      return TRUE;
+      return true;
     }
 
   /* We updated the timestamp successfully.  */
-  return FALSE;
+  return false;
 }
 
 /* A coff armap looks like :
@@ -2633,7 +2706,7 @@ _bfd_archive_bsd_update_armap_timestamp
 
    symbol name n-1  */
 
-bfd_boolean
+bool
 _bfd_coff_write_armap (bfd *arch,
 		       unsigned int elength,
 		       struct orl *map,
@@ -2696,7 +2769,7 @@ _bfd_coff_write_armap (bfd *arch,
   memset (&hdr, ' ', sizeof (struct ar_hdr));
   hdr.ar_name[0] = '/';
   if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize))
-    return FALSE;
+    return false;
   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
 		    ((arch->flags & BFD_DETERMINISTIC_OUTPUT) == 0
 		     ? time (NULL) : 0));
@@ -2707,12 +2780,12 @@ _bfd_coff_write_armap (bfd *arch,
   memcpy (hdr.ar_fmag, ARFMAG, 2);
 
   /* Write the ar header for this item and the number of symbols.  */
-  if (bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
+  if (bfd_write (&hdr, sizeof (struct ar_hdr), arch)
       != sizeof (struct ar_hdr))
-    return FALSE;
+    return false;
 
   if (!bfd_write_bigendian_4byte_int (arch, symbol_count))
-    return FALSE;
+    return false;
 
   /* Two passes, first write the file offsets for each symbol -
      remembering that each offset is on a two byte boundary.  */
@@ -2736,10 +2809,10 @@ _bfd_coff_write_armap (bfd *arch,
 	  if (archive_member_file_ptr != (file_ptr) offset)
 	    {
 	      bfd_set_error (bfd_error_file_truncated);
-	      return FALSE;
+	      return false;
 	    }
 	  if (!bfd_write_bigendian_4byte_int (arch, offset))
-	    return FALSE;
+	    return false;
 	  count++;
 	}
       archive_member_file_ptr += sizeof (struct ar_hdr);
@@ -2758,22 +2831,22 @@ _bfd_coff_write_armap (bfd *arch,
     {
       size_t len = strlen (*map[count].name) + 1;
 
-      if (bfd_bwrite (*map[count].name, len, arch) != len)
-	return FALSE;
+      if (bfd_write (*map[count].name, len, arch) != len)
+	return false;
     }
 
   /* The spec sez this should be a newline.  But in order to be
      bug-compatible for arc960 we use a null.  */
   if (padit)
     {
-      if (bfd_bwrite ("", 1, arch) != 1)
-	return FALSE;
+      if (bfd_write ("", 1, arch) != 1)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_noarchive_write_armap
     (bfd *arch ATTRIBUTE_UNUSED,
      unsigned int elength ATTRIBUTE_UNUSED,
@@ -2781,7 +2854,7 @@ _bfd_noarchive_write_armap
      unsigned int orl_count ATTRIBUTE_UNUSED,
      int stridx ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 static int
@@ -2817,7 +2890,7 @@ _bfd_unlink_from_archive_parent (bfd *ab
     }
 }
 
-bfd_boolean
+bool
 _bfd_archive_close_and_cleanup (bfd *abfd)
 {
   if (bfd_read_p (abfd) && abfd->format == bfd_archive)
@@ -2840,6 +2913,10 @@ _bfd_archive_close_and_cleanup (bfd *abf
 	  htab_delete (htab);
 	  bfd_ardata (abfd)->cache = NULL;
 	}
+
+      /* Close the archive plugin file descriptor if needed.  */
+      if (abfd->archive_plugin_fd > 0)
+	close (abfd->archive_plugin_fd);
     }
 
   _bfd_unlink_from_archive_parent (abfd);
@@ -2847,5 +2924,5 @@ _bfd_archive_close_and_cleanup (bfd *abf
   if (abfd->is_linker_output)
     (*abfd->link.hash->hash_table_free) (abfd);
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/archures.c ./bfd/archures.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/archures.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/archures.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for architectures.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Hacked by John Gilmore and Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -173,6 +173,7 @@ DESCRIPTION
 .#define bfd_mach_mips16000		16000
 .#define bfd_mach_mips16		16
 .#define bfd_mach_mips5			5
+.#define bfd_mach_mips_allegrex		10111431 {* octal 'AL', 31.  *}
 .#define bfd_mach_mips_loongson_2e	3001
 .#define bfd_mach_mips_loongson_2f	3002
 .#define bfd_mach_mips_gs464		3003
@@ -205,16 +206,6 @@ DESCRIPTION
 .#define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
 .#define bfd_mach_x86_64_intel_syntax	(bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
 .#define bfd_mach_x64_32_intel_syntax	(bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
-.  bfd_arch_l1om,      {* Intel L1OM.  *}
-.#define bfd_mach_l1om			(1 << 5)
-.#define bfd_mach_l1om_intel_syntax	(bfd_mach_l1om | bfd_mach_i386_intel_syntax)
-.  bfd_arch_k1om,      {* Intel K1OM.  *}
-.#define bfd_mach_k1om			(1 << 6)
-.#define bfd_mach_k1om_intel_syntax	(bfd_mach_k1om | bfd_mach_i386_intel_syntax)
-.#define bfd_mach_i386_nacl		(1 << 7)
-.#define bfd_mach_i386_i386_nacl	(bfd_mach_i386_i386 | bfd_mach_i386_nacl)
-.#define bfd_mach_x86_64_nacl		(bfd_mach_x86_64 | bfd_mach_i386_nacl)
-.#define bfd_mach_x64_32_nacl		(bfd_mach_x64_32 | bfd_mach_i386_nacl)
 .  bfd_arch_iamcu,     {* Intel MCU.  *}
 .#define bfd_mach_iamcu			(1 << 8)
 .#define bfd_mach_i386_iamcu		(bfd_mach_i386_i386 | bfd_mach_iamcu)
@@ -232,7 +223,6 @@ DESCRIPTION
 .#define bfd_mach_h8300sx	6
 .#define bfd_mach_h8300sxn	7
 .  bfd_arch_pdp11,     {* DEC PDP-11.  *}
-.  bfd_arch_plugin,
 .  bfd_arch_powerpc,   {* PowerPC.  *}
 .#define bfd_mach_ppc		32
 .#define bfd_mach_ppc64		64
@@ -342,6 +332,7 @@ DESCRIPTION
 .#define bfd_mach_arm_8M_BASE   25
 .#define bfd_mach_arm_8M_MAIN   26
 .#define bfd_mach_arm_8_1M_MAIN 27
+.#define bfd_mach_arm_9         28
 .  bfd_arch_nds32,     {* Andes NDS32.  *}
 .#define bfd_mach_n1		1
 .#define bfd_mach_n1h		2
@@ -355,7 +346,6 @@ DESCRIPTION
 .#define bfd_mach_tic4x		40
 .  bfd_arch_tic54x,    {* Texas Instruments TMS320C54X.  *}
 .  bfd_arch_tic6x,     {* Texas Instruments TMS320C6X.  *}
-.  bfd_arch_tic80,     {* TI TMS320c80 (MVP).  *}
 .  bfd_arch_v850,      {* NEC V850.  *}
 .  bfd_arch_v850_rh850,{* NEC V850 (using RH850 ABI).  *}
 .#define bfd_mach_v850		1
@@ -417,6 +407,7 @@ DESCRIPTION
 .#define bfd_mach_iq10		2
 .  bfd_arch_bpf,       {* Linux eBPF.  *}
 .#define bfd_mach_bpf		1
+.#define bfd_mach_xbpf		2
 .  bfd_arch_epiphany,  {* Adapteva EPIPHANY.  *}
 .#define bfd_mach_epiphany16	1
 .#define bfd_mach_epiphany32	2
@@ -497,22 +488,44 @@ DESCRIPTION
 .#define bfd_mach_msp46		46
 .#define bfd_mach_msp47		47
 .#define bfd_mach_msp54		54
-.  bfd_arch_xc16x,     {* Infineon's XC16X Series.  *}
-.#define bfd_mach_xc16x		1
-.#define bfd_mach_xc16xl	2
-.#define bfd_mach_xc16xs	3
 .  bfd_arch_xgate,     {* Freescale XGATE.  *}
 .#define bfd_mach_xgate		1
 .  bfd_arch_xtensa,    {* Tensilica's Xtensa cores.  *}
 .#define bfd_mach_xtensa	1
 .  bfd_arch_z80,
-.#define bfd_mach_z80strict	1 {* No undocumented opcodes.  *}
-.#define bfd_mach_z80		3 {* With ixl, ixh, iyl, and iyh.  *}
-.#define bfd_mach_z80full	7 {* All undocumented instructions.  *}
-.#define bfd_mach_r800		11 {* R800: successor with multiplication.  *}
+.{* Zilog Z80 without undocumented opcodes.  *}
+.#define bfd_mach_z80strict	1
+.{* Zilog Z180: successor with additional instructions, but without
+. halves of ix and iy.  *}
+.#define bfd_mach_z180		2
+.{* Zilog Z80 with ixl, ixh, iyl, and iyh.  *}
+.#define bfd_mach_z80		3
+.{* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode.  *}
+.#define bfd_mach_ez80_z80	4
+.{* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode.  *}
+.#define bfd_mach_ez80_adl	5
+.{* Z80N *}
+.#define bfd_mach_z80n		6
+.{* Zilog Z80 with all undocumented instructions.  *}
+.#define bfd_mach_z80full	7
+.{* GameBoy Z80 (reduced instruction set).  *}
+.#define bfd_mach_gbz80		8
+.{* ASCII R800: successor with multiplication.  *}
+.#define bfd_mach_r800		11
 .  bfd_arch_lm32,      {* Lattice Mico32.  *}
 .#define bfd_mach_lm32		1
 .  bfd_arch_microblaze,{* Xilinx MicroBlaze.  *}
+.  bfd_arch_kvx,        {* Kalray VLIW core of the MPPA processor family *}
+.#define bfd_mach_kv3_unknown       0
+.#define bfd_mach_kv3_1             1
+.#define bfd_mach_kv3_1_64          2
+.#define bfd_mach_kv3_1_usr         3
+.#define bfd_mach_kv3_2             4
+.#define bfd_mach_kv3_2_64          5
+.#define bfd_mach_kv3_2_usr         6
+.#define bfd_mach_kv4_1             7
+.#define bfd_mach_kv4_1_64          8
+.#define bfd_mach_kv4_1_usr         9
 .  bfd_arch_tilepro,   {* Tilera TILEPro.  *}
 .  bfd_arch_tilegx,    {* Tilera TILE-Gx.  *}
 .#define bfd_mach_tilepro	1
@@ -520,7 +533,9 @@ DESCRIPTION
 .#define bfd_mach_tilegx32	2
 .  bfd_arch_aarch64,   {* AArch64.  *}
 .#define bfd_mach_aarch64 0
+.#define bfd_mach_aarch64_8R	1
 .#define bfd_mach_aarch64_ilp32	32
+.#define bfd_mach_aarch64_llp64 64
 .  bfd_arch_nios2,     {* Nios II.  *}
 .#define bfd_mach_nios2		0
 .#define bfd_mach_nios2r1	1
@@ -543,6 +558,26 @@ DESCRIPTION
 .#define bfd_mach_ck803		5
 .#define bfd_mach_ck807		6
 .#define bfd_mach_ck810		7
+.#define bfd_mach_ck860		8
+.  bfd_arch_loongarch,       {* LoongArch *}
+.#define bfd_mach_loongarch32	1
+.#define bfd_mach_loongarch64	2
+.  bfd_arch_amdgcn,     {* AMDGCN *}
+.#define bfd_mach_amdgcn_unknown 0x000
+.#define bfd_mach_amdgcn_gfx900  0x02c
+.#define bfd_mach_amdgcn_gfx904  0x02e
+.#define bfd_mach_amdgcn_gfx906  0x02f
+.#define bfd_mach_amdgcn_gfx908  0x030
+.#define bfd_mach_amdgcn_gfx90a  0x03f
+.#define bfd_mach_amdgcn_gfx1010 0x033
+.#define bfd_mach_amdgcn_gfx1011 0x034
+.#define bfd_mach_amdgcn_gfx1012 0x035
+.#define bfd_mach_amdgcn_gfx1030 0x036
+.#define bfd_mach_amdgcn_gfx1031 0x037
+.#define bfd_mach_amdgcn_gfx1032 0x038
+.#define bfd_mach_amdgcn_gfx1100 0x041
+.#define bfd_mach_amdgcn_gfx1101 0x046
+.#define bfd_mach_amdgcn_gfx1102 0x047
 .  bfd_arch_last
 .  };
 */
@@ -569,17 +604,16 @@ DESCRIPTION
 .  {* TRUE if this is the default machine for the architecture.
 .     The default arch should be the first entry for an arch so that
 .     all the entries for that arch can be accessed via <<next>>.  *}
-.  bfd_boolean the_default;
+.  bool the_default;
 .  const struct bfd_arch_info * (*compatible) (const struct bfd_arch_info *,
 .					       const struct bfd_arch_info *);
 .
-.  bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
+.  bool (*scan) (const struct bfd_arch_info *, const char *);
 .
 .  {* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
 .     IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
 .     TRUE, the buffer contains code.  *}
-.  void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
-.		  bfd_boolean code);
+.  void *(*fill) (bfd_size_type count, bool is_bigendian, bool code);
 .
 .  const struct bfd_arch_info *next;
 .
@@ -599,6 +633,7 @@ DESCRIPTION
 
 extern const bfd_arch_info_type bfd_aarch64_arch;
 extern const bfd_arch_info_type bfd_alpha_arch;
+extern const bfd_arch_info_type bfd_amdgcn_arch;
 extern const bfd_arch_info_type bfd_arc_arch;
 extern const bfd_arch_info_type bfd_arm_arch;
 extern const bfd_arch_info_type bfd_avr_arch;
@@ -621,9 +656,9 @@ extern const bfd_arch_info_type bfd_iamc
 extern const bfd_arch_info_type bfd_ia64_arch;
 extern const bfd_arch_info_type bfd_ip2k_arch;
 extern const bfd_arch_info_type bfd_iq2000_arch;
-extern const bfd_arch_info_type bfd_k1om_arch;
-extern const bfd_arch_info_type bfd_l1om_arch;
+extern const bfd_arch_info_type bfd_kvx_arch;
 extern const bfd_arch_info_type bfd_lm32_arch;
+extern const bfd_arch_info_type bfd_loongarch_arch;
 extern const bfd_arch_info_type bfd_m32c_arch;
 extern const bfd_arch_info_type bfd_m32r_arch;
 extern const bfd_arch_info_type bfd_m68hc11_arch;
@@ -651,7 +686,6 @@ extern const bfd_arch_info_type bfd_ns32
 extern const bfd_arch_info_type bfd_or1k_arch;
 extern const bfd_arch_info_type bfd_pdp11_arch;
 extern const bfd_arch_info_type bfd_pj_arch;
-extern const bfd_arch_info_type bfd_plugin_arch;
 extern const bfd_arch_info_type bfd_powerpc_archs[];
 #define bfd_powerpc_arch bfd_powerpc_archs[0]
 extern const bfd_arch_info_type bfd_pru_arch;
@@ -668,7 +702,6 @@ extern const bfd_arch_info_type bfd_tic3
 extern const bfd_arch_info_type bfd_tic4x_arch;
 extern const bfd_arch_info_type bfd_tic54x_arch;
 extern const bfd_arch_info_type bfd_tic6x_arch;
-extern const bfd_arch_info_type bfd_tic80_arch;
 extern const bfd_arch_info_type bfd_tilegx_arch;
 extern const bfd_arch_info_type bfd_tilepro_arch;
 extern const bfd_arch_info_type bfd_v850_arch;
@@ -678,7 +711,6 @@ extern const bfd_arch_info_type bfd_visi
 extern const bfd_arch_info_type bfd_wasm32_arch;
 extern const bfd_arch_info_type bfd_xstormy16_arch;
 extern const bfd_arch_info_type bfd_xtensa_arch;
-extern const bfd_arch_info_type bfd_xc16x_arch;
 extern const bfd_arch_info_type bfd_xgate_arch;
 extern const bfd_arch_info_type bfd_z80_arch;
 extern const bfd_arch_info_type bfd_z8k_arch;
@@ -690,6 +722,7 @@ static const bfd_arch_info_type * const
 #else
     &bfd_aarch64_arch,
     &bfd_alpha_arch,
+    &bfd_amdgcn_arch,
     &bfd_arc_arch,
     &bfd_arm_arch,
     &bfd_avr_arch,
@@ -712,9 +745,9 @@ static const bfd_arch_info_type * const
     &bfd_ia64_arch,
     &bfd_ip2k_arch,
     &bfd_iq2000_arch,
-    &bfd_k1om_arch,
-    &bfd_l1om_arch,
+    &bfd_kvx_arch,
     &bfd_lm32_arch,
+    &bfd_loongarch_arch,
     &bfd_m32c_arch,
     &bfd_m32r_arch,
     &bfd_m68hc11_arch,
@@ -756,7 +789,6 @@ static const bfd_arch_info_type * const
     &bfd_tic4x_arch,
     &bfd_tic54x_arch,
     &bfd_tic6x_arch,
-    &bfd_tic80_arch,
     &bfd_tilegx_arch,
     &bfd_tilepro_arch,
     &bfd_v850_arch,
@@ -766,7 +798,6 @@ static const bfd_arch_info_type * const
     &bfd_wasm32_arch,
     &bfd_xstormy16_arch,
     &bfd_xtensa_arch,
-    &bfd_xc16x_arch,
     &bfd_xgate_arch,
     &bfd_z80_arch,
     &bfd_z8k_arch,
@@ -843,7 +874,7 @@ bfd_arch_list (void)
   const char **name_ptr;
   const char **name_list;
   const bfd_arch_info_type * const *app;
-  bfd_size_type amt;
+  size_t amt;
 
   /* Determine the number of architectures.  */
   vec_length = 0;
@@ -856,7 +887,7 @@ bfd_arch_list (void)
 	}
     }
 
-  amt = (vec_length + 1) * sizeof (char **);
+  amt = (vec_length + 1) * sizeof (char *);
   name_list = (const char **) bfd_malloc (amt);
   if (name_list == NULL)
     return NULL;
@@ -883,7 +914,7 @@ FUNCTION
 
 SYNOPSIS
 	const bfd_arch_info_type *bfd_arch_get_compatible
-	  (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
+	  (const bfd *abfd, const bfd *bbfd, bool accept_unknowns);
 
 DESCRIPTION
 	Determine whether two BFDs' architectures and machine types
@@ -896,7 +927,7 @@ DESCRIPTION
 const bfd_arch_info_type *
 bfd_arch_get_compatible (const bfd *abfd,
 			 const bfd *bbfd,
-			 bfd_boolean accept_unknowns)
+			 bool accept_unknowns)
 {
   const bfd *ubfd, *kbfd;
 
@@ -933,11 +964,12 @@ DESCRIPTION
 	architecture of the file.
 
 .extern const bfd_arch_info_type bfd_default_arch_struct;
+.
 */
 
 const bfd_arch_info_type bfd_default_arch_struct =
 {
-  32, 32, 8, bfd_arch_unknown, 0, "unknown", "unknown", 2, TRUE,
+  32, 32, 8, bfd_arch_unknown, 0, "unknown", "unknown", 2, true,
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
@@ -966,7 +998,7 @@ FUNCTION
 	bfd_default_set_arch_mach
 
 SYNOPSIS
-	bfd_boolean bfd_default_set_arch_mach
+	bool bfd_default_set_arch_mach
 	  (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
 
 DESCRIPTION
@@ -976,18 +1008,18 @@ DESCRIPTION
 	pointer.
 */
 
-bfd_boolean
+bool
 bfd_default_set_arch_mach (bfd *abfd,
 			   enum bfd_architecture arch,
 			   unsigned long mach)
 {
   abfd->arch_info = bfd_lookup_arch (arch, mach);
   if (abfd->arch_info != NULL)
-    return TRUE;
+    return true;
 
   abfd->arch_info = &bfd_default_arch_struct;
   bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return false;
 }
 
 /*
@@ -1098,7 +1130,7 @@ INTERNAL_FUNCTION
 	bfd_default_scan
 
 SYNOPSIS
-	bfd_boolean bfd_default_scan
+	bool bfd_default_scan
 	  (const struct bfd_arch_info *info, const char *string);
 
 DESCRIPTION
@@ -1106,7 +1138,7 @@ DESCRIPTION
 	architecture hit and a machine hit.
 */
 
-bfd_boolean
+bool
 bfd_default_scan (const bfd_arch_info_type *info, const char *string)
 {
   const char *ptr_src;
@@ -1119,11 +1151,11 @@ bfd_default_scan (const bfd_arch_info_ty
      default architecture?  */
   if (strcasecmp (string, info->arch_name) == 0
       && info->the_default)
-    return TRUE;
+    return true;
 
   /* Exact match of the machine name (PRINTABLE_NAME)?  */
   if (strcasecmp (string, info->printable_name) == 0)
-    return TRUE;
+    return true;
 
   /* Given that printable_name contains no colon, attempt to match:
      ARCH_NAME [ ":" ] PRINTABLE_NAME?  */
@@ -1137,13 +1169,13 @@ bfd_default_scan (const bfd_arch_info_ty
 	    {
 	      if (strcasecmp (string + strlen_arch_name + 1,
 			      info->printable_name) == 0)
-		return TRUE;
+		return true;
 	    }
 	  else
 	    {
 	      if (strcasecmp (string + strlen_arch_name,
 			      info->printable_name) == 0)
-		return TRUE;
+		return true;
 	    }
 	}
     }
@@ -1156,7 +1188,7 @@ bfd_default_scan (const bfd_arch_info_ty
       if (strncasecmp (string, info->printable_name, colon_index) == 0
 	  && strcasecmp (string + colon_index,
 			 info->printable_name + colon_index + 1) == 0)
-	return TRUE;
+	return true;
     }
 
   /* Given that PRINTABLE_NAME has the form: <arch> ":" <mach>; Do not
@@ -1286,16 +1318,16 @@ bfd_default_scan (const bfd_arch_info_ty
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   if (arch != info->arch)
-    return FALSE;
+    return false;
 
   if (number != info->mach)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -1432,8 +1464,8 @@ INTERNAL_FUNCTION
 
 SYNOPSIS
 	void *bfd_arch_default_fill (bfd_size_type count,
-				     bfd_boolean is_bigendian,
-				     bfd_boolean code);
+				     bool is_bigendian,
+				     bool code);
 
 DESCRIPTION
 	Allocate via bfd_malloc and return a fill buffer of size COUNT.
@@ -1443,8 +1475,8 @@ DESCRIPTION
 
 void *
 bfd_arch_default_fill (bfd_size_type count,
-		       bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
-		       bfd_boolean code ATTRIBUTE_UNUSED)
+		       bool is_bigendian ATTRIBUTE_UNUSED,
+		       bool code ATTRIBUTE_UNUSED)
 {
   void *fill = bfd_malloc (count);
   if (fill != NULL)
@@ -1452,7 +1484,7 @@ bfd_arch_default_fill (bfd_size_type cou
   return fill;
 }
 
-bfd_boolean
+bool
 _bfd_nowrite_set_arch_mach (bfd *abfd,
 			    enum bfd_architecture arch ATTRIBUTE_UNUSED,
 			    unsigned long mach ATTRIBUTE_UNUSED)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/arc-plt.def ./bfd/arc-plt.def
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/arc-plt.def	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/arc-plt.def	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Arc V2 Related PLT entries.
-   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+   Copyright (C) 2016-2024 Free Software Foundation, Inc.
    Contributed by Cupertino Miranda (cmiranda@synopsys.com).
 
    This file is part of BFD, the Binary File Descriptor library.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/arc-plt.h ./bfd/arc-plt.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/arc-plt.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/arc-plt.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* ARC-specific header file for PLT support.
-   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+   Copyright (C) 2016-2024 Free Software Foundation, Inc.
    Contributed by Cupertino Miranda (cmiranda@synopsys.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -178,7 +178,7 @@ struct plt_version_t
 #define PLT_ELEM(...)
 #define ENTRY_RELOC(...)
 #define ELEM_RELOC(...)
-struct plt_version_t plt_versions[PLT_MAX] = {
+const struct plt_version_t plt_versions[PLT_MAX] = {
 
 #include "arc-plt.def"
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ax_tls.m4 ./bfd/ax_tls.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ax_tls.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/ax_tls.m4	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,71 @@
+# ===========================================================================
+#          https://www.gnu.org/software/autoconf-archive/ax_tls.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_TLS([action-if-found], [action-if-not-found])
+#
+# DESCRIPTION
+#
+#   Provides a test for the compiler support of thread local storage (TLS)
+#   extensions. Defines TLS if it is found. Currently knows about C++11,
+#   GCC/ICC, and MSVC. I think SunPro uses the same as GCC, and Borland
+#   apparently supports either.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Alan Woodland <ajw05@aber.ac.uk>
+#   Copyright (c) 2010 Diego Elio Petteno` <flameeyes@gmail.com>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 15
+
+AC_DEFUN([AX_TLS], [
+  AC_MSG_CHECKING([for thread local storage (TLS) class])
+  AC_CACHE_VAL([ac_cv_tls],
+   [for ax_tls_keyword in thread_local _Thread_local __thread '__declspec(thread)' none; do
+       AS_CASE([$ax_tls_keyword],
+          [none], [ac_cv_tls=none ; break],
+          [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+              [#include <stdlib.h>],
+              [static  $ax_tls_keyword  int bar;]
+            )],
+            [ac_cv_tls=$ax_tls_keyword ; break],
+            [ac_cv_tls=none]
+          )]
+        )
+    done ]
+  )
+  AC_MSG_RESULT([$ac_cv_tls])
+
+  AS_IF([test "$ac_cv_tls" != "none"],
+    [AC_DEFINE_UNQUOTED([TLS],[$ac_cv_tls],[If the compiler supports a TLS storage class, define it to that here])
+     m4_ifnblank([$1],[$1],[[:]])],
+    [m4_ifnblank([$2],[$2],[[:]])])
+])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfd.c ./bfd/bfd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfd.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/bfd.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic BFD library interface and support routines.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -34,7 +34,16 @@ SECTION
 	contains the major data about the file and pointers
 	to the rest of the data.
 
-CODE_FRAGMENT
+EXTERNAL
+.typedef enum bfd_format
+.  {
+.    bfd_unknown = 0,	{* File format is unknown.  *}
+.    bfd_object,	{* Linker/assembler/compiler output.  *}
+.    bfd_archive,	{* Object archive file.  *}
+.    bfd_core,		{* Core dump.  *}
+.    bfd_type_end	{* Marks the end; don't use it!  *}
+.  }
+.bfd_format;
 .
 .enum bfd_direction
 .  {
@@ -44,6 +53,14 @@ CODE_FRAGMENT
 .    both_direction = 3
 .  };
 .
+.enum bfd_last_io
+.  {
+.    bfd_io_seek = 0,
+.    bfd_io_read = 1,
+.    bfd_io_write = 2,
+.    bfd_io_force = 3
+.  };
+.
 .enum bfd_plugin_format
 .  {
 .    bfd_plugin_unknown = 0,
@@ -57,6 +74,8 @@ CODE_FRAGMENT
 .    bfd_byte data[1];
 .  };
 .
+
+CODE_FRAGMENT
 .struct bfd
 .{
 .  {* The filename the application opened the BFD with.  *}
@@ -85,12 +104,6 @@ CODE_FRAGMENT
 .  {* A unique identifier of the BFD  *}
 .  unsigned int id;
 .
-.  {* The format which belongs to the BFD. (object, core, etc.)  *}
-.  ENUM_BITFIELD (bfd_format) format : 3;
-.
-.  {* The direction with which the BFD was opened.  *}
-.  ENUM_BITFIELD (bfd_direction) direction : 2;
-.
 .  {* Format_specific flags.  *}
 .  flagword flags;
 .
@@ -147,8 +160,8 @@ CODE_FRAGMENT
 .#define BFD_TRADITIONAL_FORMAT    0x400
 .
 .  {* This flag indicates that the BFD contents are actually cached
-.     in memory.  If this is set, iostream points to a bfd_in_memory
-.     struct.  *}
+.     in memory.  If this is set, iostream points to a malloc'd
+.     bfd_in_memory struct.  *}
 .#define BFD_IN_MEMORY             0x800
 .
 .  {* This BFD has been created by the linker and doesn't correspond
@@ -182,17 +195,40 @@ CODE_FRAGMENT
 .  {* Put pathnames into archives (non-POSIX).  *}
 .#define BFD_ARCHIVE_FULL_PATH  0x100000
 .
-.  {* Flags bits to be saved in bfd_preserve_save.  *}
-.#define BFD_FLAGS_SAVED \
-.  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
-.   | BFD_PLUGIN | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON \
-.   | BFD_USE_ELF_STT_COMMON)
+.#define BFD_CLOSED_BY_CACHE    0x200000
+
+.  {* Compress sections in this BFD with SHF_COMPRESSED zstd.  *}
+.#define BFD_COMPRESS_ZSTD      0x400000
+.
+.  {* Don't generate ELF section header.  *}
+.#define BFD_NO_SECTION_HEADER	0x800000
 .
 .  {* Flags bits which are for BFD use only.  *}
 .#define BFD_FLAGS_FOR_BFD_USE_MASK \
 .  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
 .   | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
-.   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
+.   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON \
+.   | BFD_NO_SECTION_HEADER)
+.
+.  {* The format which belongs to the BFD. (object, core, etc.)  *}
+.  ENUM_BITFIELD (bfd_format) format : 3;
+.
+.  {* The direction with which the BFD was opened.  *}
+.  ENUM_BITFIELD (bfd_direction) direction : 2;
+.
+.  {* POSIX.1-2017 (IEEE Std 1003.1) says of fopen : "When a file is
+.     opened with update mode ('+' as the second or third character in
+.     the mode argument), both input and output may be performed on
+.     the associated stream.  However, the application shall ensure
+.     that output is not directly followed by input without an
+.     intervening call to fflush() or to a file positioning function
+.     (fseek(), fsetpos(), or rewind()), and input is not directly
+.     followed by output without an intervening call to a file
+.     positioning function, unless the input operation encounters
+.     end-of-file."
+.     This field tracks the last IO operation, so that bfd can insert
+.     a seek when IO direction changes.  *}
+.  ENUM_BITFIELD (bfd_last_io) last_io : 2;
 .
 .  {* Is the file descriptor being cached?  That is, can it be closed as
 .     needed, and re-opened when accessed later?  *}
@@ -245,13 +281,16 @@ CODE_FRAGMENT
 .  {* Set if this is a slim LTO object not loaded with a compiler plugin.  *}
 .  unsigned int lto_slim_object : 1;
 .
+.  {* Do not attempt to modify this file.  Set when detecting errors
+.     that BFD is not prepared to handle for objcopy/strip.  *}
+.  unsigned int read_only : 1;
+.
 .  {* Set to dummy BFD created when claimed by a compiler plug-in
 .     library.  *}
 .  bfd *plugin_dummy_bfd;
 .
-.  {* Currently my_archive is tested before adding origin to
-.     anything. I believe that this can become always an add of
-.     origin, with origin set to 0 for non archive files.  *}
+.  {* The offset of this bfd in the file, typically 0 if it is not
+.     contained in an archive.  *}
 .  ufile_ptr origin;
 .
 .  {* The origin in the archive of the proxy entry.  This will
@@ -273,17 +312,26 @@ CODE_FRAGMENT
 .  {* The number of sections.  *}
 .  unsigned int section_count;
 .
+.  {* The archive plugin file descriptor.  *}
+.  int archive_plugin_fd;
+.
+.  {* The number of opens on the archive plugin file descriptor.  *}
+.  unsigned int archive_plugin_fd_open_count;
+.
 .  {* A field used by _bfd_generic_link_add_archive_symbols.  This will
 .     be used only for archive elements.  *}
 .  int archive_pass;
 .
+.  {* The total size of memory from bfd_alloc.  *}
+.  bfd_size_type alloc_size;
+.
 .  {* Stuff only useful for object files:
 .     The start address.  *}
 .  bfd_vma start_address;
 .
 .  {* Symbol table for output BFD (with symcount entries).
 .     Also used by the linker to cache input BFD symbols.  *}
-.  struct bfd_symbol  **outsymbols;
+.  struct bfd_symbol **outsymbols;
 .
 .  {* Used for input and output.  *}
 .  unsigned int symcount;
@@ -294,6 +342,11 @@ CODE_FRAGMENT
 .  {* Pointer to structure which contains architecture information.  *}
 .  const struct bfd_arch_info *arch_info;
 .
+.  {* Cached length of file for bfd_get_size.  0 until bfd_get_size is
+.     called, 1 if stat returns an error or the file size is too large to
+.     return in ufile_ptr.  Both 0 and 1 should be treated as "unknown".  *}
+.  ufile_ptr size;
+.
 .  {* Stuff only useful for archives.  *}
 .  void *arelt_data;
 .  struct bfd *my_archive;      {* The containing archive BFD.  *}
@@ -324,8 +377,6 @@ CODE_FRAGMENT
 .      struct tekhex_data_struct *tekhex_data;
 .      struct elf_obj_tdata *elf_obj_data;
 .      struct mmo_data_struct *mmo_data;
-.      struct sun_core_struct *sun_core_data;
-.      struct sco5_core_struct *sco5_core_data;
 .      struct trad_core_struct *trad_core_data;
 .      struct som_data_struct *som_data;
 .      struct hpux_core_struct *hpux_core_data;
@@ -334,7 +385,6 @@ CODE_FRAGMENT
 .      struct lynx_core_struct *lynx_core_data;
 .      struct osf_core_struct *osf_core_data;
 .      struct cisco_core_struct *cisco_core_data;
-.      struct versados_data_struct *versados_data;
 .      struct netbsd_core_struct *netbsd_core_data;
 .      struct mach_o_data_struct *mach_o_data;
 .      struct mach_o_fat_data_struct *mach_o_fat_data;
@@ -358,13 +408,15 @@ CODE_FRAGMENT
 .  const struct bfd_build_id *build_id;
 .};
 .
+
+EXTERNAL
 .static inline const char *
 .bfd_get_filename (const bfd *abfd)
 .{
 .  return abfd->filename;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_get_cacheable (const bfd *abfd)
 .{
 .  return abfd->cacheable;
@@ -412,13 +464,13 @@ CODE_FRAGMENT
 .  return abfd->section_count;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_has_map (const bfd *abfd)
 .{
 .  return abfd->has_armap;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_is_thin_archive (const bfd *abfd)
 .{
 .  return abfd->is_thin_archive;
@@ -431,15 +483,15 @@ CODE_FRAGMENT
 .}
 .
 .{* See note beside bfd_set_section_userdata.  *}
-.static inline bfd_boolean
-.bfd_set_cacheable (bfd * abfd, bfd_boolean val)
+.static inline bool
+.bfd_set_cacheable (bfd * abfd, bool val)
 .{
 .  abfd->cacheable = val;
-.  return TRUE;
+.  return true;
 .}
 .
 .static inline void
-.bfd_set_thin_archive (bfd *abfd, bfd_boolean val)
+.bfd_set_thin_archive (bfd *abfd, bool val)
 .{
 .  abfd->is_thin_archive = val;
 .}
@@ -480,6 +532,8 @@ CODE_FRAGMENT
 .  sy->name = name;
 .}
 .
+.{* For input sections return the original size on disk of the
+.   section.  For output sections return the current size.  *}
 .static inline bfd_size_type
 .bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
 .{
@@ -496,6 +550,17 @@ CODE_FRAGMENT
 .	   / bfd_octets_per_byte (abfd, sec));
 .}
 .
+.{* For input sections return the larger of the current size and the
+.   original size on disk of the section.  For output sections return
+.   the current size.  *}
+.static inline bfd_size_type
+.bfd_get_section_alloc_size (const bfd *abfd, const asection *sec)
+.{
+.  if (abfd->direction != write_direction && sec->rawsize > sec->size)
+.    return sec->rawsize;
+.  return sec->size;
+.}
+.
 .{* Functions to handle insertion and deletion of a bfd's sections.  These
 .   only handle the list pointers, ie. do not adjust section_count,
 .   target_index etc.  *}
@@ -574,7 +639,7 @@ CODE_FRAGMENT
 .    abfd->sections = s;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_section_removed_from_list (const bfd *abfd, const asection *s)
 .{
 .  return s->next ? s->next->prev != s : abfd->section_last != s;
@@ -611,7 +676,7 @@ CODE_FRAGMENT
 
 /*
 INODE
-Error reporting, Miscellaneous, typedef bfd, BFD front end
+Error reporting, Initialization, typedef bfd, BFD front end
 
 SECTION
 	Error reporting
@@ -626,6 +691,8 @@ SECTION
 	The easiest way to report a BFD error to the user is to
 	use <<bfd_perror>>.
 
+	The BFD error is thread-local.
+
 SUBSECTION
 	Type <<bfd_error_type>>
 
@@ -633,7 +700,6 @@ SUBSECTION
 	enumerated type <<bfd_error_type>>.
 
 CODE_FRAGMENT
-.
 .typedef enum bfd_error
 .{
 .  bfd_error_no_error = 0,
@@ -664,9 +730,10 @@ CODE_FRAGMENT
 .
 */
 
-static bfd_error_type bfd_error = bfd_error_no_error;
-static bfd *input_bfd = NULL;
-static bfd_error_type input_error = bfd_error_no_error;
+static TLS bfd_error_type bfd_error;
+static TLS bfd_error_type input_error;
+static TLS bfd *input_bfd;
+static TLS char *_bfd_error_buf;
 
 const char *const bfd_errmsgs[] =
 {
@@ -754,6 +821,7 @@ bfd_set_input_error (bfd *input, bfd_err
   /* This is an error that occurred during bfd_close when writing an
      archive, but on one of the input files.  */
   bfd_error = bfd_error_on_input;
+  _bfd_clear_error_data ();
   input_bfd = input;
   input_error = error_tag;
   if (input_error >= bfd_error_on_input)
@@ -780,12 +848,11 @@ bfd_errmsg (bfd_error_type error_tag)
 #endif
   if (error_tag == bfd_error_on_input)
     {
-      char *buf;
       const char *msg = bfd_errmsg (input_error);
-
-      if (asprintf (&buf, _(bfd_errmsgs [error_tag]), input_bfd->filename, msg)
-	  != -1)
-	return buf;
+      char *ret = bfd_asprintf (_(bfd_errmsgs[error_tag]),
+				bfd_get_filename (input_bfd), msg);
+      if (ret)
+	return ret;
 
       /* Ick, what to do on out of memory?  */
       return msg;
@@ -797,7 +864,7 @@ bfd_errmsg (bfd_error_type error_tag)
   if (error_tag > bfd_error_invalid_error_code)
     error_tag = bfd_error_invalid_error_code;	/* sanity check */
 
-  return _(bfd_errmsgs [error_tag]);
+  return _(bfd_errmsgs[error_tag]);
 }
 
 /*
@@ -827,6 +894,58 @@ bfd_perror (const char *message)
 }
 
 /*
+INTERNAL_FUNCTION
+	_bfd_clear_error_data
+
+SYNOPSIS
+	void _bfd_clear_error_data (void);
+
+DESCRIPTION
+	Free any data associated with the BFD error.
+*/
+
+void
+_bfd_clear_error_data (void)
+{
+  free (_bfd_error_buf);
+  _bfd_error_buf = NULL;
+}
+
+/*
+INTERNAL_FUNCTION
+	bfd_asprintf
+
+SYNOPSIS
+	char *bfd_asprintf (const char *fmt, ...);
+
+DESCRIPTION
+	Primarily for error reporting, this function is like
+	libiberty's xasprintf except that it can return NULL on no
+	memory and the returned string should not be freed.  Uses a
+	thread-local malloc'd buffer managed by libbfd, _bfd_error_buf.
+	Be aware that a call to this function frees the result of any
+	previous call.  bfd_errmsg (bfd_error_on_input) also calls
+	this function.
+*/
+
+char *
+bfd_asprintf (const char *fmt, ...)
+{
+  free (_bfd_error_buf);
+  _bfd_error_buf = NULL;
+  va_list ap;
+  va_start (ap, fmt);
+  int count = vasprintf (&_bfd_error_buf, fmt, ap);
+  va_end (ap);
+  if (count == -1)
+    {
+      bfd_set_error (bfd_error_no_memory);
+      _bfd_error_buf = NULL;
+    }
+  return _bfd_error_buf;
+}
+
+/*
 SUBSECTION
 	BFD error handler
 
@@ -837,7 +956,6 @@ SUBSECTION
 	The BFD error handler acts like vprintf.
 
 CODE_FRAGMENT
-.
 .typedef void (*bfd_error_handler_type) (const char *, va_list);
 .
 */
@@ -868,6 +986,10 @@ union _bfd_doprnt_args
   } type;
 };
 
+/* Maximum number of _bfd_error_handler args.  Don't increase this
+   without changing the code handling positional parameters.  */
+#define MAX_ARGS 9
+
 /* This macro and _bfd_doprnt taken from libiberty _doprnt.c, tidied a
    little and extended to handle '%pA', '%pB' and positional parameters.  */
 
@@ -875,11 +997,14 @@ union _bfd_doprnt_args
   do								\
     {								\
       TYPE value = (TYPE) args[arg_no].FIELD;			\
-      result = fprintf (stream, specifier, value);		\
+      result = print (stream, specifier, value);		\
     } while (0)
 
+typedef int (*print_func) (void *, const char *, ...);
+
 static int
-_bfd_doprnt (FILE *stream, const char *format, union _bfd_doprnt_args *args)
+_bfd_doprnt (print_func print, void *stream, const char *format,
+	     union _bfd_doprnt_args *args)
 {
   const char *ptr = format;
   char specifier[128];
@@ -895,9 +1020,9 @@ _bfd_doprnt (FILE *stream, const char *f
 	  /* While we have regular characters, print them.  */
 	  char *end = strchr (ptr, '%');
 	  if (end != NULL)
-	    result = fprintf (stream, "%.*s", (int) (end - ptr), ptr);
+	    result = print (stream, "%.*s", (int) (end - ptr), ptr);
 	  else
-	    result = fprintf (stream, "%s", ptr);
+	    result = print (stream, "%s", ptr);
 	  ptr += result;
 	}
       else if (ptr[1] == '%')
@@ -1034,12 +1159,7 @@ _bfd_doprnt (FILE *stream, const char *f
 			*sptr++ = ptr[-1];
 			*sptr = '\0';
 #endif
-#if defined (__GNUC__) || defined (HAVE_LONG_LONG)
 			PRINT_TYPE (long long, ll);
-#else
-			/* Fake it and hope for the best.  */
-			PRINT_TYPE (long, l);
-#endif
 			break;
 		      }
 		  }
@@ -1054,14 +1174,7 @@ _bfd_doprnt (FILE *stream, const char *f
 		if (wide_width == 0)
 		  PRINT_TYPE (double, d);
 		else
-		  {
-#if defined (__GNUC__) || defined (HAVE_LONG_DOUBLE)
-		    PRINT_TYPE (long double, ld);
-#else
-		    /* Fake it and hope for the best.  */
-		    PRINT_TYPE (double, d);
-#endif
-		  }
+		  PRINT_TYPE (long double, ld);
 	      }
 	      break;
 	    case 's':
@@ -1093,9 +1206,9 @@ _bfd_doprnt (FILE *stream, const char *f
 								 sec)) != NULL)
 		    group = ci->name;
 		  if (group != NULL)
-		    result = fprintf (stream, "%s[%s]", sec->name, group);
+		    result = print (stream, "%s[%s]", sec->name, group);
 		  else
-		    result = fprintf (stream, "%s", sec->name);
+		    result = print (stream, "%s", sec->name);
 		}
 	      else if (*ptr == 'B')
 		{
@@ -1109,11 +1222,11 @@ _bfd_doprnt (FILE *stream, const char *f
 		    abort ();
 		  else if (abfd->my_archive
 			   && !bfd_is_thin_archive (abfd->my_archive))
-		    result = fprintf (stream, "%s(%s)",
-				      abfd->my_archive->filename,
-				      abfd->filename);
+		    result = print (stream, "%s(%s)",
+				    bfd_get_filename (abfd->my_archive),
+				    bfd_get_filename (abfd));
 		  else
-		    result = fprintf (stream, "%s", abfd->filename);
+		    result = print (stream, "%s", bfd_get_filename (abfd));
 		}
 	      else
 		PRINT_TYPE (void *, p);
@@ -1134,11 +1247,14 @@ _bfd_doprnt (FILE *stream, const char *f
 /* First pass over FORMAT to gather ARGS.  Returns number of args.  */
 
 static unsigned int
-_bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
+_bfd_doprnt_scan (const char *format, va_list ap, union _bfd_doprnt_args *args)
 {
   const char *ptr = format;
   unsigned int arg_count = 0;
 
+  for (unsigned int i = 0; i < MAX_ARGS; i++)
+    args[i].type = Bad;
+
   while (*ptr != '\0')
     {
       if (*ptr != '%')
@@ -1180,7 +1296,7 @@ _bfd_doprnt_scan (const char *format, un
 		  arg_index = *ptr - '1';
 		  ptr += 2;
 		}
-	      if (arg_index >= 9)
+	      if (arg_index >= MAX_ARGS)
 		abort ();
 	      args[arg_index].type = Int;
 	      arg_count++;
@@ -1205,7 +1321,7 @@ _bfd_doprnt_scan (const char *format, un
 		      arg_index = *ptr - '1';
 		      ptr += 2;
 		    }
-		  if (arg_index >= 9)
+		  if (arg_index >= MAX_ARGS)
 		    abort ();
 		  args[arg_index].type = Int;
 		  arg_count++;
@@ -1263,11 +1379,7 @@ _bfd_doprnt_scan (const char *format, un
 			break;
 		      case 2:
 		      default:
-#if defined (__GNUC__) || defined (HAVE_LONG_LONG)
 			arg_type = LongLong;
-#else
-			arg_type = Long;
-#endif
 			break;
 		      }
 		  }
@@ -1282,13 +1394,7 @@ _bfd_doprnt_scan (const char *format, un
 		if (wide_width == 0)
 		  arg_type = Double;
 		else
-		  {
-#if defined (__GNUC__) || defined (HAVE_LONG_DOUBLE)
-		    arg_type = LongDouble;
-#else
-		    arg_type = Double;
-#endif
-		  }
+		  arg_type = LongDouble;
 	      }
 	      break;
 	    case 's':
@@ -1303,27 +1409,14 @@ _bfd_doprnt_scan (const char *format, un
 	      abort();
 	    }
 
-	  if (arg_no >= 9)
+	  if (arg_no >= MAX_ARGS)
 	    abort ();
 	  args[arg_no].type = arg_type;
 	  arg_count++;
 	}
     }
 
-  return arg_count;
-}
-
-static void
-error_handler_internal (const char *fmt, va_list ap)
-{
-  unsigned int i, arg_count;
-  union _bfd_doprnt_args args[9];
-
-  for (i = 0; i < sizeof (args) / sizeof (args[0]); i++)
-    args[i].type = Bad;
-
-  arg_count = _bfd_doprnt_scan (fmt, args);
-  for (i = 0; i < arg_count; i++)
+  for (unsigned int i = 0; i < arg_count; i++)
     {
       switch (args[i].type)
 	{
@@ -1350,15 +1443,24 @@ error_handler_internal (const char *fmt,
 	}
     }
 
+  return arg_count;
+}
+
+/* The standard error handler that prints to stderr.  */
+
+static void
+error_handler_fprintf (const char *fmt, va_list ap)
+{
+  union _bfd_doprnt_args args[MAX_ARGS];
+
+  _bfd_doprnt_scan (fmt, ap, args);
+
   /* PR 4992: Don't interrupt output being sent to stdout.  */
   fflush (stdout);
 
-  if (_bfd_error_program_name != NULL)
-    fprintf (stderr, "%s: ", _bfd_error_program_name);
-  else
-    fprintf (stderr, "BFD: ");
+  fprintf (stderr, "%s: ", _bfd_get_error_program_name ());
 
-  _bfd_doprnt (stderr, fmt, args);
+  _bfd_doprnt ((print_func) fprintf, stderr, fmt, args);
 
   /* On AIX, putc is implemented as a macro that triggers a -Wunused-value
      warning, so use the fputc function to avoid it.  */
@@ -1366,13 +1468,77 @@ error_handler_internal (const char *fmt,
   fflush (stderr);
 }
 
+/* Control printing to a string buffer.  */
+struct buf_stream
+{
+  char *ptr;
+  int left;
+};
+
+/* An fprintf like function that instead prints to a string buffer.  */
+
+static int
+err_sprintf (void *stream, const char *fmt, ...)
+{
+  struct buf_stream *s = stream;
+  va_list ap;
+
+  va_start (ap, fmt);
+  int total = vsnprintf (s->ptr, s->left, fmt, ap);
+  va_end (ap);
+  if (total < 0)
+    ;
+  else if (total > s->left)
+    {
+      s->ptr += s->left;
+      s->left = 0;
+    }
+  else
+    {
+      s->ptr += total;
+      s->left -= total;
+    }
+  return total;
+}
+
+/* Communicate the bfd processed by bfd_check_format_matches to the
+   error handling function error_handler_sprintf.  */
+
+static bfd *error_handler_bfd;
+
+/* An error handler that prints to a string, then dups that string to
+   a per-xvec cache.  */
+
+static void
+error_handler_sprintf (const char *fmt, va_list ap)
+{
+  union _bfd_doprnt_args args[MAX_ARGS];
+  char error_buf[1024];
+  struct buf_stream error_stream;
+
+  _bfd_doprnt_scan (fmt, ap, args);
+
+  error_stream.ptr = error_buf;
+  error_stream.left = sizeof (error_buf);
+  _bfd_doprnt (err_sprintf, &error_stream, fmt, args);
+
+  size_t len = error_stream.ptr - error_buf;
+  struct per_xvec_message **warn
+    = _bfd_per_xvec_warn (error_handler_bfd->xvec, len + 1);
+  if (*warn)
+    {
+      memcpy ((*warn)->message, error_buf, len);
+      (*warn)->message[len] = 0;
+    }
+}
+
 /* This is a function pointer to the routine which should handle BFD
    error messages.  It is called when a BFD routine encounters an
    error for which it wants to print a message.  Going through a
    function pointer permits a program linked against BFD to intercept
    the messages and deal with them itself.  */
 
-static bfd_error_handler_type _bfd_error_internal = error_handler_internal;
+static bfd_error_handler_type _bfd_error_internal = error_handler_fprintf;
 
 /*
 FUNCTION
@@ -1427,6 +1593,25 @@ bfd_set_error_handler (bfd_error_handler
 }
 
 /*
+INTERNAL_FUNCTION
+	_bfd_set_error_handler_caching
+
+SYNOPSIS
+	bfd_error_handler_type _bfd_set_error_handler_caching (bfd *);
+
+DESCRIPTION
+	Set the BFD error handler function to one that stores messages
+	to the per_xvec_warn array.  Returns the previous function.
+*/
+
+bfd_error_handler_type
+_bfd_set_error_handler_caching (bfd *abfd)
+{
+  error_handler_bfd = abfd;
+  return bfd_set_error_handler (error_handler_sprintf);
+}
+
+/*
 FUNCTION
 	bfd_set_error_program_name
 
@@ -1447,6 +1632,25 @@ bfd_set_error_program_name (const char *
 }
 
 /*
+INTERNAL_FUNCTION
+	_bfd_get_error_program_name
+
+SYNOPSIS
+	const char *_bfd_get_error_program_name (void);
+
+DESCRIPTION
+	Get the program name used when printing a BFD error.
+*/
+
+const char *
+_bfd_get_error_program_name (void)
+{
+  if (_bfd_error_program_name != NULL)
+    return _bfd_error_program_name;
+  return "BFD";
+}
+
+/*
 SUBSECTION
 	BFD assert handler
 
@@ -1459,7 +1663,6 @@ SUBSECTION
 	_bfd_error_handler and continues.
 
 CODE_FRAGMENT
-.
 .typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
 .					  const char *bfd_version,
 .					  const char *bfd_file,
@@ -1510,10 +1713,172 @@ bfd_set_assert_handler (bfd_assert_handl
   _bfd_assert_handler = pnew;
   return pold;
 }
+
+/*
+INODE
+Initialization, Threading, Error reporting, BFD front end
+
+FUNCTION
+	bfd_init
+
+SYNOPSIS
+	unsigned int bfd_init (void);
+
+DESCRIPTION
+	This routine must be called before any other BFD function to
+	initialize magical internal data structures.
+	Returns a magic number, which may be used to check
+	that the bfd library is configured as expected by users.
+
+.{* Value returned by bfd_init.  *}
+.#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
+.
+*/
+
+unsigned int
+bfd_init (void)
+{
+  bfd_error = bfd_error_no_error;
+  input_bfd = NULL;
+  _bfd_clear_error_data ();
+  input_error = bfd_error_no_error;
+  _bfd_error_program_name = NULL;
+  _bfd_error_internal = error_handler_fprintf;
+  _bfd_assert_handler = _bfd_default_assert_handler;
+
+  return BFD_INIT_MAGIC;
+}
 
+
 /*
 INODE
-Miscellaneous, Memory Usage, Error reporting, BFD front end
+Threading, Miscellaneous, Initialization, BFD front end
+
+SECTION
+	Threading
+
+	BFD has limited support for thread-safety.  Most BFD globals
+	are protected by locks, while the error-related globals are
+	thread-local.  A given BFD cannot safely be used from two
+	threads at the same time; it is up to the application to do
+	any needed locking.  However, it is ok for different threads
+	to work on different BFD objects at the same time.
+
+SUBSECTION
+	Thread functions.
+
+CODE_FRAGMENT
+.typedef bool (*bfd_lock_unlock_fn_type) (void *);
+*/
+
+/* The lock and unlock functions, if set.  */
+static bfd_lock_unlock_fn_type lock_fn;
+static bfd_lock_unlock_fn_type unlock_fn;
+static void *lock_data;
+
+/*
+FUNCTION
+	bfd_thread_init
+
+SYNOPSIS
+	bool bfd_thread_init
+	  (bfd_lock_unlock_fn_type lock,
+	  bfd_lock_unlock_fn_type unlock,
+	  void *data);
+
+DESCRIPTION
+
+	Initialize BFD threading.  The functions passed in will be
+	used to lock and unlock global data structures.  This may only
+	be called a single time in a given process.  Returns true on
+	success and false on error.  DATA is passed verbatim to the
+	lock and unlock functions.  The lock and unlock functions
+	should return true on success, or set the BFD error and return
+	false on failure.
+*/
+
+bool
+bfd_thread_init (bfd_lock_unlock_fn_type lock, bfd_lock_unlock_fn_type unlock,
+		 void *data)
+{
+  /* Both functions must be set, and this cannot have been called
+     before.  */
+  if (lock == NULL || unlock == NULL || unlock_fn != NULL)
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return false;
+    }
+
+  lock_fn = lock;
+  unlock_fn = unlock;
+  lock_data = data;
+  return true;
+}
+
+/*
+FUNCTION
+	bfd_thread_cleanup
+
+SYNOPSIS
+	void bfd_thread_cleanup (void);
+
+DESCRIPTION
+	Clean up any thread-local state.  This should be called by a
+	thread that uses any BFD functions, before the thread exits.
+	It is fine to call this multiple times, or to call it and then
+	later call BFD functions on the same thread again.
+*/
+
+void
+bfd_thread_cleanup (void)
+{
+  _bfd_clear_error_data ();
+}
+
+/*
+INTERNAL_FUNCTION
+	bfd_lock
+
+SYNOPSIS
+	bool bfd_lock (void);
+
+DESCRIPTION
+	Acquire the global BFD lock, if needed.  Returns true on
+	success, false on error.
+*/
+
+bool
+bfd_lock (void)
+{
+  if (lock_fn != NULL)
+    return lock_fn (lock_data);
+  return true;
+}
+
+/*
+INTERNAL_FUNCTION
+	bfd_unlock
+
+SYNOPSIS
+	bool bfd_unlock (void);
+
+DESCRIPTION
+	Release the global BFD lock, if needed.  Returns true on
+	success, false on error.
+*/
+
+bool
+bfd_unlock (void)
+{
+  if (unlock_fn != NULL)
+    return unlock_fn (lock_data);
+  return true;
+}
+
+
+/*
+INODE
+Miscellaneous, Memory Usage, Threading, BFD front end
 
 SECTION
 	Miscellaneous
@@ -1607,7 +1972,7 @@ FUNCTION
 	bfd_set_file_flags
 
 SYNOPSIS
-	bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
+	bool bfd_set_file_flags (bfd *abfd, flagword flags);
 
 DESCRIPTION
 	Set the flag word in the BFD @var{abfd} to the value @var{flags}.
@@ -1622,29 +1987,29 @@ DESCRIPTION
 
 */
 
-bfd_boolean
+bool
 bfd_set_file_flags (bfd *abfd, flagword flags)
 {
   if (abfd->format != bfd_object)
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   if (bfd_read_p (abfd))
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   abfd->flags = flags;
   if ((flags & bfd_applicable_file_flags (abfd)) != flags)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 void
@@ -1689,7 +2054,6 @@ DESCRIPTION
 	header.  Use bfd_arch_bits_per_address for number of bits in
 	the architecture address.
 
-RETURNS
 	Returns the arch size in bits if known, <<-1>> otherwise.
 */
 
@@ -1717,7 +2081,6 @@ DESCRIPTION
 	return an address sign extended to fill a bfd_vma when this is
 	the case.
 
-RETURNS
 	Returns <<1>> if the target architecture is known to sign
 	extend addresses, <<0>> if the target architecture is known to
 	not sign extend addresses, and <<-1>> otherwise.
@@ -1738,18 +2101,22 @@ bfd_get_sign_extend_vma (bfd *abfd)
      no place to store this information in the COFF back end.
      Should enough other COFF targets add support for DWARF2,
      a place will have to be found.  Until then, this hack will do.  */
-  if (CONST_STRNEQ (name, "coff-go32")
+  if (startswith (name, "coff-go32")
       || strcmp (name, "pe-i386") == 0
       || strcmp (name, "pei-i386") == 0
       || strcmp (name, "pe-x86-64") == 0
       || strcmp (name, "pei-x86-64") == 0
+      || strcmp (name, "pe-aarch64-little") == 0
+      || strcmp (name, "pei-aarch64-little") == 0
       || strcmp (name, "pe-arm-wince-little") == 0
       || strcmp (name, "pei-arm-wince-little") == 0
+      || strcmp (name, "pei-loongarch64") == 0
+      || strcmp (name, "pei-riscv64-little") == 0
       || strcmp (name, "aixcoff-rs6000") == 0
       || strcmp (name, "aix5coff64-rs6000") == 0)
     return 1;
 
-  if (CONST_STRNEQ (name, "mach-o"))
+  if (startswith (name, "mach-o"))
     return 0;
 
   bfd_set_error (bfd_error_wrong_format);
@@ -1761,20 +2128,19 @@ FUNCTION
 	bfd_set_start_address
 
 SYNOPSIS
-	bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
+	bool bfd_set_start_address (bfd *abfd, bfd_vma vma);
 
 DESCRIPTION
 	Make @var{vma} the entry point of output BFD @var{abfd}.
 
-RETURNS
 	Returns <<TRUE>> on success, <<FALSE>> otherwise.
 */
 
-bfd_boolean
+bool
 bfd_set_start_address (bfd *abfd, bfd_vma vma)
 {
   abfd->start_address = vma;
-  return TRUE;
+  return true;
 }
 
 /*
@@ -1867,94 +2233,45 @@ _bfd_set_gp_value (bfd *abfd, bfd_vma v)
 
 /*
 FUNCTION
+	bfd_set_gp_value
+
+SYNOPSIS
+	void bfd_set_gp_value (bfd *abfd, bfd_vma v);
+
+DESCRIPTION
+	Allow external access to the fucntion to set the GP value.
+	This is specifically added for gdb-compile support.
+*/
+
+void
+bfd_set_gp_value (bfd *abfd, bfd_vma v)
+{
+  _bfd_set_gp_value (abfd, v);
+}
+
+/*
+FUNCTION
 	bfd_scan_vma
 
 SYNOPSIS
 	bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
 
 DESCRIPTION
-	Convert, like <<strtoul>>, a numerical expression
-	@var{string} into a <<bfd_vma>> integer, and return that integer.
-	(Though without as many bells and whistles as <<strtoul>>.)
-	The expression is assumed to be unsigned (i.e., positive).
-	If given a @var{base}, it is used as the base for conversion.
-	A base of 0 causes the function to interpret the string
-	in hex if a leading "0x" or "0X" is found, otherwise
-	in octal if a leading zero is found, otherwise in decimal.
-
-	If the value would overflow, the maximum <<bfd_vma>> value is
-	returned.
+	Convert, like <<strtoul>> or <<stdtoull> depending on the size
+	of a <<bfd_vma>>, a numerical expression @var{string} into a
+	<<bfd_vma>> integer, and return that integer.
 */
 
 bfd_vma
 bfd_scan_vma (const char *string, const char **end, int base)
 {
-  bfd_vma value;
-  bfd_vma cutoff;
-  unsigned int cutlim;
-  int overflow;
-
-  /* Let the host do it if possible.  */
   if (sizeof (bfd_vma) <= sizeof (unsigned long))
     return strtoul (string, (char **) end, base);
 
-#if defined (HAVE_STRTOULL) && defined (HAVE_LONG_LONG)
   if (sizeof (bfd_vma) <= sizeof (unsigned long long))
     return strtoull (string, (char **) end, base);
-#endif
-
-  if (base == 0)
-    {
-      if (string[0] == '0')
-	{
-	  if ((string[1] == 'x') || (string[1] == 'X'))
-	    base = 16;
-	  else
-	    base = 8;
-	}
-    }
-
-  if ((base < 2) || (base > 36))
-    base = 10;
-
-  if (base == 16
-      && string[0] == '0'
-      && (string[1] == 'x' || string[1] == 'X')
-      && ISXDIGIT (string[2]))
-    {
-      string += 2;
-    }
-
-  cutoff = (~ (bfd_vma) 0) / (bfd_vma) base;
-  cutlim = (~ (bfd_vma) 0) % (bfd_vma) base;
-  value = 0;
-  overflow = 0;
-  while (1)
-    {
-      unsigned int digit;
-
-      digit = *string;
-      if (ISDIGIT (digit))
-	digit = digit - '0';
-      else if (ISALPHA (digit))
-	digit = TOUPPER (digit) - 'A' + 10;
-      else
-	break;
-      if (digit >= (unsigned int) base)
-	break;
-      if (value > cutoff || (value == cutoff && digit > cutlim))
-	overflow = 1;
-      value = value * base + digit;
-      ++string;
-    }
-
-  if (overflow)
-    value = ~ (bfd_vma) 0;
 
-  if (end != NULL)
-    *end = string;
-
-  return value;
+  abort ();
 }
 
 /*
@@ -1962,7 +2279,7 @@ FUNCTION
 	bfd_copy_private_header_data
 
 SYNOPSIS
-	bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
+	bool bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
 
 DESCRIPTION
 	Copy private BFD header information from the BFD @var{ibfd} to the
@@ -1985,7 +2302,7 @@ FUNCTION
 	bfd_copy_private_bfd_data
 
 SYNOPSIS
-	bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
+	bool bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
 
 DESCRIPTION
 	Copy private BFD information from the BFD @var{ibfd} to the
@@ -2006,7 +2323,7 @@ FUNCTION
 	bfd_set_private_flags
 
 SYNOPSIS
-	bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
+	bool bfd_set_private_flags (bfd *abfd, flagword flags);
 
 DESCRIPTION
 	Set private BFD flag information in the BFD @var{abfd}.
@@ -2035,6 +2352,11 @@ DESCRIPTION
 .	BFD_SEND (abfd, _bfd_find_nearest_line, \
 .		  (abfd, syms, sec, off, file, func, line, NULL))
 .
+.#define bfd_find_nearest_line_with_alt(abfd, alt_filename, sec, syms, off, \
+.					file, func, line, disc) \
+.	BFD_SEND (abfd, _bfd_find_nearest_line_with_alt, \
+.		  (abfd, alt_filename, syms, sec, off, file, func, line, disc))
+.
 .#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
 .					    line, disc) \
 .	BFD_SEND (abfd, _bfd_find_nearest_line, \
@@ -2058,7 +2380,8 @@ DESCRIPTION
 .	BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
 .
 .#define bfd_stat_arch_elt(abfd, stat) \
-.	BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
+.	BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \
+.		  _bfd_stat_arch_elt, (abfd, stat))
 .
 .#define bfd_update_armap_timestamp(abfd) \
 .	BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
@@ -2121,11 +2444,21 @@ DESCRIPTION
 .#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
 .	BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
 .
-.extern bfd_byte *bfd_get_relocated_section_contents
-.  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
-.   bfd_boolean, asymbol **);
-.
+*/
+
+/*
+FUNCTION
+	bfd_get_relocated_section_contents
 
+SYNOPSIS
+	bfd_byte *bfd_get_relocated_section_contents
+	  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
+	   bool, asymbol **);
+
+DESCRIPTION
+	Read and relocate the indirect link_order section, into DATA
+	(if non-NULL) or to a malloc'd buffer.  Return the buffer, or
+	NULL on errors.
 */
 
 bfd_byte *
@@ -2133,12 +2466,12 @@ bfd_get_relocated_section_contents (bfd
 				    struct bfd_link_info *link_info,
 				    struct bfd_link_order *link_order,
 				    bfd_byte *data,
-				    bfd_boolean relocatable,
+				    bool relocatable,
 				    asymbol **symbols)
 {
   bfd *abfd2;
   bfd_byte *(*fn) (bfd *, struct bfd_link_info *, struct bfd_link_order *,
-		   bfd_byte *, bfd_boolean, asymbol **);
+		   bfd_byte *, bool, asymbol **);
 
   if (link_order->type == bfd_indirect_link_order)
     {
@@ -2154,35 +2487,47 @@ bfd_get_relocated_section_contents (bfd
   return (*fn) (abfd, link_info, link_order, data, relocatable, symbols);
 }
 
-/* Record information about an ELF program header.  */
+/*
+FUNCTION
+	bfd_record_phdr
+
+SYNOPSIS
+	bool bfd_record_phdr
+	  (bfd *, unsigned long, bool, flagword, bool, bfd_vma,
+	   bool, bool, unsigned int, struct bfd_section **);
+
+DESCRIPTION
+	Record information about an ELF program header.
+*/
 
-bfd_boolean
+bool
 bfd_record_phdr (bfd *abfd,
 		 unsigned long type,
-		 bfd_boolean flags_valid,
+		 bool flags_valid,
 		 flagword flags,
-		 bfd_boolean at_valid,
-		 bfd_vma at,
-		 bfd_boolean includes_filehdr,
-		 bfd_boolean includes_phdrs,
+		 bool at_valid,
+		 bfd_vma at,  /* Bytes.  */
+		 bool includes_filehdr,
+		 bool includes_phdrs,
 		 unsigned int count,
 		 asection **secs)
 {
   struct elf_segment_map *m, **pm;
-  bfd_size_type amt;
+  size_t amt;
+  unsigned int opb = bfd_octets_per_byte (abfd, NULL);
 
   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   amt = sizeof (struct elf_segment_map);
   amt += ((bfd_size_type) count - 1) * sizeof (asection *);
   m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
   if (m == NULL)
-    return FALSE;
+    return false;
 
   m->p_type = type;
   m->p_flags = flags;
-  m->p_paddr = at;
+  m->p_paddr = at * opb;
   m->p_flags_valid = flags_valid;
   m->p_paddr_valid = at_valid;
   m->includes_filehdr = includes_filehdr;
@@ -2195,13 +2540,13 @@ bfd_record_phdr (bfd *abfd,
     ;
   *pm = m;
 
-  return TRUE;
+  return true;
 }
 
 #ifdef BFD64
 /* Return true iff this target is 32-bit.  */
 
-static bfd_boolean
+static bool
 is32bit (bfd *abfd)
 {
   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
@@ -2215,33 +2560,48 @@ is32bit (bfd *abfd)
 }
 #endif
 
-/* bfd_sprintf_vma and bfd_fprintf_vma display an address in the
-   target's address size.  */
+/*
+FUNCTION
+	bfd_sprintf_vma
+	bfd_fprintf_vma
+
+SYNOPSIS
+	void bfd_sprintf_vma (bfd *, char *, bfd_vma);
+	void bfd_fprintf_vma (bfd *, void *, bfd_vma);
+
+DESCRIPTION
+	bfd_sprintf_vma and bfd_fprintf_vma display an address in the
+	target's address size.
+
+EXTERNAL
+.#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd, stdout, x)
+.
+*/
 
 void
 bfd_sprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, char *buf, bfd_vma value)
 {
 #ifdef BFD64
-  if (is32bit (abfd))
+  if (!is32bit (abfd))
     {
-      sprintf (buf, "%08lx", (unsigned long) value & 0xffffffff);
+      sprintf (buf, "%016" PRIx64, (uint64_t) value);
       return;
     }
 #endif
-  sprintf_vma (buf, value);
+  sprintf (buf, "%08lx", (unsigned long) value & 0xffffffff);
 }
 
 void
 bfd_fprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, void *stream, bfd_vma value)
 {
 #ifdef BFD64
-  if (is32bit (abfd))
+  if (!is32bit (abfd))
     {
-      fprintf ((FILE *) stream, "%08lx", (unsigned long) value & 0xffffffff);
+      fprintf ((FILE *) stream, "%016" PRIx64, (uint64_t) value);
       return;
     }
 #endif
-  fprintf_vma ((FILE *) stream, value);
+  fprintf ((FILE *) stream, "%08lx", (unsigned long) value & 0xffffffff);
 }
 
 /*
@@ -2249,7 +2609,7 @@ FUNCTION
 	bfd_alt_mach_code
 
 SYNOPSIS
-	bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
+	bool bfd_alt_mach_code (bfd *abfd, int alternative);
 
 DESCRIPTION
 
@@ -2260,7 +2620,7 @@ DESCRIPTION
 	machine codes.
 */
 
-bfd_boolean
+bool
 bfd_alt_mach_code (bfd *abfd, int alternative)
 {
   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
@@ -2276,25 +2636,25 @@ bfd_alt_mach_code (bfd *abfd, int altern
 	case 1:
 	  code = get_elf_backend_data (abfd)->elf_machine_alt1;
 	  if (code == 0)
-	    return FALSE;
+	    return false;
 	  break;
 
 	case 2:
 	  code = get_elf_backend_data (abfd)->elf_machine_alt2;
 	  if (code == 0)
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
-	  return FALSE;
+	  return false;
 	}
 
       elf_elfheader (abfd)->e_machine = code;
 
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /*
@@ -2307,9 +2667,6 @@ SYNOPSIS
 DESCRIPTION
 	Returns the maximum page size, in bytes, as determined by
 	emulation.
-
-RETURNS
-	Returns the maximum page size in bytes for ELF, 0 otherwise.
 */
 
 bfd_vma
@@ -2325,66 +2682,20 @@ bfd_emul_get_maxpagesize (const char *em
   return 0;
 }
 
-static void
-bfd_elf_set_pagesize (const bfd_target *target, bfd_vma size,
-		      int offset, const bfd_target *orig_target)
-{
-  if (target->flavour == bfd_target_elf_flavour)
-    {
-      const struct elf_backend_data *bed;
-
-      bed = xvec_get_elf_backend_data (target);
-      *((bfd_vma *) ((char *) bed + offset)) = size;
-    }
-
-  if (target->alternative_target
-      && target->alternative_target != orig_target)
-    bfd_elf_set_pagesize (target->alternative_target, size, offset,
-			  orig_target);
-}
-
-/*
-FUNCTION
-	bfd_emul_set_maxpagesize
-
-SYNOPSIS
-	void bfd_emul_set_maxpagesize (const char *, bfd_vma);
-
-DESCRIPTION
-	For ELF, set the maximum page size for the emulation.  It is
-	a no-op for other formats.
-
-*/
-
-void
-bfd_emul_set_maxpagesize (const char *emul, bfd_vma size)
-{
-  const bfd_target *target;
-
-  target = bfd_find_target (emul, NULL);
-  if (target)
-    bfd_elf_set_pagesize (target, size,
-			  offsetof (struct elf_backend_data,
-				    maxpagesize), target);
-}
-
 /*
 FUNCTION
 	bfd_emul_get_commonpagesize
 
 SYNOPSIS
-	bfd_vma bfd_emul_get_commonpagesize (const char *, bfd_boolean);
+	bfd_vma bfd_emul_get_commonpagesize (const char *);
 
 DESCRIPTION
 	Returns the common page size, in bytes, as determined by
 	emulation.
-
-RETURNS
-	Returns the common page size in bytes for ELF, 0 otherwise.
 */
 
 bfd_vma
-bfd_emul_get_commonpagesize (const char *emul, bfd_boolean relro)
+bfd_emul_get_commonpagesize (const char *emul)
 {
   const bfd_target *target;
 
@@ -2395,41 +2706,13 @@ bfd_emul_get_commonpagesize (const char
       const struct elf_backend_data *bed;
 
       bed = xvec_get_elf_backend_data (target);
-      if (relro)
-	return bed->relropagesize;
-      else
-	return bed->commonpagesize;
+      return bed->commonpagesize;
     }
   return 0;
 }
 
 /*
 FUNCTION
-	bfd_emul_set_commonpagesize
-
-SYNOPSIS
-	void bfd_emul_set_commonpagesize (const char *, bfd_vma);
-
-DESCRIPTION
-	For ELF, set the common page size for the emulation.  It is
-	a no-op for other formats.
-
-*/
-
-void
-bfd_emul_set_commonpagesize (const char *emul, bfd_vma size)
-{
-  const bfd_target *target;
-
-  target = bfd_find_target (emul, NULL);
-  if (target)
-    bfd_elf_set_pagesize (target, size,
-			  offsetof (struct elf_backend_data,
-				    commonpagesize), target);
-}
-
-/*
-FUNCTION
 	bfd_demangle
 
 SYNOPSIS
@@ -2449,7 +2732,7 @@ bfd_demangle (bfd *abfd, const char *nam
   char *res, *alloc;
   const char *pre, *suf;
   size_t pre_len;
-  bfd_boolean skip_lead;
+  bool skip_lead;
 
   skip_lead = (abfd != NULL
 	       && *name != '\0'
@@ -2481,8 +2764,7 @@ bfd_demangle (bfd *abfd, const char *nam
 
   res = cplus_demangle (name, options);
 
-  if (alloc != NULL)
-    free (alloc);
+  free (alloc);
 
   if (res == NULL)
     {
@@ -2523,334 +2805,13 @@ bfd_demangle (bfd *abfd, const char *nam
   return res;
 }
 
-/*
-FUNCTION
-	bfd_update_compression_header
-
-SYNOPSIS
-	void bfd_update_compression_header
-	  (bfd *abfd, bfd_byte *contents, asection *sec);
-
-DESCRIPTION
-	Set the compression header at CONTENTS of SEC in ABFD and update
-	elf_section_flags for compression.
-*/
-
-void
-bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
-			       asection *sec)
-{
-  if ((abfd->flags & BFD_COMPRESS) != 0)
-    {
-      if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
-	{
-	  if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
-	    {
-	      const struct elf_backend_data *bed
-		= get_elf_backend_data (abfd);
-
-	      /* Set the SHF_COMPRESSED bit.  */
-	      elf_section_flags (sec) |= SHF_COMPRESSED;
-
-	      if (bed->s->elfclass == ELFCLASS32)
-		{
-		  Elf32_External_Chdr *echdr
-		    = (Elf32_External_Chdr *) contents;
-		  bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
-		  bfd_put_32 (abfd, sec->size, &echdr->ch_size);
-		  bfd_put_32 (abfd, 1 << sec->alignment_power,
-			      &echdr->ch_addralign);
-		  /* bfd_log2 (alignof (Elf32_Chdr)) */
-		  bfd_set_section_alignment (sec, 2);
-		}
-	      else
-		{
-		  Elf64_External_Chdr *echdr
-		    = (Elf64_External_Chdr *) contents;
-		  bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
-		  bfd_put_32 (abfd, 0, &echdr->ch_reserved);
-		  bfd_put_64 (abfd, sec->size, &echdr->ch_size);
-		  bfd_put_64 (abfd, 1 << sec->alignment_power,
-			      &echdr->ch_addralign);
-		  /* bfd_log2 (alignof (Elf64_Chdr)) */
-		  bfd_set_section_alignment (sec, 3);
-		}
-	    }
-	  else
-	    {
-	      /* Clear the SHF_COMPRESSED bit.  */
-	      elf_section_flags (sec) &= ~SHF_COMPRESSED;
-
-	      /* Write the zlib header.  It should be "ZLIB" followed by
-		 the uncompressed section size, 8 bytes in big-endian
-		 order.  */
-	      memcpy (contents, "ZLIB", 4);
-	      bfd_putb64 (sec->size, contents + 4);
-	      /* No way to keep the original alignment, just use 1 always. */
-	      bfd_set_section_alignment (sec, 0);
-	    }
-	}
-    }
-  else
-    abort ();
-}
-
-/*
-   FUNCTION
-   bfd_check_compression_header
-
-   SYNOPSIS
-	bfd_boolean bfd_check_compression_header
-	  (bfd *abfd, bfd_byte *contents, asection *sec,
-	  bfd_size_type *uncompressed_size,
-	  unsigned int *uncompressed_alignment_power);
-
-DESCRIPTION
-	Check the compression header at CONTENTS of SEC in ABFD and
-	store the uncompressed size in UNCOMPRESSED_SIZE and the
-	uncompressed data alignment in UNCOMPRESSED_ALIGNMENT_POWER
-	if the compression header is valid.
-
-RETURNS
-	Return TRUE if the compression header is valid.
-*/
-
-bfd_boolean
-bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
-			      asection *sec,
-			      bfd_size_type *uncompressed_size,
-			      unsigned int *uncompressed_alignment_power)
-{
-  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
-      && (elf_section_flags (sec) & SHF_COMPRESSED) != 0)
-    {
-      Elf_Internal_Chdr chdr;
-      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
-      if (bed->s->elfclass == ELFCLASS32)
-	{
-	  Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
-	  chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
-	  chdr.ch_size = bfd_get_32 (abfd, &echdr->ch_size);
-	  chdr.ch_addralign = bfd_get_32 (abfd, &echdr->ch_addralign);
-	}
-      else
-	{
-	  Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
-	  chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
-	  chdr.ch_size = bfd_get_64 (abfd, &echdr->ch_size);
-	  chdr.ch_addralign = bfd_get_64 (abfd, &echdr->ch_addralign);
-	}
-      if (chdr.ch_type == ELFCOMPRESS_ZLIB
-	  && chdr.ch_addralign == (chdr.ch_addralign & -chdr.ch_addralign))
-	{
-	  *uncompressed_size = chdr.ch_size;
-	  *uncompressed_alignment_power = bfd_log2 (chdr.ch_addralign);
-	  return TRUE;
-	}
-    }
-
-  return FALSE;
-}
-
-/*
-FUNCTION
-	bfd_get_compression_header_size
-
-SYNOPSIS
-	int bfd_get_compression_header_size (bfd *abfd, asection *sec);
-
-DESCRIPTION
-	Return the size of the compression header of SEC in ABFD.
-
-RETURNS
-	Return the size of the compression header in bytes.
-*/
-
-int
-bfd_get_compression_header_size (bfd *abfd, asection *sec)
-{
-  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
-    {
-      if (sec == NULL)
-	{
-	  if (!(abfd->flags & BFD_COMPRESS_GABI))
-	    return 0;
-	}
-      else if (!(elf_section_flags (sec) & SHF_COMPRESSED))
-	return 0;
-
-      if (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS32)
-	return sizeof (Elf32_External_Chdr);
-      else
-	return sizeof (Elf64_External_Chdr);
-    }
-
-  return 0;
-}
-
-/*
-FUNCTION
-	bfd_convert_section_size
-
-SYNOPSIS
-	bfd_size_type bfd_convert_section_size
-	  (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
+/* Get the linker information.  */
 
-DESCRIPTION
-	Convert the size @var{size} of the section @var{isec} in input
-	BFD @var{ibfd} to the section size in output BFD @var{obfd}.
-*/
-
-bfd_size_type
-bfd_convert_section_size (bfd *ibfd, sec_ptr isec, bfd *obfd,
-			  bfd_size_type size)
+struct bfd_link_info *
+_bfd_get_link_info (bfd *abfd)
 {
-  bfd_size_type hdr_size;
-
-  /* Do nothing if either input or output aren't ELF.  */
-  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return size;
-
-  /* Do nothing if ELF classes of input and output are the same. */
-  if (get_elf_backend_data (ibfd)->s->elfclass
-      == get_elf_backend_data (obfd)->s->elfclass)
-    return size;
-
-  /* Convert GNU property size.  */
-  if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
-    return _bfd_elf_convert_gnu_property_size (ibfd, obfd);
-
-  /* Do nothing if input file will be decompressed.  */
-  if ((ibfd->flags & BFD_DECOMPRESS))
-    return size;
-
-  /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
-  hdr_size = bfd_get_compression_header_size (ibfd, isec);
-  if (hdr_size == 0)
-    return size;
-
-  /* Adjust the size of the output SHF_COMPRESSED section.  */
-  if (hdr_size == sizeof (Elf32_External_Chdr))
-    return (size - sizeof (Elf32_External_Chdr)
-	    + sizeof (Elf64_External_Chdr));
-  else
-    return (size - sizeof (Elf64_External_Chdr)
-	    + sizeof (Elf32_External_Chdr));
-}
-
-/*
-FUNCTION
-	bfd_convert_section_contents
-
-SYNOPSIS
-	bfd_boolean bfd_convert_section_contents
-	  (bfd *ibfd, asection *isec, bfd *obfd,
-	   bfd_byte **ptr, bfd_size_type *ptr_size);
-
-DESCRIPTION
-	Convert the contents, stored in @var{*ptr}, of the section
-	@var{isec} in input BFD @var{ibfd} to output BFD @var{obfd}
-	if needed.  The original buffer pointed to by @var{*ptr} may
-	be freed and @var{*ptr} is returned with memory malloc'd by this
-	function, and the new size written to @var{ptr_size}.
-*/
-
-bfd_boolean
-bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
-			      bfd_byte **ptr, bfd_size_type *ptr_size)
-{
-  bfd_byte *contents;
-  bfd_size_type ihdr_size, ohdr_size, size;
-  Elf_Internal_Chdr chdr;
-  bfd_boolean use_memmove;
-
-  /* Do nothing if either input or output aren't ELF.  */
-  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
-
-  /* Do nothing if ELF classes of input and output are the same. */
-  if (get_elf_backend_data (ibfd)->s->elfclass
-      == get_elf_backend_data (obfd)->s->elfclass)
-    return TRUE;
-
-  /* Convert GNU properties.  */
-  if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
-    return _bfd_elf_convert_gnu_properties (ibfd, isec, obfd, ptr,
-					    ptr_size);
-
-  /* Do nothing if input file will be decompressed.  */
-  if ((ibfd->flags & BFD_DECOMPRESS))
-    return TRUE;
-
-  /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
-  ihdr_size = bfd_get_compression_header_size (ibfd, isec);
-  if (ihdr_size == 0)
-    return TRUE;
-
-  contents = *ptr;
-
-  /* Convert the contents of the input SHF_COMPRESSED section to
-     output.  Get the input compression header and the size of the
-     output compression header.  */
-  if (ihdr_size == sizeof (Elf32_External_Chdr))
-    {
-      Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
-      chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
-      chdr.ch_size = bfd_get_32 (ibfd, &echdr->ch_size);
-      chdr.ch_addralign = bfd_get_32 (ibfd, &echdr->ch_addralign);
-
-      ohdr_size = sizeof (Elf64_External_Chdr);
-
-      use_memmove = FALSE;
-    }
-  else
-    {
-      Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
-      chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
-      chdr.ch_size = bfd_get_64 (ibfd, &echdr->ch_size);
-      chdr.ch_addralign = bfd_get_64 (ibfd, &echdr->ch_addralign);
-
-      ohdr_size = sizeof (Elf32_External_Chdr);
-      use_memmove = TRUE;
-    }
-
-  size = bfd_section_size (isec) - ihdr_size + ohdr_size;
-  if (!use_memmove)
-    {
-      contents = (bfd_byte *) bfd_malloc (size);
-      if (contents == NULL)
-	return FALSE;
-    }
-
-  /* Write out the output compression header.  */
-  if (ohdr_size == sizeof (Elf32_External_Chdr))
-    {
-      Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
-      bfd_put_32 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
-      bfd_put_32 (obfd, chdr.ch_size, &echdr->ch_size);
-      bfd_put_32 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
-    }
-  else
-    {
-      Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
-      bfd_put_32 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
-      bfd_put_32 (obfd, 0, &echdr->ch_reserved);
-      bfd_put_64 (obfd, chdr.ch_size, &echdr->ch_size);
-      bfd_put_64 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
-    }
-
-  /* Copy the compressed contents.  */
-  if (use_memmove)
-    memmove (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
-  else
-    {
-      memcpy (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
-      free (*ptr);
-      *ptr = contents;
-    }
+  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+    return NULL;
 
-  *ptr_size = size;
-  return TRUE;
+  return elf_link_info (abfd);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfd-in2.h ./bfd/bfd-in2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfd-in2.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/bfd-in2.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,13 +1,14 @@
 /* DO NOT EDIT!  -*- buffer-read-only: t -*-  This file is automatically
-   generated from "bfd-in.h", "init.c", "opncls.c", "libbfd.c",
-   "bfdio.c", "bfdwin.c", "section.c", "archures.c", "reloc.c",
-   "syms.c", "bfd.c", "archive.c", "corefile.c", "targets.c", "format.c",
-   "linker.c", "simple.c" and "compress.c".
+   generated from "bfd-in.h", "libbfd.c", "hash.c", "section.c",
+   "syms.c", "archive.c", "archures.c", "bfd.c", "bfdio.c", "bfdwin.c",
+   "cache.c", "compress.c", "corefile.c", "format.c", "linker.c",
+   "opncls.c", "reloc.c", "simple.c", "stab-syms.c", "stabs.c" and
+   "targets.c".
    Run "make headers" in your build bfd/ to regenerate.  */
 
 /* Main header file for the bfd library -- portable access to object files.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support.
 
@@ -41,9 +42,11 @@ extern "C" {
 
 #include "ansidecl.h"
 #include "symcat.h"
-#include "bfd_stdint.h"
+#include <stdint.h>
+#include <stdbool.h>
 #include "diagnostics.h"
 #include <stdarg.h>
+#include <string.h>
 #include <sys/stat.h>
 
 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
@@ -63,23 +66,6 @@ extern "C" {
    comma and then the length of the string.  Doing this by hand
    is error prone, so using this macro is safer.  */
 #define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
-/* Unfortunately it is not possible to use the STRING_COMMA_LEN macro
-   to create the arguments to another macro, since the preprocessor
-   will mis-count the number of arguments to the outer macro (by not
-   evaluating STRING_COMMA_LEN and so missing the comma).  This is a
-   problem for example when trying to use STRING_COMMA_LEN to build
-   the arguments to the strncmp() macro.  Hence this alternative
-   definition of strncmp is provided here.
-
-   Note - these macros do NOT work if STR2 is not a constant string.  */
-#define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0)
-  /* strcpy() can have a similar problem, but since we know we are
-     copying a constant string, we can use memcpy which will be faster
-     since there is no need to check for a NUL byte inside STR.  We
-     can also save time if we do not need to copy the terminating NUL.  */
-#define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1)
-#define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2))
-
 
 #define BFD_SUPPORTS_PLUGINS @supports_plugins@
 
@@ -91,195 +77,74 @@ extern "C" {
 /* The word size of the default bfd target.  */
 #define BFD_DEFAULT_TARGET_SIZE @bfd_default_target_size@
 
-#define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@
-#define BFD_HOST_64BIT_LONG_LONG @BFD_HOST_64BIT_LONG_LONG@
-#if @BFD_HOST_64_BIT_DEFINED@
-#define BFD_HOST_64_BIT @BFD_HOST_64_BIT@
-#define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@
-typedef BFD_HOST_64_BIT bfd_int64_t;
-typedef BFD_HOST_U_64_BIT bfd_uint64_t;
-#endif
-
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if BFD_HOST_64BIT_LONG
-#  define BFD_PRI64 "l"
-# elif defined (__MSVCRT__)
-#  define BFD_PRI64 "I64"
-# else
-#  define BFD_PRI64 "ll"
-# endif
-# undef PRId64
-# define PRId64 BFD_PRI64 "d"
-# undef PRIu64
-# define PRIu64 BFD_PRI64 "u"
-# undef PRIx64
-# define PRIx64 BFD_PRI64 "x"
-#endif
+#include <inttypes.h>
 
 #if BFD_ARCH_SIZE >= 64
 #define BFD64
 #endif
 
-#ifndef INLINE
-#if __GNUC__ >= 2
-#define INLINE __inline__
-#else
-#define INLINE
-#endif
-#endif
-
-/* Declaring a type wide enough to hold a host long and a host pointer.  */
-#define BFD_HOSTPTR_T @BFD_HOSTPTR_T@
-typedef BFD_HOSTPTR_T bfd_hostptr_t;
-
-/* Forward declaration.  */
-typedef struct bfd bfd;
-
-/* Boolean type used in bfd.  Too many systems define their own
-   versions of "boolean" for us to safely typedef a "boolean" of
-   our own.  Using an enum for "bfd_boolean" has its own set of
-   problems, with strange looking casts required to avoid warnings
-   on some older compilers.  Thus we just use an int.
-
+/* Boolean type used in bfd.
    General rule: Functions which are bfd_boolean return TRUE on
    success and FALSE on failure (unless they're a predicate).  */
 
-typedef int bfd_boolean;
-#undef FALSE
-#undef TRUE
-#define FALSE 0
-#define TRUE 1
-
-#ifdef BFD64
-
-#ifndef BFD_HOST_64_BIT
- #error No 64 bit integer type available
-#endif /* ! defined (BFD_HOST_64_BIT) */
-
-typedef BFD_HOST_U_64_BIT bfd_vma;
-typedef BFD_HOST_64_BIT bfd_signed_vma;
-typedef BFD_HOST_U_64_BIT bfd_size_type;
-typedef BFD_HOST_U_64_BIT symvalue;
-
-#if BFD_HOST_64BIT_LONG
-#define BFD_VMA_FMT "l"
-#elif defined (__MSVCRT__)
-#define BFD_VMA_FMT "I64"
+#ifdef POISON_BFD_BOOLEAN
+# pragma GCC poison bfd_boolean
 #else
-#define BFD_VMA_FMT "ll"
+# define bfd_boolean bool
+# undef FALSE
+# undef TRUE
+# define FALSE 0
+# define TRUE 1
 #endif
 
-#ifndef fprintf_vma
-#define sprintf_vma(s,x) sprintf (s, "%016" BFD_VMA_FMT "x", x)
-#define fprintf_vma(f,x) fprintf (f, "%016" BFD_VMA_FMT "x", x)
-#endif
+/* Silence "applying zero offset to null pointer" UBSAN warnings.  */
+#define PTR_ADD(P,A) ((A) != 0 ? (P) + (A) : (P))
+/* Also prevent non-zero offsets from being applied to a null pointer.  */
+#define NPTR_ADD(P,A) ((P) != NULL ? (P) + (A) : (P))
 
-#else /* not BFD64  */
+#ifdef BFD64
 
 /* Represent a target address.  Also used as a generic unsigned type
    which is guaranteed to be big enough to hold any arithmetic types
    we need to deal with.  */
-typedef unsigned long bfd_vma;
+typedef uint64_t bfd_vma;
 
 /* A generic signed type which is guaranteed to be big enough to hold any
    arithmetic types we need to deal with.  Can be assumed to be compatible
    with bfd_vma in the same way that signed and unsigned ints are compatible
    (as parameters, in assignment, etc).  */
-typedef long bfd_signed_vma;
+typedef int64_t bfd_signed_vma;
+
+typedef uint64_t bfd_size_type;
+typedef uint64_t symvalue;
 
-typedef unsigned long symvalue;
-typedef unsigned long bfd_size_type;
+#else /* not BFD64  */
 
-/* Print a bfd_vma x on stream s.  */
-#define BFD_VMA_FMT "l"
-#define fprintf_vma(s,x) fprintf (s, "%08" BFD_VMA_FMT "x", x)
-#define sprintf_vma(s,x) sprintf (s, "%08" BFD_VMA_FMT "x", x)
+typedef uint32_t bfd_vma;
+typedef int32_t bfd_signed_vma;
+typedef uint32_t bfd_size_type;
+typedef uint32_t symvalue;
 
 #endif /* not BFD64  */
 
 #define HALF_BFD_SIZE_TYPE \
   (((bfd_size_type) 1) << (8 * sizeof (bfd_size_type) / 2))
 
-#ifndef BFD_HOST_64_BIT
-/* Fall back on a 32 bit type.  The idea is to make these types always
-   available for function return types, but in the case that
-   BFD_HOST_64_BIT is undefined such a function should abort or
-   otherwise signal an error.  */
-typedef bfd_signed_vma bfd_int64_t;
-typedef bfd_vma bfd_uint64_t;
-#endif
-
 /* An offset into a file.  BFD always uses the largest possible offset
    based on the build time availability of fseek, fseeko, or fseeko64.  */
 typedef @bfd_file_ptr@ file_ptr;
-typedef unsigned @bfd_file_ptr@ ufile_ptr;
-
-extern void bfd_sprintf_vma (bfd *, char *, bfd_vma);
-extern void bfd_fprintf_vma (bfd *, void *, bfd_vma);
-
-#define printf_vma(x) fprintf_vma(stdout,x)
-#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x)
-
-typedef unsigned int flagword;	/* 32 bits of flags */
-typedef unsigned char bfd_byte;
-
-/* File formats.  */
-
-typedef enum bfd_format
-{
-  bfd_unknown = 0,	/* File format is unknown.  */
-  bfd_object,		/* Linker/assembler/compiler output.  */
-  bfd_archive,		/* Object archive file.  */
-  bfd_core,		/* Core dump.  */
-  bfd_type_end		/* Marks the end; don't use it!  */
-}
-bfd_format;
-
-/* Symbols and relocation.  */
-
-/* A count of carsyms (canonical archive symbols).  */
-typedef unsigned long symindex;
-
-#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
-
-/* A canonical archive symbol.  */
-/* This is a type pun with struct ranlib on purpose!  */
-typedef struct carsym
-{
-  const char *name;
-  file_ptr file_offset;	/* Look here to find the file.  */
-}
-carsym;			/* To make these you call a carsymogen.  */
+typedef @bfd_ufile_ptr@ ufile_ptr;
 
-/* Used in generating armaps (archive tables of contents).
-   Perhaps just a forward definition would do?  */
-struct orl		/* Output ranlib.  */
-{
-  char **name;		/* Symbol name.  */
-  union
-  {
-    file_ptr pos;
-    bfd *abfd;
-  } u;			/* bfd* or file position.  */
-  int namidx;		/* Index into string table.  */
-};
+typedef uint32_t flagword;	/* 32 bits of flags */
+typedef uint8_t bfd_byte;
 
-/* Linenumber stuff.  */
-typedef struct lineno_cache_entry
-{
-  unsigned int line_number;	/* Linenumber from start of function.  */
-  union
-  {
-    struct bfd_symbol *sym;	/* Function name.  */
-    bfd_vma offset;		/* Offset into section.  */
-  } u;
-}
-alent;
-
-/* Object and core file sections.  */
+/* Forward declarations.  */
+typedef struct bfd bfd;
+struct bfd_link_info;
+struct bfd_link_hash_entry;
 typedef struct bfd_section *sec_ptr;
+typedef struct reloc_cache_entry arelent;
+struct orl;
 
 #define	align_power(addr, align)	\
   (((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align))))
@@ -292,371 +157,33 @@ typedef struct bfd_section *sec_ptr;
   ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this))		  \
    ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
    : ~ (bfd_vma) 0)
-
-typedef enum bfd_print_symbol
-{
-  bfd_print_symbol_name,
-  bfd_print_symbol_more,
-  bfd_print_symbol_all
-} bfd_print_symbol_type;
-
-/* Information about a symbol that nm needs.  */
-
-typedef struct _symbol_info
-{
-  symvalue value;
-  char type;
-  const char *name;		/* Symbol name.  */
-  unsigned char stab_type;	/* Stab type.  */
-  char stab_other;		/* Stab other.  */
-  short stab_desc;		/* Stab desc.  */
-  const char *stab_name;	/* String for stab type.  */
-} symbol_info;
-
-/* Get the name of a stabs type code.  */
-
-extern const char *bfd_get_stab_name (int);
-
-/* Hash table routines.  There is no way to free up a hash table.  */
-
-/* An element in the hash table.  Most uses will actually use a larger
-   structure, and an instance of this will be the first field.  */
-
-struct bfd_hash_entry
-{
-  /* Next entry for this hash code.  */
-  struct bfd_hash_entry *next;
-  /* String being hashed.  */
-  const char *string;
-  /* Hash code.  This is the full hash code, not the index into the
-     table.  */
-  unsigned long hash;
-};
-
-/* A hash table.  */
-
-struct bfd_hash_table
-{
-  /* The hash array.  */
-  struct bfd_hash_entry **table;
-  /* A function used to create new elements in the hash table.  The
-     first entry is itself a pointer to an element.  When this
-     function is first invoked, this pointer will be NULL.  However,
-     having the pointer permits a hierarchy of method functions to be
-     built each of which calls the function in the superclass.  Thus
-     each function should be written to allocate a new block of memory
-     only if the argument is NULL.  */
-  struct bfd_hash_entry *(*newfunc)
-    (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-  /* An objalloc for this hash table.  This is a struct objalloc *,
-     but we use void * to avoid requiring the inclusion of objalloc.h.  */
-  void *memory;
-  /* The number of slots in the hash table.  */
-  unsigned int size;
-  /* The number of entries in the hash table.  */
-  unsigned int count;
-  /* The size of elements.  */
-  unsigned int entsize;
-  /* If non-zero, don't grow the hash table.  */
-  unsigned int frozen:1;
-};
-
-/* Initialize a hash table.  */
-extern bfd_boolean bfd_hash_table_init
-  (struct bfd_hash_table *,
-   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
-			       struct bfd_hash_table *,
-			       const char *),
-   unsigned int);
-
-/* Initialize a hash table specifying a size.  */
-extern bfd_boolean bfd_hash_table_init_n
-  (struct bfd_hash_table *,
-   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
-			       struct bfd_hash_table *,
-			       const char *),
-   unsigned int, unsigned int);
-
-/* Free up a hash table.  */
-extern void bfd_hash_table_free
-  (struct bfd_hash_table *);
-
-/* Look up a string in a hash table.  If CREATE is TRUE, a new entry
-   will be created for this string if one does not already exist.  The
-   COPY argument must be TRUE if this routine should copy the string
-   into newly allocated memory when adding an entry.  */
-extern struct bfd_hash_entry *bfd_hash_lookup
-  (struct bfd_hash_table *, const char *, bfd_boolean create,
-   bfd_boolean copy);
-
-/* Insert an entry in a hash table.  */
-extern struct bfd_hash_entry *bfd_hash_insert
-  (struct bfd_hash_table *, const char *, unsigned long);
-
-/* Rename an entry in a hash table.  */
-extern void bfd_hash_rename
-  (struct bfd_hash_table *, const char *, struct bfd_hash_entry *);
-
-/* Replace an entry in a hash table.  */
-extern void bfd_hash_replace
-  (struct bfd_hash_table *, struct bfd_hash_entry *old,
-   struct bfd_hash_entry *nw);
-
-/* Base method for creating a hash table entry.  */
-extern struct bfd_hash_entry *bfd_hash_newfunc
-  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-
-/* Grab some space for a hash table entry.  */
-extern void *bfd_hash_allocate
-  (struct bfd_hash_table *, unsigned int);
-
-/* Traverse a hash table in a random order, calling a function on each
-   element.  If the function returns FALSE, the traversal stops.  The
-   INFO argument is passed to the function.  */
-extern void bfd_hash_traverse
-  (struct bfd_hash_table *,
-   bfd_boolean (*) (struct bfd_hash_entry *, void *),
-   void *info);
-
-/* Allows the default size of a hash table to be configured. New hash
-   tables allocated using bfd_hash_table_init will be created with
-   this size.  */
-extern unsigned long bfd_hash_set_default_size (unsigned long);
-
-/* Types of compressed DWARF debug sections.  We currently support
-   zlib.  */
-enum compressed_debug_section_type
-{
-  COMPRESS_DEBUG_NONE = 0,
-  COMPRESS_DEBUG = 1 << 0,
-  COMPRESS_DEBUG_GNU_ZLIB = COMPRESS_DEBUG | 1 << 1,
-  COMPRESS_DEBUG_GABI_ZLIB = COMPRESS_DEBUG | 1 << 2
-};
-
-/* This structure is used to keep track of stabs in sections
-   information while linking.  */
-
-struct stab_info
-{
-  /* A hash table used to hold stabs strings.  */
-  struct bfd_strtab_hash *strings;
-  /* The header file hash table.  */
-  struct bfd_hash_table includes;
-  /* The first .stabstr section.  */
-  struct bfd_section *stabstr;
-};
-
-#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
-
-/* User program access to BFD facilities.  */
-
-/* Direct I/O routines, for programs which know more about the object
-   file than BFD does.  Use higher level routines if possible.  */
-
-extern bfd_size_type bfd_bread (void *, bfd_size_type, bfd *);
-extern bfd_size_type bfd_bwrite (const void *, bfd_size_type, bfd *);
-extern int bfd_seek (bfd *, file_ptr, int);
-extern file_ptr bfd_tell (bfd *);
-extern int bfd_flush (bfd *);
-extern int bfd_stat (bfd *, struct stat *);
-
-/* Deprecated old routines.  */
-#if __GNUC__
-#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (_bfd_warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__),	\
-   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (_bfd_warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__), \
-   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#else
-#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (_bfd_warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \
-   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (_bfd_warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\
-   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#endif
-extern void _bfd_warn_deprecated (const char *, const char *, int, const char *);
-
-extern bfd_boolean bfd_cache_close
-  (bfd *abfd);
-/* NB: This declaration should match the autogenerated one in libbfd.h.  */
-
-extern bfd_boolean bfd_cache_close_all (void);
-
-extern bfd_boolean bfd_record_phdr
-  (bfd *, unsigned long, bfd_boolean, flagword, bfd_boolean, bfd_vma,
-   bfd_boolean, bfd_boolean, unsigned int, struct bfd_section **);
-
-/* Byte swapping routines.  */
-
-bfd_uint64_t bfd_getb64 (const void *);
-bfd_uint64_t bfd_getl64 (const void *);
-bfd_int64_t bfd_getb_signed_64 (const void *);
-bfd_int64_t bfd_getl_signed_64 (const void *);
-bfd_vma bfd_getb32 (const void *);
-bfd_vma bfd_getl32 (const void *);
-bfd_signed_vma bfd_getb_signed_32 (const void *);
-bfd_signed_vma bfd_getl_signed_32 (const void *);
-bfd_vma bfd_getb16 (const void *);
-bfd_vma bfd_getl16 (const void *);
-bfd_signed_vma bfd_getb_signed_16 (const void *);
-bfd_signed_vma bfd_getl_signed_16 (const void *);
-void bfd_putb64 (bfd_uint64_t, void *);
-void bfd_putl64 (bfd_uint64_t, void *);
-void bfd_putb32 (bfd_vma, void *);
-void bfd_putl32 (bfd_vma, void *);
-void bfd_putb24 (bfd_vma, void *);
-void bfd_putl24 (bfd_vma, void *);
-void bfd_putb16 (bfd_vma, void *);
-void bfd_putl16 (bfd_vma, void *);
-
-/* Byte swapping routines which take size and endiannes as arguments.  */
 
-bfd_uint64_t bfd_get_bits (const void *, int, bfd_boolean);
-void bfd_put_bits (bfd_uint64_t, void *, int, bfd_boolean);
+/* Return TRUE if the start of STR matches PREFIX, FALSE otherwise.  */
 
-
-/* mmap hacks */
-
-struct _bfd_window_internal;
-typedef struct _bfd_window_internal bfd_window_internal;
-
-typedef struct _bfd_window
+static inline bool
+startswith (const char *str, const char *prefix)
 {
-  /* What the user asked for.  */
-  void *data;
-  bfd_size_type size;
-  /* The actual window used by BFD.  Small user-requested read-only
-     regions sharing a page may share a single window into the object
-     file.  Read-write versions shouldn't until I've fixed things to
-     keep track of which portions have been claimed by the
-     application; don't want to give the same region back when the
-     application wants two writable copies!  */
-  struct _bfd_window_internal *i;
+  return strncmp (str, prefix, strlen (prefix)) == 0;
 }
-bfd_window;
-
-extern void bfd_init_window
-  (bfd_window *);
-extern void bfd_free_window
-  (bfd_window *);
-extern bfd_boolean bfd_get_file_window
-  (bfd *, file_ptr, bfd_size_type, bfd_window *, bfd_boolean);
-
-/* Externally visible ELF routines.  */
-
-/* Create a new BFD as if by bfd_openr.  Rather than opening a file,
-   reconstruct an ELF file by reading the segments out of remote
-   memory based on the ELF file header at EHDR_VMA and the ELF program
-   headers it points to.  If non-zero, SIZE is the known extent of the
-   object.  If not null, *LOADBASEP is filled in with the difference
-   between the VMAs from which the segments were read, and the VMAs
-   the file headers (and hence BFD's idea of each section's VMA) put
-   them at.
-
-   The function TARGET_READ_MEMORY is called to copy LEN bytes from
-   the remote memory at target address VMA into the local buffer at
-   MYADDR; it should return zero on success or an `errno' code on
-   failure.  TEMPL must be a BFD for a target with the word size and
-   byte order found in the remote memory.  */
-extern bfd *bfd_elf_bfd_from_remote_memory
-  (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
-			      bfd_size_type len));
-
-/* Forward declarations.  */
-struct ecoff_debug_info;
-struct ecoff_debug_swap;
-struct ecoff_extr;
-struct bfd_link_info;
-struct bfd_link_hash_entry;
-/* Extracted from init.c.  */
-unsigned int bfd_init (void);
-
-
-/* Value returned by bfd_init.  */
-
-#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
-/* Extracted from opncls.c.  */
-/* Set to N to open the next N BFDs using an alternate id space.  */
-extern unsigned int bfd_use_reserved_id;
-bfd *bfd_fopen (const char *filename, const char *target,
-    const char *mode, int fd);
-
-bfd *bfd_openr (const char *filename, const char *target);
-
-bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
-
-bfd *bfd_openstreamr (const char * filename, const char * target,
-    void * stream);
-
-bfd *bfd_openr_iovec (const char *filename, const char *target,
-    void *(*open_func) (struct bfd *nbfd,
-    void *open_closure),
-    void *open_closure,
-    file_ptr (*pread_func) (struct bfd *nbfd,
-    void *stream,
-    void *buf,
-    file_ptr nbytes,
-    file_ptr offset),
-    int (*close_func) (struct bfd *nbfd,
-    void *stream),
-    int (*stat_func) (struct bfd *abfd,
-    void *stream,
-    struct stat *sb));
-
-bfd *bfd_openw (const char *filename, const char *target);
-
-bfd_boolean bfd_close (bfd *abfd);
-
-bfd_boolean bfd_close_all_done (bfd *);
-
-bfd *bfd_create (const char *filename, bfd *templ);
-
-bfd_boolean bfd_make_writable (bfd *abfd);
-
-bfd_boolean bfd_make_readable (bfd *abfd);
 
+/* Extracted from libbfd.c.  */
 void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
 
 void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
 
-unsigned long bfd_calc_gnu_debuglink_crc32
-   (unsigned long crc, const unsigned char *buf, bfd_size_type len);
-
-char *bfd_get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
-
-char *bfd_get_alt_debug_link_info (bfd * abfd,
-    bfd_size_type *buildid_len,
-    bfd_byte **buildid_out);
-
-char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
-
-char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir);
-
-struct bfd_section *bfd_create_gnu_debuglink_section
-   (bfd *abfd, const char *filename);
-
-bfd_boolean bfd_fill_in_gnu_debuglink_section
-   (bfd *abfd, struct bfd_section *sect, const char *filename);
-
-char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir);
-
-void bfd_set_filename (bfd *abfd, char *filename);
+void bfd_release (bfd *, void *);
 
-/* Extracted from libbfd.c.  */
 
 /* Byte swapping macros for user section data.  */
 
 #define bfd_put_8(abfd, val, ptr) \
-  ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
+  ((void) (*((bfd_byte *) (ptr)) = (val) & 0xff))
 #define bfd_put_signed_8 \
   bfd_put_8
 #define bfd_get_8(abfd, ptr) \
-  (*(const unsigned char *) (ptr) & 0xff)
+  ((bfd_vma) *(const bfd_byte *) (ptr) & 0xff)
 #define bfd_get_signed_8(abfd, ptr) \
-  (((*(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
+  ((((bfd_signed_vma) *(const bfd_byte *) (ptr) & 0xff) ^ 0x80) - 0x80)
 
 #define bfd_put_16(abfd, val, ptr) \
   BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
@@ -700,7 +227,7 @@ bfd_vma bfd_getl24 (const void *p);
   BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
 
 #define bfd_get(bits, abfd, ptr)                       \
-  ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \
+  ((bits) == 8 ? bfd_get_8 (abfd, ptr)                 \
    : (bits) == 16 ? bfd_get_16 (abfd, ptr)             \
    : (bits) == 32 ? bfd_get_32 (abfd, ptr)             \
    : (bits) == 64 ? bfd_get_64 (abfd, ptr)             \
@@ -772,19 +299,130 @@ bfd_vma bfd_getl24 (const void *p);
 #define H_GET_S8  bfd_h_get_signed_8
 
 
-/* Extracted from bfdio.c.  */
-long bfd_get_mtime (bfd *abfd);
+uint64_t bfd_getb64 (const void *);
+uint64_t bfd_getl64 (const void *);
+int64_t bfd_getb_signed_64 (const void *);
+int64_t bfd_getl_signed_64 (const void *);
+bfd_vma bfd_getb32 (const void *);
+bfd_vma bfd_getl32 (const void *);
+bfd_signed_vma bfd_getb_signed_32 (const void *);
+bfd_signed_vma bfd_getl_signed_32 (const void *);
+bfd_vma bfd_getb16 (const void *);
+bfd_vma bfd_getl16 (const void *);
+bfd_signed_vma bfd_getb_signed_16 (const void *);
+bfd_signed_vma bfd_getl_signed_16 (const void *);
+void bfd_putb64 (uint64_t, void *);
+void bfd_putl64 (uint64_t, void *);
+void bfd_putb32 (bfd_vma, void *);
+void bfd_putl32 (bfd_vma, void *);
+void bfd_putb24 (bfd_vma, void *);
+void bfd_putl24 (bfd_vma, void *);
+void bfd_putb16 (bfd_vma, void *);
+void bfd_putl16 (bfd_vma, void *);
+uint64_t bfd_get_bits (const void *, int, bool);
+void bfd_put_bits (uint64_t, void *, int, bool);
 
-ufile_ptr bfd_get_size (bfd *abfd);
+/* Extracted from hash.c.  */
+/* An element in the hash table.  Most uses will actually use a larger
+   structure, and an instance of this will be the first field.  */
 
-ufile_ptr bfd_get_file_size (bfd *abfd);
+struct bfd_hash_entry
+{
+  /* Next entry for this hash code.  */
+  struct bfd_hash_entry *next;
+  /* String being hashed.  */
+  const char *string;
+  /* Hash code.  This is the full hash code, not the index into the
+     table.  */
+  unsigned long hash;
+};
 
-void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
-    int prot, int flags, file_ptr offset,
-    void **map_addr, bfd_size_type *map_len);
+/* A hash table.  */
+
+struct bfd_hash_table
+{
+  /* The hash array.  */
+  struct bfd_hash_entry **table;
+  /* A function used to create new elements in the hash table.  The
+     first entry is itself a pointer to an element.  When this
+     function is first invoked, this pointer will be NULL.  However,
+     having the pointer permits a hierarchy of method functions to be
+     built each of which calls the function in the superclass.  Thus
+     each function should be written to allocate a new block of memory
+     only if the argument is NULL.  */
+  struct bfd_hash_entry *(*newfunc)
+    (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
+  /* An objalloc for this hash table.  This is a struct objalloc *,
+     but we use void * to avoid requiring the inclusion of objalloc.h.  */
+  void *memory;
+  /* The number of slots in the hash table.  */
+  unsigned int size;
+  /* The number of entries in the hash table.  */
+  unsigned int count;
+  /* The size of elements.  */
+  unsigned int entsize;
+  /* If non-zero, don't grow the hash table.  */
+  unsigned int frozen:1;
+};
+
+bool bfd_hash_table_init_n
+   (struct bfd_hash_table *,
+    struct bfd_hash_entry *(* /*newfunc*/)
+       (struct bfd_hash_entry *, struct bfd_hash_table *, const char *),
+    unsigned int /*entsize*/, unsigned int /*size*/);
+
+bool bfd_hash_table_init
+   (struct bfd_hash_table *,
+    struct bfd_hash_entry *(* /*newfunc*/)
+       (struct bfd_hash_entry *, struct bfd_hash_table *, const char *),
+    unsigned int /*entsize*/);
+
+void bfd_hash_table_free (struct bfd_hash_table *);
+
+struct bfd_hash_entry *bfd_hash_lookup
+   (struct bfd_hash_table *, const char *,
+    bool /*create*/, bool /*copy*/);
+
+struct bfd_hash_entry *bfd_hash_insert
+   (struct bfd_hash_table *,
+    const char *,
+    unsigned long /*hash*/);
+
+void bfd_hash_rename (struct bfd_hash_table *,
+    const char *,
+    struct bfd_hash_entry *);
+
+void bfd_hash_replace (struct bfd_hash_table *,
+    struct bfd_hash_entry * /*old*/,
+    struct bfd_hash_entry * /*new*/);
+
+void *bfd_hash_allocate (struct bfd_hash_table *,
+    unsigned int /*size*/);
+
+struct bfd_hash_entry *bfd_hash_newfunc
+   (struct bfd_hash_entry *,
+    struct bfd_hash_table *,
+    const char *);
+
+void bfd_hash_traverse
+   (struct bfd_hash_table *,
+    bool (*) (struct bfd_hash_entry *, void *),
+    void *);
+
+unsigned int bfd_hash_set_default_size (unsigned int);
 
-/* Extracted from bfdwin.c.  */
 /* Extracted from section.c.  */
+/* Linenumber stuff.  */
+typedef struct lineno_cache_entry
+{
+  unsigned int line_number;    /* Linenumber from start of function.  */
+  union
+  {
+    struct bfd_symbol *sym;    /* Function name.  */
+    bfd_vma offset;            /* Offset into section.  */
+  } u;
+}
+alent;
 
 typedef struct bfd_section
 {
@@ -792,18 +430,22 @@ typedef struct bfd_section
      the same as that passed to bfd_make_section.  */
   const char *name;
 
-  /* A unique sequence number.  */
-  unsigned int id;
-
-  /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
-  unsigned int index;
-
   /* The next section in the list belonging to the BFD, or NULL.  */
   struct bfd_section *next;
 
   /* The previous section in the list belonging to the BFD, or NULL.  */
   struct bfd_section *prev;
 
+  /* A unique sequence number.  */
+  unsigned int id;
+
+  /* A unique section number which can be used by assembler to
+     distinguish different sections with the same section name.  */
+  unsigned int section_id;
+
+  /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
+  unsigned int index;
+
   /* The field flags contains attributes of the section. Some
      flags are read in from the object file, and some are
      synthesized from other information.  */
@@ -928,6 +570,10 @@ typedef struct bfd_section
      else up the line will take care of it later.  */
 #define SEC_LINKER_CREATED           0x100000
 
+  /* This section contains a section ID to distinguish different
+     sections with the same section name.  */
+#define SEC_ASSEMBLER_SECTION_ID     0x100000
+
   /* This section should not be subject to garbage collection.
      Also set to inform the linker that this section should not be
      listed in the link map as discarded.  */
@@ -969,9 +615,8 @@ typedef struct bfd_section
      executables or shared objects. This is for COFF only.  */
 #define SEC_COFF_SHARED             0x8000000
 
-  /* This section should be compressed.  This is for ELF linker
-     internal use only.  */
-#define SEC_ELF_COMPRESS            0x8000000
+  /* Indicate that section has the purecode flag set.  */
+#define SEC_ELF_PURECODE            0x8000000
 
   /* When a section with this flag is being linked, then if the size of
      the input section is less than a page, it should not cross a page
@@ -980,9 +625,8 @@ typedef struct bfd_section
      TMS320C54X only.  */
 #define SEC_TIC54X_BLOCK           0x10000000
 
-  /* This section should be renamed.  This is for ELF linker
-     internal use only.  */
-#define SEC_ELF_RENAME             0x10000000
+  /* This section has the SHF_X86_64_LARGE flag.  This is ELF x86-64 only.  */
+#define SEC_ELF_LARGE              0x10000000
 
   /* Conditionally link this section; do not link if there are no
      references found to any symbol in the section.  This is for TI
@@ -1001,9 +645,6 @@ typedef struct bfd_section
      when memory read flag isn't set. */
 #define SEC_COFF_NOREAD            0x40000000
 
-  /* Indicate that section has the purecode flag set.  */
-#define SEC_ELF_PURECODE           0x80000000
-
   /*  End of section flags.  */
 
   /* Some internal packed boolean fields.  */
@@ -1025,7 +666,8 @@ typedef struct bfd_section
   unsigned int compress_status : 2;
 #define COMPRESS_SECTION_NONE    0
 #define COMPRESS_SECTION_DONE    1
-#define DECOMPRESS_SECTION_SIZED 2
+#define DECOMPRESS_SECTION_ZLIB  2
+#define DECOMPRESS_SECTION_ZSTD  3
 
   /* The following flags are used by the ELF linker. */
 
@@ -1041,6 +683,7 @@ typedef struct bfd_section
 #define SEC_INFO_TYPE_JUST_SYMS 4
 #define SEC_INFO_TYPE_TARGET    5
 #define SEC_INFO_TYPE_EH_FRAME_ENTRY 6
+#define SEC_INFO_TYPE_SFRAME  7
 
   /* Nonzero if this section uses RELA relocations, rather than REL.  */
   unsigned int use_rela_p:1;
@@ -1088,13 +731,6 @@ typedef struct bfd_section
   /* The compressed size of the section in octets.  */
   bfd_size_type compressed_size;
 
-  /* Relaxation table. */
-  struct relax_table *relax;
-
-  /* Count of used relaxation table entries. */
-  int relax_count;
-
-
   /* If this section is going to be output, then this value is the
      offset in *bytes* into the output section of the first byte in the
      input section (byte ==> smallest addressable unit on the
@@ -1107,10 +743,6 @@ typedef struct bfd_section
   /* The output section through which to map on output.  */
   struct bfd_section *output_section;
 
-  /* The alignment requirement of the section, as an exponent of 2 -
-     e.g., 3 aligns to 2^3 (or 8).  */
-  unsigned int alignment_power;
-
   /* If an input section, a pointer to a vector of relocation
      records for the data in this section.  */
   struct reloc_cache_entry *relocation;
@@ -1122,6 +754,10 @@ typedef struct bfd_section
   /* The number of relocation records in one of the above.  */
   unsigned reloc_count;
 
+  /* The alignment requirement of the section, as an exponent of 2 -
+     e.g., 3 aligns to 2^3 (or 8).  */
+  unsigned int alignment_power;
+
   /* Information below is back end specific - and not always used
      or updated.  */
 
@@ -1139,7 +775,7 @@ typedef struct bfd_section
 
   /* If the SEC_IN_MEMORY flag is set, this points to the actual
      contents.  */
-  unsigned char *contents;
+  bfd_byte *contents;
 
   /* Attached line number information.  */
   alent *lineno;
@@ -1177,23 +813,23 @@ typedef struct bfd_section
   /* Early in the link process, map_head and map_tail are used to build
      a list of input sections attached to an output section.  Later,
      output sections use these fields for a list of bfd_link_order
-     structs.  */
+     structs.  The linked_to_symbol_name field is for ELF assembler
+     internal use.  */
   union {
     struct bfd_link_order *link_order;
     struct bfd_section *s;
+    const char *linked_to_symbol_name;
   } map_head, map_tail;
-} asection;
 
-/* Relax table contains information about instructions which can
-   be removed by relaxation -- replacing a long address with a
-   short address.  */
-struct relax_table {
-  /* Address where bytes may be deleted. */
-  bfd_vma addr;
+  /* Points to the output section this section is already assigned to,
+     if any.  This is used when support for non-contiguous memory
+     regions is enabled.  */
+  struct bfd_section *already_assigned;
 
-  /* Number of bytes to be deleted.  */
-  int size;
-};
+  /* Explicitly specified section type, if non-zero.  */
+  unsigned int type;
+
+} asection;
 
 static inline const char *
 bfd_section_name (const asection *sec)
@@ -1236,7 +872,7 @@ bfd_section_userdata (const asection *se
 {
   return sec->userdata;
 }
-static inline bfd_boolean
+static inline bool
 bfd_is_com_section (const asection *sec)
 {
   return (sec->flags & SEC_IS_COMMON) != 0;
@@ -1246,33 +882,35 @@ bfd_is_com_section (const asection *sec)
    because not all callers use the return value.  A macro implementation
    would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
    compilers will complain about comma expressions that have no effect.  */
-static inline bfd_boolean
+static inline bool
 bfd_set_section_userdata (asection *sec, void *val)
 {
   sec->userdata = val;
-  return TRUE;
+  return true;
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_set_section_vma (asection *sec, bfd_vma val)
 {
   sec->vma = sec->lma = val;
-  sec->user_set_vma = TRUE;
-  return TRUE;
+  sec->user_set_vma = true;
+  return true;
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_set_section_lma (asection *sec, bfd_vma val)
 {
   sec->lma = val;
-  return TRUE;
+  return true;
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_set_section_alignment (asection *sec, unsigned int val)
 {
+  if (val >= sizeof (bfd_vma) * 8 - 1)
+    return false;
   sec->alignment_power = val;
-  return TRUE;
+  return true;
 }
 
 /* These sections are global, and are managed by BFD.  The application
@@ -1294,76 +932,79 @@ extern asection _bfd_std_section[4];
 /* Pointer to the indirect section.  */
 #define bfd_ind_section_ptr (&_bfd_std_section[3])
 
-static inline bfd_boolean
+static inline bool
 bfd_is_und_section (const asection *sec)
 {
   return sec == bfd_und_section_ptr;
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_is_abs_section (const asection *sec)
 {
   return sec == bfd_abs_section_ptr;
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_is_ind_section (const asection *sec)
 {
   return sec == bfd_ind_section_ptr;
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_is_const_section (const asection *sec)
 {
-  return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr;
+  return (sec >= _bfd_std_section
+	  && sec < _bfd_std_section + (sizeof (_bfd_std_section)
+				       / sizeof (_bfd_std_section[0])));
 }
 
 /* Return TRUE if input section SEC has been discarded.  */
-static inline bfd_boolean
+static inline bool
 discarded_section (const asection *sec)
 {
   return (!bfd_is_abs_section (sec)
-          && bfd_is_abs_section (sec->output_section)
-          && sec->sec_info_type != SEC_INFO_TYPE_MERGE
-          && sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS);
+	  && bfd_is_abs_section (sec->output_section)
+	  && sec->sec_info_type != SEC_INFO_TYPE_MERGE
+	  && sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS);
 }
 
 #define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS)                   \
-  /* name, id,  index, next, prev, flags, user_set_vma,            */  \
-  {  NAME, IDX, 0,     NULL, NULL, FLAGS, 0,                           \
-                                                                       \
-  /* linker_mark, linker_has_input, gc_mark, decompress_status,    */  \
+  /* name, next, prev, id,  section_id, index, flags, user_set_vma, */ \
+  {  NAME, NULL, NULL, IDX, 0,          0,     FLAGS, 0,               \
+								       \
+  /* linker_mark, linker_has_input, gc_mark, decompress_status,     */ \
      0,           0,                1,       0,                        \
-                                                                       \
-  /* segment_mark, sec_info_type, use_rela_p,                      */  \
+								       \
+  /* segment_mark, sec_info_type, use_rela_p,                       */ \
      0,            0,             0,                                   \
-                                                                       \
-  /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   */  \
+								       \
+  /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,    */ \
      0,        0,        0,        0,        0,        0,              \
-                                                                       \
-  /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */  \
-     0,   0,   0,    0,       0,               0,     0,               \
-                                                                       \
-  /* output_offset, output_section, alignment_power,               */  \
-     0,             &SEC,           0,                                 \
-                                                                       \
-  /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
-     NULL,       NULL,        0,           0,       0,                 \
-                                                                       \
-  /* line_filepos, userdata, contents, lineno, lineno_count,       */  \
+								       \
+  /* vma, lma, size, rawsize, compressed_size,                      */ \
+     0,   0,   0,    0,       0,                                       \
+								       \
+  /* output_offset, output_section, relocation, orelocation,        */ \
+     0,             &SEC,           NULL,       NULL,                  \
+								       \
+  /* reloc_count, alignment_power, filepos, rel_filepos,            */ \
+     0,           0,               0,       0,                         \
+								       \
+  /* line_filepos, userdata, contents, lineno, lineno_count,        */ \
      0,            NULL,     NULL,     NULL,   0,                      \
-                                                                       \
+								       \
   /* entsize, kept_section, moving_line_filepos,                    */ \
-     0,       NULL,          0,                                        \
-                                                                       \
-  /* target_index, used_by_bfd, constructor_chain, owner,          */  \
+     0,       NULL,         0,                                         \
+								       \
+  /* target_index, used_by_bfd, constructor_chain, owner,           */ \
      0,            NULL,        NULL,              NULL,               \
-                                                                       \
-  /* symbol,                    symbol_ptr_ptr,                    */  \
+								       \
+  /* symbol,                    symbol_ptr_ptr,                     */ \
      (struct bfd_symbol *) SYM, &SEC.symbol,                           \
-                                                                       \
-  /* map_head, map_tail                                            */  \
-     { NULL }, { NULL }                                                \
+								       \
+  /* map_head, map_tail, already_assigned, type                     */ \
+     { NULL }, { NULL }, NULL,             0                           \
+								       \
     }
 
 /* We use a macro to initialize the static asymbol structures because
@@ -1389,7 +1030,7 @@ asection *bfd_get_linker_section (bfd *a
 asection *bfd_get_section_by_name_if
    (bfd *abfd,
     const char *name,
-    bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
+    bool (*func) (bfd *abfd, asection *sect, void *obj),
     void *obj);
 
 char *bfd_get_unique_section_name
@@ -1407,7 +1048,7 @@ asection *bfd_make_section_with_flags
 
 asection *bfd_make_section (bfd *, const char *name);
 
-bfd_boolean bfd_set_section_flags (asection *sec, flagword flags);
+bool bfd_set_section_flags (asection *sec, flagword flags);
 
 void bfd_rename_section
    (asection *sec, const char *newname);
@@ -1419,33 +1060,265 @@ void bfd_map_over_sections
 
 asection *bfd_sections_find_if
    (bfd *abfd,
-    bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
+    bool (*operation) (bfd *abfd, asection *sect, void *obj),
     void *obj);
 
-bfd_boolean bfd_set_section_size (asection *sec, bfd_size_type val);
+bool bfd_set_section_size (asection *sec, bfd_size_type val);
 
-bfd_boolean bfd_set_section_contents
+bool bfd_set_section_contents
    (bfd *abfd, asection *section, const void *data,
     file_ptr offset, bfd_size_type count);
 
-bfd_boolean bfd_get_section_contents
+bool bfd_get_section_contents
    (bfd *abfd, asection *section, void *location, file_ptr offset,
     bfd_size_type count);
 
-bfd_boolean bfd_malloc_and_get_section
+bool bfd_malloc_and_get_section
    (bfd *abfd, asection *section, bfd_byte **buf);
 
-bfd_boolean bfd_copy_private_section_data
+bool bfd_copy_private_section_data
    (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
 
 #define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
        BFD_SEND (obfd, _bfd_copy_private_section_data, \
-                 (ibfd, isection, obfd, osection))
-bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
+		 (ibfd, isection, obfd, osection))
+bool bfd_generic_is_group_section (bfd *, const asection *sec);
 
 const char *bfd_generic_group_name (bfd *, const asection *sec);
 
-bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
+bool bfd_generic_discard_group (bfd *abfd, asection *group);
+
+/* Extracted from syms.c.  */
+typedef struct bfd_symbol
+{
+  /* A pointer to the BFD which owns the symbol. This information
+     is necessary so that a back end can work out what additional
+     information (invisible to the application writer) is carried
+     with the symbol.
+
+     This field is *almost* redundant, since you can use section->owner
+     instead, except that some symbols point to the global sections
+     bfd_{abs,com,und}_section.  This could be fixed by making
+     these globals be per-bfd (or per-target-flavor).  FIXME.  */
+  struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field.  */
+
+  /* The text of the symbol. The name is left alone, and not copied; the
+     application may not alter it.  */
+  const char *name;
+
+  /* The value of the symbol.  This really should be a union of a
+     numeric value with a pointer, since some flags indicate that
+     a pointer to another symbol is stored here.  */
+  symvalue value;
+
+  /* Attributes of a symbol.  */
+#define BSF_NO_FLAGS            0
+
+  /* The symbol has local scope; <<static>> in <<C>>. The value
+     is the offset into the section of the data.  */
+#define BSF_LOCAL               (1 << 0)
+
+  /* The symbol has global scope; initialized data in <<C>>. The
+     value is the offset into the section of the data.  */
+#define BSF_GLOBAL              (1 << 1)
+
+  /* The symbol has global scope and is exported. The value is
+     the offset into the section of the data.  */
+#define BSF_EXPORT              BSF_GLOBAL /* No real difference.  */
+
+  /* A normal C symbol would be one of:
+     <<BSF_LOCAL>>, <<BSF_UNDEFINED>> or <<BSF_GLOBAL>>.  */
+
+  /* The symbol is a debugging record. The value has an arbitrary
+     meaning, unless BSF_DEBUGGING_RELOC is also set.  */
+#define BSF_DEBUGGING           (1 << 2)
+
+  /* The symbol denotes a function entry point.  Used in ELF,
+     perhaps others someday.  */
+#define BSF_FUNCTION            (1 << 3)
+
+  /* Used by the linker.  */
+#define BSF_KEEP                (1 << 5)
+
+  /* An ELF common symbol.  */
+#define BSF_ELF_COMMON          (1 << 6)
+
+  /* A weak global symbol, overridable without warnings by
+     a regular global symbol of the same name.  */
+#define BSF_WEAK                (1 << 7)
+
+  /* This symbol was created to point to a section, e.g. ELF's
+     STT_SECTION symbols.  */
+#define BSF_SECTION_SYM         (1 << 8)
+
+  /* The symbol used to be a common symbol, but now it is
+     allocated.  */
+#define BSF_OLD_COMMON          (1 << 9)
+
+  /* In some files the type of a symbol sometimes alters its
+     location in an output file - ie in coff a <<ISFCN>> symbol
+     which is also <<C_EXT>> symbol appears where it was
+     declared and not at the end of a section.  This bit is set
+     by the target BFD part to convey this information.  */
+#define BSF_NOT_AT_END          (1 << 10)
+
+  /* Signal that the symbol is the label of constructor section.  */
+#define BSF_CONSTRUCTOR         (1 << 11)
+
+  /* Signal that the symbol is a warning symbol.  The name is a
+     warning.  The name of the next symbol is the one to warn about;
+     if a reference is made to a symbol with the same name as the next
+     symbol, a warning is issued by the linker.  */
+#define BSF_WARNING             (1 << 12)
+
+  /* Signal that the symbol is indirect.  This symbol is an indirect
+     pointer to the symbol with the same name as the next symbol.  */
+#define BSF_INDIRECT            (1 << 13)
+
+  /* BSF_FILE marks symbols that contain a file name.  This is used
+     for ELF STT_FILE symbols.  */
+#define BSF_FILE                (1 << 14)
+
+  /* Symbol is from dynamic linking information.  */
+#define BSF_DYNAMIC             (1 << 15)
+
+  /* The symbol denotes a data object.  Used in ELF, and perhaps
+     others someday.  */
+#define BSF_OBJECT              (1 << 16)
+
+  /* This symbol is a debugging symbol.  The value is the offset
+     into the section of the data.  BSF_DEBUGGING should be set
+     as well.  */
+#define BSF_DEBUGGING_RELOC     (1 << 17)
+
+  /* This symbol is thread local.  Used in ELF.  */
+#define BSF_THREAD_LOCAL        (1 << 18)
+
+  /* This symbol represents a complex relocation expression,
+     with the expression tree serialized in the symbol name.  */
+#define BSF_RELC                (1 << 19)
+
+  /* This symbol represents a signed complex relocation expression,
+     with the expression tree serialized in the symbol name.  */
+#define BSF_SRELC               (1 << 20)
+
+  /* This symbol was created by bfd_get_synthetic_symtab.  */
+#define BSF_SYNTHETIC           (1 << 21)
+
+  /* This symbol is an indirect code object.  Unrelated to BSF_INDIRECT.
+     The dynamic linker will compute the value of this symbol by
+     calling the function that it points to.  BSF_FUNCTION must
+     also be also set.  */
+#define BSF_GNU_INDIRECT_FUNCTION (1 << 22)
+  /* This symbol is a globally unique data object.  The dynamic linker
+     will make sure that in the entire process there is just one symbol
+     with this name and type in use.  BSF_OBJECT must also be set.  */
+#define BSF_GNU_UNIQUE          (1 << 23)
+
+  /* This section symbol should be included in the symbol table.  */
+#define BSF_SECTION_SYM_USED    (1 << 24)
+
+  flagword flags;
+
+  /* A pointer to the section to which this symbol is
+     relative.  This will always be non NULL, there are special
+     sections for undefined and absolute symbols.  */
+  struct bfd_section *section;
+
+  /* Back end special data.  */
+  union
+    {
+      void *p;
+      bfd_vma i;
+    }
+  udata;
+}
+asymbol;
+
+typedef enum bfd_print_symbol
+{
+  bfd_print_symbol_name,
+  bfd_print_symbol_more,
+  bfd_print_symbol_all
+} bfd_print_symbol_type;
+
+/* Information about a symbol that nm needs.  */
+
+typedef struct _symbol_info
+{
+  symvalue value;
+  char type;
+  const char *name;            /* Symbol name.  */
+  unsigned char stab_type;     /* Stab type.  */
+  char stab_other;             /* Stab other.  */
+  short stab_desc;             /* Stab desc.  */
+  const char *stab_name;       /* String for stab type.  */
+} symbol_info;
+
+#define bfd_get_symtab_upper_bound(abfd) \
+       BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
+
+bool bfd_is_local_label (bfd *abfd, asymbol *sym);
+
+bool bfd_is_local_label_name (bfd *abfd, const char *name);
+
+#define bfd_is_local_label_name(abfd, name) \
+       BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
+
+bool bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
+
+#define bfd_is_target_special_symbol(abfd, sym) \
+       BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
+
+#define bfd_canonicalize_symtab(abfd, location) \
+       BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
+
+bool bfd_set_symtab
+   (bfd *abfd, asymbol **location, unsigned int count);
+
+void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
+
+#define bfd_make_empty_symbol(abfd) \
+       BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
+
+asymbol *_bfd_generic_make_empty_symbol (bfd *);
+
+#define bfd_make_debug_symbol(abfd) \
+       BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd))
+
+int bfd_decode_symclass (asymbol *symbol);
+
+bool bfd_is_undefined_symclass (int symclass);
+
+void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
+
+bool bfd_copy_private_symbol_data
+   (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
+
+#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
+       BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
+		 (ibfd, isymbol, obfd, osymbol))
+
+/* Extracted from archive.c.  */
+/* A canonical archive symbol.  */
+/* This is a type pun with struct symdef/struct ranlib on purpose!  */
+typedef struct carsym
+{
+  const char *name;
+  file_ptr file_offset;        /* Look here to find the file.  */
+}
+carsym;
+
+/* A count of carsyms (canonical archive symbols).  */
+ typedef unsigned long symindex;
+#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
+
+symindex bfd_get_next_mapent
+   (bfd *abfd, symindex previous, carsym **sym);
+
+bool bfd_set_archive_head (bfd *output, bfd *new_head);
+
+bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
 
 /* Extracted from archures.c.  */
 enum bfd_architecture
@@ -1556,6 +1429,7 @@ enum bfd_architecture
 #define bfd_mach_mips16000             16000
 #define bfd_mach_mips16                16
 #define bfd_mach_mips5                 5
+#define bfd_mach_mips_allegrex         10111431 /* octal 'AL', 31.  */
 #define bfd_mach_mips_loongson_2e      3001
 #define bfd_mach_mips_loongson_2f      3002
 #define bfd_mach_mips_gs464            3003
@@ -1588,16 +1462,6 @@ enum bfd_architecture
 #define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
 #define bfd_mach_x86_64_intel_syntax   (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
 #define bfd_mach_x64_32_intel_syntax   (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
-  bfd_arch_l1om,      /* Intel L1OM.  */
-#define bfd_mach_l1om                  (1 << 5)
-#define bfd_mach_l1om_intel_syntax     (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
-  bfd_arch_k1om,      /* Intel K1OM.  */
-#define bfd_mach_k1om                  (1 << 6)
-#define bfd_mach_k1om_intel_syntax     (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
-#define bfd_mach_i386_nacl             (1 << 7)
-#define bfd_mach_i386_i386_nacl        (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
-#define bfd_mach_x86_64_nacl           (bfd_mach_x86_64 | bfd_mach_i386_nacl)
-#define bfd_mach_x64_32_nacl           (bfd_mach_x64_32 | bfd_mach_i386_nacl)
   bfd_arch_iamcu,     /* Intel MCU.  */
 #define bfd_mach_iamcu                 (1 << 8)
 #define bfd_mach_i386_iamcu            (bfd_mach_i386_i386 | bfd_mach_iamcu)
@@ -1615,7 +1479,6 @@ enum bfd_architecture
 #define bfd_mach_h8300sx       6
 #define bfd_mach_h8300sxn      7
   bfd_arch_pdp11,     /* DEC PDP-11.  */
-  bfd_arch_plugin,
   bfd_arch_powerpc,   /* PowerPC.  */
 #define bfd_mach_ppc           32
 #define bfd_mach_ppc64         64
@@ -1725,6 +1588,7 @@ enum bfd_architecture
 #define bfd_mach_arm_8M_BASE   25
 #define bfd_mach_arm_8M_MAIN   26
 #define bfd_mach_arm_8_1M_MAIN 27
+#define bfd_mach_arm_9         28
   bfd_arch_nds32,     /* Andes NDS32.  */
 #define bfd_mach_n1            1
 #define bfd_mach_n1h           2
@@ -1738,7 +1602,6 @@ enum bfd_architecture
 #define bfd_mach_tic4x         40
   bfd_arch_tic54x,    /* Texas Instruments TMS320C54X.  */
   bfd_arch_tic6x,     /* Texas Instruments TMS320C6X.  */
-  bfd_arch_tic80,     /* TI TMS320c80 (MVP).  */
   bfd_arch_v850,      /* NEC V850.  */
   bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI).  */
 #define bfd_mach_v850          1
@@ -1800,6 +1663,7 @@ enum bfd_architecture
 #define bfd_mach_iq10          2
   bfd_arch_bpf,       /* Linux eBPF.  */
 #define bfd_mach_bpf           1
+#define bfd_mach_xbpf          2
   bfd_arch_epiphany,  /* Adapteva EPIPHANY.  */
 #define bfd_mach_epiphany16    1
 #define bfd_mach_epiphany32    2
@@ -1880,22 +1744,44 @@ enum bfd_architecture
 #define bfd_mach_msp46         46
 #define bfd_mach_msp47         47
 #define bfd_mach_msp54         54
-  bfd_arch_xc16x,     /* Infineon's XC16X Series.  */
-#define bfd_mach_xc16x         1
-#define bfd_mach_xc16xl        2
-#define bfd_mach_xc16xs        3
   bfd_arch_xgate,     /* Freescale XGATE.  */
 #define bfd_mach_xgate         1
   bfd_arch_xtensa,    /* Tensilica's Xtensa cores.  */
 #define bfd_mach_xtensa        1
   bfd_arch_z80,
-#define bfd_mach_z80strict     1 /* No undocumented opcodes.  */
-#define bfd_mach_z80           3 /* With ixl, ixh, iyl, and iyh.  */
-#define bfd_mach_z80full       7 /* All undocumented instructions.  */
-#define bfd_mach_r800          11 /* R800: successor with multiplication.  */
+/* Zilog Z80 without undocumented opcodes.  */
+#define bfd_mach_z80strict     1
+/* Zilog Z180: successor with additional instructions, but without
+ halves of ix and iy.  */
+#define bfd_mach_z180          2
+/* Zilog Z80 with ixl, ixh, iyl, and iyh.  */
+#define bfd_mach_z80           3
+/* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode.  */
+#define bfd_mach_ez80_z80      4
+/* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode.  */
+#define bfd_mach_ez80_adl      5
+/* Z80N */
+#define bfd_mach_z80n          6
+/* Zilog Z80 with all undocumented instructions.  */
+#define bfd_mach_z80full       7
+/* GameBoy Z80 (reduced instruction set).  */
+#define bfd_mach_gbz80         8
+/* ASCII R800: successor with multiplication.  */
+#define bfd_mach_r800          11
   bfd_arch_lm32,      /* Lattice Mico32.  */
 #define bfd_mach_lm32          1
   bfd_arch_microblaze,/* Xilinx MicroBlaze.  */
+  bfd_arch_kvx,        /* Kalray VLIW core of the MPPA processor family */
+#define bfd_mach_kv3_unknown       0
+#define bfd_mach_kv3_1             1
+#define bfd_mach_kv3_1_64          2
+#define bfd_mach_kv3_1_usr         3
+#define bfd_mach_kv3_2             4
+#define bfd_mach_kv3_2_64          5
+#define bfd_mach_kv3_2_usr         6
+#define bfd_mach_kv4_1             7
+#define bfd_mach_kv4_1_64          8
+#define bfd_mach_kv4_1_usr         9
   bfd_arch_tilepro,   /* Tilera TILEPro.  */
   bfd_arch_tilegx,    /* Tilera TILE-Gx.  */
 #define bfd_mach_tilepro       1
@@ -1903,7 +1789,9 @@ enum bfd_architecture
 #define bfd_mach_tilegx32      2
   bfd_arch_aarch64,   /* AArch64.  */
 #define bfd_mach_aarch64 0
+#define bfd_mach_aarch64_8R    1
 #define bfd_mach_aarch64_ilp32 32
+#define bfd_mach_aarch64_llp64 64
   bfd_arch_nios2,     /* Nios II.  */
 #define bfd_mach_nios2         0
 #define bfd_mach_nios2r1       1
@@ -1926,6 +1814,26 @@ enum bfd_architecture
 #define bfd_mach_ck803         5
 #define bfd_mach_ck807         6
 #define bfd_mach_ck810         7
+#define bfd_mach_ck860         8
+  bfd_arch_loongarch,       /* LoongArch */
+#define bfd_mach_loongarch32   1
+#define bfd_mach_loongarch64   2
+  bfd_arch_amdgcn,     /* AMDGCN */
+#define bfd_mach_amdgcn_unknown 0x000
+#define bfd_mach_amdgcn_gfx900  0x02c
+#define bfd_mach_amdgcn_gfx904  0x02e
+#define bfd_mach_amdgcn_gfx906  0x02f
+#define bfd_mach_amdgcn_gfx908  0x030
+#define bfd_mach_amdgcn_gfx90a  0x03f
+#define bfd_mach_amdgcn_gfx1010 0x033
+#define bfd_mach_amdgcn_gfx1011 0x034
+#define bfd_mach_amdgcn_gfx1012 0x035
+#define bfd_mach_amdgcn_gfx1030 0x036
+#define bfd_mach_amdgcn_gfx1031 0x037
+#define bfd_mach_amdgcn_gfx1032 0x038
+#define bfd_mach_amdgcn_gfx1100 0x041
+#define bfd_mach_amdgcn_gfx1101 0x046
+#define bfd_mach_amdgcn_gfx1102 0x047
   bfd_arch_last
   };
 
@@ -1942,17 +1850,16 @@ typedef struct bfd_arch_info
   /* TRUE if this is the default machine for the architecture.
      The default arch should be the first entry for an arch so that
      all the entries for that arch can be accessed via <<next>>.  */
-  bfd_boolean the_default;
+  bool the_default;
   const struct bfd_arch_info * (*compatible) (const struct bfd_arch_info *,
-                                              const struct bfd_arch_info *);
+					      const struct bfd_arch_info *);
 
-  bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
+  bool (*scan) (const struct bfd_arch_info *, const char *);
 
   /* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
      IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
      TRUE, the buffer contains code.  */
-  void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
-                 bfd_boolean code);
+  void *(*fill) (bfd_size_type count, bool is_bigendian, bool code);
 
   const struct bfd_arch_info *next;
 
@@ -1975,11 +1882,11 @@ const bfd_arch_info_type *bfd_scan_arch
 const char **bfd_arch_list (void);
 
 const bfd_arch_info_type *bfd_arch_get_compatible
-   (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
+   (const bfd *abfd, const bfd *bbfd, bool accept_unknowns);
 
 void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
 
-bfd_boolean bfd_default_set_arch_mach
+bool bfd_default_set_arch_mach
    (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
 
 enum bfd_architecture bfd_get_arch (const bfd *abfd);
@@ -2004,8 +1911,1150 @@ unsigned int bfd_octets_per_byte (const
 unsigned int bfd_arch_mach_octets_per_byte
    (enum bfd_architecture arch, unsigned long machine);
 
-/* Extracted from reloc.c.  */
+/* Extracted from bfd.c.  */
+typedef enum bfd_format
+  {
+    bfd_unknown = 0,   /* File format is unknown.  */
+    bfd_object,        /* Linker/assembler/compiler output.  */
+    bfd_archive,       /* Object archive file.  */
+    bfd_core,          /* Core dump.  */
+    bfd_type_end       /* Marks the end; don't use it!  */
+  }
+bfd_format;
+
+enum bfd_direction
+  {
+    no_direction = 0,
+    read_direction = 1,
+    write_direction = 2,
+    both_direction = 3
+  };
+
+enum bfd_last_io
+  {
+    bfd_io_seek = 0,
+    bfd_io_read = 1,
+    bfd_io_write = 2,
+    bfd_io_force = 3
+  };
+
+enum bfd_plugin_format
+  {
+    bfd_plugin_unknown = 0,
+    bfd_plugin_yes = 1,
+    bfd_plugin_no = 2
+  };
+
+struct bfd_build_id
+  {
+    bfd_size_type size;
+    bfd_byte data[1];
+  };
+
+struct bfd
+{
+  /* The filename the application opened the BFD with.  */
+  const char *filename;
+
+  /* A pointer to the target jump table.  */
+  const struct bfd_target *xvec;
+
+  /* The IOSTREAM, and corresponding IO vector that provide access
+     to the file backing the BFD.  */
+  void *iostream;
+  const struct bfd_iovec *iovec;
+
+  /* The caching routines use these to maintain a
+     least-recently-used list of BFDs.  */
+  struct bfd *lru_prev, *lru_next;
+
+  /* Track current file position (or current buffer offset for
+     in-memory BFDs).  When a file is closed by the caching routines,
+     BFD retains state information on the file here.  */
+  ufile_ptr where;
+
+  /* File modified time, if mtime_set is TRUE.  */
+  long mtime;
+
+  /* A unique identifier of the BFD  */
+  unsigned int id;
+
+  /* Format_specific flags.  */
+  flagword flags;
+
+  /* Values that may appear in the flags field of a BFD.  These also
+     appear in the object_flags field of the bfd_target structure, where
+     they indicate the set of flags used by that backend (not all flags
+     are meaningful for all object file formats) (FIXME: at the moment,
+     the object_flags values have mostly just been copied from backend
+     to another, and are not necessarily correct).  */
+
+#define BFD_NO_FLAGS                0x0
+
+  /* BFD contains relocation entries.  */
+#define HAS_RELOC                   0x1
+
+  /* BFD is directly executable.  */
+#define EXEC_P                      0x2
+
+  /* BFD has line number information (basically used for F_LNNO in a
+     COFF header).  */
+#define HAS_LINENO                  0x4
+
+  /* BFD has debugging information.  */
+#define HAS_DEBUG                  0x08
+
+  /* BFD has symbols.  */
+#define HAS_SYMS                   0x10
+
+  /* BFD has local symbols (basically used for F_LSYMS in a COFF
+     header).  */
+#define HAS_LOCALS                 0x20
+
+  /* BFD is a dynamic object.  */
+#define DYNAMIC                    0x40
+
+  /* Text section is write protected (if D_PAGED is not set, this is
+     like an a.out NMAGIC file) (the linker sets this by default, but
+     clears it for -r or -N).  */
+#define WP_TEXT                    0x80
+
+  /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
+     linker sets this by default, but clears it for -r or -n or -N).  */
+#define D_PAGED                   0x100
+
+  /* BFD is relaxable (this means that bfd_relax_section may be able to
+     do something) (sometimes bfd_relax_section can do something even if
+     this is not set).  */
+#define BFD_IS_RELAXABLE          0x200
+
+  /* This may be set before writing out a BFD to request using a
+     traditional format.  For example, this is used to request that when
+     writing out an a.out object the symbols not be hashed to eliminate
+     duplicates.  */
+#define BFD_TRADITIONAL_FORMAT    0x400
+
+  /* This flag indicates that the BFD contents are actually cached
+     in memory.  If this is set, iostream points to a malloc'd
+     bfd_in_memory struct.  */
+#define BFD_IN_MEMORY             0x800
+
+  /* This BFD has been created by the linker and doesn't correspond
+     to any input file.  */
+#define BFD_LINKER_CREATED       0x1000
+
+  /* This may be set before writing out a BFD to request that it
+     be written using values for UIDs, GIDs, timestamps, etc. that
+     will be consistent from run to run.  */
+#define BFD_DETERMINISTIC_OUTPUT 0x2000
+
+  /* Compress sections in this BFD.  */
+#define BFD_COMPRESS             0x4000
+
+  /* Decompress sections in this BFD.  */
+#define BFD_DECOMPRESS           0x8000
+
+  /* BFD is a dummy, for plugins.  */
+#define BFD_PLUGIN              0x10000
+
+  /* Compress sections in this BFD with SHF_COMPRESSED from gABI.  */
+#define BFD_COMPRESS_GABI       0x20000
+
+  /* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this
+     BFD.  */
+#define BFD_CONVERT_ELF_COMMON  0x40000
+
+  /* Use the ELF STT_COMMON type in this BFD.  */
+#define BFD_USE_ELF_STT_COMMON  0x80000
+
+  /* Put pathnames into archives (non-POSIX).  */
+#define BFD_ARCHIVE_FULL_PATH  0x100000
+
+#define BFD_CLOSED_BY_CACHE    0x200000
+  /* Compress sections in this BFD with SHF_COMPRESSED zstd.  */
+#define BFD_COMPRESS_ZSTD      0x400000
+
+  /* Don't generate ELF section header.  */
+#define BFD_NO_SECTION_HEADER  0x800000
+
+  /* Flags bits which are for BFD use only.  */
+#define BFD_FLAGS_FOR_BFD_USE_MASK \
+  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
+   | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
+   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON \
+   | BFD_NO_SECTION_HEADER)
+
+  /* The format which belongs to the BFD. (object, core, etc.)  */
+  ENUM_BITFIELD (bfd_format) format : 3;
+
+  /* The direction with which the BFD was opened.  */
+  ENUM_BITFIELD (bfd_direction) direction : 2;
+
+  /* POSIX.1-2017 (IEEE Std 1003.1) says of fopen : "When a file is
+     opened with update mode ('+' as the second or third character in
+     the mode argument), both input and output may be performed on
+     the associated stream.  However, the application shall ensure
+     that output is not directly followed by input without an
+     intervening call to fflush() or to a file positioning function
+     (fseek(), fsetpos(), or rewind()), and input is not directly
+     followed by output without an intervening call to a file
+     positioning function, unless the input operation encounters
+     end-of-file."
+     This field tracks the last IO operation, so that bfd can insert
+     a seek when IO direction changes.  */
+  ENUM_BITFIELD (bfd_last_io) last_io : 2;
+
+  /* Is the file descriptor being cached?  That is, can it be closed as
+     needed, and re-opened when accessed later?  */
+  unsigned int cacheable : 1;
+
+  /* Marks whether there was a default target specified when the
+     BFD was opened. This is used to select which matching algorithm
+     to use to choose the back end.  */
+  unsigned int target_defaulted : 1;
+
+  /* ... and here: (``once'' means at least once).  */
+  unsigned int opened_once : 1;
+
+  /* Set if we have a locally maintained mtime value, rather than
+     getting it from the file each time.  */
+  unsigned int mtime_set : 1;
+
+  /* Flag set if symbols from this BFD should not be exported.  */
+  unsigned int no_export : 1;
+
+  /* Remember when output has begun, to stop strange things
+     from happening.  */
+  unsigned int output_has_begun : 1;
+
+  /* Have archive map.  */
+  unsigned int has_armap : 1;
+
+  /* Set if this is a thin archive.  */
+  unsigned int is_thin_archive : 1;
+
+  /* Set if this archive should not cache element positions.  */
+  unsigned int no_element_cache : 1;
+
+  /* Set if only required symbols should be added in the link hash table for
+     this object.  Used by VMS linkers.  */
+  unsigned int selective_search : 1;
+
+  /* Set if this is the linker output BFD.  */
+  unsigned int is_linker_output : 1;
+
+  /* Set if this is the linker input BFD.  */
+  unsigned int is_linker_input : 1;
+
+  /* If this is an input for a compiler plug-in library.  */
+  ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
+
+  /* Set if this is a plugin output file.  */
+  unsigned int lto_output : 1;
+
+  /* Set if this is a slim LTO object not loaded with a compiler plugin.  */
+  unsigned int lto_slim_object : 1;
+
+  /* Do not attempt to modify this file.  Set when detecting errors
+     that BFD is not prepared to handle for objcopy/strip.  */
+  unsigned int read_only : 1;
+
+  /* Set to dummy BFD created when claimed by a compiler plug-in
+     library.  */
+  bfd *plugin_dummy_bfd;
+
+  /* The offset of this bfd in the file, typically 0 if it is not
+     contained in an archive.  */
+  ufile_ptr origin;
+
+  /* The origin in the archive of the proxy entry.  This will
+     normally be the same as origin, except for thin archives,
+     when it will contain the current offset of the proxy in the
+     thin archive rather than the offset of the bfd in its actual
+     container.  */
+  ufile_ptr proxy_origin;
+
+  /* A hash table for section names.  */
+  struct bfd_hash_table section_htab;
+
+  /* Pointer to linked list of sections.  */
+  struct bfd_section *sections;
+
+  /* The last section on the section list.  */
+  struct bfd_section *section_last;
+
+  /* The number of sections.  */
+  unsigned int section_count;
+
+  /* The archive plugin file descriptor.  */
+  int archive_plugin_fd;
+
+  /* The number of opens on the archive plugin file descriptor.  */
+  unsigned int archive_plugin_fd_open_count;
+
+  /* A field used by _bfd_generic_link_add_archive_symbols.  This will
+     be used only for archive elements.  */
+  int archive_pass;
+
+  /* The total size of memory from bfd_alloc.  */
+  bfd_size_type alloc_size;
+
+  /* Stuff only useful for object files:
+     The start address.  */
+  bfd_vma start_address;
+
+  /* Symbol table for output BFD (with symcount entries).
+     Also used by the linker to cache input BFD symbols.  */
+  struct bfd_symbol **outsymbols;
+
+  /* Used for input and output.  */
+  unsigned int symcount;
+
+  /* Used for slurped dynamic symbol tables.  */
+  unsigned int dynsymcount;
+
+  /* Pointer to structure which contains architecture information.  */
+  const struct bfd_arch_info *arch_info;
+
+  /* Cached length of file for bfd_get_size.  0 until bfd_get_size is
+     called, 1 if stat returns an error or the file size is too large to
+     return in ufile_ptr.  Both 0 and 1 should be treated as "unknown".  */
+  ufile_ptr size;
+
+  /* Stuff only useful for archives.  */
+  void *arelt_data;
+  struct bfd *my_archive;      /* The containing archive BFD.  */
+  struct bfd *archive_next;    /* The next BFD in the archive.  */
+  struct bfd *archive_head;    /* The first BFD in the archive.  */
+  struct bfd *nested_archives; /* List of nested archive in a flattened
+				  thin archive.  */
+
+  union {
+    /* For input BFDs, a chain of BFDs involved in a link.  */
+    struct bfd *next;
+    /* For output BFD, the linker hash table.  */
+    struct bfd_link_hash_table *hash;
+  } link;
+
+  /* Used by the back end to hold private data.  */
+  union
+    {
+      struct aout_data_struct *aout_data;
+      struct artdata *aout_ar_data;
+      struct coff_tdata *coff_obj_data;
+      struct pe_tdata *pe_obj_data;
+      struct xcoff_tdata *xcoff_obj_data;
+      struct ecoff_tdata *ecoff_obj_data;
+      struct srec_data_struct *srec_data;
+      struct verilog_data_struct *verilog_data;
+      struct ihex_data_struct *ihex_data;
+      struct tekhex_data_struct *tekhex_data;
+      struct elf_obj_tdata *elf_obj_data;
+      struct mmo_data_struct *mmo_data;
+      struct trad_core_struct *trad_core_data;
+      struct som_data_struct *som_data;
+      struct hpux_core_struct *hpux_core_data;
+      struct hppabsd_core_struct *hppabsd_core_data;
+      struct sgi_core_struct *sgi_core_data;
+      struct lynx_core_struct *lynx_core_data;
+      struct osf_core_struct *osf_core_data;
+      struct cisco_core_struct *cisco_core_data;
+      struct netbsd_core_struct *netbsd_core_data;
+      struct mach_o_data_struct *mach_o_data;
+      struct mach_o_fat_data_struct *mach_o_fat_data;
+      struct plugin_data_struct *plugin_data;
+      struct bfd_pef_data_struct *pef_data;
+      struct bfd_pef_xlib_data_struct *pef_xlib_data;
+      struct bfd_sym_data_struct *sym_data;
+      void *any;
+    }
+  tdata;
+
+  /* Used by the application to hold private data.  */
+  void *usrdata;
+
+  /* Where all the allocated stuff under this BFD goes.  This is a
+     struct objalloc *, but we use void * to avoid requiring the inclusion
+     of objalloc.h.  */
+  void *memory;
+
+  /* For input BFDs, the build ID, if the object has one. */
+  const struct bfd_build_id *build_id;
+};
+
+static inline const char *
+bfd_get_filename (const bfd *abfd)
+{
+  return abfd->filename;
+}
+
+static inline bool
+bfd_get_cacheable (const bfd *abfd)
+{
+  return abfd->cacheable;
+}
+
+static inline enum bfd_format
+bfd_get_format (const bfd *abfd)
+{
+  return abfd->format;
+}
+
+static inline flagword
+bfd_get_file_flags (const bfd *abfd)
+{
+  return abfd->flags;
+}
+
+static inline bfd_vma
+bfd_get_start_address (const bfd *abfd)
+{
+  return abfd->start_address;
+}
+
+static inline unsigned int
+bfd_get_symcount (const bfd *abfd)
+{
+  return abfd->symcount;
+}
+
+static inline unsigned int
+bfd_get_dynamic_symcount (const bfd *abfd)
+{
+  return abfd->dynsymcount;
+}
+
+static inline struct bfd_symbol **
+bfd_get_outsymbols (const bfd *abfd)
+{
+  return abfd->outsymbols;
+}
+
+static inline unsigned int
+bfd_count_sections (const bfd *abfd)
+{
+  return abfd->section_count;
+}
+
+static inline bool
+bfd_has_map (const bfd *abfd)
+{
+  return abfd->has_armap;
+}
+
+static inline bool
+bfd_is_thin_archive (const bfd *abfd)
+{
+  return abfd->is_thin_archive;
+}
+
+static inline void *
+bfd_usrdata (const bfd *abfd)
+{
+  return abfd->usrdata;
+}
+
+/* See note beside bfd_set_section_userdata.  */
+static inline bool
+bfd_set_cacheable (bfd * abfd, bool val)
+{
+  abfd->cacheable = val;
+  return true;
+}
+
+static inline void
+bfd_set_thin_archive (bfd *abfd, bool val)
+{
+  abfd->is_thin_archive = val;
+}
+
+static inline void
+bfd_set_usrdata (bfd *abfd, void *val)
+{
+  abfd->usrdata = val;
+}
+
+static inline asection *
+bfd_asymbol_section (const asymbol *sy)
+{
+  return sy->section;
+}
+
+static inline bfd_vma
+bfd_asymbol_value (const asymbol *sy)
+{
+  return sy->section->vma + sy->value;
+}
+
+static inline const char *
+bfd_asymbol_name (const asymbol *sy)
+{
+  return sy->name;
+}
+
+static inline struct bfd *
+bfd_asymbol_bfd (const asymbol *sy)
+{
+  return sy->the_bfd;
+}
+
+static inline void
+bfd_set_asymbol_name (asymbol *sy, const char *name)
+{
+  sy->name = name;
+}
+
+/* For input sections return the original size on disk of the
+   section.  For output sections return the current size.  */
+static inline bfd_size_type
+bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
+{
+  if (abfd->direction != write_direction && sec->rawsize != 0)
+    return sec->rawsize;
+  return sec->size;
+}
+
+/* Find the address one past the end of SEC.  */
+static inline bfd_size_type
+bfd_get_section_limit (const bfd *abfd, const asection *sec)
+{
+  return (bfd_get_section_limit_octets (abfd, sec)
+	  / bfd_octets_per_byte (abfd, sec));
+}
+
+/* For input sections return the larger of the current size and the
+   original size on disk of the section.  For output sections return
+   the current size.  */
+static inline bfd_size_type
+bfd_get_section_alloc_size (const bfd *abfd, const asection *sec)
+{
+  if (abfd->direction != write_direction && sec->rawsize > sec->size)
+    return sec->rawsize;
+  return sec->size;
+}
+
+/* Functions to handle insertion and deletion of a bfd's sections.  These
+   only handle the list pointers, ie. do not adjust section_count,
+   target_index etc.  */
+static inline void
+bfd_section_list_remove (bfd *abfd, asection *s)
+{
+  asection *next = s->next;
+  asection *prev = s->prev;
+  if (prev)
+    prev->next = next;
+  else
+    abfd->sections = next;
+  if (next)
+    next->prev = prev;
+  else
+    abfd->section_last = prev;
+}
+
+static inline void
+bfd_section_list_append (bfd *abfd, asection *s)
+{
+  s->next = 0;
+  if (abfd->section_last)
+    {
+      s->prev = abfd->section_last;
+      abfd->section_last->next = s;
+    }
+  else
+    {
+      s->prev = 0;
+      abfd->sections = s;
+    }
+  abfd->section_last = s;
+}
+
+static inline void
+bfd_section_list_prepend (bfd *abfd, asection *s)
+{
+  s->prev = 0;
+  if (abfd->sections)
+    {
+      s->next = abfd->sections;
+      abfd->sections->prev = s;
+    }
+  else
+    {
+      s->next = 0;
+      abfd->section_last = s;
+    }
+  abfd->sections = s;
+}
+
+static inline void
+bfd_section_list_insert_after (bfd *abfd, asection *a, asection *s)
+{
+  asection *next = a->next;
+  s->next = next;
+  s->prev = a;
+  a->next = s;
+  if (next)
+    next->prev = s;
+  else
+    abfd->section_last = s;
+}
+
+static inline void
+bfd_section_list_insert_before (bfd *abfd, asection *b, asection *s)
+{
+  asection *prev = b->prev;
+  s->prev = prev;
+  s->next = b;
+  b->prev = s;
+  if (prev)
+    prev->next = s;
+  else
+    abfd->sections = s;
+}
+
+static inline bool
+bfd_section_removed_from_list (const bfd *abfd, const asection *s)
+{
+  return s->next ? s->next->prev != s : abfd->section_last != s;
+}
+
+typedef enum bfd_error
+{
+  bfd_error_no_error = 0,
+  bfd_error_system_call,
+  bfd_error_invalid_target,
+  bfd_error_wrong_format,
+  bfd_error_wrong_object_format,
+  bfd_error_invalid_operation,
+  bfd_error_no_memory,
+  bfd_error_no_symbols,
+  bfd_error_no_armap,
+  bfd_error_no_more_archived_files,
+  bfd_error_malformed_archive,
+  bfd_error_missing_dso,
+  bfd_error_file_not_recognized,
+  bfd_error_file_ambiguously_recognized,
+  bfd_error_no_contents,
+  bfd_error_nonrepresentable_section,
+  bfd_error_no_debug_section,
+  bfd_error_bad_value,
+  bfd_error_file_truncated,
+  bfd_error_file_too_big,
+  bfd_error_sorry,
+  bfd_error_on_input,
+  bfd_error_invalid_error_code
+}
+bfd_error_type;
+
+bfd_error_type bfd_get_error (void);
+
+void bfd_set_error (bfd_error_type error_tag);
+
+void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
+
+const char *bfd_errmsg (bfd_error_type error_tag);
+
+void bfd_perror (const char *message);
+
+typedef void (*bfd_error_handler_type) (const char *, va_list);
+
+void _bfd_error_handler (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
+
+bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
+
+void bfd_set_error_program_name (const char *);
+
+typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
+					 const char *bfd_version,
+					 const char *bfd_file,
+					 int bfd_line);
+
+bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
+
+unsigned int bfd_init (void);
+
+/* Value returned by bfd_init.  */
+#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
+
+typedef bool (*bfd_lock_unlock_fn_type) (void *);
+bool bfd_thread_init
+   (bfd_lock_unlock_fn_type lock,
+    bfd_lock_unlock_fn_type unlock,
+    void *data);
+
+void bfd_thread_cleanup (void);
+
+long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
+
+long bfd_canonicalize_reloc
+   (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
+
+void bfd_set_reloc
+   (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
+
+#define bfd_set_reloc(abfd, asect, location, count) \
+       BFD_SEND (abfd, _bfd_set_reloc, (abfd, asect, location, count))
+bool bfd_set_file_flags (bfd *abfd, flagword flags);
+
+int bfd_get_arch_size (bfd *abfd);
+
+int bfd_get_sign_extend_vma (bfd *abfd);
+
+bool bfd_set_start_address (bfd *abfd, bfd_vma vma);
+
+unsigned int bfd_get_gp_size (bfd *abfd);
+
+void bfd_set_gp_size (bfd *abfd, unsigned int i);
+
+void bfd_set_gp_value (bfd *abfd, bfd_vma v);
+
+bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
+
+bool bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
+
+#define bfd_copy_private_header_data(ibfd, obfd) \
+       BFD_SEND (obfd, _bfd_copy_private_header_data, \
+		 (ibfd, obfd))
+bool bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
+
+#define bfd_copy_private_bfd_data(ibfd, obfd) \
+       BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
+		 (ibfd, obfd))
+bool bfd_set_private_flags (bfd *abfd, flagword flags);
+
+#define bfd_set_private_flags(abfd, flags) \
+       BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
+#define bfd_sizeof_headers(abfd, info) \
+       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
+
+#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
+       BFD_SEND (abfd, _bfd_find_nearest_line, \
+		 (abfd, syms, sec, off, file, func, line, NULL))
+
+#define bfd_find_nearest_line_with_alt(abfd, alt_filename, sec, syms, off, \
+				       file, func, line, disc) \
+       BFD_SEND (abfd, _bfd_find_nearest_line_with_alt, \
+		 (abfd, alt_filename, syms, sec, off, file, func, line, disc))
+
+#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
+					   line, disc) \
+       BFD_SEND (abfd, _bfd_find_nearest_line, \
+		 (abfd, syms, sec, off, file, func, line, disc))
+
+#define bfd_find_line(abfd, syms, sym, file, line) \
+       BFD_SEND (abfd, _bfd_find_line, \
+		 (abfd, syms, sym, file, line))
+
+#define bfd_find_inliner_info(abfd, file, func, line) \
+       BFD_SEND (abfd, _bfd_find_inliner_info, \
+		 (abfd, file, func, line))
+
+#define bfd_debug_info_start(abfd) \
+       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
+
+#define bfd_debug_info_end(abfd) \
+       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
+
+#define bfd_debug_info_accumulate(abfd, section) \
+       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
+
+#define bfd_stat_arch_elt(abfd, stat) \
+       BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \
+		 _bfd_stat_arch_elt, (abfd, stat))
+
+#define bfd_update_armap_timestamp(abfd) \
+       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
+
+#define bfd_set_arch_mach(abfd, arch, mach)\
+       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
+
+#define bfd_relax_section(abfd, section, link_info, again) \
+       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
+
+#define bfd_gc_sections(abfd, link_info) \
+       BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
+
+#define bfd_lookup_section_flags(link_info, flag_info, section) \
+       BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
+
+#define bfd_merge_sections(abfd, link_info) \
+       BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
+
+#define bfd_is_group_section(abfd, sec) \
+       BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
+
+#define bfd_group_name(abfd, sec) \
+       BFD_SEND (abfd, _bfd_group_name, (abfd, sec))
+
+#define bfd_discard_group(abfd, sec) \
+       BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
+
+#define bfd_link_hash_table_create(abfd) \
+       BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
+
+#define bfd_link_add_symbols(abfd, info) \
+       BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
+
+#define bfd_link_just_syms(abfd, sec, info) \
+       BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
+
+#define bfd_final_link(abfd, info) \
+       BFD_SEND (abfd, _bfd_final_link, (abfd, info))
+
+#define bfd_free_cached_info(abfd) \
+       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
+
+#define bfd_get_dynamic_symtab_upper_bound(abfd) \
+       BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
+
+#define bfd_print_private_bfd_data(abfd, file)\
+       BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
+
+#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
+       BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
+
+#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
+       BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
+						   dyncount, dynsyms, ret))
+
+#define bfd_get_dynamic_reloc_upper_bound(abfd) \
+       BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
+
+#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
+       BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
+
+bfd_byte *bfd_get_relocated_section_contents
+   (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
+    bool, asymbol **);
+
+bool bfd_record_phdr
+   (bfd *, unsigned long, bool, flagword, bool, bfd_vma,
+    bool, bool, unsigned int, struct bfd_section **);
+
+void bfd_sprintf_vma (bfd *, char *, bfd_vma);
+void bfd_fprintf_vma (bfd *, void *, bfd_vma);
+
+#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd, stdout, x)
+
+bool bfd_alt_mach_code (bfd *abfd, int alternative);
+
+bfd_vma bfd_emul_get_maxpagesize (const char *);
+
+bfd_vma bfd_emul_get_commonpagesize (const char *);
+
+char *bfd_demangle (bfd *, const char *, int);
+
+/* Extracted from bfdio.c.  */
+bfd_size_type bfd_read (void *, bfd_size_type, bfd *)
+ATTRIBUTE_WARN_UNUSED_RESULT;
+
+bfd_size_type bfd_write (const void *, bfd_size_type, bfd *)
+ATTRIBUTE_WARN_UNUSED_RESULT;
 
+file_ptr bfd_tell (bfd *) ATTRIBUTE_WARN_UNUSED_RESULT;
+
+int bfd_flush (bfd *);
+
+int bfd_stat (bfd *, struct stat *) ATTRIBUTE_WARN_UNUSED_RESULT;
+
+int bfd_seek (bfd *, file_ptr, int) ATTRIBUTE_WARN_UNUSED_RESULT;
+
+long bfd_get_mtime (bfd *abfd);
+
+ufile_ptr bfd_get_size (bfd *abfd);
+
+ufile_ptr bfd_get_file_size (bfd *abfd);
+
+void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
+    int prot, int flags, file_ptr offset,
+    void **map_addr, bfd_size_type *map_len)
+ATTRIBUTE_WARN_UNUSED_RESULT;
+
+time_t bfd_get_current_time (time_t now);
+
+/* Extracted from bfdwin.c.  */
+struct _bfd_window_internal;
+
+typedef struct _bfd_window
+{
+  /* What the user asked for.  */
+  void *data;
+  bfd_size_type size;
+  /* The actual window used by BFD.  Small user-requested read-only
+     regions sharing a page may share a single window into the object
+     file.  Read-write versions shouldn't until I've fixed things to
+     keep track of which portions have been claimed by the
+     application; don't want to give the same region back when the
+     application wants two writable copies!  */
+  struct _bfd_window_internal *i;
+}
+bfd_window;
+
+void bfd_init_window (bfd_window *);
+
+void bfd_free_window (bfd_window *);
+
+bool bfd_get_file_window
+   (bfd *, file_ptr, bfd_size_type, bfd_window *, bool /*writable*/);
+
+/* Extracted from cache.c.  */
+bool bfd_cache_close (bfd *abfd);
+
+bool bfd_cache_close_all (void);
+
+unsigned bfd_cache_size (void);
+
+/* Extracted from compress.c.  */
+/* Types of compressed DWARF debug sections.  */
+enum compressed_debug_section_type
+{
+  COMPRESS_DEBUG_NONE = 0,
+  COMPRESS_DEBUG_GNU_ZLIB = 1 << 1,
+  COMPRESS_DEBUG_GABI_ZLIB = 1 << 2,
+  COMPRESS_DEBUG_ZSTD = 1 << 3,
+  COMPRESS_UNKNOWN = 1 << 4
+};
+
+/* Tuple for compressed_debug_section_type and their name.  */
+struct compressed_type_tuple
+{
+  enum compressed_debug_section_type type;
+  const char *name;
+};
+
+/* Compression header ch_type values.  */
+enum compression_type
+{
+  ch_none = 0,
+  ch_compress_zlib = 1 ,       /* Compressed with zlib.  */
+  ch_compress_zstd = 2         /* Compressed with zstd (www.zstandard.org).  */
+};
+
+static inline char *
+bfd_debug_name_to_zdebug (bfd *abfd, const char *name)
+{
+  size_t len = strlen (name);
+  char *new_name = (char *) bfd_alloc (abfd, len + 2);
+  if (new_name == NULL)
+    return NULL;
+  new_name[0] = '.';
+  new_name[1] = 'z';
+  memcpy (new_name + 2, name + 1, len);
+  return new_name;
+}
+
+static inline char *
+bfd_zdebug_name_to_debug (bfd *abfd, const char *name)
+{
+  size_t len = strlen (name);
+  char *new_name = (char *) bfd_alloc (abfd, len);
+  if (new_name == NULL)
+    return NULL;
+  new_name[0] = '.';
+  memcpy (new_name + 1, name + 2, len - 1);
+  return new_name;
+}
+
+enum compressed_debug_section_type
+bfd_get_compression_algorithm (const char *name);
+
+const char *bfd_get_compression_algorithm_name
+   (enum compressed_debug_section_type type);
+
+void bfd_update_compression_header
+   (bfd *abfd, bfd_byte *contents, asection *sec);
+
+int bfd_get_compression_header_size (bfd *abfd, asection *sec);
+
+bool bfd_convert_section_setup
+   (bfd *ibfd, asection *isec, bfd *obfd,
+    const char **new_name, bfd_size_type *new_size);
+
+bool bfd_convert_section_contents
+   (bfd *ibfd, asection *isec, bfd *obfd,
+    bfd_byte **ptr, bfd_size_type *ptr_size);
+
+bool bfd_get_full_section_contents
+   (bfd *abfd, asection *section, bfd_byte **ptr);
+
+bool bfd_is_section_compressed_info
+   (bfd *abfd, asection *section,
+    int *compression_header_size_p,
+    bfd_size_type *uncompressed_size_p,
+    unsigned int *uncompressed_alignment_power_p,
+    enum compression_type *ch_type);
+
+bool bfd_is_section_compressed
+   (bfd *abfd, asection *section);
+
+bool bfd_init_section_decompress_status
+   (bfd *abfd, asection *section);
+
+bool bfd_init_section_compress_status
+   (bfd *abfd, asection *section);
+
+bool bfd_compress_section
+   (bfd *abfd, asection *section, bfd_byte *uncompressed_buffer);
+
+/* Extracted from corefile.c.  */
+const char *bfd_core_file_failing_command (bfd *abfd);
+
+int bfd_core_file_failing_signal (bfd *abfd);
+
+int bfd_core_file_pid (bfd *abfd);
+
+bool core_file_matches_executable_p
+   (bfd *core_bfd, bfd *exec_bfd);
+
+bool generic_core_file_matches_executable_p
+   (bfd *core_bfd, bfd *exec_bfd);
+
+/* Extracted from format.c.  */
+bool bfd_check_format (bfd *abfd, bfd_format format);
+
+bool bfd_check_format_matches
+   (bfd *abfd, bfd_format format, char ***matching);
+
+bool bfd_set_format (bfd *abfd, bfd_format format);
+
+const char *bfd_format_string (bfd_format format);
+
+/* Extracted from linker.c.  */
+/* Return TRUE if the symbol described by a linker hash entry H
+   is going to be absolute.  Linker-script defined symbols can be
+   converted from absolute to section-relative ones late in the
+   link.  Use this macro to correctly determine whether the symbol
+   will actually end up absolute in output.  */
+#define bfd_is_abs_symbol(H) \
+  (((H)->type == bfd_link_hash_defined \
+    || (H)->type == bfd_link_hash_defweak) \
+   && bfd_is_abs_section ((H)->u.def.section) \
+   && !(H)->rel_from_abs)
+
+bool bfd_link_split_section (bfd *abfd, asection *sec);
+
+#define bfd_link_split_section(abfd, sec) \
+       BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
+
+bool bfd_section_already_linked (bfd *abfd,
+    asection *sec,
+    struct bfd_link_info *info);
+
+#define bfd_section_already_linked(abfd, sec, info) \
+       BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
+
+bool bfd_generic_define_common_symbol
+   (bfd *output_bfd, struct bfd_link_info *info,
+    struct bfd_link_hash_entry *h);
+
+#define bfd_define_common_symbol(output_bfd, info, h) \
+       BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
+
+void _bfd_generic_link_hide_symbol
+   (bfd *output_bfd, struct bfd_link_info *info,
+    struct bfd_link_hash_entry *h);
+
+#define bfd_link_hide_symbol(output_bfd, info, h) \
+       BFD_SEND (output_bfd, _bfd_link_hide_symbol, (output_bfd, info, h))
+
+struct bfd_link_hash_entry *bfd_generic_define_start_stop
+   (struct bfd_link_info *info,
+    const char *symbol, asection *sec);
+
+#define bfd_define_start_stop(output_bfd, info, symbol, sec) \
+       BFD_SEND (output_bfd, _bfd_define_start_stop, (info, symbol, sec))
+
+struct bfd_elf_version_tree * bfd_find_version_for_sym
+   (struct bfd_elf_version_tree *verdefs,
+    const char *sym_name, bool *hide);
+
+bool bfd_hide_sym_by_version
+   (struct bfd_elf_version_tree *verdefs, const char *sym_name);
+
+bool bfd_link_check_relocs
+   (bfd *abfd, struct bfd_link_info *info);
+
+bool _bfd_generic_link_check_relocs
+   (bfd *abfd, struct bfd_link_info *info);
+
+bool bfd_merge_private_bfd_data
+   (bfd *ibfd, struct bfd_link_info *info);
+
+#define bfd_merge_private_bfd_data(ibfd, info) \
+       BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \
+		 (ibfd, info))
+
+/* Extracted from opncls.c.  */
+/* Set to N to open the next N BFDs using an alternate id space.  */
+extern unsigned int bfd_use_reserved_id;
+
+bfd *bfd_fopen (const char *filename, const char *target,
+    const char *mode, int fd);
+
+bfd *bfd_openr (const char *filename, const char *target);
+
+bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
+
+bfd *bfd_fdopenw (const char *filename, const char *target, int fd);
+
+bfd *bfd_openstreamr (const char * filename, const char * target,
+    void * stream);
+
+bfd *bfd_openr_iovec (const char *filename, const char *target,
+    void *(*open_func) (struct bfd *nbfd,
+	void *open_closure),
+    void *open_closure,
+    file_ptr (*pread_func) (struct bfd *nbfd,
+	void *stream,
+	void *buf,
+	file_ptr nbytes,
+	file_ptr offset),
+    int (*close_func) (struct bfd *nbfd,
+	void *stream),
+    int (*stat_func) (struct bfd *abfd,
+	void *stream,
+	struct stat *sb));
+
+bfd *bfd_openw (const char *filename, const char *target);
+
+bfd *bfd_elf_bfd_from_remote_memory
+   (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
+    int (*target_read_memory)
+       (bfd_vma vma, bfd_byte *myaddr, bfd_size_type len));
+
+bool bfd_close (bfd *abfd);
+
+bool bfd_close_all_done (bfd *);
+
+bfd *bfd_create (const char *filename, bfd *templ);
+
+bool bfd_make_writable (bfd *abfd);
+
+bool bfd_make_readable (bfd *abfd);
+
+uint32_t bfd_calc_gnu_debuglink_crc32
+   (uint32_t crc, const bfd_byte *buf, bfd_size_type len);
+
+char *bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out);
+
+char *bfd_get_alt_debug_link_info (bfd * abfd,
+    bfd_size_type *buildid_len,
+    bfd_byte **buildid_out);
+
+char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
+
+char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir);
+
+struct bfd_section *bfd_create_gnu_debuglink_section
+   (bfd *abfd, const char *filename);
+
+bool bfd_fill_in_gnu_debuglink_section
+   (bfd *abfd, struct bfd_section *sect, const char *filename);
+
+char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir);
+
+const char *bfd_set_filename (bfd *abfd, const char *filename);
+
+/* Extracted from reloc.c.  */
 typedef enum bfd_reloc_status
 {
   /* No errors detected.  Note - the value 2 is used so that it
@@ -2024,7 +3073,7 @@ typedef enum bfd_reloc_status
   /* Unsupported relocation size requested.  */
   bfd_reloc_notsupported,
 
-  /* Unused.  */
+  /* Target specific meaning.  */
   bfd_reloc_other,
 
   /* The symbol to relocate against was undefined.  */
@@ -2039,7 +3088,7 @@ typedef enum bfd_reloc_status
 
 typedef const struct reloc_howto_struct reloc_howto_type;
 
-typedef struct reloc_cache_entry
+struct reloc_cache_entry
 {
   /* A pointer into the canonical table of pointers.  */
   struct bfd_symbol **sym_ptr_ptr;
@@ -2053,9 +3102,7 @@ typedef struct reloc_cache_entry
   /* Pointer to how to perform the required relocation.  */
   reloc_howto_type *howto;
 
-}
-arelent;
-
+};
 
 enum complain_overflow
 {
@@ -2075,6 +3122,7 @@ enum complain_overflow
      unsigned number.  */
   complain_overflow_unsigned
 };
+
 struct reloc_howto_struct
 {
   /* The type field has mainly a documentary use - the back end can
@@ -2082,10 +3130,8 @@ struct reloc_howto_struct
      an external reloc number is stored in this field.  */
   unsigned int type;
 
-  /* The encoded size of the item to be relocated.  This is *not* a
-     power-of-two measure.  Use bfd_get_reloc_size to find the size
-     of the item in bytes.  */
-  unsigned int size:3;
+  /* The size of the item to be relocated in bytes.  */
+  unsigned int size:4;
 
   /* The number of bits in the field to be relocated.  This is used
      when doing overflow checking.  */
@@ -2134,6 +3180,11 @@ struct reloc_howto_struct
      empty (e.g., ELF); this flag signals the fact.  */
   unsigned int pcrel_offset:1;
 
+  /* Whether bfd_install_relocation should just install the addend,
+     or should follow the practice of some older object formats and
+     install a value including the symbol.  */
+  unsigned int install_addend:1;
+
   /* src_mask selects the part of the instruction (or data) to be used
      in the relocation sum.  If the target relocations don't have an
      addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
@@ -2159,15 +3210,22 @@ struct reloc_howto_struct
   const char *name;
 };
 
+#define HOWTO_INSTALL_ADDEND 0
+#define HOWTO_RSIZE(sz) ((sz) < 0 ? -(sz) : (sz))
 #define HOWTO(type, right, size, bits, pcrel, left, ovf, func, name,   \
-              inplace, src_mask, dst_mask, pcrel_off)                  \
-  { (unsigned) type, size < 0 ? -size : size, bits, right, left, ovf,  \
-    size < 0, pcrel, inplace, pcrel_off, src_mask, dst_mask, func, name }
+	      inplace, src_mask, dst_mask, pcrel_off)                  \
+  { (unsigned) type, HOWTO_RSIZE (size), bits, right, left, ovf,       \
+    size < 0, pcrel, inplace, pcrel_off, HOWTO_INSTALL_ADDEND,         \
+    src_mask, dst_mask, func, name }
 #define EMPTY_HOWTO(C) \
-  HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
-         NULL, FALSE, 0, 0, FALSE)
+  HOWTO ((C), 0, 1, 0, false, 0, complain_overflow_dont, NULL, \
+	 NULL, false, 0, 0, false)
 
-unsigned int bfd_get_reloc_size (reloc_howto_type *);
+static inline unsigned int
+bfd_get_reloc_size (reloc_howto_type *howto)
+{
+  return howto->size;
+}
 
 typedef struct relent_chain
 {
@@ -2183,7 +3241,7 @@ bfd_reloc_status_type bfd_check_overflow
     unsigned int addrsize,
     bfd_vma relocation);
 
-bfd_boolean bfd_reloc_offset_in_range
+bool bfd_reloc_offset_in_range
    (reloc_howto_type *howto,
     bfd *abfd,
     asection *section,
@@ -2204,11 +3262,12 @@ bfd_reloc_status_type bfd_install_reloca
     asection *input_section,
     char **error_message);
 
-enum bfd_reloc_code_real {
+enum bfd_reloc_code_real
+{
   _dummy_first_bfd_reloc_code_real,
 
 
-/* Basic absolute relocations of N bits.  */
+  /* Basic absolute relocations of N bits.  */
   BFD_RELOC_64,
   BFD_RELOC_32,
   BFD_RELOC_26,
@@ -2217,9 +3276,10 @@ enum bfd_reloc_code_real {
   BFD_RELOC_14,
   BFD_RELOC_8,
 
-/* PC-relative relocations.  Sometimes these are relative to the address
-of the relocation itself; sometimes they are relative to the start of
-the section containing the relocation.  It depends on the specific target.  */
+  /* PC-relative relocations.  Sometimes these are relative to the
+     address of the relocation itself; sometimes they are relative to the
+     start of the section containing the relocation.  It depends on the
+     specific target.  */
   BFD_RELOC_64_PCREL,
   BFD_RELOC_32_PCREL,
   BFD_RELOC_24_PCREL,
@@ -2227,10 +3287,11 @@ the section containing the relocation.
   BFD_RELOC_12_PCREL,
   BFD_RELOC_8_PCREL,
 
-/* Section relative relocations.  Some targets need this for DWARF2.  */
+  /* Section relative relocations.  Some targets need this for DWARF2.  */
   BFD_RELOC_32_SECREL,
+  BFD_RELOC_16_SECIDX,
 
-/* For ELF.  */
+  /* For ELF.  */
   BFD_RELOC_32_GOT_PCREL,
   BFD_RELOC_16_GOT_PCREL,
   BFD_RELOC_8_GOT_PCREL,
@@ -2253,11 +3314,11 @@ the section containing the relocation.
   BFD_RELOC_HI16_S_PLTOFF,
   BFD_RELOC_8_PLTOFF,
 
-/* Size relocations.  */
+  /* Size relocations.  */
   BFD_RELOC_SIZE32,
   BFD_RELOC_SIZE64,
 
-/* Relocations used by 68K ELF.  */
+  /* Relocations used by 68K ELF.  */
   BFD_RELOC_68K_GLOB_DAT,
   BFD_RELOC_68K_JMP_SLOT,
   BFD_RELOC_68K_RELATIVE,
@@ -2277,7 +3338,7 @@ the section containing the relocation.
   BFD_RELOC_68K_TLS_LE16,
   BFD_RELOC_68K_TLS_LE8,
 
-/* Linkage-table relative.  */
+  /* Linkage-table relative.  */
   BFD_RELOC_32_BASEREL,
   BFD_RELOC_16_BASEREL,
   BFD_RELOC_LO16_BASEREL,
@@ -2286,33 +3347,33 @@ the section containing the relocation.
   BFD_RELOC_8_BASEREL,
   BFD_RELOC_RVA,
 
-/* Absolute 8-bit relocation, but used to form an address like 0xFFnn.  */
+  /* Absolute 8-bit relocation, but used to form an address like 0xFFnn.  */
   BFD_RELOC_8_FFnn,
 
-/* These PC-relative relocations are stored as word displacements --
-i.e., byte displacements shifted right two bits.  The 30-bit word
-displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
-SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
-signed 16-bit displacement is used on the MIPS, and the 23-bit
-displacement is used on the Alpha.  */
+  /* These PC-relative relocations are stored as word displacements --
+     i.e., byte displacements shifted right two bits.  The 30-bit word
+     displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
+     SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
+     signed 16-bit displacement is used on the MIPS, and the 23-bit
+     displacement is used on the Alpha.  */
   BFD_RELOC_32_PCREL_S2,
   BFD_RELOC_16_PCREL_S2,
   BFD_RELOC_23_PCREL_S2,
 
-/* High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
-the target word.  These are used on the SPARC.  */
+  /* High 22 bits and low 10 bits of 32-bit value, placed into lower bits
+     of the target word.  These are used on the SPARC.  */
   BFD_RELOC_HI22,
   BFD_RELOC_LO10,
 
-/* For systems that allocate a Global Pointer register, these are
-displacements off that register.  These relocation types are
-handled specially, because the value the register will have is
-decided relatively late.  */
+  /* For systems that allocate a Global Pointer register, these are
+     displacements off that register.  These relocation types are
+     handled specially, because the value the register will have is
+     decided relatively late.  */
   BFD_RELOC_GPREL16,
   BFD_RELOC_GPREL32,
 
-/* SPARC ELF relocations.  There is probably some overlap with other
-relocation types already defined.  */
+  /* SPARC ELF relocations.  There is probably some overlap with other
+     relocation types already defined.  */
   BFD_RELOC_NONE,
   BFD_RELOC_SPARC_WDISP22,
   BFD_RELOC_SPARC22,
@@ -2338,11 +3399,11 @@ relocation types already defined.  */
   BFD_RELOC_SPARC_JMP_IREL,
   BFD_RELOC_SPARC_IRELATIVE,
 
-/* I think these are specific to SPARC a.out (e.g., Sun 4).  */
+  /* I think these are specific to SPARC a.out (e.g., Sun 4).  */
   BFD_RELOC_SPARC_BASE13,
   BFD_RELOC_SPARC_BASE22,
 
-/* SPARC64 relocations  */
+  /* SPARC64 relocations.  */
 #define BFD_RELOC_SPARC_64 BFD_RELOC_64
   BFD_RELOC_SPARC_10,
   BFD_RELOC_SPARC_11,
@@ -2372,10 +3433,10 @@ relocation types already defined.  */
   BFD_RELOC_SPARC_SIZE64,
   BFD_RELOC_SPARC_WDISP10,
 
-/* SPARC little endian relocation  */
+  /* SPARC little endian relocation.  */
   BFD_RELOC_SPARC_REV32,
 
-/* SPARC TLS relocations  */
+  /* SPARC TLS relocations.  */
   BFD_RELOC_SPARC_TLS_GD_HI22,
   BFD_RELOC_SPARC_TLS_GD_LO10,
   BFD_RELOC_SPARC_TLS_GD_ADD,
@@ -2401,7 +3462,7 @@ relocation types already defined.  */
   BFD_RELOC_SPARC_TLS_TPOFF32,
   BFD_RELOC_SPARC_TLS_TPOFF64,
 
-/* SPU Relocations.  */
+  /* SPU Relocations.  */
   BFD_RELOC_SPU_IMM7,
   BFD_RELOC_SPU_IMM8,
   BFD_RELOC_SPU_IMM10,
@@ -2418,92 +3479,92 @@ relocation types already defined.  */
   BFD_RELOC_SPU_PPU64,
   BFD_RELOC_SPU_ADD_PIC,
 
-/* Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
-"addend" in some special way.
-For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
-writing; when reading, it will be the absolute section symbol.  The
-addend is the displacement in bytes of the "lda" instruction from
-the "ldah" instruction (which is at the address of this reloc).  */
+  /* Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
+     "addend" in some special way.
+     For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
+     writing; when reading, it will be the absolute section symbol.  The
+     addend is the displacement in bytes of the "lda" instruction from
+     the "ldah" instruction (which is at the address of this reloc).  */
   BFD_RELOC_ALPHA_GPDISP_HI16,
 
-/* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
-with GPDISP_HI16 relocs.  The addend is ignored when writing the
-relocations out, and is filled in with the file's GP value on
-reading, for convenience.  */
+  /* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
+     with GPDISP_HI16 relocs.  The addend is ignored when writing the
+     relocations out, and is filled in with the file's GP value on
+     reading, for convenience.  */
   BFD_RELOC_ALPHA_GPDISP_LO16,
 
-/* The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
-relocation except that there is no accompanying GPDISP_LO16
-relocation.  */
+  /* The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
+     relocation except that there is no accompanying GPDISP_LO16
+     relocation.  */
   BFD_RELOC_ALPHA_GPDISP,
 
-/* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
-the assembler turns it into a LDQ instruction to load the address of
-the symbol, and then fills in a register in the real instruction.
-
-The LITERAL reloc, at the LDQ instruction, refers to the .lita
-section symbol.  The addend is ignored when writing, but is filled
-in with the file's GP value on reading, for convenience, as with the
-GPDISP_LO16 reloc.
-
-The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
-It should refer to the symbol to be referenced, as with 16_GOTOFF,
-but it generates output not based on the position within the .got
-section, but relative to the GP value chosen for the file during the
-final link stage.
-
-The LITUSE reloc, on the instruction using the loaded address, gives
-information to the linker that it might be able to use to optimize
-away some literal section references.  The symbol is ignored (read
-as the absolute section symbol), and the "addend" indicates the type
-of instruction using the register:
-1 - "memory" fmt insn
-2 - byte-manipulation (byte offset reg)
-3 - jsr (target of branch)  */
+  /* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
+     the assembler turns it into a LDQ instruction to load the address of
+     the symbol, and then fills in a register in the real instruction.
+
+     The LITERAL reloc, at the LDQ instruction, refers to the .lita
+     section symbol.  The addend is ignored when writing, but is filled
+     in with the file's GP value on reading, for convenience, as with the
+     GPDISP_LO16 reloc.
+
+     The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
+     It should refer to the symbol to be referenced, as with 16_GOTOFF,
+     but it generates output not based on the position within the .got
+     section, but relative to the GP value chosen for the file during the
+     final link stage.
+
+     The LITUSE reloc, on the instruction using the loaded address, gives
+     information to the linker that it might be able to use to optimize
+     away some literal section references.  The symbol is ignored (read
+     as the absolute section symbol), and the "addend" indicates the type
+     of instruction using the register:
+     1 - "memory" fmt insn
+     2 - byte-manipulation (byte offset reg)
+     3 - jsr (target of branch)  */
   BFD_RELOC_ALPHA_LITERAL,
   BFD_RELOC_ALPHA_ELF_LITERAL,
   BFD_RELOC_ALPHA_LITUSE,
 
-/* The HINT relocation indicates a value that should be filled into the
-"hint" field of a jmp/jsr/ret instruction, for possible branch-
-prediction logic which may be provided on some processors.  */
+  /* The HINT relocation indicates a value that should be filled into the
+     "hint" field of a jmp/jsr/ret instruction, for possible branch-
+     prediction logic which may be provided on some processors.  */
   BFD_RELOC_ALPHA_HINT,
 
-/* The LINKAGE relocation outputs a linkage pair in the object file,
-which is filled by the linker.  */
+  /* The LINKAGE relocation outputs a linkage pair in the object file,
+     which is filled by the linker.  */
   BFD_RELOC_ALPHA_LINKAGE,
 
-/* The CODEADDR relocation outputs a STO_CA in the object file,
-which is filled by the linker.  */
+  /* The CODEADDR relocation outputs a STO_CA in the object file,
+     which is filled by the linker.  */
   BFD_RELOC_ALPHA_CODEADDR,
 
-/* The GPREL_HI/LO relocations together form a 32-bit offset from the
-GP register.  */
+  /* The GPREL_HI/LO relocations together form a 32-bit offset from the
+     GP register.  */
   BFD_RELOC_ALPHA_GPREL_HI16,
   BFD_RELOC_ALPHA_GPREL_LO16,
 
-/* Like BFD_RELOC_23_PCREL_S2, except that the source and target must
-share a common GP, and the target address is adjusted for
-STO_ALPHA_STD_GPLOAD.  */
+  /* Like BFD_RELOC_23_PCREL_S2, except that the source and target must
+     share a common GP, and the target address is adjusted for
+     STO_ALPHA_STD_GPLOAD.  */
   BFD_RELOC_ALPHA_BRSGP,
 
-/* The NOP relocation outputs a NOP if the longword displacement
-between two procedure entry points is < 2^21.  */
+  /* The NOP relocation outputs a NOP if the longword displacement
+     between two procedure entry points is < 2^21.  */
   BFD_RELOC_ALPHA_NOP,
 
-/* The BSR relocation outputs a BSR if the longword displacement
-between two procedure entry points is < 2^21.  */
+  /* The BSR relocation outputs a BSR if the longword displacement
+     between two procedure entry points is < 2^21.  */
   BFD_RELOC_ALPHA_BSR,
 
-/* The LDA relocation outputs a LDA if the longword displacement
-between two procedure entry points is < 2^16.  */
+  /* The LDA relocation outputs a LDA if the longword displacement
+     between two procedure entry points is < 2^16.  */
   BFD_RELOC_ALPHA_LDA,
 
-/* The BOH relocation outputs a BSR if the longword displacement
-between two procedure entry points is < 2^21, or else a hint.  */
+  /* The BOH relocation outputs a BSR if the longword displacement
+     between two procedure entry points is < 2^21, or else a hint.  */
   BFD_RELOC_ALPHA_BOH,
 
-/* Alpha thread-local storage relocations.  */
+  /* Alpha thread-local storage relocations.  */
   BFD_RELOC_ALPHA_TLSGD,
   BFD_RELOC_ALPHA_TLSLDM,
   BFD_RELOC_ALPHA_DTPMOD64,
@@ -2518,55 +3579,55 @@ between two procedure entry points is <
   BFD_RELOC_ALPHA_TPREL_LO16,
   BFD_RELOC_ALPHA_TPREL16,
 
-/* The MIPS jump instruction.  */
+  /* The MIPS jump instruction.  */
   BFD_RELOC_MIPS_JMP,
   BFD_RELOC_MICROMIPS_JMP,
 
-/* The MIPS16 jump instruction.  */
+  /* The MIPS16 jump instruction.  */
   BFD_RELOC_MIPS16_JMP,
 
-/* MIPS16 GP relative reloc.  */
+  /* MIPS16 GP relative reloc.  */
   BFD_RELOC_MIPS16_GPREL,
 
-/* High 16 bits of 32-bit value; simple reloc.  */
+  /* High 16 bits of 32-bit value; simple reloc.  */
   BFD_RELOC_HI16,
 
-/* High 16 bits of 32-bit value but the low 16 bits will be sign
-extended and added to form the final result.  If the low 16
-bits form a negative number, we need to add one to the high value
-to compensate for the borrow when the low bits are added.  */
+  /* High 16 bits of 32-bit value but the low 16 bits will be sign
+     extended and added to form the final result.  If the low 16
+     bits form a negative number, we need to add one to the high value
+     to compensate for the borrow when the low bits are added.  */
   BFD_RELOC_HI16_S,
 
-/* Low 16 bits.  */
+  /* Low 16 bits.  */
   BFD_RELOC_LO16,
 
-/* High 16 bits of 32-bit pc-relative value  */
+  /* High 16 bits of 32-bit pc-relative value.  */
   BFD_RELOC_HI16_PCREL,
 
-/* High 16 bits of 32-bit pc-relative value, adjusted  */
+  /* High 16 bits of 32-bit pc-relative value, adjusted.  */
   BFD_RELOC_HI16_S_PCREL,
 
-/* Low 16 bits of pc-relative value  */
+  /* Low 16 bits of pc-relative value.  */
   BFD_RELOC_LO16_PCREL,
 
-/* Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
-16-bit immediate fields  */
+  /* Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
+     16-bit immediate fields.  */
   BFD_RELOC_MIPS16_GOT16,
   BFD_RELOC_MIPS16_CALL16,
 
-/* MIPS16 high 16 bits of 32-bit value.  */
+  /* MIPS16 high 16 bits of 32-bit value.  */
   BFD_RELOC_MIPS16_HI16,
 
-/* MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
-extended and added to form the final result.  If the low 16
-bits form a negative number, we need to add one to the high value
-to compensate for the borrow when the low bits are added.  */
+  /* MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
+     extended and added to form the final result.  If the low 16
+     bits form a negative number, we need to add one to the high value
+     to compensate for the borrow when the low bits are added.  */
   BFD_RELOC_MIPS16_HI16_S,
 
-/* MIPS16 low 16 bits.  */
+  /* MIPS16 low 16 bits.  */
   BFD_RELOC_MIPS16_LO16,
 
-/* MIPS16 TLS relocations  */
+  /* MIPS16 TLS relocations.  */
   BFD_RELOC_MIPS16_TLS_GD,
   BFD_RELOC_MIPS16_TLS_LDM,
   BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
@@ -2575,31 +3636,31 @@ to compensate for the borrow when the lo
   BFD_RELOC_MIPS16_TLS_TPREL_HI16,
   BFD_RELOC_MIPS16_TLS_TPREL_LO16,
 
-/* Relocation against a MIPS literal section.  */
+  /* Relocation against a MIPS literal section.  */
   BFD_RELOC_MIPS_LITERAL,
   BFD_RELOC_MICROMIPS_LITERAL,
 
-/* microMIPS PC-relative relocations.  */
+  /* microMIPS PC-relative relocations.  */
   BFD_RELOC_MICROMIPS_7_PCREL_S1,
   BFD_RELOC_MICROMIPS_10_PCREL_S1,
   BFD_RELOC_MICROMIPS_16_PCREL_S1,
 
-/* MIPS16 PC-relative relocation.  */
+  /* MIPS16 PC-relative relocation.  */
   BFD_RELOC_MIPS16_16_PCREL_S1,
 
-/* MIPS PC-relative relocations.  */
+  /* MIPS PC-relative relocations.  */
   BFD_RELOC_MIPS_21_PCREL_S2,
   BFD_RELOC_MIPS_26_PCREL_S2,
   BFD_RELOC_MIPS_18_PCREL_S3,
   BFD_RELOC_MIPS_19_PCREL_S2,
 
-/* microMIPS versions of generic BFD relocs.  */
+  /* microMIPS versions of generic BFD relocs.  */
   BFD_RELOC_MICROMIPS_GPREL16,
   BFD_RELOC_MICROMIPS_HI16,
   BFD_RELOC_MICROMIPS_HI16_S,
   BFD_RELOC_MICROMIPS_LO16,
 
-/* MIPS ELF relocations.  */
+  /* MIPS ELF relocations.  */
   BFD_RELOC_MIPS_GOT16,
   BFD_RELOC_MICROMIPS_GOT16,
   BFD_RELOC_MIPS_CALL16,
@@ -2631,7 +3692,7 @@ to compensate for the borrow when the lo
   BFD_RELOC_MICROMIPS_HIGHER,
   BFD_RELOC_MIPS_SCN_DISP,
   BFD_RELOC_MICROMIPS_SCN_DISP,
-  BFD_RELOC_MIPS_REL16,
+  BFD_RELOC_MIPS_16,
   BFD_RELOC_MIPS_RELGOT,
   BFD_RELOC_MIPS_JALR,
   BFD_RELOC_MICROMIPS_JALR,
@@ -2657,17 +3718,14 @@ to compensate for the borrow when the lo
   BFD_RELOC_MICROMIPS_TLS_TPREL_LO16,
   BFD_RELOC_MIPS_EH,
 
-
-/* MIPS ELF relocations (VxWorks and PLT extensions).  */
+  /* MIPS ELF relocations (VxWorks and PLT extensions).  */
   BFD_RELOC_MIPS_COPY,
   BFD_RELOC_MIPS_JUMP_SLOT,
 
-
-/* Moxie ELF relocations.  */
+  /* Moxie ELF relocations.  */
   BFD_RELOC_MOXIE_10_PCREL,
 
-
-/* FT32 ELF relocations.  */
+  /* FT32 ELF relocations.  */
   BFD_RELOC_FT32_10,
   BFD_RELOC_FT32_20,
   BFD_RELOC_FT32_17,
@@ -2678,8 +3736,7 @@ to compensate for the borrow when the lo
   BFD_RELOC_FT32_15,
   BFD_RELOC_FT32_DIFF32,
 
-
-/* Fujitsu Frv Relocations.  */
+  /* Fujitsu Frv Relocations.  */
   BFD_RELOC_FRV_LABEL16,
   BFD_RELOC_FRV_LABEL24,
   BFD_RELOC_FRV_LO16,
@@ -2720,45 +3777,43 @@ to compensate for the borrow when the lo
   BFD_RELOC_FRV_TLSOFF_RELAX,
   BFD_RELOC_FRV_TLSMOFF,
 
-
-/* This is a 24bit GOT-relative reloc for the mn10300.  */
+  /* This is a 24bit GOT-relative reloc for the mn10300.  */
   BFD_RELOC_MN10300_GOTOFF24,
 
-/* This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.  */
+  /* This is a 32bit GOT-relative reloc for the mn10300, offset by two
+     bytes in the instruction.  */
   BFD_RELOC_MN10300_GOT32,
 
-/* This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.  */
+  /* This is a 24bit GOT-relative reloc for the mn10300, offset by two
+     bytes in the instruction.  */
   BFD_RELOC_MN10300_GOT24,
 
-/* This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.  */
+  /* This is a 16bit GOT-relative reloc for the mn10300, offset by two
+     bytes in the instruction.  */
   BFD_RELOC_MN10300_GOT16,
 
-/* Copy symbol at runtime.  */
+  /* Copy symbol at runtime.  */
   BFD_RELOC_MN10300_COPY,
 
-/* Create GOT entry.  */
+  /* Create GOT entry.  */
   BFD_RELOC_MN10300_GLOB_DAT,
 
-/* Create PLT entry.  */
+  /* Create PLT entry.  */
   BFD_RELOC_MN10300_JMP_SLOT,
 
-/* Adjust by program base.  */
+  /* Adjust by program base.  */
   BFD_RELOC_MN10300_RELATIVE,
 
-/* Together with another reloc targeted at the same location,
-allows for a value that is the difference of two symbols
-in the same section.  */
+  /* Together with another reloc targeted at the same location, allows
+     for a value that is the difference of two symbols in the same
+     section.  */
   BFD_RELOC_MN10300_SYM_DIFF,
 
-/* The addend of this reloc is an alignment power that must
-be honoured at the offset's location, regardless of linker
-relaxation.  */
+  /* The addend of this reloc is an alignment power that must be honoured
+     at the offset's location, regardless of linker relaxation.  */
   BFD_RELOC_MN10300_ALIGN,
 
-/* Various TLS-related relocations.  */
+  /* Various TLS-related relocations.  */
   BFD_RELOC_MN10300_TLS_GD,
   BFD_RELOC_MN10300_TLS_LD,
   BFD_RELOC_MN10300_TLS_LDO,
@@ -2769,16 +3824,15 @@ relaxation.  */
   BFD_RELOC_MN10300_TLS_DTPOFF,
   BFD_RELOC_MN10300_TLS_TPOFF,
 
-/* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.  */
+  /* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in
+     the instruction.  */
   BFD_RELOC_MN10300_32_PCREL,
 
-/* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.  */
+  /* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in
+     the instruction.  */
   BFD_RELOC_MN10300_16_PCREL,
 
-
-/* i386/elf relocations  */
+  /* i386/elf relocations.  */
   BFD_RELOC_386_GOT32,
   BFD_RELOC_386_PLT32,
   BFD_RELOC_386_COPY,
@@ -2805,7 +3859,7 @@ instruction.  */
   BFD_RELOC_386_IRELATIVE,
   BFD_RELOC_386_GOT32X,
 
-/* x86-64/elf relocations  */
+  /* x86-64/elf relocations.  */
   BFD_RELOC_X86_64_GOT32,
   BFD_RELOC_X86_64_PLT32,
   BFD_RELOC_X86_64_COPY,
@@ -2837,8 +3891,11 @@ instruction.  */
   BFD_RELOC_X86_64_PLT32_BND,
   BFD_RELOC_X86_64_GOTPCRELX,
   BFD_RELOC_X86_64_REX_GOTPCRELX,
+  BFD_RELOC_X86_64_CODE_4_GOTPCRELX,
+  BFD_RELOC_X86_64_CODE_4_GOTTPOFF,
+  BFD_RELOC_X86_64_CODE_4_GOTPC32_TLSDESC,
 
-/* ns32k relocations  */
+  /* ns32k relocations.  */
   BFD_RELOC_NS32K_IMM_8,
   BFD_RELOC_NS32K_IMM_16,
   BFD_RELOC_NS32K_IMM_32,
@@ -2852,11 +3909,11 @@ instruction.  */
   BFD_RELOC_NS32K_DISP_16_PCREL,
   BFD_RELOC_NS32K_DISP_32_PCREL,
 
-/* PDP11 relocations  */
+  /* PDP11 relocations.  */
   BFD_RELOC_PDP11_DISP_8_PCREL,
   BFD_RELOC_PDP11_DISP_6_PCREL,
 
-/* Picojava relocs.  Not all of these appear in object files.  */
+  /* Picojava relocs.  Not all of these appear in object files.  */
   BFD_RELOC_PJ_CODE_HI16,
   BFD_RELOC_PJ_CODE_LO16,
   BFD_RELOC_PJ_CODE_DIR16,
@@ -2864,10 +3921,12 @@ instruction.  */
   BFD_RELOC_PJ_CODE_REL16,
   BFD_RELOC_PJ_CODE_REL32,
 
-/* Power(rs6000) and PowerPC relocations.  */
+  /* Power(rs6000) and PowerPC relocations.  */
   BFD_RELOC_PPC_B26,
   BFD_RELOC_PPC_BA26,
   BFD_RELOC_PPC_TOC16,
+  BFD_RELOC_PPC_TOC16_LO,
+  BFD_RELOC_PPC_TOC16_HI,
   BFD_RELOC_PPC_B16,
   BFD_RELOC_PPC_B16_BRTAKEN,
   BFD_RELOC_PPC_B16_BRNTAKEN,
@@ -2914,6 +3973,7 @@ instruction.  */
   BFD_RELOC_PPC_VLE_SDAREL_HA16D,
   BFD_RELOC_PPC_16DX_HA,
   BFD_RELOC_PPC_REL16DX_HA,
+  BFD_RELOC_PPC_NEG,
   BFD_RELOC_PPC64_HIGHER,
   BFD_RELOC_PPC64_HIGHER_S,
   BFD_RELOC_PPC64_HIGHEST,
@@ -2948,6 +4008,7 @@ instruction.  */
   BFD_RELOC_PPC64_ADDR64_LOCAL,
   BFD_RELOC_PPC64_ENTRY,
   BFD_RELOC_PPC64_REL24_NOTOC,
+  BFD_RELOC_PPC64_REL24_P9NOTOC,
   BFD_RELOC_PPC64_D34,
   BFD_RELOC_PPC64_D34_LO,
   BFD_RELOC_PPC64_D34_HI30,
@@ -2966,10 +4027,14 @@ instruction.  */
   BFD_RELOC_PPC64_D28,
   BFD_RELOC_PPC64_PCREL28,
 
-/* PowerPC and PowerPC64 thread-local storage relocations.  */
+  /* PowerPC and PowerPC64 thread-local storage relocations.  */
   BFD_RELOC_PPC_TLS,
   BFD_RELOC_PPC_TLSGD,
   BFD_RELOC_PPC_TLSLD,
+  BFD_RELOC_PPC_TLSLE,
+  BFD_RELOC_PPC_TLSIE,
+  BFD_RELOC_PPC_TLSM,
+  BFD_RELOC_PPC_TLSML,
   BFD_RELOC_PPC_DTPMOD,
   BFD_RELOC_PPC_TPREL16,
   BFD_RELOC_PPC_TPREL16_LO,
@@ -2997,6 +4062,12 @@ instruction.  */
   BFD_RELOC_PPC_GOT_DTPREL16_LO,
   BFD_RELOC_PPC_GOT_DTPREL16_HI,
   BFD_RELOC_PPC_GOT_DTPREL16_HA,
+  BFD_RELOC_PPC64_TLSGD,
+  BFD_RELOC_PPC64_TLSLD,
+  BFD_RELOC_PPC64_TLSLE,
+  BFD_RELOC_PPC64_TLSIE,
+  BFD_RELOC_PPC64_TLSM,
+  BFD_RELOC_PPC64_TLSML,
   BFD_RELOC_PPC64_TPREL16_DS,
   BFD_RELOC_PPC64_TPREL16_LO_DS,
   BFD_RELOC_PPC64_TPREL16_HIGH,
@@ -3015,63 +4086,64 @@ instruction.  */
   BFD_RELOC_PPC64_DTPREL16_HIGHESTA,
   BFD_RELOC_PPC64_TPREL34,
   BFD_RELOC_PPC64_DTPREL34,
-  BFD_RELOC_PPC64_GOT_TLSGD34,
-  BFD_RELOC_PPC64_GOT_TLSLD34,
-  BFD_RELOC_PPC64_GOT_TPREL34,
-  BFD_RELOC_PPC64_GOT_DTPREL34,
+  BFD_RELOC_PPC64_GOT_TLSGD_PCREL34,
+  BFD_RELOC_PPC64_GOT_TLSLD_PCREL34,
+  BFD_RELOC_PPC64_GOT_TPREL_PCREL34,
+  BFD_RELOC_PPC64_GOT_DTPREL_PCREL34,
   BFD_RELOC_PPC64_TLS_PCREL,
 
-/* IBM 370/390 relocations  */
+  /* IBM 370/390 relocations.  */
   BFD_RELOC_I370_D12,
 
-/* The type of reloc used to build a constructor table - at the moment
-probably a 32 bit wide absolute relocation, but the target can choose.
-It generally does map to one of the other relocation types.  */
+  /* The type of reloc used to build a constructor table - at the moment
+     probably a 32 bit wide absolute relocation, but the target can choose.
+     It generally does map to one of the other relocation types.  */
   BFD_RELOC_CTOR,
 
-/* ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
-not stored in the instruction.  */
+  /* ARM 26 bit pc-relative branch.  The lowest two bits must be zero and
+     are not stored in the instruction.  */
   BFD_RELOC_ARM_PCREL_BRANCH,
 
-/* ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
-not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
-field in the instruction.  */
+  /* ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
+     not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
+     field in the instruction.  */
   BFD_RELOC_ARM_PCREL_BLX,
 
-/* Thumb 22 bit pc-relative branch.  The lowest bit must be zero and is
-not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
-field in the instruction.  */
+  /* Thumb 22 bit pc-relative branch.  The lowest bit must be zero and is
+     not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
+     field in the instruction.  */
   BFD_RELOC_THUMB_PCREL_BLX,
 
-/* ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction.  */
+  /* ARM 26-bit pc-relative branch for an unconditional BL or BLX
+     instruction.  */
   BFD_RELOC_ARM_PCREL_CALL,
 
-/* ARM 26-bit pc-relative branch for B or conditional BL instruction.  */
+  /* ARM 26-bit pc-relative branch for B or conditional BL instruction.  */
   BFD_RELOC_ARM_PCREL_JUMP,
 
-/* ARM 5-bit pc-relative branch for Branch Future instructions.  */
+  /* ARM 5-bit pc-relative branch for Branch Future instructions.  */
   BFD_RELOC_THUMB_PCREL_BRANCH5,
 
-/* ARM 6-bit pc-relative branch for BFCSEL instruction.  */
+  /* ARM 6-bit pc-relative branch for BFCSEL instruction.  */
   BFD_RELOC_THUMB_PCREL_BFCSEL,
 
-/* ARM 17-bit pc-relative branch for Branch Future instructions.  */
+  /* ARM 17-bit pc-relative branch for Branch Future instructions.  */
   BFD_RELOC_ARM_THUMB_BF17,
 
-/* ARM 13-bit pc-relative branch for BFCSEL instruction.  */
+  /* ARM 13-bit pc-relative branch for BFCSEL instruction.  */
   BFD_RELOC_ARM_THUMB_BF13,
 
-/* ARM 19-bit pc-relative branch for Branch Future Link instruction.  */
+  /* ARM 19-bit pc-relative branch for Branch Future Link instruction.  */
   BFD_RELOC_ARM_THUMB_BF19,
 
-/* ARM 12-bit pc-relative branch for Low Overhead Loop instructions.  */
+  /* ARM 12-bit pc-relative branch for Low Overhead Loop instructions.  */
   BFD_RELOC_ARM_THUMB_LOOP12,
 
-/* Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
-The lowest bit must be zero and is not stored in the instruction.
-Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
-"nn" one smaller in all cases.  Note further that BRANCH23
-corresponds to R_ARM_THM_CALL.  */
+  /* Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
+     The lowest bit must be zero and is not stored in the instruction.
+     Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
+     "nn" one smaller in all cases.  Note further that BRANCH23
+     corresponds to R_ARM_THM_CALL.  */
   BFD_RELOC_THUMB_PCREL_BRANCH7,
   BFD_RELOC_THUMB_PCREL_BRANCH9,
   BFD_RELOC_THUMB_PCREL_BRANCH12,
@@ -3079,31 +4151,31 @@ corresponds to R_ARM_THM_CALL.  */
   BFD_RELOC_THUMB_PCREL_BRANCH23,
   BFD_RELOC_THUMB_PCREL_BRANCH25,
 
-/* 12-bit immediate offset, used in ARM-format ldr and str instructions.  */
+  /* 12-bit immediate offset, used in ARM-format ldr and str instructions.  */
   BFD_RELOC_ARM_OFFSET_IMM,
 
-/* 5-bit immediate offset, used in Thumb-format ldr and str instructions.  */
+  /* 5-bit immediate offset, used in Thumb-format ldr and str instructions.  */
   BFD_RELOC_ARM_THUMB_OFFSET,
 
-/* Pc-relative or absolute relocation depending on target.  Used for
-entries in .init_array sections.  */
+  /* Pc-relative or absolute relocation depending on target.  Used for
+     entries in .init_array sections.  */
   BFD_RELOC_ARM_TARGET1,
 
-/* Read-only segment base relative address.  */
+  /* Read-only segment base relative address.  */
   BFD_RELOC_ARM_ROSEGREL32,
 
-/* Data segment base relative address.  */
+  /* Data segment base relative address.  */
   BFD_RELOC_ARM_SBREL32,
 
-/* This reloc is used for references to RTTI data from exception handling
-tables.  The actual definition depends on the target.  It may be a
-pc-relative or some form of GOT-indirect relocation.  */
+  /* This reloc is used for references to RTTI data from exception
+     handling tables.  The actual definition depends on the target.  It
+     may be a pc-relative or some form of GOT-indirect relocation.  */
   BFD_RELOC_ARM_TARGET2,
 
-/* 31-bit PC relative address.  */
+  /* 31-bit PC relative address.  */
   BFD_RELOC_ARM_PREL31,
 
-/* Low and High halfword relocations for MOVW and MOVT instructions.  */
+  /* Low and High halfword relocations for MOVW and MOVT instructions.  */
   BFD_RELOC_ARM_MOVW,
   BFD_RELOC_ARM_MOVT,
   BFD_RELOC_ARM_MOVW_PCREL,
@@ -3113,7 +4185,7 @@ pc-relative or some form of GOT-indirect
   BFD_RELOC_ARM_THUMB_MOVW_PCREL,
   BFD_RELOC_ARM_THUMB_MOVT_PCREL,
 
-/* ARM FDPIC specific relocations.  */
+  /* ARM FDPIC specific relocations.  */
   BFD_RELOC_ARM_GOTFUNCDESC,
   BFD_RELOC_ARM_GOTOFFFUNCDESC,
   BFD_RELOC_ARM_FUNCDESC,
@@ -3122,7 +4194,7 @@ pc-relative or some form of GOT-indirect
   BFD_RELOC_ARM_TLS_LDM32_FDPIC,
   BFD_RELOC_ARM_TLS_IE32_FDPIC,
 
-/* Relocations for setting up GOTs and PLTs for shared libraries.  */
+  /* Relocations for setting up GOTs and PLTs for shared libraries.  */
   BFD_RELOC_ARM_JUMP_SLOT,
   BFD_RELOC_ARM_GLOB_DAT,
   BFD_RELOC_ARM_GOT32,
@@ -3132,7 +4204,7 @@ pc-relative or some form of GOT-indirect
   BFD_RELOC_ARM_GOTPC,
   BFD_RELOC_ARM_GOT_PREL,
 
-/* ARM thread-local storage relocations.  */
+  /* ARM thread-local storage relocations.  */
   BFD_RELOC_ARM_TLS_GD32,
   BFD_RELOC_ARM_TLS_LDO32,
   BFD_RELOC_ARM_TLS_LDM32,
@@ -3148,7 +4220,7 @@ pc-relative or some form of GOT-indirect
   BFD_RELOC_ARM_THM_TLS_DESCSEQ,
   BFD_RELOC_ARM_TLS_DESC,
 
-/* ARM group relocations.  */
+  /* ARM group relocations.  */
   BFD_RELOC_ARM_ALU_PC_G0_NC,
   BFD_RELOC_ARM_ALU_PC_G0,
   BFD_RELOC_ARM_ALU_PC_G1_NC,
@@ -3178,20 +4250,20 @@ pc-relative or some form of GOT-indirect
   BFD_RELOC_ARM_LDC_SB_G1,
   BFD_RELOC_ARM_LDC_SB_G2,
 
-/* Annotation of BX instructions.  */
+  /* Annotation of BX instructions.  */
   BFD_RELOC_ARM_V4BX,
 
-/* ARM support for STT_GNU_IFUNC.  */
+  /* ARM support for STT_GNU_IFUNC.  */
   BFD_RELOC_ARM_IRELATIVE,
 
-/* Thumb1 relocations to support execute-only code.  */
+  /* Thumb1 relocations to support execute-only code.  */
   BFD_RELOC_ARM_THUMB_ALU_ABS_G0_NC,
   BFD_RELOC_ARM_THUMB_ALU_ABS_G1_NC,
   BFD_RELOC_ARM_THUMB_ALU_ABS_G2_NC,
   BFD_RELOC_ARM_THUMB_ALU_ABS_G3_NC,
 
-/* These relocs are only used within the ARM assembler.  They are not
-(at present) written to any object files.  */
+  /* These relocs are only used within the ARM assembler.  They are not
+     (at present) written to any object files.  */
   BFD_RELOC_ARM_IMMEDIATE,
   BFD_RELOC_ARM_ADRL_IMMEDIATE,
   BFD_RELOC_ARM_T32_IMMEDIATE,
@@ -3220,7 +4292,7 @@ pc-relative or some form of GOT-indirect
   BFD_RELOC_ARM_THUMB_IMM,
   BFD_RELOC_ARM_THUMB_SHIFT,
 
-/* Renesas / SuperH SH relocs.  Not all of these appear in object files.  */
+  /* Renesas / SuperH SH relocs.  Not all of these appear in object files.  */
   BFD_RELOC_SH_PCDISP8BY2,
   BFD_RELOC_SH_PCDISP12BY2,
   BFD_RELOC_SH_IMM3,
@@ -3319,7 +4391,7 @@ pc-relative or some form of GOT-indirect
   BFD_RELOC_SH_GOTOFFFUNCDESC20,
   BFD_RELOC_SH_FUNCDESC,
 
-/* ARC relocs.  */
+  /* ARC relocs.  */
   BFD_RELOC_ARC_NONE,
   BFD_RELOC_ARC_8,
   BFD_RELOC_ARC_16,
@@ -3390,40 +4462,40 @@ pc-relative or some form of GOT-indirect
   BFD_RELOC_ARC_NPS_CMEM16,
   BFD_RELOC_ARC_JLI_SECTOFF,
 
-/* ADI Blackfin 16 bit immediate absolute reloc.  */
+  /* ADI Blackfin 16 bit immediate absolute reloc.  */
   BFD_RELOC_BFIN_16_IMM,
 
-/* ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.  */
+  /* ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.  */
   BFD_RELOC_BFIN_16_HIGH,
 
-/* ADI Blackfin 'a' part of LSETUP.  */
+  /* ADI Blackfin 'a' part of LSETUP.  */
   BFD_RELOC_BFIN_4_PCREL,
 
-/* ADI Blackfin.  */
+  /* ADI Blackfin.  */
   BFD_RELOC_BFIN_5_PCREL,
 
-/* ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.  */
+  /* ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.  */
   BFD_RELOC_BFIN_16_LOW,
 
-/* ADI Blackfin.  */
+  /* ADI Blackfin.  */
   BFD_RELOC_BFIN_10_PCREL,
 
-/* ADI Blackfin 'b' part of LSETUP.  */
+  /* ADI Blackfin 'b' part of LSETUP.  */
   BFD_RELOC_BFIN_11_PCREL,
 
-/* ADI Blackfin.  */
+  /* ADI Blackfin.  */
   BFD_RELOC_BFIN_12_PCREL_JUMP,
 
-/* ADI Blackfin Short jump, pcrel.  */
+  /* ADI Blackfin Short jump, pcrel.  */
   BFD_RELOC_BFIN_12_PCREL_JUMP_S,
 
-/* ADI Blackfin Call.x not implemented.  */
+  /* ADI Blackfin Call.x not implemented.  */
   BFD_RELOC_BFIN_24_PCREL_CALL_X,
 
-/* ADI Blackfin Long Jump pcrel.  */
+  /* ADI Blackfin Long Jump pcrel.  */
   BFD_RELOC_BFIN_24_PCREL_JUMP_L,
 
-/* ADI Blackfin FD-PIC relocations.  */
+  /* ADI Blackfin FD-PIC relocations.  */
   BFD_RELOC_BFIN_GOT17M4,
   BFD_RELOC_BFIN_GOTHI,
   BFD_RELOC_BFIN_GOTLO,
@@ -3439,184 +4511,174 @@ pc-relative or some form of GOT-indirect
   BFD_RELOC_BFIN_GOTOFFHI,
   BFD_RELOC_BFIN_GOTOFFLO,
 
-/* ADI Blackfin GOT relocation.  */
+  /* ADI Blackfin GOT relocation.  */
   BFD_RELOC_BFIN_GOT,
 
-/* ADI Blackfin PLTPC relocation.  */
+  /* ADI Blackfin PLTPC relocation.  */
   BFD_RELOC_BFIN_PLTPC,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_PUSH,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_CONST,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_ADD,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_SUB,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_MULT,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_DIV,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_MOD,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_LSHIFT,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_RSHIFT,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_AND,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_OR,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_XOR,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_LAND,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_LOR,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_LEN,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_NEG,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_COMP,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_PAGE,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_HWPAGE,
 
-/* ADI Blackfin arithmetic relocation.  */
+  /* ADI Blackfin arithmetic relocation.  */
   BFD_ARELOC_BFIN_ADDR,
 
-/* Mitsubishi D10V relocs.
-This is a 10-bit reloc with the right 2 bits
-assumed to be 0.  */
+  /* Mitsubishi D10V relocs.
+     This is a 10-bit reloc with the right 2 bits assumed to be 0.  */
   BFD_RELOC_D10V_10_PCREL_R,
 
-/* Mitsubishi D10V relocs.
-This is a 10-bit reloc with the right 2 bits
-assumed to be 0.  This is the same as the previous reloc
-except it is in the left container, i.e.,
-shifted left 15 bits.  */
+  /* Mitsubishi D10V relocs.
+     This is a 10-bit reloc with the right 2 bits assumed to be 0.  This
+     is the same as the previous reloc except it is in the left
+     container, i.e., shifted left 15 bits.  */
   BFD_RELOC_D10V_10_PCREL_L,
 
-/* This is an 18-bit reloc with the right 2 bits
-assumed to be 0.  */
+  /* This is an 18-bit reloc with the right 2 bits assumed to be 0.  */
   BFD_RELOC_D10V_18,
 
-/* This is an 18-bit reloc with the right 2 bits
-assumed to be 0.  */
+  /* This is an 18-bit reloc with the right 2 bits assumed to be 0.  */
   BFD_RELOC_D10V_18_PCREL,
 
-/* Mitsubishi D30V relocs.
-This is a 6-bit absolute reloc.  */
+  /* Mitsubishi D30V relocs.
+     This is a 6-bit absolute reloc.  */
   BFD_RELOC_D30V_6,
 
-/* This is a 6-bit pc-relative reloc with
-the right 3 bits assumed to be 0.  */
+  /* This is a 6-bit pc-relative reloc with the right 3 bits assumed to
+     be 0.  */
   BFD_RELOC_D30V_9_PCREL,
 
-/* This is a 6-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.  */
+  /* This is a 6-bit pc-relative reloc with the right 3 bits assumed to
+     be 0.  Same as the previous reloc but on the right side of the
+     container.  */
   BFD_RELOC_D30V_9_PCREL_R,
 
-/* This is a 12-bit absolute reloc with the
-right 3 bitsassumed to be 0.  */
+  /* This is a 12-bit absolute reloc with the right 3 bitsassumed to
+     be 0.  */
   BFD_RELOC_D30V_15,
 
-/* This is a 12-bit pc-relative reloc with
-the right 3 bits assumed to be 0.  */
+  /* This is a 12-bit pc-relative reloc with the right 3 bits assumed to
+     be 0.  */
   BFD_RELOC_D30V_15_PCREL,
 
-/* This is a 12-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.  */
+  /* This is a 12-bit pc-relative reloc with the right 3 bits assumed to
+     be 0.  Same as the previous reloc but on the right side of the
+     container.  */
   BFD_RELOC_D30V_15_PCREL_R,
 
-/* This is an 18-bit absolute reloc with
-the right 3 bits assumed to be 0.  */
+  /* This is an 18-bit absolute reloc with the right 3 bits assumed to
+     be 0.  */
   BFD_RELOC_D30V_21,
 
-/* This is an 18-bit pc-relative reloc with
-the right 3 bits assumed to be 0.  */
+  /* This is an 18-bit pc-relative reloc with the right 3 bits assumed to
+     be 0.  */
   BFD_RELOC_D30V_21_PCREL,
 
-/* This is an 18-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.  */
+  /* This is an 18-bit pc-relative reloc with the right 3 bits assumed to
+     be 0.  Same as the previous reloc but on the right side of the
+     container.  */
   BFD_RELOC_D30V_21_PCREL_R,
 
-/* This is a 32-bit absolute reloc.  */
+  /* This is a 32-bit absolute reloc.  */
   BFD_RELOC_D30V_32,
 
-/* This is a 32-bit pc-relative reloc.  */
+  /* This is a 32-bit pc-relative reloc.  */
   BFD_RELOC_D30V_32_PCREL,
 
-/* DLX relocs  */
+  /* DLX relocs.  */
   BFD_RELOC_DLX_HI16_S,
-
-/* DLX relocs  */
   BFD_RELOC_DLX_LO16,
-
-/* DLX relocs  */
   BFD_RELOC_DLX_JMP26,
 
-/* Renesas M16C/M32C Relocations.  */
+  /* Renesas M16C/M32C Relocations.  */
   BFD_RELOC_M32C_HI8,
   BFD_RELOC_M32C_RL_JUMP,
   BFD_RELOC_M32C_RL_1ADDR,
   BFD_RELOC_M32C_RL_2ADDR,
 
-/* Renesas M32R (formerly Mitsubishi M32R) relocs.
-This is a 24 bit absolute address.  */
+  /* Renesas M32R (formerly Mitsubishi M32R) relocs.
+     This is a 24 bit absolute address.  */
   BFD_RELOC_M32R_24,
 
-/* This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0.  */
+  /* This is a 10-bit pc-relative reloc with the right 2 bits assumed to
+     be 0.  */
   BFD_RELOC_M32R_10_PCREL,
 
-/* This is an 18-bit reloc with the right 2 bits assumed to be 0.  */
+  /* This is an 18-bit reloc with the right 2 bits assumed to be 0.  */
   BFD_RELOC_M32R_18_PCREL,
 
-/* This is a 26-bit reloc with the right 2 bits assumed to be 0.  */
+  /* This is a 26-bit reloc with the right 2 bits assumed to be 0.  */
   BFD_RELOC_M32R_26_PCREL,
 
-/* This is a 16-bit reloc containing the high 16 bits of an address
-used when the lower 16 bits are treated as unsigned.  */
+  /* This is a 16-bit reloc containing the high 16 bits of an address
+     used when the lower 16 bits are treated as unsigned.  */
   BFD_RELOC_M32R_HI16_ULO,
 
-/* This is a 16-bit reloc containing the high 16 bits of an address
-used when the lower 16 bits are treated as signed.  */
+  /* This is a 16-bit reloc containing the high 16 bits of an address
+     used when the lower 16 bits are treated as signed.  */
   BFD_RELOC_M32R_HI16_SLO,
 
-/* This is a 16-bit reloc containing the lower 16 bits of an address.  */
+  /* This is a 16-bit reloc containing the lower 16 bits of an address.  */
   BFD_RELOC_M32R_LO16,
 
-/* This is a 16-bit reloc containing the small data area offset for use in
-add3, load, and store instructions.  */
+  /* This is a 16-bit reloc containing the small data area offset for use
+     in add3, load, and store instructions.  */
   BFD_RELOC_M32R_SDA16,
 
-/* For PIC.  */
+  /* For PIC.  */
   BFD_RELOC_M32R_GOT24,
   BFD_RELOC_M32R_26_PLTREL,
   BFD_RELOC_M32R_COPY,
@@ -3635,82 +4697,84 @@ add3, load, and store instructions.  */
   BFD_RELOC_M32R_GOTPC_HI_SLO,
   BFD_RELOC_M32R_GOTPC_LO,
 
-/* NDS32 relocs.
-This is a 20 bit absolute address.  */
+  /* NDS32 relocs.
+     This is a 20 bit absolute address.  */
   BFD_RELOC_NDS32_20,
 
-/* This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0.  */
+  /* This is a 9-bit pc-relative reloc with the right 1 bit assumed to
+     be 0.  */
   BFD_RELOC_NDS32_9_PCREL,
 
-/* This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0.  */
+  /* This is a 9-bit pc-relative reloc with the right 1 bit assumed to
+     be 0.  */
   BFD_RELOC_NDS32_WORD_9_PCREL,
 
-/* This is an 15-bit reloc with the right 1 bit assumed to be 0.  */
+  /* This is an 15-bit reloc with the right 1 bit assumed to be 0.  */
   BFD_RELOC_NDS32_15_PCREL,
 
-/* This is an 17-bit reloc with the right 1 bit assumed to be 0.  */
+  /* This is an 17-bit reloc with the right 1 bit assumed to be 0.  */
   BFD_RELOC_NDS32_17_PCREL,
 
-/* This is a 25-bit reloc with the right 1 bit assumed to be 0.  */
+  /* This is a 25-bit reloc with the right 1 bit assumed to be 0.  */
   BFD_RELOC_NDS32_25_PCREL,
 
-/* This is a 20-bit reloc containing the high 20 bits of an address
-used with the lower 12 bits  */
+  /* This is a 20-bit reloc containing the high 20 bits of an address
+     used with the lower 12 bits.  */
   BFD_RELOC_NDS32_HI20,
 
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift right by 3. This is used with ldi,sdi...  */
+  /* This is a 12-bit reloc containing the lower 12 bits of an address
+     then shift right by 3.  This is used with ldi,sdi.  */
   BFD_RELOC_NDS32_LO12S3,
 
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 2. This is used with lwi,swi...  */
+  /* This is a 12-bit reloc containing the lower 12 bits of an address
+     then shift left by 2.  This is used with lwi,swi.  */
   BFD_RELOC_NDS32_LO12S2,
 
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 1. This is used with lhi,shi...  */
+  /* This is a 12-bit reloc containing the lower 12 bits of an address
+     then shift left by 1.  This is used with lhi,shi.  */
   BFD_RELOC_NDS32_LO12S1,
 
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 0. This is used with lbisbi...  */
+  /* This is a 12-bit reloc containing the lower 12 bits of an address
+     then shift left by 0.  This is used with lbisbi.  */
   BFD_RELOC_NDS32_LO12S0,
 
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 0. This is only used with branch relaxations  */
+  /* This is a 12-bit reloc containing the lower 12 bits of an address
+     then shift left by 0.  This is only used with branch relaxations.  */
   BFD_RELOC_NDS32_LO12S0_ORI,
 
-/* This is a 15-bit reloc containing the small data area 18-bit signed offset
-and shift left by 3 for use in ldi, sdi...  */
+  /* This is a 15-bit reloc containing the small data area 18-bit signed
+     offset and shift left by 3 for use in ldi, sdi.  */
   BFD_RELOC_NDS32_SDA15S3,
 
-/* This is a 15-bit reloc containing the small data area 17-bit signed offset
-and shift left by 2 for use in lwi, swi...  */
+  /* This is a 15-bit reloc containing the small data area 17-bit signed
+     offset and shift left by 2 for use in lwi, swi.  */
   BFD_RELOC_NDS32_SDA15S2,
 
-/* This is a 15-bit reloc containing the small data area 16-bit signed offset
-and shift left by 1 for use in lhi, shi...  */
+  /* This is a 15-bit reloc containing the small data area 16-bit signed
+     offset and shift left by 1 for use in lhi, shi.  */
   BFD_RELOC_NDS32_SDA15S1,
 
-/* This is a 15-bit reloc containing the small data area 15-bit signed offset
-and shift left by 0 for use in lbi, sbi...  */
+  /* This is a 15-bit reloc containing the small data area 15-bit signed
+     offset and shift left by 0 for use in lbi, sbi.  */
   BFD_RELOC_NDS32_SDA15S0,
 
-/* This is a 16-bit reloc containing the small data area 16-bit signed offset
-and shift left by 3  */
+  /* This is a 16-bit reloc containing the small data area 16-bit signed
+     offset and shift left by 3.  */
   BFD_RELOC_NDS32_SDA16S3,
 
-/* This is a 17-bit reloc containing the small data area 17-bit signed offset
-and shift left by 2 for use in lwi.gp, swi.gp...  */
+  /* This is a 17-bit reloc containing the small data area 17-bit signed
+     offset and shift left by 2 for use in lwi.gp, swi.gp.  */
   BFD_RELOC_NDS32_SDA17S2,
 
-/* This is a 18-bit reloc containing the small data area 18-bit signed offset
-and shift left by 1 for use in lhi.gp, shi.gp...  */
+  /* This is a 18-bit reloc containing the small data area 18-bit signed
+     offset and shift left by 1 for use in lhi.gp, shi.gp.  */
   BFD_RELOC_NDS32_SDA18S1,
 
-/* This is a 19-bit reloc containing the small data area 19-bit signed offset
-and shift left by 0 for use in lbi.gp, sbi.gp...  */
+  /* This is a 19-bit reloc containing the small data area 19-bit signed
+     offset and shift left by 0 for use in lbi.gp, sbi.gp.  */
   BFD_RELOC_NDS32_SDA19S0,
 
-/* for PIC  */
+  /* For PIC.  */
   BFD_RELOC_NDS32_GOT20,
   BFD_RELOC_NDS32_9_PLTREL,
   BFD_RELOC_NDS32_25_PLTREL,
@@ -3727,7 +4791,7 @@ and shift left by 0 for use in lbi.gp, s
   BFD_RELOC_NDS32_GOTPC_HI20,
   BFD_RELOC_NDS32_GOTPC_LO12,
 
-/* for relax  */
+  /* For relax.  */
   BFD_RELOC_NDS32_INSN16,
   BFD_RELOC_NDS32_LABEL,
   BFD_RELOC_NDS32_LONGCALL1,
@@ -3749,27 +4813,27 @@ and shift left by 0 for use in lbi.gp, s
   BFD_RELOC_NDS32_LONGJUMP6,
   BFD_RELOC_NDS32_LONGJUMP7,
 
-/* for PIC  */
+  /* For PIC.  */
   BFD_RELOC_NDS32_PLTREL_HI20,
   BFD_RELOC_NDS32_PLTREL_LO12,
   BFD_RELOC_NDS32_PLT_GOTREL_HI20,
   BFD_RELOC_NDS32_PLT_GOTREL_LO12,
 
-/* for floating point  */
+  /* For floating point.  */
   BFD_RELOC_NDS32_SDA12S2_DP,
   BFD_RELOC_NDS32_SDA12S2_SP,
   BFD_RELOC_NDS32_LO12S2_DP,
   BFD_RELOC_NDS32_LO12S2_SP,
 
-/* for dwarf2 debug_line.  */
+  /* For dwarf2 debug_line.  */
   BFD_RELOC_NDS32_DWARF2_OP1,
   BFD_RELOC_NDS32_DWARF2_OP2,
   BFD_RELOC_NDS32_DWARF2_LEB,
 
-/* for eliminate 16-bit instructions  */
+  /* For eliminating 16-bit instructions.  */
   BFD_RELOC_NDS32_UPDATE_TA,
 
-/* for PIC object relaxation  */
+  /* For PIC object relaxation.  */
   BFD_RELOC_NDS32_PLT_GOTREL_LO20,
   BFD_RELOC_NDS32_PLT_GOTREL_LO15,
   BFD_RELOC_NDS32_PLT_GOTREL_LO19,
@@ -3780,17 +4844,18 @@ and shift left by 0 for use in lbi.gp, s
   BFD_RELOC_NDS32_GOT15S2,
   BFD_RELOC_NDS32_GOT17S2,
 
-/* NDS32 relocs.
-This is a 5 bit absolute address.  */
+  /* NDS32 relocs.
+     This is a 5 bit absolute address.  */
   BFD_RELOC_NDS32_5,
 
-/* This is a 10-bit unsigned pc-relative reloc with the right 1 bit assumed to be 0.  */
+  /* This is a 10-bit unsigned pc-relative reloc with the right 1 bit
+     assumed to be 0.  */
   BFD_RELOC_NDS32_10_UPCREL,
 
-/* If fp were omitted, fp can used as another gp.  */
+  /* If fp were omitted, fp can used as another gp.  */
   BFD_RELOC_NDS32_SDA_FP7U2_RELA,
 
-/* relaxation relative relocation types  */
+  /* Relaxation relative relocation types.  */
   BFD_RELOC_NDS32_RELAX_ENTRY,
   BFD_RELOC_NDS32_GOT_SUFF,
   BFD_RELOC_NDS32_GOTOFF_SUFF,
@@ -3810,16 +4875,16 @@ This is a 5 bit absolute address.  */
   BFD_RELOC_NDS32_DIFF_ULEB128,
   BFD_RELOC_NDS32_EMPTY,
 
-/* This is a 25 bit absolute address.  */
+  /* This is a 25 bit absolute address.  */
   BFD_RELOC_NDS32_25_ABS,
 
-/* For ex9 and ifc using.  */
+  /* For ex9 and ifc using.  */
   BFD_RELOC_NDS32_DATA,
   BFD_RELOC_NDS32_TRAN,
   BFD_RELOC_NDS32_17IFC_PCREL,
   BFD_RELOC_NDS32_10IFCU_PCREL,
 
-/* For TLS.  */
+  /* For TLS.  */
   BFD_RELOC_NDS32_TPOFF,
   BFD_RELOC_NDS32_GOTTPOFF,
   BFD_RELOC_NDS32_TLS_LE_HI20,
@@ -3849,172 +4914,152 @@ This is a 5 bit absolute address.  */
   BFD_RELOC_NDS32_REMOVE,
   BFD_RELOC_NDS32_GROUP,
 
-/* For floating load store relaxation.  */
+  /* For floating load store relaxation.  */
   BFD_RELOC_NDS32_LSI,
 
-/* This is a 9-bit reloc  */
+  /* This is a 9-bit reloc.  */
   BFD_RELOC_V850_9_PCREL,
 
-/* This is a 22-bit reloc  */
+  /* This is a 22-bit reloc.  */
   BFD_RELOC_V850_22_PCREL,
 
-/* This is a 16 bit offset from the short data area pointer.  */
+  /* This is a 16 bit offset from the short data area pointer.  */
   BFD_RELOC_V850_SDA_16_16_OFFSET,
 
-/* This is a 16 bit offset (of which only 15 bits are used) from the
-short data area pointer.  */
+  /* This is a 16 bit offset (of which only 15 bits are used) from the
+     short data area pointer.  */
   BFD_RELOC_V850_SDA_15_16_OFFSET,
 
-/* This is a 16 bit offset from the zero data area pointer.  */
+  /* This is a 16 bit offset from the zero data area pointer.  */
   BFD_RELOC_V850_ZDA_16_16_OFFSET,
 
-/* This is a 16 bit offset (of which only 15 bits are used) from the
-zero data area pointer.  */
+  /* This is a 16 bit offset (of which only 15 bits are used) from the
+     zero data area pointer.  */
   BFD_RELOC_V850_ZDA_15_16_OFFSET,
 
-/* This is an 8 bit offset (of which only 6 bits are used) from the
-tiny data area pointer.  */
+  /* This is an 8 bit offset (of which only 6 bits are used) from the
+     tiny data area pointer.  */
   BFD_RELOC_V850_TDA_6_8_OFFSET,
 
-/* This is an 8bit offset (of which only 7 bits are used) from the tiny
-data area pointer.  */
+  /* This is an 8bit offset (of which only 7 bits are used) from the tiny
+     data area pointer.  */
   BFD_RELOC_V850_TDA_7_8_OFFSET,
 
-/* This is a 7 bit offset from the tiny data area pointer.  */
+  /* This is a 7 bit offset from the tiny data area pointer.  */
   BFD_RELOC_V850_TDA_7_7_OFFSET,
 
-/* This is a 16 bit offset from the tiny data area pointer.  */
+  /* This is a 16 bit offset from the tiny data area pointer.  */
   BFD_RELOC_V850_TDA_16_16_OFFSET,
 
-/* This is a 5 bit offset (of which only 4 bits are used) from the tiny
-data area pointer.  */
+  /* This is a 5 bit offset (of which only 4 bits are used) from the tiny
+     data area pointer.  */
   BFD_RELOC_V850_TDA_4_5_OFFSET,
 
-/* This is a 4 bit offset from the tiny data area pointer.  */
+  /* This is a 4 bit offset from the tiny data area pointer.  */
   BFD_RELOC_V850_TDA_4_4_OFFSET,
 
-/* This is a 16 bit offset from the short data area pointer, with the
-bits placed non-contiguously in the instruction.  */
+  /* This is a 16 bit offset from the short data area pointer, with the
+     bits placed non-contiguously in the instruction.  */
   BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET,
 
-/* This is a 16 bit offset from the zero data area pointer, with the
-bits placed non-contiguously in the instruction.  */
+  /* This is a 16 bit offset from the zero data area pointer, with the
+     bits placed non-contiguously in the instruction.  */
   BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET,
 
-/* This is a 6 bit offset from the call table base pointer.  */
+  /* This is a 6 bit offset from the call table base pointer.  */
   BFD_RELOC_V850_CALLT_6_7_OFFSET,
 
-/* This is a 16 bit offset from the call table base pointer.  */
+  /* This is a 16 bit offset from the call table base pointer.  */
   BFD_RELOC_V850_CALLT_16_16_OFFSET,
 
-/* Used for relaxing indirect function calls.  */
+  /* Used for relaxing indirect function calls.  */
   BFD_RELOC_V850_LONGCALL,
 
-/* Used for relaxing indirect jumps.  */
+  /* Used for relaxing indirect jumps.  */
   BFD_RELOC_V850_LONGJUMP,
 
-/* Used to maintain alignment whilst relaxing.  */
+  /* Used to maintain alignment whilst relaxing.  */
   BFD_RELOC_V850_ALIGN,
 
-/* This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
-instructions.  */
+  /* This is a variation of BFD_RELOC_LO16 that can be used in v850e
+     ld.bu instructions.  */
   BFD_RELOC_V850_LO16_SPLIT_OFFSET,
 
-/* This is a 16-bit reloc.  */
+  /* This is a 16-bit reloc.  */
   BFD_RELOC_V850_16_PCREL,
 
-/* This is a 17-bit reloc.  */
+  /* This is a 17-bit reloc.  */
   BFD_RELOC_V850_17_PCREL,
 
-/* This is a 23-bit reloc.  */
+  /* This is a 23-bit reloc.  */
   BFD_RELOC_V850_23,
 
-/* This is a 32-bit reloc.  */
+  /* This is a 32-bit reloc.  */
   BFD_RELOC_V850_32_PCREL,
 
-/* This is a 32-bit reloc.  */
+  /* This is a 32-bit reloc.  */
   BFD_RELOC_V850_32_ABS,
 
-/* This is a 16-bit reloc.  */
+  /* This is a 16-bit reloc.  */
   BFD_RELOC_V850_16_SPLIT_OFFSET,
 
-/* This is a 16-bit reloc.  */
+  /* This is a 16-bit reloc.  */
   BFD_RELOC_V850_16_S1,
 
-/* Low 16 bits. 16 bit shifted by 1.  */
+  /* Low 16 bits.  16 bit shifted by 1.  */
   BFD_RELOC_V850_LO16_S1,
 
-/* This is a 16 bit offset from the call table base pointer.  */
+  /* This is a 16 bit offset from the call table base pointer.  */
   BFD_RELOC_V850_CALLT_15_16_OFFSET,
 
-/* DSO relocations.  */
+  /* DSO relocations.  */
   BFD_RELOC_V850_32_GOTPCREL,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_16_GOT,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_32_GOT,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_22_PLT_PCREL,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_32_PLT_PCREL,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_COPY,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_GLOB_DAT,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_JMP_SLOT,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_RELATIVE,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_16_GOTOFF,
-
-/* DSO relocations.  */
   BFD_RELOC_V850_32_GOTOFF,
 
-/* start code.  */
+  /* Start code.  */
   BFD_RELOC_V850_CODE,
 
-/* start data in text.  */
+  /* Start data in text.  */
   BFD_RELOC_V850_DATA,
 
-/* This is a 8bit DP reloc for the tms320c30, where the most
-significant 8 bits of a 24 bit word are placed into the least
-significant 8 bits of the opcode.  */
+  /* This is a 8bit DP reloc for the tms320c30, where the most
+     significant 8 bits of a 24 bit word are placed into the least
+     significant 8 bits of the opcode.  */
   BFD_RELOC_TIC30_LDP,
 
-/* This is a 7bit reloc for the tms320c54x, where the least
-significant 7 bits of a 16 bit word are placed into the least
-significant 7 bits of the opcode.  */
+  /* This is a 7bit reloc for the tms320c54x, where the least
+     significant 7 bits of a 16 bit word are placed into the least
+     significant 7 bits of the opcode.  */
   BFD_RELOC_TIC54X_PARTLS7,
 
-/* This is a 9bit DP reloc for the tms320c54x, where the most
-significant 9 bits of a 16 bit word are placed into the least
-significant 9 bits of the opcode.  */
+  /* This is a 9bit DP reloc for the tms320c54x, where the most
+     significant 9 bits of a 16 bit word are placed into the least
+     significant 9 bits of the opcode.  */
   BFD_RELOC_TIC54X_PARTMS9,
 
-/* This is an extended address 23-bit reloc for the tms320c54x.  */
+  /* This is an extended address 23-bit reloc for the tms320c54x.  */
   BFD_RELOC_TIC54X_23,
 
-/* This is a 16-bit reloc for the tms320c54x, where the least
-significant 16 bits of a 23-bit extended address are placed into
-the opcode.  */
+  /* This is a 16-bit reloc for the tms320c54x, where the least
+     significant 16 bits of a 23-bit extended address are placed into
+     the opcode.  */
   BFD_RELOC_TIC54X_16_OF_23,
 
-/* This is a reloc for the tms320c54x, where the most
-significant 7 bits of a 23-bit extended address are placed into
-the opcode.  */
+  /* This is a reloc for the tms320c54x, where the most
+     significant 7 bits of a 23-bit extended address are placed into
+     the opcode.  */
   BFD_RELOC_TIC54X_MS7_OF_23,
 
-/* TMS320C6000 relocations.  */
+  /* TMS320C6000 relocations.  */
   BFD_RELOC_C6000_PCR_S21,
   BFD_RELOC_C6000_PCR_S12,
   BFD_RELOC_C6000_PCR_S10,
@@ -4046,38 +5091,38 @@ the opcode.  */
   BFD_RELOC_C6000_FPHEAD,
   BFD_RELOC_C6000_NOCMP,
 
-/* This is a 48 bit reloc for the FR30 that stores 32 bits.  */
+  /* This is a 48 bit reloc for the FR30 that stores 32 bits.  */
   BFD_RELOC_FR30_48,
 
-/* This is a 32 bit reloc for the FR30 that stores 20 bits split up into
-two sections.  */
+  /* This is a 32 bit reloc for the FR30 that stores 20 bits split up
+     into two sections.  */
   BFD_RELOC_FR30_20,
 
-/* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
-4 bits.  */
+  /* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset
+     in 4 bits.  */
   BFD_RELOC_FR30_6_IN_4,
 
-/* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
-into 8 bits.  */
+  /* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
+     into 8 bits.  */
   BFD_RELOC_FR30_8_IN_8,
 
-/* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
-into 8 bits.  */
+  /* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
+     into 8 bits.  */
   BFD_RELOC_FR30_9_IN_8,
 
-/* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
-into 8 bits.  */
+  /* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
+     into 8 bits.  */
   BFD_RELOC_FR30_10_IN_8,
 
-/* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
-short offset into 8 bits.  */
+  /* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
+     short offset into 8 bits.  */
   BFD_RELOC_FR30_9_PCREL,
 
-/* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
-short offset into 11 bits.  */
+  /* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
+     short offset into 11 bits.  */
   BFD_RELOC_FR30_12_PCREL,
 
-/* Motorola Mcore relocations.  */
+  /* Motorola Mcore relocations.  */
   BFD_RELOC_MCORE_PCREL_IMM8BY4,
   BFD_RELOC_MCORE_PCREL_IMM11BY2,
   BFD_RELOC_MCORE_PCREL_IMM4BY2,
@@ -4085,7 +5130,7 @@ short offset into 11 bits.  */
   BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
   BFD_RELOC_MCORE_RVA,
 
-/* Toshiba Media Processor Relocations.  */
+  /* Toshiba Media Processor Relocations.  */
   BFD_RELOC_MEP_8,
   BFD_RELOC_MEP_16,
   BFD_RELOC_MEP_32,
@@ -4107,8 +5152,7 @@ short offset into 11 bits.  */
   BFD_RELOC_MEP_GNU_VTINHERIT,
   BFD_RELOC_MEP_GNU_VTENTRY,
 
-
-/* Imagination Technologies Meta relocations.  */
+  /* Imagination Technologies Meta relocations.  */
   BFD_RELOC_METAG_HIADDR16,
   BFD_RELOC_METAG_LOADDR16,
   BFD_RELOC_METAG_RELBRANCH,
@@ -4148,190 +5192,192 @@ short offset into 11 bits.  */
   BFD_RELOC_METAG_TLS_LE_HI16,
   BFD_RELOC_METAG_TLS_LE_LO16,
 
-/* These are relocations for the GETA instruction.  */
+  /* These are relocations for the GETA instruction.  */
   BFD_RELOC_MMIX_GETA,
   BFD_RELOC_MMIX_GETA_1,
   BFD_RELOC_MMIX_GETA_2,
   BFD_RELOC_MMIX_GETA_3,
 
-/* These are relocations for a conditional branch instruction.  */
+  /* These are relocations for a conditional branch instruction.  */
   BFD_RELOC_MMIX_CBRANCH,
   BFD_RELOC_MMIX_CBRANCH_J,
   BFD_RELOC_MMIX_CBRANCH_1,
   BFD_RELOC_MMIX_CBRANCH_2,
   BFD_RELOC_MMIX_CBRANCH_3,
 
-/* These are relocations for the PUSHJ instruction.  */
+  /* These are relocations for the PUSHJ instruction.  */
   BFD_RELOC_MMIX_PUSHJ,
   BFD_RELOC_MMIX_PUSHJ_1,
   BFD_RELOC_MMIX_PUSHJ_2,
   BFD_RELOC_MMIX_PUSHJ_3,
   BFD_RELOC_MMIX_PUSHJ_STUBBABLE,
 
-/* These are relocations for the JMP instruction.  */
+  /* These are relocations for the JMP instruction.  */
   BFD_RELOC_MMIX_JMP,
   BFD_RELOC_MMIX_JMP_1,
   BFD_RELOC_MMIX_JMP_2,
   BFD_RELOC_MMIX_JMP_3,
 
-/* This is a relocation for a relative address as in a GETA instruction or
-a branch.  */
+  /* This is a relocation for a relative address as in a GETA instruction
+     or a branch.  */
   BFD_RELOC_MMIX_ADDR19,
 
-/* This is a relocation for a relative address as in a JMP instruction.  */
+  /* This is a relocation for a relative address as in a JMP instruction.  */
   BFD_RELOC_MMIX_ADDR27,
 
-/* This is a relocation for an instruction field that may be a general
-register or a value 0..255.  */
+  /* This is a relocation for an instruction field that may be a general
+     register or a value 0..255.  */
   BFD_RELOC_MMIX_REG_OR_BYTE,
 
-/* This is a relocation for an instruction field that may be a general
-register.  */
+  /* This is a relocation for an instruction field that may be a general
+     register.  */
   BFD_RELOC_MMIX_REG,
 
-/* This is a relocation for two instruction fields holding a register and
-an offset, the equivalent of the relocation.  */
+  /* This is a relocation for two instruction fields holding a register
+     and an offset, the equivalent of the relocation.  */
   BFD_RELOC_MMIX_BASE_PLUS_OFFSET,
 
-/* This relocation is an assertion that the expression is not allocated as
-a global register.  It does not modify contents.  */
+  /* This relocation is an assertion that the expression is not allocated
+     as a global register.  It does not modify contents.  */
   BFD_RELOC_MMIX_LOCAL,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit pc relative
-short offset into 7 bits.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit pc relative
+     short offset into 7 bits.  */
   BFD_RELOC_AVR_7_PCREL,
 
-/* This is a 16 bit reloc for the AVR that stores 13 bit pc relative
-short offset into 12 bits.  */
+  /* This is a 16 bit reloc for the AVR that stores 13 bit pc relative
+     short offset into 12 bits.  */
   BFD_RELOC_AVR_13_PCREL,
 
-/* This is a 16 bit reloc for the AVR that stores 17 bit value (usually
-program memory address) into 16 bits.  */
+  /* This is a 16 bit reloc for the AVR that stores 17 bit value (usually
+     program memory address) into 16 bits.  */
   BFD_RELOC_AVR_16_PM,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
-data memory address) into 8 bit immediate value of LDI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
+     data memory address) into 8 bit immediate value of LDI insn.  */
   BFD_RELOC_AVR_LO8_LDI,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-of data memory address) into 8 bit immediate value of LDI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
+     of data memory address) into 8 bit immediate value of LDI insn.  */
   BFD_RELOC_AVR_HI8_LDI,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of program memory address) into 8 bit immediate value of LDI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit value (most
+     high 8 bit of program memory address) into 8 bit immediate value of
+     LDI insn.  */
   BFD_RELOC_AVR_HH8_LDI,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of 32 bit value) into 8 bit immediate value of LDI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit value (most
+     high 8 bit of 32 bit value) into 8 bit immediate value of LDI insn.  */
   BFD_RELOC_AVR_MS8_LDI,
 
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(usually data memory address) into 8 bit immediate value of SUBI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (usually data memory address) into 8 bit immediate value of SUBI insn.  */
   BFD_RELOC_AVR_LO8_LDI_NEG,
 
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(high 8 bit of data memory address) into 8 bit immediate value of
-SUBI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (high 8 bit of data memory address) into 8 bit immediate value of
+     SUBI insn.  */
   BFD_RELOC_AVR_HI8_LDI_NEG,
 
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(most high 8 bit of program memory address) into 8 bit immediate value
-of LDI or SUBI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (most high 8 bit of program memory address) into 8 bit immediate
+     value of LDI or SUBI insn.  */
   BFD_RELOC_AVR_HH8_LDI_NEG,
 
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
-of 32 bit value) into 8 bit immediate value of LDI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (msb of 32 bit value) into 8 bit immediate value of LDI insn.  */
   BFD_RELOC_AVR_MS8_LDI_NEG,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
-command address) into 8 bit immediate value of LDI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
+     command address) into 8 bit immediate value of LDI insn.  */
   BFD_RELOC_AVR_LO8_LDI_PM,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit value
-(command address) into 8 bit immediate value of LDI insn. If the address
-is beyond the 128k boundary, the linker inserts a jump stub for this reloc
-in the lower 128k.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit value
+     (command address) into 8 bit immediate value of LDI insn. If the
+     address is beyond the 128k boundary, the linker inserts a jump stub
+     for this reloc in the lower 128k.  */
   BFD_RELOC_AVR_LO8_LDI_GS,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-of command address) into 8 bit immediate value of LDI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
+     of command address) into 8 bit immediate value of LDI insn.  */
   BFD_RELOC_AVR_HI8_LDI_PM,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-of command address) into 8 bit immediate value of LDI insn.  If the address
-is beyond the 128k boundary, the linker inserts a jump stub for this reloc
-below 128k.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
+     of command address) into 8 bit immediate value of LDI insn.  If the
+     address is beyond the 128k boundary, the linker inserts a jump stub
+     for this reloc below 128k.  */
   BFD_RELOC_AVR_HI8_LDI_GS,
 
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of command address) into 8 bit immediate value of LDI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores 8 bit value (most
+     high 8 bit of command address) into 8 bit immediate value of LDI
+     insn.  */
   BFD_RELOC_AVR_HH8_LDI_PM,
 
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(usually command address) into 8 bit immediate value of SUBI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (usually command address) into 8 bit immediate value of SUBI insn.  */
   BFD_RELOC_AVR_LO8_LDI_PM_NEG,
 
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(high 8 bit of 16 bit command address) into 8 bit immediate value
-of SUBI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (high 8 bit of 16 bit command address) into 8 bit immediate value
+     of SUBI insn.  */
   BFD_RELOC_AVR_HI8_LDI_PM_NEG,
 
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(high 6 bit of 22 bit command address) into 8 bit immediate
-value of SUBI insn.  */
+  /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (high 6 bit of 22 bit command address) into 8 bit immediate
+     value of SUBI insn.  */
   BFD_RELOC_AVR_HH8_LDI_PM_NEG,
 
-/* This is a 32 bit reloc for the AVR that stores 23 bit value
-into 22 bits.  */
+  /* This is a 32 bit reloc for the AVR that stores 23 bit value
+     into 22 bits.  */
   BFD_RELOC_AVR_CALL,
 
-/* This is a 16 bit reloc for the AVR that stores all needed bits
-for absolute addressing with ldi with overflow check to linktime  */
+  /* This is a 16 bit reloc for the AVR that stores all needed bits
+     for absolute addressing with ldi with overflow check to linktime.  */
   BFD_RELOC_AVR_LDI,
 
-/* This is a 6 bit reloc for the AVR that stores offset for ldd/std
-instructions  */
+  /* This is a 6 bit reloc for the AVR that stores offset for ldd/std
+     instructions.  */
   BFD_RELOC_AVR_6,
 
-/* This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
-instructions  */
+  /* This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
+     instructions.  */
   BFD_RELOC_AVR_6_ADIW,
 
-/* This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
-in .byte lo8(symbol)  */
+  /* This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
+     in .byte lo8(symbol).  */
   BFD_RELOC_AVR_8_LO,
 
-/* This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
-in .byte hi8(symbol)  */
+  /* This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
+     in .byte hi8(symbol).  */
   BFD_RELOC_AVR_8_HI,
 
-/* This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
-in .byte hlo8(symbol)  */
+  /* This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
+     in .byte hlo8(symbol).  */
   BFD_RELOC_AVR_8_HLO,
 
-/* AVR relocations to mark the difference of two local symbols.
-These are only needed to support linker relaxation and can be ignored
-when not relaxing.  The field is set to the value of the difference
-assuming no relaxation.  The relocation encodes the position of the
-second symbol so the linker can determine whether to adjust the field
-value.  */
+  /* AVR relocations to mark the difference of two local symbols.
+     These are only needed to support linker relaxation and can be ignored
+     when not relaxing.  The field is set to the value of the difference
+     assuming no relaxation.  The relocation encodes the position of the
+     second symbol so the linker can determine whether to adjust the field
+     value.  */
   BFD_RELOC_AVR_DIFF8,
   BFD_RELOC_AVR_DIFF16,
   BFD_RELOC_AVR_DIFF32,
 
-/* This is a 7 bit reloc for the AVR that stores SRAM address for 16bit
-lds and sts instructions supported only tiny core.  */
+  /* This is a 7 bit reloc for the AVR that stores SRAM address for 16bit
+     lds and sts instructions supported only tiny core.  */
   BFD_RELOC_AVR_LDS_STS_16,
 
-/* This is a 6 bit reloc for the AVR that stores an I/O register
-number for the IN and OUT instructions  */
+  /* This is a 6 bit reloc for the AVR that stores an I/O register
+     number for the IN and OUT instructions.  */
   BFD_RELOC_AVR_PORT6,
 
-/* This is a 5 bit reloc for the AVR that stores an I/O register
-number for the SBIC, SBIS, SBI and CBI instructions  */
+  /* This is a 5 bit reloc for the AVR that stores an I/O register
+     number for the SBIC, SBIS, SBI and CBI instructions.  */
   BFD_RELOC_AVR_PORT5,
 
-/* RISC-V relocations.  */
+  /* RISC-V relocations.  */
   BFD_RELOC_RISCV_HI20,
   BFD_RELOC_RISCV_PCREL_HI20,
   BFD_RELOC_RISCV_PCREL_LO12_I,
@@ -4367,11 +5413,6 @@ number for the SBIC, SBIS, SBI and CBI i
   BFD_RELOC_RISCV_ALIGN,
   BFD_RELOC_RISCV_RVC_BRANCH,
   BFD_RELOC_RISCV_RVC_JUMP,
-  BFD_RELOC_RISCV_RVC_LUI,
-  BFD_RELOC_RISCV_GPREL_I,
-  BFD_RELOC_RISCV_GPREL_S,
-  BFD_RELOC_RISCV_TPREL_I,
-  BFD_RELOC_RISCV_TPREL_S,
   BFD_RELOC_RISCV_RELAX,
   BFD_RELOC_RISCV_CFA,
   BFD_RELOC_RISCV_SUB6,
@@ -4380,8 +5421,10 @@ number for the SBIC, SBIS, SBI and CBI i
   BFD_RELOC_RISCV_SET16,
   BFD_RELOC_RISCV_SET32,
   BFD_RELOC_RISCV_32_PCREL,
+  BFD_RELOC_RISCV_SET_ULEB128,
+  BFD_RELOC_RISCV_SUB_ULEB128,
 
-/* Renesas RL78 Relocations.  */
+  /* Renesas RL78 Relocations.  */
   BFD_RELOC_RL78_NEG8,
   BFD_RELOC_RL78_NEG16,
   BFD_RELOC_RL78_NEG24,
@@ -4417,7 +5460,7 @@ number for the SBIC, SBIS, SBI and CBI i
   BFD_RELOC_RL78_CODE,
   BFD_RELOC_RL78_SADDR,
 
-/* Renesas RX Relocations.  */
+  /* Renesas RX Relocations.  */
   BFD_RELOC_RX_NEG8,
   BFD_RELOC_RX_NEG16,
   BFD_RELOC_RX_NEG24,
@@ -4446,97 +5489,97 @@ number for the SBIC, SBIS, SBI and CBI i
   BFD_RELOC_RX_ABS16UL,
   BFD_RELOC_RX_RELAX,
 
-/* Direct 12 bit.  */
+  /* Direct 12 bit.  */
   BFD_RELOC_390_12,
 
-/* 12 bit GOT offset.  */
+  /* 12 bit GOT offset.  */
   BFD_RELOC_390_GOT12,
 
-/* 32 bit PC relative PLT address.  */
+  /* 32 bit PC relative PLT address.  */
   BFD_RELOC_390_PLT32,
 
-/* Copy symbol at runtime.  */
+  /* Copy symbol at runtime.  */
   BFD_RELOC_390_COPY,
 
-/* Create GOT entry.  */
+  /* Create GOT entry.  */
   BFD_RELOC_390_GLOB_DAT,
 
-/* Create PLT entry.  */
+  /* Create PLT entry.  */
   BFD_RELOC_390_JMP_SLOT,
 
-/* Adjust by program base.  */
+  /* Adjust by program base.  */
   BFD_RELOC_390_RELATIVE,
 
-/* 32 bit PC relative offset to GOT.  */
+  /* 32 bit PC relative offset to GOT.  */
   BFD_RELOC_390_GOTPC,
 
-/* 16 bit GOT offset.  */
+  /* 16 bit GOT offset.  */
   BFD_RELOC_390_GOT16,
 
-/* PC relative 12 bit shifted by 1.  */
+  /* PC relative 12 bit shifted by 1.  */
   BFD_RELOC_390_PC12DBL,
 
-/* 12 bit PC rel. PLT shifted by 1.  */
+  /* 12 bit PC rel. PLT shifted by 1.  */
   BFD_RELOC_390_PLT12DBL,
 
-/* PC relative 16 bit shifted by 1.  */
+  /* PC relative 16 bit shifted by 1.  */
   BFD_RELOC_390_PC16DBL,
 
-/* 16 bit PC rel. PLT shifted by 1.  */
+  /* 16 bit PC rel. PLT shifted by 1.  */
   BFD_RELOC_390_PLT16DBL,
 
-/* PC relative 24 bit shifted by 1.  */
+  /* PC relative 24 bit shifted by 1.  */
   BFD_RELOC_390_PC24DBL,
 
-/* 24 bit PC rel. PLT shifted by 1.  */
+  /* 24 bit PC rel. PLT shifted by 1.  */
   BFD_RELOC_390_PLT24DBL,
 
-/* PC relative 32 bit shifted by 1.  */
+  /* PC relative 32 bit shifted by 1.  */
   BFD_RELOC_390_PC32DBL,
 
-/* 32 bit PC rel. PLT shifted by 1.  */
+  /* 32 bit PC rel. PLT shifted by 1.  */
   BFD_RELOC_390_PLT32DBL,
 
-/* 32 bit PC rel. GOT shifted by 1.  */
+  /* 32 bit PC rel. GOT shifted by 1.  */
   BFD_RELOC_390_GOTPCDBL,
 
-/* 64 bit GOT offset.  */
+  /* 64 bit GOT offset.  */
   BFD_RELOC_390_GOT64,
 
-/* 64 bit PC relative PLT address.  */
+  /* 64 bit PC relative PLT address.  */
   BFD_RELOC_390_PLT64,
 
-/* 32 bit rel. offset to GOT entry.  */
+  /* 32 bit rel. offset to GOT entry.  */
   BFD_RELOC_390_GOTENT,
 
-/* 64 bit offset to GOT.  */
+  /* 64 bit offset to GOT.  */
   BFD_RELOC_390_GOTOFF64,
 
-/* 12-bit offset to symbol-entry within GOT, with PLT handling.  */
+  /* 12-bit offset to symbol-entry within GOT, with PLT handling.  */
   BFD_RELOC_390_GOTPLT12,
 
-/* 16-bit offset to symbol-entry within GOT, with PLT handling.  */
+  /* 16-bit offset to symbol-entry within GOT, with PLT handling.  */
   BFD_RELOC_390_GOTPLT16,
 
-/* 32-bit offset to symbol-entry within GOT, with PLT handling.  */
+  /* 32-bit offset to symbol-entry within GOT, with PLT handling.  */
   BFD_RELOC_390_GOTPLT32,
 
-/* 64-bit offset to symbol-entry within GOT, with PLT handling.  */
+  /* 64-bit offset to symbol-entry within GOT, with PLT handling.  */
   BFD_RELOC_390_GOTPLT64,
 
-/* 32-bit rel. offset to symbol-entry within GOT, with PLT handling.  */
+  /* 32-bit rel. offset to symbol-entry within GOT, with PLT handling.  */
   BFD_RELOC_390_GOTPLTENT,
 
-/* 16-bit rel. offset from the GOT to a PLT entry.  */
+  /* 16-bit rel. offset from the GOT to a PLT entry.  */
   BFD_RELOC_390_PLTOFF16,
 
-/* 32-bit rel. offset from the GOT to a PLT entry.  */
+  /* 32-bit rel. offset from the GOT to a PLT entry.  */
   BFD_RELOC_390_PLTOFF32,
 
-/* 64-bit rel. offset from the GOT to a PLT entry.  */
+  /* 64-bit rel. offset from the GOT to a PLT entry.  */
   BFD_RELOC_390_PLTOFF64,
 
-/* s390 tls relocations.  */
+  /* s390 tls relocations.  */
   BFD_RELOC_390_TLS_LOAD,
   BFD_RELOC_390_TLS_GDCALL,
   BFD_RELOC_390_TLS_LDCALL,
@@ -4558,102 +5601,102 @@ number for the SBIC, SBIS, SBI and CBI i
   BFD_RELOC_390_TLS_DTPOFF,
   BFD_RELOC_390_TLS_TPOFF,
 
-/* Long displacement extension.  */
+  /* Long displacement extension.  */
   BFD_RELOC_390_20,
   BFD_RELOC_390_GOT20,
   BFD_RELOC_390_GOTPLT20,
   BFD_RELOC_390_TLS_GOTIE20,
 
-/* STT_GNU_IFUNC relocation.  */
+  /* STT_GNU_IFUNC relocation.  */
   BFD_RELOC_390_IRELATIVE,
 
-/* Score relocations
-Low 16 bit for load/store  */
+  /* Score relocations.
+     Low 16 bit for load/store.  */
   BFD_RELOC_SCORE_GPREL15,
 
-/* This is a 24-bit reloc with the right 1 bit assumed to be 0  */
+  /* This is a 24-bit reloc with the right 1 bit assumed to be 0.  */
   BFD_RELOC_SCORE_DUMMY2,
   BFD_RELOC_SCORE_JMP,
 
-/* This is a 19-bit reloc with the right 1 bit assumed to be 0  */
+  /* This is a 19-bit reloc with the right 1 bit assumed to be 0.  */
   BFD_RELOC_SCORE_BRANCH,
 
-/* This is a 32-bit reloc for 48-bit instructions.  */
+  /* This is a 32-bit reloc for 48-bit instructions.  */
   BFD_RELOC_SCORE_IMM30,
 
-/* This is a 32-bit reloc for 48-bit instructions.  */
+  /* This is a 32-bit reloc for 48-bit instructions.  */
   BFD_RELOC_SCORE_IMM32,
 
-/* This is a 11-bit reloc with the right 1 bit assumed to be 0  */
+  /* This is a 11-bit reloc with the right 1 bit assumed to be 0.  */
   BFD_RELOC_SCORE16_JMP,
 
-/* This is a 8-bit reloc with the right 1 bit assumed to be 0  */
+  /* This is a 8-bit reloc with the right 1 bit assumed to be 0.  */
   BFD_RELOC_SCORE16_BRANCH,
 
-/* This is a 9-bit reloc with the right 1 bit assumed to be 0  */
+  /* This is a 9-bit reloc with the right 1 bit assumed to be 0.  */
   BFD_RELOC_SCORE_BCMP,
 
-/* Undocumented Score relocs  */
+  /* Undocumented Score relocs.  */
   BFD_RELOC_SCORE_GOT15,
   BFD_RELOC_SCORE_GOT_LO16,
   BFD_RELOC_SCORE_CALL15,
   BFD_RELOC_SCORE_DUMMY_HI16,
 
-/* Scenix IP2K - 9-bit register number / data address  */
+  /* Scenix IP2K - 9-bit register number / data address.  */
   BFD_RELOC_IP2K_FR9,
 
-/* Scenix IP2K - 4-bit register/data bank number  */
+  /* Scenix IP2K - 4-bit register/data bank number.  */
   BFD_RELOC_IP2K_BANK,
 
-/* Scenix IP2K - low 13 bits of instruction word address  */
+  /* Scenix IP2K - low 13 bits of instruction word address.  */
   BFD_RELOC_IP2K_ADDR16CJP,
 
-/* Scenix IP2K - high 3 bits of instruction word address  */
+  /* Scenix IP2K - high 3 bits of instruction word address.  */
   BFD_RELOC_IP2K_PAGE3,
 
-/* Scenix IP2K - ext/low/high 8 bits of data address  */
+  /* Scenix IP2K - ext/low/high 8 bits of data address.  */
   BFD_RELOC_IP2K_LO8DATA,
   BFD_RELOC_IP2K_HI8DATA,
   BFD_RELOC_IP2K_EX8DATA,
 
-/* Scenix IP2K - low/high 8 bits of instruction word address  */
+  /* Scenix IP2K - low/high 8 bits of instruction word address.  */
   BFD_RELOC_IP2K_LO8INSN,
   BFD_RELOC_IP2K_HI8INSN,
 
-/* Scenix IP2K - even/odd PC modifier to modify snb pcl.0  */
+  /* Scenix IP2K - even/odd PC modifier to modify snb pcl.0.  */
   BFD_RELOC_IP2K_PC_SKIP,
 
-/* Scenix IP2K - 16 bit word address in text section.  */
+  /* Scenix IP2K - 16 bit word address in text section.  */
   BFD_RELOC_IP2K_TEXT,
 
-/* Scenix IP2K - 7-bit sp or dp offset  */
+  /* Scenix IP2K - 7-bit sp or dp offset.  */
   BFD_RELOC_IP2K_FR_OFFSET,
 
-/* Scenix VPE4K coprocessor - data/insn-space addressing  */
+  /* Scenix VPE4K coprocessor - data/insn-space addressing.  */
   BFD_RELOC_VPE4KMATH_DATA,
   BFD_RELOC_VPE4KMATH_INSN,
 
-/* These two relocations are used by the linker to determine which of
-the entries in a C++ virtual function table are actually used.  When
-the --gc-sections option is given, the linker will zero out the entries
-that are not used, so that the code for those functions need not be
-included in the output.
-
-VTABLE_INHERIT is a zero-space relocation used to describe to the
-linker the inheritance tree of a C++ virtual function table.  The
-relocation's symbol should be the parent class' vtable, and the
-relocation should be located at the child vtable.
-
-VTABLE_ENTRY is a zero-space relocation that describes the use of a
-virtual function table entry.  The reloc's symbol should refer to the
-table of the class mentioned in the code.  Off of that base, an offset
-describes the entry that is being used.  For Rela hosts, this offset
-is stored in the reloc's addend.  For Rel hosts, we are forced to put
-this offset in the reloc's section offset.  */
+  /* These two relocations are used by the linker to determine which of
+     the entries in a C++ virtual function table are actually used.  When
+     the --gc-sections option is given, the linker will zero out the
+     entries that are not used, so that the code for those functions need
+     not be included in the output.
+
+     VTABLE_INHERIT is a zero-space relocation used to describe to the
+     linker the inheritance tree of a C++ virtual function table.  The
+     relocation's symbol should be the parent class' vtable, and the
+     relocation should be located at the child vtable.
+
+     VTABLE_ENTRY is a zero-space relocation that describes the use of a
+     virtual function table entry.  The reloc's symbol should refer to
+     the table of the class mentioned in the code.  Off of that base, an
+     offset describes the entry that is being used.  For Rela hosts, this
+     offset is stored in the reloc's addend.  For Rel hosts, we are
+     forced to put this offset in the reloc's section offset.  */
   BFD_RELOC_VTABLE_INHERIT,
   BFD_RELOC_VTABLE_ENTRY,
 
-/* Intel IA64 Relocations.  */
+  /* Intel IA64 Relocations.  */
   BFD_RELOC_IA64_IMM14,
   BFD_RELOC_IA64_IMM22,
   BFD_RELOC_IA64_IMM64,
@@ -4734,136 +5777,137 @@ this offset in the reloc's section offse
   BFD_RELOC_IA64_DTPREL64LSB,
   BFD_RELOC_IA64_LTOFF_DTPREL22,
 
-/* Motorola 68HC11 reloc.
-This is the 8 bit high part of an absolute address.  */
+  /* Motorola 68HC11 reloc.
+     This is the 8 bit high part of an absolute address.  */
   BFD_RELOC_M68HC11_HI8,
 
-/* Motorola 68HC11 reloc.
-This is the 8 bit low part of an absolute address.  */
+  /* Motorola 68HC11 reloc.
+     This is the 8 bit low part of an absolute address.  */
   BFD_RELOC_M68HC11_LO8,
 
-/* Motorola 68HC11 reloc.
-This is the 3 bit of a value.  */
+  /* Motorola 68HC11 reloc.
+     This is the 3 bit of a value.  */
   BFD_RELOC_M68HC11_3B,
 
-/* Motorola 68HC11 reloc.
-This reloc marks the beginning of a jump/call instruction.
-It is used for linker relaxation to correctly identify beginning
-of instruction and change some branches to use PC-relative
-addressing mode.  */
+  /* Motorola 68HC11 reloc.
+     This reloc marks the beginning of a jump/call instruction.
+     It is used for linker relaxation to correctly identify beginning
+     of instruction and change some branches to use PC-relative
+     addressing mode.  */
   BFD_RELOC_M68HC11_RL_JUMP,
 
-/* Motorola 68HC11 reloc.
-This reloc marks a group of several instructions that gcc generates
-and for which the linker relaxation pass can modify and/or remove
-some of them.  */
+  /* Motorola 68HC11 reloc.
+     This reloc marks a group of several instructions that gcc generates
+     and for which the linker relaxation pass can modify and/or remove
+     some of them.  */
   BFD_RELOC_M68HC11_RL_GROUP,
 
-/* Motorola 68HC11 reloc.
-This is the 16-bit lower part of an address.  It is used for 'call'
-instruction to specify the symbol address without any special
-transformation (due to memory bank window).  */
+  /* Motorola 68HC11 reloc.
+     This is the 16-bit lower part of an address.  It is used for 'call'
+     instruction to specify the symbol address without any special
+     transformation (due to memory bank window).  */
   BFD_RELOC_M68HC11_LO16,
 
-/* Motorola 68HC11 reloc.
-This is a 8-bit reloc that specifies the page number of an address.
-It is used by 'call' instruction to specify the page number of
-the symbol.  */
+  /* Motorola 68HC11 reloc.
+     This is a 8-bit reloc that specifies the page number of an address.
+     It is used by 'call' instruction to specify the page number of
+     the symbol.  */
   BFD_RELOC_M68HC11_PAGE,
 
-/* Motorola 68HC11 reloc.
-This is a 24-bit reloc that represents the address with a 16-bit
-value and a 8-bit page number.  The symbol address is transformed
-to follow the 16K memory bank of 68HC12 (seen as mapped in the window).  */
+  /* Motorola 68HC11 reloc.
+     This is a 24-bit reloc that represents the address with a 16-bit
+     value and a 8-bit page number.  The symbol address is transformed
+     to follow the 16K memory bank of 68HC12 (seen as mapped in the
+     window).  */
   BFD_RELOC_M68HC11_24,
 
-/* Motorola 68HC12 reloc.
-This is the 5 bits of a value.  */
+  /* Motorola 68HC12 reloc.
+     This is the 5 bits of a value.  */
   BFD_RELOC_M68HC12_5B,
 
-/* Freescale XGATE reloc.
-This reloc marks the beginning of a bra/jal instruction.  */
+  /* Freescale XGATE reloc.
+     This reloc marks the beginning of a bra/jal instruction.  */
   BFD_RELOC_XGATE_RL_JUMP,
 
-/* Freescale XGATE reloc.
-This reloc marks a group of several instructions that gcc generates
-and for which the linker relaxation pass can modify and/or remove
-some of them.  */
+  /* Freescale XGATE reloc.
+     This reloc marks a group of several instructions that gcc generates
+     and for which the linker relaxation pass can modify and/or remove
+     some of them.  */
   BFD_RELOC_XGATE_RL_GROUP,
 
-/* Freescale XGATE reloc.
-This is the 16-bit lower part of an address.  It is used for the '16-bit'
-instructions.  */
+  /* Freescale XGATE reloc.
+     This is the 16-bit lower part of an address.  It is used for the
+     '16-bit' instructions.  */
   BFD_RELOC_XGATE_LO16,
 
-/* Freescale XGATE reloc.  */
+  /* Freescale XGATE reloc.  */
   BFD_RELOC_XGATE_GPAGE,
 
-/* Freescale XGATE reloc.  */
+  /* Freescale XGATE reloc.  */
   BFD_RELOC_XGATE_24,
 
-/* Freescale XGATE reloc.
-This is a 9-bit pc-relative reloc.  */
+  /* Freescale XGATE reloc.
+     This is a 9-bit pc-relative reloc.  */
   BFD_RELOC_XGATE_PCREL_9,
 
-/* Freescale XGATE reloc.
-This is a 10-bit pc-relative reloc.  */
+  /* Freescale XGATE reloc.
+     This is a 10-bit pc-relative reloc.  */
   BFD_RELOC_XGATE_PCREL_10,
 
-/* Freescale XGATE reloc.
-This is the 16-bit lower part of an address.  It is used for the '16-bit'
-instructions.  */
+  /* Freescale XGATE reloc.
+     This is the 16-bit lower part of an address.  It is used for the
+     '16-bit' instructions.  */
   BFD_RELOC_XGATE_IMM8_LO,
 
-/* Freescale XGATE reloc.
-This is the 16-bit higher part of an address.  It is used for the '16-bit'
-instructions.  */
+  /* Freescale XGATE reloc.
+     This is the 16-bit higher part of an address.  It is used for the
+     '16-bit' instructions.  */
   BFD_RELOC_XGATE_IMM8_HI,
 
-/* Freescale XGATE reloc.
-This is a 3-bit pc-relative reloc.  */
+  /* Freescale XGATE reloc.
+     This is a 3-bit pc-relative reloc.  */
   BFD_RELOC_XGATE_IMM3,
 
-/* Freescale XGATE reloc.
-This is a 4-bit pc-relative reloc.  */
+  /* Freescale XGATE reloc.
+     This is a 4-bit pc-relative reloc.  */
   BFD_RELOC_XGATE_IMM4,
 
-/* Freescale XGATE reloc.
-This is a 5-bit pc-relative reloc.  */
+  /* Freescale XGATE reloc.
+     This is a 5-bit pc-relative reloc.  */
   BFD_RELOC_XGATE_IMM5,
 
-/* Motorola 68HC12 reloc.
-This is the 9 bits of a value.  */
+  /* Motorola 68HC12 reloc.
+     This is the 9 bits of a value.  */
   BFD_RELOC_M68HC12_9B,
 
-/* Motorola 68HC12 reloc.
-This is the 16 bits of a value.  */
+  /* Motorola 68HC12 reloc.
+     This is the 16 bits of a value.  */
   BFD_RELOC_M68HC12_16B,
 
-/* Motorola 68HC12/XGATE reloc.
-This is a PCREL9 branch.  */
+  /* Motorola 68HC12/XGATE reloc.
+     This is a PCREL9 branch.  */
   BFD_RELOC_M68HC12_9_PCREL,
 
-/* Motorola 68HC12/XGATE reloc.
-This is a PCREL10 branch.  */
+  /* Motorola 68HC12/XGATE reloc.
+     This is a PCREL10 branch.  */
   BFD_RELOC_M68HC12_10_PCREL,
 
-/* Motorola 68HC12/XGATE reloc.
-This is the 8 bit low part of an absolute address and immediately precedes
-a matching HI8XG part.  */
+  /* Motorola 68HC12/XGATE reloc.
+     This is the 8 bit low part of an absolute address and immediately
+     precedes a matching HI8XG part.  */
   BFD_RELOC_M68HC12_LO8XG,
 
-/* Motorola 68HC12/XGATE reloc.
-This is the 8 bit high part of an absolute address and immediately follows
-a matching LO8XG part.  */
+  /* Motorola 68HC12/XGATE reloc.
+     This is the 8 bit high part of an absolute address and immediately
+     follows a matching LO8XG part.  */
   BFD_RELOC_M68HC12_HI8XG,
 
-/* Freescale S12Z reloc.
-This is a 15 bit relative address.  If the most significant bits are all zero
-then it may be truncated to 8 bits.  */
+  /* Freescale S12Z reloc.
+     This is a 15 bit relative address.  If the most significant bits are
+     all zero then it may be truncated to 8 bits.  */
   BFD_RELOC_S12Z_15_PCREL,
 
-/* NS CR16 Relocations.  */
+  /* NS CR16 Relocations.  */
   BFD_RELOC_CR16_NUM8,
   BFD_RELOC_CR16_NUM16,
   BFD_RELOC_CR16_NUM32,
@@ -4898,7 +5942,7 @@ then it may be truncated to 8 bits.  */
   BFD_RELOC_CR16_GOTC_REGREL20,
   BFD_RELOC_CR16_GLOB_DAT,
 
-/* NS CRX Relocations.  */
+  /* NS CRX Relocations.  */
   BFD_RELOC_CRX_REL4,
   BFD_RELOC_CRX_REL8,
   BFD_RELOC_CRX_REL8_CMP,
@@ -4920,8 +5964,8 @@ then it may be truncated to 8 bits.  */
   BFD_RELOC_CRX_SWITCH16,
   BFD_RELOC_CRX_SWITCH32,
 
-/* These relocs are only used within the CRIS assembler.  They are not
-(at present) written to any object files.  */
+  /* These relocs are only used within the CRIS assembler.  They are not
+     (at present) written to any object files.  */
   BFD_RELOC_CRIS_BDISP8,
   BFD_RELOC_CRIS_UNSIGNED_5,
   BFD_RELOC_CRIS_SIGNED_6,
@@ -4933,34 +5977,35 @@ then it may be truncated to 8 bits.  */
   BFD_RELOC_CRIS_LAPCQ_OFFSET,
   BFD_RELOC_CRIS_UNSIGNED_4,
 
-/* Relocs used in ELF shared libraries for CRIS.  */
+  /* Relocs used in ELF shared libraries for CRIS.  */
   BFD_RELOC_CRIS_COPY,
   BFD_RELOC_CRIS_GLOB_DAT,
   BFD_RELOC_CRIS_JUMP_SLOT,
   BFD_RELOC_CRIS_RELATIVE,
 
-/* 32-bit offset to symbol-entry within GOT.  */
+  /* 32-bit offset to symbol-entry within GOT.  */
   BFD_RELOC_CRIS_32_GOT,
 
-/* 16-bit offset to symbol-entry within GOT.  */
+  /* 16-bit offset to symbol-entry within GOT.  */
   BFD_RELOC_CRIS_16_GOT,
 
-/* 32-bit offset to symbol-entry within GOT, with PLT handling.  */
+  /* 32-bit offset to symbol-entry within GOT, with PLT handling.  */
   BFD_RELOC_CRIS_32_GOTPLT,
 
-/* 16-bit offset to symbol-entry within GOT, with PLT handling.  */
+  /* 16-bit offset to symbol-entry within GOT, with PLT handling.  */
   BFD_RELOC_CRIS_16_GOTPLT,
 
-/* 32-bit offset to symbol, relative to GOT.  */
+  /* 32-bit offset to symbol, relative to GOT.  */
   BFD_RELOC_CRIS_32_GOTREL,
 
-/* 32-bit offset to symbol with PLT entry, relative to GOT.  */
+  /* 32-bit offset to symbol with PLT entry, relative to GOT.  */
   BFD_RELOC_CRIS_32_PLT_GOTREL,
 
-/* 32-bit offset to symbol with PLT entry, relative to this relocation.  */
+  /* 32-bit offset to symbol with PLT entry, relative to this
+     relocation.  */
   BFD_RELOC_CRIS_32_PLT_PCREL,
 
-/* Relocs used in TLS code for CRIS.  */
+  /* Relocs used in TLS code for CRIS.  */
   BFD_RELOC_CRIS_32_GOT_GD,
   BFD_RELOC_CRIS_16_GOT_GD,
   BFD_RELOC_CRIS_32_GD,
@@ -4974,7 +6019,7 @@ then it may be truncated to 8 bits.  */
   BFD_RELOC_CRIS_DTPMOD,
   BFD_RELOC_CRIS_32_IE,
 
-/* OpenRISC 1000 Relocations.  */
+  /* OpenRISC 1000 Relocations.  */
   BFD_RELOC_OR1K_REL_26,
   BFD_RELOC_OR1K_SLO16,
   BFD_RELOC_OR1K_PCREL_PG21,
@@ -4982,6 +6027,7 @@ then it may be truncated to 8 bits.  */
   BFD_RELOC_OR1K_SLO13,
   BFD_RELOC_OR1K_GOTPC_HI16,
   BFD_RELOC_OR1K_GOTPC_LO16,
+  BFD_RELOC_OR1K_GOT_AHI16,
   BFD_RELOC_OR1K_GOT16,
   BFD_RELOC_OR1K_GOT_PG21,
   BFD_RELOC_OR1K_GOT_LO13,
@@ -5015,7 +6061,7 @@ then it may be truncated to 8 bits.  */
   BFD_RELOC_OR1K_TLS_DTPOFF,
   BFD_RELOC_OR1K_TLS_DTPMOD,
 
-/* H8 elf Relocations.  */
+  /* H8 elf Relocations.  */
   BFD_RELOC_H8_DIR16A8,
   BFD_RELOC_H8_DIR16R8,
   BFD_RELOC_H8_DIR24A8,
@@ -5023,46 +6069,39 @@ then it may be truncated to 8 bits.  */
   BFD_RELOC_H8_DIR32A16,
   BFD_RELOC_H8_DISP32A16,
 
-/* Sony Xstormy16 Relocations.  */
+  /* Sony Xstormy16 Relocations.  */
   BFD_RELOC_XSTORMY16_REL_12,
   BFD_RELOC_XSTORMY16_12,
   BFD_RELOC_XSTORMY16_24,
   BFD_RELOC_XSTORMY16_FPTR16,
 
-/* Self-describing complex relocations.  */
+  /* Self-describing complex relocations.  */
   BFD_RELOC_RELC,
 
-
-/* Infineon Relocations.  */
-  BFD_RELOC_XC16X_PAG,
-  BFD_RELOC_XC16X_POF,
-  BFD_RELOC_XC16X_SEG,
-  BFD_RELOC_XC16X_SOF,
-
-/* Relocations used by VAX ELF.  */
+  /* Relocations used by VAX ELF.  */
   BFD_RELOC_VAX_GLOB_DAT,
   BFD_RELOC_VAX_JMP_SLOT,
   BFD_RELOC_VAX_RELATIVE,
 
-/* Morpho MT - 16 bit immediate relocation.  */
+  /* Morpho MT - 16 bit immediate relocation.  */
   BFD_RELOC_MT_PC16,
 
-/* Morpho MT - Hi 16 bits of an address.  */
+  /* Morpho MT - Hi 16 bits of an address.  */
   BFD_RELOC_MT_HI16,
 
-/* Morpho MT - Low 16 bits of an address.  */
+  /* Morpho MT - Low 16 bits of an address.  */
   BFD_RELOC_MT_LO16,
 
-/* Morpho MT - Used to tell the linker which vtable entries are used.  */
+  /* Morpho MT - Used to tell the linker which vtable entries are used.  */
   BFD_RELOC_MT_GNU_VTINHERIT,
 
-/* Morpho MT - Used to tell the linker which vtable entries are used.  */
+  /* Morpho MT - Used to tell the linker which vtable entries are used.  */
   BFD_RELOC_MT_GNU_VTENTRY,
 
-/* Morpho MT - 8 bit immediate relocation.  */
+  /* Morpho MT - 8 bit immediate relocation.  */
   BFD_RELOC_MT_PCINSN8,
 
-/* msp430 specific relocation codes  */
+  /* msp430 specific relocation codes.  */
   BFD_RELOC_MSP430_10_PCREL,
   BFD_RELOC_MSP430_16_PCREL,
   BFD_RELOC_MSP430_16,
@@ -5085,8 +6124,10 @@ then it may be truncated to 8 bits.  */
   BFD_RELOC_MSP430_ABS_HI16,
   BFD_RELOC_MSP430_PREL31,
   BFD_RELOC_MSP430_SYM_DIFF,
+  BFD_RELOC_MSP430_SET_ULEB128,
+  BFD_RELOC_MSP430_SUB_ULEB128,
 
-/* Relocations used by the Altera Nios II core.  */
+  /* Relocations used by the Altera Nios II core.  */
   BFD_RELOC_NIOS2_S16,
   BFD_RELOC_NIOS2_U16,
   BFD_RELOC_NIOS2_CALL26,
@@ -5140,74 +6181,77 @@ then it may be truncated to 8 bits.  */
   BFD_RELOC_NIOS2_R2_T1X1I6,
   BFD_RELOC_NIOS2_R2_T1X1I6_2,
 
-/* PRU LDI 16-bit unsigned data-memory relocation.  */
+  /* PRU LDI 16-bit unsigned data-memory relocation.  */
   BFD_RELOC_PRU_U16,
 
-/* PRU LDI 16-bit unsigned instruction-memory relocation.  */
+  /* PRU LDI 16-bit unsigned instruction-memory relocation.  */
   BFD_RELOC_PRU_U16_PMEMIMM,
 
-/* PRU relocation for two consecutive LDI load instructions that load a
-32 bit value into a register. If the higher bits are all zero, then
-the second instruction may be relaxed.  */
+  /* PRU relocation for two consecutive LDI load instructions that load a
+     32 bit value into a register. If the higher bits are all zero, then
+     the second instruction may be relaxed.  */
   BFD_RELOC_PRU_LDI32,
 
-/* PRU QBBx 10-bit signed PC-relative relocation.  */
+  /* PRU QBBx 10-bit signed PC-relative relocation.  */
   BFD_RELOC_PRU_S10_PCREL,
 
-/* PRU 8-bit unsigned relocation used for the LOOP instruction.  */
+  /* PRU 8-bit unsigned relocation used for the LOOP instruction.  */
   BFD_RELOC_PRU_U8_PCREL,
 
-/* PRU Program Memory relocations.  Used to convert from byte addressing to
-32-bit word addressing.  */
+  /* PRU Program Memory relocations.  Used to convert from byte
+     addressing to 32-bit word addressing.  */
   BFD_RELOC_PRU_32_PMEM,
   BFD_RELOC_PRU_16_PMEM,
 
-/* PRU relocations to mark the difference of two local symbols.
-These are only needed to support linker relaxation and can be ignored
-when not relaxing.  The field is set to the value of the difference
-assuming no relaxation.  The relocation encodes the position of the
-second symbol so the linker can determine whether to adjust the field
-value. The PMEM variants encode the word difference, instead of byte
-difference between symbols.  */
+  /* PRU relocations to mark the difference of two local symbols.
+     These are only needed to support linker relaxation and can be
+     ignored when not relaxing.  The field is set to the value of the
+     difference assuming no relaxation.  The relocation encodes the
+     position of the second symbol so the linker can determine whether to
+     adjust the field value.  The PMEM variants encode the word
+     difference, instead of byte difference between symbols.  */
   BFD_RELOC_PRU_GNU_DIFF8,
   BFD_RELOC_PRU_GNU_DIFF16,
   BFD_RELOC_PRU_GNU_DIFF32,
   BFD_RELOC_PRU_GNU_DIFF16_PMEM,
   BFD_RELOC_PRU_GNU_DIFF32_PMEM,
 
-/* IQ2000 Relocations.  */
+  /* IQ2000 Relocations.  */
   BFD_RELOC_IQ2000_OFFSET_16,
   BFD_RELOC_IQ2000_OFFSET_21,
   BFD_RELOC_IQ2000_UHI16,
 
-/* Special Xtensa relocation used only by PLT entries in ELF shared
-objects to indicate that the runtime linker should set the value
-to one of its own internal functions or data structures.  */
+  /* Special Xtensa relocation used only by PLT entries in ELF shared
+     objects to indicate that the runtime linker should set the value
+     to one of its own internal functions or data structures.  */
   BFD_RELOC_XTENSA_RTLD,
 
-/* Xtensa relocations for ELF shared objects.  */
+  /* Xtensa relocations for ELF shared objects.  */
   BFD_RELOC_XTENSA_GLOB_DAT,
   BFD_RELOC_XTENSA_JMP_SLOT,
   BFD_RELOC_XTENSA_RELATIVE,
 
-/* Xtensa relocation used in ELF object files for symbols that may require
-PLT entries.  Otherwise, this is just a generic 32-bit relocation.  */
+  /* Xtensa relocation used in ELF object files for symbols that may
+     require PLT entries.  Otherwise, this is just a generic 32-bit
+     relocation.  */
   BFD_RELOC_XTENSA_PLT,
 
-/* Xtensa relocations to mark the difference of two local symbols.
-These are only needed to support linker relaxation and can be ignored
-when not relaxing.  The field is set to the value of the difference
-assuming no relaxation.  The relocation encodes the position of the
-first symbol so the linker can determine whether to adjust the field
-value.  */
+  /* Xtensa relocations for backward compatibility.  These have been
+     replaced by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF.
+     Xtensa relocations to mark the difference of two local symbols.
+     These are only needed to support linker relaxation and can be
+     ignored when not relaxing.  The field is set to the value of the
+     difference assuming no relaxation.  The relocation encodes the
+     position of the first symbol so the linker can determine whether to
+     adjust the field value.  */
   BFD_RELOC_XTENSA_DIFF8,
   BFD_RELOC_XTENSA_DIFF16,
   BFD_RELOC_XTENSA_DIFF32,
 
-/* Generic Xtensa relocations for instruction operands.  Only the slot
-number is encoded in the relocation.  The relocation applies to the
-last PC-relative immediate operand, or if there are no PC-relative
-immediates, to the last immediate operand.  */
+  /* Generic Xtensa relocations for instruction operands.  Only the slot
+     number is encoded in the relocation.  The relocation applies to the
+     last PC-relative immediate operand, or if there are no PC-relative
+     immediates, to the last immediate operand.  */
   BFD_RELOC_XTENSA_SLOT0_OP,
   BFD_RELOC_XTENSA_SLOT1_OP,
   BFD_RELOC_XTENSA_SLOT2_OP,
@@ -5224,8 +6268,8 @@ immediates, to the last immediate operan
   BFD_RELOC_XTENSA_SLOT13_OP,
   BFD_RELOC_XTENSA_SLOT14_OP,
 
-/* Alternate Xtensa relocations.  Only the slot is encoded in the
-relocation.  The meaning of these relocations is opcode-specific.  */
+  /* Alternate Xtensa relocations.  Only the slot is encoded in the
+     relocation.  The meaning of these relocations is opcode-specific.  */
   BFD_RELOC_XTENSA_SLOT0_ALT,
   BFD_RELOC_XTENSA_SLOT1_ALT,
   BFD_RELOC_XTENSA_SLOT2_ALT,
@@ -5242,24 +6286,24 @@ relocation.  The meaning of these reloca
   BFD_RELOC_XTENSA_SLOT13_ALT,
   BFD_RELOC_XTENSA_SLOT14_ALT,
 
-/* Xtensa relocations for backward compatibility.  These have all been
-replaced by BFD_RELOC_XTENSA_SLOT0_OP.  */
+  /* Xtensa relocations for backward compatibility.  These have all been
+     replaced by BFD_RELOC_XTENSA_SLOT0_OP.  */
   BFD_RELOC_XTENSA_OP0,
   BFD_RELOC_XTENSA_OP1,
   BFD_RELOC_XTENSA_OP2,
 
-/* Xtensa relocation to mark that the assembler expanded the
-instructions from an original target.  The expansion size is
-encoded in the reloc size.  */
+  /* Xtensa relocation to mark that the assembler expanded the
+     instructions from an original target.  The expansion size is
+     encoded in the reloc size.  */
   BFD_RELOC_XTENSA_ASM_EXPAND,
 
-/* Xtensa relocation to mark that the linker should simplify
-assembler-expanded instructions.  This is commonly used
-internally by the linker after analysis of a
-BFD_RELOC_XTENSA_ASM_EXPAND.  */
+  /* Xtensa relocation to mark that the linker should simplify
+     assembler-expanded instructions.  This is commonly used
+     internally by the linker after analysis of a
+     BFD_RELOC_XTENSA_ASM_EXPAND.  */
   BFD_RELOC_XTENSA_ASM_SIMPLIFY,
 
-/* Xtensa TLS relocations.  */
+  /* Xtensa TLS relocations.  */
   BFD_RELOC_XTENSA_TLSDESC_FN,
   BFD_RELOC_XTENSA_TLSDESC_ARG,
   BFD_RELOC_XTENSA_TLS_DTPOFF,
@@ -5268,19 +6312,56 @@ BFD_RELOC_XTENSA_ASM_EXPAND.  */
   BFD_RELOC_XTENSA_TLS_ARG,
   BFD_RELOC_XTENSA_TLS_CALL,
 
-/* 8 bit signed offset in (ix+d) or (iy+d).  */
+  /* Xtensa relocations to mark the difference of two local symbols.
+     These are only needed to support linker relaxation and can be
+     ignored when not relaxing.  The field is set to the value of the
+     difference assuming no relaxation.  The relocation encodes the
+     position of the subtracted symbol so the linker can determine
+     whether to adjust the field value.  PDIFF relocations are used for
+     positive differences, NDIFF relocations are used for negative
+     differences.  The difference value is treated as unsigned with these
+     relocation types, giving full 8/16 value ranges.  */
+  BFD_RELOC_XTENSA_PDIFF8,
+  BFD_RELOC_XTENSA_PDIFF16,
+  BFD_RELOC_XTENSA_PDIFF32,
+  BFD_RELOC_XTENSA_NDIFF8,
+  BFD_RELOC_XTENSA_NDIFF16,
+  BFD_RELOC_XTENSA_NDIFF32,
+
+  /* 8 bit signed offset in (ix+d) or (iy+d).  */
   BFD_RELOC_Z80_DISP8,
 
-/* DJNZ offset.  */
+  /* First 8 bits of multibyte (32, 24 or 16 bit) value.  */
+  BFD_RELOC_Z80_BYTE0,
+
+  /* Second 8 bits of multibyte (32, 24 or 16 bit) value.  */
+  BFD_RELOC_Z80_BYTE1,
+
+  /* Third 8 bits of multibyte (32 or 24 bit) value.  */
+  BFD_RELOC_Z80_BYTE2,
+
+  /* Fourth 8 bits of multibyte (32 bit) value.  */
+  BFD_RELOC_Z80_BYTE3,
+
+  /* Lowest 16 bits of multibyte (32 or 24 bit) value.  */
+  BFD_RELOC_Z80_WORD0,
+
+  /* Highest 16 bits of multibyte (32 or 24 bit) value.  */
+  BFD_RELOC_Z80_WORD1,
+
+  /* Like BFD_RELOC_16 but big-endian.  */
+  BFD_RELOC_Z80_16_BE,
+
+  /* DJNZ offset.  */
   BFD_RELOC_Z8K_DISP7,
 
-/* CALR offset.  */
+  /* CALR offset.  */
   BFD_RELOC_Z8K_CALLR,
 
-/* 4 bit value.  */
+  /* 4 bit value.  */
   BFD_RELOC_Z8K_IMM4L,
 
-/* Lattice Mico32 relocations.  */
+  /* Lattice Mico32 relocations.  */
   BFD_RELOC_LM32_CALL,
   BFD_RELOC_LM32_BRANCH,
   BFD_RELOC_LM32_16_GOT,
@@ -5291,609 +6372,697 @@ BFD_RELOC_XTENSA_ASM_EXPAND.  */
   BFD_RELOC_LM32_JMP_SLOT,
   BFD_RELOC_LM32_RELATIVE,
 
-/* Difference between two section addreses.  Must be followed by a
-BFD_RELOC_MACH_O_PAIR.  */
+  /* Difference between two section addreses.  Must be followed by a
+     BFD_RELOC_MACH_O_PAIR.  */
   BFD_RELOC_MACH_O_SECTDIFF,
 
-/* Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.  */
+  /* Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.  */
   BFD_RELOC_MACH_O_LOCAL_SECTDIFF,
 
-/* Pair of relocation.  Contains the first symbol.  */
+  /* Pair of relocation.  Contains the first symbol.  */
   BFD_RELOC_MACH_O_PAIR,
 
-/* Symbol will be substracted.  Must be followed by a BFD_RELOC_32.  */
+  /* Symbol will be substracted.  Must be followed by a BFD_RELOC_32.  */
   BFD_RELOC_MACH_O_SUBTRACTOR32,
 
-/* Symbol will be substracted.  Must be followed by a BFD_RELOC_64.  */
+  /* Symbol will be substracted.  Must be followed by a BFD_RELOC_64.  */
   BFD_RELOC_MACH_O_SUBTRACTOR64,
 
-/* PCREL relocations.  They are marked as branch to create PLT entry if
-required.  */
+  /* PCREL relocations.  They are marked as branch to create PLT entry if
+     required.  */
   BFD_RELOC_MACH_O_X86_64_BRANCH32,
   BFD_RELOC_MACH_O_X86_64_BRANCH8,
 
-/* Used when referencing a GOT entry.  */
+  /* Used when referencing a GOT entry.  */
   BFD_RELOC_MACH_O_X86_64_GOT,
 
-/* Used when loading a GOT entry with movq.  It is specially marked so that
-the linker could optimize the movq to a leaq if possible.  */
+  /* Used when loading a GOT entry with movq.  It is specially marked so
+     that the linker could optimize the movq to a leaq if possible.  */
   BFD_RELOC_MACH_O_X86_64_GOT_LOAD,
 
-/* Same as BFD_RELOC_32_PCREL but with an implicit -1 addend.  */
+  /* Same as BFD_RELOC_32_PCREL but with an implicit -1 addend.  */
   BFD_RELOC_MACH_O_X86_64_PCREL32_1,
 
-/* Same as BFD_RELOC_32_PCREL but with an implicit -2 addend.  */
+  /* Same as BFD_RELOC_32_PCREL but with an implicit -2 addend.  */
   BFD_RELOC_MACH_O_X86_64_PCREL32_2,
 
-/* Same as BFD_RELOC_32_PCREL but with an implicit -4 addend.  */
+  /* Same as BFD_RELOC_32_PCREL but with an implicit -4 addend.  */
   BFD_RELOC_MACH_O_X86_64_PCREL32_4,
 
-/* Used when referencing a TLV entry.  */
+  /* Used when referencing a TLV entry.  */
   BFD_RELOC_MACH_O_X86_64_TLV,
 
-/* Addend for PAGE or PAGEOFF.  */
+  /* Addend for PAGE or PAGEOFF.  */
   BFD_RELOC_MACH_O_ARM64_ADDEND,
 
-/* Relative offset to page of GOT slot.  */
+  /* Relative offset to page of GOT slot.  */
   BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21,
 
-/* Relative offset within page of GOT slot.  */
+  /* Relative offset within page of GOT slot.  */
   BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12,
 
-/* Address of a GOT entry.  */
+  /* Address of a GOT entry.  */
   BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT,
 
-/* This is a 32 bit reloc for the microblaze that stores the
-low 16 bits of a value  */
+  /* This is a 32 bit reloc for the microblaze that stores the low 16
+     bits of a value.  */
   BFD_RELOC_MICROBLAZE_32_LO,
 
-/* This is a 32 bit pc-relative reloc for the microblaze that
-stores the low 16 bits of a value  */
+  /* This is a 32 bit pc-relative reloc for the microblaze that stores
+     the low 16 bits of a value.  */
   BFD_RELOC_MICROBLAZE_32_LO_PCREL,
 
-/* This is a 32 bit reloc for the microblaze that stores a
-value relative to the read-only small data area anchor  */
+  /* This is a 32 bit reloc for the microblaze that stores a value
+     relative to the read-only small data area anchor.  */
   BFD_RELOC_MICROBLAZE_32_ROSDA,
 
-/* This is a 32 bit reloc for the microblaze that stores a
-value relative to the read-write small data area anchor  */
+  /* This is a 32 bit reloc for the microblaze that stores a value
+     relative to the read-write small data area anchor.  */
   BFD_RELOC_MICROBLAZE_32_RWSDA,
 
-/* This is a 32 bit reloc for the microblaze to handle
-expressions of the form "Symbol Op Symbol"  */
+  /* This is a 32 bit reloc for the microblaze to handle expressions of
+     the form "Symbol Op Symbol".  */
   BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM,
 
-/* This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  No relocation is
-done here - only used for relaxing  */
+  /* This is a 32 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  No relocation is done here -
+     only used for relaxing.  */
+  BFD_RELOC_MICROBLAZE_32_NONE,
+
+  /* This is a 64 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  No relocation is done here -
+     only used for relaxing.  */
   BFD_RELOC_MICROBLAZE_64_NONE,
 
-/* This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-PC-relative GOT offset  */
+  /* This is a 64 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  The relocation is PC-relative
+     GOT offset.  */
   BFD_RELOC_MICROBLAZE_64_GOTPC,
 
-/* This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-GOT offset  */
+  /* This is a 64 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  The relocation is GOT offset.  */
   BFD_RELOC_MICROBLAZE_64_GOT,
 
-/* This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-PC-relative offset into PLT  */
+  /* This is a 64 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  The relocation is PC-relative
+     offset into PLT.  */
   BFD_RELOC_MICROBLAZE_64_PLT,
 
-/* This is a 64 bit reloc that stores the 32 bit GOT relative
-value in two words (with an imm instruction).  The relocation is
-relative offset from _GLOBAL_OFFSET_TABLE_  */
+  /* This is a 64 bit reloc that stores the 32 bit GOT relative value in
+     two words (with an imm instruction).  The relocation is relative
+     offset from _GLOBAL_OFFSET_TABLE_.  */
   BFD_RELOC_MICROBLAZE_64_GOTOFF,
 
-/* This is a 32 bit reloc that stores the 32 bit GOT relative
-value in a word.  The relocation is relative offset from  */
+  /* This is a 32 bit reloc that stores the 32 bit GOT relative value in
+     a word.  The relocation is relative offset from
+     _GLOBAL_OFFSET_TABLE_.  */
   BFD_RELOC_MICROBLAZE_32_GOTOFF,
 
-/* This is used to tell the dynamic linker to copy the value out of
-the dynamic object into the runtime process image.  */
+  /* This is used to tell the dynamic linker to copy the value out of
+     the dynamic object into the runtime process image.  */
   BFD_RELOC_MICROBLAZE_COPY,
 
-/* Unused Reloc  */
+  /* Unused Reloc.  */
   BFD_RELOC_MICROBLAZE_64_TLS,
 
-/* This is a 64 bit reloc that stores the 32 bit GOT relative value
-of the GOT TLS GD info entry in two words (with an imm instruction). The
-relocation is GOT offset.  */
+  /* This is a 64 bit reloc that stores the 32 bit GOT relative value
+     of the GOT TLS GD info entry in two words (with an imm instruction).
+     The relocation is GOT offset.  */
   BFD_RELOC_MICROBLAZE_64_TLSGD,
 
-/* This is a 64 bit reloc that stores the 32 bit GOT relative value
-of the GOT TLS LD info entry in two words (with an imm instruction). The
-relocation is GOT offset.  */
+  /* This is a 64 bit reloc that stores the 32 bit GOT relative value
+     of the GOT TLS LD info entry in two words (with an imm instruction).
+     The relocation is GOT offset.  */
   BFD_RELOC_MICROBLAZE_64_TLSLD,
 
-/* This is a 32 bit reloc that stores the Module ID to GOT(n).  */
+  /* This is a 32 bit reloc that stores the Module ID to GOT(n).  */
   BFD_RELOC_MICROBLAZE_32_TLSDTPMOD,
 
-/* This is a 32 bit reloc that stores TLS offset to GOT(n+1).  */
+  /* This is a 32 bit reloc that stores TLS offset to GOT(n+1).  */
   BFD_RELOC_MICROBLAZE_32_TLSDTPREL,
 
-/* This is a 32 bit reloc for storing TLS offset to two words (uses imm
-instruction)  */
+  /* This is a 32 bit reloc for storing TLS offset to two words (uses imm
+     instruction).  */
   BFD_RELOC_MICROBLAZE_64_TLSDTPREL,
 
-/* This is a 64 bit reloc that stores 32-bit thread pointer relative offset
-to two words (uses imm instruction).  */
+  /* This is a 64 bit reloc that stores 32-bit thread pointer relative
+     offset to two words (uses imm instruction).  */
   BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL,
 
-/* This is a 64 bit reloc that stores 32-bit thread pointer relative offset
-to two words (uses imm instruction).  */
+  /* This is a 64 bit reloc that stores 32-bit thread pointer relative
+     offset to two words (uses imm instruction).  */
   BFD_RELOC_MICROBLAZE_64_TLSTPREL,
 
-/* This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-PC-relative offset from start of TEXT.  */
+  /* This is a 64 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  The relocation is PC-relative
+     offset from start of TEXT.  */
   BFD_RELOC_MICROBLAZE_64_TEXTPCREL,
 
-/* This is a 64 bit reloc that stores the 32 bit offset
-value in two words (with an imm instruction).  The relocation is
-relative offset from start of TEXT.  */
+  /* This is a 64 bit reloc that stores the 32 bit offset value in two
+     words (with an imm instruction).  The relocation is relative offset
+     from start of TEXT.  */
   BFD_RELOC_MICROBLAZE_64_TEXTREL,
 
-/* AArch64 pseudo relocation code to mark the start of the AArch64
-relocation enumerators.  N.B. the order of the enumerators is
-important as several tables in the AArch64 bfd backend are indexed
-by these enumerators; make sure they are all synced.  */
+  /* KVX pseudo relocation code to mark the start of the KVX relocation
+     enumerators.  N.B. the order of the enumerators is important as
+     several tables in the KVX bfd backend are indexed by these
+     enumerators; make sure they are all synced.  */
+  BFD_RELOC_KVX_RELOC_START,
+
+  /* KVX null relocation code.  */
+  BFD_RELOC_KVX_NONE,
+
+  /* KVX Relocations.  */
+  BFD_RELOC_KVX_16,
+  BFD_RELOC_KVX_32,
+  BFD_RELOC_KVX_64,
+  BFD_RELOC_KVX_S16_PCREL,
+  BFD_RELOC_KVX_PCREL17,
+  BFD_RELOC_KVX_PCREL27,
+  BFD_RELOC_KVX_32_PCREL,
+  BFD_RELOC_KVX_S37_PCREL_LO10,
+  BFD_RELOC_KVX_S37_PCREL_UP27,
+  BFD_RELOC_KVX_S43_PCREL_LO10,
+  BFD_RELOC_KVX_S43_PCREL_UP27,
+  BFD_RELOC_KVX_S43_PCREL_EX6,
+  BFD_RELOC_KVX_S64_PCREL_LO10,
+  BFD_RELOC_KVX_S64_PCREL_UP27,
+  BFD_RELOC_KVX_S64_PCREL_EX27,
+  BFD_RELOC_KVX_64_PCREL,
+  BFD_RELOC_KVX_S16,
+  BFD_RELOC_KVX_S32_LO5,
+  BFD_RELOC_KVX_S32_UP27,
+  BFD_RELOC_KVX_S37_LO10,
+  BFD_RELOC_KVX_S37_UP27,
+  BFD_RELOC_KVX_S37_GOTOFF_LO10,
+  BFD_RELOC_KVX_S37_GOTOFF_UP27,
+  BFD_RELOC_KVX_S43_GOTOFF_LO10,
+  BFD_RELOC_KVX_S43_GOTOFF_UP27,
+  BFD_RELOC_KVX_S43_GOTOFF_EX6,
+  BFD_RELOC_KVX_32_GOTOFF,
+  BFD_RELOC_KVX_64_GOTOFF,
+  BFD_RELOC_KVX_32_GOT,
+  BFD_RELOC_KVX_S37_GOT_LO10,
+  BFD_RELOC_KVX_S37_GOT_UP27,
+  BFD_RELOC_KVX_S43_GOT_LO10,
+  BFD_RELOC_KVX_S43_GOT_UP27,
+  BFD_RELOC_KVX_S43_GOT_EX6,
+  BFD_RELOC_KVX_64_GOT,
+  BFD_RELOC_KVX_GLOB_DAT,
+  BFD_RELOC_KVX_COPY,
+  BFD_RELOC_KVX_JMP_SLOT,
+  BFD_RELOC_KVX_RELATIVE,
+  BFD_RELOC_KVX_S43_LO10,
+  BFD_RELOC_KVX_S43_UP27,
+  BFD_RELOC_KVX_S43_EX6,
+  BFD_RELOC_KVX_S64_LO10,
+  BFD_RELOC_KVX_S64_UP27,
+  BFD_RELOC_KVX_S64_EX27,
+  BFD_RELOC_KVX_S37_GOTADDR_LO10,
+  BFD_RELOC_KVX_S37_GOTADDR_UP27,
+  BFD_RELOC_KVX_S43_GOTADDR_LO10,
+  BFD_RELOC_KVX_S43_GOTADDR_UP27,
+  BFD_RELOC_KVX_S43_GOTADDR_EX6,
+  BFD_RELOC_KVX_S64_GOTADDR_LO10,
+  BFD_RELOC_KVX_S64_GOTADDR_UP27,
+  BFD_RELOC_KVX_S64_GOTADDR_EX27,
+  BFD_RELOC_KVX_64_DTPMOD,
+  BFD_RELOC_KVX_64_DTPOFF,
+  BFD_RELOC_KVX_S37_TLS_DTPOFF_LO10,
+  BFD_RELOC_KVX_S37_TLS_DTPOFF_UP27,
+  BFD_RELOC_KVX_S43_TLS_DTPOFF_LO10,
+  BFD_RELOC_KVX_S43_TLS_DTPOFF_UP27,
+  BFD_RELOC_KVX_S43_TLS_DTPOFF_EX6,
+  BFD_RELOC_KVX_S37_TLS_GD_LO10,
+  BFD_RELOC_KVX_S37_TLS_GD_UP27,
+  BFD_RELOC_KVX_S43_TLS_GD_LO10,
+  BFD_RELOC_KVX_S43_TLS_GD_UP27,
+  BFD_RELOC_KVX_S43_TLS_GD_EX6,
+  BFD_RELOC_KVX_S37_TLS_LD_LO10,
+  BFD_RELOC_KVX_S37_TLS_LD_UP27,
+  BFD_RELOC_KVX_S43_TLS_LD_LO10,
+  BFD_RELOC_KVX_S43_TLS_LD_UP27,
+  BFD_RELOC_KVX_S43_TLS_LD_EX6,
+  BFD_RELOC_KVX_64_TPOFF,
+  BFD_RELOC_KVX_S37_TLS_IE_LO10,
+  BFD_RELOC_KVX_S37_TLS_IE_UP27,
+  BFD_RELOC_KVX_S43_TLS_IE_LO10,
+  BFD_RELOC_KVX_S43_TLS_IE_UP27,
+  BFD_RELOC_KVX_S43_TLS_IE_EX6,
+  BFD_RELOC_KVX_S37_TLS_LE_LO10,
+  BFD_RELOC_KVX_S37_TLS_LE_UP27,
+  BFD_RELOC_KVX_S43_TLS_LE_LO10,
+  BFD_RELOC_KVX_S43_TLS_LE_UP27,
+  BFD_RELOC_KVX_S43_TLS_LE_EX6,
+  BFD_RELOC_KVX_8,
+
+  /* KVX pseudo relocation code to mark the end of the KVX relocation
+     enumerators that have direct mapping to ELF reloc codes.  There are
+     a few more enumerators after this one; those are mainly used by the
+     KVX assembler for the internal fixup or to select one of the above
+     enumerators.  */
+  BFD_RELOC_KVX_RELOC_END,
+
+  /* AArch64 pseudo relocation code to mark the start of the AArch64
+     relocation enumerators.  N.B. the order of the enumerators is
+     important as several tables in the AArch64 bfd backend are indexed
+     by these enumerators; make sure they are all synced.  */
   BFD_RELOC_AARCH64_RELOC_START,
 
-/* Deprecated AArch64 null relocation code.  */
+  /* Deprecated AArch64 null relocation code.  */
   BFD_RELOC_AARCH64_NULL,
 
-/* AArch64 null relocation code.  */
+  /* AArch64 null relocation code.  */
   BFD_RELOC_AARCH64_NONE,
 
-/* Basic absolute relocations of N bits.  These are equivalent to
-BFD_RELOC_N and they were added to assist the indexing of the howto
-table.  */
+  /* Basic absolute relocations of N bits.  These are equivalent to
+     BFD_RELOC_N and they were added to assist the indexing of the howto
+     table.  */
   BFD_RELOC_AARCH64_64,
   BFD_RELOC_AARCH64_32,
   BFD_RELOC_AARCH64_16,
 
-/* PC-relative relocations.  These are equivalent to BFD_RELOC_N_PCREL
-and they were added to assist the indexing of the howto table.  */
+  /* PC-relative relocations.  These are equivalent to BFD_RELOC_N_PCREL
+     and they were added to assist the indexing of the howto table.  */
   BFD_RELOC_AARCH64_64_PCREL,
   BFD_RELOC_AARCH64_32_PCREL,
   BFD_RELOC_AARCH64_16_PCREL,
 
-/* AArch64 MOV[NZK] instruction with most significant bits 0 to 15
-of an unsigned address/value.  */
+  /* AArch64 MOV[NZK] instruction with most significant bits 0 to 15 of
+     an unsigned address/value.  */
   BFD_RELOC_AARCH64_MOVW_G0,
 
-/* AArch64 MOV[NZK] instruction with less significant bits 0 to 15 of
-an address/value.  No overflow checking.  */
+  /* AArch64 MOV[NZK] instruction with less significant bits 0 to 15 of
+     an address/value.  No overflow checking.  */
   BFD_RELOC_AARCH64_MOVW_G0_NC,
 
-/* AArch64 MOV[NZK] instruction with most significant bits 16 to 31
-of an unsigned address/value.  */
+  /* AArch64 MOV[NZK] instruction with most significant bits 16 to 31 of
+     an unsigned address/value.  */
   BFD_RELOC_AARCH64_MOVW_G1,
 
-/* AArch64 MOV[NZK] instruction with less significant bits 16 to 31
-of an address/value.  No overflow checking.  */
+  /* AArch64 MOV[NZK] instruction with less significant bits 16 to 31 of
+     an address/value.  No overflow checking.  */
   BFD_RELOC_AARCH64_MOVW_G1_NC,
 
-/* AArch64 MOV[NZK] instruction with most significant bits 32 to 47
-of an unsigned address/value.  */
+  /* AArch64 MOV[NZK] instruction with most significant bits 32 to 47 of
+     an unsigned address/value.  */
   BFD_RELOC_AARCH64_MOVW_G2,
 
-/* AArch64 MOV[NZK] instruction with less significant bits 32 to 47
-of an address/value.  No overflow checking.  */
+  /* AArch64 MOV[NZK] instruction with less significant bits 32 to 47 of
+     an address/value.  No overflow checking.  */
   BFD_RELOC_AARCH64_MOVW_G2_NC,
 
-/* AArch64 MOV[NZK] instruction with most signficant bits 48 to 64
-of a signed or unsigned address/value.  */
+  /* AArch64 MOV[NZK] instruction with most signficant bits 48 to 64 of a
+     signed or unsigned address/value.  */
   BFD_RELOC_AARCH64_MOVW_G3,
 
-/* AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
-value's sign.  */
+  /* AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of a
+     signed value.  Changes instruction to MOVZ or MOVN depending on the
+     value's sign.  */
   BFD_RELOC_AARCH64_MOVW_G0_S,
 
-/* AArch64 MOV[NZ] instruction with most significant bits 16 to 31
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
-value's sign.  */
+  /* AArch64 MOV[NZ] instruction with most significant bits 16 to 31 of a
+     signed value.  Changes instruction to MOVZ or MOVN depending on the
+     value's sign.  */
   BFD_RELOC_AARCH64_MOVW_G1_S,
 
-/* AArch64 MOV[NZ] instruction with most significant bits 32 to 47
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
-value's sign.  */
+  /* AArch64 MOV[NZ] instruction with most significant bits 32 to 47 of a
+     signed value.  Changes instruction to MOVZ or MOVN depending on the
+     value's sign.  */
   BFD_RELOC_AARCH64_MOVW_G2_S,
 
-/* AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
-value's sign.  */
+  /* AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of a
+     signed value.  Changes instruction to MOVZ or MOVN depending on the
+     value's sign.  */
   BFD_RELOC_AARCH64_MOVW_PREL_G0,
 
-/* AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
-value's sign.  */
+  /* AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of a
+     signed value.  Changes instruction to MOVZ or MOVN depending on the
+     value's sign.  */
   BFD_RELOC_AARCH64_MOVW_PREL_G0_NC,
 
-/* AArch64 MOVK instruction with most significant bits 16 to 31
-of a signed value.  */
+  /* AArch64 MOVK instruction with most significant bits 16 to 31 of a
+     signed value.  */
   BFD_RELOC_AARCH64_MOVW_PREL_G1,
 
-/* AArch64 MOVK instruction with most significant bits 16 to 31
-of a signed value.  */
+  /* AArch64 MOVK instruction with most significant bits 16 to 31 of a
+     signed value.  */
   BFD_RELOC_AARCH64_MOVW_PREL_G1_NC,
 
-/* AArch64 MOVK instruction with most significant bits 32 to 47
-of a signed value.  */
+  /* AArch64 MOVK instruction with most significant bits 32 to 47 of a
+     signed value.  */
   BFD_RELOC_AARCH64_MOVW_PREL_G2,
 
-/* AArch64 MOVK instruction with most significant bits 32 to 47
-of a signed value.  */
+  /* AArch64 MOVK instruction with most significant bits 32 to 47 of a
+     signed value.  */
   BFD_RELOC_AARCH64_MOVW_PREL_G2_NC,
 
-/* AArch64 MOVK instruction with most significant bits 47 to 63
-of a signed value.  */
+  /* AArch64 MOVK instruction with most significant bits 47 to 63 of a
+     signed value.  */
   BFD_RELOC_AARCH64_MOVW_PREL_G3,
 
-/* AArch64 Load Literal instruction, holding a 19 bit pc-relative word
-offset.  The lowest two bits must be zero and are not stored in the
-instruction, giving a 21 bit signed byte offset.  */
+  /* AArch64 Load Literal instruction, holding a 19 bit pc-relative word
+     offset.  The lowest two bits must be zero and are not stored in the
+     instruction, giving a 21 bit signed byte offset.  */
   BFD_RELOC_AARCH64_LD_LO19_PCREL,
 
-/* AArch64 ADR instruction, holding a simple 21 bit pc-relative byte offset.  */
+  /* AArch64 ADR instruction, holding a simple 21 bit pc-relative byte
+     offset.  */
   BFD_RELOC_AARCH64_ADR_LO21_PCREL,
 
-/* AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
-offset, giving a 4KB aligned page base address.  */
+  /* AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
+     offset, giving a 4KB aligned page base address.  */
   BFD_RELOC_AARCH64_ADR_HI21_PCREL,
 
-/* AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
-offset, giving a 4KB aligned page base address, but with no overflow
-checking.  */
+  /* AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
+     offset, giving a 4KB aligned page base address, but with no overflow
+     checking.  */
   BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL,
 
-/* AArch64 ADD immediate instruction, holding bits 0 to 11 of the address.
-Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
+  /* AArch64 ADD immediate instruction, holding bits 0 to 11 of the
+     address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
   BFD_RELOC_AARCH64_ADD_LO12,
 
-/* AArch64 8-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
+  /* AArch64 8-bit load/store instruction, holding bits 0 to 11 of the
+     address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
   BFD_RELOC_AARCH64_LDST8_LO12,
 
-/* AArch64 14 bit pc-relative test bit and branch.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 16 bit signed byte offset.  */
+  /* AArch64 14 bit pc-relative test bit and branch.
+     The lowest two bits must be zero and are not stored in the
+     instruction, giving a 16 bit signed byte offset.  */
   BFD_RELOC_AARCH64_TSTBR14,
 
-/* AArch64 19 bit pc-relative conditional branch and compare & branch.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 21 bit signed byte offset.  */
+  /* AArch64 19 bit pc-relative conditional branch and compare & branch.
+     The lowest two bits must be zero and are not stored in the
+     instruction, giving a 21 bit signed byte offset.  */
   BFD_RELOC_AARCH64_BRANCH19,
 
-/* AArch64 26 bit pc-relative unconditional branch.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 28 bit signed byte offset.  */
+  /* AArch64 26 bit pc-relative unconditional branch.
+     The lowest two bits must be zero and are not stored in the
+     instruction, giving a 28 bit signed byte offset.  */
   BFD_RELOC_AARCH64_JUMP26,
 
-/* AArch64 26 bit pc-relative unconditional branch and link.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 28 bit signed byte offset.  */
+  /* AArch64 26 bit pc-relative unconditional branch and link.
+     The lowest two bits must be zero and are not stored in the
+     instruction, giving a 28 bit signed byte offset.  */
   BFD_RELOC_AARCH64_CALL26,
 
-/* AArch64 16-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
+  /* AArch64 16-bit load/store instruction, holding bits 0 to 11 of the
+     address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
   BFD_RELOC_AARCH64_LDST16_LO12,
 
-/* AArch64 32-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
+  /* AArch64 32-bit load/store instruction, holding bits 0 to 11 of the
+     address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
   BFD_RELOC_AARCH64_LDST32_LO12,
 
-/* AArch64 64-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
+  /* AArch64 64-bit load/store instruction, holding bits 0 to 11 of the
+     address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
   BFD_RELOC_AARCH64_LDST64_LO12,
 
-/* AArch64 128-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
+  /* AArch64 128-bit load/store instruction, holding bits 0 to 11 of the
+     address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
   BFD_RELOC_AARCH64_LDST128_LO12,
 
-/* AArch64 Load Literal instruction, holding a 19 bit PC relative word
-offset of the global offset table entry for a symbol.  The lowest two
-bits must be zero and are not stored in the instruction, giving a 21
-bit signed byte offset.  This relocation type requires signed overflow
-checking.  */
+  /* AArch64 Load Literal instruction, holding a 19 bit PC relative word
+     offset of the global offset table entry for a symbol.  The lowest
+     two bits must be zero and are not stored in the instruction, giving
+     a 21 bit signed byte offset.  This relocation type requires signed
+     overflow checking.  */
   BFD_RELOC_AARCH64_GOT_LD_PREL19,
 
-/* Get to the page base of the global offset table entry for a symbol as
-part of an ADRP instruction using a 21 bit PC relative value.Used in
-conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.  */
+  /* Get to the page base of the global offset table entry for a symbol
+     as part of an ADRP instruction using a 21 bit PC relative value.
+     Used in conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.  */
   BFD_RELOC_AARCH64_ADR_GOT_PAGE,
 
-/* Unsigned 12 bit byte offset for 64 bit load/store from the page of
-the GOT entry for this symbol.  Used in conjunction with
-BFD_RELOC_AARCH64_ADR_GOT_PAGE.  Valid in LP64 ABI only.  */
+  /* Unsigned 12 bit byte offset for 64 bit load/store from the page of
+     the GOT entry for this symbol.  Used in conjunction with
+     BFD_RELOC_AARCH64_ADR_GOT_PAGE.  Valid in LP64 ABI only.  */
   BFD_RELOC_AARCH64_LD64_GOT_LO12_NC,
 
-/* Unsigned 12 bit byte offset for 32 bit load/store from the page of
-the GOT entry for this symbol.  Used in conjunction with
-BFD_RELOC_AARCH64_ADR_GOT_PAGE.  Valid in ILP32 ABI only.  */
+  /* Unsigned 12 bit byte offset for 32 bit load/store from the page of
+     the GOT entry for this symbol.  Used in conjunction with
+     BFD_RELOC_AARCH64_ADR_GOT_PAGE.  Valid in ILP32 ABI only.  */
   BFD_RELOC_AARCH64_LD32_GOT_LO12_NC,
 
-/* Unsigned 16 bit byte offset for 64 bit load/store from the GOT entry
-for this symbol.  Valid in LP64 ABI only.  */
+  /* Unsigned 16 bit byte offset for 64 bit load/store from the GOT entry
+     for this symbol.  Valid in LP64 ABI only.  */
   BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC,
 
-/* Unsigned 16 bit byte higher offset for 64 bit load/store from the GOT entry
-for this symbol.  Valid in LP64 ABI only.  */
+  /* Unsigned 16 bit byte higher offset for 64 bit load/store from the
+     GOT entry for this symbol.  Valid in LP64 ABI only.  */
   BFD_RELOC_AARCH64_MOVW_GOTOFF_G1,
 
-/* Unsigned 15 bit byte offset for 64 bit load/store from the page of
-the GOT entry for this symbol.  Valid in LP64 ABI only.  */
+  /* Unsigned 15 bit byte offset for 64 bit load/store from the page of
+     the GOT entry for this symbol.  Valid in LP64 ABI only.  */
   BFD_RELOC_AARCH64_LD64_GOTOFF_LO15,
 
-/* Scaled 14 bit byte offset to the page base of the global offset table.  */
+  /* Scaled 14 bit byte offset to the page base of the global offset
+     table.  */
   BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14,
 
-/* Scaled 15 bit byte offset to the page base of the global offset table.  */
+  /* Scaled 15 bit byte offset to the page base of the global offset
+     table.  */
   BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15,
 
-/* Get to the page base of the global offset table entry for a symbols
-tls_index structure as part of an adrp instruction using a 21 bit PC
-relative value.  Used in conjunction with
-BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC.  */
+  /* Get to the page base of the global offset table entry for a symbols
+     tls_index structure as part of an adrp instruction using a 21 bit PC
+     relative value.  Used in conjunction with
+     BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC.  */
   BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21,
 
-/* AArch64 TLS General Dynamic  */
+  /* AArch64 TLS General Dynamic.  */
   BFD_RELOC_AARCH64_TLSGD_ADR_PREL21,
 
-/* Unsigned 12 bit byte offset to global offset table entry for a symbols
-tls_index structure.  Used in conjunction with
-BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21.  */
+  /* Unsigned 12 bit byte offset to global offset table entry for a
+     symbol's tls_index structure.  Used in conjunction with
+     BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21.  */
   BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC,
 
-/* AArch64 TLS General Dynamic relocation.  */
+  /* AArch64 TLS General Dynamic relocation.  */
   BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC,
 
-/* AArch64 TLS General Dynamic relocation.  */
+  /* AArch64 TLS General Dynamic relocation.  */
   BFD_RELOC_AARCH64_TLSGD_MOVW_G1,
 
-/* AArch64 TLS INITIAL EXEC relocation.  */
+  /* AArch64 TLS INITIAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21,
 
-/* AArch64 TLS INITIAL EXEC relocation.  */
+  /* AArch64 TLS INITIAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC,
 
-/* AArch64 TLS INITIAL EXEC relocation.  */
+  /* AArch64 TLS INITIAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC,
 
-/* AArch64 TLS INITIAL EXEC relocation.  */
+  /* AArch64 TLS INITIAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19,
 
-/* AArch64 TLS INITIAL EXEC relocation.  */
+  /* AArch64 TLS INITIAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC,
 
-/* AArch64 TLS INITIAL EXEC relocation.  */
+  /* AArch64 TLS INITIAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1,
 
-/* bit[23:12] of byte offset to module TLS base address.  */
+  /* bit[23:12] of byte offset to module TLS base address.  */
   BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12,
 
-/* Unsigned 12 bit byte offset to module TLS base address.  */
+  /* Unsigned 12 bit byte offset to module TLS base address.  */
   BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12,
 
-/* No overflow check version of BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12.  */
+  /* No overflow check version of
+     BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12.  */
   BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC,
 
-/* Unsigned 12 bit byte offset to global offset table entry for a symbols
-tls_index structure.  Used in conjunction with
-BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.  */
+  /* Unsigned 12 bit byte offset to global offset table entry for a
+     symbol's tls_index structure.  Used in conjunction with
+     BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.  */
   BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC,
 
-/* GOT entry page address for AArch64 TLS Local Dynamic, used with ADRP
-instruction.  */
+  /* GOT entry page address for AArch64 TLS Local Dynamic, used with ADRP
+     instruction.  */
   BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21,
 
-/* GOT entry address for AArch64 TLS Local Dynamic, used with ADR instruction.  */
+  /* GOT entry address for AArch64 TLS Local Dynamic, used with ADR
+     instruction.  */
   BFD_RELOC_AARCH64_TLSLD_ADR_PREL21,
 
-/* bit[11:1] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
+  /* bit[11:1] of byte offset to module TLS base address, encoded in ldst
+     instructions.  */
   BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no
+     overflow check.  */
   BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC,
 
-/* bit[11:2] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
+  /* bit[11:2] of byte offset to module TLS base address, encoded in ldst
+     instructions.  */
   BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no
+     overflow check.  */
   BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC,
 
-/* bit[11:3] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
+  /* bit[11:3] of byte offset to module TLS base address, encoded in ldst
+     instructions.  */
   BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no
+     overflow check.  */
   BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC,
 
-/* bit[11:0] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
+  /* bit[11:0] of byte offset to module TLS base address, encoded in ldst
+     instructions.  */
   BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no
+     overflow check.  */
   BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC,
 
-/* bit[15:0] of byte offset to module TLS base address.  */
+  /* bit[15:0] of byte offset to module TLS base address.  */
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0,
 
-/* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0  */
+  /* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0.  */
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC,
 
-/* bit[31:16] of byte offset to module TLS base address.  */
+  /* bit[31:16] of byte offset to module TLS base address.  */
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1,
 
-/* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1  */
+  /* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1.  */
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC,
 
-/* bit[47:32] of byte offset to module TLS base address.  */
+  /* bit[47:32] of byte offset to module TLS base address.  */
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2,
 
-/* AArch64 TLS LOCAL EXEC relocation.  */
+  /* AArch64 TLS LOCAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2,
 
-/* AArch64 TLS LOCAL EXEC relocation.  */
+  /* AArch64 TLS LOCAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1,
 
-/* AArch64 TLS LOCAL EXEC relocation.  */
+  /* AArch64 TLS LOCAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC,
 
-/* AArch64 TLS LOCAL EXEC relocation.  */
+  /* AArch64 TLS LOCAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0,
 
-/* AArch64 TLS LOCAL EXEC relocation.  */
+  /* AArch64 TLS LOCAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC,
 
-/* AArch64 TLS LOCAL EXEC relocation.  */
+  /* AArch64 TLS LOCAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12,
 
-/* AArch64 TLS LOCAL EXEC relocation.  */
+  /* AArch64 TLS LOCAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12,
 
-/* AArch64 TLS LOCAL EXEC relocation.  */
+  /* AArch64 TLS LOCAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC,
 
-/* bit[11:1] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
+  /* bit[11:1] of byte offset to module TLS base address, encoded in ldst
+     instructions.  */
   BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no
+     overflow check.  */
   BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC,
 
-/* bit[11:2] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
+  /* bit[11:2] of byte offset to module TLS base address, encoded in ldst
+     instructions.  */
   BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no
+     overflow check.  */
   BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC,
 
-/* bit[11:3] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
+  /* bit[11:3] of byte offset to module TLS base address, encoded in ldst
+     instructions.  */
   BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no
+     overflow check.  */
   BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC,
 
-/* bit[11:0] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
+  /* bit[11:0] of byte offset to module TLS base address, encoded in ldst
+     instructions.  */
   BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no overflow
+     check.  */
   BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12_NC,
 
-/* AArch64 TLS DESC relocation.  */
+  /* AArch64 TLS DESC relocations.  */
   BFD_RELOC_AARCH64_TLSDESC_LD_PREL19,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_LD64_LO12,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_ADD_LO12,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_OFF_G1,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_LDR,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_ADD,
-
-/* AArch64 TLS DESC relocation.  */
   BFD_RELOC_AARCH64_TLSDESC_CALL,
 
-/* AArch64 TLS relocation.  */
+  /* AArch64 DSO relocations.  */
   BFD_RELOC_AARCH64_COPY,
-
-/* AArch64 TLS relocation.  */
   BFD_RELOC_AARCH64_GLOB_DAT,
-
-/* AArch64 TLS relocation.  */
   BFD_RELOC_AARCH64_JUMP_SLOT,
-
-/* AArch64 TLS relocation.  */
   BFD_RELOC_AARCH64_RELATIVE,
 
-/* AArch64 TLS relocation.  */
+  /* AArch64 TLS relocations.  */
   BFD_RELOC_AARCH64_TLS_DTPMOD,
-
-/* AArch64 TLS relocation.  */
   BFD_RELOC_AARCH64_TLS_DTPREL,
-
-/* AArch64 TLS relocation.  */
   BFD_RELOC_AARCH64_TLS_TPREL,
-
-/* AArch64 TLS relocation.  */
   BFD_RELOC_AARCH64_TLSDESC,
 
-/* AArch64 support for STT_GNU_IFUNC.  */
+  /* AArch64 support for STT_GNU_IFUNC.  */
   BFD_RELOC_AARCH64_IRELATIVE,
 
-/* AArch64 pseudo relocation code to mark the end of the AArch64
-relocation enumerators that have direct mapping to ELF reloc codes.
-There are a few more enumerators after this one; those are mainly
-used by the AArch64 assembler for the internal fixup or to select
-one of the above enumerators.  */
+  /* AArch64 pseudo relocation code to mark the end of the AArch64
+     relocation enumerators that have direct mapping to ELF reloc codes.
+     There are a few more enumerators after this one; those are mainly
+     used by the AArch64 assembler for the internal fixup or to select
+     one of the above enumerators.  */
   BFD_RELOC_AARCH64_RELOC_END,
 
-/* AArch64 pseudo relocation code to be used internally by the AArch64
-assembler and not (currently) written to any object files.  */
+  /* AArch64 pseudo relocation code to be used internally by the AArch64
+     assembler and not (currently) written to any object files.  */
   BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP,
 
-/* AArch64 unspecified load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
+  /* AArch64 unspecified load/store instruction, holding bits 0 to 11 of the
+     address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
   BFD_RELOC_AARCH64_LDST_LO12,
 
-/* AArch64 pseudo relocation code for TLS local dynamic mode.  It's to be
-used internally by the AArch64 assembler and not (currently) written to
-any object files.  */
+  /* AArch64 pseudo relocation code for TLS local dynamic mode.  It's to
+     be used internally by the AArch64 assembler and not (currently)
+     written to any object files.  */
   BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no overflow
+     check.  */
   BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12_NC,
 
-/* AArch64 pseudo relocation code for TLS local exec mode.  It's to be
-used internally by the AArch64 assembler and not (currently) written to
-any object files.  */
+  /* AArch64 pseudo relocation code for TLS local exec mode.  It's to be
+     used internally by the AArch64 assembler and not (currently) written
+     to any object files.  */
   BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12,
 
-/* Similar as BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12, but no overflow check.  */
+  /* Similar to BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12, but no overflow
+     check.  */
   BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC,
 
-/* AArch64 pseudo relocation code to be used internally by the AArch64
-assembler and not (currently) written to any object files.  */
+  /* AArch64 pseudo relocation code to be used internally by the AArch64
+     assembler and not (currently) written to any object files.  */
   BFD_RELOC_AARCH64_LD_GOT_LO12_NC,
 
-/* AArch64 pseudo relocation code to be used internally by the AArch64
-assembler and not (currently) written to any object files.  */
+  /* AArch64 pseudo relocation code to be used internally by the AArch64
+     assembler and not (currently) written to any object files.  */
   BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC,
 
-/* AArch64 pseudo relocation code to be used internally by the AArch64
-assembler and not (currently) written to any object files.  */
+  /* AArch64 pseudo relocation code to be used internally by the AArch64
+     assembler and not (currently) written to any object files.  */
   BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC,
 
-/* Tilera TILEPro Relocations.  */
+  /* Tilera TILEPro Relocations.  */
   BFD_RELOC_TILEPRO_COPY,
   BFD_RELOC_TILEPRO_GLOB_DAT,
   BFD_RELOC_TILEPRO_JMP_SLOT,
@@ -5974,7 +7143,7 @@ assembler and not (currently) written to
   BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
   BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
 
-/* Tilera TILE-Gx Relocations.  */
+  /* Tilera TILE-Gx Relocations.  */
   BFD_RELOC_TILEGX_HW0,
   BFD_RELOC_TILEGX_HW1,
   BFD_RELOC_TILEGX_HW2,
@@ -6085,35 +7254,35 @@ assembler and not (currently) written to
   BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD,
   BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD,
 
-/* Linux eBPF relocations.  */
+  /* Linux eBPF relocations.  */
   BFD_RELOC_BPF_64,
-  BFD_RELOC_BPF_32,
-  BFD_RELOC_BPF_16,
-  BFD_RELOC_BPF_DISP16,
   BFD_RELOC_BPF_DISP32,
+  BFD_RELOC_BPF_DISPCALL32,
+  BFD_RELOC_BPF_DISP16,
 
-/* Adapteva EPIPHANY - 8 bit signed pc-relative displacement  */
+  /* Adapteva EPIPHANY - 8 bit signed pc-relative displacement.  */
   BFD_RELOC_EPIPHANY_SIMM8,
 
-/* Adapteva EPIPHANY - 24 bit signed pc-relative displacement  */
+  /* Adapteva EPIPHANY - 24 bit signed pc-relative displacement.  */
   BFD_RELOC_EPIPHANY_SIMM24,
 
-/* Adapteva EPIPHANY - 16 most-significant bits of absolute address  */
+  /* Adapteva EPIPHANY - 16 most-significant bits of absolute address.  */
   BFD_RELOC_EPIPHANY_HIGH,
 
-/* Adapteva EPIPHANY - 16 least-significant bits of absolute address  */
+  /* Adapteva EPIPHANY - 16 least-significant bits of absolute address.  */
   BFD_RELOC_EPIPHANY_LOW,
 
-/* Adapteva EPIPHANY - 11 bit signed number - add/sub immediate  */
+  /* Adapteva EPIPHANY - 11 bit signed number - add/sub immediate.  */
   BFD_RELOC_EPIPHANY_SIMM11,
 
-/* Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st displacement)  */
+  /* Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st
+     displacement).  */
   BFD_RELOC_EPIPHANY_IMM11,
 
-/* Adapteva EPIPHANY - 8 bit immediate for 16 bit mov instruction.  */
+  /* Adapteva EPIPHANY - 8 bit immediate for 16 bit mov instruction.  */
   BFD_RELOC_EPIPHANY_IMM8,
 
-/* Visium Relocations.  */
+  /* Visium Relocations.  */
   BFD_RELOC_VISIUM_HI16,
   BFD_RELOC_VISIUM_LO16,
   BFD_RELOC_VISIUM_IM16,
@@ -6122,7 +7291,7 @@ assembler and not (currently) written to
   BFD_RELOC_VISIUM_LO16_PCREL,
   BFD_RELOC_VISIUM_IM16_PCREL,
 
-/* WebAssembly relocations.  */
+  /* WebAssembly relocations.  */
   BFD_RELOC_WASM32_LEB128,
   BFD_RELOC_WASM32_LEB128_GOT,
   BFD_RELOC_WASM32_LEB128_GOT_CODE,
@@ -6134,7 +7303,7 @@ assembler and not (currently) written to
   BFD_RELOC_WASM32_INDEX,
   BFD_RELOC_WASM32_PLT_SIG,
 
-/* C-SKY relocations.  */
+  /* C-SKY relocations.  */
   BFD_RELOC_CKCORE_NONE,
   BFD_RELOC_CKCORE_ADDR32,
   BFD_RELOC_CKCORE_PCREL_IMM8BY4,
@@ -6201,11 +7370,122 @@ assembler and not (currently) written to
   BFD_RELOC_CKCORE_PCREL_BLOOP_IMM4BY4,
   BFD_RELOC_CKCORE_PCREL_BLOOP_IMM12BY4,
 
-/* S12Z relocations.  */
+  /* S12Z relocations.  */
   BFD_RELOC_S12Z_OPR,
-  BFD_RELOC_UNUSED };
 
+  /* LARCH relocations.  */
+  BFD_RELOC_LARCH_TLS_DTPMOD32,
+  BFD_RELOC_LARCH_TLS_DTPREL32,
+  BFD_RELOC_LARCH_TLS_DTPMOD64,
+  BFD_RELOC_LARCH_TLS_DTPREL64,
+  BFD_RELOC_LARCH_TLS_TPREL32,
+  BFD_RELOC_LARCH_TLS_TPREL64,
+  BFD_RELOC_LARCH_TLS_DESC32,
+  BFD_RELOC_LARCH_TLS_DESC64,
+  BFD_RELOC_LARCH_MARK_LA,
+  BFD_RELOC_LARCH_MARK_PCREL,
+  BFD_RELOC_LARCH_SOP_PUSH_PCREL,
+  BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE,
+  BFD_RELOC_LARCH_SOP_PUSH_DUP,
+  BFD_RELOC_LARCH_SOP_PUSH_GPREL,
+  BFD_RELOC_LARCH_SOP_PUSH_TLS_TPREL,
+  BFD_RELOC_LARCH_SOP_PUSH_TLS_GOT,
+  BFD_RELOC_LARCH_SOP_PUSH_TLS_GD,
+  BFD_RELOC_LARCH_SOP_PUSH_PLT_PCREL,
+  BFD_RELOC_LARCH_SOP_ASSERT,
+  BFD_RELOC_LARCH_SOP_NOT,
+  BFD_RELOC_LARCH_SOP_SUB,
+  BFD_RELOC_LARCH_SOP_SL,
+  BFD_RELOC_LARCH_SOP_SR,
+  BFD_RELOC_LARCH_SOP_ADD,
+  BFD_RELOC_LARCH_SOP_AND,
+  BFD_RELOC_LARCH_SOP_IF_ELSE,
+  BFD_RELOC_LARCH_SOP_POP_32_S_10_5,
+  BFD_RELOC_LARCH_SOP_POP_32_U_10_12,
+  BFD_RELOC_LARCH_SOP_POP_32_S_10_12,
+  BFD_RELOC_LARCH_SOP_POP_32_S_10_16,
+  BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2,
+  BFD_RELOC_LARCH_SOP_POP_32_S_5_20,
+  BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2,
+  BFD_RELOC_LARCH_SOP_POP_32_S_0_10_10_16_S2,
+  BFD_RELOC_LARCH_SOP_POP_32_U,
+  BFD_RELOC_LARCH_ADD8,
+  BFD_RELOC_LARCH_ADD16,
+  BFD_RELOC_LARCH_ADD24,
+  BFD_RELOC_LARCH_ADD32,
+  BFD_RELOC_LARCH_ADD64,
+  BFD_RELOC_LARCH_SUB8,
+  BFD_RELOC_LARCH_SUB16,
+  BFD_RELOC_LARCH_SUB24,
+  BFD_RELOC_LARCH_SUB32,
+  BFD_RELOC_LARCH_SUB64,
+  BFD_RELOC_LARCH_B16,
+  BFD_RELOC_LARCH_B21,
+  BFD_RELOC_LARCH_B26,
+  BFD_RELOC_LARCH_ABS_HI20,
+  BFD_RELOC_LARCH_ABS_LO12,
+  BFD_RELOC_LARCH_ABS64_LO20,
+  BFD_RELOC_LARCH_ABS64_HI12,
+  BFD_RELOC_LARCH_PCALA_HI20,
+  BFD_RELOC_LARCH_PCALA_LO12,
+  BFD_RELOC_LARCH_PCALA64_LO20,
+  BFD_RELOC_LARCH_PCALA64_HI12,
+  BFD_RELOC_LARCH_GOT_PC_HI20,
+  BFD_RELOC_LARCH_GOT_PC_LO12,
+  BFD_RELOC_LARCH_GOT64_PC_LO20,
+  BFD_RELOC_LARCH_GOT64_PC_HI12,
+  BFD_RELOC_LARCH_GOT_HI20,
+  BFD_RELOC_LARCH_GOT_LO12,
+  BFD_RELOC_LARCH_GOT64_LO20,
+  BFD_RELOC_LARCH_GOT64_HI12,
+  BFD_RELOC_LARCH_TLS_LE_HI20,
+  BFD_RELOC_LARCH_TLS_LE_LO12,
+  BFD_RELOC_LARCH_TLS_LE64_LO20,
+  BFD_RELOC_LARCH_TLS_LE64_HI12,
+  BFD_RELOC_LARCH_TLS_IE_PC_HI20,
+  BFD_RELOC_LARCH_TLS_IE_PC_LO12,
+  BFD_RELOC_LARCH_TLS_IE64_PC_LO20,
+  BFD_RELOC_LARCH_TLS_IE64_PC_HI12,
+  BFD_RELOC_LARCH_TLS_IE_HI20,
+  BFD_RELOC_LARCH_TLS_IE_LO12,
+  BFD_RELOC_LARCH_TLS_IE64_LO20,
+  BFD_RELOC_LARCH_TLS_IE64_HI12,
+  BFD_RELOC_LARCH_TLS_LD_PC_HI20,
+  BFD_RELOC_LARCH_TLS_LD_HI20,
+  BFD_RELOC_LARCH_TLS_GD_PC_HI20,
+  BFD_RELOC_LARCH_TLS_GD_HI20,
+  BFD_RELOC_LARCH_32_PCREL,
+  BFD_RELOC_LARCH_RELAX,
+  BFD_RELOC_LARCH_DELETE,
+  BFD_RELOC_LARCH_ALIGN,
+  BFD_RELOC_LARCH_PCREL20_S2,
+  BFD_RELOC_LARCH_CFA,
+  BFD_RELOC_LARCH_ADD6,
+  BFD_RELOC_LARCH_SUB6,
+  BFD_RELOC_LARCH_ADD_ULEB128,
+  BFD_RELOC_LARCH_SUB_ULEB128,
+  BFD_RELOC_LARCH_64_PCREL,
+  BFD_RELOC_LARCH_CALL36,
+  BFD_RELOC_LARCH_TLS_DESC_PC_HI20,
+  BFD_RELOC_LARCH_TLS_DESC_PC_LO12,
+  BFD_RELOC_LARCH_TLS_DESC64_PC_LO20,
+  BFD_RELOC_LARCH_TLS_DESC64_PC_HI12,
+  BFD_RELOC_LARCH_TLS_DESC_HI20,
+  BFD_RELOC_LARCH_TLS_DESC_LO12,
+  BFD_RELOC_LARCH_TLS_DESC64_LO20,
+  BFD_RELOC_LARCH_TLS_DESC64_HI12,
+  BFD_RELOC_LARCH_TLS_DESC_LD,
+  BFD_RELOC_LARCH_TLS_DESC_CALL,
+  BFD_RELOC_LARCH_TLS_LE_HI20_R,
+  BFD_RELOC_LARCH_TLS_LE_ADD_R,
+  BFD_RELOC_LARCH_TLS_LE_LO12_R,
+  BFD_RELOC_LARCH_TLS_LD_PCREL20_S2,
+  BFD_RELOC_LARCH_TLS_GD_PCREL20_S2,
+  BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2,
+  BFD_RELOC_UNUSED
+};
 typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
+
 reloc_howto_type *bfd_reloc_type_lookup
    (bfd *abfd, bfd_reloc_code_real_type code);
 reloc_howto_type *bfd_reloc_name_lookup
@@ -6213,982 +7493,27 @@ reloc_howto_type *bfd_reloc_name_lookup
 
 const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
 
-/* Extracted from syms.c.  */
-
-typedef struct bfd_symbol
-{
-  /* A pointer to the BFD which owns the symbol. This information
-     is necessary so that a back end can work out what additional
-     information (invisible to the application writer) is carried
-     with the symbol.
-
-     This field is *almost* redundant, since you can use section->owner
-     instead, except that some symbols point to the global sections
-     bfd_{abs,com,und}_section.  This could be fixed by making
-     these globals be per-bfd (or per-target-flavor).  FIXME.  */
-  struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field.  */
-
-  /* The text of the symbol. The name is left alone, and not copied; the
-     application may not alter it.  */
-  const char *name;
-
-  /* The value of the symbol.  This really should be a union of a
-     numeric value with a pointer, since some flags indicate that
-     a pointer to another symbol is stored here.  */
-  symvalue value;
-
-  /* Attributes of a symbol.  */
-#define BSF_NO_FLAGS            0
-
-  /* The symbol has local scope; <<static>> in <<C>>. The value
-     is the offset into the section of the data.  */
-#define BSF_LOCAL               (1 << 0)
-
-  /* The symbol has global scope; initialized data in <<C>>. The
-     value is the offset into the section of the data.  */
-#define BSF_GLOBAL              (1 << 1)
-
-  /* The symbol has global scope and is exported. The value is
-     the offset into the section of the data.  */
-#define BSF_EXPORT              BSF_GLOBAL /* No real difference.  */
-
-  /* A normal C symbol would be one of:
-     <<BSF_LOCAL>>, <<BSF_UNDEFINED>> or <<BSF_GLOBAL>>.  */
-
-  /* The symbol is a debugging record. The value has an arbitrary
-     meaning, unless BSF_DEBUGGING_RELOC is also set.  */
-#define BSF_DEBUGGING           (1 << 2)
-
-  /* The symbol denotes a function entry point.  Used in ELF,
-     perhaps others someday.  */
-#define BSF_FUNCTION            (1 << 3)
-
-  /* Used by the linker.  */
-#define BSF_KEEP                (1 << 5)
-
-  /* An ELF common symbol.  */
-#define BSF_ELF_COMMON          (1 << 6)
-
-  /* A weak global symbol, overridable without warnings by
-     a regular global symbol of the same name.  */
-#define BSF_WEAK                (1 << 7)
-
-  /* This symbol was created to point to a section, e.g. ELF's
-     STT_SECTION symbols.  */
-#define BSF_SECTION_SYM         (1 << 8)
-
-  /* The symbol used to be a common symbol, but now it is
-     allocated.  */
-#define BSF_OLD_COMMON          (1 << 9)
-
-  /* In some files the type of a symbol sometimes alters its
-     location in an output file - ie in coff a <<ISFCN>> symbol
-     which is also <<C_EXT>> symbol appears where it was
-     declared and not at the end of a section.  This bit is set
-     by the target BFD part to convey this information.  */
-#define BSF_NOT_AT_END          (1 << 10)
-
-  /* Signal that the symbol is the label of constructor section.  */
-#define BSF_CONSTRUCTOR         (1 << 11)
-
-  /* Signal that the symbol is a warning symbol.  The name is a
-     warning.  The name of the next symbol is the one to warn about;
-     if a reference is made to a symbol with the same name as the next
-     symbol, a warning is issued by the linker.  */
-#define BSF_WARNING             (1 << 12)
-
-  /* Signal that the symbol is indirect.  This symbol is an indirect
-     pointer to the symbol with the same name as the next symbol.  */
-#define BSF_INDIRECT            (1 << 13)
-
-  /* BSF_FILE marks symbols that contain a file name.  This is used
-     for ELF STT_FILE symbols.  */
-#define BSF_FILE                (1 << 14)
-
-  /* Symbol is from dynamic linking information.  */
-#define BSF_DYNAMIC             (1 << 15)
-
-  /* The symbol denotes a data object.  Used in ELF, and perhaps
-     others someday.  */
-#define BSF_OBJECT              (1 << 16)
-
-  /* This symbol is a debugging symbol.  The value is the offset
-     into the section of the data.  BSF_DEBUGGING should be set
-     as well.  */
-#define BSF_DEBUGGING_RELOC     (1 << 17)
-
-  /* This symbol is thread local.  Used in ELF.  */
-#define BSF_THREAD_LOCAL        (1 << 18)
-
-  /* This symbol represents a complex relocation expression,
-     with the expression tree serialized in the symbol name.  */
-#define BSF_RELC                (1 << 19)
-
-  /* This symbol represents a signed complex relocation expression,
-     with the expression tree serialized in the symbol name.  */
-#define BSF_SRELC               (1 << 20)
-
-  /* This symbol was created by bfd_get_synthetic_symtab.  */
-#define BSF_SYNTHETIC           (1 << 21)
-
-  /* This symbol is an indirect code object.  Unrelated to BSF_INDIRECT.
-     The dynamic linker will compute the value of this symbol by
-     calling the function that it points to.  BSF_FUNCTION must
-     also be also set.  */
-#define BSF_GNU_INDIRECT_FUNCTION (1 << 22)
-  /* This symbol is a globally unique data object.  The dynamic linker
-     will make sure that in the entire process there is just one symbol
-     with this name and type in use.  BSF_OBJECT must also be set.  */
-#define BSF_GNU_UNIQUE          (1 << 23)
-
-  flagword flags;
-
-  /* A pointer to the section to which this symbol is
-     relative.  This will always be non NULL, there are special
-     sections for undefined and absolute symbols.  */
-  struct bfd_section *section;
-
-  /* Back end special data.  */
-  union
-    {
-      void *p;
-      bfd_vma i;
-    }
-  udata;
-}
-asymbol;
-
-#define bfd_get_symtab_upper_bound(abfd) \
-       BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
-
-bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
-
-bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
-
-#define bfd_is_local_label_name(abfd, name) \
-       BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
-
-bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
-
-#define bfd_is_target_special_symbol(abfd, sym) \
-       BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
-
-#define bfd_canonicalize_symtab(abfd, location) \
-       BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
-
-bfd_boolean bfd_set_symtab
-   (bfd *abfd, asymbol **location, unsigned int count);
-
-void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
-
-#define bfd_make_empty_symbol(abfd) \
-       BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
-
-asymbol *_bfd_generic_make_empty_symbol (bfd *);
-
-#define bfd_make_debug_symbol(abfd,ptr,size) \
-       BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
-
-int bfd_decode_symclass (asymbol *symbol);
-
-bfd_boolean bfd_is_undefined_symclass (int symclass);
-
-void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
-
-bfd_boolean bfd_copy_private_symbol_data
-   (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
-
-#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
-       BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
-                 (ibfd, isymbol, obfd, osymbol))
-
-/* Extracted from bfd.c.  */
-
-enum bfd_direction
-  {
-    no_direction = 0,
-    read_direction = 1,
-    write_direction = 2,
-    both_direction = 3
-  };
+/* Extracted from simple.c.  */
+bfd_byte *bfd_simple_get_relocated_section_contents
+   (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table);
 
-enum bfd_plugin_format
-  {
-    bfd_plugin_unknown = 0,
-    bfd_plugin_yes = 1,
-    bfd_plugin_no = 2
-  };
+/* Extracted from stab-syms.c.  */
+const char *bfd_get_stab_name (int);
 
-struct bfd_build_id
-  {
-    bfd_size_type size;
-    bfd_byte data[1];
-  };
+/* Extracted from stabs.c.  */
+/* This structure is used to keep track of stabs in sections
+   information while linking.  */
 
-struct bfd
+struct stab_info
 {
-  /* The filename the application opened the BFD with.  */
-  const char *filename;
-
-  /* A pointer to the target jump table.  */
-  const struct bfd_target *xvec;
-
-  /* The IOSTREAM, and corresponding IO vector that provide access
-     to the file backing the BFD.  */
-  void *iostream;
-  const struct bfd_iovec *iovec;
-
-  /* The caching routines use these to maintain a
-     least-recently-used list of BFDs.  */
-  struct bfd *lru_prev, *lru_next;
-
-  /* Track current file position (or current buffer offset for
-     in-memory BFDs).  When a file is closed by the caching routines,
-     BFD retains state information on the file here.  */
-  ufile_ptr where;
-
-  /* File modified time, if mtime_set is TRUE.  */
-  long mtime;
-
-  /* A unique identifier of the BFD  */
-  unsigned int id;
-
-  /* The format which belongs to the BFD. (object, core, etc.)  */
-  ENUM_BITFIELD (bfd_format) format : 3;
-
-  /* The direction with which the BFD was opened.  */
-  ENUM_BITFIELD (bfd_direction) direction : 2;
-
-  /* Format_specific flags.  */
-  flagword flags;
-
-  /* Values that may appear in the flags field of a BFD.  These also
-     appear in the object_flags field of the bfd_target structure, where
-     they indicate the set of flags used by that backend (not all flags
-     are meaningful for all object file formats) (FIXME: at the moment,
-     the object_flags values have mostly just been copied from backend
-     to another, and are not necessarily correct).  */
-
-#define BFD_NO_FLAGS                0x0
-
-  /* BFD contains relocation entries.  */
-#define HAS_RELOC                   0x1
-
-  /* BFD is directly executable.  */
-#define EXEC_P                      0x2
-
-  /* BFD has line number information (basically used for F_LNNO in a
-     COFF header).  */
-#define HAS_LINENO                  0x4
-
-  /* BFD has debugging information.  */
-#define HAS_DEBUG                  0x08
-
-  /* BFD has symbols.  */
-#define HAS_SYMS                   0x10
-
-  /* BFD has local symbols (basically used for F_LSYMS in a COFF
-     header).  */
-#define HAS_LOCALS                 0x20
-
-  /* BFD is a dynamic object.  */
-#define DYNAMIC                    0x40
-
-  /* Text section is write protected (if D_PAGED is not set, this is
-     like an a.out NMAGIC file) (the linker sets this by default, but
-     clears it for -r or -N).  */
-#define WP_TEXT                    0x80
-
-  /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
-     linker sets this by default, but clears it for -r or -n or -N).  */
-#define D_PAGED                   0x100
-
-  /* BFD is relaxable (this means that bfd_relax_section may be able to
-     do something) (sometimes bfd_relax_section can do something even if
-     this is not set).  */
-#define BFD_IS_RELAXABLE          0x200
-
-  /* This may be set before writing out a BFD to request using a
-     traditional format.  For example, this is used to request that when
-     writing out an a.out object the symbols not be hashed to eliminate
-     duplicates.  */
-#define BFD_TRADITIONAL_FORMAT    0x400
-
-  /* This flag indicates that the BFD contents are actually cached
-     in memory.  If this is set, iostream points to a bfd_in_memory
-     struct.  */
-#define BFD_IN_MEMORY             0x800
-
-  /* This BFD has been created by the linker and doesn't correspond
-     to any input file.  */
-#define BFD_LINKER_CREATED       0x1000
-
-  /* This may be set before writing out a BFD to request that it
-     be written using values for UIDs, GIDs, timestamps, etc. that
-     will be consistent from run to run.  */
-#define BFD_DETERMINISTIC_OUTPUT 0x2000
-
-  /* Compress sections in this BFD.  */
-#define BFD_COMPRESS             0x4000
-
-  /* Decompress sections in this BFD.  */
-#define BFD_DECOMPRESS           0x8000
-
-  /* BFD is a dummy, for plugins.  */
-#define BFD_PLUGIN              0x10000
-
-  /* Compress sections in this BFD with SHF_COMPRESSED from gABI.  */
-#define BFD_COMPRESS_GABI       0x20000
-
-  /* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this
-     BFD.  */
-#define BFD_CONVERT_ELF_COMMON  0x40000
-
-  /* Use the ELF STT_COMMON type in this BFD.  */
-#define BFD_USE_ELF_STT_COMMON  0x80000
-
-  /* Put pathnames into archives (non-POSIX).  */
-#define BFD_ARCHIVE_FULL_PATH  0x100000
-
-  /* Flags bits to be saved in bfd_preserve_save.  */
-#define BFD_FLAGS_SAVED \
-  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
-   | BFD_PLUGIN | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON \
-   | BFD_USE_ELF_STT_COMMON)
-
-  /* Flags bits which are for BFD use only.  */
-#define BFD_FLAGS_FOR_BFD_USE_MASK \
-  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
-   | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
-   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
-
-  /* Is the file descriptor being cached?  That is, can it be closed as
-     needed, and re-opened when accessed later?  */
-  unsigned int cacheable : 1;
-
-  /* Marks whether there was a default target specified when the
-     BFD was opened. This is used to select which matching algorithm
-     to use to choose the back end.  */
-  unsigned int target_defaulted : 1;
-
-  /* ... and here: (``once'' means at least once).  */
-  unsigned int opened_once : 1;
-
-  /* Set if we have a locally maintained mtime value, rather than
-     getting it from the file each time.  */
-  unsigned int mtime_set : 1;
-
-  /* Flag set if symbols from this BFD should not be exported.  */
-  unsigned int no_export : 1;
-
-  /* Remember when output has begun, to stop strange things
-     from happening.  */
-  unsigned int output_has_begun : 1;
-
-  /* Have archive map.  */
-  unsigned int has_armap : 1;
-
-  /* Set if this is a thin archive.  */
-  unsigned int is_thin_archive : 1;
-
-  /* Set if this archive should not cache element positions.  */
-  unsigned int no_element_cache : 1;
-
-  /* Set if only required symbols should be added in the link hash table for
-     this object.  Used by VMS linkers.  */
-  unsigned int selective_search : 1;
-
-  /* Set if this is the linker output BFD.  */
-  unsigned int is_linker_output : 1;
-
-  /* Set if this is the linker input BFD.  */
-  unsigned int is_linker_input : 1;
-
-  /* If this is an input for a compiler plug-in library.  */
-  ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
-
-  /* Set if this is a plugin output file.  */
-  unsigned int lto_output : 1;
-
-  /* Set if this is a slim LTO object not loaded with a compiler plugin.  */
-  unsigned int lto_slim_object : 1;
-
-  /* Set to dummy BFD created when claimed by a compiler plug-in
-     library.  */
-  bfd *plugin_dummy_bfd;
-
-  /* Currently my_archive is tested before adding origin to
-     anything. I believe that this can become always an add of
-     origin, with origin set to 0 for non archive files.  */
-  ufile_ptr origin;
-
-  /* The origin in the archive of the proxy entry.  This will
-     normally be the same as origin, except for thin archives,
-     when it will contain the current offset of the proxy in the
-     thin archive rather than the offset of the bfd in its actual
-     container.  */
-  ufile_ptr proxy_origin;
-
-  /* A hash table for section names.  */
-  struct bfd_hash_table section_htab;
-
-  /* Pointer to linked list of sections.  */
-  struct bfd_section *sections;
-
-  /* The last section on the section list.  */
-  struct bfd_section *section_last;
-
-  /* The number of sections.  */
-  unsigned int section_count;
-
-  /* A field used by _bfd_generic_link_add_archive_symbols.  This will
-     be used only for archive elements.  */
-  int archive_pass;
-
-  /* Stuff only useful for object files:
-     The start address.  */
-  bfd_vma start_address;
-
-  /* Symbol table for output BFD (with symcount entries).
-     Also used by the linker to cache input BFD symbols.  */
-  struct bfd_symbol  **outsymbols;
-
-  /* Used for input and output.  */
-  unsigned int symcount;
-
-  /* Used for slurped dynamic symbol tables.  */
-  unsigned int dynsymcount;
-
-  /* Pointer to structure which contains architecture information.  */
-  const struct bfd_arch_info *arch_info;
-
-  /* Stuff only useful for archives.  */
-  void *arelt_data;
-  struct bfd *my_archive;      /* The containing archive BFD.  */
-  struct bfd *archive_next;    /* The next BFD in the archive.  */
-  struct bfd *archive_head;    /* The first BFD in the archive.  */
-  struct bfd *nested_archives; /* List of nested archive in a flattened
-                                  thin archive.  */
-
-  union {
-    /* For input BFDs, a chain of BFDs involved in a link.  */
-    struct bfd *next;
-    /* For output BFD, the linker hash table.  */
-    struct bfd_link_hash_table *hash;
-  } link;
-
-  /* Used by the back end to hold private data.  */
-  union
-    {
-      struct aout_data_struct *aout_data;
-      struct artdata *aout_ar_data;
-      struct coff_tdata *coff_obj_data;
-      struct pe_tdata *pe_obj_data;
-      struct xcoff_tdata *xcoff_obj_data;
-      struct ecoff_tdata *ecoff_obj_data;
-      struct srec_data_struct *srec_data;
-      struct verilog_data_struct *verilog_data;
-      struct ihex_data_struct *ihex_data;
-      struct tekhex_data_struct *tekhex_data;
-      struct elf_obj_tdata *elf_obj_data;
-      struct mmo_data_struct *mmo_data;
-      struct sun_core_struct *sun_core_data;
-      struct sco5_core_struct *sco5_core_data;
-      struct trad_core_struct *trad_core_data;
-      struct som_data_struct *som_data;
-      struct hpux_core_struct *hpux_core_data;
-      struct hppabsd_core_struct *hppabsd_core_data;
-      struct sgi_core_struct *sgi_core_data;
-      struct lynx_core_struct *lynx_core_data;
-      struct osf_core_struct *osf_core_data;
-      struct cisco_core_struct *cisco_core_data;
-      struct versados_data_struct *versados_data;
-      struct netbsd_core_struct *netbsd_core_data;
-      struct mach_o_data_struct *mach_o_data;
-      struct mach_o_fat_data_struct *mach_o_fat_data;
-      struct plugin_data_struct *plugin_data;
-      struct bfd_pef_data_struct *pef_data;
-      struct bfd_pef_xlib_data_struct *pef_xlib_data;
-      struct bfd_sym_data_struct *sym_data;
-      void *any;
-    }
-  tdata;
-
-  /* Used by the application to hold private data.  */
-  void *usrdata;
-
-  /* Where all the allocated stuff under this BFD goes.  This is a
-     struct objalloc *, but we use void * to avoid requiring the inclusion
-     of objalloc.h.  */
-  void *memory;
-
-  /* For input BFDs, the build ID, if the object has one. */
-  const struct bfd_build_id *build_id;
+  /* A hash table used to hold stabs strings.  */
+  struct bfd_strtab_hash *strings;
+  /* The header file hash table.  */
+  struct bfd_hash_table includes;
+  /* The first .stabstr section.  */
+  struct bfd_section *stabstr;
 };
 
-static inline const char *
-bfd_get_filename (const bfd *abfd)
-{
-  return abfd->filename;
-}
-
-static inline bfd_boolean
-bfd_get_cacheable (const bfd *abfd)
-{
-  return abfd->cacheable;
-}
-
-static inline enum bfd_format
-bfd_get_format (const bfd *abfd)
-{
-  return abfd->format;
-}
-
-static inline flagword
-bfd_get_file_flags (const bfd *abfd)
-{
-  return abfd->flags;
-}
-
-static inline bfd_vma
-bfd_get_start_address (const bfd *abfd)
-{
-  return abfd->start_address;
-}
-
-static inline unsigned int
-bfd_get_symcount (const bfd *abfd)
-{
-  return abfd->symcount;
-}
-
-static inline unsigned int
-bfd_get_dynamic_symcount (const bfd *abfd)
-{
-  return abfd->dynsymcount;
-}
-
-static inline struct bfd_symbol **
-bfd_get_outsymbols (const bfd *abfd)
-{
-  return abfd->outsymbols;
-}
-
-static inline unsigned int
-bfd_count_sections (const bfd *abfd)
-{
-  return abfd->section_count;
-}
-
-static inline bfd_boolean
-bfd_has_map (const bfd *abfd)
-{
-  return abfd->has_armap;
-}
-
-static inline bfd_boolean
-bfd_is_thin_archive (const bfd *abfd)
-{
-  return abfd->is_thin_archive;
-}
-
-static inline void *
-bfd_usrdata (const bfd *abfd)
-{
-  return abfd->usrdata;
-}
-
-/* See note beside bfd_set_section_userdata.  */
-static inline bfd_boolean
-bfd_set_cacheable (bfd * abfd, bfd_boolean val)
-{
-  abfd->cacheable = val;
-  return TRUE;
-}
-
-static inline void
-bfd_set_thin_archive (bfd *abfd, bfd_boolean val)
-{
-  abfd->is_thin_archive = val;
-}
-
-static inline void
-bfd_set_usrdata (bfd *abfd, void *val)
-{
-  abfd->usrdata = val;
-}
-
-static inline asection *
-bfd_asymbol_section (const asymbol *sy)
-{
-  return sy->section;
-}
-
-static inline bfd_vma
-bfd_asymbol_value (const asymbol *sy)
-{
-  return sy->section->vma + sy->value;
-}
-
-static inline const char *
-bfd_asymbol_name (const asymbol *sy)
-{
-  return sy->name;
-}
-
-static inline struct bfd *
-bfd_asymbol_bfd (const asymbol *sy)
-{
-  return sy->the_bfd;
-}
-
-static inline void
-bfd_set_asymbol_name (asymbol *sy, const char *name)
-{
-  sy->name = name;
-}
-
-static inline bfd_size_type
-bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
-{
-  if (abfd->direction != write_direction && sec->rawsize != 0)
-    return sec->rawsize;
-  return sec->size;
-}
-
-/* Find the address one past the end of SEC.  */
-static inline bfd_size_type
-bfd_get_section_limit (const bfd *abfd, const asection *sec)
-{
-  return (bfd_get_section_limit_octets (abfd, sec)
-          / bfd_octets_per_byte (abfd, sec));
-}
-
-/* Functions to handle insertion and deletion of a bfd's sections.  These
-   only handle the list pointers, ie. do not adjust section_count,
-   target_index etc.  */
-static inline void
-bfd_section_list_remove (bfd *abfd, asection *s)
-{
-  asection *next = s->next;
-  asection *prev = s->prev;
-  if (prev)
-    prev->next = next;
-  else
-    abfd->sections = next;
-  if (next)
-    next->prev = prev;
-  else
-    abfd->section_last = prev;
-}
-
-static inline void
-bfd_section_list_append (bfd *abfd, asection *s)
-{
-  s->next = 0;
-  if (abfd->section_last)
-    {
-      s->prev = abfd->section_last;
-      abfd->section_last->next = s;
-    }
-  else
-    {
-      s->prev = 0;
-      abfd->sections = s;
-    }
-  abfd->section_last = s;
-}
-
-static inline void
-bfd_section_list_prepend (bfd *abfd, asection *s)
-{
-  s->prev = 0;
-  if (abfd->sections)
-    {
-      s->next = abfd->sections;
-      abfd->sections->prev = s;
-    }
-  else
-    {
-      s->next = 0;
-      abfd->section_last = s;
-    }
-  abfd->sections = s;
-}
-
-static inline void
-bfd_section_list_insert_after (bfd *abfd, asection *a, asection *s)
-{
-  asection *next = a->next;
-  s->next = next;
-  s->prev = a;
-  a->next = s;
-  if (next)
-    next->prev = s;
-  else
-    abfd->section_last = s;
-}
-
-static inline void
-bfd_section_list_insert_before (bfd *abfd, asection *b, asection *s)
-{
-  asection *prev = b->prev;
-  s->prev = prev;
-  s->next = b;
-  b->prev = s;
-  if (prev)
-    prev->next = s;
-  else
-    abfd->sections = s;
-}
-
-static inline bfd_boolean
-bfd_section_removed_from_list (const bfd *abfd, const asection *s)
-{
-  return s->next ? s->next->prev != s : abfd->section_last != s;
-}
-
-
-typedef enum bfd_error
-{
-  bfd_error_no_error = 0,
-  bfd_error_system_call,
-  bfd_error_invalid_target,
-  bfd_error_wrong_format,
-  bfd_error_wrong_object_format,
-  bfd_error_invalid_operation,
-  bfd_error_no_memory,
-  bfd_error_no_symbols,
-  bfd_error_no_armap,
-  bfd_error_no_more_archived_files,
-  bfd_error_malformed_archive,
-  bfd_error_missing_dso,
-  bfd_error_file_not_recognized,
-  bfd_error_file_ambiguously_recognized,
-  bfd_error_no_contents,
-  bfd_error_nonrepresentable_section,
-  bfd_error_no_debug_section,
-  bfd_error_bad_value,
-  bfd_error_file_truncated,
-  bfd_error_file_too_big,
-  bfd_error_sorry,
-  bfd_error_on_input,
-  bfd_error_invalid_error_code
-}
-bfd_error_type;
-
-bfd_error_type bfd_get_error (void);
-
-void bfd_set_error (bfd_error_type error_tag);
-
-void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
-
-const char *bfd_errmsg (bfd_error_type error_tag);
-
-void bfd_perror (const char *message);
-
-
-typedef void (*bfd_error_handler_type) (const char *, va_list);
-
-void _bfd_error_handler (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
-
-bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
-
-void bfd_set_error_program_name (const char *);
-
-
-typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
-                                         const char *bfd_version,
-                                         const char *bfd_file,
-                                         int bfd_line);
-
-bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
-
-long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
-
-long bfd_canonicalize_reloc
-   (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
-
-void bfd_set_reloc
-   (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
-
-#define bfd_set_reloc(abfd, asect, location, count) \
-       BFD_SEND (abfd, _bfd_set_reloc, (abfd, asect, location, count))
-bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
-
-int bfd_get_arch_size (bfd *abfd);
-
-int bfd_get_sign_extend_vma (bfd *abfd);
-
-bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
-
-unsigned int bfd_get_gp_size (bfd *abfd);
-
-void bfd_set_gp_size (bfd *abfd, unsigned int i);
-
-bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
-
-bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
-
-#define bfd_copy_private_header_data(ibfd, obfd) \
-       BFD_SEND (obfd, _bfd_copy_private_header_data, \
-                 (ibfd, obfd))
-bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
-
-#define bfd_copy_private_bfd_data(ibfd, obfd) \
-       BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
-                 (ibfd, obfd))
-bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
-
-#define bfd_set_private_flags(abfd, flags) \
-       BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
-#define bfd_sizeof_headers(abfd, info) \
-       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
-
-#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
-       BFD_SEND (abfd, _bfd_find_nearest_line, \
-                 (abfd, syms, sec, off, file, func, line, NULL))
-
-#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
-                                           line, disc) \
-       BFD_SEND (abfd, _bfd_find_nearest_line, \
-                 (abfd, syms, sec, off, file, func, line, disc))
-
-#define bfd_find_line(abfd, syms, sym, file, line) \
-       BFD_SEND (abfd, _bfd_find_line, \
-                 (abfd, syms, sym, file, line))
-
-#define bfd_find_inliner_info(abfd, file, func, line) \
-       BFD_SEND (abfd, _bfd_find_inliner_info, \
-                 (abfd, file, func, line))
-
-#define bfd_debug_info_start(abfd) \
-       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
-
-#define bfd_debug_info_end(abfd) \
-       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
-
-#define bfd_debug_info_accumulate(abfd, section) \
-       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
-
-#define bfd_stat_arch_elt(abfd, stat) \
-       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
-
-#define bfd_update_armap_timestamp(abfd) \
-       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
-
-#define bfd_set_arch_mach(abfd, arch, mach)\
-       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
-
-#define bfd_relax_section(abfd, section, link_info, again) \
-       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
-
-#define bfd_gc_sections(abfd, link_info) \
-       BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
-
-#define bfd_lookup_section_flags(link_info, flag_info, section) \
-       BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
-
-#define bfd_merge_sections(abfd, link_info) \
-       BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
-
-#define bfd_is_group_section(abfd, sec) \
-       BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
-
-#define bfd_group_name(abfd, sec) \
-       BFD_SEND (abfd, _bfd_group_name, (abfd, sec))
-
-#define bfd_discard_group(abfd, sec) \
-       BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
-
-#define bfd_link_hash_table_create(abfd) \
-       BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
-
-#define bfd_link_add_symbols(abfd, info) \
-       BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
-
-#define bfd_link_just_syms(abfd, sec, info) \
-       BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
-
-#define bfd_final_link(abfd, info) \
-       BFD_SEND (abfd, _bfd_final_link, (abfd, info))
-
-#define bfd_free_cached_info(abfd) \
-       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
-
-#define bfd_get_dynamic_symtab_upper_bound(abfd) \
-       BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
-
-#define bfd_print_private_bfd_data(abfd, file)\
-       BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
-
-#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
-       BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
-
-#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
-       BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
-                                                   dyncount, dynsyms, ret))
-
-#define bfd_get_dynamic_reloc_upper_bound(abfd) \
-       BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
-
-#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
-       BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
-
-extern bfd_byte *bfd_get_relocated_section_contents
-  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
-   bfd_boolean, asymbol **);
-
-bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
-
-bfd_vma bfd_emul_get_maxpagesize (const char *);
-
-void bfd_emul_set_maxpagesize (const char *, bfd_vma);
-
-bfd_vma bfd_emul_get_commonpagesize (const char *, bfd_boolean);
-
-void bfd_emul_set_commonpagesize (const char *, bfd_vma);
-
-char *bfd_demangle (bfd *, const char *, int);
-
-void bfd_update_compression_header
-   (bfd *abfd, bfd_byte *contents, asection *sec);
-
-bfd_boolean bfd_check_compression_header
-   (bfd *abfd, bfd_byte *contents, asection *sec,
-    bfd_size_type *uncompressed_size,
-    unsigned int *uncompressed_alignment_power);
-
-int bfd_get_compression_header_size (bfd *abfd, asection *sec);
-
-bfd_size_type bfd_convert_section_size
-   (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
-
-bfd_boolean bfd_convert_section_contents
-   (bfd *ibfd, asection *isec, bfd *obfd,
-    bfd_byte **ptr, bfd_size_type *ptr_size);
-
-/* Extracted from archive.c.  */
-symindex bfd_get_next_mapent
-   (bfd *abfd, symindex previous, carsym **sym);
-
-bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
-
-bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
-
-/* Extracted from corefile.c.  */
-const char *bfd_core_file_failing_command (bfd *abfd);
-
-int bfd_core_file_failing_signal (bfd *abfd);
-
-int bfd_core_file_pid (bfd *abfd);
-
-bfd_boolean core_file_matches_executable_p
-   (bfd *core_bfd, bfd *exec_bfd);
-
-bfd_boolean generic_core_file_matches_executable_p
-   (bfd *core_bfd, bfd *exec_bfd);
-
 /* Extracted from targets.c.  */
 #define BFD_SEND(bfd, message, arglist) \
   ((*((bfd)->xvec->message)) arglist)
@@ -7211,6 +7536,11 @@ bfd_boolean generic_core_file_matches_ex
    (bfd_assert (__FILE__,__LINE__), NULL))
 #endif
 
+/* Defined to TRUE if unused section symbol should be kept.  */
+#ifndef TARGET_KEEP_UNUSED_SECTION_SYMBOLS
+#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true
+#endif
+
 enum bfd_flavour
 {
   /* N.B. Update bfd_flavour_name if you change this.  */
@@ -7225,10 +7555,7 @@ enum bfd_flavour
   bfd_target_verilog_flavour,
   bfd_target_ihex_flavour,
   bfd_target_som_flavour,
-  bfd_target_os9k_flavour,
-  bfd_target_versados_flavour,
   bfd_target_msdos_flavour,
-  bfd_target_ovax_flavour,
   bfd_target_evax_flavour,
   bfd_target_mmo_flavour,
   bfd_target_mach_o_flavour,
@@ -7239,11 +7566,9 @@ enum bfd_flavour
 
 enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };
 
-/* Forward declaration.  */
-typedef struct bfd_link_info _bfd_link_info;
-
-/* Forward declaration.  */
-typedef struct flag_info flag_info;
+/* Forward declarations.  */
+struct flag_info;
+typedef void (*bfd_cleanup) (bfd *);
 
 typedef struct bfd_target
 {
@@ -7282,12 +7607,15 @@ typedef struct bfd_target
      possible targets when more than one target matches.  */
   unsigned char match_priority;
 
+ /* TRUE if unused section symbols should be kept.  */
+  bool keep_unused_section_symbols;
+
   /* Entries for byte swapping for data. These are different from the
      other entry points, since they don't take a BFD as the first argument.
      Certain other handlers could do the same.  */
-  bfd_uint64_t   (*bfd_getx64) (const void *);
-  bfd_int64_t    (*bfd_getx_signed_64) (const void *);
-  void           (*bfd_putx64) (bfd_uint64_t, void *);
+  uint64_t       (*bfd_getx64) (const void *);
+  int64_t        (*bfd_getx_signed_64) (const void *);
+  void           (*bfd_putx64) (uint64_t, void *);
   bfd_vma        (*bfd_getx32) (const void *);
   bfd_signed_vma (*bfd_getx_signed_32) (const void *);
   void           (*bfd_putx32) (bfd_vma, void *);
@@ -7296,9 +7624,9 @@ typedef struct bfd_target
   void           (*bfd_putx16) (bfd_vma, void *);
 
   /* Byte swapping for the headers.  */
-  bfd_uint64_t   (*bfd_h_getx64) (const void *);
-  bfd_int64_t    (*bfd_h_getx_signed_64) (const void *);
-  void           (*bfd_h_putx64) (bfd_uint64_t, void *);
+  uint64_t       (*bfd_h_getx64) (const void *);
+  int64_t        (*bfd_h_getx_signed_64) (const void *);
+  void           (*bfd_h_putx64) (uint64_t, void *);
   bfd_vma        (*bfd_h_getx32) (const void *);
   bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
   void           (*bfd_h_putx32) (bfd_vma, void *);
@@ -7309,16 +7637,15 @@ typedef struct bfd_target
   /* Format dependent routines: these are vectors of entry points
      within the target vector structure, one for each format to check.  */
 
-  /* Check the format of a file being read.  Return a <<bfd_target *>> or zero.  */
-  const struct bfd_target *
-              (*_bfd_check_format[bfd_type_end]) (bfd *);
+  /* Check the format of a file being read.  Return a <<bfd_cleanup>> on
+     success or zero on failure.  */
+  bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *);
 
   /* Set the format of a file being written.  */
-  bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
+  bool (*_bfd_set_format[bfd_type_end]) (bfd *);
 
   /* Write cached information into a file being written, at <<bfd_close>>.  */
-  bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
-
+  bool (*_bfd_write_contents[bfd_type_end]) (bfd *);
 
   /* Generic entry points.  */
 #define BFD_JUMP_TABLE_GENERIC(NAME) \
@@ -7329,17 +7656,16 @@ typedef struct bfd_target
   NAME##_get_section_contents_in_window
 
   /* Called when the BFD is being closed to do any necessary cleanup.  */
-  bfd_boolean (*_close_and_cleanup) (bfd *);
+  bool (*_close_and_cleanup) (bfd *);
   /* Ask the BFD to free all cached information.  */
-  bfd_boolean (*_bfd_free_cached_info) (bfd *);
+  bool (*_bfd_free_cached_info) (bfd *);
   /* Called when a new section is created.  */
-  bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
+  bool (*_new_section_hook) (bfd *, sec_ptr);
   /* Read the contents of a section.  */
-  bfd_boolean (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr,
-                                            bfd_size_type);
-  bfd_boolean (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr,
-                                                      bfd_window *, file_ptr,
-                                                      bfd_size_type);
+  bool (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr,
+				     bfd_size_type);
+  bool (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr, bfd_window *,
+					       file_ptr, bfd_size_type);
 
   /* Entry points to copy private data.  */
 #define BFD_JUMP_TABLE_COPY(NAME) \
@@ -7354,34 +7680,32 @@ typedef struct bfd_target
 
   /* Called to copy BFD general private data from one object file
      to another.  */
-  bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
+  bool (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
   /* Called to merge BFD general private data from one object file
      to a common output file when linking.  */
-  bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
   /* Called to initialize BFD private section data from one object file
      to another.  */
 #define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
        BFD_SEND (obfd, _bfd_init_private_section_data, \
-                 (ibfd, isec, obfd, osec, link_info))
-  bfd_boolean (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *,
-                                                 sec_ptr,
-                                                 struct bfd_link_info *);
+		 (ibfd, isec, obfd, osec, link_info))
+  bool (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr,
+					  struct bfd_link_info *);
   /* Called to copy BFD private section data from one object file
      to another.  */
-  bfd_boolean (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *,
-                                                 sec_ptr);
+  bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr);
   /* Called to copy BFD private symbol data from one symbol
      to another.  */
-  bfd_boolean (*_bfd_copy_private_symbol_data) (bfd *, asymbol *, bfd *,
-                                                asymbol *);
+  bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
+					 bfd *, asymbol *);
   /* Called to copy BFD private header data from one object file
      to another.  */
-  bfd_boolean (*_bfd_copy_private_header_data) (bfd *, bfd *);
+  bool (*_bfd_copy_private_header_data) (bfd *, bfd *);
   /* Called to set private backend flags.  */
-  bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
+  bool (*_bfd_set_private_flags) (bfd *, flagword);
 
   /* Called to print private BFD data.  */
-  bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
+  bool (*_bfd_print_private_bfd_data) (bfd *, void *);
 
   /* Core file entry points.  */
 #define BFD_JUMP_TABLE_CORE(NAME) \
@@ -7390,10 +7714,10 @@ typedef struct bfd_target
   NAME##_core_file_matches_executable_p, \
   NAME##_core_file_pid
 
-  char *      (*_core_file_failing_command) (bfd *);
-  int         (*_core_file_failing_signal) (bfd *);
-  bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
-  int         (*_core_file_pid) (bfd *);
+  char *(*_core_file_failing_command) (bfd *);
+  int   (*_core_file_failing_signal) (bfd *);
+  bool  (*_core_file_matches_executable_p) (bfd *, bfd *);
+  int   (*_core_file_pid) (bfd *);
 
   /* Archive entry points.  */
 #define BFD_JUMP_TABLE_ARCHIVE(NAME) \
@@ -7409,22 +7733,21 @@ typedef struct bfd_target
   NAME##_generic_stat_arch_elt, \
   NAME##_update_armap_timestamp
 
-  bfd_boolean (*_bfd_slurp_armap) (bfd *);
-  bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
-  bfd_boolean (*_bfd_construct_extended_name_table) (bfd *, char **,
-                                                     bfd_size_type *,
-                                                     const char **);
-  void        (*_bfd_truncate_arname) (bfd *, const char *, char *);
-  bfd_boolean (*write_armap) (bfd *, unsigned int, struct orl *,
-                              unsigned int, int);
-  void *      (*_bfd_read_ar_hdr_fn) (bfd *);
-  bfd_boolean (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
-  bfd *       (*openr_next_archived_file) (bfd *, bfd *);
+  bool (*_bfd_slurp_armap) (bfd *);
+  bool (*_bfd_slurp_extended_name_table) (bfd *);
+  bool (*_bfd_construct_extended_name_table) (bfd *, char **,
+					      bfd_size_type *,
+					      const char **);
+  void (*_bfd_truncate_arname) (bfd *, const char *, char *);
+  bool (*write_armap) (bfd *, unsigned, struct orl *, unsigned, int);
+  void *(*_bfd_read_ar_hdr_fn) (bfd *);
+  bool (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
+  bfd *(*openr_next_archived_file) (bfd *, bfd *);
 #define bfd_get_elt_at_index(b,i) \
        BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
-  bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex);
-  int         (*_bfd_stat_arch_elt) (bfd *, struct stat *);
-  bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
+  bfd *(*_bfd_get_elt_at_index) (bfd *, symindex);
+  int  (*_bfd_stat_arch_elt) (bfd *, struct stat *);
+  bool (*_bfd_update_armap_timestamp) (bfd *);
 
   /* Entry points used for symbols.  */
 #define BFD_JUMP_TABLE_SYMBOLS(NAME) \
@@ -7438,52 +7761,59 @@ typedef struct bfd_target
   NAME##_bfd_is_target_special_symbol, \
   NAME##_get_lineno, \
   NAME##_find_nearest_line, \
+  NAME##_find_nearest_line_with_alt, \
   NAME##_find_line, \
   NAME##_find_inliner_info, \
   NAME##_bfd_make_debug_symbol, \
   NAME##_read_minisymbols, \
   NAME##_minisymbol_to_symbol
 
-  long        (*_bfd_get_symtab_upper_bound) (bfd *);
-  long        (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **);
+  long (*_bfd_get_symtab_upper_bound) (bfd *);
+  long (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **);
   struct bfd_symbol *
-              (*_bfd_make_empty_symbol) (bfd *);
-  void        (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *,
-                                    bfd_print_symbol_type);
+       (*_bfd_make_empty_symbol) (bfd *);
+  void (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *,
+			     bfd_print_symbol_type);
 #define bfd_print_symbol(b,p,s,e) \
        BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
-  void        (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *,
-                                       symbol_info *);
+  void  (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *, symbol_info *);
 #define bfd_get_symbol_info(b,p,e) \
        BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
-  const char *(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *,
-                                                 bfd_boolean *);
-#define bfd_get_symbol_version_string(b,s,h) \
-       BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h))
-  bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
-  bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
-  alent *     (*_get_lineno) (bfd *, struct bfd_symbol *);
-  bfd_boolean (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **,
-                                         struct bfd_section *, bfd_vma,
-                                         const char **, const char **,
-                                         unsigned int *, unsigned int *);
-  bfd_boolean (*_bfd_find_line) (bfd *, struct bfd_symbol **,
-                                 struct bfd_symbol *, const char **,
-                                 unsigned int *);
-  bfd_boolean (*_bfd_find_inliner_info)
+  const char *
+       (*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *,
+					  bool, bool *);
+#define bfd_get_symbol_version_string(b,s,p,h) \
+       BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h))
+  bool (*_bfd_is_local_label_name) (bfd *, const char *);
+  bool (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
+  alent *
+       (*_get_lineno) (bfd *, struct bfd_symbol *);
+  bool (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **,
+				  struct bfd_section *, bfd_vma,
+				  const char **, const char **,
+				  unsigned int *, unsigned int *);
+  bool (*_bfd_find_nearest_line_with_alt) (bfd *, const char *,
+					   struct bfd_symbol **,
+					   struct bfd_section *, bfd_vma,
+					   const char **, const char **,
+					   unsigned int *, unsigned int *);
+  bool (*_bfd_find_line) (bfd *, struct bfd_symbol **,
+			  struct bfd_symbol *, const char **,
+			  unsigned int *);
+  bool (*_bfd_find_inliner_info)
     (bfd *, const char **, const char **, unsigned int *);
  /* Back-door to allow format-aware applications to create debug symbols
     while using BFD for everything else.  Currently used by the assembler
     when creating COFF files.  */
-  asymbol *   (*_bfd_make_debug_symbol) (bfd *, void *, unsigned long size);
+  asymbol *
+       (*_bfd_make_debug_symbol) (bfd *);
 #define bfd_read_minisymbols(b, d, m, s) \
        BFD_SEND (b, _read_minisymbols, (b, d, m, s))
-  long        (*_read_minisymbols) (bfd *, bfd_boolean, void **,
-                                    unsigned int *);
+  long (*_read_minisymbols) (bfd *, bool, void **, unsigned int *);
 #define bfd_minisymbol_to_symbol(b, d, m, f) \
        BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
-  asymbol *   (*_minisymbol_to_symbol) (bfd *, bfd_boolean, const void *,
-                                        asymbol *);
+  asymbol *
+       (*_minisymbol_to_symbol) (bfd *, bool, const void *, asymbol *);
 
   /* Routines for relocs.  */
 #define BFD_JUMP_TABLE_RELOCS(NAME) \
@@ -7493,25 +7823,25 @@ typedef struct bfd_target
   NAME##_bfd_reloc_type_lookup, \
   NAME##_bfd_reloc_name_lookup
 
-  long        (*_get_reloc_upper_bound) (bfd *, sec_ptr);
-  long        (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **,
-                                          struct bfd_symbol **);
-  void        (*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int);
+  long (*_get_reloc_upper_bound) (bfd *, sec_ptr);
+  long (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **,
+				   struct bfd_symbol **);
+  void (*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int);
   /* See documentation on reloc types.  */
   reloc_howto_type *
-              (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+       (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
   reloc_howto_type *
-              (*reloc_name_lookup) (bfd *, const char *);
+       (*reloc_name_lookup) (bfd *, const char *);
 
   /* Routines used when writing an object file.  */
 #define BFD_JUMP_TABLE_WRITE(NAME) \
   NAME##_set_arch_mach, \
   NAME##_set_section_contents
 
-  bfd_boolean (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture,
-                                     unsigned long);
-  bfd_boolean (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *,
-                                            file_ptr, bfd_size_type);
+  bool (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture,
+				     unsigned long);
+  bool (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *,
+				     file_ptr, bfd_size_type);
 
   /* Routines used by the linker.  */
 #define BFD_JUMP_TABLE_LINK(NAME) \
@@ -7536,81 +7866,82 @@ typedef struct bfd_target
   NAME##_bfd_link_hide_symbol, \
   NAME##_bfd_define_start_stop
 
-  int         (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
-  bfd_byte *  (*_bfd_get_relocated_section_contents) (bfd *,
-                                                      struct bfd_link_info *,
-                                                      struct bfd_link_order *,
-                                                      bfd_byte *, bfd_boolean,
-                                                      struct bfd_symbol **);
+  int  (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
+  bfd_byte *
+       (*_bfd_get_relocated_section_contents) (bfd *,
+					       struct bfd_link_info *,
+					       struct bfd_link_order *,
+					       bfd_byte *, bool,
+					       struct bfd_symbol **);
 
-  bfd_boolean (*_bfd_relax_section) (bfd *, struct bfd_section *,
-                                     struct bfd_link_info *, bfd_boolean *);
+  bool (*_bfd_relax_section) (bfd *, struct bfd_section *,
+			      struct bfd_link_info *, bool *);
 
   /* Create a hash table for the linker.  Different backends store
      different information in this table.  */
   struct bfd_link_hash_table *
-              (*_bfd_link_hash_table_create) (bfd *);
+       (*_bfd_link_hash_table_create) (bfd *);
 
   /* Add symbols from this object file into the hash table.  */
-  bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
 
   /* Indicate that we are only retrieving symbol values from this section.  */
-  void        (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
+  void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
 
   /* Copy the symbol type and other attributes for a linker script
      assignment of one symbol to another.  */
 #define bfd_copy_link_hash_symbol_type(b, t, f) \
        BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
-  void        (*_bfd_copy_link_hash_symbol_type) (bfd *,
-                                                  struct bfd_link_hash_entry *,
-                                                  struct bfd_link_hash_entry *);
+  void (*_bfd_copy_link_hash_symbol_type) (bfd *,
+					   struct bfd_link_hash_entry *,
+					   struct bfd_link_hash_entry *);
 
   /* Do a link based on the link_order structures attached to each
      section of the BFD.  */
-  bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_final_link) (bfd *, struct bfd_link_info *);
 
   /* Should this section be split up into smaller pieces during linking.  */
-  bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
+  bool (*_bfd_link_split_section) (bfd *, struct bfd_section *);
 
   /* Check the relocations in the bfd for validity.  */
-  bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
+  bool (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
 
   /* Remove sections that are not referenced from the output.  */
-  bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
 
   /* Sets the bitmask of allowed and disallowed section flags.  */
-  bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
-                                            struct flag_info *, asection *);
+  bool (*_bfd_lookup_section_flags) (struct bfd_link_info *,
+				     struct flag_info *, asection *);
 
   /* Attempt to merge SEC_MERGE sections.  */
-  bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
 
   /* Is this section a member of a group?  */
-  bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
+  bool (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
 
   /* The group name, if section is a member of a group.  */
   const char *(*_bfd_group_name) (bfd *, const struct bfd_section *);
 
   /* Discard members of a group.  */
-  bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
+  bool (*_bfd_discard_group) (bfd *, struct bfd_section *);
 
   /* Check if SEC has been already linked during a reloceatable or
      final link.  */
-  bfd_boolean (*_section_already_linked) (bfd *, asection *,
-                                          struct bfd_link_info *);
+  bool (*_section_already_linked) (bfd *, asection *,
+				   struct bfd_link_info *);
 
   /* Define a common symbol.  */
-  bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
-                                            struct bfd_link_hash_entry *);
+  bool (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
+				     struct bfd_link_hash_entry *);
 
   /* Hide a symbol.  */
   void (*_bfd_link_hide_symbol) (bfd *, struct bfd_link_info *,
-                                 struct bfd_link_hash_entry *);
+				 struct bfd_link_hash_entry *);
 
   /* Define a __start, __stop, .startof. or .sizeof. symbol.  */
   struct bfd_link_hash_entry *
-              (*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
-                                         asection *);
+       (*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
+				  asection *);
 
   /* Routines to handle dynamic symbols and relocs.  */
 #define BFD_JUMP_TABLE_DYNAMIC(NAME) \
@@ -7621,18 +7952,18 @@ typedef struct bfd_target
   NAME##_canonicalize_dynamic_reloc
 
   /* Get the amount of memory required to hold the dynamic symbols.  */
-  long        (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
+  long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
   /* Read in the dynamic symbols.  */
-  long        (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **);
+  long (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **);
   /* Create synthetized symbols.  */
-  long        (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **,
-                                            long, struct bfd_symbol **,
-                                            struct bfd_symbol **);
+  long (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **,
+				     long, struct bfd_symbol **,
+				     struct bfd_symbol **);
   /* Get the amount of memory required to hold the dynamic relocs.  */
-  long        (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
+  long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
   /* Read in the dynamic relocs.  */
-  long        (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **,
-                                                  struct bfd_symbol **);
+  long (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **,
+					   struct bfd_symbol **);
 
   /* Opposite endian version of this target.  */
   const struct bfd_target *alternative_target;
@@ -7661,31 +7992,31 @@ bfd_applicable_file_flags (const bfd *ab
   return abfd->xvec->object_flags;
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_family_coff (const bfd *abfd)
 {
   return (bfd_get_flavour (abfd) == bfd_target_coff_flavour
-          || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
+	  || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_big_endian (const bfd *abfd)
 {
   return abfd->xvec->byteorder == BFD_ENDIAN_BIG;
 }
-static inline bfd_boolean
+static inline bool
 bfd_little_endian (const bfd *abfd)
 {
   return abfd->xvec->byteorder == BFD_ENDIAN_LITTLE;
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_header_big_endian (const bfd *abfd)
 {
   return abfd->xvec->header_byteorder == BFD_ENDIAN_BIG;
 }
 
-static inline bfd_boolean
+static inline bool
 bfd_header_little_endian (const bfd *abfd)
 {
   return abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE;
@@ -7711,15 +8042,22 @@ bfd_asymbol_flavour (const asymbol *sy)
   return sy->the_bfd->xvec->flavour;
 }
 
-bfd_boolean bfd_set_default_target (const char *name);
+static inline bool
+bfd_keep_unused_section_symbols (const bfd *abfd)
+{
+  return abfd->xvec->keep_unused_section_symbols;
+}
+
+bool bfd_set_default_target (const char *name);
 
 const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
 
 const bfd_target *bfd_get_target_info (const char *target_name,
     bfd *abfd,
-    bfd_boolean *is_bigendian,
+    bool *is_bigendian,
     int *underscoring,
     const char **def_target_arch);
+
 const char ** bfd_target_list (void);
 
 const bfd_target *bfd_iterate_over_targets
@@ -7728,109 +8066,6 @@ const bfd_target *bfd_iterate_over_targe
 
 const char *bfd_flavour_name (enum bfd_flavour flavour);
 
-/* Extracted from format.c.  */
-bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
-
-bfd_boolean bfd_check_format_matches
-   (bfd *abfd, bfd_format format, char ***matching);
-
-bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
-
-const char *bfd_format_string (bfd_format format);
-
-/* Extracted from linker.c.  */
-/* Return TRUE if the symbol described by a linker hash entry H
-   is going to be absolute.  Linker-script defined symbols can be
-   converted from absolute to section-relative ones late in the
-   link.  Use this macro to correctly determine whether the symbol
-   will actually end up absolute in output.  */
-#define bfd_is_abs_symbol(H) \
-  (((H)->type == bfd_link_hash_defined \
-    || (H)->type == bfd_link_hash_defweak) \
-   && bfd_is_abs_section ((H)->u.def.section) \
-   && !(H)->rel_from_abs)
-
-bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
-
-#define bfd_link_split_section(abfd, sec) \
-       BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
-
-bfd_boolean bfd_section_already_linked (bfd *abfd,
-    asection *sec,
-    struct bfd_link_info *info);
-
-#define bfd_section_already_linked(abfd, sec, info) \
-       BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
-
-bfd_boolean bfd_generic_define_common_symbol
-   (bfd *output_bfd, struct bfd_link_info *info,
-    struct bfd_link_hash_entry *h);
-
-#define bfd_define_common_symbol(output_bfd, info, h) \
-       BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
-
-void _bfd_generic_link_hide_symbol
-   (bfd *output_bfd, struct bfd_link_info *info,
-    struct bfd_link_hash_entry *h);
-
-#define bfd_link_hide_symbol(output_bfd, info, h) \
-       BFD_SEND (output_bfd, _bfd_link_hide_symbol, (output_bfd, info, h))
-
-struct bfd_link_hash_entry *bfd_generic_define_start_stop
-   (struct bfd_link_info *info,
-    const char *symbol, asection *sec);
-
-#define bfd_define_start_stop(output_bfd, info, symbol, sec) \
-       BFD_SEND (output_bfd, _bfd_define_start_stop, (info, symbol, sec))
-
-struct bfd_elf_version_tree * bfd_find_version_for_sym
-   (struct bfd_elf_version_tree *verdefs,
-    const char *sym_name, bfd_boolean *hide);
-
-bfd_boolean bfd_hide_sym_by_version
-   (struct bfd_elf_version_tree *verdefs, const char *sym_name);
-
-bfd_boolean bfd_link_check_relocs
-   (bfd *abfd, struct bfd_link_info *info);
-
-bfd_boolean _bfd_generic_link_check_relocs
-   (bfd *abfd, struct bfd_link_info *info);
-
-bfd_boolean bfd_merge_private_bfd_data
-   (bfd *ibfd, struct bfd_link_info *info);
-
-#define bfd_merge_private_bfd_data(ibfd, info) \
-       BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \
-                 (ibfd, info))
-/* Extracted from simple.c.  */
-bfd_byte *bfd_simple_get_relocated_section_contents
-   (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table);
-
-/* Extracted from compress.c.  */
-bfd_boolean bfd_get_full_section_contents
-   (bfd *abfd, asection *section, bfd_byte **ptr);
-
-void bfd_cache_section_contents
-   (asection *sec, void *contents);
-
-bfd_boolean bfd_is_section_compressed_with_header
-   (bfd *abfd, asection *section,
-    int *compression_header_size_p,
-    bfd_size_type *uncompressed_size_p,
-    unsigned int *uncompressed_alignment_power_p);
-
-bfd_boolean bfd_is_section_compressed
-   (bfd *abfd, asection *section);
-
-bfd_boolean bfd_init_section_decompress_status
-   (bfd *abfd, asection *section);
-
-bfd_boolean bfd_init_section_compress_status
-   (bfd *abfd, asection *section);
-
-bfd_boolean bfd_compress_section
-   (bfd *abfd, asection *section, bfd_byte *uncompressed_buffer);
-
 #ifdef __cplusplus
 }
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfd-in.h ./bfd/bfd-in.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfd-in.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/bfd-in.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 /* Main header file for the bfd library -- portable access to object files.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support.
 
@@ -34,9 +34,11 @@ extern "C" {
 
 #include "ansidecl.h"
 #include "symcat.h"
-#include "bfd_stdint.h"
+#include <stdint.h>
+#include <stdbool.h>
 #include "diagnostics.h"
 #include <stdarg.h>
+#include <string.h>
 #include <sys/stat.h>
 
 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
@@ -56,23 +58,6 @@ extern "C" {
    comma and then the length of the string.  Doing this by hand
    is error prone, so using this macro is safer.  */
 #define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
-/* Unfortunately it is not possible to use the STRING_COMMA_LEN macro
-   to create the arguments to another macro, since the preprocessor
-   will mis-count the number of arguments to the outer macro (by not
-   evaluating STRING_COMMA_LEN and so missing the comma).  This is a
-   problem for example when trying to use STRING_COMMA_LEN to build
-   the arguments to the strncmp() macro.  Hence this alternative
-   definition of strncmp is provided here.
-
-   Note - these macros do NOT work if STR2 is not a constant string.  */
-#define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0)
-  /* strcpy() can have a similar problem, but since we know we are
-     copying a constant string, we can use memcpy which will be faster
-     since there is no need to check for a NUL byte inside STR.  We
-     can also save time if we do not need to copy the terminating NUL.  */
-#define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1)
-#define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2))
-
 
 #define BFD_SUPPORTS_PLUGINS @supports_plugins@
 
@@ -84,195 +69,74 @@ extern "C" {
 /* The word size of the default bfd target.  */
 #define BFD_DEFAULT_TARGET_SIZE @bfd_default_target_size@
 
-#define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@
-#define BFD_HOST_64BIT_LONG_LONG @BFD_HOST_64BIT_LONG_LONG@
-#if @BFD_HOST_64_BIT_DEFINED@
-#define BFD_HOST_64_BIT @BFD_HOST_64_BIT@
-#define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@
-typedef BFD_HOST_64_BIT bfd_int64_t;
-typedef BFD_HOST_U_64_BIT bfd_uint64_t;
-#endif
-
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if BFD_HOST_64BIT_LONG
-#  define BFD_PRI64 "l"
-# elif defined (__MSVCRT__)
-#  define BFD_PRI64 "I64"
-# else
-#  define BFD_PRI64 "ll"
-# endif
-# undef PRId64
-# define PRId64 BFD_PRI64 "d"
-# undef PRIu64
-# define PRIu64 BFD_PRI64 "u"
-# undef PRIx64
-# define PRIx64 BFD_PRI64 "x"
-#endif
+#include <inttypes.h>
 
 #if BFD_ARCH_SIZE >= 64
 #define BFD64
 #endif
 
-#ifndef INLINE
-#if __GNUC__ >= 2
-#define INLINE __inline__
-#else
-#define INLINE
-#endif
-#endif
-
-/* Declaring a type wide enough to hold a host long and a host pointer.  */
-#define BFD_HOSTPTR_T @BFD_HOSTPTR_T@
-typedef BFD_HOSTPTR_T bfd_hostptr_t;
-
-/* Forward declaration.  */
-typedef struct bfd bfd;
-
-/* Boolean type used in bfd.  Too many systems define their own
-   versions of "boolean" for us to safely typedef a "boolean" of
-   our own.  Using an enum for "bfd_boolean" has its own set of
-   problems, with strange looking casts required to avoid warnings
-   on some older compilers.  Thus we just use an int.
-
+/* Boolean type used in bfd.
    General rule: Functions which are bfd_boolean return TRUE on
    success and FALSE on failure (unless they're a predicate).  */
 
-typedef int bfd_boolean;
-#undef FALSE
-#undef TRUE
-#define FALSE 0
-#define TRUE 1
-
-#ifdef BFD64
-
-#ifndef BFD_HOST_64_BIT
- #error No 64 bit integer type available
-#endif /* ! defined (BFD_HOST_64_BIT) */
-
-typedef BFD_HOST_U_64_BIT bfd_vma;
-typedef BFD_HOST_64_BIT bfd_signed_vma;
-typedef BFD_HOST_U_64_BIT bfd_size_type;
-typedef BFD_HOST_U_64_BIT symvalue;
-
-#if BFD_HOST_64BIT_LONG
-#define BFD_VMA_FMT "l"
-#elif defined (__MSVCRT__)
-#define BFD_VMA_FMT "I64"
+#ifdef POISON_BFD_BOOLEAN
+# pragma GCC poison bfd_boolean
 #else
-#define BFD_VMA_FMT "ll"
+# define bfd_boolean bool
+# undef FALSE
+# undef TRUE
+# define FALSE 0
+# define TRUE 1
 #endif
 
-#ifndef fprintf_vma
-#define sprintf_vma(s,x) sprintf (s, "%016" BFD_VMA_FMT "x", x)
-#define fprintf_vma(f,x) fprintf (f, "%016" BFD_VMA_FMT "x", x)
-#endif
+/* Silence "applying zero offset to null pointer" UBSAN warnings.  */
+#define PTR_ADD(P,A) ((A) != 0 ? (P) + (A) : (P))
+/* Also prevent non-zero offsets from being applied to a null pointer.  */
+#define NPTR_ADD(P,A) ((P) != NULL ? (P) + (A) : (P))
 
-#else /* not BFD64  */
+#ifdef BFD64
 
 /* Represent a target address.  Also used as a generic unsigned type
    which is guaranteed to be big enough to hold any arithmetic types
    we need to deal with.  */
-typedef unsigned long bfd_vma;
+typedef uint64_t bfd_vma;
 
 /* A generic signed type which is guaranteed to be big enough to hold any
    arithmetic types we need to deal with.  Can be assumed to be compatible
    with bfd_vma in the same way that signed and unsigned ints are compatible
    (as parameters, in assignment, etc).  */
-typedef long bfd_signed_vma;
+typedef int64_t bfd_signed_vma;
+
+typedef uint64_t bfd_size_type;
+typedef uint64_t symvalue;
 
-typedef unsigned long symvalue;
-typedef unsigned long bfd_size_type;
+#else /* not BFD64  */
 
-/* Print a bfd_vma x on stream s.  */
-#define BFD_VMA_FMT "l"
-#define fprintf_vma(s,x) fprintf (s, "%08" BFD_VMA_FMT "x", x)
-#define sprintf_vma(s,x) sprintf (s, "%08" BFD_VMA_FMT "x", x)
+typedef uint32_t bfd_vma;
+typedef int32_t bfd_signed_vma;
+typedef uint32_t bfd_size_type;
+typedef uint32_t symvalue;
 
 #endif /* not BFD64  */
 
 #define HALF_BFD_SIZE_TYPE \
   (((bfd_size_type) 1) << (8 * sizeof (bfd_size_type) / 2))
 
-#ifndef BFD_HOST_64_BIT
-/* Fall back on a 32 bit type.  The idea is to make these types always
-   available for function return types, but in the case that
-   BFD_HOST_64_BIT is undefined such a function should abort or
-   otherwise signal an error.  */
-typedef bfd_signed_vma bfd_int64_t;
-typedef bfd_vma bfd_uint64_t;
-#endif
-
 /* An offset into a file.  BFD always uses the largest possible offset
    based on the build time availability of fseek, fseeko, or fseeko64.  */
 typedef @bfd_file_ptr@ file_ptr;
-typedef unsigned @bfd_file_ptr@ ufile_ptr;
-
-extern void bfd_sprintf_vma (bfd *, char *, bfd_vma);
-extern void bfd_fprintf_vma (bfd *, void *, bfd_vma);
+typedef @bfd_ufile_ptr@ ufile_ptr;
 
-#define printf_vma(x) fprintf_vma(stdout,x)
-#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x)
+typedef uint32_t flagword;	/* 32 bits of flags */
+typedef uint8_t bfd_byte;
 
-typedef unsigned int flagword;	/* 32 bits of flags */
-typedef unsigned char bfd_byte;
-
-/* File formats.  */
-
-typedef enum bfd_format
-{
-  bfd_unknown = 0,	/* File format is unknown.  */
-  bfd_object,		/* Linker/assembler/compiler output.  */
-  bfd_archive,		/* Object archive file.  */
-  bfd_core,		/* Core dump.  */
-  bfd_type_end		/* Marks the end; don't use it!  */
-}
-bfd_format;
-
-/* Symbols and relocation.  */
-
-/* A count of carsyms (canonical archive symbols).  */
-typedef unsigned long symindex;
-
-#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
-
-/* A canonical archive symbol.  */
-/* This is a type pun with struct ranlib on purpose!  */
-typedef struct carsym
-{
-  const char *name;
-  file_ptr file_offset;	/* Look here to find the file.  */
-}
-carsym;			/* To make these you call a carsymogen.  */
-
-/* Used in generating armaps (archive tables of contents).
-   Perhaps just a forward definition would do?  */
-struct orl		/* Output ranlib.  */
-{
-  char **name;		/* Symbol name.  */
-  union
-  {
-    file_ptr pos;
-    bfd *abfd;
-  } u;			/* bfd* or file position.  */
-  int namidx;		/* Index into string table.  */
-};
-
-/* Linenumber stuff.  */
-typedef struct lineno_cache_entry
-{
-  unsigned int line_number;	/* Linenumber from start of function.  */
-  union
-  {
-    struct bfd_symbol *sym;	/* Function name.  */
-    bfd_vma offset;		/* Offset into section.  */
-  } u;
-}
-alent;
-
-/* Object and core file sections.  */
+/* Forward declarations.  */
+typedef struct bfd bfd;
+struct bfd_link_info;
+struct bfd_link_hash_entry;
 typedef struct bfd_section *sec_ptr;
+typedef struct reloc_cache_entry arelent;
+struct orl;
 
 #define	align_power(addr, align)	\
   (((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align))))
@@ -285,282 +149,12 @@ typedef struct bfd_section *sec_ptr;
   ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this))		  \
    ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
    : ~ (bfd_vma) 0)
-
-typedef enum bfd_print_symbol
-{
-  bfd_print_symbol_name,
-  bfd_print_symbol_more,
-  bfd_print_symbol_all
-} bfd_print_symbol_type;
-
-/* Information about a symbol that nm needs.  */
-
-typedef struct _symbol_info
-{
-  symvalue value;
-  char type;
-  const char *name;		/* Symbol name.  */
-  unsigned char stab_type;	/* Stab type.  */
-  char stab_other;		/* Stab other.  */
-  short stab_desc;		/* Stab desc.  */
-  const char *stab_name;	/* String for stab type.  */
-} symbol_info;
-
-/* Get the name of a stabs type code.  */
-
-extern const char *bfd_get_stab_name (int);
-
-/* Hash table routines.  There is no way to free up a hash table.  */
-
-/* An element in the hash table.  Most uses will actually use a larger
-   structure, and an instance of this will be the first field.  */
-
-struct bfd_hash_entry
-{
-  /* Next entry for this hash code.  */
-  struct bfd_hash_entry *next;
-  /* String being hashed.  */
-  const char *string;
-  /* Hash code.  This is the full hash code, not the index into the
-     table.  */
-  unsigned long hash;
-};
-
-/* A hash table.  */
 
-struct bfd_hash_table
-{
-  /* The hash array.  */
-  struct bfd_hash_entry **table;
-  /* A function used to create new elements in the hash table.  The
-     first entry is itself a pointer to an element.  When this
-     function is first invoked, this pointer will be NULL.  However,
-     having the pointer permits a hierarchy of method functions to be
-     built each of which calls the function in the superclass.  Thus
-     each function should be written to allocate a new block of memory
-     only if the argument is NULL.  */
-  struct bfd_hash_entry *(*newfunc)
-    (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-  /* An objalloc for this hash table.  This is a struct objalloc *,
-     but we use void * to avoid requiring the inclusion of objalloc.h.  */
-  void *memory;
-  /* The number of slots in the hash table.  */
-  unsigned int size;
-  /* The number of entries in the hash table.  */
-  unsigned int count;
-  /* The size of elements.  */
-  unsigned int entsize;
-  /* If non-zero, don't grow the hash table.  */
-  unsigned int frozen:1;
-};
-
-/* Initialize a hash table.  */
-extern bfd_boolean bfd_hash_table_init
-  (struct bfd_hash_table *,
-   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
-			       struct bfd_hash_table *,
-			       const char *),
-   unsigned int);
-
-/* Initialize a hash table specifying a size.  */
-extern bfd_boolean bfd_hash_table_init_n
-  (struct bfd_hash_table *,
-   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
-			       struct bfd_hash_table *,
-			       const char *),
-   unsigned int, unsigned int);
-
-/* Free up a hash table.  */
-extern void bfd_hash_table_free
-  (struct bfd_hash_table *);
-
-/* Look up a string in a hash table.  If CREATE is TRUE, a new entry
-   will be created for this string if one does not already exist.  The
-   COPY argument must be TRUE if this routine should copy the string
-   into newly allocated memory when adding an entry.  */
-extern struct bfd_hash_entry *bfd_hash_lookup
-  (struct bfd_hash_table *, const char *, bfd_boolean create,
-   bfd_boolean copy);
-
-/* Insert an entry in a hash table.  */
-extern struct bfd_hash_entry *bfd_hash_insert
-  (struct bfd_hash_table *, const char *, unsigned long);
-
-/* Rename an entry in a hash table.  */
-extern void bfd_hash_rename
-  (struct bfd_hash_table *, const char *, struct bfd_hash_entry *);
-
-/* Replace an entry in a hash table.  */
-extern void bfd_hash_replace
-  (struct bfd_hash_table *, struct bfd_hash_entry *old,
-   struct bfd_hash_entry *nw);
-
-/* Base method for creating a hash table entry.  */
-extern struct bfd_hash_entry *bfd_hash_newfunc
-  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-
-/* Grab some space for a hash table entry.  */
-extern void *bfd_hash_allocate
-  (struct bfd_hash_table *, unsigned int);
-
-/* Traverse a hash table in a random order, calling a function on each
-   element.  If the function returns FALSE, the traversal stops.  The
-   INFO argument is passed to the function.  */
-extern void bfd_hash_traverse
-  (struct bfd_hash_table *,
-   bfd_boolean (*) (struct bfd_hash_entry *, void *),
-   void *info);
-
-/* Allows the default size of a hash table to be configured. New hash
-   tables allocated using bfd_hash_table_init will be created with
-   this size.  */
-extern unsigned long bfd_hash_set_default_size (unsigned long);
-
-/* Types of compressed DWARF debug sections.  We currently support
-   zlib.  */
-enum compressed_debug_section_type
-{
-  COMPRESS_DEBUG_NONE = 0,
-  COMPRESS_DEBUG = 1 << 0,
-  COMPRESS_DEBUG_GNU_ZLIB = COMPRESS_DEBUG | 1 << 1,
-  COMPRESS_DEBUG_GABI_ZLIB = COMPRESS_DEBUG | 1 << 2
-};
+/* Return TRUE if the start of STR matches PREFIX, FALSE otherwise.  */
 
-/* This structure is used to keep track of stabs in sections
-   information while linking.  */
-
-struct stab_info
+static inline bool
+startswith (const char *str, const char *prefix)
 {
-  /* A hash table used to hold stabs strings.  */
-  struct bfd_strtab_hash *strings;
-  /* The header file hash table.  */
-  struct bfd_hash_table includes;
-  /* The first .stabstr section.  */
-  struct bfd_section *stabstr;
-};
-
-#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
-
-/* User program access to BFD facilities.  */
-
-/* Direct I/O routines, for programs which know more about the object
-   file than BFD does.  Use higher level routines if possible.  */
-
-extern bfd_size_type bfd_bread (void *, bfd_size_type, bfd *);
-extern bfd_size_type bfd_bwrite (const void *, bfd_size_type, bfd *);
-extern int bfd_seek (bfd *, file_ptr, int);
-extern file_ptr bfd_tell (bfd *);
-extern int bfd_flush (bfd *);
-extern int bfd_stat (bfd *, struct stat *);
-
-/* Deprecated old routines.  */
-#if __GNUC__
-#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (_bfd_warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__),	\
-   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (_bfd_warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__), \
-   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#else
-#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (_bfd_warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \
-   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (_bfd_warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\
-   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#endif
-extern void _bfd_warn_deprecated (const char *, const char *, int, const char *);
-
-extern bfd_boolean bfd_cache_close
-  (bfd *abfd);
-/* NB: This declaration should match the autogenerated one in libbfd.h.  */
-
-extern bfd_boolean bfd_cache_close_all (void);
-
-extern bfd_boolean bfd_record_phdr
-  (bfd *, unsigned long, bfd_boolean, flagword, bfd_boolean, bfd_vma,
-   bfd_boolean, bfd_boolean, unsigned int, struct bfd_section **);
-
-/* Byte swapping routines.  */
-
-bfd_uint64_t bfd_getb64 (const void *);
-bfd_uint64_t bfd_getl64 (const void *);
-bfd_int64_t bfd_getb_signed_64 (const void *);
-bfd_int64_t bfd_getl_signed_64 (const void *);
-bfd_vma bfd_getb32 (const void *);
-bfd_vma bfd_getl32 (const void *);
-bfd_signed_vma bfd_getb_signed_32 (const void *);
-bfd_signed_vma bfd_getl_signed_32 (const void *);
-bfd_vma bfd_getb16 (const void *);
-bfd_vma bfd_getl16 (const void *);
-bfd_signed_vma bfd_getb_signed_16 (const void *);
-bfd_signed_vma bfd_getl_signed_16 (const void *);
-void bfd_putb64 (bfd_uint64_t, void *);
-void bfd_putl64 (bfd_uint64_t, void *);
-void bfd_putb32 (bfd_vma, void *);
-void bfd_putl32 (bfd_vma, void *);
-void bfd_putb24 (bfd_vma, void *);
-void bfd_putl24 (bfd_vma, void *);
-void bfd_putb16 (bfd_vma, void *);
-void bfd_putl16 (bfd_vma, void *);
-
-/* Byte swapping routines which take size and endiannes as arguments.  */
-
-bfd_uint64_t bfd_get_bits (const void *, int, bfd_boolean);
-void bfd_put_bits (bfd_uint64_t, void *, int, bfd_boolean);
-
-
-/* mmap hacks */
-
-struct _bfd_window_internal;
-typedef struct _bfd_window_internal bfd_window_internal;
-
-typedef struct _bfd_window
-{
-  /* What the user asked for.  */
-  void *data;
-  bfd_size_type size;
-  /* The actual window used by BFD.  Small user-requested read-only
-     regions sharing a page may share a single window into the object
-     file.  Read-write versions shouldn't until I've fixed things to
-     keep track of which portions have been claimed by the
-     application; don't want to give the same region back when the
-     application wants two writable copies!  */
-  struct _bfd_window_internal *i;
+  return strncmp (str, prefix, strlen (prefix)) == 0;
 }
-bfd_window;
-
-extern void bfd_init_window
-  (bfd_window *);
-extern void bfd_free_window
-  (bfd_window *);
-extern bfd_boolean bfd_get_file_window
-  (bfd *, file_ptr, bfd_size_type, bfd_window *, bfd_boolean);
-
-/* Externally visible ELF routines.  */
-
-/* Create a new BFD as if by bfd_openr.  Rather than opening a file,
-   reconstruct an ELF file by reading the segments out of remote
-   memory based on the ELF file header at EHDR_VMA and the ELF program
-   headers it points to.  If non-zero, SIZE is the known extent of the
-   object.  If not null, *LOADBASEP is filled in with the difference
-   between the VMAs from which the segments were read, and the VMAs
-   the file headers (and hence BFD's idea of each section's VMA) put
-   them at.
-
-   The function TARGET_READ_MEMORY is called to copy LEN bytes from
-   the remote memory at target address VMA into the local buffer at
-   MYADDR; it should return zero on success or an `errno' code on
-   failure.  TEMPL must be a BFD for a target with the word size and
-   byte order found in the remote memory.  */
-extern bfd *bfd_elf_bfd_from_remote_memory
-  (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
-			      bfd_size_type len));
 
-/* Forward declarations.  */
-struct ecoff_debug_info;
-struct ecoff_debug_swap;
-struct ecoff_extr;
-struct bfd_link_info;
-struct bfd_link_hash_entry;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfdio.c ./bfd/bfdio.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfdio.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/bfdio.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 /* Low-level I/O routines for BFDs.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Written by Cygnus Support.
 
@@ -25,6 +25,11 @@
 #include <limits.h>
 #include "bfd.h"
 #include "libbfd.h"
+#include "aout/ar.h"
+#if defined (_WIN32)
+#include <windows.h>
+#include <locale.h>
+#endif
 
 #ifndef S_IXUSR
 #define S_IXUSR 0100    /* Execute by owner.  */
@@ -92,12 +97,7 @@ _bfd_real_fopen (const char *filename, c
      In fopen-vms.h, they are separated from the mode with a comma.
      Split here.  */
   vms_attr = strchr (modes, ',');
-  if (vms_attr == NULL)
-    {
-      /* No attributes.  */
-      return close_on_exec (fopen (filename, modes));
-    }
-  else
+  if (vms_attr != NULL)
     {
       /* Attributes found.  Split.  */
       size_t modes_len = strlen (modes) + 1;
@@ -115,13 +115,71 @@ _bfd_real_fopen (const char *filename, c
 	}
       return close_on_exec (fopen (filename, at[0], at[1], at[2]));
     }
-#else /* !VMS */
-#if defined (HAVE_FOPEN64)
+
+#elif defined (_WIN32)
+  /* PR 25713: Handle extra long path names possibly containing '..' and '.'.  */
+   wchar_t **     lpFilePart = {NULL};
+   const wchar_t  prefix[] = L"\\\\?\\";
+   const size_t   partPathLen = strlen (filename) + 1;
+#ifdef __MINGW32__
+#if !HAVE_DECL____LC_CODEPAGE_FUNC
+/* This prototype was added to locale.h in version 9.0 of MinGW-w64.  */
+   _CRTIMP unsigned int __cdecl ___lc_codepage_func (void);
+#endif
+   const unsigned int cp = ___lc_codepage_func ();
+#else
+   const unsigned int cp = CP_UTF8;
+#endif
+
+   /* Converting the partial path from ascii to unicode.
+      1) Get the length: Calling with lpWideCharStr set to null returns the length.
+      2) Convert the string: Calling with cbMultiByte set to -1 includes the terminating null.  */
+   size_t         partPathWSize = MultiByteToWideChar (cp, 0, filename, -1, NULL, 0);
+   wchar_t *      partPath = calloc (partPathWSize, sizeof(wchar_t));
+   size_t         ix;
+
+   MultiByteToWideChar (cp, 0, filename, -1, partPath, partPathWSize);
+
+   /* Convert any UNIX style path separators into the DOS i.e. backslash separator.  */
+   for (ix = 0; ix < partPathLen; ix++)
+     if (IS_UNIX_DIR_SEPARATOR(filename[ix]))
+       partPath[ix] = '\\';
+
+   /* Getting the full path from the provided partial path.
+      1) Get the length.
+      2) Resolve the path.  */
+   long       fullPathWSize = GetFullPathNameW (partPath, 0, NULL, lpFilePart);
+   wchar_t *  fullPath = calloc (fullPathWSize + sizeof(prefix) + 1, sizeof(wchar_t));
+
+   wcscpy (fullPath, prefix);
+
+   int        prefixLen = sizeof(prefix) / sizeof(wchar_t);
+
+   /* Do not add a prefix to the null device.  */
+   if (stricmp (filename, "nul") == 0)
+    prefixLen = 1;
+
+   wchar_t *  fullPathOffset = fullPath + prefixLen - 1;
+
+   GetFullPathNameW (partPath, fullPathWSize, fullPathOffset, lpFilePart);
+   free (partPath);
+
+   /* It is non-standard for modes to exceed 16 characters.  */
+   wchar_t    modesW[16];
+
+   MultiByteToWideChar (cp, 0, modes, -1, modesW, sizeof(modesW));
+
+   FILE *     file = _wfopen (fullPath, modesW);
+   free (fullPath);
+
+   return close_on_exec (file);
+
+#elif defined (HAVE_FOPEN64)
   return close_on_exec (fopen64 (filename, modes));
+
 #else
   return close_on_exec (fopen (filename, modes));
 #endif
-#endif /* !VMS */
 }
 
 /*
@@ -167,14 +225,25 @@ DESCRIPTION
 .};
 
 .extern const struct bfd_iovec _bfd_memory_iovec;
-
+.
 */
 
 
-/* Return value is amount read.  */
+/*
+FUNCTION
+	bfd_read
+
+SYNOPSIS
+	bfd_size_type bfd_read (void *, bfd_size_type, bfd *)
+				ATTRIBUTE_WARN_UNUSED_RESULT;
+
+DESCRIPTION
+	Attempt to read SIZE bytes from ABFD's iostream to PTR.
+	Return the amount read.
+*/
 
 bfd_size_type
-bfd_bread (void *ptr, bfd_size_type size, bfd *abfd)
+bfd_read (void *ptr, bfd_size_type size, bfd *abfd)
 {
   file_ptr nread;
   bfd *element_bfd = abfd;
@@ -186,10 +255,13 @@ bfd_bread (void *ptr, bfd_size_type size
       offset += abfd->origin;
       abfd = abfd->my_archive;
     }
+  offset += abfd->origin;
 
-  /* If this is an archive element, don't read past the end of
+  /* If this is a non-thin archive element, don't read past the end of
      this element.  */
-  if (element_bfd->arelt_data != NULL)
+  if (element_bfd->arelt_data != NULL
+      && element_bfd->my_archive != NULL
+      && !bfd_is_thin_archive (element_bfd->my_archive))
     {
       bfd_size_type maxbytes = arelt_size (element_bfd);
 
@@ -208,6 +280,14 @@ bfd_bread (void *ptr, bfd_size_type size
       return -1;
     }
 
+  if (abfd->last_io == bfd_io_write)
+    {
+      abfd->last_io = bfd_io_force;
+      if (bfd_seek (abfd, 0, SEEK_CUR) != 0)
+	return -1;
+    }
+  abfd->last_io = bfd_io_read;
+
   nread = abfd->iovec->bread (abfd, ptr, size);
   if (nread != -1)
     abfd->where += nread;
@@ -215,8 +295,21 @@ bfd_bread (void *ptr, bfd_size_type size
   return nread;
 }
 
+/*
+FUNCTION
+	bfd_write
+
+SYNOPSIS
+	bfd_size_type bfd_write (const void *, bfd_size_type, bfd *)
+				ATTRIBUTE_WARN_UNUSED_RESULT;
+
+DESCRIPTION
+	Attempt to write SIZE bytes to ABFD's iostream from PTR.
+	Return the amount written.
+*/
+
 bfd_size_type
-bfd_bwrite (const void *ptr, bfd_size_type size, bfd *abfd)
+bfd_write (const void *ptr, bfd_size_type size, bfd *abfd)
 {
   file_ptr nwrote;
 
@@ -230,6 +323,14 @@ bfd_bwrite (const void *ptr, bfd_size_ty
       return -1;
     }
 
+  if (abfd->last_io == bfd_io_read)
+    {
+      abfd->last_io = bfd_io_force;
+      if (bfd_seek (abfd, 0, SEEK_CUR) != 0)
+	return -1;
+    }
+  abfd->last_io = bfd_io_write;
+
   nwrote = abfd->iovec->bwrite (abfd, ptr, size);
   if (nwrote != -1)
     abfd->where += nwrote;
@@ -243,6 +344,17 @@ bfd_bwrite (const void *ptr, bfd_size_ty
   return nwrote;
 }
 
+/*
+FUNCTION
+	bfd_tell
+
+SYNOPSIS
+	file_ptr bfd_tell (bfd *) ATTRIBUTE_WARN_UNUSED_RESULT;
+
+DESCRIPTION
+	Return ABFD's iostream file position.
+*/
+
 file_ptr
 bfd_tell (bfd *abfd)
 {
@@ -255,6 +367,7 @@ bfd_tell (bfd *abfd)
       offset += abfd->origin;
       abfd = abfd->my_archive;
     }
+  offset += abfd->origin;
 
   if (abfd->iovec == NULL)
     return 0;
@@ -264,6 +377,17 @@ bfd_tell (bfd *abfd)
   return ptr - offset;
 }
 
+/*
+FUNCTION
+	bfd_flush
+
+SYNOPSIS
+	int bfd_flush (bfd *);
+
+DESCRIPTION
+	Flush ABFD's iostream pending IO.
+*/
+
 int
 bfd_flush (bfd *abfd)
 {
@@ -277,8 +401,18 @@ bfd_flush (bfd *abfd)
   return abfd->iovec->bflush (abfd);
 }
 
-/* Returns 0 for success, negative value for failure (in which case
-   bfd_get_error can retrieve the error code).  */
+/*
+FUNCTION
+	bfd_stat
+
+SYNOPSIS
+	int bfd_stat (bfd *, struct stat *) ATTRIBUTE_WARN_UNUSED_RESULT;
+
+DESCRIPTION
+	Call fstat on ABFD's iostream.  Return 0 on success, and a
+	negative value on failure.
+*/
+
 int
 bfd_stat (bfd *abfd, struct stat *statbuf)
 {
@@ -300,8 +434,17 @@ bfd_stat (bfd *abfd, struct stat *statbu
   return result;
 }
 
-/* Returns 0 for success, nonzero for failure (in which case bfd_get_error
-   can retrieve the error code).  */
+/*
+FUNCTION
+	bfd_seek
+
+SYNOPSIS
+	int bfd_seek (bfd *, file_ptr, int) ATTRIBUTE_WARN_UNUSED_RESULT;
+
+DESCRIPTION
+	Call fseek on ABFD's iostream.  Return 0 on success, and a
+	negative value on failure.
+*/
 
 int
 bfd_seek (bfd *abfd, file_ptr position, int direction)
@@ -315,6 +458,7 @@ bfd_seek (bfd *abfd, file_ptr position,
       offset += abfd->origin;
       abfd = abfd->my_archive;
     }
+  offset += abfd->origin;
 
   if (abfd->iovec == NULL)
     {
@@ -330,10 +474,13 @@ bfd_seek (bfd *abfd, file_ptr position,
   if (direction != SEEK_CUR)
     position += offset;
 
-  if ((direction == SEEK_CUR && position == 0)
-      || (direction == SEEK_SET && (ufile_ptr) position == abfd->where))
+  if (((direction == SEEK_CUR && position == 0)
+       || (direction == SEEK_SET && (ufile_ptr) position == abfd->where))
+      && abfd->last_io != bfd_io_force)
     return 0;
 
+  abfd->last_io = bfd_io_seek;
+
   result = abfd->iovec->bseek (abfd, position, direction);
   if (result != 0)
     {
@@ -415,17 +562,32 @@ DESCRIPTION
 	of space for the 15 bazillon byte table it is about to read.
 	This function at least allows us to answer the question, "is the
 	size reasonable?".
+
+	A return value of zero indicates the file size is unknown.
 */
 
 ufile_ptr
 bfd_get_size (bfd *abfd)
 {
-  struct stat buf;
-
-  if (bfd_stat (abfd, &buf) != 0)
-    return 0;
-
-  return buf.st_size;
+  /* A size of 0 means we haven't yet called bfd_stat.  A size of 1
+     means we have a cached value of 0, ie. unknown.  */
+  if (abfd->size <= 1 || bfd_write_p (abfd))
+    {
+      struct stat buf;
+
+      if (abfd->size == 1 && !bfd_write_p (abfd))
+	return 0;
+
+      if (bfd_stat (abfd, &buf) != 0
+	  || buf.st_size == 0
+	  || buf.st_size - (ufile_ptr) buf.st_size != 0)
+	{
+	  abfd->size = 1;
+	  return 0;
+	}
+      abfd->size = buf.st_size;
+    }
+  return abfd->size;
 }
 
 /*
@@ -445,11 +607,30 @@ DESCRIPTION
 ufile_ptr
 bfd_get_file_size (bfd *abfd)
 {
+  ufile_ptr file_size, archive_size = (ufile_ptr) -1;
+  unsigned int compression_p2 = 0;
+
   if (abfd->my_archive != NULL
       && !bfd_is_thin_archive (abfd->my_archive))
-    return arelt_size (abfd);
+    {
+      struct areltdata *adata = (struct areltdata *) abfd->arelt_data;
+      if (adata != NULL)
+	{
+	  archive_size = adata->parsed_size;
+	  /* If the archive is compressed, assume an element won't
+	     expand more than eight times file size.  */
+	  if (adata->arch_header != NULL
+	      && memcmp (((struct ar_hdr *) adata->arch_header)->ar_fmag,
+			 "Z\012", 2) == 0)
+	    compression_p2 = 3;
+	  abfd = abfd->my_archive;
+	}
+    }
 
-  return bfd_get_size (abfd);
+  file_size = bfd_get_size (abfd) << compression_p2;
+  if (archive_size < file_size)
+    return archive_size;
+  return file_size;
 }
 
 /*
@@ -459,7 +640,8 @@ FUNCTION
 SYNOPSIS
 	void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
 			int prot, int flags, file_ptr offset,
-			void **map_addr, bfd_size_type *map_len);
+			void **map_addr, bfd_size_type *map_len)
+			ATTRIBUTE_WARN_UNUSED_RESULT;
 
 DESCRIPTION
 	Return mmap()ed region of the file, if possible and implemented.
@@ -479,6 +661,7 @@ bfd_mmap (bfd *abfd, void *addr, bfd_siz
       offset += abfd->origin;
       abfd = abfd->my_archive;
     }
+  offset += abfd->origin;
 
   if (abfd->iovec == NULL)
     {
@@ -606,8 +789,7 @@ memory_bclose (struct bfd *abfd)
 {
   struct bfd_in_memory *bim = (struct bfd_in_memory *) abfd->iostream;
 
-  if (bim->buffer != NULL)
-    free (bim->buffer);
+  free (bim->buffer);
   free (bim);
   abfd->iostream = NULL;
 
@@ -646,3 +828,47 @@ const struct bfd_iovec _bfd_memory_iovec
   &memory_bread, &memory_bwrite, &memory_btell, &memory_bseek,
   &memory_bclose, &memory_bflush, &memory_bstat, &memory_bmmap
 };
+
+/*
+FUNCTION
+	bfd_get_current_time
+
+SYNOPSIS
+	time_t bfd_get_current_time (time_t now);
+
+DESCRIPTION
+	Returns the current time.
+
+	If the environment variable SOURCE_DATE_EPOCH is defined
+	then this is parsed and its value is returned.  Otherwise
+	if the paramter NOW is non-zero, then that is returned.
+	Otherwise the result of the system call "time(NULL)" is
+	returned.
+*/
+
+time_t
+bfd_get_current_time (time_t now)
+{
+  char *source_date_epoch;
+  unsigned long long epoch;
+
+  /* FIXME: We could probably cache this lookup,
+     and the parsing of its value below.  */
+  source_date_epoch = getenv ("SOURCE_DATE_EPOCH");
+
+  if (source_date_epoch == NULL)
+    {
+      if (now)
+	return now;
+      return time (NULL);
+    }
+
+  epoch = strtoull (source_date_epoch, NULL, 0);
+
+  /* If epoch == 0 then something is wrong with SOURCE_DATE_EPOCH,
+     but we do not have an easy way to report it.  Since the presence
+     of the environment variable implies that the user wants
+     deterministic behaviour we just accept the 0 value.  */
+
+  return (time_t) epoch;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfd.m4 ./bfd/bfd.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfd.m4	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/bfd.m4	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 dnl This file was derived from acinclude.m4.
 dnl
-dnl   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+dnl   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 dnl
 dnl This file is free software; you can redistribute it and/or modify
 dnl it under the terms of the GNU General Public License as published by
@@ -17,15 +17,20 @@ dnl along with this program; see the fil
 dnl <http://www.gnu.org/licenses/>.
 dnl
 
+dnl Check for sys/procfs.h, enforcing structured /proc on Solaris.
+
+AC_DEFUN([BFD_SYS_PROCFS_H],
+[AC_DEFINE(_STRUCTURED_PROC, 1, [Use structured /proc on Solaris.])
+ AC_CHECK_HEADERS(sys/procfs.h)])
+
 dnl Check for existence of a type $1 in sys/procfs.h
 
 AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE],
-[AC_MSG_CHECKING([for $1 in sys/procfs.h])
+[AC_REQUIRE([BFD_SYS_PROCFS_H])
+ AC_MSG_CHECKING([for $1 in sys/procfs.h])
  AC_CACHE_VAL(bfd_cv_have_sys_procfs_type_$1,
    [AC_TRY_COMPILE([
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>],
       [$1 avar],
       bfd_cv_have_sys_procfs_type_$1=yes,
@@ -41,12 +46,11 @@ AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE],
 dnl Check for existence of member $2 in type $1 in sys/procfs.h
 
 AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE_MEMBER],
-[AC_MSG_CHECKING([for $1.$2 in sys/procfs.h])
+[AC_REQUIRE([BFD_SYS_PROCFS_H])
+ AC_MSG_CHECKING([for $1.$2 in sys/procfs.h])
  AC_CACHE_VAL(bfd_cv_have_sys_procfs_type_member_$1_$2,
    [AC_TRY_COMPILE([
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>],
       [$1 avar; void* aref = (void*) &avar.$2],
       bfd_cv_have_sys_procfs_type_member_$1_$2=yes,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfdwin.c ./bfd/bfdwin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bfdwin.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/bfdwin.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for memory-mapped windows into a BFD.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -47,15 +47,47 @@ static int debug_windows;
    though.  */
 
 /*
-INTERNAL_DEFINITION
-
-.struct _bfd_window_internal {
+INTERNAL
+.typedef struct _bfd_window_internal
+.{
 .  struct _bfd_window_internal *next;
 .  void *data;
 .  bfd_size_type size;
 .  int refcount : 31;		{* should be enough...  *}
 .  unsigned mapped : 1;		{* 1 = mmap, 0 = malloc *}
-.};
+.}
+.bfd_window_internal;
+.
+
+EXTERNAL
+.struct _bfd_window_internal;
+.
+.typedef struct _bfd_window
+.{
+.  {* What the user asked for.  *}
+.  void *data;
+.  bfd_size_type size;
+.  {* The actual window used by BFD.  Small user-requested read-only
+.     regions sharing a page may share a single window into the object
+.     file.  Read-write versions shouldn't until I've fixed things to
+.     keep track of which portions have been claimed by the
+.     application; don't want to give the same region back when the
+.     application wants two writable copies!  *}
+.  struct _bfd_window_internal *i;
+.}
+.bfd_window;
+.
+*/
+
+/*
+FUNCTION
+	bfd_init_window
+
+SYNOPSIS
+	void bfd_init_window (bfd_window *);
+
+DESCRIPTION
+	Initialise mmap window.
 */
 
 void
@@ -66,6 +98,17 @@ bfd_init_window (bfd_window *windowp)
   windowp->size = 0;
 }
 
+/*
+FUNCTION
+	bfd_free_window
+
+SYNOPSIS
+	void bfd_free_window (bfd_window *);
+
+DESCRIPTION
+	Finalise mmap window struct.
+*/
+
 void
 bfd_free_window (bfd_window *windowp)
 {
@@ -102,15 +145,26 @@ bfd_free_window (bfd_window *windowp)
   free (i);
 }
 
-static int ok_to_map = 1;
+/*
+FUNCTION
+	bfd_get_file_window
+
+SYNOPSIS
+	bool bfd_get_file_window
+	  (bfd *, file_ptr, bfd_size_type, bfd_window *, bool {*writable*});
+
+DESCRIPTION
+	mmap from a bfd's iostream.
+*/
 
-bfd_boolean
+bool
 bfd_get_file_window (bfd *abfd,
 		     file_ptr offset,
 		     bfd_size_type size,
 		     bfd_window *windowp,
-		     bfd_boolean writable)
+		     bool writable)
 {
+  static int ok_to_map = 1;
   static size_t pagesize;
   bfd_window_internal *i = windowp->i;
   bfd_size_type size_to_alloc = size;
@@ -131,7 +185,7 @@ bfd_get_file_window (bfd *abfd,
     {
       i = bfd_zmalloc (sizeof (bfd_window_internal));
       if (i == NULL)
-	return FALSE;
+	return false;
       i->data = NULL;
     }
 #ifdef HAVE_MMAP
@@ -150,6 +204,7 @@ bfd_get_file_window (bfd *abfd,
 	  offset += abfd->origin;
 	  abfd = abfd->my_archive;
 	}
+      offset += abfd->origin;
 
       /* Seek into the file, to ensure it is open if cacheable.  */
       if (abfd->iostream == NULL
@@ -198,7 +253,7 @@ bfd_get_file_window (bfd *abfd,
       i->mapped = 1;
       i->refcount = 1;
       windowp->i = i;
-      return TRUE;
+      return true;
     }
   else if (debug_windows)
     {
@@ -230,14 +285,14 @@ bfd_get_file_window (bfd *abfd,
       if (size_to_alloc == 0)
 	{
 	  windowp->i = i;
-	  return TRUE;
+	  return true;
 	}
       goto free_and_fail;
     }
   i->refcount = 1;
   if (bfd_seek (abfd, offset, SEEK_SET) != 0)
     goto free_and_fail;
-  i->size = bfd_bread (i->data, size, abfd);
+  i->size = bfd_read (i->data, size, abfd);
   if (i->size != size)
     goto free_and_fail;
   i->mapped = 0;
@@ -253,12 +308,12 @@ bfd_get_file_window (bfd *abfd,
   windowp->data = i->data;
   windowp->size = i->size;
   windowp->i = i;
-  return TRUE;
+  return true;
 
  free_and_fail:
   /* We have a bfd_window_internal, but an error occurred.  Free it. */
   free (i);
-  return FALSE;
+  return false;
 }
 
 #endif /* USE_MMAP */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/binary.c ./bfd/binary.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/binary.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/binary.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for binary objects.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -19,10 +19,10 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-/* This is a BFD backend which may be used to write binary objects.
-   It may only be used for output, not input.  The intention is that
-   this may be used as an output format for objcopy in order to
-   generate raw binary data.
+/* This is a BFD backend which may be used to read or write binary
+   objects.  Historically, it was used as an output format for objcopy
+   in order to generate raw binary data, but is now used for other
+   purposes as well.
 
    This is very simple.  The only complication is that the real data
    will start at some address X, and in some cases we will not want to
@@ -43,17 +43,17 @@
 
 /* Create a binary object.  Invoked via bfd_set_format.  */
 
-static bfd_boolean
+static bool
 binary_mkobject (bfd *abfd ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* Any file may be considered to be a binary file, provided the target
    was not defaulted.  That is, it must be explicitly specified as
    being binary.  */
 
-static const bfd_target *
+static bfd_cleanup
 binary_object_p (bfd *abfd)
 {
   struct stat statbuf;
@@ -86,7 +86,7 @@ binary_object_p (bfd *abfd)
 
   abfd->tdata.any = (void *) sec;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 #define binary_close_and_cleanup     _bfd_generic_close_and_cleanup
@@ -95,17 +95,17 @@ binary_object_p (bfd *abfd)
 
 /* Get contents of the only section.  */
 
-static bfd_boolean
+static bool
 binary_get_section_contents (bfd *abfd,
-			     asection *section ATTRIBUTE_UNUSED,
+			     asection *section,
 			     void * location,
 			     file_ptr offset,
 			     bfd_size_type count)
 {
-  if (bfd_seek (abfd, offset, SEEK_SET) != 0
-      || bfd_bread (location, count, abfd) != count)
-    return FALSE;
-  return TRUE;
+  if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
+      || bfd_read (location, count, abfd) != count)
+    return false;
+  return true;
 }
 
 /* Return the amount of memory needed to read the symbol table.  */
@@ -151,7 +151,7 @@ binary_canonicalize_symtab (bfd *abfd, a
   asection *sec = (asection *) abfd->tdata.any;
   asymbol *syms;
   unsigned int i;
-  bfd_size_type amt = BIN_SYMS * sizeof (asymbol);
+  size_t amt = BIN_SYMS * sizeof (asymbol);
 
   syms = (asymbol *) bfd_alloc (abfd, amt);
   if (syms == NULL)
@@ -206,6 +206,7 @@ binary_get_symbol_info (bfd *ignore_abfd
 #define binary_bfd_is_local_label_name	    bfd_generic_is_local_label_name
 #define binary_get_lineno		   _bfd_nosymbols_get_lineno
 #define binary_find_nearest_line	   _bfd_nosymbols_find_nearest_line
+#define binary_find_nearest_line_with_alt  _bfd_nosymbols_find_nearest_line_with_alt
 #define binary_find_line		   _bfd_nosymbols_find_line
 #define binary_find_inliner_info	   _bfd_nosymbols_find_inliner_info
 #define binary_bfd_make_debug_symbol	   _bfd_nosymbols_bfd_make_debug_symbol
@@ -218,7 +219,7 @@ binary_get_symbol_info (bfd *ignore_abfd
 
 /* Write section contents of a binary file.  */
 
-static bfd_boolean
+static bool
 binary_set_section_contents (bfd *abfd,
 			     asection *sec,
 			     const void * data,
@@ -226,18 +227,18 @@ binary_set_section_contents (bfd *abfd,
 			     bfd_size_type size)
 {
   if (size == 0)
-    return TRUE;
+    return true;
 
   if (! abfd->output_has_begun)
     {
-      bfd_boolean found_low;
+      bool found_low;
       bfd_vma low;
       asection *s;
 
       /* The lowest section LMA sets the virtual address of the start
 	 of the file.  We use this to set the file position of all the
 	 sections.  */
-      found_low = FALSE;
+      found_low = false;
       low = 0;
       for (s = abfd->sections; s != NULL; s = s->next)
 	if (((s->flags
@@ -247,7 +248,7 @@ binary_set_section_contents (bfd *abfd,
 	    && (! found_low || s->lma < low))
 	  {
 	    low = s->lma;
-	    found_low = TRUE;
+	    found_low = true;
 	  }
 
       for (s = abfd->sections; s != NULL; s = s->next)
@@ -278,16 +279,16 @@ binary_set_section_contents (bfd *abfd,
 	       s);
 	}
 
-      abfd->output_has_begun = TRUE;
+      abfd->output_has_begun = true;
     }
 
   /* We don't want to output anything for a section that is neither
      loaded nor allocated.  The contents of such a section are not
      meaningful in the binary format.  */
   if ((sec->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
-    return TRUE;
+    return true;
   if ((sec->flags & SEC_NEVER_LOAD) != 0)
-    return TRUE;
+    return true;
 
   return _bfd_generic_set_section_contents (abfd, sec, data, offset, size);
 }
@@ -335,6 +336,7 @@ const bfd_target binary_vec =
   ' ',				/* ar_pad_char */
   16,				/* ar_max_namelen */
   255,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bpf-reloc.def ./bfd/bpf-reloc.def
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/bpf-reloc.def	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/bpf-reloc.def	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,109 @@
+  /* This reloc does nothing.  */
+  BPF_HOWTO (R_BPF_NONE,		/* type */
+	 0,			/* rightshift */
+	 0,			/* size */
+	 0,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bpf_elf_generic_reloc, /* special_function */
+	 "R_BPF_NONE",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0,			/* dst_mask */
+	 false)		/* pcrel_offset */
+
+  /* 64-immediate in LDDW instruction.  */
+  BPF_HOWTO (R_BPF_64_64,		/* type */
+	 0,			/* rightshift */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
+	 32,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bpf_elf_generic_reloc, /* special_function */
+	 "R_BPF_64_64",	/* name */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 true)			/* pcrel_offset */
+
+  /* 32-bit data.  */
+  BPF_HOWTO (R_BPF_64_ABS32,		/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bpf_elf_generic_reloc, /* special_function */
+	 "R_BPF_64_ABS32",	/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 true)			/* pcrel_offset */
+
+  /* 64-bit data.  */
+  BPF_HOWTO (R_BPF_64_ABS64,		/* type */
+	 0,			/* rightshift */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bpf_elf_generic_reloc, /* special_function */
+	 "R_BPF_64_ABS64",	/* name */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 true)			/* pcrel_offset */
+
+  /* 32-bit PC-relative address in call instructions.  */
+  BPF_HOWTO (R_BPF_64_32,      /* type */
+        0,                     /* rightshift */
+        4,                     /* size */
+        32,                    /* bitsize */
+        true,                  /* pc_relative */
+        32,                    /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        bpf_elf_generic_reloc, /* special_function */
+        "R_BPF_64_32",         /* name */
+        true,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        true)                  /* pcrel_offset */
+
+  /* 16-bit PC-relative address in load instructions.  */
+  BPF_HOWTO (R_BPF_GNU_64_16,      /* type */
+        0,                     /* rightshift */
+        2,                     /* size */
+        16,                    /* bitsize */
+        true,                  /* pc_relative */
+        16,                    /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        bpf_elf_generic_reloc, /* special_function */
+        "R_BPF_GNU_64_16",     /* name */
+        true,                  /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        true)                  /* pcrel_offset */
+
+  /* R_BPF_64_NODYLD32 is not used by GNU tools - but it is generated by LLVM.
+     We provide an entry here so that tools like strip can safely handle BPF
+     binaries generated by other tools.
+     R_BPF_64_NODYLD32 should be fixed at linker like a R_BPF_64_ABS32.
+     The difference to ABS32 is that LLVM execution engine does not resolve
+     R_BPF_64_NODYLD32 relocations.  */
+  BPF_HOWTO (R_BPF_64_NODYLD32,	/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bpf_elf_generic_reloc, /* special_function */
+	 "R_BPF_64_NODYLD32",	/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 true)			/* pcrel_offset */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cache.c ./bfd/cache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cache.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/cache.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD library -- caching of file descriptors.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Hacked by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
 
@@ -49,6 +49,8 @@ SUBSECTION
 #include <sys/mman.h>
 #endif
 
+static FILE *_bfd_open_file_unlocked (bfd *abfd);
+
 /* In some cases we can optimize cache operation when reopening files.
    For instance, a flush is entirely unnecessary if the file is already
    closed, so a flush would use CACHE_NO_OPEN.  Similarly, a seek using
@@ -67,11 +69,11 @@ enum cache_flag {
 /* The maximum number of files which the cache will keep open at
    one time.  When needed call bfd_cache_max_open to initialize.  */
 
-static int max_open_files = 0;
+static unsigned max_open_files = 0;
 
 /* Set max_open_files, if not already set, to 12.5% of the allowed open
    file descriptors, but at least 10, and return the value.  */
-static int
+static unsigned
 bfd_cache_max_open (void)
 {
   if (max_open_files == 0)
@@ -115,7 +117,7 @@ bfd_cache_max_open (void)
 
 /* The number of BFD files we have open.  */
 
-static int open_files;
+static unsigned open_files;
 
 /* Zero, or a pointer to the topmost BFD on the chain.  This is
    used by the <<bfd_cache_lookup>> macro in @file{libbfd.h} to
@@ -160,23 +162,25 @@ snip (bfd *abfd)
 
 /* Close a BFD and remove it from the cache.  */
 
-static bfd_boolean
+static bool
 bfd_cache_delete (bfd *abfd)
 {
-  bfd_boolean ret;
+  bool ret;
 
   if (fclose ((FILE *) abfd->iostream) == 0)
-    ret = TRUE;
+    ret = true;
   else
     {
-      ret = FALSE;
+      ret = false;
       bfd_set_error (bfd_error_system_call);
     }
 
   snip (abfd);
 
   abfd->iostream = NULL;
+  BFD_ASSERT (open_files > 0);
   --open_files;
+  abfd->flags |= BFD_CLOSED_BY_CACHE;
 
   return ret;
 }
@@ -184,7 +188,7 @@ bfd_cache_delete (bfd *abfd)
 /* We need to open a new file, and the cache is full.  Find the least
    recently used cacheable BFD and close it.  */
 
-static bfd_boolean
+static bool
 close_one (void)
 {
   register bfd *to_kill;
@@ -208,7 +212,7 @@ close_one (void)
   if (to_kill == NULL)
     {
       /* There are no open cacheable BFD's.  */
-      return TRUE;
+      return true;
     }
 
   to_kill->where = _bfd_real_ftell ((FILE *) to_kill->iostream);
@@ -257,7 +261,7 @@ bfd_cache_lookup_worker (bfd *abfd, enum
   if (flag & CACHE_NO_OPEN)
     return NULL;
 
-  if (bfd_open_file (abfd) == NULL)
+  if (_bfd_open_file_unlocked (abfd) == NULL)
     ;
   else if (!(flag & CACHE_NO_SEEK)
 	   && _bfd_real_fseek ((FILE *) abfd->iostream,
@@ -268,7 +272,7 @@ bfd_cache_lookup_worker (bfd *abfd, enum
     return (FILE *) abfd->iostream;
 
   /* xgettext:c-format */
-  _bfd_error_handler (_("reopening %pB: %s\n"),
+  _bfd_error_handler (_("reopening %pB: %s"),
 		      abfd, bfd_errmsg (bfd_get_error ()));
   return NULL;
 }
@@ -276,19 +280,36 @@ bfd_cache_lookup_worker (bfd *abfd, enum
 static file_ptr
 cache_btell (struct bfd *abfd)
 {
+  if (!bfd_lock ())
+    return -1;
   FILE *f = bfd_cache_lookup (abfd, CACHE_NO_OPEN);
   if (f == NULL)
-    return abfd->where;
-  return _bfd_real_ftell (f);
+    {
+      if (!bfd_unlock ())
+	return -1;
+      return abfd->where;
+    }
+  file_ptr result = _bfd_real_ftell (f);
+  if (!bfd_unlock ())
+    return -1;
+  return result;
 }
 
 static int
 cache_bseek (struct bfd *abfd, file_ptr offset, int whence)
 {
+  if (!bfd_lock ())
+    return -1;
   FILE *f = bfd_cache_lookup (abfd, whence != SEEK_CUR ? CACHE_NO_SEEK : CACHE_NORMAL);
   if (f == NULL)
+    {
+      bfd_unlock ();
+      return -1;
+    }
+  int result = _bfd_real_fseek (f, offset, whence);
+  if (!bfd_unlock ())
     return -1;
-  return _bfd_real_fseek (f, offset, whence);
+  return result;
 }
 
 /* Note that archive entries don't have streams; they share their parent's.
@@ -336,12 +357,17 @@ cache_bread_1 (FILE *f, void *buf, file_
 static file_ptr
 cache_bread (struct bfd *abfd, void *buf, file_ptr nbytes)
 {
+  if (!bfd_lock ())
+    return -1;
   file_ptr nread = 0;
   FILE *f;
 
   f = bfd_cache_lookup (abfd, CACHE_NORMAL);
   if (f == NULL)
-    return -1;
+    {
+      bfd_unlock ();
+      return -1;
+    }
 
   /* Some filesystems are unable to handle reads that are too large
      (for instance, NetApp shares with oplocks turned off).  To avoid
@@ -372,57 +398,84 @@ cache_bread (struct bfd *abfd, void *buf
 	break;
     }
 
+  if (!bfd_unlock ())
+    return -1;
   return nread;
 }
 
 static file_ptr
 cache_bwrite (struct bfd *abfd, const void *from, file_ptr nbytes)
 {
+  if (!bfd_lock ())
+    return -1;
   file_ptr nwrite;
   FILE *f = bfd_cache_lookup (abfd, CACHE_NORMAL);
 
   if (f == NULL)
-    return 0;
+    {
+      if (!bfd_unlock ())
+	return -1;
+      return 0;
+    }
   nwrite = fwrite (from, 1, nbytes, f);
   if (nwrite < nbytes && ferror (f))
     {
       bfd_set_error (bfd_error_system_call);
+      bfd_unlock ();
       return -1;
     }
+  if (!bfd_unlock ())
+    return -1;
   return nwrite;
 }
 
 static int
 cache_bclose (struct bfd *abfd)
 {
+  /* No locking needed here, it's handled by the callee.  */
   return bfd_cache_close (abfd) - 1;
 }
 
 static int
 cache_bflush (struct bfd *abfd)
 {
+  if (!bfd_lock ())
+    return -1;
   int sts;
   FILE *f = bfd_cache_lookup (abfd, CACHE_NO_OPEN);
 
   if (f == NULL)
-    return 0;
+    {
+      if (!bfd_unlock ())
+	return -1;
+      return 0;
+    }
   sts = fflush (f);
   if (sts < 0)
     bfd_set_error (bfd_error_system_call);
+  if (!bfd_unlock ())
+    return -1;
   return sts;
 }
 
 static int
 cache_bstat (struct bfd *abfd, struct stat *sb)
 {
+  if (!bfd_lock ())
+    return -1;
   int sts;
   FILE *f = bfd_cache_lookup (abfd, CACHE_NO_SEEK_ERROR);
 
   if (f == NULL)
-    return -1;
+    {
+      bfd_unlock ();
+      return -1;
+    }
   sts = fstat (fileno (f), sb);
   if (sts < 0)
     bfd_set_error (bfd_error_system_call);
+  if (!bfd_unlock ())
+    return -1;
   return sts;
 }
 
@@ -438,6 +491,8 @@ cache_bmmap (struct bfd *abfd ATTRIBUTE_
 {
   void *ret = (void *) -1;
 
+  if (!bfd_lock ())
+    return ret;
   if ((abfd->flags & BFD_IN_MEMORY) != 0)
     abort ();
 #ifdef HAVE_MMAP
@@ -450,7 +505,10 @@ cache_bmmap (struct bfd *abfd ATTRIBUTE_
 
       f = bfd_cache_lookup (abfd, CACHE_NO_SEEK_ERROR);
       if (f == NULL)
-	return ret;
+	{
+	  bfd_unlock ();
+	  return ret;
+	}
 
       if (pagesize_m1 == 0)
 	pagesize_m1 = getpagesize () - 1;
@@ -471,6 +529,8 @@ cache_bmmap (struct bfd *abfd ATTRIBUTE_
     }
 #endif
 
+  if (!bfd_unlock ())
+    return (void *) -1;
   return ret;
 }
 
@@ -480,59 +540,84 @@ static const struct bfd_iovec cache_iove
   &cache_bclose, &cache_bflush, &cache_bstat, &cache_bmmap
 };
 
+static bool
+_bfd_cache_init_unlocked (bfd *abfd)
+{
+  BFD_ASSERT (abfd->iostream != NULL);
+  if (open_files >= bfd_cache_max_open ())
+    {
+      if (! close_one ())
+	return false;
+    }
+  abfd->iovec = &cache_iovec;
+  insert (abfd);
+  abfd->flags &= ~BFD_CLOSED_BY_CACHE;
+  ++open_files;
+  return true;
+}
+
 /*
 INTERNAL_FUNCTION
 	bfd_cache_init
 
 SYNOPSIS
-	bfd_boolean bfd_cache_init (bfd *abfd);
+	bool bfd_cache_init (bfd *abfd);
 
 DESCRIPTION
 	Add a newly opened BFD to the cache.
 */
 
-bfd_boolean
+bool
 bfd_cache_init (bfd *abfd)
 {
-  BFD_ASSERT (abfd->iostream != NULL);
-  if (open_files >= bfd_cache_max_open ())
-    {
-      if (! close_one ())
-	return FALSE;
-    }
-  abfd->iovec = &cache_iovec;
-  insert (abfd);
-  ++open_files;
-  return TRUE;
+  if (!bfd_lock ())
+    return false;
+  bool result = _bfd_cache_init_unlocked (abfd);
+  if (!bfd_unlock ())
+    return false;
+  return result;
+}
+
+static bool
+_bfd_cache_close_unlocked (bfd *abfd)
+{
+  /* Don't remove this test.  bfd_reinit depends on it.  */
+  if (abfd->iovec != &cache_iovec)
+    return true;
+
+  if (abfd->iostream == NULL)
+    /* Previously closed.  */
+    return true;
+
+  /* Note: no locking needed in this function, as it is handled by
+     bfd_cache_delete.  */
+  return bfd_cache_delete (abfd);
 }
 
 /*
-INTERNAL_FUNCTION
+FUNCTION
 	bfd_cache_close
 
 SYNOPSIS
-	bfd_boolean bfd_cache_close (bfd *abfd);
+	bool bfd_cache_close (bfd *abfd);
 
 DESCRIPTION
 	Remove the BFD @var{abfd} from the cache. If the attached file is open,
 	then close it too.
 
-RETURNS
 	<<FALSE>> is returned if closing the file fails, <<TRUE>> is
 	returned if all is well.
 */
 
-bfd_boolean
+bool
 bfd_cache_close (bfd *abfd)
 {
-  if (abfd->iovec != &cache_iovec)
-    return TRUE;
-
-  if (abfd->iostream == NULL)
-    /* Previously closed.  */
-    return TRUE;
-
-  return bfd_cache_delete (abfd);
+  if (!bfd_lock ())
+    return false;
+  bool result = _bfd_cache_close_unlocked (abfd);
+  if (!bfd_unlock ())
+    return false;
+  return result;
 }
 
 /*
@@ -540,47 +625,63 @@ FUNCTION
 	bfd_cache_close_all
 
 SYNOPSIS
-	bfd_boolean bfd_cache_close_all (void);
+	bool bfd_cache_close_all (void);
 
 DESCRIPTION
 	Remove all BFDs from the cache. If the attached file is open,
-	then close it too.
+	then close it too.  Note - despite its name this function will
+	close a BFD even if it is not marked as being cacheable, ie
+	even if bfd_get_cacheable() returns false.
 
-RETURNS
 	<<FALSE>> is returned if closing one of the file fails, <<TRUE>> is
 	returned if all is well.
 */
 
-bfd_boolean
+bool
 bfd_cache_close_all (void)
 {
-  bfd_boolean ret = TRUE;
+  bool ret = true;
 
+  if (!bfd_lock ())
+    return false;
   while (bfd_last_cache != NULL)
-    ret &= bfd_cache_close (bfd_last_cache);
+    {
+      bfd *prev_bfd_last_cache = bfd_last_cache;
 
+      ret &= _bfd_cache_close_unlocked (bfd_last_cache);
+
+      /* Stop a potential infinite loop should bfd_cache_close()
+	 not update bfd_last_cache.  */
+      if (bfd_last_cache == prev_bfd_last_cache)
+	break;
+    }
+
+  if (!bfd_unlock ())
+    return false;
   return ret;
 }
 
 /*
-INTERNAL_FUNCTION
-	bfd_open_file
+FUNCTION
+	bfd_cache_size
 
 SYNOPSIS
-	FILE* bfd_open_file (bfd *abfd);
+	unsigned bfd_cache_size (void);
 
 DESCRIPTION
-	Call the OS to open a file for @var{abfd}.  Return the <<FILE *>>
-	(possibly <<NULL>>) that results from this operation.  Set up the
-	BFD so that future accesses know the file is open. If the <<FILE *>>
-	returned is <<NULL>>, then it won't have been put in the
-	cache, so it won't have to be removed from it.
+	Return the number of open files in the cache.
 */
 
-FILE *
-bfd_open_file (bfd *abfd)
+unsigned
+bfd_cache_size (void)
 {
-  abfd->cacheable = TRUE;	/* Allow it to be closed later.  */
+  return open_files;
+}
+
+static FILE *
+_bfd_open_file_unlocked (bfd *abfd)
+{
+  abfd->cacheable = true;	/* Allow it to be closed later.  */
 
   if (open_files >= bfd_cache_max_open ())
     {
@@ -592,15 +693,17 @@ bfd_open_file (bfd *abfd)
     {
     case read_direction:
     case no_direction:
-      abfd->iostream = _bfd_real_fopen (abfd->filename, FOPEN_RB);
+      abfd->iostream = _bfd_real_fopen (bfd_get_filename (abfd), FOPEN_RB);
       break;
     case both_direction:
     case write_direction:
       if (abfd->opened_once)
 	{
-	  abfd->iostream = _bfd_real_fopen (abfd->filename, FOPEN_RUB);
+	  abfd->iostream = _bfd_real_fopen (bfd_get_filename (abfd),
+					    FOPEN_RUB);
 	  if (abfd->iostream == NULL)
-	    abfd->iostream = _bfd_real_fopen (abfd->filename, FOPEN_WUB);
+	    abfd->iostream = _bfd_real_fopen (bfd_get_filename (abfd),
+					      FOPEN_WUB);
 	}
       else
 	{
@@ -627,11 +730,12 @@ bfd_open_file (bfd *abfd)
 	     the --info option.  */
 	  struct stat s;
 
-	  if (stat (abfd->filename, &s) == 0 && s.st_size != 0)
-	    unlink_if_ordinary (abfd->filename);
+	  if (stat (bfd_get_filename (abfd), &s) == 0 && s.st_size != 0)
+	    unlink_if_ordinary (bfd_get_filename (abfd));
 #endif
-	  abfd->iostream = _bfd_real_fopen (abfd->filename, FOPEN_WUB);
-	  abfd->opened_once = TRUE;
+	  abfd->iostream = _bfd_real_fopen (bfd_get_filename (abfd),
+					    FOPEN_WUB);
+	  abfd->opened_once = true;
 	}
       break;
     }
@@ -640,9 +744,35 @@ bfd_open_file (bfd *abfd)
     bfd_set_error (bfd_error_system_call);
   else
     {
-      if (! bfd_cache_init (abfd))
+      if (! _bfd_cache_init_unlocked (abfd))
 	return NULL;
     }
 
   return (FILE *) abfd->iostream;
 }
+
+/*
+INTERNAL_FUNCTION
+	bfd_open_file
+
+SYNOPSIS
+	FILE* bfd_open_file (bfd *abfd);
+
+DESCRIPTION
+	Call the OS to open a file for @var{abfd}.  Return the <<FILE *>>
+	(possibly <<NULL>>) that results from this operation.  Set up the
+	BFD so that future accesses know the file is open. If the <<FILE *>>
+	returned is <<NULL>>, then it won't have been put in the
+	cache, so it won't have to be removed from it.
+*/
+
+FILE *
+bfd_open_file (bfd *abfd)
+{
+  if (!bfd_lock ())
+    return NULL;
+  FILE *result = _bfd_open_file_unlocked (abfd);
+  if (!bfd_unlock ())
+    return NULL;
+  return result;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cf-i386lynx.c ./bfd/cf-i386lynx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cf-i386lynx.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/cf-i386lynx.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel 386 COFF LynxOS files.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog ./bfd/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/ChangeLog	2024-02-01 01:47:13.000000000 +0000
@@ -1,2980 +1,2966 @@
-2019-12-11  Alan Modra  <amodra@gmail.com>
+2024-01-15  Nick Clifton  <nickc@redhat.com>
 
-	* xtensa-modules.c (Field_* functions): Don't mask using shifts.
-	(Operand_soffsetx4_decode, Operand_simm4_decode),
-	(Operand_simm8_decode, Operand_simm8x256_decode),
-	(Operand_simm12b_decode, Operand_label8_decode),
-	(Operand_label12_decode, Operand_soffset_decode),
-	(Operand_xt_wbr15_label_decode, Operand_xt_wbr18_label_decode): Don't
-	sign extend using shifts.
-	(Operand_immrx4_decode, Operand_uimm16x4_decode): Avoid UB in
-	constant.
-
-2019-12-11  Alan Modra  <amodra@gmail.com>
-
-	* cpu-ia64-opc.c (ext_imms_scaled): Avoid undefined left shift
-	of negative values by using unsigned vars.
-
-2019-12-07  Alan Modra  <amodra@gmail.com>
-
-	PR 25236
-	* elflink.c (_bfd_elf_link_assign_sym_version): Assign versions
-	for ELF_COMMON_DEF_P symbols.
-	(elf_link_output_extsym, _bfd_elf_add_default_symbol): Adjust to
-	suit.
-
-2019-12-05  Sandra Loosemore  <sandra@codesourcery.com>
-
-	Only give FDE encoding warnings if --eh-frame-hdr was specified.
-
-	* elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Make
-	FDE encoding warning conditional.
-
-2019-12-05  Nick Clifton  <nickc@redhat.com>
-
-	PR 25029
-	* peXXigen.c (_bfd_XXi_swap_aouthdr_out): Ignore empty sections
-	when computing the sizes stored in the headers.
-
-2019-12-03  Alan Modra  <amodra@gmail.com>
-
-	PR 25230
-	* dwarf2.c (struct dwarf2_debug_file): Add line_table and
-	abbrev_offsets.
-	(struct abbrev_offset_entry): New.
-	(hash_abbrev, eq_abbrev, del_abbrev): New functions.
-	(read_abbrevs): Check whether we have already read abbrevs at
-	given offset, and add new offset/abbrev to hash table.
-	(decode_line_info): Keep line table at offset zero in file struct.
-	Return this for a cu reusing the same dir/file list.
-	(find_abstract_instance): Find cu for DW_FORM_GNU_ref_alt.
-	(_bfd_dwarf2_slurp_debug_info): Create offset/abbrev hash tables.
-	(_bfd_dwarf2_cleanup_debug_info): Adjust deletion of lines and
-	abbrevs.
-
-2019-12-03  Alan Modra  <amodra@gmail.com>
-
-	PR 25230
-	* dwarf2.c (struct dwarf2_debug_file): New struct.
-	(struct dwarf2_debug): Delete fields now in dwarf2_debug_file.
-	Add f, alt fields.
-	(struct comp_unit): Add file field.
-	(read_indirect_string, read_indirect_line_string): Adjust to suit.
-	(read_alt_indirect_string, read_alt_indirect_ref): Likewise.
-	(read_debug_ranges, find_abstract_instance, read_rangelist): Likewise.
-	(_bfd_dwarf2_stash_syms, place_sections): Likewise.
-	(stash_maybe_update_info_hash_tablse): Likewise.
-	(stash_verify_info_hash_table): Likewise.
-	(_bfd_dwarf2_slurp_debug_info): Likewise.
-	(_bfd_dwarf2_find_symbol_bias): Likewise.
-	(_bfd_dwarf2_find_nearest_line): Likewise.
-	(_bfd_dwarf2_cleanup_debug_info): Likewise.
-	(read_abbrevs): Add file param and adjust.  Update calls.
-	(stash_comp_unit): Likewise.
-	(decode_line_info): Delete stash param and adjust.  Update calls.
-	(comp_unit_find_nearest_line): Likewise.
-	(comp_unit_maybe_decode_line_info): Likewise.
-	(comp_unit_find_line): Likewise.
-	(parse_comp_unit): Add file and info_ptr param and adjust.  Update
-	calls.
-
-2019-12-03  Alan Modra  <amodra@gmail.com>
-
-	* dwarf2.c (read_indirect_string): Don't duplicate offset check
-	done in read_section.
-	(read_indirect_line_string): Likewise.
-	(read_alt_indirect_string): Likewise.
-	(read_alt_indirect_ref): Likewise.
-	(read_abbrevs): Likewise.  Free memory on all failure paths.
-	Use correct unsigned type for pointer difference comparison.
-
-2019-12-03  Alan Modra  <amodra@gmail.com>
-
-	* dwarf2.c (struct dwarf2_debug): Update comments.  Remove sec
-	and sec_info_ptr.
-	(_bfd_dwarf2_slurp_debug_info): Don't set sec or sec_info_ptr.
-	(stash_comp_unit): Likewise.
-	(read_alt_indirect_ref): Return NULL not FALSE.
-
-2019-12-03  Alan Modra  <amodra@gmail.com>
-
-	* dwarf2.c (_bfd_dwarf2_find_nearest_line): Correct function comment.
-
-2019-11-27  Alan Modra  <amodra@gmail.com>
-
-	PR 23652
-	* dwarf2.c (_bfd_dwarf2_stash_syms): Break out of loop on finding
-	matching section.
-	(_bfd_dwarf2_find_nearest_line): Return an int, with value 2 when
-	returning info from the symbol table.  Do the _bfd_elf_find_function
-	search also when !found.  Call _bfd_dwarf2_stash_syms regardless of
-	symbols.
-	* elf64-alpha.c (elf64_alpha_find_nearest_line): Accept dwarf2
-	result of 1 only.
-	* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Likewise.
-	* libbfd-in.h (_bfd_dwarf2_find_nearest_line): Update prototype.
-	* libbfd.h: Regenerate.
+	* 2.42 branch point.
 
-2019-11-27  Alan Modra  <amodra@gmail.com>
+2023-12-05  Nick Clifton  <nickc@redhat.com>
 
-	PR 23652
-	* dwarf2.c (_bfd_dwarf2_stash_syms): New function.
-	(_bfd_dwarf2_find_nearest_line): Use it here, passing syms to
-	_bfd_elf_find_function.  Call _bfd_elf_find_function in cases
-	where _bfd_elf_find_nearest_line would do so.
-	* elf.c (_bfd_elf_find_nearest_line): Omit _bfd_elf_find_function
-	for dwarf2.
-	* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Similarly.  Tidy.
-	* elf32-arm.c (elf32_arm_maybe_function_sym): New function.
-	(elf_backend_maybe_function_sym): Define.
-	(arm_elf_find_function, elf32_arm_find_nearest_line): Delete.
-	(bfd_elf32_find_nearest_line): Don't define.
-	* elfnn-aarch64.c (elfNN_aarch64_maybe_function_sym): New function.
-	(elf_backend_maybe_function_sym): Define.
-	(aarch64_elf_find_function, elfNN_aarch64_find_nearest_line): Delete.
-	(bfd_elfNN_find_nearest_line): Don't define.
+	PR 31106
+	* elfcode.h (elf_write_relocs): Do not convert a relocation
+	against a zero-value absolute symbol into a relocation without a
+	symbol if the symbol is being used for a complex relocation.
 
-2019-11-27  Alan Modra  <amodra@gmail.com>
+2023-11-21  Nick Clifton  <nickc@redhat.com>
 
-	* elf32-sh.c (sh_reloc): Use a bfd_vma insn.
-	(sh_reloc <R_SH_IND12W>): Divide calculated relocation value
-	by two before applying to insn.  Correct overflow test.
-	* coff-sh.c (sh_reloc): Likewise.
-
-2019-11-26  Nick Clifton  <nickc@redhat.com>
-
-	* elf32-sh.c (sh_elf_reloc): Use a signed_vma when checking for a
-	negative relocated value.
-	* coff-sh.c (sh_reloc): Likewise.
-
-2019-11-25  Alan Modra  <amodra@gmail.com>
-
-	* archures.c (bfd_octets_per_byte): Tail call
-	bfd_arch_mach_octets_per_byte.
-	* coff-arm.c (OCTETS_PER_BYTE): Define.
-	(coff_arm_reloc): Introduce new "octets" temp.  Use OCTETS_PER_BYTE
-	with section.  Correct "addr".  Remove ATTRIBUTE_UNUSED.
-	* coff-i386.c (coff_i386_reloc): Similarly.
-	* coff-mips.c (mips_reflo_reloc): Similarly.
-	* coff-x86_64.c (coff_amd64_reloc): Similarly.
-	* elf32-msp430.c (OCTETS_PER_BYTE): Define.
-	(rl78_sym_diff_handler): Use OCTETS_PER_BYTE, with section.
-	* elf32-nds32.c (nds32_elf_get_relocated_section_contents): Similarly.
-	* elf32-ppc.c (ppc_elf_addr16_ha_reloc): Similarly.
-	* elf32-pru.c (pru_elf32_do_ldi32_relocate): Similarly.
-	* elf32-s12z.c (opru18_reloc): Similarly.
-	* elf32-sh.c (sh_elf_reloc): Similarly.
-	* elf32-spu.c (spu_elf_rel9): Similarly.
-	* elf32-xtensa.c (bfd_elf_xtensa_reloc): Similarly.
-	* elf64-ppc.c (ppc64_elf_ha_reloc, ppc64_elf_brtaken_reloc),
-	(ppc64_elf_toc64_reloc): Similarly.
-	* bfd.c (bfd_get_section_limit): Pass section to bfd_octets_per_byte.
-	* cofflink.c (_bfd_coff_link_input_bfd),
-	(_bfd_coff_reloc_link_order): Likewise.
-	* elf.c (_bfd_elf_section_offset): Likewise.
-	* elflink.c (resolve_section, bfd_elf_perform_complex_relocation),
-	(elf_link_input_bfd, elf_reloc_link_order, elf_fixup_link_order),
-	(bfd_elf_final_link): Likewise.
-	* elf.c (_bfd_elf_make_section_from_shdr): Don't strncmp twice
-	to set SEC_ELF_OCTETS.
-	* reloc.c (bfd_perform_relocation): Tidy SEC_ELF_OCTETS special case.
-	(bfd_install_relocation): Likewise.
-	(_bfd_final_link_relocate): Don't recalculate octets.
-	* syms.c (_bfd_stab_section_find_nearest_line): Introduc new
-	"octets" temp.
-	* bfd-in2.h: Regenerate.
+	PR 31067
+	linker.c (_bfd_generic_link_add_one_symbol): When issuing a
+	warning message, also display a message about the warning not
+	being affected by garbage colleciton.
 
-2019-11-25  Christian Eggers  <ceggers@gmx.de>
+2023-11-15  Arsen ArsenoviÄ‡  <arsen@aarsen.me>
 
-	* section.c (struct bfd_section): New flag SEC_ELF_OCTETS.
-	* archures.c (bfd_octets_per_byte): New parameter sec.
-	If section is not NULL and SEC_ELF_OCTETS is set, one octet es
-	returned [ELF targets only].
-	* bfd.c (bfd_get_section_limit): Provide section parameter to
-	bfd_octets_per_byte.
-	* bfd-in2.h: regenerate.
-	* binary.c (binary_set_section_contents): Move call to
-	bfd_octets_per_byte into section loop. Provide section parameter
-	to bfd_octets_per_byte.
-	* coff-arm.c (coff_arm_reloc): Provide section parameter
-	to bfd_octets_per_byte.
-	* coff-i386.c (coff_i386_reloc): likewise.
-	* coff-mips.c (mips_reflo_reloc): likewise.
-	* coff-x86_64.c (coff_amd64_reloc): likewise.
-	* cofflink.c (_bfd_coff_link_input_bfd): likewise.
-	(_bfd_coff_reloc_link_order): likewise.
-	* elf.c (_bfd_elf_section_offset): likewise.
-	(_bfd_elf_make_section_from_shdr): likewise.
-	Set SEC_ELF_OCTETS for sections with names .gnu.build.attributes,
-	.debug*, .zdebug* and .note.gnu*.
-	* elf32-msp430.c (rl78_sym_diff_handler): Provide section parameter
-	to bfd_octets_per_byte.
-	* elf32-nds.c (nds32_elf_get_relocated_section_contents): likewise.
-	* elf32-ppc.c (ppc_elf_addr16_ha_reloc): likewise.
-	* elf32-pru.c (pru_elf32_do_ldi32_relocate): likewise.
-	* elf32-s12z.c (opru18_reloc): likewise.
-	* elf32-sh.c (sh_elf_reloc): likewise.
-	* elf32-spu.c (spu_elf_rel9): likewise.
-	* elf32-xtensa.c (bfd_elf_xtensa_reloc): likewise
-	* elf64-ppc.c (ppc64_elf_brtaken_reloc): likewise.
-	(ppc64_elf_addr16_ha_reloc): likewise.
-	(ppc64_elf_toc64_reloc): likewise.
-	* elflink.c (bfd_elf_final_link): likewise.
-	(bfd_elf_perform_complex_relocation): likewise.
-	(elf_fixup_link_order): likewise.
-	(elf_link_input_bfd): likewise.
-	(elf_link_sort_relocs): likewise.
-	(elf_reloc_link_order): likewise.
-	(resolve_section): likewise.
-	* linker.c (_bfd_generic_reloc_link_order): likewise.
-	(bfd_generic_define_common_symbol): likewise.
-	(default_data_link_order): likewise.
-	(default_indirect_link_order): likewise.
-	* srec.c (srec_set_section_contents): likewise.
-	(srec_write_section): likewise.
-	* syms.c (_bfd_stab_section_find_nearest_line): likewise.
-	* reloc.c (_bfd_final_link_relocate): likewise.
-	(bfd_generic_get_relocated_section_contents): likewise.
-	(bfd_install_relocation): likewise.
-	For section which have SEC_ELF_OCTETS set, multiply output_base
-	and output_offset with bfd_octets_per_byte.
-	(bfd_perform_relocation): likewise.
-
-2019-11-21  Alan Modra  <amodra@gmail.com>
-
-	* elf32-arm.c (elf32_arm_size_stubs): Exclude dynamic library
-	BFDs that have not been loaded.
-
-2019-11-19  Alan Modra  <amodra@gmail.com>
-
-	PR 25197
-	* coffgen.c (coff_find_nearest_line_with_names): Check that C_FILE
-	u.syment.n_value does point at another C_FILE sym and not into
-	some auxent that happens to look like a C_FILE.  Properly check
-	for integer overflow and avoid possible pointer wrap-around.
-	Simplify pr17512 checks.
-
-2019-11-19  Alan Modra  <amodra@gmail.com>
-
-	PR 25200
-	* reloc.c (bfd_default_reloc_type_lookup): Don't BFD_FAIL.
-	* elf.c (_bfd_elf_validate_reloc): Don't segfault on NULL howto.
-
-2019-11-18  Alan Modra  <amodra@gmail.com>
-
-	* elf-bfd.h (struct elf_backend_data <elf_backend_init_file_header>):
-	Rename from elf_backend_post_process_headers.
-	(_bfd_elf_post_process_headers): Delete.
-	(_bfd_elf_init_file_header): Declare.
-	* elf.c (_bfd_elf_compute_section_file_positions): Call new function
-	in place of prep_headers and elf_backend_post_process_headers.
-	(_bfd_elf_init_file_header): Renamed from prep_headers with
-	updated args and made global.  Delete dead code.
-	(_bfd_elf_post_process_headers): Delete.
-	* elf32-arm.c (elf32_arm_init_file_header): Rename from
-	elf32_arm_post_process_headers and call _bfd_elf_init_file_header.
-	Return status.
-	(elf_backend_init_file_header): Define.
-	(elf_backend_post_process_headers): Don't define.
-	* elf32-i386.c (elf_i386_fbsd_init_file_header): Similarly.
-	* elf32-m68hc1x.c (elf32_m68hc11_init_file_header): Similarly.
-	* elf32-metag.c (elf_metag_init_file_header): Similarly.
-	* elf32-spu.c (spu_elf_init_file_header
-	* elf32-visium.c (visium_elf_init_file_header
-	* elf64-alpha.c (elf64_alpha_fbsd_init_file_header
-	* elf64-hppa.c (elf64_hppa_init_file_header
-	* elf64-ia64-vms.c (elf64_vms_init_file_header
-	* elfnn-aarch64.c (elfNN_aarch64_init_file_header
-	* elfnn-ia64.c (elfNN_hpux_init_file_header
-	* elfxx-mips.c (_bfd_mips_init_file_header
-	* elfxx-mips.h (_bfd_mips_post_process_headers): Delete.
-	(_bfd_mips_init_file_header): Declare.
-	(elf_backend_post_process_headers): Delete.
-	(elf_backend_init_file_header): Define.
-	* elfxx-target.h (elf_backend_post_process_headers): Delete.
-	(elf_backend_init_file_header): Define and use.
-	* elf32-m68hc12.c (elf_backend_init_file_header): Define.
-	(elf_backend_post_process_headers): Don't define.
-	* elf32-m68hc1x.h (elf32_m68hc11_post_process_headers): Delete.
-	(elf32_m68hc11_init_file_header): Declare.
-	* elf32-ppc.c (elf_backend_post_process_headers): Remove
-	unnecessary undef.
-
-2019-11-18  Alan Modra  <amodra@gmail.com>
-
-	* elf-bfd.h (struct elf_backend_data <elf_backend_modify_headers>):
-	Rename from elf_backend_modify_program_headers.
-	(_bfd_elf_modify_headers): Declare.
-	* elf.c (assign_file_positions_except_relocs): Set
-	elf_program_header_size.  Always call elf_backend_modify_headers.
-	Extract code modifying file header..
-	(_bfd_elf_modify_headers): ..to here.  New function.
-	* elf32-arm.c (elf_backend_modify_headers): Renamed from
-	elf_backend_modify_program_headers.
-	* elf32-i386.c: Similarly.
-	* elf64-x86-64.c: Similarly.
-	* elfxx-target.h: Similarly.  Default elf_backend_modify_headers
-	to _bfd_elf_modify_headers.
-	* elf-nacl.h (nacl_modify_headers): Rename from
-	nacl_modify_program_headers.
-	* elf-nacl.c (nacl_modify_headers): Rename from
-	nacl_modify_program_headers and call _bfd_elf_modify_headers.
-	* elf32-rx.c (elf32_rx_modify_headers): Similarly.
-	* elf32-spu.c (spu_elf_modify_headers): Similarly.
-	* elfnn-ia64.c (elfNN_ia64_modify_headers): Similarly.
-	* elf32-sh.c (elf_backend_modify_program_headers): Don't undef.
-
-2019-11-18  Alan Modra  <amodra@gmail.com>
-
-	PR 25196
-	* bfd.c (bfd_error_type): Add bfd_error_sorry.
-	(bfd_errmsgs): Likewise.
-	* elf.c (rewrite_elf_program_header): Don't abort on confused
-	lma/alignment.  Replace bfd_error_bad_value with bfd_error_sorry.
-	(_bfd_elf_validate_reloc): Use bfd_error_sorry.
-	(_bfd_elf_final_write_processing): Likewise.
-	* bfd-in2.h: Regenerate.
+	* aclocal.m4: Regenerate.
+	* configure.ac (SHARED_LIBADD): Use LTLIBINTL rather than
+	LIBINTL.
+	* configure: Regenerate.
+	* po/Make-in ($(srcdir)/$(PACKAGE).pot): Output to a .pot
+	temporary file, to suppress xgettext checking charset names.
 
-2019-11-12  Jim Wilson  <jimw@sifive.com>
+2023-11-10  Simon Marchi  <simon.marchi@efficios.com>
 
-	PR 25181
-	* elfnn-riscv.c (_bfd_riscv_relax_call): Always add max_alignment to
-	foff.  If sym_sec->output_section and sec->output_section are the same
-	and not *ABS* then set max_alignment to that section's alignment.
-
-2019-11-07  Alan Modra  <amodra@gmail.com>
-
-	* cpu-cr16c.c: Delete.
-	* elf32-cr16c.c: Delete.
-	* Makefile.am,
-	* archures.c,
-	* config.bfd,
-	* configure.ac,
-	* reloc.c,
-	* targets.c: Remove cr16c support.
-	* Makefile.in,
-	* bfd-in2.h,
-	* configure,
-	* libbfd.h,
-	* po/SRC-POTFILES.in: Regenerate.
-
-2019-11-05  Tim RÃ¼hsen  <tim.ruehsen@gmx.de>
-
-	* doc/chew.c (add_to_definition): Use correct type when
-	calculating size of array reallocation.
-	(nextword): Always initialise the word return parameter.
-	(compile): Check return value of nextword().
-
-2019-10-30  Keith Seitz  <keiths@redhat.com>
-
-	* elf-bfd.h (elf_backend_data) <elf_backend_core_find_build_id>:
-	New field.
-	(_bfd_elf32_core_find_build_id, _bfd_elf64_core_find_build_id):
-	New functions.
-	(elf_read_notes): Add declaration.
-	* elf.c (elf_read_notes): Move elf-bfd.h.
-	(_bfd_elf_core_find_build_id): New function.
-	(bfd_section_from_phdr): Scan core file PT_LOAD segments for
-	build-id if none is known.
-	(elf_parse_notes): For core files, scan for notes.
-	* elfcore.h (elf_core_file_matches_executable_p): If both
-	BFDs have identical build-ids, then they match.
-	(_bfd_elf_core_find_build_id): New function.
-	* elfxx-target.h (elf_backend_core_find_build_id): Define.
-	(elfNN_bed): Add elf_backend_core_find_build_id.
+	* archures.c (bfd_mach_amdgcn_gfx1100, bfd_mach_amdgcn_gfx1101,
+	bfd_mach_amdgcn_gfx1102): New.
+	* bfd-in2.h (bfd_mach_amdgcn_gfx1100, bfd_mach_amdgcn_gfx1101,
+	bfd_mach_amdgcn_gfx1102): New.
+	* cpu-amdgcn.c (arch_info_struct): Add entries for
+	bfd_mach_amdgcn_gfx1100, bfd_mach_amdgcn_gfx1101,
+	bfd_mach_amdgcn_gfx1102.
 
-2019-10-29  Andrew Eikum  <aeikum@codeweavers.com>
+2023-11-10  Nick Clifton  <nickc@redhat.com>
 
-	* libcoff-in.h (struct pe_tdata): Add dos_message field.
-	* libcoff.h: Regenerate.
-	* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Copy the
-	dos_message field rather than initialising it.
-	(_bfd_XX_bfd_copy_private_bfd_data_common): Copy the dos_message
-	field.
-	* peicode.h (pe_mkobject): Initialise the dos_message field.
-	(pe_mkobject_hook): Copy the dos_message field.
-	(pe_bfd_object_p): Copy the dos_message field.
-
-2019-10-25  Alan Modra  <amodra@gmail.com>
-
-	PR 4499
-	* elf-nacl.c (nacl_modify_segment_map): Set no_sort_lma for all
-	PT_LOAD segments.
-	* elf32-spu.c (spu_elf_modify_segment_map): Likewise on overlay
-	PT_LOAD segments.
-	* elf.c (elf_sort_segments): New function.
-	(assign_file_positions_except_relocs): Use shortcuts to elfheader
-	and elf_tdata.  Seek to e_phoff not sizeof_ehdr to write program
-	headers.  Move PT_PHDR check..
-	(assign_file_positions_for_non_load_sections): ..and code setting
-	PT_PHDR p_vaddr and p_paddr, and code setting __ehdr_start value..
-	(assign_file_positions_for_load_sections): ..to here.  Sort
-	PT_LOAD headers.  Delete header_pad code.  Use actual number of
-	headers rather than allocated in calculating size for program
-	headers.  Don't assume program headers follow ELF file header.
-	Simplify pt_load_count code.  Only set "off" for PT_LOAD or
-	PT_NOTE in cores.
-	(rewrite_elf_program_header): Set p_vaddr_offset for segments
-	that include file and program headers.
-	(copy_elf_program_header): Likewise, replacing header_size code.
-
-2019-10-21  Alan Modra  <amodra@gmail.com>
-
-	PR 452
-	* archive.c (normalize): Return file unchanged when
-	BFD_ARCHIVE_FULL_PATH.
-	(_bfd_construct_extended_name_table): Pass abfd, the output
-	bfd, to normalize.
-	(_bfd_archive_bsd44_construct_extended_name_table): Likewise.
-	* bfd.c (struct bfd): Make flags a full flagword.
-	(BFD_ARCHIVE_FULL_PATH): Define.
+	* elf.c (assign_file_positions_except_relocs): Turn warnings about
+	executable segments into errors if so requested.
+	* elflink.c (bfd_elf_size_dynamic_sections): Turn warnings about
+	executable stacks into errors if so requested.
+
+2023-10-30  Nick Clifton  <nickc@redhat.com>
+
+	* bpf-reloc.def (R_BPF_64_NODLD32): Add entry.
+
+2023-10-16  Nick Clifton  <nickc@redhat.com>
+
+	PR 28910
+	* elf32-arm.c (elf32_arm_merge_private_bfd_data): Do not set
+	output flags if the input flags have not been set.
+
+2023-10-09  Nick Clifton  <nickc@redhat.com>
+
+	PR 30950
+	* elf32-i386.c (elf_i386_convert_load_reloc): Check for
+	elf_x86_hash_table returning a NULL pointer.
+
+	PR 30949
+	* elflink.c (elf_gc_mark_debug_section): Check for
+	bfd_section_from_elf_index returning a NULL pointer.
+
+2023-10-06  Nick Clifton  <nickc@redhat.com>
+
+	PR 30940
+	* elf64-alpha.c (elf64_alpha_check_relocs): Correct error message.
+
+2023-10-05  Nick Clifton  <nickc@redhat.com>
+
+	PR 30904
+	* elf.c (_bfd_elf_get_dynamic_symbols): Fix typo when checking to
+	see if the gnuchains array has been successfully created.
+
+2023-10-02  Nick Clifton  <nickc@redhat.com>
+
+	* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Use
+	bfd_get_current_time when filing in the timestamp.
+
+2023-09-29  Nick Clifton  <nickc@redhat.com>
+
+	PR 30906
+	* elf.c (_bfd_elf_slurp_version_tables): Test that the verref
+	section header has been initialised before using it.
+
+2023-09-28  Nick Clifton  <nickc@redhat.com>
+
+	PR 30886
+	* elf-bfd.h (struct elf_obj_tdata): Add dt_strsz field.
+	* elf.c (_bfd_elf_get_dynamic_symbols): Add a NUL byte at the end
+	of the string table.
+	Initialise the dt_strsz field.
+	(_bfd_elf_slurp_version_tables): Only free the contents if they
+	were malloc'ed.
+	Add checks before setting string pointers in the dt_strtab buffer.
+
+2023-09-27  Nick Clifton  <nickc@redhat.com>
+
+	PR 30885
+	* elfcode.h (elf_slurp_symbol_table): Compute the symcount for non
+	dynamic symbols in the same way as _bfd_elf_get_symtab_upper_bound.
+
+2023-09-13  Jacob Navia  <jacob@jacob.remcomp.fr>
+
+	* elf.c (_bfd_elf_init_reloc_shdr): Don't segfault on alloc fail.
+
+2023-09-13  Alan Modra  <amodra@gmail.com>
+
+	* elf-strtab.c (_bfd_elf_strtab_init): In the event of memory
+	allocation failure, make sure that the hash table is freed.
+
+2023-08-30  Tom Tromey  <tom@tromey.com>
+
+	PR binutils/30703
+	* doc/webassembly.texi, doc/bfd.texi: Revert 8bb23cdb, adding
+	parameters back to @node.
+
+2023-08-04  Nick Clifton  <nickc@redhat.com>
+
+	PR 15545
+	* cache.c (bfd_cache_close_all): Extend description to note that
+	all files will be closed, even those that are not cacheable.
+	Add code to prevent a possible infinite loop.
+
+2023-08-02  Tom Tromey  <tromey@adacore.com>
+
+	* pei-x86_64.c (PEI_HEADERS): Do not define.
+	* pei-loongarch64.c (PEI_HEADERS): Do not define.
+	* pei-aarch64.c (PEI_HEADERS): Do not define.
+	* pe-x86_64.c (PEI_HEADERS): Do not define.
+	* pe-aarch64.c (PEI_HEADERS): Do not define.
+	* libpei.h (_LIBPEI_H): Add include guard.
+	* coff-x86_64.c (PEI_HEADERS): Do not check.
+	* coff-loongarch64.c (PEI_HEADERS): Do not check.
+	* coff-aarch64.c (PEI_HEADERS): Do not check.
+
+2023-07-24  Johannes Schauer Marin Rodrigues  <josch@debian.org>
+
+	* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): If inserting a
+	timestamp, use the value held in the SOURCE_DATE_EPOCH environment
+	variable, if it is defined.
+
+2023-07-24  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* reloc.c: New reloc BFD_RELOC_BPF_DISPCALL32.
+	* elf64-bpf.c (bpf_reloc_type_lookup): Handle the new reloc.
+	* libbfd.h (bfd_reloc_code_real_names): Regenerate.
+
+2023-07-09  Fangrui Song  <maskray@google.com>
+
+	PR 30592
+	* section.c: Define SEC_ELF_LARGE.
 	* bfd-in2.h: Regenerate.
+	* elf64-x86-64.c (elf_x86_64_section_flags, elf_x86_64_fake_sections,
+	elf_x86_64_copy_private_section_data): New.
 
-2019-10-20  John David Anglin  <danglin@gcc.gnu.org>
+2023-07-03  Nick Clifton  <nickc@redhat.com>
 
-	* elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte
-	minimum alignment for .plt section.
+	* version.m4: Update version number to 2.41.50.
+	* configure: Regenerate.
+	* bfd/po/bfd.pot: Regenerate.
 
-2019-10-19  John David Anglin  <danglin@gcc.gnu.org>
+2023-07-03  Nick Clifton  <nickc@redhat.com>
 
-	* elf32-hppa.c: Revise import stub sequences.
-	(LONG_BRANCH_STUB_SIZE): Define.
-	(LONG_BRANCH_SHARED_STUB_SIZE): Define.
-	(IMPORT_STUB_SIZE): Define.
-	(IMPORT_SHARED_STUB_SIZE): Define.
-	(EXPORT_STUB_SIZE): Define.
-	(plt_stub): Revise to not use register %r22.
-	(LDO_R1_R22): Define.
-	(LDW_R22_R21): Define.
-	(LDW_R22_R19): Define.
-	(hppa_build_one_stub): Update stub generation and use new defines.
-	(hppa_size_one_stub): Likewise.
+	2.41 Branch Point.
 
-2019-10-17  Nelson Chu  <nelson.chu@sifive.com>
+2023-06-19  Nick Clifton  <nickc@redhat.com>
 
-	* elfnn-riscv.c (riscv_elf_relocate_section): Report the error message
-	that user should recompile their code with `fPIC` when linking non-pic
-	code into shared library.
+	PR 30560
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Add more checks
+	for a valid relocation offset.
 
-	* elfnn-riscv.c (riscv_elf_relocate_section): Use asprintf to extend
-	the error message if needed, and then store the result into the
-	`msg_buf`.  Finally, remember to free the unused `msg_buf`.  All error
-	message for the dangerous relocation should be set before we call the
-	callback function.  If we miss the error message since linker runs out
-	of memory, we should set the default error message for the error.
+2023-06-07  Nick Clifton  <nickc@redhat.com>
 
-2019-10-16  Alan Modra  <amodra@gmail.com>
+	PR 30499
+	* elflink.c (elf_link_add_object_symbols): Add a message
+	indicating that alignment and size discrepancies between the
+	definition of common symbols and normal symbols are serious and
+	should be investigated.
 
-	PR 13616
-	* cpu-powerpc.c (bfd_arch_ppc_nop_fill): New function, use it
-	for all ppc arch info.
-	* linker.c (default_data_link_order): Pass info->big_endian to
-	arch_info->fill function.
+2023-05-31  Tristan Gingold  <tgingold@free.fr>
 
-2019-10-15  Alan Modra  <amodra@gmail.com>
+	PR 30444
+	* coffcode.h (coff_write_object_contents): Handle base64 encoding
+	on PE.  Also check for too large string table.
+	* coffgen.c (extract_long_section_name): New function extracted
+	from ...
+	(make_a_section_from_file): ... here.  Add support for base64
+	long section names.
+	(decode_base64): New function.
 
-	* elf32-m68hc1x.c (reloc_warning): Add printf attribute.
-	(elf32_m68hc11_relocate_section): Don't use a variable for format
-	strings.  Delete some unnecessary xgettext:c-format comments.
+2023-05-17  Luca Bacci  <luca.bacci@outlook.com>
 
-2019-10-15  Alan Modra  <amodra@gmail.com>
+	PR 30421
+	* cofflink.c (_decoration_hash_newfunc): New function.
+	(_bfd_coff_link_hash_table_init): Call it.
+	* libcoff-in.h (struct coff_link_hash_table): Add decoration_hash
+	field.
+	(struct decoration_hash_entry): Declare.
+	(_decoration_hash_newfunc): Prototype.
+	* libcoff.h: Regenerate.
 
-	PR 24955
-	* elf32-arm.c (set_cmse_veneer_addr_from_implib): Use bfd_malloc
-	rather than xmalloc.
-	* elf32-m68hc1x.c (reloc_warning): New function.
-	(elf32_m68hc11_relocate_section): Use it here.  Cast bfd_vma values
-	corresponding to %lx in format strings.
-	* elf32-nds32.c (nds32_insertion_sort): Use a stack temporary.
+2023-05-16  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
 
-2019-10-15  Alan Modra  <amodra@gmail.com>
+	* libcoff-in.h (struct coff_tdata): Add section_by_index and
+	section_by_target_index hash tables.
+	* libcoff.h: Regenerate.
+	* coffcode.h (htab_hash_section_index): New function.
+	(htab_eq_section_index): New function.
+	(htab_hash_section_target_index): New function.
+	(htab_eq_section_target_index): New function.
+	(coff_mkobject_hool): Create the hash tables.
+	* peicode.h: Add the same new functions.
+	(pe_mkobject_hook): Create the hash tables.
+	* coff-x86_64.c (coff_amd64_rtype_to_howto): Use the new tables to
+	speed up lookups.
+	* coffgen.c (coff_section_from_bfd_index): Likewise.
+	(_bfd_coff_close_and_cleanup): Delete the hash tables.
+
+2023-05-10  Luca Bonissi  <gcc@scarsita.it>
+
+	PR 30422
+	* elf32-or1k.c (or1k_elf_relocate_section): Prescan for
+	R_OR1K_GOT_AHI16 relocs as they may occur after R_OR1K_GOT16
+	relocs.
 
-	PR 25100
-	* elf64-ppc.c (sfpr_define): Delete dead code that triggered a warning.
+2023-05-05  Nick Clifton  <nickc@redhat.com>
 
-2019-10-15  Alan Modra  <amodra@gmail.com>
+	PR 30354
+	* elf32-arm.c (elf32_arm_gc_mark_extra_sections): If any debug
+	sections are marked then rerun the extra marking in order to pick
+	up any dependencies.
 
-	* bfd.c (bfd_check_compression_header): Check for powers of two
-	with x == (x & -x).
+2023-05-03  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+	* archive.c (_bfd_write_archive_contents): Use a larger buffer in
+	order to improve efficiency.
 
-	* syms.c (struct indexentry): Add idx field.
-	(cmpindexentry): Final sort on idx.
-	(_bfd_stab_section_find_nearest_line): Set idx.
+2023-05-03  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+	* coffcode.h (coff_read_word_from_buffer): New function.
+	* coffcode.h (COFF_CHECKSUM_BUFFER_SIZE): New constant.
+	* coffcode.h (coff_compute_checksum): Improve speed by reducing
+	the number of seeks and reads used.
 
-	* dwarf2.c (struct lookup_funcinfo): Add idx field.
-	(compare_lookup_funcinfos): Perform final sort on idx.
-	(build_lookup_funcinfo_table): Set idx.
-	(compare_sequences): Perform final sort on num_lines.
-	(build_line_info_table): Set num_lines and line_info_lookup earlier.
-	(sort_line_sequences): Set num_lines for sort.
+2023-04-24  Nick Clifton  <nickc@redhat.com>
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+	* po/la.po: New Georgian translation.
 
-	* elflink.c (elf_sort_symbol): Sort on type and name as well.
-	(elf_link_add_object_symbols): Style fix.
+2023-04-17  Nick Clifton  <nickc@redhat.com>
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+	PR 30142
+	* peXXigen.c (_bfd_XXi_swap_scnhdr_out): Do not force the .rsrc
+	section to be writeable.
 
-	* elf.c (_bfd_elf_map_sections_to_segments): Init target_index
-	for sections about to be sorted.
-	(assign_file_positions_for_load_sections): Likewise.
-	(elf_sort_sections): Don't bother optimising both TOEND case.
-	* elflink.c (bfd_elf_final_link): Reset target_index.
+2023-03-30  Nick Clifton  <nickc@redhat.com>
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+	PR 30285
+	* elf.c (_bfd_elf_slurp_version_tables): Fail if no version
+	definitions are allocated.
 
-	* elflink.c (elf_get_linked_section_vma): Delete.
-	(compare_link_order): Use elf_linked_to_section and sort by lma,
-	size, and id.
-	(elf_fixup_link_order): Use size_t variables where appropriate.
-	Make use of elf_linked_to_section.  Formatting.  Properly align
-	sections.
+2023-02-27  Felix Willgerodt  <felix.willgerodt@intel.com>
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+	* elf64-x86-64.c (elf_x86_64_grok_psinfo): Check for
+	elf_external_linux_prpsinfo32_ugid32.
 
-	* elf-strtab.c (strrevcmp): Comment.
-	* merge.c (strrevcmp): Likewise.
-	* elf64-ppc.c (compare_symbols): Correct final pointer comparison.
-	Comment on why comparing pointers ensures a stable sort.
-	* elflink.c (struct elf_symbol): Add void* to union.
-	(elf_sort_elf_symbol): Ensure a stable sort with pointer comparison.
-	(elf_sym_name_compare): Likewise.
-	(bfd_elf_match_symbols_in_sections): Style fix.
-	(elf_link_sort_cmp1): Comment.
-
-2019-10-14  Alan Modra  <amodra@gmail.com>
-
-	PR 24955
-	* elflink.c (elf_output_implib): Don't use xmalloc.  Don't ignore
-	return value of bfd_alloc2.
-	* peXXigen.c (_bfd_XXi_write_codeview_record): Don't use xmalloc.
-	* pef.c (bfd_pef_print_symbol): Likewise.  Don't ignore return
-	value of bfd_get_section_contents.
-	* som.c (som_write_space_strings): Don't use xmalloc.
-	(som_write_symbol_strings): Likewise.
-
-2019-10-11  Max Filippov  <jcmvbkbc@gmail.com>
-
-	* dwarf2.c (stash_maybe_enable_info_hash_tables): Only set
-	stash->info_hash_status = STASH_INFO_HASH_ON when
-	stash_maybe_update_info_hash_tables succeeds.
-
-2019-10-09  Alan Modra  <amodra@gmail.com>
-
-	PR 25070
-	* dwarf2.c (_bfd_dwarf2_slurp_debug_info): Catch overflow of
-	total_size calculation.
-
-2019-10-08  Alan Modra  <amodra@gmail.com>
-
-	PR 25078
-	* dwarf2.c (find_abstract_instance): Delete orig_info_ptr, add
-	recur_count.  Error on recur_count reaching 100 rather than
-	info_ptr matching orig_info_ptr.  Adjust calls.
-
-2019-10-07  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
-
-	* elf32-msp430.c (elf32_msp430_merge_mspabi_attributes): Rename to..
-	(elf32_msp430_merge_msp430_attributes): Add support for merging
-	the GNU object attribute for data region.
-
-2019-10-07  Alan Modra  <amodra@gmail.com>
-
-	* elf64-ppc.c (ppc64_elf_size_dynamic_sections): Do allocate
-	space for local got non-tls relocs when PIE.
-
-2019-10-07  Alan Modra  <amodra@gmail.com>
-
-	* elflink.c (elf_fixup_link_order): Don't attempt to find
-	an elf_section for linker created bfd sections.
-
-2019-10-07  Alan Modra  <amodra@gmail.com>
-
-	* elf32-ppc.c (ppc_elf_tls_optimize): Don't process R_PPC_TLSLD
-	with non-local symbol.  Don't double count __tls_get_addr calls
-	with marker relocs.
-	* elf64-ppc.c (ppc64_elf_tls_optimize): Likewise.
-
-2019-10-07  Alan Modra  <amodra@gmail.com>
-
-	* elf32-ppc.c (nomark_tls_get_addr): Rename from has_tls_get_addr_call
-	throughout.
-	* elf64-ppc.c (nomark_tls_get_addr): Likewise.
-
-2019-10-04  Alan Modra  <amodra@gmail.com>
-
-	* elf64-ppc.c (ppc64_elf_check_relocs): Move initialisation of vars.
-	(ppc64_elf_tls_optimize): Correct is_local condition.
-	(allocate_got): Don't reserve dynamic relocations for any of the
-	tls got relocs in PIEs when the symbol is local.
-	(allocate_dynrelocs): Correct validity test for local sym using
-	tlsld_got slot.
-	(ppc64_elf_size_dynamic_sections): Don't reserve dynamic relocations
-	for any of the tls got relocs in PIEs.
-	(ppc64_elf_layout_multitoc): Likewise.
-	(ppc64_elf_relocate_section): Correct validity test for local sym
-	using tlsld_got slot.  Don't emit dynamic relocations for any of
-	the tls got relocs in PIEs when the symbol is local.
-	* elf32-ppc.c (ppc_elf_tls_optimize): Correct is_local condition.
-	(got_relocs_needed): Delete.
-	(allocate_dynrelocs): Correct validity test for local sym using
-	tlsld_got slot.  Don't reserve dynamic relocations for any of the
-	tls got relocs in PIEs when the symbol is local.
-	(ppc_elf_size_dynamic_sections): Don't reserve dynamic relocations
-	for any of the tls got relocs in PIEs.
-	(ppc_elf_relocate_section): Correct validity test for local sym
-	using tlsld_got slot.  Don't emit dynamic relocations for any of
-	the tls got relocs in PIEs when the symbol is local.
-
-2019-10-04  Szabolcs Nagy  <szabolcs.nagy@arm.com>
-
-	PR ld/22263
-	PR ld/25056
-	* elf32-arm.c (elf32_arm_tls_transition): Use bfd_link_dll instead of
-	bfd_link_pic for TLS checks.
-	(elf32_arm_final_link_relocate): Likewise.
-	(allocate_dynrelocs_for_symbol): Likewise.
+2023-02-23  Fangrui Song  <i@maskray.me>
 
-2019-10-04  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+	* elfnn-riscv.c (struct riscv_elf_link_hash_table): Add params.
+	(riscv_elfNN_set_options): New.
+	(riscv_info_to_howto_rela): Check relax_gp.
+	(_bfd_riscv_relax_section): Likewise.
+	* elfxx-riscv.h (struct riscv_elf_params): New.
+	(riscv_elf32_set_options): New.
+	(riscv_elf64_set_options): New.
 
-	PR ld/25062
-	* elf32-arm.c (elf32_arm_final_link_relocate): Sign extend data.
+2023-02-23  Nick Clifton  <nickc@redhat.com>
+            Alan Modra  <amodra@gmail.com>
 
-2019-09-30  Nick Alcock  <nick.alcock@oracle.com>
+	PR 30150
+	* dwarf2.c (comp_unit_contains_address): Renamed to ...
+	(comp_unit_may_contain_address): this, and added code to return
+	true if the CU's ranges have not yet been computed.
+	(_bfd_dwarf2_find_nearest_line_with_alt): Use the renamed
+	function, simplifying code in the process.
 
-	* elf-bfd.h (bfd_section_is_ctf): New inline function.
-	* elf.c (special_sections_c): Add ".ctf".
-	(assign_file_positions_for_non_load_sections): Note that
-	compressed debugging sections etc are not assigned here.  Treat
-	CTF sections like SEC_ELF_COMPRESS sections when is_linker_output:
-	sh_offset -1.
-	(assign_file_positions_except_relocs): Likewise.
-	(find_section_in_list): Note that debugging and CTF sections, as
-	well as reloc sections, are assigned later.
-	(_bfd_elf_assign_file_positions_for_non_load): CTF sections get
-	their size and contents updated.
-	(_bfd_elf_set_section_contents): Skip CTF sections: unlike
-	compressed sections, they have no uncompressed content to copy at
-	this stage.
-	* elflink.c (elf_link_swap_symbols_out): Call the examine_strtab
-	callback right before the strtab is written out.
-	(bfd_elf_final_link): Don't cache the section contents of CTF
-	sections: they are not populated yet.  Call the emit_ctf callback
-	right at the end, after all the symbols and strings are flushed
-	out.
-
-2019-07-13  Nick Alcock  <nick.alcock@oracle.com>
-
-	* elf-strtab.c (_bfd_elf_strtab_len): New.
-	(_bfd_elf_strtab_str): Likewise.
-	* bfd-elf.h: Declare them.
-
-2019-07-13  Nick Alcock  <nick.alcock@oracle.com>
-
-	* elf-bfd.h (bfd_elf_get_str_section): Add.
-	* elf.c (bfd_elf_get_str_section): No longer static.
-
-2019-09-26  Alan Modra  <amodra@gmail.com>
-
-	PR 24262
-	* Makefile.am (AM_CPPFLAGS): Add -DLIBDIR.
-	* plugin.c (load_plugin): Search both ${libdir}/bfd-plugins and
-	${bindir}/../lib/bfd-plugins if different.
-	* Makefile.in: Regenerate.
+2023-02-21  Nick Clifton  <nickc@redhat.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* opncls.c (bfd_fill_in_gnu_debuglink_section): Update
+	description.
 
-	* elf64-ppc.c (ppc64_elf_check_relocs): Use bfd_link_executable
-	in choosing between different actions for shared library and
-	non-shared library cases.  Delete ELIMINATE_COPY_RELOCS test.
-	(dec_dynrel_count): Likewise.  Account for ifunc special case.
-	(ppc64_elf_adjust_dynamic_symbol): Copy relocs are for executables,
-	not non-pic.
-	(allocate_dynrelocs): Comment fixes.  Delete ELIMINATE_COPY_RELOCS
-	test.
+2023-02-17  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* doc/doc.str (FUNCTION): Call func.
 
-	* Makefile.am (SOURCE_HFILES): Add many missing .h files.
-	* Makefile.in: Regenerate.
-	* po/SRC-POTFILES.in: Regenerate.
+2023-02-17  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* opncls.c: Hoist the SECTION comment.
 
-	* bfd-in.h (bfd_symbol, bfd_section_already_linked),
-	(bfd_elf_version_tree): Delete forward declarations.
-	Move other forward decls and remaining elf function decl later.
-	(bfd_section_already_linked_table_init),
-	(bfd_section_already_linked_table_free),
-	(_bfd_handle_already_linked, _bfd_nearby_section),
-	(_bfd_fix_excluded_sec_syms): Move to bfdlink.h.
-
-2019-09-23  Alan Modra  <amodra@gmail.com>
-
-	* bfd-in.h: Move ecoff function declarations..
-	* ecoff-bfd.h: ..to here, new file.
-	* ecoff.c: Include ecoff-bfd.h.
-	* ecofflink.c: Likewise.
-	* elf64-alpha.c: Likewise.
-	* elfxx-mips.c: Likewise.
-	* bfd-in2.h: Regenerate.
+2023-02-17  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* opncls.c (bfd_get_debug_link_info_1, separate_debug_file_exists)
+	(separate_alt_debug_file_exists, find_separate_debug_file)
+	(get_build_id, get_build_id_name, check_build_id_file): Don't use
+	chew comments.
 
-	* bfd-in.h (enum notice_asneeded_action): Move to bfdlink.h.
-	Move most other elf declarations..
-	* elf-bfd.h: ..to here.
-	* bfd-in2.h: Regenerate.
+2023-02-17  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* doc/doc.str (SYNOPSIS): Use collapse_whitespace.
+	* doc/chew.c (collapse_whitespace): New function.
+	(main): Register collapse_whitespace.
 
-	* bfd-in.h: Move m68k function declaration..
-	* cpu-m68k.h: ..to here, new file..
-	* elf32-m68k.h: ..and here, new file.
-	* elf32-m68k.c: Include cpu-m68k.h and elf32-m68k.h.
-	* bfd-in2.h: Regenerate.
+2023-02-07  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* bfd.c, cache.c, compress.c, opncls.c: Remove RETURNS from
+	documentation comments.
+	* doc/doc.str, doc/proto.str (RETURNS): Remove.
 
-	* bfd-in.h: Move bfin function declaration..
-	* elf32-bfin.h: ..to here, new file.
-	* elf32-bfin.c: Include elf32-bfin.h.
-	* bfd-in2.h: Regenerate.
+2023-02-07  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* syms.c (bfd_decode_symclass, bfd_is_undefined_symclass)
+	(bfd_symbol_info): Reorder documentation comment.
+	* doc/doc.str (synopsis_seen): New variable.
+	(SYNOPSIS): Set synopsis_seen.  Emit @deftypefn.
+	(DESCRIPTION): Use synopsis_seen.
+	* doc/chew.c (catstrif): New function.
+	(main): Add catstrif intrinsic.
+	(compile): Recognize "variable" command.
 
-	* bfd-in.h: Move cr16 function declaration..
-	* elf32-cr16.h: ..to here, new file.
-	* elf32-cr16.c: Include elf32-cr16.h.
-	* bfd-in2.h: Regenerate.
+2023-02-07  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* doc/proto.str (external, internal, ifinternal, ENUMEQ, ENUMDOC):
+	Update.
+	* doc/chew.c (internalmode): Remove.
+	(add_intrinsic_variable): New function.
+	(main): Add internalmode as intrinsic.
+	(internal_mode): Remove global.
+	(maybecatstr): Update.
+	(free_words): Free variables.
 
-	* bfd-in.h (bfd_sunos_get_needed_list),
-	(bfd_sunos_record_link_assignment),
-	(bfd_sunos_size_dynamic_sections),
-	(bfd_i386linux_size_dynamic_sections),
-	(bfd_sparclinux_size_dynamic_sections): Delete obsolete decls.
-	* bfd-in2.h: Regenerate.
+2023-02-07  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* doc/chew.c (pcu) <l>: Now intptr_t.
+	(internal_mode, istack, isp): Likewise.
+	(bang, atsign): Use intptr_t.
 
-	* bfd-in.h: Move xcoff function declarations..
-	* xcofflink.h: ..to here, new file.
-	* xcofflink.c: Include xcofflink.h.
-	* coff-rs6000.c (bfd_xcoff_ar_archive_set_magic): Delete unused func.
-	* bfd-in2.h: Regenerate.
+2023-02-07  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* doc/proto.str (SYNOPSIS): Don't use paramstuff.
+	* doc/chew.c (paramstuff): Remove.
+	(main): Don't add paramstuff intrinsic.
 
-	* bfd-in.h: Delete coff forward refs and move coff declaration..
-	* coff-bfd.h: ..to here.
-	* bfd-in2.h: Regenerate.
+2023-02-07  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* doc/doc.str, doc/proto.str: Add copyright header.
 
-	* bfd-in.h: Move arm declaraions..
-	* cpu-arm.h: ..to here, new file..
-	* coff-arm.h: ..and here, new file..
-	* elf32-arm.h: ..and here, new file.
-	* cpu-arm.c: Include cpu-arm.h.
-	* coff-arm.c: Include cpu-arm.h and coff-arm.h.
-	* elf32-arm.c: Include cpu-arm.h and elf32-arm.h.
-	* pe-arm.c: Move function rename defines later.
-	* pe-arm-wince.c: Likewise and include sysdep.h and bfd.h early.
-	* bfd-in2.h: Regenerate.
+2023-02-07  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* doc/webassembly.texi (File layout): Remove second argument from
+	@node.
+	* doc/bfd.texi: Use single-argument @node everywhere.
 
-	* bfd-in.h: Move tic6x function declaration..
-	* elf32-tic6x.h: ..to here.
-	* bfd-in2.h: Regenerate.
+2023-02-07  Tom Tromey  <tom@tromey.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* Makefile.in: Rebuild.
+	* doc/local.mk (%D%/chew.stamp): Don't use H_CFLAGS.
 
-	* bfd-in.h: Move aarch64 declarations and defines..
-	* cpu-aarch64.h: ..to here, new file..
-	* elfxx-aarch64.h: ..and here.
-	* cpu-aarch64.c: Include cpu-aarch64.h.
-	* elfnn-aarch64.c: Likewise.
-	* bfd-in2.h: Regenerate.
+2023-01-24  Nick Clifton  <nickc@redhat.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	PR 29998
+	* cofflink.c (_bfd_coff_generic_relocate_section): Add an
+	assertion that the output section is set for defined, global
+	symbols.
 
-	* bfd-in.h: Delete ticoff function declarations.
-	* coff-tic54x.c (bfd_ticoff_set_section_load_page),
-	(bfd_ticoff_get_section_load_page): Make static.
-	* bfd-in2.h: Regenerate.
+2023-01-17  Xianmiao Qu  <cooper.qu@linux.alibaba.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* elf32-csky.c (elf32_csky_merge_attributes): Don't save
+	and restore the ARCH attribute, it will actually clear
+	the ARCH attribute.
+	(csky_elf_merge_private_bfd_data): Store the machine flag
+	correctly.
 
-	* bfd-in.h: Move h8300 function declaration to..
-	* cpu-h8300.h: ..here, new file.
-	* cpu-h8300.c: Include cpu-h8300.h.
-	* elf32-h8300.c: Likewise.
-	* bfd-in2.h: Regenerate.
+2023-01-13  Nick Clifton  <nickc@redhat.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* po/ro.po: Updated Romainian translation.
 
-	* bfd-in.h: Move ia64 function declarations..
-	* elfxx-ia64.h: ..to here.
-	* bfd-in2.h: Regenerate.
+2023-01-11  Nick Clifton  <nickc@redhat.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	PR 29988
+	* dwarf2.c (read_indexed_address): Fix check for an out of range
+	offset.
 
-	* bfd-in.h: Move v850 function declarations..
-	* elf32-v850.h: ..to here, new file.
-	* elf32-v850.c: Include elf32-v850.h.
-	* bfd-in2.h: Regenerate.
+2023-01-06  Nick Clifton  <nickc@redhat.com>
+
+	* po/ru.po: Updated Russian translation.
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+2023-01-03  Himal  <himalr@proton.me>
 
-	* bfd-in.h: Move mips function declaration to..
-	* elfxx-mips.h: ..here.
-	* bfd-in2.h: Regenerate.
+	PR 29947
+	* bfdio.c (_bfd_real_fopen): Do not add a prefix to the Windows'
+	nul device filename.
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+2023-01-03  Nick Clifton  <nickc@redhat.com>
 
-	* bfd-in.h: Move csky function declarations to..
-	* elf32-csky.h: ..here, new file.
-	* elf32-csky.c: Include elf32-csky.h.
-	* bfd-in2.h: Regenerate.
+	* po/fr.po: Updated French trabslation.
+	* po/uk.po: Updated Ukrainian trabslation.
 
-2019-09-20  Nelson Chu <nelson.chu@sifive.com>
+2022-12-31  Nick Clifton  <nickc@redhat.com>
 
-	* elfnn-riscv.c (riscv_pcgp_hi_reloc): Add new field undefined_weak.
-	(riscv_record_pcgp_hi_reloc): New parameter undefined_weak.
-	Set undefined_weak field from it.
-	(relax_func_t): New parameter undefined_weak.
-	(_bfd_riscv_relax_call): New ignored parameter undefined_weak.
-	(_bfd_riscv_relax_tls_le): Likewise.
-	(_bfd_riscv_relax_align): Likewise.
-	(_bfd_riscv_relax_delete): Likewise.
-	(_bfd_riscv_relax_lui): New parameter undefined_weak.  If true,
-	allow relaxing.  For LO12* relocs, set rs1 to x0 when undefined_weak.
-	(_bfd_riscv_relax_pc): New parameter undefined_weak.  For LO12* relocs,
-	set undefined_weak from hi_reloc.  If true, allow relaxing.  For LO12*
-	relocs, set rs1 to x0 when undefined_weak and change to non-pcrel
-	reloc.
-	(_bfd_riscv_relax_section): New local undefined_weak.  Set for
-	undef weak relocs that can be relaxed.  Pass to relax_func call.
+	* 2.40 branch created.
 
-2019-09-20  Alan Modra  <amodra@gmail.com>
+2022-12-23  Nick Clifton  <nickc@redhat.com>
 
-	* bfd-in.h (bfd_section_name, bfd_section_size, bfd_section_vma),
-	(bfd_section_lma, bfd_section_alignment, bfd_section_flags),
-	(bfd_section_userdata, bfd_is_com_section, discarded_section),
-	(bfd_get_section_limit_octets, bfd_get_section_limit): Delete macros.
-	* bfd.c (bfd_get_section_limit_octets, bfd_get_section_limit),
-	(bfd_section_list_remove, bfd_section_list_append),
-	(bfd_section_list_prepend, bfd_section_list_insert_after),
-	(bfd_section_list_insert_before, bfd_section_removed_from_list):
-	New inline functions.
-	* section.c (bfd_is_und_section, bfd_is_abs_section),
-	(bfd_is_ind_section, bfd_is_const_section, bfd_section_list_remove),
-	(bfd_section_list_append, bfd_section_list_prepend),
-	(bfd_section_list_insert_after, bfd_section_list_insert_before),
-	(bfd_section_removed_from_list): Delete macros.
-	(bfd_section_name, bfd_section_size, bfd_section_vma),
-	(bfd_section_lma, bfd_section_alignment, bfd_section_flags),
-	(bfd_section_userdata, bfd_is_com_section, bfd_is_und_section),
-	(bfd_is_abs_section, bfd_is_ind_section, bfd_is_const_section),
-	(discarded_section): New inline functions.
-	* bfd-in2.h: Regenerate.
+	PR 29936
+	* dwarf2.c (concat_filename): Fix check for a directory index off
+	the end of the directory table.
 
-2019-09-20  Alan Modra  <amodra@gmail.com>
+2022-12-21  Nick Clifton  <nickc@redhat.com>
 
-	* bfd-in.h (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name),
-	(bfd_asymbol_bfd, bfd_asymbol_flavour, bfd_set_asymbol_name): Delete.
-	* bfd.c (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name),
-	(bfd_asymbol_bfd, bfd_set_asymbol_name): New inline functions.
-	* targets.c (bfd_asymbol_flavour): Likewise.
-	* bfd-in2.h: Regenerate.
+	* po/ro.po: Updated Romanian translation.
 
-2019-09-20  Alan Modra  <amodra@gmail.com>
+2022-12-06  Nick Clifton  <nickc@redhat.com>
 
-	* archive.c (bfd_generic_archive_p): Use bfd_set_thin_archive.
-	* bfd-in.h (bfd_get_filename, bfd_get_cacheable, bfd_get_format),
-	(bfd_get_target, bfd_get_flavour, bfd_family_coff, bfd_big_endian),
-	(bfd_little_endian, bfd_header_big_endian, bfd_header_little_endian),
-	(bfd_get_file_flags, bfd_applicable_file_flags),
-	(bfd_applicable_section_flags, bfd_has_map, bfd_is_thin_archive),
-	(bfd_valid_reloc_types, bfd_usrdata, bfd_get_start_address),
-	(bfd_get_symcount, bfd_get_outsymbols, bfd_count_sections),
-	(bfd_get_dynamic_symcount, bfd_get_symbol_leading_char): Delete.
-	* bfd/bfd.c (bfd_get_filename, bfd_get_cacheable, bfd_get_format),
-	(bfd_get_file_flags, bfd_get_start_address, bfd_get_symcount),
-	(bfd_get_dynamic_symcount, bfd_get_outsymbols, bfd_count_sections),
-	(bfd_has_map, bfd_is_thin_archive, bfd_set_thin_archive),
-	(bfd_usrdata, bfd_set_usrdata): New inline functions.
-	* targets.c (bfd_get_target, bfd_get_flavour),
-	(bfd_applicable_file_flags, bfd_family_coff, bfd_big_endian),
-	(bfd_little_endian, bfd_header_big_endian),
-	(bfd_header_little_endian, bfd_applicable_section_flags),
-	(bfd_get_symbol_leading_char): New inline functions.
-	* bfd-in2.h: Regenerate.
+	PR 29852
+	* elf32-arm.c (cmse_scan): Check for NULL entries in the
+	sym_hashes array.
+	(elf32_arm_gc_mark_extra_sections): Likewise.
 
-2019-09-20  Alan Modra  <amodra@gmail.com>
+2022-12-05  Nick Clifton  <nickc@redhat.com>
 
-	* elf64-ppc.c (ppc64_glibc_dynamic_reloc): New function.
-	(ppc64_elf_relocate_section): Warn if emitting unsupported dynamic
-	relocations.
-
-2019-09-18  Alan Modra  <amodra@gmail.com>
-
-	* bfd-in.h (bfd_get_section_name, bfd_get_section_vma),
-	(bfd_get_section_lma, bfd_get_section_alignment),
-	(bfd_get_section_size, bfd_get_section_flags),
-	(bfd_get_section_userdata): Delete.
-	(bfd_section_name, bfd_section_size, bfd_section_vma),
-	(bfd_section_lma, bfd_section_alignment): Lose bfd parameter.
-	(bfd_section_flags, bfd_section_userdata): New.
-	(bfd_is_com_section): Rename parameter.
-	* section.c (bfd_set_section_userdata, bfd_set_section_vma),
-	(bfd_set_section_alignment, bfd_set_section_flags, bfd_rename_section),
-	(bfd_set_section_size): Delete bfd parameter, rename section parameter.
-	(bfd_set_section_lma): New.
-	* bfd-in2.h: Regenerate.
-	* mach-o.c (bfd_mach_o_init_section_from_mach_o): Delete bfd param,
-	update callers.
-	* aoutx.h, * bfd.c, * coff-alpha.c, * coff-arm.c, * coff-mips.c,
-	* coff64-rs6000.c, * coffcode.h, * coffgen.c, * cofflink.c,
-	* compress.c, * ecoff.c, * elf-eh-frame.c, * elf-hppa.h,
-	* elf-ifunc.c, * elf-m10200.c, * elf-m10300.c, * elf-properties.c,
-	* elf-s390-common.c, * elf-vxworks.c, * elf.c, * elf32-arc.c,
-	* elf32-arm.c, * elf32-avr.c, * elf32-bfin.c, * elf32-cr16.c,
-	* elf32-cr16c.c, * elf32-cris.c, * elf32-crx.c, * elf32-csky.c,
-	* elf32-d10v.c, * elf32-epiphany.c, * elf32-fr30.c, * elf32-frv.c,
-	* elf32-ft32.c, * elf32-h8300.c, * elf32-hppa.c, * elf32-i386.c,
-	* elf32-ip2k.c, * elf32-iq2000.c, * elf32-lm32.c, * elf32-m32c.c,
-	* elf32-m32r.c, * elf32-m68hc1x.c, * elf32-m68k.c, * elf32-mcore.c,
-	* elf32-mep.c, * elf32-metag.c, * elf32-microblaze.c,
-	* elf32-moxie.c, * elf32-msp430.c, * elf32-mt.c, * elf32-nds32.c,
-	* elf32-nios2.c, * elf32-or1k.c, * elf32-ppc.c, * elf32-pru.c,
-	* elf32-rl78.c, * elf32-rx.c, * elf32-s390.c, * elf32-score.c,
-	* elf32-score7.c, * elf32-sh.c, * elf32-spu.c, * elf32-tic6x.c,
-	* elf32-tilepro.c, * elf32-v850.c, * elf32-vax.c, * elf32-visium.c,
-	* elf32-xstormy16.c, * elf32-xtensa.c, * elf64-alpha.c,
-	* elf64-bpf.c, * elf64-hppa.c, * elf64-ia64-vms.c, * elf64-mmix.c,
-	* elf64-ppc.c, * elf64-s390.c, * elf64-sparc.c, * elf64-x86-64.c,
-	* elflink.c, * elfnn-aarch64.c, * elfnn-ia64.c, * elfnn-riscv.c,
-	* elfxx-aarch64.c, * elfxx-mips.c, * elfxx-sparc.c,
-	* elfxx-tilegx.c, * elfxx-x86.c, * i386msdos.c, * linker.c,
-	* mach-o.c, * mmo.c, * opncls.c, * pdp11.c, * pei-x86_64.c,
-	* peicode.h, * reloc.c, * section.c, * syms.c, * vms-alpha.c,
-	* xcofflink.c: Update throughout for bfd section macro and function
-	changes.
-
-2019-09-18  Alan Modra  <amodra@gmail.com>
-
-	* bfd-in.h (bfd_asymbol_section): Rename from bfd_get_section.
-	(bfd_get_output_section): Delete.
-	(bfd_asymbol_base): Delete.
-	(bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name),
-	(bfd_asymbol_bfd, bfd_asymbol_flavour): Tidy.
-	(bfd_set_asymbol_name): New macro.
+	PR 29848
+	* vms-alpha.c (parse_module): Fix potential out of bounds memory
+	access.
+
+2022-12-01  Nick Clifton  <nickc@redhat.com>
+
+	PR 25202
+	* bfd.c (VerilogDataEndianness): New variable.
+	(verilog_write_record): Use VerilogDataEndianness, if set, to
+	choose the endianness of the output.
+	(verilog_write_section): Adjust the address by the data width.
+
+2022-11-21  Nick Clifton  <nickc@redhat.com>
+
+	PR 29764
+	* cpu-arm.c (scan): Accept machine names prefixed with "arm:".
+	* cpu-aarch64.c (scan): Accept machine names prefixed with "aarch64:".
+
+2022-10-19  Nick Clifton  <nickc@redhat.com>
+
+	PR 29699
+	* elf.c (_bfd_elf_slurp_version_tables): Fail if the sh_info field
+	of the section header is zero.
+
+2022-09-09  Nick Clifton  <nickc@redhat.com>
+
+	PR 29532
+	* elf.c (setup_group): Do not return false if there is no group
+	information available.
+
+2022-09-02  Aaron Merey  <amerey@redhat.com>
+
+	* aout-target.h (MY_find_nearest_line_with_alt): New macro.
+	* bfd-in2.h: Regenerate.
+	* bfd.c (bfd_find_nearest_line_with_alt): New macro.
+	* binary.c (binary_find_nearest_line_with_alt): New macro.
+	* coff-rs6000.c (_bfd_xcoff_find_nearest_line_with_alt): New macro.
+	(rs6000_xcoff64_vec): Add coff_find_nearest_line_with_alt.
+	* dwarf2.c (_bfd_dwarf2_find_nearest_line): Calls
+	_bfd_dwarf2_find_nearest_line_with_alt.
+	(_bfd_dwarf2_find_nearest_line_with_alt): New function. Implements the
+	former _bfd_dwarf2_find_nearest_line. Adds parameter alt_filename.
+	Attempt to open alt_filename and use it as the .dwz file if not NULL.
+	* elf-bfd.h (_bfd_elf_find_nearest_line_with_alt): New declaration.
+	* elf.c (_bfd_elf_find_nearest_line): Calls
+	_bfd_elf_find_nearest_line_with_alt.
+	(_bfd_elf_find_nearest_line_with_alt): New function. Implements the
+	former _bfd_elf_find_nearest_line. Adds parameter alt_filename.
+	* elf32-mips.c (bfd_elf32_find_nearest_line_with_alt): New macro.
+	* elf64-mips.c (bfd_elf64_find_nearest_line_with_alt): New macro.
+	* elfn32-mips.c (bfd_elf32_find_nearest_line_with_alt): New macro.
+	* elfxx-mips.h (_bfd_mips_elf_find_nearest_line_with_alt): New macro.
+	* elfxx-target.h (bfd_elfNN_find_nearest_line_with_alt): New macro.
+	* i386mdos.c (msdos_find_nearest_line_with_alt): New macro.
+	* ihex.c (ihex_find_nearest_line_with_alt): New macro.
+	* libbfd-in.h (_bfd_nosymbols_find_nearest_line_with_alt): New
+	declaration.
+	(_bfd_dwarf2_find_nearest_line_with_alt): New declaration.
+	* libbfd.h: Regenerate.
+	* libcoff-in.h (coff_find_nearest_line_with_alt): New macro.
+	* libcoff.h: Regenerate.
+	* libecoff.h (_bfd_ecoff_find_nearest_line_with_alt): New macro.
+	* mach-o.h (bfd_mach_o_find_nearest_line_with_alt): New macro.
+	* mmo.c (mmo_find_nearest_line_with_alt): New macro.
+	* pef.c (bfd_pef_find_nearest_line_with_alt): New macro.
+	* plugin.c (bfd_plugin_find_nearest_line_with_alt): New macro.
+	* ppcboot.c (ppcboot_find_nearest_line_with_alt): New macro.
+	* som.h (som_find_nearest_line_with_alt): New macro.
+	* srec.c (srec_find_nearest_line_with_alt): New macro.
+	* syms.c (_bfd_nosymbols_find_nearest_line_with_alt): New function.
+	* targets.c (BFD_JUMP_TABLE_SYMBOLS): Add symbol for
+	NAME##_find_nearest_line_with_alt.
+	(_bfd_find_nearest_line_with_alt): Add declaration.
+	* tekhex.c (tekhex_find_nearest_line_with_alt): New macro.
+	* verilog.c (verilog_find_nearest_line_with_alt): New macro.
+	* vms-alpha.c (_bfd_vms_find_nearest_line_with_alt): New macro.
+	* wasm-module.c (wasm_find_nearest_line_with_alt): New macro.
+	* xsym.c (bfd_sym_find_nearest_line_with_alt): New macro.
+
+2022-09-02  Frederic Cambus  <fred@statdns.com>
+
+	* config.bfd (arm-*-openbsd*): Restore target.
+
+2022-08-30  Nick Clifton  <nickc@redhat.com>
+
+	PR 29529
+	* dwarf2.c (struct line_info_table): Add new field:
+	use_dir_and_file_0.
+	(concat_filename): Use new field to help select the correct table
+	slot.
+	(read_formatted_entries): Do not skip entry 0.
+	(decode_line_info): Set new field depending upon the version of
+	DWARF being parsed.  Initialise filename based upon the setting of
+	the new field.
+
+2022-08-22  Frederic Cambus  <fred@statdns.com>
+
+	* config.bfd (aarch64-*-openbsd*): Add target.
+
+2022-08-03  Nick Clifton  <nickc@redhat.com>
+
+	PR 29389
+	* bfd.c (BFD_CLOSED_BY_CACHE): New bfd flag.
+	* cache.c (bfd_cache_delete): Set BFD_CLOSED_BY_DELETE on the
+	closed bfd.
+	(bfd_cache_lookup_worker): Clear BFD_CLOSED_BY_DELETE on the newly
+	reopened bfd.
+	* opncls.c (bfd_set_filename): Refuse to change the name of a bfd
+	that has been closed by bfd_cache_delete.  Mark changed bfds as
+	uncacheable.
+	* bfd-in2.h: Regenerate.
+
+2022-07-29  Nick Clifton  <nickc@redhat.com>
+
+	PR 29424
+	* dwarf2.c (read_attribute_value): Handle DW_FORM_rnglistx and
+	DW_FORM_loclistx.
+
+2022-07-26  Nick Clifton  <nickc@redhat.com>
+
+	* elfnn-loongarch.c (loongarch_elf_relocate_section): Fix
+	indentation.
+
+2022-07-08  Nick Clifton  <nickc@redhat.com>
+
+	* 2.39 branch created.
+
+2022-05-19  Yvan Roux  <yvan.roux@foss.st.com>
+
+	PR 25713
+	* bfdio.c (_bfd_real_fopen): Delete ccs string.
+
+2022-04-27  John Baldwin  <jhb@FreeBSD.org>
+
+	* elf.c (elfcore_grok_freebsd_note): Handle NT_ARM_TLS notes.
+
+2022-04-25  Nick Clifton  <nickc@redhat.com>
+
+	PR 29072
+	* elflink.c (bfd_elf_size_dynamic_sections): Display a note to the
+	user that the current ehaviour of creating an executable stack
+	because of a missing .note.GNU-stack section is deprecated and
+	will be changed in a future release.
+
+2022-04-20  ClÃ©ment Chigot  <clement.chigot@atos.net>
+
+	* coff-rs6000.c (xcoff_reloc_type_noop): Add info argument.
+	(xcoff_reloc_type_fail): Likewise.
+	(xcoff_reloc_type_pos): Likewise.
+	(xcoff_reloc_type_neg): Likewise.
+	(xcoff_reloc_type_rel): Likewise.
+	(xcoff_reloc_type_toc): Likewise.
+	(xcoff_reloc_type_ba): Likewise.
+	(xcoff_reloc_type_crel): Likewise.
+	(xcoff_reloc_type_tls): Likewise.
+	(xcoff_reloc_type_br): Add stub handler.
+	(xcoff_ppc_relocate_section): Add info to
+	xcoff_calculate_relocation.
+	(xcoff_stub_indirect_call_code): New constant.
+	(xcoff_stub_shared_call_code): Likewise.
+	(bfd_xcoff_backend_data): Add stub code fields.
+	(bfd_pmac_xcoff_backend_data): Likewise.
+	* coff64-rs6000.c (xcoff64_reloc_type_br): Add stub handler.
+	(xcoff64_ppc_relocate_section): Add info to
+	xcoff64_calculate_relocation.
+	(xcoff64_stub_indirect_call_code): New constant.
+	(xcoff64_stub_shared_call_code): Likewise.
+	(bfd_xcoff_backend_data): Add stub code fields.
+	(bfd_xcoff_aix5_backend_data): Likewise.
+	* libxcoff.h (struct xcoff_backend_data_rec): Add stub fields.
+	(bfd_xcoff_stub_indirect_call_code): New define.
+	(bfd_xcoff_stub_indirect_call_size): New define.
+	(bfd_xcoff_stub_shared_call_code): New define.
+	(bfd_xcoff_stub_shared_call_size): New define.
+	(xcoff_reloc_function): Add info argument.
+	(enum xcoff_stub_type): New enum.
+	(struct xcoff_stub_hash_entry): New structure.
+	* xcofflink.c (struct xcoff_link_hash_table): Add stub hash
+	table and params fields.
+	(xcoff_stub_hash_entry): New define.
+	(xcoff_stub_hash_lookup): New define.
+	(stub_hash_newfunc): New function.
+	(_bfd_xcoff_bfd_link_hash_table_free): Free the new stub hash
+	table.
+	(_bfd_xcoff_bfd_link_hash_table_create): Create the new stub
+	hash table.
+	(xcoff_link_add_symbols): Save rawsize for XTY_SD.
+	(bfd_xcoff_link_init): New function.
+	(xcoff_stub_csect_name): New function.
+	(xcoff_stub_get_csect_in_range): New function.
+	(xcoff_stub_name): New function.
+	(bfd_xcoff_get_stub_entry): New function.
+	(bfd_xcoff_type_of_stub): New function.
+	(xcoff_add_stub): New function.
+	(xcoff_build_one_stub): New function.
+	(bfd_xcoff_size_stubs): New function.
+	(bfd_xcoff_build_stubs): New function.
+	(xcoff_stub_create_relocations): New function.
+	(xcoff_link_input_bfd): Adapt relocations to stub.
+	(xcoff_write_global_symbol): Adapt to new TOC entries generated
+	for stubs.
+	(_bfd_xcoff_bfd_final_link): Handle stub file.
+	* xcofflink.h (struct bfd_xcoff_link_params): New structure.
+
+2022-04-20  ClÃ©ment Chigot  <clement.chigot@atos.net>
+
+	* coff-rs6000.c (_bfd_xcoff_put_ldsymbol_name): Write len in
+	ldinfo->strings instead of directly in the output_bfd.
+	* coff64-rs6000.c (_bfd_xcoff64_put_ldsymbol_name): Likewise.
+	* xcofflink.c (struct xcoff_link_hash_table): Remove ldrel_count
+	field. Add ldinfo field.
+	(xcoff_mark_symbol): Adjust to new ldinfo field.
+	(xcoff_mark): Likewise.
+	(bfd_xcoff_link_count_reloc): Likewise.
+	(xcoff_build_loader_section): Split into two functions: one that
+	build the loader section (this function) and one that only size
+	it...
+	(xcoff_size_loader_section): ... (this function).
+	(bfd_xcoff_size_dynamic_sections): Adapt to new ldinfo field.
+	Move the part where the dynamic sections are build to ...
+	(bfd_xcoff_build_dynamic_sections): ... this function.
+	* xcofflink.h: Add bfd_xcoff_build_dynamic_sections prototype.
+
+2022-04-13  Alexander von Gluck IV  <kallisti5@unixzen.com>
+
+	* config.bfd (x86-haiku): Add i386_pei_vec as a selectable format.
+
+2022-04-08  Nick Clifton  <nickc@redhat.com>
+
+	PR 29038
+	* coffgen.c (coff_find_nearest_line_with_names): Fix typo
+	retrieving saved bias.
+
+2022-04-07  Mark Harmstone  <mark@harmstone.com>
+
+	* coff-i386.c (in_reloc_p): Add R_SECTION.
+	(howto_table): Add R_SECTION.
+	(coff_pe_i386_relocation_section): Add support for R_SECTION.
+	(coff_i386_reloc_type_lookup): Add support for
+	BFD_RELOC_16_SECCIDX.
+	* coff-x86_64.c (in_reloc_p): Add R_SECTION.
+	(howto_table): Add R_SECTION.
+	(coff_pe_amd64_relocation_section): Add support for R_SECTION.
+	(coff_amd64_reloc_type_lookup): Add support for
+	BFD_RELOC_16_SECCIDX.
+	* reloc.c: Add BFD_RELOC_16_SECIDX.
 	* bfd-in2.h: Regenerate.
-	* aout-cris.c: Update throughout to use bfd_asymbol_section.
-	* aoutx.h: Likewise.
-	* cofflink.c: Likewise.
-	* dwarf2.c: Likewise.
-	* ecoff.c: Likewise.
-	* elf.c: Likewise.
-	* elf32-arm.c: Likewise.
-	* elf32-mips.c: Likewise.
-	* elf32-score.c: Likewise.
-	* elf32-score7.c: Likewise.
-	* elfn32-mips.c: Likewise.
-	* elfnn-aarch64.c: Likewise.
-	* elfxx-mips.c: Likewise.
-	* linker.c: Likewise.
-	* pdp11.c: Likewise.
-	* elf64-mmix.c (mmix_elf_reloc): Part expand bfd_get_output_section.
+	* libbfd.h: Regenerate.
+
+2022-04-01  John Baldwin  <jhb@FreeBSD.org>
+
+	* elf-bfd.h (elfcore_write_x86_segbases): New.
+	* elf.c (elfcore_grok_freebsd_note): Add pseudosections for
+	NT_FREEBSD_X86_SEGBASES register notes.
+	(elfcore_write_x86_segbases): New.
+	(elfcore_write_register_note): Write NT_FREEBSD_X86_SEGBASES
+	register notes.
 
-2019-09-18  Simon Marchi  <simon.marchi@polymtl.ca>
+2022-04-01  John Baldwin  <jhb@FreeBSD.org>
 
+	* elf.c (elfcore_grok_freebsd_note): Remove checks for namesz.
+
+2022-03-22  Steiner H Gunderson  <steinar+sourceware@gunderson.no>
+
+	* dwarf2.c (_bfd_dwarf2_find_nearest_line): if a function name is
+	found, but no line number info, then return a result of 2.
+
+2022-03-21  Steiner H Gunderson  <steinar+sourceware@gunderson.no>
+
+	PR 28978
+	* dwarf2.c (scan_unit_for_symbols): When performing second pass,
+	check to see if the function or variable being processed is the
+	same as the previous one.
+
+2022-03-18  Viorel Preoteasa  <viorel.preoteasa@gmail.com>
+
+	PR 28924
+	* elf32-arm.c (THM_MAX_FWD_BRANCH_OFFSET): Fix definition.
+	(THM2_MAX_FWD_BRANCH_OFFSET): Likewise.
+
+2022-03-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* Makefile.am (ALL_MACHINES, ALL_MACHINES_CFILES):
+	Add cpu-amdgcn.c.
+	(BFD64_BACKENDS): Add elf64-amdgcn.lo.
+	(BFD64_BACKENDS_CFILES): Add elf64-amdgcn.c.
 	* Makefile.in: Re-generate.
+	* cpu-amdgcn.c: New.
+	* elf64-amdgcn.c: New.
+	* archures.c (bfd_architecture): Add bfd_arch_amdgcn and related
+	mach defines.
+	(bfd_amdgcn_arch): New.
+	(bfd_archures_list): Add bfd_amdgcn_arch.
+	* bfd-in2.h: Re-generate.
+	* config.bfd: Handle amdgcn* target.
+	* configure.ac: Handle amdgcn_elf64_le_vec.
 	* configure: Re-generate.
-	* doc/Makefile.in: Re-generate.
+	* elf-bfd.h (elf_target_id): Add AMDGCN_ELF_DATA.
+	* targets.c (amdgcn_elf64_le_vec): New.
+	(_bfd_target_vector): Add amdgcn_elf64_le_vec.
 
-2019-09-18  Alan Modra  <amodra@gmail.com>
+2022-03-01  TorbjÃ¶rn Svensson  <torbjorn.svensson@st.com>
+	    Fred Eisele  <fredrick.eisele@gmail.com>
 
-	* aoutx.h (slurp_symbol_table): Don't set symcount using bfd_get
-	macros.
-	* pdp11.c (slurp_symbol_table): Likewise.
-	* som.c (som_slurp_symbol_table): Likewise.
-	* coff-ppc.c (ppc_bfd_coff_final_link): Likewise.
-	* coffcode.h (coff_slurp_symbol_table): Likewise.
-	* cofflink.c (_bfd_coff_final_link): Likewise.
-	* ecoff.c (ecoff_slurp_symbolic_header): Likewise.
-	(_bfd_ecoff_slurp_symbolic_info): Likewise.
-	(_bfd_ecoff_slurp_symbol_table): Likewise.
-	(_bfd_ecoff_bfd_final_link): Likewise.
-	* elf.c (_bfd_elf_canonicalize_symtab): Likewise.
-	* elflink.c (elf_link_output_symstrtab): Likewise.
-	(bfd_elf_final_link): Likewise.
-	* peicode.h (pe_ILF_build_a_bfd): Likewise.
-	* xcofflink.c (_bfd_xcoff_bfd_final_link): Likewise.
-	* aoutx.h (some_aout_object_p, slurp_symbol_table): Don't set
-	start_address or symcount using bfd_get macros.
-	* coffgen.c (coff_real_object_p): Likewise.
-	* pdp11.c (some_aout_object_p, slurp_symbol_table): Likewise.
-	* som.c (som_object_setup, som_slurp_symbol_table): Likewise.
-	* elfcore.h (elf_core_file_p): Don't set start_address using
-	bfd_get macro.
-	* elf.c (_bfd_elf_canonicalize_dynamic_symtab): Don't set dynsymcount
-	using bfd_get macro.
-	* bfd.c (bfd_set_file_flags): Don't set flags using bfd_get macro.
-	* linker.c (bfd_generic_link_read_symbols): Don't set outsymbols
-	or symcount using bfd_get macros.
-	(_bfd_generic_final_link, generic_add_output_symbol): Likewise.
-	* syms.c (bfd_set_symtab): Likewise.
-	* vms-alpha.c (alpha_vms_bfd_final_link): Likewise.
-	* archive.c (do_slurp_bsd_armap): Don't set has_armap using
-	bfd_has_map macro.
-	(do_slurp_coff_armap, bfd_slurp_armap): Likewise.
-	* archive64.c (_bfd_archive_64_bit_slurp_armap): Likewise.
-	* coff-rs6000.c (_bfd_xcoff_slurp_armap): Likewise.
-	* coff64-rs6000.c (xcoff64_slurp_armap): Likewise.
-	* ecoff.c (_bfd_ecoff_slurp_armap): Likewise.
-	* som.c (som_slurp_armap): Likewise.
+	PR 25713
+	* bfdio.c (_bfd_real_fopen): Fix typo.
 
-2019-09-18  Alan Modra  <amodra@gmail.com>
+2022-03-01  Nick Clifton  <nickc@redhat.com>
 
-	* archures.c (bfd_get_arch): Make param const.
-	(bfd_get_mach, bfd_arch_bits_per_byte): Likewise.
-	(bfd_arch_bits_per_address, bfd_octets_per_byte): Likewise.
-	* bfd-in2.h: Regenerate.
+	PR 28848
+	* elf32-arm.c (elf32_arm_merge_eabi_attributes): If the first
+	input bfd has a Tag_ABI_HardFP_use set to 3 but does not also have
+	TAG_FP_arch set then reset the TAG_ABI_HardFP_use.
 
-2019-09-18  Alan Modra  <amodra@gmail.com>
+2022-02-28  TorbjÃ¶rn Svensson  <torbjorn.svensson@st.com>
+	    Fred Eisele  <fredrick.eisele@gmail.com>
 
-	* bfd-in.h (carsym.name): Make const.
-	* reloc.c (struct reloc_howto_struct.name): Likewise.
-	* targets.c (bfd_target.name): Likewise.!
-	* bfd.c (bfd_get_sign_extend_vma): Make variable const.
-	* som.c (som_bfd_fill_in_ar_symbols): Use an intermediary variable
-	when setting carsym.name.
-	* bfd-in2.h: Regenerate.
+	PR 25713
+	* bfdio.c (_bfd_real_fopen): Fix handling of paths longer than 260
+	characters on Windows hosts.
 
-2019-09-18  Alan Modra  <amodra@gmail.com>
+2022-02-28  Nick Clifton  <nickc@redhat.com>
 
-	* mach-o.c (bfd_mach_o_fat_member_init): Likewise.  Replace
-	xstrdup and xmalloc with bfd_strdup and bfd_malloc.  Return an
-	error status.  Adjust calls.
-	* vms-lib.c (_bfd_vms_lib_get_module): Test mhd->id earlier.
-	Close bfd on failure.  Replace xstrdup/bfd_alloc use with
-	bfd_malloc.  Use bfd_set_filename.
-
-2019-09-18  Alan Modra  <amodra@gmail.com>
-
-	* elf64-ppc.c (must_be_dyn_reloc): Return 0 for TOC16 relocs.
-	(ppc64_elf_check_relocs): Support dynamic/copy relocs for TOC16.
-	(ppc64_elf_adjust_dynamic_symbol): Don't keep dynamic reloc when
-	needs_copy even if all relocs are in rw sections.
-	(dec_dynrel_count): Handle TOC16 relocs.
-	(ppc64_elf_relocate_section): Support dynamic relocs for TOC16.
-	(ppc64_elf_finish_dynamic_symbol): Adjust to handle needs_copy
-	semantic change.
+	PR 28886
+	* config.bfd: Update error message for obsolete configurations.
 
-2019-09-16  Phil Blundell  <pb@pbcl.net>
+2022-02-17  Nick Clifton  <nickc@redhat.com>
 
-	* version.m4: Set version to 2.33.50.
-	* Makefile.in, configure, doc/Makefile.in: Regenerated.
+	* po/sr.po: Updated Serbian translation.
 
-2019-09-11  Tom Tromey  <tom@tromey.com>
+2022-02-16  Fangrui Song  <maskray@google.com>
+	Nick Clifton  <nickc@redhat.com>
 
-	* opncls.c (bfd_set_filename): New function.
-	* bfd-in2.h: Regenerate.
+	PR ld/28841
+	* bfd-in2.h (struct bfd_section): Add type.
+	(discarded_section): Add field.
+	* elf.c (elf_fake_sections): Handle bfd_section::type.
+	* section.c (BFD_FAKE_SECTION): Add field.
+	* mri.c (mri_draw_tree): Update function call.
 
-2019-09-11  Alan Modra  <amodra@gmail.com>
+2022-02-11  Michael Forney  <mforney@mforney.org>
 
-	* targets.c (struct bfd_target): Add _bfd_group_name.
-	(BFD_JUMP_TABLE): Likewise.
-	* coffgen.c (bfd_coff_group_name): New function.
-	* elf.c (bfd_elf_group_name): New function.
-	* linker.c (_bfd_nolink_bfd_group_name): New function.
-	* section.c (bfd_generic_group_name): New function.
-	* elf-bfd.h (bfd_elf_group_name): Declare.
-	* libbfd-in.h (_bfd_nolink_bfd_group_name): Declare.
-	* libcoff-in.h (bfd_coff_group_name): Declare.
-	* aout-target.h (MY_bfd_group_name): Define.
-	* aout-tic30.c (MY_bfd_group_name): Define.
-	* bfd.c (bfd_group_name): Define.
-	* binary.c (binary_bfd_group_name): Define.
-	* coff-alpha.c (_bfd_ecoff_bfd_group_name): Define.
-	* coff-mips.c (_bfd_ecoff_bfd_group_name): Define.
-	* coff-rs6000.c (_bfd_xcoff_bfd_group_name): Define.
-	* coffcode.h (coff_bfd_group_name): Define.
-	* elfxx-target.h (bfd_elfNN_bfd_group_name): Define.
-	* i386msdos.c (msdos_bfd_group_name): Define.
-	* ihex.c (ihex_bfd_group_name): Define.
-	* mach-o-target.c (bfd_mach_o_bfd_group_name): Define.
-	* mmo.c (mmo_bfd_group_name): Define.
-	* pef.c (bfd_pef_bfd_group_name): Define.
-	* plugin.c (bfd_plugin_bfd_group_name): Define.
-	* ppcboot.c (ppcboot_bfd_group_name): Define.
-	* som.c (som_bfd_group_name): Define.
-	* srec.c (srec_bfd_group_name): Define.
-	* tekhex.c (tekhex_bfd_group_name): Define.
-	* verilog.c (verilog_bfd_group_name): Define.
-	* vms-alpha.c (vms_bfd_group_name, alpha_vms_bfd_group_name): Define.
-	* xsym.c (bfd_sym_bfd_group_name): Define.
-	* coff64-rs6000.c (rs6000_xcoff64_vec): Init new field.
-	(rs6000_xcoff64_aix_vec): Likewise.
-	* bfd-in2.h: Regenerate.
-	* libbfd.h: Regenerate.
-	* libcoff.h: Regenerate.
+        * bfd.c (bfd_set_gp_value): Remove return with expression
+        in void function.
 
-2019-09-10  Nick Clifton  <nickc@redhat.com>
+2022-02-09  Nick Clifton  <nickc@redhat.com>
 
-	PR 24907
-	* archures.c (bfd_arch_info_type): Add max_reloc_offset_into_insn
-	field.
-	(bfd_default_arch_struct): Initialise the new field.
-	* bfd-in2.h: Regenerate.
-	* cpu-aarch64.c: Initialise the new field.
-	* cpu-alpha.c: Likewise.
-	* cpu-arc.c: Likewise.
-	* cpu-arm.c: Likewise.
-	* cpu-avr.c: Likewise.
-	* cpu-bfin.c: Likewise.
-	* cpu-bpf.c: Likewise.
-	* cpu-cr16.c: Likewise.
-	* cpu-cr16c.c: Likewise.
-	* cpu-cris.c: Likewise.
-	* cpu-crx.c: Likewise.
-	* cpu-csky.c: Likewise.
-	* cpu-d10v.c: Likewise.
-	* cpu-d30v.c: Likewise.
-	* cpu-dlx.c: Likewise.
-	* cpu-epiphany.c: Likewise.
-	* cpu-fr30.c: Likewise.
-	* cpu-frv.c: Likewise.
-	* cpu-ft32.c: Likewise.
-	* cpu-h8300.c: Likewise.
-	* cpu-hppa.c: Likewise.
-	* cpu-i386.c: Likewise.
-	* cpu-ia64.c: Likewise.
-	* cpu-iamcu.c: Likewise.
-	* cpu-ip2k.c: Likewise.
-	* cpu-iq2000.c: Likewise.
-	* cpu-k1om.c: Likewise.
-	* cpu-l1om.c: Likewise.
-	* cpu-lm32.c: Likewise.
-	* cpu-m10200.c: Likewise.
-	* cpu-m10300.c: Likewise.
-	* cpu-m32c.c: Likewise.
-	* cpu-m32r.c: Likewise.
-	* cpu-m68hc11.c: Likewise.
-	* cpu-m68hc12.c: Likewise.
-	* cpu-m68k.c: Likewise.
-	* cpu-m9s12x.c: Likewise.
-	* cpu-m9s12xg.c: Likewise.
-	* cpu-mcore.c: Likewise.
-	* cpu-mep.c: Likewise.
-	* cpu-metag.c: Likewise.
-	* cpu-microblaze.c: Likewise.
-	* cpu-mips.c: Likewise.
-	* cpu-mmix.c: Likewise.
-	* cpu-moxie.c: Likewise.
-	* cpu-msp430.c: Likewise.
-	* cpu-mt.c: Likewise.
-	* cpu-nds32.c: Likewise.
-	* cpu-nfp.c: Likewise.
-	* cpu-nios2.c: Likewise.
-	* cpu-ns32k.c: Likewise.
-	* cpu-or1k.c: Likewise.
-	* cpu-pdp11.c: Likewise.
-	* cpu-pj.c: Likewise.
-	* cpu-plugin.c: Likewise.
-	* cpu-powerpc.c: Likewise.
-	* cpu-pru.c: Likewise.
-	* cpu-riscv.c: Likewise.
-	* cpu-rl78.c: Likewise.
-	* cpu-rs6000.c: Likewise.
-	* cpu-rx.c: Likewise.
-	* cpu-s12z.c: Likewise.
-	* cpu-s390.c: Likewise.
-	* cpu-score.c: Likewise.
-	* cpu-sh.c: Likewise.
-	* cpu-sparc.c: Likewise.
-	* cpu-spu.c: Likewise.
-	* cpu-tic30.c: Likewise.
-	* cpu-tic4x.c: Likewise.
-	* cpu-tic54x.c: Likewise.
-	* cpu-tic6x.c: Likewise.
-	* cpu-tic80.c: Likewise.
-	* cpu-tilegx.c: Likewise.
-	* cpu-tilepro.c: Likewise.
-	* cpu-v850.c: Likewise.
-	* cpu-v850_rh850.c: Likewise.
-	* cpu-vax.c: Likewise.
-	* cpu-visium.c: Likewise.
-	* cpu-wasm32.c: Likewise.
-	* cpu-xc16x.c: Likewise.
-	* cpu-xgate.c: Likewise.
-	* cpu-xstormy16.c: Likewise.
-	* cpu-xtensa.c: Likewise.
-	* cpu-z80.c: Likewise.
-	* cpu-z8k.c: Likewise.
-
-2019-09-09  Phil Blundell  <pb@pbcl.net>
-
-	binutils 2.33 branch created.
-
-2019-09-06  Alan Modra  <amodra@gmail.com>
-
-	* aout-target.h (object_p): Formatting.
-	* bfd-in.h (bfd_get_filename): Don't cast to char*.
-	* corefile.c (generic_core_file_matches_executable_p): Constify
-	variables and remove cast.
-	* bfd-in2.h: Regenerate.
+	* config.bfd: Move pending obsolesence targets into the definitely
+	obsolete list.
 
-2019-09-05  Alan Modra  <amodra@gmail.com>
+2022-02-02  Nick Clifton  <nickc@redhat.com>
 
-	* elf64-ppc.c (ppc64_elf_check_relocs): Interpret an addend in
-	GOT_PCREL and PLT_PCREL relocs as affecting the value stored
-	in the GOT/PLT entry rather than affecting the offset to that
-	GOI/PLT entry.
-	(ppc64_elf_edit_toc, ppc64_elf_relocate_section): Likewise.
+	PR 28834
+	* dwarf2.c (read_section): Change the heuristic that checks for
+	overlarge dwarf debug info sections.
 
-2019-09-05  Alan Modra  <amodra@gmail.com>
+2022-02-02  Stafford Horne  <shorne@gmail.com>
 
-	* elf64-ppc.c (xlate_pcrel_opt): Handle prefix loads and stores
-	in second instruction.
-	(ppc64_elf_relocate_section): Likewise.
+	PR 28735
+	* elf32-or1k.c (or1k_elf_got16_no_overflow_howto): Define.
+	(or1k_elf_relocate_section): Use new howto instead of trying to
+	mask out relocation bits.
 
-2019-09-05  Alan Modra  <amodra@gmail.com>
+2022-01-24  Roland McGrath  <mcgrathr@google.com>
 
-	PR 24955
-	* libbfd-in.h (bfd_strdup): New inline function.
-	* archive.c (_bfd_get_elt_at_filepos): Use bfd_strdup.  Close
-	bfd on error.
-	* elfcode.h (_bfd_elf_bfd_from_remote_memory): Use bfd_strdup.
-	* opncls.c (bfd_fopen): Use bfd_strdup.  Close fd and stream
-	on error.
-	(bfd_openstreamr): Use bfd_strdup.
-	(bfd_openr_iovec, bfd_openw, bfd_create): Likewise.
-	* plugin.c (try_load_plugin): Use bfd_malloc.
-	* libbfd.h: Regenerate.
+	* doc/local.mk (%D%/bfdver.texi): Add mkdir command.
 
-2019-09-02  Alan Modra  <amodra@gmail.com>
+2022-01-24  Nick Clifton  <nickc@redhat.com>
 
-	PR 11983
-	* dwarf2.c (_bfd_dwarf2_slurp_debug_info): Free debug_filename
-	on success.  Tidy.
-	(read_alt_indirect_string): Likewise.
-	(read_alt_indirect_ref): Likewise.
+	* po/fr.po: Updated French translation.
+	* po/ro.po: Updated Romanian translation.
+	* po/uk.po: Updated Ukranian translation.
 
-2019-08-31  Jim Wilson  <jimw@sifive.com>
+2022-01-22  Nick Clifton  <nickc@redhat.com>
 
-	PR 23825
-	* elfnn-riscv.c (riscv_elf_create_dynamic_sections): Add SEC_LOAD,
-	SEC_DATA, and SEC_HAS_CONTENTS to .tdata.dyn section.
+	* version.m4: Change to 2.38.50.
+	* configure: Regenerate.
+	* po/bfd.pot: Regenerate.
 
-2019-08-30  Jim Wilson  <jimw@sifive.com>
+2022-01-22  Nick Clifton  <nickc@redhat.com>
 
-	* elfnn-riscv.c (riscv_elf_relocate_section): For unresolvable reloc
-	error, call bfd_set_error, set ret to FALSE, and goto out label.
+	* 2.38 release branch created.
 
-2019-08-30  H.J. Lu  <hongjiu.lu@intel.com>
+2022-01-17  Nick Clifton  <nickc@redhat.com>
 
-	PR ld/24951
-	* archive.c (_bfd_get_elt_at_filepos): Copy BFD_COMPRESS,
-	BFD_DECOMPRESS and BFD_COMPRESS_GABI flags for thin archive.
+	* Makefile.in: Regenerate.
+	* configure: Regenerate.
+	* doc/Makefile.in: Regenerate.
+	* po/bfd.pot: Regenerate.
 
-2019-08-29  Alan Modra  <amodra@gmail.com>
+2021-12-15  Nikita Popov  <npv1310@gmail.com>
 
-	PR 24697
-	* elf32-ppc.c (ppc_elf_check_relocs): Call bad_shared_reloc
-	when !bfd_link_executable for R_PPC_EMB_SDA2I16 and
-	R_PPC_EMB_SDA2REL.  Don't call bad_shared_reloc for any other
-	reloc.
+	PR 28687
+	* dwarf1.c (parse_die): Fix undefined behaviour in range tests.
 
-2019-08-29  Alan Modra  <amodra@gmail.com>
+2021-11-17  Nick Clifton  <nickc@redhat.com>
 
-	* elf64-ppc.c (xlate_pcrel_opt): Add poff parameter.  Allow offset
-	on second insn, return it in poff.
-	(ppc64_elf_relocate_section): Add offset to paddi addend for
-	PCREL_OPT.
+	PR 28452
+	* elf.c (assign_file_positions_for_non_load_sections): Replace
+	assertion with a warning message.
 
-2019-08-28  Jim Wilson  <jimw@sifive.com>
+2021-10-19  Nick Clifton  <nickc@redhat.com>
 
-	* elfnn-riscv.c (_bfd_riscv_relax_lui): Add check to exclude abs
-	section when setting max_alignment.  Update comment.
-	(_bfd_riscv_relax_pc): Likewise.
+	* linker.c (_bfd_generic_link_add_one_symbol): Test for a NULL
+	name before checking to see if the symbol is __gnu_lto_slim.
+	* archive.c (_bfd_compute_and_write_armap): Likewise.
 
-2019-08-29  Alan Modra  <amodra@gmail.com>
+2021-09-27  Nick Alcock  <nick.alcock@oracle.com>
 
-	PR 24891
-	* bfd.c (struct bfd): Add no_element_cache.
-	* archive.c (_bfd_get_elt_at_filepos): Don't add element to
-	archive cache when no_element_cache.
-	(bfd_generic_archive_p): Set no_element_cache when opening first
-	element to check format.  Close first element too.
-	(do_slurp_bsd_armap): Don't zero ardata->cache here.
-	* bfd-in2.h: Regenerate.
+	* configure: Regenerate.
 
-2019-08-24  Alan Modra  <amodra@gmail.com>
+2021-09-15  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* elf64-ppc.c (ppc64_elf_edit_toc): Exclude undefined weak
-	symbols from GOT optimisation.
+	* archures.c (bfd_arch_list): Use 'char *' instead of 'char **'
+	when calculating space for a string list.
 
-2019-08-23  Stafford Horne  <shorne@gmail.com>
+2021-09-014  Cupertino Miranda  <cmiranda@synopsys.com>
+           Claudiu Zissulescu  <claziss@synopsys.com>
 
-	* elf32-or1k.c (or1k_elf_finish_dynamic_symbol): Use correct value for
-	PLT GOT entries.
+	* arc-got.h (arc_static_sym_data): New structure.
+	(get_static_sym_data): New function.
+	(relocate_fix_got_relocs_for_got_info): Move the computation fo
+	symbol value and section to above introduced function, and use
+	this new function.
 
-2019-08-23  Nick Clifton  <nickc@redhat.com>
+2021-09-07  Luis Machado  <luis.machado@linaro.org>
 
-	PR 24456
-	* elf.c (bfd_section_from_shdr): Issue an informative warning
-	message and continue processing other sections after encountering
-	a reloc section for a section which already has other relocs
-	associated with it.
+	Revert: [AArch64] MTE corefile support
 
-2019-08-23  Alan Modra  <amodra@gmail.com>
+	2021-05-21  Luis Machado  <luis.machado@linaro.org>
 
-	PR 24933
-	* elfxx-x86.c (_bfd_x86_elf_get_synthetic_symtab): Don't exit
-	on error without freeing plts[] contents.
+	* elf.c (elfcore_make_memtag_note_section): New function.
+	(elfcore_grok_note): Handle NT_MEMTAG note types.
 
-2019-08-22  Dennis Zhang  <dennis.zhang@arm.com>
+2021-09-07  Nick Clifton  <nickc@redhat.com>
 
-	* cpu-arm.c: New entries for Cortex-M35P, Cortex-A77, Cortex-A76AE.
+	PR 28305
+	* elf32-xtensa.c (elf_xtensa_do_reloc): Add check for put of range
+	reloc.
 
-2019-08-22  Nick Clifton  <nickc@redhat.com>
+	PR 28303
+	* elfxx-riscv.c (riscv_elf_add_sub_reloc): Add check for out of
+	range relocs.
 
-	PR 24922
-	* pei-x86_64.c (pex64_xdata_print_uwd_codes): Add checks before
-	reading data from extra records.
+2021-08-10  Nick Clifton  <nickc@redhat.com>
 
-2019-08-22  Tamar Christina  <tamar.christina@arm.com>
+	* po/sr.po: Updated Serbian translation.
 
-	PR ld/24601
-	* elfnn-aarch64.c (aarch64_relocate): Handle weak TLS and undefined TLS.
-	Also Pass input_bfd to _bfd_aarch64_elf_resolve_relocation.
-	* elfxx-aarch64.c (_bfd_aarch64_elf_resolve_relocation): Use it.
-	* elfxx-aarch64.h (_bfd_aarch64_elf_resolve_relocation): Emit warning
-	for weak TLS.
+2021-07-18  Nick Clifton  <nickc@redhat.com>
 
-2019-08-22  Alan Modra  <amodra@gmail.com>
+	* config.bfd: Move pending obsoletion targets to obsolete list.
 
-	* elf32-arm.c (cmse_scan): Don't use ARM_GET_SYM_CMSE_SPCL,
-	instead recognize CMSE_PREFIX in symbol name.
-	(elf32_arm_gc_mark_extra_sections): Likewise.
-	(elf32_arm_filter_cmse_symbols): Don't test ARM_GET_SYM_CMSE_SPCL.
-	(elf32_arm_swap_symbol_in): Don't invoke ARM_SET_SYM_CMSE_SPCL.
+2021-07-16  Giulio Benetti  <giulio.benetti@benettiengineering.com>
 
-2019-08-20  Dennis Zhang  <dennis.zhang@arm.com>
+	* elf32-or1k.c (or1k_elf_relocate_section): Use a separate entry
+	in switch case R_OR1K_INSN_REL_26 where we need to check for
+	!SYMBOL_CALLS_LOCAL() instead of !SYMBOL_REFERENCES_LOCAL().
 
-	* cpu-aarch64.c: New entries for Cortex-A34, Cortex-A65,
-	 Cortex-A77, cortex-A65AE, and Cortex-A76AE.
+2021-07-14  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-2019-08-20  Tamar Christina  <tamar.christina@arm.com>
+	* libxcoff.h (struct xcoff_dwsect_name): Add DWARF name.
+	* coff-rs6000.c (xcoff_dwsect_names): Update.
+	* coffcode.h (sec_to_styp_flags): Likewise.
+	(coff_new_section_hook): Likewise.
 
-	* elf32-arm.c (elf32_thumb2_plt_entry, elf32_arm_plt_thumb_stub,
-	elf32_arm_stub_long_branch_v4t_thumb_thumb,
-	elf32_arm_stub_long_branch_v4t_thumb_arm,
-	elf32_arm_stub_short_branch_v4t_thumb_arm,
-	elf32_arm_stub_long_branch_v4t_thumb_arm_pic,
-	elf32_arm_stub_long_branch_v4t_thumb_thumb_pic,
-	elf32_arm_stub_long_branch_v4t_thumb_tls_pic): Change nop to branch to
-	previous instruction.
+2021-07-10  Alan Modra  <amodra@gmail.com>
 
-2019-08-19  Tom Tromey  <tromey@adacore.com>
+	* dwarf2.c (read_address): Remove accidental commit.
+	(read_ranges): Compare offset rather than pointers.
 
-	* dwarf2.c (_bfd_dwarf2_find_symbol_bias): Create hash table
-	holding symbols.
+2021-07-08  Nick Clifton  <nickc@redhat.com>
 
-2019-08-19  Alan Modra  <amodra@gmail.com>
+	* po/pt.po: Updated Portuguese translation.
 
-	* elf64-ppc.c (struct ppc64_elf_obj_tdata): Rename has_gotrel
-	to has_optrel.
-	(struct _ppc64_elf_section_data): Likewise.
-	(ppc64_elf_check_relocs): Set has_optrel for more relocs.
-	(ppc64_elf_edit_toc): Do ha/lo insn checks in GOT loop rather
-	than TOC loop.  Check PLT16 insns too.
+2021-07-07  Nick Clifton  <nickc@redhat.com>
 
-2019-08-16  H.J. Lu  <hongjiu.lu@intel.com>
+	* elfcode.h (elf_swap_symbol_out): Revert accidental change that
+	removed an abort if the shndx pointer is NULL.
 
-	PR ld/24905
-	* elf64-x86-64.c (elf_x86_64_check_relocs): Move PIC check for
-	PC-relative relocations back to ...
-	(elf_x86_64_relocate_section): Here.
+2021-07-07  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
-2019-08-16  Martin Liska  <mliska@suse.cz>
+	* sysdep.h [!ENABLE_NLS]: Prevent inclusion of <libintl.h> on
+	Solaris.
 
-	PR ld/24912
-	* elflink.c: Report error only for not relocatable.
-	* linker.c (_bfd_generic_link_add_one_symbol): Do not handle
-	here lto_slim_object as it's handled in caller.
+2021-07-07  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
-2019-08-16  Alan Modra  <amodra@gmail.com>
+	* configure.ac: Check for strnlen declaration.
+	* configure, config.in: Regenerate.
 
-	* elf32-ppc.c (ppc_elf_relocate_section): Optimize unaligned relocs.
+2021-07-07  Nick Clifton  <nickc@redhat.com>
 
-2019-08-15  Jim Wilson  <jimw@sifive.com>
+	PR 28051
+	* coff-rs6000.c (xcoff_reloc_type_tls): Reformat error messages in
+	order to fix problems when translating.
+	* cofflink.c (_bfd_coff_write_global_sym): Likewise.
+	* elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub):
+	Likewise.
+	* po/bfd.pot: Regenerate.
 
-	* elfnn-riscv.c (perform_relocation) <R_RISCV_RVC_LUI>: If
-	RISCV_CONST_HIGH_PART (value) is zero, then convert c.lui instruction
-	to c.li instruction, and use ENCODE_RVC_IMM to set value.
+2021-07-06  Michael Matz  <matz@suse.de>
 
-2019-08-15  Tom Tromey  <tromey@adacore.com>
+	PR ld/28021
+	* elfnn-riscv.c (riscv_relax_delete_bytes): Check for any
+	versioning.
 
-	* dwarf2.c (scan_unit_for_symbols): Check for end of CU, not end
-	of section.
+2021-07-06  Alan Modra  <amodra@gmail.com>
 
-2019-08-14  Alan Modra  <amodra@gmail.com>
+	PR 28055
+	* elf64-bpf.c (bpf_elf_generic_reloc): Add missing ATTRIBUTE_UNUSED.
 
-	PR 24623
-	* dwarf2.c (stash_comp_unit): New function, extracted from..
-	(_bfd_dwarf2_find_nearest_line): ..here.
-	(find_abstract_instance): Parse comp units and decode line info
-	as needed.
+2021-07-05  Alan Modra  <amodra@gmail.com>
+
+	PR 28055
+	* elf64-bpf.c (bpf_elf_generic_reloc): Use correct bfd for bfd_put
+	and bfd_put_32 calls.  Correct section limit checks.
+
+2021-07-03  Nick Clifton  <nickc@redhat.com>
+
+	* version.m4: Update version number.
+	* configure: Regenerate.
+	* po/opcodes.pot: Regenerate.
 
-2019-08-14  Alan Modra  <amodra@gmail.com>
+2021-07-03  Nick Clifton  <nickc@redhat.com>
 
-	* dwarf2.c (comp_unit_maybe_decode_line_info): Declare.
-	(comp_unit_find_nearest_line): Use it here..
-	(_bfd_dwarf2_find_symbol_bias): ..and here.
+	* 2.37 release branch created.
 
-2019-08-14  Alan Modra  <amodra@gmail.com>
+2021-07-02  Nick Clifton  <nickc@redhat.com>
 
-	* dwarf2.c (_bfd_dwarf2_find_nearest_line): Remove addr_size parameter.
-	* libbfd-in.h  (_bfd_dwarf2_find_nearest_line): Update prototype.
-	* coffgen.c (coff_find_nearest_line_with_names): Adjust
-	_bfd_dwarf2_find_nearest_line calls.
-	* elf.c (_bfd_elf_find_nearest_line, _bfd_elf_find_line): Likewise.
-	* elf32-arm.c (elf32_arm_find_nearest_line): Likewise.
-	* elf64-alpha.c (elf64_alpha_find_nearest_line): Likewise.
-	* elfnn-aarch64.c (elfNN_aarch64_find_nearest_line): Likewise.
-	* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Likewise.
-	* mach-o.c (bfd_mach_o_find_nearest_line): Likewise.
+	PR 28046
+	* dwarf2.c (read_ranges): Check that range_ptr does not exceed
+	range_end.
+
+2021-06-30  YunQiang Su  <yunqiang.su@cipunited.com>
+
+	PR mips/28009
+	* bfd/elfxx-mips.c (_bfd_mips_elf_section_from_shdr,
+	_bfd_mips_elf_fake_sections): Mark LTO debug info as
+	SHT_MIPS_DWARF.
+
+2021-06-29  Nick Clifton  <nickc@redhat.com>
+
+	* config.bfd (obsolete configurations): Add netbsdpe.
+
+2021-06-22  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_pcrel_hi_reloc): Added field to store
+	the original relocation type, in case the type is converted to
+	R_RISCV_HI20.
+	(riscv_pcrel_lo_reloc): Removed unused name field.
+	(riscv_pcrel_relocs): Added comments.
+	(riscv_zero_pcrel_hi_reloc): Removed unused input_bfd.
+	(riscv_record_pcrel_hi_reloc): Updated.
+	(riscv_record_pcrel_lo_reloc): Likewise.
+	(riscv_resolve_pcrel_lo_relocs): Likewise.  Check the original
+	type of auipc, to make sure the %pcrel_lo without any addends.
+	Otherwise, report dangerous relocation error.
+	(riscv_elf_relocate_section): Updated above functions are changed.
+	For R_RISCV_GOT_HI20, report dangerous relocation error when addend
+	isn't zero.
+
+2021-06-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27998
+	* elfxx-x86.c (elf_x86_allocate_dynrelocs): Count PLT for GOTOFF
+	relocation against IFUNC symbols.
+	(_bfd_x86_elf_adjust_dynamic_symbol): Likewise.
+
+2021-06-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elflink.c (bfd_elf_final_link): Correct DT_TEXTREL warning in
+	PDE.
+
+2021-06-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-properties.c (_bfd_elf_parse_gnu_properties): Handle
+	GNU_PROPERTY_UINT32_AND_LO, GNU_PROPERTY_UINT32_AND_HI,
+	GNU_PROPERTY_UINT32_OR_LO and GNU_PROPERTY_UINT32_OR_HI.
+	(elf_merge_gnu_properties): Likewise.
+
+2021-06-11  Alan Modra  <amodra@gmail.com>
+
+	PR 27952
+	* elf-bfd.h (struct elf_obj_tdata): Add is_pie.
+	* elflink.c (elf_link_add_object_symbols): Set is_pie.
+
+2021-06-09  Nick Clifton  <nickc@redhat.com>
+
+	PR 27666
+	* config.bfd: Do not add the sparc_elf32_vec or sparc_elf64_vec
+	vectors to Sparc Solaris2 targets.
+
+2021-06-08  Michael Matz  <matz@suse.de>
+
+	* elf.c (bfd_section_from_shdr): Set has_secondary_relocs flag.
+	(_bfd_elf_slurp_secondary_reloc_section): Use it for early-out.
+
+2021-06-07  Jan Beulich  <jbeulich@suse.com>
+
+	* dwarf2.c (read_ranges, read_rnglists): Add u suffix to constant.
+
+2021-06-02  Alan Modra  <amodra@gmail.com>
+
+	* elf-attrs.c (_bfd_elf_parse_attributes): Break out of loop if
+	subsection length is too small to cover tag and length field.
+
+2021-05-31  Nelson Chu  <nelson.chu@sifive.com>
+	    Lifang Xia  <lifang_xia@c-sky.com>
+
+	PR 27566
+	* elfnn-riscv.c (struct riscv_elf_link_hash_table): New integer pointer
+	to monitor the data segment phase.
+	(bfd_elfNN_riscv_set_data_segment_info): New function called by
+	after_allocation, to set the data_segment_phase from expld.dataseg.
+	(_bfd_riscv_relax_section): Don't relax when data_segment_phase is
+	exp_seg_relro_adjust (0x4).
+	* elfxx-riscv.h (bfd_elf32_riscv_set_data_segment_info): New extern.
+	(bfd_elf64_riscv_set_data_segment_info): Likewise
+
+2021-05-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27905
+	* elf32-i386.c: Don't include "libiberty.h".
+	(elf_howto_table): Revert commits a7664973b24 and 50c95a739c9.
+	(elf_i386_rtype_to_howto): Revert commit 50c95a739c9.
+	(elf_i386_info_to_howto_rel): Likewise.
+	(elf_i386_tls_transition): Likewise.
+	(elf_i386_relocate_section): Likewise.
+	* elf64-x86-64.c (x86_64_elf_howto_table): Revert commits
+	a7664973b24 and 50c95a739c9.
+	(elf_x86_64_rtype_to_howto): Revert commit 50c95a739c9.
+	* elfxx-x86.c (_bfd_x86_elf_parse_gnu_properties): Likewise.
+	* elfxx-x86.h (elf_x86_obj_tdata): Likewise.
+	(elf_x86_has_code16): Likewise.
+
+2021-05-26  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27905
+	* elf32-i386.c: Include "libiberty.h".
+	(elf_howto_table): Add 16-bit R_386_PC16 entry.
+	(elf_i386_rtype_to_howto): Add a BFD argument.  Use 16-bit
+	R_386_PC16 if input has 16-bit mode instructions.
+	(elf_i386_info_to_howto_rel): Update elf_i386_rtype_to_howto
+	call.
+	(elf_i386_tls_transition): Likewise.
+	(elf_i386_relocate_section): Likewise.
+	* elf64-x86-64.c (x86_64_elf_howto_table): Add 16-bit
+	R_X86_64_PC16 entry.
+	(elf_x86_64_rtype_to_howto): Use 16-bit R_X86_64_PC16 if input
+	has 16-bit mode instructions.
+	* elfxx-x86.c (_bfd_x86_elf_parse_gnu_properties): Set
+	elf_x86_has_code16 if relocatable input is marked with
+	GNU_PROPERTY_X86_FEATURE_2_CODE16.
+	* elfxx-x86.h (elf_x86_obj_tdata): Add has_code16.
+	(elf_x86_has_code16): New.
+
+2021-05-26  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.h (check_unknown_prefixed_ext): New bool.
+	* elfxx-riscv.c (riscv_parse_prefixed_ext): Do not check the
+	prefixed extension name if check_unknown_prefixed_ext is false.
+	* elfnn-riscv.c (riscv_merge_arch_attr_info): Set
+	check_unknown_prefixed_ext to false for linker.
+
+2021-05-25  Nick Clifton  <nickc@redhat.com>
+
+	* elf32-arn.c (struct elf_arm_obj_tdata): Add num_entries field.
+	(elf32_arm_num_entries): New macro.
+	(elf32_arm_allocate_local_sym_info): Initialise the new field.
+	Allocate arrays individually so that buffer overruns can be
+	detected by memory checkers.
+	(elf32_arm_create_local_iplt): Check num_entries.
+	(elf32_arm_get_plt_info): Likewise.
+	(elf32_arm_final_link_relocate): Likewise.
+	(elf32_arm_check_relocs): Likewise.
+	(elf32_arm_size_dynamic_sections): Likewise.
+	(elf32_arm_output_arch_local_syms): Likewise.
+
+2021-05-25  Nick Clifton  <nickc@redhat.com>
+
+	* elf32-arm.c: Fix formatting.
+
+2021-05-25  Alan Modra  <amodra@gmail.com>
+
+	* elf-attrs.c (elf_attr_strdup): New function.
+	(_bfd_elf_attr_strdup): Use it here.
+	(elf_add_obj_attr_string): New function, extracted from..
+	(bfd_elf_add_obj_attr_string): ..here.
+	(elf_add_obj_attr_int_string): New function, extracted from..
+	(bfd_elf_add_obj_attr_int_string): ..here.
+	(_bfd_elf_parse_attributes): Don't allocate an extra byte for a
+	string terminator.  Instead ensure parsing doesn't go past
+	end of sub-section.  Use size_t variables for lengths.
+
+2021-05-22  Alan Modra  <amodra@gmail.com>
+
+	* libbfd.c (_bfd_safe_read_leb128): Remove length_return parameter.
+	Replace data pointer with pointer to pointer.  Increment pointer
+	over bytes read.
+	* libbfd-in.h (_bfd_safe_read_leb128): Update prototype.
+	* elf-attrs.c (_bfd_elf_parse_attributes): Adjust to suit.  Be
+	careful not to increment data pointer past end.  Remove now
+	redundant pr17512 check.
+	* wasm-module.c (READ_LEB128): Adjust to suit changes to
+	_bfd_safe_read_leb128.
+	* dwarf2.c (read_n_bytes): New inline function, old one renamed to..
+	(read_blk): ..this.  Allocate and return block.  Increment bfd_byte**
+	arg.
+	(read_3_bytes): New function.
+	(read_1_byte, read_1_signed_byte, read_2_bytes, read_4_bytes),
+	(read_8_bytes, read_string, read_indirect_string),
+	(read_indirect_line_string, read_alt_indirect_string): Take a
+	byte_byte** arg which is incremented over bytes read.  Remove any
+	bytes_read return.  Rewrite limit checks to compare lengths
+	rather than pointers.
+	(read_abbrevs, read_attribute_value, read_formatted_entries),
+	(decode_line_info, find_abstract_instance, read_ranges),
+	(read_rnglists, scan_unit_for_symbols, parse_comp_unit),
+	(stash_comp_unit): Adjust to suit.  Rewrite limit checks to
+	compare lengths rather than pointers.
 	* libbfd.h: Regenerate.
 
-2019-08-09  Mihailo Stojanovic  <mihailo.stojanovic@rt-rk.com>
+2021-05-21  Luis Machado  <luis.machado@linaro.org>
 
-	* elf-bfd.h (struct elf_backend_data): New members.
-	* elflink.c (_bfd_elf_link_create_dynamic_sections): Create
-	.gnu.hash section if necessary.
-	(struct collect_gnu_hash_codes): New member.
-	(elf_gnu_hash_process_symidx): New function name.
-	(elf_renumber_gnu_hash_syms): Ignore local and undefined
-	symbols. Record xlat location for every symbol which should have
-	a .MIPS.xhash entry.
-	(bfd_elf_size_dynamic_sections): Add DT_GNU_HASH dynamic tag to
-	dynamic section if necessary.
-	(GNU_HASH_SECTION_NAME): New define.
-	(bfd_elf_size_dynsym_hash_dynstr): Get .MIPS.xhash section.
-	Update the section size info.
-	* elfxx-mips.c (struct mips_elf_hash_sort_data): New members.
-	(struct mips_elf_link_hash_entry): New member.
-	(mips_elf_link_hash_newfunc): Initialize .MIPS.xhash translation
-	table location.
-	(mips_elf_sort_hash_table): Initialize the pointer to the
-	.MIPS.xhash section.
-	(mips_elf_sort_hash_table_f): Populate the .MIPS.xhash
-	translation table entry with the symbol dynindx.
-	(_bfd_mips_elf_section_from_shdr): Add SHT_MIPS_XHASH.
-	(_bfd_mips_elf_fake_sections): Initialize .MIPS.xhash section
-	info.
-	(_bfd_mips_elf_create_dynamic_sections): Create .MIPS.xhash
-	section.
-	(_bfd_mips_elf_size_dynamic_sections): Add DT_MIPS_XHASH tag to
-	dynamic section.
-	(_bfd_mips_elf_finish_synamic_sections): Add DT_MIPS_XHASH.
-	(_bfd_mips_elf_final_write_processing): Set .MIPS.xhash section
-	sh_link info.
-	(_bfd_mips_elf_get_target_dtag): Get DT_MIPS_XHASH tag.
-	(MIPS_LIBC_ABI_XHASH): New ABI version enum value.
-	(_bfd_mips_post_process_headers): Mark the ABI version as
-	MIPS_LIBC_ABI_XHASH if there exists a .MIPS.xhash section,
-	but not a .hash section.
-	(_bfd_mips_elf_record_xhash_symbol): New function. Record a
-	position in the translation table, associated with the hash
-	entry.
-	* elfxx-mips.h (literal_reloc_p): Define
-	elf_backend_record_xhash_symbol backend hook.
-	* elfxx-target.h: Initialize elf_backend_record_xhash_symbol
-	backend hook.
-
-2019-08-07  Jose E. Marchesi  <jose.marchesi@oracle.com>
-
-	* elf64-bpf.c (bpf_elf_relocate_section): New function.
-	(bpf_elf_insn_disp_reloc): Delete function.
-	(elf_backend_relocate_section): Define.
-
-2019-08-07  Alan Modra  <amodra@gmail.com>
-
-	PR 24644
-	* archive64.c (_bfd_archive_64_bit_slurp_armap): Properly check
-	for overflow in expressions involving nsymz.
-
-2019-08-01  Ilia Diachkov  <ilia.diachkov@optimitech.com>
-
-	* elfnn-riscv.c (_bfd_riscv_relax_lui): Set lui relax safety area to
-	two pages in relro presence.
-
-2019-08-01  Max Filippov  <jcmvbkbc@gmail.com>
-
-	* elf32-xtensa.c (insn_num_slots, get_rsr_lend_opcode)
-	(get_wsr_lbeg_opcode): New functions.
-	(check_loop_aligned): Detect relaxed loops and adjust loop_len
-	and insn_len for the first actual instruction of the loop.
+	* elf.c (elfcore_make_memtag_note_section): New function.
+	(elfcore_grok_note): Handle NT_MEMTAG note types.
 
-2019-07-30  Alan Modra  <amodra@gmail.com>
+2021-05-20  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	PR 24768
-	* bfd.c (struct bfd): Add lto_slim_object flag.
-	* bfd-in2.h: Regenerate.
+	* section.c (bfd_get_section_by_name): Return NULL if name is
+	NULL.
+	(bfd_get_section_by_name_if): Likewise.
+	* dwarf2.c (read_section): Remove unneeded NULL check.
+	(find_debug_info): Likewise.
 
-2019-07-29  Martin Liska  <mliska@suse.cz>
+2021-05-19  Nick Clifton  <nickc@redhat.com>
 
-	PR 24768
-	* archive.c (_bfd_compute_and_write_armap): Come up with
-	report_plugin_err variable.
-	* bfd-in2.h (struct bfd): Add lto_slim_object flag.
-	* elf.c (struct lto_section): New.
-	(_bfd_elf_make_section_from_shdr): Parse content of
-	.gnu_lto_.lto section.
-	* elflink.c: Report error for a missing LTO plugin.
-	* linker.c (_bfd_generic_link_add_one_symbol): Likewise.
-
-2019-07-28  Alan Modra  <amodra@gmail.com>
-
-	PR 24857
-	PR 24339
-	* elflink.c (elf_link_add_object_symbols): Report an informative
-	error on finding local symbols with index equal or greater than
-	symbol table sh_info.  Correct comment.  Allow such symbols in
-	dynamic objects.  Abort on NULL section for symbol.
-
-2019-07-26  Alan Modra  <amodra@gmail.com>
-
-	* elf-bfd.h (struct output_elf_obj_tdata): Delete "linker" field.
-	(elf_linker): Don't define.
-	* elflink.c (bfd_elf_final_link): Don't set elf_linker.
-
-2019-07-25  YunQiang Su  <syq@debian.org>
-
-	PR 24832
-	* elfxx-mips.c (mips_set_isa_flags): Default to MIPS 3 for 64-bit
-	mips inputs.
-
-2019-07-24  Claudiu Zissulescu  <claziss@synopsys.com>
-
-	* elf32-arc.c (bfd_get_32_me): Add a small description, fix
-	formating.
-	(reloc_type_to_name): Fix formating.
-	(arc_elf_object_p): Likewise.
-	(debug_arc_reloc): Likewise.
-	(arc_do_relocation): Likewise.
-
-2019-07-24  Claudiu Zissulescu  <claziss@synopsys.com>
-
-	* elf32-arc.c (bfd_get_32_me): New function.
-	(bfd_put_32_me): Likewise.
-	(arc_elf_relax_section): Likewise.
-	(bfd_elf32_bfd_relax_section): Define.
-
-2019-07-24  Alan Modra  <amodra@gmail.com>
-
-	* elf-bfd.h (struct elf_backend_data): Return bfd_boolean from
-	elf_backend_final_write_processing, don't pass linker arg.
-	(_bfd_elf_final_write_processing): Update prototype.
-	* elf.c (_bfd_elf_write_object_contents): Adjust call.
-	(_bfd_elf_final_write_processing): Return error on incompatible
-	OSABI and has_gnu_osabi.  Remove linker arg.
-	* elf-nacl.h (nacl_final_write_processing): Update prototype.
-	* elf-vxworks.h (elf_vxworks_final_write_processing): Likewise.
-	* elfxx-mips.h (_bfd_mips_final_write_processing): Likewise.
-	(_bfd_mips_elf_final_write_processing): Likewise.
-	* elf-hppa.h (elf_hppa_final_write_processing): Return status
-	and remove linker arg.
-	* elf-m10300.c (_bfd_mn10300_elf_final_write_processing): Likewise.
-	* elf-nacl.c (nacl_final_write_processing): Likewise.
-	* elf-vxworks.c (elf_vxworks_final_write_processing): Likewise.
-	* elf32-arc.c (arc_elf_final_write_processing): Likewise.
-	* elf32-arm.c (arm_final_write_processing): Likewise.
-	(elf32_arm_final_write_processing): Likewise.
-	(elf32_arm_nacl_final_write_processing): Likewise.
-	(elf32_arm_vxworks_final_write_processing): Likewise.
-	* elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise.
-	* elf32-bfin.c (elf32_bfin_final_write_processing): Likewise.
-	* elf32-cr16.c (_bfd_cr16_elf_final_write_processing): Likewise.
-	* elf32-cris.c (cris_elf_final_write_processing): Likewise.
-	* elf32-h8300.c (elf32_h8_final_write_processing): Likewise.
-	* elf32-lm32.c (lm32_elf_final_write_processing): Likewise.
-	* elf32-m32r.c (m32r_elf_final_write_processing): Likewise.
-	* elf32-m68k.c (elf_m68k_final_write_processing): Likewise.
-	* elf32-mips.c (mips_vxworks_final_write_processing): Likewise.
-	* elf32-msp430.c (bfd_elf_msp430_final_write_processing): Likewise.
-	* elf32-nds32.c (nds32_elf_final_write_processing): Likewise.
-	* elf32-or1k.c (or1k_elf_final_write_processing): Likewise.
-	* elf32-pj.c (pj_elf_final_write_processing): Likewise.
-	* elf32-ppc.c (ppc_final_write_processing): Likewise.
-	(ppc_elf_final_write_processing): Likewise.
-	(ppc_elf_vxworks_final_write_processing): Likewise.
-	* elf32-sparc.c (sparc_final_write_processing): Likewise.
-	(elf32_sparc_final_write_processing): Likewise.
-	(elf32_sparc_vxworks_final_write_processing): Likewise.
-	* elf32-v850.c (v850_elf_final_write_processing): Likewise.
-	* elf32-xc16x.c (elf32_xc16x_final_write_processing): Likewise.
-	* elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise.
-	* elf64-ia64-vms.c (elf64_vms_final_write_processing): Likewise.
-	* elfnn-ia64.c (elfNN_ia64_final_write_processing): Likewise.
-	* elfxx-mips.c (_bfd_mips_final_write_processing): Likewise.
-	(_bfd_mips_elf_final_write_processing): Likewise.
-
-2019-07-24  Alan Modra  <amodra@gmail.com>
-
-	* elf-vxworks.c (elf_vxworks_final_write_processing): Don't return
-	early.
-	* elf32-arc.c (arc_elf_final_write_processing): Likewise.
-	* elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise.
-
-2019-07-24  Alan Modra  <amodra@gmail.com>
-
-	* elf32-visium.c (visium_elf_post_process_headers): Don't set
-	EI_OSABI header byte here.
-	(ELF_OSABI): Define.
-
-2019-07-23  Alan Modra  <amodra@gmail.com>
-
-	* elf-bfd.h (enum elf_gnu_osabi): Add elf_gnu_osabi_mbind.
-	* elf.c (_bfd_elf_make_section_from_shdr): Set elf_gnu_osabi_mbind.
-	(get_program_header_size): Formatting.  Only test SH_GNU_MBIND
-	when elf_gnu_osabi_mbind is set.
-	(_bfd_elf_map_sections_to_segments): Likewise.
-	(_bfd_elf_init_private_section_data): Likewise.
-	(_bfd_elf_final_write_processing): Update comment.
-	* elf64-hppa.c (elf64_hppa_special_sections): Move .tbss entry.
-	(elf_backend_special_sections): Define without .tbss for linux.
-
-2019-07-23  Alan Modra  <amodra@gmail.com>
-
-	* elf-bfd.h (enum elf_gnu_osabi): Rename from elf_gnu_symbols.
-	Remove none, any, all enums.
-	(struct elf_obj_tdata): Rename has_gnu_symbols field to has_gnu_osabi.
-	(_bfd_elf_final_write_processing): Declare.
-	* elf.c (_bfd_elf_write_object_contents): Unconditionally call
-	elf_backend_final_write_processing.
-	(_bfd_elf_post_process_headers): Move body of function to..
-	(_bfd_elf_final_write_processing): ..here, but set EI_OSABI byte
-	only when not already set.  Adjust for rename.
-	* elfxx-target.h (elf_backend_final_write_processing): Default to
-	_bfd_elf_final_write_processing.
-	* elf-hppa.h (elf_hppa_final_write_processing): Call
-	_bfd_elf_final_write_processing.
-	* elf-m10300.c (_bfd_mn10300_elf_final_write_processing): Likewise.
-	* elf-nacl.c (nacl_final_write_processing): Likewise.
-	* elf-vxworks.c (elf_vxworks_final_write_processing): Likewise.
-	* elf32-arc.c (arc_elf_final_write_processing): Likewise.
-	* elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise.
-	* elf32-bfin.c (elf32_bfin_final_write_processing): Likewise.
-	* elf32-cr16.c (_bfd_cr16_elf_final_write_processing): Likewise.
-	* elf32-cris.c (cris_elf_final_write_processing): Likewise.
-	* elf32-h8300.c (elf32_h8_final_write_processing): Likewise.
-	* elf32-lm32.c (lm32_elf_final_write_processing): Likewise.
-	* elf32-m32r.c (m32r_elf_final_write_processing): Likewise.
-	* elf32-m68k.c (elf_m68k_final_write_processing): Likewise.
-	* elf32-msp430.c (bfd_elf_msp430_final_write_processing): Likewise.
-	* elf32-nds32.c (nds32_elf_final_write_processing): Likewise.
-	* elf32-or1k.c (or1k_elf_final_write_processing): Likewise.
-	* elf32-pj.c (pj_elf_final_write_processing): Likewise.
-	* elf32-v850.c (v850_elf_final_write_processing): Likewise.
-	* elf32-xc16x.c (elf32_xc16x_final_write_processing): Likewise.
-	* elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise.
-	* elf64-ia64-vms.c (elf64_vms_final_write_processing): Likewise.
-	* elfnn-ia64.c (elfNN_ia64_final_write_processing): Likewise.
-	* elf32-arm.c (arm_final_write_processing): Split out from..
-	(elf32_arm_final_write_processing): ..here.  Call
-	_bfd_elf_final_write_processing.
-	(elf32_arm_nacl_final_write_processing): Adjust.
-	* elfxx-mips.c (_bfd_mips_final_write_processing): Split out from..
-	(_bfd_mips_elf_final_write_processing): ..here.  Call
-	_bfd_elf_final_write_processing.
-	* elfxx-mips.h (_bfd_mips_final_write_processing): Declare.
-	* elf32-mips.c (mips_vxworks_final_write_processing): Adjust.
-	* elf32-ppc.c (ppc_final_write_processing): Split out from..
-	(ppc_elf_final_write_processing): ..here.  Call
-	_bfd_elf_final_write_processing.
-	(ppc_elf_vxworks_final_write_processing): Adjust.
-	* elf32-sparc.c (sparc_final_write_processing): Split out from..
-	(elf32_sparc_final_write_processing): ..here.  Call
-	_bfd_elf_final_write_processing.
-	(elf32_sparc_vxworks_final_write_processing): Adjust.
-	* elf32-d10v.c (elf_backend_final_write_processing): Don't define.
-	* elf32-d30v.c (elf_backend_final_write_processing): Don't define.
-	* elf32-m68hc11.c (elf_backend_final_write_processing): Don't define.
-	* elf32-m68hc12.c (elf_backend_final_write_processing): Don't define.
-	* elf32-s12z.c (elf_backend_final_write_processing): Don't define.
-	* elf32-i386.c (elf_i386_check_relocs): Don't set has_gnu_symbols.
-	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
-	* elflink.c (elf_link_add_object_symbols): Likewise.
-	(elf_link_output_symstrtab): Set has_gnu_osabi for symbols here
-	instead.
+	* plugin.c (bfd_plugin_open_input): Inform the user if the limit
+	on the number of open files is reached.  If possible, try to
+	increase this limit before failing.
 
-2019-07-23  Omar Majid  <omajid@redhat.com>
+2021-05-14  Nelson Chu  <nelson.chu@sifive.com>
 
-	* coffcode.h (coff_set_arch_mach_hook): Handle I386_APPLE_MAGIC,
-	I386_FREEBSD_MAGIC, I386_LINUX_MAGIC, I386_NETBSD_MAGIC,
-	AMD64_APPLE_MAGIC, AMD64_FREEBSD_MAGIC, AMD64_LINUX_MAGIC,
-	AMD64_NETBSD_MAGIC.
-	* peXXigen.c: Add comment about source of .NET magic numbers.
-
-2019-07-19  Alan Modra  <amodra@gmail.com>
-
-	* reloc.c (BFD_RELOC_PPC64_TPREL34, BFD_RELOC_PPC64_DTPREL34),
-	(BFD_RELOC_PPC64_GOT_TLSGD34, BFD_RELOC_PPC64_GOT_TLSLD34),
-	(BFD_RELOC_PPC64_GOT_TPREL34, BFD_RELOC_PPC64_GOT_DTPREL34),
-	(BFD_RELOC_PPC64_TLS_PCREL): New pcrel tls relocs.
-	* elf64-ppc.c (ppc64_elf_howto_raw): Add howtos for pcrel tls relocs.
-	(ppc64_elf_reloc_type_lookup): Translate pcrel tls relocs.
-	(must_be_dyn_reloc, dec_dynrel_count): Add R_PPC64_TPREL64.
-	(ppc64_elf_check_relocs): Support pcrel tls relocs.
-	(ppc64_elf_tls_optimize, ppc64_elf_relocate_section): Likewise.
-	* bfd-in2.h: Regenerate.
-	* libbfd.h: Regenerate.
+	* elfnn-riscv.c (riscv_resolve_pcrel_lo_relocs): Check the values
+	of %pcrel_hi, before and after adding the addend.  Make sure the
+	value won't be changed, otherwise, report dangerous error.
 
-2019-07-18  Alan Modra  <amodra@gmail.com>
+2021-05-13  Nelson Chu  <nelson.chu@sifive.com>
 
-	* elf64-ppc.c (ppc64_elf_relocate_section): Don't bother selecting
-	a TLS section symbol for edited relocs.  Tighten TLS symbol/reloc
-	match test.
+	* elfxx-riscv.c (check_implicit_always): The check_func, always add
+	the implicit subset without checking.
+	(check_implicit_for_i): The check_func for i, only add zicsr and
+	zifencei when the version of i less than 2.1.
+	(struct riscv_implicit_subset): Record the subsets and their
+	corresponding implicit subsets.
+	(riscv_implicit_subsets): Table records all implicit informations.
+	(riscv_parse_add_implicit_subsets): Updated and add implicit subsets
+	according to riscv_implicit_subsets.  Remove the redundant codes.
 
-2019-07-18  Alan Modra  <amodra@gmail.com>
+2021-05-13  Alan Modra  <amodra@gmail.com>
 
-	* elf64-ppc.c (TLS_EXPLICIT): Define as 256.
-	(ppc64_elf_check_relocs): Don't store TLS_EXPLICIT even if char
-	is more than 8 bits.
-	(ppc64_elf_tls_optimize): Likewise.  Make tls_set, tls_clear, and
-	tls_type vars unsigned int.
-	(ppc64_elf_relocate_section): Use r_type rather than TLS_EXPLICIT
-	to select r_type edit.
+	PR 27858
+	* elf32-sh.c (sh_elf_info_to_howto): Correct check for last valid
+	reloc howto.
 
-2019-07-18  Alan Modra  <amodra@gmail.com>
+2021-05-12  Luis Machado  <luis.machado@linaro.org>
 
-	* elf32-ppc.c (TLS_GDIE): Rename from TLS_TPRELGD throughout file.
-	Correct comment.
-	* elf64-ppc.c (TLS_GDIE): Likewise.
+	* elf-bfd.h (elfcore_write_aarch_mte): New prototype.
+	* elf.c (elfcore_grok_aarch_mte, elfcore_write_aarch_mte): New
+	functions.
+	(elfcore_grok_note): Handle notes of type NT_ARM_TAGGED_ADDR_CTRL.
+	(elfcore_write_register_note): Handle MTE notes.
 
-2019-07-18  Alan Modra  <amodra@gmail.com>
+2021-05-11  Alan Modra  <amodra@gmail.com>
 
-	* elf64-ppc.c (ppc64_elf_tls_optimize): Correct test for allowed
-	range of tp-relative offsets.
+	PR 27844
+	* pdp11.c (aout_get_external_symbols): Clear first four bytes of
+	strings array, not just the first byte.
+	* aoutx.h (aout_get_external_symbols): Likewise.
 
-2019-07-15  Alan Modra  <amodra@gmail.com>
+2021-05-10  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* elflink.c (_bfd_elf_fix_symbol_flags): If the def for an
-	alias is no longer bfd_link_hash_defined, clear the alias.
+	PR binutils/27839
+	* simple.c (bfd_simple_get_relocated_section_contents): Remove
+	strayed fprintf.
 
-2019-07-13  Alan Modra  <amodra@gmail.com>
+2021-05-10  Nick Clifton  <nickc@redhat.com>
 
-	* elflink.c (_bfd_elf_omit_section_dynsym_default): Don't keep
-	tls_sec.
-	(_bfd_elf_init_1_index_section): Prefer not using TLS sections.
-	(_bfd_elf_init_2_index_sections): Likewise.
-	* elf64-ppc.c (ppc64_elf_relocate_section): When emitting dynamic
-	relocations for local TLS symbols, use STN_UNDEF as the relocation
-	symbol.
-	* elf32-ppc.c (ppc_elf_relocate_section): Likewise, and don't
-	leave TLS symbol value in the addend.
+	PR 27839
+	* simple.c (simple_dummy_add_to_set): New function.
+	(simple_dummy_constructor): New function.
+	(simple_dummy_multiple_common): New function.
+	(bfd_simple_get_relocated_section_contents): Zero out the
+	callbacks structure, and then set the add_to_set, constructor and
+	multiple_common fields.
 
-2019-07-08  Alan Modra  <amodra@gmail.com>
+2021-05-10  Dimitar Dimitrov  <dimitar@dinux.eu>
 
-	PR 24785
-	* elf32-ppc.c (_bfd_elf_ppc_set_arch): Sanity check .PPC.EMB.apuinfo
-	size before reading first word.
+	* elf32-pru.c (elf_backend_can_gc_sections): Define as 1.
 
-2019-07-02  Nick Clifton  <nickc@redhat.com>
+2021-05-08  Mike Frysinger  <vapier@gentoo.org>
 
-	PR 24717
-	* elf.c (is_debuginfo_file): New function.
-	(assign_file_positions_for_non_load_sections): Do not warn about
-	allocated sections outside of loadable segments if they are found
-	in a debuginfo file.
-	* elf-bfd.h (is_debuginfo_file): Prototype.
+	* doc/Makefile.am (html-local, bfd/index.html): New targets.
+	* doc/Makefile.in: Regenerate.
 
-2019-07-02  Nick Clifton  <nickc@redhat.com>
+2021-05-08  Mike Frysinger  <vapier@gentoo.org>
 
-	PR 24753
-	* compress.c (bfd_get_full_section_contents): Do not complain
-	about linker created sections that are larger than the file size.
+	* doc/Makefile.am (AM_MAKEINFOFLAGS): Define.
+	* doc/Makefile.in: Regenerate.
 
-2019-07-02  Christophe Lyon  <christophe.lyon@linaro.org>
+2021-05-07  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	* bfd/elf32-arm.c (CMSE_STUB_NAME): New define.
-	(elf32_arm_get_stub_entry): Do not try to emit long-branch stubs
-	for CMSE stubs.
-	(arm_dedicated_stub_output_section_name): Use CMSE_STUB_NAME.
+	* coff-rs6000.c (xcoff_dwsect_names): Add new DWARF
+	sections.
+	* coffgen.c (coff_pointerize_aux): Handle C_DWARF.
+	(coff_print_symbol): Likewise.
+	* libxcoff.h (XCOFF_DWSECT_NBR_NAMES): Update.
 
-2019-07-02  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+2021-05-07  Jan Beulich  <jbeulich@suse.com>
 
-	* elf32-arm.c (elf32_arm_gc_mark_extra_sections): Mark debug
-	sections when .text section contain secure entry functions
-	is marked.
+	* elf64-x86-64.c (x86_64_elf_howto_table): Set src_mask fields
+	to zero.
 
-2019-07-01  Nick Clifton  <nickc@redhat.com>
+2021-05-07  Alan Modra  <amodra@gmail.com>
 
-	PR 23839
-	* elf32-arm.c (elf32_arm_update_relocs): Do not include the
-	section VMA in the offset used to update exidx relocs.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
 
-2019-06-28  Nick Clifton  <nickc@redhat.com>
+2021-05-06  Stafford Horne  <shorne@gmail.com>
 
-	PR 24708
-	* elf.c (_bfd_elf_slurp_version_tables): Check for an excessively
-	large version reference section.
-	* compress.c (bfd_get_full_section_contents): Check for an
-	uncompressed section whose size is larger than the file size.
+	PR 27746
+	* elf32-or1k.c (PLT_ENTRY_SIZE_LARGE, PLT_MAX_INSN_COUNT,
+	OR1K_ADD, OR1K_ORI): New macros to help with plt creation.
+	(elf_or1k_link_hash_table): New field plt_count.
+	(elf_or1k_link_hash_entry): New field plt_index.
+	(elf_or1k_plt_entry_size): New function.
+	(or1k_write_plt_entry): Update to support variable size PLTs.
+	(or1k_elf_finish_dynamic_sections): Use new or1k_write_plt_entry
+	API.
+	(or1k_elf_finish_dynamic_symbol): Update to write large PLTs
+	when needed.
+	(allocate_dynrelocs): Use elf_or1k_plt_entry_size to account for
+	PLT size.
+
+2021-05-06  Stafford Horne  <shorne@gmail.com>
+
+	PR 21464
+	* elf32-or1k.c (or1k_elf_relocate_section): Relax R_OR1K_GOT16
+	overflow check if we have R_OR1K_GOT_AHI16 followed by
+	R_OR1K_GOT16.
+
+2021-05-06  Stafford Horne  <shorne@gmail.com>
+
+	PR 21464
+	* bfd-in2.h: Add BFD_RELOC_OR1K_GOT_AHI16 relocation.
+	* elf32-or1k.c (or1k_elf_howto_table, or1k_reloc_map): Likewise.
+	(or1k_final_link_relocate, or1k_elf_relocate_section,
+	or1k_elf_check_relocs): Likewise.
+	* libbfd.h (bfd_reloc_code_real_names): Likewise.
+	* reloc.c: Likewise.
+
+2021-05-06  Stafford Horne  <shorne@gmail.com>
+
+	PR 27624
+	* elf32-or1k.c (or1k_elf_adjust_dynamic_symbol): Change
+	condition used to cleanup plt entries to cleanup forced local
+	entries.
+
+2021-05-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27825
+	* elflink.c (elf_link_output_symstrtab): Always append ".COUNT"
+	to local symbols.
+
+2021-05-05  Alan Modra  <amodra@gmail.com>
+
+	* vms-lib.c (vms_traverse_index): Account for vms_kbn size when
+	sanity checking keylen.
+
+2021-05-04  Nick Clifton  <nickc@redhat.com>
+
+	* libbfd.c (bfd_malloc): Provide some documenation.  Treat a size
+	of 0 as 1.
+	(bfd_realloc): Likewise.
+	(bfd_zmalloc): Likewise.
+	(bfd_realloc_or_free): Provide some documentation.  Treat a size
+	of 0 as a request to free.
+	* libbfd-in.h (bfd_realloc): Remove prototype.
+	(bfd_realloc_or_free): Remove prototype.
+	(bfd_zmalloc): Remove prototype.
+	* libbfd.h: Regenerate.
 
-2019-06-28  Alan Modra  <amodra@gmail.com>
+2021-05-03  Jan Beulich  <jbeulich@suse.com>
 
-	* format.c (bfd_check_format_matches): Don't match plugin target
-	if another target matches.  Expand comment.
-	* targets.c (_bfd_target_vector): Move plugin_vec after all other
-	non-corefile targets, outside !SELECT_VECS.
-	* config.bfd: Don't handle targ=plugin here.
-	* configure.ac: Don't add plugin to enable_targets or handle in
-	target loop setting selvecs and other target vars.
-	* configure: Regenerate.
+	* elf32-i386.c (elf_howto_table): Switch all 32-bit relocs to
+	complain_overflow_dont.
+	* elf64-x86-64.c (x86_64_elf_howto_table): Switch all 64-bit
+	relocs to complain_overflow_dont.
 
-2019-06-26  Nick Clifton  <nickc@redhat.com>
+2021-05-03  Alan Modra  <amodra@gmail.com>
 
-	PR 24703
-	* mach-o-arm.c (bfd_mach_o_arm_canonicalize_one_reloc): Add error
-	messages for failures.
-	* mach-o.c (bfd_mach_o_canonicalize_relocs): Set an bfd error code
-	if returning an error value.
+	* elf32-ppc.c (allocate_dynrelocs): Keep dyn_relocs for undefweak
+	symbols when -z dynamic-undefined-weak or when there are no
+	dynamic relocs in read-only sections and -z nodynamic-undefined-weak
+	is not given.
+	* elf64-ppc.c (allocate_dynrelocs): Likewise.
 
-2019-06-25  Jan Beulich  <jbeulich@suse.com>
+2021-05-03  Alan Modra  <amodra@gmail.com>
 
-	* elf-properties.c (elf_find_and_remove_property): Rename last
-	parameter. Mention it in comment.
+	* elf32-ppc.c (allocate_dynrelocs): Call ensure_undef_dynamic for
+	weak undefined symols that only appear on PLT relocs.
+	* elf64-ppc.c (allocate_dynrelocs): Likewise.
 
-2019-06-24  Ilia Diachkov  <ilia.diachkov@optimitech.com>
+2021-05-03  Alan Modra  <amodra@gmail.com>
 
-	* elfnn-riscv.c (_bfd_riscv_relax_lui): Delete early exit when
-	SEC_MERGE or SEC_CODE flags are set.
-	(_bfd_riscv_relax_section): New local symtype.  Set sym_sec and
-	symtype consistently.  Don't include sec_addr (sym_sec) in symval.
-	Add check for SEC_INFO_TYPE_MERGE and call _bfd_merged_section_offset.
-	Add sec_addr (sym_sec) after handling merge sections.
+	PR 27755
+	* elf32-ppc.c (ppc_elf_inline_plt): Do increment rel in loop.
 
-2019-06-24  H.J. Lu  <hongjiu.lu@intel.com>
+2021-05-03  Alan Modra  <amodra@gmail.com>
 
-	PR ld/24721
-	* elf-properties.c (elf_merge_gnu_property_list): Remove the
-	property after reporting property removal.
+	* elf32-csky.c (is_mapping_symbol_name): New function.
+	(csky_elf_is_target_special_symbol): Likewise.
+	(csky_elf_maybe_function_sym): Likewise.
+	(bfd_elf32_bfd_is_target_special_symbol): Define.
+	(elf_backend_maybe_function_sym): Define.
 
-2019-06-23  Alan Modra  <amodra@gmail.com>
+2021-04-30  Nick Clifton  <nickc@redhat.com>
 
-	PR 24704
-	* elf64-ppc.c (R_PPC64_GOT16_DS): Don't set has_gotrel.
-	(ppc64_elf_edit_toc): Don't remove R_PPC64_GOT16_DS got entries.
-	Reduce range of offsets allowed for other GOT relocs.
+	PR 27801
+	* mach-o.c (bfd_mach_o_core_fetch_environment): Use bfd_get_32 to
+	read 32-bit value.
 
-2019-06-23  Alan Modra  <amodra@gmail.com>
+2021-04-30  Nick Clifton  <nickc@redhat.com>
 
-	PR 24689
-	* elfcode.h (elf_object_p): Warning fix.
+	PR 27799
+	* elf32-xtensa.c (elf_xtensa_grok_prstatus): Check for core notes
+	that are too small.
 
-2019-06-21  Alan Modra  <amodra@gmail.com>
+2021-04-30  Nick Clifton  <nickc@redhat.com>
 
-	PR 24689
-	* elfcode.h (elf_object_p): Check type of e_shstrndx section.
+	PR 27797
+	* libbfd.c (bfd_realloc_or_free): Do not free a pointer than has
+	been realloc'ed to size 0.
 
-2019-06-19  Alan Modra  <amodra@gmail.com>
+2021-04-30  Nick Clifton  <nickc@redhat.com>
 
-	PR 24697
-	* elf32-ppc.c (ppc_elf_relocate_section): Don't read insn for
-	R_PPC_EMB_RELSDA.  Mask low bit of R_PPC_EMB_SDA21 r_offset.
+	PR 27795
+	* coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Check for invalid name
+	lengths.
 
-2019-06-19  Alan Modra  <amodra@gmail.com>
+2021-04-29  Nick Clifton  <nickc@redhat.com>
 
-	* elf64-ppc.c (ppc64_elf_inline_plt): Correct st_other test for
-	functions that require r2 valid to use local entry.
-	(ppc64_elf_size_stubs, ppc64_elf_relocate_section): Likewise.
+	PR 27793
+	* som.c (som_slurp_symbol_table): Assign symbols without any scope
+	to the undefined section.
+	(som_decode_symclass): Check for a missing symbol section.
+	* syms.c (bfd_decode_symclass): Likewise.
 
-2019-06-17  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+2021-04-29  Nick Clifton  <nickc@redhat.com>
 
-	* elfnn-aarch64.c (elfNN_aarch64_allocate_local_dynrelocs): Remove.
-	(elfNN_aarch64_size_dynamic_sections): Remove loc_hash_table traversal
-	with elfNN_aarch64_allocate_local_dynrelocs.
+	PR 27792
+	* som.c (som_slurp_string_table): Place a terminating NUL byte at
+	the end of the table.
+	(som_slurp_symbol_table): Check for an over-large offset into the
+	string string table.
 
-2019-06-14  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+2021-04-28  Nick Clifton  <nickc@redhat.com>
 
-	* elfnn-aarch64.c: Enable MOVW_PREL relocs for ELF32.
+	* elf.c (_bfd_elf_maybe_function_sym): Do not accept annobin
+	symbols as potential function symbols.
+	* elfnn-aarch64.c (elfNN_aarch64_maybe_function_sym): Likewise.
+	* elf64-ppc.c (ppc64_elf_maybe_function_sym): Likewise.
+	* elf32-arm.c (elf32_arm_maybe_function_sym): Likewise.
 
-2019-06-14  Alan Modra  <amodra@gmail.com>
+2021-04-26  Mike Frysinger  <vapier@gentoo.org>
 
-	* Makefile.in: Regenerate.
-	* configure: Regenerate.
+	* elf-bfd.h: Include stdlib.h.
+
+2021-04-26  Jan Beulich  <jbeulich@suse.com>
+
+	* elf32-i386.c (elf_howto_table): Switch R_386_PC16 to
+	complain_overflow_signed.
+	* elf64-x86-64.c (x86_64_elf_howto_table): Switch R_X86_64_PC16
+	to complain_overflow_signed.
+
+2021-04-23  Eric Botcazou  <ebotcazou@adacore.com>
 
-2019-06-14  Alan Modra  <amodra@gmail.com>
+	* elf.c (special_sections_p): Add .persistent.bss.
 
-	* elf64-ppc.c: Fix comments involving paddi.
+2021-04-23  Jan Beulich  <jbeulich@suse.com>
 
-2019-06-12  Adam Lackorzymski  <adam@os.inf.tu-dresden.de>
+	* elf32-i386.c (elf_howto_table): R_386_TLS_DESC_CALL has zero
+	size field.
+	* elf64-x86-64.c (x86_64_elf_howto_table): R_X86_64_TLSDESC_CALL
+	has zero size field.
 
-	PR 24643
-	* elf32-arm.c (arm_elf_find_function): Fail if the symol table is
-	absent, or the bfd is not in the ELF formart.
-	* elfnn-aarch64.c (aarch64_elf_find_function): Likewise.
+2021-04-22  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-2019-06-10  Christos Zoulas  <christos@zoulas.com>
+	* hash.c (struct bfd_strtab_hash): Remove xcoff field.
+	Add length_field_size field.
+	(_bfd_stringtab_init): Change prototype.
+	Adapt to new length_field_size.
+	(_bfd_xcoff_stringtab_init): Likewise.
+	(_bfd_stringtab_add): Likewise.
+	(_bfd_stringtab_emit): Likewise.
+	* libbfd-in.h (_bfd_xcoff_stringtab_init):
+	Change prototype.
+	* libbfd.h: Regenerate.
+	* xcofflink.c (_bfd_xcoff_bfd_link_hash_table_create):
+	Call _bfd_xcoff_stringtab_init with isxcoff64 value.
+
+2021-04-22  ClÃ©ment Chigot  <clement.chigot@atos.net>
+
+	* coff-rs6000.c (_bfd_xcoff_swap_aux_in): Add errors for
+	unsupported storage class or auxialiry entries.
+	Improve and adapt to new aux structures.
+	Add C_DWARF support.
+	(_bfd_xcoff_swap_aux_out): Likewise.
+	* coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Likewise.
+	(_bfd_xcoff64_swap_aux_out): Likewise.
 
-	PR 24650
-	* elf.c (elfcore_make_auxv_note_section): New function.
-	(elfcore_grok_note): Use it.
-	(elfcore_grok_freebsd_note): Likewise.
-	(elfcore_grok_openbsd_note): Likewise.
-	(elfcore_grok_netbsd_note): Likewise.  Plus add support for
-	NT_NETBSDCORE_AUXV notes.
+2021-04-21  Eli Zaretskii  <eliz@gnu.org>
 
-2019-06-06  Sudakshina Das  <sudi.das@arm.com>
+	PR 27760
+	* peXXigen.c (_bfd_XX_print_private_bfd_data_common): Add display
+	of IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP,
+	IMAGE_FILE_NET_RUN_FROM_SWAP and IMAGE_FILE_UP_SYSTEM_ONLY flags.
+	Decode the contents of the DllCharacteristics field.
 
-	* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Set
-	alignment of the new gnu property section.
+2021-04-21  Nick Clifton  <nickc@redhat.com>
 
-2019-06-06  Sudakshina Das  <sudi.das@arm.com>
+	PR 27759
+	* srec.c (srec_read_section): Replace assertions with error
+	returns.
 
-	* bfd-in.h: Change comment.
+2021-04-20  ClÃ©ment Chigot  <clement.chigot@atos.net>
+
+	PR binutils/21700
+	* reloc.c (BFD_RELOC_PPC_NEG): New relocation.
 	* bfd-in2.h: Regenerate.
-	* elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update warning.
-	* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties):
-	Likwise.
+	* libbfd.h: Regenerate.
+	* coff-rs6000.c (_bfd_xcoff_reloc_type_lookup): Add
+	BFD_RELOC_PPC_NEG handler.
+	(xcoff_reloc_type_neg): Correctly substract addend.
+	* coff64-rs6000.c (xcoff64_howto_table): Add R_NEG_32
+	howto.
+	(xcoff64_rtype2howto): Add handler for R_NEG_32.
+	(xcoff64_reloc_type_lookup): Add BFD_RELOC_PPC_NEG handler.
+	* xcofflink.c (xcoff_need_ldrel_p): Check output section
+	for R_POS-like relocations. New argument added.
+	(xcoff_mark): Adapt to new xcoff_need_ldrel_p argument.
+	(xcoff_link_input_bfd): Likewise.
 
-2019-05-28  Faraz Shahbazker  <fshahbazker@wavecomp.com>
+2021-04-16  Alan Modra  <amodra@gmail.com>
 
-	* elfxx-mips.c (mips_elf_calculate_relocation) <R_MIPS_PCHI16>:
-	Remove overflow check.
+	PR 27567
+	* coffcode.h (styp_to_sec_flags): Use an unsigned long styp_flags.
+	(coff_write_object_contents): Pass bfd to COFF_ENCODE_ALIGNMENT,
+	ignore alignment checks when return is false.  Formatting.
 
-2019-05-28  Alan Modra  <amodra@gmail.com>
+2021-04-15  Nelson Chu  <nelson.chu@sifive.com>
 
-	PR 24596
-	* cofflink.c (coff_link_check_archive_element): Don't assume
-	element is a coff object file after calling add_archive_element.
+	PR27584
+	* elfnn-riscv.c (riscv_elf_is_target_special_symbol): Added to
+	omit local and empty symbols since they usually generated to
+	mark the auipc instructions.
 
-2019-05-28  Alan Modra  <amodra@gmail.com>
+2021-04-15  Lifang Xia<lifang_xia@c-sky.com>
 
-	PR 24596
-	* elf32-microblaze.c (microblaze_elf_finish_dynamic_sections): Don't
-	attempt to set sh_entsize for excluded PLT section.
+	* elf32-csky.c (csky_elf_howto_table)
+	<R_CKCORE_PCREL_IMM16BY2>: Set special_function to
+	bfd_elf_generic_reloc.
+	<R_CKCORE_PCREL_IMM16BY4>: Likewise.
+	<R_CKCORE_PCREL_IMM10BY4>: Likewise.
+	<R_CKCORE_PCREL_IMM18BY2>: Likewise.
+	<R_CKCORE_PCREL_FLRW_IMM8BY4>: Likewise.
 
-2019-05-28  Alan Modra  <amodra@gmail.com>
+2021-04-14  H.J. Lu  <hongjiu.lu@intel.com>
 
-	PR 24596
-	* elf64-alpha.c (elf64_alpha_relocate_section): Don't attempt
-	to emit R_ALPHA_GOTTPREL in PIEs, for which no space is
-	allocated in alpha_dynamic_entries_for_reloc.
+	PR binutils/27708
+	* elf.c (assign_file_positions_for_non_load_sections): Set
+	p_memsz to p_filesz for the loadable PT_NOTE segment.
 
-2019-05-28  Alan Modra  <amodra@gmail.com>
+2021-04-14  Frederic Cambus  <fred@statdns.com>
 
-	PR 24596
-	* elf32-lm32.c (lm32_elf_finish_dynamic_sections): Don't segfault
-	on NULL output_section.
-	* elflink.c (elf_final_link_free): Don't free -1 symshndxbuf.
+	* elf.c (elfcore_grok_netbsd_note): Remove unneeded #ifdef
+	checks for NT_NETBSDCORE_AUXV and NT_NETBSDCORE_LWPSTATUS.
 
-2019-05-28  Alan Modra  <amodra@gmail.com>
+2021-04-14  Alan Modra  <amodra@gmail.com>
 
-	PR 24596
-	* elf32-m68k.c (elf_m68k_get_got_entry): Don't create a new
-	entry when MUST_FIND.  Abort when MUST_FIND not found.
-	(elf_m68k_get_bfd2got_entry): Likewise.
-	(elf_m68k_relocate_section): Remove now useless assert.
+	PR 27631
+	* elf32-metag.c (elf_metag_relocate_section): Don't use &hh->elf
+	when hh might be NULL, test for NULL first.
 
-2019-05-28  Alan Modra  <amodra@gmail.com>
+2021-04-14  Alan Modra  <amodra@gmail.com>
 
-	PR 24596
-	* elf64-hppa.c (elf64_hppa_finalize_dynreloc): Get the output bfd
-	from bfd_link_info, not an output section owner.
-	(elf64_hppa_finish_dynamic_symbol, elf64_hppa_finalize_opd): Likewise.
-	(elf_hppa_final_link_relocate): Likewise.
+	PR 27630
+	* elf32-arm.c (elf32_arm_size_stubs): Don't use &hash->root when
+	hash might be NULL, cast instead.
 
-2019-05-28  Alan Modra  <amodra@gmail.com>
+2021-04-13  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	PR 24596
-	* aout-tic30.c (MY_bfd_final_link): Don't segfault on missing
-	create_object_symbols_section, obj_textsec, obj_datasec or
-	obj_bsssec.  Fix other errors in placement.
-	* config.bfd: Obsolete tic30-aout.
+	* xcofflink.c (xcoff_link_check_ar_symbols): Update esym earlier.
 
-2019-05-28  Alan Modra  <amodra@gmail.com>
+2021-04-13  Nelson Chu  <nelson.chu@sifive.com>
 
-	PR 24596
-	* dwarf2.c (save_section_vma, section_vma_same): Check for NULL
-	end of section list as well as section_count.
-	* xcofflink.c (xcoff_link_add_symbols): Fix temporarily changed
-	section list before returning error.
+	* elfnn-riscv.c (riscv_version_mismatch): Do not report the warning
+	when the version of input or output is RISCV_UNKNOWN_VERSION, since
+	the extension is added implicitly.
+	* elfxx-riscv.c: Updated the obsolete comments.
+	(RISCV_UNKNOWN_VERSION): Moved to elfxx-riscv.h.
+	* elfxx-riscv.h (RISCV_UNKNOWN_VERSION): Added.
 
-2019-05-27  Alan Modra  <amodra@gmail.com>
+2021-04-12  Alan Modra  <amodra@gmail.com>
 
-	* elf.c (bfd_elf_set_group_contents): Exit on zero size section.
+	* elf-bfd.h (ENABLE_CHECKING): Define.
+	(elf_link_hash_lookup): Abort if wrong type of hash table.
+	* configure.ac (--enable-checking): Add support.
+	* config.in: Regenerate.
+	* configure: Regenerate.
 
-2019-05-27  Alan Modra  <amodra@gmail.com>
+2021-04-12  Alan Modra  <amodra@gmail.com>
 
-	PR 24596
-	* linker.c (_bfd_generic_link_output_symbols): Heed BSF_KEEP.
+	* elf-bfd.h (is_elf_hash_table): Convert macro to inline function.
+	(elf_link_hash_lookup, elf_link_hash_traverse): Likewise.
+	(elf_hash_table, elf_hash_table_id): Likewise.
+	* elf32-arm.c (elf32_arm_setup_section_lists): Delete redundant
+	is_elf_hash_table check.
+	* elf32-csky.c (elf32_csky_setup_section_lists): Likewise.
+	* elf32-hppa.c (clobber_millicode_symbols): Correct param types.
+	* elf64-alpha.c (elf64_alpha_output_extsym): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_global_dyn_info_free: Likewise.
+	(elfNN_ia64_global_dyn_sym_thunk: Likewise.
+	* elf64-ia64-vms.c (elf64_ia64_global_dyn_info_free): Likewise.
+	(elf64_ia64_global_dyn_sym_thunk): Likewise.
+	(elf64_vms_link_add_object_symbols): Pass base type of hash table
+	to is_elf_hash_table.
+	* elflink.c (_bfd_elf_dynamic_symbol_p): Likewise.
+	(_bfd_elf_symbol_refs_local_p, _bfd_elf_add_dynamic_entry): Likewise.
+	(_bfd_elf_strip_zero_sized_dynamic_sections): Likewise.
+	(_bfd_elf_link_check_relocs, elf_link_add_object_symbols): Likewise.
+	(bfd_elf_final_link): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_setup_section_lists): Likewise.
+	* elf64-ppc.c (ppc64_elf_set_toc): Likewise.  Use bfd_link_hash_lookup.
 
-2019-05-24  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+2021-04-12  Alan Modra  <amodra@gmail.com>
 
-	* elfnn-aarch64.c (elfNN_aarch64_merge_symbol_attribute): New function.
-	(struct elf_aarch64_link_hash_table): Add variant_pcs member.
-	(elfNN_aarch64_allocate_dynrelocs): Update variant_pcs.
-	(elfNN_aarch64_size_dynamic_sections): Add DT_AARCH64_VARIANT_PCS.
-	(elf_backend_merge_symbol_attribute): Define.
+	* elf-bfd.h (struct elf_backend_data): Return bfd_link_hash_entry*
+	from elf_backend_archive_symbol_lookup.
+	(_bfd_elf_archive_symbol_lookup): Return bfd_link_hash_entry*.
+	* elf64-ppc.c (ppc64_elf_archive_symbol_lookup): Likewise.  Check
+	we have a ppc_hash_table before accessing ppc_link_hash_entry
+	fields.
+	* elflink.c (_bfd_elf_archive_symbol_lookup): Return
+	bfd_link_hash_entry*.
+	(elf_link_add_archive_symbols): Adjust to suit.
+
+2021-04-12  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_parse_std_ext): Fixed the wrong versions of
+	i-ext when expanding g-ext.
+
+2021-04-12  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_ext_dont_care_version): Removed.
+	(riscv_parse_add_subset): Always add the implicit extensions, even if
+	their versions are RISCV_UNKNOWN_VERSION.
+	(riscv_parse_std_ext): Delay to add i-ext as the implicit extension
+	in the riscv_parse_add_implicit_subsets.  Besides, add g-ext as the
+	implicit extension after it has been expanded.
+	(riscv_parse_add_implicit_subsets): Updated.
+
+2021-04-12  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_std_z_ext_strtab): Moved forward.
+	(riscv_std_s_ext_strtab): Likewise.
+	(riscv_std_h_ext_strtab): Likewise.
+	(riscv_std_zxm_ext_strtab): Added for the zxm prefix.
+	(enum riscv_prefix_ext_class): Moved forward and renamed from
+	riscv_isa_ext_class.  Reorder them according to the parsing order,
+	since the enum values are used to check the orders in the
+	riscv_compare_subsets.
+	(struct riscv_parse_prefix_config): Moved forward and renamed from
+	riscv_parse_config_t.  Also removed the ext_valid_p field, the
+	related functions are replaced by riscv_valid_prefixed_ext.
+	(parse_config): Moved forward and updated.  The more letters of the
+	prefix string, the more forward it must be defined.  Otherwise, we
+	will get the wrong mapping when using strncmp in riscv_get_prefix_class.
+	(riscv_get_prefix_class): Moved forward.  Support to parse the
+	multi-letter prefix, like zxm.
+	(riscv_known_prefixed_ext): New function, check if the prefixed
+	extension is supported according to the right riscv_std_*_ext_strtab.
+	(riscv_valid_prefixed_ext): New function, used to replace the
+	riscv_ext_*_valid_p functions.
+	(riscv_init_ext_order): Do not set the values for prefix keywords
+	since they may have multiple letters for now.
+	(riscv_compare_subsets): Set the order values of prefix keywords
+	to negative numbers according to the riscv_prefix_ext_class.
+	(riscv_parse_std_ext): Call riscv_get_prefix_class to see if we
+	have parsed the prefixed extensions.
+	(riscv_parse_prefixed_ext): Updated and removed the parameter config.
+	Report error when the prefix is unknown.
+	(riscv_parse_subset): Do not parse the prefixed extensions according
+	to the orders in the parse_config.  Remove the confused message and
+	let riscv_parse_prefixed_ext to report the details.
+	* elfxx-riscv.h (enum riscv_isa_ext_class): Moved to elfxx-riscv.c.
+	(riscv_get_prefix_class): Removed to static.
 
-2019-05-24  Alan Modra  <amodra@gmail.com>
+2021-04-08  Mike Frysinger  <vapier@gentoo.org>
 
-	* po/SRC-POTFILES.in: Regenerate.
+	* configure.ac (ACX_BUGURL): Use https://.
+	* configure.com (COPY_TEXT): Likewise.
+	* configure: Regenerate.
 
-2019-05-24  Alan Modra  <amodra@gmail.com>
+2021-04-05  Alan Modra  <amodra@gmail.com>
 
-	* elf64-ppc.c: Comment on powerxx _notoc stub variants.
-	(LI_R11_0, LIS_R11, ORI_R11_R11_0, SLDI_R11_R11_34): Define.
-	(PADDI_R12_PC, PLD_R12_PC, D34, HA34): Define.
-	(struct ppc_link_hash_table): Add powerxx_stubs.
-	(ppc64_elf_check_relocs): Set powerxx_stubs.
-	(build_powerxx_offset, size_powerxx_offset),
-	(num_relocs_for_powerxx_offset),
-	(emit_relocs_for_powerxx_offset): New functions.
-	(plt_stub_size): Size powerxx stubs.
-	(ppc_build_one_stub): Emit powerxx stubs.
-	(ppc_size_one_stub): Size powerxx stubs.  Omit .eh_frame for
-	powerxx stubs.
+	* configure.ac: Don't check for long long or long double type.
+	Don't check for alloca.h, limits.h, stddef.h, stdlib.h, string.h,
+	strings.h, time.h, wchar.h, wctype.h or sys/time.h.  Don't check
+	for strtoull, free, malloc, realloc, getenv, strstr, snprintf,
+	vsnprintf, strlen or setitimer.  Sort AC_CHECK_DECLS.
+	(AC_ISC_POSIX): Don't invoke.
+	(AC_HEADER_TIME, AC_HEADER_DIRENT, ACX_HEADER_STRING): Likewise.
+	* sysdep.h: Remove many HAVE_*_H checks and fallback declarations.
+	Do test HAVE_SYS_TYPES_H.  Don't include sys/time.h.  Reorder
+	header order as per automake AC_INCLUDES_DEFAULT.
+	* bfd-in.h: Include inttypes.h unconditionally.
+	* bfd.c (_bfd_doprnt, _bfd_doprnt_scan): Assume long long and
+	long double are available.
+	(bfd_scan_vma): Assume long long and strtoull are available.
+	* elflink.c: Include limits.h unconditionally.
+	* elfnn-riscv.c: Likewise.
+	* wasm-module.c: Likewise.
+	* hpux-core.c: Include dirent.h unconditionally.
+	* trad-core.c: Likewise.
+	* hosts/x86-64linux.h: Include stdlib.h unconditionally.
+	* peXXigen.c: Remove HAVE_WCHAR_H and HAVE_WCTYPE_H checks.
+	* elf32-m68hc1x.c: Don't include alloca-conf.h.
+	* elf64-hppa.c: Likewise.
+	* som.c: Likewise.
+	* wasm-module.c: Likewise.
+	* xsym.c: Likewise.
+	* bfd-in2.h: Regenerate.
+	* config.in: Regenerate.
+	* configure: Regenerate.
 
-2019-05-24  Alan Modra  <amodra@gmail.com>
+2021-04-01  Tamar Christina  <tamar.christina@arm.com>
 
-	* elf64-ppc.c (ppc64_elf_check_relocs): Set has_gotrel for
-	R_PPC64_GOT_PCREL34.
-	(xlate_pcrel_opt): New function.
-	(ppc64_elf_edit_toc): Handle R_PPC64_GOT_PCREL34.
-	(ppc64_elf_relocate_section): Edit GOT indirect to GOT relative
-	for R_PPC64_GOT_PCREL34.  Implement R_PPC64_PCREL_OPT optimisation.
+	PR ld/26659
+	* cofflink.c (_bfd_coff_generic_relocate_section): Ignore overflow.
 
-2019-05-24  Alan Modra  <amodra@gmail.com>
+2021-04-01  Martin Liska  <mliska@suse.cz>
 
-	* reloc.c (BFD_RELOC_PPC64_D34, BFD_RELOC_PPC64_D34_LO),
-	(BFD_RELOC_PPC64_D34_HI30, BFD_RELOC_PPC64_D34_HA30),
-	(BFD_RELOC_PPC64_PCREL34, BFD_RELOC_PPC64_GOT_PCREL34),
-	(BFD_RELOC_PPC64_PLT_PCREL34),
-	(BFD_RELOC_PPC64_ADDR16_HIGHER34, BFD_RELOC_PPC64_ADDR16_HIGHERA34),
-	(BFD_RELOC_PPC64_ADDR16_HIGHEST34, BFD_RELOC_PPC64_ADDR16_HIGHESTA34),
-	(BFD_RELOC_PPC64_REL16_HIGHER34, BFD_RELOC_PPC64_REL16_HIGHERA34),
-	(BFD_RELOC_PPC64_REL16_HIGHEST34, BFD_RELOC_PPC64_REL16_HIGHESTA34),
-	(BFD_RELOC_PPC64_D28, BFD_RELOC_PPC64_PCREL28): New reloc enums.
-	* elf64-ppc.c (PNOP): Define.
-	(ppc64_elf_howto_raw): Add reloc howtos for new relocations.
-	(ppc64_elf_reloc_type_lookup): Translate new bfd reloc numbers.
-	(ppc64_elf_ha_reloc): Adjust addend for highera34 and highesta34
-	relocs.
-	(ppc64_elf_prefix_reloc): New function.
-	(struct ppc_link_hash_table): Add notoc_plt.
-	(is_branch_reloc): Add R_PPC64_PLTCALL_NOTOC.
-	(is_plt_seq_reloc): Add R_PPC64_PLT_PCREL34,
-	R_PPC64_PLT_PCREL34_NOTOC, and R_PPC64_PLTSEQ_NOTOC.
-	(ppc64_elf_check_relocs): Handle pcrel got and plt relocs.  Set
-	has_pltcall for section on seeing R_PPC64_PLTCALL_NOTOC.  Handle
-	possible need for dynamic relocs on non-pcrel powerxx relocs.
-	(dec_dynrel_count): Handle non-pcrel powerxx relocs.
-	(ppc64_elf_inline_plt): Handle R_PPC64_PLTCALL_NOTOC.
-	(toc_adjusting_stub_needed): Likewise.
-	(ppc64_elf_tls_optimize): Handle R_PPC64_PLTSEQ_NOTOC.
-	(ppc64_elf_relocate_section): Handle new powerxx relocs.
+	* ecoff.c (strneq): Remove strneq and use startswith.
+	(_bfd_ecoff_slurp_armap): Likewise.
+
+2021-04-01  Martin Liska  <mliska@suse.cz>
+
+	* elf-bfd.h (bfd_section_is_ctf): Use startswith function.
+	* elf.c (_bfd_elf_make_section_from_shdr): Likewise.
+	(elf_get_reloc_section): Likewise.
+	* elf32-arc.c (elf_arc_size_dynamic_sections): Likewise.
+	* elf32-m32r.c (m32r_elf_section_flags): Likewise.
+	* elf32-microblaze.c (microblaze_elf_size_dynamic_sections): Likewise.
+	* elf32-nds32.c (nds32_elf_size_dynamic_sections): Likewise.
+	(nds32_elf_relocate_section): Likewise.
+	(nds32_elf_action_discarded): Likewise.
+	(nds32_elf_check_relocs): Likewise.
+	(nds32_elf_section_flags): Likewise.
+	* elf32-or1k.c (or1k_elf_check_relocs): Likewise.
+	* elf32-ppc.c (ppc_elf_section_from_shdr): Likewise.
+	* elf32-rx.c (rx_table_find): Likewise.
+	(rx_table_map): Likewise.
+	* elf32-spu.c (spu_elf_backend_symbol_processing): Likewise.
+	(spu_elf_find_overlays): Likewise.
+	(needs_ovl_stub): Likewise.
+	(allocate_spuear_stubs): Likewise.
+	(build_spuear_stubs): Likewise.
+	(mark_overlay_section): Likewise.
+	(spu_elf_auto_overlay): Likewise.
+	(spu_elf_output_symbol_hook): Likewise.
+	* elf32-tilepro.c (tilepro_elf_size_dynamic_sections): Likewise.
+	* elf32-xtensa.c (xtensa_property_section_name): Likewise.
+	* elf64-ppc.c (ppc64_elf_section_flags): Likewise.
+	(ppc64_elf_relocate_section): Likewise.
+	* elflink.c (resolve_section): Likewise.
+	(UNARY_OP): Likewise.
+	(BINARY_OP_HEAD): Likewise.
+	(elf_link_input_bfd): Likewise.
+	* elfnn-riscv.c (riscv_elf_size_dynamic_sections): Likewise.
+	* elfxx-riscv.c (riscv_parse_subset): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_size_dynamic_sections): Likewise.
+	* opncls.c (get_build_id): Likewise.
+
+2021-03-31  Alan Modra  <amodra@gmail.com>
+
+	PR 27671
+	* bfd-in.h: Don't poison FALSE or TRUE.
+	* bfd-in2.h: Regenerate.
+
+2021-03-31  Alan Modra  <amodra@gmail.com>
+
+	* sysdep.h: POISON_BFD_BOOLEAN: Define.
+	* aix5ppc-core.c, * aout-cris.c, * aout-ns32k.c, * aout-target.h,
+	* aoutx.h, * arc-got.h, * archive.c, * archive64.c, * archures.c,
+	* bfd-in.h, * bfd.c, * bfdwin.c, * binary.c, * cache.c,
+	* coff-alpha.c, * coff-arm.c, * coff-arm.h, * coff-bfd.c,
+	* coff-bfd.h, * coff-go32.c, * coff-i386.c, * coff-ia64.c,
+	* coff-mcore.c, * coff-mips.c, * coff-rs6000.c, * coff-sh.c,
+	* coff-stgo32.c, * coff-tic30.c, * coff-tic4x.c, * coff-tic54x.c,
+	* coff-x86_64.c, * coff-z80.c, * coff-z8k.c, * coff64-rs6000.c,
+	* coffcode.h, * coffgen.c, * cofflink.c, * compress.c,
+	* corefile.c, * cpu-aarch64.c, * cpu-aarch64.h, * cpu-alpha.c,
+	* cpu-arc.c, * cpu-arm.c, * cpu-arm.h, * cpu-avr.c, * cpu-bfin.c,
+	* cpu-bpf.c, * cpu-cr16.c, * cpu-cris.c, * cpu-crx.c,
+	* cpu-csky.c, * cpu-d10v.c, * cpu-d30v.c, * cpu-dlx.c,
+	* cpu-epiphany.c, * cpu-fr30.c, * cpu-frv.c, * cpu-ft32.c,
+	* cpu-h8300.c, * cpu-hppa.c, * cpu-i386.c, * cpu-ia64.c,
+	* cpu-iamcu.c, * cpu-ip2k.c, * cpu-iq2000.c, * cpu-k1om.c,
+	* cpu-l1om.c, * cpu-lm32.c, * cpu-m10200.c, * cpu-m10300.c,
+	* cpu-m32c.c, * cpu-m32r.c, * cpu-m68hc11.c, * cpu-m68hc12.c,
+	* cpu-m68k.c, * cpu-m9s12x.c, * cpu-m9s12xg.c, * cpu-mcore.c,
+	* cpu-mep.c, * cpu-metag.c, * cpu-microblaze.c, * cpu-mips.c,
+	* cpu-mmix.c, * cpu-moxie.c, * cpu-msp430.c, * cpu-mt.c,
+	* cpu-nds32.c, * cpu-nfp.c, * cpu-nios2.c, * cpu-ns32k.c,
+	* cpu-or1k.c, * cpu-pdp11.c, * cpu-pj.c, * cpu-powerpc.c,
+	* cpu-pru.c, * cpu-riscv.c, * cpu-rl78.c, * cpu-rs6000.c,
+	* cpu-rx.c, * cpu-s12z.c, * cpu-s390.c, * cpu-score.c,
+	* cpu-sh.c, * cpu-sparc.c, * cpu-spu.c, * cpu-tic30.c,
+	* cpu-tic4x.c, * cpu-tic54x.c, * cpu-tic6x.c, * cpu-tilegx.c,
+	* cpu-tilepro.c, * cpu-v850.c, * cpu-v850_rh850.c, * cpu-vax.c,
+	* cpu-visium.c, * cpu-wasm32.c, * cpu-xc16x.c, * cpu-xgate.c,
+	* cpu-xstormy16.c, * cpu-xtensa.c, * cpu-z80.c, * cpu-z8k.c,
+	* dwarf1.c, * dwarf2.c, * ecoff-bfd.h, * ecoff.c, * ecofflink.c,
+	* elf-attrs.c, * elf-bfd.h, * elf-eh-frame.c, * elf-hppa.h,
+	* elf-ifunc.c, * elf-m10200.c, * elf-m10300.c, * elf-nacl.c,
+	* elf-nacl.h, * elf-properties.c, * elf-s390-common.c,
+	* elf-s390.h, * elf-strtab.c, * elf-vxworks.c, * elf-vxworks.h,
+	* elf.c, * elf32-am33lin.c, * elf32-arc.c, * elf32-arm.c,
+	* elf32-arm.h, * elf32-avr.c, * elf32-avr.h, * elf32-bfin.c,
+	* elf32-bfin.h, * elf32-cr16.c, * elf32-cr16.h, * elf32-cris.c,
+	* elf32-crx.c, * elf32-csky.c, * elf32-csky.h, * elf32-d10v.c,
+	* elf32-d30v.c, * elf32-dlx.c, * elf32-epiphany.c,
+	* elf32-fr30.c, * elf32-frv.c, * elf32-ft32.c, * elf32-gen.c,
+	* elf32-h8300.c, * elf32-hppa.c, * elf32-hppa.h, * elf32-i386.c,
+	* elf32-ip2k.c, * elf32-iq2000.c, * elf32-lm32.c, * elf32-m32c.c,
+	* elf32-m32r.c, * elf32-m68hc11.c, * elf32-m68hc12.c,
+	* elf32-m68hc1x.c, * elf32-m68hc1x.h, * elf32-m68k.c,
+	* elf32-m68k.h, * elf32-mcore.c, * elf32-mep.c, * elf32-metag.c,
+	* elf32-metag.h, * elf32-microblaze.c, * elf32-mips.c,
+	* elf32-moxie.c, * elf32-msp430.c, * elf32-mt.c, * elf32-nds32.c,
+	* elf32-nios2.c, * elf32-nios2.h, * elf32-or1k.c, * elf32-pj.c,
+	* elf32-ppc.c, * elf32-ppc.h, * elf32-pru.c, * elf32-rl78.c,
+	* elf32-rx.c, * elf32-s12z.c, * elf32-s390.c, * elf32-score.c,
+	* elf32-score.h, * elf32-score7.c, * elf32-sh-relocs.h,
+	* elf32-sh.c, * elf32-sparc.c, * elf32-spu.c, * elf32-spu.h,
+	* elf32-tic6x.c, * elf32-tic6x.h, * elf32-tilegx.c,
+	* elf32-tilepro.c, * elf32-v850.c, * elf32-v850.h,
+	* elf32-vax.c, * elf32-visium.c, * elf32-wasm32.c,
+	* elf32-xc16x.c, * elf32-xgate.c, * elf32-xstormy16.c,
+	* elf32-xtensa.c, * elf32-z80.c, * elf64-alpha.c, * elf64-bpf.c,
+	* elf64-gen.c, * elf64-hppa.c, * elf64-ia64-vms.c,
+	* elf64-mips.c, * elf64-mmix.c, * elf64-nfp.c, * elf64-ppc.c,
+	* elf64-ppc.h, * elf64-s390.c, * elf64-sparc.c,
+	* elf64-tilegx.c, * elf64-x86-64.c, * elfcode.h,
+	* elfcore.h, * elflink.c, * elfn32-mips.c, * elfnn-aarch64.c,
+	* elfnn-ia64.c, * elfnn-riscv.c, * elfxx-aarch64.c,
+	* elfxx-aarch64.h, * elfxx-ia64.c, * elfxx-ia64.h,
+	* elfxx-mips.c, * elfxx-mips.h, * elfxx-riscv.c, * elfxx-riscv.h,
+	* elfxx-sparc.c, * elfxx-sparc.h, * elfxx-target.h,
+	* elfxx-tilegx.c, * elfxx-tilegx.h, * elfxx-x86.c, * elfxx-x86.h,
+	* format.c, * genlink.h, * hash.c, * i386aout.c, * i386lynx.c,
+	* i386msdos.c, * ihex.c, * libaout.h, * libbfd-in.h,
+	* libbfd.c, * libcoff-in.h, * libecoff.h, * libpei.h,
+	* libxcoff.h, * linker.c, * mach-o-aarch64.c, * mach-o-arm.c,
+	* mach-o-i386.c, * mach-o-x86-64.c, * mach-o.c, * mach-o.h,
+	* merge.c, * mmo.c, * netbsd.h, * opncls.c, * pc532-mach.c,
+	* pdp11.c, * pe-arm.c, * pe-i386.c, * pe-mcore.c, * pe-sh.c,
+	* pe-x86_64.c, * peXXigen.c, * pef.c, * pei-arm.c, * pei-i386.c,
+	* pei-ia64.c, * pei-mcore.c, * pei-sh.c, * pei-x86_64.c,
+	* peicode.h, * plugin.c, * plugin.h, * ppcboot.c, * reloc.c,
+	* reloc16.c, * rs6000-core.c, * section.c, * simple.c, * som.c,
+	* som.h, * srec.c, * stabs.c, * syms.c, * targets.c, * tekhex.c,
+	* verilog.c, * vms-alpha.c, * vms-lib.c, * vms-misc.c, * vms.h,
+	* wasm-module.c, * xcofflink.c, * xcofflink.h, * xsym.c,
+	* xsym.h: Replace bfd_boolean with bool, FALSE with false, and
+	TRUE with true throughout.
 	* bfd-in2.h: Regenerate.
 	* libbfd.h: Regenerate.
+	* libcoff.h: Regenerate.
+
+2021-03-31  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Include stdbool.h.
+	(bfd_boolean): Define as bool
+	* bfd-in2.h: Regenerate.
 
-2019-05-23  Jose E. Marchesi  <jose.marchesi@oracle.com>
+2021-03-31  Alan Modra  <amodra@gmail.com>
 
-	* config.bfd (targ_cpu): Process bpf-*-none only if BFD64.
-	* configure.ac: Set target_size=64 for bpf_elf64_le_vec and
-	bpf_elf64_be_vec.
+	* .gitignore: Delete bfd_stdint.h entry.
+	* Makefile.am (bfdinclude_HEADERS): Delete bfd_stdint.h.
+	(BUILD_HFILES, LOCAL_H_DEPS): Likewise.
+	* bfd-in.h: Include stdint.h in place of bfd_stdint.h.
+	* configure.ac: Don't invoke GCC_HEADER_STDINT.
+	* configure.com: Don't create bfd_stdint.h.
+	* Makefile.in: Regenerate.
+	* aclocal.m4: Regenerate.
+	* bfd-in2.h: Regenerate.
+	* config.in: Regenerate.
 	* configure: Regenerate.
+	* doc/Makefile.in: Regenerate.
+	* po/BLD-POTFILES.in: Regenerate.
 
-2019-05-23  Jose E. Marchesi  <jose.marchesi@oracle.com>
+2021-03-31  Alan Modra  <amodra@gmail.com>
 
-	* configure: Regenerated.
-	* Makefile.am (ALL_MACHINES): Add cpu-bpf.lo.
-	(ALL_MACHINES_CFILES): Add cpu-bpf.c.
-	(BFD64_BACKENDS): Add elf64-bpf.lo.
-	(BFD64_BACKENDS_CFILES): Add elf64-bpf.c.
-	* Makefile.in (SOURCE_HFILES): Regenerate.
-	* config.bfd (targ_cpu): Handle bpf-*-* targets.
-	* cpu-bpf.c: New file.
-	* elf64-bpf.c: Likewise.
-	* targets.c (_bfd_target_vector): Add bpf_elf64_be_vec and
-	bpf_elf64_le_vec.
-	* archures.c: Define architecture bfd_arch_bpf and machine
-	bfd_arch_bpf.
-	* reloc.c: Define BFD relocations used by the BPF target.
-	* bfd-in2.h: Regenerated.
-	* libbfd.h: Likewise.
+	* bfd-in.h: Include string.h.
+	(LITMEMCPY, LITSTRCPY): Delete.
+	* bfd-in2.h: Regenerate.
 
-2019-05-22  Alan Modra  <amodra@gmail.com>
+2021-03-30  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (elf_link_add_object_symbols): Don't set h->indx
+	unless is_elf_hash_table.
+
+2021-03-29  Alan Modra  <amodra@gmail.com>
+
+	* aoutx.h (aout_link_write_symbols): Don't cast boolean expression
+	to bfd_boolean.
+	* elf32-or1k.c (or1k_set_got_and_rela_sizes): Dont compare booleans
+	against FALSE.
+	* elf32-arc.c (name_for_global_symbol): Don't compare boolean to TRUE.
+	(is_reloc_PC_relative): Don't use "boolean_condition ? TRUE : FALSE".
+	(is_reloc_SDA_relative, is_reloc_for_GOT): Likewise.
+	(is_reloc_for_PLT, is_reloc_for_TLS): Likewise.
+	* elf32-arm.c (stm32l4xx_need_create_replacing_stub): Likewise.
+	* elf32-nds32.c (insert_nds32_elf_blank): Likewise.
+	* elf32-rx.c (rx_set_section_contents): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_ignore_undef_symbol): Likewise.
+	* mach-o.c (bfd_mach_o_read_command): Likewise.
+	* targets.c (bfd_get_target_info): Likewise.
+
+2021-03-29  Alan Modra  <amodra@gmail.com>
+
+	* coff-z80.c (z80_is_local_label_name): Return bfd_boolean.
+	* elf32-z80.c (z80_is_local_label_name): Likewise.
+	* elf32-spu.c (spu_elf_modify_headers): Likewise.
+	* elf32-nds32.h (struct elf_nds32_link_hash_table <hyper_relax>):
+	Change type to int.
+	* vms-lib.c (_bfd_vms_lib_write_archive_contents): Correct test
+	for error return from vms_write_data_block.
+
+2021-03-29  Alan Modra  <amodra@gmail.com>
+
+	* elf32-i386.c (elf_i386_finish_local_dynamic_symbol): Return int.
+	* elf64-ia64-vms.c (elf64_ia64_local_dyn_info_free): Likewise.
+	(elf64_ia64_local_dyn_sym_thunk): Likewise.
+	* elf64-x86-64.c (elf_x86_64_finish_local_dynamic_symbol): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_allocate_local_ifunc_dynrelocs),
+	(elfNN_aarch64_finish_local_dynamic_symbol): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_local_dyn_info_free): Likewise.
+	(elfNN_ia64_local_dyn_sym_thunk): Likewise.
+	* elfnn-riscv.c (allocate_local_ifunc_dynrelocs): Likewise.
+	(riscv_pcrel_reloc_eq): Likewise.
+	(riscv_elf_finish_local_dynamic_symbol): Likewise.
+	* elfxx-sparc.c (allocate_local_dynrelocs): Likewise.
+	(finish_local_dynamic_symbol): Likewise.
+	* elfxx-x86.c (elf_x86_allocate_local_dynreloc): Likewise.
+	* elfxx-mips.c (mips_elf_resolve_got_page_ref): Likewise.
+	(mips_elf_count_got_symbols): Change return type to bfd_boolean.
+
+2021-03-29  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (elf_link_output_symstrtab): Make flinfo parameter
+	a void pointer.
+	(bfd_elf_final_link): Delete out_sym_func typedef and don't cast
+	elf_link_output_symstrtab when calling output_arch_syms and
+	output_arch_local_syms.
+	* elf-bfd.h (struct elf_backend_data <elf_backend_output_arch_syms,
+	elf_backend_output_arch_local_syms>): Change return type of func
+	arg to match elf_link_output_symstrtab.
+	* elf-vxworks.h (elf_vxworks_link_output_symbol_hook): Correct
+	return type.
+	* elf32-nds32.c (nds32_elf_output_symbol_hook): Correct return type.
+	(nds32_elf_output_arch_syms): Correct func return type.
+
+2021-03-29  Alan Modra  <amodra@gmail.com>
+
+	* elf-m10200.c (mn10200_elf_relocate_section): Return int.
+	* elf-m10300.c (mn10300_elf_relocate_section): Likewise.
+	* elf32-arc.c (elf_arc_relocate_section): Likewise.
+	* elf32-arm.c (elf32_arm_relocate_section): Likewise.
+	* elf32-avr.c (elf32_avr_relocate_section): Likewise.
+	* elf32-bfin.c (bfin_relocate_section): Likewise.
+	(bfinfdpic_relocate_section): Likewise.
+	* elf32-cr16.c (elf32_cr16_relocate_section): Likewise.
+	* elf32-cris.c (cris_elf_relocate_section): Likewise.
+	* elf32-crx.c (elf32_crx_relocate_section): Likewise.
+	* elf32-csky.c (csky_elf_relocate_section): Likewise.
+	* elf32-d10v.c (elf32_d10v_relocate_section): Likewise.
+	* elf32-epiphany.c (epiphany_elf_relocate_section): Likewise.
+	* elf32-fr30.c (fr30_elf_relocate_section): Likewise.
+	* elf32-frv.c (elf32_frv_relocate_section): Likewise.
+	* elf32-ft32.c (ft32_elf_relocate_section): Likewise.
+	* elf32-h8300.c (elf32_h8_relocate_section): Likewise.
+	* elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
+	* elf32-i386.c (elf_i386_relocate_section): Likewise.
+	* elf32-ip2k.c (ip2k_elf_relocate_section): Likewise.
+	* elf32-iq2000.c (iq2000_elf_relocate_section): Likewise.
+	* elf32-lm32.c (lm32_elf_relocate_section): Likewise.
+	* elf32-m32c.c (m32c_elf_relocate_section): Likewise.
+	* elf32-m32r.c (m32r_elf_relocate_section): Likewise.
+	* elf32-m68hc1x.c (elf32_m68hc11_relocate_section): Likewise.
+	* elf32-m68hc1x.h (elf32_m68hc11_relocate_section): Likewise.
+	* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
+	* elf32-mcore.c (mcore_elf_relocate_section): Likewise.
+	* elf32-mep.c (mep_elf_relocate_section): Likewise.
+	* elf32-metag.c (elf_metag_relocate_section): Likewise.
+	* elf32-microblaze.c (microblaze_elf_relocate_section): Likewise.
+	* elf32-moxie.c (moxie_elf_relocate_section): Likewise.
+	* elf32-msp430.c (elf32_msp430_relocate_section): Likewise.
+	* elf32-mt.c (mt_elf_relocate_section): Likewise.
+	* elf32-nds32.c (nds32_elf_relocate_section): Likewise.
+	* elf32-nios2.c (nios2_elf32_relocate_section): Likewise.
+	* elf32-or1k.c (or1k_elf_relocate_section): Likewise.
+	* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
+	* elf32-pru.c (pru_elf32_relocate_section): Likewise.
+	* elf32-rl78.c (rl78_elf_relocate_section): Likewise.
+	* elf32-rx.c (rx_elf_relocate_section): Likewise.
+	* elf32-s390.c (elf_s390_relocate_section): Likewise.
+	* elf32-score.c (s3_bfd_score_elf_relocate_section): Likewise.
+	(_bfd_score_elf_relocate_section): Likewise.
+	* elf32-score.h (s7_bfd_score_elf_relocate_section): Likewise.
+	* elf32-score7.c (s7_bfd_score_elf_relocate_section): Likewise.
+	* elf32-sh.c (sh_elf_relocate_section): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_relocate_section): Likewise.
+	* elf32-tilepro.c (tilepro_elf_relocate_section): Likewise.
+	* elf32-v850.c (v850_elf_relocate_section): Likewise.
+	* elf32-vax.c (elf_vax_relocate_section): Likewise.
+	* elf32-visium.c (visium_elf_relocate_section): Likewise.
+	* elf32-xc16x.c (elf32_xc16x_relocate_section): Likewise.
+	* elf32-xstormy16.c (xstormy16_elf_relocate_section): Likewise.
+	* elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
+	* elf32-z80.c (z80_elf_relocate_section): Likewise.
+	* elf64-alpha.c (elf64_alpha_relocate_section_r): Likewise.
+	(elf64_alpha_relocate_section): Likewise.
+	* elf64-bpf.c (bpf_elf_relocate_section): Likewise.
+	* elf64-hppa.c (elf64_hppa_relocate_section): Likewise.
+	* elf64-ia64-vms.c (elf64_ia64_relocate_section): Likewise.
+	* elf64-mmix.c (mmix_elf_relocate_section): Likewise.
+	* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
+	* elf64-s390.c (elf_s390_relocate_section): Likewise.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_relocate_section): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_relocate_section): Likewise.
+	* elfnn-riscv.c (riscv_elf_relocate_section): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_relocate_section): Likewise.
+	* elfxx-mips.h (_bfd_mips_elf_relocate_section): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Likewise.
+	* elfxx-sparc.h (_bfd_sparc_elf_relocate_section): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_relocate_section): Likewise.
+	* elfxx-tilegx.h (tilegx_elf_relocate_section): Likewise.
+
+2021-03-26  Keith Seitz  <keiths@redhat.com>
+
+	* elfcore.h (_bfd_elf_core_find_build_id): Seek file
+	offset of program headers after calling elf_read_notes.
+
+2021-03-23  Jan Beulich  <jbeulich@suse.com>
+
+	* dwarf2.c (read_indexed_string): Rename index to idx.
+
+2021-03-22  Martin Liska  <mliska@suse.cz>
+
+	* bfd-in.h (startswith): Add startswith function.
+	(CONST_STRNEQ): Remove.
+	* bfd-in2.h (startswith): Regenerate with make headers.
+	* archive.c (bfd_slurp_armap): Replace usage of CONST_STRNEQ with startswith.
+	(_bfd_slurp_extended_name_table): Likewise.
+	* archive64.c (_bfd_archive_64_bit_slurp_armap): Likewise.
+	* bfd.c (bfd_get_sign_extend_vma): Likewise.
+	(bfd_convert_section_size): Likewise.
+	(bfd_convert_section_contents): Likewise.
+	* coff-stgo32.c (go32exe_create_stub): Likewise.
+	(go32exe_check_format): Likewise.
+	* coffcode.h (styp_to_sec_flags): Likewise.
+	(GNU_DEBUGALTLINK): Likewise.
+	* coffgen.c (_bfd_coff_section_already_linked): Likewise.
+	(coff_gc_sweep): Likewise.
+	(bfd_coff_gc_sections): Likewise.
+	* cofflink.c (coff_link_add_symbols): Likewise.
+	(process_embedded_commands): Likewise.
+	* compress.c (bfd_is_section_compressed_with_header): Likewise.
+	(bfd_init_section_decompress_status): Likewise.
+	* dwarf2.c (find_debug_info): Likewise.
+	(place_sections): Likewise.
+	* ecoff.c (_bfd_ecoff_slurp_armap): Likewise.
+	* elf-m10300.c (_bfd_mn10300_elf_size_dynamic_sections): Likewise.
+	* elf.c (_bfd_elf_make_section_from_shdr): Likewise.
+	(assign_section_numbers): Likewise.
+	(elfcore_grok_win32pstatus): Likewise.
+	* elf32-arm.c (cmse_scan): Likewise.
+	(elf32_arm_gc_mark_extra_sections): Likewise.
+	(elf32_arm_size_dynamic_sections): Likewise.
+	(is_arm_elf_unwind_section_name): Likewise.
+	* elf32-bfin.c (bfin_size_dynamic_sections): Likewise.
+	* elf32-cr16.c (_bfd_cr16_elf_size_dynamic_sections): Likewise.
+	* elf32-cris.c (elf_cris_size_dynamic_sections): Likewise.
+	* elf32-csky.c (csky_elf_size_dynamic_sections): Likewise.
+	* elf32-hppa.c (elf32_hppa_size_dynamic_sections): Likewise.
+	* elf32-iq2000.c (iq2000_elf_check_relocs): Likewise.
+	* elf32-lm32.c (lm32_elf_size_dynamic_sections): Likewise.
+	* elf32-m32r.c (m32r_elf_size_dynamic_sections): Likewise.
+	* elf32-m68k.c (elf_m68k_size_dynamic_sections): Likewise.
+	* elf32-metag.c (elf_metag_size_dynamic_sections): Likewise.
+	* elf32-msp430.c (msp430_elf_relax_delete_bytes): Likewise.
+	* elf32-nios2.c (nios2_elf32_size_dynamic_sections): Likewise.
+	* elf32-or1k.c (or1k_elf_size_dynamic_sections): Likewise.
+	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise.
+	* elf32-s390.c (elf_s390_size_dynamic_sections): Likewise.
+	* elf32-score.c (s3_bfd_score_elf_size_dynamic_sections): Likewise.
+	* elf32-score7.c (s7_bfd_score_elf_size_dynamic_sections): Likewise.
+	* elf32-sh.c (sh_elf_size_dynamic_sections): Likewise.
+	* elf32-tic6x.c (is_tic6x_elf_unwind_section_name): Likewise.
+	(elf32_tic6x_size_dynamic_sections): Likewise.
+	* elf32-vax.c (elf_vax_size_dynamic_sections): Likewise.
+	* elf32-xtensa.c (elf_xtensa_size_dynamic_sections): Likewise.
+	(xtensa_is_insntable_section): Likewise.
+	(xtensa_is_littable_section): Likewise.
+	(xtensa_is_proptable_section): Likewise.
+	(xtensa_property_section_name): Likewise.
+	(xtensa_callback_required_dependence): Likewise.
+	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Likewise.
+	* elf64-hppa.c (elf64_hppa_size_dynamic_sections): Likewise.
+	* elf64-ia64-vms.c (is_unwind_section_name): Likewise.
+	(get_reloc_section): Likewise.
+	(elf64_ia64_size_dynamic_sections): Likewise.
+	(elf64_ia64_object_p): Likewise.
+	* elf64-mmix.c (mmix_elf_add_symbol_hook): Likewise.
+	* elf64-ppc.c (ppc64_elf_size_dynamic_sections): Likewise.
+	* elf64-s390.c (elf_s390_size_dynamic_sections): Likewise.
+	* elflink.c (elf_link_add_object_symbols): Likewise.
+	(_bfd_elf_gc_mark_extra_sections): Likewise.
+	(bfd_elf_parse_eh_frame_entries): Likewise.
+	(_bfd_elf_section_already_linked): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_size_dynamic_sections): Likewise.
+	* elfnn-ia64.c (is_unwind_section_name): Likewise.
+	(elfNN_ia64_size_dynamic_sections): Likewise.
+	(elfNN_ia64_object_p): Likewise.
+	* elfxx-mips.c (FN_STUB_P): Likewise.
+	(CALL_STUB_P): Likewise.
+	(CALL_FP_STUB_P): Likewise.
+	(_bfd_mips_elf_section_from_shdr): Likewise.
+	(_bfd_mips_elf_fake_sections): Likewise.
+	(_bfd_mips_elf_size_dynamic_sections): Likewise.
+	(_bfd_mips_final_write_processing): Likewise.
+	(_bfd_mips_elf_final_link): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections): Likewise.
+	* elfxx-x86.c (elf_i386_is_reloc_section): Likewise.
+	(elf_x86_64_is_reloc_section): Likewise.
+	* hpux-core.c (thread_section_p): Likewise.
+	* libcoff.h (bfd_pei_p): Likewise.
+	* linker.c (REAL): Likewise.
+	(unwrap_hash_lookup): Likewise.
+	(_bfd_generic_link_add_one_symbol): Likewise.
+	* mmo.c (mmo_internal_write_section): Likewise.
+	* osf-core.c (osf_core_core_file_p): Likewise.
+	* pef.c (bfd_pef_print_symbol): Likewise.
+	* pei-x86_64.c (pex64_print_all_pdata_sections): Likewise.
+	* som.c (som_slurp_symbol_table): Likewise.
+	(som_slurp_armap): Likewise.
+	* wasm-module.c (wasm_compute_custom_section_file_position): Likewise.
 
-	* elf32-arm.c (arm_allocate_glue_section_space): Clear section
-	contents.
+2021-03-22  Jan Beulich  <jbeulich@suse.com>
 
-2019-05-22  Alan Modra  <amodra@gmail.com>
+	* peXXigen.c (_bfd_XXi_swap_scnhdr_out): Add missing
+	language translation wrapping to _bfd_error_handler()
+	invocations.
 
-	* vms-alpha.c (_bfd_vms_write_etir): Don't attempt further
-	processing on "size error in section".
+2021-03-21  Alan Modra  <amodra@gmail.com>
 
-2019-05-22  Alan Modra  <amodra@gmail.com>
+	* bfd-in.h (startswith): New inline.
+	(CONST_STRNEQ): Use startswith.
+	* bfd-in2.h: Regenerate.
 
-	* som.c (som_bfd_free_cached_info): Call
-	_bfd_generic_close_and_cleanup.
+2021-03-20  Alan Modra  <amodra@gmail.com>
 
-2019-05-21  Faraz Shahbazker  <fshahbazker@wavecomp.com>
+	PR 27590
+	* elf.c (_bfd_elf_make_section_from_shdr): Remove SHF_EXCLUDE
+	test for .gnu.debuglto*.
 
-	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Generate error
-	for TLS_TPREL_HI16(/LO16) relocations in shared library.
+2021-03-18  H.J. Lu  <hongjiu.lu@intel.com>
 
-2019-05-21  Faraz Shahbazker  <fshahbazker@wavecomp.com>
+	PR ld/27590
+	* elf.c (_bfd_elf_make_section_from_shdr): Treat
+	.gnu.debuglto_.debug_ section as debugging section unless it is
+	marked with SHF_EXCLUDE.
+	* elflink.c (elf_create_symbuf): Revert commit 994b2513281.
+	(bfd_elf_match_symbols_in_sections): Ignore section symbols when
+	matching non-debugging sections or linkonce section with comdat
+	section.
 
-	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Add NULL pointer
-	checks.  Search the RELA table for n64 relocations.
+2021-03-18  H.J. Lu  <hongjiu.lu@intel.com>
 
-2019-05-21  Matthew Fortune  <matthew.fortune@mips.com>
-	    Faraz Shahbazker  <fshahbazker@wavecomp.com>
+	PR ld/27587
+	* dwarf2.c (read_attribute_value): Check version >= 3 for
+	DW_FORM_ref_addr.
 
-	* elfxx-mips.c (LA25_BC): New macro.
-	(mips_elf_link_hash_table)<compact_branches>: New field.
-	(STUB_JALRC): New macro.
-	(mipsr6_o32_exec_plt0_entry_compact): New array.
-	(mipsr6_n32_exec_plt0_entry_compact): Likewise.
-	(mipsr6_n64_exec_plt0_entry_compact): Likewise.
-	(mipsr6_exec_plt_entry_compact): Likewise.
-	(mips_elf_create_la25_stub): Use BC instead of J for stubs
-	when compact_branches is true.
-	(_bfd_mips_elf_finish_dynamic_symbol): Choose the compact
-	PLT for MIPSR6 with compact_branches.  Do not reorder the
-	compact branches PLT.  Switch the lazy stub for MIPSR6
-	with compact_branches to use JALRC.
-	(mips_finish_exec_plt): Choose the compact PLT0 for MIPSR6
-	when compact_branches is true.
-	(_bfd_mips_elf_compact_branches): New function.
-	* elfxx-mips.h (_bfd_mips_elf_compact_branches): New prototype.
+2021-03-16  Nick Clifton  <nickc@redhat.com>
 
-2019-05-21  Tamar Christina  <tamar.christina@arm.com>
+	* peXXigen.c (_bfd_XXi_swap_aux_out): Avoid potential buffer
+	overrun by using sizeof of the destination x_fname field as the
+	limit for a memcpy.
 
-	PR ld/24373
-	* elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub):
-	Fix print formatter.
+2021-03-16  Kuan-Lin Chen  <kuanlinchentw@gmail.com>
+
+	* elfxx-riscv.c (riscv_std_z_ext_strtab): Add zba, zbb and zbc.
 
-2019-05-21  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+2021-03-12  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	PR 24460
-	* elf32-arm.c (get_value_helper): Remove.
-	(elf32_arm_final_link_relocate): Fix branch future relocations.
+	* reloc.c (BFD_RELOC_PPC_TLS_LE, BFD_RELOC_PPC_TLS_IE,
+	BFD_RELOC_PPC_TLS_M, BFD_RELOC_PPC_TLS_ML, BFD_RELOC_PPC64_TLS_GD,
+	BFD_RELOC_PPC64_TLS_LD, BFD_RELOC_PPC64_TLS_LE,
+	BFD_RELOC_PPC64_TLS_IE, BFD_RELOC_PPC64_TLS_M,
+	BFD_RELOC_PPC64_TLS_ML): New relocations.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+	* coff-rs6000.c (xcoff_calculate_relocation): Call
+	xcoff_reloc_type_tls for TLS relocations.
+	(xcoff_howto_table): Implement TLS relocations.
+	(_bfd_xcoff_reloc_type_lookup): Add cases TLS relocations.
+	(xcoff_reloc_type_tls): New function.
+	* coff64-rs6000.c (xcoff_calculate_relocation): Likewise.
+	(xcoff_howto_table): Likewise.
+	(_bfd_xcoff_reloc_type_lookup): Likewise.
+	* coffcode.h (sec_to_styp_flags): Handle TLS sections.
+	(styp_to_sec_flags): Likewise.
+	(coff_compute_section_file_positions): Avoid file offset
+	optimisation for .data when the previous section is .tdata.
+	(coff_write_object_contents): Handle TLS sections.
+	* coffswap.h (coff_swap_aouthdr_out): Add support for
+	new fields in aouthdr.
+	* libxcoff.h (xcoff_reloc_type_tls): Add prototype.
+	* xcofflink.c (xcoff_link_add_symbols): Handle XMC_UL.
+	(xcoff_need_ldrel_p): Add cases for TLS relocations.
+	(xcoff_create_ldrel): Add l_symndx for TLS sections.
 
-2019-05-21  Tamar Christina  <tamar.christina@arm.com>
+2021-03-12  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	PR ld/24373
-	* bfd-in.h (enum erratum_84319_opts): New
-	(bfd_elf64_aarch64_set_options, bfd_elf32_aarch64_set_options): Change
-	int to enum erratum_84319_opts.
+	* reloc.c (BFD_RELOC_PPC_TOC16_HI, BFD_RELOC_PPC_TOC16_LO):
+	New relocations.
 	* bfd-in2.h: Regenerate.
-	* elfnn-aarch64.c (struct elf_aarch64_link_hash_table): Change
-	fix_erratum_843419 to use new enum, remove fix_erratum_843419_adr.
-	(_bfd_aarch64_add_stub_entry_after): Conditionally create erratum stub.
-	(aarch64_size_one_stub): Conditionally size erratum 843419 stubs.
-	(_bfd_aarch64_resize_stubs): Amend comment.
-	(elfNN_aarch64_size_stubs): Don't generate stubs when no workaround
-	requested.
-	(bfd_elfNN_aarch64_set_options): Use new fix_erratum_843419 enum.
-	(_bfd_aarch64_erratum_843419_branch_to_stub): Implement selection of
-	erratum workaround.
-	(clear_erratum_843419_entry): Update erratum conditional.
-
-2019-05-21  Senthil Kumar Selvaraj  <senthilkumar.selvaraj@microchip.com>
-
-	PR ld/24571
-	* bfd/elf32-avr.c (elf32_avr_relax_section): Adjust range check
-	when computing distance_short_enough.
-
-2019-05-21  Senthil Kumar Selvaraj  <senthilkumar.selvaraj@microchip.com>
-
-	PR ld/24564
-	* bfd/elf32-avr.c (avr_relative_distance_considering_wrap_around):
-	Wrap around even if distance equals avr_pc_wrap_around.
+	* libbfd.h: Regenerate.
+	* coff-rs6000.c (xcoff_calculate_relocation): Call
+	xcoff_reloc_type_toc for R_TOCU and R_TOCL.
+	(xcoff_howto_table): Remove src_mask for TOC relocations.
+	Add R_TOCU and R_TOCL howtos.
+	(_bfd_xcoff_reloc_type_lookup): Add cases for
+	BFD_RELOC_PPC_TOC16_HI and BFD_RELOC_PPC_TOC16_LO.
+	(xcoff_reloc_type_toc): Compute the whole offset.
+	Implement R_TOCU and R_TOCL.
+	* coff64-rs6000.c (xcoff64_calculate_relocation):
+	Likewise.
+	(xcoff64_howto_table): Likewise.
+	(xcoff64_reloc_type_lookup): Likewise.
+
+2021-03-12  ClÃ©ment Chigot  <clement.chigot@atos.net>
+
+	* coff-rs6000.c (xcoff_calculate_relocation): Correct and
+	add new relocations.
+	(xcoff_howto_table): Likewise.
+	(xcoff_rtype2howto): Increase r_type maximum value.
+	(xcoff_ppc_relocate_section): Reuse predefined HOWTOs instead
+	of create a new one from scratch.  Enable only some relocations
+	to have a changing r_size.
+	* coff64-rs6000.c (xcoff64_calculate_relocation): Likewise.
+	(xcoff64_howto_table): Likewise.
+	(xcoff64_rtype2howto): Likewise.
+	(xcoff64_ppc_relocate_section): Likewise.
+	* libxcoff.h (XCOFF_MAX_CALCULATE_RELOCATION): Fix value.
+
+2021-03-12  ClÃ©ment Chigot  <clement.chigot@atos.net>
+
+	* coff64-rs6000.c (xcoff64_ppc_relocate_section): Move.
+
+2021-03-12  ClÃ©ment Chigot  <clement.chigot@atos.net>
+
+	* coff64-rs6000.c (xcoff64_write_object_contents): Remove.
+	* coffcode.h (coff_write_object_contents): Add bfd_mach_ppc_620
+	support for o_cputype field.  Avoid creating an empty a.out header
+	for XCOFF64.
+
+2021-03-12  ClÃ©ment Chigot  <clement.chigot@atos.net>
+
+	* coff64-rs6000.c (xcoff64_create_csect_from_smclas): Add
+	missing smclass.
+
+2021-03-11  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_elf_link_hash_table): New boolean
+	restart_relax, used to check if we need to run the whole
+	relaxations from relax pass 0 to 2 again.
+	(riscv_elf_link_hash_table_create): Init restart_relax to FALSE.
+	(_bfd_riscv_relax_align): Remove obsolete sec_flg0 set.
+	(_bfd_riscv_relax_delete): Set again to TRUE if we do delete the code.
+	(bfd_elfNN_riscv_restart_relax_sections): New function.  Called by
+	after_allocation to check if we need to run the whole relaxations again.
+	(_bfd_riscv_relax_section): We will only enter into the relax pass 3
+	when the restart_relax is FALSE; At last set restart_relax to TRUE if
+	again is TRUE, too.
+	* elfxx-riscv.h (bfd_elf32_riscv_restart_relax_sections): Declaration.
+	(bfd_elf64_riscv_restart_relax_sections): Likewise.
+
+2021-03-10  Jan Beulich  <jbeulich@suse.com>
+
+	* cofflink.c (_bfd_coff_write_global_sym): Range-check symbol
+	offset.
+
+2021-03-10  Alan Modra  <amodra@gmail.com>
+	    Jan Beulich  <jbeulich@suse.com>
+
+	* elf.c (bfd_elf_generic_reloc): Make references between debug
+	sections use section relative values.
+
+2021-03-09  Jan Beulich  <jbeulich@suse.com>
+
+	* peXXigen.c (_bfd_XXi_swap_scnhdr_out): Diagnose out of range RVA.
+
+2021-03-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27425
+	PR ld/27432
+	* bfd.c (_bfd_get_link_info): New function.
+	* elf-bfd.h (output_elf_obj_tdata): Add link_info.
+	(elf_link_info): New.
+	* libbfd-in.h (_bfd_get_link_info): New prototype.
+	* coff-x86_64.c (coff_amd64_reloc): Also subtract __ImageBase for
+	R_AMD64_IMAGEBASE when generating x86-64 ELF executable.
+	* pe-x86_64.c: Include "coff/internal.h" and "libcoff.h".
+	(pex64_link_add_symbols): New function.
+	(coff_bfd_link_add_symbols): New macro.
+	* libbfd.h: Regenerated.
 
-2019-05-20  Nick Clifton  <nickc@redhat.com>
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* po/fr.po: Updated French translation.
+	* elf-bfd.h (elfcore_write_riscv_csr): Declare.
+	* elf.c (elfcore_grok_riscv_csr): New function.
+	(elfcore_grok_note): Handle NT_RISCV_CSR.
+	(elfcore_write_riscv_csr): New function.
+	(elfcore_write_register_note): Handle '.reg-riscv-csr'.
 
-2019-05-16  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* elf32-arm.c (elf32_arm_merge_eabi_attributes): Add case for Tag_MVE_arch.
+	* elfnn-riscv.c (PRPSINFO_PR_FNAME_LENGTH): Define.
+	(PRPSINFO_PR_PSARGS_LENGTH): Define.
+	(riscv_write_core_note): New function.
+	(riscv_elf_grok_psinfo): Make use of two new length defines.
+	(elf_backend_write_core_note): Define.
 
-2019-05-16  Alan Modra  <amodra@gmail.com>
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* elf32-arm.c (elf32_arm_write_section): Revert last change.
+	* elf-bfd.h (elfcore_write_gdb_tdesc): Declare new function.
+	* elf.c (elfcore_grok_gdb_tdesc): New function.
+	(elfcore_grok_note): Handle NT_GDB_TDESC.
+	(elfcore_write_gdb_tdesc): New function.
+	(elfcore_write_register_note): Handle NT_GDB_TDESC.
 
-2019-05-15  Alan Modra  <amodra@gmail.com>
+2021-03-05  Nick Clifton  <nickc@redhat.com>
 
-	* elf32-arm.c (elf32_arm_write_section): Don't leave
-	error case of STM32L4XX_ERRATUM_BRANCH_TO_VENEER with
-	unitialised section contents.
+	PR 27521
+	* dwarf2.c (is_str_attr): Add DW_FORM_strx* forms.
+	(read_indexed_string): Placeholder function.
+	(read_attribute_value): Handle DW_FORM_strx* and DW_FORM_addrx*
+	forms.
 
-2019-05-14  Jamey Hicks  <jamey.hicks@gmail.com>
+2021-03-05  Alan Modra  <amodra@gmail.com>
 
-	PR 19921
-	* verilog.c: (VerilogDataWidth): New variable.
-	(verilog_write_record): Emit bytes in VerilogDataWidth bundles.
+	* reloc.c (bfd_perform_relocation): Revert 2021-01-12 and
+	2020-09-16 changes.
+	* coff-x86_64.c (coff_amd64_reloc): Do more or less the same
+	adjustments here instead.  Separate pc-relative adjustments
+	from symbol related adjustments.  Tidy comments and formatting.
 
-2019-05-08  Nick Clifton  <nickc@redhat.com>
+2021-03-04  Jan Beulich  <jbeulich@suse.com>
 
-	PR 24523
-	* elf32-m68k.c (elf32_m68k_merge_private_bfd_data): Return TRUE
-	rather than FALSE if encountering a non-ELF file.
+	* coffcode.h (sec_to_styp_flags): Don't set IMAGE_SCN_LNK_* in
+	final PE images.
 
-2019-05-06  Alan Modra  <amodra@gmail.com>
+2021-03-04  Alan Modra  <amodra@gmail.com>
 
-	* elf32-pj.c (pj_elf_reloc): Don't report undefined weak as an error.
+	* rs6000-core.c (rs6000coff_core_p): Correct prototype.
 
-2019-05-06  Alan Modra  <amodra@gmail.com>
+2021-03-03  Alan Modra  <amodra@gmail.com>
 
-	* reloc.c (BFD_RELOC_PPC64_TPREL16_HIGH, BFD_RELOC_PPC64_TPREL16_HIGHA),
-	(BFD_RELOC_PPC64_DTPREL16_HIGH, BFD_RELOC_PPC64_DTPREL16_HIGHA):
-	Sort before BFD_RELOC_PPC64_DTPREL16_HIGHESTA entry.
-	* libbfd.h: Regenerate.
-	* bfd-in2.h: Regenerate.
+	PR 27500
+	* elflink.c (_bfd_elf_gc_mark_rsec): Do special start/stop
+	processing not when start/stop symbol section is unmarked but
+	on first time a start/stop symbol is processed.
 
-2019-05-04  Alan Modra  <amodra@gmail.com>
+2021-03-03  Alan Modra  <amodra@gmail.com>
 
-	PR 24511
-	* syms.c (coff_section_type): Only allow '.', '$' and numeric
-	following the standard section names.
-	(bfd_decode_symclass): Prioritize section flag tests in
-	decode_section_type before name tests in coff_section_type.
-	* plugin.c (bfd_plugin_canonicalize_symtab): Init fake_section
-	and fake_common_section using BFD_FAKE_SECTION.  Use "fake" as
-	their names and choose standard .text section flags for
-	fake_section.
+	* reloc.c: Include x86_64.h rather than internal.h.
 
-2019-05-02  Nick Clifton  <nickc@redhat.com>
+2021-03-02  Nick Clifton  <nickc@redhat.com>
 
-	PR 24493
-	* coffcode.h (styp_to_sec_flags): Treat .gnu.debuglink and
-	.gnu.debugaltlink sections as debugging sections.
+	PR 27484
+	* dwarf2.c (scan_unit_for_symbols): Scan twice, once to accumulate
+	function and variable tags and a second time to resolve their
+	attributes.
 
-2019-04-30  Alan Modra  <amodra@gmail.com>
+2021-03-02  Nick Alcock  <nick.alcock@oracle.com>
 
-	* elf64-ppc.c (struct ppc64_elf_obj_tdata): Add has_gotrel.
-	(struct _ppc64_elf_section_data): Likewise.
-	(ppc64_elf_check_relocs): Set above fields.
-	(ppc64_elf_edit_toc): Add a pass over GOT relocs.
-	(ppc64_elf_relocate_section): Edit GOT indirect to GOT relative
-	when possible.
+	* elf-strtab.c (_bfd_elf_strtab_str): Skip strings with zero refcount.
 
-2019-04-26  H.J. Lu  <hongjiu.lu@intel.com>
+2021-03-02  Alan Modra  <amodra@gmail.com>
 
-	PR ld/24486
-	* elflink.c (elf_link_output_extsym): Don't complain undefined
-	weak dynamic reference.
+	PR 27451
+	* elf64-ppc.c (ppc64_elf_gc_mark_dynamic_ref): Ignore synthesized
+	linker defined start/stop symbols when start_stop_gc.
 
-2019-04-25  Sudakshina Das  <sudi.das@arm.com>
+2021-03-02  Alan Modra  <amodra@gmail.com>
 
-	* elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): Remove.
-	(PLT_BTI_TLSDESC_ENTRY_SIZE): Remove.
-	(PLT_PAC_ENTRY_SIZE, PLT_BTI_PAC_ENTRY_SIZE): Remove.
-	(PLT_BTI_SMALL_ENTRY_SIZE, PLT_PAC_SMALL_ENTRY_SIZE): Update.
-	(elfNN_aarch64_small_plt0_pac_entry): Remove.
-	(elfNN_aarch64_small_plt0_bti_pac_entry): Remove.
-	(elfNN_aarch64_small_plt0_bti_entry): Update.
-	(elfNN_aarch64_small_plt_bti_entry): Update.
-	(elfNN_aarch64_small_plt_pac_entry): Update.
-	(elfNN_aarch64_tlsdesc_small_plt_bti_entry): Update.
-	(setup_plt_values): Setup new entries.
-	(elfNN_aarch64_finish_dynamic_sections): Remove size change.
-	(elfNN_aarch64_plt_sym_val): Likewise.
+	* elf64-ppc.c (ppc64_elf_relocate_section): Don't optimise got
+	indirect to pc-relative or toc-relative for undefined symbols.
 
-2019-04-22  Jim Wilson  <jimw@sifive.com>
+2021-03-01  Alan Modra  <amodra@gmail.com>
+	    Fangrui Song <maskray@google.com>
 
-	* elfnn-riscv.c (PRSTATUS_SIZE) [ARCH_SIZE==32]: Change from 0 to 204.
+	* elflink.c (_bfd_elf_gc_mark_rsec): Ignore synthesized linker
+	defined start/stop symbols when start_stop_gc.
+	(bfd_elf_gc_mark_dynamic_ref_symbol): Likewise.
+	(bfd_elf_define_start_stop): Don't modify ldscript_def syms.
+	* linker.c (bfd_generic_define_start_stop): Likewise.
 
-2019-04-19  Alan Modra  <amodra@gmail.com>
+2021-02-25  Alan Modra  <amodra@gmail.com>
 
-	* elf32-s12z.c (elf_backend_can_gc_sections): Don't define
+	PR 27441
+	* elf-bfd.h (struct elf_link_hash_entry): Add ref_ir_nonweak.
+	* elflink.c (elf_link_add_object_symbols): Set ref_ir_nonweak and
+	use when deciding an as-needed library should be loaded instead
+	of using the binding of the library definition.
 
-2019-04-17  H.J. Lu  <hongjiu.lu@intel.com>
+2021-02-24  Alan Modra  <amodra@gmail.com>
 
-	* elf64-x86-64.c (elf_x86_64_need_pic): Suggest -fPIE when not
-	building shared object.
-	* elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Likewise.
+	PR 27459
+	* coff-stgo32.c (go32exe_check_format): Sanity check size of
+	header to avoid a buffer overflow.
 
-2019-04-17  H.J. Lu  <hongjiu.lu@intel.com>
+2021-02-22  Alan Modra  <amodra@gmail.com>
 
-	PR ld/24458
-	* elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): Also check x86
-	linker_def.
+	* coff-rs6000.c (_bfd_xcoff_reloc_type_lookup): Remove BFD_RELOC_16.
+	* coff64-rs6000.c (xcoff64_reloc_type_lookup): Likewise.
 
-2019-04-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+2021-02-19  Nelson Chu  <nelson.chu@sifive.com>
 
-	* reloc.c (BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM): New internal
-	relocation.
-	* bfd-in2.h: Regenerate.
-	* libbfd.h: Likewise.
+	PR 27158
+	* elfnn-riscv.c (perform_relocation): Updated encoding macros.
+	(_bfd_riscv_relax_call): Likewise.
+	(_bfd_riscv_relax_lui): Likewise.
+	* elfxx-riscv.c (howto_table): Likewise.
 
-2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+2021-02-18  Nelson Chu  <nelson.chu@sifive.com>
 
-	* reloc.c (BFD_RELOC_ARM_THUMB_LOOP12): New.
-	* bfd-in2.h: Regenerated.
-	* libbfd.h: Regenerated.
+	* Makefile.am: Added cpu-riscv.h.
+	* Makefile.in: Regenerated.
+	* po/SRC-POTFILES.in: Regenerated.
+	* cpu-riscv.h: Added to support spec versions controlling.
+	Also added extern arrays and functions for cpu-riscv.c.
+	(enum riscv_spec_class): Define all spec classes here uniformly.
+	(struct riscv_spec): Added for all specs.
+	(RISCV_GET_SPEC_CLASS): Added to reduce repeated code.
+	(RISCV_GET_SPEC_NAME): Likewise.
+	(RISCV_GET_ISA_SPEC_CLASS): Added to get ISA spec class.
+	(RISCV_GET_PRIV_SPEC_CLASS): Added to get privileged spec class.
+	(RISCV_GET_PRIV_SPEC_NAME): Added to get privileged spec name.
+	* cpu-riscv.c (struct priv_spec_t): Replaced with struct riscv_spec.
+	(riscv_get_priv_spec_class): Replaced with RISCV_GET_PRIV_SPEC_CLASS.
+	(riscv_get_priv_spec_name): Replaced with RISCV_GET_PRIV_SPEC_NAME.
+	(riscv_priv_specs): Moved below.
+	(riscv_get_priv_spec_class_from_numbers): Likewise, updated.
+	(riscv_isa_specs): Moved from include/opcode/riscv.h.
+	* elfnn-riscv.c: Included cpu-riscv.h.
+	(riscv_merge_attributes): Initialize in_priv_spec and out_priv_spec.
+	* elfxx-riscv.c: Included cpu-riscv.h and opcode/riscv.h.
+	(RISCV_UNKNOWN_VERSION): Moved from include/opcode/riscv.h.
+	* elfxx-riscv.h: Removed extern functions to cpu-riscv.h.
 
-2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+2021-02-17  Alan Modra  <amodra@gmail.com>
 
-	* reloc.c (BFD_RELOC_THUMB_PCREL_BFCSEL): New relocation.
-	* bfd-in2.h: Regenerated.
-	* libbfd.h: Likewise.
+	* wasm-module.c: Guard include of limits.h.
+	(CHAR_BIT): Provide backup define.
+	(wasm_read_leb128): Use CHAR_BIT to size "result" in bits.
+	Correct signed overflow checking.
 
-2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+2021-02-17  Nelson Chu  <nelson.chu@sifive.com>
 
-	* reloc.c (BFD_RELOC_ARM_THUMB_BF13): New.
-	* bfd-in2.h: Regenerated.
-	* libbfd.h: Regenerated.
-	* elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF13.
-	(elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF13
-	and R_ARM_THM_BF12 together.
-	(elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF13.
+	PR 27200
+	* elfnn-riscv.c (_bfd_riscv_elf_merge_private_bfd_data): Delay
+	copying the elf flags from input BFD to output BFD, until we have
+	checked if the input BFD has no code section or not.  Also fix the
+	problem that we only check the first section rather than the entire
+	sections for input BFD.
 
-2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+2021-02-16  Alan Modra  <amodra@gmail.com>
 
-	* reloc.c (BFD_RELOC_ARM_THUMB_BF19): New
-	* libbfd.h: Regenerated.
-	* bfd-in2.h: Regenerated.
-	* bfd-elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF18.
-	(elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF19
-	and R_ARM_THM_BF18 together.
-	(elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF19.
+	* libbfd.c (_bfd_read_unsigned_leb128): Avoid excessive shift.
+	(_bfd_safe_read_leb128, _bfd_read_signed_leb128): Likewise.
 
-2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+2021-02-15  Jan Beulich  <jbeulich@suse.com>
 
-	* reloc.c (BFD_RELOC_ARM_THUMB_BF17): New enum.
-	* bfd-in2.h: Regenerated.
-	* libbfd.h: Regenerated.
-	* bfd-elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF16.
-	(elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF17
-	and R_ARM_THM_BF16 together.
-	(get_value_helper): New reloc helper.
-	(elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF16.
+	* doc/Makefile.am: Replace "cp -p" by "$(LN_S)".
+	* doc/Makefile.in: Re-generate.
 
-2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+2021-02-15  Alan Modra  <amodra@gmail.com>
 
-	* reloc.c (BFD_RELOC_THUMB_PCREL_BRANCH5): New enum.
-	* bfd-in2.h: Regenerate.
-	* libbfd.h: Regenerate.
+	* elf32-nds32.c (nds32_get_section_contents): Replace
+	bfd_malloc_and_get_section with bfd_get_full_section_contents.
+	(nds32_elf_relax_delete_blanks): Init contents.
+	(nds32_elf_relax_section, nds32_relax_fp_as_gp): Likewise.
 
-2019-04-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+2021-02-15  Alan Modra  <amodra@gmail.com>
 
-	* archures.c (bfd_mach_arm_8_1M_MAIN): Define.
-	* bfd-in2.h: Regenerate.
-	* cpu-arm.c (arch_info_struct): Add entry for Armv8.1-M Mainline.
-	* elf32-arm.c (using_thumb_only): Return true for Armv8.1-M Mainline
-	and update assert.
-	(using_thumb2): Likewise.
-	(using_thumb2_bl): Update assert.
-	(arch_has_arm_nop): Likewise.
-	(bfd_arm_get_mach_from_attributes): Add case for Armv8.1-M Mainline.
-	(tag_cpu_arch_combine): Add logic for Armv8.1-M Mainline merging.
-
-2019-04-11  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* elf-linker-x86.h (elf_x86_cet_report): New.
-	(elf_linker_x86_params): Add cet_report.
-	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Report
-	missing IBT and SHSTK properties if needed.
-
-2019-04-11  H.J. Lu  <hongjiu.lu@intel.com>
-
-	PR ld/24436
-	* elf-m10300.c (mn10300_elf_check_relocs): Remove BFD_ASSERT of
-	"h != NULL".  Don't check "h != NULL" before calling.
-	bfd_elf_gc_record_vtentry.
-	* elf32-arm.c (elf32_arm_check_relocs): Likewise.
-	* elf32-bfin.c (bfin_check_relocs): Likewise.
-	* elf32-cris.c (cris_elf_check_relocs): Likewise.
-	* elf32-csky.c (csky_elf_check_relocs): Likewise.
-	* elf32-d10v.c (elf32_d10v_check_relocs): Likewise.
-	* elf32-dlx.c (elf32_dlx_check_relocs): Likewise.
-	* elf32-fr30.c (fr30_elf_check_relocs): Likewise.
-	* elf32-frv.c (elf32_frv_check_relocs): Likewise.
-	* elf32-hppa.c (elf32_hppa_check_relocs): Likewise.
-	* elf32-i386.c (elf_i386_check_relocs): Likewise.
-	* elf32-iq2000.c (iq2000_elf_check_relocs): Likewise.
-	* elf32-m32r.c (m32r_elf_check_relocs): Likewise.
-	* elf32-m68hc1x.c (elf32_m68hc11_check_relocs): Likewise.
-	* elf32-m68k.c (elf_m68k_check_relocs): Likewise.
-	* elf32-mcore.c (mcore_elf_check_relocs): Likewise.
-	* elf32-metag.c (elf_metag_check_relocs): Likewise.
-	* elf32-or1k.c (or1k_elf_check_relocs): Likewise.
-	* elf32-ppc.c (ppc_elf_check_relocs): Likewise.
-	* elf32-s390.c (elf_s390_check_relocs): Likewise.
-	* elf32-sh.c (sh_elf_check_relocs): Likewise.
-	* elf32-v850.c (v850_elf_check_relocs): Likewise.
-	* elf32-vax.c (elf_vax_check_relocs): Likewise.
-	* elf32-xstormy16.c (xstormy16_elf_check_relocs): Likewise.
-	* elf32-xtensa.c (elf_xtensa_check_relocs): Likewise.
-	* elf64-mmix.c (mmix_elf_check_relocs): Likewise.
-	* elf64-ppc.c (ppc64_elf_check_relocs): Likewise.
-	* elf64-s390.c (elf_s390_check_relocs): Likewise.
-	* elf64-x86-64.c (elf_s390_check_relocs): Likewise.
-	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise.
-	* elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise.
-	* elflink.c (bfd_elf_gc_record_vtinherit): Check for corrupt
-	VTENTRY entry.
-
-2019-04-11  Alan Modra  <amodra@gmail.com>
-
-	PR 24435
-	* elflink.c (elf_link_add_object_symbols): Don't read partial
-	dynamic entries from fuzzed objects.
-
-2019-04-11  Tamar Christina  <tamar.christina@arm.com>
-
-	PR ld/24302
-	* elfnn-aarch64.c (elfNN_aarch64_size_dynamic_sections): Don't emit
-	DT_TLSDESC_GOT and DT_TLSDESC_PLT when DF_BIND_NOW.
-	(elfNN_aarch64_finish_dynamic_sections): Don't write PLT if DF_BIND_NOW.
-
-2019-04-10  Michael Forney  <mforney@mforney.org>
-
-	PR 24427
-	* doc/chew.c (free_words): Correctly free "push_text" strings.
+	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents): Use
+	bfd_get_full_section_contents.
 
-2019-04-08  H.J. Lu  <hongjiu.lu@intel.com>
+2021-02-14  Alan Modra  <amodra@gmail.com>
 
-	* config.bfd: Remove i[3-7]86-*-kaos* and i[3-7]86-*-chaos targets.
+	* elfxx-mips.c (_bfd_elf_mips_get_relocated_section_contents): Apply
+	all fixes to bfd_generic_get_relocated_section_contents since this
+	function was split out.
 
-2019-04-08  Alan Modra  <amodra@gmail.com>
+2021-02-11  Alan Modra  <amodra@gmail.com>
 
-	* configure.ac (elfxx_x86): Define and use.
-	* configure: Regenerate.
+	* config.bfd: Remove ia64 from obsolete list.
 
-2019-04-06  H.J. Lu  <hongjiu.lu@intel.com>
+2021-02-11  Alan Modra  <amodra@gmail.com>
 
-	* elf-linker-x86.h: New file.
-	* elf32-i386.c (elf_i386_convert_load_reloc): Use htab->params
-	to get x86-specific linker options.
-	* elf64-x86-64.c (elf_x86_64_convert_load_reloc): Likewise.
-	(elf_x86_64_check_relocs): Likewise.
-	(elf_x86_64_relocate_section): Likewise.
-	(elf_x86_64_link_setup_gnu_properties): Likewise.
-	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Likewise.
-	(_bfd_x86_elf_link_setup_gnu_properties): Likewise.
-	(_bfd_elf_linker_x86_set_options): New function.
-	* elfxx-x86.h: Include "elf-linker-x86.h".
-	(elf_x86_link_hash_table): Add params.
-
-2019-04-03  Alan Modra  <amodra@gmail.com>
-
-	* coff-i386.c, * coff-x86_64.c, * coffgen.c, * dwarf2.c,
-	* elf-m10200.c, * elf.c, * elf32-arm.c, * elf32-bfin.c,
-	* elf32-csky.c, * elf32-m32r.c, * elf32-microblaze.c, * elf32-pru.c,
-	* elf32-rx.c, * elf32-xgate.c, * elf64-sparc.c, * elfnn-ia64.c,
-	* elfxx-riscv.c, * elfxx-sparc.c, * linker.c, * mach-o.c,
-	* pe-x86_64.c, * pei-x86_64.c, * plugin.c: Whitespace fixes.
-
-2019-04-02  Jim Wilson  <jimw@sifive.com>
-
-	PR 24389
-	* elfnn-riscv.c (_bfd_riscv_elf_merge_private_bfd_data): Move read of
-	ELF header flags to after check for ELF object file.  Loop through
-	sections looking for code sections, if none, then skip ABI checks.
-
-2019-03-30  Andrew Waterman  <andrew@sifive.com>
-
-	* elfnn-riscv.c (_bfd_riscv_relax_call): Only check ARCH_SIZE for
-	rd == X_RA case.
-
-2019-03-29  Max Filippov  <jcmvbkbc@gmail.com>
+	PR ld/22269
+	* elfnn-ia64.c: Revert 2017-10-14 git commit db41f6eb5234.
 
-	* elf32-xtensa.c (shrink_dynamic_reloc_sections): Add
-	info->export_dynamic to the conditional.
+2021-02-11  Alan Modra  <amodra@gmail.com>
 
-2019-03-28  Alan Modra  <amodra@gmail.com>
+	PR 27294
+	* elf32-avr.c (avr_elf32_load_records_from_section): Use
+	bfd_malloc_and_get_section.  Use bfd_byte* vars and remove then
+	unnecessary casts.
 
-	PR 24392
-	* configure.ac: Invoke AC_CHECK_SIZEOF(int).
+2021-02-11  Alan Modra  <amodra@gmail.com>
+
+	PR 27291
+	* section.c (bfd_get_section_contents): Avoid possible overflow
+	when range checking offset and count.
+	(bfd_set_section_contents): Likewise.
+
+2021-02-03  Nick Alcock  <nick.alcock@oracle.com>
+
+	* configure.ac (SHARED_LIBADD): Remove explicit -lintl population in
+	favour of LIBINTL.
+	* configure: Regenerated.
+
+2021-02-09  Alan Modra  <amodra@gmail.com>
+
+	* config.bfd (arm*-*-symbianelf*): Move from obsolete to removed.
+	* configure.ac: Delete symbian entries.
+	* elf-bfd.h (enum elf_target_os): Delete is_symbian.
+	* elf32-arm.c: Remove symbian support.  Formatting.
+	* targets.c: Delete symbian entries.
 	* configure: Regenerate.
-	* coffgen.c (coff_get_reloc_upper_bound): Replace gcc diagnostic
-	workaround with SIZEOF_LONG vs. SIZEOF_INT check.
-	* elf.c (_bfd_elf_get_reloc_upper_bound): Likewise.
-	* elf64-sparc.c (elf64_sparc_get_reloc_upper_bound): Likewise.
-	* mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise.
-
-2019-03-21  Jim Wilson  <jimw@sifive.com>
-
-	PR 24365
-	* elfnn-riscv.c (riscv_elf_relocate_section): For STT_SECTION check,
-	verify sym non-NULL before using.  Add identical check using h.
-
-2019-03-21  Sudakshina Das  <sudi.das@arm.com>
-
-	* elf-bfd.h (struct elf_backend_data): Add argument to
-	merge_gnu_properties.
-	* elf-properties.c (elf_merge_gnu_properties): Add argument to
-	itself and while calling bed->merge_gnu_properties.
-	(elf_merge_gnu_property_list): Update the calls for
-	elf_merge_gnu_properties.
-	* elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update handling
-	of --force-bti warning and add argument.
-	* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Add
-	warning.
-	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Add argument.
-	* elfxx-x86.h (_bfd_x86_elf_merge_gnu_properties): Likewise in
-	declaration.
 
-2019-03-20  Sudakshina Das  <sudi.das@arm.com>
+2021-02-04  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* elfxx-aarch64.c (_bfd_aarch64_elf_link_fixup_gnu_properties): Define.
-	* elfxx-aarch64.h (_bfd_aarch64_elf_link_fixup_gnu_properties): Declare.
-	(elf_backend_fixup_gnu_properties): Define for AArch64.
+	PR ld/19609
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Provide more
+	info when failed to convert GOTPCREL relocation.
 
-2019-03-18  Alan Modra  <amodra@gmail.com>
+2021-02-04  Nelson Chu  <nelson.chu@sifive.com>
 
-	PR 24355
-	* elf32-ppc.c (ppc_finish_symbols): Don't call write_glink_stub
-	for local iplt syms with ent->plt.offset == -1.  Remove ineffective
-	attempt at writing glink stubs only once.
+	* elfxx-riscv.c (riscv_parse_prefixed_ext): Removed zb*.
 
-2019-03-16  Alan Modra  <amodra@gmail.com>
+2021-02-04  Alan Modra  <amodra@gmail.com>
 
-	PR 24337
-	* elf.c (_bfd_elf_rela_local_sym): Revert last change.
-	(_bfd_elf_rel_local_sym): Likewise.
-	* elflink.c (elf_link_input_bfd): Use bfd_und_section for
-	section of symbols with unrecognized shndx.
+	PR 27311
+	* elflink.c (elf_link_add_object_symbols): Don't pull in as-needed
+	libraries for IR references on pass over libraries after LTO
+	recompilation.
 
-2019-03-15  H.J. Lu  <hongjiu.lu@intel.com>
+2021-02-03  Alan Modra  <amodra@gmail.com>
 
-	PR ld/24267
-	* coffgen.c (_bfd_coff_section_already_linked): Skip discarded
-	section.
-	* cofflink.c (coff_link_add_symbols): Check for symbols defined
-	in discarded section.
+	PR 27311
+	* elflink.c (_bfd_elf_add_default_symbol): Revert last two changes.
+	(elf_link_add_object_symbols): Here too.  Don't pull in as-needed
+	libraries when H is an indirect symbol after calling
+	_bfd_elf_add_default_symbol.
 
-2019-03-15  Alan Modra  <amodra@gmail.com>
+2021-02-03  Alan Modra  <amodra@gmail.com>
 
-	PR 24339
-	* elflink.c (elf_link_add_object_symbols): Bail out on a local
-	symbol after globals if elf_bad_symtab is not set.
-
-2019-03-15  Alan Modra  <amodra@gmail.com>
-
-	PR 24337
-	* elf.c (_bfd_elf_rela_local_sym): Don't segfault on NULL sec.
-	(_bfd_elf_rel_local_sym): Likewise.
-
-2019-03-15  Alan Modra  <amodra@gmail.com>
-
-	PR 24336
-	* elflink.c (elf_link_read_relocs_from_section): Handle fuzzed
-	object files with sh_size not a multiple of sh_entsize.
-
-2019-03-15  H.J. Lu  <hongjiu.lu@intel.com>
-
-	PR ld/24338
-	* elf64-x86-64.c (elf_x86_64_relocate_section): Check for corrupt
-	input with bad relocation.
-
-22019-03-15  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* elf64-x86-64.c (elf_x86_64_relocate_section): Re-indent.
-
-2019-03-14  Nick Clifton  <nickc@redhat.com>
-
-	PR 24334
-	* dwarf2.c (struct dwarf2_debug): Add sec_vma_count field.
-	(save_section_vma): Initialise field to the number of entries in
-	the sec_vma table.
-	(section_vma_same): Check that the number of entries in the
-	sec_vma table matches the number of sections in the bfd.
-
-2019-03-14  Nick Clifton  <nickc@redhat.com>
-
-	PR 24333
-	* elflink.c (_bfd_elf_add_default_symbol): Add a check for a NULL
-	section owner pointer when adding the default symbol.
-
-2019-03-14  Nick Clifton  <nickc@redhat.com>
-
-	PR 24332
-	* elflink.c (elf_link_add_object_symbols): Add new local variable
-	extversym_end.  Initialise it to point to the end of the version
-	symbol table, if present.  Check it when initialising and updating
-	the ever pointer.
-
-2019-03-13  Sudakshina Das  <sudi.das@arm.com>
-
-	* elfnn-aarch64.c (PLT_PAC_ENTRY_SIZE, PLT_PAC_SMALL_ENTRY_SIZE): New.
-	(PLT_BTI_PAC_ENTRY_SIZE, PLT_BTI_PAC_SMALL_ENTRY_SIZE): New.
-	(setup_plt_values): Account for PAC or PAC and BTI enabled PLTs.
-	(elfNN_aarch64_size_dynamic_sections): Add checks for PLT_BTI_PAC
-	and PLT_PAC_PLT.
-	(elfNN_aarch64_finish_dynamic_sections): Account for PLT_BTI_PAC.
-	(get_plt_type): Add case for DT_AARCH64_PAC_PLT.
-	(elfNN_aarch64_plt_sym_val): Add cases for PLT_BTI_PAC and PLT_PAC.
-
-2019-03-13  Sudakshina Das  <sudi.das@arm.com>
-	    Szabolcs Nagy  <szabolcs.nagy@arm.com>
-
-	* bfd-in.h (aarch64_plt_type, aarch64_enable_bti_type): New.
-	(aarch64_bti_pac_info): New.
-	(bfd_elf64_aarch64_set_options): Add aarch64_bti_pac_info argument.
-	(bfd_elf32_aarch64_set_options): Likewise.
-	* bfd-in2.h: Regenerate
-	* elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): New.
-	(PLT_BTI_SMALL_ENTRY_SIZE, PLT_BTI_TLSDESC_ENTRY_SIZE): New.
-	(elfNN_aarch64_small_plt0_bti_entry): New.
-	(elfNN_aarch64_small_plt_bti_entry): New.
-	(elfNN_aarch64_tlsdesc_small_plt_bti_entry): New.
-	(elf_aarch64_obj_tdata): Add no_bti_warn and plt_type fields.
-	(elf_aarch64_link_hash_table): Add plt0_entry, plt_entry and
-	tlsdesc_plt_entry_size fields.
-	(elfNN_aarch64_link_hash_table_create): Initialise the new fields.
-	(setup_plt_values): New helper function.
-	(bfd_elfNN_aarch64_set_options): Use new bp_info to set plt sizes and
-	bti enable type.
-	(elfNN_aarch64_allocate_dynrelocs): Use new size members instead of
-	fixed macros.
-	(elfNN_aarch64_size_dynamic_sections): Likewise and add checks.
-	(elfNN_aarch64_create_small_pltn_entry): Use new generic pointers
-	to plt stubs instead of fixed ones and update filling them according
-	to the need for bti.
-	(elfNN_aarch64_init_small_plt0_entry): Likewise.
-	(elfNN_aarch64_finish_dynamic_sections): Likewise.
-	(get_plt_type, elfNN_aarch64_get_synthetic_symtab): New.
-	(elfNN_aarch64_plt_sym_val): Update size accordingly.
-	(elfNN_aarch64_link_setup_gnu_properties): Set up plts if BTI GNU NOTE
-	is set.
-	(bfd_elfNN_get_synthetic_symtab): Define.
-	(elfNN_aarch64_merge_gnu_properties): Give out warning with --force-bti
-	and mising BTI NOTE SECTION.
-
-
-2019-03-13  Sudakshina Das  <sudi.das@arm.com>
-
-	* elf-properties.c (_bfd_elf_link_setup_gnu_properties): Exclude
-	linker created inputs from merge.
-	* elfnn-aarch64.c (struct elf_aarch64_obj_tdata): Add field for
-	GNU_PROPERTY_AARCH64_FEATURE_1_AND properties.
-	(elfNN_aarch64_link_setup_gnu_properties): New.
-	(elfNN_aarch64_merge_gnu_properties): New.
-	(elf_backend_setup_gnu_properties): Define for AArch64.
-	(elf_backend_merge_gnu_properties): Likewise.
-	* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Define.
-	(_bfd_aarch64_elf_parse_gnu_properties): Define.
-	(_bfd_aarch64_elf_merge_gnu_properties): Define.
-	* elfxx-aarch64.h (_bfd_aarch64_elf_link_setup_gnu_properties): Declare.
-	(_bfd_aarch64_elf_parse_gnu_properties): Declare.
-	(_bfd_aarch64_elf_merge_gnu_properties): Declare.
-	(elf_backend_parse_gnu_properties): Define for AArch64.
-
-2019-03-13  H.J. Lu  <hongjiu.lu@intel.com>
-
-	PR ld/24322
-	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Properly
-	merge GNU_PROPERTY_X86_FEATURE_1_[IBT|SHSTK].
-
-2019-03-12  Alan Modra  <amodra@gmail.com>
-
-	* coffcode.h (buy_and_read): Delete unnecessary forward decl.  Add
-	nmemb parameter.  Use bfd_alloc2.
-	(coff_slurp_line_table): Use bfd_alloc2.  Update buy_and_read calls.
-	Delete assertion.
-	(coff_slurp_symbol_table): Use bfd_alloc2 and bfd_zalloc2.
-	(coff_slurp_reloc_table): Use bfd_alloc2.  Update buy_and_read calls.
-	* coffgen.c (coff_get_reloc_upper_bound): Ensure size calculation
-	doesn't overflow.
-	* elf.c (bfd_section_from_shdr): Use bfd_zalloc2.  Style fix.
-	(assign_section_numbers): Style fix.
-	(swap_out_syms): Use bfd_malloc2.
-	(_bfd_elf_get_reloc_upper_bound): Ensure size calculation doesn't
-	overflow.
-	(_bfd_elf_make_empty_symbol): Style fix.
-	(elfobj_grok_stapsdt_note_1): Formatting.
-	* elfcode.h (elf_object_p): Use bfd_alloc2.
-	(elf_write_relocs, elf_write_shdrs_and_ehdr): Likewise.
-	(elf_slurp_symbol_table): Use bfd_zalloc2.
-	(elf_slurp_reloc_table): Use bfd_alloc2.
-	(_bfd_elf_bfd_from_remote_memory): Use bfd_malloc2.
-	* elf64-sparc (elf64_sparc_get_reloc_upper_bound): Ensure
-	size calculation doesn't overflow.
-	(elf64_sparc_get_dynamic_reloc_upper_bound): Likewise.
-	* mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise.
-	* pdp11.c (get_reloc_upper_bound): Copy aoutx.h version.
-
-2019-03-08  Alan Modra  <amodra@gmail.com>
-
-	PR 24311
-	* merge.c (merge_strings): Return secinfo.  Don't pad section
-	to alignment here.
-	(_bfd_merge_sections): Pad section to alignment here, if input
-	sections contributing to merged output all pad to alignment.
-	Formatting.
-
-2019-03-06  Nick Clifton  <nickc@redhat.com>
-
-	* dwarf2.c (_bfd_dwarf2_find_symbol_bias): Check for a NULL symbol
-	table pointer.
-	* coffgen.c (coff_find_nearest_line_with_names): Do not call
-	_bfd_dwarf2_find_symbol_bias if there is no symbol table available.
-
-2019-03-01  Andreas Krebbel  <krebbel@linux.ibm.com>
-
-	This reverts commit 5a12586d44fa8d5dfc74cbca4f2f36a273a16335.
-	2019-01-14  Maamoun Tarsha  <maamountk@hotmail.com>
-
-	PR 20113
-	* elf32-s390.c (allocate_dynrelocs): Update comment.
-
-2019-02-28  Tamar Christina  <tamar.christina@arm.com>
-
-	* elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Correct CIE parse.
-
-2019-02-28  Nick Clifton  <nickc@redhat.com>
-
-	PR 24273
-	* elf.c (bfd_elf_string_from_elf_section): Check for a string
-	section that is not NUL terminated.
-
-2019-02-27  H.J. Lu  <hongjiu.lu@intel.com>
-
-	PR ld/24276
-	* elf64-x86-64.c (elf_x86_64_check_relocs): Skip symbol defined
-	by linker when checking copy reloc on protected symbol.
-
-2019-02-24  Alan Modra  <amodra@gmail.com>
-
-	PR 24144
-	* pdp11.c (set_section_contents): Revert 2015-02-24 change.
-
-2019-02-20  Eric Tsai  <erictsai@cadence.com>
-
-	* elf32-xtensa.c (is_resolvable_asm_expansion): Scan output
-	sections between the call site and call destination and adjust
-	call distance by the largest alignment.
-
-2019-02-20  Alan Hayward  <alan.hayward@arm.com>
-
-	* elf-bfd.h (elfcore_write_aarch_pauth): Add declaration.
-	* elf.c (elfcore_grok_aarch_pauth): New function.
-	(elfcore_grok_note): Check for NT_ARM_PAC_MASK.
-	(elfcore_write_aarch_pauth): New function.
-	(elfcore_write_register_note): Check for AArch64 pauth section.
-
-2019-02-20  Alan Modra  <amodra@gmail.com>
-
-	PR 24225
-	* elf32-nios2.c (nios2_elf32_relocate_section): Check asprintf
-	return value.
+	PR 27311
+	* elflink.c (_bfd_elf_add_default_symbol): Clear override when
+	undecorated symbol will have a different version.
 
-2019-02-20  Michael Roitzsch  <reactorcontrol@icloud.com>
+2021-02-02  Alan Modra  <amodra@gmail.com>
 
-	* configure.ac (SHARED_LIBADD): Add -liberty -lintl for all
-	Darwin hosts, not just or1k.
-	* configure: Regenerate.
+	PR 27311
+	* elflink.c (_bfd_elf_add_default_symbol): Add override parameter.
+	Use when handling default versioned symbol.  Rename existing
+	override variable to nondef_override and use for non-default
+	versioned symbol.
+	(elf_link_add_object_symbols): Adjust call to suit.  Don't
+	pull in as-needed libraries when override is set.
 
-2019-02-20  Alan Modra  <amodra@gmail.com>
+2021-02-01  Emery Hemingway  <ehmry@posteo.net>
 
-	PR 24236
-	* archive64.c (_bfd_archive_64_bit_slurp_armap): Move code adding
-	sentinel NUL to string buffer nearer to loop where it is used.
-	Don't go past sentinel when scanning strings, and don't write
-	NUL again.
-	* archive.c (do_slurp_coff_armap): Simplify string handling to
-	archive64.c style.
+	* config.bfd: Add *-*-genode* as a target for AArch64 and x86.
 
-2019-02-19  Alan Modra  <amodra@gmail.com>
+2021-02-01  Egor Vishnyakov  <lenvampir@yandex.ru>
 
-	PR 24235
-	* pei-x86_64.c (pex64_bfd_print_pdata_section): Correct checks
-	attempting to prevent read past end of section.
+	PR 27254
+	* elf32-rl78.c (rl78_elf_relocate_section): Fix calculation of
+	offset for the R_RL78_RH_SADDR relocation.
 
-2019-02-18  Alan Modra  <amodra@gmail.com>
+2021-01-29  Alan Modra  <amodra@gmail.com>
 
-	PR 24225
-	* elf32-nios2.c (nios2_elf32_relocate_section): Use asprintf and
-	PRIx64 to generate warning messages.  Print local sym names too.
+	PR 27271
+	* elflink.c (bfd_elf_link_record_dynamic_symbol): Don't segfault
+	on symbols defined in absolute or other special sections.
 
-2019-02-09  Vineet Gupta  <vgupta@synopsys.com>
+2021-01-28  Alan Modra  <amodra@gmail.com>
 
-	* elf32-arc (INIT_SYM_STRING): Delete.
-	(FINI_SYM_STRING): Likewise.
-	(init_str): Likewise.
-	(fini_str): Likewise.
+	PR 27259
+	* elflink.c (_bfd_elf_gc_mark_extra_sections): Use linker_mark to
+	prevent endless looping of linked-to sections.
 
-2019-02-08  Alan Modra  <amodra@gmail.com>
+2020-12-17  Mihails Strasuns  <mihails.strasuns@intel.com>
 
-	* elf32-ppc.c (ppc_elf_relocate_section): Add %X to "unsupported
-	for bss-plt" warning to make it an error.
+	* bfd-elf.h (elfcore_write_file_note): New function.
+	* elf.c (elfcore_write_file_note): New function.
 
-2019-02-07  Eric Botcazou  <ebotcazou@adacore.com>
+2021-01-26  Alan Modra  <amodra@gmail.com>
 
-	PR ld/18841
-	* elf32-sparc.c (elf32_sparc_reloc_type_class): Return
-	reloc_class_ifunc for ifunc symbols.
-	* elf64-sparc.c (elf64_sparc_reloc_type_class): Likewise.
+	* elf32-ft32.c (ft32_reloc_type_lookup): Don't miss ft32_reloc_map[0].
 
-2019-02-07  Eric Botcazou  <ebotcazou@adacore.com>
+2021-01-24  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* elf32-visium.c (visium_elf_howto_parity_reloc): Minor tweak.
-	<R_VISIUM_PC16>: Use explicit range test to detect an overflow.
+	PR binutils/27231
+	* dwarf2.c (read_rnglists): Ignore empty range when parsing line
+	number tables.
 
-2019-02-07  Nick Clifton  <nickc@redhat.com>
+2021-01-23  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* config.bfd: Move the powerpc-lynxos and powerpc-windiss targets
-	into the definitely obsolete list.
+	PR binutils/27231
+	* dwarf2.c (read_rnglists): Advance rngs_ptr after
+	_bfd_safe_read_leb128 when parsing DW_RLE_offset_pair.
 
-2019-02-05  H.J. Lu  <hongjiu.lu@intel.com>
+2021-01-20  Alan Modra  <amodra@gmail.com>
 
-	PR ld/24151
-	* elf64-x86-64.c (elf_x86_64_need_pic): Check
-	SYMBOL_DEFINED_NON_SHARED_P instead of def_regular.
-	(elf_x86_64_relocate_section): Move PIC check for PC-relative
-	relocations to ...
-	(elf_x86_64_check_relocs): Here.
-	(elf_x86_64_finish_dynamic_symbol): Use SYMBOL_DEFINED_NON_SHARED_P
-	to check if a symbol is defined in a non-shared object.
-	* elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): New.
+	* elf32-ppc.c: Delete outdated comment.
+	(TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Define.
+	* elf64-ppc.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Define.
 
-2019-01-21  Sergio Durigan Junior  <sergiodj@redhat.com>
+2021-01-20  Alan Modra  <amodra@gmail.com>
 
-	* elf32-arm.c (elf32_arm_final_link_relocate): Use 'llabs' instead
-	of 'labs' (and fix GCC warning).
+	* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't assume
+	section symbols are present.
 
-2019-01-25  Nick Clifton  <nickc@redhat.com>
+2021-01-19  Alan Modra  <amodra@gmail.com>
 
-	* po/ru.po: Updated Russian translation.
+	* elf64-ppc.c (elf_hash_entry): New inline function.  Use
+	throughout to replace casts.
+	(branch_reloc_hash_match): Remove const from params.
+	(use_local_plt): New function.
+	(allocate_dynrelocs, ppc_build_one_stub, ppc_size_one_stub),
+	(build_global_entry_stubs_and_plt, ppc64_elf_relocate_section):
+	Use use_local_plt.
+	* elf32-ppc.c (use_local_plt): New function.
+	(allocate_dynrelocs, ppc_elf_relocate_section),
+	(write_global_sym_plt): Use use_local_plt.
 
-2019-01-23  Nick Clifton  <nickc@redhat.com>
+2021-01-17  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* po/fr.po: Updated French translation.
+	PR ld/27193
+	* elflink.c (elf_create_symbuf): Also ignore section symbols.
+
+2021-01-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/23169
+	* elfxx-x86.c (_bfd_x86_elf_link_fixup_ifunc_symbol): Don't
+	check pointer_equality_needed.
+
+2021-01-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-linker-x86.h (elf_linker_x86_params): Add
+	report_relative_reloc.
+	* elf32-i386.c (elf_i386_relocate_section): Call
+	_bfd_x86_elf_link_report_relative_reloc to report relative
+	relocations for -z report-relative-reloc.
+	(elf_i386_finish_dynamic_symbol): Likewse.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewse.
+	(elf_x86_64_finish_dynamic_symbol): Likewse.
+	* elfxx-x86.c (_bfd_x86_elf_link_report_relative_reloc): New
+	function.
+	* elfxx-x86.h (_bfd_x86_elf_link_report_relative_reloc): New
+	prototype.
+
+2021-01-16  Alan Modra  <amodra@gmail.com>
+
+	* compress.c (decompress_contents): Tidy inflateEnd result test.
+
+2021-01-16  Alan Modra  <amodra@gmail.com>
+
+	PR 26002
+	* elflink.c (elf_link_output_extsym): Use version 1 in
+	.gnu.version for undefined unversioned symbols.
+
+2021-01-15  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_relax_delete_bytes): Fixed the indent that
+	caused the by previous commit accidentally.
+
+2021-01-15  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c: Indent, labels and GNU coding standards tidy,
+	also aligned the code.
+
+2021-01-15  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_merge_attributes): Fix typos of messages.
+
+2021-01-15  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c: Comments tidy and improvement.
+	* elfxx-riscv.c: Likewise.
+	* elfxx-riscv.h: Likewise.
+
+2021-01-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26688
+	* elf32-bfin.c (bfinfdpic_relocate_section): Skip non SEC_ALLOC
+	section for R_BFIN_FUNCDESC.
+
+2021-01-14  Nick Clifton  <nickc@redhat.com>
+
+	* elf.c (elfcore_grok_win32pstatus): Check for a note type of 0.
+
+2021-01-13  Alan Modra  <amodra@gmail.com>
+
+	* Makefile.in: Regenerate.
+	* doc/Makefile.in: Regenerate.
+
+2021-01-13  Alan Modra  <amodra@gmail.com>
+
+	PR 27160
+	* section.c (struct bfd_section): Remove pattern field.
+	(BFD_FAKE_SECTION): Adjust to suit.
+	* bfd-in2.h: Regenerate.
+	* elflink.c (compare_link_order, elf_fixup_link_order): Delete.
+	(bfd_elf_final_link): Don't call elf_fixup_link_order.
+
+2021-01-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/26792
+	* configure.ac: Use GNU_MAKE_JOBSERVER.
+	* aclocal.m4: Regenerated.
+	* configure: Likewise.
 
-2019-01-21  Nick Clifton  <nickc@redhat.com>
+2021-01-12  H.J. Lu  <hongjiu.lu@intel.com>
 
+	PR ld/27171
+	* reloc.c (bfd_perform_relocation): Adjust R_AMD64_DIR64 and
+	R_AMD64_DIR32 relocations for PE/x86-64 inputs.
+
+2021-01-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27173
+	* configure: Regenerated.
+
+2021-01-11  Nick Clifton  <nickc@redhat.com>
+
+	* po/fr.po: Updated French translation.
 	* po/pt.po: Updated Portuguese translation.
+	* po/sr.po: Updated Serbian translation.
 	* po/uk.po: Updated Ukranian translation.
 
-2019-01-21  Yuri Chornoivan  <yurchor@ukr.net>
+2021-01-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* configure: Regenerated.
+
+2021-01-09  H.J. Lu  <hongjiu.lu@intel.com>
 
-	PR 24108
-	* elf32-nds32.c (nds32_relocate_section): Add space between words
-	in error message.
-	* elfnn-riscv.c (riscv_version_mismatch): Fix spelling mistake in
-	error message.
-	(riscv_i_or_e_p): Likewise.
-	(riscv_merge_arch_attr_info): Likewise.
+	PR ld/27166
+	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Handle
+	-z lam-u48 and -z lam-u57.
 
-2019-01-19  Nick Clifton  <nickc@redhat.com>
+2021-01-09  Nick Clifton  <nickc@redhat.com>
 
-	* version.m4: Reset to 2.32.51
+	* version.m4: Change to 2.36.50.
 	* configure: Regenerate.
 	* po/bfd.pot: Regenerate.
 
-2018-06-24  Nick Clifton  <nickc@redhat.com>
+2021-01-09  Nick Clifton  <nickc@redhat.com>
 
-	2.32 branch created.
+	* 2.36 release branch crated.
 
-2019-01-16  Kito Cheng  <kito@andestech.com>
+2021-01-08  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* elf-attrs.c (vendor_obj_attr_size): Return 0 if size is 0 even
-	for OBJ_ATTR_PROC.
+	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Also set
+	LAM_U57 when setting LAM_U48.
 
-2019-01-16  Kito Cheng  <kito@andestech.com>
-	    Nelson Chu  <nelson@andestech.com>
-
-	* elfnn-riscv.c (in_subsets): New.
-	(out_subsets): Likewise.
-	(merged_subsets): Likewise.
-	(riscv_std_ext_p): Likewise.
-	(riscv_non_std_ext_p): Likewise.
-	(riscv_std_sv_ext_p): Likewise.
-	(riscv_non_std_sv_ext_p): Likewise.
-	(riscv_version_mismatch): Likewise.
-	(riscv_i_or_e_p): Likewise.
-	(riscv_merge_std_ext): Likewise.
-	(riscv_merge_non_std_and_sv_ext): Likewise.
-	(riscv_merge_arch_attr_info): Likewise.
-	(riscv_merge_attributes): Likewise.
-	(_bfd_riscv_elf_merge_private_bfd_data): Merge attribute.
-
-	* elfnn-riscv.c (riscv_elf_obj_attrs_arg_type): New.
-	(elf_backend_obj_attrs_vendor): Define.
-	(elf_backend_obj_attrs_section_type): Likewise.
-	(elf_backend_obj_attrs_section): Likewise.
-	(elf_backend_obj_attrs_arg_type): Define as
-	riscv_elf_obj_attrs_arg_type.
-	* elfxx-riscv.c (riscv_estimate_digit): New.
-	(riscv_estimate_arch_strlen1): Likewise.
-	(riscv_estimate_arch_strlen): Likewise.
-	(riscv_arch_str1): Likewise.
-	(riscv_arch_str): Likewise.
-	* elfxx-riscv.h (riscv_arch_str): Declare.
-
-2019-01-14  John Darrington <john@darrington.wattle.id.au>
-
-	* bfd-in2.h [BFD_RELOC_S12Z_OPR]: New reloc.
-	* libbfd.h: regen.
-	* elf32-s12z.c (eld_s12z_howto_table): R_S12Z_OPR takes non zero
-	source field.  (md_apply_fix): Apply final fix
-	to BFD_RELOC_S12Z_OPR.
-	* reloc.c[BFD_RELOC_S12Z_OPR]: New reloc.
+2021-01-08  H.J. Lu  <hongjiu.lu@intel.com>
 
-2019-01-14  Maamoun Tarsha  <maamountk@hotmail.com>
+	PR ld/26256
+	PR ld/27160
+	* elflink.c (elf_fixup_link_order): Verify that fixing up
+	SHF_LINK_ORDER doesn't increase the output section size.
 
-	PR 20113
-	* elf32-s390.c (allocate_dynrelocs): Update comment.
+2021-01-09  Alan Modra  <amodra@gmail.com>
 
-2019-01-09  Andrew Paprocki  <andrew@ishiboo.com>
+	* configure: Regenerate.
+
+2021-01-07  Samuel Thibault  <samuel.thibault@gnu.org>
 
-	* warning.m4: Adjust egrep pattern for non-GNU compilers.
 	* configure: Regenerate.
 
-2019-01-08  Alan Modra  <amodra@gmail.com>
+2021-01-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR 27109
+	* aix386-core.c (core_aix386_vec): Initialize
+	keep_unused_section_symbol to TARGET_KEEP_UNUSED_SECTION_SYMBOLS.
+	* aout-target.h (MY (vec)): Likewise.
+	* binary.c (binary_vec): Likewise.
+	* cisco-core.c (core_cisco_be_vec): Likewise.
+	(core_cisco_le_vec): Likewise.
+	* coff-alpha.c (alpha_ecoff_le_vec): Likewise.
+	* coff-i386.c (TARGET_SYM): Likewise.
+	(TARGET_SYM_BIG): Likewise.
+	* coff-ia64.c (TARGET_SYM): Likewise.
+	* coff-mips.c (mips_ecoff_le_vec): Likewise.
+	(mips_ecoff_be_vec): Likewise.
+	(mips_ecoff_bele_vec): Likewise.
+	* coff-rs6000.c (rs6000_xcoff_vec): Likewise.
+	(powerpc_xcoff_vec): Likewise.
+	* coff-sh.c (sh_coff_small_vec): Likewise.
+	(sh_coff_small_le_vec): Likewise.
+	* coff-tic30.c (tic30_coff_vec): Likewise.
+	* coff-tic54x.c (tic54x_coff0_vec): Likewise.
+	(tic54x_coff0_beh_vec): Likewise.
+	(tic54x_coff1_vec): Likewise.
+	(tic54x_coff1_beh_vec): Likewise.
+	(tic54x_coff2_vec): Likewise.
+	(tic54x_coff2_beh_vec): Likewise.
+	* coff-x86_64.c (TARGET_SYM): Likewise.
+	(TARGET_SYM_BIG): Likewise.
+	* coff64-rs6000.c (rs6000_xcoff64_vec): Likewise.
+	(rs6000_xcoff64_aix_vec): Likewise.
+	* coffcode.h (CREATE_BIG_COFF_TARGET_VEC): Likewise.
+	(CREATE_BIGHDR_COFF_TARGET_VEC): Likewise.
+	(CREATE_LITTLE_COFF_TARGET_VEC): Likewise.
+	* elfxx-target.h (TARGET_BIG_SYM): Likewise.
+	(TARGET_LITTLE_SYM): Likewise.
+	* hppabsd-core.c (core_hppabsd_vec): Likewise.
+	* hpux-core.c (core_hpux_vec): Likewise.
+	* i386msdos.c (i386_msdos_vec): Likewise.
+	* ihex.c (ihex_vec): Likewise.
+	* irix-core.c (core_irix_vec): Likewise.
+	* mach-o-target.c (TARGET_NAME): Likewise.
+	* mmo.c (mmix_mmo_vec): Likewise.
+	* netbsd-core.c (core_netbsd_vec): Likewise.
+	* osf-core.c (core_osf_vec): Likewise.
+	* pdp11.c (MY (vec)): Likewise.
+	* pef.c (pef_vec): Likewise.
+	(pef_xlib_vec): Likewise.
+	* plugin.c (plugin_vec): Likewise.
+	* ppcboot.c (powerpc_boot_vec): Likewise.
+	* ptrace-core.c (core_ptrace_vec): Likewise.
+	* sco5-core.c (core_sco5_vec): Likewise.
+	* som.c (hppa_som_vec): Likewise.
+	* srec.c (srec_vec): Likewise.
+	(symbolsrec_vec): Likewise.
+	* tekhex.c (tekhex_vec): Likewise.
+	* trad-core.c (core_trad_vec): Likewise.
+	* verilog.c (verilog_vec): Likewise.
+	* vms-alpha.c (alpha_vms_vec): Likewise.
+	* vms-lib.c (alpha_vms_lib_txt_vec): Likewise.
+	* wasm-module.c (wasm_vec): Likewise.
+	* xsym.c (sym_vec): Likewise.
+	* elf.c (ignore_section_sym): Return TRUE if BSF_SECTION_SYM_USED
+	isn't set.
+	(elf_map_symbols): Don't include ignored section symbols.
+	* elfcode.h (elf_slurp_symbol_table): Also set
+	BSF_SECTION_SYM_USED on STT_SECTION symbols.
+	* elflink.c (bfd_elf_final_link): Generated section symbols only
+	when emitting relocations or reqired.
+	* elfxx-x86.h (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): New.
+	* syms.c (BSF_SECTION_SYM_USED): New.
+	* targets.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): New.
+	(bfd_target): Add keep_unused_section_symbols.
+	(bfd_keep_unused_section_symbols): New.
+	* bfd-in2.h: Regenerated.
+
+2021-01-07  Nick Clifton  <nickc@redhat.com>
+
+	PR 25713
+	* bfdio.c (_bfd_real_fopen): For Win32 convert relative paths to
+	absolute paths and check to see if they are longer than MAX_PATH.
+
+2021-01-07  Philipp Tomsich  <prt@gnu.org>
+
+	* elfxx-riscv.c (riscv_std_z_ext_strtab): Added zihintpause.
+
+2021-01-07  Claire Xenia Wolf  <claire@symbioticeda.com>
+	    Jim Wilson  <jimw@sifive.com>
+	    Andrew Waterman  <andrew@sifive.com>
+	    Maxim Blinov  <maxim.blinov@embecosm.com>
+	    Kito Cheng  <kito.cheng@sifive.com>
+	    Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_std_z_ext_strtab): Added zba, zbb and zbc.
+
+2021-01-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf32-bfin.c (bfin_check_relocs): Check bfd_link_hash_indirect.
+	(bfinfdpic_check_relocs): Likewise.
+
+2021-01-06  Alan Modra  <amodra@gmail.com>
+
+	* elf32-score.c (s3_bfd_score_info_to_howto): Report an error
+	on unknown r_type.
+	* elf32-score7.c (s7_bfd_score_info_to_howto): Likewise.
+
+2021-01-06  Alan Modra  <amodra@gmail.com>
+
+	* config.bfd (sparc-*-solaris2*): Add sparc_elf32_vec.
+	(sparc64-*-solaris2*): Add sparc_elf64_vec and
+	sparc_elf32_vec.
+
+2021-01-06  Marcus Comstedt  <marcus@mc.pp.se>
+
+	* config.bfd: Added targets riscv64be*-*-*, riscv32be*-*-* and
+	riscvbe*-*-*.  Also added riscv_elf[32|64]_be_vec.
+	* configure.ac: Handle riscv_elf[32|64]_be_vec.
+	* configure: Regenerate.
+	* elfnn-riscv.c: Include <limits.h> and define CHAR_BIT for
+	riscv_is_insn_reloc.
+	(riscv_get_insn): RISC-V instructions are always little endian, but
+	bfd_get may be used for big-endian, so add new riscv_get_insn to handle
+	the insturctions.
+	(riscv_put_insn): Likewsie.
+	(riscv_is_insn_reloc): Check if we are relocaing an instruction.
+	(perform_relocation): Call riscv_is_insn_reloc to decide if we should
+	use riscv_[get|put]_insn or bfd_[get|put].
+	(riscv_zero_pcrel_hi_reloc): Use riscv_[get|put]_insn, bfd_[get|put]l32
+	or bfd_[get|put]l16 for code.
+	(riscv_elf_relocate_section): Likewise.
+	(riscv_elf_finish_dynamic_symbol): Likewise.
+	(riscv_elf_finish_dynamic_sections): Likewise.
+	(_bfd_riscv_relax_call): Likewise.
+	(_bfd_riscv_relax_lui): Likewise.
+	(_bfd_riscv_relax_align): Likewise.
+	(_bfd_riscv_relax_pc): Likewise.
+	(riscv_elf_object_p): Handled for big endian.
+	(TARGET_BIG_SYM, TARGET_BIG_NAME): Defined.
+	* targets.c: Add riscv_elf[32|64]_be_vec.
+	(_bfd_target_vector): Likewise.
+
+2021-01-05  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (bfd_elf_link_record_dynamic_symbol): Handle no_export
+	for relocatable executable.
+
+2021-01-05  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (_bfd_vms_slurp_egsd): Read flags after size check.
+
+2021-01-05  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (allocate_dynrelocs): When we are generating pde,
+	make sure gp symbol is output as a dynamic symbol.
+
+2021-01-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26256
+	* elflink.c (compare_link_order): Place unordered sections before
+	ordered sections.
+	(elf_fixup_link_order): Add a link info argument.  Allow mixed
+	ordered and unordered input sections for non-relocatable link.
+	Sort the consecutive bfd_indirect_link_order sections with the
+	same pattern.  Change the offsets of the bfd_indirect_link_order
+	sections only.
+	(bfd_elf_final_link): Pass info to elf_fixup_link_order.
+	* section.c (bfd_section): Add pattern.
+	(BFD_FAKE_SECTION): Initialize pattern to NULL.
+	* bfd-in2.h: Regenerated.
+
+2021-01-04  Alexander Fedotov  <alfedotov@gmail.com>
+
+	* elf32-arm.c (elf32_arm_print_private_bfd_data): Prefix hex value
+	of private flags with 0x.
+	* elfnn-aarch64.c (elfNN_aarch64_print_private_bfd_data): Likewise.
+
+2021-01-04  Alan Modra  <amodra@gmail.com>
 
-	PR 23699
-	PR 24065
-	* ihex.c (ihex_write_object_contents): Properly check 32-bit
-	address range.
+	PR 26822
+	* elflink.c (elf_link_input_bfd): Use the file base name in
+	linker generated STT_FILE symbols.
 
-2019-01-05  Yoshinori Sato <ysato@users.sourceforge.jp>
+2021-01-04  Nelson Chu  <nelson.chu@sifive.com>
 
-	* bfd/archures.c: Add bfd_mach_rx_v2 and bfd_mach_rx_v3.
-	* bfd/bfd-in2.h: Regenerate.
-	* bfd/cpu-rx.c (arch_info_struct): Add RXv2 and RXv3 entry.
-	* bfd/elf32-rx.c (elf32_rx_machine): Add RXv2 and RXv3 support.
+	* elfxx-riscv.c (riscv_compare_subsets): Removed static.
+	* elfxx-riscv.h: Add declaration.
+	* elfnn-riscv.c (riscv_merge_multi_letter_ext): Use
+	riscv_compare_subsets to check the orders.
+	(riscv_skip_prefix): Removed.
+	(riscv_prefix_cmp): Removed.
 
-2019-01-04  Lifang Xia  <lifang_xia@c-sky.com>
+2021-01-04  Alan Modra  <amodra@gmail.com>
 
-	* config.bfd (csky-*-elf* | csky-*-linux*): Modify the csky
-	default target, little endian target is more suitable.
+	PR 26741
+	* elfxx-riscv.c (riscv_parse_prefixed_ext): Free subset after
+	calculating subset version length.
 
-2019-01-04  Alan Modra  <amodra@gmail.com>
+2021-01-01  Nicolas Boulenguez  <nicolas@debian.org>
 
-	PR 24061
-	PR 21786
-	* coff-rs6000.c (GET_VALUE_IN_FIELD): Add base parameter and
-	adjust all callers.
-	(EQ_VALUE_IN_FIELD): Likewise.
-	* coff64-rs6000.c (GET_VALUE_IN_FIELD): Likewise.
+	* xcofflink.c: Correct spelling in comments.
 
-2019-01-01  Alan Modra  <amodra@gmail.com>
+2021-01-01  Alan Modra  <amodra@gmail.com>
 
 	Update year range in copyright notice of all files.
 
-For older changes see ChangeLog-2018
+For older changes see ChangeLog-2020
 
-Copyright (C) 2019 Free Software Foundation, Inc.
+Copyright (C) 2021-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2009 ./bfd/ChangeLog-2009
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2009	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/ChangeLog-2009	2024-02-01 01:47:13.000000000 +0000
@@ -3868,15 +3868,15 @@
 	* coffcode.h (coff_pointerize_aux_hook): Update CSECT_SYM_P to
 	check whether a symbol has csect information.
 	(coff_print_aux): Likewise.
-	* coff-rs6000.c (_bfd_xcoff_swap_aux_in): Handle auxillary csect
+	* coff-rs6000.c (_bfd_xcoff_swap_aux_in): Handle auxiliary csect
 	information for C_AIX_WEAKEXT too.
 	(_bfd_xcoff_swap_aux_out): Likewise.
 	(xcoff_reloc_type_br): Handle defweak symbols too.
-	* coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Handle auxillary csect
+	* coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Handle auxiliary csect
 	information for C_AIX_WEAKEXT too.
 	(_bfd_xcoff64_swap_aux_out): Likewise.
 	(xcoff64_reloc_type_br): Handle defweak symbols too.
-	* coffgen.c (coff_print_symbol): Handle auxillary function
+	* coffgen.c (coff_print_symbol): Handle auxiliary function
 	information for C_AIX_WEAKEXT too.
 	* xcofflink.c (_bfd_xcoff_canonicalize_dynamic_symtab): Set BSF_WEAK
 	instead of BSF_GLOBAL if the L_WEAK flag is set.
@@ -3942,7 +3942,7 @@
 	objects in a dynamic link, rather than checking whether csectpp
 	is null.  Always allocate debug_index for other objects,
 	and always go through the loop.  Update the type of debug_index
-	after the change above.  Read the auxillary csect information
+	after the change above.  Read the auxiliary csect information
 	and use xcoff_keep_symbol_p to decide whether a symbol should
 	be kept.  Set its debug_index to -2 if not.
 	(xcoff_link_input_bfd): Update the type of debug_index after
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2014 ./bfd/ChangeLog-2014
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2014	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/ChangeLog-2014	2024-02-01 01:47:13.000000000 +0000
@@ -621,7 +621,7 @@
 
 	PR binutils/17512
 	* coffgen.c (coff_get_normalized_symtab): Check for an excessive
-	number of auxillary entries.
+	number of auxiliary entries.
 	* ieee.c (next_byte): Convert to a function.  Return FALSE if the
 	next byte is beyond the end of the buffer.
 	(parse_int): Test the return value of next_byte.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2015 ./bfd/ChangeLog-2015
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2015	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/ChangeLog-2015	2024-02-01 01:47:13.000000000 +0000
@@ -3076,7 +3076,7 @@
 
 	PR binutils/17512
 	* coffgen.c (coff_get_normalized_symtab): Fix test for out of
-	range auxillary sections.
+	range auxiliary sections.
 
 2015-03-24  Marcus Shawcroft  <marcus.shawcroft@arm.com>
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2019 ./bfd/ChangeLog-2019
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2019	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/ChangeLog-2019	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,3185 @@
+2019-12-31  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (_bfd_vms_slurp_eisd): Don't overflow when checking
+	offset.  Don't overflow when checking rec_size, and do allow
+	rec_size to the end of the buffer.  Ensure eisd->type can be
+	accessed, not just the first 32 bytes.  Don't call
+	_bfd_vms_save_counted_string with zero length remaining.  Fail
+	on empty string section name.
+	(_bfd_vms_slurp_egsd): Formatting.  Catch more reads past end
+	of record size.  Correct remaining length calculation.  Fail
+	on empty string section name.  Consolidate error paths.
+
+2019-12-30  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (alpha_vms_free_private): New function, extracted..
+	(vms_close_and_cleanup): ..from here.
+	(alpha_vms_object_p): Call alpha_vms_free_private on failure.
+
+2019-12-30  Alan Modra  <amodra@gmail.com>
+
+	* coffgen.c (coff_real_object_p): Free malloc'd memory on failure.
+
+2019-12-30  Alan Modra  <amodra@gmail.com>
+
+	* archive.c (do_slurp_bsd_armap): Use bfd_alloc rather than
+	bfd_zalloc when memory is all written after the call.
+	(do_slurp_coff_armap): Likewise.  Set bfd_error on ridiculously
+	large allocations that overflow bfd_size_type.  Use just one
+	bfd_release on error exit.
+	(_bfd_slurp_extended_name_table): Use bfd_alloc for extended_names,
+	clear last byte rather than the entire array.  Use bfd_alloc for
+	string table.  Rearrange and simplify code copying file names.
+
+2019-12-29  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (_bfd_vms_slurp_egsd): Make base_addr a bfd_vma.
+	Limit alignment power.  Correct and simplify alignment expression.
+	(evax_bfd_print_relocation_records): Avoid signed shift left.
+
+2019-12-29  Alan Modra  <amodra@gmail.com>
+
+	* vms-misc.c (_bfd_vms_save_sized_string): Add abfd param, make
+	size a size_t.  Use bfd_alloc rather than bfd_malloc.
+	(_bfd_vms_save_counted_string): Similarly.
+	* vms.h (_bfd_vms_save_sized_string): Update prototype.
+	(_bfd_vms_save_counted_string): Likewise.
+	* vms-alpha.c (_bfd_vms_slurp_ehdr): Adjust
+	_bfd_vms_save_counted_string and bfd_vms_save_sized_string calls.
+	(_bfd_vms_slurp_egsd, parse_module): Likewise.
+	(_bfd_vms_slurp_eisd): Likewise.  Check return status.
+	(alpha_vms_bfd_link_hash_table_free): New function.
+	(alpha_vms_bfd_link_hash_table_create): Arrange to call it.
+	(vms_close_and_cleanup): Free more memory.  Don't release tdata.
+
+2019-12-29  Alan Modra  <amodra@gmail.com>
+
+	* coffcode.h (coff_close_and_cleanup): Redefine to..
+	* coffgen.c (_bfd_coff_close_and_cleanup): ..this.  New function.
+	* libcoff-in.h (_bfd_coff_close_and_cleanup): Declare.
+	* libcoff.h: Regenerate.
+
+2019-12-29  Hannes Domani  <ssbssa@yahoo.de>
+	    Alan Modra  <amodra@gmail.com>
+
+	PR 15350
+	* bfd.c (bfd_update_compression_header): Write zlib header for
+	formats other than ELF too.
+
+2019-12-26  Alan Modra  <amodra@gmail.com>
+
+	* som.c (setup_sections): Don't overflow space_strings_size.  Use
+	bfd_malloc2 to catch overflow of size calculation.
+	(som_prep_for_fixups): Use bfd_zalloc2 to catch overflow of size
+	calculation.
+	(som_build_and_write_symbol_table): Similarly use bfd_zmalloc2.
+	(som_slurp_symbol_table): Similarly use bfd_zmalloc2, bfd_malloc2,
+	and bfd_zalloc2.
+	(bfd_som_attach_aux_hdr): Use size_t vars for string length.
+	(som_bfd_count_ar_symbols): Use bfd_malloc2 to catch overflow of
+	size calculation.  Use size_t vars for length and catch overflow.
+	(som_slurp_armap): Use bfd_alloc2 to catch overflow of size
+	calculation.
+	(som_bfd_ar_write_symbol_stuff): Similarly use bfd_zmalloc2 and
+	bfd_malloc2.  Perform size calculations in bfd_size_type.
+
+2019-12-26  Hannes Domani  <ssbssa@yahoo.de>
+
+	* peicode.h (pe_bfd_read_buildid): Free data.
+
+2019-12-23  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (add_symbol): Add "max" parameter.  Error on string
+	length larger than max.
+	(_bfd_vms_slurp_egsd): Ensure record is at least large enough to
+	read string length byte, error if not.  Pass size to add_symbol.
+	(_bfd_vms_slurp_etir): Don't read past end of buffer when reading
+	type and length.  Allow read of last byte in buffer.
+
+2019-12-23  Alan Modra  <amodra@gmail.com>
+
+	* wasm-module.c (wasm_read_leb128): Don't allow oversize shifts.
+	Catch value overflow.  Sign extend only on terminating byte.
+
+2019-12-20  Alan Modra  <amodra@gmail.com>
+
+	* xtensa-isa.c (xtensa_insnbuf_from_chars): Avoid signed overflow.
+
+2019-12-20  Alan Modra  <amodra@gmail.com>
+
+	* libhppa.h (hppa_field_adjust, bfd_hppa_insn2fmt): Delete forward
+	declaration.  Move ATTRIBUTE_UNUSED to definition.
+	(sign_extend, low_sign_extend, sign_unext, low_sign_unext),
+	(re_assemble_3, re_assemble_12, re_assemble_14, re_assemble_16),
+	(re_assemble_17, re_assemble_21, re_assemble_22): Likewise.  Make
+	args and return value unsigned.  Use unsigned variables.
+	(hppa_rebuild_insn): Similarly.
+
+2019-12-20  Alan Modra  <amodra@gmail.com>
+
+	* format.c (bfd_check_format_matches): Free matching_vector when
+	not returning matching target strings.
+
+2019-12-20  Alan Modra  <amodra@gmail.com>
+
+	* coff-alpha.c (alpha_ecoff_read_ar_hdr): Free ar_hdr on error return.
+
+2019-12-18  Alan Modra  <amodra@gmail.com>
+
+	* coff-rs6000.c (_bfd_xcoff_slurp_armap): Don't overflow when
+	checking symbol count against section size.  Guard against strlen
+	running off end of buffer by allocating one more byte and zeroing.
+	* coff64-rs6000.c (xcoff64_slurp_armap): Likewise.
+
+2019-12-18  Alan Modra  <amodra@gmail.com>
+
+	* elf32-ppc.c (ppc_elf_get_synthetic_symtab): Use size_t for vars.
+	* elf64-ppc.c (sym_exists_at): Use size_t for lo, hi and mid.
+
+2019-12-18  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (ELF_LOCAL_SYMBOL_HASH): Avoid signed overflow.
+	* elf32-hppa.c (final_link_relocate): Likewise.
+	* elf32-ppc.c (_bfd_elf_ppc_at_tls_transform): Likewise.
+	(_bfd_elf_ppc_at_tprel_transform, is_insn_ds_form): Likewise.
+	(is_insn_dq_form, ppc_elf_relocate_section): Likewise.
+	* elf64-ppc.c (ok_lo_toc_insn, ppc64_elf_edit_toc): Likewise.
+	(ppc64_elf_relocate_section): Likewise.
+	* elfxx-mips.c (mips_elf_perform_relocation): Likewise.
+	* netbsd.h (N_SET_FLAGS): Likewise.
+
+2019-12-17  Alan Modra  <amodra@gmail.com>
+
+	* coff-tic80.c: Delete file.
+	* cpu-tic80.c: Delete file.
+	* archures.c: Remove tic80 support.
+	* coffcode.h: Likewise.
+	* coffswap.h: Likewise.
+	* targets.c: Likewise.
+	* config.bfd: Likewise.
+	* configure.ac: Likewise.
+	* Makefile.am: Likewise.
+	* Makefile.in: Regenerate.
+	* bfd-in2.h: Regenerate.
+	* configure: Regenerate.
+	* po/SRC-POTFILES.in: Regenerate.
+
+2019-12-13  Alan Modra  <amodra@gmail.com>
+
+	PR 25237
+	* elf.c: (assign_file_positions_for_load_sections): Attempt to
+	keep meaningless p_offset for PT_LOAD segments without file
+	contents within file size.
+
+2019-12-12  Alan Modra  <amodra@gmail.com>
+
+	* libbfd.c (bfd_get): Don't cast result of bfd_get_8.
+	* bfd-in2.h: Regenerate.
+
+2019-12-11  Alan Modra  <amodra@gmail.com>
+
+	* elf32-rx.c (elf32_rx_relax_section): Avoid signed overflow.
+	* libaout.h (N_SET_INFO, N_SET_FLAGS): Likewise.
+	* netbsd.h (write_object_contents): Likewise.
+	* elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Likewise.
+	* libhppa.h (HPPA_R_CONSTANT): Don't signed extend with shifts.
+	(stm32l4xx_create_replacing_stub_vldm): Don't truncate high bits
+	with shifts.
+	* elf32-nds32.h (R_NDS32_RELAX_ENTRY_DISABLE_RELAX_FLAG): Define
+	using 1u shifted left.  Ditto for other macros.
+	* mmo.c (LOP): Make unsigned.
+
+2019-12-11  Alan Modra  <amodra@gmail.com>
+
+	* libbfd.c (bfd_get_8): Return a bfd_vma.
+	(bfd_get_signed_8): Return a bfd_signed_vma.
+	* bfd-in2.h: Regenerate.
+
+2019-12-11  Alan Modra  <amodra@gmail.com>
+
+	* xtensa-modules.c (Field_* functions): Don't mask using shifts.
+	(Operand_soffsetx4_decode, Operand_simm4_decode),
+	(Operand_simm8_decode, Operand_simm8x256_decode),
+	(Operand_simm12b_decode, Operand_label8_decode),
+	(Operand_label12_decode, Operand_soffset_decode),
+	(Operand_xt_wbr15_label_decode, Operand_xt_wbr18_label_decode): Don't
+	sign extend using shifts.
+	(Operand_immrx4_decode, Operand_uimm16x4_decode): Avoid UB in
+	constant.
+
+2019-12-11  Alan Modra  <amodra@gmail.com>
+
+	* cpu-ia64-opc.c (ext_imms_scaled): Avoid undefined left shift
+	of negative values by using unsigned vars.
+
+2019-12-07  Alan Modra  <amodra@gmail.com>
+
+	PR 25236
+	* elflink.c (_bfd_elf_link_assign_sym_version): Assign versions
+	for ELF_COMMON_DEF_P symbols.
+	(elf_link_output_extsym, _bfd_elf_add_default_symbol): Adjust to
+	suit.
+
+2019-12-05  Sandra Loosemore  <sandra@codesourcery.com>
+
+	Only give FDE encoding warnings if --eh-frame-hdr was specified.
+
+	* elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Make
+	FDE encoding warning conditional.
+
+2019-12-05  Nick Clifton  <nickc@redhat.com>
+
+	PR 25029
+	* peXXigen.c (_bfd_XXi_swap_aouthdr_out): Ignore empty sections
+	when computing the sizes stored in the headers.
+
+2019-12-03  Alan Modra  <amodra@gmail.com>
+
+	PR 25230
+	* dwarf2.c (struct dwarf2_debug_file): Add line_table and
+	abbrev_offsets.
+	(struct abbrev_offset_entry): New.
+	(hash_abbrev, eq_abbrev, del_abbrev): New functions.
+	(read_abbrevs): Check whether we have already read abbrevs at
+	given offset, and add new offset/abbrev to hash table.
+	(decode_line_info): Keep line table at offset zero in file struct.
+	Return this for a cu reusing the same dir/file list.
+	(find_abstract_instance): Find cu for DW_FORM_GNU_ref_alt.
+	(_bfd_dwarf2_slurp_debug_info): Create offset/abbrev hash tables.
+	(_bfd_dwarf2_cleanup_debug_info): Adjust deletion of lines and
+	abbrevs.
+
+2019-12-03  Alan Modra  <amodra@gmail.com>
+
+	PR 25230
+	* dwarf2.c (struct dwarf2_debug_file): New struct.
+	(struct dwarf2_debug): Delete fields now in dwarf2_debug_file.
+	Add f, alt fields.
+	(struct comp_unit): Add file field.
+	(read_indirect_string, read_indirect_line_string): Adjust to suit.
+	(read_alt_indirect_string, read_alt_indirect_ref): Likewise.
+	(read_debug_ranges, find_abstract_instance, read_rangelist): Likewise.
+	(_bfd_dwarf2_stash_syms, place_sections): Likewise.
+	(stash_maybe_update_info_hash_tablse): Likewise.
+	(stash_verify_info_hash_table): Likewise.
+	(_bfd_dwarf2_slurp_debug_info): Likewise.
+	(_bfd_dwarf2_find_symbol_bias): Likewise.
+	(_bfd_dwarf2_find_nearest_line): Likewise.
+	(_bfd_dwarf2_cleanup_debug_info): Likewise.
+	(read_abbrevs): Add file param and adjust.  Update calls.
+	(stash_comp_unit): Likewise.
+	(decode_line_info): Delete stash param and adjust.  Update calls.
+	(comp_unit_find_nearest_line): Likewise.
+	(comp_unit_maybe_decode_line_info): Likewise.
+	(comp_unit_find_line): Likewise.
+	(parse_comp_unit): Add file and info_ptr param and adjust.  Update
+	calls.
+
+2019-12-03  Alan Modra  <amodra@gmail.com>
+
+	* dwarf2.c (read_indirect_string): Don't duplicate offset check
+	done in read_section.
+	(read_indirect_line_string): Likewise.
+	(read_alt_indirect_string): Likewise.
+	(read_alt_indirect_ref): Likewise.
+	(read_abbrevs): Likewise.  Free memory on all failure paths.
+	Use correct unsigned type for pointer difference comparison.
+
+2019-12-03  Alan Modra  <amodra@gmail.com>
+
+	* dwarf2.c (struct dwarf2_debug): Update comments.  Remove sec
+	and sec_info_ptr.
+	(_bfd_dwarf2_slurp_debug_info): Don't set sec or sec_info_ptr.
+	(stash_comp_unit): Likewise.
+	(read_alt_indirect_ref): Return NULL not FALSE.
+
+2019-12-03  Alan Modra  <amodra@gmail.com>
+
+	* dwarf2.c (_bfd_dwarf2_find_nearest_line): Correct function comment.
+
+2019-11-27  Alan Modra  <amodra@gmail.com>
+
+	PR 23652
+	* dwarf2.c (_bfd_dwarf2_stash_syms): Break out of loop on finding
+	matching section.
+	(_bfd_dwarf2_find_nearest_line): Return an int, with value 2 when
+	returning info from the symbol table.  Do the _bfd_elf_find_function
+	search also when !found.  Call _bfd_dwarf2_stash_syms regardless of
+	symbols.
+	* elf64-alpha.c (elf64_alpha_find_nearest_line): Accept dwarf2
+	result of 1 only.
+	* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Likewise.
+	* libbfd-in.h (_bfd_dwarf2_find_nearest_line): Update prototype.
+	* libbfd.h: Regenerate.
+
+2019-11-27  Alan Modra  <amodra@gmail.com>
+
+	PR 23652
+	* dwarf2.c (_bfd_dwarf2_stash_syms): New function.
+	(_bfd_dwarf2_find_nearest_line): Use it here, passing syms to
+	_bfd_elf_find_function.  Call _bfd_elf_find_function in cases
+	where _bfd_elf_find_nearest_line would do so.
+	* elf.c (_bfd_elf_find_nearest_line): Omit _bfd_elf_find_function
+	for dwarf2.
+	* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Similarly.  Tidy.
+	* elf32-arm.c (elf32_arm_maybe_function_sym): New function.
+	(elf_backend_maybe_function_sym): Define.
+	(arm_elf_find_function, elf32_arm_find_nearest_line): Delete.
+	(bfd_elf32_find_nearest_line): Don't define.
+	* elfnn-aarch64.c (elfNN_aarch64_maybe_function_sym): New function.
+	(elf_backend_maybe_function_sym): Define.
+	(aarch64_elf_find_function, elfNN_aarch64_find_nearest_line): Delete.
+	(bfd_elfNN_find_nearest_line): Don't define.
+
+2019-11-27  Alan Modra  <amodra@gmail.com>
+
+	* elf32-sh.c (sh_reloc): Use a bfd_vma insn.
+	(sh_reloc <R_SH_IND12W>): Divide calculated relocation value
+	by two before applying to insn.  Correct overflow test.
+	* coff-sh.c (sh_reloc): Likewise.
+
+2019-11-26  Nick Clifton  <nickc@redhat.com>
+
+	* elf32-sh.c (sh_elf_reloc): Use a signed_vma when checking for a
+	negative relocated value.
+	* coff-sh.c (sh_reloc): Likewise.
+
+2019-11-25  Alan Modra  <amodra@gmail.com>
+
+	* archures.c (bfd_octets_per_byte): Tail call
+	bfd_arch_mach_octets_per_byte.
+	* coff-arm.c (OCTETS_PER_BYTE): Define.
+	(coff_arm_reloc): Introduce new "octets" temp.  Use OCTETS_PER_BYTE
+	with section.  Correct "addr".  Remove ATTRIBUTE_UNUSED.
+	* coff-i386.c (coff_i386_reloc): Similarly.
+	* coff-mips.c (mips_reflo_reloc): Similarly.
+	* coff-x86_64.c (coff_amd64_reloc): Similarly.
+	* elf32-msp430.c (OCTETS_PER_BYTE): Define.
+	(rl78_sym_diff_handler): Use OCTETS_PER_BYTE, with section.
+	* elf32-nds32.c (nds32_elf_get_relocated_section_contents): Similarly.
+	* elf32-ppc.c (ppc_elf_addr16_ha_reloc): Similarly.
+	* elf32-pru.c (pru_elf32_do_ldi32_relocate): Similarly.
+	* elf32-s12z.c (opru18_reloc): Similarly.
+	* elf32-sh.c (sh_elf_reloc): Similarly.
+	* elf32-spu.c (spu_elf_rel9): Similarly.
+	* elf32-xtensa.c (bfd_elf_xtensa_reloc): Similarly.
+	* elf64-ppc.c (ppc64_elf_ha_reloc, ppc64_elf_brtaken_reloc),
+	(ppc64_elf_toc64_reloc): Similarly.
+	* bfd.c (bfd_get_section_limit): Pass section to bfd_octets_per_byte.
+	* cofflink.c (_bfd_coff_link_input_bfd),
+	(_bfd_coff_reloc_link_order): Likewise.
+	* elf.c (_bfd_elf_section_offset): Likewise.
+	* elflink.c (resolve_section, bfd_elf_perform_complex_relocation),
+	(elf_link_input_bfd, elf_reloc_link_order, elf_fixup_link_order),
+	(bfd_elf_final_link): Likewise.
+	* elf.c (_bfd_elf_make_section_from_shdr): Don't strncmp twice
+	to set SEC_ELF_OCTETS.
+	* reloc.c (bfd_perform_relocation): Tidy SEC_ELF_OCTETS special case.
+	(bfd_install_relocation): Likewise.
+	(_bfd_final_link_relocate): Don't recalculate octets.
+	* syms.c (_bfd_stab_section_find_nearest_line): Introduc new
+	"octets" temp.
+	* bfd-in2.h: Regenerate.
+
+2019-11-25  Christian Eggers  <ceggers@gmx.de>
+
+	* section.c (struct bfd_section): New flag SEC_ELF_OCTETS.
+	* archures.c (bfd_octets_per_byte): New parameter sec.
+	If section is not NULL and SEC_ELF_OCTETS is set, one octet es
+	returned [ELF targets only].
+	* bfd.c (bfd_get_section_limit): Provide section parameter to
+	bfd_octets_per_byte.
+	* bfd-in2.h: regenerate.
+	* binary.c (binary_set_section_contents): Move call to
+	bfd_octets_per_byte into section loop. Provide section parameter
+	to bfd_octets_per_byte.
+	* coff-arm.c (coff_arm_reloc): Provide section parameter
+	to bfd_octets_per_byte.
+	* coff-i386.c (coff_i386_reloc): likewise.
+	* coff-mips.c (mips_reflo_reloc): likewise.
+	* coff-x86_64.c (coff_amd64_reloc): likewise.
+	* cofflink.c (_bfd_coff_link_input_bfd): likewise.
+	(_bfd_coff_reloc_link_order): likewise.
+	* elf.c (_bfd_elf_section_offset): likewise.
+	(_bfd_elf_make_section_from_shdr): likewise.
+	Set SEC_ELF_OCTETS for sections with names .gnu.build.attributes,
+	.debug*, .zdebug* and .note.gnu*.
+	* elf32-msp430.c (rl78_sym_diff_handler): Provide section parameter
+	to bfd_octets_per_byte.
+	* elf32-nds.c (nds32_elf_get_relocated_section_contents): likewise.
+	* elf32-ppc.c (ppc_elf_addr16_ha_reloc): likewise.
+	* elf32-pru.c (pru_elf32_do_ldi32_relocate): likewise.
+	* elf32-s12z.c (opru18_reloc): likewise.
+	* elf32-sh.c (sh_elf_reloc): likewise.
+	* elf32-spu.c (spu_elf_rel9): likewise.
+	* elf32-xtensa.c (bfd_elf_xtensa_reloc): likewise
+	* elf64-ppc.c (ppc64_elf_brtaken_reloc): likewise.
+	(ppc64_elf_addr16_ha_reloc): likewise.
+	(ppc64_elf_toc64_reloc): likewise.
+	* elflink.c (bfd_elf_final_link): likewise.
+	(bfd_elf_perform_complex_relocation): likewise.
+	(elf_fixup_link_order): likewise.
+	(elf_link_input_bfd): likewise.
+	(elf_link_sort_relocs): likewise.
+	(elf_reloc_link_order): likewise.
+	(resolve_section): likewise.
+	* linker.c (_bfd_generic_reloc_link_order): likewise.
+	(bfd_generic_define_common_symbol): likewise.
+	(default_data_link_order): likewise.
+	(default_indirect_link_order): likewise.
+	* srec.c (srec_set_section_contents): likewise.
+	(srec_write_section): likewise.
+	* syms.c (_bfd_stab_section_find_nearest_line): likewise.
+	* reloc.c (_bfd_final_link_relocate): likewise.
+	(bfd_generic_get_relocated_section_contents): likewise.
+	(bfd_install_relocation): likewise.
+	For section which have SEC_ELF_OCTETS set, multiply output_base
+	and output_offset with bfd_octets_per_byte.
+	(bfd_perform_relocation): likewise.
+
+2019-11-21  Alan Modra  <amodra@gmail.com>
+
+	* elf32-arm.c (elf32_arm_size_stubs): Exclude dynamic library
+	BFDs that have not been loaded.
+
+2019-11-19  Alan Modra  <amodra@gmail.com>
+
+	PR 25197
+	* coffgen.c (coff_find_nearest_line_with_names): Check that C_FILE
+	u.syment.n_value does point at another C_FILE sym and not into
+	some auxent that happens to look like a C_FILE.  Properly check
+	for integer overflow and avoid possible pointer wrap-around.
+	Simplify pr17512 checks.
+
+2019-11-19  Alan Modra  <amodra@gmail.com>
+
+	PR 25200
+	* reloc.c (bfd_default_reloc_type_lookup): Don't BFD_FAIL.
+	* elf.c (_bfd_elf_validate_reloc): Don't segfault on NULL howto.
+
+2019-11-18  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (struct elf_backend_data <elf_backend_init_file_header>):
+	Rename from elf_backend_post_process_headers.
+	(_bfd_elf_post_process_headers): Delete.
+	(_bfd_elf_init_file_header): Declare.
+	* elf.c (_bfd_elf_compute_section_file_positions): Call new function
+	in place of prep_headers and elf_backend_post_process_headers.
+	(_bfd_elf_init_file_header): Renamed from prep_headers with
+	updated args and made global.  Delete dead code.
+	(_bfd_elf_post_process_headers): Delete.
+	* elf32-arm.c (elf32_arm_init_file_header): Rename from
+	elf32_arm_post_process_headers and call _bfd_elf_init_file_header.
+	Return status.
+	(elf_backend_init_file_header): Define.
+	(elf_backend_post_process_headers): Don't define.
+	* elf32-i386.c (elf_i386_fbsd_init_file_header): Similarly.
+	* elf32-m68hc1x.c (elf32_m68hc11_init_file_header): Similarly.
+	* elf32-metag.c (elf_metag_init_file_header): Similarly.
+	* elf32-spu.c (spu_elf_init_file_header
+	* elf32-visium.c (visium_elf_init_file_header
+	* elf64-alpha.c (elf64_alpha_fbsd_init_file_header
+	* elf64-hppa.c (elf64_hppa_init_file_header
+	* elf64-ia64-vms.c (elf64_vms_init_file_header
+	* elfnn-aarch64.c (elfNN_aarch64_init_file_header
+	* elfnn-ia64.c (elfNN_hpux_init_file_header
+	* elfxx-mips.c (_bfd_mips_init_file_header
+	* elfxx-mips.h (_bfd_mips_post_process_headers): Delete.
+	(_bfd_mips_init_file_header): Declare.
+	(elf_backend_post_process_headers): Delete.
+	(elf_backend_init_file_header): Define.
+	* elfxx-target.h (elf_backend_post_process_headers): Delete.
+	(elf_backend_init_file_header): Define and use.
+	* elf32-m68hc12.c (elf_backend_init_file_header): Define.
+	(elf_backend_post_process_headers): Don't define.
+	* elf32-m68hc1x.h (elf32_m68hc11_post_process_headers): Delete.
+	(elf32_m68hc11_init_file_header): Declare.
+	* elf32-ppc.c (elf_backend_post_process_headers): Remove
+	unnecessary undef.
+
+2019-11-18  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (struct elf_backend_data <elf_backend_modify_headers>):
+	Rename from elf_backend_modify_program_headers.
+	(_bfd_elf_modify_headers): Declare.
+	* elf.c (assign_file_positions_except_relocs): Set
+	elf_program_header_size.  Always call elf_backend_modify_headers.
+	Extract code modifying file header..
+	(_bfd_elf_modify_headers): ..to here.  New function.
+	* elf32-arm.c (elf_backend_modify_headers): Renamed from
+	elf_backend_modify_program_headers.
+	* elf32-i386.c: Similarly.
+	* elf64-x86-64.c: Similarly.
+	* elfxx-target.h: Similarly.  Default elf_backend_modify_headers
+	to _bfd_elf_modify_headers.
+	* elf-nacl.h (nacl_modify_headers): Rename from
+	nacl_modify_program_headers.
+	* elf-nacl.c (nacl_modify_headers): Rename from
+	nacl_modify_program_headers and call _bfd_elf_modify_headers.
+	* elf32-rx.c (elf32_rx_modify_headers): Similarly.
+	* elf32-spu.c (spu_elf_modify_headers): Similarly.
+	* elfnn-ia64.c (elfNN_ia64_modify_headers): Similarly.
+	* elf32-sh.c (elf_backend_modify_program_headers): Don't undef.
+
+2019-11-18  Alan Modra  <amodra@gmail.com>
+
+	PR 25196
+	* bfd.c (bfd_error_type): Add bfd_error_sorry.
+	(bfd_errmsgs): Likewise.
+	* elf.c (rewrite_elf_program_header): Don't abort on confused
+	lma/alignment.  Replace bfd_error_bad_value with bfd_error_sorry.
+	(_bfd_elf_validate_reloc): Use bfd_error_sorry.
+	(_bfd_elf_final_write_processing): Likewise.
+	* bfd-in2.h: Regenerate.
+
+2019-11-12  Jim Wilson  <jimw@sifive.com>
+
+	PR 25181
+	* elfnn-riscv.c (_bfd_riscv_relax_call): Always add max_alignment to
+	foff.  If sym_sec->output_section and sec->output_section are the same
+	and not *ABS* then set max_alignment to that section's alignment.
+
+2019-11-07  Alan Modra  <amodra@gmail.com>
+
+	* cpu-cr16c.c: Delete.
+	* elf32-cr16c.c: Delete.
+	* Makefile.am,
+	* archures.c,
+	* config.bfd,
+	* configure.ac,
+	* reloc.c,
+	* targets.c: Remove cr16c support.
+	* Makefile.in,
+	* bfd-in2.h,
+	* configure,
+	* libbfd.h,
+	* po/SRC-POTFILES.in: Regenerate.
+
+2019-11-05  Tim RÃ¼hsen  <tim.ruehsen@gmx.de>
+
+	* doc/chew.c (add_to_definition): Use correct type when
+	calculating size of array reallocation.
+	(nextword): Always initialise the word return parameter.
+	(compile): Check return value of nextword().
+
+2019-10-30  Keith Seitz  <keiths@redhat.com>
+
+	* elf-bfd.h (elf_backend_data) <elf_backend_core_find_build_id>:
+	New field.
+	(_bfd_elf32_core_find_build_id, _bfd_elf64_core_find_build_id):
+	New functions.
+	(elf_read_notes): Add declaration.
+	* elf.c (elf_read_notes): Move elf-bfd.h.
+	(_bfd_elf_core_find_build_id): New function.
+	(bfd_section_from_phdr): Scan core file PT_LOAD segments for
+	build-id if none is known.
+	(elf_parse_notes): For core files, scan for notes.
+	* elfcore.h (elf_core_file_matches_executable_p): If both
+	BFDs have identical build-ids, then they match.
+	(_bfd_elf_core_find_build_id): New function.
+	* elfxx-target.h (elf_backend_core_find_build_id): Define.
+	(elfNN_bed): Add elf_backend_core_find_build_id.
+
+2019-10-29  Andrew Eikum  <aeikum@codeweavers.com>
+
+	* libcoff-in.h (struct pe_tdata): Add dos_message field.
+	* libcoff.h: Regenerate.
+	* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Copy the
+	dos_message field rather than initialising it.
+	(_bfd_XX_bfd_copy_private_bfd_data_common): Copy the dos_message
+	field.
+	* peicode.h (pe_mkobject): Initialise the dos_message field.
+	(pe_mkobject_hook): Copy the dos_message field.
+	(pe_bfd_object_p): Copy the dos_message field.
+
+2019-10-25  Alan Modra  <amodra@gmail.com>
+
+	PR 4499
+	* elf-nacl.c (nacl_modify_segment_map): Set no_sort_lma for all
+	PT_LOAD segments.
+	* elf32-spu.c (spu_elf_modify_segment_map): Likewise on overlay
+	PT_LOAD segments.
+	* elf.c (elf_sort_segments): New function.
+	(assign_file_positions_except_relocs): Use shortcuts to elfheader
+	and elf_tdata.  Seek to e_phoff not sizeof_ehdr to write program
+	headers.  Move PT_PHDR check..
+	(assign_file_positions_for_non_load_sections): ..and code setting
+	PT_PHDR p_vaddr and p_paddr, and code setting __ehdr_start value..
+	(assign_file_positions_for_load_sections): ..to here.  Sort
+	PT_LOAD headers.  Delete header_pad code.  Use actual number of
+	headers rather than allocated in calculating size for program
+	headers.  Don't assume program headers follow ELF file header.
+	Simplify pt_load_count code.  Only set "off" for PT_LOAD or
+	PT_NOTE in cores.
+	(rewrite_elf_program_header): Set p_vaddr_offset for segments
+	that include file and program headers.
+	(copy_elf_program_header): Likewise, replacing header_size code.
+
+2019-10-21  Alan Modra  <amodra@gmail.com>
+
+	PR 452
+	* archive.c (normalize): Return file unchanged when
+	BFD_ARCHIVE_FULL_PATH.
+	(_bfd_construct_extended_name_table): Pass abfd, the output
+	bfd, to normalize.
+	(_bfd_archive_bsd44_construct_extended_name_table): Likewise.
+	* bfd.c (struct bfd): Make flags a full flagword.
+	(BFD_ARCHIVE_FULL_PATH): Define.
+	* bfd-in2.h: Regenerate.
+
+2019-10-20  John David Anglin  <danglin@gcc.gnu.org>
+
+	* elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte
+	minimum alignment for .plt section.
+
+2019-10-19  John David Anglin  <danglin@gcc.gnu.org>
+
+	* elf32-hppa.c: Revise import stub sequences.
+	(LONG_BRANCH_STUB_SIZE): Define.
+	(LONG_BRANCH_SHARED_STUB_SIZE): Define.
+	(IMPORT_STUB_SIZE): Define.
+	(IMPORT_SHARED_STUB_SIZE): Define.
+	(EXPORT_STUB_SIZE): Define.
+	(plt_stub): Revise to not use register %r22.
+	(LDO_R1_R22): Define.
+	(LDW_R22_R21): Define.
+	(LDW_R22_R19): Define.
+	(hppa_build_one_stub): Update stub generation and use new defines.
+	(hppa_size_one_stub): Likewise.
+
+2019-10-17  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_elf_relocate_section): Report the error message
+	that user should recompile their code with `fPIC` when linking non-pic
+	code into shared library.
+
+	* elfnn-riscv.c (riscv_elf_relocate_section): Use asprintf to extend
+	the error message if needed, and then store the result into the
+	`msg_buf`.  Finally, remember to free the unused `msg_buf`.  All error
+	message for the dangerous relocation should be set before we call the
+	callback function.  If we miss the error message since linker runs out
+	of memory, we should set the default error message for the error.
+
+2019-10-16  Alan Modra  <amodra@gmail.com>
+
+	PR 13616
+	* cpu-powerpc.c (bfd_arch_ppc_nop_fill): New function, use it
+	for all ppc arch info.
+	* linker.c (default_data_link_order): Pass info->big_endian to
+	arch_info->fill function.
+
+2019-10-15  Alan Modra  <amodra@gmail.com>
+
+	* elf32-m68hc1x.c (reloc_warning): Add printf attribute.
+	(elf32_m68hc11_relocate_section): Don't use a variable for format
+	strings.  Delete some unnecessary xgettext:c-format comments.
+
+2019-10-15  Alan Modra  <amodra@gmail.com>
+
+	PR 24955
+	* elf32-arm.c (set_cmse_veneer_addr_from_implib): Use bfd_malloc
+	rather than xmalloc.
+	* elf32-m68hc1x.c (reloc_warning): New function.
+	(elf32_m68hc11_relocate_section): Use it here.  Cast bfd_vma values
+	corresponding to %lx in format strings.
+	* elf32-nds32.c (nds32_insertion_sort): Use a stack temporary.
+
+2019-10-15  Alan Modra  <amodra@gmail.com>
+
+	PR 25100
+	* elf64-ppc.c (sfpr_define): Delete dead code that triggered a warning.
+
+2019-10-15  Alan Modra  <amodra@gmail.com>
+
+	* bfd.c (bfd_check_compression_header): Check for powers of two
+	with x == (x & -x).
+
+2019-10-14  Alan Modra  <amodra@gmail.com>
+
+	* syms.c (struct indexentry): Add idx field.
+	(cmpindexentry): Final sort on idx.
+	(_bfd_stab_section_find_nearest_line): Set idx.
+
+2019-10-14  Alan Modra  <amodra@gmail.com>
+
+	* dwarf2.c (struct lookup_funcinfo): Add idx field.
+	(compare_lookup_funcinfos): Perform final sort on idx.
+	(build_lookup_funcinfo_table): Set idx.
+	(compare_sequences): Perform final sort on num_lines.
+	(build_line_info_table): Set num_lines and line_info_lookup earlier.
+	(sort_line_sequences): Set num_lines for sort.
+
+2019-10-14  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (elf_sort_symbol): Sort on type and name as well.
+	(elf_link_add_object_symbols): Style fix.
+
+2019-10-14  Alan Modra  <amodra@gmail.com>
+
+	* elf.c (_bfd_elf_map_sections_to_segments): Init target_index
+	for sections about to be sorted.
+	(assign_file_positions_for_load_sections): Likewise.
+	(elf_sort_sections): Don't bother optimising both TOEND case.
+	* elflink.c (bfd_elf_final_link): Reset target_index.
+
+2019-10-14  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (elf_get_linked_section_vma): Delete.
+	(compare_link_order): Use elf_linked_to_section and sort by lma,
+	size, and id.
+	(elf_fixup_link_order): Use size_t variables where appropriate.
+	Make use of elf_linked_to_section.  Formatting.  Properly align
+	sections.
+
+2019-10-14  Alan Modra  <amodra@gmail.com>
+
+	* elf-strtab.c (strrevcmp): Comment.
+	* merge.c (strrevcmp): Likewise.
+	* elf64-ppc.c (compare_symbols): Correct final pointer comparison.
+	Comment on why comparing pointers ensures a stable sort.
+	* elflink.c (struct elf_symbol): Add void* to union.
+	(elf_sort_elf_symbol): Ensure a stable sort with pointer comparison.
+	(elf_sym_name_compare): Likewise.
+	(bfd_elf_match_symbols_in_sections): Style fix.
+	(elf_link_sort_cmp1): Comment.
+
+2019-10-14  Alan Modra  <amodra@gmail.com>
+
+	PR 24955
+	* elflink.c (elf_output_implib): Don't use xmalloc.  Don't ignore
+	return value of bfd_alloc2.
+	* peXXigen.c (_bfd_XXi_write_codeview_record): Don't use xmalloc.
+	* pef.c (bfd_pef_print_symbol): Likewise.  Don't ignore return
+	value of bfd_get_section_contents.
+	* som.c (som_write_space_strings): Don't use xmalloc.
+	(som_write_symbol_strings): Likewise.
+
+2019-10-11  Max Filippov  <jcmvbkbc@gmail.com>
+
+	* dwarf2.c (stash_maybe_enable_info_hash_tables): Only set
+	stash->info_hash_status = STASH_INFO_HASH_ON when
+	stash_maybe_update_info_hash_tables succeeds.
+
+2019-10-09  Alan Modra  <amodra@gmail.com>
+
+	PR 25070
+	* dwarf2.c (_bfd_dwarf2_slurp_debug_info): Catch overflow of
+	total_size calculation.
+
+2019-10-08  Alan Modra  <amodra@gmail.com>
+
+	PR 25078
+	* dwarf2.c (find_abstract_instance): Delete orig_info_ptr, add
+	recur_count.  Error on recur_count reaching 100 rather than
+	info_ptr matching orig_info_ptr.  Adjust calls.
+
+2019-10-07  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+
+	* elf32-msp430.c (elf32_msp430_merge_mspabi_attributes): Rename to..
+	(elf32_msp430_merge_msp430_attributes): Add support for merging
+	the GNU object attribute for data region.
+
+2019-10-07  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_size_dynamic_sections): Do allocate
+	space for local got non-tls relocs when PIE.
+
+2019-10-07  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (elf_fixup_link_order): Don't attempt to find
+	an elf_section for linker created bfd sections.
+
+2019-10-07  Alan Modra  <amodra@gmail.com>
+
+	* elf32-ppc.c (ppc_elf_tls_optimize): Don't process R_PPC_TLSLD
+	with non-local symbol.  Don't double count __tls_get_addr calls
+	with marker relocs.
+	* elf64-ppc.c (ppc64_elf_tls_optimize): Likewise.
+
+2019-10-07  Alan Modra  <amodra@gmail.com>
+
+	* elf32-ppc.c (nomark_tls_get_addr): Rename from has_tls_get_addr_call
+	throughout.
+	* elf64-ppc.c (nomark_tls_get_addr): Likewise.
+
+2019-10-04  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_check_relocs): Move initialisation of vars.
+	(ppc64_elf_tls_optimize): Correct is_local condition.
+	(allocate_got): Don't reserve dynamic relocations for any of the
+	tls got relocs in PIEs when the symbol is local.
+	(allocate_dynrelocs): Correct validity test for local sym using
+	tlsld_got slot.
+	(ppc64_elf_size_dynamic_sections): Don't reserve dynamic relocations
+	for any of the tls got relocs in PIEs.
+	(ppc64_elf_layout_multitoc): Likewise.
+	(ppc64_elf_relocate_section): Correct validity test for local sym
+	using tlsld_got slot.  Don't emit dynamic relocations for any of
+	the tls got relocs in PIEs when the symbol is local.
+	* elf32-ppc.c (ppc_elf_tls_optimize): Correct is_local condition.
+	(got_relocs_needed): Delete.
+	(allocate_dynrelocs): Correct validity test for local sym using
+	tlsld_got slot.  Don't reserve dynamic relocations for any of the
+	tls got relocs in PIEs when the symbol is local.
+	(ppc_elf_size_dynamic_sections): Don't reserve dynamic relocations
+	for any of the tls got relocs in PIEs.
+	(ppc_elf_relocate_section): Correct validity test for local sym
+	using tlsld_got slot.  Don't emit dynamic relocations for any of
+	the tls got relocs in PIEs when the symbol is local.
+
+2019-10-04  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	PR ld/22263
+	PR ld/25056
+	* elf32-arm.c (elf32_arm_tls_transition): Use bfd_link_dll instead of
+	bfd_link_pic for TLS checks.
+	(elf32_arm_final_link_relocate): Likewise.
+	(allocate_dynrelocs_for_symbol): Likewise.
+
+2019-10-04  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	PR ld/25062
+	* elf32-arm.c (elf32_arm_final_link_relocate): Sign extend data.
+
+2019-09-30  Nick Alcock  <nick.alcock@oracle.com>
+
+	* elf-bfd.h (bfd_section_is_ctf): New inline function.
+	* elf.c (special_sections_c): Add ".ctf".
+	(assign_file_positions_for_non_load_sections): Note that
+	compressed debugging sections etc are not assigned here.  Treat
+	CTF sections like SEC_ELF_COMPRESS sections when is_linker_output:
+	sh_offset -1.
+	(assign_file_positions_except_relocs): Likewise.
+	(find_section_in_list): Note that debugging and CTF sections, as
+	well as reloc sections, are assigned later.
+	(_bfd_elf_assign_file_positions_for_non_load): CTF sections get
+	their size and contents updated.
+	(_bfd_elf_set_section_contents): Skip CTF sections: unlike
+	compressed sections, they have no uncompressed content to copy at
+	this stage.
+	* elflink.c (elf_link_swap_symbols_out): Call the examine_strtab
+	callback right before the strtab is written out.
+	(bfd_elf_final_link): Don't cache the section contents of CTF
+	sections: they are not populated yet.  Call the emit_ctf callback
+	right at the end, after all the symbols and strings are flushed
+	out.
+
+2019-07-13  Nick Alcock  <nick.alcock@oracle.com>
+
+	* elf-strtab.c (_bfd_elf_strtab_len): New.
+	(_bfd_elf_strtab_str): Likewise.
+	* bfd-elf.h: Declare them.
+
+2019-07-13  Nick Alcock  <nick.alcock@oracle.com>
+
+	* elf-bfd.h (bfd_elf_get_str_section): Add.
+	* elf.c (bfd_elf_get_str_section): No longer static.
+
+2019-09-26  Alan Modra  <amodra@gmail.com>
+
+	PR 24262
+	* Makefile.am (AM_CPPFLAGS): Add -DLIBDIR.
+	* plugin.c (load_plugin): Search both ${libdir}/bfd-plugins and
+	${bindir}/../lib/bfd-plugins if different.
+	* Makefile.in: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_check_relocs): Use bfd_link_executable
+	in choosing between different actions for shared library and
+	non-shared library cases.  Delete ELIMINATE_COPY_RELOCS test.
+	(dec_dynrel_count): Likewise.  Account for ifunc special case.
+	(ppc64_elf_adjust_dynamic_symbol): Copy relocs are for executables,
+	not non-pic.
+	(allocate_dynrelocs): Comment fixes.  Delete ELIMINATE_COPY_RELOCS
+	test.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* Makefile.am (SOURCE_HFILES): Add many missing .h files.
+	* Makefile.in: Regenerate.
+	* po/SRC-POTFILES.in: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h (bfd_symbol, bfd_section_already_linked),
+	(bfd_elf_version_tree): Delete forward declarations.
+	Move other forward decls and remaining elf function decl later.
+	(bfd_section_already_linked_table_init),
+	(bfd_section_already_linked_table_free),
+	(_bfd_handle_already_linked, _bfd_nearby_section),
+	(_bfd_fix_excluded_sec_syms): Move to bfdlink.h.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move ecoff function declarations..
+	* ecoff-bfd.h: ..to here, new file.
+	* ecoff.c: Include ecoff-bfd.h.
+	* ecofflink.c: Likewise.
+	* elf64-alpha.c: Likewise.
+	* elfxx-mips.c: Likewise.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h (enum notice_asneeded_action): Move to bfdlink.h.
+	Move most other elf declarations..
+	* elf-bfd.h: ..to here.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move m68k function declaration..
+	* cpu-m68k.h: ..to here, new file..
+	* elf32-m68k.h: ..and here, new file.
+	* elf32-m68k.c: Include cpu-m68k.h and elf32-m68k.h.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move bfin function declaration..
+	* elf32-bfin.h: ..to here, new file.
+	* elf32-bfin.c: Include elf32-bfin.h.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move cr16 function declaration..
+	* elf32-cr16.h: ..to here, new file.
+	* elf32-cr16.c: Include elf32-cr16.h.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h (bfd_sunos_get_needed_list),
+	(bfd_sunos_record_link_assignment),
+	(bfd_sunos_size_dynamic_sections),
+	(bfd_i386linux_size_dynamic_sections),
+	(bfd_sparclinux_size_dynamic_sections): Delete obsolete decls.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move xcoff function declarations..
+	* xcofflink.h: ..to here, new file.
+	* xcofflink.c: Include xcofflink.h.
+	* coff-rs6000.c (bfd_xcoff_ar_archive_set_magic): Delete unused func.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Delete coff forward refs and move coff declaration..
+	* coff-bfd.h: ..to here.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move arm declaraions..
+	* cpu-arm.h: ..to here, new file..
+	* coff-arm.h: ..and here, new file..
+	* elf32-arm.h: ..and here, new file.
+	* cpu-arm.c: Include cpu-arm.h.
+	* coff-arm.c: Include cpu-arm.h and coff-arm.h.
+	* elf32-arm.c: Include cpu-arm.h and elf32-arm.h.
+	* pe-arm.c: Move function rename defines later.
+	* pe-arm-wince.c: Likewise and include sysdep.h and bfd.h early.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move tic6x function declaration..
+	* elf32-tic6x.h: ..to here.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move aarch64 declarations and defines..
+	* cpu-aarch64.h: ..to here, new file..
+	* elfxx-aarch64.h: ..and here.
+	* cpu-aarch64.c: Include cpu-aarch64.h.
+	* elfnn-aarch64.c: Likewise.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Delete ticoff function declarations.
+	* coff-tic54x.c (bfd_ticoff_set_section_load_page),
+	(bfd_ticoff_get_section_load_page): Make static.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move h8300 function declaration to..
+	* cpu-h8300.h: ..here, new file.
+	* cpu-h8300.c: Include cpu-h8300.h.
+	* elf32-h8300.c: Likewise.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move ia64 function declarations..
+	* elfxx-ia64.h: ..to here.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move v850 function declarations..
+	* elf32-v850.h: ..to here, new file.
+	* elf32-v850.c: Include elf32-v850.h.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move mips function declaration to..
+	* elfxx-mips.h: ..here.
+	* bfd-in2.h: Regenerate.
+
+2019-09-23  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h: Move csky function declarations to..
+	* elf32-csky.h: ..here, new file.
+	* elf32-csky.c: Include elf32-csky.h.
+	* bfd-in2.h: Regenerate.
+
+2019-09-20  Nelson Chu <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_pcgp_hi_reloc): Add new field undefined_weak.
+	(riscv_record_pcgp_hi_reloc): New parameter undefined_weak.
+	Set undefined_weak field from it.
+	(relax_func_t): New parameter undefined_weak.
+	(_bfd_riscv_relax_call): New ignored parameter undefined_weak.
+	(_bfd_riscv_relax_tls_le): Likewise.
+	(_bfd_riscv_relax_align): Likewise.
+	(_bfd_riscv_relax_delete): Likewise.
+	(_bfd_riscv_relax_lui): New parameter undefined_weak.  If true,
+	allow relaxing.  For LO12* relocs, set rs1 to x0 when undefined_weak.
+	(_bfd_riscv_relax_pc): New parameter undefined_weak.  For LO12* relocs,
+	set undefined_weak from hi_reloc.  If true, allow relaxing.  For LO12*
+	relocs, set rs1 to x0 when undefined_weak and change to non-pcrel
+	reloc.
+	(_bfd_riscv_relax_section): New local undefined_weak.  Set for
+	undef weak relocs that can be relaxed.  Pass to relax_func call.
+
+2019-09-20  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h (bfd_section_name, bfd_section_size, bfd_section_vma),
+	(bfd_section_lma, bfd_section_alignment, bfd_section_flags),
+	(bfd_section_userdata, bfd_is_com_section, discarded_section),
+	(bfd_get_section_limit_octets, bfd_get_section_limit): Delete macros.
+	* bfd.c (bfd_get_section_limit_octets, bfd_get_section_limit),
+	(bfd_section_list_remove, bfd_section_list_append),
+	(bfd_section_list_prepend, bfd_section_list_insert_after),
+	(bfd_section_list_insert_before, bfd_section_removed_from_list):
+	New inline functions.
+	* section.c (bfd_is_und_section, bfd_is_abs_section),
+	(bfd_is_ind_section, bfd_is_const_section, bfd_section_list_remove),
+	(bfd_section_list_append, bfd_section_list_prepend),
+	(bfd_section_list_insert_after, bfd_section_list_insert_before),
+	(bfd_section_removed_from_list): Delete macros.
+	(bfd_section_name, bfd_section_size, bfd_section_vma),
+	(bfd_section_lma, bfd_section_alignment, bfd_section_flags),
+	(bfd_section_userdata, bfd_is_com_section, bfd_is_und_section),
+	(bfd_is_abs_section, bfd_is_ind_section, bfd_is_const_section),
+	(discarded_section): New inline functions.
+	* bfd-in2.h: Regenerate.
+
+2019-09-20  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name),
+	(bfd_asymbol_bfd, bfd_asymbol_flavour, bfd_set_asymbol_name): Delete.
+	* bfd.c (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name),
+	(bfd_asymbol_bfd, bfd_set_asymbol_name): New inline functions.
+	* targets.c (bfd_asymbol_flavour): Likewise.
+	* bfd-in2.h: Regenerate.
+
+2019-09-20  Alan Modra  <amodra@gmail.com>
+
+	* archive.c (bfd_generic_archive_p): Use bfd_set_thin_archive.
+	* bfd-in.h (bfd_get_filename, bfd_get_cacheable, bfd_get_format),
+	(bfd_get_target, bfd_get_flavour, bfd_family_coff, bfd_big_endian),
+	(bfd_little_endian, bfd_header_big_endian, bfd_header_little_endian),
+	(bfd_get_file_flags, bfd_applicable_file_flags),
+	(bfd_applicable_section_flags, bfd_has_map, bfd_is_thin_archive),
+	(bfd_valid_reloc_types, bfd_usrdata, bfd_get_start_address),
+	(bfd_get_symcount, bfd_get_outsymbols, bfd_count_sections),
+	(bfd_get_dynamic_symcount, bfd_get_symbol_leading_char): Delete.
+	* bfd/bfd.c (bfd_get_filename, bfd_get_cacheable, bfd_get_format),
+	(bfd_get_file_flags, bfd_get_start_address, bfd_get_symcount),
+	(bfd_get_dynamic_symcount, bfd_get_outsymbols, bfd_count_sections),
+	(bfd_has_map, bfd_is_thin_archive, bfd_set_thin_archive),
+	(bfd_usrdata, bfd_set_usrdata): New inline functions.
+	* targets.c (bfd_get_target, bfd_get_flavour),
+	(bfd_applicable_file_flags, bfd_family_coff, bfd_big_endian),
+	(bfd_little_endian, bfd_header_big_endian),
+	(bfd_header_little_endian, bfd_applicable_section_flags),
+	(bfd_get_symbol_leading_char): New inline functions.
+	* bfd-in2.h: Regenerate.
+
+2019-09-20  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_glibc_dynamic_reloc): New function.
+	(ppc64_elf_relocate_section): Warn if emitting unsupported dynamic
+	relocations.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h (bfd_get_section_name, bfd_get_section_vma),
+	(bfd_get_section_lma, bfd_get_section_alignment),
+	(bfd_get_section_size, bfd_get_section_flags),
+	(bfd_get_section_userdata): Delete.
+	(bfd_section_name, bfd_section_size, bfd_section_vma),
+	(bfd_section_lma, bfd_section_alignment): Lose bfd parameter.
+	(bfd_section_flags, bfd_section_userdata): New.
+	(bfd_is_com_section): Rename parameter.
+	* section.c (bfd_set_section_userdata, bfd_set_section_vma),
+	(bfd_set_section_alignment, bfd_set_section_flags, bfd_rename_section),
+	(bfd_set_section_size): Delete bfd parameter, rename section parameter.
+	(bfd_set_section_lma): New.
+	* bfd-in2.h: Regenerate.
+	* mach-o.c (bfd_mach_o_init_section_from_mach_o): Delete bfd param,
+	update callers.
+	* aoutx.h, * bfd.c, * coff-alpha.c, * coff-arm.c, * coff-mips.c,
+	* coff64-rs6000.c, * coffcode.h, * coffgen.c, * cofflink.c,
+	* compress.c, * ecoff.c, * elf-eh-frame.c, * elf-hppa.h,
+	* elf-ifunc.c, * elf-m10200.c, * elf-m10300.c, * elf-properties.c,
+	* elf-s390-common.c, * elf-vxworks.c, * elf.c, * elf32-arc.c,
+	* elf32-arm.c, * elf32-avr.c, * elf32-bfin.c, * elf32-cr16.c,
+	* elf32-cr16c.c, * elf32-cris.c, * elf32-crx.c, * elf32-csky.c,
+	* elf32-d10v.c, * elf32-epiphany.c, * elf32-fr30.c, * elf32-frv.c,
+	* elf32-ft32.c, * elf32-h8300.c, * elf32-hppa.c, * elf32-i386.c,
+	* elf32-ip2k.c, * elf32-iq2000.c, * elf32-lm32.c, * elf32-m32c.c,
+	* elf32-m32r.c, * elf32-m68hc1x.c, * elf32-m68k.c, * elf32-mcore.c,
+	* elf32-mep.c, * elf32-metag.c, * elf32-microblaze.c,
+	* elf32-moxie.c, * elf32-msp430.c, * elf32-mt.c, * elf32-nds32.c,
+	* elf32-nios2.c, * elf32-or1k.c, * elf32-ppc.c, * elf32-pru.c,
+	* elf32-rl78.c, * elf32-rx.c, * elf32-s390.c, * elf32-score.c,
+	* elf32-score7.c, * elf32-sh.c, * elf32-spu.c, * elf32-tic6x.c,
+	* elf32-tilepro.c, * elf32-v850.c, * elf32-vax.c, * elf32-visium.c,
+	* elf32-xstormy16.c, * elf32-xtensa.c, * elf64-alpha.c,
+	* elf64-bpf.c, * elf64-hppa.c, * elf64-ia64-vms.c, * elf64-mmix.c,
+	* elf64-ppc.c, * elf64-s390.c, * elf64-sparc.c, * elf64-x86-64.c,
+	* elflink.c, * elfnn-aarch64.c, * elfnn-ia64.c, * elfnn-riscv.c,
+	* elfxx-aarch64.c, * elfxx-mips.c, * elfxx-sparc.c,
+	* elfxx-tilegx.c, * elfxx-x86.c, * i386msdos.c, * linker.c,
+	* mach-o.c, * mmo.c, * opncls.c, * pdp11.c, * pei-x86_64.c,
+	* peicode.h, * reloc.c, * section.c, * syms.c, * vms-alpha.c,
+	* xcofflink.c: Update throughout for bfd section macro and function
+	changes.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h (bfd_asymbol_section): Rename from bfd_get_section.
+	(bfd_get_output_section): Delete.
+	(bfd_asymbol_base): Delete.
+	(bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name),
+	(bfd_asymbol_bfd, bfd_asymbol_flavour): Tidy.
+	(bfd_set_asymbol_name): New macro.
+	* bfd-in2.h: Regenerate.
+	* aout-cris.c: Update throughout to use bfd_asymbol_section.
+	* aoutx.h: Likewise.
+	* cofflink.c: Likewise.
+	* dwarf2.c: Likewise.
+	* ecoff.c: Likewise.
+	* elf.c: Likewise.
+	* elf32-arm.c: Likewise.
+	* elf32-mips.c: Likewise.
+	* elf32-score.c: Likewise.
+	* elf32-score7.c: Likewise.
+	* elfn32-mips.c: Likewise.
+	* elfnn-aarch64.c: Likewise.
+	* elfxx-mips.c: Likewise.
+	* linker.c: Likewise.
+	* pdp11.c: Likewise.
+	* elf64-mmix.c (mmix_elf_reloc): Part expand bfd_get_output_section.
+
+2019-09-18  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* Makefile.in: Re-generate.
+	* configure: Re-generate.
+	* doc/Makefile.in: Re-generate.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* aoutx.h (slurp_symbol_table): Don't set symcount using bfd_get
+	macros.
+	* pdp11.c (slurp_symbol_table): Likewise.
+	* som.c (som_slurp_symbol_table): Likewise.
+	* coff-ppc.c (ppc_bfd_coff_final_link): Likewise.
+	* coffcode.h (coff_slurp_symbol_table): Likewise.
+	* cofflink.c (_bfd_coff_final_link): Likewise.
+	* ecoff.c (ecoff_slurp_symbolic_header): Likewise.
+	(_bfd_ecoff_slurp_symbolic_info): Likewise.
+	(_bfd_ecoff_slurp_symbol_table): Likewise.
+	(_bfd_ecoff_bfd_final_link): Likewise.
+	* elf.c (_bfd_elf_canonicalize_symtab): Likewise.
+	* elflink.c (elf_link_output_symstrtab): Likewise.
+	(bfd_elf_final_link): Likewise.
+	* peicode.h (pe_ILF_build_a_bfd): Likewise.
+	* xcofflink.c (_bfd_xcoff_bfd_final_link): Likewise.
+	* aoutx.h (some_aout_object_p, slurp_symbol_table): Don't set
+	start_address or symcount using bfd_get macros.
+	* coffgen.c (coff_real_object_p): Likewise.
+	* pdp11.c (some_aout_object_p, slurp_symbol_table): Likewise.
+	* som.c (som_object_setup, som_slurp_symbol_table): Likewise.
+	* elfcore.h (elf_core_file_p): Don't set start_address using
+	bfd_get macro.
+	* elf.c (_bfd_elf_canonicalize_dynamic_symtab): Don't set dynsymcount
+	using bfd_get macro.
+	* bfd.c (bfd_set_file_flags): Don't set flags using bfd_get macro.
+	* linker.c (bfd_generic_link_read_symbols): Don't set outsymbols
+	or symcount using bfd_get macros.
+	(_bfd_generic_final_link, generic_add_output_symbol): Likewise.
+	* syms.c (bfd_set_symtab): Likewise.
+	* vms-alpha.c (alpha_vms_bfd_final_link): Likewise.
+	* archive.c (do_slurp_bsd_armap): Don't set has_armap using
+	bfd_has_map macro.
+	(do_slurp_coff_armap, bfd_slurp_armap): Likewise.
+	* archive64.c (_bfd_archive_64_bit_slurp_armap): Likewise.
+	* coff-rs6000.c (_bfd_xcoff_slurp_armap): Likewise.
+	* coff64-rs6000.c (xcoff64_slurp_armap): Likewise.
+	* ecoff.c (_bfd_ecoff_slurp_armap): Likewise.
+	* som.c (som_slurp_armap): Likewise.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* archures.c (bfd_get_arch): Make param const.
+	(bfd_get_mach, bfd_arch_bits_per_byte): Likewise.
+	(bfd_arch_bits_per_address, bfd_octets_per_byte): Likewise.
+	* bfd-in2.h: Regenerate.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* bfd-in.h (carsym.name): Make const.
+	* reloc.c (struct reloc_howto_struct.name): Likewise.
+	* targets.c (bfd_target.name): Likewise.!
+	* bfd.c (bfd_get_sign_extend_vma): Make variable const.
+	* som.c (som_bfd_fill_in_ar_symbols): Use an intermediary variable
+	when setting carsym.name.
+	* bfd-in2.h: Regenerate.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* mach-o.c (bfd_mach_o_fat_member_init): Likewise.  Replace
+	xstrdup and xmalloc with bfd_strdup and bfd_malloc.  Return an
+	error status.  Adjust calls.
+	* vms-lib.c (_bfd_vms_lib_get_module): Test mhd->id earlier.
+	Close bfd on failure.  Replace xstrdup/bfd_alloc use with
+	bfd_malloc.  Use bfd_set_filename.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (must_be_dyn_reloc): Return 0 for TOC16 relocs.
+	(ppc64_elf_check_relocs): Support dynamic/copy relocs for TOC16.
+	(ppc64_elf_adjust_dynamic_symbol): Don't keep dynamic reloc when
+	needs_copy even if all relocs are in rw sections.
+	(dec_dynrel_count): Handle TOC16 relocs.
+	(ppc64_elf_relocate_section): Support dynamic relocs for TOC16.
+	(ppc64_elf_finish_dynamic_symbol): Adjust to handle needs_copy
+	semantic change.
+
+2019-09-16  Phil Blundell  <pb@pbcl.net>
+
+	* version.m4: Set version to 2.33.50.
+	* Makefile.in, configure, doc/Makefile.in: Regenerated.
+
+2019-09-11  Tom Tromey  <tom@tromey.com>
+
+	* opncls.c (bfd_set_filename): New function.
+	* bfd-in2.h: Regenerate.
+
+2019-09-11  Alan Modra  <amodra@gmail.com>
+
+	* targets.c (struct bfd_target): Add _bfd_group_name.
+	(BFD_JUMP_TABLE): Likewise.
+	* coffgen.c (bfd_coff_group_name): New function.
+	* elf.c (bfd_elf_group_name): New function.
+	* linker.c (_bfd_nolink_bfd_group_name): New function.
+	* section.c (bfd_generic_group_name): New function.
+	* elf-bfd.h (bfd_elf_group_name): Declare.
+	* libbfd-in.h (_bfd_nolink_bfd_group_name): Declare.
+	* libcoff-in.h (bfd_coff_group_name): Declare.
+	* aout-target.h (MY_bfd_group_name): Define.
+	* aout-tic30.c (MY_bfd_group_name): Define.
+	* bfd.c (bfd_group_name): Define.
+	* binary.c (binary_bfd_group_name): Define.
+	* coff-alpha.c (_bfd_ecoff_bfd_group_name): Define.
+	* coff-mips.c (_bfd_ecoff_bfd_group_name): Define.
+	* coff-rs6000.c (_bfd_xcoff_bfd_group_name): Define.
+	* coffcode.h (coff_bfd_group_name): Define.
+	* elfxx-target.h (bfd_elfNN_bfd_group_name): Define.
+	* i386msdos.c (msdos_bfd_group_name): Define.
+	* ihex.c (ihex_bfd_group_name): Define.
+	* mach-o-target.c (bfd_mach_o_bfd_group_name): Define.
+	* mmo.c (mmo_bfd_group_name): Define.
+	* pef.c (bfd_pef_bfd_group_name): Define.
+	* plugin.c (bfd_plugin_bfd_group_name): Define.
+	* ppcboot.c (ppcboot_bfd_group_name): Define.
+	* som.c (som_bfd_group_name): Define.
+	* srec.c (srec_bfd_group_name): Define.
+	* tekhex.c (tekhex_bfd_group_name): Define.
+	* verilog.c (verilog_bfd_group_name): Define.
+	* vms-alpha.c (vms_bfd_group_name, alpha_vms_bfd_group_name): Define.
+	* xsym.c (bfd_sym_bfd_group_name): Define.
+	* coff64-rs6000.c (rs6000_xcoff64_vec): Init new field.
+	(rs6000_xcoff64_aix_vec): Likewise.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+	* libcoff.h: Regenerate.
+
+2019-09-10  Nick Clifton  <nickc@redhat.com>
+
+	PR 24907
+	* archures.c (bfd_arch_info_type): Add max_reloc_offset_into_insn
+	field.
+	(bfd_default_arch_struct): Initialise the new field.
+	* bfd-in2.h: Regenerate.
+	* cpu-aarch64.c: Initialise the new field.
+	* cpu-alpha.c: Likewise.
+	* cpu-arc.c: Likewise.
+	* cpu-arm.c: Likewise.
+	* cpu-avr.c: Likewise.
+	* cpu-bfin.c: Likewise.
+	* cpu-bpf.c: Likewise.
+	* cpu-cr16.c: Likewise.
+	* cpu-cr16c.c: Likewise.
+	* cpu-cris.c: Likewise.
+	* cpu-crx.c: Likewise.
+	* cpu-csky.c: Likewise.
+	* cpu-d10v.c: Likewise.
+	* cpu-d30v.c: Likewise.
+	* cpu-dlx.c: Likewise.
+	* cpu-epiphany.c: Likewise.
+	* cpu-fr30.c: Likewise.
+	* cpu-frv.c: Likewise.
+	* cpu-ft32.c: Likewise.
+	* cpu-h8300.c: Likewise.
+	* cpu-hppa.c: Likewise.
+	* cpu-i386.c: Likewise.
+	* cpu-ia64.c: Likewise.
+	* cpu-iamcu.c: Likewise.
+	* cpu-ip2k.c: Likewise.
+	* cpu-iq2000.c: Likewise.
+	* cpu-k1om.c: Likewise.
+	* cpu-l1om.c: Likewise.
+	* cpu-lm32.c: Likewise.
+	* cpu-m10200.c: Likewise.
+	* cpu-m10300.c: Likewise.
+	* cpu-m32c.c: Likewise.
+	* cpu-m32r.c: Likewise.
+	* cpu-m68hc11.c: Likewise.
+	* cpu-m68hc12.c: Likewise.
+	* cpu-m68k.c: Likewise.
+	* cpu-m9s12x.c: Likewise.
+	* cpu-m9s12xg.c: Likewise.
+	* cpu-mcore.c: Likewise.
+	* cpu-mep.c: Likewise.
+	* cpu-metag.c: Likewise.
+	* cpu-microblaze.c: Likewise.
+	* cpu-mips.c: Likewise.
+	* cpu-mmix.c: Likewise.
+	* cpu-moxie.c: Likewise.
+	* cpu-msp430.c: Likewise.
+	* cpu-mt.c: Likewise.
+	* cpu-nds32.c: Likewise.
+	* cpu-nfp.c: Likewise.
+	* cpu-nios2.c: Likewise.
+	* cpu-ns32k.c: Likewise.
+	* cpu-or1k.c: Likewise.
+	* cpu-pdp11.c: Likewise.
+	* cpu-pj.c: Likewise.
+	* cpu-plugin.c: Likewise.
+	* cpu-powerpc.c: Likewise.
+	* cpu-pru.c: Likewise.
+	* cpu-riscv.c: Likewise.
+	* cpu-rl78.c: Likewise.
+	* cpu-rs6000.c: Likewise.
+	* cpu-rx.c: Likewise.
+	* cpu-s12z.c: Likewise.
+	* cpu-s390.c: Likewise.
+	* cpu-score.c: Likewise.
+	* cpu-sh.c: Likewise.
+	* cpu-sparc.c: Likewise.
+	* cpu-spu.c: Likewise.
+	* cpu-tic30.c: Likewise.
+	* cpu-tic4x.c: Likewise.
+	* cpu-tic54x.c: Likewise.
+	* cpu-tic6x.c: Likewise.
+	* cpu-tic80.c: Likewise.
+	* cpu-tilegx.c: Likewise.
+	* cpu-tilepro.c: Likewise.
+	* cpu-v850.c: Likewise.
+	* cpu-v850_rh850.c: Likewise.
+	* cpu-vax.c: Likewise.
+	* cpu-visium.c: Likewise.
+	* cpu-wasm32.c: Likewise.
+	* cpu-xc16x.c: Likewise.
+	* cpu-xgate.c: Likewise.
+	* cpu-xstormy16.c: Likewise.
+	* cpu-xtensa.c: Likewise.
+	* cpu-z80.c: Likewise.
+	* cpu-z8k.c: Likewise.
+
+2019-09-09  Phil Blundell  <pb@pbcl.net>
+
+	binutils 2.33 branch created.
+
+2019-09-06  Alan Modra  <amodra@gmail.com>
+
+	* aout-target.h (object_p): Formatting.
+	* bfd-in.h (bfd_get_filename): Don't cast to char*.
+	* corefile.c (generic_core_file_matches_executable_p): Constify
+	variables and remove cast.
+	* bfd-in2.h: Regenerate.
+
+2019-09-05  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_check_relocs): Interpret an addend in
+	GOT_PCREL and PLT_PCREL relocs as affecting the value stored
+	in the GOT/PLT entry rather than affecting the offset to that
+	GOI/PLT entry.
+	(ppc64_elf_edit_toc, ppc64_elf_relocate_section): Likewise.
+
+2019-09-05  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (xlate_pcrel_opt): Handle prefix loads and stores
+	in second instruction.
+	(ppc64_elf_relocate_section): Likewise.
+
+2019-09-05  Alan Modra  <amodra@gmail.com>
+
+	PR 24955
+	* libbfd-in.h (bfd_strdup): New inline function.
+	* archive.c (_bfd_get_elt_at_filepos): Use bfd_strdup.  Close
+	bfd on error.
+	* elfcode.h (_bfd_elf_bfd_from_remote_memory): Use bfd_strdup.
+	* opncls.c (bfd_fopen): Use bfd_strdup.  Close fd and stream
+	on error.
+	(bfd_openstreamr): Use bfd_strdup.
+	(bfd_openr_iovec, bfd_openw, bfd_create): Likewise.
+	* plugin.c (try_load_plugin): Use bfd_malloc.
+	* libbfd.h: Regenerate.
+
+2019-09-02  Alan Modra  <amodra@gmail.com>
+
+	PR 11983
+	* dwarf2.c (_bfd_dwarf2_slurp_debug_info): Free debug_filename
+	on success.  Tidy.
+	(read_alt_indirect_string): Likewise.
+	(read_alt_indirect_ref): Likewise.
+
+2019-08-31  Jim Wilson  <jimw@sifive.com>
+
+	PR 23825
+	* elfnn-riscv.c (riscv_elf_create_dynamic_sections): Add SEC_LOAD,
+	SEC_DATA, and SEC_HAS_CONTENTS to .tdata.dyn section.
+
+2019-08-30  Jim Wilson  <jimw@sifive.com>
+
+	* elfnn-riscv.c (riscv_elf_relocate_section): For unresolvable reloc
+	error, call bfd_set_error, set ret to FALSE, and goto out label.
+
+2019-08-30  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24951
+	* archive.c (_bfd_get_elt_at_filepos): Copy BFD_COMPRESS,
+	BFD_DECOMPRESS and BFD_COMPRESS_GABI flags for thin archive.
+
+2019-08-29  Alan Modra  <amodra@gmail.com>
+
+	PR 24697
+	* elf32-ppc.c (ppc_elf_check_relocs): Call bad_shared_reloc
+	when !bfd_link_executable for R_PPC_EMB_SDA2I16 and
+	R_PPC_EMB_SDA2REL.  Don't call bad_shared_reloc for any other
+	reloc.
+
+2019-08-29  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (xlate_pcrel_opt): Add poff parameter.  Allow offset
+	on second insn, return it in poff.
+	(ppc64_elf_relocate_section): Add offset to paddi addend for
+	PCREL_OPT.
+
+2019-08-28  Jim Wilson  <jimw@sifive.com>
+
+	* elfnn-riscv.c (_bfd_riscv_relax_lui): Add check to exclude abs
+	section when setting max_alignment.  Update comment.
+	(_bfd_riscv_relax_pc): Likewise.
+
+2019-08-29  Alan Modra  <amodra@gmail.com>
+
+	PR 24891
+	* bfd.c (struct bfd): Add no_element_cache.
+	* archive.c (_bfd_get_elt_at_filepos): Don't add element to
+	archive cache when no_element_cache.
+	(bfd_generic_archive_p): Set no_element_cache when opening first
+	element to check format.  Close first element too.
+	(do_slurp_bsd_armap): Don't zero ardata->cache here.
+	* bfd-in2.h: Regenerate.
+
+2019-08-24  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_edit_toc): Exclude undefined weak
+	symbols from GOT optimisation.
+
+2019-08-23  Stafford Horne  <shorne@gmail.com>
+
+	* elf32-or1k.c (or1k_elf_finish_dynamic_symbol): Use correct value for
+	PLT GOT entries.
+
+2019-08-23  Nick Clifton  <nickc@redhat.com>
+
+	PR 24456
+	* elf.c (bfd_section_from_shdr): Issue an informative warning
+	message and continue processing other sections after encountering
+	a reloc section for a section which already has other relocs
+	associated with it.
+
+2019-08-23  Alan Modra  <amodra@gmail.com>
+
+	PR 24933
+	* elfxx-x86.c (_bfd_x86_elf_get_synthetic_symtab): Don't exit
+	on error without freeing plts[] contents.
+
+2019-08-22  Dennis Zhang  <dennis.zhang@arm.com>
+
+	* cpu-arm.c: New entries for Cortex-M35P, Cortex-A77, Cortex-A76AE.
+
+2019-08-22  Nick Clifton  <nickc@redhat.com>
+
+	PR 24922
+	* pei-x86_64.c (pex64_xdata_print_uwd_codes): Add checks before
+	reading data from extra records.
+
+2019-08-22  Tamar Christina  <tamar.christina@arm.com>
+
+	PR ld/24601
+	* elfnn-aarch64.c (aarch64_relocate): Handle weak TLS and undefined TLS.
+	Also Pass input_bfd to _bfd_aarch64_elf_resolve_relocation.
+	* elfxx-aarch64.c (_bfd_aarch64_elf_resolve_relocation): Use it.
+	* elfxx-aarch64.h (_bfd_aarch64_elf_resolve_relocation): Emit warning
+	for weak TLS.
+
+2019-08-22  Alan Modra  <amodra@gmail.com>
+
+	* elf32-arm.c (cmse_scan): Don't use ARM_GET_SYM_CMSE_SPCL,
+	instead recognize CMSE_PREFIX in symbol name.
+	(elf32_arm_gc_mark_extra_sections): Likewise.
+	(elf32_arm_filter_cmse_symbols): Don't test ARM_GET_SYM_CMSE_SPCL.
+	(elf32_arm_swap_symbol_in): Don't invoke ARM_SET_SYM_CMSE_SPCL.
+
+2019-08-20  Dennis Zhang  <dennis.zhang@arm.com>
+
+	* cpu-aarch64.c: New entries for Cortex-A34, Cortex-A65,
+	 Cortex-A77, cortex-A65AE, and Cortex-A76AE.
+
+2019-08-20  Tamar Christina  <tamar.christina@arm.com>
+
+	* elf32-arm.c (elf32_thumb2_plt_entry, elf32_arm_plt_thumb_stub,
+	elf32_arm_stub_long_branch_v4t_thumb_thumb,
+	elf32_arm_stub_long_branch_v4t_thumb_arm,
+	elf32_arm_stub_short_branch_v4t_thumb_arm,
+	elf32_arm_stub_long_branch_v4t_thumb_arm_pic,
+	elf32_arm_stub_long_branch_v4t_thumb_thumb_pic,
+	elf32_arm_stub_long_branch_v4t_thumb_tls_pic): Change nop to branch to
+	previous instruction.
+
+2019-08-19  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2.c (_bfd_dwarf2_find_symbol_bias): Create hash table
+	holding symbols.
+
+2019-08-19  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (struct ppc64_elf_obj_tdata): Rename has_gotrel
+	to has_optrel.
+	(struct _ppc64_elf_section_data): Likewise.
+	(ppc64_elf_check_relocs): Set has_optrel for more relocs.
+	(ppc64_elf_edit_toc): Do ha/lo insn checks in GOT loop rather
+	than TOC loop.  Check PLT16 insns too.
+
+2019-08-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24905
+	* elf64-x86-64.c (elf_x86_64_check_relocs): Move PIC check for
+	PC-relative relocations back to ...
+	(elf_x86_64_relocate_section): Here.
+
+2019-08-16  Martin Liska  <mliska@suse.cz>
+
+	PR ld/24912
+	* elflink.c: Report error only for not relocatable.
+	* linker.c (_bfd_generic_link_add_one_symbol): Do not handle
+	here lto_slim_object as it's handled in caller.
+
+2019-08-16  Alan Modra  <amodra@gmail.com>
+
+	* elf32-ppc.c (ppc_elf_relocate_section): Optimize unaligned relocs.
+
+2019-08-15  Jim Wilson  <jimw@sifive.com>
+
+	* elfnn-riscv.c (perform_relocation) <R_RISCV_RVC_LUI>: If
+	RISCV_CONST_HIGH_PART (value) is zero, then convert c.lui instruction
+	to c.li instruction, and use ENCODE_RVC_IMM to set value.
+
+2019-08-15  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2.c (scan_unit_for_symbols): Check for end of CU, not end
+	of section.
+
+2019-08-14  Alan Modra  <amodra@gmail.com>
+
+	PR 24623
+	* dwarf2.c (stash_comp_unit): New function, extracted from..
+	(_bfd_dwarf2_find_nearest_line): ..here.
+	(find_abstract_instance): Parse comp units and decode line info
+	as needed.
+
+2019-08-14  Alan Modra  <amodra@gmail.com>
+
+	* dwarf2.c (comp_unit_maybe_decode_line_info): Declare.
+	(comp_unit_find_nearest_line): Use it here..
+	(_bfd_dwarf2_find_symbol_bias): ..and here.
+
+2019-08-14  Alan Modra  <amodra@gmail.com>
+
+	* dwarf2.c (_bfd_dwarf2_find_nearest_line): Remove addr_size parameter.
+	* libbfd-in.h  (_bfd_dwarf2_find_nearest_line): Update prototype.
+	* coffgen.c (coff_find_nearest_line_with_names): Adjust
+	_bfd_dwarf2_find_nearest_line calls.
+	* elf.c (_bfd_elf_find_nearest_line, _bfd_elf_find_line): Likewise.
+	* elf32-arm.c (elf32_arm_find_nearest_line): Likewise.
+	* elf64-alpha.c (elf64_alpha_find_nearest_line): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_find_nearest_line): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Likewise.
+	* mach-o.c (bfd_mach_o_find_nearest_line): Likewise.
+	* libbfd.h: Regenerate.
+
+2019-08-09  Mihailo Stojanovic  <mihailo.stojanovic@rt-rk.com>
+
+	* elf-bfd.h (struct elf_backend_data): New members.
+	* elflink.c (_bfd_elf_link_create_dynamic_sections): Create
+	.gnu.hash section if necessary.
+	(struct collect_gnu_hash_codes): New member.
+	(elf_gnu_hash_process_symidx): New function name.
+	(elf_renumber_gnu_hash_syms): Ignore local and undefined
+	symbols. Record xlat location for every symbol which should have
+	a .MIPS.xhash entry.
+	(bfd_elf_size_dynamic_sections): Add DT_GNU_HASH dynamic tag to
+	dynamic section if necessary.
+	(GNU_HASH_SECTION_NAME): New define.
+	(bfd_elf_size_dynsym_hash_dynstr): Get .MIPS.xhash section.
+	Update the section size info.
+	* elfxx-mips.c (struct mips_elf_hash_sort_data): New members.
+	(struct mips_elf_link_hash_entry): New member.
+	(mips_elf_link_hash_newfunc): Initialize .MIPS.xhash translation
+	table location.
+	(mips_elf_sort_hash_table): Initialize the pointer to the
+	.MIPS.xhash section.
+	(mips_elf_sort_hash_table_f): Populate the .MIPS.xhash
+	translation table entry with the symbol dynindx.
+	(_bfd_mips_elf_section_from_shdr): Add SHT_MIPS_XHASH.
+	(_bfd_mips_elf_fake_sections): Initialize .MIPS.xhash section
+	info.
+	(_bfd_mips_elf_create_dynamic_sections): Create .MIPS.xhash
+	section.
+	(_bfd_mips_elf_size_dynamic_sections): Add DT_MIPS_XHASH tag to
+	dynamic section.
+	(_bfd_mips_elf_finish_synamic_sections): Add DT_MIPS_XHASH.
+	(_bfd_mips_elf_final_write_processing): Set .MIPS.xhash section
+	sh_link info.
+	(_bfd_mips_elf_get_target_dtag): Get DT_MIPS_XHASH tag.
+	(MIPS_LIBC_ABI_XHASH): New ABI version enum value.
+	(_bfd_mips_post_process_headers): Mark the ABI version as
+	MIPS_LIBC_ABI_XHASH if there exists a .MIPS.xhash section,
+	but not a .hash section.
+	(_bfd_mips_elf_record_xhash_symbol): New function. Record a
+	position in the translation table, associated with the hash
+	entry.
+	* elfxx-mips.h (literal_reloc_p): Define
+	elf_backend_record_xhash_symbol backend hook.
+	* elfxx-target.h: Initialize elf_backend_record_xhash_symbol
+	backend hook.
+
+2019-08-07  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* elf64-bpf.c (bpf_elf_relocate_section): New function.
+	(bpf_elf_insn_disp_reloc): Delete function.
+	(elf_backend_relocate_section): Define.
+
+2019-08-07  Alan Modra  <amodra@gmail.com>
+
+	PR 24644
+	* archive64.c (_bfd_archive_64_bit_slurp_armap): Properly check
+	for overflow in expressions involving nsymz.
+
+2019-08-01  Ilia Diachkov  <ilia.diachkov@optimitech.com>
+
+	* elfnn-riscv.c (_bfd_riscv_relax_lui): Set lui relax safety area to
+	two pages in relro presence.
+
+2019-08-01  Max Filippov  <jcmvbkbc@gmail.com>
+
+	* elf32-xtensa.c (insn_num_slots, get_rsr_lend_opcode)
+	(get_wsr_lbeg_opcode): New functions.
+	(check_loop_aligned): Detect relaxed loops and adjust loop_len
+	and insn_len for the first actual instruction of the loop.
+
+2019-07-30  Alan Modra  <amodra@gmail.com>
+
+	PR 24768
+	* bfd.c (struct bfd): Add lto_slim_object flag.
+	* bfd-in2.h: Regenerate.
+
+2019-07-29  Martin Liska  <mliska@suse.cz>
+
+	PR 24768
+	* archive.c (_bfd_compute_and_write_armap): Come up with
+	report_plugin_err variable.
+	* bfd-in2.h (struct bfd): Add lto_slim_object flag.
+	* elf.c (struct lto_section): New.
+	(_bfd_elf_make_section_from_shdr): Parse content of
+	.gnu_lto_.lto section.
+	* elflink.c: Report error for a missing LTO plugin.
+	* linker.c (_bfd_generic_link_add_one_symbol): Likewise.
+
+2019-07-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24857
+	PR 24339
+	* elflink.c (elf_link_add_object_symbols): Report an informative
+	error on finding local symbols with index equal or greater than
+	symbol table sh_info.  Correct comment.  Allow such symbols in
+	dynamic objects.  Abort on NULL section for symbol.
+
+2019-07-26  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (struct output_elf_obj_tdata): Delete "linker" field.
+	(elf_linker): Don't define.
+	* elflink.c (bfd_elf_final_link): Don't set elf_linker.
+
+2019-07-25  YunQiang Su  <syq@debian.org>
+
+	PR 24832
+	* elfxx-mips.c (mips_set_isa_flags): Default to MIPS 3 for 64-bit
+	mips inputs.
+
+2019-07-24  Claudiu Zissulescu  <claziss@synopsys.com>
+
+	* elf32-arc.c (bfd_get_32_me): Add a small description, fix
+	formating.
+	(reloc_type_to_name): Fix formating.
+	(arc_elf_object_p): Likewise.
+	(debug_arc_reloc): Likewise.
+	(arc_do_relocation): Likewise.
+
+2019-07-24  Claudiu Zissulescu  <claziss@synopsys.com>
+
+	* elf32-arc.c (bfd_get_32_me): New function.
+	(bfd_put_32_me): Likewise.
+	(arc_elf_relax_section): Likewise.
+	(bfd_elf32_bfd_relax_section): Define.
+
+2019-07-24  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (struct elf_backend_data): Return bfd_boolean from
+	elf_backend_final_write_processing, don't pass linker arg.
+	(_bfd_elf_final_write_processing): Update prototype.
+	* elf.c (_bfd_elf_write_object_contents): Adjust call.
+	(_bfd_elf_final_write_processing): Return error on incompatible
+	OSABI and has_gnu_osabi.  Remove linker arg.
+	* elf-nacl.h (nacl_final_write_processing): Update prototype.
+	* elf-vxworks.h (elf_vxworks_final_write_processing): Likewise.
+	* elfxx-mips.h (_bfd_mips_final_write_processing): Likewise.
+	(_bfd_mips_elf_final_write_processing): Likewise.
+	* elf-hppa.h (elf_hppa_final_write_processing): Return status
+	and remove linker arg.
+	* elf-m10300.c (_bfd_mn10300_elf_final_write_processing): Likewise.
+	* elf-nacl.c (nacl_final_write_processing): Likewise.
+	* elf-vxworks.c (elf_vxworks_final_write_processing): Likewise.
+	* elf32-arc.c (arc_elf_final_write_processing): Likewise.
+	* elf32-arm.c (arm_final_write_processing): Likewise.
+	(elf32_arm_final_write_processing): Likewise.
+	(elf32_arm_nacl_final_write_processing): Likewise.
+	(elf32_arm_vxworks_final_write_processing): Likewise.
+	* elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise.
+	* elf32-bfin.c (elf32_bfin_final_write_processing): Likewise.
+	* elf32-cr16.c (_bfd_cr16_elf_final_write_processing): Likewise.
+	* elf32-cris.c (cris_elf_final_write_processing): Likewise.
+	* elf32-h8300.c (elf32_h8_final_write_processing): Likewise.
+	* elf32-lm32.c (lm32_elf_final_write_processing): Likewise.
+	* elf32-m32r.c (m32r_elf_final_write_processing): Likewise.
+	* elf32-m68k.c (elf_m68k_final_write_processing): Likewise.
+	* elf32-mips.c (mips_vxworks_final_write_processing): Likewise.
+	* elf32-msp430.c (bfd_elf_msp430_final_write_processing): Likewise.
+	* elf32-nds32.c (nds32_elf_final_write_processing): Likewise.
+	* elf32-or1k.c (or1k_elf_final_write_processing): Likewise.
+	* elf32-pj.c (pj_elf_final_write_processing): Likewise.
+	* elf32-ppc.c (ppc_final_write_processing): Likewise.
+	(ppc_elf_final_write_processing): Likewise.
+	(ppc_elf_vxworks_final_write_processing): Likewise.
+	* elf32-sparc.c (sparc_final_write_processing): Likewise.
+	(elf32_sparc_final_write_processing): Likewise.
+	(elf32_sparc_vxworks_final_write_processing): Likewise.
+	* elf32-v850.c (v850_elf_final_write_processing): Likewise.
+	* elf32-xc16x.c (elf32_xc16x_final_write_processing): Likewise.
+	* elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise.
+	* elf64-ia64-vms.c (elf64_vms_final_write_processing): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_final_write_processing): Likewise.
+	* elfxx-mips.c (_bfd_mips_final_write_processing): Likewise.
+	(_bfd_mips_elf_final_write_processing): Likewise.
+
+2019-07-24  Alan Modra  <amodra@gmail.com>
+
+	* elf-vxworks.c (elf_vxworks_final_write_processing): Don't return
+	early.
+	* elf32-arc.c (arc_elf_final_write_processing): Likewise.
+	* elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise.
+
+2019-07-24  Alan Modra  <amodra@gmail.com>
+
+	* elf32-visium.c (visium_elf_post_process_headers): Don't set
+	EI_OSABI header byte here.
+	(ELF_OSABI): Define.
+
+2019-07-23  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (enum elf_gnu_osabi): Add elf_gnu_osabi_mbind.
+	* elf.c (_bfd_elf_make_section_from_shdr): Set elf_gnu_osabi_mbind.
+	(get_program_header_size): Formatting.  Only test SH_GNU_MBIND
+	when elf_gnu_osabi_mbind is set.
+	(_bfd_elf_map_sections_to_segments): Likewise.
+	(_bfd_elf_init_private_section_data): Likewise.
+	(_bfd_elf_final_write_processing): Update comment.
+	* elf64-hppa.c (elf64_hppa_special_sections): Move .tbss entry.
+	(elf_backend_special_sections): Define without .tbss for linux.
+
+2019-07-23  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (enum elf_gnu_osabi): Rename from elf_gnu_symbols.
+	Remove none, any, all enums.
+	(struct elf_obj_tdata): Rename has_gnu_symbols field to has_gnu_osabi.
+	(_bfd_elf_final_write_processing): Declare.
+	* elf.c (_bfd_elf_write_object_contents): Unconditionally call
+	elf_backend_final_write_processing.
+	(_bfd_elf_post_process_headers): Move body of function to..
+	(_bfd_elf_final_write_processing): ..here, but set EI_OSABI byte
+	only when not already set.  Adjust for rename.
+	* elfxx-target.h (elf_backend_final_write_processing): Default to
+	_bfd_elf_final_write_processing.
+	* elf-hppa.h (elf_hppa_final_write_processing): Call
+	_bfd_elf_final_write_processing.
+	* elf-m10300.c (_bfd_mn10300_elf_final_write_processing): Likewise.
+	* elf-nacl.c (nacl_final_write_processing): Likewise.
+	* elf-vxworks.c (elf_vxworks_final_write_processing): Likewise.
+	* elf32-arc.c (arc_elf_final_write_processing): Likewise.
+	* elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise.
+	* elf32-bfin.c (elf32_bfin_final_write_processing): Likewise.
+	* elf32-cr16.c (_bfd_cr16_elf_final_write_processing): Likewise.
+	* elf32-cris.c (cris_elf_final_write_processing): Likewise.
+	* elf32-h8300.c (elf32_h8_final_write_processing): Likewise.
+	* elf32-lm32.c (lm32_elf_final_write_processing): Likewise.
+	* elf32-m32r.c (m32r_elf_final_write_processing): Likewise.
+	* elf32-m68k.c (elf_m68k_final_write_processing): Likewise.
+	* elf32-msp430.c (bfd_elf_msp430_final_write_processing): Likewise.
+	* elf32-nds32.c (nds32_elf_final_write_processing): Likewise.
+	* elf32-or1k.c (or1k_elf_final_write_processing): Likewise.
+	* elf32-pj.c (pj_elf_final_write_processing): Likewise.
+	* elf32-v850.c (v850_elf_final_write_processing): Likewise.
+	* elf32-xc16x.c (elf32_xc16x_final_write_processing): Likewise.
+	* elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise.
+	* elf64-ia64-vms.c (elf64_vms_final_write_processing): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_final_write_processing): Likewise.
+	* elf32-arm.c (arm_final_write_processing): Split out from..
+	(elf32_arm_final_write_processing): ..here.  Call
+	_bfd_elf_final_write_processing.
+	(elf32_arm_nacl_final_write_processing): Adjust.
+	* elfxx-mips.c (_bfd_mips_final_write_processing): Split out from..
+	(_bfd_mips_elf_final_write_processing): ..here.  Call
+	_bfd_elf_final_write_processing.
+	* elfxx-mips.h (_bfd_mips_final_write_processing): Declare.
+	* elf32-mips.c (mips_vxworks_final_write_processing): Adjust.
+	* elf32-ppc.c (ppc_final_write_processing): Split out from..
+	(ppc_elf_final_write_processing): ..here.  Call
+	_bfd_elf_final_write_processing.
+	(ppc_elf_vxworks_final_write_processing): Adjust.
+	* elf32-sparc.c (sparc_final_write_processing): Split out from..
+	(elf32_sparc_final_write_processing): ..here.  Call
+	_bfd_elf_final_write_processing.
+	(elf32_sparc_vxworks_final_write_processing): Adjust.
+	* elf32-d10v.c (elf_backend_final_write_processing): Don't define.
+	* elf32-d30v.c (elf_backend_final_write_processing): Don't define.
+	* elf32-m68hc11.c (elf_backend_final_write_processing): Don't define.
+	* elf32-m68hc12.c (elf_backend_final_write_processing): Don't define.
+	* elf32-s12z.c (elf_backend_final_write_processing): Don't define.
+	* elf32-i386.c (elf_i386_check_relocs): Don't set has_gnu_symbols.
+	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
+	* elflink.c (elf_link_add_object_symbols): Likewise.
+	(elf_link_output_symstrtab): Set has_gnu_osabi for symbols here
+	instead.
+
+2019-07-23  Omar Majid  <omajid@redhat.com>
+
+	* coffcode.h (coff_set_arch_mach_hook): Handle I386_APPLE_MAGIC,
+	I386_FREEBSD_MAGIC, I386_LINUX_MAGIC, I386_NETBSD_MAGIC,
+	AMD64_APPLE_MAGIC, AMD64_FREEBSD_MAGIC, AMD64_LINUX_MAGIC,
+	AMD64_NETBSD_MAGIC.
+	* peXXigen.c: Add comment about source of .NET magic numbers.
+
+2019-07-19  Alan Modra  <amodra@gmail.com>
+
+	* reloc.c (BFD_RELOC_PPC64_TPREL34, BFD_RELOC_PPC64_DTPREL34),
+	(BFD_RELOC_PPC64_GOT_TLSGD34, BFD_RELOC_PPC64_GOT_TLSLD34),
+	(BFD_RELOC_PPC64_GOT_TPREL34, BFD_RELOC_PPC64_GOT_DTPREL34),
+	(BFD_RELOC_PPC64_TLS_PCREL): New pcrel tls relocs.
+	* elf64-ppc.c (ppc64_elf_howto_raw): Add howtos for pcrel tls relocs.
+	(ppc64_elf_reloc_type_lookup): Translate pcrel tls relocs.
+	(must_be_dyn_reloc, dec_dynrel_count): Add R_PPC64_TPREL64.
+	(ppc64_elf_check_relocs): Support pcrel tls relocs.
+	(ppc64_elf_tls_optimize, ppc64_elf_relocate_section): Likewise.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+
+2019-07-18  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_relocate_section): Don't bother selecting
+	a TLS section symbol for edited relocs.  Tighten TLS symbol/reloc
+	match test.
+
+2019-07-18  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (TLS_EXPLICIT): Define as 256.
+	(ppc64_elf_check_relocs): Don't store TLS_EXPLICIT even if char
+	is more than 8 bits.
+	(ppc64_elf_tls_optimize): Likewise.  Make tls_set, tls_clear, and
+	tls_type vars unsigned int.
+	(ppc64_elf_relocate_section): Use r_type rather than TLS_EXPLICIT
+	to select r_type edit.
+
+2019-07-18  Alan Modra  <amodra@gmail.com>
+
+	* elf32-ppc.c (TLS_GDIE): Rename from TLS_TPRELGD throughout file.
+	Correct comment.
+	* elf64-ppc.c (TLS_GDIE): Likewise.
+
+2019-07-18  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_tls_optimize): Correct test for allowed
+	range of tp-relative offsets.
+
+2019-07-15  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (_bfd_elf_fix_symbol_flags): If the def for an
+	alias is no longer bfd_link_hash_defined, clear the alias.
+
+2019-07-13  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (_bfd_elf_omit_section_dynsym_default): Don't keep
+	tls_sec.
+	(_bfd_elf_init_1_index_section): Prefer not using TLS sections.
+	(_bfd_elf_init_2_index_sections): Likewise.
+	* elf64-ppc.c (ppc64_elf_relocate_section): When emitting dynamic
+	relocations for local TLS symbols, use STN_UNDEF as the relocation
+	symbol.
+	* elf32-ppc.c (ppc_elf_relocate_section): Likewise, and don't
+	leave TLS symbol value in the addend.
+
+2019-07-08  Alan Modra  <amodra@gmail.com>
+
+	PR 24785
+	* elf32-ppc.c (_bfd_elf_ppc_set_arch): Sanity check .PPC.EMB.apuinfo
+	size before reading first word.
+
+2019-07-02  Nick Clifton  <nickc@redhat.com>
+
+	PR 24717
+	* elf.c (is_debuginfo_file): New function.
+	(assign_file_positions_for_non_load_sections): Do not warn about
+	allocated sections outside of loadable segments if they are found
+	in a debuginfo file.
+	* elf-bfd.h (is_debuginfo_file): Prototype.
+
+2019-07-02  Nick Clifton  <nickc@redhat.com>
+
+	PR 24753
+	* compress.c (bfd_get_full_section_contents): Do not complain
+	about linker created sections that are larger than the file size.
+
+2019-07-02  Christophe Lyon  <christophe.lyon@linaro.org>
+
+	* bfd/elf32-arm.c (CMSE_STUB_NAME): New define.
+	(elf32_arm_get_stub_entry): Do not try to emit long-branch stubs
+	for CMSE stubs.
+	(arm_dedicated_stub_output_section_name): Use CMSE_STUB_NAME.
+
+2019-07-02  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+
+	* elf32-arm.c (elf32_arm_gc_mark_extra_sections): Mark debug
+	sections when .text section contain secure entry functions
+	is marked.
+
+2019-07-01  Nick Clifton  <nickc@redhat.com>
+
+	PR 23839
+	* elf32-arm.c (elf32_arm_update_relocs): Do not include the
+	section VMA in the offset used to update exidx relocs.
+
+2019-06-28  Nick Clifton  <nickc@redhat.com>
+
+	PR 24708
+	* elf.c (_bfd_elf_slurp_version_tables): Check for an excessively
+	large version reference section.
+	* compress.c (bfd_get_full_section_contents): Check for an
+	uncompressed section whose size is larger than the file size.
+
+2019-06-28  Alan Modra  <amodra@gmail.com>
+
+	* format.c (bfd_check_format_matches): Don't match plugin target
+	if another target matches.  Expand comment.
+	* targets.c (_bfd_target_vector): Move plugin_vec after all other
+	non-corefile targets, outside !SELECT_VECS.
+	* config.bfd: Don't handle targ=plugin here.
+	* configure.ac: Don't add plugin to enable_targets or handle in
+	target loop setting selvecs and other target vars.
+	* configure: Regenerate.
+
+2019-06-26  Nick Clifton  <nickc@redhat.com>
+
+	PR 24703
+	* mach-o-arm.c (bfd_mach_o_arm_canonicalize_one_reloc): Add error
+	messages for failures.
+	* mach-o.c (bfd_mach_o_canonicalize_relocs): Set an bfd error code
+	if returning an error value.
+
+2019-06-25  Jan Beulich  <jbeulich@suse.com>
+
+	* elf-properties.c (elf_find_and_remove_property): Rename last
+	parameter. Mention it in comment.
+
+2019-06-24  Ilia Diachkov  <ilia.diachkov@optimitech.com>
+
+	* elfnn-riscv.c (_bfd_riscv_relax_lui): Delete early exit when
+	SEC_MERGE or SEC_CODE flags are set.
+	(_bfd_riscv_relax_section): New local symtype.  Set sym_sec and
+	symtype consistently.  Don't include sec_addr (sym_sec) in symval.
+	Add check for SEC_INFO_TYPE_MERGE and call _bfd_merged_section_offset.
+	Add sec_addr (sym_sec) after handling merge sections.
+
+2019-06-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24721
+	* elf-properties.c (elf_merge_gnu_property_list): Remove the
+	property after reporting property removal.
+
+2019-06-23  Alan Modra  <amodra@gmail.com>
+
+	PR 24704
+	* elf64-ppc.c (R_PPC64_GOT16_DS): Don't set has_gotrel.
+	(ppc64_elf_edit_toc): Don't remove R_PPC64_GOT16_DS got entries.
+	Reduce range of offsets allowed for other GOT relocs.
+
+2019-06-23  Alan Modra  <amodra@gmail.com>
+
+	PR 24689
+	* elfcode.h (elf_object_p): Warning fix.
+
+2019-06-21  Alan Modra  <amodra@gmail.com>
+
+	PR 24689
+	* elfcode.h (elf_object_p): Check type of e_shstrndx section.
+
+2019-06-19  Alan Modra  <amodra@gmail.com>
+
+	PR 24697
+	* elf32-ppc.c (ppc_elf_relocate_section): Don't read insn for
+	R_PPC_EMB_RELSDA.  Mask low bit of R_PPC_EMB_SDA21 r_offset.
+
+2019-06-19  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_inline_plt): Correct st_other test for
+	functions that require r2 valid to use local entry.
+	(ppc64_elf_size_stubs, ppc64_elf_relocate_section): Likewise.
+
+2019-06-17  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* elfnn-aarch64.c (elfNN_aarch64_allocate_local_dynrelocs): Remove.
+	(elfNN_aarch64_size_dynamic_sections): Remove loc_hash_table traversal
+	with elfNN_aarch64_allocate_local_dynrelocs.
+
+2019-06-14  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* elfnn-aarch64.c: Enable MOVW_PREL relocs for ELF32.
+
+2019-06-14  Alan Modra  <amodra@gmail.com>
+
+	* Makefile.in: Regenerate.
+	* configure: Regenerate.
+
+2019-06-14  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c: Fix comments involving paddi.
+
+2019-06-12  Adam Lackorzymski  <adam@os.inf.tu-dresden.de>
+
+	PR 24643
+	* elf32-arm.c (arm_elf_find_function): Fail if the symol table is
+	absent, or the bfd is not in the ELF formart.
+	* elfnn-aarch64.c (aarch64_elf_find_function): Likewise.
+
+2019-06-10  Christos Zoulas  <christos@zoulas.com>
+
+	PR 24650
+	* elf.c (elfcore_make_auxv_note_section): New function.
+	(elfcore_grok_note): Use it.
+	(elfcore_grok_freebsd_note): Likewise.
+	(elfcore_grok_openbsd_note): Likewise.
+	(elfcore_grok_netbsd_note): Likewise.  Plus add support for
+	NT_NETBSDCORE_AUXV notes.
+
+2019-06-06  Sudakshina Das  <sudi.das@arm.com>
+
+	* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Set
+	alignment of the new gnu property section.
+
+2019-06-06  Sudakshina Das  <sudi.das@arm.com>
+
+	* bfd-in.h: Change comment.
+	* bfd-in2.h: Regenerate.
+	* elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update warning.
+	* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties):
+	Likwise.
+
+2019-05-28  Faraz Shahbazker  <fshahbazker@wavecomp.com>
+
+	* elfxx-mips.c (mips_elf_calculate_relocation) <R_MIPS_PCHI16>:
+	Remove overflow check.
+
+2019-05-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24596
+	* cofflink.c (coff_link_check_archive_element): Don't assume
+	element is a coff object file after calling add_archive_element.
+
+2019-05-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24596
+	* elf32-microblaze.c (microblaze_elf_finish_dynamic_sections): Don't
+	attempt to set sh_entsize for excluded PLT section.
+
+2019-05-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24596
+	* elf64-alpha.c (elf64_alpha_relocate_section): Don't attempt
+	to emit R_ALPHA_GOTTPREL in PIEs, for which no space is
+	allocated in alpha_dynamic_entries_for_reloc.
+
+2019-05-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24596
+	* elf32-lm32.c (lm32_elf_finish_dynamic_sections): Don't segfault
+	on NULL output_section.
+	* elflink.c (elf_final_link_free): Don't free -1 symshndxbuf.
+
+2019-05-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24596
+	* elf32-m68k.c (elf_m68k_get_got_entry): Don't create a new
+	entry when MUST_FIND.  Abort when MUST_FIND not found.
+	(elf_m68k_get_bfd2got_entry): Likewise.
+	(elf_m68k_relocate_section): Remove now useless assert.
+
+2019-05-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24596
+	* elf64-hppa.c (elf64_hppa_finalize_dynreloc): Get the output bfd
+	from bfd_link_info, not an output section owner.
+	(elf64_hppa_finish_dynamic_symbol, elf64_hppa_finalize_opd): Likewise.
+	(elf_hppa_final_link_relocate): Likewise.
+
+2019-05-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24596
+	* aout-tic30.c (MY_bfd_final_link): Don't segfault on missing
+	create_object_symbols_section, obj_textsec, obj_datasec or
+	obj_bsssec.  Fix other errors in placement.
+	* config.bfd: Obsolete tic30-aout.
+
+2019-05-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24596
+	* dwarf2.c (save_section_vma, section_vma_same): Check for NULL
+	end of section list as well as section_count.
+	* xcofflink.c (xcoff_link_add_symbols): Fix temporarily changed
+	section list before returning error.
+
+2019-05-27  Alan Modra  <amodra@gmail.com>
+
+	* elf.c (bfd_elf_set_group_contents): Exit on zero size section.
+
+2019-05-27  Alan Modra  <amodra@gmail.com>
+
+	PR 24596
+	* linker.c (_bfd_generic_link_output_symbols): Heed BSF_KEEP.
+
+2019-05-24  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* elfnn-aarch64.c (elfNN_aarch64_merge_symbol_attribute): New function.
+	(struct elf_aarch64_link_hash_table): Add variant_pcs member.
+	(elfNN_aarch64_allocate_dynrelocs): Update variant_pcs.
+	(elfNN_aarch64_size_dynamic_sections): Add DT_AARCH64_VARIANT_PCS.
+	(elf_backend_merge_symbol_attribute): Define.
+
+2019-05-24  Alan Modra  <amodra@gmail.com>
+
+	* po/SRC-POTFILES.in: Regenerate.
+
+2019-05-24  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c: Comment on powerxx _notoc stub variants.
+	(LI_R11_0, LIS_R11, ORI_R11_R11_0, SLDI_R11_R11_34): Define.
+	(PADDI_R12_PC, PLD_R12_PC, D34, HA34): Define.
+	(struct ppc_link_hash_table): Add powerxx_stubs.
+	(ppc64_elf_check_relocs): Set powerxx_stubs.
+	(build_powerxx_offset, size_powerxx_offset),
+	(num_relocs_for_powerxx_offset),
+	(emit_relocs_for_powerxx_offset): New functions.
+	(plt_stub_size): Size powerxx stubs.
+	(ppc_build_one_stub): Emit powerxx stubs.
+	(ppc_size_one_stub): Size powerxx stubs.  Omit .eh_frame for
+	powerxx stubs.
+
+2019-05-24  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_check_relocs): Set has_gotrel for
+	R_PPC64_GOT_PCREL34.
+	(xlate_pcrel_opt): New function.
+	(ppc64_elf_edit_toc): Handle R_PPC64_GOT_PCREL34.
+	(ppc64_elf_relocate_section): Edit GOT indirect to GOT relative
+	for R_PPC64_GOT_PCREL34.  Implement R_PPC64_PCREL_OPT optimisation.
+
+2019-05-24  Alan Modra  <amodra@gmail.com>
+
+	* reloc.c (BFD_RELOC_PPC64_D34, BFD_RELOC_PPC64_D34_LO),
+	(BFD_RELOC_PPC64_D34_HI30, BFD_RELOC_PPC64_D34_HA30),
+	(BFD_RELOC_PPC64_PCREL34, BFD_RELOC_PPC64_GOT_PCREL34),
+	(BFD_RELOC_PPC64_PLT_PCREL34),
+	(BFD_RELOC_PPC64_ADDR16_HIGHER34, BFD_RELOC_PPC64_ADDR16_HIGHERA34),
+	(BFD_RELOC_PPC64_ADDR16_HIGHEST34, BFD_RELOC_PPC64_ADDR16_HIGHESTA34),
+	(BFD_RELOC_PPC64_REL16_HIGHER34, BFD_RELOC_PPC64_REL16_HIGHERA34),
+	(BFD_RELOC_PPC64_REL16_HIGHEST34, BFD_RELOC_PPC64_REL16_HIGHESTA34),
+	(BFD_RELOC_PPC64_D28, BFD_RELOC_PPC64_PCREL28): New reloc enums.
+	* elf64-ppc.c (PNOP): Define.
+	(ppc64_elf_howto_raw): Add reloc howtos for new relocations.
+	(ppc64_elf_reloc_type_lookup): Translate new bfd reloc numbers.
+	(ppc64_elf_ha_reloc): Adjust addend for highera34 and highesta34
+	relocs.
+	(ppc64_elf_prefix_reloc): New function.
+	(struct ppc_link_hash_table): Add notoc_plt.
+	(is_branch_reloc): Add R_PPC64_PLTCALL_NOTOC.
+	(is_plt_seq_reloc): Add R_PPC64_PLT_PCREL34,
+	R_PPC64_PLT_PCREL34_NOTOC, and R_PPC64_PLTSEQ_NOTOC.
+	(ppc64_elf_check_relocs): Handle pcrel got and plt relocs.  Set
+	has_pltcall for section on seeing R_PPC64_PLTCALL_NOTOC.  Handle
+	possible need for dynamic relocs on non-pcrel powerxx relocs.
+	(dec_dynrel_count): Handle non-pcrel powerxx relocs.
+	(ppc64_elf_inline_plt): Handle R_PPC64_PLTCALL_NOTOC.
+	(toc_adjusting_stub_needed): Likewise.
+	(ppc64_elf_tls_optimize): Handle R_PPC64_PLTSEQ_NOTOC.
+	(ppc64_elf_relocate_section): Handle new powerxx relocs.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+
+2019-05-23  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* config.bfd (targ_cpu): Process bpf-*-none only if BFD64.
+	* configure.ac: Set target_size=64 for bpf_elf64_le_vec and
+	bpf_elf64_be_vec.
+	* configure: Regenerate.
+
+2019-05-23  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* configure: Regenerated.
+	* Makefile.am (ALL_MACHINES): Add cpu-bpf.lo.
+	(ALL_MACHINES_CFILES): Add cpu-bpf.c.
+	(BFD64_BACKENDS): Add elf64-bpf.lo.
+	(BFD64_BACKENDS_CFILES): Add elf64-bpf.c.
+	* Makefile.in (SOURCE_HFILES): Regenerate.
+	* config.bfd (targ_cpu): Handle bpf-*-* targets.
+	* cpu-bpf.c: New file.
+	* elf64-bpf.c: Likewise.
+	* targets.c (_bfd_target_vector): Add bpf_elf64_be_vec and
+	bpf_elf64_le_vec.
+	* archures.c: Define architecture bfd_arch_bpf and machine
+	bfd_arch_bpf.
+	* reloc.c: Define BFD relocations used by the BPF target.
+	* bfd-in2.h: Regenerated.
+	* libbfd.h: Likewise.
+
+2019-05-22  Alan Modra  <amodra@gmail.com>
+
+	* elf32-arm.c (arm_allocate_glue_section_space): Clear section
+	contents.
+
+2019-05-22  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (_bfd_vms_write_etir): Don't attempt further
+	processing on "size error in section".
+
+2019-05-22  Alan Modra  <amodra@gmail.com>
+
+	* som.c (som_bfd_free_cached_info): Call
+	_bfd_generic_close_and_cleanup.
+
+2019-05-21  Faraz Shahbazker  <fshahbazker@wavecomp.com>
+
+	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Generate error
+	for TLS_TPREL_HI16(/LO16) relocations in shared library.
+
+2019-05-21  Faraz Shahbazker  <fshahbazker@wavecomp.com>
+
+	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Add NULL pointer
+	checks.  Search the RELA table for n64 relocations.
+
+2019-05-21  Matthew Fortune  <matthew.fortune@mips.com>
+	    Faraz Shahbazker  <fshahbazker@wavecomp.com>
+
+	* elfxx-mips.c (LA25_BC): New macro.
+	(mips_elf_link_hash_table)<compact_branches>: New field.
+	(STUB_JALRC): New macro.
+	(mipsr6_o32_exec_plt0_entry_compact): New array.
+	(mipsr6_n32_exec_plt0_entry_compact): Likewise.
+	(mipsr6_n64_exec_plt0_entry_compact): Likewise.
+	(mipsr6_exec_plt_entry_compact): Likewise.
+	(mips_elf_create_la25_stub): Use BC instead of J for stubs
+	when compact_branches is true.
+	(_bfd_mips_elf_finish_dynamic_symbol): Choose the compact
+	PLT for MIPSR6 with compact_branches.  Do not reorder the
+	compact branches PLT.  Switch the lazy stub for MIPSR6
+	with compact_branches to use JALRC.
+	(mips_finish_exec_plt): Choose the compact PLT0 for MIPSR6
+	when compact_branches is true.
+	(_bfd_mips_elf_compact_branches): New function.
+	* elfxx-mips.h (_bfd_mips_elf_compact_branches): New prototype.
+
+2019-05-21  Tamar Christina  <tamar.christina@arm.com>
+
+	PR ld/24373
+	* elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub):
+	Fix print formatter.
+
+2019-05-21  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+
+	PR 24460
+	* elf32-arm.c (get_value_helper): Remove.
+	(elf32_arm_final_link_relocate): Fix branch future relocations.
+
+2019-05-21  Tamar Christina  <tamar.christina@arm.com>
+
+	PR ld/24373
+	* bfd-in.h (enum erratum_84319_opts): New
+	(bfd_elf64_aarch64_set_options, bfd_elf32_aarch64_set_options): Change
+	int to enum erratum_84319_opts.
+	* bfd-in2.h: Regenerate.
+	* elfnn-aarch64.c (struct elf_aarch64_link_hash_table): Change
+	fix_erratum_843419 to use new enum, remove fix_erratum_843419_adr.
+	(_bfd_aarch64_add_stub_entry_after): Conditionally create erratum stub.
+	(aarch64_size_one_stub): Conditionally size erratum 843419 stubs.
+	(_bfd_aarch64_resize_stubs): Amend comment.
+	(elfNN_aarch64_size_stubs): Don't generate stubs when no workaround
+	requested.
+	(bfd_elfNN_aarch64_set_options): Use new fix_erratum_843419 enum.
+	(_bfd_aarch64_erratum_843419_branch_to_stub): Implement selection of
+	erratum workaround.
+	(clear_erratum_843419_entry): Update erratum conditional.
+
+2019-05-21  Senthil Kumar Selvaraj  <senthilkumar.selvaraj@microchip.com>
+
+	PR ld/24571
+	* bfd/elf32-avr.c (elf32_avr_relax_section): Adjust range check
+	when computing distance_short_enough.
+
+2019-05-21  Senthil Kumar Selvaraj  <senthilkumar.selvaraj@microchip.com>
+
+	PR ld/24564
+	* bfd/elf32-avr.c (avr_relative_distance_considering_wrap_around):
+	Wrap around even if distance equals avr_pc_wrap_around.
+
+2019-05-20  Nick Clifton  <nickc@redhat.com>
+
+	* po/fr.po: Updated French translation.
+
+2019-05-16  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+
+	* elf32-arm.c (elf32_arm_merge_eabi_attributes): Add case for Tag_MVE_arch.
+
+2019-05-16  Alan Modra  <amodra@gmail.com>
+
+	* elf32-arm.c (elf32_arm_write_section): Revert last change.
+
+2019-05-15  Alan Modra  <amodra@gmail.com>
+
+	* elf32-arm.c (elf32_arm_write_section): Don't leave
+	error case of STM32L4XX_ERRATUM_BRANCH_TO_VENEER with
+	unitialised section contents.
+
+2019-05-14  Jamey Hicks  <jamey.hicks@gmail.com>
+
+	PR 19921
+	* verilog.c: (VerilogDataWidth): New variable.
+	(verilog_write_record): Emit bytes in VerilogDataWidth bundles.
+
+2019-05-08  Nick Clifton  <nickc@redhat.com>
+
+	PR 24523
+	* elf32-m68k.c (elf32_m68k_merge_private_bfd_data): Return TRUE
+	rather than FALSE if encountering a non-ELF file.
+
+2019-05-06  Alan Modra  <amodra@gmail.com>
+
+	* elf32-pj.c (pj_elf_reloc): Don't report undefined weak as an error.
+
+2019-05-06  Alan Modra  <amodra@gmail.com>
+
+	* reloc.c (BFD_RELOC_PPC64_TPREL16_HIGH, BFD_RELOC_PPC64_TPREL16_HIGHA),
+	(BFD_RELOC_PPC64_DTPREL16_HIGH, BFD_RELOC_PPC64_DTPREL16_HIGHA):
+	Sort before BFD_RELOC_PPC64_DTPREL16_HIGHESTA entry.
+	* libbfd.h: Regenerate.
+	* bfd-in2.h: Regenerate.
+
+2019-05-04  Alan Modra  <amodra@gmail.com>
+
+	PR 24511
+	* syms.c (coff_section_type): Only allow '.', '$' and numeric
+	following the standard section names.
+	(bfd_decode_symclass): Prioritize section flag tests in
+	decode_section_type before name tests in coff_section_type.
+	* plugin.c (bfd_plugin_canonicalize_symtab): Init fake_section
+	and fake_common_section using BFD_FAKE_SECTION.  Use "fake" as
+	their names and choose standard .text section flags for
+	fake_section.
+
+2019-05-02  Nick Clifton  <nickc@redhat.com>
+
+	PR 24493
+	* coffcode.h (styp_to_sec_flags): Treat .gnu.debuglink and
+	.gnu.debugaltlink sections as debugging sections.
+
+2019-04-30  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (struct ppc64_elf_obj_tdata): Add has_gotrel.
+	(struct _ppc64_elf_section_data): Likewise.
+	(ppc64_elf_check_relocs): Set above fields.
+	(ppc64_elf_edit_toc): Add a pass over GOT relocs.
+	(ppc64_elf_relocate_section): Edit GOT indirect to GOT relative
+	when possible.
+
+2019-04-26  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24486
+	* elflink.c (elf_link_output_extsym): Don't complain undefined
+	weak dynamic reference.
+
+2019-04-25  Sudakshina Das  <sudi.das@arm.com>
+
+	* elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): Remove.
+	(PLT_BTI_TLSDESC_ENTRY_SIZE): Remove.
+	(PLT_PAC_ENTRY_SIZE, PLT_BTI_PAC_ENTRY_SIZE): Remove.
+	(PLT_BTI_SMALL_ENTRY_SIZE, PLT_PAC_SMALL_ENTRY_SIZE): Update.
+	(elfNN_aarch64_small_plt0_pac_entry): Remove.
+	(elfNN_aarch64_small_plt0_bti_pac_entry): Remove.
+	(elfNN_aarch64_small_plt0_bti_entry): Update.
+	(elfNN_aarch64_small_plt_bti_entry): Update.
+	(elfNN_aarch64_small_plt_pac_entry): Update.
+	(elfNN_aarch64_tlsdesc_small_plt_bti_entry): Update.
+	(setup_plt_values): Setup new entries.
+	(elfNN_aarch64_finish_dynamic_sections): Remove size change.
+	(elfNN_aarch64_plt_sym_val): Likewise.
+
+2019-04-22  Jim Wilson  <jimw@sifive.com>
+
+	* elfnn-riscv.c (PRSTATUS_SIZE) [ARCH_SIZE==32]: Change from 0 to 204.
+
+2019-04-19  Alan Modra  <amodra@gmail.com>
+
+	* elf32-s12z.c (elf_backend_can_gc_sections): Don't define
+
+2019-04-17  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_need_pic): Suggest -fPIE when not
+	building shared object.
+	* elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Likewise.
+
+2019-04-17  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24458
+	* elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): Also check x86
+	linker_def.
+
+2019-04-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+	* reloc.c (BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM): New internal
+	relocation.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Likewise.
+
+2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+
+	* reloc.c (BFD_RELOC_ARM_THUMB_LOOP12): New.
+	* bfd-in2.h: Regenerated.
+	* libbfd.h: Regenerated.
+
+2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+
+	* reloc.c (BFD_RELOC_THUMB_PCREL_BFCSEL): New relocation.
+	* bfd-in2.h: Regenerated.
+	* libbfd.h: Likewise.
+
+2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+
+	* reloc.c (BFD_RELOC_ARM_THUMB_BF13): New.
+	* bfd-in2.h: Regenerated.
+	* libbfd.h: Regenerated.
+	* elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF13.
+	(elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF13
+	and R_ARM_THM_BF12 together.
+	(elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF13.
+
+2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+
+	* reloc.c (BFD_RELOC_ARM_THUMB_BF19): New
+	* libbfd.h: Regenerated.
+	* bfd-in2.h: Regenerated.
+	* bfd-elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF18.
+	(elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF19
+	and R_ARM_THM_BF18 together.
+	(elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF19.
+
+2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+
+	* reloc.c (BFD_RELOC_ARM_THUMB_BF17): New enum.
+	* bfd-in2.h: Regenerated.
+	* libbfd.h: Regenerated.
+	* bfd-elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF16.
+	(elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF17
+	and R_ARM_THM_BF16 together.
+	(get_value_helper): New reloc helper.
+	(elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF16.
+
+2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+
+	* reloc.c (BFD_RELOC_THUMB_PCREL_BRANCH5): New enum.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+
+2019-04-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+	* archures.c (bfd_mach_arm_8_1M_MAIN): Define.
+	* bfd-in2.h: Regenerate.
+	* cpu-arm.c (arch_info_struct): Add entry for Armv8.1-M Mainline.
+	* elf32-arm.c (using_thumb_only): Return true for Armv8.1-M Mainline
+	and update assert.
+	(using_thumb2): Likewise.
+	(using_thumb2_bl): Update assert.
+	(arch_has_arm_nop): Likewise.
+	(bfd_arm_get_mach_from_attributes): Add case for Armv8.1-M Mainline.
+	(tag_cpu_arch_combine): Add logic for Armv8.1-M Mainline merging.
+
+2019-04-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-linker-x86.h (elf_x86_cet_report): New.
+	(elf_linker_x86_params): Add cet_report.
+	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Report
+	missing IBT and SHSTK properties if needed.
+
+2019-04-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24436
+	* elf-m10300.c (mn10300_elf_check_relocs): Remove BFD_ASSERT of
+	"h != NULL".  Don't check "h != NULL" before calling.
+	bfd_elf_gc_record_vtentry.
+	* elf32-arm.c (elf32_arm_check_relocs): Likewise.
+	* elf32-bfin.c (bfin_check_relocs): Likewise.
+	* elf32-cris.c (cris_elf_check_relocs): Likewise.
+	* elf32-csky.c (csky_elf_check_relocs): Likewise.
+	* elf32-d10v.c (elf32_d10v_check_relocs): Likewise.
+	* elf32-dlx.c (elf32_dlx_check_relocs): Likewise.
+	* elf32-fr30.c (fr30_elf_check_relocs): Likewise.
+	* elf32-frv.c (elf32_frv_check_relocs): Likewise.
+	* elf32-hppa.c (elf32_hppa_check_relocs): Likewise.
+	* elf32-i386.c (elf_i386_check_relocs): Likewise.
+	* elf32-iq2000.c (iq2000_elf_check_relocs): Likewise.
+	* elf32-m32r.c (m32r_elf_check_relocs): Likewise.
+	* elf32-m68hc1x.c (elf32_m68hc11_check_relocs): Likewise.
+	* elf32-m68k.c (elf_m68k_check_relocs): Likewise.
+	* elf32-mcore.c (mcore_elf_check_relocs): Likewise.
+	* elf32-metag.c (elf_metag_check_relocs): Likewise.
+	* elf32-or1k.c (or1k_elf_check_relocs): Likewise.
+	* elf32-ppc.c (ppc_elf_check_relocs): Likewise.
+	* elf32-s390.c (elf_s390_check_relocs): Likewise.
+	* elf32-sh.c (sh_elf_check_relocs): Likewise.
+	* elf32-v850.c (v850_elf_check_relocs): Likewise.
+	* elf32-vax.c (elf_vax_check_relocs): Likewise.
+	* elf32-xstormy16.c (xstormy16_elf_check_relocs): Likewise.
+	* elf32-xtensa.c (elf_xtensa_check_relocs): Likewise.
+	* elf64-mmix.c (mmix_elf_check_relocs): Likewise.
+	* elf64-ppc.c (ppc64_elf_check_relocs): Likewise.
+	* elf64-s390.c (elf_s390_check_relocs): Likewise.
+	* elf64-x86-64.c (elf_s390_check_relocs): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise.
+	* elflink.c (bfd_elf_gc_record_vtinherit): Check for corrupt
+	VTENTRY entry.
+
+2019-04-11  Alan Modra  <amodra@gmail.com>
+
+	PR 24435
+	* elflink.c (elf_link_add_object_symbols): Don't read partial
+	dynamic entries from fuzzed objects.
+
+2019-04-11  Tamar Christina  <tamar.christina@arm.com>
+
+	PR ld/24302
+	* elfnn-aarch64.c (elfNN_aarch64_size_dynamic_sections): Don't emit
+	DT_TLSDESC_GOT and DT_TLSDESC_PLT when DF_BIND_NOW.
+	(elfNN_aarch64_finish_dynamic_sections): Don't write PLT if DF_BIND_NOW.
+
+2019-04-10  Michael Forney  <mforney@mforney.org>
+
+	PR 24427
+	* doc/chew.c (free_words): Correctly free "push_text" strings.
+
+2019-04-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config.bfd: Remove i[3-7]86-*-kaos* and i[3-7]86-*-chaos targets.
+
+2019-04-08  Alan Modra  <amodra@gmail.com>
+
+	* configure.ac (elfxx_x86): Define and use.
+	* configure: Regenerate.
+
+2019-04-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-linker-x86.h: New file.
+	* elf32-i386.c (elf_i386_convert_load_reloc): Use htab->params
+	to get x86-specific linker options.
+	* elf64-x86-64.c (elf_x86_64_convert_load_reloc): Likewise.
+	(elf_x86_64_check_relocs): Likewise.
+	(elf_x86_64_relocate_section): Likewise.
+	(elf_x86_64_link_setup_gnu_properties): Likewise.
+	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Likewise.
+	(_bfd_x86_elf_link_setup_gnu_properties): Likewise.
+	(_bfd_elf_linker_x86_set_options): New function.
+	* elfxx-x86.h: Include "elf-linker-x86.h".
+	(elf_x86_link_hash_table): Add params.
+
+2019-04-03  Alan Modra  <amodra@gmail.com>
+
+	* coff-i386.c, * coff-x86_64.c, * coffgen.c, * dwarf2.c,
+	* elf-m10200.c, * elf.c, * elf32-arm.c, * elf32-bfin.c,
+	* elf32-csky.c, * elf32-m32r.c, * elf32-microblaze.c, * elf32-pru.c,
+	* elf32-rx.c, * elf32-xgate.c, * elf64-sparc.c, * elfnn-ia64.c,
+	* elfxx-riscv.c, * elfxx-sparc.c, * linker.c, * mach-o.c,
+	* pe-x86_64.c, * pei-x86_64.c, * plugin.c: Whitespace fixes.
+
+2019-04-02  Jim Wilson  <jimw@sifive.com>
+
+	PR 24389
+	* elfnn-riscv.c (_bfd_riscv_elf_merge_private_bfd_data): Move read of
+	ELF header flags to after check for ELF object file.  Loop through
+	sections looking for code sections, if none, then skip ABI checks.
+
+2019-03-30  Andrew Waterman  <andrew@sifive.com>
+
+	* elfnn-riscv.c (_bfd_riscv_relax_call): Only check ARCH_SIZE for
+	rd == X_RA case.
+
+2019-03-29  Max Filippov  <jcmvbkbc@gmail.com>
+
+	* elf32-xtensa.c (shrink_dynamic_reloc_sections): Add
+	info->export_dynamic to the conditional.
+
+2019-03-28  Alan Modra  <amodra@gmail.com>
+
+	PR 24392
+	* configure.ac: Invoke AC_CHECK_SIZEOF(int).
+	* configure: Regenerate.
+	* coffgen.c (coff_get_reloc_upper_bound): Replace gcc diagnostic
+	workaround with SIZEOF_LONG vs. SIZEOF_INT check.
+	* elf.c (_bfd_elf_get_reloc_upper_bound): Likewise.
+	* elf64-sparc.c (elf64_sparc_get_reloc_upper_bound): Likewise.
+	* mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise.
+
+2019-03-21  Jim Wilson  <jimw@sifive.com>
+
+	PR 24365
+	* elfnn-riscv.c (riscv_elf_relocate_section): For STT_SECTION check,
+	verify sym non-NULL before using.  Add identical check using h.
+
+2019-03-21  Sudakshina Das  <sudi.das@arm.com>
+
+	* elf-bfd.h (struct elf_backend_data): Add argument to
+	merge_gnu_properties.
+	* elf-properties.c (elf_merge_gnu_properties): Add argument to
+	itself and while calling bed->merge_gnu_properties.
+	(elf_merge_gnu_property_list): Update the calls for
+	elf_merge_gnu_properties.
+	* elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update handling
+	of --force-bti warning and add argument.
+	* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Add
+	warning.
+	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Add argument.
+	* elfxx-x86.h (_bfd_x86_elf_merge_gnu_properties): Likewise in
+	declaration.
+
+2019-03-20  Sudakshina Das  <sudi.das@arm.com>
+
+	* elfxx-aarch64.c (_bfd_aarch64_elf_link_fixup_gnu_properties): Define.
+	* elfxx-aarch64.h (_bfd_aarch64_elf_link_fixup_gnu_properties): Declare.
+	(elf_backend_fixup_gnu_properties): Define for AArch64.
+
+2019-03-18  Alan Modra  <amodra@gmail.com>
+
+	PR 24355
+	* elf32-ppc.c (ppc_finish_symbols): Don't call write_glink_stub
+	for local iplt syms with ent->plt.offset == -1.  Remove ineffective
+	attempt at writing glink stubs only once.
+
+2019-03-16  Alan Modra  <amodra@gmail.com>
+
+	PR 24337
+	* elf.c (_bfd_elf_rela_local_sym): Revert last change.
+	(_bfd_elf_rel_local_sym): Likewise.
+	* elflink.c (elf_link_input_bfd): Use bfd_und_section for
+	section of symbols with unrecognized shndx.
+
+2019-03-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24267
+	* coffgen.c (_bfd_coff_section_already_linked): Skip discarded
+	section.
+	* cofflink.c (coff_link_add_symbols): Check for symbols defined
+	in discarded section.
+
+2019-03-15  Alan Modra  <amodra@gmail.com>
+
+	PR 24339
+	* elflink.c (elf_link_add_object_symbols): Bail out on a local
+	symbol after globals if elf_bad_symtab is not set.
+
+2019-03-15  Alan Modra  <amodra@gmail.com>
+
+	PR 24337
+	* elf.c (_bfd_elf_rela_local_sym): Don't segfault on NULL sec.
+	(_bfd_elf_rel_local_sym): Likewise.
+
+2019-03-15  Alan Modra  <amodra@gmail.com>
+
+	PR 24336
+	* elflink.c (elf_link_read_relocs_from_section): Handle fuzzed
+	object files with sh_size not a multiple of sh_entsize.
+
+2019-03-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24338
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Check for corrupt
+	input with bad relocation.
+
+22019-03-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Re-indent.
+
+2019-03-14  Nick Clifton  <nickc@redhat.com>
+
+	PR 24334
+	* dwarf2.c (struct dwarf2_debug): Add sec_vma_count field.
+	(save_section_vma): Initialise field to the number of entries in
+	the sec_vma table.
+	(section_vma_same): Check that the number of entries in the
+	sec_vma table matches the number of sections in the bfd.
+
+2019-03-14  Nick Clifton  <nickc@redhat.com>
+
+	PR 24333
+	* elflink.c (_bfd_elf_add_default_symbol): Add a check for a NULL
+	section owner pointer when adding the default symbol.
+
+2019-03-14  Nick Clifton  <nickc@redhat.com>
+
+	PR 24332
+	* elflink.c (elf_link_add_object_symbols): Add new local variable
+	extversym_end.  Initialise it to point to the end of the version
+	symbol table, if present.  Check it when initialising and updating
+	the ever pointer.
+
+2019-03-13  Sudakshina Das  <sudi.das@arm.com>
+
+	* elfnn-aarch64.c (PLT_PAC_ENTRY_SIZE, PLT_PAC_SMALL_ENTRY_SIZE): New.
+	(PLT_BTI_PAC_ENTRY_SIZE, PLT_BTI_PAC_SMALL_ENTRY_SIZE): New.
+	(setup_plt_values): Account for PAC or PAC and BTI enabled PLTs.
+	(elfNN_aarch64_size_dynamic_sections): Add checks for PLT_BTI_PAC
+	and PLT_PAC_PLT.
+	(elfNN_aarch64_finish_dynamic_sections): Account for PLT_BTI_PAC.
+	(get_plt_type): Add case for DT_AARCH64_PAC_PLT.
+	(elfNN_aarch64_plt_sym_val): Add cases for PLT_BTI_PAC and PLT_PAC.
+
+2019-03-13  Sudakshina Das  <sudi.das@arm.com>
+	    Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* bfd-in.h (aarch64_plt_type, aarch64_enable_bti_type): New.
+	(aarch64_bti_pac_info): New.
+	(bfd_elf64_aarch64_set_options): Add aarch64_bti_pac_info argument.
+	(bfd_elf32_aarch64_set_options): Likewise.
+	* bfd-in2.h: Regenerate
+	* elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): New.
+	(PLT_BTI_SMALL_ENTRY_SIZE, PLT_BTI_TLSDESC_ENTRY_SIZE): New.
+	(elfNN_aarch64_small_plt0_bti_entry): New.
+	(elfNN_aarch64_small_plt_bti_entry): New.
+	(elfNN_aarch64_tlsdesc_small_plt_bti_entry): New.
+	(elf_aarch64_obj_tdata): Add no_bti_warn and plt_type fields.
+	(elf_aarch64_link_hash_table): Add plt0_entry, plt_entry and
+	tlsdesc_plt_entry_size fields.
+	(elfNN_aarch64_link_hash_table_create): Initialise the new fields.
+	(setup_plt_values): New helper function.
+	(bfd_elfNN_aarch64_set_options): Use new bp_info to set plt sizes and
+	bti enable type.
+	(elfNN_aarch64_allocate_dynrelocs): Use new size members instead of
+	fixed macros.
+	(elfNN_aarch64_size_dynamic_sections): Likewise and add checks.
+	(elfNN_aarch64_create_small_pltn_entry): Use new generic pointers
+	to plt stubs instead of fixed ones and update filling them according
+	to the need for bti.
+	(elfNN_aarch64_init_small_plt0_entry): Likewise.
+	(elfNN_aarch64_finish_dynamic_sections): Likewise.
+	(get_plt_type, elfNN_aarch64_get_synthetic_symtab): New.
+	(elfNN_aarch64_plt_sym_val): Update size accordingly.
+	(elfNN_aarch64_link_setup_gnu_properties): Set up plts if BTI GNU NOTE
+	is set.
+	(bfd_elfNN_get_synthetic_symtab): Define.
+	(elfNN_aarch64_merge_gnu_properties): Give out warning with --force-bti
+	and mising BTI NOTE SECTION.
+
+
+2019-03-13  Sudakshina Das  <sudi.das@arm.com>
+
+	* elf-properties.c (_bfd_elf_link_setup_gnu_properties): Exclude
+	linker created inputs from merge.
+	* elfnn-aarch64.c (struct elf_aarch64_obj_tdata): Add field for
+	GNU_PROPERTY_AARCH64_FEATURE_1_AND properties.
+	(elfNN_aarch64_link_setup_gnu_properties): New.
+	(elfNN_aarch64_merge_gnu_properties): New.
+	(elf_backend_setup_gnu_properties): Define for AArch64.
+	(elf_backend_merge_gnu_properties): Likewise.
+	* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Define.
+	(_bfd_aarch64_elf_parse_gnu_properties): Define.
+	(_bfd_aarch64_elf_merge_gnu_properties): Define.
+	* elfxx-aarch64.h (_bfd_aarch64_elf_link_setup_gnu_properties): Declare.
+	(_bfd_aarch64_elf_parse_gnu_properties): Declare.
+	(_bfd_aarch64_elf_merge_gnu_properties): Declare.
+	(elf_backend_parse_gnu_properties): Define for AArch64.
+
+2019-03-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24322
+	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Properly
+	merge GNU_PROPERTY_X86_FEATURE_1_[IBT|SHSTK].
+
+2019-03-12  Alan Modra  <amodra@gmail.com>
+
+	* coffcode.h (buy_and_read): Delete unnecessary forward decl.  Add
+	nmemb parameter.  Use bfd_alloc2.
+	(coff_slurp_line_table): Use bfd_alloc2.  Update buy_and_read calls.
+	Delete assertion.
+	(coff_slurp_symbol_table): Use bfd_alloc2 and bfd_zalloc2.
+	(coff_slurp_reloc_table): Use bfd_alloc2.  Update buy_and_read calls.
+	* coffgen.c (coff_get_reloc_upper_bound): Ensure size calculation
+	doesn't overflow.
+	* elf.c (bfd_section_from_shdr): Use bfd_zalloc2.  Style fix.
+	(assign_section_numbers): Style fix.
+	(swap_out_syms): Use bfd_malloc2.
+	(_bfd_elf_get_reloc_upper_bound): Ensure size calculation doesn't
+	overflow.
+	(_bfd_elf_make_empty_symbol): Style fix.
+	(elfobj_grok_stapsdt_note_1): Formatting.
+	* elfcode.h (elf_object_p): Use bfd_alloc2.
+	(elf_write_relocs, elf_write_shdrs_and_ehdr): Likewise.
+	(elf_slurp_symbol_table): Use bfd_zalloc2.
+	(elf_slurp_reloc_table): Use bfd_alloc2.
+	(_bfd_elf_bfd_from_remote_memory): Use bfd_malloc2.
+	* elf64-sparc (elf64_sparc_get_reloc_upper_bound): Ensure
+	size calculation doesn't overflow.
+	(elf64_sparc_get_dynamic_reloc_upper_bound): Likewise.
+	* mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise.
+	* pdp11.c (get_reloc_upper_bound): Copy aoutx.h version.
+
+2019-03-08  Alan Modra  <amodra@gmail.com>
+
+	PR 24311
+	* merge.c (merge_strings): Return secinfo.  Don't pad section
+	to alignment here.
+	(_bfd_merge_sections): Pad section to alignment here, if input
+	sections contributing to merged output all pad to alignment.
+	Formatting.
+
+2019-03-06  Nick Clifton  <nickc@redhat.com>
+
+	* dwarf2.c (_bfd_dwarf2_find_symbol_bias): Check for a NULL symbol
+	table pointer.
+	* coffgen.c (coff_find_nearest_line_with_names): Do not call
+	_bfd_dwarf2_find_symbol_bias if there is no symbol table available.
+
+2019-03-01  Andreas Krebbel  <krebbel@linux.ibm.com>
+
+	This reverts commit 5a12586d44fa8d5dfc74cbca4f2f36a273a16335.
+	2019-01-14  Maamoun Tarsha  <maamountk@hotmail.com>
+
+	PR 20113
+	* elf32-s390.c (allocate_dynrelocs): Update comment.
+
+2019-02-28  Tamar Christina  <tamar.christina@arm.com>
+
+	* elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Correct CIE parse.
+
+2019-02-28  Nick Clifton  <nickc@redhat.com>
+
+	PR 24273
+	* elf.c (bfd_elf_string_from_elf_section): Check for a string
+	section that is not NUL terminated.
+
+2019-02-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24276
+	* elf64-x86-64.c (elf_x86_64_check_relocs): Skip symbol defined
+	by linker when checking copy reloc on protected symbol.
+
+2019-02-24  Alan Modra  <amodra@gmail.com>
+
+	PR 24144
+	* pdp11.c (set_section_contents): Revert 2015-02-24 change.
+
+2019-02-20  Eric Tsai  <erictsai@cadence.com>
+
+	* elf32-xtensa.c (is_resolvable_asm_expansion): Scan output
+	sections between the call site and call destination and adjust
+	call distance by the largest alignment.
+
+2019-02-20  Alan Hayward  <alan.hayward@arm.com>
+
+	* elf-bfd.h (elfcore_write_aarch_pauth): Add declaration.
+	* elf.c (elfcore_grok_aarch_pauth): New function.
+	(elfcore_grok_note): Check for NT_ARM_PAC_MASK.
+	(elfcore_write_aarch_pauth): New function.
+	(elfcore_write_register_note): Check for AArch64 pauth section.
+
+2019-02-20  Alan Modra  <amodra@gmail.com>
+
+	PR 24225
+	* elf32-nios2.c (nios2_elf32_relocate_section): Check asprintf
+	return value.
+
+2019-02-20  Michael Roitzsch  <reactorcontrol@icloud.com>
+
+	* configure.ac (SHARED_LIBADD): Add -liberty -lintl for all
+	Darwin hosts, not just or1k.
+	* configure: Regenerate.
+
+2019-02-20  Alan Modra  <amodra@gmail.com>
+
+	PR 24236
+	* archive64.c (_bfd_archive_64_bit_slurp_armap): Move code adding
+	sentinel NUL to string buffer nearer to loop where it is used.
+	Don't go past sentinel when scanning strings, and don't write
+	NUL again.
+	* archive.c (do_slurp_coff_armap): Simplify string handling to
+	archive64.c style.
+
+2019-02-19  Alan Modra  <amodra@gmail.com>
+
+	PR 24235
+	* pei-x86_64.c (pex64_bfd_print_pdata_section): Correct checks
+	attempting to prevent read past end of section.
+
+2019-02-18  Alan Modra  <amodra@gmail.com>
+
+	PR 24225
+	* elf32-nios2.c (nios2_elf32_relocate_section): Use asprintf and
+	PRIx64 to generate warning messages.  Print local sym names too.
+
+2019-02-09  Vineet Gupta  <vgupta@synopsys.com>
+
+	* elf32-arc (INIT_SYM_STRING): Delete.
+	(FINI_SYM_STRING): Likewise.
+	(init_str): Likewise.
+	(fini_str): Likewise.
+
+2019-02-08  Alan Modra  <amodra@gmail.com>
+
+	* elf32-ppc.c (ppc_elf_relocate_section): Add %X to "unsupported
+	for bss-plt" warning to make it an error.
+
+2019-02-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+	PR ld/18841
+	* elf32-sparc.c (elf32_sparc_reloc_type_class): Return
+	reloc_class_ifunc for ifunc symbols.
+	* elf64-sparc.c (elf64_sparc_reloc_type_class): Likewise.
+
+2019-02-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+	* elf32-visium.c (visium_elf_howto_parity_reloc): Minor tweak.
+	<R_VISIUM_PC16>: Use explicit range test to detect an overflow.
+
+2019-02-07  Nick Clifton  <nickc@redhat.com>
+
+	* config.bfd: Move the powerpc-lynxos and powerpc-windiss targets
+	into the definitely obsolete list.
+
+2019-02-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24151
+	* elf64-x86-64.c (elf_x86_64_need_pic): Check
+	SYMBOL_DEFINED_NON_SHARED_P instead of def_regular.
+	(elf_x86_64_relocate_section): Move PIC check for PC-relative
+	relocations to ...
+	(elf_x86_64_check_relocs): Here.
+	(elf_x86_64_finish_dynamic_symbol): Use SYMBOL_DEFINED_NON_SHARED_P
+	to check if a symbol is defined in a non-shared object.
+	* elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): New.
+
+2019-01-21  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* elf32-arm.c (elf32_arm_final_link_relocate): Use 'llabs' instead
+	of 'labs' (and fix GCC warning).
+
+2019-01-25  Nick Clifton  <nickc@redhat.com>
+
+	* po/ru.po: Updated Russian translation.
+
+2019-01-23  Nick Clifton  <nickc@redhat.com>
+
+	* po/fr.po: Updated French translation.
+
+2019-01-21  Nick Clifton  <nickc@redhat.com>
+
+	* po/pt.po: Updated Portuguese translation.
+	* po/uk.po: Updated Ukranian translation.
+
+2019-01-21  Yuri Chornoivan  <yurchor@ukr.net>
+
+	PR 24108
+	* elf32-nds32.c (nds32_relocate_section): Add space between words
+	in error message.
+	* elfnn-riscv.c (riscv_version_mismatch): Fix spelling mistake in
+	error message.
+	(riscv_i_or_e_p): Likewise.
+	(riscv_merge_arch_attr_info): Likewise.
+
+2019-01-19  Nick Clifton  <nickc@redhat.com>
+
+	* version.m4: Reset to 2.32.51
+	* configure: Regenerate.
+	* po/bfd.pot: Regenerate.
+
+2018-06-24  Nick Clifton  <nickc@redhat.com>
+
+	2.32 branch created.
+
+2019-01-16  Kito Cheng  <kito@andestech.com>
+
+	* elf-attrs.c (vendor_obj_attr_size): Return 0 if size is 0 even
+	for OBJ_ATTR_PROC.
+
+2019-01-16  Kito Cheng  <kito@andestech.com>
+	    Nelson Chu  <nelson@andestech.com>
+
+	* elfnn-riscv.c (in_subsets): New.
+	(out_subsets): Likewise.
+	(merged_subsets): Likewise.
+	(riscv_std_ext_p): Likewise.
+	(riscv_non_std_ext_p): Likewise.
+	(riscv_std_sv_ext_p): Likewise.
+	(riscv_non_std_sv_ext_p): Likewise.
+	(riscv_version_mismatch): Likewise.
+	(riscv_i_or_e_p): Likewise.
+	(riscv_merge_std_ext): Likewise.
+	(riscv_merge_non_std_and_sv_ext): Likewise.
+	(riscv_merge_arch_attr_info): Likewise.
+	(riscv_merge_attributes): Likewise.
+	(_bfd_riscv_elf_merge_private_bfd_data): Merge attribute.
+
+	* elfnn-riscv.c (riscv_elf_obj_attrs_arg_type): New.
+	(elf_backend_obj_attrs_vendor): Define.
+	(elf_backend_obj_attrs_section_type): Likewise.
+	(elf_backend_obj_attrs_section): Likewise.
+	(elf_backend_obj_attrs_arg_type): Define as
+	riscv_elf_obj_attrs_arg_type.
+	* elfxx-riscv.c (riscv_estimate_digit): New.
+	(riscv_estimate_arch_strlen1): Likewise.
+	(riscv_estimate_arch_strlen): Likewise.
+	(riscv_arch_str1): Likewise.
+	(riscv_arch_str): Likewise.
+	* elfxx-riscv.h (riscv_arch_str): Declare.
+
+2019-01-14  John Darrington <john@darrington.wattle.id.au>
+
+	* bfd-in2.h [BFD_RELOC_S12Z_OPR]: New reloc.
+	* libbfd.h: regen.
+	* elf32-s12z.c (eld_s12z_howto_table): R_S12Z_OPR takes non zero
+	source field.  (md_apply_fix): Apply final fix
+	to BFD_RELOC_S12Z_OPR.
+	* reloc.c[BFD_RELOC_S12Z_OPR]: New reloc.
+
+2019-01-14  Maamoun Tarsha  <maamountk@hotmail.com>
+
+	PR 20113
+	* elf32-s390.c (allocate_dynrelocs): Update comment.
+
+2019-01-09  Andrew Paprocki  <andrew@ishiboo.com>
+
+	* warning.m4: Adjust egrep pattern for non-GNU compilers.
+	* configure: Regenerate.
+
+2019-01-08  Alan Modra  <amodra@gmail.com>
+
+	PR 23699
+	PR 24065
+	* ihex.c (ihex_write_object_contents): Properly check 32-bit
+	address range.
+
+2019-01-05  Yoshinori Sato <ysato@users.sourceforge.jp>
+
+	* bfd/archures.c: Add bfd_mach_rx_v2 and bfd_mach_rx_v3.
+	* bfd/bfd-in2.h: Regenerate.
+	* bfd/cpu-rx.c (arch_info_struct): Add RXv2 and RXv3 entry.
+	* bfd/elf32-rx.c (elf32_rx_machine): Add RXv2 and RXv3 support.
+
+2019-01-04  Lifang Xia  <lifang_xia@c-sky.com>
+
+	* config.bfd (csky-*-elf* | csky-*-linux*): Modify the csky
+	default target, little endian target is more suitable.
+
+2019-01-04  Alan Modra  <amodra@gmail.com>
+
+	PR 24061
+	PR 21786
+	* coff-rs6000.c (GET_VALUE_IN_FIELD): Add base parameter and
+	adjust all callers.
+	(EQ_VALUE_IN_FIELD): Likewise.
+	* coff64-rs6000.c (GET_VALUE_IN_FIELD): Likewise.
+
+2019-01-01  Alan Modra  <amodra@gmail.com>
+
+	Update year range in copyright notice of all files.
+
+For older changes see ChangeLog-2018
+
+Copyright (C) 2019 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2020 ./bfd/ChangeLog-2020
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ChangeLog-2020	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/ChangeLog-2020	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,5017 @@
+2020-12-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-linker-x86.h (elf_x86_cet_report): Renamed to ...
+	(elf_x86_prop_report): This.
+	(elf_linker_x86_params): Add lam_u48, lam_u57, lam_u48_report
+	and lam_u57_report.
+	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Support
+	GNU_PROPERTY_X86_FEATURE_1_LAM_U48 and
+	GNU_PROPERTY_X86_FEATURE_1_LAM_U57.
+	(_bfd_x86_elf_link_fixup_gnu_properties): Keep LAM features only
+	for 64-bit output.
+
+2020-12-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27091
+	* elflink.c (elf_link_input_bfd): Copy elf_gnu_osabi_retain
+	from input only for relocatable link.
+
+2020-12-18  Alan Modra  <amodra@gmail.com>
+
+	* elf32-microblaze.c (dbg): Delete unused variable.
+	* elf32-nds32.c (relax_group_section_id_list): Make static.
+	* som.c (reloc_queue): Make static.
+	* xtensa-isa.c (xtisa_errno, xtisa_error_msg): Make static.
+
+2020-12-18  Alan Modra  <amodra@gmail.com>
+
+	* archive.c (_bfd_ar_spacepad, _bfd_ar_sizepad): Use auto buf.
+	* coff-mcore.c (coff_mcore_relocate_section): Likewise.
+	* elf32-ppc.c (ppc_elf_unhandled_reloc): Use asprintf in place
+	of fixed size and possibly too small buf for translated message.
+	* elf64-ppc.c (ppc64_elf_unhandled_reloc): Likewise.
+	* elf32-v850.c (v850_elf_check_relocs): Likewise.
+	* ecoff.c (ecoff_type_to_string): Pass in return string buff rather
+	than using static buffer2.  Delete dead code.  Remove unnecessary
+	parentheses.
+	(_bfd_ecoff_print_symbol): Pass auto buff to ecoff_type_to_string.
+	* elf32-rx.c (describe_flags): Pass in return string buf rather
+	than using static buf.
+	(rx_elf_merge_private_bfd_data): Pass buf to describe_flags.
+	(rx_elf_print_private_bfd_data): Likewise.
+	* mach-o.c (cpusubtype): Pass in return string buffer rather than
+	using static buffer.
+	(bfd_mach_o_bfd_print_private_bfd_data): Pass buff to cpusubtype.
+	* opncls.c (separate_debug_file_exists): Make buffer an auto var.
+	(bfd_fill_in_gnu_debuglink_section): Likewise.
+	* peXXigen.c (rsrc_resource_name): Pass in return string buffer
+	rather than using static buffer.
+	(rsrc_sort_entries): Pass buff to rsrc_resource_name.
+	* vms-alpha.c (_bfd_vms_write_emh): Pass tbuf to get_vms_time_string.
+	* vms-misc.c (get_vms_time_string): Pass in return string tbuf
+	rather than using static tbuf.
+	* vms.h (get_vms_time_string): Update prototype.
+
+2020-12-18  Alan Modra  <amodra@gmail.com>
+
+	* coff-z80.c (bfd_howto_type): Make typedef const.
+	* elf32-z80.c (bfd_howto_type): Likewise.
+	* elf32-m32c.c (EncodingTable): Likewise.
+	* elf32-csky.c (csky_arch_for_merge): Likewise.
+	(csky_archs): Use typedef.
+	* elf32-m68hc11.c (m68hc11_direct_relax_table): Make const.
+	(find_relaxable_insn, m68hc11_elf_relax_section): Adjust to suit.
+	* elf32-ppc.c (ppc_alt_plt): Make const.
+	* elf32-rl78.c (relax_addr16): Likewise.
+	* targets.c (_bfd_associated_vector): Likewise.
+	(bfd_target_vector, bfd_associated_vector): Likewise.
+	* libbfd-in.h (bfd_target_vector, bfd_associated_vector): Likewise.
+	* libbfd.h: Regenerate.
+
+2020-12-18  Alan Modra  <amodra@gmail.com>
+
+	* ecoff.c (bfd_debug_section): Init using BFD_FAKE_SECTION.
+	(ecoff_scom_section, ecoff_scom_symbol): Statically init using
+	BFD_FAKE_SECTION and GLOBAL_SYM_INIT.  Delete initialisation code.
+	* elf32-m32r.c (m32r_elf_scom_section, m32r_elf_scom_symbol),
+	* elf32-score.c (score_elf_scom_section, score_elf_scom_symbol),
+	* elf32-score7.c (score_elf_scom_section, score_elf_scom_symbol),
+	* elf32-tic6x.c (tic6x_elf_scom_section, tic6x_elf_scom_symbol),
+	* elf32-v850.c (v850_elf_scom_section, v850_elf_scom_symbol),
+	(v850_elf_tcom_section, v850_elf_tcom_symbol),
+	(v850_elf_zcom_section, v850_elf_zcom_symbol),
+	* elf64-mmix.c (mmix_elf_reg_section, mmix_elf_reg_section_symbol),
+	* elfxx-mips.c (mips_elf_scom_section, mips_elf_scom_symbol): Likewise.
+
+2020-12-16  Alan Modra  <amodra@gmail.com>
+
+	* elfxx-target.h (elfNN_bed): Constify.
+	* bfd.c (bfd_elf_set_pagesize): Delete.
+	(bfd_emul_set_maxpagesize, bfd_emul_set_commonpagesize): Delete.
+	* elf.c (get_program_header_size): Get commonpagesize from
+	link info.
+	(_bfd_elf_map_sections_to_segments): Get maxpagesize from link info.
+	(assign_file_positions_for_load_sections): Likewise.
+	(assign_file_positions_for_non_load_sections): Likewise.
+	(rewrite_elf_program_header): Add maxpagesize param.  Set map_p_align.
+	(copy_private_bfd_data): Don't call bfd_elf_set_maxpagesize.
+	Instead pass maxpagesize to rewrite_elf_program_header.
+	* elf32-nds32.c (relax_range_measurement): Add link_info param.
+	Get maxpagesize from link_info.  Adjust caller.
+	* bfd-in2.h: Regenerate.
+
+2020-12-16  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (elf_flags_to_names): Constify.
+
+2020-12-16  Alan Modra  <amodra@gmail.com>
+
+	* libxcoff.h (struct xcoff_backend_data_rec): Constify
+	_xcoff_glink_code.
+	(XCOFF_RELOC_FUNCTION_ARGS, XCOFF_COMPLAIN_FUNCTION_ARGS): Delete.
+	(xcoff_reloc_function, xcoff_complain_function): New typedef.
+	(xcoff_calculate_relocation, xcoff_complain_overflow),
+	(xcoff_reloc_type_noop, xcoff_reloc_type_fail),
+	(xcoff_reloc_type_pos, xcoff_reloc_type_neg),
+	(xcoff_reloc_type_rel, xcoff_reloc_type_toc),
+	(xcoff_reloc_type_ba, xcoff_reloc_type_crel): Update declaration.
+	* coff-rs6000.c (xcoff_reloc_type_br): Declare using typedef.
+	(xcoff_complain_overflow_dont_func): Likewise.
+	(xcoff_complain_overflow_bitfield_func): Likewise.
+	(xcoff_complain_overflow_signed_func): Likewise.
+	(xcoff_complain_overflow_unsigned_func): Likewise.
+	(xcoff_calculate_relocation, xcoff_complain_overflow): Constify.
+	(xcoff_glink_code): Constify.
+	* coff64-rs6000.c (xcoff64_reloc_type_br): Declare using typedef.
+	(xcoff64_calculate_relocation, xcoff64_glink_code): Constify.
+
+2020-12-16  Alan Modra  <amodra@gmail.com>
+
+	* elf32-xtensa.c (narrowable, widenable): Constify.
+	* xtensa-modules.c: Constify many arrays.
+
+2020-12-16  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (synthetic_opd): Constify.
+
+2020-12-16  Alan Modra  <amodra@gmail.com>
+
+	* arc-plt.h (plt_versions): Constify.
+	* elf32-arc.c (arc_get_plt_version): Constify return pointer,
+	adjust uses throughout.
+
+2020-12-16  Alan Modra  <amodra@gmail.com>
+
+	* coffcode.h (pelength, peheader): Delete static variables.
+	(coff_apply_checksum): Instead, define them as auto vars, and pass..
+	(coff_read_word, coff_compute_checksum): ..to here.  Delete
+	unnecessary forward declarations.
+	* pei-x86_64.c (pdata_count): Delete static variable.
+	(struct pex64_paps): New.
+	(pex64_print_all_pdata_sections, pex64_bfd_print_pdata): Pass
+	a pex64_paps for counting.
+	* peicode.h (jtab): Constify.
+
+2020-12-15  Vivek Das Mohapatra  <vivek@collabora.com>
+
+	* elflink.c (bfd_elf_size_dynamic_sections): Call
+	_bfd_elf_add_dynamic_entry to add a DT_GNU_FLAGS_1 section.
+
+2020-12-14  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (struct elf_obj_tdata): Add being_created.
+	* elf.c (bfd_section_from_shdr): Delete static vars for loop
+	detection.  Use new tdata variable instead.
+	* elfcode.h (elf_object_p): Allocate being_created.
+
+2020-12-10  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_ext_dont_care_version): New function.  Return
+	TRUE if we don't care the versions of the extensions.  These extensions
+	are added to the subset list for special purposes, with the explicit
+	versions or the RISCV_UNKNOWN_VERSION versions.
+	(riscv_parse_add_subset): If we do care the versions of the extension,
+	and the versions are unknown, then report errors for the non-implicit
+	extensions, and return directly for the implicit one.
+	(riscv_arch_str1): Do not output i extension after e, and the extensions
+	which versions are unknown.
+
+2020-12-07  Siddhesh Poyarekar  <siddhesh@sourceware.org>
+
+	PR 26945
+	* opncls.c (bfd_fdopenw): New function.
+	* bfd-in2.h: Regenerate.
+
+2020-12-07  Alan Modra  <amodra@gmail.com>
+
+	* elf32-csky.c (csky_relocate_contents): Correct negate test.
+	* cpu-ns32k.c (_bfd_do_ns32k_reloc_contents): Likewise.
+	* elf32-nds32.c (nds32_relocate_contents): Likewise.
+
+2020-12-05  Maciej W. Rozycki  <macro@linux-mips.org>
+
+	* elf32-vax.c (elf_vax_check_relocs) <R_VAX_GOT32>: Use
+	SYMBOL_REFERENCES_LOCAL rather than `h->forced_local' to check
+	whether the symbol referred is local or not.
+
+2020-12-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27016
+	* elf64-x86-64.c (elf_x86_64_convert_load_reloc): Convert load
+	to mov only for GOTPCRELX relocations.
+
+2020-12-04  Alan Modra  <amodra@gmail.com>
+
+	PR 26978
+	* elflink.c (_bfd_elf_add_default_symbol): Handle the case where
+	a new weak sym@@ver should be overridden by an existing sym@ver.
+	(elf_link_add_object_symbols): Don't _bfd_elf_add_default_symbol
+	for a new weak sym@ver when sym@@ver already exists.
+	* linker.c (link_action): Choose MIND for previous indirect,
+	current def, rather than MDEF.
+	(_bfd_generic_link_add_one_symbol <MIND>): Handle redefinition of
+	weak indirect symbol.
+
+2020-12-01  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_parse_prefixed_ext): Use riscv_compare_subsets
+	to check the Z* extensions' order.
+
+2020-12-01  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_parse_add_subset): Allow to add g with
+	RISCV_UNKNOWN_VERSION versions.
+	(riscv_parse_std_ext): Add g to the subset list, we only use it
+	to add the implicit extensions, but won't output it to arch string.
+	(riscv_parse_add_implicit_subsets): Add implicit zicsr and zifencei
+	for g extension.
+	(riscv_arch_str1): Do not output g to the arch string.
+	* elfxx-riscv.h (RISCV_UNKNOWN_VERSION): Moved to include/opcode/riscv.h.
+
+2020-12-01  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_merge_std_ext): Updated since
+	riscv_lookup_subset is changed.
+	* elfxx-riscv.c (riscv_ext_order): New Array used to compare the
+	extensions' order quickly.
+	(riscv_init_ext_order): New function.  Init the riscv_ext_order
+	according to the riscv_supported_std_ext and parse_config[i].class
+	automatically.
+	(riscv_compare_subsets): New function.  Similar to the strcmp, but
+	compare the subsets with the specific order.
+	(riscv_lookup_subset): Return TRUE and set `current` to the subset
+	if it is found.  Otherwise, return FALSE and set `current` to the
+	place where we should insert the subset.
+	(riscv_add_implicit_subset): New function.  Search the list first,
+	and then find the right place to add the implicit_subset.
+	(riscv_parse_add_subset): Since We have to add all arch string
+	extensions first, and then start to add their implicit extensions.
+	We can add arch string extensions in order by the original
+	riscv_add_subset, and then add the implicit subsets by the
+	riscv_add_implicit_subset.  Besides, do not add the implicit
+	extensions if we failed to find their default versions.
+	(riscv_parse_std_ext): Updated.
+	(riscv_parse_add_implicit_subsets): New function.  Add all implicit
+	extensions according to the arch string extensions.
+	(riscv_parse_subset): Call riscv_init_ext_order and
+	riscv_parse_add_implicit_subsets, before and after parsing the
+	arch string.  Remove parts of the ISA conflict checking since
+	the implicit extensions are added.
+	* elfxx-riscv.h (riscv_lookup_subset): Updated.
+
+2020-12-01  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_lookup_subset): Moved to front.
+	(riscv_add_subset): Likewise.
+	(riscv_release_subset_list): Likewise.
+	(riscv_parse_add_subset): New function.  Find and check the
+	versions before adding them by riscv_add_subset.
+	(riscv_parsing_subset_version): Remove use_default_version
+	and change the version type from unsigned to int.  Set the
+	versions to RISCV_UNKNOWN_VERSION if we can not find them
+	in the arch string.
+	(riscv_parse_std_ext): Updated.
+	(riscv_parse_prefixed_ext): Updated.  Since we use as_bad
+	rather than as_fatal to report more errors, return NULL
+	string if the parsed end_of_version is NULL, too.
+	(riscv_parse_subset): Use a new boolean, no_conflict, to
+	report more errors when we have more than one ISA conflicts.
+	* elfxx-riscv.h (RISCV_DONT_CARE_VERSION): Changed to
+	RISCV_UNKNOWN_VERSION.
+	(riscv_lookup_subset_version): Removed.
+	(riscv_parse_subset_t): Updated.
+
+2020-12-01  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_parse_std_ext): Stop parsing standard
+	extensions when parsed h keyword.
+	(riscv_get_prefix_class): Support prefixed h class.
+	(riscv_std_h_ext_strtab): Likewise.
+	(riscv_ext_h_valid_p): Likewise.
+	(parse_config): Likewise.
+	(riscv_std_z_ext_strtab): Add zifencei.
+	* elfxx-riscv.h (riscv_isa_ext_class): Add RV_ISA_CLASS_H.
+
+2020-12-01  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (riscv_parse_subset): ISA string cannot contain
+	any uppercase letter.
+
+2020-12-01  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c: Re-indent codes, unify and improve the error
+	messages and comments.
+	(riscv_parse_prefixed_ext): Stop parsing the prefixed class
+	extensions if the class is RV_ISA_CLASS_UNKNOWN, I get internal
+	errors before adding this check for march-fail-porder* testcases.
+	(riscv_parse_subset): Move the rv32 with q checking in front.
+	* elfxx-riscv.h: Likewise.
+
+2020-12-01  Alan Modra  <amodra@gmail.com>
+
+	PR 26979
+	* elf-bfd.h (elf_backend_merge_symbol_attribute): Update prototype.
+	* elf32-m68hc1x.h (elf32_m68hc11_merge_symbol_attribute): Likewise.
+	* elfxx-mips.h (_bfd_mips_elf_merge_symbol_attribute): Likewise.
+	* elfxx-x86.h (_bfd_x86_elf_merge_symbol_attribute): Likewise.
+	* elf32-m68hc1x.c (elf32_m68hc11_merge_symbol_attribute): Replace
+	isym parameter with st_other.  Adjust code.
+	* elf64-alpha.c (elf64_alpha_merge_symbol_attribute): Likewise.
+	* elf64-ppc.c (ppc64_elf_merge_symbol_attribute): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_merge_symbol_attribute): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_merge_symbol_attribute): Likewise.
+	* elfxx-x86.c (_bfd_x86_elf_merge_symbol_attribute): Likewise.
+	* elflink.c (elf_merge_st_other): Likewise.
+	(_bfd_elf_merge_symbol, elf_link_add_object_symbols): Adjust to suit.
+	(_bfd_elf_copy_link_hash_symbol_type): Likewise.
+	(_bfd_elf_add_default_symbol): Merge st_other from undecorated
+	symbol and @VER symbol to @@VER symbol.
+
+2020-11-28  Alan Modra  <amodra@gmail.com>
+
+	PR 26907
+	* elf.c (elf_sort_sections): Don't sort zero size !load sections
+	after load sections.
+
+2020-11-27  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+
+	* elf.c (special_sections_g): Add .gnu.linkonce.n and .gnu.linkonce.p.
+	(special_sections_n): Add .noinit.
+	(special_sections_p): Add .persistent.
+
+2020-11-26  Nick Clifton  <nickc@redhat.com>
+
+	PR 26946
+	* dwarf2.c (read_section): Check for debug sections with excessive
+	sizes.
+
+2020-11-25  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26936
+	* elflink.c (_bfd_elf_check_kept_section): Get the real kept
+	section.
+
+2020-11-23  Nick Clifton  <nickc@redhat.com>
+
+	PR 26931
+	* elf-bfd.h (struct elf_backend_data): Add bfd_boolean field to
+	slurp_secondary_relocs field.
+	(_bfd_elf_slurp_secondary_reloc_section): Update prototype.
+	* elf.c (_bfd_elf_slurp_secondary_reloc_section): Add new
+	parameter.  Compute number of symbols based upon the new
+	parameter.
+	* elfcode.h (elf_slurp_reloc_table): Pass dynamic as new
+	parameter.
+
+2020-11-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26918
+	* elf64-s390.c (elf_s390_finish_dynamic_sections): Set .got
+	sh_entsize only if .got size > 0.
+
+2020-11-21  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (_bfd_riscv_relax_section):  Add a new relax pass
+	to do the pcgp relaxation later, after the lui and call relaxations,
+	but before the delete and alignment relaxations.
+
+2020-11-20  Nick Alcock  <nick.alcock@oracle.com>
+
+	* elflink.c (elf_finalize_dynstr): Call examine_strtab after
+	dynstr finalization.
+	(elf_link_swap_symbols_out): Don't call it here.  Call
+	ctf_new_symbol before swap_symbol_out.
+	(elf_link_output_extsym): Call ctf_new_dynsym before
+	swap_symbol_out.
+	(bfd_elf_final_link): Likewise.
+	* elf.c (swap_out_syms): Pass in bfd_link_info.  Call
+	ctf_new_symbol before swap_symbol_out.
+	(_bfd_elf_compute_section_file_positions): Adjust.
+
+2020-11-19  Nick Clifton  <nickc@redhat.com>
+
+	PR 26918
+	* elf64-s390.c (elf_s390_finish_dynamic_sections): Check for the
+	existance of an sgot output section before setting the
+	sh_entsize.
+
+2020-11-18  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+	H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-bfd.h (enum elf_gnu_osabi): Add elf_gnu_osabi_retain.
+	(struct elf_obj_tdata): Increase has_gnu_osabi to 4 bits.
+	* elf.c (_bfd_elf_make_section_from_shdr): Set elf_gnu_osabi_retain
+	for SHF_GNU_RETAIN.
+	(_bfd_elf_final_write_processing): Report if SHF_GNU_RETAIN is
+	not supported by the OSABI.
+	Adjust error messages.
+	* elflink.c (elf_link_input_bfd): Copy enabled has_gnu_osabi bits from
+	input BFD to output BFD.
+	(bfd_elf_gc_sections): gc_mark the section if SHF_GNU_RETAIN is set.
+
+2020-11-16  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+
+	* cpu-arm.c (processors): Add Cortex-A78C.
+
+2020-11-11  Tom Tromey  <tromey@adacore.com>
+
+	* archive.c (getuid, getgid): Move...
+	* sysdep.h (getuid, getgid): ...here.
+
+2020-11-09  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (alpha_vms_write_exec): Write 16 bits to eihd.alias.
+
+2020-11-09  Alan Modra  <amodra@gmail.com>
+
+	* archive.c (bfd_ar_hdr_from_filesystem): Use bfd_set_input_error
+	when stat of archive member fails.
+	* coff-rs6000.c (xcoff_write_archive_contents_old),
+	(xcoff_write_archive_contents_big): Likewise, and handle in-memory
+	bfd.
+
+2020-11-03  Alan Modra  <amodra@gmail.com>
+
+	* elf.c (bfd_section_from_shdr): Free sections_being_created.
+	Use bfd_zmalloc.
+
+2020-11-02  Alan Modra  <amodra@gmail.com>
+
+	PR 15146
+	PR 26314
+	PR 26530
+	PR 26806
+	* elflink.c (elf_link_add_object_symbols): Don't set def/ref flags
+	for plugin syms.  Do allow plugin syms to mark as-needed libs.
+
+2020-10-30  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gas/26703
+	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Generate
+	GNU_PROPERTY_X86_ISA_1_BASELINE for -z x86-64-baseline.
+
+2020-10-29  Nick Clifton  <nickc@redhat.com>
+
+	PR 26809
+	* elf.c (_bfd_elf_slurp_secondary_reloc_section): Use the correct
+	sized reloc reading function.
+	(_bfd_elf_write_secondary_reloc_section): Use the correct sized
+	reloc writing function.
+
+2020-10-28  Nick Clifton  <nickc@redhat.com>
+
+	PR 26774
+	* srec.c (srec_write_symbols): Do not emit symbols in sections
+	that have been removed from the output.
+
+2020-10-27  Nick Clifton  <nickc@redhat.com>
+
+	* elf64-hppa.c (elf_hppa_final_link_relocate): Check that the
+	symbol's section is being output before adding its offset to the
+	addend when processing R_PARISC_SECREL32.
+
+2020-10-25  Alan Modra  <amodra@gmail.com>
+
+	* vms-misc.c (_bfd_vms_save_counted_string): Count length byte
+	towards maxlen.
+
+2020-10-20  Dr. David Alan Gilbert  <dgilbert@redhat.com>
+
+	* po/es.po: Fix printf format.
+
+2020-10-16  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_elf_link_hash_table): Add last_iplt_index.
+	(riscv_elf_size_dynamic_sections): Initialize the last_iplt_index.
+	(riscv_elf_relocate_section): Use riscv_elf_append_rela.
+	(riscv_elf_finish_dynamic_symbol): If the use_elf_append_rela is
+	false, then we should add the dynamic relocs from the last of
+	the .rela.iplt, and don't use the riscv_elf_append_rela to add.
+
+2020-10-16  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c: Include "objalloc.h" since we need objalloc_alloc.
+	(riscv_elf_link_hash_table): Add loc_hash_table and loc_hash_memory
+	for local STT_GNU_IFUNC symbols.
+	(riscv_elf_got_plt_val): Removed.
+	(riscv_elf_local_htab_hash, riscv_elf_local_htab_eq): New functions.
+	Use to compare local hash entries.
+	(riscv_elf_get_local_sym_hash): New function.  Find a hash entry for
+	local symbol, and create a new one if needed.
+	(riscv_elf_link_hash_table_free): New function.  Destroy an riscv
+	elf linker hash table.
+	(riscv_elf_link_hash_table_create): Create hash table for local ifunc.
+	(riscv_elf_check_relocs): Create a fake global symbol to track the
+	local ifunc symbol.  Add support to check and handle the relocations
+	reference to ifunc symbols.
+	(allocate_dynrelocs): Let allocate_ifunc_dynrelocs and
+	allocate_local_ifunc_dynrelocs to handle the ifunc symbols if they
+	are defined and referenced in a non-shared object.
+	(allocate_ifunc_dynrelocs): New function.  Allocate space in .plt,
+	.got and associated reloc sections for ifunc dynamic relocs.
+	(allocate_local_ifunc_dynrelocs): Likewise, but for local ifunc
+	dynamic relocs.
+	(riscv_elf_relocate_section): Add support to handle the relocation
+	referenced to ifunc symbols.
+	(riscv_elf_size_dynamic_sections): Updated.
+	(riscv_elf_adjust_dynamic_symbol): Updated.
+	(riscv_elf_finish_dynamic_symbol): Finish up the ifunc handling,
+	including fill the PLT and GOT entries for ifunc symbols.
+	(riscv_elf_finish_local_dynamic_symbol): New function.  Called by
+	riscv_elf_finish_dynamic_symbol to handle the local ifunc symbols.
+	(_bfd_riscv_relax_section): Don't do the relaxation for ifunc.
+	* elfxx-riscv.c: Add R_RISCV_IRELATIVE.
+	* configure.ac: Link elf-ifunc.lo to use the generic ifunc support.
+	* configure: Regenerated.
+
+2020-10-16  Alan Modra  <amodra@gmail.com>
+
+	* elf32-arc.c (replace_func): Correct return type.
+	(get_replace_function): Use a replace_func function pointer rather
+	than void*.  Update associated ARC_RELOC_HOWTO define.
+
+2020-10-16  Alan Modra  <amodra@gmail.com>
+
+	* elf32-cr16.c: Formatting.
+	(cr16_elf_final_link_relocate): Sign extend rather than clumsy
+	"add or subtract" of offset value.  Simplify range checks.  Move
+	common code out of "if" branches.  Don't refetch insn fields
+	needlessly.
+
+2020-10-16  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_relocate_section): Tighten sanity check
+	on R_PPC64_GOT_LO_DS and R_PPC64_GOT_HA instructions.
+
+2020-10-09  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (write_plt_relocs_for_local_syms): Don't do local
+	entry offset optimisation.
+
+2020-10-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gas/26703
+	* elf-linker-x86.h (elf_linker_x86_params): Add isa_level.
+	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Merge
+	GNU_PROPERTY_X86_ISA_1_V[234].
+	(_bfd_x86_elf_link_setup_gnu_properties): Generate
+	GNU_PROPERTY_X86_ISA_1_V[234] for -z x86-64-v[234].
+
+2020-10-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26711
+	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Merge -z ibt
+	and -z shstk only with GNU_PROPERTY_X86_FEATURE_1_AND.
+
+2020-10-06  Brandon Bergren  <bdragon@FreeBSD.org>
+
+	* config.bfd: Add powerpc64le-*-freebsd*.
+	* configure.ac: Add powerpc_elf64_fbsd_le_vec.
+	* elf64-ppc.c (TARGET_LITTLE_SYM, TARGET_LITTLE_NAME): Define for
+	freebsd.
+	* targets.c (powerpc_elf64_fbsd_le_vec): Declare.
+	(_bfd_target_vector): Add it.
+	* configure: Regenerate.
+
+2020-10-05  Kamil Rytarowski  <n54@gmx.com>
+
+	* config.bfd (aarch64-*-netbsd*, aarch64_be-*-netbsd*): Add target.
+
+2020-10-05  Nick Clifton  <nickc@redhat.com>
+
+	PR 26253
+	* elf.c (_bfd_elf_setup_sections): Do not complain about an
+	sh_link value of zero when the SLF_LINK_ORDER flag is set.
+	(assign_section_numbers): Likewise.
+
+2020-10-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR 26681
+	* elflink.c (bfd_elf_gc_sections): Do not arbitrarily keep note
+	sections which are linked to another section.
+
+2020-09-30  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+
+	* cpu-arm.c: Add cortex-a78 and cortex-a78ae.
+
+2020-09-28  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+
+	* cpu-arm.c: (processors) Add Cortex-X1.
+
+2020-09-28  Alan Modra  <amodra@gmail.com>
+
+	PR 26656
+	* elf64-ppc.c (ppc_build_one_stub, ppc_size_one_stub): Check for
+	NULL stub_entry->h before calling is_tls_get_addr.
+
+2020-09-26  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (GLINK_PLTRESOLVE_SIZE): Depend on has_plt_localentry0.
+	(LD_R0_0R11, ADD_R11_R0_R11): Define.
+	(ppc64_elf_tls_setup): Disable params->plt_localentry0 when power10
+	code detected.
+	(ppc64_elf_size_stubs): Update __glink_PLTresolve eh_frame.
+	(ppc64_elf_build_stubs): Move r2 save to start of __glink_PLTresolve,
+	and only emit for has_plt_localentry0.  Don't use r2 in the stub.
+
+2020-09-24  Alan Modra  <amodra@gmail.com>
+
+	PR 26656
+	* elf64-ppc.c (plt_stub_size): Add "odd" param.  Use it with
+	size_power10_offset rather than calculating from start of stub.
+	Add size for notoc tls_get_addr_opt stub.
+	(plt_stub_pad): Add "odd" param, pass to plt_stub_size.
+	(build_tls_get_addr_head, build_tls_get_addr_tail): New functions.
+	(build_tls_get_addr_stub): Delete.
+	(ppc_build_one_stub): Use a temp for htab->params->stub_bfd.
+	Emit notoc tls_get_addr_opt stub.  Move eh_frame code to
+	suit.  Adjust code to use bfd_tls_get_addr_head/tail in place
+	of build_tls_get_addr_stub.
+	(ppc_size_one_stub): Size notoc tls_get_addr_opt stub.
+	Adjust plt_stub_size and plt_stub_pad calls.  Correct "odd"
+	when padding stub.  Size eh_frame for notoc stub too.
+	Correct lr_restore value.
+	(ppc64_elf_relocate_section): Don't skip over first insn of
+	notoc tls_get_addr_opt stub.
+
+2020-09-24  Alan Modra  <amodra@gmail.com>
+
+	PR 26655
+	* elf64-ppc.c (ppc64_elf_func_desc_adjust): Rename to..
+	(ppc64_elf_edit): Call params->edit.
+	(ppc64_elf_tls_setup): Don't call _bfd_elf_tls_setup.  Return a
+	bfd_boolean.
+	* elf64-ppc.h (struct ppc64_elf_params): Add "edit".
+	(ppc64_elf_tls_setup): Update declaration.
+
+2020-09-21  Alan Modra  <amodra@gmail.com>
+
+	PR 26569
+	* elfxx-riscv.c (howto_table): Correct size and bitsize of
+	R_RISCV_RVC_BRANCH, R_RISCV_RVC_JUMP, and R_RISCV_RVC_LUI.
+	Correct size for R_RISCV_TLS_DTPMOD32, R_RISCV_TLS_DTPREL32,
+	R_RISCV_CALL, and R_RISCV_CALL_PLT.  Make R_RISCV_TPREL_ADD and
+	R_RISCV_ALIGN like R_RISCV_NONE.  Correct dst_mask many relocs.
+
+2020-09-17  Mikael Pettersson  <mikpelinux@gmail.com>
+
+	PR ld/18808
+	* elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Skip IFUNC
+	relocations in debug sections, change abort to _bfd_error_handler.
+
+2020-09-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26583
+	* config.bfd (targ64_selvecs, targ_selvecs): Add x86_64_pe_vec
+	to x86_64_pei_vec.
+	* reloc.c: Include "coff/internal.h".
+	(bfd_perform_relocation): Adjust relocation for PE/x86-64 inputs.
+
+2020-09-16  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (elf_symbol_from): Remove unused ABFD parameter.
+	* elf.c (ignore_section_sym, _bfd_elf_copy_private_symbol_data),
+	(swap_out_syms): Adjust elf_symbol_from invocation.
+
+2020-09-16  Alan Modra  <amodra@gmail.com>
+
+	PR 26623
+	* elf-bfd.h (elf_symbol_from): Exclude synthetic symbols.
+
+2020-09-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* coff-x86_64.c (howto_table): Display PE relocation names.
+
+2020-09-15  Hans-Peter Nilsson  <hp@axis.com>
+
+	PR ld/26589
+	* elf32-cris.c (cris_elf_check_relocs): Add missing NULL check
+	on argument before calling UNDEFWEAK_NO_DYNAMIC_RELOC.
+
+2020-09-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26391
+	* elflink.c (elf_final_link_info): Add local_hash_table.
+	(local_hash_entry): New.
+	(local_hash_newfunc): Likewise.
+	(elf_link_output_symstrtab): Append ".COUNT" to duplicated local
+	symbols.
+	(bfd_elf_final_link): Initialize and free local_hash_table for
+	"-z unique-symbol".
+
+2020-09-10  Siddhesh Poyarekar  <siddesh.poyarekar@arm.com>
+
+	* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Revert
+	changes in 7e05773767820b441b23a16628b55c98cb1aef46.  Set
+	error for undefined symbol in BFD_RELOC_AARCH64_BRANCH19 and
+	BFD_RELOC_AARCH64_TSTBR14 relocations.
+
+2020-09-09  Nick Clifton  <nickc@redhat.com>
+
+	* cofflink.c (coff_link_check_archive_element): Move the check for
+	coff type input to the start of the function.
+
+2020-09-09  Alan Modra  <amodra@gmail.com>
+
+	* libbfd-in.h (_bfd_write_unsigned_leb128): Declare.
+	* libbfd.h: Regenerate.
+
+2020-09-08  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+	    Kuan-Lin Chen  <kuanlinchentw@gmail.com>
+
+	* bfd-in2.h (bfd_reloc_code_real): Add
+	BFD_RELOC_MSP430_{SET,SUB}_ULEB128.
+	* elf32-msp430.c (msp430_elf_ignore_reloc): New.
+	(elf_msp430_howto_table): Add R_MSP430{,X}_GNU_{SET,SUB}_ULEB128.
+	(msp430_reloc_map): Add R_MSP430_GNU_{SET,SUB}_ULEB128.
+	(msp430x_reloc_map): Add R_MSP430X_GNU_{SET,SUB}_ULEB128.
+	(write_uleb128): New.
+	(msp430_final_link_relocate): Handle R_MSP430{,X}_GNU_{SET,SUB}_ULEB128.
+	* libbfd.c (_bfd_write_unsigned_leb128): New.
+	* libbfd.h (_bfd_write_unsigned_leb128): New prototype.
+	Add BFD_RELOC_MSP430_{SET,SUB}_ULEB128.
+	* reloc.c: Document BFD_RELOC_MSP430_{SET,SUB}_ULEB128.
+
+2020-09-08  Alex Coplan  <alex.coplan@arm.com>
+
+	* archures.c (bfd_mach_aarch64_8R): New.
+	* bfd-in2.h: Regenerate.
+	* cpu-aarch64.c (bfd_aarch64_arch_v8_r): New.
+	(bfd_aarch64_arch_ilp32): Update tail pointer.
+
+2020-09-08  Alan Modra  <amodra@gmail.com>
+
+	PR 13250
+	PR 26580
+	* elflink.c (_bfd_elf_merge_symbol): Make "override" a bfd**.
+	Return oldbfd in override when old common should override new
+	common.
+	(_bfd_elf_add_default_symbol): Adjust to suit.
+	(elf_link_add_object_symbols): Likewise.  Pass "override" to
+	_bfd_generic_link_add_one_symbol.  Save and restore common u.c.p
+	field for --as-needed shared libraries.  Revert pr13250 changes.
+
+2020-09-08  Nick Clifton  <nickc@redhat.com>
+
+	* plugin.c (bfd_plugin_canonicalize_symtab): Handle the case of an
+	unrecognized symbol type in a weak definition.
+
+2020-09-04  Alan Modra  <amodra@gmail.com>
+
+	PR 26574
+	* elfcode.h (elf_object_p): Sanity check section header offset.
+	* elf.c (_bfd_elf_slurp_secondary_reloc_section): Sanity check
+	sh_entsize.
+
+2020-09-04  Alan Modra  <amodra@gmail.com>
+
+	PR 15146
+	PR 26314
+	PR 26530
+	* elflink.c (elf_link_add_object_symbols): Do set def_regular
+	and ref_regular for IR symbols.  Don't clear dynsym, allowing
+	IR symbols to load --as-needed shared libraries, but prevent
+	IR symbols from becoming dynamic.
+
+2020-09-03  Nick Clifton  <nickc@redhat.com>
+
+	PR 26521
+	* elf.c (_bfd_elf_write_secondary_reloc_section): Check for
+	secondary reloc sections with a zero sh_entsize field.
+
+2020-09-03  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_i_or_e_p): Minor cleanup for warnings/errors.
+	(riscv_merge_std_ext): Likewise.
+	(riscv_merge_arch_attr_info): Likewise.
+	(riscv_merge_attributes): Likewise and fix comment typos.
+
+2020-09-03  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_version_mismatch): Change the return type
+	from void to bfd_boolean.  Report warnings rather than errors
+	when the ISA versions are mis-matched.  Afterwards, remember to
+	update the output ISA versions to the newest ones.
+	(riscv_merge_std_ext): Allow to link objects with different
+	standard ISA versions.  Try to add output ISA versions to
+	merged_subsets first.
+	(riscv_merge_multi_letter_ext): Likewise.  But for standard additional
+	ISA and non-standard ISA versions.
+
+2020-09-03  Kito Cheng  <kito.cheng@sifive.com>
+
+	* elfnn-riscv.c (riscv_merge_std_ext): Fix to report the correct
+	error message when the versions of extension are mis-matched.
+	* elfxx-riscv.c (riscv_parse_subset): Don't issue the error when
+	the string is empty.
+
+2020-09-03  Alan Modra  <amodra@gmail.com>
+
+	* xcofflink.c (xcoff_get_archive_info): Allocate xcoff_archive_info
+	on the output bfd objalloc memory.
+
+2020-09-02  Alan Modra  <amodra@gmail.com>
+
+	* elfnn-aarch64.c (elfNN_aarch64_relocate_section): Correct type
+	of constant shifted left.
+
+2020-09-02  Alan Modra  <amodra@gmail.com>
+
+	* elf32-pru.c (pru_elf32_do_ldi32_relocate): Use an unsigned
+	type for "relocation".
+
+2020-09-01  Alan Modra  <amodra@gmail.com>
+
+	* reloc.c (N_ONES): Handle N=0.
+	* elf32-arm.c (elf32_arm_howto_table_1): Set complain_overflow_dont
+	for R_ARM_TLS_DESCSEQ and R_ARM_THM_TLS_DESCSEQ.
+
+2020-09-01  Alan Modra  <amodra@gmail.com>
+
+	PR 26429
+	* elf32-arm.c (elf32_arm_allocate_local_sym_info): Allocate arrays
+	in descending order of alignment.
+
+2020-09-01  Alan Modra  <amodra@gmail.com>
+
+	PR 26423
+	* elf32-arm.c (calculate_group_reloc_mask): Use 3u in shift.
+
+2020-08-31  Alan Modra  <amodra@gmail.com>
+
+	PR 26493
+	* elfnn-riscv.c (riscv_make_plt_header): Cast PLT_HEADER_SIZE to
+	unsigned when using with RISCV_ITYPE.
+	(_bfd_riscv_relax_call): Use an unsigned foff.
+
+2020-08-31  Alan Modra  <amodra@gmail.com>
+
+	PR 26476
+	PR 26477
+	* elfxx-mips.c (CRINFO_CTYPE, CRINFO_RTYPE, CRINFO_DIST2TO),
+	(CRINFO_RELVADDR): Make unsigned.
+	(mips_elf_nullify_got_load): Use unsigned constant when shifting
+	into sign bit.
+
+2020-08-31  Alan Modra  <amodra@gmail.com>
+
+	PR 26466
+	* mep-relocs.pl (emit_apply): Handle HI16S adjustment.  Use "u"
+	variable and rewrite signed overflow check.
+	* elf32-mep.c: Regenerate.
+	(mep_final_link_relocate): Delete "s".
+
+2020-08-31  Alan Modra  <amodra@gmail.com>
+
+	PR 26461
+	* elfxx-ia64.c (ia64_elf_install_value): Make expressions unsigned
+	that might shift values into sign bit.
+
+2020-08-31  Alan Modra  <amodra@gmail.com>
+
+	PR 26445
+	* elf32-csky.c (csky_relocate_contents): Make relocation a bfd_vma,
+	and similarly for variables dealing with overflow.
+
+2020-08-31  Alan Modra  <amodra@gmail.com>
+
+	PR 26442
+	* elf32-crx.c (crx_elf_final_link_relocate): Calculate reloc_bits
+	without undefined behaviour.  Tidy excess casts.
+
+2020-08-31  Alan Modra  <amodra@gmail.com>
+
+	* elf-m10300.c (mn10300_elf_relax_delete_bytes): Calculate
+	alignment from reloc addend after reloc type R_MN10300_ALIGN is
+	found.
+
+2020-08-30  Alan Modra  <amodra@gmail.com>
+
+	PR 26435
+	PR 26436
+	* elf32-cr16.c (cr16_elf_final_link_relocate): Calculate reloc_bits
+	without undefined behaviour.
+
+2020-08-29  Nick Clifton  <nickc@redhat.com>
+
+	PR 26520
+	* dwarf2.c (scan_unit_for_symbols): Add member entries to the
+	variable table.
+
+2020-08-29  Alan Modra  <amodra@gmail.com>
+
+	PR 26459
+	* elfnn-ia64.c (get_dyn_sym_info): Don't bsearch or look at last
+	element when count is zero.  bfd_realloc when shrinking.
+
+2020-08-28  Alan Modra  <amodra@gmail.com>
+
+	PR 26418
+	* ecofflink.c (bfd_ecoff_write_accumulated_debug): Don't write
+	zero size buffers.
+
+2020-08-28  Alan Modra  <amodra@gmail.com>
+
+	PR 26418
+	* ecofflink.c (WRITE): Really don't write zero size chunks.
+
+2020-08-28  Tuckker  <tuckkern+sourceware@gmail.com>
+
+	PR 26543
+	* linker.c (bfd_generic_define_common_symbol): Force the alignment
+	to 1 if the section has now alignment requirement.
+
+2020-08-28  Cooper Qu  <cooper.qu@linux.alibaba.com>
+
+	* elf32-csky.c (csky_archs): Fix arch names.
+	(csky_find_arch_with_name): New.
+	(elf32_csky_merge_attributes): New.
+	(csky_elf_merge_private_bfd_data): Add process of merge
+	attribute section.
+	(elf32_csky_obj_attrs_arg_type): New.
+	(elf32_csky_obj_attrs_handle_unknown): New.
+	(elf_backend_obj_attrs_vendor): Define.
+	(elf_backend_obj_attrs_section): Define.
+	(elf_backend_obj_attrs_arg_type): Define.
+	(elf_backend_obj_attrs_section_type): Define.
+
+2020-08-28  Nick Clifton  <nickc@redhat.com>
+
+	PR19011
+	* cofflink.c (_bfd_coff_generic_relocate_section): Provide a value
+	for undefined symbols which will not generate extra warning
+	messages about truncated relocs.
+
+2020-08-28  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_elf_check_relocs): Treat R_RISCV_CALL
+	and R_RISCV_CALL_PLT as the same in the riscv_elf_check_relocs.
+	(riscv_elf_relocate_section): Remove the R_RISCV_CALL for the
+	unresolved reloc checks.
+
+2020-08-27  John David Anglin  <danglin@gcc.gnu.org>
+
+	PR 26356
+	* som.c (som_bfd_copy_private_section_data): Issue error when a
+	subspace is specified without its containing space.
+
+2020-08-27  Alan Modra  <amodra@gmail.com>
+
+	PR 26469
+	* elflink.c: Include limits.h.
+	(CHAR_BIT): Provide fallback define.
+	(set_symbol_value): Correct complex reloc comment.
+	(undefined_reference): Set bfd_error.
+	(BINARY_OP_HEAD, BINARY_OP_TAIL): Split out from..
+	(BINARY_OP): ..this.
+	(eval_symbol): Limit shifts.  Force unsigned for left shift.
+	Catch divide by zero.
+	* configure.ac (AC_CHECK_HEADERS): Combine, sort and add limits.h.
+	* configure: Regenerate.
+	* config.in: Regenerate.
+
+2020-08-27  Alan Modra  <amodra@gmail.com>
+
+	PR 26462
+	* reloc.c (bfd_check_overflow): Return early if zero bitsize.
+
+2020-08-27  Alan Modra  <amodra@gmail.com>
+
+	* elf32-arm.c (elf32_arm_final_link_relocate): Don't segfault
+	on sym_sec not being output.
+
+2020-08-27  Alan Modra  <amodra@gmail.com>
+
+	PR 26416
+	* elf64-alpha.c (elf64_alpha_relax_tls_get_addr): Correct "dynamic".
+
+2020-08-26  Nick Clifton  <nickc@redhat.com>
+
+	PR 26433
+	* elf32-avr.c (avr_final_link_relocate):  Fix undefined shift
+	behaviour.
+	(avr_elf32_load_records_from_section): Use bfd_get_16 and
+	bfd_get_32 to load values from potentially unaligned pointers.
+
+	PR 26416
+	* elf64-alpha.c (elf64_alpha_relax_tls_get_addr): Test for and
+	ignore local symbols.
+	(elf64_alpha_relax_got_load): Do not check for local dynamic
+	symbols.
+	(OP_LDA, OP_LDAH, OP_LDQ, OP_BR, OP_BSR): Use unsigned constant
+	values.
+	(INSN_A) Cast the A parameter to unsigned.
+	(INSN_AB): Define in terms of INSN_A.
+	(INSN_ABC): Likewise.
+	(INSN_ABO): Likewise.
+	(INSN_AD): Likewise.
+
+	PR 26411
+	* elfnn-aarch64.c (elfNN_aarch64_relocate_section): Use an
+	unsigned long constant when creating a mask to test for alignment
+	issues.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26507
+	* elf32-xtensa.c (find_removed_literal): Don't bsearch empty map.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26506
+	* elf32-xtensa.c (elf_xtensa_combine_prop_entries): Return early
+	when section is empty.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26498
+	* elf32-spu.c (find_function_stack_adjust): Use unsigned vars to
+	avoid UB left shift.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26484
+	PR 26485
+	PR 26486
+	PR 26487
+	PR 26488
+	PR 26490
+	* elf64-ppc.c (is_tls_get_addr): Avoid UB &h->elf when h is NULL.
+	(ppc64_elf_tls_setup): Likewise.
+	(branch_reloc_hash_match): Likewise.
+	(build_plt_stub): Likewise.
+	(ppc64_elf_relocate_section): Likewise.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26478
+	* mmo.c (mmo_write_symbols_and_terminator): Don't memcpy empty table.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26475
+	* elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections): Check
+	sstubs->contents != NULL.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26453
+	* som.c (som_prep_for_fixups): Return early when no symbols.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26418
+	* ecofflink.c (WRITE): Don't write size 0 chunks.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	* bfdio.c (bfd_get_file_size): Don't segv on NULL adata.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26415
+	* vms-misc.c (vms_time_t_to_vms_time): Don't use unsigned short vars.
+
+2020-08-26  David Faust  <david.faust@oracle.com>
+
+	* archures.c (bfd_mach_xbpf): Define.
+	* bfd-in2.h: Regenerate.
+	* cpu-bpf.c (bfd_xbpf_arch) New.
+	(bfd_bpf_arch) Update next in list field to point to xbpf arch.
+
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	* archures.c (bfd_mach_ck860): Define.
+
+2020-08-25  Mark Wielaard  <mark@klomp.org>
+
+	*  dwarf2.c (struct dwarf2_debug_file): Add dwarf_rnglists_buffer
+	and dwarf_rnglists_size fields.
+	(dwarf_debug_sections): Add debug_rnglists.
+	(dwarf_debug_section_enum): Likewise.
+	(read_debug_rnglists): New function.
+	(read_rangelist): New function to call either read_ranges or
+	read_rnglists. Rename original function to...
+	(read_ranges): ...this.
+	(read_rnglists): New function.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26505
+	* elf32-xstormy16.c (xstormy16_elf_relax_section): Check
+	is_elf_hash_table before accessing elf fields.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26482
+	* coff-rs6000.c (_bfd_xcoff_sizeof_headers): Ignore sections that
+	won't be output.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26463
+	* elf32-m32c.c (m32c_elf_relax_section): Check is_elf_hash_table
+	before accessing elf fields.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26452
+	* som.c (som_compute_checksum): XOR 32-bit words in header,
+	not unsigned long sized words.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26430
+	* elf-nacl.c (nacl_modify_segment_map): Correct alloc size and
+	amount copied for elf_segment_map defined with one element
+	sections array.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26422
+	* elf32-arm.c (elf32_arm_final_link_relocate): Use the appropriate
+	bfd_get_x size function to read addends out of fields.  Apply
+	rightshift adjustment too.  Don't apply the now unnecessary
+	howto->size shift to branch REL addends.  Don't refetch R_ARM_ABS8
+	and R_ARM_ABS16 addends.  Don't refetch thumb branch addends.
+	Correct R_ARM_THM_JUMP6 addend.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26419
+	* elf-m10300.c (mn10300_elf_relax_section): Don't attempt access
+	before start of section.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	* elf-m10300.c (elf32_mn10300_hash_table): Test is_elf_hash_table
+	before accessing elf_hash_table_id.
+	* elf32-arc.c (elf_arc_hash_table): Likewise.
+	* elf32-arm.c (elf32_arm_hash_table): Likewise.
+	* elf32-avr.c (avr_link_hash_table): Likewise.
+	* elf32-bfin.c (bfinfdpic_hash_table): Likewise.
+	* elf32-cris.c (elf_cris_hash_table): Likewise.
+	* elf32-csky.c (csky_elf_hash_table): Likewise.
+	* elf32-frv.c (frvfdpic_hash_table): Likewise.
+	* elf32-hppa.c (hppa_link_hash_table): Likewise.
+	* elf32-lm32.c (lm32_elf_hash_table): Likewise.
+	* elf32-m32r.c (m32r_elf_hash_table): Likewise.
+	* elf32-m68hc1x.h (m68hc11_elf_hash_table): Likewise.
+	* elf32-m68k.c (elf_m68k_hash_table): Likewise.
+	* elf32-metag.c (metag_link_hash_table): Likewise.
+	* elf32-microblaze.c (elf32_mb_hash_table): Likewise.
+	* elf32-nds32.h (nds32_elf_hash_table): Likewise.
+	* elf32-or1k.c (or1k_elf_hash_table): Likewise.
+	* elf32-s390.c (elf_s390_hash_table): Likewise.
+	* elf32-sh.c (sh_elf_hash_table): Likewise.
+	* elf32-spu.c (spu_hash_table): Likewise.
+	* elf32-tilepro.c (tilepro_elf_hash_table): Likewise.
+	* elf32-xtensa.c (elf_xtensa_hash_table): Likewise.
+	* elf64-alpha.c (alpha_elf_hash_table): Likewise.
+	* elf64-hppa.c (hppa_link_hash_table): Likewise.
+	* elf64-ia64-vms.c (elf64_ia64_hash_table): Likewise.
+	* elf64-s390.c (elf_s390_hash_table): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_hash_table): Likewise.
+	* elfnn-riscv.c (riscv_elf_hash_table): Likewise.
+	* elfxx-mips.c (mips_elf_hash_table): Likewise.
+	* elfxx-sparc.h (_bfd_sparc_elf_hash_table): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_hash_table): Likewise.
+
+2020-08-21  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* elf.c (elfcore_grok_win32pstatus): Change name_size to unsigned
+	int. Use '%u' format with  _bfd_error_handler to render it.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26489
+	* elf64-ppc.c (ppc64_elf_size_stubs): Test code_sec->has_toc_reloc
+	and code_sec->makes_toc_func_call before sec_info[code_sec->id].
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26492
+	* elf64-ppc.c (ppc_hash_table): Test is_elf_hash_table before
+	accessing elf_hash_table_id.
+
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+	PR 26483
+	* elf32-ppc.c (ppc_elf_hash_table): Test is_elf_hash_table before
+	accessing elf_hash_table_id.
+
+2020-08-24  Mark Wielaard  <mark@klomp.org>
+
+	* dwarf2.c (read_attribute_value): Handle DW_FORM_data16.
+	(read_formatted_entries): Likewise. And skip zero entry.
+
+2020-08-24  Cooper Qu  <cooper.qu@linux.alibaba.com>
+
+	* bfd-in2.h (bfd_mach_ck860): New.
+	* cpu-csky.c (arch_info_struct): Add item for CK860.
+
+2020-08-24  Alan Modra  <amodra@gmail.com>
+
+	* elf32-ppc.c (ppc_elf_check_relocs): Set has_tls_reloc for
+	high part tprel16 relocs.
+	(ppc_elf_tls_optimize): Sanity check high part tprel16 relocs.
+	Clear do_tls_opt on odd instructions.
+	(ppc_elf_relocate_section): Move TPREL16_HA/LO optimisation later.
+	Don't sanity check them here.
+	* elf64-ppc.c (ppc64_elf_check_relocs): Set has_tls_reloc for
+	high part tprel16 relocs.
+	(ppc64_elf_tls_optimize): Sanity check high part tprel16 relocs.
+	Clear do_tls_opt on odd instructions.
+	(ppc64_elf_relocate_section): Don't sanity check TPREL16_HA.
+
+2020-08-23  John David Anglin  <danglin@gcc.gnu.org>
+
+	PR binutils/26357
+	* configure.ac: Disable plugins by default on 32-bit hppa*-*-hpux*.
+	* configure: Regenerate.
+
+2020-08-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26382
+	* elflink.c (elf_link_output_symstrtab): Keep only one '@' for
+	versioned symbols, which are defined in shared objects, in
+	symbol string table.
+
+2020-08-21  Nick Clifton  <nickc@redhat.com>
+
+	* elfnn-aarch64.c (_bfd_aarch64_erratum_835769_scan): Only sort
+	the data map if there are entries in it.
+	(_bfd_aarch64_erratum_843419_scan): Likewise.
+
+2020-08-21  Jan Beulich  <jbeulich@suse.com>
+
+	* peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Check
+	last byte of debug dir, not first.
+
+2020-08-20  Nick Clifton  <nickc@redhat.com>
+
+	PR 26428
+	* bfd.c (bfd_update_compression_header): Also set the sh_addralign
+	field in the ELF header of the compressed sections.
+
+2020-08-20  Nick Clifton  <nickc@redhat.com>
+
+	PR 26406
+	* elf-bfd.h (struct bfd_elf_section_data): Add
+	has_secondary_relocs field.
+	* elf.c (_bfd_elf_copy_special_section_fields): Set the
+	has_secondary_relocs field for sections which have associated
+	secondary relocs.
+	* elfcode.h (elf_write_relocs): Only call write_secondary_relocs
+	on sections which have associated secondary relocs.
+
+2020-08-15  Alan Modra  <amodra@gmail.com>
+
+	* elf32-frv.c (elf32_frv_add_symbol_hook): Set SEC_SMALL_DATA on
+	small common section.
+	* elf32-m32r.c (m32r_elf_add_symbol_hook): Likewise.
+	* elf32-microblaze.c (microblaze_elf_add_symbol_hook): Likewise.
+	* elf32-nds32.c (nds32_elf_add_symbol_hook): Likewise.
+	* elf32-nios2.c (nios2_elf_add_symbol_hook): Likewise.
+	* elf32-ppc.c (ppc_elf_add_symbol_hook): Likewise.
+	* elf32-score.c (s3_bfd_score_elf_add_symbol_hook): Likewise.
+	* elf32-score7.c (s7_bfd_score_elf_add_symbol_hook): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_add_symbol_hook): Likewise.
+	* elf32-v850.c (v850_elf_check_relocs): Likewise.
+	(v850_elf_add_symbol_hook): Likewise.
+	* elf64-alpha.c (elf64_alpha_add_symbol_hook): Likewise.
+	* elf64-ia64-vms.c (elf64_ia64_add_symbol_hook): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_add_symbol_hook): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_add_symbol_hook): Likewise.
+
+2020-08-15  Alan Modra  <amodra@gmail.com>
+
+	PR 26389
+	* syms.c (bfd_decode_symclass): Choose 'c' for commons only when
+	SEC_SMALL_DATA.
+	* elf32-m32r.c (_bfd_m32r_elf_symbol_processing): Set SEC_SMALL_DATA
+	on small common section.
+	* elf32-score.c (s3_bfd_score_elf_symbol_processing): Likewise.
+	* elf32-score7.c (s7_bfd_score_elf_symbol_processing): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_symbol_processing): Likewise.
+	* elf32-v850.c (v850_elf_symbol_processing): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_symbol_processing): Likewise.
+	* ecoff.c (ecoff_set_symbol_info, ecoff_link_add_externals): Likewise.
+
+2020-08-14  Alan Modra  <amodra@gmail.com>
+
+	* hash.c (bfd_hash_set_default_size): Use higher_prime_number
+	rather than another copy of primes.  Increase maximum default
+	size allowed.
+
+2020-08-13  Alan Modra  <amodra@gmail.com>
+
+	* config.bfd: Obsolete arm*-*-symbianelf*, and ia64*-*-*.
+
+2020-08-13  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.h (struct ppc64_elf_params): Add no_pcrel_opt.
+	* elf64-ppc.c (ppc64_elf_relocate_section): Disable GOT reloc
+	optimizations when --no-toc-optimize.  Disable R_PPC64_PCREL_OPT
+	optimization when --no-pcrel-optimize.
+
+2020-08-13  Alan Modra  <amodra@gmail.com>
+
+	PR 26348
+	* bfd.c (struct bfd): Add read_only.
+	* elfcode.h (elf_swap_shdr_in): Test both sh_offset and sh_size.
+	Set read_only on warning.
+	(elf_object_p): Sanity check program header alignment.  Set
+	read_only on warning.
+	* bfd-in2.h: Regenerate.
+
+2020-08-12  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* elf.c (elfcore_grok_win32pstatus): Use unsigned int for
+	win32pstatus note type to avoid signedness comparison warning.
+
+2020-07-21  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* elf.c (elfcore_grok_win32pstatus): Warn on malformed
+	win32pstatus notes, and return TRUE so we continue rather than
+	stopping as if it was an error.
+
+2020-07-01  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* elf.c (elfcore_grok_win32pstatus): Handle NOTE_INFO_MODULE64.
+
+2020-07-11  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* elf.c (elfcore_grok_win32pstatus): Don't apply size constraint
+	for NOTE_INFO_THREAD to all win32pstatus ELF notes, instead apply
+	appropriate size constraint for each win32pstatus note type.
+
+2020-07-01  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* elf.c (elfcore_grok_win32pstatus): Don't hardcode the size of
+	the Win32 API thread CONTEXT type read from a NOTE_INFO_THREAD
+	win32pstatus note.
+
+2020-07-11  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* elf.c (NOTE_INFO{_PROCESS,_THREAD,_MODULE}): Define.
+	(elfcore_grok_win32pstatus): Use.
+
+2020-07-01  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* elf.c (elfcore_grok_win32pstatus): Fix the offset used to read
+	the tid from a win32pstatus NOTE_INFO_THREAD ELF note.  Fix
+	offsets used to read NOTE_INFO_PROCESS.
+
+2020-08-12  Nick Clifton  <nickc@redhat.com>
+
+	* po/ru.po: Updated Russian translation.
+	* po/sr.po: Updated Serbian translation.
+
+2020-08-07  David Faust  <david.faust@oracle.com>
+
+	* elf64-bpf.c (bpf_elf_relocate_section): Ensure signed division for
+	DISP16 and DISP32 relocations.
+
+2020-08-05  David Faust  <david.faust@oracle.com>
+
+	* elf64-bpf.c (bpf_elf_generic_reloc): New function.
+	(bpf_elf_howto_table): Use it here.
+	(bpf_elf_relocate_section): Use addends recorded in input_bfd for
+	instruction and data relocations.
+
+2020-08-03  Alan Modra  <amodra@gmail.com>
+
+	* vms-lib.c (vms_traverse_index): Sanity check size remaining
+	before accessing vms_idx or vms_elfidx.
+
+2020-08-03  Alan Modra  <amodra@gmail.com>
+
+	PR 26330
+	* elf.c (_bfd_elf_get_symtab_upper_bound): Sanity check symbol table
+	size against file size.  Correct LONG_MAX limit check.
+	(_bfd_elf_get_dynamic_symtab_upper_bound): Likewise.
+	(_bfd_elf_get_reloc_upper_bound): Don't check file size if writing.
+	(_bfd_elf_get_dynamic_reloc_upper_bound): Likewise.
+	* elf64-x86-64-.c (elf_x86_64_get_synthetic_symtab): Use
+	bfd_malloc_and_get_section.
+
+2020-07-31  Alan Modra  <amodra@gmail.com>
+
+	PR 26314
+	* elflink.c (bfd_elf_link_record_dynamic_symbol): Don't allow
+	IR symbols to become dynamic.
+	(elf_link_add_object_symbols): Don't exclude IR symbols when
+	deciding whether an as-needed shared library is needed.
+
+2020-07-30  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	PR ld/26312
+	* elfnn-aarch64.c (elfNN_aarch64_init_small_plt0_entry): Set sh_entsize
+	to 0.
+	(elfNN_aarch64_finish_dynamic_sections): Remove sh_entsize setting.
+
+2020-07-30  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* bfd.m4 (BFD_SYS_PROCFS_H): New macro.
+	(BFD_HAVE_SYS_PROCFS_TYPE): Require BFD_SYS_PROCFS_H.
+	Don't define _STRUCTURED_PROC.
+	(BFD_HAVE_SYS_PROCFS_TYPE_MEMBER): Likewise.
+	* elf.c [HAVE_SYS_PROCFS_H] (_STRUCTURED_PROC): Don't define.
+	* configure.ac: Use BFD_SYS_PROCFS_H to check for <sys/procfs.h>.
+	* configure, config.in: Regenerate.
+	* Makefile.am (AM_CPPFLAGS): Add LARGEFILE_CPPFLAGS.
+	* Makefile.in, doc/Makefile.in: Regenerate.
+
+2020-07-30  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-bfd.h (sym_cache): Moved before elf_link_hash_table.
+	(elf_link_hash_table): Add sym_cache.
+	* elf32-arm.c (elf32_arm_link_hash_table): Remove sym_cache.
+	(elf32_arm_check_relocs): Updated.
+	(elf32_arm_size_dynamic_sections): Likewise.
+	* elf32-bfin.c (bfin_link_hash_table): Removed.
+	(bfin_link_hash_newfunc): Updated.
+	(bfin_hash_table): Removed.
+	* elf32-csky.c (csky_elf_link_hash_table): Remove sym_cache.
+	(csky_elf_check_relocs): Updated.
+	* elf32-hppa.c (elf32_hppa_link_hash_table): Remove sym_cache.
+	(elf32_hppa_check_relocs): Updated.
+	* elf32-i386.c (elf_i386_tls_transition): Updated.
+	(elf_i386_convert_load_reloc): Likewise.
+	(elf_i386_check_relocs): Likewise.
+	* elf32-m32r.c (elf_m32r_link_hash_table): Removed.
+	(m32r_elf_hash_table): Updated.
+	(m32r_elf_link_hash_table_create): Likewise.
+	(m32r_elf_create_dynamic_sections): Likewise.
+	(m32r_elf_adjust_dynamic_symbol): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(m32r_elf_size_dynamic_sections): Likewise.
+	(m32r_elf_relocate_section): Likewise.
+	(m32r_elf_finish_dynamic_symbol): Likewise.
+	(m32r_elf_check_relocs): Likewise.
+	* elf32-m68hc1x.h (m68hc11_elf_link_hash_table): Remove
+	sym_cache.
+	* elf32-m68k.c (elf_m68k_link_hash_table): Likewise.
+	(elf_m68k_check_relocs): Updated.
+	* elf32-metag.c (elf_metag_link_hash_table): Remove sym_cache.
+	(elf_metag_check_relocs): Updated.
+	* elf32-microblaze.c (elf32_mb_link_hash_table): Remove sym_sec.
+	(microblaze_elf_check_relocs): Updated.
+	* elf32-nds32.c (nds32_elf_link_hash_table_create): Likewise.
+	(nds32_elf_create_dynamic_sections): Likewise.
+	(nds32_elf_adjust_dynamic_symbol): Likewise.
+	(nds32_elf_check_relocs): Likewise.
+	* elf32-nds32.h (elf_nds32_link_hash_table): Remove sdynbss,
+	srelbss and aym_cache.
+	* elf32-nios2.c (elf32_nios2_link_hash_table): Remove sym_cache.
+	(nios2_elf32_check_relocs): Updated.
+	* elf32-or1k.c (elf_or1k_link_hash_table): Remove sym_sec.
+	(or1k_elf_check_relocs): Updated.
+	* elf32-ppc.c (ppc_elf_check_relocs): Remove sym_cache.
+	(ppc_elf_check_relocs): Updated.
+	* elf32-s390.c (elf_s390_link_hash_table): Remove sym_cache.
+	(elf_s390_check_relocs): Updated.
+	(elf_s390_finish_dynamic_sections): Likewise.
+	* elf32-sh.c (elf_sh_link_hash_table): Remove sdynbss, srelbss
+	and aym_cache.
+	(sh_elf_create_dynamic_sections): Updated.
+	(sh_elf_adjust_dynamic_symbol): Likewise.
+	(sh_elf_size_dynamic_sections): Likewise.
+	(sh_elf_check_relocs): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_link_hash_table): Remove sym_cache.
+	(elf32_tic6x_check_relocs): Updated.
+	* elf32-tilepro.c (tilepro_elf_link_hash_table): Removed.
+	(tilepro_elf_hash_table): Updated.
+	(tilepro_elf_link_hash_table_create): Likewise.
+	(tilepro_elf_check_relocs): Likewise.
+	(tilepro_elf_adjust_dynamic_symbol): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(tilepro_elf_size_dynamic_sections): Likewise.
+	(tilepro_elf_relocate_section): Likewise.
+	(tilepro_elf_finish_dynamic_symbol): Likewise.
+	(tilepro_finish_dyn): Likewise.
+	(tilepro_elf_finish_dynamic_sections): Likewise.
+	* elf64-ppc.c (ppc_link_hash_table): Remove sym_cache.
+	(ppc64_elf_before_check_relocs): Updated.
+	(ppc64_elf_check_relocs): Likewise.
+	* elf64-s390.c (elf_s390_link_hash_table): Remove sym_cache.
+	(elf_s390_check_relocs): Updated.
+	(elf_s390_relocate_section): Likewise.
+	(elf_s390_finish_dynamic_sections): Likewise.
+	* elf64-x86-64.c (elf_x86_64_tls_transition): Likewise.
+	(elf_x86_64_check_relocs): Likewise.
+	* elfnn-aarch64.c (elf_aarch64_link_hash_table): Remove
+	sym_cache.
+	(elfNN_aarch64_check_relocs): Updated.
+	* elfnn-riscv.c (riscv_elf_link_hash_table): Remove sym_cache.
+	(riscv_elf_check_relocs): Updated.
+	* elfxx-mips.c (mips_elf_link_hash_table): Remove sym_cache.
+	(mips_elf_resolve_got_page_ref): Updated.
+	* elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise.
+	* elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Remove
+	sym_cache.
+	* elfxx-tilegx.c (tilegx_elf_link_hash_table): Likewise.
+	(tilegx_elf_check_relocs): Updated.
+	* elfxx-x86.h (elf_x86_link_hash_table): Remove sym_cache.
+
+2020-07-29  Maciej W. Rozycki  <macro@linux-mips.org>
+
+	* elflink.c (bfd_elf_final_link): Give local symbols a name if
+	so requested.
+	* elfxx-mips.c (_bfd_mips_elf_name_local_section_symbols): Only
+	return TRUE if making ET_REL output.
+
+2020-07-29  Maciej W. Rozycki  <macro@linux-mips.org>
+
+	* elf-bfd.h (elf_backend_data): Add
+	`elf_backend_elfsym_local_is_section' member.
+	* elfxx-target.h (elf_backend_elfsym_local_is_section): New
+	macro.
+	(elfNN_bed): Add `elf_backend_elfsym_local_is_section' member.
+	* elflink.c (bfd_elf_final_link): Use it to determine whether
+	set the `.symtab' section's `sh_info' value to the index of the
+	first non-local or non-section symbol.
+	* elf32-mips.c (mips_elf32_elfsym_local_is_section): New
+	function.
+	(elf_backend_elfsym_local_is_section): New macro.
+	* elfn32-mips.c (mips_elf_n32_elfsym_local_is_section): New
+	function.
+	(elf_backend_elfsym_local_is_section): New macro.
+
+2020-07-29  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (bfd_elf_final_link): Don't segfault on local dynsyms
+	defined in excluded sections.
+
+2020-07-28  Alan Modra  <amodra@gmail.com>
+
+	* elf.c (assign_section_numbers): Comment.  Don't segfault on
+	discarded sections when setting linked-to section for generic
+	ELF linker.
+	* elflink.c (bfd_elf_match_symbols_in_sections): Allow NULL info.
+
+2020-07-27  Alan Modra  <amodra@gmail.com>
+
+	* xcofflink.c (xcoff_need_ldrel_p): Accept --just-symbols symbols and
+	similar as absolute.
+	(bfd_xcoff_import_symbol): Don't fuss over absolute symbol
+	redefinitions here.
+
+2020-07-24  Nick Clifton  <nickc@redhat.com>
+
+	* config.bfd: Move xc16x target to the obsolete list.
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	* binary.c (binary_get_section_contents): Seek using offset
+	from section's file position.
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	* elf.c (_bfd_elf_make_section_from_phdr): Remove hack for GDB.
+
+2020-07-22  Max Filippov  <jcmvbkbc@gmail.com>
+
+	PR 26246
+	* elf32-xtensa.c (removed_literal_compare): Use correct pointer
+	type for the first function argument. Rename pointers to reflect
+	that they have distinct types.
+
+2020-07-20  Alan Modra  <amodra@gmail.com>
+
+	* elflink.c (_bfd_elf_gc_keep): Use bfd_is_const_section.
+
+2020-07-19  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (struct ppc_link_hash_table): Add has_power10_relocs.
+	(select_alt_stub): New function.
+	(ppc_get_stub_entry): Use it here.
+	(ppc64_elf_check_relocs): Set had_power10_relocs rather than
+	power10_stubs.
+	(ppc64_elf_size_stubs): Clear power10_stubs here instead.  Don't
+	merge notoc stubs with other varieties when power10_stubs is "auto".
+	Instead dup the stub hash table entry.
+	(plt_stub_size, ppc_build_one_stub, ppc_size_one_stub): Adjust
+	tests of power10_stubs.
+
+2020-07-15  Alan Modra  <amodra@gmail.com>
+
+	PR 26239
+	* coffgen.c (_bfd_coff_close_and_cleanup): Free dwarf2 info.
+
+2020-07-15  Nick Clifton  <nickc@redhat.com>
+
+	PR26240
+	* coffgen.c (coff_get_normalized_symtab): Fix off-by-one error in
+	check for aux entries that overflow the buufer.
+
+2020-07-15  Hans-Peter Nilsson  <hp@bitrange.com>
+
+	* elf64-mmix.c (mmix_elf_relax_section): Improve accounting for
+	R_MMIX_PUSHJ_STUBBABLE relocs against undefined symbols.
+
+2020-07-15  Markus BÃ¶ck  <markus.boeck02@gmail.com>
+	    Alan Modra  <amodra@gmail.com>
+
+	PR 26198
+	* coffgen.c (_bfd_coff_section_already_linked): Allow for plugin
+	objects both before and after normal object files.
+	* elflink.c (_bfd_elf_section_already_linked): Likewise.
+
+2020-07-10  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.h (struct ppc64_elf_params): Add power10_stubs.
+	* elf64-ppc.c (struct ppc_link_hash_table): Delete
+	power10_stubs.
+	(ppc64_elf_check_relocs): Adjust setting of power10_stubs.
+	(plt_stub_size, ppc_build_one_stub, ppc_size_one_stub): Adjust
+	uses of power10_stubs.
+
+2020-07-09  Alan Modra  <amodra@gmail.com>
+
+	* coff-ppc.c: Delete.
+	* pe-ppc.c: Delete.
+	* pei-ppc.c: Delete.
+	* Makefile.am (BFD32_BACKENDS, BFD32_BACKENDS_CFILES): Remove PE PPC.
+	* coffcode.h (coff_set_arch_mach_hook, coff_set_flags): Remove
+	PPCMAGIC code.
+	(coff_write_object_contents): Remove PPC_PE code.
+	* config.bfd: Move powerpcle-pe to removed targets.
+	* configure.ac: Remove powerpc PE entries.
+	* libcoff-in.h (ppc_allocate_toc_section): Delete.
+	(ppc_process_before_allocation): Delete.
+	* peXXigen.c: Remove POWERPC_LE_PE code and comments.
+	* targets.c: Remove powerpc PE vectors.
+	* po/SRC-POTFILES.in: Regenerate.
+	* libcoff.h: Regenerate.
+	* Makefile.in: Regenerate.
+	* configure: Regenerate.
+
+2020-07-09  Nick Clifton  <nickc@redhat.com>
+
+	* po/fr.po: Updated French translation.
+
+2020-07-07  Alan Modra  <amodra@gmail.com>
+
+	* xcofflink.c (xcoff_mark): Don't mark const sections.
+	(bfd_xcoff_record_link_assignment): Add FIXME.
+	(_bfd_xcoff_bfd_final_link): Don't segfault on assorted magic
+	sections being discarded by linker script.
+
+2020-07-07  Alan Modra  <amodra@gmail.com>
+
+	* coff-rs6000.c (xcoff_write_archive_contents_old): Set default
+	time, uid, gid and mode for deterministic archive.
+	(xcoff_write_archive_contents_big): Likewise.
+
+2020-07-07  Alan Modra  <amodra@gmail.com>
+
+	* coffcode.h (coff_classify_symbol): Handle C_HIDEXT and
+	C_AIX_WEAKEXT.
+
+2020-07-06  Nick Clifton  <nickc@redhat.com>
+
+	* po/pt.po: Updated Portuguese translation.
+	* po/uk.po: Updated Ukranian translation.
+
+2020-07-04  Nick Clifton  <nickc@redhat.com>
+
+	* version.m4: Set version to 2.35.50.
+	* configure: Regenerate.
+	* po/bbfd.pot: Regenerate.
+
+2020-07-04  Nick Clifton  <nickc@redhat.com>
+
+	Binutils 2.35 branch created.
+
+2020-07-01  Alan Modra  <amodra@gmail.com>
+
+	PR 26188
+	* coffgen.c (coff_find_nearest_line_with_names): Sanity check
+	raw syment index before dereferencing.
+
+2020-07-01  Alan Modra  <amodra@gmail.com>
+
+	* elf32-i386.c (elf_backend_object_p): Undef for vxworks.
+
+2020-07-01  Alan Modra  <amodra@gmail.com>
+
+	* config.bfd: Obsolete xc16x.
+
+2020-06-30  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* archures.c (bfd_mach_i386_nacl): Removed.
+	(bfd_mach_i386_i386_nacl): Likewise.
+	(bfd_mach_x86_64_nacl): Likewise.
+	(bfd_mach_x64_32_nacl): Likewise.
+	* config.bfd: Remove *-*-nacl* targets.
+	* configure.ac: Remove x86 NaCl target vectors.
+	* cpu-i386.c (bfd_arch_i386_onebyte_nop_fill): Removed.
+	(bfd_x64_32_nacl_arch): Likewise.
+	(bfd_x86_64_nacl_arch): Likewise.
+	(bfd_i386_nacl_arch): Likewise.
+	(bfd_x64_32_arch_intel_syntax): Updated.
+	* elf32-i386.c: Don't include "elf-nacl.h".
+	(elf_i386_nacl_plt): Removed.
+	(elf_i386_nacl_plt0_entry): Likewise.
+	(elf_i386_nacl_plt_entry): Likewise.
+	(elf_i386_nacl_pic_plt0_entry): Likewise.
+	(elf_i386_nacl_pic_plt_entry): Likewise.
+	(elf_i386_nacl_eh_frame_plt): Likewise.
+	(elf_i386_nacl_plt): Likewise.
+	(elf32_i386_nacl_elf_object_p): Likewise.
+	(elf_i386_get_synthetic_symtab): Updated.
+	(elf_i386_link_setup_gnu_properties): Likewise.
+	* elf64-x86-64.c: Don't include "elf-nacl.h".
+	(elf_x86_64_nacl_plt): Removed.
+	(elf64_x86_64_nacl_elf_object_p): Likewise.
+	(elf_x86_64_nacl_plt0_entry): Likewise.
+	(elf_x86_64_nacl_plt_entry): Likewise.
+	(elf_x86_64_nacl_eh_frame_plt): Likewise.
+	(elf_x86_64_nacl_plt): Likewise.
+	(elf32_x86_64_nacl_elf_object_p): Likewise.
+	(elf_x86_64_get_synthetic_symtab): Updated.
+	(elf_x86_64_link_setup_gnu_properties): Likewise.
+	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Likewise.
+	* targets.c: Remove x86 NaCl target vectors.
+	* bfd-in2.h: Regenerated.
+	* configure: Likewise.
+
+2020-06-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf32-tic6x.c (elf32_tic6x_size_dynamic_sections): Call
+	_bfd_elf_add_dynamic_tags.
+
+2020-06-29  Alan Modra  <amodra@gmail.com>
+
+	* peXXigen.c (_bfd_XXi_slurp_codeview_record): Properly check
+	return value of bfd_bread.  Don't read more than requested length.
+	Sanity check length.  Properly terminate file name.
+
+2020-06-29  Alan Modra  <amodra@gmail.com>
+
+	* arc-got.h: Use C style comments.
+	* coff-z80.c: Likewise.
+	* elf32-csky.c: Likewise.
+	* peXXigen.c: Likewise.
+	* elf32-m32c.c (m32c_elf_relax_delete_bytes): Remove commented out
+	code.
+
+2020-06-26  Pat Bernardi  <bernardi@adacore.com>
+
+	* elf32-m68k.c (m68k_elf_merge_obj_attributes): New function.
+	(elf32_m68k_merge_private_bfd_data): Merge GNU attributes.
+
+2020-06-26  Alan Modra  <amodra@gmail.com>
+
+	* elfxx-riscv.c (struct priv_spec_t, priv_specs),
+	(riscv_get_priv_spec_class, riscv_get_priv_spec_class_from_numbers),
+	(riscv_get_priv_spec_name): Move to..
+	* cpu-riscv.c: ..here.
+	(riscv_get_priv_spec_class_from_numbers): Don't xmalloc temp buffer.
+	Use %u to print unsigned numbers.
+
+2020-06-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cpu-riscv.c (riscv_scan): Don't allow shorter matches using the
+	default architecture.
+
+2020-06-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26083
+	* elf32-csky.c (csky_elf_size_dynamic_sections): Call
+	_bfd_elf_add_dynamic_tags.
+
+2020-06-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26083
+	* elf32-cris.c (elf_cris_size_dynamic_sections): Call
+	_bfd_elf_add_dynamic_tags.
+
+2020-06-24  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (_bfd_vms_slurp_etir <ETIR__C_OPR_ASH>): Implement
+	shifts without undefined behaviour.
+
+2020-06-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-bfd.h (elf_link_hash_table): Add dt_pltgot_required and
+	dt_jmprel_required.
+	(_bfd_elf_add_dynamic_tags): New.
+	* elf-m10300.c (_bfd_mn10300_elf_size_dynamic_sections): Call
+	_bfd_elf_add_dynamic_tags.
+	* elf32-arc.c (elf_arc_size_dynamic_sections): Likewise.
+	* elf32-bfin.c (elf32_bfinfdpic_size_dynamic_sections): Likewise.
+	* elf32-cr16.c (_bfd_cr16_elf_size_dynamic_sections): Likewise.
+	* elf32-frv.c (elf32_frvfdpic_size_dynamic_sections): Likewise.
+	* elf32-lm32.c (lm32_elf_size_dynamic_sections): Likewise.
+	* elf32-m32r.c (m32r_elf_size_dynamic_sections): Likewise.
+	* elf32-m68k.c (elf_m68k_size_dynamic_sections): Likewise.
+	* elf32-microblaze.c (microblaze_elf_size_dynamic_sections):
+	Likewise.
+	* elf32-nds32.c (nds32_elf_size_dynamic_sections): Likewise.
+	* elf32-nios2.c (nios2_elf32_size_dynamic_sections): Likewise.
+	* elf32-or1k.c (or1k_elf_size_dynamic_sections): Likewise.
+	* elf32-s390.c (elf_s390_size_dynamic_sections): Likewise.
+	* elf32-tilepro.c (tilepro_elf_size_dynamic_sections): Likewise.
+	* elf32-vax.c (elf_vax_size_dynamic_sections): Likewise.
+	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Likewise.
+	* elf64-s390.c (elf_s390_size_dynamic_sections): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_size_dynamic_sections):
+	Likewise.
+	* elfnn-riscv.c (riscv_elf_size_dynamic_sections): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_size_dynamic_sections): Likewise.
+	* elf32-arm.c (elf32_arm_size_dynamic_sections): Call
+	_bfd_elf_maybe_vxworks_add_dynamic_tags.
+	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections):
+	Likewise.
+	* elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Likewise.
+	(_bfd_x86_elf_size_dynamic_sections): Likewise.
+	* elfxx-x86.h (elf_x86_link_hash_table): Remove dt_reloc,
+	dt_reloc_sz and dt_reloc_ent.
+	* elf-vxworks.c (_bfd_elf_maybe_vxworks_add_dynamic_tags): New.
+	* elf-vxworks.h (_bfd_elf_maybe_vxworks_add_dynamic_tags):
+	Likewise.
+	* elf32-hppa.c (elf32_hppa_link_hash_table_create): Set
+	etab.dt_pltgot_required.
+	(elf32_hppa_size_dynamic_sections): Call
+	_bfd_elf_add_dynamic_tags.
+	* elf32-metag.c (elf_metag_link_hash_table_create): Set
+	etab.dt_pltgot_required.
+	(elf_metag_size_dynamic_sections): Call _bfd_elf_add_dynamic_tags.
+	* elf32-sh.c (sh_elf_link_hash_table_create): Set
+	root.dt_pltgot_required for FDPIC output.
+	(sh_elf_size_dynamic_sections): Call
+	_bfd_elf_maybe_vxworks_add_dynamic_tags.
+	* elf32-xtensa.c (elf_xtensa_link_hash_table_create): Set
+	elf.dt_pltgot_required.
+	(elf_xtensa_size_dynamic_sections): Call
+	_bfd_elf_add_dynamic_tags.
+	* elf64-hppa.c (elf64_hppa_hash_table_create): Set
+	root.dt_pltgot_required.
+	(elf64_hppa_size_dynamic_sections): Call
+	_bfd_elf_add_dynamic_tags.
+	* elfnn-ia64.c (elfNN_ia64_hash_table_create): Set
+	root.dt_pltgot_required.
+	(elfNN_ia64_size_dynamic_sections): Set root.dt_jmprel_required
+	for rel_pltoff_sec.  Call _bfd_elf_add_dynamic_tags.
+	* elflink.c (_bfd_elf_add_dynamic_tags): New.
+
+2020-06-22  Saagar Jha  <saagar@saagarjha.com>
+
+	* mach-o.c: Support the new load commands by reading a linkedit
+	data command for them.
+
+2020-06-22  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.c (struct priv_spec_t priv_specs[]): Move them from
+	opcodes/riscv-opc.c to bfd/elfxx-riscv.c, since we need it in linker.
+	(riscv_get_priv_spec_class): Likewise.
+	(riscv_get_priv_spec_name): Likewise.
+	(riscv_get_priv_spec_class_from_numbers): New function, convert
+	the version numbers into string, then call riscv_get_priv_spec_class
+	to get the priv spec class.
+	* elfxx-riscv.h (riscv_get_priv_spec_class): Move forward declaration
+	from include/opcode/riscv.h to bfd/elfxx-riscv.h.
+	(riscv_get_priv_spec_name): Likewise.
+	(riscv_get_priv_spec_class_from_numbers): New forward declaration.
+	(opcode/riscv.h): Include it in the header rather than elfxx-riscv.c.
+	* elfnn-riscv.c (riscv_merge_attributes):  Get the priv spec classes
+	of input and output objects form their priv spec attributes by
+	riscv_get_priv_spec_class_from_numbers.  Report warning rather than
+	errors when linking objects with differnet priv spec versions.  We do
+	know v1.9.1 may have conflicts to other versions, so report the
+	warning, too.  After that, update the output priv spec version to the
+	newest one so far.
+
+2020-06-22  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_merge_attributes): Once we meet one of the
+	priv attributes, we will check the conflicts for all of them (major,
+	minor and revision), and then set the priv_attrs_merged to TRUE to
+	indicate that we have handled all of the priv attributes.  Remove
+	the unused boolean priv_may_conflict, in_priv_zero and out_priv_zero.
+
+2020-06-21  Alan Modra  <amodra@gmail.com>
+
+	PR 26132
+	* configure.ac: Disable plugins by default for some targets.
+	* plugin.c: Comment typo fix.
+	* configure: Regenerate.
+
+2020-06-19  Nick Clifton  <nickc@redhat.com>
+
+	* plugin.c (try_load_plugin): Suppress the error message about
+	being unable to open a plugin if creating a list of viable
+	plugins.
+
+2020-06-16  Alan Modra  <amodra@gmail.com>
+
+	* aout-tic30.c: Delete file.
+	* Makefile.am (BFD32_BACKENDS): Remove aout-tic30.lo.
+	(BFD32_BACKENDS_CFILES): Remove aout-tic30.c.
+	* config.bfd (c30-*-*aout*, tic30-*-*aout*): Remove entry.
+	(xc16x-*-elf): Sort properly.
+	* configure.ac: Remove tic30_aout_vec.
+	* targets.c: Likewise.
+	* Makefile.in: Regenerate.
+	* configure: Regenerate.
+	* po/SRC-POTFILES.in: Regenerate.
+
+2020-06-15  Max Filippov  <jcmvbkbc@gmail.com>
+
+	* elf32-xtensa.c (XSHAL_ABI, XTHAL_ABI_UNDEFINED)
+	(XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): New macros.
+	(elf32xtensa_abi): New global variable.
+	(xtensa_abi_choice): New function.
+	(elf_xtensa_create_plt_entry): Use xtensa_abi_choice instead of
+	XSHAL_ABI to select PLT code.
+
+2020-06-15  Roland McGrath  <mcgrathr@google.com>
+
+	* elflink.c (bfd_elf_define_start_stop): Use start_stop_visibility
+	field of bfd_link_info.
+
+2020-06-15  Alan Modra  <amodra@gmail.com>
+
+	* config.bfd: Obsolete powerpcle-*-pe targets.
+
+2020-06-15  Alan Modra  <amodra@gmail.com>
+
+	PR 26103
+	* elflink.c (elf_link_add_archive_symbols): Exclude undefined
+	symbols that were defined in discarded sections.
+	* cofflink.c (coff_link_check_archive_element): Likewise.
+	(coff_link_add_symbols): Set indx to -3 for symbols defined in
+	discarded sections.
+	(_bfd_coff_write_global_sym): Don't emit such symbols.
+	libcoff-in.h (struct coff_link_hash_entry): Update indx comment.
+	libcoff.h: Regenerate.
+
+2020-06-11  Alan Modra  <amodra@gmail.com>
+
+	PR 26107
+	* pdp11.c (is_stab): Replace legacy "index" function with "strchr".
+
+2020-06-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elfnn-ia64.c (elfNN_ia64_link_hash_table): Remove reltext.
+	(allocate_dynrel_entries): Set DF_TEXTREL instead of reltext.
+	(elfNN_ia64_size_dynamic_sections): Check DF_TEXTREL instead
+	of reltext.
+
+2020-06-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26094
+	* elflink.c (bfd_elf_define_start_stop): Handle common symbols.
+	Clear verinfo.verdef.
+
+2020-06-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/18801
+	* elf-bfd.h (elf_link_hash_table): Add ifunc_resolvers.
+	(_bfd_elf_allocate_ifunc_dyn_relocs): Remove the
+	bfd_boolean * argument.  Set ifunc_resolvers if there are IFUNC
+	resolvers.
+	* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Updated.
+	Set ifunc_resolvers if there are FUNC resolvers.
+	* elf64-ppc.c (ppc_link_hash_table): Remove local_ifunc_resolver.
+	(build_global_entry_stubs_and_plt): Replace local_ifunc_resolver
+	with elf.ifunc_resolvers.
+	(write_plt_relocs_for_local_syms): Likewise.
+	(ppc64_elf_relocate_section): Likewise.
+	(ppc64_elf_finish_dynamic_sections): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_allocate_ifunc_dynrelocs):
+	Updated.
+	* elfxx-x86.c (elf_x86_allocate_dynrelocs): Likewise.
+	(_bfd_x86_elf_size_dynamic_sections): Check elf.ifunc_resolvers
+	instead of readonly_dynrelocs_against_ifunc.
+	* elfxx-x86.h (elf_x86_link_hash_table): Remove
+	readonly_dynrelocs_against_ifunc.
+
+2020-06-09  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (struct ppc_link_hash_table): Delete
+	maybe_local_ifunc_resolver field.
+	(build_global_entry_stubs_and_plt): Set local_ifunc_resolver in
+	cases where maybe_local_ifunc_resolver was set.
+	(ppc64_elf_relocate_section): Likewise.
+	(ppc64_elf_finish_dynamic_sections): Downgrade ifunc with textrel
+	error to a warning.
+
+2020-06-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-bfd.h (elf_link_hash_entry): Add tlsdesc_plt and
+	tlsdesc_got.
+	* elf32-arm.c (elf32_arm_link_hash_table): Remove tlsdesc_plt
+	and dt_tlsdesc_got.
+	(elf32_arm_size_dynamic_sections): Updated.  Clear
+	root.tlsdesc_plt for DF_BIND_NOW.
+	(elf32_arm_finish_dynamic_sections): Updated.
+	(elf32_arm_output_arch_local_syms): Likewise.
+	* elf32-nds32.c (nds32_elf_size_dynamic_sections): Updated.
+	Clear root.tlsdesc_plt for DF_BIND_NOW.
+	(nds32_elf_finish_dynamic_sections): Updated.
+	* elf32-nds32.h (elf_nds32_link_hash_table): Remove
+	dt_tlsdesc_plt and dt_tlsdesc_got.
+	* elf64-x86-64.c (elf_x86_64_finish_dynamic_sections): Updated.
+	* elfnn-aarch64.c (elf_aarch64_link_hash_table): Remove
+	tlsdesc_plt and dt_tlsdesc_got.
+	(elfNN_aarch64_allocate_dynrelocs): Updated.
+	(elfNN_aarch64_finish_dynamic_sections): Likewise.
+	(elfNN_aarch64_size_dynamic_sections): Updated.  Clear
+	root.tlsdesc_plt for DF_BIND_NOW.  Don't check DF_BIND_NOW
+	twice.
+	* elfxx-x86.c (elf_x86_allocate_dynrelocs): Updated.
+	(_bfd_x86_elf_size_dynamic_sections): Likewise.
+	(_bfd_x86_elf_finish_dynamic_sections): Likewise.
+	* elfxx-x86.h (elf_x86_link_hash_table): Remove tlsdesc_plt and
+	tlsdesc_got.
+
+2020-06-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf32-tic6x.c (elf32_bed): Defined the default to
+	elf32_tic6x_bed.
+
+2020-06-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf64-hppa.c (elf64_hppa_link_hash_table): Remove plt_sec and
+	plt_rel_sec.
+	(elf64_hppa_check_relocs): Replace plt_sec/plt_rel_sec with
+	root.splt/root.srelplt.
+	(elf64_hppa_create_dynamic_sections): Likewise.
+	(elf64_hppa_size_dynamic_sections): Likewise.
+	(elf64_hppa_finish_dynamic_symbol): Likewise.
+	(elf_hppa_final_link): Likewise.
+	(elf_hppa_final_link_relocate): Likewise.
+
+2020-06-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections): Updated.
+	* elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Remove
+	is_vxworks.
+
+2020-06-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-bfd.h (elf_target_os): New.
+	(elf_link_hash_table): Add target_os.
+	(elf_backend_data): Add target_os.
+	* elf32-arm.c (elf32_arm_link_hash_table): Remove vxworks_p,
+	symbian_p and nacl_p.
+	(create_got_section): Updated.
+	(elf32_arm_create_dynamic_sections): Likewise.
+	(arm_type_of_stub): Likewise.
+	(elf32_arm_create_or_find_stub_sec): Likewise.
+	(elf32_arm_allocate_plt_entry): Likewise.
+	(elf32_arm_populate_plt_entry): Likewise.
+	(elf32_arm_final_link_relocate): Likewise.
+	(elf32_arm_check_relocs): Likewise.
+	(allocate_dynrelocs_for_symbol): Likewise.
+	(elf32_arm_finish_dynamic_symbol): Likewise.
+	(elf32_arm_finish_dynamic_sections): Likewise.
+	(elf32_arm_output_plt_map_1): Likewise.
+	(elf32_arm_output_arch_local_syms): Likewise.
+	(elf32_arm_add_symbol_hook): Likewise.
+	(elf32_arm_nacl_link_hash_table_create): Likewise.
+	(elf32_arm_vxworks_link_hash_table_create): Likewise.
+	(elf32_arm_symbian_link_hash_table_create): Likewise.
+	(ELF_TARGET_OS): New.
+	* elf32-i386.c (elf_i386_arch_bed): Removed.
+	(elf_backend_arch_data): Likewise.
+	(elf_i386_solaris_arch_bed): Likewise.
+	(elf_i386_nacl_arch_bed): Likewise.
+	(elf_i386_vxworks_arch_bed): Likewise.
+	(elf_i386_relocate_section): Updated.
+	(elf_i386_finish_dynamic_sections): Likewise.
+	(elf_i386_get_synthetic_symtab): Likewise.
+	(elf_i386_link_setup_gnu_properties): Likewise.
+	(ELF_TARGET_OS): New.
+	* elf32-mips.c (ELF_TARGET_OS): New.
+	* elf32-ppc.c (ppc_elf_link_hash_table): Remove is_vxworks.
+	(ppc_elf_create_got): Updated.
+	(ppc_elf_create_dynamic_sections): Likewise.
+	(ppc_elf_check_relocs): Likewise.
+	(ppc_elf_adjust_dynamic_symbol): Likewise.
+	(ppc_elf_size_dynamic_sections): Likewise.
+	(ppc_elf_relocate_section): Likewise.
+	(ppc_elf_finish_dynamic_sections): Likewise.
+	(ppc_elf_vxworks_link_hash_table_create): Likewise.
+	(ELF_TARGET_OS): New.
+	* elf32-sh.c (elf_sh_link_hash_table): Remove vxworks_p.
+	(sh_elf_link_hash_table_create): Updated.
+	(sh_elf_create_dynamic_sections): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(sh_elf_size_dynamic_sections): Likewise.
+	(sh_elf_relocate_section): Likewise.
+	(sh_elf_finish_dynamic_symbol): Likewise.
+	(sh_elf_finish_dynamic_sections): Likewise.
+	(ELF_TARGET_OS): New.
+	* elf32-sparc.c (elf32_sparc_vxworks_link_hash_table_create):
+	Removed.
+	(bfd_elf32_bfd_link_hash_table_create): Likewise.
+	(ELF_TARGET_OS): New.
+	* elf64-x86-64.c (elf_x86_64_arch_bed): Removed.
+	(elf_x86_64_solaris_arch_bed): Likewise.
+	(elf_x86_64_nacl_arch_bed): Likewise.
+	(elf_x86_64_finish_dynamic_sections): Updated.
+	(elf_x86_64_get_synthetic_symtab): Likewise.
+	(elf_x86_64_link_setup_gnu_properties): Likewise.
+	(ELF_TARGET_OS): New.
+	* elflink.c (_bfd_elf_link_hash_table_init): Initialize
+	target_o.
+	* elfxx-mips.c (mips_elf_link_hash_table): Remove is_vxworks.
+	(MIPS_ELF_REL_DYN_NAME): Updated.
+	(ELF_MIPS_GP_OFFSET): Likewise.
+	(mips_elf_create_local_got_entry): Likewise.
+	(mips_elf_allocate_dynamic_relocations): Likewise.
+	(mips_elf_count_got_symbols): Likewise.
+	(is_gott_symbol): Likewise.
+	(mips_elf_calculate_relocation): Likewise.
+	(mips_elf_create_dynamic_relocation): Likewise.
+	(_bfd_mips_elf_check_relocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(_bfd_mips_elf_adjust_dynamic_symbol): Likewise.
+	(mips_elf_lay_out_got): Likewise.
+	(mips_elf_set_plt_sym_value): Likewise.
+	(_bfd_mips_elf_size_dynamic_sections): Likewise.
+	(_bfd_mips_elf_finish_dynamic_symbol): Likewise.
+	(_bfd_mips_elf_finish_dynamic_sections): Likewise.
+	(_bfd_mips_elf_final_link): Likewise.
+	(_bfd_mips_init_file_header): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_create_dynamic_sections):
+	Likewise.
+	(allocate_dynrelocs): Likewise.
+	(_bfd_sparc_elf_size_dynamic_sections): Likewise.
+	(_bfd_sparc_elf_relocate_section): Likewise.
+	(_bfd_sparc_elf_finish_dynamic_symbol): Likewise.
+	(sparc_finish_dyn): Likewise.
+	(_bfd_sparc_elf_finish_dynamic_sections): Likewise.
+	* elfxx-target.h (ELF_TARGET_OS): New.
+	(elfNN_bed): Add ELF_TARGET_OS.
+	* elfxx-x86.c (elf_x86_allocate_dynrelocs): Updated.
+	(_bfd_x86_elf_link_hash_table_create): Likewise.
+	(_bfd_x86_elf_size_dynamic_sections): Likewise.
+	(_bfd_x86_elf_finish_dynamic_sections): Likewise.
+	(_bfd_x86_elf_adjust_dynamic_symbol): Likewise.
+	(_bfd_x86_elf_link_setup_gnu_properties): Likewise.
+	* elfxx-x86.h (elf_x86_target_os): Removed.
+	(elf_x86_backend_data): Likewise.
+	(get_elf_x86_backend_data): Likewise.
+	(elf_x86_link_hash_table): Remove target_os.
+
+2020-06-06  Alan Modra  <amodra@gmail.com>
+
+	* reloc.c: Rename
+	BFD_RELOC_PPC64_GOT_TLSGD34 to BFD_RELOC_PPC64_GOT_TLSGD_PCREL34,
+	BFD_RELOC_PPC64_GOT_TLSLD34 to BFD_RELOC_PPC64_GOT_TLSLD_PCREL34,
+	BFD_RELOC_PPC64_GOT_TPREL34 to BFD_RELOC_PPC64_GOT_TPREL_PCREL34,
+	BFD_RELOC_PPC64_GOT_DTPREL34 to BFD_RELOC_PPC64_GOT_DTPREL_PCREL34.
+	* elf64-ppc.c: Update throughout for reloc renaming.
+	(ppc64_elf_reloc_name_lookup): Handle old reloc names.
+	* libbfd.h: Regenerate.
+	* bfd-in2.h: Regenerate.
+
+2020-06-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26080
+	* elf32-bfin.c (bfinfdpic_relocate_section): Skip non SEC_ALLOC
+	section.
+
+2020-06-05  Nick Clifton  <nickc@redhat.com>
+
+	* pdp11.c (aout_link_add_symbols): Fix use before initialisation
+	bug.
+
+2020-06-05  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (riscv_merge_attributes): Add new boolean
+	priv_may_conflict, in_priv_zero and out_priv_zero to decide
+	whether the object can be linked according to it's priv
+	attributes.  The object without any priv spec attributes can
+	be linked with others.  If the first input object doesn't contain
+	any priv attributes, then we need to copy the setting from the
+	next input one.  Also report more detailed error messages to user.
+
+2020-06-04  Stephen Casner  <casner@acm.org>
+
+	Extend pdp11-aout symbol table format to accommodate .stab
+	symbols and implement correct handling of them.
+
+	* pdp11.c (pdp11_external_nlist): Repurposed e_unused to e_desc.
+	(N_STAB, is_stab): Needed new function is_stab to disambiguate
+	normal vs. .stab symbol table type values, replacing N_STAB mask.
+	(translate_from_native_sym_flags): Determine correct section for
+	different .stab types.
+	(translate_to_native_sym_flags): Leave .stab types intact.
+	(translate_symbol_table): Error if symbol indicates overlay;
+	store desc field from .stab symbols.
+	(write_syms): Output desc field with symbol.
+	(aout_link_check_ar_symbols): Skip .stab symbols.
+	(aout_link_add_symbols): Correctly distinguish .stab symbols.
+	(aout_link_write_other_symbol): Write 0 for desk and ovly fields.
+	(aout_link_write_symbols): Write 0 for desk and ovly fields;
+	correctly distinguish .stab symbols and select calculate their
+	section and value; and copy desc and ovly fields from input symbol
+	to output symbol.
+
+2020-06-04  Stephen Casner  <casner@acm.org>
+
+	* aoutx.h (translate_symbol_table): Comment had external and
+	internal swapped.
+	* pdp11.c (translate_symbol_table): Likewise.
+
+2020-06-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elfxx-x86.h (elf_x86_link_hash_table): Remove target_id.
+	(is_x86_elf): Check elf.hash_table_id instead of target_id.
+	* elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Updated.
+
+2020-06-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26080
+	* elf-m10300.c (mn10300_elf_relocate_section): Resolve relocation
+	in debug section against symbol defined in shared library to 0.
+	* elf32-i386.c (elf_i386_check_relocs): Remove SEC_ALLOC check.
+	* elf32-lm32.c (lm32_elf_check_relocs): Likewise.
+	* elf32-m32r.c (m32r_elf_check_relocs): Likewise.
+	* elf32-nds32.c (nds32_elf_check_relocs): Likewise.
+	* elf32-nios2.c (nios2_elf32_check_relocs): Likewise.
+	* elf32-or1k.c (or1k_elf_check_relocs): Likewise.
+	* elf32-ppc.c (ppc_elf_check_relocs): Likewise.
+	* elf32-sh.c (sh_elf_check_relocs): Likewise.
+	* elf32-xtensa.c (elf_xtensa_check_relocs): Likewise.
+	* elf64-alpha.c (elf64_alpha_check_relocs): Likewise.
+	* elf64-ppc.c (ppc64_elf_check_relocs): Likewise.
+	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise.
+	* elf32-vax.c (elf_vax_check_relocs): Set non_got_ref for non-GOT
+	reference.
+	(elf_vax_adjust_dynamic_symbol): Generate a copy reloc only if
+	there is non-GOT reference.
+	* elflink.c (_bfd_elf_link_check_relocs): Skip non-loaded,
+	non-alloced sections.
+
+2020-06-03  Stephen Casner  <casner@acm.org>
+
+	Copy several years of fixes from bfd/aoutx.h to bfd/pdp11.c.
+
+	* pdp11.c (some_aout_object_p): 4c1534c7a2a - Don't set EXEC_P for
+	files with relocs.
+	(aout_get_external_symbols): 6b8f0fd579d - Return if count is zero.
+	0301ce1486b PR 22306 - Handle stringsize of zero, and error for any
+	other size that doesn't qcover the header word.
+	bf82069dce1 PR 23056 - Allocate an extra byte at the end of the
+	string table, and zero it.
+	(translate_symbol_table): 0d329c0a83a PR 22887 - Print an error
+	message and set bfd_error on finding an invalid name string offset.
+	(add_to_stringtab): INLINE -> inline
+	(pdp11_aout_swap_reloc_in): 116acb2c268 PR 22887 - Correct r_index
+	bound check.
+	(squirt_out_relocs): e2996cc315d PR 20921 - Check for and report
+	any relocs that could not be recognised.
+	92744f05809 PR 20929 - Check for relocs	without an associated symbol.
+	(find_nearest_line):  808346fcfcf PR 23055 - Check that the symbol
+	name exists and is long enough, before attempting to see if it is
+	for a .o file.
+	c3864421222 - Correct case for N_SO being the last symbol.
+	50455f1ab29 PR 20891 - Handle the case where the main file name
+	and the directory name are both empty.
+	e82ab856bb4 PR 20892 - Handle the case where function name is empty.
+	(aout_link_add_symbols): e517df3dbf7 PR 19629 - Check for out of
+	range string table offsets.
+	531336e3a0b PR 20909 - Fix off-by-one error in check for an
+	illegal string offset.
+	(aout_link_includes_newfunc): Add comment.
+	(pdp11_aout_link_input_section): ad756e3f9e6 - Return with an error
+	on unexpected relocation type rather than ASSERT.
+
+2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26066
+	* elf32-nios2.c (nios2_elf32_size_dynamic_sections): Call
+	_bfd_elf_maybe_set_textrel to set DF_TEXTREL.
+
+2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26066
+	* elf32-nios2.c (nios2_elf32_check_relocs): Skip non-loaded,
+	non-alloced sections.
+
+2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf32-frv.c (elf32_frv_relocate_section): Don't generate
+	dynamic relocations for non SEC_ALLOC sections.
+
+2020-06-03  Gunther Nikl  <gnikl@justmail.de>
+
+	* aout64.c (BMAGIC, QMAGIC): Do not define.
+	* aoutx.h (N_IS_BMAGIC, N_SET_QMAGIC): New defines.
+	(NAME (aout, some_aout_object_p)): Use N_IS_QMAGIC and N_IS_BMAGIC
+	to check the file format.
+	(adjust_z_magic): Use N_SET_QMAGIC to set file format.
+	* i386aout.c (NO_WRITE_HEADER_KLUDGE): Delete define.
+	* libaout.h (NO_WRITE_HEADER_KLUDGE): Do not define.
+
+2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf32-arc.c (elf_arc_relocate_section): Don't generate dynamic
+	relocations for non SEC_ALLOC sections.
+
+2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-bfd.h (_bfd_elf_maybe_set_textrel): New
+	* elf32-arm.c (maybe_set_textrel): Removed.
+	(elf32_arm_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-csky.c (maybe_set_textrel): Removed.
+	(csky_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-hppa.c (maybe_set_textrel): Removed.
+	(elf32_hppa_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-lm32.c (maybe_set_textrel): Removed.
+	(lm32_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-m32r.c (maybe_set_textrel): Removed.
+	(m32r_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-metag.c (maybe_set_textrel): Removed.
+	(elf_metag_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-nds32.c (maybe_set_textrel): Removed.
+	(nds32_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-or1k.c (maybe_set_textrel): Removed.
+	(or1k_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-ppc.c (maybe_set_textrel): Removed.
+	(ppc_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-s390.c (maybe_set_textrel): Removed.
+	(elf_s390_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-sh.c (maybe_set_textrel): Removed.
+	(sh_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-tic6x.c (maybe_set_textrel): Removed.
+	(elf32_tic6x_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf32-tilepro.c (maybe_set_textrel): Removed.
+	(tilepro_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf64-ppc.c (maybe_set_textrel): Removed.
+	(ppc64_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elf64-s390.c (maybe_set_textrel): Removed.
+	(elf_s390_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elfnn-aarch64.c (maybe_set_textrel): Removed.
+	(elfNN_aarch64_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elfnn-riscv.c (maybe_set_textrel): Removed.
+	(riscv_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elfxx-sparc.c (maybe_set_textrel): Removed.
+	(_bfd_sparc_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elfxx-tilegx.c (maybe_set_textrel): Removed.
+	(tilegx_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elfxx-x86.c (maybe_set_textrel): Removed.
+	(_bfd_x86_elf_size_dynamic_sections): Replace maybe_set_textrel
+	with _bfd_elf_maybe_set_textrel.
+	* elflink.c (_bfd_elf_maybe_set_textrel): New.
+
+2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26067
+	* elf32-arm.c (elf32_arm_copy_indirect_symbol): Don't copy
+	dyn_relocs.
+	* elf32-csky.c (csky_elf_copy_indirect_symbol): Likewise.
+	* elf32-hppa.c (elf32_hppa_copy_indirect_symbol): Likewise.
+	* elf32-metag.c (elf_metag_copy_indirect_symbol): Likewise.
+	* elf32-microblaze.c (microblaze_elf_copy_indirect_symbol):
+	Likewise.
+	* elf32-nds32.c (nds32_elf_copy_indirect_symbol): Likewise.
+	* elf32-nios2.c (nios2_elf32_copy_indirect_symbol): Likewise.
+	* elf32-or1k.c (or1k_elf_copy_indirect_symbol): Likewise.
+	* elf32-s390.c (elf_s390_copy_indirect_symbol): Likewise.
+	* elf32-sh.c (sh_elf_copy_indirect_symbol): Likewise.
+	* elf32-tilepro.c (tilepro_elf_copy_indirect_symbol): Likewise.
+	* elf64-s390.c (elf_s390_copy_indirect_symbol): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_copy_indirect_symbol): Likewise.
+	* elfnn-riscv.c (riscv_elf_copy_indirect_symbol): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_copy_indirect_symbol): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_copy_indirect_symbol): Likewise.
+	* elfxx-x86.c (_bfd_x86_elf_copy_indirect_symbol): Likewise.
+	* elf32-lm32.c (lm32_elf_copy_indirect_symbol): Removed.
+	(elf_backend_copy_indirect_symbol): Likewise.
+	* elf32-m32r.c (m32r_elf_copy_indirect_symbol): Removed.
+	(elf_backend_copy_indirect_symbol): Likewise.
+	* elflink.c (_bfd_elf_link_hash_copy_indirect): Copy dyn_relocs.
+
+2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26067
+	* elf-bfd.h (_bfd_elf_readonly_dynrelocs): New.
+	* elf32-arm.c (readonly_dynrelocs): Removed.
+	(maybe_set_textrel): Replace readonly_dynrelocs with
+	_bfd_elf_readonly_dynrelocs.
+	* elf32-csky.c (readonly_dynrelocs): Removed.
+	(maybe_set_textrel): Replace readonly_dynrelocs with
+	_bfd_elf_readonly_dynrelocs.
+	*  elf32-hppa.c(readonly_dynrelocs): Removed.
+	(alias_readonly_dynrelocs): Replace readonly_dynrelocs with
+	_bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elf32-lm32.c (readonly_dynrelocs): Removed.
+	(lm32_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elf32-m32r.c (readonly_dynrelocs): Removed.
+	(m32r_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elf32-metag.c (readonly_dynrelocs): Removed.
+	(elf_metag_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elf32-microblaze.c (readonly_dynrelocs): Removed.
+	(microblaze_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	* elf32-nds32.c (readonly_dynrelocs): Removed.
+	(nds32_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elf32-or1k.c (readonly_dynrelocs): Removed.
+	(or1k_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	* elf32-ppc.c (readonly_dynrelocs): Removed.
+	(alias_readonly_dynrelocs): Replace readonly_dynrelocs with
+	_bfd_elf_readonly_dynrelocs.
+	(ppc_elf_adjust_dynamic_symbol): Likewise.
+	(maybe_set_textrel): Likewise.
+	* elf32-s390.c (readonly_dynrelocs): Removed.
+	(elf_s390_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elf32-sh.c (readonly_dynrelocs): Removed.
+	(sh_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs with
+	_bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elf32-tic6x.c (readonly_dynrelocs): Removed.
+	(maybe_set_textrel): Replace readonly_dynrelocs with
+	_bfd_elf_readonly_dynrelocs.
+	* elf32-tilepro.c (readonly_dynrelocs): Removed.
+	(tilepro_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elf64-ppc.c (readonly_dynrelocs): Removed.
+	(alias_readonly_dynrelocs): Replace readonly_dynrelocs with
+	_bfd_elf_readonly_dynrelocs.
+	(ppc64_elf_adjust_dynamic_symbol): Likewise.
+	(maybe_set_textrel): Likewise.
+	* elf64-s390.c (readonly_dynrelocs): Removed.
+	(elf_s390_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elflink.c (_bfd_elf_readonly_dynrelocs): New.
+	* elfnn-aarch64.c (readonly_dynrelocs): Removed.
+	(maybe_set_textrel): Replace readonly_dynrelocs with
+	_bfd_elf_readonly_dynrelocs.
+	* elfnn-riscv.c (readonly_dynrelocs): Removed.
+	(riscv_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elfxx-sparc.c (readonly_dynrelocs): Removed.
+	(_bfd_sparc_elf_adjust_dynamic_symbol): Replace
+	readonly_dynrelocs with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elfxx-tilegx.c (readonly_dynrelocs): Removed.
+	(tilegx_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs
+	with _bfd_elf_readonly_dynrelocs.
+	(maybe_set_textrel): Likewise.
+	* elfxx-x86.c (readonly_dynrelocs): Removed.
+	(maybe_set_textrel): Replace readonly_dynrelocs with
+	_bfd_elf_readonly_dynrelocs.
+	(_bfd_x86_elf_adjust_dynamic_symbol): Likewise.
+
+2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elfxx-x86.h (GENERATE_DYNAMIC_RELOCATION_P): Silence
+	-fsanitize=undefined.
+
+2020-06-03  Alan Modra  <amodra@gmail.com>
+
+	PR 26069
+	PR 18758
+	* peicode.h (pe_ILF_make_a_section): Align data for compilers
+	other than gcc.
+	(pe_ILF_build_a_bfd): Likewise.
+
+2020-06-03  Alan Modra  <amodra@gmail.com>
+
+	PR 26069
+	* elf.c (_bfd_elf_close_and_cleanup): Free elf_shstrtab for
+	core files as well as objects.
+
+2020-06-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/26067
+	* elf-bfd.h (elf_link_hash_entry): Add dyn_relocs after size.
+	* elf-s390-common.c (s390_elf_allocate_ifunc_dyn_relocs):
+	Updated.
+	* elf32-arc.c (elf_arc_link_hash_entry): Remove dyn_relocs.
+	(elf_arc_link_hash_newfunc): Updated.
+	* elf32-arm.c (elf32_arm_link_hash_entry): Remove dyn_relocs.
+	(elf32_arm_link_hash_newfunc): Updated.
+	(elf32_arm_copy_indirect_symbol): Likewise.
+	(elf32_arm_check_relocs): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs_for_symbol): Likewise.
+	* elf32-csky.c (csky_elf_link_hash_entry): Remove dyn_relocs.
+	(csky_elf_link_hash_newfunc): Updated.
+	(csky_allocate_dynrelocs): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(csky_elf_copy_indirect_symbol): Likewise.
+	* elf32-hppa.c (elf32_hppa_link_hash_entry): Remove dyn_relocs.
+	(hppa_link_hash_newfunc): Updated.
+	(elf32_hppa_copy_indirect_symbol): Likewise.
+	(elf32_hppa_hide_symbol): Likewise.
+	(elf32_hppa_adjust_dynamic_symbol): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(elf32_hppa_relocate_section): Likewise.
+	* elf32-i386.c (elf_i386_check_relocs): Likewise.
+	* elf32-lm32.c (elf_lm32_link_hash_entry): Removed.
+	(lm32_elf_link_hash_newfunc): Likewise.
+	(lm32_elf_link_hash_table_create): Updated.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(lm32_elf_copy_indirect_symbol): Likewise.
+	* elf32-m32r.c (elf_m32r_link_hash_entry): Removed.
+	(m32r_elf_link_hash_newfunc): Likewise.
+	(m32r_elf_link_hash_table_create): Updated.
+	(m32r_elf_copy_indirect_symbol): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elf32-metag.c (elf_metag_link_hash_entry): Remove dyn_relocs.
+	(metag_link_hash_newfunc): Updated.
+	(elf_metag_copy_indirect_symbol): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elf32-microblaze.c (elf32_mb_link_hash_entry): Remove
+	dyn_relocs.
+	(link_hash_newfunc): Updated.
+	(microblaze_elf_check_relocs): Likewise.
+	(microblaze_elf_copy_indirect_symbol): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elf32-nds32.c (elf_nds32_link_hash_entry): Remove dyn_relocs.
+	(nds32_elf_link_hash_newfunc): Updated.
+	(nds32_elf_copy_indirect_symbol): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(nds32_elf_check_relocs): Likewise.
+	* elf32-nios2.c (elf32_nios2_link_hash_entry): Remove dyn_relocs.
+	(link_hash_newfunc): Updated.
+	(nios2_elf32_copy_indirect_symbol): Likewise.
+	(nios2_elf32_check_relocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elf32-or1k.c (elf_or1k_link_hash_entry): Remove dyn_relocs.
+	(or1k_elf_link_hash_newfunc): Updated.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(or1k_elf_copy_indirect_symbol): Likewise.
+	* elf32-ppc.c (ppc_elf_link_hash_entry): Remove dyn_relocs.
+	(ppc_elf_link_hash_newfunc): Updated.
+	(ppc_elf_copy_indirect_symbol): Likewise.
+	(ppc_elf_check_relocs): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(ppc_elf_adjust_dynamic_symbol): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(ppc_elf_relocate_section): Likewise.
+	* elf32-s390.c (elf_s390_link_hash_entry): Remove dyn_relocs.
+	(link_hash_newfunc): Updated.
+	(elf_s390_copy_indirect_symbol): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(elf_s390_adjust_dynamic_symbol): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elf32-sh.c (elf_sh_link_hash_entry): Remove dyn_relocs.
+	(sh_elf_link_hash_newfunc): Updated.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(sh_elf_copy_indirect_symbol): Likewise.
+	(sh_elf_check_relocs): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_link_hash_entry): Removed.
+	(elf32_tic6x_link_hash_newfunc): Likewise.
+	(elf32_tic6x_link_hash_table_create): Updated.
+	(readonly_dynrelocs): Likewise.
+	(elf32_tic6x_check_relocs): Likewise.
+	(elf32_tic6x_allocate_dynrelocs): Likewise.
+	* elf32-tilepro.c (tilepro_elf_link_hash_entry): Remove
+	dyn_relocs.
+	(link_hash_newfunc): Updated.
+	(tilepro_elf_copy_indirect_symbol): Likewise.
+	(tilepro_elf_check_relocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elf64-ppc.c (ppc_link_hash_entry): Remove dyn_relocs.
+	(ppc64_elf_copy_indirect_symbol): Updated.
+	(ppc64_elf_check_relocs): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(ppc64_elf_adjust_dynamic_symbol): Likewise.
+	(dec_dynrel_count): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(ppc64_elf_relocate_section): Likewise.
+	* elf64-s390.c (elf_s390_link_hash_entry): Remove dyn_relocs.
+	(link_hash_newfunc): Updated.
+	(elf_s390_copy_indirect_symbol): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
+	* elfnn-aarch64.c (elf_aarch64_link_hash_entry): Remove
+	dyn_relocs.
+	(elfNN_aarch64_link_hash_newfunc): Updated.
+	(elfNN_aarch64_copy_indirect_symbol): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(need_copy_relocation_p): Likewise.
+	(elfNN_aarch64_allocate_dynrelocs): Likewise.
+	(elfNN_aarch64_allocate_ifunc_dynrelocs): Likewise.
+	* elfnn-riscv.c (riscv_elf_link_hash_entry): Remove dyn_relocs.
+	(link_hash_newfunc): Updated.
+	(riscv_elf_copy_indirect_symbol): Likewise.
+	(riscv_elf_check_relocs): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_link_hash_entry): Remove
+	dyn_relocs.
+	(link_hash_newfunc): Updated.
+	(_bfd_sparc_elf_copy_indirect_symbol): Likewise.
+	(_bfd_sparc_elf_check_relocs): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_link_hash_entry): Remove dyn_relocs.
+	(link_hash_newfunc): Updated.
+	(tilegx_elf_copy_indirect_symbol): Likewise.
+	(tilegx_elf_check_relocs): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	* elfxx-x86.c (elf_x86_allocate_dynrelocs): Likewise.
+	(readonly_dynrelocs): Likewise.
+	(_bfd_x86_elf_copy_indirect_symbol): Likewise.
+	* elfxx-x86.h (elf_x86_link_hash_entry): Remove dyn_relocs.
+
+2020-06-01  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (_bfd_vms_slurp_etir): Check bound for the current
+	command against cmd_length, not the end of record.  For
+	ETIR__C_STO_IMMR check size against cmd_length, mask repeat count
+	to 32-bits and break out on zero size.  Add ETIR__C_STC_LP_PSB
+	cmd_length test.
+
+2020-05-28  David Faust  <david.faust@oracle.com>
+
+	* elf64-bpf.c (bpf_elf_relocate_section): Fix handling of
+	R_BPF_INSN_{32,64} relocations.
+
+2020-05-28  Stephen Casner  <casner@acm.org>
+
+	* pdp11.c: Implement BRD_RELOC_32 to relocate the low 16 bits of
+	addreses in .long (used in testsuites) and .stab values.
+
+2020-05-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/22909
+	* elflink.c (bfd_elf_final_link): Use bfd_link_textrel_check.
+	Check bfd_link_dll when issue a DT_TEXTREL warning.
+	* elfxx-x86.c (maybe_set_textrel): Likewise.
+	(_bfd_x86_elf_size_dynamic_sections): Likewise.
+
+2020-05-26  Nick Clifton  <nickc@redhat.com>
+
+	* plugin.c (try_load_plugin): Extend error message when a plugin
+	fails to open.
+
+2020-05-23  Alan Modra  <amodra@gmail.com>
+
+	* bfdio.c (bfd_get_file_size): Don't segfault on NULL arch_header.
+
+2020-05-22  Alan Modra  <amodra@gmail.com>
+
+	PR 25882
+	* elf32-ppc.c (_bfd_elf_ppc_merge_fp_attributes): Don't init FP
+	attributes from shared libraries, and do not return an error if
+	they don't match.
+
+2020-05-21  Alan Modra  <amodra@gmail.com>
+
+	PR 25993
+	* opncls.c (_bfd_free_cached_info): Keep a copy of the bfd
+	filename.
+	(_bfd_delete_bfd): Free the copy.
+	(_bfd_new_bfd): Free nbfd->memory on error.
+
+2020-05-21  Alan Modra  <amodra@gmail.com>
+
+	* aoutx.h: Replace "if (x) free (x)" with "free (x)" throughout.
+	* archive.c, * bfd.c, * bfdio.c, * coff-alpha.c, * coff-ppc.c,
+	* coff-sh.c, * coff-stgo32.c, * coffcode.h, * coffgen.c,
+	* cofflink.c, * cpu-arm.c, * doc/chew.c, * dwarf2.c, * ecoff.c,
+	* ecofflink.c, * elf-eh-frame.c, * elf-m10200.c, * elf-m10300.c,
+	* elf-strtab.c, * elf.c, * elf32-arc.c, * elf32-arm.c,
+	* elf32-avr.c, * elf32-bfin.c, * elf32-cr16.c, * elf32-crx.c,
+	* elf32-epiphany.c, * elf32-ft32.c, * elf32-h8300.c,
+	* elf32-ip2k.c, * elf32-m32c.c, * elf32-m68hc11.c,
+	* elf32-m68k.c, * elf32-microblaze.c, * elf32-msp430.c,
+	* elf32-nds32.c, * elf32-nios2.c, * elf32-ppc.c, * elf32-pru.c,
+	* elf32-rl78.c, * elf32-rx.c, * elf32-sh.c, * elf32-spu.c,
+	* elf32-v850.c, * elf32-xtensa.c, * elf64-alpha.c,
+	* elf64-hppa.c, * elf64-ia64-vms.c, * elf64-mips.c
+	* elf64-mmix.c, * elf64-ppc.c, * elf64-sparc.c, * elfcode.h,
+	* elflink.c, * elfnn-ia64.c, * elfnn-riscv.c, * elfxx-mips.c,
+	* elfxx-x86.c, * format.c, * ihex.c, * libbfd.c, * linker.c,
+	* mmo.c, * opncls.c, * pdp11.c, * peXXigen.c, * pef.c,
+	* peicode.h, * simple.c, * som.c, * srec.c, * stabs.c, * syms.c,
+	* targets.c, * vms-lib.c, * xcofflink.c, * xtensa-isa.c: Likewise.
+
+2020-05-20  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfxx-riscv.h (riscv_parse_subset_t): Add new callback function
+	get_default_version.  It is used to find the default version for
+	the specific extension.
+	* elfxx-riscv.c (riscv_parsing_subset_version): Remove the parameters
+	default_major_version and default_minor_version.  Add new bfd_boolean
+	parameter *use_default_version.  Set it to TRUE if we need to call
+	the callback rps->get_default_version to find the default version.
+	(riscv_parse_std_ext): Call rps->get_default_version if we fail to find
+	the default version in riscv_parsing_subset_version, and then call
+	riscv_add_subset to add the subset into subset list.
+	(riscv_parse_prefixed_ext): Likewise.
+	(riscv_std_z_ext_strtab): Support Zicsr extensions.
+	* elfnn-riscv.c (riscv_merge_std_ext): Use strcasecmp to compare the
+	strings rather than characters.
+	riscv_merge_arch_attr_info): The callback function get_default_version
+	is only needed for assembler, so set it to NULL int the linker.
+	* elfxx-riscv.c (riscv_estimate_digit): Remove the static.
+	* elfxx-riscv.h: Updated.
+
+2020-05-20  Alan Modra  <amodra@gmail.com>
+
+	PR 25993
+	* archive.c (_bfd_get_elt_at_filepos): Don't strdup filename,
+	use bfd_set_filename.
+	* elfcode.h (_bfd_elf_bfd_from_remote_memory): Likewise.
+	* mach-o.c (bfd_mach_o_fat_member_init): Likewise.
+	* opncls.c (bfd_fopen, bfd_openstreamr, bfd_openr_iovec, bfd_openw),
+	(bfd_create): Likewise.
+	(_bfd_delete_bfd): Don't free filename.
+	(bfd_set_filename): Copy filename param to bfd_alloc'd memory,
+	return pointer to the copy or NULL on alloc fail.
+	* vms-lib.c (_bfd_vms_lib_get_module): Free newname and test
+	result of bfd_set_filename.
+	* bfd-in2.h: Regenerate.
+
+2020-05-20  Alan Modra  <amodra@gmail.com>
+
+	PR 26011
+	* elf.c (_bfd_elf_get_reloc_upper_bound): Sanity check reloc
+	section size against file size.
+	(_bfd_elf_get_dynamic_reloc_upper_bound): Likewise.
+
+2020-05-19  Gunther Nikl  <gnikl@justmail.de>
+
+	PR 26005
+	* elf.c (bfd_section_from_shdr): Replace bfd_zmalloc with bfd_malloc
+	and memset when allocating memory for the sections_being_created
+	array.
+
+2020-05-19  Stafford Horne  <shorne@gmail.com>
+
+	* elf32-or1k.c (or1k_elf_finish_dynamic_symbol): Rename srela
+	to relgot.
+	(or1k_elf_relocate_section): Access srelgot via
+	htab->root.srelgot.  Add assertions for srelgot->contents.
+	Introduce local variable for srelgot to not reuse global
+	sreloc.
+	(or1k_elf_relocate_section): Fixup dynamic symbol detection.
+	(or1k_set_got_and_rela_sizes): New function.
+	(or1k_initial_exec_offset): New function.
+	(TLS_GD, TLS_IE, TLS_LD, TLS_LE): Redefine macros as masks.
+	(or1k_elf_relocate_section): Allow for TLS to handle multiple
+	model access.
+	(or1k_elf_check_relocs): Use OR to set TLS access.
+	(allocate_dynrelocs): Use or1k_set_got_and_rela_sizes to set
+	sizes.
+	(or1k_elf_size_dynamic_sections): Use
+	or1k_set_got_and_rela_sizes to set sizes.
+	(or1k_elf_relocate_section): Fixup PCREL relocation calculation.
+	(TCB_SIZE): New macro.
+	(tpoff): Use TCB_SIZE and alignment to calculate offset.
+	(allocate_dynrelocs, readonly_dynrelocs, or1k_elf_check_relocs)
+	(or1k_elf_size_dynamic_sections): Rename p to sec_relocs.
+	(allocate_dynrelocs): Rename s to splt or sgot based on usage.
+	(tpoff): Add dynamic boolean argument.
+	(or1k_elf_relocate_section): Pass dynamic flag to tpoff.
+
+2020-05-19  Siddhesh Poyarekar  <siddesh.poyarekar@arm.com>
+
+	* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Club
+	BFD_RELOC_AARCH64_BRANCH19 and BFD_RELOC_AARCH64_TSTBR14
+	cases with BFD_RELOC_AARCH64_JUMP26.
+	(elfNN_aarch64_check_relocs): Likewise.
+
+2020-05-19  Alan Modra  <amodra@gmail.com>
+
+	* aix5ppc-core.c (xcoff64_core_file_matches_executable_p): Use
+	bfd_get_filename rather than accessing bfd->filename directly.
+	* aout-target.h (MY (object_p)): Likewise.
+	* aoutx.h (aout_find_nearest_line, aout_link_write_symbols): Likewise.
+	* archive.c (find_nested_archive, _bfd_generic_read_ar_hdr_mag),
+	(_bfd_construct_extended_name_table, _bfd_bsd44_write_ar_hdr),
+	(_bfd_archive_bsd44_construct_extended_name_table),
+	(_bfd_write_archive_contents, _bfd_compute_and_write_armap),
+	(_bfd_bsd_write_armap): Likewise.
+	* bfd.c (bfd_errmsg, _bfd_doprnt): Likewise.
+	* cache.c (bfd_open_file): Likewise.
+	* ecoff.c (_bfd_ecoff_write_armap): Likewise.
+	* ecofflink.c (bfd_ecoff_debug_accumulate_other): Likewise.
+	* elf32-bfin.c (bfinfdpic_relocate_section): Likewise.
+	* elf32-frv.c (elf32_frv_relocate_section): Likewise.
+	* elf32-hppa.c (elf32_hppa_final_link): Likewise.
+	* elf32-nds32.c (nds32_elf_output_symbol_hook),
+	(patch_tls_desc_to_ie): Likewise.
+	* elf32-spu.c (sort_bfds, print_one_overlay_section),
+	(spu_elf_auto_overlay): Likewise.
+	* elf64-hppa.c (elf_hppa_final_link): Likewise.
+	* elf64-ia64-vms.c (elf64_ia64_size_dynamic_sections): Likewise.
+	* elfcore.h (elf_core_file_matches_executable_p): Likewise.
+	* elflink.c (bfd_elf_size_dynamic_sections),
+	(elf_link_input_bfd): Likewise.
+	* linker.c (_bfd_generic_link_output_symbols): Likewise.
+	* mach-o.c (bfd_mach_o_follow_dsym),
+	(bfd_mach_o_close_and_cleanup): Likewise.
+	* opncls.c (_bfd_delete_bfd, _maybe_make_executable),
+	(find_separate_debug_file, get_build_id_name): Likewise.
+	* pdp11.c (aout_find_nearest_line, aout_link_write_symbols): Likewise.
+	* plugin.c (bfd_plugin_open_input): Likewise.
+	* rs6000-core.c (rs6000coff_core_file_matches_executable_p): Likewise.
+	* som.c (som_write_armap): Likewise.
+	* srec.c (srec_write_record, srec_write_symbols): Likewise.
+	* vms-lib.c (_bfd_vms_lib_get_imagelib_file),
+	(_bfd_vms_lib_write_archive_contents): Likewise.
+	* xcofflink.c (xcoff_link_add_dynamic_symbols): Likewise.
+
+2020-05-19  Alan Modra  <amodra@gmail.com>
+
+	PR 25713
+	* bfdio.c (_bfd_real_fopen): Typo fix.
+
+2020-05-18  Nick Clifton  <nickc@redhat.com>
+
+	PR 26005
+	* elf.c (bfd_section_from_shdr): Use bfd_malloc to allocate memory
+	for the sections_being_created array.
+
+2020-05-18  Alan Modra  <amodra@gmail.com>
+
+	* ecoff.c (ecoff_slurp_reloc_table): Malloc external_relocs so
+	they can be freed without also freeing internal_relocs.
+
+2020-05-18  Jaydeep Chauhan  <jaydeepchauhan1494@gmail.com>
+
+	PR 25713
+	* bfdio.c (_bfd_real_fopen): Convert UNIX style sirectory
+	separators into DOS style when creating a WIN32 fullpath.
+
+2020-05-14  Nelson Chu  <nelson.chu@sifive.com>
+
+	* elfnn-riscv.c (elfNN_riscv_mkobject):  New function.  We need this
+	to initialize RISC-V tdata.
+
+2020-05-12  Gunther Nikl  <gnikl@justmail.de>
+
+	* aoutx.h (NAME (aout, swap_std_reloc_out)): Reject an unsupported
+	relocation size.
+
+2020-05-11  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (xlate_pcrel_opt): Handle lxvp and stxvp.
+
+2020-05-11  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c: Rename powerxx to power10 throughout.
+
+2020-05-11  Alan Modra  <amodra@gmail.com>
+
+	PR 25961
+	* coffgen.c (coff_get_normalized_symtab): Check that buffer
+	contains required number of auxents before processing any auxent.
+	* coffswap.h (coff_swap_aux_in <C_FILE>): Only swap in extended
+	file name from auxents for PE.
+
+2020-05-04  Gunther Nikl  <gnikl@justmail.de>
+
+	* aout-cris.c (DEFAULT_ARCH): Delete define.
+	(MY_set_arch_mach): Likewise.
+	(SET_ARCH_MACH): Use bfd_set_arch_mach with an explicit architecture
+	of bfd_arch_cris.
+	(swap_ext_reloc_in): Add casts to r_index extraction. Mask valid bits
+	of r_type before the shift.
+
+2020-05-04  Wilco Dijkstra  <wdijkstr@arm.com>
+
+	PR ld/25665
+	* elfnn-aarch64.c (group_sections): Copy implementation from
+	elf32-arm.c.
+
+2020-05-01  Alan Modra  <amodra@gmail.com>
+
+	PR 25900
+	* elfnn-riscv.c (_bfd_riscv_relax_section): Check root.type before
+	accessing root.u.def of symbols.  Also check root.u.def.section
+	is non-NULL.  Reverse tests so as to make the logic positive.
+
+2020-05-01  Alan Modra  <amodra@gmail.com>
+
+	PR 25882
+	* elf32-tic6x.c (elf32_tic6x_merge_attributes): Don't transfer
+	Tag_ABI_PIC or Tag_ABI_PID from dynamic objects to the output.
+
+2020-05-01  Alan Modra  <amodra@gmail.com>
+
+	PR 25882
+	* elf32-bfin.c (elf32_bfin_merge_private_bfd_data): Add FIXME.
+	* elf32-frv.c (frv_elf_merge_private_bfd_data): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Likewise.
+	* elf32-nds32.c (nds32_elf_merge_private_bfd_data): Likewise.
+	* elf32-score.c (s3_elf32_score_merge_private_bfd_data): Likewise.
+	* elf32-score7.c (s7_elf32_score_merge_private_bfd_data): Likewise.
+	* elf32-sh.c (sh_elf_merge_private_data): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_merge_attributes): Likewise.
+	* elf64-ia64-vms.c (elf64_ia64_merge_private_bfd_data): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_merge_private_bfd_data): Likewise.
+
+2020-05-01  Alan Modra  <amodra@gmail.com>
+
+	PR 25882
+	* elf32-ppc.c (ppc_elf_merge_private_bfd_data): Ignore e_flags
+	from shared libraries.
+
+2020-04-29  Max Filippov  <jcmvbkbc@gmail.com>
+
+	* elf32-xtensa.c (relax_section): Don't negate diff_value for
+	XTENSA_NDIFF relocations. Don't add sign bits whe diff_value
+	equals 0. Report overflow when the result has negative sign but
+	all significant bits are zero.
+
+2020-04-29  Gunther Nikl  <gnikl@justmail.de>
+
+	* aoutx.h (swap_std_reloc_out): Special case 64 bit relocations.
+	(aout_link_reloc_link_order): Likewise. Make r_length an unsigned.
+
+2020-04-28  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (_bfd_vms_slurp_etir): Correct divide by zero check.
+	Emit warning message.
+
+2020-04-27  Tamar Christina  <tamar.christina@arm.com>
+
+	* coff-i386.c (COFF_WITH_PE_BIGOBJ): New.
+	* coff-x86_64.c (COFF_WITH_PE_BIGOBJ): New.
+	* config.bfd (targ_selvecs): Rename x86_64_pe_be_vec
+	to x86_64_pe_big_vec as it not a big-endian format.
+	(vec i386_pe_big_vec): New.
+	* configure.ac: Likewise.
+	* targets.c: Likewise.
+	* configure: Regenerate.
+	* pe-i386.c (TARGET_SYM_BIG, TARGET_NAME_BIG,
+	COFF_WITH_PE_BIGOBJ): New.
+	* pe-x86_64.c (TARGET_SYM_BIG, TARGET_NAME_BIG):
+	New.
+	(x86_64_pe_be_vec): Moved.
+
+2020-04-23  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* elf-bfd.h (elfcore_write_arc_v2): Add prototype.
+	* elf.c (elfcore_grok_arc_v2): New function.
+	(elfcore_grok_note): Call the new function to handle the corresponding
+	note.
+	(elfcore_write_arc_v2): New function.
+	(elfcore_write_register_note): Call the new function to handle the
+	corresponding pseudo-sections.
+
+2020-04-22  Max Filippov  <jcmvbkbc@gmail.com>
+
+	PR ld/25861
+	* bfd-in2.h: Regenerated.
+	* elf32-xtensa.c (elf_howto_table): New entries for
+	R_XTENSA_PDIFF{8,16,32} and R_XTENSA_NDIFF{8,16,32}.
+	(elf_xtensa_reloc_type_lookup, elf_xtensa_do_reloc)
+	(relax_section): Add cases for R_XTENSA_PDIFF{8,16,32} and
+	R_XTENSA_NDIFF{8,16,32}.
+	* libbfd.h (bfd_reloc_code_real_names): Add names for
+	BFD_RELOC_XTENSA_PDIFF{8,16,32} and
+	BFD_RELOC_XTENSA_NDIFF{8,16,32}.
+	* reloc.c: Add documentation for BFD_RELOC_XTENSA_PDIFF{8,16,32}
+	and BFD_RELOC_XTENSA_NDIFF{8,16,32}.
+
+2020-04-21  Tamar Christina  <tamar.christina@arm.com>
+
+	PR binutils/24753
+	* compress.c (bfd_get_full_section_contents): Exclude sections with no
+	content.
+
+2020-04-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/25849
+	* elf-bfd.h (elf_backend_data): Add
+	elf_backend_strip_zero_sized_dynamic_sections.
+	(_bfd_elf_strip_zero_sized_dynamic_sections): New prototype.
+	* elf64-alpha.c (elf_backend_strip_zero_sized_dynamic_sections):
+	New macro.
+	* elflink.c (_bfd_elf_strip_zero_sized_dynamic_sections): New
+	function.
+	* elfxx-target.h (elf_backend_strip_zero_sized_dynamic_sections):
+	New macro.
+	(elfNN_bed): Add elf_backend_strip_zero_sized_dynamic_sections.
+
+2020-04-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf64-alpha.c (alpha_elf_reloc_entry): Replace reltext with
+	sec.
+	(elf64_alpha_check_relocs): Set sec instead of reltext.  Warn
+	DT_TEXTREL with -M.
+	(elf64_alpha_calc_dynrel_sizes): Warn DT_TEXTREL with -M.
+
+2020-04-21  Nick Clifton  <nickc@redhat.com>
+
+	* po/sr.po: Updated Serbian translation.
+
+2020-04-21  Alan Modra  <amodra@gmail.com>
+
+	* elf32-sh.c (sh_elf_relocate_section): Remove STO_SH5_ISA32
+	processing.
+
+2020-04-20  Stephen Casner  <casner@acm.org>
+
+	* pdp11.c (N_STAB): Modify value to avoid conflict with N_EXT
+	causing globals from linker script to be treated as debug symbols.
+	(translate_symbol_table): Don't sign-extend symbol values from 16
+	to 64 bits in nm output.
+
+2020-04-20  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_size_stubs): Strip relbrlt too.
+
+2020-04-18  Alan Modra  <amodra@gmail.com>
+
+	* section.c (bfd_is_const_section): Correct test for special
+	sections.
+	* bfd-in2.h: Regenerate.
+
+2020-04-17  Alan Modra  <amodra@gmail.com>
+
+	PR 25842
+	* elf.c (_bfd_elf_get_symbol_version_string): Don't segfault on
+	NULL nodename.
+
+2020-04-16  Nick Clifton  <nickc@redhat.com>
+
+	PR 25803
+	* elfxx-mips.c (_bfd_mips_elf_adjust_dynamic_symbol): Replace an
+	abort with a more helpful error message.
+
+2020-04-16  Alan Modra  <amodra@gmail.com>
+
+	PR 25827
+	* dwarf2.c (scan_unit_for_symbols): Wrap overlong lines.  Don't
+	strdup(0).
+
+2020-04-15  Fangrui Song <maskray@google.com>
+
+	PR binutils/24613
+	* coff-rs6000.c (xcoff_ppc_relocate_section): Change RM_GENERATE_ERROR
+	to RM_DIAGNOSE plus a check of warn_unresolved_syms.
+	* coff64-rs6000.c (xcoff_ppc_relocate_section): Likewise.
+	* elf-bfd.h (_bfd_elf_large_com_section): Likewise.
+	* elf32-m32r.c (m32r_elf_relocate_section): Likewise.
+	* elf32-score.c (s3_bfd_score_elf_relocate_section): Likewise.
+	* elf32-score7.c (s7_bfd_score_elf_relocate_section): Likewise.
+	* elf32-sh.c (sh_elf_relocate_section): Likewise.
+	* elf32-spu.c (spu_elf_relocate_section): Likewise.
+	* elf64-hppa.c (elf64_hppa_relocate_section): Likewise.
+	* elflink.c (elf_link_output_extsym): Likewise.
+	* elfxx-mips.c (mips_elf_calculate_relocation): Likewise.
+
+2020-04-15  Alan Modra  <amodra@gmail.com>
+
+	PR 25823
+	* peXXigen.c (_bfd_XXi_swap_sym_in <C_SECTION>): Don't use a
+	pointer into strings that may be freed for section name, always
+	allocate a new string.
+
+2020-04-14  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+            Jan W. Jagersma  <jwjagersma@gmail.com>
+
+	* coff-go32.c (COFF_GO32, IMAGE_SCN_LNK_NRELOC_OVFL)
+	(coff_SWAP_scnhdr_in, coff_SWAP_scnhdr_out): Define.
+	(_bfd_go32_swap_scnhdr_in, _bfd_go32_swap_scnhdr_out)
+	(_bfd_go32_mkobject): New functions.
+	* coff-stgo32.c (IMAGE_SCN_LNK_NRELOC_OVFL)
+	(coff_SWAP_scnhdr_in, coff_SWAP_scnhdr_out): Define.
+	(go32exe_mkobject): Call _bfd_go32_mkobject.
+	* coffcode.h (COFF_WITH_EXTENDED_RELOC_COUNTER): Define.
+	(coff_set_alignment_hook): Define function for COFF_GO32_EXE
+	and COFF_GO32.
+	(coff_write_relocs): Enable extended reloc counter code if
+	COFF_WITH_EXTENDED_RELOC_COUNTER is defined.  Test for obj_go32.
+	(coff_write_object_contents): Likewise.  Pad section headers
+	for COFF_GO32 and COFF_GO32EXE.  Use bfd_coff_swap_scnhdr_out
+	instead of coff_swap_scnhdr_out.
+	* cofflink.c (_bfd_coff_final_link): Test also for obj_go32 to
+	enable extended reloc counter.
+	* coffswap.h: (coff_swap_scnhdr_in, coff_swap_scnhdr_out):
+	Declare with ATTRIBUTE_UNUSED.
+	* libcoff-in.h: (struct coff_tdata): New field go32.
+	(obj_go32): Define.
+	* libcoff.h: Regenerate.
+
+2020-04-14  Fangrui Song  <maskray@google.com>
+
+	PR gas/25768
+	* elf.c (assign_section_numbers): Always set .stab sh_entsize to
+	12.
+
+2020-04-14  Stephen Casner  <casner@acm.org>
+
+	PR ld/25677
+	* pdp11.c: Add implementation of --imagic option.
+	(adjust_o_magic): Fix objcopy --extract-symbol test.
+	* libaout.h (enum aout_magic): Add i_magic.
+
+2020-04-07  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+	    Nick Clifton  <nickc@redhat.com>
+
+	* elf32-sparc.c (sparc_final_write_processing): Fix whitespace.
+	<0>: Ignore.
+	<default>: Error rather than abort.
+
+2020-04-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/25767
+	* elf.c (_bfd_elf_fixup_group_sections): Remove zero-sized
+	relocation section from section group.
+
+2020-04-02  Jan W. Jagersma  <jwjagersma@gmail.com>
+
+	* bfdio.c (bfd_bread, bfd_tell, bfd_seek, bfd_mmap): Always add
+	bfd->origin to file offset.
+	* bfdwin.c (bfd_get_file_window): Likewise.
+	* bfd.c: Clarify the use of the bfd->origin field.
+	* bfd-in2.h: Regenerate.
+	* coff-i386.c: Don't include go32exe.h. Allow overriding
+	coff_write_object_contents via COFF_WRITE_CONTENTS.
+	* coff-stgo32.c (go32exe_cleanup, go32exe_mkobject)
+	(go32exe_write_object_contents): New functions.
+	(go32exe_temp_stub, go32exe_temp_stub_size): New static globals.
+	(COFF_WRITE_CONTENTS, GO32EXE_DEFAULT_STUB_SIZE): Define.
+	(create_go32_stub): Remove check for 2k size limit.  Read stub
+	from go32exe_temp_stub if present.
+	(go32_stubbed_coff_bfd_copy_private_bfd_data): Allocate and
+	copy variable-length stub.
+	(go32_check_format): Read stub to go32exe_temp_stub, set
+	origin, return go32exe_cleanup.
+	(adjust_filehdr_in_post, adjust_filehdr_out_pre)
+	(adjust_filehdr_out_post, adjust_scnhdr_in_post)
+	(adjust_scnhdr_out_pre, adjust_scnhdr_out_post)
+	(adjust_aux_in_post, adjust_aux_out_pre, adjust_aux_out_post):
+	Remove functions and their associated #defines.
+	* coffcode.h (coff_mkobject_hook): Remove stub copying code.
+	* libcoff-in.h: (struct coff_tdata): New field stub_size.
+	Rename field go32stub to stub.
+	* libcoff.h: Regenerate.
+	* coff-stgo32.c (go32_check_format): Rename to...
+	(go32exe_check_format): ...this.
+	(go32_stubbed_coff_bfd_copy_private_bfd_data): Rename to...
+	(go32exe_copy_private_bfd_data): ...this.
+	(stub_bytes): Rename to...
+	(go32exe_default_stub): ...this.
+	(create_go32_stub): Rename to...
+	(go32exe_create_stub): ...this.
+	* coff-stgo32.c (go32exe_copy_private_bfd_data): Avoid realloc
+	when possible.
+
+2020-04-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/25749
+	PR ld/25754
+	* elf32-i386.c (elf_i386_convert_load_reloc): Convert load
+	relocation to R_386_32 for relocation against non-preemptible
+	absolute symbol.
+	(elf_i386_check_relocs): Call _bfd_elf_x86_valid_reloc_p.  Don't
+	allocate dynamic relocation for non-preemptible absolute symbol.
+	(elf_i386_relocate_section): Pass sec to
+	GENERATE_DYNAMIC_RELOCATION_P.
+	* elf64-x86-64.c (R_X86_64_converted_reloc_bit): Moved.
+	(elf_x86_64_convert_load_reloc): Covert load relocation to
+	R_X86_64_32S or R_X86_64_32 for relocation against non-preemptible
+	absolute symbol.  Don't convert to R_X86_64_32S nor R_X86_64_32
+	for non-preemptible absolute symbol if they overflow.
+	(elf_x86_64_check_relocs): Call _bfd_elf_x86_valid_reloc_p.  Set
+	tls_type for GOT slot to GOT_ABS for non-preemptible absolute
+	symbol.  Don't allocate dynamic relocation for non-preemptible
+	absolute symbol.
+	(elf_x86_64_relocate_section): Don't generate relative relocation
+	for GOTPCREL relocations aganst local absolute symbol.  Pass sec
+	to GENERATE_DYNAMIC_RELOCATION_P.
+	* elfxx-x86.c (elf_x86_allocate_dynrelocs): No dynamic relocation
+	against non-preemptible absolute symbol.
+	(_bfd_elf_x86_valid_reloc_p): New function.
+	(_bfd_x86_elf_size_dynamic_sections): No dynamic relocation for
+	GOT_ABS GOT slot.
+	* elfxx-x86.h (GENERATE_DYNAMIC_RELOCATION_P): Add an SEC
+	argument.  Don't generate dynamic relocation against
+	non-preemptible absolute symbol.
+	(ABS_SYMBOL_P): New.
+	(GENERATE_RELATIVE_RELOC_P): Don't generate relative relocation
+	against non-preemptible absolute symbol.
+	(GOT_ABS): New.
+	(R_X86_64_converted_reloc_bit): New.  Moved from elf64-x86-64.c.
+	(_bfd_elf_x86_valid_reloc_p): New.
+
+2020-04-01  Tamar Christina  <tamar.christina@arm.com>
+
+	PR ld/16017
+	* elf32-arm.c (elf32_arm_populate_plt_entry): Set LSB of the PLT0
+	address in the GOT if in thumb only mode.
+
+2020-04-01  Tamar Christina  <tamar.christina@arm.com>
+
+	* elf32-arm.c (elf32_thumb2_plt_entry): Fix PC-rel offset.
+
+2020-04-01  Hans-Peter Nilsson  <hp@bitrange.com>
+
+	* mmo.c (mmo_scan): Create .text section only when needed, not
+	from the start.
+
+2020-03-31  Alan Modra  <amodra@gmail.com>
+
+	* coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Correct bfd_bread
+	return value check.
+
+2020-03-31  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (image_write): Check bounds for sections without
+	contents too.  Error on non-zero write to section without
+	contents.
+	(_bfd_vms_slurp_etir): Check return of image_write* functions.
+
+2020-03-31  Alan Modra  <amodra@gmail.com>
+
+	* tekhex.c (pass_over): Check is_eof before reading buffer.
+
+2020-03-30  Nick Clifton  <nickc@redhat.com>
+
+	PR binutils/pr25662
+	* libcoff-in.h (struct pe_tdata): Rename the insert_timestamp
+	field to timestamp and make it an integer.
+	* libcoff.h: Regenerate.
+	* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Test the timestamp
+	field in the pe_data structure rather than the insert_timestamp
+	field.
+
+2020-03-30  Alan Modra  <amodra@gmail.com>
+
+	PR 25745
+	* elf64-ppc.c (ppc64_elf_build_stubs): Use asprintf to form
+	statistics message.
+
+2020-03-26  Nick Clifton  <nickc@redhat.com>
+
+	* cofflink.c (bfd_coff_get_internal_extra_pe_aouthdr): Delete.
+	* libbfd-in.h (bfd_coff_get_internal_extra_pe_aouthdr): Remove
+	prototype.
+	* libbfd.h: Regenerate.
+
+2020-03-26  Alan Modra  <amodra@gmail.com>
+
+	* i386msdos.c (msdos_object_p): Catch -1 return from bfd_bread.
+
+2020-03-26  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (dst_define_location): Limit size of dst_ptr_offsets
+	array.
+	(_bfd_vms_slurp_object_records): Rename "err" to "ok".
+
+2020-03-25  Nick Clifton  <nickc@redhat.com>
+
+	* cofflink.c (bfd_coff_get_internal_extra_pe_aouthdr): New
+	function.
+	* libbfd-in.h (bfd_coff_get_internal_extra_pe_aouthdr): Prototype.
+	* libbfd.h: Regenerate.
+
+2020-03-25  Shahab Vahedi  <shahab@synopsys.com>
+
+	* elf32-arc.c (PRINT_DEBUG_RELOC_INFO_BEFORE): Use the
+	correct field name in the output string.
+
+2020-03-25  Alan Modra  <amodra@gmail.com>
+
+	PR 25662
+	* elf.c (assign_file_positions_for_load_sections): Adjust offset
+	for SHT_NOBITS section if first in segment.
+
+2020-03-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/25708
+	* elf-bfd.h (_bfd_elf_get_symbol_version_name): Renamed to ...
+	(_bfd_elf_get_symbol_version_string): This.
+	* elf.c (_bfd_elf_get_symbol_version_name): Renamed to ...
+	(_bfd_elf_get_symbol_version_string): This.
+	(bfd_elf_print_symbol): Pass TRUE to
+	_bfd_elf_get_symbol_version_string.
+	* libbfd-in.h (_bfd_nosymbols_get_symbol_version_string): Add a
+	bfd_boolean argument.
+	* syms.c (_bfd_nosymbols_get_symbol_version_string): Likewise.
+	* targets.c  (_bfd_get_symbol_version_string): Likewise.
+	(bfd_get_symbol_version_string): Likewise.
+	* bfd-in2.h: Regenerated.
+
+2020-03-24  Nick Clifton  <nickc@redhat.com>
+	    Jaydeep Chauhan  <jaydeepchauhan1494@gmail.com>
+
+	PR 25713
+	* bfdio.c (_bfd_real_fopen): Add code to handle long filenames on
+	Win32 systems.
+
+2020-03-24  Nick Clifton  <nickc@redhat.com>
+
+	PR 25681
+	* elf.c (_bfd_elf_map_sections_to_segments): When looking for a
+	segment to use for PT_GNU_RELRO, ignore empty sections in a
+	segment's current list.
+
+2020-03-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/25717
+	* elf-bfd.h (elf_obj_tdata): Change num_group to unsigned int.
+
+2020-03-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/25708
+	* elf-bfd.h (_bfd_elf_get_symbol_version_name): New.
+	* elf.c (_bfd_elf_get_symbol_version_name): New function.  Based
+	on the previous _bfd_elf_get_symbol_version_string.
+	(_bfd_elf_get_symbol_version_string): Use it.
+
+2020-03-24  Alan Modra  <amodra@gmail.com>
+
+	* archive.c (_bfd_generic_read_ar_hdr_mag): Sanity check extended
+	name size.  Use bfd_malloc rather than bfd_zmalloc, clearing just
+	struct areltdata.
+
+2020-03-23  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+	* elflink.c (_bfd_elf_tls_setup): Mention .tdata in comment.
+
+2020-03-23  Alan Modra  <amodra@gmail.com>
+
+	* ecoff.c (_bfd_ecoff_slurp_armap): Sanity check parsed_size and
+	symbol count.  Allocate an extra byte to ensure name strings
+	are terminated.  Sanity check name offsets.  Release memory on
+	error return.
+
+2020-03-23  Alan Modra  <amodra@gmail.com>
+
+	* i386msdos.c (msdos_object_p): Don't access e_lfanew when that
+	field hasn't been read.  Remove unnecessary casts.
+
+2020-03-22  Alan Modra  <amodra@gmail.com>
+
+	* coff64-rs6000.c (xcoff64_slurp_armap): Ensure size is large
+	enough to read number of symbols.
+
+2020-03-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* configure.ac (HAVE_EXECUTABLE_SUFFIX): Removed.
+	(EXECUTABLE_SUFFIX): Likewise.
+	* config.in: Regenerated.
+	* configure: Likewise.
+	* plugin.c (bfd_plugin_close_and_cleanup): Defined as
+	_bfd_generic_close_and_cleanup.
+	(plugin_list_entry): Remove resolution_file, resolution_option,
+	real_bfd, real_nsyms, real_syms, lto_nsyms, lto_syms, gcc,
+	lto_wrapper, gcc_env and initialized,
+	(need_lto_wrapper_p): Removed.
+	(get_lto_wrapper): Likewise.
+	(setup_lto_wrapper_env): Likewise.
+	(register_all_symbols_read): Likewise.
+	(egister_cleanup): Likewise.
+	(get_symbols): Likewise.
+	(add_input_file): Likewise.
+	(bfd_plugin_set_program_name): Remove need_lto_wrapper.
+	(add_symbols): Updated.
+	(try_claim): Likewise.
+	(try_load_plugin): Likewise.
+	(bfd_plugin_canonicalize_symtab): Likewise.
+	* plugin.h (bfd_plugin_set_program_name): Remove int argument.
+	(plugin_data_struct): Remove real_bfd, real_nsyms and real_syms.
+
+2020-03-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/25640
+	* plugin.c (plugin_list_entry): Add has_symbol_type.
+	(add_symbols_v2): New function.
+	(bfd_plugin_open_input): Don't invoke LTO wrapper if LTO plugin
+	provides symbol type.
+	(try_load_plugin): Add LDPT_ADD_SYMBOLS_V2.
+	(bfd_plugin_canonicalize_symtab): Use LTO plugin symbol type if
+	available.
+
+2020-03-20  Alan Modra  <amodra@gmail.com>
+
+	* coff-rs6000.c (_bfd_xcoff_slurp_armap): Ensure size is large
+	enough to read number of symbols.
+
+2020-03-20  Alan Modra  <amodra@gmail.com>
+
+	* elf.c (_bfd_elf_setup_sections): Don't test known non-NULL
+	backend functions for NULL before calling.
+	(copy_special_section_fields, _bfd_elf_copy_private_bfd_data),
+	(bfd_section_from_shdr, assign_section_numbers): Likewise.
+	* elfcode.h (elf_write_relocs, elf_slurp_reloc_table): Likewise.
+	* elfnn-ia64.c (ignore_errors): New function.
+	(elf_backend_link_order_error_handler): Redefine as ignore_errors.
+
+2020-03-19  Nick Clifton  <nickc@redhat.com>
+
+	PR 25676
+	* dwarf2.c (struct varinfo): Add unit_offset field to record the
+	location of the varinfo in the unit's debug info data.  Change the
+	type of the stack field to a boolean.
+	(lookup_var_by_offset): New function.  Returns the varinfo
+	structure for the variable described at the given offset in the
+	unit's debug info.
+	(scan_unit_for_symbols): Add support for variables which have the
+	DW_AT_specification attribute.
+
+2020-03-19  Nick Clifton  <nickc@redhat.com>
+
+	PR 25699
+	* elf.c (bfd_elf_set_group_contents): Replace assertion with an
+	error return.
+
+2020-03-19  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+	* elfxx-riscv.c (riscv_parse_subset): Don't use C99.
+
+2020-03-18  Nick Clifton  <nickc@redhat.com>
+
+	PR 25673
+	* elf.c (_bfd_elf_write_secondary_reloc_section): Fix illegal
+	memory access when processing a corrupt secondary reloc section.
+
+2020-03-18  Christophe Lyon  <christophe.lyon@linaro.org>
+
+	* elf32-arm.c (arm_build_one_stub): Emit a fatal error message
+	instead of calling abort.
+	* elf32-csky.c (csky_build_one_stub): Likewise.
+	* elf32-hppa.c (hppa_build_one_stub): Likewise.
+	* elf32-m68hc11.c (m68hc11_elf_build_one_stub): Likewise.
+	* elf32-m68hc12.c (m68hc12_elf_build_one_stub): Likewise.
+	* elf32-metag.c (metag_build_one_stub): Likewise.
+	* elf32-nios2.c (nios2_build_one_stub): Likewise.
+	* elf64-ppc.c (ppc_build_one_stub): Likewise.
+	(ppc_size_one_stub): Likewise.
+	* elfnn-aarch64.c (aarch64_build_one_stub): Likewise.
+
+2020-03-17  Nick Clifton  <nickc@redhat.com>
+
+	PR 25688
+	* elf.c (_bfd_elf_copy_special_section_fields): Replace assertions
+	with error messages.
+
+2020-03-17  Nick Clifton  <nickc@redhat.com>
+
+	PR 25687
+	* elf.c (_bfd_elf_slurp_secondary_reloc_section): Remove redundant
+	free.  Add free on another failure path.
+
+2020-03-16  Alan Modra  <amodra@gmail.com>
+
+	PR 25675
+	* elf.c (elf_sort_segments): Don't call bfd_octets_per_byte unless
+	we have a non-zero section count.  Do lma comparison in octets.
+
+2020-03-16  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (dst_restore_location): Validate index into
+	dst_ptr_offsets array before accessing.  Return status.
+	(dst_retrieve_location): Similarly, making "loc" parameter a
+	pointer to return value.
+	(_bfd_vms_slurp_etir): Update calls to above functions.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* configure.ac: Include netbsd-core.lo for all NetBSD arm and mips
+	targets.
+	* configure: Regenerated.
+
+2020-03-14  Alan Modra  <amodra@gmail.com>
+
+	* section.c (BFD_FAKE_SECTIONS): Formatting.
+	* bfd-in2.h: Regenerate.
+
+2020-03-13  Kamil Rytarowski  <n54@gmx.com>
+
+	* elf.c (elfcore_grok_netbsd_note): Add support for
+	NT_NETBSDCORE_LWPSTATUS notes.
+
+2020-03-13  Christophe Lyon  <christophe.lyon@linaro.org>
+
+	* bfd-in2.h: Regenerate.
+	* section.c (asection): Add already_assigned field.
+	(BFD_FAKE_SECTION): Add default initializer for it.
+	* ecoff.c (bfd_debug_section): Initialize already_assigned field.
+	* elf32-arm.c (arm_build_one_stub): Add support for
+	non_contiguous_regions.
+	* elf32-csky.c (csky_build_one_stub): Likewise.
+	* elf32-hppa.c (hppa_build_one_stub): Likewise.
+	* elf32-m68hc11.c (m68hc11_elf_build_one_stub): Likewise.
+	* elf32-m68hc12.c (m68hc12_elf_build_one_stub): Likewise.
+	* elf32-metag.c (metag_build_one_stub): Likewise.
+	* elf32-nios2.c (nios2_build_one_stub): Likewise.
+	* elf64-ppc.c (ppc_build_one_stub): Likewise.
+	(ppc_size_one_stub): Likewise.
+	* elfnn-aarch64.c (aarch64_build_one_stub): Likewise.
+	* elflink.c (elf_link_input_bfd): Likewise.
+
+2020-03-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24920
+	* elf-linker-x86.h (elf_linker_x86_params): Add
+	static_before_all_inputs and has_dynamic_linker.
+	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Report
+	dynamic input objects if -static is passed at command-line
+	before all input files without --dynamic-linker unless
+	--no-dynamic-linker is used.
+
+2020-03-13  Kamil Rytarowski  <n54@gmx.com>
+
+	* elf.c (elfcore_grok_netbsd_note): Add support for aarch64.
+
+2020-03-13  Christian Eggers  <ceggers@gmx.de>
+
+	* bfd.c (bfd_record_phdr): New local "opb".  Fix assignment of
+	"p_paddr" from "at".
+	* elfcode.h (bfd_from_remote_memory): Add units to several
+	parameters.  New local "opb".  Fix usage of p_align.  Fix
+	calculation of "localbase" from "ehdr_vma" and "p_vaddr".  Fix
+	call of target_read_memory.
+	* elflink.c (elf_fixup_link_order): Fix scope of "s" local.  Fix
+	calculation of "offset" and "output_offset".
+	(bfd_elf_final_link): New local "opb".  Fix calculation of "size"
+	from "offset" and fix calculation of "end" from "vma+size".  Fix
+	comparison between "sh_addr" and "vma"/"output_offset".
+	(bfd_elf_discard_info): Fix calculation of "eh_alignment".
+	* elf-bfd.h (struct elf_link_hash_table): Add unit to tls_size
+	member.
+	* elf.c (_bfd_elf_map_sections_to_segments): Add unit (bytes/
+	octets) to "wrap_to2 and "phdr_size" locals.  Fix calculation of
+	"wrap_to" value.  Add unit (bytes) to phdr_lma variable.  Fix
+	assignment of p_paddr from phdr_lma.  Fix comparison between
+	"lma+size" and "next->lma".
+	(elf_sort_segments): Fix assignment from p_paddr to lma.
+	(assign_file_positions_for_load_sections): Add unit (bytes) to
+	local "align".  Fix calculation of local "off_adjust".  Fix
+	calculation of local "filehdr_vaddr".
+	(assign_file_positions_for_non_load_sections): New local "opb".
+	Fix calculation of "end" from "p_size". Fix comparison between
+	"vma+SECTION_SIZE" and "start".  Fix calculation of "p_memsz"
+	from "end" and "p_vaddr".
+	(rewrite_elf_program_header): Fix comparison between p_vaddr and
+	vma.  Fix assignment to p_paddr from lma.  Fix comparison between
+	p_paddr and lma.  Fix assignment to p_paddr from lma.
+	* merge.c (sec_merge_emit): New local "opb". Convert
+	"alignment_power" to octets.
+	(_bfd_add_merge_section): New locals "alignment_power" and
+	"opb".  Fix comparison between "alignment_power" and
+	"sizeof(align)".
+	(_bfd_merge_sections): New local "opb".  Divide size by opb
+	before checking align mask.
+
+2020-03-13  Christian Eggers  <ceggers@gmx.de>
+
+	* elf.c (_bfd_elf_make_section_from_shdr): Introduce new temp
+	opb.  Divide Elf_Internal_Shdr::sh_addr by opb when setting
+	section LMA/VMA.
+	(_bfd_elf_make_section_from_phdr): Similarly.
+	(elf_fake_sections): Fix calculation of
+	Elf_Internal_shdr::sh_addr from section VMA.
+	(_bfd_elf_map_sections_to_segments): Fix mixup between octets
+	and bytes.
+	(assign_file_positions_for_load_sections): Fix calculations of
+	Elf_Internal_shdr::p_vaddr and p_paddr from section LMA/VMA.  Fix
+	comparison between program header address and section LMA.
+	(assign_file_positions_for_non_load_sections): Likewise.
+	(rewrite_elf_program_header): Likewise.  Introduce new temp opb.
+	(IS_CONTAINED_BY_VMA): Add parameter opb.
+	(IS_CONTAINED_BY_LMA,IS_SECTION_IN_INPUT_SEGMENT,
+	INCLUDE_SECTION_IN_SEGMENT): Likewise.
+	(copy_elf_program_header): Update call to ELF_SECTION_IN_SEGMENT.
+	Fix calculations of p_addr_valid and p_vaddr_offset.
+	* elflink.c (elf_link_add_object_symbols): Multiply section VMA
+	with octets per byte when comparing against p_vaddr.
+
+2020-03-11  Alan Modra  <amodra@gmail.com>
+
+	* som.c (setup_sections): Sanity check subspace.name.
+
+2020-03-11  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_inline_plt): Do increment rel in for loop.
+
+2020-03-10  Alan Modra  <amodra@gmail.com>
+
+	PR 25648
+	* ihex.c (ihex_write_object_contents): Don't assume ordering of
+	addresses here.
+
+2020-03-09  Alan Modra  <amodra@gmail.com>
+
+	* wasm-module.c (wasm_scan): Sanity check file name length
+	before allocating memory.  Move common section setup code.  Do
+	without bfd_tell to calculate section size.
+
+2020-03-06  Nick Clifton  <nickc@redhat.com>
+
+	* elf.c (_bfd_elf_set_section_contents): Replace call to abort
+	with error messages and failure return values.
+
+2020-03-05  Max Filippov  <jcmvbkbc@gmail.com>
+
+	* elf32-xtensa.c (shrink_dynamic_reloc_sections): Shrink dynamic
+	relocation sections for any removed reference to a dynamic symbol.
+
+2020-03-05  Nick Clifton  <nickc@redhat.com>
+
+	* elf-bfd.h (struct elf_backend_data): Add new fields:
+	init_secondary_reloc_section, slurp_secondary_reloc_section,
+	write_secondary_reloc_section.
+	(_bfd_elf_init_secondary_reloc_section): Prototype.
+	(_bfd_elf_slurp_secondary_reloc_section): Prototype.
+	(_bfd_elf_write_secondary_reloc_section): Prototype.
+	* elf.c ( bfd_section_from_shdr): Invoke the new
+	init_secondary_reloc_section backend function, if defined, when a
+	second reloc section is encountered.
+	(swap_out_syms): Invoke the new symbol_section_index function, if
+	defined, when computing the section index of an OS/PROC specific
+	symbol.
+	(_bfd_elf_init_secondary_reloc_section): New function.
+	(_bfd_elf_slurp_secondary_reloc_section): New function.
+	(_bfd_elf_write_secondary_reloc_section): New function.
+	(_bfd_elf_copy_special_section_fields): New function.
+	* elfcode.h (elf_write_relocs): Invoke the new
+	write_secondary_relocs function, if defined, in order to emit
+	secondary relocs.
+	(elf_slurp_reloc_table): Invoke the new slurp_secondary_relocs
+	function, if defined, in order to read in secondary relocs.
+	* elfxx-target.h (elf_backend_copy_special_section_fields):
+	Provide a non-NULL default definition.
+	(elf_backend_init_secondary_reloc_section): Likewise.
+	(elf_backend_slurp_secondary_reloc_section): Likewise.
+	(elf_backend_write_secondary_reloc_section): Likewise.
+	(struct elf_backend_data elfNN_bed): Add initialisers for the new
+	fields.
+        * configure.ac (score_elf32_[bl]e_vec): Add elf64.lo
+        * configure: Regenerate.
+
+2020-03-05  Alan Modra  <amodra@gmail.com>
+
+	* archive64.c (_bfd_archive_64_bit_slurp_armap): Check parsed_size
+	against file size before allocating memory.  Use bfd_alloc rather
+	than bfd_zalloc for carsym/strings memory.
+
+2020-03-04  Alan Modra  <amodra@gmail.com>
+
+	* elf.c (elf_fake_sections): Ensure sh_addralign is such that
+	sh_addr mod sh_addalign is zero.
+
+2020-03-04  Alan Modra  <amodra@gmail.com>
+
+	* format.c (bfd_check_format_matches): Call cleanup on error exit.
+
+2020-03-03  Alan Modra  <amodra@gmail.com>
+
+	* format.c (struct bfd_preserve): Add cleanup field.
+	(bfd_preserve_save): Add cleanup param and save.
+	(bfd_preserve_restore): Return cleanup.
+	(bfd_preserve_finish): Call the cleanup for the discarded match.
+	(bfd_check_format_matches): Pass cleanup to bfd_preserve_save,
+	and clear when preserving a match.  Restore cleanup too when
+	restoring that match.
+
+2020-03-02  Alan Modra  <amodra@gmail.com>
+
+	* cisco-core.c (cisco_core_file_p): Return bfd_cleanup.
+	* hpux-core.c (hpux_core_core_file_p): Update prototype.
+	* sco5-core.c (sco5_core_file_p): Return bfd_cleanup.
+	(core_sco5_vec): Correct initialisers.
+
+2020-03-02  Alan Modra  <amodra@gmail.com>
+
+	* aix386-core.c (aix386_core_file_p): Return bfd_cleanup.
+	* aix5ppc-core.c (xcoff64_core_p): Likewise.
+	* cisco-core.c (cisco_core_file_validate): Likewise.
+	* hppabsd-core.c (hppabsd_core_core_file_p): Likewise.
+	* hpux-core.c (hpux_core_core_file_p): Likewise.
+	* irix-core.c (irix_core_core_file_p): Likewise.
+	* lynx-core.c (lynx_core_file_p): Likewise.
+	* netbsd-core.c (netbsd_core_file_p): Likewise.
+	* osf-core.c (osf_core_core_file_p): Likewise.
+	* ptrace-core.c (ptrace_unix_core_file_p): Likewise.
+	* sco5-core.c (sco5_core_file_p): Likewise.
+
+2020-03-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* trad-core.c (trad_unix_core_file_p): Return bfd_cleanup.
+
+2020-03-02  Alan Modra  <amodra@gmail.com>
+
+	* targets.c (bfd_cleanup): New typedef.
+	(struct bfd <_bfd_check_format>): Return a bfd_cleanup.
+	* libbfd-in.h (_bfd_no_cleanup): Define.
+	* format.c (bfd_reinit): Add cleanup parameter, call it.
+	(bfd_check_format_matches): Set cleanup from _bfd_check_format
+	call and pass to bfd_reinit.  Delete temp, use abfd->xvec instead.
+	* aout-target.h (callback, object_p): Return bfd_cleanup.
+	* aout-tic30.c (tic30_aout_callback, tic30_aout_object_p): Likewise.
+	* archive.c (bfd_generic_archive_p): Likewise.
+	* binary.c (binary_object_p): Likewise.
+	* coff-alpha.c (alpha_ecoff_object_p): Likewise.
+	* coff-ia64.c (ia64coff_object_p): Likewise.
+	* coff-rs6000.c (_bfd_xcoff_archive_p, rs6000coff_core_p): Likewise.
+	* coff-sh.c (coff_small_object_p): Likewise.
+	* coff-stgo32.c (go32_check_format): Likewise.
+	* coff64-rs6000.c (xcoff64_archive_p, rs6000coff_core_p),
+	(xcoff64_core_p): Likewise.
+	* coffgen.c (coff_real_object_p, coff_object_p): Likewise.
+	* elf-bfd.h (bfd_elf32_object_p, bfd_elf32_core_file_p),
+	(bfd_elf64_object_p, bfd_elf64_core_file_p): Likewise.
+	* elfcode.h (elf_object_p): Likewise.
+	* elfcore.h (elf_core_file_p): Likewise.
+	* i386msdos.c (msdos_object_p): Likewise.
+	* ihex.c (ihex_object_p): Likewise.
+	* libaout.h (some_aout_object_p): Likewise.
+	* libbfd-in.h (bfd_generic_archive_p, _bfd_dummy_target),
+	(_bfd_vms_lib_alpha_archive_p, _bfd_vms_lib_ia64_archive_p): Likewise.
+	* libbfd.c (_bfd_dummy_target): Likewise.
+	* libcoff-in.h (coff_object_p): Likewise.
+	* mach-o-aarch64.c (bfd_mach_o_arm64_object_p),
+	(bfd_mach_o_arm64_core_p): Likewise.
+	* mach-o-arm.c (bfd_mach_o_arm_object_p),
+	(bfd_mach_o_arm_core_p): Likewise.
+	* mach-o-i386.c (bfd_mach_o_i386_object_p),
+	(bfd_mach_o_i386_core_p): Likewise.
+	* mach-o-x86-64.c (bfd_mach_o_x86_64_object_p),
+	(bfd_mach_o_x86_64_core_p): Likewise.
+	* mach-o.c (bfd_mach_o_header_p, bfd_mach_o_gen_object_p),
+	(bfd_mach_o_gen_core_p, bfd_mach_o_fat_archive_p): Likewise.
+	* mach-o.h (bfd_mach_o_object_p, bfd_mach_o_core_p),
+	(bfd_mach_o_fat_archive_p, bfd_mach_o_header_p): Likewise.
+	* mmo.c (mmo_object_p): Likewise.
+	* pef.c (bfd_pef_object_p, bfd_pef_xlib_object_p): Likewise.
+	* peicode.h (coff_real_object_p, pe_ILF_object_p),
+	(pe_bfd_object_p): Likewise.
+	* plugin.c (ld_plugin_object_p, bfd_plugin_object_p): Likewise.
+	* ppcboot.c (ppcboot_object_p): Likewise.
+	* rs6000-core.c (rs6000coff_core_p): Likewise.
+	* som.c (som_object_setup, som_object_p): Likewise.
+	* srec.c (srec_object_p, symbolsrec_object_p): Likewise.
+	* tekhex.c (tekhex_object_p): Likewise.
+	* vms-alpha.c (alpha_vms_object_p): Likewise.
+	* vms-lib.c (_bfd_vms_lib_archive_p, _bfd_vms_lib_alpha_archive_p),
+	(_bfd_vms_lib_ia64_archive_p, _bfd_vms_lib_txt_archive_p): Likewise.
+	* wasm-module.c (wasm_object_p): Likewise.
+	* xsym.c (bfd_sym_object_p): Likewise.
+	* xsym.h (bfd_sym_object_p): Likewise.
+	* aoutx.h (some_aout_object_p): Likewise, and callback parameter
+	return type.
+	* pdp11.c (some_aout_object_p): Likewise.
+	* plugin.c (register_ld_plugin_object_p): Update object_p
+	parameter type.
+	* plugin.h (register_ld_plugin_object_p): Likewise.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+	* libcoff.h: Regenerate.
+
+2020-03-02  Alan Modra  <amodra@gmail.com>
+
+	* coff-alpha.c (alpha_ecoff_le_vec): Add SEC_SMALL_DATA to
+	applicable section flags.
+	* coff-mips.c (mips_ecoff_le_vec, mips_ecoff_be_vec): Likewise.
+	(mips_ecoff_bele_vec): Likewise.
+	* coffcode.h (sec_to_styp_flags): Set SEC_SMALL_DATA for .sdata
+	and .sbss sections.
+	* ecoff.c (_bfd_ecoff_new_section_hook): Likewise.
+	(_bfd_ecoff_styp_to_sec_flags): Likewise.
+
+2020-03-02  Alan Modra  <amodra@gmail.com>
+
+	* elf32-m32r.c (m32r_elf_section_flags): New function.
+	(elf_backend_section_flags): Define.
+	* elf32-nds32.c (nds32_elf_section_flags): New function.
+	(elf_backend_section_flags): Define.
+	* elf32-ppc.c (ppc_elf_section_from_shdr): Set SEC_SMALL_DATA for
+	.sbss and .sdata sections.
+	* elf32-v850.c (v850_elf_section_from_shdr): Set SEC_SMALL_DATA
+	for SHF_V850_GPREL sections.
+	* elf64-alpha.c (elf64_alpha_section_from_shdr): Delete outdated
+	FIXME.
+	* elf64-hppa.c (elf64_hppa_section_from_shdr): Set SEC_SMALL_DATA
+	for SHF_PARISC_SHORT sections.
+	* elf64-ppc.c (ppc64_elf_section_flags): New function.
+	(elf_backend_section_flags): Define.
+	* elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Set SEC_SMALL_DATA
+	for SHF_MIPS_GPREL sections.  Delete FIXME.
+
+2020-03-02  Alan Modra  <amodra@gmail.com>
+
+	* elf-bfd.h (elf_backend_section_flags): Remove flagword* param.
+	* elf.c (_bfd_elf_make_section_from_shdr): Set section flags before
+	calling elf_backend_section_flags with adjusted params.  Use
+	newsect->flags past that point.
+	(_bfd_elf_new_section_hook): Always set sh_type and sh_flags for
+	special sections.
+	(_bfd_elf_init_private_section_data): Allow normal sh_type sections
+	to have their type overridden, and all sh_flags but processor and
+	os specific.
+	* elf32-arm.c (elf32_arm_section_flags): Adjust for changed params.
+	* elf32-mep.c (mep_elf_section_flags): Likewise.
+	* elf32-nios2.c (nios2_elf32_section_flags): Likewise.
+	* elf64-alpha.c (elf64_alpha_section_flags): Likewise.
+	* elf64-ia64-vms.c (elf64_ia64_section_flags): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_section_flags): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_size_stubs): Exclude the linker
+	stub BFD and non-aarch64 input files when scanning for stubs.
+
+2020-03-02  Alan Modra  <amodra@gmail.com>
+
+	* coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Provide an upper
+	limit to decompressed element size.
+
+2020-03-02  Alan Modra  <amodra@gmail.com>
+
+	* vms-lib.c (vms_traverse_index): Add recur_count param and
+	update calls.  Fail on excessive recursion.
+
+2020-03-02  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (vms_get_remaining_object_record): Use
+	bfd_realloc_or_free rather than bfd_realloc.
+	(add_symbol_entry, vector_grow1, alpha_vms_slurp_relocs): Likewise.
+	(dst_define_location, parse_module): Likewise, and check realloc
+	return status before using memory.  Return status from function
+	adjusting all callers.
+
+2020-02-28  Alan Modra  <amodra@gmail.com>
+
+	* vms-lib.c (_bfd_vms_lib_archive_p): Free memory on error paths.
+
+2020-02-28  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (alpha_vms_object_p): Use _bfd_malloc_and_read.
+	Remove duplicate undersize check.
+
+2020-02-27  Alan Modra  <amodra@gmail.com>
+
+	PR 24511
+	* mmo.c (mmo_scan): Set SEC_DATA for .data.
+
+2020-02-27  Alan Modra  <amodra@gmail.com>
+
+	PR 24511
+	* syms.c (stt): Trim off all but 'e', 'i' and 'p' entries.
+	(coff_section_type): Adjust comment.
+	(decode_section_type): Likewise.  Call coff_section_type before
+	decode_section_type.
+	(bfd_decode_symclass): Use 'c' for common sections other than
+	the standard one.
+
+2020-02-27  Alan Modra  <amodra@gmail.com>
+
+	* coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Put all data in one
+	malloc'd block.
+
+2020-02-27  Alan Modra  <amodra@gmail.com>
+
+	* bfd.c (bfd_stat_arch_elt): Use vector of containing archive,
+	if file is an archive element.
+	* bfd-in2.h: Regenerate.
+
+2020-02-26  Alan Modra  <amodra@gmail.com>
+
+	* archive.c (do_slurp_bsd_armap): Increase minimum parsed_size, and
+	bfd_set_error on failing test.  Don't bother changing bfd_error on
+	file read error.  Check symdef_count is multiple of BSD_SYMDEF_SIZE.
+	Check sym name is within string buffer.  Use size_t for some vars.
+	(do_slurp_coff_armap): Use size_t for some variables, fix size of
+	int_buf.  Don't change bfd_error on file read error.  Use
+	_bfd_mul_overflow when calculating carsym buffer size.  Reorder
+	calculations to catch overflows before they occur.  malloc and
+	free raw armap rather than using bfd_alloc.  Read raw armap before
+	allocating carsym+strings buffer.
+	(_bfd_slurp_extended_name_table): Localize variables.  Check
+	name size against file size.
+
+2020-02-26  Alan Modra  <amodra@gmail.com>
+
+	* vms-lib.c (vms_lib_read_index): Release correct buffer.
+
+2020-02-26  Alan Modra  <amodra@gmail.com>
+
+	* elf32-rx.c (rx_elf_relocate_section): Use bfd_malloc rather than
+	malloc.  Check for NULL return from bfd_malloc.
+	(rx_table_find, rx_table_map): Likewise.
+	(rx_set_section_contents): Check bfd_alloc return.
+	(rx_dump_symtab): Don't alloc internal_syms or external_syms.
+
+2020-02-26  Alan Modra  <amodra@gmail.com>
+
+	* aoutx.h: Indent labels correctly.  Format error strings.
+	* archive.c: Likewise.
+	* archive64.c: Likewise.
+	* coff-arm.c: Likewise.
+	* coff-rs6000.c: Likewise.
+	* coff-stgo32.c: Likewise.
+	* cpu-arm.c: Likewise.
+	* dwarf2.c: Likewise.
+	* elf-ifunc.c: Likewise.
+	* elf-properties.c: Likewise.
+	* elf-s390-common.c: Likewise.
+	* elf-strtab.c: Likewise.
+	* elf.c: Likewise.
+	* elf32-arm.c: Likewise.
+	* elf32-bfin.c: Likewise.
+	* elf32-cr16.c: Likewise.
+	* elf32-csky.c: Likewise.
+	* elf32-i386.c: Likewise.
+	* elf32-m68k.c: Likewise.
+	* elf32-msp430.c: Likewise.
+	* elf32-nds32.c: Likewise.
+	* elf32-nios2.c: Likewise.
+	* elf32-pru.c: Likewise.
+	* elf32-xtensa.c: Likewise.
+	* elf64-ia64-vms.c: Likewise.
+	* elf64-x86-64.c: Likewise.
+	* elfcode.h: Likewise.
+	* elfcore.h: Likewise.
+	* elflink.c: Likewise.
+	* elfnn-aarch64.c: Likewise.
+	* elfnn-ia64.c: Likewise.
+	* elfnn-riscv.c: Likewise.
+	* elfxx-mips.c: Likewise.
+	* elfxx-sparc.c: Likewise.
+	* elfxx-x86.c: Likewise.
+	* i386lynx.c: Likewise.
+	* merge.c: Likewise.
+	* pdp11.c: Likewise.
+	* plugin.c: Likewise.
+	* reloc.c: Likewise.
+
+2020-02-26  Alan Modra  <amodra@gmail.com>
+
+	PR 25593
+	* elf-bfd.h (struct elf_link_hash_table): Rename "loaded" to
+	"dyn_loaded".
+	(bfd_elf_add_dt_needed_tag): Declare.
+	* elf-strtab.c (_bfd_elf_strtab_restore): Handle NULL buf.
+	* elflink.c (bfd_elf_add_dt_needed_tag): Make global and rename
+	from elf_add_dt_needed_tag.  Remove soname and doit param.
+	(elf_link_add_object_symbols): Don't use elf_add_dt_needed_tag
+	to see whether as-needed lib is already loaded, use dyn_loaded
+	list instead.  When saving and restoring around as-needed lib
+	handle possibility that dynstr has not been initialised.  Don't
+	add DT_NEEDED tags here.  Limit dyn_loaded list to dynamic libs.
+	Mark libs loaded via DT_NEEDED entries of other libs with
+	DYN_NO_NEEDED if they should not be mentioned in DT_NEEDED of
+	the output.
+	(elf_link_check_versioned_symbol): Remove now unneccesary
+	DYNAMIC check when traversing dyn_loaded list.
+
+2020-02-26  Alan Modra  <amodra@gmail.com>
+
+	* bfdio.c (bfd_get_file_size): Ignore bogus archive element sizes.
+
+2020-02-25  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/25584
+	* plugin.c (need_lto_wrapper_p): New.
+	(bfd_plugin_set_program_name): Add an int argument to set
+	need_lto_wrapper_p.
+	(get_lto_wrapper): Return FALSE if need_lto_wrapper_p isn't
+	set.
+	* plugin.h (bfd_plugin_set_program_name): Add an int argument.
+
+2020-02-24  Alan Modra  <amodra@gmail.com>
+
+	* vms-lib.c (_bfd_vms_lib_archive_p): Correct overflow checks.
+
+2020-02-24  Alan Modra  <amodra@gmail.com>
+
+	* vms-lib.c (struct carsym_mem): Add limit.
+	(vms_add_index): Heed limit.
+	(vms_traverse_index): Catch buffer overflows.  Remove outdated fixme.
+	(vms_lib_read_index): Set up limit.  Catch 32-bit overflow.
+	Always return actual number read.
+	(_bfd_vms_lib_archive_p): Catch buffer overflows.  Replace
+	assertion with error exit.
+
+2020-02-22  Alan Modra  <amodra@gmail.com>
+
+	PR 25585
+	* elf.c (assign_file_positions_for_load_sections): Continue linking
+	on "PHDR segment not covered by LOAD segment" errors.
+
+2020-02-21  Alan Modra  <amodra@gmail.com>
+
+	* mach-o.c (bfd_mach_o_canonicalize_relocs): Fix ineffective
+	overflow check.
+	(bfd_mach_o_canonicalize_reloc): Likewise.
+	(bfd_mach_o_canonicalize_dynamic_reloc): Likewise.  Sanity check
+	counts and offsets against file size.
+	(bfd_mach_o_build_dysymtab): Fix ineffective overflow check.
+	(bfd_mach_o_mangle_sections): Remove unnecessary overflow check.
+	(bfd_mach_o_read_symtab_symbols): Sanity check count and offset
+	against file size.  Delete symbol table error message.
+	(bfd_mach_o_read_dysymtab): Sanity check counts and offsets
+	against file size.
+	(bfd_mach_o_read_symtab): Likewise.
+	(bfd_mach_o_read_command): Pass file size.
+	(bfd_mach_o_scan): Sanity check command count against file size.
+
+2020-02-21  Alan Modra  <amodra@gmail.com>
+
+	PR 25569
+	* aoutx.h (adjust_o_magic, adjust_z_magic, adjust_n_magic): Use
+	"text", "data" and "bss" section pointer vars.  Don't update
+	section size, just exec header sizes.
+	(adjust_sizes_and_vmas): Don't update text section size.  Set
+	initial exec header a_text.  Print exec headers sizes.
+	* pdp11.c (adjust_o_magic, adjust_z_magic, adjust_n_magic),
+	(adjust_sizes_and_vmas): Similarly.  Formatting.
+	(final_link): Correct final file extension.
+
+2020-02-20  Nick Clifton  <nickc@redhat.com>
+
+	* elf-bfd.h (struct elf_backend_data): Add symbol_section_index
+	callback.
+	* elfxx-target.h (elf_backend_symbol_section_index): Provide
+	default definition.
+	(elfNN_bed): Initialise the symbol_section_index field.
+	* elf.c (swap_out_syms): Call symbol_section_index, if defined, on
+	OS and PROC specific section indicies.  Warn if converting other
+	reserved incidies to SHN_ABS.
+
+2020-02-19  Sergey Belyashov  <sergey.belyashov@gmail.com>
+
+	PR 25537
+	* cpu-z80.c: Add machine type compatibility checking.
+
+2020-02-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/25355
+	* plugin.c (plugin_list_entry): Remove handle.
+	(try_load_plugin): Call dlclose before return.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* libbfd-in.h (_bfd_constant_p): Define.
+	(_bfd_alloc_and_read, _bfd_malloc_and_read): Check read size against
+	file size before allocating memory.
+	* coffgen.c (_bfd_coff_get_external_symbols): Remove file size check.
+	* elf.c (bfd_elf_get_str_section): Likewise.
+	(_bfd_elf_slurp_version_tables): Likewise.
+	* libbfd.h: Regenerate.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* libbfd-in.h (_bfd_alloc_and_read, _bfd_malloc_and_read): New.
+	* aoutx.h (aout_get_external_symbols): Replace calls to
+	bfd_[m]alloc and bfd_bread with call to _bfd_[m]alloc_and_read.
+	(slurp_reloc_table): Likewise.
+	* archive.c (do_slurp_bsd_armap): Likewise.
+	(do_slurp_coff_armap): Likewise.
+	* archive64.c (_bfd_archive_64_bit_slurp_armap): Likewise.
+	* coff-rs6000.c (_bfd_xcoff_slurp_armap): Likewise.
+	* coff64-rs6000.c (xcoff64_slurp_armap): Likewise.
+	* coffcode.h (coff_set_arch_mach_hook, buy_and_read): Likewise.
+	* coffgen.c (coff_real_object_p, coff_object_p, build_debug_section),
+	(_bfd_coff_get_external_symbols): Likewise.
+	* ecoff.c (ecoff_slurp_symbolic_header),
+	(_bfd_ecoff_slurp_symbolic_info, ecoff_slurp_reloc_table),
+	(_bfd_ecoff_slurp_armap, ecoff_link_add_object_symbols, READ),
+	(ecoff_indirect_link_order): Likewise.
+	* elf.c (bfd_elf_get_str_section, setup_group, elf_read_notes),
+	(_bfd_elf_slurp_version_tables): Likewise.
+	* elf32-m32c.c (m32c_elf_relax_section): Likewise.
+	* elf32-rl78.c (rl78_elf_relax_section): Likewise.
+	* elf32-rx.c (elf32_rx_relax_section): Likewise.
+	* elf64-alpha.c (READ): Likewise.
+	* elf64-mips.c (mips_elf64_slurp_one_reloc_table): Likewise.
+	* elf64-sparc.c (elf64_sparc_slurp_one_reloc_table): Likewise.
+	* elfcode.h (elf_slurp_symbol_table),
+	(elf_slurp_reloc_table_from_section): Likewise.
+	* elflink.c (elf_link_add_object_symbols),
+	(elf_link_check_versioned_symbol): Likewise.
+	* elfxx-mips.c (READ): Likewise.
+	* i386lynx.c (slurp_reloc_table): Likewise.
+	* lynx-core.c (lynx_core_file_p): Likewise.
+	* mach-o.c (bfd_mach_o_canonicalize_relocs),
+	(bfd_mach_o_read_symtab_strtab, bfd_mach_o_alloc_and_read),
+	(bfd_mach_o_read_prebound_dylib, bfd_mach_o_read_dyld_content
+	* pdp11.c (aout_get_external_symbols, slurp_reloc_table
+	* pef.c (bfd_pef_print_loader_section, bfd_pef_scan_start_address),
+	(bfd_pef_parse_symbols): Likewise.
+	* peicode.h (pe_ILF_object_p, pe_bfd_object_p
+	* som.c (setup_sections, som_slurp_string_table),
+	(som_slurp_reloc_table, som_bfd_count_ar_symbols),
+	(som_bfd_fill_in_ar_symbols): Likewise.
+	* vms-alpha.c (module_find_nearest_line, evax_bfd_print_dst),
+	(evax_bfd_print_image): Likewise.
+	* vms-lib.c (_bfd_vms_lib_archive_p): Likewise.
+	* wasm-module.c (wasm_scan): Likewise.
+	* xcofflink.c (xcoff_link_add_symbols): Likewise.
+	* xsym.c (bfd_sym_read_name_table),
+	(bfd_sym_print_type_information_table_entry): Likewise.
+	* libbfd.h: Regenerate.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* aoutx.h (slurp_reloc_table): Allocate reloc_cache after
+	reading external relocs.
+	* ecoff.c (ecoff_slurp_reloc_table): Likewise.
+	* archive.c (_bfd_write_archive_contents): Don't twiddle bfd_error
+	after bfd_bread.
+	* archive64.c (_bfd_archive_64_bit_slurp_armap): Remove unnecessary
+	bfd_release.
+	* elf32-m32c.c (m32c_offset_for_reloc): Make shndx_buf a bfd_byte*.
+	(m32c_elf_relax_section): Likewise.
+	* elf32-rl78.c (rl78_offset_for_reloc): Likewise.
+	(rl78_elf_relax_section): Likewise.
+	* elf32-rx.c (rx_offset_for_reloc): Likewise.
+	(elf32_rx_relax_section): Likewise.
+	* mach-o.c (bfd_mach_o_alloc_and_read): Move earlier with better
+	parameter types and use..
+	(bfd_mach_o_read_dylinker, bfd_mach_o_read_dylib),
+	(bfd_mach_o_read_fvmlib, bfd_mach_o_read_str): ..in these functions.
+	* peicode.h (pe_bfd_object_p): Don't zero the part of opthdr
+	being read from file, just the extra.
+	* som.c (som_slurp_symbol_table): Allocate internal symbol buffer
+	after reading external syms.  Free on failure.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* coffcode.h (buy_and_read, coff_slurp_line_table),
+	(coff_slurp_symbol_table, coff_slurp_reloc_table): Replace
+	bfd_[z][m]alloc2 calls with _bfd_mul_overflow followed by the
+	corresponding bfd_alloc call.  Adjust variables to suit.
+	* coffgen.c (_bfd_coff_get_external_symbols): Likewise.
+	* ecoff.c (_bfd_ecoff_slurp_symbolic_info),
+	(_bfd_ecoff_slurp_symbol_table, READ): Likewise.
+	* elf.c (bfd_elf_get_elf_syms, setup_group, bfd_section_from_shdr),
+	(swap_out_syms, _bfd_elf_slurp_version_tables): Likewise.
+	* elf32-m32c.c (m32c_elf_relax_section): Likewise.
+	* elf32-rl78.c (rl78_elf_relax_section): Likewise.
+	* elf32-rx.c (elf32_rx_relax_section): Likewise.
+	* elf64-alpha.c (READ): Likewise.
+	* elfcode.h (elf_object_p, elf_write_relocs, elf_write_shdrs_and_ehdr),
+	(elf_slurp_symbol_table, elf_slurp_reloc_table),
+	(bfd_from_remote_memory): Likewise.
+	* elfcore.h (core_find_build_id): Likewise.
+	* elfxx-mips.c (READ): Likewise.
+	* mach-o.c (bfd_mach_o_mangle_sections),
+	(bfd_mach_o_read_symtab_symbols, bfd_mach_o_read_thread),
+	(bfd_mach_o_read_dysymtab, bfd_mach_o_flatten_sections),
+	(bfd_mach_o_scan, bfd_mach_o_fat_archive_p): Likewise.
+	* som.c (setup_sections, som_prep_for_fixups)
+	(som_build_and_write_symbol_table, som_slurp_symbol_table),
+	(som_slurp_reloc_table, som_bfd_count_ar_symbols),
+	(som_bfd_fill_in_ar_symbols, som_slurp_armap),
+	(som_bfd_ar_write_symbol_stuff): Likewise.
+	* vms-alpha.c (vector_grow1): Likewise.
+	* vms-lib.c (vms_add_index): Likewise.
+	* wasm-module.c (wasm_scan_name_function_section): Likewise.
+	* libbfd.c (bfd_malloc2, bfd_realloc2, bfd_zmalloc2): Delete.
+	* opncls.c (bfd_alloc2, bfd_zalloc2): Delete.
+	* libbfd-in.h (bfd_malloc2, bfd_realloc2, bfd_zmalloc2),
+	(bfd_alloc2, bfd_zalloc2): Delete.
+	(_bfd_mul_overflow): Define.
+	* libbfd.h: Regenerate.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* elf.c (bfd_section_from_shdr): Use bfd_zalloc rather than
+	bfd_zalloc2.
+	(assign_section_numbers): Likewise.
+	(elf_map_symbols): Likewise, and bfd_alloc rather than bfd_alloc2.
+	(_bfd_elf_map_sections_to_segments): Use bfd_malloc rather than
+	bfd_malloc2, size_t amt, and unsigned tls_count.
+	(rewrite_elf_program_header): Use bfd_malloc and size_t amt.
+	* elflink.c (elf_create_symbuf): Use bfd_malloc.
+	(elf_output_implib): Use bfd_alloc.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* bfd.c (struct bfd): Move format and direction to other
+	bitfields.  Add "size".
+	* bfdio.c (bfd_get_size): Cache size when not writing file.
+	* opncls.c (bfd_get_debug_link_info_1): Allow for bfd_get_size
+	returning zero, ie. unknown.
+	(bfd_get_alt_debug_link_info): Likewise.
+	* bfd-in2.h: Regenerate.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* coffgen.c (_bfd_coff_get_external_symbols): Don't call
+	bfd_get_file_size twice.
+	(_bfd_coff_read_string_table): Allow for bfd_get_file_size
+	zero, ie. unknown, return.
+	* elf-attrs.c (_bfd_elf_parse_attributes): Likewise.
+	* elfcode.h (elf_swap_shdr_in): Likewise.
+	(elf_object_p): Don't call bfd_get_file_size twice and correct
+	file size check.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* mach-o.c (bfd_mach_o_flatten_sections): Return a bfd_boolean,
+	FALSE if memory alloc fails.  Adjust calls.
+	* som.c (som_prep_for_fixups): Likewise.
+	* vms-alpha.c (alpha_vms_add_fixup_lp, alpha_vms_add_fixup_ca),
+	(alpha_vms_add_fixup_qr, alpha_vms_add_fixup_lr),
+	(alpha_vms_add_lw_reloc, alpha_vms_add_qw_reloc): Likewise.
+	* som.c (som_build_and_write_symbol_table): Return via error_return
+	on seek failure.
+	* vms-alpha.c (VEC_APPEND): Adjust for vector_grow1 changes.
+	(VEC_APPEND_EL): Delete.
+	(vector_grow1): Return pointer to element.  Catch overflow.
+	Return NULL on memory allocation failure.
+	(alpha_vms_add_fixup_lp): Replace VEC_APPEND_EL with VEC_APPEND.
+	(alpha_vms_add_fixup_ca): Likewise.
+	(alpha_vms_link_add_object_symbols): Check VEC_APPEND result
+	before using.
+	* elf.c (bfd_section_from_shdr): Check bfd_zalloc2 result.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* aix386-core.c (aix386_core_file_p): Use size_t for "amt".
+	* aout-target.h (object_p): Likewise.
+	* aout-tic30.c (tic30_aout_object_p): Likewise.
+	* aoutx.h (some_aout_object_p, mkobject, make_empty_symbol),
+	(emit_stringtab, write_syms, link_hash_table_create),
+	(aout_link_write_other_symbol): Likewise.
+	* archive.c (_bfd_generic_mkarchive, bfd_generic_archive_p),
+	(bfd_ar_hdr_from_filesystem, _bfd_write_archive_contents),
+	(_bfd_compute_and_write_armap): Likewise.
+	* archures.c (bfd_arch_list): Likewise.
+	* bfd.c (bfd_record_phdr): Likewise.
+	* binary.c (binary_canonicalize_symtab): Likewise.
+	* cisco-core.c (cisco_core_file_validate): Likewise.
+	* coff-arm.c (coff_arm_link_hash_table_create, find_thumb_glue),
+	(find_arm_glue, record_arm_to_thumb_glue),
+	(record_thumb_to_arm_glue): Likewise.
+	* coff-ppc.c (ppc_coff_link_hash_table_create, record_toc),
+	(ppc_allocate_toc_section): Likewise.
+	* coff-rs6000.c (_bfd_xcoff_mkobject, _bfd_xcoff_archive_p): Likewise.
+	* coff-sh.c (sh_relax_section): Likewise.
+	* coff64-rs6000.c (xcoff64_archive_p): Likewise.
+	* coffcode.h (handle_COMDAT, coff_new_section_hook),
+	(coff_set_alignment_hook, coff_mkobject),
+	(coff_compute_section_file_positions): Likewise.
+	* coffgen.c (coff_make_empty_symbol, coff_bfd_make_debug_symbol),
+	(coff_find_nearest_line_with_names),
+	( bfd_coff_set_symbol_class): Likewise.
+	* cofflink.c (_bfd_coff_link_hash_table_create),
+	(_bfd_coff_link_input_bfd): Likewise.
+	* dwarf1.c (alloc_dwarf1_unit, alloc_dwarf1_func): Likewise.
+	* dwarf2.c (read_abbrevs, read_attribute_value, add_line_info),
+	(build_line_info_table, sort_line_sequences),
+	(line_info_add_include_dir, line_info_add_file_name),
+	(decode_line_info, scan_unit_for_symbols, parse_comp_unit),
+	(place_sections, _bfd_dwarf2_slurp_debug_info): Likewise.
+	* ecoff.c (_bfd_ecoff_mkobject, _bfd_ecoff_make_empty_symbol),
+	(_bfd_ecoff_find_nearest_line),
+	(_bfd_ecoff_bfd_link_hash_table_create): Likewise.
+	* ecofflink.c (bfd_ecoff_debug_init): Likewise.
+	* elf-hppa.h (_bfd_elf_hppa_gen_reloc_type): Likewise.
+	* elf-m10300.c (mn10300_elf_relax_section),
+	(elf32_mn10300_link_hash_table_create): Likewise.
+	* elf-strtab.c (_bfd_elf_strtab_init): Likewise.
+	* elf.c (make_mapping, copy_elf_program_header): Likewise.
+	* elf32-arm.c (elf32_arm_link_hash_table_create),
+	(elf32_arm_setup_section_lists, elf32_arm_check_relocs),
+	(elf32_arm_new_section_hook): Likewise.
+	* elf32-avr.c (elf_avr_new_section_hook),
+	(elf32_avr_link_hash_table_create, get_local_syms),
+	(elf32_avr_setup_section_lists): Likewise.
+	* elf32-bfin.c (bfinfdpic_elf_link_hash_table_create),
+	(bfin_link_hash_table_create): Likewise.
+	* elf32-cr16.c (elf32_cr16_link_hash_table_create): Likewise.
+	* elf32-cris.c (elf_cris_link_hash_table_create): Likewise.
+	* elf32-csky.c (csky_elf_link_hash_table_create),
+	(csky_elf_check_relocs, elf32_csky_setup_section_lists): Likewise.
+	* elf32-frv.c (frvfdpic_elf_link_hash_table_create): Likewise.
+	* elf32-hppa.c (elf32_hppa_link_hash_table_create),
+	(elf32_hppa_setup_section_lists, get_local_syms): Likewise.
+	* elf32-i386.c (elf_i386_check_relocs): Likewise.
+	* elf32-lm32.c (lm32_elf_link_hash_table_create): Likewise.
+	* elf32-m32r.c (m32r_elf_link_hash_table_create),
+	(m32r_elf_check_relocs): Likewise.
+	* elf32-m68hc1x.c (m68hc11_elf_hash_table_create),
+	(elf32_m68hc11_setup_section_lists),
+	(elf32_m68hc11_size_stubs): Likewise.
+	* elf32-m68k.c (elf_m68k_link_hash_table_create): Likewise.
+	* elf32-metag.c (elf_metag_link_hash_table_create),
+	(elf_metag_setup_section_lists): Likewise.
+	* elf32-microblaze.c (microblaze_elf_link_hash_table_create),
+	(microblaze_elf_check_relocs): Likewise.
+	* elf32-nds32.c (nds32_elf_link_hash_table_create),
+	(nds32_elf_check_relocs): Likewise.
+	* elf32-nios2.c (nios2_elf32_setup_section_lists),
+	(get_local_syms, nios2_elf32_check_relocs),
+	(nios2_elf32_link_hash_table_create): Likewise.
+	* elf32-or1k.c (or1k_elf_link_hash_table_create),
+	(or1k_elf_check_relocs): Likewise.
+	* elf32-ppc.c (ppc_elf_modify_segment_map, update_plt_info): Likewise.
+	* elf32-pru.c (pru_elf32_link_hash_table_create): Likewise.
+	* elf32-s390.c (elf_s390_link_hash_table_create),
+	(elf_s390_check_relocs): Likewise.
+	* elf32-score.c (score_elf_create_got_section),
+	(s3_elf32_score_new_section_hook),
+	(elf32_score_link_hash_table_create): Likewise.
+	* elf32-score7.c (score_elf_create_got_section),
+	(s7_elf32_score_new_section_hook): Likewise.
+	* elf32-sh.c (sh_elf_link_hash_table_create),
+	(sh_elf_check_relocs): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_link_hash_table_create),
+	(elf32_tic6x_new_section_hook, elf32_tic6x_check_relocs): Likewise.
+	* elf32-tilepro.c (tilepro_elf_link_hash_table_create),
+	(tilepro_elf_check_relocs): Likewise.
+	* elf32-v850.c (remember_hi16s_reloc): Likewise.
+	* elf32-vax.c (elf_vax_link_hash_table_create): Likewise.
+	* elf32-xtensa.c (elf_xtensa_link_hash_table_create),
+	(elf_xtensa_new_section_hook): Likewise.
+	* elf64-alpha.c (elf64_alpha_bfd_link_hash_table_create),
+	(get_got_entry, elf64_alpha_check_relocs): Likewise.
+	* elf64-hppa.c (elf64_hppa_hash_table_create): Likewise.
+	* elf64-ia64-vms.c (elf64_ia64_object_p): Likewise.
+	* elf64-mmix.c (mmix_elf_new_section_hook): Likewise.
+	* elf64-ppc.c (ppc64_elf_new_section_hook),
+	(ppc64_elf_link_hash_table_create, update_local_sym_info),
+	(update_plt_info, ppc64_elf_check_relocs): Likewise.
+	* elf64-s390.c (elf_s390_link_hash_table_create),
+	(elf_s390_check_relocs): Likewise.
+	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
+	* elflink.c (bfd_elf_link_record_local_dynamic_symbol),
+	(_bfd_elf_link_find_version_dependencies, elf_link_add_object_symbols),
+	(elf_link_add_archive_symbols, compute_bucket_count),
+	(bfd_elf_size_dynsym_hash_dynstr, _bfd_elf_link_hash_table_create),
+	(bfd_elf_get_bfd_needed_list, elf_link_swap_symbols_out),
+	(bfd_elf_final_link): Likewise.
+	* elfnn-aarch64.c (elfNN_aarch64_link_hash_table_create),
+	(elfNN_aarch64_setup_section_lists, elfNN_aarch64_check_relocs),
+	(elfNN_aarch64_new_section_hook): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_object_p): Likewise.
+	* elfnn-riscv.c (riscv_elf_link_hash_table_create),
+	(riscv_elf_check_relocs): Likewise.
+	* elfxx-mips.c (_bfd_mips_elf_new_section_hook),
+	(_bfd_mips_elf_add_symbol_hook, _bfd_mips_elf_check_relocs),
+	(_bfd_mips_elf_modify_segment_map, _bfd_mips_elf_set_section_contents),
+	(_bfd_mips_elf_link_hash_table_create): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_link_hash_table_create),
+	(_bfd_sparc_elf_check_relocs),
+	(_bfd_sparc_elf_new_section_hook): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_link_hash_table_create),
+	(tilegx_elf_check_relocs): Likewise.
+	* elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Likewise.
+	* format.c (bfd_check_format_matches): Likewise.
+	* hash.c (_bfd_stringtab_init): Likewise.
+	* ihex.c (ihex_scan): Likewise.
+	* irix-core.c (irix_core_core_file_p): Likewise.
+	* linker.c (bfd_wrapped_link_hash_lookup),
+	(_bfd_generic_link_hash_table_create),
+	(_bfd_generic_reloc_link_order): Likewise.
+	* lynx-core.c (lynx_core_file_p): Likewise.
+	* netbsd-core.c (netbsd_core_file_p): Likewise.
+	* osf-core.c (osf_core_core_file_p): Likewise.
+	* pdp11.c (some_aout_object_p, mkobject, make_empty_symbol),
+	(link_hash_table_create, aout_link_write_other_symbol): Likewise.
+	* peXXigen.c (_bfd_XX_bfd_copy_private_section_data): Likewise.
+	* peicode.h (pe_mkobject): Likewise.
+	* ppcboot.c (ppcboot_mkobject, ppcboot_canonicalize_symtab): Likewise.
+	* ptrace-core.c (ptrace_unix_core_file_p): Likewise.
+	* sco5-core.c (read_uarea): Likewise.
+	* som.c (hppa_som_gen_reloc_type, som_object_p, som_prep_headers),
+	(som_write_fixups, som_write_space_strings, som_write_symbol_strings),
+	(som_finish_writing, som_canonicalize_symtab, som_new_section_hook),
+	(som_bfd_copy_private_section_data, bfd_som_set_section_attributes),
+	(bfd_som_attach_aux_hdr, som_write_armap): Likewise.
+	* srec.c (srec_scan): Likewise.
+	* syms.c (_bfd_generic_make_empty_symbol): Likewise.
+	* targets.c (bfd_target_list): Likewise.
+	* tekhex.c (first_phase, tekhex_sizeof_headers): Likewise.
+	* trad-core.c (trad_unix_core_file_p): Likewise.
+	* vms-alpha.c (vms_initialize, alpha_vms_bfd_link_hash_table_create),
+	(vms_new_section_hook): Likewise.
+	* wasm-module.c (wasm_make_empty_symbol): Likewise.
+	* xcofflink.c (xcoff_get_section_contents),
+	(_bfd_xcoff_bfd_link_hash_table_create, xcoff_set_import_path),
+	(xcoff_find_function, bfd_xcoff_link_record_set, xcoff_build_ldsym),
+	(bfd_xcoff_size_dynamic_sections, xcoff_link_input_bfd): Likewise.
+
+2020-02-19  Alan Modra  <amodra@gmail.com>
+
+	* elfxx-riscv.c (riscv_multi_letter_ext_valid_p): Don't use C99.
+
+2020-02-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* plugin.c (try_load_plugin): Make plugin_list_iter an argument
+	and use it if it isn't NULL.  Remove has_plugin_p argument.  Add
+	a build_list_p argument.  Don't search plugin_list.  Short circuit
+	when building the plugin list.
+	(has_plugin): Renamed to has_plugin_list.
+	(bfd_plugin_set_plugin): Don't set has_plugin.
+	(bfd_plugin_specified_p): Check plugin_list instead.
+	(build_plugin_list): New function.
+	(load_plugin): Call build_plugin_list and use plugin_list.
+
+2020-02-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/25355
+	* plugin.c (try_claim): Always clean up for LTO wrapper.
+	(try_load_plugin): Treat each object as independent.  Create a
+	copy for plugin name.
+
+2020-02-11  Nick Clifton  <nickc@redhat.com>
+
+	* elf32-msp430.c (msp430_final_link_relocate): Always use longs
+	for addresses in print statements.
+	(msp430_elf_relax_delete_bytes): Likewise.
+	(msp430_elf_relax_add_words): Likewise.
+	(msp430_elf_relax_section): Likewise.
+
+2020-02-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* plugin.c (add_symbols): Clear plugin_data memory.
+
+2020-02-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/25355
+	* configure.ac (HAVE_EXECUTABLE_SUFFIX): New AC_DEFINE.
+	(EXECUTABLE_SUFFIX): Likewise.
+	* config.in: Regenerated.
+	* configure: Likewise.
+	* plugin.c (bfd_plugin_close_and_cleanup): Removed.
+	(plugin_list_entry): Add all_symbols_read, cleanup_handler,
+	gcc, lto_wrapper, resolution_file, resolution_option, gcc_env,
+	real_bfd, real_nsyms, real_syms, lto_nsyms and lto_syms.
+	(get_lto_wrapper): New.
+	(setup_lto_wrapper_env): Likewise.
+	(current_plugin): Likewise.
+	(register_all_symbols_read): Likewise.
+	(register_cleanup): Likewise.
+	(get_symbols): Likewise.
+	(add_input_file): Likewise.
+	(bfd_plugin_close_and_cleanup): Likewise.
+	(claim_file): Removed.
+	(register_claim_file): Set current_plugin->claim_file.
+	(add_symbols): Make a copy of LTO symbols.  Set lto_nsyms and
+	lto_syms in current_plugin.
+	(try_claim): Use current_plugin->claim_file.  Call LTO plugin
+	all_symbols_read handler.  Copy real symbols to plugin_data.
+	Call LTO plugin cleanup handler.  Clean up for LTO wrapper.
+	(try_load_plugin): Don't reuse the previous plugin for LTO
+	wrapper.  Set up GCC LTO wrapper if possible.  Don't set
+	plugin_list_iter->claim_file.
+	(bfd_plugin_canonicalize_symtab): Use real LTO symbols if
+	possible.
+	* plugin.h (plugin_data_struct): Add real_bfd, real_nsyms and
+	real_syms.
+
+2020-02-10  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+
+	* elf32-msp430.c (msp430_elf_relax_section): Before relaxing a branch,
+	check if previous instruction matches a conditional jump inserted
+	earlier. Invert conditional jump and delete branch in this case.
+
+2020-02-10  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+
+	* elf32-msp430.c (msp430_elf_relax_add_two_words): Rename to
+	msp430_elf_relax_add_words. Support insertion of either one or two
+	words.
+	(msp430_elf_relax_section): Catch opcode of 0x3c00 when relocation
+	needs to be grown. Handle insertion of branch instruction to replace
+	jump.
+
+2020-02-10  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+
+	* elf32-msp430.c (msp430_final_link_relocate): Add printf statements for
+	debugging relocations.
+	(msp430_elf_relax_delete_bytes): Likewise.
+	(msp430_elf_relax_add_two_words): Likewise.
+	(msp430_elf_relax_section): Likewise.
+
+2020-02-10  Alan Modra  <amodra@gmail.com>
+
+	* archures.c: Wrap overlong z80 comments.
+	* bfd-in2.h: Regenerate.
+
+2020-02-07  Sergey Belyashov  <sergey.belyashov@gmail.com>
+
+	PR 25469
+	* archures.c: Add GBZ80 and Z80N machine values.
+	* reloc.c: Add BFD_RELOC_Z80_16_BE.
+	* coff-z80.c: Add support for new reloc.
+	* coffcode.h: Add support for new machine values.
+	* cpu-z80.c: Add support for new machine names.
+	* elf32-z80.c: Add support for new reloc.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+
+2020-02-07  Nick Clifton  <nickc@redhat.com>
+
+	PR 23932
+	* elf.c (rewrite_elf_program_header): Do not complain if no
+	sections are mapped to a segment.
+
+2020-02-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/25490
+	* elflink.c (_bfd_elf_gc_mark_extra_sections): Issue an error
+	for garbage collection on __patchable_function_entries section
+	without linked-to section.
+
+2020-02-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gas/25381
+	* bfd-in2.h: Regenerated.
+	* elflink.c (_bfd_elf_gc_mark_extra_sections): Call mark_hook
+	on section if gc_mark of any of its linked-to sections is set
+	and don't set gc_mark again.
+	* section.c (asection): Add linked_to_symbol_name to map_head
+	union.
+
+2020-02-06  Maciej W. Rozycki  <macro@wdc.com>
+
+	* elf32-v850.c (v850_elf_relax_section): Fix the index used for
+	reporting an unrecognized instruction with R_V850_LONGJUMP.
+
+2020-02-05  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc_stub_plt_branch): Match comment with reality.
+
+2020-02-04  Alan Modra  <amodra@gmail.com>
+
+	* elf32-ppc.c (ppc_elf_relocate_section): After applying
+	R_PPC_VLE_ADDR20, goto copy_reloc.
+
+2020-02-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* bfd-in2.h: Regenerated.
+	* section.c (SEC_ASSEMBLER_SECTION_ID): Fix a typo in comments.
+
+2020-02-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gas/25380
+	* bfd-in2.h: Regenerated.
+	* ecoff.c (bfd_debug_section): Add section_id.
+	* section.c (bfd_section): Add section_id.
+	(SEC_ASSEMBLER_SECTION_ID): New.
+	(BFD_FAKE_SECTION): Add section_id.
+
+2020-02-01  Nick Clifton  <nickc@redhat.com>
+
+	* config.bfd: Move the c30-aout and tic30-aout targets onto the
+	obsolete list.
+
+2020-01-31  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* elf-eh-frame.c (_bfd_elf_write_section_eh_frame): DW_EH_PE_datarel
+	encodings are relative to the GOT on nios2, too.
+
+2020-01-31  Alan Modra  <amodra@gmail.com>
+
+	* Makefile.am (elf32-target.h, elf64-target.h): Don't use a temp
+	file.  Use $< and $@ in rules.
+	(elf32-aarch64.c, elf64-aarch64.c): Likewise.
+	(elf32-ia64.c, elf64-ia64.c): Likewise.
+	(elf32-riscv.c, elf64-riscv.c): Likewise.
+	(peigen.c, pepigen.c, pex64igen.c): Likewise.
+	(elf32-aarch64.c, elf64-aarch64.c): Don't emit $srcdir on #line.
+	(elf32-riscv.c, elf64-riscv.c): Likewise, and use $(SED).
+	(elf32-ia64.c, elf64-ia64.c): Do emit #line.
+	(peigen.c, pepigen.c, pex64igen.c): Likewise.
+	* Makefile.in: Regenerate.
+
+2020-01-31  Alan Modra  <amodra@gmail.com>
+
+	PR 4110
+	* elf.c (setup_group): Don't clear entire section contents,
+	just the padding after group flags.  Release alloc'd memory
+	after a seek or read failure.
+
+2020-01-16  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* peXXigen.c (pe_is_repro): New function.
+	(_bfd_XX_print_private_bfd_data_common): Note timestamp is
+	actually a build hash if PE_IMAGE_DEBUG_TYPE_REPRO is present.
+
+2020-01-16  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* peXXigen.c (debug_type_names): Add names for new debug data type
+	values.
+
+2020-01-16  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* peXXigen.c (pe_print_debugdata): Fix the iteration variable for
+	inner loop.  Fix a memory leak.
+
+2020-01-30  Alan Modra  <amodra@gmail.com>
+
+	* coffgen.c (coff_real_object_p): Don't clear obj_coff_keep_syms
+	or obj_coff_keep_strings here.
+	(coff_get_normalized_symtab): Free external syms directly.
+	* xcofflink.c (xcoff_link_input_bfd): Restore obj_coff_keep_syms
+	on error exit path.
+
+2020-01-27  Jim Wilson  <jimw@sifive.com>
+
+	* cpu-riscv.c (riscv_scan): New.
+	(N): Change bfd_default_scan to riscv_scan.
+
+2020-01-27  Andreas Schwab  <schwab@suse.de>
+
+	* Makefile.am (ALL_MACHINES): Remove cpu-plugin.lo.
+	(ALL_MACHINES_CFILES): Remove cpu-plugin.c.
+	* Makefile.in: Regenerate.
+	* cpu-plugin.c: Remove.
+	* archures.c (enum bfd_architecture): Remove bfd_arch_plugin.
+	(bfd_plugin_arch): Remove declaration.
+	* bfd-in2.h: Regenerate.
+	* po/SRC-POTFILES.in: Regenerate.
+
+2020-01-27  H.J. Lu  <hongjiu.lu@intel.com>
+	    Alan Modra  <amodra@gmail.com>
+
+	PR ld/25458
+	* elflink.c (_bfd_elf_gc_mark_rsec): Mark all weak aliases.
+
+2020-01-24  Jim Wilson  <jimw@sifive.com>
+
+	* elfxx-riscv.c (riscv_get_prefix_class): Format s case like others.
+	(riscv_parse_prefixed_ext): Fix s extension comment and reword to
+	avoid over long line.
+
+2020-01-24  Nick Clifton  <nickc@redhat.com>
+
+	PR 25447
+	* coffgen.c (_bfd_coff_close_and_cleanup): Do not clear the keep
+	syms and keep strings flags as these may have been set in order to
+	prevent a bogus call to free.
+
+2020-01-23  Nick Clifton  <nickc@redhat.com>
+
+	* po/fr.po: Updated French translation.
+
+2020-01-23  Alan Modra  <amodra@gmail.com>
+
+	PR 25444
+	* elf.c (assign_file_positions_for_load_sections): Avoid divide
+	by zero when p_align is zero.
+
+2020-01-22  Maxim Blinov  <maxim.blinov@embecosm.com>
+
+	* bfd/elfnn-riscv.c (riscv_skip_prefix): New.
+	(riscv_prefix_cmp): Likewise.
+	(riscv_non_std_ext_p): Deleted.
+	(riscv_std_sv_ext_p): Likewise.
+	(riscv_non_std_sv_ext_p): Likewise.
+	(riscv_merge_non_std_and_sv_ext): Rename to...
+	(riscv_merge_multi_letter_ext): and modified to use riscv_prefix_cmp.
+	(riscv_merge_arch_attr_info): Replace 3 calls to
+	riscv_merge_non_std_and_sv_ext with single call to
+	riscv_merge_multi_letter_ext.
+	* bfd/elfxx-riscv.c (riscv_parse_std_ext): Break if we
+	encounter a 'z' prefix.
+	(riscv_get_prefix_class): New function, return prefix class based
+	on first few characters of input string.
+	(riscv_parse_config): New structure to factor out minor differences
+	in extension class parsing behaviour.
+	(riscv_parse_sv_or_non_std_ext): Rename to...
+	(riscv_parse_prefixed_ext): and parameterise with
+	riscv_parse_config.
+	(riscv_std_z_ext_strtab, riscv_std_s_ext_strtab): New.
+	(riscv_multi_letter_ext_valid_p): New.
+	(riscv_ext_x_valid_p, riscv_ext_z_valid_p, riscv_ext_s_valid_p): New.
+	(riscv_parse_subset): Delegate all non-single-letter parsing work
+	to riscv_parse_prefixed_ext.
+	* bfd/elfxx-riscv.h (riscv_isa_ext_class): New type.
+	(riscv_get_prefix_class): Declare.
+
+2020-01-22  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (struct ppc_link_hash_table): Add tga_group.
+	(ppc64_elf_archive_symbol_lookup): Extract __tls_get_addr_opt for
+	__tls_get_addr_desc.
+	(ppc64_elf_size_stubs): Add section for linker generated
+	__tls_get_addr_desc wrapper function.  Loop at least once if
+	generating this function.
+	(emit_tga_desc, emit_tga_desc_eh_frame): New functions.
+	(ppc64_elf_build_stubs): Generate __tls_get_addr_desc.
+
+2020-01-22  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.h (struct ppc64_elf_params): Add no_tls_get_addr_regsave.
+	* elf64-ppc.c (struct ppc_link_hash_table): Add tga_desc and
+	tga_desc_fd.
+	(is_tls_get_addr): Match tga_desc and tga_desc_df too.
+	(STDU_R1_0R1, ADDI_R1_R1): Define.
+	(tls_get_addr_prologue, tls_get_addr_epilogue): New functions.
+	(ppc64_elf_tls_setup): Set up tga_desc and tga_desc_fd.  Indirect
+	tga_desc_fd to opt_fd, and tga_desc to opt.  Set
+	no_tls_get_addr_regsave.
+	(branch_reloc_hash_match): Add hash3 and hash4.
+	(ppc64_elf_tls_optimize): Handle tga_desc_fd and tga_desc too.
+	(ppc64_elf_size_dynamic_sections): Likewise.
+	(ppc64_elf_relocate_section): Likewise.
+	(plt_stub_size, build_plt_stub): Likewise.  Size regsave
+	__tls_get_addr stub.
+	(build_tls_get_addr_stub): Build regsave __tls_get_addr stub and
+	eh_frame.
+	(ppc_size_one_stub): Handle tga_desc_fd and tga_desc too.  Size
+	eh_frame for regsave __tls_get_addr.
+
+2020-01-22  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_size_stubs): Correct condition under
+	which __tls_get_addr calls will be eliminated.
+
+2020-01-20  Nick Clifton  <nickc@redhat.com>
+
+	* po/pt.po: Updates Portuguese translation.
+	* po/ru.po: Updated Russian translation.
+	* po/uk.po: Updated Ukranian translation.
+
+2020-01-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/25416
+	* elf64-x86-64.c (elf_x86_64_check_tls_transition): Support
+	"rex leal x@tlsdesc(%rip), %reg" and "call *x@tlsdesc(%eax)" in
+	X32 mode.
+	(elf_x86_64_relocate_section): In x32 mode, for GDesc -> LE
+	transition, relax "rex leal x@tlsdesc(%rip), %reg" to
+	"rex movl $x@tpoff, %reg", for GDesc -> IE transition, relax
+	"rex leal x@tlsdesc(%rip), %reg" to
+	"rex movl x@gottpoff(%rip), %eax".  For both transitions, relax
+	"call *(%eax)" to "nopl (%rax)".
+
+2020-01-20  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (LD_R11_0R3, CMPDI_R11_0, STD_R11_0R1, LD_R11_0R1),
+	(MTLR_R11): Don't define.
+	(LD_R0_0R3, CMPDI_R0_0): Define.
+	(build_tls_get_addr_stub): Don't use r11 in stub.
+
+2020-01-20  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc_elf_hash_entry): New function, use throughout file.
+	(defined_sym_val, is_tls_get_addr): Likewise.
+
+2020-01-18  Nick Clifton  <nickc@redhat.com>
+
+	* version.m4 (BFD_VERSION): Set to 2.34.50.
+	* configure: Regenerate.
+	* po/bfd.pot: Regenerate.
+
+2020-01-18  Nick Clifton  <nickc@redhat.com>
+
+	Binutils 2.34 branch created.
+
+2020-01-17  Christian Biesinger  <cbiesinger@google.com>
+
+	* coff-arm.c: Fix spelling error (seperate).
+	* elfxx-riscv.c (riscv_parse_sv_or_non_std_ext): Fix spelling
+	error (seperate).
+	* sysdep.h (strnlen): Fix spelling error (seperate).
+
+2020-01-15  Lars Brinkhoff  <lars@nocrew.org>
+
+	PR 20694
+	* pdp11.c (TARGET_PAGE_SIZE): Set to 8192.
+
+2020-01-15  Alan Modra  <amodra@gmail.com>
+
+	PR 25384
+	* elf64-ppc.c (ELIMINATE_COPY_RELOCS): Update comment.
+	(ppc64_elf_adjust_dynamic_symbol): Don't allow .dynbss copies
+	of function symbols unless dot symbols are present.  Do warn
+	whenever one is created, regardles of whether a PLT entry is
+	also emitted for the function symbol.
+
+2020-01-14  Alan Modra  <amodra@gmail.com>
+
+	* som.c (som_bfd_count_ar_symbols): Error when file position
+	of symbols on chains is not strictly increasing.
+
+2020-01-14  Alan Modra  <amodra@gmail.com>
+
+	* vms.h (VMS_DEBUG): Define as 0.
+	* vms-alpha.c (image_write): Move debug output after bounds check.
+	Tidy bounds check.
+	(_bfd_vms_slurp_eihd): Warning fix.
+	(_bfd_vms_slurp_etir): Init variables to avoid bogus warnings.
+
+2020-01-13  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (_bfd_vms_slurp_egsd): Ensure minimum size even
+	for "ignored" records.
+
+2020-01-13  Alan Modra  <amodra@gmail.com>
+
+	* wasm-module.c (wasm_scan_name_function_section): Formatting.
+	Delete asect name check.  Move asect NULL check to wasm_object_p.
+	Correct bounds check of sizes against end.  Replace uses of
+	bfd_zalloc with bfd_alloc, zeroing only necessary bytes.  Use
+	just one bfd_release.
+	(wasm_scan): Don't use malloc/strdup for section names,
+	bfd_alloc instead.  Simplify code prefixing section name.
+	Formatting.  Don't attempt to free memory here..
+	(wasm_object_p): ..do so here.
+
+2020-01-10  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	PR ld/22269
+	* elf32-arm.c (elf32_arm_final_link_relocate): Use
+	UNDEFWEAK_NO_DYNAMIC_RELOC.
+	(allocate_dynrelocs_for_symbol): Likewise.
+
+2020-01-10  Tamar Christina  <tamar.christina@arm.com>
+
+	PR 25210
+	* elfnn-aarch64.c (_bfd_aarch64_create_stub_section): Remove elfclass.
+
+2020-01-10  Alan Modra  <amodra@gmail.com>
+
+	* coff-alpha.c (alpha_ecoff_object_p): Calculate size in bfd_size_type.
+
+2020-01-09  Nick Clifton  <nickc@redhat.com>
+
+	PR 25221
+	* bfd.c (bfd_convert_section_contents): Check for a compress
+	header size that is larger than the actual section size.
+
+2020-01-08  Alan Modra  <amodra@gmail.com>
+
+	PR 25351
+	* elflink.c (bfd_elf_final_link): Call _bfd_fix_excluded_sec_syms
+	after removing sections.
+
+2020-01-06  Jim Wilson  <jimw@sifive.com>
+
+	PR 25205
+	* elfnn-riscv.c (riscv_elf_relocate_section) <R_RISCV_CALL>: Add
+	check for !bfd_link_pic (info).
+	<R_RISCV_CALL_PLT>: Move next to R_RISCV_CALL.
+	<R_RISCV_JAL>: Add comment.
+	(_bfd_riscv_relax_section): For plt.offset check, add check for
+	bfd_link_pic (info).  Add comment.
+
+2020-01-06  Alan Modra  <amodra@gmail.com>
+
+	* format.c (bfd_check_format_matches): Ignore bfd_error on target
+	match failures.  Don't init to bfd_error_wrong_format before
+	calling _bfd_check_format.
+
+2020-01-06  Alan Modra  <amodra@gmail.com>
+
+	* vms-alpha.c (_bfd_vms_push, _bfd_vms_pop): Return pass/fail
+	status rather than exiting on stack overflow or underflow.
+	(_bfd_vms_slurp_etir): Adjust to suit.
+
+2020-01-06  Alan Modra  <amodra@gmail.com>
+
+	* som.c (som_bfd_fill_in_ar_symbols): Bounds check som_dict index.
+
+2020-01-06  Alan Modra  <amodra@gmail.com>
+
+	* mach-o.c (bfd_mach_o_read_dylinker): Don't read past end of
+	command.  Check name offset is within command.
+	(bfd_mach_o_read_dylib, bfd_mach_o_read_prebound_dylib),
+	(bfd_mach_o_read_prebind_cksum, bfd_mach_o_read_twolevel_hints),
+	(bfd_mach_o_read_fvmlib, bfd_mach_o_read_dysymtab),
+	(bfd_mach_o_read_symtab, bfd_mach_o_read_uuid),
+	(bfd_mach_o_read_linkedit, bfd_mach_o_read_str),
+	(bfd_mach_o_read_dyld_info, bfd_mach_o_read_version_min),
+	(bfd_mach_o_read_encryption_info, bfd_mach_o_read_source_version),
+	(bfd_mach_o_read_encryption_info_64, bfd_mach_o_read_main),
+	(bfd_mach_o_read_note, bfd_mach_o_read_build_version),
+	(bfd_mach_o_read_segment): Similarly.
+	(bfd_mach_o_read_thread): Properly bound check thread struct.
+	Don't repeat checks on second loop.
+	(bfd_mach_o_read_command): Fail on invalid command length.
+
+2020-01-04  Alan Modra  <amodra@gmail.com>
+
+	* format.c (bfd_check_format_matches): Add preserve_match.
+	Save initial bfd state in "preserve", matched bfd state in
+	"preserve_match".  Save just the first match.  Release
+	bfd_alloc memory.  Restore and finish preserved state as
+	appropriate on all function exit paths.
+
+2020-01-04  Alan Modra  <amodra@gmail.com>
+
+	* mmo.c (mmo_mkobject): Allocate tdata with bfd_zalloc.
+
+2020-01-04  Alan Modra  <amodra@gmail.com>
+
+	* coffgen.c (coff_real_object_p): Free malloc'd memory on target
+	match too.
+
+2020-01-03  Nick Clifton  <nickc@redhat.com>
+
+	PR 25307
+	(bfd_pef_parse_function_stubs): Correct the test that ensures that
+	there is enough data remaining in the code buffer before
+	attempting to read a function stub.
+
+2020-01-03  Nick Clifton  <nickc@redhat.com>
+
+	PR 25308
+	* elf-properties.c (_bfd_elf_convert_gnu_properties): Check the
+	return value from bfd_malloc.
+	* elf32-arm.c (bfd_elf32_arm_vfp11_fix_veneer_locations): Likewise.
+	(bfd_elf32_arm_stm32l4xx_fix_veneer_locations): Likewise.
+	(elf32_arm_filter_cmse_symbols): Likewise.
+	(elf32_arm_write_section): Likewise.
+	* mach-o.c (bfd_mach_o_core_fetch_environment): Likewise.
+	(bfd_mach_o_follow_dsym): Likewise.
+	* pef.c (bfd_pef_print_loader_section): Likewise.
+	(bfd_pef_scan_start_address): Likewise.
+	(bfd_pef_parse_function_stubs): Likewise.
+	(bfd_pef_parse_symbols): Likewise.
+
+2020-01-03  Sergei Trofimovich  <siarheit@google.com>
+
+        * elfnn-ia64.c (elfNN_ia64_merge_private_bfd_data): don't fail
+        on binary inputs ld/PR25316.
+        (is_ia64_elf): new helper to filter on ia64 objects.
+
+2020-01-03  Jan Beulich  <jbeulich@suse.com>
+
+	* mach-o.c (cpusubtype, bfd_mach_o_header_p): Insert underscore
+	in parameter names.
+	(bfd_mach_o_scan): Insert underscore in two variable names.
+
+2020-01-02  Sergey Belyashov  <sergey.belyashov@gmail.com>
+
+	* Makefile.am: Add z80-elf target support.
+	* configure.ac: Likewise.
+	* targets.c: Likewise.
+	* Makefile.in: Regenerate.
+	* configure: Regenerate.
+	* config.bfd: Add z80-elf target support and new arches: ez80 and
+	z180.
+	* elf32-z80.c: New file.
+	* archures.c: Add new z80 architectures: eZ80 and Z180.
+	* coffcode.h: Likewise.
+	* cpu-z80.c: Likewise.
+	* coff-z80.c: Add new relocations for Z80 target and local label
+	check.
+	* reloc.c: Add new relocs.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+
+2020-01-02  Tamar Christina  <tamar.christina@arm.com>
+
+	PR 25210
+	PR 24753
+	* elfnn-aarch64.c (_bfd_aarch64_create_stub_section): Set ELF class.
+
+2020-01-01  Alan Modra  <amodra@gmail.com>
+
+	Update year range in copyright notice of all files.
+
+For older changes see ChangeLog-2019
+
+Copyright (C) 2020 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cisco-core.c ./bfd/cisco-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cisco-core.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/cisco-core.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for CISCO crash dumps.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -80,7 +80,7 @@ struct cisco_core_struct
 /* Examine the file for a crash info struct at the offset given by
    CRASH_INFO_LOC.  */
 
-static const bfd_target *
+static bfd_cleanup
 cisco_core_file_validate (bfd *abfd, int crash_info_loc)
 {
   char buf[4];
@@ -92,13 +92,13 @@ cisco_core_file_validate (bfd *abfd, int
   unsigned int rambase;
   sec_ptr asect;
   struct stat statbuf;
-  bfd_size_type amt;
+  size_t amt;
   flagword flags;
 
-  if (bfd_seek (abfd, (file_ptr) crash_info_loc, SEEK_SET) != 0)
+  if (bfd_seek (abfd, crash_info_loc, SEEK_SET) != 0)
     return NULL;
 
-  nread = bfd_bread (buf, (bfd_size_type) 4, abfd);
+  nread = bfd_read (buf, 4, abfd);
   if (nread != 4)
     {
       if (bfd_get_error () != bfd_error_system_call)
@@ -107,14 +107,14 @@ cisco_core_file_validate (bfd *abfd, int
     }
   crashinfo_offset = MASK_ADDR (bfd_get_32 (abfd, buf));
 
-  if (bfd_seek (abfd, (file_ptr) crashinfo_offset, SEEK_SET) != 0)
+  if (bfd_seek (abfd, crashinfo_offset, SEEK_SET) != 0)
     {
       /* Most likely we failed because of a bogus (huge) offset */
       bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
-  nread = bfd_bread (&crashinfo, (bfd_size_type) sizeof (crashinfo), abfd);
+  nread = bfd_read (&crashinfo, sizeof (crashinfo), abfd);
   if (nread != sizeof (crashinfo))
     {
       if (bfd_get_error () != bfd_error_system_call)
@@ -274,7 +274,7 @@ cisco_core_file_validate (bfd *abfd, int
   nread = statbuf.st_size - asect->filepos;
   asect->size = (nread < 1024) ? nread : 1024;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
   /* Get here if we have already started filling out the BFD
      and there is an error of some kind.  */
@@ -286,19 +286,19 @@ cisco_core_file_validate (bfd *abfd, int
   return NULL;
 }
 
-static const bfd_target *
+static bfd_cleanup
 cisco_core_file_p (bfd *abfd)
 {
   int *crash_info_locp;
-  const bfd_target *target = NULL;
+  bfd_cleanup cleanup = NULL;
 
   for (crash_info_locp = crash_info_locs;
-       *crash_info_locp != -1  &&  target == NULL;
+       *crash_info_locp != -1 && cleanup == NULL;
        crash_info_locp++)
     {
-      target = cisco_core_file_validate (abfd, *crash_info_locp);
+      cleanup = cisco_core_file_validate (abfd, *crash_info_locp);
     }
-  return (target);
+  return cleanup;
 }
 
 static char *
@@ -329,6 +329,7 @@ const bfd_target core_cisco_be_vec =
   ' ',				/* ar_pad_char */
   16,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
@@ -384,6 +385,7 @@ const bfd_target core_cisco_le_vec =
   ' ',				/* ar_pad_char */
   16,				/* ar_max_namelen */
   0,				/* match_priority */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
   bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff64-rs6000.c ./bfd/coff64-rs6000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff64-rs6000.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff64-rs6000.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for IBM RS/6000 "XCOFF64" files.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Written Clinton Popetz.
    Contributed by Cygnus Support.
 
@@ -86,10 +86,10 @@ static void _bfd_xcoff64_swap_lineno_in
   (bfd *, void *, void *);
 static unsigned int _bfd_xcoff64_swap_lineno_out
   (bfd *, void *, void *);
-static bfd_boolean _bfd_xcoff64_put_symbol_name
+static bool _bfd_xcoff64_put_symbol_name
   (struct bfd_link_info *, struct bfd_strtab_hash *,
    struct internal_syment *, const char *);
-static bfd_boolean _bfd_xcoff64_put_ldsymbol_name
+static bool _bfd_xcoff64_put_ldsymbol_name
   (bfd *, struct xcoff_loader_info *, struct internal_ldsym *, const char *);
 static void _bfd_xcoff64_swap_sym_in
   (bfd *, void *, void *);
@@ -103,17 +103,17 @@ static void xcoff64_swap_reloc_in
   (bfd *, void *, void *);
 static unsigned int xcoff64_swap_reloc_out
   (bfd *, void *, void *);
-extern bfd_boolean _bfd_xcoff_mkobject
+extern bool _bfd_xcoff_mkobject
   (bfd *);
-extern bfd_boolean _bfd_xcoff_copy_private_bfd_data
+extern bool _bfd_xcoff_copy_private_bfd_data
   (bfd *, bfd *);
-extern bfd_boolean _bfd_xcoff_is_local_label_name
+extern bool _bfd_xcoff_is_local_label_name
   (bfd *, const char *);
 extern void xcoff64_rtype2howto
   (arelent *, struct internal_reloc *);
 extern reloc_howto_type * xcoff64_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-extern bfd_boolean _bfd_xcoff_slurp_armap
+extern bool _bfd_xcoff_slurp_armap
   (bfd *);
 extern void *_bfd_xcoff_read_ar_hdr
   (bfd *);
@@ -121,9 +121,9 @@ extern bfd *_bfd_xcoff_openr_next_archiv
   (bfd *, bfd *);
 extern int _bfd_xcoff_stat_arch_elt
   (bfd *, struct stat *);
-extern bfd_boolean _bfd_xcoff_write_armap
+extern bool _bfd_xcoff_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int);
-extern bfd_boolean _bfd_xcoff_write_archive_contents
+extern bool _bfd_xcoff_write_archive_contents
   (bfd *);
 extern int _bfd_xcoff_sizeof_headers
   (bfd *, struct bfd_link_info *);
@@ -147,15 +147,13 @@ static void xcoff64_swap_ldrel_in
   (bfd *, const void *, struct internal_ldrel *);
 static void xcoff64_swap_ldrel_out
   (bfd *, const struct internal_ldrel *, void *d);
-static bfd_boolean xcoff64_write_object_contents
-  (bfd *);
-static bfd_boolean xcoff64_ppc_relocate_section
+static bool xcoff64_ppc_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    struct internal_reloc *, struct internal_syment *,
    asection **);
-static bfd_boolean xcoff64_slurp_armap
+static bool xcoff64_slurp_armap
   (bfd *);
-static const bfd_target *xcoff64_archive_p
+static bfd_cleanup xcoff64_archive_p
   (bfd *);
 static bfd *xcoff64_openr_next_archived_file
   (bfd *, bfd *);
@@ -163,54 +161,75 @@ static int xcoff64_sizeof_headers
   (bfd *, struct bfd_link_info *);
 static asection *xcoff64_create_csect_from_smclas
   (bfd *, union internal_auxent *, const char *);
-static bfd_boolean xcoff64_is_lineno_count_overflow
+static bool xcoff64_is_lineno_count_overflow
   (bfd *, bfd_vma);
-static bfd_boolean xcoff64_is_reloc_count_overflow
+static bool xcoff64_is_reloc_count_overflow
   (bfd *, bfd_vma);
 static bfd_vma xcoff64_loader_symbol_offset
   (bfd *, struct internal_ldhdr *);
 static bfd_vma xcoff64_loader_reloc_offset
   (bfd *, struct internal_ldhdr *);
-static bfd_boolean xcoff64_generate_rtinit
-  (bfd *, const char *, const char *, bfd_boolean);
-static bfd_boolean xcoff64_bad_format_hook
+static bool xcoff64_generate_rtinit
+  (bfd *, const char *, const char *, bool);
+static bool xcoff64_bad_format_hook
   (bfd *, void *);
 
 /* Relocation functions */
-static bfd_boolean xcoff64_reloc_type_br
-  (XCOFF_RELOC_FUNCTION_ARGS);
+static xcoff_reloc_function xcoff64_reloc_type_br;
 
-bfd_boolean (*xcoff64_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION])
-  (XCOFF_RELOC_FUNCTION_ARGS) =
+xcoff_reloc_function *const
+xcoff64_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION] =
 {
-  xcoff_reloc_type_pos,	 /* R_POS   (0x00) */
-  xcoff_reloc_type_neg,	 /* R_NEG   (0x01) */
-  xcoff_reloc_type_rel,	 /* R_REL   (0x02) */
-  xcoff_reloc_type_toc,	 /* R_TOC   (0x03) */
-  xcoff_reloc_type_fail, /* R_RTB   (0x04) */
-  xcoff_reloc_type_toc,	 /* R_GL    (0x05) */
-  xcoff_reloc_type_toc,	 /* R_TCL   (0x06) */
-  xcoff_reloc_type_fail, /*	    (0x07) */
-  xcoff_reloc_type_ba,	 /* R_BA    (0x08) */
-  xcoff_reloc_type_fail, /*	    (0x09) */
-  xcoff64_reloc_type_br, /* R_BR    (0x0a) */
-  xcoff_reloc_type_fail, /*	    (0x0b) */
-  xcoff_reloc_type_pos,	 /* R_RL    (0x0c) */
-  xcoff_reloc_type_pos,	 /* R_RLA   (0x0d) */
-  xcoff_reloc_type_fail, /*	    (0x0e) */
-  xcoff_reloc_type_noop, /* R_REF   (0x0f) */
-  xcoff_reloc_type_fail, /*	    (0x10) */
-  xcoff_reloc_type_fail, /*	    (0x11) */
-  xcoff_reloc_type_toc,	 /* R_TRL   (0x12) */
-  xcoff_reloc_type_toc,	 /* R_TRLA  (0x13) */
-  xcoff_reloc_type_fail, /* R_RRTBI (0x14) */
-  xcoff_reloc_type_fail, /* R_RRTBA (0x15) */
-  xcoff_reloc_type_ba,	 /* R_CAI   (0x16) */
-  xcoff_reloc_type_crel, /* R_CREL  (0x17) */
-  xcoff_reloc_type_ba,	 /* R_RBA   (0x18) */
-  xcoff_reloc_type_ba,	 /* R_RBAC  (0x19) */
-  xcoff64_reloc_type_br, /* R_RBR   (0x1a) */
-  xcoff_reloc_type_ba,	 /* R_RBRC  (0x1b) */
+  xcoff_reloc_type_pos,  /* R_POS     (0x00) */
+  xcoff_reloc_type_neg,  /* R_NEG     (0x01) */
+  xcoff_reloc_type_rel,  /* R_REL     (0x02) */
+  xcoff_reloc_type_toc,  /* R_TOC     (0x03) */
+  xcoff_reloc_type_toc,  /* R_TRL     (0x04) */
+  xcoff_reloc_type_toc,  /* R_GL      (0x05) */
+  xcoff_reloc_type_toc,  /* R_TCL     (0x06) */
+  xcoff_reloc_type_fail, /*           (0x07) */
+  xcoff_reloc_type_ba,   /* R_BA      (0x08) */
+  xcoff_reloc_type_fail, /*           (0x09) */
+  xcoff64_reloc_type_br, /* R_BR      (0x0a) */
+  xcoff_reloc_type_fail, /*           (0x0b) */
+  xcoff_reloc_type_pos,  /* R_RL      (0x0c) */
+  xcoff_reloc_type_pos,  /* R_RLA     (0x0d) */
+  xcoff_reloc_type_fail, /*           (0x0e) */
+  xcoff_reloc_type_noop, /* R_REF     (0x0f) */
+  xcoff_reloc_type_fail, /*           (0x10) */
+  xcoff_reloc_type_fail, /*           (0x11) */
+  xcoff_reloc_type_fail, /*           (0x12) */
+  xcoff_reloc_type_toc,  /* R_TRLA    (0x13) */
+  xcoff_reloc_type_fail, /* R_RRTBI   (0x14) */
+  xcoff_reloc_type_fail, /* R_RRTBA   (0x15) */
+  xcoff_reloc_type_ba,   /* R_CAI     (0x16) */
+  xcoff_reloc_type_crel, /* R_CREL    (0x17) */
+  xcoff_reloc_type_ba,   /* R_RBA     (0x18) */
+  xcoff_reloc_type_ba,   /* R_RBAC    (0x19) */
+  xcoff64_reloc_type_br, /* R_RBR     (0x1a) */
+  xcoff_reloc_type_ba,   /* R_RBRC    (0x1b) */
+  xcoff_reloc_type_fail, /*           (0x1c) */
+  xcoff_reloc_type_fail, /*           (0x1d) */
+  xcoff_reloc_type_fail, /*           (0x1e) */
+  xcoff_reloc_type_fail, /*           (0x1f) */
+  xcoff_reloc_type_tls,  /* R_TLS     (0x20) */
+  xcoff_reloc_type_tls,  /* R_TLS_IE  (0x21) */
+  xcoff_reloc_type_tls,  /* R_TLS_LD  (0x22) */
+  xcoff_reloc_type_tls,  /* R_TLS_LE  (0x23) */
+  xcoff_reloc_type_tls,  /* R_TLSM    (0x24) */
+  xcoff_reloc_type_tls,  /* R_TLSML   (0x25) */
+  xcoff_reloc_type_fail, /*           (0x26) */
+  xcoff_reloc_type_fail, /*           (0x27) */
+  xcoff_reloc_type_fail, /*           (0x28) */
+  xcoff_reloc_type_fail, /*           (0x29) */
+  xcoff_reloc_type_fail, /*           (0x2a) */
+  xcoff_reloc_type_fail, /*           (0x2b) */
+  xcoff_reloc_type_fail, /*           (0x2c) */
+  xcoff_reloc_type_fail, /*           (0x2d) */
+  xcoff_reloc_type_fail, /*           (0x2e) */
+  xcoff_reloc_type_fail, /*           (0x2f) */
+  xcoff_reloc_type_toc, /* R_TOCU    (0x30) */
+  xcoff_reloc_type_toc, /* R_TOCL    (0x31) */
 };
 
 /* coffcode.h needs these to be defined.  */
@@ -238,9 +257,9 @@ bfd_boolean (*xcoff64_calculate_relocati
 #define coff_bfd_reloc_type_lookup xcoff64_reloc_type_lookup
 #define coff_bfd_reloc_name_lookup xcoff64_reloc_name_lookup
 #ifdef AIX_CORE
-extern const bfd_target * rs6000coff_core_p
+extern bfd_cleanup rs6000coff_core_p
   (bfd *abfd);
-extern bfd_boolean rs6000coff_core_file_matches_executable_p
+extern bool rs6000coff_core_file_matches_executable_p
   (bfd *cbfd, bfd *ebfd);
 extern char *rs6000coff_core_file_failing_command
   (bfd *abfd);
@@ -343,40 +362,59 @@ _bfd_xcoff64_swap_sym_out (bfd *abfd, vo
 }
 
 static void
-_bfd_xcoff64_swap_aux_in (bfd *abfd, void *ext1, int type, int in_class,
-			  int indx, int numaux, void *in1)
+_bfd_xcoff64_swap_aux_in (bfd *abfd, void *ext1, int type ATTRIBUTE_UNUSED,
+			  int in_class, int indx, int numaux, void *in1)
 {
   union external_auxent *ext = (union external_auxent *) ext1;
   union internal_auxent *in = (union internal_auxent *) in1;
+  unsigned char auxtype;
 
   switch (in_class)
     {
+    default:
+      _bfd_error_handler
+	/* xgettext: c-format */
+	(_("%pB: unsupported swap_aux_in for storage class %#x"),
+	 abfd, (unsigned int) in_class);
+      bfd_set_error (bfd_error_bad_value);
+      break;
+
     case C_FILE:
+      auxtype = H_GET_8 (abfd, ext->x_file.x_auxtype);
+      if (auxtype != _AUX_FILE)
+	goto error;
+
       if (ext->x_file.x_n.x_n.x_zeroes[0] == 0)
 	{
-	  in->x_file.x_n.x_zeroes = 0;
-	  in->x_file.x_n.x_offset =
+	  in->x_file.x_n.x_n.x_zeroes = 0;
+	  in->x_file.x_n.x_n.x_offset =
 	    H_GET_32 (abfd, ext->x_file.x_n.x_n.x_offset);
 	}
       else
-	{
-	  memcpy (in->x_file.x_fname, ext->x_file.x_n.x_fname, FILNMLEN);
-	}
-      goto end;
+	memcpy (in->x_file.x_n.x_fname, ext->x_file.x_n.x_fname, FILNMLEN);
+      in->x_file.x_ftype = H_GET_8 (abfd, ext->x_file.x_ftype);
+      break;
 
-      /* RS/6000 "csect" auxents */
+      /* RS/6000 "csect" auxents.
+         There is always a CSECT auxiliary entry. But functions can
+         have FCN and EXCEPT ones too. In this case, CSECT is always the last
+         one.
+         For now, we only support FCN types.  */
     case C_EXT:
     case C_AIX_WEAKEXT:
     case C_HIDEXT:
       if (indx + 1 == numaux)
 	{
-	  bfd_signed_vma h = 0;
-	  bfd_vma l = 0;
+	  /* C_EXT can have several aux enties. But the _AUX_CSECT is always
+	     the last one.  */
+	  auxtype = H_GET_8 (abfd, ext->x_csect.x_auxtype);
+	  if (auxtype != _AUX_CSECT)
+	    goto error;
 
-	  h = H_GET_S32 (abfd, ext->x_csect.x_scnlen_hi);
-	  l = H_GET_32 (abfd, ext->x_csect.x_scnlen_lo);
+	  bfd_vma h = H_GET_32 (abfd, ext->x_csect.x_scnlen_hi);
+	  bfd_vma l = H_GET_32 (abfd, ext->x_csect.x_scnlen_lo);
 
-	  in->x_csect.x_scnlen.l = h << 32 | (l & 0xffffffff);
+	  in->x_csect.x_scnlen.u64 = h << 32 | (l & 0xffffffff);
 
 	  in->x_csect.x_parmhash = H_GET_32 (abfd, ext->x_csect.x_parmhash);
 	  in->x_csect.x_snhash = H_GET_16 (abfd, ext->x_csect.x_snhash);
@@ -385,55 +423,67 @@ _bfd_xcoff64_swap_aux_in (bfd *abfd, voi
 	     byte orders.  */
 	  in->x_csect.x_smtyp = H_GET_8 (abfd, ext->x_csect.x_smtyp);
 	  in->x_csect.x_smclas = H_GET_8 (abfd, ext->x_csect.x_smclas);
-	  goto end;
+	}
+      else
+	{
+	  /* It can also be a _AUX_EXCEPT entry. But it's not supported
+	     for now. */
+	  auxtype = H_GET_8 (abfd, ext->x_fcn.x_auxtype);
+	  if (auxtype != _AUX_FCN)
+	    goto error;
+
+	  in->x_sym.x_fcnary.x_fcn.x_lnnoptr
+	    = H_GET_64 (abfd, ext->x_fcn.x_lnnoptr);
+	  in->x_sym.x_misc.x_fsize
+	    = H_GET_32 (abfd, ext->x_fcn.x_fsize);
+	  in->x_sym.x_fcnary.x_fcn.x_endndx.u32
+	    = H_GET_32 (abfd, ext->x_fcn.x_endndx);
 	}
       break;
 
     case C_STAT:
-    case C_LEAFSTAT:
-    case C_HIDDEN:
-      if (type == T_NULL)
-	{
-	  /* PE defines some extra fields; we zero them out for
-	     safety.  */
-	  in->x_scn.x_checksum = 0;
-	  in->x_scn.x_associated = 0;
-	  in->x_scn.x_comdat = 0;
-
-	  goto end;
-	}
+      _bfd_error_handler
+	/* xgettext: c-format */
+	(_("%pB: C_STAT isn't supported by XCOFF64"),
+	 abfd);
+      bfd_set_error (bfd_error_bad_value);
       break;
-    }
 
-  if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
-      || ISTAG (in_class))
-    {
-      in->x_sym.x_fcnary.x_fcn.x_lnnoptr
-	= H_GET_64 (abfd, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr);
-      in->x_sym.x_fcnary.x_fcn.x_endndx.l
-	= H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_endndx);
-    }
-  if (ISFCN (type))
-    {
-      in->x_sym.x_misc.x_fsize
-	= H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_fsize);
-    }
-  else
-    {
+    case C_BLOCK:
+    case C_FCN:
+      auxtype = H_GET_8 (abfd, ext->x_sym.x_auxtype);
+      if (auxtype != _AUX_SYM)
+	goto error;
+
       in->x_sym.x_misc.x_lnsz.x_lnno
-	= H_GET_32 (abfd, ext->x_sym.x_fcnary.x_lnsz.x_lnno);
-      in->x_sym.x_misc.x_lnsz.x_size
-	= H_GET_16 (abfd, ext->x_sym.x_fcnary.x_lnsz.x_size);
+	= H_GET_32 (abfd, ext->x_sym.x_lnno);
+      break;
+
+    case C_DWARF:
+      auxtype = H_GET_8 (abfd, ext->x_sect.x_auxtype);
+      if (auxtype != _AUX_SECT)
+	goto error;
+
+      in->x_sect.x_scnlen = H_GET_64 (abfd, ext->x_sect.x_scnlen);
+      in->x_sect.x_nreloc = H_GET_64 (abfd, ext->x_sect.x_nreloc);
+      break;
     }
 
- end: ;
+  return;
+
+ error:
+  _bfd_error_handler
+    /* xgettext: c-format */
+    (_("%pB: wrong auxtype %#x for storage class %#x"),
+     abfd, auxtype, (unsigned int) in_class);
+  bfd_set_error (bfd_error_bad_value);
+
+
 }
 
 static unsigned int
-_bfd_xcoff64_swap_aux_out (bfd *abfd, void *inp, int type, int in_class,
-			   int indx ATTRIBUTE_UNUSED,
-			   int numaux ATTRIBUTE_UNUSED,
-			   void *extp)
+_bfd_xcoff64_swap_aux_out (bfd *abfd, void *inp, int type ATTRIBUTE_UNUSED,
+			   int in_class, int indx, int numaux, void *extp)
 {
   union internal_auxent *in = (union internal_auxent *) inp;
   union external_auxent *ext = (union external_auxent *) extp;
@@ -441,21 +491,32 @@ _bfd_xcoff64_swap_aux_out (bfd *abfd, vo
   memset (ext, 0, bfd_coff_auxesz (abfd));
   switch (in_class)
     {
+    default:
+      _bfd_error_handler
+	/* xgettext: c-format */
+	(_("%pB: unsupported swap_aux_out for storage class %#x"),
+	 abfd, (unsigned int) in_class);
+      bfd_set_error (bfd_error_bad_value);
+      break;
+
     case C_FILE:
-      if (in->x_file.x_n.x_zeroes == 0)
+      if (in->x_file.x_n.x_n.x_zeroes == 0)
 	{
 	  H_PUT_32 (abfd, 0, ext->x_file.x_n.x_n.x_zeroes);
-	  H_PUT_32 (abfd, in->x_file.x_n.x_offset,
+	  H_PUT_32 (abfd, in->x_file.x_n.x_n.x_offset,
 		    ext->x_file.x_n.x_n.x_offset);
 	}
       else
-	{
-	  memcpy (ext->x_file.x_n.x_fname, in->x_file.x_fname, FILNMLEN);
-	}
-      H_PUT_8 (abfd, _AUX_FILE, ext->x_auxtype.x_auxtype);
-      goto end;
+	memcpy (ext->x_file.x_n.x_fname, in->x_file.x_n.x_fname, FILNMLEN);
+      H_PUT_8 (abfd, in->x_file.x_ftype, ext->x_file.x_ftype);
+      H_PUT_8 (abfd, _AUX_FILE, ext->x_file.x_auxtype);
+      break;
 
-      /* RS/6000 "csect" auxents */
+      /* RS/6000 "csect" auxents.
+         There is always a CSECT auxiliary entry. But functions can
+         have FCN and EXCEPT ones too. In this case, CSECT is always the last
+         one.
+         For now, we only support FCN types.  */
     case C_EXT:
     case C_AIX_WEAKEXT:
     case C_HIDEXT:
@@ -463,9 +524,9 @@ _bfd_xcoff64_swap_aux_out (bfd *abfd, vo
 	{
 	  bfd_vma temp;
 
-	  temp = in->x_csect.x_scnlen.l & 0xffffffff;
+	  temp = in->x_csect.x_scnlen.u64 & 0xffffffff;
 	  H_PUT_32 (abfd, temp, ext->x_csect.x_scnlen_lo);
-	  temp = in->x_csect.x_scnlen.l >> 32;
+	  temp = in->x_csect.x_scnlen.u64 >> 32;
 	  H_PUT_32 (abfd, temp, ext->x_csect.x_scnlen_hi);
 	  H_PUT_32 (abfd, in->x_csect.x_parmhash, ext->x_csect.x_parmhash);
 	  H_PUT_16 (abfd, in->x_csect.x_snhash, ext->x_csect.x_snhash);
@@ -474,71 +535,65 @@ _bfd_xcoff64_swap_aux_out (bfd *abfd, vo
 	     byte orders.  */
 	  H_PUT_8 (abfd, in->x_csect.x_smtyp, ext->x_csect.x_smtyp);
 	  H_PUT_8 (abfd, in->x_csect.x_smclas, ext->x_csect.x_smclas);
-	  H_PUT_8 (abfd, _AUX_CSECT, ext->x_auxtype.x_auxtype);
-	  goto end;
+	  H_PUT_8 (abfd, _AUX_CSECT, ext->x_csect.x_auxtype);
+	}
+      else
+	{
+	  H_PUT_64 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr,
+		    ext->x_fcn.x_lnnoptr);
+	  H_PUT_32 (abfd, in->x_sym.x_misc.x_fsize, ext->x_fcn.x_fsize);
+	  H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.u32,
+		    ext->x_fcn.x_endndx);
+	  H_PUT_8 (abfd, _AUX_FCN, ext->x_csect.x_auxtype);
 	}
       break;
 
     case C_STAT:
-    case C_LEAFSTAT:
-    case C_HIDDEN:
-      if (type == T_NULL)
-	{
-	  goto end;
-	}
+      _bfd_error_handler
+	/* xgettext: c-format */
+	(_("%pB: C_STAT isn't supported by XCOFF64"),
+	 abfd);
+      bfd_set_error (bfd_error_bad_value);
       break;
-    }
 
-  if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
-      || ISTAG (in_class))
-    {
-      H_PUT_64 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr,
-	       ext->x_sym.x_fcnary.x_fcn.x_lnnoptr);
-      H_PUT_8 (abfd, _AUX_FCN,
-	       ext->x_auxtype.x_auxtype);
-      H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l,
-	       ext->x_sym.x_fcnary.x_fcn.x_endndx);
-    }
-  if (ISFCN (type))
-    {
-      H_PUT_32 (abfd, in->x_sym.x_misc.x_fsize,
-	       ext->x_sym.x_fcnary.x_fcn.x_fsize);
-    }
-  else
-    {
-      H_PUT_32 (abfd, in->x_sym.x_misc.x_lnsz.x_lnno,
-	       ext->x_sym.x_fcnary.x_lnsz.x_lnno);
-      H_PUT_16 (abfd, in->x_sym.x_misc.x_lnsz.x_size,
-	       ext->x_sym.x_fcnary.x_lnsz.x_size);
-    }
+    case C_BLOCK:
+    case C_FCN:
+      H_PUT_32 (abfd, in->x_sym.x_misc.x_lnsz.x_lnno, ext->x_sym.x_lnno);
+      H_PUT_8 (abfd, _AUX_SYM, ext->x_sym.x_auxtype);
+      break;
 
- end:
+    case C_DWARF:
+      H_PUT_64 (abfd, in->x_sect.x_scnlen, ext->x_sect.x_scnlen);
+      H_PUT_64 (abfd, in->x_sect.x_nreloc, ext->x_sect.x_nreloc);
+      H_PUT_8 (abfd, _AUX_SECT, ext->x_sect.x_auxtype);
+      break;
+    }
 
   return bfd_coff_auxesz (abfd);
 }
 
-static bfd_boolean
+static bool
 _bfd_xcoff64_put_symbol_name (struct bfd_link_info *info,
 			      struct bfd_strtab_hash *strtab,
 			      struct internal_syment *sym,
 			      const char *name)
 {
-  bfd_boolean hash;
+  bool hash;
   bfd_size_type indx;
 
   hash = !info->traditional_format;
-  indx = _bfd_stringtab_add (strtab, name, hash, FALSE);
+  indx = _bfd_stringtab_add (strtab, name, hash, false);
 
   if (indx == (bfd_size_type) -1)
-    return FALSE;
+    return false;
 
   sym->_n._n_n._n_zeroes = 0;
   sym->_n._n_n._n_offset = STRING_SIZE_SIZE + indx;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 _bfd_xcoff64_put_ldsymbol_name (bfd *abfd ATTRIBUTE_UNUSED,
 				struct xcoff_loader_info *ldinfo,
 				struct internal_ldsym *ldsym,
@@ -561,21 +616,21 @@ _bfd_xcoff64_put_ldsymbol_name (bfd *abf
       newstrings = bfd_realloc (ldinfo->strings, newalc);
       if (newstrings == NULL)
 	{
-	  ldinfo->failed = TRUE;
-	  return FALSE;
+	  ldinfo->failed = true;
+	  return false;
 	}
       ldinfo->string_alc = newalc;
       ldinfo->strings = newstrings;
     }
 
-  bfd_put_16 (ldinfo->output_bfd, (bfd_vma) (len + 1),
-	      ldinfo->strings + ldinfo->string_size);
+  ldinfo->strings[ldinfo->string_size] = ((len + 1) >> 8) & 0xff;
+  ldinfo->strings[ldinfo->string_size + 1] = ((len + 1)) & 0xff;
   strcpy (ldinfo->strings + ldinfo->string_size + 2, name);
   ldsym->_l._l_l._l_zeroes = 0;
   ldsym->_l._l_l._l_offset = ldinfo->string_size + 2;
   ldinfo->string_size += len + 3;
 
-  return TRUE;
+  return true;
 }
 
 /* Routines to swap information in the XCOFF .loader section.  If we
@@ -712,354 +767,8 @@ xcoff64_swap_ldrel_out (bfd *abfd, const
   bfd_put_32 (abfd, src->l_symndx, dst->l_symndx);
 }
 
-static bfd_boolean
-xcoff64_write_object_contents (bfd *abfd)
-{
-  asection *current;
-  bfd_boolean hasrelocs = FALSE;
-  bfd_boolean haslinno = FALSE;
-  file_ptr scn_base;
-  file_ptr reloc_base;
-  file_ptr lineno_base;
-  file_ptr sym_base;
-  unsigned long reloc_size = 0;
-  unsigned long lnno_size = 0;
-  asection *text_sec = NULL;
-  asection *data_sec = NULL;
-  asection *bss_sec = NULL;
-  struct internal_filehdr internal_f;
-  struct internal_aouthdr internal_a;
-
-  bfd_set_error (bfd_error_system_call);
-
-  if (! abfd->output_has_begun)
-    {
-      if (! bfd_coff_compute_section_file_positions (abfd))
-	return FALSE;
-    }
-
-  /* Work out the size of the reloc and linno areas.  */
-  reloc_base = obj_relocbase (abfd);
-
-  for (current = abfd->sections; current != NULL; current = current->next)
-    reloc_size += current->reloc_count * bfd_coff_relsz (abfd);
-
-  lineno_base = reloc_base + reloc_size;
-
-  /* Make a pass through the symbol table to count line number entries and
-     put them into the correct asections.  */
-  lnno_size = coff_count_linenumbers (abfd) * bfd_coff_linesz (abfd);
-
-  sym_base = lineno_base + lnno_size;
-
-  /* Indicate in each section->line_filepos its actual file address.  */
-  for (current = abfd->sections; current != NULL; current =  current->next)
-    {
-      if (current->lineno_count)
-	{
-	  current->line_filepos = lineno_base;
-	  current->moving_line_filepos = lineno_base;
-	  lineno_base += current->lineno_count * bfd_coff_linesz (abfd);
-	}
-      else
-	{
-	  current->line_filepos = 0;
-	}
-
-      if (current->reloc_count)
-	{
-	  current->rel_filepos = reloc_base;
-	  reloc_base += current->reloc_count * bfd_coff_relsz (abfd);
-	}
-      else
-	{
-	  current->rel_filepos = 0;
-	}
-    }
-
-  if ((abfd->flags & EXEC_P) != 0)
-    {
-      scn_base = bfd_coff_filhsz (abfd) + bfd_coff_aoutsz (abfd);
-      internal_f.f_opthdr = bfd_coff_aoutsz (abfd);
-    }
-  else
-    {
-      scn_base = bfd_coff_filhsz (abfd);
-      internal_f.f_opthdr = 0;
-    }
-
-  internal_f.f_nscns = 0;
-
-  if (bfd_seek (abfd, scn_base, SEEK_SET) != 0)
-    return FALSE;
-
-  for (current = abfd->sections; current != NULL; current = current->next)
-    {
-      struct internal_scnhdr section;
-      struct external_scnhdr buff;
-      bfd_size_type amount;
-
-      internal_f.f_nscns++;
-
-      strncpy (section.s_name, current->name, SCNNMLEN);
-
-      section.s_vaddr = current->vma;
-      section.s_paddr = current->lma;
-      section.s_size =  current->size;
-
-      /* If this section has no size or is unloadable then the scnptr
-	 will be 0 too.  */
-      if (current->size == 0
-	  || (current->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
-	{
-	  section.s_scnptr = 0;
-	}
-      else
-	{
-	  section.s_scnptr = current->filepos;
-	}
-
-      section.s_relptr = current->rel_filepos;
-      section.s_lnnoptr = current->line_filepos;
-      section.s_nreloc = current->reloc_count;
-
-      section.s_nlnno = current->lineno_count;
-      if (current->reloc_count != 0)
-	hasrelocs = TRUE;
-      if (current->lineno_count != 0)
-	haslinno = TRUE;
-
-      section.s_flags = sec_to_styp_flags (current->name, current->flags);
-
-      if (!strcmp (current->name, _TEXT))
-	{
-	  text_sec = current;
-	}
-      else if (!strcmp (current->name, _DATA))
-	{
-	  data_sec = current;
-	}
-      else if (!strcmp (current->name, _BSS))
-	{
-	  bss_sec = current;
-	}
-
-      amount = bfd_coff_scnhsz (abfd);
-      if (bfd_coff_swap_scnhdr_out (abfd, &section, &buff) == 0
-	  || bfd_bwrite (&buff, amount, abfd) != amount)
-	return FALSE;
-    }
-
-  internal_f.f_timdat = 0;
-
-  internal_f.f_flags = 0;
-
-  if (!hasrelocs)
-    internal_f.f_flags |= F_RELFLG;
-  if (!haslinno)
-    internal_f.f_flags |= F_LNNO;
-  if (abfd->flags & EXEC_P)
-    internal_f.f_flags |= F_EXEC;
-
-  /* FIXME: this is wrong for PPC_PE!  */
-  if (bfd_little_endian (abfd))
-    internal_f.f_flags |= F_AR32WR;
-  else
-    internal_f.f_flags |= F_AR32W;
-
-  if ((abfd->flags & DYNAMIC) != 0)
-    internal_f.f_flags |= F_SHROBJ;
-  if (bfd_get_section_by_name (abfd, _LOADER) != NULL)
-    internal_f.f_flags |= F_DYNLOAD;
-
-  memset (&internal_a, 0, sizeof internal_a);
-
-  internal_f.f_magic = bfd_xcoff_magic_number (abfd);
-  internal_a.magic = (abfd->flags & D_PAGED
-		      ? RS6K_AOUTHDR_ZMAGIC
-		      : (abfd->flags & WP_TEXT
-			 ? RS6K_AOUTHDR_NMAGIC
-			 : RS6K_AOUTHDR_OMAGIC));
-
-  /* FIXME: Does anybody ever set this to another value?  */
-  internal_a.vstamp = 0;
-
-  /* Now should write relocs, strings, syms.  */
-  obj_sym_filepos (abfd) = sym_base;
-
-  internal_f.f_symptr = 0;
-  internal_f.f_nsyms = 0;
-
-  /* If bfd_get_symcount (abfd) != 0, then we are not using the COFF
-     backend linker, and obj_raw_syment_count is not valid until after
-     coff_write_symbols is called.  */
-  if (bfd_get_symcount (abfd) != 0)
-    {
-      int firstundef;
-
-      if (!coff_renumber_symbols (abfd, &firstundef))
-	return FALSE;
-      coff_mangle_symbols (abfd);
-      if (! coff_write_symbols (abfd))
-	return FALSE;
-      if (! coff_write_linenumbers (abfd))
-	return FALSE;
-      if (! coff_write_relocs (abfd, firstundef))
-	return FALSE;
-
-      internal_f.f_symptr = sym_base;
-      internal_f.f_nsyms = bfd_get_symcount (abfd);
-    }
-  else if (obj_raw_syment_count (abfd) != 0)
-    {
-      internal_f.f_symptr = sym_base;
-
-      /* AIX appears to require that F_RELFLG not be set if there are
-	 local symbols but no relocations.  */
-      internal_f.f_flags &=~ F_RELFLG;
-    }
-  else
-    {
-      internal_f.f_flags |= F_LSYMS;
-    }
-
-  if (text_sec)
-    {
-      internal_a.tsize = text_sec->size;
-      internal_a.text_start = internal_a.tsize ? text_sec->vma : 0;
-    }
-
-  if (data_sec)
-    {
-      internal_a.dsize = data_sec->size;
-      internal_a.data_start = internal_a.dsize ? data_sec->vma : 0;
-    }
-
-  if (bss_sec)
-    {
-      internal_a.bsize = bss_sec->size;
-      if (internal_a.bsize && bss_sec->vma < internal_a.data_start)
-	internal_a.data_start = bss_sec->vma;
-    }
-
-  internal_a.entry = bfd_get_start_address (abfd);
-  internal_f.f_nsyms = obj_raw_syment_count (abfd);
-
-  if (xcoff_data (abfd)->full_aouthdr)
-    {
-      bfd_vma toc;
-      asection *loader_sec;
-
-      internal_a.vstamp = 1;
-
-      internal_a.o_snentry = xcoff_data (abfd)->snentry;
-      if (internal_a.o_snentry == 0)
-	internal_a.entry = (bfd_vma) -1;
-
-      if (text_sec != NULL)
-	{
-	  internal_a.o_sntext = text_sec->target_index;
-	  internal_a.o_algntext = bfd_section_alignment (text_sec);
-	}
-      else
-	{
-	  internal_a.o_sntext = 0;
-	  internal_a.o_algntext = 0;
-	}
-
-      if (data_sec != NULL)
-	{
-	  internal_a.o_sndata = data_sec->target_index;
-	  internal_a.o_algndata = bfd_section_alignment (data_sec);
-	}
-      else
-	{
-	  internal_a.o_sndata = 0;
-	  internal_a.o_algndata = 0;
-	}
-
-      loader_sec = bfd_get_section_by_name (abfd, ".loader");
-      if (loader_sec != NULL)
-	internal_a.o_snloader = loader_sec->target_index;
-      else
-	internal_a.o_snloader = 0;
-      if (bss_sec != NULL)
-	internal_a.o_snbss = bss_sec->target_index;
-      else
-	internal_a.o_snbss = 0;
-
-      toc = xcoff_data (abfd)->toc;
-      internal_a.o_toc = toc;
-      internal_a.o_sntoc = xcoff_data (abfd)->sntoc;
-
-      internal_a.o_modtype = xcoff_data (abfd)->modtype;
-      if (xcoff_data (abfd)->cputype != -1)
-	internal_a.o_cputype = xcoff_data (abfd)->cputype;
-      else
-	{
-	  switch (bfd_get_arch (abfd))
-	    {
-	    case bfd_arch_rs6000:
-	      internal_a.o_cputype = 4;
-	      break;
-	    case bfd_arch_powerpc:
-	      if (bfd_get_mach (abfd) == bfd_mach_ppc)
-		internal_a.o_cputype = 3;
-	      else if (bfd_get_mach (abfd) == bfd_mach_ppc_620)
-		internal_a.o_cputype = 2;
-	      else
-		internal_a.o_cputype = 1;
-	      break;
-	    default:
-	      abort ();
-	    }
-	}
-      internal_a.o_maxstack = xcoff_data (abfd)->maxstack;
-      internal_a.o_maxdata = xcoff_data (abfd)->maxdata;
-    }
-
-  if (bfd_seek (abfd, (file_ptr) 0, 0) != 0)
-    return FALSE;
-
-  {
-    char * buff;
-    bfd_size_type amount = bfd_coff_filhsz (abfd);
-
-    buff = bfd_malloc (amount);
-    if (buff == NULL)
-      return FALSE;
-
-    bfd_coff_swap_filehdr_out (abfd, &internal_f, buff);
-    amount = bfd_bwrite (buff, amount, abfd);
-
-    free (buff);
 
-    if (amount != bfd_coff_filhsz (abfd))
-      return FALSE;
-  }
-
-  if (abfd->flags & EXEC_P)
-    {
-      char * buff;
-      bfd_size_type amount = bfd_coff_aoutsz (abfd);
-
-      buff = bfd_malloc (amount);
-      if (buff == NULL)
-	return FALSE;
-
-      bfd_coff_swap_aouthdr_out (abfd, &internal_a, buff);
-      amount = bfd_bwrite (buff, amount, abfd);
-
-      free (buff);
-
-      if (amount != bfd_coff_aoutsz (abfd))
-	return FALSE;
-    }
-
-  return TRUE;
-}
-
-static bfd_boolean
+static bool
 xcoff64_reloc_type_br (bfd *input_bfd,
 		       asection *input_section,
 		       bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -1069,13 +778,16 @@ xcoff64_reloc_type_br (bfd *input_bfd,
 		       bfd_vma val,
 		       bfd_vma addend,
 		       bfd_vma *relocation,
-		       bfd_byte *contents)
+		       bfd_byte *contents,
+		       struct bfd_link_info *info)
 {
   struct xcoff_link_hash_entry *h;
   bfd_vma section_offset;
+  struct xcoff_stub_hash_entry *stub_entry = NULL;
+  enum xcoff_stub_type stub_type;
 
   if (0 > rel->r_symndx)
-    return FALSE;
+    return false;
 
   h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx];
   section_offset = rel->r_vaddr - input_section->vma;
@@ -1124,6 +836,27 @@ xcoff64_reloc_type_br (bfd *input_bfd,
       howto->complain_on_overflow = complain_overflow_dont;
     }
 
+  /* Check if a stub is needed.  */
+  stub_type = bfd_xcoff_type_of_stub (input_section, rel, val, h);
+  if (stub_type != xcoff_stub_none)
+    {
+      asection *stub_csect;
+
+      stub_entry = bfd_xcoff_get_stub_entry (input_section, h, info);
+      if (stub_entry == NULL)
+	{
+	  _bfd_error_handler (_("Unable to find the stub entry targeting %s"),
+			      h->root.root.string);
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+
+      stub_csect = stub_entry->hcsect->root.u.def.section;
+      val = (stub_entry->stub_offset
+	     + stub_csect->output_section->vma
+	     + stub_csect->output_offset);
+    }
+
   /* The original PC-relative relocation is biased by -r_vaddr, so adding
      the value below will give the absolute target address.  */
   *relocation = val + addend + rel->r_vaddr;
@@ -1148,625 +881,565 @@ xcoff64_reloc_type_br (bfd *input_bfd,
       bfd_put_32 (input_bfd, insn, ptr);
 
       /* Make the howto absolute too.  */
-      howto->pc_relative = FALSE;
+      howto->pc_relative = false;
       howto->complain_on_overflow = complain_overflow_bitfield;
     }
   else
     {
       /* Use a PC-relative howto and subtract the instruction's address
 	 from the target address we calculated above.  */
-      howto->pc_relative = TRUE;
+      howto->pc_relative = true;
       *relocation -= (input_section->output_section->vma
 		      + input_section->output_offset
 		      + section_offset);
     }
-  return TRUE;
+  return true;
 }
 
-/* This is the relocation function for the PowerPC64.
-   See xcoff_ppc_relocation_section for more information. */
-
-bfd_boolean
-xcoff64_ppc_relocate_section (bfd *output_bfd,
-			      struct bfd_link_info *info,
-			      bfd *input_bfd,
-			      asection *input_section,
-			      bfd_byte *contents,
-			      struct internal_reloc *relocs,
-			      struct internal_syment *syms,
-			      asection **sections)
-{
-  struct internal_reloc *rel;
-  struct internal_reloc *relend;
-
-  rel = relocs;
-  relend = rel + input_section->reloc_count;
-  for (; rel < relend; rel++)
-    {
-      long symndx;
-      struct xcoff_link_hash_entry *h;
-      struct internal_syment *sym;
-      bfd_vma addend;
-      bfd_vma val;
-      struct reloc_howto_struct howto;
-      bfd_vma relocation;
-      bfd_vma value_to_relocate;
-      bfd_vma address;
-      bfd_byte *location;
-
-      /* Relocation type R_REF is a special relocation type which is
-	 merely used to prevent garbage collection from occurring for
-	 the csect including the symbol which it references.  */
-      if (rel->r_type == R_REF)
-	continue;
-
-      /* howto */
-      howto.type = rel->r_type;
-      howto.rightshift = 0;
-      howto.bitsize = (rel->r_size & 0x3f) + 1;
-      howto.size = howto.bitsize > 16 ? (howto.bitsize > 32 ? 4 : 2) : 1;
-      howto.pc_relative = FALSE;
-      howto.bitpos = 0;
-      howto.complain_on_overflow = (rel->r_size & 0x80
-				    ? complain_overflow_signed
-				    : complain_overflow_bitfield);
-      howto.special_function = NULL;
-      howto.name = "internal";
-      howto.partial_inplace = TRUE;
-      howto.src_mask = howto.dst_mask = N_ONES (howto.bitsize);
-      howto.pcrel_offset = FALSE;
-
-      /* symbol */
-      val = 0;
-      addend = 0;
-      h = NULL;
-      sym = NULL;
-      symndx = rel->r_symndx;
-
-      if (-1 != symndx)
-	{
-	  asection *sec;
-
-	  h = obj_xcoff_sym_hashes (input_bfd)[symndx];
-	  sym = syms + symndx;
-	  addend = - sym->n_value;
-
-	  if (NULL == h)
-	    {
-	      sec = sections[symndx];
-	      /* Hack to make sure we use the right TOC anchor value
-		 if this reloc is against the TOC anchor.  */
-	      if (sec->name[3] == '0'
-		  && strcmp (sec->name, ".tc0") == 0)
-		val = xcoff_data (output_bfd)->toc;
-	      else
-		val = (sec->output_section->vma
-		       + sec->output_offset
-		       + sym->n_value
-		       - sec->vma);
-	    }
-	  else
-	    {
-	      if (info->unresolved_syms_in_objects != RM_IGNORE
-		  && (h->flags & XCOFF_WAS_UNDEFINED) != 0)
-		(*info->callbacks->undefined_symbol)
-		  (info, h->root.root.string, input_bfd, input_section,
-		   rel->r_vaddr - input_section->vma,
-		   info->unresolved_syms_in_objects == RM_GENERATE_ERROR);
-
-	      if (h->root.type == bfd_link_hash_defined
-		  || h->root.type == bfd_link_hash_defweak)
-		{
-		  sec = h->root.u.def.section;
-		  val = (h->root.u.def.value
-			 + sec->output_section->vma
-			 + sec->output_offset);
-		}
-	      else if (h->root.type == bfd_link_hash_common)
-		{
-		  sec = h->root.u.c.p->section;
-		  val = (sec->output_section->vma
-			 + sec->output_offset);
-		}
-	      else
-		{
-		  BFD_ASSERT (bfd_link_relocatable (info)
-			      || (h->flags & XCOFF_DEF_DYNAMIC) != 0
-			      || (h->flags & XCOFF_IMPORT) != 0);
-		}
-	    }
-	}
-
-      if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION
-	  || !((*xcoff64_calculate_relocation[rel->r_type])
-	      (input_bfd, input_section, output_bfd, rel, sym, &howto, val,
-	       addend, &relocation, contents)))
-	return FALSE;
-
-      /* address */
-      address = rel->r_vaddr - input_section->vma;
-      location = contents + address;
-
-      if (address > input_section->size)
-	abort ();
-
-      /* Get the value we are going to relocate.  */
-      if (1 == howto.size)
-	value_to_relocate = bfd_get_16 (input_bfd, location);
-      else if (2 == howto.size)
-	value_to_relocate = bfd_get_32 (input_bfd, location);
-      else
-	value_to_relocate = bfd_get_64 (input_bfd, location);
-
-      /* overflow.
-
-	 FIXME: We may drop bits during the addition
-	 which we don't check for.  We must either check at every single
-	 operation, which would be tedious, or we must do the computations
-	 in a type larger than bfd_vma, which would be inefficient.  */
-
-      if (((*xcoff_complain_overflow[howto.complain_on_overflow])
-	   (input_bfd, value_to_relocate, relocation, &howto)))
-	{
-	  const char *name;
-	  char buf[SYMNMLEN + 1];
-	  char reloc_type_name[10];
-
-	  if (symndx == -1)
-	    {
-	      name = "*ABS*";
-	    }
-	  else if (h != NULL)
-	    {
-	      name = NULL;
-	    }
-	  else
-	    {
-	      name = _bfd_coff_internal_syment_name (input_bfd, sym, buf);
-	      if (name == NULL)
-		name = "UNKNOWN";
-	    }
-	  sprintf (reloc_type_name, "0x%02x", rel->r_type);
-
-	  (*info->callbacks->reloc_overflow)
-	    (info, (h ? &h->root : NULL), name, reloc_type_name,
-	     (bfd_vma) 0, input_bfd, input_section,
-	     rel->r_vaddr - input_section->vma);
-	}
-
-      /* Add RELOCATION to the right bits of VALUE_TO_RELOCATE.  */
-      value_to_relocate = ((value_to_relocate & ~howto.dst_mask)
-			   | (((value_to_relocate & howto.src_mask)
-			       + relocation) & howto.dst_mask));
-
-      /* Put the value back in the object file.  */
-      if (1 == howto.size)
-	bfd_put_16 (input_bfd, value_to_relocate, location);
-      else if (2 == howto.size)
-	bfd_put_32 (input_bfd, value_to_relocate, location);
-      else
-	bfd_put_64 (input_bfd, value_to_relocate, location);
-
-    }
-  return TRUE;
-}
 
 
-/* The XCOFF reloc table.  Actually, XCOFF relocations specify the
-   bitsize and whether they are signed or not, along with a
-   conventional type.  This table is for the types, which are used for
-   different algorithms for putting in the reloc.  Many of these
-   relocs need special_function entries, which I have not written.  */
+/* The XCOFF reloc table.
+   Cf xcoff_howto_table comments.  */
 
 reloc_howto_type xcoff64_howto_table[] =
 {
   /* 0x00: Standard 64 bit relocation.  */
   HOWTO (R_POS,			/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_POS_64",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x01: 64 bit relocation, but store negative value.  */
   HOWTO (R_NEG,			/* type */
 	 0,			/* rightshift */
-	 -4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 -8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_NEG",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
-  /* 0x02: 32 bit PC relative relocation.  */
+  /* 0x02: 64 bit PC relative relocation.  */
   HOWTO (R_REL,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_REL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
 
   /* 0x03: 16 bit TOC relative relocation.  */
   HOWTO (R_TOC,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_TOC",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
-  /* 0x04: I don't really know what this is.	*/
-  HOWTO (R_RTB,			/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+  /* 0x04: Same as R_TOC.  */
+  HOWTO (R_TRL,			/* type */
+	 0,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
-	 "R_RTB",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 "R_TRL",		/* name */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
 
   /* 0x05: External TOC relative symbol.  */
   HOWTO (R_GL,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_GL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x06: Local TOC relative symbol.	 */
   HOWTO (R_TCL,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_TCL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (7),
 
-  /* 0x08: Non modifiable absolute branch.  */
+  /* 0x08: Same as R_RBA.  */
   HOWTO (R_BA,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_BA_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03fffffc,		/* src_mask */
 	 0x03fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (9),
 
-  /* 0x0a: Non modifiable relative branch.  */
+  /* 0x0a: Same as R_RBR.  */
   HOWTO (R_BR,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_BR",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03fffffc,		/* src_mask */
 	 0x03fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (0xb),
 
-  /* 0x0c: Indirect load.  */
+  /* 0x0c: Same as R_POS.  */
   HOWTO (R_RL,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
 
-  /* 0x0d: Load address.  */
+  /* 0x0d: Same as R_POS.  */
   HOWTO (R_RLA,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RLA",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (0xe),
 
   /* 0x0f: Non-relocating reference.  Bitsize is 1 so that r_rsize is 0.  */
   HOWTO (R_REF,			/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 1,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_REF",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (0x10),
   EMPTY_HOWTO (0x11),
+  EMPTY_HOWTO (0x12),
 
-  /* 0x12: TOC relative indirect load.  */
-  HOWTO (R_TRL,			/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "R_TRL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 0x13: TOC relative load address.	 */
+  /* 0x13: Same as R_TOC  */
   HOWTO (R_TRLA,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_TRLA",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x14: Modifiable relative branch.  */
   HOWTO (R_RRTBI,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RRTBI",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x15: Modifiable absolute branch.  */
   HOWTO (R_RRTBA,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RRTBA",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
-  /* 0x16: Modifiable call absolute indirect.	 */
+  /* 0x16: Modifiable call absolute indirect.  */
   HOWTO (R_CAI,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_CAI",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
-  /* 0x17: Modifiable call relative.	*/
+  /* 0x17: Modifiable call relative.  */
   HOWTO (R_CREL,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_CREL",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x18: Modifiable branch absolute.  */
   HOWTO (R_RBA,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBA",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03fffffc,		/* src_mask */
 	 0x03fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x19: Modifiable branch absolute.  */
   HOWTO (R_RBAC,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBAC",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1a: Modifiable branch relative.  */
   HOWTO (R_RBR,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBR_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03fffffc,		/* src_mask */
 	 0x03fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1b: Modifiable branch absolute.  */
   HOWTO (R_RBRC,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBRC",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1c: Standard 32 bit relocation.  */
   HOWTO (R_POS,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_POS_32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1d: 16 bit Non modifiable absolute branch.  */
   HOWTO (R_BA,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_BA_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xfffc,		/* src_mask */
 	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1e: Modifiable branch relative.  */
   HOWTO (R_RBR,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBR_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xfffc,		/* src_mask */
 	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1f: Modifiable branch absolute.  */
   HOWTO (R_RBA,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBA_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
+
+  /* 0x20: General-dynamic TLS relocation.  */
+  HOWTO (R_TLS,			/* type */
+	 0,			/* rightshift */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLS",		/* name */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x21: Initial-exec TLS relocation.  */
+  HOWTO (R_TLS_IE,		/* type */
+	 0,			/* rightshift */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLS_IE",		/* name */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x22: Local-dynamic TLS relocation.  */
+  HOWTO (R_TLS_LD,		/* type */
+	 0,			/* rightshift */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLS_LD",		/* name */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x23: Local-exec TLS relocation.  */
+  HOWTO (R_TLS_LE,		/* type */
+	 0,			/* rightshift */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLS_LE",		/* name */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x24: TLS relocation.  */
+  HOWTO (R_TLSM,		/* type */
+	 0,			/* rightshift */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLSM",		/* name */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x25: TLS module relocation.  */
+  HOWTO (R_TLSML,		/* type */
+	 0,			/* rightshift */
+	 8,			/* size */
+	 64,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLSML",		/* name */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x26: 32 bit relocation, but store negative value.  */
+  HOWTO (R_NEG,			/* type */
+	 0,			/* rightshift */
+	 -4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_NEG_32",		/* name */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
+	 MINUS_ONE,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  EMPTY_HOWTO(0x27),
+  EMPTY_HOWTO(0x28),
+  EMPTY_HOWTO(0x29),
+  EMPTY_HOWTO(0x2a),
+  EMPTY_HOWTO(0x2b),
+  EMPTY_HOWTO(0x2c),
+  EMPTY_HOWTO(0x2d),
+  EMPTY_HOWTO(0x2e),
+  EMPTY_HOWTO(0x2f),
+
+  HOWTO (R_TOCU,		/* type */
+	 16,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TOCU",		/* name */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x31: Low-order 16 bit TOC relative relocation.  */
+  HOWTO (R_TOCL,		/* type */
+	 0,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TOCL",		/* name */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
 
 };
 
 void
 xcoff64_rtype2howto (arelent *relent, struct internal_reloc *internal)
 {
-  if (internal->r_type > R_RBRC)
+  if (internal->r_type > R_TOCL)
     abort ();
 
   /* Default howto layout works most of the time */
@@ -1787,6 +1460,9 @@ xcoff64_rtype2howto (arelent *relent, st
     {
       if (R_POS == internal->r_type)
 	relent->howto = &xcoff64_howto_table[0x1c];
+
+      if (R_NEG == internal->r_type)
+	relent->howto = &xcoff64_howto_table[0x26];
     }
 
   /* The r_size field of an XCOFF reloc encodes the bitsize of the
@@ -1814,9 +1490,10 @@ xcoff64_reloc_type_lookup (bfd *abfd ATT
       return &xcoff64_howto_table[8];
     case BFD_RELOC_PPC_TOC16:
       return &xcoff64_howto_table[3];
-    case BFD_RELOC_16:
-      /* Note that this relocation is only internally used by gas.  */
-      return &xcoff64_howto_table[0xc];
+    case BFD_RELOC_PPC_TOC16_HI:
+      return &xcoff64_howto_table[0x30];
+    case BFD_RELOC_PPC_TOC16_LO:
+      return &xcoff64_howto_table[0x31];
     case BFD_RELOC_PPC_B16:
       return &xcoff64_howto_table[0x1e];
     case BFD_RELOC_32:
@@ -1826,6 +1503,20 @@ xcoff64_reloc_type_lookup (bfd *abfd ATT
       return &xcoff64_howto_table[0];
     case BFD_RELOC_NONE:
       return &xcoff64_howto_table[0xf];
+    case BFD_RELOC_PPC_NEG:
+      return &xcoff64_howto_table[0x1];
+    case BFD_RELOC_PPC64_TLSGD:
+      return &xcoff64_howto_table[0x20];
+    case BFD_RELOC_PPC64_TLSIE:
+      return &xcoff64_howto_table[0x21];
+    case BFD_RELOC_PPC64_TLSLD:
+      return &xcoff64_howto_table[0x22];
+    case BFD_RELOC_PPC64_TLSLE:
+      return &xcoff64_howto_table[0x23];
+    case BFD_RELOC_PPC64_TLSM:
+      return &xcoff64_howto_table[0x24];
+    case BFD_RELOC_PPC64_TLSML:
+      return &xcoff64_howto_table[0x25];
     default:
       return NULL;
     }
@@ -1847,6 +1538,222 @@ xcoff64_reloc_name_lookup (bfd *abfd ATT
   return NULL;
 }
 
+/* This is the relocation function for the PowerPC64.
+   See xcoff_ppc_relocation_section for more information. */
+
+bool
+xcoff64_ppc_relocate_section (bfd *output_bfd,
+			      struct bfd_link_info *info,
+			      bfd *input_bfd,
+			      asection *input_section,
+			      bfd_byte *contents,
+			      struct internal_reloc *relocs,
+			      struct internal_syment *syms,
+			      asection **sections)
+{
+  struct internal_reloc *rel;
+  struct internal_reloc *relend;
+
+  rel = relocs;
+  relend = rel + input_section->reloc_count;
+  for (; rel < relend; rel++)
+    {
+      long symndx;
+      struct xcoff_link_hash_entry *h;
+      struct internal_syment *sym;
+      bfd_vma addend;
+      bfd_vma val;
+      struct reloc_howto_struct howto;
+      bfd_vma relocation;
+      bfd_vma value_to_relocate;
+      bfd_vma address;
+      bfd_byte *location;
+
+      /* Relocation type R_REF is a special relocation type which is
+	 merely used to prevent garbage collection from occurring for
+	 the csect including the symbol which it references.  */
+      if (rel->r_type == R_REF)
+	continue;
+
+      /* Retrieve default value in HOWTO table and fix up according
+	 to r_size field, if it can be different.
+	 This should be made during relocation reading but the algorithms
+	 are expecting constant howtos.  */
+      memcpy (&howto, &xcoff64_howto_table[rel->r_type], sizeof (howto));
+      if (howto.bitsize != (rel->r_size & 0x3f) + 1)
+	{
+	  switch (rel->r_type)
+	    {
+	    case R_POS:
+	    case R_NEG:
+	      howto.bitsize = (rel->r_size & 0x3f) + 1;
+	      howto.size = HOWTO_RSIZE (howto.bitsize <= 16
+					? 2 : howto.bitsize <= 32
+					? 4 : 8);
+	      howto.src_mask = howto.dst_mask = N_ONES (howto.bitsize);
+	      break;
+
+	    default:
+	      _bfd_error_handler
+		(_("%pB: relocation (%d) at (0x%" PRIx64 ") has wrong"
+		   " r_rsize (0x%x)\n"),
+		 input_bfd, rel->r_type, rel->r_vaddr, rel->r_size);
+	      return false;
+	    }
+	}
+
+      howto.complain_on_overflow = (rel->r_size & 0x80
+				    ? complain_overflow_signed
+				    : complain_overflow_bitfield);
+
+      /* symbol */
+      val = 0;
+      addend = 0;
+      h = NULL;
+      sym = NULL;
+      symndx = rel->r_symndx;
+
+      if (-1 != symndx)
+	{
+	  asection *sec;
+
+	  h = obj_xcoff_sym_hashes (input_bfd)[symndx];
+	  sym = syms + symndx;
+	  addend = - sym->n_value;
+
+	  if (NULL == h)
+	    {
+	      sec = sections[symndx];
+	      /* Hack to make sure we use the right TOC anchor value
+		 if this reloc is against the TOC anchor.  */
+	      if (sec->name[3] == '0'
+		  && strcmp (sec->name, ".tc0") == 0)
+		val = xcoff_data (output_bfd)->toc;
+	      else
+		val = (sec->output_section->vma
+		       + sec->output_offset
+		       + sym->n_value
+		       - sec->vma);
+	    }
+	  else
+	    {
+	      if (info->unresolved_syms_in_objects != RM_IGNORE
+		  && (h->flags & XCOFF_WAS_UNDEFINED) != 0)
+		info->callbacks->undefined_symbol
+		  (info, h->root.root.string, input_bfd, input_section,
+		   rel->r_vaddr - input_section->vma,
+		   info->unresolved_syms_in_objects == RM_DIAGNOSE
+		   && !info->warn_unresolved_syms);
+
+	      if (h->root.type == bfd_link_hash_defined
+		  || h->root.type == bfd_link_hash_defweak)
+		{
+		  sec = h->root.u.def.section;
+		  val = (h->root.u.def.value
+			 + sec->output_section->vma
+			 + sec->output_offset);
+		}
+	      else if (h->root.type == bfd_link_hash_common)
+		{
+		  sec = h->root.u.c.p->section;
+		  val = (sec->output_section->vma
+			 + sec->output_offset);
+		}
+	      else
+		{
+		  BFD_ASSERT (bfd_link_relocatable (info)
+			      || (h->flags & XCOFF_DEF_DYNAMIC) != 0
+			      || (h->flags & XCOFF_IMPORT) != 0);
+		}
+	    }
+	}
+
+      if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION
+	  || !((*xcoff64_calculate_relocation[rel->r_type])
+	      (input_bfd, input_section, output_bfd, rel, sym, &howto, val,
+	       addend, &relocation, contents, info)))
+	return false;
+
+      /* address */
+      address = rel->r_vaddr - input_section->vma;
+      location = contents + address;
+
+      if (address > input_section->size)
+	abort ();
+
+      /* Get the value we are going to relocate.  */
+      switch (bfd_get_reloc_size (&howto))
+	{
+	case 2:
+	  value_to_relocate = bfd_get_16 (input_bfd, location);
+	  break;
+	case 4:
+	  value_to_relocate = bfd_get_32 (input_bfd, location);
+	  break;
+	default:
+	  value_to_relocate = bfd_get_64 (input_bfd, location);
+	  break;
+	}
+
+      /* overflow.
+
+	 FIXME: We may drop bits during the addition
+	 which we don't check for.  We must either check at every single
+	 operation, which would be tedious, or we must do the computations
+	 in a type larger than bfd_vma, which would be inefficient.  */
+
+      if (((*xcoff_complain_overflow[howto.complain_on_overflow])
+	   (input_bfd, value_to_relocate, relocation, &howto)))
+	{
+	  const char *name;
+	  char buf[SYMNMLEN + 1];
+	  char reloc_type_name[10];
+
+	  if (symndx == -1)
+	    {
+	      name = "*ABS*";
+	    }
+	  else if (h != NULL)
+	    {
+	      name = NULL;
+	    }
+	  else
+	    {
+	      name = _bfd_coff_internal_syment_name (input_bfd, sym, buf);
+	      if (name == NULL)
+		name = "UNKNOWN";
+	    }
+	  sprintf (reloc_type_name, "0x%02x", rel->r_type);
+
+	  (*info->callbacks->reloc_overflow)
+	    (info, (h ? &h->root : NULL), name, reloc_type_name,
+	     (bfd_vma) 0, input_bfd, input_section,
+	     rel->r_vaddr - input_section->vma);
+	}
+
+      /* Add RELOCATION to the right bits of VALUE_TO_RELOCATE.  */
+      value_to_relocate = ((value_to_relocate & ~howto.dst_mask)
+			   | (((value_to_relocate & howto.src_mask)
+			       + relocation) & howto.dst_mask));
+
+      /* Put the value back in the object file.  */
+      switch (bfd_get_reloc_size (&howto))
+	{
+	case 2:
+	  bfd_put_16 (input_bfd, value_to_relocate, location);
+	  break;
+	case 4:
+	  bfd_put_32 (input_bfd, value_to_relocate, location);
+	  break;
+	default:
+	  bfd_put_64 (input_bfd, value_to_relocate, location);
+	  break;
+	}
+    }
+  return true;
+}
+
+
 /* PR 21786:  The PE/COFF standard does not require NUL termination for any of
    the ASCII fields in the archive headers.  So in order to be able to extract
    numerical values we provide our own versions of strtol and strtoll which
@@ -1889,7 +1796,7 @@ _bfd_strntoll (const char * nptr, int ba
 
 /* Read in the armap of an XCOFF archive.  */
 
-static bfd_boolean
+static bool
 xcoff64_slurp_armap (bfd *abfd)
 {
   file_ptr off;
@@ -1904,56 +1811,62 @@ xcoff64_slurp_armap (bfd *abfd)
   /* This is for the new format.  */
   struct xcoff_ar_hdr_big hdr;
 
-  if (xcoff_ardata (abfd) == NULL)
+  if (x_artdata (abfd) == NULL)
     {
-      abfd->has_armap = FALSE;
-      return TRUE;
+      abfd->has_armap = false;
+      return true;
     }
 
-  off = bfd_scan_vma (xcoff_ardata_big (abfd)->symoff64,
+  off = bfd_scan_vma (x_artdata (abfd)->u.bhdr.symoff64,
 		      (const char **) NULL, 10);
   if (off == 0)
     {
-      abfd->has_armap = FALSE;
-      return TRUE;
+      abfd->has_armap = false;
+      return true;
     }
 
   if (bfd_seek (abfd, off, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   /* The symbol table starts with a normal archive header.  */
-  if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd)
-      != SIZEOF_AR_HDR_BIG)
-    return FALSE;
+  if (bfd_read (&hdr, SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG)
+    return false;
 
   /* Skip the name (normally empty).  */
   GET_VALUE_IN_FIELD (namlen, hdr.namlen, 10);
   pos = ((namlen + 1) & ~(size_t) 1) + SXCOFFARFMAG;
   if (bfd_seek (abfd, pos, SEEK_CUR) != 0)
-    return FALSE;
+    return false;
 
   sz = bfd_scan_vma (hdr.size, (const char **) NULL, 10);
+  if (sz + 1 < 9)
+    {
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
 
   /* Read in the entire symbol table.  */
-  contents = (bfd_byte *) bfd_alloc (abfd, sz);
+  contents = (bfd_byte *) _bfd_alloc_and_read (abfd, sz + 1, sz);
   if (contents == NULL)
-    return FALSE;
-  if (bfd_bread (contents, sz, abfd) != sz)
-    return FALSE;
+    return false;
+
+  /* Ensure strings are NULL terminated so we don't wander off the end
+     of the buffer.  */
+  contents[sz] = 0;
 
   /* The symbol table starts with an eight byte count.  */
   c = H_GET_64 (abfd, contents);
 
-  if (c * 8 >= sz)
+  if (c >= sz / 8)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   amt = c;
   amt *= sizeof (carsym);
   bfd_ardata (abfd)->symdefs = (carsym *) bfd_alloc (abfd, amt);
   if (bfd_ardata (abfd)->symdefs == NULL)
-    return FALSE;
+    return false;
 
   /* After the count comes a list of eight byte file offsets.  */
   for (i = 0, arsym = bfd_ardata (abfd)->symdefs, p = contents + 8;
@@ -1970,30 +1883,30 @@ xcoff64_slurp_armap (bfd *abfd)
       if (p >= cend)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       arsym->name = (char *) p;
     }
 
   bfd_ardata (abfd)->symdef_count = c;
-  abfd->has_armap = TRUE;
+  abfd->has_armap = true;
 
-  return TRUE;
+  return true;
 }
 
 
 /* See if this is an NEW XCOFF archive.  */
 
-static const bfd_target *
+static bfd_cleanup
 xcoff64_archive_p (bfd *abfd)
 {
   struct artdata *tdata_hold;
   char magic[SXCOFFARMAG];
   /* This is the new format.  */
   struct xcoff_ar_file_hdr_big hdr;
-  bfd_size_type amt = SXCOFFARMAG;
+  size_t amt = SXCOFFARMAG;
 
-  if (bfd_bread (magic, amt, abfd) != amt)
+  if (bfd_read (magic, amt, abfd) != amt)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -2011,7 +1924,7 @@ xcoff64_archive_p (bfd *abfd)
 
   /* Now read the rest of the file header.  */
   amt = SIZEOF_AR_FILE_HDR_BIG - SXCOFFARMAG;
-  if (bfd_bread (&hdr.memoff, amt, abfd) != amt)
+  if (bfd_read (&hdr.memoff, amt, abfd) != amt)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -2025,22 +1938,16 @@ xcoff64_archive_p (bfd *abfd)
   if (bfd_ardata (abfd) == (struct artdata *) NULL)
     goto error_ret_restore;
 
-  /* Already cleared by bfd_zalloc above.
-     bfd_ardata (abfd)->cache = NULL;
-     bfd_ardata (abfd)->archive_head = NULL;
-     bfd_ardata (abfd)->symdefs = NULL;
-     bfd_ardata (abfd)->extended_names = NULL;
-     bfd_ardata (abfd)->extended_names_size = 0;  */
   bfd_ardata (abfd)->first_file_filepos = bfd_scan_vma (hdr.firstmemoff,
 							(const char **) NULL,
 							10);
 
-  amt = SIZEOF_AR_FILE_HDR_BIG;
+  amt = sizeof (struct xcoff_artdata);
   bfd_ardata (abfd)->tdata = bfd_zalloc (abfd, amt);
   if (bfd_ardata (abfd)->tdata == NULL)
     goto error_ret;
 
-  memcpy (bfd_ardata (abfd)->tdata, &hdr, SIZEOF_AR_FILE_HDR_BIG);
+  memcpy (&x_artdata (abfd)->u.bhdr, &hdr, SIZEOF_AR_FILE_HDR_BIG);
 
   if (! xcoff64_slurp_armap (abfd))
     {
@@ -2051,7 +1958,7 @@ xcoff64_archive_p (bfd *abfd)
       return NULL;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 
@@ -2060,36 +1967,14 @@ xcoff64_archive_p (bfd *abfd)
 static bfd *
 xcoff64_openr_next_archived_file (bfd *archive, bfd *last_file)
 {
-  bfd_vma filestart;
-
-  if ((xcoff_ardata (archive) == NULL)
+  if (x_artdata (archive) == NULL
       || ! xcoff_big_format_p (archive))
     {
       bfd_set_error (bfd_error_invalid_operation);
       return NULL;
     }
 
-  if (last_file == NULL)
-    {
-      filestart = bfd_ardata (archive)->first_file_filepos;
-    }
-  else
-    {
-      filestart = bfd_scan_vma (arch_xhdr_big (last_file)->nextoff,
-				(const char **) NULL, 10);
-    }
-
-  if (filestart == 0
-      || filestart == bfd_scan_vma (xcoff_ardata_big (archive)->memoff,
-				    (const char **) NULL, 10)
-      || filestart == bfd_scan_vma (xcoff_ardata_big (archive)->symoff,
-				    (const char **) NULL, 10))
-    {
-      bfd_set_error (bfd_error_no_more_archived_files);
-      return NULL;
-    }
-
-  return _bfd_get_elt_at_filepos (archive, (file_ptr) filestart);
+  return _bfd_xcoff_openr_next_archived_file (archive, last_file);
 }
 
 /* We can't use the usual coff_sizeof_headers routine, because AIX
@@ -2123,14 +2008,14 @@ xcoff64_create_csect_from_smclas (bfd *a
   /* Changes from 32 :
      .sv == 8, is only for 32 bit programs
      .ti == 12 and .tb == 13 are now reserved.  */
-  static const char *names[19] =
+  static const char * const names[] =
   {
     ".pr", ".ro", ".db", ".tc", ".ua", ".rw", ".gl", ".xo",
     NULL, ".bs", ".ds", ".uc", NULL,  NULL,  NULL,  ".tc0",
-    ".td", ".sv64", ".sv3264"
+    ".td", ".sv64", ".sv3264", NULL, ".tl", ".ul", ".te"
   };
 
-  if ((19 >= aux->x_csect.x_smclas)
+  if ((aux->x_csect.x_smclas < ARRAY_SIZE (names))
       && (NULL != names[aux->x_csect.x_smclas]))
     {
 
@@ -2150,18 +2035,18 @@ xcoff64_create_csect_from_smclas (bfd *a
   return return_value;
 }
 
-static bfd_boolean
+static bool
 xcoff64_is_lineno_count_overflow (bfd *abfd ATTRIBUTE_UNUSED,
 				  bfd_vma value ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 xcoff64_is_reloc_count_overflow (bfd *abfd ATTRIBUTE_UNUSED,
 				 bfd_vma value ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
 static bfd_vma
@@ -2178,24 +2063,24 @@ xcoff64_loader_reloc_offset (bfd *abfd A
   return (ldhdr->l_rldoff);
 }
 
-static bfd_boolean
+static bool
 xcoff64_bad_format_hook (bfd * abfd, void *filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
   /* Check flavor first.  */
   if (bfd_get_flavour (abfd) != bfd_target_xcoff_flavour)
-    return FALSE;
+    return false;
 
   if (bfd_xcoff_magic_number (abfd) != internal_f->f_magic)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 xcoff64_generate_rtinit (bfd *abfd, const char *init, const char *fini,
-			 bfd_boolean rtld)
+			 bool rtld)
 {
   bfd_byte filehdr_ext[FILHSZ];
   bfd_byte scnhdr_ext[SCNHSZ * 3];
@@ -2222,7 +2107,7 @@ xcoff64_generate_rtinit (bfd *abfd, cons
   char *rtld_name = "__rtld";
 
   if (! bfd_xcoff_rtinit_size (abfd))
-    return FALSE;
+    return false;
 
   initsz = (init == NULL ? 0 : 1 + strlen (init));
   finisz = (fini == NULL ? 0 : 1 + strlen (fini));
@@ -2311,7 +2196,7 @@ xcoff64_generate_rtinit (bfd *abfd, cons
   data_buffer = NULL;
   data_buffer = (bfd_byte *) bfd_zmalloc (data_buffer_size);
   if (data_buffer == NULL)
-    return FALSE;
+    return false;
 
   if (initsz)
     {
@@ -2347,7 +2232,10 @@ xcoff64_generate_rtinit (bfd *abfd, cons
 
   string_table = (bfd_byte *) bfd_zmalloc (string_table_size);
   if (string_table == NULL)
-    return FALSE;
+    {
+      free (data_buffer);
+      return false;
+    }
 
   val = string_table_size;
   bfd_put_32 (abfd, val, &string_table[0]);
@@ -2373,7 +2261,7 @@ xcoff64_generate_rtinit (bfd *abfd, cons
   syment.n_scnum = 2;
   syment.n_sclass = C_HIDEXT;
   syment.n_numaux = 1;
-  auxent.x_csect.x_scnlen.l = data_buffer_size;
+  auxent.x_csect.x_scnlen.u64 = data_buffer_size;
   auxent.x_csect.x_smtyp = 3 << 3 | XTY_SD;
   auxent.x_csect.x_smclas = XMC_RW;
   bfd_coff_swap_sym_out (abfd, &syment,
@@ -2498,20 +2386,23 @@ xcoff64_generate_rtinit (bfd *abfd, cons
   filehdr.f_symptr = data_scnhdr.s_relptr + data_scnhdr.s_nreloc * RELSZ;
 
   bfd_coff_swap_filehdr_out (abfd, &filehdr, filehdr_ext);
-  bfd_bwrite (filehdr_ext, FILHSZ, abfd);
   bfd_coff_swap_scnhdr_out (abfd, &text_scnhdr, &scnhdr_ext[SCNHSZ * 0]);
   bfd_coff_swap_scnhdr_out (abfd, &data_scnhdr, &scnhdr_ext[SCNHSZ * 1]);
   bfd_coff_swap_scnhdr_out (abfd, &bss_scnhdr, &scnhdr_ext[SCNHSZ * 2]);
-  bfd_bwrite (scnhdr_ext, 3 * SCNHSZ, abfd);
-  bfd_bwrite (data_buffer, data_buffer_size, abfd);
-  bfd_bwrite (reloc_ext, data_scnhdr.s_nreloc * RELSZ, abfd);
-  bfd_bwrite (syment_ext, filehdr.f_nsyms * SYMESZ, abfd);
-  bfd_bwrite (string_table, string_table_size, abfd);
+  bool ret = true;
+  if (bfd_write (filehdr_ext, FILHSZ, abfd) != FILHSZ
+      || bfd_write (scnhdr_ext, 3 * SCNHSZ, abfd) != 3 * SCNHSZ
+      || bfd_write (data_buffer, data_buffer_size, abfd) != data_buffer_size
+      || (bfd_write (reloc_ext, data_scnhdr.s_nreloc * RELSZ, abfd)
+	  != data_scnhdr.s_nreloc * RELSZ)
+      || (bfd_write (syment_ext, filehdr.f_nsyms * SYMESZ, abfd)
+	  != (bfd_size_type) filehdr.f_nsyms * SYMESZ)
+      || bfd_write (string_table, string_table_size, abfd) != string_table_size)
+    ret = false;
 
+  free (string_table);
   free (data_buffer);
-  data_buffer = NULL;
-
-  return TRUE;
+  return ret;
 }
 
 /* The typical dynamic reloc.  */
@@ -2519,24 +2410,44 @@ xcoff64_generate_rtinit (bfd *abfd, cons
 static reloc_howto_type xcoff64_dynamic_reloc =
 HOWTO (0,			/* type */
        0,			/* rightshift */
-       4,			/* size (0 = byte, 1 = short, 2 = long) */
+       8,			/* size */
        64,			/* bitsize */
-       FALSE,			/* pc_relative */
+       false,			/* pc_relative */
        0,			/* bitpos */
        complain_overflow_bitfield, /* complain_on_overflow */
        0,			/* special_function */
        "R_POS",			/* name */
-       TRUE,			/* partial_inplace */
+       true,			/* partial_inplace */
        MINUS_ONE,		/* src_mask */
        MINUS_ONE,		/* dst_mask */
-       FALSE);			/* pcrel_offset */
+       false);			/* pcrel_offset */
 
-static unsigned long xcoff64_glink_code[10] =
+/* Indirect call stub */
+static const unsigned long xcoff64_stub_indirect_call_code[4] =
+  {
+    0xe9820000,	/* ld r12,0(r2) */
+    0xe80c0000,	/* ld r0,0(r12) */
+    0x7c0903a6,	/* mtctr r0 */
+    0x4e800420,	/* bctr */
+  };
+
+/* Shared call stub */
+static const unsigned long xcoff64_stub_shared_call_code[6] =
+  {
+    0xe9820000,	/* ld r12,0(r2) */
+    0xf8410028,	/* std r2,40(r1) */
+    0xe80c0000,	/* ld r0,0(r12) */
+    0xe84c0008,	/* ld r2,8(r12) */
+    0x7c0903a6,	/* mtctr r0 */
+    0x4e800420,	/* bctr */
+  };
+
+static const unsigned long xcoff64_glink_code[10] =
 {
   0xe9820000,	/* ld r12,0(r2) */
   0xf8410028,	/* std r2,40(r1) */
   0xe80c0000,	/* ld r0,0(r12) */
-  0xe84c0008,	/* ld r0,8(r12) */
+  0xe84c0008,	/* ld r2,8(r12) */
   0x7c0903a6,	/* mtctr r0 */
   0x4e800420,	/* bctr */
   0x00000000,	/* start of traceback table */
@@ -2566,10 +2477,10 @@ static const struct xcoff_backend_data_r
       RELSZ,
       LINESZ,
       FILNMLEN,
-      TRUE,			/* _bfd_coff_long_filenames */
+      true,			/* _bfd_coff_long_filenames */
       XCOFF_NO_LONG_SECTION_NAMES,  /* _bfd_coff_long_section_names */
       3,			/* _bfd_coff_default_section_alignment_power */
-      TRUE,			/* _bfd_coff_force_symnames_in_strings */
+      true,			/* _bfd_coff_force_symnames_in_strings */
       4,			/* _bfd_coff_debug_string_prefix_length */
       32768,			/* _bfd_coff_max_nscns */
       coff_swap_filehdr_in,
@@ -2640,6 +2551,14 @@ static const struct xcoff_backend_data_r
     /* rtinit.  */
     88,				/* _xcoff_rtinit_size */
     xcoff64_generate_rtinit,
+
+    /* Stub indirect call.  */
+    &xcoff64_stub_indirect_call_code[0],
+    16,				/* _xcoff_stub_indirect_call_size */
+
+    /* Stub shared call.  */
+    &xcoff64_stub_shared_call_code[0],
+    24,				/* _xcoff_stub_shared_call_size */
   };
 
 /* The transfer vector that leads the outside world to all of the above.  */
@@ -2658,6 +2577,7 @@ const bfd_target rs6000_xcoff64_vec =
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 
     /* data */
     bfd_getb64,
@@ -2697,14 +2617,14 @@ const bfd_target rs6000_xcoff64_vec =
 
     {/* bfd_write_contents */
       _bfd_bool_bfd_false_error,
-      xcoff64_write_object_contents,
+      coff_write_object_contents,
       _bfd_xcoff_write_archive_contents,
       _bfd_bool_bfd_false_error
     },
 
     /* Generic */
-    _bfd_archive_close_and_cleanup,
-    _bfd_bool_bfd_true,
+    coff_close_and_cleanup,
+    coff_bfd_free_cached_info,
     coff_new_section_hook,
     _bfd_generic_get_section_contents,
     _bfd_generic_get_section_contents_in_window,
@@ -2746,6 +2666,7 @@ const bfd_target rs6000_xcoff64_vec =
     coff_bfd_is_target_special_symbol,
     coff_get_lineno,
     coff_find_nearest_line,
+    coff_find_nearest_line_with_alt,
     coff_find_line,
     coff_find_inliner_info,
     coff_bfd_make_debug_symbol,
@@ -2798,9 +2719,9 @@ const bfd_target rs6000_xcoff64_vec =
     &bfd_xcoff_backend_data,
   };
 
-extern const bfd_target *xcoff64_core_p
+extern bfd_cleanup xcoff64_core_p
   (bfd *);
-extern bfd_boolean xcoff64_core_file_matches_executable_p
+extern bool xcoff64_core_file_matches_executable_p
   (bfd *, bfd *);
 extern char *xcoff64_core_file_failing_command
   (bfd *);
@@ -2830,10 +2751,10 @@ static const struct xcoff_backend_data_r
       RELSZ,
       LINESZ,
       FILNMLEN,
-      TRUE,			/* _bfd_coff_long_filenames */
+      true,			/* _bfd_coff_long_filenames */
       XCOFF_NO_LONG_SECTION_NAMES,  /* _bfd_coff_long_section_names */
       3,			/* _bfd_coff_default_section_alignment_power */
-      TRUE,			/* _bfd_coff_force_symnames_in_strings */
+      true,			/* _bfd_coff_force_symnames_in_strings */
       4,			/* _bfd_coff_debug_string_prefix_length */
       32768,			/* _bfd_coff_max_nscns */
       coff_swap_filehdr_in,
@@ -2903,6 +2824,14 @@ static const struct xcoff_backend_data_r
     /* rtinit.  */
     88,				/* _xcoff_rtinit_size */
     xcoff64_generate_rtinit,
+
+    /* Stub indirect call.  */
+    &xcoff64_stub_indirect_call_code[0],
+    16,				/* _xcoff_stub_indirect_call_size */
+
+    /* Stub shared call.  */
+    &xcoff64_stub_shared_call_code[0],
+    24,				/* _xcoff_stub_shared_call_size */
   };
 
 /* The transfer vector that leads the outside world to all of the above.  */
@@ -2921,6 +2850,7 @@ const bfd_target rs6000_xcoff64_aix_vec
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 
     /* data */
     bfd_getb64,
@@ -2960,14 +2890,14 @@ const bfd_target rs6000_xcoff64_aix_vec
 
     {/* bfd_write_contents */
       _bfd_bool_bfd_false_error,
-      xcoff64_write_object_contents,
+      coff_write_object_contents,
       _bfd_xcoff_write_archive_contents,
       _bfd_bool_bfd_false_error
     },
 
     /* Generic */
-    _bfd_archive_close_and_cleanup,
-    _bfd_bool_bfd_true,
+    coff_close_and_cleanup,
+    coff_bfd_free_cached_info,
     coff_new_section_hook,
     _bfd_generic_get_section_contents,
     _bfd_generic_get_section_contents_in_window,
@@ -3009,6 +2939,7 @@ const bfd_target rs6000_xcoff64_aix_vec
     coff_bfd_is_target_special_symbol,
     coff_get_lineno,
     coff_find_nearest_line,
+    coff_find_nearest_line_with_alt,
     coff_find_line,
     coff_find_inliner_info,
     coff_bfd_make_debug_symbol,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-aarch64.c ./bfd/coff-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-aarch64.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/coff-aarch64.c	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,992 @@
+/* BFD back-end for AArch64 COFF files.
+   Copyright (C) 2021-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+
+#ifndef COFF_WITH_peAArch64
+#define COFF_WITH_peAArch64
+#endif
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "coff/aarch64.h"
+#include "coff/internal.h"
+#include "coff/pe.h"
+#include "libcoff.h"
+#include "libiberty.h"
+
+/* For these howto special functions,
+   output_bfd == NULL => final link, or objdump -W and other calls to
+   bfd_simple_get_relocated_section_contents
+   output_bfd != NULL && output_bfd != abfd => ld -r
+   output_bfd != NULL && output_bfd == abfd => gas.
+   FIXME: ld -r is punted to bfd_perform_relocation.  This won't be
+   correct for cases where the addend needs to be adjusted, eg. for
+   relocations against section symbols, and the field is split because
+   bfd_perform_relocation can't write addends to split relocation fields.  */
+
+static bfd_reloc_status_type
+coff_aarch64_rel21_reloc (bfd *abfd,
+			  arelent *reloc_entry,
+			  asymbol *symbol,
+			  void *data,
+			  asection *input_section,
+			  bfd *output_bfd,
+			  char **error_message ATTRIBUTE_UNUSED)
+{
+  if (output_bfd != NULL && output_bfd != abfd)
+    return bfd_reloc_continue;
+
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, reloc_entry->address))
+    return bfd_reloc_outofrange;
+
+  uint32_t op = bfd_getl32 (data + reloc_entry->address);
+  bfd_vma relocation = reloc_entry->addend;
+  bfd_reloc_status_type ret = bfd_reloc_ok;
+  if (output_bfd == NULL)
+    {
+      if (bfd_is_und_section (symbol->section))
+	{
+	  if ((symbol->flags & BSF_WEAK) == 0)
+	    ret = bfd_reloc_undefined;
+	}
+      else if (!bfd_is_com_section (symbol->section))
+	relocation += (symbol->value
+		       + symbol->section->output_offset
+		       + symbol->section->output_section->vma);
+      bfd_vma addend = ((op >> 3) & 0x1ffffc) | ((op >> 29) & 0x3);
+      addend = (addend ^ 0x100000) - 0x100000;
+      relocation += addend;
+      relocation -= (reloc_entry->address
+		     + input_section->output_offset
+		     + input_section->output_section->vma);
+      relocation = (bfd_signed_vma) relocation >> reloc_entry->howto->rightshift;
+    }
+  if (relocation + 0x100000 > 0x1fffff)
+    ret = bfd_reloc_overflow;
+
+  op &= 0x9f00001f;
+  op |= (relocation & 0x1ffffc) << 3;
+  op |= (relocation & 0x3) << 29;
+
+  bfd_putl32 (op, data + reloc_entry->address);
+
+  return ret;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_po12l_reloc (bfd *abfd,
+			  arelent *reloc_entry,
+			  asymbol *symbol ATTRIBUTE_UNUSED,
+			  void *data,
+			  asection *input_section,
+			  bfd *output_bfd,
+			  char **error_message ATTRIBUTE_UNUSED)
+{
+  if (output_bfd != NULL && output_bfd != abfd)
+    return bfd_reloc_continue;
+
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, reloc_entry->address))
+    return bfd_reloc_outofrange;
+
+  uint32_t op = bfd_getl32 (data + reloc_entry->address);
+  bfd_vma relocation = reloc_entry->addend & 0xfff;
+  int shift;
+
+  if ((op & 0xff800000) == 0x3d800000)
+    {
+      /* LDR / STR with q register */
+      shift = 4;
+    }
+  else
+    {
+      /* top two bits represent how much addend should be shifted */
+      shift = op >> 30;
+    }
+
+  bfd_reloc_status_type ret = bfd_reloc_ok;
+  if (output_bfd == NULL)
+    {
+      if (bfd_is_und_section (symbol->section))
+	{
+	  if ((symbol->flags & BSF_WEAK) == 0)
+	    ret = bfd_reloc_undefined;
+	}
+      else if (!bfd_is_com_section (symbol->section))
+	relocation += (symbol->value
+		       + symbol->section->output_offset
+		       + symbol->section->output_section->vma);
+      bfd_vma addend = (op >> 10) & 0xfff;
+      addend <<= shift;
+      relocation += addend;
+    }
+
+  if (relocation & ((1 << shift) - 1))
+    ret = bfd_reloc_overflow;
+
+  op &= 0xffc003ff;
+  op |= (relocation >> shift << 10) & 0x3ffc00;
+
+  bfd_putl32 (op, data + reloc_entry->address);
+
+  return ret;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_addr32nb_reloc (bfd *abfd,
+			     arelent *reloc_entry,
+			     asymbol *symbol ATTRIBUTE_UNUSED,
+			     void *data,
+			     asection *input_section,
+			     bfd *output_bfd,
+			     char **error_message)
+{
+  if (output_bfd != NULL && output_bfd != abfd)
+    return bfd_reloc_continue;
+
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, reloc_entry->address))
+    return bfd_reloc_outofrange;
+
+  bfd_vma relocation = reloc_entry->addend;
+  bfd_reloc_status_type ret = bfd_reloc_ok;
+  if (output_bfd == NULL)
+    {
+      if (bfd_is_und_section (symbol->section))
+	{
+	  if ((symbol->flags & BSF_WEAK) == 0)
+	    ret = bfd_reloc_undefined;
+	}
+      else if (!bfd_is_com_section (symbol->section))
+	relocation += (symbol->value
+		       + symbol->section->output_offset
+		       + symbol->section->output_section->vma);
+      bfd_vma addend = bfd_getl_signed_32 (data + reloc_entry->address);
+      relocation += addend;
+      bfd *obfd = input_section->output_section->owner;
+      if (bfd_get_flavour (obfd) == bfd_target_coff_flavour
+	  && obj_pe (obfd))
+	relocation -= pe_data (obfd)->pe_opthdr.ImageBase;
+      else
+	{
+	  *error_message = "unsupported";
+	  return bfd_reloc_dangerous;
+	}
+    }
+
+  if (relocation + 0x80000000 > 0xffffffff)
+    ret = bfd_reloc_overflow;
+
+  bfd_putl32 (relocation, data + reloc_entry->address);
+
+  return ret;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_secrel_reloc (bfd *abfd,
+			   arelent *reloc_entry,
+			   asymbol *symbol ATTRIBUTE_UNUSED,
+			   void *data,
+			   asection *input_section,
+			   bfd *output_bfd,
+			   char **error_message ATTRIBUTE_UNUSED)
+{
+  if (output_bfd != NULL && output_bfd != abfd)
+    return bfd_reloc_continue;
+
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, reloc_entry->address))
+    return bfd_reloc_outofrange;
+
+  bfd_vma relocation = reloc_entry->addend;
+  bfd_reloc_status_type ret = bfd_reloc_ok;
+  if (output_bfd == NULL)
+    {
+      if (bfd_is_und_section (symbol->section))
+	{
+	  if ((symbol->flags & BSF_WEAK) == 0)
+	    ret = bfd_reloc_undefined;
+	}
+      else if (!bfd_is_com_section (symbol->section))
+	relocation += (symbol->value
+		       + symbol->section->output_offset);
+      bfd_vma addend = bfd_getl_signed_32 (data + reloc_entry->address);
+      relocation += addend;
+    }
+  if (relocation > 0xffffffff)
+    ret = bfd_reloc_overflow;
+
+  bfd_putl32 (relocation, data + reloc_entry->address);
+
+  return ret;
+}
+
+#define coff_aarch64_NULL NULL
+#undef HOWTO_INSTALL_ADDEND
+#define HOWTO_INSTALL_ADDEND 1
+#define HOW(type, right, size, bits, pcrel, left, ovf, func, mask) \
+  HOWTO (type, right, size, bits, pcrel, left, complain_overflow_##ovf, \
+	 coff_aarch64_##func, #type, true, mask, mask, false)
+
+static const reloc_howto_type arm64_reloc_howto_abs
+= HOW (IMAGE_REL_ARM64_ABSOLUTE,
+       0, 0, 0, false, 0, dont, NULL, 0);
+
+static const reloc_howto_type arm64_reloc_howto_64
+= HOW (IMAGE_REL_ARM64_ADDR64,
+       0, 8, 64, false, 0, dont, NULL, UINT64_C (-1));
+
+static const reloc_howto_type arm64_reloc_howto_32
+= HOW (IMAGE_REL_ARM64_ADDR32,
+       0, 4, 32, false, 0, signed, NULL, 0xffffffff);
+
+static const reloc_howto_type arm64_reloc_howto_32_pcrel
+= HOW (IMAGE_REL_ARM64_REL32,
+       0, 4, 32, true, 0, signed, NULL, 0xffffffff);
+
+static const reloc_howto_type arm64_reloc_howto_branch26
+= HOW (IMAGE_REL_ARM64_BRANCH26,
+       2, 4, 26, true, 0, signed, NULL, 0x3ffffff);
+
+static const reloc_howto_type arm64_reloc_howto_page21
+= HOW (IMAGE_REL_ARM64_PAGEBASE_REL21,
+       12, 4, 21, true, 0, signed, rel21_reloc, 0x1fffff);
+
+static const reloc_howto_type arm64_reloc_howto_lo21
+= HOW (IMAGE_REL_ARM64_REL21,
+       0, 4, 21, true, 0, signed, rel21_reloc, 0x1fffff);
+
+static const reloc_howto_type arm64_reloc_howto_pgoff12l
+= HOW (IMAGE_REL_ARM64_PAGEOFFSET_12L,
+       0, 4, 12, true, 10, signed, po12l_reloc, 0x3ffc00);
+
+static const reloc_howto_type arm64_reloc_howto_branch19
+= HOW (IMAGE_REL_ARM64_BRANCH19,
+       2, 4, 19, true, 5, signed, NULL, 0xffffe0);
+
+static const reloc_howto_type arm64_reloc_howto_branch14
+= HOW (IMAGE_REL_ARM64_BRANCH14,
+       2, 4, 14, true, 5, signed, NULL, 0x7ffe0);
+
+static const reloc_howto_type arm64_reloc_howto_pgoff12a
+= HOW (IMAGE_REL_ARM64_PAGEOFFSET_12A,
+       0, 4, 12, true, 10, dont, NULL, 0x3ffc00);
+
+static const reloc_howto_type arm64_reloc_howto_32nb
+= HOW (IMAGE_REL_ARM64_ADDR32NB,
+       0, 4, 32, false, 0, signed, addr32nb_reloc, 0xffffffff);
+
+static const reloc_howto_type arm64_reloc_howto_secrel
+= HOW (IMAGE_REL_ARM64_SECREL,
+       0, 4, 32, false, 0, dont, secrel_reloc, 0xffffffff);
+
+static const reloc_howto_type arm64_reloc_howto_secidx
+= HOW (IMAGE_REL_ARM64_SECTION,
+       0, 2, 16, false, 0, dont, NULL, 0xffff);
+
+static const reloc_howto_type* const arm64_howto_table[] = {
+     &arm64_reloc_howto_abs,
+     &arm64_reloc_howto_64,
+     &arm64_reloc_howto_32,
+     &arm64_reloc_howto_32_pcrel,
+     &arm64_reloc_howto_branch26,
+     &arm64_reloc_howto_page21,
+     &arm64_reloc_howto_lo21,
+     &arm64_reloc_howto_pgoff12l,
+     &arm64_reloc_howto_branch19,
+     &arm64_reloc_howto_branch14,
+     &arm64_reloc_howto_pgoff12a,
+     &arm64_reloc_howto_32nb,
+     &arm64_reloc_howto_secrel,
+     &arm64_reloc_howto_secidx
+};
+
+/* No adjustment to addends should be needed.  The actual relocation
+   addend is in the section contents.  Unfortunately this means actual
+   addends are not shown by objdump -r, but that's true for most
+   COFF/PE targets where arelent.addend is an adjustment.  */
+#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr)		\
+  cache_ptr->addend = 0;
+
+#ifndef NUM_ELEM
+#define NUM_ELEM(a) ((sizeof (a)) / sizeof ((a)[0]))
+#endif
+
+#define NUM_RELOCS NUM_ELEM (arm64_howto_table)
+
+#define coff_bfd_reloc_type_lookup		coff_aarch64_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup		coff_aarch64_reloc_name_lookup
+
+static reloc_howto_type *
+coff_aarch64_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code)
+{
+  switch (code)
+  {
+  case BFD_RELOC_64:
+    return &arm64_reloc_howto_64;
+  case BFD_RELOC_32:
+    return &arm64_reloc_howto_32;
+  case BFD_RELOC_32_PCREL:
+    return &arm64_reloc_howto_32_pcrel;
+  case BFD_RELOC_AARCH64_CALL26:
+  case BFD_RELOC_AARCH64_JUMP26:
+    return &arm64_reloc_howto_branch26;
+  case BFD_RELOC_AARCH64_ADR_HI21_PCREL:
+  case BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL:
+    return &arm64_reloc_howto_page21;
+  case BFD_RELOC_AARCH64_TSTBR14:
+    return &arm64_reloc_howto_branch14;
+  case BFD_RELOC_AARCH64_ADR_LO21_PCREL:
+    return &arm64_reloc_howto_lo21;
+  case BFD_RELOC_AARCH64_ADD_LO12:
+    return &arm64_reloc_howto_pgoff12a;
+  case BFD_RELOC_AARCH64_LDST8_LO12:
+  case BFD_RELOC_AARCH64_LDST16_LO12:
+  case BFD_RELOC_AARCH64_LDST32_LO12:
+  case BFD_RELOC_AARCH64_LDST64_LO12:
+  case BFD_RELOC_AARCH64_LDST128_LO12:
+    return &arm64_reloc_howto_pgoff12l;
+  case BFD_RELOC_AARCH64_BRANCH19:
+    return &arm64_reloc_howto_branch19;
+  case BFD_RELOC_RVA:
+    return &arm64_reloc_howto_32nb;
+  case BFD_RELOC_32_SECREL:
+    return &arm64_reloc_howto_secrel;
+  case BFD_RELOC_16_SECIDX:
+    return &arm64_reloc_howto_secidx;
+  default:
+    BFD_FAIL ();
+    return NULL;
+  }
+
+  return NULL;
+}
+
+static reloc_howto_type *
+coff_aarch64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			    const char *r_name)
+{
+	unsigned int i;
+
+	for (i = 0; i < NUM_RELOCS; i++)
+	  if (arm64_howto_table[i]->name != NULL
+	    && strcasecmp (arm64_howto_table[i]->name, r_name) == 0)
+	    return arm64_howto_table[i];
+
+  return NULL;
+}
+
+#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER  2
+#define COFF_PAGE_SIZE			      0x1000
+
+static reloc_howto_type *
+coff_aarch64_rtype_lookup (unsigned int code)
+{
+  switch (code)
+  {
+    case IMAGE_REL_ARM64_ABSOLUTE:
+      return &arm64_reloc_howto_abs;
+    case IMAGE_REL_ARM64_ADDR64:
+      return &arm64_reloc_howto_64;
+    case IMAGE_REL_ARM64_ADDR32:
+      return &arm64_reloc_howto_32;
+    case IMAGE_REL_ARM64_REL32:
+      return &arm64_reloc_howto_32_pcrel;
+    case IMAGE_REL_ARM64_BRANCH26:
+      return &arm64_reloc_howto_branch26;
+    case IMAGE_REL_ARM64_PAGEBASE_REL21:
+      return &arm64_reloc_howto_page21;
+    case IMAGE_REL_ARM64_REL21:
+      return &arm64_reloc_howto_lo21;
+    case IMAGE_REL_ARM64_PAGEOFFSET_12L:
+      return &arm64_reloc_howto_pgoff12l;
+    case IMAGE_REL_ARM64_BRANCH19:
+      return &arm64_reloc_howto_branch19;
+    case IMAGE_REL_ARM64_BRANCH14:
+      return &arm64_reloc_howto_branch14;
+    case IMAGE_REL_ARM64_PAGEOFFSET_12A:
+      return &arm64_reloc_howto_pgoff12a;
+    case IMAGE_REL_ARM64_ADDR32NB:
+      return &arm64_reloc_howto_32nb;
+    case IMAGE_REL_ARM64_SECREL:
+      return &arm64_reloc_howto_secrel;
+    case IMAGE_REL_ARM64_SECTION:
+      return &arm64_reloc_howto_secidx;
+    default:
+      return NULL;
+  }
+
+  return NULL;
+}
+
+#define RTYPE2HOWTO(cache_ptr, dst)					\
+  ((cache_ptr)->howto = coff_aarch64_rtype_lookup((dst)->r_type))
+
+static reloc_howto_type *
+coff_aarch64_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			     asection *sec ATTRIBUTE_UNUSED,
+			     struct internal_reloc *rel,
+			     struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
+			     struct internal_syment *sym ATTRIBUTE_UNUSED,
+			     bfd_vma *addendp)
+{
+  reloc_howto_type *howto = coff_aarch64_rtype_lookup (rel->r_type);
+
+  /* Cancel out code in _bfd_coff_generic_relocate_section.  */
+  *addendp = 0;
+
+  return howto;
+}
+
+#define coff_rtype_to_howto coff_aarch64_rtype_to_howto
+
+#define SELECT_RELOC(x,howto) { (x).r_type = (howto)->type; }
+
+#ifndef bfd_pe_print_pdata
+#define bfd_pe_print_pdata      NULL
+#endif
+
+#ifdef COFF_WITH_PE
+/* Return TRUE if this relocation should
+   appear in the output .reloc section.  */
+
+static bool
+in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
+            reloc_howto_type * howto)
+{
+  return !howto->pc_relative;
+}
+#endif
+
+static bool
+coff_pe_aarch64_relocate_section (bfd *output_bfd,
+				  struct bfd_link_info *info,
+				  bfd *input_bfd,
+				  asection *input_section,
+				  bfd_byte *contents,
+				  struct internal_reloc *relocs,
+				  struct internal_syment *syms,
+				  asection **sections)
+{
+  struct internal_reloc *rel;
+  struct internal_reloc *relend;
+
+  if (bfd_link_relocatable (info))
+    return true;
+
+  rel = relocs;
+  relend = rel + input_section->reloc_count;
+
+  /* The addend for a relocation is stored in the immediate bits of each
+     opcode.  So for each relocation, we need to extract the immediate value,
+     use this to calculate what it should be for the symbol, and rewrite the
+     opcode into the section stream.  */
+
+  for (; rel < relend; rel++)
+    {
+      long symndx;
+      struct coff_link_hash_entry *h;
+      bfd_vma sym_value;
+      asection *sec = NULL;
+      uint64_t dest_vma;
+
+      /* skip trivial relocations */
+      if (rel->r_type == IMAGE_REL_ARM64_ADDR32
+	  || rel->r_type == IMAGE_REL_ARM64_ADDR64
+	  || rel->r_type == IMAGE_REL_ARM64_ABSOLUTE)
+	continue;
+
+      symndx = rel->r_symndx;
+      sym_value = syms[symndx].n_value;
+
+      h = obj_coff_sym_hashes (input_bfd)[symndx];
+
+      if (h && h->root.type == bfd_link_hash_defined)
+	{
+	  sec = h->root.u.def.section;
+	  sym_value = h->root.u.def.value;
+	}
+      else
+	{
+	  sec = sections[symndx];
+	}
+
+      if (!sec)
+	continue;
+
+      if (bfd_is_und_section (sec))
+	continue;
+
+      if (discarded_section (sec))
+	continue;
+
+      dest_vma = sec->output_section->vma + sec->output_offset + sym_value;
+
+      if (symndx < 0
+	  || (unsigned long) symndx >= obj_raw_syment_count (input_bfd))
+	continue;
+
+      /* All the relocs handled below operate on 4 bytes.  */
+      if (input_section->size < rel->r_vaddr
+	  || input_section->size - rel->r_vaddr < 4)
+	{
+	  _bfd_error_handler
+	    /* xgettext: c-format */
+	    (_("%pB: bad reloc address %#" PRIx64 " in section `%pA'"),
+	     input_bfd, (uint64_t) rel->r_vaddr, input_section);
+	  continue;
+	}
+
+      switch (rel->r_type)
+	{
+	case IMAGE_REL_ARM64_ADDR32NB:
+	  {
+	    uint64_t val;
+	    int32_t addend;
+
+	    addend = bfd_getl32 (contents + rel->r_vaddr);
+
+	    dest_vma += addend;
+
+	    val = dest_vma;
+	    val -= pe_data (output_bfd)->pe_opthdr.ImageBase;
+
+	    if (val > 0xffffffff)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_ADDR32NB", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    bfd_putl32 (val, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_BRANCH26:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0x3ffffff) << 2;
+
+	    if (addend & 0x8000000)
+	      addend |= 0xfffffffff0000000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = (dest_vma >> 2) - (cur_vma >> 2);
+
+	    if (val > 0x1ffffff || val < -0x2000000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_BRANCH26", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0xfc000000;
+	    opcode |= val & 0x3ffffff;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_BRANCH19:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0xffffe0) >> 3;
+
+	    if (addend & 0x100000)
+	      addend |= 0xffffffffffe00000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = (dest_vma >> 2) - (cur_vma >> 2);
+
+	    if (val > 0x3ffff || val < -0x40000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_BRANCH19", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0xff00001f;
+	    opcode |= (val & 0x7ffff) << 5;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_BRANCH14:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0x7ffe0) >> 3;
+
+	    if (addend & 0x8000)
+	      addend |= 0xffffffffffff0000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = (dest_vma >> 2) - (cur_vma >> 2);
+
+	    if (val > 0x1fff || val < -0x2000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_BRANCH14", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0xfff8001f;
+	    opcode |= (val & 0x3fff) << 5;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_PAGEBASE_REL21:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = ((opcode & 0xffffe0) >> 3)
+		     | ((opcode & 0x60000000) >> 29);
+
+	    if (addend & 0x100000)
+	      addend |= 0xffffffffffe00000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = (dest_vma >> 12) - (cur_vma >> 12);
+
+	    if (val > 0xfffff || val < -0x100000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_PAGEBASE_REL21", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0x9f00001f;
+	    opcode |= (val & 0x3) << 29;
+	    opcode |= (val & 0x1ffffc) << 3;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_REL21:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = ((opcode & 0xffffe0) >> 3)
+		     | ((opcode & 0x60000000) >> 29);
+
+	    if (addend & 0x100000)
+	      addend |= 0xffffffffffe00000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = dest_vma - cur_vma;
+
+	    if (val > 0xfffff || val < -0x100000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_REL21", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0x9f00001f;
+	    opcode |= (val & 0x3) << 29;
+	    opcode |= (val & 0x1ffffc) << 3;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_PAGEOFFSET_12L:
+	  {
+	    uint32_t opcode, val;
+	    uint8_t shift;
+	    int32_t addend;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0x3ffc00) >> 10;
+
+	    if ((opcode & 0xff800000) == 0x3d800000)
+	      {
+		/* LDR / STR with q register */
+		shift = 4;
+	      }
+	    else
+	      {
+		/* top two bits represent how much addend should be shifted */
+		shift = opcode >> 30;
+	      }
+
+	    addend <<= shift;
+
+	    dest_vma += addend;
+
+	    /* only interested in bottom 12 bits */
+	    val = dest_vma & 0xfff;
+
+	    if (val & ((1 << shift) - 1))
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_PAGEOFFSET_12L", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    val >>= shift;
+
+	    opcode &= 0xffc003ff;
+	    opcode |= val << 10;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_PAGEOFFSET_12A:
+	  {
+	    uint32_t opcode, val;
+	    int32_t addend;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0x3ffc00) >> 10;
+
+	    dest_vma += addend;
+
+	    /* only interested in bottom 12 bits */
+	    val = dest_vma & 0xfff;
+
+	    opcode &= 0xffc003ff;
+	    opcode |= val << 10;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_SECREL:
+	  {
+	    uint64_t val;
+	    int32_t addend;
+
+	    addend = bfd_getl32 (contents + rel->r_vaddr);
+
+	    val = sec->output_offset + sym_value + addend;
+
+	    if (val > 0xffffffff)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_SECREL", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    bfd_putl32 (val, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_SECTION:
+	  {
+	    uint16_t idx = 0, i = 1;
+	    asection *s;
+
+	    s = output_bfd->sections;
+	    while (s)
+	      {
+		if (s == sec->output_section)
+		  {
+		    idx = i;
+		    break;
+		  }
+
+		i++;
+		s = s->next;
+	      }
+
+
+	    bfd_putl16 (idx, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	default:
+	  info->callbacks->einfo (_("%F%P: Unhandled relocation type %u\n"),
+				  rel->r_type);
+	  BFD_FAIL ();
+	  return false;
+	}
+    }
+
+  return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,
+					     input_section, contents,
+					     relocs, syms, sections);
+}
+
+#define coff_relocate_section coff_pe_aarch64_relocate_section
+
+#include "coffcode.h"
+
+/* Prevent assertion in md_apply_fix by forcing use_rela_p on for new
+   sections.  */
+static bool
+coff_aarch64_new_section_hook (bfd *abfd, asection *section)
+{
+  if (!coff_new_section_hook (abfd, section))
+    return false;
+
+  section->use_rela_p = 1;
+
+  return true;
+}
+
+#define coff_aarch64_close_and_cleanup coff_close_and_cleanup
+#define coff_aarch64_bfd_free_cached_info coff_bfd_free_cached_info
+#define coff_aarch64_get_section_contents coff_get_section_contents
+#define coff_aarch64_get_section_contents_in_window coff_get_section_contents_in_window
+
+/* Target vectors.  */
+const bfd_target
+#ifdef TARGET_SYM
+  TARGET_SYM =
+#else
+# error "target symbol name not specified"
+#endif
+{
+#ifdef TARGET_NAME
+  TARGET_NAME,
+#else
+# error "target name not specified"
+#endif
+  bfd_target_coff_flavour,
+  BFD_ENDIAN_LITTLE,		/* Data byte order is little.  */
+  BFD_ENDIAN_LITTLE,		/* Header byte order is little.  */
+
+  (HAS_RELOC | EXEC_P		/* Object flags.  */
+   | HAS_LINENO | HAS_DEBUG
+   | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
+
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags.  */
+#if defined(COFF_WITH_PE)
+   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
+#endif
+   | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
+
+#ifdef TARGET_UNDERSCORE
+  TARGET_UNDERSCORE,		/* Leading underscore.  */
+#else
+  0,				/* Leading underscore.  */
+#endif
+  '/',				/* Ar_pad_char.  */
+  15,				/* Ar_max_namelen.  */
+  0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
+
+  /* Data conversion functions.  */
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+  bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data.  */
+  /* Header conversion functions.  */
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+  bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs.  */
+
+  /* Note that we allow an object file to be treated as a core file as well.  */
+  {				/* bfd_check_format.  */
+    _bfd_dummy_target,
+    coff_object_p,
+    bfd_generic_archive_p,
+    coff_object_p
+  },
+  {				/* bfd_set_format.  */
+    _bfd_bool_bfd_false_error,
+    coff_mkobject,
+    _bfd_generic_mkarchive,
+    _bfd_bool_bfd_false_error
+  },
+  {				/* bfd_write_contents.  */
+    _bfd_bool_bfd_false_error,
+    coff_write_object_contents,
+    _bfd_write_archive_contents,
+    _bfd_bool_bfd_false_error
+  },
+
+  BFD_JUMP_TABLE_GENERIC (coff_aarch64),
+  BFD_JUMP_TABLE_COPY (coff),
+  BFD_JUMP_TABLE_CORE (_bfd_nocore),
+  BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
+  BFD_JUMP_TABLE_SYMBOLS (coff),
+  BFD_JUMP_TABLE_RELOCS (coff),
+  BFD_JUMP_TABLE_WRITE (coff),
+  BFD_JUMP_TABLE_LINK (coff),
+  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+  NULL,
+
+  COFF_SWAP_TABLE
+};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-alpha.c ./bfd/coff-alpha.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-alpha.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-alpha.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ALPHA Extended-Coff files.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Modified from coff-mips.c by Steve Chamberlain <sac@cygnus.com> and
    Ian Lance Taylor <ian@cygnus.com>.
 
@@ -116,81 +116,81 @@ static reloc_howto_type alpha_howto_tabl
      of the gp register are loaded.  */
   HOWTO (ALPHA_R_IGNORE,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 reloc_nil,		/* special_function */
 	 "IGNORE",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 32 bit reference to a symbol.  */
   HOWTO (ALPHA_R_REFLONG,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "REFLONG",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 64 bit reference to a symbol.  */
   HOWTO (ALPHA_R_REFQUAD,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "REFQUAD",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit GP relative offset.  This is just like REFLONG except
      that when the value is used the value of the gp register will be
      added in.  */
   HOWTO (ALPHA_R_GPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "GPREL32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Used for an instruction that refers to memory off the GP
      register.  The offset is 16 bits of the 32 bit instruction.  This
      reloc always seems to be against the .lita section.  */
   HOWTO (ALPHA_R_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "LITERAL",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* This reloc only appears immediately following a LITERAL reloc.
      It identifies a use of the literal.  It seems that the linker can
@@ -203,17 +203,17 @@ static reloc_howto_type alpha_howto_tabl
      relocation.  */
   HOWTO (ALPHA_R_LITUSE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 reloc_nil,		/* special_function */
 	 "LITUSE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Load the gp register.  This is always used for a ldah instruction
      which loads the upper 16 bits of the gp register.  The next reloc
@@ -228,180 +228,180 @@ static reloc_howto_type alpha_howto_tabl
      address.  */
   HOWTO (ALPHA_R_GPDISP,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 reloc_nil,		/* special_function */
 	 "GPDISP",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 21 bit branch.  The native assembler generates these for
      branches within the text segment, and also fills in the PC
      relative offset in the instruction.  */
   HOWTO (ALPHA_R_BRADDR,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "BRADDR",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x1fffff,		/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A hint for a jump to a register.  */
   HOWTO (ALPHA_R_HINT,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 14,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "HINT",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x3fff,		/* src_mask */
 	 0x3fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit PC relative offset.  */
   HOWTO (ALPHA_R_SREL16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "SREL16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit PC relative offset.  */
   HOWTO (ALPHA_R_SREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "SREL32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 64 bit PC relative offset.  */
   HOWTO (ALPHA_R_SREL64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "SREL64",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Push a value on the reloc evaluation stack.  */
   HOWTO (ALPHA_R_OP_PUSH,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "OP_PUSH",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Store the value from the stack at the given address.  Store it in
      a bitfield of size r_size starting at bit position r_offset.  */
   HOWTO (ALPHA_R_OP_STORE,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "OP_STORE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Subtract the reloc address from the value on the top of the
      relocation stack.  */
   HOWTO (ALPHA_R_OP_PSUB,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "OP_PSUB",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Shift the value on the top of the relocation stack right by the
      given value.  */
   HOWTO (ALPHA_R_OP_PRSHIFT,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "OP_PRSHIFT",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Adjust the GP value for a new range in the object file.  */
   HOWTO (ALPHA_R_GPVALUE,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "GPVALUE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false)			/* pcrel_offset */
 };
 
 /* Recognize an Alpha ECOFF file.  */
 
-static const bfd_target *
+static bfd_cleanup
 alpha_ecoff_object_p (bfd *abfd)
 {
-  static const bfd_target *ret;
+  bfd_cleanup ret;
 
   ret = coff_object_p (abfd);
 
@@ -423,7 +423,7 @@ alpha_ecoff_object_p (bfd *abfd)
 	{
 	  bfd_size_type size;
 
-	  size = sec->line_filepos * 8;
+	  size = (bfd_size_type) sec->line_filepos * 8;
 	  BFD_ASSERT (size == sec->size
 		      || size + 8 == sec->size);
 	  if (!bfd_set_section_size (sec, size))
@@ -436,14 +436,14 @@ alpha_ecoff_object_p (bfd *abfd)
 
 /* See whether the magic number matches.  */
 
-static bfd_boolean
+static bool
 alpha_ecoff_bad_format_hook (bfd *abfd ATTRIBUTE_UNUSED,
 			     void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
   if (! ALPHA_ECOFF_BADMAG (*internal_f))
-    return TRUE;
+    return true;
 
   if (ALPHA_ECOFF_COMPRESSEDMAG (*internal_f))
     _bfd_error_handler
@@ -451,7 +451,7 @@ alpha_ecoff_bad_format_hook (bfd *abfd A
 	 "use compiler flags, or objZ, to generate uncompressed binaries"),
        abfd);
 
-  return FALSE;
+  return false;
 }
 
 /* This is a hook called by coff_real_object_p to create any backend
@@ -727,29 +727,36 @@ alpha_ecoff_get_relocated_section_conten
 					    struct bfd_link_info *link_info,
 					    struct bfd_link_order *link_order,
 					    bfd_byte *data,
-					    bfd_boolean relocatable,
+					    bool relocatable,
 					    asymbol **symbols)
 {
   bfd *input_bfd = link_order->u.indirect.section->owner;
   asection *input_section = link_order->u.indirect.section;
-  long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
-  arelent **reloc_vector = NULL;
+  long reloc_size;
+  arelent **reloc_vector;
   long reloc_count;
   bfd *output_bfd = relocatable ? abfd : (bfd *) NULL;
   bfd_vma gp;
-  bfd_size_type sz;
-  bfd_boolean gp_undefined;
+  bool gp_undefined;
   bfd_vma stack[RELOC_STACKSIZE];
   int tos = 0;
 
+  reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
   if (reloc_size < 0)
-    goto error_return;
-  reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
-  if (reloc_vector == NULL && reloc_size != 0)
-    goto error_return;
+    return NULL;
+
+  bfd_byte *orig_data = data;
+  if (!bfd_get_full_section_contents (input_bfd, input_section, &data))
+    return NULL;
 
-  sz = input_section->rawsize ? input_section->rawsize : input_section->size;
-  if (! bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
+  if (data == NULL)
+    return NULL;
+
+  if (reloc_size == 0)
+    return data;
+
+  reloc_vector = (arelent **) bfd_malloc (reloc_size);
+  if (reloc_vector == NULL)
     goto error_return;
 
   reloc_count = bfd_canonicalize_reloc (input_bfd, input_section,
@@ -760,7 +767,7 @@ alpha_ecoff_get_relocated_section_conten
     goto successful_return;
 
   /* Get the GP value for the output BFD.  */
-  gp_undefined = FALSE;
+  gp_undefined = false;
   gp = _bfd_get_gp_value (abfd);
   if (gp == 0)
     {
@@ -788,11 +795,11 @@ alpha_ecoff_get_relocated_section_conten
 	{
 	  struct bfd_link_hash_entry *h;
 
-	  h = bfd_link_hash_lookup (link_info->hash, "_gp", FALSE, FALSE,
-				    TRUE);
+	  h = bfd_link_hash_lookup (link_info->hash, "_gp", false, false,
+				    true);
 	  if (h == (struct bfd_link_hash_entry *) NULL
 	      || h->type != bfd_link_hash_defined)
-	    gp_undefined = TRUE;
+	    gp_undefined = true;
 	  else
 	    {
 	      gp = (h->u.def.value
@@ -803,15 +810,25 @@ alpha_ecoff_get_relocated_section_conten
 	}
     }
 
-  for (; *reloc_vector != (arelent *) NULL; reloc_vector++)
+  for (arelent **relp = reloc_vector; *relp != NULL; relp++)
     {
       arelent *rel;
       bfd_reloc_status_type r;
       char *err;
+      unsigned int r_type;
 
-      rel = *reloc_vector;
-      r = bfd_reloc_ok;
-      switch (rel->howto->type)
+      rel = *relp;
+      if (rel->howto == NULL)
+	{
+	  r = bfd_reloc_notsupported;
+	  r_type = ALPHA_R_IGNORE;
+	}
+      else
+	{
+	  r = bfd_reloc_ok;
+	  r_type = rel->howto->type;
+	}
+      switch (r_type)
 	{
 	case ALPHA_R_IGNORE:
 	  rel->address += input_section->output_offset;
@@ -868,25 +885,15 @@ alpha_ecoff_get_relocated_section_conten
 	     use.  This would not be particularly difficult, but it is
 	     not currently implemented.  */
 
-	  {
-	    unsigned long insn;
-
-	    /* I believe that the LITERAL reloc will only apply to a
-	       ldq or ldl instruction, so check my assumption.  */
-	    insn = bfd_get_32 (input_bfd, data + rel->address);
-	    BFD_ASSERT (((insn >> 26) & 0x3f) == 0x29
-			|| ((insn >> 26) & 0x3f) == 0x28);
-
-	    rel->addend -= gp;
-	    r = bfd_perform_relocation (input_bfd, rel, data, input_section,
-					output_bfd, &err);
-	    if (r == bfd_reloc_ok && gp_undefined)
-	      {
-		r = bfd_reloc_dangerous;
-		err =
-		  (char *) _("GP relative relocation used when GP not defined");
-	      }
-	  }
+	  rel->addend -= gp;
+	  r = bfd_perform_relocation (input_bfd, rel, data, input_section,
+				      output_bfd, &err);
+	  if (r == bfd_reloc_ok && gp_undefined)
+	    {
+	      r = bfd_reloc_dangerous;
+	      err = (char *) _("GP relative relocation used"
+			       " when GP not defined");
+	    }
 	  break;
 
 	case ALPHA_R_LITUSE:
@@ -901,54 +908,46 @@ alpha_ecoff_get_relocated_section_conten
 	     current location.  The second of the pair is r_size bytes
 	     ahead; it used to be marked with an ALPHA_R_IGNORE reloc,
 	     but that no longer happens in OSF/1 3.2.  */
-	  {
-	    unsigned long insn1, insn2;
-	    bfd_vma addend;
-
-	    /* Get the two instructions.  */
-	    insn1 = bfd_get_32 (input_bfd, data + rel->address);
-	    insn2 = bfd_get_32 (input_bfd, data + rel->address + rel->addend);
-
-	    BFD_ASSERT (((insn1 >> 26) & 0x3f) == 0x09); /* ldah */
-	    BFD_ASSERT (((insn2 >> 26) & 0x3f) == 0x08); /* lda */
-
-	    /* Get the existing addend.  We must account for the sign
-	       extension done by lda and ldah.  */
-	    addend = ((insn1 & 0xffff) << 16) + (insn2 & 0xffff);
-	    if (insn1 & 0x8000)
-	      {
-		addend -= 0x80000000;
-		addend -= 0x80000000;
-	      }
-	    if (insn2 & 0x8000)
-	      addend -= 0x10000;
+	  if (bfd_reloc_offset_in_range (rel->howto, input_bfd, input_section,
+					 rel->address)
+	      && bfd_reloc_offset_in_range (rel->howto, input_bfd, input_section,
+					    rel->address + rel->addend))
+	    {
+	      /* Get the two instructions.  */
+	      bfd_byte *p = data + rel->address;
+	      bfd_vma insn1 = bfd_get_32 (input_bfd, p);
+	      bfd_vma insn2 = bfd_get_32 (input_bfd, p + rel->addend);
+
+	      BFD_ASSERT (((insn1 >> 26) & 0x3f) == 0x09); /* ldah */
+	      BFD_ASSERT (((insn2 >> 26) & 0x3f) == 0x08); /* lda */
+
+	      /* Get the existing addend.  We must account for the sign
+		 extension done by lda and ldah.  */
+	      bfd_vma addend = (((((insn1 & 0xffff) ^ 0x8000) - 0x8000) << 16)
+				+ ((((insn2 & 0xffff) ^ 0x8000) - 0x8000)));
+
+	      /* The existing addend includes the different between the
+		 gp of the input BFD and the address in the input BFD.
+		 Subtract this out.  */
+	      addend -= ecoff_data (input_bfd)->gp - input_section->vma;
+
+	      /* Now add in the final gp value, and subtract out the
+		 final address.  */
+	      addend += gp - (input_section->output_section->vma
+			      + input_section->output_offset);
+
+	      /* Change the instructions, accounting for the sign
+		 extension, and write them out.  */
+	      insn1 = (insn1 & ~0xffff) | (((addend + 0x8000) >> 16) & 0xffff);
+	      insn2 = (insn2 & ~0xffff) | (addend & 0xffff);
 
-	    /* The existing addend includes the different between the
-	       gp of the input BFD and the address in the input BFD.
-	       Subtract this out.  */
-	    addend -= (ecoff_data (input_bfd)->gp
-		       - (input_section->vma + rel->address));
-
-	    /* Now add in the final gp value, and subtract out the
-	       final address.  */
-	    addend += (gp
-		       - (input_section->output_section->vma
-			  + input_section->output_offset
-			  + rel->address));
-
-	    /* Change the instructions, accounting for the sign
-	       extension, and write them out.  */
-	    if (addend & 0x8000)
-	      addend += 0x10000;
-	    insn1 = (insn1 & 0xffff0000) | ((addend >> 16) & 0xffff);
-	    insn2 = (insn2 & 0xffff0000) | (addend & 0xffff);
-
-	    bfd_put_32 (input_bfd, (bfd_vma) insn1, data + rel->address);
-	    bfd_put_32 (input_bfd, (bfd_vma) insn2,
-			data + rel->address + rel->addend);
+	      bfd_put_32 (input_bfd, insn1, p);
+	      bfd_put_32 (input_bfd, insn2, p + rel->addend);
+	    }
+	  else
+	    r = bfd_reloc_outofrange;
 
-	    rel->address += input_section->output_offset;
-	  }
+	  rel->address += input_section->output_offset;
 	  break;
 
 	case ALPHA_R_OP_PUSH:
@@ -978,7 +977,10 @@ alpha_ecoff_get_relocated_section_conten
 	    relocation += rel->addend;
 
 	    if (tos >= RELOC_STACKSIZE)
-	      abort ();
+	      {
+		r = bfd_reloc_notsupported;
+		break;
+	      }
 
 	    stack[tos++] = relocation;
 	  }
@@ -987,9 +989,6 @@ alpha_ecoff_get_relocated_section_conten
 	case ALPHA_R_OP_STORE:
 	  /* Store a value from the reloc stack into a bitfield.  */
 	  {
-	    bfd_vma val;
-	    int offset, size;
-
 	    if (relocatable)
 	      {
 		rel->address += input_section->output_offset;
@@ -997,17 +996,41 @@ alpha_ecoff_get_relocated_section_conten
 	      }
 
 	    if (tos == 0)
-	      abort ();
+	      {
+		r = bfd_reloc_notsupported;
+		break;
+	      }
+
+	    /* The offset and size in bits for this reloc are encoded
+	       into the addend field by alpha_adjust_reloc_in.  */
+	    unsigned int offset = (rel->addend >> 8) & 0xff;
+	    unsigned int size = rel->addend & 0xff;
+	    unsigned int startbyte = offset >> 3;
+	    unsigned int endbyte = (offset + size + 7) >> 3;
+	    unsigned int bytes = endbyte + 1 - startbyte;
+
+	    if (bytes <= 8
+		&& rel->address + startbyte + bytes >= rel->address
+		&& (rel->address + startbyte + bytes
+		    <= bfd_get_section_limit_octets (input_bfd, input_section)))
+	      {
+		uint64_t val = 0;
+		for (int off = bytes - 1; off >= 0; --off)
+		  val = (val << 8) | data[rel->address + startbyte + off];
+
+		offset -= startbyte << 3;
+		size -= startbyte << 3;
+		uint64_t mask = (((uint64_t) 1 << size) - 1) << offset;
+		val = (val & ~mask) | ((stack[--tos] << offset) & mask);
 
-	    /* The offset and size for this reloc are encoded into the
-	       addend field by alpha_adjust_reloc_in.  */
-	    offset = (rel->addend >> 8) & 0xff;
-	    size = rel->addend & 0xff;
-
-	    val = bfd_get_64 (abfd, data + rel->address);
-	    val &=~ (((1 << size) - 1) << offset);
-	    val |= (stack[--tos] & ((1 << size) - 1)) << offset;
-	    bfd_put_64 (abfd, val, data + rel->address);
+		for (unsigned int off = 0; off < bytes; ++off)
+		  {
+		    data[rel->address + startbyte + off] = val & 0xff;
+		    val >>= 8;
+		  }
+	      }
+	    else
+	      r = bfd_reloc_outofrange;
 	  }
 	  break;
 
@@ -1038,7 +1061,10 @@ alpha_ecoff_get_relocated_section_conten
 	    relocation += rel->addend;
 
 	    if (tos == 0)
-	      abort ();
+	      {
+		r = bfd_reloc_notsupported;
+		break;
+	      }
 
 	    stack[tos - 1] -= relocation;
 	  }
@@ -1071,7 +1097,10 @@ alpha_ecoff_get_relocated_section_conten
 	    relocation += rel->addend;
 
 	    if (tos == 0)
-	      abort ();
+	      {
+		r = bfd_reloc_notsupported;
+		break;
+	      }
 
 	    stack[tos - 1] >>= relocation;
 	  }
@@ -1080,11 +1109,12 @@ alpha_ecoff_get_relocated_section_conten
 	case ALPHA_R_GPVALUE:
 	  /* I really don't know if this does the right thing.  */
 	  gp = rel->addend;
-	  gp_undefined = FALSE;
+	  gp_undefined = false;
 	  break;
 
 	default:
-	  abort ();
+	  r = bfd_reloc_notsupported;
+	  break;
 	}
 
       if (relocatable)
@@ -1103,7 +1133,7 @@ alpha_ecoff_get_relocated_section_conten
 	    case bfd_reloc_undefined:
 	      (*link_info->callbacks->undefined_symbol)
 		(link_info, bfd_asymbol_name (*rel->sym_ptr_ptr),
-		 input_bfd, input_section, rel->address, TRUE);
+		 input_bfd, input_section, rel->address, true);
 	      break;
 	    case bfd_reloc_dangerous:
 	      (*link_info->callbacks->reloc_dangerous)
@@ -1116,24 +1146,39 @@ alpha_ecoff_get_relocated_section_conten
 		 input_section, rel->address);
 	      break;
 	    case bfd_reloc_outofrange:
+	      (*link_info->callbacks->einfo)
+		/* xgettext:c-format */
+		(_("%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"),
+		 input_bfd, input_section, rel);
+	      goto error_return;
+	    case bfd_reloc_notsupported:
+	      (*link_info->callbacks->einfo)
+		/* xgettext:c-format */
+		(_("%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"),
+		 input_bfd, input_section, rel);
+	      goto error_return;
 	    default:
-	      abort ();
+	      (*link_info->callbacks->einfo)
+		/* xgettext:c-format */
+		(_("%X%P: %pB(%pA): relocation \"%pR\""
+		   " returns an unrecognized value %x\n"),
+		 input_bfd, input_section, rel, r);
 	      break;
 	    }
 	}
     }
 
   if (tos != 0)
-    abort ();
+    goto error_return;
 
  successful_return:
-  if (reloc_vector != NULL)
-    free (reloc_vector);
+  free (reloc_vector);
   return data;
 
  error_return:
-  if (reloc_vector != NULL)
-    free (reloc_vector);
+  free (reloc_vector);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
@@ -1327,7 +1372,7 @@ alpha_convert_external_reloc (bfd *outpu
    quite similar to get_relocated_section_contents.  Perhaps they
    could be combined somehow.  */
 
-static bfd_boolean
+static bool
 alpha_relocate_section (bfd *output_bfd,
 			struct bfd_link_info *info,
 			bfd *input_bfd,
@@ -1338,12 +1383,13 @@ alpha_relocate_section (bfd *output_bfd,
   asection **symndx_to_section, *lita_sec;
   struct ecoff_link_hash_entry **sym_hashes;
   bfd_vma gp;
-  bfd_boolean gp_undefined;
+  bool gp_undefined;
   bfd_vma stack[RELOC_STACKSIZE];
   int tos = 0;
   struct external_reloc *ext_rel;
   struct external_reloc *ext_rel_end;
   bfd_size_type amt;
+  bool ret = true;
 
   /* We keep a table mapping the symndx found in an internal reloc to
      the appropriate section.  This is faster than looking up the
@@ -1354,7 +1400,7 @@ alpha_relocate_section (bfd *output_bfd,
       amt = NUM_RELOC_SECTIONS * sizeof (asection *);
       symndx_to_section = (asection **) bfd_alloc (input_bfd, amt);
       if (!symndx_to_section)
-	return FALSE;
+	return false;
 
       symndx_to_section[RELOC_SECTION_NONE] = NULL;
       symndx_to_section[RELOC_SECTION_TEXT] =
@@ -1443,7 +1489,7 @@ alpha_relocate_section (bfd *output_bfd,
 					       _("using multiple gp values"),
 					       (char *) NULL, output_bfd,
 					       (asection *) NULL, (bfd_vma) 0);
-		  ecoff_data (output_bfd)->issued_multiple_gp_warning = TRUE;
+		  ecoff_data (output_bfd)->issued_multiple_gp_warning = true;
 		}
 	      if (lita_vma < gp - 0x8000)
 		gp = lita_vma + lita_size - 0x8000;
@@ -1473,10 +1519,11 @@ alpha_relocate_section (bfd *output_bfd,
       int r_extern;
       int r_offset;
       int r_size;
-      bfd_boolean relocatep;
-      bfd_boolean adjust_addrp;
-      bfd_boolean gp_usedp;
+      bool relocatep;
+      bool adjust_addrp;
+      bool gp_usedp;
       bfd_vma addend;
+      bfd_reloc_status_type r;
 
       r_vaddr = H_GET_64 (input_bfd, ext_rel->r_vaddr);
       r_symndx = H_GET_32 (input_bfd, ext_rel->r_symndx);
@@ -1490,31 +1537,17 @@ alpha_relocate_section (bfd *output_bfd,
       r_size = ((ext_rel->r_bits[3] & RELOC_BITS3_SIZE_LITTLE)
 		>> RELOC_BITS3_SIZE_SH_LITTLE);
 
-      relocatep = FALSE;
-      adjust_addrp = TRUE;
-      gp_usedp = FALSE;
+      relocatep = false;
+      adjust_addrp = true;
+      gp_usedp = false;
       addend = 0;
+      r = bfd_reloc_ok;
 
       switch (r_type)
 	{
-	case ALPHA_R_GPRELHIGH:
-	  _bfd_error_handler (_("%pB: %s unsupported"),
-			      input_bfd, "ALPHA_R_GPRELHIGH");
-	  bfd_set_error (bfd_error_bad_value);
-	  continue;
-
-	case ALPHA_R_GPRELLOW:
-	  _bfd_error_handler (_("%pB: %s unsupported"),
-			      input_bfd, "ALPHA_R_GPRELLOW");
-	  bfd_set_error (bfd_error_bad_value);
-	  continue;
-
 	default:
-	  /* xgettext:c-format */
-	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
-			      input_bfd, (int) r_type);
-	  bfd_set_error (bfd_error_bad_value);
-	  continue;
+	  r = bfd_reloc_notsupported;
+	  break;
 
 	case ALPHA_R_IGNORE:
 	  /* This reloc appears after a GPDISP reloc.  On earlier
@@ -1526,13 +1559,13 @@ alpha_relocate_section (bfd *output_bfd,
 	  if (bfd_link_relocatable (info))
 	    H_PUT_64 (input_bfd, input_section->output_offset + r_vaddr,
 		      ext_rel->r_vaddr);
-	  adjust_addrp = FALSE;
+	  adjust_addrp = false;
 	  break;
 
 	case ALPHA_R_REFLONG:
 	case ALPHA_R_REFQUAD:
 	case ALPHA_R_HINT:
-	  relocatep = TRUE;
+	  relocatep = true;
 	  break;
 
 	case ALPHA_R_BRADDR:
@@ -1541,7 +1574,7 @@ alpha_relocate_section (bfd *output_bfd,
 	case ALPHA_R_SREL64:
 	  if (r_extern)
 	    addend += - (r_vaddr + 4);
-	  relocatep = TRUE;
+	  relocatep = true;
 	  break;
 
 	case ALPHA_R_GPREL32:
@@ -1549,9 +1582,9 @@ alpha_relocate_section (bfd *output_bfd,
 	     bit offset from the current GP value.  We must adjust it
 	     by the different between the original GP value and the
 	     current GP value.  */
-	  relocatep = TRUE;
+	  relocatep = true;
 	  addend = ecoff_data (input_bfd)->gp - gp;
-	  gp_usedp = TRUE;
+	  gp_usedp = true;
 	  break;
 
 	case ALPHA_R_LITERAL:
@@ -1571,20 +1604,9 @@ alpha_relocate_section (bfd *output_bfd,
 	     use.  This would not be particularly difficult, but it is
 	     not currently implemented.  */
 
-	  /* I believe that the LITERAL reloc will only apply to a ldq
-	     or ldl instruction, so check my assumption.  */
-	  {
-	    unsigned long insn;
-
-	    insn = bfd_get_32 (input_bfd,
-			       contents + r_vaddr - input_section->vma);
-	    BFD_ASSERT (((insn >> 26) & 0x3f) == 0x29
-			|| ((insn >> 26) & 0x3f) == 0x28);
-	  }
-
-	  relocatep = TRUE;
+	  relocatep = true;
 	  addend = ecoff_data (input_bfd)->gp - gp;
-	  gp_usedp = TRUE;
+	  gp_usedp = true;
 	  break;
 
 	case ALPHA_R_LITUSE:
@@ -1598,58 +1620,45 @@ alpha_relocate_section (bfd *output_bfd,
 	     current location.  The second of the pair is r_symndx
 	     bytes ahead.  It used to be marked with an ALPHA_R_IGNORE
 	     reloc, but OSF/1 3.2 no longer does that.  */
-	  {
-	    unsigned long insn1, insn2;
-
-	    /* Get the two instructions.  */
-	    insn1 = bfd_get_32 (input_bfd,
-				contents + r_vaddr - input_section->vma);
-	    insn2 = bfd_get_32 (input_bfd,
-				(contents
-				 + r_vaddr
-				 - input_section->vma
-				 + r_symndx));
-
-	    BFD_ASSERT (((insn1 >> 26) & 0x3f) == 0x09); /* ldah */
-	    BFD_ASSERT (((insn2 >> 26) & 0x3f) == 0x08); /* lda */
-
-	    /* Get the existing addend.  We must account for the sign
-	       extension done by lda and ldah.  */
-	    addend = ((insn1 & 0xffff) << 16) + (insn2 & 0xffff);
-	    if (insn1 & 0x8000)
-	      {
-		/* This is addend -= 0x100000000 without causing an
-		   integer overflow on a 32 bit host.  */
-		addend -= 0x80000000;
-		addend -= 0x80000000;
-	      }
-	    if (insn2 & 0x8000)
-	      addend -= 0x10000;
+	  if (r_vaddr >= input_section->vma
+	      && r_vaddr - input_section->vma < input_section->size
+	      && input_section->size - (r_vaddr - input_section->vma) > r_symndx
+	      && (input_section->size - (r_vaddr - input_section->vma)
+		  - r_symndx >= 4))
+	    {
+	      /* Get the two instructions.  */
+	      bfd_byte *p = contents + r_vaddr - input_section->vma;
+	      bfd_vma insn1 = bfd_get_32 (input_bfd, p);
+	      bfd_vma insn2 = bfd_get_32 (input_bfd, p + r_symndx);
+
+	      BFD_ASSERT (((insn1 >> 26) & 0x3f) == 0x09); /* ldah */
+	      BFD_ASSERT (((insn2 >> 26) & 0x3f) == 0x08); /* lda */
+
+	      /* Get the existing addend.  We must account for the sign
+		 extension done by lda and ldah.  */
+	      addend = (((((insn1 & 0xffff) ^ 0x8000) - 0x8000) << 16)
+			+ (((insn2 & 0xffff) ^ 0x8000) - 0x8000));
+
+	      /* The existing addend includes the difference between the
+		 gp of the input BFD and the address in the input BFD.
+		 We want to change this to the difference between the
+		 final GP and the final address.  */
+	      addend -= ecoff_data (input_bfd)->gp - input_section->vma;
+	      addend += gp - (input_section->output_section->vma
+			      + input_section->output_offset);
+
+	      /* Change the instructions, accounting for the sign
+		 extension, and write them out.  */
+	      insn1 = (insn1 & ~0xffff) | (((addend + 0x8000) >> 16) & 0xffff);
+	      insn2 = (insn2 & ~0xffff) | (addend & 0xffff);
 
-	    /* The existing addend includes the difference between the
-	       gp of the input BFD and the address in the input BFD.
-	       We want to change this to the difference between the
-	       final GP and the final address.  */
-	    addend += (gp
-		       - ecoff_data (input_bfd)->gp
-		       + input_section->vma
-		       - (input_section->output_section->vma
-			  + input_section->output_offset));
-
-	    /* Change the instructions, accounting for the sign
-	       extension, and write them out.  */
-	    if (addend & 0x8000)
-	      addend += 0x10000;
-	    insn1 = (insn1 & 0xffff0000) | ((addend >> 16) & 0xffff);
-	    insn2 = (insn2 & 0xffff0000) | (addend & 0xffff);
-
-	    bfd_put_32 (input_bfd, (bfd_vma) insn1,
-			contents + r_vaddr - input_section->vma);
-	    bfd_put_32 (input_bfd, (bfd_vma) insn2,
-			contents + r_vaddr - input_section->vma + r_symndx);
+	      bfd_put_32 (input_bfd, insn1, p);
+	      bfd_put_32 (input_bfd, insn2, p + r_symndx);
 
-	    gp_usedp = TRUE;
-	  }
+	      gp_usedp = true;
+	    }
+	  else
+	    r = bfd_reloc_outofrange;
 	  break;
 
 	case ALPHA_R_OP_PUSH:
@@ -1664,8 +1673,11 @@ alpha_relocate_section (bfd *output_bfd,
 	      asection *s;
 
 	      s = symndx_to_section[r_symndx];
-	      if (s == (asection *) NULL)
-		abort ();
+	      if (s == NULL)
+		{
+		  r = bfd_reloc_notsupported;
+		  break;
+		}
 	      addend = s->output_section->vma + s->output_offset - s->vma;
 	    }
 	  else
@@ -1673,8 +1685,11 @@ alpha_relocate_section (bfd *output_bfd,
 	      struct ecoff_link_hash_entry *h;
 
 	      h = sym_hashes[r_symndx];
-	      if (h == (struct ecoff_link_hash_entry *) NULL)
-		abort ();
+	      if (h == NULL)
+		{
+		  r = bfd_reloc_notsupported;
+		  break;
+		}
 
 	      if (! bfd_link_relocatable (info))
 		{
@@ -1691,7 +1706,7 @@ alpha_relocate_section (bfd *output_bfd,
 			 relocated.  */
 		      (*info->callbacks->undefined_symbol)
 			(info, h->root.root.string, input_bfd,
-			 input_section, (bfd_vma) 0, TRUE);
+			 input_section, (bfd_vma) 0, true);
 		      addend = 0;
 		    }
 		}
@@ -1728,25 +1743,34 @@ alpha_relocate_section (bfd *output_bfd,
 		{
 		case ALPHA_R_OP_PUSH:
 		  if (tos >= RELOC_STACKSIZE)
-		    abort ();
+		    {
+		      r = bfd_reloc_notsupported;
+		      break;
+		    }
 		  stack[tos++] = addend;
 		  break;
 
 		case ALPHA_R_OP_PSUB:
 		  if (tos == 0)
-		    abort ();
+		    {
+		      r = bfd_reloc_notsupported;
+		      break;
+		    }
 		  stack[tos - 1] -= addend;
 		  break;
 
 		case ALPHA_R_OP_PRSHIFT:
 		  if (tos == 0)
-		    abort ();
+		    {
+		      r = bfd_reloc_notsupported;
+		      break;
+		    }
 		  stack[tos - 1] >>= addend;
 		  break;
 		}
 	    }
 
-	  adjust_addrp = FALSE;
+	  adjust_addrp = false;
 	  break;
 
 	case ALPHA_R_OP_STORE:
@@ -1755,45 +1779,50 @@ alpha_relocate_section (bfd *output_bfd,
 	     adjust the address of the reloc.  */
 	  if (! bfd_link_relocatable (info))
 	    {
-	      bfd_vma mask;
-	      bfd_vma val;
-
-	      if (tos == 0)
-		abort ();
+	      unsigned int startbyte = r_offset >> 3;
+	      unsigned int endbyte = (r_offset + r_size + 7) >> 3;
+	      unsigned int bytes = endbyte + 1 - startbyte;
+
+	      if (bytes <= 8
+		  && r_vaddr >= input_section->vma
+		  && r_vaddr - input_section->vma < input_section->size
+		  && (input_section->size - (r_vaddr - input_section->vma)
+		      >= startbyte + bytes))
+		{
+		  bfd_byte *p = contents + (r_vaddr - input_section->vma);
+		  uint64_t val = 0;
+		  for (int off = bytes - 1; off >= 0; --off)
+		    val = (val << 8) | p[startbyte + off];
+
+		  r_offset -= startbyte << 3;
+		  r_size -= startbyte << 3;
+		  uint64_t mask = (((uint64_t) 1 << r_size) - 1) << r_offset;
+		  val = (val & ~mask) | ((stack[--tos] << r_offset) & mask);
 
-	      /* Get the relocation mask.  The separate steps and the
-		 casts to bfd_vma are attempts to avoid a bug in the
-		 Alpha OSF 1.3 C compiler.  See reloc.c for more
-		 details.  */
-	      mask = 1;
-	      mask <<= (bfd_vma) r_size;
-	      mask -= 1;
-
-	      /* FIXME: I don't know what kind of overflow checking,
-		 if any, should be done here.  */
-	      val = bfd_get_64 (input_bfd,
-				contents + r_vaddr - input_section->vma);
-	      val &=~ mask << (bfd_vma) r_offset;
-	      val |= (stack[--tos] & mask) << (bfd_vma) r_offset;
-	      bfd_put_64 (input_bfd, val,
-			  contents + r_vaddr - input_section->vma);
+		  for (unsigned int off = 0; off < bytes; ++off)
+		    {
+		      p[startbyte + off] = val & 0xff;
+		      val >>= 8;
+		    }
+		}
+	      else
+		r = bfd_reloc_outofrange;
 	    }
 	  break;
 
 	case ALPHA_R_GPVALUE:
 	  /* I really don't know if this does the right thing.  */
 	  gp = ecoff_data (input_bfd)->gp + r_symndx;
-	  gp_undefined = FALSE;
+	  gp_undefined = false;
 	  break;
 	}
 
-      if (relocatep)
+      if (relocatep && r == bfd_reloc_ok)
 	{
 	  reloc_howto_type *howto;
 	  struct ecoff_link_hash_entry *h = NULL;
 	  asection *s = NULL;
 	  bfd_vma relocation;
-	  bfd_reloc_status_type r;
 
 	  /* Perform a relocation.  */
 
@@ -1805,8 +1834,8 @@ alpha_relocate_section (bfd *output_bfd,
 	      /* If h is NULL, that means that there is a reloc
 		 against an external symbol which we thought was just
 		 a debugging symbol.  This should not happen.  */
-	      if (h == (struct ecoff_link_hash_entry *) NULL)
-		abort ();
+	      if (h == NULL)
+		r = bfd_reloc_notsupported;
 	    }
 	  else
 	    {
@@ -1815,11 +1844,14 @@ alpha_relocate_section (bfd *output_bfd,
 	      else
 		s = symndx_to_section[r_symndx];
 
-	      if (s == (asection *) NULL)
-		abort ();
+	      if (s == NULL)
+		r = bfd_reloc_notsupported;
+
 	    }
 
-	  if (bfd_link_relocatable (info))
+	  if (r != bfd_reloc_ok)
+	    ;
+	  else if (bfd_link_relocatable (info))
 	    {
 	      /* We are generating relocatable output, and must
 		 convert the existing reloc.  */
@@ -1885,12 +1917,7 @@ alpha_relocate_section (bfd *output_bfd,
 				    + hsec->output_offset);
 		    }
 		  else
-		    {
-		      (*info->callbacks->undefined_symbol)
-			(info, h->root.root.string, input_bfd, input_section,
-			 r_vaddr - input_section->vma, TRUE);
-		      relocation = 0;
-		    }
+		    r = bfd_reloc_undefined;
 		}
 	      else
 		{
@@ -1905,37 +1932,14 @@ alpha_relocate_section (bfd *output_bfd,
 		    relocation += input_section->vma;
 		}
 
-	      r = _bfd_final_link_relocate (howto,
-					    input_bfd,
-					    input_section,
-					    contents,
-					    r_vaddr - input_section->vma,
-					    relocation,
-					    addend);
-	    }
-
-	  if (r != bfd_reloc_ok)
-	    {
-	      switch (r)
-		{
-		default:
-		case bfd_reloc_outofrange:
-		  abort ();
-		case bfd_reloc_overflow:
-		  {
-		    const char *name;
-
-		    if (r_extern)
-		      name = sym_hashes[r_symndx]->root.root.string;
-		    else
-		      name = bfd_section_name (symndx_to_section[r_symndx]);
-		    (*info->callbacks->reloc_overflow)
-		      (info, NULL, name, alpha_howto_table[r_type].name,
-		       (bfd_vma) 0, input_bfd, input_section,
-		       r_vaddr - input_section->vma);
-		  }
-		  break;
-		}
+	      if (r == bfd_reloc_ok)
+		r = _bfd_final_link_relocate (howto,
+					      input_bfd,
+					      input_section,
+					      contents,
+					      r_vaddr - input_section->vma,
+					      relocation,
+					      addend);
 	    }
 	}
 
@@ -1952,26 +1956,71 @@ alpha_relocate_section (bfd *output_bfd,
 
       if (gp_usedp && gp_undefined)
 	{
-	  (*info->callbacks->reloc_dangerous)
-	    (info, _("GP relative relocation used when GP not defined"),
-	     input_bfd, input_section, r_vaddr - input_section->vma);
+	  r = bfd_reloc_dangerous;
 	  /* Only give the error once per link.  */
 	  gp = 4;
 	  _bfd_set_gp_value (output_bfd, gp);
-	  gp_undefined = FALSE;
+	  gp_undefined = false;
+	}
+
+      if (r != bfd_reloc_ok)
+	{
+	  switch (r)
+	    {
+	    case bfd_reloc_overflow:
+	      {
+		const char *name;
+
+		if (r_extern)
+		  name = sym_hashes[r_symndx]->root.root.string;
+		else
+		  name = bfd_section_name (symndx_to_section[r_symndx]);
+		(*info->callbacks->reloc_overflow)
+		  (info, NULL, name, alpha_howto_table[r_type].name,
+		   (bfd_vma) 0, input_bfd, input_section,
+		   r_vaddr - input_section->vma);
+	      }
+	      break;
+	    case bfd_reloc_outofrange:
+	      (*info->callbacks->einfo)
+		/* xgettext:c-format */
+		(_("%X%P: %pB(%pA): relocation out of range\n"),
+		 input_bfd, input_section);
+	      break;
+	    case bfd_reloc_undefined:
+	      (*info->callbacks->undefined_symbol)
+		(info, sym_hashes[r_symndx]->root.root.string,
+		 input_bfd, input_section,
+		 r_vaddr - input_section->vma, true);
+	      break;
+	    case bfd_reloc_notsupported:
+	      (*info->callbacks->einfo)
+		/* xgettext:c-format */
+		(_("%X%P: %pB(%pA): relocation is not supported\n"),
+		 input_bfd, input_section);
+	      break;
+	    case bfd_reloc_dangerous:
+	      (*info->callbacks->reloc_dangerous)
+		(info, _("GP relative relocation used when GP not defined"),
+		 input_bfd, input_section, r_vaddr - input_section->vma);
+	      break;
+	    default:
+	      abort ();
+	    }
+	  ret = false;
 	}
     }
 
   if (tos != 0)
-    abort ();
+    ret = false;
 
-  return TRUE;
+  return ret;
 }
 
 /* Do final adjustments to the filehdr and the aouthdr.  This routine
    sets the dynamic bits in the file header.  */
 
-static bfd_boolean
+static bool
 alpha_adjust_headers (bfd *abfd,
 		      struct internal_filehdr *fhdr,
 		      struct internal_aouthdr *ahdr ATTRIBUTE_UNUSED)
@@ -1980,7 +2029,7 @@ alpha_adjust_headers (bfd *abfd,
     fhdr->f_flags |= F_ALPHA_CALL_SHARED;
   else if ((abfd->flags & DYNAMIC) != 0)
     fhdr->f_flags |= F_ALPHA_SHARABLE;
-  return TRUE;
+  return true;
 }
 
 /* Archive handling.  In OSF/1 (or Digital Unix) v3.2, Digital
@@ -2023,10 +2072,13 @@ alpha_ecoff_read_ar_hdr (bfd *abfd)
 
       /* This is a compressed file.  We must set the size correctly.
 	 The size is the eight bytes after the dummy file header.  */
-      if (bfd_seek (abfd, (file_ptr) FILHSZ, SEEK_CUR) != 0
-	  || bfd_bread (ab, (bfd_size_type) 8, abfd) != 8
-	  || bfd_seek (abfd, (file_ptr) (- (FILHSZ + 8)), SEEK_CUR) != 0)
-	return NULL;
+      if (bfd_seek (abfd, FILHSZ, SEEK_CUR) != 0
+	  || bfd_read (ab, 8, abfd) != 8
+	  || bfd_seek (abfd, -(FILHSZ + 8), SEEK_CUR) != 0)
+	{
+	  free (ret);
+	  return NULL;
+	}
 
       ret->parsed_size = H_GET_64 (abfd, ab);
     }
@@ -2038,7 +2090,8 @@ alpha_ecoff_read_ar_hdr (bfd *abfd)
    we uncompress the archive element if necessary.  */
 
 static bfd *
-alpha_ecoff_get_elt_at_filepos (bfd *archive, file_ptr filepos)
+alpha_ecoff_get_elt_at_filepos (bfd *archive, file_ptr filepos,
+				struct bfd_link_info *info)
 {
   bfd *nbfd = NULL;
   struct areltdata *tdata;
@@ -2047,9 +2100,10 @@ alpha_ecoff_get_elt_at_filepos (bfd *arc
   bfd_size_type size;
   bfd_byte *buf, *p;
   struct bfd_in_memory *bim;
+  ufile_ptr filesize;
 
   buf = NULL;
-  nbfd = _bfd_get_elt_at_filepos (archive, filepos);
+  nbfd = _bfd_get_elt_at_filepos (archive, filepos, info);
   if (nbfd == NULL)
     goto error_return;
 
@@ -2065,21 +2119,29 @@ alpha_ecoff_get_elt_at_filepos (bfd *arc
     return nbfd;
 
   /* We must uncompress this element.  We do this by copying it into a
-     memory buffer, and making bfd_bread and bfd_seek use that buffer.
+     memory buffer, and making bfd_read and bfd_seek use that buffer.
      This can use a lot of memory, but it's simpler than getting a
      temporary file, making that work with the file descriptor caching
      code, and making sure that it is deleted at all appropriate
      times.  It can be changed if it ever becomes important.  */
 
   /* The compressed file starts with a dummy ECOFF file header.  */
-  if (bfd_seek (nbfd, (file_ptr) FILHSZ, SEEK_SET) != 0)
+  if (bfd_seek (nbfd, FILHSZ, SEEK_SET) != 0)
     goto error_return;
 
   /* The next eight bytes are the real file size.  */
-  if (bfd_bread (ab, (bfd_size_type) 8, nbfd) != 8)
+  if (bfd_read (ab, 8, nbfd) != 8)
     goto error_return;
   size = H_GET_64 (nbfd, ab);
 
+  /* The decompression algorithm will at most expand by eight times.  */
+  filesize = bfd_get_file_size (archive);
+  if (filesize != 0 && size / 8 > filesize)
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      goto error_return;
+    }
+
   if (size != 0)
     {
       bfd_size_type left;
@@ -2095,7 +2157,7 @@ alpha_ecoff_get_elt_at_filepos (bfd *arc
       left = size;
 
       /* I don't know what the next eight bytes are for.  */
-      if (bfd_bread (ab, (bfd_size_type) 8, nbfd) != 8)
+      if (bfd_read (ab, 8, nbfd) != 8)
 	goto error_return;
 
       /* This is the uncompression algorithm.  It's a simple
@@ -2106,7 +2168,7 @@ alpha_ecoff_get_elt_at_filepos (bfd *arc
 	 next eight bytes in the output stream.  */
       memset (dict, 0, sizeof dict);
       h = 0;
-      while (bfd_bread (&b, (bfd_size_type) 1, nbfd) == 1)
+      while (bfd_read (&b, 1, nbfd) == 1)
 	{
 	  unsigned int i;
 
@@ -2118,7 +2180,7 @@ alpha_ecoff_get_elt_at_filepos (bfd *arc
 		n = dict[h];
 	      else
 		{
-		  if (! bfd_bread (&n, (bfd_size_type) 1, nbfd))
+		  if (bfd_read (&n, 1, nbfd) != 1)
 		    goto error_return;
 		  dict[h] = n;
 		}
@@ -2147,20 +2209,20 @@ alpha_ecoff_get_elt_at_filepos (bfd *arc
   bim->size = size;
   bim->buffer = buf;
 
-  nbfd->mtime_set = TRUE;
+  nbfd->mtime_set = true;
   nbfd->mtime = strtol (hdr->ar_date, (char **) NULL, 10);
 
   nbfd->flags |= BFD_IN_MEMORY;
   nbfd->iostream = bim;
   nbfd->iovec = &_bfd_memory_iovec;
   nbfd->origin = 0;
+  nbfd->size = 0;
   BFD_ASSERT (! nbfd->cacheable);
 
   return nbfd;
 
  error_return:
-  if (buf != NULL)
-    free (buf);
+  free (buf);
   if (nbfd != NULL)
     bfd_close (nbfd);
   return NULL;
@@ -2200,7 +2262,7 @@ alpha_ecoff_openr_next_archived_file (bf
 	}
     }
 
-  return alpha_ecoff_get_elt_at_filepos (archive, filestart);
+  return alpha_ecoff_get_elt_at_filepos (archive, filestart, NULL);
 }
 
 /* Open the archive file given an index into the armap.  */
@@ -2211,7 +2273,8 @@ alpha_ecoff_get_elt_at_index (bfd *abfd,
   carsym *entry;
 
   entry = bfd_ardata (abfd)->symdefs + sym_index;
-  return alpha_ecoff_get_elt_at_filepos (abfd, entry->file_offset);
+  return alpha_ecoff_get_elt_at_filepos (abfd, entry->file_offset,
+					 NULL);
 }
 
 static void
@@ -2288,8 +2351,8 @@ static const struct ecoff_backend_data a
     alpha_ecoff_swap_coff_reloc_out,
     alpha_ecoff_swap_filehdr_out, alpha_ecoff_swap_aouthdr_out,
     alpha_ecoff_swap_scnhdr_out,
-    FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, TRUE,
-    ECOFF_NO_LONG_SECTION_NAMES, 4, FALSE, 2, 32768,
+    FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, true,
+    ECOFF_NO_LONG_SECTION_NAMES, 4, false, 2, 32768,
     alpha_ecoff_swap_filehdr_in, alpha_ecoff_swap_aouthdr_in,
     alpha_ecoff_swap_scnhdr_in, NULL,
     alpha_ecoff_bad_format_hook, _bfd_ecoff_set_arch_mach_hook,
@@ -2308,7 +2371,7 @@ static const struct ecoff_backend_data a
   /* TRUE if the .rdata section is part of the text segment, as on the
      Alpha.  FALSE if .rdata is part of the data segment, as on the
      MIPS.  */
-  TRUE,
+  true,
   /* Bitsize of constructor entries.  */
   64,
   /* Reloc to use for constructor entries.  */
@@ -2412,11 +2475,13 @@ const bfd_target alpha_ecoff_le_vec =
    | HAS_LINENO | HAS_DEBUG
    | HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
 
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE
+   | SEC_DATA | SEC_SMALL_DATA),
   0,				/* leading underscore */
   ' ',				/* ar_pad_char */
   15,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-arm.c ./bfd/coff-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-arm.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-arm.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ARM COFF files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -124,9 +124,9 @@ coff_arm_reloc (bfd *abfd,
       if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
 	return bfd_reloc_outofrange;
 
-      switch (howto->size)
+      switch (bfd_get_reloc_size (howto))
 	{
-	case 0:
+	case 1:
 	  {
 	    char x = bfd_get_8 (abfd, addr);
 	    DOIT (x);
@@ -134,7 +134,7 @@ coff_arm_reloc (bfd *abfd,
 	  }
 	  break;
 
-	case 1:
+	case 2:
 	  {
 	    short x = bfd_get_16 (abfd, addr);
 	    DOIT (x);
@@ -142,7 +142,7 @@ coff_arm_reloc (bfd *abfd,
 	  }
 	  break;
 
-	case 2:
+	case 4:
 	  {
 	    long x = bfd_get_32 (abfd, addr);
 	    DOIT (x);
@@ -167,7 +167,7 @@ coff_arm_reloc (bfd *abfd,
 #endif
 
 #ifndef PCRELOFFSET
-#define PCRELOFFSET TRUE
+#define PCRELOFFSET true
 #endif
 
 /* These most certainly belong somewhere else. Just had to get rid of
@@ -221,66 +221,66 @@ static reloc_howto_type aoutarm_std_relo
 #ifdef ARM_WINCE
     HOWTO (ARM_26D,
 	   2,
-	   2,
+	   4,
 	   24,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_dont,
 	   aoutarm_fix_pcrel_26_done,
 	   "ARM_26D",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0x00ffffff,
 	   0x0,
 	   PCRELOFFSET),
     HOWTO (ARM_32,
 	   0,
-	   2,
+	   4,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_32",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
     HOWTO (ARM_RVA32,
 	   0,
-	   2,
+	   4,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_RVA32",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
     HOWTO (ARM_26,
 	   2,
-	   2,
+	   4,
 	   24,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   aoutarm_fix_pcrel_26 ,
 	   "ARM_26",
-	   FALSE,
+	   false,
 	   0x00ffffff,
 	   0x00ffffff,
 	   PCRELOFFSET),
     HOWTO (ARM_THUMB12,
 	   1,
-	   1,
+	   2,
 	   11,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_thumb_pcrel_12 ,
 	   "ARM_THUMB12",
-	   FALSE,
+	   false,
 	   0x000007ff,
 	   0x000007ff,
 	   PCRELOFFSET),
@@ -295,212 +295,212 @@ static reloc_howto_type aoutarm_std_relo
     EMPTY_HOWTO (-1),
     HOWTO (ARM_SECTION,
 	   0,
-	   1,
+	   2,
 	   16,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_SECTION",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0x0000ffff,
 	   0x0000ffff,
 	   PCRELOFFSET),
     HOWTO (ARM_SECREL,
 	   0,
-	   2,
+	   4,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_SECREL",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
 #else /* not ARM_WINCE */
     HOWTO (ARM_8,
 	   0,
-	   0,
+	   1,
 	   8,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_8",
-	   TRUE,
+	   true,
 	   0x000000ff,
 	   0x000000ff,
 	   PCRELOFFSET),
     HOWTO (ARM_16,
 	   0,
-	   1,
+	   2,
 	   16,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_16",
-	   TRUE,
+	   true,
 	   0x0000ffff,
 	   0x0000ffff,
 	   PCRELOFFSET),
     HOWTO (ARM_32,
 	   0,
-	   2,
+	   4,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_32",
-	   TRUE,
+	   true,
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
     HOWTO (ARM_26,
 	   2,
-	   2,
+	   4,
 	   24,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   aoutarm_fix_pcrel_26 ,
 	   "ARM_26",
-	   FALSE,
+	   false,
 	   0x00ffffff,
 	   0x00ffffff,
 	   PCRELOFFSET),
     HOWTO (ARM_DISP8,
 	   0,
-	   0,
+	   1,
 	   8,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_arm_reloc,
 	   "ARM_DISP8",
-	   TRUE,
+	   true,
 	   0x000000ff,
 	   0x000000ff,
-	   TRUE),
+	   true),
     HOWTO (ARM_DISP16,
 	   0,
-	   1,
+	   2,
 	   16,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_arm_reloc,
 	   "ARM_DISP16",
-	   TRUE,
+	   true,
 	   0x0000ffff,
 	   0x0000ffff,
-	   TRUE),
+	   true),
     HOWTO (ARM_DISP32,
 	   0,
-	   2,
+	   4,
 	   32,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_arm_reloc,
 	   "ARM_DISP32",
-	   TRUE,
+	   true,
 	   0xffffffff,
 	   0xffffffff,
-	   TRUE),
+	   true),
     HOWTO (ARM_26D,
 	   2,
-	   2,
+	   4,
 	   24,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_dont,
 	   aoutarm_fix_pcrel_26_done,
 	   "ARM_26D",
-	   TRUE,
+	   true,
 	   0x00ffffff,
 	   0x0,
-	   FALSE),
+	   false),
     /* 8 is unused */
     EMPTY_HOWTO (-1),
     HOWTO (ARM_NEG16,
 	   0,
-	   -1,
+	   -2,
 	   16,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_NEG16",
-	   TRUE,
+	   true,
 	   0x0000ffff,
 	   0x0000ffff,
-	   FALSE),
+	   false),
     HOWTO (ARM_NEG32,
 	   0,
-	   -2,
+	   -4,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_NEG32",
-	   TRUE,
+	   true,
 	   0xffffffff,
 	   0xffffffff,
-	   FALSE),
+	   false),
     HOWTO (ARM_RVA32,
 	   0,
-	   2,
+	   4,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_RVA32",
-	   TRUE,
+	   true,
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
     HOWTO (ARM_THUMB9,
 	   1,
-	   1,
+	   2,
 	   8,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_thumb_pcrel_9 ,
 	   "ARM_THUMB9",
-	   FALSE,
+	   false,
 	   0x000000ff,
 	   0x000000ff,
 	   PCRELOFFSET),
     HOWTO (ARM_THUMB12,
 	   1,
-	   1,
+	   2,
 	   11,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_thumb_pcrel_12 ,
 	   "ARM_THUMB12",
-	   FALSE,
+	   false,
 	   0x000007ff,
 	   0x000007ff,
 	   PCRELOFFSET),
     HOWTO (ARM_THUMB23,
 	   1,
-	   2,
+	   4,
 	   22,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_thumb_pcrel_23 ,
 	   "ARM_THUMB23",
-	   FALSE,
+	   false,
 	   0x07ff07ff,
 	   0x07ff07ff,
 	   PCRELOFFSET)
@@ -513,7 +513,7 @@ static reloc_howto_type aoutarm_std_relo
 /* Return TRUE if this relocation should
    appear in the output .reloc section.  */
 
-static bfd_boolean
+static bool
 in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
 	    reloc_howto_type * howto)
 {
@@ -924,7 +924,7 @@ static struct bfd_link_hash_table *
 coff_arm_link_hash_table_create (bfd * abfd)
 {
   struct coff_arm_link_hash_table * ret;
-  bfd_size_type amt = sizeof (struct coff_arm_link_hash_table);
+  size_t amt = sizeof (struct coff_arm_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -942,7 +942,7 @@ coff_arm_link_hash_table_create (bfd * a
   return & ret->root.root;
 }
 
-static bfd_boolean
+static bool
 arm_emit_base_file_entry (struct bfd_link_info *info,
 			  bfd *output_bfd,
 			  asection *input_section,
@@ -953,13 +953,13 @@ arm_emit_base_file_entry (struct bfd_lin
 		  + input_section->output_offset
 		  + input_section->output_section->vma);
 
-  if (coff_data (output_bfd)->pe)
+  if (obj_pe (output_bfd))
      addr -= pe_data (output_bfd)->pe_opthdr.ImageBase;
   if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1)
-    return TRUE;
+    return true;
 
   bfd_set_error (bfd_error_system_call);
-  return FALSE;
+  return false;
 }
 
 #ifndef ARM_WINCE
@@ -1026,7 +1026,7 @@ find_thumb_glue (struct bfd_link_info *i
 {
   char *tmp_name;
   struct coff_link_hash_entry *myh;
-  bfd_size_type amt = strlen (name) + strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1;
+  size_t amt = strlen (name) + strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1;
 
   tmp_name = bfd_malloc (amt);
 
@@ -1035,7 +1035,7 @@ find_thumb_glue (struct bfd_link_info *i
   sprintf (tmp_name, THUMB2ARM_GLUE_ENTRY_NAME, name);
 
   myh = coff_link_hash_lookup
-    (coff_hash_table (info), tmp_name, FALSE, FALSE, TRUE);
+    (coff_hash_table (info), tmp_name, false, false, true);
 
   if (myh == NULL)
     /* xgettext:c-format */
@@ -1055,7 +1055,7 @@ find_arm_glue (struct bfd_link_info *inf
 {
   char *tmp_name;
   struct coff_link_hash_entry * myh;
-  bfd_size_type amt = strlen (name) + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1;
+  size_t amt = strlen (name) + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1;
 
   tmp_name = bfd_malloc (amt);
 
@@ -1064,7 +1064,7 @@ find_arm_glue (struct bfd_link_info *inf
   sprintf (tmp_name, ARM2THUMB_GLUE_ENTRY_NAME, name);
 
   myh = coff_link_hash_lookup
-    (coff_hash_table (info), tmp_name, FALSE, FALSE, TRUE);
+    (coff_hash_table (info), tmp_name, false, false, true);
 
   if (myh == NULL)
     /* xgettext:c-format */
@@ -1154,7 +1154,7 @@ static const insn32 t2a6_bx_insn    = 0x
 
 /* The standard COFF backend linker does not cope with the special
    Thumb BRANCH23 relocation.  The alternative would be to split the
-   BRANCH23 into seperate HI23 and LO23 relocations. However, it is a
+   BRANCH23 into separate HI23 and LO23 relocations. However, it is a
    bit simpler simply providing our own relocation driver.  */
 
 /* The reloc processing routine for the ARM/Thumb COFF linker.  NOTE:
@@ -1165,7 +1165,7 @@ static const insn32 t2a6_bx_insn    = 0x
    ARM/Thumb builds.  It is only the code marked THUMBEXTENSION that
    is different from the original.  */
 
-static bfd_boolean
+static bool
 coff_arm_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -1222,7 +1222,7 @@ coff_arm_relocate_section (bfd *output_b
       howto = coff_rtype_to_howto (input_bfd, input_section, rel, h,
 				       sym, &addend);
       if (howto == NULL)
-	return FALSE;
+	return false;
 
       /* The relocation_section function will skip pcrel_offset relocs
 	 when doing a relocatable link.  However, we want to convert
@@ -1241,17 +1241,17 @@ coff_arm_relocate_section (bfd *output_b
 	  static reloc_howto_type fake_arm26_reloc =
 	    HOWTO (ARM_26,
 	       2,
-	       2,
+	       4,
 	       24,
-	       TRUE,
+	       true,
 	       0,
 	       complain_overflow_signed,
 	       aoutarm_fix_pcrel_26 ,
 	       "ARM_26",
-	       TRUE,
+	       true,
 	       0x00ffffff,
 	       0x00ffffff,
-	       FALSE);
+	       false);
 
 	  addend -= rel->r_vaddr - input_section->vma;
 #ifdef ARM_WINCE
@@ -1347,7 +1347,7 @@ coff_arm_relocate_section (bfd *output_b
 
 		      myh = find_arm_glue (info, name, input_bfd);
 		      if (myh == NULL)
-			return FALSE;
+			return false;
 
 		      globals = coff_arm_hash_table (info);
 
@@ -1389,7 +1389,7 @@ coff_arm_relocate_section (bfd *output_b
 			  if (info->base_file
 			      && !arm_emit_base_file_entry (info, output_bfd,
 							    s, my_offset + 8))
-			    return FALSE;
+			    return false;
 			}
 
 		      BFD_ASSERT (my_offset <= globals->arm_glue_size);
@@ -1435,7 +1435,7 @@ coff_arm_relocate_section (bfd *output_b
 
 		      myh = find_thumb_glue (info, name, input_bfd);
 		      if (myh == NULL)
-			return FALSE;
+			return false;
 
 		      globals = coff_arm_hash_table (info);
 
@@ -1496,7 +1496,7 @@ coff_arm_relocate_section (bfd *output_b
 				  && !arm_emit_base_file_entry (info,
 								output_bfd, s,
 								my_offset + 16))
-				return FALSE;
+				return false;
 			    }
 			  else
 			    {
@@ -1574,7 +1574,7 @@ coff_arm_relocate_section (bfd *output_b
 	  else if (! bfd_link_relocatable (info))
 	    (*info->callbacks->undefined_symbol)
 	      (info, h->root.root.string, input_bfd, input_section,
-	       rel->r_vaddr - input_section->vma, TRUE);
+	       rel->r_vaddr - input_section->vma, true);
 	}
 
       /* Emit a reloc if the backend thinks it needs it.  */
@@ -1583,7 +1583,7 @@ coff_arm_relocate_section (bfd *output_b
 	  && pe_data(output_bfd)->in_reloc_p(output_bfd, howto)
 	  && !arm_emit_base_file_entry (info, output_bfd, input_section,
 					rel->r_vaddr))
-	return FALSE;
+	return false;
 
       if (done)
 	rstat = bfd_reloc_ok;
@@ -1608,7 +1608,7 @@ coff_arm_relocate_section (bfd *output_b
 	    {
 	      bfd_vma relocation = val + addend;
 	      int size = bfd_get_reloc_size (howto);
-	      bfd_boolean overflow = FALSE;
+	      bool overflow = false;
 	      bfd_byte *location = contents + address;
 	      bfd_vma x = bfd_get_32 (input_bfd, location);
 	      bfd_vma src_mask = 0x007FFFFE;
@@ -1674,7 +1674,7 @@ coff_arm_relocate_section (bfd *output_b
 	      /* Assumes two's complement.  */
 	      if (   signed_check > reloc_signed_max
 		  || signed_check < reloc_signed_min)
-		overflow = TRUE;
+		overflow = true;
 
 	      /* Put the relocation into the correct bits.
 		 For a BLX instruction, make sure that the relocation is rounded up
@@ -1718,13 +1718,13 @@ coff_arm_relocate_section (bfd *output_b
 	{
 	  /* Determine if we need to set the bottom bit of a relocated address
 	     because the address is the address of a Thumb code symbol.  */
-	  int patchit = FALSE;
+	  int patchit = false;
 
 	  if (h != NULL
 	      && (   h->symbol_class == C_THUMBSTATFUNC
 		  || h->symbol_class == C_THUMBEXTFUNC))
 	    {
-	      patchit = TRUE;
+	      patchit = true;
 	    }
 	  else if (sym != NULL
 		   && sym->n_scnum > N_UNDEF)
@@ -1732,7 +1732,7 @@ coff_arm_relocate_section (bfd *output_b
 	      /* No hash entry - use the symbol instead.  */
 	      if (   sym->n_sclass == C_THUMBSTATFUNC
 		  || sym->n_sclass == C_THUMBEXTFUNC)
-		patchit = TRUE;
+		patchit = true;
 	    }
 
 	  if (patchit)
@@ -1755,7 +1755,7 @@ coff_arm_relocate_section (bfd *output_b
 	    /* xgettext:c-format */
 	    (_("%pB: bad reloc address %#" PRIx64 " in section `%pA'"),
 	     input_bfd, (uint64_t) rel->r_vaddr, input_section);
-	  return FALSE;
+	  return false;
 	case bfd_reloc_overflow:
 	  {
 	    const char *name;
@@ -1769,7 +1769,7 @@ coff_arm_relocate_section (bfd *output_b
 	      {
 		name = _bfd_coff_internal_syment_name (input_bfd, sym, buf);
 		if (name == NULL)
-		  return FALSE;
+		  return false;
 	      }
 
 	    (*info->callbacks->reloc_overflow)
@@ -1780,12 +1780,12 @@ coff_arm_relocate_section (bfd *output_b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 #ifndef COFF_IMAGE_WITH_PE
 
-bfd_boolean
+bool
 bfd_arm_allocate_interworking_sections (struct bfd_link_info * info)
 {
   asection *			    s;
@@ -1826,7 +1826,7 @@ bfd_arm_allocate_interworking_sections (
       s->contents = foo;
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -1840,7 +1840,7 @@ record_arm_to_thumb_glue (struct bfd_lin
   struct bfd_link_hash_entry *	    bh;
   struct coff_arm_link_hash_table * globals;
   bfd_vma val;
-  bfd_size_type amt;
+  size_t amt;
 
   globals = coff_arm_hash_table (info);
 
@@ -1860,7 +1860,7 @@ record_arm_to_thumb_glue (struct bfd_lin
   sprintf (tmp_name, ARM2THUMB_GLUE_ENTRY_NAME, name);
 
   myh = coff_link_hash_lookup
-    (coff_hash_table (info), tmp_name, FALSE, FALSE, TRUE);
+    (coff_hash_table (info), tmp_name, false, false, true);
 
   if (myh != NULL)
     {
@@ -1875,7 +1875,7 @@ record_arm_to_thumb_glue (struct bfd_lin
   bh = NULL;
   val = globals->arm_glue_size + 1;
   bfd_coff_link_add_one_symbol (info, globals->bfd_of_glue_owner, tmp_name,
-				BSF_GLOBAL, s, val, NULL, TRUE, FALSE, &bh);
+				BSF_GLOBAL, s, val, NULL, true, false, &bh);
 
   free (tmp_name);
 
@@ -1896,7 +1896,7 @@ record_thumb_to_arm_glue (struct bfd_lin
   struct bfd_link_hash_entry *	     bh;
   struct coff_arm_link_hash_table *  globals;
   bfd_vma val;
-  bfd_size_type amt;
+  size_t amt;
 
   globals = coff_arm_hash_table (info);
 
@@ -1916,7 +1916,7 @@ record_thumb_to_arm_glue (struct bfd_lin
   sprintf (tmp_name, THUMB2ARM_GLUE_ENTRY_NAME, name);
 
   myh = coff_link_hash_lookup
-    (coff_hash_table (info), tmp_name, FALSE, FALSE, TRUE);
+    (coff_hash_table (info), tmp_name, false, false, true);
 
   if (myh != NULL)
     {
@@ -1928,7 +1928,7 @@ record_thumb_to_arm_glue (struct bfd_lin
   bh = NULL;
   val = globals->thumb_glue_size + 1;
   bfd_coff_link_add_one_symbol (info, globals->bfd_of_glue_owner, tmp_name,
-				BSF_GLOBAL, s, val, NULL, TRUE, FALSE, &bh);
+				BSF_GLOBAL, s, val, NULL, true, false, &bh);
 
   /* If we mark it 'thumb', the disassembler will do a better job.  */
   myh = (struct coff_link_hash_entry *) bh;
@@ -1951,7 +1951,7 @@ record_thumb_to_arm_glue (struct bfd_lin
   bh = NULL;
   val = globals->thumb_glue_size + (globals->support_old_code ? 8 : 4);
   bfd_coff_link_add_one_symbol (info, globals->bfd_of_glue_owner, tmp_name,
-				BSF_LOCAL, s, val, NULL, TRUE, FALSE, &bh);
+				BSF_LOCAL, s, val, NULL, true, false, &bh);
 
   free (tmp_name);
 
@@ -1965,7 +1965,7 @@ record_thumb_to_arm_glue (struct bfd_lin
    This function is called from the linker scripts in ld/emultempl/
    {armcoff/pe}.em  */
 
-bfd_boolean
+bool
 bfd_arm_get_bfd_for_interworking (bfd *			 abfd,
 				  struct bfd_link_info * info)
 {
@@ -1976,14 +1976,14 @@ bfd_arm_get_bfd_for_interworking (bfd *
   /* If we are only performing a partial link do not bother
      getting a bfd to hold the glue.  */
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   globals = coff_arm_hash_table (info);
 
   BFD_ASSERT (globals != NULL);
 
   if (globals->bfd_of_glue_owner != NULL)
-    return TRUE;
+    return true;
 
   sec = bfd_get_section_by_name (abfd, ARM2THUMB_GLUE_SECTION_NAME);
 
@@ -1995,7 +1995,7 @@ bfd_arm_get_bfd_for_interworking (bfd *
 					 flags);
       if (sec == NULL
 	  || !bfd_set_section_alignment (sec, 2))
-	return FALSE;
+	return false;
     }
 
   sec = bfd_get_section_by_name (abfd, THUMB2ARM_GLUE_SECTION_NAME);
@@ -2009,16 +2009,16 @@ bfd_arm_get_bfd_for_interworking (bfd *
 
       if (sec == NULL
 	  || !bfd_set_section_alignment (sec, 2))
-	return FALSE;
+	return false;
     }
 
   /* Save the bfd for later use.  */
   globals->bfd_of_glue_owner = abfd;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 bfd_arm_process_before_allocation (bfd *		   abfd,
 				   struct bfd_link_info *  info,
 				   int			   support_old_code)
@@ -2029,7 +2029,7 @@ bfd_arm_process_before_allocation (bfd *
   /* If we are only performing a partial link do not bother
      to construct any glue.  */
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* Here we have a bfd that is to be included on the link.  We have a hook
      to do reloc rummaging, before section sizes are nailed down.  */
@@ -2046,7 +2046,7 @@ bfd_arm_process_before_allocation (bfd *
   sec = abfd->sections;
 
   if (sec == NULL)
-    return TRUE;
+    return true;
 
   for (; sec != NULL; sec = sec->next)
     {
@@ -2130,7 +2130,7 @@ bfd_arm_process_before_allocation (bfd *
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 #endif /* ! defined (COFF_IMAGE_WITH_PE) */
@@ -2151,13 +2151,13 @@ bfd_arm_process_before_allocation (bfd *
 /* When doing a relocatable link, we want to convert ARM_26 relocs
    into ARM_26D relocs.  */
 
-static bfd_boolean
+static bool
 coff_arm_adjust_symndx (bfd *obfd ATTRIBUTE_UNUSED,
 			struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			bfd *ibfd,
 			asection *sec,
 			struct internal_reloc *irel,
-			bfd_boolean *adjustedp)
+			bool *adjustedp)
 {
   if (irel->r_type == ARM_26)
     {
@@ -2170,8 +2170,8 @@ coff_arm_adjust_symndx (bfd *obfd ATTRIB
 	  && h->root.u.def.section->output_section == sec->output_section)
 	irel->r_type = ARM_26D;
     }
-  *adjustedp = FALSE;
-  return TRUE;
+  *adjustedp = false;
+  return true;
 }
 
 /* Called when merging the private data areas of two BFDs.
@@ -2179,26 +2179,26 @@ coff_arm_adjust_symndx (bfd *obfd ATTRIB
    attempting to merge binaries compiled for different ARM
    targets, eg different CPUs or different APCS's.     */
 
-static bfd_boolean
+static bool
 coff_arm_merge_private_bfd_data (bfd * ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   BFD_ASSERT (ibfd != NULL && obfd != NULL);
 
   if (ibfd == obfd)
-    return TRUE;
+    return true;
 
   /* If the two formats are different we cannot merge anything.
      This is not an error, since it is permissable to change the
      input and output formats.  */
   if (   ibfd->xvec->flavour != bfd_target_coff_flavour
       || obfd->xvec->flavour != bfd_target_coff_flavour)
-    return TRUE;
+    return true;
 
   /* Determine what should happen if the input ARM architecture
      does not match the output ARM architecture.  */
   if (! bfd_arm_merge_machines (ibfd, obfd))
-    return FALSE;
+    return false;
 
   /* Verify that the APCS is the same for the two BFDs.  */
   if (APCS_SET (ibfd))
@@ -2210,47 +2210,52 @@ coff_arm_merge_private_bfd_data (bfd * i
 	    {
 	      _bfd_error_handler
 		/* xgettext: c-format */
-		(_("error: %pB is compiled for APCS-%d, whereas %pB is compiled for APCS-%d"),
+		(_("error: %pB is compiled for APCS-%d, "
+		   "whereas %pB is compiled for APCS-%d"),
 		 ibfd, APCS_26_FLAG (ibfd) ? 26 : 32,
 		 obfd, APCS_26_FLAG (obfd) ? 26 : 32
 		 );
 
 	      bfd_set_error (bfd_error_wrong_format);
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (APCS_FLOAT_FLAG (obfd) != APCS_FLOAT_FLAG (ibfd))
 	    {
 	      if (APCS_FLOAT_FLAG (ibfd))
 		/* xgettext: c-format */
-		_bfd_error_handler (_("\
-error: %pB passes floats in float registers, whereas %pB passes them in integer registers"),
-				    ibfd, obfd);
+		_bfd_error_handler
+		  (_("error: %pB passes floats in float registers, "
+		     "whereas %pB passes them in integer registers"),
+		   ibfd, obfd);
 	      else
 		/* xgettext: c-format */
-		_bfd_error_handler (_("\
-error: %pB passes floats in integer registers, whereas %pB passes them in float registers"),
-				    ibfd, obfd);
+		_bfd_error_handler
+		  (_("error: %pB passes floats in integer registers, "
+		     "whereas %pB passes them in float registers"),
+		   ibfd, obfd);
 
 	      bfd_set_error (bfd_error_wrong_format);
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (PIC_FLAG (obfd) != PIC_FLAG (ibfd))
 	    {
 	      if (PIC_FLAG (ibfd))
 		/* xgettext: c-format */
-		_bfd_error_handler (_("\
-error: %pB is compiled as position independent code, whereas target %pB is absolute position"),
-				    ibfd, obfd);
+		_bfd_error_handler
+		  (_("error: %pB is compiled as position independent code, "
+		     "whereas target %pB is absolute position"),
+		   ibfd, obfd);
 	      else
 		/* xgettext: c-format */
-		_bfd_error_handler (_("\
-error: %pB is compiled as absolute position code, whereas target %pB is position independent"),
-				    ibfd, obfd);
+		_bfd_error_handler
+		  (_("error: %pB is compiled as absolute position code, "
+		     "whereas target %pB is position independent"),
+		   ibfd, obfd);
 
 	      bfd_set_error (bfd_error_wrong_format);
-	      return FALSE;
+	      return false;
 	    }
 	}
       else
@@ -2272,14 +2277,15 @@ error: %pB is compiled as absolute posit
 	    {
 	      if (INTERWORK_FLAG (ibfd))
 		/* xgettext: c-format */
-		_bfd_error_handler (_("\
-warning: %pB supports interworking, whereas %pB does not"),
+		_bfd_error_handler (_("warning: %pB supports interworking, "
+				      "whereas %pB does not"),
 				    ibfd, obfd);
 	      else
 		/* xgettext: c-format */
-		_bfd_error_handler (_("\
-warning: %pB does not support interworking, whereas %pB does"),
-				    ibfd, obfd);
+		_bfd_error_handler
+		  (_("warning: %pB does not support interworking, "
+		     "whereas %pB does"),
+		   ibfd, obfd);
 	    }
 	}
       else
@@ -2288,12 +2294,12 @@ warning: %pB does not support interworki
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Display the flags field.  */
 
-static bfd_boolean
+static bool
 coff_arm_print_private_bfd_data (bfd * abfd, void * ptr)
 {
   FILE * file = (FILE *) ptr;
@@ -2327,7 +2333,7 @@ coff_arm_print_private_bfd_data (bfd * a
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 /* Copies the given flags into the coff_tdata.flags field.
@@ -2337,7 +2343,7 @@ coff_arm_print_private_bfd_data (bfd * a
    Note: Although this function is static, it is explicitly
    called from both coffcode.h and peicode.h.  */
 
-static bfd_boolean
+static bool
 _bfd_coff_arm_set_private_flags (bfd * abfd, flagword flags)
 {
   flagword flag;
@@ -2353,7 +2359,7 @@ _bfd_coff_arm_set_private_flags (bfd * a
 	  || (APCS_FLOAT_FLAG (abfd) != (flags & F_APCS_FLOAT))
 	  || (PIC_FLAG	      (abfd) != (flags & F_PIC))
 	  ))
-    return FALSE;
+    return false;
 
   flag |= (flags & (F_APCS_FLOAT | F_PIC));
 
@@ -2378,24 +2384,24 @@ _bfd_coff_arm_set_private_flags (bfd * a
 
   SET_INTERWORK_FLAG (abfd, flag);
 
-  return TRUE;
+  return true;
 }
 
 /* Copy the important parts of the target specific data
    from one instance of a BFD to another.  */
 
-static bfd_boolean
+static bool
 coff_arm_copy_private_bfd_data (bfd * src, bfd * dest)
 {
   BFD_ASSERT (src != NULL && dest != NULL);
 
   if (src == dest)
-    return TRUE;
+    return true;
 
   /* If the destination is not in the same format as the source, do not do
      the copy.  */
   if (src->xvec != dest->xvec)
-    return TRUE;
+    return true;
 
   /* Copy the flags field.  */
   if (APCS_SET (src))
@@ -2404,13 +2410,13 @@ coff_arm_copy_private_bfd_data (bfd * sr
 	{
 	  /* If the src and dest have different APCS flag bits set, fail.  */
 	  if (APCS_26_FLAG (dest) != APCS_26_FLAG (src))
-	    return FALSE;
+	    return false;
 
 	  if (APCS_FLOAT_FLAG (dest) != APCS_FLOAT_FLAG (src))
-	    return FALSE;
+	    return false;
 
 	  if (PIC_FLAG (dest) != PIC_FLAG (src))
-	    return FALSE;
+	    return false;
 	}
       else
 	SET_APCS_FLAGS (dest, APCS_26_FLAG (src) | APCS_FLOAT_FLAG (src)
@@ -2428,9 +2434,11 @@ coff_arm_copy_private_bfd_data (bfd * sr
 	      if (INTERWORK_FLAG (dest))
 		{
 		  /* xgettext:c-format */
-		  _bfd_error_handler (_("\
-warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"),
-				      dest, src);
+		  _bfd_error_handler
+		    (_("warning: clearing the interworking flag of %pB "
+		       "because non-interworking code in %pB has been "
+		       "linked with it"),
+		     dest, src);
 		}
 
 	      SET_INTERWORK_FLAG (dest, 0);
@@ -2442,7 +2450,7 @@ warning: clearing the interworking flag
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Note:  the definitions here of LOCAL_LABEL_PREFIX and USER_LABEL_PREIFX
@@ -2460,7 +2468,7 @@ warning: clearing the interworking flag
    b) Allow other prefixes than ".", e.g. an empty prefix would cause all
       labels of the form Lxxx to be stripped.  */
 
-static bfd_boolean
+static bool
 coff_arm_is_local_label_name (bfd *	   abfd ATTRIBUTE_UNUSED,
 			      const char * name)
 {
@@ -2470,7 +2478,7 @@ coff_arm_is_local_label_name (bfd *	   a
       size_t len = strlen (USER_LABEL_PREFIX);
 
       if (strncmp (name, USER_LABEL_PREFIX, len) == 0)
-	return FALSE;
+	return false;
     }
 #endif
 
@@ -2483,7 +2491,7 @@ coff_arm_is_local_label_name (bfd *	   a
       size_t len = strlen (LOCAL_LABEL_PREFIX);
 
       if (strncmp (name, LOCAL_LABEL_PREFIX, len) != 0)
-	return FALSE;
+	return false;
 
       /* Perform the checks below for the rest of the name.  */
       name += len;
@@ -2499,14 +2507,14 @@ coff_arm_is_local_label_name (bfd *	   a
    This does depend on bfd_make_section attaching a new section to the
    end of the section list for the bfd.  */
 
-static bfd_boolean
+static bool
 coff_arm_link_output_has_begun (bfd * sub, struct coff_final_link_info * info)
 {
   return (sub->output_has_begun
 	  || sub == coff_arm_hash_table (info->info)->bfd_of_glue_owner);
 }
 
-static bfd_boolean
+static bool
 coff_arm_final_link_postscript (bfd * abfd ATTRIBUTE_UNUSED,
 				struct coff_final_link_info * pfinfo)
 {
@@ -2519,9 +2527,9 @@ coff_arm_final_link_postscript (bfd * ab
   if (globals->bfd_of_glue_owner != NULL)
     {
       if (! _bfd_coff_link_input_bfd (pfinfo, globals->bfd_of_glue_owner))
-	return FALSE;
+	return false;
 
-      globals->bfd_of_glue_owner->output_has_begun = TRUE;
+      globals->bfd_of_glue_owner->output_has_begun = true;
     }
 
   return bfd_arm_update_notes (abfd, ARM_NOTE_SECTION);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-arm.h ./bfd/coff-arm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-arm.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-arm.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ARM COFF files.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -19,11 +19,11 @@
    MA 02110-1301, USA.  */
 
 /* ARM Interworking support.  Called from linker.  */
-extern bfd_boolean bfd_arm_allocate_interworking_sections
+extern bool bfd_arm_allocate_interworking_sections
   (struct bfd_link_info *);
 
-extern bfd_boolean bfd_arm_process_before_allocation
+extern bool bfd_arm_process_before_allocation
   (bfd *, struct bfd_link_info *, int);
 
-extern bfd_boolean bfd_arm_get_bfd_for_interworking
+extern bool bfd_arm_get_bfd_for_interworking
   (bfd *, struct bfd_link_info *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-bfd.c ./bfd/coff-bfd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-bfd.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-bfd.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD COFF interfaces used outside of BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -27,7 +27,7 @@
 
 /* Return the COFF syment for a symbol.  */
 
-bfd_boolean
+bool
 bfd_coff_get_syment (bfd *abfd,
 		     asymbol *symbol,
 		     struct internal_syment *psyment)
@@ -39,23 +39,27 @@ bfd_coff_get_syment (bfd *abfd,
       || ! csym->native->is_sym)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   *psyment = csym->native->u.syment;
 
   if (csym->native->fix_value)
-    psyment->n_value = psyment->n_value -
-      (bfd_hostptr_t) obj_raw_syments (abfd);
+    {
+      psyment->n_value =
+	((psyment->n_value - (uintptr_t) obj_raw_syments (abfd))
+	 / sizeof (combined_entry_type));
+      csym->native->fix_value = 0;
+    }
 
   /* FIXME: We should handle fix_line here.  */
 
-  return TRUE;
+  return true;
 }
 
 /* Return the COFF auxent for a symbol.  */
 
-bfd_boolean
+bool
 bfd_coff_get_auxent (bfd *abfd,
 		     asymbol *symbol,
 		     int indx,
@@ -72,7 +76,7 @@ bfd_coff_get_auxent (bfd *abfd,
       || indx >= csym->native->u.syment.n_numaux)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   ent = csym->native + indx + 1;
@@ -81,19 +85,28 @@ bfd_coff_get_auxent (bfd *abfd,
   *pauxent = ent->u.auxent;
 
   if (ent->fix_tag)
-    pauxent->x_sym.x_tagndx.l =
-      ((combined_entry_type *) pauxent->x_sym.x_tagndx.p
-       - obj_raw_syments (abfd));
+    {
+      pauxent->x_sym.x_tagndx.u32 =
+	((combined_entry_type *) pauxent->x_sym.x_tagndx.p
+	 - obj_raw_syments (abfd));
+      ent->fix_tag = 0;
+    }
 
   if (ent->fix_end)
-    pauxent->x_sym.x_fcnary.x_fcn.x_endndx.l =
-      ((combined_entry_type *) pauxent->x_sym.x_fcnary.x_fcn.x_endndx.p
-       - obj_raw_syments (abfd));
+    {
+      pauxent->x_sym.x_fcnary.x_fcn.x_endndx.u32 =
+	((combined_entry_type *) pauxent->x_sym.x_fcnary.x_fcn.x_endndx.p
+	 - obj_raw_syments (abfd));
+      ent->fix_end = 0;
+    }
 
   if (ent->fix_scnlen)
-    pauxent->x_csect.x_scnlen.l =
-      ((combined_entry_type *) pauxent->x_csect.x_scnlen.p
-       - obj_raw_syments (abfd));
+    {
+      pauxent->x_csect.x_scnlen.u64 =
+	((combined_entry_type *) pauxent->x_csect.x_scnlen.p
+	 - obj_raw_syments (abfd));
+      ent->fix_scnlen = 0;
+    }
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-bfd.h ./bfd/coff-bfd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-bfd.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-bfd.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD COFF interfaces used outside of BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -43,14 +43,10 @@ struct coff_section_tdata
 {
   /* The relocs, swapped into COFF internal form.  This may be NULL.  */
   struct internal_reloc *relocs;
-  /* If this is TRUE, the relocs entry may not be freed.  */
-  bfd_boolean keep_relocs;
   /* The section contents.  This may be NULL.  */
   bfd_byte *contents;
-  /* If this is TRUE, the contents entry may not be freed.  */
-  bfd_boolean keep_contents;
   /* Information cached by coff_find_nearest_line.  */
-  bfd_boolean saved_bias;
+  bool saved_bias;
   bfd_signed_vma bias;
   bfd_vma offset;
   unsigned int i;
@@ -81,11 +77,11 @@ struct coff_section_tdata
 struct internal_syment;
 union internal_auxent;
 
-extern bfd_boolean bfd_coff_get_syment
+extern bool bfd_coff_get_syment
   (bfd *, struct bfd_symbol *, struct internal_syment *);
 
-extern bfd_boolean bfd_coff_get_auxent
+extern bool bfd_coff_get_auxent
   (bfd *, struct bfd_symbol *, int, union internal_auxent *);
 
-extern bfd_boolean bfd_coff_set_symbol_class
+extern bool bfd_coff_set_symbol_class
   (bfd *, struct bfd_symbol *, unsigned int);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coffcode.h ./bfd/coffcode.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coffcode.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coffcode.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for the generic parts of most COFF variants, for BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -134,9 +134,10 @@ SUBSUBSECTION
 	in output BFDs at runtime; if it is false, as it will be by default
 	when generating an executable image, long section names are truncated;
 	if true, the long section names extension is employed.  The hook
-	points to a function that allows the value of the flag to be altered
-	at runtime, on formats that support long section names at all; on
-	other formats it points to a stub that returns an error indication.
+	points to a function that allows the value of a copy of the flag
+	in coff object tdata to be altered at runtime, on formats that
+	support long section names at all; on other formats it points
+	to a stub that returns an error indication.
 
 	With input BFDs, the flag is set according to whether any long section
 	names are detected while reading the section headers.  For a completely
@@ -289,31 +290,33 @@ DESCRIPTION
 	<<combined_entry_type>>:
 
 CODE_FRAGMENT
-.
 .typedef struct coff_ptr_struct
 .{
 .  {* Remembers the offset from the first symbol in the file for
-.     this symbol. Generated by coff_renumber_symbols.  *}
+.     this symbol.  Generated by coff_renumber_symbols.  *}
 .  unsigned int offset;
 .
-.  {* Should the value of this symbol be renumbered.  Used for
-.     XCOFF C_BSTAT symbols.  Set by coff_slurp_symbol_table.  *}
-.  unsigned int fix_value : 1;
+.  {* Selects between the elements of the union below.  *}
+.  unsigned int is_sym : 1;
 .
-.  {* Should the tag field of this symbol be renumbered.
-.     Created by coff_pointerize_aux.  *}
+.  {* Selects between the elements of the x_sym.x_tagndx union.  If set,
+.     p is valid and the field will be renumbered.  *}
 .  unsigned int fix_tag : 1;
 .
-.  {* Should the endidx field of this symbol be renumbered.
-.     Created by coff_pointerize_aux.  *}
+.  {* Selects between the elements of the x_sym.x_fcnary.x_fcn.x_endndx
+.     union.  If set, p is valid and the field will be renumbered.  *}
 .  unsigned int fix_end : 1;
 .
-.  {* Should the x_csect.x_scnlen field be renumbered.
-.     Created by coff_pointerize_aux.  *}
+.  {* Selects between the elements of the x_csect.x_scnlen union.  If set,
+.     p is valid and the field will be renumbered.  *}
 .  unsigned int fix_scnlen : 1;
 .
-.  {* Fix up an XCOFF C_BINCL/C_EINCL symbol.  The value is the
-.     index into the line number entries.  Set by coff_slurp_symbol_table.  *}
+.  {* If set, u.syment.n_value contains a pointer to a symbol.  The final
+.     value will be the offset field.  Used for XCOFF C_BSTAT symbols.  *}
+.  unsigned int fix_value : 1;
+.
+.  {* If set, u.syment.n_value is an index into the line number entries.
+.     Used for XCOFF C_BINCL/C_EINCL symbols.  *}
 .  unsigned int fix_line : 1;
 .
 .  {* The container for the symbol structure as read and translated
@@ -324,11 +327,11 @@ CODE_FRAGMENT
 .    struct internal_syment syment;
 .  } u;
 .
-. {* Selector for the union above.  *}
-. bfd_boolean is_sym;
+. {* An extra pointer which can used by format based on COFF (like XCOFF)
+.    to provide extra information to their backend.  *}
+. void *extrap;
 .} combined_entry_type;
 .
-.
 .{* Each canonical asymbol really looks like this: *}
 .
 .typedef struct coff_symbol_struct
@@ -343,12 +346,13 @@ CODE_FRAGMENT
 .  struct lineno_cache_entry *lineno;
 .
 .  {* Have the line numbers been relocated yet ? *}
-.  bfd_boolean done_lineno;
+.  bool done_lineno;
 .} coff_symbol_type;
-
+.
 */
 
 #include "libiberty.h"
+#include <string.h>
 
 #ifdef COFF_WITH_PE
 #include "peicode.h"
@@ -364,6 +368,10 @@ CODE_FRAGMENT
 #define GNU_LINKONCE_WT ".gnu.linkonce.wt."
 #define DOT_RELOC	".reloc"
 
+#if defined(COFF_WITH_PE) || defined(COFF_GO32_EXE) || defined(COFF_GO32)
+# define COFF_WITH_EXTENDED_RELOC_COUNTER
+#endif
+
 #if defined (COFF_LONG_SECTION_NAMES)
 /* Needed to expand the inputs to BLANKOR1TOODD.  */
 #define COFFLONGSECTIONCATHELPER(x,y)    x ## y
@@ -386,92 +394,29 @@ CODE_FRAGMENT
 /* Define a macro that can be used to initialise both the fields relating
    to long section names in the backend data struct simultaneously.  */
 #if COFF_ENABLE_LONG_SECTION_NAMES
-#define COFF_DEFAULT_LONG_SECTION_NAMES  (TRUE), COFF_LONG_SECTION_NAMES_SETTER
+#define COFF_DEFAULT_LONG_SECTION_NAMES  (true), COFF_LONG_SECTION_NAMES_SETTER
 #else /* !COFF_ENABLE_LONG_SECTION_NAMES */
-#define COFF_DEFAULT_LONG_SECTION_NAMES  (FALSE), COFF_LONG_SECTION_NAMES_SETTER
+#define COFF_DEFAULT_LONG_SECTION_NAMES  (false), COFF_LONG_SECTION_NAMES_SETTER
 #endif /* COFF_ENABLE_LONG_SECTION_NAMES */
 
-#if defined (COFF_LONG_SECTION_NAMES)
-static bfd_boolean bfd_coff_set_long_section_names_allowed
-  (bfd *, int);
-#else /* !defined (COFF_LONG_SECTION_NAMES) */
-static bfd_boolean bfd_coff_set_long_section_names_disallowed
-  (bfd *, int);
-#endif /* defined (COFF_LONG_SECTION_NAMES) */
-static long sec_to_styp_flags
-  (const char *, flagword);
-static bfd_boolean styp_to_sec_flags
-  (bfd *, void *, const char *, asection *, flagword *);
-static bfd_boolean coff_bad_format_hook
-  (bfd *, void *);
-static void coff_set_custom_section_alignment
-  (bfd *, asection *, const struct coff_section_alignment_entry *,
-   const unsigned int);
-static bfd_boolean coff_new_section_hook
-  (bfd *, asection *);
-static bfd_boolean coff_set_arch_mach_hook
-  (bfd *, void *);
-static bfd_boolean coff_write_relocs
-  (bfd *, int);
-static bfd_boolean coff_set_flags
-  (bfd *, unsigned int *, unsigned short *);
-static bfd_boolean coff_set_arch_mach
-  (bfd *, enum bfd_architecture, unsigned long) ATTRIBUTE_UNUSED;
-static bfd_boolean coff_compute_section_file_positions
-  (bfd *);
-static bfd_boolean coff_write_object_contents
-  (bfd *) ATTRIBUTE_UNUSED;
-static bfd_boolean coff_set_section_contents
-  (bfd *, asection *, const void *, file_ptr, bfd_size_type);
-static bfd_boolean coff_slurp_line_table
-  (bfd *, asection *);
-static bfd_boolean coff_slurp_symbol_table
-  (bfd *);
 static enum coff_symbol_classification coff_classify_symbol
   (bfd *, struct internal_syment *);
-static bfd_boolean coff_slurp_reloc_table
-  (bfd *, asection *, asymbol **);
-static long coff_canonicalize_reloc
-  (bfd *, asection *, arelent **, asymbol **);
-#ifndef coff_mkobject_hook
-static void * coff_mkobject_hook
-  (bfd *, void *,  void *);
-#endif
-#ifdef COFF_WITH_PE
-static flagword handle_COMDAT
-  (bfd *, flagword, void *, const char *, asection *);
-#endif
-#ifdef COFF_IMAGE_WITH_PE
-static bfd_boolean coff_read_word
-  (bfd *, unsigned int *);
-static unsigned int coff_compute_checksum
-  (bfd *);
-static bfd_boolean coff_apply_checksum
-  (bfd *);
-#endif
-#ifdef TICOFF
-static bfd_boolean ticoff0_bad_format_hook
-  (bfd *, void * );
-static bfd_boolean ticoff1_bad_format_hook
-  (bfd *, void * );
-#endif
 
 /* void warning(); */
 
 #if defined (COFF_LONG_SECTION_NAMES)
-static bfd_boolean
+static bool
 bfd_coff_set_long_section_names_allowed (bfd *abfd, int enable)
 {
-  coff_backend_info (abfd)->_bfd_coff_long_section_names = enable;
-  return TRUE;
+  bfd_coff_long_section_names (abfd) = enable;
+  return true;
 }
 #else /* !defined (COFF_LONG_SECTION_NAMES) */
-static bfd_boolean
-bfd_coff_set_long_section_names_disallowed (bfd *abfd, int enable)
+static bool
+bfd_coff_set_long_section_names_disallowed (bfd *abfd ATTRIBUTE_UNUSED,
+					    int enable ATTRIBUTE_UNUSED)
 {
-  (void) abfd;
-  (void) enable;
-  return FALSE;
+  return false;
 }
 #endif /* defined (COFF_LONG_SECTION_NAMES) */
 
@@ -531,8 +476,8 @@ sec_to_styp_flags (const char *sec_name,
       styp_flags = STYP_LIT;
 #endif /* _LIT */
     }
-  else if (CONST_STRNEQ (sec_name, DOT_DEBUG)
-	   || CONST_STRNEQ (sec_name, DOT_ZDEBUG))
+  else if (startswith (sec_name, DOT_DEBUG)
+	   || startswith (sec_name, DOT_ZDEBUG))
     {
       /* Handle the XCOFF debug section and DWARF2 debug sections.  */
       if (!sec_name[6])
@@ -540,18 +485,26 @@ sec_to_styp_flags (const char *sec_name,
       else
 	styp_flags = STYP_DEBUG_INFO;
     }
-  else if (CONST_STRNEQ (sec_name, ".stab"))
+  else if (startswith (sec_name, ".stab"))
     {
       styp_flags = STYP_DEBUG_INFO;
     }
 #ifdef COFF_LONG_SECTION_NAMES
-  else if (CONST_STRNEQ (sec_name, GNU_LINKONCE_WI)
-	   || CONST_STRNEQ (sec_name, GNU_LINKONCE_WT))
+  else if (startswith (sec_name, GNU_LINKONCE_WI)
+	   || startswith (sec_name, GNU_LINKONCE_WT))
     {
       styp_flags = STYP_DEBUG_INFO;
     }
 #endif
 #ifdef RS6000COFF_C
+  else if (!strcmp (sec_name, _TDATA))
+    {
+      styp_flags = STYP_TDATA;
+    }
+  else if (!strcmp (sec_name, _TBSS))
+    {
+      styp_flags = STYP_TBSS;
+    }
   else if (!strcmp (sec_name, _PAD))
     {
       styp_flags = STYP_PAD;
@@ -573,7 +526,7 @@ sec_to_styp_flags (const char *sec_name,
       int i;
 
       for (i = 0; i < XCOFF_DWSECT_NBR_NAMES; i++)
-	if (!strcmp (sec_name, xcoff_dwsect_names[i].name))
+	if (!strcmp (sec_name, xcoff_dwsect_names[i].xcoff_name))
 	  {
 	    styp_flags = STYP_DWARF | xcoff_dwsect_names[i].flag;
 	    break;
@@ -636,16 +589,16 @@ static long
 sec_to_styp_flags (const char *sec_name, flagword sec_flags)
 {
   long styp_flags = 0;
-  bfd_boolean is_dbg = FALSE;
+  bool is_dbg = false;
 
-  if (CONST_STRNEQ (sec_name, DOT_DEBUG)
-      || CONST_STRNEQ (sec_name, DOT_ZDEBUG)
+  if (startswith (sec_name, DOT_DEBUG)
+      || startswith (sec_name, DOT_ZDEBUG)
 #ifdef COFF_LONG_SECTION_NAMES
-      || CONST_STRNEQ (sec_name, GNU_LINKONCE_WI)
-      || CONST_STRNEQ (sec_name, GNU_LINKONCE_WT)
+      || startswith (sec_name, GNU_LINKONCE_WI)
+      || startswith (sec_name, GNU_LINKONCE_WT)
 #endif
-      || CONST_STRNEQ (sec_name, ".stab"))
-    is_dbg = TRUE;
+      || startswith (sec_name, ".stab"))
+    is_dbg = true;
 
   /* caution: there are at least three groups of symbols that have
      very similar bits and meanings: IMAGE_SCN*, SEC_*, and STYP_*.
@@ -676,22 +629,31 @@ sec_to_styp_flags (const char *sec_name,
   /* skip ROM */
   /* skip constRUCTOR */
   /* skip CONTENTS */
+#ifndef COFF_IMAGE_WITH_PE
+  /* I don't think any of the IMAGE_SCN_LNK_* flags set below should be set
+     when the output is PE. Only object files should have them, for the linker
+     to consume.  */
   if ((sec_flags & SEC_IS_COMMON) != 0)
     styp_flags |= IMAGE_SCN_LNK_COMDAT;
+#endif
   if ((sec_flags & SEC_DEBUGGING) != 0)
     styp_flags |= IMAGE_SCN_MEM_DISCARDABLE;
-  if ((sec_flags & SEC_EXCLUDE) != 0 && !is_dbg)
-    styp_flags |= IMAGE_SCN_LNK_REMOVE;
-  if ((sec_flags & SEC_NEVER_LOAD) != 0 && !is_dbg)
+  if ((sec_flags & (SEC_EXCLUDE | SEC_NEVER_LOAD)) != 0 && !is_dbg)
+#ifdef COFF_IMAGE_WITH_PE
+    styp_flags |= IMAGE_SCN_MEM_DISCARDABLE;
+#else
     styp_flags |= IMAGE_SCN_LNK_REMOVE;
+#endif
   /* skip IN_MEMORY */
   /* skip SORT */
+#ifndef COFF_IMAGE_WITH_PE
   if (sec_flags & SEC_LINK_ONCE)
     styp_flags |= IMAGE_SCN_LNK_COMDAT;
   if ((sec_flags
        & (SEC_LINK_DUPLICATES_DISCARD | SEC_LINK_DUPLICATES_SAME_CONTENTS
 	  | SEC_LINK_DUPLICATES_SAME_SIZE)) != 0)
     styp_flags |= IMAGE_SCN_LNK_COMDAT;
+#endif
 
   /* skip LINKER_CREATED */
 
@@ -716,15 +678,15 @@ sec_to_styp_flags (const char *sec_name,
 
 #ifndef COFF_WITH_PE
 
-static bfd_boolean
-styp_to_sec_flags (bfd *abfd ATTRIBUTE_UNUSED,
+static bool
+styp_to_sec_flags (bfd *abfd,
 		   void * hdr,
 		   const char *name,
 		   asection *section ATTRIBUTE_UNUSED,
 		   flagword *flags_ptr)
 {
   struct internal_scnhdr *internal_s = (struct internal_scnhdr *) hdr;
-  long styp_flags = internal_s->s_flags;
+  unsigned long styp_flags = internal_s->s_flags;
   flagword sec_flags = 0;
 
 #ifdef STYP_BLOCK
@@ -782,6 +744,22 @@ styp_to_sec_flags (bfd *abfd ATTRIBUTE_U
   else if (styp_flags & STYP_PAD)
     sec_flags = 0;
 #ifdef RS6000COFF_C
+  else if (styp_flags & STYP_TDATA)
+    {
+      if (sec_flags & SEC_NEVER_LOAD)
+	sec_flags |= SEC_DATA | SEC_THREAD_LOCAL | SEC_COFF_SHARED_LIBRARY;
+      else
+	sec_flags |= SEC_DATA | SEC_THREAD_LOCAL | SEC_LOAD | SEC_ALLOC;
+    }
+  else if (styp_flags & STYP_TBSS)
+    {
+#ifdef BSS_NOLOAD_IS_SHARED_LIBRARY
+      if (sec_flags & SEC_NEVER_LOAD)
+	sec_flags |= SEC_ALLOC | SEC_THREAD_LOCAL | SEC_COFF_SHARED_LIBRARY;
+      else
+#endif
+	sec_flags |= SEC_ALLOC | SEC_THREAD_LOCAL;
+    }
   else if (styp_flags & STYP_EXCEPT)
     sec_flags |= SEC_LOAD;
   else if (styp_flags & STYP_LOADER)
@@ -814,16 +792,16 @@ styp_to_sec_flags (bfd *abfd ATTRIBUTE_U
 #endif
 	sec_flags |= SEC_ALLOC;
     }
-  else if (CONST_STRNEQ (name, DOT_DEBUG)
-	   || CONST_STRNEQ (name, DOT_ZDEBUG)
+  else if (startswith (name, DOT_DEBUG)
+	   || startswith (name, DOT_ZDEBUG)
 #ifdef _COMMENT
 	   || strcmp (name, _COMMENT) == 0
 #endif
 #ifdef COFF_LONG_SECTION_NAMES
-	   || CONST_STRNEQ (name, GNU_LINKONCE_WI)
-	   || CONST_STRNEQ (name, GNU_LINKONCE_WT)
+	   || startswith (name, GNU_LINKONCE_WI)
+	   || startswith (name, GNU_LINKONCE_WT)
 #endif
-	   || CONST_STRNEQ (name, ".stab"))
+	   || startswith (name, ".stab"))
     {
 #ifdef COFF_PAGE_SIZE
       sec_flags |= SEC_DEBUGGING;
@@ -850,6 +828,11 @@ styp_to_sec_flags (bfd *abfd ATTRIBUTE_U
     sec_flags = (SEC_LOAD | SEC_ALLOC);
 #endif /* STYP_SDATA */
 
+  if ((bfd_applicable_section_flags (abfd) & SEC_SMALL_DATA) != 0
+      && (startswith (name, ".sbss")
+	  || startswith (name, ".sdata")))
+    sec_flags |= SEC_SMALL_DATA;
+
 #if defined (COFF_LONG_SECTION_NAMES) && defined (COFF_SUPPORT_GNU_LINKONCE)
   /* As a GNU extension, if the name begins with .gnu.linkonce, we
      only link a single copy of the section.  This is used to support
@@ -857,241 +840,227 @@ styp_to_sec_flags (bfd *abfd ATTRIBUTE_U
      The symbols will be defined as weak, so that multiple definitions
      are permitted.  The GNU linker extension is to actually discard
      all but one of the sections.  */
-  if (CONST_STRNEQ (name, ".gnu.linkonce"))
+  if (startswith (name, ".gnu.linkonce"))
     sec_flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
 #endif
 
   if (flags_ptr == NULL)
-    return FALSE;
+    return false;
 
   * flags_ptr = sec_flags;
-  return TRUE;
+  return true;
 }
 
 #else /* COFF_WITH_PE */
 
-static flagword
-handle_COMDAT (bfd * abfd,
-	       flagword sec_flags,
-	       void * hdr,
-	       const char *name,
-	       asection *section)
+static hashval_t
+comdat_hashf (const void *entry)
 {
-  struct internal_scnhdr *internal_s = (struct internal_scnhdr *) hdr;
-  bfd_byte *esymstart, *esym, *esymend;
-  int seen_state = 0;
-  char *target_name = NULL;
+  const struct comdat_hash_entry *fe = entry;
+  return fe->target_index;
+}
+
+static int
+comdat_eqf (const void *e1, const void *e2)
+{
+  const struct comdat_hash_entry *fe1 = e1;
+  const struct comdat_hash_entry *fe2 = e2;
+  return fe1->target_index == fe2->target_index;
+}
+
+static void
+comdat_delf (void *ent)
+{
+  struct comdat_hash_entry *e = ent;
+  free (e->comdat_name);
+  free (e->symname);
+  free (e);
+}
+
+static struct comdat_hash_entry *
+find_flags (htab_t comdat_hash, int target_index)
+{
+  struct comdat_hash_entry needle;
+  needle.target_index = target_index;
 
-  sec_flags |= SEC_LINK_ONCE;
+  return htab_find (comdat_hash, &needle);
+}
+
+static bool
+fill_comdat_hash (bfd *abfd)
+{
+  bfd_byte *esymstart, *esym, *esymend;
 
-  /* Unfortunately, the PE format stores essential information in
-     the symbol table, of all places.  We need to extract that
-     information now, so that objdump and the linker will know how
-     to handle the section without worrying about the symbols.  We
-     can't call slurp_symtab, because the linker doesn't want the
-     swapped symbols.  */
+  /* Unfortunately, the PE format stores essential information in the
+     symbol table, of all places.  We need to extract that information
+     now, so that objdump and the linker will know how to handle the
+     section without worrying about the symbols.  We can't call
+     slurp_symtab, because the linker doesn't want the swapped symbols.  */
 
   /* COMDAT sections are special.  The first symbol is the section
      symbol, which tells what kind of COMDAT section it is.  The
-     second symbol is the "comdat symbol" - the one with the
-     unique name.  GNU uses the section symbol for the unique
-     name; MS uses ".text" for every comdat section.  Sigh.  - DJ */
-
-  /* This is not mirrored in sec_to_styp_flags(), but there
-     doesn't seem to be a need to, either, and it would at best be
-     rather messy.  */
+     second symbol is the "comdat symbol" - the one with the unique
+     name.  GNU uses the section symbol for the unique name; MS uses
+     ".text" for every comdat section.  Sigh.  - DJ.  */
+
+  /* This is not mirrored in sec_to_styp_flags(), but there doesn't
+     seem to be a need to, either, and it would at best be rather messy.  */
 
   if (! _bfd_coff_get_external_symbols (abfd))
-    return sec_flags;
+    return true;
 
   esymstart = esym = (bfd_byte *) obj_coff_external_syms (abfd);
   esymend = esym + obj_raw_syment_count (abfd) * bfd_coff_symesz (abfd);
 
-  while (esym < esymend)
+  for (struct internal_syment isym;
+       esym < esymend;
+       esym += (isym.n_numaux + 1) * bfd_coff_symesz (abfd))
     {
-      struct internal_syment isym;
       char buf[SYMNMLEN + 1];
       const char *symname;
+      flagword sec_flags = SEC_LINK_ONCE;
 
-      bfd_coff_swap_sym_in (abfd, esym, & isym);
+      bfd_coff_swap_sym_in (abfd, esym, &isym);
 
-      BFD_ASSERT (sizeof (internal_s->s_name) <= SYMNMLEN);
+      /* According to the MSVC documentation, the first TWO entries
+	 with the section # are both of interest to us.  The first one
+	 is the "section symbol" (section name).  The second is the
+	 comdat symbol name.  Here, we've found the first qualifying
+	 entry; we distinguish it from the second with a state flag.
 
-      if (isym.n_scnum == section->target_index)
-	{
-	  /* According to the MSVC documentation, the first
-	     TWO entries with the section # are both of
-	     interest to us.  The first one is the "section
-	     symbol" (section name).  The second is the comdat
-	     symbol name.  Here, we've found the first
-	     qualifying entry; we distinguish it from the
-	     second with a state flag.
-
-	     In the case of gas-generated (at least until that
-	     is fixed) .o files, it isn't necessarily the
-	     second one.  It may be some other later symbol.
-
-	     Since gas also doesn't follow MS conventions and
-	     emits the section similar to .text$<name>, where
-	     <something> is the name we're looking for, we
-	     distinguish the two as follows:
-
-	     If the section name is simply a section name (no
-	     $) we presume it's MS-generated, and look at
-	     precisely the second symbol for the comdat name.
-	     If the section name has a $, we assume it's
-	     gas-generated, and look for <something> (whatever
-	     follows the $) as the comdat symbol.  */
+	 In the case of gas-generated (at least until that is fixed)
+	 .o files, it isn't necessarily the second one.  It may be
+	 some other later symbol.
 
-	  /* All 3 branches use this.  */
-	  symname = _bfd_coff_internal_syment_name (abfd, &isym, buf);
+	 Since gas also doesn't follow MS conventions and emits the
+	 section similar to .text$<name>, where <something> is the
+	 name we're looking for, we distinguish the two as follows:
 
-	  /* PR 17512 file: 078-11867-0.004  */
-	  if (symname == NULL)
-	    {
-	      _bfd_error_handler (_("%pB: unable to load COMDAT section name"),
-				  abfd);
-	      break;
-	    }
+	 If the section name is simply a section name (no $) we
+	 presume it's MS-generated, and look at precisely the second
+	 symbol for the comdat name.  If the section name has a $, we
+	 assume it's gas-generated, and look for <something> (whatever
+	 follows the $) as the comdat symbol.  */
 
-	  switch (seen_state)
-	    {
-	    case 0:
-	      {
-		/* The first time we've seen the symbol.  */
-		union internal_auxent aux;
+      /* All 3 branches use this.  */
+      symname = _bfd_coff_internal_syment_name (abfd, &isym, buf);
 
-		/* If it isn't the stuff we're expecting, die;
-		   The MS documentation is vague, but it
-		   appears that the second entry serves BOTH
-		   as the comdat symbol and the defining
-		   symbol record (either C_STAT or C_EXT,
-		   possibly with an aux entry with debug
-		   information if it's a function.)  It
-		   appears the only way to find the second one
-		   is to count.  (On Intel, they appear to be
-		   adjacent, but on Alpha, they have been
-		   found separated.)
-
-		   Here, we think we've found the first one,
-		   but there's some checking we can do to be
-		   sure.  */
-
-		if (! ((isym.n_sclass == C_STAT
-			|| isym.n_sclass == C_EXT)
-		       && BTYPE (isym.n_type) == T_NULL
-		       && isym.n_value == 0))
-		  {
-		    /* Malformed input files can trigger this test.
-		       cf PR 21781.  */
-		    _bfd_error_handler (_("%pB: error: unexpected symbol '%s' in COMDAT section"),
-					abfd, symname);
-		    goto breakloop;
-		  }
-
-		/* FIXME LATER: MSVC generates section names
-		   like .text for comdats.  Gas generates
-		   names like .text$foo__Fv (in the case of a
-		   function).  See comment above for more.  */
+      /* PR 17512 file: 078-11867-0.004  */
+      if (symname == NULL)
+	{
+	  _bfd_error_handler (_("%pB: unable to load COMDAT section name"),
+			      abfd);
+	  continue;
+	}
 
-		if (isym.n_sclass == C_STAT && strcmp (name, symname) != 0)
-		  /* xgettext:c-format */
-		  _bfd_error_handler (_("%pB: warning: COMDAT symbol '%s'"
-					" does not match section name '%s'"),
-				      abfd, symname, name);
+      union internal_auxent aux;
 
-		seen_state = 1;
+      struct comdat_hash_entry needle;
+      needle.target_index = isym.n_scnum;
 
-		/* PR 17512: file: e2cfe54f.  */
-		if (esym + bfd_coff_symesz (abfd) >= esymend)
-		  {
-		    /* xgettext:c-format */
-		    _bfd_error_handler (_("%pB: warning: no symbol for"
-					  " section '%s' found"),
-					abfd, symname);
-		    break;
-		  }
-		/* This is the section symbol.  */
-		bfd_coff_swap_aux_in (abfd, (esym + bfd_coff_symesz (abfd)),
-				      isym.n_type, isym.n_sclass,
-				      0, isym.n_numaux, & aux);
+      void **slot
+	= htab_find_slot (pe_data (abfd)->comdat_hash, &needle, INSERT);
+      if (slot == NULL)
+	return false;
 
-		target_name = strchr (name, '$');
-		if (target_name != NULL)
-		  {
-		    /* Gas mode.  */
-		    seen_state = 2;
-		    /* Skip the `$'.  */
-		    target_name += 1;
-		  }
+      if (*slot == NULL)
+	{
+	  if (isym.n_numaux != 1)
+	    aux.x_scn.x_comdat = 0;
+	  else
+	    {
+	      /* PR 17512: file: e2cfe54f.  */
+	      if (esym + isym.n_numaux * bfd_coff_symesz (abfd) >= esymend)
+		{
+		  /* xgettext:c-format */
+		  _bfd_error_handler (_("%pB: warning: no symbol for"
+					" section '%s' found"),
+				      abfd, symname);
+		  continue;
+		}
+	      bfd_coff_swap_aux_in (abfd, (esym + bfd_coff_symesz (abfd)),
+				    isym.n_type, isym.n_sclass, 0,
+				    isym.n_numaux, &aux);
+	    }
 
-		/* FIXME: Microsoft uses NODUPLICATES and
-		   ASSOCIATIVE, but gnu uses ANY and
-		   SAME_SIZE.  Unfortunately, gnu doesn't do
-		   the comdat symbols right.  So, until we can
-		   fix it to do the right thing, we are
-		   temporarily disabling comdats for the MS
-		   types (they're used in DLLs and C++, but we
-		   don't support *their* C++ libraries anyway
-		   - DJ.  */
-
-		/* Cygwin does not follow the MS style, and
-		   uses ANY and SAME_SIZE where NODUPLICATES
-		   and ASSOCIATIVE should be used.  For
-		   Interix, we just do the right thing up
-		   front.  */
+	  /* FIXME: Microsoft uses NODUPLICATES and ASSOCIATIVE, but
+	     gnu uses ANY and SAME_SIZE.  Unfortunately, gnu doesn't
+	     do the comdat symbols right.  So, until we can fix it to
+	     do the right thing, we are temporarily disabling comdats
+	     for the MS types (they're used in DLLs and C++, but we
+	     don't support *their* C++ libraries anyway - DJ.  */
+
+	  /* Cygwin does not follow the MS style, and uses ANY and
+	     SAME_SIZE where NODUPLICATES and ASSOCIATIVE should be
+	     used.  For Interix, we just do the right thing up
+	     front.  */
 
-		switch (aux.x_scn.x_comdat)
-		  {
-		  case IMAGE_COMDAT_SELECT_NODUPLICATES:
+	  switch (aux.x_scn.x_comdat)
+	    {
+	    case IMAGE_COMDAT_SELECT_NODUPLICATES:
 #ifdef STRICT_PE_FORMAT
-		    sec_flags |= SEC_LINK_DUPLICATES_ONE_ONLY;
+	      sec_flags |= SEC_LINK_DUPLICATES_ONE_ONLY;
 #else
-		    sec_flags &= ~SEC_LINK_ONCE;
+	      sec_flags &= ~SEC_LINK_ONCE;
 #endif
-		    break;
+	      break;
 
-		  case IMAGE_COMDAT_SELECT_ANY:
-		    sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
-		    break;
+	    case IMAGE_COMDAT_SELECT_ANY:
+	      sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
+	      break;
 
-		  case IMAGE_COMDAT_SELECT_SAME_SIZE:
-		    sec_flags |= SEC_LINK_DUPLICATES_SAME_SIZE;
-		    break;
+	    case IMAGE_COMDAT_SELECT_SAME_SIZE:
+	      sec_flags |= SEC_LINK_DUPLICATES_SAME_SIZE;
+	      break;
 
-		  case IMAGE_COMDAT_SELECT_EXACT_MATCH:
-		    /* Not yet fully implemented ??? */
-		    sec_flags |= SEC_LINK_DUPLICATES_SAME_CONTENTS;
-		    break;
+	    case IMAGE_COMDAT_SELECT_EXACT_MATCH:
+	      /* Not yet fully implemented ??? */
+	      sec_flags |= SEC_LINK_DUPLICATES_SAME_CONTENTS;
+	      break;
 
-		    /* debug$S gets this case; other
-		       implications ??? */
+	      /* debug$S gets this case; other implications ???  */
 
-		    /* There may be no symbol... we'll search
-		       the whole table... Is this the right
-		       place to play this game? Or should we do
-		       it when reading it in.  */
-		  case IMAGE_COMDAT_SELECT_ASSOCIATIVE:
+	      /* There may be no symbol.  We'll search the whole
+		 table.  Is this the right place to play this game?
+		 Or should we do it when reading it in?  */
+	    case IMAGE_COMDAT_SELECT_ASSOCIATIVE:
 #ifdef STRICT_PE_FORMAT
-		    /* FIXME: This is not currently implemented.  */
-		    sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
+	      /* FIXME: This is not currently implemented.  */
+	      sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
 #else
-		    sec_flags &= ~SEC_LINK_ONCE;
+	      sec_flags &= ~SEC_LINK_ONCE;
 #endif
-		    break;
+	      break;
 
-		  default:  /* 0 means "no symbol" */
-		    /* debug$F gets this case; other
-		       implications ??? */
-		    sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
-		    break;
-		  }
-	      }
+	    default:  /* 0 means "no symbol" */
+	      /* debug$F gets this case; other implications ???  */
+	      sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
 	      break;
+	    }
 
-	    case 2:
+	  *slot = bfd_zmalloc (sizeof (struct comdat_hash_entry));
+	  if (*slot == NULL)
+	    return false;
+	  struct comdat_hash_entry *newentry = *slot;
+	  newentry->sec_flags = sec_flags;
+	  newentry->symname = bfd_strdup (symname);
+	  newentry->target_index = isym.n_scnum;
+	  newentry->isym = isym;
+	  newentry->comdat_symbol = -1;
+	}
+      else
+	{
+	  struct comdat_hash_entry *entry = *slot;
+
+	  if (entry->comdat_symbol != -1)
+	    continue;
+
+	  char *target_name = strchr (entry->symname, '$');
+	  if (target_name != NULL)
+	    {
 	      /* Gas mode: the first matching on partial name.  */
 
+	      target_name += 1;
 #ifndef TARGET_UNDERSCORE
 #define TARGET_UNDERSCORE 0
 #endif
@@ -1100,50 +1069,108 @@ handle_COMDAT (bfd * abfd,
 			  symname + (TARGET_UNDERSCORE ? 1 : 0)) != 0)
 		{
 		  /* Not the name we're looking for */
-		  esym += (isym.n_numaux + 1) * bfd_coff_symesz (abfd);
 		  continue;
 		}
-	      /* Fall through.  */
-	    case 1:
-	      /* MSVC mode: the lexically second symbol (or
-		 drop through from the above).  */
-	      {
-		char *newname;
-		bfd_size_type amt;
-
-		/* This must the second symbol with the
-		   section #.  It is the actual symbol name.
-		   Intel puts the two adjacent, but Alpha (at
-		   least) spreads them out.  */
-
-		amt = sizeof (struct coff_comdat_info);
-		coff_section_data (abfd, section)->comdat
-		  = (struct coff_comdat_info *) bfd_alloc (abfd, amt);
-		if (coff_section_data (abfd, section)->comdat == NULL)
-		  abort ();
-
-		coff_section_data (abfd, section)->comdat->symbol =
-		  (esym - esymstart) / bfd_coff_symesz (abfd);
-
-		amt = strlen (symname) + 1;
-		newname = (char *) bfd_alloc (abfd, amt);
-		if (newname == NULL)
-		  abort ();
-
-		strcpy (newname, symname);
-		coff_section_data (abfd, section)->comdat->name
-		  = newname;
-	      }
-
-	      goto breakloop;
 	    }
+	  /* MSVC mode: the lexically second symbol (or drop through
+	     from the above).  */
+	  /* This must the second symbol with the section #.  It is
+	     the actual symbol name.  Intel puts the two adjacent, but
+	     Alpha (at least) spreads them out.  */
+
+	  entry->comdat_symbol = (esym - esymstart) / bfd_coff_symesz (abfd);
+	  entry->comdat_name = bfd_strdup (symname);
 	}
+    }
+
+  return true;
+}
+
+static bool
+insert_coff_comdat_info (bfd *abfd, asection *section, const char *symname,
+			 long symbol)
+{
+  struct coff_comdat_info *comdat;
+  size_t len = strlen (symname) + 1;
+
+  comdat = bfd_alloc (abfd, sizeof (*comdat) + len);
+  if (comdat == NULL)
+    return false;
 
-      esym += (isym.n_numaux + 1) * bfd_coff_symesz (abfd);
+  coff_section_data (abfd, section)->comdat = comdat;
+  comdat->symbol = symbol;
+  char *newname = (char *) (comdat + 1);
+  comdat->name = newname;
+  memcpy (newname, symname, len);
+  return true;
+}
+
+static bool
+handle_COMDAT (bfd *abfd, flagword *sec_flags, const char *name,
+	       asection *section)
+{
+  if (pe_data (abfd)->comdat_hash == NULL)
+    {
+      pe_data (abfd)->comdat_hash = htab_create (10, comdat_hashf, comdat_eqf,
+						 comdat_delf);
+      if (pe_data (abfd)->comdat_hash == NULL)
+	return false;
     }
 
- breakloop:
-  return sec_flags;
+  if (htab_elements (pe_data (abfd)->comdat_hash) == 0)
+    if (! fill_comdat_hash (abfd))
+      return false;
+
+  struct comdat_hash_entry *found
+    = find_flags (pe_data (abfd)->comdat_hash, section->target_index);
+  if (found != NULL)
+    {
+      struct internal_syment isym = found->isym;
+
+      /* If it isn't the stuff we're expecting, die;  The MS
+	 documentation is vague, but it appears that the second entry
+	 serves BOTH as the comdat symbol and the defining symbol
+	 record (either C_STAT or C_EXT, possibly with an aux entry
+	 with debug information if it's a function.)  It appears the
+	 only way to find the second one is to count.  (On Intel, they
+	 appear to be adjacent, but on Alpha, they have been found
+	 separated.)
+
+	 Here, we think we've found the first one, but there's some
+	 checking we can do to be sure.  */
+
+      if (! ((isym.n_sclass == C_STAT || isym.n_sclass == C_EXT)
+	     && BTYPE (isym.n_type) == T_NULL && isym.n_value == 0))
+	{
+	  /* Malformed input files can trigger this test.
+	     cf PR 21781.  */
+	  _bfd_error_handler
+	    (_("%pB: error: unexpected symbol '%s' in COMDAT section"),
+	     abfd, found->symname);
+	  return false;
+	}
+
+      /* FIXME LATER: MSVC generates section names like .text for
+	 comdats.  Gas generates names like .text$foo__Fv (in the case
+	 of a function).  See comment above for more.  */
+
+      if (isym.n_sclass == C_STAT && strcmp (name, found->symname) != 0)
+	/* xgettext:c-format */
+	_bfd_error_handler (_("%pB: warning: COMDAT symbol '%s'"
+			      " does not match section name '%s'"),
+			    abfd, found->symname, name);
+
+      if (found->comdat_symbol != -1)
+	{
+	  if (! insert_coff_comdat_info (abfd, section, found->comdat_name,
+					 found->comdat_symbol))
+	    return false;
+	}
+      *sec_flags = *sec_flags | found->sec_flags;
+      return true;
+    }
+  *sec_flags = *sec_flags | SEC_LINK_ONCE;
+  return true;
 }
 
 
@@ -1156,7 +1183,7 @@ handle_COMDAT (bfd * abfd,
    required information.  FIXME: Is the COMDAT symbol index used for
    any purpose other than objdump?  */
 
-static bfd_boolean
+static bool
 styp_to_sec_flags (bfd *abfd,
 		   void * hdr,
 		   const char *name,
@@ -1166,22 +1193,22 @@ styp_to_sec_flags (bfd *abfd,
   struct internal_scnhdr *internal_s = (struct internal_scnhdr *) hdr;
   unsigned long styp_flags = internal_s->s_flags;
   flagword sec_flags;
-  bfd_boolean result = TRUE;
-  bfd_boolean is_dbg = FALSE;
+  bool result = true;
+  bool is_dbg = false;
 
-  if (CONST_STRNEQ (name, DOT_DEBUG)
-      || CONST_STRNEQ (name, DOT_ZDEBUG)
+  if (startswith (name, DOT_DEBUG)
+      || startswith (name, DOT_ZDEBUG)
 #ifdef COFF_LONG_SECTION_NAMES
-      || CONST_STRNEQ (name, GNU_LINKONCE_WI)
-      || CONST_STRNEQ (name, GNU_LINKONCE_WT)
+      || startswith (name, GNU_LINKONCE_WI)
+      || startswith (name, GNU_LINKONCE_WT)
       /* FIXME: These definitions ought to be in a header file.  */
 #define GNU_DEBUGLINK		".gnu_debuglink"
 #define GNU_DEBUGALTLINK	".gnu_debugaltlink"
-      || CONST_STRNEQ (name, GNU_DEBUGLINK)
-      || CONST_STRNEQ (name, GNU_DEBUGALTLINK)
+      || startswith (name, GNU_DEBUGLINK)
+      || startswith (name, GNU_DEBUGALTLINK)
 #endif
-      || CONST_STRNEQ (name, ".stab"))
-    is_dbg = TRUE;
+      || startswith (name, ".stab"))
+    is_dbg = true;
   /* Assume read only unless IMAGE_SCN_MEM_WRITE is specified.  */
   sec_flags = SEC_READONLY;
 
@@ -1294,7 +1321,8 @@ styp_to_sec_flags (bfd *abfd,
 	  break;
 	case IMAGE_SCN_LNK_COMDAT:
 	  /* COMDAT gets very special treatment.  */
-	  sec_flags = handle_COMDAT (abfd, sec_flags, hdr, name, section);
+	  if (!handle_COMDAT (abfd, &sec_flags, name, section))
+	    result = false;
 	  break;
 	default:
 	  /* Silently ignore for now.  */
@@ -1308,10 +1336,15 @@ styp_to_sec_flags (bfd *abfd,
 	    /* xgettext:c-format */
 	    (_("%pB (%s): section flag %s (%#lx) ignored"),
 	     abfd, name, unhandled, flag);
-	  result = FALSE;
+	  result = false;
 	}
     }
 
+  if ((bfd_applicable_section_flags (abfd) & SEC_SMALL_DATA) != 0
+      && (startswith (name, ".sbss")
+	  || startswith (name, ".sdata")))
+    sec_flags |= SEC_SMALL_DATA;
+
 #if defined (COFF_LONG_SECTION_NAMES) && defined (COFF_SUPPORT_GNU_LINKONCE)
   /* As a GNU extension, if the name begins with .gnu.linkonce, we
      only link a single copy of the section.  This is used to support
@@ -1319,7 +1352,7 @@ styp_to_sec_flags (bfd *abfd,
      The symbols will be defined as weak, so that multiple definitions
      are permitted.  The GNU linker extension is to actually discard
      all but one of the sections.  */
-  if (CONST_STRNEQ (name, ".gnu.linkonce"))
+  if (startswith (name, ".gnu.linkonce"))
     sec_flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
 #endif
 
@@ -1337,8 +1370,7 @@ styp_to_sec_flags (bfd *abfd,
 INTERNAL_DEFINITION
 	bfd_coff_backend_data
 
-CODE_FRAGMENT
-
+INTERNAL
 .{* COFF symbol classifications.  *}
 .
 .enum coff_symbol_classification
@@ -1359,7 +1391,10 @@ CODE_FRAGMENT
 .  (asection *, struct bfd_link_info *, struct internal_reloc *,
 .   struct coff_link_hash_entry *, struct internal_syment *);
 .
+
 Special entry points for gdb to swap in coff symbol table parts:
+
+CODE_FRAGMENT
 .typedef struct
 .{
 .  void (*_bfd_coff_swap_aux_in)
@@ -1400,14 +1435,14 @@ Special entry points for gdb to swap in
 .  unsigned int _bfd_relsz;
 .  unsigned int _bfd_linesz;
 .  unsigned int _bfd_filnmlen;
-.  bfd_boolean _bfd_coff_long_filenames;
+.  bool _bfd_coff_long_filenames;
 .
-.  bfd_boolean _bfd_coff_long_section_names;
-.  bfd_boolean (*_bfd_coff_set_long_section_names)
+.  bool _bfd_coff_long_section_names;
+.  bool (*_bfd_coff_set_long_section_names)
 .    (bfd *, int);
 .
 .  unsigned int _bfd_coff_default_section_alignment_power;
-.  bfd_boolean _bfd_coff_force_symnames_in_strings;
+.  bool _bfd_coff_force_symnames_in_strings;
 .  unsigned int _bfd_coff_debug_string_prefix_length;
 .  unsigned int _bfd_coff_max_nscns;
 .
@@ -1423,38 +1458,38 @@ Special entry points for gdb to swap in
 .  void (*_bfd_coff_swap_reloc_in)
 .    (bfd *abfd, void *, void *);
 .
-.  bfd_boolean (*_bfd_coff_bad_format_hook)
+.  bool (*_bfd_coff_bad_format_hook)
 .    (bfd *, void *);
 .
-.  bfd_boolean (*_bfd_coff_set_arch_mach_hook)
+.  bool (*_bfd_coff_set_arch_mach_hook)
 .    (bfd *, void *);
 .
 .  void * (*_bfd_coff_mkobject_hook)
 .    (bfd *, void *, void *);
 .
-.  bfd_boolean (*_bfd_styp_to_sec_flags_hook)
+.  bool (*_bfd_styp_to_sec_flags_hook)
 .    (bfd *, void *, const char *, asection *, flagword *);
 .
 .  void (*_bfd_set_alignment_hook)
 .    (bfd *, asection *, void *);
 .
-.  bfd_boolean (*_bfd_coff_slurp_symbol_table)
+.  bool (*_bfd_coff_slurp_symbol_table)
 .    (bfd *);
 .
-.  bfd_boolean (*_bfd_coff_symname_in_debug)
+.  bool (*_bfd_coff_symname_in_debug)
 .    (bfd *, struct internal_syment *);
 .
-.  bfd_boolean (*_bfd_coff_pointerize_aux_hook)
+.  bool (*_bfd_coff_pointerize_aux_hook)
 .    (bfd *, combined_entry_type *, combined_entry_type *,
 .     unsigned int, combined_entry_type *);
 .
-.  bfd_boolean (*_bfd_coff_print_aux)
+.  bool (*_bfd_coff_print_aux)
 .    (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
 .     combined_entry_type *, unsigned int);
 .
-.  void (*_bfd_coff_reloc16_extra_cases)
+.  bool (*_bfd_coff_reloc16_extra_cases)
 .    (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
-.     bfd_byte *, unsigned int *, unsigned int *);
+.     bfd_byte *, size_t *, size_t *);
 .
 .  int (*_bfd_coff_reloc16_estimate)
 .    (bfd *, asection *, arelent *, unsigned int,
@@ -1463,13 +1498,13 @@ Special entry points for gdb to swap in
 .  enum coff_symbol_classification (*_bfd_coff_classify_symbol)
 .    (bfd *, struct internal_syment *);
 .
-.  bfd_boolean (*_bfd_coff_compute_section_file_positions)
+.  bool (*_bfd_coff_compute_section_file_positions)
 .    (bfd *);
 .
-.  bfd_boolean (*_bfd_coff_start_final_link)
+.  bool (*_bfd_coff_start_final_link)
 .    (bfd *, struct bfd_link_info *);
 .
-.  bfd_boolean (*_bfd_coff_relocate_section)
+.  bool (*_bfd_coff_relocate_section)
 .    (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
 .     struct internal_reloc *, struct internal_syment *, asection **);
 .
@@ -1477,28 +1512,30 @@ Special entry points for gdb to swap in
 .    (bfd *, asection *, struct internal_reloc *,
 .     struct coff_link_hash_entry *, struct internal_syment *, bfd_vma *);
 .
-.  bfd_boolean (*_bfd_coff_adjust_symndx)
+.  bool (*_bfd_coff_adjust_symndx)
 .    (bfd *, struct bfd_link_info *, bfd *, asection *,
-.     struct internal_reloc *, bfd_boolean *);
+.     struct internal_reloc *, bool *);
 .
-.  bfd_boolean (*_bfd_coff_link_add_one_symbol)
+.  bool (*_bfd_coff_link_add_one_symbol)
 .    (struct bfd_link_info *, bfd *, const char *, flagword,
-.     asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
+.     asection *, bfd_vma, const char *, bool, bool,
 .     struct bfd_link_hash_entry **);
 .
-.  bfd_boolean (*_bfd_coff_link_output_has_begun)
+.  bool (*_bfd_coff_link_output_has_begun)
 .    (bfd *, struct coff_final_link_info *);
 .
-.  bfd_boolean (*_bfd_coff_final_link_postscript)
+.  bool (*_bfd_coff_final_link_postscript)
 .    (bfd *, struct coff_final_link_info *);
 .
-.  bfd_boolean (*_bfd_coff_print_pdata)
+.  bool (*_bfd_coff_print_pdata)
 .    (bfd *, void *);
 .
 .} bfd_coff_backend_data;
 .
+
+INTERNAL
 .#define coff_backend_info(abfd) \
-.  ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
+.  ((const bfd_coff_backend_data *) (abfd)->xvec->backend_data)
 .
 .#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
 .  ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
@@ -1541,7 +1578,7 @@ Special entry points for gdb to swap in
 .#define bfd_coff_long_filenames(abfd) \
 .  (coff_backend_info (abfd)->_bfd_coff_long_filenames)
 .#define bfd_coff_long_section_names(abfd) \
-.  (coff_backend_info (abfd)->_bfd_coff_long_section_names)
+.  (coff_data (abfd)->long_section_names)
 .#define bfd_coff_set_long_section_names(abfd, enable) \
 .  ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
 .#define bfd_coff_default_section_alignment_power(abfd) \
@@ -1640,45 +1677,45 @@ Special entry points for gdb to swap in
 .{* Macro: Returns true if the bfd is a PE executable as opposed to a
 .   PE object file.  *}
 .#define bfd_pei_p(abfd) \
-.  (CONST_STRNEQ ((abfd)->xvec->name, "pei-"))
+.  (startswith ((abfd)->xvec->name, "pei-"))
 */
 
 /* See whether the magic number matches.  */
 
-static bfd_boolean
+static bool
 coff_bad_format_hook (bfd * abfd ATTRIBUTE_UNUSED, void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
   if (BADMAG (*internal_f))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 #ifdef TICOFF
-static bfd_boolean
+static bool
 ticoff0_bad_format_hook (bfd *abfd ATTRIBUTE_UNUSED, void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
   if (COFF0_BADMAG (*internal_f))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 #endif
 
 #ifdef TICOFF
-static bfd_boolean
+static bool
 ticoff1_bad_format_hook (bfd *abfd ATTRIBUTE_UNUSED, void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
   if (COFF1_BADMAG (*internal_f))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 #endif
 
@@ -1748,11 +1785,11 @@ static const unsigned int coff_section_a
 /* Initialize a section structure with information peculiar to this
    particular implementation of COFF.  */
 
-static bfd_boolean
+static bool
 coff_new_section_hook (bfd * abfd, asection * section)
 {
   combined_entry_type *native;
-  bfd_size_type amt;
+  size_t amt;
   unsigned char sclass = C_STAT;
 
   section->alignment_power = COFF_DEFAULT_SECTION_ALIGNMENT_POWER;
@@ -1770,7 +1807,7 @@ coff_new_section_hook (bfd * abfd, asect
 
       for (i = 0; i < XCOFF_DWSECT_NBR_NAMES; i++)
 	if (strcmp (bfd_section_name (section),
-		    xcoff_dwsect_names[i].name) == 0)
+		    xcoff_dwsect_names[i].xcoff_name) == 0)
 	  {
 	    section->alignment_power = 0;
 	    sclass = C_DWARF;
@@ -1781,7 +1818,7 @@ coff_new_section_hook (bfd * abfd, asect
 
   /* Set up the section symbol.  */
   if (!_bfd_generic_new_section_hook (abfd, section))
-    return FALSE;
+    return false;
 
   /* Allocate aux records for section symbols, to store size and
      related info.
@@ -1791,7 +1828,7 @@ coff_new_section_hook (bfd * abfd, asect
   amt = sizeof (combined_entry_type) * 10;
   native = (combined_entry_type *) bfd_zalloc (abfd, amt);
   if (native == NULL)
-    return FALSE;
+    return false;
 
   /* We don't need to set up n_name, n_value, or n_scnum in the native
      symbol information, since they'll be overridden by the BFD symbol
@@ -1799,7 +1836,7 @@ coff_new_section_hook (bfd * abfd, asect
      in case this symbol winds up getting written out.  The value 0
      for n_numaux is already correct.  */
 
-  native->is_sym = TRUE;
+  native->is_sym = true;
   native->u.syment.n_type = T_NULL;
   native->u.syment.n_sclass = sclass;
 
@@ -1809,7 +1846,7 @@ coff_new_section_hook (bfd * abfd, asect
 				     coff_section_alignment_table,
 				     coff_section_alignment_table_size);
 
-  return TRUE;
+  return true;
 }
 
 #ifdef COFF_ALIGN_IN_SECTION_HEADER
@@ -1843,7 +1880,7 @@ coff_set_alignment_hook (bfd * abfd ATTR
 			 void * scnhdr)
 {
   struct internal_scnhdr *hdr = (struct internal_scnhdr *) scnhdr;
-  bfd_size_type amt;
+  size_t amt;
   unsigned int alignment_power_const
     = hdr->s_flags & IMAGE_SCN_ALIGN_POWER_BIT_MASK;
 
@@ -1904,14 +1941,20 @@ coff_set_alignment_hook (bfd * abfd ATTR
       file_ptr oldpos = bfd_tell (abfd);
       bfd_size_type relsz = bfd_coff_relsz (abfd);
 
-      if (bfd_seek (abfd, (file_ptr) hdr->s_relptr, 0) != 0)
+      if (bfd_seek (abfd, hdr->s_relptr, 0) != 0)
 	return;
-      if (bfd_bread (& dst, relsz, abfd) != relsz)
+      if (bfd_read (& dst, relsz, abfd) != relsz)
 	return;
 
-      coff_swap_reloc_in (abfd, &dst, &n);
+      bfd_coff_swap_reloc_in (abfd, &dst, &n);
       if (bfd_seek (abfd, oldpos, 0) != 0)
 	return;
+      if (n.r_vaddr < 0x10000)
+	{
+	  _bfd_error_handler (_("%pB: overflow reloc count too small"), abfd);
+	  bfd_set_error (bfd_error_bad_value);
+	  return;
+	}
       section->reloc_count = hdr->s_nreloc = n.r_vaddr - 1;
       section->rel_filepos += relsz;
     }
@@ -1954,6 +1997,39 @@ coff_set_alignment_hook (bfd *abfd, asec
 }
 
 #else /* ! RS6000COFF_C */
+#if defined (COFF_GO32_EXE) || defined (COFF_GO32)
+
+static void
+coff_set_alignment_hook (bfd * abfd, asection * section, void * scnhdr)
+{
+  struct internal_scnhdr *hdr = (struct internal_scnhdr *) scnhdr;
+
+  /* Check for extended relocs.  */
+  if (hdr->s_flags & IMAGE_SCN_LNK_NRELOC_OVFL)
+    {
+      struct external_reloc dst;
+      struct internal_reloc n;
+      const file_ptr oldpos = bfd_tell (abfd);
+      const bfd_size_type relsz = bfd_coff_relsz (abfd);
+
+      if (bfd_seek (abfd, hdr->s_relptr, 0) != 0)
+	return;
+      if (bfd_read (& dst, relsz, abfd) != relsz)
+	return;
+
+      bfd_coff_swap_reloc_in (abfd, &dst, &n);
+      if (bfd_seek (abfd, oldpos, 0) != 0)
+	return;
+      section->reloc_count = hdr->s_nreloc = n.r_vaddr - 1;
+      section->rel_filepos += relsz;
+    }
+  else if (hdr->s_nreloc == 0xffff)
+    _bfd_error_handler
+      (_("%pB: warning: claims to have 0xffff relocs, without overflow"),
+       abfd);
+}
+
+#else /* ! COFF_GO32_EXE && ! COFF_GO32 */
 
 static void
 coff_set_alignment_hook (bfd *abfd ATTRIBUTE_UNUSED,
@@ -1962,21 +2038,23 @@ coff_set_alignment_hook (bfd *abfd ATTRI
 {
 }
 
+#endif /* ! COFF_GO32_EXE && ! COFF_GO32 */
 #endif /* ! RS6000COFF_C */
 #endif /* ! COFF_WITH_PE */
 #endif /* ! COFF_ALIGN_IN_SECTION_HEADER */
 
 #ifndef coff_mkobject
 
-static bfd_boolean
+static bool
 coff_mkobject (bfd * abfd)
 {
   coff_data_type *coff;
-  bfd_size_type amt = sizeof (coff_data_type);
+  size_t amt = sizeof (coff_data_type);
 
   abfd->tdata.coff_obj_data = bfd_zalloc (abfd, amt);
   if (abfd->tdata.coff_obj_data == NULL)
-    return FALSE;
+    return false;
+
   coff = coff_data (abfd);
   coff->symbols = NULL;
   coff->conversion_table = NULL;
@@ -1984,9 +2062,12 @@ coff_mkobject (bfd * abfd)
   coff->relocbase = 0;
   coff->local_toc_sym_map = 0;
 
+  bfd_coff_long_section_names (abfd)
+    = coff_backend_info (abfd)->_bfd_coff_long_section_names;
+
 /*  make_abs_section(abfd);*/
 
-  return TRUE;
+  return true;
 }
 #endif
 
@@ -2040,7 +2121,7 @@ coff_mkobject_hook (bfd * abfd,
 # else
       xcoff->xcoff64 = 0;
 # endif
-      xcoff->full_aouthdr = TRUE;
+      xcoff->full_aouthdr = true;
       xcoff->toc = internal_a->o_toc;
       xcoff->sntoc = internal_a->o_sntoc;
       xcoff->snentry = internal_a->o_snentry;
@@ -2066,15 +2147,6 @@ coff_mkobject_hook (bfd * abfd,
     abfd->flags |= HAS_DEBUG;
 #endif
 
-  if ((internal_f->f_flags & F_GO32STUB) != 0)
-    {
-      coff->go32stub = (char *) bfd_alloc (abfd, (bfd_size_type) GO32_STUBSIZE);
-      if (coff->go32stub == NULL)
-	return NULL;
-    }
-  if (coff->go32stub != NULL)
-    memcpy (coff->go32stub, internal_f->go32stub, GO32_STUBSIZE);
-
   return coff;
 }
 #endif
@@ -2086,7 +2158,7 @@ coff_mkobject_hook (bfd * abfd,
    would be target independent and would also be much more successful
    at linking together COFF files for different architectures.  */
 
-static bfd_boolean
+static bool
 coff_set_arch_mach_hook (bfd *abfd, void * filehdr)
 {
   unsigned long machine;
@@ -2097,11 +2169,6 @@ coff_set_arch_mach_hook (bfd *abfd, void
   machine = 0;
   switch (internal_f->f_magic)
     {
-#ifdef PPCMAGIC
-    case PPCMAGIC:
-      arch = bfd_arch_powerpc;
-      break;
-#endif
 #ifdef I386MAGIC
     case I386MAGIC:
     case I386PTXMAGIC:
@@ -2156,20 +2223,42 @@ coff_set_arch_mach_hook (bfd *abfd, void
 	}
       break;
 #endif
+#ifdef AARCH64MAGIC
+    case AARCH64MAGIC:
+      arch = bfd_arch_aarch64;
+      machine = internal_f->f_flags & F_AARCH64_ARCHITECTURE_MASK;
+      break;
+#endif
+#ifdef LOONGARCH64MAGIC
+    case LOONGARCH64MAGIC:
+      arch = bfd_arch_loongarch;
+      machine = internal_f->f_flags & F_LOONGARCH64_ARCHITECTURE_MASK;
+      break;
+#endif
+#ifdef RISCV64MAGIC
+    case RISCV64MAGIC:
+      arch = bfd_arch_riscv;
+      machine = bfd_mach_riscv64;
+      break;
+#endif
 #ifdef Z80MAGIC
     case Z80MAGIC:
       arch = bfd_arch_z80;
       switch (internal_f->f_flags & F_MACHMASK)
 	{
-	case 0:
 	case bfd_mach_z80strict << 12:
 	case bfd_mach_z80 << 12:
+	case bfd_mach_z80n << 12:
 	case bfd_mach_z80full << 12:
 	case bfd_mach_r800 << 12:
+	case bfd_mach_gbz80 << 12:
+	case bfd_mach_z180 << 12:
+	case bfd_mach_ez80_z80 << 12:
+	case bfd_mach_ez80_adl << 12:
 	  machine = ((unsigned)internal_f->f_flags & F_MACHMASK) >> 12;
 	  break;
 	default:
-	  return FALSE;
+	  return false;
 	}
       break;
 #endif
@@ -2185,7 +2274,7 @@ coff_set_arch_mach_hook (bfd *abfd, void
 	  machine = bfd_mach_z8002;
 	  break;
 	default:
-	  return FALSE;
+	  return false;
 	}
       break;
 #endif
@@ -2218,15 +2307,11 @@ coff_set_arch_mach_hook (bfd *abfd, void
 		struct internal_syment sym;
 		bfd_size_type amt = bfd_coff_symesz (abfd);
 
-		buf = bfd_malloc (amt);
+		if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0)
+		  return false;
+		buf = _bfd_malloc_and_read (abfd, amt, amt);
 		if (buf == NULL)
-		  return FALSE;
-		if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
-		    || bfd_bread (buf, amt, abfd) != amt)
-		  {
-		    free (buf);
-		    return FALSE;
-		  }
+		  return false;
 		bfd_coff_swap_sym_in (abfd, buf, & sym);
 		if (sym.n_sclass == C_FILE)
 		  cputype = sym.n_type & 0xff;
@@ -2330,12 +2415,6 @@ coff_set_arch_mach_hook (bfd *abfd, void
       break;
 #endif
 
-#ifdef TIC80_ARCH_MAGIC
-    case TIC80_ARCH_MAGIC:
-      arch = bfd_arch_tic80;
-      break;
-#endif
-
 #ifdef MCOREMAGIC
     case MCOREMAGIC:
       arch = bfd_arch_mcore;
@@ -2348,17 +2427,17 @@ coff_set_arch_mach_hook (bfd *abfd, void
     }
 
   bfd_default_set_arch_mach (abfd, arch, machine);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 symname_in_debug_hook (bfd *abfd ATTRIBUTE_UNUSED,
 		       struct internal_syment *sym ATTRIBUTE_UNUSED)
 {
 #ifdef SYMNAME_IN_DEBUG
   return SYMNAME_IN_DEBUG (sym) != 0;
 #else
-  return FALSE;
+  return false;
 #endif
 }
 
@@ -2370,7 +2449,7 @@ symname_in_debug_hook (bfd *abfd ATTRIBU
 
 /* Handle the csect auxent of a C_EXT, C_AIX_WEAKEXT or C_HIDEXT symbol.  */
 
-static bfd_boolean
+static bool
 coff_pointerize_aux_hook (bfd *abfd ATTRIBUTE_UNUSED,
 			  combined_entry_type *table_base,
 			  combined_entry_type *symbol,
@@ -2384,21 +2463,22 @@ coff_pointerize_aux_hook (bfd *abfd ATTR
       && indaux + 1 == symbol->u.syment.n_numaux)
     {
       BFD_ASSERT (! aux->is_sym);
-      if (SMTYP_SMTYP (aux->u.auxent.x_csect.x_smtyp) == XTY_LD)
+      if (SMTYP_SMTYP (aux->u.auxent.x_csect.x_smtyp) == XTY_LD
+	  && aux->u.auxent.x_csect.x_scnlen.u64 < obj_raw_syment_count (abfd))
 	{
 	  aux->u.auxent.x_csect.x_scnlen.p =
-	    table_base + aux->u.auxent.x_csect.x_scnlen.l;
+	    table_base + aux->u.auxent.x_csect.x_scnlen.u64;
 	  aux->fix_scnlen = 1;
 	}
 
       /* Return TRUE to indicate that the caller should not do any
 	 further work on this auxent.  */
-      return TRUE;
+      return true;
     }
 
   /* Return FALSE to indicate that this auxent should be handled by
      the caller.  */
-  return FALSE;
+  return false;
 }
 
 #else
@@ -2407,7 +2487,7 @@ coff_pointerize_aux_hook (bfd *abfd ATTR
 
 /* Print an aux entry.  This returns TRUE if it has printed it.  */
 
-static bfd_boolean
+static bool
 coff_print_aux (bfd *abfd ATTRIBUTE_UNUSED,
 		FILE *file ATTRIBUTE_UNUSED,
 		combined_entry_type *table_base ATTRIBUTE_UNUSED,
@@ -2426,21 +2506,21 @@ coff_print_aux (bfd *abfd ATTRIBUTE_UNUS
       if (SMTYP_SMTYP (aux->u.auxent.x_csect.x_smtyp) != XTY_LD)
 	{
 	  BFD_ASSERT (! aux->fix_scnlen);
-	  fprintf (file, "val %5" BFD_VMA_FMT "d",
-		   aux->u.auxent.x_csect.x_scnlen.l);
+	  fprintf (file, "val %5" PRIu64,
+		   aux->u.auxent.x_csect.x_scnlen.u64);
 	}
       else
 	{
 	  fprintf (file, "indx ");
 	  if (! aux->fix_scnlen)
-	    fprintf (file, "%4" BFD_VMA_FMT "d",
-		     aux->u.auxent.x_csect.x_scnlen.l);
+	    fprintf (file, "%4" PRIu64,
+		     aux->u.auxent.x_csect.x_scnlen.u64);
 	  else
 	    fprintf (file, "%4ld",
 		     (long) (aux->u.auxent.x_csect.x_scnlen.p - table_base));
 	}
       fprintf (file,
-	       " prmhsh %ld snhsh %u typ %d algn %d clss %u stb %ld snstb %u",
+	       " prmhsh %u snhsh %u typ %d algn %d clss %u stb %u snstb %u",
 	       aux->u.auxent.x_csect.x_parmhash,
 	       (unsigned int) aux->u.auxent.x_csect.x_snhash,
 	       SMTYP_SMTYP (aux->u.auxent.x_csect.x_smtyp),
@@ -2448,12 +2528,12 @@ coff_print_aux (bfd *abfd ATTRIBUTE_UNUS
 	       (unsigned int) aux->u.auxent.x_csect.x_smclas,
 	       aux->u.auxent.x_csect.x_stab,
 	       (unsigned int) aux->u.auxent.x_csect.x_snstab);
-      return TRUE;
+      return true;
     }
 #endif
 
   /* Return FALSE to indicate that no special action was taken.  */
-  return FALSE;
+  return false;
 }
 
 /*
@@ -2489,7 +2569,7 @@ compare_arelent_ptr (const void * x, con
 
 #endif /* TARG_AUX */
 
-static bfd_boolean
+static bool
 coff_write_relocs (bfd * abfd, int first_undef)
 {
   asection *s;
@@ -2513,7 +2593,7 @@ coff_write_relocs (bfd * abfd, int first
 	if (p == NULL)
 	  {
 	    if (s->reloc_count > 0)
-	      return FALSE;
+	      return false;
 	  }
 	else
 	  {
@@ -2524,10 +2604,10 @@ coff_write_relocs (bfd * abfd, int first
 #endif
 
       if (bfd_seek (abfd, s->rel_filepos, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
-#ifdef COFF_WITH_PE
-      if (obj_pe (abfd) && s->reloc_count >= 0xffff)
+#ifdef COFF_WITH_EXTENDED_RELOC_COUNTER
+      if ((obj_pe (abfd) || obj_go32 (abfd)) && s->reloc_count >= 0xffff)
 	{
 	  /* Encode real count here as first reloc.  */
 	  struct internal_reloc n;
@@ -2536,9 +2616,9 @@ coff_write_relocs (bfd * abfd, int first
 	  /* Add one to count *this* reloc (grr).  */
 	  n.r_vaddr = s->reloc_count + 1;
 	  coff_swap_reloc_out (abfd, &n, &dst);
-	  if (bfd_bwrite (& dst, (bfd_size_type) bfd_coff_relsz (abfd),
-			  abfd) != bfd_coff_relsz (abfd))
-	    return FALSE;
+	  if (bfd_write (&dst, bfd_coff_relsz (abfd), abfd)
+	      != bfd_coff_relsz (abfd))
+	    return false;
 	}
 #endif
 
@@ -2610,7 +2690,7 @@ coff_write_relocs (bfd * abfd, int first
 			_bfd_error_handler (_("%pB: reloc against a non-existent"
 					      " symbol index: %ld"),
 					    abfd, n.r_symndx);
-			return FALSE;
+			return false;
 		      }
 		  }
 	      }
@@ -2621,30 +2701,31 @@ coff_write_relocs (bfd * abfd, int first
 
 #ifdef SELECT_RELOC
 	  /* Work out reloc type from what is required.  */
-	  SELECT_RELOC (n, q->howto);
+	  if (q->howto)
+	    SELECT_RELOC (n, q->howto);
 #else
-	  n.r_type = q->howto->type;
+	  if (q->howto)
+	    n.r_type = q->howto->type;
 #endif
 	  coff_swap_reloc_out (abfd, &n, &dst);
 
-	  if (bfd_bwrite (& dst, (bfd_size_type) bfd_coff_relsz (abfd),
-			 abfd) != bfd_coff_relsz (abfd))
-	    return FALSE;
+	  if (bfd_write (&dst, bfd_coff_relsz (abfd), abfd)
+	      != bfd_coff_relsz (abfd))
+	    return false;
 	}
 
 #ifdef TARG_AUX
-      if (p != NULL)
-	free (p);
+      free (p);
 #endif
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set flags and magic number of a coff file from architecture and machine
    type.  Result is TRUE if we can represent the arch&type, FALSE if not.  */
 
-static bfd_boolean
+static bool
 coff_set_flags (bfd * abfd,
 		unsigned int *magicp ATTRIBUTE_UNUSED,
 		unsigned short *flagsp ATTRIBUTE_UNUSED)
@@ -2656,17 +2737,21 @@ coff_set_flags (bfd * abfd,
       *magicp = Z80MAGIC;
       switch (bfd_get_mach (abfd))
 	{
-	case 0:
 	case bfd_mach_z80strict:
 	case bfd_mach_z80:
+	case bfd_mach_z80n:
 	case bfd_mach_z80full:
 	case bfd_mach_r800:
+	case bfd_mach_gbz80:
+	case bfd_mach_z180:
+	case bfd_mach_ez80_z80:
+	case bfd_mach_ez80_adl:
 	  *flagsp = bfd_get_mach (abfd) << 12;
 	  break;
 	default:
-	  return FALSE;
+	  return false;
 	}
-      return TRUE;
+      return true;
 #endif
 
 #ifdef Z8KMAGIC
@@ -2677,15 +2762,15 @@ coff_set_flags (bfd * abfd,
 	{
 	case bfd_mach_z8001: *flagsp = F_Z8001;	break;
 	case bfd_mach_z8002: *flagsp = F_Z8002;	break;
-	default:	     return FALSE;
+	default:	     return false;
 	}
-      return TRUE;
+      return true;
 #endif
 
 #ifdef TIC30MAGIC
     case bfd_arch_tic30:
       *magicp = TIC30MAGIC;
-      return TRUE;
+      return true;
 #endif
 
 #ifdef TICOFF_DEFAULT_MAGIC
@@ -2708,17 +2793,29 @@ coff_set_flags (bfd * abfd,
 	      *magicp = TICOFF2MAGIC;
 	      break;
 	    default:
-	      return FALSE;
+	      return false;
 	    }
 	}
       TICOFF_TARGET_MACHINE_SET (flagsp, bfd_get_mach (abfd));
-      return TRUE;
+      return true;
+#endif
+
+#ifdef AARCH64MAGIC
+    case bfd_arch_aarch64:
+      * magicp = AARCH64MAGIC;
+      return true;
+#endif
+
+#ifdef LOONGARCH64MAGIC
+    case bfd_arch_loongarch:
+      * magicp = LOONGARCH64MAGIC;
+      return true;
 #endif
 
-#ifdef TIC80_ARCH_MAGIC
-    case bfd_arch_tic80:
-      *magicp = TIC80_ARCH_MAGIC;
-      return TRUE;
+#ifdef RISCV64MAGIC
+    case bfd_arch_riscv:
+      * magicp = RISCV64MAGIC;
+      return true;
 #endif
 
 #ifdef ARMMAGIC
@@ -2757,13 +2854,7 @@ coff_set_flags (bfd * abfd,
 	case bfd_mach_arm_5TE: * flagsp |= F_ARM_5; break;
 	case bfd_mach_arm_XScale: * flagsp |= F_ARM_5; break;
 	}
-      return TRUE;
-#endif
-
-#ifdef PPCMAGIC
-    case bfd_arch_powerpc:
-      *magicp = PPCMAGIC;
-      return TRUE;
+      return true;
 #endif
 
 #if defined(I386MAGIC) || defined(AMD64MAGIC)
@@ -2778,13 +2869,13 @@ coff_set_flags (bfd * abfd,
 #if defined AMD64MAGIC
       *magicp = AMD64MAGIC;
 #endif
-      return TRUE;
+      return true;
 #endif
 
 #ifdef IA64MAGIC
     case bfd_arch_ia64:
       *magicp = IA64MAGIC;
-      return TRUE;
+      return true;
 #endif
 
 #ifdef SH_ARCH_MAGIC_BIG
@@ -2797,13 +2888,13 @@ coff_set_flags (bfd * abfd,
       else
 	*magicp = SH_ARCH_MAGIC_LITTLE;
 #endif
-      return TRUE;
+      return true;
 #endif
 
 #ifdef MIPS_ARCH_MAGIC_WINCE
     case bfd_arch_mips:
       *magicp = MIPS_ARCH_MAGIC_WINCE;
-      return TRUE;
+      return true;
 #endif
 
 #ifdef SPARCMAGIC
@@ -2813,35 +2904,31 @@ coff_set_flags (bfd * abfd,
       /* Just overwrite the usual value if we're doing Lynx.  */
       *magicp = LYNXCOFFMAGIC;
 #endif
-      return TRUE;
+      return true;
 #endif
 
 #ifdef RS6000COFF_C
     case bfd_arch_rs6000:
-#ifndef PPCMAGIC
     case bfd_arch_powerpc:
-#endif
       BFD_ASSERT (bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
       *magicp = bfd_xcoff_magic_number (abfd);
-      return TRUE;
+      return true;
 #endif
 
 #ifdef MCOREMAGIC
     case bfd_arch_mcore:
       * magicp = MCOREMAGIC;
-      return TRUE;
+      return true;
 #endif
 
     default:			/* Unknown architecture.  */
-      /* Fall through to "return FALSE" below, to avoid
-	 "statement never reached" errors on the one below.  */
       break;
     }
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 coff_set_arch_mach (bfd * abfd,
 		    enum bfd_architecture arch,
 		    unsigned long machine)
@@ -2850,13 +2937,13 @@ coff_set_arch_mach (bfd * abfd,
   unsigned short dummy2;
 
   if (! bfd_default_set_arch_mach (abfd, arch, machine))
-    return FALSE;
+    return false;
 
   if (arch != bfd_arch_unknown
       && ! coff_set_flags (abfd, &dummy1, &dummy2))
-    return FALSE;		/* We can't represent this type.  */
+    return false;		/* We can't represent this type.  */
 
-  return TRUE;			/* We're easy...  */
+  return true;			/* We're easy...  */
 }
 
 #ifdef COFF_IMAGE_WITH_PE
@@ -2883,16 +2970,16 @@ sort_by_secaddr (const void * arg1, cons
 /* Calculate the file position for each section.  */
 
 #define ALIGN_SECTIONS_IN_FILE
-#if defined(TIC80COFF) || defined(TICOFF)
+#ifdef TICOFF
 #undef ALIGN_SECTIONS_IN_FILE
 #endif
 
-static bfd_boolean
+static bool
 coff_compute_section_file_positions (bfd * abfd)
 {
   asection *current;
   file_ptr sofar = bfd_coff_filhsz (abfd);
-  bfd_boolean align_adjust;
+  bool align_adjust;
   unsigned int target_index;
 #ifdef ALIGN_SECTIONS_IN_FILE
   asection *previous = NULL;
@@ -2900,7 +2987,7 @@ coff_compute_section_file_positions (bfd
 #endif
 
 #ifdef COFF_IMAGE_WITH_PE
-  int page_size;
+  unsigned int page_size;
 
   if (coff_data (abfd)->link_info
       || (pe_data (abfd) && pe_data (abfd)->pe_opthdr.FileAlignment))
@@ -2911,22 +2998,12 @@ coff_compute_section_file_positions (bfd
 	 This repairs 'ld -r' for arm-wince-pe target.  */
       if (page_size == 0)
 	page_size = 1;
-
-      /* PR 17512: file: 0ac816d3.  */
-      if (page_size < 0)
-	{
-	  bfd_set_error (bfd_error_file_too_big);
-	  _bfd_error_handler
-	    /* xgettext:c-format */
-	    (_("%pB: page size is too large (0x%x)"), abfd, page_size);
-	  return FALSE;
-	}
     }
   else
     page_size = PE_DEF_FILE_ALIGNMENT;
 #else
 #ifdef COFF_PAGE_SIZE
-  int page_size = COFF_PAGE_SIZE;
+  unsigned int page_size = COFF_PAGE_SIZE;
 #endif
 #endif
 
@@ -2994,6 +3071,9 @@ coff_compute_section_file_positions (bfd
       sofar += bfd_coff_scnhsz (abfd);
 #endif
 
+  if (coff_data (abfd)->section_by_target_index)
+    htab_empty (coff_data (abfd)->section_by_target_index);
+
 #ifdef COFF_IMAGE_WITH_PE
   {
     /* PE requires the sections to be in memory order when listed in
@@ -3008,9 +3088,10 @@ coff_compute_section_file_positions (bfd
     bfd_size_type amt;
 
 #ifdef COFF_PAGE_SIZE
-    /* Clear D_PAGED if section alignment is smaller than
-       COFF_PAGE_SIZE.  */
-   if (pe_data (abfd)->pe_opthdr.SectionAlignment < COFF_PAGE_SIZE)
+    /* Clear D_PAGED if section / file alignment aren't suitable for
+       paging at COFF_PAGE_SIZE granularity.  */
+   if (pe_data (abfd)->pe_opthdr.SectionAlignment < COFF_PAGE_SIZE
+       || page_size < COFF_PAGE_SIZE)
      abfd->flags &= ~D_PAGED;
 #endif
 
@@ -3022,7 +3103,7 @@ coff_compute_section_file_positions (bfd
     amt = sizeof (struct asection *) * (count + 1);
     section_list = (asection **) bfd_malloc (amt);
     if (section_list == NULL)
-      return FALSE;
+      return false;
 
     i = 0;
     for (current = abfd->sections; current != NULL; current = current->next)
@@ -3079,10 +3160,10 @@ coff_compute_section_file_positions (bfd
       _bfd_error_handler
 	/* xgettext:c-format */
 	(_("%pB: too many sections (%d)"), abfd, target_index);
-      return FALSE;
+      return false;
     }
 
-  align_adjust = FALSE;
+  align_adjust = false;
   for (current = abfd->sections;
        current != NULL;
        current = current->next)
@@ -3092,19 +3173,19 @@ coff_compute_section_file_positions (bfd
 	 page size too, and remember both sizes.  */
       if (coff_section_data (abfd, current) == NULL)
 	{
-	  bfd_size_type amt = sizeof (struct coff_section_tdata);
+	  size_t amt = sizeof (struct coff_section_tdata);
 
 	  current->used_by_bfd = bfd_zalloc (abfd, amt);
 	  if (current->used_by_bfd == NULL)
-	    return FALSE;
+	    return false;
 	}
       if (pei_section_data (abfd, current) == NULL)
 	{
-	  bfd_size_type amt = sizeof (struct pei_section_tdata);
+	  size_t amt = sizeof (struct pei_section_tdata);
 
 	  coff_section_data (abfd, current)->tdata = bfd_zalloc (abfd, amt);
 	  if (coff_section_data (abfd, current)->tdata == NULL)
-	    return FALSE;
+	    return false;
 	}
       if (pei_section_data (abfd, current)->virt_size == 0)
 	pei_section_data (abfd, current)->virt_size = current->size;
@@ -3131,7 +3212,11 @@ coff_compute_section_file_positions (bfd
 	     padding the previous section up if necessary.  */
 	  old_sofar = sofar;
 
-	  sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
+#ifdef COFF_IMAGE_WITH_PE
+	  sofar = BFD_ALIGN (sofar, page_size);
+#else
+	  sofar = BFD_ALIGN (sofar, (bfd_vma) 1 << current->alignment_power);
+#endif
 
 #ifdef RS6000COFF_C
 	  /* Make sure the file offset and the vma of .text/.data are at the
@@ -3150,10 +3235,16 @@ coff_compute_section_file_positions (bfd
 
 	     0 .text	     000054cc  10000128	 10000128  00000128  2**5
 			     CONTENTS, ALLOC, LOAD, CODE
+
+	     Don't perform the above tweak if the previous one is .tdata,
+	     as it will increase the memory allocated for every threads
+	     created and not just improve performances with gdb.
 	  */
 
-	  if (!strcmp (current->name, _TEXT)
-	      || !strcmp (current->name, _DATA))
+	  if ((current->flags & SEC_LOAD) != 0
+	      && (!strcmp (current->name, _TEXT)
+		  || !strcmp (current->name, _DATA))
+	      && (previous == NULL || strcmp(previous->name, _TDATA)))
 	    {
 	      bfd_vma align = 4096;
 	      bfd_vma sofar_off = sofar % align;
@@ -3165,7 +3256,8 @@ coff_compute_section_file_positions (bfd
 		sofar += align + vma_off - sofar_off;
 	    }
 #endif
-	  if (previous != NULL)
+	  if (previous != NULL
+	      && (previous->flags & SEC_LOAD) != 0)
 	    previous->size += sofar - old_sofar;
 	}
 
@@ -3195,14 +3287,18 @@ coff_compute_section_file_positions (bfd
 
 	  old_size = current->size;
 	  current->size = BFD_ALIGN (current->size,
-				     1 << current->alignment_power);
+				     (bfd_vma) 1 << current->alignment_power);
 	  align_adjust = current->size != old_size;
 	  sofar += current->size - old_size;
 	}
       else
 	{
 	  old_sofar = sofar;
-	  sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
+#ifdef COFF_IMAGE_WITH_PE
+	  sofar = BFD_ALIGN (sofar, page_size);
+#else
+	  sofar = BFD_ALIGN (sofar, (bfd_vma) 1 << current->alignment_power);
+#endif
 	  align_adjust = sofar != old_sofar;
 	  current->size += sofar - old_sofar;
 	}
@@ -3213,7 +3309,7 @@ coff_compute_section_file_positions (bfd
 	 size, in case the caller only writes out data to the
 	 unaligned size.  */
       if (pei_section_data (abfd, current)->virt_size < current->size)
-	align_adjust = TRUE;
+	align_adjust = true;
 #endif
 
 #ifdef _LIB
@@ -3240,37 +3336,35 @@ coff_compute_section_file_positions (bfd
 
       b = 0;
       if (bfd_seek (abfd, sofar - 1, SEEK_SET) != 0
-	  || bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1)
-	return FALSE;
+	  || bfd_write (&b, 1, abfd) != 1)
+	return false;
     }
 
   /* Make sure the relocations are aligned.  We don't need to make
      sure that this byte exists, because it will only matter if there
      really are relocs.  */
-  sofar = BFD_ALIGN (sofar, 1 << COFF_DEFAULT_SECTION_ALIGNMENT_POWER);
+  sofar = BFD_ALIGN (sofar,
+		     (bfd_vma) 1 << COFF_DEFAULT_SECTION_ALIGNMENT_POWER);
 
   obj_relocbase (abfd) = sofar;
-  abfd->output_has_begun = TRUE;
+  abfd->output_has_begun = true;
 
-  return TRUE;
+  return true;
 }
 
 #ifdef COFF_IMAGE_WITH_PE
 
-static unsigned int pelength;
-static unsigned int peheader;
-
-static bfd_boolean
-coff_read_word (bfd *abfd, unsigned int *value)
+static bool
+coff_read_word (bfd *abfd, unsigned int *value, unsigned int *pelength)
 {
   unsigned char b[2];
   int status;
 
-  status = bfd_bread (b, (bfd_size_type) 2, abfd);
+  status = bfd_read (b, 2, abfd);
   if (status < 1)
     {
       *value = 0;
-      return FALSE;
+      return false;
     }
 
   if (status == 1)
@@ -3278,81 +3372,136 @@ coff_read_word (bfd *abfd, unsigned int
   else
     *value = (unsigned int) (b[0] + (b[1] << 8));
 
-  pelength += (unsigned int) status;
+  *pelength += status;
 
-  return TRUE;
+  return true;
 }
 
+/* Read a two byte number from buffer B returning the result in VALUE.
+   No more than BUF_SIZE bytes will be read.
+   Returns true upobn success, false otherwise.
+   If successful, increases the value stored in PELENGTH by the number
+   of bytes read.  */
+
+static bool
+coff_read_word_from_buffer (unsigned char *  b,
+			    int              buf_size,
+                            unsigned int *   value,
+			    unsigned int *   pelength)
+{
+  if (buf_size < 1)
+    {
+      *value = 0;
+      return false;
+    }
+
+  if (buf_size == 1)
+    {
+      *value = (unsigned int)b[0];
+      *pelength += 1;
+    }
+  else
+    {
+      *value = (unsigned int)(b[0] + (b[1] << 8));
+      *pelength += 2;
+    }
+
+  return true;
+}
+
+#define COFF_CHECKSUM_BUFFER_SIZE 0x800000
+
 static unsigned int
-coff_compute_checksum (bfd *abfd)
+coff_compute_checksum (bfd *abfd, unsigned int *pelength)
 {
-  bfd_boolean more_data;
   file_ptr filepos;
   unsigned int value;
   unsigned int total;
+  unsigned char *buf;
+  int buf_size;
 
   total = 0;
-  pelength = 0;
+  *pelength = 0;
   filepos = (file_ptr) 0;
+  buf = (unsigned char *) bfd_malloc (COFF_CHECKSUM_BUFFER_SIZE);
+  if (buf == NULL)
+    return 0;
+  buf_size = 0;
 
   do
     {
+      unsigned char *cur_buf;
+      int cur_buf_size;
+
       if (bfd_seek (abfd, filepos, SEEK_SET) != 0)
 	return 0;
 
-      more_data = coff_read_word (abfd, &value);
-      total += value;
-      total = 0xffff & (total + (total >> 0x10));
-      filepos += 2;
+      buf_size = bfd_read (buf, COFF_CHECKSUM_BUFFER_SIZE, abfd);
+      cur_buf_size = buf_size;
+      cur_buf = buf;
+
+      while (cur_buf_size > 0)
+        {
+          coff_read_word_from_buffer (cur_buf, cur_buf_size, &value, pelength);
+          cur_buf += 2;
+          cur_buf_size -= 2;
+          total += value;
+          total = 0xffff & (total + (total >> 0x10));
+        }
+
+      filepos += buf_size;
     }
-  while (more_data);
+  while (buf_size > 0);
+
+  free (buf);
 
   return (0xffff & (total + (total >> 0x10)));
 }
 
-static bfd_boolean
+static bool
 coff_apply_checksum (bfd *abfd)
 {
   unsigned int computed;
   unsigned int checksum = 0;
+  unsigned int peheader;
+  unsigned int pelength;
 
   if (bfd_seek (abfd, 0x3c, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
-  if (!coff_read_word (abfd, &peheader))
-    return FALSE;
+  if (!coff_read_word (abfd, &peheader, &pelength))
+    return false;
 
   if (bfd_seek (abfd, peheader + 0x58, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   checksum = 0;
-  bfd_bwrite (&checksum, (bfd_size_type) 4, abfd);
+  if (bfd_write (&checksum, 4, abfd) != 4)
+    return false;
 
   if (bfd_seek (abfd, peheader, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
-  computed = coff_compute_checksum (abfd);
+  computed = coff_compute_checksum (abfd, &pelength);
 
   checksum = computed + pelength;
 
   if (bfd_seek (abfd, peheader + 0x58, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
-  bfd_bwrite (&checksum, (bfd_size_type) 4, abfd);
-
-  return TRUE;
+  return bfd_write (&checksum, 4, abfd) == 4;
 }
 
 #endif /* COFF_IMAGE_WITH_PE */
 
-static bfd_boolean
+static bool
 coff_write_object_contents (bfd * abfd)
 {
   asection *current;
-  bfd_boolean hasrelocs = FALSE;
-  bfd_boolean haslinno = FALSE;
+  bool hasrelocs = false;
+  bool haslinno = false;
 #ifdef COFF_IMAGE_WITH_PE
-  bfd_boolean hasdebug = FALSE;
+  bool hasdebug = false;
 #endif
   file_ptr scn_base;
   file_ptr reloc_base;
@@ -3360,10 +3509,14 @@ coff_write_object_contents (bfd * abfd)
   file_ptr sym_base;
   unsigned long reloc_size = 0, reloc_count = 0;
   unsigned long lnno_size = 0;
-  bfd_boolean long_section_names;
+  bool long_section_names;
   asection *text_sec = NULL;
   asection *data_sec = NULL;
   asection *bss_sec = NULL;
+#ifdef RS6000COFF_C
+  asection *tdata_sec = NULL;
+  asection *tbss_sec = NULL;
+#endif
   struct internal_filehdr internal_f;
   struct internal_aouthdr internal_a;
 #ifdef COFF_LONG_SECTION_NAMES
@@ -3379,7 +3532,7 @@ coff_write_object_contents (bfd * abfd)
   if (! abfd->output_has_begun)
     {
       if (! coff_compute_section_file_positions (abfd))
-	return FALSE;
+	return false;
     }
 
   reloc_base = obj_relocbase (abfd);
@@ -3389,9 +3542,9 @@ coff_write_object_contents (bfd * abfd)
   for (current = abfd->sections; current != NULL; current =
        current->next)
     {
-#ifdef COFF_WITH_PE
+#ifdef COFF_WITH_EXTENDED_RELOC_COUNTER
       /* We store the actual reloc count in the first reloc's addr.  */
-      if (obj_pe (abfd) && current->reloc_count >= 0xffff)
+      if ((obj_pe (abfd) || obj_go32 (abfd)) && current->reloc_count >= 0xffff)
 	reloc_count ++;
 #endif
       reloc_count += current->reloc_count;
@@ -3419,9 +3572,9 @@ coff_write_object_contents (bfd * abfd)
 	{
 	  current->rel_filepos = reloc_base;
 	  reloc_base += current->reloc_count * bfd_coff_relsz (abfd);
-#ifdef COFF_WITH_PE
+#ifdef COFF_WITH_EXTENDED_RELOC_COUNTER
 	  /* Extra reloc to hold real count.  */
-	  if (obj_pe (abfd) && current->reloc_count >= 0xffff)
+	  if ((obj_pe (abfd) || obj_go32 (abfd)) && current->reloc_count >= 0xffff)
 	    reloc_base += bfd_coff_relsz (abfd);
 #endif
 	}
@@ -3448,21 +3601,21 @@ coff_write_object_contents (bfd * abfd)
     }
 
   if (bfd_seek (abfd, scn_base, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
-  long_section_names = FALSE;
+  long_section_names = false;
   for (current = abfd->sections;
        current != NULL;
        current = current->next)
     {
       struct internal_scnhdr section;
 #ifdef COFF_IMAGE_WITH_PE
-      bfd_boolean is_reloc_section = FALSE;
+      bool is_reloc_section = false;
 
       if (strcmp (current->name, DOT_RELOC) == 0)
 	{
-	  is_reloc_section = TRUE;
-	  hasrelocs = TRUE;
+	  is_reloc_section = true;
+	  hasrelocs = true;
 	  pe_data (abfd)->has_reloc_section = 1;
 	}
 #endif
@@ -3481,35 +3634,66 @@ coff_write_object_contents (bfd * abfd)
 	  len = strlen (current->name);
 	  if (len > SCNNMLEN)
 	    {
-	      /* The s_name field is defined to be NUL-padded but need not be
-		 NUL-terminated.  We use a temporary buffer so that we can still
-		 sprintf all eight chars without splatting a terminating NUL
-		 over the first byte of the following member (s_paddr).  */
-	      /* PR 21096: The +20 is to stop a bogus warning from gcc7 about
-		 a possible buffer overflow.  */
-	      char s_name_buf[SCNNMLEN + 1 + 20];
 
 	      /* An inherent limitation of the /nnnnnnn notation used to indicate
 		 the offset of the long name in the string table is that we
 		 cannot address entries beyone the ten million byte boundary.  */
-	      if (string_size >= 10000000)
+	      if (string_size < 10000000)
+		{
+		  /* The s_name field is defined to be NUL-padded but need not
+		     be NUL-terminated.  We use a temporary buffer so that we
+		     can still sprintf all eight chars without splatting a
+		     terminating NUL over the first byte of the following
+		     member (s_paddr).  */
+		  /* PR 21096: The +20 is to stop a bogus warning from gcc7
+		     about a possible buffer overflow.  */
+		  char s_name_buf[SCNNMLEN + 1 + 20];
+
+		  /* We do not need to use snprintf here as we have already
+		     verified that string_size is not too big, plus we have
+		     an overlarge buffer, just in case.  */
+		  sprintf (s_name_buf, "/%lu", (unsigned long) string_size);
+		  /* Then strncpy takes care of any padding for us.  */
+		  strncpy (section.s_name, s_name_buf, SCNNMLEN);
+		}
+	      else
+#ifdef COFF_WITH_PE
+		{
+		  /* PE use a base 64 encoding for long section names whose
+		     index is very large.  But contrary to RFC 4648, there is
+		     no padding: 6 characters must be generated.  */
+		  static const char base64[] =
+		    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+		    "abcdefghijklmnopqrstuvwxyz"
+		    "0123456789+/";
+		  unsigned long off = string_size;
+		  unsigned i;
+
+		  section.s_name[0] = '/';
+		  section.s_name[1] = '/';
+		  for (i = SCNNMLEN - 1; i >= 2; i--)
+		    {
+		      section.s_name[i] = base64[off & 0x3f];
+		      off >>= 6;
+		    }
+		}
+#endif
+	      if (string_size > 0xffffffffUL - (len + 1)
+#ifndef COFF_WITH_PE
+		  || string_size >= 10000000
+#endif
+		  )
 		{
 		  bfd_set_error (bfd_error_file_too_big);
 		  _bfd_error_handler
 		    /* xgettext:c-format */
 		    (_("%pB: section %pA: string table overflow at offset %ld"),
 		    abfd, current, (unsigned long) string_size);
-		  return FALSE;
+		  return false;
 		}
 
-	      /* We do not need to use snprintf here as we have already verfied
-		 that string_size is not too big, plus we have an overlarge
-		 buffer, just in case.  */
-	      sprintf (s_name_buf, "/%lu", (unsigned long) string_size);
-	      /* Then strncpy takes care of any padding for us.  */
-	      strncpy (section.s_name, s_name_buf, SCNNMLEN);
 	      string_size += len + 1;
-	      long_section_names = TRUE;
+	      long_section_names = true;
 	    }
 	}
 #endif
@@ -3557,14 +3741,14 @@ coff_write_object_contents (bfd * abfd)
 #ifndef COFF_IMAGE_WITH_PE
       /* In PEI, relocs come in the .reloc section.  */
       if (current->reloc_count != 0)
-	hasrelocs = TRUE;
+	hasrelocs = true;
 #endif
       if (current->lineno_count != 0)
-	haslinno = TRUE;
+	haslinno = true;
 #ifdef COFF_IMAGE_WITH_PE
       if ((current->flags & SEC_DEBUGGING) != 0
 	  && ! is_reloc_section)
-	hasdebug = TRUE;
+	hasdebug = true;
 #endif
 
 #ifdef RS6000COFF_C
@@ -3586,24 +3770,31 @@ coff_write_object_contents (bfd * abfd)
 	data_sec = current;
       else if (!strcmp (current->name, _BSS))
 	bss_sec = current;
+#ifdef RS6000COFF_C
+      else if (!strcmp (current->name, _TDATA))
+	tdata_sec = current;
+      else if (!strcmp (current->name, _TBSS))
+	tbss_sec = current;
+#endif
+
 
 #ifdef COFF_ENCODE_ALIGNMENT
-      COFF_ENCODE_ALIGNMENT(section, current->alignment_power);
-      if ((unsigned int)COFF_DECODE_ALIGNMENT(section.s_flags)
-	  != current->alignment_power)
+      if (COFF_ENCODE_ALIGNMENT (abfd, section, current->alignment_power)
+	  && (COFF_DECODE_ALIGNMENT (section.s_flags)
+	      != current->alignment_power))
 	{
-	  bfd_boolean warn = coff_data (abfd)->link_info
-	    && !bfd_link_relocatable (coff_data (abfd)->link_info);
+	  bool warn = (coff_data (abfd)->link_info
+		       && !bfd_link_relocatable (coff_data (abfd)->link_info));
 
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB:%s section %s: alignment 2**%u not representable"),
-	    abfd, warn ? " warning:" : "", current->name,
-	    current->alignment_power);
+	     abfd, warn ? " warning:" : "", current->name,
+	     current->alignment_power);
 	  if (!warn)
 	    {
 	      bfd_set_error (bfd_error_nonrepresentable_section);
-	      return FALSE;
+	      return false;
 	    }
 	}
 #endif
@@ -3622,9 +3813,9 @@ coff_write_object_contents (bfd * abfd)
 	  SCNHDR buff;
 	  bfd_size_type amt = bfd_coff_scnhsz (abfd);
 
-	  if (coff_swap_scnhdr_out (abfd, &section, &buff) == 0
-	      || bfd_bwrite (& buff, amt, abfd) != amt)
-	    return FALSE;
+	  if (bfd_coff_swap_scnhdr_out (abfd, &section, &buff) == 0
+	      || bfd_write (& buff, amt, abfd) != amt)
+	    return false;
 	}
 
 #ifdef COFF_WITH_PE
@@ -3748,14 +3939,42 @@ coff_write_object_contents (bfd * abfd)
 	  scnhdr.s_nlnno = current->target_index;
 	  scnhdr.s_flags = STYP_OVRFLO;
 	  amt = bfd_coff_scnhsz (abfd);
-	  if (coff_swap_scnhdr_out (abfd, &scnhdr, &buff) == 0
-	      || bfd_bwrite (& buff, amt, abfd) != amt)
-	    return FALSE;
+	  if (bfd_coff_swap_scnhdr_out (abfd, &scnhdr, &buff) == 0
+	      || bfd_write (& buff, amt, abfd) != amt)
+	    return false;
 	}
     }
 #endif
 #endif
 
+#if defined (COFF_GO32_EXE) || defined (COFF_GO32)
+  /* Pad section headers.  */
+  if ((abfd->flags & EXEC_P) != 0)
+    {
+      asection *s = abfd->sections;
+      while (s != NULL && s->filepos == 0)
+	s = s->next;
+      if (s != NULL)
+	{
+	  file_ptr cur_ptr
+	    = scn_base + abfd->section_count * bfd_coff_scnhsz (abfd);
+	  file_ptr fill_size = s->filepos - cur_ptr;
+	  if (fill_size > 0)
+	    {
+	      bfd_byte *b = bfd_zmalloc (fill_size);
+	      if (!b)
+		return false;
+	      if (bfd_write (b, fill_size, abfd) != (ufile_ptr) fill_size)
+		{
+		  free (b);
+		  return false;
+		}
+	      free (b);
+	    }
+	}
+    }
+#endif
+
   /* OK, now set up the filehdr...  */
 
   /* Don't include the internal abs section in the section count */
@@ -3795,7 +4014,7 @@ coff_write_object_contents (bfd * abfd)
     internal_f.f_flags |= IMAGE_FILE_LARGE_ADDRESS_AWARE;
 #endif
 
-#ifndef COFF_WITH_pex64
+#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
 #ifdef COFF_WITH_PE
   internal_f.f_flags |= IMAGE_FILE_32BIT_MACHINE;
 #else
@@ -3811,9 +4030,6 @@ coff_write_object_contents (bfd * abfd)
      but it doesn't hurt to set it internally.  */
   internal_f.f_target_id = TI_TARGET_ID;
 #endif
-#ifdef TIC80_TARGET_ID
-  internal_f.f_target_id = TIC80_TARGET_ID;
-#endif
 
   /* FIXME, should do something about the other byte orders and
      architectures.  */
@@ -3841,19 +4057,25 @@ coff_write_object_contents (bfd * abfd)
     internal_a.magic = TICOFF_AOUT_MAGIC;
 #define __A_MAGIC_SET__
 #endif
-#ifdef TIC80COFF
-    internal_a.magic = TIC80_ARCH_MAGIC;
-#define __A_MAGIC_SET__
-#endif /* TIC80 */
 
 #if defined(ARM)
 #define __A_MAGIC_SET__
     internal_a.magic = ZMAGIC;
 #endif
 
-#if defined(PPC_PE)
+#if defined(AARCH64)
 #define __A_MAGIC_SET__
-    internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC;
+    internal_a.magic = ZMAGIC;
+#endif
+
+#if defined(LOONGARCH64)
+#define __A_MAGIC_SET__
+    internal_a.magic = ZMAGIC;
+#endif
+
+#if defined(RISCV64)
+#define __A_MAGIC_SET__
+    internal_a.magic = ZMAGIC;
 #endif
 
 #if defined MCORE_PE
@@ -3908,8 +4130,13 @@ coff_write_object_contents (bfd * abfd)
 #endif
   }
 
+#ifdef RS6000COFF_C
+  /* XCOFF 32bit needs this to have new behaviour for n_type field.  */
+  internal_a.vstamp = 2;
+#else
   /* FIXME: Does anybody ever set this to another value?  */
   internal_a.vstamp = 0;
+#endif
 
   /* Now should write relocs, strings, syms.  */
   obj_sym_filepos (abfd) = sym_base;
@@ -3919,14 +4146,14 @@ coff_write_object_contents (bfd * abfd)
       int firstundef;
 
       if (!coff_renumber_symbols (abfd, &firstundef))
-	return FALSE;
+	return false;
       coff_mangle_symbols (abfd);
       if (! coff_write_symbols (abfd))
-	return FALSE;
+	return false;
       if (! coff_write_linenumbers (abfd))
-	return FALSE;
+	return false;
       if (! coff_write_relocs (abfd, firstundef))
-	return FALSE;
+	return false;
     }
 #ifdef COFF_LONG_SECTION_NAMES
   else if (long_section_names && ! obj_coff_strings_written (abfd))
@@ -3934,27 +4161,9 @@ coff_write_object_contents (bfd * abfd)
       /* If we have long section names we have to write out the string
 	 table even if there are no symbols.  */
       if (! coff_write_symbols (abfd))
-	return FALSE;
-    }
-#endif
-#ifdef COFF_IMAGE_WITH_PE
-#ifdef PPC_PE
-  else if ((abfd->flags & EXEC_P) != 0)
-    {
-      bfd_byte b;
-
-      /* PowerPC PE appears to require that all executable files be
-	 rounded up to the page size.  */
-      b = 0;
-      if (bfd_seek (abfd,
-		    (file_ptr) BFD_ALIGN (sym_base, COFF_PAGE_SIZE) - 1,
-		    SEEK_SET) != 0
-	  || bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1)
-	return FALSE;
+	return false;
     }
 #endif
-#endif
-
   /* If bfd_get_symcount (abfd) != 0, then we are not using the COFF
      backend linker, and obj_raw_syment_count is not valid until after
      coff_write_symbols is called.  */
@@ -4002,7 +4211,7 @@ coff_write_object_contents (bfd * abfd)
       bfd_vma toc;
       asection *loader_sec;
 
-      internal_a.vstamp = 1;
+      internal_a.vstamp = 2;
 
       internal_a.o_snentry = xcoff_data (abfd)->snentry;
       if (internal_a.o_snentry == 0)
@@ -4038,6 +4247,29 @@ coff_write_object_contents (bfd * abfd)
       else
 	internal_a.o_snbss = 0;
 
+      if (tdata_sec != NULL)
+	{
+	  internal_a.o_sntdata = tdata_sec->target_index;
+	  /* TODO: o_flags should be set to RS6K_AOUTHDR_TLS_LE
+	     if there is at least one R_TLS_LE relocations.  */
+	  internal_a.o_flags = 0;
+#ifdef XCOFF64
+	  internal_a.o_x64flags = 0;
+#endif
+	}
+      else
+	{
+	  internal_a.o_sntdata = 0;
+	  internal_a.o_flags = 0;
+#ifdef XCOFF64
+	  internal_a.o_x64flags = 0;
+#endif
+	}
+      if (tbss_sec != NULL)
+	  internal_a.o_sntbss = tbss_sec->target_index;
+      else
+	  internal_a.o_sntbss = 0;
+
       toc = xcoff_data (abfd)->toc;
       internal_a.o_toc = toc;
       internal_a.o_sntoc = xcoff_data (abfd)->sntoc;
@@ -4055,6 +4287,8 @@ coff_write_object_contents (bfd * abfd)
 	    case bfd_arch_powerpc:
 	      if (bfd_get_mach (abfd) == bfd_mach_ppc)
 		internal_a.o_cputype = 3;
+	      else if (bfd_get_mach (abfd) == bfd_mach_ppc_620)
+		internal_a.o_cputype = 2;
 	      else
 		internal_a.o_cputype = 1;
 	      break;
@@ -4079,8 +4313,8 @@ coff_write_object_contents (bfd * abfd)
 #endif
 
   /* Now write header.  */
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
+    return false;
 
   {
     char * buff;
@@ -4088,15 +4322,15 @@ coff_write_object_contents (bfd * abfd)
 
     buff = (char *) bfd_malloc (amount);
     if (buff == NULL)
-      return FALSE;
+      return false;
 
     bfd_coff_swap_filehdr_out (abfd, & internal_f, buff);
-    amount = bfd_bwrite (buff, amount, abfd);
+    amount = bfd_write (buff, amount, abfd);
 
     free (buff);
 
     if (amount != bfd_coff_filhsz (abfd))
-      return FALSE;
+      return false;
   }
 
   if (abfd->flags & EXEC_P)
@@ -4108,42 +4342,44 @@ coff_write_object_contents (bfd * abfd)
 
       buff = (char *) bfd_malloc (amount);
       if (buff == NULL)
-	return FALSE;
+	return false;
 
       coff_swap_aouthdr_out (abfd, & internal_a, buff);
-      amount = bfd_bwrite (buff, amount, abfd);
+      amount = bfd_write (buff, amount, abfd);
 
       free (buff);
 
       if (amount != bfd_coff_aoutsz (abfd))
-	return FALSE;
+	return false;
 
 #ifdef COFF_IMAGE_WITH_PE
       if (! coff_apply_checksum (abfd))
-	return FALSE;
+	return false;
 #endif
     }
 #ifdef RS6000COFF_C
+#ifndef XCOFF64
   else
     {
       AOUTHDR buff;
       size_t size;
 
-      /* XCOFF seems to always write at least a small a.out header.  */
+      /* XCOFF32 seems to always write at least a small a.out header.  */
       coff_swap_aouthdr_out (abfd, & internal_a, & buff);
       if (xcoff_data (abfd)->full_aouthdr)
 	size = bfd_coff_aoutsz (abfd);
       else
 	size = SMALL_AOUTSZ;
-      if (bfd_bwrite (& buff, (bfd_size_type) size, abfd) != size)
-	return FALSE;
+      if (bfd_write (&buff, size, abfd) != size)
+	return false;
     }
 #endif
+#endif
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 coff_set_section_contents (bfd * abfd,
 			   sec_ptr section,
 			   const void * location,
@@ -4153,7 +4389,7 @@ coff_set_section_contents (bfd * abfd,
   if (! abfd->output_has_begun)	/* Set by bfd.c handler.  */
     {
       if (! coff_compute_section_file_positions (abfd))
-	return FALSE;
+	return false;
     }
 
 #if defined(_LIB) && !defined(TARG_AUX)
@@ -4183,10 +4419,13 @@ coff_set_section_contents (bfd * abfd,
 
 	rec = (bfd_byte *) location;
 	recend = rec + count;
-	while (rec < recend)
+	while (recend - rec >= 4)
 	  {
+	    size_t len = bfd_get_32 (abfd, rec);
+	    if (len == 0 || len > (size_t) (recend - rec) / 4)
+	      break;
+	    rec += len * 4;
 	    ++section->lma;
-	    rec += bfd_get_32 (abfd, rec) * 4;
 	  }
 
 	BFD_ASSERT (rec == recend);
@@ -4196,30 +4435,31 @@ coff_set_section_contents (bfd * abfd,
   /* Don't write out bss sections - one way to do this is to
        see if the filepos has not been set.  */
   if (section->filepos == 0)
-    return TRUE;
+    return true;
 
   if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   if (count == 0)
-    return TRUE;
+    return true;
 
-  return bfd_bwrite (location, count, abfd) == count;
+  return bfd_write (location, count, abfd) == count;
 }
 
 static void *
 buy_and_read (bfd *abfd, file_ptr where,
 	      bfd_size_type nmemb, bfd_size_type size)
 {
-  void *area = bfd_alloc2 (abfd, nmemb, size);
+  size_t amt;
 
-  if (!area)
-    return NULL;
-  size *= nmemb;
-  if (bfd_seek (abfd, where, SEEK_SET) != 0
-      || bfd_bread (area, size, abfd) != size)
+  if (_bfd_mul_overflow (nmemb, size, &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return NULL;
+    }
+  if (bfd_seek (abfd, where, SEEK_SET) != 0)
     return NULL;
-  return area;
+  return _bfd_malloc_and_read (abfd, amt, amt);
 }
 
 /*
@@ -4263,7 +4503,7 @@ coff_sort_func_alent (const void * arg1,
   return 0;
 }
 
-static bfd_boolean
+static bool
 coff_slurp_line_table (bfd *abfd, asection *asect)
 {
   LINENO *native_lineno;
@@ -4271,31 +4511,18 @@ coff_slurp_line_table (bfd *abfd, asecti
   unsigned int counter;
   alent *cache_ptr;
   bfd_vma prev_offset = 0;
-  bfd_boolean ordered = TRUE;
+  bool ordered = true;
   unsigned int nbr_func;
   LINENO *src;
-  bfd_boolean have_func;
-  bfd_boolean ret = TRUE;
+  bool have_func;
+  bool ret = true;
+  size_t amt;
 
   if (asect->lineno_count == 0)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (asect->lineno == NULL);
 
-  if (asect->lineno_count > asect->size)
-    {
-      _bfd_error_handler
-	(_("%pB: warning: line number count (%#lx) exceeds section size (%#lx)"),
-	 abfd, (unsigned long) asect->lineno_count, (unsigned long) asect->size);
-      return FALSE;
-    }
-
-  lineno_cache = (alent *) bfd_alloc2 (abfd,
-				       (bfd_size_type) asect->lineno_count + 1,
-				       sizeof (alent));
-  if (lineno_cache == NULL)
-    return FALSE;
-
   native_lineno = (LINENO *) buy_and_read (abfd, asect->line_filepos,
 					   asect->lineno_count,
 					   bfd_coff_linesz (abfd));
@@ -4303,15 +4530,27 @@ coff_slurp_line_table (bfd *abfd, asecti
     {
       _bfd_error_handler
 	(_("%pB: warning: line number table read failed"), abfd);
-      bfd_release (abfd, lineno_cache);
-      return FALSE;
+      return false;
+    }
+
+  if (_bfd_mul_overflow (asect->lineno_count + 1, sizeof (alent), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      free (native_lineno);
+      return false;
+    }
+  lineno_cache = (alent *) bfd_alloc (abfd, amt);
+  if (lineno_cache == NULL)
+    {
+      free (native_lineno);
+      return false;
     }
 
   cache_ptr = lineno_cache;
   asect->lineno = lineno_cache;
   src = native_lineno;
   nbr_func = 0;
-  have_func = FALSE;
+  have_func = false;
 
   for (counter = 0; counter < asect->lineno_count; counter++, src++)
     {
@@ -4330,7 +4569,7 @@ coff_slurp_line_table (bfd *abfd, asecti
 	  unsigned long symndx;
 	  coff_symbol_type *sym;
 
-	  have_func = FALSE;
+	  have_func = false;
 	  symndx = dst.l_addr.l_symndx;
 	  if (symndx >= obj_raw_syment_count (abfd))
 	    {
@@ -4339,7 +4578,7 @@ coff_slurp_line_table (bfd *abfd, asecti
 		(_("%pB: warning: illegal symbol index 0x%lx in line number entry %d"),
 		 abfd, symndx, counter);
 	      cache_ptr->line_number = -1;
-	      ret = FALSE;
+	      ret = false;
 	      continue;
 	    }
 
@@ -4353,7 +4592,7 @@ coff_slurp_line_table (bfd *abfd, asecti
 		(_("%pB: warning: illegal symbol index 0x%lx in line number entry %d"),
 		 abfd, symndx, counter);
 	      cache_ptr->line_number = -1;
-	      ret = FALSE;
+	      ret = false;
 	      continue;
 	    }
 	  sym = (coff_symbol_type *) (ent->u.syment._n._n_n._n_zeroes);
@@ -4367,11 +4606,11 @@ coff_slurp_line_table (bfd *abfd, asecti
 		(_("%pB: warning: illegal symbol in line number entry %d"),
 		 abfd, counter);
 	      cache_ptr->line_number = -1;
-	      ret = FALSE;
+	      ret = false;
 	      continue;
 	    }
 
-	  have_func = TRUE;
+	  have_func = true;
 	  nbr_func++;
 	  cache_ptr->u.sym = (asymbol *) sym;
 	  if (sym->lineno != NULL)
@@ -4382,7 +4621,7 @@ coff_slurp_line_table (bfd *abfd, asecti
 
 	  sym->lineno = cache_ptr;
 	  if (sym->symbol.value < prev_offset)
-	    ordered = FALSE;
+	    ordered = false;
 	  prev_offset = sym->symbol.value;
 	}
       else if (!have_func)
@@ -4396,7 +4635,7 @@ coff_slurp_line_table (bfd *abfd, asecti
 
   asect->lineno_count = cache_ptr - lineno_cache;
   memset (cache_ptr, 0, sizeof (*cache_ptr));
-  bfd_release (abfd, native_lineno);
+  free (native_lineno);
 
   /* On some systems (eg AIX5.3) the lineno table may not be sorted.  */
   if (!ordered)
@@ -4406,8 +4645,12 @@ coff_slurp_line_table (bfd *abfd, asecti
       alent *n_lineno_cache;
 
       /* Create a table of functions.  */
-      func_table = (alent **) bfd_alloc2 (abfd, nbr_func, sizeof (alent *));
-      if (func_table != NULL)
+      if (_bfd_mul_overflow (nbr_func, sizeof (alent *), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  ret = false;
+	}
+      else if ((func_table = (alent **) bfd_alloc (abfd, amt)) != NULL)
 	{
 	  alent **p = func_table;
 	  unsigned int i;
@@ -4422,9 +4665,12 @@ coff_slurp_line_table (bfd *abfd, asecti
 	  qsort (func_table, nbr_func, sizeof (alent *), coff_sort_func_alent);
 
 	  /* Create the new sorted table.  */
-	  n_lineno_cache = (alent *) bfd_alloc2 (abfd, asect->lineno_count,
-						 sizeof (alent));
-	  if (n_lineno_cache != NULL)
+	  if (_bfd_mul_overflow (asect->lineno_count, sizeof (alent), &amt))
+	    {
+	      bfd_set_error (bfd_error_file_too_big);
+	      ret = false;
+	    }
+	  else if ((n_lineno_cache = (alent *) bfd_alloc (abfd, amt)) != NULL)
 	    {
 	      alent *n_cache_ptr = n_lineno_cache;
 
@@ -4448,11 +4694,11 @@ coff_slurp_line_table (bfd *abfd, asecti
 		      asect->lineno_count * sizeof (alent));
 	    }
 	  else
-	    ret = FALSE;
+	    ret = false;
 	  bfd_release (abfd, func_table);
 	}
       else
-	ret = FALSE;
+	ret = false;
     }
 
   return ret;
@@ -4462,34 +4708,43 @@ coff_slurp_line_table (bfd *abfd, asecti
    that if coff_relocate_section is defined, the linker will read
    symbols via coff_link_add_symbols, rather than via this routine.  */
 
-static bfd_boolean
+static bool
 coff_slurp_symbol_table (bfd * abfd)
 {
   combined_entry_type *native_symbols;
   coff_symbol_type *cached_area;
   unsigned int *table_ptr;
   unsigned int number_of_symbols = 0;
-  bfd_boolean ret = TRUE;
+  bool ret = true;
+  size_t amt;
 
   if (obj_symbols (abfd))
-    return TRUE;
+    return true;
 
   /* Read in the symbol table.  */
   if ((native_symbols = coff_get_normalized_symtab (abfd)) == NULL)
-    return FALSE;
+    return false;
 
   /* Allocate enough room for all the symbols in cached form.  */
-  cached_area = (coff_symbol_type *) bfd_alloc2 (abfd,
-						 obj_raw_syment_count (abfd),
-						 sizeof (coff_symbol_type));
+  if (_bfd_mul_overflow (obj_raw_syment_count (abfd),
+			 sizeof (*cached_area), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  cached_area = (coff_symbol_type *) bfd_alloc (abfd, amt);
   if (cached_area == NULL)
-    return FALSE;
-
-  table_ptr = (unsigned int *) bfd_zalloc2 (abfd, obj_raw_syment_count (abfd),
-					    sizeof (unsigned int));
+    return false;
 
+  if (_bfd_mul_overflow (obj_raw_syment_count (abfd),
+			 sizeof (*table_ptr), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  table_ptr = (unsigned int *) bfd_zalloc (abfd, amt);
   if (table_ptr == NULL)
-    return FALSE;
+    return false;
   else
     {
       coff_symbol_type *dst = cached_area;
@@ -4505,13 +4760,13 @@ coff_slurp_symbol_table (bfd * abfd)
 	  BFD_ASSERT (src->is_sym);
 	  dst->symbol.name = (char *) (src->u.syment._n._n_n._n_offset);
 	  /* We use the native name field to point to the cached field.  */
-	  src->u.syment._n._n_n._n_zeroes = (bfd_hostptr_t) dst;
+	  src->u.syment._n._n_n._n_zeroes = (uintptr_t) dst;
 	  dst->symbol.section = coff_section_from_bfd_index (abfd,
 						     src->u.syment.n_scnum);
 	  dst->symbol.flags = 0;
 	  /* PR 17512: file: 079-7098-0.001:0.1.  */
 	  dst->symbol.value = 0;
-	  dst->done_lineno = FALSE;
+	  dst->done_lineno = false;
 
 	  switch (src->u.syment.n_sclass)
 	    {
@@ -4523,7 +4778,7 @@ coff_slurp_symbol_table (bfd * abfd)
 #endif
 #ifdef RS6000COFF_C
 	    case C_HIDEXT:
-#if ! defined _AIX52 && ! defined AIX_WEAK_SUPPORT
+#ifndef AIX_WEAK_SUPPORT
 	    case C_AIX_WEAKEXT:
 #endif
 #endif
@@ -4640,6 +4895,9 @@ coff_slurp_symbol_table (bfd * abfd)
 		dst->symbol.value = src->u.syment.n_value;
 	      break;
 
+	    case C_FILE:	/* File name.  */
+	      dst->symbol.flags = BSF_FILE;
+	      /* Fall through.  */
 	    case C_MOS:		/* Member of structure.  */
 	    case C_EOS:		/* End of structure.  */
 	    case C_REGPARM:	/* Register parameter.  */
@@ -4653,11 +4911,6 @@ coff_slurp_symbol_table (bfd * abfd)
 	    case C_MOE:		/* Member of enumeration.  */
 	    case C_MOU:		/* Member of union.  */
 	    case C_UNTAG:	/* Union tag.  */
-	      dst->symbol.flags = BSF_DEBUGGING;
-	      dst->symbol.value = (src->u.syment.n_value);
-	      break;
-
-	    case C_FILE:	/* File name.  */
 	    case C_STRTAG:	/* Structure tag.  */
 #ifdef RS6000COFF_C
 	    case C_GSYM:
@@ -4675,7 +4928,7 @@ coff_slurp_symbol_table (bfd * abfd)
 	    case C_FUN:
 	    case C_ESTAT:
 #endif
-	      dst->symbol.flags = BSF_DEBUGGING;
+	      dst->symbol.flags |= BSF_DEBUGGING;
 	      dst->symbol.value = (src->u.syment.n_value);
 	      break;
 
@@ -4712,13 +4965,18 @@ coff_slurp_symbol_table (bfd * abfd)
 	    case C_BSTAT:
 	      dst->symbol.flags = BSF_DEBUGGING;
 
-	      /* The value is actually a symbol index.  Save a pointer
-		 to the symbol instead of the index.  FIXME: This
-		 should use a union.  */
-	      src->u.syment.n_value =
-		(long) (intptr_t) (native_symbols + src->u.syment.n_value);
-	      dst->symbol.value = src->u.syment.n_value;
-	      src->fix_value = 1;
+	      if (src->u.syment.n_value >= obj_raw_syment_count (abfd))
+		dst->symbol.value = 0;
+	      else
+		{
+		  /* The value is actually a symbol index.  Save a pointer
+		     to the symbol instead of the index.  FIXME: This
+		     should use a union.  */
+		  src->u.syment.n_value
+		    = (uintptr_t) (native_symbols + src->u.syment.n_value);
+		  dst->symbol.value = src->u.syment.n_value;
+		  src->fix_value = 1;
+		}
 	      break;
 #endif
 
@@ -4775,7 +5033,7 @@ coff_slurp_symbol_table (bfd * abfd)
 	    case C_ALIAS:	/* Duplicate tag.  */
 #endif
 	      /* New storage classes for TI COFF.  */
-#if defined(TIC80COFF) || defined(TICOFF)
+#ifdef TICOFF
 	    case C_UEXT:	/* Tentative external definition.  */
 #endif
 	    case C_EXTLAB:	/* External load time label.  */
@@ -4785,7 +5043,7 @@ coff_slurp_symbol_table (bfd * abfd)
 		(_("%pB: unrecognized storage class %d for %s symbol `%s'"),
 		 abfd, src->u.syment.n_sclass,
 		 dst->symbol.section->name, dst->symbol.name);
-	      ret = FALSE;
+	      ret = false;
 	      /* Fall through.  */
 	    case C_HIDDEN:	/* Ext symbol in dmert public lib.  */
 	      /* PR 20722: These symbols can also be generated by
@@ -4818,7 +5076,7 @@ coff_slurp_symbol_table (bfd * abfd)
     while (p)
       {
 	if (! coff_slurp_line_table (abfd, p))
-	  return FALSE;
+	  return false;
 	p = p->next;
       }
   }
@@ -4844,6 +5102,12 @@ coff_classify_symbol (bfd *abfd,
     case C_THUMBEXT:
     case C_THUMBEXTFUNC:
 #endif
+#ifdef RS6000COFF_C
+    case C_HIDEXT:
+#ifndef AIX_WEAK_SUPPORT
+    case C_AIX_WEAKEXT:
+#endif
+#endif
 #ifdef C_SYSTEM
     case C_SYSTEM:
 #endif
@@ -4857,6 +5121,10 @@ coff_classify_symbol (bfd *abfd,
 	  else
 	    return COFF_SYMBOL_COMMON;
 	}
+#ifdef RS6000COFF_C
+      if (syment->n_sclass == C_HIDEXT)
+	return COFF_SYMBOL_LOCAL;
+#endif
       return COFF_SYMBOL_GLOBAL;
 
     default:
@@ -4878,11 +5146,11 @@ coff_classify_symbol (bfd *abfd,
 	 breaks gas generated objects.  */
       if (syment->n_value == 0)
 	{
-	  asection *sec;
-	  char * name;
+	  const asection *sec;
+	  const char *name;
 	  char buf[SYMNMLEN + 1];
 
-	  name = _bfd_coff_internal_syment_name (abfd, syment, buf)
+	  name = _bfd_coff_internal_syment_name (abfd, syment, buf);
 	  sec = coff_section_from_bfd_index (abfd, syment->n_scnum);
 	  if (sec != NULL && name != NULL
 	      && (strcmp (bfd_section_name (sec), name) == 0))
@@ -4943,8 +5211,22 @@ SUBSUBSECTION
 	structure, in a back end specific way. For instance, the 386
 	uses the @code{r_type} to directly produce an index
 	into a howto table vector.
+
+	o Note that @code{arelent.addend} for COFF is often not what
+	most people understand as a relocation addend, but rather an
+	adjustment to the relocation addend stored in section contents
+	of relocatable object files.  The value found in section
+	contents may also be confusing, depending on both symbol value
+	and addend somewhat similar to the field value for a
+	final-linked object.  See @code{CALC_ADDEND}.
 */
 
+#ifdef COFF_WITH_PE
+#define COFF_PE_ADDEND_BIAS(ptr) 0 /* Symbol value not stored in raw data.  */
+#else
+#define COFF_PE_ADDEND_BIAS(ptr) ((ptr)->value)
+#endif
+
 #ifndef CALC_ADDEND
 #define CALC_ADDEND(abfd, ptr, reloc, cache_ptr)		\
   {								\
@@ -4961,51 +5243,62 @@ SUBSUBSECTION
       cache_ptr->addend = 0;					\
     else if (ptr && bfd_asymbol_bfd (ptr) == abfd		\
 	     && ptr->section != NULL)				\
-      cache_ptr->addend = - (ptr->section->vma + ptr->value);	\
+      cache_ptr->addend = - (ptr->section->vma			\
+			     + COFF_PE_ADDEND_BIAS (ptr));	\
     else							\
       cache_ptr->addend = 0;					\
   }
 #endif
 
-static bfd_boolean
+static bool
 coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols)
 {
-  RELOC *native_relocs;
+  bfd_byte *native_relocs;
   arelent *reloc_cache;
   arelent *cache_ptr;
   unsigned int idx;
+  size_t amt;
 
   if (asect->relocation)
-    return TRUE;
+    return true;
   if (asect->reloc_count == 0)
-    return TRUE;
+    return true;
   if (asect->flags & SEC_CONSTRUCTOR)
-    return TRUE;
+    return true;
   if (!coff_slurp_symbol_table (abfd))
-    return FALSE;
+    return false;
 
-  native_relocs = (RELOC *) buy_and_read (abfd, asect->rel_filepos,
-					  asect->reloc_count,
-					  bfd_coff_relsz (abfd));
-  reloc_cache = (arelent *) bfd_alloc2 (abfd, asect->reloc_count,
-					sizeof (arelent));
+  native_relocs = (bfd_byte *) buy_and_read (abfd, asect->rel_filepos,
+					     asect->reloc_count,
+					     bfd_coff_relsz (abfd));
+  if (native_relocs == NULL)
+    return false;
 
-  if (reloc_cache == NULL || native_relocs == NULL)
-    return FALSE;
+  if (_bfd_mul_overflow (asect->reloc_count, sizeof (arelent), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  reloc_cache = (arelent *) bfd_alloc (abfd, amt);
+  if (reloc_cache == NULL)
+    {
+      free (native_relocs);
+      return false;
+    }
 
   for (idx = 0; idx < asect->reloc_count; idx++)
     {
       struct internal_reloc dst;
-      struct external_reloc *src;
+      void *src;
 #ifndef RELOC_PROCESSING
       asymbol *ptr;
 #endif
 
       cache_ptr = reloc_cache + idx;
-      src = native_relocs + idx;
+      src = native_relocs + idx * (size_t) bfd_coff_relsz (abfd);
 
       dst.r_offset = 0;
-      coff_swap_reloc_in (abfd, src, &dst);
+      bfd_coff_swap_reloc_in (abfd, src, &dst);
 
 #ifdef RELOC_PROCESSING
       RELOC_PROCESSING (cache_ptr, &dst, symbols, abfd, asect);
@@ -5061,12 +5354,14 @@ coff_slurp_reloc_table (bfd * abfd, sec_
 	    (_("%pB: illegal relocation type %d at address %#" PRIx64),
 	     abfd, dst.r_type, (uint64_t) dst.r_vaddr);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  free (native_relocs);
+	  return false;
 	}
     }
 
+  free (native_relocs);
   asect->relocation = reloc_cache;
-  return TRUE;
+  return true;
 }
 
 #ifndef coff_rtype_to_howto
@@ -5162,18 +5457,16 @@ dummy_reloc16_estimate (bfd *abfd ATTRIB
 
 #define coff_reloc16_extra_cases dummy_reloc16_extra_cases
 
-/* This works even if abort is not declared in any header file.  */
-
-static void
+static bool
 dummy_reloc16_extra_cases (bfd *abfd ATTRIBUTE_UNUSED,
 			   struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
 			   struct bfd_link_order *link_order ATTRIBUTE_UNUSED,
 			   arelent *reloc ATTRIBUTE_UNUSED,
 			   bfd_byte *data ATTRIBUTE_UNUSED,
-			   unsigned int *src_ptr ATTRIBUTE_UNUSED,
-			   unsigned int *dst_ptr ATTRIBUTE_UNUSED)
+			   size_t *src_ptr ATTRIBUTE_UNUSED,
+			   size_t *dst_ptr ATTRIBUTE_UNUSED)
 {
-  abort ();
+  return false;
 }
 #endif
 
@@ -5226,7 +5519,7 @@ dummy_reloc16_extra_cases (bfd *abfd ATT
 
 #ifndef coff_link_output_has_begun
 
-static bfd_boolean
+static bool
 coff_link_output_has_begun (bfd * abfd,
 			    struct coff_final_link_info * info ATTRIBUTE_UNUSED)
 {
@@ -5236,11 +5529,11 @@ coff_link_output_has_begun (bfd * abfd,
 
 #ifndef coff_final_link_postscript
 
-static bfd_boolean
+static bool
 coff_final_link_postscript (bfd * abfd ATTRIBUTE_UNUSED,
 			    struct coff_final_link_info * pfinfo ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 #endif
 
@@ -5287,7 +5580,9 @@ coff_final_link_postscript (bfd * abfd A
 #define coff_SWAP_scnhdr_in coff_swap_scnhdr_in
 #endif
 
-static bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED =
+#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
+
+static const bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED =
 {
   coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
   coff_SWAP_aux_out, coff_SWAP_sym_out,
@@ -5296,16 +5591,16 @@ static bfd_coff_backend_data bfd_coff_st
   coff_SWAP_scnhdr_out,
   FILHSZ, AOUTSZ, SCNHSZ, SYMESZ, AUXESZ, RELSZ, LINESZ, FILNMLEN,
 #ifdef COFF_LONG_FILENAMES
-  TRUE,
+  true,
 #else
-  FALSE,
+  false,
 #endif
   COFF_DEFAULT_LONG_SECTION_NAMES,
   COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
 #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
-  TRUE,
+  true,
 #else
-  FALSE,
+  false,
 #endif
 #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
   4,
@@ -5328,25 +5623,25 @@ static bfd_coff_backend_data bfd_coff_st
 #ifdef TICOFF
 /* COFF0 differs in file/section header size and relocation entry size.  */
 
-static bfd_coff_backend_data ticoff0_swap_table =
+static const bfd_coff_backend_data ticoff0_swap_table =
 {
   coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
   coff_SWAP_aux_out, coff_SWAP_sym_out,
-  coff_SWAP_lineno_out, coff_SWAP_reloc_out,
+  coff_SWAP_lineno_out, coff_swap_reloc_v0_out,
   coff_SWAP_filehdr_out, coff_SWAP_aouthdr_out,
   coff_SWAP_scnhdr_out,
   FILHSZ_V0, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ_V0, LINESZ, FILNMLEN,
 #ifdef COFF_LONG_FILENAMES
-  TRUE,
+  true,
 #else
-  FALSE,
+  false,
 #endif
   COFF_DEFAULT_LONG_SECTION_NAMES,
   COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
 #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
-  TRUE,
+  true,
 #else
-  FALSE,
+  false,
 #endif
 #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
   4,
@@ -5355,7 +5650,7 @@ static bfd_coff_backend_data ticoff0_swa
 #endif
   32768,
   coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
-  coff_SWAP_reloc_in, ticoff0_bad_format_hook, coff_set_arch_mach_hook,
+  coff_swap_reloc_v0_in, ticoff0_bad_format_hook, coff_set_arch_mach_hook,
   coff_mkobject_hook, styp_to_sec_flags, coff_set_alignment_hook,
   coff_slurp_symbol_table, symname_in_debug_hook, coff_pointerize_aux_hook,
   coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
@@ -5370,7 +5665,7 @@ static bfd_coff_backend_data ticoff0_swa
 #ifdef TICOFF
 /* COFF1 differs in section header size.  */
 
-static bfd_coff_backend_data ticoff1_swap_table =
+static const bfd_coff_backend_data ticoff1_swap_table =
 {
   coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
   coff_SWAP_aux_out, coff_SWAP_sym_out,
@@ -5379,16 +5674,16 @@ static bfd_coff_backend_data ticoff1_swa
   coff_SWAP_scnhdr_out,
   FILHSZ, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ, LINESZ, FILNMLEN,
 #ifdef COFF_LONG_FILENAMES
-  TRUE,
+  true,
 #else
-  FALSE,
+  false,
 #endif
   COFF_DEFAULT_LONG_SECTION_NAMES,
   COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
 #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
-  TRUE,
+  true,
 #else
-  FALSE,
+  false,
 #endif
 #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
   4,
@@ -5535,8 +5830,8 @@ coff_bigobj_swap_aux_in (bfd *abfd,
 			 void * ext1,
 			 int type,
 			 int in_class,
-			 int indx,
-			 int numaux,
+			 int indx ATTRIBUTE_UNUSED,
+			 int numaux ATTRIBUTE_UNUSED,
 			 void * in1)
 {
   AUXENT_BIGOBJ *ext = (AUXENT_BIGOBJ *) ext1;
@@ -5548,14 +5843,7 @@ coff_bigobj_swap_aux_in (bfd *abfd,
   switch (in_class)
     {
     case C_FILE:
-      if (numaux > 1)
-	{
-	  if (indx == 0)
-	    memcpy (in->x_file.x_fname, ext->File.Name,
-		    numaux * sizeof (AUXENT_BIGOBJ));
-	}
-      else
-	memcpy (in->x_file.x_fname, ext->File.Name, sizeof (ext->File.Name));
+      memcpy (in->x_file.x_n.x_fname, ext->File.Name, sizeof (ext->File.Name));
       break;
 
     case C_STAT:
@@ -5577,7 +5865,7 @@ coff_bigobj_swap_aux_in (bfd *abfd,
       break;
 
     default:
-      in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->Sym.WeakDefaultSymIndex);
+      in->x_sym.x_tagndx.u32 = H_GET_32 (abfd, ext->Sym.WeakDefaultSymIndex);
       /* Characteristics is ignored.  */
       break;
     }
@@ -5600,7 +5888,7 @@ coff_bigobj_swap_aux_out (bfd * abfd,
   switch (in_class)
     {
     case C_FILE:
-      memcpy (ext->File.Name, in->x_file.x_fname, sizeof (ext->File.Name));
+      memcpy (ext->File.Name, in->x_file.x_n.x_fname, sizeof (ext->File.Name));
 
       return AUXESZ;
 
@@ -5625,13 +5913,13 @@ coff_bigobj_swap_aux_out (bfd * abfd,
       break;
     }
 
-  H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->Sym.WeakDefaultSymIndex);
+  H_PUT_32 (abfd, in->x_sym.x_tagndx.u32, ext->Sym.WeakDefaultSymIndex);
   H_PUT_32 (abfd, 1, ext->Sym.WeakSearchType);
 
   return AUXESZ;
 }
 
-static bfd_coff_backend_data bigobj_swap_table =
+static const bfd_coff_backend_data bigobj_swap_table =
 {
   coff_bigobj_swap_aux_in, coff_bigobj_swap_sym_in, coff_SWAP_lineno_in,
   coff_bigobj_swap_aux_out, coff_bigobj_swap_sym_out,
@@ -5640,10 +5928,10 @@ static bfd_coff_backend_data bigobj_swap
   coff_SWAP_scnhdr_out,
   FILHSZ_BIGOBJ, AOUTSZ, SCNHSZ, SYMESZ_BIGOBJ, AUXESZ_BIGOBJ,
    RELSZ, LINESZ, FILNMLEN_BIGOBJ,
-  TRUE,
+  true,
   COFF_DEFAULT_LONG_SECTION_NAMES,
   COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
-  FALSE,
+  false,
   2,
   1U << 31,
   coff_bigobj_swap_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
@@ -5665,7 +5953,7 @@ static bfd_coff_backend_data bigobj_swap
 #endif
 
 #ifndef coff_bfd_free_cached_info
-#define coff_bfd_free_cached_info	    _bfd_generic_bfd_free_cached_info
+#define coff_bfd_free_cached_info	    _bfd_coff_free_cached_info
 #endif
 
 #ifndef coff_get_section_contents
@@ -5791,6 +6079,7 @@ const bfd_target VAR =							\
   '/',				/* AR_pad_char.  */			\
   15,				/* AR_max_namelen.  */			\
   0,				/* match priority.  */			\
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */ \
 									\
   /* Data conversion functions.  */					\
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,				\
@@ -5852,6 +6141,7 @@ const bfd_target VAR =							\
   '/',				/* AR_pad_char.  */			\
   15,				/* AR_max_namelen.  */			\
   0,				/* match priority.  */			\
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */ \
 									\
   /* Data conversion functions.  */					\
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,				\
@@ -5913,6 +6203,7 @@ const bfd_target VAR =							\
   '/',				/* AR_pad_char.  */			\
   15,				/* AR_max_namelen.  */			\
   0,				/* match priority.  */			\
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */ \
 									\
   /* Data conversion functions.  */					\
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,				\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coffgen.c ./bfd/coffgen.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coffgen.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coffgen.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for the generic parts of COFF, for BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -42,18 +42,82 @@
 #include "libbfd.h"
 #include "coff/internal.h"
 #include "libcoff.h"
+#include "hashtab.h"
+
+/* Extract a long section name at STRINDEX and copy it to the bfd objstack.
+   Return NULL in case of error.  */
+
+static char *
+extract_long_section_name(bfd *abfd, unsigned long strindex)
+{
+  const char *strings;
+  char *name;
+
+  strings = _bfd_coff_read_string_table (abfd);
+  if (strings == NULL)
+    return NULL;
+  if ((bfd_size_type)(strindex + 2) >= obj_coff_strings_len (abfd))
+    return NULL;
+  strings += strindex;
+  name = (char *) bfd_alloc (abfd, (bfd_size_type) strlen (strings) + 1);
+  if (name == NULL)
+    return NULL;
+  strcpy (name, strings);
+
+  return name;
+}
+
+/* Decode a base 64 coded string at STR of length LEN, and write the result
+   to RES.  Return true on success.
+   Return false in case of invalid character or overflow.  */
+
+static bool
+decode_base64 (const char *str, unsigned len, uint32_t *res)
+{
+  unsigned i;
+  uint32_t val;
+
+  val = 0;
+  for (i = 0; i < len; i++)
+    {
+      char c = str[i];
+      unsigned d;
+
+      if (c >= 'A' && c <= 'Z')
+	d = c - 'A';
+      else if (c >= 'a' && c <= 'z')
+	d = c - 'a' + 26;
+      else if (c >= '0' && c <= '9')
+	d = c - '0' + 52;
+      else if (c == '+')
+	d = 62;
+      else if (c == '/')
+	d = 63;
+      else
+	return false;
+
+      /* Check for overflow. */
+      if ((val >> 26) != 0)
+	return false;
+
+      val = (val << 6) + d;
+    }
+
+  *res = val;
+  return true;
+}
 
 /* Take a section header read from a coff file (in HOST byte order),
    and make a BFD "section" out of it.  This is used by ECOFF.  */
 
-static bfd_boolean
+static bool
 make_a_section_from_file (bfd *abfd,
 			  struct internal_scnhdr *hdr,
 			  unsigned int target_index)
 {
-  asection *return_section;
+  asection *newsect;
   char *name;
-  bfd_boolean result = TRUE;
+  bool result = true;
   flagword flags;
 
   name = NULL;
@@ -67,32 +131,48 @@ make_a_section_from_file (bfd *abfd,
   if (bfd_coff_set_long_section_names (abfd, bfd_coff_long_section_names (abfd))
       && hdr->s_name[0] == '/')
     {
-      char buf[SCNNMLEN];
-      long strindex;
-      char *p;
-      const char *strings;
-
       /* Flag that this BFD uses long names, even though the format might
 	 expect them to be off by default.  This won't directly affect the
 	 format of any output BFD created from this one, but the information
 	 can be used to decide what to do.  */
-      bfd_coff_set_long_section_names (abfd, TRUE);
-      memcpy (buf, hdr->s_name + 1, SCNNMLEN - 1);
-      buf[SCNNMLEN - 1] = '\0';
-      strindex = strtol (buf, &p, 10);
-      if (*p == '\0' && strindex >= 0)
+      bfd_coff_set_long_section_names (abfd, true);
+
+      if (hdr->s_name[1] == '/')
 	{
-	  strings = _bfd_coff_read_string_table (abfd);
-	  if (strings == NULL)
-	    return FALSE;
-	  if ((bfd_size_type)(strindex + 2) >= obj_coff_strings_len (abfd))
-	    return FALSE;
-	  strings += strindex;
-	  name = (char *) bfd_alloc (abfd,
-				     (bfd_size_type) strlen (strings) + 1 + 1);
+	  /* LLVM extension: the '/' is followed by another '/' and then by
+	     the index in the strtab encoded in base64 without NUL at the
+	     end.  */
+	  uint32_t strindex;
+
+	  /* Decode the index.  No overflow is expected as the string table
+	     length is at most 2^32 - 1 (the length is written on the first
+	     four bytes).
+	     Also, contrary to RFC 4648, all the characters must be decoded,
+	     there is no padding.  */
+	  if (!decode_base64 (hdr->s_name + 2, SCNNMLEN - 2, &strindex))
+	    return false;
+
+	  name = extract_long_section_name (abfd, strindex);
 	  if (name == NULL)
-	    return FALSE;
-	  strcpy (name, strings);
+	    return false;
+	}
+      else
+	{
+	  /* PE classic long section name.  The '/' is followed by the index
+	     in the strtab.  The index is formatted as a decimal string.  */
+	  char buf[SCNNMLEN];
+	  long strindex;
+	  char *p;
+
+	  memcpy (buf, hdr->s_name + 1, SCNNMLEN - 1);
+	  buf[SCNNMLEN - 1] = '\0';
+	  strindex = strtol (buf, &p, 10);
+	  if (*p == '\0' && strindex >= 0)
+	    {
+	      name = extract_long_section_name (abfd, strindex);
+	      if (name == NULL)
+		return false;
+	    }
 	}
     }
 
@@ -102,135 +182,123 @@ make_a_section_from_file (bfd *abfd,
       name = (char *) bfd_alloc (abfd,
 				 (bfd_size_type) sizeof (hdr->s_name) + 1 + 1);
       if (name == NULL)
-	return FALSE;
+	return false;
       strncpy (name, (char *) &hdr->s_name[0], sizeof (hdr->s_name));
       name[sizeof (hdr->s_name)] = 0;
     }
 
-  return_section = bfd_make_section_anyway (abfd, name);
-  if (return_section == NULL)
-    return FALSE;
-
-  return_section->vma = hdr->s_vaddr;
-  return_section->lma = hdr->s_paddr;
-  return_section->size = hdr->s_size;
-  return_section->filepos = hdr->s_scnptr;
-  return_section->rel_filepos = hdr->s_relptr;
-  return_section->reloc_count = hdr->s_nreloc;
-
-  bfd_coff_set_alignment_hook (abfd, return_section, hdr);
-
-  return_section->line_filepos = hdr->s_lnnoptr;
-
-  return_section->lineno_count = hdr->s_nlnno;
-  return_section->userdata = NULL;
-  return_section->next = NULL;
-  return_section->target_index = target_index;
-
-  if (! bfd_coff_styp_to_sec_flags_hook (abfd, hdr, name, return_section,
-					 & flags))
-    result = FALSE;
+  newsect = bfd_make_section_anyway (abfd, name);
+  if (newsect == NULL)
+    return false;
+
+  newsect->vma = hdr->s_vaddr;
+  newsect->lma = hdr->s_paddr;
+  newsect->size = hdr->s_size;
+  newsect->filepos = hdr->s_scnptr;
+  newsect->rel_filepos = hdr->s_relptr;
+  newsect->reloc_count = hdr->s_nreloc;
+
+  bfd_coff_set_alignment_hook (abfd, newsect, hdr);
+
+  newsect->line_filepos = hdr->s_lnnoptr;
+
+  newsect->lineno_count = hdr->s_nlnno;
+  newsect->userdata = NULL;
+  newsect->next = NULL;
+  newsect->target_index = target_index;
 
-  return_section->flags = flags;
+  if (!bfd_coff_styp_to_sec_flags_hook (abfd, hdr, name, newsect, &flags))
+    result = false;
 
   /* At least on i386-coff, the line number count for a shared library
      section must be ignored.  */
-  if ((return_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
-    return_section->lineno_count = 0;
+  if ((flags & SEC_COFF_SHARED_LIBRARY) != 0)
+    newsect->lineno_count = 0;
 
   if (hdr->s_nreloc != 0)
-    return_section->flags |= SEC_RELOC;
+    flags |= SEC_RELOC;
   /* FIXME: should this check 'hdr->s_size > 0'.  */
   if (hdr->s_scnptr != 0)
-    return_section->flags |= SEC_HAS_CONTENTS;
+    flags |= SEC_HAS_CONTENTS;
+
+  newsect->flags = flags;
 
-  /* Compress/decompress DWARF debug sections with names: .debug_* and
-     .zdebug_*, after the section flags is set.  */
-  if ((flags & SEC_DEBUGGING)
-      && strlen (name) > 7
-      && ((name[1] == 'd' && name[6] == '_')
-	  || (strlen (name) > 8 && name[1] == 'z' && name[7] == '_')))
+  /* Compress/decompress DWARF debug sections.  */
+  if ((flags & SEC_DEBUGGING) != 0
+      && (flags & SEC_HAS_CONTENTS) != 0
+      && (startswith (name, ".debug_")
+	  || startswith (name, ".zdebug_")
+	  || startswith (name, ".gnu.debuglto_.debug_")
+	  || startswith (name, ".gnu.linkonce.wi.")))
     {
       enum { nothing, compress, decompress } action = nothing;
-      char *new_name = NULL;
 
-      if (bfd_is_section_compressed (abfd, return_section))
+      if (bfd_is_section_compressed (abfd, newsect))
 	{
 	  /* Compressed section.  Check if we should decompress.  */
 	  if ((abfd->flags & BFD_DECOMPRESS))
 	    action = decompress;
 	}
-      else if (!bfd_is_section_compressed (abfd, return_section))
+      else
 	{
 	  /* Normal section.  Check if we should compress.  */
-	  if ((abfd->flags & BFD_COMPRESS) && return_section->size != 0)
+	  if ((abfd->flags & BFD_COMPRESS) && newsect->size != 0)
 	    action = compress;
 	}
 
-      switch (action)
+      if (action == compress)
 	{
-	case nothing:
-	  break;
-	case compress:
-	  if (!bfd_init_section_compress_status (abfd, return_section))
+	  if (!bfd_init_section_compress_status (abfd, newsect))
 	    {
 	      _bfd_error_handler
-		/* xgettext: c-format */
-		(_("%pB: unable to initialize compress status for section %s"),
-		 abfd, name);
-	      return FALSE;
+		/* xgettext:c-format */
+		(_("%pB: unable to compress section %s"), abfd, name);
+	      return false;
 	    }
-	  if (return_section->compress_status == COMPRESS_SECTION_DONE)
-	    {
-	      if (name[1] != 'z')
-		{
-		  unsigned int len = strlen (name);
-
-		  new_name = bfd_alloc (abfd, len + 2);
-		  if (new_name == NULL)
-		    return FALSE;
-		  new_name[0] = '.';
-		  new_name[1] = 'z';
-		  memcpy (new_name + 2, name + 1, len);
-		}
-	    }
-	 break;
-	case decompress:
-	  if (!bfd_init_section_decompress_status (abfd, return_section))
+	}
+      else if (action == decompress)
+	{
+	  if (!bfd_init_section_decompress_status (abfd, newsect))
 	    {
 	      _bfd_error_handler
-		/* xgettext: c-format */
-		(_("%pB: unable to initialize decompress status for section %s"),
-		 abfd, name);
-	      return FALSE;
-	    }
-	  if (name[1] == 'z')
-	    {
-	      unsigned int len = strlen (name);
-
-	      new_name = bfd_alloc (abfd, len);
+		/* xgettext:c-format */
+		(_("%pB: unable to decompress section %s"), abfd, name);
+	      return false;
+	    }
+	  if (abfd->is_linker_input
+	      && name[1] == 'z')
+	    {
+	      /* Rename section from .zdebug_* to .debug_* so that ld
+		 scripts will see this section as a debug section.  */
+	      char *new_name = bfd_zdebug_name_to_debug (abfd, name);
 	      if (new_name == NULL)
-		return FALSE;
-	      new_name[0] = '.';
-	      memcpy (new_name + 1, name + 2, len - 1);
+		return false;
+	      bfd_rename_section (newsect, new_name);
 	    }
-	  break;
 	}
-      if (new_name != NULL)
-	bfd_rename_section (return_section, new_name);
     }
 
   return result;
 }
 
+void
+coff_object_cleanup (bfd *abfd)
+{
+  struct coff_tdata *td = coff_data (abfd);
+  if (td != NULL)
+    {
+      if (td->section_by_index)
+	htab_delete (td->section_by_index);
+      if (td->section_by_target_index)
+	htab_delete (td->section_by_target_index);
+      if (obj_pe (abfd) && pe_data (abfd)->comdat_hash)
+	htab_delete (pe_data (abfd)->comdat_hash);
+    }
+}
+
 /* Read in a COFF object and make it into a BFD.  This is used by
    ECOFF as well.  */
-const bfd_target *
-coff_real_object_p (bfd *,
-		    unsigned,
-		    struct internal_filehdr *,
-		    struct internal_aouthdr *);
-const bfd_target *
+bfd_cleanup
 coff_real_object_p (bfd *abfd,
 		    unsigned nscns,
 		    struct internal_filehdr *internal_f,
@@ -275,13 +343,10 @@ coff_real_object_p (bfd *abfd,
 
   scnhsz = bfd_coff_scnhsz (abfd);
   readsize = (bfd_size_type) nscns * scnhsz;
-  external_sections = (char *) bfd_alloc (abfd, readsize);
+  external_sections = (char *) _bfd_alloc_and_read (abfd, readsize, readsize);
   if (!external_sections)
     goto fail;
 
-  if (bfd_bread ((void *) external_sections, readsize, abfd) != readsize)
-    goto fail;
-
   /* Set the arch/mach *before* swapping in sections; section header swapping
      may depend on arch/mach info.  */
   if (! bfd_coff_set_arch_mach_hook (abfd, (void *) internal_f))
@@ -302,21 +367,24 @@ coff_real_object_p (bfd *abfd,
 	}
     }
 
-  return abfd->xvec;
+  _bfd_coff_free_symbols (abfd);
+  return coff_object_cleanup;
 
  fail:
+  coff_object_cleanup (abfd);
+  _bfd_coff_free_symbols (abfd);
   bfd_release (abfd, tdata);
  fail2:
   abfd->tdata.any = tdata_save;
   abfd->flags = oflags;
   abfd->start_address = ostart;
-  return (const bfd_target *) NULL;
+  return NULL;
 }
 
 /* Turn a COFF file into a BFD, but fail with bfd_error_wrong_format if it is
    not a COFF file.  This is also used by ECOFF.  */
 
-const bfd_target *
+bfd_cleanup
 coff_object_p (bfd *abfd)
 {
   bfd_size_type filhsz;
@@ -330,14 +398,11 @@ coff_object_p (bfd *abfd)
   filhsz = bfd_coff_filhsz (abfd);
   aoutsz = bfd_coff_aoutsz (abfd);
 
-  filehdr = bfd_alloc (abfd, filhsz);
+  filehdr = _bfd_alloc_and_read (abfd, filhsz, filhsz);
   if (filehdr == NULL)
-    return NULL;
-  if (bfd_bread (filehdr, filhsz, abfd) != filhsz)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
-      bfd_release (abfd, filehdr);
       return NULL;
     }
   bfd_coff_swap_filehdr_in (abfd, filehdr, &internal_f);
@@ -348,7 +413,7 @@ coff_object_p (bfd *abfd)
      aoutsz) in executables.  The bfd_coff_swap_aouthdr_in function
      expects this header to be aoutsz bytes in length, so we use that
      value in the call to bfd_alloc below.  But we must be careful to
-     only read in f_opthdr bytes in the call to bfd_bread.  We should
+     only read in f_opthdr bytes in the call to bfd_read.  We should
      also attempt to catch corrupt or non-COFF binaries with a strange
      value for f_opthdr.  */
   if (! bfd_coff_bad_format_hook (abfd, &internal_f)
@@ -363,18 +428,13 @@ coff_object_p (bfd *abfd)
     {
       void * opthdr;
 
-      opthdr = bfd_alloc (abfd, aoutsz);
+      opthdr = _bfd_alloc_and_read (abfd, aoutsz, internal_f.f_opthdr);
       if (opthdr == NULL)
 	return NULL;
-      if (bfd_bread (opthdr, (bfd_size_type) internal_f.f_opthdr, abfd)
-	  != internal_f.f_opthdr)
-	{
-	  bfd_release (abfd, opthdr);
-	  return NULL;
-	}
       /* PR 17512: file: 11056-1136-0.004.  */
       if (internal_f.f_opthdr < aoutsz)
-	memset (((char *) opthdr) + internal_f.f_opthdr, 0, aoutsz - internal_f.f_opthdr);
+	memset (((char *) opthdr) + internal_f.f_opthdr, 0,
+		aoutsz - internal_f.f_opthdr);
 
       bfd_coff_swap_aouthdr_in (abfd, opthdr, (void *) &internal_a);
       bfd_release (abfd, opthdr);
@@ -386,13 +446,26 @@ coff_object_p (bfd *abfd)
 			      : (struct internal_aouthdr *) NULL));
 }
 
+static hashval_t
+htab_hash_section_target_index (const void * entry)
+{
+  const struct bfd_section * sec = entry;
+  return sec->target_index;
+}
+
+static int
+htab_eq_section_target_index (const void * e1, const void * e2)
+{
+  const struct bfd_section * sec1 = e1;
+  const struct bfd_section * sec2 = e2;
+  return sec1->target_index == sec2->target_index;
+}
+
 /* Get the BFD section from a COFF symbol section number.  */
 
 asection *
 coff_section_from_bfd_index (bfd *abfd, int section_index)
 {
-  struct bfd_section *answer = abfd->sections;
-
   if (section_index == N_ABS)
     return bfd_abs_section_ptr;
   if (section_index == N_UNDEF)
@@ -400,13 +473,47 @@ coff_section_from_bfd_index (bfd *abfd,
   if (section_index == N_DEBUG)
     return bfd_abs_section_ptr;
 
-  while (answer)
+  struct bfd_section *answer;
+  htab_t table = coff_data (abfd)->section_by_target_index;
+
+  if (!table)
     {
-      if (answer->target_index == section_index)
-	return answer;
-      answer = answer->next;
+      table = htab_create (10, htab_hash_section_target_index,
+			   htab_eq_section_target_index, NULL);
+      if (table == NULL)
+	return bfd_und_section_ptr;
+      coff_data (abfd)->section_by_target_index = table;
     }
 
+  if (htab_elements (table) == 0)
+    {
+      for (answer = abfd->sections; answer; answer = answer->next)
+	{
+	  void **slot = htab_find_slot (table, answer, INSERT);
+	  if (slot == NULL)
+	    return bfd_und_section_ptr;
+	  *slot = answer;
+	}
+    }
+
+  struct bfd_section needle;
+  needle.target_index = section_index;
+
+  answer = htab_find (table, &needle);
+  if (answer != NULL)
+    return answer;
+
+  /* Cover the unlikely case of sections added after the first call to
+     this function.  */
+  for (answer = abfd->sections; answer; answer = answer->next)
+    if (answer->target_index == section_index)
+      {
+	void **slot = htab_find_slot (table, answer, INSERT);
+	if (slot != NULL)
+	  *slot = answer;
+	return answer;
+      }
+
   /* We should not reach this point, but the SCO 3.2v4 /lib/libc_s.a
      has a bad symbol table in biglitpow.o.  */
   return bfd_und_section_ptr;
@@ -474,10 +581,7 @@ _bfd_coff_internal_syment_name (bfd *abf
 	  if (strings == NULL)
 	    return NULL;
 	}
-      /* PR 17910: Only check for string overflow if the length has been set.
-	 Some DLLs, eg those produced by Visual Studio, may not set the length field.  */
-      if (obj_coff_strings_len (abfd) > 0
-	  && sym->_n._n_n._n_offset >= obj_coff_strings_len (abfd))
+      if (sym->_n._n_n._n_offset >= obj_coff_strings_len (abfd))
 	return NULL;
       return strings + sym->_n._n_n._n_offset;
     }
@@ -495,9 +599,9 @@ _bfd_coff_internal_syment_name (bfd *abf
 struct internal_reloc *
 _bfd_coff_read_internal_relocs (bfd *abfd,
 				asection *sec,
-				bfd_boolean cache,
+				bool cache,
 				bfd_byte *external_relocs,
-				bfd_boolean require_internal,
+				bool require_internal,
 				struct internal_reloc *internal_relocs)
 {
   bfd_size_type relsz;
@@ -533,7 +637,7 @@ _bfd_coff_read_internal_relocs (bfd *abf
     }
 
   if (bfd_seek (abfd, sec->rel_filepos, SEEK_SET) != 0
-      || bfd_bread (external_relocs, amt, abfd) != amt)
+      || bfd_read (external_relocs, amt, abfd) != amt)
     goto error_return;
 
   if (internal_relocs == NULL)
@@ -553,11 +657,8 @@ _bfd_coff_read_internal_relocs (bfd *abf
   for (; erel < erel_end; erel += relsz, irel++)
     bfd_coff_swap_reloc_in (abfd, (void *) erel, (void *) irel);
 
-  if (free_external != NULL)
-    {
-      free (free_external);
-      free_external = NULL;
-    }
+  free (free_external);
+  free_external = NULL;
 
   if (cache && free_internal != NULL)
     {
@@ -575,10 +676,8 @@ _bfd_coff_read_internal_relocs (bfd *abf
   return internal_relocs;
 
  error_return:
-  if (free_external != NULL)
-    free (free_external);
-  if (free_internal != NULL)
-    free (free_internal);
+  free (free_external);
+  free (free_internal);
   return NULL;
 }
 
@@ -609,7 +708,8 @@ coff_count_linenumbers (bfd *abfd)
     {
       asymbol *q_maybe = *p;
 
-      if (bfd_family_coff (bfd_asymbol_bfd (q_maybe)))
+      if (bfd_asymbol_bfd (q_maybe) != NULL
+	  && bfd_family_coff (bfd_asymbol_bfd (q_maybe)))
 	{
 	  coff_symbol_type *q = coffsymbol (q_maybe);
 
@@ -699,7 +799,7 @@ fixup_symbol_value (bfd *abfd,
    chain, and that the last one points to the first external symbol. We
    do that here too.  */
 
-bfd_boolean
+bool
 coff_renumber_symbols (bfd *bfd_ptr, int *first_undef)
 {
   unsigned int symbol_count = bfd_get_symcount (bfd_ptr);
@@ -726,7 +826,7 @@ coff_renumber_symbols (bfd *bfd_ptr, int
     amt = sizeof (asymbol *) * ((bfd_size_type) symbol_count + 1);
     newsyms = (asymbol **) bfd_alloc (bfd_ptr, amt);
     if (!newsyms)
-      return FALSE;
+      return false;
     bfd_ptr->outsymbols = newsyms;
     for (i = 0; i < symbol_count; i++)
       if ((symbol_ptr_ptr[i]->flags & BSF_NOT_AT_END) != 0
@@ -788,7 +888,7 @@ coff_renumber_symbols (bfd *bfd_ptr, int
 
   obj_conv_table_size (bfd_ptr) = native_index;
 
-  return TRUE;
+  return true;
 }
 
 /* Run thorough the symbol table again, and fix it so that all
@@ -817,8 +917,8 @@ coff_mangle_symbols (bfd *bfd_ptr)
 	    {
 	      /* FIXME: We should use a union here.  */
 	      s->u.syment.n_value =
-		(bfd_hostptr_t) ((combined_entry_type *)
-			  ((bfd_hostptr_t) s->u.syment.n_value))->offset;
+		(uintptr_t) ((combined_entry_type *)
+			     (uintptr_t) s->u.syment.n_value)->offset;
 	      s->fix_value = 0;
 	    }
 	  if (s->fix_line)
@@ -840,19 +940,19 @@ coff_mangle_symbols (bfd *bfd_ptr)
 	      BFD_ASSERT (! a->is_sym);
 	      if (a->fix_tag)
 		{
-		  a->u.auxent.x_sym.x_tagndx.l =
+		  a->u.auxent.x_sym.x_tagndx.u32 =
 		    a->u.auxent.x_sym.x_tagndx.p->offset;
 		  a->fix_tag = 0;
 		}
 	      if (a->fix_end)
 		{
-		  a->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l =
+		  a->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32 =
 		    a->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.p->offset;
 		  a->fix_end = 0;
 		}
 	      if (a->fix_scnlen)
 		{
-		  a->u.auxent.x_csect.x_scnlen.l =
+		  a->u.auxent.x_csect.x_scnlen.u64 =
 		    a->u.auxent.x_csect.x_scnlen.p->offset;
 		  a->fix_scnlen = 0;
 		}
@@ -861,17 +961,53 @@ coff_mangle_symbols (bfd *bfd_ptr)
     }
 }
 
-static void
+static bool
+coff_write_auxent_fname (bfd *abfd,
+			 char *str,
+			 union internal_auxent *auxent,
+			 struct bfd_strtab_hash *strtab,
+			 bool hash)
+{
+  unsigned int str_length = strlen (str);
+  unsigned int filnmlen = bfd_coff_filnmlen (abfd);
+
+  if (bfd_coff_long_filenames (abfd))
+    {
+      if (str_length <= filnmlen)
+	strncpy (auxent->x_file.x_n.x_fname, str, filnmlen);
+      else
+	{
+	  bfd_size_type indx = _bfd_stringtab_add (strtab, str, hash, false);
+
+	  if (indx == (bfd_size_type) -1)
+	    return false;
+
+	  auxent->x_file.x_n.x_n.x_offset = STRING_SIZE_SIZE + indx;
+	  auxent->x_file.x_n.x_n.x_zeroes = 0;
+	}
+    }
+  else
+    {
+      strncpy (auxent->x_file.x_n.x_fname, str, filnmlen);
+      if (str_length > filnmlen)
+	str[filnmlen] = '\0';
+    }
+
+  return true;
+}
+
+static bool
 coff_fix_symbol_name (bfd *abfd,
 		      asymbol *symbol,
 		      combined_entry_type *native,
-		      bfd_size_type *string_size_p,
+		      struct bfd_strtab_hash *strtab,
+		      bool hash,
 		      asection **debug_string_section_p,
 		      bfd_size_type *debug_string_size_p)
 {
   unsigned int name_length;
-  union internal_auxent *auxent;
   char *name = (char *) (symbol->name);
+  bfd_size_type indx;
 
   if (name == NULL)
     {
@@ -885,40 +1021,22 @@ coff_fix_symbol_name (bfd *abfd,
   if (native->u.syment.n_sclass == C_FILE
       && native->u.syment.n_numaux > 0)
     {
-      unsigned int filnmlen;
-
       if (bfd_coff_force_symnames_in_strings (abfd))
 	{
-	  native->u.syment._n._n_n._n_offset =
-	      (*string_size_p + STRING_SIZE_SIZE);
+	  indx = _bfd_stringtab_add (strtab, ".file", hash, false);
+	  if (indx == (bfd_size_type) -1)
+	    return false;
+
+	  native->u.syment._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
 	  native->u.syment._n._n_n._n_zeroes = 0;
-	  *string_size_p += 6;  /* strlen(".file") + 1 */
 	}
       else
 	strncpy (native->u.syment._n._n_name, ".file", SYMNMLEN);
 
       BFD_ASSERT (! (native + 1)->is_sym);
-      auxent = &(native + 1)->u.auxent;
-
-      filnmlen = bfd_coff_filnmlen (abfd);
-
-      if (bfd_coff_long_filenames (abfd))
-	{
-	  if (name_length <= filnmlen)
-	    strncpy (auxent->x_file.x_fname, name, filnmlen);
-	  else
-	    {
-	      auxent->x_file.x_n.x_offset = *string_size_p + STRING_SIZE_SIZE;
-	      auxent->x_file.x_n.x_zeroes = 0;
-	      *string_size_p += name_length + 1;
-	    }
-	}
-      else
-	{
-	  strncpy (auxent->x_file.x_fname, name, filnmlen);
-	  if (name_length > filnmlen)
-	    name[filnmlen] = '\0';
-	}
+      if (!coff_write_auxent_fname (abfd, name, &(native + 1)->u.auxent,
+			       strtab, hash))
+	return false;
     }
   else
     {
@@ -928,10 +1046,12 @@ coff_fix_symbol_name (bfd *abfd,
 
       else if (!bfd_coff_symname_in_debug (abfd, &native->u.syment))
 	{
-	  native->u.syment._n._n_n._n_offset = (*string_size_p
-						+ STRING_SIZE_SIZE);
+	  indx = _bfd_stringtab_add (strtab, name, hash, false);
+	  if (indx == (bfd_size_type) -1)
+	    return false;
+
+	  native->u.syment._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
 	  native->u.syment._n._n_n._n_zeroes = 0;
-	  *string_size_p += name_length + 1;
 	}
       else
 	{
@@ -972,6 +1092,8 @@ coff_fix_symbol_name (bfd *abfd,
 	  *debug_string_size_p += name_length + 1 + prefix_len;
 	}
     }
+
+  return true;
 }
 
 /* We need to keep track of the symbol index so that when we write out
@@ -982,12 +1104,13 @@ coff_fix_symbol_name (bfd *abfd,
 
 /* Write a symbol out to a COFF file.  */
 
-static bfd_boolean
+static bool
 coff_write_symbol (bfd *abfd,
 		   asymbol *symbol,
 		   combined_entry_type *native,
 		   bfd_vma *written,
-		   bfd_size_type *string_size_p,
+		   struct bfd_strtab_hash *strtab,
+		   bool hash,
 		   asection **debug_string_section_p,
 		   bfd_size_type *debug_string_size_p)
 {
@@ -1019,16 +1142,17 @@ coff_write_symbol (bfd *abfd,
     native->u.syment.n_scnum =
       output_section->target_index;
 
-  coff_fix_symbol_name (abfd, symbol, native, string_size_p,
-			debug_string_section_p, debug_string_size_p);
+  if (!coff_fix_symbol_name (abfd, symbol, native, strtab, hash,
+			     debug_string_section_p, debug_string_size_p))
+    return false;
 
   symesz = bfd_coff_symesz (abfd);
   buf = bfd_alloc (abfd, symesz);
   if (!buf)
-    return FALSE;
+    return false;
   bfd_coff_swap_sym_out (abfd, &native->u.syment, buf);
-  if (bfd_bwrite (buf, symesz, abfd) != symesz)
-    return FALSE;
+  if (bfd_write (buf, symesz, abfd) != symesz)
+    return false;
   bfd_release (abfd, buf);
 
   if (native->u.syment.n_numaux > 0)
@@ -1039,17 +1163,26 @@ coff_write_symbol (bfd *abfd,
       auxesz = bfd_coff_auxesz (abfd);
       buf = bfd_alloc (abfd, auxesz);
       if (!buf)
-	return FALSE;
+	return false;
       for (j = 0; j < native->u.syment.n_numaux; j++)
 	{
 	  BFD_ASSERT (! (native + j + 1)->is_sym);
+
+	  /* Adjust auxent only if this isn't the filename
+	     auxiliary entry.  */
+	  if (native->u.syment.n_sclass == C_FILE
+	      && (native + j + 1)->u.auxent.x_file.x_ftype
+	      && (native + j + 1)->extrap)
+	    coff_write_auxent_fname (abfd, (char *) (native + j + 1)->extrap,
+				     &(native + j + 1)->u.auxent, strtab, hash);
+
 	  bfd_coff_swap_aux_out (abfd,
 				 &((native + j + 1)->u.auxent),
 				 type, n_sclass, (int) j,
 				 native->u.syment.n_numaux,
 				 buf);
-	  if (bfd_bwrite (buf, auxesz, abfd) != auxesz)
-	    return FALSE;
+	  if (bfd_write (buf, auxesz, abfd) != auxesz)
+	    return false;
 	}
       bfd_release (abfd, buf);
     }
@@ -1058,20 +1191,20 @@ coff_write_symbol (bfd *abfd,
   set_index (symbol, *written);
 
   *written += numaux + 1;
-  return TRUE;
+  return true;
 }
 
 /* Write out a symbol to a COFF file that does not come from a COFF
    file originally.  This symbol may have been created by the linker,
    or we may be linking a non COFF file to a COFF file.  */
 
-bfd_boolean
+bool
 coff_write_alien_symbol (bfd *abfd,
 			 asymbol *symbol,
 			 struct internal_syment *isym,
-			 union internal_auxent *iaux,
 			 bfd_vma *written,
-			 bfd_size_type *string_size_p,
+			 struct bfd_strtab_hash *strtab,
+			 bool hash,
 			 asection **debug_string_section_p,
 			 bfd_size_type *debug_string_size_p)
 {
@@ -1081,7 +1214,7 @@ coff_write_alien_symbol (bfd *abfd,
 			       ? symbol->section->output_section
 			       : symbol->section;
   struct bfd_link_info *link_info = coff_data (abfd)->link_info;
-  bfd_boolean ret;
+  bool ret;
 
   if ((!link_info || link_info->strip_discarded)
       && !bfd_is_abs_section (symbol->section)
@@ -1090,11 +1223,12 @@ coff_write_alien_symbol (bfd *abfd,
       symbol->name = "";
       if (isym != NULL)
 	memset (isym, 0, sizeof (*isym));
-      return TRUE;
+      return true;
     }
+  memset (dummy, 0, sizeof dummy);
   native = dummy;
-  native->is_sym = TRUE;
-  native[1].is_sym = FALSE;
+  native->is_sym = true;
+  native[1].is_sym = false;
   native->u.syment.n_type = T_NULL;
   native->u.syment.n_flags = 0;
   native->u.syment.n_numaux = 0;
@@ -1122,7 +1256,7 @@ coff_write_alien_symbol (bfd *abfd,
       symbol->name = "";
       if (isym != NULL)
 	memset (isym, 0, sizeof (*isym));
-      return TRUE;
+      return true;
     }
   else
     {
@@ -1151,22 +1285,20 @@ coff_write_alien_symbol (bfd *abfd,
   else
     native->u.syment.n_sclass = C_EXT;
 
-  ret = coff_write_symbol (abfd, symbol, native, written, string_size_p,
+  ret = coff_write_symbol (abfd, symbol, native, written, strtab, hash,
 			   debug_string_section_p, debug_string_size_p);
   if (isym != NULL)
     *isym = native->u.syment;
-  if (iaux != NULL && native->u.syment.n_numaux)
-    *iaux = native[1].u.auxent;
   return ret;
 }
 
 /* Write a native symbol to a COFF file.  */
 
-static bfd_boolean
+static bool
 coff_write_native_symbol (bfd *abfd,
 			  coff_symbol_type *symbol,
 			  bfd_vma *written,
-			  bfd_size_type *string_size_p,
+			  struct bfd_strtab_hash *strtab,
 			  asection **debug_string_section_p,
 			  bfd_size_type *debug_string_size_p)
 {
@@ -1179,7 +1311,7 @@ coff_write_native_symbol (bfd *abfd,
       && symbol->symbol.section->output_section == bfd_abs_section_ptr)
     {
       symbol->symbol.name = "";
-      return TRUE;
+      return true;
     }
 
   BFD_ASSERT (native->is_sym);
@@ -1208,7 +1340,7 @@ coff_write_native_symbol (bfd *abfd,
 	     + symbol->symbol.section->output_offset);
 	  count++;
 	}
-      symbol->done_lineno = TRUE;
+      symbol->done_lineno = true;
 
       if (! bfd_is_const_section (symbol->symbol.section->output_section))
 	symbol->symbol.section->output_section->moving_line_filepos +=
@@ -1216,7 +1348,7 @@ coff_write_native_symbol (bfd *abfd,
     }
 
   return coff_write_symbol (abfd, &(symbol->symbol), native, written,
-			    string_size_p, debug_string_section_p,
+			    strtab, true, debug_string_section_p,
 			    debug_string_size_p);
 }
 
@@ -1228,10 +1360,10 @@ null_error_handler (const char *fmt ATTR
 
 /* Write out the COFF symbols.  */
 
-bfd_boolean
+bool
 coff_write_symbols (bfd *abfd)
 {
-  bfd_size_type string_size;
+  struct bfd_strtab_hash *strtab;
   asection *debug_string_section;
   bfd_size_type debug_string_size;
   unsigned int i;
@@ -1239,31 +1371,31 @@ coff_write_symbols (bfd *abfd)
   bfd_vma written = 0;
   asymbol **p;
 
-  string_size = 0;
   debug_string_section = NULL;
   debug_string_size = 0;
 
+  strtab = _bfd_stringtab_init ();
+  if (strtab == NULL)
+    return false;
+
   /* If this target supports long section names, they must be put into
      the string table.  This is supported by PE.  This code must
      handle section names just as they are handled in
-     coff_write_object_contents.  */
+     coff_write_object_contents.  This is why we pass hash as FALSE below.  */
   if (bfd_coff_long_section_names (abfd))
     {
       asection *o;
 
       for (o = abfd->sections; o != NULL; o = o->next)
-	{
-	  size_t len;
-
-	  len = strlen (o->name);
-	  if (len > SCNNMLEN)
-	    string_size += len + 1;
-	}
+	if (strlen (o->name) > SCNNMLEN
+	    && _bfd_stringtab_add (strtab, o->name, false, false)
+	       == (bfd_size_type) -1)
+	  return false;
     }
 
   /* Seek to the right place.  */
   if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   /* Output all the symbols we have.  */
   written = 0;
@@ -1275,10 +1407,10 @@ coff_write_symbols (bfd *abfd)
       if (c_symbol == (coff_symbol_type *) NULL
 	  || c_symbol->native == (combined_entry_type *) NULL)
 	{
-	  if (!coff_write_alien_symbol (abfd, symbol, NULL, NULL, &written,
-					&string_size, &debug_string_section,
+	  if (!coff_write_alien_symbol (abfd, symbol, NULL, &written,
+					strtab, true, &debug_string_section,
 					&debug_string_size))
-	    return FALSE;
+	    return false;
 	}
       else
 	{
@@ -1321,118 +1453,35 @@ coff_write_symbols (bfd *abfd)
 	    }
 
 	  if (!coff_write_native_symbol (abfd, c_symbol, &written,
-					 &string_size, &debug_string_section,
+					 strtab, &debug_string_section,
 					 &debug_string_size))
-	    return FALSE;
+	    return false;
 	}
     }
 
   obj_raw_syment_count (abfd) = written;
 
-  /* Now write out strings.  */
-  if (string_size != 0)
-    {
-      unsigned int size = string_size + STRING_SIZE_SIZE;
-      bfd_byte buffer[STRING_SIZE_SIZE];
+  /* Now write out strings.
+
+     We would normally not write anything here if there are no strings, but
+     we'll write out 4 so that any stupid coff reader which tries to read the
+     string table even when there isn't one won't croak.  */
+  {
+    bfd_byte buffer[STRING_SIZE_SIZE];
 
 #if STRING_SIZE_SIZE == 4
-      H_PUT_32 (abfd, size, buffer);
+    H_PUT_32 (abfd, _bfd_stringtab_size (strtab) + STRING_SIZE_SIZE, buffer);
 #else
  #error Change H_PUT_32
 #endif
-      if (bfd_bwrite ((void *) buffer, (bfd_size_type) sizeof (buffer), abfd)
-	  != sizeof (buffer))
-	return FALSE;
-
-      /* Handle long section names.  This code must handle section
-	 names just as they are handled in coff_write_object_contents.  */
-      if (bfd_coff_long_section_names (abfd))
-	{
-	  asection *o;
-
-	  for (o = abfd->sections; o != NULL; o = o->next)
-	    {
-	      size_t len;
-
-	      len = strlen (o->name);
-	      if (len > SCNNMLEN)
-		{
-		  if (bfd_bwrite (o->name, (bfd_size_type) (len + 1), abfd)
-		      != len + 1)
-		    return FALSE;
-		}
-	    }
-	}
+    if (bfd_write (buffer, sizeof (buffer), abfd) != sizeof (buffer))
+      return false;
 
-      for (p = abfd->outsymbols, i = 0;
-	   i < limit;
-	   i++, p++)
-	{
-	  asymbol *q = *p;
-	  size_t name_length = strlen (q->name);
-	  coff_symbol_type *c_symbol = coff_symbol_from (q);
-	  size_t maxlen;
-
-	  /* Figure out whether the symbol name should go in the string
-	     table.  Symbol names that are short enough are stored
-	     directly in the syment structure.  File names permit a
-	     different, longer, length in the syment structure.  On
-	     XCOFF, some symbol names are stored in the .debug section
-	     rather than in the string table.  */
-
-	  if (c_symbol == NULL
-	      || c_symbol->native == NULL)
-	    /* This is not a COFF symbol, so it certainly is not a
-	       file name, nor does it go in the .debug section.  */
-	    maxlen = bfd_coff_force_symnames_in_strings (abfd) ? 0 : SYMNMLEN;
-
-	  else if (! c_symbol->native->is_sym)
-	    maxlen = bfd_coff_force_symnames_in_strings (abfd) ? 0 : SYMNMLEN;
-
-	  else if (bfd_coff_symname_in_debug (abfd,
-					      &c_symbol->native->u.syment))
-	    /* This symbol name is in the XCOFF .debug section.
-	       Don't write it into the string table.  */
-	    maxlen = name_length;
+    if (! _bfd_stringtab_emit (abfd, strtab))
+      return false;
+  }
 
-	  else if (c_symbol->native->u.syment.n_sclass == C_FILE
-		   && c_symbol->native->u.syment.n_numaux > 0)
-	    {
-	      if (bfd_coff_force_symnames_in_strings (abfd))
-		{
-		  if (bfd_bwrite (".file", (bfd_size_type) 6, abfd) != 6)
-		    return FALSE;
-		}
-	      maxlen = bfd_coff_filnmlen (abfd);
-	    }
-	  else
-	    maxlen = bfd_coff_force_symnames_in_strings (abfd) ? 0 : SYMNMLEN;
-
-	  if (name_length > maxlen)
-	    {
-	      if (bfd_bwrite ((void *) (q->name), (bfd_size_type) name_length + 1,
-			     abfd) != name_length + 1)
-		return FALSE;
-	    }
-	}
-    }
-  else
-    {
-      /* We would normally not write anything here, but we'll write
-	 out 4 so that any stupid coff reader which tries to read the
-	 string table even when there isn't one won't croak.  */
-      unsigned int size = STRING_SIZE_SIZE;
-      bfd_byte buffer[STRING_SIZE_SIZE];
-
-#if STRING_SIZE_SIZE == 4
-      H_PUT_32 (abfd, size, buffer);
-#else
- #error Change H_PUT_32
-#endif
-      if (bfd_bwrite ((void *) buffer, (bfd_size_type) STRING_SIZE_SIZE, abfd)
-	  != STRING_SIZE_SIZE)
-	return FALSE;
-    }
+  _bfd_stringtab_free (strtab);
 
   /* Make sure the .debug section was created to be the correct size.
      We should create it ourselves on the fly, but we don't because
@@ -1445,10 +1494,10 @@ coff_write_symbols (bfd *abfd)
 				 1 << debug_string_section->alignment_power)
 		      == debug_string_section->size)));
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 coff_write_linenumbers (bfd *abfd)
 {
   asection *s;
@@ -1458,14 +1507,14 @@ coff_write_linenumbers (bfd *abfd)
   linesz = bfd_coff_linesz (abfd);
   buff = bfd_alloc (abfd, linesz);
   if (!buff)
-    return FALSE;
+    return false;
   for (s = abfd->sections; s != (asection *) NULL; s = s->next)
     {
       if (s->lineno_count)
 	{
 	  asymbol **q = abfd->outsymbols;
 	  if (bfd_seek (abfd, s->line_filepos, SEEK_SET) != 0)
-	    return FALSE;
+	    return false;
 	  /* Find all the linenumbers in this section.  */
 	  while (*q)
 	    {
@@ -1484,18 +1533,16 @@ coff_write_linenumbers (bfd *abfd)
 		      out.l_lnno = 0;
 		      out.l_addr.l_symndx = l->u.offset;
 		      bfd_coff_swap_lineno_out (abfd, &out, buff);
-		      if (bfd_bwrite (buff, (bfd_size_type) linesz, abfd)
-			  != linesz)
-			return FALSE;
+		      if (bfd_write (buff, linesz, abfd) != linesz)
+			return false;
 		      l++;
 		      while (l->line_number)
 			{
 			  out.l_lnno = l->line_number;
 			  out.l_addr.l_symndx = l->u.offset;
 			  bfd_coff_swap_lineno_out (abfd, &out, buff);
-			  if (bfd_bwrite (buff, (bfd_size_type) linesz, abfd)
-			      != linesz)
-			    return FALSE;
+			  if (bfd_write (buff, linesz, abfd) != linesz)
+			    return false;
 			  l++;
 			}
 		    }
@@ -1505,7 +1552,7 @@ coff_write_linenumbers (bfd *abfd)
 	}
     }
   bfd_release (abfd, buff);
-  return TRUE;
+  return true;
 }
 
 alent *
@@ -1522,8 +1569,7 @@ coff_pointerize_aux (bfd *abfd,
 		     combined_entry_type *table_base,
 		     combined_entry_type *symbol,
 		     unsigned int indaux,
-		     combined_entry_type *auxent,
-		     combined_entry_type *table_end)
+		     combined_entry_type *auxent)
 {
   unsigned int type = symbol->u.syment.n_type;
   unsigned int n_sclass = symbol->u.syment.n_sclass;
@@ -1541,6 +1587,8 @@ coff_pointerize_aux (bfd *abfd,
     return;
   if (n_sclass == C_FILE)
     return;
+  if (n_sclass == C_DWARF)
+    return;
 
   BFD_ASSERT (! auxent->is_sym);
   /* Otherwise patch up.  */
@@ -1549,25 +1597,21 @@ coff_pointerize_aux (bfd *abfd,
 
   if ((ISFCN (type) || ISTAG (n_sclass) || n_sclass == C_BLOCK
        || n_sclass == C_FCN)
-      && auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l > 0
-      && auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l
-      < (long) obj_raw_syment_count (abfd)
-      && table_base + auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l
-      < table_end)
+      && auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32 > 0
+      && (auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32
+	  < obj_raw_syment_count (abfd)))
     {
       auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.p =
-	table_base + auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l;
+	table_base + auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32;
       auxent->fix_end = 1;
     }
 
   /* A negative tagndx is meaningless, but the SCO 3.2v4 cc can
      generate one, so we must be careful to ignore it.  */
-  if ((unsigned long) auxent->u.auxent.x_sym.x_tagndx.l
-      < obj_raw_syment_count (abfd)
-      && table_base + auxent->u.auxent.x_sym.x_tagndx.l < table_end)
+  if (auxent->u.auxent.x_sym.x_tagndx.u32 < obj_raw_syment_count (abfd))
     {
       auxent->u.auxent.x_sym.x_tagndx.p =
-	table_base + auxent->u.auxent.x_sym.x_tagndx.l;
+	table_base + auxent->u.auxent.x_sym.x_tagndx.u32;
       auxent->fix_tag = 1;
     }
 }
@@ -1591,19 +1635,21 @@ build_debug_section (bfd *abfd, asection
       return NULL;
     }
 
-  sec_size = sect->size;
-  debug_section = (char *) bfd_alloc (abfd, sec_size);
-  if (debug_section == NULL)
-    return NULL;
-
   /* Seek to the beginning of the `.debug' section and read it.
      Save the current position first; it is needed by our caller.
      Then read debug section and reset the file pointer.  */
 
   position = bfd_tell (abfd);
-  if (bfd_seek (abfd, sect->filepos, SEEK_SET) != 0
-      || bfd_bread (debug_section, sec_size, abfd) != sec_size
-      || bfd_seek (abfd, position, SEEK_SET) != 0)
+  if (bfd_seek (abfd, sect->filepos, SEEK_SET) != 0)
+    return NULL;
+
+  sec_size = sect->size;
+  debug_section = (char *) _bfd_alloc_and_read (abfd, sec_size + 1, sec_size);
+  if (debug_section == NULL)
+    return NULL;
+  debug_section[sec_size] = 0;
+
+  if (bfd_seek (abfd, position, SEEK_SET) != 0)
     return NULL;
 
   * sect_return = sect;
@@ -1634,53 +1680,41 @@ copy_name (bfd *abfd, char *name, size_t
 
 /* Read in the external symbols.  */
 
-bfd_boolean
+bool
 _bfd_coff_get_external_symbols (bfd *abfd)
 {
-  bfd_size_type symesz;
-  bfd_size_type size;
+  size_t symesz;
+  size_t size;
   void * syms;
+  ufile_ptr filesize;
 
   if (obj_coff_external_syms (abfd) != NULL)
-    return TRUE;
+    return true;
 
   symesz = bfd_coff_symesz (abfd);
-
-  size = obj_raw_syment_count (abfd) * symesz;
-  if (size == 0)
-    return TRUE;
-  /* Check for integer overflow and for unreasonable symbol counts.  */
-  if (size < obj_raw_syment_count (abfd)
-      || (bfd_get_file_size (abfd) > 0
-	  && size > bfd_get_file_size (abfd)))
-
+  if (_bfd_mul_overflow (obj_raw_syment_count (abfd), symesz, &size))
     {
-      _bfd_error_handler (_("%pB: corrupt symbol count: %#" PRIx64 ""),
-			  abfd, (uint64_t) obj_raw_syment_count (abfd));
-      return FALSE;
+      bfd_set_error (bfd_error_file_truncated);
+      return false;
     }
 
-  syms = bfd_malloc (size);
-  if (syms == NULL)
-    {
-      /* PR 21013: Provide an error message when the alloc fails.  */
-      _bfd_error_handler (_("%pB: not enough memory to allocate space "
-			    "for %#" PRIx64 " symbols of size %#" PRIx64),
-			  abfd, (uint64_t) obj_raw_syment_count (abfd),
-			  (uint64_t) symesz);
-      return FALSE;
-    }
+  if (size == 0)
+    return true;
 
-  if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
-      || bfd_bread (syms, size, abfd) != size)
+  filesize = bfd_get_file_size (abfd);
+  if (filesize != 0
+      && ((ufile_ptr) obj_sym_filepos (abfd) > filesize
+	  || size > filesize - obj_sym_filepos (abfd)))
     {
-      if (syms != NULL)
-	free (syms);
-      return FALSE;
+      bfd_set_error (bfd_error_file_truncated);
+      return false;
     }
 
+  if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0)
+    return false;
+  syms = _bfd_malloc_and_read (abfd, size, size);
   obj_coff_external_syms (abfd) = syms;
-  return TRUE;
+  return syms != NULL;
 }
 
 /* Read in the external strings.  The strings are not loaded until
@@ -1695,7 +1729,10 @@ _bfd_coff_read_string_table (bfd *abfd)
   char extstrsize[STRING_SIZE_SIZE];
   bfd_size_type strsize;
   char *strings;
-  file_ptr pos;
+  ufile_ptr pos;
+  ufile_ptr filesize;
+  size_t symesz;
+  size_t size;
 
   if (obj_coff_strings (abfd) != NULL)
     return obj_coff_strings (abfd);
@@ -1706,13 +1743,19 @@ _bfd_coff_read_string_table (bfd *abfd)
       return NULL;
     }
 
+  symesz = bfd_coff_symesz (abfd);
   pos = obj_sym_filepos (abfd);
-  pos += obj_raw_syment_count (abfd) * bfd_coff_symesz (abfd);
-  if (bfd_seek (abfd, pos, SEEK_SET) != 0)
+  if (_bfd_mul_overflow (obj_raw_syment_count (abfd), symesz, &size)
+      || pos + size < pos)
+    {
+      bfd_set_error (bfd_error_file_truncated);
+      return NULL;
+    }
+
+  if (bfd_seek (abfd, pos + size, SEEK_SET) != 0)
     return NULL;
 
-  if (bfd_bread (extstrsize, (bfd_size_type) sizeof extstrsize, abfd)
-      != sizeof extstrsize)
+  if (bfd_read (extstrsize, sizeof extstrsize, abfd) != sizeof extstrsize)
     {
       if (bfd_get_error () != bfd_error_file_truncated)
 	return NULL;
@@ -1729,7 +1772,9 @@ _bfd_coff_read_string_table (bfd *abfd)
 #endif
     }
 
-  if (strsize < STRING_SIZE_SIZE || strsize > bfd_get_file_size (abfd))
+  filesize = bfd_get_file_size (abfd);
+  if (strsize < STRING_SIZE_SIZE
+      || (filesize != 0 && strsize > filesize))
     {
       _bfd_error_handler
 	/* xgettext: c-format */
@@ -1748,7 +1793,7 @@ _bfd_coff_read_string_table (bfd *abfd)
      they are zero.  */
   memset (strings, 0, STRING_SIZE_SIZE);
 
-  if (bfd_bread (strings + STRING_SIZE_SIZE, strsize - STRING_SIZE_SIZE, abfd)
+  if (bfd_read (strings + STRING_SIZE_SIZE, strsize - STRING_SIZE_SIZE, abfd)
       != strsize - STRING_SIZE_SIZE)
     {
       free (strings);
@@ -1764,11 +1809,11 @@ _bfd_coff_read_string_table (bfd *abfd)
 
 /* Free up the external symbols and strings read from a COFF file.  */
 
-bfd_boolean
+bool
 _bfd_coff_free_symbols (bfd *abfd)
 {
   if (! bfd_family_coff (abfd))
-    return FALSE;
+    return false;
 
   if (obj_coff_external_syms (abfd) != NULL
       && ! obj_coff_keep_syms (abfd))
@@ -1785,7 +1830,7 @@ _bfd_coff_free_symbols (bfd *abfd)
       obj_coff_strings_len (abfd) = 0;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read a symbol table into freshly bfd_allocated memory, swap it, and
@@ -1798,8 +1843,6 @@ coff_get_normalized_symtab (bfd *abfd)
 {
   combined_entry_type *internal;
   combined_entry_type *internal_ptr;
-  combined_entry_type *symbol_ptr;
-  combined_entry_type *internal_end;
   size_t symesz;
   char *raw_src;
   char *raw_end;
@@ -1822,13 +1865,12 @@ coff_get_normalized_symtab (bfd *abfd)
   internal = (combined_entry_type *) bfd_zalloc (abfd, size);
   if (internal == NULL && size != 0)
     return NULL;
-  internal_end = internal + obj_raw_syment_count (abfd);
 
   raw_src = (char *) obj_coff_external_syms (abfd);
 
   /* Mark the end of the symbols.  */
   symesz = bfd_coff_symesz (abfd);
-  raw_end = (char *) raw_src + obj_raw_syment_count (abfd) * symesz;
+  raw_end = PTR_ADD (raw_src, obj_raw_syment_count (abfd) * symesz);
 
   /* FIXME SOMEDAY.  A string table size of zero is very weird, but
      probably possible.  If one shows up, it will probably kill us.  */
@@ -1842,55 +1884,38 @@ coff_get_normalized_symtab (bfd *abfd)
 
       bfd_coff_swap_sym_in (abfd, (void *) raw_src,
 			    (void *) & internal_ptr->u.syment);
-      symbol_ptr = internal_ptr;
-      internal_ptr->is_sym = TRUE;
+      internal_ptr->is_sym = true;
+      combined_entry_type *sym = internal_ptr;
+
+      /* PR 17512: Prevent buffer overrun.  */
+      if (sym->u.syment.n_numaux > ((raw_end - 1) - raw_src) / symesz)
+	return NULL;
 
-      for (i = 0;
-	   i < symbol_ptr->u.syment.n_numaux;
-	   i++)
+      for (i = 0; i < sym->u.syment.n_numaux; i++)
 	{
 	  internal_ptr++;
 	  raw_src += symesz;
 
-	  /* PR 17512: Prevent buffer overrun.  */
-	  if (raw_src >= raw_end || internal_ptr >= internal_end)
-	    {
-	      bfd_release (abfd, internal);
-	      return NULL;
-	    }
-
 	  bfd_coff_swap_aux_in (abfd, (void *) raw_src,
-				symbol_ptr->u.syment.n_type,
-				symbol_ptr->u.syment.n_sclass,
-				(int) i, symbol_ptr->u.syment.n_numaux,
+				sym->u.syment.n_type,
+				sym->u.syment.n_sclass,
+				(int) i, sym->u.syment.n_numaux,
 				&(internal_ptr->u.auxent));
 
-	  internal_ptr->is_sym = FALSE;
-	  coff_pointerize_aux (abfd, internal, symbol_ptr, i,
-			       internal_ptr, internal_end);
+	  internal_ptr->is_sym = false;
+	  coff_pointerize_aux (abfd, internal, sym, i, internal_ptr);
 	}
-    }
-
-  /* Free the raw symbols, but not the strings (if we have them).  */
-  obj_coff_keep_strings (abfd) = TRUE;
-  if (! _bfd_coff_free_symbols (abfd))
-    return NULL;
-
-  for (internal_ptr = internal; internal_ptr < internal_end;
-       internal_ptr++)
-    {
-      BFD_ASSERT (internal_ptr->is_sym);
 
-      if (internal_ptr->u.syment.n_sclass == C_FILE
-	  && internal_ptr->u.syment.n_numaux > 0)
+      if (sym->u.syment.n_sclass == C_FILE
+	  && sym->u.syment.n_numaux > 0)
 	{
-	  combined_entry_type * aux = internal_ptr + 1;
+	  combined_entry_type * aux = sym + 1;
 
 	  /* Make a file symbol point to the name in the auxent, since
 	     the text ".file" is redundant.  */
 	  BFD_ASSERT (! aux->is_sym);
 
-	  if (aux->u.auxent.x_file.x_n.x_zeroes == 0)
+	  if (aux->u.auxent.x_file.x_n.x_n.x_zeroes == 0)
 	    {
 	      /* The filename is a long one, point into the string table.  */
 	      if (string_table == NULL)
@@ -1900,57 +1925,98 @@ coff_get_normalized_symtab (bfd *abfd)
 		    return NULL;
 		}
 
-	      if ((bfd_size_type)(aux->u.auxent.x_file.x_n.x_offset)
+	      if ((bfd_size_type) aux->u.auxent.x_file.x_n.x_n.x_offset
 		  >= obj_coff_strings_len (abfd))
-		internal_ptr->u.syment._n._n_n._n_offset = (bfd_hostptr_t) _("<corrupt>");
+		sym->u.syment._n._n_n._n_offset =
+		  (uintptr_t) _("<corrupt>");
 	      else
-		internal_ptr->u.syment._n._n_n._n_offset =
-		  (bfd_hostptr_t) (string_table + (aux->u.auxent.x_file.x_n.x_offset));
+		sym->u.syment._n._n_n._n_offset =
+		  (uintptr_t) (string_table
+			       + aux->u.auxent.x_file.x_n.x_n.x_offset);
 	    }
 	  else
 	    {
 	      /* Ordinary short filename, put into memory anyway.  The
 		 Microsoft PE tools sometimes store a filename in
 		 multiple AUX entries.  */
-	      if (internal_ptr->u.syment.n_numaux > 1
-		  && coff_data (abfd)->pe)
-		internal_ptr->u.syment._n._n_n._n_offset =
-		  (bfd_hostptr_t)
-		  copy_name (abfd,
-			     aux->u.auxent.x_file.x_fname,
-			     internal_ptr->u.syment.n_numaux * symesz);
+	      size_t len;
+	      char *src;
+	      if (sym->u.syment.n_numaux > 1 && obj_pe (abfd))
+		{
+		  len = sym->u.syment.n_numaux * symesz;
+		  src = raw_src - (len - symesz);
+		}
 	      else
-		internal_ptr->u.syment._n._n_n._n_offset =
-		  ((bfd_hostptr_t)
-		   copy_name (abfd,
-			      aux->u.auxent.x_file.x_fname,
-			      (size_t) bfd_coff_filnmlen (abfd)));
+		{
+		  len = bfd_coff_filnmlen (abfd);
+		  src = aux->u.auxent.x_file.x_n.x_fname;
+		}
+	      sym->u.syment._n._n_n._n_offset =
+		(uintptr_t) copy_name (abfd, src, len);
 	    }
+
+	  /* Normalize other strings available in C_FILE aux entries.  */
+	  if (!obj_pe (abfd))
+	    for (int numaux = 1;
+		 numaux < sym->u.syment.n_numaux;
+		 numaux++)
+	      {
+		aux = sym + numaux + 1;
+		BFD_ASSERT (! aux->is_sym);
+
+		if (aux->u.auxent.x_file.x_n.x_n.x_zeroes == 0)
+		  {
+		    /* The string information is a long one, point
+		       into the string table.  */
+		    if (string_table == NULL)
+		      {
+			string_table = _bfd_coff_read_string_table (abfd);
+			if (string_table == NULL)
+			  return NULL;
+		      }
+
+		    if ((bfd_size_type) aux->u.auxent.x_file.x_n.x_n.x_offset
+			>= obj_coff_strings_len (abfd))
+		      aux->u.auxent.x_file.x_n.x_n.x_offset =
+			(uintptr_t) _("<corrupt>");
+		    else
+		      aux->u.auxent.x_file.x_n.x_n.x_offset =
+			(uintptr_t) (string_table
+				     + aux->u.auxent.x_file.x_n.x_n.x_offset);
+		  }
+		else
+		  aux->u.auxent.x_file.x_n.x_n.x_offset =
+		    ((uintptr_t)
+		     copy_name (abfd,
+				aux->u.auxent.x_file.x_n.x_fname,
+				bfd_coff_filnmlen (abfd)));
+	      }
+
 	}
       else
 	{
-	  if (internal_ptr->u.syment._n._n_n._n_zeroes != 0)
+	  if (sym->u.syment._n._n_n._n_zeroes != 0)
 	    {
 	      /* This is a "short" name.  Make it long.  */
-	      size_t i;
 	      char *newstring;
 
 	      /* Find the length of this string without walking into memory
 		 that isn't ours.  */
-	      for (i = 0; i < 8; ++i)
-		if (internal_ptr->u.syment._n._n_name[i] == '\0')
+	      for (i = 0; i < SYMNMLEN; ++i)
+		if (sym->u.syment._n._n_name[i] == '\0')
 		  break;
 
-	      newstring = (char *) bfd_zalloc (abfd, (bfd_size_type) (i + 1));
+	      newstring = bfd_alloc (abfd, i + 1);
 	      if (newstring == NULL)
 		return NULL;
-	      strncpy (newstring, internal_ptr->u.syment._n._n_name, i);
-	      internal_ptr->u.syment._n._n_n._n_offset = (bfd_hostptr_t) newstring;
-	      internal_ptr->u.syment._n._n_n._n_zeroes = 0;
-	    }
-	  else if (internal_ptr->u.syment._n._n_n._n_offset == 0)
-	    internal_ptr->u.syment._n._n_n._n_offset = (bfd_hostptr_t) "";
-	  else if (!bfd_coff_symname_in_debug (abfd, &internal_ptr->u.syment))
+	      memcpy (newstring, sym->u.syment._n._n_name, i);
+	      newstring[i] = 0;
+	      sym->u.syment._n._n_n._n_offset = (uintptr_t) newstring;
+	      sym->u.syment._n._n_n._n_zeroes = 0;
+	    }
+	  else if (sym->u.syment._n._n_n._n_offset == 0)
+	    sym->u.syment._n._n_n._n_offset = (uintptr_t) "";
+	  else if (!bfd_coff_symname_in_debug (abfd, &sym->u.syment))
 	    {
 	      /* Long name already.  Point symbol at the string in the
 		 table.  */
@@ -1960,41 +2026,47 @@ coff_get_normalized_symtab (bfd *abfd)
 		  if (string_table == NULL)
 		    return NULL;
 		}
-	      if (internal_ptr->u.syment._n._n_n._n_offset >= obj_coff_strings_len (abfd)
-		  || string_table + internal_ptr->u.syment._n._n_n._n_offset < string_table)
-		internal_ptr->u.syment._n._n_n._n_offset = (bfd_hostptr_t) _("<corrupt>");
+	      if (sym->u.syment._n._n_n._n_offset >= obj_coff_strings_len (abfd))
+		sym->u.syment._n._n_n._n_offset =
+		  (uintptr_t) _("<corrupt>");
 	      else
-		internal_ptr->u.syment._n._n_n._n_offset =
-		  ((bfd_hostptr_t)
-		   (string_table
-		    + internal_ptr->u.syment._n._n_n._n_offset));
+		sym->u.syment._n._n_n._n_offset =
+		  (uintptr_t) (string_table
+			       + sym->u.syment._n._n_n._n_offset);
 	    }
 	  else
 	    {
 	      /* Long name in debug section.  Very similar.  */
 	      if (debug_sec_data == NULL)
-		debug_sec_data = build_debug_section (abfd, & debug_sec);
-	      if (debug_sec_data != NULL)
 		{
-		  BFD_ASSERT (debug_sec != NULL);
-		  /* PR binutils/17512: Catch out of range offsets into the debug data.  */
-		  if (internal_ptr->u.syment._n._n_n._n_offset > debug_sec->size
-		      || debug_sec_data + internal_ptr->u.syment._n._n_n._n_offset < debug_sec_data)
-		    internal_ptr->u.syment._n._n_n._n_offset = (bfd_hostptr_t) _("<corrupt>");
-		  else
-		    internal_ptr->u.syment._n._n_n._n_offset = (bfd_hostptr_t)
-		      (debug_sec_data + internal_ptr->u.syment._n._n_n._n_offset);
+		  debug_sec_data = build_debug_section (abfd, &debug_sec);
+		  if (debug_sec_data == NULL)
+		    return NULL;
 		}
+	      /* PR binutils/17512: Catch out of range offsets into
+		 the debug data.  */
+	      if (sym->u.syment._n._n_n._n_offset >= debug_sec->size)
+		sym->u.syment._n._n_n._n_offset =
+		  (uintptr_t) _("<corrupt>");
 	      else
-		internal_ptr->u.syment._n._n_n._n_offset = (bfd_hostptr_t) "";
+		sym->u.syment._n._n_n._n_offset =
+		  (uintptr_t) (debug_sec_data
+			       + sym->u.syment._n._n_n._n_offset);
 	    }
 	}
-      internal_ptr += internal_ptr->u.syment.n_numaux;
+    }
+
+  /* Free the raw symbols.  */
+  if (obj_coff_external_syms (abfd) != NULL
+      && ! obj_coff_keep_syms (abfd))
+    {
+      free (obj_coff_external_syms (abfd));
+      obj_coff_external_syms (abfd) = NULL;
     }
 
   obj_raw_syments (abfd) = internal;
   BFD_ASSERT (obj_raw_syment_count (abfd)
-	      == (unsigned int) (internal_ptr - internal));
+	      == (size_t) (internal_ptr - internal));
 
   return internal;
 }
@@ -2002,25 +2074,31 @@ coff_get_normalized_symtab (bfd *abfd)
 long
 coff_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
 {
-  if (bfd_get_format (abfd) != bfd_object)
+  size_t count, raw;
+
+  count = asect->reloc_count;
+  if (count >= LONG_MAX / sizeof (arelent *)
+      || _bfd_mul_overflow (count, bfd_coff_relsz (abfd), &raw))
     {
-      bfd_set_error (bfd_error_invalid_operation);
+      bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
-#if SIZEOF_LONG == SIZEOF_INT
-  if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
+  if (!bfd_write_p (abfd))
     {
-      bfd_set_error (bfd_error_file_too_big);
-      return -1;
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && raw > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
     }
-#endif
-  return (asect->reloc_count + 1) * sizeof (arelent *);
+  return (count + 1) * sizeof (arelent *);
 }
 
 asymbol *
 coff_make_empty_symbol (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (coff_symbol_type);
+  size_t amt = sizeof (coff_symbol_type);
   coff_symbol_type *new_symbol = (coff_symbol_type *) bfd_zalloc (abfd, amt);
 
   if (new_symbol == NULL)
@@ -2028,7 +2106,7 @@ coff_make_empty_symbol (bfd *abfd)
   new_symbol->symbol.section = 0;
   new_symbol->native = NULL;
   new_symbol->lineno = NULL;
-  new_symbol->done_lineno = FALSE;
+  new_symbol->done_lineno = false;
   new_symbol->symbol.the_bfd = abfd;
 
   return & new_symbol->symbol;
@@ -2037,11 +2115,9 @@ coff_make_empty_symbol (bfd *abfd)
 /* Make a debugging symbol.  */
 
 asymbol *
-coff_bfd_make_debug_symbol (bfd *abfd,
-			    void * ptr ATTRIBUTE_UNUSED,
-			    unsigned long sz ATTRIBUTE_UNUSED)
+coff_bfd_make_debug_symbol (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (coff_symbol_type);
+  size_t amt = sizeof (coff_symbol_type);
   coff_symbol_type *new_symbol = (coff_symbol_type *) bfd_alloc (abfd, amt);
 
   if (new_symbol == NULL)
@@ -2052,11 +2128,11 @@ coff_bfd_make_debug_symbol (bfd *abfd,
   new_symbol->native = (combined_entry_type *) bfd_zalloc (abfd, amt);
   if (!new_symbol->native)
     return NULL;
-  new_symbol->native->is_sym = TRUE;
+  new_symbol->native->is_sym = true;
   new_symbol->symbol.section = bfd_abs_section_ptr;
   new_symbol->symbol.flags = BSF_DEBUGGING;
   new_symbol->lineno = NULL;
-  new_symbol->done_lineno = FALSE;
+  new_symbol->done_lineno = false;
   new_symbol->symbol.the_bfd = abfd;
 
   return & new_symbol->symbol;
@@ -2070,8 +2146,10 @@ coff_get_symbol_info (bfd *abfd, asymbol
   if (coffsymbol (symbol)->native != NULL
       && coffsymbol (symbol)->native->fix_value
       && coffsymbol (symbol)->native->is_sym)
-    ret->value = coffsymbol (symbol)->native->u.syment.n_value -
-      (bfd_hostptr_t) obj_raw_syments (abfd);
+    ret->value
+      = (((uintptr_t) coffsymbol (symbol)->native->u.syment.n_value
+	  - (uintptr_t) obj_raw_syments (abfd))
+	 / sizeof (combined_entry_type));
 }
 
 /* Print out information about COFF symbol.  */
@@ -2119,9 +2197,10 @@ coff_print_symbol (bfd *abfd,
 	  if (! combined->fix_value)
 	    val = (bfd_vma) combined->u.syment.n_value;
 	  else
-	    val = combined->u.syment.n_value - (bfd_hostptr_t) root;
+	    val = (((uintptr_t) combined->u.syment.n_value - (uintptr_t) root)
+		   / sizeof (combined_entry_type));
 
-	  fprintf (file, "(sec %2d)(fl 0x%02x)(ty %3x)(scl %3d) (nx %d) 0x",
+	  fprintf (file, "(sec %2d)(fl 0x%02x)(ty %4x)(scl %3d) (nx %d) 0x",
 		   combined->u.syment.n_scnum,
 		   combined->u.syment.n_flags,
 		   combined->u.syment.n_type,
@@ -2139,7 +2218,7 @@ coff_print_symbol (bfd *abfd,
 	      if (auxp->fix_tag)
 		tagndx = auxp->u.auxent.x_sym.x_tagndx.p - root;
 	      else
-		tagndx = auxp->u.auxent.x_sym.x_tagndx.l;
+		tagndx = auxp->u.auxent.x_sym.x_tagndx.u32;
 
 	      fprintf (file, "\n");
 
@@ -2150,6 +2229,18 @@ coff_print_symbol (bfd *abfd,
 		{
 		case C_FILE:
 		  fprintf (file, "File ");
+		  /* Add additional information if this isn't the filename
+		     auxiliary entry.  */
+		  if (auxp->u.auxent.x_file.x_ftype)
+		    fprintf (file, "ftype %d fname \"%s\"",
+			     auxp->u.auxent.x_file.x_ftype,
+			     (char *) auxp->u.auxent.x_file.x_n.x_n.x_offset);
+		  break;
+
+		case C_DWARF:
+		  fprintf (file, "AUX scnlen %#" PRIx64 " nreloc %" PRId64,
+			   auxp->u.auxent.x_sect.x_scnlen,
+			   auxp->u.auxent.x_sect.x_nreloc);
 		  break;
 
 		case C_STAT:
@@ -2163,7 +2254,7 @@ coff_print_symbol (bfd *abfd,
 		      if (auxp->u.auxent.x_scn.x_checksum != 0
 			  || auxp->u.auxent.x_scn.x_associated != 0
 			  || auxp->u.auxent.x_scn.x_comdat != 0)
-			fprintf (file, " checksum 0x%lx assoc %d comdat %d",
+			fprintf (file, " checksum 0x%x assoc %d comdat %d",
 				 auxp->u.auxent.x_scn.x_checksum,
 				 auxp->u.auxent.x_scn.x_associated,
 				 auxp->u.auxent.x_scn.x_comdat);
@@ -2180,7 +2271,7 @@ coff_print_symbol (bfd *abfd,
 			next = (auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.p
 			       - root);
 		      else
-			next = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l;
+			next = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32;
 		      llnos = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_lnnoptr;
 		      fprintf (file,
 			       "AUX tagndx %ld ttlsiz 0x%lx lnnos %ld next %ld",
@@ -2236,7 +2327,7 @@ coff_print_symbol (bfd *abfd,
    function for the is_local_label_name entry point, but some may
    override it.  */
 
-bfd_boolean
+bool
 _bfd_coff_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 			       const char *name)
 {
@@ -2247,7 +2338,7 @@ _bfd_coff_is_local_label_name (bfd *abfd
    section, calculate and return the name of the source file and the line
    nearest to the wanted location.  */
 
-bfd_boolean
+bool
 coff_find_nearest_line_with_names (bfd *abfd,
 				   asymbol **symbols,
 				   asection *section,
@@ -2257,7 +2348,7 @@ coff_find_nearest_line_with_names (bfd *
 				   unsigned int *line_ptr,
 				   const struct dwarf_debug_section *debug_sections)
 {
-  bfd_boolean found;
+  bool found;
   unsigned int i;
   unsigned int line_base;
   coff_data_type *cof = coff_data (abfd);
@@ -2266,7 +2357,7 @@ coff_find_nearest_line_with_names (bfd *
   combined_entry_type *pend;
   alent *l;
   struct coff_section_tdata *sec_data;
-  bfd_size_type amt;
+  size_t amt;
 
   /* Before looking through the symbol table, try to use a .stab
      section to find the information.  */
@@ -2274,17 +2365,17 @@ coff_find_nearest_line_with_names (bfd *
 					     &found, filename_ptr,
 					     functionname_ptr, line_ptr,
 					     &coff_data(abfd)->line_info))
-    return FALSE;
+    return false;
 
   if (found)
-    return TRUE;
+    return true;
 
   /* Also try examining DWARF2 debugging information.  */
   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
 				     filename_ptr, functionname_ptr,
 				     line_ptr, NULL, debug_sections,
 				     &coff_data(abfd)->dwarf2_find_line_info))
-    return TRUE;
+    return true;
 
   sec_data = coff_section_data (abfd, section);
 
@@ -2305,7 +2396,7 @@ coff_find_nearest_line_with_names (bfd *
 	}
 
       if (sec_data != NULL && sec_data->saved_bias)
-	bias = sec_data->saved_bias;
+	bias = sec_data->bias;
       else if (symbols)
 	{
 	  bias = _bfd_dwarf2_find_symbol_bias (symbols,
@@ -2313,7 +2404,7 @@ coff_find_nearest_line_with_names (bfd *
 
 	  if (sec_data)
 	    {
-	      sec_data->saved_bias = TRUE;
+	      sec_data->saved_bias = true;
 	      sec_data->bias = bias;
 	    }
 	}
@@ -2324,7 +2415,7 @@ coff_find_nearest_line_with_names (bfd *
 					    filename_ptr, functionname_ptr,
 					    line_ptr, NULL, debug_sections,
 					    &coff_data(abfd)->dwarf2_find_line_info))
-	return TRUE;
+	return true;
     }
 
   *filename_ptr = 0;
@@ -2333,15 +2424,15 @@ coff_find_nearest_line_with_names (bfd *
 
   /* Don't try and find line numbers in a non coff file.  */
   if (!bfd_family_coff (abfd))
-    return FALSE;
+    return false;
 
   if (cof == NULL)
-    return FALSE;
+    return false;
 
   /* Find the first C_FILE symbol.  */
   p = cof->raw_syments;
   if (!p)
-    return FALSE;
+    return false;
 
   pend = p + cof->raw_syment_count;
   while (p < pend)
@@ -2418,7 +2509,7 @@ coff_find_nearest_line_with_names (bfd *
     {
       *functionname_ptr = NULL;
       *line_ptr = 0;
-      return TRUE;
+      return true;
     }
 
   /* Now wander though the raw linenumbers of the section.
@@ -2464,11 +2555,15 @@ coff_find_nearest_line_with_names (bfd *
 
 		  /* In XCOFF a debugging symbol can follow the
 		     function symbol.  */
-		  if (s->u.syment.n_scnum == N_DEBUG)
+		  if (((size_t) ((char *) s - (char *) obj_raw_syments (abfd))
+		       < obj_raw_syment_count (abfd) * sizeof (*s))
+		      && s->u.syment.n_scnum == N_DEBUG)
 		    s = s + 1 + s->u.syment.n_numaux;
 
 		  /* S should now point to the .bf of the function.  */
-		  if (s->u.syment.n_numaux)
+		  if (((size_t) ((char *) s - (char *) obj_raw_syments (abfd))
+		       < obj_raw_syment_count (abfd) * sizeof (*s))
+		      && s->u.syment.n_numaux)
 		    {
 		      /* The linenumber is stored in the auxent.  */
 		      union internal_auxent *a = &((s + 1)->u.auxent);
@@ -2518,10 +2613,10 @@ coff_find_nearest_line_with_names (bfd *
       sec_data->line_base = line_base;
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 coff_find_nearest_line (bfd *abfd,
 			asymbol **symbols,
 			asection *section,
@@ -2538,13 +2633,13 @@ coff_find_nearest_line (bfd *abfd,
 					    line_ptr, dwarf_debug_sections);
 }
 
-bfd_boolean
+bool
 coff_find_inliner_info (bfd *abfd,
 			const char **filename_ptr,
 			const char **functionname_ptr,
 			unsigned int *line_ptr)
 {
-  bfd_boolean found;
+  bool found;
 
   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
 					 functionname_ptr, line_ptr,
@@ -2568,7 +2663,7 @@ coff_sizeof_headers (bfd *abfd, struct b
 
 /* Change the class of a coff symbol held by BFD.  */
 
-bfd_boolean
+bool
 bfd_coff_set_symbol_class (bfd *	 abfd,
 			   asymbol *	 symbol,
 			   unsigned int	 symbol_class)
@@ -2579,7 +2674,7 @@ bfd_coff_set_symbol_class (bfd *	 abfd,
   if (csym == NULL)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
   else if (csym->native == NULL)
     {
@@ -2589,13 +2684,13 @@ bfd_coff_set_symbol_class (bfd *	 abfd,
 	 coff_write_alien_symbol().  */
 
       combined_entry_type * native;
-      bfd_size_type amt = sizeof (* native);
+      size_t amt = sizeof (* native);
 
       native = (combined_entry_type *) bfd_zalloc (abfd, amt);
       if (native == NULL)
-	return FALSE;
+	return false;
 
-      native->is_sym = TRUE;
+      native->is_sym = true;
       native->u.syment.n_type   = T_NULL;
       native->u.syment.n_sclass = symbol_class;
 
@@ -2628,10 +2723,10 @@ bfd_coff_set_symbol_class (bfd *	 abfd,
   else
     csym->native->u.syment.n_sclass = symbol_class;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_coff_section_already_linked (bfd *abfd,
 				  asection *sec,
 				  struct bfd_link_info *info)
@@ -2643,15 +2738,15 @@ _bfd_coff_section_already_linked (bfd *a
   struct coff_comdat_info *s_comdat;
 
   if (sec->output_section == bfd_abs_section_ptr)
-    return FALSE;
+    return false;
 
   flags = sec->flags;
   if ((flags & SEC_LINK_ONCE) == 0)
-    return FALSE;
+    return false;
 
   /* The COFF backend linker doesn't support group sections.  */
   if ((flags & SEC_GROUP) != 0)
-    return FALSE;
+    return false;
 
   name = bfd_section_name (sec);
   s_comdat = bfd_coff_get_comdat_section (abfd, sec);
@@ -2660,7 +2755,7 @@ _bfd_coff_section_already_linked (bfd *a
     key = s_comdat->name;
   else
     {
-      if (CONST_STRNEQ (name, ".gnu.linkonce.")
+      if (startswith (name, ".gnu.linkonce.")
 	  && (key = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
 	key++;
       else
@@ -2687,7 +2782,8 @@ _bfd_coff_section_already_linked (bfd *a
 	 .gnu.linkonce.*.<key>.  */
       if (((s_comdat != NULL) == (l_comdat != NULL)
 	   && strcmp (name, l->sec->name) == 0)
-	  || (l->sec->owner->flags & BFD_PLUGIN) != 0)
+	  || (l->sec->owner->flags & BFD_PLUGIN) != 0
+	  || (sec->owner->flags & BFD_PLUGIN) != 0)
 	{
 	  /* The section has already been linked.  See if we should
 	     issue a warning.  */
@@ -2698,12 +2794,12 @@ _bfd_coff_section_already_linked (bfd *a
   /* This is the first section with this name.  Record it.  */
   if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
-  return FALSE;
+  return false;
 }
 
 /* Initialize COOKIE for input bfd ABFD. */
 
-static bfd_boolean
+static bool
 init_reloc_cookie (struct coff_reloc_cookie *cookie,
 		   struct bfd_link_info *info ATTRIBUTE_UNUSED,
 		   bfd *abfd)
@@ -2716,7 +2812,7 @@ init_reloc_cookie (struct coff_reloc_coo
 
   cookie->symbols = obj_symbols (abfd);
 
-  return TRUE;
+  return true;
 }
 
 /* Free the memory allocated by init_reloc_cookie, if appropriate.  */
@@ -2731,7 +2827,7 @@ fini_reloc_cookie (struct coff_reloc_coo
 /* Initialize the relocation information in COOKIE for input section SEC
    of input bfd ABFD.  */
 
-static bfd_boolean
+static bool
 init_reloc_cookie_rels (struct coff_reloc_cookie *cookie,
 			struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			bfd *abfd,
@@ -2742,17 +2838,18 @@ init_reloc_cookie_rels (struct coff_relo
       cookie->rels = NULL;
       cookie->relend = NULL;
       cookie->rel = NULL;
-      return TRUE;
+      return true;
     }
 
-  cookie->rels = _bfd_coff_read_internal_relocs (abfd, sec, FALSE, NULL, 0, NULL);
+  cookie->rels = _bfd_coff_read_internal_relocs (abfd, sec, false, NULL,
+						 0, NULL);
 
   if (cookie->rels == NULL)
-    return FALSE;
+    return false;
 
   cookie->rel = cookie->rels;
   cookie->relend = (cookie->rels + sec->reloc_count);
-  return TRUE;
+  return true;
 }
 
 /* Free the memory allocated by init_reloc_cookie_rels,
@@ -2774,20 +2871,20 @@ fini_reloc_cookie_rels (struct coff_relo
 
 /* Initialize the whole of COOKIE for input section SEC.  */
 
-static bfd_boolean
+static bool
 init_reloc_cookie_for_section (struct coff_reloc_cookie *cookie,
 			       struct bfd_link_info *info,
 			       asection *sec)
 {
   if (!init_reloc_cookie (cookie, info, sec->owner))
-    return FALSE;
+    return false;
 
   if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
     {
       fini_reloc_cookie (cookie, sec->owner);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Free the memory allocated by init_reloc_cookie_for_section,
@@ -2826,8 +2923,8 @@ _bfd_coff_gc_mark_hook (asection *sec,
 		 record indicating that if the weak symbol is not resolved,
 		 another external symbol is used instead.  */
 	      struct coff_link_hash_entry *h2 =
-		h->auxbfd->tdata.coff_obj_data->sym_hashes[
-		    h->aux->x_sym.x_tagndx.l];
+		h->auxbfd->tdata.coff_obj_data->sym_hashes
+		[h->aux->x_sym.x_tagndx.u32];
 
 	      if (h2 && h2->root.type != bfd_link_hash_undefined)
 		return  h2->root.u.def.section;
@@ -2870,14 +2967,14 @@ _bfd_coff_gc_mark_rsec (struct bfd_link_
 			    + obj_convert (sec->owner)[cookie->rel->r_symndx])->native->u.syment);
 }
 
-static bfd_boolean _bfd_coff_gc_mark
+static bool _bfd_coff_gc_mark
   (struct bfd_link_info *, asection *, coff_gc_mark_hook_fn);
 
 /* COOKIE->rel describes a relocation against section SEC, which is
    a section we've decided to keep.  Mark the section that contains
    the relocation symbol.  */
 
-static bfd_boolean
+static bool
 _bfd_coff_gc_mark_reloc (struct bfd_link_info *info,
 			 asection *sec,
 			 coff_gc_mark_hook_fn gc_mark_hook,
@@ -2891,21 +2988,21 @@ _bfd_coff_gc_mark_reloc (struct bfd_link
       if (bfd_get_flavour (rsec->owner) != bfd_target_coff_flavour)
 	rsec->gc_mark = 1;
       else if (!_bfd_coff_gc_mark (info, rsec, gc_mark_hook))
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* The mark phase of garbage collection.  For a given section, mark
    it and any sections in this section's group, and all the sections
    which define symbols to which it refers.  */
 
-static bfd_boolean
+static bool
 _bfd_coff_gc_mark (struct bfd_link_info *info,
 		   asection *sec,
 		   coff_gc_mark_hook_fn gc_mark_hook)
 {
-  bfd_boolean ret = TRUE;
+  bool ret = true;
 
   sec->gc_mark = 1;
 
@@ -2916,14 +3013,14 @@ _bfd_coff_gc_mark (struct bfd_link_info
       struct coff_reloc_cookie cookie;
 
       if (!init_reloc_cookie_for_section (&cookie, info, sec))
-	ret = FALSE;
+	ret = false;
       else
 	{
 	  for (; cookie.rel < cookie.relend; cookie.rel++)
 	    {
 	      if (!_bfd_coff_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
 		{
-		  ret = FALSE;
+		  ret = false;
 		  break;
 		}
 	    }
@@ -2934,7 +3031,7 @@ _bfd_coff_gc_mark (struct bfd_link_info
   return ret;
 }
 
-static bfd_boolean
+static bool
 _bfd_coff_gc_mark_extra_sections (struct bfd_link_info *info,
 				  coff_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED)
 {
@@ -2943,20 +3040,20 @@ _bfd_coff_gc_mark_extra_sections (struct
   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
     {
       asection *isec;
-      bfd_boolean some_kept;
+      bool some_kept;
 
       if (bfd_get_flavour (ibfd) != bfd_target_coff_flavour)
 	continue;
 
       /* Ensure all linker created sections are kept, and see whether
 	 any other section is already marked.  */
-      some_kept = FALSE;
+      some_kept = false;
       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
 	{
 	  if ((isec->flags & SEC_LINKER_CREATED) != 0)
 	    isec->gc_mark = 1;
 	  else if (isec->gc_mark)
-	    some_kept = TRUE;
+	    some_kept = true;
 	}
 
       /* If no section in this file will be kept, then we can
@@ -2971,12 +3068,12 @@ _bfd_coff_gc_mark_extra_sections (struct
 	    || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
 	  isec->gc_mark = 1;
     }
-  return TRUE;
+  return true;
 }
 
 /* Sweep symbols in swept sections.  Called via coff_link_hash_traverse.  */
 
-static bfd_boolean
+static bool
 coff_gc_sweep_symbol (struct coff_link_hash_entry *h,
 		      void *data ATTRIBUTE_UNUSED)
 {
@@ -2993,15 +3090,15 @@ coff_gc_sweep_symbol (struct coff_link_h
       h->symbol_class = C_HIDDEN;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
 
-typedef bfd_boolean (*gc_sweep_hook_fn)
+typedef bool (*gc_sweep_hook_fn)
   (bfd *, struct bfd_link_info *, asection *, const struct internal_reloc *);
 
-static bfd_boolean
+static bool
 coff_gc_sweep (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
 {
   bfd *sub;
@@ -3019,10 +3116,10 @@ coff_gc_sweep (bfd *abfd ATTRIBUTE_UNUSE
 	  if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0
 	      || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
 	    o->gc_mark = 1;
-	  else if (CONST_STRNEQ (o->name, ".idata")
-		   || CONST_STRNEQ (o->name, ".pdata")
-		   || CONST_STRNEQ (o->name, ".xdata")
-		   || CONST_STRNEQ (o->name, ".rsrc"))
+	  else if (startswith (o->name, ".idata")
+		   || startswith (o->name, ".pdata")
+		   || startswith (o->name, ".xdata")
+		   || startswith (o->name, ".rsrc"))
 	    o->gc_mark = 1;
 
 	  if (o->gc_mark)
@@ -3050,13 +3147,13 @@ coff_gc_sweep (bfd *abfd ATTRIBUTE_UNUSE
 	      && !bfd_is_abs_section (o->output_section))
 	    {
 	      struct internal_reloc *internal_relocs;
-	      bfd_boolean r;
+	      bool r;
 
 	      internal_relocs
 		= _bfd_coff_link_read_relocs (o->owner, o, NULL, NULL,
 					     info->keep_memory);
 	      if (internal_relocs == NULL)
-		return FALSE;
+		return false;
 
 	      r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
 
@@ -3064,7 +3161,7 @@ coff_gc_sweep (bfd *abfd ATTRIBUTE_UNUSE
 		free (internal_relocs);
 
 	      if (!r)
-		return FALSE;
+		return false;
 	    }
 #endif
 	}
@@ -3075,7 +3172,7 @@ coff_gc_sweep (bfd *abfd ATTRIBUTE_UNUSE
   coff_link_hash_traverse (coff_hash_table (info), coff_gc_sweep_symbol,
 			   NULL);
 
-  return TRUE;
+  return true;
 }
 
 /* Keep all sections containing symbols undefined on the command-line,
@@ -3091,7 +3188,7 @@ _bfd_coff_gc_keep (struct bfd_link_info
       struct coff_link_hash_entry *h;
 
       h = coff_link_hash_lookup (coff_hash_table (info), sym->name,
-				FALSE, FALSE, FALSE);
+				false, false, false);
 
       if (h != NULL
 	  && (h->root.type == bfd_link_hash_defined
@@ -3103,7 +3200,7 @@ _bfd_coff_gc_keep (struct bfd_link_info
 
 /* Do mark and sweep of unused sections.  */
 
-bfd_boolean
+bool
 bfd_coff_gc_sections (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
 {
   bfd *sub;
@@ -3116,7 +3213,7 @@ bfd_coff_gc_sections (bfd *abfd ATTRIBUT
       || !is_coff_hash_table (info->hash))
     {
       _bfd_error_handler(_("warning: gc-sections option ignored"));
-      return TRUE;
+      return true;
     }
 #endif
 
@@ -3133,13 +3230,13 @@ bfd_coff_gc_sections (bfd *abfd ATTRIBUT
       for (o = sub->sections; o != NULL; o = o->next)
 	{
 	  if (((o->flags & (SEC_EXCLUDE | SEC_KEEP)) == SEC_KEEP
-	       || CONST_STRNEQ (o->name, ".vectors")
-	       || CONST_STRNEQ (o->name, ".ctors")
-	       || CONST_STRNEQ (o->name, ".dtors"))
+	       || startswith (o->name, ".vectors")
+	       || startswith (o->name, ".ctors")
+	       || startswith (o->name, ".dtors"))
 	      && !o->gc_mark)
 	    {
 	      if (!_bfd_coff_gc_mark (info, o, _bfd_coff_gc_mark_hook))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -3161,3 +3258,45 @@ bfd_coff_group_name (bfd *abfd, const as
     return ci->name;
   return NULL;
 }
+
+bool
+_bfd_coff_free_cached_info (bfd *abfd)
+{
+  struct coff_tdata *tdata;
+
+  if (bfd_family_coff (abfd)
+      && (bfd_get_format (abfd) == bfd_object
+	  || bfd_get_format (abfd) == bfd_core)
+      && (tdata = coff_data (abfd)) != NULL)
+    {
+      if (tdata->section_by_index)
+	{
+	  htab_delete (tdata->section_by_index);
+	  tdata->section_by_index = NULL;
+	}
+
+      if (tdata->section_by_target_index)
+	{
+	  htab_delete (tdata->section_by_target_index);
+	  tdata->section_by_target_index = NULL;
+	}
+
+      if (obj_pe (abfd) && pe_data (abfd)->comdat_hash)
+	{
+	  htab_delete (pe_data (abfd)->comdat_hash);
+	  pe_data (abfd)->comdat_hash = NULL;
+	}
+
+      _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
+      _bfd_stab_cleanup (abfd, &tdata->line_info);
+
+      /* PR 25447:
+	 Do not clear the keep_syms and keep_strings flags.
+	 These may have been set by pe_ILF_build_a_bfd() indicating
+	 that the syms and strings pointers are not to be freed.  */
+      if (!_bfd_coff_free_symbols (abfd))
+	return false;
+    }
+
+  return _bfd_generic_bfd_free_cached_info (abfd);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-go32.c ./bfd/coff-go32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-go32.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-go32.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel 386 COFF files (DJGPP variant).
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by DJ Delorie.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -22,14 +22,21 @@
 #define TARGET_SYM		i386_coff_go32_vec
 #define TARGET_NAME		"coff-go32"
 #define TARGET_UNDERSCORE	'_'
+#define COFF_GO32
 #define COFF_LONG_SECTION_NAMES
 #define COFF_SUPPORT_GNU_LINKONCE
 #define COFF_LONG_FILENAMES
 
 #define COFF_SECTION_ALIGNMENT_ENTRIES \
-{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".data"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
-{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".text"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".const"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".rodata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".bss"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.d"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
@@ -37,9 +44,147 @@
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.r"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.b"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
 
+/* Section contains extended relocations. */
+#define IMAGE_SCN_LNK_NRELOC_OVFL (0x01000000)
+
+#include "sysdep.h"
+#include "bfd.h"
+
+/* The following functions are not static, because they are also
+   used for coff-go32-exe (coff-stgo32.c).  */
+bool _bfd_go32_mkobject (bfd *);
+void _bfd_go32_swap_scnhdr_in (bfd *, void *, void *);
+unsigned int _bfd_go32_swap_scnhdr_out (bfd *, void *, void *);
+
+#define coff_mkobject _bfd_go32_mkobject
+#define coff_SWAP_scnhdr_in _bfd_go32_swap_scnhdr_in
+#define coff_SWAP_scnhdr_out _bfd_go32_swap_scnhdr_out
+
 #include "coff-i386.c"
+
+bool
+_bfd_go32_mkobject (bfd * abfd)
+{
+  const bfd_size_type amt = sizeof (coff_data_type);
+
+  abfd->tdata.coff_obj_data = bfd_zalloc (abfd, amt);
+  if (abfd->tdata.coff_obj_data == NULL)
+    return false;
+
+  coff_data (abfd)->go32 = true;
+
+  bfd_coff_long_section_names (abfd)
+    = coff_backend_info (abfd)->_bfd_coff_long_section_names;
+
+  return true;
+}
+
+void
+_bfd_go32_swap_scnhdr_in (bfd * abfd, void * ext, void * in)
+{
+  SCNHDR *scnhdr_ext = (SCNHDR *) ext;
+  struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
+
+  memcpy (scnhdr_int->s_name, scnhdr_ext->s_name, sizeof (scnhdr_int->s_name));
+
+  scnhdr_int->s_vaddr = GET_SCNHDR_VADDR (abfd, scnhdr_ext->s_vaddr);
+  scnhdr_int->s_paddr = GET_SCNHDR_PADDR (abfd, scnhdr_ext->s_paddr);
+  scnhdr_int->s_size = GET_SCNHDR_SIZE (abfd, scnhdr_ext->s_size);
+
+  scnhdr_int->s_scnptr = GET_SCNHDR_SCNPTR (abfd, scnhdr_ext->s_scnptr);
+  scnhdr_int->s_relptr = GET_SCNHDR_RELPTR (abfd, scnhdr_ext->s_relptr);
+  scnhdr_int->s_lnnoptr = GET_SCNHDR_LNNOPTR (abfd, scnhdr_ext->s_lnnoptr);
+  scnhdr_int->s_flags = GET_SCNHDR_FLAGS (abfd, scnhdr_ext->s_flags);
+  scnhdr_int->s_nreloc = GET_SCNHDR_NRELOC (abfd, scnhdr_ext->s_nreloc);
+  scnhdr_int->s_nlnno = GET_SCNHDR_NLNNO (abfd, scnhdr_ext->s_nlnno);
+
+  /* DJGPP follows the same strategy as PE COFF.
+     Iff the file is an executable then the higher 16 bits
+     of the line number have been stored in the relocation
+     counter field.  */
+  if (abfd->flags & EXEC_P && (strcmp (scnhdr_ext->s_name, ".text") == 0))
+    {
+      scnhdr_int->s_nlnno
+	= (GET_SCNHDR_NRELOC (abfd, scnhdr_ext->s_nreloc) << 16)
+	  + GET_SCNHDR_NLNNO (abfd, scnhdr_ext->s_nlnno);
+      scnhdr_int->s_nreloc = 0;
+    }
+}
+
+unsigned int
+_bfd_go32_swap_scnhdr_out (bfd * abfd, void * in, void * out)
+{
+  struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
+  SCNHDR *scnhdr_ext = (SCNHDR *) out;
+  unsigned int ret = bfd_coff_scnhsz (abfd);
+
+  memcpy (scnhdr_ext->s_name, scnhdr_int->s_name, sizeof (scnhdr_int->s_name));
+
+  PUT_SCNHDR_VADDR (abfd, scnhdr_int->s_vaddr, scnhdr_ext->s_vaddr);
+  PUT_SCNHDR_PADDR (abfd, scnhdr_int->s_paddr, scnhdr_ext->s_paddr);
+  PUT_SCNHDR_SIZE (abfd, scnhdr_int->s_size, scnhdr_ext->s_size);
+  PUT_SCNHDR_SCNPTR (abfd, scnhdr_int->s_scnptr, scnhdr_ext->s_scnptr);
+  PUT_SCNHDR_RELPTR (abfd, scnhdr_int->s_relptr, scnhdr_ext->s_relptr);
+  PUT_SCNHDR_LNNOPTR (abfd, scnhdr_int->s_lnnoptr, scnhdr_ext->s_lnnoptr);
+  PUT_SCNHDR_FLAGS (abfd, scnhdr_int->s_flags, scnhdr_ext->s_flags);
+
+  if (abfd->flags & EXEC_P && (strcmp (scnhdr_int->s_name, ".text") == 0))
+    {
+      /* DJGPP follows the same strategy as PE COFF.
+	 By inference from looking at MS output, the 32 bit field
+	 which is the combination of the number_of_relocs and
+	 number_of_linenos is used for the line number count in
+	 executables.  A 16-bit field won't do for cc1.  The MS
+	 document says that the number of relocs is zero for
+	 executables, but the 17-th bit has been observed to be there.
+	 Overflow is not an issue: a 4G-line program will overflow a
+	 bunch of other fields long before this!  */
+      PUT_SCNHDR_NLNNO (abfd, (scnhdr_int->s_nlnno & 0xffff),
+			scnhdr_ext->s_nlnno);
+      PUT_SCNHDR_NRELOC (abfd, (scnhdr_int->s_nlnno >> 16),
+			 scnhdr_ext->s_nreloc);
+    }
+  else
+    {
+      /* DJGPP follows the same strategy as PE COFF.  */
+      if (scnhdr_int->s_nlnno <= MAX_SCNHDR_NLNNO)
+	PUT_SCNHDR_NLNNO (abfd, scnhdr_int->s_nlnno, scnhdr_ext->s_nlnno);
+      else
+	{
+	  char buf[sizeof (scnhdr_int->s_name) + 1];
+
+	  memcpy (buf, scnhdr_int->s_name, sizeof (scnhdr_int->s_name));
+	  buf[sizeof (scnhdr_int->s_name)] = '\0';
+	  _bfd_error_handler
+	    /* xgettext:c-format */
+	    (_("%pB: warning: %s: line number overflow: 0x%lx > 0xffff"),
+	     abfd, buf, scnhdr_int->s_nlnno);
+	  bfd_set_error (bfd_error_file_truncated);
+	  PUT_SCNHDR_NLNNO (abfd, 0xffff, scnhdr_ext->s_nlnno);
+	  ret = 0;
+	}
+
+      /* Although we could encode 0xffff relocs here, we do not, to be
+	 consistent with other parts of bfd.  Also it lets us warn, as
+	 we should never see 0xffff here w/o having the overflow flag
+	 set.  */
+      if (scnhdr_int->s_nreloc < MAX_SCNHDR_NRELOC)
+	PUT_SCNHDR_NRELOC (abfd, scnhdr_int->s_nreloc, scnhdr_ext->s_nreloc);
+      else
+	{
+	  /* DJGPP can deal with large #s of relocs, but not here.  */
+	  PUT_SCNHDR_NRELOC (abfd, 0xffff, scnhdr_ext->s_nreloc);
+	  scnhdr_int->s_flags |= IMAGE_SCN_LNK_NRELOC_OVFL;
+	  PUT_SCNHDR_FLAGS (abfd, scnhdr_int->s_flags, scnhdr_ext->s_flags);
+	}
+    }
+
+  return ret;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-i386.c ./bfd/coff-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-i386.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-i386.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel 386 COFF files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -31,10 +31,6 @@
 #include "coff/pe.h"
 #endif
 
-#ifdef COFF_GO32_EXE
-#include "coff/go32exe.h"
-#endif
-
 #ifndef bfd_pe_print_pdata
 #define bfd_pe_print_pdata	NULL
 #endif
@@ -113,14 +109,14 @@ coff_i386_reloc (bfd *abfd,
 	  reloc_howto_type *howto = reloc_entry->howto;
 
 	  /* Although PC relative relocations are very similar between
-	     PE and non-PE formats, but they are off by 1 << howto->size
+	     PE and non-PE formats, but they are off by howto->size
 	     bytes. For the external relocation, PE is very different
 	     from others. See md_apply_fix3 () in gas/config/tc-i386.c.
 	     When we link PE and non-PE object files together to
 	     generate a non-PE executable, we have to compensate it
 	     here.  */
 	  if (howto->pc_relative && howto->pcrel_offset)
-	    diff = -(1 << howto->size);
+	    diff = -bfd_get_reloc_size (howto);
 	  else if (symbol->flags & BSF_WEAK)
 	    diff = reloc_entry->addend - symbol->value;
 	  else
@@ -152,9 +148,9 @@ coff_i386_reloc (bfd *abfd,
       if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
 	return bfd_reloc_outofrange;
 
-      switch (howto->size)
+      switch (bfd_get_reloc_size (howto))
 	{
-	case 0:
+	case 1:
 	  {
 	    char x = bfd_get_8 (abfd, addr);
 	    DOIT (x);
@@ -162,7 +158,7 @@ coff_i386_reloc (bfd *abfd,
 	  }
 	  break;
 
-	case 1:
+	case 2:
 	  {
 	    short x = bfd_get_16 (abfd, addr);
 	    DOIT (x);
@@ -170,7 +166,7 @@ coff_i386_reloc (bfd *abfd,
 	  }
 	  break;
 
-	case 2:
+	case 4:
 	  {
 	    long x = bfd_get_32 (abfd, addr);
 	    DOIT (x);
@@ -191,16 +187,18 @@ coff_i386_reloc (bfd *abfd,
 /* Return TRUE if this relocation should appear in the output .reloc
    section.  */
 
-static bfd_boolean in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
-			       reloc_howto_type *howto)
+static bool
+in_reloc_p (bfd *abfd ATTRIBUTE_UNUSED, reloc_howto_type *howto)
 {
-  return ! howto->pc_relative && howto->type != R_IMAGEBASE
-	 && howto->type != R_SECREL32;
+  return ! howto->pc_relative
+    && howto->type != R_IMAGEBASE
+    && howto->type != R_SECREL32
+    && howto->type != R_SECTION;
 }
 #endif /* COFF_WITH_PE */
 
 #ifndef PCRELOFFSET
-#define PCRELOFFSET FALSE
+#define PCRELOFFSET false
 #endif
 
 static reloc_howto_type howto_table[] =
@@ -213,50 +211,64 @@ static reloc_howto_type howto_table[] =
   EMPTY_HOWTO (5),
   HOWTO (R_DIR32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_i386_reloc,	/* special_function */
 	 "dir32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   /* PE IMAGE_REL_I386_DIR32NB relocation (7).	*/
   HOWTO (R_IMAGEBASE,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_i386_reloc,	/* special_function */
 	 "rva32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   EMPTY_HOWTO (010),
   EMPTY_HOWTO (011),
-  EMPTY_HOWTO (012),
 #ifdef COFF_WITH_PE
+  /* 16-bit word section relocation (012).  */
+  HOWTO (R_SECTION,		/* type */
+	 0,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 coff_i386_reloc,	/* special_function */
+	 "secidx",		/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 true),			/* pcrel_offset */
   /* 32-bit longword section relative relocation (013).  */
   HOWTO (R_SECREL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_i386_reloc,	/* special_function */
 	 "secrel32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 #else
+  EMPTY_HOWTO (012),
   EMPTY_HOWTO (013),
 #endif
   EMPTY_HOWTO (014),
@@ -265,84 +277,84 @@ static reloc_howto_type howto_table[] =
   /* Byte relocation (017).  */
   HOWTO (R_RELBYTE,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_i386_reloc,	/* special_function */
 	 "8",			/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* 16-bit word relocation (020).  */
   HOWTO (R_RELWORD,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_i386_reloc,	/* special_function */
 	 "16",			/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* 32-bit longword relocation (021).	*/
   HOWTO (R_RELLONG,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_i386_reloc,	/* special_function */
 	 "32",			/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* Byte PC relative relocation (022).	 */
   HOWTO (R_PCRBYTE,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_i386_reloc,	/* special_function */
 	 "DISP8",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* 16-bit word PC relative relocation (023).	*/
   HOWTO (R_PCRWORD,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_i386_reloc,	/* special_function */
 	 "DISP16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* 32-bit longword PC relative relocation (024).  */
   HOWTO (R_PCRLONG,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_i386_reloc,	/* special_function */
 	 "DISP32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET)		/* pcrel_offset */
@@ -393,7 +405,8 @@ static reloc_howto_type howto_table[] =
       cache_ptr->addend = - coffsym->native->u.syment.n_value;	\
     else if (ptr && bfd_asymbol_bfd (ptr) == abfd		\
 	     && ptr->section != (asection *) NULL)		\
-      cache_ptr->addend = - (ptr->section->vma + ptr->value);	\
+      cache_ptr->addend = - (ptr->section->vma			\
+			     + COFF_PE_ADDEND_BIAS (ptr));	\
     else							\
       cache_ptr->addend = 0;					\
     if (ptr && reloc.r_type < NUM_HOWTOS			\
@@ -411,11 +424,11 @@ static reloc_howto_type howto_table[] =
 
 #else /* COFF_WITH_PE */
 
-/* The PE relocate section routine.  The only difference between this
-   and the regular routine is that we don't want to do anything for a
-   relocatable link.  */
+/* The PE relocate section routine.  We handle secidx relocations here,
+   as well as making sure that we don't do anything for a relocatable
+   link.  */
 
-static bfd_boolean
+static bool
 coff_pe_i386_relocate_section (bfd *output_bfd,
 			       struct bfd_link_info *info,
 			       bfd *input_bfd,
@@ -425,8 +438,77 @@ coff_pe_i386_relocate_section (bfd *outp
 			       struct internal_syment *syms,
 			       asection **sections)
 {
+  struct internal_reloc *rel;
+  struct internal_reloc *relend;
+
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
+
+  rel = relocs;
+  relend = rel + input_section->reloc_count;
+
+  for (; rel < relend; rel++)
+    {
+      long symndx;
+      struct coff_link_hash_entry *h;
+      asection *sec, *s;
+      uint16_t idx = 0, i = 1;
+
+      if (rel->r_type != R_SECTION)
+	continue;
+
+      /* Make sure that _bfd_coff_generic_relocate_section won't parse
+         this reloc after us.  */
+      rel->r_type = 0;
+
+      symndx = rel->r_symndx;
+
+      if (symndx < 0
+	  || (unsigned long) symndx >= obj_raw_syment_count (input_bfd))
+	continue;
+
+      h = obj_coff_sym_hashes (input_bfd)[symndx];
+
+      if (h == NULL)
+	sec = sections[symndx];
+      else
+	{
+	  if (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
+	    {
+	      /* Defined weak symbols are a GNU extension.  */
+	      sec = h->root.u.def.section;
+	    }
+	  else
+	    {
+	      sec = NULL;
+	    }
+	}
+
+      if (!sec)
+	continue;
+
+      if (bfd_is_abs_section (sec))
+	continue;
+
+      if (discarded_section (sec))
+	continue;
+
+      s = output_bfd->sections;
+      while (s)
+	{
+	  if (s == sec->output_section)
+	    {
+	      idx = i;
+	      break;
+	    }
+
+	  i++;
+	  s = s->next;
+	}
+
+      bfd_putl16 (idx, contents + rel->r_vaddr - input_section->vma);
+    }
 
   return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,
 					     input_section, contents,
@@ -577,6 +659,8 @@ coff_i386_reloc_type_lookup (bfd *abfd A
 #ifdef COFF_WITH_PE
     case BFD_RELOC_32_SECREL:
       return howto_table + R_SECREL32;
+    case BFD_RELOC_16_SECIDX:
+      return howto_table + R_SECTION;
 #endif
     default:
       BFD_FAIL ();
@@ -606,11 +690,11 @@ coff_i386_reloc_name_lookup (bfd *abfd A
    a leading dot for local labels, so if TARGET_UNDERSCORE is defined
    we treat all symbols starting with L as local.  */
 
-static bfd_boolean
+static bool
 coff_i386_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == 'L')
-    return TRUE;
+    return true;
 
   return _bfd_coff_is_local_label_name (abfd, name);
 }
@@ -655,6 +739,7 @@ const bfd_target
   '/',				/* ar_pad_char */
   15,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
@@ -663,23 +748,93 @@ const bfd_target
      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
 
+#ifndef COFF_CHECK_FORMAT
+#define COFF_CHECK_FORMAT coff_object_p
+#endif
+#ifndef COFF_WRITE_CONTENTS
+#define COFF_WRITE_CONTENTS coff_write_object_contents
+#endif
+
 /* Note that we allow an object file to be treated as a core file as well.  */
 
-#ifdef COFF_CHECK_FORMAT
   {				/* bfd_check_format */
     _bfd_dummy_target,
     COFF_CHECK_FORMAT,
     bfd_generic_archive_p,
     COFF_CHECK_FORMAT
   },
+  {				/* bfd_set_format */
+    _bfd_bool_bfd_false_error,
+    coff_mkobject,
+    _bfd_generic_mkarchive,
+    _bfd_bool_bfd_false_error
+  },
+  {				/* bfd_write_contents */
+    _bfd_bool_bfd_false_error,
+    COFF_WRITE_CONTENTS,
+    _bfd_write_archive_contents,
+    _bfd_bool_bfd_false_error
+  },
+
+  BFD_JUMP_TABLE_GENERIC (coff),
+  BFD_JUMP_TABLE_COPY (coff),
+  BFD_JUMP_TABLE_CORE (_bfd_nocore),
+  BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
+  BFD_JUMP_TABLE_SYMBOLS (coff),
+  BFD_JUMP_TABLE_RELOCS (coff),
+  BFD_JUMP_TABLE_WRITE (coff),
+  BFD_JUMP_TABLE_LINK (coff),
+  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+  NULL,
+
+  COFF_SWAP_TABLE
+};
+
+#ifdef COFF_WITH_PE_BIGOBJ
+const bfd_target
+  TARGET_SYM_BIG =
+{
+  TARGET_NAME_BIG,
+  bfd_target_coff_flavour,
+  BFD_ENDIAN_LITTLE,		/* data byte order is little */
+  BFD_ENDIAN_LITTLE,		/* header byte order is little */
+
+  (HAS_RELOC | EXEC_P |		/* object flags */
+   HAS_LINENO | HAS_DEBUG |
+   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS ),
+
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* section flags */
+#ifdef COFF_WITH_PE
+   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
+#endif
+   | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
+
+#ifdef TARGET_UNDERSCORE
+  TARGET_UNDERSCORE,		/* leading underscore */
 #else
-  {
+  0,				/* leading underscore */
+#endif
+  '/',				/* ar_pad_char */
+  15,				/* ar_max_namelen */
+  0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
+
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
+
+/* Note that we allow an object file to be treated as a core file as well.  */
+
+  {				/* bfd_check_format */
     _bfd_dummy_target,
-    coff_object_p,
+    COFF_CHECK_FORMAT,
     bfd_generic_archive_p,
-    coff_object_p
+    COFF_CHECK_FORMAT
   },
-#endif
   {				/* bfd_set_format */
     _bfd_bool_bfd_false_error,
     coff_mkobject,
@@ -688,7 +843,7 @@ const bfd_target
   },
   {				/* bfd_write_contents */
     _bfd_bool_bfd_false_error,
-    coff_write_object_contents,
+    COFF_WRITE_CONTENTS,
     _bfd_write_archive_contents,
     _bfd_bool_bfd_false_error
   },
@@ -705,5 +860,6 @@ const bfd_target
 
   NULL,
 
-  COFF_SWAP_TABLE
+  &bigobj_swap_table
 };
+#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-ia64.c ./bfd/coff-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-ia64.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-ia64.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for HP/Intel IA-64 COFF files.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by David Mosberger <davidm@hpl.hp.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -53,11 +53,11 @@ static reloc_howto_type howto_table[] =
 /* Return TRUE if this relocation should
    appear in the output .reloc section.  */
 
-static bfd_boolean
+static bool
 in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
 	    reloc_howto_type *howto ATTRIBUTE_UNUSED)
 {
-  return FALSE;			/* We don't do relocs for now...  */
+  return false;			/* We don't do relocs for now...  */
 }
 #endif
 
@@ -67,7 +67,7 @@ in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
 
 #include "coffcode.h"
 
-static const bfd_target *
+static bfd_cleanup
 ia64coff_object_p (bfd *abfd)
 {
 #ifdef COFF_IMAGE_WITH_PE
@@ -76,9 +76,8 @@ ia64coff_object_p (bfd *abfd)
     struct external_PEI_IMAGE_hdr image_hdr;
     file_ptr offset;
 
-    if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-	|| (bfd_bread (&dos_hdr, (bfd_size_type) sizeof (dos_hdr), abfd)
-	    != sizeof (dos_hdr)))
+    if (bfd_seek (abfd, 0, SEEK_SET) != 0
+	|| (bfd_read (&dos_hdr, sizeof (dos_hdr), abfd) != sizeof (dos_hdr)))
       {
 	if (bfd_get_error () != bfd_error_system_call)
 	  bfd_set_error (bfd_error_wrong_format);
@@ -103,7 +102,7 @@ ia64coff_object_p (bfd *abfd)
 
     offset = H_GET_32 (abfd, dos_hdr.e_lfanew);
     if (bfd_seek (abfd, offset, SEEK_SET) != 0
-	|| (bfd_bread (&image_hdr, (bfd_size_type) sizeof (image_hdr), abfd)
+	|| (bfd_read (&image_hdr, sizeof (image_hdr), abfd)
 	    != sizeof (image_hdr)))
       {
 	if (bfd_get_error () != bfd_error_system_call)
@@ -170,6 +169,7 @@ const bfd_target
   '/',				/* ar_pad_char */
   15,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cofflink.c ./bfd/cofflink.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cofflink.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/cofflink.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* COFF specific linker code.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -29,11 +29,11 @@
 #include "libcoff.h"
 #include "safe-ctype.h"
 
-static bfd_boolean coff_link_add_object_symbols (bfd *, struct bfd_link_info *);
-static bfd_boolean coff_link_check_archive_element
+static bool coff_link_add_object_symbols (bfd *, struct bfd_link_info *);
+static bool coff_link_check_archive_element
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
-   bfd_boolean *);
-static bfd_boolean coff_link_add_symbols (bfd *, struct bfd_link_info *);
+   bool *);
+static bool coff_link_add_symbols (bfd *, struct bfd_link_info *);
 
 /* Return TRUE if SYM is a weak, external symbol.  */
 #define IS_WEAK_EXTERNAL(abfd, sym)			\
@@ -89,9 +89,37 @@ _bfd_coff_link_hash_newfunc (struct bfd_
   return (struct bfd_hash_entry *) ret;
 }
 
+struct bfd_hash_entry *
+_decoration_hash_newfunc (struct bfd_hash_entry *entry,
+			  struct bfd_hash_table *table,
+			  const char *string)
+{
+  struct decoration_hash_entry *ret = (struct decoration_hash_entry *) entry;
+
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (ret == NULL)
+    {
+      ret = (struct decoration_hash_entry *)
+	    bfd_hash_allocate (table, sizeof (struct decoration_hash_entry));
+      if (ret == NULL)
+	return NULL;
+    }
+
+  /* Call the allocation method of the superclass.  */
+  ret = (struct decoration_hash_entry *)
+	_bfd_link_hash_newfunc ((struct bfd_hash_entry *) ret, table, string);
+  if (ret != NULL)
+    {
+      ret->decorated_link = NULL;
+    }
+
+  return (struct bfd_hash_entry *) ret;
+}
+
 /* Initialize a COFF linker hash table.  */
 
-bfd_boolean
+bool
 _bfd_coff_link_hash_table_init (struct coff_link_hash_table *table,
 				bfd *abfd,
 				struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
@@ -100,7 +128,11 @@ _bfd_coff_link_hash_table_init (struct c
 				unsigned int entsize)
 {
   memset (&table->stab_info, 0, sizeof (table->stab_info));
-  return _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
+
+  return bfd_hash_table_init (&table->decoration_hash,
+			      _decoration_hash_newfunc,
+			      sizeof (struct decoration_hash_entry))
+	 &&_bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
 }
 
 /* Create a COFF linker hash table.  */
@@ -109,7 +141,7 @@ struct bfd_link_hash_table *
 _bfd_coff_link_hash_table_create (bfd *abfd)
 {
   struct coff_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct coff_link_hash_table);
+  size_t amt = sizeof (struct coff_link_hash_table);
 
   ret = (struct coff_link_hash_table *) bfd_malloc (amt);
   if (ret == NULL)
@@ -159,7 +191,7 @@ _bfd_coff_debug_merge_hash_newfunc (stru
 /* Given a COFF BFD, add symbols to the global hash table as
    appropriate.  */
 
-bfd_boolean
+bool
 _bfd_coff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   switch (bfd_get_format (abfd))
@@ -171,25 +203,25 @@ _bfd_coff_link_add_symbols (bfd *abfd, s
 	(abfd, info, coff_link_check_archive_element);
     default:
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 }
 
 /* Add symbols from a COFF object file.  */
 
-static bfd_boolean
+static bool
 coff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   if (! _bfd_coff_get_external_symbols (abfd))
-    return FALSE;
+    return false;
   if (! coff_link_add_symbols (abfd, info))
-    return FALSE;
+    return false;
 
   if (! info->keep_memory
       && ! _bfd_coff_free_symbols (abfd))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Check a single archive element to see if we need to include it in
@@ -197,44 +229,50 @@ coff_link_add_object_symbols (bfd *abfd,
    needed in the link or not.  This is called via
    _bfd_generic_link_add_archive_symbols.  */
 
-static bfd_boolean
+static bool
 coff_link_check_archive_element (bfd *abfd,
 				 struct bfd_link_info *info,
 				 struct bfd_link_hash_entry *h,
 				 const char *name,
-				 bfd_boolean *pneeded)
+				 bool *pneeded)
 {
-  *pneeded = FALSE;
+  *pneeded = false;
+
+  /* PR 22369 - Skip non COFF objects in the archive.  */
+  if (! bfd_family_coff (abfd))
+    return true;
 
   /* We are only interested in symbols that are currently undefined.
      If a symbol is currently known to be common, COFF linkers do not
      bring in an object file which defines it.  */
   if (h->type != bfd_link_hash_undefined)
-    return TRUE;
+    return true;
 
-  /* PR 22369 - Skip non COFF objects in the archive.  */
-  if (! bfd_family_coff (abfd))
-    return TRUE;
+  /* If the archive element has already been loaded then one
+     of the symbols defined by that element might have been
+     made undefined due to being in a discarded section.  */
+  if (((struct coff_link_hash_entry *) h)->indx == -3)
+    return true;
 
   /* Include this element?  */
   if (!(*info->callbacks->add_archive_element) (info, abfd, name, &abfd))
-    return TRUE;
-  *pneeded = TRUE;
+    return true;
+  *pneeded = true;
 
   return bfd_link_add_symbols (abfd, info);
 }
 
 /* Add all the symbols from an object file to the hash table.  */
 
-static bfd_boolean
+static bool
 coff_link_add_symbols (bfd *abfd,
 		       struct bfd_link_info *info)
 {
   unsigned int n_tmask = coff_data (abfd)->local_n_tmask;
   unsigned int n_btshft = coff_data (abfd)->local_n_btshft;
   unsigned int n_btmask = coff_data (abfd)->local_n_btmask;
-  bfd_boolean keep_syms;
-  bfd_boolean default_copy;
+  bool keep_syms;
+  bool default_copy;
   bfd_size_type symcount;
   struct coff_link_hash_entry **sym_hash;
   bfd_size_type symesz;
@@ -245,17 +283,17 @@ coff_link_add_symbols (bfd *abfd,
   symcount = obj_raw_syment_count (abfd);
 
   if (symcount == 0)
-    return TRUE;		/* Nothing to do.  */
+    return true;		/* Nothing to do.  */
 
   /* Keep the symbols during this function, in case the linker needs
      to read the generic symbols in order to report an error message.  */
   keep_syms = obj_coff_keep_syms (abfd);
-  obj_coff_keep_syms (abfd) = TRUE;
+  obj_coff_keep_syms (abfd) = true;
 
   if (info->keep_memory)
-    default_copy = FALSE;
+    default_copy = false;
   else
-    default_copy = TRUE;
+    default_copy = true;
 
   /* We keep a list of the linker hash table entries that correspond
      to particular symbols.  */
@@ -273,7 +311,7 @@ coff_link_add_symbols (bfd *abfd,
     {
       struct internal_syment sym;
       enum coff_symbol_classification classification;
-      bfd_boolean copy;
+      bool copy;
 
       bfd_coff_swap_sym_in (abfd, esym, &sym);
 
@@ -285,7 +323,8 @@ coff_link_add_symbols (bfd *abfd,
 	  flagword flags;
 	  asection *section;
 	  bfd_vma value;
-	  bfd_boolean addit;
+	  bool addit;
+	  bool discarded = false;
 
 	  /* This symbol is externally visible.  */
 
@@ -298,7 +337,7 @@ coff_link_add_symbols (bfd *abfd,
 	  copy = default_copy;
 	  if (sym._n._n_n._n_zeroes != 0
 	      || sym._n._n_n._n_offset == 0)
-	    copy = TRUE;
+	    copy = true;
 
 	  value = sym.n_value;
 
@@ -311,7 +350,10 @@ coff_link_add_symbols (bfd *abfd,
 	      flags = BSF_EXPORT | BSF_GLOBAL;
 	      section = coff_section_from_bfd_index (abfd, sym.n_scnum);
 	      if (discarded_section (section))
-		section = bfd_und_section_ptr;
+		{
+		  discarded = true;
+		  section = bfd_und_section_ptr;
+		}
 	      else if (! obj_pe (abfd))
 		value -= section->vma;
 	      break;
@@ -337,7 +379,7 @@ coff_link_add_symbols (bfd *abfd,
 	  if (IS_WEAK_EXTERNAL (abfd, sym))
 	    flags = BSF_WEAK;
 
-	  addit = TRUE;
+	  addit = true;
 
 	  /* In the PE format, section symbols actually refer to the
 	     start of the output section.  We handle them specially
@@ -345,7 +387,7 @@ coff_link_add_symbols (bfd *abfd,
 	  if (obj_pe (abfd) && (flags & BSF_SECTION_SYM) != 0)
 	    {
 	      *sym_hash = coff_link_hash_lookup (coff_hash_table (info),
-						 name, FALSE, copy, FALSE);
+						 name, false, copy, false);
 	      if (*sym_hash != NULL)
 		{
 		  if (((*sym_hash)->coff_link_hash_flags
@@ -356,7 +398,7 @@ coff_link_add_symbols (bfd *abfd,
 		      (_("warning: symbol `%s' is both section and non-section"),
 		       name);
 
-		  addit = FALSE;
+		  addit = false;
 		}
 	    }
 
@@ -387,27 +429,30 @@ coff_link_add_symbols (bfd *abfd,
 		  || classification == COFF_SYMBOL_PE_SECTION)
 	      && coff_section_data (abfd, section) != NULL
 	      && coff_section_data (abfd, section)->comdat != NULL
-	      && CONST_STRNEQ (name, "??_")
+	      && startswith (name, "??_")
 	      && strcmp (name, coff_section_data (abfd, section)->comdat->name) == 0)
 	    {
 	      if (*sym_hash == NULL)
 		*sym_hash = coff_link_hash_lookup (coff_hash_table (info),
-						   name, FALSE, copy, FALSE);
+						   name, false, copy, false);
 	      if (*sym_hash != NULL
 		  && (*sym_hash)->root.type == bfd_link_hash_defined
 		  && coff_section_data (abfd, (*sym_hash)->root.u.def.section)->comdat != NULL
 		  && strcmp (coff_section_data (abfd, (*sym_hash)->root.u.def.section)->comdat->name,
 			     coff_section_data (abfd, section)->comdat->name) == 0)
-		addit = FALSE;
+		addit = false;
 	    }
 
 	  if (addit)
 	    {
 	      if (! (bfd_coff_link_add_one_symbol
 		     (info, abfd, name, flags, section, value,
-		      (const char *) NULL, copy, FALSE,
+		      (const char *) NULL, copy, false,
 		      (struct bfd_link_hash_entry **) sym_hash)))
 		goto error_return;
+
+	      if (discarded)
+		(*sym_hash)->indx = -3;
 	    }
 
 	  if (obj_pe (abfd) && (flags & BSF_SECTION_SYM) != 0)
@@ -533,7 +578,7 @@ coff_link_add_symbols (bfd *abfd,
 	  asection *stab;
 
 	  for (stab = abfd->sections; stab; stab = stab->next)
-	    if (CONST_STRNEQ (stab->name, ".stab")
+	    if (startswith (stab->name, ".stab")
 		&& (!stab->name[5]
 		    || (stab->name[5] == '.' && ISDIGIT (stab->name[6]))))
 	    {
@@ -563,23 +608,23 @@ coff_link_add_symbols (bfd *abfd,
 
   obj_coff_keep_syms (abfd) = keep_syms;
 
-  return TRUE;
+  return true;
 
  error_return:
   obj_coff_keep_syms (abfd) = keep_syms;
-  return FALSE;
+  return false;
 }
 
 /* Do the final link step.  */
 
-bfd_boolean
+bool
 _bfd_coff_final_link (bfd *abfd,
 		      struct bfd_link_info *info)
 {
   bfd_size_type symesz;
   struct coff_final_link_info flaginfo;
-  bfd_boolean debug_merge_allocated;
-  bfd_boolean long_section_names;
+  bool debug_merge_allocated;
+  bool long_section_names;
   asection *o;
   struct bfd_link_order *p;
   bfd_size_type max_sym_count;
@@ -612,8 +657,8 @@ _bfd_coff_final_link (bfd *abfd,
   flaginfo.contents = NULL;
   flaginfo.external_relocs = NULL;
   flaginfo.internal_relocs = NULL;
-  flaginfo.global_to_static = FALSE;
-  debug_merge_allocated = FALSE;
+  flaginfo.global_to_static = false;
+  debug_merge_allocated = false;
 
   coff_data (abfd)->link_info = info;
 
@@ -623,7 +668,7 @@ _bfd_coff_final_link (bfd *abfd,
 
   if (! coff_debug_merge_hash_table_init (&flaginfo.debug_merge))
     goto error_return;
-  debug_merge_allocated = TRUE;
+  debug_merge_allocated = true;
 
   /* Compute the file positions for all the sections.  */
   if (! abfd->output_has_begun)
@@ -640,7 +685,7 @@ _bfd_coff_final_link (bfd *abfd,
   max_lineno_count = 0;
   max_reloc_count = 0;
 
-  long_section_names = FALSE;
+  long_section_names = false;
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       o->reloc_count = 0;
@@ -657,7 +702,7 @@ _bfd_coff_final_link (bfd *abfd,
 		 link.  This will normally be every section.  We need
 		 to do this so that we can identify any sections which
 		 the linker has decided to not include.  */
-	      sec->linker_mark = TRUE;
+	      sec->linker_mark = true;
 
 	      if (info->strip == strip_none
 		  || info->strip == strip_some)
@@ -689,7 +734,7 @@ _bfd_coff_final_link (bfd *abfd,
 	  rel_filepos += o->reloc_count * relsz;
 	  /* In PE COFF, if there are at least 0xffff relocations an
 	     extra relocation will be written out to encode the count.  */
-	  if (obj_pe (abfd) && o->reloc_count >= 0xffff)
+	  if ((obj_pe (abfd) || obj_go32 (abfd)) && o->reloc_count >= 0xffff)
 	    rel_filepos += relsz;
 	}
 
@@ -701,10 +746,10 @@ _bfd_coff_final_link (bfd *abfd,
 	     coff_write_object_contents which puts the string index
 	     into the s_name field of the section header.  That is why
 	     we pass hash as FALSE.  */
-	  if (_bfd_stringtab_add (flaginfo.strtab, o->name, FALSE, FALSE)
+	  if (_bfd_stringtab_add (flaginfo.strtab, o->name, false, false)
 	      == (bfd_size_type) -1)
 	    goto error_return;
-	  long_section_names = TRUE;
+	  long_section_names = true;
 	}
     }
 
@@ -791,7 +836,7 @@ _bfd_coff_final_link (bfd *abfd,
     {
       size_t sz;
 
-      sub->output_has_begun = FALSE;
+      sub->output_has_begun = false;
       sz = bfd_family_coff (sub) ? obj_raw_syment_count (sub) : 2;
       if (sz > max_sym_count)
 	max_sym_count = sz;
@@ -852,7 +897,7 @@ _bfd_coff_final_link (bfd *abfd,
 		{
 		  if (! _bfd_coff_link_input_bfd (&flaginfo, sub))
 		    goto error_return;
-		  sub->output_has_begun = TRUE;
+		  sub->output_has_begun = true;
 		}
 	    }
 	  else if (p->type == bfd_section_reloc_link_order
@@ -883,10 +928,8 @@ _bfd_coff_final_link (bfd *abfd,
 	      asymbol *sym = bfd_get_outsymbols (sub) [i];
 	      file_ptr pos;
 	      struct internal_syment isym;
-	      union internal_auxent iaux;
-	      bfd_size_type string_size = 0, indx;
 	      bfd_vma written = 0;
-	      bfd_boolean rewrite = FALSE, hash;
+	      bool rewrite = false;
 
 	      if (! (sym->flags & BSF_LOCAL)
 		  || (sym->flags & (BSF_SECTION_SYM | BSF_DEBUGGING_RELOC
@@ -899,7 +942,7 @@ _bfd_coff_final_link (bfd *abfd,
 	      /* See if we are discarding symbols with this name.  */
 	      if ((flaginfo.info->strip == strip_some
 		   && (bfd_hash_lookup (flaginfo.info->keep_hash,
-					bfd_asymbol_name(sym), FALSE, FALSE)
+					bfd_asymbol_name(sym), false, false)
 		       == NULL))
 		  || (((flaginfo.info->discard == discard_sec_merge
 			&& (bfd_asymbol_section (sym)->flags & SEC_MERGE)
@@ -912,54 +955,12 @@ _bfd_coff_final_link (bfd *abfd,
 					     * symesz;
 	      if (bfd_seek (abfd, pos, SEEK_SET) != 0)
 		goto error_return;
-	      if (! coff_write_alien_symbol(abfd, sym, &isym, &iaux, &written,
-					    &string_size, NULL, NULL))
+	      if (! coff_write_alien_symbol(abfd, sym, &isym, &written,
+					    flaginfo.strtab,
+					    !flaginfo.info->traditional_format,
+					    NULL, NULL))
 		goto error_return;
 
-	      hash = !flaginfo.info->traditional_format;
-
-	      if (string_size >= 6 && isym.n_sclass == C_FILE
-		  && ! isym._n._n_n._n_zeroes && isym.n_numaux)
-		{
-		  indx = _bfd_stringtab_add (flaginfo.strtab, ".file", hash,
-					     FALSE);
-		  if (indx == (bfd_size_type) -1)
-		    goto error_return;
-		  isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
-		  bfd_coff_swap_sym_out (abfd, &isym, flaginfo.outsyms);
-		  if (bfd_seek (abfd, pos, SEEK_SET) != 0
-		      || bfd_bwrite (flaginfo.outsyms, symesz,
-				     abfd) != symesz)
-		    goto error_return;
-		  string_size -= 6;
-		}
-
-	      if (string_size)
-		{
-		  indx = _bfd_stringtab_add (flaginfo.strtab,
-					     bfd_asymbol_name (sym), hash,
-					     FALSE);
-		  if (indx == (bfd_size_type) -1)
-		    goto error_return;
-		  if (isym.n_sclass != C_FILE)
-		    {
-		      isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
-		      bfd_coff_swap_sym_out (abfd, &isym, flaginfo.outsyms);
-		      rewrite = TRUE;
-		    }
-		  else
-		    {
-		      BFD_ASSERT (isym.n_numaux == 1);
-		      iaux.x_file.x_n.x_offset = STRING_SIZE_SIZE + indx;
-		      bfd_coff_swap_aux_out (abfd, &iaux, isym.n_type, C_FILE,
-					     0, 1, flaginfo.outsyms + symesz);
-		      if (bfd_seek (abfd, pos + symesz, SEEK_SET) != 0
-			  || bfd_bwrite (flaginfo.outsyms + symesz, symesz,
-					 abfd) != symesz)
-			goto error_return;
-		    }
-		}
-
 	      if (isym.n_sclass == C_FILE)
 		{
 		  if (flaginfo.last_file_index != -1)
@@ -969,7 +970,7 @@ _bfd_coff_final_link (bfd *abfd,
 					     flaginfo.outsyms);
 		      pos = obj_sym_filepos (abfd) + flaginfo.last_file_index
 						     * symesz;
-		      rewrite = TRUE;
+		      rewrite = true;
 		    }
 		  flaginfo.last_file_index = obj_raw_syment_count (abfd);
 		  flaginfo.last_file = isym;
@@ -977,7 +978,7 @@ _bfd_coff_final_link (bfd *abfd,
 
 	      if (rewrite
 		  && (bfd_seek (abfd, pos, SEEK_SET) != 0
-		      || bfd_bwrite (flaginfo.outsyms, symesz, abfd) != symesz))
+		      || bfd_write (flaginfo.outsyms, symesz, abfd) != symesz))
 		goto error_return;
 
 	      obj_raw_syment_count (abfd) += written;
@@ -991,43 +992,22 @@ _bfd_coff_final_link (bfd *abfd,
   /* Free up the buffers used by _bfd_coff_link_input_bfd.  */
 
   coff_debug_merge_hash_table_free (&flaginfo.debug_merge);
-  debug_merge_allocated = FALSE;
+  debug_merge_allocated = false;
 
-  if (flaginfo.internal_syms != NULL)
-    {
-      free (flaginfo.internal_syms);
-      flaginfo.internal_syms = NULL;
-    }
-  if (flaginfo.sec_ptrs != NULL)
-    {
-      free (flaginfo.sec_ptrs);
-      flaginfo.sec_ptrs = NULL;
-    }
-  if (flaginfo.sym_indices != NULL)
-    {
-      free (flaginfo.sym_indices);
-      flaginfo.sym_indices = NULL;
-    }
-  if (flaginfo.linenos != NULL)
-    {
-      free (flaginfo.linenos);
-      flaginfo.linenos = NULL;
-    }
-  if (flaginfo.contents != NULL)
-    {
-      free (flaginfo.contents);
-      flaginfo.contents = NULL;
-    }
-  if (flaginfo.external_relocs != NULL)
-    {
-      free (flaginfo.external_relocs);
-      flaginfo.external_relocs = NULL;
-    }
-  if (flaginfo.internal_relocs != NULL)
-    {
-      free (flaginfo.internal_relocs);
-      flaginfo.internal_relocs = NULL;
-    }
+  free (flaginfo.internal_syms);
+  flaginfo.internal_syms = NULL;
+  free (flaginfo.sec_ptrs);
+  flaginfo.sec_ptrs = NULL;
+  free (flaginfo.sym_indices);
+  flaginfo.sym_indices = NULL;
+  free (flaginfo.linenos);
+  flaginfo.linenos = NULL;
+  free (flaginfo.contents);
+  flaginfo.contents = NULL;
+  free (flaginfo.external_relocs);
+  flaginfo.external_relocs = NULL;
+  free (flaginfo.internal_relocs);
+  flaginfo.internal_relocs = NULL;
 
   /* The value of the last C_FILE symbol is supposed to be the symbol
      index of the first external symbol.  Write it out again if
@@ -1043,8 +1023,8 @@ _bfd_coff_final_link (bfd *abfd,
 
       pos = obj_sym_filepos (abfd) + flaginfo.last_file_index * symesz;
       if (bfd_seek (abfd, pos, SEEK_SET) != 0
-	  || bfd_bwrite (flaginfo.outsyms, symesz, abfd) != symesz)
-	return FALSE;
+	  || bfd_write (flaginfo.outsyms, symesz, abfd) != symesz)
+	return false;
     }
 
   /* If doing task linking (ld --task-link) then make a pass through the
@@ -1052,7 +1032,7 @@ _bfd_coff_final_link (bfd *abfd,
      static.  */
   if (info->task_link)
     {
-      flaginfo.failed = FALSE;
+      flaginfo.failed = false;
       coff_link_hash_traverse (coff_hash_table (info),
 			       _bfd_coff_write_task_globals, &flaginfo);
       if (flaginfo.failed)
@@ -1060,17 +1040,14 @@ _bfd_coff_final_link (bfd *abfd,
     }
 
   /* Write out the global symbols.  */
-  flaginfo.failed = FALSE;
+  flaginfo.failed = false;
   bfd_hash_traverse (&info->hash->table, _bfd_coff_write_global_sym, &flaginfo);
   if (flaginfo.failed)
     goto error_return;
 
   /* The outsyms buffer is used by _bfd_coff_write_global_sym.  */
-  if (flaginfo.outsyms != NULL)
-    {
-      free (flaginfo.outsyms);
-      flaginfo.outsyms = NULL;
-    }
+  free (flaginfo.outsyms);
+  flaginfo.outsyms = NULL;
 
   if (bfd_link_relocatable (info) && max_output_reloc_count > 0)
     {
@@ -1108,7 +1085,7 @@ _bfd_coff_final_link (bfd *abfd,
 
 	  if (bfd_seek (abfd, o->rel_filepos, SEEK_SET) != 0)
 	    goto error_return;
-	  if (obj_pe (abfd) && o->reloc_count >= 0xffff)
+	  if ((obj_pe (abfd) || obj_go32 (abfd)) && o->reloc_count >= 0xffff)
 	    {
 	      /* In PE COFF, write the count of relocs as the first
 		 reloc.  The header overflow bit will be set
@@ -1119,13 +1096,13 @@ _bfd_coff_final_link (bfd *abfd,
 	      memset (&incount, 0, sizeof (incount));
 	      incount.r_vaddr = o->reloc_count + 1;
 	      bfd_coff_swap_reloc_out (abfd, &incount, excount);
-	      if (bfd_bwrite (excount, relsz, abfd) != relsz)
+	      if (bfd_write (excount, relsz, abfd) != relsz)
 		/* We'll leak, but it's an error anyway. */
 		goto error_return;
 	      free (excount);
 	    }
-	  if (bfd_bwrite (external_relocs,
-			  (bfd_size_type) relsz * o->reloc_count, abfd)
+	  if (bfd_write (external_relocs,
+			 (bfd_size_type) relsz * o->reloc_count, abfd)
 	      != (bfd_size_type) relsz * o->reloc_count)
 	    goto error_return;
 	}
@@ -1141,10 +1118,8 @@ _bfd_coff_final_link (bfd *abfd,
 
       for (i = 0; i < abfd->section_count; i++)
 	{
-	  if (flaginfo.section_info[i].relocs != NULL)
-	    free (flaginfo.section_info[i].relocs);
-	  if (flaginfo.section_info[i].rel_hashes != NULL)
-	    free (flaginfo.section_info[i].rel_hashes);
+	  free (flaginfo.section_info[i].relocs);
+	  free (flaginfo.section_info[i].rel_hashes);
 	}
       free (flaginfo.section_info);
       flaginfo.section_info = NULL;
@@ -1154,7 +1129,7 @@ _bfd_coff_final_link (bfd *abfd,
   if (coff_hash_table (info)->stab_info.stabstr != NULL)
     {
       if (! _bfd_write_stab_strings (abfd, &coff_hash_table (info)->stab_info))
-	return FALSE;
+	return false;
     }
 
   /* Write out the string table.  */
@@ -1164,7 +1139,7 @@ _bfd_coff_final_link (bfd *abfd,
 
       pos = obj_sym_filepos (abfd) + obj_raw_syment_count (abfd) * symesz;
       if (bfd_seek (abfd, pos, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
 #if STRING_SIZE_SIZE == 4
       H_PUT_32 (abfd,
@@ -1174,14 +1149,13 @@ _bfd_coff_final_link (bfd *abfd,
  #error Change H_PUT_32 above
 #endif
 
-      if (bfd_bwrite (strbuf, (bfd_size_type) STRING_SIZE_SIZE, abfd)
-	  != STRING_SIZE_SIZE)
-	return FALSE;
+      if (bfd_write (strbuf, STRING_SIZE_SIZE, abfd) != STRING_SIZE_SIZE)
+	return false;
 
       if (! _bfd_stringtab_emit (abfd, flaginfo.strtab))
-	return FALSE;
+	return false;
 
-      obj_coff_strings_written (abfd) = TRUE;
+      obj_coff_strings_written (abfd) = true;
     }
 
   _bfd_stringtab_free (flaginfo.strtab);
@@ -1190,7 +1164,7 @@ _bfd_coff_final_link (bfd *abfd,
      not try to write out the symbols.  */
   abfd->symcount = 0;
 
-  return TRUE;
+  return true;
 
  error_return:
   if (debug_merge_allocated)
@@ -1203,32 +1177,21 @@ _bfd_coff_final_link (bfd *abfd,
 
       for (i = 0; i < abfd->section_count; i++)
 	{
-	  if (flaginfo.section_info[i].relocs != NULL)
-	    free (flaginfo.section_info[i].relocs);
-	  if (flaginfo.section_info[i].rel_hashes != NULL)
-	    free (flaginfo.section_info[i].rel_hashes);
+	  free (flaginfo.section_info[i].relocs);
+	  free (flaginfo.section_info[i].rel_hashes);
 	}
       free (flaginfo.section_info);
     }
-  if (flaginfo.internal_syms != NULL)
-    free (flaginfo.internal_syms);
-  if (flaginfo.sec_ptrs != NULL)
-    free (flaginfo.sec_ptrs);
-  if (flaginfo.sym_indices != NULL)
-    free (flaginfo.sym_indices);
-  if (flaginfo.outsyms != NULL)
-    free (flaginfo.outsyms);
-  if (flaginfo.linenos != NULL)
-    free (flaginfo.linenos);
-  if (flaginfo.contents != NULL)
-    free (flaginfo.contents);
-  if (flaginfo.external_relocs != NULL)
-    free (flaginfo.external_relocs);
-  if (flaginfo.internal_relocs != NULL)
-    free (flaginfo.internal_relocs);
-  if (external_relocs != NULL)
-    free (external_relocs);
-  return FALSE;
+  free (flaginfo.internal_syms);
+  free (flaginfo.sec_ptrs);
+  free (flaginfo.sym_indices);
+  free (flaginfo.outsyms);
+  free (flaginfo.linenos);
+  free (flaginfo.contents);
+  free (flaginfo.external_relocs);
+  free (flaginfo.internal_relocs);
+  free (external_relocs);
+  return false;
 }
 
 /* Parse out a -heap <reserved>,<commit> line.  */
@@ -1236,7 +1199,7 @@ _bfd_coff_final_link (bfd *abfd,
 static char *
 dores_com (char *ptr, bfd *output_bfd, int heap)
 {
-  if (coff_data(output_bfd)->pe)
+  if (obj_pe (output_bfd))
     {
       int val = strtoul (ptr, &ptr, 0);
 
@@ -1281,13 +1244,12 @@ process_embedded_commands (bfd *output_b
   char *e;
   bfd_byte *copy;
 
-  if (!sec)
+  if (sec == NULL || (sec->flags & SEC_HAS_CONTENTS) == 0)
     return 1;
 
   if (!bfd_malloc_and_get_section (abfd, sec, &copy))
     {
-      if (copy != NULL)
-	free (copy);
+      free (copy);
       return 0;
     }
   e = (char *) copy + sec->size;
@@ -1299,7 +1261,7 @@ process_embedded_commands (bfd *output_b
 	  s++;
 	  continue;
 	}
-      if (CONST_STRNEQ (s, "-attr"))
+      if (startswith (s, "-attr"))
 	{
 	  char *name;
 	  char *attribs;
@@ -1339,14 +1301,14 @@ process_embedded_commands (bfd *output_b
 		asec->flags |= SEC_READONLY;
 	    }
 	}
-      else if (CONST_STRNEQ (s, "-heap"))
+      else if (startswith (s, "-heap"))
 	s = dores_com (s + 5, output_bfd, 1);
 
-      else if (CONST_STRNEQ (s, "-stack"))
+      else if (startswith (s, "-stack"))
 	s = dores_com (s + 6, output_bfd, 0);
 
       /* GNU extension for aligned commons.  */
-      else if (CONST_STRNEQ (s, "-aligncomm:"))
+      else if (startswith (s, "-aligncomm:"))
 	{
 	  /* Common symbols must be aligned on reading, as it
 	  is too late to do anything here, after they have
@@ -1389,7 +1351,7 @@ mark_relocs (struct coff_final_link_info
 
       /* Read in the relocs.  */
       internal_relocs = _bfd_coff_read_internal_relocs
-	(input_bfd, a, FALSE,
+	(input_bfd, a, false,
 	 flaginfo->external_relocs,
 	 bfd_link_relocatable (flaginfo->info),
 	 (bfd_link_relocatable (flaginfo->info)
@@ -1416,18 +1378,18 @@ mark_relocs (struct coff_final_link_info
 /* Link an input file into the linker output file.  This function
    handles all the sections and relocations of the input file at once.  */
 
-bfd_boolean
+bool
 _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd)
 {
   unsigned int n_tmask = coff_data (input_bfd)->local_n_tmask;
   unsigned int n_btshft = coff_data (input_bfd)->local_n_btshft;
-  bfd_boolean (*adjust_symndx)
+  bool (*adjust_symndx)
     (bfd *, struct bfd_link_info *, bfd *, asection *,
-     struct internal_reloc *, bfd_boolean *);
+     struct internal_reloc *, bool *);
   bfd *output_bfd;
   const char *strings;
   bfd_size_type syment_base;
-  bfd_boolean copy, hash;
+  bool copy, hash;
   bfd_size_type isymesz;
   bfd_size_type osymesz;
   bfd_size_type linesz;
@@ -1451,15 +1413,15 @@ _bfd_coff_link_input_bfd (struct coff_fi
   linesz = bfd_coff_linesz (input_bfd);
   BFD_ASSERT (linesz == bfd_coff_linesz (output_bfd));
 
-  copy = FALSE;
+  copy = false;
   if (! flaginfo->info->keep_memory)
-    copy = TRUE;
-  hash = TRUE;
+    copy = true;
+  hash = true;
   if (flaginfo->info->traditional_format)
-    hash = FALSE;
+    hash = false;
 
   if (! _bfd_coff_get_external_symbols (input_bfd))
-    return FALSE;
+    return false;
 
   esym = (bfd_byte *) obj_coff_external_syms (input_bfd);
   esym_end = esym + obj_raw_syment_count (input_bfd) * isymesz;
@@ -1469,9 +1431,9 @@ _bfd_coff_link_input_bfd (struct coff_fi
   output_index = syment_base;
   outsym = flaginfo->outsyms;
 
-  if (coff_data (output_bfd)->pe
+  if (obj_pe (output_bfd)
       && ! process_embedded_commands (output_bfd, flaginfo->info, input_bfd))
-    return FALSE;
+    return false;
 
   /* If we are going to perform relocations and also strip/discard some
      symbols then we must make sure that we do not strip/discard those
@@ -1490,9 +1452,9 @@ _bfd_coff_link_input_bfd (struct coff_fi
     {
       struct internal_syment isym;
       enum coff_symbol_classification classification;
-      bfd_boolean skip;
-      bfd_boolean global;
-      bfd_boolean dont_skip_symbol;
+      bool skip;
+      bool global;
+      bool dont_skip_symbol;
       int add;
 
       bfd_coff_swap_sym_in (input_bfd, esym, isymp);
@@ -1528,17 +1490,17 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  && bfd_link_relocatable (flaginfo->info))
 	dont_skip_symbol = *indexp;
       else
-	dont_skip_symbol = FALSE;
+	dont_skip_symbol = false;
 
       *indexp = -1;
 
-      skip = FALSE;
-      global = FALSE;
+      skip = false;
+      global = false;
       add = 1 + isym.n_numaux;
 
       /* If we are stripping all symbols, we want to skip this one.  */
       if (flaginfo->info->strip == strip_all && ! dont_skip_symbol)
-	skip = TRUE;
+	skip = true;
 
       if (! skip)
 	{
@@ -1553,22 +1515,22 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		 end of the symbol table, so skip them for now.
 		 Locally defined function symbols, however, are an
 		 exception, and are not moved to the end.  */
-	      global = TRUE;
+	      global = true;
 	      if (! ISFCN (isym.n_type))
-		skip = TRUE;
+		skip = true;
 	      break;
 
 	    case COFF_SYMBOL_UNDEFINED:
 	      /* Undefined symbols are left for the end.  */
-	      global = TRUE;
-	      skip = TRUE;
+	      global = true;
+	      skip = true;
 	      break;
 
 	    case COFF_SYMBOL_LOCAL:
 	      /* This is a local symbol.  Skip it if we are discarding
 		 local symbols.  */
 	      if (flaginfo->info->discard == discard_all && ! dont_skip_symbol)
-		skip = TRUE;
+		skip = true;
 	      break;
 	    }
 	}
@@ -1584,7 +1546,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  && ((*secpp)->output_section == bfd_abs_section_ptr
 	      || bfd_section_removed_from_list (output_bfd,
 						(*secpp)->output_section)))
-	skip = TRUE;
+	skip = true;
 #endif
 
       /* If we stripping debugging symbols, and this is a debugging
@@ -1605,7 +1567,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		      || isym.n_sclass == C_REGPARM
 		      || isym.n_sclass == C_FIELD
 		      || isym.n_sclass == C_EOS))))
-	skip = TRUE;
+	skip = true;
 
       /* If some symbols are stripped based on the name, work out the
 	 name and decide whether to skip this symbol.  */
@@ -1618,16 +1580,16 @@ _bfd_coff_link_input_bfd (struct coff_fi
 
 	  name = _bfd_coff_internal_syment_name (input_bfd, &isym, buf);
 	  if (name == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (! dont_skip_symbol
 	      && ((flaginfo->info->strip == strip_some
-		   && (bfd_hash_lookup (flaginfo->info->keep_hash, name, FALSE,
-				    FALSE) == NULL))
+		   && (bfd_hash_lookup (flaginfo->info->keep_hash, name, false,
+				    false) == NULL))
 		   || (! global
 		       && flaginfo->info->discard == discard_l
 		       && bfd_is_local_label_name (input_bfd, name))))
-	    skip = TRUE;
+	    skip = true;
 	}
 
       /* If this is an enum, struct, or union tag, see if we have
@@ -1647,23 +1609,24 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  struct coff_debug_merge_element **epp;
 	  bfd_byte *esl, *eslend;
 	  struct internal_syment *islp;
-	  bfd_size_type amt;
+	  size_t amt;
 
 	  name = _bfd_coff_internal_syment_name (input_bfd, &isym, buf);
 	  if (name == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Ignore fake names invented by compiler; treat them all as
 	     the same name.  */
 	  if (*name == '~' || *name == '.' || *name == '$'
-	      || (*name == bfd_get_symbol_leading_char (input_bfd)
+	      || (*name
+		  && *name == bfd_get_symbol_leading_char (input_bfd)
 		  && (name[1] == '~' || name[1] == '.' || name[1] == '$')))
 	    name = "";
 
 	  mh = coff_debug_merge_hash_lookup (&flaginfo->debug_merge, name,
-					     TRUE, TRUE);
+					     true, true);
 	  if (mh == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Allocate memory to hold type information.  If this turns
 	     out to be a duplicate, we pass this address to
@@ -1671,7 +1634,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  amt = sizeof (struct coff_debug_merge_type);
 	  mt = (struct coff_debug_merge_type *) bfd_alloc (input_bfd, amt);
 	  if (mt == NULL)
-	    return FALSE;
+	    return false;
 	  mt->type_class = isym.n_sclass;
 
 	  /* Pick up the aux entry, which points to the end of the tag
@@ -1686,7 +1649,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  islp = isymp + 2;
 	  esl = esym + 2 * isymesz;
 	  eslend = ((bfd_byte *) obj_coff_external_syms (input_bfd)
-		    + aux.x_sym.x_fcnary.x_fcn.x_endndx.l * isymesz);
+		    + aux.x_sym.x_fcnary.x_fcn.x_endndx.u32 * isymesz);
 	  while (esl < eslend)
 	    {
 	      const char *elename;
@@ -1699,17 +1662,17 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	      *epp = (struct coff_debug_merge_element *)
 		  bfd_alloc (input_bfd, amt);
 	      if (*epp == NULL)
-		return FALSE;
+		return false;
 
 	      elename = _bfd_coff_internal_syment_name (input_bfd, islp,
 							elebuf);
 	      if (elename == NULL)
-		return FALSE;
+		return false;
 
 	      amt = strlen (elename) + 1;
 	      name_copy = (char *) bfd_alloc (input_bfd, amt);
 	      if (name_copy == NULL)
-		return FALSE;
+		return false;
 	      strcpy (name_copy, elename);
 
 	      (*epp)->name = name_copy;
@@ -1725,7 +1688,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		  bfd_coff_swap_aux_in (input_bfd, (esl + isymesz),
 					islp->n_type, islp->n_sclass, 0,
 					islp->n_numaux, &eleaux);
-		  indx = eleaux.x_sym.x_tagndx.l;
+		  indx = eleaux.x_sym.x_tagndx.u32;
 
 		  /* FIXME: If this tagndx entry refers to a symbol
 		     defined later in this file, we just ignore it.
@@ -1792,7 +1755,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		  bfd_release (input_bfd, mt);
 		  *indexp = mtl->indx;
 		  add = (eslend - esym) / isymesz;
-		  skip = TRUE;
+		  skip = true;
 		}
 	    }
 	}
@@ -1815,10 +1778,10 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		 anyhow.  */
 	      name = _bfd_coff_internal_syment_name (input_bfd, &isym, NULL);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      indx = _bfd_stringtab_add (flaginfo->strtab, name, hash, copy);
 	      if (indx == (bfd_size_type) -1)
-		return FALSE;
+		return false;
 	      isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
 	    }
 
@@ -1914,8 +1877,8 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		      pos = obj_sym_filepos (output_bfd);
 		      pos += flaginfo->last_file_index * osymesz;
 		      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-			  || bfd_bwrite (outsym, osymesz, output_bfd) != osymesz)
-			return FALSE;
+			  || bfd_write (outsym, osymesz, output_bfd) != osymesz)
+			return false;
 		    }
 		}
 
@@ -1947,7 +1910,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		  /* This can happen if there were errors earlier in
 		     the link.  */
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	      h->indx = output_index;
 	    }
@@ -2031,29 +1994,29 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		{
 		  /* If this is a long filename, we must put it in the
 		     string table.  */
-		  if (auxp->x_file.x_n.x_zeroes == 0
-		      && auxp->x_file.x_n.x_offset != 0)
+		  if (auxp->x_file.x_n.x_n.x_zeroes == 0
+		      && auxp->x_file.x_n.x_n.x_offset != 0)
 		    {
 		      const char *filename;
 		      bfd_size_type indx;
 
-		      BFD_ASSERT (auxp->x_file.x_n.x_offset
+		      BFD_ASSERT (auxp->x_file.x_n.x_n.x_offset
 				  >= STRING_SIZE_SIZE);
 		      if (strings == NULL)
 			{
 			  strings = _bfd_coff_read_string_table (input_bfd);
 			  if (strings == NULL)
-			    return FALSE;
+			    return false;
 			}
-		      if ((bfd_size_type) auxp->x_file.x_n.x_offset >= obj_coff_strings_len (input_bfd))
+		      if ((bfd_size_type) auxp->x_file.x_n.x_n.x_offset >= obj_coff_strings_len (input_bfd))
 			filename = _("<corrupt>");
 		      else
-			filename = strings + auxp->x_file.x_n.x_offset;
+			filename = strings + auxp->x_file.x_n.x_n.x_offset;
 		      indx = _bfd_stringtab_add (flaginfo->strtab, filename,
 						 hash, copy);
 		      if (indx == (bfd_size_type) -1)
-			return FALSE;
-		      auxp->x_file.x_n.x_offset = STRING_SIZE_SIZE + indx;
+			return false;
+		      auxp->x_file.x_n.x_n.x_offset = STRING_SIZE_SIZE + indx;
 		    }
 		}
 	      else if ((isymp->n_sclass != C_STAT || isymp->n_type != T_NULL)
@@ -2066,7 +2029,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		      || isymp->n_sclass == C_BLOCK
 		      || isymp->n_sclass == C_FCN)
 		    {
-		      indx = auxp->x_sym.x_fcnary.x_fcn.x_endndx.l;
+		      indx = auxp->x_sym.x_fcnary.x_fcn.x_endndx.u32;
 		      if (indx > 0
 			  && indx < obj_raw_syment_count (input_bfd))
 			{
@@ -2083,20 +2046,20 @@ _bfd_coff_link_input_bfd (struct coff_fi
 			    indx = output_index;
 			  else
 			    indx = flaginfo->sym_indices[indx];
-			  auxp->x_sym.x_fcnary.x_fcn.x_endndx.l = indx;
+			  auxp->x_sym.x_fcnary.x_fcn.x_endndx.u32 = indx;
 			}
 		    }
 
-		  indx = auxp->x_sym.x_tagndx.l;
+		  indx = auxp->x_sym.x_tagndx.u32;
 		  if (indx > 0 && indx < obj_raw_syment_count (input_bfd))
 		    {
 		      long symindx;
 
 		      symindx = flaginfo->sym_indices[indx];
 		      if (symindx < 0)
-			auxp->x_sym.x_tagndx.l = 0;
+			auxp->x_sym.x_tagndx.u32 = 0;
 		      else
-			auxp->x_sym.x_tagndx.l = symindx;
+			auxp->x_sym.x_tagndx.u32 = symindx;
 		    }
 
 		  /* The .bf symbols are supposed to be linked through
@@ -2114,7 +2077,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		    {
 		      if (flaginfo->last_bf_index != -1)
 			{
-			  flaginfo->last_bf.x_sym.x_fcnary.x_fcn.x_endndx.l =
+			  flaginfo->last_bf.x_sym.x_fcnary.x_fcn.x_endndx.u32 =
 			    *indexp;
 
 			  if ((bfd_size_type) flaginfo->last_bf_index
@@ -2156,13 +2119,13 @@ _bfd_coff_link_input_bfd (struct coff_fi
 			      pos = obj_sym_filepos (output_bfd);
 			      pos += flaginfo->last_bf_index * osymesz;
 			      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-				  || (bfd_bwrite (outsym, osymesz, output_bfd)
+				  || (bfd_write (outsym, osymesz, output_bfd)
 				      != osymesz))
-				return FALSE;
+				return false;
 			    }
 			}
 
-		      if (auxp->x_sym.x_fcnary.x_fcn.x_endndx.l != 0)
+		      if (auxp->x_sym.x_fcnary.x_fcn.x_endndx.u32 != 0)
 			flaginfo->last_bf_index = -1;
 		      else
 			{
@@ -2204,7 +2167,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  bfd_byte *eline;
 	  bfd_byte *elineend;
 	  bfd_byte *oeline;
-	  bfd_boolean skipping;
+	  bool skipping;
 	  file_ptr pos;
 	  bfd_size_type amt;
 
@@ -2222,15 +2185,15 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	    continue;
 
 	  if (bfd_seek (input_bfd, o->line_filepos, SEEK_SET) != 0
-	      || bfd_bread (flaginfo->linenos, linesz * o->lineno_count,
+	      || bfd_read (flaginfo->linenos, linesz * o->lineno_count,
 			   input_bfd) != linesz * o->lineno_count)
-	    return FALSE;
+	    return false;
 
 	  offset = o->output_section->vma + o->output_offset - o->vma;
 	  eline = flaginfo->linenos;
 	  oeline = flaginfo->linenos;
 	  elineend = eline + linesz * o->lineno_count;
-	  skipping = FALSE;
+	  skipping = false;
 	  for (; eline < elineend; eline += linesz)
 	    {
 	      struct internal_lineno iline;
@@ -2256,7 +2219,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 			 with symbol #0) will fail.  We can't regain
 			 the space in the output file, but at least
 			 they're dense.  */
-		      skipping = TRUE;
+		      skipping = true;
 		    }
 		  else
 		    {
@@ -2295,7 +2258,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 						 is.n_numaux, auxptr);
 			}
 
-		      skipping = FALSE;
+		      skipping = false;
 		    }
 
 		  iline.l_addr.l_symndx = indx;
@@ -2312,8 +2275,8 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  pos += o->output_section->lineno_count * linesz;
 	  amt = oeline - flaginfo->linenos;
 	  if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-	      || bfd_bwrite (flaginfo->linenos, amt, output_bfd) != amt)
-	    return FALSE;
+	      || bfd_write (flaginfo->linenos, amt, output_bfd) != amt)
+	    return false;
 
 	  o->output_section->lineno_count += amt / linesz;
 	}
@@ -2342,8 +2305,8 @@ _bfd_coff_link_input_bfd (struct coff_fi
       pos = obj_sym_filepos (output_bfd) + syment_base * osymesz;
       amt = outsym - flaginfo->outsyms;
       if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-	  || bfd_bwrite (flaginfo->outsyms, amt, output_bfd) != amt)
-	return FALSE;
+	  || bfd_write (flaginfo->outsyms, amt, output_bfd) != amt)
+	return false;
 
       BFD_ASSERT ((obj_raw_syment_count (output_bfd)
 		   + (outsym - flaginfo->outsyms) / osymesz)
@@ -2377,7 +2340,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		(_("%pB: relocs in section `%pA', but it has no contents"),
 		 input_bfd, o);
 	      bfd_set_error (bfd_error_no_contents);
-	      return FALSE;
+	      return false;
 	    }
 
 	  continue;
@@ -2390,7 +2353,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	{
 	  contents = flaginfo->contents;
 	  if (! bfd_get_full_section_contents (input_bfd, o, &contents))
-	    return FALSE;
+	    return false;
 	}
 
       if ((o->flags & SEC_RELOC) != 0)
@@ -2402,7 +2365,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  /* Read in the relocs.  */
 	  target_index = o->output_section->target_index;
 	  internal_relocs = (_bfd_coff_read_internal_relocs
-			     (input_bfd, o, FALSE, flaginfo->external_relocs,
+			     (input_bfd, o, false, flaginfo->external_relocs,
 			      bfd_link_relocatable (flaginfo->info),
 			      (bfd_link_relocatable (flaginfo->info)
 			       ? (flaginfo->section_info[target_index].relocs
@@ -2410,7 +2373,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 			       : flaginfo->internal_relocs)));
 	  if (internal_relocs == NULL
 	      && o->reloc_count > 0)
-	    return FALSE;
+	    return false;
 
 	  /* Run through the relocs looking for relocs against symbols
 	     coming from discarded sections and complain about them.  */
@@ -2450,7 +2413,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 					   internal_relocs,
 					   flaginfo->internal_syms,
 					   flaginfo->sec_ptrs))
-	    return FALSE;
+	    return false;
 
 	  if (bfd_link_relocatable (flaginfo->info))
 	    {
@@ -2466,7 +2429,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	      for (; irel < irelend; irel++, rel_hash++)
 		{
 		  struct coff_link_hash_entry *h;
-		  bfd_boolean adjusted;
+		  bool adjusted;
 
 		  *rel_hash = NULL;
 
@@ -2481,7 +2444,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		      if (! (*adjust_symndx) (output_bfd, flaginfo->info,
 					      input_bfd, o, irel,
 					      &adjusted))
-			return FALSE;
+			return false;
 		      if (adjusted)
 			continue;
 		    }
@@ -2526,7 +2489,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 			  name = (_bfd_coff_internal_syment_name
 				  (input_bfd, is, buf));
 			  if (name == NULL)
-			    return FALSE;
+			    return false;
 
 			  (*flaginfo->info->callbacks->unattached_reloc)
 			    (flaginfo->info, name, input_bfd, o, irel->r_vaddr);
@@ -2545,27 +2508,27 @@ _bfd_coff_link_input_bfd (struct coff_fi
 			  * bfd_octets_per_byte (output_bfd, o));
 	  if (! bfd_set_section_contents (output_bfd, o->output_section,
 					  contents, loc, o->size))
-	    return FALSE;
+	    return false;
 	}
       else
 	{
 	  if (! (_bfd_write_section_stabs
 		 (output_bfd, &coff_hash_table (flaginfo->info)->stab_info,
 		  o, &secdata->stab_info, contents)))
-	    return FALSE;
+	    return false;
 	}
     }
 
   if (! flaginfo->info->keep_memory
       && ! _bfd_coff_free_symbols (input_bfd))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Write out a global symbol.  Called via bfd_hash_traverse.  */
 
-bfd_boolean
+bool
 _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
 {
   struct coff_link_hash_entry *h = (struct coff_link_hash_entry *) bh;
@@ -2582,19 +2545,19 @@ _bfd_coff_write_global_sym (struct bfd_h
     {
       h = (struct coff_link_hash_entry *) h->root.u.i.link;
       if (h->root.type == bfd_link_hash_new)
-	return TRUE;
+	return true;
     }
 
   if (h->indx >= 0)
-    return TRUE;
+    return true;
 
   if (h->indx != -2
       && (flaginfo->info->strip == strip_all
 	  || (flaginfo->info->strip == strip_some
 	      && (bfd_hash_lookup (flaginfo->info->keep_hash,
-				   h->root.root.string, FALSE, FALSE)
+				   h->root.root.string, false, false)
 		  == NULL))))
-    return TRUE;
+    return true;
 
   switch (h->root.type)
     {
@@ -2602,9 +2565,12 @@ _bfd_coff_write_global_sym (struct bfd_h
     case bfd_link_hash_new:
     case bfd_link_hash_warning:
       abort ();
-      return FALSE;
+      return false;
 
     case bfd_link_hash_undefined:
+      if (h->indx == -3)
+	return true;
+      /* Fall through.  */
     case bfd_link_hash_undefweak:
       isym.n_scnum = N_UNDEF;
       isym.n_value = 0;
@@ -2624,6 +2590,17 @@ _bfd_coff_write_global_sym (struct bfd_h
 			+ h->root.u.def.section->output_offset);
 	if (! obj_pe (flaginfo->output_bfd))
 	  isym.n_value += sec->vma;
+#ifdef BFD64
+	if (isym.n_value > (bfd_vma) 0xffffffff)
+	  {
+	    if (! h->root.linker_def)
+	      _bfd_error_handler
+		(_("%pB: stripping non-representable symbol '%s' "
+		   "(value 0x%" PRIx64 ")"),
+		 output_bfd, h->root.root.string, isym.n_value);
+	    return true;
+	  }
+#endif
       }
       break;
 
@@ -2634,25 +2611,25 @@ _bfd_coff_write_global_sym (struct bfd_h
 
     case bfd_link_hash_indirect:
       /* Just ignore these.  They can't be handled anyhow.  */
-      return TRUE;
+      return true;
     }
 
   if (strlen (h->root.root.string) <= SYMNMLEN)
     strncpy (isym._n._n_name, h->root.root.string, SYMNMLEN);
   else
     {
-      bfd_boolean hash;
+      bool hash;
       bfd_size_type indx;
 
-      hash = TRUE;
+      hash = true;
       if (flaginfo->info->traditional_format)
-	hash = FALSE;
+	hash = false;
       indx = _bfd_stringtab_add (flaginfo->strtab, h->root.root.string, hash,
-				 FALSE);
+				 false);
       if (indx == (bfd_size_type) -1)
 	{
-	  flaginfo->failed = TRUE;
-	  return FALSE;
+	  flaginfo->failed = true;
+	  return false;
 	}
       isym._n._n_n._n_zeroes = 0;
       isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
@@ -2671,7 +2648,7 @@ _bfd_coff_write_global_sym (struct bfd_h
   if (flaginfo->global_to_static)
     {
       if (! IS_EXTERNAL (output_bfd, isym))
-	return TRUE;
+	return true;
 
       isym.n_sclass = C_STAT;
     }
@@ -2693,10 +2670,10 @@ _bfd_coff_write_global_sym (struct bfd_h
   pos = obj_sym_filepos (output_bfd);
   pos += obj_raw_syment_count (output_bfd) * symesz;
   if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-      || bfd_bwrite (flaginfo->outsyms, symesz, output_bfd) != symesz)
+      || bfd_write (flaginfo->outsyms, symesz, output_bfd) != symesz)
     {
-      flaginfo->failed = TRUE;
-      return FALSE;
+      flaginfo->failed = true;
+      return false;
     }
 
   h->indx = obj_raw_syment_count (output_bfd);
@@ -2758,27 +2735,27 @@ _bfd_coff_write_global_sym (struct bfd_h
       bfd_coff_swap_aux_out (output_bfd, auxp, isym.n_type,
 			     isym.n_sclass, (int) i, isym.n_numaux,
 			     flaginfo->outsyms);
-      if (bfd_bwrite (flaginfo->outsyms, symesz, output_bfd) != symesz)
+      if (bfd_write (flaginfo->outsyms, symesz, output_bfd) != symesz)
 	{
-	  flaginfo->failed = TRUE;
-	  return FALSE;
+	  flaginfo->failed = true;
+	  return false;
 	}
       ++obj_raw_syment_count (output_bfd);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write out task global symbols, converting them to statics.  Called
    via coff_link_hash_traverse.  Calls bfd_coff_write_global_sym to do
    the dirty work, if the symbol we are processing needs conversion.  */
 
-bfd_boolean
+bool
 _bfd_coff_write_task_globals (struct coff_link_hash_entry *h, void *data)
 {
   struct coff_final_link_info *flaginfo = (struct coff_final_link_info *) data;
-  bfd_boolean rtnval = TRUE;
-  bfd_boolean save_global_to_static;
+  bool rtnval = true;
+  bool save_global_to_static;
 
   if (h->root.type == bfd_link_hash_warning)
     h = (struct coff_link_hash_entry *) h->root.u.i.link;
@@ -2790,7 +2767,7 @@ _bfd_coff_write_task_globals (struct cof
 	case bfd_link_hash_defined:
 	case bfd_link_hash_defweak:
 	  save_global_to_static = flaginfo->global_to_static;
-	  flaginfo->global_to_static = TRUE;
+	  flaginfo->global_to_static = true;
 	  rtnval = _bfd_coff_write_global_sym (&h->root.root, data);
 	  flaginfo->global_to_static = save_global_to_static;
 	  break;
@@ -2803,7 +2780,7 @@ _bfd_coff_write_task_globals (struct cof
 
 /* Handle a link order which is supposed to generate a reloc.  */
 
-bfd_boolean
+bool
 _bfd_coff_reloc_link_order (bfd *output_bfd,
 			    struct coff_final_link_info *flaginfo,
 			    asection *output_section,
@@ -2817,7 +2794,7 @@ _bfd_coff_reloc_link_order (bfd *output_
   if (howto == NULL)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   if (link_order->u.reloc.p->addend != 0)
@@ -2825,13 +2802,13 @@ _bfd_coff_reloc_link_order (bfd *output_
       bfd_size_type size;
       bfd_byte *buf;
       bfd_reloc_status_type rstat;
-      bfd_boolean ok;
+      bool ok;
       file_ptr loc;
 
       size = bfd_get_reloc_size (howto);
       buf = (bfd_byte *) bfd_zmalloc (size);
       if (buf == NULL && size != 0)
-	return FALSE;
+	return false;
 
       rstat = _bfd_relocate_contents (howto, output_bfd,
 				      (bfd_vma) link_order->u.reloc.p->addend,
@@ -2859,7 +2836,7 @@ _bfd_coff_reloc_link_order (bfd *output_
 				     loc, size);
       free (buf);
       if (! ok)
-	return FALSE;
+	return false;
     }
 
   /* Store the reloc information in the right place.  It will get
@@ -2891,7 +2868,7 @@ _bfd_coff_reloc_link_order (bfd *output_
       h = ((struct coff_link_hash_entry *)
 	   bfd_wrapped_link_hash_lookup (output_bfd, flaginfo->info,
 					 link_order->u.reloc.p->u.name,
-					 FALSE, FALSE, TRUE));
+					 false, false, true));
       if (h != NULL)
 	{
 	  if (h->indx >= 0)
@@ -2923,13 +2900,13 @@ _bfd_coff_reloc_link_order (bfd *output_
   /* FIXME: What is the right value for r_offset?  Is zero OK?  */
   ++output_section->reloc_count;
 
-  return TRUE;
+  return true;
 }
 
 /* A basic reloc handling routine which may be used by processors with
    simple relocs.  */
 
-bfd_boolean
+bool
 _bfd_coff_generic_relocate_section (bfd *output_bfd,
 				    struct bfd_link_info *info,
 				    bfd *input_bfd,
@@ -2968,7 +2945,7 @@ _bfd_coff_generic_relocate_section (bfd
 	  _bfd_error_handler
 	    /* xgettext: c-format */
 	    (_("%pB: illegal symbol index %ld in relocs"), input_bfd, symndx);
-	  return FALSE;
+	  return false;
 	}
       else
 	{
@@ -2988,7 +2965,7 @@ _bfd_coff_generic_relocate_section (bfd
       howto = bfd_coff_rtype_to_howto (input_bfd, input_section, rel, h,
 				       sym, &addend);
       if (howto == NULL)
-	return FALSE;
+	return false;
 
       /* If we are doing a relocatable link, then we can just ignore
 	 a PC relative reloc that is pcrel_offset.  It will already
@@ -3016,8 +2993,10 @@ _bfd_coff_generic_relocate_section (bfd
 	      sec = sections[symndx];
 
 	      /* PR 19623: Relocations against symbols in
-		 the absolute sections should ignored.  */
-	      if (bfd_is_abs_section (sec))
+		 the absolute sections should ignored.
+		 PR 29807: Also ignore relocs against file symbols or
+		 other such nonsense in fuzzed objects.  */
+	      if (sec == NULL || bfd_is_abs_section (sec))
 		continue;
 
 	      val = (sec->output_section->vma
@@ -3030,10 +3009,11 @@ _bfd_coff_generic_relocate_section (bfd
       else
 	{
 	  if (h->root.type == bfd_link_hash_defined
+	      /* Defined weak symbols are a GNU extension.  */
 	      || h->root.type == bfd_link_hash_defweak)
 	    {
-	      /* Defined weak symbols are a GNU extension. */
 	      sec = h->root.u.def.section;
+	      BFD_ASSERT (sec->output_section != NULL);
 	      val = (h->root.u.def.value
 		     + sec->output_section->vma
 		     + sec->output_offset);
@@ -3054,8 +3034,8 @@ _bfd_coff_generic_relocate_section (bfd
 		     external causes the library member to be linked.
 		     See also linker.c: generic_link_check_archive_element. */
 		  struct coff_link_hash_entry *h2 =
-		    h->auxbfd->tdata.coff_obj_data->sym_hashes[
-		    h->aux->x_sym.x_tagndx.l];
+		    h->auxbfd->tdata.coff_obj_data->sym_hashes
+		    [h->aux->x_sym.x_tagndx.u32];
 
 		  if (!h2 || h2->root.type == bfd_link_hash_undefined)
 		    {
@@ -3075,9 +3055,15 @@ _bfd_coff_generic_relocate_section (bfd
 	    }
 
 	  else if (! bfd_link_relocatable (info))
-	    (*info->callbacks->undefined_symbol)
-	      (info, h->root.root.string, input_bfd, input_section,
-	       rel->r_vaddr - input_section->vma, TRUE);
+	    {
+	      (*info->callbacks->undefined_symbol)
+		(info, h->root.root.string, input_bfd, input_section,
+		 rel->r_vaddr - input_section->vma, true);
+	      /* Stop the linker from issueing errors about truncated relocs
+		 referencing this undefined symbol by giving it an address
+		 that should be in range.  */
+	      val = input_section->output_section->vma;
+	    }
 	}
 
       /* If the input section defining the symbol has been discarded
@@ -3104,13 +3090,13 @@ _bfd_coff_generic_relocate_section (bfd
 			   - input_section->vma
 			   + input_section->output_offset
 			   + input_section->output_section->vma);
-	      if (coff_data (output_bfd)->pe)
+	      if (obj_pe (output_bfd))
 		addr -= pe_data(output_bfd)->pe_opthdr.ImageBase;
 	      if (fwrite (&addr, 1, sizeof (bfd_vma), (FILE *) info->base_file)
 		  != sizeof (bfd_vma))
 		{
 		  bfd_set_error (bfd_error_system_call);
-		  return FALSE;
+		  return false;
 		}
 	    }
 	}
@@ -3131,9 +3117,23 @@ _bfd_coff_generic_relocate_section (bfd
 	    /* xgettext: c-format */
 	    (_("%pB: bad reloc address %#" PRIx64 " in section `%pA'"),
 	     input_bfd, (uint64_t) rel->r_vaddr, input_section);
-	  return FALSE;
+	  return false;
 	case bfd_reloc_overflow:
 	  {
+	    /* Ignore any weak undef symbols that may have overflowed.  Due to
+	       PR ld/19011 the base address is now in the upper 64-bit address
+	       range.  This means that when _bfd_final_link_relocate calculates
+	       the overlow it takes the distance between the symbol and the VMA
+	       which will now always overflow as 0 - 64-bit addr > 32-bit range
+	       of the relocation.  This ends up creating PR ld/26659.  */
+	    if (val == 0
+		/* Reverse the hack where 4 is subtracted from the addend.  */
+		&& (addend + 4) == 0
+		&& sym->n_sclass == C_NT_WEAK
+		&& bfd_coff_classify_symbol (output_bfd, sym)
+		     == COFF_SYMBOL_UNDEFINED)
+	      break;
+
 	    const char *name;
 	    char buf[SYMNMLEN + 1];
 
@@ -3145,7 +3145,7 @@ _bfd_coff_generic_relocate_section (bfd
 	      {
 		name = _bfd_coff_internal_syment_name (input_bfd, sym, buf);
 		if (name == NULL)
-		  return FALSE;
+		  return false;
 	      }
 
 	    (*info->callbacks->reloc_overflow)
@@ -3155,5 +3155,6 @@ _bfd_coff_generic_relocate_section (bfd
 	  }
 	}
     }
-  return TRUE;
+
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-loongarch64.c ./bfd/coff-loongarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-loongarch64.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/coff-loongarch64.c	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,162 @@
+/* BFD back-end for LoongArch64 COFF files.
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+
+#ifndef COFF_WITH_peLoongArch64
+#define COFF_WITH_peLoongArch64
+#endif
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "coff/loongarch64.h"
+#include "coff/internal.h"
+#include "coff/pe.h"
+#include "libcoff.h"
+#include "libiberty.h"
+
+/* The page size is a guess based on ELF.  */
+
+#define COFF_PAGE_SIZE 0x4000
+
+/* All users of this file have bfd_octets_per_byte (abfd, sec) == 1.  */
+#define OCTETS_PER_BYTE(ABFD, SEC) 1
+
+#ifndef PCRELOFFSET
+#define PCRELOFFSET true
+#endif
+
+/* Currently we don't handle any relocations.  */
+static reloc_howto_type pe_loongarch64_std_reloc_howto[] =
+  {
+
+  };
+
+#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER  2
+
+#ifndef NUM_ELEM
+#define NUM_ELEM(a) ((sizeof (a)) / sizeof ((a)[0]))
+#endif
+
+#define NUM_RELOCS NUM_ELEM (pe_loongarch64_std_reloc_howto)
+
+#define RTYPE2HOWTO(cache_ptr, dst)             \
+  (cache_ptr)->howto = NULL
+
+#ifndef bfd_pe_print_pdata
+#define bfd_pe_print_pdata      NULL
+#endif
+
+/* Handle include/coff/loongarch64.h external_reloc.  */
+#define SWAP_IN_RELOC_OFFSET	H_GET_32
+#define SWAP_OUT_RELOC_OFFSET	H_PUT_32
+
+/* Return TRUE if this relocation should
+   appear in the output .reloc section.  */
+
+static bool
+in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
+	    reloc_howto_type * howto)
+{
+  return !howto->pc_relative;
+}
+
+#include "coffcode.h"
+
+/* Target vectors.  */
+const bfd_target
+#ifdef TARGET_SYM
+  TARGET_SYM =
+#else
+  loongarch64_pei_vec =
+#endif
+{
+#ifdef TARGET_NAME
+  TARGET_NAME,
+#else
+ "pei-loongarch64",			/* Name.  */
+#endif
+  bfd_target_coff_flavour,
+  BFD_ENDIAN_LITTLE,		/* Data byte order is little.  */
+  BFD_ENDIAN_LITTLE,		/* Header byte order is little.  */
+
+  (HAS_RELOC | EXEC_P		/* Object flags.  */
+   | HAS_LINENO | HAS_DEBUG
+   | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
+
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags.  */
+#if defined(COFF_WITH_PE)
+   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
+#endif
+   | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
+
+#ifdef TARGET_UNDERSCORE
+  TARGET_UNDERSCORE,		/* Leading underscore.  */
+#else
+  0,				/* Leading underscore.  */
+#endif
+  '/',				/* Ar_pad_char.  */
+  15,				/* Ar_max_namelen.  */
+  0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
+
+     /* Data conversion functions.  */
+     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data.  */
+     /* Header conversion functions.  */
+     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs.  */
+
+  /* Note that we allow an object file to be treated as a core file as well.  */
+  {				/* bfd_check_format.  */
+    _bfd_dummy_target,
+    coff_object_p,
+    bfd_generic_archive_p,
+    coff_object_p
+  },
+  {				/* bfd_set_format.  */
+    _bfd_bool_bfd_false_error,
+    coff_mkobject,
+    _bfd_generic_mkarchive,
+    _bfd_bool_bfd_false_error
+  },
+  {				/* bfd_write_contents.  */
+    _bfd_bool_bfd_false_error,
+    coff_write_object_contents,
+    _bfd_write_archive_contents,
+    _bfd_bool_bfd_false_error
+  },
+
+  BFD_JUMP_TABLE_GENERIC (coff),
+  BFD_JUMP_TABLE_COPY (coff),
+  BFD_JUMP_TABLE_CORE (_bfd_nocore),
+  BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
+  BFD_JUMP_TABLE_SYMBOLS (coff),
+  BFD_JUMP_TABLE_RELOCS (coff),
+  BFD_JUMP_TABLE_WRITE (coff),
+  BFD_JUMP_TABLE_LINK (coff),
+  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+  NULL,
+
+  COFF_SWAP_TABLE
+};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-mcore.c ./bfd/coff-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-mcore.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-mcore.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Motorola MCore COFF/PE
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -37,7 +37,7 @@
 
 /* This file is compiled more than once, but we only compile the
    final_link routine once.  */
-extern bfd_boolean mcore_bfd_coff_final_link
+extern bool mcore_bfd_coff_final_link
   (bfd *, struct bfd_link_info *);
 static bfd_reloc_status_type mcore_coff_unsupported_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
@@ -61,94 +61,94 @@ static reloc_howto_type mcore_coff_howto
   /* Unused: */
   HOWTO (IMAGE_REL_MCORE_ABSOLUTE,/* type */
 	 0,			 /* rightshift */
-	 0,			 /* size (0 = byte, 1 = short, 2 = long) */
+	 0,			 /* size */
 	 0,			 /* bitsize */
-	 FALSE,			 /* pc_relative */
+	 false,			 /* pc_relative */
 	 0,			 /* bitpos */
 	 complain_overflow_dont, /* dont complain_on_overflow */
 	 NULL,			 /* special_function */
 	 "ABSOLUTE",		 /* name */
-	 FALSE,			 /* partial_inplace */
+	 false,			 /* partial_inplace */
 	 0x00,			 /* src_mask */
 	 0x00,			 /* dst_mask */
-	 FALSE),		 /* pcrel_offset */
+	 false),		 /* pcrel_offset */
 
   HOWTO (IMAGE_REL_MCORE_ADDR32,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "ADDR32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 8 bits + 2 zero bits; jmpi/jsri/lrw instructions.
      Should not appear in object files.  */
   HOWTO (IMAGE_REL_MCORE_PCREL_IMM8BY4,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mcore_coff_unsupported_reloc, /* special_function */
 	 "IMM8BY4",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* bsr/bt/bf/br instructions; 11 bits + 1 zero bit
      Span 2k instructions == 4k bytes.
      Only useful pieces at the relocated address are the opcode (5 bits) */
   HOWTO (IMAGE_REL_MCORE_PCREL_IMM11BY2,/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 11,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "IMM11BY2",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x7ff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 4 bits + 1 zero bit; 'loopt' instruction only; unsupported.  */
   HOWTO (IMAGE_REL_MCORE_PCREL_IMM4BY2,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 4,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mcore_coff_unsupported_reloc, /* special_function */
 	 "IMM4BY2",		 /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 32-bit pc-relative. Eventually this will help support PIC code.  */
   HOWTO (IMAGE_REL_MCORE_PCREL_32,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "PCREL_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Like PCREL_IMM11BY2, this relocation indicates that there is a
      'jsri' at the specified address. There is a separate relocation
@@ -159,31 +159,31 @@ static reloc_howto_type mcore_coff_howto
      is a relocation that we are allowed to safely ignore.  */
   HOWTO (IMAGE_REL_MCORE_PCREL_JSR_IMM11BY2,/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 11,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "JSR_IMM11BY2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x7ff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (IMAGE_REL_MCORE_RVA,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "MCORE_RVA",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE)			/* pcrel_offset */
+	 true)			/* pcrel_offset */
 };
 
 /* Extend the coff_link_hash_table structure with a few M*Core specific fields.
@@ -209,7 +209,7 @@ mcore_hash_table;
 
 /* Add an entry to the base file.  */
 
-static bfd_boolean
+static bool
 mcore_emit_base_file_entry (struct bfd_link_info *info,
 			    bfd *output_bfd,
 			    asection *input_section,
@@ -220,14 +220,14 @@ mcore_emit_base_file_entry (struct bfd_l
 		 + input_section->output_offset
 		 + input_section->output_section->vma;
 
-  if (coff_data (output_bfd)->pe)
+  if (obj_pe (output_bfd))
      addr -= pe_data (output_bfd)->pe_opthdr.ImageBase;
 
   if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1)
-    return TRUE;
+    return true;
 
   bfd_set_error (bfd_error_system_call);
-  return FALSE;
+  return false;
 }
 
 static bfd_reloc_status_type
@@ -336,14 +336,14 @@ coff_mcore_rtype_to_howto (bfd * abfd AT
 /* Return TRUE if this relocation should appear in the output .reloc section.
    This function is referenced in pe_mkobject in peicode.h.  */
 
-static bfd_boolean
+static bool
 in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED, reloc_howto_type * howto)
 {
   return ! howto->pc_relative && howto->type != IMAGE_REL_MCORE_RVA;
 }
 
 /* The reloc processing routine for the optimized COFF linker.  */
-static bfd_boolean
+static bool
 coff_mcore_relocate_section (bfd * output_bfd,
 			     struct bfd_link_info * info,
 			     bfd * input_bfd,
@@ -360,7 +360,7 @@ coff_mcore_relocate_section (bfd * outpu
      thing.  The caller will take care of adjusting the reloc
      addresses and symbol indices.  */
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* Check if we have the same endianness */
   if (   input_bfd->xvec->byteorder != output_bfd->xvec->byteorder
@@ -374,7 +374,7 @@ coff_mcore_relocate_section (bfd * outpu
 	 bfd_big_endian (output_bfd) ? _("big endian") : _("little endian"));
 
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   rel = relocs;
@@ -392,6 +392,7 @@ coff_mcore_relocate_section (bfd * outpu
       reloc_howto_type *	     howto = NULL;
       struct coff_link_hash_entry *  h;
       const char *		     my_name;
+      char buf[SYMNMLEN + 1];
 
       symndx = rel->r_symndx;
       loc = contents + rel->r_vaddr - input_section->vma;
@@ -413,7 +414,7 @@ coff_mcore_relocate_section (bfd * outpu
       howto = bfd_coff_rtype_to_howto (input_bfd, input_section, rel, h,
 				       sym, & addend);
       if (howto == NULL)
-	return FALSE;
+	return false;
 
       val = 0;
 
@@ -433,11 +434,15 @@ coff_mcore_relocate_section (bfd * outpu
 		my_name = "*unknown*";
 	      else if (   sym->_n._n_n._n_zeroes == 0
 		       && sym->_n._n_n._n_offset != 0)
-		my_name = obj_coff_strings (input_bfd) + sym->_n._n_n._n_offset;
+		{
+		  if (sym->_n._n_n._n_offset < obj_coff_strings_len (input_bfd))
+		    my_name = (obj_coff_strings (input_bfd)
+			       + sym->_n._n_n._n_offset);
+		  else
+		    my_name = "?";
+		}
 	      else
 		{
-		  static char buf [SYMNMLEN + 1];
-
 		  strncpy (buf, sym->_n._n_name, SYMNMLEN);
 		  buf[SYMNMLEN] = '\0';
 		  my_name = buf;
@@ -458,7 +463,7 @@ coff_mcore_relocate_section (bfd * outpu
 	  else
 	    (*info->callbacks->undefined_symbol)
 	      (info, h->root.root.string, input_bfd, input_section,
-	       rel->r_vaddr - input_section->vma, TRUE);
+	       rel->r_vaddr - input_section->vma, true);
 
 	  my_name = h->root.root.string;
 	}
@@ -473,7 +478,7 @@ coff_mcore_relocate_section (bfd * outpu
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      input_bfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 
 	case IMAGE_REL_MCORE_ABSOLUTE:
 	  _bfd_error_handler
@@ -509,7 +514,7 @@ coff_mcore_relocate_section (bfd * outpu
 	  && pe_data (output_bfd)->in_reloc_p (output_bfd, howto)
 	  && !mcore_emit_base_file_entry (info, output_bfd, input_section,
 					  rel->r_vaddr))
-	return FALSE;
+	return false;
 
       switch (rstat)
 	{
@@ -527,7 +532,7 @@ coff_mcore_relocate_section (bfd * outpu
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Tailor coffcode.h -- macro heaven.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-mips.c ./bfd/coff-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-mips.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-mips.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for MIPS Extended-Coff files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Original version by Per Bothner.
    Full support added by Ian Lance Taylor, ian@cygnus.com.
 
@@ -84,54 +84,54 @@ static reloc_howto_type mips_howto_table
      bfd_perform_relocation to do nothing.  */
   HOWTO (MIPS_R_IGNORE,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "IGNORE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit reference to a symbol, normally from a data section.  */
   HOWTO (MIPS_R_REFHALF,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mips_generic_reloc,	/* special_function */
 	 "REFHALF",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit reference to a symbol, normally from a data section.  */
   HOWTO (MIPS_R_REFWORD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mips_generic_reloc,	/* special_function */
 	 "REFWORD",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 26 bit absolute jump address.  */
   HOWTO (MIPS_R_JMPADDR,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -139,73 +139,73 @@ static reloc_howto_type mips_howto_table
 				   bits must match the PC.  */
 	 mips_generic_reloc,	/* special_function */
 	 "JMPADDR",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x3ffffff,		/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The high 16 bits of a symbol value.  Handled by the function
      mips_refhi_reloc.  */
   HOWTO (MIPS_R_REFHI,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mips_refhi_reloc,	/* special_function */
 	 "REFHI",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The low 16 bits of a symbol value.  */
   HOWTO (MIPS_R_REFLO,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 mips_reflo_reloc,	/* special_function */
 	 "REFLO",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A reference to an offset from the gp register.  Handled by the
      function mips_gprel_reloc.  */
   HOWTO (MIPS_R_GPREL,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_gprel_reloc,	/* special_function */
 	 "GPREL",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A reference to a literal using an offset from the gp register.
      Handled by the function mips_gprel_reloc.  */
   HOWTO (MIPS_R_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_gprel_reloc,	/* special_function */
 	 "LITERAL",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (8),
   EMPTY_HOWTO (9),
@@ -217,17 +217,17 @@ static reloc_howto_type mips_howto_table
      be removed.  (It used to be used for embedded-PIC support.)  */
   HOWTO (MIPS_R_PCREL16,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_generic_reloc,	/* special_function */
 	 "PCREL16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 #define MIPS_HOWTO_COUNT \
@@ -235,7 +235,7 @@ static reloc_howto_type mips_howto_table
 
 /* See whether the magic number matches.  */
 
-static bfd_boolean
+static bool
 mips_ecoff_bad_format_hook (bfd * abfd, void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
@@ -244,7 +244,7 @@ mips_ecoff_bad_format_hook (bfd * abfd,
     {
     case MIPS_MAGIC_1:
       /* I don't know what endianness this implies.  */
-      return TRUE;
+      return true;
 
     case MIPS_MAGIC_BIG:
     case MIPS_MAGIC_BIG2:
@@ -257,7 +257,7 @@ mips_ecoff_bad_format_hook (bfd * abfd,
       return bfd_little_endian (abfd);
 
     default:
-      return FALSE;
+      return false;
     }
 }
 
@@ -351,7 +351,14 @@ mips_adjust_reloc_in (bfd *abfd,
 		      arelent *rptr)
 {
   if (intern->r_type > MIPS_R_PCREL16)
-    abort ();
+    {
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+			  abfd, intern->r_type);
+      bfd_set_error (bfd_error_bad_value);
+      rptr->howto  = NULL;
+      return;
+    }
 
   if (! intern->r_extern
       && (intern->r_type == MIPS_R_GPREL
@@ -416,19 +423,8 @@ mips_generic_reloc (bfd *abfd ATTRIBUTE_
    reloc.  This extension permits gcc to output the HI and LO relocs
    itself.  */
 
-struct mips_hi
-{
-  struct mips_hi *next;
-  bfd_byte *addr;
-  bfd_vma addend;
-};
-
-/* FIXME: This should not be a static variable.  */
-
-static struct mips_hi *mips_refhi_list;
-
 static bfd_reloc_status_type
-mips_refhi_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+mips_refhi_reloc (bfd *abfd,
 		  arelent *reloc_entry,
 		  asymbol *symbol,
 		  void * data,
@@ -473,8 +469,8 @@ mips_refhi_reloc (bfd *abfd ATTRIBUTE_UN
     return bfd_reloc_outofrange;
   n->addr = (bfd_byte *) data + reloc_entry->address;
   n->addend = relocation;
-  n->next = mips_refhi_list;
-  mips_refhi_list = n;
+  n->next = ecoff_data (abfd)->mips_refhi_list;
+  ecoff_data (abfd)->mips_refhi_list = n;
 
   if (output_bfd != (bfd *) NULL)
     reloc_entry->address += input_section->output_offset;
@@ -495,11 +491,11 @@ mips_reflo_reloc (bfd *abfd,
 		  bfd *output_bfd,
 		  char **error_message)
 {
-  if (mips_refhi_list != NULL)
+  if (ecoff_data (abfd)->mips_refhi_list != NULL)
     {
       struct mips_hi *l;
 
-      l = mips_refhi_list;
+      l = ecoff_data (abfd)->mips_refhi_list;
       while (l != NULL)
 	{
 	  unsigned long insn;
@@ -542,7 +538,7 @@ mips_reflo_reloc (bfd *abfd,
 	  l = next;
 	}
 
-      mips_refhi_list = NULL;
+      ecoff_data (abfd)->mips_refhi_list = NULL;
     }
 
   /* Now do the REFLO reloc in the usual way.  */
@@ -562,7 +558,7 @@ mips_gprel_reloc (bfd *abfd ATTRIBUTE_UN
 		  bfd *output_bfd,
 		  char **error_message ATTRIBUTE_UNUSED)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_vma gp;
   bfd_vma relocation;
   unsigned long val;
@@ -581,16 +577,15 @@ mips_gprel_reloc (bfd *abfd ATTRIBUTE_UN
     }
 
   if (output_bfd != (bfd *) NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
+      if (output_bfd == NULL)
+	return bfd_reloc_undefined;
     }
 
-  if (bfd_is_und_section (symbol->section) && ! relocatable)
-    return bfd_reloc_undefined;
-
   /* We have to figure out the gp value, so that we can adjust the
      symbol value correctly.  We look up the symbol _gp in the output
      BFD.  If we can't find it, we're stuck.  We cache it in the ECOFF
@@ -792,7 +787,7 @@ mips_relocate_hi (struct internal_reloc
 
 /* Relocate a section while linking a MIPS ECOFF file.  */
 
-static bfd_boolean
+static bool
 mips_relocate_section (bfd *output_bfd,
 		       struct bfd_link_info *info,
 		       bfd *input_bfd,
@@ -803,11 +798,11 @@ mips_relocate_section (bfd *output_bfd,
   asection **symndx_to_section;
   struct ecoff_link_hash_entry **sym_hashes;
   bfd_vma gp;
-  bfd_boolean gp_undefined;
+  bool gp_undefined;
   struct external_reloc *ext_rel;
   struct external_reloc *ext_rel_end;
   unsigned int i;
-  bfd_boolean got_lo;
+  bool got_lo;
   struct internal_reloc lo_int_rel;
   bfd_size_type amt;
 
@@ -823,7 +818,7 @@ mips_relocate_section (bfd *output_bfd,
       amt = NUM_RELOC_SECTIONS * sizeof (asection *);
       symndx_to_section = (asection **) bfd_alloc (input_bfd, amt);
       if (!symndx_to_section)
-	return FALSE;
+	return false;
 
       symndx_to_section[RELOC_SECTION_NONE] = NULL;
       symndx_to_section[RELOC_SECTION_TEXT] =
@@ -858,18 +853,18 @@ mips_relocate_section (bfd *output_bfd,
 
   gp = _bfd_get_gp_value (output_bfd);
   if (gp == 0)
-    gp_undefined = TRUE;
+    gp_undefined = true;
   else
-    gp_undefined = FALSE;
+    gp_undefined = false;
 
-  got_lo = FALSE;
+  got_lo = false;
 
   ext_rel = (struct external_reloc *) external_relocs;
   ext_rel_end = ext_rel + input_section->reloc_count;
   for (i = 0; ext_rel < ext_rel_end; ext_rel++, i++)
     {
       struct internal_reloc int_rel;
-      bfd_boolean use_lo = FALSE;
+      bool use_lo = false;
       bfd_vma addend;
       reloc_howto_type *howto;
       struct ecoff_link_hash_entry *h = NULL;
@@ -882,7 +877,7 @@ mips_relocate_section (bfd *output_bfd,
       else
 	{
 	  int_rel = lo_int_rel;
-	  got_lo = FALSE;
+	  got_lo = false;
 	}
 
       BFD_ASSERT (int_rel.r_type
@@ -912,9 +907,9 @@ mips_relocate_section (bfd *output_bfd,
 	      && int_rel.r_extern == lo_int_rel.r_extern
 	      && int_rel.r_symndx == lo_int_rel.r_symndx)
 	    {
-	      use_lo = TRUE;
+	      use_lo = true;
 	      if (lo_ext_rel == ext_rel + 1)
-		got_lo = TRUE;
+		got_lo = true;
 	    }
 	}
 
@@ -956,7 +951,7 @@ mips_relocate_section (bfd *output_bfd,
 	      /* Only give the error once per link.  */
 	      gp = 4;
 	      _bfd_set_gp_value (output_bfd, gp);
-	      gp_undefined = FALSE;
+	      gp_undefined = false;
 	    }
 	  if (! int_rel.r_extern)
 	    {
@@ -1158,7 +1153,7 @@ mips_relocate_section (bfd *output_bfd,
 		{
 		  (*info->callbacks->undefined_symbol)
 		    (info, h->root.root.string, input_bfd, input_section,
-		     int_rel.r_vaddr - input_section->vma, TRUE);
+		     int_rel.r_vaddr - input_section->vma, true);
 		  relocation = 0;
 		}
 	    }
@@ -1236,7 +1231,7 @@ mips_relocate_section (bfd *output_bfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -1313,8 +1308,8 @@ static const struct ecoff_backend_data m
     mips_ecoff_swap_coff_reloc_out,
     mips_ecoff_swap_filehdr_out, mips_ecoff_swap_aouthdr_out,
     mips_ecoff_swap_scnhdr_out,
-    FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, TRUE,
-    ECOFF_NO_LONG_SECTION_NAMES, 4, FALSE, 2, 32768,
+    FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, true,
+    ECOFF_NO_LONG_SECTION_NAMES, 4, false, 2, 32768,
     mips_ecoff_swap_filehdr_in, mips_ecoff_swap_aouthdr_in,
     mips_ecoff_swap_scnhdr_in, NULL,
     mips_ecoff_bad_format_hook, _bfd_ecoff_set_arch_mach_hook,
@@ -1333,7 +1328,7 @@ static const struct ecoff_backend_data m
   /* TRUE if the .rdata section is part of the text segment, as on the
      Alpha.  FALSE if .rdata is part of the data segment, as on the
      MIPS.  */
-  FALSE,
+  false,
   /* Bitsize of constructor entries.  */
   32,
   /* Reloc to use for constructor entries.  */
@@ -1440,11 +1435,13 @@ const bfd_target mips_ecoff_le_vec =
    | HAS_LINENO | HAS_DEBUG
    | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
 
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE
+   | SEC_DATA | SEC_SMALL_DATA),
   0,				/* leading underscore */
   ' ',				/* ar_pad_char */
   15,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
@@ -1497,11 +1494,13 @@ const bfd_target mips_ecoff_be_vec =
    | HAS_LINENO | HAS_DEBUG
    | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
 
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE
+   | SEC_DATA | SEC_SMALL_DATA),
   0,				/* leading underscore */
   ' ',				/* ar_pad_char */
   15,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
      bfd_getb32, bfd_getb_signed_32, bfd_putb32,
      bfd_getb16, bfd_getb_signed_16, bfd_putb16,
@@ -1554,11 +1553,13 @@ const bfd_target mips_ecoff_bele_vec =
    | HAS_LINENO | HAS_DEBUG
    | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
 
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE
+   | SEC_DATA | SEC_SMALL_DATA),
   0,				/* leading underscore */
   ' ',				/* ar_pad_char */
   15,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-ppc.c ./bfd/coff-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-ppc.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-ppc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,2621 +0,0 @@
-/* BFD back-end for PowerPC Microsoft Portable Executable files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
-
-   Original version pieced together by Kim Knuttila (krk@cygnus.com)
-
-   There is nothing new under the sun. This file draws a lot on other
-   coff files, in particular, those for the rs/6000, alpha, mips, and
-   intel backends, and the PE work for the arm.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, 51 Franklin Street - Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* Current State:
-   - objdump works
-   - relocs generated by gas
-   - ld will link files, but they do not run.
-   - dlltool will not produce correct output in some .reloc cases, and will
-     not produce the right glue code for dll function calls.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-#include "coff/powerpc.h"
-#include "coff/internal.h"
-
-#include "coff/pe.h"
-
-#ifdef BADMAG
-#undef BADMAG
-#endif
-
-#define BADMAG(x) PPCBADMAG(x)
-
-#include "libcoff.h"
-
-/* This file is compiled more than once, but we only compile the
-   final_link routine once.  */
-extern bfd_boolean ppc_bfd_coff_final_link (bfd *, struct bfd_link_info *);
-extern void dump_toc (void *);
-
-/* The toc is a set of bfd_vma fields. We use the fact that valid
-   addresses are even (i.e. the bit representing "1" is off) to allow
-   us to encode a little extra information in the field
-   - Unallocated addresses are initialized to 1.
-   - Allocated addresses are even numbers.
-   The first time we actually write a reference to the toc in the bfd,
-   we want to record that fact in a fixup file (if it is asked for), so
-   we keep track of whether or not an address has been written by marking
-   the low order bit with a "1" upon writing.  */
-
-#define SET_UNALLOCATED(x)  ((x) = 1)
-#define IS_UNALLOCATED(x)   ((x) == 1)
-
-#define IS_WRITTEN(x)       ((x) & 1)
-#define MARK_AS_WRITTEN(x)  ((x) |= 1)
-#define MAKE_ADDR_AGAIN(x)  ((x) &= ~1)
-
-/* Turn on this check if you suspect something amiss in the hash tables.  */
-#ifdef DEBUG_HASH
-
-/* Need a 7 char string for an eye catcher.  */
-#define EYE "krkjunk"
-
-#define HASH_CHECK_DCL char eye_catcher[8];
-#define HASH_CHECK_INIT(ret)      strcpy(ret->eye_catcher, EYE)
-#define HASH_CHECK(addr) \
- if (strcmp (addr->eye_catcher, EYE) != 0) \
-  { \
-    fprintf (stderr,\
-    /* xgettext: c-format */ \
-    _("File %s, line %d, Hash check failure, bad eye %8s\n"), \
-    __FILE__, __LINE__, addr->eye_catcher); \
-    abort (); \
- }
-
-#else
-
-#define HASH_CHECK_DCL
-#define HASH_CHECK_INIT(ret)
-#define HASH_CHECK(addr)
-
-#endif
-
-/* In order not to add an int to every hash table item for every coff
-   linker, we define our own hash table, derived from the coff one.  */
-
-/* PE linker hash table entries.  */
-
-struct ppc_coff_link_hash_entry
-{
-  struct coff_link_hash_entry root; /* First entry, as required.  */
-
-  /* As we wonder around the relocs, we'll keep the assigned toc_offset
-     here.  */
-  bfd_vma toc_offset;		    /* Our addition, as required.  */
-  int symbol_is_glue;
-  unsigned long int glue_insn;
-
-  HASH_CHECK_DCL
-};
-
-/* PE linker hash table.  */
-
-struct ppc_coff_link_hash_table
-{
-  struct coff_link_hash_table root; /* First entry, as required.  */
-};
-
-/* Routine to create an entry in the link hash table.  */
-
-static struct bfd_hash_entry *
-ppc_coff_link_hash_newfunc (struct bfd_hash_entry * entry,
-			    struct bfd_hash_table * table,
-			    const char * string)
-{
-  struct ppc_coff_link_hash_entry *ret =
-    (struct ppc_coff_link_hash_entry *) entry;
-
-  /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
-  if (ret == (struct ppc_coff_link_hash_entry *) NULL)
-    ret = (struct ppc_coff_link_hash_entry *)
-      bfd_hash_allocate (table,
-			 sizeof (struct ppc_coff_link_hash_entry));
-
-  if (ret == (struct ppc_coff_link_hash_entry *) NULL)
-    return NULL;
-
-  /* Call the allocation method of the superclass.  */
-  ret = ((struct ppc_coff_link_hash_entry *)
-	 _bfd_coff_link_hash_newfunc ((struct bfd_hash_entry *) ret,
-				      table, string));
-
-  if (ret)
-    {
-      /* Initialize the local fields.  */
-      SET_UNALLOCATED (ret->toc_offset);
-      ret->symbol_is_glue = 0;
-      ret->glue_insn = 0;
-
-      HASH_CHECK_INIT (ret);
-    }
-
-  return (struct bfd_hash_entry *) ret;
-}
-
-/* Initialize a PE linker hash table.  */
-
-static bfd_boolean
-ppc_coff_link_hash_table_init (struct ppc_coff_link_hash_table *table,
-			       bfd *abfd,
-			       struct bfd_hash_entry *(*newfunc)
-				 (struct bfd_hash_entry *,
-				  struct bfd_hash_table *,
-				  const char *),
-			       unsigned int entsize)
-{
-  return _bfd_coff_link_hash_table_init (&table->root, abfd, newfunc, entsize);
-}
-
-/* Create a PE linker hash table.  */
-
-static struct bfd_link_hash_table *
-ppc_coff_link_hash_table_create (bfd *abfd)
-{
-  struct ppc_coff_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct ppc_coff_link_hash_table);
-
-  ret = (struct ppc_coff_link_hash_table *) bfd_malloc (amt);
-  if (ret == NULL)
-    return NULL;
-  if (!ppc_coff_link_hash_table_init (ret, abfd,
-				      ppc_coff_link_hash_newfunc,
-				      sizeof (struct ppc_coff_link_hash_entry)))
-    {
-      free (ret);
-      return (struct bfd_link_hash_table *) NULL;
-    }
-  return &ret->root.root;
-}
-
-/* Now, tailor coffcode.h to use our hash stuff.  */
-
-#define coff_bfd_link_hash_table_create ppc_coff_link_hash_table_create
-
-/* The nt loader points the toc register to &toc + 32768, in order to
-   use the complete range of a 16-bit displacement. We have to adjust
-   for this when we fix up loads displaced off the toc reg.  */
-#define TOC_LOAD_ADJUSTMENT (-32768)
-#define TOC_SECTION_NAME ".private.toc"
-
-/* The main body of code is in coffcode.h.  */
-
-#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (3)
-
-/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
-   from smaller values.  Start with zero, widen, *then* decrement.  */
-#define MINUS_ONE	(((bfd_vma)0) - 1)
-
-/* These should definitely go in a header file somewhere...  */
-
-/* NOP */
-#define IMAGE_REL_PPC_ABSOLUTE		0x0000
-
-/* 64-bit address */
-#define IMAGE_REL_PPC_ADDR64		0x0001
-
-/* 32-bit address */
-#define IMAGE_REL_PPC_ADDR32		0x0002
-
-/* 26-bit address, shifted left 2 (branch absolute) */
-#define IMAGE_REL_PPC_ADDR24		0x0003
-
-/* 16-bit address */
-#define IMAGE_REL_PPC_ADDR16		0x0004
-
-/* 16-bit address, shifted left 2 (load doubleword) */
-#define IMAGE_REL_PPC_ADDR14		0x0005
-
-/* 26-bit PC-relative offset, shifted left 2 (branch relative) */
-#define IMAGE_REL_PPC_REL24		0x0006
-
-/* 16-bit PC-relative offset, shifted left 2 (br cond relative) */
-#define IMAGE_REL_PPC_REL14		0x0007
-
-/* 16-bit offset from TOC base */
-#define IMAGE_REL_PPC_TOCREL16		0x0008
-
-/* 16-bit offset from TOC base, shifted left 2 (load doubleword) */
-#define IMAGE_REL_PPC_TOCREL14		0x0009
-
-/* 32-bit addr w/o image base */
-#define IMAGE_REL_PPC_ADDR32NB		0x000A
-
-/* va of containing section (as in an image sectionhdr) */
-#define IMAGE_REL_PPC_SECREL		0x000B
-
-/* sectionheader number */
-#define IMAGE_REL_PPC_SECTION		0x000C
-
-/* substitute TOC restore instruction iff symbol is glue code */
-#define IMAGE_REL_PPC_IFGLUE		0x000D
-
-/* symbol is glue code; virtual address is TOC restore instruction */
-#define IMAGE_REL_PPC_IMGLUE		0x000E
-
-/* va of containing section (limited to 16 bits) */
-#define IMAGE_REL_PPC_SECREL16		0x000F
-
-/* Stuff to handle immediate data when the number of bits in the
-   data is greater than the number of bits in the immediate field
-   We need to do (usually) 32 bit arithmetic on 16 bit chunks.  */
-#define IMAGE_REL_PPC_REFHI		0x0010
-#define IMAGE_REL_PPC_REFLO		0x0011
-#define IMAGE_REL_PPC_PAIR		0x0012
-
-/* This is essentially the same as tocrel16, with TOCDEFN assumed.  */
-#define IMAGE_REL_PPC_TOCREL16_DEFN	0x0013
-
-/* Flag bits in IMAGE_RELOCATION.TYPE.  */
-
-/* Subtract reloc value rather than adding it.  */
-#define IMAGE_REL_PPC_NEG		0x0100
-
-/* Fix branch prediction bit to predict branch taken.  */
-#define IMAGE_REL_PPC_BRTAKEN		0x0200
-
-/* Fix branch prediction bit to predict branch not taken.  */
-#define IMAGE_REL_PPC_BRNTAKEN		0x0400
-
-/* TOC slot defined in file (or, data in toc).  */
-#define IMAGE_REL_PPC_TOCDEFN		0x0800
-
-/* Masks to isolate above values in IMAGE_RELOCATION.Type.  */
-#define IMAGE_REL_PPC_TYPEMASK		0x00FF
-#define IMAGE_REL_PPC_FLAGMASK		0x0F00
-
-#define EXTRACT_TYPE(x)			((x) & IMAGE_REL_PPC_TYPEMASK)
-#define EXTRACT_FLAGS(x) ((x) & IMAGE_REL_PPC_FLAGMASK)
-#define EXTRACT_JUNK(x)	 \
-	   ((x) & ~(IMAGE_REL_PPC_TYPEMASK | IMAGE_REL_PPC_FLAGMASK))
-
-/* Static helper functions to make relocation work.  */
-/* (Work In Progress) */
-
-static bfd_reloc_status_type ppc_refhi_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc_pair_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc_toc16_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc_section_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc_secrel_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc_imglue_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-
-/* FIXME: It'll take a while to get through all of these. I only need a few to
-   get us started, so those I'll make sure work. Those marked FIXME are either
-   completely unverified or have a specific unknown marked in the comment.  */
-
-/* Relocation entries for Windows/NT on PowerPC.
-
-   From the document "" we find the following listed as used relocs:
-
-     ABSOLUTE	    : The noop
-     ADDR[64|32|16] : fields that hold addresses in data fields or the
-		      16 bit displacement field on a load/store.
-     ADDR[24|14]    : fields that hold addresses in branch and cond
-		      branches. These represent [26|16] bit addresses.
-		      The low order 2 bits are preserved.
-     REL[24|14]	    : branches relative to the Instruction Address
-		      register. These represent [26|16] bit addresses,
-		      as before. The instruction field will be zero, and
-		      the address of the SYM will be inserted at link time.
-     TOCREL16	    : 16 bit displacement field referring to a slot in
-		      toc.
-     TOCREL14	    : 16 bit displacement field, similar to REL14 or ADDR14.
-     ADDR32NB	    : 32 bit address relative to the virtual origin.
-		      (On the alpha, this is always a linker generated thunk)
-		      (i.e. 32bit addr relative to the image base)
-     SECREL	    : The value is relative to the start of the section
-		      containing the symbol.
-     SECTION	    : access to the header containing the item. Supports the
-		      codeview debugger.
-
-   In particular, note that the document does not indicate that the
-   relocations listed in the header file are used.  */
-
-
-static reloc_howto_type ppc_coff_howto_table[] =
-{
-  /* IMAGE_REL_PPC_ABSOLUTE 0x0000   NOP */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_ABSOLUTE, /* type */
-	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* dont complain_on_overflow */
-	 0,			/* special_function */
-	 "ABSOLUTE",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00,			/* src_mask */
-	 0x00,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_ADDR64 0x0001  64-bit address */
-  /* Unused: */
-  HOWTO(IMAGE_REL_PPC_ADDR64,	/* type */
-	0,			/* rightshift */
-	3,			/* size (0 = byte, 1 = short, 2 = long) */
-	64,			/* bitsize */
-	FALSE,			/* pc_relative */
-	0,			/* bitpos */
-	complain_overflow_bitfield, /* complain_on_overflow */
-	0,			/* special_function */
-	"ADDR64",		/* name */
-	TRUE,			/* partial_inplace */
-	MINUS_ONE,		/* src_mask */
-	MINUS_ONE,		/* dst_mask */
-	FALSE),			/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_ADDR32 0x0002  32-bit address */
-  /* Used: */
-  HOWTO (IMAGE_REL_PPC_ADDR32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "ADDR32",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_ADDR24 0x0003  26-bit address, shifted left 2 (branch absolute) */
-  /* the LI field is in bit 6 through bit 29 is 24 bits, + 2 for the shift */
-  /* Of course, That's the IBM approved bit numbering, which is not what */
-  /* anyone else uses.... The li field is in bit 2 thru 25 */
-  /* Used: */
-  HOWTO (IMAGE_REL_PPC_ADDR24,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "ADDR24",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x07fffffc,		/* src_mask */
-	 0x07fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_ADDR16 0x0004  16-bit address */
-  /* Used: */
-  HOWTO (IMAGE_REL_PPC_ADDR16,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "ADDR16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_ADDR14 0x0005 */
-  /*  16-bit address, shifted left 2 (load doubleword) */
-  /* FIXME: the mask is likely wrong, and the bit position may be as well */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_ADDR14,	/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "ADDR16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_REL24 0x0006 */
-  /*   26-bit PC-relative offset, shifted left 2 (branch relative) */
-  /* Used: */
-  HOWTO (IMAGE_REL_PPC_REL24,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "REL24",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x3fffffc,		/* src_mask */
-	 0x3fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_REL14 0x0007 */
-  /*   16-bit PC-relative offset, shifted left 2 (br cond relative) */
-  /* FIXME: the mask is likely wrong, and the bit position may be as well */
-  /* FIXME: how does it know how far to shift? */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_ADDR14,	/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "ADDR16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_TOCREL16 0x0008 */
-  /*   16-bit offset from TOC base */
-  /* Used: */
-  HOWTO (IMAGE_REL_PPC_TOCREL16,/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc_toc16_reloc,	/* special_function */
-	 "TOCREL16",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_TOCREL14 0x0009 */
-  /*   16-bit offset from TOC base, shifted left 2 (load doubleword) */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_TOCREL14,/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "TOCREL14",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_ADDR32NB 0x000A */
-  /*   32-bit addr w/ image base */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_ADDR32NB,/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "ADDR32NB",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_SECREL 0x000B */
-  /*   va of containing section (as in an image sectionhdr) */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_SECREL,/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc_secrel_reloc,	/* special_function */
-	 "SECREL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_SECTION 0x000C */
-  /*   sectionheader number */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_SECTION,/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc_section_reloc,	/* special_function */
-	 "SECTION",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_IFGLUE 0x000D */
-  /*   substitute TOC restore instruction iff symbol is glue code */
-  /* Used: */
-  HOWTO (IMAGE_REL_PPC_IFGLUE,/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "IFGLUE",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_IMGLUE 0x000E */
-  /*   symbol is glue code; virtual address is TOC restore instruction */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_IMGLUE,/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc_imglue_reloc,	/* special_function */
-	 "IMGLUE",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_SECREL16 0x000F */
-  /*   va of containing section (limited to 16 bits) */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_SECREL16,/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "SECREL16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_REFHI	     0x0010 */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_REFHI,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc_refhi_reloc,	/* special_function */
-	 "REFHI",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_REFLO	     0x0011 */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_REFLO,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc_refhi_reloc,	/* special_function */
-	 "REFLO",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_PAIR		     0x0012 */
-  /* Unused: */
-  HOWTO (IMAGE_REL_PPC_PAIR,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc_pair_reloc,	/* special_function */
-	 "PAIR",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* IMAGE_REL_PPC_TOCREL16_DEFN 0x0013 */
-  /*   16-bit offset from TOC base, without causing a definition */
-  /* Used: */
-  HOWTO ( (IMAGE_REL_PPC_TOCREL16 | IMAGE_REL_PPC_TOCDEFN), /* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "TOCREL16, TOCDEFN",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-};
-
-/* Some really cheezy macros that can be turned on to test stderr :-)  */
-
-#ifdef DEBUG_RELOC
-#define UN_IMPL(x)					     \
-{							     \
-   static int i;					     \
-   if (i == 0)						     \
-     {							     \
-       i = 1;						     \
-       fprintf (stderr,_("Unimplemented Relocation -- %s\n"),x); \
-     }							     \
-}
-
-#define DUMP_RELOC(n,r)				     \
-{						     \
-   fprintf (stderr,"%s sym %d, addr %d, addend %d\n", \
-	   n, (*(r->sym_ptr_ptr))->name,	     \
-	   r->address, r->addend);		     \
-}
-
-/* Given a reloc name, n, and a pointer to an internal_reloc,
-   dump out interesting information on the contents
-
-#define n_name		_n._n_name
-#define n_zeroes	_n._n_n._n_zeroes
-#define n_offset	_n._n_n._n_offset  */
-
-#define DUMP_RELOC2(n,r)				\
-{							\
-   fprintf (stderr,"%s sym %d, r_vaddr %d %s\n",	\
-	   n, r->r_symndx, r->r_vaddr,			\
-	   (((r->r_type) & IMAGE_REL_PPC_TOCDEFN) == 0) \
-	   ?" ":" TOCDEFN"  );				\
-}
-
-#else
-#define UN_IMPL(x)
-#define DUMP_RELOC(n,r)
-#define DUMP_RELOC2(n,r)
-#endif
-
-/* TOC construction and management routines.  */
-
-/* This file is compiled twice, and these variables are defined in one
-   of the compilations.  FIXME: This is confusing and weird.  Also,
-   BFD should not use global variables.  */
-extern bfd *    bfd_of_toc_owner;
-extern long int global_toc_size;
-extern long int import_table_size;
-extern long int first_thunk_address;
-extern long int thunk_size;
-
-enum toc_type
-{
-  default_toc,
-  toc_32,
-  toc_64
-};
-
-enum ref_category
-{
-  priv,
-  pub,
-  tocdata
-};
-
-struct list_ele
-{
-  struct list_ele *next;
-  bfd_vma addr;
-  enum ref_category cat;
-  int offset;
-  const char *name;
-};
-
-extern struct list_ele *head;
-extern struct list_ele *tail;
-
-static void
-record_toc (asection *toc_section,
-	    bfd_signed_vma our_toc_offset,
-	    enum ref_category cat,
-	    const char *name)
-{
-  /* Add this entry to our toc addr-offset-name list.  */
-  bfd_size_type amt = sizeof (struct list_ele);
-  struct list_ele *t = (struct list_ele *) bfd_malloc (amt);
-
-  if (t == NULL)
-    abort ();
-  t->next = 0;
-  t->offset = our_toc_offset;
-  t->name = name;
-  t->cat = cat;
-  t->addr = toc_section->output_offset + our_toc_offset;
-
-  if (head == 0)
-    {
-      head = t;
-      tail = t;
-    }
-  else
-    {
-      tail->next = t;
-      tail = t;
-    }
-}
-
-#ifdef COFF_IMAGE_WITH_PE
-
-/* Record a toc offset against a symbol.  */
-static bfd_boolean
-ppc_record_toc_entry (bfd *abfd,
-		      struct bfd_link_info *info ATTRIBUTE_UNUSED,
-		      asection *sec ATTRIBUTE_UNUSED,
-		      int sym,
-		      enum toc_type toc_kind ATTRIBUTE_UNUSED)
-{
-  struct ppc_coff_link_hash_entry *h;
-  int *local_syms;
-
-  h = 0;
-
-  h = (struct ppc_coff_link_hash_entry *) (obj_coff_sym_hashes (abfd)[sym]);
-  if (h != 0)
-    {
-      HASH_CHECK(h);
-    }
-
-  if (h == 0)
-    {
-      local_syms = obj_coff_local_toc_table(abfd);
-
-      if (local_syms == 0)
-	{
-	  unsigned int i;
-	  bfd_size_type amt;
-
-	  /* allocate a table */
-	  amt = (bfd_size_type) obj_raw_syment_count (abfd) * sizeof (int);
-	  local_syms = (int *) bfd_zalloc (abfd, amt);
-	  if (local_syms == 0)
-	    return FALSE;
-	  obj_coff_local_toc_table (abfd) = local_syms;
-
-	  for (i = 0; i < obj_raw_syment_count (abfd); ++i)
-	    {
-	      SET_UNALLOCATED (local_syms[i]);
-	    }
-	}
-
-      if (IS_UNALLOCATED(local_syms[sym]))
-	{
-	  local_syms[sym] = global_toc_size;
-	  global_toc_size += 4;
-
-	  /* The size must fit in a 16-bit displacement.  */
-	  if (global_toc_size > 65535)
-	    {
-	      _bfd_error_handler (_("TOC overflow"));
-	      bfd_set_error (bfd_error_file_too_big);
-	      return FALSE;
-	    }
-	}
-    }
-  else
-    {
-      /* Check to see if there's a toc slot allocated. If not, do it
-	 here. It will be used in relocate_section.  */
-      if (IS_UNALLOCATED(h->toc_offset))
-	{
-	  h->toc_offset = global_toc_size;
-	  global_toc_size += 4;
-
-	  /* The size must fit in a 16-bit displacement.  */
-	  if (global_toc_size >= 65535)
-	    {
-	      _bfd_error_handler (_("TOC overflow"));
-	      bfd_set_error (bfd_error_file_too_big);
-	      return FALSE;
-	    }
-	}
-    }
-
-  return TRUE;
-}
-
-/* Record a toc offset against a symbol.  */
-static void
-ppc_mark_symbol_as_glue (bfd *abfd,
-			 int sym,
-			 struct internal_reloc *rel)
-{
-  struct ppc_coff_link_hash_entry *h;
-
-  h = (struct ppc_coff_link_hash_entry *) (obj_coff_sym_hashes (abfd)[sym]);
-
-  HASH_CHECK(h);
-
-  h->symbol_is_glue = 1;
-  h->glue_insn = bfd_get_32 (abfd, (bfd_byte *) &rel->r_vaddr);
-
-  return;
-}
-
-#endif /* COFF_IMAGE_WITH_PE */
-
-/* Return TRUE if this relocation should
-   appear in the output .reloc section.  */
-
-static bfd_boolean
-in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
-	    reloc_howto_type *howto)
-{
-  return
-    (! howto->pc_relative)
-      && (howto->type != IMAGE_REL_PPC_ADDR32NB)
-      && (howto->type != IMAGE_REL_PPC_TOCREL16)
-      && (howto->type != IMAGE_REL_PPC_IMGLUE)
-      && (howto->type != IMAGE_REL_PPC_IFGLUE)
-      && (howto->type != IMAGE_REL_PPC_SECREL)
-      && (howto->type != IMAGE_REL_PPC_SECTION)
-      && (howto->type != IMAGE_REL_PPC_SECREL16)
-      && (howto->type != IMAGE_REL_PPC_REFHI)
-      && (howto->type != IMAGE_REL_PPC_REFLO)
-      && (howto->type != IMAGE_REL_PPC_PAIR)
-      && (howto->type != IMAGE_REL_PPC_TOCREL16_DEFN) ;
-}
-
-static bfd_boolean
-write_base_file_entry (bfd *obfd, struct bfd_link_info *info, bfd_vma addr)
-{
-  if (coff_data (obfd)->pe)
-     addr -= pe_data (obfd)->pe_opthdr.ImageBase;
-  if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1)
-    return TRUE;
-
-  bfd_set_error (bfd_error_system_call);
-  return FALSE;
-}
-
-/* The reloc processing routine for the optimized COFF linker.  */
-
-static bfd_boolean
-coff_ppc_relocate_section (bfd *output_bfd,
-			   struct bfd_link_info *info,
-			   bfd *input_bfd,
-			   asection *input_section,
-			   bfd_byte *contents,
-			   struct internal_reloc *relocs,
-			   struct internal_syment *syms,
-			   asection **sections)
-{
-  struct internal_reloc *rel;
-  struct internal_reloc *relend;
-  asection *toc_section = 0;
-  bfd_vma relocation;
-  reloc_howto_type *howto = 0;
-
-  /* If we are performing a relocatable link, we don't need to do a
-     thing.  The caller will take care of adjusting the reloc
-     addresses and symbol indices.  */
-  if (bfd_link_relocatable (info))
-    return TRUE;
-
-  rel = relocs;
-  relend = rel + input_section->reloc_count;
-  for (; rel < relend; rel++)
-    {
-      long symndx;
-      struct ppc_coff_link_hash_entry *h;
-      struct internal_syment *sym;
-      bfd_vma val;
-
-      asection *sec;
-      bfd_reloc_status_type rstat;
-      bfd_byte *loc;
-
-      unsigned short r_type  = EXTRACT_TYPE (rel->r_type);
-      unsigned short r_flags = EXTRACT_FLAGS(rel->r_type);
-
-      symndx = rel->r_symndx;
-      loc = contents + rel->r_vaddr - input_section->vma;
-
-      /* FIXME: check bounds on r_type */
-      howto = ppc_coff_howto_table + r_type;
-
-      if (symndx == -1)
-	{
-	  h = NULL;
-	  sym = NULL;
-	}
-      else
-	{
-	  h = (struct ppc_coff_link_hash_entry *)
-	    (obj_coff_sym_hashes (input_bfd)[symndx]);
-	  if (h != 0)
-	    {
-	      HASH_CHECK(h);
-	    }
-
-	  sym = syms + symndx;
-	}
-
-      if (r_type == IMAGE_REL_PPC_IMGLUE && h == 0)
-	{
-	  /* An IMGLUE reloc must have a name. Something is very wrong.  */
-	  abort ();
-	}
-
-      sec = NULL;
-      val = 0;
-
-      /* FIXME: PAIR unsupported in the following code.  */
-      if (h == NULL)
-	{
-	  if (symndx == -1)
-	    sec = bfd_abs_section_ptr;
-	  else
-	    {
-	      sec = sections[symndx];
-	      val = (sec->output_section->vma
-		     + sec->output_offset
-		     + sym->n_value);
-	      if (! obj_pe (output_bfd))
-		val -= sec->vma;
-	    }
-	}
-      else
-	{
-	  HASH_CHECK(h);
-
-	  if (h->root.root.type == bfd_link_hash_defined
-	      || h->root.root.type == bfd_link_hash_defweak)
-	    {
-	      sec = h->root.root.u.def.section;
-	      val = (h->root.root.u.def.value
-		     + sec->output_section->vma
-		     + sec->output_offset);
-	    }
-	  else
-	    (*info->callbacks->undefined_symbol)
-	      (info, h->root.root.root.string, input_bfd, input_section,
-	       rel->r_vaddr - input_section->vma, TRUE);
-	}
-
-      rstat = bfd_reloc_ok;
-
-      /* Each case must do its own relocation, setting rstat appropriately.  */
-      switch (r_type)
-	{
-	default:
-	  /* xgettext: c-format */
-	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
-			      input_bfd, r_type);
-	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
-	case IMAGE_REL_PPC_TOCREL16:
-	  {
-	    bfd_signed_vma our_toc_offset;
-	    int fixit;
-
-	    DUMP_RELOC2(howto->name, rel);
-
-	    if (toc_section == 0)
-	      {
-		toc_section = bfd_get_section_by_name (bfd_of_toc_owner,
-						       TOC_SECTION_NAME);
-
-		if ( toc_section == NULL )
-		  {
-		    /* There is no toc section. Something is very wrong.  */
-		    abort ();
-		  }
-	      }
-
-	    /* Amazing bit tricks present. As we may have seen earlier, we
-	       use the 1 bit to tell us whether or not a toc offset has been
-	       allocated. Now that they've all been allocated, we will use
-	       the 1 bit to tell us if we've written this particular toc
-	       entry out.  */
-	    fixit = FALSE;
-	    if (h == 0)
-	      {
-		/* It is a file local symbol.  */
-		int *local_toc_table;
-		char name[SYMNMLEN + 1];
-
-		sym = syms + symndx;
-		strncpy (name, sym->_n._n_name, SYMNMLEN);
-		name[SYMNMLEN] = '\0';
-
-		local_toc_table = obj_coff_local_toc_table(input_bfd);
-		our_toc_offset = local_toc_table[symndx];
-
-		if (IS_WRITTEN(our_toc_offset))
-		  {
-		    /* If it has been written out, it is marked with the
-		       1 bit. Fix up our offset, but do not write it out
-		       again.  */
-		    MAKE_ADDR_AGAIN(our_toc_offset);
-		  }
-		else
-		  {
-		    /* Write out the toc entry.  */
-		    record_toc (toc_section, our_toc_offset, priv,
-				strdup (name));
-
-		    bfd_put_32 (output_bfd, val,
-			       toc_section->contents + our_toc_offset);
-
-		    MARK_AS_WRITTEN(local_toc_table[symndx]);
-		    fixit = TRUE;
-		  }
-	      }
-	    else
-	      {
-		const char *name = h->root.root.root.string;
-		our_toc_offset = h->toc_offset;
-
-		if ((r_flags & IMAGE_REL_PPC_TOCDEFN)
-		    == IMAGE_REL_PPC_TOCDEFN )
-		  {
-		    /* This is unbelievable cheese. Some knowledgable asm
-		       hacker has decided to use r2 as a base for loading
-		       a value. He/She does this by setting the tocdefn bit,
-		       and not supplying a toc definition. The behaviour is
-		       then to use the difference between the value of the
-		       symbol and the actual location of the toc as the toc
-		       index.
-
-		       In fact, what is usually happening is, because the
-		       Import Address Table is mapped immediately following
-		       the toc, some trippy library code trying for speed on
-		       dll linkage, takes advantage of that and considers
-		       the IAT to be part of the toc, thus saving a load.  */
-
-		    our_toc_offset = val - (toc_section->output_section->vma
-					    + toc_section->output_offset);
-
-		    /* The size must still fit in a 16-bit displacement.  */
-		    if ((bfd_vma) our_toc_offset >= 65535)
-		      {
-			_bfd_error_handler
-			  /* xgettext: c-format */
-			  (_("%pB: Relocation for %s of %#" PRIx64 " exceeds "
-			     "Toc size limit"),
-			   input_bfd, name, (uint64_t) our_toc_offset);
-			bfd_set_error (bfd_error_bad_value);
-			return FALSE;
-		      }
-
-		    record_toc (toc_section, our_toc_offset, pub,
-				strdup (name));
-		  }
-		else if (IS_WRITTEN (our_toc_offset))
-		  {
-		    /* If it has been written out, it is marked with the
-		       1 bit. Fix up our offset, but do not write it out
-		       again.  */
-		    MAKE_ADDR_AGAIN(our_toc_offset);
-		  }
-		else
-		  {
-		    record_toc(toc_section, our_toc_offset, pub,
-			       strdup (name));
-
-		    /* Write out the toc entry.  */
-		    bfd_put_32 (output_bfd, val,
-			       toc_section->contents + our_toc_offset);
-
-		    MARK_AS_WRITTEN(h->toc_offset);
-		    /* The tricky part is that this is the address that
-		       needs a .reloc entry for it.  */
-		    fixit = TRUE;
-		  }
-	      }
-
-	    if (fixit && info->base_file)
-	      {
-		/* So if this is non pcrelative, and is referenced
-		   to a section or a common symbol, then it needs a reloc.  */
-
-		/* Relocation to a symbol in a section which
-		   isn't absolute - we output the address here
-		   to a file.  */
-		bfd_vma addr = (toc_section->output_section->vma
-				+ toc_section->output_offset + our_toc_offset);
-
-		if (!write_base_file_entry (output_bfd, info, addr))
-		  return FALSE;
-	      }
-
-	    /* FIXME: this test is conservative.  */
-	    if ((r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN
-		&& (bfd_vma) our_toc_offset > toc_section->size)
-	      {
-		_bfd_error_handler
-		  /* xgettext: c-format */
-		  (_("%pB: Relocation exceeds allocated TOC (%#" PRIx64 ")"),
-		   input_bfd, (uint64_t) toc_section->size);
-		bfd_set_error (bfd_error_bad_value);
-		return FALSE;
-	      }
-
-	    /* Now we know the relocation for this toc reference.  */
-	    relocation =  our_toc_offset + TOC_LOAD_ADJUSTMENT;
-	    rstat = _bfd_relocate_contents (howto, input_bfd, relocation, loc);
-	  }
-	  break;
-	case IMAGE_REL_PPC_IFGLUE:
-	  {
-	    /* To solve this, we need to know whether or not the symbol
-	       appearing on the call instruction is a glue function or not.
-	       A glue function must announce itself via a IMGLUE reloc, and
-	       the reloc contains the required toc restore instruction.  */
-	    DUMP_RELOC2 (howto->name, rel);
-
-	    if (h != 0)
-	      {
-		if (h->symbol_is_glue == 1)
-		  {
-		    bfd_put_32 (input_bfd, (bfd_vma) h->glue_insn, loc);
-		  }
-	      }
-	  }
-	  break;
-	case IMAGE_REL_PPC_SECREL:
-	  /* Unimplemented: codeview debugging information.  */
-	  /* For fast access to the header of the section
-	     containing the item.  */
-	  break;
-	case IMAGE_REL_PPC_SECTION:
-	  /* Unimplemented: codeview debugging information.  */
-	  /* Is used to indicate that the value should be relative
-	     to the beginning of the section that contains the
-	     symbol.  */
-	  break;
-	case IMAGE_REL_PPC_ABSOLUTE:
-	  {
-	    const char *my_name;
-	    char buf[SYMNMLEN + 1];
-
-	    if (h == 0)
-	      {
-		strncpy (buf, (syms+symndx)->_n._n_name, SYMNMLEN);
-		buf[SYMNMLEN] = '\0';
-		my_name = buf;
-	      }
-	    else
-	      my_name = h->root.root.root.string;
-
-	    _bfd_error_handler
-	      /* xgettext: c-format */
-	      (_("warning: unsupported reloc %s <file %pB, section %pA>\n"
-		 "sym %ld (%s), r_vaddr %" PRId64 " (%#" PRIx64 ")"),
-	       howto->name, input_bfd, input_section,
-	       rel->r_symndx, my_name,
-	       (int64_t) rel->r_vaddr, (uint64_t) rel->r_vaddr);
-	  }
-	  break;
-	case IMAGE_REL_PPC_IMGLUE:
-	  {
-	    /* There is nothing to do now. This reloc was noted in the first
-	       pass over the relocs, and the glue instruction extracted.  */
-	    const char *my_name;
-
-	    if (h->symbol_is_glue == 1)
-	      break;
-	    my_name = h->root.root.root.string;
-
-	    _bfd_error_handler
-	      /* xgettext: c-format */
-	      (_("%pB: Out of order IMGLUE reloc for %s"), input_bfd, my_name);
-	    bfd_set_error (bfd_error_bad_value);
-	    return FALSE;
-	  }
-
-	case IMAGE_REL_PPC_ADDR32NB:
-	  {
-	    const char *name = 0;
-
-	    DUMP_RELOC2 (howto->name, rel);
-
-	    if (CONST_STRNEQ (input_section->name, ".idata$2") && first_thunk_address == 0)
-	      {
-		/* Set magic values.  */
-		int idata5offset;
-		struct coff_link_hash_entry *myh;
-
-		myh = coff_link_hash_lookup (coff_hash_table (info),
-					     "__idata5_magic__",
-					     FALSE, FALSE, TRUE);
-		first_thunk_address = myh->root.u.def.value +
-		  sec->output_section->vma +
-		    sec->output_offset -
-		      pe_data(output_bfd)->pe_opthdr.ImageBase;
-
-		idata5offset = myh->root.u.def.value;
-		myh = coff_link_hash_lookup (coff_hash_table (info),
-					     "__idata6_magic__",
-					     FALSE, FALSE, TRUE);
-
-		thunk_size = myh->root.u.def.value - idata5offset;
-		myh = coff_link_hash_lookup (coff_hash_table (info),
-					     "__idata4_magic__",
-					     FALSE, FALSE, TRUE);
-		import_table_size = myh->root.u.def.value;
-	      }
-
-	    if (h == 0)
-	      /* It is a file local symbol.  */
-	      sym = syms + symndx;
-	    else
-	      {
-		char *target = 0;
-
-		name = h->root.root.root.string;
-		if (strcmp (".idata$2", name) == 0)
-		  target = "__idata2_magic__";
-		else if (strcmp (".idata$4", name) == 0)
-		  target = "__idata4_magic__";
-		else if (strcmp (".idata$5", name) == 0)
-		  target = "__idata5_magic__";
-
-		if (target != 0)
-		  {
-		    struct coff_link_hash_entry *myh;
-
-		    myh = coff_link_hash_lookup (coff_hash_table (info),
-						 target,
-						 FALSE, FALSE, TRUE);
-		    if (myh == 0)
-		      {
-			/* Missing magic cookies. Something is very wrong.  */
-			abort ();
-		      }
-
-		    val = myh->root.u.def.value +
-		      sec->output_section->vma + sec->output_offset;
-		    if (first_thunk_address == 0)
-		      {
-			int idata5offset;
-			myh = coff_link_hash_lookup (coff_hash_table (info),
-						     "__idata5_magic__",
-						     FALSE, FALSE, TRUE);
-			first_thunk_address = myh->root.u.def.value +
-			  sec->output_section->vma +
-			    sec->output_offset -
-			      pe_data(output_bfd)->pe_opthdr.ImageBase;
-
-			idata5offset = myh->root.u.def.value;
-			myh = coff_link_hash_lookup (coff_hash_table (info),
-						     "__idata6_magic__",
-						     FALSE, FALSE, TRUE);
-
-			thunk_size = myh->root.u.def.value - idata5offset;
-			myh = coff_link_hash_lookup (coff_hash_table (info),
-						     "__idata4_magic__",
-						     FALSE, FALSE, TRUE);
-			import_table_size = myh->root.u.def.value;
-		      }
-		  }
-	      }
-
-	    rstat = _bfd_relocate_contents (howto,
-					    input_bfd,
-					    val -
-					    pe_data (output_bfd)->pe_opthdr.ImageBase,
-					    loc);
-	  }
-	  break;
-
-	case IMAGE_REL_PPC_REL24:
-	  DUMP_RELOC2(howto->name, rel);
-	  val -= (input_section->output_section->vma
-		  + input_section->output_offset);
-
-	  rstat = _bfd_relocate_contents (howto,
-					  input_bfd,
-					  val,
-					  loc);
-	  break;
-	case IMAGE_REL_PPC_ADDR16:
-	case IMAGE_REL_PPC_ADDR24:
-	case IMAGE_REL_PPC_ADDR32:
-	  DUMP_RELOC2(howto->name, rel);
-	  rstat = _bfd_relocate_contents (howto,
-					  input_bfd,
-					  val,
-					  loc);
-	  break;
-	}
-
-      if (info->base_file)
-	{
-	  /* So if this is non pcrelative, and is referenced
-	     to a section or a common symbol, then it needs a reloc.  */
-	  if (sym && pe_data(output_bfd)->in_reloc_p (output_bfd, howto))
-	    {
-	      /* Relocation to a symbol in a section which
-		 isn't absolute - we output the address here
-		 to a file.  */
-	      bfd_vma addr = (rel->r_vaddr
-			      - input_section->vma
-			      + input_section->output_offset
-			      + input_section->output_section->vma);
-
-	      if (!write_base_file_entry (output_bfd, info, addr))
-		return FALSE;
-	    }
-	}
-
-      switch (rstat)
-	{
-	default:
-	  abort ();
-	case bfd_reloc_ok:
-	  break;
-	case bfd_reloc_overflow:
-	  {
-	    const char *name;
-	    char buf[SYMNMLEN + 1];
-
-	    if (symndx == -1)
-	      name = "*ABS*";
-	    else if (h != NULL)
-	      name = NULL;
-	    else if (sym == NULL)
-	      name = "*unknown*";
-	    else if (sym->_n._n_n._n_zeroes == 0
-		     && sym->_n._n_n._n_offset != 0)
-	      name = obj_coff_strings (input_bfd) + sym->_n._n_n._n_offset;
-	    else
-	      {
-		strncpy (buf, sym->_n._n_name, SYMNMLEN);
-		buf[SYMNMLEN] = '\0';
-		name = buf;
-	      }
-
-	    (*info->callbacks->reloc_overflow)
-	      (info, (h ? &h->root.root : NULL), name, howto->name,
-	       (bfd_vma) 0, input_bfd, input_section,
-	       rel->r_vaddr - input_section->vma);
-	  }
-	}
-    }
-
-  return TRUE;
-}
-
-#ifdef COFF_IMAGE_WITH_PE
-
-/* FIXME: BFD should not use global variables.  This file is compiled
-   twice, and these variables are shared.  This is confusing and
-   weird.  */
-
-long int global_toc_size = 4;
-
-bfd* bfd_of_toc_owner = 0;
-
-long int import_table_size;
-long int first_thunk_address;
-long int thunk_size;
-
-struct list_ele *head;
-struct list_ele *tail;
-
-static char *
-h1 = N_("\n\t\t\tTOC MAPPING\n\n");
-static char *
-h2 = N_(" TOC    disassembly  Comments       Name\n");
-static char *
-h3 = N_(" Offset  spelling                   (if present)\n");
-
-void
-dump_toc (void * vfile)
-{
-  FILE *file = (FILE *) vfile;
-  struct list_ele *t;
-
-  fputs (_(h1), file);
-  fputs (_(h2), file);
-  fputs (_(h3), file);
-
-  for (t = head; t != 0; t=t->next)
-    {
-      const char *cat = "";
-
-      if (t->cat == priv)
-	cat = _("private       ");
-      else if (t->cat == pub)
-	cat = _("public        ");
-      else if (t->cat == tocdata)
-	cat = _("data-in-toc   ");
-
-      if (t->offset > global_toc_size)
-	{
-	  if (t->offset <= global_toc_size + thunk_size)
-	    cat = _("IAT reference ");
-	  else
-	    {
-	      fprintf (file,
-		       /* xgettext: c-format */
-		      _("**** global_toc_size %ld(%lx), thunk_size %ld(%lx)\n"),
-		       global_toc_size, (unsigned long) global_toc_size,
-		       thunk_size, (unsigned long) thunk_size);
-	      cat = _("Out of bounds!");
-	    }
-	}
-
-      fprintf (file,
-	      " %04lx    (%d)", (unsigned long) t->offset, t->offset - 32768);
-      fprintf (file,
-	      "    %s %s\n",
-	      cat, t->name);
-
-    }
-
-  fprintf (file, "\n");
-}
-
-bfd_boolean
-ppc_allocate_toc_section (struct bfd_link_info *info ATTRIBUTE_UNUSED)
-{
-  asection *s;
-  bfd_byte *foo;
-  bfd_size_type amt;
-  static char test_char = '1';
-
-  if ( global_toc_size == 0 ) /* FIXME: does this get me in trouble?  */
-    return TRUE;
-
-  if (bfd_of_toc_owner == 0)
-    /* No toc owner? Something is very wrong.  */
-    abort ();
-
-  s = bfd_get_section_by_name ( bfd_of_toc_owner , TOC_SECTION_NAME);
-  if (s == NULL)
-    /* No toc section? Something is very wrong.  */
-    abort ();
-
-  amt = global_toc_size;
-  foo = (bfd_byte *) bfd_alloc (bfd_of_toc_owner, amt);
-  memset(foo, test_char, (size_t) global_toc_size);
-
-  s->size = global_toc_size;
-  s->contents = foo;
-
-  return TRUE;
-}
-
-bfd_boolean
-ppc_process_before_allocation (bfd *abfd,
-			       struct bfd_link_info *info)
-{
-  asection *sec;
-  struct internal_reloc *i, *rel;
-
-  /* Here we have a bfd that is to be included on the link. We have a hook
-     to do reloc rummaging, before section sizes are nailed down.  */
-  _bfd_coff_get_external_symbols (abfd);
-
-  /* Rummage around all the relocs and map the toc.  */
-  sec = abfd->sections;
-
-  if (sec == 0)
-    return TRUE;
-
-  for (; sec != 0; sec = sec->next)
-    {
-      if (sec->reloc_count == 0)
-	continue;
-
-      /* load the relocs */
-      /* FIXME: there may be a storage leak here */
-      i=_bfd_coff_read_internal_relocs(abfd,sec,1,0,0,0);
-
-      if (i == 0)
-	abort ();
-
-      for (rel = i; rel < i + sec->reloc_count; ++rel)
-	{
-	  unsigned short r_type  = EXTRACT_TYPE  (rel->r_type);
-	  unsigned short r_flags = EXTRACT_FLAGS (rel->r_type);
-	  bfd_boolean ok = TRUE;
-
-	  DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, rel);
-
-	  switch(r_type)
-	    {
-	    case IMAGE_REL_PPC_TOCREL16:
-	      /* If TOCDEFN is on, ignore as someone else has allocated the
-		 toc entry.  */
-	      if ((r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN)
-		ok = ppc_record_toc_entry(abfd, info, sec,
-					  rel->r_symndx, default_toc);
-	      if (!ok)
-		return FALSE;
-	      break;
-	    case IMAGE_REL_PPC_IMGLUE:
-	      ppc_mark_symbol_as_glue (abfd, rel->r_symndx, rel);
-	      break;
-	    default:
-	      break;
-	    }
-	}
-    }
-
-  return TRUE;
-}
-
-#endif
-
-static bfd_reloc_status_type
-ppc_refhi_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-		 arelent *reloc_entry ATTRIBUTE_UNUSED,
-		 asymbol *symbol ATTRIBUTE_UNUSED,
-		 void * data ATTRIBUTE_UNUSED,
-		 asection *input_section ATTRIBUTE_UNUSED,
-		 bfd *output_bfd,
-		 char **error_message ATTRIBUTE_UNUSED)
-{
-  UN_IMPL("REFHI");
-  DUMP_RELOC("REFHI",reloc_entry);
-
-  if (output_bfd == (bfd *) NULL)
-    return bfd_reloc_continue;
-
-  return bfd_reloc_undefined;
-}
-
-static bfd_reloc_status_type
-ppc_pair_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-		arelent *reloc_entry ATTRIBUTE_UNUSED,
-		asymbol *symbol ATTRIBUTE_UNUSED,
-		void * data ATTRIBUTE_UNUSED,
-		asection *input_section ATTRIBUTE_UNUSED,
-		bfd *output_bfd,
-		char **error_message ATTRIBUTE_UNUSED)
-{
-  UN_IMPL("PAIR");
-  DUMP_RELOC("PAIR",reloc_entry);
-
-  if (output_bfd == (bfd *) NULL)
-    return bfd_reloc_continue;
-
-  return bfd_reloc_undefined;
-}
-
-static bfd_reloc_status_type
-ppc_toc16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-		 arelent *reloc_entry ATTRIBUTE_UNUSED,
-		 asymbol *symbol ATTRIBUTE_UNUSED,
-		 void * data ATTRIBUTE_UNUSED,
-		 asection *input_section ATTRIBUTE_UNUSED,
-		 bfd *output_bfd,
-		 char **error_message ATTRIBUTE_UNUSED)
-{
-  UN_IMPL ("TOCREL16");
-  DUMP_RELOC ("TOCREL16",reloc_entry);
-
-  if (output_bfd == (bfd *) NULL)
-    return bfd_reloc_continue;
-
-  return bfd_reloc_ok;
-}
-
-static bfd_reloc_status_type
-ppc_secrel_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-		  arelent *reloc_entry ATTRIBUTE_UNUSED,
-		  asymbol *symbol ATTRIBUTE_UNUSED,
-		  void * data ATTRIBUTE_UNUSED,
-		  asection *input_section ATTRIBUTE_UNUSED,
-		  bfd *output_bfd,
-		  char **error_message ATTRIBUTE_UNUSED)
-{
-  UN_IMPL("SECREL");
-  DUMP_RELOC("SECREL",reloc_entry);
-
-  if (output_bfd == (bfd *) NULL)
-    return bfd_reloc_continue;
-
-  return bfd_reloc_ok;
-}
-
-static bfd_reloc_status_type
-ppc_section_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-		   arelent *reloc_entry ATTRIBUTE_UNUSED,
-		   asymbol *symbol ATTRIBUTE_UNUSED,
-		   void * data ATTRIBUTE_UNUSED,
-		   asection *input_section ATTRIBUTE_UNUSED,
-		   bfd *output_bfd,
-		   char **error_message ATTRIBUTE_UNUSED)
-{
-  UN_IMPL("SECTION");
-  DUMP_RELOC("SECTION",reloc_entry);
-
-  if (output_bfd == (bfd *) NULL)
-    return bfd_reloc_continue;
-
-  return bfd_reloc_ok;
-}
-
-static bfd_reloc_status_type
-ppc_imglue_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-		  arelent *reloc_entry ATTRIBUTE_UNUSED,
-		  asymbol *symbol ATTRIBUTE_UNUSED,
-		  void * data ATTRIBUTE_UNUSED,
-		  asection *input_section ATTRIBUTE_UNUSED,
-		  bfd *output_bfd,
-		  char **error_message ATTRIBUTE_UNUSED)
-
-{
-  UN_IMPL("IMGLUE");
-  DUMP_RELOC("IMGLUE",reloc_entry);
-
-  if (output_bfd == (bfd *) NULL)
-    return bfd_reloc_continue;
-
-  return bfd_reloc_ok;
-}
-
-#define MAX_RELOC_INDEX  \
-      (sizeof (ppc_coff_howto_table) / sizeof (ppc_coff_howto_table[0]) - 1)
-
-/* FIXME: There is a possibility that when we read in a reloc from a file,
-	  that there are some bits encoded in the upper portion of the
-	  type field. Not yet implemented.  */
-
-static void
-ppc_coff_rtype2howto (arelent *relent, struct internal_reloc *internal)
-{
-  /* We can encode one of three things in the type field, aside from the
-     type:
-     1. IMAGE_REL_PPC_NEG - indicates the value field is a subtraction
-	value, rather than an addition value
-     2. IMAGE_REL_PPC_BRTAKEN, IMAGE_REL_PPC_BRNTAKEN - indicates that
-	the branch is expected to be taken or not.
-     3. IMAGE_REL_PPC_TOCDEFN - toc slot definition in the file
-     For now, we just strip this stuff to find the type, and ignore it other
-     than that.  */
-  reloc_howto_type *howto;
-  unsigned short r_type  = EXTRACT_TYPE (internal->r_type);
-  unsigned short r_flags = EXTRACT_FLAGS(internal->r_type);
-  unsigned short junk    = EXTRACT_JUNK (internal->r_type);
-
-  /* The masking process only slices off the bottom byte for r_type.  */
-  if ( r_type > MAX_RELOC_INDEX )
-    abort ();
-
-  /* Check for absolute crap.  */
-  if (junk != 0)
-    abort ();
-
-  switch(r_type)
-    {
-    case IMAGE_REL_PPC_ADDR16:
-    case IMAGE_REL_PPC_REL24:
-    case IMAGE_REL_PPC_ADDR24:
-    case IMAGE_REL_PPC_ADDR32:
-    case IMAGE_REL_PPC_IFGLUE:
-    case IMAGE_REL_PPC_ADDR32NB:
-    case IMAGE_REL_PPC_SECTION:
-    case IMAGE_REL_PPC_SECREL:
-      DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, internal);
-      howto = ppc_coff_howto_table + r_type;
-      break;
-    case IMAGE_REL_PPC_IMGLUE:
-      DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, internal);
-      howto = ppc_coff_howto_table + r_type;
-      break;
-    case IMAGE_REL_PPC_TOCREL16:
-      DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, internal);
-      if (r_flags & IMAGE_REL_PPC_TOCDEFN)
-	howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16_DEFN;
-      else
-	howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16;
-      break;
-    default:
-      _bfd_error_handler
-	/* xgettext: c-format */
-	(_("warning: unsupported reloc %s [%d] used -- it may not work"),
-	 ppc_coff_howto_table[r_type].name, r_type);
-      howto = ppc_coff_howto_table + r_type;
-      break;
-    }
-
-  relent->howto = howto;
-}
-
-static reloc_howto_type *
-coff_ppc_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
-			 asection *sec,
-			 struct internal_reloc *rel,
-			 struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
-			 struct internal_syment *sym ATTRIBUTE_UNUSED,
-			 bfd_vma *addendp)
-{
-  reloc_howto_type *howto;
-
-  /* We can encode one of three things in the type field, aside from the
-     type:
-     1. IMAGE_REL_PPC_NEG - indicates the value field is a subtraction
-	value, rather than an addition value
-     2. IMAGE_REL_PPC_BRTAKEN, IMAGE_REL_PPC_BRNTAKEN - indicates that
-	the branch is expected to be taken or not.
-     3. IMAGE_REL_PPC_TOCDEFN - toc slot definition in the file
-     For now, we just strip this stuff to find the type, and ignore it other
-     than that.  */
-
-  unsigned short r_type  = EXTRACT_TYPE  (rel->r_type);
-  unsigned short r_flags = EXTRACT_FLAGS (rel->r_type);
-  unsigned short junk    = EXTRACT_JUNK  (rel->r_type);
-
-  /* The masking process only slices off the bottom byte for r_type.  */
-  if (r_type > MAX_RELOC_INDEX)
-    abort ();
-
-  /* Check for absolute crap.  */
-  if (junk != 0)
-    abort ();
-
-  switch(r_type)
-    {
-    case IMAGE_REL_PPC_ADDR32NB:
-      DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel);
-      *addendp -= pe_data(sec->output_section->owner)->pe_opthdr.ImageBase;
-      howto = ppc_coff_howto_table + r_type;
-      break;
-    case IMAGE_REL_PPC_TOCREL16:
-      DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel);
-      if (r_flags & IMAGE_REL_PPC_TOCDEFN)
-	howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16_DEFN;
-      else
-	howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16;
-      break;
-    case IMAGE_REL_PPC_ADDR16:
-    case IMAGE_REL_PPC_REL24:
-    case IMAGE_REL_PPC_ADDR24:
-    case IMAGE_REL_PPC_ADDR32:
-    case IMAGE_REL_PPC_IFGLUE:
-    case IMAGE_REL_PPC_SECTION:
-    case IMAGE_REL_PPC_SECREL:
-      DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel);
-      howto = ppc_coff_howto_table + r_type;
-      break;
-    case IMAGE_REL_PPC_IMGLUE:
-      DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel);
-      howto = ppc_coff_howto_table + r_type;
-      break;
-    default:
-      _bfd_error_handler
-	/* xgettext: c-format */
-	(_("warning: unsupported reloc %s [%d] used -- it may not work"),
-	 ppc_coff_howto_table[r_type].name, r_type);
-      howto = ppc_coff_howto_table + r_type;
-      break;
-    }
-
-  return howto;
-}
-
-/* A cheesy little macro to make the code a little more readable.  */
-#define HOW2MAP(bfd_rtype,ppc_rtype)  \
- case bfd_rtype: return &ppc_coff_howto_table[ppc_rtype]
-
-static reloc_howto_type *
-ppc_coff_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			    bfd_reloc_code_real_type code)
-{
-  switch (code)
-    {
-      HOW2MAP(BFD_RELOC_32_GOTOFF,    IMAGE_REL_PPC_IMGLUE);
-      HOW2MAP(BFD_RELOC_16_GOT_PCREL, IMAGE_REL_PPC_IFGLUE);
-      HOW2MAP(BFD_RELOC_16,	      IMAGE_REL_PPC_ADDR16);
-      HOW2MAP(BFD_RELOC_PPC_B26,      IMAGE_REL_PPC_REL24);
-      HOW2MAP(BFD_RELOC_PPC_BA26,     IMAGE_REL_PPC_ADDR24);
-      HOW2MAP(BFD_RELOC_PPC_TOC16,    IMAGE_REL_PPC_TOCREL16);
-      HOW2MAP(BFD_RELOC_16_GOTOFF,    IMAGE_REL_PPC_TOCREL16_DEFN);
-      HOW2MAP(BFD_RELOC_32,	      IMAGE_REL_PPC_ADDR32);
-      HOW2MAP(BFD_RELOC_RVA,	      IMAGE_REL_PPC_ADDR32NB);
-    default:
-      return NULL;
-    }
-}
-#undef HOW2MAP
-
-static reloc_howto_type *
-ppc_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			    const char *r_name)
-{
-  unsigned int i;
-
-  for (i = 0;
-       i < sizeof (ppc_coff_howto_table) / sizeof (ppc_coff_howto_table[0]);
-       i++)
-    if (ppc_coff_howto_table[i].name != NULL
-	&& strcasecmp (ppc_coff_howto_table[i].name, r_name) == 0)
-      return &ppc_coff_howto_table[i];
-
-  return NULL;
-}
-
-/* Tailor coffcode.h -- macro heaven.  */
-
-#define RTYPE2HOWTO(cache_ptr, dst)  ppc_coff_rtype2howto (cache_ptr, dst)
-
-/* We use the special COFF backend linker, with our own special touch.  */
-
-#define coff_bfd_reloc_type_lookup   ppc_coff_reloc_type_lookup
-#define coff_bfd_reloc_name_lookup ppc_coff_reloc_name_lookup
-#define coff_rtype_to_howto	     coff_ppc_rtype_to_howto
-#define coff_relocate_section	     coff_ppc_relocate_section
-#define coff_bfd_final_link	     ppc_bfd_coff_final_link
-
-#ifndef COFF_IMAGE_WITH_PE
-#endif
-
-#define SELECT_RELOC(internal, howto) {internal.r_type=howto->type;}
-
-#define COFF_PAGE_SIZE			     0x1000
-
-/* FIXME: This controls some code that used to be in peicode.h and is
-   now in peigen.c.  It will not control the code in peigen.c.  If
-   anybody wants to get this working, you will need to fix that.  */
-#define POWERPC_LE_PE
-
-#define COFF_SECTION_ALIGNMENT_ENTRIES \
-{ COFF_SECTION_NAME_EXACT_MATCH (".idata$2"), \
-  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
-{ COFF_SECTION_NAME_EXACT_MATCH (".idata$3"), \
-  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
-{ COFF_SECTION_NAME_EXACT_MATCH (".idata$4"), \
-  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
-{ COFF_SECTION_NAME_EXACT_MATCH (".idata$5"), \
-  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
-{ COFF_SECTION_NAME_EXACT_MATCH (".idata$6"), \
-  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 1 }, \
-{ COFF_SECTION_NAME_EXACT_MATCH (".reloc"), \
-  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 1 }
-
-#include "coffcode.h"
-
-#ifndef COFF_IMAGE_WITH_PE
-
-static bfd_boolean
-ppc_do_last (bfd *abfd)
-{
-  if (abfd == bfd_of_toc_owner)
-    return TRUE;
-  else
-    return FALSE;
-}
-
-static bfd *
-ppc_get_last (void)
-{
-  return bfd_of_toc_owner;
-}
-
-/* This piece of machinery exists only to guarantee that the bfd that holds
-   the toc section is written last.
-
-   This does depend on bfd_make_section attaching a new section to the
-   end of the section list for the bfd.
-
-   This is otherwise intended to be functionally the same as
-   cofflink.c:_bfd_coff_final_link(). It is specifically different only
-   where the POWERPC_LE_PE macro modifies the code. It is left in as a
-   precise form of comment. krk@cygnus.com  */
-
-/* Do the final link step.  */
-
-bfd_boolean
-ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info)
-{
-  bfd_size_type symesz;
-  struct coff_final_link_info flaginfo;
-  bfd_boolean debug_merge_allocated;
-  asection *o;
-  struct bfd_link_order *p;
-  bfd_size_type max_sym_count;
-  bfd_size_type max_lineno_count;
-  bfd_size_type max_reloc_count;
-  bfd_size_type max_output_reloc_count;
-  bfd_size_type max_contents_size;
-  file_ptr rel_filepos;
-  unsigned int relsz;
-  file_ptr line_filepos;
-  unsigned int linesz;
-  bfd *sub;
-  bfd_byte *external_relocs = NULL;
-  char strbuf[STRING_SIZE_SIZE];
-  bfd_size_type amt;
-
-  symesz = bfd_coff_symesz (abfd);
-
-  flaginfo.info = info;
-  flaginfo.output_bfd = abfd;
-  flaginfo.strtab = NULL;
-  flaginfo.section_info = NULL;
-  flaginfo.last_file_index = -1;
-  flaginfo.last_bf_index = -1;
-  flaginfo.internal_syms = NULL;
-  flaginfo.sec_ptrs = NULL;
-  flaginfo.sym_indices = NULL;
-  flaginfo.outsyms = NULL;
-  flaginfo.linenos = NULL;
-  flaginfo.contents = NULL;
-  flaginfo.external_relocs = NULL;
-  flaginfo.internal_relocs = NULL;
-  debug_merge_allocated = FALSE;
-
-  coff_data (abfd)->link_info = info;
-
-  flaginfo.strtab = _bfd_stringtab_init ();
-  if (flaginfo.strtab == NULL)
-    goto error_return;
-
-  if (! coff_debug_merge_hash_table_init (&flaginfo.debug_merge))
-    goto error_return;
-  debug_merge_allocated = TRUE;
-
-  /* Compute the file positions for all the sections.  */
-  if (! abfd->output_has_begun)
-    {
-      if (! bfd_coff_compute_section_file_positions (abfd))
-	return FALSE;
-    }
-
-  /* Count the line numbers and relocation entries required for the
-     output file.  Set the file positions for the relocs.  */
-  rel_filepos = obj_relocbase (abfd);
-  relsz = bfd_coff_relsz (abfd);
-  max_contents_size = 0;
-  max_lineno_count = 0;
-  max_reloc_count = 0;
-
-  for (o = abfd->sections; o != NULL; o = o->next)
-    {
-      o->reloc_count = 0;
-      o->lineno_count = 0;
-
-      for (p = o->map_head.link_order; p != NULL; p = p->next)
-	{
-	  if (p->type == bfd_indirect_link_order)
-	    {
-	      asection *sec;
-
-	      sec = p->u.indirect.section;
-
-	      /* Mark all sections which are to be included in the
-		 link.  This will normally be every section.  We need
-		 to do this so that we can identify any sections which
-		 the linker has decided to not include.  */
-	      sec->linker_mark = TRUE;
-
-	      if (info->strip == strip_none
-		  || info->strip == strip_some)
-		o->lineno_count += sec->lineno_count;
-
-	      if (bfd_link_relocatable (info))
-		o->reloc_count += sec->reloc_count;
-
-	      if (sec->rawsize > max_contents_size)
-		max_contents_size = sec->rawsize;
-	      if (sec->size > max_contents_size)
-		max_contents_size = sec->size;
-	      if (sec->lineno_count > max_lineno_count)
-		max_lineno_count = sec->lineno_count;
-	      if (sec->reloc_count > max_reloc_count)
-		max_reloc_count = sec->reloc_count;
-	    }
-	  else if (bfd_link_relocatable (info)
-		   && (p->type == bfd_section_reloc_link_order
-		       || p->type == bfd_symbol_reloc_link_order))
-	    ++o->reloc_count;
-	}
-      if (o->reloc_count == 0)
-	o->rel_filepos = 0;
-      else
-	{
-	  o->flags |= SEC_RELOC;
-	  o->rel_filepos = rel_filepos;
-	  rel_filepos += o->reloc_count * relsz;
-	}
-    }
-
-  /* If doing a relocatable link, allocate space for the pointers we
-     need to keep.  */
-  if (bfd_link_relocatable (info))
-    {
-      unsigned int i;
-
-      /* We use section_count + 1, rather than section_count, because
-	 the target_index fields are 1 based.  */
-      amt = abfd->section_count + 1;
-      amt *= sizeof (struct coff_link_section_info);
-      flaginfo.section_info = (struct coff_link_section_info *) bfd_malloc (amt);
-
-      if (flaginfo.section_info == NULL)
-	goto error_return;
-
-      for (i = 0; i <= abfd->section_count; i++)
-	{
-	  flaginfo.section_info[i].relocs = NULL;
-	  flaginfo.section_info[i].rel_hashes = NULL;
-	}
-    }
-
-  /* We now know the size of the relocs, so we can determine the file
-     positions of the line numbers.  */
-  line_filepos = rel_filepos;
-  linesz = bfd_coff_linesz (abfd);
-  max_output_reloc_count = 0;
-
-  for (o = abfd->sections; o != NULL; o = o->next)
-    {
-      if (o->lineno_count == 0)
-	o->line_filepos = 0;
-      else
-	{
-	  o->line_filepos = line_filepos;
-	  line_filepos += o->lineno_count * linesz;
-	}
-
-      if (o->reloc_count != 0)
-	{
-	  /* We don't know the indices of global symbols until we have
-	     written out all the local symbols.  For each section in
-	     the output file, we keep an array of pointers to hash
-	     table entries.  Each entry in the array corresponds to a
-	     reloc.  When we find a reloc against a global symbol, we
-	     set the corresponding entry in this array so that we can
-	     fix up the symbol index after we have written out all the
-	     local symbols.
-
-	     Because of this problem, we also keep the relocs in
-	     memory until the end of the link.  This wastes memory,
-	     but only when doing a relocatable link, which is not the
-	     common case.  */
-	  BFD_ASSERT (bfd_link_relocatable (info));
-	  amt = o->reloc_count;
-	  amt *= sizeof (struct internal_reloc);
-	  flaginfo.section_info[o->target_index].relocs =
-	    (struct internal_reloc *) bfd_malloc (amt);
-	  amt = o->reloc_count;
-	  amt *= sizeof (struct coff_link_hash_entry *);
-	  flaginfo.section_info[o->target_index].rel_hashes =
-	    (struct coff_link_hash_entry **) bfd_malloc (amt);
-	  if (flaginfo.section_info[o->target_index].relocs == NULL
-	      || flaginfo.section_info[o->target_index].rel_hashes == NULL)
-	    goto error_return;
-
-	  if (o->reloc_count > max_output_reloc_count)
-	    max_output_reloc_count = o->reloc_count;
-	}
-
-      /* Reset the reloc and lineno counts, so that we can use them to
-	 count the number of entries we have output so far.  */
-      o->reloc_count = 0;
-      o->lineno_count = 0;
-    }
-
-  obj_sym_filepos (abfd) = line_filepos;
-
-  /* Figure out the largest number of symbols in an input BFD.  Take
-     the opportunity to clear the output_has_begun fields of all the
-     input BFD's.  */
-  max_sym_count = 0;
-  for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
-    {
-      bfd_size_type sz;
-
-      sub->output_has_begun = FALSE;
-      sz = obj_raw_syment_count (sub);
-      if (sz > max_sym_count)
-	max_sym_count = sz;
-    }
-
-  /* Allocate some buffers used while linking.  */
-  amt = max_sym_count * sizeof (struct internal_syment);
-  flaginfo.internal_syms = (struct internal_syment *) bfd_malloc (amt);
-  amt = max_sym_count * sizeof (asection *);
-  flaginfo.sec_ptrs = (asection **) bfd_malloc (amt);
-  amt = max_sym_count * sizeof (long);
-  flaginfo.sym_indices = (long *) bfd_malloc (amt);
-  amt = (max_sym_count + 1) * symesz;
-  flaginfo.outsyms = (bfd_byte *) bfd_malloc (amt);
-  amt = max_lineno_count * bfd_coff_linesz (abfd);
-  flaginfo.linenos = (bfd_byte *) bfd_malloc (amt);
-  flaginfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
-  flaginfo.external_relocs = (bfd_byte *) bfd_malloc (max_reloc_count * relsz);
-  if (! bfd_link_relocatable (info))
-    {
-      amt = max_reloc_count * sizeof (struct internal_reloc);
-      flaginfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt);
-    }
-  if ((flaginfo.internal_syms == NULL && max_sym_count > 0)
-      || (flaginfo.sec_ptrs == NULL && max_sym_count > 0)
-      || (flaginfo.sym_indices == NULL && max_sym_count > 0)
-      || flaginfo.outsyms == NULL
-      || (flaginfo.linenos == NULL && max_lineno_count > 0)
-      || (flaginfo.contents == NULL && max_contents_size > 0)
-      || (flaginfo.external_relocs == NULL && max_reloc_count > 0)
-      || (! bfd_link_relocatable (info)
-	  && flaginfo.internal_relocs == NULL
-	  && max_reloc_count > 0))
-    goto error_return;
-
-  /* We now know the position of everything in the file, except that
-     we don't know the size of the symbol table and therefore we don't
-     know where the string table starts.  We just build the string
-     table in memory as we go along.  We process all the relocations
-     for a single input file at once.  */
-  obj_raw_syment_count (abfd) = 0;
-
-  if (coff_backend_info (abfd)->_bfd_coff_start_final_link)
-    {
-      if (! bfd_coff_start_final_link (abfd, info))
-	goto error_return;
-    }
-
-  for (o = abfd->sections; o != NULL; o = o->next)
-    {
-      for (p = o->map_head.link_order; p != NULL; p = p->next)
-	{
-	  if (p->type == bfd_indirect_link_order
-	      && (bfd_get_flavour (p->u.indirect.section->owner)
-		  == bfd_target_coff_flavour))
-	    {
-	      sub = p->u.indirect.section->owner;
-#ifdef POWERPC_LE_PE
-	      if (! sub->output_has_begun && !ppc_do_last(sub))
-#else
-	      if (! sub->output_has_begun)
-#endif
-		{
-		  if (! _bfd_coff_link_input_bfd (&flaginfo, sub))
-		    goto error_return;
-		  sub->output_has_begun = TRUE;
-		}
-	    }
-	  else if (p->type == bfd_section_reloc_link_order
-		   || p->type == bfd_symbol_reloc_link_order)
-	    {
-	      if (! _bfd_coff_reloc_link_order (abfd, &flaginfo, o, p))
-		goto error_return;
-	    }
-	  else
-	    {
-	      if (! _bfd_default_link_order (abfd, info, o, p))
-		goto error_return;
-	    }
-	}
-    }
-
-#ifdef POWERPC_LE_PE
-  {
-    bfd* last_one = ppc_get_last();
-    if (last_one)
-      {
-	if (! _bfd_coff_link_input_bfd (&flaginfo, last_one))
-	  goto error_return;
-      }
-    last_one->output_has_begun = TRUE;
-  }
-#endif
-
-  /* Free up the buffers used by _bfd_coff_link_input_bfd.  */
-  coff_debug_merge_hash_table_free (&flaginfo.debug_merge);
-  debug_merge_allocated = FALSE;
-
-  if (flaginfo.internal_syms != NULL)
-    {
-      free (flaginfo.internal_syms);
-      flaginfo.internal_syms = NULL;
-    }
-  if (flaginfo.sec_ptrs != NULL)
-    {
-      free (flaginfo.sec_ptrs);
-      flaginfo.sec_ptrs = NULL;
-    }
-  if (flaginfo.sym_indices != NULL)
-    {
-      free (flaginfo.sym_indices);
-      flaginfo.sym_indices = NULL;
-    }
-  if (flaginfo.linenos != NULL)
-    {
-      free (flaginfo.linenos);
-      flaginfo.linenos = NULL;
-    }
-  if (flaginfo.contents != NULL)
-    {
-      free (flaginfo.contents);
-      flaginfo.contents = NULL;
-    }
-  if (flaginfo.external_relocs != NULL)
-    {
-      free (flaginfo.external_relocs);
-      flaginfo.external_relocs = NULL;
-    }
-  if (flaginfo.internal_relocs != NULL)
-    {
-      free (flaginfo.internal_relocs);
-      flaginfo.internal_relocs = NULL;
-    }
-
-  /* The value of the last C_FILE symbol is supposed to be the symbol
-     index of the first external symbol.  Write it out again if
-     necessary.  */
-  if (flaginfo.last_file_index != -1
-      && (unsigned int) flaginfo.last_file.n_value != obj_raw_syment_count (abfd))
-    {
-      file_ptr pos;
-
-      flaginfo.last_file.n_value = obj_raw_syment_count (abfd);
-      bfd_coff_swap_sym_out (abfd, &flaginfo.last_file,
-			     flaginfo.outsyms);
-      pos = obj_sym_filepos (abfd) + flaginfo.last_file_index * symesz;
-      if (bfd_seek (abfd, pos, SEEK_SET) != 0
-	  || bfd_bwrite (flaginfo.outsyms, symesz, abfd) != symesz)
-	return FALSE;
-    }
-
-  /* Write out the global symbols.  */
-  flaginfo.failed = FALSE;
-  bfd_hash_traverse (&info->hash->table, _bfd_coff_write_global_sym, &flaginfo);
-  if (flaginfo.failed)
-    goto error_return;
-
-  /* The outsyms buffer is used by _bfd_coff_write_global_sym.  */
-  if (flaginfo.outsyms != NULL)
-    {
-      free (flaginfo.outsyms);
-      flaginfo.outsyms = NULL;
-    }
-
-  if (bfd_link_relocatable (info))
-    {
-      /* Now that we have written out all the global symbols, we know
-	 the symbol indices to use for relocs against them, and we can
-	 finally write out the relocs.  */
-      amt = max_output_reloc_count * relsz;
-      external_relocs = (bfd_byte *) bfd_malloc (amt);
-      if (external_relocs == NULL)
-	goto error_return;
-
-      for (o = abfd->sections; o != NULL; o = o->next)
-	{
-	  struct internal_reloc *irel;
-	  struct internal_reloc *irelend;
-	  struct coff_link_hash_entry **rel_hash;
-	  bfd_byte *erel;
-
-	  if (o->reloc_count == 0)
-	    continue;
-
-	  irel = flaginfo.section_info[o->target_index].relocs;
-	  irelend = irel + o->reloc_count;
-	  rel_hash = flaginfo.section_info[o->target_index].rel_hashes;
-	  erel = external_relocs;
-	  for (; irel < irelend; irel++, rel_hash++, erel += relsz)
-	    {
-	      if (*rel_hash != NULL)
-		{
-		  BFD_ASSERT ((*rel_hash)->indx >= 0);
-		  irel->r_symndx = (*rel_hash)->indx;
-		}
-	      bfd_coff_swap_reloc_out (abfd, irel, erel);
-	    }
-
-	  amt = relsz * o->reloc_count;
-	  if (bfd_seek (abfd, o->rel_filepos, SEEK_SET) != 0
-	      || bfd_bwrite (external_relocs, amt, abfd) != amt)
-	    goto error_return;
-	}
-
-      free (external_relocs);
-      external_relocs = NULL;
-    }
-
-  /* Free up the section information.  */
-  if (flaginfo.section_info != NULL)
-    {
-      unsigned int i;
-
-      for (i = 0; i < abfd->section_count; i++)
-	{
-	  if (flaginfo.section_info[i].relocs != NULL)
-	    free (flaginfo.section_info[i].relocs);
-	  if (flaginfo.section_info[i].rel_hashes != NULL)
-	    free (flaginfo.section_info[i].rel_hashes);
-	}
-      free (flaginfo.section_info);
-      flaginfo.section_info = NULL;
-    }
-
-  /* If we have optimized stabs strings, output them.  */
-  if (coff_hash_table (info)->stab_info.stabstr != NULL)
-    {
-      if (! _bfd_write_stab_strings (abfd, &coff_hash_table (info)->stab_info))
-	return FALSE;
-    }
-
-  /* Write out the string table.  */
-  if (obj_raw_syment_count (abfd) != 0)
-    {
-      file_ptr pos;
-
-      pos = obj_sym_filepos (abfd) + obj_raw_syment_count (abfd) * symesz;
-      if (bfd_seek (abfd, pos, SEEK_SET) != 0)
-	return FALSE;
-
-#if STRING_SIZE_SIZE == 4
-      H_PUT_32 (abfd,
-		_bfd_stringtab_size (flaginfo.strtab) + STRING_SIZE_SIZE,
-		strbuf);
-#else
- #error Change H_PUT_32 above
-#endif
-
-      if (bfd_bwrite (strbuf, (bfd_size_type) STRING_SIZE_SIZE, abfd)
-	  != STRING_SIZE_SIZE)
-	return FALSE;
-
-      if (! _bfd_stringtab_emit (abfd, flaginfo.strtab))
-	return FALSE;
-    }
-
-  _bfd_stringtab_free (flaginfo.strtab);
-
-  /* Setting symcount to 0 will cause write_object_contents to
-     not try to write out the symbols.  */
-  abfd->symcount = 0;
-
-  return TRUE;
-
- error_return:
-  if (debug_merge_allocated)
-    coff_debug_merge_hash_table_free (&flaginfo.debug_merge);
-  if (flaginfo.strtab != NULL)
-    _bfd_stringtab_free (flaginfo.strtab);
-  if (flaginfo.section_info != NULL)
-    {
-      unsigned int i;
-
-      for (i = 0; i < abfd->section_count; i++)
-	{
-	  if (flaginfo.section_info[i].relocs != NULL)
-	    free (flaginfo.section_info[i].relocs);
-	  if (flaginfo.section_info[i].rel_hashes != NULL)
-	    free (flaginfo.section_info[i].rel_hashes);
-	}
-      free (flaginfo.section_info);
-    }
-  if (flaginfo.internal_syms != NULL)
-    free (flaginfo.internal_syms);
-  if (flaginfo.sec_ptrs != NULL)
-    free (flaginfo.sec_ptrs);
-  if (flaginfo.sym_indices != NULL)
-    free (flaginfo.sym_indices);
-  if (flaginfo.outsyms != NULL)
-    free (flaginfo.outsyms);
-  if (flaginfo.linenos != NULL)
-    free (flaginfo.linenos);
-  if (flaginfo.contents != NULL)
-    free (flaginfo.contents);
-  if (flaginfo.external_relocs != NULL)
-    free (flaginfo.external_relocs);
-  if (flaginfo.internal_relocs != NULL)
-    free (flaginfo.internal_relocs);
-  if (external_relocs != NULL)
-    free (external_relocs);
-  return FALSE;
-}
-#endif
-
-/* Forward declaration for use by alternative_target field.  */
-#ifdef TARGET_BIG_SYM
-extern const bfd_target TARGET_BIG_SYM;
-#endif
-
-/* The transfer vectors that lead the outside world to all of the above.  */
-
-#ifdef TARGET_LITTLE_SYM
-const bfd_target TARGET_LITTLE_SYM =
-{
-  TARGET_LITTLE_NAME,		/* name or coff-arm-little */
-  bfd_target_coff_flavour,
-  BFD_ENDIAN_LITTLE,		/* data byte order is little */
-  BFD_ENDIAN_LITTLE,		/* header byte order is little */
-
-  (HAS_RELOC | EXEC_P		/* FIXME: object flags */
-   | HAS_LINENO | HAS_DEBUG
-   | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
-
-#ifndef COFF_WITH_PE
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
-   | SEC_RELOC),		/* section flags */
-#else
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
-   | SEC_RELOC | SEC_LINK_ONCE | SEC_LINK_DUPLICATES),
-#endif
-
-  0,				/* leading char */
-  '/',				/* ar_pad_char */
-  15,				/* ar_max_namelen??? FIXMEmgo */
-  0,				/* match priority.  */
-
-  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
-  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
-  bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
-
-  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
-  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
-  bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
-
-  {				/* bfd_check_format */
-    _bfd_dummy_target,
-    coff_object_p,
-    bfd_generic_archive_p,
-    coff_object_p
-  },
-  {				/* bfd_set_format */
-    _bfd_bool_bfd_false_error,
-    coff_mkobject,
-    _bfd_generic_mkarchive,
-    _bfd_bool_bfd_false_error
-  },
-  {				/* bfd_write_contents */
-    _bfd_bool_bfd_false_error,
-    coff_write_object_contents,
-    _bfd_write_archive_contents,
-    _bfd_bool_bfd_false_error
-  },
-
-  BFD_JUMP_TABLE_GENERIC (coff),
-  BFD_JUMP_TABLE_COPY (coff),
-  BFD_JUMP_TABLE_CORE (_bfd_nocore),
-  BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
-  BFD_JUMP_TABLE_SYMBOLS (coff),
-  BFD_JUMP_TABLE_RELOCS (coff),
-  BFD_JUMP_TABLE_WRITE (coff),
-  BFD_JUMP_TABLE_LINK (coff),
-  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
-
-  /* Alternative_target.  */
-#ifdef TARGET_BIG_SYM
-  &TARGET_BIG_SYM,
-#else
-  NULL,
-#endif
-
-  COFF_SWAP_TABLE
-};
-#endif
-
-#ifdef TARGET_BIG_SYM
-const bfd_target TARGET_BIG_SYM =
-{
-  TARGET_BIG_NAME,
-  bfd_target_coff_flavour,
-  BFD_ENDIAN_BIG,		/* data byte order is big */
-  BFD_ENDIAN_BIG,		/* header byte order is big */
-
-  (HAS_RELOC | EXEC_P		/* FIXME: object flags */
-   | HAS_LINENO | HAS_DEBUG
-   | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
-
-#ifndef COFF_WITH_PE
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
-   | SEC_RELOC),		/* section flags */
-#else
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
-   | SEC_RELOC | SEC_LINK_ONCE | SEC_LINK_DUPLICATES),
-#endif
-
-  0,				/* leading char */
-  '/',				/* ar_pad_char */
-  15,				/* ar_max_namelen??? FIXMEmgo */
-  0,				/* match priority.  */
-
-  bfd_getb64, bfd_getb_signed_64, bfd_putb64,
-  bfd_getb32, bfd_getb_signed_32, bfd_putb32,
-  bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
-
-  bfd_getb64, bfd_getb_signed_64, bfd_putb64,
-  bfd_getb32, bfd_getb_signed_32, bfd_putb32,
-  bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
-
-  {				/* bfd_check_format */
-    _bfd_dummy_target,
-    coff_object_p,
-    bfd_generic_archive_p,
-    coff_object_p
-  },
-  {				/* bfd_set_format */
-    _bfd_bool_bfd_false_error,
-    coff_mkobject,
-    _bfd_generic_mkarchive,
-    _bfd_bool_bfd_false_error
-  },
-  {				/* bfd_write_contents */
-    _bfd_bool_bfd_false_error,
-    coff_write_object_contents,
-    _bfd_write_archive_contents,
-    _bfd_bool_bfd_false_error
-  },
-
-  BFD_JUMP_TABLE_GENERIC (coff),
-  BFD_JUMP_TABLE_COPY (coff),
-  BFD_JUMP_TABLE_CORE (_bfd_nocore),
-  BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
-  BFD_JUMP_TABLE_SYMBOLS (coff),
-  BFD_JUMP_TABLE_RELOCS (coff),
-  BFD_JUMP_TABLE_WRITE (coff),
-  BFD_JUMP_TABLE_LINK (coff),
-  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
-
-  /* Alternative_target.  */
-#ifdef TARGET_LITTLE_SYM
-  &TARGET_LITTLE_SYM,
-#else
-  NULL,
-#endif
-
-  COFF_SWAP_TABLE
-};
-
-#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-riscv64.c ./bfd/coff-riscv64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-riscv64.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/coff-riscv64.c	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,130 @@
+/* BFD back-end for RISC-V 64-bit COFF files.
+   Copyright (C) 2023-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "coff/riscv64.h"
+#include "coff/internal.h"
+#include "coff/pe.h"
+#include "libcoff.h"
+#include "libiberty.h"
+
+#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER  2
+
+#ifndef bfd_pe_print_pdata
+#define bfd_pe_print_pdata      NULL
+#endif
+
+#define RTYPE2HOWTO(cache_ptr, dst)             \
+  (cache_ptr)->howto = NULL
+
+/* Return TRUE if this relocation should
+   appear in the output .reloc section.  */
+
+static bool
+in_reloc_p (bfd *abfd ATTRIBUTE_UNUSED,
+	    reloc_howto_type *howto)
+{
+  return !howto->pc_relative;
+}
+
+#include "coffcode.h"
+
+/* Target vectors.  */
+const bfd_target
+#ifdef TARGET_SYM
+  TARGET_SYM =
+#else
+  riscv64_coff_vec =
+#endif
+{
+#ifdef TARGET_NAME
+  TARGET_NAME,
+#else
+ "coff-riscv64-little",		/* Name.  */
+#endif
+  bfd_target_coff_flavour,
+  BFD_ENDIAN_LITTLE,		/* Data byte order is little.  */
+  BFD_ENDIAN_LITTLE,		/* Header byte order is little.  */
+
+  (HAS_RELOC | EXEC_P		/* Object flags.  */
+   | HAS_LINENO | HAS_DEBUG
+   | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
+
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags.  */
+#if defined(COFF_WITH_PE)
+   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
+#endif
+   | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
+
+#ifdef TARGET_UNDERSCORE
+  TARGET_UNDERSCORE,		/* Leading underscore.  */
+#else
+  0,				/* Leading underscore.  */
+#endif
+  '/',				/* Ar_pad_char.  */
+  15,				/* Ar_max_namelen.  */
+  0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
+
+     /* Data conversion functions.  */
+     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data.  */
+     /* Header conversion functions.  */
+     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs.  */
+
+  /* Note that we allow an object file to be treated as a core file as well.  */
+  {				/* bfd_check_format.  */
+    _bfd_dummy_target,
+    coff_object_p,
+    bfd_generic_archive_p,
+    coff_object_p
+  },
+  {				/* bfd_set_format.  */
+    _bfd_bool_bfd_false_error,
+    coff_mkobject,
+    _bfd_generic_mkarchive,
+    _bfd_bool_bfd_false_error
+  },
+  {				/* bfd_write_contents.  */
+    _bfd_bool_bfd_false_error,
+    coff_write_object_contents,
+    _bfd_write_archive_contents,
+    _bfd_bool_bfd_false_error
+  },
+
+  BFD_JUMP_TABLE_GENERIC (coff),
+  BFD_JUMP_TABLE_COPY (coff),
+  BFD_JUMP_TABLE_CORE (_bfd_nocore),
+  BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
+  BFD_JUMP_TABLE_SYMBOLS (coff),
+  BFD_JUMP_TABLE_RELOCS (coff),
+  BFD_JUMP_TABLE_WRITE (coff),
+  BFD_JUMP_TABLE_LINK (coff),
+  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+  NULL,
+
+  COFF_SWAP_TABLE
+};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-rs6000.c ./bfd/coff-rs6000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-rs6000.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-rs6000.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for IBM RS/6000 "XCOFF" files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Metin G. Ozisik, Mimi Phuong-Thao Vo, and John Gilmore.
    Archive support from Damon A. Permezel.
    Contributed by IBM Corporation and Cygnus Support.
@@ -32,19 +32,19 @@
 #include "libcoff.h"
 #include "libxcoff.h"
 
-extern bfd_boolean _bfd_xcoff_mkobject (bfd *);
-extern bfd_boolean _bfd_xcoff_copy_private_bfd_data (bfd *, bfd *);
-extern bfd_boolean _bfd_xcoff_is_local_label_name (bfd *, const char *);
+extern bool _bfd_xcoff_mkobject (bfd *);
+extern bool _bfd_xcoff_copy_private_bfd_data (bfd *, bfd *);
+extern bool _bfd_xcoff_is_local_label_name (bfd *, const char *);
 extern reloc_howto_type *_bfd_xcoff_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-extern bfd_boolean _bfd_xcoff_slurp_armap (bfd *);
-extern const bfd_target *_bfd_xcoff_archive_p (bfd *);
+extern bool _bfd_xcoff_slurp_armap (bfd *);
+extern bfd_cleanup _bfd_xcoff_archive_p (bfd *);
 extern void * _bfd_xcoff_read_ar_hdr (bfd *);
 extern bfd *_bfd_xcoff_openr_next_archived_file (bfd *, bfd *);
 extern int _bfd_xcoff_stat_arch_elt (bfd *, struct stat *);
-extern bfd_boolean _bfd_xcoff_write_armap
+extern bool _bfd_xcoff_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int);
-extern bfd_boolean _bfd_xcoff_write_archive_contents (bfd *);
+extern bool _bfd_xcoff_write_archive_contents (bfd *);
 extern int _bfd_xcoff_sizeof_headers (bfd *, struct bfd_link_info *);
 extern void _bfd_xcoff_swap_sym_in (bfd *, void *, void *);
 extern unsigned int _bfd_xcoff_swap_sym_out (bfd *, void *, void *);
@@ -77,8 +77,8 @@ void xcoff_rtype2howto (arelent *, struc
 #define coff_mkobject _bfd_xcoff_mkobject
 #define coff_bfd_is_local_label_name _bfd_xcoff_is_local_label_name
 #ifdef AIX_CORE
-extern const bfd_target * rs6000coff_core_p (bfd *abfd);
-extern bfd_boolean rs6000coff_core_file_matches_executable_p
+extern bfd_cleanup rs6000coff_core_p (bfd *abfd);
+extern bool rs6000coff_core_file_matches_executable_p
   (bfd *cbfd, bfd *ebfd);
 extern char *rs6000coff_core_file_failing_command (bfd *abfd);
 extern int rs6000coff_core_file_failing_signal (bfd *abfd);
@@ -119,81 +119,99 @@ extern int rs6000coff_core_file_failing_
 /* The main body of code is in coffcode.h.  */
 
 static const char *normalize_filename (bfd *);
-static bfd_boolean xcoff_write_armap_old
+static bool xcoff_write_armap_old
   (bfd *, unsigned int, struct orl *, unsigned int, int);
-static bfd_boolean xcoff_write_armap_big
+static bool xcoff_write_armap_big
   (bfd *, unsigned int, struct orl *, unsigned int, int);
-static bfd_boolean xcoff_write_archive_contents_old (bfd *);
-static bfd_boolean xcoff_write_archive_contents_big (bfd *);
+static bool xcoff_write_archive_contents_old (bfd *);
+static bool xcoff_write_archive_contents_big (bfd *);
 static void xcoff_swap_ldhdr_in (bfd *, const void *, struct internal_ldhdr *);
 static void xcoff_swap_ldhdr_out (bfd *, const struct internal_ldhdr *, void *);
 static void xcoff_swap_ldsym_in (bfd *, const void *, struct internal_ldsym *);
 static void xcoff_swap_ldsym_out (bfd *, const struct internal_ldsym *, void *);
 static void xcoff_swap_ldrel_in (bfd *, const void *, struct internal_ldrel *);
 static void xcoff_swap_ldrel_out (bfd *, const struct internal_ldrel *, void *);
-static bfd_boolean xcoff_ppc_relocate_section
+static bool xcoff_ppc_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    struct internal_reloc *, struct internal_syment *, asection **);
-static bfd_boolean _bfd_xcoff_put_ldsymbol_name
+static bool _bfd_xcoff_put_ldsymbol_name
   (bfd *, struct xcoff_loader_info *, struct internal_ldsym *, const char *);
 static asection *xcoff_create_csect_from_smclas
   (bfd *, union internal_auxent *, const char *);
-static bfd_boolean xcoff_is_lineno_count_overflow (bfd *, bfd_vma);
-static bfd_boolean xcoff_is_reloc_count_overflow (bfd *, bfd_vma);
+static bool xcoff_is_lineno_count_overflow (bfd *, bfd_vma);
+static bool xcoff_is_reloc_count_overflow (bfd *, bfd_vma);
 static bfd_vma xcoff_loader_symbol_offset (bfd *, struct internal_ldhdr *);
 static bfd_vma xcoff_loader_reloc_offset (bfd *, struct internal_ldhdr *);
-static bfd_boolean xcoff_generate_rtinit
-  (bfd *, const char *, const char *, bfd_boolean);
-static bfd_boolean do_pad (bfd *, unsigned int);
-static bfd_boolean do_copy (bfd *, bfd *);
+static bool xcoff_generate_rtinit
+  (bfd *, const char *, const char *, bool);
+static bool do_pad (bfd *, unsigned int);
+static bool do_copy (bfd *, bfd *);
 
 /* Relocation functions */
-static bfd_boolean xcoff_reloc_type_br (XCOFF_RELOC_FUNCTION_ARGS);
+static xcoff_reloc_function xcoff_reloc_type_br;
 
-static bfd_boolean xcoff_complain_overflow_dont_func
-  (XCOFF_COMPLAIN_FUNCTION_ARGS);
-static bfd_boolean xcoff_complain_overflow_bitfield_func
-  (XCOFF_COMPLAIN_FUNCTION_ARGS);
-static bfd_boolean xcoff_complain_overflow_signed_func
-  (XCOFF_COMPLAIN_FUNCTION_ARGS);
-static bfd_boolean xcoff_complain_overflow_unsigned_func
-  (XCOFF_COMPLAIN_FUNCTION_ARGS);
-
-bfd_boolean (*xcoff_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION])
-  (XCOFF_RELOC_FUNCTION_ARGS) =
-{
-  xcoff_reloc_type_pos,	 /* R_POS   (0x00) */
-  xcoff_reloc_type_neg,	 /* R_NEG   (0x01) */
-  xcoff_reloc_type_rel,	 /* R_REL   (0x02) */
-  xcoff_reloc_type_toc,	 /* R_TOC   (0x03) */
-  xcoff_reloc_type_fail, /* R_RTB   (0x04) */
-  xcoff_reloc_type_toc,	 /* R_GL    (0x05) */
-  xcoff_reloc_type_toc,	 /* R_TCL   (0x06) */
-  xcoff_reloc_type_fail, /*	    (0x07) */
-  xcoff_reloc_type_ba,	 /* R_BA    (0x08) */
-  xcoff_reloc_type_fail, /*	    (0x09) */
-  xcoff_reloc_type_br,	 /* R_BR    (0x0a) */
-  xcoff_reloc_type_fail, /*	    (0x0b) */
-  xcoff_reloc_type_pos,	 /* R_RL    (0x0c) */
-  xcoff_reloc_type_pos,	 /* R_RLA   (0x0d) */
-  xcoff_reloc_type_fail, /*	    (0x0e) */
+static xcoff_complain_function xcoff_complain_overflow_dont_func;
+static xcoff_complain_function xcoff_complain_overflow_bitfield_func;
+static xcoff_complain_function xcoff_complain_overflow_signed_func;
+static xcoff_complain_function xcoff_complain_overflow_unsigned_func;
+
+xcoff_reloc_function *const
+xcoff_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION] =
+{
+  xcoff_reloc_type_pos,  /* R_POS   (0x00) */
+  xcoff_reloc_type_neg,  /* R_NEG   (0x01) */
+  xcoff_reloc_type_rel,  /* R_REL   (0x02) */
+  xcoff_reloc_type_toc,  /* R_TOC   (0x03) */
+  xcoff_reloc_type_toc,  /* R_TRL   (0x04) */
+  xcoff_reloc_type_toc,  /* R_GL    (0x05) */
+  xcoff_reloc_type_toc,  /* R_TCL   (0x06) */
+  xcoff_reloc_type_fail, /*         (0x07) */
+  xcoff_reloc_type_ba,   /* R_BA    (0x08) */
+  xcoff_reloc_type_fail, /*         (0x09) */
+  xcoff_reloc_type_br,   /* R_BR    (0x0a) */
+  xcoff_reloc_type_fail, /*         (0x0b) */
+  xcoff_reloc_type_pos,  /* R_RL    (0x0c) */
+  xcoff_reloc_type_pos,  /* R_RLA   (0x0d) */
+  xcoff_reloc_type_fail, /*         (0x0e) */
   xcoff_reloc_type_noop, /* R_REF   (0x0f) */
-  xcoff_reloc_type_fail, /*	    (0x10) */
-  xcoff_reloc_type_fail, /*	    (0x11) */
-  xcoff_reloc_type_toc,	 /* R_TRL   (0x12) */
-  xcoff_reloc_type_toc,	 /* R_TRLA  (0x13) */
+  xcoff_reloc_type_fail, /*         (0x10) */
+  xcoff_reloc_type_fail, /*         (0x11) */
+  xcoff_reloc_type_fail, /*         (0x12) */
+  xcoff_reloc_type_toc,  /* R_TRLA  (0x13) */
   xcoff_reloc_type_fail, /* R_RRTBI (0x14) */
   xcoff_reloc_type_fail, /* R_RRTBA (0x15) */
-  xcoff_reloc_type_ba,	 /* R_CAI   (0x16) */
+  xcoff_reloc_type_ba,   /* R_CAI   (0x16) */
   xcoff_reloc_type_crel, /* R_CREL  (0x17) */
-  xcoff_reloc_type_ba,	 /* R_RBA   (0x18) */
-  xcoff_reloc_type_ba,	 /* R_RBAC  (0x19) */
-  xcoff_reloc_type_br,	 /* R_RBR   (0x1a) */
-  xcoff_reloc_type_ba,	 /* R_RBRC  (0x1b) */
+  xcoff_reloc_type_ba,   /* R_RBA   (0x18) */
+  xcoff_reloc_type_ba,   /* R_RBAC  (0x19) */
+  xcoff_reloc_type_br,   /* R_RBR   (0x1a) */
+  xcoff_reloc_type_ba,   /* R_RBRC  (0x1b) */
+  xcoff_reloc_type_fail, /*           (0x1c) */
+  xcoff_reloc_type_fail, /*           (0x1d) */
+  xcoff_reloc_type_fail, /*           (0x1e) */
+  xcoff_reloc_type_fail, /*           (0x1f) */
+  xcoff_reloc_type_tls,  /* R_TLS     (0x20) */
+  xcoff_reloc_type_tls,  /* R_TLS_IE  (0x21) */
+  xcoff_reloc_type_tls,  /* R_TLS_LD  (0x22) */
+  xcoff_reloc_type_tls,  /* R_TLS_LE  (0x23) */
+  xcoff_reloc_type_tls,  /* R_TLSM    (0x24) */
+  xcoff_reloc_type_tls,  /* R_TLSML   (0x25) */
+  xcoff_reloc_type_fail, /*           (0x26) */
+  xcoff_reloc_type_fail, /*           (0x27) */
+  xcoff_reloc_type_fail, /*           (0x28) */
+  xcoff_reloc_type_fail, /*           (0x29) */
+  xcoff_reloc_type_fail, /*           (0x2a) */
+  xcoff_reloc_type_fail, /*           (0x2b) */
+  xcoff_reloc_type_fail, /*           (0x2c) */
+  xcoff_reloc_type_fail, /*           (0x2d) */
+  xcoff_reloc_type_fail, /*           (0x2e) */
+  xcoff_reloc_type_fail, /*           (0x2f) */
+  xcoff_reloc_type_toc,  /* R_TOCU    (0x30) */
+  xcoff_reloc_type_toc,  /* R_TOCL    (0x31) */
 };
 
-bfd_boolean (*xcoff_complain_overflow[XCOFF_MAX_COMPLAIN_OVERFLOW])
-  (XCOFF_COMPLAIN_FUNCTION_ARGS) =
+xcoff_complain_function *const
+xcoff_complain_overflow[XCOFF_MAX_COMPLAIN_OVERFLOW] =
 {
   xcoff_complain_overflow_dont_func,
   xcoff_complain_overflow_bitfield_func,
@@ -300,11 +318,11 @@ archive_iterator_begin (struct archive_i
 /* Make ITERATOR visit the first unvisited archive member.  Return true
    on success; return false if all members have been visited.  */
 
-static bfd_boolean
+static bool
 archive_iterator_next (struct archive_iterator *iterator)
 {
   if (!iterator->next.member)
-    return FALSE;
+    return false;
 
   iterator->current = iterator->next;
   member_layout_init (&iterator->next, iterator->archive,
@@ -313,21 +331,21 @@ archive_iterator_next (struct archive_it
 		      + iterator->current.header_size
 		      + iterator->current.contents_size
 		      + iterator->current.trailing_padding);
-  return TRUE;
+  return true;
 }
 
 /* We use our own tdata type.  Its first field is the COFF tdata type,
    so the COFF routines are compatible.  */
 
-bfd_boolean
+bool
 _bfd_xcoff_mkobject (bfd *abfd)
 {
   coff_data_type *coff;
-  bfd_size_type amt = sizeof (struct xcoff_tdata);
+  size_t amt = sizeof (struct xcoff_tdata);
 
   abfd->tdata.xcoff_obj_data = (struct xcoff_tdata *) bfd_zalloc (abfd, amt);
   if (abfd->tdata.xcoff_obj_data == NULL)
-    return FALSE;
+    return false;
   coff = coff_data (abfd);
   coff->symbols = (coff_symbol_type *) NULL;
   coff->conversion_table = (unsigned int *) NULL;
@@ -346,19 +364,19 @@ _bfd_xcoff_mkobject (bfd *abfd)
   /* text section alignment is different than the default */
   bfd_xcoff_text_align_power (abfd) = 2;
 
-  return TRUE;
+  return true;
 }
 
 /* Copy XCOFF data from one BFD to another.  */
 
-bfd_boolean
+bool
 _bfd_xcoff_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   struct xcoff_tdata *ix, *ox;
   asection *sec;
 
   if (ibfd->xvec != obfd->xvec)
-    return TRUE;
+    return true;
   ix = xcoff_data (ibfd);
   ox = xcoff_data (obfd);
   ox->full_aouthdr = ix->full_aouthdr;
@@ -368,7 +386,7 @@ _bfd_xcoff_copy_private_bfd_data (bfd *i
   else
     {
       sec = coff_section_from_bfd_index (ibfd, ix->sntoc);
-      if (sec == NULL)
+      if (sec == NULL || sec->output_section == NULL)
 	ox->sntoc = 0;
       else
 	ox->sntoc = sec->output_section->target_index;
@@ -378,7 +396,7 @@ _bfd_xcoff_copy_private_bfd_data (bfd *i
   else
     {
       sec = coff_section_from_bfd_index (ibfd, ix->snentry);
-      if (sec == NULL)
+      if (sec == NULL || sec->output_section == NULL)
 	ox->snentry = 0;
       else
 	ox->snentry = sec->output_section->target_index;
@@ -389,7 +407,7 @@ _bfd_xcoff_copy_private_bfd_data (bfd *i
   ox->cputype = ix->cputype;
   ox->maxdata = ix->maxdata;
   ox->maxstack = ix->maxstack;
-  return TRUE;
+  return true;
 }
 
 /* I don't think XCOFF really has a notion of local labels based on
@@ -397,11 +415,11 @@ _bfd_xcoff_copy_private_bfd_data (bfd *i
    The AIX native linker does not have a -X option, and it ignores the
    -x option.  */
 
-bfd_boolean
+bool
 _bfd_xcoff_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 				const char *name ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
 void
@@ -452,43 +470,44 @@ _bfd_xcoff_swap_sym_out (bfd *abfd, void
 }
 
 void
-_bfd_xcoff_swap_aux_in (bfd *abfd, void * ext1, int type, int in_class,
-			int indx, int numaux, void * in1)
+_bfd_xcoff_swap_aux_in (bfd *abfd, void * ext1, int type ATTRIBUTE_UNUSED,
+			int in_class, int indx, int numaux, void * in1)
 {
   AUXENT * ext = (AUXENT *)ext1;
   union internal_auxent *in = (union internal_auxent *)in1;
 
   switch (in_class)
     {
+    default:
+      _bfd_error_handler
+	/* xgettext: c-format */
+	(_("%pB: unsupported swap_aux_in for storage class %#x"),
+	 abfd, (unsigned int) in_class);
+      bfd_set_error (bfd_error_bad_value);
+      break;
+
     case C_FILE:
       if (ext->x_file.x_n.x_fname[0] == 0)
 	{
-	  in->x_file.x_n.x_zeroes = 0;
-	  in->x_file.x_n.x_offset =
+	  in->x_file.x_n.x_n.x_zeroes = 0;
+	  in->x_file.x_n.x_n.x_offset =
 	    H_GET_32 (abfd, ext->x_file.x_n.x_n.x_offset);
 	}
       else
-	{
-	  if (numaux > 1)
-	    {
-	      if (indx == 0)
-		memcpy (in->x_file.x_fname, ext->x_file.x_n.x_fname,
-			numaux * sizeof (AUXENT));
-	    }
-	  else
-	    {
-	      memcpy (in->x_file.x_fname, ext->x_file.x_n.x_fname, FILNMLEN);
-	    }
-	}
-      goto end;
+	memcpy (in->x_file.x_n.x_fname, ext->x_file.x_n.x_fname, FILNMLEN);
+      in->x_file.x_ftype = H_GET_8 (abfd, ext->x_file.x_ftype);
+      break;
 
-      /* RS/6000 "csect" auxents */
+      /* RS/6000 "csect" auxents.
+         There is always a CSECT auxiliary entry. But functions can
+         have FCN ones too. In this case, CSECT is always the last
+         one. */
     case C_EXT:
     case C_AIX_WEAKEXT:
     case C_HIDEXT:
       if (indx + 1 == numaux)
 	{
-	  in->x_csect.x_scnlen.l = H_GET_32 (abfd, ext->x_csect.x_scnlen);
+	  in->x_csect.x_scnlen.u64 = H_GET_32 (abfd, ext->x_csect.x_scnlen);
 	  in->x_csect.x_parmhash = H_GET_32 (abfd, ext->x_csect.x_parmhash);
 	  in->x_csect.x_snhash   = H_GET_16 (abfd, ext->x_csect.x_snhash);
 	  /* We don't have to hack bitfields in x_smtyp because it's
@@ -498,74 +517,47 @@ _bfd_xcoff_swap_aux_in (bfd *abfd, void
 	  in->x_csect.x_smclas   = H_GET_8 (abfd, ext->x_csect.x_smclas);
 	  in->x_csect.x_stab     = H_GET_32 (abfd, ext->x_csect.x_stab);
 	  in->x_csect.x_snstab   = H_GET_16 (abfd, ext->x_csect.x_snstab);
-	  goto end;
+	}
+      else
+	{
+	  /* x_exptr isn't supported.  */
+	  in->x_sym.x_misc.x_fsize
+	    = H_GET_32 (abfd, ext->x_fcn.x_fsize);
+	  in->x_sym.x_fcnary.x_fcn.x_lnnoptr
+	    = H_GET_32 (abfd, ext->x_fcn.x_lnnoptr);
+	  in->x_sym.x_fcnary.x_fcn.x_endndx.u32
+	    = H_GET_32 (abfd, ext->x_fcn.x_endndx);
 	}
       break;
 
     case C_STAT:
-    case C_LEAFSTAT:
-    case C_HIDDEN:
-      if (type == T_NULL)
-	{
-	  in->x_scn.x_scnlen = H_GET_32 (abfd, ext->x_scn.x_scnlen);
-	  in->x_scn.x_nreloc = H_GET_16 (abfd, ext->x_scn.x_nreloc);
-	  in->x_scn.x_nlinno = H_GET_16 (abfd, ext->x_scn.x_nlinno);
-	  /* PE defines some extra fields; we zero them out for
-	     safety.  */
-	  in->x_scn.x_checksum = 0;
-	  in->x_scn.x_associated = 0;
-	  in->x_scn.x_comdat = 0;
-
-	  goto end;
-	}
+      in->x_scn.x_scnlen = H_GET_32 (abfd, ext->x_scn.x_scnlen);
+      in->x_scn.x_nreloc = H_GET_16 (abfd, ext->x_scn.x_nreloc);
+      in->x_scn.x_nlinno = H_GET_16 (abfd, ext->x_scn.x_nlinno);
+      /* PE defines some extra fields; we zero them out for
+	 safety.  */
+      in->x_scn.x_checksum = 0;
+      in->x_scn.x_associated = 0;
+      in->x_scn.x_comdat = 0;
       break;
-    }
 
-  in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->x_sym.x_tagndx);
-  in->x_sym.x_tvndx = H_GET_16 (abfd, ext->x_sym.x_tvndx);
+    case C_BLOCK:
+    case C_FCN:
+      in->x_sym.x_misc.x_lnsz.x_lnno
+	= H_GET_32 (abfd, ext->x_sym.x_lnno);
+      break;
 
-  if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
-      || ISTAG (in_class))
-    {
-      in->x_sym.x_fcnary.x_fcn.x_lnnoptr =
-	H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr);
-      in->x_sym.x_fcnary.x_fcn.x_endndx.l =
-	H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_endndx);
-    }
-  else
-    {
-      in->x_sym.x_fcnary.x_ary.x_dimen[0] =
-	H_GET_16 (abfd, ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
-      in->x_sym.x_fcnary.x_ary.x_dimen[1] =
-	H_GET_16 (abfd, ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
-      in->x_sym.x_fcnary.x_ary.x_dimen[2] =
-	H_GET_16 (abfd, ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
-      in->x_sym.x_fcnary.x_ary.x_dimen[3] =
-	H_GET_16 (abfd, ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
-    }
+    case C_DWARF:
+      in->x_sect.x_scnlen = H_GET_32 (abfd, ext->x_sect.x_scnlen);
+      in->x_sect.x_nreloc = H_GET_32 (abfd, ext->x_sect.x_nreloc);
+      break;
 
-  if (ISFCN (type))
-    {
-      in->x_sym.x_misc.x_fsize = H_GET_32 (abfd, ext->x_sym.x_misc.x_fsize);
     }
-  else
-    {
-      in->x_sym.x_misc.x_lnsz.x_lnno =
-	H_GET_16 (abfd, ext->x_sym.x_misc.x_lnsz.x_lnno);
-      in->x_sym.x_misc.x_lnsz.x_size =
-	H_GET_16 (abfd, ext->x_sym.x_misc.x_lnsz.x_size);
-    }
-
- end: ;
-  /* The semicolon is because MSVC doesn't like labels at
-     end of block.  */
 }
 
 unsigned int
-_bfd_xcoff_swap_aux_out (bfd *abfd, void * inp, int type, int in_class,
-			 int indx ATTRIBUTE_UNUSED,
-			 int numaux ATTRIBUTE_UNUSED,
-			 void * extp)
+_bfd_xcoff_swap_aux_out (bfd *abfd, void * inp, int type ATTRIBUTE_UNUSED,
+			 int in_class, int indx, int numaux, void * extp)
 {
   union internal_auxent *in = (union internal_auxent *)inp;
   AUXENT *ext = (AUXENT *)extp;
@@ -573,18 +565,25 @@ _bfd_xcoff_swap_aux_out (bfd *abfd, void
   memset (ext, 0, bfd_coff_auxesz (abfd));
   switch (in_class)
     {
+    default:
+      _bfd_error_handler
+	/* xgettext: c-format */
+	(_("%pB: unsupported swap_aux_out for storage class %#x"),
+	 abfd, (unsigned int) in_class);
+      bfd_set_error (bfd_error_bad_value);
+      break;
+
     case C_FILE:
-      if (in->x_file.x_fname[0] == 0)
+      if (in->x_file.x_n.x_fname[0] == 0)
 	{
 	  H_PUT_32 (abfd, 0, ext->x_file.x_n.x_n.x_zeroes);
-	  H_PUT_32 (abfd, in->x_file.x_n.x_offset,
+	  H_PUT_32 (abfd, in->x_file.x_n.x_n.x_offset,
 		    ext->x_file.x_n.x_n.x_offset);
 	}
       else
-	{
-	  memcpy (ext->x_file.x_n.x_fname, in->x_file.x_fname, FILNMLEN);
-	}
-      goto end;
+	memcpy (ext->x_file.x_n.x_fname, in->x_file.x_n.x_fname, FILNMLEN);
+      H_PUT_8 (abfd, in->x_file.x_ftype, ext->x_file.x_ftype);
+      break;
 
       /* RS/6000 "csect" auxents */
     case C_EXT:
@@ -592,7 +591,7 @@ _bfd_xcoff_swap_aux_out (bfd *abfd, void
     case C_HIDEXT:
       if (indx + 1 == numaux)
 	{
-	  H_PUT_32 (abfd, in->x_csect.x_scnlen.l, ext->x_csect.x_scnlen);
+	  H_PUT_32 (abfd, in->x_csect.x_scnlen.u64, ext->x_csect.x_scnlen);
 	  H_PUT_32 (abfd, in->x_csect.x_parmhash, ext->x_csect.x_parmhash);
 	  H_PUT_16 (abfd, in->x_csect.x_snhash, ext->x_csect.x_snhash);
 	  /* We don't have to hack bitfields in x_smtyp because it's
@@ -602,459 +601,564 @@ _bfd_xcoff_swap_aux_out (bfd *abfd, void
 	  H_PUT_8 (abfd, in->x_csect.x_smclas, ext->x_csect.x_smclas);
 	  H_PUT_32 (abfd, in->x_csect.x_stab, ext->x_csect.x_stab);
 	  H_PUT_16 (abfd, in->x_csect.x_snstab, ext->x_csect.x_snstab);
-	  goto end;
+	}
+      else
+	{
+	  H_PUT_32 (abfd, in->x_sym.x_misc.x_fsize, ext->x_fcn.x_fsize);
+	  H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr,
+		    ext->x_fcn.x_lnnoptr);
+	  H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.u32,
+		    ext->x_fcn.x_endndx);
 	}
       break;
 
     case C_STAT:
-    case C_LEAFSTAT:
-    case C_HIDDEN:
-      if (type == T_NULL)
-	{
-	  H_PUT_32 (abfd, in->x_scn.x_scnlen, ext->x_scn.x_scnlen);
-	  H_PUT_16 (abfd, in->x_scn.x_nreloc, ext->x_scn.x_nreloc);
-	  H_PUT_16 (abfd, in->x_scn.x_nlinno, ext->x_scn.x_nlinno);
-	  goto end;
-	}
+      H_PUT_32 (abfd, in->x_scn.x_scnlen, ext->x_scn.x_scnlen);
+      H_PUT_16 (abfd, in->x_scn.x_nreloc, ext->x_scn.x_nreloc);
+      H_PUT_16 (abfd, in->x_scn.x_nlinno, ext->x_scn.x_nlinno);
       break;
-    }
-
-  H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->x_sym.x_tagndx);
-  H_PUT_16 (abfd, in->x_sym.x_tvndx, ext->x_sym.x_tvndx);
 
-  if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
-      || ISTAG (in_class))
-    {
-      H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr,
-		ext->x_sym.x_fcnary.x_fcn.x_lnnoptr);
-      H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l,
-		ext->x_sym.x_fcnary.x_fcn.x_endndx);
-    }
-  else
-    {
-      H_PUT_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[0],
-		ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
-      H_PUT_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[1],
-		ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
-      H_PUT_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[2],
-		ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
-      H_PUT_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[3],
-		ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
-    }
+    case C_BLOCK:
+    case C_FCN:
+      H_PUT_32 (abfd, in->x_sym.x_misc.x_lnsz.x_lnno, ext->x_sym.x_lnno);
+      break;
 
-  if (ISFCN (type))
-    H_PUT_32 (abfd, in->x_sym.x_misc.x_fsize, ext->x_sym.x_misc.x_fsize);
-  else
-    {
-      H_PUT_16 (abfd, in->x_sym.x_misc.x_lnsz.x_lnno,
-		ext->x_sym.x_misc.x_lnsz.x_lnno);
-      H_PUT_16 (abfd, in->x_sym.x_misc.x_lnsz.x_size,
-		ext->x_sym.x_misc.x_lnsz.x_size);
+    case C_DWARF:
+      H_PUT_32 (abfd, in->x_sect.x_scnlen, ext->x_sect.x_scnlen);
+      H_PUT_32 (abfd, in->x_sect.x_nreloc, ext->x_sect.x_nreloc);
+      break;
     }
 
-end:
   return bfd_coff_auxesz (abfd);
 }
 
-/* The XCOFF reloc table.  Actually, XCOFF relocations specify the
-   bitsize and whether they are signed or not, along with a
-   conventional type.  This table is for the types, which are used for
-   different algorithms for putting in the reloc.  Many of these
-   relocs need special_function entries, which I have not written.  */
+/* The XCOFF reloc table.
+   XCOFF relocations aren't defined only by the type field r_type.
+   The bitsize and whether they are signed or not, are defined by
+   r_size field.  Thus, it's complicated to create a constant
+   table reference every possible relocation.
+   This table contains the "default" relocation and few modified
+   relocations what were already there.  It's enough when
+   xcoff_rtype2howto is called.
+   For relocations from an input bfd to an output bfd, the default
+   relocation is retrieved and when manually adapted.
+
+   For now, it seems to be enought.  */
 
 reloc_howto_type xcoff_howto_table[] =
 {
   /* 0x00: Standard 32 bit relocation.  */
   HOWTO (R_POS,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_POS",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x01: 32 bit relocation, but store negative value.  */
   HOWTO (R_NEG,			/* type */
 	 0,			/* rightshift */
-	 -2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 -4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_NEG",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x02: 32 bit PC relative relocation.  */
   HOWTO (R_REL,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_REL",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x03: 16 bit TOC relative relocation.  */
   HOWTO (R_TOC,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_TOC",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
-  /* 0x04: I don't really know what this is.  */
-  HOWTO (R_RTB,			/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+  /* 0x04: Same as R_TOC  */
+  HOWTO (R_TRL,			/* type */
+	 0,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
-	 "R_RTB",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 "R_TRL",		/* name */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
 
   /* 0x05: External TOC relative symbol.  */
   HOWTO (R_GL,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_GL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x06: Local TOC relative symbol.	 */
   HOWTO (R_TCL,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_TCL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (7),
 
-  /* 0x08: Non modifiable absolute branch.  */
+  /* 0x08: Same as R_RBA.  */
   HOWTO (R_BA,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_BA_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03fffffc,		/* src_mask */
 	 0x03fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (9),
 
-  /* 0x0a: Non modifiable relative branch.  */
+  /* 0x0a: Same as R_RBR.  */
   HOWTO (R_BR,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_BR",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03fffffc,		/* src_mask */
 	 0x03fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (0xb),
 
-  /* 0x0c: Indirect load.  */
+  /* 0x0c: Same as R_POS.  */
   HOWTO (R_RL,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
 
-  /* 0x0d: Load address.  */
+  /* 0x0d: Same as R_POS.  */
   HOWTO (R_RLA,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RLA",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (0xe),
 
   /* 0x0f: Non-relocating reference.  Bitsize is 1 so that r_rsize is 0.  */
   HOWTO (R_REF,			/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 1,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_REF",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (0x10),
   EMPTY_HOWTO (0x11),
+  EMPTY_HOWTO (0x12),
 
-  /* 0x12: TOC relative indirect load.  */
-  HOWTO (R_TRL,			/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 0,			/* special_function */
-	 "R_TRL",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 0x13: TOC relative load address.  */
+  /* 0x13: Same as R_TOC.  */
   HOWTO (R_TRLA,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_TRLA",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x14: Modifiable relative branch.  */
-  HOWTO (R_RRTBI,		 /* type */
+  HOWTO (R_RRTBI,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RRTBI",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x15: Modifiable absolute branch.  */
-  HOWTO (R_RRTBA,		 /* type */
+  HOWTO (R_RRTBA,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RRTBA",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x16: Modifiable call absolute indirect.  */
   HOWTO (R_CAI,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_CAI",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x17: Modifiable call relative.  */
   HOWTO (R_CREL,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_CREL",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x18: Modifiable branch absolute.  */
   HOWTO (R_RBA,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBA",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03fffffc,		/* src_mask */
 	 0x03fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x19: Modifiable branch absolute.  */
   HOWTO (R_RBAC,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBAC",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1a: Modifiable branch relative.  */
   HOWTO (R_RBR,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBR_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03fffffc,		/* src_mask */
 	 0x03fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1b: Modifiable branch absolute.  */
   HOWTO (R_RBRC,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBRC",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1c: 16 bit Non modifiable absolute branch.  */
   HOWTO (R_BA,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_BA_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xfffc,		/* src_mask */
 	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1d: Modifiable branch relative.  */
   HOWTO (R_RBR,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBR_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xfffc,		/* src_mask */
 	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 0x1e: Modifiable branch relative.  */
   HOWTO (R_RBA,			/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
 	 "R_RBA_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
+
+  EMPTY_HOWTO (0x1f),
+
+  /* 0x20: General-dynamic TLS relocation.  */
+  HOWTO (R_TLS,			/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLS",		/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x21: Initial-exec TLS relocation.  */
+  HOWTO (R_TLS_IE,		/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLS_IE",		/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x22: Local-dynamic TLS relocation.  */
+  HOWTO (R_TLS_LD,		/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLS_LD",		/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x23: Local-exec TLS relocation.  */
+  HOWTO (R_TLS_LE,		/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLS_LE",		/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x24: TLS relocation.  */
+  HOWTO (R_TLSM,		/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLSM",		/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+
+  /* 0x25: TLS module relocation.  */
+  HOWTO (R_TLSML,		/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TLSML",		/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  EMPTY_HOWTO(0x26),
+  EMPTY_HOWTO(0x27),
+  EMPTY_HOWTO(0x28),
+  EMPTY_HOWTO(0x29),
+  EMPTY_HOWTO(0x2a),
+  EMPTY_HOWTO(0x2b),
+  EMPTY_HOWTO(0x2c),
+  EMPTY_HOWTO(0x2d),
+  EMPTY_HOWTO(0x2e),
+  EMPTY_HOWTO(0x2f),
+
+  /* 0x30: High-order 16 bit TOC relative relocation.  */
+  HOWTO (R_TOCU,		/* type */
+	 16,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TOCU",		/* name */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 0x31: Low-order 16 bit TOC relative relocation.  */
+  HOWTO (R_TOCL,		/* type */
+	 0,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 0,			/* special_function */
+	 "R_TOCL",		/* name */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
 };
 
 void
 xcoff_rtype2howto (arelent *relent, struct internal_reloc *internal)
 {
-  if (internal->r_type > R_RBRC)
+  if (internal->r_type > R_TOCL)
     abort ();
 
   /* Default howto layout works most of the time */
@@ -1096,9 +1200,10 @@ _bfd_xcoff_reloc_type_lookup (bfd *abfd
       return &xcoff_howto_table[8];
     case BFD_RELOC_PPC_TOC16:
       return &xcoff_howto_table[3];
-    case BFD_RELOC_16:
-      /* Note that this relocation is only internally used by gas.  */
-      return &xcoff_howto_table[0xc];
+    case BFD_RELOC_PPC_TOC16_HI:
+      return &xcoff_howto_table[0x30];
+    case BFD_RELOC_PPC_TOC16_LO:
+      return &xcoff_howto_table[0x31];
     case BFD_RELOC_PPC_B16:
       return &xcoff_howto_table[0x1d];
     case BFD_RELOC_32:
@@ -1106,6 +1211,20 @@ _bfd_xcoff_reloc_type_lookup (bfd *abfd
       return &xcoff_howto_table[0];
     case BFD_RELOC_NONE:
       return &xcoff_howto_table[0xf];
+    case BFD_RELOC_PPC_NEG:
+      return &xcoff_howto_table[0x1];
+    case BFD_RELOC_PPC_TLSGD:
+      return &xcoff_howto_table[0x20];
+    case BFD_RELOC_PPC_TLSIE:
+      return &xcoff_howto_table[0x21];
+    case BFD_RELOC_PPC_TLSLD:
+      return &xcoff_howto_table[0x22];
+    case BFD_RELOC_PPC_TLSLE:
+      return &xcoff_howto_table[0x23];
+    case BFD_RELOC_PPC_TLSM:
+      return &xcoff_howto_table[0x24];
+    case BFD_RELOC_PPC_TLSML:
+      return &xcoff_howto_table[0x25];
     default:
       return NULL;
     }
@@ -1175,7 +1294,7 @@ _bfd_xcoff_reloc_name_lookup (bfd *abfd
    take a maximum length as an additional parameter.  Also - just to save space,
    we omit the endptr return parameter, since we know that it is never used.  */
 
-static long
+static unsigned long
 _bfd_strntol (const char * nptr, int base, unsigned int maxlen)
 {
   char buf[24]; /* Should be enough.  */
@@ -1187,7 +1306,7 @@ _bfd_strntol (const char * nptr, int bas
   return strtol (buf, NULL, base);
 }
 
-static long long
+static unsigned long long
 _bfd_strntoll (const char * nptr, int base, unsigned int maxlen)
 {
   char buf[32]; /* Should be enough.  */
@@ -1216,10 +1335,10 @@ _bfd_strntoll (const char * nptr, int ba
 
 /* Read in the armap of an XCOFF archive.  */
 
-bfd_boolean
+bool
 _bfd_xcoff_slurp_armap (bfd *abfd)
 {
-  file_ptr off;
+  ufile_ptr off;
   size_t namlen;
   bfd_size_type sz;
   bfd_byte *contents, *cend;
@@ -1227,10 +1346,10 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
   carsym *arsym;
   bfd_byte *p;
 
-  if (xcoff_ardata (abfd) == NULL)
+  if (x_artdata (abfd) == NULL)
     {
-      abfd->has_armap = FALSE;
-      return TRUE;
+      abfd->has_armap = false;
+      return true;
     }
 
   if (! xcoff_big_format_p (abfd))
@@ -1238,49 +1357,55 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
       /* This is for the old format.  */
       struct xcoff_ar_hdr hdr;
 
-      GET_VALUE_IN_FIELD (off, xcoff_ardata (abfd)->symoff, 10);
+      GET_VALUE_IN_FIELD (off, x_artdata (abfd)->u.hdr.symoff, 10);
       if (off == 0)
 	{
-	  abfd->has_armap = FALSE;
-	  return TRUE;
+	  abfd->has_armap = false;
+	  return true;
 	}
 
       if (bfd_seek (abfd, off, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       /* The symbol table starts with a normal archive header.  */
-      if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
-	  != SIZEOF_AR_HDR)
-	return FALSE;
+      if (bfd_read (&hdr, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR)
+	return false;
 
       /* Skip the name (normally empty).  */
       GET_VALUE_IN_FIELD (namlen, hdr.namlen, 10);
       off = ((namlen + 1) & ~ (size_t) 1) + SXCOFFARFMAG;
       if (bfd_seek (abfd, off, SEEK_CUR) != 0)
-	return FALSE;
+	return false;
 
       GET_VALUE_IN_FIELD (sz, hdr.size, 10);
+      if (sz + 1 < 5)
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
 
       /* Read in the entire symbol table.  */
-      contents = (bfd_byte *) bfd_alloc (abfd, sz);
+      contents = (bfd_byte *) _bfd_alloc_and_read (abfd, sz + 1, sz);
       if (contents == NULL)
-	return FALSE;
-      if (bfd_bread (contents, sz, abfd) != sz)
-	return FALSE;
+	return false;
+
+      /* Ensure strings are NULL terminated so we don't wander off the
+	 end of the buffer.  */
+      contents[sz] = 0;
 
       /* The symbol table starts with a four byte count.  */
       c = H_GET_32 (abfd, contents);
 
-      if (c * 4 >= sz)
+      if (c >= sz / 4)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       bfd_ardata (abfd)->symdefs =
 	((carsym *) bfd_alloc (abfd, c * sizeof (carsym)));
       if (bfd_ardata (abfd)->symdefs == NULL)
-	return FALSE;
+	return false;
 
       /* After the count comes a list of four byte file offsets.  */
       for (i = 0, arsym = bfd_ardata (abfd)->symdefs, p = contents + 4;
@@ -1293,49 +1418,55 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
       /* This is for the new format.  */
       struct xcoff_ar_hdr_big hdr;
 
-      GET_VALUE_IN_FIELD (off, xcoff_ardata_big (abfd)->symoff, 10);
+      GET_VALUE_IN_FIELD (off, x_artdata (abfd)->u.bhdr.symoff, 10);
       if (off == 0)
 	{
-	  abfd->has_armap = FALSE;
-	  return TRUE;
+	  abfd->has_armap = false;
+	  return true;
 	}
 
       if (bfd_seek (abfd, off, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       /* The symbol table starts with a normal archive header.  */
-      if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd)
-	  != SIZEOF_AR_HDR_BIG)
-	return FALSE;
+      if (bfd_read (&hdr, SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG)
+	return false;
 
       /* Skip the name (normally empty).  */
       GET_VALUE_IN_FIELD (namlen, hdr.namlen, 10);
       off = ((namlen + 1) & ~ (size_t) 1) + SXCOFFARFMAG;
       if (bfd_seek (abfd, off, SEEK_CUR) != 0)
-	return FALSE;
+	return false;
 
       GET_VALUE_IN_FIELD (sz, hdr.size, 10);
+      if (sz + 1 < 9)
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
 
       /* Read in the entire symbol table.  */
-      contents = (bfd_byte *) bfd_alloc (abfd, sz);
+      contents = (bfd_byte *) _bfd_alloc_and_read (abfd, sz + 1, sz);
       if (contents == NULL)
-	return FALSE;
-      if (bfd_bread (contents, sz, abfd) != sz)
-	return FALSE;
+	return false;
+
+      /* Ensure strings are NULL terminated so we don't wander off the
+	 end of the buffer.  */
+      contents[sz] = 0;
 
       /* The symbol table starts with an eight byte count.  */
       c = H_GET_64 (abfd, contents);
 
-      if (c * 8 >= sz)
+      if (c >= sz / 8)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       bfd_ardata (abfd)->symdefs =
 	((carsym *) bfd_alloc (abfd, c * sizeof (carsym)));
       if (bfd_ardata (abfd)->symdefs == NULL)
-	return FALSE;
+	return false;
 
       /* After the count comes a list of eight byte file offsets.  */
       for (i = 0, arsym = bfd_ardata (abfd)->symdefs, p = contents + 8;
@@ -1353,27 +1484,27 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
       if (p >= cend)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       arsym->name = (char *) p;
     }
 
   bfd_ardata (abfd)->symdef_count = c;
-  abfd->has_armap = TRUE;
+  abfd->has_armap = true;
 
-  return TRUE;
+  return true;
 }
 
 /* See if this is an XCOFF archive.  */
 
-const bfd_target *
+bfd_cleanup
 _bfd_xcoff_archive_p (bfd *abfd)
 {
   struct artdata *tdata_hold;
   char magic[SXCOFFARMAG];
-  bfd_size_type amt = SXCOFFARMAG;
+  size_t amt = SXCOFFARMAG;
 
-  if (bfd_bread (magic, amt, abfd) != amt)
+  if (bfd_read (magic, amt, abfd) != amt)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -1394,13 +1525,6 @@ _bfd_xcoff_archive_p (bfd *abfd)
   if (bfd_ardata (abfd) == (struct artdata *) NULL)
     goto error_ret_restore;
 
-  /* Cleared by bfd_zalloc above.
-     bfd_ardata (abfd)->cache = NULL;
-     bfd_ardata (abfd)->archive_head = NULL;
-     bfd_ardata (abfd)->symdefs = NULL;
-     bfd_ardata (abfd)->extended_names = NULL;
-     bfd_ardata (abfd)->extended_names_size = 0;  */
-
   /* Now handle the two formats.  */
   if (magic[1] != 'b')
     {
@@ -1412,7 +1536,7 @@ _bfd_xcoff_archive_p (bfd *abfd)
 
       /* Now read the rest of the file header.  */
       amt = SIZEOF_AR_FILE_HDR - SXCOFFARMAG;
-      if (bfd_bread (&hdr.memoff, amt, abfd) != amt)
+      if (bfd_read (&hdr.memoff, amt, abfd) != amt)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_wrong_format);
@@ -1422,12 +1546,12 @@ _bfd_xcoff_archive_p (bfd *abfd)
       GET_VALUE_IN_FIELD (bfd_ardata (abfd)->first_file_filepos,
 			  hdr.firstmemoff, 10);
 
-      amt = SIZEOF_AR_FILE_HDR;
+      amt = sizeof (struct xcoff_artdata);
       bfd_ardata (abfd)->tdata = bfd_zalloc (abfd, amt);
       if (bfd_ardata (abfd)->tdata == NULL)
 	goto error_ret;
 
-      memcpy (bfd_ardata (abfd)->tdata, &hdr, SIZEOF_AR_FILE_HDR);
+      memcpy (&x_artdata (abfd)->u.hdr, &hdr, SIZEOF_AR_FILE_HDR);
     }
   else
     {
@@ -1439,7 +1563,7 @@ _bfd_xcoff_archive_p (bfd *abfd)
 
       /* Now read the rest of the file header.  */
       amt = SIZEOF_AR_FILE_HDR_BIG - SXCOFFARMAG;
-      if (bfd_bread (&hdr.memoff, amt, abfd) != amt)
+      if (bfd_read (&hdr.memoff, amt, abfd) != amt)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_wrong_format);
@@ -1450,12 +1574,12 @@ _bfd_xcoff_archive_p (bfd *abfd)
 							    (const char **) 0,
 							    10);
 
-      amt = SIZEOF_AR_FILE_HDR_BIG;
+      amt = sizeof (struct xcoff_artdata);
       bfd_ardata (abfd)->tdata = bfd_zalloc (abfd, amt);
       if (bfd_ardata (abfd)->tdata == NULL)
 	goto error_ret;
 
-      memcpy (bfd_ardata (abfd)->tdata, &hdr, SIZEOF_AR_FILE_HDR_BIG);
+      memcpy (&x_artdata (abfd)->u.bhdr, &hdr, SIZEOF_AR_FILE_HDR_BIG);
     }
 
   if (! _bfd_xcoff_slurp_armap (abfd))
@@ -1467,7 +1591,98 @@ _bfd_xcoff_archive_p (bfd *abfd)
       return NULL;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
+}
+
+/* Track file ranges occupied by elements.  Add [START,END) to the
+   list of ranges and return TRUE if there is no overlap between the
+   new and any other element or the archive file header.  This is
+   aimed at preventing infinite looping on malformed archives, for
+   "ar" and similar which typically use code like:
+   .  for (last = bfd_openr_next_archived_file (archive, NULL);
+   .       last;
+   .       last = next)
+   .    {
+   .      do_something_with (last);
+   .      next = bfd_openr_next_archived_file (archive, last);
+   .      bfd_close (last);
+   .    }
+   The check implemented here is only possible due to the fact that
+   for XCOFF archives bfd_openr_next_archived_file is the only code
+   path leading to _bfd_read_ar_hdr.  _bfd_read_ar_hdr is not called
+   when reading the armap, nor do XCOFF archives use the extended name
+   scheme implemented in archive.c.
+
+   Note that the check relies on the previous element being closed,
+   and there is one case where add_range might fail but I think it is
+   sufficently unusual that it doesn't warrant fixing:
+   If the loop body above called bfd_openr_next_archived_file twice
+   with the same arguments and the element returned is bfd_close'd
+   between those calls then we'll return false here for the second
+   call.  (For why this is so see _bfd_look_for_bfd_in_cache in
+   _bfd_get_elt_at_filepos, and know that bfd_close removes elements
+   from the cache.)  */
+
+static bool
+add_range (bfd *abfd, ufile_ptr start, ufile_ptr end)
+{
+  if (end <= start)
+    {
+    err:
+      bfd_set_error (bfd_error_malformed_archive);
+      return false;
+    }
+
+  /* This list is kept sorted by address.  Find the highest address
+     range on the list that ends before the new range starts.  Exit
+     the loop with that range in LO, and the mext higher range in HI.  */
+  struct ar_ranges *hi = &x_artdata (abfd)->ranges;
+  struct ar_ranges *lo = NULL;
+  while (hi && hi->end <= start)
+    {
+      lo = hi;
+      hi = hi->next;
+    }
+
+  if (lo == NULL)
+    /* Start overlaps the file header or elements adjacent to it.  */
+    goto err;
+
+  if (hi && hi->start < end)
+    /* Overlap with another element.  */
+    goto err;
+
+  /* A zero size element with a one char name is this big.  */
+  unsigned min_elt = x_artdata (abfd)->ar_hdr_size + 2 + SXCOFFARFMAG;
+  if (start - lo->end < min_elt)
+    {
+      /* Merge into an existing range.  */
+      lo->end = end;
+      if (hi && hi->start - end < min_elt)
+	{
+	  /* In fact, we can merge two ranges.  */
+	  lo->end = hi->end;
+	  lo->next = hi->next;
+	  /* The list uses bfd_alloc so don't free HI.  */
+	}
+      return true;
+    }
+
+  if (hi && hi->start - end < min_elt)
+    {
+      /* Merge into an existing range.  */
+      hi->start = start;
+      return true;
+    }
+
+  struct ar_ranges *newr = bfd_alloc (abfd, sizeof (*newr));
+  if (newr == NULL)
+    return false;
+  newr->start = start;
+  newr->end = end;
+  newr->next = hi;
+  lo->next = newr;
+  return true;
 }
 
 /* Read the archive header in an XCOFF archive.  */
@@ -1477,34 +1692,28 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd)
 {
   bfd_size_type namlen;
   struct areltdata *ret;
-  bfd_size_type amt = sizeof (struct areltdata);
-
-  ret = (struct areltdata *) bfd_zmalloc (amt);
-  if (ret == NULL)
-    return NULL;
+  bfd_size_type amt;
+  ufile_ptr start = abfd->where;
 
   if (! xcoff_big_format_p (abfd))
     {
       struct xcoff_ar_hdr hdr;
       struct xcoff_ar_hdr *hdrp;
 
-      if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
-	  != SIZEOF_AR_HDR)
-	{
-	  free (ret);
-	  return NULL;
-	}
+      if (bfd_read (&hdr, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR)
+	return NULL;
 
       GET_VALUE_IN_FIELD (namlen, hdr.namlen, 10);
-      amt = SIZEOF_AR_HDR + namlen + 1;
-      hdrp = (struct xcoff_ar_hdr *) bfd_alloc (abfd, amt);
-      if (hdrp == NULL)
-	{
-	  free (ret);
-	  return NULL;
-	}
+      if (namlen > bfd_get_file_size (abfd))
+	return NULL;
+      amt = sizeof (struct areltdata) + SIZEOF_AR_HDR + namlen + 1;
+      ret = (struct areltdata *) bfd_malloc (amt);
+      if (ret == NULL)
+	return ret;
+
+      hdrp = (struct xcoff_ar_hdr *) (ret + 1);
       memcpy (hdrp, &hdr, SIZEOF_AR_HDR);
-      if (bfd_bread ((char *) hdrp + SIZEOF_AR_HDR, namlen, abfd) != namlen)
+      if (bfd_read ((char *) hdrp + SIZEOF_AR_HDR, namlen, abfd) != namlen)
 	{
 	  free (ret);
 	  return NULL;
@@ -1520,23 +1729,20 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd)
       struct xcoff_ar_hdr_big hdr;
       struct xcoff_ar_hdr_big *hdrp;
 
-      if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd)
-	  != SIZEOF_AR_HDR_BIG)
-	{
-	  free (ret);
-	  return NULL;
-	}
+      if (bfd_read (&hdr, SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG)
+	return NULL;
 
       GET_VALUE_IN_FIELD (namlen, hdr.namlen, 10);
-      amt = SIZEOF_AR_HDR_BIG + namlen + 1;
-      hdrp = (struct xcoff_ar_hdr_big *) bfd_alloc (abfd, amt);
-      if (hdrp == NULL)
-	{
-	  free (ret);
-	  return NULL;
-	}
+      if (namlen > bfd_get_file_size (abfd))
+	return NULL;
+      amt = sizeof (struct areltdata) + SIZEOF_AR_HDR_BIG + namlen + 1;
+      ret = (struct areltdata *) bfd_malloc (amt);
+      if (ret == NULL)
+	return ret;
+
+      hdrp = (struct xcoff_ar_hdr_big *) (ret + 1);
       memcpy (hdrp, &hdr, SIZEOF_AR_HDR_BIG);
-      if (bfd_bread ((char *) hdrp + SIZEOF_AR_HDR_BIG, namlen, abfd) != namlen)
+      if (bfd_read ((char *) hdrp + SIZEOF_AR_HDR_BIG, namlen, abfd) != namlen)
 	{
 	  free (ret);
 	  return NULL;
@@ -1548,9 +1754,17 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd)
       ret->filename = (char *) hdrp + SIZEOF_AR_HDR_BIG;
     }
 
+  /* Size occupied by the header above that covered in the fixed
+     SIZEOF_AR_HDR or SIZEOF_AR_HDR_BIG.  */
+  ret->extra_size = namlen + (namlen & 1) + SXCOFFARFMAG;
+
   /* Skip over the XCOFFARFMAG at the end of the file name.  */
-  if (bfd_seek (abfd, (file_ptr) ((namlen & 1) + SXCOFFARFMAG), SEEK_CUR) != 0)
-    return NULL;
+  if (bfd_seek (abfd, (namlen & 1) + SXCOFFARFMAG, SEEK_CUR) != 0
+      || !add_range (abfd, start, abfd->where + ret->parsed_size))
+    {
+      free (ret);
+      return NULL;
+    }
 
   return ret;
 }
@@ -1560,9 +1774,9 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd)
 bfd *
 _bfd_xcoff_openr_next_archived_file (bfd *archive, bfd *last_file)
 {
-  file_ptr filestart;
+  ufile_ptr filestart;
 
-  if (xcoff_ardata (archive) == NULL)
+  if (x_artdata (archive) == NULL)
     {
       bfd_set_error (bfd_error_invalid_operation);
       return NULL;
@@ -1571,13 +1785,24 @@ _bfd_xcoff_openr_next_archived_file (bfd
   if (! xcoff_big_format_p (archive))
     {
       if (last_file == NULL)
-	filestart = bfd_ardata (archive)->first_file_filepos;
+	{
+	  /* If we are scanning over elements twice in an open archive,
+	     which can happen in gdb after a fork, ensure we start the
+	     second scan with clean ranges.  */
+	  x_artdata (archive)->ranges.start = 0;
+	  x_artdata (archive)->ranges.end = SIZEOF_AR_FILE_HDR;
+	  x_artdata (archive)->ranges.next = NULL;
+	  x_artdata (archive)->ar_hdr_size = SIZEOF_AR_HDR;
+	  filestart = bfd_ardata (archive)->first_file_filepos;
+	}
       else
 	GET_VALUE_IN_FIELD (filestart, arch_xhdr (last_file)->nextoff, 10);
 
       if (filestart == 0
-	  || EQ_VALUE_IN_FIELD (filestart, xcoff_ardata (archive)->memoff, 10)
-	  || EQ_VALUE_IN_FIELD (filestart, xcoff_ardata (archive)->symoff, 10))
+	  || EQ_VALUE_IN_FIELD (filestart,
+				x_artdata (archive)->u.hdr.memoff, 10)
+	  || EQ_VALUE_IN_FIELD (filestart,
+				x_artdata (archive)->u.hdr.symoff, 10))
 	{
 	  bfd_set_error (bfd_error_no_more_archived_files);
 	  return NULL;
@@ -1586,20 +1811,44 @@ _bfd_xcoff_openr_next_archived_file (bfd
   else
     {
       if (last_file == NULL)
-	filestart = bfd_ardata (archive)->first_file_filepos;
+	{
+	  x_artdata (archive)->ranges.start = 0;
+	  x_artdata (archive)->ranges.end = SIZEOF_AR_FILE_HDR_BIG;
+	  x_artdata (archive)->ranges.next = NULL;
+	  x_artdata (archive)->ar_hdr_size = SIZEOF_AR_HDR_BIG;
+	  filestart = bfd_ardata (archive)->first_file_filepos;
+	}
       else
 	GET_VALUE_IN_FIELD (filestart, arch_xhdr_big (last_file)->nextoff, 10);
 
       if (filestart == 0
-	  || EQ_VALUE_IN_FIELD (filestart, xcoff_ardata_big (archive)->memoff, 10)
-	  || EQ_VALUE_IN_FIELD (filestart, xcoff_ardata_big (archive)->symoff, 10))
+	  || EQ_VALUE_IN_FIELD (filestart,
+				x_artdata (archive)->u.bhdr.memoff, 10)
+	  || EQ_VALUE_IN_FIELD (filestart,
+				x_artdata (archive)->u.bhdr.symoff, 10))
 	{
 	  bfd_set_error (bfd_error_no_more_archived_files);
 	  return NULL;
 	}
     }
 
-  return _bfd_get_elt_at_filepos (archive, filestart);
+  /* Check that we aren't pointing back at the last element.  This is
+     necessary depite the add_range checking in _bfd_xcoff_read_ar_hdr
+     because archive.c leaves the last element open and thus in the
+     archive element cache until the next element is opened.  */
+  if (last_file != NULL)
+    {
+      ufile_ptr laststart = last_file->proxy_origin;
+      laststart -= x_artdata (archive)->ar_hdr_size;
+      laststart -= arch_eltdata (last_file)->extra_size;
+      if (filestart == laststart)
+	{
+	  bfd_set_error (bfd_error_malformed_archive);
+	  return NULL;
+	}
+    }
+
+  return _bfd_get_elt_at_filepos (archive, filestart, NULL);
 }
 
 /* Stat an element in an XCOFF archive.  */
@@ -1656,7 +1905,7 @@ normalize_filename (bfd *abfd)
 
 /* Write out an XCOFF armap.  */
 
-static bfd_boolean
+static bool
 xcoff_write_armap_old (bfd *abfd, unsigned int elength ATTRIBUTE_UNUSED,
 		       struct orl *map, unsigned int orl_count, int stridx)
 {
@@ -1669,7 +1918,8 @@ xcoff_write_armap_old (bfd *abfd, unsign
   memset (&hdr, 0, sizeof hdr);
   sprintf (hdr.size, "%ld", (long) (4 + orl_count * 4 + stridx));
   sprintf (hdr.nextoff, "%d", 0);
-  memcpy (hdr.prevoff, xcoff_ardata (abfd)->memoff, XCOFFARMAG_ELEMENT_SIZE);
+  memcpy (hdr.prevoff, x_artdata (abfd)->u.hdr.memoff,
+	  XCOFFARMAG_ELEMENT_SIZE);
   sprintf (hdr.date, "%d", 0);
   sprintf (hdr.uid, "%d", 0);
   sprintf (hdr.gid, "%d", 0);
@@ -1681,15 +1931,13 @@ xcoff_write_armap_old (bfd *abfd, unsign
     if (*p == '\0')
       *p = ' ';
 
-  if (bfd_bwrite (&hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
-      != SIZEOF_AR_HDR
-      || (bfd_bwrite (XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd)
-	  != SXCOFFARFMAG))
-    return FALSE;
+  if (bfd_write (&hdr, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR
+      || bfd_write (XCOFFARFMAG, SXCOFFARFMAG, abfd) != SXCOFFARFMAG)
+    return false;
 
   H_PUT_32 (abfd, orl_count, buf);
-  if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
-    return FALSE;
+  if (bfd_write (buf, 4, abfd) != 4)
+    return false;
 
   i = 0;
   archive_iterator_begin (&iterator, abfd);
@@ -1697,8 +1945,8 @@ xcoff_write_armap_old (bfd *abfd, unsign
     while (map[i].u.abfd == iterator.current.member)
       {
 	H_PUT_32 (abfd, iterator.current.offset, buf);
-	if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
-	  return FALSE;
+	if (bfd_write (buf, 4, abfd) != 4)
+	  return false;
 	++i;
       }
 
@@ -1709,8 +1957,8 @@ xcoff_write_armap_old (bfd *abfd, unsign
 
       name = *map[i].name;
       namlen = strlen (name);
-      if (bfd_bwrite (name, (bfd_size_type) (namlen + 1), abfd) != namlen + 1)
-	return FALSE;
+      if (bfd_write (name, namlen + 1, abfd) != namlen + 1)
+	return false;
     }
 
   if ((stridx & 1) != 0)
@@ -1718,26 +1966,20 @@ xcoff_write_armap_old (bfd *abfd, unsign
       char b;
 
       b = '\0';
-      if (bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1)
-	return FALSE;
+      if (bfd_write (&b, 1, abfd) != 1)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 static char buff20[XCOFFARMAGBIG_ELEMENT_SIZE + 1];
-#if BFD_HOST_64BIT_LONG
-#define FMT20  "%-20ld"
-#elif defined (__MSVCRT__)
-#define FMT20  "%-20I64d"
-#else
-#define FMT20  "%-20lld"
-#endif
+#define FMT20  "%-20" PRId64
 #define FMT12  "%-12d"
 #define FMT12_OCTAL  "%-12o"
 #define FMT4  "%-4d"
 #define PRINT20(d, v) \
-  sprintf (buff20, FMT20, (bfd_uint64_t)(v)), \
+  sprintf (buff20, FMT20, (uint64_t) (v)), \
   memcpy ((void *) (d), buff20, 20)
 
 #define PRINT12(d, v) \
@@ -1757,53 +1999,53 @@ static char buff20[XCOFFARMAGBIG_ELEMENT
   memcpy (buff20, (d), 20), \
   (v) = bfd_scan_vma (buff20, (const char **) NULL, 10)
 
-static bfd_boolean
+static bool
 do_pad (bfd *abfd, unsigned int number)
 {
   bfd_byte b = 0;
 
   /* Limit pad to <= 4096.  */
   if (number > 4096)
-    return FALSE;
+    return false;
 
   while (number--)
-    if (bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1)
-      return FALSE;
+    if (bfd_write (&b, 1, abfd) != 1)
+      return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 do_copy (bfd *out_bfd, bfd *in_bfd)
 {
   bfd_size_type remaining;
-  bfd_byte buffer[DEFAULT_BUFFERSIZE];
+  bfd_byte buffer[8 * 1024];
 
-  if (bfd_seek (in_bfd, (file_ptr) 0, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (in_bfd, 0, SEEK_SET) != 0)
+    return false;
 
   remaining = arelt_size (in_bfd);
 
-  while (remaining >= DEFAULT_BUFFERSIZE)
+  while (remaining >= sizeof (buffer))
     {
-      if (bfd_bread (buffer, DEFAULT_BUFFERSIZE, in_bfd) != DEFAULT_BUFFERSIZE
-	  || bfd_bwrite (buffer, DEFAULT_BUFFERSIZE, out_bfd) != DEFAULT_BUFFERSIZE)
-	return FALSE;
+      if (bfd_read (buffer, sizeof (buffer), in_bfd) != sizeof (buffer)
+	  || bfd_write (buffer, sizeof (buffer), out_bfd) != sizeof (buffer))
+	return false;
 
-      remaining -= DEFAULT_BUFFERSIZE;
+      remaining -= sizeof (buffer);
     }
 
   if (remaining)
     {
-      if (bfd_bread (buffer, remaining, in_bfd) != remaining
-	  || bfd_bwrite (buffer, remaining, out_bfd) != remaining)
-	return FALSE;
+      if (bfd_read (buffer, remaining, in_bfd) != remaining
+	  || bfd_write (buffer, remaining, out_bfd) != remaining)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 xcoff_write_armap_big (bfd *abfd, unsigned int elength ATTRIBUTE_UNUSED,
 		       struct orl *map, unsigned int orl_count, int stridx)
 {
@@ -1847,7 +2089,7 @@ xcoff_write_armap_big (bfd *abfd, unsign
   /* Explicit cast to int for compiler.  */
   BFD_ASSERT ((int)(str_64 + str_32) == stridx);
 
-  fhdr = xcoff_ardata_big (abfd);
+  fhdr = &x_artdata (abfd)->u.bhdr;
 
   /* xcoff_write_archive_contents_big passes nextoff in symoff. */
   READ20 (fhdr->memoff, prevoff);
@@ -1891,7 +2133,7 @@ xcoff_write_armap_big (bfd *abfd, unsign
 
       symbol_table = bfd_zmalloc (symbol_table_size);
       if (symbol_table == NULL)
-	return FALSE;
+	return false;
 
       hdr = (struct xcoff_ar_hdr_big *) symbol_table;
 
@@ -1951,8 +2193,12 @@ xcoff_write_armap_big (bfd *abfd, unsign
 	    }
 	}
 
-      bfd_bwrite (symbol_table, symbol_table_size, abfd);
-
+      if (bfd_write (symbol_table, symbol_table_size, abfd)
+	  != symbol_table_size)
+	{
+	  free (symbol_table);
+	  return false;
+	}
       free (symbol_table);
 
       prevoff = nextoff;
@@ -1976,7 +2222,7 @@ xcoff_write_armap_big (bfd *abfd, unsign
 
       symbol_table = bfd_zmalloc (symbol_table_size);
       if (symbol_table == NULL)
-	return FALSE;
+	return false;
 
       hdr = (struct xcoff_ar_hdr_big *) symbol_table;
 
@@ -2031,8 +2277,12 @@ xcoff_write_armap_big (bfd *abfd, unsign
 	    }
 	}
 
-      bfd_bwrite (symbol_table, symbol_table_size, abfd);
-
+      if (bfd_write (symbol_table, symbol_table_size, abfd)
+	  != symbol_table_size)
+	{
+	  free (symbol_table);
+	  return false;
+	}
       free (symbol_table);
 
       PRINT20 (fhdr->symoff64, nextoff);
@@ -2040,10 +2290,10 @@ xcoff_write_armap_big (bfd *abfd, unsign
   else
     PRINT20 (fhdr->symoff64, 0);
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_xcoff_write_armap (bfd *abfd, unsigned int elength ATTRIBUTE_UNUSED,
 			struct orl *map, unsigned int orl_count, int stridx)
 {
@@ -2056,16 +2306,17 @@ _bfd_xcoff_write_armap (bfd *abfd, unsig
 /* Write out an XCOFF archive.  We always write an entire archive,
    rather than fussing with the freelist and so forth.  */
 
-static bfd_boolean
+static bool
 xcoff_write_archive_contents_old (bfd *abfd)
 {
   struct archive_iterator iterator;
-  struct xcoff_ar_file_hdr fhdr;
+  struct xcoff_artdata xtdata;
+  struct xcoff_ar_file_hdr *fhdr = &xtdata.u.hdr;
   bfd_size_type count;
   bfd_size_type total_namlen;
   file_ptr *offsets;
-  bfd_boolean makemap;
-  bfd_boolean hasobjects;
+  bool makemap;
+  bool hasobjects;
   file_ptr prevoff, nextoff;
   bfd *sub;
   size_t i;
@@ -2074,10 +2325,10 @@ xcoff_write_archive_contents_old (bfd *a
   char *p;
   char decbuf[XCOFFARMAG_ELEMENT_SIZE + 1];
 
-  memset (&fhdr, 0, sizeof fhdr);
-  (void) memcpy (fhdr.magic, XCOFFARMAG, SXCOFFARMAG);
-  sprintf (fhdr.firstmemoff, "%d", SIZEOF_AR_FILE_HDR);
-  sprintf (fhdr.freeoff, "%d", 0);
+  memset (&xtdata, 0, sizeof (xtdata));
+  memcpy (fhdr->magic, XCOFFARMAG, SXCOFFARMAG);
+  sprintf (fhdr->firstmemoff, "%zu", SIZEOF_AR_FILE_HDR);
+  sprintf (fhdr->freeoff, "%d", 0);
 
   count = 0;
   total_namlen = 0;
@@ -2089,22 +2340,41 @@ xcoff_write_archive_contents_old (bfd *a
 	{
 	  sub->arelt_data = bfd_zmalloc (sizeof (struct areltdata));
 	  if (sub->arelt_data == NULL)
-	    return FALSE;
+	    return false;
 	}
       if (arch_xhdr (sub) == NULL)
 	{
 	  struct xcoff_ar_hdr *ahdrp;
 	  struct stat s;
 
-	  if (stat (bfd_get_filename (sub), &s) != 0)
+	  if ((sub->flags & BFD_IN_MEMORY) != 0)
+	    {
+	      /* Assume we just "made" the member, and fake it.  */
+	      struct bfd_in_memory *bim
+		= (struct bfd_in_memory *) sub->iostream;
+	      time (&s.st_mtime);
+	      s.st_uid = getuid ();
+	      s.st_gid = getgid ();
+	      s.st_mode = 0644;
+	      s.st_size = bim->size;
+	    }
+	  else if (stat (bfd_get_filename (sub), &s) != 0)
 	    {
-	      bfd_set_error (bfd_error_system_call);
-	      return FALSE;
+	      bfd_set_input_error (sub, bfd_error_system_call);
+	      return false;
+	    }
+
+	  if ((abfd->flags & BFD_DETERMINISTIC_OUTPUT) != 0)
+	    {
+	      s.st_mtime = 0;
+	      s.st_uid = 0;
+	      s.st_gid = 0;
+	      s.st_mode = 0644;
 	    }
 
 	  ahdrp = bfd_zalloc (sub, sizeof (*ahdrp));
 	  if (ahdrp == NULL)
-	    return FALSE;
+	    return false;
 
 	  sprintf (ahdrp->size, "%ld", (long) s.st_size);
 	  sprintf (ahdrp->date, "%ld", (long) s.st_mtime);
@@ -2118,13 +2388,13 @@ xcoff_write_archive_contents_old (bfd *a
     }
   offsets = (file_ptr *) bfd_alloc (abfd, count * sizeof (file_ptr));
   if (offsets == NULL)
-    return FALSE;
+    return false;
 
-  if (bfd_seek (abfd, (file_ptr) SIZEOF_AR_FILE_HDR, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, SIZEOF_AR_FILE_HDR, SEEK_SET) != 0)
+    return false;
 
   makemap = bfd_has_map (abfd);
-  hasobjects = FALSE;
+  hasobjects = false;
   prevoff = 0;
   for (archive_iterator_begin (&iterator, abfd), i = 0;
        archive_iterator_next (&iterator);
@@ -2136,7 +2406,7 @@ xcoff_write_archive_contents_old (bfd *a
       if (makemap && ! hasobjects)
 	{
 	  if (bfd_check_format (iterator.current.member, bfd_object))
-	    hasobjects = TRUE;
+	    hasobjects = true;
 	}
 
       ahdrp = arch_xhdr (iterator.current.member);
@@ -2150,29 +2420,29 @@ xcoff_write_archive_contents_old (bfd *a
 	  *p = ' ';
 
       if (!do_pad (abfd, iterator.current.leading_padding))
-	return FALSE;
+	return false;
 
       BFD_ASSERT (iterator.current.offset == bfd_tell (abfd));
       namlen = iterator.current.padded_namlen;
-      if (bfd_bwrite (ahdrp, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR
-	  || bfd_bwrite (iterator.current.name, namlen, abfd) != namlen
-	  || bfd_bwrite (XCOFFARFMAG, SXCOFFARFMAG, abfd) != SXCOFFARFMAG
+      if (bfd_write (ahdrp, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR
+	  || bfd_write (iterator.current.name, namlen, abfd) != namlen
+	  || bfd_write (XCOFFARFMAG, SXCOFFARFMAG, abfd) != SXCOFFARFMAG
 	  || bfd_seek (iterator.current.member, 0, SEEK_SET) != 0
 	  || !do_copy (abfd, iterator.current.member)
 	  || !do_pad (abfd, iterator.current.trailing_padding))
-	return FALSE;
+	return false;
 
       offsets[i] = iterator.current.offset;
       prevoff = iterator.current.offset;
     }
 
-  sprintf (fhdr.lastmemoff, "%ld", (long) prevoff);
+  sprintf (fhdr->lastmemoff, "%ld", (long) prevoff);
 
   /* Write out the member table.  */
 
   nextoff = iterator.next.offset;
   BFD_ASSERT (nextoff == bfd_tell (abfd));
-  sprintf (fhdr.memoff, "%ld", (long) nextoff);
+  sprintf (fhdr->memoff, "%ld", (long) nextoff);
 
   memset (&ahdr, 0, sizeof ahdr);
   sprintf (ahdr.size, "%ld", (long) (XCOFFARMAG_ELEMENT_SIZE
@@ -2204,22 +2474,20 @@ xcoff_write_archive_contents_old (bfd *a
     if (*p == '\0')
       *p = ' ';
 
-  if ((bfd_bwrite (&ahdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
-       != SIZEOF_AR_HDR)
-      || (bfd_bwrite (XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd)
-	  != SXCOFFARFMAG))
-    return FALSE;
+  if ((bfd_write (&ahdr, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR)
+      || bfd_write (XCOFFARFMAG, SXCOFFARFMAG, abfd) != SXCOFFARFMAG)
+    return false;
 
   sprintf (decbuf, "%-12ld", (long) count);
-  if (bfd_bwrite (decbuf, (bfd_size_type) XCOFFARMAG_ELEMENT_SIZE, abfd)
+  if (bfd_write (decbuf, XCOFFARMAG_ELEMENT_SIZE, abfd)
       != XCOFFARMAG_ELEMENT_SIZE)
-    return FALSE;
+    return false;
   for (i = 0; i < (size_t) count; i++)
     {
       sprintf (decbuf, "%-12ld", (long) offsets[i]);
-      if (bfd_bwrite (decbuf, (bfd_size_type) XCOFFARMAG_ELEMENT_SIZE,
-		      abfd) != XCOFFARMAG_ELEMENT_SIZE)
-	return FALSE;
+      if (bfd_write (decbuf, XCOFFARMAG_ELEMENT_SIZE, abfd)
+	  != XCOFFARMAG_ELEMENT_SIZE)
+	return false;
     }
   for (sub = abfd->archive_head; sub != NULL; sub = sub->archive_next)
     {
@@ -2228,49 +2496,51 @@ xcoff_write_archive_contents_old (bfd *a
 
       name = normalize_filename (sub);
       namlen = strlen (name);
-      if (bfd_bwrite (name, namlen + 1, abfd) != namlen + 1)
-	return FALSE;
+      if (bfd_write (name, namlen + 1, abfd) != namlen + 1)
+	return false;
     }
 
   if (! do_pad (abfd, size & 1))
-    return FALSE;
+    return false;
 
   /* Write out the armap, if appropriate.  */
   if (! makemap || ! hasobjects)
-    sprintf (fhdr.symoff, "%d", 0);
+    sprintf (fhdr->symoff, "%d", 0);
   else
     {
       BFD_ASSERT (nextoff == bfd_tell (abfd));
-      sprintf (fhdr.symoff, "%ld", (long) nextoff);
-      bfd_ardata (abfd)->tdata = &fhdr;
-      if (! _bfd_compute_and_write_armap (abfd, 0))
-	return FALSE;
+      sprintf (fhdr->symoff, "%ld", (long) nextoff);
+      bfd_ardata (abfd)->tdata = &xtdata;
+      bool ret = _bfd_compute_and_write_armap (abfd, 0);
+      bfd_ardata (abfd)->tdata = NULL;
+      if (!ret)
+	return false;
     }
 
   /* Write out the archive file header.  */
 
   /* We need spaces, not null bytes, in the header.  */
-  for (p = (char *) &fhdr; p < (char *) &fhdr + SIZEOF_AR_FILE_HDR; p++)
+  for (p = (char *) fhdr; p < (char *) fhdr + SIZEOF_AR_FILE_HDR; p++)
     if (*p == '\0')
       *p = ' ';
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || (bfd_bwrite (&fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR, abfd)
-	  != SIZEOF_AR_FILE_HDR))
-    return FALSE;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || (bfd_write (fhdr, SIZEOF_AR_FILE_HDR, abfd) != SIZEOF_AR_FILE_HDR))
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 xcoff_write_archive_contents_big (bfd *abfd)
 {
-  struct xcoff_ar_file_hdr_big fhdr;
+  struct xcoff_artdata xtdata;
+  struct xcoff_ar_file_hdr_big *fhdr = &xtdata.u.bhdr;
   bfd_size_type count;
   bfd_size_type total_namlen;
   file_ptr *offsets;
-  bfd_boolean makemap;
-  bfd_boolean hasobjects;
+  bool makemap;
+  bool hasobjects;
   file_ptr prevoff, nextoff;
   bfd *current_bfd;
   size_t i;
@@ -2280,15 +2550,15 @@ xcoff_write_archive_contents_big (bfd *a
   bfd_vma member_table_size;
   struct archive_iterator iterator;
 
-  memset (&fhdr, 0, SIZEOF_AR_FILE_HDR_BIG);
-  memcpy (fhdr.magic, XCOFFARMAGBIG, SXCOFFARMAG);
+  memset (&xtdata, 0, sizeof (xtdata));
+  memcpy (fhdr->magic, XCOFFARMAGBIG, SXCOFFARMAG);
 
-  if (bfd_seek (abfd, (file_ptr) SIZEOF_AR_FILE_HDR_BIG, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, SIZEOF_AR_FILE_HDR_BIG, SEEK_SET) != 0)
+    return false;
 
   /* Calculate count and total_namlen.  */
   makemap = bfd_has_map (abfd);
-  hasobjects = FALSE;
+  hasobjects = false;
   for (current_bfd = abfd->archive_head, count = 0, total_namlen = 0;
        current_bfd != NULL;
        current_bfd = current_bfd->archive_next, count++)
@@ -2298,14 +2568,14 @@ xcoff_write_archive_contents_big (bfd *a
       if (makemap
 	  && ! hasobjects
 	  && bfd_check_format (current_bfd, bfd_object))
-	hasobjects = TRUE;
+	hasobjects = true;
 
       if (current_bfd->arelt_data == NULL)
 	{
 	  size = sizeof (struct areltdata);
 	  current_bfd->arelt_data = bfd_zmalloc (size);
 	  if (current_bfd->arelt_data == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       if (arch_xhdr_big (current_bfd) == NULL)
@@ -2313,18 +2583,34 @@ xcoff_write_archive_contents_big (bfd *a
 	  struct xcoff_ar_hdr_big *ahdrp;
 	  struct stat s;
 
-	  /* XXX This should actually be a call to stat64 (at least on
-	     32-bit machines).
-	     XXX This call will fail if the original object is not found.  */
-	  if (stat (bfd_get_filename (current_bfd), &s) != 0)
+	  if ((current_bfd->flags & BFD_IN_MEMORY) != 0)
+	    {
+	      /* Assume we just "made" the member, and fake it.  */
+	      struct bfd_in_memory *bim
+		= (struct bfd_in_memory *) current_bfd->iostream;
+	      time (&s.st_mtime);
+	      s.st_uid = getuid ();
+	      s.st_gid = getgid ();
+	      s.st_mode = 0644;
+	      s.st_size = bim->size;
+	    }
+	  else if (stat (bfd_get_filename (current_bfd), &s) != 0)
 	    {
-	      bfd_set_error (bfd_error_system_call);
-	      return FALSE;
+	      bfd_set_input_error (current_bfd, bfd_error_system_call);
+	      return false;
+	    }
+
+	  if ((abfd->flags & BFD_DETERMINISTIC_OUTPUT) != 0)
+	    {
+	      s.st_mtime = 0;
+	      s.st_uid = 0;
+	      s.st_gid = 0;
+	      s.st_mode = 0644;
 	    }
 
 	  ahdrp = bfd_zalloc (current_bfd, sizeof (*ahdrp));
 	  if (ahdrp == NULL)
-	    return FALSE;
+	    return false;
 
 	  PRINT20 (ahdrp->size, s.st_size);
 	  PRINT12 (ahdrp->date, s.st_mtime);
@@ -2342,7 +2628,7 @@ xcoff_write_archive_contents_big (bfd *a
     {
       offsets = (file_ptr *) bfd_malloc (count * sizeof (file_ptr));
       if (offsets == NULL)
-	return FALSE;
+	return false;
     }
 
   prevoff = 0;
@@ -2361,20 +2647,20 @@ xcoff_write_archive_contents_big (bfd *a
       if (!do_pad (abfd, iterator.current.leading_padding))
 	{
 	  free (offsets);
-	  return FALSE;
+	  return false;
 	}
 
       BFD_ASSERT (iterator.current.offset == bfd_tell (abfd));
       namlen = iterator.current.padded_namlen;
-      if (bfd_bwrite (ahdrp, SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG
-	  || bfd_bwrite (iterator.current.name, namlen, abfd) != namlen
-	  || bfd_bwrite (XCOFFARFMAG, SXCOFFARFMAG, abfd) != SXCOFFARFMAG
+      if (bfd_write (ahdrp, SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG
+	  || bfd_write (iterator.current.name, namlen, abfd) != namlen
+	  || bfd_write (XCOFFARFMAG, SXCOFFARFMAG, abfd) != SXCOFFARFMAG
 	  || bfd_seek (iterator.current.member, 0, SEEK_SET) != 0
 	  || !do_copy (abfd, iterator.current.member)
 	  || !do_pad (abfd, iterator.current.trailing_padding))
 	{
 	  free (offsets);
-	  return FALSE;
+	  return false;
 	}
 
       offsets[i] = iterator.current.offset;
@@ -2383,8 +2669,8 @@ xcoff_write_archive_contents_big (bfd *a
 
   if (count)
     {
-      PRINT20 (fhdr.firstmemoff, offsets[0]);
-      PRINT20 (fhdr.lastmemoff, prevoff);
+      PRINT20 (fhdr->firstmemoff, offsets[0]);
+      PRINT20 (fhdr->lastmemoff, prevoff);
     }
 
   /* Write out the member table.
@@ -2422,7 +2708,7 @@ xcoff_write_archive_contents_big (bfd *a
   if (member_table == NULL)
     {
       free (offsets);
-      return FALSE;
+      return false;
     }
 
   hdr = (struct xcoff_ar_hdr_big *) member_table;
@@ -2471,12 +2757,12 @@ xcoff_write_archive_contents_big (bfd *a
       mt += namlen + 1;
     }
 
-  if (bfd_bwrite (member_table, member_table_size, abfd) != member_table_size)
-    return FALSE;
+  if (bfd_write (member_table, member_table_size, abfd) != member_table_size)
+    return false;
 
   free (member_table);
 
-  PRINT20 (fhdr.memoff, nextoff);
+  PRINT20 (fhdr->memoff, nextoff);
 
   prevoff = nextoff;
   nextoff += member_table_size;
@@ -2484,30 +2770,32 @@ xcoff_write_archive_contents_big (bfd *a
   /* Write out the armap, if appropriate.  */
 
   if (! makemap || ! hasobjects)
-    PRINT20 (fhdr.symoff, 0);
+    PRINT20 (fhdr->symoff, 0);
   else
     {
       BFD_ASSERT (nextoff == bfd_tell (abfd));
 
-      /* Save nextoff in fhdr.symoff so the armap routine can use it.  */
-      PRINT20 (fhdr.symoff, nextoff);
+      /* Save nextoff in fhdr->symoff so the armap routine can use it.  */
+      PRINT20 (fhdr->symoff, nextoff);
 
-      bfd_ardata (abfd)->tdata = &fhdr;
-      if (! _bfd_compute_and_write_armap (abfd, 0))
-	return FALSE;
+      bfd_ardata (abfd)->tdata = &xtdata;
+      bool ret = _bfd_compute_and_write_armap (abfd, 0);
+      bfd_ardata (abfd)->tdata = NULL;
+      if (!ret)
+	return false;
     }
 
   /* Write out the archive file header.  */
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || (bfd_bwrite (&fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR_BIG,
-		      abfd) != SIZEOF_AR_FILE_HDR_BIG))
-    return FALSE;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || (bfd_write (fhdr, SIZEOF_AR_FILE_HDR_BIG, abfd)
+	  != SIZEOF_AR_FILE_HDR_BIG))
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_xcoff_write_archive_contents (bfd *abfd)
 {
   if (! xcoff_big_format_p (abfd))
@@ -2566,11 +2854,13 @@ _bfd_xcoff_sizeof_headers (bfd *abfd,
       /* Sum.  */
       for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
 	for (s = sub->sections; s != NULL; s = s->next)
-	  {
-	    struct nbr_reloc_lineno *e = &n_rl[s->output_section->index];
-	    e->reloc_count += s->reloc_count;
-	    e->lineno_count += s->lineno_count;
-	  }
+	  if (s->output_section->owner == abfd
+	      && !bfd_section_removed_from_list (abfd, s->output_section))
+	    {
+	      struct nbr_reloc_lineno *e = &n_rl[s->output_section->index];
+	      e->reloc_count += s->reloc_count;
+	      e->lineno_count += s->lineno_count;
+	    }
 
       /* Add the size of a section for each section with an overflow.  */
       for (s = abfd->sections; s != NULL; s = s->next)
@@ -2726,7 +3016,7 @@ xcoff_swap_ldrel_out (bfd *abfd, const s
 }
 
 
-bfd_boolean
+bool
 xcoff_reloc_type_noop (bfd *input_bfd ATTRIBUTE_UNUSED,
 		       asection *input_section ATTRIBUTE_UNUSED,
 		       bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -2736,12 +3026,13 @@ xcoff_reloc_type_noop (bfd *input_bfd AT
 		       bfd_vma val ATTRIBUTE_UNUSED,
 		       bfd_vma addend ATTRIBUTE_UNUSED,
 		       bfd_vma *relocation ATTRIBUTE_UNUSED,
-		       bfd_byte *contents ATTRIBUTE_UNUSED)
+		       bfd_byte *contents ATTRIBUTE_UNUSED,
+		       struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 xcoff_reloc_type_fail (bfd *input_bfd,
 		       asection *input_section ATTRIBUTE_UNUSED,
 		       bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -2751,17 +3042,18 @@ xcoff_reloc_type_fail (bfd *input_bfd,
 		       bfd_vma val ATTRIBUTE_UNUSED,
 		       bfd_vma addend ATTRIBUTE_UNUSED,
 		       bfd_vma *relocation ATTRIBUTE_UNUSED,
-		       bfd_byte *contents ATTRIBUTE_UNUSED)
+		       bfd_byte *contents ATTRIBUTE_UNUSED,
+		       struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   _bfd_error_handler
     /* xgettext: c-format */
     (_("%pB: unsupported relocation type %#x"),
      input_bfd, (unsigned int) rel->r_type);
   bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return false;
 }
 
-bfd_boolean
+bool
 xcoff_reloc_type_pos (bfd *input_bfd ATTRIBUTE_UNUSED,
 		      asection *input_section ATTRIBUTE_UNUSED,
 		      bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -2771,13 +3063,14 @@ xcoff_reloc_type_pos (bfd *input_bfd ATT
 		      bfd_vma val,
 		      bfd_vma addend,
 		      bfd_vma *relocation,
-		      bfd_byte *contents ATTRIBUTE_UNUSED)
+		      bfd_byte *contents ATTRIBUTE_UNUSED,
+		      struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   *relocation = val + addend;
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 xcoff_reloc_type_neg (bfd *input_bfd ATTRIBUTE_UNUSED,
 		      asection *input_section ATTRIBUTE_UNUSED,
 		      bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -2787,13 +3080,14 @@ xcoff_reloc_type_neg (bfd *input_bfd ATT
 		      bfd_vma val,
 		      bfd_vma addend,
 		      bfd_vma *relocation,
-		      bfd_byte *contents ATTRIBUTE_UNUSED)
+		      bfd_byte *contents ATTRIBUTE_UNUSED,
+		      struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
-  *relocation = addend - val;
-  return TRUE;
+  *relocation = - val - addend;
+  return true;
 }
 
-bfd_boolean
+bool
 xcoff_reloc_type_rel (bfd *input_bfd ATTRIBUTE_UNUSED,
 		      asection *input_section,
 		      bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -2803,9 +3097,10 @@ xcoff_reloc_type_rel (bfd *input_bfd ATT
 		      bfd_vma val,
 		      bfd_vma addend,
 		      bfd_vma *relocation,
-		      bfd_byte *contents ATTRIBUTE_UNUSED)
+		      bfd_byte *contents ATTRIBUTE_UNUSED,
+		      struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
-  howto->pc_relative = TRUE;
+  howto->pc_relative = true;
 
   /* A PC relative reloc includes the section address.  */
   addend += input_section->vma;
@@ -2813,25 +3108,26 @@ xcoff_reloc_type_rel (bfd *input_bfd ATT
   *relocation = val + addend;
   *relocation -= (input_section->output_section->vma
 		  + input_section->output_offset);
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 xcoff_reloc_type_toc (bfd *input_bfd,
 		      asection *input_section ATTRIBUTE_UNUSED,
 		      bfd *output_bfd,
 		      struct internal_reloc *rel,
-		      struct internal_syment *sym,
+		      struct internal_syment *sym ATTRIBUTE_UNUSED,
 		      struct reloc_howto_struct *howto ATTRIBUTE_UNUSED,
 		      bfd_vma val,
 		      bfd_vma addend ATTRIBUTE_UNUSED,
 		      bfd_vma *relocation,
-		      bfd_byte *contents ATTRIBUTE_UNUSED)
+		      bfd_byte *contents ATTRIBUTE_UNUSED,
+		      struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   struct xcoff_link_hash_entry *h;
 
   if (0 > rel->r_symndx)
-    return FALSE;
+    return false;
 
   h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx];
 
@@ -2844,7 +3140,7 @@ xcoff_reloc_type_toc (bfd *input_bfd,
 	    (_("%pB: TOC reloc at %#" PRIx64 " to symbol `%s' with no TOC entry"),
 	     input_bfd, (uint64_t) rel->r_vaddr, h->root.root.string);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       BFD_ASSERT ((h->flags & XCOFF_SET_TOC) == 0);
@@ -2852,12 +3148,20 @@ xcoff_reloc_type_toc (bfd *input_bfd,
 	      + h->toc_section->output_offset);
     }
 
-  *relocation = ((val - xcoff_data (output_bfd)->toc)
-		 - (sym->n_value - xcoff_data (input_bfd)->toc));
-  return TRUE;
+  /* We can't use the preexisting value written down by the
+     assembly, as R_TOCU needs to be adjusted when the final
+     R_TOCL value is signed.  */
+  *relocation = val - xcoff_data (output_bfd)->toc;
+
+  if (rel->r_type == R_TOCU)
+    *relocation = ((*relocation + 0x8000) >> 16) & 0xffff;
+  if (rel->r_type == R_TOCL)
+    *relocation = *relocation & 0x0000ffff;
+
+  return true;
 }
 
-bfd_boolean
+bool
 xcoff_reloc_type_ba (bfd *input_bfd ATTRIBUTE_UNUSED,
 		     asection *input_section ATTRIBUTE_UNUSED,
 		     bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -2867,17 +3171,18 @@ xcoff_reloc_type_ba (bfd *input_bfd ATTR
 		     bfd_vma val,
 		     bfd_vma addend,
 		     bfd_vma *relocation,
-		     bfd_byte *contents ATTRIBUTE_UNUSED)
+		     bfd_byte *contents ATTRIBUTE_UNUSED,
+		     struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   howto->src_mask &= ~3;
   howto->dst_mask = howto->src_mask;
 
   *relocation = val + addend;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 xcoff_reloc_type_br (bfd *input_bfd,
 		     asection *input_section,
 		     bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -2887,13 +3192,16 @@ xcoff_reloc_type_br (bfd *input_bfd,
 		     bfd_vma val,
 		     bfd_vma addend,
 		     bfd_vma *relocation,
-		     bfd_byte *contents)
+		     bfd_byte *contents,
+		     struct bfd_link_info *info)
 {
   struct xcoff_link_hash_entry *h;
   bfd_vma section_offset;
+  struct xcoff_stub_hash_entry *stub_entry = NULL;
+  enum xcoff_stub_type stub_type;
 
   if (0 > rel->r_symndx)
-    return FALSE;
+    return false;
 
   h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx];
   section_offset = rel->r_vaddr - input_section->vma;
@@ -2944,6 +3252,27 @@ xcoff_reloc_type_br (bfd *input_bfd,
       howto->complain_on_overflow = complain_overflow_dont;
     }
 
+  /* Check if a stub is needed.  */
+  stub_type = bfd_xcoff_type_of_stub (input_section, rel, val, h);
+  if (stub_type != xcoff_stub_none)
+    {
+      asection *stub_csect;
+
+      stub_entry = bfd_xcoff_get_stub_entry (input_section, h, info);
+      if (stub_entry == NULL)
+	{
+	  _bfd_error_handler (_("Unable to find the stub entry targeting %s"),
+			      h->root.root.string);
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+
+      stub_csect = stub_entry->hcsect->root.u.def.section;
+      val = (stub_entry->stub_offset
+	     + stub_csect->output_section->vma
+	     + stub_csect->output_offset);
+    }
+
   /* The original PC-relative relocation is biased by -r_vaddr, so adding
      the value below will give the absolute target address.  */
   *relocation = val + addend + rel->r_vaddr;
@@ -2968,22 +3297,22 @@ xcoff_reloc_type_br (bfd *input_bfd,
       bfd_put_32 (input_bfd, insn, ptr);
 
       /* Make the howto absolute too.  */
-      howto->pc_relative = FALSE;
+      howto->pc_relative = false;
       howto->complain_on_overflow = complain_overflow_bitfield;
     }
   else
     {
       /* Use a PC-relative howto and subtract the instruction's address
 	 from the target address we calculated above.  */
-      howto->pc_relative = TRUE;
+      howto->pc_relative = true;
       *relocation -= (input_section->output_section->vma
 		      + input_section->output_offset
 		      + section_offset);
     }
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 xcoff_reloc_type_crel (bfd *input_bfd ATTRIBUTE_UNUSED,
 		       asection *input_section,
 		       bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -2993,9 +3322,10 @@ xcoff_reloc_type_crel (bfd *input_bfd AT
 		       bfd_vma val ATTRIBUTE_UNUSED,
 		       bfd_vma addend,
 		       bfd_vma *relocation,
-		       bfd_byte *contents ATTRIBUTE_UNUSED)
+		       bfd_byte *contents ATTRIBUTE_UNUSED,
+		       struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
-  howto->pc_relative = TRUE;
+  howto->pc_relative = true;
   howto->src_mask &= ~3;
   howto->dst_mask = howto->src_mask;
 
@@ -3005,20 +3335,94 @@ xcoff_reloc_type_crel (bfd *input_bfd AT
   *relocation = val + addend;
   *relocation -= (input_section->output_section->vma
 		  + input_section->output_offset);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+bool
+xcoff_reloc_type_tls (bfd *input_bfd ATTRIBUTE_UNUSED,
+		      asection *input_section ATTRIBUTE_UNUSED,
+		      bfd *output_bfd ATTRIBUTE_UNUSED,
+		      struct internal_reloc *rel ATTRIBUTE_UNUSED,
+		      struct internal_syment *sym ATTRIBUTE_UNUSED,
+		      struct reloc_howto_struct *howto,
+		      bfd_vma val,
+		      bfd_vma addend,
+		      bfd_vma *relocation,
+		      bfd_byte *contents ATTRIBUTE_UNUSED,
+		      struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  struct xcoff_link_hash_entry *h;
+
+  if (0 > rel->r_symndx)
+    return false;
+
+  h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx];
+
+  /* R_TLSML is handled by the loader but must be from a
+     TOC entry targeting itslef.  This is already verified in
+     xcoff_link_add_symbols.
+     The value must be 0.  */
+  if (howto->type == R_TLSML)
+    {
+      *relocation = 0;
+      return true;
+    }
+
+  /* The target symbol should always be available even if it's not
+     exported.  */
+  BFD_ASSERT (h != NULL);
+
+  /* TLS relocations must target a TLS symbol.  */
+  if (h->smclas != XMC_TL && h->smclas != XMC_UL)
+    {
+      _bfd_error_handler
+	(_("%pB: TLS relocation at 0x%" PRIx64 " over non-TLS symbol %s (0x%x)\n"),
+	 input_bfd, (uint64_t) rel->r_vaddr, h->root.root.string, h->smclas);
+      return false;
+    }
+
+  /* Local TLS relocations must target a local symbol, ie
+     non-imported. */
+  if ((rel->r_type == R_TLS_LD || rel->r_type == R_TLS_LE)
+      && (((h->flags & XCOFF_DEF_REGULAR) == 0
+       && (h->flags & XCOFF_DEF_DYNAMIC) != 0)
+	  || (h->flags & XCOFF_IMPORT) != 0))
+    {
+      _bfd_error_handler
+	(_("%pB: TLS local relocation at 0x%" PRIx64 " over imported symbol %s\n"),
+	 input_bfd, (uint64_t) rel->r_vaddr, h->root.root.string);
+      return false;
+    }
+
+  /* R_TLSM are relocations used by the loader.
+     The value must be 0.  */
+  if (howto->type == R_TLSM)
+    {
+      *relocation = 0;
+      return true;
+    }
+
+  /* Other TLS relocations aims to put offsets from TLS pointers
+     starting at -0x7c00 (or -0x7800 in XCOFF64).  It becomes a
+     simple R_POS relocation as long as .tdata and .tbss addresses
+     start at the same value. This is done in aix ld scripts.
+     TODO: implement optimization when tls size is < 62K.  */
+  *relocation = val + addend;
+
+  return true;
+}
+
+static bool
 xcoff_complain_overflow_dont_func (bfd *input_bfd ATTRIBUTE_UNUSED,
 				   bfd_vma val ATTRIBUTE_UNUSED,
 				   bfd_vma relocation ATTRIBUTE_UNUSED,
 				   struct reloc_howto_struct *
 				      howto ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 xcoff_complain_overflow_bitfield_func (bfd *input_bfd,
 				       bfd_vma val,
 				       bfd_vma relocation,
@@ -3064,7 +3468,7 @@ xcoff_complain_overflow_bitfield_func (b
 	 ones, we are OK, assuming a signed bitfield.  */
       ss = (signmask << howto->rightshift) - 1;
       if ((ss | relocation) != ~ (bfd_vma) 0)
-	return TRUE;
+	return true;
       a &= fieldmask;
     }
 
@@ -3077,7 +3481,7 @@ xcoff_complain_overflow_bitfield_func (b
      away from the location at which it is linked.  */
   if ((unsigned) howto->bitsize + howto->rightshift
       == bfd_arch_bits_per_address (input_bfd))
-    return FALSE;
+    return false;
 
   sum = a + b;
   if (sum < a || (sum & ~ fieldmask) != 0)
@@ -3086,13 +3490,13 @@ xcoff_complain_overflow_bitfield_func (b
 	 for signed operands again.  Here is the overflow test
 	 is as for complain_overflow_signed.  */
       if (((~ (a ^ b)) & (a ^ sum)) & signmask)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 xcoff_complain_overflow_signed_func (bfd *input_bfd,
 				     bfd_vma val,
 				     bfd_vma relocation,
@@ -3118,7 +3522,7 @@ xcoff_complain_overflow_signed_func (bfd
   signmask = ~ (fieldmask >> 1);
   ss = a & signmask;
   if (ss != 0 && ss != ((addrmask >> howto->rightshift) & signmask))
-    return TRUE;
+    return true;
 
   /* We only need this next bit of code if the sign bit of B
      is below the sign bit of A.  This would only happen if
@@ -3148,12 +3552,12 @@ xcoff_complain_overflow_signed_func (bfd
   */
   signmask = (fieldmask >> 1) + 1;
   if (((~ (a ^ b)) & (a ^ sum)) & signmask)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 xcoff_complain_overflow_unsigned_func (bfd *input_bfd,
 				       bfd_vma val,
 				       bfd_vma relocation,
@@ -3186,20 +3590,23 @@ xcoff_complain_overflow_unsigned_func (b
   b = (b & addrmask) >> howto->bitpos;
   sum = (a + b) & addrmask;
   if ((a | b | sum) & ~ fieldmask)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* This is the relocation function for the RS/6000/POWER/PowerPC.
    This is currently the only processor which uses XCOFF; I hope that
    will never change.
 
-   I took the relocation type definitions from two documents:
+   The original version was based on two documents:
    the PowerPC AIX Version 4 Application Binary Interface, First
    Edition (April 1992), and the PowerOpen ABI, Big-Endian
    32-Bit Hardware Implementation (June 30, 1994).  Differences
    between the documents are noted below.
+   Now, IBM has released an official documentation about XCOFF
+   format:
+   https://www.ibm.com/support/knowledgecenter/ssw_aix_72/filesreference/XCOFF.html
 
    Unsupported r_type's
 
@@ -3234,38 +3641,68 @@ xcoff_complain_overflow_unsigned_func (b
    osym = oTOC + on
    oinsn = on + o
    so we must change insn by on - in.
+   This relocation allows the linker to perform optimizations
+   by transforming a load instruction into a add-immediate
+   when possible. The relocation is, then, changed to R_TRLA
+   in the output file.
+   TODO: Currently, the optimisation isn't implemented.
+
+   R_TRL:
+   TOC relative relocation.  Same as R_TOC, except that
+   the optimization isn't allowed
+
+   R_TRLA:
+   TOC relative relocation.  This is a TOC relative load
+   address instruction which have been changed to an add-
+   immediate instruction.
 
    R_GL:
    GL linkage relocation.  The value of this relocation
-   is the address of the entry in the TOC section.
+   is the address of the external symbol in the TOC
+   section.
 
    R_TCL:
    Local object TOC address.  I can't figure out the
    difference between this and case R_GL.
 
-   R_TRL:
-   TOC relative relocation.  A TOC relative load instruction
-   which may be changed to a load address instruction.
-   FIXME: We don't currently implement this optimization.
+   R_RL:
+   The PowerPC AIX ABI describes this as a load which may be
+   changed to a load address.  The PowerOpen ABI says this
+   is the same as case R_POS.
 
-   R_TRLA:
-   TOC relative relocation.  This is a TOC relative load
-   address instruction which may be changed to a load
-   instruction.  FIXME: I don't know if this is the correct
-   implementation.
+   R_RLA:
+   The PowerPC AIX ABI describes this as a load address
+   which may be changed to a load.  The PowerOpen ABI says
+   this is the same as R_POS.
+
+   R_REF:
+   Not a relocation but a way to prevent the garbage
+   collector of AIX linker to remove symbols.
+   This is not needed in our case.
 
    R_BA:
-   Absolute branch.  We don't want to mess with the lower
-   two bits of the instruction.
+   The PowerOpen ABI says this is the same as R_RBA.
+
+   R_RBA:
+   Absolute branch which may be modified to become a
+   relative branch.
+
+   R_BR:
+   The PowerOpen ABI says this is the same as R_RBR.
+
+   R_RBR:
+   A relative branch which may be modified to become an
+   absolute branch.
 
    R_CAI:
    The PowerPC ABI defines this as an absolute call which
    may be modified to become a relative call.  The PowerOpen
    ABI does not define this relocation type.
 
-   R_RBA:
-   Absolute branch which may be modified to become a
-   relative branch.
+   R_CREL:
+   The PowerPC ABI defines this as a relative call which may
+   be modified to become an absolute call.  The PowerOpen
+   ABI does not define this relocation type.
 
    R_RBAC:
    The PowerPC ABI defines this as an absolute branch to a
@@ -3278,31 +3715,35 @@ xcoff_complain_overflow_unsigned_func (b
    fixed address which may be modified to a relative branch.
    The PowerOpen ABI does not define this relocation type.
 
-   R_BR:
-   Relative branch.  We don't want to mess with the lower
-   two bits of the instruction.
+   R_TLS:
+   Thread-local storage relocation using general-dynamic
+   model.
 
-   R_CREL:
-   The PowerPC ABI defines this as a relative call which may
-   be modified to become an absolute call.  The PowerOpen
-   ABI does not define this relocation type.
+   R_TLS_IE:
+   Thread-local storage relocation using initial-exec model.
 
-   R_RBR:
-   A relative branch which may be modified to become an
-   absolute branch.
+   R_TLS_LD:
+   Thread-local storage relocation using local-dynamic model.
 
-   R_RL:
-   The PowerPC AIX ABI describes this as a load which may be
-   changed to a load address.  The PowerOpen ABI says this
-   is the same as case R_POS.
+   R_TLS_LE:
+   Thread-local storage relocation using local-exec model.
 
-   R_RLA:
-   The PowerPC AIX ABI describes this as a load address
-   which may be changed to a load.  The PowerOpen ABI says
-   this is the same as R_POS.
+   R_TLSM:
+   Tread-local storage relocation used by the loader.
+
+   R_TLSML:
+   Tread-local storage relocation used by the loader.
+
+   R_TOCU:
+   Upper TOC relative relocation. The value is the
+   high-order 16 bit of a TOC relative relocation.
+
+   R_TOCL:
+   Lower TOC relative relocation. The value is the
+   low-order 16 bit of a TOC relative relocation.
 */
 
-bfd_boolean
+bool
 xcoff_ppc_relocate_section (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    bfd *input_bfd,
@@ -3336,21 +3777,33 @@ xcoff_ppc_relocate_section (bfd *output_
       if (rel->r_type == R_REF)
 	continue;
 
-      /* howto */
-      howto.type = rel->r_type;
-      howto.rightshift = 0;
-      howto.bitsize = (rel->r_size & 0x1f) + 1;
-      howto.size = howto.bitsize > 16 ? 2 : 1;
-      howto.pc_relative = FALSE;
-      howto.bitpos = 0;
+      /* Retrieve default value in HOWTO table and fix up according
+	 to r_size field, if it can be different.
+	 This should be made during relocation reading but the algorithms
+	 are expecting constant howtos.  */
+      memcpy (&howto, &xcoff_howto_table[rel->r_type], sizeof (howto));
+      if (howto.bitsize != (rel->r_size & 0x1f) + 1)
+	{
+	  switch (rel->r_type)
+	    {
+	    case R_POS:
+	    case R_NEG:
+	      howto.bitsize = (rel->r_size & 0x1f) + 1;
+	      howto.size = HOWTO_RSIZE (howto.bitsize > 16 ? 4 : 2);
+	      howto.src_mask = howto.dst_mask = N_ONES (howto.bitsize);
+	      break;
+
+	    default:
+	      _bfd_error_handler
+		(_("%pB: relocation (%d) at 0x%" PRIx64 " has wrong r_rsize (0x%x)\n"),
+		 input_bfd, rel->r_type, (uint64_t) rel->r_vaddr, rel->r_size);
+	      return false;
+	    }
+	}
+
       howto.complain_on_overflow = (rel->r_size & 0x80
 				    ? complain_overflow_signed
 				    : complain_overflow_bitfield);
-      howto.special_function = NULL;
-      howto.name = "internal";
-      howto.partial_inplace = TRUE;
-      howto.src_mask = howto.dst_mask = N_ONES (howto.bitsize);
-      howto.pcrel_offset = FALSE;
 
       /* symbol */
       val = 0;
@@ -3389,7 +3842,8 @@ xcoff_ppc_relocate_section (bfd *output_
 		  (info, h->root.root.string,
 		   input_bfd, input_section,
 		   rel->r_vaddr - input_section->vma,
-		   info->unresolved_syms_in_objects == RM_GENERATE_ERROR);
+		   info->unresolved_syms_in_objects == RM_DIAGNOSE &&
+		       !info->warn_unresolved_syms);
 
 	      if (h->root.type == bfd_link_hash_defined
 		  || h->root.type == bfd_link_hash_defweak)
@@ -3420,8 +3874,8 @@ xcoff_ppc_relocate_section (bfd *output_
       if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION
 	  || !((*xcoff_calculate_relocation[rel->r_type])
 	       (input_bfd, input_section, output_bfd, rel, sym, &howto, val,
-		addend, &relocation, contents)))
-	return FALSE;
+		addend, &relocation, contents, info)))
+	return false;
 
       /* address */
       address = rel->r_vaddr - input_section->vma;
@@ -3431,7 +3885,7 @@ xcoff_ppc_relocate_section (bfd *output_
 	abort ();
 
       /* Get the value we are going to relocate.  */
-      if (1 == howto.size)
+      if (2 == bfd_get_reloc_size (&howto))
 	value_to_relocate = bfd_get_16 (input_bfd, location);
       else
 	value_to_relocate = bfd_get_32 (input_bfd, location);
@@ -3478,13 +3932,13 @@ xcoff_ppc_relocate_section (bfd *output_
 			       + relocation) & howto.dst_mask));
 
       /* Put the value back in the object file.  */
-      if (1 == howto.size)
+      if (2 == bfd_get_reloc_size (&howto))
 	bfd_put_16 (input_bfd, value_to_relocate, location);
       else
 	bfd_put_32 (input_bfd, value_to_relocate, location);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* gcc-8 warns (*) on all the strncpy calls in this function about
@@ -3504,7 +3958,7 @@ xcoff_ppc_relocate_section (bfd *output_
 # pragma GCC diagnostic push
 # pragma GCC diagnostic ignored "-Wstringop-truncation"
 #endif
-static bfd_boolean
+static bool
 _bfd_xcoff_put_ldsymbol_name (bfd *abfd ATTRIBUTE_UNUSED,
 			      struct xcoff_loader_info *ldinfo,
 			      struct internal_ldsym *ldsym,
@@ -3531,25 +3985,25 @@ _bfd_xcoff_put_ldsymbol_name (bfd *abfd
 	  newstrings = bfd_realloc (ldinfo->strings, newalc);
 	  if (newstrings == NULL)
 	    {
-	      ldinfo->failed = TRUE;
-	      return FALSE;
+	      ldinfo->failed = true;
+	      return false;
 	    }
 	  ldinfo->string_alc = newalc;
 	  ldinfo->strings = newstrings;
 	}
 
-      bfd_put_16 (ldinfo->output_bfd, (bfd_vma) (len + 1),
-		  ldinfo->strings + ldinfo->string_size);
+      ldinfo->strings[ldinfo->string_size] = ((len + 1) >> 8) & 0xff;
+      ldinfo->strings[ldinfo->string_size + 1] = ((len + 1)) & 0xff;
       strcpy (ldinfo->strings + ldinfo->string_size + 2, name);
       ldsym->_l._l_l._l_zeroes = 0;
       ldsym->_l._l_l._l_offset = ldinfo->string_size + 2;
       ldinfo->string_size += len + 3;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 _bfd_xcoff_put_symbol_name (struct bfd_link_info *info,
 			    struct bfd_strtab_hash *strtab,
 			    struct internal_syment *sym,
@@ -3561,17 +4015,17 @@ _bfd_xcoff_put_symbol_name (struct bfd_l
     }
   else
     {
-      bfd_boolean hash;
+      bool hash;
       bfd_size_type indx;
 
       hash = !info->traditional_format;
-      indx = _bfd_stringtab_add (strtab, name, hash, FALSE);
+      indx = _bfd_stringtab_add (strtab, name, hash, false);
       if (indx == (bfd_size_type) -1)
-	return FALSE;
+	return false;
       sym->_n._n_n._n_zeroes = 0;
       sym->_n._n_n._n_offset = STRING_SIZE_SIZE + indx;
     }
-  return TRUE;
+  return true;
 }
 #if GCC_VERSION >= 8000
 # pragma GCC diagnostic pop
@@ -3611,22 +4065,22 @@ xcoff_create_csect_from_smclas (bfd *abf
   return return_value;
 }
 
-static bfd_boolean
+static bool
 xcoff_is_lineno_count_overflow (bfd *abfd ATTRIBUTE_UNUSED, bfd_vma value)
 {
   if (0xffff <= value)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 xcoff_is_reloc_count_overflow (bfd *abfd ATTRIBUTE_UNUSED, bfd_vma value)
 {
   if (0xffff <= value)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 static bfd_vma
@@ -3642,9 +4096,9 @@ xcoff_loader_reloc_offset (bfd *abfd, st
   return bfd_xcoff_ldhdrsz (abfd) + ldhdr->l_nsyms * bfd_xcoff_ldsymsz (abfd);
 }
 
-static bfd_boolean
+static bool
 xcoff_generate_rtinit  (bfd *abfd, const char *init, const char *fini,
-			bfd_boolean rtld)
+			bool rtld)
 {
   bfd_byte filehdr_ext[FILHSZ];
   bfd_byte scnhdr_ext[SCNHSZ];
@@ -3667,7 +4121,7 @@ xcoff_generate_rtinit  (bfd *abfd, const
   char *rtld_name = "__rtld";
 
   if (! bfd_xcoff_rtinit_size (abfd))
-    return FALSE;
+    return false;
 
   initsz = (init == NULL ? 0 : 1 + strlen (init));
   finisz = (fini == NULL ? 0 : 1 + strlen (fini));
@@ -3722,7 +4176,7 @@ xcoff_generate_rtinit  (bfd *abfd, const
   data_buffer = NULL;
   data_buffer = (bfd_byte *) bfd_zmalloc (data_buffer_size);
   if (data_buffer == NULL)
-    return FALSE;
+    return false;
 
   if (initsz)
     {
@@ -3758,7 +4212,10 @@ xcoff_generate_rtinit  (bfd *abfd, const
       string_table_size += 4;
       string_table = (bfd_byte *) bfd_zmalloc (string_table_size);
       if (string_table == NULL)
-	return FALSE;
+	{
+	  free (data_buffer);
+	  return false;
+	}
 
       val = string_table_size;
       bfd_h_put_32 (abfd, val, &string_table[0]);
@@ -3781,7 +4238,7 @@ xcoff_generate_rtinit  (bfd *abfd, const
   syment.n_scnum = 1;
   syment.n_sclass = C_HIDEXT;
   syment.n_numaux = 1;
-  auxent.x_csect.x_scnlen.l = data_buffer_size;
+  auxent.x_csect.x_scnlen.u64 = data_buffer_size;
   auxent.x_csect.x_smtyp = 3 << 3 | XTY_SD;
   auxent.x_csect.x_smclas = XMC_RW;
   bfd_coff_swap_sym_out (abfd, &syment,
@@ -3908,42 +4365,73 @@ xcoff_generate_rtinit  (bfd *abfd, const
   filehdr.f_symptr = scnhdr.s_relptr + scnhdr.s_nreloc * RELSZ;
 
   bfd_coff_swap_filehdr_out (abfd, &filehdr, filehdr_ext);
-  bfd_bwrite (filehdr_ext, FILHSZ, abfd);
   bfd_coff_swap_scnhdr_out (abfd, &scnhdr, scnhdr_ext);
-  bfd_bwrite (scnhdr_ext, SCNHSZ, abfd);
-  bfd_bwrite (data_buffer, data_buffer_size, abfd);
-  bfd_bwrite (reloc_ext, scnhdr.s_nreloc * RELSZ, abfd);
-  bfd_bwrite (syment_ext, filehdr.f_nsyms * SYMESZ, abfd);
-  bfd_bwrite (string_table, string_table_size, abfd);
+  bool ret = true;
+  if (bfd_write (filehdr_ext, FILHSZ, abfd) != FILHSZ
+      || bfd_write (scnhdr_ext, SCNHSZ, abfd) != SCNHSZ
+      || bfd_write (data_buffer, data_buffer_size, abfd) != data_buffer_size
+      || (bfd_write (reloc_ext, scnhdr.s_nreloc * RELSZ, abfd)
+	  != scnhdr.s_nreloc * RELSZ)
+      || (bfd_write (syment_ext, filehdr.f_nsyms * SYMESZ, abfd)
+	  != (bfd_size_type) filehdr.f_nsyms * SYMESZ)
+      || bfd_write (string_table, string_table_size, abfd) != string_table_size)
+    ret = false;
 
+  free (string_table);
   free (data_buffer);
-  data_buffer = NULL;
-
-  return TRUE;
+  return ret;
 }
 
 
 static reloc_howto_type xcoff_dynamic_reloc =
 HOWTO (0,			/* type */
        0,			/* rightshift */
-       2,			/* size (0 = byte, 1 = short, 2 = long) */
+       4,			/* size */
        32,			/* bitsize */
-       FALSE,			/* pc_relative */
+       false,			/* pc_relative */
        0,			/* bitpos */
        complain_overflow_bitfield, /* complain_on_overflow */
        0,			/* special_function */
        "R_POS",			/* name */
-       TRUE,			/* partial_inplace */
+       true,			/* partial_inplace */
        0xffffffff,		/* src_mask */
        0xffffffff,		/* dst_mask */
-       FALSE);			/* pcrel_offset */
+       false);			/* pcrel_offset */
+
+/* Indirect call stub
+   The first word of the code must be modified by filling in
+   the correct TOC offset.  */
+
+static const unsigned long xcoff_stub_indirect_call_code[4] =
+  {
+    0x81820000,	/* lwz r12,0(r2) */
+    0x800c0000,	/* lwz r0,0(r12) */
+    0x7c0903a6,	/* mtctr r0 */
+    0x4e800420,	/* bctr */
+  };
+
+/*  Shared call stub
+    The first word of the code must be modified by filling in
+    the correct TOC offset.
+    This is exactly as the glink code but without the traceback,
+    as it won't be an independent function.  */
+
+static const unsigned long xcoff_stub_shared_call_code[6] =
+  {
+    0x81820000,	/* lwz r12,0(r2) */
+    0x90410014,	/* stw r2,20(r1) */
+    0x800c0000,	/* lwz r0,0(r12) */
+    0x804c0004,	/* lwz r2,4(r12) */
+    0x7c0903a6,	/* mtctr r0 */
+    0x4e800420,	/* bctr */
+  };
 
 /*  glink
 
    The first word of global linkage code must be modified by filling in
    the correct TOC offset.  */
 
-static unsigned long xcoff_glink_code[9] =
+static const unsigned long xcoff_glink_code[9] =
   {
     0x81820000,	/* lwz r12,0(r2) */
     0x90410014,	/* stw r2,20(r1) */
@@ -3956,22 +4444,27 @@ static unsigned long xcoff_glink_code[9]
     0x00000000,	/* traceback table */
   };
 
-/* Table to convert DWARF flags to section names.  */
+/* Table to convert DWARF flags to section names.
+   Remember to update binutils/dwarf.c:debug_displays
+   if new DWARF sections are supported by XCOFF.  */
 
 const struct xcoff_dwsect_name xcoff_dwsect_names[] = {
-  { SSUBTYP_DWINFO,  ".dwinfo",   TRUE },
-  { SSUBTYP_DWLINE,  ".dwline",   TRUE },
-  { SSUBTYP_DWPBNMS, ".dwpbnms",  TRUE },
-  { SSUBTYP_DWPBTYP, ".dwpbtyp",  TRUE },
-  { SSUBTYP_DWARNGE, ".dwarnge",  TRUE },
-  { SSUBTYP_DWABREV, ".dwabrev",  FALSE },
-  { SSUBTYP_DWSTR,   ".dwstr",    TRUE },
-  { SSUBTYP_DWRNGES, ".dwrnges",  TRUE }
+  { SSUBTYP_DWINFO,  ".dwinfo",  ".debug_info",     true },
+  { SSUBTYP_DWLINE,  ".dwline",  ".debug_line",     true },
+  { SSUBTYP_DWPBNMS, ".dwpbnms", ".debug_pubnames", true },
+  { SSUBTYP_DWPBTYP, ".dwpbtyp", ".debug_pubtypes", true },
+  { SSUBTYP_DWARNGE, ".dwarnge", ".debug_aranges",  true },
+  { SSUBTYP_DWABREV, ".dwabrev", ".debug_abbrev",   false },
+  { SSUBTYP_DWSTR,   ".dwstr",   ".debug_str",      true },
+  { SSUBTYP_DWRNGES, ".dwrnges", ".debug_ranges",   true },
+  { SSUBTYP_DWLOC,   ".dwloc",   ".debug_loc",      true },
+  { SSUBTYP_DWFRAME, ".dwframe", ".debug_frame",    true },
+  { SSUBTYP_DWMAC,   ".dwmac",   ".debug_macro",    true }
 };
 
 /* For generic entry points.  */
-#define _bfd_xcoff_close_and_cleanup _bfd_archive_close_and_cleanup
-#define _bfd_xcoff_bfd_free_cached_info _bfd_bool_bfd_true
+#define _bfd_xcoff_close_and_cleanup coff_close_and_cleanup
+#define _bfd_xcoff_bfd_free_cached_info coff_bfd_free_cached_info
 #define _bfd_xcoff_new_section_hook coff_new_section_hook
 #define _bfd_xcoff_get_section_contents _bfd_generic_get_section_contents
 #define _bfd_xcoff_get_section_contents_in_window \
@@ -4017,6 +4510,8 @@ const struct xcoff_dwsect_name xcoff_dws
   coff_bfd_is_target_special_symbol
 #define _bfd_xcoff_get_lineno coff_get_lineno
 #define _bfd_xcoff_find_nearest_line coff_find_nearest_line
+#define _bfd_xcoff_find_nearest_line_with_alt \
+coff_find_nearest_line_with_alt
 #define _bfd_xcoff_find_line coff_find_line
 #define _bfd_xcoff_find_inliner_info coff_find_inliner_info
 #define _bfd_xcoff_bfd_make_debug_symbol coff_bfd_make_debug_symbol
@@ -4075,10 +4570,10 @@ static const struct xcoff_backend_data_r
       RELSZ,
       LINESZ,
       FILNMLEN,
-      TRUE,			/* _bfd_coff_long_filenames */
+      true,			/* _bfd_coff_long_filenames */
       XCOFF_NO_LONG_SECTION_NAMES,  /* _bfd_coff_long_section_names */
       3,			/* _bfd_coff_default_section_alignment_power */
-      FALSE,			/* _bfd_coff_force_symnames_in_strings */
+      false,			/* _bfd_coff_force_symnames_in_strings */
       2,			/* _bfd_coff_debug_string_prefix_length */
       32768,			/* _bfd_coff_max_nscns */
       coff_swap_filehdr_in,
@@ -4149,6 +4644,14 @@ static const struct xcoff_backend_data_r
     /* rtinit */
     64,				/* _xcoff_rtinit_size */
     xcoff_generate_rtinit,
+
+    /* Stub indirect call.  */
+    &xcoff_stub_indirect_call_code[0],
+    16,				/* _xcoff_stub_indirect_call_size */
+
+    /* Stub shared call.  */
+    &xcoff_stub_shared_call_code[0],
+    24,				/* _xcoff_stub_shared_call_size */
   };
 
 /* The transfer vector that leads the outside world to all of the above.  */
@@ -4167,6 +4670,7 @@ const bfd_target rs6000_xcoff_vec =
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 
     /* data */
     bfd_getb64,
@@ -4256,10 +4760,10 @@ static const struct xcoff_backend_data_r
       RELSZ,
       LINESZ,
       FILNMLEN,
-      TRUE,			/* _bfd_coff_long_filenames */
+      true,			/* _bfd_coff_long_filenames */
       XCOFF_NO_LONG_SECTION_NAMES,  /* _bfd_coff_long_section_names */
       3,			/* _bfd_coff_default_section_alignment_power */
-      FALSE,			/* _bfd_coff_force_symnames_in_strings */
+      false,			/* _bfd_coff_force_symnames_in_strings */
       2,			/* _bfd_coff_debug_string_prefix_length */
       32768,			/* _bfd_coff_max_nscns */
       coff_swap_filehdr_in,
@@ -4330,6 +4834,14 @@ static const struct xcoff_backend_data_r
     /* rtinit */
     0,				/* _xcoff_rtinit_size */
     xcoff_generate_rtinit,
+
+    /* Stub indirect call.  */
+    &xcoff_stub_indirect_call_code[0],
+    16,				/* _xcoff_stub_indirect_call_size */
+
+    /* Stub shared call.  */
+    &xcoff_stub_shared_call_code[0],
+    24,				/* _xcoff_stub_shared_call_size */
   };
 
 /* The transfer vector that leads the outside world to all of the above.  */
@@ -4348,6 +4860,7 @@ const bfd_target powerpc_xcoff_vec =
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 
     /* data */
     bfd_getb64,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-sh.c ./bfd/coff-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-sh.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-sh.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Renesas Super-H COFF binaries.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Contributed by Cygnus Support.
    Written by Steve Chamberlain, <sac@cygnus.com>.
    Relaxing code written by Ian Lance Taylor, <ian@cygnus.com>.
@@ -35,10 +35,10 @@
 #include "coff/pe.h"
 
 #ifndef COFF_IMAGE_WITH_PE
-static bfd_boolean sh_align_load_span
+static bool sh_align_load_span
   (bfd *, asection *, bfd_byte *,
-   bfd_boolean (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
-   void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bfd_boolean *);
+   bool (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
+   void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bool *);
 
 #define _bfd_sh_align_load_span sh_align_load_span
 #endif
@@ -75,7 +75,7 @@ static bfd_boolean sh_align_load_span
 /* Return TRUE if this relocation should
    appear in the output .reloc section.  */
 
-static bfd_boolean
+static bool
 in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
 	    reloc_howto_type * howto)
 {
@@ -85,13 +85,13 @@ in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
 
 static bfd_reloc_status_type
 sh_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_boolean
+static bool
 sh_relocate_section (bfd *, struct bfd_link_info *, bfd *, asection *,
 		     bfd_byte *, struct internal_reloc *,
 		     struct internal_syment *, asection **);
-static bfd_boolean
+static bool
 sh_align_loads (bfd *, asection *, struct internal_reloc *,
-		bfd_byte *, bfd_boolean *);
+		bfd_byte *, bool *);
 
 /* The supported relocations.  There are a lot of relocations defined
    in coff/internal.h which we do not expect to ever see.  */
@@ -103,17 +103,17 @@ static reloc_howto_type sh_coff_howtos[]
   /* Windows CE */
   HOWTO (R_SH_IMM32CE,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_imm32ce",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #else
   EMPTY_HOWTO (2),
 #endif
@@ -127,65 +127,65 @@ static reloc_howto_type sh_coff_howtos[]
 
   HOWTO (R_SH_PCDISP8BY2,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_pcdisp8by2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   EMPTY_HOWTO (11), /* R_SH_PCDISP8 */
 
   HOWTO (R_SH_PCDISP,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 12,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_pcdisp12by2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   EMPTY_HOWTO (13),
 
   HOWTO (R_SH_IMM32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_imm32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (15),
 #ifdef COFF_WITH_PE
   HOWTO (R_SH_IMAGEBASE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "rva32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #else
   EMPTY_HOWTO (16), /* R_SH_IMM8 */
 #endif
@@ -197,171 +197,171 @@ static reloc_howto_type sh_coff_howtos[]
 
   HOWTO (R_SH_PCRELIMM8BY2,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_pcrelimm8by2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_SH_PCRELIMM8BY4,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_pcrelimm8by4",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_SH_IMM16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_imm16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_SWITCH16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_switch16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_SWITCH32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_switch32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_USES,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_uses",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_COUNT,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_count",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_ALIGN,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_align",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_CODE,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_code",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DATA,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_data",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_LABEL,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_label",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_SWITCH8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 sh_reloc,		/* special_function */
 	 "r_switch8",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false)			/* pcrel_offset */
 };
 
 #define SH_COFF_HOWTO_COUNT (sizeof sh_coff_howtos / sizeof sh_coff_howtos[0])
@@ -544,7 +544,8 @@ sh_coff_reloc_name_lookup (bfd *abfd ATT
       cache_ptr->addend = 0;					\
     else if (ptr && bfd_asymbol_bfd (ptr) == abfd		\
 	     && ptr->section != (asection *) NULL)		\
-      cache_ptr->addend = - (ptr->section->vma + ptr->value);	\
+      cache_ptr->addend = - (ptr->section->vma			\
+			     + COFF_PE_ADDEND_BIAS (ptr));	\
     else							\
       cache_ptr->addend = 0;					\
     if ((reloc).r_type == R_SH_SWITCH8				\
@@ -597,7 +598,8 @@ sh_reloc (bfd *      abfd,
       && bfd_is_und_section (symbol_in->section))
     return bfd_reloc_undefined;
 
-  if (addr > input_section->size)
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd, input_section,
+				  addr))
     return bfd_reloc_outofrange;
 
   sym_value = get_symbol_value (symbol_in);
@@ -656,7 +658,7 @@ sh_reloc (bfd *      abfd,
 
 #include "coffcode.h"
 
-static bfd_boolean
+static bool
 sh_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
 
 /* This function handles relaxing on the SH.
@@ -702,40 +704,41 @@ sh_relax_delete_bytes (bfd *, asection *
    align load and store instructions on four byte boundaries if we
    can, by swapping them with one of the adjacent instructions.  */
 
-static bfd_boolean
+static bool
 sh_relax_section (bfd *abfd,
 		  asection *sec,
 		  struct bfd_link_info *link_info,
-		  bfd_boolean *again)
+		  bool *again)
 {
   struct internal_reloc *internal_relocs;
-  bfd_boolean have_code;
+  bool have_code;
   struct internal_reloc *irel, *irelend;
   bfd_byte *contents = NULL;
 
-  *again = FALSE;
+  *again = false;
 
   if (bfd_link_relocatable (link_info)
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   if (coff_section_data (abfd, sec) == NULL)
     {
-      bfd_size_type amt = sizeof (struct coff_section_tdata);
+      size_t amt = sizeof (struct coff_section_tdata);
       sec->used_by_bfd = bfd_zalloc (abfd, amt);
       if (sec->used_by_bfd == NULL)
-	return FALSE;
+	return false;
     }
 
   internal_relocs = (_bfd_coff_read_internal_relocs
 		     (abfd, sec, link_info->keep_memory,
-		      (bfd_byte *) NULL, FALSE,
+		      (bfd_byte *) NULL, false,
 		      (struct internal_reloc *) NULL));
   if (internal_relocs == NULL)
     goto error_return;
 
-  have_code = FALSE;
+  have_code = false;
 
   irelend = internal_relocs + sec->reloc_count;
   for (irel = internal_relocs; irel < irelend; irel++)
@@ -747,7 +750,7 @@ sh_relax_section (bfd *abfd,
       bfd_signed_vma foff;
 
       if (irel->r_type == R_SH_CODE)
-	have_code = TRUE;
+	have_code = true;
 
       if (irel->r_type != R_SH_USES)
 	continue;
@@ -904,12 +907,7 @@ sh_relax_section (bfd *abfd,
 	 the linker is run.  */
 
       coff_section_data (abfd, sec)->relocs = internal_relocs;
-      coff_section_data (abfd, sec)->keep_relocs = TRUE;
-
       coff_section_data (abfd, sec)->contents = contents;
-      coff_section_data (abfd, sec)->keep_contents = TRUE;
-
-      obj_coff_keep_syms (abfd) = TRUE;
 
       /* Replace the jsr with a bsr.  */
 
@@ -965,7 +963,7 @@ sh_relax_section (bfd *abfd,
       /* That will change things, so, just in case it permits some
 	 other function call to come within range, we should relax
 	 again.  Note that this is not required, and it may be slow.  */
-      *again = TRUE;
+      *again = true;
 
       /* Now check whether we got a COUNT reloc.  */
       if (irelcount >= irelend)
@@ -1006,7 +1004,7 @@ sh_relax_section (bfd *abfd,
      byte boundaries.  */
   if (have_code)
     {
-      bfd_boolean swapped;
+      bool swapped;
 
       /* Get the section contents.  */
       if (contents == NULL)
@@ -1026,12 +1024,7 @@ sh_relax_section (bfd *abfd,
       if (swapped)
 	{
 	  coff_section_data (abfd, sec)->relocs = internal_relocs;
-	  coff_section_data (abfd, sec)->keep_relocs = TRUE;
-
 	  coff_section_data (abfd, sec)->contents = contents;
-	  coff_section_data (abfd, sec)->keep_contents = TRUE;
-
-	  obj_coff_keep_syms (abfd) = TRUE;
 	}
     }
 
@@ -1053,20 +1046,19 @@ sh_relax_section (bfd *abfd,
 	coff_section_data (abfd, sec)->contents = contents;
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (internal_relocs != NULL
-      && internal_relocs != coff_section_data (abfd, sec)->relocs)
+  if (internal_relocs != coff_section_data (abfd, sec)->relocs)
     free (internal_relocs);
-  if (contents != NULL && contents != coff_section_data (abfd, sec)->contents)
+  if (contents != coff_section_data (abfd, sec)->contents)
     free (contents);
-  return FALSE;
+  return false;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 sh_relax_delete_bytes (bfd *abfd,
 		       asection *sec,
 		       bfd_vma addr,
@@ -1128,7 +1120,7 @@ sh_relax_delete_bytes (bfd *abfd,
       struct internal_syment sym;
       int off, adjust, oinsn;
       bfd_signed_vma voff = 0;
-      bfd_boolean overflow;
+      bool overflow;
 
       /* Get the new reloc address.  */
       nraddr = irel->r_vaddr - sec->vma;
@@ -1290,7 +1282,7 @@ sh_relax_delete_bytes (bfd *abfd,
       if (adjust != 0)
 	{
 	  oinsn = insn;
-	  overflow = FALSE;
+	  overflow = false;
 	  switch (irel->r_type)
 	    {
 	    default:
@@ -1301,14 +1293,14 @@ sh_relax_delete_bytes (bfd *abfd,
 	    case R_SH_PCRELIMM8BY2:
 	      insn += adjust / 2;
 	      if ((oinsn & 0xff00) != (insn & 0xff00))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, contents + nraddr);
 	      break;
 
 	    case R_SH_PCDISP:
 	      insn += adjust / 2;
 	      if ((oinsn & 0xf000) != (insn & 0xf000))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, contents + nraddr);
 	      break;
 
@@ -1322,21 +1314,21 @@ sh_relax_delete_bytes (bfd *abfd,
 		    ++insn;
 		}
 	      if ((oinsn & 0xff00) != (insn & 0xff00))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, contents + nraddr);
 	      break;
 
 	    case R_SH_SWITCH8:
 	      voff += adjust;
 	      if (voff < 0 || voff >= 0xff)
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_8 (abfd, (bfd_vma) voff, contents + nraddr);
 	      break;
 
 	    case R_SH_SWITCH16:
 	      voff += adjust;
 	      if (voff < - 0x8000 || voff >= 0x8000)
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_signed_16 (abfd, (bfd_vma) voff, contents + nraddr);
 	      break;
 
@@ -1357,7 +1349,7 @@ sh_relax_delete_bytes (bfd *abfd,
 		(_("%pB: %#" PRIx64 ": fatal: reloc overflow while relaxing"),
 		 abfd, (uint64_t) irel->r_vaddr);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -1374,6 +1366,7 @@ sh_relax_delete_bytes (bfd *abfd,
       bfd_byte *ocontents;
 
       if (o == sec
+	  || (o->flags & SEC_HAS_CONTENTS) == 0
 	  || (o->flags & SEC_RELOC) == 0
 	  || o->reloc_count == 0)
 	continue;
@@ -1382,10 +1375,10 @@ sh_relax_delete_bytes (bfd *abfd,
 	 FALSE, we should free them, if we are permitted to, when we
 	 leave sh_coff_relax_section.  */
       internal_relocs = (_bfd_coff_read_internal_relocs
-			 (abfd, o, TRUE, (bfd_byte *) NULL, FALSE,
+			 (abfd, o, true, (bfd_byte *) NULL, false,
 			  (struct internal_reloc *) NULL));
       if (internal_relocs == NULL)
-	return FALSE;
+	return false;
 
       ocontents = NULL;
       irelscanend = internal_relocs + o->reloc_count;
@@ -1421,7 +1414,7 @@ sh_relax_delete_bytes (bfd *abfd,
 		  else
 		    {
 		      if (!bfd_malloc_and_get_section (abfd, o, &ocontents))
-			return FALSE;
+			return false;
 		      /* We always cache the section contents.
 			 Perhaps, if info->keep_memory is FALSE, we
 			 should free them, if we are permitted to,
@@ -1435,8 +1428,6 @@ sh_relax_delete_bytes (bfd *abfd,
 	      if (val > addr && val < toaddr)
 		bfd_put_32 (abfd, val - count,
 			    ocontents + irelscan->r_vaddr - o->vma);
-
-	      coff_section_data (abfd, o)->keep_contents = TRUE;
 	    }
 	}
     }
@@ -1451,7 +1442,7 @@ sh_relax_delete_bytes (bfd *abfd,
       _bfd_error_handler
 	(_("%pB: fatal: generic symbols retrieved before relaxing"), abfd);
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   /* Adjust all the symbols.  */
@@ -1504,7 +1495,7 @@ sh_relax_delete_bytes (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This is yet another version of the SH opcode table, used to rapidly
@@ -2058,7 +2049,7 @@ sh_insn_info (unsigned int insn)
 
 /* See whether an instruction uses a general purpose register.  */
 
-static bfd_boolean
+static bool
 sh_insn_uses_reg (unsigned int insn,
 		  const struct sh_opcode *op,
 		  unsigned int reg)
@@ -2069,24 +2060,24 @@ sh_insn_uses_reg (unsigned int insn,
 
   if ((f & USES1) != 0
       && USES1_REG (insn) == reg)
-    return TRUE;
+    return true;
   if ((f & USES2) != 0
       && USES2_REG (insn) == reg)
-    return TRUE;
+    return true;
   if ((f & USESR0) != 0
       && reg == 0)
-    return TRUE;
+    return true;
   if ((f & USESAS) && reg == USESAS_REG (insn))
-    return TRUE;
+    return true;
   if ((f & USESR8) && reg == 8)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* See whether an instruction sets a general purpose register.  */
 
-static bfd_boolean
+static bool
 sh_insn_sets_reg (unsigned int insn,
 		  const struct sh_opcode *op,
 		  unsigned int reg)
@@ -2097,35 +2088,35 @@ sh_insn_sets_reg (unsigned int insn,
 
   if ((f & SETS1) != 0
       && SETS1_REG (insn) == reg)
-    return TRUE;
+    return true;
   if ((f & SETS2) != 0
       && SETS2_REG (insn) == reg)
-    return TRUE;
+    return true;
   if ((f & SETSR0) != 0
       && reg == 0)
-    return TRUE;
+    return true;
   if ((f & SETSAS) && reg == SETSAS_REG (insn))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* See whether an instruction uses or sets a general purpose register */
 
-static bfd_boolean
+static bool
 sh_insn_uses_or_sets_reg (unsigned int insn,
 			  const struct sh_opcode *op,
 			  unsigned int reg)
 {
   if (sh_insn_uses_reg (insn, op, reg))
-    return TRUE;
+    return true;
 
   return sh_insn_sets_reg (insn, op, reg);
 }
 
 /* See whether an instruction uses a floating point register.  */
 
-static bfd_boolean
+static bool
 sh_insn_uses_freg (unsigned int insn,
 		   const struct sh_opcode *op,
 		   unsigned int freg)
@@ -2145,20 +2136,20 @@ sh_insn_uses_freg (unsigned int insn,
 
   if ((f & USESF1) != 0
       && (USESF1_REG (insn) & 0xe) == (freg & 0xe))
-    return TRUE;
+    return true;
   if ((f & USESF2) != 0
       && (USESF2_REG (insn) & 0xe) == (freg & 0xe))
-    return TRUE;
+    return true;
   if ((f & USESF0) != 0
       && freg == 0)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* See whether an instruction sets a floating point register.  */
 
-static bfd_boolean
+static bool
 sh_insn_sets_freg (unsigned int insn,
 		   const struct sh_opcode *op,
 		   unsigned int freg)
@@ -2178,20 +2169,20 @@ sh_insn_sets_freg (unsigned int insn,
 
   if ((f & SETSF1) != 0
       && (SETSF1_REG (insn) & 0xe) == (freg & 0xe))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* See whether an instruction uses or sets a floating point register */
 
-static bfd_boolean
+static bool
 sh_insn_uses_or_sets_freg (unsigned int insn,
 			   const struct sh_opcode *op,
 			   unsigned int reg)
 {
   if (sh_insn_uses_freg (insn, op, reg))
-    return TRUE;
+    return true;
 
   return sh_insn_sets_freg (insn, op, reg);
 }
@@ -2201,7 +2192,7 @@ sh_insn_uses_or_sets_freg (unsigned int
    This should return TRUE if there is a conflict, or FALSE if the
    instructions can be swapped safely.  */
 
-static bfd_boolean
+static bool
 sh_insns_conflict (unsigned int i1,
 		   const struct sh_opcode *op1,
 		   unsigned int i2,
@@ -2216,57 +2207,57 @@ sh_insns_conflict (unsigned int i1,
      FIXME: shouldn't test raw opcodes here.  */
   if (((i1 & 0xf0ff) == 0x4066 && (i2 & 0xf000) == 0xf000)
       || ((i2 & 0xf0ff) == 0x4066 && (i1 & 0xf000) == 0xf000))
-    return TRUE;
+    return true;
 
   if ((f1 & (BRANCH | DELAY)) != 0
       || (f2 & (BRANCH | DELAY)) != 0)
-    return TRUE;
+    return true;
 
   if (((f1 | f2) & SETSSP)
       && (f1 & (SETSSP | USESSP))
       && (f2 & (SETSSP | USESSP)))
-    return TRUE;
+    return true;
 
   if ((f1 & SETS1) != 0
       && sh_insn_uses_or_sets_reg (i2, op2, SETS1_REG (i1)))
-    return TRUE;
+    return true;
   if ((f1 & SETS2) != 0
       && sh_insn_uses_or_sets_reg (i2, op2, SETS2_REG (i1)))
-    return TRUE;
+    return true;
   if ((f1 & SETSR0) != 0
       && sh_insn_uses_or_sets_reg (i2, op2, 0))
-    return TRUE;
+    return true;
   if ((f1 & SETSAS)
       && sh_insn_uses_or_sets_reg (i2, op2, SETSAS_REG (i1)))
-    return TRUE;
+    return true;
   if ((f1 & SETSF1) != 0
       && sh_insn_uses_or_sets_freg (i2, op2, SETSF1_REG (i1)))
-    return TRUE;
+    return true;
 
   if ((f2 & SETS1) != 0
       && sh_insn_uses_or_sets_reg (i1, op1, SETS1_REG (i2)))
-    return TRUE;
+    return true;
   if ((f2 & SETS2) != 0
       && sh_insn_uses_or_sets_reg (i1, op1, SETS2_REG (i2)))
-    return TRUE;
+    return true;
   if ((f2 & SETSR0) != 0
       && sh_insn_uses_or_sets_reg (i1, op1, 0))
-    return TRUE;
+    return true;
   if ((f2 & SETSAS)
       && sh_insn_uses_or_sets_reg (i1, op1, SETSAS_REG (i2)))
-    return TRUE;
+    return true;
   if ((f2 & SETSF1) != 0
       && sh_insn_uses_or_sets_freg (i1, op1, SETSF1_REG (i2)))
-    return TRUE;
+    return true;
 
   /* The instructions do not conflict.  */
-  return FALSE;
+  return false;
 }
 
 /* I1 is a load instruction, and I2 is some other instruction.  Return
    TRUE if I1 loads a register which I2 uses.  */
 
-static bfd_boolean
+static bool
 sh_load_use (unsigned int i1,
 	     const struct sh_opcode *op1,
 	     unsigned int i2,
@@ -2277,7 +2268,7 @@ sh_load_use (unsigned int i1,
   f1 = op1->flags;
 
   if ((f1 & LOAD) == 0)
-    return FALSE;
+    return false;
 
   /* If both SETS1 and SETSSP are set, that means a load to a special
      register using postincrement addressing mode, which we don't care
@@ -2285,17 +2276,17 @@ sh_load_use (unsigned int i1,
   if ((f1 & SETS1) != 0
       && (f1 & SETSSP) == 0
       && sh_insn_uses_reg (i2, op2, (i1 & 0x0f00) >> 8))
-    return TRUE;
+    return true;
 
   if ((f1 & SETSR0) != 0
       && sh_insn_uses_reg (i2, op2, 0))
-    return TRUE;
+    return true;
 
   if ((f1 & SETSF1) != 0
       && sh_insn_uses_freg (i2, op2, (i1 & 0x0f00) >> 8))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Try to align loads and stores within a span of memory.  This is
@@ -2311,17 +2302,17 @@ sh_load_use (unsigned int i1,
 #ifdef COFF_WITH_PE
 static
 #endif
-bfd_boolean
+bool
 _bfd_sh_align_load_span (bfd *abfd,
 			 asection *sec,
 			 bfd_byte *contents,
-			 bfd_boolean (*swap) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
+			 bool (*swap) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
 			 void * relocs,
 			 bfd_vma **plabel,
 			 bfd_vma *label_end,
 			 bfd_vma start,
 			 bfd_vma stop,
-			 bfd_boolean *pswapped)
+			 bool *pswapped)
 {
   int dsp = (abfd->arch_info->mach == bfd_mach_sh_dsp
 	     || abfd->arch_info->mach == bfd_mach_sh3_dsp);
@@ -2331,7 +2322,7 @@ _bfd_sh_align_load_span (bfd *abfd,
      desirable.  In fact, it is counter-productive, since it interferes
      with the schedules generated by the compiler.  */
   if (abfd->arch_info->mach == bfd_mach_sh4)
-    return TRUE;
+    return true;
 
   /* If we are linking sh[3]-dsp code, swap the FPU instructions for DSP
      instructions.  */
@@ -2405,14 +2396,14 @@ _bfd_sh_align_load_span (bfd *abfd,
 	  && (prev_op->flags & (LOAD | STORE)) == 0
 	  && ! sh_insns_conflict (prev_insn, prev_op, insn, op))
 	{
-	  bfd_boolean ok;
+	  bool ok;
 
 	  /* The load/store instruction does not have a label, and
 	     there is a previous instruction; PREV_INSN is not
 	     itself a load/store instruction, and PREV_INSN and
 	     INSN do not conflict.  */
 
-	  ok = TRUE;
+	  ok = true;
 
 	  if (i >= start + 4)
 	    {
@@ -2427,7 +2418,7 @@ _bfd_sh_align_load_span (bfd *abfd,
 		 can not swap.  */
 	      if (prev2_op == NULL
 		  || (prev2_op->flags & DELAY) != 0)
-		ok = FALSE;
+		ok = false;
 
 	      /* If the instruction before PREV_INSN is a load,
 		 and it sets a register which INSN uses, then
@@ -2437,14 +2428,14 @@ _bfd_sh_align_load_span (bfd *abfd,
 	      if (ok
 		  && (prev2_op->flags & LOAD) != 0
 		  && sh_load_use (prev2_insn, prev2_op, insn, op))
-		ok = FALSE;
+		ok = false;
 	    }
 
 	  if (ok)
 	    {
 	      if (! (*swap) (abfd, sec, relocs, contents, i - 2))
-		return FALSE;
-	      *pswapped = TRUE;
+		return false;
+	      *pswapped = true;
 	      continue;
 	    }
 	}
@@ -2466,12 +2457,12 @@ _bfd_sh_align_load_span (bfd *abfd,
 	      && (next_op->flags & (LOAD | STORE)) == 0
 	      && ! sh_insns_conflict (insn, op, next_insn, next_op))
 	    {
-	      bfd_boolean ok;
+	      bool ok;
 
 	      /* NEXT_INSN is not itself a load/store instruction,
 		 and it does not conflict with INSN.  */
 
-	      ok = TRUE;
+	      ok = true;
 
 	      /* If PREV_INSN is a load, and it sets a register
 		 which NEXT_INSN uses, then putting NEXT_INSN
@@ -2480,7 +2471,7 @@ _bfd_sh_align_load_span (bfd *abfd,
 	      if (prev_op != NULL
 		  && (prev_op->flags & LOAD) != 0
 		  && sh_load_use (prev_insn, prev_op, next_insn, next_op))
-		ok = FALSE;
+		ok = false;
 
 	      /* If INSN is a load, and it sets a register which
 		 the insn after NEXT_INSN uses, then doing the
@@ -2503,27 +2494,27 @@ _bfd_sh_align_load_span (bfd *abfd,
 		  if (next2_op == NULL
 		      || ((next2_op->flags & (LOAD | STORE)) == 0
 			  && sh_load_use (insn, op, next2_insn, next2_op)))
-		    ok = FALSE;
+		    ok = false;
 		}
 
 	      if (ok)
 		{
 		  if (! (*swap) (abfd, sec, relocs, contents, i))
-		    return FALSE;
-		  *pswapped = TRUE;
+		    return false;
+		  *pswapped = true;
 		  continue;
 		}
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 #endif /* not COFF_IMAGE_WITH_PE */
 
 /* Swap two SH instructions.  */
 
-static bfd_boolean
+static bool
 sh_swap_insns (bfd *      abfd,
 	       asection * sec,
 	       void *     relocs,
@@ -2590,10 +2581,10 @@ sh_swap_insns (bfd *      abfd,
 	{
 	  bfd_byte *loc;
 	  unsigned short insn, oinsn;
-	  bfd_boolean overflow;
+	  bool overflow;
 
 	  loc = contents + irel->r_vaddr - sec->vma;
-	  overflow = FALSE;
+	  overflow = false;
 	  switch (type)
 	    {
 	    default:
@@ -2605,7 +2596,7 @@ sh_swap_insns (bfd *      abfd,
 	      oinsn = insn;
 	      insn += add / 2;
 	      if ((oinsn & 0xff00) != (insn & 0xff00))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, loc);
 	      break;
 
@@ -2614,7 +2605,7 @@ sh_swap_insns (bfd *      abfd,
 	      oinsn = insn;
 	      insn += add / 2;
 	      if ((oinsn & 0xf000) != (insn & 0xf000))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, loc);
 	      break;
 
@@ -2631,7 +2622,7 @@ sh_swap_insns (bfd *      abfd,
 		  oinsn = insn;
 		  insn += add / 2;
 		  if ((oinsn & 0xff00) != (insn & 0xff00))
-		    overflow = TRUE;
+		    overflow = true;
 		  bfd_put_16 (abfd, (bfd_vma) insn, loc);
 		}
 
@@ -2645,12 +2636,12 @@ sh_swap_insns (bfd *      abfd,
 		(_("%pB: %#" PRIx64 ": fatal: reloc overflow while relaxing"),
 		 abfd, (uint64_t) irel->r_vaddr);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look for loads and stores which we can align to four byte
@@ -2658,19 +2649,19 @@ sh_swap_insns (bfd *      abfd,
    this is desirable.  This sets *PSWAPPED if some instruction was
    swapped.  */
 
-static bfd_boolean
+static bool
 sh_align_loads (bfd *abfd,
 		asection *sec,
 		struct internal_reloc *internal_relocs,
 		bfd_byte *contents,
-		bfd_boolean *pswapped)
+		bool *pswapped)
 {
   struct internal_reloc *irel, *irelend;
   bfd_vma *labels = NULL;
   bfd_vma *label, *label_end;
   bfd_size_type amt;
 
-  *pswapped = FALSE;
+  *pswapped = false;
 
   irelend = internal_relocs + sec->reloc_count;
 
@@ -2720,18 +2711,17 @@ sh_align_loads (bfd *abfd,
 
   free (labels);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (labels != NULL)
-    free (labels);
-  return FALSE;
+  free (labels);
+  return false;
 }
 
 /* This is a modification of _bfd_coff_generic_relocate_section, which
    will handle SH relaxing.  */
 
-static bfd_boolean
+static bool
 sh_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 		     struct bfd_link_info *info,
 		     bfd *input_bfd,
@@ -2783,7 +2773,7 @@ sh_relocate_section (bfd *output_bfd ATT
 		(_("%pB: illegal symbol index %ld in relocs"),
 		 input_bfd, symndx);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  h = obj_coff_sym_hashes (input_bfd)[symndx];
 	  sym = syms + symndx;
@@ -2805,7 +2795,7 @@ sh_relocate_section (bfd *output_bfd ATT
       if (howto == NULL)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
 #ifdef COFF_WITH_PE
@@ -2852,7 +2842,7 @@ sh_relocate_section (bfd *output_bfd ATT
 	  else if (! bfd_link_relocatable (info))
 	    (*info->callbacks->undefined_symbol)
 	      (info, h->root.root.string, input_bfd, input_section,
-	       rel->r_vaddr - input_section->vma, TRUE);
+	       rel->r_vaddr - input_section->vma, true);
 	}
 
       rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
@@ -2877,7 +2867,12 @@ sh_relocate_section (bfd *output_bfd ATT
 	      name = NULL;
 	    else if (sym->_n._n_n._n_zeroes == 0
 		     && sym->_n._n_n._n_offset != 0)
-	      name = obj_coff_strings (input_bfd) + sym->_n._n_n._n_offset;
+	      {
+		if (sym->_n._n_n._n_offset < obj_coff_strings_len (input_bfd))
+		  name = obj_coff_strings (input_bfd) + sym->_n._n_n._n_offset;
+		else
+		  name = "?";
+	      }
 	    else
 	      {
 		strncpy (buf, sym->_n._n_name, SYMNMLEN);
@@ -2893,7 +2888,7 @@ sh_relocate_section (bfd *output_bfd ATT
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This is a version of bfd_generic_get_relocated_section_contents
@@ -2904,7 +2899,7 @@ sh_coff_get_relocated_section_contents (
 					struct bfd_link_info *link_info,
 					struct bfd_link_order *link_order,
 					bfd_byte *data,
-					bfd_boolean relocatable,
+					bool relocatable,
 					asymbol **symbols)
 {
   asection *input_section = link_order->u.indirect.section;
@@ -2923,6 +2918,13 @@ sh_coff_get_relocated_section_contents (
 						       relocatable,
 						       symbols);
 
+  bfd_byte *orig_data = data;
+  if (data == NULL)
+    {
+      data = bfd_malloc (input_section->size);
+      if (data == NULL)
+	return NULL;
+    }
   memcpy (data, coff_section_data (input_bfd, input_section)->contents,
 	  (size_t) input_section->size);
 
@@ -2939,8 +2941,8 @@ sh_coff_get_relocated_section_contents (
 	goto error_return;
 
       internal_relocs = (_bfd_coff_read_internal_relocs
-			 (input_bfd, input_section, FALSE, (bfd_byte *) NULL,
-			  FALSE, (struct internal_reloc *) NULL));
+			 (input_bfd, input_section, false, (bfd_byte *) NULL,
+			  false, (struct internal_reloc *) NULL));
       if (internal_relocs == NULL)
 	goto error_return;
 
@@ -2995,12 +2997,11 @@ sh_coff_get_relocated_section_contents (
   return data;
 
  error_return:
-  if (internal_relocs != NULL)
-    free (internal_relocs);
-  if (internal_syms != NULL)
-    free (internal_syms);
-  if (sections != NULL)
-    free (sections);
+  free (internal_relocs);
+  free (internal_syms);
+  free (sections);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
@@ -3044,7 +3045,7 @@ CREATE_LITTLE_COFF_TARGET_VEC (TARGET_SY
 /* Only recognize the small versions if the target was not defaulted.
    Otherwise we won't recognize the non default endianness.  */
 
-static const bfd_target *
+static bfd_cleanup
 coff_small_object_p (bfd *abfd)
 {
   if (abfd->target_defaulted)
@@ -3057,24 +3058,24 @@ coff_small_object_p (bfd *abfd)
 
 /* Set the section alignment for the small versions.  */
 
-static bfd_boolean
+static bool
 coff_small_new_section_hook (bfd *abfd, asection *section)
 {
   if (! coff_new_section_hook (abfd, section))
-    return FALSE;
+    return false;
 
   /* We must align to at least a four byte boundary, because longword
      accesses must be on a four byte boundary.  */
   if (section->alignment_power == COFF_DEFAULT_SECTION_ALIGNMENT_POWER)
     section->alignment_power = 2;
 
-  return TRUE;
+  return true;
 }
 
 /* This is copied from bfd_coff_std_swap_table so that we can change
    the default section alignment power.  */
 
-static bfd_coff_backend_data bfd_coff_small_swap_table =
+static const bfd_coff_backend_data bfd_coff_small_swap_table =
 {
   coff_swap_aux_in, coff_swap_sym_in, coff_swap_lineno_in,
   coff_swap_aux_out, coff_swap_sym_out,
@@ -3083,16 +3084,16 @@ static bfd_coff_backend_data bfd_coff_sm
   coff_swap_scnhdr_out,
   FILHSZ, AOUTSZ, SCNHSZ, SYMESZ, AUXESZ, RELSZ, LINESZ, FILNMLEN,
 #ifdef COFF_LONG_FILENAMES
-  TRUE,
+  true,
 #else
-  FALSE,
+  false,
 #endif
   COFF_DEFAULT_LONG_SECTION_NAMES,
   2,
 #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
-  TRUE,
+  true,
 #else
-  FALSE,
+  false,
 #endif
 #ifdef COFF_DEBUG_STRING_WIDE_PREFIX
   4,
@@ -3139,6 +3140,7 @@ const bfd_target sh_coff_small_vec =
   '/',				/* ar_pad_char */
   15,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
@@ -3196,6 +3198,7 @@ const bfd_target sh_coff_small_le_vec =
   '/',				/* ar_pad_char */
   15,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
   bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-stgo32.c ./bfd/coff-stgo32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-stgo32.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-stgo32.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel 386 COFF files (DJGPP variant with a stub).
-   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+   Copyright (C) 1997-2024 Free Software Foundation, Inc.
    Written by Robert Hoehne.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -23,17 +23,10 @@
    DOS executable program before the coff image to load it in memory
    and execute it. This is needed, because DOS cannot run coff files.
 
-   All the functions below are called by the corresponding functions
-   from coffswap.h.
-   The only thing what they do is to adjust the information stored in
-   the COFF file which are offset into the file.
-   This is needed, because DJGPP uses a very special way to load and run
-   the coff image. It loads the image in memory and assumes then, that the
-   image had no stub by using the filepointers as pointers in the coff
-   image and NOT in the file.
-
-   To be compatible with any existing executables I have fixed this
-   here and NOT in the DJGPP startup code.  */
+   The COFF image is loaded in memory without the stub attached, so
+   all offsets are relative to the beginning of the image, not the
+   actual file.  We handle this in bfd by setting bfd->origin to where
+   the COFF image starts.  */
 
 #define TARGET_SYM		i386_coff_go32stubbed_vec
 #define TARGET_NAME		"coff-go32-exe"
@@ -53,54 +46,29 @@
 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
 
+/* Section contains extended relocations. */
+#define IMAGE_SCN_LNK_NRELOC_OVFL (0x01000000)
+
 #include "sysdep.h"
 #include "bfd.h"
+#include "coff/msdos.h"
 
-/* All that ..._PRE and ...POST functions are called from the corresponding
-   coff_swap... functions. The ...PRE functions are called at the beginning
-   of the function and the ...POST functions at the end of the swap routines.  */
-
-static void
-adjust_filehdr_in_post  (bfd *, void *, void *);
-static void
-adjust_filehdr_out_pre  (bfd *, void *, void *);
-static void
-adjust_filehdr_out_post  (bfd *, void *, void *);
-static void
-adjust_scnhdr_in_post  (bfd *, void *, void *);
-static void
-adjust_scnhdr_out_pre  (bfd *, void *, void *);
-static void
-adjust_scnhdr_out_post (bfd *, void *, void *);
-static void
-adjust_aux_in_post (bfd *, void *, int, int, int, int, void *);
-static void
-adjust_aux_out_pre (bfd *, void *, int, int, int, int, void *);
-static void
-adjust_aux_out_post (bfd *, void *, int, int, int, int, void *);
-static void
-create_go32_stub (bfd *);
-
-#define COFF_ADJUST_FILEHDR_IN_POST adjust_filehdr_in_post
-#define COFF_ADJUST_FILEHDR_OUT_PRE adjust_filehdr_out_pre
-#define COFF_ADJUST_FILEHDR_OUT_POST adjust_filehdr_out_post
-
-#define COFF_ADJUST_SCNHDR_IN_POST adjust_scnhdr_in_post
-#define COFF_ADJUST_SCNHDR_OUT_PRE adjust_scnhdr_out_pre
-#define COFF_ADJUST_SCNHDR_OUT_POST adjust_scnhdr_out_post
-
-#define COFF_ADJUST_AUX_IN_POST adjust_aux_in_post
-#define COFF_ADJUST_AUX_OUT_PRE adjust_aux_out_pre
-#define COFF_ADJUST_AUX_OUT_POST adjust_aux_out_post
-
-static const bfd_target *go32_check_format (bfd *);
-
-#define COFF_CHECK_FORMAT go32_check_format
-
-static bfd_boolean
-  go32_stubbed_coff_bfd_copy_private_bfd_data (bfd *, bfd *);
-
-#define coff_bfd_copy_private_bfd_data go32_stubbed_coff_bfd_copy_private_bfd_data
+static bfd_cleanup go32exe_check_format (bfd *);
+static bool go32exe_write_object_contents (bfd *);
+static bool go32exe_mkobject (bfd *);
+static bool go32exe_copy_private_bfd_data (bfd *, bfd *);
+
+/* Defined in coff-go32.c.  */
+bool _bfd_go32_mkobject (bfd *);
+void _bfd_go32_swap_scnhdr_in (bfd *, void *, void *);
+unsigned int _bfd_go32_swap_scnhdr_out (bfd *, void *, void *);
+
+#define COFF_CHECK_FORMAT go32exe_check_format
+#define COFF_WRITE_CONTENTS go32exe_write_object_contents
+#define coff_mkobject go32exe_mkobject
+#define coff_bfd_copy_private_bfd_data go32exe_copy_private_bfd_data
+#define coff_SWAP_scnhdr_in _bfd_go32_swap_scnhdr_in
+#define coff_SWAP_scnhdr_out _bfd_go32_swap_scnhdr_out
 
 #include "coff-i386.c"
 
@@ -110,160 +78,15 @@ static bfd_boolean
 
 /* These bytes are a 2048-byte DOS executable, which loads the COFF
    image into memory and then runs it. It is called 'stub'.  */
-
-static const unsigned char stub_bytes[GO32_STUBSIZE] =
+#define GO32EXE_DEFAULT_STUB_SIZE 2048
+static const unsigned char go32exe_default_stub[GO32EXE_DEFAULT_STUB_SIZE] =
 {
 #include "go32stub.h"
 };
 
-/*
-   I have not commented each swap function below, because the
-   technique is in any function the same. For the ...in function,
-   all the pointers are adjusted by adding GO32_STUBSIZE and for the
-   ...out function, it is subtracted first and after calling the
-   standard swap function it is reset to the old value.  */
-
-/* This macro is used for adjusting the filepointers, which
-   is done only, if the pointer is nonzero.  */
-
-#define ADJUST_VAL(val,diff) \
-  if (val != 0) val += diff
-
-static void
-adjust_filehdr_in_post  (bfd *  abfd ATTRIBUTE_UNUSED,
-			 void * src,
-			 void * dst)
-{
-  FILHDR *filehdr_src = (FILHDR *) src;
-  struct internal_filehdr *filehdr_dst = (struct internal_filehdr *) dst;
-
-  ADJUST_VAL (filehdr_dst->f_symptr, GO32_STUBSIZE);
-
-  /* Save now the stub to be used later.  Put the stub data to FILEHDR_DST
-     first as coff_data (abfd) still does not exist.  It may not even be ever
-     created as we are just checking the file format of ABFD.  */
-  memcpy (filehdr_dst->go32stub, filehdr_src->stub, GO32_STUBSIZE);
-  filehdr_dst->f_flags |= F_GO32STUB;
-}
-
-static void
-adjust_filehdr_out_pre  (bfd * abfd, void * in, void * out)
-{
-  struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
-  FILHDR *filehdr_out = (FILHDR *) out;
-
-  /* Generate the stub.  */
-  create_go32_stub (abfd);
-
-  /* Copy the stub to the file header.  */
-  if (coff_data (abfd)->go32stub != NULL)
-    memcpy (filehdr_out->stub, coff_data (abfd)->go32stub, GO32_STUBSIZE);
-  else
-    /* Use the default.  */
-    memcpy (filehdr_out->stub, stub_bytes, GO32_STUBSIZE);
-
-  ADJUST_VAL (filehdr_in->f_symptr, -GO32_STUBSIZE);
-}
-
-static void
-adjust_filehdr_out_post  (bfd *  abfd ATTRIBUTE_UNUSED,
-			  void * in,
-			  void * out ATTRIBUTE_UNUSED)
-{
-  struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
-  /* Undo the above change.  */
-  ADJUST_VAL (filehdr_in->f_symptr, GO32_STUBSIZE);
-}
-
-static void
-adjust_scnhdr_in_post  (bfd *  abfd ATTRIBUTE_UNUSED,
-			void * ext ATTRIBUTE_UNUSED,
-			void * in)
-{
-  struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
-
-  ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE);
-}
-
-static void
-adjust_scnhdr_out_pre  (bfd *  abfd ATTRIBUTE_UNUSED,
-			void * in,
-			void * out ATTRIBUTE_UNUSED)
-{
-  struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
-
-  ADJUST_VAL (scnhdr_int->s_scnptr, -GO32_STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_relptr, -GO32_STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_lnnoptr, -GO32_STUBSIZE);
-}
-
-static void
-adjust_scnhdr_out_post (bfd *  abfd ATTRIBUTE_UNUSED,
-			void * in,
-			void * out ATTRIBUTE_UNUSED)
-{
-  struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
-
-  ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE);
-}
-
-static void
-adjust_aux_in_post (bfd * abfd ATTRIBUTE_UNUSED,
-		    void * ext1 ATTRIBUTE_UNUSED,
-		    int type,
-		    int in_class,
-		    int indx ATTRIBUTE_UNUSED,
-		    int numaux ATTRIBUTE_UNUSED,
-		    void * in1)
-{
-  union internal_auxent *in = (union internal_auxent *) in1;
-
-  if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
-      || ISTAG (in_class))
-    {
-      ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE);
-    }
-}
-
-static void
-adjust_aux_out_pre (bfd *abfd ATTRIBUTE_UNUSED,
-		    void * inp,
-		    int type,
-		    int in_class,
-		    int indx ATTRIBUTE_UNUSED,
-		    int numaux ATTRIBUTE_UNUSED,
-		    void * extp ATTRIBUTE_UNUSED)
-{
-  union internal_auxent *in = (union internal_auxent *) inp;
-
-  if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
-      || ISTAG (in_class))
-    {
-      ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, -GO32_STUBSIZE);
-    }
-}
-
-static void
-adjust_aux_out_post (bfd *abfd ATTRIBUTE_UNUSED,
-		     void * inp,
-		     int type,
-		     int in_class,
-		     int indx ATTRIBUTE_UNUSED,
-		     int numaux ATTRIBUTE_UNUSED,
-		     void * extp ATTRIBUTE_UNUSED)
-{
-  union internal_auxent *in = (union internal_auxent *) inp;
-
-  if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
-      || ISTAG (in_class))
-    {
-      ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE);
-    }
-}
+/* Temporary location for stub read from input file.  */
+static char * go32exe_temp_stub = NULL;
+static bfd_size_type go32exe_temp_stub_size = 0;
 
 /* That's the function, which creates the stub. There are
    different cases from where the stub is taken.
@@ -275,13 +98,16 @@ adjust_aux_out_post (bfd *abfd ATTRIBUTE
    file.
 
    If there was any error, the standard stub (compiled in this file)
-   is taken.  */
+   is taken.
+
+   Ideally this function should exec '$(TARGET)-stubify' to generate
+   a stub, like gcc does.  */
 
 static void
-create_go32_stub (bfd *abfd)
+go32exe_create_stub (bfd *abfd)
 {
   /* Do it only once.  */
-  if (coff_data (abfd)->go32stub == NULL)
+  if (coff_data (abfd)->stub == NULL)
     {
       char *stub;
       struct stat st;
@@ -291,6 +117,22 @@ create_go32_stub (bfd *abfd)
       unsigned long coff_start;
       long exe_start;
 
+      /* If we read a stub from an input file, use that one.  */
+      if (go32exe_temp_stub != NULL)
+	{
+	  coff_data (abfd)->stub = bfd_alloc (abfd,
+						  go32exe_temp_stub_size);
+	  if (coff_data (abfd)->stub == NULL)
+	    return;
+	  memcpy (coff_data (abfd)->stub, go32exe_temp_stub,
+		  go32exe_temp_stub_size);
+	  coff_data (abfd)->stub_size = go32exe_temp_stub_size;
+	  free (go32exe_temp_stub);
+	  go32exe_temp_stub = NULL;
+	  go32exe_temp_stub_size = 0;
+	  return;
+	}
+
       /* Check at first the environment variable $(GO32STUB).  */
       stub = getenv ("GO32STUB");
       /* Now check the environment variable $(STUB).  */
@@ -323,13 +165,6 @@ create_go32_stub (bfd *abfd)
       if (_H (1))
 	coff_start += (long) _H (1) - 512L;
 
-      /* Currently there is only a fixed stub size of 2048 bytes
-	 supported.  */
-      if (coff_start != 2048)
-	{
-	  close (f);
-	  goto stub_end;
-	}
       exe_start = _H (4) * 16;
       if ((long) lseek (f, exe_start, SEEK_SET) != exe_start)
 	{
@@ -341,84 +176,213 @@ create_go32_stub (bfd *abfd)
 	  close (f);
 	  goto stub_end;
 	}
-      if (! CONST_STRNEQ (magic, "go32stub"))
+      if (! startswith (magic, "go32stub"))
 	{
 	  close (f);
 	  goto stub_end;
 	}
       /* Now we found a correct stub (hopefully).  */
-      coff_data (abfd)->go32stub = bfd_alloc (abfd, (bfd_size_type) coff_start);
-      if (coff_data (abfd)->go32stub == NULL)
+      coff_data (abfd)->stub = bfd_alloc (abfd, (bfd_size_type) coff_start);
+      if (coff_data (abfd)->stub == NULL)
 	{
 	  close (f);
 	  return;
 	}
       lseek (f, 0L, SEEK_SET);
-      if ((unsigned long) read (f, coff_data (abfd)->go32stub, coff_start)
+      if ((unsigned long) read (f, coff_data (abfd)->stub, coff_start)
 	  != coff_start)
 	{
-	  bfd_release (abfd, coff_data (abfd)->go32stub);
-	  coff_data (abfd)->go32stub = NULL;
+	  bfd_release (abfd, coff_data (abfd)->stub);
+	  coff_data (abfd)->stub = NULL;
 	}
+      else
+	coff_data (abfd)->stub_size = coff_start;
       close (f);
     }
-stub_end:
+ stub_end:
   /* There was something wrong above, so use now the standard builtin
      stub.  */
-  if (coff_data (abfd)->go32stub == NULL)
+  if (coff_data (abfd)->stub == NULL)
     {
-      coff_data (abfd)->go32stub
-	= bfd_alloc (abfd, (bfd_size_type) GO32_STUBSIZE);
-      if (coff_data (abfd)->go32stub == NULL)
+      coff_data (abfd)->stub
+	= bfd_alloc (abfd, (bfd_size_type) GO32EXE_DEFAULT_STUB_SIZE);
+      if (coff_data (abfd)->stub == NULL)
 	return;
-      memcpy (coff_data (abfd)->go32stub, stub_bytes, GO32_STUBSIZE);
+      memcpy (coff_data (abfd)->stub, go32exe_default_stub,
+	      GO32EXE_DEFAULT_STUB_SIZE);
+      coff_data (abfd)->stub_size = GO32EXE_DEFAULT_STUB_SIZE;
     }
 }
 
 /* If ibfd was a stubbed coff image, copy the stub from that bfd
    to the new obfd.  */
 
-static bfd_boolean
-go32_stubbed_coff_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
+static bool
+go32exe_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   /* Check if both are the same targets.  */
   if (ibfd->xvec != obfd->xvec)
-    return TRUE;
+    return true;
+
+  /* Make sure we have a source stub.  */
+  BFD_ASSERT (coff_data (ibfd)->stub != NULL);
 
-  /* Check if we have a source stub.  */
-  if (coff_data (ibfd)->go32stub == NULL)
-    return TRUE;
-
-  /* As adjust_filehdr_out_pre may get called only after this function,
-     optionally allocate the output stub.  */
-  if (coff_data (obfd)->go32stub == NULL)
-    coff_data (obfd)->go32stub = bfd_alloc (obfd,
-					  (bfd_size_type) GO32_STUBSIZE);
+  /* Reallocate the output stub if necessary.  */
+  if (coff_data (ibfd)->stub_size > coff_data (obfd)->stub_size)
+    coff_data (obfd)->stub = bfd_alloc (obfd, coff_data (ibfd)->stub_size);
+  if (coff_data (obfd)->stub == NULL)
+    return false;
 
   /* Now copy the stub.  */
-  if (coff_data (obfd)->go32stub != NULL)
-    memcpy (coff_data (obfd)->go32stub, coff_data (ibfd)->go32stub,
-	    GO32_STUBSIZE);
+  memcpy (coff_data (obfd)->stub, coff_data (ibfd)->stub,
+	  coff_data (ibfd)->stub_size);
+  coff_data (obfd)->stub_size = coff_data (ibfd)->stub_size;
+  obfd->origin = coff_data (obfd)->stub_size;
+
+  return true;
+}
+
+/* Cleanup function, returned from check_format hook.  */
+
+static void
+go32exe_cleanup (bfd *abfd)
+{
+  abfd->origin = 0;
+  coff_object_cleanup (abfd);
 
-  return TRUE;
+  free (go32exe_temp_stub);
+  go32exe_temp_stub = NULL;
+  go32exe_temp_stub_size = 0;
 }
 
-/* coff_object_p only checks 2 bytes F_MAGIC at GO32_STUBSIZE inside the file
-   which is too fragile.  */
+/* Check that there is a GO32 stub and read it to go32exe_temp_stub.
+   Then set abfd->origin so that the COFF image is read at the correct
+   file offset.  */
 
-static const bfd_target *
-go32_check_format (bfd *abfd)
+static bfd_cleanup
+go32exe_check_format (bfd *abfd)
 {
-  char mz[2];
+  struct external_DOS_hdr filehdr_dos;
+  uint16_t num_pages;
+  uint16_t last_page_size;
+  uint32_t header_end;
+  bfd_size_type stubsize;
 
-  if (bfd_bread (mz, 2, abfd) != 2 || mz[0] != 'M' || mz[1] != 'Z')
+  /* This format can not appear in an archive.  */
+  if (abfd->origin != 0)
     {
       bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
+  bfd_set_error (bfd_error_system_call);
+
+  /* Read in the stub file header, which is a DOS MZ executable.  */
+  if (bfd_read (&filehdr_dos, DOS_HDR_SIZE, abfd) != DOS_HDR_SIZE)
+    goto fail;
+
+  /* Make sure that this is an MZ executable.  */
+  if (H_GET_16 (abfd, filehdr_dos.e_magic) != IMAGE_DOS_SIGNATURE)
+    goto fail_format;
+
+  /* Determine the size of the stub  */
+  num_pages = H_GET_16 (abfd, filehdr_dos.e_cp);
+  last_page_size = H_GET_16 (abfd, filehdr_dos.e_cblp);
+  stubsize = num_pages * 512;
+  if (last_page_size != 0)
+    stubsize += last_page_size - 512;
+
+  ufile_ptr filesize = bfd_get_file_size (abfd);
+  if (filesize != 0 && stubsize > filesize)
+    goto fail_format;
+
+  /* Save now the stub to be used later.  Put the stub data to a temporary
+     location first as tdata still does not exist.  It may not even
+     be ever created if we are just checking the file format of ABFD.  */
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
+    goto fail;
+  go32exe_temp_stub = bfd_malloc (stubsize);
+  if (go32exe_temp_stub == NULL)
+    goto fail;
+  if (bfd_read (go32exe_temp_stub, stubsize, abfd) != stubsize)
+    goto fail;
+  go32exe_temp_stub_size = stubsize;
+
+  /* Confirm that this is a go32stub.  */
+  header_end = H_GET_16 (abfd, filehdr_dos.e_cparhdr) * 16UL;
+  if (go32exe_temp_stub_size < header_end
+      || go32exe_temp_stub_size - header_end < sizeof "go32stub" - 1
+      || !startswith (go32exe_temp_stub + header_end, "go32stub"))
+    goto fail_format;
+
+  /* Set origin to where the COFF header starts and seek there.  */
+  abfd->origin = stubsize;
   if (bfd_seek (abfd, 0, SEEK_SET) != 0)
-    return NULL;
+    goto fail;
+
+  /* Call coff_object_p to read the COFF image.  If this fails then the file
+     must be just a stub with no COFF data attached.  */
+  bfd_cleanup cleanup = coff_object_p (abfd);
+  if (cleanup == NULL)
+    goto fail;
+  BFD_ASSERT (cleanup == coff_object_cleanup);
+
+  return go32exe_cleanup;
+
+ fail_format:
+  bfd_set_error (bfd_error_wrong_format);
+ fail:
+  go32exe_cleanup (abfd);
+  return NULL;
+}
+
+/* Write the stub to the output file, then call coff_write_object_contents.  */
+
+static bool
+go32exe_write_object_contents (bfd *abfd)
+{
+  const bfd_size_type pos = bfd_tell (abfd);
+  const bfd_size_type stubsize = coff_data (abfd)->stub_size;
+
+  BFD_ASSERT (stubsize != 0);
+
+  bfd_set_error (bfd_error_system_call);
+
+  /* Write the stub.  */
+  abfd->origin = 0;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
+    return false;
+  if (bfd_write (coff_data (abfd)->stub, stubsize, abfd) != stubsize)
+    return false;
+
+  /* Seek back to where we were.  */
+  abfd->origin = stubsize;
+  if (bfd_seek (abfd, pos, SEEK_SET) != 0)
+    return false;
+
+  return coff_write_object_contents (abfd);
+}
+
+/* mkobject hook.  Called directly through bfd_set_format or via
+   coff_mkobject_hook etc from bfd_check_format.  */
+
+static bool
+go32exe_mkobject (bfd *abfd)
+{
+  /* Don't output to an archive.  */
+  if (abfd->my_archive != NULL)
+    return false;
+
+  if (!_bfd_go32_mkobject (abfd))
+    return false;
+
+  go32exe_create_stub (abfd);
+  if (coff_data (abfd)->stub == NULL)
+    {
+      bfd_release (abfd, coff_data (abfd));
+      return false;
+    }
+  abfd->origin = coff_data (abfd)->stub_size;
 
-  return coff_object_p (abfd);
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coffswap.h ./bfd/coffswap.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coffswap.h	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coffswap.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic COFF swapping routines, for BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -246,6 +246,33 @@ coff_swap_reloc_out (bfd * abfd, void *
   return bfd_coff_relsz (abfd);
 }
 
+#ifdef TICOFF
+static void
+coff_swap_reloc_v0_in (bfd *abfd, void *src, void *dst)
+{
+  struct external_reloc_v0 *reloc_src = (struct external_reloc_v0 *) src;
+  struct internal_reloc *reloc_dst = (struct internal_reloc *) dst;
+
+  reloc_dst->r_vaddr  = GET_RELOC_VADDR (abfd, reloc_src->r_vaddr);
+  reloc_dst->r_symndx = H_GET_16 (abfd, reloc_src->r_symndx);
+  reloc_dst->r_type   = H_GET_16 (abfd, reloc_src->r_type);
+}
+
+static unsigned int
+coff_swap_reloc_v0_out (bfd *abfd, void *src, void *dst)
+{
+  struct internal_reloc *reloc_src = (struct internal_reloc *) src;
+  struct external_reloc_v0 *reloc_dst = (struct external_reloc_v0 *) dst;
+
+  PUT_RELOC_VADDR (abfd, reloc_src->r_vaddr, reloc_dst->r_vaddr);
+  H_PUT_16 (abfd, reloc_src->r_symndx, reloc_dst->r_symndx);
+  H_PUT_16 (abfd, reloc_src->r_type, reloc_dst->r_type);
+  SWAP_OUT_RELOC_EXTRA (abfd, reloc_src, reloc_dst);
+
+  return bfd_coff_relsz (abfd);
+}
+#endif
+
 #endif /* NO_COFF_RELOCS */
 
 static void
@@ -264,9 +291,6 @@ coff_swap_filehdr_in (bfd * abfd, void *
   filehdr_dst->f_nsyms  = H_GET_32 (abfd, filehdr_src->f_nsyms);
   filehdr_dst->f_opthdr = H_GET_16 (abfd, filehdr_src->f_opthdr);
   filehdr_dst->f_flags  = H_GET_16 (abfd, filehdr_src->f_flags);
-#ifdef TIC80_TARGET_ID
-  filehdr_dst->f_target_id = H_GET_16 (abfd, filehdr_src->f_target_id);
-#endif
 
 #ifdef COFF_ADJUST_FILEHDR_IN_POST
   COFF_ADJUST_FILEHDR_IN_POST (abfd, src, dst);
@@ -289,9 +313,6 @@ coff_swap_filehdr_out (bfd *abfd, void *
   H_PUT_32 (abfd, filehdr_in->f_nsyms, filehdr_out->f_nsyms);
   H_PUT_16 (abfd, filehdr_in->f_opthdr, filehdr_out->f_opthdr);
   H_PUT_16 (abfd, filehdr_in->f_flags, filehdr_out->f_flags);
-#ifdef TIC80_TARGET_ID
-  H_PUT_16 (abfd, filehdr_in->f_target_id, filehdr_out->f_target_id);
-#endif
 
 #ifdef COFF_ADJUST_FILEHDR_OUT_POST
   COFF_ADJUST_FILEHDR_OUT_POST (abfd, in, out);
@@ -381,8 +402,8 @@ coff_swap_aux_in (bfd *abfd,
 		  void * ext1,
 		  int type,
 		  int in_class,
-		  int indx,
-		  int numaux,
+		  int indx ATTRIBUTE_UNUSED,
+		  int numaux ATTRIBUTE_UNUSED,
 		  void * in1)
 {
   AUXENT *ext = (AUXENT *) ext1;
@@ -397,22 +418,15 @@ coff_swap_aux_in (bfd *abfd,
     case C_FILE:
       if (ext->x_file.x_fname[0] == 0)
 	{
-	  in->x_file.x_n.x_zeroes = 0;
-	  in->x_file.x_n.x_offset = H_GET_32 (abfd, ext->x_file.x_n.x_offset);
+	  in->x_file.x_n.x_n.x_zeroes = 0;
+	  in->x_file.x_n.x_n.x_offset = H_GET_32 (abfd, ext->x_file.x_n.x_offset);
 	}
       else
 	{
 #if FILNMLEN != E_FILNMLEN
 #error we need to cope with truncating or extending FILNMLEN
 #else
-	  if (numaux > 1)
-	    {
-	      if (indx == 0)
-		memcpy (in->x_file.x_fname, ext->x_file.x_fname,
-			numaux * sizeof (AUXENT));
-	    }
-	  else
-	    memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
+	  memcpy (in->x_file.x_n.x_fname, ext->x_file.x_fname, FILNMLEN);
 #endif
 	}
       goto end;
@@ -439,7 +453,7 @@ coff_swap_aux_in (bfd *abfd,
       break;
     }
 
-  in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->x_sym.x_tagndx);
+  in->x_sym.x_tagndx.u32 = H_GET_32 (abfd, ext->x_sym.x_tagndx);
 #ifndef NO_TVNDX
   in->x_sym.x_tvndx = H_GET_16 (abfd, ext->x_sym.x_tvndx);
 #endif
@@ -448,7 +462,7 @@ coff_swap_aux_in (bfd *abfd,
       || ISTAG (in_class))
     {
       in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR (abfd, ext);
-      in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX (abfd, ext);
+      in->x_sym.x_fcnary.x_fcn.x_endndx.u32 = GET_FCN_ENDNDX (abfd, ext);
     }
   else
     {
@@ -501,17 +515,17 @@ coff_swap_aux_out (bfd * abfd,
   switch (in_class)
     {
     case C_FILE:
-      if (in->x_file.x_fname[0] == 0)
+      if (in->x_file.x_n.x_fname[0] == 0)
 	{
 	  H_PUT_32 (abfd, 0, ext->x_file.x_n.x_zeroes);
-	  H_PUT_32 (abfd, in->x_file.x_n.x_offset, ext->x_file.x_n.x_offset);
+	  H_PUT_32 (abfd, in->x_file.x_n.x_n.x_offset, ext->x_file.x_n.x_offset);
 	}
       else
 	{
 #if FILNMLEN != E_FILNMLEN
 #error we need to cope with truncating or extending FILNMLEN
 #else
-	  memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
+	  memcpy (ext->x_file.x_fname, in->x_file.x_n.x_fname, FILNMLEN);
 #endif
 	}
       goto end;
@@ -531,7 +545,7 @@ coff_swap_aux_out (bfd * abfd,
       break;
     }
 
-  H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->x_sym.x_tagndx);
+  H_PUT_32 (abfd, in->x_sym.x_tagndx.u32, ext->x_sym.x_tagndx);
 #ifndef NO_TVNDX
   H_PUT_16 (abfd, in->x_sym.x_tvndx, ext->x_sym.x_tvndx);
 #endif
@@ -540,7 +554,7 @@ coff_swap_aux_out (bfd * abfd,
       || ISTAG (in_class))
     {
       PUT_FCN_LNNOPTR (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext);
-      PUT_FCN_ENDNDX (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext);
+      PUT_FCN_ENDNDX (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.u32, ext);
     }
   else
     {
@@ -701,9 +715,16 @@ coff_swap_aouthdr_out (bfd * abfd, void
   H_PUT_32 (abfd, aouthdr_in->o_maxstack, aouthdr_out->o_maxstack);
   H_PUT_32 (abfd, aouthdr_in->o_maxdata, aouthdr_out->o_maxdata);
 #endif
-  memset (aouthdr_out->o_resv2, 0, sizeof aouthdr_out->o_resv2);
+  /* TODO: set o_*psize dynamically */
+  H_PUT_8 (abfd, 0, aouthdr_out->o_textpsize);
+  H_PUT_8 (abfd, 0, aouthdr_out->o_datapsize);
+  H_PUT_8 (abfd, 0, aouthdr_out->o_stackpsize);
+  H_PUT_8 (abfd, aouthdr_in->o_flags, aouthdr_out->o_flags);
+  H_PUT_16 (abfd, aouthdr_in->o_sntdata, aouthdr_out->o_sntdata);
+  H_PUT_16 (abfd, aouthdr_in->o_sntbss, aouthdr_out->o_sntbss);
+  H_PUT_32 (abfd, 0, aouthdr_out->o_debugger);
 #ifdef XCOFF64
-  memset (aouthdr_out->o_debugger, 0, sizeof aouthdr_out->o_debugger);
+  H_PUT_16 (abfd, aouthdr_in->o_x64flags, aouthdr_out->o_x64flags);
   memset (aouthdr_out->o_resv3, 0, sizeof aouthdr_out->o_resv3);
 #endif
 #endif
@@ -731,6 +752,7 @@ coff_swap_aouthdr_out (bfd * abfd, void
   return AOUTSZ;
 }
 
+ATTRIBUTE_UNUSED
 static void
 coff_swap_scnhdr_in (bfd * abfd, void * ext, void * in)
 {
@@ -757,6 +779,7 @@ coff_swap_scnhdr_in (bfd * abfd, void *
 #endif
 }
 
+ATTRIBUTE_UNUSED
 static unsigned int
 coff_swap_scnhdr_out (bfd * abfd, void * in, void * out)
 {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-tic30.c ./bfd/coff-tic30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-tic30.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-tic30.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for TMS320C30 coff binaries.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
    Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -31,16 +31,16 @@
 
 reloc_howto_type tic30_coff_howto_table[] =
   {
-    HOWTO (R_TIC30_ABS16, 2, 1, 16, FALSE, 0, 0, NULL,
-	   "16", FALSE, 0x0000FFFF, 0x0000FFFF, FALSE),
-    HOWTO (R_TIC30_ABS24, 2, 2, 24, FALSE, 8, complain_overflow_bitfield, NULL,
-	   "24", FALSE, 0xFFFFFF00, 0xFFFFFF00, FALSE),
-    HOWTO (R_TIC30_LDP, 18, 0, 24, FALSE, 0, complain_overflow_bitfield, NULL,
-	   "LDP", FALSE, 0x00FF0000, 0x000000FF, FALSE),
-    HOWTO (R_TIC30_ABS32, 2, 2, 32, FALSE, 0, complain_overflow_bitfield, NULL,
-	   "32", FALSE, 0xFFFFFFFF, 0xFFFFFFFF, FALSE),
-    HOWTO (R_TIC30_PC16, 2, 1, 16, TRUE, 0, complain_overflow_signed, NULL,
-	   "PCREL", FALSE, 0x0000FFFF, 0x0000FFFF, FALSE),
+    HOWTO (R_TIC30_ABS16, 2, 2, 16, false, 0, 0, NULL,
+	   "16", false, 0x0000FFFF, 0x0000FFFF, false),
+    HOWTO (R_TIC30_ABS24, 2, 4, 24, false, 8, complain_overflow_bitfield, NULL,
+	   "24", false, 0xFFFFFF00, 0xFFFFFF00, false),
+    HOWTO (R_TIC30_LDP, 18, 1, 24, false, 0, complain_overflow_bitfield, NULL,
+	   "LDP", false, 0x00FF0000, 0x000000FF, false),
+    HOWTO (R_TIC30_ABS32, 2, 4, 32, false, 0, complain_overflow_bitfield, NULL,
+	   "32", false, 0xFFFFFFFF, 0xFFFFFFFF, false),
+    HOWTO (R_TIC30_PC16, 2, 2, 16, true, 0, complain_overflow_signed, NULL,
+	   "PCREL", false, 0x0000FFFF, 0x0000FFFF, false),
     EMPTY_HOWTO (-1)
   };
 
@@ -161,11 +161,18 @@ reloc_processing (arelent *relent,
   relent->address = reloc->r_vaddr;
   rtype2howto (relent, reloc);
 
-  if (reloc->r_symndx > 0)
+  if (reloc->r_symndx == -1 || symbols == NULL)
+    relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+  else if (reloc->r_symndx >= 0 && reloc->r_symndx < obj_conv_table_size (abfd))
     relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
   else
-    relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
-
+    {
+      _bfd_error_handler
+	/* xgettext:c-format */
+	(_("%pB: warning: illegal symbol index %ld in relocs"),
+	 abfd, reloc->r_symndx);
+      relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+    }
   relent->addend = reloc->r_offset;
   relent->address -= section->vma;
 }
@@ -192,6 +199,7 @@ const bfd_target tic30_coff_vec =
   '/',				/* ar_pad_char */
   15,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-tic4x.c ./bfd/coff-tic4x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-tic4x.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-tic4x.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for TMS320C4X coff binaries.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
 
@@ -41,13 +41,13 @@ tic4x_reloc_processing (arelent *, struc
 
 /* Replace the stock _bfd_coff_is_local_label_name to recognize TI COFF local
    labels.  */
-static bfd_boolean
+static bool
 ticoff_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 				const char *name)
 {
   if (TICOFF_LOCAL_LABEL_P(name))
-    return TRUE;
-  return FALSE;
+    return true;
+  return false;
 }
 
 #define coff_bfd_is_local_label_name ticoff_bfd_is_local_label_name
@@ -92,20 +92,20 @@ tic4x_relocation (bfd *abfd ATTRIBUTE_UN
 
 reloc_howto_type tic4x_howto_table[] =
 {
-    HOWTO(R_RELWORD,	 0,  2, 16, FALSE, 0, complain_overflow_signed,   tic4x_relocation, "RELWORD",   TRUE, 0x0000ffff, 0x0000ffff, FALSE),
-    HOWTO(R_REL24,	 0,  2, 24, FALSE, 0, complain_overflow_bitfield, tic4x_relocation, "REL24",     TRUE, 0x00ffffff, 0x00ffffff, FALSE),
-    HOWTO(R_RELLONG,	 0,  2, 32, FALSE, 0, complain_overflow_dont,     tic4x_relocation, "RELLONG",   TRUE, 0xffffffff, 0xffffffff, FALSE),
-    HOWTO(R_PCRWORD,	 0,  2, 16, TRUE,  0, complain_overflow_signed,   tic4x_relocation, "PCRWORD",   TRUE, 0x0000ffff, 0x0000ffff, FALSE),
-    HOWTO(R_PCR24,	 0,  2, 24, TRUE,  0, complain_overflow_signed,   tic4x_relocation, "PCR24",     TRUE, 0x00ffffff, 0x00ffffff, FALSE),
-    HOWTO(R_PARTLS16,	 0,  2, 16, FALSE, 0, complain_overflow_dont,     tic4x_relocation, "PARTLS16",  TRUE, 0x0000ffff, 0x0000ffff, FALSE),
-    HOWTO(R_PARTMS8,	16,  2, 16, FALSE, 0, complain_overflow_dont,     tic4x_relocation, "PARTMS8",   TRUE, 0x0000ffff, 0x0000ffff, FALSE),
-    HOWTO(R_RELWORD,	 0,  2, 16, FALSE, 0, complain_overflow_signed,   tic4x_relocation, "ARELWORD",  TRUE, 0x0000ffff, 0x0000ffff, FALSE),
-    HOWTO(R_REL24,	 0,  2, 24, FALSE, 0, complain_overflow_signed,   tic4x_relocation, "AREL24",    TRUE, 0x00ffffff, 0x00ffffff, FALSE),
-    HOWTO(R_RELLONG,	 0,  2, 32, FALSE, 0, complain_overflow_signed,   tic4x_relocation, "ARELLONG",  TRUE, 0xffffffff, 0xffffffff, FALSE),
-    HOWTO(R_PCRWORD,	 0,  2, 16, TRUE,  0, complain_overflow_signed,   tic4x_relocation, "APCRWORD",  TRUE, 0x0000ffff, 0x0000ffff, FALSE),
-    HOWTO(R_PCR24,	 0,  2, 24, TRUE,  0, complain_overflow_signed,   tic4x_relocation, "APCR24",    TRUE, 0x00ffffff, 0x00ffffff, FALSE),
-    HOWTO(R_PARTLS16,	 0,  2, 16, FALSE, 0, complain_overflow_dont,     tic4x_relocation, "APARTLS16", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
-    HOWTO(R_PARTMS8,	16,  2, 16, FALSE, 0, complain_overflow_dont,     tic4x_relocation, "APARTMS8",  TRUE, 0x0000ffff, 0x0000ffff, FALSE),
+    HOWTO(R_RELWORD,	 0,  4, 16, false, 0, complain_overflow_signed,   tic4x_relocation, "RELWORD",   true, 0x0000ffff, 0x0000ffff, false),
+    HOWTO(R_REL24,	 0,  4, 24, false, 0, complain_overflow_bitfield, tic4x_relocation, "REL24",     true, 0x00ffffff, 0x00ffffff, false),
+    HOWTO(R_RELLONG,	 0,  4, 32, false, 0, complain_overflow_dont,     tic4x_relocation, "RELLONG",   true, 0xffffffff, 0xffffffff, false),
+    HOWTO(R_PCRWORD,	 0,  4, 16, true,  0, complain_overflow_signed,   tic4x_relocation, "PCRWORD",   true, 0x0000ffff, 0x0000ffff, false),
+    HOWTO(R_PCR24,	 0,  4, 24, true,  0, complain_overflow_signed,   tic4x_relocation, "PCR24",     true, 0x00ffffff, 0x00ffffff, false),
+    HOWTO(R_PARTLS16,	 0,  4, 16, false, 0, complain_overflow_dont,     tic4x_relocation, "PARTLS16",  true, 0x0000ffff, 0x0000ffff, false),
+    HOWTO(R_PARTMS8,	16,  4, 16, false, 0, complain_overflow_dont,     tic4x_relocation, "PARTMS8",   true, 0x0000ffff, 0x0000ffff, false),
+    HOWTO(R_RELWORD,	 0,  4, 16, false, 0, complain_overflow_signed,   tic4x_relocation, "ARELWORD",  true, 0x0000ffff, 0x0000ffff, false),
+    HOWTO(R_REL24,	 0,  4, 24, false, 0, complain_overflow_signed,   tic4x_relocation, "AREL24",    true, 0x00ffffff, 0x00ffffff, false),
+    HOWTO(R_RELLONG,	 0,  4, 32, false, 0, complain_overflow_signed,   tic4x_relocation, "ARELLONG",  true, 0xffffffff, 0xffffffff, false),
+    HOWTO(R_PCRWORD,	 0,  4, 16, true,  0, complain_overflow_signed,   tic4x_relocation, "APCRWORD",  true, 0x0000ffff, 0x0000ffff, false),
+    HOWTO(R_PCR24,	 0,  4, 24, true,  0, complain_overflow_signed,   tic4x_relocation, "APCR24",    true, 0x00ffffff, 0x00ffffff, false),
+    HOWTO(R_PARTLS16,	 0,  4, 16, false, 0, complain_overflow_dont,     tic4x_relocation, "APARTLS16", true, 0x0000ffff, 0x0000ffff, false),
+    HOWTO(R_PARTMS8,	16,  4, 16, false, 0, complain_overflow_dont,     tic4x_relocation, "APARTMS8",  true, 0x0000ffff, 0x0000ffff, false),
 };
 #define HOWTO_SIZE (sizeof(tic4x_howto_table) / sizeof(tic4x_howto_table[0]))
 
@@ -219,7 +219,7 @@ tic4x_reloc_processing (arelent *relent,
 
   relent->address = reloc->r_vaddr;
 
-  if (reloc->r_symndx != -1)
+  if (reloc->r_symndx != -1 && symbols != NULL)
     {
       if (reloc->r_symndx < 0 || reloc->r_symndx >= obj_conv_table_size (abfd))
 	{
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-tic54x.c ./bfd/coff-tic54x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-tic54x.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-tic54x.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for TMS320C54X coff binaries.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by Timothy Wall (twall@cygnus.com)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -109,23 +109,6 @@ bfd_ticoff_get_section_load_page (asecti
   return page;
 }
 
-/* Set the architecture appropriately.  Allow unkown architectures
-   (e.g. binary).  */
-
-static bfd_boolean
-tic54x_set_arch_mach (bfd *abfd,
-		      enum bfd_architecture arch,
-		      unsigned long machine)
-{
-  if (arch == bfd_arch_unknown)
-    arch = bfd_arch_tic54x;
-
-  else if (arch != bfd_arch_tic54x)
-    return FALSE;
-
-  return bfd_default_set_arch_mach (abfd, arch, machine);
-}
-
 static bfd_reloc_status_type
 tic54x_relocation (bfd *abfd ATTRIBUTE_UNUSED,
 		   arelent *reloc_entry,
@@ -148,65 +131,65 @@ tic54x_relocation (bfd *abfd ATTRIBUTE_U
 
 reloc_howto_type tic54x_howto_table[] =
   {
-    /* type,rightshift,size (0=byte, 1=short, 2=long),
+    /* type,rightshift,size,
        bit size, pc_relative, bitpos, dont complain_on_overflow,
        special_function, name, partial_inplace, src_mask, dst_mask, pcrel_offset.  */
 
     /* NORMAL BANK */
     /* 16-bit direct reference to symbol's address.  */
-    HOWTO (R_RELWORD,0,1,16,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"REL16",FALSE,0xFFFF,0xFFFF,FALSE),
+    HOWTO (R_RELWORD,0,2,16,false,0,complain_overflow_dont,
+	   tic54x_relocation,"REL16",false,0xFFFF,0xFFFF,false),
 
     /* 7 LSBs of an address */
-    HOWTO (R_PARTLS7,0,1,7,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"LS7",FALSE,0x007F,0x007F,FALSE),
+    HOWTO (R_PARTLS7,0,2,7,false,0,complain_overflow_dont,
+	   tic54x_relocation,"LS7",false,0x007F,0x007F,false),
 
     /* 9 MSBs of an address */
     /* TI assembler doesn't shift its encoding, and is thus incompatible */
-    HOWTO (R_PARTMS9,7,1,9,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"MS9",FALSE,0x01FF,0x01FF,FALSE),
+    HOWTO (R_PARTMS9,7,2,9,false,0,complain_overflow_dont,
+	   tic54x_relocation,"MS9",false,0x01FF,0x01FF,false),
 
     /* 23-bit relocation */
-    HOWTO (R_EXTWORD,0,2,23,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"RELEXT",FALSE,0x7FFFFF,0x7FFFFF,FALSE),
+    HOWTO (R_EXTWORD,0,4,23,false,0,complain_overflow_dont,
+	   tic54x_relocation,"RELEXT",false,0x7FFFFF,0x7FFFFF,false),
 
     /* 16 bits of 23-bit extended address */
-    HOWTO (R_EXTWORD16,0,1,16,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"RELEXT16",FALSE,0x7FFFFF,0x7FFFFF,FALSE),
+    HOWTO (R_EXTWORD16,0,2,16,false,0,complain_overflow_dont,
+	   tic54x_relocation,"RELEXT16",false,0x7FFFFF,0x7FFFFF,false),
 
     /* upper 7 bits of 23-bit extended address */
-    HOWTO (R_EXTWORDMS7,16,1,7,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"RELEXTMS7",FALSE,0x7F,0x7F,FALSE),
+    HOWTO (R_EXTWORDMS7,16,2,7,false,0,complain_overflow_dont,
+	   tic54x_relocation,"RELEXTMS7",false,0x7F,0x7F,false),
 
     /* ABSOLUTE BANK */
     /* 16-bit direct reference to symbol's address, absolute */
-    HOWTO (R_RELWORD,0,1,16,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"AREL16",FALSE,0xFFFF,0xFFFF,FALSE),
+    HOWTO (R_RELWORD,0,2,16,false,0,complain_overflow_dont,
+	   tic54x_relocation,"AREL16",false,0xFFFF,0xFFFF,false),
 
     /* 7 LSBs of an address, absolute */
-    HOWTO (R_PARTLS7,0,1,7,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"ALS7",FALSE,0x007F,0x007F,FALSE),
+    HOWTO (R_PARTLS7,0,2,7,false,0,complain_overflow_dont,
+	   tic54x_relocation,"ALS7",false,0x007F,0x007F,false),
 
     /* 9 MSBs of an address, absolute */
     /* TI assembler doesn't shift its encoding, and is thus incompatible */
-    HOWTO (R_PARTMS9,7,1,9,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"AMS9",FALSE,0x01FF,0x01FF,FALSE),
+    HOWTO (R_PARTMS9,7,2,9,false,0,complain_overflow_dont,
+	   tic54x_relocation,"AMS9",false,0x01FF,0x01FF,false),
 
     /* 23-bit direct reference, absolute */
-    HOWTO (R_EXTWORD,0,2,23,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"ARELEXT",FALSE,0x7FFFFF,0x7FFFFF,FALSE),
+    HOWTO (R_EXTWORD,0,4,23,false,0,complain_overflow_dont,
+	   tic54x_relocation,"ARELEXT",false,0x7FFFFF,0x7FFFFF,false),
 
     /* 16 bits of 23-bit extended address, absolute */
-    HOWTO (R_EXTWORD16,0,1,16,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"ARELEXT16",FALSE,0x7FFFFF,0x7FFFFF,FALSE),
+    HOWTO (R_EXTWORD16,0,2,16,false,0,complain_overflow_dont,
+	   tic54x_relocation,"ARELEXT16",false,0x7FFFFF,0x7FFFFF,false),
 
     /* upper 7 bits of 23-bit extended address, absolute */
-    HOWTO (R_EXTWORDMS7,16,1,7,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"ARELEXTMS7",FALSE,0x7F,0x7F,FALSE),
+    HOWTO (R_EXTWORDMS7,16,2,7,false,0,complain_overflow_dont,
+	   tic54x_relocation,"ARELEXTMS7",false,0x7F,0x7F,false),
 
     /* 32-bit relocation exclusively for stabs */
-    HOWTO (R_RELLONG,0,2,32,FALSE,0,complain_overflow_dont,
-	   tic54x_relocation,"STAB",FALSE,0xFFFFFFFF,0xFFFFFFFF,FALSE),
+    HOWTO (R_RELLONG,0,4,32,false,0,complain_overflow_dont,
+	   tic54x_relocation,"STAB",false,0xFFFFFFFF,0xFFFFFFFF,false),
   };
 
 #define coff_bfd_reloc_type_lookup tic54x_coff_reloc_type_lookup
@@ -278,7 +261,7 @@ tic54x_lookup_howto (bfd *abfd,
 
   _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 		      abfd, (unsigned int) dst->r_type);
-  abort ();
+  internal->howto = NULL;
 }
 
 #define RELOC_PROCESSING(RELENT,RELOC,SYMS,ABFD,SECT)\
@@ -312,13 +295,13 @@ coff_tic54x_rtype_to_howto (bfd *abfd,
 /* Replace the stock _bfd_coff_is_local_label_name to recognize TI COFF local
    labels.  */
 
-static bfd_boolean
+static bool
 ticoff_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 				const char *name)
 {
   if (TICOFF_LOCAL_LABEL_P(name))
-    return TRUE;
-  return FALSE;
+    return true;
+  return false;
 }
 
 #define coff_bfd_is_local_label_name ticoff_bfd_is_local_label_name
@@ -335,17 +318,6 @@ ticoff_bfd_is_local_label_name (bfd *abf
 
 #include "coffcode.h"
 
-static bfd_boolean
-tic54x_set_section_contents (bfd *abfd,
-			     sec_ptr section,
-			     const void * location,
-			     file_ptr offset,
-			     bfd_size_type bytes_to_do)
-{
-  return coff_set_section_contents (abfd, section, location,
-				    offset, bytes_to_do);
-}
-
 static void
 tic54x_reloc_processing (arelent *relent,
 			 struct internal_reloc *reloc,
@@ -357,7 +329,7 @@ tic54x_reloc_processing (arelent *relent
 
   relent->address = reloc->r_vaddr;
 
-  if (reloc->r_symndx != -1)
+  if (reloc->r_symndx != -1 && symbols != NULL)
     {
       if (reloc->r_symndx < 0 || reloc->r_symndx >= obj_conv_table_size (abfd))
 	{
@@ -415,6 +387,7 @@ const bfd_target tic54x_coff0_vec =
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
     bfd_getl16, bfd_getl_signed_16, bfd_putl16,	/* data */
@@ -447,7 +420,7 @@ const bfd_target tic54x_coff0_vec =
     BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
     BFD_JUMP_TABLE_SYMBOLS (coff),
     BFD_JUMP_TABLE_RELOCS (coff),
-    BFD_JUMP_TABLE_WRITE (tic54x),
+    BFD_JUMP_TABLE_WRITE (coff),
     BFD_JUMP_TABLE_LINK (coff),
     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
     NULL,
@@ -472,6 +445,11 @@ const bfd_target tic54x_coff0_beh_vec =
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+#ifdef TARGET_KEEP_UNUSED_SECTION_SYMBOLS
+    true,			/* keep unused section symbols.  */
+#else
+    false,			/* keep unused section symbols.  */
+#endif
     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
     bfd_getl16, bfd_getl_signed_16, bfd_putl16,	/* data */
@@ -504,7 +482,7 @@ const bfd_target tic54x_coff0_beh_vec =
     BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
     BFD_JUMP_TABLE_SYMBOLS (coff),
     BFD_JUMP_TABLE_RELOCS (coff),
-    BFD_JUMP_TABLE_WRITE (tic54x),
+    BFD_JUMP_TABLE_WRITE (coff),
     BFD_JUMP_TABLE_LINK (coff),
     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
@@ -530,6 +508,11 @@ const bfd_target tic54x_coff1_vec =
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+#ifdef TARGET_KEEP_UNUSED_SECTION_SYMBOLS
+    true,			/* keep unused section symbols.  */
+#else
+    false,			/* keep unused section symbols.  */
+#endif
     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
     bfd_getl16, bfd_getl_signed_16, bfd_putl16,	/* data */
@@ -562,7 +545,7 @@ const bfd_target tic54x_coff1_vec =
     BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
     BFD_JUMP_TABLE_SYMBOLS (coff),
     BFD_JUMP_TABLE_RELOCS (coff),
-    BFD_JUMP_TABLE_WRITE (tic54x),
+    BFD_JUMP_TABLE_WRITE (coff),
     BFD_JUMP_TABLE_LINK (coff),
     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
@@ -588,6 +571,11 @@ const bfd_target tic54x_coff1_beh_vec =
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+#ifdef TARGET_KEEP_UNUSED_SECTION_SYMBOLS
+    true,			/* keep unused section symbols.  */
+#else
+    false,			/* keep unused section symbols.  */
+#endif
     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
     bfd_getl16, bfd_getl_signed_16, bfd_putl16,	/* data */
@@ -620,7 +608,7 @@ const bfd_target tic54x_coff1_beh_vec =
     BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
     BFD_JUMP_TABLE_SYMBOLS (coff),
     BFD_JUMP_TABLE_RELOCS (coff),
-    BFD_JUMP_TABLE_WRITE (tic54x),
+    BFD_JUMP_TABLE_WRITE (coff),
     BFD_JUMP_TABLE_LINK (coff),
     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
@@ -646,6 +634,11 @@ const bfd_target tic54x_coff2_vec =
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+#ifdef TARGET_KEEP_UNUSED_SECTION_SYMBOLS
+    true,			/* keep unused section symbols.  */
+#else
+    false,			/* keep unused section symbols.  */
+#endif
     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
     bfd_getl16, bfd_getl_signed_16, bfd_putl16,	/* data */
@@ -678,7 +671,7 @@ const bfd_target tic54x_coff2_vec =
     BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
     BFD_JUMP_TABLE_SYMBOLS (coff),
     BFD_JUMP_TABLE_RELOCS (coff),
-    BFD_JUMP_TABLE_WRITE (tic54x),
+    BFD_JUMP_TABLE_WRITE (coff),
     BFD_JUMP_TABLE_LINK (coff),
     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
@@ -704,6 +697,11 @@ const bfd_target tic54x_coff2_beh_vec =
     '/',			/* ar_pad_char */
     15,				/* ar_max_namelen */
     0,				/* match priority.  */
+#ifdef TARGET_KEEP_UNUSED_SECTION_SYMBOLS
+    true,			/* keep unused section symbols.  */
+#else
+    false,			/* keep unused section symbols.  */
+#endif
     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
     bfd_getl16, bfd_getl_signed_16, bfd_putl16,	/* data */
@@ -736,7 +734,7 @@ const bfd_target tic54x_coff2_beh_vec =
     BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
     BFD_JUMP_TABLE_SYMBOLS (coff),
     BFD_JUMP_TABLE_RELOCS (coff),
-    BFD_JUMP_TABLE_WRITE (tic54x),
+    BFD_JUMP_TABLE_WRITE (coff),
     BFD_JUMP_TABLE_LINK (coff),
     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-tic80.c ./bfd/coff-tic80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-tic80.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-tic80.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,711 +0,0 @@
-/* BFD back-end for Texas Instruments TMS320C80 Multimedia Video Processor (MVP).
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
-
-   Written by Fred Fish (fnf@cygnus.com)
-
-   There is nothing new under the sun. This file draws a lot on other
-   coff files.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, 51 Franklin Street - Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "bfdlink.h"
-#include "libbfd.h"
-#ifdef _CONST
-/* Newlib-based hosts define _CONST as a STDC-safe alias for const,
-  but to the tic80 toolchain it means something altogether different.
-  Since sysdep.h will have pulled in stdio.h and hence _ansi.h which
-  contains this definition, we must undef it before including the
-  tic80-specific definition. */
-#undef _CONST
-#endif /* _CONST */
-#include "coff/tic80.h"
-#include "coff/internal.h"
-#include "libcoff.h"
-
-#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
-#define COFF_ALIGN_IN_SECTION_HEADER 1
-#define COFF_ALIGN_IN_SFLAGS 1
-#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X) & 0xf) << 8))
-#define COFF_DECODE_ALIGNMENT(X) (((X) >> 8) & 0xf)
-
-#define GET_SCNHDR_FLAGS H_GET_16
-#define PUT_SCNHDR_FLAGS H_PUT_16
-
-static bfd_reloc_status_type ppbase_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type glob15_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type glob16_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type local16_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-
-
-static reloc_howto_type tic80_howto_table[] =
-{
-
-  HOWTO (R_RELLONG,			/* type */
-	 0,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "RELLONG",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0xffffffff,			/* src_mask */
-	 0xffffffff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_MPPCR,			/* type */
-	 2,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "MPPCR",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0xffffffff,			/* src_mask */
-	 0xffffffff,			/* dst_mask */
-	 TRUE),				/* pcrel_offset */
-
-  HOWTO (R_ABS,				/* type */
-	 0,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "ABS",				/* name */
-	 TRUE,				/* partial_inplace */
-	 0xffffffff,			/* src_mask */
-	 0xffffffff,			/* dst_mask */
-	 FALSE),				/* pcrel_offset */
-
-  HOWTO (R_PPBASE,			/* type */
-	 0,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 ppbase_reloc,			/* special_function */
-	 "PPBASE",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0xffffffff,			/* src_mask */
-	 0xffffffff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPLBASE,			/* type */
-	 0,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 ppbase_reloc,			/* special_function */
-	 "PPLBASE",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0xffffffff,			/* src_mask */
-	 0xffffffff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PP15,			/* type */
-	 0,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 6,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 glob15_reloc,			/* special_function */
-	 "PP15",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x1ffc0,			/* src_mask */
-	 0x1ffc0,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PP15W,			/* type */
-	 2,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 6,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 glob15_reloc,			/* special_function */
-	 "PP15W",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x1ffc0,			/* src_mask */
-	 0x1ffc0,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PP15H,			/* type */
-	 1,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 6,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 glob15_reloc,			/* special_function */
-	 "PP15H",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x1ffc0,			/* src_mask */
-	 0x1ffc0,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PP16B,			/* type */
-	 0,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 16,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 6,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 glob16_reloc,			/* special_function */
-	 "PP16B",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x3ffc0,			/* src_mask */
-	 0x3ffc0,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPL15,			/* type */
-	 0,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "PPL15",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x7fff,			/* src_mask */
-	 0x7fff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPL15W,			/* type */
-	 2,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "PPL15W",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x7fff,			/* src_mask */
-	 0x7fff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPL15H,			/* type */
-	 1,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "PPL15H",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x7fff,			/* src_mask */
-	 0x7fff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPL16B,			/* type */
-	 0,				/* rightshift */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 16,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 local16_reloc,			/* special_function */
-	 "PPL16B",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0xffff,			/* src_mask */
-	 0xffff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPN15,			/* type */
-	 0,				/* rightshift */
-	 -2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 6,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 glob15_reloc,			/* special_function */
-	 "PPN15",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x1ffc0,			/* src_mask */
-	 0x1ffc0,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPN15W,			/* type */
-	 2,				/* rightshift */
-	 -2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 6,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 glob15_reloc,			/* special_function */
-	 "PPN15W",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x1ffc0,			/* src_mask */
-	 0x1ffc0,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPN15H,			/* type */
-	 1,				/* rightshift */
-	 -2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 6,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 glob15_reloc,			/* special_function */
-	 "PPN15H",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x1ffc0,			/* src_mask */
-	 0x1ffc0,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPN16B,			/* type */
-	 0,				/* rightshift */
-	 -2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 16,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 6,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 glob16_reloc,			/* special_function */
-	 "PPN16B",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x3ffc0,			/* src_mask */
-	 0x3ffc0,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPLN15,			/* type */
-	 0,				/* rightshift */
-	 -2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "PPLN15",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x7fff,			/* src_mask */
-	 0x7fff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPLN15W,			/* type */
-	 2,				/* rightshift */
-	 -2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "PPLN15W",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x7fff,			/* src_mask */
-	 0x7fff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPLN15H,			/* type */
-	 1,				/* rightshift */
-	 -2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "PPLN15H",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0x7fff,			/* src_mask */
-	 0x7fff,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  HOWTO (R_PPLN16B,			/* type */
-	 0,				/* rightshift */
-	 -2,				/* size (0 = byte, 1 = short, 2 = long) */
-	 15,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 local16_reloc,			/* special_function */
-	 "PPLN16B",			/* name */
-	 TRUE,				/* partial_inplace */
-	 0xffff,			/* src_mask */
-	 0xffff,			/* dst_mask */
-	 FALSE)				/* pcrel_offset */
-};
-
-/* Special relocation functions, used when the output file is not
-   itself a COFF TIc80 file.  */
-
-/* This special function is used for the base address type
-   relocations.  */
-
-static bfd_reloc_status_type
-ppbase_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-	      arelent *reloc_entry ATTRIBUTE_UNUSED,
-	      asymbol *symbol_in ATTRIBUTE_UNUSED,
-	      void * data ATTRIBUTE_UNUSED,
-	      asection *input_section ATTRIBUTE_UNUSED,
-	      bfd *output_bfd ATTRIBUTE_UNUSED,
-	      char **error_message ATTRIBUTE_UNUSED)
-{
-  /* FIXME.  */
-  abort ();
-}
-
-/* This special function is used for the global 15 bit relocations.  */
-
-static bfd_reloc_status_type
-glob15_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-	      arelent *reloc_entry ATTRIBUTE_UNUSED,
-	      asymbol *symbol_in ATTRIBUTE_UNUSED,
-	      void * data ATTRIBUTE_UNUSED,
-	      asection *input_section ATTRIBUTE_UNUSED,
-	      bfd *output_bfd ATTRIBUTE_UNUSED,
-	      char **error_message ATTRIBUTE_UNUSED)
-{
-  /* FIXME.  */
-  abort ();
-}
-
-/* This special function is used for the global 16 bit relocations.  */
-
-static bfd_reloc_status_type
-glob16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-	      arelent *reloc_entry ATTRIBUTE_UNUSED,
-	      asymbol *symbol_in ATTRIBUTE_UNUSED,
-	      void * data ATTRIBUTE_UNUSED,
-	      asection *input_section ATTRIBUTE_UNUSED,
-	      bfd *output_bfd ATTRIBUTE_UNUSED,
-	      char **error_message ATTRIBUTE_UNUSED)
-{
-  /* FIXME.  */
-  abort ();
-}
-
-/* This special function is used for the local 16 bit relocations.  */
-
-static bfd_reloc_status_type
-local16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-	       arelent *reloc_entry ATTRIBUTE_UNUSED,
-	       asymbol *symbol_in ATTRIBUTE_UNUSED,
-	       void * data ATTRIBUTE_UNUSED,
-	       asection *input_section ATTRIBUTE_UNUSED,
-	       bfd *output_bfd ATTRIBUTE_UNUSED,
-	       char **error_message ATTRIBUTE_UNUSED)
-{
-  /* FIXME.  */
-  abort ();
-}
-
-/* Code to turn an external r_type into a pointer to an entry in the howto_table.
-   If passed an r_type we don't recognize the abort rather than silently failing
-   to generate an output file.  */
-
-static void
-rtype2howto (arelent *cache_ptr, struct internal_reloc *dst)
-{
-  unsigned int i;
-
-  for (i = 0; i < sizeof tic80_howto_table / sizeof tic80_howto_table[0]; i++)
-    {
-      if (tic80_howto_table[i].type == dst->r_type)
-	{
-	  cache_ptr->howto = tic80_howto_table + i;
-	  return;
-	}
-    }
-
-  _bfd_error_handler (_("unsupported relocation type %#x"),
-		      (unsigned int) dst->r_type);
-  cache_ptr->howto = tic80_howto_table + 0;
-}
-
-#define RTYPE2HOWTO(cache_ptr, dst) rtype2howto (cache_ptr, dst)
-#define coff_rtype_to_howto coff_tic80_rtype_to_howto
-
-static reloc_howto_type *
-coff_tic80_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
-			   asection *sec,
-			   struct internal_reloc *rel,
-			   struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
-			   struct internal_syment *sym ATTRIBUTE_UNUSED,
-			   bfd_vma *addendp)
-{
-  arelent genrel;
-
-  if (rel -> r_symndx == -1 && addendp != NULL)
-    {
-      /* This is a TI "internal relocation", which means that the relocation
-	 amount is the amount by which the current section is being relocated
-	 in the output section.  */
-      *addendp = (sec -> output_section -> vma + sec -> output_offset) - sec -> vma;
-    }
-  RTYPE2HOWTO (&genrel, rel);
-  return genrel.howto;
-}
-
-#ifndef BADMAG
-#define BADMAG(x) TIC80BADMAG(x)
-#endif
-
-#define coff_relocate_section coff_tic80_relocate_section
-
-/* We need a special relocation routine to handle the PP relocs.  Most
-   of this is a copy of _bfd_coff_generic_relocate_section.  */
-
-static bfd_boolean
-coff_tic80_relocate_section (bfd *output_bfd,
-			     struct bfd_link_info *info,
-			     bfd *input_bfd,
-			     asection *input_section,
-			     bfd_byte *contents,
-			     struct internal_reloc *relocs,
-			     struct internal_syment *syms,
-			     asection **sections)
-{
-  struct internal_reloc *rel;
-  struct internal_reloc *relend;
-
-  rel = relocs;
-  relend = rel + input_section->reloc_count;
-  for (; rel < relend; rel++)
-    {
-      long symndx;
-      struct coff_link_hash_entry *h;
-      struct internal_syment *sym;
-      bfd_vma addend;
-      bfd_vma val;
-      reloc_howto_type *howto;
-      bfd_reloc_status_type rstat;
-      bfd_vma addr;
-
-      symndx = rel->r_symndx;
-
-      if (symndx == -1)
-	{
-	  h = NULL;
-	  sym = NULL;
-	}
-      else
-	{
-	  h = obj_coff_sym_hashes (input_bfd)[symndx];
-	  sym = syms + symndx;
-	}
-
-      /* COFF treats common symbols in one of two ways.  Either the
-	 size of the symbol is included in the section contents, or it
-	 is not.  We assume that the size is not included, and force
-	 the rtype_to_howto function to adjust the addend as needed.  */
-
-      if (sym != NULL && sym->n_scnum != 0)
-	addend = - sym->n_value;
-      else
-	addend = 0;
-
-      howto = bfd_coff_rtype_to_howto (input_bfd, input_section, rel, h,
-				       sym, &addend);
-      if (howto == NULL)
-	return FALSE;
-
-      val = 0;
-
-      if (h == NULL)
-	{
-	  asection *sec;
-
-	  if (symndx == -1)
-	    {
-	      sec = bfd_abs_section_ptr;
-	      val = 0;
-	    }
-	  else
-	    {
-	      sec = sections[symndx];
-	      val = (sec->output_section->vma
-		     + sec->output_offset
-		     + sym->n_value);
-	      if (! obj_pe (output_bfd))
-		val -= sec->vma;
-	    }
-	}
-      else
-	{
-	  if (h->root.type == bfd_link_hash_defined
-	      || h->root.type == bfd_link_hash_defweak)
-	    {
-	      asection *sec;
-
-	      sec = h->root.u.def.section;
-	      val = (h->root.u.def.value
-		     + sec->output_section->vma
-		     + sec->output_offset);
-	      }
-
-	  else if (! bfd_link_relocatable (info))
-	    (*info->callbacks->undefined_symbol)
-	      (info, h->root.root.string, input_bfd, input_section,
-	       rel->r_vaddr - input_section->vma, TRUE);
-	}
-
-      addr = rel->r_vaddr - input_section->vma;
-
-      /* FIXME: This code assumes little endian, but the PP can
-	 apparently be bi-endian.  I don't know if the bi-endianness
-	 applies to the instruction set or just to the data.  */
-      switch (howto->type)
-	{
-	default:
-	case R_ABS:
-	case R_RELLONGX:
-	case R_PPL15:
-	case R_PPL15W:
-	case R_PPL15H:
-	case R_PPLN15:
-	case R_PPLN15W:
-	case R_PPLN15H:
-	  rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
-					    contents, addr, val, addend);
-	  break;
-
-	case R_PP15:
-	case R_PP15W:
-	case R_PP15H:
-	case R_PPN15:
-	case R_PPN15W:
-	case R_PPN15H:
-	  /* Offset the address so that we can use 4 byte relocations.  */
-	  rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
-					    contents + 2, addr, val, addend);
-	  break;
-
-	case R_PP16B:
-	case R_PPN16B:
-	  {
-	    /* The most significant bit is stored in bit 6.  */
-	    bfd_byte hold;
-
-	    hold = contents[addr + 4];
-	    contents[addr + 4] &=~ 0x20;
-	    contents[addr + 4] |= (contents[addr] >> 1) & 0x20;
-	    rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
-					      contents + 2, addr,
-					      val, addend);
-	    contents[addr] &=~ 0x40;
-	    contents[addr] |= (contents[addr + 4] << 1) & 0x40;
-	    contents[addr + 4] &=~ 0x20;
-	    contents[addr + 4] |= hold & 0x20;
-	    break;
-	  }
-
-	case R_PPL16B:
-	case R_PPLN16B:
-	  {
-	    /* The most significant bit is stored in bit 28.  */
-	    bfd_byte hold;
-
-	    hold = contents[addr + 1];
-	    contents[addr + 1] &=~ 0x80;
-	    contents[addr + 1] |= (contents[addr + 3] << 3) & 0x80;
-	    rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
-					      contents, addr,
-					      val, addend);
-	    contents[addr + 3] &= ~0x10;
-	    contents[addr + 3] |= (contents[addr + 1] >> 3) & 0x10;
-	    contents[addr + 1] &=~ 0x80;
-	    contents[addr + 1] |= hold & 0x80;
-	    break;
-	  }
-
-	case R_PPBASE:
-	  /* Parameter RAM is from 0x1000000 to 0x1000800.  */
-	  contents[addr] &=~ 0x3;
-	  if (val >= 0x1000000 && val < 0x1000800)
-	    contents[addr] |= 0x3;
-	  else
-	    contents[addr] |= 0x2;
-	  rstat = bfd_reloc_ok;
-	  break;
-
-	case R_PPLBASE:
-	  /* Parameter RAM is from 0x1000000 to 0x1000800.  */
-	  contents[addr + 2] &= ~0xc0;
-	  if (val >= 0x1000000 && val < 0x1000800)
-	    contents[addr + 2] |= 0xc0;
-	  else
-	    contents[addr + 2] |= 0x80;
-	  rstat = bfd_reloc_ok;
-	  break;
-	}
-
-      switch (rstat)
-	{
-	default:
-	  abort ();
-	case bfd_reloc_ok:
-	  break;
-	case bfd_reloc_outofrange:
-	  _bfd_error_handler
-	    /* xgettext: c-format */
-	    (_("%pB: bad reloc address %#" PRIx64 " in section `%pA'"),
-	     input_bfd, (uint64_t) rel->r_vaddr, input_section);
-	  return FALSE;
-	case bfd_reloc_overflow:
-	  {
-	    const char *name;
-	    char buf[SYMNMLEN + 1];
-
-	    if (symndx == -1)
-	      name = "*ABS*";
-	    else if (h != NULL)
-	      name = NULL;
-	    else
-	      {
-		name = _bfd_coff_internal_syment_name (input_bfd, sym, buf);
-		if (name == NULL)
-		  return FALSE;
-	      }
-
-	    (*info->callbacks->reloc_overflow)
-	      (info, (h ? &h->root : NULL), name, howto->name,
-	       (bfd_vma) 0, input_bfd, input_section,
-	       rel->r_vaddr - input_section->vma);
-	  }
-	}
-    }
-  return TRUE;
-}
-
-#define TIC80COFF 1		/* Customize coffcode.h */
-#undef C_AUTOARG		/* Clashes with TIc80's C_UEXT */
-#undef C_LASTENT		/* Clashes with TIc80's C_STATLAB */
-
-#ifndef bfd_pe_print_pdata
-#define bfd_pe_print_pdata	NULL
-#endif
-
-#include "coffcode.h"
-
-CREATE_LITTLE_COFF_TARGET_VEC (tic80_coff_vec, "coff-tic80", D_PAGED, 0, '_', NULL, COFF_SWAP_TABLE)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-x86_64.c ./bfd/coff-x86_64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-x86_64.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-x86_64.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for AMD 64 COFF files.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -20,23 +20,13 @@
 
    Written by Kai Tietz, OneVision Software GmbH&CoKg.  */
 
-#ifndef COFF_WITH_pex64
-#define COFF_WITH_pex64
-#endif
-
-/* Note we have to make sure not to include headers twice.
-   Not all headers are wrapped in #ifdef guards, so we define
-   PEI_HEADERS to prevent double including here.  */
-#ifndef PEI_HEADERS
 #include "sysdep.h"
 #include "bfd.h"
 #include "libbfd.h"
 #include "coff/x86_64.h"
 #include "coff/internal.h"
-#include "coff/pe.h"
 #include "libcoff.h"
 #include "libiberty.h"
-#endif
 
 #define BADMAG(x) AMD64BADMAG(x)
 
@@ -75,14 +65,14 @@ coff_amd64_reloc (bfd *abfd,
 {
   symvalue diff;
 
-#if !defined(COFF_WITH_PE)
+#if !defined (COFF_WITH_PE)
   if (output_bfd == NULL)
     return bfd_reloc_continue;
 #endif
 
   if (bfd_is_com_section (symbol->section))
     {
-#if !defined(COFF_WITH_PE)
+#if !defined (COFF_WITH_PE)
       /* We are relocating a common symbol.  The current value in the
 	 object file is ORIG + OFFSET, where ORIG is the value of the
 	 common symbol as seen by the object file when it was compiled
@@ -106,21 +96,10 @@ coff_amd64_reloc (bfd *abfd,
 	 ignores the addend for a COFF target when producing
 	 relocatable output.  This seems to be always wrong for 386
 	 COFF, so we handle the addend here instead.  */
-#if defined(COFF_WITH_PE)
+#if defined (COFF_WITH_PE)
       if (output_bfd == NULL)
 	{
-	  reloc_howto_type *howto = reloc_entry->howto;
-
-	  /* Although PC relative relocations are very similar between
-	     PE and non-PE formats, but they are off by 1 << howto->size
-	     bytes. For the external relocation, PE is very different
-	     from others. See md_apply_fix3 () in gas/config/tc-amd64.c.
-	     When we link PE and non-PE object files together to
-	     generate a non-PE executable, we have to compensate it
-	     here.  */
-	  if(howto->pc_relative && howto->pcrel_offset)
-	    diff = -(1 << howto->size);
-	  else if(symbol->flags & BSF_WEAK)
+	  if (symbol->flags & BSF_WEAK)
 	    diff = reloc_entry->addend - symbol->value;
 	  else
 	    diff = -reloc_entry->addend;
@@ -130,12 +109,54 @@ coff_amd64_reloc (bfd *abfd,
 	diff = reloc_entry->addend;
     }
 
-#if defined(COFF_WITH_PE)
-  /* FIXME: How should this case be handled?  */
+#if defined (COFF_WITH_PE)
+  if (output_bfd == NULL)
+    {
+      /* PC relative relocations are off by their size.  */
+      if (reloc_entry->howto->pc_relative)
+	diff -= bfd_get_reloc_size (reloc_entry->howto);
+
+      if (reloc_entry->howto->type >= R_AMD64_PCRLONG_1
+	  && reloc_entry->howto->type <= R_AMD64_PCRLONG_5)
+	diff -= reloc_entry->howto->type - R_AMD64_PCRLONG;
+    }
+
   if (reloc_entry->howto->type == R_AMD64_IMAGEBASE
-      && output_bfd != NULL
-      && bfd_get_flavour (output_bfd) == bfd_target_coff_flavour)
-    diff -= pe_data (output_bfd)->pe_opthdr.ImageBase;
+      && output_bfd == NULL)
+    {
+      bfd *obfd = input_section->output_section->owner;
+      struct bfd_link_info *link_info;
+      struct bfd_link_hash_entry *h;
+      switch (bfd_get_flavour (obfd))
+	{
+	case bfd_target_coff_flavour:
+	  diff -= pe_data (obfd)->pe_opthdr.ImageBase;
+	  break;
+	case bfd_target_elf_flavour:
+	  /* Subtract __ImageBase.  */
+	  h = NULL;
+	  link_info = _bfd_get_link_info (obfd);
+	  if (link_info != NULL)
+	    h = bfd_link_hash_lookup (link_info->hash, "__ImageBase",
+				      false, false, true);
+	  if (h == NULL
+	      || (h->type != bfd_link_hash_defined
+		  && h->type != bfd_link_hash_defweak))
+	    {
+	      *error_message
+		= (char *) _("R_AMD64_IMAGEBASE with __ImageBase undefined");
+	      return bfd_reloc_dangerous;
+	    }
+	  /* ELF symbols in relocatable files are section relative,
+	     but in nonrelocatable files they are virtual addresses.  */
+	  diff -= (h->u.def.value
+		   + h->u.def.section->output_offset
+		   + h->u.def.section->output_section->vma);
+	  break;
+	default:
+	  break;
+	}
+    }
 #endif
 
 #define DOIT(x) \
@@ -151,9 +172,9 @@ coff_amd64_reloc (bfd *abfd,
       if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
 	return bfd_reloc_outofrange;
 
-      switch (howto->size)
+      switch (bfd_get_reloc_size (howto))
 	{
-	case 0:
+	case 1:
 	  {
 	    char x = bfd_get_8 (abfd, addr);
 	    DOIT (x);
@@ -161,7 +182,7 @@ coff_amd64_reloc (bfd *abfd,
 	  }
 	  break;
 
-	case 1:
+	case 2:
 	  {
 	    short x = bfd_get_16 (abfd, addr);
 	    DOIT (x);
@@ -169,7 +190,7 @@ coff_amd64_reloc (bfd *abfd,
 	  }
 	  break;
 
-	case 2:
+	case 4:
 	  {
 	    long x = bfd_get_32 (abfd, addr);
 	    DOIT (x);
@@ -177,9 +198,9 @@ coff_amd64_reloc (bfd *abfd,
 	  }
 	  break;
 
-	case 4:
+	case 8:
 	  {
-	    bfd_uint64_t x = bfd_get_64 (abfd, addr);
+	    uint64_t x = bfd_get_64 (abfd, addr);
 	    DOIT (x);
 	    bfd_put_64 (abfd, x, addr);
 	  }
@@ -199,16 +220,18 @@ coff_amd64_reloc (bfd *abfd,
 /* Return TRUE if this relocation should appear in the output .reloc
    section.  */
 
-static bfd_boolean
+static bool
 in_reloc_p (bfd *abfd ATTRIBUTE_UNUSED, reloc_howto_type *howto)
 {
-  return ! howto->pc_relative && howto->type != R_AMD64_IMAGEBASE
-	 && howto->type != R_AMD64_SECREL;
+  return ! howto->pc_relative
+    && howto->type != R_AMD64_IMAGEBASE
+    && howto->type != R_AMD64_SECREL
+    && howto->type != R_AMD64_SECTION;
 }
 #endif /* COFF_WITH_PE */
 
 #ifndef PCRELOFFSET
-#define PCRELOFFSET TRUE
+#define PCRELOFFSET true
 #endif
 
 static reloc_howto_type howto_table[] =
@@ -216,141 +239,155 @@ static reloc_howto_type howto_table[] =
   EMPTY_HOWTO (0),
   HOWTO (R_AMD64_DIR64,		/* type  1*/
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long, 4 = long long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "R_X86_64_64",		/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_ADDR64", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffffffffffffll,	/* src_mask */
 	 0xffffffffffffffffll,	/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_AMD64_DIR32,		/* type 2 */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "R_X86_64_32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_ADDR32", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   /* PE IMAGE_REL_AMD64_ADDR32NB relocation (3).	*/
   HOWTO (R_AMD64_IMAGEBASE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "rva32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_ADDR32NB", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* 32-bit longword PC relative relocation (4).  */
   HOWTO (R_AMD64_PCRLONG,	/* type 4 */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "R_X86_64_PC32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_REL32", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
 
  HOWTO (R_AMD64_PCRLONG_1,	/* type 5 */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "DISP32+1",		/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_REL32_1", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
  HOWTO (R_AMD64_PCRLONG_2,	/* type 6 */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "DISP32+2",		/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_REL32_2", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
  HOWTO (R_AMD64_PCRLONG_3,	/* type 7 */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "DISP32+3",		/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_REL32_3", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
  HOWTO (R_AMD64_PCRLONG_4,	/* type 8 */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "DISP32+4",		/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_REL32_4", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
  HOWTO (R_AMD64_PCRLONG_5,	/* type 9 */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "DISP32+5",		/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_REL32_5", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
-  EMPTY_HOWTO (10), /* R_AMD64_SECTION 10  */
 #if defined(COFF_WITH_PE)
+  /* 16-bit word section relocation (10).  */
+  HOWTO (R_AMD64_SECTION,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 coff_amd64_reloc,	/* special_function */
+	 "IMAGE_REL_AMD64_SECTION", /* name */
+	 true,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 true),
   /* 32-bit longword section relative relocation (11).  */
   HOWTO (R_AMD64_SECREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
-	 "secrel32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 "IMAGE_REL_AMD64_SECREL", /* name */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 #else
+  EMPTY_HOWTO (10),
   EMPTY_HOWTO (11),
 #endif
   EMPTY_HOWTO (12),
@@ -358,14 +395,14 @@ static reloc_howto_type howto_table[] =
 #ifndef DONT_EXTEND_AMD64
   HOWTO (R_AMD64_PCRQUAD,
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
 	 "R_X86_64_PC64",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffffffffffffll,	/* src_mask */
 	 0xffffffffffffffffll,	/* dst_mask */
 	 PCRELOFFSET),		 /* pcrel_offset */
@@ -375,84 +412,84 @@ static reloc_howto_type howto_table[] =
   /* Byte relocation (15).  */
   HOWTO (R_RELBYTE,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
 	 "R_X86_64_8",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* 16-bit word relocation (16).  */
   HOWTO (R_RELWORD,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
 	 "R_X86_64_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* 32-bit longword relocation (17).	*/
   HOWTO (R_RELLONG,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
 	 "R_X86_64_32S",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* Byte PC relative relocation (18).	 */
   HOWTO (R_PCRBYTE,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
 	 "R_X86_64_PC8",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* 16-bit word PC relative relocation (19).	*/
   HOWTO (R_PCRWORD,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
 	 "R_X86_64_PC16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
 	 PCRELOFFSET),		/* pcrel_offset */
   /* 32-bit longword PC relative relocation (20).  */
   HOWTO (R_PCRLONG,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 coff_amd64_reloc,	/* special_function */
 	 "R_X86_64_PC32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 PCRELOFFSET)		/* pcrel_offset */
@@ -505,7 +542,8 @@ static reloc_howto_type howto_table[] =
       cache_ptr->addend = - coffsym->native->u.syment.n_value;	\
     else if (ptr && bfd_asymbol_bfd (ptr) == abfd		\
 	     && ptr->section != NULL)				\
-      cache_ptr->addend = - (ptr->section->vma + ptr->value);	\
+      cache_ptr->addend = - (ptr->section->vma			\
+			     + COFF_PE_ADDEND_BIAS (ptr));	\
     else							\
       cache_ptr->addend = 0;					\
     if (ptr && reloc.r_type < NUM_HOWTOS			\
@@ -523,11 +561,11 @@ static reloc_howto_type howto_table[] =
 
 #else /* COFF_WITH_PE */
 
-/* The PE relocate section routine.  The only difference between this
-   and the regular routine is that we don't want to do anything for a
-   relocatable link.  */
+/* The PE relocate section routine.  We handle secidx relocations here,
+   as well as making sure that we don't do anything for a relocatable
+   link.  */
 
-static bfd_boolean
+static bool
 coff_pe_amd64_relocate_section (bfd *output_bfd,
 				struct bfd_link_info *info,
 				bfd *input_bfd,
@@ -537,14 +575,97 @@ coff_pe_amd64_relocate_section (bfd *out
 				struct internal_syment *syms,
 				asection **sections)
 {
+  struct internal_reloc *rel;
+  struct internal_reloc *relend;
+
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
+
+  rel = relocs;
+  relend = rel + input_section->reloc_count;
+
+  for (; rel < relend; rel++)
+    {
+      long symndx;
+      struct coff_link_hash_entry *h;
+      asection *sec, *s;
+      uint16_t idx = 0, i = 1;
+
+      if (rel->r_type != R_SECTION)
+	continue;
+
+      /* Make sure that _bfd_coff_generic_relocate_section won't parse
+         this reloc after us.  */
+      rel->r_type = 0;
+
+      symndx = rel->r_symndx;
+
+      if (symndx < 0
+	  || (unsigned long) symndx >= obj_raw_syment_count (input_bfd))
+	continue;
+
+      h = obj_coff_sym_hashes (input_bfd)[symndx];
+
+      if (h == NULL)
+	sec = sections[symndx];
+      else
+	{
+	  if (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
+	    {
+	      /* Defined weak symbols are a GNU extension.  */
+	      sec = h->root.u.def.section;
+	    }
+	  else
+	    {
+	      sec = NULL;
+	    }
+	}
+
+      if (!sec)
+	continue;
+
+      if (bfd_is_abs_section (sec))
+	continue;
+
+      if (discarded_section (sec))
+	continue;
+
+      s = output_bfd->sections;
+      while (s)
+	{
+	  if (s == sec->output_section)
+	    {
+	      idx = i;
+	      break;
+	    }
+
+	  i++;
+	  s = s->next;
+	}
+
+      bfd_putl16 (idx, contents + rel->r_vaddr - input_section->vma);
+    }
 
   return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,input_section, contents,relocs, syms, sections);
 }
 
 #define coff_relocate_section coff_pe_amd64_relocate_section
 
+static hashval_t
+htab_hash_section_index (const void * entry)
+{
+  const struct bfd_section * sec = entry;
+  return sec->index;
+}
+
+static int
+htab_eq_section_index (const void * e1, const void * e2)
+{
+  const struct bfd_section * sec1 = e1;
+  const struct bfd_section * sec2 = e2;
+  return sec1->index == sec2->index;
+}
 #endif /* COFF_WITH_PE */
 
 /* Convert an rtype to howto for the COFF backend linker.  */
@@ -634,22 +755,43 @@ coff_amd64_rtype_to_howto (bfd *abfd ATT
 
   if (rel->r_type == R_AMD64_SECREL)
     {
-      bfd_vma osect_vma;
+      bfd_vma osect_vma = 0;
 
-      if (h && (h->root.type == bfd_link_hash_defined
-		|| h->root.type == bfd_link_hash_defweak))
+      if (h != NULL
+	  && (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak))
 	osect_vma = h->root.u.def.section->output_section->vma;
       else
 	{
+	  htab_t table = coff_data (abfd)->section_by_index;
 	  asection *s;
-	  int i;
 
-	  /* Sigh, the only way to get the section to offset against
-	     is to find it the hard way.  */
-	  for (s = abfd->sections, i = 1; i < sym->n_scnum; i++)
-	    s = s->next;
-
-	  osect_vma = s->output_section->vma;
+	  if (!table)
+	    {
+	      table = htab_create (10, htab_hash_section_index,
+				   htab_eq_section_index, NULL);
+	      if (table == NULL)
+		return NULL;
+	      coff_data (abfd)->section_by_index = table;
+	    }
+
+	  if (htab_elements (table) == 0)
+	    {
+	      for (s = abfd->sections; s != NULL; s = s->next)
+		{
+		  void ** slot = htab_find_slot (table, s, INSERT);
+
+		  if (slot != NULL)
+		    *slot = s;
+		}
+	    }
+
+	  struct bfd_section needle;
+
+	  needle.index = sym->n_scnum - 1;
+	  s = htab_find (table, &needle);
+	  if (s != NULL)
+	    osect_vma = s->output_section->vma;
 	}
 
       *addendp -= osect_vma;
@@ -694,6 +836,8 @@ coff_amd64_reloc_type_lookup (bfd *abfd
 #if defined(COFF_WITH_PE)
     case BFD_RELOC_32_SECREL:
       return howto_table + R_AMD64_SECREL;
+    case BFD_RELOC_16_SECIDX:
+      return howto_table + R_AMD64_SECTION;
 #endif
     default:
       BFD_FAIL ();
@@ -723,11 +867,11 @@ coff_amd64_reloc_name_lookup (bfd *abfd
    a leading dot for local labels, so if TARGET_UNDERSCORE is defined
    we treat all symbols starting with L as local.  */
 
-static bfd_boolean
+static bool
 coff_amd64_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == 'L')
-    return TRUE;
+    return true;
 
   return _bfd_coff_is_local_label_name (abfd, name);
 }
@@ -782,6 +926,7 @@ const bfd_target
   '/',				/* Ar_pad_char.  */
   15,				/* Ar_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
@@ -824,3 +969,77 @@ const bfd_target
 
   COFF_SWAP_TABLE
 };
+
+/* Entry for big object files.  */
+
+#ifdef COFF_WITH_PE_BIGOBJ
+const bfd_target
+  TARGET_SYM_BIG =
+{
+  TARGET_NAME_BIG,
+  bfd_target_coff_flavour,
+  BFD_ENDIAN_LITTLE,		/* Data byte order is little.  */
+  BFD_ENDIAN_LITTLE,		/* Header byte order is little.  */
+
+  (HAS_RELOC | EXEC_P		/* Object flags.  */
+   | HAS_LINENO | HAS_DEBUG
+   | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
+
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags.  */
+#if defined(COFF_WITH_PE)
+   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
+#endif
+   | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
+
+#ifdef TARGET_UNDERSCORE
+  TARGET_UNDERSCORE,		/* Leading underscore.  */
+#else
+  0,				/* Leading underscore.  */
+#endif
+  '/',				/* Ar_pad_char.  */
+  15,				/* Ar_max_namelen.  */
+  0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
+
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data.  */
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs.  */
+
+  /* Note that we allow an object file to be treated as a core file as well.  */
+  {				/* bfd_check_format.  */
+    _bfd_dummy_target,
+    amd64coff_object_p,
+    bfd_generic_archive_p,
+    amd64coff_object_p
+  },
+  {				/* bfd_set_format.  */
+    _bfd_bool_bfd_false_error,
+    coff_mkobject,
+    _bfd_generic_mkarchive,
+    _bfd_bool_bfd_false_error
+  },
+  {				/* bfd_write_contents.  */
+    _bfd_bool_bfd_false_error,
+    coff_write_object_contents,
+    _bfd_write_archive_contents,
+    _bfd_bool_bfd_false_error
+  },
+
+  BFD_JUMP_TABLE_GENERIC (coff),
+  BFD_JUMP_TABLE_COPY (coff),
+  BFD_JUMP_TABLE_CORE (_bfd_nocore),
+  BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
+  BFD_JUMP_TABLE_SYMBOLS (coff),
+  BFD_JUMP_TABLE_RELOCS (coff),
+  BFD_JUMP_TABLE_WRITE (coff),
+  BFD_JUMP_TABLE_LINK (coff),
+  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+  NULL,
+
+  &bigobj_swap_table
+};
+#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-z80.c ./bfd/coff-z80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-z80.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-z80.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Zilog Z80 COFF binaries.
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
    Contributed by Arnold Metselaar <arnold_m@operamail.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -26,39 +26,219 @@
 #include "coff/z80.h"
 #include "coff/internal.h"
 #include "libcoff.h"
+#include "libiberty.h"
 
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 0
 
-static reloc_howto_type r_imm32 =
-HOWTO (R_IMM32, 0, 2, 32, FALSE, 0,
-       complain_overflow_dont, 0, "r_imm32", TRUE, 0xffffffff, 0xffffffff,
-       FALSE);
-
-static reloc_howto_type r_imm24 =
-HOWTO (R_IMM24, 0, 1, 24, FALSE, 0,
-       complain_overflow_dont, 0, "r_imm24", TRUE, 0x00ffffff, 0x00ffffff,
-       FALSE);
-
-static reloc_howto_type r_imm16 =
-HOWTO (R_IMM16, 0, 1, 16, FALSE, 0,
-       complain_overflow_dont, 0, "r_imm16", TRUE, 0x0000ffff, 0x0000ffff,
-       FALSE);
-
-static reloc_howto_type r_imm8 =
-HOWTO (R_IMM8, 0, 0, 8, FALSE, 0,
-       complain_overflow_bitfield, 0, "r_imm8", TRUE, 0x000000ff, 0x000000ff,
-       FALSE);
-
-static reloc_howto_type r_jr =
-HOWTO (R_JR, 0, 0, 8, TRUE, 0,
-       complain_overflow_signed, 0, "r_jr", FALSE, 0, 0xFF,
-       FALSE);
-
-static reloc_howto_type r_off8 =
-HOWTO (R_OFF8, 0, 0, 8, FALSE, 0,
-       complain_overflow_signed, 0,"r_off8", FALSE, 0, 0xff,
-       FALSE);
+typedef const struct {
+  bfd_reloc_code_real_type r_type;
+  reloc_howto_type howto;
+} bfd_howto_type;
 
+#define BFD_EMPTY_HOWTO(rt,x) {rt, EMPTY_HOWTO(x)}
+#define BFD_HOWTO(rt,a,b,c,d,e,f,g,h,i,j,k,l,m) {rt, HOWTO(a,b,c,d,e,f,g,h,i,j,k,l,m)}
+
+static bfd_howto_type howto_table[] =
+{
+  BFD_EMPTY_HOWTO (BFD_RELOC_NONE, 0),
+
+  BFD_HOWTO (BFD_RELOC_32,
+     R_IMM32,		/* type */
+     0,			/* rightshift */
+     4,			/* size */
+     32,		/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_bitfield, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_imm32",		/* name */
+     false,		/* partial_inplace */
+     0xffffffff,	/* src_mask */
+     0xffffffff,	/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_24,
+     R_IMM24,		/* type */
+     0,			/* rightshift */
+     3,			/* size */
+     24,		/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_bitfield, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_imm24",		/* name */
+     false,		/* partial_inplace */
+     0x00ffffff,	/* src_mask */
+     0x00ffffff,	/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_16,
+     R_IMM16,		/* type */
+     0,			/* rightshift */
+     2,			/* size */
+     16,		/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_bitfield, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_imm16",		/* name */
+     false,		/* partial_inplace */
+     0x0000ffff,	/* src_mask */
+     0x0000ffff,	/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_8,
+     R_IMM8,		/* type */
+     0,			/* rightshift */
+     1,			/* size */
+     8,			/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_bitfield, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_imm8",		/* name */
+     false,		/* partial_inplace */
+     0x000000ff,	/* src_mask */
+     0x000000ff,	/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_8_PCREL,
+     R_JR,		/* type */
+     0,			/* rightshift */
+     1,			/* size */
+     8,			/* bitsize */
+     true,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_signed, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_jr",		/* name */
+     false,		/* partial_inplace */
+     0,			/* src_mask */
+     0xFF,		/* dst_mask */
+     true),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_Z80_DISP8,
+     R_OFF8,		/* type */
+     0,			/* rightshift */
+     1,			/* size */
+     8,			/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_signed, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_off8",		/* name */
+     false,		/* partial_inplace */
+     0,			/* src_mask */
+     0xff,		/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_Z80_BYTE0,
+     R_BYTE0,		/* type */
+     0,			/* rightshift */
+     1,			/* size */
+     8,			/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_dont, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_byte0",		/* name */
+     false,		/* partial_inplace */
+     0,			/* src_mask */
+     0xff,		/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_Z80_BYTE1,
+     R_BYTE1,		/* type */
+     8,			/* rightshift */
+     1,			/* size */
+     8,			/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_dont, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_byte1",		/* name */
+     false,		/* partial_inplace */
+     0,			/* src_mask */
+     0xff,		/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_Z80_BYTE2,
+     R_BYTE2,		/* type */
+     16,		/* rightshift */
+     1,			/* size */
+     8,			/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_dont, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_byte2",		/* name */
+     false,		/* partial_inplace */
+     0,			/* src_mask */
+     0xff,		/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_Z80_BYTE3,
+     R_BYTE3,		/* type */
+     24,		/* rightshift */
+     1,			/* size */
+     8,			/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_dont, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_byte3",		/* name */
+     false,		/* partial_inplace */
+     0,			/* src_mask */
+     0xff,		/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_Z80_WORD0,
+     R_WORD0,		/* type */
+     0,			/* rightshift */
+     2,			/* size */
+     16,		/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_dont, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_word0",		/* name */
+     false,		/* partial_inplace */
+     0,			/* src_mask */
+     0xffff,		/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_Z80_WORD1,
+     R_WORD1,		/* type */
+     16,		/* rightshift */
+     2,			/* size */
+     16,		/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_dont, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_word1",		/* name */
+     false,		/* partial_inplace */
+     0,			/* src_mask */
+     0xffff,		/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_Z80_16_BE,
+     R_IMM16BE,		/* type */
+     0,			/* rightshift */
+     2,			/* size */
+     16,		/* bitsize */
+     false,		/* pc_relative */
+     0,			/* bitpos */
+     complain_overflow_bitfield, /* complain_on_overflow */
+     0,			/* special_function */
+     "r_imm16be",	/* name */
+     false,		/* partial_inplace */
+     0x0000ffff,	/* src_mask */
+     0x0000ffff,	/* dst_mask */
+     false),		/* pcrel_offset */
+};
+
+#define NUM_HOWTOS ARRAY_SIZE (howto_table)
 
 #define BADMAG(x) Z80BADMAG(x)
 #define Z80 1			/* Customize coffcode.h.  */
@@ -74,34 +254,19 @@ HOWTO (R_OFF8, 0, 0, 8, FALSE, 0,
   dst->r_stuff[1] = 'C';
 
 /* Code to turn a r_type into a howto ptr, uses the above howto table.  */
-
 static void
 rtype2howto (arelent *internal, struct internal_reloc *dst)
 {
-  switch (dst->r_type)
+  unsigned i;
+  for (i = 0; i < NUM_HOWTOS; i++)
     {
-    default:
-      internal->howto = NULL;
-      break;
-    case R_IMM8:
-      internal->howto = &r_imm8;
-      break;
-    case R_IMM16:
-      internal->howto = &r_imm16;
-      break;
-    case R_IMM24:
-      internal->howto = &r_imm24;
-      break;
-    case R_IMM32:
-      internal->howto = &r_imm32;
-      break;
-    case R_JR:
-      internal->howto = &r_jr;
-      break;
-    case R_OFF8:
-      internal->howto = &r_off8;
-      break;
+      if (howto_table[i].howto.type == dst->r_type)
+        {
+          internal->howto = &howto_table[i].howto;
+          return;
+        }
     }
+  internal->howto = NULL;
 }
 
 #define RTYPE2HOWTO(internal, relocentry) rtype2howto (internal, relocentry)
@@ -110,35 +275,23 @@ static reloc_howto_type *
 coff_z80_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 			    bfd_reloc_code_real_type code)
 {
-  switch (code)
-    {
-    case BFD_RELOC_8:		return & r_imm8;
-    case BFD_RELOC_16:		return & r_imm16;
-    case BFD_RELOC_24:		return & r_imm24;
-    case BFD_RELOC_32:		return & r_imm32;
-    case BFD_RELOC_8_PCREL:	return & r_jr;
-    case BFD_RELOC_Z80_DISP8:	return & r_off8;
-    default:			BFD_FAIL ();
-      return NULL;
-    }
+  unsigned i;
+  for (i = 0; i < NUM_HOWTOS; i++)
+    if (howto_table[i].r_type == code)
+      return &howto_table[i].howto;
+
+  BFD_FAIL ();
+  return NULL;
 }
 
 static reloc_howto_type *
 coff_z80_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 			    const char *r_name)
 {
-  if (strcasecmp (r_imm8.name, r_name) == 0)
-    return &r_imm8;
-  if (strcasecmp (r_imm16.name, r_name) == 0)
-    return &r_imm16;
-  if (strcasecmp (r_imm24.name, r_name) == 0)
-    return &r_imm24;
-  if (strcasecmp (r_imm32.name, r_name) == 0)
-    return &r_imm32;
-  if (strcasecmp (r_jr.name, r_name) == 0)
-    return &r_jr;
-  if (strcasecmp (r_off8.name, r_name) == 0)
-    return &r_off8;
+  unsigned i;
+  for (i = 0; i < NUM_HOWTOS; i++)
+    if (strcasecmp(howto_table[i].howto.name, r_name) == 0)
+      return &howto_table[i].howto;
 
   return NULL;
 }
@@ -161,105 +314,183 @@ reloc_processing (arelent *relent,
   relent->address = reloc->r_vaddr;
   rtype2howto (relent, reloc);
 
-  if (reloc->r_symndx > 0)
+  if (reloc->r_symndx == -1 || symbols == NULL)
+    relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+  else if (reloc->r_symndx >= 0 && reloc->r_symndx < obj_conv_table_size (abfd))
     relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
   else
-    relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
-
+    {
+      _bfd_error_handler
+	/* xgettext:c-format */
+	(_("%pB: warning: illegal symbol index %ld in relocs"),
+	 abfd, reloc->r_symndx);
+      relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+    }
   relent->addend = reloc->r_offset;
   relent->address -= section->vma;
 }
 
-static void
+static bool
 extra_case (bfd *in_abfd,
 	    struct bfd_link_info *link_info,
 	    struct bfd_link_order *link_order,
 	    arelent *reloc,
 	    bfd_byte *data,
-	    unsigned int *src_ptr,
-	    unsigned int *dst_ptr)
+	    size_t *src_ptr,
+	    size_t *dst_ptr)
 {
   asection * input_section = link_order->u.indirect.section;
-  int val;
+  bfd_size_type end = bfd_get_section_limit_octets (in_abfd, input_section);
+  bfd_size_type reloc_size = bfd_get_reloc_size (reloc->howto);
 
+  if (*src_ptr > end
+      || reloc_size > end - *src_ptr)
+    {
+      link_info->callbacks->einfo
+	/* xgettext:c-format */
+	(_("%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"),
+	 in_abfd, input_section, reloc);
+      return false;
+    }
+
+  int val = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
   switch (reloc->howto->type)
     {
     case R_OFF8:
-	val = bfd_coff_reloc16_get_value (reloc, link_info,
-					   input_section);
-	if (val>127 || val<-128) /* Test for overflow.  */
-	  (*link_info->callbacks->reloc_overflow)
+      if (reloc->howto->partial_inplace)
+	val += (signed char) (bfd_get_8 (in_abfd, data + *src_ptr)
+			      & reloc->howto->src_mask);
+      if (val > 127 || val < -128)
+	{
+	  link_info->callbacks->reloc_overflow
 	    (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
 	     reloc->howto->name, reloc->addend, input_section->owner,
 	     input_section, reloc->address);
+	  return false;
+	}
+
+      bfd_put_8 (in_abfd, val, data + *dst_ptr);
+      *dst_ptr += 1;
+      *src_ptr += 1;
+      break;
+
+    case R_BYTE3:
+      bfd_put_8 (in_abfd, val >> 24, data + *dst_ptr);
+      *dst_ptr += 1;
+      *src_ptr += 1;
+      break;
+
+    case R_BYTE2:
+      bfd_put_8 (in_abfd, val >> 16, data + *dst_ptr);
+      *dst_ptr += 1;
+      *src_ptr += 1;
+      break;
 
-	bfd_put_8 (in_abfd, val, data + *dst_ptr);
-	(*dst_ptr) += 1;
-	(*src_ptr) += 1;
+    case R_BYTE1:
+      bfd_put_8 (in_abfd, val >> 8, data + *dst_ptr);
+      *dst_ptr += 1;
+      *src_ptr += 1;
       break;
 
     case R_IMM8:
-      val = bfd_get_8 ( in_abfd, data+*src_ptr)
-	+ bfd_coff_reloc16_get_value (reloc, link_info, input_section);
+      if (reloc->howto->partial_inplace)
+	val += bfd_get_8 (in_abfd, data + *src_ptr) & reloc->howto->src_mask;
+      /* Fall through.  */
+    case R_BYTE0:
       bfd_put_8 (in_abfd, val, data + *dst_ptr);
-      (*dst_ptr) += 1;
-      (*src_ptr) += 1;
+      *dst_ptr += 1;
+      *src_ptr += 1;
+      break;
+
+    case R_WORD1:
+      bfd_put_16 (in_abfd, val >> 16, data + *dst_ptr);
+      *dst_ptr += 2;
+      *src_ptr += 2;
       break;
 
     case R_IMM16:
-      val = bfd_get_16 ( in_abfd, data+*src_ptr)
-	+ bfd_coff_reloc16_get_value (reloc, link_info, input_section);
+      if (reloc->howto->partial_inplace)
+	val += bfd_get_16 (in_abfd, data + *src_ptr) & reloc->howto->src_mask;
+      /* Fall through.  */
+    case R_WORD0:
       bfd_put_16 (in_abfd, val, data + *dst_ptr);
-      (*dst_ptr) += 2;
-      (*src_ptr) += 2;
+      *dst_ptr += 2;
+      *src_ptr += 2;
       break;
 
     case R_IMM24:
-      val = bfd_get_16 ( in_abfd, data+*src_ptr)
-	+ (bfd_get_8 ( in_abfd, data+*src_ptr+2) << 16)
-	+ bfd_coff_reloc16_get_value (reloc, link_info, input_section);
-      bfd_put_16 (in_abfd, val, data + *dst_ptr);
-      bfd_put_8 (in_abfd, val >> 16, data + *dst_ptr+2);
-      (*dst_ptr) += 3;
-      (*src_ptr) += 3;
+      if (reloc->howto->partial_inplace)
+	val += (bfd_get_24 (in_abfd, data + *src_ptr)
+		& reloc->howto->src_mask);
+      bfd_put_24 (in_abfd, val, data + *dst_ptr);
+      *dst_ptr += 3;
+      *src_ptr += 3;
       break;
 
     case R_IMM32:
-      val = bfd_get_32 ( in_abfd, data+*src_ptr)
-	+ bfd_coff_reloc16_get_value (reloc, link_info, input_section);
+      if (reloc->howto->partial_inplace)
+	val += bfd_get_32 (in_abfd, data + *src_ptr) & reloc->howto->src_mask;
       bfd_put_32 (in_abfd, val, data + *dst_ptr);
-      (*dst_ptr) += 4;
-      (*src_ptr) += 4;
+      *dst_ptr += 4;
+      *src_ptr += 4;
       break;
 
     case R_JR:
       {
-	bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info,
-						  input_section);
+	if (reloc->howto->partial_inplace)
+	  val += (signed char) (bfd_get_8 (in_abfd, data + *src_ptr)
+				& reloc->howto->src_mask);
 	bfd_vma dot = (*dst_ptr
 		       + input_section->output_offset
 		       + input_section->output_section->vma);
-	int gap = dst - dot - 1;  /* -1, Since the offset is relative
-				     to the value of PC after reading
-				     the offset.  */
-
+	bfd_signed_vma gap = val - dot;
 	if (gap >= 128 || gap < -128)
-	  (*link_info->callbacks->reloc_overflow)
-	    (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
-	     reloc->howto->name, reloc->addend, input_section->owner,
-	     input_section, reloc->address);
+	  {
+	    link_info->callbacks->reloc_overflow
+	      (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
+	       reloc->howto->name, reloc->addend, input_section->owner,
+	       input_section, reloc->address);
+	    return false;
+	  }
 
 	bfd_put_8 (in_abfd, gap, data + *dst_ptr);
-	(*dst_ptr)++;
-	(*src_ptr)++;
+	*dst_ptr += 1;
+	*src_ptr += 1;
 	break;
       }
 
+    case R_IMM16BE:
+      if (reloc->howto->partial_inplace)
+	val += ((bfd_get_8 (in_abfd, data + *src_ptr + 0) * 0x100
+		 + bfd_get_8 (in_abfd, data + *src_ptr + 1))
+		& reloc->howto->src_mask);
+      
+      bfd_put_8 (in_abfd, val >> 8, data + *dst_ptr + 0);
+      bfd_put_8 (in_abfd, val, data + *dst_ptr + 1);
+      *dst_ptr += 2;
+      *src_ptr += 2;
+      break;
+
     default:
-      abort ();
+      link_info->callbacks->einfo
+	/* xgettext:c-format */
+	(_("%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"),
+	 in_abfd, input_section, reloc);
+      return false;
     }
+  return true;
+}
+
+static bool
+z80_is_local_label_name (bfd *        abfd ATTRIBUTE_UNUSED,
+                         const char * name)
+{
+  return (name[0] == '.' && name[1] == 'L') ||
+         _bfd_coff_is_local_label_name (abfd, name);
 }
 
+#define coff_bfd_is_local_label_name z80_is_local_label_name
+
 #define coff_reloc16_extra_cases    extra_case
 #define coff_bfd_reloc_type_lookup  coff_z80_reloc_type_lookup
 #define coff_bfd_reloc_name_lookup coff_z80_reloc_name_lookup
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-z8k.c ./bfd/coff-z8k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/coff-z8k.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/coff-z8k.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Zilog Z800n COFF binaries.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
    Contributed by Cygnus Support.
    Written by Steve Chamberlain, <sac@cygnus.com>.
 
@@ -31,40 +31,40 @@
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (1)
 
 static reloc_howto_type r_imm32 =
-HOWTO (R_IMM32, 0, 2, 32, FALSE, 0,
-       complain_overflow_bitfield, 0, "r_imm32", TRUE, 0xffffffff,
-       0xffffffff, FALSE);
+HOWTO (R_IMM32, 0, 4, 32, false, 0,
+       complain_overflow_bitfield, 0, "r_imm32", true, 0xffffffff,
+       0xffffffff, false);
 
 static reloc_howto_type r_imm4l =
-HOWTO (R_IMM4L, 0, 0, 4, FALSE, 0,
-       complain_overflow_bitfield, 0, "r_imm4l", TRUE, 0xf, 0xf, FALSE);
+HOWTO (R_IMM4L, 0, 1, 4, false, 0,
+       complain_overflow_bitfield, 0, "r_imm4l", true, 0xf, 0xf, false);
 
 static reloc_howto_type r_da =
-HOWTO (R_IMM16, 0, 1, 16, FALSE, 0,
-       complain_overflow_bitfield, 0, "r_da", TRUE, 0x0000ffff, 0x0000ffff,
-       FALSE);
+HOWTO (R_IMM16, 0, 2, 16, false, 0,
+       complain_overflow_bitfield, 0, "r_da", true, 0x0000ffff, 0x0000ffff,
+       false);
 
 static reloc_howto_type r_imm8 =
-HOWTO (R_IMM8, 0, 0, 8, FALSE, 0,
-       complain_overflow_bitfield, 0, "r_imm8", TRUE, 0x000000ff, 0x000000ff,
-       FALSE);
+HOWTO (R_IMM8, 0, 1, 8, false, 0,
+       complain_overflow_bitfield, 0, "r_imm8", true, 0x000000ff, 0x000000ff,
+       false);
 
 static reloc_howto_type r_rel16 =
-HOWTO (R_REL16, 0, 1, 16, FALSE, 0,
-       complain_overflow_bitfield, 0, "r_rel16", TRUE, 0x0000ffff, 0x0000ffff,
-       TRUE);
+HOWTO (R_REL16, 0, 2, 16, false, 0,
+       complain_overflow_bitfield, 0, "r_rel16", true, 0x0000ffff, 0x0000ffff,
+       true);
 
 static reloc_howto_type r_jr =
-HOWTO (R_JR, 1, 0, 8, TRUE, 0, complain_overflow_signed, 0,
-       "r_jr", TRUE, 0xff, 0xff, TRUE);
+HOWTO (R_JR, 1, 1, 8, true, 0, complain_overflow_signed, 0,
+       "r_jr", true, 0xff, 0xff, true);
 
 static reloc_howto_type r_disp7 =
-HOWTO (R_DISP7, 0, 0, 7, TRUE, 0, complain_overflow_bitfield, 0,
-       "r_disp7", TRUE, 0x7f, 0x7f, TRUE);
+HOWTO (R_DISP7, 0, 1, 7, true, 0, complain_overflow_bitfield, 0,
+       "r_disp7", true, 0x7f, 0x7f, true);
 
 static reloc_howto_type r_callr =
-HOWTO (R_CALLR, 1, 1, 12, TRUE, 0, complain_overflow_signed, 0,
-       "r_callr", TRUE, 0xfff, 0xfff, TRUE);
+HOWTO (R_CALLR, 1, 2, 12, true, 0, complain_overflow_signed, 0,
+       "r_callr", true, 0xfff, 0xfff, true);
 
 #define BADMAG(x) Z8KBADMAG(x)
 #define Z8K 1			/* Customize coffcode.h.  */
@@ -177,25 +177,44 @@ reloc_processing (arelent *relent,
   relent->address = reloc->r_vaddr;
   rtype2howto (relent, reloc);
 
-  if (reloc->r_symndx > 0)
+  if (reloc->r_symndx == -1 || symbols == NULL)
+    relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+  else if (reloc->r_symndx >= 0 && reloc->r_symndx < obj_conv_table_size (abfd))
     relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
   else
-    relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
-
+    {
+      _bfd_error_handler
+	/* xgettext:c-format */
+	(_("%pB: warning: illegal symbol index %ld in relocs"),
+	 abfd, reloc->r_symndx);
+      relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+    }
   relent->addend = reloc->r_offset;
   relent->address -= section->vma;
 }
 
-static void
+static bool
 extra_case (bfd *in_abfd,
 	    struct bfd_link_info *link_info,
 	    struct bfd_link_order *link_order,
 	    arelent *reloc,
 	    bfd_byte *data,
-	    unsigned int *src_ptr,
-	    unsigned int *dst_ptr)
+	    size_t *src_ptr,
+	    size_t *dst_ptr)
 {
   asection * input_section = link_order->u.indirect.section;
+  bfd_size_type end = bfd_get_section_limit_octets (in_abfd, input_section);
+  bfd_size_type reloc_size = bfd_get_reloc_size (reloc->howto);
+
+  if (*src_ptr > end
+      || reloc_size > end - *src_ptr)
+    {
+      link_info->callbacks->einfo
+	/* xgettext:c-format */
+	(_("%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"),
+	 in_abfd, input_section, reloc);
+      return false;
+    }
 
   switch (reloc->howto->type)
     {
@@ -203,8 +222,8 @@ extra_case (bfd *in_abfd,
       bfd_put_8 (in_abfd,
 		 bfd_coff_reloc16_get_value (reloc, link_info, input_section),
 		 data + *dst_ptr);
-      (*dst_ptr) += 1;
-      (*src_ptr) += 1;
+      *dst_ptr += 1;
+      *src_ptr += 1;
       break;
 
     case R_IMM32:
@@ -227,27 +246,26 @@ extra_case (bfd *in_abfd,
 	  dst = (dst & 0xffff) | ((dst & 0xff0000) << 8) | 0x80000000;
 	  bfd_put_32 (in_abfd, dst, data + *dst_ptr);
 	}
-      (*dst_ptr) += 4;
-      (*src_ptr) += 4;
+      *dst_ptr += 4;
+      *src_ptr += 4;
       break;
 
     case R_IMM4L:
       bfd_put_8 (in_abfd,
 		 ((bfd_get_8 (in_abfd, data + *dst_ptr) & 0xf0)
-		  | (0x0f
-		     & bfd_coff_reloc16_get_value (reloc, link_info,
-						   input_section))),
+		  | (0x0f & bfd_coff_reloc16_get_value (reloc, link_info,
+							input_section))),
 		 data + *dst_ptr);
-      (*dst_ptr) += 1;
-      (*src_ptr) += 1;
+      *dst_ptr += 1;
+      *src_ptr += 1;
       break;
 
     case R_IMM16:
       bfd_put_16 (in_abfd,
 		  bfd_coff_reloc16_get_value (reloc, link_info, input_section),
 		  data + *dst_ptr);
-      (*dst_ptr) += 2;
-      (*src_ptr) += 2;
+      *dst_ptr += 2;
+      *src_ptr += 2;
       break;
 
     case R_JR:
@@ -257,21 +275,22 @@ extra_case (bfd *in_abfd,
 	bfd_vma dot = (*dst_ptr
 		       + input_section->output_offset
 		       + input_section->output_section->vma);
-	int gap = dst - dot - 1;  /* -1, since we're in the odd byte of the
-				     word and the pc's been incremented.  */
-
-	if (gap & 1)
-	  abort ();
-	gap /= 2;
-	if (gap > 127 || gap < -128)
-	  (*link_info->callbacks->reloc_overflow)
-	    (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
-	     reloc->howto->name, reloc->addend, input_section->owner,
-	     input_section, reloc->address);
-
-	bfd_put_8 (in_abfd, gap, data + *dst_ptr);
-	(*dst_ptr)++;
-	(*src_ptr)++;
+	/* -1, since we're in the odd byte of the word and the pc has
+	   been incremented.  */
+	bfd_signed_vma gap = dst - dot - 1;
+
+	if ((gap & 1) != 0 || gap > 254 || gap < -256)
+	  {
+	    link_info->callbacks->reloc_overflow
+	      (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
+	       reloc->howto->name, reloc->addend, input_section->owner,
+	       input_section, reloc->address);
+	    return false;
+	  }
+
+	bfd_put_8 (in_abfd, gap / 2, data + *dst_ptr);
+	*dst_ptr += 1;
+	*src_ptr += 1;
 	break;
       }
 
@@ -282,24 +301,23 @@ extra_case (bfd *in_abfd,
 	bfd_vma dot = (*dst_ptr
 		       + input_section->output_offset
 		       + input_section->output_section->vma);
-	int gap = dst - dot - 1;  /* -1, since we're in the odd byte of the
-				     word and the pc's been incremented.  */
+	bfd_signed_vma gap = dst - dot - 1;
 
-	if (gap & 1)
-	  abort ();
-	gap /= 2;
-
-	if (gap > 0 || gap < -127)
-	  (*link_info->callbacks->reloc_overflow)
-	    (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
-	     reloc->howto->name, reloc->addend, input_section->owner,
-	     input_section, reloc->address);
+	if ((gap & 1) != 0 || gap > 0 || gap < -254)
+	  {
+	    link_info->callbacks->reloc_overflow
+	      (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
+	       reloc->howto->name, reloc->addend, input_section->owner,
+	       input_section, reloc->address);
+	    return false;
+	  }
 
 	bfd_put_8 (in_abfd,
-		   (bfd_get_8 ( in_abfd, data + *dst_ptr) & 0x80) + (-gap & 0x7f),
+		   ((bfd_get_8 (in_abfd, data + *dst_ptr) & 0x80)
+		    + (-gap / 2 & 0x7f)),
 		   data + *dst_ptr);
-	(*dst_ptr)++;
-	(*src_ptr)++;
+	*dst_ptr += 1;
+	*src_ptr += 1;
 	break;
       }
 
@@ -310,22 +328,23 @@ extra_case (bfd *in_abfd,
 	bfd_vma dot = (*dst_ptr
 		       + input_section->output_offset
 		       + input_section->output_section->vma);
-	int gap = dst - dot - 2;
+	bfd_signed_vma gap = dst - dot - 2;
 
-	if (gap & 1)
-	  abort ();
-	if (gap > 4096 || gap < -4095)
-	  (*link_info->callbacks->reloc_overflow)
-	    (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
-	     reloc->howto->name, reloc->addend, input_section->owner,
-	     input_section, reloc->address);
+	if ((gap & 1) != 0 || gap > 4096 || gap < -4095)
+	  {
+	    link_info->callbacks->reloc_overflow
+	      (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
+	       reloc->howto->name, reloc->addend, input_section->owner,
+	       input_section, reloc->address);
+	    return false;
+	  }
 
-	gap /= 2;
 	bfd_put_16 (in_abfd,
-		    (bfd_get_16 ( in_abfd, data + *dst_ptr) & 0xf000) | (-gap & 0x0fff),
+		    ((bfd_get_16 (in_abfd, data + *dst_ptr) & 0xf000)
+		     | (-gap / 2 & 0x0fff)),
 		    data + *dst_ptr);
-	(*dst_ptr) += 2;
-	(*src_ptr) += 2;
+	*dst_ptr += 2;
+	*src_ptr += 2;
 	break;
       }
 
@@ -336,23 +355,31 @@ extra_case (bfd *in_abfd,
 	bfd_vma dot = (*dst_ptr
 		       + input_section->output_offset
 		       + input_section->output_section->vma);
-	int gap = dst - dot - 2;
+	bfd_signed_vma gap = dst - dot - 2;
 
 	if (gap > 32767 || gap < -32768)
-	  (*link_info->callbacks->reloc_overflow)
-	    (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
-	     reloc->howto->name, reloc->addend, input_section->owner,
-	     input_section, reloc->address);
-
-	bfd_put_16 (in_abfd, (bfd_vma) gap, data + *dst_ptr);
-	(*dst_ptr) += 2;
-	(*src_ptr) += 2;
+	  {
+	    link_info->callbacks->reloc_overflow
+	      (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
+	       reloc->howto->name, reloc->addend, input_section->owner,
+	       input_section, reloc->address);
+	    return false;
+	  }
+
+	bfd_put_16 (in_abfd, gap, data + *dst_ptr);
+	*dst_ptr += 2;
+	*src_ptr += 2;
 	break;
       }
 
     default:
-      abort ();
+      link_info->callbacks->einfo
+	/* xgettext:c-format */
+	(_("%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"),
+	 in_abfd, input_section, reloc);
+      return false;
     }
+  return true;
 }
 
 #define coff_reloc16_extra_cases    extra_case
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/compress.c ./bfd/compress.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/compress.c	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/compress.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Compressed section support (intended for debug sections).
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -20,18 +20,503 @@
 
 #include "sysdep.h"
 #include <zlib.h>
+#ifdef HAVE_ZSTD
+#include <zstd.h>
+#endif
 #include "bfd.h"
+#include "elf-bfd.h"
 #include "libbfd.h"
 #include "safe-ctype.h"
+#include "libiberty.h"
 
 #define MAX_COMPRESSION_HEADER_SIZE 24
 
-static bfd_boolean
-decompress_contents (bfd_byte *compressed_buffer,
+/*
+EXTERNAL
+.{* Types of compressed DWARF debug sections.  *}
+.enum compressed_debug_section_type
+.{
+.  COMPRESS_DEBUG_NONE = 0,
+.  COMPRESS_DEBUG_GNU_ZLIB = 1 << 1,
+.  COMPRESS_DEBUG_GABI_ZLIB = 1 << 2,
+.  COMPRESS_DEBUG_ZSTD = 1 << 3,
+.  COMPRESS_UNKNOWN = 1 << 4
+.};
+.
+.{* Tuple for compressed_debug_section_type and their name.  *}
+.struct compressed_type_tuple
+.{
+.  enum compressed_debug_section_type type;
+.  const char *name;
+.};
+.
+.{* Compression header ch_type values.  *}
+.enum compression_type
+.{
+.  ch_none = 0,
+.  ch_compress_zlib = 1	,	{* Compressed with zlib.  *}
+.  ch_compress_zstd = 2		{* Compressed with zstd (www.zstandard.org).  *}
+.};
+.
+.static inline char *
+.bfd_debug_name_to_zdebug (bfd *abfd, const char *name)
+.{
+.  size_t len = strlen (name);
+.  char *new_name = (char *) bfd_alloc (abfd, len + 2);
+.  if (new_name == NULL)
+.    return NULL;
+.  new_name[0] = '.';
+.  new_name[1] = 'z';
+.  memcpy (new_name + 2, name + 1, len);
+.  return new_name;
+.}
+.
+.static inline char *
+.bfd_zdebug_name_to_debug (bfd *abfd, const char *name)
+.{
+.  size_t len = strlen (name);
+.  char *new_name = (char *) bfd_alloc (abfd, len);
+.  if (new_name == NULL)
+.    return NULL;
+.  new_name[0] = '.';
+.  memcpy (new_name + 1, name + 2, len - 1);
+.  return new_name;
+.}
+.
+*/
+
+/* Display texts for type of compressed DWARF debug sections.  */
+static const struct compressed_type_tuple compressed_debug_section_names[] =
+{
+  { COMPRESS_DEBUG_NONE, "none" },
+  { COMPRESS_DEBUG_GABI_ZLIB, "zlib" },
+  { COMPRESS_DEBUG_GNU_ZLIB, "zlib-gnu" },
+  { COMPRESS_DEBUG_GABI_ZLIB, "zlib-gabi" },
+  { COMPRESS_DEBUG_ZSTD, "zstd" },
+};
+
+/*
+FUNCTION
+	bfd_get_compression_algorithm
+SYNOPSIS
+	enum compressed_debug_section_type
+	  bfd_get_compression_algorithm (const char *name);
+DESCRIPTION
+	Return compressed_debug_section_type from a string representation.
+*/
+enum compressed_debug_section_type
+bfd_get_compression_algorithm (const char *name)
+{
+  for (unsigned i = 0; i < ARRAY_SIZE (compressed_debug_section_names); ++i)
+    if (strcasecmp (compressed_debug_section_names[i].name, name) == 0)
+      return compressed_debug_section_names[i].type;
+
+  return COMPRESS_UNKNOWN;
+}
+
+/*
+FUNCTION
+	bfd_get_compression_algorithm_name
+SYNOPSIS
+	const char *bfd_get_compression_algorithm_name
+	  (enum compressed_debug_section_type type);
+DESCRIPTION
+	Return compression algorithm name based on the type.
+*/
+const char *
+bfd_get_compression_algorithm_name (enum compressed_debug_section_type type)
+{
+  for (unsigned i = 0; i < ARRAY_SIZE (compressed_debug_section_names); ++i)
+    if (type == compressed_debug_section_names[i].type)
+      return compressed_debug_section_names[i].name;
+
+  return NULL;
+}
+
+/*
+FUNCTION
+	bfd_update_compression_header
+
+SYNOPSIS
+	void bfd_update_compression_header
+	  (bfd *abfd, bfd_byte *contents, asection *sec);
+
+DESCRIPTION
+	Set the compression header at CONTENTS of SEC in ABFD and update
+	elf_section_flags for compression.
+*/
+
+void
+bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
+			       asection *sec)
+{
+  if ((abfd->flags & BFD_COMPRESS) == 0)
+    abort ();
+
+  switch (bfd_get_flavour (abfd))
+    {
+    case bfd_target_elf_flavour:
+      if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
+	{
+	  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+	  struct bfd_elf_section_data * esd = elf_section_data (sec);
+	  enum compression_type ch_type = (abfd->flags & BFD_COMPRESS_ZSTD
+					   ? ch_compress_zstd
+					   : ch_compress_zlib);
+
+	  /* Set the SHF_COMPRESSED bit.  */
+	  elf_section_flags (sec) |= SHF_COMPRESSED;
+
+	  if (bed->s->elfclass == ELFCLASS32)
+	    {
+	      Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
+	      bfd_put_32 (abfd, ch_type, &echdr->ch_type);
+	      bfd_put_32 (abfd, sec->size, &echdr->ch_size);
+	      bfd_put_32 (abfd, 1u << sec->alignment_power,
+			  &echdr->ch_addralign);
+	      /* bfd_log2 (alignof (Elf32_Chdr)) */
+	      bfd_set_section_alignment (sec, 2);
+	      esd->this_hdr.sh_addralign = 4;
+	    }
+	  else
+	    {
+	      Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
+	      bfd_put_32 (abfd, ch_type, &echdr->ch_type);
+	      bfd_put_32 (abfd, 0, &echdr->ch_reserved);
+	      bfd_put_64 (abfd, sec->size, &echdr->ch_size);
+	      bfd_put_64 (abfd, UINT64_C (1) << sec->alignment_power,
+			  &echdr->ch_addralign);
+	      /* bfd_log2 (alignof (Elf64_Chdr)) */
+	      bfd_set_section_alignment (sec, 3);
+	      esd->this_hdr.sh_addralign = 8;
+	    }
+	  break;
+	}
+
+      /* Clear the SHF_COMPRESSED bit.  */
+      elf_section_flags (sec) &= ~SHF_COMPRESSED;
+      /* Fall through.  */
+
+    default:
+      /* Write the zlib header.  It should be "ZLIB" followed by
+	 the uncompressed section size, 8 bytes in big-endian
+	 order.  */
+      memcpy (contents, "ZLIB", 4);
+      bfd_putb64 (sec->size, contents + 4);
+      /* No way to keep the original alignment, just use 1 always. */
+      bfd_set_section_alignment (sec, 0);
+      break;
+    }
+}
+
+/* Check the compression header at CONTENTS of SEC in ABFD and store the
+   ch_type in CH_TYPE, uncompressed size in UNCOMPRESSED_SIZE, and the
+   uncompressed data alignment in UNCOMPRESSED_ALIGNMENT_POWER if the
+   compression header is valid.  */
+
+static bool
+bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
+			      asection *sec,
+			      enum compression_type *ch_type,
+			      bfd_size_type *uncompressed_size,
+			      unsigned int *uncompressed_alignment_power)
+{
+  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+      && (elf_section_flags (sec) & SHF_COMPRESSED) != 0)
+    {
+      Elf_Internal_Chdr chdr;
+      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+      if (bed->s->elfclass == ELFCLASS32)
+	{
+	  Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
+	  chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
+	  chdr.ch_size = bfd_get_32 (abfd, &echdr->ch_size);
+	  chdr.ch_addralign = bfd_get_32 (abfd, &echdr->ch_addralign);
+	}
+      else
+	{
+	  Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
+	  chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
+	  chdr.ch_size = bfd_get_64 (abfd, &echdr->ch_size);
+	  chdr.ch_addralign = bfd_get_64 (abfd, &echdr->ch_addralign);
+	}
+      *ch_type = chdr.ch_type;
+      if ((chdr.ch_type == ch_compress_zlib
+	   || chdr.ch_type == ch_compress_zstd)
+	  && chdr.ch_addralign == (chdr.ch_addralign & -chdr.ch_addralign))
+	{
+	  *uncompressed_size = chdr.ch_size;
+	  *uncompressed_alignment_power = bfd_log2 (chdr.ch_addralign);
+	  return true;
+	}
+    }
+
+  return false;
+}
+
+/*
+FUNCTION
+	bfd_get_compression_header_size
+
+SYNOPSIS
+	int bfd_get_compression_header_size (bfd *abfd, asection *sec);
+
+DESCRIPTION
+	Return the size of the compression header of SEC in ABFD.
+*/
+
+int
+bfd_get_compression_header_size (bfd *abfd, asection *sec)
+{
+  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+    {
+      if (sec == NULL)
+	{
+	  if (!(abfd->flags & BFD_COMPRESS_GABI))
+	    return 0;
+	}
+      else if (!(elf_section_flags (sec) & SHF_COMPRESSED))
+	return 0;
+
+      if (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS32)
+	return sizeof (Elf32_External_Chdr);
+      else
+	return sizeof (Elf64_External_Chdr);
+    }
+
+  return 0;
+}
+
+/*
+FUNCTION
+	bfd_convert_section_setup
+
+SYNOPSIS
+	bool bfd_convert_section_setup
+	  (bfd *ibfd, asection *isec, bfd *obfd,
+	   const char **new_name, bfd_size_type *new_size);
+
+DESCRIPTION
+	Do early setup for objcopy, when copying @var{isec} in input
+	BFD @var{ibfd} to output BFD @var{obfd}.  Returns the name and
+	size of the output section.
+*/
+
+bool
+bfd_convert_section_setup (bfd *ibfd, asection *isec, bfd *obfd,
+			   const char **new_name, bfd_size_type *new_size)
+{
+  bfd_size_type hdr_size;
+
+  if ((isec->flags & SEC_DEBUGGING) != 0
+      && (isec->flags & SEC_HAS_CONTENTS) != 0)
+    {
+      const char *name = *new_name;
+
+      if ((obfd->flags & (BFD_DECOMPRESS | BFD_COMPRESS_GABI)) != 0)
+	{
+	  /* When we decompress or compress with SHF_COMPRESSED,
+	     convert section name from .zdebug_* to .debug_*.  */
+	  if (startswith (name, ".zdebug_"))
+	    {
+	      name = bfd_zdebug_name_to_debug (obfd, name);
+	      if (name == NULL)
+		return false;
+	    }
+	}
+
+      /* PR binutils/18087: Compression does not always make a
+	 section smaller.  So only rename the section when
+	 compression has actually taken place.  If input section
+	 name is .zdebug_*, we should never compress it again.  */
+      else if (isec->compress_status == COMPRESS_SECTION_DONE
+	       && startswith (name, ".debug_"))
+	{
+	  name = bfd_debug_name_to_zdebug (obfd, name);
+	  if (name == NULL)
+	    return false;
+	}
+      *new_name = name;
+    }
+  *new_size = bfd_section_size (isec);
+
+  /* Do nothing if either input or output aren't ELF.  */
+  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
+      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
+    return true;
+
+  /* Do nothing if ELF classes of input and output are the same. */
+  if (get_elf_backend_data (ibfd)->s->elfclass
+      == get_elf_backend_data (obfd)->s->elfclass)
+    return true;
+
+  /* Convert GNU property size.  */
+  if (startswith (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
+    {
+      *new_size = _bfd_elf_convert_gnu_property_size (ibfd, obfd);
+      return true;
+    }
+
+  /* Do nothing if input file will be decompressed.  */
+  if ((ibfd->flags & BFD_DECOMPRESS))
+    return true;
+
+  /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
+  hdr_size = bfd_get_compression_header_size (ibfd, isec);
+  if (hdr_size == 0)
+    return true;
+
+  /* Adjust the size of the output SHF_COMPRESSED section.  */
+  if (hdr_size == sizeof (Elf32_External_Chdr))
+    *new_size += sizeof (Elf64_External_Chdr) - sizeof (Elf32_External_Chdr);
+  else
+    *new_size -= sizeof (Elf64_External_Chdr) - sizeof (Elf32_External_Chdr);
+  return true;
+}
+
+/*
+FUNCTION
+	bfd_convert_section_contents
+
+SYNOPSIS
+	bool bfd_convert_section_contents
+	  (bfd *ibfd, asection *isec, bfd *obfd,
+	   bfd_byte **ptr, bfd_size_type *ptr_size);
+
+DESCRIPTION
+	Convert the contents, stored in @var{*ptr}, of the section
+	@var{isec} in input BFD @var{ibfd} to output BFD @var{obfd}
+	if needed.  The original buffer pointed to by @var{*ptr} may
+	be freed and @var{*ptr} is returned with memory malloc'd by this
+	function, and the new size written to @var{ptr_size}.
+*/
+
+bool
+bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
+			      bfd_byte **ptr, bfd_size_type *ptr_size)
+{
+  bfd_byte *contents;
+  bfd_size_type ihdr_size, ohdr_size, size;
+  Elf_Internal_Chdr chdr;
+  bool use_memmove;
+
+  /* Do nothing if either input or output aren't ELF.  */
+  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
+      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
+    return true;
+
+  /* Do nothing if ELF classes of input and output are the same.  */
+  if (get_elf_backend_data (ibfd)->s->elfclass
+      == get_elf_backend_data (obfd)->s->elfclass)
+    return true;
+
+  /* Convert GNU properties.  */
+  if (startswith (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
+    return _bfd_elf_convert_gnu_properties (ibfd, isec, obfd, ptr,
+					    ptr_size);
+
+  /* Do nothing if input file will be decompressed.  */
+  if ((ibfd->flags & BFD_DECOMPRESS))
+    return true;
+
+  /* Do nothing if the input section isn't a SHF_COMPRESSED section.  */
+  ihdr_size = bfd_get_compression_header_size (ibfd, isec);
+  if (ihdr_size == 0)
+    return true;
+
+  /* PR 25221.  Check for corrupt input sections.  */
+  if (ihdr_size > bfd_get_section_limit (ibfd, isec))
+    /* FIXME: Issue a warning about a corrupt
+       compression header size field ?  */
+    return false;
+
+  contents = *ptr;
+
+  /* Convert the contents of the input SHF_COMPRESSED section to
+     output.  Get the input compression header and the size of the
+     output compression header.  */
+  if (ihdr_size == sizeof (Elf32_External_Chdr))
+    {
+      Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
+      chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
+      chdr.ch_size = bfd_get_32 (ibfd, &echdr->ch_size);
+      chdr.ch_addralign = bfd_get_32 (ibfd, &echdr->ch_addralign);
+
+      ohdr_size = sizeof (Elf64_External_Chdr);
+
+      use_memmove = false;
+    }
+  else if (ihdr_size != sizeof (Elf64_External_Chdr))
+    {
+      /* FIXME: Issue a warning about a corrupt
+	 compression header size field ?  */
+      return false;
+    }
+  else
+    {
+      Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
+      chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
+      chdr.ch_size = bfd_get_64 (ibfd, &echdr->ch_size);
+      chdr.ch_addralign = bfd_get_64 (ibfd, &echdr->ch_addralign);
+
+      ohdr_size = sizeof (Elf32_External_Chdr);
+      use_memmove = true;
+    }
+
+  size = bfd_section_size (isec) - ihdr_size + ohdr_size;
+  if (!use_memmove)
+    {
+      contents = (bfd_byte *) bfd_malloc (size);
+      if (contents == NULL)
+	return false;
+    }
+
+  /* Write out the output compression header.  */
+  if (ohdr_size == sizeof (Elf32_External_Chdr))
+    {
+      Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
+      bfd_put_32 (obfd, chdr.ch_type, &echdr->ch_type);
+      bfd_put_32 (obfd, chdr.ch_size, &echdr->ch_size);
+      bfd_put_32 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
+    }
+  else
+    {
+      Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
+      bfd_put_32 (obfd, chdr.ch_type, &echdr->ch_type);
+      bfd_put_32 (obfd, 0, &echdr->ch_reserved);
+      bfd_put_64 (obfd, chdr.ch_size, &echdr->ch_size);
+      bfd_put_64 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
+    }
+
+  /* Copy the compressed contents.  */
+  if (use_memmove)
+    memmove (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
+  else
+    {
+      memcpy (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
+      free (*ptr);
+      *ptr = contents;
+    }
+
+  *ptr_size = size;
+  return true;
+}
+
+static bool
+decompress_contents (bool is_zstd, bfd_byte *compressed_buffer,
 		     bfd_size_type compressed_size,
 		     bfd_byte *uncompressed_buffer,
 		     bfd_size_type uncompressed_size)
 {
+  if (is_zstd)
+    {
+#ifdef HAVE_ZSTD
+      size_t ret = ZSTD_decompress (uncompressed_buffer, uncompressed_size,
+				    compressed_buffer, compressed_size);
+      return !ZSTD_isError (ret);
+#endif
+    }
+
   z_stream strm;
   int rc;
 
@@ -46,6 +531,11 @@ decompress_contents (bfd_byte *compresse
   strm.avail_in = compressed_size;
   strm.next_in = (Bytef*) compressed_buffer;
   strm.avail_out = uncompressed_size;
+  /* FIXME: strm.avail_in and strm.avail_out are typically unsigned
+     int.  Supporting sizes that don't fit in an unsigned int is
+     possible but will require some rewriting of this function.  */
+  if (strm.avail_in != compressed_size || strm.avail_out != uncompressed_size)
+    return false;
 
   BFD_ASSERT (Z_OK == 0);
   rc = inflateInit (&strm);
@@ -60,148 +550,149 @@ decompress_contents (bfd_byte *compresse
 	break;
       rc = inflateReset (&strm);
     }
-  rc |= inflateEnd (&strm);
-  return rc == Z_OK && strm.avail_out == 0;
+  return inflateEnd (&strm) == Z_OK && rc == Z_OK && strm.avail_out == 0;
 }
 
-/* Compress data of the size specified in @var{uncompressed_size}
-   and pointed to by @var{uncompressed_buffer} using zlib and store
+/* Compress section contents using zlib/zstd and store
    as the contents field.  This function assumes the contents
    field was allocated using bfd_malloc() or equivalent.
 
    Return the uncompressed size if the full section contents is
-   compressed successfully.  Otherwise return 0.  */
+   compressed successfully.  Otherwise return (bfd_size_type) -1.  */
 
 static bfd_size_type
-bfd_compress_section_contents (bfd *abfd, sec_ptr sec,
-			       bfd_byte *uncompressed_buffer,
-			       bfd_size_type uncompressed_size)
+bfd_compress_section_contents (bfd *abfd, sec_ptr sec)
 {
+  bfd_byte *input_buffer;
   uLong compressed_size;
   bfd_byte *buffer;
   bfd_size_type buffer_size;
-  bfd_boolean decompress;
   int zlib_size = 0;
-  int orig_compression_header_size;
-  bfd_size_type orig_uncompressed_size;
-  unsigned int orig_uncompressed_alignment_pow;
-  int header_size = bfd_get_compression_header_size (abfd, NULL);
-  bfd_boolean compressed
-    = bfd_is_section_compressed_with_header (abfd, sec,
-					     &orig_compression_header_size,
-					     &orig_uncompressed_size,
-					     &orig_uncompressed_alignment_pow);
+  int orig_header_size;
+  bfd_size_type uncompressed_size;
+  unsigned int uncompressed_alignment_pow;
+  enum compression_type ch_type = ch_none;
+  int new_header_size = bfd_get_compression_header_size (abfd, NULL);
+  bool compressed
+    = bfd_is_section_compressed_info (abfd, sec,
+				      &orig_header_size,
+				      &uncompressed_size,
+				      &uncompressed_alignment_pow,
+				      &ch_type);
+  bool update = false;
+
+  /* We shouldn't be trying to decompress unsupported compressed sections.  */
+  if (compressed && orig_header_size < 0)
+    abort ();
 
   /* Either ELF compression header or the 12-byte, "ZLIB" + 8-byte size,
      overhead in .zdebug* section.  */
-  if (!header_size)
-     header_size = 12;
+  if (!new_header_size)
+    new_header_size = 12;
+  if (ch_type == ch_none)
+    orig_header_size = 12;
 
+  input_buffer = sec->contents;
   if (compressed)
     {
-      /* We shouldn't decompress unsupported compressed section.  */
-      if (orig_compression_header_size < 0)
-	abort ();
-
-      /* Different compression schemes.  Just move the compressed section
-	 contents to the right position. */
-      if (orig_compression_header_size == 0)
-	{
-	  /* Convert it from .zdebug* section.  Get the uncompressed
-	     size first.  We need to subtract the 12-byte overhead in
-	     .zdebug* section.  Set orig_compression_header_size to
-	     the 12-bye overhead.  */
-	  orig_compression_header_size = 12;
-	  zlib_size = uncompressed_size - 12;
-	}
-      else
+      zlib_size = sec->size - orig_header_size;
+      compressed_size = zlib_size + new_header_size;
+
+      /* If we are converting between zlib-gnu and zlib-gabi then the
+	 compressed contents just need to be moved.  */
+      update = (ch_type < ch_compress_zstd
+		&& (abfd->flags & BFD_COMPRESS_ZSTD) == 0);
+
+      /* Uncompress when not just moving contents or when compressed
+	 is not smaller than uncompressed.  */
+      if (!update || compressed_size >= uncompressed_size)
 	{
-	  /* Convert it to .zdebug* section.  */
-	  zlib_size = uncompressed_size - orig_compression_header_size;
-	}
+	  buffer_size = uncompressed_size;
+	  buffer = bfd_malloc (buffer_size);
+	  if (buffer == NULL)
+	    return (bfd_size_type) -1;
 
-      /* Add the header size.  */
-      compressed_size = zlib_size + header_size;
+	  if (!decompress_contents (ch_type == ch_compress_zstd,
+				    input_buffer + orig_header_size,
+				    zlib_size, buffer, buffer_size))
+	    {
+	      bfd_set_error (bfd_error_bad_value);
+	      free (buffer);
+	      return (bfd_size_type) -1;
+	    }
+	  free (input_buffer);
+	  bfd_set_section_alignment (sec, uncompressed_alignment_pow);
+	  sec->contents = buffer;
+	  sec->flags |= SEC_IN_MEMORY;
+	  sec->compress_status = COMPRESS_SECTION_NONE;
+	  sec->size = uncompressed_size;
+	  input_buffer = buffer;
+	}
     }
-  else
-    compressed_size = compressBound (uncompressed_size) + header_size;
 
-  /* Uncompress if it leads to smaller size.  */
-  if (compressed && compressed_size > orig_uncompressed_size)
+  if (!update)
+    compressed_size = compressBound (uncompressed_size) + new_header_size;
+
+  buffer_size = compressed_size;
+  buffer = bfd_alloc (abfd, buffer_size);
+  if (buffer == NULL)
+    return (bfd_size_type) -1;
+
+  if (update)
     {
-      decompress = TRUE;
-      buffer_size = orig_uncompressed_size;
+      if (compressed_size < uncompressed_size)
+	memcpy (buffer + new_header_size,
+		input_buffer + orig_header_size,
+		zlib_size);
     }
   else
     {
-      decompress = FALSE;
-      buffer_size = compressed_size;
-    }
-  buffer = (bfd_byte *) bfd_alloc (abfd, buffer_size);
-  if (buffer == NULL)
-    return 0;
-
-  if (compressed)
-    {
-      sec->size = orig_uncompressed_size;
-      if (decompress)
+      if (abfd->flags & BFD_COMPRESS_ZSTD)
 	{
-	  if (!decompress_contents (uncompressed_buffer
-				    + orig_compression_header_size,
-				    zlib_size, buffer, buffer_size))
+#if HAVE_ZSTD
+	  compressed_size = ZSTD_compress (buffer + new_header_size,
+					   compressed_size,
+					   input_buffer,
+					   uncompressed_size,
+					   ZSTD_CLEVEL_DEFAULT);
+	  if (ZSTD_isError (compressed_size))
 	    {
-	      bfd_set_error (bfd_error_bad_value);
 	      bfd_release (abfd, buffer);
-	      return 0;
+	      bfd_set_error (bfd_error_bad_value);
+	      return (bfd_size_type) -1;
 	    }
-	  free (uncompressed_buffer);
-	  bfd_set_section_alignment (sec, orig_uncompressed_alignment_pow);
-
-	  sec->contents = buffer;
-	  sec->compress_status = COMPRESS_SECTION_DONE;
-	  return orig_uncompressed_size;
+#endif
 	}
-      else
-	{
-	  bfd_update_compression_header (abfd, buffer, sec);
-	  memmove (buffer + header_size,
-		   uncompressed_buffer + orig_compression_header_size,
-		   zlib_size);
-	}
-    }
-  else
-    {
-      if (compress ((Bytef*) buffer + header_size,
-		    &compressed_size,
-		    (const Bytef*) uncompressed_buffer,
-		    uncompressed_size) != Z_OK)
+      else if (compress ((Bytef *) buffer + new_header_size, &compressed_size,
+			 (const Bytef *) input_buffer, uncompressed_size)
+	       != Z_OK)
 	{
 	  bfd_release (abfd, buffer);
 	  bfd_set_error (bfd_error_bad_value);
-	  return 0;
+	  return (bfd_size_type) -1;
 	}
 
-      compressed_size += header_size;
-      /* PR binutils/18087: If compression didn't make the section smaller,
-	 just keep it uncompressed.  */
-      if (compressed_size < uncompressed_size)
-	bfd_update_compression_header (abfd, buffer, sec);
-      else
-	{
-	  /* NOTE: There is a small memory leak here since
-	     uncompressed_buffer is malloced and won't be freed.  */
-	  bfd_release (abfd, buffer);
-	  sec->contents = uncompressed_buffer;
-	  sec->compress_status = COMPRESS_SECTION_NONE;
-	  return uncompressed_size;
-	}
+      compressed_size += new_header_size;
     }
 
-  free (uncompressed_buffer);
+  /* If compression didn't make the section smaller, keep it uncompressed.  */
+  if (compressed_size >= uncompressed_size)
+    {
+      memcpy (buffer, input_buffer, uncompressed_size);
+      if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+	elf_section_flags (sec) &= ~SHF_COMPRESSED;
+      sec->compress_status = COMPRESS_SECTION_NONE;
+    }
+  else
+    {
+      sec->size = uncompressed_size;
+      bfd_update_compression_header (abfd, buffer, sec);
+      sec->size = compressed_size;
+      sec->compress_status = COMPRESS_SECTION_DONE;
+    }
   sec->contents = buffer;
-  sec->size = compressed_size;
-  sec->compress_status = COMPRESS_SECTION_DONE;
-
+  sec->flags |= SEC_IN_MEMORY;
+  free (input_buffer);
   return uncompressed_size;
 }
 
@@ -210,7 +701,7 @@ FUNCTION
 	bfd_get_full_section_contents
 
 SYNOPSIS
-	bfd_boolean bfd_get_full_section_contents
+	bool bfd_get_full_section_contents
 	  (bfd *abfd, asection *section, bfd_byte **ptr);
 
 DESCRIPTION
@@ -223,53 +714,44 @@ DESCRIPTION
 	returns @code{TRUE} but @var{*ptr} is set to NULL.
 */
 
-bfd_boolean
+bool
 bfd_get_full_section_contents (bfd *abfd, sec_ptr sec, bfd_byte **ptr)
 {
-  bfd_size_type sz;
+  bfd_size_type readsz = bfd_get_section_limit_octets (abfd, sec);
+  bfd_size_type allocsz = bfd_get_section_alloc_size (abfd, sec);
   bfd_byte *p = *ptr;
-  bfd_boolean ret;
+  bool ret;
   bfd_size_type save_size;
   bfd_size_type save_rawsize;
   bfd_byte *compressed_buffer;
   unsigned int compression_header_size;
+  const unsigned int compress_status = sec->compress_status;
 
-  if (abfd->direction != write_direction && sec->rawsize != 0)
-    sz = sec->rawsize;
-  else
-    sz = sec->size;
-  if (sz == 0)
+  if (allocsz == 0)
     {
       *ptr = NULL;
-      return TRUE;
+      return true;
     }
 
-  switch (sec->compress_status)
+  if (p == NULL
+      && compress_status != COMPRESS_SECTION_DONE
+      && _bfd_section_size_insane (abfd, sec))
+    {
+      /* PR 24708: Avoid attempts to allocate a ridiculous amount
+	 of memory.  */
+      _bfd_error_handler
+	/* xgettext:c-format */
+	(_("error: %pB(%pA) is too large (%#" PRIx64 " bytes)"),
+	 abfd, sec, (uint64_t) readsz);
+      return false;
+    }
+
+  switch (compress_status)
     {
     case COMPRESS_SECTION_NONE:
       if (p == NULL)
 	{
-	  ufile_ptr filesize = bfd_get_file_size (abfd);
-	  if (filesize > 0
-	      && filesize < sz
-	      /* PR 24753: Linker created sections can be larger than
-		 the file size, eg if they are being used to hold stubs.  */
-	      && (bfd_section_flags (sec) & SEC_LINKER_CREATED) == 0
-	      /* The MMO file format supports its own special compression
-		 technique, but it uses COMPRESS_SECTION_NONE when loading
-		 a section's contents.  */
-	      && bfd_get_flavour (abfd) != bfd_target_mmo_flavour)
-	    {
-	      /* PR 24708: Avoid attempts to allocate a ridiculous amount
-		 of memory.  */
-	      bfd_set_error (bfd_error_no_memory);
-	      _bfd_error_handler
-		/* xgettext:c-format */
-		(_("error: %pB(%pA) section size (%#" PRIx64 " bytes) is larger than file size (%#" PRIx64 " bytes)"),
-		 abfd, sec, (uint64_t) sz, (uint64_t) filesize);
-	      return FALSE;
-	    }
-	  p = (bfd_byte *) bfd_malloc (sz);
+	  p = (bfd_byte *) bfd_malloc (allocsz);
 	  if (p == NULL)
 	    {
 	      /* PR 20801: Provide a more helpful error message.  */
@@ -277,25 +759,26 @@ bfd_get_full_section_contents (bfd *abfd
 		_bfd_error_handler
 		  /* xgettext:c-format */
 		  (_("error: %pB(%pA) is too large (%#" PRIx64 " bytes)"),
-		  abfd, sec, (uint64_t) sz);
-	      return FALSE;
+		  abfd, sec, (uint64_t) allocsz);
+	      return false;
 	    }
 	}
 
-      if (!bfd_get_section_contents (abfd, sec, p, 0, sz))
+      if (!bfd_get_section_contents (abfd, sec, p, 0, readsz))
 	{
 	  if (*ptr != p)
 	    free (p);
-	  return FALSE;
+	  return false;
 	}
       *ptr = p;
-      return TRUE;
+      return true;
 
-    case DECOMPRESS_SECTION_SIZED:
+    case DECOMPRESS_SECTION_ZLIB:
+    case DECOMPRESS_SECTION_ZSTD:
       /* Read in the full compressed section contents.  */
       compressed_buffer = (bfd_byte *) bfd_malloc (sec->compressed_size);
       if (compressed_buffer == NULL)
-	return FALSE;
+	return false;
       save_rawsize = sec->rawsize;
       save_size = sec->size;
       /* Clear rawsize, set size to compressed size and set compress_status
@@ -309,12 +792,12 @@ bfd_get_full_section_contents (bfd *abfd
       /* Restore rawsize and size.  */
       sec->rawsize = save_rawsize;
       sec->size = save_size;
-      sec->compress_status = DECOMPRESS_SECTION_SIZED;
+      sec->compress_status = compress_status;
       if (!ret)
 	goto fail_compressed;
 
       if (p == NULL)
-	p = (bfd_byte *) bfd_malloc (sz);
+	p = (bfd_byte *) bfd_malloc (allocsz);
       if (p == NULL)
 	goto fail_compressed;
 
@@ -323,35 +806,37 @@ bfd_get_full_section_contents (bfd *abfd
 	/* Set header size to the zlib header size if it is a
 	   SHF_COMPRESSED section.  */
 	compression_header_size = 12;
-      if (!decompress_contents (compressed_buffer + compression_header_size,
-				sec->compressed_size - compression_header_size, p, sz))
+      bool is_zstd = compress_status == DECOMPRESS_SECTION_ZSTD;
+      if (!decompress_contents (
+	      is_zstd, compressed_buffer + compression_header_size,
+	      sec->compressed_size - compression_header_size, p, readsz))
 	{
 	  bfd_set_error (bfd_error_bad_value);
 	  if (p != *ptr)
 	    free (p);
 	fail_compressed:
 	  free (compressed_buffer);
-	  return FALSE;
+	  return false;
 	}
 
       free (compressed_buffer);
       *ptr = p;
-      return TRUE;
+      return true;
 
     case COMPRESS_SECTION_DONE:
       if (sec->contents == NULL)
-	return FALSE;
+	return false;
       if (p == NULL)
 	{
-	  p = (bfd_byte *) bfd_malloc (sz);
+	  p = (bfd_byte *) bfd_malloc (allocsz);
 	  if (p == NULL)
-	    return FALSE;
+	    return false;
 	  *ptr = p;
 	}
       /* PR 17512; file: 5bc29788.  */
       if (p != sec->contents)
-	memcpy (p, sec->contents, sz);
-      return TRUE;
+	memcpy (p, sec->contents, readsz);
+      return true;
 
     default:
       abort ();
@@ -360,36 +845,15 @@ bfd_get_full_section_contents (bfd *abfd
 
 /*
 FUNCTION
-	bfd_cache_section_contents
-
-SYNOPSIS
-	void bfd_cache_section_contents
-	  (asection *sec, void *contents);
-
-DESCRIPTION
-	Stash @var(contents) so any following reads of @var(sec) do
-	not need to decompress again.
-*/
-
-void
-bfd_cache_section_contents (asection *sec, void *contents)
-{
-  if (sec->compress_status == DECOMPRESS_SECTION_SIZED)
-    sec->compress_status = COMPRESS_SECTION_DONE;
-  sec->contents = contents;
-  sec->flags |= SEC_IN_MEMORY;
-}
-
-/*
-FUNCTION
-	bfd_is_section_compressed_with_header
+	bfd_is_section_compressed_info
 
 SYNOPSIS
-	bfd_boolean bfd_is_section_compressed_with_header
+	bool bfd_is_section_compressed_info
 	  (bfd *abfd, asection *section,
-	  int *compression_header_size_p,
-	  bfd_size_type *uncompressed_size_p,
-	  unsigned int *uncompressed_alignment_power_p);
+	   int *compression_header_size_p,
+	   bfd_size_type *uncompressed_size_p,
+	   unsigned int *uncompressed_alignment_power_p,
+	   enum compression_type *ch_type);
 
 DESCRIPTION
 	Return @code{TRUE} if @var{section} is compressed.  Compression
@@ -401,17 +865,18 @@ DESCRIPTION
 	and uncompressed size is returned with 0.
 */
 
-bfd_boolean
-bfd_is_section_compressed_with_header (bfd *abfd, sec_ptr sec,
-				       int *compression_header_size_p,
-				       bfd_size_type *uncompressed_size_p,
-				       unsigned int *uncompressed_align_pow_p)
+bool
+bfd_is_section_compressed_info (bfd *abfd, sec_ptr sec,
+				int *compression_header_size_p,
+				bfd_size_type *uncompressed_size_p,
+				unsigned int *uncompressed_align_pow_p,
+				enum compression_type *ch_type)
 {
   bfd_byte header[MAX_COMPRESSION_HEADER_SIZE];
   int compression_header_size;
   int header_size;
   unsigned int saved = sec->compress_status;
-  bfd_boolean compressed;
+  bool compressed;
 
   *uncompressed_align_pow_p = 0;
 
@@ -429,19 +894,19 @@ bfd_is_section_compressed_with_header (b
       if (compression_header_size == 0)
 	/* In this case, it should be "ZLIB" followed by the uncompressed
 	   section size, 8 bytes in big-endian order.  */
-	compressed = CONST_STRNEQ ((char*) header , "ZLIB");
+	compressed = startswith ((char*) header , "ZLIB");
       else
-	compressed = TRUE;
+	compressed = true;
     }
   else
-    compressed = FALSE;
+    compressed = false;
 
   *uncompressed_size_p = sec->size;
   if (compressed)
     {
       if (compression_header_size != 0)
 	{
-	  if (!bfd_check_compression_header (abfd, header, sec,
+	  if (!bfd_check_compression_header (abfd, header, sec, ch_type,
 					     uncompressed_size_p,
 					     uncompressed_align_pow_p))
 	    compression_header_size = -1;
@@ -452,7 +917,7 @@ bfd_is_section_compressed_with_header (b
 	 have the first byte of its (big-endian) size be non-zero.  */
       else if (strcmp (sec->name, ".debug_str") == 0
 	       && ISPRINT (header[4]))
-	compressed = FALSE;
+	compressed = false;
       else
 	*uncompressed_size_p = bfd_getb64 (header + 4);
     }
@@ -468,23 +933,25 @@ FUNCTION
 	bfd_is_section_compressed
 
 SYNOPSIS
-	bfd_boolean bfd_is_section_compressed
+	bool bfd_is_section_compressed
 	  (bfd *abfd, asection *section);
 
 DESCRIPTION
 	Return @code{TRUE} if @var{section} is compressed.
 */
 
-bfd_boolean
+bool
 bfd_is_section_compressed (bfd *abfd, sec_ptr sec)
 {
   int compression_header_size;
   bfd_size_type uncompressed_size;
   unsigned int uncompressed_align_power;
-  return (bfd_is_section_compressed_with_header (abfd, sec,
-						 &compression_header_size,
-						 &uncompressed_size,
-						 &uncompressed_align_power)
+  enum compression_type ch_type;
+  return (bfd_is_section_compressed_info (abfd, sec,
+					  &compression_header_size,
+					  &uncompressed_size,
+					  &uncompressed_align_power,
+					  &ch_type)
 	  && compression_header_size >= 0
 	  && uncompressed_size > 0);
 }
@@ -494,19 +961,19 @@ FUNCTION
 	bfd_init_section_decompress_status
 
 SYNOPSIS
-	bfd_boolean bfd_init_section_decompress_status
+	bool bfd_init_section_decompress_status
 	  (bfd *abfd, asection *section);
 
 DESCRIPTION
 	Record compressed section size, update section size with
 	decompressed size and set compress_status to
-	DECOMPRESS_SECTION_SIZED.
+	DECOMPRESS_SECTION_{ZLIB,ZSTD}.
 
 	Return @code{FALSE} if the section is not a valid compressed
 	section.  Otherwise, return @code{TRUE}.
 */
 
-bfd_boolean
+bool
 bfd_init_section_decompress_status (bfd *abfd, sec_ptr sec)
 {
   bfd_byte header[MAX_COMPRESSION_HEADER_SIZE];
@@ -514,6 +981,8 @@ bfd_init_section_decompress_status (bfd
   int header_size;
   bfd_size_type uncompressed_size;
   unsigned int uncompressed_alignment_power = 0;
+  enum compression_type ch_type;
+  z_stream strm;
 
   compression_header_size = bfd_get_compression_header_size (abfd, sec);
   if (compression_header_size > MAX_COMPRESSION_HEADER_SIZE)
@@ -527,34 +996,46 @@ bfd_init_section_decompress_status (bfd
       || !bfd_get_section_contents (abfd, sec, header, 0, header_size))
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   if (compression_header_size == 0)
     {
       /* In this case, it should be "ZLIB" followed by the uncompressed
 	 section size, 8 bytes in big-endian order.  */
-      if (! CONST_STRNEQ ((char*) header, "ZLIB"))
+      if (! startswith ((char*) header, "ZLIB"))
 	{
 	  bfd_set_error (bfd_error_wrong_format);
-	  return FALSE;
+	  return false;
 	}
       uncompressed_size = bfd_getb64 (header + 4);
+      ch_type = ch_none;
     }
   else if (!bfd_check_compression_header (abfd, header, sec,
+					  &ch_type,
 					  &uncompressed_size,
 					  &uncompressed_alignment_power))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
+    }
+
+  /* PR28530, reject sizes unsupported by decompress_contents.  */
+  strm.avail_in = sec->size;
+  strm.avail_out = uncompressed_size;
+  if (strm.avail_in != sec->size || strm.avail_out != uncompressed_size)
+    {
+      bfd_set_error (bfd_error_nonrepresentable_section);
+      return false;
     }
 
   sec->compressed_size = sec->size;
   sec->size = uncompressed_size;
   bfd_set_section_alignment (sec, uncompressed_alignment_power);
-  sec->compress_status = DECOMPRESS_SECTION_SIZED;
+  sec->compress_status = (ch_type == ch_compress_zstd
+			  ? DECOMPRESS_SECTION_ZSTD : DECOMPRESS_SECTION_ZLIB);
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -562,7 +1043,7 @@ FUNCTION
 	bfd_init_section_compress_status
 
 SYNOPSIS
-	bfd_boolean bfd_init_section_compress_status
+	bool bfd_init_section_compress_status
 	  (bfd *abfd, asection *section);
 
 DESCRIPTION
@@ -573,7 +1054,7 @@ DESCRIPTION
 	section.  Otherwise, return @code{TRUE}.
 */
 
-bfd_boolean
+bool
 bfd_init_section_compress_status (bfd *abfd, sec_ptr sec)
 {
   bfd_size_type uncompressed_size;
@@ -584,10 +1065,11 @@ bfd_init_section_compress_status (bfd *a
       || sec->size == 0
       || sec->rawsize != 0
       || sec->contents != NULL
-      || sec->compress_status != COMPRESS_SECTION_NONE)
+      || sec->compress_status != COMPRESS_SECTION_NONE
+      || _bfd_section_size_insane (abfd, sec))
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   /* Read in the full section contents and compress it.  */
@@ -595,16 +1077,23 @@ bfd_init_section_compress_status (bfd *a
   uncompressed_buffer = (bfd_byte *) bfd_malloc (uncompressed_size);
   /* PR 21431 */
   if (uncompressed_buffer == NULL)
-    return FALSE;
+    return false;
 
   if (!bfd_get_section_contents (abfd, sec, uncompressed_buffer,
 				 0, uncompressed_size))
-    return FALSE;
+    {
+      free (uncompressed_buffer);
+      return false;
+    }
 
-  uncompressed_size = bfd_compress_section_contents (abfd, sec,
-						     uncompressed_buffer,
-						     uncompressed_size);
-  return uncompressed_size != 0;
+  sec->contents = uncompressed_buffer;
+  if (bfd_compress_section_contents (abfd, sec) == (bfd_size_type) -1)
+    {
+      free (sec->contents);
+      sec->contents = NULL;
+      return false;
+    }
+  return true;
 }
 
 /*
@@ -612,7 +1101,7 @@ FUNCTION
 	bfd_compress_section
 
 SYNOPSIS
-	bfd_boolean bfd_compress_section
+	bool bfd_compress_section
 	  (bfd *abfd, asection *section, bfd_byte *uncompressed_buffer);
 
 DESCRIPTION
@@ -620,10 +1109,10 @@ DESCRIPTION
 	compressed size and set compress_status to COMPRESS_SECTION_DONE.
 
 	Return @code{FALSE} if compression fail.  Otherwise, return
-	@code{TRUE}.
+	@code{TRUE}.  UNCOMPRESSED_BUFFER is freed in both cases.
 */
 
-bfd_boolean
+bool
 bfd_compress_section (bfd *abfd, sec_ptr sec, bfd_byte *uncompressed_buffer)
 {
   bfd_size_type uncompressed_size = sec->size;
@@ -637,10 +1126,15 @@ bfd_compress_section (bfd *abfd, sec_ptr
       || sec->compress_status != COMPRESS_SECTION_NONE)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
-  /* Compress it.  */
-  return bfd_compress_section_contents (abfd, sec, uncompressed_buffer,
-					uncompressed_size) != 0;
+  sec->contents = uncompressed_buffer;
+  if (bfd_compress_section_contents (abfd, sec) == (bfd_size_type) -1)
+    {
+      free (sec->contents);
+      sec->contents = NULL;
+      return false;
+    }
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/config.bfd ./bfd/config.bfd
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/config.bfd	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/config.bfd	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 # config.bfd
 #
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -48,12 +48,6 @@ targ_underscore=no
 
 # Catch obsolete configurations.
 case $targ in
- openrisc-*-* | or32-*-*)
-    echo "*** Configuration $targ is obsolete." >&2
-    echo "*** Use or1k-*-elf or or1k-*-linux as the target instead" >&2
-    exit 1
-    ;;
- c30-*-*aout* | tic30-*-*aout* | \
  null)
     if test "x$enable_obsolete" != xyes; then
       echo "*** Configuration $targ is obsolete." >&2
@@ -64,27 +58,44 @@ case $targ in
     fi;;
 esac
 
+# Warn on changed defaulting
+case $targ in
+ *-*-netbsdelf* | *-*-netbsdaout* | *-*-netbsdpe*)
+    # Explicit, no defaulting
+    ;;
+ ns32k-*-netbsd*)
+    # The obsolete warning below is enough, and ns32k does not have ELF support
+    ;;
+ *-*-netbsd* )
+    targ_migrated=`echo "$targ" | sed 's/netbsd/netbsdaout/'`
+    echo "*** WARNING: $targ is now defaults to meaning ELF not a.out." >&2
+    echo "*** Use $targ_migrated instead to explicitly specify a.out." >&2
+    ;;
+esac
+
 case $targ in
- *-*-netbsdelf* | i[3-7]86-*-netbsd*-gnu* | i[3-7]86-*-knetbsd*-gnu | \
  mips*-*-irix5* | mips*-*-irix6*)
     # Not obsolete
     ;;
  *-adobe-* | \
+ *-*-beos* | \
  *-go32-rtems* | \
  *-sony-* | \
  *-tandem-* | \
  *-*-ieee* | \
+ *-*-netbsdpe* | \
  *-*-netware* | \
  *-*-rtemsaout* | \
  *-*-rtemscoff* | \
  a29k-* | \
  arm*-*-aout | \
  arm-*-coff | \
- arm-*-netbsd* | \
- arm-*-openbsd* | \
+ arm*-*-netbsdaout* | \
  arm-*-oabi | \
  arm-*-riscix* | \
+ arm*-*-symbianelf* | \
  arm-epoc-pe* | \
+ c30-*-*aout* | tic30-*-*aout* | \
  cr16c-*-* | \
  h8300*-*-coff | \
  h8500*-*-coff | \
@@ -99,7 +110,7 @@ case $targ in
  i[3-7]86-*-aix* | \
  i[3-7]86-sequent-bsd* | \
  i[3-7]86-*-freebsdaout* | i[3-7]86-*-freebsd[12].* | i[3-7]86-*-freebsd[12] | \
- i[3-7]86-*-netbsdaout* | i[3-7]86-*-netbsd* | \
+ i[3-7]86-*-netbsdaout* | \
  i[3-7]86-*-openbsd[0-2].* | i[3-7]86-*-openbsd3.[0-3] | \
  i[3-7]86-*-linux*aout* | \
  i[3-7]86-*-mach* | i[3-7]86-*-osf1mk* | \
@@ -109,12 +120,13 @@ case $targ in
  i370-* | \
  i860-*-* | \
  i960-*-* | \
- m68*-*-*bsd* | \
+ m68*-*-bsd* | \
  m68*-*-aout* | \
  m68*-*-coff* | \
  m68*-*-hpux* | \
  m68*-*-linux*aout* | \
  m68*-*-lynxos* | \
+ m68*-*-openbsd* | \
  m68*-*-os68k* | \
  m68*-*-psos* | \
  m68*-*-sunos* | \
@@ -123,9 +135,7 @@ case $targ in
  m68*-*-vxworks* | \
  m68*-apollo-* | \
  m68*-apple-aux* | \
- m68*-bull-sysv* | \
  m68*-ericsson-* | \
- m68*-motorola-sysv* | \
  m68*-netx-* | \
  m88*-*-* | \
  maxq-*-coff | \
@@ -140,7 +150,13 @@ case $targ in
  mips*-dec-* | \
  mips*-sgi-* | \
  mips*el-*-rtems* | \
+ m32c-*-rtems* | \
+ ns32k-*-netbsd* | \
+ openrisc-*-* | \
+ or32-*-* | \
  powerpc-*-lynxos* | powerpc-*-windiss* | \
+ powerpcle-*-pe | powerpcle-*-winnt* | powerpcle-*-cygwin* | \
+ sh*-*-netbsdaout* | \
  sh*-*-symbianelf* | sh5*-*-* | sh64*-*-* | \
  sparc*-*-*aout* | \
  sparc*-*-chorus* | \
@@ -151,9 +167,10 @@ case $targ in
  vax-*-bsd* | vax-*-ultrix* | vax-*-vms* | \
  w65-*-* | \
  we32k-*-* | \
+ xc16x-*-* | \
  null)
-    echo "*** Configuration $targ is obsolete." >&2
-    echo "*** Support has been REMOVED." >&2
+    echo "*** Configuration $targ is now obsolete" >&2
+    echo "*** and so support for it has been REMOVED." >&2
     exit 1
     ;;
 esac
@@ -165,6 +182,7 @@ alpha*)		 targ_archs=bfd_alpha_arch ;;
 am33_2.0*)	 targ_archs=bfd_mn10300_arch ;;
 arc*)		 targ_archs=bfd_arc_arch ;;
 arm*)		 targ_archs=bfd_arm_arch ;;
+amdgcn*)	 targ_archs=bfd_amdgcn_arch ;;
 bfin*)		 targ_archs=bfd_bfin_arch ;;
 c30*)		 targ_archs=bfd_tic30_arch ;;
 c4x*)		 targ_archs=bfd_tic4x_arch ;;
@@ -178,15 +196,14 @@ fido*)		 targ_archs=bfd_m68k_arch ;;
 hppa*)		 targ_archs=bfd_hppa_arch ;;
 i[3-7]86)	 targ_archs=bfd_i386_arch ;;
 ia16)		 targ_archs=bfd_i386_arch ;;
-lm32)	         targ_archs=bfd_lm32_arch ;;
+kvx)		 targ_archs=bfd_kvx_arch ;;
+loongarch*)	 targ_archs=bfd_loongarch_arch ;;
 m6811*|m68hc11*) targ_archs="bfd_m68hc11_arch bfd_m68hc12_arch bfd_m9s12x_arch bfd_m9s12xg_arch" ;;
 m6812*|m68hc12*) targ_archs="bfd_m68hc12_arch bfd_m68hc11_arch bfd_m9s12x_arch bfd_m9s12xg_arch" ;;
 m68*)		 targ_archs=bfd_m68k_arch ;;
-s12z*)         targ_archs=bfd_s12z_arch ;;
 microblaze*)	 targ_archs=bfd_microblaze_arch ;;
 mips*)		 targ_archs=bfd_mips_arch ;;
 nds32*)		 targ_archs=bfd_nds32_arch ;;
-nfp)		 targ_archs=bfd_nfp_arch ;;
 nios2*)          targ_archs=bfd_nios2_arch ;;
 or1k*|or1knd*)	 targ_archs=bfd_or1k_arch ;;
 pdp11*)		 targ_archs=bfd_pdp11_arch ;;
@@ -195,6 +212,7 @@ powerpc*)	 targ_archs="bfd_rs6000_arch b
 pru*)		 targ_archs=bfd_pru_arch ;;
 riscv*)		 targ_archs=bfd_riscv_arch ;;
 rs6000)		 targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
+s12z*)		 targ_archs=bfd_s12z_arch ;;
 s390*)		 targ_archs=bfd_s390_arch ;;
 sh*)		 targ_archs=bfd_sh_arch ;;
 sparc*)		 targ_archs=bfd_sparc_arch ;;
@@ -203,11 +221,9 @@ tilegx*)	 targ_archs=bfd_tilegx_arch ;;
 tilepro*)	 targ_archs=bfd_tilepro_arch ;;
 v850*)		 targ_archs="bfd_v850_arch bfd_v850_rh850_arch" ;;
 visium*)	 targ_archs=bfd_visium_arch ;;
-wasm32)		 targ_archs=bfd_wasm32_arch ;;
 x86_64*)	 targ_archs=bfd_i386_arch ;;
 xtensa*)	 targ_archs=bfd_xtensa_arch ;;
-xgate)		 targ_archs=bfd_xgate_arch ;;
-z80|r800)	 targ_archs=bfd_z80_arch ;;
+z80*|r800|z180|gbz80|ez80*)	 targ_archs=bfd_z80_arch ;;
 z8k*)		 targ_archs=bfd_z8k_arch ;;
 *)		 targ_archs=bfd_${targ_cpu}_arch ;;
 esac
@@ -227,11 +243,17 @@ case "${targ}" in
     targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
     want64=true
     ;;
-  aarch64-*-elf | aarch64-*-rtems*)
+  aarch64-*-elf | aarch64-*-rtems* | aarch64-*-genode*)
     targ_defvec=aarch64_elf64_le_vec
-    targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
+    targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_le_vec aarch64_pe_le_vec"
     want64=true
     ;;
+  aarch64-*-pe* | aarch64-*-mingw*)
+    targ_defvec=aarch64_pe_le_vec
+    targ_selvecs="aarch64_pe_le_vec aarch64_pei_le_vec aarch64_elf64_le_vec aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec pdb_vec"
+    want64=true
+    targ_underscore=no
+    ;;
   aarch64_be-*-elf)
     targ_defvec=aarch64_elf64_be_vec
     targ_selvecs="aarch64_elf64_le_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_be_vec arm_elf32_le_vec"
@@ -242,6 +264,11 @@ case "${targ}" in
     targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec"
     want64=true
     ;;
+  aarch64-*-openbsd*)
+    targ_defvec=aarch64_elf64_le_vec
+    targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec"
+    want64=true
+    ;;
   aarch64-*-fuchsia*)
     targ_defvec=aarch64_elf64_le_vec
     targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec"
@@ -252,12 +279,17 @@ case "${targ}" in
     targ_selvecs=aarch64_elf64_be_cloudabi_vec
     want64=true
     ;;
-  aarch64-*-linux*)
+  aarch64-*-haiku*)
     targ_defvec=aarch64_elf64_le_vec
     targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
     want64=true
     ;;
-  aarch64_be-*-linux*)
+  aarch64-*-linux* | aarch64-*-netbsd* | aarch64-*-nto* | aarch64-*-gnu*)
+    targ_defvec=aarch64_elf64_le_vec
+    targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_le_vec aarch64_pe_le_vec"
+    want64=true
+    ;;
+  aarch64_be-*-linux* | aarch64_be-*-netbsd*)
     targ_defvec=aarch64_elf64_be_vec
     targ_selvecs="aarch64_elf64_le_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_be_vec arm_elf32_le_vec"
     want64=true
@@ -296,6 +328,10 @@ case "${targ}" in
     targ_defvec=alpha_ecoff_le_vec
     want64=true
     ;;
+  amdgcn-*-*)
+    targ_defvec=amdgcn_elf64_le_vec
+    want64=true
+    ;;
   ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
     targ_defvec=ia64_elf64_le_vec
     targ_selvecs="ia64_elf64_be_vec ia64_pei_vec"
@@ -336,23 +372,23 @@ case "${targ}" in
     targ_defvec=arm_elf32_le_vec
     targ_selvecs="arm_elf32_be_vec"
     ;;
+  arm*-*-haiku*)
+    targ_defvec=arm_elf32_le_vec
+    targ_selvecs="arm_elf32_fdpic_le_vec arm_elf32_be_vec arm_elf32_fdpic_be_vec arm_pe_le_vec arm_pe_be_vec arm_pei_le_vec arm_pei_be_vec"
+    ;;
   arm-*-nacl*)
     targ_defvec=arm_elf32_nacl_le_vec
-    targ_selvecs="arm_elf32_nacl_be_vec i386_elf32_nacl_vec"
-    targ64_selvecs="x86_64_elf32_nacl_vec x86_64_elf64_nacl_vec"
-    targ_archs="$targ_archs bfd_i386_arch"
+    targ_selvecs="arm_elf32_nacl_be_vec"
     ;;
   armeb-*-nacl*)
     targ_defvec=arm_elf32_nacl_be_vec
-    targ_selvecs="arm_elf32_nacl_le_vec i386_elf32_nacl_vec"
-    targ64_selvecs="x86_64_elf32_nacl_vec x86_64_elf64_nacl_vec"
-    targ_archs="$targ_archs bfd_i386_arch"
+    targ_selvecs="arm_elf32_nacl_le_vec"
     ;;
-  armeb-*-netbsdelf*)
+  armeb-*-netbsd*)
     targ_defvec=arm_elf32_be_vec
     targ_selvecs="arm_elf32_le_vec"
     ;;
-  arm-*-netbsdelf*)
+  arm-*-netbsd* | arm-*-openbsd*)
     targ_defvec=arm_elf32_le_vec
     targ_selvecs="arm_elf32_be_vec"
     ;;
@@ -394,10 +430,6 @@ case "${targ}" in
     targ_defvec=arm_elf32_vxworks_le_vec
     targ_selvecs=arm_elf32_vxworks_be_vec
     ;;
-  arm*-*-symbianelf*)
-    targ_defvec=arm_elf32_symbian_le_vec
-    targ_selvecs=arm_elf32_symbian_be_vec
-    ;;
   arm9e-*-elf)
     targ_defvec=arm_elf32_le_vec
     targ_selvecs=arm_elf32_be_vec
@@ -413,9 +445,6 @@ case "${targ}" in
     targ_underscore=yes
     ;;
 
-  c30-*-*aout* | tic30-*-*aout*)
-    targ_defvec=tic30_aout_vec
-    ;;
   c30-*-*coff* | tic30-*-*coff*)
     targ_defvec=tic30_coff_vec
     ;;
@@ -437,7 +466,6 @@ case "${targ}" in
     targ_underscore=yes
     ;;
 
-#ifdef BFD64
   cris-*-* | crisv32-*-*)
     targ_defvec=cris_aout_vec
     targ_selvecs="cris_elf32_us_vec cris_elf32_vec"
@@ -447,7 +475,6 @@ case "${targ}" in
     esac
     want64=true
     ;;
-#endif
 
   crx-*-elf*)
     targ_defvec=crx_elf32_vec
@@ -560,20 +587,20 @@ case "${targ}" in
     targ_selvecs=hppa_elf32_vec
     ;;
 
-  i[3-7]86-*-elf* | i[3-7]86-*-rtems*)
+  i[3-7]86-*-elf* | i[3-7]86-*-rtems* | i[3-7]86-*-genode*)
     targ_defvec=i386_elf32_vec
     targ_selvecs="iamcu_elf32_vec i386_coff_vec"
     ;;
   i[3-7]86-*-solaris2*)
     targ_defvec=i386_elf32_sol2_vec
     targ_selvecs="iamcu_elf32_vec i386_coff_vec i386_pei_vec"
-    targ64_selvecs="x86_64_elf64_sol2_vec l1om_elf64_vec k1om_elf64_vec x86_64_pei_vec"
+    targ64_selvecs="x86_64_elf64_sol2_vec x86_64_pe_vec x86_64_pei_vec"
     want64=true
     ;;
 #ifdef BFD64
   x86_64-*-solaris2*)
     targ_defvec=i386_elf32_sol2_vec
-    targ_selvecs="x86_64_elf64_sol2_vec l1om_elf64_vec k1om_elf64_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pei_vec"
+    targ_selvecs="x86_64_elf64_sol2_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec"
     want64=true
     ;;
 #endif
@@ -588,7 +615,7 @@ case "${targ}" in
   i[3-7]86-*-dicos*)
     targ_defvec=i386_elf32_vec
     targ_selvecs=iamcu_elf32_vec
-    targ64_selvecs="x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec"
+    targ64_selvecs="x86_64_elf64_vec"
     ;;
   *-*-msdosdjgpp* | *-*-go32* )
     targ_defvec=i386_coff_go32_vec
@@ -607,26 +634,22 @@ case "${targ}" in
   i[3-7]86-*-dragonfly*)
     targ_defvec=i386_elf32_vec
     targ_selvecs=iamcu_elf32_vec
-    targ64_selvecs="x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec"
+    targ64_selvecs="x86_64_elf64_vec"
     ;;
   i[3-7]86-*-freebsd* | i[3-7]86-*-kfreebsd*-gnu)
     targ_defvec=i386_elf32_fbsd_vec
     targ_selvecs="i386_elf32_vec iamcu_elf32_vec i386_pei_vec i386_coff_vec"
-    targ64_selvecs="x86_64_elf64_fbsd_vec x86_64_elf64_vec x86_64_pei_vec l1om_elf64_vec l1om_elf64_fbsd_vec k1om_elf64_vec k1om_elf64_fbsd_vec"
+    targ64_selvecs="x86_64_elf64_fbsd_vec x86_64_elf64_vec x86_64_pe_vec x86_64_pei_vec"
     # FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling.
     case "${targ}" in
       i[3-7]86-*-freebsd3* | i[3-7]86-*-freebsd4 | i[3-7]86-*-freebsd4.0*)
 	targ_cflags=-DOLD_FREEBSD_ABI_LABEL ;;
     esac
     ;;
-  i[3-7]86-*-netbsdelf* | i[3-7]86-*-netbsd*-gnu* | i[3-7]86-*-knetbsd*-gnu)
+  i[3-7]86-*-netbsd* | i[3-7]86-*-knetbsd*-gnu)
     targ_defvec=i386_elf32_vec
     targ_selvecs="iamcu_elf32_vec"
-    targ64_selvecs="x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec"
-    ;;
-  i[3-7]86-*-netbsdpe*)
-    targ_defvec=i386_pe_vec
-    targ_selvecs="i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
+    targ64_selvecs="x86_64_elf64_vec"
     ;;
   i[3-7]86-*-openbsd*)
     targ_defvec=i386_elf32_vec
@@ -635,13 +658,7 @@ case "${targ}" in
   i[3-7]86-*-linux-*)
     targ_defvec=i386_elf32_vec
     targ_selvecs="iamcu_elf32_vec i386_pei_vec"
-    targ64_selvecs="x86_64_elf64_vec x86_64_elf32_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
-    ;;
-  i[3-7]86-*-nacl*)
-    targ_defvec=i386_elf32_nacl_vec
-    targ_selvecs="arm_elf32_nacl_be_vec arm_elf32_nacl_le_vec"
-    targ64_selvecs="x86_64_elf64_nacl_vec x86_64_elf32_nacl_vec"
-    targ_archs="$targ_archs bfd_arm_arch"
+    targ64_selvecs="x86_64_elf64_vec x86_64_elf32_vec x86_64_pe_vec x86_64_pei_vec"
     ;;
   i[3-7]86-*-redox*)
     targ_defvec=i386_elf32_vec
@@ -661,47 +678,46 @@ case "${targ}" in
     ;;
   x86_64-*-dicos*)
     targ_defvec=x86_64_elf64_vec
-    targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_vec"
+    targ_selvecs="i386_elf32_vec iamcu_elf32_vec"
     want64=true
     ;;
-  x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia)
+  x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia | x86_64-*-genode*)
     targ_defvec=x86_64_elf64_vec
-    targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec l1om_elf64_vec k1om_elf64_vec"
+    targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec"
     case "${targ}" in
       x86_64-*-rtems*)
-    targ_selvecs="${targ_selvecs} x86_64_pei_vec"
+    targ_selvecs="${targ_selvecs} x86_64_pe_vec x86_64_pei_vec"
     esac
     want64=true
     ;;
   x86_64-*-dragonfly*)
     targ_defvec=x86_64_elf64_vec
-    targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_vec"
+    targ_selvecs="i386_elf32_vec iamcu_elf32_vec"
     want64=true
     ;;
   x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
     targ_defvec=x86_64_elf64_fbsd_vec
-    targ_selvecs="i386_elf32_fbsd_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pei_vec i386_elf32_vec x86_64_elf64_vec l1om_elf64_vec l1om_elf64_fbsd_vec k1om_elf64_vec k1om_elf64_fbsd_vec"
+    targ_selvecs="i386_elf32_fbsd_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec i386_elf32_vec x86_64_elf64_vec"
     want64=true
     ;;
-  x86_64-*-netbsd* | x86_64-*-openbsd*)
+  x86_64-*-haiku*)
     targ_defvec=x86_64_elf64_vec
-    targ_selvecs="i386_elf32_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
+    targ_selvecs="i386_elf32_vec"
     want64=true
     ;;
-  x86_64-*-linux-*)
+  x86_64-*-netbsd* | x86_64-*-openbsd*)
     targ_defvec=x86_64_elf64_vec
-    targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec i386_pei_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
+    targ_selvecs="i386_elf32_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec"
     want64=true
     ;;
-  x86_64-*-nacl*)
-    targ_defvec=x86_64_elf32_nacl_vec
-    targ_selvecs="i386_elf32_nacl_vec x86_64_elf64_nacl_vec arm_elf32_nacl_be_vec arm_elf32_nacl_le_vec"
-    targ_archs="$targ_archs bfd_arm_arch"
+  x86_64-*-linux-*)
+    targ_defvec=x86_64_elf64_vec
+    targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec"
     want64=true
     ;;
   x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin)
     targ_defvec=x86_64_pe_vec
-    targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_be_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
+    targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_big_vec x86_64_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec pdb_vec"
     want64=true
     targ_underscore=no
     ;;
@@ -714,6 +730,11 @@ case "${targ}" in
     targ_selvecs=i386_elf32_vec
     want64=true
     ;;
+  x86_64-*-gnu*)
+    targ_defvec=x86_64_elf64_vec
+    targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec"
+    want64=true
+    ;;
 #endif
   i[3-7]86-*-lynxos*)
     targ_defvec=i386_elf32_vec
@@ -735,10 +756,14 @@ case "${targ}" in
     targ_defvec=i386_pe_vec
     targ_selvecs="i386_pe_vec i386_pei_vec"
     ;;
-  i[3-7]86-*-beoself* | i[3-7]86-*-beos*)
+  i[3-7]86-*-beos*)
     targ_defvec=i386_elf32_vec
     targ_selvecs="iamcu_elf32_vec i386_pe_vec i386_pei_vec"
     ;;
+  i[3-7]86-*-haiku*)
+    targ_defvec=i386_elf32_vec
+    targ_selvecs="i386_pei_vec"
+    ;;
   i[3-7]86-*-interix*)
     targ_defvec=i386_pei_vec
     targ_selvecs="i386_pe_vec"
@@ -751,7 +776,7 @@ case "${targ}" in
     ;;
   i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe)
     targ_defvec=i386_pe_vec
-    targ_selvecs="i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
+    targ_selvecs="i386_pe_vec i386_pe_big_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec pdb_vec"
     targ_underscore=yes
     ;;
   i[3-7]86-*-vxworks*)
@@ -773,6 +798,20 @@ case "${targ}" in
     targ_defvec=iq2000_elf32_vec
     ;;
 
+#ifdef BFD64
+  kvx-*-linux*)
+    targ_defvec=kvx_elf64_vec
+    targ_selvecs=kvx_elf32_vec
+    want64=true
+    ;;
+
+  kvx-*-*)
+    targ_defvec=kvx_elf64_vec
+    targ_selvecs=kvx_elf32_vec
+    want64=true
+    ;;
+#endif
+
   lm32-*-elf | lm32-*-rtems*)
     targ_defvec=lm32_elf32_vec
     targ_selvecs=lm32_elf32_fdpic_vec
@@ -783,7 +822,7 @@ case "${targ}" in
     targ_selvecs=lm32_elf32_vec
     ;;
 
-  m32c-*-elf | m32c-*-rtems*)
+  m32c-*-elf)
     targ_defvec=m32c_elf32_vec
     targ_underscore=yes
     ;;
@@ -804,6 +843,9 @@ case "${targ}" in
     targ_defvec=m32r_elf32_vec
     ;;
 
+  m68*-*-haiku*)
+    targ_defvec=m68k_elf32_vec
+    ;;
   m68hc11-*-* | m6811-*-*)
     targ_defvec=m68hc11_elf32_vec
     targ_selvecs="m68hc11_elf32_vec m68hc12_elf32_vec"
@@ -858,6 +900,10 @@ case "${targ}" in
     targ_defvec=mips_elf32_trad_be_vec
     targ_selvecs="mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
     ;;
+  mips*el-*-haiku*)
+    targ_defvec=mips_elf32_le_vec
+    targ_selvecs="mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_le_vec mips_ecoff_be_vec"
+    ;;
   mips*-*-irix6*)
     targ_defvec=mips_elf32_n_be_vec
     targ_selvecs="mips_elf32_n_le_vec mips_elf32_be_vec mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec"
@@ -910,10 +956,20 @@ case "${targ}" in
     targ_defvec=mips_elf32_be_vec
     targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
     ;;
+  mips64*el-*-linux*-gnuabi64)
+    targ_defvec=mips_elf64_trad_le_vec
+    targ_selvecs="mips_elf64_trad_be_vec mips_elf32_ntrad_le_vec mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec"
+    want64=true
+    ;;
   mips64*el-*-linux*)
     targ_defvec=mips_elf32_ntrad_le_vec
     targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
     ;;
+  mips64*-*-linux*-gnuabi64)
+    targ_defvec=mips_elf64_trad_be_vec
+    targ_selvecs="mips_elf64_trad_le_vec mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec"
+    want64=true
+    ;;
   mips64*-*-linux*)
     targ_defvec=mips_elf32_ntrad_be_vec
     targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
@@ -1009,7 +1065,7 @@ case "${targ}" in
     targ_defvec=ns32k_aout_pc532mach_vec
     targ_underscore=yes
     ;;
-  ns32k-*-netbsd* | ns32k-*-lites* | ns32k-*-openbsd*)
+  ns32k-*-lites* | ns32k-*-*bsd*)
     targ_defvec=ns32k_aout_pc532nbsd_vec
     targ_underscore=yes
     ;;
@@ -1057,13 +1113,6 @@ case "${targ}" in
     targ_selvecs="rs6000_xcoff64_aix_vec"
     want64=true
     ;;
-#ifdef BFD64
-  powerpc64-*-aix5.[01])
-    targ_defvec=rs6000_xcoff64_aix_vec
-    targ_selvecs="rs6000_xcoff_vec"
-    want64=true
-    ;;
-#endif
   powerpc-*-aix[5-9]* | rs6000-*-aix[5-9]*)
     targ_cflags=-DAIX_WEAK_SUPPORT
     targ_defvec=rs6000_xcoff_vec
@@ -1071,6 +1120,11 @@ case "${targ}" in
     want64=true
     ;;
 #ifdef BFD64
+  powerpc64-*-aix5.[01])
+    targ_defvec=rs6000_xcoff64_aix_vec
+    targ_selvecs="rs6000_xcoff_vec"
+    want64=true
+    ;;
   powerpc64-*-aix[5-9]*)
     targ_cflags=-DAIX_WEAK_SUPPORT
     targ_defvec=rs6000_xcoff64_aix_vec
@@ -1100,6 +1154,11 @@ case "${targ}" in
     targ_selvecs="powerpc_elf64_vec powerpc_elf32_vec powerpc_elf32_fbsd_vec powerpc_elf32_le_vec rs6000_xcoff_vec rs6000_xcoff64_vec rs6000_xcoff64_aix_vec"
     want64=true
     ;;
+  powerpc64le-*-freebsd*)
+    targ_defvec=powerpc_elf64_fbsd_le_vec
+    targ_selvecs="powerpc_elf64_vec powerpc_elf32_vec powerpc_elf32_fbsd_vec powerpc_elf32_le_vec rs6000_xcoff_vec rs6000_xcoff64_vec rs6000_xcoff64_aix_vec"
+    want64=true
+    ;;
   powerpc64-*-elf* | powerpc-*-elf64* | powerpc64-*-linux* | \
   powerpc64-*-*bsd*)
     targ_defvec=powerpc_elf64_vec
@@ -1125,6 +1184,11 @@ case "${targ}" in
     targ_selvecs="rs6000_xcoff_vec powerpc_elf32_le_vec powerpc_boot_vec"
     targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
     ;;
+  powerpc-*-haiku*)
+    targ_defvec=powerpc_elf32_vec
+    targ_selvecs="rs6000_xcoff_vec powerpc_elf32_le_vec pef_vec pef_xlib_vec powerpc_xcoff_vec powerpc_boot_vec"
+    targ_cflags=-D__HAIKU_TARGET__
+    ;;
   powerpc-*-kaos*)
     targ_defvec=powerpc_elf32_vec
     targ_selvecs="powerpc_elf32_le_vec powerpc_boot_vec"
@@ -1138,16 +1202,11 @@ case "${targ}" in
   powerpc-*-macos*)
     targ_defvec=powerpc_xcoff_vec
     ;;
-  powerpc-*-lynxos*)
-    targ_defvec=powerpc_elf32_vec
-    targ_selvecs="rs6000_xcoff_vec"
-    targ_cflags=-DSMALL_ARCHIVE
-    ;;
   powerpc-*-nto*)
     targ_defvec=powerpc_elf32_vec
     targ_selvecs="rs6000_xcoff_vec powerpc_elf32_le_vec powerpc_boot_vec"
     ;;
-  powerpc-*-vxworks* | powerpc-*-windiss*)
+  powerpc-*-vxworks*)
     targ_defvec=powerpc_elf32_vxworks_vec
     targ_selvecs="rs6000_xcoff_vec powerpc_elf32_vec powerpc_elf32_le_vec powerpc_boot_vec"
     targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
@@ -1162,24 +1221,30 @@ case "${targ}" in
     targ_selvecs="rs6000_xcoff_vec powerpc_elf32_vec powerpc_boot_vec"
     targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
     ;;
-  powerpcle-*-pe | powerpcle-*-winnt* | powerpcle-*-cygwin*)
-    targ_defvec=powerpc_pe_le_vec
-    targ_selvecs="powerpc_pei_le_vec powerpc_pei_vec powerpc_pe_le_vec powerpc_pe_vec"
-    ;;
 
   pru-*-*)
     targ_defvec=pru_elf32_vec
     ;;
 
 #ifdef BFD64
+  riscvbe-*-* | riscv32be*-*-*)
+    targ_defvec=riscv_elf32_be_vec
+    targ_selvecs="riscv_elf32_vec riscv_elf64_vec riscv_elf32_be_vec riscv_elf64_be_vec riscv64_pei_vec"
+    want64=true
+    ;;
   riscv-*-* | riscv32*-*-*)
     targ_defvec=riscv_elf32_vec
-    targ_selvecs="riscv_elf32_vec riscv_elf64_vec"
+    targ_selvecs="riscv_elf32_vec riscv_elf64_vec riscv_elf32_be_vec riscv_elf64_be_vec riscv64_pei_vec"
+    want64=true
+    ;;
+  riscv64be*-*-*)
+    targ_defvec=riscv_elf64_be_vec
+    targ_selvecs="riscv_elf32_vec riscv_elf64_vec riscv_elf32_be_vec riscv_elf64_be_vec riscv64_pei_vec"
     want64=true
     ;;
   riscv64*-*-*)
     targ_defvec=riscv_elf64_vec
-    targ_selvecs="riscv_elf32_vec riscv_elf64_vec"
+    targ_selvecs="riscv_elf32_vec riscv_elf64_vec riscv_elf32_be_vec riscv_elf64_be_vec riscv64_pei_vec"
     want64=true
     ;;
 #endif
@@ -1237,11 +1302,11 @@ case "${targ}" in
     targ_selvecs="sh_elf32_le_vec sh_elf32_linux_be_vec sh_elf32_linux_vec sh_elf32_fdpic_le_vec sh_elf32_fdpic_be_vec"
     ;;
 
-  sh*l*-*-netbsdelf*)
+  sh*l*-*-netbsd*)
     targ_defvec=sh_elf32_nbsd_le_vec
     targ_selvecs="sh_elf32_nbsd_vec sh_coff_vec sh_coff_le_vec"
     ;;
-  sh*-*-netbsdelf*)
+  sh*-*-netbsd*)
     targ_defvec=sh_elf32_nbsd_vec
     targ_selvecs="sh_elf32_nbsd_le_vec sh_coff_vec sh_coff_le_vec"
     ;;
@@ -1288,14 +1353,21 @@ case "${targ}" in
     ;;
 
   sparc-*-solaris2.[0-6] | sparc-*-solaris2.[0-6].*)
+    # PR 27666: Do not include sparc_elf32_vec here.
     targ_defvec=sparc_elf32_sol2_vec
     ;;
 #ifdef BFD64
   sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
+    # PR 27666: Do not include sparc_elf32_vec or sparc_elf64_vec here.
     targ_defvec=sparc_elf32_sol2_vec
     targ_selvecs="sparc_elf64_sol2_vec"
     want64=true
     ;;
+  sparc64-*-haiku*)
+    targ_defvec=sparc_elf64_vec
+    targ_selvecs="sparc_elf64_vec sparc_elf32_vec"
+    want64=true
+    ;;
   sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu)
     targ_defvec=sparc_elf64_fbsd_vec
     targ_selvecs="sparc_elf64_vec sparc_elf32_vec"
@@ -1333,11 +1405,6 @@ case "${targ}" in
     targ_selvecs="tic6x_elf32_linux_be_vec tic6x_elf32_le_vec tic6x_elf32_be_vec"
     ;;
 
-  tic80*-*-*)
-    targ_defvec=tic80_coff_vec
-    targ_underscore=yes
-    ;;
-
 #ifdef BFD64
   tilegx-*-*)
     targ_defvec=tilegx_elf64_le_vec
@@ -1363,17 +1430,17 @@ case "${targ}" in
     targ_underscore=yes
     ;;
 
-  vax-*-netbsdelf*)
-    targ_defvec=vax_elf32_vec
-    targ_selvecs="vax_aout_nbsd_vec vax_aout_1knbsd_vec"
-    ;;
-
-  vax-*-netbsdaout* | vax-*-netbsd*)
+  vax-*-netbsdaout*)
     targ_defvec=vax_aout_nbsd_vec
     targ_selvecs="vax_elf32_vec vax_aout_1knbsd_vec"
     targ_underscore=yes
     ;;
 
+  vax-*-netbsd*)
+    targ_defvec=vax_elf32_vec
+    targ_selvecs="vax_aout_nbsd_vec vax_aout_1knbsd_vec"
+    ;;
+
   vax-*-openbsd*)
     targ_defvec=vax_aout_nbsd_vec
     targ_underscore=yes
@@ -1405,20 +1472,36 @@ case "${targ}" in
     targ_defvec=xtensa_elf32_le_vec
     targ_selvecs=xtensa_elf32_be_vec
     ;;
- xc16x-*-elf)
-    targ_defvec=xc16x_elf32_vec
-    ;;
 
-  z80-*-*)
+  z80-*-coff)
     targ_defvec=z80_coff_vec
     targ_underscore=no
     ;;
 
+  z80-*-elf)
+    targ_defvec=z80_elf32_vec
+    targ_underscore=no
+    ;;
+
   z8k*-*-*)
     targ_defvec=z8k_coff_vec
     targ_underscore=yes
     ;;
 
+#ifdef BFD64
+  loongarch32-*)
+    targ_defvec=loongarch_elf32_vec
+    targ_selvecs="loongarch_elf32_vec"
+    want64=true
+    ;;
+
+  loongarch64-*)
+    targ_defvec=loongarch_elf64_vec
+    targ_selvecs="loongarch_elf32_vec loongarch_elf64_vec loongarch64_pei_vec"
+    want64=true
+    ;;
+#endif
+
 # END OF targmatch.h
   bpf-*-*)
     echo "*** Configuration $targ is not fully supported." >&2
@@ -1466,16 +1549,8 @@ case "${targ_defvec} ${targ_selvecs}" in
     ;;
 esac
 
-# If we support Intel L1OM target, then add support for bfd_l1om_arch.
-case "${targ_defvec} ${targ_selvecs}" in
-  *l1om_elf64*)
-    targ_archs="$targ_archs bfd_l1om_arch"
-    ;;
-esac
-
-# If we support Intel K1OM target, then add support for bfd_k1om_arch.
-case "${targ_defvec} ${targ_selvecs}" in
-  *k1om_elf64*)
-    targ_archs="$targ_archs bfd_k1om_arch"
+case "${targ}" in
+  mipsisa32r6* | mipsisa64r6* | mips*-img-*)
+    targ_cflags="$targ_cflags -DMIPS_DEFAULT_R6=1"
     ;;
 esac
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/config.in ./bfd/config.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/config.in	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/config.in	2024-02-01 01:47:13.000000000 +0000
@@ -7,6 +7,9 @@
 #endif
 #define __CONFIG_H__ 1
 
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
 /* Name of host specific core header file to include in elf.c. */
 #undef CORE_HEADER
 
@@ -14,12 +17,24 @@
    default. */
 #undef DEFAULT_LD_Z_SEPARATE_CODE
 
+/* Define if you want run-time sanity checks. */
+#undef ENABLE_CHECKING
+
 /* Define to 1 if translation of program messages to the user's native
    language is requested. */
 #undef ENABLE_NLS
 
-/* Define to 1 if you have the <alloca.h> header file. */
-#undef HAVE_ALLOCA_H
+/* Define to 1 if you have the Mac OS X function
+   CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#undef HAVE_DCGETTEXT
 
 /* Define to 1 if you have the declaration of `asprintf', and to 0 if you
    don't. */
@@ -32,9 +47,9 @@
 /* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */
 #undef HAVE_DECL_FFS
 
-/* Define to 1 if you have the declaration of `free', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FREE
+/* Define to 1 if you have the declaration of `fopen64', and to 0 if you
+   don't. */
+#undef HAVE_DECL_FOPEN64
 
 /* Define to 1 if you have the declaration of `fseeko', and to 0 if you don't.
    */
@@ -52,22 +67,6 @@
    don't. */
 #undef HAVE_DECL_FTELLO64
 
-/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
-   */
-#undef HAVE_DECL_GETENV
-
-/* Define to 1 if you have the declaration of `malloc', and to 0 if you don't.
-   */
-#undef HAVE_DECL_MALLOC
-
-/* Define to 1 if you have the declaration of `realloc', and to 0 if you
-   don't. */
-#undef HAVE_DECL_REALLOC
-
-/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SNPRINTF
-
 /* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't.
    */
 #undef HAVE_DECL_STPCPY
@@ -76,21 +75,13 @@
    don't. */
 #undef HAVE_DECL_STRNLEN
 
-/* Define to 1 if you have the declaration of `strstr', and to 0 if you don't.
-   */
-#undef HAVE_DECL_STRSTR
-
 /* Define to 1 if you have the declaration of `vasprintf', and to 0 if you
    don't. */
 #undef HAVE_DECL_VASPRINTF
 
-/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_VSNPRINTF
-
-/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
-   */
-#undef HAVE_DIRENT_H
+/* Define to 1 if you have the declaration of `___lc_codepage_func', and to 0
+   if you don't. */
+#undef HAVE_DECL____LC_CODEPAGE_FUNC
 
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
@@ -134,21 +125,21 @@
 /* Define to 1 if you have the `getrlimit' function. */
 #undef HAVE_GETRLIMIT
 
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
 /* Define to 1 if you have the `getuid' function. */
 #undef HAVE_GETUID
 
 /* Define if your compiler supports hidden visibility. */
 #undef HAVE_HIDDEN
 
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
-/* Define to 1 if the system has the type `long double'. */
-#undef HAVE_LONG_DOUBLE
-
-/* Define to 1 if the system has the type `long long'. */
-#undef HAVE_LONG_LONG
-
 /* Define if <sys/procfs.h> has lwpstatus_t. */
 #undef HAVE_LWPSTATUS_T
 
@@ -176,9 +167,6 @@
 /* Define to 1 if you have the `mprotect' function. */
 #undef HAVE_MPROTECT
 
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-#undef HAVE_NDIR_H
-
 /* Define if <sys/procfs.h> has prpsinfo32_t. */
 #undef HAVE_PRPSINFO32_T
 
@@ -224,12 +212,6 @@
 /* Define if <sys/procfs.h> has pxstatus_t. */
 #undef HAVE_PXSTATUS_T
 
-/* Define to 1 if you have the `setitimer' function. */
-#undef HAVE_SETITIMER
-
-/* Define to 1 if you have the <stddef.h> header file. */
-#undef HAVE_STDDEF_H
-
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
@@ -242,26 +224,15 @@
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
 
-/* Define to 1 if you have the `strtoull' function. */
-#undef HAVE_STRTOULL
-
 /* Define if struct core_dumpx has member c_impl */
 #undef HAVE_ST_C_IMPL
 
 /* Define to 1 if you have the `sysconf' function. */
 #undef HAVE_SYSCONF
 
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
-   */
-#undef HAVE_SYS_DIR_H
-
 /* Define to 1 if you have the <sys/file.h> header file. */
 #undef HAVE_SYS_FILE_H
 
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
-   */
-#undef HAVE_SYS_NDIR_H
-
 /* Define to 1 if you have the <sys/param.h> header file. */
 #undef HAVE_SYS_PARAM_H
 
@@ -274,30 +245,21 @@
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
-/* Define to 1 if you have the <wchar.h> header file. */
-#undef HAVE_WCHAR_H
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#undef HAVE_WCTYPE_H
-
 /* Define if <sys/procfs.h> has win32_pstatus_t. */
 #undef HAVE_WIN32_PSTATUS_T
 
 /* Define to 1 if you have the <windows.h> header file. */
 #undef HAVE_WINDOWS_H
 
+/* Define to 1 if zstd is enabled. */
+#undef HAVE_ZSTD
+
 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */
 #undef LT_OBJDIR
@@ -323,9 +285,6 @@
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
-/* The size of `char', as computed by sizeof. */
-#undef SIZEOF_CHAR
-
 /* The size of `int', as computed by sizeof. */
 #undef SIZEOF_INT
 
@@ -338,20 +297,14 @@
 /* The size of `off_t', as computed by sizeof. */
 #undef SIZEOF_OFF_T
 
-/* The size of `short', as computed by sizeof. */
-#undef SIZEOF_SHORT
-
 /* The size of `void *', as computed by sizeof. */
 #undef SIZEOF_VOID_P
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
-/* Define if you can safely include both <string.h> and <strings.h>. */
-#undef STRING_WITH_STRINGS
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
+/* If the compiler supports a TLS storage class, define it to that here */
+#undef TLS
 
 /* Name of host specific header file to include in trad-core.c. */
 #undef TRAD_HEADER
@@ -396,6 +349,18 @@
 /* Version number of package */
 #undef VERSION
 
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif
+
 /* Enable large inode numbers on Mac OS X 10.5.  */
 #ifndef _DARWIN_USE_64_BIT_INODE
 # define _DARWIN_USE_64_BIT_INODE 1
@@ -416,3 +381,6 @@
 
 /* Define to 1 if you need to in order for `stat' and other things to work. */
 #undef _POSIX_SOURCE
+
+/* Use structured /proc on Solaris. */
+#undef _STRUCTURED_PROC
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/configure ./bfd/configure
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/configure	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/configure	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for bfd 2.33.50.
+# Generated by GNU Autoconf 2.69 for bfd 2.42.50.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='bfd'
 PACKAGE_TARNAME='bfd'
-PACKAGE_VERSION='2.33.50'
-PACKAGE_STRING='bfd 2.33.50'
+PACKAGE_VERSION='2.42.50'
+PACKAGE_STRING='bfd 2.42.50'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -629,6 +629,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
+gt_needs=
 ac_header_list=
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
@@ -652,32 +653,36 @@ TDEFINES
 SHARED_LIBADD
 SHARED_LDFLAGS
 LIBM
+ZSTD_LIBS
+ZSTD_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
 zlibinc
 zlibdir
 EXEEXT_FOR_BUILD
 CC_FOR_BUILD
-BFD_HOSTPTR_T
-BFD_HOST_U_64_BIT
-BFD_HOST_64_BIT
-BFD_HOST_64_BIT_DEFINED
-BFD_HOST_64BIT_LONG_LONG
-BFD_HOST_64BIT_LONG
 HDEFINES
-MSGMERGE
-MSGFMT
-MKINSTALLDIRS
 CATOBJEXT
 GENCAT
 INSTOBJEXT
 DATADIRNAME
 CATALOGS
-POSUB
-GMSGFMT
-XGETTEXT
 INCINTL
 LIBINTL_DEP
+POSUB
+LTLIBINTL
 LIBINTL
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
+MSGMERGE
+XGETTEXT
+GMSGFMT
+MSGFMT
 USE_NLS
+MKINSTALLDIRS
 bfdincludedir
 bfdlibdir
 target_noncanonical
@@ -697,8 +702,11 @@ REPORT_BUGS_TEXI
 REPORT_BUGS_TO
 PKGVERSION
 DEBUGDIR
+ENABLE_BFD_64_BIT_FALSE
+ENABLE_BFD_64_BIT_TRUE
 PLUGINS_FALSE
 PLUGINS_TRUE
+LARGEFILE_CPPFLAGS
 OTOOL64
 OTOOL
 LIPO
@@ -716,12 +724,6 @@ LIBTOOL
 EGREP
 GREP
 CPP
-RANLIB
-AR
-AM_BACKSLASH
-AM_DEFAULT_VERBOSITY
-AM_DEFAULT_V
-AM_V
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
@@ -732,6 +734,19 @@ AMDEP_TRUE
 am__quote
 am__include
 DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+RANLIB
+AR
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
 am__untar
 am__tar
 AMTAR
@@ -755,13 +770,6 @@ am__isrc
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
 target_os
 target_vendor
 target_cpu
@@ -815,9 +823,9 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
-enable_dependency_tracking
 enable_silent_rules
 enable_shared
+enable_dependency_tracking
 enable_static
 with_pic
 enable_fast_install
@@ -825,6 +833,7 @@ with_gnu_ld
 enable_libtool_lock
 enable_plugins
 enable_largefile
+enable_checking
 enable_64_bit_bfd
 enable_targets
 enable_64_bit_archive
@@ -840,7 +849,13 @@ enable_build_warnings
 enable_maintainer_mode
 enable_install_libbfd
 enable_nls
+enable_rpath
+with_libiconv_prefix
+with_libiconv_type
+with_libintl_prefix
+with_libintl_type
 with_system_zlib
+with_zstd
 '
       ac_precious_vars='build_alias
 host_alias
@@ -850,7 +865,12 @@ CFLAGS
 LDFLAGS
 LIBS
 CPPFLAGS
-CPP'
+CPP
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+ZSTD_CFLAGS
+ZSTD_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1391,7 +1411,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures bfd 2.33.50 to adapt to many kinds of systems.
+\`configure' configures bfd 2.42.50 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1462,7 +1482,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of bfd 2.33.50:";;
+     short | recursive ) echo "Configuration of bfd 2.42.50:";;
    esac
   cat <<\_ACEOF
 
@@ -1470,19 +1490,20 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
+  --enable-shared[=PKGS]  build shared libraries [default=no]
   --enable-dependency-tracking
                           do not reject slow dependency extractors
   --disable-dependency-tracking
                           speeds up one-time build
-  --enable-silent-rules   less verbose build output (undo: "make V=1")
-  --disable-silent-rules  verbose build output (undo: "make V=0")
-  --enable-shared[=PKGS]  build shared libraries [default=no]
   --enable-static[=PKGS]  build static libraries [default=yes]
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-plugins        Enable support for plugins
   --disable-largefile     omit support for large files
+  --enable-checking       enable run-time checks
   --enable-64-bit-bfd     64-bit support (on hosts with narrower word sizes)
   --enable-targets        alternative target configurations
   --enable-64-bit-archive force 64-bit archives
@@ -1497,6 +1518,7 @@ Optional Features:
                           sometimes confusing) to the casual installer
   --enable-install-libbfd controls installation of libbfd and related headers
   --disable-nls           do not use Native Language Support
+  --disable-rpath         do not hardcode runtime library paths
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1511,7 +1533,16 @@ Optional Packages:
   --with-pkgversion=PKG   Use PKG in the version string in place of "GNU
                           Binutils"
   --with-bugurl=URL       Direct users to URL to report a bug
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+  --with-libiconv-type=TYPE     type of library to search for (auto/static/shared)
+  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
+  --without-libintl-prefix     don't search for libintl in includedir and libdir
+  --with-libintl-type=TYPE     type of library to search for (auto/static/shared)
   --with-system-zlib      use installed libz
+  --with-zstd             support zstd compressed debug sections
+                          (default=auto)
 
 Some influential environment variables:
   CC          C compiler command
@@ -1522,6 +1553,13 @@ Some influential environment variables:
   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CPP         C preprocessor
+  PKG_CONFIG  path to pkg-config utility
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
+  ZSTD_CFLAGS C compiler flags for ZSTD, overriding pkg-config
+  ZSTD_LIBS   linker flags for ZSTD, overriding pkg-config
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1589,7 +1627,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-bfd configure 2.33.50
+bfd configure 2.42.50
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1641,52 +1679,6 @@ fi
 
 } # ac_fn_c_try_compile
 
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
 # ac_fn_c_try_cpp LINENO
 # ----------------------
 # Try to preprocess conftest.$ac_ext, and return whether this succeeded.
@@ -1884,6 +1876,52 @@ eval ac_res=\$$3
 
 } # ac_fn_c_check_header_compile
 
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
 # ac_fn_c_check_func LINENO FUNC VAR
 # ----------------------------------
 # Tests whether FUNC exists, setting the cache variable VAR accordingly
@@ -1951,60 +1989,6 @@ eval ac_res=\$$3
 
 } # ac_fn_c_check_func
 
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof ($2))
-	 return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
-	    return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-
 # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
 # --------------------------------------------
 # Tries to find the compile-time value of EXPR in a program that includes
@@ -2237,7 +2221,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by bfd $as_me 2.33.50, which was
+It was created by bfd $as_me 2.42.50, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2517,6 +2501,7 @@ else
   >$cache_file
 fi
 
+gt_needs="$gt_needs "
 as_fn_append ac_header_list " stdlib.h"
 as_fn_append ac_header_list " unistd.h"
 as_fn_append ac_header_list " sys/param.h"
@@ -2732,914 +2717,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-# Expand $ac_aux_dir to an absolute path.
-am_aux_dir=`cd "$ac_aux_dir" && pwd`
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-	then :; else
-	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	fi
-	# We set ac_cv_exeext here because the later test for it is not
-	# safe: cross compilers may not add the suffix if given an `-o'
-	# argument, so we may need to know it at that point already.
-	# Even if this section looks crufty: it has the advantage of
-	# actually working.
-	break;;
-    * )
-	break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
-$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
-if ${am_cv_prog_cc_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-  # Make sure it works both with $CC and with simple cc.
-  # Following AC_PROG_CC_C_O, we do the test twice because some
-  # compilers refuse to overwrite an existing .o file with -o,
-  # though they will create one.
-  am_cv_prog_cc_c_o=yes
-  for am_i in 1 2; do
-    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
-   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
-   ac_status=$?
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   (exit $ac_status); } \
-         && test -f conftest2.$ac_objext; then
-      : OK
-    else
-      am_cv_prog_cc_c_o=no
-      break
-    fi
-  done
-  rm -f core conftest*
-  unset am_i
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
-$as_echo "$am_cv_prog_cc_c_o" >&6; }
-if test "$am_cv_prog_cc_c_o" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
-$as_echo_n "checking for library containing strerror... " >&6; }
-if ${ac_cv_search_strerror+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char strerror ();
-int
-main ()
-{
-return strerror ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' cposix; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_strerror=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_strerror+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_strerror+:} false; then :
-
-else
-  ac_cv_search_strerror=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
-$as_echo "$ac_cv_search_strerror" >&6; }
-ac_res=$ac_cv_search_strerror
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
 
 am__api_version='1.15'
 
@@ -3813,6 +2890,9 @@ test "$program_suffix" != NONE &&
 ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
 program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
 
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
 if test x"${MISSING+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\	*)
@@ -4063,69 +3143,6 @@ else
 fi
 rmdir .tst 2>/dev/null
 
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
-fi
-
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-  am__nodep='_no'
-fi
- if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
 # Check whether --enable-silent-rules was given.
 if test "${enable_silent_rules+set}" = set; then :
   enableval=$enable_silent_rules;
@@ -4187,7 +3204,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='bfd'
- VERSION='2.33.50'
+ VERSION='2.42.50'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4237,134 +3254,6 @@ am__tar='$${TAR-tar} chof - "$$tardir"'
 
 
 
-depcc="$CC"   am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
 
 # POSIX will say in a future version that running "rm -f" with no argument
 # is OK; and we want to be able to make that assumption in our Makefile
@@ -4408,6 +3297,45 @@ END
   fi
 fi
 
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
@@ -4954,6 +3882,256 @@ eval ac_try_echo="\"\$as_me:${as_lineno-
   test $ac_status = 0; }
 done
 
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
 if ${ac_cv_c_compiler_gnu+:} false; then :
@@ -5223,6 +4401,198 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS con
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -6065,48 +5435,55 @@ if ${lt_cv_path_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
-	  lt_cv_path_NM="$tmp_nm -B"
-	  break
-	  ;;
-	*)
-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-	  */dev/null*)
-	    lt_cv_path_NM="$tmp_nm -p"
-	    break
-	    ;;
-	  *)
-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-	    continue # so that we can try to find one that supports BSD flags
-	    ;;
-	  esac
-	  ;;
-	esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi
+   # Let the user override the nm to test.
+   lt_nm_to_check="$NM"
+ else
+   lt_nm_to_check="${ac_tool_prefix}nm"
+   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+     lt_nm_to_check="$lt_nm_to_check nm"
+   fi
+ fi
+ for lt_tmp_nm in "$lt_nm_to_check"; do
+   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+   for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+     IFS="$lt_save_ifs"
+     test -z "$ac_dir" && ac_dir=.
+     # Strip out any user-provided options from the nm to test twice,
+     # the first time to test to see if nm (rather than its options) has
+     # an explicit path, the second time to yield a file which can be
+     # nm'ed itself.
+     tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+     case "$tmp_nm_path" in
+     */*|*\\*) tmp_nm="$lt_tmp_nm";;
+     *) tmp_nm="$ac_dir/$lt_tmp_nm";;
+     esac
+     tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+     if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+       *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+	 break
+	 ;;
+       *)
+	 case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+	 *$tmp_nm*)
+	   lt_cv_path_NM="$tmp_nm -p"
+	   break
+	   ;;
+	 *)
+	   lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	   continue # so that we can try to find one that supports BSD flags
+	   ;;
+	 esac
+	 ;;
+       esac
+     fi
+   done
+   IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
 $as_echo "$lt_cv_path_NM" >&6; }
@@ -6727,7 +6104,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -6803,6 +6180,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -6823,6 +6205,19 @@ test -z "$deplibs_check_method" && depli
 
 
 
+plugin_option=
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+for plugin in $plugin_names; do
+  plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+  if test x$plugin_so = x$plugin; then
+    plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+  fi
+  if test x$plugin_so != x$plugin; then
+    plugin_option="--plugin $plugin_so"
+    break
+  fi
+done
+
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
@@ -6916,6 +6311,19 @@ else
 fi
 
 test -z "$AR" && AR=ar
+if test -n "$plugin_option"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    touch conftest.c
+    $AR $plugin_option rc conftest.a conftest.c
+    if test "$?" != 0; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+    else
+      AR="$AR $plugin_option"
+    fi
+    rm -f conftest.*
+  fi
+fi
 test -z "$AR_FLAGS" && AR_FLAGS=cru
 
 
@@ -7120,6 +6528,11 @@ else
 fi
 
 test -z "$RANLIB" && RANLIB=:
+if test -n "$plugin_option" && test "$RANLIB" != ":"; then
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB="$RANLIB $plugin_option"
+  fi
+fi
 
 
 
@@ -7234,7 +6647,7 @@ osf*)
   symcode='[BCDEGQRST]'
   ;;
 solaris*)
-  symcode='[BDRT]'
+  symcode='[BCDRT]'
   ;;
 sco3.2v5*)
   symcode='[DT]'
@@ -8233,23 +7646,25 @@ _LT_EOF
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
 $as_echo "$lt_cv_ld_force_load" >&6; }
-    case $host_os in
-    rhapsody* | darwin1.[012])
+    # Allow for Darwin 4-7 (macOS 10.0-10.3) although these are not expect to
+    # build without first building modern cctools / linker.
+    case $host_cpu-$host_os in
+    *-rhapsody* | *-darwin1.[012])
       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
+    *-darwin1.*)
       _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+    *-darwin*)
+      # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
+      # deployment target is forced to an earlier version.
+      case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
+	UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
+	  ;;
 	10.[012][,.]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+	  ;;
+	*)
+	  ;;
+     esac
     ;;
   esac
     if test "$lt_cv_apple_cc_single_mod" = "yes"; then
@@ -9508,7 +8923,7 @@ _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -10017,7 +9432,7 @@ if test -z "$aix_libpath"; then aix_libp
       if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
-	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
 	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
@@ -10029,7 +9444,7 @@ if test -z "$aix_libpath"; then aix_libp
       else
 	case $host_cpu in
 	hppa*64*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
 	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
@@ -10913,16 +10328,6 @@ freebsd* | dragonfly*)
   esac
   ;;
 
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
 haiku*)
   version_type=linux
   need_lib_prefix=no
@@ -10932,7 +10337,7 @@ haiku*)
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LIBRARY_PATH
   shlibpath_overrides_runpath=yes
-  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib'
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
 
@@ -11039,7 +10444,12 @@ linux*oldld* | linux*aout* | linux*coff*
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+
+# uclinux* changes (here and below) have been submitted to the libtool
+# project, but have not yet been accepted: they are GCC-local changes
+# for the time being.  (See
+# https://lists.gnu.org/archive/html/libtool-patches/2018-05/msg00000.html)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu* | uclinuxfdpiceabi)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -11287,6 +10697,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -11728,7 +11157,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11731 "configure"
+#line 11160 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11834,7 +11263,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11837 "configure"
+#line 11266 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12186,15 +11615,56 @@ fi
 
 
 case "${host}" in
-  sparc-*-solaris*|i[3-7]86-*-solaris*)
-    # On native 32bit sparc and ia32 solaris, large-file and procfs support
-    # are mutually exclusive; and without procfs support, the bfd/ elf module
-    # cannot provide certain routines such as elfcore_write_prpsinfo
-    # or elfcore_write_prstatus.  So unless the user explicitly requested
-    # large-file support through the --enable-largefile switch, disable
-    # large-file support in favor of procfs support.
-    test "${target}" = "${host}" -a "x$plugins" = xno \
-      && : ${enable_largefile="no"}
+  sparc-*-solaris*|i?86-*-solaris*)
+    # On native 32-bit Solaris/SPARC and x86, large-file and procfs support
+    # were mutually exclusive until Solaris 11.3.  Without procfs support,
+    # the bfd/ elf module cannot provide certain routines such as
+    # elfcore_write_prpsinfo or elfcore_write_prstatus.  So unless the user
+    # explicitly requested large-file support through the
+    # --enable-largefile switch, disable large-file support in favor of
+    # procfs support.
+    #
+    # Check if <sys/procfs.h> is incompatible with large-file support.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#define _STRUCTURED_PROC 1
+#include <sys/procfs.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  acx_cv_procfs_lfs=yes
+else
+  acx_cv_procfs_lfs=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    #
+    # Forcefully disable large-file support only if necessary, gdb is in
+    # tree and enabled.
+    if test "${target}" = "${host}" -a "$acx_cv_procfs_lfs" = no \
+         -a -d $srcdir/../gdb -a "$enable_gdb" != no; then
+      : ${enable_largefile="no"}
+      if test "$plugins" = yes; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+plugin support disabled; require large-file support which is incompatible with GDB." >&5
+$as_echo "$as_me: WARNING:
+plugin support disabled; require large-file support which is incompatible with GDB." >&2;}
+	plugins=no
+      fi
+    fi
+    #
+    # Explicitly undef _FILE_OFFSET_BITS if enable_largefile=no for the
+    # benefit of g++ 9+ which predefines it on Solaris.
+    if test "$enable_largefile" = no; then
+      LARGEFILE_CPPFLAGS="-U_FILE_OFFSET_BITS"
+
+    fi
     ;;
 esac
 
@@ -12400,6 +11870,29 @@ fi
 
 
 
+case "${target}" in
+    hppa*64*-*-*) ;;
+    *-*-*aout*| i[3-7]86-*-msdos* | ns32k-*-* | pdp11-*-*)
+	if test "$plugins" = "yes"; then
+	    if test "${enable_plugins+set}" = set; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Enabling plugins for AOUT is experimental" >&5
+$as_echo "$as_me: WARNING: Enabling plugins for AOUT is experimental" >&2;}
+	    else
+		plugins=no
+	    fi
+	fi ;;
+    hppa*-*-hpux* | *-*-*vms* | \
+    powerpc*-*-aix* | powerpc-*-beos* | powerpc-*-macos* | rs6000-*-*)
+	if test "$plugins" = "yes"; then
+	    if test "${enable_plugins+set}" = set; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Enabling plugins may result in ar creating non-standard archives for ${target}" >&5
+$as_echo "$as_me: WARNING: Enabling plugins may result in ar creating non-standard archives for ${target}" >&2;}
+	    else
+		plugins=no
+	    fi
+	fi ;;
+esac
+
  if test "$plugins" = "yes"; then
   PLUGINS_TRUE=
   PLUGINS_FALSE='#'
@@ -12409,14 +11902,89 @@ else
 fi
 
 
+ac_checking=
+. ${srcdir}/development.sh
+test "$development" = true && ac_checking=yes
+# Check whether --enable-checking was given.
+if test "${enable_checking+set}" = set; then :
+  enableval=$enable_checking; case "${enableval}" in
+  no|none)  ac_checking= ;;
+  *)	    ac_checking=yes ;;
+esac
+fi
+if test x$ac_checking != x ; then
+
+$as_echo "#define ENABLE_CHECKING 1" >>confdefs.h
+
+fi
+
 # Check whether --enable-64-bit-bfd was given.
 if test "${enable_64_bit_bfd+set}" = set; then :
-  enableval=$enable_64_bit_bfd; case "${enableval}" in
-  yes)  want64=true  ;;
-  no)   want64=false ;;
-  *)    as_fn_error $? "bad value ${enableval} for 64-bit-bfd option" "$LINENO" 5 ;;
+  enableval=$enable_64_bit_bfd; case $enableval in #(
+  yes|no) :
+     ;; #(
+  *) :
+    as_fn_error $? "bad value ${enableval} for 64-bit-bfd option" "$LINENO" 5 ;; #(
+  *) :
+     ;;
 esac
 else
+  enable_64_bit_bfd=no
+fi
+
+
+if test "x$enable_64_bit_bfd" = "xno"; then :
+    # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if ${ac_cv_sizeof_void_p+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_void_p" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+  if test "x$ac_cv_sizeof_void_p" = "x8"; then :
+  enable_64_bit_bfd=yes
+fi
+
+fi
+
+ if test "x$enable_64_bit_bfd" = "xyes"; then
+  ENABLE_BFD_64_BIT_TRUE=
+  ENABLE_BFD_64_BIT_FALSE='#'
+else
+  ENABLE_BFD_64_BIT_TRUE='#'
+  ENABLE_BFD_64_BIT_FALSE=
+fi
+
+
+if test $enable_64_bit_bfd = yes ; then
+  want64=true
+else
   want64=false
 fi
 
@@ -12544,7 +12112,7 @@ if test "${with_bugurl+set}" = set; then
 	   ;;
      esac
 else
-  BUGURL="http://www.sourceware.org/bugzilla/"
+  BUGURL="https://sourceware.org/bugzilla/"
 
 fi
 
@@ -12596,10 +12164,19 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&
   $EGREP "(^[0-4]$|^__GNUC__$)" >/dev/null 2>&1; then :
 
 else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+__clang__
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "^__clang__$" >/dev/null 2>&1; then :
   GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wstack-usage=262144"
 fi
 rm -f conftest*
 
+fi
+rm -f conftest*
+
 
 # Set WARN_WRITE_STRINGS if the compiler supports -Wwrite-strings.
 WARN_WRITE_STRINGS=""
@@ -12641,10 +12218,19 @@ if (eval "$ac_cpp_for_build conftest.$ac
   $EGREP "(^[0-4]$|^__GNUC__$)" >/dev/null 2>&1; then :
 
 else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+__clang__
+_ACEOF
+if (eval "$ac_cpp_for_build conftest.$ac_ext") 2>&5 |
+  $EGREP "^__clang__$" >/dev/null 2>&1; then :
   GCC_WARN_CFLAGS_FOR_BUILD="$GCC_WARN_CFLAGS_FOR_BUILD -Wstack-usage=262144"
 fi
 rm -f conftest*
 
+fi
+rm -f conftest*
+
 
 # Check whether --enable-werror was given.
 if test "${enable_werror+set}" = set; then :
@@ -12814,83 +12400,238 @@ fi
 
 
 
-host64=false
-target64=false
-bfd_default_target_size=32
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+	       not a universal capable compiler
+	     #endif
+	     typedef int dummy;
 
-# host stuff:
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
 
-ALL_LINGUAS="da es fi fr hr id ja ro ru rw sr sv tr uk vi zh_CN pt"
-# If we haven't got the data from the intl directory,
-# assume NLS is disabled.
-USE_NLS=no
-LIBINTL=
-LIBINTL_DEP=
-INCINTL=
-XGETTEXT=
-GMSGFMT=
-POSUB=
+	# Check for potential -arch flags.  It is not universal unless
+	# there are at least two -arch flags with different values.
+	ac_arch=
+	ac_prev=
+	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+	 if test -n "$ac_prev"; then
+	   case $ac_word in
+	     i?86 | x86_64 | ppc | ppc64)
+	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+		 ac_arch=$ac_word
+	       else
+		 ac_cv_c_bigendian=universal
+		 break
+	       fi
+	       ;;
+	   esac
+	   ac_prev=
+	 elif test "x$ac_word" = "x-arch"; then
+	   ac_prev=arch
+	 fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+	     #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+		     && LITTLE_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+		#include <sys/param.h>
 
-if test -f  ../intl/config.intl; then
-  .  ../intl/config.intl
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
-$as_echo_n "checking whether NLS is requested... " >&6; }
-if test x"$USE_NLS" != xyes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+		short int ascii_ii[] =
+		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+		int use_ascii (int i) {
+		  return ascii_mm[i] + ascii_ii[i];
+		}
+		short int ebcdic_ii[] =
+		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+		short int ebcdic_mm[] =
+		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+		int use_ebcdic (int i) {
+		  return ebcdic_mm[i] + ebcdic_ii[i];
+		}
+		extern int foo;
 
-$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+	      ac_cv_c_bigendian=yes
+	    fi
+	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+	      if test "$ac_cv_c_bigendian" = unknown; then
+		ac_cv_c_bigendian=no
+	      else
+		# finding both strings is unlikely to happen, but who knows?
+		ac_cv_c_bigendian=unknown
+	      fi
+	    fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
 
+	     /* Are we little or big endian?  From Harbison&Steele.  */
+	     union
+	     {
+	       long int l;
+	       char c[sizeof (long int)];
+	     } u;
+	     u.l = 1;
+	     return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5
-$as_echo_n "checking for catalogs to be installed... " >&6; }
-  # Look for .po and .gmo files in the source directory.
-  CATALOGS=
-  XLINGUAS=
-  for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
-    # If there aren't any .gmo files the shell will give us the
-    # literal string "../path/to/srcdir/po/*.gmo" which has to be
-    # weeded out.
-    case "$cat" in *\**)
-      continue;;
-    esac
-    # The quadruple backslash is collapsed to a double backslash
-    # by the backticks, then collapsed again by the double quotes,
-    # leaving us with one backslash in the sed expression (right
-    # before the dot that mustn't act as a wildcard).
-    cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
-    lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
-    # The user is allowed to set LINGUAS to a list of languages to
-    # install catalogs for.  If it's empty that means "all of them."
-    if test "x$LINGUAS" = x; then
-      CATALOGS="$CATALOGS $cat"
-      XLINGUAS="$XLINGUAS $lang"
-    else
-      case "$LINGUAS" in *$lang*)
-        CATALOGS="$CATALOGS $cat"
-        XLINGUAS="$XLINGUAS $lang"
-        ;;
-      esac
     fi
-  done
-  LINGUAS="$XLINGUAS"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5
-$as_echo "$LINGUAS" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
 
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
 
-    DATADIRNAME=share
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
 
-  INSTOBJEXT=.mo
 
-  GENCAT=gencat
+host64=false
+target64=false
+bfd_default_target_size=32
 
-  CATOBJEXT=.gmo
+# host stuff:
 
-fi
+ALL_LINGUAS="da es fi fr hr id ja ro ru rw sr sv tr uk vi zh_CN pt"
 
         MKINSTALLDIRS=
   if test -n "$ac_aux_dir"; then
@@ -13200,463 +12941,1998 @@ fi
 
 
 
-# Permit host specific settings.
-. ${srcdir}/configure.host
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
 
 
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
 
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${acl_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$acl_cv_path_LD" -v 2>&1 < /dev/null | $EGREP '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
 
-BFD_HOST_64BIT_LONG=0
-BFD_HOST_64BIT_LONG_LONG=0
-BFD_HOST_64_BIT_DEFINED=0
-BFD_HOST_64_BIT=
-BFD_HOST_U_64_BIT=
-BFD_HOSTPTR_T="unsigned long"
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${acl_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | $EGREP '(GNU|with BFD)' 1>&5; then
+  acl_cv_prog_gnu_ld=yes
+else
+  acl_cv_prog_gnu_ld=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5
-$as_echo_n "checking for long double... " >&6; }
-if ${ac_cv_type_long_double+:} false; then :
+
+                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if ${acl_cv_rpath+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test "$GCC" = yes; then
-       ac_cv_type_long_double=yes
-     else
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then :
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then :
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
+
+fi
+
+
+# Check whether --with-libiconv-type was given.
+if test "${with_libiconv_type+set}" = set; then :
+  withval=$with_libiconv_type;  with_libiconv_type=$withval
+else
+   with_libiconv_type=auto
+fi
+
+  lib_type=`eval echo \$with_libiconv_type`
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            elif test x$lib_type != xshared; then
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  elif test x$lib_type != xshared; then
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux*) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+              LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+            else
+              LIBICONV="${LIBICONV}${LIBICONV:+ }-l:lib$name.$libext"
+              LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l:lib$name.$libext"
+            fi
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+if test -f ../gettext/uninstalled-config.sh; then
+  relative_builddir='$(top_builddir)/../gettext'
+  .  ../gettext/uninstalled-config.sh
+else
+  # The sister gettext directory doesn't exist and won't collect information on
+  # using gettext for us.  Call a bundled AM_GNU_GETTEXT.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
+if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-/* The Stardent Vistra knows sizeof (long double), but does
-		 not support it.  */
-	      long double foo = 0.0L;
+#include <CoreFoundation/CFPreferences.h>
 int
 main ()
 {
-static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
-	      sizeof (double) <= sizeof (long double))];
-test_array [0] = 0;
-return test_array [0];
+CFPreferencesCopyAppValue(NULL, NULL)
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+  gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
 
+$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+
+  fi
+                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
+$as_echo_n "checking for CFLocaleCopyPreferredLanguages... " >&6; }
+if ${gt_cv_func_CFLocaleCopyPreferredLanguages+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyPreferredLanguages();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_type_long_double=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  gt_cv_func_CFLocaleCopyPreferredLanguages=yes
 else
-  ac_cv_type_long_double=no
+  gt_cv_func_CFLocaleCopyPreferredLanguages=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-     fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5
-$as_echo "$ac_cv_type_long_double" >&6; }
-  if test $ac_cv_type_long_double = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
+  if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
 
-$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
+$as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
 
   fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+     || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+                    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices"
+  fi
 
-ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default"
-if test "x$ac_cv_type_long_long" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LONG_LONG 1
-_ACEOF
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
+
+
+
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+    case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+    if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
+if eval \${$gt_func_gnugettext_libc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main ()
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$gt_func_gnugettext_libc=yes"
 else
-  if test "$ac_cv_type_long_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long_long=0
-   fi
+  eval "$gt_func_gnugettext_libc=no"
 fi
-
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
+eval ac_res=\$$gt_func_gnugettext_libc
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if ${am_cv_func_iconv+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+           iconv(cd,NULL,NULL,NULL,NULL);
+           iconv_close(cd);
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+#include <stdlib.h>
+#include <iconv.h>
 
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if ${am_cv_func_iconv_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p"        "$ac_includes_default"; then :
 
+                  am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      am_cv_func_iconv_works=no
+      for ac_iconv_const in '' 'const'; do
+        if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+             aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+             *)            am_cv_func_iconv_works="guessing yes" ;;
+           esac
 else
-  if test "$ac_cv_type_void_p" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (void *)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_void_p=0
-   fi
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+
+int
+main ()
+{
+int result = 0;
+  /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from
+     successful returns.  This is even documented in
+     <https://www.ibm.com/support/knowledgecenter/ssw_aix_72/i_bostechref/iconv.html> */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 1;
+        iconv_close (cd_utf8_to_88591);
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\263";
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 2;
+        iconv_close (cd_ascii_to_88591);
+      }
+  }
+  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304";
+        static char buf[2] = { (char)0xDE, (char)0xAD };
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = 1;
+        char *outptr = buf;
+        size_t outbytesleft = 1;
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+          result |= 4;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          result |= 8;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  {
+    /* Try standardized names.  */
+    iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
+    /* Try IRIX, OSF/1 names.  */
+    iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
+    /* Try AIX names.  */
+    iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
+    /* Try HP-UX names.  */
+    iconv_t cd4 = iconv_open ("utf8", "eucJP");
+    if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
+        && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
+      result |= 16;
+    if (cd1 != (iconv_t)(-1))
+      iconv_close (cd1);
+    if (cd2 != (iconv_t)(-1))
+      iconv_close (cd2);
+    if (cd3 != (iconv_t)(-1))
+      iconv_close (cd3);
+    if (cd4 != (iconv_t)(-1))
+      iconv_close (cd4);
+  }
+  return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  am_cv_func_iconv_works=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
+        test "$am_cv_func_iconv_works" = no || break
+      done
+      LIBS="$am_save_LIBS"
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
 
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
 
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long=0
-   fi
-fi
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then :
+  withval=$with_libintl_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
 
 
+# Check whether --with-libintl-type was given.
+if test "${with_libintl_type+set}" = set; then :
+  withval=$with_libintl_type;  with_libintl_type=$withval
+else
+   with_libintl_type=auto
+fi
+
+  lib_type=`eval echo \$with_libintl_type`
+
+      LIBINTL=
+  LTLIBINTL=
+  INCINTL=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='intl '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            elif test x$lib_type != xshared; then
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBINTL; do
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  elif test x$lib_type != xshared; then
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+              else
+                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux*) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+                    LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+              LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+            else
+              LIBINTL="${LIBINTL}${LIBINTL:+ }-l:lib$name.$libext"
+              LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l:lib$name.$libext"
+            fi
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+    done
+  fi
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
+if eval \${$gt_func_gnugettext_libintl+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
 
+int
+main ()
+{
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
 
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$gt_func_gnugettext_libintl=yes"
 else
-  if test "$ac_cv_type_int" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (int)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_int=0
-   fi
+  eval "$gt_func_gnugettext_libintl=no"
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+                        if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
 
+int
+main ()
+{
 
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  LIBINTL="$LIBINTL $LIBICONV"
+                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                 eval "$gt_func_gnugettext_libintl=yes"
 
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"
+fi
+eval ac_res=\$$gt_func_gnugettext_libintl
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+        fi
+
+                                        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+                    LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
 
 
-if test "x${ac_cv_sizeof_void_p}" = "x8"; then
-  host64=true
-fi
 
-if test "x${ac_cv_sizeof_long}" = "x8"; then
-  BFD_HOST_64BIT_LONG=1
-  test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long"
-  test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long"
-elif test "x${ac_cv_sizeof_long_long}" = "x8"; then
-  BFD_HOST_64BIT_LONG_LONG=1
-  test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long"
-  test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long"
-  if test "x${ac_cv_sizeof_void_p}" = "x8"; then
-    BFD_HOSTPTR_T="unsigned long long"
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+                LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+
+    else
+      USE_NLS=no
+    fi
   fi
-fi
 
-if test -n "${HOST_64BIT_TYPE}" -a -n "${HOST_U_64BIT_TYPE}"; then
-  BFD_HOST_64_BIT_DEFINED=1
-  BFD_HOST_64_BIT="${HOST_64BIT_TYPE}"
-  BFD_HOST_U_64_BIT="${HOST_U_64BIT_TYPE}"
-fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+  if test "$USE_NLS" = "yes"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
+  fi
 
+  if test "$USE_NLS" = "yes"; then
 
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
+
+  for element in $INCINTL; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
 
+      fi
 
 
+$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
 
 
-# Put a plausible default for CC_FOR_BUILD in Makefile.
-if test -z "$CC_FOR_BUILD"; then
-  if test "x$cross_compiling" = "xno"; then
-    CC_FOR_BUILD='$(CC)'
-  else
-    CC_FOR_BUILD=gcc
+$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
+
+    fi
+
+        POSUB=po
   fi
-fi
 
-# Also set EXEEXT_FOR_BUILD.
-if test "x$cross_compiling" = "xno"; then
-  EXEEXT_FOR_BUILD='$(EXEEXT)'
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build system executable suffix" >&5
-$as_echo_n "checking for build system executable suffix... " >&6; }
-if ${bfd_cv_build_exeext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  rm -f conftest*
-     echo 'int main () { return 0; }' > conftest.c
-     bfd_cv_build_exeext=
-     ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5
-     for file in conftest.*; do
-       case $file in
-       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
-       *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;;
-       esac
-     done
-     rm -f conftest*
-     test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_build_exeext" >&5
-$as_echo "$bfd_cv_build_exeext" >&6; }
-  EXEEXT_FOR_BUILD=""
-  test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext}
-fi
 
 
-for ac_header in alloca.h stddef.h string.h strings.h stdlib.h time.h unistd.h wchar.h wctype.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+    INTLLIBS="$LIBINTL"
+
+
 
-fi
 
-done
 
-for ac_header in fcntl.h sys/file.h sys/time.h sys/stat.h sys/resource.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
 
 fi
 
-done
 
 
 
-inttype_headers=`echo inttypes.h sys/inttypes.h  | sed -e 's/,/ /g'`
 
-acx_cv_header_stdint=stddef.h
-acx_cv_header_stdint_kind="(already complete)"
-for i in stdint.h $inttype_headers; do
-  unset ac_cv_type_uintptr_t
-  unset ac_cv_type_uintmax_t
-  unset ac_cv_type_int_least32_t
-  unset ac_cv_type_int_fast32_t
-  unset ac_cv_type_uint64_t
-  $as_echo_n "looking for a compliant stdint.h in $i, " >&6
-  ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_uintmax_t" = xyes; then :
-  acx_cv_header_stdint=$i
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+if test x"$USE_NLS" != xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 else
-  continue
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5
+$as_echo_n "checking for catalogs to be installed... " >&6; }
+  # Look for .po and .gmo files in the source directory.
+  CATALOGS=
+  XLINGUAS=
+  for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+    # If there aren't any .gmo files the shell will give us the
+    # literal string "../path/to/srcdir/po/*.gmo" which has to be
+    # weeded out.
+    case "$cat" in *\**)
+      continue;;
+    esac
+    # The quadruple backslash is collapsed to a double backslash
+    # by the backticks, then collapsed again by the double quotes,
+    # leaving us with one backslash in the sed expression (right
+    # before the dot that mustn't act as a wildcard).
+    cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+    lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+    # The user is allowed to set LINGUAS to a list of languages to
+    # install catalogs for.  If it's empty that means "all of them."
+    if test "x$LINGUAS" = x; then
+      CATALOGS="$CATALOGS $cat"
+      XLINGUAS="$XLINGUAS $lang"
+    else
+      case "$LINGUAS" in *$lang*)
+        CATALOGS="$CATALOGS $cat"
+        XLINGUAS="$XLINGUAS $lang"
+        ;;
+      esac
+    fi
+  done
+  LINGUAS="$XLINGUAS"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5
+$as_echo "$LINGUAS" >&6; }
+
+
+    DATADIRNAME=share
+
+  INSTOBJEXT=.mo
+
+  GENCAT=gencat
+
+  CATOBJEXT=.gmo
+
 fi
 
-  ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_uintptr_t" = xyes; then :
 
-else
-  acx_cv_header_stdint_kind="(mostly complete)"
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
 fi
 
-  ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_int_least32_t" = xyes; then :
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
 
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGFMT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$MSGFMT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+    ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
 else
-  acx_cv_header_stdint_kind="(mostly complete)"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-  ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_int_fast32_t" = xyes; then :
+  # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GMSGFMT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
 else
-  acx_cv_header_stdint_kind="(mostly complete)"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-  ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_uint64_t" = xyes; then :
 
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
 else
-  acx_cv_header_stdint_kind="(lacks uint64_t)"
+  ac_executable_p="test -f"
 fi
+rm -f conf$$.file
 
-  break
-done
-if test "$acx_cv_header_stdint" = stddef.h; then
-  acx_cv_header_stdint_kind="(lacks uintmax_t)"
-  for i in stdint.h $inttype_headers; do
-    unset ac_cv_type_uintptr_t
-    unset ac_cv_type_uint32_t
-    unset ac_cv_type_uint64_t
-    $as_echo_n "looking for an incomplete stdint.h in $i, " >&6
-    ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_uint32_t" = xyes; then :
-  acx_cv_header_stdint=$i
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_XGETTEXT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$XGETTEXT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+    ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
 else
-  continue
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-    ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_uint64_t" = xyes; then :
+    rm -f messages.po
 
-fi
 
-    ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_uintptr_t" = xyes; then :
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
 
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
 fi
+rm -f conf$$.file
 
-    break
-  done
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGMERGE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$MSGMERGE" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+            ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+    ;;
+esac
 fi
-if test "$acx_cv_header_stdint" = stddef.h; then
-  acx_cv_header_stdint_kind="(u_intXX_t style)"
-  for i in sys/types.h $inttype_headers; do
-    unset ac_cv_type_u_int32_t
-    unset ac_cv_type_u_int64_t
-    $as_echo_n "looking for u_intXX_t types in $i, " >&6
-    ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_u_int32_t" = xyes; then :
-  acx_cv_header_stdint=$i
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
 else
-  continue
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-    ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include <sys/types.h>
-#include <$i>
-"
-if test "x$ac_cv_type_u_int64_t" = xyes; then :
 
-fi
+      if test "$GMSGFMT" != ":"; then
+            if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+$as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; }
+      GMSGFMT=":"
+    fi
+  fi
 
-    break
-  done
+      if test "$XGETTEXT" != ":"; then
+            if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+       (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5
+$as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; }
+      XGETTEXT=":"
+    fi
+        rm -f messages.po
+  fi
+
+  ac_config_commands="$ac_config_commands default-2"
+
+
+
+# Permit host specific settings.
+. ${srcdir}/configure.host
+
+
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if ${ac_cv_sizeof_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi
 fi
-if test "$acx_cv_header_stdint" = stddef.h; then
-  acx_cv_header_stdint_kind="(using manual detection)"
+
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
 
-test -z "$ac_cv_type_uintptr_t" && ac_cv_type_uintptr_t=no
-test -z "$ac_cv_type_uint64_t" && ac_cv_type_uint64_t=no
-test -z "$ac_cv_type_u_int64_t" && ac_cv_type_u_int64_t=no
-test -z "$ac_cv_type_int_least32_t" && ac_cv_type_int_least32_t=no
-test -z "$ac_cv_type_int_fast32_t" && ac_cv_type_int_fast32_t=no
-
-# ----------------- Summarize what we found so far
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what to include in bfd_stdint.h" >&5
-$as_echo_n "checking what to include in bfd_stdint.h... " >&6; }
-
-case `$as_basename -- bfd_stdint.h ||
-$as_expr X/bfd_stdint.h : '.*/\([^/][^/]*\)/*$' \| \
-	 Xbfd_stdint.h : 'X\(//\)$' \| \
-	 Xbfd_stdint.h : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/bfd_stdint.h |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'` in
-  stdint.h) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: are you sure you want it there?" >&5
-$as_echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;;
-  inttypes.h) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: are you sure you want it there?" >&5
-$as_echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;;
-  *) ;;
-esac
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_header_stdint $acx_cv_header_stdint_kind" >&5
-$as_echo "$acx_cv_header_stdint $acx_cv_header_stdint_kind" >&6; }
 
-# ----------------- done included file, check C basic types --------
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
 
-# Lacking an uintptr_t?  Test size of void *
-case "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in
-  stddef.h:* | *:no) # The cast to long int works around a bug in the HP C Compiler
+# The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
@@ -13688,12 +14964,8 @@ cat >>confdefs.h <<_ACEOF
 #define SIZEOF_VOID_P $ac_cv_sizeof_void_p
 _ACEOF
 
- ;;
-esac
 
-# Lacking an uint64_t?  Test size of long
-case "$acx_cv_header_stdint:$ac_cv_type_uint64_t:$ac_cv_type_u_int64_t" in
-  stddef.h:*:* | *:no:no) # The cast to long int works around a bug in the HP C Compiler
+# The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
@@ -13725,12 +14997,8 @@ cat >>confdefs.h <<_ACEOF
 #define SIZEOF_LONG $ac_cv_sizeof_long
 _ACEOF
 
- ;;
-esac
 
-if test $acx_cv_header_stdint = stddef.h; then
-  # Lacking a good header?  Test size of everything and deduce all types.
-  # The cast to long int works around a bug in the HP C Compiler
+# The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
@@ -13763,374 +15031,66 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-  # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_short" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (short)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_short=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
-
-
-  # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
-$as_echo_n "checking size of char... " >&6; }
-if ${ac_cv_sizeof_char+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_char" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (char)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_char=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
-$as_echo "$ac_cv_sizeof_char" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_CHAR $ac_cv_sizeof_char
-_ACEOF
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int8_t" >&5
-$as_echo_n "checking for type equivalent to int8_t... " >&6; }
-  case "$ac_cv_sizeof_char" in
-    1) acx_cv_type_int8_t=char ;;
-    *) as_fn_error $? "no 8-bit type, please report a bug" "$LINENO" 5
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int8_t" >&5
-$as_echo "$acx_cv_type_int8_t" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int16_t" >&5
-$as_echo_n "checking for type equivalent to int16_t... " >&6; }
-  case "$ac_cv_sizeof_int:$ac_cv_sizeof_short" in
-    2:*) acx_cv_type_int16_t=int ;;
-    *:2) acx_cv_type_int16_t=short ;;
-    *) as_fn_error $? "no 16-bit type, please report a bug" "$LINENO" 5
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int16_t" >&5
-$as_echo "$acx_cv_type_int16_t" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int32_t" >&5
-$as_echo_n "checking for type equivalent to int32_t... " >&6; }
-  case "$ac_cv_sizeof_int:$ac_cv_sizeof_long" in
-    4:*) acx_cv_type_int32_t=int ;;
-    *:4) acx_cv_type_int32_t=long ;;
-    *) as_fn_error $? "no 32-bit type, please report a bug" "$LINENO" 5
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int32_t" >&5
-$as_echo "$acx_cv_type_int32_t" >&6; }
-fi
-
-# These tests are here to make the output prettier
-
-if test "$ac_cv_type_uint64_t" != yes && test "$ac_cv_type_u_int64_t" != yes; then
-  case "$ac_cv_sizeof_long" in
-    8) acx_cv_type_int64_t=long ;;
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int64_t" >&5
-$as_echo_n "checking for type equivalent to int64_t... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${acx_cv_type_int64_t-'using preprocessor symbols'}" >&5
-$as_echo "${acx_cv_type_int64_t-'using preprocessor symbols'}" >&6; }
-fi
-
-# Now we can use the above types
-
-if test "$ac_cv_type_uintptr_t" != yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to intptr_t" >&5
-$as_echo_n "checking for type equivalent to intptr_t... " >&6; }
-  case $ac_cv_sizeof_void_p in
-    2) acx_cv_type_intptr_t=int16_t ;;
-    4) acx_cv_type_intptr_t=int32_t ;;
-    8) acx_cv_type_intptr_t=int64_t ;;
-    *) as_fn_error $? "no equivalent for intptr_t, please report a bug" "$LINENO" 5
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_intptr_t" >&5
-$as_echo "$acx_cv_type_intptr_t" >&6; }
-fi
-
-# ----------------- done all checks, emit header -------------
-ac_config_commands="$ac_config_commands bfd_stdint.h"
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
-$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if ${ac_cv_header_time+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_time=yes
-else
-  ac_cv_header_time=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
-$as_echo "$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
-
-$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
-
-fi
-
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
-  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval \${$as_ac_Header+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <$ac_hdr>
-
-int
-main ()
-{
-if ((DIR *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_ac_Header=yes"
-else
-  eval "$as_ac_Header=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_ac_Header
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
-_ACEOF
-
-ac_header_dirent=$ac_hdr; break
-fi
-
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' dir; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_opendir=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_opendir+:} false; then :
-
-else
-  ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
+if test "x${ac_cv_sizeof_void_p}" = "x8"; then
+  host64=true
 fi
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' x; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
+# Put a plausible default for CC_FOR_BUILD in Makefile.
+if test -z "$CC_FOR_BUILD"; then
+  if test "x$cross_compiling" = "xno"; then
+    CC_FOR_BUILD='$(CC)'
   else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    CC_FOR_BUILD=gcc
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_opendir=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
-  break
 fi
-done
-if ${ac_cv_search_opendir+:} false; then :
 
+# Also set EXEEXT_FOR_BUILD.
+if test "x$cross_compiling" = "xno"; then
+  EXEEXT_FOR_BUILD='$(EXEEXT)'
 else
-  ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5
-$as_echo_n "checking whether string.h and strings.h may both be included... " >&6; }
-if ${gcc_cv_header_string+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build system executable suffix" >&5
+$as_echo_n "checking for build system executable suffix... " >&6; }
+if ${bfd_cv_build_exeext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-#include <strings.h>
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gcc_cv_header_string=yes
-else
-  gcc_cv_header_string=no
+  rm -f conftest*
+     echo 'int main () { return 0; }' > conftest.c
+     bfd_cv_build_exeext=
+     ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5
+     for file in conftest.*; do
+       case $file in
+       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+       *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;;
+       esac
+     done
+     rm -f conftest*
+     test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_build_exeext" >&5
+$as_echo "$bfd_cv_build_exeext" >&6; }
+  EXEEXT_FOR_BUILD=""
+  test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext}
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_header_string" >&5
-$as_echo "$gcc_cv_header_string" >&6; }
-if test $gcc_cv_header_string = yes; then
-
-$as_echo "#define STRING_WITH_STRINGS 1" >>confdefs.h
 
-fi
 
-for ac_func in fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno fls
+for ac_header in fcntl.h sys/file.h sys/resource.h sys/stat.h sys/types.h \
+		 unistd.h
 do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
+
 done
 
-for ac_func in strtoull getrlimit
+
+for ac_func in fcntl fdopen fileno fls getgid getpagesize getrlimit getuid \
+	       sysconf
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -14153,49 +15113,67 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_BASENAME $ac_have_decl
 _ACEOF
-
-ac_fn_c_check_decl "$LINENO" "ftello" "ac_cv_have_decl_ftello" "$ac_includes_default"
-if test "x$ac_cv_have_decl_ftello" = xyes; then :
+ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
+if test "x$ac_cv_have_decl_ffs" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
 fi
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FTELLO $ac_have_decl
+#define HAVE_DECL_FFS $ac_have_decl
 _ACEOF
+ac_fn_c_check_decl "$LINENO" "stpcpy" "ac_cv_have_decl_stpcpy" "$ac_includes_default"
+if test "x$ac_cv_have_decl_stpcpy" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
 
-ac_fn_c_check_decl "$LINENO" "ftello64" "ac_cv_have_decl_ftello64" "$ac_includes_default"
-if test "x$ac_cv_have_decl_ftello64" = xyes; then :
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STPCPY $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_asprintf" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
 fi
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FTELLO64 $ac_have_decl
+#define HAVE_DECL_ASPRINTF $ac_have_decl
 _ACEOF
+ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_vasprintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
 
-ac_fn_c_check_decl "$LINENO" "fseeko" "ac_cv_have_decl_fseeko" "$ac_includes_default"
-if test "x$ac_cv_have_decl_fseeko" = xyes; then :
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VASPRINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strnlen" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
 fi
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FSEEKO $ac_have_decl
+#define HAVE_DECL_STRNLEN $ac_have_decl
 _ACEOF
 
-ac_fn_c_check_decl "$LINENO" "fseeko64" "ac_cv_have_decl_fseeko64" "$ac_includes_default"
-if test "x$ac_cv_have_decl_fseeko64" = xyes; then :
+ac_fn_c_check_decl "$LINENO" "___lc_codepage_func" "ac_cv_have_decl____lc_codepage_func" "#include <locale.h>
+"
+if test "x$ac_cv_have_decl____lc_codepage_func" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
 fi
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FSEEKO64 $ac_have_decl
+#define HAVE_DECL____LC_CODEPAGE_FUNC $ac_have_decl
 _ACEOF
 
 
@@ -14207,157 +15185,316 @@ case "${host}" in
  ;;
 esac
 
-ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
-if test "x$ac_cv_have_decl_ffs" = xyes; then :
-  ac_have_decl=1
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5
+$as_echo_n "checking for thread local storage (TLS) class... " >&6; }
+  if ${ac_cv_tls+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_have_decl=0
-fi
+  for ax_tls_keyword in thread_local _Thread_local __thread '__declspec(thread)' none; do
+       case $ax_tls_keyword in #(
+  none) :
+    ac_cv_tls=none ; break ;; #(
+  *) :
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+static  $ax_tls_keyword  int bar;
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FFS $ac_have_decl
+  ;
+  return 0;
+}
 _ACEOF
-
-ac_fn_c_check_decl "$LINENO" "free" "ac_cv_have_decl_free" "$ac_includes_default"
-if test "x$ac_cv_have_decl_free" = xyes; then :
-  ac_have_decl=1
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_tls=$ax_tls_keyword ; break
 else
-  ac_have_decl=0
-fi
+  ac_cv_tls=none
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FREE $ac_have_decl
-_ACEOF
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         ;;
+esac
+    done
 
-ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default"
-if test "x$ac_cv_have_decl_getenv" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
 fi
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5
+$as_echo "$ac_cv_tls" >&6; }
+
+  if test "$ac_cv_tls" != "none"; then :
+
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETENV $ac_have_decl
+#define TLS $ac_cv_tls
 _ACEOF
 
-ac_fn_c_check_decl "$LINENO" "malloc" "ac_cv_have_decl_malloc" "$ac_includes_default"
-if test "x$ac_cv_have_decl_malloc" = xyes; then :
-  ac_have_decl=1
+     :
 else
-  ac_have_decl=0
+  :
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MALLOC $ac_have_decl
-_ACEOF
 
-ac_fn_c_check_decl "$LINENO" "realloc" "ac_cv_have_decl_realloc" "$ac_includes_default"
-if test "x$ac_cv_have_decl_realloc" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
+# Link in zlib/zstd if we can.  This allows us to read compressed debug sections.
+# This is used only by compress.c.
+
+  # Use the system's zlib library.
+  zlibdir="-L\$(top_builddir)/../zlib"
+  zlibinc="-I\$(top_srcdir)/../zlib"
+
+# Check whether --with-system-zlib was given.
+if test "${with_system_zlib+set}" = set; then :
+  withval=$with_system_zlib; if test x$with_system_zlib = xyes ; then
+    zlibdir=
+    zlibinc=
+  fi
+
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_REALLOC $ac_have_decl
-_ACEOF
 
-ac_fn_c_check_decl "$LINENO" "stpcpy" "ac_cv_have_decl_stpcpy" "$ac_includes_default"
-if test "x$ac_cv_have_decl_stpcpy" = xyes; then :
-  ac_have_decl=1
+
+
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_have_decl=0
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STPCPY $ac_have_decl
-_ACEOF
 
-ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strstr" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
 fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRSTR $ac_have_decl
-_ACEOF
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_asprintf" = xyes; then :
-  ac_have_decl=1
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
 else
-  ac_have_decl=0
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ASPRINTF $ac_have_decl
-_ACEOF
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+		PKG_CONFIG=""
+	fi
+fi
 
-ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_vasprintf" = xyes; then :
-  ac_have_decl=1
+
+# Check whether --with-zstd was given.
+if test "${with_zstd+set}" = set; then :
+  withval=$with_zstd;
 else
-  ac_have_decl=0
+  with_zstd=auto
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_VASPRINTF $ac_have_decl
-_ACEOF
 
-ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_snprintf" = xyes; then :
-  ac_have_decl=1
+if test "$with_zstd" != no; then :
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libzstd >= 1.4.0" >&5
+$as_echo_n "checking for libzstd >= 1.4.0... " >&6; }
+
+if test -n "$ZSTD_CFLAGS"; then
+    pkg_cv_ZSTD_CFLAGS="$ZSTD_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libzstd >= 1.4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libzstd >= 1.4.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ZSTD_CFLAGS=`$PKG_CONFIG --cflags "libzstd >= 1.4.0" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
 else
-  ac_have_decl=0
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$ZSTD_LIBS"; then
+    pkg_cv_ZSTD_LIBS="$ZSTD_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libzstd >= 1.4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libzstd >= 1.4.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ZSTD_LIBS=`$PKG_CONFIG --libs "libzstd >= 1.4.0" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SNPRINTF $ac_have_decl
+if test $pkg_failed = no; then
+  pkg_save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $pkg_cv_ZSTD_LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
 
-ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_vsnprintf" = xyes; then :
-  ac_have_decl=1
 else
-  ac_have_decl=0
+  pkg_failed=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$pkg_save_LDFLAGS
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_VSNPRINTF $ac_have_decl
-_ACEOF
 
-ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strnlen" = xyes; then :
-  ac_have_decl=1
+
+if test $pkg_failed = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
 else
-  ac_have_decl=0
+        _pkg_short_errors_supported=no
 fi
+        if test $_pkg_short_errors_supported = yes; then
+	        ZSTD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libzstd >= 1.4.0" 2>&1`
+        else
+	        ZSTD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libzstd >= 1.4.0" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$ZSTD_PKG_ERRORS" >&5
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRNLEN $ac_have_decl
-_ACEOF
 
+    if test "$with_zstd" = yes; then
+      as_fn_error $? "--with-zstd was given, but pkgconfig/libzstd.pc is not found" "$LINENO" 5
+    fi
 
-# Link in zlib if we can.  This allows us to read compressed debug sections.
-# This is used only by compress.c.
+elif test $pkg_failed = untried; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 
-  # Use the system's zlib library.
-  zlibdir="-L\$(top_builddir)/../zlib"
-  zlibinc="-I\$(top_srcdir)/../zlib"
+    if test "$with_zstd" = yes; then
+      as_fn_error $? "--with-zstd was given, but pkgconfig/libzstd.pc is not found" "$LINENO" 5
+    fi
 
-# Check whether --with-system-zlib was given.
-if test "${with_system_zlib+set}" = set; then :
-  withval=$with_system_zlib; if test x$with_system_zlib = xyes ; then
-    zlibdir=
-    zlibinc=
-  fi
+else
+	ZSTD_CFLAGS=$pkg_cv_ZSTD_CFLAGS
+	ZSTD_LIBS=$pkg_cv_ZSTD_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 
-fi
 
+$as_echo "#define HAVE_ZSTD 1" >>confdefs.h
 
 
+fi
+
+fi
 
 
 save_CFLAGS="$CFLAGS"
@@ -14556,17 +15693,16 @@ if test "$enable_shared" = "yes"; then
   if test -n "$x"; then
     SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
   fi
+fi
+
+SHARED_LIBADD="$SHARED_LIBADD $LTLIBINTL"
 
+if test "$enable_shared" = "yes"; then
   case "${host}" in
   # More hacks to build DLLs on Windows.
   *-*-cygwin*)
     SHARED_LDFLAGS="-no-undefined"
-    SHARED_LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32"
-  ;;
-
-  # Use built-in libintl on macOS, since it is not provided by libc.
-  *-*-darwin*)
-    SHARED_LIBADD="-L`pwd`/../libiberty/pic -L`pwd`/../intl -liberty -lintl"
+    SHARED_LIBADD="-L`pwd`/../libiberty -liberty $SHARED_LIBADD -lcygwin -lkernel32"
   ;;
   esac
 
@@ -14667,13 +15803,13 @@ selarchs="$f"
 tb=
 
 elf="elf.lo elflink.lo elf-attrs.lo elf-strtab.lo elf-eh-frame.lo
-     dwarf1.lo dwarf2.lo"
+     elf-sframe.lo dwarf1.lo dwarf2.lo"
 coffgen="coffgen.lo dwarf2.lo"
 coff="cofflink.lo $coffgen"
 ecoff="ecofflink.lo $coffgen"
 xcoff="xcofflink.lo $coffgen"
 
-elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo"
+elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-vxworks.lo"
 for vec in $selvecs
 do
     target_size=32
@@ -14688,12 +15824,15 @@ do
     aarch64_elf64_le_vec)	   tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
     aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
     aarch64_mach_o_vec)		 tb="$tb mach-o-aarch64.lo"; target_size=64 ;;
+    aarch64_pei_le_vec)		 tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
+    aarch64_pe_le_vec)		 tb="$tb pe-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
     alpha_ecoff_le_vec)		 tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
     alpha_elf64_vec)		 tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
     alpha_elf64_fbsd_vec)	 tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
     alpha_vms_vec)		 tb="$tb vms-alpha.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
     alpha_vms_lib_txt_vec)	 tb="$tb vms-lib.lo vms-misc.lo" ;;
     am33_elf32_linux_vec)	 tb="$tb elf32-am33lin.lo elf32.lo $elf" ;;
+    amdgcn_elf64_le_vec)	 tb="$tb elf64-amdgcn.lo elf64.lo $elf"; target_size=64 ;;
     aout0_be_vec)		 tb="$tb aout0.lo aout32.lo" ;;
     aout64_vec)			 tb="$tb demo64.lo aout64.lo"; target_size=64 ;;
     aout_vec)			 tb="$tb host-aout.lo aout32.lo" ;;
@@ -14705,8 +15844,6 @@ do
     arm_elf32_fdpic_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_nacl_be_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_nacl_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
-    arm_elf32_symbian_be_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
-    arm_elf32_symbian_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_vxworks_be_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_vxworks_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_pe_be_vec)		 tb="$tb pe-arm.lo peigen.lo $coff" ;;
@@ -14758,12 +15895,12 @@ do
     i386_coff_lynx_vec)		 tb="$tb cf-i386lynx.lo lynx-core.lo $coff" ;;
     i386_elf32_vec)		 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_elf32_fbsd_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
-    i386_elf32_nacl_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_elf32_sol2_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_elf32_vxworks_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_mach_o_vec)		 tb="$tb mach-o-i386.lo" ;;
     i386_msdos_vec)		 tb="$tb i386msdos.lo" ;;
     i386_pe_vec)		 tb="$tb pe-i386.lo peigen.lo $coff" ;;
+    i386_pe_big_vec)		 tb="$tb pe-i386.lo peigen.lo $coff" ;;
     i386_pei_vec)		 tb="$tb pei-i386.lo peigen.lo $coff" ;;
     iamcu_elf32_vec)		 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     ia64_elf32_be_vec)		 tb="$tb elf32-ia64.lo elfxx-ia64.lo elf32.lo $elf" ;;
@@ -14775,12 +15912,13 @@ do
     ia64_pei_vec)		 tb="$tb pei-ia64.lo pepigen.lo $coff"; target_size=64 ;;
     ip2k_elf32_vec)		 tb="$tb elf32-ip2k.lo elf32.lo $elf" ;;
     iq2000_elf32_vec)		 tb="$tb elf32-iq2000.lo elf32.lo $elf" ;;
-    k1om_elf64_vec)		 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
-    k1om_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
-    l1om_elf64_vec)		 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
-    l1om_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    kvx_elf32_vec)		 tb="$tb elf32-kvx.lo elfxx-kvx.lo elf32.lo $elf $ipa" ;;
+    kvx_elf64_vec)		 tb="$tb elf64-kvx.lo elfxx-kvx.lo elf64.lo $elf $ipa"; target_size=64 ;;
     lm32_elf32_vec)		 tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
     lm32_elf32_fdpic_vec)	 tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
+    loongarch_elf32_vec)	 tb="$tb elf32-loongarch.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf" ;;
+    loongarch_elf64_vec)	 tb="$tb elf64-loongarch.lo elf64.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf"; target_size=64 ;;
+    loongarch64_pei_vec)	 tb="$tb pei-loongarch64.lo pe-loongarch64igen.lo $coff"; target_size=64 ;;
     m32c_elf32_vec)		 tb="$tb elf32-m32c.lo elf32.lo $elf" ;;
     m32r_elf32_vec)		 tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
     m32r_elf32_le_vec)		 tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
@@ -14846,6 +15984,7 @@ do
     ns32k_aout_pc532mach_vec)	 tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
     ns32k_aout_pc532nbsd_vec)	 tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
     or1k_elf32_vec)		 tb="$tb elf32-or1k.lo elf32.lo $elf" ;;
+    pdb_vec)			 tb="$tb pdb.lo" ;;
     pdp11_aout_vec)		 tb="$tb pdp11.lo" ;;
     pef_vec)			 tb="$tb pef.lo" ;;
     pef_xlib_vec)		 tb="$tb pef.lo" ;;
@@ -14859,14 +15998,14 @@ do
     powerpc_elf64_vec)		 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf"; target_size=64 ;;
     powerpc_elf64_le_vec)	 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
     powerpc_elf64_fbsd_vec)	 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
-    powerpc_pe_vec)		 tb="$tb pe-ppc.lo peigen.lo $coff" ;;
-    powerpc_pe_le_vec)		 tb="$tb pe-ppc.lo peigen.lo $coff" ;;
-    powerpc_pei_vec)		 tb="$tb pei-ppc.lo peigen.lo $coff" ;;
-    powerpc_pei_le_vec)		 tb="$tb pei-ppc.lo peigen.lo $coff" ;;
+    powerpc_elf64_fbsd_le_vec)	 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
     powerpc_xcoff_vec)		 tb="$tb coff-rs6000.lo $xcoff" ;;
     pru_elf32_vec)		 tb="$tb elf32-pru.lo elf32.lo $elf" ;;
-    riscv_elf32_vec)		 tb="$tb elf32-riscv.lo elfxx-riscv.lo elf32.lo $elf" ;;
-    riscv_elf64_vec)		 tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf32.lo $elf"; target_size=64 ;;
+    riscv_elf32_vec)		 tb="$tb elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf" ;;
+    riscv_elf64_vec)		 tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
+    riscv_elf32_be_vec)		 tb="$tb elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf" ;;
+    riscv_elf64_be_vec)		 tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
+    riscv64_pei_vec)		 tb="$tb pei-riscv64.lo pe-riscv64igen.lo $coff"; target_size=64 ;;
     rl78_elf32_vec)		 tb="$tb elf32-rl78.lo elf32.lo $elf" ;;
     rs6000_xcoff64_vec)		 tb="$tb coff64-rs6000.lo aix5ppc-core.lo $xcoff"; target_size=64 ;;
     rs6000_xcoff64_aix_vec)	 tb="$tb coff64-rs6000.lo aix5ppc-core.lo $xcoff"; target_size=64 ;;
@@ -14877,8 +16016,8 @@ do
     rx_elf32_linux_le_vec)	 tb="$tb elf32-rx.lo elf32.lo $elf" ;;
     s390_elf32_vec)		 tb="$tb elf32-s390.lo elf32.lo $elf" ;;
     s390_elf64_vec)		 tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;;
-    score_elf32_be_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
-    score_elf32_le_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
+    score_elf32_be_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;;
+    score_elf32_le_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;;
     sh_coff_vec)		 tb="$tb coff-sh.lo $coff" ;;
     sh_coff_le_vec)		 tb="$tb coff-sh.lo $coff" ;;
     sh_coff_small_vec)		 tb="$tb coff-sh.lo $coff" ;;
@@ -14903,7 +16042,6 @@ do
     sparc_elf64_sol2_vec)	 tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
     spu_elf32_vec)		 tb="$tb elf32-spu.lo elf32.lo $elf" ;;
     sym_vec)			 tb="$tb xsym.lo" ;;
-    tic30_aout_vec)		 tb="$tb aout-tic30.lo" ;;
     tic30_coff_vec)		 tb="$tb coff-tic30.lo $coffgen" ;;
     tic4x_coff0_vec)		 tb="$tb coff-tic4x.lo $coffgen" ;;
     tic4x_coff0_beh_vec)	 tb="$tb coff-tic4x.lo $coffgen" ;;
@@ -14923,7 +16061,6 @@ do
     tic6x_elf32_c6000_le_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_be_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_le_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
-    tic80_coff_vec)		 tb="$tb coff-tic80.lo $coff" ;;
     tilegx_elf32_be_vec)	 tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf32_le_vec)	 tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf64_be_vec)	 tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
@@ -14940,22 +16077,20 @@ do
     wasm32_elf32_vec)            tb="$tb elf32-wasm32.lo elf32.lo $elf" ;;
     x86_64_coff_vec)		 tb="$tb coff-x86_64.lo $coff"; target_size=64 ;;
     x86_64_elf32_vec)		 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;;
-    x86_64_elf32_nacl_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;;
     x86_64_elf64_vec)		 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
     x86_64_elf64_cloudabi_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
     x86_64_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
-    x86_64_elf64_nacl_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
     x86_64_elf64_sol2_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
     x86_64_mach_o_vec)		 tb="$tb mach-o-x86-64.lo" ;;
     x86_64_pe_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
-    x86_64_pe_be_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
+    x86_64_pe_big_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
     x86_64_pei_vec)		 tb="$tb pei-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
-    xc16x_elf32_vec)		 tb="$tb elf32-xc16x.lo elf32.lo $elf" ;;
     xgate_elf32_vec)		 tb="$tb elf32-xgate.lo elf32.lo $elf" ;;
     xstormy16_elf32_vec)	 tb="$tb elf32-xstormy16.lo elf32.lo $elf" ;;
-    xtensa_elf32_be_vec)	 tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
-    xtensa_elf32_le_vec)	 tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
+    xtensa_elf32_be_vec)	 tb="$tb xtensa-dynconfig.lo xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
+    xtensa_elf32_le_vec)	 tb="$tb xtensa-dynconfig.lo xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
     z80_coff_vec)		 tb="$tb coff-z80.lo reloc16.lo $coffgen" ;;
+    z80_elf32_vec)		 tb="$tb elf32-z80.lo elf32.lo $elf" ;;
     z8k_coff_vec)		 tb="$tb coff-z8k.lo reloc16.lo $coff" ;;
 
     # These appear out of order in targets.c
@@ -15041,12 +16176,6 @@ case ${host64}-${target64}-${want64} in
     wordsize=64
     bfd64_libs='$(BFD64_LIBS)'
     all_backends='$(BFD64_BACKENDS) $(BFD32_BACKENDS)'
-    if test $BFD_HOST_64_BIT_DEFINED = 0; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You have requested a 64 bit BFD configuration, but" >&5
-$as_echo "$as_me: WARNING: You have requested a 64 bit BFD configuration, but" >&2;}
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: your compiler may not have a 64 bit integral type" >&5
-$as_echo "$as_me: WARNING: your compiler may not have a 64 bit integral type" >&2;}
-    fi
     if test -n "$GCC" ; then
        bad_64bit_gcc=no;
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc version with buggy 64-bit support" >&5
@@ -15115,10 +16244,9 @@ if test "${target}" = "${host}"; then
 	;;
   arm-*-freebsd* | arm-*-kfreebsd*-gnu)
 	COREFILE='' ;;
-  arm-*-netbsd* | arm-*-openbsd*)
+  arm*-*-netbsd* | arm-*-openbsd*)
 	COREFILE=netbsd-core.lo
 	;;
-  arm-*-riscix)		COREFILE=trad-core.lo ;;
   hppa*-*-hpux*)	COREFILE=hpux-core.lo ;;
   hppa*-*-hiux*)	COREFILE=hpux-core.lo ;;
   hppa*-*-mpeix*)	COREFILE=hpux-core.lo ;;
@@ -15128,19 +16256,10 @@ if test "${target}" = "${host}"; then
 	COREFILE=netbsd-core.lo
 	;;
 
-  i[3-7]86-sequent-bsd*)
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/symmetry.h"'
-	;;
-  i[3-7]86-sequent-sysv4*) ;;
-  i[3-7]86-sequent-sysv*)
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/symmetry.h"'
-	;;
   i[3-7]86-*-bsdi)
 	COREFILE=
 	;;
-  i[3-7]86-*-bsd* | i[3-7]86-*-freebsd[123] | i[3-7]86-*-freebsd[123]\.* | i[3-7]86-*-freebsd4\.[01234] | i[3-7]86-*-freebsd4\.[01234]\.* | i[3-7]86-*-freebsd*aout*)
+  i[3-7]86-*-bsd* | i[3-7]86-*-freebsd[123] | i[3-7]86-*-freebsd[123]\.* | i[3-7]86-*-freebsd4\.[01234] | i[3-7]86-*-freebsd4\.[01234]\.*)
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/i386bsd.h"'
 	;;
@@ -15155,13 +16274,6 @@ if test "${target}" = "${host}"; then
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/esix.h"'
 	;;
-  i[3-7]86-*-sco3.2v5*)
-	COREFILE=sco5-core.lo
-	;;
-  i[3-7]86-*-sco* | i[3-7]86-*-isc*)
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/i386sco.h"'
-	;;
   i[3-7]86-*-mach3*)
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/i386mach3.h"'
@@ -15174,14 +16286,12 @@ if test "${target}" = "${host}"; then
 	  CORE_HEADER='"hosts/x86-64linux.h"'
 	esac
 	;;
-  i[3-7]86-*-isc*)	COREFILE=trad-core.lo ;;
-  i[3-7]86-*-aix*)	COREFILE=aix386-core.lo ;;
-  mips-*-netbsd* | mips*-*-openbsd*)
+  mips*-*-netbsd* | mips*-*-openbsd*)
 	COREFILE=netbsd-core.lo
 	;;
-  mips-sgi-irix4*)	COREFILE=irix-core.lo ;;
-  mips-sgi-irix5*)	COREFILE=irix-core.lo ;;
-  mips-sgi-irix6*)	COREFILE=irix-core.lo ;;
+  mips-*-irix*)
+	COREFILE=irix-core.lo
+	;;
   m68*-*-linux-*)
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/m68klinux.h"'
@@ -15253,14 +16363,6 @@ rm -f core conftest.err conftest.$ac_obj
   vax-*-netbsd* | vax-*-openbsd*)
 	COREFILE=netbsd-core.lo
 	;;
-  vax-*-ultrix2*)
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/vaxult2.h"'
-	;;
-  vax-*-ultrix*)
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/vaxult2.h"'
-	;;
   vax-*-linux-*)
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/vaxlinux.h"'
@@ -15278,7 +16380,6 @@ rm -f core conftest.err conftest.$ac_obj
   esac
 
   case "$COREFILE" in
-  aix386-core.lo)	COREFLAG=-DAIX386_CORE ;;
   hppabsd-core.lo)	COREFLAG=-DHPPABSD_CORE ;;
   hpux-core.lo)		COREFLAG=-DHPUX_CORE ;;
   irix-core.lo)		COREFLAG=-DIRIX_CORE ;;
@@ -15287,13 +16388,15 @@ rm -f core conftest.err conftest.$ac_obj
   osf-core.lo)		COREFLAG=-DOSF_CORE ;;
   ptrace-core.lo)	COREFLAG=-DPTRACE_CORE ;;
   rs6000-core.lo)	COREFLAG="$COREFLAG -DAIX_CORE" ;;
-  sco5-core.lo)		COREFLAG="$COREFLAG -DSCO5_CORE" ;;
   trad-core.lo)		COREFLAG="$COREFLAG -DTRAD_CORE" ;;
   esac
 
   # ELF corefile support has several flavors, but all of
   # them use something called <sys/procfs.h>
-  for ac_header in sys/procfs.h
+
+$as_echo "#define _STRUCTURED_PROC 1" >>confdefs.h
+
+ for ac_header in sys/procfs.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "sys/procfs.h" "ac_cv_header_sys_procfs_h" "$ac_includes_default"
 if test "x$ac_cv_header_sys_procfs_h" = xyes; then :
@@ -15306,7 +16409,8 @@ fi
 done
 
   if test "$ac_cv_header_sys_procfs_h" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t in sys/procfs.h" >&5
 $as_echo_n "checking for prstatus_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_prstatus_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15315,8 +16419,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15343,7 +16445,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prstatus_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_prstatus_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t in sys/procfs.h" >&5
 $as_echo_n "checking for prstatus32_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_prstatus32_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15352,8 +16455,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15380,7 +16481,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prstatus32_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_prstatus32_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t.pr_who in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t.pr_who in sys/procfs.h" >&5
 $as_echo_n "checking for prstatus_t.pr_who in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15389,8 +16491,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15417,7 +16517,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t.pr_who in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t.pr_who in sys/procfs.h" >&5
 $as_echo_n "checking for prstatus32_t.pr_who in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15426,8 +16527,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15454,7 +16553,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus_t in sys/procfs.h" >&5
 $as_echo_n "checking for pstatus_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_pstatus_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15463,8 +16563,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15491,7 +16589,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_pstatus_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_pstatus_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pxstatus_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pxstatus_t in sys/procfs.h" >&5
 $as_echo_n "checking for pxstatus_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_pxstatus_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15500,8 +16599,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15528,7 +16625,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_pxstatus_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_pxstatus_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus32_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus32_t in sys/procfs.h" >&5
 $as_echo_n "checking for pstatus32_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_pstatus32_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15537,8 +16635,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15565,7 +16661,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_pstatus32_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_pstatus32_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo_t in sys/procfs.h" >&5
 $as_echo_n "checking for prpsinfo_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_prpsinfo_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15574,8 +16671,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15602,7 +16697,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prpsinfo_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_prpsinfo_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo_t.pr_pid in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo_t.pr_pid in sys/procfs.h" >&5
 $as_echo_n "checking for prpsinfo_t.pr_pid in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_member_prpsinfo_t_pr_pid+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15611,8 +16707,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15639,7 +16733,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prpsinfo_t_pr_pid" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_member_prpsinfo_t_pr_pid" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo32_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo32_t in sys/procfs.h" >&5
 $as_echo_n "checking for prpsinfo32_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_prpsinfo32_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15648,8 +16743,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15676,7 +16769,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo32_t.pr_pid in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo32_t.pr_pid in sys/procfs.h" >&5
 $as_echo_n "checking for prpsinfo32_t.pr_pid in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_member_prpsinfo32_t_pr_pid+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15685,8 +16779,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15713,7 +16805,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prpsinfo32_t_pr_pid" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_member_prpsinfo32_t_pr_pid" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo_t in sys/procfs.h" >&5
 $as_echo_n "checking for psinfo_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_psinfo_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15722,8 +16815,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15750,7 +16841,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psinfo_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_psinfo_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo_t.pr_pid in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo_t.pr_pid in sys/procfs.h" >&5
 $as_echo_n "checking for psinfo_t.pr_pid in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_member_psinfo_t_pr_pid+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15759,8 +16851,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15787,7 +16877,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_psinfo_t_pr_pid" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_member_psinfo_t_pr_pid" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo32_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo32_t in sys/procfs.h" >&5
 $as_echo_n "checking for psinfo32_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_psinfo32_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15796,8 +16887,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15824,7 +16913,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psinfo32_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_psinfo32_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo32_t.pr_pid in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo32_t.pr_pid in sys/procfs.h" >&5
 $as_echo_n "checking for psinfo32_t.pr_pid in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_member_psinfo32_t_pr_pid+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15833,8 +16923,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15861,7 +16949,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_psinfo32_t_pr_pid" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_member_psinfo32_t_pr_pid" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t in sys/procfs.h" >&5
 $as_echo_n "checking for lwpstatus_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_lwpstatus_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15870,8 +16959,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15898,7 +16985,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpstatus_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_lwpstatus_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpxstatus_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpxstatus_t in sys/procfs.h" >&5
 $as_echo_n "checking for lwpxstatus_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_lwpxstatus_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15907,8 +16995,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15935,7 +17021,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5
 $as_echo_n "checking for lwpstatus_t.pr_context in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15944,8 +17031,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -15972,7 +17057,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5
 $as_echo_n "checking for lwpstatus_t.pr_reg in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15981,8 +17067,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -16009,7 +17093,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_fpreg in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_fpreg in sys/procfs.h" >&5
 $as_echo_n "checking for lwpstatus_t.pr_fpreg in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_fpreg+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -16018,8 +17103,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -16046,7 +17129,8 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_fpreg" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_fpreg" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for win32_pstatus_t in sys/procfs.h" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for win32_pstatus_t in sys/procfs.h" >&5
 $as_echo_n "checking for win32_pstatus_t in sys/procfs.h... " >&6; }
  if ${bfd_cv_have_sys_procfs_type_win32_pstatus_t+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -16055,8 +17139,6 @@ else
 /* end confdefs.h.  */
 
 #define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
 #include <sys/procfs.h>
 int
 main ()
@@ -16127,6 +17209,57 @@ _ACEOF
 fi
 done
 
+ac_fn_c_check_decl "$LINENO" "ftello" "ac_cv_have_decl_ftello" "$ac_includes_default"
+if test "x$ac_cv_have_decl_ftello" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FTELLO $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ftello64" "ac_cv_have_decl_ftello64" "$ac_includes_default"
+if test "x$ac_cv_have_decl_ftello64" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FTELLO64 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fseeko" "ac_cv_have_decl_fseeko" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fseeko" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FSEEKO $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fseeko64" "ac_cv_have_decl_fseeko64" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fseeko64" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FSEEKO64 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fopen64" "ac_cv_have_decl_fopen64" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fopen64" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FOPEN64 $ac_have_decl
+_ACEOF
+
 if test x"$ac_cv_func_ftello" = xyes -a x"$ac_cv_func_fseeko" = xyes; then
     # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
@@ -16168,8 +17301,8 @@ bfd_file_ptr="long"
 bfd_ufile_ptr="unsigned long"
 if test x"$ac_cv_func_ftello64" = xyes -a x"$ac_cv_func_fseeko64" = xyes \
 	-o x"${ac_cv_sizeof_off_t}" = x8; then
-    bfd_file_ptr=BFD_HOST_64_BIT
-    bfd_ufile_ptr=BFD_HOST_U_64_BIT
+    bfd_file_ptr=int64_t
+    bfd_ufile_ptr=uint64_t
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_file_ptr" >&5
 $as_echo "$bfd_file_ptr" >&6; }
@@ -16395,8 +17528,7 @@ case ${want_mmap}+${ac_cv_func_mmap_fixe
  ;;
 esac
 
-rm -f doc/config.status
-ac_config_files="$ac_config_files Makefile doc/Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in"
+ac_config_files="$ac_config_files Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in"
 
 
 ac_config_commands="$ac_config_commands default"
@@ -16524,14 +17656,6 @@ LTLIBOBJS=$ac_ltlibobjs
    fi
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
 $as_echo "done" >&6; }
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error $? "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
  if test -n "$EXEEXT"; then
   am__EXEEXT_TRUE=
   am__EXEEXT_FALSE='#'
@@ -16540,10 +17664,22 @@ else
   am__EXEEXT_FALSE=
 fi
 
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${PLUGINS_TRUE}" && test -z "${PLUGINS_FALSE}"; then
   as_fn_error $? "conditional \"PLUGINS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${ENABLE_BFD_64_BIT_TRUE}" && test -z "${ENABLE_BFD_64_BIT_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_BFD_64_BIT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
   as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -16557,6 +17693,7 @@ if test -z "${INSTALL_LIBBFD_TRUE}" && t
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
+
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
@@ -16953,7 +18090,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by bfd $as_me 2.33.50, which was
+This file was extended by bfd $as_me 2.42.50, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -17019,7 +18156,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-bfd config.status 2.33.50
+bfd config.status 2.42.50
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -17406,23 +18543,12 @@ fi
     # Capture the value of LINGUAS because we need it to compute CATALOGS.
     LINGUAS="${LINGUAS-%UNSET%}"
 
-
-GCC="$GCC"
-CC="$CC"
-acx_cv_header_stdint="$acx_cv_header_stdint"
-acx_cv_type_int8_t="$acx_cv_type_int8_t"
-acx_cv_type_int16_t="$acx_cv_type_int16_t"
-acx_cv_type_int32_t="$acx_cv_type_int32_t"
-acx_cv_type_int64_t="$acx_cv_type_int64_t"
-acx_cv_type_intptr_t="$acx_cv_type_intptr_t"
-ac_cv_type_uintmax_t="$ac_cv_type_uintmax_t"
-ac_cv_type_uintptr_t="$ac_cv_type_uintptr_t"
-ac_cv_type_uint64_t="$ac_cv_type_uint64_t"
-ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t"
-ac_cv_type_u_int32_t="$ac_cv_type_u_int32_t"
-ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
-ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
-ac_cv_sizeof_void_p="$ac_cv_sizeof_void_p"
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+    # from automake.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
 
 
 
@@ -17438,9 +18564,8 @@ do
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
     "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
-    "bfd_stdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS bfd_stdint.h" ;;
+    "default-2") CONFIG_COMMANDS="$CONFIG_COMMANDS default-2" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
     "bfd-in3.h") CONFIG_FILES="$CONFIG_FILES bfd-in3.h:bfd-in2.h" ;;
     "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;;
     "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
@@ -18872,378 +19997,107 @@ _LT_EOF
         ;;
       esac
     done ;;
-    "bfd_stdint.h":C)
-if test "$GCC" = yes; then
-  echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h
-else
-  echo "/* generated for $CC */" > tmp-stdint.h
-fi
-
-sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-  #ifndef GCC_GENERATED_STDINT_H
-  #define GCC_GENERATED_STDINT_H 1
-
-  #include <sys/types.h>
-EOF
-
-if test "$acx_cv_header_stdint" != stdint.h; then
-  echo "#include <stddef.h>" >> tmp-stdint.h
-fi
-if test "$acx_cv_header_stdint" != stddef.h; then
-  echo "#include <$acx_cv_header_stdint>" >> tmp-stdint.h
-fi
-
-sed 's/^ *//' >> tmp-stdint.h <<EOF
-  /* glibc uses these symbols as guards to prevent redefinitions.  */
-  #ifdef __int8_t_defined
-  #define _INT8_T
-  #define _INT16_T
-  #define _INT32_T
-  #endif
-  #ifdef __uint32_t_defined
-  #define _UINT32_T
-  #endif
-
-EOF
-
-# ----------------- done header, emit basic int types -------------
-if test "$acx_cv_header_stdint" = stddef.h; then
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    #ifndef _UINT8_T
-    #define _UINT8_T
-    #ifndef __uint8_t_defined
-    #define __uint8_t_defined
-    #ifndef uint8_t
-    typedef unsigned $acx_cv_type_int8_t uint8_t;
-    #endif
-    #endif
-    #endif
-
-    #ifndef _UINT16_T
-    #define _UINT16_T
-    #ifndef __uint16_t_defined
-    #define __uint16_t_defined
-    #ifndef uint16_t
-    typedef unsigned $acx_cv_type_int16_t uint16_t;
-    #endif
-    #endif
-    #endif
-
-    #ifndef _UINT32_T
-    #define _UINT32_T
-    #ifndef __uint32_t_defined
-    #define __uint32_t_defined
-    #ifndef uint32_t
-    typedef unsigned $acx_cv_type_int32_t uint32_t;
-    #endif
-    #endif
-    #endif
-
-    #ifndef _INT8_T
-    #define _INT8_T
-    #ifndef __int8_t_defined
-    #define __int8_t_defined
-    #ifndef int8_t
-    typedef $acx_cv_type_int8_t int8_t;
-    #endif
-    #endif
-    #endif
-
-    #ifndef _INT16_T
-    #define _INT16_T
-    #ifndef __int16_t_defined
-    #define __int16_t_defined
-    #ifndef int16_t
-    typedef $acx_cv_type_int16_t int16_t;
-    #endif
-    #endif
-    #endif
-
-    #ifndef _INT32_T
-    #define _INT32_T
-    #ifndef __int32_t_defined
-    #define __int32_t_defined
-    #ifndef int32_t
-    typedef $acx_cv_type_int32_t int32_t;
-    #endif
-    #endif
-    #endif
-EOF
-elif test "$ac_cv_type_u_int32_t" = yes; then
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* int8_t int16_t int32_t defined by inet code, we do the u_intXX types */
-    #ifndef _INT8_T
-    #define _INT8_T
-    #endif
-    #ifndef _INT16_T
-    #define _INT16_T
-    #endif
-    #ifndef _INT32_T
-    #define _INT32_T
-    #endif
-
-    #ifndef _UINT8_T
-    #define _UINT8_T
-    #ifndef __uint8_t_defined
-    #define __uint8_t_defined
-    #ifndef uint8_t
-    typedef u_int8_t uint8_t;
-    #endif
-    #endif
-    #endif
-
-    #ifndef _UINT16_T
-    #define _UINT16_T
-    #ifndef __uint16_t_defined
-    #define __uint16_t_defined
-    #ifndef uint16_t
-    typedef u_int16_t uint16_t;
-    #endif
-    #endif
-    #endif
-
-    #ifndef _UINT32_T
-    #define _UINT32_T
-    #ifndef __uint32_t_defined
-    #define __uint32_t_defined
-    #ifndef uint32_t
-    typedef u_int32_t uint32_t;
-    #endif
-    #endif
-    #endif
-EOF
-else
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* Some systems have guard macros to prevent redefinitions, define them.  */
-    #ifndef _INT8_T
-    #define _INT8_T
-    #endif
-    #ifndef _INT16_T
-    #define _INT16_T
-    #endif
-    #ifndef _INT32_T
-    #define _INT32_T
-    #endif
-    #ifndef _UINT8_T
-    #define _UINT8_T
-    #endif
-    #ifndef _UINT16_T
-    #define _UINT16_T
-    #endif
-    #ifndef _UINT32_T
-    #define _UINT32_T
-    #endif
-EOF
-fi
-
-# ------------- done basic int types, emit int64_t types ------------
-if test "$ac_cv_type_uint64_t" = yes; then
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* system headers have good uint64_t and int64_t */
-    #ifndef _INT64_T
-    #define _INT64_T
-    #endif
-    #ifndef _UINT64_T
-    #define _UINT64_T
-    #endif
-EOF
-elif test "$ac_cv_type_u_int64_t" = yes; then
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* system headers have an u_int64_t (and int64_t) */
-    #ifndef _INT64_T
-    #define _INT64_T
-    #endif
-    #ifndef _UINT64_T
-    #define _UINT64_T
-    #ifndef __uint64_t_defined
-    #define __uint64_t_defined
-    #ifndef uint64_t
-    typedef u_int64_t uint64_t;
-    #endif
-    #endif
-    #endif
-EOF
-elif test -n "$acx_cv_type_int64_t"; then
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* architecture has a 64-bit type, $acx_cv_type_int64_t */
-    #ifndef _INT64_T
-    #define _INT64_T
-    #ifndef int64_t
-    typedef $acx_cv_type_int64_t int64_t;
-    #endif
-    #endif
-    #ifndef _UINT64_T
-    #define _UINT64_T
-    #ifndef __uint64_t_defined
-    #define __uint64_t_defined
-    #ifndef uint64_t
-    typedef unsigned $acx_cv_type_int64_t uint64_t;
-    #endif
-    #endif
-    #endif
-EOF
-else
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* some common heuristics for int64_t, using compiler-specific tests */
-    #if defined __STDC_VERSION__ && (__STDC_VERSION__-0) >= 199901L
-    #ifndef _INT64_T
-    #define _INT64_T
-    #ifndef __int64_t_defined
-    #ifndef int64_t
-    typedef long long int64_t;
-    #endif
-    #endif
-    #endif
-    #ifndef _UINT64_T
-    #define _UINT64_T
-    #ifndef uint64_t
-    typedef unsigned long long uint64_t;
-    #endif
-    #endif
-
-    #elif defined __GNUC__ && defined (__STDC__) && __STDC__-0
-    /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
-       does not implement __extension__.  But that compiler doesn't define
-       __GNUC_MINOR__.  */
-    # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
-    # define __extension__
-    # endif
-
-    # ifndef _INT64_T
-    # define _INT64_T
-    # ifndef int64_t
-    __extension__ typedef long long int64_t;
-    # endif
-    # endif
-    # ifndef _UINT64_T
-    # define _UINT64_T
-    # ifndef uint64_t
-    __extension__ typedef unsigned long long uint64_t;
-    # endif
-    # endif
-
-    #elif !defined __STRICT_ANSI__
-    # if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__
-
-    #  ifndef _INT64_T
-    #  define _INT64_T
-    #  ifndef int64_t
-    typedef __int64 int64_t;
-    #  endif
-    #  endif
-    #  ifndef _UINT64_T
-    #  define _UINT64_T
-    #  ifndef uint64_t
-    typedef unsigned __int64 uint64_t;
-    #  endif
-    #  endif
-    # endif /* compiler */
-
-    #endif /* ANSI version */
-EOF
-fi
-
-# ------------- done int64_t types, emit intptr types ------------
-if test "$ac_cv_type_uintptr_t" != yes; then
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* Define intptr_t based on sizeof(void*) = $ac_cv_sizeof_void_p */
-    #ifndef __uintptr_t_defined
-    #ifndef uintptr_t
-    typedef u$acx_cv_type_intptr_t uintptr_t;
-    #endif
-    #endif
-    #ifndef __intptr_t_defined
-    #ifndef intptr_t
-    typedef $acx_cv_type_intptr_t  intptr_t;
-    #endif
-    #endif
-EOF
-fi
-
-# ------------- done intptr types, emit int_least types ------------
-if test "$ac_cv_type_int_least32_t" != yes; then
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* Define int_least types */
-    typedef int8_t     int_least8_t;
-    typedef int16_t    int_least16_t;
-    typedef int32_t    int_least32_t;
-    #ifdef _INT64_T
-    typedef int64_t    int_least64_t;
-    #endif
-
-    typedef uint8_t    uint_least8_t;
-    typedef uint16_t   uint_least16_t;
-    typedef uint32_t   uint_least32_t;
-    #ifdef _UINT64_T
-    typedef uint64_t   uint_least64_t;
-    #endif
-EOF
-fi
-
-# ------------- done intptr types, emit int_fast types ------------
-if test "$ac_cv_type_int_fast32_t" != yes; then
-      sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* Define int_fast types.  short is often slow */
-    typedef int8_t       int_fast8_t;
-    typedef int          int_fast16_t;
-    typedef int32_t      int_fast32_t;
-    #ifdef _INT64_T
-    typedef int64_t      int_fast64_t;
-    #endif
-
-    typedef uint8_t      uint_fast8_t;
-    typedef unsigned int uint_fast16_t;
-    typedef uint32_t     uint_fast32_t;
-    #ifdef _UINT64_T
-    typedef uint64_t     uint_fast64_t;
-    #endif
-EOF
-fi
-
-if test "$ac_cv_type_uintmax_t" != yes; then
-  sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-    /* Define intmax based on what we found */
-    #ifndef intmax_t
-    #ifdef _INT64_T
-    typedef int64_t       intmax_t;
-    #else
-    typedef long          intmax_t;
-    #endif
-    #endif
-    #ifndef uintmax_t
-    #ifdef _UINT64_T
-    typedef uint64_t      uintmax_t;
-    #else
-    typedef unsigned long uintmax_t;
-    #endif
-    #endif
-EOF
-fi
-
-sed 's/^ *//' >> tmp-stdint.h <<EOF
-
-  #endif /* GCC_GENERATED_STDINT_H */
-EOF
-
-if test -r bfd_stdint.h && cmp -s tmp-stdint.h bfd_stdint.h; then
-  rm -f tmp-stdint.h
-else
-  mv -f tmp-stdint.h bfd_stdint.h
-fi
-
- ;;
+    "default-2":C)
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.ac is obsolete" || echo "setting ALL_LINGUAS in configure.ac is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.ac.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          GMOFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done ;;
     "default":C)
 case "$srcdir" in
   .) srcdirpre= ;;
@@ -19300,3 +20154,21 @@ if test -n "$ac_unrecognized_opts" && te
 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
+
+
+touch config.status.tmp
+if touch --reference=config.status config.status.tmp > /dev/null 2>&1; then
+  sed '/as_fn_exit 0/i \
+sed -e \"s/^\t\\\(\\\$(AM_V_CCLD)\\\)/\t+ \\\1/\" Makefile > Makefile.tmp \
+touch --reference=Makefile Makefile.tmp \
+mv Makefile.tmp Makefile \
+' config.status > config.status.tmp
+  touch --reference=config.status config.status.tmp
+  mv config.status.tmp config.status
+  chmod +x config.status
+  sed -e "s/^\t\(\$(AM_V_CCLD)\)/\t+ \1/" Makefile > Makefile.tmp
+  touch --reference=Makefile Makefile.tmp
+  mv Makefile.tmp Makefile
+else
+  rm -f config.status.tmp
+fi
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/configure.ac ./bfd/configure.ac
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/configure.ac	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/configure.ac	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl
-dnl   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+dnl   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 dnl
 dnl This file is free software; you can redistribute it and/or modify
 dnl it under the terms of the GNU General Public License as published by
@@ -22,9 +22,9 @@ AC_INIT([bfd], BFD_VERSION)
 AC_CONFIG_SRCDIR([libbfd.c])
 
 AC_CANONICAL_TARGET
-AC_ISC_POSIX
 
 AM_INIT_AUTOMAKE
+AM_SILENT_RULES([yes])
 
 dnl These must be called before LT_INIT, because it may want
 dnl to call AC_CHECK_PROG.
@@ -44,15 +44,50 @@ LT_INIT([dlopen])
 # AC_PLUGINS setting $plugins is called by ACX_LARGEFILE.
 ACX_LARGEFILE
 
+changequote(,)dnl
+case "${target}" in
+    hppa*64*-*-*) ;;
+    *-*-*aout*| i[3-7]86-*-msdos* | ns32k-*-* | pdp11-*-*)
+changequote([,])dnl
+	if test "$plugins" = "yes"; then
+	    if test "${enable_plugins+set}" = set; then
+		AC_MSG_WARN(Enabling plugins for AOUT is experimental)
+	    else
+		plugins=no
+	    fi
+	fi ;;
+    hppa*-*-hpux* | *-*-*vms* | \
+    powerpc*-*-aix* | powerpc-*-beos* | powerpc-*-macos* | rs6000-*-*)
+	if test "$plugins" = "yes"; then
+	    if test "${enable_plugins+set}" = set; then
+		AC_MSG_WARN(Enabling plugins may result in ar creating non-standard archives for ${target})
+	    else
+		plugins=no
+	    fi
+	fi ;;
+esac
+
 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
 
-AC_ARG_ENABLE(64-bit-bfd,
-[  --enable-64-bit-bfd     64-bit support (on hosts with narrower word sizes)],
+ac_checking=
+. ${srcdir}/development.sh
+test "$development" = true && ac_checking=yes
+AC_ARG_ENABLE(checking,
+[  --enable-checking       enable run-time checks],
 [case "${enableval}" in
-  yes)  want64=true  ;;
-  no)   want64=false ;;
-  *)    AC_MSG_ERROR(bad value ${enableval} for 64-bit-bfd option) ;;
-esac],[want64=false])dnl
+  no|none)  ac_checking= ;;
+  *)	    ac_checking=yes ;;
+esac])dnl
+if test x$ac_checking != x ; then
+  AC_DEFINE(ENABLE_CHECKING, 1, [Define if you want run-time sanity checks.])
+fi
+
+BFD_64_BIT
+if test $enable_64_bit_bfd = yes ; then
+  want64=true
+else
+  want64=false
+fi
 
 AC_ARG_ENABLE(targets,
 [  --enable-targets        alternative target configurations],
@@ -134,7 +169,7 @@ AC_ARG_WITH(separate-debug-dir,
 AC_SUBST(DEBUGDIR)
 
 ACX_PKGVERSION([GNU Binutils])
-ACX_BUGURL([http://www.sourceware.org/bugzilla/])
+ACX_BUGURL([https://sourceware.org/bugzilla/])
 
 AM_BINUTILS_WARNINGS
 
@@ -158,6 +193,8 @@ AM_CONDITIONAL(GENINSRC_NEVER, false)
 AM_INSTALL_LIBBFD
 AC_EXEEXT
 
+AC_C_BIGENDIAN
+
 host64=false
 target64=false
 bfd_default_target_size=32
@@ -174,15 +211,7 @@ AM_PO_SUBDIRS
 AC_SUBST(HDEFINES)
 AC_PROG_INSTALL
 
-BFD_HOST_64BIT_LONG=0
-BFD_HOST_64BIT_LONG_LONG=0
-BFD_HOST_64_BIT_DEFINED=0
-BFD_HOST_64_BIT=
-BFD_HOST_U_64_BIT=
-BFD_HOSTPTR_T="unsigned long"
-
-AC_TYPE_LONG_DOUBLE
-AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)])
+AC_CHECK_SIZEOF(long long)
 AC_CHECK_SIZEOF(void *)
 AC_CHECK_SIZEOF(long)
 AC_CHECK_SIZEOF(int)
@@ -191,68 +220,25 @@ if test "x${ac_cv_sizeof_void_p}" = "x8"
   host64=true
 fi
 
-if test "x${ac_cv_sizeof_long}" = "x8"; then
-  BFD_HOST_64BIT_LONG=1
-  test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long"
-  test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long"
-elif test "x${ac_cv_sizeof_long_long}" = "x8"; then
-  BFD_HOST_64BIT_LONG_LONG=1
-  test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long"
-  test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long"
-  if test "x${ac_cv_sizeof_void_p}" = "x8"; then
-    BFD_HOSTPTR_T="unsigned long long"
-  fi
-fi
-
-if test -n "${HOST_64BIT_TYPE}" -a -n "${HOST_U_64BIT_TYPE}"; then
-  BFD_HOST_64_BIT_DEFINED=1
-  BFD_HOST_64_BIT="${HOST_64BIT_TYPE}"
-  BFD_HOST_U_64_BIT="${HOST_U_64BIT_TYPE}"
-fi
+BFD_CC_FOR_BUILD
 
-AC_SUBST(BFD_HOST_64BIT_LONG)
-AC_SUBST(BFD_HOST_64BIT_LONG_LONG)
-AC_SUBST(BFD_HOST_64_BIT_DEFINED)
-AC_SUBST(BFD_HOST_64_BIT)
-AC_SUBST(BFD_HOST_U_64_BIT)
-AC_SUBST(BFD_HOSTPTR_T)
+AC_CHECK_HEADERS(fcntl.h sys/file.h sys/resource.h sys/stat.h sys/types.h \
+		 unistd.h)
 
-BFD_CC_FOR_BUILD
+AC_CHECK_FUNCS(fcntl fdopen fileno fls getgid getpagesize getrlimit getuid \
+	       sysconf)
 
-AC_CHECK_HEADERS(alloca.h stddef.h string.h strings.h stdlib.h time.h unistd.h wchar.h wctype.h)
-AC_CHECK_HEADERS(fcntl.h sys/file.h sys/time.h sys/stat.h sys/resource.h)
-GCC_HEADER_STDINT(bfd_stdint.h)
-AC_HEADER_TIME
-AC_HEADER_DIRENT
-
-ACX_HEADER_STRING
-AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno fls)
-AC_CHECK_FUNCS(strtoull getrlimit)
-
-AC_CHECK_DECLS(basename)
-AC_CHECK_DECLS(ftello)
-AC_CHECK_DECLS(ftello64)
-AC_CHECK_DECLS(fseeko)
-AC_CHECK_DECLS(fseeko64)
+AC_CHECK_DECLS([basename, ffs, stpcpy, asprintf, vasprintf, strnlen])
+AC_CHECK_DECLS([___lc_codepage_func], [], [], [[#include <locale.h>]])
 
 BFD_BINARY_FOPEN
 
-AC_CHECK_DECLS(ffs)
-AC_CHECK_DECLS(free)
-AC_CHECK_DECLS(getenv)
-AC_CHECK_DECLS(malloc)
-AC_CHECK_DECLS(realloc)
-AC_CHECK_DECLS(stpcpy)
-AC_CHECK_DECLS(strstr)
-AC_CHECK_DECLS(asprintf)
-AC_CHECK_DECLS(vasprintf)
-AC_CHECK_DECLS(snprintf)
-AC_CHECK_DECLS(vsnprintf)
-AC_CHECK_DECLS(strnlen)
+AX_TLS
 
-# Link in zlib if we can.  This allows us to read compressed debug sections.
+# Link in zlib/zstd if we can.  This allows us to read compressed debug sections.
 # This is used only by compress.c.
 AM_ZLIB
+AC_ZSTD
 
 save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS -Werror"
@@ -292,17 +278,16 @@ changequote([,])dnl
   if test -n "$x"; then
     SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
   fi
+fi
+
+SHARED_LIBADD="$SHARED_LIBADD $LTLIBINTL"
 
+if test "$enable_shared" = "yes"; then
   case "${host}" in
   # More hacks to build DLLs on Windows.
   *-*-cygwin*)
     SHARED_LDFLAGS="-no-undefined"
-    SHARED_LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32"
-  ;;
-
-  # Use built-in libintl on macOS, since it is not provided by libc.
-  *-*-darwin*)
-    SHARED_LIBADD="-L`pwd`/../libiberty/pic -L`pwd`/../intl -liberty -lintl"
+    SHARED_LIBADD="-L`pwd`/../libiberty -liberty $SHARED_LIBADD -lcygwin -lkernel32"
   ;;
   esac
 
@@ -403,13 +388,13 @@ selarchs="$f"
 tb=
 
 elf="elf.lo elflink.lo elf-attrs.lo elf-strtab.lo elf-eh-frame.lo
-     dwarf1.lo dwarf2.lo"
+     elf-sframe.lo dwarf1.lo dwarf2.lo"
 coffgen="coffgen.lo dwarf2.lo"
 coff="cofflink.lo $coffgen"
 ecoff="ecofflink.lo $coffgen"
 xcoff="xcofflink.lo $coffgen"
 
-elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo"
+elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-vxworks.lo"
 for vec in $selvecs
 do
     target_size=32
@@ -424,12 +409,15 @@ do
     aarch64_elf64_le_vec)	   tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
     aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
     aarch64_mach_o_vec)		 tb="$tb mach-o-aarch64.lo"; target_size=64 ;;
+    aarch64_pei_le_vec)		 tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
+    aarch64_pe_le_vec)		 tb="$tb pe-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
     alpha_ecoff_le_vec)		 tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
     alpha_elf64_vec)		 tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
     alpha_elf64_fbsd_vec)	 tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
     alpha_vms_vec)		 tb="$tb vms-alpha.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
     alpha_vms_lib_txt_vec)	 tb="$tb vms-lib.lo vms-misc.lo" ;;
     am33_elf32_linux_vec)	 tb="$tb elf32-am33lin.lo elf32.lo $elf" ;;
+    amdgcn_elf64_le_vec)	 tb="$tb elf64-amdgcn.lo elf64.lo $elf"; target_size=64 ;;
     aout0_be_vec)		 tb="$tb aout0.lo aout32.lo" ;;
     aout64_vec)			 tb="$tb demo64.lo aout64.lo"; target_size=64 ;;
     aout_vec)			 tb="$tb host-aout.lo aout32.lo" ;;
@@ -441,8 +429,6 @@ do
     arm_elf32_fdpic_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_nacl_be_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_nacl_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
-    arm_elf32_symbian_be_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
-    arm_elf32_symbian_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_vxworks_be_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_elf32_vxworks_le_vec)	 tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     arm_pe_be_vec)		 tb="$tb pe-arm.lo peigen.lo $coff" ;;
@@ -494,12 +480,12 @@ do
     i386_coff_lynx_vec)		 tb="$tb cf-i386lynx.lo lynx-core.lo $coff" ;;
     i386_elf32_vec)		 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_elf32_fbsd_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
-    i386_elf32_nacl_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_elf32_sol2_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_elf32_vxworks_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_mach_o_vec)		 tb="$tb mach-o-i386.lo" ;;
     i386_msdos_vec)		 tb="$tb i386msdos.lo" ;;
     i386_pe_vec)		 tb="$tb pe-i386.lo peigen.lo $coff" ;;
+    i386_pe_big_vec)		 tb="$tb pe-i386.lo peigen.lo $coff" ;;
     i386_pei_vec)		 tb="$tb pei-i386.lo peigen.lo $coff" ;;
     iamcu_elf32_vec)		 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     ia64_elf32_be_vec)		 tb="$tb elf32-ia64.lo elfxx-ia64.lo elf32.lo $elf" ;;
@@ -511,12 +497,13 @@ do
     ia64_pei_vec)		 tb="$tb pei-ia64.lo pepigen.lo $coff"; target_size=64 ;;
     ip2k_elf32_vec)		 tb="$tb elf32-ip2k.lo elf32.lo $elf" ;;
     iq2000_elf32_vec)		 tb="$tb elf32-iq2000.lo elf32.lo $elf" ;;
-    k1om_elf64_vec)		 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
-    k1om_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
-    l1om_elf64_vec)		 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
-    l1om_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    kvx_elf32_vec)		 tb="$tb elf32-kvx.lo elfxx-kvx.lo elf32.lo $elf $ipa" ;;
+    kvx_elf64_vec)		 tb="$tb elf64-kvx.lo elfxx-kvx.lo elf64.lo $elf $ipa"; target_size=64 ;;
     lm32_elf32_vec)		 tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
     lm32_elf32_fdpic_vec)	 tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
+    loongarch_elf32_vec)	 tb="$tb elf32-loongarch.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf" ;;
+    loongarch_elf64_vec)	 tb="$tb elf64-loongarch.lo elf64.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf"; target_size=64 ;;
+    loongarch64_pei_vec)	 tb="$tb pei-loongarch64.lo pe-loongarch64igen.lo $coff"; target_size=64 ;;
     m32c_elf32_vec)		 tb="$tb elf32-m32c.lo elf32.lo $elf" ;;
     m32r_elf32_vec)		 tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
     m32r_elf32_le_vec)		 tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
@@ -582,6 +569,7 @@ do
     ns32k_aout_pc532mach_vec)	 tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
     ns32k_aout_pc532nbsd_vec)	 tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
     or1k_elf32_vec)		 tb="$tb elf32-or1k.lo elf32.lo $elf" ;;
+    pdb_vec)			 tb="$tb pdb.lo" ;;
     pdp11_aout_vec)		 tb="$tb pdp11.lo" ;;
     pef_vec)			 tb="$tb pef.lo" ;;
     pef_xlib_vec)		 tb="$tb pef.lo" ;;
@@ -595,14 +583,14 @@ do
     powerpc_elf64_vec)		 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf"; target_size=64 ;;
     powerpc_elf64_le_vec)	 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
     powerpc_elf64_fbsd_vec)	 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
-    powerpc_pe_vec)		 tb="$tb pe-ppc.lo peigen.lo $coff" ;;
-    powerpc_pe_le_vec)		 tb="$tb pe-ppc.lo peigen.lo $coff" ;;
-    powerpc_pei_vec)		 tb="$tb pei-ppc.lo peigen.lo $coff" ;;
-    powerpc_pei_le_vec)		 tb="$tb pei-ppc.lo peigen.lo $coff" ;;
+    powerpc_elf64_fbsd_le_vec)	 tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
     powerpc_xcoff_vec)		 tb="$tb coff-rs6000.lo $xcoff" ;;
     pru_elf32_vec)		 tb="$tb elf32-pru.lo elf32.lo $elf" ;;
-    riscv_elf32_vec)		 tb="$tb elf32-riscv.lo elfxx-riscv.lo elf32.lo $elf" ;;
-    riscv_elf64_vec)		 tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf32.lo $elf"; target_size=64 ;;
+    riscv_elf32_vec)		 tb="$tb elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf" ;;
+    riscv_elf64_vec)		 tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
+    riscv_elf32_be_vec)		 tb="$tb elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf" ;;
+    riscv_elf64_be_vec)		 tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
+    riscv64_pei_vec)		 tb="$tb pei-riscv64.lo pe-riscv64igen.lo $coff"; target_size=64 ;;
     rl78_elf32_vec)		 tb="$tb elf32-rl78.lo elf32.lo $elf" ;;
     rs6000_xcoff64_vec)		 tb="$tb coff64-rs6000.lo aix5ppc-core.lo $xcoff"; target_size=64 ;;
     rs6000_xcoff64_aix_vec)	 tb="$tb coff64-rs6000.lo aix5ppc-core.lo $xcoff"; target_size=64 ;;
@@ -613,8 +601,8 @@ do
     rx_elf32_linux_le_vec)	 tb="$tb elf32-rx.lo elf32.lo $elf" ;;
     s390_elf32_vec)		 tb="$tb elf32-s390.lo elf32.lo $elf" ;;
     s390_elf64_vec)		 tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;;
-    score_elf32_be_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
-    score_elf32_le_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
+    score_elf32_be_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;;
+    score_elf32_le_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;;
     sh_coff_vec)		 tb="$tb coff-sh.lo $coff" ;;
     sh_coff_le_vec)		 tb="$tb coff-sh.lo $coff" ;;
     sh_coff_small_vec)		 tb="$tb coff-sh.lo $coff" ;;
@@ -639,7 +627,6 @@ do
     sparc_elf64_sol2_vec)	 tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
     spu_elf32_vec)		 tb="$tb elf32-spu.lo elf32.lo $elf" ;;
     sym_vec)			 tb="$tb xsym.lo" ;;
-    tic30_aout_vec)		 tb="$tb aout-tic30.lo" ;;
     tic30_coff_vec)		 tb="$tb coff-tic30.lo $coffgen" ;;
     tic4x_coff0_vec)		 tb="$tb coff-tic4x.lo $coffgen" ;;
     tic4x_coff0_beh_vec)	 tb="$tb coff-tic4x.lo $coffgen" ;;
@@ -659,7 +646,6 @@ do
     tic6x_elf32_c6000_le_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_be_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     tic6x_elf32_linux_le_vec)	 tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
-    tic80_coff_vec)		 tb="$tb coff-tic80.lo $coff" ;;
     tilegx_elf32_be_vec)	 tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf32_le_vec)	 tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     tilegx_elf64_be_vec)	 tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
@@ -676,22 +662,20 @@ do
     wasm32_elf32_vec)            tb="$tb elf32-wasm32.lo elf32.lo $elf" ;;
     x86_64_coff_vec)		 tb="$tb coff-x86_64.lo $coff"; target_size=64 ;;
     x86_64_elf32_vec)		 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;;
-    x86_64_elf32_nacl_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;;
     x86_64_elf64_vec)		 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
     x86_64_elf64_cloudabi_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
     x86_64_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
-    x86_64_elf64_nacl_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
     x86_64_elf64_sol2_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
     x86_64_mach_o_vec)		 tb="$tb mach-o-x86-64.lo" ;;
     x86_64_pe_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
-    x86_64_pe_be_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
+    x86_64_pe_big_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
     x86_64_pei_vec)		 tb="$tb pei-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
-    xc16x_elf32_vec)		 tb="$tb elf32-xc16x.lo elf32.lo $elf" ;;
     xgate_elf32_vec)		 tb="$tb elf32-xgate.lo elf32.lo $elf" ;;
     xstormy16_elf32_vec)	 tb="$tb elf32-xstormy16.lo elf32.lo $elf" ;;
-    xtensa_elf32_be_vec)	 tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
-    xtensa_elf32_le_vec)	 tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
+    xtensa_elf32_be_vec)	 tb="$tb xtensa-dynconfig.lo xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
+    xtensa_elf32_le_vec)	 tb="$tb xtensa-dynconfig.lo xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
     z80_coff_vec)		 tb="$tb coff-z80.lo reloc16.lo $coffgen" ;;
+    z80_elf32_vec)		 tb="$tb elf32-z80.lo elf32.lo $elf" ;;
     z8k_coff_vec)		 tb="$tb coff-z8k.lo reloc16.lo $coff" ;;
 
     # These appear out of order in targets.c
@@ -776,10 +760,6 @@ case ${host64}-${target64}-${want64} in
     wordsize=64
     bfd64_libs='$(BFD64_LIBS)'
     all_backends='$(BFD64_BACKENDS) $(BFD32_BACKENDS)'
-    if test $BFD_HOST_64_BIT_DEFINED = 0; then
-      AC_MSG_WARN([You have requested a 64 bit BFD configuration, but])
-      AC_MSG_WARN([your compiler may not have a 64 bit integral type])
-    fi
     if test -n "$GCC" ; then
        bad_64bit_gcc=no;
        AC_MSG_CHECKING([for gcc version with buggy 64-bit support])
@@ -836,10 +816,9 @@ if test "${target}" = "${host}"; then
 	;;
   arm-*-freebsd* | arm-*-kfreebsd*-gnu)
 	COREFILE='' ;;
-  arm-*-netbsd* | arm-*-openbsd*)
+  arm*-*-netbsd* | arm-*-openbsd*)
 	COREFILE=netbsd-core.lo
 	;;
-  arm-*-riscix)		COREFILE=trad-core.lo ;;
   hppa*-*-hpux*)	COREFILE=hpux-core.lo ;;
   hppa*-*-hiux*)	COREFILE=hpux-core.lo ;;
   hppa*-*-mpeix*)	COREFILE=hpux-core.lo ;;
@@ -850,25 +829,12 @@ if test "${target}" = "${host}"; then
 	;;
 
 changequote(,)dnl
-  i[3-7]86-sequent-bsd*)
-changequote([,])dnl
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/symmetry.h"'
-	;;
-changequote(,)dnl
-  i[3-7]86-sequent-sysv4*) ;;
-  i[3-7]86-sequent-sysv*)
-changequote([,])dnl
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/symmetry.h"'
-	;;
-changequote(,)dnl
   i[3-7]86-*-bsdi)
 changequote([,])dnl
 	COREFILE=
 	;;
 changequote(,)dnl
-  i[3-7]86-*-bsd* | i[3-7]86-*-freebsd[123] | i[3-7]86-*-freebsd[123]\.* | i[3-7]86-*-freebsd4\.[01234] | i[3-7]86-*-freebsd4\.[01234]\.* | i[3-7]86-*-freebsd*aout*)
+  i[3-7]86-*-bsd* | i[3-7]86-*-freebsd[123] | i[3-7]86-*-freebsd[123]\.* | i[3-7]86-*-freebsd4\.[01234] | i[3-7]86-*-freebsd4\.[01234]\.*)
 changequote([,])dnl
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/i386bsd.h"'
@@ -891,17 +857,6 @@ changequote([,])dnl
 	TRAD_HEADER='"hosts/esix.h"'
 	;;
 changequote(,)dnl
-  i[3-7]86-*-sco3.2v5*)
-changequote([,])dnl
-	COREFILE=sco5-core.lo
-	;;
-changequote(,)dnl
-  i[3-7]86-*-sco* | i[3-7]86-*-isc*)
-changequote([,])dnl
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/i386sco.h"'
-	;;
-changequote(,)dnl
   i[3-7]86-*-mach3*)
 changequote([,])dnl
 	COREFILE=trad-core.lo
@@ -917,16 +872,12 @@ changequote([,])dnl
 	  CORE_HEADER='"hosts/x86-64linux.h"'
 	esac
 	;;
-changequote(,)dnl
-  i[3-7]86-*-isc*)	COREFILE=trad-core.lo ;;
-  i[3-7]86-*-aix*)	COREFILE=aix386-core.lo ;;
-changequote([,])dnl
-  mips-*-netbsd* | mips*-*-openbsd*)
+  mips*-*-netbsd* | mips*-*-openbsd*)
 	COREFILE=netbsd-core.lo
 	;;
-  mips-sgi-irix4*)	COREFILE=irix-core.lo ;;
-  mips-sgi-irix5*)	COREFILE=irix-core.lo ;;
-  mips-sgi-irix6*)	COREFILE=irix-core.lo ;;
+  mips-*-irix*)
+	COREFILE=irix-core.lo
+	;;
   m68*-*-linux-*)
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/m68klinux.h"'
@@ -982,14 +933,6 @@ changequote([,])dnl
   vax-*-netbsd* | vax-*-openbsd*)
 	COREFILE=netbsd-core.lo
 	;;
-  vax-*-ultrix2*)
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/vaxult2.h"'
-	;;
-  vax-*-ultrix*)
-	COREFILE=trad-core.lo
-	TRAD_HEADER='"hosts/vaxult2.h"'
-	;;
   vax-*-linux-*)
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/vaxlinux.h"'
@@ -1007,7 +950,6 @@ changequote([,])dnl
   esac
 
   case "$COREFILE" in
-  aix386-core.lo)	COREFLAG=-DAIX386_CORE ;;
   hppabsd-core.lo)	COREFLAG=-DHPPABSD_CORE ;;
   hpux-core.lo)		COREFLAG=-DHPUX_CORE ;;
   irix-core.lo)		COREFLAG=-DIRIX_CORE ;;
@@ -1016,13 +958,12 @@ changequote([,])dnl
   osf-core.lo)		COREFLAG=-DOSF_CORE ;;
   ptrace-core.lo)	COREFLAG=-DPTRACE_CORE ;;
   rs6000-core.lo)	COREFLAG="$COREFLAG -DAIX_CORE" ;;
-  sco5-core.lo)		COREFLAG="$COREFLAG -DSCO5_CORE" ;;
   trad-core.lo)		COREFLAG="$COREFLAG -DTRAD_CORE" ;;
   esac
 
   # ELF corefile support has several flavors, but all of
   # them use something called <sys/procfs.h>
-  AC_CHECK_HEADERS(sys/procfs.h)
+  BFD_SYS_PROCFS_H
   if test "$ac_cv_header_sys_procfs_h" = yes; then
     BFD_HAVE_SYS_PROCFS_TYPE(prstatus_t)
     BFD_HAVE_SYS_PROCFS_TYPE(prstatus32_t)
@@ -1072,6 +1013,7 @@ AC_SUBST(lt_cv_dlopen_libs)
 # Hopefully a reasonable assumption since fseeko et.al. should be
 # upward compatible.
 AC_CHECK_FUNCS(ftello ftello64 fseeko fseeko64 fopen64)
+AC_CHECK_DECLS([ftello, ftello64, fseeko, fseeko64, fopen64])
 if test x"$ac_cv_func_ftello" = xyes -a x"$ac_cv_func_fseeko" = xyes; then
     AC_CHECK_SIZEOF(off_t)
 fi
@@ -1080,22 +1022,20 @@ bfd_file_ptr="long"
 bfd_ufile_ptr="unsigned long"
 if test x"$ac_cv_func_ftello64" = xyes -a x"$ac_cv_func_fseeko64" = xyes \
 	-o x"${ac_cv_sizeof_off_t}" = x8; then
-    bfd_file_ptr=BFD_HOST_64_BIT
-    bfd_ufile_ptr=BFD_HOST_U_64_BIT
+    bfd_file_ptr=int64_t
+    bfd_ufile_ptr=uint64_t
 fi
 AC_MSG_RESULT($bfd_file_ptr)
 AC_SUBST(bfd_file_ptr)
 AC_SUBST(bfd_ufile_ptr)
 
-dnl AC_CHECK_HEADERS(sys/mman.h)
 AC_FUNC_MMAP
 AC_CHECK_FUNCS(madvise mprotect)
 case ${want_mmap}+${ac_cv_func_mmap_fixed_mapped} in
   true+yes )  AC_DEFINE(USE_MMAP, 1, [Use mmap if it's available?]) ;;
 esac
 
-rm -f doc/config.status
-AC_CONFIG_FILES([Makefile doc/Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in])
+AC_CONFIG_FILES([Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in])
 
 dnl We need this duplication, even though we use AM_PO_SUBDIRS, because of
 dnl our two separate POTFILES.  Yuck.
@@ -1126,3 +1066,5 @@ AC_SUBST(htmldir)
 AC_SUBST(pdfdir)
 
 AC_OUTPUT
+
+GNU_MAKE_JOBSERVER
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/configure.com ./bfd/configure.com
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/configure.com	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/configure.com	2024-02-01 01:47:13.000000000 +0000
@@ -7,7 +7,7 @@
 $! Written by Klaus K"ampf (kkaempf@rmi.de)
 $! Rewritten by Tristan Gingold (gingold@adacore.com)
 $!
-$!   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+$!   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 $!
 $! This file is free software; you can redistribute it and/or modify
 $! it under the terms of the GNU General Public License as published by
@@ -60,59 +60,17 @@
       ERASE(match_pos);
       COPY_TEXT('64');
    ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_64BIT_LONG@', FORWARD, EXACT, rang);
-   IF match_pos <> 0 THEN;
-      POSITION(BEGINNING_OF(match_pos));
-      ERASE(match_pos);
-      COPY_TEXT('0');
-   ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_LONG_LONG@', FORWARD, EXACT, rang);
-   IF match_pos <> 0 THEN;
-      POSITION(BEGINNING_OF(match_pos));
-      ERASE(match_pos);
-      COPY_TEXT('1');
-   ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_64BIT_LONG_LONG@', FORWARD, EXACT, rang);
-   IF match_pos <> 0 THEN;
-      POSITION(BEGINNING_OF(match_pos));
-      ERASE(match_pos);
-      COPY_TEXT('1');
-   ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_64_BIT_DEFINED@', FORWARD, EXACT, rang);
-   IF match_pos <> 0 THEN;
-      POSITION(BEGINNING_OF(match_pos));
-      ERASE(match_pos);
-      COPY_TEXT('1');
-   ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_64_BIT@', FORWARD, EXACT, rang);
-   IF match_pos <> 0 THEN;
-      POSITION(BEGINNING_OF(match_pos));
-      ERASE(match_pos);
-      COPY_TEXT('__int64');
-   ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_U_64_BIT@', FORWARD, EXACT, rang);
-   IF match_pos <> 0 THEN;
-      POSITION(BEGINNING_OF(match_pos));
-      ERASE(match_pos);
-      COPY_TEXT('unsigned __int64');
-   ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOSTPTR_T@', FORWARD, EXACT, rang);
-   IF match_pos <> 0 THEN;
-      POSITION(BEGINNING_OF(match_pos));
-      ERASE(match_pos);
-      COPY_TEXT('unsigned __int64');
-   ENDIF;
    match_pos := SEARCH_QUIETLY('@bfd_file_ptr@', FORWARD, EXACT, rang);
    IF match_pos <> 0 THEN;
       POSITION(BEGINNING_OF(match_pos));
       ERASE(match_pos);
       COPY_TEXT('bfd_signed_vma');
    ENDIF;
-   match_pos := SEARCH_QUIETLY('unsigned @bfd_file_ptr@ ufile_ptr', FORWARD, EXACT, rang);
+   match_pos := SEARCH_QUIETLY('@bfd_ufile_ptr@', FORWARD, EXACT, rang);
    IF match_pos <> 0 THEN;
       POSITION(BEGINNING_OF(match_pos));
       ERASE(match_pos);
-      COPY_TEXT('bfd_vma ufile_ptr');
+      COPY_TEXT('bfd_vma');
    ENDIF;
    match_pos := SEARCH_QUIETLY('@supports_plugins@', FORWARD, EXACT, rang);
    IF match_pos <> 0 THEN;
@@ -150,31 +108,29 @@
       ERASE(match_pos);
       COPY_TEXT('32');
    ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_64BIT_LONG@', FORWARD, EXACT, rang);
+   match_pos := SEARCH_QUIETLY('@bfd_default_target_size@', FORWARD, EXACT, rang);
    IF match_pos <> 0 THEN;
       POSITION(BEGINNING_OF(match_pos));
       ERASE(match_pos);
-      COPY_TEXT('0');
+      COPY_TEXT('32');
    ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_64_BIT_DEFINED@', FORWARD, EXACT, rang);
+   match_pos := SEARCH_QUIETLY('@bfd_file_ptr@', FORWARD, EXACT, rang);
    IF match_pos <> 0 THEN;
       POSITION(BEGINNING_OF(match_pos));
       ERASE(match_pos);
-      COPY_TEXT('__DECC');
-      SPLIT_LINE;
-      COPY_TEXT('#include <ints.h>');
+      COPY_TEXT('bfd_signed_vma');
    ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_64_BIT@', FORWARD, EXACT, rang);
+   match_pos := SEARCH_QUIETLY('@bfd_ufile_ptr@', FORWARD, EXACT, rang);
    IF match_pos <> 0 THEN;
       POSITION(BEGINNING_OF(match_pos));
       ERASE(match_pos);
-      COPY_TEXT('int64');
+      COPY_TEXT('bfd_vma');
    ENDIF;
-   match_pos := SEARCH_QUIETLY('@BFD_HOST_U_64_BIT@', FORWARD, EXACT, rang);
+   match_pos := SEARCH_QUIETLY('@supports_plugins@', FORWARD, EXACT, rang);
    IF match_pos <> 0 THEN;
       POSITION(BEGINNING_OF(match_pos));
       ERASE(match_pos);
-      COPY_TEXT('uint64');
+      COPY_TEXT('0');
    ENDIF;
    WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file"));
    QUIT
@@ -232,20 +188,13 @@
    IF match_pos <> 0 THEN;
       POSITION(BEGINNING_OF(match_pos));
       ERASE(match_pos);
-      COPY_TEXT('"<http://www.sourceware.org/bugzilla/>"');
+      COPY_TEXT('"<https://www.sourceware.org/bugzilla/>"');
    ENDIF;
    WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file"));
    QUIT
 $  EOD
 $!
 $!
-$! create bfd_stdint.h
-$!
-$ write sys$output "Generate `bfd_stdint.h'"
-$ create []bfd_stdint.h
-#include <inttypes.h>
-$!
-$!
 $! create targmatch.h
 $!
 $ write sys$output "Generate `targmatch.h'"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/configure.host ./bfd/configure.host
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/configure.host	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/configure.host	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 #
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/corefile.c ./bfd/corefile.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/corefile.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/corefile.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Core file generic interface routines for BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -111,7 +111,7 @@ FUNCTION
 	core_file_matches_executable_p
 
 SYNOPSIS
-	bfd_boolean core_file_matches_executable_p
+	bool core_file_matches_executable_p
 	  (bfd *core_bfd, bfd *exec_bfd);
 
 DESCRIPTION
@@ -120,13 +120,13 @@ DESCRIPTION
 	@var{exec_bfd}, <<FALSE>> otherwise.
 */
 
-bfd_boolean
+bool
 core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
 {
   if (core_bfd->format != bfd_core || exec_bfd->format != bfd_object)
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   return BFD_SEND (core_bfd, _core_file_matches_executable_p,
@@ -138,7 +138,7 @@ FUNCTION
 	generic_core_file_matches_executable_p
 
 SYNOPSIS
-	bfd_boolean generic_core_file_matches_executable_p
+	bool generic_core_file_matches_executable_p
 	  (bfd *core_bfd, bfd *exec_bfd);
 
 DESCRIPTION
@@ -154,7 +154,7 @@ DESCRIPTION
 	where we really don't know whether they match or not.
 */
 
-bfd_boolean
+bool
 generic_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
 {
   const char *exec;
@@ -162,7 +162,7 @@ generic_core_file_matches_executable_p (
   const char *last_slash;
 
   if (exec_bfd == NULL || core_bfd == NULL)
-    return TRUE;
+    return true;
 
   /* The cast below is to avoid a compiler warning due to the assignment
      of the const char * returned by bfd_core_file_failing_command to a
@@ -171,11 +171,11 @@ generic_core_file_matches_executable_p (
 
   core = bfd_core_file_failing_command (core_bfd);
   if (core == NULL)
-    return TRUE;
+    return true;
 
   exec = bfd_get_filename (exec_bfd);
   if (exec == NULL)
-    return TRUE;
+    return true;
 
   last_slash = strrchr (core, '/');
   if (last_slash != NULL)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-aarch64.c ./bfd/cpu-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-aarch64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-aarch64.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for AArch64.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -39,8 +39,8 @@ compatible (const bfd_arch_info_type * a
   if (a->mach == b->mach)
     return a;
 
-  /* Don't allow mixing ilp32 with lp64.  */
-  if ((a->mach & bfd_mach_aarch64_ilp32) != (b->mach & bfd_mach_aarch64_ilp32))
+  /* Don't allow mixing data models.  */
+  if ((a->mach ^ b->mach) & (bfd_mach_aarch64_ilp32 | bfd_mach_aarch64_llp64))
     return NULL;
 
   /* Otherwise if either a or b is the 'default' machine
@@ -73,17 +73,29 @@ processors[] =
   { bfd_mach_aarch64,	  "cortex-a65"	    },
   { bfd_mach_aarch64,	  "cortex-a65ae"    },
   { bfd_mach_aarch64,	  "cortex-a76ae"    },
-  { bfd_mach_aarch64,	  "cortex-a77"	    }
+  { bfd_mach_aarch64,	  "cortex-a77"	    },
+  { bfd_mach_aarch64,	  "cortex-a720"	    },
+  { bfd_mach_aarch64,     "cortex-x3"       },
+  { bfd_mach_aarch64,     "cortex-x4"       },
 };
 
-static bfd_boolean
+static bool
 scan (const struct bfd_arch_info *info, const char *string)
 {
   int i;
 
   /* First test for an exact match.  */
   if (strcasecmp (string, info->printable_name) == 0)
-    return TRUE;
+    return true;
+
+  /* If there is a prefix of "aarch64:" then skip it.  */
+  const char * colon;
+  if ((colon = strchr (string, ':')) != NULL)
+    {
+      if (strncasecmp (string, "aarch64", colon - string) != 0)
+	return false;
+      string = colon + 1;
+    }
 
   /* Next check for a processor name instead of an Architecture name.  */
   for (i = sizeof (processors) / sizeof (processors[0]); i--;)
@@ -93,37 +105,54 @@ scan (const struct bfd_arch_info *info,
     }
 
   if (i != -1 && info->mach == processors[i].mach)
-    return TRUE;
+    return true;
 
   /* Finally check for the default architecture.  */
   if (strcasecmp (string, "aarch64") == 0)
     return info->the_default;
 
-  return FALSE;
+  return false;
 }
 
-#define N(NUMBER, PRINT, WORDSIZE, DEFAULT, NEXT)		\
-  { WORDSIZE, WORDSIZE, 8, bfd_arch_aarch64, NUMBER,		\
-    "aarch64", PRINT, 4, DEFAULT, compatible, scan,		\
-      bfd_arch_default_fill, NEXT, 0 }
+/* Figure out if llp64 is default */
+#if DEFAULT_VECTOR == aarch64_pe_le_vec
+#define LLP64_DEFAULT true
+#define AARCH64_DEFAULT false
+#else
+#define LLP64_DEFAULT false
+#define AARCH64_DEFAULT true
+#endif
+
+#define N(NUMBER, PRINT, WORDSIZE, ADDRSIZE, DEFAULT, NEXT)		\
+  { WORDSIZE, ADDRSIZE, 8, bfd_arch_aarch64, NUMBER,		\
+     "aarch64", PRINT, 4, DEFAULT, compatible, scan,		\
+       bfd_arch_default_fill, NEXT, 0 }
+
+ static const bfd_arch_info_type bfd_aarch64_arch_v8_r =
+  N (bfd_mach_aarch64_8R, "aarch64:armv8-r", 64, 64, false, NULL);
 
 static const bfd_arch_info_type bfd_aarch64_arch_ilp32 =
-  N (bfd_mach_aarch64_ilp32, "aarch64:ilp32", 32, FALSE, NULL);
+  N (bfd_mach_aarch64_ilp32, "aarch64:ilp32", 32, 32, false,
+     &bfd_aarch64_arch_v8_r);
+
+static const bfd_arch_info_type bfd_aarch64_arch_llp64 =
+  N (bfd_mach_aarch64_llp64, "aarch64:llp64", 32, 64, LLP64_DEFAULT,
+     &bfd_aarch64_arch_ilp32);
 
-const bfd_arch_info_type bfd_aarch64_arch =
-  N (0, "aarch64", 64, TRUE, &bfd_aarch64_arch_ilp32);
+ const bfd_arch_info_type bfd_aarch64_arch =
+  N (0, "aarch64", 64, 64, AARCH64_DEFAULT, &bfd_aarch64_arch_llp64);
 
-bfd_boolean
+bool
 bfd_is_aarch64_special_symbol_name (const char *name, int type)
 {
   if (!name || name[0] != '$')
-    return FALSE;
+    return false;
   if (name[1] == 'x' || name[1] == 'd')
     type &= BFD_AARCH64_SPECIAL_SYM_TYPE_MAP;
   else if (name[1] == 'm' || name[1] == 'f' || name[1] == 'p')
     type &= BFD_AARCH64_SPECIAL_SYM_TYPE_TAG;
   else
-    return FALSE;
+    return false;
 
   return (type != 0 && (name[2] == 0 || name[2] == '.'));
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-aarch64.h ./bfd/cpu-aarch64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-aarch64.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-aarch64.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF AArch64 mapping symbol support
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -21,5 +21,5 @@
 #define BFD_AARCH64_SPECIAL_SYM_TYPE_TAG	(1 << 1)
 #define BFD_AARCH64_SPECIAL_SYM_TYPE_OTHER	(1 << 2)
 #define BFD_AARCH64_SPECIAL_SYM_TYPE_ANY	(~0)
-extern bfd_boolean bfd_is_aarch64_special_symbol_name
+extern bool bfd_is_aarch64_special_symbol_name
   (const char * name, int type);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-alpha.c ./bfd/cpu-alpha.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-alpha.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-alpha.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Alpha architecture.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -45,10 +45,10 @@
 /* These exist only so that we can reasonably disassemble PALcode.  */
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (64, 64, bfd_mach_alpha_ev4, "alpha:ev4", FALSE, NN(1)),
-  N (64, 64, bfd_mach_alpha_ev5, "alpha:ev5", FALSE, NN(2)),
-  N (64, 64, bfd_mach_alpha_ev6, "alpha:ev6", FALSE, 0),
+  N (64, 64, bfd_mach_alpha_ev4, "alpha:ev4", false, NN(1)),
+  N (64, 64, bfd_mach_alpha_ev5, "alpha:ev5", false, NN(2)),
+  N (64, 64, bfd_mach_alpha_ev6, "alpha:ev6", false, 0),
 };
 
 const bfd_arch_info_type bfd_alpha_arch =
-  N (64, 64, 0, "alpha", TRUE, NN(0));
+  N (64, 64, 0, "alpha", true, NN(0));
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-amdgcn.c ./bfd/cpu-amdgcn.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-amdgcn.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/cpu-amdgcn.c	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,62 @@
+/* BFD support for the AMDGCN GPU architecture.
+
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+#define N(MACHINE, PRINTABLE_NAME, DEFAULT, NEXT)       \
+  {                                                     \
+    32, /* 32 bits in a word */                         \
+    64, /* 64 bits in an address */                     \
+    8,  /* 8 bits in a byte */                          \
+    bfd_arch_amdgcn,                                    \
+    MACHINE,                                            \
+    "amdgcn",                                           \
+    PRINTABLE_NAME,                                     \
+    3, /* section align power */                        \
+    DEFAULT,                                            \
+    bfd_default_compatible,                             \
+    bfd_default_scan,                                   \
+    bfd_arch_default_fill,                              \
+    NEXT,                                               \
+    0                                                   \
+  }
+
+#define NN(index) (&arch_info_struct[index])
+
+static const bfd_arch_info_type arch_info_struct[] =
+{
+  N (bfd_mach_amdgcn_gfx904, "amdgcn:gfx904", false, NN (1)),
+  N (bfd_mach_amdgcn_gfx906, "amdgcn:gfx906", false, NN (2)),
+  N (bfd_mach_amdgcn_gfx908, "amdgcn:gfx908", false, NN (3)),
+  N (bfd_mach_amdgcn_gfx90a, "amdgcn:gfx90a", false, NN (4)),
+  N (bfd_mach_amdgcn_gfx1010, "amdgcn:gfx1010", false, NN (5)),
+  N (bfd_mach_amdgcn_gfx1011, "amdgcn:gfx1011", false, NN (6)),
+  N (bfd_mach_amdgcn_gfx1012, "amdgcn:gfx1012", false, NN (7)),
+  N (bfd_mach_amdgcn_gfx1030, "amdgcn:gfx1030", false, NN (8)),
+  N (bfd_mach_amdgcn_gfx1031, "amdgcn:gfx1031", false, NN (9)),
+  N (bfd_mach_amdgcn_gfx1032, "amdgcn:gfx1032", false, NN (10)),
+  N (bfd_mach_amdgcn_gfx1100, "amdgcn:gfx1100", false, NN (11)),
+  N (bfd_mach_amdgcn_gfx1101, "amdgcn:gfx1101", false, NN (12)),
+  N (bfd_mach_amdgcn_gfx1102, "amdgcn:gfx1102", false, NULL)
+};
+
+const bfd_arch_info_type bfd_amdgcn_arch =
+  N (bfd_mach_amdgcn_gfx900, "amdgcn:gfx900", true, NN (0));
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-arc.c ./bfd/cpu-arc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-arc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-arc.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ARC processor
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
    Contributed by Doug Evans (dje@cygnus.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -46,17 +46,17 @@ arc_compatible (const bfd_arch_info_type
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  ARC (bfd_mach_arc_arc600, "A6"    , FALSE, &arch_info_struct[1]),
-  ARC (bfd_mach_arc_arc601, "ARC601", FALSE, &arch_info_struct[2]),
-  ARC (bfd_mach_arc_arc700, "ARC700", FALSE, &arch_info_struct[3]),
-  ARC (bfd_mach_arc_arc700, "A7",     FALSE, &arch_info_struct[4]),
-  ARC (bfd_mach_arc_arcv2,  "ARCv2",  FALSE, &arch_info_struct[5]),
-  ARC (bfd_mach_arc_arcv2,  "EM",     FALSE, &arch_info_struct[6]),
-  ARC (bfd_mach_arc_arcv2,  "HS",     FALSE, NULL),
+  ARC (bfd_mach_arc_arc600, "A6"    , false, &arch_info_struct[1]),
+  ARC (bfd_mach_arc_arc601, "ARC601", false, &arch_info_struct[2]),
+  ARC (bfd_mach_arc_arc700, "ARC700", false, &arch_info_struct[3]),
+  ARC (bfd_mach_arc_arc700, "A7",     false, &arch_info_struct[4]),
+  ARC (bfd_mach_arc_arcv2,  "ARCv2",  false, &arch_info_struct[5]),
+  ARC (bfd_mach_arc_arcv2,  "EM",     false, &arch_info_struct[6]),
+  ARC (bfd_mach_arc_arcv2,  "HS",     false, NULL),
 };
 
 const bfd_arch_info_type bfd_arc_arch =
-  ARC (bfd_mach_arc_arc600, "ARC600", TRUE, &arch_info_struct[0]);
+  ARC (bfd_mach_arc_arc600, "ARC600", true, &arch_info_struct[0]);
 
 /* ARC-specific "compatible" function.  The general rule is that if A and B are
    compatible, then this function should return architecture that is more
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-arm.c ./bfd/cpu-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-arm.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-arm.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ARM processor
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
    Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -150,6 +150,9 @@ processors[] =
   { bfd_mach_arm_8,	  "cortex-a76"	    },
   { bfd_mach_arm_8,	  "cortex-a76ae"    },
   { bfd_mach_arm_8,	  "cortex-a77"	    },
+  { bfd_mach_arm_8,	  "cortex-a78"	    },
+  { bfd_mach_arm_8,	  "cortex-a78ae"    },
+  { bfd_mach_arm_8,	  "cortex-a78c"     },
   { bfd_mach_arm_6SM,	  "cortex-m0"	    },
   { bfd_mach_arm_6SM,	  "cortex-m0plus"   },
   { bfd_mach_arm_6SM,	  "cortex-m1"	    },
@@ -163,8 +166,11 @@ processors[] =
   { bfd_mach_arm_7,	  "cortex-r4f"	    },
   { bfd_mach_arm_7,	  "cortex-r5"	    },
   { bfd_mach_arm_8R,	  "cortex-r52"	    },
+  { bfd_mach_arm_8R,	  "cortex-r52plus"	    },
   { bfd_mach_arm_7,	  "cortex-r7"	    },
   { bfd_mach_arm_7,	  "cortex-r8"	    },
+  { bfd_mach_arm_8,	  "cortex-x1"	    },
+  { bfd_mach_arm_8,	  "cortex-x1c"	    },
   { bfd_mach_arm_4T,	  "ep9312"	    },
   { bfd_mach_arm_8,	  "exynos-m1"	    },
   { bfd_mach_arm_4,	  "fa526"	    },
@@ -188,20 +194,30 @@ processors[] =
   { bfd_mach_arm_XScale,  "xscale"	    },
   { bfd_mach_arm_8,	  "xgene1"	    },
   { bfd_mach_arm_8,	  "xgene2"	    },
+  { bfd_mach_arm_9,	  "cortex-a710"	    },
   { bfd_mach_arm_ep9312,  "ep9312"	    },
   { bfd_mach_arm_iWMMXt,  "iwmmxt"	    },
   { bfd_mach_arm_iWMMXt2, "iwmmxt2"	    },
   { bfd_mach_arm_unknown, "arm_any"	    }
 };
 
-static bfd_boolean
+static bool
 scan (const struct bfd_arch_info *info, const char *string)
 {
   int  i;
 
   /* First test for an exact match.  */
   if (strcasecmp (string, info->printable_name) == 0)
-    return TRUE;
+    return true;
+
+  /* If there is a prefix of "arm:" then skip it.  */
+  const char * colon;
+  if ((colon = strchr (string, ':')) != NULL)
+    {
+      if (strncasecmp (string, "arm", colon - string) != 0)
+	return false;
+      string = colon + 1;
+    }
 
   /* Next check for a processor name instead of an Architecture name.  */
   for (i = sizeof (processors) / sizeof (processors[0]); i--;)
@@ -211,13 +227,13 @@ scan (const struct bfd_arch_info *info,
     }
 
   if (i != -1 && info->mach == processors [i].mach)
-    return TRUE;
+    return true;
 
   /* Finally check for the default architecture.  */
   if (strcasecmp (string, "arm") == 0)
     return info->the_default;
 
-  return FALSE;
+  return false;
 }
 
 #define N(number, print, default, next)  \
@@ -226,38 +242,39 @@ scan (const struct bfd_arch_info *info,
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (bfd_mach_arm_2,         "armv2",          FALSE, & arch_info_struct[1]),
-  N (bfd_mach_arm_2a,        "armv2a",         FALSE, & arch_info_struct[2]),
-  N (bfd_mach_arm_3,         "armv3",          FALSE, & arch_info_struct[3]),
-  N (bfd_mach_arm_3M,        "armv3m",         FALSE, & arch_info_struct[4]),
-  N (bfd_mach_arm_4,         "armv4",          FALSE, & arch_info_struct[5]),
-  N (bfd_mach_arm_4T,        "armv4t",         FALSE, & arch_info_struct[6]),
-  N (bfd_mach_arm_5,         "armv5",          FALSE, & arch_info_struct[7]),
-  N (bfd_mach_arm_5T,        "armv5t",         FALSE, & arch_info_struct[8]),
-  N (bfd_mach_arm_5TE,       "armv5te",        FALSE, & arch_info_struct[9]),
-  N (bfd_mach_arm_XScale,    "xscale",         FALSE, & arch_info_struct[10]),
-  N (bfd_mach_arm_ep9312,    "ep9312",         FALSE, & arch_info_struct[11]),
-  N (bfd_mach_arm_iWMMXt,    "iwmmxt",         FALSE, & arch_info_struct[12]),
-  N (bfd_mach_arm_iWMMXt2,   "iwmmxt2",        FALSE, & arch_info_struct[13]),
-  N (bfd_mach_arm_5TEJ,      "armv5tej",       FALSE, & arch_info_struct[14]),
-  N (bfd_mach_arm_6,         "armv6",          FALSE, & arch_info_struct[15]),
-  N (bfd_mach_arm_6KZ,       "armv6kz",        FALSE, & arch_info_struct[16]),
-  N (bfd_mach_arm_6T2,       "armv6t2",        FALSE, & arch_info_struct[17]),
-  N (bfd_mach_arm_6K,        "armv6k",         FALSE, & arch_info_struct[18]),
-  N (bfd_mach_arm_7,         "armv7",          FALSE, & arch_info_struct[19]),
-  N (bfd_mach_arm_6M,        "armv6-m",        FALSE, & arch_info_struct[20]),
-  N (bfd_mach_arm_6SM,       "armv6s-m",       FALSE, & arch_info_struct[21]),
-  N (bfd_mach_arm_7EM,       "armv7e-m",       FALSE, & arch_info_struct[22]),
-  N (bfd_mach_arm_8,         "armv8-a",        FALSE, & arch_info_struct[23]),
-  N (bfd_mach_arm_8R,        "armv8-r",        FALSE, & arch_info_struct[24]),
-  N (bfd_mach_arm_8M_BASE,   "armv8-m.base",   FALSE, & arch_info_struct[25]),
-  N (bfd_mach_arm_8M_MAIN,   "armv8-m.main",   FALSE, & arch_info_struct[26]),
-  N (bfd_mach_arm_8_1M_MAIN, "armv8.1-m.main", FALSE, & arch_info_struct[27]),
-  N (bfd_mach_arm_unknown,   "arm_any",        FALSE, NULL)
+  N (bfd_mach_arm_2,         "armv2",          false, & arch_info_struct[1]),
+  N (bfd_mach_arm_2a,        "armv2a",         false, & arch_info_struct[2]),
+  N (bfd_mach_arm_3,         "armv3",          false, & arch_info_struct[3]),
+  N (bfd_mach_arm_3M,        "armv3m",         false, & arch_info_struct[4]),
+  N (bfd_mach_arm_4,         "armv4",          false, & arch_info_struct[5]),
+  N (bfd_mach_arm_4T,        "armv4t",         false, & arch_info_struct[6]),
+  N (bfd_mach_arm_5,         "armv5",          false, & arch_info_struct[7]),
+  N (bfd_mach_arm_5T,        "armv5t",         false, & arch_info_struct[8]),
+  N (bfd_mach_arm_5TE,       "armv5te",        false, & arch_info_struct[9]),
+  N (bfd_mach_arm_XScale,    "xscale",         false, & arch_info_struct[10]),
+  N (bfd_mach_arm_ep9312,    "ep9312",         false, & arch_info_struct[11]),
+  N (bfd_mach_arm_iWMMXt,    "iwmmxt",         false, & arch_info_struct[12]),
+  N (bfd_mach_arm_iWMMXt2,   "iwmmxt2",        false, & arch_info_struct[13]),
+  N (bfd_mach_arm_5TEJ,      "armv5tej",       false, & arch_info_struct[14]),
+  N (bfd_mach_arm_6,         "armv6",          false, & arch_info_struct[15]),
+  N (bfd_mach_arm_6KZ,       "armv6kz",        false, & arch_info_struct[16]),
+  N (bfd_mach_arm_6T2,       "armv6t2",        false, & arch_info_struct[17]),
+  N (bfd_mach_arm_6K,        "armv6k",         false, & arch_info_struct[18]),
+  N (bfd_mach_arm_7,         "armv7",          false, & arch_info_struct[19]),
+  N (bfd_mach_arm_6M,        "armv6-m",        false, & arch_info_struct[20]),
+  N (bfd_mach_arm_6SM,       "armv6s-m",       false, & arch_info_struct[21]),
+  N (bfd_mach_arm_7EM,       "armv7e-m",       false, & arch_info_struct[22]),
+  N (bfd_mach_arm_8,         "armv8-a",        false, & arch_info_struct[23]),
+  N (bfd_mach_arm_8R,        "armv8-r",        false, & arch_info_struct[24]),
+  N (bfd_mach_arm_8M_BASE,   "armv8-m.base",   false, & arch_info_struct[25]),
+  N (bfd_mach_arm_8M_MAIN,   "armv8-m.main",   false, & arch_info_struct[26]),
+  N (bfd_mach_arm_8_1M_MAIN, "armv8.1-m.main", false, & arch_info_struct[27]),
+  N (bfd_mach_arm_9,         "armv9-a",        false, & arch_info_struct[28]),
+  N (bfd_mach_arm_unknown,   "arm_any",        false, NULL)
 };
 
 const bfd_arch_info_type bfd_arm_arch =
-  N (0, "arm", TRUE, & arch_info_struct[0]);
+  N (0, "arm", true, & arch_info_struct[0]);
 
 /* Support functions used by both the COFF and ELF versions of the ARM port.  */
 
@@ -266,7 +283,7 @@ const bfd_arch_info_type bfd_arm_arch =
    different possible ARM architecture variants.
    Returns TRUE if they were merged successfully or FALSE otherwise.  */
 
-bfd_boolean
+bool
 bfd_arm_merge_machines (bfd *ibfd, bfd *obfd)
 {
   unsigned int in  = bfd_get_mach (ibfd);
@@ -300,11 +317,11 @@ bfd_arm_merge_machines (bfd *ibfd, bfd *
 	       || out == bfd_mach_arm_iWMMXt2))
     {
       /* xgettext: c-format */
-      _bfd_error_handler (_("\
-error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"),
+      _bfd_error_handler (_("error: %pB is compiled for the EP9312, "
+			    "whereas %pB is compiled for XScale"),
 			  ibfd, obfd);
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
   else if (out == bfd_mach_arm_ep9312
 	   && (in == bfd_mach_arm_XScale
@@ -312,18 +329,18 @@ error: %pB is compiled for the EP9312, w
 	       || in == bfd_mach_arm_iWMMXt2))
     {
       /* xgettext: c-format */
-      _bfd_error_handler (_("\
-error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"),
+      _bfd_error_handler (_("error: %pB is compiled for the EP9312, "
+			    "whereas %pB is compiled for XScale"),
 			  obfd, ibfd);
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
   else if (in > out)
     bfd_set_arch_mach (obfd, bfd_arch_arm, in);
   /* else
      Nothing to do.  */
 
-  return TRUE;
+  return true;
 }
 
 typedef struct
@@ -334,7 +351,7 @@ typedef struct
   char		name[1];	/* Start of the name+desc data.  */
 } arm_Note;
 
-static bfd_boolean
+static bool
 arm_check_note (bfd *abfd,
 		bfd_byte *buffer,
 		bfd_size_type buffer_size,
@@ -347,7 +364,7 @@ arm_check_note (bfd *abfd,
   char *	descr;
 
   if (buffer_size < offsetof (arm_Note, name))
-    return FALSE;
+    return false;
 
   /* We have to extract the values this way to allow for a
      host whose endian-ness is different from the target.  */
@@ -358,20 +375,20 @@ arm_check_note (bfd *abfd,
 
   /* Check for buffer overflow.  */
   if (namesz + descsz + offsetof (arm_Note, name) > buffer_size)
-    return FALSE;
+    return false;
 
   if (expected_name == NULL)
     {
       if (namesz != 0)
-	return FALSE;
+	return false;
     }
   else
     {
       if (namesz != ((strlen (expected_name) + 1 + 3) & ~3))
-	return FALSE;
+	return false;
 
       if (strcmp (descr, expected_name) != 0)
-	return FALSE;
+	return false;
 
       descr += (namesz + 3) & ~3;
     }
@@ -382,12 +399,12 @@ arm_check_note (bfd *abfd,
   if (description_return != NULL)
     * description_return = descr;
 
-  return TRUE;
+  return true;
 }
 
 #define NOTE_ARCH_STRING	"arch: "
 
-bfd_boolean
+bool
 bfd_arm_update_notes (bfd *abfd, const char *note_section)
 {
   asection *	 arm_arch_section;
@@ -401,12 +418,13 @@ bfd_arm_update_notes (bfd *abfd, const c
      different.  */
   arm_arch_section = bfd_get_section_by_name (abfd, note_section);
 
-  if (arm_arch_section == NULL)
-    return TRUE;
+  if (arm_arch_section == NULL
+      || (arm_arch_section->flags & SEC_HAS_CONTENTS) == 0)
+    return true;
 
   buffer_size = arm_arch_section->size;
   if (buffer_size == 0)
-    return FALSE;
+    return false;
 
   if (!bfd_malloc_and_get_section (abfd, arm_arch_section, &buffer))
     goto FAIL;
@@ -455,12 +473,11 @@ bfd_arm_update_notes (bfd *abfd, const c
     }
 
   free (buffer);
-  return TRUE;
+  return true;
 
  FAIL:
-  if (buffer != NULL)
-    free (buffer);
-  return FALSE;
+  free (buffer);
+  return false;
 }
 
 
@@ -505,7 +522,8 @@ bfd_arm_get_mach_from_notes (bfd *abfd,
      different.  */
   arm_arch_section = bfd_get_section_by_name (abfd, note_section);
 
-  if (arm_arch_section == NULL)
+  if (arm_arch_section == NULL
+      || (arm_arch_section->flags & SEC_HAS_CONTENTS) == 0)
     return bfd_mach_arm_unknown;
 
   buffer_size = arm_arch_section->size;
@@ -528,19 +546,18 @@ bfd_arm_get_mach_from_notes (bfd *abfd,
       }
 
  FAIL:
-  if (buffer != NULL)
-    free (buffer);
+  free (buffer);
   return bfd_mach_arm_unknown;
 }
 
-bfd_boolean
+bool
 bfd_is_arm_special_symbol_name (const char * name, int type)
 {
   /* The ARM compiler outputs several obsolete forms.  Recognize them
      in addition to the standard $a, $t and $d.  We are somewhat loose
      in what we accept here, since the full set is not documented.  */
   if (!name || name[0] != '$')
-    return FALSE;
+    return false;
   if (name[1] == 'a' || name[1] == 't' || name[1] == 'd')
     type &= BFD_ARM_SPECIAL_SYM_TYPE_MAP;
   else if (name[1] == 'm' || name[1] == 'f' || name[1] == 'p')
@@ -548,7 +565,7 @@ bfd_is_arm_special_symbol_name (const ch
   else if (name[1] >= 'a' && name[1] <= 'z')
     type &= BFD_ARM_SPECIAL_SYM_TYPE_OTHER;
   else
-    return FALSE;
+    return false;
 
   return (type != 0 && (name[2] == 0 || name[2] == '.'));
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-arm.h ./bfd/cpu-arm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-arm.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-arm.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ARM processor
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -19,10 +19,10 @@
    MA 02110-1301, USA.  */
 
 /* ARM Note section processing.  */
-extern bfd_boolean bfd_arm_merge_machines
+extern bool bfd_arm_merge_machines
   (bfd *, bfd *);
 
-extern bfd_boolean bfd_arm_update_notes
+extern bool bfd_arm_update_notes
   (bfd *, const char *);
 
 extern unsigned int bfd_arm_get_mach_from_notes
@@ -34,6 +34,6 @@ extern unsigned int bfd_arm_get_mach_fro
 #define BFD_ARM_SPECIAL_SYM_TYPE_OTHER	(1 << 2)
 #define BFD_ARM_SPECIAL_SYM_TYPE_ANY	(~0)
 
-extern bfd_boolean bfd_is_arm_special_symbol_name
+extern bool bfd_is_arm_special_symbol_name
   (const char *, int);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-avr.c ./bfd/cpu-avr.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-avr.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-avr.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for the AVR architecture.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by Denis Chertykov <denisc@overta.ru>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -101,64 +101,64 @@ compatible (const bfd_arch_info_type * a
 static const bfd_arch_info_type arch_info_struct[] =
 {
   /* Assembler only.  */
-  N (16, bfd_mach_avr1, "avr:1", FALSE, & arch_info_struct[1]),
+  N (16, bfd_mach_avr1, "avr:1", false, & arch_info_struct[1]),
 
   /* Classic, <= 8K.  */
-  N (16, bfd_mach_avr2, "avr:2", FALSE, & arch_info_struct[2]),
+  N (16, bfd_mach_avr2, "avr:2", false, & arch_info_struct[2]),
 
   /* Classic + MOVW, <= 8K.  */
-  N (16, bfd_mach_avr25, "avr:25", FALSE, & arch_info_struct[3]),
+  N (16, bfd_mach_avr25, "avr:25", false, & arch_info_struct[3]),
 
   /* Classic, > 8K, <= 64K.  */
   /* TODO:  addr_bits should be 16, but set to 22 for some following
      version of GCC (from 4.3) for backward compatibility.  */
-  N (22, bfd_mach_avr3, "avr:3", FALSE, & arch_info_struct[4]),
+  N (22, bfd_mach_avr3, "avr:3", false, & arch_info_struct[4]),
 
   /* Classic, == 128K.  */
-  N (22, bfd_mach_avr31, "avr:31", FALSE, & arch_info_struct[5]),
+  N (22, bfd_mach_avr31, "avr:31", false, & arch_info_struct[5]),
 
   /* Classic + MOVW + JMP/CALL, > 8K, <= 64K. */
-  N (16, bfd_mach_avr35, "avr:35", FALSE, & arch_info_struct[6]),
+  N (16, bfd_mach_avr35, "avr:35", false, & arch_info_struct[6]),
 
   /* Enhanced, <= 8K.  */
-  N (16, bfd_mach_avr4, "avr:4", FALSE, & arch_info_struct[7]),
+  N (16, bfd_mach_avr4, "avr:4", false, & arch_info_struct[7]),
 
   /* Enhanced, > 8K, <= 64K.  */
   /* TODO:  addr_bits should be 16, but set to 22 for some following
      version of GCC (from 4.3) for backward compatibility.  */
-  N (22, bfd_mach_avr5, "avr:5", FALSE, & arch_info_struct[8]),
+  N (22, bfd_mach_avr5, "avr:5", false, & arch_info_struct[8]),
 
   /* Enhanced, == 128K.  */
-  N (22, bfd_mach_avr51, "avr:51", FALSE, & arch_info_struct[9]),
+  N (22, bfd_mach_avr51, "avr:51", false, & arch_info_struct[9]),
 
   /* 3-Byte PC.  */
-  N (22, bfd_mach_avr6, "avr:6", FALSE, & arch_info_struct[10]),
+  N (22, bfd_mach_avr6, "avr:6", false, & arch_info_struct[10]),
 
   /* Tiny core (AVR Tiny).  */
-  N (16, bfd_mach_avrtiny, "avr:100", FALSE, & arch_info_struct[11]),
+  N (16, bfd_mach_avrtiny, "avr:100", false, & arch_info_struct[11]),
 
   /* Xmega 1.  */
-  N (24, bfd_mach_avrxmega1, "avr:101", FALSE, & arch_info_struct[12]),
+  N (24, bfd_mach_avrxmega1, "avr:101", false, & arch_info_struct[12]),
 
   /* Xmega 2.  */
-  N (24, bfd_mach_avrxmega2, "avr:102", FALSE, & arch_info_struct[13]),
+  N (24, bfd_mach_avrxmega2, "avr:102", false, & arch_info_struct[13]),
 
   /* Xmega 3.  */
-  N (24, bfd_mach_avrxmega3, "avr:103", FALSE, & arch_info_struct[14]),
+  N (24, bfd_mach_avrxmega3, "avr:103", false, & arch_info_struct[14]),
 
   /* Xmega 4.  */
-  N (24, bfd_mach_avrxmega4, "avr:104", FALSE, & arch_info_struct[15]),
+  N (24, bfd_mach_avrxmega4, "avr:104", false, & arch_info_struct[15]),
 
   /* Xmega 5.  */
-  N (24, bfd_mach_avrxmega5, "avr:105", FALSE, & arch_info_struct[16]),
+  N (24, bfd_mach_avrxmega5, "avr:105", false, & arch_info_struct[16]),
 
   /* Xmega 6.  */
-  N (24, bfd_mach_avrxmega6, "avr:106", FALSE, & arch_info_struct[17]),
+  N (24, bfd_mach_avrxmega6, "avr:106", false, & arch_info_struct[17]),
 
   /* Xmega 7.  */
-  N (24, bfd_mach_avrxmega7, "avr:107", FALSE, NULL)
+  N (24, bfd_mach_avrxmega7, "avr:107", false, NULL)
 
 };
 
 const bfd_arch_info_type bfd_avr_arch =
-  N (16, bfd_mach_avr2, "avr", TRUE, & arch_info_struct[0]);
+  N (16, bfd_mach_avr2, "avr", true, & arch_info_struct[0]);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-bfin.c ./bfd/cpu-bfin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-bfin.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-bfin.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD Support for the ADI Blackfin processor.
 
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_bfin_arch =
     "bfin",		/* Arch name.  */
     "bfin",		/* Arch printable name.  */
     4,			/* Section align power.  */
-    TRUE,		/* The one and only.  */
+    true,		/* The one and only.  */
     bfd_default_compatible,
     bfd_default_scan,
     bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-bpf.c ./bfd/cpu-bpf.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-bpf.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-bpf.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the BPF processor.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
    Contributed by Oracle Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -23,6 +23,26 @@
 #include "bfd.h"
 #include "libbfd.h"
 
+
+static const bfd_arch_info_type bfd_xbpf_arch =
+{
+  64,				/* Bits per word.  */
+  64,				/* Bits per address.  */
+  8,				/* Bits per byte.  */
+  bfd_arch_bpf,			/* Architecture.  */
+  bfd_mach_xbpf,		/* Machine.  */
+  "bpf",			/* Architecture name.  */
+  "xbpf",			/* Machine name.  */
+  3,				/* Section align power.  */
+  false,			/* The default ?  */
+  bfd_default_compatible,	/* Architecture comparison fn.  */
+  bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
+  NULL,				/* Next in list.  */
+  0 /* Maximum offset of a reloc from the start of an insn.  */
+};
+
+
 const bfd_arch_info_type bfd_bpf_arch =
 {
   64,				/* Bits per word.  */
@@ -33,10 +53,10 @@ const bfd_arch_info_type bfd_bpf_arch =
   "bpf",			/* Architecture name.  */
   "bpf",			/* Machine name.  */
   3,				/* Section align power.  */
-  TRUE,				/* The default ?  */
+  true,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
   bfd_arch_default_fill,	/* Default fill.  */
-  NULL,				/* Next in list.  */
+  &bfd_xbpf_arch,		/* Next in list.  */
   0 /* Maximum offset of a reloc from the start of an insn.  */
 };
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-cr16.c ./bfd/cpu-cr16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-cr16.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-cr16.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the CR16 processor.
-   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Copyright (C) 2007-2024 Free Software Foundation, Inc.
    Written by M R Swami Reddy
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -25,18 +25,18 @@
 
 const bfd_arch_info_type bfd_cr16_arch =
 {
- 16,		      /* Bits in a word.  */
- 32,		      /* Bits in an address.  */
- 8,		      /* Bits in a byte.  */
- bfd_arch_cr16,       /* Architecture number.  */
- bfd_mach_cr16,
- "cr16",	      /* Arch name.  */
- "cr16",	      /* Printable name.  */
- 1,		      /* Section alignment power.  */
- TRUE,	      	      /* The one and only.  */
- bfd_default_compatible,
- bfd_default_scan,
- bfd_arch_default_fill,
- NULL,
- 0 /* Maximum offset of a reloc from the start of an insn.  */
+  16,			/* Bits in a word.  */
+  32,			/* Bits in an address.  */
+  8,			/* Bits in a byte.  */
+  bfd_arch_cr16,	/* Architecture number.  */
+  bfd_mach_cr16,
+  "cr16",		/* Arch name.  */
+  "cr16",		/* Printable name.  */
+  1,			/* Section alignment power.  */
+  true,			/* The one and only.  */
+  bfd_default_compatible,
+  bfd_default_scan,
+  bfd_arch_default_fill,
+  NULL,
+  0 /* Maximum offset of a reloc from the start of an insn.  */
 };
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-cris.c ./bfd/cpu-cris.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-cris.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-cris.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Axis CRIS architecture.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Contributed by Axis Communications AB.
    Written by Hans-Peter Nilsson.
 
@@ -66,7 +66,7 @@ get_compatible (const bfd_arch_info_type
 }
 
 #define N(NUMBER, PRINT, NEXT)  \
- { 32, 32, 8, bfd_arch_cris, NUMBER, "cris", PRINT, 1, FALSE, \
+ { 32, 32, 8, bfd_arch_cris, NUMBER, "cris", PRINT, 1, false, \
      get_compatible, bfd_default_scan, bfd_arch_default_fill, NEXT, 0 }
 
 static const bfd_arch_info_type bfd_cris_arch_compat_v10_v32 =
@@ -90,7 +90,7 @@ const bfd_arch_info_type bfd_cris_arch =
   "cris",			/* The printable name is the same.  */
   1,				/* Section alignment power; each section
 				   is aligned to (only) 2^1 bytes.  */
-  TRUE,				/* This is the default "machine".  */
+  true,				/* This is the default "machine".  */
   get_compatible,		/* A function for testing
 				   "machine" compatibility of two
 				   bfd_arch_info_type.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-crx.c ./bfd/cpu-crx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-crx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-crx.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the CRX processor.
-   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Copyright (C) 2004-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_crx_arch =
   "crx",	/* Arch name.  */
   "crx",	/* Printable name.  */
   1,		/* Section alignment power.  */
-  TRUE,		/* The one and only.  */
+  true,		/* The one and only.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-csky.c ./bfd/cpu-csky.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-csky.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-csky.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for C-SKY processors.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
    Contributed by C-SKY Microsystems and Mentor Graphics.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -44,17 +44,18 @@
 static const bfd_arch_info_type arch_info_struct[] =
 {
   /* ABI v1 processors. */
-  N (bfd_mach_ck510,   "csky:ck510",    FALSE, & arch_info_struct[1]),
-  N (bfd_mach_ck610,   "csky:ck610",    FALSE, & arch_info_struct[2]),
+  N (bfd_mach_ck510,   "csky:ck510",    false, & arch_info_struct[1]),
+  N (bfd_mach_ck610,   "csky:ck610",    false, & arch_info_struct[2]),
 
   /* ABI v2 processors.  */
-  N (bfd_mach_ck801,   "csky:ck801",    FALSE, & arch_info_struct[3]),
-  N (bfd_mach_ck802,   "csky:ck802",    FALSE, & arch_info_struct[4]),
-  N (bfd_mach_ck803,   "csky:ck803",    FALSE, & arch_info_struct[5]),
-  N (bfd_mach_ck807,   "csky:ck807",    FALSE, & arch_info_struct[6]),
-  N (bfd_mach_ck810,   "csky:ck810",    FALSE, & arch_info_struct[7]),
-  N (bfd_mach_ck_unknown, "csky:any",   FALSE, NULL)
+  N (bfd_mach_ck801,   "csky:ck801",    false, & arch_info_struct[3]),
+  N (bfd_mach_ck802,   "csky:ck802",    false, & arch_info_struct[4]),
+  N (bfd_mach_ck803,   "csky:ck803",    false, & arch_info_struct[5]),
+  N (bfd_mach_ck807,   "csky:ck807",    false, & arch_info_struct[6]),
+  N (bfd_mach_ck810,   "csky:ck810",    false, & arch_info_struct[7]),
+  N (bfd_mach_ck860,   "csky:ck860",    false, & arch_info_struct[8]),
+  N (bfd_mach_ck_unknown, "csky:any",   false, NULL)
 };
 
 const bfd_arch_info_type bfd_csky_arch =
-  N (0, "csky", TRUE, & arch_info_struct[0]);
+  N (0, "csky", true, & arch_info_struct[0]);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-d10v.c ./bfd/cpu-d10v.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-d10v.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-d10v.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the D10V processor
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Contributed by Martin Hunt (hunt@cygnus.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -42,10 +42,10 @@
   }
 
 static const bfd_arch_info_type d10v_ts3_info =
-  N (bfd_mach_d10v_ts3, "d10v:ts3", FALSE, NULL);
+  N (bfd_mach_d10v_ts3, "d10v:ts3", false, NULL);
 
 static const bfd_arch_info_type d10v_ts2_info =
-  N (bfd_mach_d10v_ts2, "d10v:ts2", FALSE, & d10v_ts3_info);
+  N (bfd_mach_d10v_ts2, "d10v:ts2", false, & d10v_ts3_info);
 
 const bfd_arch_info_type bfd_d10v_arch =
-  N (bfd_mach_d10v, "d10v", TRUE, & d10v_ts2_info);
+  N (bfd_mach_d10v, "d10v", true, & d10v_ts2_info);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-d30v.c ./bfd/cpu-d30v.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-d30v.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-d30v.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Mitsubishi D30V processor
-   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+   Copyright (C) 1997-2024 Free Software Foundation, Inc.
    Contributed by Martin Hunt (hunt@cygnus.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_d30v_arch =
   "d30v",
   "d30v",
   4, /* Section alignment power.  */
-  TRUE,
+  true,
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-dlx.c ./bfd/cpu-dlx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-dlx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-dlx.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the DLX Microprocessor architecture.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
    Hacked by Kuang Hwa Lin <kuang@sbcglobal.net>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_dlx_arch =
   "dlx",
   "dlx",
   4,
-  TRUE, /* The one and only.  */
+  true, /* The one and only.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-epiphany.c ./bfd/cpu-epiphany.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-epiphany.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-epiphany.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Adapteva EPIPHANY processor.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by Embecosm on behalf of Adapteva, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -42,8 +42,7 @@
   }
 
 const bfd_arch_info_type bfd_epiphany16_arch =
-  N (bfd_mach_epiphany16, "epiphany16", 1, FALSE, NULL);
+  N (bfd_mach_epiphany16, "epiphany16", 1, false, NULL);
 
 const bfd_arch_info_type bfd_epiphany_arch =
-  N (bfd_mach_epiphany32, "epiphany32", 2, TRUE, & bfd_epiphany16_arch);
-
+  N (bfd_mach_epiphany32, "epiphany32", 2, true, &bfd_epiphany16_arch);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-fr30.c ./bfd/cpu-fr30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-fr30.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-fr30.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the FR30 processor.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_fr30_arch =
   "fr30",			/* Architecture name.  */
   "fr30",			/* Printable name.  */
   4,				/* Section align power.  */
-  TRUE,				/* The default ?  */
+  true,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
   bfd_arch_default_fill,	/* Default fill.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-frv.c ./bfd/cpu-frv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-frv.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-frv.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the FRV processor.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -41,26 +41,26 @@
 }
 
 static const bfd_arch_info_type arch_info_300
-  = FRV_ARCH (bfd_mach_fr300,   "fr300",   FALSE, (bfd_arch_info_type *)0);
+  = FRV_ARCH (bfd_mach_fr300,   "fr300",   false, (bfd_arch_info_type *)0);
 
 static const bfd_arch_info_type arch_info_400
-  = FRV_ARCH (bfd_mach_fr400, "fr400", FALSE, &arch_info_300);
+  = FRV_ARCH (bfd_mach_fr400, "fr400", false, &arch_info_300);
 
 static const bfd_arch_info_type arch_info_450
-  = FRV_ARCH (bfd_mach_fr450, "fr450", FALSE, &arch_info_400);
+  = FRV_ARCH (bfd_mach_fr450, "fr450", false, &arch_info_400);
 
 static const bfd_arch_info_type arch_info_500
-  = FRV_ARCH (bfd_mach_fr500, "fr500", FALSE, &arch_info_450);
+  = FRV_ARCH (bfd_mach_fr500, "fr500", false, &arch_info_450);
 
 static const bfd_arch_info_type arch_info_550
-  = FRV_ARCH (bfd_mach_fr550, "fr550", FALSE, &arch_info_500);
+  = FRV_ARCH (bfd_mach_fr550, "fr550", false, &arch_info_500);
 
 static const bfd_arch_info_type arch_info_simple
-  = FRV_ARCH (bfd_mach_frvsimple, "simple", FALSE, &arch_info_550);
+  = FRV_ARCH (bfd_mach_frvsimple, "simple", false, &arch_info_550);
 
 static const bfd_arch_info_type arch_info_tomcat
-  = FRV_ARCH (bfd_mach_frvtomcat, "tomcat", FALSE, &arch_info_simple);
+  = FRV_ARCH (bfd_mach_frvtomcat, "tomcat", false, &arch_info_simple);
 
 const bfd_arch_info_type bfd_frv_arch
-  = FRV_ARCH (bfd_mach_frv, "frv", TRUE, &arch_info_tomcat);
+  = FRV_ARCH (bfd_mach_frv, "frv", true, &arch_info_tomcat);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ft32.c ./bfd/cpu-ft32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ft32.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-ft32.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ft32 processor.
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2024 Free Software Foundation, Inc.
    Written by FTDI (support@ftdichip.com)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -43,10 +43,9 @@
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (bfd_mach_ft32, "ft32", FALSE, &arch_info_struct[1]),
-  N (bfd_mach_ft32b, "ft32b", FALSE, NULL)
+  N (bfd_mach_ft32b, "ft32b", false, NULL)
 };
 
 const bfd_arch_info_type bfd_ft32_arch =
-  N (bfd_mach_ft32, "ft32", TRUE, arch_info_struct);
+  N (bfd_mach_ft32, "ft32", true, arch_info_struct);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-h8300.c ./bfd/cpu-h8300.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-h8300.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-h8300.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for the Renesas H8/300 architecture.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Hacked by Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -24,28 +24,28 @@
 #include "libbfd.h"
 #include "cpu-h8300.h"
 
-static bfd_boolean
+static bool
 h8300_scan (const struct bfd_arch_info *info, const char *string)
 {
   if (*string != 'h' && *string != 'H')
-    return FALSE;
+    return false;
 
   string++;
   if (*string != '8')
-    return FALSE;
+    return false;
 
   string++;
   if (*string == '/')
     string++;
 
   if (*string != '3')
-    return FALSE;
+    return false;
   string++;
   if (*string != '0')
-    return FALSE;
+    return false;
   string++;
   if (*string != '0')
-    return FALSE;
+    return false;
   string++;
   if (*string == '-')
     string++;
@@ -119,25 +119,25 @@ compatible (const bfd_arch_info_type *in
     compatible, h8300_scan, bfd_arch_default_fill, next, 0 }
 
 static const bfd_arch_info_type h8300sxn_info_struct =
-  N (32, 16, bfd_mach_h8300sxn, "h8300sxn", "h8300sxn", FALSE, NULL);
+  N (32, 16, bfd_mach_h8300sxn, "h8300sxn", "h8300sxn", false, NULL);
 
 static const bfd_arch_info_type h8300sx_info_struct =
-  N (32, 32, bfd_mach_h8300sx, "h8300sx", "h8300sx", FALSE, &h8300sxn_info_struct);
+  N (32, 32, bfd_mach_h8300sx, "h8300sx", "h8300sx", false, &h8300sxn_info_struct);
 
 static const bfd_arch_info_type h8300sn_info_struct =
-  N (32, 16, bfd_mach_h8300sn, "h8300sn", "h8300sn", FALSE, &h8300sx_info_struct);
+  N (32, 16, bfd_mach_h8300sn, "h8300sn", "h8300sn", false, &h8300sx_info_struct);
 
 static const bfd_arch_info_type h8300hn_info_struct =
-  N (32, 16, bfd_mach_h8300hn, "h8300hn", "h8300hn", FALSE, &h8300sn_info_struct);
+  N (32, 16, bfd_mach_h8300hn, "h8300hn", "h8300hn", false, &h8300sn_info_struct);
 
 static const bfd_arch_info_type h8300s_info_struct =
-  N (32, 32, bfd_mach_h8300s, "h8300s", "h8300s", FALSE, & h8300hn_info_struct);
+  N (32, 32, bfd_mach_h8300s, "h8300s", "h8300s", false, & h8300hn_info_struct);
 
 static const bfd_arch_info_type h8300h_info_struct =
-  N (32, 32, bfd_mach_h8300h, "h8300h", "h8300h", FALSE, &h8300s_info_struct);
+  N (32, 32, bfd_mach_h8300h, "h8300h", "h8300h", false, &h8300s_info_struct);
 
 const bfd_arch_info_type bfd_h8300_arch =
-  N (16, 16, bfd_mach_h8300, "h8300", "h8300", TRUE, &h8300h_info_struct);
+  N (16, 16, bfd_mach_h8300, "h8300", "h8300", true, &h8300h_info_struct);
 
 /* Pad the given address to 32 bits, converting 16-bit and 24-bit
    addresses into the values they would have had on a h8s target.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-h8300.h ./bfd/cpu-h8300.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-h8300.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-h8300.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* H8/300 functions.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-hppa.c ./bfd/cpu-hppa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-hppa.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-hppa.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the HP Precision Architecture architecture.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -42,15 +42,15 @@
 
 
 static const bfd_arch_info_type bfd_hppa10_arch =
-  N (32, bfd_mach_hppa10, "hppa1.0", TRUE, NULL);
+  N (32, bfd_mach_hppa10, "hppa1.0", true, NULL);
 
 /* PA2.0 in narrow mode.  */
 static const bfd_arch_info_type bfd_hppa20_arch =
-  N (32, bfd_mach_hppa20, "hppa2.0", FALSE, &bfd_hppa10_arch);
+  N (32, bfd_mach_hppa20, "hppa2.0", false, &bfd_hppa10_arch);
 
 /* PA2.0 in wide mode.  */
 static const bfd_arch_info_type bfd_hppa20w_arch =
-  N (64, bfd_mach_hppa20w, "hppa2.0w", FALSE, &bfd_hppa20_arch);
+  N (64, bfd_mach_hppa20w, "hppa2.0w", false, &bfd_hppa20_arch);
 
 const bfd_arch_info_type bfd_hppa_arch =
-  N (32, bfd_mach_hppa11, "hppa1.1", FALSE, &bfd_hppa20w_arch);
+  N (32, bfd_mach_hppa11, "hppa1.1", false, &bfd_hppa20w_arch);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-i386.c ./bfd/cpu-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-i386.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-i386.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Intel 386 architecture.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -23,8 +23,8 @@
 #include "libbfd.h"
 #include "libiberty.h"
 
-extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
-					    bfd_boolean);
+extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bool,
+					    bool);
 
 static const bfd_arch_info_type *
 bfd_i386_compatible (const bfd_arch_info_type *a,
@@ -44,8 +44,8 @@ bfd_i386_compatible (const bfd_arch_info
    multi byte nop instructions if LONG_NOP is TRUE.  */
 
 static void *
-bfd_arch_i386_fill (bfd_size_type count, bfd_boolean code,
-		    bfd_boolean long_nop)
+bfd_arch_i386_fill (bfd_size_type count, bool code,
+		    bool long_nop)
 {
   /* nop */
   static const char nop_1[] = { 0x90 };
@@ -97,37 +97,24 @@ bfd_arch_i386_fill (bfd_size_type count,
   return fill;
 }
 
-/* Fill the buffer with zero or short nop instruction if CODE is TRUE.  */
+/* Fill the buffer with zero or short nop instruction if CODE is true.  */
 
 void *
 bfd_arch_i386_short_nop_fill (bfd_size_type count,
-			      bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
-			      bfd_boolean code)
+			      bool is_bigendian ATTRIBUTE_UNUSED,
+			      bool code)
 {
-  return bfd_arch_i386_fill (count, code, FALSE);
+  return bfd_arch_i386_fill (count, code, false);
 }
 
 /* Fill the buffer with zero or long nop instruction if CODE is TRUE.  */
 
 static void *
 bfd_arch_i386_long_nop_fill (bfd_size_type count,
-			     bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
-			     bfd_boolean code)
+			     bool is_bigendian ATTRIBUTE_UNUSED,
+			     bool code)
 {
-  return bfd_arch_i386_fill (count, code, TRUE);
-}
-
-/* Fill the buffer with zero, or one-byte nop instructions if CODE is TRUE.  */
-
-static void *
-bfd_arch_i386_onebyte_nop_fill (bfd_size_type count,
-				bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
-				bfd_boolean code)
-{
-  void *fill = bfd_malloc (count);
-  if (fill != NULL)
-    memset (fill, code ? 0x90 : 0, count);
-  return fill;
+  return bfd_arch_i386_fill (count, code, true);
 }
 
 #define N(BITS, MACH, NAME, PRINT, DEF, FILL, NEXT)	\
@@ -148,44 +135,31 @@ bfd_arch_i386_onebyte_nop_fill (bfd_size
   }
 
 
-static const bfd_arch_info_type bfd_x64_32_nacl_arch =
-  N (64, bfd_mach_x64_32_nacl, "i386", "i386:x64-32:nacl",
-     FALSE, bfd_arch_i386_onebyte_nop_fill, NULL);
-
-static const bfd_arch_info_type bfd_x86_64_nacl_arch =
-  N (64, bfd_mach_x86_64_nacl, "i386", "i386:x86-64:nacl",
-     FALSE, bfd_arch_i386_onebyte_nop_fill, &bfd_x64_32_nacl_arch);
-
-const bfd_arch_info_type bfd_i386_nacl_arch =
-  N (32, bfd_mach_i386_i386_nacl, "i386", "i386:nacl",
-     TRUE, bfd_arch_i386_onebyte_nop_fill, &bfd_x86_64_nacl_arch);
-
-
 static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
   N (64, bfd_mach_x64_32_intel_syntax, "i386:intel", "i386:x64-32:intel",
-     FALSE, bfd_arch_i386_long_nop_fill, &bfd_i386_nacl_arch);
+     false, bfd_arch_i386_long_nop_fill, NULL);
 
 static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax =
   N (64, bfd_mach_x86_64_intel_syntax, "i386:intel", "i386:x86-64:intel",
-     FALSE, bfd_arch_i386_long_nop_fill, &bfd_x64_32_arch_intel_syntax);
+     false, bfd_arch_i386_long_nop_fill, &bfd_x64_32_arch_intel_syntax);
 
 static const bfd_arch_info_type bfd_i386_arch_intel_syntax =
   N (32, bfd_mach_i386_i386_intel_syntax, "i386:intel", "i386:intel",
-     TRUE, bfd_arch_i386_short_nop_fill, &bfd_x86_64_arch_intel_syntax);
+     true, bfd_arch_i386_short_nop_fill, &bfd_x86_64_arch_intel_syntax);
 
 
 static const bfd_arch_info_type i8086_arch =
   N (32, bfd_mach_i386_i8086, "i8086", "i8086",
-     FALSE, bfd_arch_i386_short_nop_fill, &bfd_i386_arch_intel_syntax);
+     false, bfd_arch_i386_short_nop_fill, &bfd_i386_arch_intel_syntax);
 
 static const bfd_arch_info_type bfd_x64_32_arch =
   N (64, bfd_mach_x64_32, "i386", "i386:x64-32",
-     FALSE, bfd_arch_i386_long_nop_fill, &i8086_arch);
+     false, bfd_arch_i386_long_nop_fill, &i8086_arch);
 
 static const bfd_arch_info_type bfd_x86_64_arch =
   N (64, bfd_mach_x86_64, "i386", "i386:x86-64",
-     FALSE, bfd_arch_i386_long_nop_fill, &bfd_x64_32_arch);
+     false, bfd_arch_i386_long_nop_fill, &bfd_x64_32_arch);
 
 const bfd_arch_info_type bfd_i386_arch =
   N (32, bfd_mach_i386_i386, "i386", "i386",
-     TRUE, bfd_arch_i386_short_nop_fill, &bfd_x86_64_arch);
+     true, bfd_arch_i386_short_nop_fill, &bfd_x86_64_arch);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ia64.c ./bfd/cpu-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ia64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-ia64.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ia64 architecture.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -42,9 +42,9 @@
   }
 
 const bfd_arch_info_type bfd_ia64_elf32_arch =
-  N (32, bfd_mach_ia64_elf32, "ia64-elf32", FALSE, NULL);
+  N (32, bfd_mach_ia64_elf32, "ia64-elf32", false, NULL);
 
 const bfd_arch_info_type bfd_ia64_arch =
-  N (64, bfd_mach_ia64_elf64, "ia64-elf64", TRUE, &bfd_ia64_elf32_arch);
+  N (64, bfd_mach_ia64_elf64, "ia64-elf64", true, &bfd_ia64_elf32_arch);
 
 #include "cpu-ia64-opc.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ia64-opc.c ./bfd/cpu-ia64-opc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ia64-opc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-ia64-opc.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2019 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2024 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -99,14 +99,14 @@ ins_immu (const struct ia64_operand *sel
 static const char*
 ext_immu (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep)
 {
-  BFD_HOST_U_64_BIT value = 0;
+  uint64_t value = 0;
   int i, bits = 0, total = 0;
 
   for (i = 0; i < NELEMS (self->field) && self->field[i].bits; ++i)
     {
       bits = self->field[i].bits;
       value |= ((code >> self->field[i].shift)
-		& ((((BFD_HOST_U_64_BIT) 1) << bits) - 1)) << total;
+		& (((uint64_t) 1 << bits) - 1)) << total;
       total += bits;
     }
   *valuep = value;
@@ -161,7 +161,7 @@ static const char*
 ins_imms_scaled (const struct ia64_operand *self, ia64_insn value,
 		 ia64_insn *code, int scale)
 {
-  BFD_HOST_64_BIT svalue = value, sign_bit = 0;
+  int64_t svalue = value, sign_bit = 0;
   ia64_insn new_insn = 0;
   int i;
 
@@ -186,17 +186,17 @@ ext_imms_scaled (const struct ia64_opera
 		 ia64_insn *valuep, int scale)
 {
   int i, bits = 0, total = 0;
-  BFD_HOST_U_64_BIT val = 0, sign;
+  uint64_t val = 0, sign;
 
   for (i = 0; i < NELEMS (self->field) && self->field[i].bits; ++i)
     {
       bits = self->field[i].bits;
       val |= ((code >> self->field[i].shift)
-	      & ((((BFD_HOST_U_64_BIT) 1) << bits) - 1)) << total;
+	      & (((uint64_t) 1 << bits) - 1)) << total;
       total += bits;
     }
   /* sign extend: */
-  sign = (BFD_HOST_U_64_BIT) 1 << (total - 1);
+  sign = (uint64_t) 1 << (total - 1);
   val = (val ^ sign) - sign;
 
   *valuep = val << scale;
@@ -312,7 +312,7 @@ static const char*
 ins_cnt (const struct ia64_operand *self, ia64_insn value, ia64_insn *code)
 {
   --value;
-  if (value >= ((BFD_HOST_U_64_BIT) 1) << self->field[0].bits)
+  if (value >= (uint64_t) 1 << self->field[0].bits)
     return "count out of range";
 
   *code |= value << self->field[0].shift;
@@ -323,7 +323,7 @@ static const char*
 ext_cnt (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep)
 {
   *valuep = ((code >> self->field[0].shift)
-	     & ((((BFD_HOST_U_64_BIT) 1) << self->field[0].bits) - 1)) + 1;
+	     & (((uint64_t) 1 << self->field[0].bits) - 1)) + 1;
   return 0;
 }
 
@@ -421,8 +421,8 @@ ext_strd5b (const struct ia64_operand *s
 static const char*
 ins_inc3 (const struct ia64_operand *self, ia64_insn value, ia64_insn *code)
 {
-  BFD_HOST_64_BIT val = value;
-  BFD_HOST_U_64_BIT sign = 0;
+  int64_t val = value;
+  uint64_t sign = 0;
 
   if (val < 0)
     {
@@ -444,7 +444,7 @@ ins_inc3 (const struct ia64_operand *sel
 static const char*
 ext_inc3 (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep)
 {
-  BFD_HOST_64_BIT val;
+  int64_t val;
   int negate;
 
   val = (code >> self->field[0].shift) & 0x7;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-iamcu.c ./bfd/cpu-iamcu.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-iamcu.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-iamcu.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Intel MCU architecture.
-   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Copyright (C) 2015-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,11 +22,10 @@
 #include "bfd.h"
 #include "libbfd.h"
 
-extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
-					    bfd_boolean);
+extern void *bfd_arch_i386_short_nop_fill (bfd_size_type, bool, bool);
 
 #define N(number, name, print, next)			     \
-  { 32, 32, 8, bfd_arch_iamcu, number, name, print, 3, TRUE, \
+  { 32, 32, 8, bfd_arch_iamcu, number, name, print, 3, true, \
     bfd_default_compatible, bfd_default_scan,		     \
     bfd_arch_i386_short_nop_fill, next, 0 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ip2k.c ./bfd/cpu-ip2k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ip2k.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-ip2k.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Scenix IP2xxx processor.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -41,8 +41,8 @@
   }
 
 const bfd_arch_info_type bfd_ip2k_nonext_arch =
-  N (bfd_mach_ip2022, "ip2022", FALSE, NULL);
+  N (bfd_mach_ip2022, "ip2022", false, NULL);
 
 const bfd_arch_info_type bfd_ip2k_arch =
-  N (bfd_mach_ip2022ext, "ip2022ext", TRUE, & bfd_ip2k_nonext_arch);
+  N (bfd_mach_ip2022ext, "ip2022ext", true, & bfd_ip2k_nonext_arch);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-iq2000.c ./bfd/cpu-iq2000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-iq2000.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-iq2000.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Vitesse IQ2000 processor.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -41,8 +41,8 @@
   }
 
 static const bfd_arch_info_type arch_info_struct =
-  N (bfd_mach_iq10, "iq10", FALSE, NULL);
+  N (bfd_mach_iq10, "iq10", false, NULL);
 
 const bfd_arch_info_type bfd_iq2000_arch =
-  N (bfd_mach_iq2000, "iq2000", TRUE, &arch_info_struct);
+  N (bfd_mach_iq2000, "iq2000", true, &arch_info_struct);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-k1om.c ./bfd/cpu-k1om.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-k1om.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-k1om.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-/* BFD support for the Intel K1OM architecture.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
-					    bfd_boolean);
-
-#define N(number, name, print, next)			     \
-  { 64, 64, 8, bfd_arch_k1om, number, name, print, 3, TRUE, \
-    bfd_default_compatible, bfd_default_scan,		     \
-    bfd_arch_i386_short_nop_fill, next, 9 }
-
-static const bfd_arch_info_type bfd_k1om_arch_intel_syntax =
-  N (bfd_mach_k1om_intel_syntax, "k1om:intel", "k1om:intel", NULL);
-
-const bfd_arch_info_type bfd_k1om_arch =
-  N (bfd_mach_k1om, "k1om", "k1om", &bfd_k1om_arch_intel_syntax);
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-kvx.c ./bfd/cpu-kvx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-kvx.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/cpu-kvx.c	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,124 @@
+/* BFD support for KVX.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
+   Contributed by Kalray SA.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3. If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+/* This routine is provided two arch_infos and returns if machines
+   are compatible.
+*/
+
+static const bfd_arch_info_type *
+kvx_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
+{
+  long amach =  a->mach, bmach =  b->mach;
+  /* If a & b are for different architecture we can do nothing.  */
+  if (a->arch != b->arch)
+    return NULL;
+
+  if ((amach == bfd_mach_kv3_1_64 && bmach == bfd_mach_kv3_1_usr)
+      || (amach == bfd_mach_kv3_2_64 && bmach == bfd_mach_kv3_2_usr))
+    return b;
+
+  if ((bmach == bfd_mach_kv3_1_64 && amach == bfd_mach_kv3_1_usr)
+      || (bmach == bfd_mach_kv3_2_64 && amach == bfd_mach_kv3_2_usr))
+    return a;
+
+  /* Otherwise if either a or b is the 'default' machine
+   * then it can be polymorphed into the other.
+   * This will enable to execute merge_private_bfd_data
+   */
+  if (a->the_default)
+    return b;
+
+  if (b->the_default)
+    return a;
+
+  /* We do not want to transmute some machine into another one */
+  if (amach != bmach)
+    return NULL;
+
+  /* If a & b are for the same machine then all is well.  */
+  if (amach == bmach)
+    return a;
+
+  return NULL;
+}
+
+static bool
+scan (const struct bfd_arch_info *info, const char *string)
+{
+  /* First test for an exact match.  */
+  if (strcasecmp (string, info->printable_name) == 0)
+    return true;
+
+  /* Finally check for the default architecture.  */
+  if (strcasecmp (string, "kvx") == 0)
+    return info->the_default;
+
+  return false;
+}
+
+#define N(addr_bits, machine, print, default, next)            \
+{                                                              \
+  32,                          /* 32 bits in a word.  */       \
+  addr_bits,                   /* bits in an address.  */      \
+  8,                           /* 8 bits in a byte.  */        \
+  bfd_arch_kvx,                                                 \
+  machine,                     /* Machine number.  */          \
+  "kvx",                        /* Architecture name.   */      \
+  print,                       /* Printable name.  */          \
+  4,                           /* Section align power.  */     \
+  default,                     /* Is this the default ?  */    \
+  kvx_compatible,					       \
+  scan,                                                        \
+  bfd_arch_default_fill,                                       \
+  next,                                                \
+          0                                            \
+}
+
+
+const bfd_arch_info_type bfd_kv4_1_usr_arch =
+  N (64 , bfd_mach_kv4_1_usr , "kvx:kv4-1:usr" , false , NULL);
+
+const bfd_arch_info_type bfd_kv3_2_usr_arch =
+  N (64 , bfd_mach_kv3_2_usr , "kvx:kv3-2:usr" , false , &bfd_kv4_1_usr_arch);
+
+const bfd_arch_info_type bfd_kv3_1_usr_arch =
+  N (64 , bfd_mach_kv3_1_usr , "kvx:kv3-1:usr" , false , &bfd_kv3_2_usr_arch);
+
+const bfd_arch_info_type bfd_kv4_1_64_arch =
+  N (64 , bfd_mach_kv4_1_64  , "kvx:kv4-1:64"  , false , &bfd_kv3_1_usr_arch);
+
+const bfd_arch_info_type bfd_kv3_2_64_arch =
+  N (64 , bfd_mach_kv3_2_64  , "kvx:kv3-2:64"  , false , &bfd_kv4_1_64_arch);
+
+const bfd_arch_info_type bfd_kv3_1_64_arch =
+  N (64 , bfd_mach_kv3_1_64  , "kvx:kv3-1:64"  , false , &bfd_kv3_2_64_arch);
+
+const bfd_arch_info_type bfd_kv4_1_arch =
+  N (32 , bfd_mach_kv4_1     , "kvx:kv4-1"     , false , &bfd_kv3_1_64_arch);
+
+const bfd_arch_info_type bfd_kv3_2_arch =
+  N (32 , bfd_mach_kv3_2     , "kvx:kv3-2"     , false , &bfd_kv4_1_arch);
+
+const bfd_arch_info_type bfd_kvx_arch =
+  N (32 , bfd_mach_kv3_1     , "kvx:kv3-1"     , true  , &bfd_kv3_2_arch);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-l1om.c ./bfd/cpu-l1om.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-l1om.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-l1om.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-/* BFD support for the Intel L1OM architecture.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
-					    bfd_boolean);
-
-#define N(number, name, print, next)			     \
-  { 64, 64, 8, bfd_arch_l1om, number, name, print, 3, TRUE, \
-    bfd_default_compatible, bfd_default_scan,		     \
-    bfd_arch_i386_short_nop_fill, next, 0 }
-
-static const bfd_arch_info_type bfd_l1om_arch_intel_syntax =
-  N (bfd_mach_l1om_intel_syntax, "l1om:intel", "l1om:intel", NULL);
-
-const bfd_arch_info_type bfd_l1om_arch =
-  N (bfd_mach_l1om, "l1om", "l1om", &bfd_l1om_arch_intel_syntax);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-lm32.c ./bfd/cpu-lm32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-lm32.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-lm32.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Lattice Mico32 architecture.
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2024 Free Software Foundation, Inc.
    Contributed by Jon Beniston <jon@beniston.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_lm32_arch =
   "lm32",		  /* Architecture name.  */
   "lm32",		  /* Printable name.  */
   4,			  /* Alignment.  */
-  TRUE,			  /* Is this the default machine for the target.  */
+  true,			  /* Is this the default machine for the target.  */
   bfd_default_compatible, /* Function callback to test if two files have compatible machines.  */
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-loongarch.c ./bfd/cpu-loongarch.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-loongarch.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/cpu-loongarch.c	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,61 @@
+/* BFD support for LoongArch.
+   Copyright (C) 2021-2024 Free Software Foundation, Inc.
+   Contributed by Loongson Ltd.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+static const bfd_arch_info_type bfd_loongarch32_arch =
+{
+  32,				/* 32 bits in a word.  */
+  32,				/* 64 bits in an address.  */
+  8,				/* 8 bits in a byte.  */
+  bfd_arch_loongarch,		/* Architecture.  */
+  bfd_mach_loongarch32, 	/* Machine number - 0 for now.  */
+  "loongarch32",		/* Architecture name.  */
+  "Loongarch32",		/* Printable name.  */
+  3,				/* Section align power.  */
+  false,			/* This is the default architecture.  */
+  bfd_default_compatible,	/* Architecture comparison function.  */
+  bfd_default_scan,		/* String to architecture conversion.  */
+  bfd_arch_default_fill,	/* Default fill.  */
+  NULL, 			/* Next in list.  */
+  0,
+};
+
+const bfd_arch_info_type bfd_loongarch_arch =
+{
+  32,				/* 32 bits in a word.  */
+  64,				/* 64 bits in an address.  */
+  8,				/* 8 bits in a byte.  */
+  bfd_arch_loongarch,		/* Architecture.  */
+  /* Machine number of LoongArch64 is larger
+   * so that LoongArch64 is compatible to LoongArch32.  */
+  bfd_mach_loongarch64,
+  "loongarch64",		/* Architecture name.  */
+  "Loongarch64",		/* Printable name.  */
+  3,				/* Section align power.  */
+  true, 			/* This is the default architecture.  */
+  bfd_default_compatible,	/* Architecture comparison function.  */
+  bfd_default_scan,		/* String to architecture conversion.  */
+  bfd_arch_default_fill,	/* Default fill.  */
+  &bfd_loongarch32_arch,	/* Next in list.  */
+  0,
+};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m10200.c ./bfd/cpu-m10200.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m10200.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m10200.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Matsushita 10200 processor
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_mn10200_arc
   "mn10200",
   "mn10200",
   2,
-  TRUE,   /* The one and only.  */
+  true,   /* The one and only.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m10300.c ./bfd/cpu-m10300.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m10300.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m10300.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Matsushita 10300 processor
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -41,10 +41,10 @@
   }
 
 const bfd_arch_info_type bfd_am33_2_arch =
-  N (bfd_mach_am33_2, "am33_2", "am33-2", FALSE, NULL);
+  N (bfd_mach_am33_2, "am33_2", "am33-2", false, NULL);
 
 const bfd_arch_info_type bfd_am33_arch =
-  N (bfd_mach_am33, "am33", "am33", FALSE, &bfd_am33_2_arch);
+  N (bfd_mach_am33, "am33", "am33", false, &bfd_am33_2_arch);
 
 const bfd_arch_info_type bfd_mn10300_arch =
-  N (bfd_mach_mn10300, "mn10300", "mn10300", TRUE, &bfd_am33_arch);
+  N (bfd_mach_mn10300, "mn10300", "mn10300", true, &bfd_am33_arch);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m32c.c ./bfd/cpu-m32c.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m32c.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m32c.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the M16C/M32C processors.
-   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Copyright (C) 2004-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -25,12 +25,12 @@
 /* Like bfd_default_scan but if the string is just "m32c" then
    skip the m16c architecture.  */
 
-static bfd_boolean
+static bool
 m32c_scan (const bfd_arch_info_type * info, const char * string)
 {
   if (strcmp (string, "m32c") == 0
       && info->mach == bfd_mach_m16c)
-    return FALSE;
+    return false;
 
   return bfd_default_scan (info, string);
 }
@@ -40,8 +40,8 @@ m32c_scan (const bfd_arch_info_type * in
   bfd_default_compatible, m32c_scan, bfd_arch_default_fill, next, 0 }
 
 static const bfd_arch_info_type arch_info_struct =
-  N (bfd_mach_m32c, "m32c", 3, FALSE, NULL);
+  N (bfd_mach_m32c, "m32c", 3, false, NULL);
 
 const bfd_arch_info_type bfd_m32c_arch =
-  N (bfd_mach_m16c, "m16c", 4, TRUE, &arch_info_struct);
+  N (bfd_mach_m16c, "m16c", 4, true, &arch_info_struct);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m32r.c ./bfd/cpu-m32r.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m32r.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m32r.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the M32R processor.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -31,9 +31,9 @@
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (bfd_mach_m32rx, "m32rx", FALSE, M32R2_NEXT) ,
-  N (bfd_mach_m32r2, "m32r2", FALSE, NULL)
+  N (bfd_mach_m32rx, "m32rx", false, M32R2_NEXT) ,
+  N (bfd_mach_m32r2, "m32r2", false, NULL)
 };
 
 const bfd_arch_info_type bfd_m32r_arch =
-  N (bfd_mach_m32r, "m32r", TRUE, NEXT);
+  N (bfd_mach_m32r, "m32r", true, NEXT);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m68hc11.c ./bfd/cpu-m68hc11.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m68hc11.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m68hc11.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Motorola 68HC11 processor
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_m68hc11_arc
   "m68hc11",
   "m68hc11",
   4, /* Section alignment power.  */
-  TRUE,
+  true,
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m68hc12.c ./bfd/cpu-m68hc12.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m68hc12.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m68hc12.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Motorola 68HC12 processor
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -41,8 +41,8 @@
   }
 
 const bfd_arch_info_type bfd_m68hc12s_arch =
-  N (bfd_mach_m6812s, "m68hc12:HCS12", FALSE, NULL);
+  N (bfd_mach_m6812s, "m68hc12:HCS12", false, NULL);
 
 const bfd_arch_info_type bfd_m68hc12_arch =
-  N (bfd_mach_m6812_default, "m68hc12", TRUE, &bfd_m68hc12s_arch);
+  N (bfd_mach_m6812_default, "m68hc12", true, &bfd_m68hc12s_arch);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m68k.c ./bfd/cpu-m68k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m68k.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m68k.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for architectures.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Hacked by Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -35,79 +35,79 @@ bfd_m68k_compatible (const bfd_arch_info
 
 static const bfd_arch_info_type arch_info_struct[] =
   {
-    N(bfd_mach_m68000,  "m68k:68000", FALSE, &arch_info_struct[1]),
-    N(bfd_mach_m68008,  "m68k:68008", FALSE, &arch_info_struct[2]),
-    N(bfd_mach_m68010,  "m68k:68010", FALSE, &arch_info_struct[3]),
-    N(bfd_mach_m68020,  "m68k:68020", FALSE, &arch_info_struct[4]),
-    N(bfd_mach_m68030,  "m68k:68030", FALSE, &arch_info_struct[5]),
-    N(bfd_mach_m68040,  "m68k:68040", FALSE, &arch_info_struct[6]),
-    N(bfd_mach_m68060,  "m68k:68060", FALSE, &arch_info_struct[7]),
-    N(bfd_mach_cpu32,   "m68k:cpu32", FALSE, &arch_info_struct[8]),
-    N(bfd_mach_fido,    "m68k:fido",  FALSE, &arch_info_struct[9]),
+    N(bfd_mach_m68000,  "m68k:68000", false, &arch_info_struct[1]),
+    N(bfd_mach_m68008,  "m68k:68008", false, &arch_info_struct[2]),
+    N(bfd_mach_m68010,  "m68k:68010", false, &arch_info_struct[3]),
+    N(bfd_mach_m68020,  "m68k:68020", false, &arch_info_struct[4]),
+    N(bfd_mach_m68030,  "m68k:68030", false, &arch_info_struct[5]),
+    N(bfd_mach_m68040,  "m68k:68040", false, &arch_info_struct[6]),
+    N(bfd_mach_m68060,  "m68k:68060", false, &arch_info_struct[7]),
+    N(bfd_mach_cpu32,   "m68k:cpu32", false, &arch_info_struct[8]),
+    N(bfd_mach_fido,    "m68k:fido",  false, &arch_info_struct[9]),
 
     /* Various combinations of CF architecture features */
     N(bfd_mach_mcf_isa_a_nodiv, "m68k:isa-a:nodiv",
-      FALSE, &arch_info_struct[10]),
+      false, &arch_info_struct[10]),
     N(bfd_mach_mcf_isa_a, "m68k:isa-a",
-      FALSE, &arch_info_struct[11]),
+      false, &arch_info_struct[11]),
     N(bfd_mach_mcf_isa_a_mac, "m68k:isa-a:mac",
-      FALSE, &arch_info_struct[12]),
+      false, &arch_info_struct[12]),
     N(bfd_mach_mcf_isa_a_emac, "m68k:isa-a:emac",
-      FALSE, &arch_info_struct[13]),
+      false, &arch_info_struct[13]),
     N(bfd_mach_mcf_isa_aplus, "m68k:isa-aplus",
-      FALSE, &arch_info_struct[14]),
+      false, &arch_info_struct[14]),
     N(bfd_mach_mcf_isa_aplus_mac, "m68k:isa-aplus:mac",
-      FALSE, &arch_info_struct[15]),
+      false, &arch_info_struct[15]),
     N(bfd_mach_mcf_isa_aplus_emac, "m68k:isa-aplus:emac",
-      FALSE, &arch_info_struct[16]),
+      false, &arch_info_struct[16]),
     N(bfd_mach_mcf_isa_b_nousp, "m68k:isa-b:nousp",
-      FALSE, &arch_info_struct[17]),
+      false, &arch_info_struct[17]),
     N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:isa-b:nousp:mac",
-      FALSE, &arch_info_struct[18]),
+      false, &arch_info_struct[18]),
     N(bfd_mach_mcf_isa_b_nousp_emac, "m68k:isa-b:nousp:emac",
-      FALSE, &arch_info_struct[19]),
+      false, &arch_info_struct[19]),
     N(bfd_mach_mcf_isa_b, "m68k:isa-b",
-      FALSE, &arch_info_struct[20]),
+      false, &arch_info_struct[20]),
     N(bfd_mach_mcf_isa_b_mac, "m68k:isa-b:mac",
-      FALSE, &arch_info_struct[21]),
+      false, &arch_info_struct[21]),
     N(bfd_mach_mcf_isa_b_emac, "m68k:isa-b:emac",
-      FALSE, &arch_info_struct[22]),
+      false, &arch_info_struct[22]),
     N(bfd_mach_mcf_isa_b_float, "m68k:isa-b:float",
-      FALSE, &arch_info_struct[23]),
+      false, &arch_info_struct[23]),
     N(bfd_mach_mcf_isa_b_float_mac, "m68k:isa-b:float:mac",
-      FALSE, &arch_info_struct[24]),
+      false, &arch_info_struct[24]),
     N(bfd_mach_mcf_isa_b_float_emac, "m68k:isa-b:float:emac",
-      FALSE, &arch_info_struct[25]),
+      false, &arch_info_struct[25]),
     N(bfd_mach_mcf_isa_c, "m68k:isa-c",
-      FALSE, &arch_info_struct[26]),
+      false, &arch_info_struct[26]),
     N(bfd_mach_mcf_isa_c_mac, "m68k:isa-c:mac",
-      FALSE, &arch_info_struct[27]),
+      false, &arch_info_struct[27]),
     N(bfd_mach_mcf_isa_c_emac, "m68k:isa-c:emac",
-      FALSE, &arch_info_struct[28]),
+      false, &arch_info_struct[28]),
     N(bfd_mach_mcf_isa_c_nodiv, "m68k:isa-c:nodiv",
-      FALSE, &arch_info_struct[29]),
+      false, &arch_info_struct[29]),
     N(bfd_mach_mcf_isa_c_nodiv_mac, "m68k:isa-c:nodiv:mac",
-      FALSE, &arch_info_struct[30]),
+      false, &arch_info_struct[30]),
     N(bfd_mach_mcf_isa_c_nodiv_emac, "m68k:isa-c:nodiv:emac",
-      FALSE, &arch_info_struct[31]),
+      false, &arch_info_struct[31]),
 
     /* Legacy names for CF architectures */
-    N(bfd_mach_mcf_isa_a_nodiv, "m68k:5200", FALSE, &arch_info_struct[32]),
-    N(bfd_mach_mcf_isa_a_mac,"m68k:5206e", FALSE, &arch_info_struct[33]),
-    N(bfd_mach_mcf_isa_a_mac, "m68k:5307", FALSE, &arch_info_struct[34]),
-    N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:5407", FALSE, &arch_info_struct[35]),
-    N(bfd_mach_mcf_isa_aplus_emac, "m68k:528x", FALSE, &arch_info_struct[36]),
-    N(bfd_mach_mcf_isa_aplus_emac, "m68k:521x", FALSE, &arch_info_struct[37]),
-    N(bfd_mach_mcf_isa_a_emac, "m68k:5249", FALSE, &arch_info_struct[38]),
+    N(bfd_mach_mcf_isa_a_nodiv, "m68k:5200", false, &arch_info_struct[32]),
+    N(bfd_mach_mcf_isa_a_mac,"m68k:5206e", false, &arch_info_struct[33]),
+    N(bfd_mach_mcf_isa_a_mac, "m68k:5307", false, &arch_info_struct[34]),
+    N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:5407", false, &arch_info_struct[35]),
+    N(bfd_mach_mcf_isa_aplus_emac, "m68k:528x", false, &arch_info_struct[36]),
+    N(bfd_mach_mcf_isa_aplus_emac, "m68k:521x", false, &arch_info_struct[37]),
+    N(bfd_mach_mcf_isa_a_emac, "m68k:5249", false, &arch_info_struct[38]),
     N(bfd_mach_mcf_isa_b_float_emac, "m68k:547x",
-      FALSE, &arch_info_struct[39]),
+      false, &arch_info_struct[39]),
     N(bfd_mach_mcf_isa_b_float_emac, "m68k:548x",
-      FALSE, &arch_info_struct[40]),
-    N(bfd_mach_mcf_isa_b_float_emac, "m68k:cfv4e", FALSE, 0),
+      false, &arch_info_struct[40]),
+    N(bfd_mach_mcf_isa_b_float_emac, "m68k:cfv4e", false, 0),
   };
 
 const bfd_arch_info_type bfd_m68k_arch =
-  N(0, "m68k", TRUE, &arch_info_struct[0]);
+  N(0, "m68k", true, &arch_info_struct[0]);
 
 /* Table indexed by bfd_mach_arch number indicating which
    architectural features are supported.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m68k.h ./bfd/cpu-m68k.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m68k.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m68k.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m9s12x.c ./bfd/cpu-m9s12x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m9s12x.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m9s12x.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Freescale 9S12X processor
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_m9s12x_arch
   "m9s12x",
   "m9s12x",
   4,    /* Section alignment power.  */
-  TRUE,
+  true,
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m9s12xg.c ./bfd/cpu-m9s12xg.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-m9s12xg.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-m9s12xg.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Freescale 9S12-XGATE co-processor
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_m9s12xg_arc
   "m9s12xg",
   "m9s12xg",
   4,    /* Section alignment power.  */
-  TRUE,
+  true,
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mcore.c ./bfd/cpu-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mcore.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-mcore.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for Motorola's MCore architecture
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_mcore_arch
   "MCore",			/* Architecture name.  */
   "MCore",			/* Machine name.  */
   3,				/* Section align power.  */
-  TRUE,				/* Is this the default architecture ?  */
+  true,				/* Is this the default architecture ?  */
   bfd_default_compatible,	/* Architecture comparison function.  */
   bfd_default_scan,		/* String to architecture conversion.  */
   bfd_arch_default_fill,	/* Default fill.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mep.c ./bfd/cpu-mep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mep.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-mep.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Toshiba Media Engine Processor.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -25,6 +25,6 @@
 			   2, def, bfd_default_compatible, bfd_default_scan, \
 			   bfd_arch_default_fill, y, 0 }
 
-static const bfd_arch_info_type bfd_c5_arch = MA (bfd_mach_mep_c5, "c5", FALSE, NULL);
-static const bfd_arch_info_type bfd_h1_arch = MA (bfd_mach_mep_h1, "h1", FALSE, & bfd_c5_arch);
-const bfd_arch_info_type bfd_mep_arch = MA (bfd_mach_mep, "mep", TRUE, & bfd_h1_arch);
+static const bfd_arch_info_type bfd_c5_arch = MA (bfd_mach_mep_c5, "c5", false, NULL);
+static const bfd_arch_info_type bfd_h1_arch = MA (bfd_mach_mep_h1, "h1", false, & bfd_c5_arch);
+const bfd_arch_info_type bfd_mep_arch = MA (bfd_mach_mep, "mep", true, & bfd_h1_arch);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-metag.c ./bfd/cpu-metag.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-metag.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-metag.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Imagination Technologies Meta processor.
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2024 Free Software Foundation, Inc.
    Contributed by Imagination Technologies Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_metag_arch
   "metag",			/* Architecture name.  */
   "metag",			/* Printable name.  */
   4,				/* Section align power.  */
-  TRUE,				/* The default ?  */
+  true,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
   bfd_arch_default_fill,	/* Default fill.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-microblaze.c ./bfd/cpu-microblaze.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-microblaze.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-microblaze.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD Xilinx MicroBlaze architecture definition
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_microblaze_
   "microblaze",			/* Architecture name.  */
   "MicroBlaze",			/* Printable name.  */
   3,				/* Section align power.  */
-  TRUE,				/* Is this the default architecture ?  */
+  true,				/* Is this the default architecture ?  */
   bfd_default_compatible,	/* Architecture comparison function.  */
   bfd_default_scan,		/* String to architecture conversion.  */
   bfd_arch_default_fill,	/* Default fill.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mips.c ./bfd/cpu-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mips.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-mips.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* bfd back-end for mips support
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -108,6 +108,7 @@ enum
   I_mipsocteon3,
   I_xlr,
   I_interaptiv_mr2,
+  I_allegrex,
   I_micromips
 };
 
@@ -115,55 +116,56 @@ enum
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (32, 32, bfd_mach_mips3000, "mips:3000",	  FALSE, NN(I_mips3000)),
-  N (32, 32, bfd_mach_mips3900, "mips:3900",	  FALSE, NN(I_mips3900)),
-  N (64, 64, bfd_mach_mips4000, "mips:4000",	  FALSE, NN(I_mips4000)),
-  N (32, 32, bfd_mach_mips4010, "mips:4010",	  FALSE, NN(I_mips4010)),
-  N (64, 64, bfd_mach_mips4100, "mips:4100",	  FALSE, NN(I_mips4100)),
-  N (64, 64, bfd_mach_mips4111, "mips:4111",	  FALSE, NN(I_mips4111)),
-  N (64, 64, bfd_mach_mips4120, "mips:4120",	  FALSE, NN(I_mips4120)),
-  N (64, 64, bfd_mach_mips4300, "mips:4300",	  FALSE, NN(I_mips4300)),
-  N (64, 64, bfd_mach_mips4400, "mips:4400",	  FALSE, NN(I_mips4400)),
-  N (64, 64, bfd_mach_mips4600, "mips:4600",	  FALSE, NN(I_mips4600)),
-  N (64, 64, bfd_mach_mips4650, "mips:4650",	  FALSE, NN(I_mips4650)),
-  N (64, 64, bfd_mach_mips5000, "mips:5000",	  FALSE, NN(I_mips5000)),
-  N (64, 64, bfd_mach_mips5400, "mips:5400",	  FALSE, NN(I_mips5400)),
-  N (64, 64, bfd_mach_mips5500, "mips:5500",	  FALSE, NN(I_mips5500)),
-  N (64, 32, bfd_mach_mips5900, "mips:5900",	  FALSE, NN(I_mips5900)),
-  N (32, 32, bfd_mach_mips6000, "mips:6000",	  FALSE, NN(I_mips6000)),
-  N (64, 64, bfd_mach_mips7000, "mips:7000",	  FALSE, NN(I_mips7000)),
-  N (64, 64, bfd_mach_mips8000, "mips:8000",	  FALSE, NN(I_mips8000)),
-  N (64, 64, bfd_mach_mips9000, "mips:9000",	  FALSE, NN(I_mips9000)),
-  N (64, 64, bfd_mach_mips10000,"mips:10000",	  FALSE, NN(I_mips10000)),
-  N (64, 64, bfd_mach_mips12000,"mips:12000",	  FALSE, NN(I_mips12000)),
-  N (64, 64, bfd_mach_mips14000,"mips:14000",	  FALSE, NN(I_mips14000)),
-  N (64, 64, bfd_mach_mips16000,"mips:16000",	  FALSE, NN(I_mips16000)),
-  N (64, 64, bfd_mach_mips16,	"mips:16",	  FALSE, NN(I_mips16)),
-  N (64, 64, bfd_mach_mips5,	"mips:mips5",	  FALSE, NN(I_mips5)),
-  N (32, 32, bfd_mach_mipsisa32,  "mips:isa32",	  FALSE, NN(I_mipsisa32)),
-  N (32, 32, bfd_mach_mipsisa32r2,"mips:isa32r2", FALSE, NN(I_mipsisa32r2)),
-  N (32, 32, bfd_mach_mipsisa32r3,"mips:isa32r3", FALSE, NN(I_mipsisa32r3)),
-  N (32, 32, bfd_mach_mipsisa32r5,"mips:isa32r5", FALSE, NN(I_mipsisa32r5)),
-  N (32, 32, bfd_mach_mipsisa32r6,"mips:isa32r6", FALSE, NN(I_mipsisa32r6)),
-  N (64, 64, bfd_mach_mipsisa64,  "mips:isa64",	  FALSE, NN(I_mipsisa64)),
-  N (64, 64, bfd_mach_mipsisa64r2,"mips:isa64r2", FALSE, NN(I_mipsisa64r2)),
-  N (64, 64, bfd_mach_mipsisa64r3,"mips:isa64r3", FALSE, NN(I_mipsisa64r3)),
-  N (64, 64, bfd_mach_mipsisa64r5,"mips:isa64r5", FALSE, NN(I_mipsisa64r5)),
-  N (64, 64, bfd_mach_mipsisa64r6,"mips:isa64r6", FALSE, NN(I_mipsisa64r6)),
-  N (64, 64, bfd_mach_mips_sb1, "mips:sb1",	  FALSE, NN(I_sb1)),
-  N (64, 64, bfd_mach_mips_loongson_2e, "mips:loongson_2e", FALSE, NN(I_loongson_2e)),
-  N (64, 64, bfd_mach_mips_loongson_2f, "mips:loongson_2f", FALSE, NN(I_loongson_2f)),
-  N (64, 64, bfd_mach_mips_gs464, "mips:gs464",	  FALSE, NN(I_gs464)),
-  N (64, 64, bfd_mach_mips_gs464e, "mips:gs464e", FALSE, NN(I_gs464e)),
-  N (64, 64, bfd_mach_mips_gs264e, "mips:gs264e", FALSE, NN(I_gs264e)),
-  N (64, 64, bfd_mach_mips_octeon,"mips:octeon",  FALSE, NN(I_mipsocteon)),
-  N (64, 64, bfd_mach_mips_octeonp,"mips:octeon+", FALSE, NN(I_mipsocteonp)),
-  N (64, 64, bfd_mach_mips_octeon2,"mips:octeon2", FALSE, NN(I_mipsocteon2)),
-  N (64, 64, bfd_mach_mips_octeon3, "mips:octeon3", FALSE, NN(I_mipsocteon3)),
-  N (64, 64, bfd_mach_mips_xlr, "mips:xlr",	   FALSE, NN(I_xlr)),
-  N (32, 32, bfd_mach_mips_interaptiv_mr2, "mips:interaptiv-mr2", FALSE,
+  N (32, 32, bfd_mach_mips3000, "mips:3000",	  false, NN(I_mips3000)),
+  N (32, 32, bfd_mach_mips3900, "mips:3900",	  false, NN(I_mips3900)),
+  N (64, 64, bfd_mach_mips4000, "mips:4000",	  false, NN(I_mips4000)),
+  N (32, 32, bfd_mach_mips4010, "mips:4010",	  false, NN(I_mips4010)),
+  N (64, 64, bfd_mach_mips4100, "mips:4100",	  false, NN(I_mips4100)),
+  N (64, 64, bfd_mach_mips4111, "mips:4111",	  false, NN(I_mips4111)),
+  N (64, 64, bfd_mach_mips4120, "mips:4120",	  false, NN(I_mips4120)),
+  N (64, 64, bfd_mach_mips4300, "mips:4300",	  false, NN(I_mips4300)),
+  N (64, 64, bfd_mach_mips4400, "mips:4400",	  false, NN(I_mips4400)),
+  N (64, 64, bfd_mach_mips4600, "mips:4600",	  false, NN(I_mips4600)),
+  N (64, 64, bfd_mach_mips4650, "mips:4650",	  false, NN(I_mips4650)),
+  N (64, 64, bfd_mach_mips5000, "mips:5000",	  false, NN(I_mips5000)),
+  N (64, 64, bfd_mach_mips5400, "mips:5400",	  false, NN(I_mips5400)),
+  N (64, 64, bfd_mach_mips5500, "mips:5500",	  false, NN(I_mips5500)),
+  N (64, 32, bfd_mach_mips5900, "mips:5900",	  false, NN(I_mips5900)),
+  N (32, 32, bfd_mach_mips6000, "mips:6000",	  false, NN(I_mips6000)),
+  N (64, 64, bfd_mach_mips7000, "mips:7000",	  false, NN(I_mips7000)),
+  N (64, 64, bfd_mach_mips8000, "mips:8000",	  false, NN(I_mips8000)),
+  N (64, 64, bfd_mach_mips9000, "mips:9000",	  false, NN(I_mips9000)),
+  N (64, 64, bfd_mach_mips10000,"mips:10000",	  false, NN(I_mips10000)),
+  N (64, 64, bfd_mach_mips12000,"mips:12000",	  false, NN(I_mips12000)),
+  N (64, 64, bfd_mach_mips14000,"mips:14000",	  false, NN(I_mips14000)),
+  N (64, 64, bfd_mach_mips16000,"mips:16000",	  false, NN(I_mips16000)),
+  N (64, 64, bfd_mach_mips16,	"mips:16",	  false, NN(I_mips16)),
+  N (64, 64, bfd_mach_mips5,	"mips:mips5",	  false, NN(I_mips5)),
+  N (32, 32, bfd_mach_mipsisa32,  "mips:isa32",	  false, NN(I_mipsisa32)),
+  N (32, 32, bfd_mach_mipsisa32r2,"mips:isa32r2", false, NN(I_mipsisa32r2)),
+  N (32, 32, bfd_mach_mipsisa32r3,"mips:isa32r3", false, NN(I_mipsisa32r3)),
+  N (32, 32, bfd_mach_mipsisa32r5,"mips:isa32r5", false, NN(I_mipsisa32r5)),
+  N (32, 32, bfd_mach_mipsisa32r6,"mips:isa32r6", false, NN(I_mipsisa32r6)),
+  N (64, 64, bfd_mach_mipsisa64,  "mips:isa64",	  false, NN(I_mipsisa64)),
+  N (64, 64, bfd_mach_mipsisa64r2,"mips:isa64r2", false, NN(I_mipsisa64r2)),
+  N (64, 64, bfd_mach_mipsisa64r3,"mips:isa64r3", false, NN(I_mipsisa64r3)),
+  N (64, 64, bfd_mach_mipsisa64r5,"mips:isa64r5", false, NN(I_mipsisa64r5)),
+  N (64, 64, bfd_mach_mipsisa64r6,"mips:isa64r6", false, NN(I_mipsisa64r6)),
+  N (64, 64, bfd_mach_mips_sb1, "mips:sb1",	  false, NN(I_sb1)),
+  N (64, 64, bfd_mach_mips_loongson_2e, "mips:loongson_2e", false, NN(I_loongson_2e)),
+  N (64, 64, bfd_mach_mips_loongson_2f, "mips:loongson_2f", false, NN(I_loongson_2f)),
+  N (64, 64, bfd_mach_mips_gs464, "mips:gs464",	  false, NN(I_gs464)),
+  N (64, 64, bfd_mach_mips_gs464e, "mips:gs464e", false, NN(I_gs464e)),
+  N (64, 64, bfd_mach_mips_gs264e, "mips:gs264e", false, NN(I_gs264e)),
+  N (64, 64, bfd_mach_mips_octeon,"mips:octeon",  false, NN(I_mipsocteon)),
+  N (64, 64, bfd_mach_mips_octeonp,"mips:octeon+", false, NN(I_mipsocteonp)),
+  N (64, 64, bfd_mach_mips_octeon2,"mips:octeon2", false, NN(I_mipsocteon2)),
+  N (64, 64, bfd_mach_mips_octeon3, "mips:octeon3", false, NN(I_mipsocteon3)),
+  N (64, 64, bfd_mach_mips_xlr, "mips:xlr",	   false, NN(I_xlr)),
+  N (32, 32, bfd_mach_mips_interaptiv_mr2, "mips:interaptiv-mr2", false,
      NN(I_interaptiv_mr2)),
-  N (64, 64, bfd_mach_mips_micromips, "mips:micromips", FALSE, NULL)
+  N (32, 32, bfd_mach_mips_allegrex, "mips:allegrex", false, NN(I_allegrex)),
+  N (64, 64, bfd_mach_mips_micromips, "mips:micromips", false, NULL)
 };
 
 /* The default architecture is mips:3000, but with a machine number of
@@ -171,4 +173,4 @@ static const bfd_arch_info_type arch_inf
    of mips, and an explicit setting of mips:3000.  */
 
 const bfd_arch_info_type bfd_mips_arch =
-N (32, 32, 0, "mips", TRUE, &arch_info_struct[0]);
+N (32, 32, 0, "mips", true, &arch_info_struct[0]);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mmix.c ./bfd/cpu-mmix.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mmix.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-mmix.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for MMIX.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Contributed by Hans-Peter Nilsson (hp@bitrange.com)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -35,7 +35,7 @@ bfd_mmix_arch =
   "mmix",			/* Architecture name.  */
   "mmix",			/* Printable name.  */
   3,				/* Section align power.  */
-  TRUE,			/* This is the default architecture.  */
+  true,				/* This is the default architecture.  */
   bfd_default_compatible,	/* Architecture comparison function.  */
   bfd_default_scan,		/* String to architecture conversion.  */
   bfd_arch_default_fill,	/* Default fill.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-moxie.c ./bfd/cpu-moxie.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-moxie.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-moxie.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the moxie processor.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Written by Anthony Green
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_moxie_arch
   "moxie",	      /* Arch name.  */
   "moxie",	      /* Printable name.  */
   2,		      /* Section alignment power.  */
-  TRUE,	              /* The one and only.  */
+  true,	              /* The one and only.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-msp430.c ./bfd/cpu-msp430.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-msp430.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-msp430.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for the MSP architecture.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
    Contributed by Dmitry Diky <diwil@mail.ru>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -62,78 +62,78 @@ compatible (const bfd_arch_info_type * a
 static const bfd_arch_info_type arch_info_struct[] =
 {
   /* msp430x11x.  */
-  N (16, bfd_mach_msp11, "MSP430", FALSE, & arch_info_struct[1]),
+  N (16, bfd_mach_msp11, "MSP430", false, & arch_info_struct[1]),
 
   /* msp430x11x1.  */
-  N (16, bfd_mach_msp110, "MSP430x11x1", FALSE, & arch_info_struct[2]),
+  N (16, bfd_mach_msp110, "MSP430x11x1", false, & arch_info_struct[2]),
 
   /* msp430x12x.  */
-  N (16, bfd_mach_msp12, "MSP430x12", FALSE, & arch_info_struct[3]),
+  N (16, bfd_mach_msp12, "MSP430x12", false, & arch_info_struct[3]),
 
   /* msp430x13x.  */
-  N (16, bfd_mach_msp13, "MSP430x13", FALSE, & arch_info_struct[4]),
+  N (16, bfd_mach_msp13, "MSP430x13", false, & arch_info_struct[4]),
 
   /* msp430x14x.  */
-  N (16, bfd_mach_msp14, "MSP430x14", FALSE, & arch_info_struct[5]),
+  N (16, bfd_mach_msp14, "MSP430x14", false, & arch_info_struct[5]),
 
   /* msp430x15x.  */
-  N (16, bfd_mach_msp15, "MSP430x15", FALSE, & arch_info_struct[6]),
+  N (16, bfd_mach_msp15, "MSP430x15", false, & arch_info_struct[6]),
 
   /* msp430x16x.  */
-  N (16, bfd_mach_msp16, "MSP430x16", FALSE, & arch_info_struct[7]),
+  N (16, bfd_mach_msp16, "MSP430x16", false, & arch_info_struct[7]),
 
   /* msp430x20x.  */
-  N (16, bfd_mach_msp20, "MSP430x20", FALSE, & arch_info_struct[8]),
+  N (16, bfd_mach_msp20, "MSP430x20", false, & arch_info_struct[8]),
 
   /* msp430x21x.  */
-  N (16, bfd_mach_msp21, "MSP430x21", FALSE, & arch_info_struct[9]),
+  N (16, bfd_mach_msp21, "MSP430x21", false, & arch_info_struct[9]),
 
   /* msp430x22x.  */
-  N (16, bfd_mach_msp22, "MSP430x22", FALSE, & arch_info_struct[10]),
+  N (16, bfd_mach_msp22, "MSP430x22", false, & arch_info_struct[10]),
 
   /* msp430x23x.  */
-  N (16, bfd_mach_msp23, "MSP430x23", FALSE, & arch_info_struct[11]),
+  N (16, bfd_mach_msp23, "MSP430x23", false, & arch_info_struct[11]),
 
   /* msp430x24x.  */
-  N (16, bfd_mach_msp24, "MSP430x24", FALSE, & arch_info_struct[12]),
+  N (16, bfd_mach_msp24, "MSP430x24", false, & arch_info_struct[12]),
 
   /* msp430x26x.  */
-  N (16, bfd_mach_msp26, "MSP430x26", FALSE, & arch_info_struct[13]),
+  N (16, bfd_mach_msp26, "MSP430x26", false, & arch_info_struct[13]),
 
   /* msp430x31x.  */
-  N (16, bfd_mach_msp31, "MSP430x31", FALSE, & arch_info_struct[14]),
+  N (16, bfd_mach_msp31, "MSP430x31", false, & arch_info_struct[14]),
 
   /* msp430x32x.  */
-  N (16, bfd_mach_msp32, "MSP430x32", FALSE, & arch_info_struct[15]),
+  N (16, bfd_mach_msp32, "MSP430x32", false, & arch_info_struct[15]),
 
   /* msp430x33x.  */
-  N (16, bfd_mach_msp33, "MSP430x33", FALSE, & arch_info_struct[16]),
+  N (16, bfd_mach_msp33, "MSP430x33", false, & arch_info_struct[16]),
 
   /* msp430x41x.  */
-  N (16, bfd_mach_msp41, "MSP430x41", FALSE, & arch_info_struct[17]),
+  N (16, bfd_mach_msp41, "MSP430x41", false, & arch_info_struct[17]),
 
   /* msp430x42x.  */
-  N (16, bfd_mach_msp42, "MSP430x42", FALSE, & arch_info_struct[18]),
+  N (16, bfd_mach_msp42, "MSP430x42", false, & arch_info_struct[18]),
 
   /* msp430x43x.  */
-  N (16, bfd_mach_msp43, "MSP430x43", FALSE, & arch_info_struct[19]),
+  N (16, bfd_mach_msp43, "MSP430x43", false, & arch_info_struct[19]),
 
   /* msp430x44x.  */
-  N (16, bfd_mach_msp43, "MSP430x44", FALSE, & arch_info_struct[20]),
+  N (16, bfd_mach_msp43, "MSP430x44", false, & arch_info_struct[20]),
 
   /* msp430x46x.  */
-  N (16, bfd_mach_msp46, "MSP430x46", FALSE, & arch_info_struct[21]),
+  N (16, bfd_mach_msp46, "MSP430x46", false, & arch_info_struct[21]),
 
   /* msp430x47x.  */
-  N (16, bfd_mach_msp47, "MSP430x47", FALSE, & arch_info_struct[22]),
+  N (16, bfd_mach_msp47, "MSP430x47", false, & arch_info_struct[22]),
 
   /* msp430x54x.  */
-  N (16, bfd_mach_msp54, "MSP430x54", FALSE, & arch_info_struct[23]),
+  N (16, bfd_mach_msp54, "MSP430x54", false, & arch_info_struct[23]),
 
-  N (32, bfd_mach_msp430x, "MSP430X", FALSE, NULL)
+  N (32, bfd_mach_msp430x, "MSP430X", false, NULL)
 
 };
 
 const bfd_arch_info_type bfd_msp430_arch =
-  N (16, bfd_mach_msp14, "msp:14", TRUE, & arch_info_struct[0]);
+  N (16, bfd_mach_msp14, "msp:14", true, & arch_info_struct[0]);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mt.c ./bfd/cpu-mt.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-mt.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-mt.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Morpho Technologies MT processor.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -42,11 +42,11 @@
 
 const bfd_arch_info_type arch_info_struct[2] =
 {
-  N (bfd_mach_mrisc2, "ms1-003", FALSE, arch_info_struct + 1),
-  N (bfd_mach_ms2,    "ms2",     FALSE, NULL)
+  N (bfd_mach_mrisc2, "ms1-003", false, arch_info_struct + 1),
+  N (bfd_mach_ms2,    "ms2",     false, NULL)
 };
 
 const bfd_arch_info_type bfd_mt_arch =
-  N (bfd_mach_ms1,    "ms1",     TRUE, arch_info_struct);
+  N (bfd_mach_ms1,    "ms1",     true, arch_info_struct);
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-nds32.c ./bfd/cpu-nds32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-nds32.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-nds32.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the NDS32 processor
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
    Contributed by Andes Technology Corporation.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -35,11 +35,11 @@
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (bfd_mach_n1h, "n1h", FALSE, NDS32V2_NEXT),
-  N (bfd_mach_n1h_v2, "n1h_v2", FALSE, NDS32V3_NEXT),
-  N (bfd_mach_n1h_v3, "n1h_v3", FALSE, NDS32V3M_NEXT),
-  N (bfd_mach_n1h_v3m, "n1h_v3m", FALSE, NULL),
+  N (bfd_mach_n1h, "n1h", false, NDS32V2_NEXT),
+  N (bfd_mach_n1h_v2, "n1h_v2", false, NDS32V3_NEXT),
+  N (bfd_mach_n1h_v3, "n1h_v3", false, NDS32V3M_NEXT),
+  N (bfd_mach_n1h_v3m, "n1h_v3m", false, NULL),
 };
 
 const bfd_arch_info_type bfd_nds32_arch =
-  N (bfd_mach_n1, "n1h", TRUE, NEXT);
+  N (bfd_mach_n1, "n1", true, NEXT);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-nfp.c ./bfd/cpu-nfp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-nfp.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-nfp.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for the NFP.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
    Contributed by Francois H. Theron <francois.theron@netronome.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -55,7 +55,7 @@ bfd_nfp_compatible (const bfd_arch_info_
 }
 
 static const bfd_arch_info_type arch_info_struct =
-  N (bfd_mach_nfp3200, "NFP-32xx", FALSE, NULL);
+  N (bfd_mach_nfp3200, "NFP-32xx", false, NULL);
 
 const bfd_arch_info_type bfd_nfp_arch =
-  N (bfd_mach_nfp6000, "NFP-6xxx", TRUE, &arch_info_struct);
+  N (bfd_mach_nfp6000, "NFP-6xxx", true, &arch_info_struct);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-nios2.c ./bfd/cpu-nios2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-nios2.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-nios2.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Altera Nios II processor.
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
    Contributed by Nigel Gray (ngray@altera.com).
    Contributed by Mentor Graphics, Inc.
 
@@ -67,9 +67,9 @@ nios2_compatible (const bfd_arch_info_ty
 
 static const bfd_arch_info_type arch_info_struct[2] =
 {
-  N (bfd_mach_nios2r1, "nios2:r1", FALSE, NIOS2R2_NEXT),
-  N (bfd_mach_nios2r2, "nios2:r2", FALSE, NULL),
+  N (bfd_mach_nios2r1, "nios2:r1", false, NIOS2R2_NEXT),
+  N (bfd_mach_nios2r2, "nios2:r2", false, NULL),
 };
 
 const bfd_arch_info_type bfd_nios2_arch =
-  N (bfd_mach_nios2, "nios2", TRUE, NIOS2R1_NEXT);
+  N (bfd_mach_nios2, "nios2", true, NIOS2R1_NEXT);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ns32k.c ./bfd/cpu-ns32k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-ns32k.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-ns32k.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ns32k architecture.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Almost totally rewritten by Ian Dall from initial work
    by Andrew Cagney.
 
@@ -31,11 +31,11 @@
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (32532, "ns32k:32532", TRUE, 0), /* The word ns32k will match this too.  */
+  N (32532, "ns32k:32532", true, 0), /* The word ns32k will match this too.  */
 };
 
 const bfd_arch_info_type bfd_ns32k_arch =
-  N (32032, "ns32k:32032", FALSE, &arch_info_struct[0]);
+  N (32032, "ns32k:32032", false, &arch_info_struct[0]);
 
 bfd_vma
 _bfd_ns32k_get_displacement (bfd_byte *buffer, int size)
@@ -508,9 +508,12 @@ do_ns32k_reloc (bfd *      abfd,
   x = ( (x & ~howto->dst_mask) | (((x & howto->src_mask) +  relocation) & howto->dst_mask))
 
   location = (bfd_byte *) data + addr;
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
     case 0:
+      break;
+
+    case 1:
       {
 	bfd_vma x = get_data (location, 1);
 	DOIT (x);
@@ -518,7 +521,7 @@ do_ns32k_reloc (bfd *      abfd,
       }
       break;
 
-    case 1:
+    case 2:
       if (relocation)
 	{
 	  bfd_vma x = get_data (location, 2);
@@ -526,7 +529,7 @@ do_ns32k_reloc (bfd *      abfd,
 	  put_data ((bfd_vma) x, location, 2);
 	}
       break;
-    case 2:
+    case 4:
       if (relocation)
 	{
 	  bfd_vma x = get_data (location, 4);
@@ -535,11 +538,7 @@ do_ns32k_reloc (bfd *      abfd,
 	}
       break;
 
-    case 3:
-      /* Do nothing.  */
-      break;
-
-    case 4:
+    case 8:
 #ifdef BFD64
       if (relocation)
 	{
@@ -572,11 +571,9 @@ _bfd_do_ns32k_reloc_contents (reloc_howt
 {
   int size;
   bfd_vma x;
-  bfd_boolean overflow;
+  bool overflow;
 
-  /* If the size is negative, negate RELOCATION.  This isn't very
-     general.  */
-  if (howto->size < 0)
+  if (howto->negate)
     relocation = -relocation;
 
   /* Get the value we are going to relocate.  */
@@ -601,7 +598,7 @@ _bfd_do_ns32k_reloc_contents (reloc_howt
      which we don't check for.  We must either check at every single
      operation, which would be tedious, or we must do the computations
      in a type larger than bfd_vma, which would be inefficient.  */
-  overflow = FALSE;
+  overflow = false;
   if (howto->complain_on_overflow != complain_overflow_dont)
     {
       bfd_vma check;
@@ -676,7 +673,7 @@ _bfd_do_ns32k_reloc_contents (reloc_howt
 
 	    if (signed_check > reloc_signed_max
 		|| signed_check < reloc_signed_min)
-	      overflow = TRUE;
+	      overflow = true;
 	  }
 	  break;
 	case complain_overflow_unsigned:
@@ -688,7 +685,7 @@ _bfd_do_ns32k_reloc_contents (reloc_howt
 	    (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
 
 	    if (check > reloc_unsigned_max)
-	      overflow = TRUE;
+	      overflow = true;
 	  }
 	  break;
 	case complain_overflow_bitfield:
@@ -701,7 +698,7 @@ _bfd_do_ns32k_reloc_contents (reloc_howt
 	    if ((check & ~reloc_bits) != 0
 		&& (((bfd_vma) signed_check & ~reloc_bits)
 		    != (-(bfd_vma) 1 & ~reloc_bits)))
-	      overflow = TRUE;
+	      overflow = true;
 	  }
 	  break;
 	default:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-or1k.c ./bfd/cpu-or1k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-or1k.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-or1k.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the OpenRISC 1000 architecture.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
    Contributed for OR32 by Ivan Guzvinec  <ivang@opencores.org>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -41,7 +41,7 @@
 
 
 const bfd_arch_info_type bfd_or1knd_arch =
-  N (bfd_mach_or1knd, "or1knd", FALSE, NULL);
+  N (bfd_mach_or1knd, "or1knd", false, NULL);
 
 const bfd_arch_info_type bfd_or1k_arch =
-  N (bfd_mach_or1k, "or1k", TRUE, &bfd_or1knd_arch);
+  N (bfd_mach_or1k, "or1k", true, &bfd_or1knd_arch);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-pdp11.c ./bfd/cpu-pdp11.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-pdp11.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-pdp11.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for PDP-11 support.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_pdp11_arch
   "pdp11",
   "pdp11",
   1,	/* Alignment = 16 bit.  */
-  TRUE, /* The one and only.  */
+  true, /* The one and only.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-pj.c ./bfd/cpu-pj.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-pj.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-pj.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for the Pico Java architecture.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Hacked by Steve Chamberlain of Transmeta. sac@pobox.com
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_pj_arch =
   "pj",				/* Arch_name.  */
   "pj",				/* Printable name.  */
   1,
-  TRUE,				/* The default machine.  */
+  true,				/* The default machine.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-plugin.c ./bfd/cpu-plugin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-plugin.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-plugin.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,41 +0,0 @@
-/* BFD support for plugins.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-const bfd_arch_info_type bfd_plugin_arch =
-{
-  32,	/* Bits in a word.  */
-  32,	/* Bits in an address.  */
-  8,	/* Bits in a byte.  */
-  bfd_arch_plugin,
-  0,	/* Only 1 machine.  */
-  "plugin",
-  "plugin",
-  3,
-  TRUE,
-  bfd_default_compatible,
-  bfd_default_scan,
-  bfd_arch_default_fill,
-  NULL,
-  0 /* Maximum offset of a reloc from the start of an insn.  */
-};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-powerpc.c ./bfd/cpu-powerpc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-powerpc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-powerpc.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD PowerPC CPU definition
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
    Contributed by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -54,8 +54,8 @@ powerpc_compatible (const bfd_arch_info_
 
 static void *
 bfd_arch_ppc_nop_fill (bfd_size_type count,
-		       bfd_boolean is_bigendian,
-		       bfd_boolean code)
+		       bool is_bigendian,
+		       bool code)
 {
   bfd_byte *fill;
 
@@ -107,34 +107,34 @@ const bfd_arch_info_type bfd_powerpc_arc
 {
 #if BFD_DEFAULT_TARGET_SIZE == 64
   /* Default for 64 bit target.  */
-  N (64, bfd_mach_ppc64, "powerpc:common64", TRUE, bfd_powerpc_archs + 1),
+  N (64, bfd_mach_ppc64, "powerpc:common64", true, bfd_powerpc_archs + 1),
   /* elf32-ppc:ppc_elf_object_p relies on the default 32 bit arch
      being immediately after the 64 bit default.  */
-  N (32, bfd_mach_ppc, "powerpc:common", FALSE, bfd_powerpc_archs + 2),
+  N (32, bfd_mach_ppc, "powerpc:common", false, bfd_powerpc_archs + 2),
 #else
   /* Default arch must come first.  */
-  N (32, bfd_mach_ppc, "powerpc:common", TRUE, bfd_powerpc_archs + 1),
+  N (32, bfd_mach_ppc, "powerpc:common", true, bfd_powerpc_archs + 1),
   /* elf64-ppc:ppc64_elf_object_p relies on the default 64 bit arch
      being immediately after the 32 bit default.  */
-  N (64, bfd_mach_ppc64, "powerpc:common64", FALSE, bfd_powerpc_archs + 2),
+  N (64, bfd_mach_ppc64, "powerpc:common64", false, bfd_powerpc_archs + 2),
 #endif
-  N (32, bfd_mach_ppc_603,      "powerpc:603",     FALSE, bfd_powerpc_archs + 3),
-  N (32, bfd_mach_ppc_ec603e,   "powerpc:EC603e",  FALSE, bfd_powerpc_archs + 4),
-  N (32, bfd_mach_ppc_604,      "powerpc:604",     FALSE, bfd_powerpc_archs + 5),
-  N (32, bfd_mach_ppc_403,      "powerpc:403",     FALSE, bfd_powerpc_archs + 6),
-  N (32, bfd_mach_ppc_601,      "powerpc:601",     FALSE, bfd_powerpc_archs + 7),
-  N (64, bfd_mach_ppc_620,      "powerpc:620",     FALSE, bfd_powerpc_archs + 8),
-  N (64, bfd_mach_ppc_630,      "powerpc:630",     FALSE, bfd_powerpc_archs + 9),
-  N (64, bfd_mach_ppc_a35,      "powerpc:a35",     FALSE, bfd_powerpc_archs + 10),
-  N (64, bfd_mach_ppc_rs64ii,   "powerpc:rs64ii",  FALSE, bfd_powerpc_archs + 11),
-  N (64, bfd_mach_ppc_rs64iii,  "powerpc:rs64iii", FALSE, bfd_powerpc_archs + 12),
-  N (32, bfd_mach_ppc_7400,     "powerpc:7400",    FALSE, bfd_powerpc_archs + 13),
-  N (32, bfd_mach_ppc_e500,     "powerpc:e500",    FALSE, bfd_powerpc_archs + 14),
-  N (32, bfd_mach_ppc_e500mc,   "powerpc:e500mc",  FALSE, bfd_powerpc_archs + 15),
-  N (64, bfd_mach_ppc_e500mc64, "powerpc:e500mc64",FALSE, bfd_powerpc_archs + 16),
-  N (32, bfd_mach_ppc_860,      "powerpc:MPC8XX",  FALSE, bfd_powerpc_archs + 17),
-  N (32, bfd_mach_ppc_750,      "powerpc:750",     FALSE, bfd_powerpc_archs + 18),
-  N (32, bfd_mach_ppc_titan,    "powerpc:titan",   FALSE, bfd_powerpc_archs + 19),
+  N (32, bfd_mach_ppc_603,      "powerpc:603",     false, bfd_powerpc_archs + 3),
+  N (32, bfd_mach_ppc_ec603e,   "powerpc:EC603e",  false, bfd_powerpc_archs + 4),
+  N (32, bfd_mach_ppc_604,      "powerpc:604",     false, bfd_powerpc_archs + 5),
+  N (32, bfd_mach_ppc_403,      "powerpc:403",     false, bfd_powerpc_archs + 6),
+  N (32, bfd_mach_ppc_601,      "powerpc:601",     false, bfd_powerpc_archs + 7),
+  N (64, bfd_mach_ppc_620,      "powerpc:620",     false, bfd_powerpc_archs + 8),
+  N (64, bfd_mach_ppc_630,      "powerpc:630",     false, bfd_powerpc_archs + 9),
+  N (64, bfd_mach_ppc_a35,      "powerpc:a35",     false, bfd_powerpc_archs + 10),
+  N (64, bfd_mach_ppc_rs64ii,   "powerpc:rs64ii",  false, bfd_powerpc_archs + 11),
+  N (64, bfd_mach_ppc_rs64iii,  "powerpc:rs64iii", false, bfd_powerpc_archs + 12),
+  N (32, bfd_mach_ppc_7400,     "powerpc:7400",    false, bfd_powerpc_archs + 13),
+  N (32, bfd_mach_ppc_e500,     "powerpc:e500",    false, bfd_powerpc_archs + 14),
+  N (32, bfd_mach_ppc_e500mc,   "powerpc:e500mc",  false, bfd_powerpc_archs + 15),
+  N (64, bfd_mach_ppc_e500mc64, "powerpc:e500mc64",false, bfd_powerpc_archs + 16),
+  N (32, bfd_mach_ppc_860,      "powerpc:MPC8XX",  false, bfd_powerpc_archs + 17),
+  N (32, bfd_mach_ppc_750,      "powerpc:750",     false, bfd_powerpc_archs + 18),
+  N (32, bfd_mach_ppc_titan,    "powerpc:titan",   false, bfd_powerpc_archs + 19),
 
   {
     16,	/* Bits in a word.  */
@@ -145,7 +145,7 @@ const bfd_arch_info_type bfd_powerpc_arc
     "powerpc",
     "powerpc:vle",
     3,
-    FALSE, /* Not the default.  */
+    false, /* Not the default.  */
     powerpc_compatible,
     bfd_default_scan,
     bfd_arch_default_fill,
@@ -153,6 +153,6 @@ const bfd_arch_info_type bfd_powerpc_arc
     0 /* Maximum offset of a reloc from the start of an insn.  */
   },
 
-  N (64, bfd_mach_ppc_e5500, "powerpc:e5500", FALSE, bfd_powerpc_archs + 21),
-  N (64, bfd_mach_ppc_e6500, "powerpc:e6500", FALSE, NULL)
+  N (64, bfd_mach_ppc_e5500, "powerpc:e5500", false, bfd_powerpc_archs + 21),
+  N (64, bfd_mach_ppc_e6500, "powerpc:e6500", false, NULL)
 };
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-pru.c ./bfd/cpu-pru.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-pru.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-pru.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the TI PRU microprocessor.
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
    Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -41,4 +41,4 @@
     0 /* Maximum offset of a reloc from the start of an insn.  */ \
   }
 
-const bfd_arch_info_type bfd_pru_arch = N (32, 32, 0, "pru", TRUE, NULL);
+const bfd_arch_info_type bfd_pru_arch = N (32, 32, 0, "pru", true, NULL);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-riscv.c ./bfd/cpu-riscv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-riscv.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-riscv.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD backend for RISC-V
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    Contributed by Andrew Waterman (andrew@sifive.com).
    Based on MIPS target.
@@ -23,9 +23,7 @@
 #include "sysdep.h"
 #include "bfd.h"
 #include "libbfd.h"
-
-/* This routine is provided two arch_infos and returns an arch_info
-   that is compatible with both, or NULL if none exists.  */
+#include "cpu-riscv.h"
 
 static const bfd_arch_info_type *
 riscv_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
@@ -39,6 +37,33 @@ riscv_compatible (const bfd_arch_info_ty
   return a;
 }
 
+/* Return TRUE if STRING matches the architecture described by INFO.  */
+
+static bool
+riscv_scan (const struct bfd_arch_info *info, const char *string)
+{
+  if (bfd_default_scan (info, string))
+    return true;
+
+  /* The incoming STRING might take the form of riscv:rvXXzzz, where XX is
+     32 or 64, and zzz are one or more extension characters.  As we
+     currently only have 3 architectures defined, 'riscv', 'riscv:rv32',
+     and 'riscv:rv64', we would like to ignore the zzz for the purpose of
+     matching here.
+
+     However, we don't want the default 'riscv' to match over a more
+     specific 'riscv:rv32' or 'riscv:rv64', so in the case of the default
+     architecture (with the shorter 'riscv' name) we don't allow any
+     special matching, but for the 'riscv:rvXX' cases, we allow a match
+     with any additional trailing characters being ignored.  */
+  if (!info->the_default
+      && strncasecmp (string, info->printable_name,
+                      strlen (info->printable_name)) == 0)
+    return true;
+
+  return false;
+}
+
 #define N(BITS, NUMBER, PRINT, DEFAULT, NEXT)			\
   {								\
     BITS,      /* Bits in a word.  */				\
@@ -51,7 +76,7 @@ riscv_compatible (const bfd_arch_info_ty
     3,								\
     DEFAULT,							\
     riscv_compatible,						\
-    bfd_default_scan,						\
+    riscv_scan,							\
     bfd_arch_default_fill,					\
     NEXT,							\
     0 /* Maximum offset of a reloc from the start of an insn.  */\
@@ -70,11 +95,59 @@ enum
    and each entry except the last should end with NN (my enum value).  */
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (64, bfd_mach_riscv64, "riscv:rv64", FALSE, NN (I_riscv64)),
-  N (32, bfd_mach_riscv32, "riscv:rv32", FALSE, NULL)
+  N (64, bfd_mach_riscv64, "riscv:rv64", false, NN (I_riscv64)),
+  N (32, bfd_mach_riscv32, "riscv:rv32", false, NULL)
 };
 
 /* The default architecture is riscv:rv64.  */
-
 const bfd_arch_info_type bfd_riscv_arch =
-  N (64, 0, "riscv", TRUE, &arch_info_struct[0]);
+  N (64, 0, "riscv", true, &arch_info_struct[0]);
+
+/* List for all supported ISA spec versions.  */
+const struct riscv_spec riscv_isa_specs[] =
+{
+  {"2.2",      ISA_SPEC_CLASS_2P2},
+  {"20190608", ISA_SPEC_CLASS_20190608},
+  {"20191213", ISA_SPEC_CLASS_20191213},
+};
+
+/* List for all supported privileged spec versions.  */
+const struct riscv_spec riscv_priv_specs[] =
+{
+  {"1.9.1", PRIV_SPEC_CLASS_1P9P1},
+  {"1.10",  PRIV_SPEC_CLASS_1P10},
+  {"1.11",  PRIV_SPEC_CLASS_1P11},
+  {"1.12",  PRIV_SPEC_CLASS_1P12},
+};
+
+/* Get the corresponding CSR version class by giving privilege
+   version numbers.  It is usually used to convert the priv
+   attribute numbers into the corresponding class.  */
+
+void
+riscv_get_priv_spec_class_from_numbers (unsigned int major,
+					unsigned int minor,
+					unsigned int revision,
+					enum riscv_spec_class *class)
+{
+  enum riscv_spec_class class_t = *class;
+  char buf[36];
+
+  if (revision != 0)
+    snprintf (buf, sizeof (buf), "%u.%u.%u", major, minor, revision);
+  else
+    snprintf (buf, sizeof (buf), "%u.%u", major, minor);
+
+  RISCV_GET_PRIV_SPEC_CLASS (buf, class_t);
+  *class = class_t;
+}
+
+/* Define mapping symbols for riscv.  */
+
+bool
+riscv_elf_is_mapping_symbols (const char *name)
+{
+  return (!strcmp (name, "$d")
+	  || !strcmp (name, "$x")
+	  || !strncmp (name, "$xrv", 4));
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-riscv.h ./bfd/cpu-riscv.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-riscv.h	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/cpu-riscv.h	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,85 @@
+/* RISC-V spec version controlling support.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+enum riscv_spec_class
+{
+  /* ISA spec.  */
+  ISA_SPEC_CLASS_NONE = 0,
+  ISA_SPEC_CLASS_2P2,
+  ISA_SPEC_CLASS_20190608,
+  ISA_SPEC_CLASS_20191213,
+  ISA_SPEC_CLASS_DRAFT,
+
+  /* Privileged spec.  */
+  PRIV_SPEC_CLASS_NONE,
+  PRIV_SPEC_CLASS_1P9P1,
+  PRIV_SPEC_CLASS_1P10,
+  PRIV_SPEC_CLASS_1P11,
+  PRIV_SPEC_CLASS_1P12,
+  PRIV_SPEC_CLASS_DRAFT,
+};
+
+struct riscv_spec
+{
+  const char *name;
+  enum riscv_spec_class spec_class;
+};
+
+extern const struct riscv_spec riscv_isa_specs[];
+extern const struct riscv_spec riscv_priv_specs[];
+
+#define RISCV_GET_SPEC_CLASS(UTYPE, LTYPE, NAME, CLASS)			\
+  do									\
+    {									\
+      if (NAME == NULL)							\
+	break;								\
+									\
+      int i_spec = UTYPE##_SPEC_CLASS_NONE + 1;				\
+      for (; i_spec < UTYPE##_SPEC_CLASS_DRAFT; i_spec++)		\
+	{								\
+	  int j_spec = i_spec - UTYPE##_SPEC_CLASS_NONE -1;		\
+	  if (riscv_##LTYPE##_specs[j_spec].name			\
+	      && strcmp (riscv_##LTYPE##_specs[j_spec].name, NAME) == 0)\
+	  {								\
+	    CLASS = riscv_##LTYPE##_specs[j_spec].spec_class;		\
+	    break;							\
+	  }								\
+	}								\
+    }									\
+  while (0)
+
+#define RISCV_GET_SPEC_NAME(UTYPE, LTYPE, NAME, CLASS)			\
+  (NAME) = riscv_##LTYPE##_specs[(CLASS) - UTYPE##_SPEC_CLASS_NONE - 1].name
+
+#define RISCV_GET_ISA_SPEC_CLASS(NAME, CLASS)	\
+  RISCV_GET_SPEC_CLASS(ISA, isa, NAME, CLASS)
+#define RISCV_GET_PRIV_SPEC_CLASS(NAME, CLASS)	\
+  RISCV_GET_SPEC_CLASS(PRIV, priv, NAME, CLASS)
+#define RISCV_GET_PRIV_SPEC_NAME(NAME, CLASS)	\
+  RISCV_GET_SPEC_NAME(PRIV, priv, NAME, CLASS)
+
+extern void
+riscv_get_priv_spec_class_from_numbers (unsigned int,
+					unsigned int,
+					unsigned int,
+					enum riscv_spec_class *);
+
+extern bool
+riscv_elf_is_mapping_symbols (const char *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-rl78.c ./bfd/cpu-rl78.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-rl78.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-rl78.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the RL78 processor.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_rl78_arch =
   "rl78",			/* Architecture name.  */
   "rl78",			/* Printable name.  */
   4,				/* Section align power.  */
-  TRUE,				/* The default ?  */
+  true,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
   bfd_arch_default_fill,	/* Default fill.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-rs6000.c ./bfd/cpu-rs6000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-rs6000.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-rs6000.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for rs6000 support
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Mimi Phuong-Thao Vo of IBM
    and John Gilmore of Cygnus Support.
 
@@ -66,10 +66,10 @@ rs6000_compatible (const bfd_arch_info_t
 
 static const bfd_arch_info_type arch_info_struct[3] =
 {
-  N (bfd_mach_rs6k_rs1, "rs6000:rs1", FALSE, arch_info_struct + 1),
-  N (bfd_mach_rs6k_rsc, "rs6000:rsc", FALSE, arch_info_struct + 2),
-  N (bfd_mach_rs6k_rs2, "rs6000:rs2", FALSE, NULL)
+  N (bfd_mach_rs6k_rs1, "rs6000:rs1", false, arch_info_struct + 1),
+  N (bfd_mach_rs6k_rsc, "rs6000:rsc", false, arch_info_struct + 2),
+  N (bfd_mach_rs6k_rs2, "rs6000:rs2", false, NULL)
 };
 
 const bfd_arch_info_type bfd_rs6000_arch =
-  N (bfd_mach_rs6k, "rs6000:6000", TRUE, arch_info_struct + 0);
+  N (bfd_mach_rs6k, "rs6000:6000", true, arch_info_struct + 0);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-rx.c ./bfd/cpu-rx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-rx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-rx.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the RX processor.
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -27,13 +27,12 @@
     bfd_default_compatible, bfd_default_scan,			\
     bfd_arch_default_fill, next, 0 }
 
-static const bfd_arch_info_type arch_info_struct[3] =
+static const bfd_arch_info_type arch_info_struct[2] =
 {
-  N (bfd_mach_rx,    "rx",    3, FALSE, arch_info_struct + 1),
-  N (bfd_mach_rx_v2, "rx:v2", 3, FALSE, arch_info_struct + 2),
-  N (bfd_mach_rx_v3, "rx:v3", 3, FALSE, NULL)
+  N (bfd_mach_rx_v2, "rx:v2", 3, false, arch_info_struct + 1),
+  N (bfd_mach_rx_v3, "rx:v3", 3, false, NULL)
 };
 
 const bfd_arch_info_type bfd_rx_arch =
-  N (bfd_mach_rx,    "rx",    4, TRUE, arch_info_struct + 0);
+  N (bfd_mach_rx,    "rx",    4, true, arch_info_struct + 0);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-s12z.c ./bfd/cpu-s12z.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-s12z.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-s12z.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Freescale 9S12Z processor
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_s12z_arch =
   "s12z",
   "s12z",
   4,    /* Section alignment power.  */
-  TRUE,
+  true,
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-s390.c ./bfd/cpu-s390.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-s390.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-s390.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the s390 processor.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Contributed by Carl B. Pedersen and Martin Schwidefsky.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -43,12 +43,12 @@
 
 #if BFD_DEFAULT_TARGET_SIZE == 64
 static const bfd_arch_info_type bfd_s390_31_arch =
-  N (32, bfd_mach_s390_31, "s390:31-bit", FALSE, NULL);
+  N (32, bfd_mach_s390_31, "s390:31-bit", false, NULL);
 const bfd_arch_info_type bfd_s390_arch =
-  N (64, bfd_mach_s390_64, "s390:64-bit", TRUE, &bfd_s390_31_arch);
+  N (64, bfd_mach_s390_64, "s390:64-bit", true, &bfd_s390_31_arch);
 #else
 static const bfd_arch_info_type bfd_s390_64_arch =
-  N (64, bfd_mach_s390_64, "s390:64-bit", FALSE, NULL);
+  N (64, bfd_mach_s390_64, "s390:64-bit", false, NULL);
 const bfd_arch_info_type bfd_s390_arch =
-  N (32, bfd_mach_s390_31, "s390:31-bit", TRUE, &bfd_s390_64_arch);
+  N (32, bfd_mach_s390_31, "s390:31-bit", true, &bfd_s390_64_arch);
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-score.c ./bfd/cpu-score.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-score.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-score.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the score processor
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
    Contributed by
    Brain.lin (brain.lin@sunplusct.com)
    Mei Ligang (ligang@sunnorth.com.cn)
@@ -63,8 +63,8 @@ compatible (const bfd_arch_info_type * a
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (bfd_mach_score3, "score3", FALSE, NULL),
+  N (bfd_mach_score3, "score3", false, NULL),
 };
 
 const bfd_arch_info_type bfd_score_arch =
-  N (bfd_mach_score7, "score7", TRUE, & arch_info_struct[0]);
+  N (bfd_mach_score7, "score7", true, & arch_info_struct[0]);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-sh.c ./bfd/cpu-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-sh.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-sh.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for the Renesas / SuperH SH architecture.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Hacked by Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -45,29 +45,29 @@
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (bfd_mach_sh2,          "sh2",       FALSE, arch_info_struct + 1),
-  N (bfd_mach_sh2e,         "sh2e",      FALSE, arch_info_struct + 2),
-  N (bfd_mach_sh_dsp,       "sh-dsp",    FALSE, arch_info_struct + 3),
-  N (bfd_mach_sh3,          "sh3",       FALSE, arch_info_struct + 4),
-  N (bfd_mach_sh3_nommu,    "sh3-nommu", FALSE, arch_info_struct + 5),
-  N (bfd_mach_sh3_dsp,      "sh3-dsp",   FALSE, arch_info_struct + 6),
-  N (bfd_mach_sh3e,         "sh3e",      FALSE, arch_info_struct + 7),
-  N (bfd_mach_sh4,          "sh4",       FALSE, arch_info_struct + 8),
-  N (bfd_mach_sh4a,         "sh4a",      FALSE, arch_info_struct + 9),
-  N (bfd_mach_sh4al_dsp,    "sh4al-dsp", FALSE, arch_info_struct + 10),
-  N (bfd_mach_sh4_nofpu,    "sh4-nofpu", FALSE, arch_info_struct + 11),
-  N (bfd_mach_sh4_nommu_nofpu, "sh4-nommu-nofpu", FALSE, arch_info_struct + 12),
-  N (bfd_mach_sh4a_nofpu,   "sh4a-nofpu", FALSE, arch_info_struct + 13),
-  N (bfd_mach_sh2a,         "sh2a",       FALSE, arch_info_struct + 14),
-  N (bfd_mach_sh2a_nofpu,   "sh2a-nofpu", FALSE, arch_info_struct + 15),
-  N (bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu, "sh2a-nofpu-or-sh4-nommu-nofpu", FALSE, arch_info_struct + 16),
-  N (bfd_mach_sh2a_nofpu_or_sh3_nommu, "sh2a-nofpu-or-sh3-nommu", FALSE, arch_info_struct + 17),
-  N (bfd_mach_sh2a_or_sh4,  "sh2a-or-sh4",  FALSE, arch_info_struct + 18),
-  N (bfd_mach_sh2a_or_sh3e, "sh2a-or-sh3e", FALSE, NULL)
+  N (bfd_mach_sh2,          "sh2",       false, arch_info_struct + 1),
+  N (bfd_mach_sh2e,         "sh2e",      false, arch_info_struct + 2),
+  N (bfd_mach_sh_dsp,       "sh-dsp",    false, arch_info_struct + 3),
+  N (bfd_mach_sh3,          "sh3",       false, arch_info_struct + 4),
+  N (bfd_mach_sh3_nommu,    "sh3-nommu", false, arch_info_struct + 5),
+  N (bfd_mach_sh3_dsp,      "sh3-dsp",   false, arch_info_struct + 6),
+  N (bfd_mach_sh3e,         "sh3e",      false, arch_info_struct + 7),
+  N (bfd_mach_sh4,          "sh4",       false, arch_info_struct + 8),
+  N (bfd_mach_sh4a,         "sh4a",      false, arch_info_struct + 9),
+  N (bfd_mach_sh4al_dsp,    "sh4al-dsp", false, arch_info_struct + 10),
+  N (bfd_mach_sh4_nofpu,    "sh4-nofpu", false, arch_info_struct + 11),
+  N (bfd_mach_sh4_nommu_nofpu, "sh4-nommu-nofpu", false, arch_info_struct + 12),
+  N (bfd_mach_sh4a_nofpu,   "sh4a-nofpu", false, arch_info_struct + 13),
+  N (bfd_mach_sh2a,         "sh2a",       false, arch_info_struct + 14),
+  N (bfd_mach_sh2a_nofpu,   "sh2a-nofpu", false, arch_info_struct + 15),
+  N (bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu, "sh2a-nofpu-or-sh4-nommu-nofpu", false, arch_info_struct + 16),
+  N (bfd_mach_sh2a_nofpu_or_sh3_nommu, "sh2a-nofpu-or-sh3-nommu", false, arch_info_struct + 17),
+  N (bfd_mach_sh2a_or_sh4,  "sh2a-or-sh4",  false, arch_info_struct + 18),
+  N (bfd_mach_sh2a_or_sh3e, "sh2a-or-sh3e", false, NULL)
 };
 
 const bfd_arch_info_type bfd_sh_arch =
-  N (bfd_mach_sh, "sh", TRUE, arch_info_struct + 0);
+  N (bfd_mach_sh, "sh", true, arch_info_struct + 0);
 
 /* This table defines the mappings from the BFD internal numbering
    system to the opcodes internal flags system.
@@ -117,9 +117,6 @@ sh_get_arch_from_bfd_mach (unsigned long
     else
       i++;
 
-  /* Machine not found.   */
-  BFD_FAIL();
-
   return SH_ARCH_UNKNOWN_ARCH;
 }
 
@@ -139,9 +136,6 @@ sh_get_arch_up_from_bfd_mach (unsigned l
     else
       i++;
 
-  /* Machine not found.  */
-  BFD_FAIL();
-
   return SH_ARCH_UNKNOWN_ARCH;
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-sparc.c ./bfd/cpu-sparc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-sparc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-sparc.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the SPARC architecture.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -42,28 +42,28 @@
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (32, bfd_mach_sparc_sparclet,     "sparc:sparclet",     FALSE, arch_info_struct + 1),
-  N (32, bfd_mach_sparc_sparclite,    "sparc:sparclite",    FALSE, arch_info_struct + 2),
-  N (32, bfd_mach_sparc_v8plus,       "sparc:v8plus",       FALSE, arch_info_struct + 3),
-  N (32, bfd_mach_sparc_v8plusa,      "sparc:v8plusa",      FALSE, arch_info_struct + 4),
-  N (32, bfd_mach_sparc_sparclite_le, "sparc:sparclite_le", FALSE, arch_info_struct + 5),
-  N (64, bfd_mach_sparc_v9,           "sparc:v9",           FALSE, arch_info_struct + 6),
-  N (64, bfd_mach_sparc_v9a,          "sparc:v9a",          FALSE, arch_info_struct + 7),
-  N (32, bfd_mach_sparc_v8plusb,      "sparc:v8plusb",      FALSE, arch_info_struct + 8),
-  N (64, bfd_mach_sparc_v9b,          "sparc:v9b",          FALSE, arch_info_struct + 9),
-  N (32, bfd_mach_sparc_v8plusc,      "sparc:v8plusc",      FALSE, arch_info_struct + 10),
-  N (64, bfd_mach_sparc_v9c,          "sparc:v9c",          FALSE, arch_info_struct + 11),
-  N (32, bfd_mach_sparc_v8plusd,      "sparc:v8plusd",      FALSE, arch_info_struct + 12),
-  N (64, bfd_mach_sparc_v9d,          "sparc:v9d",          FALSE, arch_info_struct + 13),
-  N (32, bfd_mach_sparc_v8pluse,      "sparc:v8pluse",      FALSE, arch_info_struct + 14),
-  N (64, bfd_mach_sparc_v9e,          "sparc:v9e",          FALSE, arch_info_struct + 15),
-  N (32, bfd_mach_sparc_v8plusv,      "sparc:v8plusv",      FALSE, arch_info_struct + 16),
-  N (64, bfd_mach_sparc_v9v,          "sparc:v9v",          FALSE, arch_info_struct + 17),
-  N (32, bfd_mach_sparc_v8plusm,      "sparc:v8plusm",      FALSE, arch_info_struct + 18),
-  N (64, bfd_mach_sparc_v9m,          "sparc:v9m",          FALSE, arch_info_struct + 19),
-  N (32, bfd_mach_sparc_v8plusm8,     "sparc:v8plusm8",     FALSE, arch_info_struct + 20),
-  N (64, bfd_mach_sparc_v9m8,         "sparc:v9m8",         FALSE, NULL)
+  N (32, bfd_mach_sparc_sparclet,     "sparc:sparclet",     false, arch_info_struct + 1),
+  N (32, bfd_mach_sparc_sparclite,    "sparc:sparclite",    false, arch_info_struct + 2),
+  N (32, bfd_mach_sparc_v8plus,       "sparc:v8plus",       false, arch_info_struct + 3),
+  N (32, bfd_mach_sparc_v8plusa,      "sparc:v8plusa",      false, arch_info_struct + 4),
+  N (32, bfd_mach_sparc_sparclite_le, "sparc:sparclite_le", false, arch_info_struct + 5),
+  N (64, bfd_mach_sparc_v9,           "sparc:v9",           false, arch_info_struct + 6),
+  N (64, bfd_mach_sparc_v9a,          "sparc:v9a",          false, arch_info_struct + 7),
+  N (32, bfd_mach_sparc_v8plusb,      "sparc:v8plusb",      false, arch_info_struct + 8),
+  N (64, bfd_mach_sparc_v9b,          "sparc:v9b",          false, arch_info_struct + 9),
+  N (32, bfd_mach_sparc_v8plusc,      "sparc:v8plusc",      false, arch_info_struct + 10),
+  N (64, bfd_mach_sparc_v9c,          "sparc:v9c",          false, arch_info_struct + 11),
+  N (32, bfd_mach_sparc_v8plusd,      "sparc:v8plusd",      false, arch_info_struct + 12),
+  N (64, bfd_mach_sparc_v9d,          "sparc:v9d",          false, arch_info_struct + 13),
+  N (32, bfd_mach_sparc_v8pluse,      "sparc:v8pluse",      false, arch_info_struct + 14),
+  N (64, bfd_mach_sparc_v9e,          "sparc:v9e",          false, arch_info_struct + 15),
+  N (32, bfd_mach_sparc_v8plusv,      "sparc:v8plusv",      false, arch_info_struct + 16),
+  N (64, bfd_mach_sparc_v9v,          "sparc:v9v",          false, arch_info_struct + 17),
+  N (32, bfd_mach_sparc_v8plusm,      "sparc:v8plusm",      false, arch_info_struct + 18),
+  N (64, bfd_mach_sparc_v9m,          "sparc:v9m",          false, arch_info_struct + 19),
+  N (32, bfd_mach_sparc_v8plusm8,     "sparc:v8plusm8",     false, arch_info_struct + 20),
+  N (64, bfd_mach_sparc_v9m8,         "sparc:v9m8",         false, NULL)
 };
 
 const bfd_arch_info_type bfd_sparc_arch =
-  N (32, bfd_mach_sparc, "sparc", TRUE, arch_info_struct);
+  N (32, bfd_mach_sparc, "sparc", true, arch_info_struct);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-spu.c ./bfd/cpu-spu.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-spu.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-spu.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -44,7 +44,7 @@ const bfd_arch_info_type bfd_spu_arch =
   "spu",		/* Architecture name.  */
   "spu:256K",		/* Printable name.  */
   3,			/* Section alignment power.  */
-  TRUE,			/* Default machine.  */
+  true,			/* Default machine.  */
   spu_compatible,	/* The spu is only compatible with itself, see above.  */
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic30.c ./bfd/cpu-tic30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic30.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-tic30.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Texas Instruments TMS320C30 architecture.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_tic30_arch
   "tic30",
   "tms320c30",
   2,
-  TRUE,				/* The one and only.  */
+  true,				/* The one and only.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic4x.c ./bfd/cpu-tic4x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic4x.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-tic4x.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* bfd back-end for TMS320C[34]x support
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
 
@@ -24,7 +24,7 @@
 #include "bfd.h"
 #include "libbfd.h"
 
-static bfd_boolean
+static bool
 tic4x_scan (const struct bfd_arch_info *info,
 	    const char *string)
 {
@@ -35,14 +35,14 @@ tic4x_scan (const struct bfd_arch_info *
   if (*string == 'C' || *string == 'c')
     string++;
   if (string[1] < '0' && string[1] > '9')
-    return FALSE;
+    return false;
 
   if (*string == '3')
     return (info->mach == bfd_mach_tic3x);
   else if (*string == '4')
     return info->mach == bfd_mach_tic4x;
 
-  return FALSE;
+  return false;
 }
 
 #define N(NUMBER, NAME, PRINT, DEFAULT, NEXT)		\
@@ -64,7 +64,7 @@ tic4x_scan (const struct bfd_arch_info *
   }
 
 const bfd_arch_info_type bfd_tic3x_arch =
-  N (bfd_mach_tic3x, "tic3x", "tms320c3x", FALSE, NULL);
+  N (bfd_mach_tic3x, "tic3x", "tms320c3x", false, NULL);
 
 const bfd_arch_info_type bfd_tic4x_arch =
-  N (bfd_mach_tic4x, "tic4x", "tms320c4x", TRUE, &bfd_tic3x_arch);
+  N (bfd_mach_tic4x, "tic4x", "tms320c4x", true, &bfd_tic3x_arch);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic54x.c ./bfd/cpu-tic54x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic54x.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-tic54x.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Texas Instruments TMS320C54X architecture.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_tic54x_arch
   "tic54x",
   "tms320c54x",
   1,
-  TRUE,				/* The one and only.  */
+  true,				/* The one and only.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic6x.c ./bfd/cpu-tic6x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic6x.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-tic6x.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the TI C6X processor.
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_tic6x_arch
   "tic6x", /* Architecture name.  */
   "tic6x", /* Printable name.  */
   2, /* Section alignment power.  */
-  TRUE, /* Default machine for this architecture.  */
+  true, /* Default machine for this architecture.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic80.c ./bfd/cpu-tic80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tic80.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-tic80.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,42 +0,0 @@
-/* bfd back-end for TI TMS320C80 (MVP) support
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
-   Written by Fred Fish at Cygnus support (fnf@cygnus.com)
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-const bfd_arch_info_type bfd_tic80_arch =
-{
-  32,				/* Bits in a word.  */
-  32,				/* Bits in an address.  */
-  8,				/* Bits in a byte.  */
-  bfd_arch_tic80,		/* Architecture number.  */
-  0,				/* Only 1 machine.  */
-  "tic80",			/* Architecture name.  */
-  "tic80",			/* Printable name.  */
-  2,				/* Section alignment power.  */
-  TRUE,				/* Default machine.  */
-  bfd_default_compatible,
-  bfd_default_scan,
-  bfd_arch_default_fill,
-  NULL,				/* Pointer to next in chain.  */
-  0 /* Maximum offset of a reloc from the start of an insn.  */
-};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tilegx.c ./bfd/cpu-tilegx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tilegx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-tilegx.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the TILE-Gx processor.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -41,8 +41,8 @@
   }
 
 const bfd_arch_info_type bfd_tilegx32_arch =
-  N (32, bfd_mach_tilegx32, "tilegx32", FALSE, NULL);
+  N (32, bfd_mach_tilegx32, "tilegx32", false, NULL);
 
 const bfd_arch_info_type bfd_tilegx_arch =
-  N (64, bfd_mach_tilegx, "tilegx", TRUE, &bfd_tilegx32_arch);
+  N (64, bfd_mach_tilegx, "tilegx", true, &bfd_tilegx32_arch);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tilepro.c ./bfd/cpu-tilepro.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-tilepro.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-tilepro.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the TILEPro processor.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_tilepro_arc
   "tilepro",
   "tilepro",
   3,
-  TRUE,
+  true,
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-v850.c ./bfd/cpu-v850.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-v850.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-v850.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the NEC V850 processor
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,13 +29,13 @@
 
 static const bfd_arch_info_type arch_info_struct[6] =
 {
-  N (bfd_mach_v850e3v5, "v850e3v5", FALSE, arch_info_struct + 1),
-  N (bfd_mach_v850e3v5, "v850e2v4", FALSE, arch_info_struct + 2),
-  N (bfd_mach_v850e2v3, "v850e2v3", FALSE, arch_info_struct + 3),
-  N (bfd_mach_v850e2,	"v850e2",   FALSE, arch_info_struct + 4),
-  N (bfd_mach_v850e1,	"v850e1",   FALSE, arch_info_struct + 5),
-  N (bfd_mach_v850e,	"v850e",    FALSE, NULL)
+  N (bfd_mach_v850e3v5, "v850e3v5", false, arch_info_struct + 1),
+  N (bfd_mach_v850e3v5, "v850e2v4", false, arch_info_struct + 2),
+  N (bfd_mach_v850e2v3, "v850e2v3", false, arch_info_struct + 3),
+  N (bfd_mach_v850e2,	"v850e2",   false, arch_info_struct + 4),
+  N (bfd_mach_v850e1,	"v850e1",   false, arch_info_struct + 5),
+  N (bfd_mach_v850e,	"v850e",    false, NULL)
 };
 
 const bfd_arch_info_type bfd_v850_arch =
-  N (bfd_mach_v850,     "v850",     TRUE,  arch_info_struct + 0);
+  N (bfd_mach_v850,     "v850",     true,  arch_info_struct + 0);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-v850_rh850.c ./bfd/cpu-v850_rh850.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-v850_rh850.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-v850_rh850.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the NEC V850 processor with the RH850 ABI.
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,14 +29,14 @@
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  R (bfd_mach_v850e3v5, "v850e3v5",	FALSE, & arch_info_struct[1]),
-  R (bfd_mach_v850e3v5, "v850e2v4",	FALSE, & arch_info_struct[2]),
-  R (bfd_mach_v850e2v3, "v850e2v3",	FALSE, & arch_info_struct[3]),
-  R (bfd_mach_v850e2,	"v850e2",	FALSE, & arch_info_struct[4]),
-  R (bfd_mach_v850e1,	"v850e1",	FALSE, & arch_info_struct[5]),
-  R (bfd_mach_v850e,	"v850e",	FALSE, & arch_info_struct[6]),
-  R (bfd_mach_v850,	"v850-rh850",	FALSE, NULL) /* For backwards compatibility.  */
+  R (bfd_mach_v850e3v5, "v850e3v5",	false, & arch_info_struct[1]),
+  R (bfd_mach_v850e3v5, "v850e2v4",	false, & arch_info_struct[2]),
+  R (bfd_mach_v850e2v3, "v850e2v3",	false, & arch_info_struct[3]),
+  R (bfd_mach_v850e2,	"v850e2",	false, & arch_info_struct[4]),
+  R (bfd_mach_v850e1,	"v850e1",	false, & arch_info_struct[5]),
+  R (bfd_mach_v850e,	"v850e",	false, & arch_info_struct[6]),
+  R (bfd_mach_v850,	"v850-rh850",	false, NULL) /* For backwards compatibility.  */
 };
 
 const bfd_arch_info_type bfd_v850_rh850_arch =
-  R (bfd_mach_v850,	"v850:rh850",	TRUE,  & arch_info_struct[0]);
+  R (bfd_mach_v850,	"v850:rh850",	true,  & arch_info_struct[0]);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-vax.c ./bfd/cpu-vax.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-vax.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-vax.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* bfd back-end for vax support
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_vax_arch =
   "vax",
   "vax",
   3,
-  TRUE, /* The one and only.  */
+  true, /* The one and only.  */
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-visium.c ./bfd/cpu-visium.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-visium.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-visium.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD support for the Visium processor.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -33,7 +33,7 @@ const bfd_arch_info_type bfd_visium_arch
   "visium",			/* Architecture name.  */
   "visium",			/* Machine name.  */
   2,				/* Section align power.  */
-  TRUE,				/* The default ?  */
+  true,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
   bfd_arch_default_fill,	/* Default fill.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-wasm32.c ./bfd/cpu-wasm32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-wasm32.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-wasm32.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the WebAssembly target
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,8 +29,8 @@
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (bfd_mach_wasm32, "wasm32", TRUE, NULL)
+  N (bfd_mach_wasm32, "wasm32", true, NULL)
 };
 
 const bfd_arch_info_type bfd_wasm32_arch =
-  N (bfd_mach_wasm32, "wasm32", TRUE, & arch_info_struct[0]);
+  N (bfd_mach_wasm32, "wasm32", true, & arch_info_struct[0]);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-xc16x.c ./bfd/cpu-xc16x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-xc16x.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-xc16x.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,53 +0,0 @@
-/* BFD support for the Infineon XC16X Microcontroller.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
-   Contributed by KPIT Cummins Infosystems
-
-   This file is part of BFD, the Binary File Descriptor library.
-   Contributed by Anil Paranjpe(anilp1@kpitcummins.com)
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
-   02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-
-#define N(BITS_ADDR, NUMBER, PRINT, DEFAULT, NEXT)	\
-  {							\
-    16,        /* Bits in a word.  */			\
-    BITS_ADDR, /* Bits in an address.  */		\
-    8,	       /* Bits in a byte.  */			\
-    bfd_arch_xc16x,					\
-    NUMBER,						\
-    "xc16x",						\
-    PRINT,						\
-    1,		/* Section alignment power.  */		\
-    DEFAULT,						\
-    bfd_default_compatible,				\
-    bfd_default_scan,					\
-    bfd_arch_default_fill,				\
-    NEXT,						\
-    0 /* Maximum offset of a reloc from the start of an insn.  */ \
-  }
-
-const bfd_arch_info_type xc16xs_info_struct =
-  N (16, bfd_mach_xc16xs, "xc16xs", FALSE, NULL);
-
-const bfd_arch_info_type xc16xl_info_struct =
-  N (32, bfd_mach_xc16xl, "xc16xl", FALSE, & xc16xs_info_struct);
-
-const bfd_arch_info_type bfd_xc16x_arch =
-  N (16, bfd_mach_xc16x, "xc16x", TRUE, & xc16xl_info_struct);
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-xgate.c ./bfd/cpu-xgate.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-xgate.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-xgate.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Freescale XGATE processor
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_xgate_arch
   "xgate",
   "xgate",
   4,	/* Section alignment power.  */
-  TRUE,
+  true,
   bfd_default_compatible,
   bfd_default_scan,
   bfd_arch_default_fill,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-xstormy16.c ./bfd/cpu-xstormy16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-xstormy16.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-xstormy16.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the XSTORMY16 processor.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_xstormy16_a
   "xstormy16",			/* Architecture name.  */
   "xstormy16",			/* Printable name.  */
   2,				/* Section align power.  */
-  TRUE,				/* The default ?  */
+  true,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
   bfd_arch_default_fill,	/* Default fill.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-xtensa.c ./bfd/cpu-xtensa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-xtensa.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-xtensa.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Xtensa processor.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,7 +32,7 @@ const bfd_arch_info_type bfd_xtensa_arch
   "xtensa",			/* Architecture name.  */
   "xtensa",			/* Printable name.  */
   4,				/* Section align power.  */
-  TRUE,				/* The default?  */
+  true,				/* The default?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
   bfd_arch_default_fill,	/* Default fill.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-z80.c ./bfd/cpu-z80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-z80.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-z80.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for the Z80 architecture.
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
    Contributed by Arnold Metselaar <arnold_m@operamail.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -31,27 +31,91 @@ const bfd_arch_info_type bfd_z80_arch;
 static const bfd_arch_info_type *
 compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
 {
-  if (a->arch != b->arch)
+  if (a->arch != b->arch || a->arch != bfd_arch_z80)
     return NULL;
 
   if (a->mach == b->mach)
     return a;
+  switch (a->mach)
+    {
+    case bfd_mach_z80:
+    case bfd_mach_z80full:
+    case bfd_mach_z80strict:
+      switch (b->mach)
+	{
+	case bfd_mach_z80:
+	case bfd_mach_z80full:
+	case bfd_mach_z80strict:
+	  return & bfd_z80_arch;
+	case bfd_mach_z180:
+	case bfd_mach_ez80_z80:
+	case bfd_mach_ez80_adl:
+	case bfd_mach_z80n:
+	case bfd_mach_r800:
+	  return b;
+	}
+      break;
+    case bfd_mach_z80n:
+    case bfd_mach_r800:
+      switch (b->mach)
+	{
+	case bfd_mach_z80:
+	case bfd_mach_z80full:
+	case bfd_mach_z80strict:
+	  return a;
+	}
+      break;
+    case bfd_mach_z180:
+      switch (b->mach)
+	{
+	case bfd_mach_z80:
+	case bfd_mach_z80full:
+	case bfd_mach_z80strict:
+	  return a;
+	case bfd_mach_ez80_z80:
+	case bfd_mach_ez80_adl:
+	  return b;
+	}
+      break;
+    case bfd_mach_ez80_z80:
+    case bfd_mach_ez80_adl:
+      switch (b->mach)
+	{
+	case bfd_mach_z80:
+	case bfd_mach_z80full:
+	case bfd_mach_z80strict:
+	case bfd_mach_z180:
+	case bfd_mach_ez80_z80:
+	  return a;
+	case bfd_mach_ez80_adl:
+	  return b;
+	}
+      break;
+    case bfd_mach_gbz80:
+       return NULL;
+    }
 
-  return (a->arch == bfd_arch_z80) ? & bfd_z80_arch : NULL;
+  return NULL;
 }
 
-#define N(name,print,default,next)  \
- { 16, 16, 8, bfd_arch_z80, name, "z80", print, 0, default, \
+#define N(name,print,bits,default,next)  \
+ { 16, bits, 8, bfd_arch_z80, name, "z80", print, 0, default, \
    compatible, bfd_default_scan, bfd_arch_default_fill, next, 0 }
 
 #define M(n) &arch_info_struct[n]
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (bfd_mach_z80strict, "z80-strict", FALSE, M(1)),
-  N (bfd_mach_z80,	 "z80",	       FALSE, M(2)),
-  N (bfd_mach_z80full,	 "z80-full",   FALSE, M(3)),
-  N (bfd_mach_r800,	 "r800",       FALSE, NULL)
+  N (bfd_mach_z80,	 "z80",        16, true,  M(1)),
+  N (bfd_mach_z80strict, "z80-strict", 16, false, M(2)),
+  N (bfd_mach_z80full,	 "z80-full",   16, false, M(3)),
+  N (bfd_mach_r800,	 "r800",       16, false, M(4)),
+  N (bfd_mach_gbz80,	 "gbz80",      16, false, M(5)),
+  N (bfd_mach_z180,	 "z180",       16, false, M(6)),
+  N (bfd_mach_z80n,	 "z80n",       16, false, M(7)),
+  N (bfd_mach_ez80_z80,	 "ez80-z80",   16, false, M(8)),
+  N (bfd_mach_ez80_adl,	 "ez80-adl",   24, false, NULL)
 };
 
-const bfd_arch_info_type bfd_z80_arch = N (0, "z80-any", TRUE, M(0));
+const bfd_arch_info_type bfd_z80_arch =
+  N (bfd_mach_z80,   "z80",   16, true,  M(1));
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-z8k.c ./bfd/cpu-z8k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/cpu-z8k.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/cpu-z8k.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for the Z800n architecture.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
    Hacked by Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -36,13 +36,13 @@ compatible (const bfd_arch_info_type *a,
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  { 32, 16, 8, bfd_arch_z8k, bfd_mach_z8002, "z8k", "z8002", 1, FALSE,
+  { 32, 16, 8, bfd_arch_z8k, bfd_mach_z8002, "z8k", "z8002", 1, false,
     compatible, bfd_default_scan, bfd_arch_default_fill, NULL, 0 }
 };
 
 const bfd_arch_info_type bfd_z8k_arch =
 {
-  32, 32, 8, bfd_arch_z8k, bfd_mach_z8001, "z8k", "z8001", 1, TRUE,
+  32, 32, 8, bfd_arch_z8k, bfd_mach_z8001, "z8k", "z8001", 1, true,
   compatible, bfd_default_scan, bfd_arch_default_fill,
   &arch_info_struct[0], 0
 };
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/development.sh ./bfd/development.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/development.sh	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/development.sh	2024-02-01 01:47:13.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2019 Free Software Foundation, Inc.
+# Copyright (C) 2012-2024 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/aoutx.texi ./bfd/doc/aoutx.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/aoutx.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/aoutx.texi	2024-02-01 01:50:55.000000000 +0000
@@ -1,7 +1,6 @@
 @section a.out backends
 
 
-@strong{Description}@*
 BFD supports a number of different flavours of a.out format,
 though the major differences are only the sizes of the
 structures on disk, and the shape of the relocation
@@ -97,7 +96,6 @@ configuration is selected.
 @subsection Relocations
 
 
-@strong{Description}@*
 The file @file{aoutx.h} provides for both the @emph{standard}
 and @emph{extended} forms of a.out relocation records.
 
@@ -108,73 +106,44 @@ integer for an addend.
 @subsection Internal entry points
 
 
-@strong{Description}@*
 @file{aoutx.h} exports several routines for accessing the
 contents of an a.out file, which are gathered and exported in
 turn by various format specific files (eg sunos.c).
 
 @findex aout_@var{size}_swap_exec_header_in
 @subsubsection @code{aout_@var{size}_swap_exec_header_in}
-@strong{Synopsis}
-@example
-void aout_@var{size}_swap_exec_header_in,
-   (bfd *abfd,
-    struct external_exec *bytes,
-    struct internal_exec *execp);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void aout_@var{size}_swap_exec_header_in, (bfd *abfd, struct external_exec *bytes, struct internal_exec *execp); 
 Swap the information in an executable header @var{raw_bytes} taken
 from a raw byte stream memory image into the internal exec header
 structure @var{execp}.
 
+@end deftypefn
 @findex aout_@var{size}_swap_exec_header_out
 @subsubsection @code{aout_@var{size}_swap_exec_header_out}
-@strong{Synopsis}
-@example
-void aout_@var{size}_swap_exec_header_out
-   (bfd *abfd,
-    struct internal_exec *execp,
-    struct external_exec *raw_bytes);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void aout_@var{size}_swap_exec_header_out (bfd *abfd, struct internal_exec *execp, struct external_exec *raw_bytes); 
 Swap the information in an internal exec header structure
 @var{execp} into the buffer @var{raw_bytes} ready for writing to disk.
 
+@end deftypefn
 @findex aout_@var{size}_some_aout_object_p
 @subsubsection @code{aout_@var{size}_some_aout_object_p}
-@strong{Synopsis}
-@example
-const bfd_target *aout_@var{size}_some_aout_object_p
-   (bfd *abfd,
-    struct internal_exec *execp,
-    const bfd_target *(*callback_to_real_object_p) (bfd *));
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_cleanup aout_@var{size}_some_aout_object_p (bfd *abfd, struct internal_exec *execp, bfd_cleanup (*callback_to_real_object_p) (bfd *)); 
 Some a.out variant thinks that the file open in @var{abfd}
 checking is an a.out file.  Do some more checking, and set up
 for access if it really is.  Call back to the calling
 environment's "finish up" function just before returning, to
 handle any last-minute setup.
 
+@end deftypefn
 @findex aout_@var{size}_mkobject
 @subsubsection @code{aout_@var{size}_mkobject}
-@strong{Synopsis}
-@example
-bfd_boolean aout_@var{size}_mkobject, (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool aout_@var{size}_mkobject, (bfd *abfd); 
 Initialize BFD @var{abfd} for use with a.out files.
 
+@end deftypefn
 @findex aout_@var{size}_machine_type
 @subsubsection @code{aout_@var{size}_machine_type}
-@strong{Synopsis}
-@example
-enum machine_type  aout_@var{size}_machine_type
-   (enum bfd_architecture arch,
-    unsigned long machine,
-    bfd_boolean *unknown);
-@end example
-@strong{Description}@*
+@deftypefn {Function} enum machine_type aout_@var{size}_machine_type (enum bfd_architecture arch, unsigned long machine, bool *unknown); 
 Keep track of machine architecture and machine type for
 a.out's. Return the @code{machine_type} for a particular
 architecture and machine, or @code{M_UNKNOWN} if that exact architecture
@@ -183,29 +152,19 @@ and machine can't be represented in a.ou
 If the architecture is understood, machine type 0 (default)
 is always understood.
 
+@end deftypefn
 @findex aout_@var{size}_set_arch_mach
 @subsubsection @code{aout_@var{size}_set_arch_mach}
-@strong{Synopsis}
-@example
-bfd_boolean aout_@var{size}_set_arch_mach,
-   (bfd *,
-    enum bfd_architecture arch,
-    unsigned long machine);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool aout_@var{size}_set_arch_mach, (bfd *, enum bfd_architecture arch, unsigned long machine); 
 Set the architecture and the machine of the BFD @var{abfd} to the
 values @var{arch} and @var{machine}.  Verify that @var{abfd}'s format
 can support the architecture required.
 
+@end deftypefn
 @findex aout_@var{size}_new_section_hook
 @subsubsection @code{aout_@var{size}_new_section_hook}
-@strong{Synopsis}
-@example
-bfd_boolean aout_@var{size}_new_section_hook,
-   (bfd *abfd,
-    asection *newsect);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool aout_@var{size}_new_section_hook, (bfd *abfd, asection *newsect); 
 Called by the BFD in response to a @code{bfd_make_section}
 request.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/archive.texi ./bfd/doc/archive.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/archive.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/archive.texi	2024-02-01 01:50:55.000000000 +0000
@@ -1,7 +1,6 @@
 @section Archives
 
 
-@strong{Description}@*
 An archive (or library) is just another BFD.  It has a symbol
 table, although there's not much a user program will do with it.
 
@@ -61,12 +60,7 @@ Archives are supported in BFD in @code{a
 
 @findex bfd_get_next_mapent
 @subsubsection @code{bfd_get_next_mapent}
-@strong{Synopsis}
-@example
-symindex bfd_get_next_mapent
-   (bfd *abfd, symindex previous, carsym **sym);
-@end example
-@strong{Description}@*
+@deftypefn {Function} symindex bfd_get_next_mapent (bfd *abfd, symindex previous, carsym **sym); 
 Step through archive @var{abfd}'s symbol table (if it
 has one).  Successively update @var{sym} with the next symbol's
 information, returning that symbol's (internal) index into the
@@ -79,23 +73,17 @@ got the last one.
 A @code{carsym} is a canonical archive symbol.  The only
 user-visible element is its name, a null-terminated string.
 
+@end deftypefn
 @findex bfd_set_archive_head
 @subsubsection @code{bfd_set_archive_head}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_archive_head (bfd *output, bfd *new_head); 
 Set the head of the chain of
 BFDs contained in the archive @var{output} to @var{new_head}.
 
+@end deftypefn
 @findex bfd_openr_next_archived_file
 @subsubsection @code{bfd_openr_next_archived_file}
-@strong{Synopsis}
-@example
-bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous); 
 Provided a BFD, @var{archive}, containing an archive and NULL, open
 an input BFD on the first contained element and returns that.
 Subsequent calls should pass the archive and the previous return
@@ -104,3 +92,4 @@ is returned when there are no more.
 Note - if you want to process the bfd returned by this call be
 sure to call bfd_check_format() on it first.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/archures.texi ./bfd/doc/archures.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/archures.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/archures.texi	2024-02-01 01:50:55.000000000 +0000
@@ -24,7 +24,6 @@ BFD's idea of an architecture is impleme
 @subsection bfd_architecture
 
 
-@strong{Description}@*
 This enum gives the object file's CPU architecture, in a
 global sense---i.e., what processor family does it belong to?
 Another field indicates which processor within
@@ -140,6 +139,7 @@ enum bfd_architecture
 #define bfd_mach_mips16000             16000
 #define bfd_mach_mips16                16
 #define bfd_mach_mips5                 5
+#define bfd_mach_mips_allegrex         10111431 /* octal 'AL', 31.  */
 #define bfd_mach_mips_loongson_2e      3001
 #define bfd_mach_mips_loongson_2f      3002
 #define bfd_mach_mips_gs464            3003
@@ -172,16 +172,6 @@ enum bfd_architecture
 #define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
 #define bfd_mach_x86_64_intel_syntax   (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
 #define bfd_mach_x64_32_intel_syntax   (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
-  bfd_arch_l1om,      /* Intel L1OM.  */
-#define bfd_mach_l1om                  (1 << 5)
-#define bfd_mach_l1om_intel_syntax     (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
-  bfd_arch_k1om,      /* Intel K1OM.  */
-#define bfd_mach_k1om                  (1 << 6)
-#define bfd_mach_k1om_intel_syntax     (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
-#define bfd_mach_i386_nacl             (1 << 7)
-#define bfd_mach_i386_i386_nacl        (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
-#define bfd_mach_x86_64_nacl           (bfd_mach_x86_64 | bfd_mach_i386_nacl)
-#define bfd_mach_x64_32_nacl           (bfd_mach_x64_32 | bfd_mach_i386_nacl)
   bfd_arch_iamcu,     /* Intel MCU.  */
 #define bfd_mach_iamcu                 (1 << 8)
 #define bfd_mach_i386_iamcu            (bfd_mach_i386_i386 | bfd_mach_iamcu)
@@ -199,7 +189,6 @@ enum bfd_architecture
 #define bfd_mach_h8300sx       6
 #define bfd_mach_h8300sxn      7
   bfd_arch_pdp11,     /* DEC PDP-11.  */
-  bfd_arch_plugin,
   bfd_arch_powerpc,   /* PowerPC.  */
 #define bfd_mach_ppc           32
 #define bfd_mach_ppc64         64
@@ -309,6 +298,7 @@ enum bfd_architecture
 #define bfd_mach_arm_8M_BASE   25
 #define bfd_mach_arm_8M_MAIN   26
 #define bfd_mach_arm_8_1M_MAIN 27
+#define bfd_mach_arm_9         28
   bfd_arch_nds32,     /* Andes NDS32.  */
 #define bfd_mach_n1            1
 #define bfd_mach_n1h           2
@@ -322,7 +312,6 @@ enum bfd_architecture
 #define bfd_mach_tic4x         40
   bfd_arch_tic54x,    /* Texas Instruments TMS320C54X.  */
   bfd_arch_tic6x,     /* Texas Instruments TMS320C6X.  */
-  bfd_arch_tic80,     /* TI TMS320c80 (MVP).  */
   bfd_arch_v850,      /* NEC V850.  */
   bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI).  */
 #define bfd_mach_v850          1
@@ -384,6 +373,7 @@ enum bfd_architecture
 #define bfd_mach_iq10          2
   bfd_arch_bpf,       /* Linux eBPF.  */
 #define bfd_mach_bpf           1
+#define bfd_mach_xbpf          2
   bfd_arch_epiphany,  /* Adapteva EPIPHANY.  */
 #define bfd_mach_epiphany16    1
 #define bfd_mach_epiphany32    2
@@ -464,22 +454,44 @@ enum bfd_architecture
 #define bfd_mach_msp46         46
 #define bfd_mach_msp47         47
 #define bfd_mach_msp54         54
-  bfd_arch_xc16x,     /* Infineon's XC16X Series.  */
-#define bfd_mach_xc16x         1
-#define bfd_mach_xc16xl        2
-#define bfd_mach_xc16xs        3
   bfd_arch_xgate,     /* Freescale XGATE.  */
 #define bfd_mach_xgate         1
   bfd_arch_xtensa,    /* Tensilica's Xtensa cores.  */
 #define bfd_mach_xtensa        1
   bfd_arch_z80,
-#define bfd_mach_z80strict     1 /* No undocumented opcodes.  */
-#define bfd_mach_z80           3 /* With ixl, ixh, iyl, and iyh.  */
-#define bfd_mach_z80full       7 /* All undocumented instructions.  */
-#define bfd_mach_r800          11 /* R800: successor with multiplication.  */
+/* Zilog Z80 without undocumented opcodes.  */
+#define bfd_mach_z80strict     1
+/* Zilog Z180: successor with additional instructions, but without
+ halves of ix and iy.  */
+#define bfd_mach_z180          2
+/* Zilog Z80 with ixl, ixh, iyl, and iyh.  */
+#define bfd_mach_z80           3
+/* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode.  */
+#define bfd_mach_ez80_z80      4
+/* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode.  */
+#define bfd_mach_ez80_adl      5
+/* Z80N */
+#define bfd_mach_z80n          6
+/* Zilog Z80 with all undocumented instructions.  */
+#define bfd_mach_z80full       7
+/* GameBoy Z80 (reduced instruction set).  */
+#define bfd_mach_gbz80         8
+/* ASCII R800: successor with multiplication.  */
+#define bfd_mach_r800          11
   bfd_arch_lm32,      /* Lattice Mico32.  */
 #define bfd_mach_lm32          1
   bfd_arch_microblaze,/* Xilinx MicroBlaze.  */
+  bfd_arch_kvx,        /* Kalray VLIW core of the MPPA processor family */
+#define bfd_mach_kv3_unknown       0
+#define bfd_mach_kv3_1             1
+#define bfd_mach_kv3_1_64          2
+#define bfd_mach_kv3_1_usr         3
+#define bfd_mach_kv3_2             4
+#define bfd_mach_kv3_2_64          5
+#define bfd_mach_kv3_2_usr         6
+#define bfd_mach_kv4_1             7
+#define bfd_mach_kv4_1_64          8
+#define bfd_mach_kv4_1_usr         9
   bfd_arch_tilepro,   /* Tilera TILEPro.  */
   bfd_arch_tilegx,    /* Tilera TILE-Gx.  */
 #define bfd_mach_tilepro       1
@@ -487,7 +499,9 @@ enum bfd_architecture
 #define bfd_mach_tilegx32      2
   bfd_arch_aarch64,   /* AArch64.  */
 #define bfd_mach_aarch64 0
+#define bfd_mach_aarch64_8R    1
 #define bfd_mach_aarch64_ilp32 32
+#define bfd_mach_aarch64_llp64 64
   bfd_arch_nios2,     /* Nios II.  */
 #define bfd_mach_nios2         0
 #define bfd_mach_nios2r1       1
@@ -510,6 +524,26 @@ enum bfd_architecture
 #define bfd_mach_ck803         5
 #define bfd_mach_ck807         6
 #define bfd_mach_ck810         7
+#define bfd_mach_ck860         8
+  bfd_arch_loongarch,       /* LoongArch */
+#define bfd_mach_loongarch32   1
+#define bfd_mach_loongarch64   2
+  bfd_arch_amdgcn,     /* AMDGCN */
+#define bfd_mach_amdgcn_unknown 0x000
+#define bfd_mach_amdgcn_gfx900  0x02c
+#define bfd_mach_amdgcn_gfx904  0x02e
+#define bfd_mach_amdgcn_gfx906  0x02f
+#define bfd_mach_amdgcn_gfx908  0x030
+#define bfd_mach_amdgcn_gfx90a  0x03f
+#define bfd_mach_amdgcn_gfx1010 0x033
+#define bfd_mach_amdgcn_gfx1011 0x034
+#define bfd_mach_amdgcn_gfx1012 0x035
+#define bfd_mach_amdgcn_gfx1030 0x036
+#define bfd_mach_amdgcn_gfx1031 0x037
+#define bfd_mach_amdgcn_gfx1032 0x038
+#define bfd_mach_amdgcn_gfx1100 0x041
+#define bfd_mach_amdgcn_gfx1101 0x046
+#define bfd_mach_amdgcn_gfx1102 0x047
   bfd_arch_last
   @};
 @end example
@@ -517,7 +551,6 @@ enum bfd_architecture
 @subsection bfd_arch_info
 
 
-@strong{Description}@*
 This structure contains information on architectures for use
 within BFD.
 @example
@@ -535,17 +568,16 @@ typedef struct bfd_arch_info
   /* TRUE if this is the default machine for the architecture.
      The default arch should be the first entry for an arch so that
      all the entries for that arch can be accessed via @code{next}.  */
-  bfd_boolean the_default;
+  bool the_default;
   const struct bfd_arch_info * (*compatible) (const struct bfd_arch_info *,
                                               const struct bfd_arch_info *);
 
-  bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
+  bool (*scan) (const struct bfd_arch_info *, const char *);
 
   /* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
      IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
      TRUE, the buffer contains code.  */
-  void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
-                 bfd_boolean code);
+  void *(*fill) (bfd_size_type count, bool is_bigendian, bool code);
 
   const struct bfd_arch_info *next;
 
@@ -565,52 +597,38 @@ bfd_arch_info_type;
 
 @findex bfd_printable_name
 @subsubsection @code{bfd_printable_name}
-@strong{Synopsis}
-@example
-const char *bfd_printable_name (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const char *bfd_printable_name (bfd *abfd); 
 Return a printable string representing the architecture and machine
 from the pointer to the architecture info structure.
 
+@end deftypefn
 @findex bfd_scan_arch
 @subsubsection @code{bfd_scan_arch}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_scan_arch (const char *string);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const bfd_arch_info_type *bfd_scan_arch (const char *string); 
 Figure out if BFD supports any cpu which could be described with
 the name @var{string}.  Return a pointer to an @code{arch_info}
 structure if a machine is found, otherwise NULL.
 
+@end deftypefn
 @findex bfd_arch_list
 @subsubsection @code{bfd_arch_list}
-@strong{Synopsis}
-@example
-const char **bfd_arch_list (void);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const char **bfd_arch_list (void); 
 Return a freshly malloced NULL-terminated vector of the names
 of all the valid BFD architectures.  Do not modify the names.
 
+@end deftypefn
 @findex bfd_arch_get_compatible
 @subsubsection @code{bfd_arch_get_compatible}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_arch_get_compatible
-   (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const bfd_arch_info_type *bfd_arch_get_compatible (const bfd *abfd, const bfd *bbfd, bool accept_unknowns); 
 Determine whether two BFDs' architectures and machine types
 are compatible.  Calculates the lowest common denominator
 between the two architectures and machine types implied by
 the BFDs and returns a pointer to an @code{arch_info} structure
 describing the compatible machine.
 
+@end deftypefn
 @findex bfd_default_arch_struct
 @subsubsection @code{bfd_default_arch_struct}
-@strong{Description}@*
 The @code{bfd_default_arch_struct} is an item of
 @code{bfd_arch_info_type} which has been initialized to a fairly
 generic state.  A BFD starts life by pointing to this
@@ -618,161 +636,111 @@ structure, until the correct back end ha
 architecture of the file.
 @example
 extern const bfd_arch_info_type bfd_default_arch_struct;
+
 @end example
 
 @findex bfd_set_arch_info
 @subsubsection @code{bfd_set_arch_info}
-@strong{Synopsis}
-@example
-void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg); 
 Set the architecture info of @var{abfd} to @var{arg}.
 
+@end deftypefn
 @findex bfd_default_set_arch_mach
 @subsubsection @code{bfd_default_set_arch_mach}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_default_set_arch_mach
-   (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_default_set_arch_mach (bfd *abfd, enum bfd_architecture arch, unsigned long mach); 
 Set the architecture and machine type in BFD @var{abfd}
 to @var{arch} and @var{mach}.  Find the correct
 pointer to a structure and insert it into the @code{arch_info}
 pointer.
 
+@end deftypefn
 @findex bfd_get_arch
 @subsubsection @code{bfd_get_arch}
-@strong{Synopsis}
-@example
-enum bfd_architecture bfd_get_arch (const bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} enum bfd_architecture bfd_get_arch (const bfd *abfd); 
 Return the enumerated type which describes the BFD @var{abfd}'s
 architecture.
 
+@end deftypefn
 @findex bfd_get_mach
 @subsubsection @code{bfd_get_mach}
-@strong{Synopsis}
-@example
-unsigned long bfd_get_mach (const bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} unsigned long bfd_get_mach (const bfd *abfd); 
 Return the long type which describes the BFD @var{abfd}'s
 machine.
 
+@end deftypefn
 @findex bfd_arch_bits_per_byte
 @subsubsection @code{bfd_arch_bits_per_byte}
-@strong{Synopsis}
-@example
-unsigned int bfd_arch_bits_per_byte (const bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} unsigned int bfd_arch_bits_per_byte (const bfd *abfd); 
 Return the number of bits in one of the BFD @var{abfd}'s
 architecture's bytes.
 
+@end deftypefn
 @findex bfd_arch_bits_per_address
 @subsubsection @code{bfd_arch_bits_per_address}
-@strong{Synopsis}
-@example
-unsigned int bfd_arch_bits_per_address (const bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} unsigned int bfd_arch_bits_per_address (const bfd *abfd); 
 Return the number of bits in one of the BFD @var{abfd}'s
 architecture's addresses.
 
+@end deftypefn
 @findex bfd_default_compatible
 @subsubsection @code{bfd_default_compatible}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_default_compatible
-   (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const bfd_arch_info_type *bfd_default_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b); 
 The default function for testing for compatibility.
 
+@end deftypefn
 @findex bfd_default_scan
 @subsubsection @code{bfd_default_scan}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_default_scan
-   (const struct bfd_arch_info *info, const char *string);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_default_scan (const struct bfd_arch_info *info, const char *string); 
 The default function for working out whether this is an
 architecture hit and a machine hit.
 
+@end deftypefn
 @findex bfd_get_arch_info
 @subsubsection @code{bfd_get_arch_info}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd); 
 Return the architecture info struct in @var{abfd}.
 
+@end deftypefn
 @findex bfd_lookup_arch
 @subsubsection @code{bfd_lookup_arch}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_lookup_arch
-   (enum bfd_architecture arch, unsigned long machine);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const bfd_arch_info_type *bfd_lookup_arch (enum bfd_architecture arch, unsigned long machine); 
 Look for the architecture info structure which matches the
 arguments @var{arch} and @var{machine}. A machine of 0 matches the
 machine/architecture structure which marks itself as the
 default.
 
+@end deftypefn
 @findex bfd_printable_arch_mach
 @subsubsection @code{bfd_printable_arch_mach}
-@strong{Synopsis}
-@example
-const char *bfd_printable_arch_mach
-   (enum bfd_architecture arch, unsigned long machine);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const char *bfd_printable_arch_mach (enum bfd_architecture arch, unsigned long machine); 
 Return a printable string representing the architecture and
 machine type.
 
 This routine is depreciated.
 
+@end deftypefn
 @findex bfd_octets_per_byte
 @subsubsection @code{bfd_octets_per_byte}
-@strong{Synopsis}
-@example
-unsigned int bfd_octets_per_byte (const bfd *abfd,
-    const asection *sec);
-@end example
-@strong{Description}@*
+@deftypefn {Function} unsigned int bfd_octets_per_byte (const bfd *abfd, const asection *sec); 
 Return the number of octets (8-bit quantities) per target byte
 (minimum addressable unit).  In most cases, this will be one, but some
 DSP targets have 16, 32, or even 48 bits per byte.
 
+@end deftypefn
 @findex bfd_arch_mach_octets_per_byte
 @subsubsection @code{bfd_arch_mach_octets_per_byte}
-@strong{Synopsis}
-@example
-unsigned int bfd_arch_mach_octets_per_byte
-   (enum bfd_architecture arch, unsigned long machine);
-@end example
-@strong{Description}@*
+@deftypefn {Function} unsigned int bfd_arch_mach_octets_per_byte (enum bfd_architecture arch, unsigned long machine); 
 See bfd_octets_per_byte.
 
 This routine is provided for those cases where a bfd * is not
 available
 
+@end deftypefn
 @findex bfd_arch_default_fill
 @subsubsection @code{bfd_arch_default_fill}
-@strong{Synopsis}
-@example
-void *bfd_arch_default_fill (bfd_size_type count,
-    bfd_boolean is_bigendian,
-    bfd_boolean code);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void *bfd_arch_default_fill (bfd_size_type count, bool is_bigendian, bool code); 
 Allocate via bfd_malloc and return a fill buffer of size COUNT.
 If IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If
 CODE is TRUE, the buffer contains code.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfd.info ./bfd/doc/bfd.info
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfd.info	2019-12-11 01:51:27.000000000 +0000
+++ ./bfd/doc/bfd.info	2024-02-01 01:51:00.000000000 +0000
@@ -1,8 +1,8 @@
-This is bfd.info, produced by makeinfo version 6.3 from bfd.texi.
+This is bfd.info, produced by makeinfo version 6.5 from bfd.texi.
 
 This file documents the BFD library.
 
-   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+   Copyright (C) 1991-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -298,9 +298,10 @@ File: bfd.info,  Node: BFD front end,  N
 
 * typedef bfd::
 * Error reporting::
+* Initialization::
+* Threading::
 * Miscellaneous::
 * Memory Usage::
-* Initialization::
 * Sections::
 * Symbols::
 * Archives::
@@ -328,28 +329,6 @@ the BFD and to data in the BFD.
    Here is the structure that defines the type 'bfd'.  It contains the
 major data about the file and pointers to the rest of the data.
 
-
-     enum bfd_direction
-       {
-         no_direction = 0,
-         read_direction = 1,
-         write_direction = 2,
-         both_direction = 3
-       };
-
-     enum bfd_plugin_format
-       {
-         bfd_plugin_unknown = 0,
-         bfd_plugin_yes = 1,
-         bfd_plugin_no = 2
-       };
-
-     struct bfd_build_id
-       {
-         bfd_size_type size;
-         bfd_byte data[1];
-       };
-
      struct bfd
      {
        /* The filename the application opened the BFD with.  */
@@ -378,12 +357,6 @@ major data about the file and pointers t
        /* A unique identifier of the BFD  */
        unsigned int id;
 
-       /* The format which belongs to the BFD. (object, core, etc.)  */
-       ENUM_BITFIELD (bfd_format) format : 3;
-
-       /* The direction with which the BFD was opened.  */
-       ENUM_BITFIELD (bfd_direction) direction : 2;
-
        /* Format_specific flags.  */
        flagword flags;
 
@@ -440,8 +413,8 @@ major data about the file and pointers t
      #define BFD_TRADITIONAL_FORMAT    0x400
 
        /* This flag indicates that the BFD contents are actually cached
-          in memory.  If this is set, iostream points to a bfd_in_memory
-          struct.  */
+          in memory.  If this is set, iostream points to a malloc'd
+          bfd_in_memory struct.  */
      #define BFD_IN_MEMORY             0x800
 
        /* This BFD has been created by the linker and doesn't correspond
@@ -475,17 +448,39 @@ major data about the file and pointers t
        /* Put pathnames into archives (non-POSIX).  */
      #define BFD_ARCHIVE_FULL_PATH  0x100000
 
-       /* Flags bits to be saved in bfd_preserve_save.  */
-     #define BFD_FLAGS_SAVED \
-       (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
-        | BFD_PLUGIN | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON \
-        | BFD_USE_ELF_STT_COMMON)
+     #define BFD_CLOSED_BY_CACHE    0x200000
+       /* Compress sections in this BFD with SHF_COMPRESSED zstd.  */
+     #define BFD_COMPRESS_ZSTD      0x400000
+
+       /* Don't generate ELF section header.  */
+     #define BFD_NO_SECTION_HEADER  0x800000
 
        /* Flags bits which are for BFD use only.  */
      #define BFD_FLAGS_FOR_BFD_USE_MASK \
        (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
         | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
-        | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
+        | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON \
+        | BFD_NO_SECTION_HEADER)
+
+       /* The format which belongs to the BFD. (object, core, etc.)  */
+       ENUM_BITFIELD (bfd_format) format : 3;
+
+       /* The direction with which the BFD was opened.  */
+       ENUM_BITFIELD (bfd_direction) direction : 2;
+
+       /* POSIX.1-2017 (IEEE Std 1003.1) says of fopen : "When a file is
+          opened with update mode ('+' as the second or third character in
+          the mode argument), both input and output may be performed on
+          the associated stream.  However, the application shall ensure
+          that output is not directly followed by input without an
+          intervening call to fflush() or to a file positioning function
+          (fseek(), fsetpos(), or rewind()), and input is not directly
+          followed by output without an intervening call to a file
+          positioning function, unless the input operation encounters
+          end-of-file."
+          This field tracks the last IO operation, so that bfd can insert
+          a seek when IO direction changes.  */
+       ENUM_BITFIELD (bfd_last_io) last_io : 2;
 
        /* Is the file descriptor being cached?  That is, can it be closed as
           needed, and re-opened when accessed later?  */
@@ -538,13 +533,16 @@ major data about the file and pointers t
        /* Set if this is a slim LTO object not loaded with a compiler plugin.  */
        unsigned int lto_slim_object : 1;
 
+       /* Do not attempt to modify this file.  Set when detecting errors
+          that BFD is not prepared to handle for objcopy/strip.  */
+       unsigned int read_only : 1;
+
        /* Set to dummy BFD created when claimed by a compiler plug-in
           library.  */
        bfd *plugin_dummy_bfd;
 
-       /* Currently my_archive is tested before adding origin to
-          anything. I believe that this can become always an add of
-          origin, with origin set to 0 for non archive files.  */
+       /* The offset of this bfd in the file, typically 0 if it is not
+          contained in an archive.  */
        ufile_ptr origin;
 
        /* The origin in the archive of the proxy entry.  This will
@@ -566,17 +564,26 @@ major data about the file and pointers t
        /* The number of sections.  */
        unsigned int section_count;
 
+       /* The archive plugin file descriptor.  */
+       int archive_plugin_fd;
+
+       /* The number of opens on the archive plugin file descriptor.  */
+       unsigned int archive_plugin_fd_open_count;
+
        /* A field used by _bfd_generic_link_add_archive_symbols.  This will
           be used only for archive elements.  */
        int archive_pass;
 
+       /* The total size of memory from bfd_alloc.  */
+       bfd_size_type alloc_size;
+
        /* Stuff only useful for object files:
           The start address.  */
        bfd_vma start_address;
 
        /* Symbol table for output BFD (with symcount entries).
           Also used by the linker to cache input BFD symbols.  */
-       struct bfd_symbol  **outsymbols;
+       struct bfd_symbol **outsymbols;
 
        /* Used for input and output.  */
        unsigned int symcount;
@@ -587,6 +594,11 @@ major data about the file and pointers t
        /* Pointer to structure which contains architecture information.  */
        const struct bfd_arch_info *arch_info;
 
+       /* Cached length of file for bfd_get_size.  0 until bfd_get_size is
+          called, 1 if stat returns an error or the file size is too large to
+          return in ufile_ptr.  Both 0 and 1 should be treated as "unknown".  */
+       ufile_ptr size;
+
        /* Stuff only useful for archives.  */
        void *arelt_data;
        struct bfd *my_archive;      /* The containing archive BFD.  */
@@ -617,8 +629,6 @@ major data about the file and pointers t
            struct tekhex_data_struct *tekhex_data;
            struct elf_obj_tdata *elf_obj_data;
            struct mmo_data_struct *mmo_data;
-           struct sun_core_struct *sun_core_data;
-           struct sco5_core_struct *sco5_core_data;
            struct trad_core_struct *trad_core_data;
            struct som_data_struct *som_data;
            struct hpux_core_struct *hpux_core_data;
@@ -627,7 +637,6 @@ major data about the file and pointers t
            struct lynx_core_struct *lynx_core_data;
            struct osf_core_struct *osf_core_data;
            struct cisco_core_struct *cisco_core_data;
-           struct versados_data_struct *versados_data;
            struct netbsd_core_struct *netbsd_core_data;
            struct mach_o_data_struct *mach_o_data;
            struct mach_o_fat_data_struct *mach_o_fat_data;
@@ -651,231 +660,9 @@ major data about the file and pointers t
        const struct bfd_build_id *build_id;
      };
 
-     static inline const char *
-     bfd_get_filename (const bfd *abfd)
-     {
-       return abfd->filename;
-     }
-
-     static inline bfd_boolean
-     bfd_get_cacheable (const bfd *abfd)
-     {
-       return abfd->cacheable;
-     }
-
-     static inline enum bfd_format
-     bfd_get_format (const bfd *abfd)
-     {
-       return abfd->format;
-     }
-
-     static inline flagword
-     bfd_get_file_flags (const bfd *abfd)
-     {
-       return abfd->flags;
-     }
-
-     static inline bfd_vma
-     bfd_get_start_address (const bfd *abfd)
-     {
-       return abfd->start_address;
-     }
-
-     static inline unsigned int
-     bfd_get_symcount (const bfd *abfd)
-     {
-       return abfd->symcount;
-     }
-
-     static inline unsigned int
-     bfd_get_dynamic_symcount (const bfd *abfd)
-     {
-       return abfd->dynsymcount;
-     }
-
-     static inline struct bfd_symbol **
-     bfd_get_outsymbols (const bfd *abfd)
-     {
-       return abfd->outsymbols;
-     }
-
-     static inline unsigned int
-     bfd_count_sections (const bfd *abfd)
-     {
-       return abfd->section_count;
-     }
-
-     static inline bfd_boolean
-     bfd_has_map (const bfd *abfd)
-     {
-       return abfd->has_armap;
-     }
-
-     static inline bfd_boolean
-     bfd_is_thin_archive (const bfd *abfd)
-     {
-       return abfd->is_thin_archive;
-     }
-
-     static inline void *
-     bfd_usrdata (const bfd *abfd)
-     {
-       return abfd->usrdata;
-     }
-
-     /* See note beside bfd_set_section_userdata.  */
-     static inline bfd_boolean
-     bfd_set_cacheable (bfd * abfd, bfd_boolean val)
-     {
-       abfd->cacheable = val;
-       return TRUE;
-     }
-
-     static inline void
-     bfd_set_thin_archive (bfd *abfd, bfd_boolean val)
-     {
-       abfd->is_thin_archive = val;
-     }
-
-     static inline void
-     bfd_set_usrdata (bfd *abfd, void *val)
-     {
-       abfd->usrdata = val;
-     }
-
-     static inline asection *
-     bfd_asymbol_section (const asymbol *sy)
-     {
-       return sy->section;
-     }
-
-     static inline bfd_vma
-     bfd_asymbol_value (const asymbol *sy)
-     {
-       return sy->section->vma + sy->value;
-     }
-
-     static inline const char *
-     bfd_asymbol_name (const asymbol *sy)
-     {
-       return sy->name;
-     }
-
-     static inline struct bfd *
-     bfd_asymbol_bfd (const asymbol *sy)
-     {
-       return sy->the_bfd;
-     }
-
-     static inline void
-     bfd_set_asymbol_name (asymbol *sy, const char *name)
-     {
-       sy->name = name;
-     }
-
-     static inline bfd_size_type
-     bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
-     {
-       if (abfd->direction != write_direction && sec->rawsize != 0)
-         return sec->rawsize;
-       return sec->size;
-     }
-
-     /* Find the address one past the end of SEC.  */
-     static inline bfd_size_type
-     bfd_get_section_limit (const bfd *abfd, const asection *sec)
-     {
-       return (bfd_get_section_limit_octets (abfd, sec)
-               / bfd_octets_per_byte (abfd, sec));
-     }
-
-     /* Functions to handle insertion and deletion of a bfd's sections.  These
-        only handle the list pointers, ie. do not adjust section_count,
-        target_index etc.  */
-     static inline void
-     bfd_section_list_remove (bfd *abfd, asection *s)
-     {
-       asection *next = s->next;
-       asection *prev = s->prev;
-       if (prev)
-         prev->next = next;
-       else
-         abfd->sections = next;
-       if (next)
-         next->prev = prev;
-       else
-         abfd->section_last = prev;
-     }
-
-     static inline void
-     bfd_section_list_append (bfd *abfd, asection *s)
-     {
-       s->next = 0;
-       if (abfd->section_last)
-         {
-           s->prev = abfd->section_last;
-           abfd->section_last->next = s;
-         }
-       else
-         {
-           s->prev = 0;
-           abfd->sections = s;
-         }
-       abfd->section_last = s;
-     }
-
-     static inline void
-     bfd_section_list_prepend (bfd *abfd, asection *s)
-     {
-       s->prev = 0;
-       if (abfd->sections)
-         {
-           s->next = abfd->sections;
-           abfd->sections->prev = s;
-         }
-       else
-         {
-           s->next = 0;
-           abfd->section_last = s;
-         }
-       abfd->sections = s;
-     }
-
-     static inline void
-     bfd_section_list_insert_after (bfd *abfd, asection *a, asection *s)
-     {
-       asection *next = a->next;
-       s->next = next;
-       s->prev = a;
-       a->next = s;
-       if (next)
-         next->prev = s;
-       else
-         abfd->section_last = s;
-     }
-
-     static inline void
-     bfd_section_list_insert_before (bfd *abfd, asection *b, asection *s)
-     {
-       asection *prev = b->prev;
-       s->prev = prev;
-       s->next = b;
-       b->prev = s;
-       if (prev)
-         prev->next = s;
-       else
-         abfd->sections = s;
-     }
-
-     static inline bfd_boolean
-     bfd_section_removed_from_list (const bfd *abfd, const asection *s)
-     {
-       return s->next ? s->next->prev != s : abfd->section_last != s;
-     }
-
 
 
-File: bfd.info,  Node: Error reporting,  Next: Miscellaneous,  Prev: typedef bfd,  Up: BFD front end
+File: bfd.info,  Node: Error reporting,  Next: Initialization,  Prev: typedef bfd,  Up: BFD front end
 
 2.2 Error reporting
 ===================
@@ -889,13 +676,14 @@ check 'errno'.
    The easiest way to report a BFD error to the user is to use
 'bfd_perror'.
 
+   The BFD error is thread-local.
+
 2.2.1 Type 'bfd_error_type'
 ---------------------------
 
 The values returned by 'bfd_get_error' are defined by the enumerated
 type 'bfd_error_type'.
 
-
      typedef enum bfd_error
      {
        bfd_error_no_error = 0,
@@ -928,52 +716,60 @@ type 'bfd_error_type'.
 2.2.1.1 'bfd_get_error'
 .......................
 
-*Synopsis*
-     bfd_error_type bfd_get_error (void);
-   *Description*
-Return the current BFD error condition.
+ -- Function: bfd_error_type bfd_get_error (void);
+     Return the current BFD error condition.
 
 2.2.1.2 'bfd_set_error'
 .......................
 
-*Synopsis*
-     void bfd_set_error (bfd_error_type error_tag);
-   *Description*
-Set the BFD error condition to be ERROR_TAG.
+ -- Function: void bfd_set_error (bfd_error_type error_tag);
+     Set the BFD error condition to be ERROR_TAG.
 
-   ERROR_TAG must not be bfd_error_on_input.  Use bfd_set_input_error
-for input errors instead.
+     ERROR_TAG must not be bfd_error_on_input.  Use bfd_set_input_error
+     for input errors instead.
 
 2.2.1.3 'bfd_set_input_error'
 .............................
 
-*Synopsis*
-     void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
-   *Description*
-Set the BFD error condition to be bfd_error_on_input.  INPUT is the
-input bfd where the error occurred, and ERROR_TAG the bfd_error_type
-error.
+ -- Function: void bfd_set_input_error (bfd *input, bfd_error_type
+          error_tag);
+     Set the BFD error condition to be bfd_error_on_input.  INPUT is the
+     input bfd where the error occurred, and ERROR_TAG the
+     bfd_error_type error.
 
 2.2.1.4 'bfd_errmsg'
 ....................
 
-*Synopsis*
-     const char *bfd_errmsg (bfd_error_type error_tag);
-   *Description*
-Return a string describing the error ERROR_TAG, or the system error if
-ERROR_TAG is 'bfd_error_system_call'.
+ -- Function: const char *bfd_errmsg (bfd_error_type error_tag);
+     Return a string describing the error ERROR_TAG, or the system error
+     if ERROR_TAG is 'bfd_error_system_call'.
 
 2.2.1.5 'bfd_perror'
 ....................
 
-*Synopsis*
-     void bfd_perror (const char *message);
-   *Description*
-Print to the standard error stream a string describing the last BFD
-error that occurred, or the last system error if the last BFD error was
-a system call failure.  If MESSAGE is non-NULL and non-empty, the error
-string printed is preceded by MESSAGE, a colon, and a space.  It is
-followed by a newline.
+ -- Function: void bfd_perror (const char *message);
+     Print to the standard error stream a string describing the last BFD
+     error that occurred, or the last system error if the last BFD error
+     was a system call failure.  If MESSAGE is non-NULL and non-empty,
+     the error string printed is preceded by MESSAGE, a colon, and a
+     space.  It is followed by a newline.
+
+2.2.1.6 '_bfd_clear_error_data'
+...............................
+
+ -- Function: void _bfd_clear_error_data (void);
+     Free any data associated with the BFD error.
+
+2.2.1.7 'bfd_asprintf'
+......................
+
+ -- Function: char *bfd_asprintf (const char *fmt, ...);
+     Primarily for error reporting, this function is like libiberty's
+     xasprintf except that it can return NULL on no memory and the
+     returned string should not be freed.  Uses a thread-local malloc'd
+     buffer managed by libbfd, _bfd_error_buf.  Be aware that a call to
+     this function frees the result of any previous call.  bfd_errmsg
+     (bfd_error_on_input) also calls this function.
 
 2.2.2 BFD error handler
 -----------------------
@@ -984,42 +780,52 @@ the program.
 
    The BFD error handler acts like vprintf.
 
-
      typedef void (*bfd_error_handler_type) (const char *, va_list);
 
 
 2.2.2.1 '_bfd_error_handler'
 ............................
 
-*Synopsis*
-     void _bfd_error_handler (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
-   *Description*
-This is the default routine to handle BFD error messages.  Like fprintf
-(stderr, ...), but also handles some extra format specifiers.
-
-   %pA section name from section.  For group components, prints group
-name too.  %pB file name from bfd.  For archive components, prints
-archive too.
+ -- Function: void _bfd_error_handler (const char *fmt, ...)
+          ATTRIBUTE_PRINTF_1;
+     This is the default routine to handle BFD error messages.  Like
+     fprintf (stderr, ...), but also handles some extra format
+     specifiers.
+
+     %pA section name from section.  For group components, prints group
+     name too.  %pB file name from bfd.  For archive components, prints
+     archive too.
 
-   Beware: Only supports a maximum of 9 format arguments.
+     Beware: Only supports a maximum of 9 format arguments.
 
 2.2.2.2 'bfd_set_error_handler'
 ...............................
 
-*Synopsis*
-     bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
-   *Description*
-Set the BFD error handler function.  Returns the previous function.
+ -- Function: bfd_error_handler_type bfd_set_error_handler
+          (bfd_error_handler_type);
+     Set the BFD error handler function.  Returns the previous function.
+
+2.2.2.3 '_bfd_set_error_handler_caching'
+........................................
+
+ -- Function: bfd_error_handler_type _bfd_set_error_handler_caching (bfd
+          *);
+     Set the BFD error handler function to one that stores messages to
+     the per_xvec_warn array.  Returns the previous function.
 
-2.2.2.3 'bfd_set_error_program_name'
+2.2.2.4 'bfd_set_error_program_name'
 ....................................
 
-*Synopsis*
-     void bfd_set_error_program_name (const char *);
-   *Description*
-Set the program name to use when printing a BFD error.  This is printed
-before the error message followed by a colon and space.  The string must
-not be changed after it is passed to this function.
+ -- Function: void bfd_set_error_program_name (const char *);
+     Set the program name to use when printing a BFD error.  This is
+     printed before the error message followed by a colon and space.
+     The string must not be changed after it is passed to this function.
+
+2.2.2.5 '_bfd_get_error_program_name'
+.....................................
+
+ -- Function: const char *_bfd_get_error_program_name (void);
+     Get the program name used when printing a BFD error.
 
 2.2.3 BFD assert handler
 ------------------------
@@ -1031,7 +837,6 @@ with an error, or mark the current BFD o
 recommended to override the default handler, which just calls
 _bfd_error_handler and continues.
 
-
      typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
                                               const char *bfd_version,
                                               const char *bfd_file,
@@ -1041,204 +846,247 @@ _bfd_error_handler and continues.
 2.2.3.1 'bfd_set_assert_handler'
 ................................
 
-*Synopsis*
-     bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
-   *Description*
-Set the BFD assert handler function.  Returns the previous function.
+ -- Function: bfd_assert_handler_type bfd_set_assert_handler
+          (bfd_assert_handler_type);
+     Set the BFD assert handler function.  Returns the previous
+     function.
+
+
+File: bfd.info,  Node: Initialization,  Next: Threading,  Prev: Error reporting,  Up: BFD front end
+
+2.2.3.2 'bfd_init'
+..................
+
+ -- Function: unsigned int bfd_init (void);
+     This routine must be called before any other BFD function to
+     initialize magical internal data structures.  Returns a magic
+     number, which may be used to check that the bfd library is
+     configured as expected by users.
+          /* Value returned by bfd_init.  */
+          #define BFD_INIT_MAGIC (sizeof (struct bfd_section))
+
+
+
+File: bfd.info,  Node: Threading,  Next: Miscellaneous,  Prev: Initialization,  Up: BFD front end
+
+2.3 Threading
+=============
+
+BFD has limited support for thread-safety.  Most BFD globals are
+protected by locks, while the error-related globals are thread-local.  A
+given BFD cannot safely be used from two threads at the same time; it is
+up to the application to do any needed locking.  However, it is ok for
+different threads to work on different BFD objects at the same time.
+
+2.3.1 Thread functions.
+-----------------------
+
+     typedef bool (*bfd_lock_unlock_fn_type) (void *);
+
+2.3.1.1 'bfd_thread_init'
+.........................
+
+ -- Function: bool bfd_thread_init (bfd_lock_unlock_fn_type lock,
+          bfd_lock_unlock_fn_type unlock, void *data);
+     Initialize BFD threading.  The functions passed in will be used to
+     lock and unlock global data structures.  This may only be called a
+     single time in a given process.  Returns true on success and false
+     on error.  DATA is passed verbatim to the lock and unlock
+     functions.  The lock and unlock functions should return true on
+     success, or set the BFD error and return false on failure.
+
+2.3.1.2 'bfd_thread_cleanup'
+............................
+
+ -- Function: void bfd_thread_cleanup (void);
+     Clean up any thread-local state.  This should be called by a thread
+     that uses any BFD functions, before the thread exits.  It is fine
+     to call this multiple times, or to call it and then later call BFD
+     functions on the same thread again.
+
+2.3.1.3 'bfd_lock'
+..................
+
+ -- Function: bool bfd_lock (void);
+     Acquire the global BFD lock, if needed.  Returns true on success,
+     false on error.
+
+2.3.1.4 'bfd_unlock'
+....................
+
+ -- Function: bool bfd_unlock (void);
+     Release the global BFD lock, if needed.  Returns true on success,
+     false on error.
 
 
-File: bfd.info,  Node: Miscellaneous,  Next: Memory Usage,  Prev: Error reporting,  Up: BFD front end
+File: bfd.info,  Node: Miscellaneous,  Next: Memory Usage,  Prev: Threading,  Up: BFD front end
 
-2.3 Miscellaneous
+2.4 Miscellaneous
 =================
 
-2.3.1 Miscellaneous functions
+2.4.1 Miscellaneous functions
 -----------------------------
 
-2.3.1.1 'bfd_get_reloc_upper_bound'
+2.4.1.1 'bfd_get_reloc_upper_bound'
 ...................................
 
-*Synopsis*
-     long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
-   *Description*
-Return the number of bytes required to store the relocation information
-associated with section SECT attached to bfd ABFD.  If an error occurs,
-return -1.
+ -- Function: long bfd_get_reloc_upper_bound (bfd *abfd, asection
+          *sect);
+     Return the number of bytes required to store the relocation
+     information associated with section SECT attached to bfd ABFD.  If
+     an error occurs, return -1.
 
-2.3.1.2 'bfd_canonicalize_reloc'
+2.4.1.2 'bfd_canonicalize_reloc'
 ................................
 
-*Synopsis*
-     long bfd_canonicalize_reloc
-        (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
-   *Description*
-Call the back end associated with the open BFD ABFD and translate the
-external form of the relocation information attached to SEC into the
-internal canonical form.  Place the table into memory at LOC, which has
-been preallocated, usually by a call to 'bfd_get_reloc_upper_bound'.
-Returns the number of relocs, or -1 on error.
+ -- Function: long bfd_canonicalize_reloc (bfd *abfd, asection *sec,
+          arelent **loc, asymbol **syms);
+     Call the back end associated with the open BFD ABFD and translate
+     the external form of the relocation information attached to SEC
+     into the internal canonical form.  Place the table into memory at
+     LOC, which has been preallocated, usually by a call to
+     'bfd_get_reloc_upper_bound'.  Returns the number of relocs, or -1
+     on error.
 
-   The SYMS table is also needed for horrible internal magic reasons.
+     The SYMS table is also needed for horrible internal magic reasons.
 
-2.3.1.3 'bfd_set_reloc'
+2.4.1.3 'bfd_set_reloc'
 .......................
 
-*Synopsis*
-     void bfd_set_reloc
-        (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
-   *Description*
-Set the relocation pointer and count within section SEC to the values
-REL and COUNT.  The argument ABFD is ignored.
-     #define bfd_set_reloc(abfd, asect, location, count) \
-            BFD_SEND (abfd, _bfd_set_reloc, (abfd, asect, location, count))
+ -- Function: void bfd_set_reloc (bfd *abfd, asection *sec, arelent
+          **rel, unsigned int count);
+     Set the relocation pointer and count within section SEC to the
+     values REL and COUNT.  The argument ABFD is ignored.
+          #define bfd_set_reloc(abfd, asect, location, count) \
+                 BFD_SEND (abfd, _bfd_set_reloc, (abfd, asect, location, count))
 
-2.3.1.4 'bfd_set_file_flags'
+2.4.1.4 'bfd_set_file_flags'
 ............................
 
-*Synopsis*
-     bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
-   *Description*
-Set the flag word in the BFD ABFD to the value FLAGS.
-
-   Possible errors are:
-
-   * 'bfd_error_wrong_format' - The target bfd was not of object format.
-   * 'bfd_error_invalid_operation' - The target bfd was open for
-     reading.
-   * 'bfd_error_invalid_operation' - The flag word contained a bit which
-     was not applicable to the type of file.  E.g., an attempt was made
-     to set the 'D_PAGED' bit on a BFD format which does not support
-     demand paging.
+ -- Function: bool bfd_set_file_flags (bfd *abfd, flagword flags);
+     Set the flag word in the BFD ABFD to the value FLAGS.
+
+     Possible errors are:
+
+        * 'bfd_error_wrong_format' - The target bfd was not of object
+          format.
+        * 'bfd_error_invalid_operation' - The target bfd was open for
+          reading.
+        * 'bfd_error_invalid_operation' - The flag word contained a bit
+          which was not applicable to the type of file.  E.g., an
+          attempt was made to set the 'D_PAGED' bit on a BFD format
+          which does not support demand paging.
 
-2.3.1.5 'bfd_get_arch_size'
+2.4.1.5 'bfd_get_arch_size'
 ...........................
 
-*Synopsis*
-     int bfd_get_arch_size (bfd *abfd);
-   *Description*
-Returns the normalized architecture address size, in bits, as determined
-by the object file's format.  By normalized, we mean either 32 or 64.
-For ELF, this information is included in the header.  Use
-bfd_arch_bits_per_address for number of bits in the architecture
-address.
+ -- Function: int bfd_get_arch_size (bfd *abfd);
+     Returns the normalized architecture address size, in bits, as
+     determined by the object file's format.  By normalized, we mean
+     either 32 or 64.  For ELF, this information is included in the
+     header.  Use bfd_arch_bits_per_address for number of bits in the
+     architecture address.
 
-   *Returns*
-Returns the arch size in bits if known, '-1' otherwise.
+     Returns the arch size in bits if known, '-1' otherwise.
 
-2.3.1.6 'bfd_get_sign_extend_vma'
+2.4.1.6 'bfd_get_sign_extend_vma'
 .................................
 
-*Synopsis*
-     int bfd_get_sign_extend_vma (bfd *abfd);
-   *Description*
-Indicates if the target architecture "naturally" sign extends an
-address.  Some architectures implicitly sign extend address values when
-they are converted to types larger than the size of an address.  For
-instance, bfd_get_start_address() will return an address sign extended
-to fill a bfd_vma when this is the case.
-
-   *Returns*
-Returns '1' if the target architecture is known to sign extend
-addresses, '0' if the target architecture is known to not sign extend
-addresses, and '-1' otherwise.
+ -- Function: int bfd_get_sign_extend_vma (bfd *abfd);
+     Indicates if the target architecture "naturally" sign extends an
+     address.  Some architectures implicitly sign extend address values
+     when they are converted to types larger than the size of an
+     address.  For instance, bfd_get_start_address() will return an
+     address sign extended to fill a bfd_vma when this is the case.
+
+     Returns '1' if the target architecture is known to sign extend
+     addresses, '0' if the target architecture is known to not sign
+     extend addresses, and '-1' otherwise.
 
-2.3.1.7 'bfd_set_start_address'
+2.4.1.7 'bfd_set_start_address'
 ...............................
 
-*Synopsis*
-     bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
-   *Description*
-Make VMA the entry point of output BFD ABFD.
+ -- Function: bool bfd_set_start_address (bfd *abfd, bfd_vma vma);
+     Make VMA the entry point of output BFD ABFD.
 
-   *Returns*
-Returns 'TRUE' on success, 'FALSE' otherwise.
+     Returns 'TRUE' on success, 'FALSE' otherwise.
 
-2.3.1.8 'bfd_get_gp_size'
+2.4.1.8 'bfd_get_gp_size'
 .........................
 
-*Synopsis*
-     unsigned int bfd_get_gp_size (bfd *abfd);
-   *Description*
-Return the maximum size of objects to be optimized using the GP register
-under MIPS ECOFF. This is typically set by the '-G' argument to the
-compiler, assembler or linker.
+ -- Function: unsigned int bfd_get_gp_size (bfd *abfd);
+     Return the maximum size of objects to be optimized using the GP
+     register under MIPS ECOFF. This is typically set by the '-G'
+     argument to the compiler, assembler or linker.
 
-2.3.1.9 'bfd_set_gp_size'
+2.4.1.9 'bfd_set_gp_size'
 .........................
 
-*Synopsis*
-     void bfd_set_gp_size (bfd *abfd, unsigned int i);
-   *Description*
-Set the maximum size of objects to be optimized using the GP register
-under ECOFF or MIPS ELF. This is typically set by the '-G' argument to
-the compiler, assembler or linker.
+ -- Function: void bfd_set_gp_size (bfd *abfd, unsigned int i);
+     Set the maximum size of objects to be optimized using the GP
+     register under ECOFF or MIPS ELF. This is typically set by the '-G'
+     argument to the compiler, assembler or linker.
 
-2.3.1.10 'bfd_scan_vma'
-.......................
+2.4.1.10 'bfd_set_gp_value'
+...........................
 
-*Synopsis*
-     bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
-   *Description*
-Convert, like 'strtoul', a numerical expression STRING into a 'bfd_vma'
-integer, and return that integer.  (Though without as many bells and
-whistles as 'strtoul'.)  The expression is assumed to be unsigned (i.e.,
-positive).  If given a BASE, it is used as the base for conversion.  A
-base of 0 causes the function to interpret the string in hex if a
-leading "0x" or "0X" is found, otherwise in octal if a leading zero is
-found, otherwise in decimal.
+ -- Function: void bfd_set_gp_value (bfd *abfd, bfd_vma v);
+     Allow external access to the fucntion to set the GP value.  This is
+     specifically added for gdb-compile support.
 
-   If the value would overflow, the maximum 'bfd_vma' value is returned.
+2.4.1.11 'bfd_scan_vma'
+.......................
+
+ -- Function: bfd_vma bfd_scan_vma (const char *string, const char
+          **end, int base);
+     Convert, like 'strtoul' or 'stdtoull'depending on the size of a
+     'bfd_vma', a numerical expression STRING into a 'bfd_vma' integer,
+     and return that integer.
 
-2.3.1.11 'bfd_copy_private_header_data'
+2.4.1.12 'bfd_copy_private_header_data'
 .......................................
 
-*Synopsis*
-     bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
-   *Description*
-Copy private BFD header information from the BFD IBFD to the the BFD
-OBFD.  This copies information that may require sections to exist, but
-does not require symbol tables.  Return 'true' on success, 'false' on
-error.  Possible error returns are:
-
-   * 'bfd_error_no_memory' - Not enough memory exists to create private
-     data for OBFD.
-     #define bfd_copy_private_header_data(ibfd, obfd) \
-            BFD_SEND (obfd, _bfd_copy_private_header_data, \
-                      (ibfd, obfd))
+ -- Function: bool bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
+     Copy private BFD header information from the BFD IBFD to the the
+     BFD OBFD.  This copies information that may require sections to
+     exist, but does not require symbol tables.  Return 'true' on
+     success, 'false' on error.  Possible error returns are:
+
+        * 'bfd_error_no_memory' - Not enough memory exists to create
+          private data for OBFD.
+          #define bfd_copy_private_header_data(ibfd, obfd) \
+                 BFD_SEND (obfd, _bfd_copy_private_header_data, \
+                           (ibfd, obfd))
 
-2.3.1.12 'bfd_copy_private_bfd_data'
+2.4.1.13 'bfd_copy_private_bfd_data'
 ....................................
 
-*Synopsis*
-     bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
-   *Description*
-Copy private BFD information from the BFD IBFD to the the BFD OBFD.
-Return 'TRUE' on success, 'FALSE' on error.  Possible error returns are:
-
-   * 'bfd_error_no_memory' - Not enough memory exists to create private
-     data for OBFD.
-     #define bfd_copy_private_bfd_data(ibfd, obfd) \
-            BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
-                      (ibfd, obfd))
+ -- Function: bool bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
+     Copy private BFD information from the BFD IBFD to the the BFD OBFD.
+     Return 'TRUE' on success, 'FALSE' on error.  Possible error returns
+     are:
+
+        * 'bfd_error_no_memory' - Not enough memory exists to create
+          private data for OBFD.
+          #define bfd_copy_private_bfd_data(ibfd, obfd) \
+                 BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
+                           (ibfd, obfd))
 
-2.3.1.13 'bfd_set_private_flags'
+2.4.1.14 'bfd_set_private_flags'
 ................................
 
-*Synopsis*
-     bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
-   *Description*
-Set private BFD flag information in the BFD ABFD.  Return 'TRUE' on
-success, 'FALSE' on error.  Possible error returns are:
-
-   * 'bfd_error_no_memory' - Not enough memory exists to create private
-     data for OBFD.
-     #define bfd_set_private_flags(abfd, flags) \
-            BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
+ -- Function: bool bfd_set_private_flags (bfd *abfd, flagword flags);
+     Set private BFD flag information in the BFD ABFD.  Return 'TRUE' on
+     success, 'FALSE' on error.  Possible error returns are:
+
+        * 'bfd_error_no_memory' - Not enough memory exists to create
+          private data for OBFD.
+          #define bfd_set_private_flags(abfd, flags) \
+                 BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
 
-2.3.1.14 'Other functions'
+2.4.1.15 'Other functions'
 ..........................
 
-*Description*
 The following functions exist but have not yet been documented.
      #define bfd_sizeof_headers(abfd, info) \
             BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
@@ -1247,6 +1095,11 @@ The following functions exist but have n
             BFD_SEND (abfd, _bfd_find_nearest_line, \
                       (abfd, syms, sec, off, file, func, line, NULL))
 
+     #define bfd_find_nearest_line_with_alt(abfd, alt_filename, sec, syms, off, \
+                                            file, func, line, disc) \
+            BFD_SEND (abfd, _bfd_find_nearest_line_with_alt, \
+                      (abfd, alt_filename, syms, sec, off, file, func, line, disc))
+
      #define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
                                                 line, disc) \
             BFD_SEND (abfd, _bfd_find_nearest_line, \
@@ -1270,7 +1123,8 @@ The following functions exist but have n
             BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
 
      #define bfd_stat_arch_elt(abfd, stat) \
-            BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
+            BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \
+                      _bfd_stat_arch_elt, (abfd, stat))
 
      #define bfd_update_armap_timestamp(abfd) \
             BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
@@ -1333,138 +1187,68 @@ The following functions exist but have n
      #define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
             BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
 
-     extern bfd_byte *bfd_get_relocated_section_contents
-       (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
-        bfd_boolean, asymbol **);
 
+2.4.1.16 'bfd_get_relocated_section_contents'
+.............................................
 
-2.3.1.15 'bfd_alt_mach_code'
-............................
-
-*Synopsis*
-     bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
-   *Description*
-When more than one machine code number is available for the same machine
-type, this function can be used to switch between the preferred one
-(alternative == 0) and any others.  Currently, only ELF supports this
-feature, with up to two alternate machine codes.
+ -- Function: bfd_byte *bfd_get_relocated_section_contents (bfd *,
+          struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
+          bool, asymbol **);
+     Read and relocate the indirect link_order section, into DATA (if
+     non-NULL) or to a malloc'd buffer.  Return the buffer, or NULL on
+     errors.
 
-2.3.1.16 'bfd_emul_get_maxpagesize'
-...................................
+2.4.1.17 'bfd_record_phdr'
+..........................
 
-*Synopsis*
-     bfd_vma bfd_emul_get_maxpagesize (const char *);
-   *Description*
-Returns the maximum page size, in bytes, as determined by emulation.
+ -- Function: bool bfd_record_phdr (bfd *, unsigned long, bool,
+          flagword, bool, bfd_vma, bool, bool, unsigned int, struct
+          bfd_section **);
+     Record information about an ELF program header.
 
-   *Returns*
-Returns the maximum page size in bytes for ELF, 0 otherwise.
+2.4.1.18 'bfd_sprintf_vma'
+..........................
 
-2.3.1.17 'bfd_emul_set_maxpagesize'
-...................................
+ -- Function: void bfd_sprintf_vma (bfd *, char *, bfd_vma); void
+          bfd_fprintf_vma (bfd *, void *, bfd_vma);
+     bfd_sprintf_vma and bfd_fprintf_vma display an address in the
+     target's address size.
 
-*Synopsis*
-     void bfd_emul_set_maxpagesize (const char *, bfd_vma);
-   *Description*
-For ELF, set the maximum page size for the emulation.  It is a no-op for
-other formats.
+2.4.1.19 'bfd_alt_mach_code'
+............................
 
-2.3.1.18 'bfd_emul_get_commonpagesize'
-......................................
+ -- Function: bool bfd_alt_mach_code (bfd *abfd, int alternative);
+     When more than one machine code number is available for the same
+     machine type, this function can be used to switch between the
+     preferred one (alternative == 0) and any others.  Currently, only
+     ELF supports this feature, with up to two alternate machine codes.
 
-*Synopsis*
-     bfd_vma bfd_emul_get_commonpagesize (const char *, bfd_boolean);
-   *Description*
-Returns the common page size, in bytes, as determined by emulation.
+2.4.1.20 'bfd_emul_get_maxpagesize'
+...................................
 
-   *Returns*
-Returns the common page size in bytes for ELF, 0 otherwise.
+ -- Function: bfd_vma bfd_emul_get_maxpagesize (const char *);
+     Returns the maximum page size, in bytes, as determined by
+     emulation.
 
-2.3.1.19 'bfd_emul_set_commonpagesize'
+2.4.1.21 'bfd_emul_get_commonpagesize'
 ......................................
 
-*Synopsis*
-     void bfd_emul_set_commonpagesize (const char *, bfd_vma);
-   *Description*
-For ELF, set the common page size for the emulation.  It is a no-op for
-other formats.
+ -- Function: bfd_vma bfd_emul_get_commonpagesize (const char *);
+     Returns the common page size, in bytes, as determined by emulation.
 
-2.3.1.20 'bfd_demangle'
+2.4.1.22 'bfd_demangle'
 .......................
 
-*Synopsis*
-     char *bfd_demangle (bfd *, const char *, int);
-   *Description*
-Wrapper around cplus_demangle.  Strips leading underscores and other
-such chars that would otherwise confuse the demangler.  If passed a g++
-v3 ABI mangled name, returns a buffer allocated with malloc holding the
-demangled name.  Returns NULL otherwise and on memory alloc failure.
-
-2.3.1.21 'bfd_update_compression_header'
-........................................
-
-*Synopsis*
-     void bfd_update_compression_header
-        (bfd *abfd, bfd_byte *contents, asection *sec);
-   *Description*
-Set the compression header at CONTENTS of SEC in ABFD and update
-elf_section_flags for compression.
-
-2.3.1.22 'bfd_check_compression_header'
-.......................................
-
-*Synopsis*
-     bfd_boolean bfd_check_compression_header
-        (bfd *abfd, bfd_byte *contents, asection *sec,
-         bfd_size_type *uncompressed_size,
-         unsigned int *uncompressed_alignment_power);
-   *Description*
-Check the compression header at CONTENTS of SEC in ABFD and store the
-uncompressed size in UNCOMPRESSED_SIZE and the uncompressed data
-alignment in UNCOMPRESSED_ALIGNMENT_POWER if the compression header is
-valid.
+ -- Function: char *bfd_demangle (bfd *, const char *, int);
+     Wrapper around cplus_demangle.  Strips leading underscores and
+     other such chars that would otherwise confuse the demangler.  If
+     passed a g++ v3 ABI mangled name, returns a buffer allocated with
+     malloc holding the demangled name.  Returns NULL otherwise and on
+     memory alloc failure.
 
-   *Returns*
-Return TRUE if the compression header is valid.
-
-2.3.1.23 'bfd_get_compression_header_size'
-..........................................
-
-*Synopsis*
-     int bfd_get_compression_header_size (bfd *abfd, asection *sec);
-   *Description*
-Return the size of the compression header of SEC in ABFD.
-
-   *Returns*
-Return the size of the compression header in bytes.
-
-2.3.1.24 'bfd_convert_section_size'
-...................................
-
-*Synopsis*
-     bfd_size_type bfd_convert_section_size
-        (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
-   *Description*
-Convert the size SIZE of the section ISEC in input BFD IBFD to the
-section size in output BFD OBFD.
-
-2.3.1.25 'bfd_convert_section_contents'
-.......................................
-
-*Synopsis*
-     bfd_boolean bfd_convert_section_contents
-        (bfd *ibfd, asection *isec, bfd *obfd,
-         bfd_byte **ptr, bfd_size_type *ptr_size);
-   *Description*
-Convert the contents, stored in *PTR, of the section ISEC in input BFD
-IBFD to output BFD OBFD if needed.  The original buffer pointed to by
-*PTR may be freed and *PTR is returned with memory malloc'd by this
-function, and the new size written to PTR_SIZE.
-
-2.3.1.26 'struct bfd_iovec'
+2.4.1.23 'struct bfd_iovec'
 ...........................
 
-*Description*
 The 'struct bfd_iovec' contains the internal file I/O class.  Each 'BFD'
 has an instance of this class and all file I/O is routed through it (it
 is assumed that the instance implements all methods listed below).
@@ -1500,68 +1284,121 @@ is assumed that the instance implements
      };
      extern const struct bfd_iovec _bfd_memory_iovec;
 
-2.3.1.27 'bfd_get_mtime'
+
+2.4.1.24 'bfd_read'
+...................
+
+ -- Function: bfd_size_type bfd_read (void *, bfd_size_type, bfd *)
+          ATTRIBUTE_WARN_UNUSED_RESULT;
+     Attempt to read SIZE bytes from ABFD's iostream to PTR. Return the
+     amount read.
+
+2.4.1.25 'bfd_write'
+....................
+
+ -- Function: bfd_size_type bfd_write (const void *, bfd_size_type, bfd
+          *) ATTRIBUTE_WARN_UNUSED_RESULT;
+     Attempt to write SIZE bytes to ABFD's iostream from PTR. Return the
+     amount written.
+
+2.4.1.26 'bfd_tell'
+...................
+
+ -- Function: file_ptr bfd_tell (bfd *) ATTRIBUTE_WARN_UNUSED_RESULT;
+     Return ABFD's iostream file position.
+
+2.4.1.27 'bfd_flush'
+....................
+
+ -- Function: int bfd_flush (bfd *);
+     Flush ABFD's iostream pending IO.
+
+2.4.1.28 'bfd_stat'
+...................
+
+ -- Function: int bfd_stat (bfd *, struct stat *)
+          ATTRIBUTE_WARN_UNUSED_RESULT;
+     Call fstat on ABFD's iostream.  Return 0 on success, and a negative
+     value on failure.
+
+2.4.1.29 'bfd_seek'
+...................
+
+ -- Function: int bfd_seek (bfd *, file_ptr, int)
+          ATTRIBUTE_WARN_UNUSED_RESULT;
+     Call fseek on ABFD's iostream.  Return 0 on success, and a negative
+     value on failure.
+
+2.4.1.30 'bfd_get_mtime'
 ........................
 
-*Synopsis*
-     long bfd_get_mtime (bfd *abfd);
-   *Description*
-Return the file modification time (as read from the file system, or from
-the archive header for archive members).
+ -- Function: long bfd_get_mtime (bfd *abfd);
+     Return the file modification time (as read from the file system, or
+     from the archive header for archive members).
 
-2.3.1.28 'bfd_get_size'
+2.4.1.31 'bfd_get_size'
 .......................
 
-*Synopsis*
-     ufile_ptr bfd_get_size (bfd *abfd);
-   *Description*
-Return the file size (as read from file system) for the file associated
-with BFD ABFD.
-
-   The initial motivation for, and use of, this routine is not so we can
-get the exact size of the object the BFD applies to, since that might
-not be generally possible (archive members for example).  It would be
-ideal if someone could eventually modify it so that such results were
-guaranteed.
-
-   Instead, we want to ask questions like "is this NNN byte sized object
-I'm about to try read from file offset YYY reasonable?"  As as example
-of where we might do this, some object formats use string tables for
-which the first 'sizeof (long)' bytes of the table contain the size of
-the table itself, including the size bytes.  If an application tries to
-read what it thinks is one of these string tables, without some way to
-validate the size, and for some reason the size is wrong (byte swapping
-error, wrong location for the string table, etc.), the only clue is
-likely to be a read error when it tries to read the table, or a "virtual
-memory exhausted" error when it tries to allocate 15 bazillon bytes of
-space for the 15 bazillon byte table it is about to read.  This function
-at least allows us to answer the question, "is the size reasonable?".
+ -- Function: ufile_ptr bfd_get_size (bfd *abfd);
+     Return the file size (as read from file system) for the file
+     associated with BFD ABFD.
+
+     The initial motivation for, and use of, this routine is not so we
+     can get the exact size of the object the BFD applies to, since that
+     might not be generally possible (archive members for example).  It
+     would be ideal if someone could eventually modify it so that such
+     results were guaranteed.
+
+     Instead, we want to ask questions like "is this NNN byte sized
+     object I'm about to try read from file offset YYY reasonable?"  As
+     as example of where we might do this, some object formats use
+     string tables for which the first 'sizeof (long)' bytes of the
+     table contain the size of the table itself, including the size
+     bytes.  If an application tries to read what it thinks is one of
+     these string tables, without some way to validate the size, and for
+     some reason the size is wrong (byte swapping error, wrong location
+     for the string table, etc.), the only clue is likely to be a read
+     error when it tries to read the table, or a "virtual memory
+     exhausted" error when it tries to allocate 15 bazillon bytes of
+     space for the 15 bazillon byte table it is about to read.  This
+     function at least allows us to answer the question, "is the size
+     reasonable?".
 
-2.3.1.29 'bfd_get_file_size'
+     A return value of zero indicates the file size is unknown.
+
+2.4.1.32 'bfd_get_file_size'
 ............................
 
-*Synopsis*
-     ufile_ptr bfd_get_file_size (bfd *abfd);
-   *Description*
-Return the file size (as read from file system) for the file associated
-with BFD ABFD.  It supports both normal files and archive elements.
+ -- Function: ufile_ptr bfd_get_file_size (bfd *abfd);
+     Return the file size (as read from file system) for the file
+     associated with BFD ABFD.  It supports both normal files and
+     archive elements.
 
-2.3.1.30 'bfd_mmap'
+2.4.1.33 'bfd_mmap'
 ...................
 
-*Synopsis*
-     void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
-         int prot, int flags, file_ptr offset,
-         void **map_addr, bfd_size_type *map_len);
-   *Description*
-Return mmap()ed region of the file, if possible and implemented.  LEN
-and OFFSET do not need to be page aligned.  The page aligned address and
-length are written to MAP_ADDR and MAP_LEN.
+ -- Function: void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
+          int prot, int flags, file_ptr offset, void **map_addr,
+          bfd_size_type *map_len) ATTRIBUTE_WARN_UNUSED_RESULT;
+     Return mmap()ed region of the file, if possible and implemented.
+     LEN and OFFSET do not need to be page aligned.  The page aligned
+     address and length are written to MAP_ADDR and MAP_LEN.
+
+2.4.1.34 'bfd_get_current_time'
+...............................
+
+ -- Function: time_t bfd_get_current_time (time_t now);
+     Returns the current time.
+
+     If the environment variable SOURCE_DATE_EPOCH is defined then this
+     is parsed and its value is returned.  Otherwise if the paramter NOW
+     is non-zero, then that is returned.  Otherwise the result of the
+     system call "time(NULL)" is returned.
 
 
-File: bfd.info,  Node: Memory Usage,  Next: Initialization,  Prev: Miscellaneous,  Up: BFD front end
+File: bfd.info,  Node: Memory Usage,  Next: Sections,  Prev: Miscellaneous,  Up: BFD front end
 
-2.4 Memory Usage
+2.5 Memory Usage
 ================
 
 BFD keeps all of its internal structures in obstacks.  There is one
@@ -1585,32 +1422,7 @@ operation and reopen the BFD again, to g
 structures.
 
 
-File: bfd.info,  Node: Initialization,  Next: Sections,  Prev: Memory Usage,  Up: BFD front end
-
-2.5 Initialization
-==================
-
-2.5.1 Initialization functions
-------------------------------
-
-These are the functions that handle initializing a BFD.
-
-2.5.1.1 'bfd_init'
-..................
-
-*Synopsis*
-     unsigned int bfd_init (void);
-   *Description*
-This routine must be called before any other BFD function to initialize
-magical internal data structures.  Returns a magic number, which may be
-used to check that the bfd library is configured as expected by users.
-
-     /* Value returned by bfd_init.  */
-
-     #define BFD_INIT_MAGIC (sizeof (struct bfd_section))
-
-
-File: bfd.info,  Node: Sections,  Next: Symbols,  Prev: Initialization,  Up: BFD front end
+File: bfd.info,  Node: Sections,  Next: Symbols,  Prev: Memory Usage,  Up: BFD front end
 
 2.6 Sections
 ============
@@ -1724,25 +1536,28 @@ File: bfd.info,  Node: typedef asection,
 
 Here is the section structure:
 
-
      typedef struct bfd_section
      {
        /* The name of the section; the name isn't a copy, the pointer is
           the same as that passed to bfd_make_section.  */
        const char *name;
 
-       /* A unique sequence number.  */
-       unsigned int id;
-
-       /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
-       unsigned int index;
-
        /* The next section in the list belonging to the BFD, or NULL.  */
        struct bfd_section *next;
 
        /* The previous section in the list belonging to the BFD, or NULL.  */
        struct bfd_section *prev;
 
+       /* A unique sequence number.  */
+       unsigned int id;
+
+       /* A unique section number which can be used by assembler to
+          distinguish different sections with the same section name.  */
+       unsigned int section_id;
+
+       /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
+       unsigned int index;
+
        /* The field flags contains attributes of the section. Some
           flags are read in from the object file, and some are
           synthesized from other information.  */
@@ -1867,6 +1682,10 @@ Here is the section structure:
           else up the line will take care of it later.  */
      #define SEC_LINKER_CREATED           0x100000
 
+       /* This section contains a section ID to distinguish different
+          sections with the same section name.  */
+     #define SEC_ASSEMBLER_SECTION_ID     0x100000
+
        /* This section should not be subject to garbage collection.
           Also set to inform the linker that this section should not be
           listed in the link map as discarded.  */
@@ -1908,9 +1727,8 @@ Here is the section structure:
           executables or shared objects. This is for COFF only.  */
      #define SEC_COFF_SHARED             0x8000000
 
-       /* This section should be compressed.  This is for ELF linker
-          internal use only.  */
-     #define SEC_ELF_COMPRESS            0x8000000
+       /* Indicate that section has the purecode flag set.  */
+     #define SEC_ELF_PURECODE            0x8000000
 
        /* When a section with this flag is being linked, then if the size of
           the input section is less than a page, it should not cross a page
@@ -1919,9 +1737,8 @@ Here is the section structure:
           TMS320C54X only.  */
      #define SEC_TIC54X_BLOCK           0x10000000
 
-       /* This section should be renamed.  This is for ELF linker
-          internal use only.  */
-     #define SEC_ELF_RENAME             0x10000000
+       /* This section has the SHF_X86_64_LARGE flag.  This is ELF x86-64 only.  */
+     #define SEC_ELF_LARGE              0x10000000
 
        /* Conditionally link this section; do not link if there are no
           references found to any symbol in the section.  This is for TI
@@ -1940,9 +1757,6 @@ Here is the section structure:
           when memory read flag isn't set. */
      #define SEC_COFF_NOREAD            0x40000000
 
-       /* Indicate that section has the purecode flag set.  */
-     #define SEC_ELF_PURECODE           0x80000000
-
        /*  End of section flags.  */
 
        /* Some internal packed boolean fields.  */
@@ -1964,7 +1778,8 @@ Here is the section structure:
        unsigned int compress_status : 2;
      #define COMPRESS_SECTION_NONE    0
      #define COMPRESS_SECTION_DONE    1
-     #define DECOMPRESS_SECTION_SIZED 2
+     #define DECOMPRESS_SECTION_ZLIB  2
+     #define DECOMPRESS_SECTION_ZSTD  3
 
        /* The following flags are used by the ELF linker. */
 
@@ -1980,6 +1795,7 @@ Here is the section structure:
      #define SEC_INFO_TYPE_JUST_SYMS 4
      #define SEC_INFO_TYPE_TARGET    5
      #define SEC_INFO_TYPE_EH_FRAME_ENTRY 6
+     #define SEC_INFO_TYPE_SFRAME  7
 
        /* Nonzero if this section uses RELA relocations, rather than REL.  */
        unsigned int use_rela_p:1;
@@ -2027,13 +1843,6 @@ Here is the section structure:
        /* The compressed size of the section in octets.  */
        bfd_size_type compressed_size;
 
-       /* Relaxation table. */
-       struct relax_table *relax;
-
-       /* Count of used relaxation table entries. */
-       int relax_count;
-
-
        /* If this section is going to be output, then this value is the
           offset in *bytes* into the output section of the first byte in the
           input section (byte ==> smallest addressable unit on the
@@ -2046,10 +1855,6 @@ Here is the section structure:
        /* The output section through which to map on output.  */
        struct bfd_section *output_section;
 
-       /* The alignment requirement of the section, as an exponent of 2 -
-          e.g., 3 aligns to 2^3 (or 8).  */
-       unsigned int alignment_power;
-
        /* If an input section, a pointer to a vector of relocation
           records for the data in this section.  */
        struct reloc_cache_entry *relocation;
@@ -2061,6 +1866,10 @@ Here is the section structure:
        /* The number of relocation records in one of the above.  */
        unsigned reloc_count;
 
+       /* The alignment requirement of the section, as an exponent of 2 -
+          e.g., 3 aligns to 2^3 (or 8).  */
+       unsigned int alignment_power;
+
        /* Information below is back end specific - and not always used
           or updated.  */
 
@@ -2078,7 +1887,7 @@ Here is the section structure:
 
        /* If the SEC_IN_MEMORY flag is set, this points to the actual
           contents.  */
-       unsigned char *contents;
+       bfd_byte *contents;
 
        /* Attached line number information.  */
        alent *lineno;
@@ -2116,206 +1925,23 @@ Here is the section structure:
        /* Early in the link process, map_head and map_tail are used to build
           a list of input sections attached to an output section.  Later,
           output sections use these fields for a list of bfd_link_order
-          structs.  */
+          structs.  The linked_to_symbol_name field is for ELF assembler
+          internal use.  */
        union {
          struct bfd_link_order *link_order;
          struct bfd_section *s;
+         const char *linked_to_symbol_name;
        } map_head, map_tail;
-     } asection;
 
-     /* Relax table contains information about instructions which can
-        be removed by relaxation -- replacing a long address with a
-        short address.  */
-     struct relax_table {
-       /* Address where bytes may be deleted. */
-       bfd_vma addr;
+       /* Points to the output section this section is already assigned to,
+          if any.  This is used when support for non-contiguous memory
+          regions is enabled.  */
+       struct bfd_section *already_assigned;
 
-       /* Number of bytes to be deleted.  */
-       int size;
-     };
-
-     static inline const char *
-     bfd_section_name (const asection *sec)
-     {
-       return sec->name;
-     }
-
-     static inline bfd_size_type
-     bfd_section_size (const asection *sec)
-     {
-       return sec->size;
-     }
-
-     static inline bfd_vma
-     bfd_section_vma (const asection *sec)
-     {
-       return sec->vma;
-     }
-
-     static inline bfd_vma
-     bfd_section_lma (const asection *sec)
-     {
-       return sec->lma;
-     }
-
-     static inline unsigned int
-     bfd_section_alignment (const asection *sec)
-     {
-       return sec->alignment_power;
-     }
-
-     static inline flagword
-     bfd_section_flags (const asection *sec)
-     {
-       return sec->flags;
-     }
-
-     static inline void *
-     bfd_section_userdata (const asection *sec)
-     {
-       return sec->userdata;
-     }
-     static inline bfd_boolean
-     bfd_is_com_section (const asection *sec)
-     {
-       return (sec->flags & SEC_IS_COMMON) != 0;
-     }
-
-     /* Note: the following are provided as inline functions rather than macros
-        because not all callers use the return value.  A macro implementation
-        would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
-        compilers will complain about comma expressions that have no effect.  */
-     static inline bfd_boolean
-     bfd_set_section_userdata (asection *sec, void *val)
-     {
-       sec->userdata = val;
-       return TRUE;
-     }
-
-     static inline bfd_boolean
-     bfd_set_section_vma (asection *sec, bfd_vma val)
-     {
-       sec->vma = sec->lma = val;
-       sec->user_set_vma = TRUE;
-       return TRUE;
-     }
-
-     static inline bfd_boolean
-     bfd_set_section_lma (asection *sec, bfd_vma val)
-     {
-       sec->lma = val;
-       return TRUE;
-     }
-
-     static inline bfd_boolean
-     bfd_set_section_alignment (asection *sec, unsigned int val)
-     {
-       sec->alignment_power = val;
-       return TRUE;
-     }
-
-     /* These sections are global, and are managed by BFD.  The application
-        and target back end are not permitted to change the values in
-        these sections.  */
-     extern asection _bfd_std_section[4];
-
-     #define BFD_ABS_SECTION_NAME "*ABS*"
-     #define BFD_UND_SECTION_NAME "*UND*"
-     #define BFD_COM_SECTION_NAME "*COM*"
-     #define BFD_IND_SECTION_NAME "*IND*"
-
-     /* Pointer to the common section.  */
-     #define bfd_com_section_ptr (&_bfd_std_section[0])
-     /* Pointer to the undefined section.  */
-     #define bfd_und_section_ptr (&_bfd_std_section[1])
-     /* Pointer to the absolute section.  */
-     #define bfd_abs_section_ptr (&_bfd_std_section[2])
-     /* Pointer to the indirect section.  */
-     #define bfd_ind_section_ptr (&_bfd_std_section[3])
-
-     static inline bfd_boolean
-     bfd_is_und_section (const asection *sec)
-     {
-       return sec == bfd_und_section_ptr;
-     }
-
-     static inline bfd_boolean
-     bfd_is_abs_section (const asection *sec)
-     {
-       return sec == bfd_abs_section_ptr;
-     }
-
-     static inline bfd_boolean
-     bfd_is_ind_section (const asection *sec)
-     {
-       return sec == bfd_ind_section_ptr;
-     }
-
-     static inline bfd_boolean
-     bfd_is_const_section (const asection *sec)
-     {
-       return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr;
-     }
-
-     /* Return TRUE if input section SEC has been discarded.  */
-     static inline bfd_boolean
-     discarded_section (const asection *sec)
-     {
-       return (!bfd_is_abs_section (sec)
-               && bfd_is_abs_section (sec->output_section)
-               && sec->sec_info_type != SEC_INFO_TYPE_MERGE
-               && sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS);
-     }
-
-     #define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS)                   \
-       /* name, id,  index, next, prev, flags, user_set_vma,            */  \
-       {  NAME, IDX, 0,     NULL, NULL, FLAGS, 0,                           \
-                                                                            \
-       /* linker_mark, linker_has_input, gc_mark, decompress_status,    */  \
-          0,           0,                1,       0,                        \
-                                                                            \
-       /* segment_mark, sec_info_type, use_rela_p,                      */  \
-          0,            0,             0,                                   \
-                                                                            \
-       /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   */  \
-          0,        0,        0,        0,        0,        0,              \
-                                                                            \
-       /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */  \
-          0,   0,   0,    0,       0,               0,     0,               \
-                                                                            \
-       /* output_offset, output_section, alignment_power,               */  \
-          0,             &SEC,           0,                                 \
-                                                                            \
-       /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
-          NULL,       NULL,        0,           0,       0,                 \
-                                                                            \
-       /* line_filepos, userdata, contents, lineno, lineno_count,       */  \
-          0,            NULL,     NULL,     NULL,   0,                      \
-                                                                            \
-       /* entsize, kept_section, moving_line_filepos,                    */ \
-          0,       NULL,          0,                                        \
-                                                                            \
-       /* target_index, used_by_bfd, constructor_chain, owner,          */  \
-          0,            NULL,        NULL,              NULL,               \
-                                                                            \
-       /* symbol,                    symbol_ptr_ptr,                    */  \
-          (struct bfd_symbol *) SYM, &SEC.symbol,                           \
-                                                                            \
-       /* map_head, map_tail                                            */  \
-          { NULL }, { NULL }                                                \
-         }
+       /* Explicitly specified section type, if non-zero.  */
+       unsigned int type;
 
-     /* We use a macro to initialize the static asymbol structures because
-        traditional C does not permit us to initialize a union member while
-        gcc warns if we don't initialize it.
-        the_bfd, name, value, attr, section [, udata]  */
-     #ifdef __STDC__
-     #define GLOBAL_SYM_INIT(NAME, SECTION) \
-       { 0, NAME, 0, BSF_SECTION_SYM, SECTION, { 0 }}
-     #else
-     #define GLOBAL_SYM_INIT(NAME, SECTION) \
-       { 0, NAME, 0, BSF_SECTION_SYM, SECTION }
-     #endif
+     } asection;
 
 
 
@@ -2329,315 +1955,286 @@ These are the functions exported by the
 2.6.5.1 'bfd_section_list_clear'
 ................................
 
-*Synopsis*
-     void bfd_section_list_clear (bfd *);
-   *Description*
-Clears the section list, and also resets the section count and hash
-table entries.
+ -- Function: void bfd_section_list_clear (bfd *);
+     Clears the section list, and also resets the section count and hash
+     table entries.
 
 2.6.5.2 'bfd_get_section_by_name'
 .................................
 
-*Synopsis*
-     asection *bfd_get_section_by_name (bfd *abfd, const char *name);
-   *Description*
-Return the most recently created section attached to ABFD named NAME.
-Return NULL if no such section exists.
+ -- Function: asection *bfd_get_section_by_name (bfd *abfd, const char
+          *name);
+     Return the most recently created section attached to ABFD named
+     NAME.  Return NULL if no such section exists.
 
 2.6.5.3 'bfd_get_next_section_by_name'
 ......................................
 
-*Synopsis*
-     asection *bfd_get_next_section_by_name (bfd *ibfd, asection *sec);
-   *Description*
-Given SEC is a section returned by 'bfd_get_section_by_name', return the
-next most recently created section attached to the same BFD with the
-same name, or if no such section exists in the same BFD and IBFD is
-non-NULL, the next section with the same name in any input BFD following
-IBFD. Return NULL on finding no section.
+ -- Function: asection *bfd_get_next_section_by_name (bfd *ibfd,
+          asection *sec);
+     Given SEC is a section returned by 'bfd_get_section_by_name',
+     return the next most recently created section attached to the same
+     BFD with the same name, or if no such section exists in the same
+     BFD and IBFD is non-NULL, the next section with the same name in
+     any input BFD following IBFD. Return NULL on finding no section.
 
 2.6.5.4 'bfd_get_linker_section'
 ................................
 
-*Synopsis*
-     asection *bfd_get_linker_section (bfd *abfd, const char *name);
-   *Description*
-Return the linker created section attached to ABFD named NAME.  Return
-NULL if no such section exists.
+ -- Function: asection *bfd_get_linker_section (bfd *abfd, const char
+          *name);
+     Return the linker created section attached to ABFD named NAME.
+     Return NULL if no such section exists.
 
 2.6.5.5 'bfd_get_section_by_name_if'
 ....................................
 
-*Synopsis*
-     asection *bfd_get_section_by_name_if
-        (bfd *abfd,
-         const char *name,
-         bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
-         void *obj);
-   *Description*
-Call the provided function FUNC for each section attached to the BFD
-ABFD whose name matches NAME, passing OBJ as an argument.  The function
-will be called as if by
+ -- Function: asection *bfd_get_section_by_name_if (bfd *abfd, const
+          char *name, bool (*func) (bfd *abfd, asection *sect, void
+          *obj), void *obj);
+     Call the provided function FUNC for each section attached to the
+     BFD ABFD whose name matches NAME, passing OBJ as an argument.  The
+     function will be called as if by
 
-            func (abfd, the_section, obj);
+                 func (abfd, the_section, obj);
 
-   It returns the first section for which FUNC returns true, otherwise
-'NULL'.
+     It returns the first section for which FUNC returns true, otherwise
+     'NULL'.
 
 2.6.5.6 'bfd_get_unique_section_name'
 .....................................
 
-*Synopsis*
-     char *bfd_get_unique_section_name
-        (bfd *abfd, const char *templat, int *count);
-   *Description*
-Invent a section name that is unique in ABFD by tacking a dot and a
-digit suffix onto the original TEMPLAT.  If COUNT is non-NULL, then it
-specifies the first number tried as a suffix to generate a unique name.
-The value pointed to by COUNT will be incremented in this case.
+ -- Function: char *bfd_get_unique_section_name (bfd *abfd, const char
+          *templat, int *count);
+     Invent a section name that is unique in ABFD by tacking a dot and a
+     digit suffix onto the original TEMPLAT.  If COUNT is non-NULL, then
+     it specifies the first number tried as a suffix to generate a
+     unique name.  The value pointed to by COUNT will be incremented in
+     this case.
 
 2.6.5.7 'bfd_make_section_old_way'
 ..................................
 
-*Synopsis*
-     asection *bfd_make_section_old_way (bfd *abfd, const char *name);
-   *Description*
-Create a new empty section called NAME and attach it to the end of the
-chain of sections for the BFD ABFD.  An attempt to create a section with
-a name which is already in use returns its pointer without changing the
-section chain.
-
-   It has the funny name since this is the way it used to be before it
-was rewritten....
-
-   Possible errors are:
-
-   * 'bfd_error_invalid_operation' - If output has already started for
-     this BFD.
-   * 'bfd_error_no_memory' - If memory allocation fails.
+ -- Function: asection *bfd_make_section_old_way (bfd *abfd, const char
+          *name);
+     Create a new empty section called NAME and attach it to the end of
+     the chain of sections for the BFD ABFD.  An attempt to create a
+     section with a name which is already in use returns its pointer
+     without changing the section chain.
+
+     It has the funny name since this is the way it used to be before it
+     was rewritten....
+
+     Possible errors are:
+
+        * 'bfd_error_invalid_operation' - If output has already started
+          for this BFD.
+        * 'bfd_error_no_memory' - If memory allocation fails.
 
 2.6.5.8 'bfd_make_section_anyway_with_flags'
 ............................................
 
-*Synopsis*
-     asection *bfd_make_section_anyway_with_flags
-        (bfd *abfd, const char *name, flagword flags);
-   *Description*
-Create a new empty section called NAME and attach it to the end of the
-chain of sections for ABFD.  Create a new section even if there is
-already a section with that name.  Also set the attributes of the new
-section to the value FLAGS.
-
-   Return 'NULL' and set 'bfd_error' on error; possible errors are:
-
-   * 'bfd_error_invalid_operation' - If output has already started for
-     ABFD.
-   * 'bfd_error_no_memory' - If memory allocation fails.
+ -- Function: asection *bfd_make_section_anyway_with_flags (bfd *abfd,
+          const char *name, flagword flags);
+     Create a new empty section called NAME and attach it to the end of
+     the chain of sections for ABFD.  Create a new section even if there
+     is already a section with that name.  Also set the attributes of
+     the new section to the value FLAGS.
+
+     Return 'NULL' and set 'bfd_error' on error; possible errors are:
+
+        * 'bfd_error_invalid_operation' - If output has already started
+          for ABFD.
+        * 'bfd_error_no_memory' - If memory allocation fails.
 
 2.6.5.9 'bfd_make_section_anyway'
 .................................
 
-*Synopsis*
-     asection *bfd_make_section_anyway (bfd *abfd, const char *name);
-   *Description*
-Create a new empty section called NAME and attach it to the end of the
-chain of sections for ABFD.  Create a new section even if there is
-already a section with that name.
-
-   Return 'NULL' and set 'bfd_error' on error; possible errors are:
-
-   * 'bfd_error_invalid_operation' - If output has already started for
-     ABFD.
-   * 'bfd_error_no_memory' - If memory allocation fails.
+ -- Function: asection *bfd_make_section_anyway (bfd *abfd, const char
+          *name);
+     Create a new empty section called NAME and attach it to the end of
+     the chain of sections for ABFD.  Create a new section even if there
+     is already a section with that name.
+
+     Return 'NULL' and set 'bfd_error' on error; possible errors are:
+
+        * 'bfd_error_invalid_operation' - If output has already started
+          for ABFD.
+        * 'bfd_error_no_memory' - If memory allocation fails.
 
 2.6.5.10 'bfd_make_section_with_flags'
 ......................................
 
-*Synopsis*
-     asection *bfd_make_section_with_flags
-        (bfd *, const char *name, flagword flags);
-   *Description*
-Like 'bfd_make_section_anyway', but return 'NULL' (without calling
-bfd_set_error ()) without changing the section chain if there is already
-a section named NAME.  Also set the attributes of the new section to the
-value FLAGS.  If there is an error, return 'NULL' and set 'bfd_error'.
+ -- Function: asection *bfd_make_section_with_flags (bfd *, const char
+          *name, flagword flags);
+     Like 'bfd_make_section_anyway', but return 'NULL' (without calling
+     bfd_set_error ()) without changing the section chain if there is
+     already a section named NAME.  Also set the attributes of the new
+     section to the value FLAGS.  If there is an error, return 'NULL'
+     and set 'bfd_error'.
 
 2.6.5.11 'bfd_make_section'
 ...........................
 
-*Synopsis*
-     asection *bfd_make_section (bfd *, const char *name);
-   *Description*
-Like 'bfd_make_section_anyway', but return 'NULL' (without calling
-bfd_set_error ()) without changing the section chain if there is already
-a section named NAME.  If there is an error, return 'NULL' and set
-'bfd_error'.
+ -- Function: asection *bfd_make_section (bfd *, const char *name);
+     Like 'bfd_make_section_anyway', but return 'NULL' (without calling
+     bfd_set_error ()) without changing the section chain if there is
+     already a section named NAME.  If there is an error, return 'NULL'
+     and set 'bfd_error'.
 
 2.6.5.12 'bfd_set_section_flags'
 ................................
 
-*Synopsis*
-     bfd_boolean bfd_set_section_flags (asection *sec, flagword flags);
-   *Description*
-Set the attributes of the section SEC to the value FLAGS.  Return 'TRUE'
-on success, 'FALSE' on error.  Possible error returns are:
-
-   * 'bfd_error_invalid_operation' - The section cannot have one or more
-     of the attributes requested.  For example, a .bss section in
-     'a.out' may not have the 'SEC_HAS_CONTENTS' field set.
+ -- Function: bool bfd_set_section_flags (asection *sec, flagword
+          flags);
+     Set the attributes of the section SEC to the value FLAGS.  Return
+     'TRUE' on success, 'FALSE' on error.  Possible error returns are:
+
+        * 'bfd_error_invalid_operation' - The section cannot have one or
+          more of the attributes requested.  For example, a .bss section
+          in 'a.out' may not have the 'SEC_HAS_CONTENTS' field set.
 
 2.6.5.13 'bfd_rename_section'
 .............................
 
-*Synopsis*
-     void bfd_rename_section
-        (asection *sec, const char *newname);
-   *Description*
-Rename section SEC to NEWNAME.
+ -- Function: void bfd_rename_section (asection *sec, const char
+          *newname);
+     Rename section SEC to NEWNAME.
 
 2.6.5.14 'bfd_map_over_sections'
 ................................
 
-*Synopsis*
-     void bfd_map_over_sections
-        (bfd *abfd,
-         void (*func) (bfd *abfd, asection *sect, void *obj),
-         void *obj);
-   *Description*
-Call the provided function FUNC for each section attached to the BFD
-ABFD, passing OBJ as an argument.  The function will be called as if by
-
-            func (abfd, the_section, obj);
-
-   This is the preferred method for iterating over sections; an
-alternative would be to use a loop:
-
-               asection *p;
-               for (p = abfd->sections; p != NULL; p = p->next)
-                  func (abfd, p, ...)
+ -- Function: void bfd_map_over_sections (bfd *abfd, void (*func) (bfd
+          *abfd, asection *sect, void *obj), void *obj);
+     Call the provided function FUNC for each section attached to the
+     BFD ABFD, passing OBJ as an argument.  The function will be called
+     as if by
+
+                 func (abfd, the_section, obj);
+
+     This is the preferred method for iterating over sections; an
+     alternative would be to use a loop:
+
+                    asection *p;
+                    for (p = abfd->sections; p != NULL; p = p->next)
+                       func (abfd, p, ...)
 
 2.6.5.15 'bfd_sections_find_if'
 ...............................
 
-*Synopsis*
-     asection *bfd_sections_find_if
-        (bfd *abfd,
-         bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
-         void *obj);
-   *Description*
-Call the provided function OPERATION for each section attached to the
-BFD ABFD, passing OBJ as an argument.  The function will be called as if
-by
+ -- Function: asection *bfd_sections_find_if (bfd *abfd, bool
+          (*operation) (bfd *abfd, asection *sect, void *obj), void
+          *obj);
+     Call the provided function OPERATION for each section attached to
+     the BFD ABFD, passing OBJ as an argument.  The function will be
+     called as if by
 
-            operation (abfd, the_section, obj);
+                 operation (abfd, the_section, obj);
 
-   It returns the first section for which OPERATION returns true.
+     It returns the first section for which OPERATION returns true.
 
 2.6.5.16 'bfd_set_section_size'
 ...............................
 
-*Synopsis*
-     bfd_boolean bfd_set_section_size (asection *sec, bfd_size_type val);
-   *Description*
-Set SEC to the size VAL.  If the operation is ok, then 'TRUE' is
-returned, else 'FALSE'.
+ -- Function: bool bfd_set_section_size (asection *sec, bfd_size_type
+          val);
+     Set SEC to the size VAL.  If the operation is ok, then 'TRUE' is
+     returned, else 'FALSE'.
 
-   Possible error returns:
+     Possible error returns:
 
-   * 'bfd_error_invalid_operation' - Writing has started to the BFD, so
-     setting the size is invalid.
+        * 'bfd_error_invalid_operation' - Writing has started to the
+          BFD, so setting the size is invalid.
 
 2.6.5.17 'bfd_set_section_contents'
 ...................................
 
-*Synopsis*
-     bfd_boolean bfd_set_section_contents
-        (bfd *abfd, asection *section, const void *data,
-         file_ptr offset, bfd_size_type count);
-   *Description*
-Sets the contents of the section SECTION in BFD ABFD to the data
-starting in memory at LOCATION.  The data is written to the output
-section starting at offset OFFSET for COUNT octets.
-
-   Normally 'TRUE' is returned, but 'FALSE' is returned if there was an
-error.  Possible error returns are:
-
-   * 'bfd_error_no_contents' - The output section does not have the
-     'SEC_HAS_CONTENTS' attribute, so nothing can be written to it.
-   * 'bfd_error_bad_value' - The section is unable to contain all of the
-     data.
-   * 'bfd_error_invalid_operation' - The BFD is not writeable.
-   * and some more too.
-   This routine is front end to the back end function
-'_bfd_set_section_contents'.
+ -- Function: bool bfd_set_section_contents (bfd *abfd, asection
+          *section, const void *data, file_ptr offset, bfd_size_type
+          count);
+     Sets the contents of the section SECTION in BFD ABFD to the data
+     starting in memory at LOCATION.  The data is written to the output
+     section starting at offset OFFSET for COUNT octets.
+
+     Normally 'TRUE' is returned, but 'FALSE' is returned if there was
+     an error.  Possible error returns are:
+
+        * 'bfd_error_no_contents' - The output section does not have the
+          'SEC_HAS_CONTENTS' attribute, so nothing can be written to it.
+        * 'bfd_error_bad_value' - The section is unable to contain all
+          of the data.
+        * 'bfd_error_invalid_operation' - The BFD is not writeable.
+        * and some more too.
+     This routine is front end to the back end function
+     '_bfd_set_section_contents'.
 
 2.6.5.18 'bfd_get_section_contents'
 ...................................
 
-*Synopsis*
-     bfd_boolean bfd_get_section_contents
-        (bfd *abfd, asection *section, void *location, file_ptr offset,
-         bfd_size_type count);
-   *Description*
-Read data from SECTION in BFD ABFD into memory starting at LOCATION.
-The data is read at an offset of OFFSET from the start of the input
-section, and is read for COUNT bytes.
-
-   If the contents of a constructor with the 'SEC_CONSTRUCTOR' flag set
-are requested or if the section does not have the 'SEC_HAS_CONTENTS'
-flag set, then the LOCATION is filled with zeroes.  If no errors occur,
-'TRUE' is returned, else 'FALSE'.
+ -- Function: bool bfd_get_section_contents (bfd *abfd, asection
+          *section, void *location, file_ptr offset, bfd_size_type
+          count);
+     Read data from SECTION in BFD ABFD into memory starting at
+     LOCATION.  The data is read at an offset of OFFSET from the start
+     of the input section, and is read for COUNT bytes.
+
+     If the contents of a constructor with the 'SEC_CONSTRUCTOR' flag
+     set are requested or if the section does not have the
+     'SEC_HAS_CONTENTS' flag set, then the LOCATION is filled with
+     zeroes.  If no errors occur, 'TRUE' is returned, else 'FALSE'.
 
 2.6.5.19 'bfd_malloc_and_get_section'
 .....................................
 
-*Synopsis*
-     bfd_boolean bfd_malloc_and_get_section
-        (bfd *abfd, asection *section, bfd_byte **buf);
-   *Description*
-Read all data from SECTION in BFD ABFD into a buffer, *BUF, malloc'd by
-this function.
+ -- Function: bool bfd_malloc_and_get_section (bfd *abfd, asection
+          *section, bfd_byte **buf);
+     Read all data from SECTION in BFD ABFD into a buffer, *BUF,
+     malloc'd by this function.  Return 'true' on success, 'false' on
+     failure in which case *BUF will be NULL.
 
 2.6.5.20 'bfd_copy_private_section_data'
 ........................................
 
-*Synopsis*
-     bfd_boolean bfd_copy_private_section_data
-        (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
-   *Description*
-Copy private section information from ISEC in the BFD IBFD to the
-section OSEC in the BFD OBFD.  Return 'TRUE' on success, 'FALSE' on
-error.  Possible error returns are:
-
-   * 'bfd_error_no_memory' - Not enough memory exists to create private
-     data for OSEC.
-     #define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
-            BFD_SEND (obfd, _bfd_copy_private_section_data, \
-                      (ibfd, isection, obfd, osection))
+ -- Function: bool bfd_copy_private_section_data (bfd *ibfd, asection
+          *isec, bfd *obfd, asection *osec);
+     Copy private section information from ISEC in the BFD IBFD to the
+     section OSEC in the BFD OBFD.  Return 'TRUE' on success, 'FALSE' on
+     error.  Possible error returns are:
+
+        * 'bfd_error_no_memory' - Not enough memory exists to create
+          private data for OSEC.
+          #define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
+                 BFD_SEND (obfd, _bfd_copy_private_section_data, \
+                           (ibfd, isection, obfd, osection))
 
 2.6.5.21 'bfd_generic_is_group_section'
 .......................................
 
-*Synopsis*
-     bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
-   *Description*
-Returns TRUE if SEC is a member of a group.
+ -- Function: bool bfd_generic_is_group_section (bfd *, const asection
+          *sec);
+     Returns TRUE if SEC is a member of a group.
 
 2.6.5.22 'bfd_generic_group_name'
 .................................
 
-*Synopsis*
-     const char *bfd_generic_group_name (bfd *, const asection *sec);
-   *Description*
-Returns group name if SEC is a member of a group.
+ -- Function: const char *bfd_generic_group_name (bfd *, const asection
+          *sec);
+     Returns group name if SEC is a member of a group.
 
 2.6.5.23 'bfd_generic_discard_group'
 ....................................
 
-*Synopsis*
-     bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
-   *Description*
-Remove all members of GROUP from the output.
+ -- Function: bool bfd_generic_discard_group (bfd *abfd, asection
+          *group);
+     Remove all members of GROUP from the output.
+
+2.6.5.24 '_bfd_section_size_insane'
+...................................
+
+ -- Function: bool _bfd_section_size_insane (bfd *abfd, asection *sec);
+     Returns true if the given section has a size that indicates it
+     cannot be read from file.  Return false if the size is OK or* this
+     function can't say one way or the other.
 
 
 File: bfd.info,  Node: Symbols,  Next: Archives,  Prev: Sections,  Up: BFD front end
@@ -2789,7 +2386,6 @@ File: bfd.info,  Node: typedef asymbol,
 
 An 'asymbol' has the form:
 
-
      typedef struct bfd_symbol
      {
        /* A pointer to the BFD which owns the symbol. This information
@@ -2916,6 +2512,9 @@ An 'asymbol' has the form:
           with this name and type in use.  BSF_OBJECT must also be set.  */
      #define BSF_GNU_UNIQUE          (1 << 23)
 
+       /* This section symbol should be included in the symbol table.  */
+     #define BSF_SECTION_SYM_USED    (1 << 24)
+
        flagword flags;
 
        /* A pointer to the section to which this symbol is
@@ -2943,7 +2542,6 @@ File: bfd.info,  Node: symbol handling f
 2.7.5.1 'bfd_get_symtab_upper_bound'
 ....................................
 
-*Description*
 Return the number of bytes required to store a vector of pointers to
 'asymbols' for all the symbols in the BFD ABFD, including a terminal
 NULL pointer.  If there are no symbols in the BFD, then return 0.  If an
@@ -2955,42 +2553,37 @@ error occurs, return -1.
 2.7.5.2 'bfd_is_local_label'
 ............................
 
-*Synopsis*
-     bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
-   *Description*
-Return TRUE if the given symbol SYM in the BFD ABFD is a compiler
-generated local label, else return FALSE.
+ -- Function: bool bfd_is_local_label (bfd *abfd, asymbol *sym);
+     Return TRUE if the given symbol SYM in the BFD ABFD is a compiler
+     generated local label, else return FALSE.
 
 2.7.5.3 'bfd_is_local_label_name'
 .................................
 
-*Synopsis*
-     bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
-   *Description*
-Return TRUE if a symbol with the name NAME in the BFD ABFD is a compiler
-generated local label, else return FALSE. This just checks whether the
-name has the form of a local label.
-     #define bfd_is_local_label_name(abfd, name) \
-            BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
+ -- Function: bool bfd_is_local_label_name (bfd *abfd, const char
+          *name);
+     Return TRUE if a symbol with the name NAME in the BFD ABFD is a
+     compiler generated local label, else return FALSE. This just checks
+     whether the name has the form of a local label.
+          #define bfd_is_local_label_name(abfd, name) \
+                 BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
 
 
 2.7.5.4 'bfd_is_target_special_symbol'
 ......................................
 
-*Synopsis*
-     bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
-   *Description*
-Return TRUE iff a symbol SYM in the BFD ABFD is something special to the
-particular target represented by the BFD. Such symbols should normally
-not be mentioned to the user.
-     #define bfd_is_target_special_symbol(abfd, sym) \
-            BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
+ -- Function: bool bfd_is_target_special_symbol (bfd *abfd, asymbol
+          *sym);
+     Return TRUE iff a symbol SYM in the BFD ABFD is something special
+     to the particular target represented by the BFD. Such symbols
+     should normally not be mentioned to the user.
+          #define bfd_is_target_special_symbol(abfd, sym) \
+                 BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
 
 
 2.7.5.5 'bfd_canonicalize_symtab'
 .................................
 
-*Description*
 Read the symbols from the BFD ABFD, and fills in the vector LOCATION
 with pointers to the symbols and a trailing NULL. Return the actual
 number of symbol pointers, not including the NULL.
@@ -3001,25 +2594,22 @@ number of symbol pointers, not including
 2.7.5.6 'bfd_set_symtab'
 ........................
 
-*Synopsis*
-     bfd_boolean bfd_set_symtab
-        (bfd *abfd, asymbol **location, unsigned int count);
-   *Description*
-Arrange that when the output BFD ABFD is closed, the table LOCATION of
-COUNT pointers to symbols will be written.
+ -- Function: bool bfd_set_symtab (bfd *abfd, asymbol **location,
+          unsigned int count);
+     Arrange that when the output BFD ABFD is closed, the table LOCATION
+     of COUNT pointers to symbols will be written.
 
 2.7.5.7 'bfd_print_symbol_vandf'
 ................................
 
-*Synopsis*
-     void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
-   *Description*
-Print the value and flags of the SYMBOL supplied to the stream FILE.
+ -- Function: void bfd_print_symbol_vandf (bfd *abfd, void *file,
+          asymbol *symbol);
+     Print the value and flags of the SYMBOL supplied to the stream
+     FILE.
 
 2.7.5.8 'bfd_make_empty_symbol'
 ...............................
 
-*Description*
 Create a new 'asymbol' structure for the BFD ABFD and return a pointer
 to it.
 
@@ -3034,69 +2624,56 @@ problems later on.
 2.7.5.9 '_bfd_generic_make_empty_symbol'
 ........................................
 
-*Synopsis*
-     asymbol *_bfd_generic_make_empty_symbol (bfd *);
-   *Description*
-Create a new 'asymbol' structure for the BFD ABFD and return a pointer
-to it.  Used by core file routines, binary back-end and anywhere else
-where no private info is needed.
+ -- Function: asymbol *_bfd_generic_make_empty_symbol (bfd *);
+     Create a new 'asymbol' structure for the BFD ABFD and return a
+     pointer to it.  Used by core file routines, binary back-end and
+     anywhere else where no private info is needed.
 
 2.7.5.10 'bfd_make_debug_symbol'
 ................................
 
-*Description*
 Create a new 'asymbol' structure for the BFD ABFD, to be used as a
-debugging symbol.  Further details of its use have yet to be worked out.
-     #define bfd_make_debug_symbol(abfd,ptr,size) \
-            BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
+debugging symbol.
+     #define bfd_make_debug_symbol(abfd) \
+            BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd))
 
 
 2.7.5.11 'bfd_decode_symclass'
 ..............................
 
-*Description*
-Return a character corresponding to the symbol class of SYMBOL, or '?'
-for an unknown class.
-
-   *Synopsis*
-     int bfd_decode_symclass (asymbol *symbol);
+ -- Function: int bfd_decode_symclass (asymbol *symbol);
+     Return a character corresponding to the symbol class of SYMBOL, or
+     '?'  for an unknown class.
 
 2.7.5.12 'bfd_is_undefined_symclass'
 ....................................
 
-*Description*
-Returns non-zero if the class symbol returned by bfd_decode_symclass
-represents an undefined symbol.  Returns zero otherwise.
-
-   *Synopsis*
-     bfd_boolean bfd_is_undefined_symclass (int symclass);
+ -- Function: bool bfd_is_undefined_symclass (int symclass);
+     Returns non-zero if the class symbol returned by
+     bfd_decode_symclass represents an undefined symbol.  Returns zero
+     otherwise.
 
 2.7.5.13 'bfd_symbol_info'
 ..........................
 
-*Description*
-Fill in the basic info about symbol that nm needs.  Additional info may
-be added by the back-ends after calling this function.
-
-   *Synopsis*
-     void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
+ -- Function: void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
+     Fill in the basic info about symbol that nm needs.  Additional info
+     may be added by the back-ends after calling this function.
 
 2.7.5.14 'bfd_copy_private_symbol_data'
 .......................................
 
-*Synopsis*
-     bfd_boolean bfd_copy_private_symbol_data
-        (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
-   *Description*
-Copy private symbol information from ISYM in the BFD IBFD to the symbol
-OSYM in the BFD OBFD.  Return 'TRUE' on success, 'FALSE' on error.
-Possible error returns are:
-
-   * 'bfd_error_no_memory' - Not enough memory exists to create private
-     data for OSEC.
-     #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
-            BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
-                      (ibfd, isymbol, obfd, osymbol))
+ -- Function: bool bfd_copy_private_symbol_data (bfd *ibfd, asymbol
+          *isym, bfd *obfd, asymbol *osym);
+     Copy private symbol information from ISYM in the BFD IBFD to the
+     symbol OSYM in the BFD OBFD.  Return 'TRUE' on success, 'FALSE' on
+     error.  Possible error returns are:
+
+        * 'bfd_error_no_memory' - Not enough memory exists to create
+          private data for OSEC.
+          #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
+                 BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
+                           (ibfd, isymbol, obfd, osymbol))
 
 
 
@@ -3105,7 +2682,6 @@ File: bfd.info,  Node: Archives,  Next:
 2.8 Archives
 ============
 
-*Description*
 An archive (or library) is just another BFD. It has a symbol table,
 although there's not much a user program will do with it.
 
@@ -3160,41 +2736,38 @@ anyway, so this shouldn't be much of a r
 2.8.1.1 'bfd_get_next_mapent'
 .............................
 
-*Synopsis*
-     symindex bfd_get_next_mapent
-        (bfd *abfd, symindex previous, carsym **sym);
-   *Description*
-Step through archive ABFD's symbol table (if it has one).  Successively
-update SYM with the next symbol's information, returning that symbol's
-(internal) index into the symbol table.
+ -- Function: symindex bfd_get_next_mapent (bfd *abfd, symindex
+          previous, carsym **sym);
+     Step through archive ABFD's symbol table (if it has one).
+     Successively update SYM with the next symbol's information,
+     returning that symbol's (internal) index into the symbol table.
+
+     Supply 'BFD_NO_MORE_SYMBOLS' as the PREVIOUS entry to get the first
+     one; returns 'BFD_NO_MORE_SYMBOLS' when you've already got the last
+     one.
 
-   Supply 'BFD_NO_MORE_SYMBOLS' as the PREVIOUS entry to get the first
-one; returns 'BFD_NO_MORE_SYMBOLS' when you've already got the last one.
-
-   A 'carsym' is a canonical archive symbol.  The only user-visible
-element is its name, a null-terminated string.
+     A 'carsym' is a canonical archive symbol.  The only user-visible
+     element is its name, a null-terminated string.
 
 2.8.1.2 'bfd_set_archive_head'
 ..............................
 
-*Synopsis*
-     bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
-   *Description*
-Set the head of the chain of BFDs contained in the archive OUTPUT to
-NEW_HEAD.
+ -- Function: bool bfd_set_archive_head (bfd *output, bfd *new_head);
+     Set the head of the chain of BFDs contained in the archive OUTPUT
+     to NEW_HEAD.
 
 2.8.1.3 'bfd_openr_next_archived_file'
 ......................................
 
-*Synopsis*
-     bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
-   *Description*
-Provided a BFD, ARCHIVE, containing an archive and NULL, open an input
-BFD on the first contained element and returns that.  Subsequent calls
-should pass the archive and the previous return value to return a
-created BFD to the next contained element.  NULL is returned when there
-are no more.  Note - if you want to process the bfd returned by this
-call be sure to call bfd_check_format() on it first.
+ -- Function: bfd *bfd_openr_next_archived_file (bfd *archive, bfd
+          *previous);
+     Provided a BFD, ARCHIVE, containing an archive and NULL, open an
+     input BFD on the first contained element and returns that.
+     Subsequent calls should pass the archive and the previous return
+     value to return a created BFD to the next contained element.  NULL
+     is returned when there are no more.  Note - if you want to process
+     the bfd returned by this call be sure to call bfd_check_format() on
+     it first.
 
 
 File: bfd.info,  Node: Formats,  Next: Relocations,  Prev: Archives,  Up: BFD front end
@@ -3220,69 +2793,63 @@ supported by BFD are:
 2.9.1.1 'bfd_check_format'
 ..........................
 
-*Synopsis*
-     bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
-   *Description*
-Verify if the file attached to the BFD ABFD is compatible with the
-format FORMAT (i.e., one of 'bfd_object', 'bfd_archive' or 'bfd_core').
-
-   If the BFD has been set to a specific target before the call, only
-the named target and format combination is checked.  If the target has
-not been set, or has been set to 'default', then all the known target
-backends is interrogated to determine a match.  If the default target
-matches, it is used.  If not, exactly one target must recognize the
-file, or an error results.
-
-   The function returns 'TRUE' on success, otherwise 'FALSE' with one of
-the following error codes:
-
-   * 'bfd_error_invalid_operation' - if 'format' is not one of
-     'bfd_object', 'bfd_archive' or 'bfd_core'.
+ -- Function: bool bfd_check_format (bfd *abfd, bfd_format format);
+     Verify if the file attached to the BFD ABFD is compatible with the
+     format FORMAT (i.e., one of 'bfd_object', 'bfd_archive' or
+     'bfd_core').
+
+     If the BFD has been set to a specific target before the call, only
+     the named target and format combination is checked.  If the target
+     has not been set, or has been set to 'default', then all the known
+     target backends is interrogated to determine a match.  If the
+     default target matches, it is used.  If not, exactly one target
+     must recognize the file, or an error results.
+
+     The function returns 'TRUE' on success, otherwise 'FALSE' with one
+     of the following error codes:
+
+        * 'bfd_error_invalid_operation' - if 'format' is not one of
+          'bfd_object', 'bfd_archive' or 'bfd_core'.
 
-   * 'bfd_error_system_call' - if an error occured during a read - even
-     some file mismatches can cause bfd_error_system_calls.
+        * 'bfd_error_system_call' - if an error occured during a read -
+          even some file mismatches can cause bfd_error_system_calls.
 
-   * 'file_not_recognised' - none of the backends recognised the file
-     format.
+        * 'file_not_recognised' - none of the backends recognised the
+          file format.
 
-   * 'bfd_error_file_ambiguously_recognized' - more than one backend
-     recognised the file format.
+        * 'bfd_error_file_ambiguously_recognized' - more than one
+          backend recognised the file format.
 
 2.9.1.2 'bfd_check_format_matches'
 ..................................
 
-*Synopsis*
-     bfd_boolean bfd_check_format_matches
-        (bfd *abfd, bfd_format format, char ***matching);
-   *Description*
-Like 'bfd_check_format', except when it returns FALSE with 'bfd_errno'
-set to 'bfd_error_file_ambiguously_recognized'.  In that case, if
-MATCHING is not NULL, it will be filled in with a NULL-terminated list
-of the names of the formats that matched, allocated with 'malloc'.  Then
-the user may choose a format and try again.
+ -- Function: bool bfd_check_format_matches (bfd *abfd, bfd_format
+          format, char ***matching);
+     Like 'bfd_check_format', except when it returns FALSE with
+     'bfd_errno' set to 'bfd_error_file_ambiguously_recognized'.  In
+     that case, if MATCHING is not NULL, it will be filled in with a
+     NULL-terminated list of the names of the formats that matched,
+     allocated with 'malloc'.  Then the user may choose a format and try
+     again.
 
-   When done with the list that MATCHING points to, the caller should
-free it.
+     When done with the list that MATCHING points to, the caller should
+     free it.
 
 2.9.1.3 'bfd_set_format'
 ........................
 
-*Synopsis*
-     bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
-   *Description*
-This function sets the file format of the BFD ABFD to the format FORMAT.
-If the target set in the BFD does not support the format requested, the
-format is invalid, or the BFD is not open for writing, then an error
-occurs.
+ -- Function: bool bfd_set_format (bfd *abfd, bfd_format format);
+     This function sets the file format of the BFD ABFD to the format
+     FORMAT.  If the target set in the BFD does not support the format
+     requested, the format is invalid, or the BFD is not open for
+     writing, then an error occurs.
 
 2.9.1.4 'bfd_format_string'
 ...........................
 
-*Synopsis*
-     const char *bfd_format_string (bfd_format format);
-   *Description*
-Return a pointer to a const string 'invalid', 'object', 'archive',
-'core', or 'unknown', depending upon the value of FORMAT.
+ -- Function: const char *bfd_format_string (bfd_format format);
+     Return a pointer to a const string 'invalid', 'object', 'archive',
+     'core', or 'unknown', depending upon the value of FORMAT.
 
 
 File: bfd.info,  Node: Relocations,  Next: Core Files,  Prev: Formats,  Up: BFD front end
@@ -3315,41 +2882,7 @@ File: bfd.info,  Node: typedef arelent,
 
 This is the structure of a relocation entry:
 
-
-     typedef enum bfd_reloc_status
-     {
-       /* No errors detected.  Note - the value 2 is used so that it
-          will not be mistaken for the boolean TRUE or FALSE values.  */
-       bfd_reloc_ok = 2,
-
-       /* The relocation was performed, but there was an overflow.  */
-       bfd_reloc_overflow,
-
-       /* The address to relocate was not within the section supplied.  */
-       bfd_reloc_outofrange,
-
-       /* Used by special functions.  */
-       bfd_reloc_continue,
-
-       /* Unsupported relocation size requested.  */
-       bfd_reloc_notsupported,
-
-       /* Unused.  */
-       bfd_reloc_other,
-
-       /* The symbol to relocate against was undefined.  */
-       bfd_reloc_undefined,
-
-       /* The relocation was performed, but may not be ok.  If this type is
-          returned, the error_message argument to bfd_perform_relocation
-          will be set.  */
-       bfd_reloc_dangerous
-      }
-      bfd_reloc_status_type;
-
-     typedef const struct reloc_howto_struct reloc_howto_type;
-
-     typedef struct reloc_cache_entry
+     struct reloc_cache_entry
      {
        /* A pointer into the canonical table of pointers.  */
        struct bfd_symbol **sym_ptr_ptr;
@@ -3363,11 +2896,9 @@ This is the structure of a relocation en
        /* Pointer to how to perform the required relocation.  */
        reloc_howto_type *howto;
 
-     }
-     arelent;
+     };
 
-   *Description*
-Here is a description of each of the fields within an 'arelent':
+   Here is a description of each of the fields within an 'arelent':
 
    * 'sym_ptr_ptr'
    The symbol table pointer points to a pointer to the symbol associated
@@ -3485,7 +3016,6 @@ would be possible to create each howto f
 Indicates what sort of overflow checking should be done when performing
 a relocation.
 
-
      enum complain_overflow
      {
        /* Do not complain on overflow.  */
@@ -3505,6 +3035,7 @@ a relocation.
        complain_overflow_unsigned
      };
 
+
 2.10.1.2 'reloc_howto_type'
 ...........................
 
@@ -3518,10 +3049,8 @@ that libbfd needs to know to tie up a ba
           an external reloc number is stored in this field.  */
        unsigned int type;
 
-       /* The encoded size of the item to be relocated.  This is *not* a
-          power-of-two measure.  Use bfd_get_reloc_size to find the size
-          of the item in bytes.  */
-       unsigned int size:3;
+       /* The size of the item to be relocated in bytes.  */
+       unsigned int size:4;
 
        /* The number of bits in the field to be relocated.  This is used
           when doing overflow checking.  */
@@ -3570,6 +3099,11 @@ that libbfd needs to know to tie up a ba
           empty (e.g., ELF); this flag signals the fact.  */
        unsigned int pcrel_offset:1;
 
+       /* Whether bfd_install_relocation should just install the addend,
+          or should follow the practice of some older object formats and
+          install a value including the symbol.  */
+       unsigned int install_addend:1;
+
        /* src_mask selects the part of the instruction (or data) to be used
           in the relocation sum.  If the target relocations don't have an
           addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
@@ -3599,34 +3133,31 @@ that libbfd needs to know to tie up a ba
 2.10.1.3 'The HOWTO Macro'
 ..........................
 
-*Description*
 The HOWTO macro fills in a reloc_howto_type (a typedef for const struct
 reloc_howto_struct).
+     #define HOWTO_INSTALL_ADDEND 0
+     #define HOWTO_RSIZE(sz) ((sz) < 0 ? -(sz) : (sz))
      #define HOWTO(type, right, size, bits, pcrel, left, ovf, func, name,   \
                    inplace, src_mask, dst_mask, pcrel_off)                  \
-       { (unsigned) type, size < 0 ? -size : size, bits, right, left, ovf,  \
-         size < 0, pcrel, inplace, pcrel_off, src_mask, dst_mask, func, name }
+       { (unsigned) type, HOWTO_RSIZE (size), bits, right, left, ovf,       \
+         size < 0, pcrel, inplace, pcrel_off, HOWTO_INSTALL_ADDEND,         \
+         src_mask, dst_mask, func, name }
 
-   *Description*
-This is used to fill in an empty howto entry in an array.
+   This is used to fill in an empty howto entry in an array.
      #define EMPTY_HOWTO(C) \
-       HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
-              NULL, FALSE, 0, 0, FALSE)
+       HOWTO ((C), 0, 1, 0, false, 0, complain_overflow_dont, NULL, \
+              NULL, false, 0, 0, false)
 
+     static inline unsigned int
+     bfd_get_reloc_size (reloc_howto_type *howto)
+     {
+       return howto->size;
+     }
 
-2.10.1.4 'bfd_get_reloc_size'
-.............................
-
-*Synopsis*
-     unsigned int bfd_get_reloc_size (reloc_howto_type *);
-   *Description*
-For a reloc_howto_type that operates on a fixed number of bytes, this
-returns the number of bytes operated on.
 
-2.10.1.5 'arelent_chain'
+2.10.1.4 'arelent_chain'
 ........................
 
-*Description*
 How relocs are tied together in an 'asection':
      typedef struct relent_chain
      {
@@ -3636,77 +3167,58 @@ How relocs are tied together in an 'asec
      arelent_chain;
 
 
-2.10.1.6 'bfd_check_overflow'
+2.10.1.5 'bfd_check_overflow'
 .............................
 
-*Synopsis*
-     bfd_reloc_status_type bfd_check_overflow
-        (enum complain_overflow how,
-         unsigned int bitsize,
-         unsigned int rightshift,
-         unsigned int addrsize,
-         bfd_vma relocation);
-   *Description*
-Perform overflow checking on RELOCATION which has BITSIZE significant
-bits and will be shifted right by RIGHTSHIFT bits, on a machine with
-addresses containing ADDRSIZE significant bits.  The result is either of
-'bfd_reloc_ok' or 'bfd_reloc_overflow'.
+ -- Function: bfd_reloc_status_type bfd_check_overflow (enum
+          complain_overflow how, unsigned int bitsize, unsigned int
+          rightshift, unsigned int addrsize, bfd_vma relocation);
+     Perform overflow checking on RELOCATION which has BITSIZE
+     significant bits and will be shifted right by RIGHTSHIFT bits, on a
+     machine with addresses containing ADDRSIZE significant bits.  The
+     result is either of 'bfd_reloc_ok' or 'bfd_reloc_overflow'.
 
-2.10.1.7 'bfd_reloc_offset_in_range'
+2.10.1.6 'bfd_reloc_offset_in_range'
 ....................................
 
-*Synopsis*
-     bfd_boolean bfd_reloc_offset_in_range
-        (reloc_howto_type *howto,
-         bfd *abfd,
-         asection *section,
-         bfd_size_type offset);
-   *Description*
-Returns TRUE if the reloc described by HOWTO can be applied at OFFSET
-octets in SECTION.
+ -- Function: bool bfd_reloc_offset_in_range (reloc_howto_type *howto,
+          bfd *abfd, asection *section, bfd_size_type offset);
+     Returns TRUE if the reloc described by HOWTO can be applied at
+     OFFSET octets in SECTION.
 
-2.10.1.8 'bfd_perform_relocation'
+2.10.1.7 'bfd_perform_relocation'
 .................................
 
-*Synopsis*
-     bfd_reloc_status_type bfd_perform_relocation
-        (bfd *abfd,
-         arelent *reloc_entry,
-         void *data,
-         asection *input_section,
-         bfd *output_bfd,
-         char **error_message);
-   *Description*
-If OUTPUT_BFD is supplied to this function, the generated image will be
-relocatable; the relocations are copied to the output file after they
-have been changed to reflect the new state of the world.  There are two
-ways of reflecting the results of partial linkage in an output file: by
-modifying the output data in place, and by modifying the relocation
-record.  Some native formats (e.g., basic a.out and basic coff) have no
-way of specifying an addend in the relocation type, so the addend has to
-go in the output data.  This is no big deal since in these formats the
-output data slot will always be big enough for the addend.  Complex
-reloc types with addends were invented to solve just this problem.  The
-ERROR_MESSAGE argument is set to an error message if this return
-'bfd_reloc_dangerous'.
+ -- Function: bfd_reloc_status_type bfd_perform_relocation (bfd *abfd,
+          arelent *reloc_entry, void *data, asection *input_section, bfd
+          *output_bfd, char **error_message);
+     If OUTPUT_BFD is supplied to this function, the generated image
+     will be relocatable; the relocations are copied to the output file
+     after they have been changed to reflect the new state of the world.
+     There are two ways of reflecting the results of partial linkage in
+     an output file: by modifying the output data in place, and by
+     modifying the relocation record.  Some native formats (e.g., basic
+     a.out and basic coff) have no way of specifying an addend in the
+     relocation type, so the addend has to go in the output data.  This
+     is no big deal since in these formats the output data slot will
+     always be big enough for the addend.  Complex reloc types with
+     addends were invented to solve just this problem.  The
+     ERROR_MESSAGE argument is set to an error message if this return
+     'bfd_reloc_dangerous'.
 
-2.10.1.9 'bfd_install_relocation'
+2.10.1.8 'bfd_install_relocation'
 .................................
 
-*Synopsis*
-     bfd_reloc_status_type bfd_install_relocation
-        (bfd *abfd,
-         arelent *reloc_entry,
-         void *data, bfd_vma data_start,
-         asection *input_section,
-         char **error_message);
-   *Description*
-This looks remarkably like 'bfd_perform_relocation', except it does not
-expect that the section contents have been filled in.  I.e., it's
-suitable for use when creating, rather than applying a relocation.
+ -- Function: bfd_reloc_status_type bfd_install_relocation (bfd *abfd,
+          arelent *reloc_entry, void *data, bfd_vma data_start, asection
+          *input_section, char **error_message);
+     This looks remarkably like 'bfd_perform_relocation', except it does
+     not expect that the section contents have been filled in.  I.e.,
+     it's suitable for use when creating, rather than applying a
+     relocation.
 
-   For now, this function should be considered reserved for the
-assembler.
+     For now, this function should be considered reserved for the
+     assembler.
 
 
 File: bfd.info,  Node: howto manager,  Prev: typedef arelent,  Up: Relocations
@@ -3718,10 +3230,9 @@ When an application wants to create a re
 the target machine might call it, it can find out by using this bit of
 code.
 
-2.10.2.1 'bfd_reloc_code_type'
-..............................
+2.10.2.1 'bfd_reloc_code_real_type'
+...................................
 
-*Description*
 The insides of a reloc code.  The idea is that, eventually, there will
 be one enumerator for every type of relocation we ever do.  Pass one of
 these values to 'bfd_reloc_type_lookup', and it'll return a howto
@@ -3752,6 +3263,7 @@ attributes.
      the start of the section containing the relocation.  It depends on
      the specific target.
  -- : BFD_RELOC_32_SECREL
+ -- : BFD_RELOC_16_SECIDX
      Section relative relocations.  Some targets need this for DWARF2.
  -- : BFD_RELOC_32_GOT_PCREL
  -- : BFD_RELOC_16_GOT_PCREL
@@ -3883,9 +3395,9 @@ attributes.
  -- : BFD_RELOC_SPARC_SIZE32
  -- : BFD_RELOC_SPARC_SIZE64
  -- : BFD_RELOC_SPARC_WDISP10
-     SPARC64 relocations
+     SPARC64 relocations.
  -- : BFD_RELOC_SPARC_REV32
-     SPARC little endian relocation
+     SPARC little endian relocation.
  -- : BFD_RELOC_SPARC_TLS_GD_HI22
  -- : BFD_RELOC_SPARC_TLS_GD_LO10
  -- : BFD_RELOC_SPARC_TLS_GD_ADD
@@ -3910,7 +3422,7 @@ attributes.
  -- : BFD_RELOC_SPARC_TLS_DTPOFF64
  -- : BFD_RELOC_SPARC_TLS_TPOFF32
  -- : BFD_RELOC_SPARC_TLS_TPOFF64
-     SPARC TLS relocations
+     SPARC TLS relocations.
  -- : BFD_RELOC_SPU_IMM7
  -- : BFD_RELOC_SPU_IMM8
  -- : BFD_RELOC_SPU_IMM10
@@ -4030,15 +3542,15 @@ attributes.
  -- : BFD_RELOC_LO16
      Low 16 bits.
  -- : BFD_RELOC_HI16_PCREL
-     High 16 bits of 32-bit pc-relative value
+     High 16 bits of 32-bit pc-relative value.
  -- : BFD_RELOC_HI16_S_PCREL
-     High 16 bits of 32-bit pc-relative value, adjusted
+     High 16 bits of 32-bit pc-relative value, adjusted.
  -- : BFD_RELOC_LO16_PCREL
-     Low 16 bits of pc-relative value
+     Low 16 bits of pc-relative value.
  -- : BFD_RELOC_MIPS16_GOT16
  -- : BFD_RELOC_MIPS16_CALL16
      Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
-     16-bit immediate fields
+     16-bit immediate fields.
  -- : BFD_RELOC_MIPS16_HI16
      MIPS16 high 16 bits of 32-bit value.
  -- : BFD_RELOC_MIPS16_HI16_S
@@ -4055,7 +3567,7 @@ attributes.
  -- : BFD_RELOC_MIPS16_TLS_GOTTPREL
  -- : BFD_RELOC_MIPS16_TLS_TPREL_HI16
  -- : BFD_RELOC_MIPS16_TLS_TPREL_LO16
-     MIPS16 TLS relocations
+     MIPS16 TLS relocations.
  -- : BFD_RELOC_MIPS_LITERAL
  -- : BFD_RELOC_MICROMIPS_LITERAL
      Relocation against a MIPS literal section.
@@ -4106,7 +3618,7 @@ attributes.
  -- : BFD_RELOC_MICROMIPS_HIGHER
  -- : BFD_RELOC_MIPS_SCN_DISP
  -- : BFD_RELOC_MICROMIPS_SCN_DISP
- -- : BFD_RELOC_MIPS_REL16
+ -- : BFD_RELOC_MIPS_16
  -- : BFD_RELOC_MIPS_RELGOT
  -- : BFD_RELOC_MIPS_JALR
  -- : BFD_RELOC_MICROMIPS_JALR
@@ -4254,7 +3766,7 @@ attributes.
  -- : BFD_RELOC_386_TLS_DESC
  -- : BFD_RELOC_386_IRELATIVE
  -- : BFD_RELOC_386_GOT32X
-     i386/elf relocations
+     i386/elf relocations.
  -- : BFD_RELOC_X86_64_GOT32
  -- : BFD_RELOC_X86_64_PLT32
  -- : BFD_RELOC_X86_64_COPY
@@ -4286,7 +3798,10 @@ attributes.
  -- : BFD_RELOC_X86_64_PLT32_BND
  -- : BFD_RELOC_X86_64_GOTPCRELX
  -- : BFD_RELOC_X86_64_REX_GOTPCRELX
-     x86-64/elf relocations
+ -- : BFD_RELOC_X86_64_CODE_4_GOTPCRELX
+ -- : BFD_RELOC_X86_64_CODE_4_GOTTPOFF
+ -- : BFD_RELOC_X86_64_CODE_4_GOTPC32_TLSDESC
+     x86-64/elf relocations.
  -- : BFD_RELOC_NS32K_IMM_8
  -- : BFD_RELOC_NS32K_IMM_16
  -- : BFD_RELOC_NS32K_IMM_32
@@ -4299,10 +3814,10 @@ attributes.
  -- : BFD_RELOC_NS32K_DISP_8_PCREL
  -- : BFD_RELOC_NS32K_DISP_16_PCREL
  -- : BFD_RELOC_NS32K_DISP_32_PCREL
-     ns32k relocations
+     ns32k relocations.
  -- : BFD_RELOC_PDP11_DISP_8_PCREL
  -- : BFD_RELOC_PDP11_DISP_6_PCREL
-     PDP11 relocations
+     PDP11 relocations.
  -- : BFD_RELOC_PJ_CODE_HI16
  -- : BFD_RELOC_PJ_CODE_LO16
  -- : BFD_RELOC_PJ_CODE_DIR16
@@ -4313,6 +3828,8 @@ attributes.
  -- : BFD_RELOC_PPC_B26
  -- : BFD_RELOC_PPC_BA26
  -- : BFD_RELOC_PPC_TOC16
+ -- : BFD_RELOC_PPC_TOC16_LO
+ -- : BFD_RELOC_PPC_TOC16_HI
  -- : BFD_RELOC_PPC_B16
  -- : BFD_RELOC_PPC_B16_BRTAKEN
  -- : BFD_RELOC_PPC_B16_BRNTAKEN
@@ -4359,6 +3876,7 @@ attributes.
  -- : BFD_RELOC_PPC_VLE_SDAREL_HA16D
  -- : BFD_RELOC_PPC_16DX_HA
  -- : BFD_RELOC_PPC_REL16DX_HA
+ -- : BFD_RELOC_PPC_NEG
  -- : BFD_RELOC_PPC64_HIGHER
  -- : BFD_RELOC_PPC64_HIGHER_S
  -- : BFD_RELOC_PPC64_HIGHEST
@@ -4393,6 +3911,7 @@ attributes.
  -- : BFD_RELOC_PPC64_ADDR64_LOCAL
  -- : BFD_RELOC_PPC64_ENTRY
  -- : BFD_RELOC_PPC64_REL24_NOTOC
+ -- : BFD_RELOC_PPC64_REL24_P9NOTOC
  -- : BFD_RELOC_PPC64_D34
  -- : BFD_RELOC_PPC64_D34_LO
  -- : BFD_RELOC_PPC64_D34_HI30
@@ -4414,6 +3933,10 @@ attributes.
  -- : BFD_RELOC_PPC_TLS
  -- : BFD_RELOC_PPC_TLSGD
  -- : BFD_RELOC_PPC_TLSLD
+ -- : BFD_RELOC_PPC_TLSLE
+ -- : BFD_RELOC_PPC_TLSIE
+ -- : BFD_RELOC_PPC_TLSM
+ -- : BFD_RELOC_PPC_TLSML
  -- : BFD_RELOC_PPC_DTPMOD
  -- : BFD_RELOC_PPC_TPREL16
  -- : BFD_RELOC_PPC_TPREL16_LO
@@ -4441,6 +3964,12 @@ attributes.
  -- : BFD_RELOC_PPC_GOT_DTPREL16_LO
  -- : BFD_RELOC_PPC_GOT_DTPREL16_HI
  -- : BFD_RELOC_PPC_GOT_DTPREL16_HA
+ -- : BFD_RELOC_PPC64_TLSGD
+ -- : BFD_RELOC_PPC64_TLSLD
+ -- : BFD_RELOC_PPC64_TLSLE
+ -- : BFD_RELOC_PPC64_TLSIE
+ -- : BFD_RELOC_PPC64_TLSM
+ -- : BFD_RELOC_PPC64_TLSML
  -- : BFD_RELOC_PPC64_TPREL16_DS
  -- : BFD_RELOC_PPC64_TPREL16_LO_DS
  -- : BFD_RELOC_PPC64_TPREL16_HIGH
@@ -4459,14 +3988,14 @@ attributes.
  -- : BFD_RELOC_PPC64_DTPREL16_HIGHESTA
  -- : BFD_RELOC_PPC64_TPREL34
  -- : BFD_RELOC_PPC64_DTPREL34
- -- : BFD_RELOC_PPC64_GOT_TLSGD34
- -- : BFD_RELOC_PPC64_GOT_TLSLD34
- -- : BFD_RELOC_PPC64_GOT_TPREL34
- -- : BFD_RELOC_PPC64_GOT_DTPREL34
+ -- : BFD_RELOC_PPC64_GOT_TLSGD_PCREL34
+ -- : BFD_RELOC_PPC64_GOT_TLSLD_PCREL34
+ -- : BFD_RELOC_PPC64_GOT_TPREL_PCREL34
+ -- : BFD_RELOC_PPC64_GOT_DTPREL_PCREL34
  -- : BFD_RELOC_PPC64_TLS_PCREL
      PowerPC and PowerPC64 thread-local storage relocations.
  -- : BFD_RELOC_I370_D12
-     IBM 370/390 relocations
+     IBM 370/390 relocations.
  -- : BFD_RELOC_CTOR
      The type of reloc used to build a constructor table - at the moment
      probably a 32 bit wide absolute relocation, but the target can
@@ -4933,11 +4462,9 @@ attributes.
  -- : BFD_RELOC_D30V_32_PCREL
      This is a 32-bit pc-relative reloc.
  -- : BFD_RELOC_DLX_HI16_S
-     DLX relocs
  -- : BFD_RELOC_DLX_LO16
-     DLX relocs
  -- : BFD_RELOC_DLX_JMP26
-     DLX relocs
+     DLX relocs.
  -- : BFD_RELOC_M32C_HI8
  -- : BFD_RELOC_M32C_RL_JUMP
  -- : BFD_RELOC_M32C_RL_1ADDR
@@ -4998,46 +4525,46 @@ attributes.
      This is a 25-bit reloc with the right 1 bit assumed to be 0.
  -- : BFD_RELOC_NDS32_HI20
      This is a 20-bit reloc containing the high 20 bits of an address
-     used with the lower 12 bits
+     used with the lower 12 bits.
  -- : BFD_RELOC_NDS32_LO12S3
      This is a 12-bit reloc containing the lower 12 bits of an address
-     then shift right by 3.  This is used with ldi,sdi...
+     then shift right by 3.  This is used with ldi,sdi.
  -- : BFD_RELOC_NDS32_LO12S2
      This is a 12-bit reloc containing the lower 12 bits of an address
-     then shift left by 2.  This is used with lwi,swi...
+     then shift left by 2.  This is used with lwi,swi.
  -- : BFD_RELOC_NDS32_LO12S1
      This is a 12-bit reloc containing the lower 12 bits of an address
-     then shift left by 1.  This is used with lhi,shi...
+     then shift left by 1.  This is used with lhi,shi.
  -- : BFD_RELOC_NDS32_LO12S0
      This is a 12-bit reloc containing the lower 12 bits of an address
-     then shift left by 0.  This is used with lbisbi...
+     then shift left by 0.  This is used with lbisbi.
  -- : BFD_RELOC_NDS32_LO12S0_ORI
      This is a 12-bit reloc containing the lower 12 bits of an address
-     then shift left by 0.  This is only used with branch relaxations
+     then shift left by 0.  This is only used with branch relaxations.
  -- : BFD_RELOC_NDS32_SDA15S3
      This is a 15-bit reloc containing the small data area 18-bit signed
-     offset and shift left by 3 for use in ldi, sdi...
+     offset and shift left by 3 for use in ldi, sdi.
  -- : BFD_RELOC_NDS32_SDA15S2
      This is a 15-bit reloc containing the small data area 17-bit signed
-     offset and shift left by 2 for use in lwi, swi...
+     offset and shift left by 2 for use in lwi, swi.
  -- : BFD_RELOC_NDS32_SDA15S1
      This is a 15-bit reloc containing the small data area 16-bit signed
-     offset and shift left by 1 for use in lhi, shi...
+     offset and shift left by 1 for use in lhi, shi.
  -- : BFD_RELOC_NDS32_SDA15S0
      This is a 15-bit reloc containing the small data area 15-bit signed
-     offset and shift left by 0 for use in lbi, sbi...
+     offset and shift left by 0 for use in lbi, sbi.
  -- : BFD_RELOC_NDS32_SDA16S3
      This is a 16-bit reloc containing the small data area 16-bit signed
-     offset and shift left by 3
+     offset and shift left by 3.
  -- : BFD_RELOC_NDS32_SDA17S2
      This is a 17-bit reloc containing the small data area 17-bit signed
-     offset and shift left by 2 for use in lwi.gp, swi.gp...
+     offset and shift left by 2 for use in lwi.gp, swi.gp.
  -- : BFD_RELOC_NDS32_SDA18S1
      This is a 18-bit reloc containing the small data area 18-bit signed
-     offset and shift left by 1 for use in lhi.gp, shi.gp...
+     offset and shift left by 1 for use in lhi.gp, shi.gp.
  -- : BFD_RELOC_NDS32_SDA19S0
      This is a 19-bit reloc containing the small data area 19-bit signed
-     offset and shift left by 0 for use in lbi.gp, sbi.gp...
+     offset and shift left by 0 for use in lbi.gp, sbi.gp.
  -- : BFD_RELOC_NDS32_GOT20
  -- : BFD_RELOC_NDS32_9_PLTREL
  -- : BFD_RELOC_NDS32_25_PLTREL
@@ -5053,7 +4580,7 @@ attributes.
  -- : BFD_RELOC_NDS32_GOT_LO12
  -- : BFD_RELOC_NDS32_GOTPC_HI20
  -- : BFD_RELOC_NDS32_GOTPC_LO12
-     for PIC
+     For PIC.
  -- : BFD_RELOC_NDS32_INSN16
  -- : BFD_RELOC_NDS32_LABEL
  -- : BFD_RELOC_NDS32_LONGCALL1
@@ -5074,23 +4601,23 @@ attributes.
  -- : BFD_RELOC_NDS32_LONGJUMP5
  -- : BFD_RELOC_NDS32_LONGJUMP6
  -- : BFD_RELOC_NDS32_LONGJUMP7
-     for relax
+     For relax.
  -- : BFD_RELOC_NDS32_PLTREL_HI20
  -- : BFD_RELOC_NDS32_PLTREL_LO12
  -- : BFD_RELOC_NDS32_PLT_GOTREL_HI20
  -- : BFD_RELOC_NDS32_PLT_GOTREL_LO12
-     for PIC
+     For PIC.
  -- : BFD_RELOC_NDS32_SDA12S2_DP
  -- : BFD_RELOC_NDS32_SDA12S2_SP
  -- : BFD_RELOC_NDS32_LO12S2_DP
  -- : BFD_RELOC_NDS32_LO12S2_SP
-     for floating point
+     For floating point.
  -- : BFD_RELOC_NDS32_DWARF2_OP1
  -- : BFD_RELOC_NDS32_DWARF2_OP2
  -- : BFD_RELOC_NDS32_DWARF2_LEB
-     for dwarf2 debug_line.
+     For dwarf2 debug_line.
  -- : BFD_RELOC_NDS32_UPDATE_TA
-     for eliminate 16-bit instructions
+     For eliminating 16-bit instructions.
  -- : BFD_RELOC_NDS32_PLT_GOTREL_LO20
  -- : BFD_RELOC_NDS32_PLT_GOTREL_LO15
  -- : BFD_RELOC_NDS32_PLT_GOTREL_LO19
@@ -5100,7 +4627,7 @@ attributes.
  -- : BFD_RELOC_NDS32_GOTOFF_LO19
  -- : BFD_RELOC_NDS32_GOT15S2
  -- : BFD_RELOC_NDS32_GOT17S2
-     for PIC object relaxation
+     For PIC object relaxation.
  -- : BFD_RELOC_NDS32_5
      NDS32 relocs.  This is a 5 bit absolute address.
  -- : BFD_RELOC_NDS32_10_UPCREL
@@ -5126,7 +4653,7 @@ attributes.
  -- : BFD_RELOC_NDS32_DIFF32
  -- : BFD_RELOC_NDS32_DIFF_ULEB128
  -- : BFD_RELOC_NDS32_EMPTY
-     relaxation relative relocation types
+     Relaxation relative relocation types.
  -- : BFD_RELOC_NDS32_25_ABS
      This is a 25 bit absolute address.
  -- : BFD_RELOC_NDS32_DATA
@@ -5166,9 +4693,9 @@ attributes.
  -- : BFD_RELOC_NDS32_LSI
      For floating load store relaxation.
  -- : BFD_RELOC_V850_9_PCREL
-     This is a 9-bit reloc
+     This is a 9-bit reloc.
  -- : BFD_RELOC_V850_22_PCREL
-     This is a 22-bit reloc
+     This is a 22-bit reloc.
  -- : BFD_RELOC_V850_SDA_16_16_OFFSET
      This is a 16 bit offset from the short data area pointer.
  -- : BFD_RELOC_V850_SDA_15_16_OFFSET
@@ -5232,31 +4759,21 @@ attributes.
  -- : BFD_RELOC_V850_CALLT_15_16_OFFSET
      This is a 16 bit offset from the call table base pointer.
  -- : BFD_RELOC_V850_32_GOTPCREL
-     DSO relocations.
  -- : BFD_RELOC_V850_16_GOT
-     DSO relocations.
  -- : BFD_RELOC_V850_32_GOT
-     DSO relocations.
  -- : BFD_RELOC_V850_22_PLT_PCREL
-     DSO relocations.
  -- : BFD_RELOC_V850_32_PLT_PCREL
-     DSO relocations.
  -- : BFD_RELOC_V850_COPY
-     DSO relocations.
  -- : BFD_RELOC_V850_GLOB_DAT
-     DSO relocations.
  -- : BFD_RELOC_V850_JMP_SLOT
-     DSO relocations.
  -- : BFD_RELOC_V850_RELATIVE
-     DSO relocations.
  -- : BFD_RELOC_V850_16_GOTOFF
-     DSO relocations.
  -- : BFD_RELOC_V850_32_GOTOFF
      DSO relocations.
  -- : BFD_RELOC_V850_CODE
-     start code.
+     Start code.
  -- : BFD_RELOC_V850_DATA
-     start data in text.
+     Start data in text.
  -- : BFD_RELOC_TIC30_LDP
      This is a 8bit DP reloc for the tms320c30, where the most
      significant 8 bits of a 24 bit word are placed into the least
@@ -5512,22 +5029,22 @@ attributes.
      bits.
  -- : BFD_RELOC_AVR_LDI
      This is a 16 bit reloc for the AVR that stores all needed bits for
-     absolute addressing with ldi with overflow check to linktime
+     absolute addressing with ldi with overflow check to linktime.
  -- : BFD_RELOC_AVR_6
      This is a 6 bit reloc for the AVR that stores offset for ldd/std
-     instructions
+     instructions.
  -- : BFD_RELOC_AVR_6_ADIW
      This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
-     instructions
+     instructions.
  -- : BFD_RELOC_AVR_8_LO
      This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
-     in .byte lo8(symbol)
+     in .byte lo8(symbol).
  -- : BFD_RELOC_AVR_8_HI
      This is a 8 bit reloc for the AVR that stores bits 8..15 of a
-     symbol in .byte hi8(symbol)
+     symbol in .byte hi8(symbol).
  -- : BFD_RELOC_AVR_8_HLO
      This is a 8 bit reloc for the AVR that stores bits 16..23 of a
-     symbol in .byte hlo8(symbol)
+     symbol in .byte hlo8(symbol).
  -- : BFD_RELOC_AVR_DIFF8
  -- : BFD_RELOC_AVR_DIFF16
  -- : BFD_RELOC_AVR_DIFF32
@@ -5542,10 +5059,10 @@ attributes.
      16bit lds and sts instructions supported only tiny core.
  -- : BFD_RELOC_AVR_PORT6
      This is a 6 bit reloc for the AVR that stores an I/O register
-     number for the IN and OUT instructions
+     number for the IN and OUT instructions.
  -- : BFD_RELOC_AVR_PORT5
      This is a 5 bit reloc for the AVR that stores an I/O register
-     number for the SBIC, SBIS, SBI and CBI instructions
+     number for the SBIC, SBIS, SBI and CBI instructions.
  -- : BFD_RELOC_RISCV_HI20
  -- : BFD_RELOC_RISCV_PCREL_HI20
  -- : BFD_RELOC_RISCV_PCREL_LO12_I
@@ -5581,11 +5098,6 @@ attributes.
  -- : BFD_RELOC_RISCV_ALIGN
  -- : BFD_RELOC_RISCV_RVC_BRANCH
  -- : BFD_RELOC_RISCV_RVC_JUMP
- -- : BFD_RELOC_RISCV_RVC_LUI
- -- : BFD_RELOC_RISCV_GPREL_I
- -- : BFD_RELOC_RISCV_GPREL_S
- -- : BFD_RELOC_RISCV_TPREL_I
- -- : BFD_RELOC_RISCV_TPREL_S
  -- : BFD_RELOC_RISCV_RELAX
  -- : BFD_RELOC_RISCV_CFA
  -- : BFD_RELOC_RISCV_SUB6
@@ -5594,6 +5106,8 @@ attributes.
  -- : BFD_RELOC_RISCV_SET16
  -- : BFD_RELOC_RISCV_SET32
  -- : BFD_RELOC_RISCV_32_PCREL
+ -- : BFD_RELOC_RISCV_SET_ULEB128
+ -- : BFD_RELOC_RISCV_SUB_ULEB128
      RISC-V relocations.
  -- : BFD_RELOC_RL78_NEG8
  -- : BFD_RELOC_RL78_NEG16
@@ -5747,51 +5261,51 @@ attributes.
  -- : BFD_RELOC_390_IRELATIVE
      STT_GNU_IFUNC relocation.
  -- : BFD_RELOC_SCORE_GPREL15
-     Score relocations Low 16 bit for load/store
+     Score relocations.  Low 16 bit for load/store.
  -- : BFD_RELOC_SCORE_DUMMY2
  -- : BFD_RELOC_SCORE_JMP
-     This is a 24-bit reloc with the right 1 bit assumed to be 0
+     This is a 24-bit reloc with the right 1 bit assumed to be 0.
  -- : BFD_RELOC_SCORE_BRANCH
-     This is a 19-bit reloc with the right 1 bit assumed to be 0
+     This is a 19-bit reloc with the right 1 bit assumed to be 0.
  -- : BFD_RELOC_SCORE_IMM30
      This is a 32-bit reloc for 48-bit instructions.
  -- : BFD_RELOC_SCORE_IMM32
      This is a 32-bit reloc for 48-bit instructions.
  -- : BFD_RELOC_SCORE16_JMP
-     This is a 11-bit reloc with the right 1 bit assumed to be 0
+     This is a 11-bit reloc with the right 1 bit assumed to be 0.
  -- : BFD_RELOC_SCORE16_BRANCH
-     This is a 8-bit reloc with the right 1 bit assumed to be 0
+     This is a 8-bit reloc with the right 1 bit assumed to be 0.
  -- : BFD_RELOC_SCORE_BCMP
-     This is a 9-bit reloc with the right 1 bit assumed to be 0
+     This is a 9-bit reloc with the right 1 bit assumed to be 0.
  -- : BFD_RELOC_SCORE_GOT15
  -- : BFD_RELOC_SCORE_GOT_LO16
  -- : BFD_RELOC_SCORE_CALL15
  -- : BFD_RELOC_SCORE_DUMMY_HI16
-     Undocumented Score relocs
+     Undocumented Score relocs.
  -- : BFD_RELOC_IP2K_FR9
-     Scenix IP2K - 9-bit register number / data address
+     Scenix IP2K - 9-bit register number / data address.
  -- : BFD_RELOC_IP2K_BANK
-     Scenix IP2K - 4-bit register/data bank number
+     Scenix IP2K - 4-bit register/data bank number.
  -- : BFD_RELOC_IP2K_ADDR16CJP
-     Scenix IP2K - low 13 bits of instruction word address
+     Scenix IP2K - low 13 bits of instruction word address.
  -- : BFD_RELOC_IP2K_PAGE3
-     Scenix IP2K - high 3 bits of instruction word address
+     Scenix IP2K - high 3 bits of instruction word address.
  -- : BFD_RELOC_IP2K_LO8DATA
  -- : BFD_RELOC_IP2K_HI8DATA
  -- : BFD_RELOC_IP2K_EX8DATA
-     Scenix IP2K - ext/low/high 8 bits of data address
+     Scenix IP2K - ext/low/high 8 bits of data address.
  -- : BFD_RELOC_IP2K_LO8INSN
  -- : BFD_RELOC_IP2K_HI8INSN
-     Scenix IP2K - low/high 8 bits of instruction word address
+     Scenix IP2K - low/high 8 bits of instruction word address.
  -- : BFD_RELOC_IP2K_PC_SKIP
-     Scenix IP2K - even/odd PC modifier to modify snb pcl.0
+     Scenix IP2K - even/odd PC modifier to modify snb pcl.0.
  -- : BFD_RELOC_IP2K_TEXT
      Scenix IP2K - 16 bit word address in text section.
  -- : BFD_RELOC_IP2K_FR_OFFSET
-     Scenix IP2K - 7-bit sp or dp offset
+     Scenix IP2K - 7-bit sp or dp offset.
  -- : BFD_RELOC_VPE4KMATH_DATA
  -- : BFD_RELOC_VPE4KMATH_INSN
-     Scenix VPE4K coprocessor - data/insn-space addressing
+     Scenix VPE4K coprocessor - data/insn-space addressing.
  -- : BFD_RELOC_VTABLE_INHERIT
  -- : BFD_RELOC_VTABLE_ENTRY
      These two relocations are used by the linker to determine which of
@@ -6079,6 +5593,7 @@ attributes.
  -- : BFD_RELOC_OR1K_SLO13
  -- : BFD_RELOC_OR1K_GOTPC_HI16
  -- : BFD_RELOC_OR1K_GOTPC_LO16
+ -- : BFD_RELOC_OR1K_GOT_AHI16
  -- : BFD_RELOC_OR1K_GOT16
  -- : BFD_RELOC_OR1K_GOT_PG21
  -- : BFD_RELOC_OR1K_GOT_LO13
@@ -6126,11 +5641,6 @@ attributes.
      Sony Xstormy16 Relocations.
  -- : BFD_RELOC_RELC
      Self-describing complex relocations.
- -- : BFD_RELOC_XC16X_PAG
- -- : BFD_RELOC_XC16X_POF
- -- : BFD_RELOC_XC16X_SEG
- -- : BFD_RELOC_XC16X_SOF
-     Infineon Relocations.
  -- : BFD_RELOC_VAX_GLOB_DAT
  -- : BFD_RELOC_VAX_JMP_SLOT
  -- : BFD_RELOC_VAX_RELATIVE
@@ -6169,7 +5679,9 @@ attributes.
  -- : BFD_RELOC_MSP430_ABS_HI16
  -- : BFD_RELOC_MSP430_PREL31
  -- : BFD_RELOC_MSP430_SYM_DIFF
-     msp430 specific relocation codes
+ -- : BFD_RELOC_MSP430_SET_ULEB128
+ -- : BFD_RELOC_MSP430_SUB_ULEB128
+     msp430 specific relocation codes.
  -- : BFD_RELOC_NIOS2_S16
  -- : BFD_RELOC_NIOS2_U16
  -- : BFD_RELOC_NIOS2_CALL26
@@ -6270,6 +5782,8 @@ attributes.
  -- : BFD_RELOC_XTENSA_DIFF8
  -- : BFD_RELOC_XTENSA_DIFF16
  -- : BFD_RELOC_XTENSA_DIFF32
+     Xtensa relocations for backward compatibility.  These have been
+     replaced by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF.
      Xtensa relocations to mark the difference of two local symbols.
      These are only needed to support linker relaxation and can be
      ignored when not relaxing.  The field is set to the value of the
@@ -6333,8 +5847,37 @@ attributes.
  -- : BFD_RELOC_XTENSA_TLS_ARG
  -- : BFD_RELOC_XTENSA_TLS_CALL
      Xtensa TLS relocations.
+ -- : BFD_RELOC_XTENSA_PDIFF8
+ -- : BFD_RELOC_XTENSA_PDIFF16
+ -- : BFD_RELOC_XTENSA_PDIFF32
+ -- : BFD_RELOC_XTENSA_NDIFF8
+ -- : BFD_RELOC_XTENSA_NDIFF16
+ -- : BFD_RELOC_XTENSA_NDIFF32
+     Xtensa relocations to mark the difference of two local symbols.
+     These are only needed to support linker relaxation and can be
+     ignored when not relaxing.  The field is set to the value of the
+     difference assuming no relaxation.  The relocation encodes the
+     position of the subtracted symbol so the linker can determine
+     whether to adjust the field value.  PDIFF relocations are used for
+     positive differences, NDIFF relocations are used for negative
+     differences.  The difference value is treated as unsigned with
+     these relocation types, giving full 8/16 value ranges.
  -- : BFD_RELOC_Z80_DISP8
      8 bit signed offset in (ix+d) or (iy+d).
+ -- : BFD_RELOC_Z80_BYTE0
+     First 8 bits of multibyte (32, 24 or 16 bit) value.
+ -- : BFD_RELOC_Z80_BYTE1
+     Second 8 bits of multibyte (32, 24 or 16 bit) value.
+ -- : BFD_RELOC_Z80_BYTE2
+     Third 8 bits of multibyte (32 or 24 bit) value.
+ -- : BFD_RELOC_Z80_BYTE3
+     Fourth 8 bits of multibyte (32 bit) value.
+ -- : BFD_RELOC_Z80_WORD0
+     Lowest 16 bits of multibyte (32 or 24 bit) value.
+ -- : BFD_RELOC_Z80_WORD1
+     Highest 16 bits of multibyte (32 or 24 bit) value.
+ -- : BFD_RELOC_Z80_16_BE
+     Like BFD_RELOC_16 but big-endian.
  -- : BFD_RELOC_Z8K_DISP7
      DJNZ offset.
  -- : BFD_RELOC_Z8K_CALLR
@@ -6389,46 +5932,51 @@ attributes.
      Address of a GOT entry.
  -- : BFD_RELOC_MICROBLAZE_32_LO
      This is a 32 bit reloc for the microblaze that stores the low 16
-     bits of a value
+     bits of a value.
  -- : BFD_RELOC_MICROBLAZE_32_LO_PCREL
      This is a 32 bit pc-relative reloc for the microblaze that stores
-     the low 16 bits of a value
+     the low 16 bits of a value.
  -- : BFD_RELOC_MICROBLAZE_32_ROSDA
      This is a 32 bit reloc for the microblaze that stores a value
-     relative to the read-only small data area anchor
+     relative to the read-only small data area anchor.
  -- : BFD_RELOC_MICROBLAZE_32_RWSDA
      This is a 32 bit reloc for the microblaze that stores a value
-     relative to the read-write small data area anchor
+     relative to the read-write small data area anchor.
  -- : BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM
      This is a 32 bit reloc for the microblaze to handle expressions of
-     the form "Symbol Op Symbol"
+     the form "Symbol Op Symbol".
+ -- : BFD_RELOC_MICROBLAZE_32_NONE
+     This is a 32 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  No relocation is done here -
+     only used for relaxing.
  -- : BFD_RELOC_MICROBLAZE_64_NONE
      This is a 64 bit reloc that stores the 32 bit pc relative value in
      two words (with an imm instruction).  No relocation is done here -
-     only used for relaxing
+     only used for relaxing.
  -- : BFD_RELOC_MICROBLAZE_64_GOTPC
      This is a 64 bit reloc that stores the 32 bit pc relative value in
      two words (with an imm instruction).  The relocation is PC-relative
-     GOT offset
+     GOT offset.
  -- : BFD_RELOC_MICROBLAZE_64_GOT
      This is a 64 bit reloc that stores the 32 bit pc relative value in
-     two words (with an imm instruction).  The relocation is GOT offset
+     two words (with an imm instruction).  The relocation is GOT offset.
  -- : BFD_RELOC_MICROBLAZE_64_PLT
      This is a 64 bit reloc that stores the 32 bit pc relative value in
      two words (with an imm instruction).  The relocation is PC-relative
-     offset into PLT
+     offset into PLT.
  -- : BFD_RELOC_MICROBLAZE_64_GOTOFF
      This is a 64 bit reloc that stores the 32 bit GOT relative value in
      two words (with an imm instruction).  The relocation is relative
-     offset from _GLOBAL_OFFSET_TABLE_
+     offset from _GLOBAL_OFFSET_TABLE_.
  -- : BFD_RELOC_MICROBLAZE_32_GOTOFF
      This is a 32 bit reloc that stores the 32 bit GOT relative value in
      a word.  The relocation is relative offset from
+     _GLOBAL_OFFSET_TABLE_.
  -- : BFD_RELOC_MICROBLAZE_COPY
      This is used to tell the dynamic linker to copy the value out of
      the dynamic object into the runtime process image.
  -- : BFD_RELOC_MICROBLAZE_64_TLS
-     Unused Reloc
+     Unused Reloc.
  -- : BFD_RELOC_MICROBLAZE_64_TLSGD
      This is a 64 bit reloc that stores the 32 bit GOT relative value of
      the GOT TLS GD info entry in two words (with an imm instruction).
@@ -6443,7 +5991,7 @@ attributes.
      This is a 32 bit reloc that stores TLS offset to GOT(n+1).
  -- : BFD_RELOC_MICROBLAZE_64_TLSDTPREL
      This is a 32 bit reloc for storing TLS offset to two words (uses
-     imm instruction)
+     imm instruction).
  -- : BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL
      This is a 64 bit reloc that stores 32-bit thread pointer relative
      offset to two words (uses imm instruction).
@@ -6458,6 +6006,102 @@ attributes.
      This is a 64 bit reloc that stores the 32 bit offset value in two
      words (with an imm instruction).  The relocation is relative offset
      from start of TEXT.
+ -- : BFD_RELOC_KVX_RELOC_START
+     KVX pseudo relocation code to mark the start of the KVX relocation
+     enumerators.  N.B. the order of the enumerators is important as
+     several tables in the KVX bfd backend are indexed by these
+     enumerators; make sure they are all synced.
+ -- : BFD_RELOC_KVX_NONE
+     KVX null relocation code.
+ -- : BFD_RELOC_KVX_16
+ -- : BFD_RELOC_KVX_32
+ -- : BFD_RELOC_KVX_64
+ -- : BFD_RELOC_KVX_S16_PCREL
+ -- : BFD_RELOC_KVX_PCREL17
+ -- : BFD_RELOC_KVX_PCREL27
+ -- : BFD_RELOC_KVX_32_PCREL
+ -- : BFD_RELOC_KVX_S37_PCREL_LO10
+ -- : BFD_RELOC_KVX_S37_PCREL_UP27
+ -- : BFD_RELOC_KVX_S43_PCREL_LO10
+ -- : BFD_RELOC_KVX_S43_PCREL_UP27
+ -- : BFD_RELOC_KVX_S43_PCREL_EX6
+ -- : BFD_RELOC_KVX_S64_PCREL_LO10
+ -- : BFD_RELOC_KVX_S64_PCREL_UP27
+ -- : BFD_RELOC_KVX_S64_PCREL_EX27
+ -- : BFD_RELOC_KVX_64_PCREL
+ -- : BFD_RELOC_KVX_S16
+ -- : BFD_RELOC_KVX_S32_LO5
+ -- : BFD_RELOC_KVX_S32_UP27
+ -- : BFD_RELOC_KVX_S37_LO10
+ -- : BFD_RELOC_KVX_S37_UP27
+ -- : BFD_RELOC_KVX_S37_GOTOFF_LO10
+ -- : BFD_RELOC_KVX_S37_GOTOFF_UP27
+ -- : BFD_RELOC_KVX_S43_GOTOFF_LO10
+ -- : BFD_RELOC_KVX_S43_GOTOFF_UP27
+ -- : BFD_RELOC_KVX_S43_GOTOFF_EX6
+ -- : BFD_RELOC_KVX_32_GOTOFF
+ -- : BFD_RELOC_KVX_64_GOTOFF
+ -- : BFD_RELOC_KVX_32_GOT
+ -- : BFD_RELOC_KVX_S37_GOT_LO10
+ -- : BFD_RELOC_KVX_S37_GOT_UP27
+ -- : BFD_RELOC_KVX_S43_GOT_LO10
+ -- : BFD_RELOC_KVX_S43_GOT_UP27
+ -- : BFD_RELOC_KVX_S43_GOT_EX6
+ -- : BFD_RELOC_KVX_64_GOT
+ -- : BFD_RELOC_KVX_GLOB_DAT
+ -- : BFD_RELOC_KVX_COPY
+ -- : BFD_RELOC_KVX_JMP_SLOT
+ -- : BFD_RELOC_KVX_RELATIVE
+ -- : BFD_RELOC_KVX_S43_LO10
+ -- : BFD_RELOC_KVX_S43_UP27
+ -- : BFD_RELOC_KVX_S43_EX6
+ -- : BFD_RELOC_KVX_S64_LO10
+ -- : BFD_RELOC_KVX_S64_UP27
+ -- : BFD_RELOC_KVX_S64_EX27
+ -- : BFD_RELOC_KVX_S37_GOTADDR_LO10
+ -- : BFD_RELOC_KVX_S37_GOTADDR_UP27
+ -- : BFD_RELOC_KVX_S43_GOTADDR_LO10
+ -- : BFD_RELOC_KVX_S43_GOTADDR_UP27
+ -- : BFD_RELOC_KVX_S43_GOTADDR_EX6
+ -- : BFD_RELOC_KVX_S64_GOTADDR_LO10
+ -- : BFD_RELOC_KVX_S64_GOTADDR_UP27
+ -- : BFD_RELOC_KVX_S64_GOTADDR_EX27
+ -- : BFD_RELOC_KVX_64_DTPMOD
+ -- : BFD_RELOC_KVX_64_DTPOFF
+ -- : BFD_RELOC_KVX_S37_TLS_DTPOFF_LO10
+ -- : BFD_RELOC_KVX_S37_TLS_DTPOFF_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_DTPOFF_LO10
+ -- : BFD_RELOC_KVX_S43_TLS_DTPOFF_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_DTPOFF_EX6
+ -- : BFD_RELOC_KVX_S37_TLS_GD_LO10
+ -- : BFD_RELOC_KVX_S37_TLS_GD_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_GD_LO10
+ -- : BFD_RELOC_KVX_S43_TLS_GD_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_GD_EX6
+ -- : BFD_RELOC_KVX_S37_TLS_LD_LO10
+ -- : BFD_RELOC_KVX_S37_TLS_LD_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_LD_LO10
+ -- : BFD_RELOC_KVX_S43_TLS_LD_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_LD_EX6
+ -- : BFD_RELOC_KVX_64_TPOFF
+ -- : BFD_RELOC_KVX_S37_TLS_IE_LO10
+ -- : BFD_RELOC_KVX_S37_TLS_IE_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_IE_LO10
+ -- : BFD_RELOC_KVX_S43_TLS_IE_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_IE_EX6
+ -- : BFD_RELOC_KVX_S37_TLS_LE_LO10
+ -- : BFD_RELOC_KVX_S37_TLS_LE_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_LE_LO10
+ -- : BFD_RELOC_KVX_S43_TLS_LE_UP27
+ -- : BFD_RELOC_KVX_S43_TLS_LE_EX6
+ -- : BFD_RELOC_KVX_8
+     KVX Relocations.
+ -- : BFD_RELOC_KVX_RELOC_END
+     KVX pseudo relocation code to mark the end of the KVX relocation
+     enumerators that have direct mapping to ELF reloc codes.  There are
+     a few more enumerators after this one; those are mainly used by the
+     KVX assembler for the internal fixup or to select one of the above
+     enumerators.
  -- : BFD_RELOC_AARCH64_RELOC_START
      AArch64 pseudo relocation code to mark the start of the AArch64
      relocation enumerators.  N.B. the order of the enumerators is
@@ -6596,8 +6240,8 @@ attributes.
      overflow checking.
  -- : BFD_RELOC_AARCH64_ADR_GOT_PAGE
      Get to the page base of the global offset table entry for a symbol
-     as part of an ADRP instruction using a 21 bit PC relative
-     value.Used in conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.
+     as part of an ADRP instruction using a 21 bit PC relative value.
+     Used in conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.
  -- : BFD_RELOC_AARCH64_LD64_GOT_LO12_NC
      Unsigned 12 bit byte offset for 64 bit load/store from the page of
      the GOT entry for this symbol.  Used in conjunction with
@@ -6627,10 +6271,10 @@ attributes.
      PC relative value.  Used in conjunction with
      BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC.
  -- : BFD_RELOC_AARCH64_TLSGD_ADR_PREL21
-     AArch64 TLS General Dynamic
+     AArch64 TLS General Dynamic.
  -- : BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC
      Unsigned 12 bit byte offset to global offset table entry for a
-     symbols tls_index structure.  Used in conjunction with
+     symbol's tls_index structure.  Used in conjunction with
      BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21.
  -- : BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC
      AArch64 TLS General Dynamic relocation.
@@ -6657,7 +6301,7 @@ attributes.
      BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12.
  -- : BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC
      Unsigned 12 bit byte offset to global offset table entry for a
-     symbols tls_index structure.  Used in conjunction with
+     symbol's tls_index structure.  Used in conjunction with
      BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.
  -- : BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21
      GOT entry page address for AArch64 TLS Local Dynamic, used with
@@ -6669,34 +6313,36 @@ attributes.
      bit[11:1] of byte offset to module TLS base address, encoded in
      ldst instructions.
  -- : BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no
+     Similar to BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no
      overflow check.
  -- : BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12
      bit[11:2] of byte offset to module TLS base address, encoded in
      ldst instructions.
  -- : BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no
+     Similar to BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no
      overflow check.
  -- : BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12
      bit[11:3] of byte offset to module TLS base address, encoded in
      ldst instructions.
  -- : BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no
+     Similar to BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no
      overflow check.
  -- : BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12
      bit[11:0] of byte offset to module TLS base address, encoded in
      ldst instructions.
  -- : BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no
+     Similar to BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no
      overflow check.
  -- : BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0
      bit[15:0] of byte offset to module TLS base address.
  -- : BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC
-     No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0
+     No overflow check version of
+     BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0.
  -- : BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1
      bit[31:16] of byte offset to module TLS base address.
  -- : BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC
-     No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1
+     No overflow check version of
+     BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1.
  -- : BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2
      bit[47:32] of byte offset to module TLS base address.
  -- : BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2
@@ -6719,64 +6365,48 @@ attributes.
      bit[11:1] of byte offset to module TLS base address, encoded in
      ldst instructions.
  -- : BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no
+     Similar to BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no
      overflow check.
  -- : BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12
      bit[11:2] of byte offset to module TLS base address, encoded in
      ldst instructions.
  -- : BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no
+     Similar to BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no
      overflow check.
  -- : BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12
      bit[11:3] of byte offset to module TLS base address, encoded in
      ldst instructions.
  -- : BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no
+     Similar to BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no
      overflow check.
  -- : BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12
      bit[11:0] of byte offset to module TLS base address, encoded in
      ldst instructions.
  -- : BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no
+     Similar to BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no
      overflow check.
  -- : BFD_RELOC_AARCH64_TLSDESC_LD_PREL19
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_LD64_LO12
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_ADD_LO12
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_OFF_G1
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_LDR
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_ADD
-     AArch64 TLS DESC relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC_CALL
-     AArch64 TLS DESC relocation.
+     AArch64 TLS DESC relocations.
  -- : BFD_RELOC_AARCH64_COPY
-     AArch64 TLS relocation.
  -- : BFD_RELOC_AARCH64_GLOB_DAT
-     AArch64 TLS relocation.
  -- : BFD_RELOC_AARCH64_JUMP_SLOT
-     AArch64 TLS relocation.
  -- : BFD_RELOC_AARCH64_RELATIVE
-     AArch64 TLS relocation.
+     AArch64 DSO relocations.
  -- : BFD_RELOC_AARCH64_TLS_DTPMOD
-     AArch64 TLS relocation.
  -- : BFD_RELOC_AARCH64_TLS_DTPREL
-     AArch64 TLS relocation.
  -- : BFD_RELOC_AARCH64_TLS_TPREL
-     AArch64 TLS relocation.
  -- : BFD_RELOC_AARCH64_TLSDESC
-     AArch64 TLS relocation.
+     AArch64 TLS relocations.
  -- : BFD_RELOC_AARCH64_IRELATIVE
      AArch64 support for STT_GNU_IFUNC.
  -- : BFD_RELOC_AARCH64_RELOC_END
@@ -6797,14 +6427,14 @@ attributes.
      be used internally by the AArch64 assembler and not (currently)
      written to any object files.
  -- : BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no
+     Similar to BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no
      overflow check.
  -- : BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12
      AArch64 pseudo relocation code for TLS local exec mode.  It's to be
      used internally by the AArch64 assembler and not (currently)
      written to any object files.
  -- : BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC
-     Similar as BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12, but no overflow
+     Similar to BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12, but no overflow
      check.
  -- : BFD_RELOC_AARCH64_LD_GOT_LO12_NC
      AArch64 pseudo relocation code to be used internally by the AArch64
@@ -7006,24 +6636,23 @@ attributes.
  -- : BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD
      Tilera TILE-Gx Relocations.
  -- : BFD_RELOC_BPF_64
- -- : BFD_RELOC_BPF_32
- -- : BFD_RELOC_BPF_16
- -- : BFD_RELOC_BPF_DISP16
  -- : BFD_RELOC_BPF_DISP32
+ -- : BFD_RELOC_BPF_DISPCALL32
+ -- : BFD_RELOC_BPF_DISP16
      Linux eBPF relocations.
  -- : BFD_RELOC_EPIPHANY_SIMM8
-     Adapteva EPIPHANY - 8 bit signed pc-relative displacement
+     Adapteva EPIPHANY - 8 bit signed pc-relative displacement.
  -- : BFD_RELOC_EPIPHANY_SIMM24
-     Adapteva EPIPHANY - 24 bit signed pc-relative displacement
+     Adapteva EPIPHANY - 24 bit signed pc-relative displacement.
  -- : BFD_RELOC_EPIPHANY_HIGH
-     Adapteva EPIPHANY - 16 most-significant bits of absolute address
+     Adapteva EPIPHANY - 16 most-significant bits of absolute address.
  -- : BFD_RELOC_EPIPHANY_LOW
-     Adapteva EPIPHANY - 16 least-significant bits of absolute address
+     Adapteva EPIPHANY - 16 least-significant bits of absolute address.
  -- : BFD_RELOC_EPIPHANY_SIMM11
-     Adapteva EPIPHANY - 11 bit signed number - add/sub immediate
+     Adapteva EPIPHANY - 11 bit signed number - add/sub immediate.
  -- : BFD_RELOC_EPIPHANY_IMM11
      Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st
-     displacement)
+     displacement).
  -- : BFD_RELOC_EPIPHANY_IMM8
      Adapteva EPIPHANY - 8 bit immediate for 16 bit mov instruction.
  -- : BFD_RELOC_VISIUM_HI16
@@ -7113,122 +6742,201 @@ attributes.
      C-SKY relocations.
  -- : BFD_RELOC_S12Z_OPR
      S12Z relocations.
-
+ -- : BFD_RELOC_LARCH_TLS_DTPMOD32
+ -- : BFD_RELOC_LARCH_TLS_DTPREL32
+ -- : BFD_RELOC_LARCH_TLS_DTPMOD64
+ -- : BFD_RELOC_LARCH_TLS_DTPREL64
+ -- : BFD_RELOC_LARCH_TLS_TPREL32
+ -- : BFD_RELOC_LARCH_TLS_TPREL64
+ -- : BFD_RELOC_LARCH_TLS_DESC32
+ -- : BFD_RELOC_LARCH_TLS_DESC64
+ -- : BFD_RELOC_LARCH_MARK_LA
+ -- : BFD_RELOC_LARCH_MARK_PCREL
+ -- : BFD_RELOC_LARCH_SOP_PUSH_PCREL
+ -- : BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE
+ -- : BFD_RELOC_LARCH_SOP_PUSH_DUP
+ -- : BFD_RELOC_LARCH_SOP_PUSH_GPREL
+ -- : BFD_RELOC_LARCH_SOP_PUSH_TLS_TPREL
+ -- : BFD_RELOC_LARCH_SOP_PUSH_TLS_GOT
+ -- : BFD_RELOC_LARCH_SOP_PUSH_TLS_GD
+ -- : BFD_RELOC_LARCH_SOP_PUSH_PLT_PCREL
+ -- : BFD_RELOC_LARCH_SOP_ASSERT
+ -- : BFD_RELOC_LARCH_SOP_NOT
+ -- : BFD_RELOC_LARCH_SOP_SUB
+ -- : BFD_RELOC_LARCH_SOP_SL
+ -- : BFD_RELOC_LARCH_SOP_SR
+ -- : BFD_RELOC_LARCH_SOP_ADD
+ -- : BFD_RELOC_LARCH_SOP_AND
+ -- : BFD_RELOC_LARCH_SOP_IF_ELSE
+ -- : BFD_RELOC_LARCH_SOP_POP_32_S_10_5
+ -- : BFD_RELOC_LARCH_SOP_POP_32_U_10_12
+ -- : BFD_RELOC_LARCH_SOP_POP_32_S_10_12
+ -- : BFD_RELOC_LARCH_SOP_POP_32_S_10_16
+ -- : BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2
+ -- : BFD_RELOC_LARCH_SOP_POP_32_S_5_20
+ -- : BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2
+ -- : BFD_RELOC_LARCH_SOP_POP_32_S_0_10_10_16_S2
+ -- : BFD_RELOC_LARCH_SOP_POP_32_U
+ -- : BFD_RELOC_LARCH_ADD8
+ -- : BFD_RELOC_LARCH_ADD16
+ -- : BFD_RELOC_LARCH_ADD24
+ -- : BFD_RELOC_LARCH_ADD32
+ -- : BFD_RELOC_LARCH_ADD64
+ -- : BFD_RELOC_LARCH_SUB8
+ -- : BFD_RELOC_LARCH_SUB16
+ -- : BFD_RELOC_LARCH_SUB24
+ -- : BFD_RELOC_LARCH_SUB32
+ -- : BFD_RELOC_LARCH_SUB64
+ -- : BFD_RELOC_LARCH_B16
+ -- : BFD_RELOC_LARCH_B21
+ -- : BFD_RELOC_LARCH_B26
+ -- : BFD_RELOC_LARCH_ABS_HI20
+ -- : BFD_RELOC_LARCH_ABS_LO12
+ -- : BFD_RELOC_LARCH_ABS64_LO20
+ -- : BFD_RELOC_LARCH_ABS64_HI12
+ -- : BFD_RELOC_LARCH_PCALA_HI20
+ -- : BFD_RELOC_LARCH_PCALA_LO12
+ -- : BFD_RELOC_LARCH_PCALA64_LO20
+ -- : BFD_RELOC_LARCH_PCALA64_HI12
+ -- : BFD_RELOC_LARCH_GOT_PC_HI20
+ -- : BFD_RELOC_LARCH_GOT_PC_LO12
+ -- : BFD_RELOC_LARCH_GOT64_PC_LO20
+ -- : BFD_RELOC_LARCH_GOT64_PC_HI12
+ -- : BFD_RELOC_LARCH_GOT_HI20
+ -- : BFD_RELOC_LARCH_GOT_LO12
+ -- : BFD_RELOC_LARCH_GOT64_LO20
+ -- : BFD_RELOC_LARCH_GOT64_HI12
+ -- : BFD_RELOC_LARCH_TLS_LE_HI20
+ -- : BFD_RELOC_LARCH_TLS_LE_LO12
+ -- : BFD_RELOC_LARCH_TLS_LE64_LO20
+ -- : BFD_RELOC_LARCH_TLS_LE64_HI12
+ -- : BFD_RELOC_LARCH_TLS_IE_PC_HI20
+ -- : BFD_RELOC_LARCH_TLS_IE_PC_LO12
+ -- : BFD_RELOC_LARCH_TLS_IE64_PC_LO20
+ -- : BFD_RELOC_LARCH_TLS_IE64_PC_HI12
+ -- : BFD_RELOC_LARCH_TLS_IE_HI20
+ -- : BFD_RELOC_LARCH_TLS_IE_LO12
+ -- : BFD_RELOC_LARCH_TLS_IE64_LO20
+ -- : BFD_RELOC_LARCH_TLS_IE64_HI12
+ -- : BFD_RELOC_LARCH_TLS_LD_PC_HI20
+ -- : BFD_RELOC_LARCH_TLS_LD_HI20
+ -- : BFD_RELOC_LARCH_TLS_GD_PC_HI20
+ -- : BFD_RELOC_LARCH_TLS_GD_HI20
+ -- : BFD_RELOC_LARCH_32_PCREL
+ -- : BFD_RELOC_LARCH_RELAX
+ -- : BFD_RELOC_LARCH_DELETE
+ -- : BFD_RELOC_LARCH_ALIGN
+ -- : BFD_RELOC_LARCH_PCREL20_S2
+ -- : BFD_RELOC_LARCH_CFA
+ -- : BFD_RELOC_LARCH_ADD6
+ -- : BFD_RELOC_LARCH_SUB6
+ -- : BFD_RELOC_LARCH_ADD_ULEB128
+ -- : BFD_RELOC_LARCH_SUB_ULEB128
+ -- : BFD_RELOC_LARCH_64_PCREL
+ -- : BFD_RELOC_LARCH_CALL36
+ -- : BFD_RELOC_LARCH_TLS_DESC_PC_HI20
+ -- : BFD_RELOC_LARCH_TLS_DESC_PC_LO12
+ -- : BFD_RELOC_LARCH_TLS_DESC64_PC_LO20
+ -- : BFD_RELOC_LARCH_TLS_DESC64_PC_HI12
+ -- : BFD_RELOC_LARCH_TLS_DESC_HI20
+ -- : BFD_RELOC_LARCH_TLS_DESC_LO12
+ -- : BFD_RELOC_LARCH_TLS_DESC64_LO20
+ -- : BFD_RELOC_LARCH_TLS_DESC64_HI12
+ -- : BFD_RELOC_LARCH_TLS_DESC_LD
+ -- : BFD_RELOC_LARCH_TLS_DESC_CALL
+ -- : BFD_RELOC_LARCH_TLS_LE_HI20_R
+ -- : BFD_RELOC_LARCH_TLS_LE_ADD_R
+ -- : BFD_RELOC_LARCH_TLS_LE_LO12_R
+ -- : BFD_RELOC_LARCH_TLS_LD_PCREL20_S2
+ -- : BFD_RELOC_LARCH_TLS_GD_PCREL20_S2
+ -- : BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2
+     LARCH relocations.
 
      typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
 
+
 2.10.2.2 'bfd_reloc_type_lookup'
 ................................
 
-*Synopsis*
-     reloc_howto_type *bfd_reloc_type_lookup
-        (bfd *abfd, bfd_reloc_code_real_type code);
-     reloc_howto_type *bfd_reloc_name_lookup
-        (bfd *abfd, const char *reloc_name);
-   *Description*
-Return a pointer to a howto structure which, when invoked, will perform
-the relocation CODE on data from the architecture noted.
+ -- Function: reloc_howto_type *bfd_reloc_type_lookup (bfd *abfd,
+          bfd_reloc_code_real_type code); reloc_howto_type
+          *bfd_reloc_name_lookup (bfd *abfd, const char *reloc_name);
+     Return a pointer to a howto structure which, when invoked, will
+     perform the relocation CODE on data from the architecture noted.
 
 2.10.2.3 'bfd_default_reloc_type_lookup'
 ........................................
 
-*Synopsis*
-     reloc_howto_type *bfd_default_reloc_type_lookup
-        (bfd *abfd, bfd_reloc_code_real_type  code);
-   *Description*
-Provides a default relocation lookup routine for any architecture.
+ -- Function: reloc_howto_type *bfd_default_reloc_type_lookup (bfd
+          *abfd, bfd_reloc_code_real_type code);
+     Provides a default relocation lookup routine for any architecture.
 
 2.10.2.4 'bfd_get_reloc_code_name'
 ..................................
 
-*Synopsis*
-     const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
-   *Description*
-Provides a printable name for the supplied relocation code.  Useful
-mainly for printing error messages.
+ -- Function: const char *bfd_get_reloc_code_name
+          (bfd_reloc_code_real_type code);
+     Provides a printable name for the supplied relocation code.  Useful
+     mainly for printing error messages.
 
 2.10.2.5 'bfd_generic_relax_section'
 ....................................
 
-*Synopsis*
-     bfd_boolean bfd_generic_relax_section
-        (bfd *abfd,
-         asection *section,
-         struct bfd_link_info *,
-         bfd_boolean *);
-   *Description*
-Provides default handling for relaxing for back ends which don't do
-relaxing.
+ -- Function: bool bfd_generic_relax_section (bfd *abfd, asection
+          *section, struct bfd_link_info *, bool *);
+     Provides default handling for relaxing for back ends which don't do
+     relaxing.
 
 2.10.2.6 'bfd_generic_gc_sections'
 ..................................
 
-*Synopsis*
-     bfd_boolean bfd_generic_gc_sections
-        (bfd *, struct bfd_link_info *);
-   *Description*
-Provides default handling for relaxing for back ends which don't do
-section gc - i.e., does nothing.
+ -- Function: bool bfd_generic_gc_sections (bfd *, struct bfd_link_info
+          *);
+     Provides default handling for relaxing for back ends which don't do
+     section gc - i.e., does nothing.
 
 2.10.2.7 'bfd_generic_lookup_section_flags'
 ...........................................
 
-*Synopsis*
-     bfd_boolean bfd_generic_lookup_section_flags
-        (struct bfd_link_info *, struct flag_info *, asection *);
-   *Description*
-Provides default handling for section flags lookup - i.e., does nothing.
-Returns FALSE if the section should be omitted, otherwise TRUE.
+ -- Function: bool bfd_generic_lookup_section_flags (struct
+          bfd_link_info *, struct flag_info *, asection *);
+     Provides default handling for section flags lookup - i.e., does
+     nothing.  Returns FALSE if the section should be omitted, otherwise
+     TRUE.
 
 2.10.2.8 'bfd_generic_merge_sections'
 .....................................
 
-*Synopsis*
-     bfd_boolean bfd_generic_merge_sections
-        (bfd *, struct bfd_link_info *);
-   *Description*
-Provides default handling for SEC_MERGE section merging for back ends
-which don't have SEC_MERGE support - i.e., does nothing.
+ -- Function: bool bfd_generic_merge_sections (bfd *, struct
+          bfd_link_info *);
+     Provides default handling for SEC_MERGE section merging for back
+     ends which don't have SEC_MERGE support - i.e., does nothing.
 
 2.10.2.9 'bfd_generic_get_relocated_section_contents'
 .....................................................
 
-*Synopsis*
-     bfd_byte *bfd_generic_get_relocated_section_contents
-        (bfd *abfd,
-         struct bfd_link_info *link_info,
-         struct bfd_link_order *link_order,
-         bfd_byte *data,
-         bfd_boolean relocatable,
-         asymbol **symbols);
-   *Description*
-Provides default handling of relocation effort for back ends which can't
-be bothered to do it efficiently.
+ -- Function: bfd_byte *bfd_generic_get_relocated_section_contents (bfd
+          *abfd, struct bfd_link_info *link_info, struct bfd_link_order
+          *link_order, bfd_byte *data, bool relocatable, asymbol
+          **symbols);
+     Provides default handling of relocation effort for back ends which
+     can't be bothered to do it efficiently.
 
 2.10.2.10 '_bfd_generic_set_reloc'
 ..................................
 
-*Synopsis*
-     void _bfd_generic_set_reloc
-        (bfd *abfd,
-         sec_ptr section,
-         arelent **relptr,
-         unsigned int count);
-   *Description*
-Installs a new set of internal relocations in SECTION.
+ -- Function: void _bfd_generic_set_reloc (bfd *abfd, sec_ptr section,
+          arelent **relptr, unsigned int count);
+     Installs a new set of internal relocations in SECTION.
 
 2.10.2.11 '_bfd_unrecognized_reloc'
 ...................................
 
-*Synopsis*
-     bfd_boolean _bfd_unrecognized_reloc
-        (bfd * abfd,
-         sec_ptr section,
-         unsigned int r_type);
-   *Description*
-Reports an unrecognized reloc.  Written as a function in order to reduce
-code duplication.  Returns FALSE so that it can be called from a return
-statement.
+ -- Function: bool _bfd_unrecognized_reloc (bfd * abfd, sec_ptr section,
+          unsigned int r_type);
+     Reports an unrecognized reloc.  Written as a function in order to
+     reduce code duplication.  Returns FALSE so that it can be called
+     from a return statement.
 
 
 File: bfd.info,  Node: Core Files,  Next: Targets,  Prev: Relocations,  Up: BFD front end
@@ -7239,62 +6947,52 @@ File: bfd.info,  Node: Core Files,  Next
 2.11.1 Core file functions
 --------------------------
 
-*Description*
 These are functions pertaining to core files.
 
 2.11.1.1 'bfd_core_file_failing_command'
 ........................................
 
-*Synopsis*
-     const char *bfd_core_file_failing_command (bfd *abfd);
-   *Description*
-Return a read-only string explaining which program was running when it
-failed and produced the core file ABFD.
+ -- Function: const char *bfd_core_file_failing_command (bfd *abfd);
+     Return a read-only string explaining which program was running when
+     it failed and produced the core file ABFD.
 
 2.11.1.2 'bfd_core_file_failing_signal'
 .......................................
 
-*Synopsis*
-     int bfd_core_file_failing_signal (bfd *abfd);
-   *Description*
-Returns the signal number which caused the core dump which generated the
-file the BFD ABFD is attached to.
+ -- Function: int bfd_core_file_failing_signal (bfd *abfd);
+     Returns the signal number which caused the core dump which
+     generated the file the BFD ABFD is attached to.
 
 2.11.1.3 'bfd_core_file_pid'
 ............................
 
-*Synopsis*
-     int bfd_core_file_pid (bfd *abfd);
-   *Description*
-Returns the PID of the process the core dump the BFD ABFD is attached to
-was generated from.
+ -- Function: int bfd_core_file_pid (bfd *abfd);
+     Returns the PID of the process the core dump the BFD ABFD is
+     attached to was generated from.
 
 2.11.1.4 'core_file_matches_executable_p'
 .........................................
 
-*Synopsis*
-     bfd_boolean core_file_matches_executable_p
-        (bfd *core_bfd, bfd *exec_bfd);
-   *Description*
-Return 'TRUE' if the core file attached to CORE_BFD was generated by a
-run of the executable file attached to EXEC_BFD, 'FALSE' otherwise.
+ -- Function: bool core_file_matches_executable_p (bfd *core_bfd, bfd
+          *exec_bfd);
+     Return 'TRUE' if the core file attached to CORE_BFD was generated
+     by a run of the executable file attached to EXEC_BFD, 'FALSE'
+     otherwise.
 
 2.11.1.5 'generic_core_file_matches_executable_p'
 .................................................
 
-*Synopsis*
-     bfd_boolean generic_core_file_matches_executable_p
-        (bfd *core_bfd, bfd *exec_bfd);
-   *Description*
-Return TRUE if the core file attached to CORE_BFD was generated by a run
-of the executable file attached to EXEC_BFD.  The match is based on
-executable basenames only.
-
-   Note: When not able to determine the core file failing command or the
-executable name, we still return TRUE even though we're not sure that
-core file and executable match.  This is to avoid generating a false
-warning in situations where we really don't know whether they match or
-not.
+ -- Function: bool generic_core_file_matches_executable_p (bfd
+          *core_bfd, bfd *exec_bfd);
+     Return TRUE if the core file attached to CORE_BFD was generated by
+     a run of the executable file attached to EXEC_BFD.  The match is
+     based on executable basenames only.
+
+     Note: When not able to determine the core file failing command or
+     the executable name, we still return TRUE even though we're not
+     sure that core file and executable match.  This is to avoid
+     generating a false warning in situations where we really don't know
+     whether they match or not.
 
 
 File: bfd.info,  Node: Targets,  Next: Architectures,  Prev: Core Files,  Up: BFD front end
@@ -7302,7 +7000,6 @@ File: bfd.info,  Node: Targets,  Next: A
 2.12 Targets
 ============
 
-*Description*
 Each port of BFD to a different machine requires the creation of a
 target back end.  All the back end provides to the root part of BFD is a
 structure containing pointers to functions which perform certain low
@@ -7351,7 +7048,6 @@ File: bfd.info,  Node: bfd_target,  Prev
 2.12.1 bfd_target
 -----------------
 
-*Description*
 This structure contains everything that BFD knows about a target.  It
 includes things like its byte order, name, and which routines to call to
 do various operations.
@@ -7388,6 +7084,11 @@ wants to fix this and not break the abov
         (bfd_assert (__FILE__,__LINE__), NULL))
      #endif
 
+     /* Defined to TRUE if unused section symbol should be kept.  */
+     #ifndef TARGET_KEEP_UNUSED_SECTION_SYMBOLS
+     #define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true
+     #endif
+
    This is the structure which defines the type of BFD this is.  The
 'xvec' member of the struct 'bfd' itself points here.  Each module that
 implements access to a different target under BFD, defines one of these.
@@ -7395,39 +7096,6 @@ implements access to a different target
    FIXME, these names should be rationalised with the names of the entry
 points which call them.  Too bad we can't have one macro to define them
 both!
-     enum bfd_flavour
-     {
-       /* N.B. Update bfd_flavour_name if you change this.  */
-       bfd_target_unknown_flavour,
-       bfd_target_aout_flavour,
-       bfd_target_coff_flavour,
-       bfd_target_ecoff_flavour,
-       bfd_target_xcoff_flavour,
-       bfd_target_elf_flavour,
-       bfd_target_tekhex_flavour,
-       bfd_target_srec_flavour,
-       bfd_target_verilog_flavour,
-       bfd_target_ihex_flavour,
-       bfd_target_som_flavour,
-       bfd_target_os9k_flavour,
-       bfd_target_versados_flavour,
-       bfd_target_msdos_flavour,
-       bfd_target_ovax_flavour,
-       bfd_target_evax_flavour,
-       bfd_target_mmo_flavour,
-       bfd_target_mach_o_flavour,
-       bfd_target_pef_flavour,
-       bfd_target_pef_xlib_flavour,
-       bfd_target_sym_flavour
-     };
-
-     enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };
-
-     /* Forward declaration.  */
-     typedef struct bfd_link_info _bfd_link_info;
-
-     /* Forward declaration.  */
-     typedef struct flag_info flag_info;
 
      typedef struct bfd_target
      {
@@ -7466,12 +7134,15 @@ both!
           possible targets when more than one target matches.  */
        unsigned char match_priority;
 
+      /* TRUE if unused section symbols should be kept.  */
+       bool keep_unused_section_symbols;
+
        /* Entries for byte swapping for data. These are different from the
           other entry points, since they don't take a BFD as the first argument.
           Certain other handlers could do the same.  */
-       bfd_uint64_t   (*bfd_getx64) (const void *);
-       bfd_int64_t    (*bfd_getx_signed_64) (const void *);
-       void           (*bfd_putx64) (bfd_uint64_t, void *);
+       uint64_t       (*bfd_getx64) (const void *);
+       int64_t        (*bfd_getx_signed_64) (const void *);
+       void           (*bfd_putx64) (uint64_t, void *);
        bfd_vma        (*bfd_getx32) (const void *);
        bfd_signed_vma (*bfd_getx_signed_32) (const void *);
        void           (*bfd_putx32) (bfd_vma, void *);
@@ -7480,9 +7151,9 @@ both!
        void           (*bfd_putx16) (bfd_vma, void *);
 
        /* Byte swapping for the headers.  */
-       bfd_uint64_t   (*bfd_h_getx64) (const void *);
-       bfd_int64_t    (*bfd_h_getx_signed_64) (const void *);
-       void           (*bfd_h_putx64) (bfd_uint64_t, void *);
+       uint64_t       (*bfd_h_getx64) (const void *);
+       int64_t        (*bfd_h_getx_signed_64) (const void *);
+       void           (*bfd_h_putx64) (uint64_t, void *);
        bfd_vma        (*bfd_h_getx32) (const void *);
        bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
        void           (*bfd_h_putx32) (bfd_vma, void *);
@@ -7493,19 +7164,18 @@ both!
        /* Format dependent routines: these are vectors of entry points
           within the target vector structure, one for each format to check.  */
 
-       /* Check the format of a file being read.  Return a bfd_target * or zero.  */
-       const struct bfd_target *
-                   (*_bfd_check_format[bfd_type_end]) (bfd *);
+       /* Check the format of a file being read.  Return a bfd_cleanup on
+          success or zero on failure.  */
+       bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *);
 
        /* Set the format of a file being written.  */
-       bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
+       bool (*_bfd_set_format[bfd_type_end]) (bfd *);
 
        /* Write cached information into a file being written, at bfd_close.  */
-       bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
+       bool (*_bfd_write_contents[bfd_type_end]) (bfd *);
 
    The general target vector.  These vectors are initialized using the
 BFD_JUMP_TABLE macros.
-
        /* Generic entry points.  */
      #define BFD_JUMP_TABLE_GENERIC(NAME) \
        NAME##_close_and_cleanup, \
@@ -7515,17 +7185,16 @@ BFD_JUMP_TABLE macros.
        NAME##_get_section_contents_in_window
 
        /* Called when the BFD is being closed to do any necessary cleanup.  */
-       bfd_boolean (*_close_and_cleanup) (bfd *);
+       bool (*_close_and_cleanup) (bfd *);
        /* Ask the BFD to free all cached information.  */
-       bfd_boolean (*_bfd_free_cached_info) (bfd *);
+       bool (*_bfd_free_cached_info) (bfd *);
        /* Called when a new section is created.  */
-       bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
+       bool (*_new_section_hook) (bfd *, sec_ptr);
        /* Read the contents of a section.  */
-       bfd_boolean (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr,
-                                                 bfd_size_type);
-       bfd_boolean (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr,
-                                                           bfd_window *, file_ptr,
-                                                           bfd_size_type);
+       bool (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr,
+                                          bfd_size_type);
+       bool (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr, bfd_window *,
+                                                    file_ptr, bfd_size_type);
 
        /* Entry points to copy private data.  */
      #define BFD_JUMP_TABLE_COPY(NAME) \
@@ -7540,34 +7209,32 @@ BFD_JUMP_TABLE macros.
 
        /* Called to copy BFD general private data from one object file
           to another.  */
-       bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
+       bool (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
        /* Called to merge BFD general private data from one object file
           to a common output file when linking.  */
-       bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
+       bool (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
        /* Called to initialize BFD private section data from one object file
           to another.  */
      #define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
             BFD_SEND (obfd, _bfd_init_private_section_data, \
                       (ibfd, isec, obfd, osec, link_info))
-       bfd_boolean (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *,
-                                                      sec_ptr,
-                                                      struct bfd_link_info *);
+       bool (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr,
+                                               struct bfd_link_info *);
        /* Called to copy BFD private section data from one object file
           to another.  */
-       bfd_boolean (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *,
-                                                      sec_ptr);
+       bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr);
        /* Called to copy BFD private symbol data from one symbol
           to another.  */
-       bfd_boolean (*_bfd_copy_private_symbol_data) (bfd *, asymbol *, bfd *,
-                                                     asymbol *);
+       bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
+                                              bfd *, asymbol *);
        /* Called to copy BFD private header data from one object file
           to another.  */
-       bfd_boolean (*_bfd_copy_private_header_data) (bfd *, bfd *);
+       bool (*_bfd_copy_private_header_data) (bfd *, bfd *);
        /* Called to set private backend flags.  */
-       bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
+       bool (*_bfd_set_private_flags) (bfd *, flagword);
 
        /* Called to print private BFD data.  */
-       bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
+       bool (*_bfd_print_private_bfd_data) (bfd *, void *);
 
        /* Core file entry points.  */
      #define BFD_JUMP_TABLE_CORE(NAME) \
@@ -7576,10 +7243,10 @@ BFD_JUMP_TABLE macros.
        NAME##_core_file_matches_executable_p, \
        NAME##_core_file_pid
 
-       char *      (*_core_file_failing_command) (bfd *);
-       int         (*_core_file_failing_signal) (bfd *);
-       bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
-       int         (*_core_file_pid) (bfd *);
+       char *(*_core_file_failing_command) (bfd *);
+       int   (*_core_file_failing_signal) (bfd *);
+       bool  (*_core_file_matches_executable_p) (bfd *, bfd *);
+       int   (*_core_file_pid) (bfd *);
 
        /* Archive entry points.  */
      #define BFD_JUMP_TABLE_ARCHIVE(NAME) \
@@ -7595,22 +7262,21 @@ BFD_JUMP_TABLE macros.
        NAME##_generic_stat_arch_elt, \
        NAME##_update_armap_timestamp
 
-       bfd_boolean (*_bfd_slurp_armap) (bfd *);
-       bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
-       bfd_boolean (*_bfd_construct_extended_name_table) (bfd *, char **,
-                                                          bfd_size_type *,
-                                                          const char **);
-       void        (*_bfd_truncate_arname) (bfd *, const char *, char *);
-       bfd_boolean (*write_armap) (bfd *, unsigned int, struct orl *,
-                                   unsigned int, int);
-       void *      (*_bfd_read_ar_hdr_fn) (bfd *);
-       bfd_boolean (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
-       bfd *       (*openr_next_archived_file) (bfd *, bfd *);
+       bool (*_bfd_slurp_armap) (bfd *);
+       bool (*_bfd_slurp_extended_name_table) (bfd *);
+       bool (*_bfd_construct_extended_name_table) (bfd *, char **,
+                                                   bfd_size_type *,
+                                                   const char **);
+       void (*_bfd_truncate_arname) (bfd *, const char *, char *);
+       bool (*write_armap) (bfd *, unsigned, struct orl *, unsigned, int);
+       void *(*_bfd_read_ar_hdr_fn) (bfd *);
+       bool (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
+       bfd *(*openr_next_archived_file) (bfd *, bfd *);
      #define bfd_get_elt_at_index(b,i) \
             BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
-       bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex);
-       int         (*_bfd_stat_arch_elt) (bfd *, struct stat *);
-       bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
+       bfd *(*_bfd_get_elt_at_index) (bfd *, symindex);
+       int  (*_bfd_stat_arch_elt) (bfd *, struct stat *);
+       bool (*_bfd_update_armap_timestamp) (bfd *);
 
        /* Entry points used for symbols.  */
      #define BFD_JUMP_TABLE_SYMBOLS(NAME) \
@@ -7624,52 +7290,59 @@ BFD_JUMP_TABLE macros.
        NAME##_bfd_is_target_special_symbol, \
        NAME##_get_lineno, \
        NAME##_find_nearest_line, \
+       NAME##_find_nearest_line_with_alt, \
        NAME##_find_line, \
        NAME##_find_inliner_info, \
        NAME##_bfd_make_debug_symbol, \
        NAME##_read_minisymbols, \
        NAME##_minisymbol_to_symbol
 
-       long        (*_bfd_get_symtab_upper_bound) (bfd *);
-       long        (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **);
+       long (*_bfd_get_symtab_upper_bound) (bfd *);
+       long (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **);
        struct bfd_symbol *
-                   (*_bfd_make_empty_symbol) (bfd *);
-       void        (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *,
-                                         bfd_print_symbol_type);
+            (*_bfd_make_empty_symbol) (bfd *);
+       void (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *,
+                                  bfd_print_symbol_type);
      #define bfd_print_symbol(b,p,s,e) \
             BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
-       void        (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *,
-                                            symbol_info *);
+       void  (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *, symbol_info *);
      #define bfd_get_symbol_info(b,p,e) \
             BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
-       const char *(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *,
-                                                      bfd_boolean *);
-     #define bfd_get_symbol_version_string(b,s,h) \
-            BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h))
-       bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
-       bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
-       alent *     (*_get_lineno) (bfd *, struct bfd_symbol *);
-       bfd_boolean (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **,
-                                              struct bfd_section *, bfd_vma,
-                                              const char **, const char **,
-                                              unsigned int *, unsigned int *);
-       bfd_boolean (*_bfd_find_line) (bfd *, struct bfd_symbol **,
-                                      struct bfd_symbol *, const char **,
-                                      unsigned int *);
-       bfd_boolean (*_bfd_find_inliner_info)
+       const char *
+            (*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *,
+                                               bool, bool *);
+     #define bfd_get_symbol_version_string(b,s,p,h) \
+            BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h))
+       bool (*_bfd_is_local_label_name) (bfd *, const char *);
+       bool (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
+       alent *
+            (*_get_lineno) (bfd *, struct bfd_symbol *);
+       bool (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **,
+                                       struct bfd_section *, bfd_vma,
+                                       const char **, const char **,
+                                       unsigned int *, unsigned int *);
+       bool (*_bfd_find_nearest_line_with_alt) (bfd *, const char *,
+                                                struct bfd_symbol **,
+                                                struct bfd_section *, bfd_vma,
+                                                const char **, const char **,
+                                                unsigned int *, unsigned int *);
+       bool (*_bfd_find_line) (bfd *, struct bfd_symbol **,
+                               struct bfd_symbol *, const char **,
+                               unsigned int *);
+       bool (*_bfd_find_inliner_info)
          (bfd *, const char **, const char **, unsigned int *);
       /* Back-door to allow format-aware applications to create debug symbols
          while using BFD for everything else.  Currently used by the assembler
          when creating COFF files.  */
-       asymbol *   (*_bfd_make_debug_symbol) (bfd *, void *, unsigned long size);
+       asymbol *
+            (*_bfd_make_debug_symbol) (bfd *);
      #define bfd_read_minisymbols(b, d, m, s) \
             BFD_SEND (b, _read_minisymbols, (b, d, m, s))
-       long        (*_read_minisymbols) (bfd *, bfd_boolean, void **,
-                                         unsigned int *);
+       long (*_read_minisymbols) (bfd *, bool, void **, unsigned int *);
      #define bfd_minisymbol_to_symbol(b, d, m, f) \
             BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
-       asymbol *   (*_minisymbol_to_symbol) (bfd *, bfd_boolean, const void *,
-                                             asymbol *);
+       asymbol *
+            (*_minisymbol_to_symbol) (bfd *, bool, const void *, asymbol *);
 
        /* Routines for relocs.  */
      #define BFD_JUMP_TABLE_RELOCS(NAME) \
@@ -7679,25 +7352,25 @@ BFD_JUMP_TABLE macros.
        NAME##_bfd_reloc_type_lookup, \
        NAME##_bfd_reloc_name_lookup
 
-       long        (*_get_reloc_upper_bound) (bfd *, sec_ptr);
-       long        (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **,
-                                               struct bfd_symbol **);
-       void        (*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int);
+       long (*_get_reloc_upper_bound) (bfd *, sec_ptr);
+       long (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **,
+                                        struct bfd_symbol **);
+       void (*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int);
        /* See documentation on reloc types.  */
        reloc_howto_type *
-                   (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+            (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
        reloc_howto_type *
-                   (*reloc_name_lookup) (bfd *, const char *);
+            (*reloc_name_lookup) (bfd *, const char *);
 
        /* Routines used when writing an object file.  */
      #define BFD_JUMP_TABLE_WRITE(NAME) \
        NAME##_set_arch_mach, \
        NAME##_set_section_contents
 
-       bfd_boolean (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture,
+       bool (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture,
                                           unsigned long);
-       bfd_boolean (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *,
-                                                 file_ptr, bfd_size_type);
+       bool (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *,
+                                          file_ptr, bfd_size_type);
 
        /* Routines used by the linker.  */
      #define BFD_JUMP_TABLE_LINK(NAME) \
@@ -7722,72 +7395,73 @@ BFD_JUMP_TABLE macros.
        NAME##_bfd_link_hide_symbol, \
        NAME##_bfd_define_start_stop
 
-       int         (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
-       bfd_byte *  (*_bfd_get_relocated_section_contents) (bfd *,
-                                                           struct bfd_link_info *,
-                                                           struct bfd_link_order *,
-                                                           bfd_byte *, bfd_boolean,
-                                                           struct bfd_symbol **);
+       int  (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
+       bfd_byte *
+            (*_bfd_get_relocated_section_contents) (bfd *,
+                                                    struct bfd_link_info *,
+                                                    struct bfd_link_order *,
+                                                    bfd_byte *, bool,
+                                                    struct bfd_symbol **);
 
-       bfd_boolean (*_bfd_relax_section) (bfd *, struct bfd_section *,
-                                          struct bfd_link_info *, bfd_boolean *);
+       bool (*_bfd_relax_section) (bfd *, struct bfd_section *,
+                                   struct bfd_link_info *, bool *);
 
        /* Create a hash table for the linker.  Different backends store
           different information in this table.  */
        struct bfd_link_hash_table *
-                   (*_bfd_link_hash_table_create) (bfd *);
+            (*_bfd_link_hash_table_create) (bfd *);
 
        /* Add symbols from this object file into the hash table.  */
-       bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
+       bool (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
 
        /* Indicate that we are only retrieving symbol values from this section.  */
-       void        (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
+       void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
 
        /* Copy the symbol type and other attributes for a linker script
           assignment of one symbol to another.  */
      #define bfd_copy_link_hash_symbol_type(b, t, f) \
             BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
-       void        (*_bfd_copy_link_hash_symbol_type) (bfd *,
-                                                       struct bfd_link_hash_entry *,
-                                                       struct bfd_link_hash_entry *);
+       void (*_bfd_copy_link_hash_symbol_type) (bfd *,
+                                                struct bfd_link_hash_entry *,
+                                                struct bfd_link_hash_entry *);
 
        /* Do a link based on the link_order structures attached to each
           section of the BFD.  */
-       bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
+       bool (*_bfd_final_link) (bfd *, struct bfd_link_info *);
 
        /* Should this section be split up into smaller pieces during linking.  */
-       bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
+       bool (*_bfd_link_split_section) (bfd *, struct bfd_section *);
 
        /* Check the relocations in the bfd for validity.  */
-       bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
+       bool (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
 
        /* Remove sections that are not referenced from the output.  */
-       bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
+       bool (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
 
        /* Sets the bitmask of allowed and disallowed section flags.  */
-       bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
-                                                 struct flag_info *, asection *);
+       bool (*_bfd_lookup_section_flags) (struct bfd_link_info *,
+                                          struct flag_info *, asection *);
 
        /* Attempt to merge SEC_MERGE sections.  */
-       bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
+       bool (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
 
        /* Is this section a member of a group?  */
-       bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
+       bool (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
 
        /* The group name, if section is a member of a group.  */
        const char *(*_bfd_group_name) (bfd *, const struct bfd_section *);
 
        /* Discard members of a group.  */
-       bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
+       bool (*_bfd_discard_group) (bfd *, struct bfd_section *);
 
        /* Check if SEC has been already linked during a reloceatable or
           final link.  */
-       bfd_boolean (*_section_already_linked) (bfd *, asection *,
-                                               struct bfd_link_info *);
+       bool (*_section_already_linked) (bfd *, asection *,
+                                        struct bfd_link_info *);
 
        /* Define a common symbol.  */
-       bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
-                                                 struct bfd_link_hash_entry *);
+       bool (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
+                                          struct bfd_link_hash_entry *);
 
        /* Hide a symbol.  */
        void (*_bfd_link_hide_symbol) (bfd *, struct bfd_link_info *,
@@ -7795,8 +7469,8 @@ BFD_JUMP_TABLE macros.
 
        /* Define a __start, __stop, .startof. or .sizeof. symbol.  */
        struct bfd_link_hash_entry *
-                   (*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
-                                              asection *);
+            (*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
+                                       asection *);
 
        /* Routines to handle dynamic symbols and relocs.  */
      #define BFD_JUMP_TABLE_DYNAMIC(NAME) \
@@ -7807,18 +7481,18 @@ BFD_JUMP_TABLE macros.
        NAME##_canonicalize_dynamic_reloc
 
        /* Get the amount of memory required to hold the dynamic symbols.  */
-       long        (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
+       long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
        /* Read in the dynamic symbols.  */
-       long        (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **);
+       long (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **);
        /* Create synthetized symbols.  */
-       long        (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **,
-                                                 long, struct bfd_symbol **,
-                                                 struct bfd_symbol **);
+       long (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **,
+                                          long, struct bfd_symbol **,
+                                          struct bfd_symbol **);
        /* Get the amount of memory required to hold the dynamic relocs.  */
-       long        (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
+       long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
        /* Read in the dynamic relocs.  */
-       long        (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **,
-                                                       struct bfd_symbol **);
+       long (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **,
+                                                struct bfd_symbol **);
 
    A pointer to an alternative bfd_target in case the current one is not
 satisfactory.  This can happen when the target cpu supports both big and
@@ -7852,31 +7526,31 @@ to find an alternative output format tha
        return abfd->xvec->object_flags;
      }
 
-     static inline bfd_boolean
+     static inline bool
      bfd_family_coff (const bfd *abfd)
      {
        return (bfd_get_flavour (abfd) == bfd_target_coff_flavour
                || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
      }
 
-     static inline bfd_boolean
+     static inline bool
      bfd_big_endian (const bfd *abfd)
      {
        return abfd->xvec->byteorder == BFD_ENDIAN_BIG;
      }
-     static inline bfd_boolean
+     static inline bool
      bfd_little_endian (const bfd *abfd)
      {
        return abfd->xvec->byteorder == BFD_ENDIAN_LITTLE;
      }
 
-     static inline bfd_boolean
+     static inline bool
      bfd_header_big_endian (const bfd *abfd)
      {
        return abfd->xvec->header_byteorder == BFD_ENDIAN_BIG;
      }
 
-     static inline bfd_boolean
+     static inline bool
      bfd_header_little_endian (const bfd *abfd)
      {
        return abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE;
@@ -7902,87 +7576,95 @@ to find an alternative output format tha
        return sy->the_bfd->xvec->flavour;
      }
 
+     static inline bool
+     bfd_keep_unused_section_symbols (const bfd *abfd)
+     {
+       return abfd->xvec->keep_unused_section_symbols;
+     }
+
+
+2.12.1.1 '_bfd_per_xvec_warn'
+.............................
 
-2.12.1.1 'bfd_set_default_target'
+ -- Function: struct per_xvec_message **_bfd_per_xvec_warn (const
+          bfd_target *, size_t);
+     Return a location for the given target xvec to use for warnings
+     specific to that target.  If TARG is NULL, returns the array of
+     per_xvec_message pointers, otherwise if ALLOC is zero, returns a
+     pointer to a pointer to the list of messages for TARG, otherwise
+     (both TARG and ALLOC non-zero), allocates a new per_xvec_message
+     with space for a string of ALLOC bytes and returns a pointer to a
+     pointer to it.  May return a pointer to a NULL pointer on
+     allocation failure.
+
+2.12.1.2 'bfd_set_default_target'
 .................................
 
-*Synopsis*
-     bfd_boolean bfd_set_default_target (const char *name);
-   *Description*
-Set the default target vector to use when recognizing a BFD. This takes
-the name of the target, which may be a BFD target name or a
-configuration triplet.
+ -- Function: bool bfd_set_default_target (const char *name);
+     Set the default target vector to use when recognizing a BFD. This
+     takes the name of the target, which may be a BFD target name or a
+     configuration triplet.
 
-2.12.1.2 'bfd_find_target'
+2.12.1.3 'bfd_find_target'
 ..........................
 
-*Synopsis*
-     const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
-   *Description*
-Return a pointer to the transfer vector for the object target named
-TARGET_NAME.  If TARGET_NAME is 'NULL', choose the one in the
-environment variable 'GNUTARGET'; if that is null or not defined, then
-choose the first entry in the target list.  Passing in the string
-"default" or setting the environment variable to "default" will cause
-the first entry in the target list to be returned, and
-"target_defaulted" will be set in the BFD if ABFD isn't 'NULL'.  This
-causes 'bfd_check_format' to loop over all the targets to find the one
-that matches the file being read.
+ -- Function: const bfd_target *bfd_find_target (const char
+          *target_name, bfd *abfd);
+     Return a pointer to the transfer vector for the object target named
+     TARGET_NAME.  If TARGET_NAME is 'NULL', choose the one in the
+     environment variable 'GNUTARGET'; if that is null or not defined,
+     then choose the first entry in the target list.  Passing in the
+     string "default" or setting the environment variable to "default"
+     will cause the first entry in the target list to be returned, and
+     "target_defaulted" will be set in the BFD if ABFD isn't 'NULL'.
+     This causes 'bfd_check_format' to loop over all the targets to find
+     the one that matches the file being read.
 
-2.12.1.3 'bfd_get_target_info'
+2.12.1.4 'bfd_get_target_info'
 ..............................
 
-*Synopsis*
-     const bfd_target *bfd_get_target_info (const char *target_name,
-         bfd *abfd,
-         bfd_boolean *is_bigendian,
-         int *underscoring,
-         const char **def_target_arch);
-   *Description*
-Return a pointer to the transfer vector for the object target named
-TARGET_NAME.  If TARGET_NAME is 'NULL', choose the one in the
-environment variable 'GNUTARGET'; if that is null or not defined, then
-choose the first entry in the target list.  Passing in the string
-"default" or setting the environment variable to "default" will cause
-the first entry in the target list to be returned, and
-"target_defaulted" will be set in the BFD if ABFD isn't 'NULL'.  This
-causes 'bfd_check_format' to loop over all the targets to find the one
-that matches the file being read.  If IS_BIGENDIAN is not 'NULL', then
-set this value to target's endian mode.  True for big-endian, FALSE for
-little-endian or for invalid target.  If UNDERSCORING is not 'NULL',
-then set this value to target's underscoring mode.  Zero for
-none-underscoring, -1 for invalid target, else the value of target
-vector's symbol underscoring.  If DEF_TARGET_ARCH is not 'NULL', then
-set it to the architecture string specified by the target_name.
+ -- Function: const bfd_target *bfd_get_target_info (const char
+          *target_name, bfd *abfd, bool *is_bigendian, int
+          *underscoring, const char **def_target_arch);
+     Return a pointer to the transfer vector for the object target named
+     TARGET_NAME.  If TARGET_NAME is 'NULL', choose the one in the
+     environment variable 'GNUTARGET'; if that is null or not defined,
+     then choose the first entry in the target list.  Passing in the
+     string "default" or setting the environment variable to "default"
+     will cause the first entry in the target list to be returned, and
+     "target_defaulted" will be set in the BFD if ABFD isn't 'NULL'.
+     This causes 'bfd_check_format' to loop over all the targets to find
+     the one that matches the file being read.  If IS_BIGENDIAN is not
+     'NULL', then set this value to target's endian mode.  True for
+     big-endian, FALSE for little-endian or for invalid target.  If
+     UNDERSCORING is not 'NULL', then set this value to target's
+     underscoring mode.  Zero for none-underscoring, -1 for invalid
+     target, else the value of target vector's symbol underscoring.  If
+     DEF_TARGET_ARCH is not 'NULL', then set it to the architecture
+     string specified by the target_name.
 
-2.12.1.4 'bfd_target_list'
+2.12.1.5 'bfd_target_list'
 ..........................
 
-*Synopsis*
-     const char ** bfd_target_list (void);
-   *Description*
-Return a freshly malloced NULL-terminated vector of the names of all the
-valid BFD targets.  Do not modify the names.
+ -- Function: const char ** bfd_target_list (void);
+     Return a freshly malloced NULL-terminated vector of the names of
+     all the valid BFD targets.  Do not modify the names.
 
-2.12.1.5 'bfd_iterate_over_targets'
+2.12.1.6 'bfd_iterate_over_targets'
 ...................................
 
-*Synopsis*
-     const bfd_target *bfd_iterate_over_targets
-        (int (*func) (const bfd_target *, void *),
-         void *data);
-   *Description*
-Call FUNC for each target in the list of BFD target vectors, passing
-DATA to FUNC.  Stop iterating if FUNC returns a non-zero result, and
-return that target vector.  Return NULL if FUNC always returns zero.
+ -- Function: const bfd_target *bfd_iterate_over_targets (int (*func)
+          (const bfd_target *, void *), void *data);
+     Call FUNC for each target in the list of BFD target vectors,
+     passing DATA to FUNC.  Stop iterating if FUNC returns a non-zero
+     result, and return that target vector.  Return NULL if FUNC always
+     returns zero.
 
-2.12.1.6 'bfd_flavour_name'
+2.12.1.7 'bfd_flavour_name'
 ...........................
 
-*Synopsis*
-     const char *bfd_flavour_name (enum bfd_flavour flavour);
-   *Description*
-Return the string form of FLAVOUR.
+ -- Function: const char *bfd_flavour_name (enum bfd_flavour flavour);
+     Return the string form of FLAVOUR.
 
 
 File: bfd.info,  Node: Architectures,  Next: Opening and Closing,  Prev: Targets,  Up: BFD front end
@@ -8014,7 +7696,6 @@ a machine field of 0).
 2.13.1 bfd_architecture
 -----------------------
 
-*Description*
 This enum gives the object file's CPU architecture, in a global
 sense--i.e., what processor family does it belong to?  Another field
 indicates which processor within the family is in use.  The machine
@@ -8128,6 +7809,7 @@ architecture, containing, for example, 6
      #define bfd_mach_mips16000             16000
      #define bfd_mach_mips16                16
      #define bfd_mach_mips5                 5
+     #define bfd_mach_mips_allegrex         10111431 /* octal 'AL', 31.  */
      #define bfd_mach_mips_loongson_2e      3001
      #define bfd_mach_mips_loongson_2f      3002
      #define bfd_mach_mips_gs464            3003
@@ -8160,16 +7842,6 @@ architecture, containing, for example, 6
      #define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
      #define bfd_mach_x86_64_intel_syntax   (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
      #define bfd_mach_x64_32_intel_syntax   (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
-       bfd_arch_l1om,      /* Intel L1OM.  */
-     #define bfd_mach_l1om                  (1 << 5)
-     #define bfd_mach_l1om_intel_syntax     (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
-       bfd_arch_k1om,      /* Intel K1OM.  */
-     #define bfd_mach_k1om                  (1 << 6)
-     #define bfd_mach_k1om_intel_syntax     (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
-     #define bfd_mach_i386_nacl             (1 << 7)
-     #define bfd_mach_i386_i386_nacl        (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
-     #define bfd_mach_x86_64_nacl           (bfd_mach_x86_64 | bfd_mach_i386_nacl)
-     #define bfd_mach_x64_32_nacl           (bfd_mach_x64_32 | bfd_mach_i386_nacl)
        bfd_arch_iamcu,     /* Intel MCU.  */
      #define bfd_mach_iamcu                 (1 << 8)
      #define bfd_mach_i386_iamcu            (bfd_mach_i386_i386 | bfd_mach_iamcu)
@@ -8187,7 +7859,6 @@ architecture, containing, for example, 6
      #define bfd_mach_h8300sx       6
      #define bfd_mach_h8300sxn      7
        bfd_arch_pdp11,     /* DEC PDP-11.  */
-       bfd_arch_plugin,
        bfd_arch_powerpc,   /* PowerPC.  */
      #define bfd_mach_ppc           32
      #define bfd_mach_ppc64         64
@@ -8297,6 +7968,7 @@ architecture, containing, for example, 6
      #define bfd_mach_arm_8M_BASE   25
      #define bfd_mach_arm_8M_MAIN   26
      #define bfd_mach_arm_8_1M_MAIN 27
+     #define bfd_mach_arm_9         28
        bfd_arch_nds32,     /* Andes NDS32.  */
      #define bfd_mach_n1            1
      #define bfd_mach_n1h           2
@@ -8310,7 +7982,6 @@ architecture, containing, for example, 6
      #define bfd_mach_tic4x         40
        bfd_arch_tic54x,    /* Texas Instruments TMS320C54X.  */
        bfd_arch_tic6x,     /* Texas Instruments TMS320C6X.  */
-       bfd_arch_tic80,     /* TI TMS320c80 (MVP).  */
        bfd_arch_v850,      /* NEC V850.  */
        bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI).  */
      #define bfd_mach_v850          1
@@ -8372,6 +8043,7 @@ architecture, containing, for example, 6
      #define bfd_mach_iq10          2
        bfd_arch_bpf,       /* Linux eBPF.  */
      #define bfd_mach_bpf           1
+     #define bfd_mach_xbpf          2
        bfd_arch_epiphany,  /* Adapteva EPIPHANY.  */
      #define bfd_mach_epiphany16    1
      #define bfd_mach_epiphany32    2
@@ -8452,22 +8124,44 @@ architecture, containing, for example, 6
      #define bfd_mach_msp46         46
      #define bfd_mach_msp47         47
      #define bfd_mach_msp54         54
-       bfd_arch_xc16x,     /* Infineon's XC16X Series.  */
-     #define bfd_mach_xc16x         1
-     #define bfd_mach_xc16xl        2
-     #define bfd_mach_xc16xs        3
        bfd_arch_xgate,     /* Freescale XGATE.  */
      #define bfd_mach_xgate         1
        bfd_arch_xtensa,    /* Tensilica's Xtensa cores.  */
      #define bfd_mach_xtensa        1
        bfd_arch_z80,
-     #define bfd_mach_z80strict     1 /* No undocumented opcodes.  */
-     #define bfd_mach_z80           3 /* With ixl, ixh, iyl, and iyh.  */
-     #define bfd_mach_z80full       7 /* All undocumented instructions.  */
-     #define bfd_mach_r800          11 /* R800: successor with multiplication.  */
+     /* Zilog Z80 without undocumented opcodes.  */
+     #define bfd_mach_z80strict     1
+     /* Zilog Z180: successor with additional instructions, but without
+      halves of ix and iy.  */
+     #define bfd_mach_z180          2
+     /* Zilog Z80 with ixl, ixh, iyl, and iyh.  */
+     #define bfd_mach_z80           3
+     /* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode.  */
+     #define bfd_mach_ez80_z80      4
+     /* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode.  */
+     #define bfd_mach_ez80_adl      5
+     /* Z80N */
+     #define bfd_mach_z80n          6
+     /* Zilog Z80 with all undocumented instructions.  */
+     #define bfd_mach_z80full       7
+     /* GameBoy Z80 (reduced instruction set).  */
+     #define bfd_mach_gbz80         8
+     /* ASCII R800: successor with multiplication.  */
+     #define bfd_mach_r800          11
        bfd_arch_lm32,      /* Lattice Mico32.  */
      #define bfd_mach_lm32          1
        bfd_arch_microblaze,/* Xilinx MicroBlaze.  */
+       bfd_arch_kvx,        /* Kalray VLIW core of the MPPA processor family */
+     #define bfd_mach_kv3_unknown       0
+     #define bfd_mach_kv3_1             1
+     #define bfd_mach_kv3_1_64          2
+     #define bfd_mach_kv3_1_usr         3
+     #define bfd_mach_kv3_2             4
+     #define bfd_mach_kv3_2_64          5
+     #define bfd_mach_kv3_2_usr         6
+     #define bfd_mach_kv4_1             7
+     #define bfd_mach_kv4_1_64          8
+     #define bfd_mach_kv4_1_usr         9
        bfd_arch_tilepro,   /* Tilera TILEPro.  */
        bfd_arch_tilegx,    /* Tilera TILE-Gx.  */
      #define bfd_mach_tilepro       1
@@ -8475,7 +8169,9 @@ architecture, containing, for example, 6
      #define bfd_mach_tilegx32      2
        bfd_arch_aarch64,   /* AArch64.  */
      #define bfd_mach_aarch64 0
+     #define bfd_mach_aarch64_8R    1
      #define bfd_mach_aarch64_ilp32 32
+     #define bfd_mach_aarch64_llp64 64
        bfd_arch_nios2,     /* Nios II.  */
      #define bfd_mach_nios2         0
      #define bfd_mach_nios2r1       1
@@ -8498,13 +8194,32 @@ architecture, containing, for example, 6
      #define bfd_mach_ck803         5
      #define bfd_mach_ck807         6
      #define bfd_mach_ck810         7
+     #define bfd_mach_ck860         8
+       bfd_arch_loongarch,       /* LoongArch */
+     #define bfd_mach_loongarch32   1
+     #define bfd_mach_loongarch64   2
+       bfd_arch_amdgcn,     /* AMDGCN */
+     #define bfd_mach_amdgcn_unknown 0x000
+     #define bfd_mach_amdgcn_gfx900  0x02c
+     #define bfd_mach_amdgcn_gfx904  0x02e
+     #define bfd_mach_amdgcn_gfx906  0x02f
+     #define bfd_mach_amdgcn_gfx908  0x030
+     #define bfd_mach_amdgcn_gfx90a  0x03f
+     #define bfd_mach_amdgcn_gfx1010 0x033
+     #define bfd_mach_amdgcn_gfx1011 0x034
+     #define bfd_mach_amdgcn_gfx1012 0x035
+     #define bfd_mach_amdgcn_gfx1030 0x036
+     #define bfd_mach_amdgcn_gfx1031 0x037
+     #define bfd_mach_amdgcn_gfx1032 0x038
+     #define bfd_mach_amdgcn_gfx1100 0x041
+     #define bfd_mach_amdgcn_gfx1101 0x046
+     #define bfd_mach_amdgcn_gfx1102 0x047
        bfd_arch_last
        };
 
 2.13.2 bfd_arch_info
 --------------------
 
-*Description*
 This structure contains information on architectures for use within BFD.
 
      typedef struct bfd_arch_info
@@ -8520,17 +8235,16 @@ This structure contains information on a
        /* TRUE if this is the default machine for the architecture.
           The default arch should be the first entry for an arch so that
           all the entries for that arch can be accessed via next.  */
-       bfd_boolean the_default;
+       bool the_default;
        const struct bfd_arch_info * (*compatible) (const struct bfd_arch_info *,
                                                    const struct bfd_arch_info *);
 
-       bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
+       bool (*scan) (const struct bfd_arch_info *, const char *);
 
        /* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
           IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
           TRUE, the buffer contains code.  */
-       void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
-                      bfd_boolean code);
+       void *(*fill) (bfd_size_type count, bool is_bigendian, bool code);
 
        const struct bfd_arch_info *next;
 
@@ -8550,728 +8264,545 @@ This structure contains information on a
 2.13.2.1 'bfd_printable_name'
 .............................
 
-*Synopsis*
-     const char *bfd_printable_name (bfd *abfd);
-   *Description*
-Return a printable string representing the architecture and machine from
-the pointer to the architecture info structure.
+ -- Function: const char *bfd_printable_name (bfd *abfd);
+     Return a printable string representing the architecture and machine
+     from the pointer to the architecture info structure.
 
 2.13.2.2 'bfd_scan_arch'
 ........................
 
-*Synopsis*
-     const bfd_arch_info_type *bfd_scan_arch (const char *string);
-   *Description*
-Figure out if BFD supports any cpu which could be described with the
-name STRING.  Return a pointer to an 'arch_info' structure if a machine
-is found, otherwise NULL.
+ -- Function: const bfd_arch_info_type *bfd_scan_arch (const char
+          *string);
+     Figure out if BFD supports any cpu which could be described with
+     the name STRING.  Return a pointer to an 'arch_info' structure if a
+     machine is found, otherwise NULL.
 
 2.13.2.3 'bfd_arch_list'
 ........................
 
-*Synopsis*
-     const char **bfd_arch_list (void);
-   *Description*
-Return a freshly malloced NULL-terminated vector of the names of all the
-valid BFD architectures.  Do not modify the names.
+ -- Function: const char **bfd_arch_list (void);
+     Return a freshly malloced NULL-terminated vector of the names of
+     all the valid BFD architectures.  Do not modify the names.
 
 2.13.2.4 'bfd_arch_get_compatible'
 ..................................
 
-*Synopsis*
-     const bfd_arch_info_type *bfd_arch_get_compatible
-        (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
-   *Description*
-Determine whether two BFDs' architectures and machine types are
-compatible.  Calculates the lowest common denominator between the two
-architectures and machine types implied by the BFDs and returns a
-pointer to an 'arch_info' structure describing the compatible machine.
+ -- Function: const bfd_arch_info_type *bfd_arch_get_compatible (const
+          bfd *abfd, const bfd *bbfd, bool accept_unknowns);
+     Determine whether two BFDs' architectures and machine types are
+     compatible.  Calculates the lowest common denominator between the
+     two architectures and machine types implied by the BFDs and returns
+     a pointer to an 'arch_info' structure describing the compatible
+     machine.
 
 2.13.2.5 'bfd_default_arch_struct'
 ..................................
 
-*Description*
 The 'bfd_default_arch_struct' is an item of 'bfd_arch_info_type' which
 has been initialized to a fairly generic state.  A BFD starts life by
 pointing to this structure, until the correct back end has determined
 the real architecture of the file.
      extern const bfd_arch_info_type bfd_default_arch_struct;
 
+
 2.13.2.6 'bfd_set_arch_info'
 ............................
 
-*Synopsis*
-     void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
-   *Description*
-Set the architecture info of ABFD to ARG.
+ -- Function: void bfd_set_arch_info (bfd *abfd, const
+          bfd_arch_info_type *arg);
+     Set the architecture info of ABFD to ARG.
 
 2.13.2.7 'bfd_default_set_arch_mach'
 ....................................
 
-*Synopsis*
-     bfd_boolean bfd_default_set_arch_mach
-        (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
-   *Description*
-Set the architecture and machine type in BFD ABFD to ARCH and MACH.
-Find the correct pointer to a structure and insert it into the
-'arch_info' pointer.
+ -- Function: bool bfd_default_set_arch_mach (bfd *abfd, enum
+          bfd_architecture arch, unsigned long mach);
+     Set the architecture and machine type in BFD ABFD to ARCH and MACH.
+     Find the correct pointer to a structure and insert it into the
+     'arch_info' pointer.
 
 2.13.2.8 'bfd_get_arch'
 .......................
 
-*Synopsis*
-     enum bfd_architecture bfd_get_arch (const bfd *abfd);
-   *Description*
-Return the enumerated type which describes the BFD ABFD's architecture.
+ -- Function: enum bfd_architecture bfd_get_arch (const bfd *abfd);
+     Return the enumerated type which describes the BFD ABFD's
+     architecture.
 
 2.13.2.9 'bfd_get_mach'
 .......................
 
-*Synopsis*
-     unsigned long bfd_get_mach (const bfd *abfd);
-   *Description*
-Return the long type which describes the BFD ABFD's machine.
+ -- Function: unsigned long bfd_get_mach (const bfd *abfd);
+     Return the long type which describes the BFD ABFD's machine.
 
 2.13.2.10 'bfd_arch_bits_per_byte'
 ..................................
 
-*Synopsis*
-     unsigned int bfd_arch_bits_per_byte (const bfd *abfd);
-   *Description*
-Return the number of bits in one of the BFD ABFD's architecture's bytes.
+ -- Function: unsigned int bfd_arch_bits_per_byte (const bfd *abfd);
+     Return the number of bits in one of the BFD ABFD's architecture's
+     bytes.
 
 2.13.2.11 'bfd_arch_bits_per_address'
 .....................................
 
-*Synopsis*
-     unsigned int bfd_arch_bits_per_address (const bfd *abfd);
-   *Description*
-Return the number of bits in one of the BFD ABFD's architecture's
-addresses.
+ -- Function: unsigned int bfd_arch_bits_per_address (const bfd *abfd);
+     Return the number of bits in one of the BFD ABFD's architecture's
+     addresses.
 
 2.13.2.12 'bfd_default_compatible'
 ..................................
 
-*Synopsis*
-     const bfd_arch_info_type *bfd_default_compatible
-        (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
-   *Description*
-The default function for testing for compatibility.
+ -- Function: const bfd_arch_info_type *bfd_default_compatible (const
+          bfd_arch_info_type *a, const bfd_arch_info_type *b);
+     The default function for testing for compatibility.
 
 2.13.2.13 'bfd_default_scan'
 ............................
 
-*Synopsis*
-     bfd_boolean bfd_default_scan
-        (const struct bfd_arch_info *info, const char *string);
-   *Description*
-The default function for working out whether this is an architecture hit
-and a machine hit.
+ -- Function: bool bfd_default_scan (const struct bfd_arch_info *info,
+          const char *string);
+     The default function for working out whether this is an
+     architecture hit and a machine hit.
 
 2.13.2.14 'bfd_get_arch_info'
 .............................
 
-*Synopsis*
-     const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
-   *Description*
-Return the architecture info struct in ABFD.
+ -- Function: const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
+     Return the architecture info struct in ABFD.
 
 2.13.2.15 'bfd_lookup_arch'
 ...........................
 
-*Synopsis*
-     const bfd_arch_info_type *bfd_lookup_arch
-        (enum bfd_architecture arch, unsigned long machine);
-   *Description*
-Look for the architecture info structure which matches the arguments
-ARCH and MACHINE.  A machine of 0 matches the machine/architecture
-structure which marks itself as the default.
+ -- Function: const bfd_arch_info_type *bfd_lookup_arch (enum
+          bfd_architecture arch, unsigned long machine);
+     Look for the architecture info structure which matches the
+     arguments ARCH and MACHINE.  A machine of 0 matches the
+     machine/architecture structure which marks itself as the default.
 
 2.13.2.16 'bfd_printable_arch_mach'
 ...................................
 
-*Synopsis*
-     const char *bfd_printable_arch_mach
-        (enum bfd_architecture arch, unsigned long machine);
-   *Description*
-Return a printable string representing the architecture and machine
-type.
+ -- Function: const char *bfd_printable_arch_mach (enum bfd_architecture
+          arch, unsigned long machine);
+     Return a printable string representing the architecture and machine
+     type.
 
-   This routine is depreciated.
+     This routine is depreciated.
 
 2.13.2.17 'bfd_octets_per_byte'
 ...............................
 
-*Synopsis*
-     unsigned int bfd_octets_per_byte (const bfd *abfd,
-         const asection *sec);
-   *Description*
-Return the number of octets (8-bit quantities) per target byte (minimum
-addressable unit).  In most cases, this will be one, but some DSP
-targets have 16, 32, or even 48 bits per byte.
+ -- Function: unsigned int bfd_octets_per_byte (const bfd *abfd, const
+          asection *sec);
+     Return the number of octets (8-bit quantities) per target byte
+     (minimum addressable unit).  In most cases, this will be one, but
+     some DSP targets have 16, 32, or even 48 bits per byte.
 
 2.13.2.18 'bfd_arch_mach_octets_per_byte'
 .........................................
 
-*Synopsis*
-     unsigned int bfd_arch_mach_octets_per_byte
-        (enum bfd_architecture arch, unsigned long machine);
-   *Description*
-See bfd_octets_per_byte.
+ -- Function: unsigned int bfd_arch_mach_octets_per_byte (enum
+          bfd_architecture arch, unsigned long machine);
+     See bfd_octets_per_byte.
 
-   This routine is provided for those cases where a bfd * is not
-available
+     This routine is provided for those cases where a bfd * is not
+     available
 
 2.13.2.19 'bfd_arch_default_fill'
 .................................
 
-*Synopsis*
-     void *bfd_arch_default_fill (bfd_size_type count,
-         bfd_boolean is_bigendian,
-         bfd_boolean code);
-   *Description*
-Allocate via bfd_malloc and return a fill buffer of size COUNT. If
-IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
-TRUE, the buffer contains code.
+ -- Function: void *bfd_arch_default_fill (bfd_size_type count, bool
+          is_bigendian, bool code);
+     Allocate via bfd_malloc and return a fill buffer of size COUNT. If
+     IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
+     TRUE, the buffer contains code.
 
 
 File: bfd.info,  Node: Opening and Closing,  Next: Internal,  Prev: Architectures,  Up: BFD front end
 
-     /* Set to N to open the next N BFDs using an alternate id space.  */
-     extern unsigned int bfd_use_reserved_id;
-
 2.14 Opening and closing BFDs
 =============================
 
 2.14.1 Functions for opening and closing
 ----------------------------------------
 
-2.14.1.1 'bfd_fopen'
-....................
-
-*Synopsis*
-     bfd *bfd_fopen (const char *filename, const char *target,
-         const char *mode, int fd);
-   *Description*
-Open the file FILENAME with the target TARGET.  Return a pointer to the
-created BFD. If FD is not -1, then 'fdopen' is used to open the file;
-otherwise, 'fopen' is used.  MODE is passed directly to 'fopen' or
-'fdopen'.
+2.14.1.1 '_bfd_new_bfd'
+.......................
 
-   Calls 'bfd_find_target', so TARGET is interpreted as by that
-function.
+ -- Function: bfd *_bfd_new_bfd (void);
+     Return a new BFD. All BFD's are allocated through this routine.
 
-   The new BFD is marked as cacheable iff FD is -1.
+2.14.1.2 '_bfd_new_bfd_contained_in'
+....................................
 
-   If 'NULL' is returned then an error has occured.  Possible errors are
-'bfd_error_no_memory', 'bfd_error_invalid_target' or 'system_call'
-error.
+ -- Function: bfd *_bfd_new_bfd_contained_in (bfd *);
+     Allocate a new BFD as a member of archive OBFD.
 
-   On error, FD is always closed.
+2.14.1.3 '_bfd_free_cached_info'
+................................
 
-   A copy of the FILENAME argument is stored in the newly created BFD.
-It can be accessed via the bfd_get_filename() macro.
+ -- Function: bool _bfd_free_cached_info (bfd *);
+     Free objalloc memory.
 
-2.14.1.2 'bfd_openr'
+2.14.1.4 'bfd_fopen'
 ....................
 
-*Synopsis*
-     bfd *bfd_openr (const char *filename, const char *target);
-   *Description*
-Open the file FILENAME (using 'fopen') with the target TARGET.  Return a
-pointer to the created BFD.
+ -- Function: bfd *bfd_fopen (const char *filename, const char *target,
+          const char *mode, int fd);
+     Open the file FILENAME with the target TARGET.  Return a pointer to
+     the created BFD. If FD is not -1, then 'fdopen' is used to open the
+     file; otherwise, 'fopen' is used.  MODE is passed directly to
+     'fopen' or 'fdopen'.
 
-   Calls 'bfd_find_target', so TARGET is interpreted as by that
-function.
+     Calls 'bfd_find_target', so TARGET is interpreted as by that
+     function.
 
-   If 'NULL' is returned then an error has occured.  Possible errors are
-'bfd_error_no_memory', 'bfd_error_invalid_target' or 'system_call'
-error.
+     The new BFD is marked as cacheable iff FD is -1.
 
-   A copy of the FILENAME argument is stored in the newly created BFD.
-It can be accessed via the bfd_get_filename() macro.
+     If 'NULL' is returned then an error has occured.  Possible errors
+     are 'bfd_error_no_memory', 'bfd_error_invalid_target' or
+     'system_call' error.
 
-2.14.1.3 'bfd_fdopenr'
-......................
+     On error, FD is always closed.
 
-*Synopsis*
-     bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
-   *Description*
-'bfd_fdopenr' is to 'bfd_fopenr' much like 'fdopen' is to 'fopen'.  It
-opens a BFD on a file already described by the FD supplied.
-
-   When the file is later 'bfd_close'd, the file descriptor will be
-closed.  If the caller desires that this file descriptor be cached by
-BFD (opened as needed, closed as needed to free descriptors for other
-opens), with the supplied FD used as an initial file descriptor (but
-subject to closure at any time), call bfd_set_cacheable(bfd, 1) on the
-returned BFD. The default is to assume no caching; the file descriptor
-will remain open until 'bfd_close', and will not be affected by BFD
-operations on other files.
-
-   Possible errors are 'bfd_error_no_memory', 'bfd_error_invalid_target'
-and 'bfd_error_system_call'.
+     A copy of the FILENAME argument is stored in the newly created BFD.
+     It can be accessed via the bfd_get_filename() macro.
 
-   On error, FD is closed.
+2.14.1.5 'bfd_openr'
+....................
 
-   A copy of the FILENAME argument is stored in the newly created BFD.
-It can be accessed via the bfd_get_filename() macro.
+ -- Function: bfd *bfd_openr (const char *filename, const char *target);
+     Open the file FILENAME (using 'fopen') with the target TARGET.
+     Return a pointer to the created BFD.
 
-2.14.1.4 'bfd_openstreamr'
-..........................
+     Calls 'bfd_find_target', so TARGET is interpreted as by that
+     function.
 
-*Synopsis*
-     bfd *bfd_openstreamr (const char * filename, const char * target,
-         void * stream);
-   *Description*
-Open a BFD for read access on an existing stdio stream.  When the BFD is
-passed to 'bfd_close', the stream will be closed.
+     If 'NULL' is returned then an error has occured.  Possible errors
+     are 'bfd_error_no_memory', 'bfd_error_invalid_target' or
+     'system_call' error.
 
-   A copy of the FILENAME argument is stored in the newly created BFD.
-It can be accessed via the bfd_get_filename() macro.
+     A copy of the FILENAME argument is stored in the newly created BFD.
+     It can be accessed via the bfd_get_filename() macro.
 
-2.14.1.5 'bfd_openr_iovec'
-..........................
+2.14.1.6 'bfd_fdopenr'
+......................
 
-*Synopsis*
-     bfd *bfd_openr_iovec (const char *filename, const char *target,
-         void *(*open_func) (struct bfd *nbfd,
-         void *open_closure),
-         void *open_closure,
-         file_ptr (*pread_func) (struct bfd *nbfd,
-         void *stream,
-         void *buf,
-         file_ptr nbytes,
-         file_ptr offset),
-         int (*close_func) (struct bfd *nbfd,
-         void *stream),
-         int (*stat_func) (struct bfd *abfd,
-         void *stream,
-         struct stat *sb));
-   *Description*
-Create and return a BFD backed by a read-only STREAM.  The STREAM is
-created using OPEN_FUNC, accessed using PREAD_FUNC and destroyed using
-CLOSE_FUNC.
+ -- Function: bfd *bfd_fdopenr (const char *filename, const char
+          *target, int fd);
+     'bfd_fdopenr' is to 'bfd_fopenr' much like 'fdopen' is to 'fopen'.
+     It opens a BFD on a file already described by the FD supplied.
+
+     When the file is later 'bfd_close'd, the file descriptor will be
+     closed.  If the caller desires that this file descriptor be cached
+     by BFD (opened as needed, closed as needed to free descriptors for
+     other opens), with the supplied FD used as an initial file
+     descriptor (but subject to closure at any time), call
+     bfd_set_cacheable(bfd, 1) on the returned BFD. The default is to
+     assume no caching; the file descriptor will remain open until
+     'bfd_close', and will not be affected by BFD operations on other
+     files.
 
-   Calls 'bfd_find_target', so TARGET is interpreted as by that
-function.
+     Possible errors are 'bfd_error_no_memory',
+     'bfd_error_invalid_target' and 'bfd_error_system_call'.
 
-   Calls OPEN_FUNC (which can call 'bfd_zalloc' and 'bfd_get_filename')
-to obtain the read-only stream backing the BFD. OPEN_FUNC either
-succeeds returning the non-'NULL' STREAM, or fails returning 'NULL'
-(setting 'bfd_error').
-
-   Calls PREAD_FUNC to request NBYTES of data from STREAM starting at
-OFFSET (e.g., via a call to 'bfd_read').  PREAD_FUNC either succeeds
-returning the number of bytes read (which can be less than NBYTES when
-end-of-file), or fails returning -1 (setting 'bfd_error').
-
-   Calls CLOSE_FUNC when the BFD is later closed using 'bfd_close'.
-CLOSE_FUNC either succeeds returning 0, or fails returning -1 (setting
-'bfd_error').
-
-   Calls STAT_FUNC to fill in a stat structure for bfd_stat,
-bfd_get_size, and bfd_get_mtime calls.  STAT_FUNC returns 0 on success,
-or returns -1 on failure (setting 'bfd_error').
-
-   If 'bfd_openr_iovec' returns 'NULL' then an error has occurred.
-Possible errors are 'bfd_error_no_memory', 'bfd_error_invalid_target'
-and 'bfd_error_system_call'.
+     On error, FD is closed.
 
-   A copy of the FILENAME argument is stored in the newly created BFD.
-It can be accessed via the bfd_get_filename() macro.
+     A copy of the FILENAME argument is stored in the newly created BFD.
+     It can be accessed via the bfd_get_filename() macro.
 
-2.14.1.6 'bfd_openw'
-....................
+2.14.1.7 'bfd_fdopenw'
+......................
 
-*Synopsis*
-     bfd *bfd_openw (const char *filename, const char *target);
-   *Description*
-Create a BFD, associated with file FILENAME, using the file format
-TARGET, and return a pointer to it.
+ -- Function: bfd *bfd_fdopenw (const char *filename, const char
+          *target, int fd);
+     'bfd_fdopenw' is exactly like 'bfd_fdopenr' with the exception that
+     the resulting BFD is suitable for output.
 
-   Possible errors are 'bfd_error_system_call', 'bfd_error_no_memory',
-'bfd_error_invalid_target'.
+2.14.1.8 'bfd_openstreamr'
+..........................
 
-   A copy of the FILENAME argument is stored in the newly created BFD.
-It can be accessed via the bfd_get_filename() macro.
+ -- Function: bfd *bfd_openstreamr (const char * filename, const char *
+          target, void * stream);
+     Open a BFD for read access on an existing stdio stream.  When the
+     BFD is passed to 'bfd_close', the stream will be closed.
 
-2.14.1.7 'bfd_close'
-....................
+     A copy of the FILENAME argument is stored in the newly created BFD.
+     It can be accessed via the bfd_get_filename() macro.
 
-*Synopsis*
-     bfd_boolean bfd_close (bfd *abfd);
-   *Description*
-Close a BFD. If the BFD was open for writing, then pending operations
-are completed and the file written out and closed.  If the created file
-is executable, then 'chmod' is called to mark it as such.
-
-   All memory attached to the BFD is released.
+2.14.1.9 'bfd_openr_iovec'
+..........................
 
-   The file descriptor associated with the BFD is closed (even if it was
-passed in to BFD by 'bfd_fdopenr').
+ -- Function: bfd *bfd_openr_iovec (const char *filename, const char
+          *target, void *(*open_func) (struct bfd *nbfd, void
+          *open_closure), void *open_closure, file_ptr (*pread_func)
+          (struct bfd *nbfd, void *stream, void *buf, file_ptr nbytes,
+          file_ptr offset), int (*close_func) (struct bfd *nbfd, void
+          *stream), int (*stat_func) (struct bfd *abfd, void *stream,
+          struct stat *sb));
+     Create and return a BFD backed by a read-only STREAM.  The STREAM
+     is created using OPEN_FUNC, accessed using PREAD_FUNC and destroyed
+     using CLOSE_FUNC.
+
+     Calls 'bfd_find_target', so TARGET is interpreted as by that
+     function.
+
+     Calls OPEN_FUNC (which can call 'bfd_zalloc' and
+     'bfd_get_filename') to obtain the read-only stream backing the BFD.
+     OPEN_FUNC either succeeds returning the non-'NULL' STREAM, or fails
+     returning 'NULL' (setting 'bfd_error').
+
+     Calls PREAD_FUNC to request NBYTES of data from STREAM starting at
+     OFFSET (e.g., via a call to 'bfd_read').  PREAD_FUNC either
+     succeeds returning the number of bytes read (which can be less than
+     NBYTES when end-of-file), or fails returning -1 (setting
+     'bfd_error').
+
+     Calls CLOSE_FUNC when the BFD is later closed using 'bfd_close'.
+     CLOSE_FUNC either succeeds returning 0, or fails returning -1
+     (setting 'bfd_error').
+
+     Calls STAT_FUNC to fill in a stat structure for bfd_stat,
+     bfd_get_size, and bfd_get_mtime calls.  STAT_FUNC returns 0 on
+     success, or returns -1 on failure (setting 'bfd_error').
+
+     If 'bfd_openr_iovec' returns 'NULL' then an error has occurred.
+     Possible errors are 'bfd_error_no_memory',
+     'bfd_error_invalid_target' and 'bfd_error_system_call'.
 
-   *Returns*
-'TRUE' is returned if all is ok, otherwise 'FALSE'.
+     A copy of the FILENAME argument is stored in the newly created BFD.
+     It can be accessed via the bfd_get_filename() macro.
 
-2.14.1.8 'bfd_close_all_done'
-.............................
+2.14.1.10 'bfd_openw'
+.....................
 
-*Synopsis*
-     bfd_boolean bfd_close_all_done (bfd *);
-   *Description*
-Close a BFD. Differs from 'bfd_close' since it does not complete any
-pending operations.  This routine would be used if the application had
-just used BFD for swapping and didn't want to use any of the writing
-code.
+ -- Function: bfd *bfd_openw (const char *filename, const char *target);
+     Create a BFD, associated with file FILENAME, using the file format
+     TARGET, and return a pointer to it.
+
+     Possible errors are 'bfd_error_system_call', 'bfd_error_no_memory',
+     'bfd_error_invalid_target'.
 
-   If the created file is executable, then 'chmod' is called to mark it
-as such.
+     A copy of the FILENAME argument is stored in the newly created BFD.
+     It can be accessed via the bfd_get_filename() macro.
 
-   All memory attached to the BFD is released.
+2.14.1.11 'bfd_elf_bfd_from_remote_memory'
+..........................................
 
-   *Returns*
-'TRUE' is returned if all is ok, otherwise 'FALSE'.
+ -- Function: bfd *bfd_elf_bfd_from_remote_memory (bfd *templ, bfd_vma
+          ehdr_vma, bfd_size_type size, bfd_vma *loadbasep, int
+          (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
+          bfd_size_type len));
+     Create a new BFD as if by bfd_openr.  Rather than opening a file,
+     reconstruct an ELF file by reading the segments out of remote
+     memory based on the ELF file header at EHDR_VMA and the ELF program
+     headers it points to.  If non-zero, SIZE is the known extent of the
+     object.  If not null, *LOADBASEP is filled in with the difference
+     between the VMAs from which the segments were read, and the VMAs
+     the file headers (and hence BFD's idea of each section's VMA) put
+     them at.
+
+     The function TARGET_READ_MEMORY is called to copy LEN bytes from
+     the remote memory at target address VMA into the local buffer at
+     MYADDR; it should return zero on success or an errno code on
+     failure.  TEMPL must be a BFD for an ELF target with the word size
+     and byte order found in the remote memory.
 
-2.14.1.9 'bfd_create'
+2.14.1.12 'bfd_close'
 .....................
 
-*Synopsis*
-     bfd *bfd_create (const char *filename, bfd *templ);
-   *Description*
-Create a new BFD in the manner of 'bfd_openw', but without opening a
-file.  The new BFD takes the target from the target used by TEMPL.  The
-format is always set to 'bfd_object'.
+ -- Function: bool bfd_close (bfd *abfd);
+     Close a BFD. If the BFD was open for writing, then pending
+     operations are completed and the file written out and closed.  If
+     the created file is executable, then 'chmod' is called to mark it
+     as such.
 
-   A copy of the FILENAME argument is stored in the newly created BFD.
-It can be accessed via the bfd_get_filename() macro.
+     All memory attached to the BFD is released.
 
-2.14.1.10 'bfd_make_writable'
-.............................
+     The file descriptor associated with the BFD is closed (even if it
+     was passed in to BFD by 'bfd_fdopenr').
 
-*Synopsis*
-     bfd_boolean bfd_make_writable (bfd *abfd);
-   *Description*
-Takes a BFD as created by 'bfd_create' and converts it into one like as
-returned by 'bfd_openw'.  It does this by converting the BFD to
-BFD_IN_MEMORY. It's assumed that you will call 'bfd_make_readable' on
-this bfd later.
+     'TRUE' is returned if all is ok, otherwise 'FALSE'.
 
-   *Returns*
-'TRUE' is returned if all is ok, otherwise 'FALSE'.
+2.14.1.13 'bfd_close_all_done'
+..............................
 
-2.14.1.11 'bfd_make_readable'
-.............................
+ -- Function: bool bfd_close_all_done (bfd *);
+     Close a BFD. Differs from 'bfd_close' since it does not complete
+     any pending operations.  This routine would be used if the
+     application had just used BFD for swapping and didn't want to use
+     any of the writing code.
 
-*Synopsis*
-     bfd_boolean bfd_make_readable (bfd *abfd);
-   *Description*
-Takes a BFD as created by 'bfd_create' and 'bfd_make_writable' and
-converts it into one like as returned by 'bfd_openr'.  It does this by
-writing the contents out to the memory buffer, then reversing the
-direction.
+     If the created file is executable, then 'chmod' is called to mark
+     it as such.
 
-   *Returns*
-'TRUE' is returned if all is ok, otherwise 'FALSE'.
+     All memory attached to the BFD is released.
 
-2.14.1.12 'bfd_alloc'
-.....................
+     'TRUE' is returned if all is ok, otherwise 'FALSE'.
 
-*Synopsis*
-     void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
-   *Description*
-Allocate a block of WANTED bytes of memory attached to 'abfd' and return
-a pointer to it.
-
-2.14.1.13 'bfd_alloc2'
+2.14.1.14 'bfd_create'
 ......................
 
-*Synopsis*
-     void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
-   *Description*
-Allocate a block of NMEMB elements of SIZE bytes each of memory attached
-to 'abfd' and return a pointer to it.
+ -- Function: bfd *bfd_create (const char *filename, bfd *templ);
+     Create a new BFD in the manner of 'bfd_openw', but without opening
+     a file.  The new BFD takes the target from the target used by
+     TEMPL.  The format is always set to 'bfd_object'.
 
-2.14.1.14 'bfd_zalloc'
-......................
+     A copy of the FILENAME argument is stored in the newly created BFD.
+     It can be accessed via the bfd_get_filename() macro.
 
-*Synopsis*
-     void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
-   *Description*
-Allocate a block of WANTED bytes of zeroed memory attached to 'abfd' and
-return a pointer to it.
+2.14.1.15 'bfd_make_writable'
+.............................
 
-2.14.1.15 'bfd_zalloc2'
-.......................
+ -- Function: bool bfd_make_writable (bfd *abfd);
+     Takes a BFD as created by 'bfd_create' and converts it into one
+     like as returned by 'bfd_openw'.  It does this by converting the
+     BFD to BFD_IN_MEMORY. It's assumed that you will call
+     'bfd_make_readable' on this bfd later.
 
-*Synopsis*
-     void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
-   *Description*
-Allocate a block of NMEMB elements of SIZE bytes each of zeroed memory
-attached to 'abfd' and return a pointer to it.
+     'TRUE' is returned if all is ok, otherwise 'FALSE'.
 
-2.14.1.16 'bfd_calc_gnu_debuglink_crc32'
-........................................
+2.14.1.16 'bfd_make_readable'
+.............................
 
-*Synopsis*
-     unsigned long bfd_calc_gnu_debuglink_crc32
-        (unsigned long crc, const unsigned char *buf, bfd_size_type len);
-   *Description*
-Computes a CRC value as used in the .gnu_debuglink section.  Advances
-the previously computed CRC value by computing and adding in the crc32
-for LEN bytes of BUF.
+ -- Function: bool bfd_make_readable (bfd *abfd);
+     Takes a BFD as created by 'bfd_create' and 'bfd_make_writable' and
+     converts it into one like as returned by 'bfd_openr'.  It does this
+     by writing the contents out to the memory buffer, then reversing
+     the direction.
 
-   *Returns*
-Return the updated CRC32 value.
+     'TRUE' is returned if all is ok, otherwise 'FALSE'.
 
-2.14.1.17 'bfd_get_debug_link_info_1'
-.....................................
+2.14.1.17 'bfd_calc_gnu_debuglink_crc32'
+........................................
 
-*Synopsis*
-     char *bfd_get_debug_link_info_1 (bfd *abfd, void *crc32_out);
-   *Description*
-Extracts the filename and CRC32 value for any separate debug information
-file associated with ABFD.
-
-   The CRC32_OUT parameter is an untyped pointer because this routine is
-used as a 'get_func_type' function, but it is expected to be an unsigned
-long pointer.
-
-   *Returns*
-The filename of the associated debug information file, or NULL if there
-is no such file.  If the filename was found then the contents of
-CRC32_OUT are updated to hold the corresponding CRC32 value for the
-file.
+ -- Function: uint32_t bfd_calc_gnu_debuglink_crc32 (uint32_t crc, const
+          bfd_byte *buf, bfd_size_type len);
+     Computes a CRC value as used in the .gnu_debuglink section.
+     Advances the previously computed CRC value by computing and adding
+     in the crc32 for LEN bytes of BUF.
 
-   The returned filename is allocated with 'malloc'; freeing it is the
-responsibility of the caller.
+     Return the updated CRC32 value.
 
 2.14.1.18 'bfd_get_debug_link_info'
 ...................................
 
-*Synopsis*
-     char *bfd_get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
-   *Description*
-Extracts the filename and CRC32 value for any separate debug information
-file associated with ABFD.
-
-   *Returns*
-The filename of the associated debug information file, or NULL if there
-is no such file.  If the filename was found then the contents of
-CRC32_OUT are updated to hold the corresponding CRC32 value for the
-file.
+ -- Function: char *bfd_get_debug_link_info (bfd *abfd, uint32_t
+          *crc32_out);
+     Extracts the filename and CRC32 value for any separate debug
+     information file associated with ABFD.
+
+     Returns the filename of the associated debug information file, or
+     NULL if there is no such file.  If the filename was found then the
+     contents of CRC32_OUT are updated to hold the corresponding CRC32
+     value for the file.
 
-   The returned filename is allocated with 'malloc'; freeing it is the
-responsibility of the caller.
+     The returned filename is allocated with 'malloc'; freeing it is the
+     responsibility of the caller.
 
 2.14.1.19 'bfd_get_alt_debug_link_info'
 .......................................
 
-*Synopsis*
-     char *bfd_get_alt_debug_link_info (bfd * abfd,
-         bfd_size_type *buildid_len,
-         bfd_byte **buildid_out);
-   *Description*
-Fetch the filename and BuildID value for any alternate debuginfo
-associated with ABFD.  Return NULL if no such info found, otherwise
-return filename and update BUILDID_LEN and BUILDID_OUT.  The returned
-filename and build_id are allocated with 'malloc'; freeing them is the
-responsibility of the caller.
-
-2.14.1.20 'separate_debug_file_exists'
-......................................
-
-*Synopsis*
-     bfd_boolean separate_debug_file_exists
-        (char *name, void *crc32_p);
-   *Description*
-Checks to see if NAME is a file and if its contents match CRC32, which
-is a pointer to an 'unsigned long' containing a CRC32.
-
-   The CRC32_P parameter is an untyped pointer because this routine is
-used as a 'check_func_type' function.
+ -- Function: char *bfd_get_alt_debug_link_info (bfd * abfd,
+          bfd_size_type *buildid_len, bfd_byte **buildid_out);
+     Fetch the filename and BuildID value for any alternate debuginfo
+     associated with ABFD.  Return NULL if no such info found, otherwise
+     return filename and update BUILDID_LEN and BUILDID_OUT.  The
+     returned filename and build_id are allocated with 'malloc'; freeing
+     them is the responsibility of the caller.
 
-2.14.1.21 'separate_alt_debug_file_exists'
-..........................................
-
-*Synopsis*
-     bfd_boolean separate_alt_debug_file_exists
-        (char *name, void *unused);
-   *Description*
-Checks to see if NAME is a file.
-
-2.14.1.22 'find_separate_debug_file'
+2.14.1.20 'bfd_follow_gnu_debuglink'
 ....................................
 
-*Synopsis*
-     char *find_separate_debug_file
-        (bfd *abfd, const char *dir, bfd_boolean include_dirs,
-         get_func_type get, check_func_type check, void *data);
-   *Description*
-Searches for a debug information file corresponding to ABFD.
-
-   The name of the separate debug info file is returned by the GET
-function.  This function scans various fixed locations in the
-filesystem, including the file tree rooted at DIR.  If the INCLUDE_DIRS
-parameter is true then the directory components of ABFD's filename will
-be included in the searched locations.
-
-   DATA is passed unmodified to the GET and CHECK functions.  It is
-generally used to implement build-id-like matching in the callback
-functions.
-
-   *Returns*
-Returns the filename of the first file to be found which receives a TRUE
-result from the CHECK function.  Returns NULL if no valid file could be
-found.
-
-2.14.1.23 'bfd_follow_gnu_debuglink'
-....................................
+ -- Function: char *bfd_follow_gnu_debuglink (bfd *abfd, const char
+          *dir);
+     Takes a BFD and searches it for a .gnu_debuglink section.  If this
+     section is found, it examines the section for the name and checksum
+     of a '.debug' file containing auxiliary debugging information.  It
+     then searches the filesystem for this .debug file in some standard
+     locations, including the directory tree rooted at DIR, and if found
+     returns the full filename.
+
+     If DIR is NULL, the search will take place starting at the current
+     directory.
+
+     Returns 'NULL' on any errors or failure to locate the .debug file,
+     otherwise a pointer to a heap-allocated string containing the
+     filename.  The caller is responsible for freeing this string.
 
-*Synopsis*
-     char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
-   *Description*
-Takes a BFD and searches it for a .gnu_debuglink section.  If this
-section is found, it examines the section for the name and checksum of a
-'.debug' file containing auxiliary debugging information.  It then
-searches the filesystem for this .debug file in some standard locations,
-including the directory tree rooted at DIR, and if found returns the
-full filename.
-
-   If DIR is NULL, the search will take place starting at the current
-directory.
-
-   *Returns*
-'NULL' on any errors or failure to locate the .debug file, otherwise a
-pointer to a heap-allocated string containing the filename.  The caller
-is responsible for freeing this string.
-
-2.14.1.24 'bfd_follow_gnu_debugaltlink'
+2.14.1.21 'bfd_follow_gnu_debugaltlink'
 .......................................
 
-*Synopsis*
-     char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir);
-   *Description*
-Takes a BFD and searches it for a .gnu_debugaltlink section.  If this
-section is found, it examines the section for the name of a file
-containing auxiliary debugging information.  It then searches the
-filesystem for this file in a set of standard locations, including the
-directory tree rooted at DIR, and if found returns the full filename.
-
-   If DIR is NULL, the search will take place starting at the current
-directory.
-
-   *Returns*
-'NULL' on any errors or failure to locate the debug file, otherwise a
-pointer to a heap-allocated string containing the filename.  The caller
-is responsible for freeing this string.
+ -- Function: char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char
+          *dir);
+     Takes a BFD and searches it for a .gnu_debugaltlink section.  If
+     this section is found, it examines the section for the name of a
+     file containing auxiliary debugging information.  It then searches
+     the filesystem for this file in a set of standard locations,
+     including the directory tree rooted at DIR, and if found returns
+     the full filename.
+
+     If DIR is NULL, the search will take place starting at the current
+     directory.
+
+     Returns 'NULL' on any errors or failure to locate the debug file,
+     otherwise a pointer to a heap-allocated string containing the
+     filename.  The caller is responsible for freeing this string.
 
-2.14.1.25 'bfd_create_gnu_debuglink_section'
+2.14.1.22 'bfd_create_gnu_debuglink_section'
 ............................................
 
-*Synopsis*
-     struct bfd_section *bfd_create_gnu_debuglink_section
-        (bfd *abfd, const char *filename);
-   *Description*
-Takes a BFD and adds a .gnu_debuglink section to it.  The section is
-sized to be big enough to contain a link to the specified FILENAME.
-
-   *Returns*
-A pointer to the new section is returned if all is ok.  Otherwise 'NULL'
-is returned and bfd_error is set.
-
-2.14.1.26 'bfd_fill_in_gnu_debuglink_section'
-.............................................
+ -- Function: struct bfd_section *bfd_create_gnu_debuglink_section (bfd
+          *abfd, const char *filename);
+     Takes a BFD and adds a .gnu_debuglink section to it.  The section
+     is sized to be big enough to contain a link to the specified
+     FILENAME.
 
-*Synopsis*
-     bfd_boolean bfd_fill_in_gnu_debuglink_section
-        (bfd *abfd, struct bfd_section *sect, const char *filename);
-   *Description*
-Takes a BFD and containing a .gnu_debuglink section SECT and fills in
-the contents of the section to contain a link to the specified FILENAME.
-The filename should be relative to the current directory.
-
-   *Returns*
-'TRUE' is returned if all is ok.  Otherwise 'FALSE' is returned and
-bfd_error is set.
-
-2.14.1.27 'get_build_id'
-........................
+     A pointer to the new section is returned if all is ok.  Otherwise
+     'NULL' is returned and bfd_error is set.
 
-*Synopsis*
-     struct bfd_build_id * get_build_id (bfd *abfd);
-   *Description*
-Finds the build-id associated with ABFD.  If the build-id is extracted
-from the note section then a build-id structure is built for it, using
-memory allocated to ABFD, and this is then attached to the ABFD.
-
-   *Returns*
-Returns a pointer to the build-id structure if a build-id could be
-found.  If no build-id is found NULL is returned and error code is set.
-
-2.14.1.28 'get_build_id_name'
-.............................
+2.14.1.23 'bfd_fill_in_gnu_debuglink_section'
+.............................................
 
-*Synopsis*
-     char * get_build_id_name (bfd *abfd, void *build_id_out_p)
-   *Description*
-Searches ABFD for a build-id, and then constructs a pathname from it.
-The path is computed as .build-id/NN/NN+NN.debug where NNNN+NN is the
-build-id value as a hexadecimal string.
-
-   *Returns*
-Returns the constructed filename or NULL upon error.  It is the caller's
-responsibility to free the memory used to hold the filename.  If a
-filename is returned then the BUILD_ID_OUT_P parameter (which points to
-a 'struct bfd_build_id' pointer) is set to a pointer to the build_id
-structure.
+ -- Function: bool bfd_fill_in_gnu_debuglink_section (bfd *abfd, struct
+          bfd_section *sect, const char *filename);
+     Takes a BFD and containing a .gnu_debuglink section SECT and fills
+     in the contents of the section to contain a link to the specified
+     FILENAME.  The filename should be absolute or relative to the
+     current directory.
 
-2.14.1.29 'check_build_id_file'
-...............................
+     'TRUE' is returned if all is ok.  Otherwise 'FALSE' is returned and
+     bfd_error is set.
 
-*Synopsis*
-     bfd_boolean check_build_id_file (char *name, void *buildid_p);
-   *Description*
-Checks to see if NAME is a readable file and if its build-id matches
-BUILDID.
-
-   *Returns*
-Returns TRUE if the file exists, is readable, and contains a build-id
-which matches the build-id pointed at by BUILD_ID_P (which is really a
-'struct bfd_build_id **').
-
-2.14.1.30 'bfd_follow_build_id_debuglink'
+2.14.1.24 'bfd_follow_build_id_debuglink'
 .........................................
 
-*Synopsis*
-     char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir);
-   *Description*
-Takes ABFD and searches it for a .note.gnu.build-id section.  If this
-section is found, it extracts the value of the NT_GNU_BUILD_ID note,
-which should be a hexadecimal value NNNN+NN (for 32+ hex digits).  It
-then searches the filesystem for a file named .BUILD-ID/NN/NN+NN.DEBUG
-in a set of standard locations, including the directory tree rooted at
-DIR.  The filename of the first matching file to be found is returned.
-A matching file should contain a .note.gnu.build-id section with the
-same NNNN+NN note as ABFD, although this check is currently not
-implemented.
-
-   If DIR is NULL, the search will take place starting at the current
-directory.
-
-   *Returns*
-'NULL' on any errors or failure to locate the debug file, otherwise a
-pointer to a heap-allocated string containing the filename.  The caller
-is responsible for freeing this string.
+ -- Function: char *bfd_follow_build_id_debuglink (bfd *abfd, const char
+          *dir);
+     Takes ABFD and searches it for a .note.gnu.build-id section.  If
+     this section is found, it extracts the value of the NT_GNU_BUILD_ID
+     note, which should be a hexadecimal value NNNN+NN (for 32+ hex
+     digits).  It then searches the filesystem for a file named
+     .BUILD-ID/NN/NN+NN.DEBUG in a set of standard locations, including
+     the directory tree rooted at DIR.  The filename of the first
+     matching file to be found is returned.  A matching file should
+     contain a .note.gnu.build-id section with the same NNNN+NN note as
+     ABFD, although this check is currently not implemented.
+
+     If DIR is NULL, the search will take place starting at the current
+     directory.
+
+     Returns 'NULL' on any errors or failure to locate the debug file,
+     otherwise a pointer to a heap-allocated string containing the
+     filename.  The caller is responsible for freeing this string.
 
-2.14.1.31 'bfd_set_filename'
+2.14.1.25 'bfd_set_filename'
 ............................
 
-*Synopsis*
-     void bfd_set_filename (bfd *abfd, char *filename);
-   *Description*
-Set the filename of ABFD.  The old filename, if any, is freed.  FILENAME
-must be allocated using 'xmalloc'.  After this call, it is owned ABFD.
+ -- Function: const char *bfd_set_filename (bfd *abfd, const char
+          *filename);
+     Set the filename of ABFD, copying the FILENAME parameter to
+     bfd_alloc'd memory owned by ABFD.  Returns a pointer the newly
+     allocated name, or NULL if the allocation failed.
 
 
 File: bfd.info,  Node: Internal,  Next: File Caching,  Prev: Opening and Closing,  Up: BFD front end
@@ -9282,26 +8813,103 @@ File: bfd.info,  Node: Internal,  Next:
 2.15.1 Internal functions
 -------------------------
 
-*Description*
 These routines are used within BFD. They are not intended for export,
 but are documented here for completeness.
 
-2.15.1.1 'bfd_write_bigendian_4byte_int'
+2.15.1.1 'bfd_malloc'
+.....................
+
+ -- Function: void *bfd_malloc (bfd_size_type *size*);
+     Returns a pointer to an allocated block of memory that is at least
+     SIZE bytes long.  If SIZE is 0 then it will be treated as if it
+     were 1.  If SIZE is too big then NULL will be returned.  Returns
+     NULL upon error and sets bfd_error.
+
+2.15.1.2 'bfd_realloc'
+......................
+
+ -- Function: void *bfd_realloc (void **mem*, bfd_size_type *size*);
+     Returns a pointer to an allocated block of memory that is at least
+     SIZE bytes long.  If SIZE is 0 then it will be treated as if it
+     were 1.  If SIZE is too big then NULL will be returned.  If MEM is
+     not NULL then it must point to an allocated block of memory.  If
+     this block is large enough then MEM may be used as the return value
+     for this function, but this is not guaranteed.
+
+     If MEM is not returned then the first N bytes in the returned block
+     will be identical to the first N bytes in region pointed to by MEM,
+     where N is the lessor of SIZE and the length of the region of
+     memory currently addressed by MEM.
+
+     Returns NULL upon error and sets bfd_error.
+
+2.15.1.3 'bfd_realloc_or_free'
+..............................
+
+ -- Function: void *bfd_realloc_or_free (void **mem*, bfd_size_type
+          *size*);
+     Returns a pointer to an allocated block of memory that is at least
+     SIZE bytes long.  If SIZE is 0 then no memory will be allocated,
+     MEM will be freed, and NULL will be returned.  This will not cause
+     bfd_error to be set.
+
+     If SIZE is too big then NULL will be returned and bfd_error will be
+     set.  If MEM is not NULL then it must point to an allocated block
+     of memory.  If this block is large enough then MEM may be used as
+     the return value for this function, but this is not guaranteed.
+
+     If MEM is not returned then the first N bytes in the returned block
+     will be identical to the first N bytes in region pointed to by MEM,
+     where N is the lessor of SIZE and the length of the region of
+     memory currently addressed by MEM.
+
+2.15.1.4 'bfd_zmalloc'
+......................
+
+ -- Function: void *bfd_zmalloc (bfd_size_type *size*);
+     Returns a pointer to an allocated block of memory that is at least
+     SIZE bytes long.  If SIZE is 0 then it will be treated as if it
+     were 1.  If SIZE is too big then NULL will be returned.  Returns
+     NULL upon error and sets bfd_error.
+
+     If NULL is not returned then the allocated block of memory will
+     have been cleared.
+
+2.15.1.5 'bfd_alloc'
+....................
+
+ -- Function: void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
+     Allocate a block of WANTED bytes of memory attached to 'abfd' and
+     return a pointer to it.
+
+2.15.1.6 'bfd_zalloc'
+.....................
+
+ -- Function: void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
+     Allocate a block of WANTED bytes of zeroed memory attached to
+     'abfd' and return a pointer to it.
+
+2.15.1.7 'bfd_release'
+......................
+
+ -- Function: void bfd_release (bfd *, void *);
+     Free a block allocated for a BFD. Note: Also frees all more
+     recently allocated blocks!
+
+2.15.1.8 'bfd_write_bigendian_4byte_int'
 ........................................
 
-*Synopsis*
-     bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
-   *Description*
-Write a 4 byte integer I to the output BFD ABFD, in big endian order
-regardless of what else is going on.  This is useful in archives.
+ -- Function: bool bfd_write_bigendian_4byte_int (bfd *, unsigned int);
+     Write a 4 byte integer I to the output BFD ABFD, in big endian
+     order regardless of what else is going on.  This is useful in
+     archives.
 
-2.15.1.2 'bfd_put_size'
+2.15.1.9 'bfd_put_size'
 .......................
 
-2.15.1.3 'bfd_get_size'
-.......................
+2.15.1.10 'bfd_get_size'
+........................
 
-*Description*
 These macros as used for reading and writing raw data in sections; each
 access (except for bytes) is vectored through the target format of the
 BFD and mangled accordingly.  The mangling performs any necessary endian
@@ -9321,13 +8929,13 @@ less than a 'bfd_vma', use 'gcc -Wconver
      /* Byte swapping macros for user section data.  */
 
      #define bfd_put_8(abfd, val, ptr) \
-       ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
+       ((void) (*((bfd_byte *) (ptr)) = (val) & 0xff))
      #define bfd_put_signed_8 \
        bfd_put_8
      #define bfd_get_8(abfd, ptr) \
-       (*(const unsigned char *) (ptr) & 0xff)
+       ((bfd_vma) *(const bfd_byte *) (ptr) & 0xff)
      #define bfd_get_signed_8(abfd, ptr) \
-       (((*(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
+       ((((bfd_signed_vma) *(const bfd_byte *) (ptr) & 0xff) ^ 0x80) - 0x80)
 
      #define bfd_put_16(abfd, val, ptr) \
        BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
@@ -9371,7 +8979,7 @@ less than a 'bfd_vma', use 'gcc -Wconver
        BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
 
      #define bfd_get(bits, abfd, ptr)                       \
-       ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \
+       ((bits) == 8 ? bfd_get_8 (abfd, ptr)                 \
         : (bits) == 16 ? bfd_get_16 (abfd, ptr)             \
         : (bits) == 32 ? bfd_get_32 (abfd, ptr)             \
         : (bits) == 64 ? bfd_get_64 (abfd, ptr)             \
@@ -9385,10 +8993,9 @@ less than a 'bfd_vma', use 'gcc -Wconver
         : (abort (), (void) 0))
 
 
-2.15.1.4 'bfd_h_put_size'
-.........................
+2.15.1.11 'bfd_h_put_size'
+..........................
 
-*Description*
 These macros have the same function as their 'bfd_get_x' brethren,
 except that they are used for removing information for the header
 records of object files.  Believe it or not, some object files keep
@@ -9454,14 +9061,36 @@ order.
 
 
 
-2.15.1.5 'bfd_log2'
-...................
+2.15.1.12 'Byte swapping routines.'
+...................................
 
-*Synopsis*
-     unsigned int bfd_log2 (bfd_vma x);
-   *Description*
-Return the log base 2 of the value supplied, rounded up.  E.g., an X of
-1025 returns 11.  A X of 0 returns 0.
+ -- Function: uint64_t bfd_getb64 (const void *); uint64_t bfd_getl64
+          (const void *); int64_t bfd_getb_signed_64 (const void *);
+          int64_t bfd_getl_signed_64 (const void *); bfd_vma bfd_getb32
+          (const void *); bfd_vma bfd_getl32 (const void *);
+          bfd_signed_vma bfd_getb_signed_32 (const void *);
+          bfd_signed_vma bfd_getl_signed_32 (const void *); bfd_vma
+          bfd_getb16 (const void *); bfd_vma bfd_getl16 (const void *);
+          bfd_signed_vma bfd_getb_signed_16 (const void *);
+          bfd_signed_vma bfd_getl_signed_16 (const void *); void
+          bfd_putb64 (uint64_t, void *); void bfd_putl64 (uint64_t, void
+          *); void bfd_putb32 (bfd_vma, void *); void bfd_putl32
+          (bfd_vma, void *); void bfd_putb24 (bfd_vma, void *); void
+          bfd_putl24 (bfd_vma, void *); void bfd_putb16 (bfd_vma, void
+          *); void bfd_putl16 (bfd_vma, void *); uint64_t bfd_get_bits
+          (const void *, int, bool); void bfd_put_bits (uint64_t, void
+          *, int, bool);
+     Read and write integers in a particular endian order.  getb and
+     putb functions handle big-endian, getl and putl handle
+     little-endian.  bfd_get_bits and bfd_put_bits specify big-endian by
+     passing TRUE in the last parameter, little-endian by passing FALSE.
+
+2.15.1.13 'bfd_log2'
+....................
+
+ -- Function: unsigned int bfd_log2 (bfd_vma x);
+     Return the log base 2 of the value supplied, rounded up.  E.g., an
+     X of 1025 returns 11.  A X of 0 returns 0.
 
 
 File: bfd.info,  Node: File Caching,  Next: Linker Functions,  Prev: Internal,  Up: BFD front end
@@ -9484,48 +9113,46 @@ opens the one wanted, returning its file
 2.16.1.1 'bfd_cache_init'
 .........................
 
-*Synopsis*
-     bfd_boolean bfd_cache_init (bfd *abfd);
-   *Description*
-Add a newly opened BFD to the cache.
+ -- Function: bool bfd_cache_init (bfd *abfd);
+     Add a newly opened BFD to the cache.
 
 2.16.1.2 'bfd_cache_close'
 ..........................
 
-*Synopsis*
-     bfd_boolean bfd_cache_close (bfd *abfd);
-   *Description*
-Remove the BFD ABFD from the cache.  If the attached file is open, then
-close it too.
-
-   *Returns*
-'FALSE' is returned if closing the file fails, 'TRUE' is returned if all
-is well.
+ -- Function: bool bfd_cache_close (bfd *abfd);
+     Remove the BFD ABFD from the cache.  If the attached file is open,
+     then close it too.
+
+     'FALSE' is returned if closing the file fails, 'TRUE' is returned
+     if all is well.
 
 2.16.1.3 'bfd_cache_close_all'
 ..............................
 
-*Synopsis*
-     bfd_boolean bfd_cache_close_all (void);
-   *Description*
-Remove all BFDs from the cache.  If the attached file is open, then
-close it too.
-
-   *Returns*
-'FALSE' is returned if closing one of the file fails, 'TRUE' is returned
-if all is well.
+ -- Function: bool bfd_cache_close_all (void);
+     Remove all BFDs from the cache.  If the attached file is open, then
+     close it too.  Note - despite its name this function will close a
+     BFD even if it is not marked as being cacheable, ie even if
+     bfd_get_cacheable() returns false.
+
+     'FALSE' is returned if closing one of the file fails, 'TRUE' is
+     returned if all is well.
 
-2.16.1.4 'bfd_open_file'
+2.16.1.4 'bfd_cache_size'
+.........................
+
+ -- Function: unsigned bfd_cache_size (void);
+     Return the number of open files in the cache.
+
+2.16.1.5 'bfd_open_file'
 ........................
 
-*Synopsis*
-     FILE* bfd_open_file (bfd *abfd);
-   *Description*
-Call the OS to open a file for ABFD.  Return the 'FILE *' (possibly
-'NULL') that results from this operation.  Set up the BFD so that future
-accesses know the file is open.  If the 'FILE *' returned is 'NULL',
-then it won't have been put in the cache, so it won't have to be removed
-from it.
+ -- Function: FILE* bfd_open_file (bfd *abfd);
+     Call the OS to open a file for ABFD.  Return the 'FILE *' (possibly
+     'NULL') that results from this operation.  Set up the BFD so that
+     future accesses know the file is open.  If the 'FILE *' returned is
+     'NULL', then it won't have been put in the cache, so it won't have
+     to be removed from it.
 
 
 File: bfd.info,  Node: Linker Functions,  Next: Hash Tables,  Prev: File Caching,  Up: BFD front end
@@ -9872,142 +9499,119 @@ the output file at the end of 'NAME(aout
 2.17.3.4 'bfd_link_split_section'
 .................................
 
-*Synopsis*
-     bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
-   *Description*
-Return nonzero if SEC should be split during a reloceatable or final
-link.
-     #define bfd_link_split_section(abfd, sec) \
-            BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
+ -- Function: bool bfd_link_split_section (bfd *abfd, asection *sec);
+     Return nonzero if SEC should be split during a reloceatable or
+     final link.
+          #define bfd_link_split_section(abfd, sec) \
+                 BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
 
 
 2.17.3.5 'bfd_section_already_linked'
 .....................................
 
-*Synopsis*
-     bfd_boolean bfd_section_already_linked (bfd *abfd,
-         asection *sec,
-         struct bfd_link_info *info);
-   *Description*
-Check if DATA has been already linked during a reloceatable or final
-link.  Return TRUE if it has.
-     #define bfd_section_already_linked(abfd, sec, info) \
-            BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
+ -- Function: bool bfd_section_already_linked (bfd *abfd, asection *sec,
+          struct bfd_link_info *info);
+     Check if DATA has been already linked during a reloceatable or
+     final link.  Return TRUE if it has.
+          #define bfd_section_already_linked(abfd, sec, info) \
+                 BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
 
 
 2.17.3.6 'bfd_generic_define_common_symbol'
 ...........................................
 
-*Synopsis*
-     bfd_boolean bfd_generic_define_common_symbol
-        (bfd *output_bfd, struct bfd_link_info *info,
-         struct bfd_link_hash_entry *h);
-   *Description*
-Convert common symbol H into a defined symbol.  Return TRUE on success
-and FALSE on failure.
-     #define bfd_define_common_symbol(output_bfd, info, h) \
-            BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
+ -- Function: bool bfd_generic_define_common_symbol (bfd *output_bfd,
+          struct bfd_link_info *info, struct bfd_link_hash_entry *h);
+     Convert common symbol H into a defined symbol.  Return TRUE on
+     success and FALSE on failure.
+          #define bfd_define_common_symbol(output_bfd, info, h) \
+                 BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
 
 
 2.17.3.7 '_bfd_generic_link_hide_symbol'
 ........................................
 
-*Synopsis*
-     void _bfd_generic_link_hide_symbol
-        (bfd *output_bfd, struct bfd_link_info *info,
-         struct bfd_link_hash_entry *h);
-   *Description*
-Hide symbol H.  This is an internal function.  It should not be called
-from outside the BFD library.
-     #define bfd_link_hide_symbol(output_bfd, info, h) \
-            BFD_SEND (output_bfd, _bfd_link_hide_symbol, (output_bfd, info, h))
+ -- Function: void _bfd_generic_link_hide_symbol (bfd *output_bfd,
+          struct bfd_link_info *info, struct bfd_link_hash_entry *h);
+     Hide symbol H.  This is an internal function.  It should not be
+     called from outside the BFD library.
+          #define bfd_link_hide_symbol(output_bfd, info, h) \
+                 BFD_SEND (output_bfd, _bfd_link_hide_symbol, (output_bfd, info, h))
 
 
 2.17.3.8 'bfd_generic_define_start_stop'
 ........................................
 
-*Synopsis*
-     struct bfd_link_hash_entry *bfd_generic_define_start_stop
-        (struct bfd_link_info *info,
-         const char *symbol, asection *sec);
-   *Description*
-Define a __start, __stop, .startof.  or .sizeof.  symbol.  Return the
-symbol or NULL if no such undefined symbol exists.
-     #define bfd_define_start_stop(output_bfd, info, symbol, sec) \
-            BFD_SEND (output_bfd, _bfd_define_start_stop, (info, symbol, sec))
+ -- Function: struct bfd_link_hash_entry *bfd_generic_define_start_stop
+          (struct bfd_link_info *info, const char *symbol, asection
+          *sec);
+     Define a __start, __stop, .startof.  or .sizeof.  symbol.  Return
+     the symbol or NULL if no such undefined symbol exists.
+          #define bfd_define_start_stop(output_bfd, info, symbol, sec) \
+                 BFD_SEND (output_bfd, _bfd_define_start_stop, (info, symbol, sec))
 
 
 2.17.3.9 'bfd_find_version_for_sym'
 ...................................
 
-*Synopsis*
-     struct bfd_elf_version_tree * bfd_find_version_for_sym
-        (struct bfd_elf_version_tree *verdefs,
-         const char *sym_name, bfd_boolean *hide);
-   *Description*
-Search an elf version script tree for symbol versioning info and export
-/ don't-export status for a given symbol.  Return non-NULL on success
-and NULL on failure; also sets the output 'hide' boolean parameter.
+ -- Function: struct bfd_elf_version_tree * bfd_find_version_for_sym
+          (struct bfd_elf_version_tree *verdefs, const char *sym_name,
+          bool *hide);
+     Search an elf version script tree for symbol versioning info and
+     export / don't-export status for a given symbol.  Return non-NULL
+     on success and NULL on failure; also sets the output 'hide' boolean
+     parameter.
 
 2.17.3.10 'bfd_hide_sym_by_version'
 ...................................
 
-*Synopsis*
-     bfd_boolean bfd_hide_sym_by_version
-        (struct bfd_elf_version_tree *verdefs, const char *sym_name);
-   *Description*
-Search an elf version script tree for symbol versioning info for a given
-symbol.  Return TRUE if the symbol is hidden.
+ -- Function: bool bfd_hide_sym_by_version (struct bfd_elf_version_tree
+          *verdefs, const char *sym_name);
+     Search an elf version script tree for symbol versioning info for a
+     given symbol.  Return TRUE if the symbol is hidden.
 
 2.17.3.11 'bfd_link_check_relocs'
 .................................
 
-*Synopsis*
-     bfd_boolean bfd_link_check_relocs
-        (bfd *abfd, struct bfd_link_info *info);
-   *Description*
-Checks the relocs in ABFD for validity.  Does not execute the relocs.
-Return TRUE if everything is OK, FALSE otherwise.  This is the external
-entry point to this code.
+ -- Function: bool bfd_link_check_relocs (bfd *abfd, struct
+          bfd_link_info *info);
+     Checks the relocs in ABFD for validity.  Does not execute the
+     relocs.  Return TRUE if everything is OK, FALSE otherwise.  This is
+     the external entry point to this code.
 
 2.17.3.12 '_bfd_generic_link_check_relocs'
 ..........................................
 
-*Synopsis*
-     bfd_boolean _bfd_generic_link_check_relocs
-        (bfd *abfd, struct bfd_link_info *info);
-   *Description*
-Stub function for targets that do not implement reloc checking.  Return
-TRUE. This is an internal function.  It should not be called from
-outside the BFD library.
+ -- Function: bool _bfd_generic_link_check_relocs (bfd *abfd, struct
+          bfd_link_info *info);
+     Stub function for targets that do not implement reloc checking.
+     Return TRUE. This is an internal function.  It should not be called
+     from outside the BFD library.
 
 2.17.3.13 'bfd_merge_private_bfd_data'
 ......................................
 
-*Synopsis*
-     bfd_boolean bfd_merge_private_bfd_data
-        (bfd *ibfd, struct bfd_link_info *info);
-   *Description*
-Merge private BFD information from the BFD IBFD to the the output file
-BFD when linking.  Return 'TRUE' on success, 'FALSE' on error.  Possible
-error returns are:
-
-   * 'bfd_error_no_memory' - Not enough memory exists to create private
-     data for OBFD.
-     #define bfd_merge_private_bfd_data(ibfd, info) \
-            BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \
-                      (ibfd, info))
+ -- Function: bool bfd_merge_private_bfd_data (bfd *ibfd, struct
+          bfd_link_info *info);
+     Merge private BFD information from the BFD IBFD to the the output
+     file BFD when linking.  Return 'TRUE' on success, 'FALSE' on error.
+     Possible error returns are:
+
+        * 'bfd_error_no_memory' - Not enough memory exists to create
+          private data for OBFD.
+          #define bfd_merge_private_bfd_data(ibfd, info) \
+                 BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \
+                           (ibfd, info))
+
 
 2.17.3.14 '_bfd_generic_verify_endian_match'
 ............................................
 
-*Synopsis*
-     bfd_boolean _bfd_generic_verify_endian_match
-        (bfd *ibfd, struct bfd_link_info *info);
-   *Description*
-Can be used from / for bfd_merge_private_bfd_data to check that
-endianness matches between input and output file.  Returns TRUE for a
-match, otherwise returns FALSE and emits an error.
+ -- Function: bool _bfd_generic_verify_endian_match (bfd *ibfd, struct
+          bfd_link_info *info);
+     Can be used from / for bfd_merge_private_bfd_data to check that
+     endianness matches between input and output file.  Returns TRUE for
+     a match, otherwise returns FALSE and emits an error.
 
 
 File: bfd.info,  Node: Hash Tables,  Prev: Linker Functions,  Up: BFD front end
@@ -10219,9 +9823,8 @@ routine of the hash table type your hash
 
        return (struct bfd_hash_entry *) ret;
      }
-   *Description*
-The creation routine for the linker hash table, which is in 'linker.c',
-looks just like this example.  FUNCTION_NAME is
+   The creation routine for the linker hash table, which is in
+'linker.c', looks just like this example.  FUNCTION_NAME is
 '_bfd_link_hash_newfunc'.  ENTRY_TYPE is 'struct bfd_link_hash_entry'.
 BASE_NEWFUNC is 'bfd_hash_newfunc', the creation routine for a basic
 hash table.
@@ -10258,6 +9861,130 @@ a.out backend linker hash table, which i
 table, uses macros for the lookup and traversal routines.  These are
 'aout_link_hash_lookup' and 'aout_link_hash_traverse' in aoutx.h.
 
+2.18.4.4 'bfd_hash_table_init_n'
+................................
+
+ -- Function: bool bfd_hash_table_init_n (struct bfd_hash_table *,
+          struct bfd_hash_entry *(* *newfunc*) (struct bfd_hash_entry *,
+          struct bfd_hash_table *, const char *), unsigned int
+          *entsize*, unsigned int *size*);
+     Create a new hash table, given a number of entries.
+
+2.18.4.5 'bfd_hash_table_init'
+..............................
+
+ -- Function: bool bfd_hash_table_init (struct bfd_hash_table *, struct
+          bfd_hash_entry *(* *newfunc*) (struct bfd_hash_entry *, struct
+          bfd_hash_table *, const char *), unsigned int *entsize*);
+     Create a new hash table with the default number of entries.
+
+2.18.4.6 'bfd_hash_table_free'
+..............................
+
+ -- Function: void bfd_hash_table_free (struct bfd_hash_table *);
+     Free a hash table.
+
+2.18.4.7 'bfd_hash_lookup'
+..........................
+
+ -- Function: struct bfd_hash_entry *bfd_hash_lookup (struct
+          bfd_hash_table *, const char *, bool *create*, bool *copy*);
+     Look up a string in a hash table.
+
+2.18.4.8 'bfd_hash_insert'
+..........................
+
+ -- Function: struct bfd_hash_entry *bfd_hash_insert (struct
+          bfd_hash_table *, const char *, unsigned long *hash*);
+     Insert an entry in a hash table.
+
+2.18.4.9 'bfd_hash_rename'
+..........................
+
+ -- Function: void bfd_hash_rename (struct bfd_hash_table *, const char
+          *, struct bfd_hash_entry *);
+     Rename an entry in a hash table.
+
+2.18.4.10 'bfd_hash_replace'
+............................
+
+ -- Function: void bfd_hash_replace (struct bfd_hash_table *, struct
+          bfd_hash_entry * *old*, struct bfd_hash_entry * *new*);
+     Replace an entry in a hash table.
+
+2.18.4.11 'bfd_hash_allocate'
+.............................
+
+ -- Function: void *bfd_hash_allocate (struct bfd_hash_table *, unsigned
+          int *size*);
+     Allocate space in a hash table.
+
+2.18.4.12 'bfd_hash_newfunc'
+............................
+
+ -- Function: struct bfd_hash_entry *bfd_hash_newfunc (struct
+          bfd_hash_entry *, struct bfd_hash_table *, const char *);
+     Base method for creating a new hash table entry.
+
+2.18.4.13 'bfd_hash_traverse'
+.............................
+
+ -- Function: void bfd_hash_traverse (struct bfd_hash_table *, bool (*)
+          (struct bfd_hash_entry *, void *), void *);
+     Traverse a hash table.
+
+2.18.4.14 'bfd_hash_set_default_size'
+.....................................
+
+ -- Function: unsigned int bfd_hash_set_default_size (unsigned int);
+     Set hash table default size.
+
+2.18.4.15 '_bfd_stringtab_init'
+...............................
+
+ -- Function: struct bfd_strtab_hash *_bfd_stringtab_init (void);
+     Create a new strtab.
+
+2.18.4.16 '_bfd_xcoff_stringtab_init'
+.....................................
+
+ -- Function: struct bfd_strtab_hash *_bfd_xcoff_stringtab_init (bool
+          *isxcoff64*);
+     Create a new strtab in which the strings are output in the format
+     used in the XCOFF .debug section: a two byte length precedes each
+     string.
+
+2.18.4.17 '_bfd_stringtab_free'
+...............................
+
+ -- Function: void _bfd_stringtab_free (struct bfd_strtab_hash *);
+     Free a strtab.
+
+2.18.4.18 '_bfd_stringtab_add'
+..............................
+
+ -- Function: bfd_size_type _bfd_stringtab_add (struct bfd_strtab_hash
+          *, const char *, bool *hash*, bool *copy*);
+     Get the index of a string in a strtab, adding it if it is not
+     already present.  If HASH is FALSE, we don't really use the hash
+     table, and we don't eliminate duplicate strings.  If COPY is true
+     then store a copy of STR if creating a new entry.
+
+2.18.4.19 '_bfd_stringtab_size'
+...............................
+
+ -- Function: bfd_size_type _bfd_stringtab_size (struct bfd_strtab_hash
+          *);
+     Get the number of bytes in a strtab.
+
+2.18.4.20 '_bfd_stringtab_emit'
+...............................
+
+ -- Function: bool _bfd_stringtab_emit (bfd *, struct bfd_strtab_hash
+          *);
+     Write out a strtab.  ABFD must already be at the right location in
+     the file.
+
 
 File: bfd.info,  Node: BFD back ends,  Next: GNU Free Documentation License,  Prev: BFD front end,  Up: Top
 
@@ -10286,7 +10013,6 @@ File: bfd.info,  Node: aout,  Next: coff
 3.2 a.out backends
 ==================
 
-*Description*
 BFD supports a number of different flavours of a.out format, though the
 major differences are only the sizes of the structures on disk, and the
 shape of the relocation information.
@@ -10364,7 +10090,6 @@ selected.
 3.2.1 Relocations
 -----------------
 
-*Description*
 The file 'aoutx.h' provides for both the _standard_ and _extended_ forms
 of a.out relocation records.
 
@@ -10375,7 +10100,6 @@ addend.
 3.2.2 Internal entry points
 ---------------------------
 
-*Description*
 'aoutx.h' exports several routines for accessing the contents of an
 a.out file, which are gathered and exported in turn by various format
 specific files (eg sunos.c).
@@ -10383,88 +10107,65 @@ specific files (eg sunos.c).
 3.2.2.1 'aout_SIZE_swap_exec_header_in'
 .......................................
 
-*Synopsis*
-     void aout_SIZE_swap_exec_header_in,
-        (bfd *abfd,
-         struct external_exec *bytes,
-         struct internal_exec *execp);
-   *Description*
-Swap the information in an executable header RAW_BYTES taken from a raw
-byte stream memory image into the internal exec header structure EXECP.
+ -- Function: void aout_SIZE_swap_exec_header_in, (bfd *abfd, struct
+          external_exec *bytes, struct internal_exec *execp);
+     Swap the information in an executable header RAW_BYTES taken from a
+     raw byte stream memory image into the internal exec header
+     structure EXECP.
 
 3.2.2.2 'aout_SIZE_swap_exec_header_out'
 ........................................
 
-*Synopsis*
-     void aout_SIZE_swap_exec_header_out
-        (bfd *abfd,
-         struct internal_exec *execp,
-         struct external_exec *raw_bytes);
-   *Description*
-Swap the information in an internal exec header structure EXECP into the
-buffer RAW_BYTES ready for writing to disk.
+ -- Function: void aout_SIZE_swap_exec_header_out (bfd *abfd, struct
+          internal_exec *execp, struct external_exec *raw_bytes);
+     Swap the information in an internal exec header structure EXECP
+     into the buffer RAW_BYTES ready for writing to disk.
 
 3.2.2.3 'aout_SIZE_some_aout_object_p'
 ......................................
 
-*Synopsis*
-     const bfd_target *aout_SIZE_some_aout_object_p
-        (bfd *abfd,
-         struct internal_exec *execp,
-         const bfd_target *(*callback_to_real_object_p) (bfd *));
-   *Description*
-Some a.out variant thinks that the file open in ABFD checking is an
-a.out file.  Do some more checking, and set up for access if it really
-is.  Call back to the calling environment's "finish up" function just
-before returning, to handle any last-minute setup.
+ -- Function: bfd_cleanup aout_SIZE_some_aout_object_p (bfd *abfd,
+          struct internal_exec *execp, bfd_cleanup
+          (*callback_to_real_object_p) (bfd *));
+     Some a.out variant thinks that the file open in ABFD checking is an
+     a.out file.  Do some more checking, and set up for access if it
+     really is.  Call back to the calling environment's "finish up"
+     function just before returning, to handle any last-minute setup.
 
 3.2.2.4 'aout_SIZE_mkobject'
 ............................
 
-*Synopsis*
-     bfd_boolean aout_SIZE_mkobject, (bfd *abfd);
-   *Description*
-Initialize BFD ABFD for use with a.out files.
+ -- Function: bool aout_SIZE_mkobject, (bfd *abfd);
+     Initialize BFD ABFD for use with a.out files.
 
 3.2.2.5 'aout_SIZE_machine_type'
 ................................
 
-*Synopsis*
-     enum machine_type  aout_SIZE_machine_type
-        (enum bfd_architecture arch,
-         unsigned long machine,
-         bfd_boolean *unknown);
-   *Description*
-Keep track of machine architecture and machine type for a.out's.  Return
-the 'machine_type' for a particular architecture and machine, or
-'M_UNKNOWN' if that exact architecture and machine can't be represented
-in a.out format.
+ -- Function: enum machine_type aout_SIZE_machine_type (enum
+          bfd_architecture arch, unsigned long machine, bool *unknown);
+     Keep track of machine architecture and machine type for a.out's.
+     Return the 'machine_type' for a particular architecture and
+     machine, or 'M_UNKNOWN' if that exact architecture and machine
+     can't be represented in a.out format.
 
-   If the architecture is understood, machine type 0 (default) is always
-understood.
+     If the architecture is understood, machine type 0 (default) is
+     always understood.
 
 3.2.2.6 'aout_SIZE_set_arch_mach'
 .................................
 
-*Synopsis*
-     bfd_boolean aout_SIZE_set_arch_mach,
-        (bfd *,
-         enum bfd_architecture arch,
-         unsigned long machine);
-   *Description*
-Set the architecture and the machine of the BFD ABFD to the values ARCH
-and MACHINE.  Verify that ABFD's format can support the architecture
-required.
+ -- Function: bool aout_SIZE_set_arch_mach, (bfd *, enum
+          bfd_architecture arch, unsigned long machine);
+     Set the architecture and the machine of the BFD ABFD to the values
+     ARCH and MACHINE.  Verify that ABFD's format can support the
+     architecture required.
 
 3.2.2.7 'aout_SIZE_new_section_hook'
 ....................................
 
-*Synopsis*
-     bfd_boolean aout_SIZE_new_section_hook,
-        (bfd *abfd,
-         asection *newsect);
-   *Description*
-Called by the BFD in response to a 'bfd_make_section' request.
+ -- Function: bool aout_SIZE_new_section_hook, (bfd *abfd, asection
+          *newsect);
+     Called by the BFD in response to a 'bfd_make_section' request.
 
 
 File: bfd.info,  Node: coff,  Next: elf,  Prev: aout,  Up: BFD back ends
@@ -10570,9 +10271,10 @@ backend data structure.  The flag contro
 section names in output BFDs at runtime; if it is false, as it will be
 by default when generating an executable image, long section names are
 truncated; if true, the long section names extension is employed.  The
-hook points to a function that allows the value of the flag to be
-altered at runtime, on formats that support long section names at all;
-on other formats it points to a stub that returns an error indication.
+hook points to a function that allows the value of a copy of the flag in
+coff object tdata to be altered at runtime, on formats that support long
+section names at all; on other formats it points to a stub that returns
+an error indication.
 
    With input BFDs, the flag is set according to whether any long
 section names are detected while reading the section headers.  For a
@@ -10703,35 +10405,36 @@ writes out the table to the file.
 3.3.2.6 'coff_symbol_type'
 ..........................
 
-*Description*
 The hidden information for an 'asymbol' is described in a
 'combined_entry_type':
 
-
      typedef struct coff_ptr_struct
      {
        /* Remembers the offset from the first symbol in the file for
-          this symbol. Generated by coff_renumber_symbols.  */
+          this symbol.  Generated by coff_renumber_symbols.  */
        unsigned int offset;
 
-       /* Should the value of this symbol be renumbered.  Used for
-          XCOFF C_BSTAT symbols.  Set by coff_slurp_symbol_table.  */
-       unsigned int fix_value : 1;
+       /* Selects between the elements of the union below.  */
+       unsigned int is_sym : 1;
 
-       /* Should the tag field of this symbol be renumbered.
-          Created by coff_pointerize_aux.  */
+       /* Selects between the elements of the x_sym.x_tagndx union.  If set,
+          p is valid and the field will be renumbered.  */
        unsigned int fix_tag : 1;
 
-       /* Should the endidx field of this symbol be renumbered.
-          Created by coff_pointerize_aux.  */
+       /* Selects between the elements of the x_sym.x_fcnary.x_fcn.x_endndx
+          union.  If set, p is valid and the field will be renumbered.  */
        unsigned int fix_end : 1;
 
-       /* Should the x_csect.x_scnlen field be renumbered.
-          Created by coff_pointerize_aux.  */
+       /* Selects between the elements of the x_csect.x_scnlen union.  If set,
+          p is valid and the field will be renumbered.  */
        unsigned int fix_scnlen : 1;
 
-       /* Fix up an XCOFF C_BINCL/C_EINCL symbol.  The value is the
-          index into the line number entries.  Set by coff_slurp_symbol_table.  */
+       /* If set, u.syment.n_value contains a pointer to a symbol.  The final
+          value will be the offset field.  Used for XCOFF C_BSTAT symbols.  */
+       unsigned int fix_value : 1;
+
+       /* If set, u.syment.n_value is an index into the line number entries.
+          Used for XCOFF C_BINCL/C_EINCL symbols.  */
        unsigned int fix_line : 1;
 
        /* The container for the symbol structure as read and translated
@@ -10742,11 +10445,11 @@ The hidden information for an 'asymbol'
          struct internal_syment syment;
        } u;
 
-      /* Selector for the union above.  */
-      bfd_boolean is_sym;
+      /* An extra pointer which can used by format based on COFF (like XCOFF)
+         to provide extra information to their backend.  */
+      void *extrap;
      } combined_entry_type;
 
-
      /* Each canonical asymbol really looks like this: */
 
      typedef struct coff_symbol_struct
@@ -10761,33 +10464,13 @@ The hidden information for an 'asymbol'
        struct lineno_cache_entry *lineno;
 
        /* Have the line numbers been relocated yet ? */
-       bfd_boolean done_lineno;
+       bool done_lineno;
      } coff_symbol_type;
 
+
 3.3.2.7 'bfd_coff_backend_data'
 ...............................
 
-     /* COFF symbol classifications.  */
-
-     enum coff_symbol_classification
-     {
-       /* Global symbol.  */
-       COFF_SYMBOL_GLOBAL,
-       /* Common symbol.  */
-       COFF_SYMBOL_COMMON,
-       /* Undefined symbol.  */
-       COFF_SYMBOL_UNDEFINED,
-       /* Local symbol.  */
-       COFF_SYMBOL_LOCAL,
-       /* PE section symbol.  */
-       COFF_SYMBOL_PE_SECTION
-     };
-
-     typedef asection * (*coff_gc_mark_hook_fn)
-       (asection *, struct bfd_link_info *, struct internal_reloc *,
-        struct coff_link_hash_entry *, struct internal_syment *);
-
-   Special entry points for gdb to swap in coff symbol table parts:
      typedef struct
      {
        void (*_bfd_coff_swap_aux_in)
@@ -10828,14 +10511,14 @@ The hidden information for an 'asymbol'
        unsigned int _bfd_relsz;
        unsigned int _bfd_linesz;
        unsigned int _bfd_filnmlen;
-       bfd_boolean _bfd_coff_long_filenames;
+       bool _bfd_coff_long_filenames;
 
-       bfd_boolean _bfd_coff_long_section_names;
-       bfd_boolean (*_bfd_coff_set_long_section_names)
+       bool _bfd_coff_long_section_names;
+       bool (*_bfd_coff_set_long_section_names)
          (bfd *, int);
 
        unsigned int _bfd_coff_default_section_alignment_power;
-       bfd_boolean _bfd_coff_force_symnames_in_strings;
+       bool _bfd_coff_force_symnames_in_strings;
        unsigned int _bfd_coff_debug_string_prefix_length;
        unsigned int _bfd_coff_max_nscns;
 
@@ -10851,38 +10534,38 @@ The hidden information for an 'asymbol'
        void (*_bfd_coff_swap_reloc_in)
          (bfd *abfd, void *, void *);
 
-       bfd_boolean (*_bfd_coff_bad_format_hook)
+       bool (*_bfd_coff_bad_format_hook)
          (bfd *, void *);
 
-       bfd_boolean (*_bfd_coff_set_arch_mach_hook)
+       bool (*_bfd_coff_set_arch_mach_hook)
          (bfd *, void *);
 
        void * (*_bfd_coff_mkobject_hook)
          (bfd *, void *, void *);
 
-       bfd_boolean (*_bfd_styp_to_sec_flags_hook)
+       bool (*_bfd_styp_to_sec_flags_hook)
          (bfd *, void *, const char *, asection *, flagword *);
 
        void (*_bfd_set_alignment_hook)
          (bfd *, asection *, void *);
 
-       bfd_boolean (*_bfd_coff_slurp_symbol_table)
+       bool (*_bfd_coff_slurp_symbol_table)
          (bfd *);
 
-       bfd_boolean (*_bfd_coff_symname_in_debug)
+       bool (*_bfd_coff_symname_in_debug)
          (bfd *, struct internal_syment *);
 
-       bfd_boolean (*_bfd_coff_pointerize_aux_hook)
+       bool (*_bfd_coff_pointerize_aux_hook)
          (bfd *, combined_entry_type *, combined_entry_type *,
           unsigned int, combined_entry_type *);
 
-       bfd_boolean (*_bfd_coff_print_aux)
+       bool (*_bfd_coff_print_aux)
          (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
           combined_entry_type *, unsigned int);
 
-       void (*_bfd_coff_reloc16_extra_cases)
+       bool (*_bfd_coff_reloc16_extra_cases)
          (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
-          bfd_byte *, unsigned int *, unsigned int *);
+          bfd_byte *, size_t *, size_t *);
 
        int (*_bfd_coff_reloc16_estimate)
          (bfd *, asection *, arelent *, unsigned int,
@@ -10891,13 +10574,13 @@ The hidden information for an 'asymbol'
        enum coff_symbol_classification (*_bfd_coff_classify_symbol)
          (bfd *, struct internal_syment *);
 
-       bfd_boolean (*_bfd_coff_compute_section_file_positions)
+       bool (*_bfd_coff_compute_section_file_positions)
          (bfd *);
 
-       bfd_boolean (*_bfd_coff_start_final_link)
+       bool (*_bfd_coff_start_final_link)
          (bfd *, struct bfd_link_info *);
 
-       bfd_boolean (*_bfd_coff_relocate_section)
+       bool (*_bfd_coff_relocate_section)
          (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
           struct internal_reloc *, struct internal_syment *, asection **);
 
@@ -10905,170 +10588,26 @@ The hidden information for an 'asymbol'
          (bfd *, asection *, struct internal_reloc *,
           struct coff_link_hash_entry *, struct internal_syment *, bfd_vma *);
 
-       bfd_boolean (*_bfd_coff_adjust_symndx)
+       bool (*_bfd_coff_adjust_symndx)
          (bfd *, struct bfd_link_info *, bfd *, asection *,
-          struct internal_reloc *, bfd_boolean *);
+          struct internal_reloc *, bool *);
 
-       bfd_boolean (*_bfd_coff_link_add_one_symbol)
+       bool (*_bfd_coff_link_add_one_symbol)
          (struct bfd_link_info *, bfd *, const char *, flagword,
-          asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
+          asection *, bfd_vma, const char *, bool, bool,
           struct bfd_link_hash_entry **);
 
-       bfd_boolean (*_bfd_coff_link_output_has_begun)
+       bool (*_bfd_coff_link_output_has_begun)
          (bfd *, struct coff_final_link_info *);
 
-       bfd_boolean (*_bfd_coff_final_link_postscript)
+       bool (*_bfd_coff_final_link_postscript)
          (bfd *, struct coff_final_link_info *);
 
-       bfd_boolean (*_bfd_coff_print_pdata)
+       bool (*_bfd_coff_print_pdata)
          (bfd *, void *);
 
      } bfd_coff_backend_data;
 
-     #define coff_backend_info(abfd) \
-       ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
-
-     #define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
-       ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
-
-     #define bfd_coff_swap_sym_in(a,e,i) \
-       ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
-
-     #define bfd_coff_swap_lineno_in(a,e,i) \
-       ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))
-
-     #define bfd_coff_swap_reloc_out(abfd, i, o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))
-
-     #define bfd_coff_swap_lineno_out(abfd, i, o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
-
-     #define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
-       ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
-
-     #define bfd_coff_swap_sym_out(abfd, i,o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
-
-     #define bfd_coff_swap_scnhdr_out(abfd, i,o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))
-
-     #define bfd_coff_swap_filehdr_out(abfd, i,o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))
-
-     #define bfd_coff_swap_aouthdr_out(abfd, i,o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))
-
-     #define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)
-     #define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)
-     #define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)
-     #define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)
-     #define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
-     #define bfd_coff_relsz(abfd)  (coff_backend_info (abfd)->_bfd_relsz)
-     #define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
-     #define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
-     #define bfd_coff_long_filenames(abfd) \
-       (coff_backend_info (abfd)->_bfd_coff_long_filenames)
-     #define bfd_coff_long_section_names(abfd) \
-       (coff_backend_info (abfd)->_bfd_coff_long_section_names)
-     #define bfd_coff_set_long_section_names(abfd, enable) \
-       ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
-     #define bfd_coff_default_section_alignment_power(abfd) \
-       (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)
-     #define bfd_coff_max_nscns(abfd) \
-       (coff_backend_info (abfd)->_bfd_coff_max_nscns)
-
-     #define bfd_coff_swap_filehdr_in(abfd, i,o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))
-
-     #define bfd_coff_swap_aouthdr_in(abfd, i,o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))
-
-     #define bfd_coff_swap_scnhdr_in(abfd, i,o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))
-
-     #define bfd_coff_swap_reloc_in(abfd, i, o) \
-       ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))
-
-     #define bfd_coff_bad_format_hook(abfd, filehdr) \
-       ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))
-
-     #define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
-       ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
-     #define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
-       ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\
-        (abfd, filehdr, aouthdr))
-
-     #define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\
-       ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
-        (abfd, scnhdr, name, section, flags_ptr))
-
-     #define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
-       ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))
-
-     #define bfd_coff_slurp_symbol_table(abfd)\
-       ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))
-
-     #define bfd_coff_symname_in_debug(abfd, sym)\
-       ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
-
-     #define bfd_coff_force_symnames_in_strings(abfd)\
-       (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)
-
-     #define bfd_coff_debug_string_prefix_length(abfd)\
-       (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)
-
-     #define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
-       ((coff_backend_info (abfd)->_bfd_coff_print_aux)\
-        (abfd, file, base, symbol, aux, indaux))
-
-     #define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
-                                          reloc, data, src_ptr, dst_ptr)\
-       ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
-        (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
-
-     #define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
-       ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
-        (abfd, section, reloc, shrink, link_info))
-
-     #define bfd_coff_classify_symbol(abfd, sym)\
-       ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\
-        (abfd, sym))
-
-     #define bfd_coff_compute_section_file_positions(abfd)\
-       ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\
-        (abfd))
-
-     #define bfd_coff_start_final_link(obfd, info)\
-       ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\
-        (obfd, info))
-     #define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
-       ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
-        (obfd, info, ibfd, o, con, rel, isyms, secs))
-     #define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
-       ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
-        (abfd, sec, rel, h, sym, addendp))
-     #define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
-       ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
-        (obfd, info, ibfd, sec, rel, adjustedp))
-     #define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
-                                          value, string, cp, coll, hashp)\
-       ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
-        (info, abfd, name, flags, section, value, string, cp, coll, hashp))
-
-     #define bfd_coff_link_output_has_begun(a,p) \
-       ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
-     #define bfd_coff_final_link_postscript(a,p) \
-       ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p))
-
-     #define bfd_coff_have_print_pdata(a) \
-       (coff_backend_info (a)->_bfd_coff_print_pdata)
-     #define bfd_coff_print_pdata(a,p) \
-       ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p))
-
-     /* Macro: Returns true if the bfd is a PE executable as opposed to a
-        PE object file.  */
-     #define bfd_pei_p(abfd) \
-       (CONST_STRNEQ ((abfd)->xvec->name, "pei-"))
 
 3.3.2.8 Writing relocations
 ...........................
@@ -11124,6 +10663,13 @@ Coff relocations are easily transformed
      back end specific way.  For instance, the 386 uses the 'r_type' to
      directly produce an index into a howto table vector.
 
+   * Note that 'arelent.addend' for COFF is often not what most people
+     understand as a relocation addend, but rather an adjustment to the
+     relocation addend stored in section contents of relocatable object
+     files.  The value found in section contents may also be confusing,
+     depending on both symbol value and addend somewhat similar to the
+     field value for a final-linked object.  See 'CALC_ADDEND'.
+
 
 File: bfd.info,  Node: elf,  Next: mmo,  Prev: coff,  Up: BFD back ends
 
@@ -11973,272 +11519,523 @@ BFD Index
 [index]
 * Menu:
 
-* _bfd_error_handler:                    Error reporting.    (line  112)
+* *bfd_alloc:                            Internal.           (line   74)
+* *bfd_arch_default_fill:                Architectures.      (line  744)
+* *bfd_asprintf:                         Error reporting.    (line  102)
+* *bfd_create:                           Opening and Closing.
+                                                             (line  226)
+* *bfd_default_reloc_type_lookup:        howto manager.      (line 3647)
+* *bfd_demangle:                         Miscellaneous.      (line  321)
+* *bfd_elf_bfd_from_remote_memory:       Opening and Closing.
+                                                             (line  172)
+* *bfd_fdopenr:                          Opening and Closing.
+                                                             (line   71)
+* *bfd_fdopenw:                          Opening and Closing.
+                                                             (line   97)
+* *bfd_follow_build_id_debuglink:        Opening and Closing.
+                                                             (line  360)
+* *bfd_follow_gnu_debugaltlink:          Opening and Closing.
+                                                             (line  316)
+* *bfd_follow_gnu_debuglink:             Opening and Closing.
+                                                             (line  297)
+* *bfd_fopen:                            Opening and Closing.
+                                                             (line   30)
+* *bfd_generic_get_relocated_section_contents: howto manager.
+                                                             (line 3695)
+* *bfd_get_alt_debug_link_info:          Opening and Closing.
+                                                             (line  286)
+* *bfd_get_debug_link_info:              Opening and Closing.
+                                                             (line  270)
+* *bfd_get_linker_section:               section prototypes. (line   37)
+* *bfd_get_next_section_by_name:         section prototypes. (line   26)
+* *bfd_get_relocated_section_contents:   Miscellaneous.      (line  273)
+* *bfd_get_section_by_name:              section prototypes. (line   18)
+* *bfd_get_section_by_name_if:           section prototypes. (line   45)
+* *bfd_get_unique_section_name:          section prototypes. (line   60)
+* *bfd_hash_allocate:                    Write Other Derived Routines.
+                                                             (line   83)
+* *bfd_make_section:                     section prototypes. (line  132)
+* *bfd_make_section_anyway:              section prototypes. (line  106)
+* *bfd_make_section_anyway_with_flags:   section prototypes. (line   90)
+* *bfd_make_section_old_way:             section prototypes. (line   71)
+* *bfd_make_section_with_flags:          section prototypes. (line  121)
+* *bfd_malloc:                           Internal.           (line   15)
+* *bfd_mmap:                             Miscellaneous.      (line  459)
+* *bfd_openr:                            Opening and Closing.
+                                                             (line   54)
+* *bfd_openr_iovec:                      Opening and Closing.
+                                                             (line  116)
+* *bfd_openr_next_archived_file:         Archives.           (line   83)
+* *bfd_openstreamr:                      Opening and Closing.
+                                                             (line  105)
+* *bfd_openw:                            Opening and Closing.
+                                                             (line  159)
+* *bfd_realloc:                          Internal.           (line   24)
+* *bfd_realloc_or_free:                  Internal.           (line   42)
+* *bfd_reloc_type_lookup:                howto manager.      (line 3638)
+* *bfd_sections_find_if:                 section prototypes. (line  178)
+* *bfd_zalloc:                           Internal.           (line   81)
+* *bfd_zmalloc:                          Internal.           (line   62)
+* *_bfd_generic_make_empty_symbol:       symbol handling functions.
+                                                             (line   91)
+* *_bfd_new_bfd:                         Opening and Closing.
+                                                             (line   12)
+* *_bfd_new_bfd_contained_in:            Opening and Closing.
+                                                             (line   18)
+* _bfd_clear_error_data:                 Error reporting.    (line   92)
+* _bfd_clear_error_data <1>:             Error reporting.    (line   96)
+* _bfd_error_handler:                    Error reporting.    (line  120)
+* _bfd_error_handler <1>:                Error reporting.    (line  125)
 * _bfd_final_link_relocate:              Relocating the section contents.
                                                              (line   22)
+* _bfd_free_cached_info:                 Opening and Closing.
+                                                             (line   20)
+* _bfd_free_cached_info <1>:             Opening and Closing.
+                                                             (line   24)
 * _bfd_generic_link_add_archive_symbols: Adding symbols from an archive.
                                                              (line   15)
 * _bfd_generic_link_add_one_symbol:      Adding symbols from an object file.
                                                              (line   19)
 * _bfd_generic_link_check_relocs:        Writing the symbol table.
-                                                             (line  144)
+                                                             (line  126)
+* _bfd_generic_link_check_relocs <1>:    Writing the symbol table.
+                                                             (line  130)
 * _bfd_generic_link_hide_symbol:         Writing the symbol table.
-                                                             (line   83)
+                                                             (line   75)
+* _bfd_generic_link_hide_symbol <1>:     Writing the symbol table.
+                                                             (line   79)
 * _bfd_generic_make_empty_symbol:        symbol handling functions.
-                                                             (line   96)
-* _bfd_generic_set_reloc:                howto manager.      (line 3496)
+                                                             (line   87)
+* _bfd_generic_set_reloc:                howto manager.      (line 3701)
+* _bfd_generic_set_reloc <1>:            howto manager.      (line 3705)
 * _bfd_generic_verify_endian_match:      Writing the symbol table.
-                                                             (line  172)
+                                                             (line  151)
+* _bfd_generic_verify_endian_match <1>:  Writing the symbol table.
+                                                             (line  155)
+* _bfd_get_error_program_name:           Error reporting.    (line  159)
 * _bfd_link_add_symbols in target vector: Adding Symbols to the Hash Table.
                                                              (line    6)
 * _bfd_link_final_link in target vector: Performing the Final Link.
                                                              (line    6)
 * _bfd_link_hash_table_create in target vector: Creating a Linker Hash Table.
                                                              (line    6)
+* _bfd_new_bfd:                          Opening and Closing.
+                                                             (line    8)
+* _bfd_new_bfd_contained_in:             Opening and Closing.
+                                                             (line   14)
+* _bfd_per_xvec_warn:                    bfd_target.         (line  539)
 * _bfd_relocate_contents:                Relocating the section contents.
                                                              (line   22)
-* _bfd_unrecognized_reloc:               howto manager.      (line 3508)
-* aout_SIZE_machine_type:                aout.               (line  145)
-* aout_SIZE_mkobject:                    aout.               (line  137)
-* aout_SIZE_new_section_hook:            aout.               (line  175)
-* aout_SIZE_set_arch_mach:               aout.               (line  162)
-* aout_SIZE_some_aout_object_p:          aout.               (line  123)
-* aout_SIZE_swap_exec_header_in:         aout.               (line   99)
-* aout_SIZE_swap_exec_header_out:        aout.               (line  111)
-* arelent_chain:                         typedef arelent.    (line  315)
+* _bfd_section_size_insane:              section prototypes. (line  283)
+* _bfd_section_size_insane <1>:          section prototypes. (line  287)
+* _bfd_set_error_handler_caching:        Error reporting.    (line  143)
+* _bfd_set_error_handler_caching <1>:    Error reporting.    (line  147)
+* _bfd_stringtab_add:                    Write Other Derived Routines.
+                                                             (line  127)
+* _bfd_stringtab_add <1>:                Write Other Derived Routines.
+                                                             (line  131)
+* _bfd_stringtab_emit:                   Write Other Derived Routines.
+                                                             (line  144)
+* _bfd_stringtab_emit <1>:               Write Other Derived Routines.
+                                                             (line  148)
+* _bfd_stringtab_free:                   Write Other Derived Routines.
+                                                             (line  121)
+* _bfd_stringtab_free <1>:               Write Other Derived Routines.
+                                                             (line  125)
+* _bfd_stringtab_init:                   Write Other Derived Routines.
+                                                             (line  106)
+* _bfd_stringtab_size:                   Write Other Derived Routines.
+                                                             (line  137)
+* _bfd_stringtab_size <1>:               Write Other Derived Routines.
+                                                             (line  141)
+* _bfd_unrecognized_reloc:               howto manager.      (line 3708)
+* _bfd_unrecognized_reloc <1>:           howto manager.      (line 3712)
+* _bfd_xcoff_stringtab_init:             Write Other Derived Routines.
+                                                             (line  112)
+* aout_SIZE_machine_type:                aout.               (line  130)
+* aout_SIZE_mkobject:                    aout.               (line  124)
+* aout_SIZE_mkobject,:                   aout.               (line  128)
+* aout_SIZE_new_section_hook:            aout.               (line  152)
+* aout_SIZE_new_section_hook,:           aout.               (line  156)
+* aout_SIZE_set_arch_mach:               aout.               (line  143)
+* aout_SIZE_set_arch_mach,:              aout.               (line  147)
+* aout_SIZE_some_aout_object_p:          aout.               (line  113)
+* aout_SIZE_some_aout_object_p <1>:      aout.               (line  117)
+* aout_SIZE_swap_exec_header_in:         aout.               (line   96)
+* aout_SIZE_swap_exec_header_in,:        aout.               (line  100)
+* aout_SIZE_swap_exec_header_out:        aout.               (line  105)
+* aout_SIZE_swap_exec_header_out <1>:    aout.               (line  109)
+* arelent_chain:                         typedef arelent.    (line  280)
 * BFD:                                   Overview.           (line    6)
 * BFD canonical format:                  Canonical format.   (line   11)
-* bfd_alloc:                             Opening and Closing.
-                                                             (line  239)
-* bfd_alloc2:                            Opening and Closing.
-                                                             (line  248)
-* bfd_alt_mach_code:                     Miscellaneous.      (line  291)
-* bfd_arch_bits_per_address:             Architectures.      (line  655)
-* bfd_arch_bits_per_byte:                Architectures.      (line  647)
-* bfd_arch_default_fill:                 Architectures.      (line  737)
-* bfd_arch_get_compatible:               Architectures.      (line  590)
-* bfd_arch_list:                         Architectures.      (line  581)
-* bfd_arch_mach_octets_per_byte:         Architectures.      (line  725)
-* BFD_ARELOC_BFIN_ADD:                   howto manager.      (line 1144)
-* BFD_ARELOC_BFIN_ADDR:                  howto manager.      (line 1178)
-* BFD_ARELOC_BFIN_AND:                   howto manager.      (line 1158)
-* BFD_ARELOC_BFIN_COMP:                  howto manager.      (line 1172)
-* BFD_ARELOC_BFIN_CONST:                 howto manager.      (line 1142)
-* BFD_ARELOC_BFIN_DIV:                   howto manager.      (line 1150)
-* BFD_ARELOC_BFIN_HWPAGE:                howto manager.      (line 1176)
-* BFD_ARELOC_BFIN_LAND:                  howto manager.      (line 1164)
-* BFD_ARELOC_BFIN_LEN:                   howto manager.      (line 1168)
-* BFD_ARELOC_BFIN_LOR:                   howto manager.      (line 1166)
-* BFD_ARELOC_BFIN_LSHIFT:                howto manager.      (line 1154)
-* BFD_ARELOC_BFIN_MOD:                   howto manager.      (line 1152)
-* BFD_ARELOC_BFIN_MULT:                  howto manager.      (line 1148)
-* BFD_ARELOC_BFIN_NEG:                   howto manager.      (line 1170)
-* BFD_ARELOC_BFIN_OR:                    howto manager.      (line 1160)
-* BFD_ARELOC_BFIN_PAGE:                  howto manager.      (line 1174)
-* BFD_ARELOC_BFIN_PUSH:                  howto manager.      (line 1140)
-* BFD_ARELOC_BFIN_RSHIFT:                howto manager.      (line 1156)
-* BFD_ARELOC_BFIN_SUB:                   howto manager.      (line 1146)
-* BFD_ARELOC_BFIN_XOR:                   howto manager.      (line 1162)
-* bfd_cache_close:                       File Caching.       (line   25)
-* bfd_cache_close_all:                   File Caching.       (line   38)
+* bfd_alloc:                             Internal.           (line   70)
+* bfd_alt_mach_code:                     Miscellaneous.      (line  295)
+* bfd_alt_mach_code <1>:                 Miscellaneous.      (line  299)
+* bfd_architecture:                      Architectures.      (line  658)
+* bfd_arch_bits_per_address:             Architectures.      (line  674)
+* bfd_arch_bits_per_byte:                Architectures.      (line  667)
+* bfd_arch_default_fill:                 Architectures.      (line  740)
+* bfd_arch_get_compatible:               Architectures.      (line  617)
+* bfd_arch_info_type:                    Architectures.      (line  605)
+* bfd_arch_info_type <1>:                Architectures.      (line  621)
+* bfd_arch_info_type <2>:                Architectures.      (line  685)
+* bfd_arch_info_type <3>:                Architectures.      (line  700)
+* bfd_arch_info_type <4>:                Architectures.      (line  706)
+* bfd_arch_list:                         Architectures.      (line  610)
+* bfd_arch_mach_octets_per_byte:         Architectures.      (line  730)
+* BFD_ARELOC_BFIN_ADD:                   howto manager.      (line 1161)
+* BFD_ARELOC_BFIN_ADDR:                  howto manager.      (line 1195)
+* BFD_ARELOC_BFIN_AND:                   howto manager.      (line 1175)
+* BFD_ARELOC_BFIN_COMP:                  howto manager.      (line 1189)
+* BFD_ARELOC_BFIN_CONST:                 howto manager.      (line 1159)
+* BFD_ARELOC_BFIN_DIV:                   howto manager.      (line 1167)
+* BFD_ARELOC_BFIN_HWPAGE:                howto manager.      (line 1193)
+* BFD_ARELOC_BFIN_LAND:                  howto manager.      (line 1181)
+* BFD_ARELOC_BFIN_LEN:                   howto manager.      (line 1185)
+* BFD_ARELOC_BFIN_LOR:                   howto manager.      (line 1183)
+* BFD_ARELOC_BFIN_LSHIFT:                howto manager.      (line 1171)
+* BFD_ARELOC_BFIN_MOD:                   howto manager.      (line 1169)
+* BFD_ARELOC_BFIN_MULT:                  howto manager.      (line 1165)
+* BFD_ARELOC_BFIN_NEG:                   howto manager.      (line 1187)
+* BFD_ARELOC_BFIN_OR:                    howto manager.      (line 1177)
+* BFD_ARELOC_BFIN_PAGE:                  howto manager.      (line 1191)
+* BFD_ARELOC_BFIN_PUSH:                  howto manager.      (line 1157)
+* BFD_ARELOC_BFIN_RSHIFT:                howto manager.      (line 1173)
+* BFD_ARELOC_BFIN_SUB:                   howto manager.      (line 1163)
+* BFD_ARELOC_BFIN_XOR:                   howto manager.      (line 1179)
+* bfd_asprintf:                          Error reporting.    (line   98)
+* bfd_cache_close:                       File Caching.       (line   23)
+* bfd_cache_close <1>:                   File Caching.       (line   27)
+* bfd_cache_close_all:                   File Caching.       (line   33)
+* bfd_cache_close_all <1>:               File Caching.       (line   37)
 * bfd_cache_init:                        File Caching.       (line   17)
+* bfd_cache_init <1>:                    File Caching.       (line   21)
+* bfd_cache_size:                        File Caching.       (line   45)
+* bfd_cache_size <1>:                    File Caching.       (line   49)
 * bfd_calc_gnu_debuglink_crc32:          Opening and Closing.
-                                                             (line  275)
-* bfd_canonicalize_reloc:                Miscellaneous.      (line   18)
+                                                             (line  255)
+* bfd_calc_gnu_debuglink_crc32 <1>:      Opening and Closing.
+                                                             (line  259)
+* bfd_canonicalize_reloc:                Miscellaneous.      (line   17)
+* bfd_canonicalize_reloc <1>:            Miscellaneous.      (line   21)
 * bfd_canonicalize_symtab:               symbol handling functions.
-                                                             (line   52)
-* bfd_check_compression_header:          Miscellaneous.      (line  363)
+                                                             (line   47)
 * bfd_check_format:                      Formats.            (line   20)
-* bfd_check_format_matches:              Formats.            (line   51)
-* bfd_check_overflow:                    typedef arelent.    (line  328)
+* bfd_check_format <1>:                  Formats.            (line   24)
+* bfd_check_format_matches:              Formats.            (line   50)
+* bfd_check_format_matches <1>:          Formats.            (line   54)
+* bfd_check_overflow:                    typedef arelent.    (line  292)
+* bfd_check_overflow <1>:                typedef arelent.    (line  296)
 * bfd_close:                             Opening and Closing.
-                                                             (line  161)
+                                                             (line  190)
+* bfd_close <1>:                         Opening and Closing.
+                                                             (line  194)
 * bfd_close_all_done:                    Opening and Closing.
-                                                             (line  179)
-* bfd_coff_backend_data:                 coff.               (line  296)
-* bfd_convert_section_contents:          Miscellaneous.      (line  401)
-* bfd_convert_section_size:              Miscellaneous.      (line  391)
-* bfd_copy_private_bfd_data:             Miscellaneous.      (line  159)
-* bfd_copy_private_header_data:          Miscellaneous.      (line  142)
-* bfd_copy_private_section_data:         section prototypes. (line  279)
+                                                             (line  206)
+* bfd_close_all_done <1>:                Opening and Closing.
+                                                             (line  210)
+* bfd_coff_backend_data:                 coff.               (line  299)
+* bfd_copy_private_bfd_data:             Miscellaneous.      (line  139)
+* bfd_copy_private_bfd_data <1>:         Miscellaneous.      (line  143)
+* bfd_copy_private_header_data:          Miscellaneous.      (line  124)
+* bfd_copy_private_header_data <1>:      Miscellaneous.      (line  128)
+* bfd_copy_private_section_data:         section prototypes. (line  247)
+* bfd_copy_private_section_data <1>:     section prototypes. (line  251)
 * bfd_copy_private_symbol_data:          symbol handling functions.
-                                                             (line  145)
-* bfd_core_file_failing_command:         Core Files.         (line   11)
-* bfd_core_file_failing_signal:          Core Files.         (line   20)
-* bfd_core_file_pid:                     Core Files.         (line   29)
+                                                             (line  126)
+* bfd_copy_private_symbol_data <1>:      symbol handling functions.
+                                                             (line  130)
+* bfd_core_file_failing_command:         Core Files.         (line   10)
+* bfd_core_file_failing_signal:          Core Files.         (line   17)
+* bfd_core_file_failing_signal <1>:      Core Files.         (line   21)
+* bfd_core_file_pid:                     Core Files.         (line   24)
+* bfd_core_file_pid <1>:                 Core Files.         (line   28)
 * bfd_create:                            Opening and Closing.
-                                                             (line  198)
+                                                             (line  222)
 * bfd_create_gnu_debuglink_section:      Opening and Closing.
-                                                             (line  431)
+                                                             (line  331)
 * bfd_decode_symclass:                   symbol handling functions.
-                                                             (line  116)
-* bfd_default_arch_struct:               Architectures.      (line  602)
-* bfd_default_compatible:                Architectures.      (line  664)
-* bfd_default_reloc_type_lookup:         howto manager.      (line 3420)
-* bfd_default_scan:                      Architectures.      (line  673)
-* bfd_default_set_arch_mach:             Architectures.      (line  620)
-* bfd_demangle:                          Miscellaneous.      (line  342)
-* bfd_emul_get_commonpagesize:           Miscellaneous.      (line  322)
-* bfd_emul_get_maxpagesize:              Miscellaneous.      (line  302)
-* bfd_emul_set_commonpagesize:           Miscellaneous.      (line  333)
-* bfd_emul_set_maxpagesize:              Miscellaneous.      (line  313)
-* bfd_errmsg:                            Error reporting.    (line   79)
+                                                             (line  104)
+* bfd_decode_symclass <1>:               symbol handling functions.
+                                                             (line  108)
+* bfd_default_arch_struct:               Architectures.      (line  628)
+* bfd_default_compatible:                Architectures.      (line  681)
+* bfd_default_reloc_type_lookup:         howto manager.      (line 3643)
+* bfd_default_scan:                      Architectures.      (line  688)
+* bfd_default_scan <1>:                  Architectures.      (line  692)
+* bfd_default_set_arch_mach:             Architectures.      (line  645)
+* bfd_default_set_arch_mach <1>:         Architectures.      (line  649)
+* bfd_demangle:                          Miscellaneous.      (line  317)
+* bfd_elf_bfd_from_remote_memory:        Opening and Closing.
+                                                             (line  168)
+* bfd_elf_version_tree:                  Writing the symbol table.
+                                                             (line  102)
+* bfd_emul_get_commonpagesize:           Miscellaneous.      (line  311)
+* bfd_emul_get_commonpagesize <1>:       Miscellaneous.      (line  315)
+* bfd_emul_get_maxpagesize:              Miscellaneous.      (line  304)
+* bfd_emul_get_maxpagesize <1>:          Miscellaneous.      (line  308)
+* bfd_errmsg:                            Error reporting.    (line   75)
 * bfd_fdopenr:                           Opening and Closing.
-                                                             (line   56)
+                                                             (line   67)
+* bfd_fdopenw:                           Opening and Closing.
+                                                             (line   93)
 * bfd_fill_in_gnu_debuglink_section:     Opening and Closing.
-                                                             (line  445)
-* bfd_find_target:                       bfd_target.         (line  567)
+                                                             (line  343)
+* bfd_fill_in_gnu_debuglink_section <1>: Opening and Closing.
+                                                             (line  347)
+* bfd_find_target:                       bfd_target.         (line  562)
 * bfd_find_version_for_sym:              Writing the symbol table.
-                                                             (line  111)
-* bfd_flavour_name:                      bfd_target.         (line  630)
+                                                             (line   98)
+* bfd_flavour_name:                      bfd_target.         (line  617)
+* bfd_flush:                             Miscellaneous.      (line  388)
+* bfd_flush <1>:                         Miscellaneous.      (line  392)
 * bfd_follow_build_id_debuglink:         Opening and Closing.
-                                                             (line  505)
+                                                             (line  356)
 * bfd_follow_gnu_debugaltlink:           Opening and Closing.
-                                                             (line  411)
+                                                             (line  312)
 * bfd_follow_gnu_debuglink:              Opening and Closing.
-                                                             (line  390)
+                                                             (line  293)
 * bfd_fopen:                             Opening and Closing.
-                                                             (line   11)
-* bfd_format_string:                     Formats.            (line   78)
+                                                             (line   26)
+* bfd_format_string:                     Formats.            (line   74)
 * bfd_generic_define_common_symbol:      Writing the symbol table.
-                                                             (line   69)
+                                                             (line   64)
+* bfd_generic_define_common_symbol <1>:  Writing the symbol table.
+                                                             (line   68)
 * bfd_generic_define_start_stop:         Writing the symbol table.
-                                                             (line   97)
-* bfd_generic_discard_group:             section prototypes. (line  312)
-* bfd_generic_gc_sections:               howto manager.      (line 3451)
-* bfd_generic_get_relocated_section_contents: howto manager. (line 3481)
-* bfd_generic_group_name:                section prototypes. (line  304)
-* bfd_generic_is_group_section:          section prototypes. (line  296)
-* bfd_generic_lookup_section_flags:      howto manager.      (line 3461)
-* bfd_generic_merge_sections:            howto manager.      (line 3471)
-* bfd_generic_relax_section:             howto manager.      (line 3438)
+                                                             (line   86)
+* bfd_generic_discard_group:             section prototypes. (line  276)
+* bfd_generic_discard_group <1>:         section prototypes. (line  280)
+* bfd_generic_gc_sections:               howto manager.      (line 3666)
+* bfd_generic_gc_sections <1>:           howto manager.      (line 3670)
+* bfd_generic_get_relocated_section_contents: howto manager. (line 3691)
+* bfd_generic_group_name:                section prototypes. (line  269)
+* bfd_generic_is_group_section:          section prototypes. (line  262)
+* bfd_generic_is_group_section <1>:      section prototypes. (line  266)
+* bfd_generic_lookup_section_flags:      howto manager.      (line 3674)
+* bfd_generic_lookup_section_flags <1>:  howto manager.      (line 3678)
+* bfd_generic_merge_sections:            howto manager.      (line 3683)
+* bfd_generic_merge_sections <1>:        howto manager.      (line 3687)
+* bfd_generic_relax_section:             howto manager.      (line 3658)
+* bfd_generic_relax_section <1>:         howto manager.      (line 3662)
+* bfd_getb64:                            Internal.           (line  260)
 * bfd_get_alt_debug_link_info:           Opening and Closing.
-                                                             (line  329)
-* bfd_get_arch:                          Architectures.      (line  631)
-* bfd_get_arch_info:                     Architectures.      (line  683)
-* bfd_get_arch_size:                     Miscellaneous.      (line   63)
-* bfd_get_compression_header_size:       Miscellaneous.      (line  380)
+                                                             (line  282)
+* bfd_get_arch:                          Architectures.      (line  654)
+* bfd_get_arch_info:                     Architectures.      (line  696)
+* bfd_get_arch_size:                     Miscellaneous.      (line   58)
+* bfd_get_arch_size <1>:                 Miscellaneous.      (line   62)
+* bfd_get_current_time:                  Miscellaneous.      (line  465)
+* bfd_get_current_time <1>:              Miscellaneous.      (line  469)
 * bfd_get_debug_link_info:               Opening and Closing.
-                                                             (line  311)
-* bfd_get_debug_link_info_1:             Opening and Closing.
-                                                             (line  289)
-* bfd_get_error:                         Error reporting.    (line   49)
-* bfd_get_file_size:                     Miscellaneous.      (line  490)
-* bfd_get_gp_size:                       Miscellaneous.      (line  106)
-* bfd_get_linker_section:                section prototypes. (line   37)
-* bfd_get_mach:                          Architectures.      (line  639)
-* bfd_get_mtime:                         Miscellaneous.      (line  453)
-* bfd_get_next_mapent:                   Archives.           (line   57)
-* bfd_get_next_section_by_name:          section prototypes. (line   25)
-* bfd_get_reloc_code_name:               howto manager.      (line 3429)
-* bfd_get_reloc_size:                    typedef arelent.    (line  306)
+                                                             (line  266)
+* bfd_get_error:                         Error reporting.    (line   50)
+* bfd_get_error <1>:                     Error reporting.    (line   55)
+* bfd_get_file_size:                     Miscellaneous.      (line  447)
+* bfd_get_file_size <1>:                 Miscellaneous.      (line  451)
+* bfd_get_gp_size:                       Miscellaneous.      (line   92)
+* bfd_get_linker_section:                section prototypes. (line   33)
+* bfd_get_mach:                          Architectures.      (line  661)
+* bfd_get_mtime:                         Miscellaneous.      (line  410)
+* bfd_get_mtime <1>:                     Miscellaneous.      (line  414)
+* bfd_get_next_mapent:                   Archives.           (line   56)
+* bfd_get_next_mapent <1>:               Archives.           (line   60)
+* bfd_get_next_section_by_name:          section prototypes. (line   22)
+* bfd_get_relocated_section_contents:    Miscellaneous.      (line  269)
+* bfd_get_reloc_code_name:               howto manager.      (line 3650)
 * bfd_get_reloc_upper_bound:             Miscellaneous.      (line    8)
-* bfd_get_section_by_name:               section prototypes. (line   16)
-* bfd_get_section_by_name_if:            section prototypes. (line   46)
-* bfd_get_section_contents:              section prototypes. (line  252)
-* bfd_get_sign_extend_vma:               Miscellaneous.      (line   78)
-* bfd_get_size:                          Miscellaneous.      (line  462)
-* bfd_get_size <1>:                      Internal.           (line   24)
+* bfd_get_reloc_upper_bound <1>:         Miscellaneous.      (line   12)
+* bfd_get_section_by_name:               section prototypes. (line   14)
+* bfd_get_section_by_name_if:            section prototypes. (line   41)
+* bfd_get_section_contents:              section prototypes. (line  223)
+* bfd_get_section_contents <1>:          section prototypes. (line  227)
+* bfd_get_sign_extend_vma:               Miscellaneous.      (line   70)
+* bfd_get_sign_extend_vma <1>:           Miscellaneous.      (line   74)
+* bfd_get_size:                          Miscellaneous.      (line  417)
+* bfd_get_size <1>:                      Miscellaneous.      (line  421)
+* bfd_get_size <2>:                      Internal.           (line  102)
 * bfd_get_symtab_upper_bound:            symbol handling functions.
                                                              (line    5)
-* bfd_get_target_info:                   bfd_target.         (line  583)
-* bfd_get_unique_section_name:           section prototypes. (line   65)
+* bfd_get_target_info:                   bfd_target.         (line  577)
+* bfd_get_unique_section_name:           section prototypes. (line   56)
 * bfd_hash_allocate:                     Creating and Freeing a Hash Table.
                                                              (line   17)
+* bfd_hash_allocate <1>:                 Write Other Derived Routines.
+                                                             (line   79)
+* bfd_hash_entry:                        Write Other Derived Routines.
+                                                             (line   55)
+* bfd_hash_entry <1>:                    Write Other Derived Routines.
+                                                             (line   62)
+* bfd_hash_entry <2>:                    Write Other Derived Routines.
+                                                             (line   90)
+* bfd_hash_insert:                       Write Other Derived Routines.
+                                                             (line   58)
 * bfd_hash_lookup:                       Looking Up or Entering a String.
                                                              (line    6)
+* bfd_hash_lookup <1>:                   Write Other Derived Routines.
+                                                             (line   51)
 * bfd_hash_newfunc:                      Creating and Freeing a Hash Table.
                                                              (line   12)
+* bfd_hash_newfunc <1>:                  Write Other Derived Routines.
+                                                             (line   86)
+* bfd_hash_rename:                       Write Other Derived Routines.
+                                                             (line   65)
+* bfd_hash_rename <1>:                   Write Other Derived Routines.
+                                                             (line   69)
+* bfd_hash_replace:                      Write Other Derived Routines.
+                                                             (line   72)
+* bfd_hash_replace <1>:                  Write Other Derived Routines.
+                                                             (line   76)
 * bfd_hash_set_default_size:             Creating and Freeing a Hash Table.
                                                              (line   25)
+* bfd_hash_set_default_size <1>:         Write Other Derived Routines.
+                                                             (line  100)
 * bfd_hash_table_free:                   Creating and Freeing a Hash Table.
                                                              (line   21)
+* bfd_hash_table_free <1>:               Write Other Derived Routines.
+                                                             (line   45)
+* bfd_hash_table_free <2>:               Write Other Derived Routines.
+                                                             (line   49)
 * bfd_hash_table_init:                   Creating and Freeing a Hash Table.
                                                              (line    6)
+* bfd_hash_table_init <1>:               Write Other Derived Routines.
+                                                             (line   37)
+* bfd_hash_table_init <2>:               Write Other Derived Routines.
+                                                             (line   41)
 * bfd_hash_table_init_n:                 Creating and Freeing a Hash Table.
                                                              (line    6)
+* bfd_hash_table_init_n <1>:             Write Other Derived Routines.
+                                                             (line   28)
+* bfd_hash_table_init_n <2>:             Write Other Derived Routines.
+                                                             (line   32)
 * bfd_hash_traverse:                     Traversing a Hash Table.
                                                              (line    6)
+* bfd_hash_traverse <1>:                 Write Other Derived Routines.
+                                                             (line   93)
+* bfd_hash_traverse <2>:                 Write Other Derived Routines.
+                                                             (line   97)
 * bfd_hide_sym_by_version:               Writing the symbol table.
-                                                             (line  123)
-* bfd_h_put_size:                        Internal.           (line  111)
-* bfd_init:                              Initialization.     (line   10)
-* bfd_install_relocation:                typedef arelent.    (line  382)
+                                                             (line  109)
+* bfd_hide_sym_by_version <1>:           Writing the symbol table.
+                                                             (line  113)
+* bfd_h_put_size:                        Internal.           (line  188)
+* bfd_init:                              Initialization.     (line    3)
+* bfd_install_relocation:                typedef arelent.    (line  331)
+* bfd_install_relocation <1>:            typedef arelent.    (line  335)
 * bfd_is_local_label:                    symbol handling functions.
-                                                             (line   17)
+                                                             (line   16)
+* bfd_is_local_label <1>:                symbol handling functions.
+                                                             (line   20)
 * bfd_is_local_label_name:               symbol handling functions.
-                                                             (line   26)
+                                                             (line   23)
+* bfd_is_local_label_name <1>:           symbol handling functions.
+                                                             (line   27)
 * bfd_is_target_special_symbol:          symbol handling functions.
+                                                             (line   35)
+* bfd_is_target_special_symbol <1>:      symbol handling functions.
                                                              (line   39)
 * bfd_is_undefined_symclass:             symbol handling functions.
-                                                             (line  125)
-* bfd_iterate_over_targets:              bfd_target.         (line  618)
+                                                             (line  111)
+* bfd_is_undefined_symclass <1>:         symbol handling functions.
+                                                             (line  115)
+* bfd_iterate_over_targets:              bfd_target.         (line  607)
 * bfd_link_check_relocs:                 Writing the symbol table.
-                                                             (line  133)
+                                                             (line  117)
+* bfd_link_check_relocs <1>:             Writing the symbol table.
+                                                             (line  121)
+* bfd_link_hash_entry:                   Writing the symbol table.
+                                                             (line   90)
 * bfd_link_split_section:                Writing the symbol table.
                                                              (line   43)
-* bfd_log2:                              Internal.           (line  180)
-* bfd_lookup_arch:                       Architectures.      (line  691)
+* bfd_link_split_section <1>:            Writing the symbol table.
+                                                             (line   47)
+* bfd_lock:                              Threading.          (line   37)
+* bfd_lock <1>:                          Threading.          (line   41)
+* bfd_log2:                              Internal.           (line  280)
+* bfd_lookup_arch:                       Architectures.      (line  702)
 * bfd_make_debug_symbol:                 symbol handling functions.
-                                                             (line  106)
+                                                             (line   95)
 * bfd_make_empty_symbol:                 symbol handling functions.
-                                                             (line   81)
+                                                             (line   73)
 * bfd_make_readable:                     Opening and Closing.
-                                                             (line  225)
-* bfd_make_section:                      section prototypes. (line  143)
-* bfd_make_section_anyway:               section prototypes. (line  115)
-* bfd_make_section_anyway_with_flags:    section prototypes. (line   97)
-* bfd_make_section_old_way:              section prototypes. (line   77)
-* bfd_make_section_with_flags:           section prototypes. (line  131)
+                                                             (line  244)
+* bfd_make_readable <1>:                 Opening and Closing.
+                                                             (line  248)
+* bfd_make_section:                      section prototypes. (line  128)
+* bfd_make_section_anyway:               section prototypes. (line  102)
+* bfd_make_section_anyway_with_flags:    section prototypes. (line   86)
+* bfd_make_section_old_way:              section prototypes. (line   67)
+* bfd_make_section_with_flags:           section prototypes. (line  117)
 * bfd_make_writable:                     Opening and Closing.
-                                                             (line  211)
-* bfd_malloc_and_get_section:            section prototypes. (line  269)
-* bfd_map_over_sections:                 section prototypes. (line  176)
+                                                             (line  233)
+* bfd_make_writable <1>:                 Opening and Closing.
+                                                             (line  237)
+* bfd_malloc:                            Internal.           (line   11)
+* bfd_malloc_and_get_section:            section prototypes. (line  238)
+* bfd_malloc_and_get_section <1>:        section prototypes. (line  242)
+* bfd_map_over_sections:                 section prototypes. (line  156)
+* bfd_map_over_sections <1>:             section prototypes. (line  160)
 * bfd_merge_private_bfd_data:            Writing the symbol table.
-                                                             (line  155)
-* bfd_mmap:                              Miscellaneous.      (line  499)
-* bfd_octets_per_byte:                   Architectures.      (line  714)
+                                                             (line  135)
+* bfd_merge_private_bfd_data <1>:        Writing the symbol table.
+                                                             (line  139)
+* bfd_mmap:                              Miscellaneous.      (line  455)
+* bfd_octets_per_byte:                   Architectures.      (line  721)
 * bfd_openr:                             Opening and Closing.
-                                                             (line   37)
+                                                             (line   50)
 * bfd_openr_iovec:                       Opening and Closing.
-                                                             (line   95)
-* bfd_openr_next_archived_file:          Archives.           (line   83)
+                                                             (line  112)
+* bfd_openr_next_archived_file:          Archives.           (line   79)
 * bfd_openstreamr:                       Opening and Closing.
-                                                             (line   82)
+                                                             (line  101)
 * bfd_openw:                             Opening and Closing.
-                                                             (line  146)
+                                                             (line  155)
 * bfd_open_file:                         File Caching.       (line   51)
-* bfd_perform_relocation:                typedef arelent.    (line  357)
-* bfd_perror:                            Error reporting.    (line   88)
-* bfd_printable_arch_mach:               Architectures.      (line  702)
-* bfd_printable_name:                    Architectures.      (line  562)
+* bfd_open_file <1>:                     File Caching.       (line   55)
+* bfd_perform_relocation:                typedef arelent.    (line  311)
+* bfd_perform_relocation <1>:            typedef arelent.    (line  315)
+* bfd_perror:                            Error reporting.    (line   82)
+* bfd_perror <1>:                        Error reporting.    (line   86)
+* bfd_printable_arch_mach:               Architectures.      (line  711)
+* bfd_printable_name:                    Architectures.      (line  594)
 * bfd_print_symbol_vandf:                symbol handling functions.
-                                                             (line   73)
-* bfd_put_size:                          Internal.           (line   21)
-* BFD_RELOC_12_PCREL:                    howto manager.      (line   37)
-* BFD_RELOC_14:                          howto manager.      (line   30)
-* BFD_RELOC_16:                          howto manager.      (line   29)
+                                                             (line   65)
+* bfd_print_symbol_vandf <1>:            symbol handling functions.
+                                                             (line   69)
+* bfd_put_size:                          Internal.           (line   99)
+* bfd_read:                              Miscellaneous.      (line  366)
+* bfd_read <1>:                          Miscellaneous.      (line  370)
+* bfd_realloc:                           Internal.           (line   20)
+* bfd_realloc_or_free:                   Internal.           (line   38)
+* bfd_record_phdr:                       Miscellaneous.      (line  279)
+* bfd_record_phdr <1>:                   Miscellaneous.      (line  283)
+* bfd_release:                           Internal.           (line   84)
+* bfd_release <1>:                       Internal.           (line   88)
+* BFD_RELOC_12_PCREL:                    howto manager.      (line   36)
+* BFD_RELOC_14:                          howto manager.      (line   29)
+* BFD_RELOC_16:                          howto manager.      (line   28)
 * BFD_RELOC_16_BASEREL:                  howto manager.      (line   90)
 * BFD_RELOC_16_GOTOFF:                   howto manager.      (line   49)
 * BFD_RELOC_16_GOT_PCREL:                howto manager.      (line   46)
-* BFD_RELOC_16_PCREL:                    howto manager.      (line   36)
+* BFD_RELOC_16_PCREL:                    howto manager.      (line   35)
 * BFD_RELOC_16_PCREL_S2:                 howto manager.      (line  100)
 * BFD_RELOC_16_PLTOFF:                   howto manager.      (line   61)
 * BFD_RELOC_16_PLT_PCREL:                howto manager.      (line   57)
+* BFD_RELOC_16_SECIDX:                   howto manager.      (line   43)
 * BFD_RELOC_23_PCREL_S2:                 howto manager.      (line  101)
-* BFD_RELOC_24:                          howto manager.      (line   28)
-* BFD_RELOC_24_PCREL:                    howto manager.      (line   35)
+* BFD_RELOC_24:                          howto manager.      (line   27)
+* BFD_RELOC_24_PCREL:                    howto manager.      (line   34)
 * BFD_RELOC_24_PLT_PCREL:                howto manager.      (line   56)
-* BFD_RELOC_26:                          howto manager.      (line   27)
-* BFD_RELOC_32:                          howto manager.      (line   26)
+* BFD_RELOC_26:                          howto manager.      (line   26)
+* BFD_RELOC_32:                          howto manager.      (line   25)
 * BFD_RELOC_32_BASEREL:                  howto manager.      (line   89)
 * BFD_RELOC_32_GOTOFF:                   howto manager.      (line   48)
 * BFD_RELOC_32_GOT_PCREL:                howto manager.      (line   45)
-* BFD_RELOC_32_PCREL:                    howto manager.      (line   34)
+* BFD_RELOC_32_PCREL:                    howto manager.      (line   33)
 * BFD_RELOC_32_PCREL_S2:                 howto manager.      (line   99)
 * BFD_RELOC_32_PLTOFF:                   howto manager.      (line   60)
 * BFD_RELOC_32_PLT_PCREL:                howto manager.      (line   55)
-* BFD_RELOC_32_SECREL:                   howto manager.      (line   43)
+* BFD_RELOC_32_SECREL:                   howto manager.      (line   42)
 * BFD_RELOC_386_COPY:                    howto manager.      (line  523)
 * BFD_RELOC_386_GLOB_DAT:                howto manager.      (line  524)
 * BFD_RELOC_386_GOT32:                   howto manager.      (line  521)
@@ -12264,63 +12061,63 @@ BFD Index
 * BFD_RELOC_386_TLS_LE_32:               howto manager.      (line  537)
 * BFD_RELOC_386_TLS_TPOFF:               howto manager.      (line  529)
 * BFD_RELOC_386_TLS_TPOFF32:             howto manager.      (line  540)
-* BFD_RELOC_390_12:                      howto manager.      (line 1950)
-* BFD_RELOC_390_20:                      howto manager.      (line 2031)
-* BFD_RELOC_390_COPY:                    howto manager.      (line 1956)
-* BFD_RELOC_390_GLOB_DAT:                howto manager.      (line 1958)
-* BFD_RELOC_390_GOT12:                   howto manager.      (line 1952)
-* BFD_RELOC_390_GOT16:                   howto manager.      (line 1966)
-* BFD_RELOC_390_GOT20:                   howto manager.      (line 2032)
-* BFD_RELOC_390_GOT64:                   howto manager.      (line 1986)
-* BFD_RELOC_390_GOTENT:                  howto manager.      (line 1990)
-* BFD_RELOC_390_GOTOFF64:                howto manager.      (line 1992)
-* BFD_RELOC_390_GOTPC:                   howto manager.      (line 1964)
-* BFD_RELOC_390_GOTPCDBL:                howto manager.      (line 1984)
-* BFD_RELOC_390_GOTPLT12:                howto manager.      (line 1994)
-* BFD_RELOC_390_GOTPLT16:                howto manager.      (line 1996)
-* BFD_RELOC_390_GOTPLT20:                howto manager.      (line 2033)
-* BFD_RELOC_390_GOTPLT32:                howto manager.      (line 1998)
-* BFD_RELOC_390_GOTPLT64:                howto manager.      (line 2000)
-* BFD_RELOC_390_GOTPLTENT:               howto manager.      (line 2002)
-* BFD_RELOC_390_IRELATIVE:               howto manager.      (line 2036)
-* BFD_RELOC_390_JMP_SLOT:                howto manager.      (line 1960)
-* BFD_RELOC_390_PC12DBL:                 howto manager.      (line 1968)
-* BFD_RELOC_390_PC16DBL:                 howto manager.      (line 1972)
-* BFD_RELOC_390_PC24DBL:                 howto manager.      (line 1976)
-* BFD_RELOC_390_PC32DBL:                 howto manager.      (line 1980)
-* BFD_RELOC_390_PLT12DBL:                howto manager.      (line 1970)
-* BFD_RELOC_390_PLT16DBL:                howto manager.      (line 1974)
-* BFD_RELOC_390_PLT24DBL:                howto manager.      (line 1978)
-* BFD_RELOC_390_PLT32:                   howto manager.      (line 1954)
-* BFD_RELOC_390_PLT32DBL:                howto manager.      (line 1982)
-* BFD_RELOC_390_PLT64:                   howto manager.      (line 1988)
-* BFD_RELOC_390_PLTOFF16:                howto manager.      (line 2004)
-* BFD_RELOC_390_PLTOFF32:                howto manager.      (line 2006)
-* BFD_RELOC_390_PLTOFF64:                howto manager.      (line 2008)
-* BFD_RELOC_390_RELATIVE:                howto manager.      (line 1962)
-* BFD_RELOC_390_TLS_DTPMOD:              howto manager.      (line 2027)
-* BFD_RELOC_390_TLS_DTPOFF:              howto manager.      (line 2028)
-* BFD_RELOC_390_TLS_GD32:                howto manager.      (line 2013)
-* BFD_RELOC_390_TLS_GD64:                howto manager.      (line 2014)
-* BFD_RELOC_390_TLS_GDCALL:              howto manager.      (line 2011)
-* BFD_RELOC_390_TLS_GOTIE12:             howto manager.      (line 2015)
-* BFD_RELOC_390_TLS_GOTIE20:             howto manager.      (line 2034)
-* BFD_RELOC_390_TLS_GOTIE32:             howto manager.      (line 2016)
-* BFD_RELOC_390_TLS_GOTIE64:             howto manager.      (line 2017)
-* BFD_RELOC_390_TLS_IE32:                howto manager.      (line 2020)
-* BFD_RELOC_390_TLS_IE64:                howto manager.      (line 2021)
-* BFD_RELOC_390_TLS_IEENT:               howto manager.      (line 2022)
-* BFD_RELOC_390_TLS_LDCALL:              howto manager.      (line 2012)
-* BFD_RELOC_390_TLS_LDM32:               howto manager.      (line 2018)
-* BFD_RELOC_390_TLS_LDM64:               howto manager.      (line 2019)
-* BFD_RELOC_390_TLS_LDO32:               howto manager.      (line 2025)
-* BFD_RELOC_390_TLS_LDO64:               howto manager.      (line 2026)
-* BFD_RELOC_390_TLS_LE32:                howto manager.      (line 2023)
-* BFD_RELOC_390_TLS_LE64:                howto manager.      (line 2024)
-* BFD_RELOC_390_TLS_LOAD:                howto manager.      (line 2010)
-* BFD_RELOC_390_TLS_TPOFF:               howto manager.      (line 2029)
-* BFD_RELOC_64:                          howto manager.      (line   25)
-* BFD_RELOC_64_PCREL:                    howto manager.      (line   33)
+* BFD_RELOC_390_12:                      howto manager.      (line 1952)
+* BFD_RELOC_390_20:                      howto manager.      (line 2033)
+* BFD_RELOC_390_COPY:                    howto manager.      (line 1958)
+* BFD_RELOC_390_GLOB_DAT:                howto manager.      (line 1960)
+* BFD_RELOC_390_GOT12:                   howto manager.      (line 1954)
+* BFD_RELOC_390_GOT16:                   howto manager.      (line 1968)
+* BFD_RELOC_390_GOT20:                   howto manager.      (line 2034)
+* BFD_RELOC_390_GOT64:                   howto manager.      (line 1988)
+* BFD_RELOC_390_GOTENT:                  howto manager.      (line 1992)
+* BFD_RELOC_390_GOTOFF64:                howto manager.      (line 1994)
+* BFD_RELOC_390_GOTPC:                   howto manager.      (line 1966)
+* BFD_RELOC_390_GOTPCDBL:                howto manager.      (line 1986)
+* BFD_RELOC_390_GOTPLT12:                howto manager.      (line 1996)
+* BFD_RELOC_390_GOTPLT16:                howto manager.      (line 1998)
+* BFD_RELOC_390_GOTPLT20:                howto manager.      (line 2035)
+* BFD_RELOC_390_GOTPLT32:                howto manager.      (line 2000)
+* BFD_RELOC_390_GOTPLT64:                howto manager.      (line 2002)
+* BFD_RELOC_390_GOTPLTENT:               howto manager.      (line 2004)
+* BFD_RELOC_390_IRELATIVE:               howto manager.      (line 2038)
+* BFD_RELOC_390_JMP_SLOT:                howto manager.      (line 1962)
+* BFD_RELOC_390_PC12DBL:                 howto manager.      (line 1970)
+* BFD_RELOC_390_PC16DBL:                 howto manager.      (line 1974)
+* BFD_RELOC_390_PC24DBL:                 howto manager.      (line 1978)
+* BFD_RELOC_390_PC32DBL:                 howto manager.      (line 1982)
+* BFD_RELOC_390_PLT12DBL:                howto manager.      (line 1972)
+* BFD_RELOC_390_PLT16DBL:                howto manager.      (line 1976)
+* BFD_RELOC_390_PLT24DBL:                howto manager.      (line 1980)
+* BFD_RELOC_390_PLT32:                   howto manager.      (line 1956)
+* BFD_RELOC_390_PLT32DBL:                howto manager.      (line 1984)
+* BFD_RELOC_390_PLT64:                   howto manager.      (line 1990)
+* BFD_RELOC_390_PLTOFF16:                howto manager.      (line 2006)
+* BFD_RELOC_390_PLTOFF32:                howto manager.      (line 2008)
+* BFD_RELOC_390_PLTOFF64:                howto manager.      (line 2010)
+* BFD_RELOC_390_RELATIVE:                howto manager.      (line 1964)
+* BFD_RELOC_390_TLS_DTPMOD:              howto manager.      (line 2029)
+* BFD_RELOC_390_TLS_DTPOFF:              howto manager.      (line 2030)
+* BFD_RELOC_390_TLS_GD32:                howto manager.      (line 2015)
+* BFD_RELOC_390_TLS_GD64:                howto manager.      (line 2016)
+* BFD_RELOC_390_TLS_GDCALL:              howto manager.      (line 2013)
+* BFD_RELOC_390_TLS_GOTIE12:             howto manager.      (line 2017)
+* BFD_RELOC_390_TLS_GOTIE20:             howto manager.      (line 2036)
+* BFD_RELOC_390_TLS_GOTIE32:             howto manager.      (line 2018)
+* BFD_RELOC_390_TLS_GOTIE64:             howto manager.      (line 2019)
+* BFD_RELOC_390_TLS_IE32:                howto manager.      (line 2022)
+* BFD_RELOC_390_TLS_IE64:                howto manager.      (line 2023)
+* BFD_RELOC_390_TLS_IEENT:               howto manager.      (line 2024)
+* BFD_RELOC_390_TLS_LDCALL:              howto manager.      (line 2014)
+* BFD_RELOC_390_TLS_LDM32:               howto manager.      (line 2020)
+* BFD_RELOC_390_TLS_LDM64:               howto manager.      (line 2021)
+* BFD_RELOC_390_TLS_LDO32:               howto manager.      (line 2027)
+* BFD_RELOC_390_TLS_LDO64:               howto manager.      (line 2028)
+* BFD_RELOC_390_TLS_LE32:                howto manager.      (line 2025)
+* BFD_RELOC_390_TLS_LE64:                howto manager.      (line 2026)
+* BFD_RELOC_390_TLS_LOAD:                howto manager.      (line 2012)
+* BFD_RELOC_390_TLS_TPOFF:               howto manager.      (line 2031)
+* BFD_RELOC_64:                          howto manager.      (line   24)
+* BFD_RELOC_64_PCREL:                    howto manager.      (line   32)
 * BFD_RELOC_64_PLTOFF:                   howto manager.      (line   59)
 * BFD_RELOC_64_PLT_PCREL:                howto manager.      (line   54)
 * BFD_RELOC_68K_GLOB_DAT:                howto manager.      (line   70)
@@ -12341,159 +12138,159 @@ BFD Index
 * BFD_RELOC_68K_TLS_LE16:                howto manager.      (line   86)
 * BFD_RELOC_68K_TLS_LE32:                howto manager.      (line   85)
 * BFD_RELOC_68K_TLS_LE8:                 howto manager.      (line   87)
-* BFD_RELOC_8:                           howto manager.      (line   31)
+* BFD_RELOC_8:                           howto manager.      (line   30)
 * BFD_RELOC_8_BASEREL:                   howto manager.      (line   94)
 * BFD_RELOC_8_FFnn:                      howto manager.      (line   97)
 * BFD_RELOC_8_GOTOFF:                    howto manager.      (line   53)
 * BFD_RELOC_8_GOT_PCREL:                 howto manager.      (line   47)
-* BFD_RELOC_8_PCREL:                     howto manager.      (line   38)
+* BFD_RELOC_8_PCREL:                     howto manager.      (line   37)
 * BFD_RELOC_8_PLTOFF:                    howto manager.      (line   65)
 * BFD_RELOC_8_PLT_PCREL:                 howto manager.      (line   58)
-* BFD_RELOC_AARCH64_16:                  howto manager.      (line 2761)
-* BFD_RELOC_AARCH64_16_PCREL:            howto manager.      (line 2767)
-* BFD_RELOC_AARCH64_32:                  howto manager.      (line 2760)
-* BFD_RELOC_AARCH64_32_PCREL:            howto manager.      (line 2766)
-* BFD_RELOC_AARCH64_64:                  howto manager.      (line 2759)
-* BFD_RELOC_AARCH64_64_PCREL:            howto manager.      (line 2765)
-* BFD_RELOC_AARCH64_ADD_LO12:            howto manager.      (line 2840)
-* BFD_RELOC_AARCH64_ADR_GOT_PAGE:        howto manager.      (line 2886)
-* BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL:   howto manager.      (line 2836)
-* BFD_RELOC_AARCH64_ADR_HI21_PCREL:      howto manager.      (line 2833)
-* BFD_RELOC_AARCH64_ADR_LO21_PCREL:      howto manager.      (line 2830)
-* BFD_RELOC_AARCH64_BRANCH19:            howto manager.      (line 2852)
-* BFD_RELOC_AARCH64_CALL26:              howto manager.      (line 2860)
-* BFD_RELOC_AARCH64_COPY:                howto manager.      (line 3053)
-* BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP:  howto manager.      (line 3077)
-* BFD_RELOC_AARCH64_GLOB_DAT:            howto manager.      (line 3055)
-* BFD_RELOC_AARCH64_GOT_LD_PREL19:       howto manager.      (line 2880)
-* BFD_RELOC_AARCH64_IRELATIVE:           howto manager.      (line 3069)
-* BFD_RELOC_AARCH64_JUMP26:              howto manager.      (line 2856)
-* BFD_RELOC_AARCH64_JUMP_SLOT:           howto manager.      (line 3057)
-* BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14:   howto manager.      (line 2907)
-* BFD_RELOC_AARCH64_LD32_GOT_LO12_NC:    howto manager.      (line 2894)
-* BFD_RELOC_AARCH64_LD64_GOTOFF_LO15:    howto manager.      (line 2904)
-* BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15:   howto manager.      (line 2910)
-* BFD_RELOC_AARCH64_LD64_GOT_LO12_NC:    howto manager.      (line 2890)
-* BFD_RELOC_AARCH64_LDST128_LO12:        howto manager.      (line 2876)
-* BFD_RELOC_AARCH64_LDST16_LO12:         howto manager.      (line 2864)
-* BFD_RELOC_AARCH64_LDST32_LO12:         howto manager.      (line 2868)
-* BFD_RELOC_AARCH64_LDST64_LO12:         howto manager.      (line 2872)
-* BFD_RELOC_AARCH64_LDST8_LO12:          howto manager.      (line 2844)
-* BFD_RELOC_AARCH64_LDST_LO12:           howto manager.      (line 3080)
-* BFD_RELOC_AARCH64_LD_GOT_LO12_NC:      howto manager.      (line 3098)
-* BFD_RELOC_AARCH64_LD_LO19_PCREL:       howto manager.      (line 2826)
-* BFD_RELOC_AARCH64_MOVW_G0:             howto manager.      (line 2770)
-* BFD_RELOC_AARCH64_MOVW_G0_NC:          howto manager.      (line 2773)
-* BFD_RELOC_AARCH64_MOVW_G0_S:           howto manager.      (line 2791)
-* BFD_RELOC_AARCH64_MOVW_G1:             howto manager.      (line 2776)
-* BFD_RELOC_AARCH64_MOVW_G1_NC:          howto manager.      (line 2779)
-* BFD_RELOC_AARCH64_MOVW_G1_S:           howto manager.      (line 2795)
-* BFD_RELOC_AARCH64_MOVW_G2:             howto manager.      (line 2782)
-* BFD_RELOC_AARCH64_MOVW_G2_NC:          howto manager.      (line 2785)
-* BFD_RELOC_AARCH64_MOVW_G2_S:           howto manager.      (line 2799)
-* BFD_RELOC_AARCH64_MOVW_G3:             howto manager.      (line 2788)
-* BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC:   howto manager.      (line 2898)
-* BFD_RELOC_AARCH64_MOVW_GOTOFF_G1:      howto manager.      (line 2901)
-* BFD_RELOC_AARCH64_MOVW_PREL_G0:        howto manager.      (line 2803)
-* BFD_RELOC_AARCH64_MOVW_PREL_G0_NC:     howto manager.      (line 2807)
-* BFD_RELOC_AARCH64_MOVW_PREL_G1:        howto manager.      (line 2811)
-* BFD_RELOC_AARCH64_MOVW_PREL_G1_NC:     howto manager.      (line 2814)
-* BFD_RELOC_AARCH64_MOVW_PREL_G2:        howto manager.      (line 2817)
-* BFD_RELOC_AARCH64_MOVW_PREL_G2_NC:     howto manager.      (line 2820)
-* BFD_RELOC_AARCH64_MOVW_PREL_G3:        howto manager.      (line 2823)
-* BFD_RELOC_AARCH64_NONE:                howto manager.      (line 2757)
-* BFD_RELOC_AARCH64_NULL:                howto manager.      (line 2755)
-* BFD_RELOC_AARCH64_RELATIVE:            howto manager.      (line 3059)
-* BFD_RELOC_AARCH64_RELOC_END:           howto manager.      (line 3071)
-* BFD_RELOC_AARCH64_RELOC_START:         howto manager.      (line 2750)
-* BFD_RELOC_AARCH64_TLSDESC:             howto manager.      (line 3067)
-* BFD_RELOC_AARCH64_TLSDESC_ADD:         howto manager.      (line 3049)
-* BFD_RELOC_AARCH64_TLSDESC_ADD_LO12:    howto manager.      (line 3041)
-* BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21:  howto manager.      (line 3035)
-* BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21:  howto manager.      (line 3033)
-* BFD_RELOC_AARCH64_TLSDESC_CALL:        howto manager.      (line 3051)
-* BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC: howto manager.     (line 3039)
-* BFD_RELOC_AARCH64_TLSDESC_LD64_LO12:   howto manager.      (line 3037)
-* BFD_RELOC_AARCH64_TLSDESC_LDR:         howto manager.      (line 3047)
-* BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC:  howto manager.      (line 3104)
-* BFD_RELOC_AARCH64_TLSDESC_LD_PREL19:   howto manager.      (line 3031)
-* BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC:   howto manager.      (line 3045)
-* BFD_RELOC_AARCH64_TLSDESC_OFF_G1:      howto manager.      (line 3043)
-* BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:   howto manager.      (line 2920)
-* BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21:    howto manager.      (line 2913)
-* BFD_RELOC_AARCH64_TLSGD_ADR_PREL21:    howto manager.      (line 2918)
-* BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC:    howto manager.      (line 2924)
-* BFD_RELOC_AARCH64_TLSGD_MOVW_G1:       howto manager.      (line 2926)
+* BFD_RELOC_AARCH64_16:                  howto manager.      (line 2893)
+* BFD_RELOC_AARCH64_16_PCREL:            howto manager.      (line 2899)
+* BFD_RELOC_AARCH64_32:                  howto manager.      (line 2892)
+* BFD_RELOC_AARCH64_32_PCREL:            howto manager.      (line 2898)
+* BFD_RELOC_AARCH64_64:                  howto manager.      (line 2891)
+* BFD_RELOC_AARCH64_64_PCREL:            howto manager.      (line 2897)
+* BFD_RELOC_AARCH64_ADD_LO12:            howto manager.      (line 2972)
+* BFD_RELOC_AARCH64_ADR_GOT_PAGE:        howto manager.      (line 3018)
+* BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL:   howto manager.      (line 2968)
+* BFD_RELOC_AARCH64_ADR_HI21_PCREL:      howto manager.      (line 2965)
+* BFD_RELOC_AARCH64_ADR_LO21_PCREL:      howto manager.      (line 2962)
+* BFD_RELOC_AARCH64_BRANCH19:            howto manager.      (line 2984)
+* BFD_RELOC_AARCH64_CALL26:              howto manager.      (line 2992)
+* BFD_RELOC_AARCH64_COPY:                howto manager.      (line 3177)
+* BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP:  howto manager.      (line 3195)
+* BFD_RELOC_AARCH64_GLOB_DAT:            howto manager.      (line 3178)
+* BFD_RELOC_AARCH64_GOT_LD_PREL19:       howto manager.      (line 3012)
+* BFD_RELOC_AARCH64_IRELATIVE:           howto manager.      (line 3187)
+* BFD_RELOC_AARCH64_JUMP26:              howto manager.      (line 2988)
+* BFD_RELOC_AARCH64_JUMP_SLOT:           howto manager.      (line 3179)
+* BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14:   howto manager.      (line 3039)
+* BFD_RELOC_AARCH64_LD32_GOT_LO12_NC:    howto manager.      (line 3026)
+* BFD_RELOC_AARCH64_LD64_GOTOFF_LO15:    howto manager.      (line 3036)
+* BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15:   howto manager.      (line 3042)
+* BFD_RELOC_AARCH64_LD64_GOT_LO12_NC:    howto manager.      (line 3022)
+* BFD_RELOC_AARCH64_LDST128_LO12:        howto manager.      (line 3008)
+* BFD_RELOC_AARCH64_LDST16_LO12:         howto manager.      (line 2996)
+* BFD_RELOC_AARCH64_LDST32_LO12:         howto manager.      (line 3000)
+* BFD_RELOC_AARCH64_LDST64_LO12:         howto manager.      (line 3004)
+* BFD_RELOC_AARCH64_LDST8_LO12:          howto manager.      (line 2976)
+* BFD_RELOC_AARCH64_LDST_LO12:           howto manager.      (line 3198)
+* BFD_RELOC_AARCH64_LD_GOT_LO12_NC:      howto manager.      (line 3216)
+* BFD_RELOC_AARCH64_LD_LO19_PCREL:       howto manager.      (line 2958)
+* BFD_RELOC_AARCH64_MOVW_G0:             howto manager.      (line 2902)
+* BFD_RELOC_AARCH64_MOVW_G0_NC:          howto manager.      (line 2905)
+* BFD_RELOC_AARCH64_MOVW_G0_S:           howto manager.      (line 2923)
+* BFD_RELOC_AARCH64_MOVW_G1:             howto manager.      (line 2908)
+* BFD_RELOC_AARCH64_MOVW_G1_NC:          howto manager.      (line 2911)
+* BFD_RELOC_AARCH64_MOVW_G1_S:           howto manager.      (line 2927)
+* BFD_RELOC_AARCH64_MOVW_G2:             howto manager.      (line 2914)
+* BFD_RELOC_AARCH64_MOVW_G2_NC:          howto manager.      (line 2917)
+* BFD_RELOC_AARCH64_MOVW_G2_S:           howto manager.      (line 2931)
+* BFD_RELOC_AARCH64_MOVW_G3:             howto manager.      (line 2920)
+* BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC:   howto manager.      (line 3030)
+* BFD_RELOC_AARCH64_MOVW_GOTOFF_G1:      howto manager.      (line 3033)
+* BFD_RELOC_AARCH64_MOVW_PREL_G0:        howto manager.      (line 2935)
+* BFD_RELOC_AARCH64_MOVW_PREL_G0_NC:     howto manager.      (line 2939)
+* BFD_RELOC_AARCH64_MOVW_PREL_G1:        howto manager.      (line 2943)
+* BFD_RELOC_AARCH64_MOVW_PREL_G1_NC:     howto manager.      (line 2946)
+* BFD_RELOC_AARCH64_MOVW_PREL_G2:        howto manager.      (line 2949)
+* BFD_RELOC_AARCH64_MOVW_PREL_G2_NC:     howto manager.      (line 2952)
+* BFD_RELOC_AARCH64_MOVW_PREL_G3:        howto manager.      (line 2955)
+* BFD_RELOC_AARCH64_NONE:                howto manager.      (line 2889)
+* BFD_RELOC_AARCH64_NULL:                howto manager.      (line 2887)
+* BFD_RELOC_AARCH64_RELATIVE:            howto manager.      (line 3180)
+* BFD_RELOC_AARCH64_RELOC_END:           howto manager.      (line 3189)
+* BFD_RELOC_AARCH64_RELOC_START:         howto manager.      (line 2882)
+* BFD_RELOC_AARCH64_TLSDESC:             howto manager.      (line 3185)
+* BFD_RELOC_AARCH64_TLSDESC_ADD:         howto manager.      (line 3174)
+* BFD_RELOC_AARCH64_TLSDESC_ADD_LO12:    howto manager.      (line 3170)
+* BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21:  howto manager.      (line 3167)
+* BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21:  howto manager.      (line 3166)
+* BFD_RELOC_AARCH64_TLSDESC_CALL:        howto manager.      (line 3175)
+* BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC: howto manager.     (line 3169)
+* BFD_RELOC_AARCH64_TLSDESC_LD64_LO12:   howto manager.      (line 3168)
+* BFD_RELOC_AARCH64_TLSDESC_LDR:         howto manager.      (line 3173)
+* BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC:  howto manager.      (line 3222)
+* BFD_RELOC_AARCH64_TLSDESC_LD_PREL19:   howto manager.      (line 3165)
+* BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC:   howto manager.      (line 3172)
+* BFD_RELOC_AARCH64_TLSDESC_OFF_G1:      howto manager.      (line 3171)
+* BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:   howto manager.      (line 3052)
+* BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21:    howto manager.      (line 3045)
+* BFD_RELOC_AARCH64_TLSGD_ADR_PREL21:    howto manager.      (line 3050)
+* BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC:    howto manager.      (line 3056)
+* BFD_RELOC_AARCH64_TLSGD_MOVW_G1:       howto manager.      (line 3058)
 * BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21: howto manager.
-                                                             (line 2928)
+                                                             (line 3060)
 * BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: howto manager.
-                                                             (line 2932)
+                                                             (line 3064)
 * BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: howto manager.
-                                                             (line 2930)
+                                                             (line 3062)
 * BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC: howto manager.
-                                                             (line 3101)
-* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: howto manager. (line 2934)
+                                                             (line 3219)
+* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: howto manager. (line 3066)
 * BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: howto manager.
-                                                             (line 2936)
-* BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: howto manager.   (line 2938)
-* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: howto manager.    (line 2940)
-* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12: howto manager.    (line 2942)
-* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: howto manager. (line 2944)
-* BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC:   howto manager.      (line 2947)
-* BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21:    howto manager.      (line 2951)
-* BFD_RELOC_AARCH64_TLSLD_ADR_PREL21:    howto manager.      (line 2954)
-* BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12: howto manager. (line 2957)
+                                                             (line 3068)
+* BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: howto manager.   (line 3070)
+* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: howto manager.    (line 3072)
+* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12: howto manager.    (line 3074)
+* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: howto manager. (line 3076)
+* BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC:   howto manager.      (line 3079)
+* BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21:    howto manager.      (line 3083)
+* BFD_RELOC_AARCH64_TLSLD_ADR_PREL21:    howto manager.      (line 3086)
+* BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12: howto manager. (line 3089)
 * BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC: howto manager.
-                                                             (line 2960)
-* BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12: howto manager. (line 2963)
+                                                             (line 3092)
+* BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12: howto manager. (line 3095)
 * BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC: howto manager.
-                                                             (line 2966)
-* BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12: howto manager. (line 2969)
+                                                             (line 3098)
+* BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12: howto manager. (line 3101)
 * BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC: howto manager.
-                                                             (line 2972)
-* BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12: howto manager.  (line 2975)
+                                                             (line 3104)
+* BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12: howto manager.  (line 3107)
 * BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC: howto manager.
-                                                             (line 2978)
-* BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12: howto manager.   (line 3084)
+                                                             (line 3110)
+* BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12: howto manager.   (line 3202)
 * BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12_NC: howto manager.
-                                                             (line 3088)
-* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0: howto manager.     (line 2981)
-* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: howto manager.  (line 2983)
-* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1: howto manager.     (line 2985)
-* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: howto manager.  (line 2987)
-* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2: howto manager.     (line 2989)
-* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12: howto manager.     (line 3001)
-* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12: howto manager.     (line 3003)
-* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC: howto manager.  (line 3005)
-* BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12: howto manager.  (line 3007)
+                                                             (line 3206)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0: howto manager.     (line 3113)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: howto manager.  (line 3115)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1: howto manager.     (line 3118)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: howto manager.  (line 3120)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2: howto manager.     (line 3123)
+* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12: howto manager.     (line 3135)
+* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12: howto manager.     (line 3137)
+* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC: howto manager.  (line 3139)
+* BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12: howto manager.  (line 3141)
 * BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC: howto manager.
-                                                             (line 3010)
-* BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12: howto manager.  (line 3013)
+                                                             (line 3144)
+* BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12: howto manager.  (line 3147)
 * BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC: howto manager.
-                                                             (line 3016)
-* BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12: howto manager.  (line 3019)
+                                                             (line 3150)
+* BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12: howto manager.  (line 3153)
 * BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC: howto manager.
-                                                             (line 3022)
-* BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12: howto manager.   (line 3025)
+                                                             (line 3156)
+* BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12: howto manager.   (line 3159)
 * BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12_NC: howto manager.
-                                                             (line 3028)
-* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12: howto manager.    (line 3091)
-* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC: howto manager. (line 3095)
-* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: howto manager.      (line 2997)
-* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: howto manager.   (line 2999)
-* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: howto manager.      (line 2993)
-* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC: howto manager.   (line 2995)
-* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2: howto manager.      (line 2991)
-* BFD_RELOC_AARCH64_TLS_DTPMOD:          howto manager.      (line 3061)
-* BFD_RELOC_AARCH64_TLS_DTPREL:          howto manager.      (line 3063)
-* BFD_RELOC_AARCH64_TLS_TPREL:           howto manager.      (line 3065)
-* BFD_RELOC_AARCH64_TSTBR14:             howto manager.      (line 2848)
-* BFD_RELOC_AC_SECTOFF_S9:               howto manager.      (line 1062)
-* BFD_RELOC_AC_SECTOFF_S9_1:             howto manager.      (line 1063)
-* BFD_RELOC_AC_SECTOFF_S9_2:             howto manager.      (line 1064)
-* BFD_RELOC_AC_SECTOFF_U8:               howto manager.      (line 1059)
-* BFD_RELOC_AC_SECTOFF_U8_1:             howto manager.      (line 1060)
-* BFD_RELOC_AC_SECTOFF_U8_2:             howto manager.      (line 1061)
+                                                             (line 3162)
+* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12: howto manager.    (line 3209)
+* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC: howto manager. (line 3213)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: howto manager.      (line 3131)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: howto manager.   (line 3133)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: howto manager.      (line 3127)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC: howto manager.   (line 3129)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2: howto manager.      (line 3125)
+* BFD_RELOC_AARCH64_TLS_DTPMOD:          howto manager.      (line 3182)
+* BFD_RELOC_AARCH64_TLS_DTPREL:          howto manager.      (line 3183)
+* BFD_RELOC_AARCH64_TLS_TPREL:           howto manager.      (line 3184)
+* BFD_RELOC_AARCH64_TSTBR14:             howto manager.      (line 2980)
+* BFD_RELOC_AC_SECTOFF_S9:               howto manager.      (line 1079)
+* BFD_RELOC_AC_SECTOFF_S9_1:             howto manager.      (line 1080)
+* BFD_RELOC_AC_SECTOFF_S9_2:             howto manager.      (line 1081)
+* BFD_RELOC_AC_SECTOFF_U8:               howto manager.      (line 1076)
+* BFD_RELOC_AC_SECTOFF_U8_1:             howto manager.      (line 1077)
+* BFD_RELOC_AC_SECTOFF_U8_2:             howto manager.      (line 1078)
 * BFD_RELOC_ALPHA_BOH:                   howto manager.      (line  288)
 * BFD_RELOC_ALPHA_BRSGP:                 howto manager.      (line  275)
 * BFD_RELOC_ALPHA_BSR:                   howto manager.      (line  282)
@@ -12523,462 +12320,461 @@ BFD Index
 * BFD_RELOC_ALPHA_TPREL64:               howto manager.      (line  300)
 * BFD_RELOC_ALPHA_TPREL_HI16:            howto manager.      (line  301)
 * BFD_RELOC_ALPHA_TPREL_LO16:            howto manager.      (line  302)
-* BFD_RELOC_ARC_16:                      howto manager.      (line 1031)
-* BFD_RELOC_ARC_24:                      howto manager.      (line 1032)
-* BFD_RELOC_ARC_32:                      howto manager.      (line 1033)
-* BFD_RELOC_ARC_32_ME:                   howto manager.      (line 1053)
-* BFD_RELOC_ARC_32_ME_S:                 howto manager.      (line 1054)
-* BFD_RELOC_ARC_32_PCREL:                howto manager.      (line 1071)
-* BFD_RELOC_ARC_8:                       howto manager.      (line 1030)
-* BFD_RELOC_ARC_COPY:                    howto manager.      (line 1076)
-* BFD_RELOC_ARC_GLOB_DAT:                howto manager.      (line 1077)
-* BFD_RELOC_ARC_GOT32:                   howto manager.      (line 1073)
-* BFD_RELOC_ARC_GOTOFF:                  howto manager.      (line 1080)
-* BFD_RELOC_ARC_GOTPC:                   howto manager.      (line 1081)
-* BFD_RELOC_ARC_GOTPC32:                 howto manager.      (line 1074)
-* BFD_RELOC_ARC_JLI_SECTOFF:             howto manager.      (line 1097)
-* BFD_RELOC_ARC_JMP_SLOT:                howto manager.      (line 1078)
-* BFD_RELOC_ARC_N16:                     howto manager.      (line 1035)
-* BFD_RELOC_ARC_N24:                     howto manager.      (line 1036)
-* BFD_RELOC_ARC_N32:                     howto manager.      (line 1037)
-* BFD_RELOC_ARC_N32_ME:                  howto manager.      (line 1055)
-* BFD_RELOC_ARC_N8:                      howto manager.      (line 1034)
-* BFD_RELOC_ARC_NONE:                    howto manager.      (line 1029)
-* BFD_RELOC_ARC_NPS_CMEM16:              howto manager.      (line 1096)
-* BFD_RELOC_ARC_PC32:                    howto manager.      (line 1072)
-* BFD_RELOC_ARC_PLT32:                   howto manager.      (line 1075)
-* BFD_RELOC_ARC_RELATIVE:                howto manager.      (line 1079)
-* BFD_RELOC_ARC_S13_PCREL:               howto manager.      (line 1051)
-* BFD_RELOC_ARC_S21H_PCREL:              howto manager.      (line 1040)
-* BFD_RELOC_ARC_S21H_PCREL_PLT:          howto manager.      (line 1095)
-* BFD_RELOC_ARC_S21W_PCREL:              howto manager.      (line 1041)
-* BFD_RELOC_ARC_S21W_PCREL_PLT:          howto manager.      (line 1082)
-* BFD_RELOC_ARC_S25H_PCREL:              howto manager.      (line 1042)
-* BFD_RELOC_ARC_S25H_PCREL_PLT:          howto manager.      (line 1083)
-* BFD_RELOC_ARC_S25W_PCREL:              howto manager.      (line 1043)
-* BFD_RELOC_ARC_S25W_PCREL_PLT:          howto manager.      (line 1094)
-* BFD_RELOC_ARC_SDA:                     howto manager.      (line 1038)
-* BFD_RELOC_ARC_SDA16_LD:                howto manager.      (line 1048)
-* BFD_RELOC_ARC_SDA16_LD1:               howto manager.      (line 1049)
-* BFD_RELOC_ARC_SDA16_LD2:               howto manager.      (line 1050)
-* BFD_RELOC_ARC_SDA16_ST2:               howto manager.      (line 1070)
-* BFD_RELOC_ARC_SDA32:                   howto manager.      (line 1044)
-* BFD_RELOC_ARC_SDA32_ME:                howto manager.      (line 1057)
-* BFD_RELOC_ARC_SDA_12:                  howto manager.      (line 1069)
-* BFD_RELOC_ARC_SDA_LDST:                howto manager.      (line 1045)
-* BFD_RELOC_ARC_SDA_LDST1:               howto manager.      (line 1046)
-* BFD_RELOC_ARC_SDA_LDST2:               howto manager.      (line 1047)
-* BFD_RELOC_ARC_SECTOFF:                 howto manager.      (line 1039)
-* BFD_RELOC_ARC_SECTOFF_1:               howto manager.      (line 1067)
-* BFD_RELOC_ARC_SECTOFF_2:               howto manager.      (line 1068)
-* BFD_RELOC_ARC_SECTOFF_ME:              howto manager.      (line 1056)
-* BFD_RELOC_ARC_SECTOFF_ME_1:            howto manager.      (line 1065)
-* BFD_RELOC_ARC_SECTOFF_ME_2:            howto manager.      (line 1066)
-* BFD_RELOC_ARC_TLS_DTPMOD:              howto manager.      (line 1084)
-* BFD_RELOC_ARC_TLS_DTPOFF:              howto manager.      (line 1090)
-* BFD_RELOC_ARC_TLS_DTPOFF_S9:           howto manager.      (line 1091)
-* BFD_RELOC_ARC_TLS_GD_CALL:             howto manager.      (line 1088)
-* BFD_RELOC_ARC_TLS_GD_GOT:              howto manager.      (line 1086)
-* BFD_RELOC_ARC_TLS_GD_LD:               howto manager.      (line 1087)
-* BFD_RELOC_ARC_TLS_IE_GOT:              howto manager.      (line 1089)
-* BFD_RELOC_ARC_TLS_LE_32:               howto manager.      (line 1093)
-* BFD_RELOC_ARC_TLS_LE_S9:               howto manager.      (line 1092)
-* BFD_RELOC_ARC_TLS_TPOFF:               howto manager.      (line 1085)
-* BFD_RELOC_ARC_W:                       howto manager.      (line 1052)
-* BFD_RELOC_ARC_W_ME:                    howto manager.      (line 1058)
-* BFD_RELOC_ARM_ADRL_IMMEDIATE:          howto manager.      (line  902)
-* BFD_RELOC_ARM_ADR_IMM:                 howto manager.      (line  917)
-* BFD_RELOC_ARM_ALU_PC_G0:               howto manager.      (line  864)
-* BFD_RELOC_ARM_ALU_PC_G0_NC:            howto manager.      (line  863)
-* BFD_RELOC_ARM_ALU_PC_G1:               howto manager.      (line  866)
-* BFD_RELOC_ARM_ALU_PC_G1_NC:            howto manager.      (line  865)
-* BFD_RELOC_ARM_ALU_PC_G2:               howto manager.      (line  867)
-* BFD_RELOC_ARM_ALU_SB_G0:               howto manager.      (line  878)
-* BFD_RELOC_ARM_ALU_SB_G0_NC:            howto manager.      (line  877)
-* BFD_RELOC_ARM_ALU_SB_G1:               howto manager.      (line  880)
-* BFD_RELOC_ARM_ALU_SB_G1_NC:            howto manager.      (line  879)
-* BFD_RELOC_ARM_ALU_SB_G2:               howto manager.      (line  881)
-* BFD_RELOC_ARM_CP_OFF_IMM:              howto manager.      (line  912)
-* BFD_RELOC_ARM_CP_OFF_IMM_S2:           howto manager.      (line  913)
-* BFD_RELOC_ARM_FUNCDESC:                howto manager.      (line  833)
-* BFD_RELOC_ARM_FUNCDESC_VALUE:          howto manager.      (line  834)
-* BFD_RELOC_ARM_GLOB_DAT:                howto manager.      (line  840)
-* BFD_RELOC_ARM_GOT32:                   howto manager.      (line  841)
-* BFD_RELOC_ARM_GOTFUNCDESC:             howto manager.      (line  831)
-* BFD_RELOC_ARM_GOTOFF:                  howto manager.      (line  844)
-* BFD_RELOC_ARM_GOTOFFFUNCDESC:          howto manager.      (line  832)
-* BFD_RELOC_ARM_GOTPC:                   howto manager.      (line  845)
-* BFD_RELOC_ARM_GOT_PREL:                howto manager.      (line  846)
-* BFD_RELOC_ARM_HVC:                     howto manager.      (line  909)
-* BFD_RELOC_ARM_HWLITERAL:               howto manager.      (line  924)
-* BFD_RELOC_ARM_IMMEDIATE:               howto manager.      (line  901)
-* BFD_RELOC_ARM_IN_POOL:                 howto manager.      (line  920)
-* BFD_RELOC_ARM_IRELATIVE:               howto manager.      (line  894)
-* BFD_RELOC_ARM_JUMP_SLOT:               howto manager.      (line  839)
-* BFD_RELOC_ARM_LDC_PC_G0:               howto manager.      (line  874)
-* BFD_RELOC_ARM_LDC_PC_G1:               howto manager.      (line  875)
-* BFD_RELOC_ARM_LDC_PC_G2:               howto manager.      (line  876)
-* BFD_RELOC_ARM_LDC_SB_G0:               howto manager.      (line  888)
-* BFD_RELOC_ARM_LDC_SB_G1:               howto manager.      (line  889)
-* BFD_RELOC_ARM_LDC_SB_G2:               howto manager.      (line  890)
-* BFD_RELOC_ARM_LDRS_PC_G0:              howto manager.      (line  871)
-* BFD_RELOC_ARM_LDRS_PC_G1:              howto manager.      (line  872)
-* BFD_RELOC_ARM_LDRS_PC_G2:              howto manager.      (line  873)
-* BFD_RELOC_ARM_LDRS_SB_G0:              howto manager.      (line  885)
-* BFD_RELOC_ARM_LDRS_SB_G1:              howto manager.      (line  886)
-* BFD_RELOC_ARM_LDRS_SB_G2:              howto manager.      (line  887)
-* BFD_RELOC_ARM_LDR_IMM:                 howto manager.      (line  918)
-* BFD_RELOC_ARM_LDR_PC_G0:               howto manager.      (line  868)
-* BFD_RELOC_ARM_LDR_PC_G1:               howto manager.      (line  869)
-* BFD_RELOC_ARM_LDR_PC_G2:               howto manager.      (line  870)
-* BFD_RELOC_ARM_LDR_SB_G0:               howto manager.      (line  882)
-* BFD_RELOC_ARM_LDR_SB_G1:               howto manager.      (line  883)
-* BFD_RELOC_ARM_LDR_SB_G2:               howto manager.      (line  884)
-* BFD_RELOC_ARM_LITERAL:                 howto manager.      (line  919)
-* BFD_RELOC_ARM_MOVT:                    howto manager.      (line  823)
-* BFD_RELOC_ARM_MOVT_PCREL:              howto manager.      (line  825)
-* BFD_RELOC_ARM_MOVW:                    howto manager.      (line  822)
-* BFD_RELOC_ARM_MOVW_PCREL:              howto manager.      (line  824)
-* BFD_RELOC_ARM_MULTI:                   howto manager.      (line  911)
-* BFD_RELOC_ARM_OFFSET_IMM:              howto manager.      (line  803)
-* BFD_RELOC_ARM_OFFSET_IMM8:             howto manager.      (line  921)
-* BFD_RELOC_ARM_PCREL_BLX:               howto manager.      (line  767)
-* BFD_RELOC_ARM_PCREL_BRANCH:            howto manager.      (line  764)
-* BFD_RELOC_ARM_PCREL_CALL:              howto manager.      (line  775)
-* BFD_RELOC_ARM_PCREL_JUMP:              howto manager.      (line  778)
-* BFD_RELOC_ARM_PLT32:                   howto manager.      (line  842)
-* BFD_RELOC_ARM_PREL31:                  howto manager.      (line  820)
-* BFD_RELOC_ARM_RELATIVE:                howto manager.      (line  843)
-* BFD_RELOC_ARM_ROSEGREL32:              howto manager.      (line  812)
-* BFD_RELOC_ARM_SBREL32:                 howto manager.      (line  814)
-* BFD_RELOC_ARM_SHIFT_IMM:               howto manager.      (line  907)
-* BFD_RELOC_ARM_SMC:                     howto manager.      (line  908)
-* BFD_RELOC_ARM_SWI:                     howto manager.      (line  910)
-* BFD_RELOC_ARM_T32_ADD_IMM:             howto manager.      (line  904)
-* BFD_RELOC_ARM_T32_ADD_PC12:            howto manager.      (line  906)
-* BFD_RELOC_ARM_T32_CP_OFF_IMM:          howto manager.      (line  914)
-* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2:       howto manager.      (line  915)
-* BFD_RELOC_ARM_T32_IMM12:               howto manager.      (line  905)
-* BFD_RELOC_ARM_T32_IMMEDIATE:           howto manager.      (line  903)
-* BFD_RELOC_ARM_T32_OFFSET_IMM:          howto manager.      (line  923)
-* BFD_RELOC_ARM_T32_OFFSET_U8:           howto manager.      (line  922)
-* BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM:   howto manager.      (line  916)
-* BFD_RELOC_ARM_TARGET1:                 howto manager.      (line  809)
-* BFD_RELOC_ARM_TARGET2:                 howto manager.      (line  816)
-* BFD_RELOC_ARM_THM_TLS_CALL:            howto manager.      (line  858)
-* BFD_RELOC_ARM_THM_TLS_DESCSEQ:         howto manager.      (line  860)
-* BFD_RELOC_ARM_THUMB_ADD:               howto manager.      (line  925)
-* BFD_RELOC_ARM_THUMB_ALU_ABS_G0_NC:     howto manager.      (line  896)
-* BFD_RELOC_ARM_THUMB_ALU_ABS_G1_NC:     howto manager.      (line  897)
-* BFD_RELOC_ARM_THUMB_ALU_ABS_G2_NC:     howto manager.      (line  898)
-* BFD_RELOC_ARM_THUMB_ALU_ABS_G3_NC:     howto manager.      (line  899)
-* BFD_RELOC_ARM_THUMB_BF13:              howto manager.      (line  786)
-* BFD_RELOC_ARM_THUMB_BF17:              howto manager.      (line  784)
-* BFD_RELOC_ARM_THUMB_BF19:              howto manager.      (line  788)
-* BFD_RELOC_ARM_THUMB_IMM:               howto manager.      (line  926)
-* BFD_RELOC_ARM_THUMB_LOOP12:            howto manager.      (line  790)
-* BFD_RELOC_ARM_THUMB_MOVT:              howto manager.      (line  827)
-* BFD_RELOC_ARM_THUMB_MOVT_PCREL:        howto manager.      (line  829)
-* BFD_RELOC_ARM_THUMB_MOVW:              howto manager.      (line  826)
-* BFD_RELOC_ARM_THUMB_MOVW_PCREL:        howto manager.      (line  828)
-* BFD_RELOC_ARM_THUMB_OFFSET:            howto manager.      (line  806)
-* BFD_RELOC_ARM_THUMB_SHIFT:             howto manager.      (line  927)
-* BFD_RELOC_ARM_TLS_CALL:                howto manager.      (line  857)
-* BFD_RELOC_ARM_TLS_DESC:                howto manager.      (line  861)
-* BFD_RELOC_ARM_TLS_DESCSEQ:             howto manager.      (line  859)
-* BFD_RELOC_ARM_TLS_DTPMOD32:            howto manager.      (line  852)
-* BFD_RELOC_ARM_TLS_DTPOFF32:            howto manager.      (line  851)
-* BFD_RELOC_ARM_TLS_GD32:                howto manager.      (line  848)
-* BFD_RELOC_ARM_TLS_GD32_FDPIC:          howto manager.      (line  835)
-* BFD_RELOC_ARM_TLS_GOTDESC:             howto manager.      (line  856)
-* BFD_RELOC_ARM_TLS_IE32:                howto manager.      (line  854)
-* BFD_RELOC_ARM_TLS_IE32_FDPIC:          howto manager.      (line  837)
-* BFD_RELOC_ARM_TLS_LDM32:               howto manager.      (line  850)
-* BFD_RELOC_ARM_TLS_LDM32_FDPIC:         howto manager.      (line  836)
-* BFD_RELOC_ARM_TLS_LDO32:               howto manager.      (line  849)
-* BFD_RELOC_ARM_TLS_LE32:                howto manager.      (line  855)
-* BFD_RELOC_ARM_TLS_TPOFF32:             howto manager.      (line  853)
-* BFD_RELOC_ARM_V4BX:                    howto manager.      (line  892)
-* BFD_RELOC_AVR_13_PCREL:                howto manager.      (line 1734)
-* BFD_RELOC_AVR_16_PM:                   howto manager.      (line 1737)
-* BFD_RELOC_AVR_6:                       howto manager.      (line 1805)
-* BFD_RELOC_AVR_6_ADIW:                  howto manager.      (line 1808)
-* BFD_RELOC_AVR_7_PCREL:                 howto manager.      (line 1731)
-* BFD_RELOC_AVR_8_HI:                    howto manager.      (line 1814)
-* BFD_RELOC_AVR_8_HLO:                   howto manager.      (line 1817)
-* BFD_RELOC_AVR_8_LO:                    howto manager.      (line 1811)
-* BFD_RELOC_AVR_CALL:                    howto manager.      (line 1799)
-* BFD_RELOC_AVR_DIFF16:                  howto manager.      (line 1821)
-* BFD_RELOC_AVR_DIFF32:                  howto manager.      (line 1822)
-* BFD_RELOC_AVR_DIFF8:                   howto manager.      (line 1820)
-* BFD_RELOC_AVR_HH8_LDI:                 howto manager.      (line 1746)
-* BFD_RELOC_AVR_HH8_LDI_NEG:             howto manager.      (line 1761)
-* BFD_RELOC_AVR_HH8_LDI_PM:              howto manager.      (line 1784)
-* BFD_RELOC_AVR_HH8_LDI_PM_NEG:          howto manager.      (line 1795)
-* BFD_RELOC_AVR_HI8_LDI:                 howto manager.      (line 1743)
-* BFD_RELOC_AVR_HI8_LDI_GS:              howto manager.      (line 1779)
-* BFD_RELOC_AVR_HI8_LDI_NEG:             howto manager.      (line 1757)
-* BFD_RELOC_AVR_HI8_LDI_PM:              howto manager.      (line 1776)
-* BFD_RELOC_AVR_HI8_LDI_PM_NEG:          howto manager.      (line 1791)
-* BFD_RELOC_AVR_LDI:                     howto manager.      (line 1802)
-* BFD_RELOC_AVR_LDS_STS_16:              howto manager.      (line 1829)
-* BFD_RELOC_AVR_LO8_LDI:                 howto manager.      (line 1740)
-* BFD_RELOC_AVR_LO8_LDI_GS:              howto manager.      (line 1771)
-* BFD_RELOC_AVR_LO8_LDI_NEG:             howto manager.      (line 1753)
-* BFD_RELOC_AVR_LO8_LDI_PM:              howto manager.      (line 1768)
-* BFD_RELOC_AVR_LO8_LDI_PM_NEG:          howto manager.      (line 1788)
-* BFD_RELOC_AVR_MS8_LDI:                 howto manager.      (line 1750)
-* BFD_RELOC_AVR_MS8_LDI_NEG:             howto manager.      (line 1765)
-* BFD_RELOC_AVR_PORT5:                   howto manager.      (line 1835)
-* BFD_RELOC_AVR_PORT6:                   howto manager.      (line 1832)
-* BFD_RELOC_BFIN_10_PCREL:               howto manager.      (line 1109)
-* BFD_RELOC_BFIN_11_PCREL:               howto manager.      (line 1111)
-* BFD_RELOC_BFIN_12_PCREL_JUMP:          howto manager.      (line 1113)
-* BFD_RELOC_BFIN_12_PCREL_JUMP_S:        howto manager.      (line 1115)
-* BFD_RELOC_BFIN_16_HIGH:                howto manager.      (line 1101)
-* BFD_RELOC_BFIN_16_IMM:                 howto manager.      (line 1099)
-* BFD_RELOC_BFIN_16_LOW:                 howto manager.      (line 1107)
-* BFD_RELOC_BFIN_24_PCREL_CALL_X:        howto manager.      (line 1117)
-* BFD_RELOC_BFIN_24_PCREL_JUMP_L:        howto manager.      (line 1119)
-* BFD_RELOC_BFIN_4_PCREL:                howto manager.      (line 1103)
-* BFD_RELOC_BFIN_5_PCREL:                howto manager.      (line 1105)
-* BFD_RELOC_BFIN_FUNCDESC:               howto manager.      (line 1124)
-* BFD_RELOC_BFIN_FUNCDESC_GOT17M4:       howto manager.      (line 1125)
-* BFD_RELOC_BFIN_FUNCDESC_GOTHI:         howto manager.      (line 1126)
-* BFD_RELOC_BFIN_FUNCDESC_GOTLO:         howto manager.      (line 1127)
-* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4:    howto manager.      (line 1129)
-* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI:      howto manager.      (line 1130)
-* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO:      howto manager.      (line 1131)
-* BFD_RELOC_BFIN_FUNCDESC_VALUE:         howto manager.      (line 1128)
-* BFD_RELOC_BFIN_GOT:                    howto manager.      (line 1136)
-* BFD_RELOC_BFIN_GOT17M4:                howto manager.      (line 1121)
-* BFD_RELOC_BFIN_GOTHI:                  howto manager.      (line 1122)
-* BFD_RELOC_BFIN_GOTLO:                  howto manager.      (line 1123)
-* BFD_RELOC_BFIN_GOTOFF17M4:             howto manager.      (line 1132)
-* BFD_RELOC_BFIN_GOTOFFHI:               howto manager.      (line 1133)
-* BFD_RELOC_BFIN_GOTOFFLO:               howto manager.      (line 1134)
-* BFD_RELOC_BFIN_PLTPC:                  howto manager.      (line 1138)
-* BFD_RELOC_BPF_16:                      howto manager.      (line 3299)
-* BFD_RELOC_BPF_32:                      howto manager.      (line 3298)
-* BFD_RELOC_BPF_64:                      howto manager.      (line 3297)
-* BFD_RELOC_BPF_DISP16:                  howto manager.      (line 3300)
-* BFD_RELOC_BPF_DISP32:                  howto manager.      (line 3301)
-* BFD_RELOC_C6000_ABS_H16:               howto manager.      (line 1576)
-* BFD_RELOC_C6000_ABS_L16:               howto manager.      (line 1575)
-* BFD_RELOC_C6000_ABS_S16:               howto manager.      (line 1574)
-* BFD_RELOC_C6000_ALIGN:                 howto manager.      (line 1597)
-* BFD_RELOC_C6000_COPY:                  howto manager.      (line 1592)
-* BFD_RELOC_C6000_DSBT_INDEX:            howto manager.      (line 1590)
-* BFD_RELOC_C6000_EHTYPE:                howto manager.      (line 1594)
-* BFD_RELOC_C6000_FPHEAD:                howto manager.      (line 1598)
-* BFD_RELOC_C6000_JUMP_SLOT:             howto manager.      (line 1593)
-* BFD_RELOC_C6000_NOCMP:                 howto manager.      (line 1599)
-* BFD_RELOC_C6000_PCR_H16:               howto manager.      (line 1595)
-* BFD_RELOC_C6000_PCR_L16:               howto manager.      (line 1596)
-* BFD_RELOC_C6000_PCR_S10:               howto manager.      (line 1572)
-* BFD_RELOC_C6000_PCR_S12:               howto manager.      (line 1571)
-* BFD_RELOC_C6000_PCR_S21:               howto manager.      (line 1570)
-* BFD_RELOC_C6000_PCR_S7:                howto manager.      (line 1573)
-* BFD_RELOC_C6000_PREL31:                howto manager.      (line 1591)
-* BFD_RELOC_C6000_SBR_GOT_H16_W:         howto manager.      (line 1589)
-* BFD_RELOC_C6000_SBR_GOT_L16_W:         howto manager.      (line 1588)
-* BFD_RELOC_C6000_SBR_GOT_U15_W:         howto manager.      (line 1587)
-* BFD_RELOC_C6000_SBR_H16_B:             howto manager.      (line 1584)
-* BFD_RELOC_C6000_SBR_H16_H:             howto manager.      (line 1585)
-* BFD_RELOC_C6000_SBR_H16_W:             howto manager.      (line 1586)
-* BFD_RELOC_C6000_SBR_L16_B:             howto manager.      (line 1581)
-* BFD_RELOC_C6000_SBR_L16_H:             howto manager.      (line 1582)
-* BFD_RELOC_C6000_SBR_L16_W:             howto manager.      (line 1583)
-* BFD_RELOC_C6000_SBR_S16:               howto manager.      (line 1580)
-* BFD_RELOC_C6000_SBR_U15_B:             howto manager.      (line 1577)
-* BFD_RELOC_C6000_SBR_U15_H:             howto manager.      (line 1578)
-* BFD_RELOC_C6000_SBR_U15_W:             howto manager.      (line 1579)
-* BFD_RELOC_CKCORE_ADDR32:               howto manager.      (line 3338)
-* BFD_RELOC_CKCORE_ADDRGOT:              howto manager.      (line 3354)
-* BFD_RELOC_CKCORE_ADDRGOT_HI16:         howto manager.      (line 3373)
-* BFD_RELOC_CKCORE_ADDRGOT_LO16:         howto manager.      (line 3374)
-* BFD_RELOC_CKCORE_ADDRPLT:              howto manager.      (line 3355)
-* BFD_RELOC_CKCORE_ADDRPLT_HI16:         howto manager.      (line 3375)
-* BFD_RELOC_CKCORE_ADDRPLT_LO16:         howto manager.      (line 3376)
-* BFD_RELOC_CKCORE_ADDR_HI16:            howto manager.      (line 3361)
-* BFD_RELOC_CKCORE_ADDR_LO16:            howto manager.      (line 3362)
-* BFD_RELOC_CKCORE_CALLGRAPH:            howto manager.      (line 3398)
-* BFD_RELOC_CKCORE_COPY:                 howto manager.      (line 3347)
-* BFD_RELOC_CKCORE_DOFFSET_IMM18:        howto manager.      (line 3381)
-* BFD_RELOC_CKCORE_DOFFSET_IMM18BY2:     howto manager.      (line 3382)
-* BFD_RELOC_CKCORE_DOFFSET_IMM18BY4:     howto manager.      (line 3383)
-* BFD_RELOC_CKCORE_DOFFSET_LO16:         howto manager.      (line 3379)
-* BFD_RELOC_CKCORE_GLOB_DAT:             howto manager.      (line 3348)
-* BFD_RELOC_CKCORE_GNU_VTENTRY:          howto manager.      (line 3345)
-* BFD_RELOC_CKCORE_GNU_VTINHERIT:        howto manager.      (line 3344)
-* BFD_RELOC_CKCORE_GOT12:                howto manager.      (line 3367)
-* BFD_RELOC_CKCORE_GOT32:                howto manager.      (line 3352)
-* BFD_RELOC_CKCORE_GOTOFF:               howto manager.      (line 3350)
-* BFD_RELOC_CKCORE_GOTOFF_HI16:          howto manager.      (line 3365)
-* BFD_RELOC_CKCORE_GOTOFF_IMM18:         howto manager.      (line 3384)
-* BFD_RELOC_CKCORE_GOTOFF_LO16:          howto manager.      (line 3366)
-* BFD_RELOC_CKCORE_GOTPC:                howto manager.      (line 3351)
-* BFD_RELOC_CKCORE_GOTPC_HI16:           howto manager.      (line 3363)
-* BFD_RELOC_CKCORE_GOTPC_LO16:           howto manager.      (line 3364)
-* BFD_RELOC_CKCORE_GOT_HI16:             howto manager.      (line 3368)
-* BFD_RELOC_CKCORE_GOT_IMM18BY4:         howto manager.      (line 3385)
-* BFD_RELOC_CKCORE_GOT_LO16:             howto manager.      (line 3369)
-* BFD_RELOC_CKCORE_IRELATIVE:            howto manager.      (line 3399)
-* BFD_RELOC_CKCORE_JUMP_SLOT:            howto manager.      (line 3349)
-* BFD_RELOC_CKCORE_NOJSRI:               howto manager.      (line 3397)
-* BFD_RELOC_CKCORE_NONE:                 howto manager.      (line 3337)
-* BFD_RELOC_CKCORE_PCREL32:              howto manager.      (line 3342)
-* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM12BY4: howto manager.      (line 3401)
-* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM4BY4:  howto manager.      (line 3400)
-* BFD_RELOC_CKCORE_PCREL_FLRW_IMM8BY4:   howto manager.      (line 3396)
-* BFD_RELOC_CKCORE_PCREL_IMM10BY2:       howto manager.      (line 3359)
-* BFD_RELOC_CKCORE_PCREL_IMM10BY4:       howto manager.      (line 3360)
-* BFD_RELOC_CKCORE_PCREL_IMM11BY2:       howto manager.      (line 3340)
-* BFD_RELOC_CKCORE_PCREL_IMM16BY2:       howto manager.      (line 3357)
-* BFD_RELOC_CKCORE_PCREL_IMM16BY4:       howto manager.      (line 3358)
-* BFD_RELOC_CKCORE_PCREL_IMM18BY2:       howto manager.      (line 3380)
-* BFD_RELOC_CKCORE_PCREL_IMM26BY2:       howto manager.      (line 3356)
-* BFD_RELOC_CKCORE_PCREL_IMM4BY2:        howto manager.      (line 3341)
-* BFD_RELOC_CKCORE_PCREL_IMM7BY4:        howto manager.      (line 3387)
-* BFD_RELOC_CKCORE_PCREL_IMM8BY4:        howto manager.      (line 3339)
-* BFD_RELOC_CKCORE_PCREL_JSR_IMM11BY2:   howto manager.      (line 3343)
-* BFD_RELOC_CKCORE_PCREL_JSR_IMM26BY2:   howto manager.      (line 3377)
-* BFD_RELOC_CKCORE_PLT12:                howto manager.      (line 3370)
-* BFD_RELOC_CKCORE_PLT32:                howto manager.      (line 3353)
-* BFD_RELOC_CKCORE_PLT_HI16:             howto manager.      (line 3371)
-* BFD_RELOC_CKCORE_PLT_IMM18BY4:         howto manager.      (line 3386)
-* BFD_RELOC_CKCORE_PLT_LO16:             howto manager.      (line 3372)
-* BFD_RELOC_CKCORE_RELATIVE:             howto manager.      (line 3346)
-* BFD_RELOC_CKCORE_TLS_DTPMOD32:         howto manager.      (line 3393)
-* BFD_RELOC_CKCORE_TLS_DTPOFF32:         howto manager.      (line 3394)
-* BFD_RELOC_CKCORE_TLS_GD32:             howto manager.      (line 3390)
-* BFD_RELOC_CKCORE_TLS_IE32:             howto manager.      (line 3389)
-* BFD_RELOC_CKCORE_TLS_LDM32:            howto manager.      (line 3391)
-* BFD_RELOC_CKCORE_TLS_LDO32:            howto manager.      (line 3392)
-* BFD_RELOC_CKCORE_TLS_LE32:             howto manager.      (line 3388)
-* BFD_RELOC_CKCORE_TLS_TPOFF32:          howto manager.      (line 3395)
-* BFD_RELOC_CKCORE_TOFFSET_LO16:         howto manager.      (line 3378)
-* bfd_reloc_code_type:                   howto manager.      (line    9)
-* BFD_RELOC_CR16_ABS20:                  howto manager.      (line 2276)
-* BFD_RELOC_CR16_ABS24:                  howto manager.      (line 2277)
-* BFD_RELOC_CR16_DISP16:                 howto manager.      (line 2287)
-* BFD_RELOC_CR16_DISP20:                 howto manager.      (line 2288)
-* BFD_RELOC_CR16_DISP24:                 howto manager.      (line 2289)
-* BFD_RELOC_CR16_DISP24a:                howto manager.      (line 2290)
-* BFD_RELOC_CR16_DISP4:                  howto manager.      (line 2285)
-* BFD_RELOC_CR16_DISP8:                  howto manager.      (line 2286)
-* BFD_RELOC_CR16_GLOB_DAT:               howto manager.      (line 2296)
-* BFD_RELOC_CR16_GOTC_REGREL20:          howto manager.      (line 2295)
-* BFD_RELOC_CR16_GOT_REGREL20:           howto manager.      (line 2294)
-* BFD_RELOC_CR16_IMM16:                  howto manager.      (line 2280)
-* BFD_RELOC_CR16_IMM20:                  howto manager.      (line 2281)
-* BFD_RELOC_CR16_IMM24:                  howto manager.      (line 2282)
-* BFD_RELOC_CR16_IMM32:                  howto manager.      (line 2283)
-* BFD_RELOC_CR16_IMM32a:                 howto manager.      (line 2284)
-* BFD_RELOC_CR16_IMM4:                   howto manager.      (line 2278)
-* BFD_RELOC_CR16_IMM8:                   howto manager.      (line 2279)
-* BFD_RELOC_CR16_NUM16:                  howto manager.      (line 2265)
-* BFD_RELOC_CR16_NUM32:                  howto manager.      (line 2266)
-* BFD_RELOC_CR16_NUM32a:                 howto manager.      (line 2267)
-* BFD_RELOC_CR16_NUM8:                   howto manager.      (line 2264)
-* BFD_RELOC_CR16_REGREL0:                howto manager.      (line 2268)
-* BFD_RELOC_CR16_REGREL14:               howto manager.      (line 2271)
-* BFD_RELOC_CR16_REGREL14a:              howto manager.      (line 2272)
-* BFD_RELOC_CR16_REGREL16:               howto manager.      (line 2273)
-* BFD_RELOC_CR16_REGREL20:               howto manager.      (line 2274)
-* BFD_RELOC_CR16_REGREL20a:              howto manager.      (line 2275)
-* BFD_RELOC_CR16_REGREL4:                howto manager.      (line 2269)
-* BFD_RELOC_CR16_REGREL4a:               howto manager.      (line 2270)
-* BFD_RELOC_CR16_SWITCH16:               howto manager.      (line 2292)
-* BFD_RELOC_CR16_SWITCH32:               howto manager.      (line 2293)
-* BFD_RELOC_CR16_SWITCH8:                howto manager.      (line 2291)
-* BFD_RELOC_CRIS_16_DTPREL:              howto manager.      (line 2356)
-* BFD_RELOC_CRIS_16_GOT:                 howto manager.      (line 2338)
-* BFD_RELOC_CRIS_16_GOTPLT:              howto manager.      (line 2342)
-* BFD_RELOC_CRIS_16_GOT_GD:              howto manager.      (line 2352)
-* BFD_RELOC_CRIS_16_GOT_TPREL:           howto manager.      (line 2358)
-* BFD_RELOC_CRIS_16_TPREL:               howto manager.      (line 2360)
-* BFD_RELOC_CRIS_32_DTPREL:              howto manager.      (line 2355)
-* BFD_RELOC_CRIS_32_GD:                  howto manager.      (line 2353)
-* BFD_RELOC_CRIS_32_GOT:                 howto manager.      (line 2336)
-* BFD_RELOC_CRIS_32_GOTPLT:              howto manager.      (line 2340)
-* BFD_RELOC_CRIS_32_GOTREL:              howto manager.      (line 2344)
-* BFD_RELOC_CRIS_32_GOT_GD:              howto manager.      (line 2351)
-* BFD_RELOC_CRIS_32_GOT_TPREL:           howto manager.      (line 2357)
-* BFD_RELOC_CRIS_32_IE:                  howto manager.      (line 2362)
-* BFD_RELOC_CRIS_32_PLT_GOTREL:          howto manager.      (line 2346)
-* BFD_RELOC_CRIS_32_PLT_PCREL:           howto manager.      (line 2348)
-* BFD_RELOC_CRIS_32_TPREL:               howto manager.      (line 2359)
-* BFD_RELOC_CRIS_BDISP8:                 howto manager.      (line 2319)
-* BFD_RELOC_CRIS_COPY:                   howto manager.      (line 2331)
-* BFD_RELOC_CRIS_DTP:                    howto manager.      (line 2354)
-* BFD_RELOC_CRIS_DTPMOD:                 howto manager.      (line 2361)
-* BFD_RELOC_CRIS_GLOB_DAT:               howto manager.      (line 2332)
-* BFD_RELOC_CRIS_JUMP_SLOT:              howto manager.      (line 2333)
-* BFD_RELOC_CRIS_LAPCQ_OFFSET:           howto manager.      (line 2327)
-* BFD_RELOC_CRIS_RELATIVE:               howto manager.      (line 2334)
-* BFD_RELOC_CRIS_SIGNED_16:              howto manager.      (line 2325)
-* BFD_RELOC_CRIS_SIGNED_6:               howto manager.      (line 2321)
-* BFD_RELOC_CRIS_SIGNED_8:               howto manager.      (line 2323)
-* BFD_RELOC_CRIS_UNSIGNED_16:            howto manager.      (line 2326)
-* BFD_RELOC_CRIS_UNSIGNED_4:             howto manager.      (line 2328)
-* BFD_RELOC_CRIS_UNSIGNED_5:             howto manager.      (line 2320)
-* BFD_RELOC_CRIS_UNSIGNED_6:             howto manager.      (line 2322)
-* BFD_RELOC_CRIS_UNSIGNED_8:             howto manager.      (line 2324)
-* BFD_RELOC_CRX_ABS16:                   howto manager.      (line 2308)
-* BFD_RELOC_CRX_ABS32:                   howto manager.      (line 2309)
-* BFD_RELOC_CRX_IMM16:                   howto manager.      (line 2313)
-* BFD_RELOC_CRX_IMM32:                   howto manager.      (line 2314)
-* BFD_RELOC_CRX_NUM16:                   howto manager.      (line 2311)
-* BFD_RELOC_CRX_NUM32:                   howto manager.      (line 2312)
-* BFD_RELOC_CRX_NUM8:                    howto manager.      (line 2310)
-* BFD_RELOC_CRX_REGREL12:                howto manager.      (line 2304)
-* BFD_RELOC_CRX_REGREL22:                howto manager.      (line 2305)
-* BFD_RELOC_CRX_REGREL28:                howto manager.      (line 2306)
-* BFD_RELOC_CRX_REGREL32:                howto manager.      (line 2307)
-* BFD_RELOC_CRX_REL16:                   howto manager.      (line 2301)
-* BFD_RELOC_CRX_REL24:                   howto manager.      (line 2302)
-* BFD_RELOC_CRX_REL32:                   howto manager.      (line 2303)
-* BFD_RELOC_CRX_REL4:                    howto manager.      (line 2298)
-* BFD_RELOC_CRX_REL8:                    howto manager.      (line 2299)
-* BFD_RELOC_CRX_REL8_CMP:                howto manager.      (line 2300)
-* BFD_RELOC_CRX_SWITCH16:                howto manager.      (line 2316)
-* BFD_RELOC_CRX_SWITCH32:                howto manager.      (line 2317)
-* BFD_RELOC_CRX_SWITCH8:                 howto manager.      (line 2315)
-* BFD_RELOC_CTOR:                        howto manager.      (line  759)
-* BFD_RELOC_D10V_10_PCREL_L:             howto manager.      (line 1183)
-* BFD_RELOC_D10V_10_PCREL_R:             howto manager.      (line 1180)
-* BFD_RELOC_D10V_18:                     howto manager.      (line 1187)
-* BFD_RELOC_D10V_18_PCREL:               howto manager.      (line 1189)
-* BFD_RELOC_D30V_15:                     howto manager.      (line 1200)
-* BFD_RELOC_D30V_15_PCREL:               howto manager.      (line 1203)
-* BFD_RELOC_D30V_15_PCREL_R:             howto manager.      (line 1206)
-* BFD_RELOC_D30V_21:                     howto manager.      (line 1210)
-* BFD_RELOC_D30V_21_PCREL:               howto manager.      (line 1213)
-* BFD_RELOC_D30V_21_PCREL_R:             howto manager.      (line 1216)
-* BFD_RELOC_D30V_32:                     howto manager.      (line 1220)
-* BFD_RELOC_D30V_32_PCREL:               howto manager.      (line 1222)
-* BFD_RELOC_D30V_6:                      howto manager.      (line 1191)
-* BFD_RELOC_D30V_9_PCREL:                howto manager.      (line 1193)
-* BFD_RELOC_D30V_9_PCREL_R:              howto manager.      (line 1196)
-* BFD_RELOC_DLX_HI16_S:                  howto manager.      (line 1224)
-* BFD_RELOC_DLX_JMP26:                   howto manager.      (line 1228)
-* BFD_RELOC_DLX_LO16:                    howto manager.      (line 1226)
-* BFD_RELOC_EPIPHANY_HIGH:               howto manager.      (line 3307)
-* BFD_RELOC_EPIPHANY_IMM11:              howto manager.      (line 3313)
-* BFD_RELOC_EPIPHANY_IMM8:               howto manager.      (line 3316)
-* BFD_RELOC_EPIPHANY_LOW:                howto manager.      (line 3309)
-* BFD_RELOC_EPIPHANY_SIMM11:             howto manager.      (line 3311)
-* BFD_RELOC_EPIPHANY_SIMM24:             howto manager.      (line 3305)
-* BFD_RELOC_EPIPHANY_SIMM8:              howto manager.      (line 3303)
-* BFD_RELOC_FR30_10_IN_8:                howto manager.      (line 1615)
-* BFD_RELOC_FR30_12_PCREL:               howto manager.      (line 1621)
-* BFD_RELOC_FR30_20:                     howto manager.      (line 1603)
-* BFD_RELOC_FR30_48:                     howto manager.      (line 1601)
-* BFD_RELOC_FR30_6_IN_4:                 howto manager.      (line 1606)
-* BFD_RELOC_FR30_8_IN_8:                 howto manager.      (line 1609)
-* BFD_RELOC_FR30_9_IN_8:                 howto manager.      (line 1612)
-* BFD_RELOC_FR30_9_PCREL:                howto manager.      (line 1618)
+* BFD_RELOC_ARC_16:                      howto manager.      (line 1048)
+* BFD_RELOC_ARC_24:                      howto manager.      (line 1049)
+* BFD_RELOC_ARC_32:                      howto manager.      (line 1050)
+* BFD_RELOC_ARC_32_ME:                   howto manager.      (line 1070)
+* BFD_RELOC_ARC_32_ME_S:                 howto manager.      (line 1071)
+* BFD_RELOC_ARC_32_PCREL:                howto manager.      (line 1088)
+* BFD_RELOC_ARC_8:                       howto manager.      (line 1047)
+* BFD_RELOC_ARC_COPY:                    howto manager.      (line 1093)
+* BFD_RELOC_ARC_GLOB_DAT:                howto manager.      (line 1094)
+* BFD_RELOC_ARC_GOT32:                   howto manager.      (line 1090)
+* BFD_RELOC_ARC_GOTOFF:                  howto manager.      (line 1097)
+* BFD_RELOC_ARC_GOTPC:                   howto manager.      (line 1098)
+* BFD_RELOC_ARC_GOTPC32:                 howto manager.      (line 1091)
+* BFD_RELOC_ARC_JLI_SECTOFF:             howto manager.      (line 1114)
+* BFD_RELOC_ARC_JMP_SLOT:                howto manager.      (line 1095)
+* BFD_RELOC_ARC_N16:                     howto manager.      (line 1052)
+* BFD_RELOC_ARC_N24:                     howto manager.      (line 1053)
+* BFD_RELOC_ARC_N32:                     howto manager.      (line 1054)
+* BFD_RELOC_ARC_N32_ME:                  howto manager.      (line 1072)
+* BFD_RELOC_ARC_N8:                      howto manager.      (line 1051)
+* BFD_RELOC_ARC_NONE:                    howto manager.      (line 1046)
+* BFD_RELOC_ARC_NPS_CMEM16:              howto manager.      (line 1113)
+* BFD_RELOC_ARC_PC32:                    howto manager.      (line 1089)
+* BFD_RELOC_ARC_PLT32:                   howto manager.      (line 1092)
+* BFD_RELOC_ARC_RELATIVE:                howto manager.      (line 1096)
+* BFD_RELOC_ARC_S13_PCREL:               howto manager.      (line 1068)
+* BFD_RELOC_ARC_S21H_PCREL:              howto manager.      (line 1057)
+* BFD_RELOC_ARC_S21H_PCREL_PLT:          howto manager.      (line 1112)
+* BFD_RELOC_ARC_S21W_PCREL:              howto manager.      (line 1058)
+* BFD_RELOC_ARC_S21W_PCREL_PLT:          howto manager.      (line 1099)
+* BFD_RELOC_ARC_S25H_PCREL:              howto manager.      (line 1059)
+* BFD_RELOC_ARC_S25H_PCREL_PLT:          howto manager.      (line 1100)
+* BFD_RELOC_ARC_S25W_PCREL:              howto manager.      (line 1060)
+* BFD_RELOC_ARC_S25W_PCREL_PLT:          howto manager.      (line 1111)
+* BFD_RELOC_ARC_SDA:                     howto manager.      (line 1055)
+* BFD_RELOC_ARC_SDA16_LD:                howto manager.      (line 1065)
+* BFD_RELOC_ARC_SDA16_LD1:               howto manager.      (line 1066)
+* BFD_RELOC_ARC_SDA16_LD2:               howto manager.      (line 1067)
+* BFD_RELOC_ARC_SDA16_ST2:               howto manager.      (line 1087)
+* BFD_RELOC_ARC_SDA32:                   howto manager.      (line 1061)
+* BFD_RELOC_ARC_SDA32_ME:                howto manager.      (line 1074)
+* BFD_RELOC_ARC_SDA_12:                  howto manager.      (line 1086)
+* BFD_RELOC_ARC_SDA_LDST:                howto manager.      (line 1062)
+* BFD_RELOC_ARC_SDA_LDST1:               howto manager.      (line 1063)
+* BFD_RELOC_ARC_SDA_LDST2:               howto manager.      (line 1064)
+* BFD_RELOC_ARC_SECTOFF:                 howto manager.      (line 1056)
+* BFD_RELOC_ARC_SECTOFF_1:               howto manager.      (line 1084)
+* BFD_RELOC_ARC_SECTOFF_2:               howto manager.      (line 1085)
+* BFD_RELOC_ARC_SECTOFF_ME:              howto manager.      (line 1073)
+* BFD_RELOC_ARC_SECTOFF_ME_1:            howto manager.      (line 1082)
+* BFD_RELOC_ARC_SECTOFF_ME_2:            howto manager.      (line 1083)
+* BFD_RELOC_ARC_TLS_DTPMOD:              howto manager.      (line 1101)
+* BFD_RELOC_ARC_TLS_DTPOFF:              howto manager.      (line 1107)
+* BFD_RELOC_ARC_TLS_DTPOFF_S9:           howto manager.      (line 1108)
+* BFD_RELOC_ARC_TLS_GD_CALL:             howto manager.      (line 1105)
+* BFD_RELOC_ARC_TLS_GD_GOT:              howto manager.      (line 1103)
+* BFD_RELOC_ARC_TLS_GD_LD:               howto manager.      (line 1104)
+* BFD_RELOC_ARC_TLS_IE_GOT:              howto manager.      (line 1106)
+* BFD_RELOC_ARC_TLS_LE_32:               howto manager.      (line 1110)
+* BFD_RELOC_ARC_TLS_LE_S9:               howto manager.      (line 1109)
+* BFD_RELOC_ARC_TLS_TPOFF:               howto manager.      (line 1102)
+* BFD_RELOC_ARC_W:                       howto manager.      (line 1069)
+* BFD_RELOC_ARC_W_ME:                    howto manager.      (line 1075)
+* BFD_RELOC_ARM_ADRL_IMMEDIATE:          howto manager.      (line  919)
+* BFD_RELOC_ARM_ADR_IMM:                 howto manager.      (line  934)
+* BFD_RELOC_ARM_ALU_PC_G0:               howto manager.      (line  881)
+* BFD_RELOC_ARM_ALU_PC_G0_NC:            howto manager.      (line  880)
+* BFD_RELOC_ARM_ALU_PC_G1:               howto manager.      (line  883)
+* BFD_RELOC_ARM_ALU_PC_G1_NC:            howto manager.      (line  882)
+* BFD_RELOC_ARM_ALU_PC_G2:               howto manager.      (line  884)
+* BFD_RELOC_ARM_ALU_SB_G0:               howto manager.      (line  895)
+* BFD_RELOC_ARM_ALU_SB_G0_NC:            howto manager.      (line  894)
+* BFD_RELOC_ARM_ALU_SB_G1:               howto manager.      (line  897)
+* BFD_RELOC_ARM_ALU_SB_G1_NC:            howto manager.      (line  896)
+* BFD_RELOC_ARM_ALU_SB_G2:               howto manager.      (line  898)
+* BFD_RELOC_ARM_CP_OFF_IMM:              howto manager.      (line  929)
+* BFD_RELOC_ARM_CP_OFF_IMM_S2:           howto manager.      (line  930)
+* BFD_RELOC_ARM_FUNCDESC:                howto manager.      (line  850)
+* BFD_RELOC_ARM_FUNCDESC_VALUE:          howto manager.      (line  851)
+* BFD_RELOC_ARM_GLOB_DAT:                howto manager.      (line  857)
+* BFD_RELOC_ARM_GOT32:                   howto manager.      (line  858)
+* BFD_RELOC_ARM_GOTFUNCDESC:             howto manager.      (line  848)
+* BFD_RELOC_ARM_GOTOFF:                  howto manager.      (line  861)
+* BFD_RELOC_ARM_GOTOFFFUNCDESC:          howto manager.      (line  849)
+* BFD_RELOC_ARM_GOTPC:                   howto manager.      (line  862)
+* BFD_RELOC_ARM_GOT_PREL:                howto manager.      (line  863)
+* BFD_RELOC_ARM_HVC:                     howto manager.      (line  926)
+* BFD_RELOC_ARM_HWLITERAL:               howto manager.      (line  941)
+* BFD_RELOC_ARM_IMMEDIATE:               howto manager.      (line  918)
+* BFD_RELOC_ARM_IN_POOL:                 howto manager.      (line  937)
+* BFD_RELOC_ARM_IRELATIVE:               howto manager.      (line  911)
+* BFD_RELOC_ARM_JUMP_SLOT:               howto manager.      (line  856)
+* BFD_RELOC_ARM_LDC_PC_G0:               howto manager.      (line  891)
+* BFD_RELOC_ARM_LDC_PC_G1:               howto manager.      (line  892)
+* BFD_RELOC_ARM_LDC_PC_G2:               howto manager.      (line  893)
+* BFD_RELOC_ARM_LDC_SB_G0:               howto manager.      (line  905)
+* BFD_RELOC_ARM_LDC_SB_G1:               howto manager.      (line  906)
+* BFD_RELOC_ARM_LDC_SB_G2:               howto manager.      (line  907)
+* BFD_RELOC_ARM_LDRS_PC_G0:              howto manager.      (line  888)
+* BFD_RELOC_ARM_LDRS_PC_G1:              howto manager.      (line  889)
+* BFD_RELOC_ARM_LDRS_PC_G2:              howto manager.      (line  890)
+* BFD_RELOC_ARM_LDRS_SB_G0:              howto manager.      (line  902)
+* BFD_RELOC_ARM_LDRS_SB_G1:              howto manager.      (line  903)
+* BFD_RELOC_ARM_LDRS_SB_G2:              howto manager.      (line  904)
+* BFD_RELOC_ARM_LDR_IMM:                 howto manager.      (line  935)
+* BFD_RELOC_ARM_LDR_PC_G0:               howto manager.      (line  885)
+* BFD_RELOC_ARM_LDR_PC_G1:               howto manager.      (line  886)
+* BFD_RELOC_ARM_LDR_PC_G2:               howto manager.      (line  887)
+* BFD_RELOC_ARM_LDR_SB_G0:               howto manager.      (line  899)
+* BFD_RELOC_ARM_LDR_SB_G1:               howto manager.      (line  900)
+* BFD_RELOC_ARM_LDR_SB_G2:               howto manager.      (line  901)
+* BFD_RELOC_ARM_LITERAL:                 howto manager.      (line  936)
+* BFD_RELOC_ARM_MOVT:                    howto manager.      (line  840)
+* BFD_RELOC_ARM_MOVT_PCREL:              howto manager.      (line  842)
+* BFD_RELOC_ARM_MOVW:                    howto manager.      (line  839)
+* BFD_RELOC_ARM_MOVW_PCREL:              howto manager.      (line  841)
+* BFD_RELOC_ARM_MULTI:                   howto manager.      (line  928)
+* BFD_RELOC_ARM_OFFSET_IMM:              howto manager.      (line  820)
+* BFD_RELOC_ARM_OFFSET_IMM8:             howto manager.      (line  938)
+* BFD_RELOC_ARM_PCREL_BLX:               howto manager.      (line  784)
+* BFD_RELOC_ARM_PCREL_BRANCH:            howto manager.      (line  781)
+* BFD_RELOC_ARM_PCREL_CALL:              howto manager.      (line  792)
+* BFD_RELOC_ARM_PCREL_JUMP:              howto manager.      (line  795)
+* BFD_RELOC_ARM_PLT32:                   howto manager.      (line  859)
+* BFD_RELOC_ARM_PREL31:                  howto manager.      (line  837)
+* BFD_RELOC_ARM_RELATIVE:                howto manager.      (line  860)
+* BFD_RELOC_ARM_ROSEGREL32:              howto manager.      (line  829)
+* BFD_RELOC_ARM_SBREL32:                 howto manager.      (line  831)
+* BFD_RELOC_ARM_SHIFT_IMM:               howto manager.      (line  924)
+* BFD_RELOC_ARM_SMC:                     howto manager.      (line  925)
+* BFD_RELOC_ARM_SWI:                     howto manager.      (line  927)
+* BFD_RELOC_ARM_T32_ADD_IMM:             howto manager.      (line  921)
+* BFD_RELOC_ARM_T32_ADD_PC12:            howto manager.      (line  923)
+* BFD_RELOC_ARM_T32_CP_OFF_IMM:          howto manager.      (line  931)
+* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2:       howto manager.      (line  932)
+* BFD_RELOC_ARM_T32_IMM12:               howto manager.      (line  922)
+* BFD_RELOC_ARM_T32_IMMEDIATE:           howto manager.      (line  920)
+* BFD_RELOC_ARM_T32_OFFSET_IMM:          howto manager.      (line  940)
+* BFD_RELOC_ARM_T32_OFFSET_U8:           howto manager.      (line  939)
+* BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM:   howto manager.      (line  933)
+* BFD_RELOC_ARM_TARGET1:                 howto manager.      (line  826)
+* BFD_RELOC_ARM_TARGET2:                 howto manager.      (line  833)
+* BFD_RELOC_ARM_THM_TLS_CALL:            howto manager.      (line  875)
+* BFD_RELOC_ARM_THM_TLS_DESCSEQ:         howto manager.      (line  877)
+* BFD_RELOC_ARM_THUMB_ADD:               howto manager.      (line  942)
+* BFD_RELOC_ARM_THUMB_ALU_ABS_G0_NC:     howto manager.      (line  913)
+* BFD_RELOC_ARM_THUMB_ALU_ABS_G1_NC:     howto manager.      (line  914)
+* BFD_RELOC_ARM_THUMB_ALU_ABS_G2_NC:     howto manager.      (line  915)
+* BFD_RELOC_ARM_THUMB_ALU_ABS_G3_NC:     howto manager.      (line  916)
+* BFD_RELOC_ARM_THUMB_BF13:              howto manager.      (line  803)
+* BFD_RELOC_ARM_THUMB_BF17:              howto manager.      (line  801)
+* BFD_RELOC_ARM_THUMB_BF19:              howto manager.      (line  805)
+* BFD_RELOC_ARM_THUMB_IMM:               howto manager.      (line  943)
+* BFD_RELOC_ARM_THUMB_LOOP12:            howto manager.      (line  807)
+* BFD_RELOC_ARM_THUMB_MOVT:              howto manager.      (line  844)
+* BFD_RELOC_ARM_THUMB_MOVT_PCREL:        howto manager.      (line  846)
+* BFD_RELOC_ARM_THUMB_MOVW:              howto manager.      (line  843)
+* BFD_RELOC_ARM_THUMB_MOVW_PCREL:        howto manager.      (line  845)
+* BFD_RELOC_ARM_THUMB_OFFSET:            howto manager.      (line  823)
+* BFD_RELOC_ARM_THUMB_SHIFT:             howto manager.      (line  944)
+* BFD_RELOC_ARM_TLS_CALL:                howto manager.      (line  874)
+* BFD_RELOC_ARM_TLS_DESC:                howto manager.      (line  878)
+* BFD_RELOC_ARM_TLS_DESCSEQ:             howto manager.      (line  876)
+* BFD_RELOC_ARM_TLS_DTPMOD32:            howto manager.      (line  869)
+* BFD_RELOC_ARM_TLS_DTPOFF32:            howto manager.      (line  868)
+* BFD_RELOC_ARM_TLS_GD32:                howto manager.      (line  865)
+* BFD_RELOC_ARM_TLS_GD32_FDPIC:          howto manager.      (line  852)
+* BFD_RELOC_ARM_TLS_GOTDESC:             howto manager.      (line  873)
+* BFD_RELOC_ARM_TLS_IE32:                howto manager.      (line  871)
+* BFD_RELOC_ARM_TLS_IE32_FDPIC:          howto manager.      (line  854)
+* BFD_RELOC_ARM_TLS_LDM32:               howto manager.      (line  867)
+* BFD_RELOC_ARM_TLS_LDM32_FDPIC:         howto manager.      (line  853)
+* BFD_RELOC_ARM_TLS_LDO32:               howto manager.      (line  866)
+* BFD_RELOC_ARM_TLS_LE32:                howto manager.      (line  872)
+* BFD_RELOC_ARM_TLS_TPOFF32:             howto manager.      (line  870)
+* BFD_RELOC_ARM_V4BX:                    howto manager.      (line  909)
+* BFD_RELOC_AVR_13_PCREL:                howto manager.      (line 1739)
+* BFD_RELOC_AVR_16_PM:                   howto manager.      (line 1742)
+* BFD_RELOC_AVR_6:                       howto manager.      (line 1810)
+* BFD_RELOC_AVR_6_ADIW:                  howto manager.      (line 1813)
+* BFD_RELOC_AVR_7_PCREL:                 howto manager.      (line 1736)
+* BFD_RELOC_AVR_8_HI:                    howto manager.      (line 1819)
+* BFD_RELOC_AVR_8_HLO:                   howto manager.      (line 1822)
+* BFD_RELOC_AVR_8_LO:                    howto manager.      (line 1816)
+* BFD_RELOC_AVR_CALL:                    howto manager.      (line 1804)
+* BFD_RELOC_AVR_DIFF16:                  howto manager.      (line 1826)
+* BFD_RELOC_AVR_DIFF32:                  howto manager.      (line 1827)
+* BFD_RELOC_AVR_DIFF8:                   howto manager.      (line 1825)
+* BFD_RELOC_AVR_HH8_LDI:                 howto manager.      (line 1751)
+* BFD_RELOC_AVR_HH8_LDI_NEG:             howto manager.      (line 1766)
+* BFD_RELOC_AVR_HH8_LDI_PM:              howto manager.      (line 1789)
+* BFD_RELOC_AVR_HH8_LDI_PM_NEG:          howto manager.      (line 1800)
+* BFD_RELOC_AVR_HI8_LDI:                 howto manager.      (line 1748)
+* BFD_RELOC_AVR_HI8_LDI_GS:              howto manager.      (line 1784)
+* BFD_RELOC_AVR_HI8_LDI_NEG:             howto manager.      (line 1762)
+* BFD_RELOC_AVR_HI8_LDI_PM:              howto manager.      (line 1781)
+* BFD_RELOC_AVR_HI8_LDI_PM_NEG:          howto manager.      (line 1796)
+* BFD_RELOC_AVR_LDI:                     howto manager.      (line 1807)
+* BFD_RELOC_AVR_LDS_STS_16:              howto manager.      (line 1834)
+* BFD_RELOC_AVR_LO8_LDI:                 howto manager.      (line 1745)
+* BFD_RELOC_AVR_LO8_LDI_GS:              howto manager.      (line 1776)
+* BFD_RELOC_AVR_LO8_LDI_NEG:             howto manager.      (line 1758)
+* BFD_RELOC_AVR_LO8_LDI_PM:              howto manager.      (line 1773)
+* BFD_RELOC_AVR_LO8_LDI_PM_NEG:          howto manager.      (line 1793)
+* BFD_RELOC_AVR_MS8_LDI:                 howto manager.      (line 1755)
+* BFD_RELOC_AVR_MS8_LDI_NEG:             howto manager.      (line 1770)
+* BFD_RELOC_AVR_PORT5:                   howto manager.      (line 1840)
+* BFD_RELOC_AVR_PORT6:                   howto manager.      (line 1837)
+* BFD_RELOC_BFIN_10_PCREL:               howto manager.      (line 1126)
+* BFD_RELOC_BFIN_11_PCREL:               howto manager.      (line 1128)
+* BFD_RELOC_BFIN_12_PCREL_JUMP:          howto manager.      (line 1130)
+* BFD_RELOC_BFIN_12_PCREL_JUMP_S:        howto manager.      (line 1132)
+* BFD_RELOC_BFIN_16_HIGH:                howto manager.      (line 1118)
+* BFD_RELOC_BFIN_16_IMM:                 howto manager.      (line 1116)
+* BFD_RELOC_BFIN_16_LOW:                 howto manager.      (line 1124)
+* BFD_RELOC_BFIN_24_PCREL_CALL_X:        howto manager.      (line 1134)
+* BFD_RELOC_BFIN_24_PCREL_JUMP_L:        howto manager.      (line 1136)
+* BFD_RELOC_BFIN_4_PCREL:                howto manager.      (line 1120)
+* BFD_RELOC_BFIN_5_PCREL:                howto manager.      (line 1122)
+* BFD_RELOC_BFIN_FUNCDESC:               howto manager.      (line 1141)
+* BFD_RELOC_BFIN_FUNCDESC_GOT17M4:       howto manager.      (line 1142)
+* BFD_RELOC_BFIN_FUNCDESC_GOTHI:         howto manager.      (line 1143)
+* BFD_RELOC_BFIN_FUNCDESC_GOTLO:         howto manager.      (line 1144)
+* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4:    howto manager.      (line 1146)
+* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI:      howto manager.      (line 1147)
+* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO:      howto manager.      (line 1148)
+* BFD_RELOC_BFIN_FUNCDESC_VALUE:         howto manager.      (line 1145)
+* BFD_RELOC_BFIN_GOT:                    howto manager.      (line 1153)
+* BFD_RELOC_BFIN_GOT17M4:                howto manager.      (line 1138)
+* BFD_RELOC_BFIN_GOTHI:                  howto manager.      (line 1139)
+* BFD_RELOC_BFIN_GOTLO:                  howto manager.      (line 1140)
+* BFD_RELOC_BFIN_GOTOFF17M4:             howto manager.      (line 1149)
+* BFD_RELOC_BFIN_GOTOFFHI:               howto manager.      (line 1150)
+* BFD_RELOC_BFIN_GOTOFFLO:               howto manager.      (line 1151)
+* BFD_RELOC_BFIN_PLTPC:                  howto manager.      (line 1155)
+* BFD_RELOC_BPF_64:                      howto manager.      (line 3415)
+* BFD_RELOC_BPF_DISP16:                  howto manager.      (line 3418)
+* BFD_RELOC_BPF_DISP32:                  howto manager.      (line 3416)
+* BFD_RELOC_BPF_DISPCALL32:              howto manager.      (line 3417)
+* BFD_RELOC_C6000_ABS_H16:               howto manager.      (line 1581)
+* BFD_RELOC_C6000_ABS_L16:               howto manager.      (line 1580)
+* BFD_RELOC_C6000_ABS_S16:               howto manager.      (line 1579)
+* BFD_RELOC_C6000_ALIGN:                 howto manager.      (line 1602)
+* BFD_RELOC_C6000_COPY:                  howto manager.      (line 1597)
+* BFD_RELOC_C6000_DSBT_INDEX:            howto manager.      (line 1595)
+* BFD_RELOC_C6000_EHTYPE:                howto manager.      (line 1599)
+* BFD_RELOC_C6000_FPHEAD:                howto manager.      (line 1603)
+* BFD_RELOC_C6000_JUMP_SLOT:             howto manager.      (line 1598)
+* BFD_RELOC_C6000_NOCMP:                 howto manager.      (line 1604)
+* BFD_RELOC_C6000_PCR_H16:               howto manager.      (line 1600)
+* BFD_RELOC_C6000_PCR_L16:               howto manager.      (line 1601)
+* BFD_RELOC_C6000_PCR_S10:               howto manager.      (line 1577)
+* BFD_RELOC_C6000_PCR_S12:               howto manager.      (line 1576)
+* BFD_RELOC_C6000_PCR_S21:               howto manager.      (line 1575)
+* BFD_RELOC_C6000_PCR_S7:                howto manager.      (line 1578)
+* BFD_RELOC_C6000_PREL31:                howto manager.      (line 1596)
+* BFD_RELOC_C6000_SBR_GOT_H16_W:         howto manager.      (line 1594)
+* BFD_RELOC_C6000_SBR_GOT_L16_W:         howto manager.      (line 1593)
+* BFD_RELOC_C6000_SBR_GOT_U15_W:         howto manager.      (line 1592)
+* BFD_RELOC_C6000_SBR_H16_B:             howto manager.      (line 1589)
+* BFD_RELOC_C6000_SBR_H16_H:             howto manager.      (line 1590)
+* BFD_RELOC_C6000_SBR_H16_W:             howto manager.      (line 1591)
+* BFD_RELOC_C6000_SBR_L16_B:             howto manager.      (line 1586)
+* BFD_RELOC_C6000_SBR_L16_H:             howto manager.      (line 1587)
+* BFD_RELOC_C6000_SBR_L16_W:             howto manager.      (line 1588)
+* BFD_RELOC_C6000_SBR_S16:               howto manager.      (line 1585)
+* BFD_RELOC_C6000_SBR_U15_B:             howto manager.      (line 1582)
+* BFD_RELOC_C6000_SBR_U15_H:             howto manager.      (line 1583)
+* BFD_RELOC_C6000_SBR_U15_W:             howto manager.      (line 1584)
+* BFD_RELOC_CKCORE_ADDR32:               howto manager.      (line 3455)
+* BFD_RELOC_CKCORE_ADDRGOT:              howto manager.      (line 3471)
+* BFD_RELOC_CKCORE_ADDRGOT_HI16:         howto manager.      (line 3490)
+* BFD_RELOC_CKCORE_ADDRGOT_LO16:         howto manager.      (line 3491)
+* BFD_RELOC_CKCORE_ADDRPLT:              howto manager.      (line 3472)
+* BFD_RELOC_CKCORE_ADDRPLT_HI16:         howto manager.      (line 3492)
+* BFD_RELOC_CKCORE_ADDRPLT_LO16:         howto manager.      (line 3493)
+* BFD_RELOC_CKCORE_ADDR_HI16:            howto manager.      (line 3478)
+* BFD_RELOC_CKCORE_ADDR_LO16:            howto manager.      (line 3479)
+* BFD_RELOC_CKCORE_CALLGRAPH:            howto manager.      (line 3515)
+* BFD_RELOC_CKCORE_COPY:                 howto manager.      (line 3464)
+* BFD_RELOC_CKCORE_DOFFSET_IMM18:        howto manager.      (line 3498)
+* BFD_RELOC_CKCORE_DOFFSET_IMM18BY2:     howto manager.      (line 3499)
+* BFD_RELOC_CKCORE_DOFFSET_IMM18BY4:     howto manager.      (line 3500)
+* BFD_RELOC_CKCORE_DOFFSET_LO16:         howto manager.      (line 3496)
+* BFD_RELOC_CKCORE_GLOB_DAT:             howto manager.      (line 3465)
+* BFD_RELOC_CKCORE_GNU_VTENTRY:          howto manager.      (line 3462)
+* BFD_RELOC_CKCORE_GNU_VTINHERIT:        howto manager.      (line 3461)
+* BFD_RELOC_CKCORE_GOT12:                howto manager.      (line 3484)
+* BFD_RELOC_CKCORE_GOT32:                howto manager.      (line 3469)
+* BFD_RELOC_CKCORE_GOTOFF:               howto manager.      (line 3467)
+* BFD_RELOC_CKCORE_GOTOFF_HI16:          howto manager.      (line 3482)
+* BFD_RELOC_CKCORE_GOTOFF_IMM18:         howto manager.      (line 3501)
+* BFD_RELOC_CKCORE_GOTOFF_LO16:          howto manager.      (line 3483)
+* BFD_RELOC_CKCORE_GOTPC:                howto manager.      (line 3468)
+* BFD_RELOC_CKCORE_GOTPC_HI16:           howto manager.      (line 3480)
+* BFD_RELOC_CKCORE_GOTPC_LO16:           howto manager.      (line 3481)
+* BFD_RELOC_CKCORE_GOT_HI16:             howto manager.      (line 3485)
+* BFD_RELOC_CKCORE_GOT_IMM18BY4:         howto manager.      (line 3502)
+* BFD_RELOC_CKCORE_GOT_LO16:             howto manager.      (line 3486)
+* BFD_RELOC_CKCORE_IRELATIVE:            howto manager.      (line 3516)
+* BFD_RELOC_CKCORE_JUMP_SLOT:            howto manager.      (line 3466)
+* BFD_RELOC_CKCORE_NOJSRI:               howto manager.      (line 3514)
+* BFD_RELOC_CKCORE_NONE:                 howto manager.      (line 3454)
+* BFD_RELOC_CKCORE_PCREL32:              howto manager.      (line 3459)
+* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM12BY4: howto manager.      (line 3518)
+* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM4BY4:  howto manager.      (line 3517)
+* BFD_RELOC_CKCORE_PCREL_FLRW_IMM8BY4:   howto manager.      (line 3513)
+* BFD_RELOC_CKCORE_PCREL_IMM10BY2:       howto manager.      (line 3476)
+* BFD_RELOC_CKCORE_PCREL_IMM10BY4:       howto manager.      (line 3477)
+* BFD_RELOC_CKCORE_PCREL_IMM11BY2:       howto manager.      (line 3457)
+* BFD_RELOC_CKCORE_PCREL_IMM16BY2:       howto manager.      (line 3474)
+* BFD_RELOC_CKCORE_PCREL_IMM16BY4:       howto manager.      (line 3475)
+* BFD_RELOC_CKCORE_PCREL_IMM18BY2:       howto manager.      (line 3497)
+* BFD_RELOC_CKCORE_PCREL_IMM26BY2:       howto manager.      (line 3473)
+* BFD_RELOC_CKCORE_PCREL_IMM4BY2:        howto manager.      (line 3458)
+* BFD_RELOC_CKCORE_PCREL_IMM7BY4:        howto manager.      (line 3504)
+* BFD_RELOC_CKCORE_PCREL_IMM8BY4:        howto manager.      (line 3456)
+* BFD_RELOC_CKCORE_PCREL_JSR_IMM11BY2:   howto manager.      (line 3460)
+* BFD_RELOC_CKCORE_PCREL_JSR_IMM26BY2:   howto manager.      (line 3494)
+* BFD_RELOC_CKCORE_PLT12:                howto manager.      (line 3487)
+* BFD_RELOC_CKCORE_PLT32:                howto manager.      (line 3470)
+* BFD_RELOC_CKCORE_PLT_HI16:             howto manager.      (line 3488)
+* BFD_RELOC_CKCORE_PLT_IMM18BY4:         howto manager.      (line 3503)
+* BFD_RELOC_CKCORE_PLT_LO16:             howto manager.      (line 3489)
+* BFD_RELOC_CKCORE_RELATIVE:             howto manager.      (line 3463)
+* BFD_RELOC_CKCORE_TLS_DTPMOD32:         howto manager.      (line 3510)
+* BFD_RELOC_CKCORE_TLS_DTPOFF32:         howto manager.      (line 3511)
+* BFD_RELOC_CKCORE_TLS_GD32:             howto manager.      (line 3507)
+* BFD_RELOC_CKCORE_TLS_IE32:             howto manager.      (line 3506)
+* BFD_RELOC_CKCORE_TLS_LDM32:            howto manager.      (line 3508)
+* BFD_RELOC_CKCORE_TLS_LDO32:            howto manager.      (line 3509)
+* BFD_RELOC_CKCORE_TLS_LE32:             howto manager.      (line 3505)
+* BFD_RELOC_CKCORE_TLS_TPOFF32:          howto manager.      (line 3512)
+* BFD_RELOC_CKCORE_TOFFSET_LO16:         howto manager.      (line 3495)
+* bfd_reloc_code_real_type:              howto manager.      (line    9)
+* BFD_RELOC_CR16_ABS20:                  howto manager.      (line 2278)
+* BFD_RELOC_CR16_ABS24:                  howto manager.      (line 2279)
+* BFD_RELOC_CR16_DISP16:                 howto manager.      (line 2289)
+* BFD_RELOC_CR16_DISP20:                 howto manager.      (line 2290)
+* BFD_RELOC_CR16_DISP24:                 howto manager.      (line 2291)
+* BFD_RELOC_CR16_DISP24a:                howto manager.      (line 2292)
+* BFD_RELOC_CR16_DISP4:                  howto manager.      (line 2287)
+* BFD_RELOC_CR16_DISP8:                  howto manager.      (line 2288)
+* BFD_RELOC_CR16_GLOB_DAT:               howto manager.      (line 2298)
+* BFD_RELOC_CR16_GOTC_REGREL20:          howto manager.      (line 2297)
+* BFD_RELOC_CR16_GOT_REGREL20:           howto manager.      (line 2296)
+* BFD_RELOC_CR16_IMM16:                  howto manager.      (line 2282)
+* BFD_RELOC_CR16_IMM20:                  howto manager.      (line 2283)
+* BFD_RELOC_CR16_IMM24:                  howto manager.      (line 2284)
+* BFD_RELOC_CR16_IMM32:                  howto manager.      (line 2285)
+* BFD_RELOC_CR16_IMM32a:                 howto manager.      (line 2286)
+* BFD_RELOC_CR16_IMM4:                   howto manager.      (line 2280)
+* BFD_RELOC_CR16_IMM8:                   howto manager.      (line 2281)
+* BFD_RELOC_CR16_NUM16:                  howto manager.      (line 2267)
+* BFD_RELOC_CR16_NUM32:                  howto manager.      (line 2268)
+* BFD_RELOC_CR16_NUM32a:                 howto manager.      (line 2269)
+* BFD_RELOC_CR16_NUM8:                   howto manager.      (line 2266)
+* BFD_RELOC_CR16_REGREL0:                howto manager.      (line 2270)
+* BFD_RELOC_CR16_REGREL14:               howto manager.      (line 2273)
+* BFD_RELOC_CR16_REGREL14a:              howto manager.      (line 2274)
+* BFD_RELOC_CR16_REGREL16:               howto manager.      (line 2275)
+* BFD_RELOC_CR16_REGREL20:               howto manager.      (line 2276)
+* BFD_RELOC_CR16_REGREL20a:              howto manager.      (line 2277)
+* BFD_RELOC_CR16_REGREL4:                howto manager.      (line 2271)
+* BFD_RELOC_CR16_REGREL4a:               howto manager.      (line 2272)
+* BFD_RELOC_CR16_SWITCH16:               howto manager.      (line 2294)
+* BFD_RELOC_CR16_SWITCH32:               howto manager.      (line 2295)
+* BFD_RELOC_CR16_SWITCH8:                howto manager.      (line 2293)
+* BFD_RELOC_CRIS_16_DTPREL:              howto manager.      (line 2358)
+* BFD_RELOC_CRIS_16_GOT:                 howto manager.      (line 2340)
+* BFD_RELOC_CRIS_16_GOTPLT:              howto manager.      (line 2344)
+* BFD_RELOC_CRIS_16_GOT_GD:              howto manager.      (line 2354)
+* BFD_RELOC_CRIS_16_GOT_TPREL:           howto manager.      (line 2360)
+* BFD_RELOC_CRIS_16_TPREL:               howto manager.      (line 2362)
+* BFD_RELOC_CRIS_32_DTPREL:              howto manager.      (line 2357)
+* BFD_RELOC_CRIS_32_GD:                  howto manager.      (line 2355)
+* BFD_RELOC_CRIS_32_GOT:                 howto manager.      (line 2338)
+* BFD_RELOC_CRIS_32_GOTPLT:              howto manager.      (line 2342)
+* BFD_RELOC_CRIS_32_GOTREL:              howto manager.      (line 2346)
+* BFD_RELOC_CRIS_32_GOT_GD:              howto manager.      (line 2353)
+* BFD_RELOC_CRIS_32_GOT_TPREL:           howto manager.      (line 2359)
+* BFD_RELOC_CRIS_32_IE:                  howto manager.      (line 2364)
+* BFD_RELOC_CRIS_32_PLT_GOTREL:          howto manager.      (line 2348)
+* BFD_RELOC_CRIS_32_PLT_PCREL:           howto manager.      (line 2350)
+* BFD_RELOC_CRIS_32_TPREL:               howto manager.      (line 2361)
+* BFD_RELOC_CRIS_BDISP8:                 howto manager.      (line 2321)
+* BFD_RELOC_CRIS_COPY:                   howto manager.      (line 2333)
+* BFD_RELOC_CRIS_DTP:                    howto manager.      (line 2356)
+* BFD_RELOC_CRIS_DTPMOD:                 howto manager.      (line 2363)
+* BFD_RELOC_CRIS_GLOB_DAT:               howto manager.      (line 2334)
+* BFD_RELOC_CRIS_JUMP_SLOT:              howto manager.      (line 2335)
+* BFD_RELOC_CRIS_LAPCQ_OFFSET:           howto manager.      (line 2329)
+* BFD_RELOC_CRIS_RELATIVE:               howto manager.      (line 2336)
+* BFD_RELOC_CRIS_SIGNED_16:              howto manager.      (line 2327)
+* BFD_RELOC_CRIS_SIGNED_6:               howto manager.      (line 2323)
+* BFD_RELOC_CRIS_SIGNED_8:               howto manager.      (line 2325)
+* BFD_RELOC_CRIS_UNSIGNED_16:            howto manager.      (line 2328)
+* BFD_RELOC_CRIS_UNSIGNED_4:             howto manager.      (line 2330)
+* BFD_RELOC_CRIS_UNSIGNED_5:             howto manager.      (line 2322)
+* BFD_RELOC_CRIS_UNSIGNED_6:             howto manager.      (line 2324)
+* BFD_RELOC_CRIS_UNSIGNED_8:             howto manager.      (line 2326)
+* BFD_RELOC_CRX_ABS16:                   howto manager.      (line 2310)
+* BFD_RELOC_CRX_ABS32:                   howto manager.      (line 2311)
+* BFD_RELOC_CRX_IMM16:                   howto manager.      (line 2315)
+* BFD_RELOC_CRX_IMM32:                   howto manager.      (line 2316)
+* BFD_RELOC_CRX_NUM16:                   howto manager.      (line 2313)
+* BFD_RELOC_CRX_NUM32:                   howto manager.      (line 2314)
+* BFD_RELOC_CRX_NUM8:                    howto manager.      (line 2312)
+* BFD_RELOC_CRX_REGREL12:                howto manager.      (line 2306)
+* BFD_RELOC_CRX_REGREL22:                howto manager.      (line 2307)
+* BFD_RELOC_CRX_REGREL28:                howto manager.      (line 2308)
+* BFD_RELOC_CRX_REGREL32:                howto manager.      (line 2309)
+* BFD_RELOC_CRX_REL16:                   howto manager.      (line 2303)
+* BFD_RELOC_CRX_REL24:                   howto manager.      (line 2304)
+* BFD_RELOC_CRX_REL32:                   howto manager.      (line 2305)
+* BFD_RELOC_CRX_REL4:                    howto manager.      (line 2300)
+* BFD_RELOC_CRX_REL8:                    howto manager.      (line 2301)
+* BFD_RELOC_CRX_REL8_CMP:                howto manager.      (line 2302)
+* BFD_RELOC_CRX_SWITCH16:                howto manager.      (line 2318)
+* BFD_RELOC_CRX_SWITCH32:                howto manager.      (line 2319)
+* BFD_RELOC_CRX_SWITCH8:                 howto manager.      (line 2317)
+* BFD_RELOC_CTOR:                        howto manager.      (line  776)
+* BFD_RELOC_D10V_10_PCREL_L:             howto manager.      (line 1200)
+* BFD_RELOC_D10V_10_PCREL_R:             howto manager.      (line 1197)
+* BFD_RELOC_D10V_18:                     howto manager.      (line 1204)
+* BFD_RELOC_D10V_18_PCREL:               howto manager.      (line 1206)
+* BFD_RELOC_D30V_15:                     howto manager.      (line 1217)
+* BFD_RELOC_D30V_15_PCREL:               howto manager.      (line 1220)
+* BFD_RELOC_D30V_15_PCREL_R:             howto manager.      (line 1223)
+* BFD_RELOC_D30V_21:                     howto manager.      (line 1227)
+* BFD_RELOC_D30V_21_PCREL:               howto manager.      (line 1230)
+* BFD_RELOC_D30V_21_PCREL_R:             howto manager.      (line 1233)
+* BFD_RELOC_D30V_32:                     howto manager.      (line 1237)
+* BFD_RELOC_D30V_32_PCREL:               howto manager.      (line 1239)
+* BFD_RELOC_D30V_6:                      howto manager.      (line 1208)
+* BFD_RELOC_D30V_9_PCREL:                howto manager.      (line 1210)
+* BFD_RELOC_D30V_9_PCREL_R:              howto manager.      (line 1213)
+* BFD_RELOC_DLX_HI16_S:                  howto manager.      (line 1241)
+* BFD_RELOC_DLX_JMP26:                   howto manager.      (line 1243)
+* BFD_RELOC_DLX_LO16:                    howto manager.      (line 1242)
+* BFD_RELOC_EPIPHANY_HIGH:               howto manager.      (line 3424)
+* BFD_RELOC_EPIPHANY_IMM11:              howto manager.      (line 3430)
+* BFD_RELOC_EPIPHANY_IMM8:               howto manager.      (line 3433)
+* BFD_RELOC_EPIPHANY_LOW:                howto manager.      (line 3426)
+* BFD_RELOC_EPIPHANY_SIMM11:             howto manager.      (line 3428)
+* BFD_RELOC_EPIPHANY_SIMM24:             howto manager.      (line 3422)
+* BFD_RELOC_EPIPHANY_SIMM8:              howto manager.      (line 3420)
+* BFD_RELOC_FR30_10_IN_8:                howto manager.      (line 1620)
+* BFD_RELOC_FR30_12_PCREL:               howto manager.      (line 1626)
+* BFD_RELOC_FR30_20:                     howto manager.      (line 1608)
+* BFD_RELOC_FR30_48:                     howto manager.      (line 1606)
+* BFD_RELOC_FR30_6_IN_4:                 howto manager.      (line 1611)
+* BFD_RELOC_FR30_8_IN_8:                 howto manager.      (line 1614)
+* BFD_RELOC_FR30_9_IN_8:                 howto manager.      (line 1617)
+* BFD_RELOC_FR30_9_PCREL:                howto manager.      (line 1623)
 * BFD_RELOC_FRV_FUNCDESC:                howto manager.      (line  451)
 * BFD_RELOC_FRV_FUNCDESC_GOT12:          howto manager.      (line  452)
 * BFD_RELOC_FRV_FUNCDESC_GOTHI:          howto manager.      (line  453)
@@ -13029,12 +12825,12 @@ BFD Index
 * BFD_RELOC_FT32_SC1:                    howto manager.      (line  435)
 * BFD_RELOC_GPREL16:                     howto manager.      (line  112)
 * BFD_RELOC_GPREL32:                     howto manager.      (line  113)
-* BFD_RELOC_H8_DIR16A8:                  howto manager.      (line 2404)
-* BFD_RELOC_H8_DIR16R8:                  howto manager.      (line 2405)
-* BFD_RELOC_H8_DIR24A8:                  howto manager.      (line 2406)
-* BFD_RELOC_H8_DIR24R8:                  howto manager.      (line 2407)
-* BFD_RELOC_H8_DIR32A16:                 howto manager.      (line 2408)
-* BFD_RELOC_H8_DISP32A16:                howto manager.      (line 2409)
+* BFD_RELOC_H8_DIR16A8:                  howto manager.      (line 2407)
+* BFD_RELOC_H8_DIR16R8:                  howto manager.      (line 2408)
+* BFD_RELOC_H8_DIR24A8:                  howto manager.      (line 2409)
+* BFD_RELOC_H8_DIR24R8:                  howto manager.      (line 2410)
+* BFD_RELOC_H8_DIR32A16:                 howto manager.      (line 2411)
+* BFD_RELOC_H8_DISP32A16:                howto manager.      (line 2412)
 * BFD_RELOC_HI16:                        howto manager.      (line  312)
 * BFD_RELOC_HI16_BASEREL:                howto manager.      (line   92)
 * BFD_RELOC_HI16_GOTOFF:                 howto manager.      (line   51)
@@ -13046,263 +12842,457 @@ BFD Index
 * BFD_RELOC_HI16_S_PCREL:                howto manager.      (line  323)
 * BFD_RELOC_HI16_S_PLTOFF:               howto manager.      (line   64)
 * BFD_RELOC_HI22:                        howto manager.      (line  108)
-* BFD_RELOC_I370_D12:                    howto manager.      (line  757)
-* BFD_RELOC_IA64_COPY:                   howto manager.      (line 2162)
-* BFD_RELOC_IA64_DIR32LSB:               howto manager.      (line 2107)
-* BFD_RELOC_IA64_DIR32MSB:               howto manager.      (line 2106)
-* BFD_RELOC_IA64_DIR64LSB:               howto manager.      (line 2109)
-* BFD_RELOC_IA64_DIR64MSB:               howto manager.      (line 2108)
-* BFD_RELOC_IA64_DTPMOD64LSB:            howto manager.      (line 2172)
-* BFD_RELOC_IA64_DTPMOD64MSB:            howto manager.      (line 2171)
-* BFD_RELOC_IA64_DTPREL14:               howto manager.      (line 2174)
-* BFD_RELOC_IA64_DTPREL22:               howto manager.      (line 2175)
-* BFD_RELOC_IA64_DTPREL32LSB:            howto manager.      (line 2178)
-* BFD_RELOC_IA64_DTPREL32MSB:            howto manager.      (line 2177)
-* BFD_RELOC_IA64_DTPREL64I:              howto manager.      (line 2176)
-* BFD_RELOC_IA64_DTPREL64LSB:            howto manager.      (line 2180)
-* BFD_RELOC_IA64_DTPREL64MSB:            howto manager.      (line 2179)
-* BFD_RELOC_IA64_FPTR32LSB:              howto manager.      (line 2124)
-* BFD_RELOC_IA64_FPTR32MSB:              howto manager.      (line 2123)
-* BFD_RELOC_IA64_FPTR64I:                howto manager.      (line 2122)
-* BFD_RELOC_IA64_FPTR64LSB:              howto manager.      (line 2126)
-* BFD_RELOC_IA64_FPTR64MSB:              howto manager.      (line 2125)
-* BFD_RELOC_IA64_GPREL22:                howto manager.      (line 2110)
-* BFD_RELOC_IA64_GPREL32LSB:             howto manager.      (line 2113)
-* BFD_RELOC_IA64_GPREL32MSB:             howto manager.      (line 2112)
-* BFD_RELOC_IA64_GPREL64I:               howto manager.      (line 2111)
-* BFD_RELOC_IA64_GPREL64LSB:             howto manager.      (line 2115)
-* BFD_RELOC_IA64_GPREL64MSB:             howto manager.      (line 2114)
-* BFD_RELOC_IA64_IMM14:                  howto manager.      (line 2103)
-* BFD_RELOC_IA64_IMM22:                  howto manager.      (line 2104)
-* BFD_RELOC_IA64_IMM64:                  howto manager.      (line 2105)
-* BFD_RELOC_IA64_IPLTLSB:                howto manager.      (line 2161)
-* BFD_RELOC_IA64_IPLTMSB:                howto manager.      (line 2160)
-* BFD_RELOC_IA64_LDXMOV:                 howto manager.      (line 2164)
-* BFD_RELOC_IA64_LTOFF22:                howto manager.      (line 2116)
-* BFD_RELOC_IA64_LTOFF22X:               howto manager.      (line 2163)
-* BFD_RELOC_IA64_LTOFF64I:               howto manager.      (line 2117)
-* BFD_RELOC_IA64_LTOFF_DTPMOD22:         howto manager.      (line 2173)
-* BFD_RELOC_IA64_LTOFF_DTPREL22:         howto manager.      (line 2181)
-* BFD_RELOC_IA64_LTOFF_FPTR22:           howto manager.      (line 2138)
-* BFD_RELOC_IA64_LTOFF_FPTR32LSB:        howto manager.      (line 2141)
-* BFD_RELOC_IA64_LTOFF_FPTR32MSB:        howto manager.      (line 2140)
-* BFD_RELOC_IA64_LTOFF_FPTR64I:          howto manager.      (line 2139)
-* BFD_RELOC_IA64_LTOFF_FPTR64LSB:        howto manager.      (line 2143)
-* BFD_RELOC_IA64_LTOFF_FPTR64MSB:        howto manager.      (line 2142)
-* BFD_RELOC_IA64_LTOFF_TPREL22:          howto manager.      (line 2170)
-* BFD_RELOC_IA64_LTV32LSB:               howto manager.      (line 2157)
-* BFD_RELOC_IA64_LTV32MSB:               howto manager.      (line 2156)
-* BFD_RELOC_IA64_LTV64LSB:               howto manager.      (line 2159)
-* BFD_RELOC_IA64_LTV64MSB:               howto manager.      (line 2158)
-* BFD_RELOC_IA64_PCREL21B:               howto manager.      (line 2127)
-* BFD_RELOC_IA64_PCREL21BI:              howto manager.      (line 2128)
-* BFD_RELOC_IA64_PCREL21F:               howto manager.      (line 2130)
-* BFD_RELOC_IA64_PCREL21M:               howto manager.      (line 2129)
-* BFD_RELOC_IA64_PCREL22:                howto manager.      (line 2131)
-* BFD_RELOC_IA64_PCREL32LSB:             howto manager.      (line 2135)
-* BFD_RELOC_IA64_PCREL32MSB:             howto manager.      (line 2134)
-* BFD_RELOC_IA64_PCREL60B:               howto manager.      (line 2132)
-* BFD_RELOC_IA64_PCREL64I:               howto manager.      (line 2133)
-* BFD_RELOC_IA64_PCREL64LSB:             howto manager.      (line 2137)
-* BFD_RELOC_IA64_PCREL64MSB:             howto manager.      (line 2136)
-* BFD_RELOC_IA64_PLTOFF22:               howto manager.      (line 2118)
-* BFD_RELOC_IA64_PLTOFF64I:              howto manager.      (line 2119)
-* BFD_RELOC_IA64_PLTOFF64LSB:            howto manager.      (line 2121)
-* BFD_RELOC_IA64_PLTOFF64MSB:            howto manager.      (line 2120)
-* BFD_RELOC_IA64_REL32LSB:               howto manager.      (line 2153)
-* BFD_RELOC_IA64_REL32MSB:               howto manager.      (line 2152)
-* BFD_RELOC_IA64_REL64LSB:               howto manager.      (line 2155)
-* BFD_RELOC_IA64_REL64MSB:               howto manager.      (line 2154)
-* BFD_RELOC_IA64_SECREL32LSB:            howto manager.      (line 2149)
-* BFD_RELOC_IA64_SECREL32MSB:            howto manager.      (line 2148)
-* BFD_RELOC_IA64_SECREL64LSB:            howto manager.      (line 2151)
-* BFD_RELOC_IA64_SECREL64MSB:            howto manager.      (line 2150)
-* BFD_RELOC_IA64_SEGREL32LSB:            howto manager.      (line 2145)
-* BFD_RELOC_IA64_SEGREL32MSB:            howto manager.      (line 2144)
-* BFD_RELOC_IA64_SEGREL64LSB:            howto manager.      (line 2147)
-* BFD_RELOC_IA64_SEGREL64MSB:            howto manager.      (line 2146)
-* BFD_RELOC_IA64_TPREL14:                howto manager.      (line 2165)
-* BFD_RELOC_IA64_TPREL22:                howto manager.      (line 2166)
-* BFD_RELOC_IA64_TPREL64I:               howto manager.      (line 2167)
-* BFD_RELOC_IA64_TPREL64LSB:             howto manager.      (line 2169)
-* BFD_RELOC_IA64_TPREL64MSB:             howto manager.      (line 2168)
-* BFD_RELOC_IP2K_ADDR16CJP:              howto manager.      (line 2064)
-* BFD_RELOC_IP2K_BANK:                   howto manager.      (line 2062)
-* BFD_RELOC_IP2K_EX8DATA:                howto manager.      (line 2070)
-* BFD_RELOC_IP2K_FR9:                    howto manager.      (line 2060)
-* BFD_RELOC_IP2K_FR_OFFSET:              howto manager.      (line 2079)
-* BFD_RELOC_IP2K_HI8DATA:                howto manager.      (line 2069)
-* BFD_RELOC_IP2K_HI8INSN:                howto manager.      (line 2073)
-* BFD_RELOC_IP2K_LO8DATA:                howto manager.      (line 2068)
-* BFD_RELOC_IP2K_LO8INSN:                howto manager.      (line 2072)
-* BFD_RELOC_IP2K_PAGE3:                  howto manager.      (line 2066)
-* BFD_RELOC_IP2K_PC_SKIP:                howto manager.      (line 2075)
-* BFD_RELOC_IP2K_TEXT:                   howto manager.      (line 2077)
+* BFD_RELOC_I370_D12:                    howto manager.      (line  774)
+* BFD_RELOC_IA64_COPY:                   howto manager.      (line 2164)
+* BFD_RELOC_IA64_DIR32LSB:               howto manager.      (line 2109)
+* BFD_RELOC_IA64_DIR32MSB:               howto manager.      (line 2108)
+* BFD_RELOC_IA64_DIR64LSB:               howto manager.      (line 2111)
+* BFD_RELOC_IA64_DIR64MSB:               howto manager.      (line 2110)
+* BFD_RELOC_IA64_DTPMOD64LSB:            howto manager.      (line 2174)
+* BFD_RELOC_IA64_DTPMOD64MSB:            howto manager.      (line 2173)
+* BFD_RELOC_IA64_DTPREL14:               howto manager.      (line 2176)
+* BFD_RELOC_IA64_DTPREL22:               howto manager.      (line 2177)
+* BFD_RELOC_IA64_DTPREL32LSB:            howto manager.      (line 2180)
+* BFD_RELOC_IA64_DTPREL32MSB:            howto manager.      (line 2179)
+* BFD_RELOC_IA64_DTPREL64I:              howto manager.      (line 2178)
+* BFD_RELOC_IA64_DTPREL64LSB:            howto manager.      (line 2182)
+* BFD_RELOC_IA64_DTPREL64MSB:            howto manager.      (line 2181)
+* BFD_RELOC_IA64_FPTR32LSB:              howto manager.      (line 2126)
+* BFD_RELOC_IA64_FPTR32MSB:              howto manager.      (line 2125)
+* BFD_RELOC_IA64_FPTR64I:                howto manager.      (line 2124)
+* BFD_RELOC_IA64_FPTR64LSB:              howto manager.      (line 2128)
+* BFD_RELOC_IA64_FPTR64MSB:              howto manager.      (line 2127)
+* BFD_RELOC_IA64_GPREL22:                howto manager.      (line 2112)
+* BFD_RELOC_IA64_GPREL32LSB:             howto manager.      (line 2115)
+* BFD_RELOC_IA64_GPREL32MSB:             howto manager.      (line 2114)
+* BFD_RELOC_IA64_GPREL64I:               howto manager.      (line 2113)
+* BFD_RELOC_IA64_GPREL64LSB:             howto manager.      (line 2117)
+* BFD_RELOC_IA64_GPREL64MSB:             howto manager.      (line 2116)
+* BFD_RELOC_IA64_IMM14:                  howto manager.      (line 2105)
+* BFD_RELOC_IA64_IMM22:                  howto manager.      (line 2106)
+* BFD_RELOC_IA64_IMM64:                  howto manager.      (line 2107)
+* BFD_RELOC_IA64_IPLTLSB:                howto manager.      (line 2163)
+* BFD_RELOC_IA64_IPLTMSB:                howto manager.      (line 2162)
+* BFD_RELOC_IA64_LDXMOV:                 howto manager.      (line 2166)
+* BFD_RELOC_IA64_LTOFF22:                howto manager.      (line 2118)
+* BFD_RELOC_IA64_LTOFF22X:               howto manager.      (line 2165)
+* BFD_RELOC_IA64_LTOFF64I:               howto manager.      (line 2119)
+* BFD_RELOC_IA64_LTOFF_DTPMOD22:         howto manager.      (line 2175)
+* BFD_RELOC_IA64_LTOFF_DTPREL22:         howto manager.      (line 2183)
+* BFD_RELOC_IA64_LTOFF_FPTR22:           howto manager.      (line 2140)
+* BFD_RELOC_IA64_LTOFF_FPTR32LSB:        howto manager.      (line 2143)
+* BFD_RELOC_IA64_LTOFF_FPTR32MSB:        howto manager.      (line 2142)
+* BFD_RELOC_IA64_LTOFF_FPTR64I:          howto manager.      (line 2141)
+* BFD_RELOC_IA64_LTOFF_FPTR64LSB:        howto manager.      (line 2145)
+* BFD_RELOC_IA64_LTOFF_FPTR64MSB:        howto manager.      (line 2144)
+* BFD_RELOC_IA64_LTOFF_TPREL22:          howto manager.      (line 2172)
+* BFD_RELOC_IA64_LTV32LSB:               howto manager.      (line 2159)
+* BFD_RELOC_IA64_LTV32MSB:               howto manager.      (line 2158)
+* BFD_RELOC_IA64_LTV64LSB:               howto manager.      (line 2161)
+* BFD_RELOC_IA64_LTV64MSB:               howto manager.      (line 2160)
+* BFD_RELOC_IA64_PCREL21B:               howto manager.      (line 2129)
+* BFD_RELOC_IA64_PCREL21BI:              howto manager.      (line 2130)
+* BFD_RELOC_IA64_PCREL21F:               howto manager.      (line 2132)
+* BFD_RELOC_IA64_PCREL21M:               howto manager.      (line 2131)
+* BFD_RELOC_IA64_PCREL22:                howto manager.      (line 2133)
+* BFD_RELOC_IA64_PCREL32LSB:             howto manager.      (line 2137)
+* BFD_RELOC_IA64_PCREL32MSB:             howto manager.      (line 2136)
+* BFD_RELOC_IA64_PCREL60B:               howto manager.      (line 2134)
+* BFD_RELOC_IA64_PCREL64I:               howto manager.      (line 2135)
+* BFD_RELOC_IA64_PCREL64LSB:             howto manager.      (line 2139)
+* BFD_RELOC_IA64_PCREL64MSB:             howto manager.      (line 2138)
+* BFD_RELOC_IA64_PLTOFF22:               howto manager.      (line 2120)
+* BFD_RELOC_IA64_PLTOFF64I:              howto manager.      (line 2121)
+* BFD_RELOC_IA64_PLTOFF64LSB:            howto manager.      (line 2123)
+* BFD_RELOC_IA64_PLTOFF64MSB:            howto manager.      (line 2122)
+* BFD_RELOC_IA64_REL32LSB:               howto manager.      (line 2155)
+* BFD_RELOC_IA64_REL32MSB:               howto manager.      (line 2154)
+* BFD_RELOC_IA64_REL64LSB:               howto manager.      (line 2157)
+* BFD_RELOC_IA64_REL64MSB:               howto manager.      (line 2156)
+* BFD_RELOC_IA64_SECREL32LSB:            howto manager.      (line 2151)
+* BFD_RELOC_IA64_SECREL32MSB:            howto manager.      (line 2150)
+* BFD_RELOC_IA64_SECREL64LSB:            howto manager.      (line 2153)
+* BFD_RELOC_IA64_SECREL64MSB:            howto manager.      (line 2152)
+* BFD_RELOC_IA64_SEGREL32LSB:            howto manager.      (line 2147)
+* BFD_RELOC_IA64_SEGREL32MSB:            howto manager.      (line 2146)
+* BFD_RELOC_IA64_SEGREL64LSB:            howto manager.      (line 2149)
+* BFD_RELOC_IA64_SEGREL64MSB:            howto manager.      (line 2148)
+* BFD_RELOC_IA64_TPREL14:                howto manager.      (line 2167)
+* BFD_RELOC_IA64_TPREL22:                howto manager.      (line 2168)
+* BFD_RELOC_IA64_TPREL64I:               howto manager.      (line 2169)
+* BFD_RELOC_IA64_TPREL64LSB:             howto manager.      (line 2171)
+* BFD_RELOC_IA64_TPREL64MSB:             howto manager.      (line 2170)
+* BFD_RELOC_IP2K_ADDR16CJP:              howto manager.      (line 2066)
+* BFD_RELOC_IP2K_BANK:                   howto manager.      (line 2064)
+* BFD_RELOC_IP2K_EX8DATA:                howto manager.      (line 2072)
+* BFD_RELOC_IP2K_FR9:                    howto manager.      (line 2062)
+* BFD_RELOC_IP2K_FR_OFFSET:              howto manager.      (line 2081)
+* BFD_RELOC_IP2K_HI8DATA:                howto manager.      (line 2071)
+* BFD_RELOC_IP2K_HI8INSN:                howto manager.      (line 2075)
+* BFD_RELOC_IP2K_LO8DATA:                howto manager.      (line 2070)
+* BFD_RELOC_IP2K_LO8INSN:                howto manager.      (line 2074)
+* BFD_RELOC_IP2K_PAGE3:                  howto manager.      (line 2068)
+* BFD_RELOC_IP2K_PC_SKIP:                howto manager.      (line 2077)
+* BFD_RELOC_IP2K_TEXT:                   howto manager.      (line 2079)
 * BFD_RELOC_IQ2000_OFFSET_16:            howto manager.      (line 2543)
 * BFD_RELOC_IQ2000_OFFSET_21:            howto manager.      (line 2544)
 * BFD_RELOC_IQ2000_UHI16:                howto manager.      (line 2545)
-* BFD_RELOC_LM32_16_GOT:                 howto manager.      (line 2635)
-* BFD_RELOC_LM32_BRANCH:                 howto manager.      (line 2634)
-* BFD_RELOC_LM32_CALL:                   howto manager.      (line 2633)
-* BFD_RELOC_LM32_COPY:                   howto manager.      (line 2638)
-* BFD_RELOC_LM32_GLOB_DAT:               howto manager.      (line 2639)
-* BFD_RELOC_LM32_GOTOFF_HI16:            howto manager.      (line 2636)
-* BFD_RELOC_LM32_GOTOFF_LO16:            howto manager.      (line 2637)
-* BFD_RELOC_LM32_JMP_SLOT:               howto manager.      (line 2640)
-* BFD_RELOC_LM32_RELATIVE:               howto manager.      (line 2641)
+* BFD_RELOC_KVX_16:                      howto manager.      (line 2793)
+* BFD_RELOC_KVX_32:                      howto manager.      (line 2794)
+* BFD_RELOC_KVX_32_GOT:                  howto manager.      (line 2821)
+* BFD_RELOC_KVX_32_GOTOFF:               howto manager.      (line 2819)
+* BFD_RELOC_KVX_32_PCREL:                howto manager.      (line 2799)
+* BFD_RELOC_KVX_64:                      howto manager.      (line 2795)
+* BFD_RELOC_KVX_64_DTPMOD:               howto manager.      (line 2846)
+* BFD_RELOC_KVX_64_DTPOFF:               howto manager.      (line 2847)
+* BFD_RELOC_KVX_64_GOT:                  howto manager.      (line 2827)
+* BFD_RELOC_KVX_64_GOTOFF:               howto manager.      (line 2820)
+* BFD_RELOC_KVX_64_PCREL:                howto manager.      (line 2808)
+* BFD_RELOC_KVX_64_TPOFF:                howto manager.      (line 2863)
+* BFD_RELOC_KVX_8:                       howto manager.      (line 2874)
+* BFD_RELOC_KVX_COPY:                    howto manager.      (line 2829)
+* BFD_RELOC_KVX_GLOB_DAT:                howto manager.      (line 2828)
+* BFD_RELOC_KVX_JMP_SLOT:                howto manager.      (line 2830)
+* BFD_RELOC_KVX_NONE:                    howto manager.      (line 2791)
+* BFD_RELOC_KVX_PCREL17:                 howto manager.      (line 2797)
+* BFD_RELOC_KVX_PCREL27:                 howto manager.      (line 2798)
+* BFD_RELOC_KVX_RELATIVE:                howto manager.      (line 2831)
+* BFD_RELOC_KVX_RELOC_END:               howto manager.      (line 2876)
+* BFD_RELOC_KVX_RELOC_START:             howto manager.      (line 2786)
+* BFD_RELOC_KVX_S16:                     howto manager.      (line 2809)
+* BFD_RELOC_KVX_S16_PCREL:               howto manager.      (line 2796)
+* BFD_RELOC_KVX_S32_LO5:                 howto manager.      (line 2810)
+* BFD_RELOC_KVX_S32_UP27:                howto manager.      (line 2811)
+* BFD_RELOC_KVX_S37_GOTADDR_LO10:        howto manager.      (line 2838)
+* BFD_RELOC_KVX_S37_GOTADDR_UP27:        howto manager.      (line 2839)
+* BFD_RELOC_KVX_S37_GOTOFF_LO10:         howto manager.      (line 2814)
+* BFD_RELOC_KVX_S37_GOTOFF_UP27:         howto manager.      (line 2815)
+* BFD_RELOC_KVX_S37_GOT_LO10:            howto manager.      (line 2822)
+* BFD_RELOC_KVX_S37_GOT_UP27:            howto manager.      (line 2823)
+* BFD_RELOC_KVX_S37_LO10:                howto manager.      (line 2812)
+* BFD_RELOC_KVX_S37_PCREL_LO10:          howto manager.      (line 2800)
+* BFD_RELOC_KVX_S37_PCREL_UP27:          howto manager.      (line 2801)
+* BFD_RELOC_KVX_S37_TLS_DTPOFF_LO10:     howto manager.      (line 2848)
+* BFD_RELOC_KVX_S37_TLS_DTPOFF_UP27:     howto manager.      (line 2849)
+* BFD_RELOC_KVX_S37_TLS_GD_LO10:         howto manager.      (line 2853)
+* BFD_RELOC_KVX_S37_TLS_GD_UP27:         howto manager.      (line 2854)
+* BFD_RELOC_KVX_S37_TLS_IE_LO10:         howto manager.      (line 2864)
+* BFD_RELOC_KVX_S37_TLS_IE_UP27:         howto manager.      (line 2865)
+* BFD_RELOC_KVX_S37_TLS_LD_LO10:         howto manager.      (line 2858)
+* BFD_RELOC_KVX_S37_TLS_LD_UP27:         howto manager.      (line 2859)
+* BFD_RELOC_KVX_S37_TLS_LE_LO10:         howto manager.      (line 2869)
+* BFD_RELOC_KVX_S37_TLS_LE_UP27:         howto manager.      (line 2870)
+* BFD_RELOC_KVX_S37_UP27:                howto manager.      (line 2813)
+* BFD_RELOC_KVX_S43_EX6:                 howto manager.      (line 2834)
+* BFD_RELOC_KVX_S43_GOTADDR_EX6:         howto manager.      (line 2842)
+* BFD_RELOC_KVX_S43_GOTADDR_LO10:        howto manager.      (line 2840)
+* BFD_RELOC_KVX_S43_GOTADDR_UP27:        howto manager.      (line 2841)
+* BFD_RELOC_KVX_S43_GOTOFF_EX6:          howto manager.      (line 2818)
+* BFD_RELOC_KVX_S43_GOTOFF_LO10:         howto manager.      (line 2816)
+* BFD_RELOC_KVX_S43_GOTOFF_UP27:         howto manager.      (line 2817)
+* BFD_RELOC_KVX_S43_GOT_EX6:             howto manager.      (line 2826)
+* BFD_RELOC_KVX_S43_GOT_LO10:            howto manager.      (line 2824)
+* BFD_RELOC_KVX_S43_GOT_UP27:            howto manager.      (line 2825)
+* BFD_RELOC_KVX_S43_LO10:                howto manager.      (line 2832)
+* BFD_RELOC_KVX_S43_PCREL_EX6:           howto manager.      (line 2804)
+* BFD_RELOC_KVX_S43_PCREL_LO10:          howto manager.      (line 2802)
+* BFD_RELOC_KVX_S43_PCREL_UP27:          howto manager.      (line 2803)
+* BFD_RELOC_KVX_S43_TLS_DTPOFF_EX6:      howto manager.      (line 2852)
+* BFD_RELOC_KVX_S43_TLS_DTPOFF_LO10:     howto manager.      (line 2850)
+* BFD_RELOC_KVX_S43_TLS_DTPOFF_UP27:     howto manager.      (line 2851)
+* BFD_RELOC_KVX_S43_TLS_GD_EX6:          howto manager.      (line 2857)
+* BFD_RELOC_KVX_S43_TLS_GD_LO10:         howto manager.      (line 2855)
+* BFD_RELOC_KVX_S43_TLS_GD_UP27:         howto manager.      (line 2856)
+* BFD_RELOC_KVX_S43_TLS_IE_EX6:          howto manager.      (line 2868)
+* BFD_RELOC_KVX_S43_TLS_IE_LO10:         howto manager.      (line 2866)
+* BFD_RELOC_KVX_S43_TLS_IE_UP27:         howto manager.      (line 2867)
+* BFD_RELOC_KVX_S43_TLS_LD_EX6:          howto manager.      (line 2862)
+* BFD_RELOC_KVX_S43_TLS_LD_LO10:         howto manager.      (line 2860)
+* BFD_RELOC_KVX_S43_TLS_LD_UP27:         howto manager.      (line 2861)
+* BFD_RELOC_KVX_S43_TLS_LE_EX6:          howto manager.      (line 2873)
+* BFD_RELOC_KVX_S43_TLS_LE_LO10:         howto manager.      (line 2871)
+* BFD_RELOC_KVX_S43_TLS_LE_UP27:         howto manager.      (line 2872)
+* BFD_RELOC_KVX_S43_UP27:                howto manager.      (line 2833)
+* BFD_RELOC_KVX_S64_EX27:                howto manager.      (line 2837)
+* BFD_RELOC_KVX_S64_GOTADDR_EX27:        howto manager.      (line 2845)
+* BFD_RELOC_KVX_S64_GOTADDR_LO10:        howto manager.      (line 2843)
+* BFD_RELOC_KVX_S64_GOTADDR_UP27:        howto manager.      (line 2844)
+* BFD_RELOC_KVX_S64_LO10:                howto manager.      (line 2835)
+* BFD_RELOC_KVX_S64_PCREL_EX27:          howto manager.      (line 2807)
+* BFD_RELOC_KVX_S64_PCREL_LO10:          howto manager.      (line 2805)
+* BFD_RELOC_KVX_S64_PCREL_UP27:          howto manager.      (line 2806)
+* BFD_RELOC_KVX_S64_UP27:                howto manager.      (line 2836)
+* BFD_RELOC_LARCH_32_PCREL:              howto manager.      (line 3602)
+* BFD_RELOC_LARCH_64_PCREL:              howto manager.      (line 3612)
+* BFD_RELOC_LARCH_ABS64_HI12:            howto manager.      (line 3573)
+* BFD_RELOC_LARCH_ABS64_LO20:            howto manager.      (line 3572)
+* BFD_RELOC_LARCH_ABS_HI20:              howto manager.      (line 3570)
+* BFD_RELOC_LARCH_ABS_LO12:              howto manager.      (line 3571)
+* BFD_RELOC_LARCH_ADD16:                 howto manager.      (line 3558)
+* BFD_RELOC_LARCH_ADD24:                 howto manager.      (line 3559)
+* BFD_RELOC_LARCH_ADD32:                 howto manager.      (line 3560)
+* BFD_RELOC_LARCH_ADD6:                  howto manager.      (line 3608)
+* BFD_RELOC_LARCH_ADD64:                 howto manager.      (line 3561)
+* BFD_RELOC_LARCH_ADD8:                  howto manager.      (line 3557)
+* BFD_RELOC_LARCH_ADD_ULEB128:           howto manager.      (line 3610)
+* BFD_RELOC_LARCH_ALIGN:                 howto manager.      (line 3605)
+* BFD_RELOC_LARCH_B16:                   howto manager.      (line 3567)
+* BFD_RELOC_LARCH_B21:                   howto manager.      (line 3568)
+* BFD_RELOC_LARCH_B26:                   howto manager.      (line 3569)
+* BFD_RELOC_LARCH_CALL36:                howto manager.      (line 3613)
+* BFD_RELOC_LARCH_CFA:                   howto manager.      (line 3607)
+* BFD_RELOC_LARCH_DELETE:                howto manager.      (line 3604)
+* BFD_RELOC_LARCH_GOT64_HI12:            howto manager.      (line 3585)
+* BFD_RELOC_LARCH_GOT64_LO20:            howto manager.      (line 3584)
+* BFD_RELOC_LARCH_GOT64_PC_HI12:         howto manager.      (line 3581)
+* BFD_RELOC_LARCH_GOT64_PC_LO20:         howto manager.      (line 3580)
+* BFD_RELOC_LARCH_GOT_HI20:              howto manager.      (line 3582)
+* BFD_RELOC_LARCH_GOT_LO12:              howto manager.      (line 3583)
+* BFD_RELOC_LARCH_GOT_PC_HI20:           howto manager.      (line 3578)
+* BFD_RELOC_LARCH_GOT_PC_LO12:           howto manager.      (line 3579)
+* BFD_RELOC_LARCH_MARK_LA:               howto manager.      (line 3530)
+* BFD_RELOC_LARCH_MARK_PCREL:            howto manager.      (line 3531)
+* BFD_RELOC_LARCH_PCALA64_HI12:          howto manager.      (line 3577)
+* BFD_RELOC_LARCH_PCALA64_LO20:          howto manager.      (line 3576)
+* BFD_RELOC_LARCH_PCALA_HI20:            howto manager.      (line 3574)
+* BFD_RELOC_LARCH_PCALA_LO12:            howto manager.      (line 3575)
+* BFD_RELOC_LARCH_PCREL20_S2:            howto manager.      (line 3606)
+* BFD_RELOC_LARCH_RELAX:                 howto manager.      (line 3603)
+* BFD_RELOC_LARCH_SOP_ADD:               howto manager.      (line 3545)
+* BFD_RELOC_LARCH_SOP_AND:               howto manager.      (line 3546)
+* BFD_RELOC_LARCH_SOP_ASSERT:            howto manager.      (line 3540)
+* BFD_RELOC_LARCH_SOP_IF_ELSE:           howto manager.      (line 3547)
+* BFD_RELOC_LARCH_SOP_NOT:               howto manager.      (line 3541)
+* BFD_RELOC_LARCH_SOP_POP_32_S_0_10_10_16_S2: howto manager. (line 3555)
+* BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2: howto manager.  (line 3554)
+* BFD_RELOC_LARCH_SOP_POP_32_S_10_12:    howto manager.      (line 3550)
+* BFD_RELOC_LARCH_SOP_POP_32_S_10_16:    howto manager.      (line 3551)
+* BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2: howto manager.      (line 3552)
+* BFD_RELOC_LARCH_SOP_POP_32_S_10_5:     howto manager.      (line 3548)
+* BFD_RELOC_LARCH_SOP_POP_32_S_5_20:     howto manager.      (line 3553)
+* BFD_RELOC_LARCH_SOP_POP_32_U:          howto manager.      (line 3556)
+* BFD_RELOC_LARCH_SOP_POP_32_U_10_12:    howto manager.      (line 3549)
+* BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE:     howto manager.      (line 3533)
+* BFD_RELOC_LARCH_SOP_PUSH_DUP:          howto manager.      (line 3534)
+* BFD_RELOC_LARCH_SOP_PUSH_GPREL:        howto manager.      (line 3535)
+* BFD_RELOC_LARCH_SOP_PUSH_PCREL:        howto manager.      (line 3532)
+* BFD_RELOC_LARCH_SOP_PUSH_PLT_PCREL:    howto manager.      (line 3539)
+* BFD_RELOC_LARCH_SOP_PUSH_TLS_GD:       howto manager.      (line 3538)
+* BFD_RELOC_LARCH_SOP_PUSH_TLS_GOT:      howto manager.      (line 3537)
+* BFD_RELOC_LARCH_SOP_PUSH_TLS_TPREL:    howto manager.      (line 3536)
+* BFD_RELOC_LARCH_SOP_SL:                howto manager.      (line 3543)
+* BFD_RELOC_LARCH_SOP_SR:                howto manager.      (line 3544)
+* BFD_RELOC_LARCH_SOP_SUB:               howto manager.      (line 3542)
+* BFD_RELOC_LARCH_SUB16:                 howto manager.      (line 3563)
+* BFD_RELOC_LARCH_SUB24:                 howto manager.      (line 3564)
+* BFD_RELOC_LARCH_SUB32:                 howto manager.      (line 3565)
+* BFD_RELOC_LARCH_SUB6:                  howto manager.      (line 3609)
+* BFD_RELOC_LARCH_SUB64:                 howto manager.      (line 3566)
+* BFD_RELOC_LARCH_SUB8:                  howto manager.      (line 3562)
+* BFD_RELOC_LARCH_SUB_ULEB128:           howto manager.      (line 3611)
+* BFD_RELOC_LARCH_TLS_DESC32:            howto manager.      (line 3528)
+* BFD_RELOC_LARCH_TLS_DESC64:            howto manager.      (line 3529)
+* BFD_RELOC_LARCH_TLS_DESC64_HI12:       howto manager.      (line 3621)
+* BFD_RELOC_LARCH_TLS_DESC64_LO20:       howto manager.      (line 3620)
+* BFD_RELOC_LARCH_TLS_DESC64_PC_HI12:    howto manager.      (line 3617)
+* BFD_RELOC_LARCH_TLS_DESC64_PC_LO20:    howto manager.      (line 3616)
+* BFD_RELOC_LARCH_TLS_DESC_CALL:         howto manager.      (line 3623)
+* BFD_RELOC_LARCH_TLS_DESC_HI20:         howto manager.      (line 3618)
+* BFD_RELOC_LARCH_TLS_DESC_LD:           howto manager.      (line 3622)
+* BFD_RELOC_LARCH_TLS_DESC_LO12:         howto manager.      (line 3619)
+* BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2:   howto manager.      (line 3629)
+* BFD_RELOC_LARCH_TLS_DESC_PC_HI20:      howto manager.      (line 3614)
+* BFD_RELOC_LARCH_TLS_DESC_PC_LO12:      howto manager.      (line 3615)
+* BFD_RELOC_LARCH_TLS_DTPMOD32:          howto manager.      (line 3522)
+* BFD_RELOC_LARCH_TLS_DTPMOD64:          howto manager.      (line 3524)
+* BFD_RELOC_LARCH_TLS_DTPREL32:          howto manager.      (line 3523)
+* BFD_RELOC_LARCH_TLS_DTPREL64:          howto manager.      (line 3525)
+* BFD_RELOC_LARCH_TLS_GD_HI20:           howto manager.      (line 3601)
+* BFD_RELOC_LARCH_TLS_GD_PCREL20_S2:     howto manager.      (line 3628)
+* BFD_RELOC_LARCH_TLS_GD_PC_HI20:        howto manager.      (line 3600)
+* BFD_RELOC_LARCH_TLS_IE64_HI12:         howto manager.      (line 3597)
+* BFD_RELOC_LARCH_TLS_IE64_LO20:         howto manager.      (line 3596)
+* BFD_RELOC_LARCH_TLS_IE64_PC_HI12:      howto manager.      (line 3593)
+* BFD_RELOC_LARCH_TLS_IE64_PC_LO20:      howto manager.      (line 3592)
+* BFD_RELOC_LARCH_TLS_IE_HI20:           howto manager.      (line 3594)
+* BFD_RELOC_LARCH_TLS_IE_LO12:           howto manager.      (line 3595)
+* BFD_RELOC_LARCH_TLS_IE_PC_HI20:        howto manager.      (line 3590)
+* BFD_RELOC_LARCH_TLS_IE_PC_LO12:        howto manager.      (line 3591)
+* BFD_RELOC_LARCH_TLS_LD_HI20:           howto manager.      (line 3599)
+* BFD_RELOC_LARCH_TLS_LD_PCREL20_S2:     howto manager.      (line 3627)
+* BFD_RELOC_LARCH_TLS_LD_PC_HI20:        howto manager.      (line 3598)
+* BFD_RELOC_LARCH_TLS_LE64_HI12:         howto manager.      (line 3589)
+* BFD_RELOC_LARCH_TLS_LE64_LO20:         howto manager.      (line 3588)
+* BFD_RELOC_LARCH_TLS_LE_ADD_R:          howto manager.      (line 3625)
+* BFD_RELOC_LARCH_TLS_LE_HI20:           howto manager.      (line 3586)
+* BFD_RELOC_LARCH_TLS_LE_HI20_R:         howto manager.      (line 3624)
+* BFD_RELOC_LARCH_TLS_LE_LO12:           howto manager.      (line 3587)
+* BFD_RELOC_LARCH_TLS_LE_LO12_R:         howto manager.      (line 3626)
+* BFD_RELOC_LARCH_TLS_TPREL32:           howto manager.      (line 3526)
+* BFD_RELOC_LARCH_TLS_TPREL64:           howto manager.      (line 3527)
+* BFD_RELOC_LM32_16_GOT:                 howto manager.      (line 2666)
+* BFD_RELOC_LM32_BRANCH:                 howto manager.      (line 2665)
+* BFD_RELOC_LM32_CALL:                   howto manager.      (line 2664)
+* BFD_RELOC_LM32_COPY:                   howto manager.      (line 2669)
+* BFD_RELOC_LM32_GLOB_DAT:               howto manager.      (line 2670)
+* BFD_RELOC_LM32_GOTOFF_HI16:            howto manager.      (line 2667)
+* BFD_RELOC_LM32_GOTOFF_LO16:            howto manager.      (line 2668)
+* BFD_RELOC_LM32_JMP_SLOT:               howto manager.      (line 2671)
+* BFD_RELOC_LM32_RELATIVE:               howto manager.      (line 2672)
 * BFD_RELOC_LO10:                        howto manager.      (line  109)
 * BFD_RELOC_LO16:                        howto manager.      (line  319)
 * BFD_RELOC_LO16_BASEREL:                howto manager.      (line   91)
 * BFD_RELOC_LO16_GOTOFF:                 howto manager.      (line   50)
 * BFD_RELOC_LO16_PCREL:                  howto manager.      (line  325)
 * BFD_RELOC_LO16_PLTOFF:                 howto manager.      (line   62)
-* BFD_RELOC_M32C_HI8:                    howto manager.      (line 1230)
-* BFD_RELOC_M32C_RL_1ADDR:               howto manager.      (line 1232)
-* BFD_RELOC_M32C_RL_2ADDR:               howto manager.      (line 1233)
-* BFD_RELOC_M32C_RL_JUMP:                howto manager.      (line 1231)
-* BFD_RELOC_M32R_10_PCREL:               howto manager.      (line 1238)
-* BFD_RELOC_M32R_18_PCREL:               howto manager.      (line 1241)
-* BFD_RELOC_M32R_24:                     howto manager.      (line 1235)
-* BFD_RELOC_M32R_26_PCREL:               howto manager.      (line 1243)
-* BFD_RELOC_M32R_26_PLTREL:              howto manager.      (line 1257)
-* BFD_RELOC_M32R_COPY:                   howto manager.      (line 1258)
-* BFD_RELOC_M32R_GLOB_DAT:               howto manager.      (line 1259)
-* BFD_RELOC_M32R_GOT16_HI_SLO:           howto manager.      (line 1268)
-* BFD_RELOC_M32R_GOT16_HI_ULO:           howto manager.      (line 1267)
-* BFD_RELOC_M32R_GOT16_LO:               howto manager.      (line 1269)
-* BFD_RELOC_M32R_GOT24:                  howto manager.      (line 1256)
-* BFD_RELOC_M32R_GOTOFF:                 howto manager.      (line 1262)
-* BFD_RELOC_M32R_GOTOFF_HI_SLO:          howto manager.      (line 1264)
-* BFD_RELOC_M32R_GOTOFF_HI_ULO:          howto manager.      (line 1263)
-* BFD_RELOC_M32R_GOTOFF_LO:              howto manager.      (line 1265)
-* BFD_RELOC_M32R_GOTPC24:                howto manager.      (line 1266)
-* BFD_RELOC_M32R_GOTPC_HI_SLO:           howto manager.      (line 1271)
-* BFD_RELOC_M32R_GOTPC_HI_ULO:           howto manager.      (line 1270)
-* BFD_RELOC_M32R_GOTPC_LO:               howto manager.      (line 1272)
-* BFD_RELOC_M32R_HI16_SLO:               howto manager.      (line 1248)
-* BFD_RELOC_M32R_HI16_ULO:               howto manager.      (line 1245)
-* BFD_RELOC_M32R_JMP_SLOT:               howto manager.      (line 1260)
-* BFD_RELOC_M32R_LO16:                   howto manager.      (line 1251)
-* BFD_RELOC_M32R_RELATIVE:               howto manager.      (line 1261)
-* BFD_RELOC_M32R_SDA16:                  howto manager.      (line 1253)
-* BFD_RELOC_M68HC11_24:                  howto manager.      (line 2209)
-* BFD_RELOC_M68HC11_3B:                  howto manager.      (line 2189)
-* BFD_RELOC_M68HC11_HI8:                 howto manager.      (line 2183)
-* BFD_RELOC_M68HC11_LO16:                howto manager.      (line 2200)
-* BFD_RELOC_M68HC11_LO8:                 howto manager.      (line 2186)
-* BFD_RELOC_M68HC11_PAGE:                howto manager.      (line 2205)
-* BFD_RELOC_M68HC11_RL_GROUP:            howto manager.      (line 2196)
-* BFD_RELOC_M68HC11_RL_JUMP:             howto manager.      (line 2191)
-* BFD_RELOC_M68HC12_10_PCREL:            howto manager.      (line 2252)
-* BFD_RELOC_M68HC12_16B:                 howto manager.      (line 2248)
-* BFD_RELOC_M68HC12_5B:                  howto manager.      (line 2214)
-* BFD_RELOC_M68HC12_9B:                  howto manager.      (line 2246)
-* BFD_RELOC_M68HC12_9_PCREL:             howto manager.      (line 2250)
-* BFD_RELOC_M68HC12_HI8XG:               howto manager.      (line 2257)
-* BFD_RELOC_M68HC12_LO8XG:               howto manager.      (line 2254)
-* BFD_RELOC_MACH_O_ARM64_ADDEND:         howto manager.      (line 2671)
-* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21: howto manager.     (line 2673)
-* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12: howto manager.  (line 2675)
-* BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT: howto manager.      (line 2677)
-* BFD_RELOC_MACH_O_LOCAL_SECTDIFF:       howto manager.      (line 2646)
-* BFD_RELOC_MACH_O_PAIR:                 howto manager.      (line 2648)
-* BFD_RELOC_MACH_O_SECTDIFF:             howto manager.      (line 2643)
-* BFD_RELOC_MACH_O_SUBTRACTOR32:         howto manager.      (line 2650)
-* BFD_RELOC_MACH_O_SUBTRACTOR64:         howto manager.      (line 2652)
-* BFD_RELOC_MACH_O_X86_64_BRANCH32:      howto manager.      (line 2654)
-* BFD_RELOC_MACH_O_X86_64_BRANCH8:       howto manager.      (line 2655)
-* BFD_RELOC_MACH_O_X86_64_GOT:           howto manager.      (line 2658)
-* BFD_RELOC_MACH_O_X86_64_GOT_LOAD:      howto manager.      (line 2660)
-* BFD_RELOC_MACH_O_X86_64_PCREL32_1:     howto manager.      (line 2663)
-* BFD_RELOC_MACH_O_X86_64_PCREL32_2:     howto manager.      (line 2665)
-* BFD_RELOC_MACH_O_X86_64_PCREL32_4:     howto manager.      (line 2667)
-* BFD_RELOC_MACH_O_X86_64_TLV:           howto manager.      (line 2669)
-* BFD_RELOC_MCORE_PCREL_32:              howto manager.      (line 1627)
-* BFD_RELOC_MCORE_PCREL_IMM11BY2:        howto manager.      (line 1625)
-* BFD_RELOC_MCORE_PCREL_IMM4BY2:         howto manager.      (line 1626)
-* BFD_RELOC_MCORE_PCREL_IMM8BY4:         howto manager.      (line 1624)
-* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2:    howto manager.      (line 1628)
-* BFD_RELOC_MCORE_RVA:                   howto manager.      (line 1629)
-* BFD_RELOC_MEP_16:                      howto manager.      (line 1632)
-* BFD_RELOC_MEP_32:                      howto manager.      (line 1633)
-* BFD_RELOC_MEP_8:                       howto manager.      (line 1631)
-* BFD_RELOC_MEP_ADDR24A4:                howto manager.      (line 1648)
-* BFD_RELOC_MEP_GNU_VTENTRY:             howto manager.      (line 1650)
-* BFD_RELOC_MEP_GNU_VTINHERIT:           howto manager.      (line 1649)
-* BFD_RELOC_MEP_GPREL:                   howto manager.      (line 1642)
-* BFD_RELOC_MEP_HI16S:                   howto manager.      (line 1641)
-* BFD_RELOC_MEP_HI16U:                   howto manager.      (line 1640)
-* BFD_RELOC_MEP_LOW16:                   howto manager.      (line 1639)
-* BFD_RELOC_MEP_PCABS24A2:               howto manager.      (line 1638)
-* BFD_RELOC_MEP_PCREL12A2:               howto manager.      (line 1635)
-* BFD_RELOC_MEP_PCREL17A2:               howto manager.      (line 1636)
-* BFD_RELOC_MEP_PCREL24A2:               howto manager.      (line 1637)
-* BFD_RELOC_MEP_PCREL8A2:                howto manager.      (line 1634)
-* BFD_RELOC_MEP_TPREL:                   howto manager.      (line 1643)
-* BFD_RELOC_MEP_TPREL7:                  howto manager.      (line 1644)
-* BFD_RELOC_MEP_TPREL7A2:                howto manager.      (line 1645)
-* BFD_RELOC_MEP_TPREL7A4:                howto manager.      (line 1646)
-* BFD_RELOC_MEP_UIMM24:                  howto manager.      (line 1647)
-* BFD_RELOC_METAG_COPY:                  howto manager.      (line 1671)
-* BFD_RELOC_METAG_GETSETOFF:             howto manager.      (line 1655)
-* BFD_RELOC_METAG_GETSET_GOT:            howto manager.      (line 1663)
-* BFD_RELOC_METAG_GETSET_GOTOFF:         howto manager.      (line 1662)
-* BFD_RELOC_METAG_GLOB_DAT:              howto manager.      (line 1674)
-* BFD_RELOC_METAG_GOTOFF:                howto manager.      (line 1669)
-* BFD_RELOC_METAG_HI16_GOTOFF:           howto manager.      (line 1660)
-* BFD_RELOC_METAG_HI16_GOTPC:            howto manager.      (line 1664)
-* BFD_RELOC_METAG_HI16_PLT:              howto manager.      (line 1666)
-* BFD_RELOC_METAG_HIADDR16:              howto manager.      (line 1652)
-* BFD_RELOC_METAG_HIOG:                  howto manager.      (line 1656)
-* BFD_RELOC_METAG_JMP_SLOT:              howto manager.      (line 1672)
-* BFD_RELOC_METAG_LO16_GOTOFF:           howto manager.      (line 1661)
-* BFD_RELOC_METAG_LO16_GOTPC:            howto manager.      (line 1665)
-* BFD_RELOC_METAG_LO16_PLT:              howto manager.      (line 1667)
-* BFD_RELOC_METAG_LOADDR16:              howto manager.      (line 1653)
-* BFD_RELOC_METAG_LOOG:                  howto manager.      (line 1657)
-* BFD_RELOC_METAG_PLT:                   howto manager.      (line 1670)
-* BFD_RELOC_METAG_REL16:                 howto manager.      (line 1659)
-* BFD_RELOC_METAG_REL8:                  howto manager.      (line 1658)
-* BFD_RELOC_METAG_RELATIVE:              howto manager.      (line 1673)
-* BFD_RELOC_METAG_RELBRANCH:             howto manager.      (line 1654)
-* BFD_RELOC_METAG_RELBRANCH_PLT:         howto manager.      (line 1668)
-* BFD_RELOC_METAG_TLS_DTPMOD:            howto manager.      (line 1685)
-* BFD_RELOC_METAG_TLS_DTPOFF:            howto manager.      (line 1686)
-* BFD_RELOC_METAG_TLS_GD:                howto manager.      (line 1675)
-* BFD_RELOC_METAG_TLS_IE:                howto manager.      (line 1680)
-* BFD_RELOC_METAG_TLS_IENONPIC:          howto manager.      (line 1681)
-* BFD_RELOC_METAG_TLS_IENONPIC_HI16:     howto manager.      (line 1682)
-* BFD_RELOC_METAG_TLS_IENONPIC_LO16:     howto manager.      (line 1683)
-* BFD_RELOC_METAG_TLS_LDM:               howto manager.      (line 1676)
-* BFD_RELOC_METAG_TLS_LDO:               howto manager.      (line 1679)
-* BFD_RELOC_METAG_TLS_LDO_HI16:          howto manager.      (line 1677)
-* BFD_RELOC_METAG_TLS_LDO_LO16:          howto manager.      (line 1678)
-* BFD_RELOC_METAG_TLS_LE:                howto manager.      (line 1687)
-* BFD_RELOC_METAG_TLS_LE_HI16:           howto manager.      (line 1688)
-* BFD_RELOC_METAG_TLS_LE_LO16:           howto manager.      (line 1689)
-* BFD_RELOC_METAG_TLS_TPOFF:             howto manager.      (line 1684)
-* BFD_RELOC_MICROBLAZE_32_GOTOFF:        howto manager.      (line 2713)
-* BFD_RELOC_MICROBLAZE_32_LO:            howto manager.      (line 2679)
-* BFD_RELOC_MICROBLAZE_32_LO_PCREL:      howto manager.      (line 2682)
-* BFD_RELOC_MICROBLAZE_32_ROSDA:         howto manager.      (line 2685)
-* BFD_RELOC_MICROBLAZE_32_RWSDA:         howto manager.      (line 2688)
-* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM:    howto manager.      (line 2691)
-* BFD_RELOC_MICROBLAZE_32_TLSDTPMOD:     howto manager.      (line 2729)
-* BFD_RELOC_MICROBLAZE_32_TLSDTPREL:     howto manager.      (line 2731)
-* BFD_RELOC_MICROBLAZE_64_GOT:           howto manager.      (line 2702)
-* BFD_RELOC_MICROBLAZE_64_GOTOFF:        howto manager.      (line 2709)
-* BFD_RELOC_MICROBLAZE_64_GOTPC:         howto manager.      (line 2698)
-* BFD_RELOC_MICROBLAZE_64_NONE:          howto manager.      (line 2694)
-* BFD_RELOC_MICROBLAZE_64_PLT:           howto manager.      (line 2705)
-* BFD_RELOC_MICROBLAZE_64_TEXTPCREL:     howto manager.      (line 2742)
-* BFD_RELOC_MICROBLAZE_64_TEXTREL:       howto manager.      (line 2746)
-* BFD_RELOC_MICROBLAZE_64_TLS:           howto manager.      (line 2719)
-* BFD_RELOC_MICROBLAZE_64_TLSDTPREL:     howto manager.      (line 2733)
-* BFD_RELOC_MICROBLAZE_64_TLSGD:         howto manager.      (line 2721)
-* BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL:   howto manager.      (line 2736)
-* BFD_RELOC_MICROBLAZE_64_TLSLD:         howto manager.      (line 2725)
-* BFD_RELOC_MICROBLAZE_64_TLSTPREL:      howto manager.      (line 2739)
-* BFD_RELOC_MICROBLAZE_COPY:             howto manager.      (line 2716)
+* BFD_RELOC_M32C_HI8:                    howto manager.      (line 1245)
+* BFD_RELOC_M32C_RL_1ADDR:               howto manager.      (line 1247)
+* BFD_RELOC_M32C_RL_2ADDR:               howto manager.      (line 1248)
+* BFD_RELOC_M32C_RL_JUMP:                howto manager.      (line 1246)
+* BFD_RELOC_M32R_10_PCREL:               howto manager.      (line 1253)
+* BFD_RELOC_M32R_18_PCREL:               howto manager.      (line 1256)
+* BFD_RELOC_M32R_24:                     howto manager.      (line 1250)
+* BFD_RELOC_M32R_26_PCREL:               howto manager.      (line 1258)
+* BFD_RELOC_M32R_26_PLTREL:              howto manager.      (line 1272)
+* BFD_RELOC_M32R_COPY:                   howto manager.      (line 1273)
+* BFD_RELOC_M32R_GLOB_DAT:               howto manager.      (line 1274)
+* BFD_RELOC_M32R_GOT16_HI_SLO:           howto manager.      (line 1283)
+* BFD_RELOC_M32R_GOT16_HI_ULO:           howto manager.      (line 1282)
+* BFD_RELOC_M32R_GOT16_LO:               howto manager.      (line 1284)
+* BFD_RELOC_M32R_GOT24:                  howto manager.      (line 1271)
+* BFD_RELOC_M32R_GOTOFF:                 howto manager.      (line 1277)
+* BFD_RELOC_M32R_GOTOFF_HI_SLO:          howto manager.      (line 1279)
+* BFD_RELOC_M32R_GOTOFF_HI_ULO:          howto manager.      (line 1278)
+* BFD_RELOC_M32R_GOTOFF_LO:              howto manager.      (line 1280)
+* BFD_RELOC_M32R_GOTPC24:                howto manager.      (line 1281)
+* BFD_RELOC_M32R_GOTPC_HI_SLO:           howto manager.      (line 1286)
+* BFD_RELOC_M32R_GOTPC_HI_ULO:           howto manager.      (line 1285)
+* BFD_RELOC_M32R_GOTPC_LO:               howto manager.      (line 1287)
+* BFD_RELOC_M32R_HI16_SLO:               howto manager.      (line 1263)
+* BFD_RELOC_M32R_HI16_ULO:               howto manager.      (line 1260)
+* BFD_RELOC_M32R_JMP_SLOT:               howto manager.      (line 1275)
+* BFD_RELOC_M32R_LO16:                   howto manager.      (line 1266)
+* BFD_RELOC_M32R_RELATIVE:               howto manager.      (line 1276)
+* BFD_RELOC_M32R_SDA16:                  howto manager.      (line 1268)
+* BFD_RELOC_M68HC11_24:                  howto manager.      (line 2211)
+* BFD_RELOC_M68HC11_3B:                  howto manager.      (line 2191)
+* BFD_RELOC_M68HC11_HI8:                 howto manager.      (line 2185)
+* BFD_RELOC_M68HC11_LO16:                howto manager.      (line 2202)
+* BFD_RELOC_M68HC11_LO8:                 howto manager.      (line 2188)
+* BFD_RELOC_M68HC11_PAGE:                howto manager.      (line 2207)
+* BFD_RELOC_M68HC11_RL_GROUP:            howto manager.      (line 2198)
+* BFD_RELOC_M68HC11_RL_JUMP:             howto manager.      (line 2193)
+* BFD_RELOC_M68HC12_10_PCREL:            howto manager.      (line 2254)
+* BFD_RELOC_M68HC12_16B:                 howto manager.      (line 2250)
+* BFD_RELOC_M68HC12_5B:                  howto manager.      (line 2216)
+* BFD_RELOC_M68HC12_9B:                  howto manager.      (line 2248)
+* BFD_RELOC_M68HC12_9_PCREL:             howto manager.      (line 2252)
+* BFD_RELOC_M68HC12_HI8XG:               howto manager.      (line 2259)
+* BFD_RELOC_M68HC12_LO8XG:               howto manager.      (line 2256)
+* BFD_RELOC_MACH_O_ARM64_ADDEND:         howto manager.      (line 2702)
+* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21: howto manager.     (line 2704)
+* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12: howto manager.  (line 2706)
+* BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT: howto manager.      (line 2708)
+* BFD_RELOC_MACH_O_LOCAL_SECTDIFF:       howto manager.      (line 2677)
+* BFD_RELOC_MACH_O_PAIR:                 howto manager.      (line 2679)
+* BFD_RELOC_MACH_O_SECTDIFF:             howto manager.      (line 2674)
+* BFD_RELOC_MACH_O_SUBTRACTOR32:         howto manager.      (line 2681)
+* BFD_RELOC_MACH_O_SUBTRACTOR64:         howto manager.      (line 2683)
+* BFD_RELOC_MACH_O_X86_64_BRANCH32:      howto manager.      (line 2685)
+* BFD_RELOC_MACH_O_X86_64_BRANCH8:       howto manager.      (line 2686)
+* BFD_RELOC_MACH_O_X86_64_GOT:           howto manager.      (line 2689)
+* BFD_RELOC_MACH_O_X86_64_GOT_LOAD:      howto manager.      (line 2691)
+* BFD_RELOC_MACH_O_X86_64_PCREL32_1:     howto manager.      (line 2694)
+* BFD_RELOC_MACH_O_X86_64_PCREL32_2:     howto manager.      (line 2696)
+* BFD_RELOC_MACH_O_X86_64_PCREL32_4:     howto manager.      (line 2698)
+* BFD_RELOC_MACH_O_X86_64_TLV:           howto manager.      (line 2700)
+* BFD_RELOC_MCORE_PCREL_32:              howto manager.      (line 1632)
+* BFD_RELOC_MCORE_PCREL_IMM11BY2:        howto manager.      (line 1630)
+* BFD_RELOC_MCORE_PCREL_IMM4BY2:         howto manager.      (line 1631)
+* BFD_RELOC_MCORE_PCREL_IMM8BY4:         howto manager.      (line 1629)
+* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2:    howto manager.      (line 1633)
+* BFD_RELOC_MCORE_RVA:                   howto manager.      (line 1634)
+* BFD_RELOC_MEP_16:                      howto manager.      (line 1637)
+* BFD_RELOC_MEP_32:                      howto manager.      (line 1638)
+* BFD_RELOC_MEP_8:                       howto manager.      (line 1636)
+* BFD_RELOC_MEP_ADDR24A4:                howto manager.      (line 1653)
+* BFD_RELOC_MEP_GNU_VTENTRY:             howto manager.      (line 1655)
+* BFD_RELOC_MEP_GNU_VTINHERIT:           howto manager.      (line 1654)
+* BFD_RELOC_MEP_GPREL:                   howto manager.      (line 1647)
+* BFD_RELOC_MEP_HI16S:                   howto manager.      (line 1646)
+* BFD_RELOC_MEP_HI16U:                   howto manager.      (line 1645)
+* BFD_RELOC_MEP_LOW16:                   howto manager.      (line 1644)
+* BFD_RELOC_MEP_PCABS24A2:               howto manager.      (line 1643)
+* BFD_RELOC_MEP_PCREL12A2:               howto manager.      (line 1640)
+* BFD_RELOC_MEP_PCREL17A2:               howto manager.      (line 1641)
+* BFD_RELOC_MEP_PCREL24A2:               howto manager.      (line 1642)
+* BFD_RELOC_MEP_PCREL8A2:                howto manager.      (line 1639)
+* BFD_RELOC_MEP_TPREL:                   howto manager.      (line 1648)
+* BFD_RELOC_MEP_TPREL7:                  howto manager.      (line 1649)
+* BFD_RELOC_MEP_TPREL7A2:                howto manager.      (line 1650)
+* BFD_RELOC_MEP_TPREL7A4:                howto manager.      (line 1651)
+* BFD_RELOC_MEP_UIMM24:                  howto manager.      (line 1652)
+* BFD_RELOC_METAG_COPY:                  howto manager.      (line 1676)
+* BFD_RELOC_METAG_GETSETOFF:             howto manager.      (line 1660)
+* BFD_RELOC_METAG_GETSET_GOT:            howto manager.      (line 1668)
+* BFD_RELOC_METAG_GETSET_GOTOFF:         howto manager.      (line 1667)
+* BFD_RELOC_METAG_GLOB_DAT:              howto manager.      (line 1679)
+* BFD_RELOC_METAG_GOTOFF:                howto manager.      (line 1674)
+* BFD_RELOC_METAG_HI16_GOTOFF:           howto manager.      (line 1665)
+* BFD_RELOC_METAG_HI16_GOTPC:            howto manager.      (line 1669)
+* BFD_RELOC_METAG_HI16_PLT:              howto manager.      (line 1671)
+* BFD_RELOC_METAG_HIADDR16:              howto manager.      (line 1657)
+* BFD_RELOC_METAG_HIOG:                  howto manager.      (line 1661)
+* BFD_RELOC_METAG_JMP_SLOT:              howto manager.      (line 1677)
+* BFD_RELOC_METAG_LO16_GOTOFF:           howto manager.      (line 1666)
+* BFD_RELOC_METAG_LO16_GOTPC:            howto manager.      (line 1670)
+* BFD_RELOC_METAG_LO16_PLT:              howto manager.      (line 1672)
+* BFD_RELOC_METAG_LOADDR16:              howto manager.      (line 1658)
+* BFD_RELOC_METAG_LOOG:                  howto manager.      (line 1662)
+* BFD_RELOC_METAG_PLT:                   howto manager.      (line 1675)
+* BFD_RELOC_METAG_REL16:                 howto manager.      (line 1664)
+* BFD_RELOC_METAG_REL8:                  howto manager.      (line 1663)
+* BFD_RELOC_METAG_RELATIVE:              howto manager.      (line 1678)
+* BFD_RELOC_METAG_RELBRANCH:             howto manager.      (line 1659)
+* BFD_RELOC_METAG_RELBRANCH_PLT:         howto manager.      (line 1673)
+* BFD_RELOC_METAG_TLS_DTPMOD:            howto manager.      (line 1690)
+* BFD_RELOC_METAG_TLS_DTPOFF:            howto manager.      (line 1691)
+* BFD_RELOC_METAG_TLS_GD:                howto manager.      (line 1680)
+* BFD_RELOC_METAG_TLS_IE:                howto manager.      (line 1685)
+* BFD_RELOC_METAG_TLS_IENONPIC:          howto manager.      (line 1686)
+* BFD_RELOC_METAG_TLS_IENONPIC_HI16:     howto manager.      (line 1687)
+* BFD_RELOC_METAG_TLS_IENONPIC_LO16:     howto manager.      (line 1688)
+* BFD_RELOC_METAG_TLS_LDM:               howto manager.      (line 1681)
+* BFD_RELOC_METAG_TLS_LDO:               howto manager.      (line 1684)
+* BFD_RELOC_METAG_TLS_LDO_HI16:          howto manager.      (line 1682)
+* BFD_RELOC_METAG_TLS_LDO_LO16:          howto manager.      (line 1683)
+* BFD_RELOC_METAG_TLS_LE:                howto manager.      (line 1692)
+* BFD_RELOC_METAG_TLS_LE_HI16:           howto manager.      (line 1693)
+* BFD_RELOC_METAG_TLS_LE_LO16:           howto manager.      (line 1694)
+* BFD_RELOC_METAG_TLS_TPOFF:             howto manager.      (line 1689)
+* BFD_RELOC_MICROBLAZE_32_GOTOFF:        howto manager.      (line 2748)
+* BFD_RELOC_MICROBLAZE_32_LO:            howto manager.      (line 2710)
+* BFD_RELOC_MICROBLAZE_32_LO_PCREL:      howto manager.      (line 2713)
+* BFD_RELOC_MICROBLAZE_32_NONE:          howto manager.      (line 2725)
+* BFD_RELOC_MICROBLAZE_32_ROSDA:         howto manager.      (line 2716)
+* BFD_RELOC_MICROBLAZE_32_RWSDA:         howto manager.      (line 2719)
+* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM:    howto manager.      (line 2722)
+* BFD_RELOC_MICROBLAZE_32_TLSDTPMOD:     howto manager.      (line 2765)
+* BFD_RELOC_MICROBLAZE_32_TLSDTPREL:     howto manager.      (line 2767)
+* BFD_RELOC_MICROBLAZE_64_GOT:           howto manager.      (line 2737)
+* BFD_RELOC_MICROBLAZE_64_GOTOFF:        howto manager.      (line 2744)
+* BFD_RELOC_MICROBLAZE_64_GOTPC:         howto manager.      (line 2733)
+* BFD_RELOC_MICROBLAZE_64_NONE:          howto manager.      (line 2729)
+* BFD_RELOC_MICROBLAZE_64_PLT:           howto manager.      (line 2740)
+* BFD_RELOC_MICROBLAZE_64_TEXTPCREL:     howto manager.      (line 2778)
+* BFD_RELOC_MICROBLAZE_64_TEXTREL:       howto manager.      (line 2782)
+* BFD_RELOC_MICROBLAZE_64_TLS:           howto manager.      (line 2755)
+* BFD_RELOC_MICROBLAZE_64_TLSDTPREL:     howto manager.      (line 2769)
+* BFD_RELOC_MICROBLAZE_64_TLSGD:         howto manager.      (line 2757)
+* BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL:   howto manager.      (line 2772)
+* BFD_RELOC_MICROBLAZE_64_TLSLD:         howto manager.      (line 2761)
+* BFD_RELOC_MICROBLAZE_64_TLSTPREL:      howto manager.      (line 2775)
+* BFD_RELOC_MICROBLAZE_COPY:             howto manager.      (line 2752)
 * BFD_RELOC_MICROMIPS_10_PCREL_S1:       howto manager.      (line  352)
 * BFD_RELOC_MICROMIPS_16_PCREL_S1:       howto manager.      (line  353)
 * BFD_RELOC_MICROMIPS_7_PCREL_S1:        howto manager.      (line  351)
@@ -13348,6 +13338,7 @@ BFD Index
 * BFD_RELOC_MIPS16_TLS_LDM:              howto manager.      (line  341)
 * BFD_RELOC_MIPS16_TLS_TPREL_HI16:       howto manager.      (line  345)
 * BFD_RELOC_MIPS16_TLS_TPREL_LO16:       howto manager.      (line  346)
+* BFD_RELOC_MIPS_16:                     howto manager.      (line  398)
 * BFD_RELOC_MIPS_18_PCREL_S3:            howto manager.      (line  359)
 * BFD_RELOC_MIPS_19_PCREL_S2:            howto manager.      (line  360)
 * BFD_RELOC_MIPS_21_PCREL_S2:            howto manager.      (line  357)
@@ -13372,7 +13363,6 @@ BFD Index
 * BFD_RELOC_MIPS_JMP:                    howto manager.      (line  305)
 * BFD_RELOC_MIPS_JUMP_SLOT:              howto manager.      (line  425)
 * BFD_RELOC_MIPS_LITERAL:                howto manager.      (line  348)
-* BFD_RELOC_MIPS_REL16:                  howto manager.      (line  398)
 * BFD_RELOC_MIPS_RELGOT:                 howto manager.      (line  399)
 * BFD_RELOC_MIPS_SCN_DISP:               howto manager.      (line  396)
 * BFD_RELOC_MIPS_SHIFT5:                 howto manager.      (line  387)
@@ -13391,30 +13381,30 @@ BFD Index
 * BFD_RELOC_MIPS_TLS_TPREL64:            howto manager.      (line  417)
 * BFD_RELOC_MIPS_TLS_TPREL_HI16:         howto manager.      (line  418)
 * BFD_RELOC_MIPS_TLS_TPREL_LO16:         howto manager.      (line  420)
-* BFD_RELOC_MMIX_ADDR19:                 howto manager.      (line 1713)
-* BFD_RELOC_MMIX_ADDR27:                 howto manager.      (line 1716)
-* BFD_RELOC_MMIX_BASE_PLUS_OFFSET:       howto manager.      (line 1725)
-* BFD_RELOC_MMIX_CBRANCH:                howto manager.      (line 1696)
-* BFD_RELOC_MMIX_CBRANCH_1:              howto manager.      (line 1698)
-* BFD_RELOC_MMIX_CBRANCH_2:              howto manager.      (line 1699)
-* BFD_RELOC_MMIX_CBRANCH_3:              howto manager.      (line 1700)
-* BFD_RELOC_MMIX_CBRANCH_J:              howto manager.      (line 1697)
-* BFD_RELOC_MMIX_GETA:                   howto manager.      (line 1691)
-* BFD_RELOC_MMIX_GETA_1:                 howto manager.      (line 1692)
-* BFD_RELOC_MMIX_GETA_2:                 howto manager.      (line 1693)
-* BFD_RELOC_MMIX_GETA_3:                 howto manager.      (line 1694)
-* BFD_RELOC_MMIX_JMP:                    howto manager.      (line 1708)
-* BFD_RELOC_MMIX_JMP_1:                  howto manager.      (line 1709)
-* BFD_RELOC_MMIX_JMP_2:                  howto manager.      (line 1710)
-* BFD_RELOC_MMIX_JMP_3:                  howto manager.      (line 1711)
-* BFD_RELOC_MMIX_LOCAL:                  howto manager.      (line 1728)
-* BFD_RELOC_MMIX_PUSHJ:                  howto manager.      (line 1702)
-* BFD_RELOC_MMIX_PUSHJ_1:                howto manager.      (line 1703)
-* BFD_RELOC_MMIX_PUSHJ_2:                howto manager.      (line 1704)
-* BFD_RELOC_MMIX_PUSHJ_3:                howto manager.      (line 1705)
-* BFD_RELOC_MMIX_PUSHJ_STUBBABLE:        howto manager.      (line 1706)
-* BFD_RELOC_MMIX_REG:                    howto manager.      (line 1722)
-* BFD_RELOC_MMIX_REG_OR_BYTE:            howto manager.      (line 1719)
+* BFD_RELOC_MMIX_ADDR19:                 howto manager.      (line 1718)
+* BFD_RELOC_MMIX_ADDR27:                 howto manager.      (line 1721)
+* BFD_RELOC_MMIX_BASE_PLUS_OFFSET:       howto manager.      (line 1730)
+* BFD_RELOC_MMIX_CBRANCH:                howto manager.      (line 1701)
+* BFD_RELOC_MMIX_CBRANCH_1:              howto manager.      (line 1703)
+* BFD_RELOC_MMIX_CBRANCH_2:              howto manager.      (line 1704)
+* BFD_RELOC_MMIX_CBRANCH_3:              howto manager.      (line 1705)
+* BFD_RELOC_MMIX_CBRANCH_J:              howto manager.      (line 1702)
+* BFD_RELOC_MMIX_GETA:                   howto manager.      (line 1696)
+* BFD_RELOC_MMIX_GETA_1:                 howto manager.      (line 1697)
+* BFD_RELOC_MMIX_GETA_2:                 howto manager.      (line 1698)
+* BFD_RELOC_MMIX_GETA_3:                 howto manager.      (line 1699)
+* BFD_RELOC_MMIX_JMP:                    howto manager.      (line 1713)
+* BFD_RELOC_MMIX_JMP_1:                  howto manager.      (line 1714)
+* BFD_RELOC_MMIX_JMP_2:                  howto manager.      (line 1715)
+* BFD_RELOC_MMIX_JMP_3:                  howto manager.      (line 1716)
+* BFD_RELOC_MMIX_LOCAL:                  howto manager.      (line 1733)
+* BFD_RELOC_MMIX_PUSHJ:                  howto manager.      (line 1707)
+* BFD_RELOC_MMIX_PUSHJ_1:                howto manager.      (line 1708)
+* BFD_RELOC_MMIX_PUSHJ_2:                howto manager.      (line 1709)
+* BFD_RELOC_MMIX_PUSHJ_3:                howto manager.      (line 1710)
+* BFD_RELOC_MMIX_PUSHJ_STUBBABLE:        howto manager.      (line 1711)
+* BFD_RELOC_MMIX_REG:                    howto manager.      (line 1727)
+* BFD_RELOC_MMIX_REG_OR_BYTE:            howto manager.      (line 1724)
 * BFD_RELOC_MN10300_16_PCREL:            howto manager.      (line  518)
 * BFD_RELOC_MN10300_32_PCREL:            howto manager.      (line  515)
 * BFD_RELOC_MN10300_ALIGN:               howto manager.      (line  502)
@@ -13437,165 +13427,167 @@ BFD Index
 * BFD_RELOC_MN10300_TLS_LE:              howto manager.      (line  510)
 * BFD_RELOC_MN10300_TLS_TPOFF:           howto manager.      (line  513)
 * BFD_RELOC_MOXIE_10_PCREL:              howto manager.      (line  427)
-* BFD_RELOC_MSP430X_ABS16:               howto manager.      (line 2457)
-* BFD_RELOC_MSP430X_ABS20_ADR_DST:       howto manager.      (line 2454)
-* BFD_RELOC_MSP430X_ABS20_ADR_SRC:       howto manager.      (line 2453)
-* BFD_RELOC_MSP430X_ABS20_EXT_DST:       howto manager.      (line 2451)
-* BFD_RELOC_MSP430X_ABS20_EXT_ODST:      howto manager.      (line 2452)
-* BFD_RELOC_MSP430X_ABS20_EXT_SRC:       howto manager.      (line 2450)
-* BFD_RELOC_MSP430X_PCR16:               howto manager.      (line 2455)
-* BFD_RELOC_MSP430X_PCR20_CALL:          howto manager.      (line 2456)
-* BFD_RELOC_MSP430X_PCR20_EXT_DST:       howto manager.      (line 2448)
-* BFD_RELOC_MSP430X_PCR20_EXT_ODST:      howto manager.      (line 2449)
-* BFD_RELOC_MSP430X_PCR20_EXT_SRC:       howto manager.      (line 2447)
-* BFD_RELOC_MSP430_10_PCREL:             howto manager.      (line 2439)
-* BFD_RELOC_MSP430_16:                   howto manager.      (line 2441)
-* BFD_RELOC_MSP430_16_BYTE:              howto manager.      (line 2443)
-* BFD_RELOC_MSP430_16_PCREL:             howto manager.      (line 2440)
-* BFD_RELOC_MSP430_16_PCREL_BYTE:        howto manager.      (line 2442)
-* BFD_RELOC_MSP430_2X_PCREL:             howto manager.      (line 2444)
-* BFD_RELOC_MSP430_ABS8:                 howto manager.      (line 2446)
-* BFD_RELOC_MSP430_ABS_HI16:             howto manager.      (line 2458)
-* BFD_RELOC_MSP430_PREL31:               howto manager.      (line 2459)
-* BFD_RELOC_MSP430_RL_PCREL:             howto manager.      (line 2445)
-* BFD_RELOC_MSP430_SYM_DIFF:             howto manager.      (line 2460)
-* BFD_RELOC_MT_GNU_VTENTRY:              howto manager.      (line 2435)
-* BFD_RELOC_MT_GNU_VTINHERIT:            howto manager.      (line 2433)
-* BFD_RELOC_MT_HI16:                     howto manager.      (line 2429)
-* BFD_RELOC_MT_LO16:                     howto manager.      (line 2431)
-* BFD_RELOC_MT_PC16:                     howto manager.      (line 2427)
-* BFD_RELOC_MT_PCINSN8:                  howto manager.      (line 2437)
-* BFD_RELOC_NDS32_10IFCU_PCREL:          howto manager.      (line 1424)
-* BFD_RELOC_NDS32_10_UPCREL:             howto manager.      (line 1395)
-* BFD_RELOC_NDS32_15_FIXED:              howto manager.      (line 1356)
-* BFD_RELOC_NDS32_15_PCREL:              howto manager.      (line 1282)
-* BFD_RELOC_NDS32_17IFC_PCREL:           howto manager.      (line 1423)
-* BFD_RELOC_NDS32_17_FIXED:              howto manager.      (line 1357)
-* BFD_RELOC_NDS32_17_PCREL:              howto manager.      (line 1284)
-* BFD_RELOC_NDS32_20:                    howto manager.      (line 1274)
-* BFD_RELOC_NDS32_25_ABS:                howto manager.      (line 1419)
-* BFD_RELOC_NDS32_25_FIXED:              howto manager.      (line 1358)
-* BFD_RELOC_NDS32_25_PCREL:              howto manager.      (line 1286)
-* BFD_RELOC_NDS32_25_PLTREL:             howto manager.      (line 1332)
-* BFD_RELOC_NDS32_5:                     howto manager.      (line 1393)
-* BFD_RELOC_NDS32_9_FIXED:               howto manager.      (line 1355)
-* BFD_RELOC_NDS32_9_PCREL:               howto manager.      (line 1276)
-* BFD_RELOC_NDS32_9_PLTREL:              howto manager.      (line 1331)
-* BFD_RELOC_NDS32_COPY:                  howto manager.      (line 1333)
-* BFD_RELOC_NDS32_DATA:                  howto manager.      (line 1421)
-* BFD_RELOC_NDS32_DIFF16:                howto manager.      (line 1414)
-* BFD_RELOC_NDS32_DIFF32:                howto manager.      (line 1415)
-* BFD_RELOC_NDS32_DIFF8:                 howto manager.      (line 1413)
-* BFD_RELOC_NDS32_DIFF_ULEB128:          howto manager.      (line 1416)
-* BFD_RELOC_NDS32_DWARF2_LEB:            howto manager.      (line 1379)
-* BFD_RELOC_NDS32_DWARF2_OP1:            howto manager.      (line 1377)
-* BFD_RELOC_NDS32_DWARF2_OP2:            howto manager.      (line 1378)
-* BFD_RELOC_NDS32_EMPTY:                 howto manager.      (line 1417)
-* BFD_RELOC_NDS32_GLOB_DAT:              howto manager.      (line 1334)
-* BFD_RELOC_NDS32_GOT15S2:               howto manager.      (line 1390)
-* BFD_RELOC_NDS32_GOT17S2:               howto manager.      (line 1391)
-* BFD_RELOC_NDS32_GOT20:                 howto manager.      (line 1330)
-* BFD_RELOC_NDS32_GOTOFF:                howto manager.      (line 1337)
-* BFD_RELOC_NDS32_GOTOFF_HI20:           howto manager.      (line 1338)
-* BFD_RELOC_NDS32_GOTOFF_LO12:           howto manager.      (line 1339)
-* BFD_RELOC_NDS32_GOTOFF_LO15:           howto manager.      (line 1388)
-* BFD_RELOC_NDS32_GOTOFF_LO19:           howto manager.      (line 1389)
-* BFD_RELOC_NDS32_GOTOFF_SUFF:           howto manager.      (line 1402)
-* BFD_RELOC_NDS32_GOTPC20:               howto manager.      (line 1340)
-* BFD_RELOC_NDS32_GOTPC_HI20:            howto manager.      (line 1343)
-* BFD_RELOC_NDS32_GOTPC_LO12:            howto manager.      (line 1344)
-* BFD_RELOC_NDS32_GOTTPOFF:              howto manager.      (line 1427)
-* BFD_RELOC_NDS32_GOT_HI20:              howto manager.      (line 1341)
-* BFD_RELOC_NDS32_GOT_LO12:              howto manager.      (line 1342)
-* BFD_RELOC_NDS32_GOT_LO15:              howto manager.      (line 1386)
-* BFD_RELOC_NDS32_GOT_LO19:              howto manager.      (line 1387)
-* BFD_RELOC_NDS32_GOT_SUFF:              howto manager.      (line 1401)
-* BFD_RELOC_NDS32_GROUP:                 howto manager.      (line 1453)
-* BFD_RELOC_NDS32_HI20:                  howto manager.      (line 1288)
-* BFD_RELOC_NDS32_INSN16:                howto manager.      (line 1346)
-* BFD_RELOC_NDS32_JMP_SLOT:              howto manager.      (line 1335)
-* BFD_RELOC_NDS32_LABEL:                 howto manager.      (line 1347)
-* BFD_RELOC_NDS32_LO12S0:                howto manager.      (line 1300)
-* BFD_RELOC_NDS32_LO12S0_ORI:            howto manager.      (line 1303)
-* BFD_RELOC_NDS32_LO12S1:                howto manager.      (line 1297)
-* BFD_RELOC_NDS32_LO12S2:                howto manager.      (line 1294)
-* BFD_RELOC_NDS32_LO12S2_DP:             howto manager.      (line 1374)
-* BFD_RELOC_NDS32_LO12S2_SP:             howto manager.      (line 1375)
-* BFD_RELOC_NDS32_LO12S3:                howto manager.      (line 1291)
-* BFD_RELOC_NDS32_LOADSTORE:             howto manager.      (line 1354)
-* BFD_RELOC_NDS32_LONGCALL1:             howto manager.      (line 1348)
-* BFD_RELOC_NDS32_LONGCALL2:             howto manager.      (line 1349)
-* BFD_RELOC_NDS32_LONGCALL3:             howto manager.      (line 1350)
-* BFD_RELOC_NDS32_LONGCALL4:             howto manager.      (line 1359)
-* BFD_RELOC_NDS32_LONGCALL5:             howto manager.      (line 1360)
-* BFD_RELOC_NDS32_LONGCALL6:             howto manager.      (line 1361)
-* BFD_RELOC_NDS32_LONGJUMP1:             howto manager.      (line 1351)
-* BFD_RELOC_NDS32_LONGJUMP2:             howto manager.      (line 1352)
-* BFD_RELOC_NDS32_LONGJUMP3:             howto manager.      (line 1353)
-* BFD_RELOC_NDS32_LONGJUMP4:             howto manager.      (line 1362)
-* BFD_RELOC_NDS32_LONGJUMP5:             howto manager.      (line 1363)
-* BFD_RELOC_NDS32_LONGJUMP6:             howto manager.      (line 1364)
-* BFD_RELOC_NDS32_LONGJUMP7:             howto manager.      (line 1365)
-* BFD_RELOC_NDS32_LSI:                   howto manager.      (line 1455)
-* BFD_RELOC_NDS32_MINUEND:               howto manager.      (line 1411)
-* BFD_RELOC_NDS32_MULCALL_SUFF:          howto manager.      (line 1404)
-* BFD_RELOC_NDS32_PLTBLOCK:              howto manager.      (line 1408)
-* BFD_RELOC_NDS32_PLTREL_HI20:           howto manager.      (line 1367)
-* BFD_RELOC_NDS32_PLTREL_LO12:           howto manager.      (line 1368)
-* BFD_RELOC_NDS32_PLT_GOTREL_HI20:       howto manager.      (line 1369)
-* BFD_RELOC_NDS32_PLT_GOTREL_LO12:       howto manager.      (line 1370)
-* BFD_RELOC_NDS32_PLT_GOTREL_LO15:       howto manager.      (line 1384)
-* BFD_RELOC_NDS32_PLT_GOTREL_LO19:       howto manager.      (line 1385)
-* BFD_RELOC_NDS32_PLT_GOTREL_LO20:       howto manager.      (line 1383)
-* BFD_RELOC_NDS32_PLT_GOT_SUFF:          howto manager.      (line 1403)
-* BFD_RELOC_NDS32_PTR:                   howto manager.      (line 1405)
-* BFD_RELOC_NDS32_PTR_COUNT:             howto manager.      (line 1406)
-* BFD_RELOC_NDS32_PTR_RESOLVED:          howto manager.      (line 1407)
-* BFD_RELOC_NDS32_RELATIVE:              howto manager.      (line 1336)
-* BFD_RELOC_NDS32_RELAX_ENTRY:           howto manager.      (line 1400)
-* BFD_RELOC_NDS32_RELAX_REGION_BEGIN:    howto manager.      (line 1409)
-* BFD_RELOC_NDS32_RELAX_REGION_END:      howto manager.      (line 1410)
-* BFD_RELOC_NDS32_REMOVE:                howto manager.      (line 1452)
-* BFD_RELOC_NDS32_SDA12S2_DP:            howto manager.      (line 1372)
-* BFD_RELOC_NDS32_SDA12S2_SP:            howto manager.      (line 1373)
-* BFD_RELOC_NDS32_SDA15S0:               howto manager.      (line 1315)
-* BFD_RELOC_NDS32_SDA15S1:               howto manager.      (line 1312)
-* BFD_RELOC_NDS32_SDA15S2:               howto manager.      (line 1309)
-* BFD_RELOC_NDS32_SDA15S3:               howto manager.      (line 1306)
-* BFD_RELOC_NDS32_SDA16S3:               howto manager.      (line 1318)
-* BFD_RELOC_NDS32_SDA17S2:               howto manager.      (line 1321)
-* BFD_RELOC_NDS32_SDA18S1:               howto manager.      (line 1324)
-* BFD_RELOC_NDS32_SDA19S0:               howto manager.      (line 1327)
-* BFD_RELOC_NDS32_SDA_FP7U2_RELA:        howto manager.      (line 1398)
-* BFD_RELOC_NDS32_SUBTRAHEND:            howto manager.      (line 1412)
-* BFD_RELOC_NDS32_TLS_DESC:              howto manager.      (line 1443)
-* BFD_RELOC_NDS32_TLS_DESC_20:           howto manager.      (line 1446)
-* BFD_RELOC_NDS32_TLS_DESC_ADD:          howto manager.      (line 1448)
-* BFD_RELOC_NDS32_TLS_DESC_CALL:         howto manager.      (line 1450)
-* BFD_RELOC_NDS32_TLS_DESC_FUNC:         howto manager.      (line 1449)
-* BFD_RELOC_NDS32_TLS_DESC_HI20:         howto manager.      (line 1444)
-* BFD_RELOC_NDS32_TLS_DESC_LO12:         howto manager.      (line 1445)
-* BFD_RELOC_NDS32_TLS_DESC_MEM:          howto manager.      (line 1451)
-* BFD_RELOC_NDS32_TLS_DESC_SDA17S2:      howto manager.      (line 1447)
-* BFD_RELOC_NDS32_TLS_IEGP_HI20:         howto manager.      (line 1439)
-* BFD_RELOC_NDS32_TLS_IEGP_LO12:         howto manager.      (line 1440)
-* BFD_RELOC_NDS32_TLS_IEGP_LO12S2:       howto manager.      (line 1441)
-* BFD_RELOC_NDS32_TLS_IEGP_LW:           howto manager.      (line 1442)
-* BFD_RELOC_NDS32_TLS_IE_HI20:           howto manager.      (line 1436)
-* BFD_RELOC_NDS32_TLS_IE_LO12:           howto manager.      (line 1437)
-* BFD_RELOC_NDS32_TLS_IE_LO12S2:         howto manager.      (line 1438)
-* BFD_RELOC_NDS32_TLS_LE_15S0:           howto manager.      (line 1431)
-* BFD_RELOC_NDS32_TLS_LE_15S1:           howto manager.      (line 1432)
-* BFD_RELOC_NDS32_TLS_LE_15S2:           howto manager.      (line 1433)
-* BFD_RELOC_NDS32_TLS_LE_20:             howto manager.      (line 1430)
-* BFD_RELOC_NDS32_TLS_LE_ADD:            howto manager.      (line 1434)
-* BFD_RELOC_NDS32_TLS_LE_HI20:           howto manager.      (line 1428)
-* BFD_RELOC_NDS32_TLS_LE_LO12:           howto manager.      (line 1429)
-* BFD_RELOC_NDS32_TLS_LE_LS:             howto manager.      (line 1435)
-* BFD_RELOC_NDS32_TPOFF:                 howto manager.      (line 1426)
-* BFD_RELOC_NDS32_TRAN:                  howto manager.      (line 1422)
-* BFD_RELOC_NDS32_UPDATE_TA:             howto manager.      (line 1381)
-* BFD_RELOC_NDS32_WORD_9_PCREL:          howto manager.      (line 1279)
+* BFD_RELOC_MSP430X_ABS16:               howto manager.      (line 2455)
+* BFD_RELOC_MSP430X_ABS20_ADR_DST:       howto manager.      (line 2452)
+* BFD_RELOC_MSP430X_ABS20_ADR_SRC:       howto manager.      (line 2451)
+* BFD_RELOC_MSP430X_ABS20_EXT_DST:       howto manager.      (line 2449)
+* BFD_RELOC_MSP430X_ABS20_EXT_ODST:      howto manager.      (line 2450)
+* BFD_RELOC_MSP430X_ABS20_EXT_SRC:       howto manager.      (line 2448)
+* BFD_RELOC_MSP430X_PCR16:               howto manager.      (line 2453)
+* BFD_RELOC_MSP430X_PCR20_CALL:          howto manager.      (line 2454)
+* BFD_RELOC_MSP430X_PCR20_EXT_DST:       howto manager.      (line 2446)
+* BFD_RELOC_MSP430X_PCR20_EXT_ODST:      howto manager.      (line 2447)
+* BFD_RELOC_MSP430X_PCR20_EXT_SRC:       howto manager.      (line 2445)
+* BFD_RELOC_MSP430_10_PCREL:             howto manager.      (line 2437)
+* BFD_RELOC_MSP430_16:                   howto manager.      (line 2439)
+* BFD_RELOC_MSP430_16_BYTE:              howto manager.      (line 2441)
+* BFD_RELOC_MSP430_16_PCREL:             howto manager.      (line 2438)
+* BFD_RELOC_MSP430_16_PCREL_BYTE:        howto manager.      (line 2440)
+* BFD_RELOC_MSP430_2X_PCREL:             howto manager.      (line 2442)
+* BFD_RELOC_MSP430_ABS8:                 howto manager.      (line 2444)
+* BFD_RELOC_MSP430_ABS_HI16:             howto manager.      (line 2456)
+* BFD_RELOC_MSP430_PREL31:               howto manager.      (line 2457)
+* BFD_RELOC_MSP430_RL_PCREL:             howto manager.      (line 2443)
+* BFD_RELOC_MSP430_SET_ULEB128:          howto manager.      (line 2459)
+* BFD_RELOC_MSP430_SUB_ULEB128:          howto manager.      (line 2460)
+* BFD_RELOC_MSP430_SYM_DIFF:             howto manager.      (line 2458)
+* BFD_RELOC_MT_GNU_VTENTRY:              howto manager.      (line 2433)
+* BFD_RELOC_MT_GNU_VTINHERIT:            howto manager.      (line 2431)
+* BFD_RELOC_MT_HI16:                     howto manager.      (line 2427)
+* BFD_RELOC_MT_LO16:                     howto manager.      (line 2429)
+* BFD_RELOC_MT_PC16:                     howto manager.      (line 2425)
+* BFD_RELOC_MT_PCINSN8:                  howto manager.      (line 2435)
+* BFD_RELOC_NDS32_10IFCU_PCREL:          howto manager.      (line 1439)
+* BFD_RELOC_NDS32_10_UPCREL:             howto manager.      (line 1410)
+* BFD_RELOC_NDS32_15_FIXED:              howto manager.      (line 1371)
+* BFD_RELOC_NDS32_15_PCREL:              howto manager.      (line 1297)
+* BFD_RELOC_NDS32_17IFC_PCREL:           howto manager.      (line 1438)
+* BFD_RELOC_NDS32_17_FIXED:              howto manager.      (line 1372)
+* BFD_RELOC_NDS32_17_PCREL:              howto manager.      (line 1299)
+* BFD_RELOC_NDS32_20:                    howto manager.      (line 1289)
+* BFD_RELOC_NDS32_25_ABS:                howto manager.      (line 1434)
+* BFD_RELOC_NDS32_25_FIXED:              howto manager.      (line 1373)
+* BFD_RELOC_NDS32_25_PCREL:              howto manager.      (line 1301)
+* BFD_RELOC_NDS32_25_PLTREL:             howto manager.      (line 1347)
+* BFD_RELOC_NDS32_5:                     howto manager.      (line 1408)
+* BFD_RELOC_NDS32_9_FIXED:               howto manager.      (line 1370)
+* BFD_RELOC_NDS32_9_PCREL:               howto manager.      (line 1291)
+* BFD_RELOC_NDS32_9_PLTREL:              howto manager.      (line 1346)
+* BFD_RELOC_NDS32_COPY:                  howto manager.      (line 1348)
+* BFD_RELOC_NDS32_DATA:                  howto manager.      (line 1436)
+* BFD_RELOC_NDS32_DIFF16:                howto manager.      (line 1429)
+* BFD_RELOC_NDS32_DIFF32:                howto manager.      (line 1430)
+* BFD_RELOC_NDS32_DIFF8:                 howto manager.      (line 1428)
+* BFD_RELOC_NDS32_DIFF_ULEB128:          howto manager.      (line 1431)
+* BFD_RELOC_NDS32_DWARF2_LEB:            howto manager.      (line 1394)
+* BFD_RELOC_NDS32_DWARF2_OP1:            howto manager.      (line 1392)
+* BFD_RELOC_NDS32_DWARF2_OP2:            howto manager.      (line 1393)
+* BFD_RELOC_NDS32_EMPTY:                 howto manager.      (line 1432)
+* BFD_RELOC_NDS32_GLOB_DAT:              howto manager.      (line 1349)
+* BFD_RELOC_NDS32_GOT15S2:               howto manager.      (line 1405)
+* BFD_RELOC_NDS32_GOT17S2:               howto manager.      (line 1406)
+* BFD_RELOC_NDS32_GOT20:                 howto manager.      (line 1345)
+* BFD_RELOC_NDS32_GOTOFF:                howto manager.      (line 1352)
+* BFD_RELOC_NDS32_GOTOFF_HI20:           howto manager.      (line 1353)
+* BFD_RELOC_NDS32_GOTOFF_LO12:           howto manager.      (line 1354)
+* BFD_RELOC_NDS32_GOTOFF_LO15:           howto manager.      (line 1403)
+* BFD_RELOC_NDS32_GOTOFF_LO19:           howto manager.      (line 1404)
+* BFD_RELOC_NDS32_GOTOFF_SUFF:           howto manager.      (line 1417)
+* BFD_RELOC_NDS32_GOTPC20:               howto manager.      (line 1355)
+* BFD_RELOC_NDS32_GOTPC_HI20:            howto manager.      (line 1358)
+* BFD_RELOC_NDS32_GOTPC_LO12:            howto manager.      (line 1359)
+* BFD_RELOC_NDS32_GOTTPOFF:              howto manager.      (line 1442)
+* BFD_RELOC_NDS32_GOT_HI20:              howto manager.      (line 1356)
+* BFD_RELOC_NDS32_GOT_LO12:              howto manager.      (line 1357)
+* BFD_RELOC_NDS32_GOT_LO15:              howto manager.      (line 1401)
+* BFD_RELOC_NDS32_GOT_LO19:              howto manager.      (line 1402)
+* BFD_RELOC_NDS32_GOT_SUFF:              howto manager.      (line 1416)
+* BFD_RELOC_NDS32_GROUP:                 howto manager.      (line 1468)
+* BFD_RELOC_NDS32_HI20:                  howto manager.      (line 1303)
+* BFD_RELOC_NDS32_INSN16:                howto manager.      (line 1361)
+* BFD_RELOC_NDS32_JMP_SLOT:              howto manager.      (line 1350)
+* BFD_RELOC_NDS32_LABEL:                 howto manager.      (line 1362)
+* BFD_RELOC_NDS32_LO12S0:                howto manager.      (line 1315)
+* BFD_RELOC_NDS32_LO12S0_ORI:            howto manager.      (line 1318)
+* BFD_RELOC_NDS32_LO12S1:                howto manager.      (line 1312)
+* BFD_RELOC_NDS32_LO12S2:                howto manager.      (line 1309)
+* BFD_RELOC_NDS32_LO12S2_DP:             howto manager.      (line 1389)
+* BFD_RELOC_NDS32_LO12S2_SP:             howto manager.      (line 1390)
+* BFD_RELOC_NDS32_LO12S3:                howto manager.      (line 1306)
+* BFD_RELOC_NDS32_LOADSTORE:             howto manager.      (line 1369)
+* BFD_RELOC_NDS32_LONGCALL1:             howto manager.      (line 1363)
+* BFD_RELOC_NDS32_LONGCALL2:             howto manager.      (line 1364)
+* BFD_RELOC_NDS32_LONGCALL3:             howto manager.      (line 1365)
+* BFD_RELOC_NDS32_LONGCALL4:             howto manager.      (line 1374)
+* BFD_RELOC_NDS32_LONGCALL5:             howto manager.      (line 1375)
+* BFD_RELOC_NDS32_LONGCALL6:             howto manager.      (line 1376)
+* BFD_RELOC_NDS32_LONGJUMP1:             howto manager.      (line 1366)
+* BFD_RELOC_NDS32_LONGJUMP2:             howto manager.      (line 1367)
+* BFD_RELOC_NDS32_LONGJUMP3:             howto manager.      (line 1368)
+* BFD_RELOC_NDS32_LONGJUMP4:             howto manager.      (line 1377)
+* BFD_RELOC_NDS32_LONGJUMP5:             howto manager.      (line 1378)
+* BFD_RELOC_NDS32_LONGJUMP6:             howto manager.      (line 1379)
+* BFD_RELOC_NDS32_LONGJUMP7:             howto manager.      (line 1380)
+* BFD_RELOC_NDS32_LSI:                   howto manager.      (line 1470)
+* BFD_RELOC_NDS32_MINUEND:               howto manager.      (line 1426)
+* BFD_RELOC_NDS32_MULCALL_SUFF:          howto manager.      (line 1419)
+* BFD_RELOC_NDS32_PLTBLOCK:              howto manager.      (line 1423)
+* BFD_RELOC_NDS32_PLTREL_HI20:           howto manager.      (line 1382)
+* BFD_RELOC_NDS32_PLTREL_LO12:           howto manager.      (line 1383)
+* BFD_RELOC_NDS32_PLT_GOTREL_HI20:       howto manager.      (line 1384)
+* BFD_RELOC_NDS32_PLT_GOTREL_LO12:       howto manager.      (line 1385)
+* BFD_RELOC_NDS32_PLT_GOTREL_LO15:       howto manager.      (line 1399)
+* BFD_RELOC_NDS32_PLT_GOTREL_LO19:       howto manager.      (line 1400)
+* BFD_RELOC_NDS32_PLT_GOTREL_LO20:       howto manager.      (line 1398)
+* BFD_RELOC_NDS32_PLT_GOT_SUFF:          howto manager.      (line 1418)
+* BFD_RELOC_NDS32_PTR:                   howto manager.      (line 1420)
+* BFD_RELOC_NDS32_PTR_COUNT:             howto manager.      (line 1421)
+* BFD_RELOC_NDS32_PTR_RESOLVED:          howto manager.      (line 1422)
+* BFD_RELOC_NDS32_RELATIVE:              howto manager.      (line 1351)
+* BFD_RELOC_NDS32_RELAX_ENTRY:           howto manager.      (line 1415)
+* BFD_RELOC_NDS32_RELAX_REGION_BEGIN:    howto manager.      (line 1424)
+* BFD_RELOC_NDS32_RELAX_REGION_END:      howto manager.      (line 1425)
+* BFD_RELOC_NDS32_REMOVE:                howto manager.      (line 1467)
+* BFD_RELOC_NDS32_SDA12S2_DP:            howto manager.      (line 1387)
+* BFD_RELOC_NDS32_SDA12S2_SP:            howto manager.      (line 1388)
+* BFD_RELOC_NDS32_SDA15S0:               howto manager.      (line 1330)
+* BFD_RELOC_NDS32_SDA15S1:               howto manager.      (line 1327)
+* BFD_RELOC_NDS32_SDA15S2:               howto manager.      (line 1324)
+* BFD_RELOC_NDS32_SDA15S3:               howto manager.      (line 1321)
+* BFD_RELOC_NDS32_SDA16S3:               howto manager.      (line 1333)
+* BFD_RELOC_NDS32_SDA17S2:               howto manager.      (line 1336)
+* BFD_RELOC_NDS32_SDA18S1:               howto manager.      (line 1339)
+* BFD_RELOC_NDS32_SDA19S0:               howto manager.      (line 1342)
+* BFD_RELOC_NDS32_SDA_FP7U2_RELA:        howto manager.      (line 1413)
+* BFD_RELOC_NDS32_SUBTRAHEND:            howto manager.      (line 1427)
+* BFD_RELOC_NDS32_TLS_DESC:              howto manager.      (line 1458)
+* BFD_RELOC_NDS32_TLS_DESC_20:           howto manager.      (line 1461)
+* BFD_RELOC_NDS32_TLS_DESC_ADD:          howto manager.      (line 1463)
+* BFD_RELOC_NDS32_TLS_DESC_CALL:         howto manager.      (line 1465)
+* BFD_RELOC_NDS32_TLS_DESC_FUNC:         howto manager.      (line 1464)
+* BFD_RELOC_NDS32_TLS_DESC_HI20:         howto manager.      (line 1459)
+* BFD_RELOC_NDS32_TLS_DESC_LO12:         howto manager.      (line 1460)
+* BFD_RELOC_NDS32_TLS_DESC_MEM:          howto manager.      (line 1466)
+* BFD_RELOC_NDS32_TLS_DESC_SDA17S2:      howto manager.      (line 1462)
+* BFD_RELOC_NDS32_TLS_IEGP_HI20:         howto manager.      (line 1454)
+* BFD_RELOC_NDS32_TLS_IEGP_LO12:         howto manager.      (line 1455)
+* BFD_RELOC_NDS32_TLS_IEGP_LO12S2:       howto manager.      (line 1456)
+* BFD_RELOC_NDS32_TLS_IEGP_LW:           howto manager.      (line 1457)
+* BFD_RELOC_NDS32_TLS_IE_HI20:           howto manager.      (line 1451)
+* BFD_RELOC_NDS32_TLS_IE_LO12:           howto manager.      (line 1452)
+* BFD_RELOC_NDS32_TLS_IE_LO12S2:         howto manager.      (line 1453)
+* BFD_RELOC_NDS32_TLS_LE_15S0:           howto manager.      (line 1446)
+* BFD_RELOC_NDS32_TLS_LE_15S1:           howto manager.      (line 1447)
+* BFD_RELOC_NDS32_TLS_LE_15S2:           howto manager.      (line 1448)
+* BFD_RELOC_NDS32_TLS_LE_20:             howto manager.      (line 1445)
+* BFD_RELOC_NDS32_TLS_LE_ADD:            howto manager.      (line 1449)
+* BFD_RELOC_NDS32_TLS_LE_HI20:           howto manager.      (line 1443)
+* BFD_RELOC_NDS32_TLS_LE_LO12:           howto manager.      (line 1444)
+* BFD_RELOC_NDS32_TLS_LE_LS:             howto manager.      (line 1450)
+* BFD_RELOC_NDS32_TPOFF:                 howto manager.      (line 1441)
+* BFD_RELOC_NDS32_TRAN:                  howto manager.      (line 1437)
+* BFD_RELOC_NDS32_UPDATE_TA:             howto manager.      (line 1396)
+* BFD_RELOC_NDS32_WORD_9_PCREL:          howto manager.      (line 1294)
 * BFD_RELOC_NIOS2_ALIGN:                 howto manager.      (line 2476)
 * BFD_RELOC_NIOS2_CACHE_OPX:             howto manager.      (line 2466)
 * BFD_RELOC_NIOS2_CALL16:                howto manager.      (line 2478)
@@ -13649,219 +13641,235 @@ BFD Index
 * BFD_RELOC_NIOS2_U16:                   howto manager.      (line 2463)
 * BFD_RELOC_NIOS2_UJMP:                  howto manager.      (line 2473)
 * BFD_RELOC_NONE:                        howto manager.      (line  118)
-* BFD_RELOC_NS32K_DISP_16:               howto manager.      (line  586)
-* BFD_RELOC_NS32K_DISP_16_PCREL:         howto manager.      (line  589)
-* BFD_RELOC_NS32K_DISP_32:               howto manager.      (line  587)
-* BFD_RELOC_NS32K_DISP_32_PCREL:         howto manager.      (line  590)
-* BFD_RELOC_NS32K_DISP_8:                howto manager.      (line  585)
-* BFD_RELOC_NS32K_DISP_8_PCREL:          howto manager.      (line  588)
-* BFD_RELOC_NS32K_IMM_16:                howto manager.      (line  580)
-* BFD_RELOC_NS32K_IMM_16_PCREL:          howto manager.      (line  583)
-* BFD_RELOC_NS32K_IMM_32:                howto manager.      (line  581)
-* BFD_RELOC_NS32K_IMM_32_PCREL:          howto manager.      (line  584)
-* BFD_RELOC_NS32K_IMM_8:                 howto manager.      (line  579)
-* BFD_RELOC_NS32K_IMM_8_PCREL:           howto manager.      (line  582)
-* bfd_reloc_offset_in_range:             typedef arelent.    (line  344)
-* BFD_RELOC_OR1K_COPY:                   howto manager.      (line 2377)
-* BFD_RELOC_OR1K_GLOB_DAT:               howto manager.      (line 2378)
-* BFD_RELOC_OR1K_GOT16:                  howto manager.      (line 2371)
-* BFD_RELOC_OR1K_GOTOFF_SLO16:           howto manager.      (line 2376)
-* BFD_RELOC_OR1K_GOTPC_HI16:             howto manager.      (line 2369)
-* BFD_RELOC_OR1K_GOTPC_LO16:             howto manager.      (line 2370)
-* BFD_RELOC_OR1K_GOT_LO13:               howto manager.      (line 2373)
-* BFD_RELOC_OR1K_GOT_PG21:               howto manager.      (line 2372)
-* BFD_RELOC_OR1K_JMP_SLOT:               howto manager.      (line 2379)
-* BFD_RELOC_OR1K_LO13:                   howto manager.      (line 2367)
-* BFD_RELOC_OR1K_PCREL_PG21:             howto manager.      (line 2366)
-* BFD_RELOC_OR1K_PLT26:                  howto manager.      (line 2374)
-* BFD_RELOC_OR1K_PLTA26:                 howto manager.      (line 2375)
-* BFD_RELOC_OR1K_RELATIVE:               howto manager.      (line 2380)
-* BFD_RELOC_OR1K_REL_26:                 howto manager.      (line 2364)
-* BFD_RELOC_OR1K_SLO13:                  howto manager.      (line 2368)
-* BFD_RELOC_OR1K_SLO16:                  howto manager.      (line 2365)
-* BFD_RELOC_OR1K_TLS_DTPMOD:             howto manager.      (line 2402)
-* BFD_RELOC_OR1K_TLS_DTPOFF:             howto manager.      (line 2401)
-* BFD_RELOC_OR1K_TLS_GD_HI16:            howto manager.      (line 2381)
-* BFD_RELOC_OR1K_TLS_GD_LO13:            howto manager.      (line 2384)
-* BFD_RELOC_OR1K_TLS_GD_LO16:            howto manager.      (line 2382)
-* BFD_RELOC_OR1K_TLS_GD_PG21:            howto manager.      (line 2383)
-* BFD_RELOC_OR1K_TLS_IE_AHI16:           howto manager.      (line 2392)
-* BFD_RELOC_OR1K_TLS_IE_HI16:            howto manager.      (line 2391)
-* BFD_RELOC_OR1K_TLS_IE_LO13:            howto manager.      (line 2395)
-* BFD_RELOC_OR1K_TLS_IE_LO16:            howto manager.      (line 2393)
-* BFD_RELOC_OR1K_TLS_IE_PG21:            howto manager.      (line 2394)
-* BFD_RELOC_OR1K_TLS_LDM_HI16:           howto manager.      (line 2385)
-* BFD_RELOC_OR1K_TLS_LDM_LO13:           howto manager.      (line 2388)
-* BFD_RELOC_OR1K_TLS_LDM_LO16:           howto manager.      (line 2386)
-* BFD_RELOC_OR1K_TLS_LDM_PG21:           howto manager.      (line 2387)
-* BFD_RELOC_OR1K_TLS_LDO_HI16:           howto manager.      (line 2389)
-* BFD_RELOC_OR1K_TLS_LDO_LO16:           howto manager.      (line 2390)
-* BFD_RELOC_OR1K_TLS_LE_AHI16:           howto manager.      (line 2397)
-* BFD_RELOC_OR1K_TLS_LE_HI16:            howto manager.      (line 2396)
-* BFD_RELOC_OR1K_TLS_LE_LO16:            howto manager.      (line 2398)
-* BFD_RELOC_OR1K_TLS_LE_SLO16:           howto manager.      (line 2399)
-* BFD_RELOC_OR1K_TLS_TPOFF:              howto manager.      (line 2400)
-* BFD_RELOC_PDP11_DISP_6_PCREL:          howto manager.      (line  593)
-* BFD_RELOC_PDP11_DISP_8_PCREL:          howto manager.      (line  592)
-* BFD_RELOC_PJ_CODE_DIR16:               howto manager.      (line  597)
-* BFD_RELOC_PJ_CODE_DIR32:               howto manager.      (line  598)
-* BFD_RELOC_PJ_CODE_HI16:                howto manager.      (line  595)
-* BFD_RELOC_PJ_CODE_LO16:                howto manager.      (line  596)
-* BFD_RELOC_PJ_CODE_REL16:               howto manager.      (line  599)
-* BFD_RELOC_PJ_CODE_REL32:               howto manager.      (line  600)
-* BFD_RELOC_PPC64_ADDR16_DS:             howto manager.      (line  663)
-* BFD_RELOC_PPC64_ADDR16_HIGH:           howto manager.      (line  674)
-* BFD_RELOC_PPC64_ADDR16_HIGHA:          howto manager.      (line  675)
-* BFD_RELOC_PPC64_ADDR16_HIGHER34:       howto manager.      (line  692)
-* BFD_RELOC_PPC64_ADDR16_HIGHERA34:      howto manager.      (line  693)
-* BFD_RELOC_PPC64_ADDR16_HIGHEST34:      howto manager.      (line  694)
-* BFD_RELOC_PPC64_ADDR16_HIGHESTA34:     howto manager.      (line  695)
-* BFD_RELOC_PPC64_ADDR16_LO_DS:          howto manager.      (line  664)
-* BFD_RELOC_PPC64_ADDR64_LOCAL:          howto manager.      (line  682)
-* BFD_RELOC_PPC64_D28:                   howto manager.      (line  700)
-* BFD_RELOC_PPC64_D34:                   howto manager.      (line  685)
-* BFD_RELOC_PPC64_D34_HA30:              howto manager.      (line  688)
-* BFD_RELOC_PPC64_D34_HI30:              howto manager.      (line  687)
-* BFD_RELOC_PPC64_D34_LO:                howto manager.      (line  686)
-* BFD_RELOC_PPC64_DTPREL16_DS:           howto manager.      (line  741)
-* BFD_RELOC_PPC64_DTPREL16_HIGH:         howto manager.      (line  743)
-* BFD_RELOC_PPC64_DTPREL16_HIGHA:        howto manager.      (line  744)
-* BFD_RELOC_PPC64_DTPREL16_HIGHER:       howto manager.      (line  745)
-* BFD_RELOC_PPC64_DTPREL16_HIGHERA:      howto manager.      (line  746)
-* BFD_RELOC_PPC64_DTPREL16_HIGHEST:      howto manager.      (line  747)
-* BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     howto manager.      (line  748)
-* BFD_RELOC_PPC64_DTPREL16_LO_DS:        howto manager.      (line  742)
-* BFD_RELOC_PPC64_DTPREL34:              howto manager.      (line  750)
-* BFD_RELOC_PPC64_ENTRY:                 howto manager.      (line  683)
-* BFD_RELOC_PPC64_GOT16_DS:              howto manager.      (line  665)
-* BFD_RELOC_PPC64_GOT16_LO_DS:           howto manager.      (line  666)
-* BFD_RELOC_PPC64_GOT_DTPREL34:          howto manager.      (line  754)
-* BFD_RELOC_PPC64_GOT_PCREL34:           howto manager.      (line  690)
-* BFD_RELOC_PPC64_GOT_TLSGD34:           howto manager.      (line  751)
-* BFD_RELOC_PPC64_GOT_TLSLD34:           howto manager.      (line  752)
-* BFD_RELOC_PPC64_GOT_TPREL34:           howto manager.      (line  753)
-* BFD_RELOC_PPC64_HIGHER:                howto manager.      (line  651)
-* BFD_RELOC_PPC64_HIGHER_S:              howto manager.      (line  652)
-* BFD_RELOC_PPC64_HIGHEST:               howto manager.      (line  653)
-* BFD_RELOC_PPC64_HIGHEST_S:             howto manager.      (line  654)
-* BFD_RELOC_PPC64_PCREL28:               howto manager.      (line  701)
-* BFD_RELOC_PPC64_PCREL34:               howto manager.      (line  689)
-* BFD_RELOC_PPC64_PLT16_LO_DS:           howto manager.      (line  667)
-* BFD_RELOC_PPC64_PLTGOT16:              howto manager.      (line  659)
-* BFD_RELOC_PPC64_PLTGOT16_DS:           howto manager.      (line  672)
-* BFD_RELOC_PPC64_PLTGOT16_HA:           howto manager.      (line  662)
-* BFD_RELOC_PPC64_PLTGOT16_HI:           howto manager.      (line  661)
-* BFD_RELOC_PPC64_PLTGOT16_LO:           howto manager.      (line  660)
-* BFD_RELOC_PPC64_PLTGOT16_LO_DS:        howto manager.      (line  673)
-* BFD_RELOC_PPC64_PLT_PCREL34:           howto manager.      (line  691)
-* BFD_RELOC_PPC64_REL16_HIGH:            howto manager.      (line  676)
-* BFD_RELOC_PPC64_REL16_HIGHA:           howto manager.      (line  677)
-* BFD_RELOC_PPC64_REL16_HIGHER:          howto manager.      (line  678)
-* BFD_RELOC_PPC64_REL16_HIGHER34:        howto manager.      (line  696)
-* BFD_RELOC_PPC64_REL16_HIGHERA:         howto manager.      (line  679)
-* BFD_RELOC_PPC64_REL16_HIGHERA34:       howto manager.      (line  697)
-* BFD_RELOC_PPC64_REL16_HIGHEST:         howto manager.      (line  680)
-* BFD_RELOC_PPC64_REL16_HIGHEST34:       howto manager.      (line  698)
-* BFD_RELOC_PPC64_REL16_HIGHESTA:        howto manager.      (line  681)
-* BFD_RELOC_PPC64_REL16_HIGHESTA34:      howto manager.      (line  699)
-* BFD_RELOC_PPC64_REL24_NOTOC:           howto manager.      (line  684)
-* BFD_RELOC_PPC64_SECTOFF_DS:            howto manager.      (line  668)
-* BFD_RELOC_PPC64_SECTOFF_LO_DS:         howto manager.      (line  669)
-* BFD_RELOC_PPC64_TLS_PCREL:             howto manager.      (line  755)
-* BFD_RELOC_PPC64_TOC:                   howto manager.      (line  658)
-* BFD_RELOC_PPC64_TOC16_DS:              howto manager.      (line  670)
-* BFD_RELOC_PPC64_TOC16_HA:              howto manager.      (line  657)
-* BFD_RELOC_PPC64_TOC16_HI:              howto manager.      (line  656)
-* BFD_RELOC_PPC64_TOC16_LO:              howto manager.      (line  655)
-* BFD_RELOC_PPC64_TOC16_LO_DS:           howto manager.      (line  671)
-* BFD_RELOC_PPC64_TPREL16_DS:            howto manager.      (line  733)
-* BFD_RELOC_PPC64_TPREL16_HIGH:          howto manager.      (line  735)
-* BFD_RELOC_PPC64_TPREL16_HIGHA:         howto manager.      (line  736)
-* BFD_RELOC_PPC64_TPREL16_HIGHER:        howto manager.      (line  737)
-* BFD_RELOC_PPC64_TPREL16_HIGHERA:       howto manager.      (line  738)
-* BFD_RELOC_PPC64_TPREL16_HIGHEST:       howto manager.      (line  739)
-* BFD_RELOC_PPC64_TPREL16_HIGHESTA:      howto manager.      (line  740)
-* BFD_RELOC_PPC64_TPREL16_LO_DS:         howto manager.      (line  734)
-* BFD_RELOC_PPC64_TPREL34:               howto manager.      (line  749)
-* BFD_RELOC_PPC_16DX_HA:                 howto manager.      (line  649)
-* BFD_RELOC_PPC_B16:                     howto manager.      (line  605)
-* BFD_RELOC_PPC_B16_BRNTAKEN:            howto manager.      (line  607)
-* BFD_RELOC_PPC_B16_BRTAKEN:             howto manager.      (line  606)
-* BFD_RELOC_PPC_B26:                     howto manager.      (line  602)
-* BFD_RELOC_PPC_BA16:                    howto manager.      (line  608)
-* BFD_RELOC_PPC_BA16_BRNTAKEN:           howto manager.      (line  610)
-* BFD_RELOC_PPC_BA16_BRTAKEN:            howto manager.      (line  609)
-* BFD_RELOC_PPC_BA26:                    howto manager.      (line  603)
-* BFD_RELOC_PPC_COPY:                    howto manager.      (line  611)
-* BFD_RELOC_PPC_DTPMOD:                  howto manager.      (line  706)
-* BFD_RELOC_PPC_DTPREL:                  howto manager.      (line  716)
-* BFD_RELOC_PPC_DTPREL16:                howto manager.      (line  712)
-* BFD_RELOC_PPC_DTPREL16_HA:             howto manager.      (line  715)
-* BFD_RELOC_PPC_DTPREL16_HI:             howto manager.      (line  714)
-* BFD_RELOC_PPC_DTPREL16_LO:             howto manager.      (line  713)
-* BFD_RELOC_PPC_EMB_BIT_FLD:             howto manager.      (line  630)
-* BFD_RELOC_PPC_EMB_MRKREF:              howto manager.      (line  625)
-* BFD_RELOC_PPC_EMB_NADDR16:             howto manager.      (line  617)
-* BFD_RELOC_PPC_EMB_NADDR16_HA:          howto manager.      (line  620)
-* BFD_RELOC_PPC_EMB_NADDR16_HI:          howto manager.      (line  619)
-* BFD_RELOC_PPC_EMB_NADDR16_LO:          howto manager.      (line  618)
-* BFD_RELOC_PPC_EMB_NADDR32:             howto manager.      (line  616)
-* BFD_RELOC_PPC_EMB_RELSDA:              howto manager.      (line  631)
-* BFD_RELOC_PPC_EMB_RELSEC16:            howto manager.      (line  626)
-* BFD_RELOC_PPC_EMB_RELST_HA:            howto manager.      (line  629)
-* BFD_RELOC_PPC_EMB_RELST_HI:            howto manager.      (line  628)
-* BFD_RELOC_PPC_EMB_RELST_LO:            howto manager.      (line  627)
-* BFD_RELOC_PPC_EMB_SDA21:               howto manager.      (line  624)
-* BFD_RELOC_PPC_EMB_SDA2I16:             howto manager.      (line  622)
-* BFD_RELOC_PPC_EMB_SDA2REL:             howto manager.      (line  623)
-* BFD_RELOC_PPC_EMB_SDAI16:              howto manager.      (line  621)
-* BFD_RELOC_PPC_GLOB_DAT:                howto manager.      (line  612)
-* BFD_RELOC_PPC_GOT_DTPREL16:            howto manager.      (line  729)
-* BFD_RELOC_PPC_GOT_DTPREL16_HA:         howto manager.      (line  732)
-* BFD_RELOC_PPC_GOT_DTPREL16_HI:         howto manager.      (line  731)
-* BFD_RELOC_PPC_GOT_DTPREL16_LO:         howto manager.      (line  730)
-* BFD_RELOC_PPC_GOT_TLSGD16:             howto manager.      (line  717)
-* BFD_RELOC_PPC_GOT_TLSGD16_HA:          howto manager.      (line  720)
-* BFD_RELOC_PPC_GOT_TLSGD16_HI:          howto manager.      (line  719)
-* BFD_RELOC_PPC_GOT_TLSGD16_LO:          howto manager.      (line  718)
-* BFD_RELOC_PPC_GOT_TLSLD16:             howto manager.      (line  721)
-* BFD_RELOC_PPC_GOT_TLSLD16_HA:          howto manager.      (line  724)
-* BFD_RELOC_PPC_GOT_TLSLD16_HI:          howto manager.      (line  723)
-* BFD_RELOC_PPC_GOT_TLSLD16_LO:          howto manager.      (line  722)
-* BFD_RELOC_PPC_GOT_TPREL16:             howto manager.      (line  725)
-* BFD_RELOC_PPC_GOT_TPREL16_HA:          howto manager.      (line  728)
-* BFD_RELOC_PPC_GOT_TPREL16_HI:          howto manager.      (line  727)
-* BFD_RELOC_PPC_GOT_TPREL16_LO:          howto manager.      (line  726)
-* BFD_RELOC_PPC_JMP_SLOT:                howto manager.      (line  613)
-* BFD_RELOC_PPC_LOCAL24PC:               howto manager.      (line  615)
-* BFD_RELOC_PPC_REL16DX_HA:              howto manager.      (line  650)
-* BFD_RELOC_PPC_RELATIVE:                howto manager.      (line  614)
-* BFD_RELOC_PPC_TLS:                     howto manager.      (line  703)
-* BFD_RELOC_PPC_TLSGD:                   howto manager.      (line  704)
-* BFD_RELOC_PPC_TLSLD:                   howto manager.      (line  705)
-* BFD_RELOC_PPC_TOC16:                   howto manager.      (line  604)
-* BFD_RELOC_PPC_TPREL:                   howto manager.      (line  711)
-* BFD_RELOC_PPC_TPREL16:                 howto manager.      (line  707)
-* BFD_RELOC_PPC_TPREL16_HA:              howto manager.      (line  710)
-* BFD_RELOC_PPC_TPREL16_HI:              howto manager.      (line  709)
-* BFD_RELOC_PPC_TPREL16_LO:              howto manager.      (line  708)
-* BFD_RELOC_PPC_VLE_HA16A:               howto manager.      (line  639)
-* BFD_RELOC_PPC_VLE_HA16D:               howto manager.      (line  640)
-* BFD_RELOC_PPC_VLE_HI16A:               howto manager.      (line  637)
-* BFD_RELOC_PPC_VLE_HI16D:               howto manager.      (line  638)
-* BFD_RELOC_PPC_VLE_LO16A:               howto manager.      (line  635)
-* BFD_RELOC_PPC_VLE_LO16D:               howto manager.      (line  636)
-* BFD_RELOC_PPC_VLE_REL15:               howto manager.      (line  633)
-* BFD_RELOC_PPC_VLE_REL24:               howto manager.      (line  634)
-* BFD_RELOC_PPC_VLE_REL8:                howto manager.      (line  632)
-* BFD_RELOC_PPC_VLE_SDA21:               howto manager.      (line  641)
-* BFD_RELOC_PPC_VLE_SDA21_LO:            howto manager.      (line  642)
-* BFD_RELOC_PPC_VLE_SDAREL_HA16A:        howto manager.      (line  647)
-* BFD_RELOC_PPC_VLE_SDAREL_HA16D:        howto manager.      (line  648)
-* BFD_RELOC_PPC_VLE_SDAREL_HI16A:        howto manager.      (line  645)
-* BFD_RELOC_PPC_VLE_SDAREL_HI16D:        howto manager.      (line  646)
-* BFD_RELOC_PPC_VLE_SDAREL_LO16A:        howto manager.      (line  643)
-* BFD_RELOC_PPC_VLE_SDAREL_LO16D:        howto manager.      (line  644)
+* BFD_RELOC_NS32K_DISP_16:               howto manager.      (line  589)
+* BFD_RELOC_NS32K_DISP_16_PCREL:         howto manager.      (line  592)
+* BFD_RELOC_NS32K_DISP_32:               howto manager.      (line  590)
+* BFD_RELOC_NS32K_DISP_32_PCREL:         howto manager.      (line  593)
+* BFD_RELOC_NS32K_DISP_8:                howto manager.      (line  588)
+* BFD_RELOC_NS32K_DISP_8_PCREL:          howto manager.      (line  591)
+* BFD_RELOC_NS32K_IMM_16:                howto manager.      (line  583)
+* BFD_RELOC_NS32K_IMM_16_PCREL:          howto manager.      (line  586)
+* BFD_RELOC_NS32K_IMM_32:                howto manager.      (line  584)
+* BFD_RELOC_NS32K_IMM_32_PCREL:          howto manager.      (line  587)
+* BFD_RELOC_NS32K_IMM_8:                 howto manager.      (line  582)
+* BFD_RELOC_NS32K_IMM_8_PCREL:           howto manager.      (line  585)
+* bfd_reloc_offset_in_range:             typedef arelent.    (line  303)
+* bfd_reloc_offset_in_range <1>:         typedef arelent.    (line  307)
+* BFD_RELOC_OR1K_COPY:                   howto manager.      (line 2380)
+* BFD_RELOC_OR1K_GLOB_DAT:               howto manager.      (line 2381)
+* BFD_RELOC_OR1K_GOT16:                  howto manager.      (line 2374)
+* BFD_RELOC_OR1K_GOTOFF_SLO16:           howto manager.      (line 2379)
+* BFD_RELOC_OR1K_GOTPC_HI16:             howto manager.      (line 2371)
+* BFD_RELOC_OR1K_GOTPC_LO16:             howto manager.      (line 2372)
+* BFD_RELOC_OR1K_GOT_AHI16:              howto manager.      (line 2373)
+* BFD_RELOC_OR1K_GOT_LO13:               howto manager.      (line 2376)
+* BFD_RELOC_OR1K_GOT_PG21:               howto manager.      (line 2375)
+* BFD_RELOC_OR1K_JMP_SLOT:               howto manager.      (line 2382)
+* BFD_RELOC_OR1K_LO13:                   howto manager.      (line 2369)
+* BFD_RELOC_OR1K_PCREL_PG21:             howto manager.      (line 2368)
+* BFD_RELOC_OR1K_PLT26:                  howto manager.      (line 2377)
+* BFD_RELOC_OR1K_PLTA26:                 howto manager.      (line 2378)
+* BFD_RELOC_OR1K_RELATIVE:               howto manager.      (line 2383)
+* BFD_RELOC_OR1K_REL_26:                 howto manager.      (line 2366)
+* BFD_RELOC_OR1K_SLO13:                  howto manager.      (line 2370)
+* BFD_RELOC_OR1K_SLO16:                  howto manager.      (line 2367)
+* BFD_RELOC_OR1K_TLS_DTPMOD:             howto manager.      (line 2405)
+* BFD_RELOC_OR1K_TLS_DTPOFF:             howto manager.      (line 2404)
+* BFD_RELOC_OR1K_TLS_GD_HI16:            howto manager.      (line 2384)
+* BFD_RELOC_OR1K_TLS_GD_LO13:            howto manager.      (line 2387)
+* BFD_RELOC_OR1K_TLS_GD_LO16:            howto manager.      (line 2385)
+* BFD_RELOC_OR1K_TLS_GD_PG21:            howto manager.      (line 2386)
+* BFD_RELOC_OR1K_TLS_IE_AHI16:           howto manager.      (line 2395)
+* BFD_RELOC_OR1K_TLS_IE_HI16:            howto manager.      (line 2394)
+* BFD_RELOC_OR1K_TLS_IE_LO13:            howto manager.      (line 2398)
+* BFD_RELOC_OR1K_TLS_IE_LO16:            howto manager.      (line 2396)
+* BFD_RELOC_OR1K_TLS_IE_PG21:            howto manager.      (line 2397)
+* BFD_RELOC_OR1K_TLS_LDM_HI16:           howto manager.      (line 2388)
+* BFD_RELOC_OR1K_TLS_LDM_LO13:           howto manager.      (line 2391)
+* BFD_RELOC_OR1K_TLS_LDM_LO16:           howto manager.      (line 2389)
+* BFD_RELOC_OR1K_TLS_LDM_PG21:           howto manager.      (line 2390)
+* BFD_RELOC_OR1K_TLS_LDO_HI16:           howto manager.      (line 2392)
+* BFD_RELOC_OR1K_TLS_LDO_LO16:           howto manager.      (line 2393)
+* BFD_RELOC_OR1K_TLS_LE_AHI16:           howto manager.      (line 2400)
+* BFD_RELOC_OR1K_TLS_LE_HI16:            howto manager.      (line 2399)
+* BFD_RELOC_OR1K_TLS_LE_LO16:            howto manager.      (line 2401)
+* BFD_RELOC_OR1K_TLS_LE_SLO16:           howto manager.      (line 2402)
+* BFD_RELOC_OR1K_TLS_TPOFF:              howto manager.      (line 2403)
+* BFD_RELOC_PDP11_DISP_6_PCREL:          howto manager.      (line  596)
+* BFD_RELOC_PDP11_DISP_8_PCREL:          howto manager.      (line  595)
+* BFD_RELOC_PJ_CODE_DIR16:               howto manager.      (line  600)
+* BFD_RELOC_PJ_CODE_DIR32:               howto manager.      (line  601)
+* BFD_RELOC_PJ_CODE_HI16:                howto manager.      (line  598)
+* BFD_RELOC_PJ_CODE_LO16:                howto manager.      (line  599)
+* BFD_RELOC_PJ_CODE_REL16:               howto manager.      (line  602)
+* BFD_RELOC_PJ_CODE_REL32:               howto manager.      (line  603)
+* BFD_RELOC_PPC64_ADDR16_DS:             howto manager.      (line  669)
+* BFD_RELOC_PPC64_ADDR16_HIGH:           howto manager.      (line  680)
+* BFD_RELOC_PPC64_ADDR16_HIGHA:          howto manager.      (line  681)
+* BFD_RELOC_PPC64_ADDR16_HIGHER34:       howto manager.      (line  699)
+* BFD_RELOC_PPC64_ADDR16_HIGHERA34:      howto manager.      (line  700)
+* BFD_RELOC_PPC64_ADDR16_HIGHEST34:      howto manager.      (line  701)
+* BFD_RELOC_PPC64_ADDR16_HIGHESTA34:     howto manager.      (line  702)
+* BFD_RELOC_PPC64_ADDR16_LO_DS:          howto manager.      (line  670)
+* BFD_RELOC_PPC64_ADDR64_LOCAL:          howto manager.      (line  688)
+* BFD_RELOC_PPC64_D28:                   howto manager.      (line  707)
+* BFD_RELOC_PPC64_D34:                   howto manager.      (line  692)
+* BFD_RELOC_PPC64_D34_HA30:              howto manager.      (line  695)
+* BFD_RELOC_PPC64_D34_HI30:              howto manager.      (line  694)
+* BFD_RELOC_PPC64_D34_LO:                howto manager.      (line  693)
+* BFD_RELOC_PPC64_DTPREL16_DS:           howto manager.      (line  758)
+* BFD_RELOC_PPC64_DTPREL16_HIGH:         howto manager.      (line  760)
+* BFD_RELOC_PPC64_DTPREL16_HIGHA:        howto manager.      (line  761)
+* BFD_RELOC_PPC64_DTPREL16_HIGHER:       howto manager.      (line  762)
+* BFD_RELOC_PPC64_DTPREL16_HIGHERA:      howto manager.      (line  763)
+* BFD_RELOC_PPC64_DTPREL16_HIGHEST:      howto manager.      (line  764)
+* BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     howto manager.      (line  765)
+* BFD_RELOC_PPC64_DTPREL16_LO_DS:        howto manager.      (line  759)
+* BFD_RELOC_PPC64_DTPREL34:              howto manager.      (line  767)
+* BFD_RELOC_PPC64_ENTRY:                 howto manager.      (line  689)
+* BFD_RELOC_PPC64_GOT16_DS:              howto manager.      (line  671)
+* BFD_RELOC_PPC64_GOT16_LO_DS:           howto manager.      (line  672)
+* BFD_RELOC_PPC64_GOT_DTPREL_PCREL34:    howto manager.      (line  771)
+* BFD_RELOC_PPC64_GOT_PCREL34:           howto manager.      (line  697)
+* BFD_RELOC_PPC64_GOT_TLSGD_PCREL34:     howto manager.      (line  768)
+* BFD_RELOC_PPC64_GOT_TLSLD_PCREL34:     howto manager.      (line  769)
+* BFD_RELOC_PPC64_GOT_TPREL_PCREL34:     howto manager.      (line  770)
+* BFD_RELOC_PPC64_HIGHER:                howto manager.      (line  657)
+* BFD_RELOC_PPC64_HIGHER_S:              howto manager.      (line  658)
+* BFD_RELOC_PPC64_HIGHEST:               howto manager.      (line  659)
+* BFD_RELOC_PPC64_HIGHEST_S:             howto manager.      (line  660)
+* BFD_RELOC_PPC64_PCREL28:               howto manager.      (line  708)
+* BFD_RELOC_PPC64_PCREL34:               howto manager.      (line  696)
+* BFD_RELOC_PPC64_PLT16_LO_DS:           howto manager.      (line  673)
+* BFD_RELOC_PPC64_PLTGOT16:              howto manager.      (line  665)
+* BFD_RELOC_PPC64_PLTGOT16_DS:           howto manager.      (line  678)
+* BFD_RELOC_PPC64_PLTGOT16_HA:           howto manager.      (line  668)
+* BFD_RELOC_PPC64_PLTGOT16_HI:           howto manager.      (line  667)
+* BFD_RELOC_PPC64_PLTGOT16_LO:           howto manager.      (line  666)
+* BFD_RELOC_PPC64_PLTGOT16_LO_DS:        howto manager.      (line  679)
+* BFD_RELOC_PPC64_PLT_PCREL34:           howto manager.      (line  698)
+* BFD_RELOC_PPC64_REL16_HIGH:            howto manager.      (line  682)
+* BFD_RELOC_PPC64_REL16_HIGHA:           howto manager.      (line  683)
+* BFD_RELOC_PPC64_REL16_HIGHER:          howto manager.      (line  684)
+* BFD_RELOC_PPC64_REL16_HIGHER34:        howto manager.      (line  703)
+* BFD_RELOC_PPC64_REL16_HIGHERA:         howto manager.      (line  685)
+* BFD_RELOC_PPC64_REL16_HIGHERA34:       howto manager.      (line  704)
+* BFD_RELOC_PPC64_REL16_HIGHEST:         howto manager.      (line  686)
+* BFD_RELOC_PPC64_REL16_HIGHEST34:       howto manager.      (line  705)
+* BFD_RELOC_PPC64_REL16_HIGHESTA:        howto manager.      (line  687)
+* BFD_RELOC_PPC64_REL16_HIGHESTA34:      howto manager.      (line  706)
+* BFD_RELOC_PPC64_REL24_NOTOC:           howto manager.      (line  690)
+* BFD_RELOC_PPC64_REL24_P9NOTOC:         howto manager.      (line  691)
+* BFD_RELOC_PPC64_SECTOFF_DS:            howto manager.      (line  674)
+* BFD_RELOC_PPC64_SECTOFF_LO_DS:         howto manager.      (line  675)
+* BFD_RELOC_PPC64_TLSGD:                 howto manager.      (line  744)
+* BFD_RELOC_PPC64_TLSIE:                 howto manager.      (line  747)
+* BFD_RELOC_PPC64_TLSLD:                 howto manager.      (line  745)
+* BFD_RELOC_PPC64_TLSLE:                 howto manager.      (line  746)
+* BFD_RELOC_PPC64_TLSM:                  howto manager.      (line  748)
+* BFD_RELOC_PPC64_TLSML:                 howto manager.      (line  749)
+* BFD_RELOC_PPC64_TLS_PCREL:             howto manager.      (line  772)
+* BFD_RELOC_PPC64_TOC:                   howto manager.      (line  664)
+* BFD_RELOC_PPC64_TOC16_DS:              howto manager.      (line  676)
+* BFD_RELOC_PPC64_TOC16_HA:              howto manager.      (line  663)
+* BFD_RELOC_PPC64_TOC16_HI:              howto manager.      (line  662)
+* BFD_RELOC_PPC64_TOC16_LO:              howto manager.      (line  661)
+* BFD_RELOC_PPC64_TOC16_LO_DS:           howto manager.      (line  677)
+* BFD_RELOC_PPC64_TPREL16_DS:            howto manager.      (line  750)
+* BFD_RELOC_PPC64_TPREL16_HIGH:          howto manager.      (line  752)
+* BFD_RELOC_PPC64_TPREL16_HIGHA:         howto manager.      (line  753)
+* BFD_RELOC_PPC64_TPREL16_HIGHER:        howto manager.      (line  754)
+* BFD_RELOC_PPC64_TPREL16_HIGHERA:       howto manager.      (line  755)
+* BFD_RELOC_PPC64_TPREL16_HIGHEST:       howto manager.      (line  756)
+* BFD_RELOC_PPC64_TPREL16_HIGHESTA:      howto manager.      (line  757)
+* BFD_RELOC_PPC64_TPREL16_LO_DS:         howto manager.      (line  751)
+* BFD_RELOC_PPC64_TPREL34:               howto manager.      (line  766)
+* BFD_RELOC_PPC_16DX_HA:                 howto manager.      (line  654)
+* BFD_RELOC_PPC_B16:                     howto manager.      (line  610)
+* BFD_RELOC_PPC_B16_BRNTAKEN:            howto manager.      (line  612)
+* BFD_RELOC_PPC_B16_BRTAKEN:             howto manager.      (line  611)
+* BFD_RELOC_PPC_B26:                     howto manager.      (line  605)
+* BFD_RELOC_PPC_BA16:                    howto manager.      (line  613)
+* BFD_RELOC_PPC_BA16_BRNTAKEN:           howto manager.      (line  615)
+* BFD_RELOC_PPC_BA16_BRTAKEN:            howto manager.      (line  614)
+* BFD_RELOC_PPC_BA26:                    howto manager.      (line  606)
+* BFD_RELOC_PPC_COPY:                    howto manager.      (line  616)
+* BFD_RELOC_PPC_DTPMOD:                  howto manager.      (line  717)
+* BFD_RELOC_PPC_DTPREL:                  howto manager.      (line  727)
+* BFD_RELOC_PPC_DTPREL16:                howto manager.      (line  723)
+* BFD_RELOC_PPC_DTPREL16_HA:             howto manager.      (line  726)
+* BFD_RELOC_PPC_DTPREL16_HI:             howto manager.      (line  725)
+* BFD_RELOC_PPC_DTPREL16_LO:             howto manager.      (line  724)
+* BFD_RELOC_PPC_EMB_BIT_FLD:             howto manager.      (line  635)
+* BFD_RELOC_PPC_EMB_MRKREF:              howto manager.      (line  630)
+* BFD_RELOC_PPC_EMB_NADDR16:             howto manager.      (line  622)
+* BFD_RELOC_PPC_EMB_NADDR16_HA:          howto manager.      (line  625)
+* BFD_RELOC_PPC_EMB_NADDR16_HI:          howto manager.      (line  624)
+* BFD_RELOC_PPC_EMB_NADDR16_LO:          howto manager.      (line  623)
+* BFD_RELOC_PPC_EMB_NADDR32:             howto manager.      (line  621)
+* BFD_RELOC_PPC_EMB_RELSDA:              howto manager.      (line  636)
+* BFD_RELOC_PPC_EMB_RELSEC16:            howto manager.      (line  631)
+* BFD_RELOC_PPC_EMB_RELST_HA:            howto manager.      (line  634)
+* BFD_RELOC_PPC_EMB_RELST_HI:            howto manager.      (line  633)
+* BFD_RELOC_PPC_EMB_RELST_LO:            howto manager.      (line  632)
+* BFD_RELOC_PPC_EMB_SDA21:               howto manager.      (line  629)
+* BFD_RELOC_PPC_EMB_SDA2I16:             howto manager.      (line  627)
+* BFD_RELOC_PPC_EMB_SDA2REL:             howto manager.      (line  628)
+* BFD_RELOC_PPC_EMB_SDAI16:              howto manager.      (line  626)
+* BFD_RELOC_PPC_GLOB_DAT:                howto manager.      (line  617)
+* BFD_RELOC_PPC_GOT_DTPREL16:            howto manager.      (line  740)
+* BFD_RELOC_PPC_GOT_DTPREL16_HA:         howto manager.      (line  743)
+* BFD_RELOC_PPC_GOT_DTPREL16_HI:         howto manager.      (line  742)
+* BFD_RELOC_PPC_GOT_DTPREL16_LO:         howto manager.      (line  741)
+* BFD_RELOC_PPC_GOT_TLSGD16:             howto manager.      (line  728)
+* BFD_RELOC_PPC_GOT_TLSGD16_HA:          howto manager.      (line  731)
+* BFD_RELOC_PPC_GOT_TLSGD16_HI:          howto manager.      (line  730)
+* BFD_RELOC_PPC_GOT_TLSGD16_LO:          howto manager.      (line  729)
+* BFD_RELOC_PPC_GOT_TLSLD16:             howto manager.      (line  732)
+* BFD_RELOC_PPC_GOT_TLSLD16_HA:          howto manager.      (line  735)
+* BFD_RELOC_PPC_GOT_TLSLD16_HI:          howto manager.      (line  734)
+* BFD_RELOC_PPC_GOT_TLSLD16_LO:          howto manager.      (line  733)
+* BFD_RELOC_PPC_GOT_TPREL16:             howto manager.      (line  736)
+* BFD_RELOC_PPC_GOT_TPREL16_HA:          howto manager.      (line  739)
+* BFD_RELOC_PPC_GOT_TPREL16_HI:          howto manager.      (line  738)
+* BFD_RELOC_PPC_GOT_TPREL16_LO:          howto manager.      (line  737)
+* BFD_RELOC_PPC_JMP_SLOT:                howto manager.      (line  618)
+* BFD_RELOC_PPC_LOCAL24PC:               howto manager.      (line  620)
+* BFD_RELOC_PPC_NEG:                     howto manager.      (line  656)
+* BFD_RELOC_PPC_REL16DX_HA:              howto manager.      (line  655)
+* BFD_RELOC_PPC_RELATIVE:                howto manager.      (line  619)
+* BFD_RELOC_PPC_TLS:                     howto manager.      (line  710)
+* BFD_RELOC_PPC_TLSGD:                   howto manager.      (line  711)
+* BFD_RELOC_PPC_TLSIE:                   howto manager.      (line  714)
+* BFD_RELOC_PPC_TLSLD:                   howto manager.      (line  712)
+* BFD_RELOC_PPC_TLSLE:                   howto manager.      (line  713)
+* BFD_RELOC_PPC_TLSM:                    howto manager.      (line  715)
+* BFD_RELOC_PPC_TLSML:                   howto manager.      (line  716)
+* BFD_RELOC_PPC_TOC16:                   howto manager.      (line  607)
+* BFD_RELOC_PPC_TOC16_HI:                howto manager.      (line  609)
+* BFD_RELOC_PPC_TOC16_LO:                howto manager.      (line  608)
+* BFD_RELOC_PPC_TPREL:                   howto manager.      (line  722)
+* BFD_RELOC_PPC_TPREL16:                 howto manager.      (line  718)
+* BFD_RELOC_PPC_TPREL16_HA:              howto manager.      (line  721)
+* BFD_RELOC_PPC_TPREL16_HI:              howto manager.      (line  720)
+* BFD_RELOC_PPC_TPREL16_LO:              howto manager.      (line  719)
+* BFD_RELOC_PPC_VLE_HA16A:               howto manager.      (line  644)
+* BFD_RELOC_PPC_VLE_HA16D:               howto manager.      (line  645)
+* BFD_RELOC_PPC_VLE_HI16A:               howto manager.      (line  642)
+* BFD_RELOC_PPC_VLE_HI16D:               howto manager.      (line  643)
+* BFD_RELOC_PPC_VLE_LO16A:               howto manager.      (line  640)
+* BFD_RELOC_PPC_VLE_LO16D:               howto manager.      (line  641)
+* BFD_RELOC_PPC_VLE_REL15:               howto manager.      (line  638)
+* BFD_RELOC_PPC_VLE_REL24:               howto manager.      (line  639)
+* BFD_RELOC_PPC_VLE_REL8:                howto manager.      (line  637)
+* BFD_RELOC_PPC_VLE_SDA21:               howto manager.      (line  646)
+* BFD_RELOC_PPC_VLE_SDA21_LO:            howto manager.      (line  647)
+* BFD_RELOC_PPC_VLE_SDAREL_HA16A:        howto manager.      (line  652)
+* BFD_RELOC_PPC_VLE_SDAREL_HA16D:        howto manager.      (line  653)
+* BFD_RELOC_PPC_VLE_SDAREL_HI16A:        howto manager.      (line  650)
+* BFD_RELOC_PPC_VLE_SDAREL_HI16D:        howto manager.      (line  651)
+* BFD_RELOC_PPC_VLE_SDAREL_LO16A:        howto manager.      (line  648)
+* BFD_RELOC_PPC_VLE_SDAREL_LO16D:        howto manager.      (line  649)
 * BFD_RELOC_PRU_16_PMEM:                 howto manager.      (line 2528)
 * BFD_RELOC_PRU_32_PMEM:                 howto manager.      (line 2527)
 * BFD_RELOC_PRU_GNU_DIFF16:              howto manager.      (line 2532)
@@ -13874,229 +13882,226 @@ BFD Index
 * BFD_RELOC_PRU_U16:                     howto manager.      (line 2515)
 * BFD_RELOC_PRU_U16_PMEMIMM:             howto manager.      (line 2517)
 * BFD_RELOC_PRU_U8_PCREL:                howto manager.      (line 2525)
-* BFD_RELOC_RELC:                        howto manager.      (line 2416)
+* BFD_RELOC_RELC:                        howto manager.      (line 2419)
 * BFD_RELOC_RISCV_32_PCREL:              howto manager.      (line 1885)
-* BFD_RELOC_RISCV_ADD16:                 howto manager.      (line 1853)
-* BFD_RELOC_RISCV_ADD32:                 howto manager.      (line 1854)
-* BFD_RELOC_RISCV_ADD64:                 howto manager.      (line 1855)
-* BFD_RELOC_RISCV_ADD8:                  howto manager.      (line 1852)
-* BFD_RELOC_RISCV_ALIGN:                 howto manager.      (line 1870)
-* BFD_RELOC_RISCV_CALL:                  howto manager.      (line 1850)
-* BFD_RELOC_RISCV_CALL_PLT:              howto manager.      (line 1851)
+* BFD_RELOC_RISCV_ADD16:                 howto manager.      (line 1858)
+* BFD_RELOC_RISCV_ADD32:                 howto manager.      (line 1859)
+* BFD_RELOC_RISCV_ADD64:                 howto manager.      (line 1860)
+* BFD_RELOC_RISCV_ADD8:                  howto manager.      (line 1857)
+* BFD_RELOC_RISCV_ALIGN:                 howto manager.      (line 1875)
+* BFD_RELOC_RISCV_CALL:                  howto manager.      (line 1855)
+* BFD_RELOC_RISCV_CALL_PLT:              howto manager.      (line 1856)
 * BFD_RELOC_RISCV_CFA:                   howto manager.      (line 1879)
-* BFD_RELOC_RISCV_GOT_HI20:              howto manager.      (line 1860)
-* BFD_RELOC_RISCV_GPREL12_I:             howto manager.      (line 1844)
-* BFD_RELOC_RISCV_GPREL12_S:             howto manager.      (line 1845)
-* BFD_RELOC_RISCV_GPREL_I:               howto manager.      (line 1874)
-* BFD_RELOC_RISCV_GPREL_S:               howto manager.      (line 1875)
-* BFD_RELOC_RISCV_HI20:                  howto manager.      (line 1838)
-* BFD_RELOC_RISCV_JMP:                   howto manager.      (line 1863)
-* BFD_RELOC_RISCV_LO12_I:                howto manager.      (line 1842)
-* BFD_RELOC_RISCV_LO12_S:                howto manager.      (line 1843)
-* BFD_RELOC_RISCV_PCREL_HI20:            howto manager.      (line 1839)
-* BFD_RELOC_RISCV_PCREL_LO12_I:          howto manager.      (line 1840)
-* BFD_RELOC_RISCV_PCREL_LO12_S:          howto manager.      (line 1841)
+* BFD_RELOC_RISCV_GOT_HI20:              howto manager.      (line 1865)
+* BFD_RELOC_RISCV_GPREL12_I:             howto manager.      (line 1849)
+* BFD_RELOC_RISCV_GPREL12_S:             howto manager.      (line 1850)
+* BFD_RELOC_RISCV_HI20:                  howto manager.      (line 1843)
+* BFD_RELOC_RISCV_JMP:                   howto manager.      (line 1868)
+* BFD_RELOC_RISCV_LO12_I:                howto manager.      (line 1847)
+* BFD_RELOC_RISCV_LO12_S:                howto manager.      (line 1848)
+* BFD_RELOC_RISCV_PCREL_HI20:            howto manager.      (line 1844)
+* BFD_RELOC_RISCV_PCREL_LO12_I:          howto manager.      (line 1845)
+* BFD_RELOC_RISCV_PCREL_LO12_S:          howto manager.      (line 1846)
 * BFD_RELOC_RISCV_RELAX:                 howto manager.      (line 1878)
-* BFD_RELOC_RISCV_RVC_BRANCH:            howto manager.      (line 1871)
-* BFD_RELOC_RISCV_RVC_JUMP:              howto manager.      (line 1872)
-* BFD_RELOC_RISCV_RVC_LUI:               howto manager.      (line 1873)
+* BFD_RELOC_RISCV_RVC_BRANCH:            howto manager.      (line 1876)
+* BFD_RELOC_RISCV_RVC_JUMP:              howto manager.      (line 1877)
 * BFD_RELOC_RISCV_SET16:                 howto manager.      (line 1883)
 * BFD_RELOC_RISCV_SET32:                 howto manager.      (line 1884)
 * BFD_RELOC_RISCV_SET6:                  howto manager.      (line 1881)
 * BFD_RELOC_RISCV_SET8:                  howto manager.      (line 1882)
-* BFD_RELOC_RISCV_SUB16:                 howto manager.      (line 1857)
-* BFD_RELOC_RISCV_SUB32:                 howto manager.      (line 1858)
+* BFD_RELOC_RISCV_SET_ULEB128:           howto manager.      (line 1886)
+* BFD_RELOC_RISCV_SUB16:                 howto manager.      (line 1862)
+* BFD_RELOC_RISCV_SUB32:                 howto manager.      (line 1863)
 * BFD_RELOC_RISCV_SUB6:                  howto manager.      (line 1880)
-* BFD_RELOC_RISCV_SUB64:                 howto manager.      (line 1859)
-* BFD_RELOC_RISCV_SUB8:                  howto manager.      (line 1856)
-* BFD_RELOC_RISCV_TLS_DTPMOD32:          howto manager.      (line 1864)
-* BFD_RELOC_RISCV_TLS_DTPMOD64:          howto manager.      (line 1866)
-* BFD_RELOC_RISCV_TLS_DTPREL32:          howto manager.      (line 1865)
-* BFD_RELOC_RISCV_TLS_DTPREL64:          howto manager.      (line 1867)
-* BFD_RELOC_RISCV_TLS_GD_HI20:           howto manager.      (line 1862)
-* BFD_RELOC_RISCV_TLS_GOT_HI20:          howto manager.      (line 1861)
-* BFD_RELOC_RISCV_TLS_TPREL32:           howto manager.      (line 1868)
-* BFD_RELOC_RISCV_TLS_TPREL64:           howto manager.      (line 1869)
-* BFD_RELOC_RISCV_TPREL_ADD:             howto manager.      (line 1849)
-* BFD_RELOC_RISCV_TPREL_HI20:            howto manager.      (line 1846)
-* BFD_RELOC_RISCV_TPREL_I:               howto manager.      (line 1876)
-* BFD_RELOC_RISCV_TPREL_LO12_I:          howto manager.      (line 1847)
-* BFD_RELOC_RISCV_TPREL_LO12_S:          howto manager.      (line 1848)
-* BFD_RELOC_RISCV_TPREL_S:               howto manager.      (line 1877)
-* BFD_RELOC_RL78_16U:                    howto manager.      (line 1895)
-* BFD_RELOC_RL78_16_OP:                  howto manager.      (line 1891)
-* BFD_RELOC_RL78_24U:                    howto manager.      (line 1896)
-* BFD_RELOC_RL78_24_OP:                  howto manager.      (line 1892)
-* BFD_RELOC_RL78_32_OP:                  howto manager.      (line 1893)
-* BFD_RELOC_RL78_8U:                     howto manager.      (line 1894)
-* BFD_RELOC_RL78_ABS16:                  howto manager.      (line 1908)
-* BFD_RELOC_RL78_ABS16U:                 howto manager.      (line 1912)
-* BFD_RELOC_RL78_ABS16UL:                howto manager.      (line 1914)
-* BFD_RELOC_RL78_ABS16UW:                howto manager.      (line 1913)
-* BFD_RELOC_RL78_ABS16_REV:              howto manager.      (line 1909)
-* BFD_RELOC_RL78_ABS32:                  howto manager.      (line 1910)
-* BFD_RELOC_RL78_ABS32_REV:              howto manager.      (line 1911)
-* BFD_RELOC_RL78_ABS8:                   howto manager.      (line 1907)
-* BFD_RELOC_RL78_CODE:                   howto manager.      (line 1919)
-* BFD_RELOC_RL78_DIFF:                   howto manager.      (line 1898)
-* BFD_RELOC_RL78_DIR3U_PCREL:            howto manager.      (line 1897)
-* BFD_RELOC_RL78_GPRELB:                 howto manager.      (line 1899)
-* BFD_RELOC_RL78_GPRELL:                 howto manager.      (line 1901)
-* BFD_RELOC_RL78_GPRELW:                 howto manager.      (line 1900)
-* BFD_RELOC_RL78_HI16:                   howto manager.      (line 1916)
-* BFD_RELOC_RL78_HI8:                    howto manager.      (line 1917)
-* BFD_RELOC_RL78_LO16:                   howto manager.      (line 1918)
-* BFD_RELOC_RL78_NEG16:                  howto manager.      (line 1888)
-* BFD_RELOC_RL78_NEG24:                  howto manager.      (line 1889)
-* BFD_RELOC_RL78_NEG32:                  howto manager.      (line 1890)
-* BFD_RELOC_RL78_NEG8:                   howto manager.      (line 1887)
-* BFD_RELOC_RL78_OP_AND:                 howto manager.      (line 1905)
-* BFD_RELOC_RL78_OP_NEG:                 howto manager.      (line 1904)
-* BFD_RELOC_RL78_OP_SHRA:                howto manager.      (line 1906)
-* BFD_RELOC_RL78_OP_SUBTRACT:            howto manager.      (line 1903)
-* BFD_RELOC_RL78_RELAX:                  howto manager.      (line 1915)
-* BFD_RELOC_RL78_SADDR:                  howto manager.      (line 1920)
-* BFD_RELOC_RL78_SYM:                    howto manager.      (line 1902)
+* BFD_RELOC_RISCV_SUB64:                 howto manager.      (line 1864)
+* BFD_RELOC_RISCV_SUB8:                  howto manager.      (line 1861)
+* BFD_RELOC_RISCV_SUB_ULEB128:           howto manager.      (line 1887)
+* BFD_RELOC_RISCV_TLS_DTPMOD32:          howto manager.      (line 1869)
+* BFD_RELOC_RISCV_TLS_DTPMOD64:          howto manager.      (line 1871)
+* BFD_RELOC_RISCV_TLS_DTPREL32:          howto manager.      (line 1870)
+* BFD_RELOC_RISCV_TLS_DTPREL64:          howto manager.      (line 1872)
+* BFD_RELOC_RISCV_TLS_GD_HI20:           howto manager.      (line 1867)
+* BFD_RELOC_RISCV_TLS_GOT_HI20:          howto manager.      (line 1866)
+* BFD_RELOC_RISCV_TLS_TPREL32:           howto manager.      (line 1873)
+* BFD_RELOC_RISCV_TLS_TPREL64:           howto manager.      (line 1874)
+* BFD_RELOC_RISCV_TPREL_ADD:             howto manager.      (line 1854)
+* BFD_RELOC_RISCV_TPREL_HI20:            howto manager.      (line 1851)
+* BFD_RELOC_RISCV_TPREL_LO12_I:          howto manager.      (line 1852)
+* BFD_RELOC_RISCV_TPREL_LO12_S:          howto manager.      (line 1853)
+* BFD_RELOC_RL78_16U:                    howto manager.      (line 1897)
+* BFD_RELOC_RL78_16_OP:                  howto manager.      (line 1893)
+* BFD_RELOC_RL78_24U:                    howto manager.      (line 1898)
+* BFD_RELOC_RL78_24_OP:                  howto manager.      (line 1894)
+* BFD_RELOC_RL78_32_OP:                  howto manager.      (line 1895)
+* BFD_RELOC_RL78_8U:                     howto manager.      (line 1896)
+* BFD_RELOC_RL78_ABS16:                  howto manager.      (line 1910)
+* BFD_RELOC_RL78_ABS16U:                 howto manager.      (line 1914)
+* BFD_RELOC_RL78_ABS16UL:                howto manager.      (line 1916)
+* BFD_RELOC_RL78_ABS16UW:                howto manager.      (line 1915)
+* BFD_RELOC_RL78_ABS16_REV:              howto manager.      (line 1911)
+* BFD_RELOC_RL78_ABS32:                  howto manager.      (line 1912)
+* BFD_RELOC_RL78_ABS32_REV:              howto manager.      (line 1913)
+* BFD_RELOC_RL78_ABS8:                   howto manager.      (line 1909)
+* BFD_RELOC_RL78_CODE:                   howto manager.      (line 1921)
+* BFD_RELOC_RL78_DIFF:                   howto manager.      (line 1900)
+* BFD_RELOC_RL78_DIR3U_PCREL:            howto manager.      (line 1899)
+* BFD_RELOC_RL78_GPRELB:                 howto manager.      (line 1901)
+* BFD_RELOC_RL78_GPRELL:                 howto manager.      (line 1903)
+* BFD_RELOC_RL78_GPRELW:                 howto manager.      (line 1902)
+* BFD_RELOC_RL78_HI16:                   howto manager.      (line 1918)
+* BFD_RELOC_RL78_HI8:                    howto manager.      (line 1919)
+* BFD_RELOC_RL78_LO16:                   howto manager.      (line 1920)
+* BFD_RELOC_RL78_NEG16:                  howto manager.      (line 1890)
+* BFD_RELOC_RL78_NEG24:                  howto manager.      (line 1891)
+* BFD_RELOC_RL78_NEG32:                  howto manager.      (line 1892)
+* BFD_RELOC_RL78_NEG8:                   howto manager.      (line 1889)
+* BFD_RELOC_RL78_OP_AND:                 howto manager.      (line 1907)
+* BFD_RELOC_RL78_OP_NEG:                 howto manager.      (line 1906)
+* BFD_RELOC_RL78_OP_SHRA:                howto manager.      (line 1908)
+* BFD_RELOC_RL78_OP_SUBTRACT:            howto manager.      (line 1905)
+* BFD_RELOC_RL78_RELAX:                  howto manager.      (line 1917)
+* BFD_RELOC_RL78_SADDR:                  howto manager.      (line 1922)
+* BFD_RELOC_RL78_SYM:                    howto manager.      (line 1904)
 * BFD_RELOC_RVA:                         howto manager.      (line   95)
-* BFD_RELOC_RX_16U:                      howto manager.      (line 1930)
-* BFD_RELOC_RX_16_OP:                    howto manager.      (line 1926)
-* BFD_RELOC_RX_24U:                      howto manager.      (line 1931)
-* BFD_RELOC_RX_24_OP:                    howto manager.      (line 1927)
-* BFD_RELOC_RX_32_OP:                    howto manager.      (line 1928)
-* BFD_RELOC_RX_8U:                       howto manager.      (line 1929)
-* BFD_RELOC_RX_ABS16:                    howto manager.      (line 1941)
-* BFD_RELOC_RX_ABS16U:                   howto manager.      (line 1945)
-* BFD_RELOC_RX_ABS16UL:                  howto manager.      (line 1947)
-* BFD_RELOC_RX_ABS16UW:                  howto manager.      (line 1946)
-* BFD_RELOC_RX_ABS16_REV:                howto manager.      (line 1942)
-* BFD_RELOC_RX_ABS32:                    howto manager.      (line 1943)
-* BFD_RELOC_RX_ABS32_REV:                howto manager.      (line 1944)
-* BFD_RELOC_RX_ABS8:                     howto manager.      (line 1940)
-* BFD_RELOC_RX_DIFF:                     howto manager.      (line 1933)
-* BFD_RELOC_RX_DIR3U_PCREL:              howto manager.      (line 1932)
-* BFD_RELOC_RX_GPRELB:                   howto manager.      (line 1934)
-* BFD_RELOC_RX_GPRELL:                   howto manager.      (line 1936)
-* BFD_RELOC_RX_GPRELW:                   howto manager.      (line 1935)
-* BFD_RELOC_RX_NEG16:                    howto manager.      (line 1923)
-* BFD_RELOC_RX_NEG24:                    howto manager.      (line 1924)
-* BFD_RELOC_RX_NEG32:                    howto manager.      (line 1925)
-* BFD_RELOC_RX_NEG8:                     howto manager.      (line 1922)
-* BFD_RELOC_RX_OP_NEG:                   howto manager.      (line 1939)
-* BFD_RELOC_RX_OP_SUBTRACT:              howto manager.      (line 1938)
-* BFD_RELOC_RX_RELAX:                    howto manager.      (line 1948)
-* BFD_RELOC_RX_SYM:                      howto manager.      (line 1937)
-* BFD_RELOC_S12Z_15_PCREL:               howto manager.      (line 2260)
-* BFD_RELOC_S12Z_OPR:                    howto manager.      (line 3403)
-* BFD_RELOC_SCORE16_BRANCH:              howto manager.      (line 2051)
-* BFD_RELOC_SCORE16_JMP:                 howto manager.      (line 2049)
-* BFD_RELOC_SCORE_BCMP:                  howto manager.      (line 2053)
-* BFD_RELOC_SCORE_BRANCH:                howto manager.      (line 2043)
-* BFD_RELOC_SCORE_CALL15:                howto manager.      (line 2057)
-* BFD_RELOC_SCORE_DUMMY2:                howto manager.      (line 2040)
-* BFD_RELOC_SCORE_DUMMY_HI16:            howto manager.      (line 2058)
-* BFD_RELOC_SCORE_GOT15:                 howto manager.      (line 2055)
-* BFD_RELOC_SCORE_GOT_LO16:              howto manager.      (line 2056)
-* BFD_RELOC_SCORE_GPREL15:               howto manager.      (line 2038)
-* BFD_RELOC_SCORE_IMM30:                 howto manager.      (line 2045)
-* BFD_RELOC_SCORE_IMM32:                 howto manager.      (line 2047)
-* BFD_RELOC_SCORE_JMP:                   howto manager.      (line 2041)
-* BFD_RELOC_SH_ALIGN:                    howto manager.      (line  952)
-* BFD_RELOC_SH_CODE:                     howto manager.      (line  953)
-* BFD_RELOC_SH_COPY:                     howto manager.      (line  958)
-* BFD_RELOC_SH_COPY64:                   howto manager.      (line  983)
-* BFD_RELOC_SH_COUNT:                    howto manager.      (line  951)
-* BFD_RELOC_SH_DATA:                     howto manager.      (line  954)
-* BFD_RELOC_SH_DISP12:                   howto manager.      (line  934)
-* BFD_RELOC_SH_DISP12BY2:                howto manager.      (line  935)
-* BFD_RELOC_SH_DISP12BY4:                howto manager.      (line  936)
-* BFD_RELOC_SH_DISP12BY8:                howto manager.      (line  937)
-* BFD_RELOC_SH_DISP20:                   howto manager.      (line  938)
-* BFD_RELOC_SH_DISP20BY8:                howto manager.      (line  939)
-* BFD_RELOC_SH_FUNCDESC:                 howto manager.      (line 1026)
-* BFD_RELOC_SH_GLOB_DAT:                 howto manager.      (line  959)
-* BFD_RELOC_SH_GLOB_DAT64:               howto manager.      (line  984)
-* BFD_RELOC_SH_GOT10BY4:                 howto manager.      (line  987)
-* BFD_RELOC_SH_GOT10BY8:                 howto manager.      (line  988)
-* BFD_RELOC_SH_GOT20:                    howto manager.      (line 1020)
-* BFD_RELOC_SH_GOTFUNCDESC:              howto manager.      (line 1022)
-* BFD_RELOC_SH_GOTFUNCDESC20:            howto manager.      (line 1023)
-* BFD_RELOC_SH_GOTOFF20:                 howto manager.      (line 1021)
-* BFD_RELOC_SH_GOTOFFFUNCDESC:           howto manager.      (line 1024)
-* BFD_RELOC_SH_GOTOFFFUNCDESC20:         howto manager.      (line 1025)
-* BFD_RELOC_SH_GOTOFF_HI16:              howto manager.      (line  978)
-* BFD_RELOC_SH_GOTOFF_LOW16:             howto manager.      (line  975)
-* BFD_RELOC_SH_GOTOFF_MEDHI16:           howto manager.      (line  977)
-* BFD_RELOC_SH_GOTOFF_MEDLOW16:          howto manager.      (line  976)
-* BFD_RELOC_SH_GOTPC:                    howto manager.      (line  962)
-* BFD_RELOC_SH_GOTPC_HI16:               howto manager.      (line  982)
-* BFD_RELOC_SH_GOTPC_LOW16:              howto manager.      (line  979)
-* BFD_RELOC_SH_GOTPC_MEDHI16:            howto manager.      (line  981)
-* BFD_RELOC_SH_GOTPC_MEDLOW16:           howto manager.      (line  980)
-* BFD_RELOC_SH_GOTPLT10BY4:              howto manager.      (line  989)
-* BFD_RELOC_SH_GOTPLT10BY8:              howto manager.      (line  990)
-* BFD_RELOC_SH_GOTPLT32:                 howto manager.      (line  991)
-* BFD_RELOC_SH_GOTPLT_HI16:              howto manager.      (line  970)
-* BFD_RELOC_SH_GOTPLT_LOW16:             howto manager.      (line  967)
-* BFD_RELOC_SH_GOTPLT_MEDHI16:           howto manager.      (line  969)
-* BFD_RELOC_SH_GOTPLT_MEDLOW16:          howto manager.      (line  968)
-* BFD_RELOC_SH_GOT_HI16:                 howto manager.      (line  966)
-* BFD_RELOC_SH_GOT_LOW16:                howto manager.      (line  963)
-* BFD_RELOC_SH_GOT_MEDHI16:              howto manager.      (line  965)
-* BFD_RELOC_SH_GOT_MEDLOW16:             howto manager.      (line  964)
-* BFD_RELOC_SH_IMM3:                     howto manager.      (line  932)
-* BFD_RELOC_SH_IMM3U:                    howto manager.      (line  933)
-* BFD_RELOC_SH_IMM4:                     howto manager.      (line  940)
-* BFD_RELOC_SH_IMM4BY2:                  howto manager.      (line  941)
-* BFD_RELOC_SH_IMM4BY4:                  howto manager.      (line  942)
-* BFD_RELOC_SH_IMM8:                     howto manager.      (line  943)
-* BFD_RELOC_SH_IMM8BY2:                  howto manager.      (line  944)
-* BFD_RELOC_SH_IMM8BY4:                  howto manager.      (line  945)
-* BFD_RELOC_SH_IMMS10:                   howto manager.      (line  997)
-* BFD_RELOC_SH_IMMS10BY2:                howto manager.      (line  998)
-* BFD_RELOC_SH_IMMS10BY4:                howto manager.      (line  999)
-* BFD_RELOC_SH_IMMS10BY8:                howto manager.      (line 1000)
-* BFD_RELOC_SH_IMMS16:                   howto manager.      (line 1001)
-* BFD_RELOC_SH_IMMS6:                    howto manager.      (line  994)
-* BFD_RELOC_SH_IMMS6BY32:                howto manager.      (line  995)
-* BFD_RELOC_SH_IMMU16:                   howto manager.      (line 1002)
-* BFD_RELOC_SH_IMMU5:                    howto manager.      (line  993)
-* BFD_RELOC_SH_IMMU6:                    howto manager.      (line  996)
-* BFD_RELOC_SH_IMM_HI16:                 howto manager.      (line 1009)
-* BFD_RELOC_SH_IMM_HI16_PCREL:           howto manager.      (line 1010)
-* BFD_RELOC_SH_IMM_LOW16:                howto manager.      (line 1003)
-* BFD_RELOC_SH_IMM_LOW16_PCREL:          howto manager.      (line 1004)
-* BFD_RELOC_SH_IMM_MEDHI16:              howto manager.      (line 1007)
-* BFD_RELOC_SH_IMM_MEDHI16_PCREL:        howto manager.      (line 1008)
-* BFD_RELOC_SH_IMM_MEDLOW16:             howto manager.      (line 1005)
-* BFD_RELOC_SH_IMM_MEDLOW16_PCREL:       howto manager.      (line 1006)
-* BFD_RELOC_SH_JMP_SLOT:                 howto manager.      (line  960)
-* BFD_RELOC_SH_JMP_SLOT64:               howto manager.      (line  985)
-* BFD_RELOC_SH_LABEL:                    howto manager.      (line  955)
-* BFD_RELOC_SH_LOOP_END:                 howto manager.      (line  957)
-* BFD_RELOC_SH_LOOP_START:               howto manager.      (line  956)
-* BFD_RELOC_SH_PCDISP12BY2:              howto manager.      (line  931)
-* BFD_RELOC_SH_PCDISP8BY2:               howto manager.      (line  930)
-* BFD_RELOC_SH_PCRELIMM8BY2:             howto manager.      (line  946)
-* BFD_RELOC_SH_PCRELIMM8BY4:             howto manager.      (line  947)
-* BFD_RELOC_SH_PLT_HI16:                 howto manager.      (line  974)
-* BFD_RELOC_SH_PLT_LOW16:                howto manager.      (line  971)
-* BFD_RELOC_SH_PLT_MEDHI16:              howto manager.      (line  973)
-* BFD_RELOC_SH_PLT_MEDLOW16:             howto manager.      (line  972)
-* BFD_RELOC_SH_PT_16:                    howto manager.      (line 1011)
-* BFD_RELOC_SH_RELATIVE:                 howto manager.      (line  961)
-* BFD_RELOC_SH_RELATIVE64:               howto manager.      (line  986)
-* BFD_RELOC_SH_SHMEDIA_CODE:             howto manager.      (line  992)
-* BFD_RELOC_SH_SWITCH16:                 howto manager.      (line  948)
-* BFD_RELOC_SH_SWITCH32:                 howto manager.      (line  949)
-* BFD_RELOC_SH_TLS_DTPMOD32:             howto manager.      (line 1017)
-* BFD_RELOC_SH_TLS_DTPOFF32:             howto manager.      (line 1018)
-* BFD_RELOC_SH_TLS_GD_32:                howto manager.      (line 1012)
-* BFD_RELOC_SH_TLS_IE_32:                howto manager.      (line 1015)
-* BFD_RELOC_SH_TLS_LDO_32:               howto manager.      (line 1014)
-* BFD_RELOC_SH_TLS_LD_32:                howto manager.      (line 1013)
-* BFD_RELOC_SH_TLS_LE_32:                howto manager.      (line 1016)
-* BFD_RELOC_SH_TLS_TPOFF32:              howto manager.      (line 1019)
-* BFD_RELOC_SH_USES:                     howto manager.      (line  950)
+* BFD_RELOC_RX_16U:                      howto manager.      (line 1932)
+* BFD_RELOC_RX_16_OP:                    howto manager.      (line 1928)
+* BFD_RELOC_RX_24U:                      howto manager.      (line 1933)
+* BFD_RELOC_RX_24_OP:                    howto manager.      (line 1929)
+* BFD_RELOC_RX_32_OP:                    howto manager.      (line 1930)
+* BFD_RELOC_RX_8U:                       howto manager.      (line 1931)
+* BFD_RELOC_RX_ABS16:                    howto manager.      (line 1943)
+* BFD_RELOC_RX_ABS16U:                   howto manager.      (line 1947)
+* BFD_RELOC_RX_ABS16UL:                  howto manager.      (line 1949)
+* BFD_RELOC_RX_ABS16UW:                  howto manager.      (line 1948)
+* BFD_RELOC_RX_ABS16_REV:                howto manager.      (line 1944)
+* BFD_RELOC_RX_ABS32:                    howto manager.      (line 1945)
+* BFD_RELOC_RX_ABS32_REV:                howto manager.      (line 1946)
+* BFD_RELOC_RX_ABS8:                     howto manager.      (line 1942)
+* BFD_RELOC_RX_DIFF:                     howto manager.      (line 1935)
+* BFD_RELOC_RX_DIR3U_PCREL:              howto manager.      (line 1934)
+* BFD_RELOC_RX_GPRELB:                   howto manager.      (line 1936)
+* BFD_RELOC_RX_GPRELL:                   howto manager.      (line 1938)
+* BFD_RELOC_RX_GPRELW:                   howto manager.      (line 1937)
+* BFD_RELOC_RX_NEG16:                    howto manager.      (line 1925)
+* BFD_RELOC_RX_NEG24:                    howto manager.      (line 1926)
+* BFD_RELOC_RX_NEG32:                    howto manager.      (line 1927)
+* BFD_RELOC_RX_NEG8:                     howto manager.      (line 1924)
+* BFD_RELOC_RX_OP_NEG:                   howto manager.      (line 1941)
+* BFD_RELOC_RX_OP_SUBTRACT:              howto manager.      (line 1940)
+* BFD_RELOC_RX_RELAX:                    howto manager.      (line 1950)
+* BFD_RELOC_RX_SYM:                      howto manager.      (line 1939)
+* BFD_RELOC_S12Z_15_PCREL:               howto manager.      (line 2262)
+* BFD_RELOC_S12Z_OPR:                    howto manager.      (line 3520)
+* BFD_RELOC_SCORE16_BRANCH:              howto manager.      (line 2053)
+* BFD_RELOC_SCORE16_JMP:                 howto manager.      (line 2051)
+* BFD_RELOC_SCORE_BCMP:                  howto manager.      (line 2055)
+* BFD_RELOC_SCORE_BRANCH:                howto manager.      (line 2045)
+* BFD_RELOC_SCORE_CALL15:                howto manager.      (line 2059)
+* BFD_RELOC_SCORE_DUMMY2:                howto manager.      (line 2042)
+* BFD_RELOC_SCORE_DUMMY_HI16:            howto manager.      (line 2060)
+* BFD_RELOC_SCORE_GOT15:                 howto manager.      (line 2057)
+* BFD_RELOC_SCORE_GOT_LO16:              howto manager.      (line 2058)
+* BFD_RELOC_SCORE_GPREL15:               howto manager.      (line 2040)
+* BFD_RELOC_SCORE_IMM30:                 howto manager.      (line 2047)
+* BFD_RELOC_SCORE_IMM32:                 howto manager.      (line 2049)
+* BFD_RELOC_SCORE_JMP:                   howto manager.      (line 2043)
+* BFD_RELOC_SH_ALIGN:                    howto manager.      (line  969)
+* BFD_RELOC_SH_CODE:                     howto manager.      (line  970)
+* BFD_RELOC_SH_COPY:                     howto manager.      (line  975)
+* BFD_RELOC_SH_COPY64:                   howto manager.      (line 1000)
+* BFD_RELOC_SH_COUNT:                    howto manager.      (line  968)
+* BFD_RELOC_SH_DATA:                     howto manager.      (line  971)
+* BFD_RELOC_SH_DISP12:                   howto manager.      (line  951)
+* BFD_RELOC_SH_DISP12BY2:                howto manager.      (line  952)
+* BFD_RELOC_SH_DISP12BY4:                howto manager.      (line  953)
+* BFD_RELOC_SH_DISP12BY8:                howto manager.      (line  954)
+* BFD_RELOC_SH_DISP20:                   howto manager.      (line  955)
+* BFD_RELOC_SH_DISP20BY8:                howto manager.      (line  956)
+* BFD_RELOC_SH_FUNCDESC:                 howto manager.      (line 1043)
+* BFD_RELOC_SH_GLOB_DAT:                 howto manager.      (line  976)
+* BFD_RELOC_SH_GLOB_DAT64:               howto manager.      (line 1001)
+* BFD_RELOC_SH_GOT10BY4:                 howto manager.      (line 1004)
+* BFD_RELOC_SH_GOT10BY8:                 howto manager.      (line 1005)
+* BFD_RELOC_SH_GOT20:                    howto manager.      (line 1037)
+* BFD_RELOC_SH_GOTFUNCDESC:              howto manager.      (line 1039)
+* BFD_RELOC_SH_GOTFUNCDESC20:            howto manager.      (line 1040)
+* BFD_RELOC_SH_GOTOFF20:                 howto manager.      (line 1038)
+* BFD_RELOC_SH_GOTOFFFUNCDESC:           howto manager.      (line 1041)
+* BFD_RELOC_SH_GOTOFFFUNCDESC20:         howto manager.      (line 1042)
+* BFD_RELOC_SH_GOTOFF_HI16:              howto manager.      (line  995)
+* BFD_RELOC_SH_GOTOFF_LOW16:             howto manager.      (line  992)
+* BFD_RELOC_SH_GOTOFF_MEDHI16:           howto manager.      (line  994)
+* BFD_RELOC_SH_GOTOFF_MEDLOW16:          howto manager.      (line  993)
+* BFD_RELOC_SH_GOTPC:                    howto manager.      (line  979)
+* BFD_RELOC_SH_GOTPC_HI16:               howto manager.      (line  999)
+* BFD_RELOC_SH_GOTPC_LOW16:              howto manager.      (line  996)
+* BFD_RELOC_SH_GOTPC_MEDHI16:            howto manager.      (line  998)
+* BFD_RELOC_SH_GOTPC_MEDLOW16:           howto manager.      (line  997)
+* BFD_RELOC_SH_GOTPLT10BY4:              howto manager.      (line 1006)
+* BFD_RELOC_SH_GOTPLT10BY8:              howto manager.      (line 1007)
+* BFD_RELOC_SH_GOTPLT32:                 howto manager.      (line 1008)
+* BFD_RELOC_SH_GOTPLT_HI16:              howto manager.      (line  987)
+* BFD_RELOC_SH_GOTPLT_LOW16:             howto manager.      (line  984)
+* BFD_RELOC_SH_GOTPLT_MEDHI16:           howto manager.      (line  986)
+* BFD_RELOC_SH_GOTPLT_MEDLOW16:          howto manager.      (line  985)
+* BFD_RELOC_SH_GOT_HI16:                 howto manager.      (line  983)
+* BFD_RELOC_SH_GOT_LOW16:                howto manager.      (line  980)
+* BFD_RELOC_SH_GOT_MEDHI16:              howto manager.      (line  982)
+* BFD_RELOC_SH_GOT_MEDLOW16:             howto manager.      (line  981)
+* BFD_RELOC_SH_IMM3:                     howto manager.      (line  949)
+* BFD_RELOC_SH_IMM3U:                    howto manager.      (line  950)
+* BFD_RELOC_SH_IMM4:                     howto manager.      (line  957)
+* BFD_RELOC_SH_IMM4BY2:                  howto manager.      (line  958)
+* BFD_RELOC_SH_IMM4BY4:                  howto manager.      (line  959)
+* BFD_RELOC_SH_IMM8:                     howto manager.      (line  960)
+* BFD_RELOC_SH_IMM8BY2:                  howto manager.      (line  961)
+* BFD_RELOC_SH_IMM8BY4:                  howto manager.      (line  962)
+* BFD_RELOC_SH_IMMS10:                   howto manager.      (line 1014)
+* BFD_RELOC_SH_IMMS10BY2:                howto manager.      (line 1015)
+* BFD_RELOC_SH_IMMS10BY4:                howto manager.      (line 1016)
+* BFD_RELOC_SH_IMMS10BY8:                howto manager.      (line 1017)
+* BFD_RELOC_SH_IMMS16:                   howto manager.      (line 1018)
+* BFD_RELOC_SH_IMMS6:                    howto manager.      (line 1011)
+* BFD_RELOC_SH_IMMS6BY32:                howto manager.      (line 1012)
+* BFD_RELOC_SH_IMMU16:                   howto manager.      (line 1019)
+* BFD_RELOC_SH_IMMU5:                    howto manager.      (line 1010)
+* BFD_RELOC_SH_IMMU6:                    howto manager.      (line 1013)
+* BFD_RELOC_SH_IMM_HI16:                 howto manager.      (line 1026)
+* BFD_RELOC_SH_IMM_HI16_PCREL:           howto manager.      (line 1027)
+* BFD_RELOC_SH_IMM_LOW16:                howto manager.      (line 1020)
+* BFD_RELOC_SH_IMM_LOW16_PCREL:          howto manager.      (line 1021)
+* BFD_RELOC_SH_IMM_MEDHI16:              howto manager.      (line 1024)
+* BFD_RELOC_SH_IMM_MEDHI16_PCREL:        howto manager.      (line 1025)
+* BFD_RELOC_SH_IMM_MEDLOW16:             howto manager.      (line 1022)
+* BFD_RELOC_SH_IMM_MEDLOW16_PCREL:       howto manager.      (line 1023)
+* BFD_RELOC_SH_JMP_SLOT:                 howto manager.      (line  977)
+* BFD_RELOC_SH_JMP_SLOT64:               howto manager.      (line 1002)
+* BFD_RELOC_SH_LABEL:                    howto manager.      (line  972)
+* BFD_RELOC_SH_LOOP_END:                 howto manager.      (line  974)
+* BFD_RELOC_SH_LOOP_START:               howto manager.      (line  973)
+* BFD_RELOC_SH_PCDISP12BY2:              howto manager.      (line  948)
+* BFD_RELOC_SH_PCDISP8BY2:               howto manager.      (line  947)
+* BFD_RELOC_SH_PCRELIMM8BY2:             howto manager.      (line  963)
+* BFD_RELOC_SH_PCRELIMM8BY4:             howto manager.      (line  964)
+* BFD_RELOC_SH_PLT_HI16:                 howto manager.      (line  991)
+* BFD_RELOC_SH_PLT_LOW16:                howto manager.      (line  988)
+* BFD_RELOC_SH_PLT_MEDHI16:              howto manager.      (line  990)
+* BFD_RELOC_SH_PLT_MEDLOW16:             howto manager.      (line  989)
+* BFD_RELOC_SH_PT_16:                    howto manager.      (line 1028)
+* BFD_RELOC_SH_RELATIVE:                 howto manager.      (line  978)
+* BFD_RELOC_SH_RELATIVE64:               howto manager.      (line 1003)
+* BFD_RELOC_SH_SHMEDIA_CODE:             howto manager.      (line 1009)
+* BFD_RELOC_SH_SWITCH16:                 howto manager.      (line  965)
+* BFD_RELOC_SH_SWITCH32:                 howto manager.      (line  966)
+* BFD_RELOC_SH_TLS_DTPMOD32:             howto manager.      (line 1034)
+* BFD_RELOC_SH_TLS_DTPOFF32:             howto manager.      (line 1035)
+* BFD_RELOC_SH_TLS_GD_32:                howto manager.      (line 1029)
+* BFD_RELOC_SH_TLS_IE_32:                howto manager.      (line 1032)
+* BFD_RELOC_SH_TLS_LDO_32:               howto manager.      (line 1031)
+* BFD_RELOC_SH_TLS_LD_32:                howto manager.      (line 1030)
+* BFD_RELOC_SH_TLS_LE_32:                howto manager.      (line 1033)
+* BFD_RELOC_SH_TLS_TPOFF32:              howto manager.      (line 1036)
+* BFD_RELOC_SH_USES:                     howto manager.      (line  967)
 * BFD_RELOC_SIZE32:                      howto manager.      (line   67)
 * BFD_RELOC_SIZE64:                      howto manager.      (line   68)
 * BFD_RELOC_SPARC13:                     howto manager.      (line  121)
@@ -14192,283 +14197,286 @@ BFD Index
 * BFD_RELOC_SPU_PCREL9b:                 howto manager.      (line  211)
 * BFD_RELOC_SPU_PPU32:                   howto manager.      (line  215)
 * BFD_RELOC_SPU_PPU64:                   howto manager.      (line  216)
-* BFD_RELOC_THUMB_PCREL_BFCSEL:          howto manager.      (line  782)
-* BFD_RELOC_THUMB_PCREL_BLX:             howto manager.      (line  771)
-* BFD_RELOC_THUMB_PCREL_BRANCH12:        howto manager.      (line  794)
-* BFD_RELOC_THUMB_PCREL_BRANCH20:        howto manager.      (line  795)
-* BFD_RELOC_THUMB_PCREL_BRANCH23:        howto manager.      (line  796)
-* BFD_RELOC_THUMB_PCREL_BRANCH25:        howto manager.      (line  797)
-* BFD_RELOC_THUMB_PCREL_BRANCH5:         howto manager.      (line  780)
-* BFD_RELOC_THUMB_PCREL_BRANCH7:         howto manager.      (line  792)
-* BFD_RELOC_THUMB_PCREL_BRANCH9:         howto manager.      (line  793)
-* BFD_RELOC_TIC30_LDP:                   howto manager.      (line 1549)
-* BFD_RELOC_TIC54X_16_OF_23:             howto manager.      (line 1563)
-* BFD_RELOC_TIC54X_23:                   howto manager.      (line 1561)
-* BFD_RELOC_TIC54X_MS7_OF_23:            howto manager.      (line 1567)
-* BFD_RELOC_TIC54X_PARTLS7:              howto manager.      (line 1553)
-* BFD_RELOC_TIC54X_PARTMS9:              howto manager.      (line 1557)
-* BFD_RELOC_TILEGX_BROFF_X1:             howto manager.      (line 3198)
-* BFD_RELOC_TILEGX_COPY:                 howto manager.      (line 3194)
-* BFD_RELOC_TILEGX_DEST_IMM8_X1:         howto manager.      (line 3205)
-* BFD_RELOC_TILEGX_GLOB_DAT:             howto manager.      (line 3195)
-* BFD_RELOC_TILEGX_HW0:                  howto manager.      (line 3187)
-* BFD_RELOC_TILEGX_HW0_LAST:             howto manager.      (line 3191)
-* BFD_RELOC_TILEGX_HW1:                  howto manager.      (line 3188)
-* BFD_RELOC_TILEGX_HW1_LAST:             howto manager.      (line 3192)
-* BFD_RELOC_TILEGX_HW2:                  howto manager.      (line 3189)
-* BFD_RELOC_TILEGX_HW2_LAST:             howto manager.      (line 3193)
-* BFD_RELOC_TILEGX_HW3:                  howto manager.      (line 3190)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0:         howto manager.      (line 3214)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT:     howto manager.      (line 3242)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST:    howto manager.      (line 3222)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT: howto manager.     (line 3250)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL: howto manager.   (line 3236)
+* BFD_RELOC_THUMB_PCREL_BFCSEL:          howto manager.      (line  799)
+* BFD_RELOC_THUMB_PCREL_BLX:             howto manager.      (line  788)
+* BFD_RELOC_THUMB_PCREL_BRANCH12:        howto manager.      (line  811)
+* BFD_RELOC_THUMB_PCREL_BRANCH20:        howto manager.      (line  812)
+* BFD_RELOC_THUMB_PCREL_BRANCH23:        howto manager.      (line  813)
+* BFD_RELOC_THUMB_PCREL_BRANCH25:        howto manager.      (line  814)
+* BFD_RELOC_THUMB_PCREL_BRANCH5:         howto manager.      (line  797)
+* BFD_RELOC_THUMB_PCREL_BRANCH7:         howto manager.      (line  809)
+* BFD_RELOC_THUMB_PCREL_BRANCH9:         howto manager.      (line  810)
+* BFD_RELOC_TIC30_LDP:                   howto manager.      (line 1554)
+* BFD_RELOC_TIC54X_16_OF_23:             howto manager.      (line 1568)
+* BFD_RELOC_TIC54X_23:                   howto manager.      (line 1566)
+* BFD_RELOC_TIC54X_MS7_OF_23:            howto manager.      (line 1572)
+* BFD_RELOC_TIC54X_PARTLS7:              howto manager.      (line 1558)
+* BFD_RELOC_TIC54X_PARTMS9:              howto manager.      (line 1562)
+* BFD_RELOC_TILEGX_BROFF_X1:             howto manager.      (line 3316)
+* BFD_RELOC_TILEGX_COPY:                 howto manager.      (line 3312)
+* BFD_RELOC_TILEGX_DEST_IMM8_X1:         howto manager.      (line 3323)
+* BFD_RELOC_TILEGX_GLOB_DAT:             howto manager.      (line 3313)
+* BFD_RELOC_TILEGX_HW0:                  howto manager.      (line 3305)
+* BFD_RELOC_TILEGX_HW0_LAST:             howto manager.      (line 3309)
+* BFD_RELOC_TILEGX_HW1:                  howto manager.      (line 3306)
+* BFD_RELOC_TILEGX_HW1_LAST:             howto manager.      (line 3310)
+* BFD_RELOC_TILEGX_HW2:                  howto manager.      (line 3307)
+* BFD_RELOC_TILEGX_HW2_LAST:             howto manager.      (line 3311)
+* BFD_RELOC_TILEGX_HW3:                  howto manager.      (line 3308)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0:         howto manager.      (line 3332)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT:     howto manager.      (line 3360)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST:    howto manager.      (line 3340)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT: howto manager.     (line 3368)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL: howto manager.   (line 3354)
 * BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL: howto manager.
-                                                             (line 3270)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: howto manager.  (line 3264)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: howto manager.  (line 3276)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE: howto manager.  (line 3260)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL:   howto manager.      (line 3228)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL: howto manager.    (line 3244)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD:  howto manager.      (line 3256)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE:  howto manager.      (line 3268)
-* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE:  howto manager.      (line 3258)
-* BFD_RELOC_TILEGX_IMM16_X0_HW1:         howto manager.      (line 3216)
-* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST:    howto manager.      (line 3224)
-* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT: howto manager.     (line 3252)
-* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL: howto manager.   (line 3238)
+                                                             (line 3388)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: howto manager.  (line 3382)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: howto manager.  (line 3394)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE: howto manager.  (line 3378)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL:   howto manager.      (line 3346)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL: howto manager.    (line 3362)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD:  howto manager.      (line 3374)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE:  howto manager.      (line 3386)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE:  howto manager.      (line 3376)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1:         howto manager.      (line 3334)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST:    howto manager.      (line 3342)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT: howto manager.     (line 3370)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL: howto manager.   (line 3356)
 * BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL: howto manager.
-                                                             (line 3272)
-* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: howto manager.  (line 3266)
-* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: howto manager.  (line 3278)
-* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: howto manager.  (line 3262)
-* BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL:   howto manager.      (line 3230)
-* BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL: howto manager.    (line 3246)
-* BFD_RELOC_TILEGX_IMM16_X0_HW2:         howto manager.      (line 3218)
-* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST:    howto manager.      (line 3226)
-* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL: howto manager.   (line 3240)
+                                                             (line 3390)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: howto manager.  (line 3384)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: howto manager.  (line 3396)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: howto manager.  (line 3380)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL:   howto manager.      (line 3348)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL: howto manager.    (line 3364)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2:         howto manager.      (line 3336)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST:    howto manager.      (line 3344)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL: howto manager.   (line 3358)
 * BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL: howto manager.
-                                                             (line 3274)
-* BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL:   howto manager.      (line 3232)
-* BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL: howto manager.    (line 3248)
-* BFD_RELOC_TILEGX_IMM16_X0_HW3:         howto manager.      (line 3220)
-* BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL:   howto manager.      (line 3234)
-* BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL: howto manager.    (line 3254)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0:         howto manager.      (line 3215)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT:     howto manager.      (line 3243)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST:    howto manager.      (line 3223)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT: howto manager.     (line 3251)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL: howto manager.   (line 3237)
+                                                             (line 3392)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL:   howto manager.      (line 3350)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL: howto manager.    (line 3366)
+* BFD_RELOC_TILEGX_IMM16_X0_HW3:         howto manager.      (line 3338)
+* BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL:   howto manager.      (line 3352)
+* BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL: howto manager.    (line 3372)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0:         howto manager.      (line 3333)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT:     howto manager.      (line 3361)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST:    howto manager.      (line 3341)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT: howto manager.     (line 3369)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL: howto manager.   (line 3355)
 * BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL: howto manager.
-                                                             (line 3271)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: howto manager.  (line 3265)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: howto manager.  (line 3277)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: howto manager.  (line 3261)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL:   howto manager.      (line 3229)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL: howto manager.    (line 3245)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD:  howto manager.      (line 3257)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE:  howto manager.      (line 3269)
-* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE:  howto manager.      (line 3259)
-* BFD_RELOC_TILEGX_IMM16_X1_HW1:         howto manager.      (line 3217)
-* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST:    howto manager.      (line 3225)
-* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT: howto manager.     (line 3253)
-* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL: howto manager.   (line 3239)
+                                                             (line 3389)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: howto manager.  (line 3383)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: howto manager.  (line 3395)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: howto manager.  (line 3379)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL:   howto manager.      (line 3347)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL: howto manager.    (line 3363)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD:  howto manager.      (line 3375)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE:  howto manager.      (line 3387)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE:  howto manager.      (line 3377)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1:         howto manager.      (line 3335)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST:    howto manager.      (line 3343)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT: howto manager.     (line 3371)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL: howto manager.   (line 3357)
 * BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL: howto manager.
-                                                             (line 3273)
-* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: howto manager.  (line 3267)
-* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: howto manager.  (line 3279)
-* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: howto manager.  (line 3263)
-* BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL:   howto manager.      (line 3231)
-* BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL: howto manager.    (line 3247)
-* BFD_RELOC_TILEGX_IMM16_X1_HW2:         howto manager.      (line 3219)
-* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST:    howto manager.      (line 3227)
-* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL: howto manager.   (line 3241)
+                                                             (line 3391)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: howto manager.  (line 3385)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: howto manager.  (line 3397)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: howto manager.  (line 3381)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL:   howto manager.      (line 3349)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL: howto manager.    (line 3365)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2:         howto manager.      (line 3337)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST:    howto manager.      (line 3345)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL: howto manager.   (line 3359)
 * BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL: howto manager.
-                                                             (line 3275)
-* BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL:   howto manager.      (line 3233)
-* BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL: howto manager.    (line 3249)
-* BFD_RELOC_TILEGX_IMM16_X1_HW3:         howto manager.      (line 3221)
-* BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL:   howto manager.      (line 3235)
-* BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL: howto manager.    (line 3255)
-* BFD_RELOC_TILEGX_IMM8_X0:              howto manager.      (line 3201)
-* BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD:      howto manager.      (line 3292)
-* BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD:   howto manager.      (line 3287)
-* BFD_RELOC_TILEGX_IMM8_X1:              howto manager.      (line 3203)
-* BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD:      howto manager.      (line 3293)
-* BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD:   howto manager.      (line 3288)
-* BFD_RELOC_TILEGX_IMM8_Y0:              howto manager.      (line 3202)
-* BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD:      howto manager.      (line 3294)
-* BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD:   howto manager.      (line 3289)
-* BFD_RELOC_TILEGX_IMM8_Y1:              howto manager.      (line 3204)
-* BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD:      howto manager.      (line 3295)
-* BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD:   howto manager.      (line 3290)
-* BFD_RELOC_TILEGX_JMP_SLOT:             howto manager.      (line 3196)
-* BFD_RELOC_TILEGX_JUMPOFF_X1:           howto manager.      (line 3199)
-* BFD_RELOC_TILEGX_JUMPOFF_X1_PLT:       howto manager.      (line 3200)
-* BFD_RELOC_TILEGX_MF_IMM14_X1:          howto manager.      (line 3207)
-* BFD_RELOC_TILEGX_MMEND_X0:             howto manager.      (line 3209)
-* BFD_RELOC_TILEGX_MMSTART_X0:           howto manager.      (line 3208)
-* BFD_RELOC_TILEGX_MT_IMM14_X1:          howto manager.      (line 3206)
-* BFD_RELOC_TILEGX_RELATIVE:             howto manager.      (line 3197)
-* BFD_RELOC_TILEGX_SHAMT_X0:             howto manager.      (line 3210)
-* BFD_RELOC_TILEGX_SHAMT_X1:             howto manager.      (line 3211)
-* BFD_RELOC_TILEGX_SHAMT_Y0:             howto manager.      (line 3212)
-* BFD_RELOC_TILEGX_SHAMT_Y1:             howto manager.      (line 3213)
-* BFD_RELOC_TILEGX_TLS_DTPMOD32:         howto manager.      (line 3283)
-* BFD_RELOC_TILEGX_TLS_DTPMOD64:         howto manager.      (line 3280)
-* BFD_RELOC_TILEGX_TLS_DTPOFF32:         howto manager.      (line 3284)
-* BFD_RELOC_TILEGX_TLS_DTPOFF64:         howto manager.      (line 3281)
-* BFD_RELOC_TILEGX_TLS_GD_CALL:          howto manager.      (line 3286)
-* BFD_RELOC_TILEGX_TLS_IE_LOAD:          howto manager.      (line 3291)
-* BFD_RELOC_TILEGX_TLS_TPOFF32:          howto manager.      (line 3285)
-* BFD_RELOC_TILEGX_TLS_TPOFF64:          howto manager.      (line 3282)
-* BFD_RELOC_TILEPRO_BROFF_X1:            howto manager.      (line 3111)
-* BFD_RELOC_TILEPRO_COPY:                howto manager.      (line 3107)
-* BFD_RELOC_TILEPRO_DEST_IMM8_X1:        howto manager.      (line 3118)
-* BFD_RELOC_TILEPRO_GLOB_DAT:            howto manager.      (line 3108)
-* BFD_RELOC_TILEPRO_IMM16_X0:            howto manager.      (line 3121)
-* BFD_RELOC_TILEPRO_IMM16_X0_GOT:        howto manager.      (line 3137)
-* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA:     howto manager.      (line 3143)
-* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI:     howto manager.      (line 3141)
-* BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO:     howto manager.      (line 3139)
-* BFD_RELOC_TILEPRO_IMM16_X0_HA:         howto manager.      (line 3127)
-* BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL:   howto manager.      (line 3135)
-* BFD_RELOC_TILEPRO_IMM16_X0_HI:         howto manager.      (line 3125)
-* BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL:   howto manager.      (line 3133)
-* BFD_RELOC_TILEPRO_IMM16_X0_LO:         howto manager.      (line 3123)
-* BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL:   howto manager.      (line 3131)
-* BFD_RELOC_TILEPRO_IMM16_X0_PCREL:      howto manager.      (line 3129)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD:     howto manager.      (line 3159)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA:  howto manager.      (line 3165)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI:  howto manager.      (line 3163)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO:  howto manager.      (line 3161)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE:     howto manager.      (line 3167)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA:  howto manager.      (line 3173)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI:  howto manager.      (line 3171)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO:  howto manager.      (line 3169)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE:     howto manager.      (line 3178)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA:  howto manager.      (line 3184)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI:  howto manager.      (line 3182)
-* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO:  howto manager.      (line 3180)
-* BFD_RELOC_TILEPRO_IMM16_X1:            howto manager.      (line 3122)
-* BFD_RELOC_TILEPRO_IMM16_X1_GOT:        howto manager.      (line 3138)
-* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA:     howto manager.      (line 3144)
-* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI:     howto manager.      (line 3142)
-* BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO:     howto manager.      (line 3140)
-* BFD_RELOC_TILEPRO_IMM16_X1_HA:         howto manager.      (line 3128)
-* BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL:   howto manager.      (line 3136)
-* BFD_RELOC_TILEPRO_IMM16_X1_HI:         howto manager.      (line 3126)
-* BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL:   howto manager.      (line 3134)
-* BFD_RELOC_TILEPRO_IMM16_X1_LO:         howto manager.      (line 3124)
-* BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL:   howto manager.      (line 3132)
-* BFD_RELOC_TILEPRO_IMM16_X1_PCREL:      howto manager.      (line 3130)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD:     howto manager.      (line 3160)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA:  howto manager.      (line 3166)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI:  howto manager.      (line 3164)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO:  howto manager.      (line 3162)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE:     howto manager.      (line 3168)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA:  howto manager.      (line 3174)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI:  howto manager.      (line 3172)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO:  howto manager.      (line 3170)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE:     howto manager.      (line 3179)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA:  howto manager.      (line 3185)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI:  howto manager.      (line 3183)
-* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO:  howto manager.      (line 3181)
-* BFD_RELOC_TILEPRO_IMM8_X0:             howto manager.      (line 3114)
-* BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD:  howto manager.      (line 3154)
-* BFD_RELOC_TILEPRO_IMM8_X1:             howto manager.      (line 3116)
-* BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD:  howto manager.      (line 3155)
-* BFD_RELOC_TILEPRO_IMM8_Y0:             howto manager.      (line 3115)
-* BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD:  howto manager.      (line 3156)
-* BFD_RELOC_TILEPRO_IMM8_Y1:             howto manager.      (line 3117)
-* BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD:  howto manager.      (line 3157)
-* BFD_RELOC_TILEPRO_JMP_SLOT:            howto manager.      (line 3109)
-* BFD_RELOC_TILEPRO_JOFFLONG_X1:         howto manager.      (line 3112)
-* BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT:     howto manager.      (line 3113)
-* BFD_RELOC_TILEPRO_MF_IMM15_X1:         howto manager.      (line 3120)
-* BFD_RELOC_TILEPRO_MMEND_X0:            howto manager.      (line 3146)
-* BFD_RELOC_TILEPRO_MMEND_X1:            howto manager.      (line 3148)
-* BFD_RELOC_TILEPRO_MMSTART_X0:          howto manager.      (line 3145)
-* BFD_RELOC_TILEPRO_MMSTART_X1:          howto manager.      (line 3147)
-* BFD_RELOC_TILEPRO_MT_IMM15_X1:         howto manager.      (line 3119)
-* BFD_RELOC_TILEPRO_RELATIVE:            howto manager.      (line 3110)
-* BFD_RELOC_TILEPRO_SHAMT_X0:            howto manager.      (line 3149)
-* BFD_RELOC_TILEPRO_SHAMT_X1:            howto manager.      (line 3150)
-* BFD_RELOC_TILEPRO_SHAMT_Y0:            howto manager.      (line 3151)
-* BFD_RELOC_TILEPRO_SHAMT_Y1:            howto manager.      (line 3152)
-* BFD_RELOC_TILEPRO_TLS_DTPMOD32:        howto manager.      (line 3175)
-* BFD_RELOC_TILEPRO_TLS_DTPOFF32:        howto manager.      (line 3176)
-* BFD_RELOC_TILEPRO_TLS_GD_CALL:         howto manager.      (line 3153)
-* BFD_RELOC_TILEPRO_TLS_IE_LOAD:         howto manager.      (line 3158)
-* BFD_RELOC_TILEPRO_TLS_TPOFF32:         howto manager.      (line 3177)
-* bfd_reloc_type_lookup:                 howto manager.      (line 3407)
-* BFD_RELOC_V850_16_GOT:                 howto manager.      (line 1525)
-* BFD_RELOC_V850_16_GOTOFF:              howto manager.      (line 1541)
-* BFD_RELOC_V850_16_PCREL:               howto manager.      (line 1505)
-* BFD_RELOC_V850_16_S1:                  howto manager.      (line 1517)
-* BFD_RELOC_V850_16_SPLIT_OFFSET:        howto manager.      (line 1515)
-* BFD_RELOC_V850_17_PCREL:               howto manager.      (line 1507)
-* BFD_RELOC_V850_22_PCREL:               howto manager.      (line 1459)
-* BFD_RELOC_V850_22_PLT_PCREL:           howto manager.      (line 1529)
-* BFD_RELOC_V850_23:                     howto manager.      (line 1509)
-* BFD_RELOC_V850_32_ABS:                 howto manager.      (line 1513)
-* BFD_RELOC_V850_32_GOT:                 howto manager.      (line 1527)
-* BFD_RELOC_V850_32_GOTOFF:              howto manager.      (line 1543)
-* BFD_RELOC_V850_32_GOTPCREL:            howto manager.      (line 1523)
-* BFD_RELOC_V850_32_PCREL:               howto manager.      (line 1511)
-* BFD_RELOC_V850_32_PLT_PCREL:           howto manager.      (line 1531)
-* BFD_RELOC_V850_9_PCREL:                howto manager.      (line 1457)
-* BFD_RELOC_V850_ALIGN:                  howto manager.      (line 1500)
-* BFD_RELOC_V850_CALLT_15_16_OFFSET:     howto manager.      (line 1521)
-* BFD_RELOC_V850_CALLT_16_16_OFFSET:     howto manager.      (line 1494)
-* BFD_RELOC_V850_CALLT_6_7_OFFSET:       howto manager.      (line 1492)
-* BFD_RELOC_V850_CODE:                   howto manager.      (line 1545)
-* BFD_RELOC_V850_COPY:                   howto manager.      (line 1533)
-* BFD_RELOC_V850_DATA:                   howto manager.      (line 1547)
-* BFD_RELOC_V850_GLOB_DAT:               howto manager.      (line 1535)
-* BFD_RELOC_V850_JMP_SLOT:               howto manager.      (line 1537)
-* BFD_RELOC_V850_LO16_S1:                howto manager.      (line 1519)
-* BFD_RELOC_V850_LO16_SPLIT_OFFSET:      howto manager.      (line 1502)
-* BFD_RELOC_V850_LONGCALL:               howto manager.      (line 1496)
-* BFD_RELOC_V850_LONGJUMP:               howto manager.      (line 1498)
-* BFD_RELOC_V850_RELATIVE:               howto manager.      (line 1539)
-* BFD_RELOC_V850_SDA_15_16_OFFSET:       howto manager.      (line 1463)
-* BFD_RELOC_V850_SDA_16_16_OFFSET:       howto manager.      (line 1461)
-* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager.      (line 1486)
-* BFD_RELOC_V850_TDA_16_16_OFFSET:       howto manager.      (line 1479)
-* BFD_RELOC_V850_TDA_4_4_OFFSET:         howto manager.      (line 1484)
-* BFD_RELOC_V850_TDA_4_5_OFFSET:         howto manager.      (line 1481)
-* BFD_RELOC_V850_TDA_6_8_OFFSET:         howto manager.      (line 1471)
-* BFD_RELOC_V850_TDA_7_7_OFFSET:         howto manager.      (line 1477)
-* BFD_RELOC_V850_TDA_7_8_OFFSET:         howto manager.      (line 1474)
-* BFD_RELOC_V850_ZDA_15_16_OFFSET:       howto manager.      (line 1468)
-* BFD_RELOC_V850_ZDA_16_16_OFFSET:       howto manager.      (line 1466)
-* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager.      (line 1489)
-* BFD_RELOC_VAX_GLOB_DAT:                howto manager.      (line 2423)
-* BFD_RELOC_VAX_JMP_SLOT:                howto manager.      (line 2424)
-* BFD_RELOC_VAX_RELATIVE:                howto manager.      (line 2425)
-* BFD_RELOC_VISIUM_HI16:                 howto manager.      (line 3318)
-* BFD_RELOC_VISIUM_HI16_PCREL:           howto manager.      (line 3322)
-* BFD_RELOC_VISIUM_IM16:                 howto manager.      (line 3320)
-* BFD_RELOC_VISIUM_IM16_PCREL:           howto manager.      (line 3324)
-* BFD_RELOC_VISIUM_LO16:                 howto manager.      (line 3319)
-* BFD_RELOC_VISIUM_LO16_PCREL:           howto manager.      (line 3323)
-* BFD_RELOC_VISIUM_REL16:                howto manager.      (line 3321)
-* BFD_RELOC_VPE4KMATH_DATA:              howto manager.      (line 2081)
-* BFD_RELOC_VPE4KMATH_INSN:              howto manager.      (line 2082)
-* BFD_RELOC_VTABLE_ENTRY:                howto manager.      (line 2085)
-* BFD_RELOC_VTABLE_INHERIT:              howto manager.      (line 2084)
-* BFD_RELOC_WASM32_ABS32_CODE:           howto manager.      (line 3331)
-* BFD_RELOC_WASM32_CODE_POINTER:         howto manager.      (line 3333)
-* BFD_RELOC_WASM32_COPY:                 howto manager.      (line 3332)
-* BFD_RELOC_WASM32_INDEX:                howto manager.      (line 3334)
-* BFD_RELOC_WASM32_LEB128:               howto manager.      (line 3326)
-* BFD_RELOC_WASM32_LEB128_GOT:           howto manager.      (line 3327)
-* BFD_RELOC_WASM32_LEB128_GOT_CODE:      howto manager.      (line 3328)
-* BFD_RELOC_WASM32_LEB128_PLT:           howto manager.      (line 3329)
-* BFD_RELOC_WASM32_PLT_INDEX:            howto manager.      (line 3330)
-* BFD_RELOC_WASM32_PLT_SIG:              howto manager.      (line 3335)
+                                                             (line 3393)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL:   howto manager.      (line 3351)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL: howto manager.    (line 3367)
+* BFD_RELOC_TILEGX_IMM16_X1_HW3:         howto manager.      (line 3339)
+* BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL:   howto manager.      (line 3353)
+* BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL: howto manager.    (line 3373)
+* BFD_RELOC_TILEGX_IMM8_X0:              howto manager.      (line 3319)
+* BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD:      howto manager.      (line 3410)
+* BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD:   howto manager.      (line 3405)
+* BFD_RELOC_TILEGX_IMM8_X1:              howto manager.      (line 3321)
+* BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD:      howto manager.      (line 3411)
+* BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD:   howto manager.      (line 3406)
+* BFD_RELOC_TILEGX_IMM8_Y0:              howto manager.      (line 3320)
+* BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD:      howto manager.      (line 3412)
+* BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD:   howto manager.      (line 3407)
+* BFD_RELOC_TILEGX_IMM8_Y1:              howto manager.      (line 3322)
+* BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD:      howto manager.      (line 3413)
+* BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD:   howto manager.      (line 3408)
+* BFD_RELOC_TILEGX_JMP_SLOT:             howto manager.      (line 3314)
+* BFD_RELOC_TILEGX_JUMPOFF_X1:           howto manager.      (line 3317)
+* BFD_RELOC_TILEGX_JUMPOFF_X1_PLT:       howto manager.      (line 3318)
+* BFD_RELOC_TILEGX_MF_IMM14_X1:          howto manager.      (line 3325)
+* BFD_RELOC_TILEGX_MMEND_X0:             howto manager.      (line 3327)
+* BFD_RELOC_TILEGX_MMSTART_X0:           howto manager.      (line 3326)
+* BFD_RELOC_TILEGX_MT_IMM14_X1:          howto manager.      (line 3324)
+* BFD_RELOC_TILEGX_RELATIVE:             howto manager.      (line 3315)
+* BFD_RELOC_TILEGX_SHAMT_X0:             howto manager.      (line 3328)
+* BFD_RELOC_TILEGX_SHAMT_X1:             howto manager.      (line 3329)
+* BFD_RELOC_TILEGX_SHAMT_Y0:             howto manager.      (line 3330)
+* BFD_RELOC_TILEGX_SHAMT_Y1:             howto manager.      (line 3331)
+* BFD_RELOC_TILEGX_TLS_DTPMOD32:         howto manager.      (line 3401)
+* BFD_RELOC_TILEGX_TLS_DTPMOD64:         howto manager.      (line 3398)
+* BFD_RELOC_TILEGX_TLS_DTPOFF32:         howto manager.      (line 3402)
+* BFD_RELOC_TILEGX_TLS_DTPOFF64:         howto manager.      (line 3399)
+* BFD_RELOC_TILEGX_TLS_GD_CALL:          howto manager.      (line 3404)
+* BFD_RELOC_TILEGX_TLS_IE_LOAD:          howto manager.      (line 3409)
+* BFD_RELOC_TILEGX_TLS_TPOFF32:          howto manager.      (line 3403)
+* BFD_RELOC_TILEGX_TLS_TPOFF64:          howto manager.      (line 3400)
+* BFD_RELOC_TILEPRO_BROFF_X1:            howto manager.      (line 3229)
+* BFD_RELOC_TILEPRO_COPY:                howto manager.      (line 3225)
+* BFD_RELOC_TILEPRO_DEST_IMM8_X1:        howto manager.      (line 3236)
+* BFD_RELOC_TILEPRO_GLOB_DAT:            howto manager.      (line 3226)
+* BFD_RELOC_TILEPRO_IMM16_X0:            howto manager.      (line 3239)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT:        howto manager.      (line 3255)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA:     howto manager.      (line 3261)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI:     howto manager.      (line 3259)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO:     howto manager.      (line 3257)
+* BFD_RELOC_TILEPRO_IMM16_X0_HA:         howto manager.      (line 3245)
+* BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL:   howto manager.      (line 3253)
+* BFD_RELOC_TILEPRO_IMM16_X0_HI:         howto manager.      (line 3243)
+* BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL:   howto manager.      (line 3251)
+* BFD_RELOC_TILEPRO_IMM16_X0_LO:         howto manager.      (line 3241)
+* BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL:   howto manager.      (line 3249)
+* BFD_RELOC_TILEPRO_IMM16_X0_PCREL:      howto manager.      (line 3247)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD:     howto manager.      (line 3277)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA:  howto manager.      (line 3283)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI:  howto manager.      (line 3281)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO:  howto manager.      (line 3279)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE:     howto manager.      (line 3285)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA:  howto manager.      (line 3291)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI:  howto manager.      (line 3289)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO:  howto manager.      (line 3287)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE:     howto manager.      (line 3296)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA:  howto manager.      (line 3302)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI:  howto manager.      (line 3300)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO:  howto manager.      (line 3298)
+* BFD_RELOC_TILEPRO_IMM16_X1:            howto manager.      (line 3240)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT:        howto manager.      (line 3256)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA:     howto manager.      (line 3262)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI:     howto manager.      (line 3260)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO:     howto manager.      (line 3258)
+* BFD_RELOC_TILEPRO_IMM16_X1_HA:         howto manager.      (line 3246)
+* BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL:   howto manager.      (line 3254)
+* BFD_RELOC_TILEPRO_IMM16_X1_HI:         howto manager.      (line 3244)
+* BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL:   howto manager.      (line 3252)
+* BFD_RELOC_TILEPRO_IMM16_X1_LO:         howto manager.      (line 3242)
+* BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL:   howto manager.      (line 3250)
+* BFD_RELOC_TILEPRO_IMM16_X1_PCREL:      howto manager.      (line 3248)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD:     howto manager.      (line 3278)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA:  howto manager.      (line 3284)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI:  howto manager.      (line 3282)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO:  howto manager.      (line 3280)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE:     howto manager.      (line 3286)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA:  howto manager.      (line 3292)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI:  howto manager.      (line 3290)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO:  howto manager.      (line 3288)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE:     howto manager.      (line 3297)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA:  howto manager.      (line 3303)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI:  howto manager.      (line 3301)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO:  howto manager.      (line 3299)
+* BFD_RELOC_TILEPRO_IMM8_X0:             howto manager.      (line 3232)
+* BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD:  howto manager.      (line 3272)
+* BFD_RELOC_TILEPRO_IMM8_X1:             howto manager.      (line 3234)
+* BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD:  howto manager.      (line 3273)
+* BFD_RELOC_TILEPRO_IMM8_Y0:             howto manager.      (line 3233)
+* BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD:  howto manager.      (line 3274)
+* BFD_RELOC_TILEPRO_IMM8_Y1:             howto manager.      (line 3235)
+* BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD:  howto manager.      (line 3275)
+* BFD_RELOC_TILEPRO_JMP_SLOT:            howto manager.      (line 3227)
+* BFD_RELOC_TILEPRO_JOFFLONG_X1:         howto manager.      (line 3230)
+* BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT:     howto manager.      (line 3231)
+* BFD_RELOC_TILEPRO_MF_IMM15_X1:         howto manager.      (line 3238)
+* BFD_RELOC_TILEPRO_MMEND_X0:            howto manager.      (line 3264)
+* BFD_RELOC_TILEPRO_MMEND_X1:            howto manager.      (line 3266)
+* BFD_RELOC_TILEPRO_MMSTART_X0:          howto manager.      (line 3263)
+* BFD_RELOC_TILEPRO_MMSTART_X1:          howto manager.      (line 3265)
+* BFD_RELOC_TILEPRO_MT_IMM15_X1:         howto manager.      (line 3237)
+* BFD_RELOC_TILEPRO_RELATIVE:            howto manager.      (line 3228)
+* BFD_RELOC_TILEPRO_SHAMT_X0:            howto manager.      (line 3267)
+* BFD_RELOC_TILEPRO_SHAMT_X1:            howto manager.      (line 3268)
+* BFD_RELOC_TILEPRO_SHAMT_Y0:            howto manager.      (line 3269)
+* BFD_RELOC_TILEPRO_SHAMT_Y1:            howto manager.      (line 3270)
+* BFD_RELOC_TILEPRO_TLS_DTPMOD32:        howto manager.      (line 3293)
+* BFD_RELOC_TILEPRO_TLS_DTPOFF32:        howto manager.      (line 3294)
+* BFD_RELOC_TILEPRO_TLS_GD_CALL:         howto manager.      (line 3271)
+* BFD_RELOC_TILEPRO_TLS_IE_LOAD:         howto manager.      (line 3276)
+* BFD_RELOC_TILEPRO_TLS_TPOFF32:         howto manager.      (line 3295)
+* bfd_reloc_type_lookup:                 howto manager.      (line 3633)
+* BFD_RELOC_V850_16_GOT:                 howto manager.      (line 1539)
+* BFD_RELOC_V850_16_GOTOFF:              howto manager.      (line 1547)
+* BFD_RELOC_V850_16_PCREL:               howto manager.      (line 1520)
+* BFD_RELOC_V850_16_S1:                  howto manager.      (line 1532)
+* BFD_RELOC_V850_16_SPLIT_OFFSET:        howto manager.      (line 1530)
+* BFD_RELOC_V850_17_PCREL:               howto manager.      (line 1522)
+* BFD_RELOC_V850_22_PCREL:               howto manager.      (line 1474)
+* BFD_RELOC_V850_22_PLT_PCREL:           howto manager.      (line 1541)
+* BFD_RELOC_V850_23:                     howto manager.      (line 1524)
+* BFD_RELOC_V850_32_ABS:                 howto manager.      (line 1528)
+* BFD_RELOC_V850_32_GOT:                 howto manager.      (line 1540)
+* BFD_RELOC_V850_32_GOTOFF:              howto manager.      (line 1548)
+* BFD_RELOC_V850_32_GOTPCREL:            howto manager.      (line 1538)
+* BFD_RELOC_V850_32_PCREL:               howto manager.      (line 1526)
+* BFD_RELOC_V850_32_PLT_PCREL:           howto manager.      (line 1542)
+* BFD_RELOC_V850_9_PCREL:                howto manager.      (line 1472)
+* BFD_RELOC_V850_ALIGN:                  howto manager.      (line 1515)
+* BFD_RELOC_V850_CALLT_15_16_OFFSET:     howto manager.      (line 1536)
+* BFD_RELOC_V850_CALLT_16_16_OFFSET:     howto manager.      (line 1509)
+* BFD_RELOC_V850_CALLT_6_7_OFFSET:       howto manager.      (line 1507)
+* BFD_RELOC_V850_CODE:                   howto manager.      (line 1550)
+* BFD_RELOC_V850_COPY:                   howto manager.      (line 1543)
+* BFD_RELOC_V850_DATA:                   howto manager.      (line 1552)
+* BFD_RELOC_V850_GLOB_DAT:               howto manager.      (line 1544)
+* BFD_RELOC_V850_JMP_SLOT:               howto manager.      (line 1545)
+* BFD_RELOC_V850_LO16_S1:                howto manager.      (line 1534)
+* BFD_RELOC_V850_LO16_SPLIT_OFFSET:      howto manager.      (line 1517)
+* BFD_RELOC_V850_LONGCALL:               howto manager.      (line 1511)
+* BFD_RELOC_V850_LONGJUMP:               howto manager.      (line 1513)
+* BFD_RELOC_V850_RELATIVE:               howto manager.      (line 1546)
+* BFD_RELOC_V850_SDA_15_16_OFFSET:       howto manager.      (line 1478)
+* BFD_RELOC_V850_SDA_16_16_OFFSET:       howto manager.      (line 1476)
+* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager.      (line 1501)
+* BFD_RELOC_V850_TDA_16_16_OFFSET:       howto manager.      (line 1494)
+* BFD_RELOC_V850_TDA_4_4_OFFSET:         howto manager.      (line 1499)
+* BFD_RELOC_V850_TDA_4_5_OFFSET:         howto manager.      (line 1496)
+* BFD_RELOC_V850_TDA_6_8_OFFSET:         howto manager.      (line 1486)
+* BFD_RELOC_V850_TDA_7_7_OFFSET:         howto manager.      (line 1492)
+* BFD_RELOC_V850_TDA_7_8_OFFSET:         howto manager.      (line 1489)
+* BFD_RELOC_V850_ZDA_15_16_OFFSET:       howto manager.      (line 1483)
+* BFD_RELOC_V850_ZDA_16_16_OFFSET:       howto manager.      (line 1481)
+* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager.      (line 1504)
+* BFD_RELOC_VAX_GLOB_DAT:                howto manager.      (line 2421)
+* BFD_RELOC_VAX_JMP_SLOT:                howto manager.      (line 2422)
+* BFD_RELOC_VAX_RELATIVE:                howto manager.      (line 2423)
+* BFD_RELOC_VISIUM_HI16:                 howto manager.      (line 3435)
+* BFD_RELOC_VISIUM_HI16_PCREL:           howto manager.      (line 3439)
+* BFD_RELOC_VISIUM_IM16:                 howto manager.      (line 3437)
+* BFD_RELOC_VISIUM_IM16_PCREL:           howto manager.      (line 3441)
+* BFD_RELOC_VISIUM_LO16:                 howto manager.      (line 3436)
+* BFD_RELOC_VISIUM_LO16_PCREL:           howto manager.      (line 3440)
+* BFD_RELOC_VISIUM_REL16:                howto manager.      (line 3438)
+* BFD_RELOC_VPE4KMATH_DATA:              howto manager.      (line 2083)
+* BFD_RELOC_VPE4KMATH_INSN:              howto manager.      (line 2084)
+* BFD_RELOC_VTABLE_ENTRY:                howto manager.      (line 2087)
+* BFD_RELOC_VTABLE_INHERIT:              howto manager.      (line 2086)
+* BFD_RELOC_WASM32_ABS32_CODE:           howto manager.      (line 3448)
+* BFD_RELOC_WASM32_CODE_POINTER:         howto manager.      (line 3450)
+* BFD_RELOC_WASM32_COPY:                 howto manager.      (line 3449)
+* BFD_RELOC_WASM32_INDEX:                howto manager.      (line 3451)
+* BFD_RELOC_WASM32_LEB128:               howto manager.      (line 3443)
+* BFD_RELOC_WASM32_LEB128_GOT:           howto manager.      (line 3444)
+* BFD_RELOC_WASM32_LEB128_GOT_CODE:      howto manager.      (line 3445)
+* BFD_RELOC_WASM32_LEB128_PLT:           howto manager.      (line 3446)
+* BFD_RELOC_WASM32_PLT_INDEX:            howto manager.      (line 3447)
+* BFD_RELOC_WASM32_PLT_SIG:              howto manager.      (line 3452)
 * BFD_RELOC_X86_64_32S:                  howto manager.      (line  554)
+* BFD_RELOC_X86_64_CODE_4_GOTPC32_TLSDESC: howto manager.    (line  580)
+* BFD_RELOC_X86_64_CODE_4_GOTPCRELX:     howto manager.      (line  578)
+* BFD_RELOC_X86_64_CODE_4_GOTTPOFF:      howto manager.      (line  579)
 * BFD_RELOC_X86_64_COPY:                 howto manager.      (line  549)
 * BFD_RELOC_X86_64_DTPMOD64:             howto manager.      (line  555)
 * BFD_RELOC_X86_64_DTPOFF32:             howto manager.      (line  560)
@@ -14499,144 +14507,220 @@ BFD Index
 * BFD_RELOC_X86_64_TLSLD:                howto manager.      (line  559)
 * BFD_RELOC_X86_64_TPOFF32:              howto manager.      (line  562)
 * BFD_RELOC_X86_64_TPOFF64:              howto manager.      (line  557)
-* BFD_RELOC_XC16X_PAG:                   howto manager.      (line 2418)
-* BFD_RELOC_XC16X_POF:                   howto manager.      (line 2419)
-* BFD_RELOC_XC16X_SEG:                   howto manager.      (line 2420)
-* BFD_RELOC_XC16X_SOF:                   howto manager.      (line 2421)
-* BFD_RELOC_XGATE_24:                    howto manager.      (line 2228)
-* BFD_RELOC_XGATE_GPAGE:                 howto manager.      (line 2226)
-* BFD_RELOC_XGATE_IMM3:                  howto manager.      (line 2240)
-* BFD_RELOC_XGATE_IMM4:                  howto manager.      (line 2242)
-* BFD_RELOC_XGATE_IMM5:                  howto manager.      (line 2244)
-* BFD_RELOC_XGATE_IMM8_HI:               howto manager.      (line 2237)
-* BFD_RELOC_XGATE_IMM8_LO:               howto manager.      (line 2234)
-* BFD_RELOC_XGATE_LO16:                  howto manager.      (line 2223)
-* BFD_RELOC_XGATE_PCREL_10:              howto manager.      (line 2232)
-* BFD_RELOC_XGATE_PCREL_9:               howto manager.      (line 2230)
-* BFD_RELOC_XGATE_RL_GROUP:              howto manager.      (line 2219)
-* BFD_RELOC_XGATE_RL_JUMP:               howto manager.      (line 2216)
-* BFD_RELOC_XSTORMY16_12:                howto manager.      (line 2412)
-* BFD_RELOC_XSTORMY16_24:                howto manager.      (line 2413)
-* BFD_RELOC_XSTORMY16_FPTR16:            howto manager.      (line 2414)
-* BFD_RELOC_XSTORMY16_REL_12:            howto manager.      (line 2411)
-* BFD_RELOC_XTENSA_ASM_EXPAND:           howto manager.      (line 2609)
-* BFD_RELOC_XTENSA_ASM_SIMPLIFY:         howto manager.      (line 2613)
+* BFD_RELOC_XGATE_24:                    howto manager.      (line 2230)
+* BFD_RELOC_XGATE_GPAGE:                 howto manager.      (line 2228)
+* BFD_RELOC_XGATE_IMM3:                  howto manager.      (line 2242)
+* BFD_RELOC_XGATE_IMM4:                  howto manager.      (line 2244)
+* BFD_RELOC_XGATE_IMM5:                  howto manager.      (line 2246)
+* BFD_RELOC_XGATE_IMM8_HI:               howto manager.      (line 2239)
+* BFD_RELOC_XGATE_IMM8_LO:               howto manager.      (line 2236)
+* BFD_RELOC_XGATE_LO16:                  howto manager.      (line 2225)
+* BFD_RELOC_XGATE_PCREL_10:              howto manager.      (line 2234)
+* BFD_RELOC_XGATE_PCREL_9:               howto manager.      (line 2232)
+* BFD_RELOC_XGATE_RL_GROUP:              howto manager.      (line 2221)
+* BFD_RELOC_XGATE_RL_JUMP:               howto manager.      (line 2218)
+* BFD_RELOC_XSTORMY16_12:                howto manager.      (line 2415)
+* BFD_RELOC_XSTORMY16_24:                howto manager.      (line 2416)
+* BFD_RELOC_XSTORMY16_FPTR16:            howto manager.      (line 2417)
+* BFD_RELOC_XSTORMY16_REL_12:            howto manager.      (line 2414)
+* BFD_RELOC_XTENSA_ASM_EXPAND:           howto manager.      (line 2611)
+* BFD_RELOC_XTENSA_ASM_SIMPLIFY:         howto manager.      (line 2615)
 * BFD_RELOC_XTENSA_DIFF16:               howto manager.      (line 2560)
 * BFD_RELOC_XTENSA_DIFF32:               howto manager.      (line 2561)
 * BFD_RELOC_XTENSA_DIFF8:                howto manager.      (line 2559)
 * BFD_RELOC_XTENSA_GLOB_DAT:             howto manager.      (line 2551)
 * BFD_RELOC_XTENSA_JMP_SLOT:             howto manager.      (line 2552)
-* BFD_RELOC_XTENSA_OP0:                  howto manager.      (line 2604)
-* BFD_RELOC_XTENSA_OP1:                  howto manager.      (line 2605)
-* BFD_RELOC_XTENSA_OP2:                  howto manager.      (line 2606)
+* BFD_RELOC_XTENSA_NDIFF16:              howto manager.      (line 2631)
+* BFD_RELOC_XTENSA_NDIFF32:              howto manager.      (line 2632)
+* BFD_RELOC_XTENSA_NDIFF8:               howto manager.      (line 2630)
+* BFD_RELOC_XTENSA_OP0:                  howto manager.      (line 2606)
+* BFD_RELOC_XTENSA_OP1:                  howto manager.      (line 2607)
+* BFD_RELOC_XTENSA_OP2:                  howto manager.      (line 2608)
+* BFD_RELOC_XTENSA_PDIFF16:              howto manager.      (line 2628)
+* BFD_RELOC_XTENSA_PDIFF32:              howto manager.      (line 2629)
+* BFD_RELOC_XTENSA_PDIFF8:               howto manager.      (line 2627)
 * BFD_RELOC_XTENSA_PLT:                  howto manager.      (line 2555)
 * BFD_RELOC_XTENSA_RELATIVE:             howto manager.      (line 2553)
 * BFD_RELOC_XTENSA_RTLD:                 howto manager.      (line 2547)
-* BFD_RELOC_XTENSA_SLOT0_ALT:            howto manager.      (line 2587)
-* BFD_RELOC_XTENSA_SLOT0_OP:             howto manager.      (line 2568)
-* BFD_RELOC_XTENSA_SLOT10_ALT:           howto manager.      (line 2597)
-* BFD_RELOC_XTENSA_SLOT10_OP:            howto manager.      (line 2578)
-* BFD_RELOC_XTENSA_SLOT11_ALT:           howto manager.      (line 2598)
-* BFD_RELOC_XTENSA_SLOT11_OP:            howto manager.      (line 2579)
-* BFD_RELOC_XTENSA_SLOT12_ALT:           howto manager.      (line 2599)
-* BFD_RELOC_XTENSA_SLOT12_OP:            howto manager.      (line 2580)
-* BFD_RELOC_XTENSA_SLOT13_ALT:           howto manager.      (line 2600)
-* BFD_RELOC_XTENSA_SLOT13_OP:            howto manager.      (line 2581)
-* BFD_RELOC_XTENSA_SLOT14_ALT:           howto manager.      (line 2601)
-* BFD_RELOC_XTENSA_SLOT14_OP:            howto manager.      (line 2582)
-* BFD_RELOC_XTENSA_SLOT1_ALT:            howto manager.      (line 2588)
-* BFD_RELOC_XTENSA_SLOT1_OP:             howto manager.      (line 2569)
-* BFD_RELOC_XTENSA_SLOT2_ALT:            howto manager.      (line 2589)
-* BFD_RELOC_XTENSA_SLOT2_OP:             howto manager.      (line 2570)
-* BFD_RELOC_XTENSA_SLOT3_ALT:            howto manager.      (line 2590)
-* BFD_RELOC_XTENSA_SLOT3_OP:             howto manager.      (line 2571)
-* BFD_RELOC_XTENSA_SLOT4_ALT:            howto manager.      (line 2591)
-* BFD_RELOC_XTENSA_SLOT4_OP:             howto manager.      (line 2572)
-* BFD_RELOC_XTENSA_SLOT5_ALT:            howto manager.      (line 2592)
-* BFD_RELOC_XTENSA_SLOT5_OP:             howto manager.      (line 2573)
-* BFD_RELOC_XTENSA_SLOT6_ALT:            howto manager.      (line 2593)
-* BFD_RELOC_XTENSA_SLOT6_OP:             howto manager.      (line 2574)
-* BFD_RELOC_XTENSA_SLOT7_ALT:            howto manager.      (line 2594)
-* BFD_RELOC_XTENSA_SLOT7_OP:             howto manager.      (line 2575)
-* BFD_RELOC_XTENSA_SLOT8_ALT:            howto manager.      (line 2595)
-* BFD_RELOC_XTENSA_SLOT8_OP:             howto manager.      (line 2576)
-* BFD_RELOC_XTENSA_SLOT9_ALT:            howto manager.      (line 2596)
-* BFD_RELOC_XTENSA_SLOT9_OP:             howto manager.      (line 2577)
-* BFD_RELOC_XTENSA_TLSDESC_ARG:          howto manager.      (line 2618)
-* BFD_RELOC_XTENSA_TLSDESC_FN:           howto manager.      (line 2617)
-* BFD_RELOC_XTENSA_TLS_ARG:              howto manager.      (line 2622)
-* BFD_RELOC_XTENSA_TLS_CALL:             howto manager.      (line 2623)
-* BFD_RELOC_XTENSA_TLS_DTPOFF:           howto manager.      (line 2619)
-* BFD_RELOC_XTENSA_TLS_FUNC:             howto manager.      (line 2621)
-* BFD_RELOC_XTENSA_TLS_TPOFF:            howto manager.      (line 2620)
-* BFD_RELOC_Z80_DISP8:                   howto manager.      (line 2625)
-* BFD_RELOC_Z8K_CALLR:                   howto manager.      (line 2629)
-* BFD_RELOC_Z8K_DISP7:                   howto manager.      (line 2627)
-* BFD_RELOC_Z8K_IMM4L:                   howto manager.      (line 2631)
-* bfd_rename_section:                    section prototypes. (line  167)
-* bfd_scan_arch:                         Architectures.      (line  571)
-* bfd_scan_vma:                          Miscellaneous.      (line  126)
-* bfd_sections_find_if:                  section prototypes. (line  197)
+* BFD_RELOC_XTENSA_SLOT0_ALT:            howto manager.      (line 2589)
+* BFD_RELOC_XTENSA_SLOT0_OP:             howto manager.      (line 2570)
+* BFD_RELOC_XTENSA_SLOT10_ALT:           howto manager.      (line 2599)
+* BFD_RELOC_XTENSA_SLOT10_OP:            howto manager.      (line 2580)
+* BFD_RELOC_XTENSA_SLOT11_ALT:           howto manager.      (line 2600)
+* BFD_RELOC_XTENSA_SLOT11_OP:            howto manager.      (line 2581)
+* BFD_RELOC_XTENSA_SLOT12_ALT:           howto manager.      (line 2601)
+* BFD_RELOC_XTENSA_SLOT12_OP:            howto manager.      (line 2582)
+* BFD_RELOC_XTENSA_SLOT13_ALT:           howto manager.      (line 2602)
+* BFD_RELOC_XTENSA_SLOT13_OP:            howto manager.      (line 2583)
+* BFD_RELOC_XTENSA_SLOT14_ALT:           howto manager.      (line 2603)
+* BFD_RELOC_XTENSA_SLOT14_OP:            howto manager.      (line 2584)
+* BFD_RELOC_XTENSA_SLOT1_ALT:            howto manager.      (line 2590)
+* BFD_RELOC_XTENSA_SLOT1_OP:             howto manager.      (line 2571)
+* BFD_RELOC_XTENSA_SLOT2_ALT:            howto manager.      (line 2591)
+* BFD_RELOC_XTENSA_SLOT2_OP:             howto manager.      (line 2572)
+* BFD_RELOC_XTENSA_SLOT3_ALT:            howto manager.      (line 2592)
+* BFD_RELOC_XTENSA_SLOT3_OP:             howto manager.      (line 2573)
+* BFD_RELOC_XTENSA_SLOT4_ALT:            howto manager.      (line 2593)
+* BFD_RELOC_XTENSA_SLOT4_OP:             howto manager.      (line 2574)
+* BFD_RELOC_XTENSA_SLOT5_ALT:            howto manager.      (line 2594)
+* BFD_RELOC_XTENSA_SLOT5_OP:             howto manager.      (line 2575)
+* BFD_RELOC_XTENSA_SLOT6_ALT:            howto manager.      (line 2595)
+* BFD_RELOC_XTENSA_SLOT6_OP:             howto manager.      (line 2576)
+* BFD_RELOC_XTENSA_SLOT7_ALT:            howto manager.      (line 2596)
+* BFD_RELOC_XTENSA_SLOT7_OP:             howto manager.      (line 2577)
+* BFD_RELOC_XTENSA_SLOT8_ALT:            howto manager.      (line 2597)
+* BFD_RELOC_XTENSA_SLOT8_OP:             howto manager.      (line 2578)
+* BFD_RELOC_XTENSA_SLOT9_ALT:            howto manager.      (line 2598)
+* BFD_RELOC_XTENSA_SLOT9_OP:             howto manager.      (line 2579)
+* BFD_RELOC_XTENSA_TLSDESC_ARG:          howto manager.      (line 2620)
+* BFD_RELOC_XTENSA_TLSDESC_FN:           howto manager.      (line 2619)
+* BFD_RELOC_XTENSA_TLS_ARG:              howto manager.      (line 2624)
+* BFD_RELOC_XTENSA_TLS_CALL:             howto manager.      (line 2625)
+* BFD_RELOC_XTENSA_TLS_DTPOFF:           howto manager.      (line 2621)
+* BFD_RELOC_XTENSA_TLS_FUNC:             howto manager.      (line 2623)
+* BFD_RELOC_XTENSA_TLS_TPOFF:            howto manager.      (line 2622)
+* BFD_RELOC_Z80_16_BE:                   howto manager.      (line 2656)
+* BFD_RELOC_Z80_BYTE0:                   howto manager.      (line 2644)
+* BFD_RELOC_Z80_BYTE1:                   howto manager.      (line 2646)
+* BFD_RELOC_Z80_BYTE2:                   howto manager.      (line 2648)
+* BFD_RELOC_Z80_BYTE3:                   howto manager.      (line 2650)
+* BFD_RELOC_Z80_DISP8:                   howto manager.      (line 2642)
+* BFD_RELOC_Z80_WORD0:                   howto manager.      (line 2652)
+* BFD_RELOC_Z80_WORD1:                   howto manager.      (line 2654)
+* BFD_RELOC_Z8K_CALLR:                   howto manager.      (line 2660)
+* BFD_RELOC_Z8K_DISP7:                   howto manager.      (line 2658)
+* BFD_RELOC_Z8K_IMM4L:                   howto manager.      (line 2662)
+* bfd_rename_section:                    section prototypes. (line  149)
+* bfd_rename_section <1>:                section prototypes. (line  153)
+* bfd_scan_arch:                         Architectures.      (line  601)
+* bfd_scan_vma:                          Miscellaneous.      (line  115)
+* bfd_scan_vma <1>:                      Miscellaneous.      (line  119)
+* bfd_section:                           Opening and Closing.
+                                                             (line  335)
+* bfd_sections_find_if:                  section prototypes. (line  174)
 * bfd_section_already_linked:            Writing the symbol table.
-                                                             (line   55)
+                                                             (line   53)
+* bfd_section_already_linked <1>:        Writing the symbol table.
+                                                             (line   57)
 * bfd_section_list_clear:                section prototypes. (line    7)
-* bfd_set_archive_head:                  Archives.           (line   74)
-* bfd_set_arch_info:                     Architectures.      (line  612)
-* bfd_set_assert_handler:                Error reporting.    (line  162)
-* bfd_set_default_target:                bfd_target.         (line  557)
-* bfd_set_error:                         Error reporting.    (line   58)
-* bfd_set_error_handler:                 Error reporting.    (line  128)
-* bfd_set_error_program_name:            Error reporting.    (line  136)
+* bfd_section_list_clear <1>:            section prototypes. (line   11)
+* bfd_seek:                              Miscellaneous.      (line  402)
+* bfd_seek <1>:                          Miscellaneous.      (line  406)
+* bfd_set_archive_head:                  Archives.           (line   72)
+* bfd_set_archive_head <1>:              Archives.           (line   76)
+* bfd_set_arch_info:                     Architectures.      (line  638)
+* bfd_set_arch_info <1>:                 Architectures.      (line  642)
+* bfd_set_assert_handler:                Error reporting.    (line  180)
+* bfd_set_assert_handler <1>:            Error reporting.    (line  185)
+* bfd_set_default_target:                bfd_target.         (line  554)
+* bfd_set_default_target <1>:            bfd_target.         (line  558)
+* bfd_set_error:                         Error reporting.    (line   57)
+* bfd_set_error <1>:                     Error reporting.    (line   61)
+* bfd_set_error_handler:                 Error reporting.    (line  136)
+* bfd_set_error_handler <1>:             Error reporting.    (line  140)
+* bfd_set_error_program_name:            Error reporting.    (line  151)
+* bfd_set_error_program_name <1>:        Error reporting.    (line  155)
 * bfd_set_filename:                      Opening and Closing.
-                                                             (line  529)
-* bfd_set_file_flags:                    Miscellaneous.      (line   45)
-* bfd_set_format:                        Formats.            (line   67)
-* bfd_set_gp_size:                       Miscellaneous.      (line  116)
-* bfd_set_input_error:                   Error reporting.    (line   69)
-* bfd_set_private_flags:                 Miscellaneous.      (line  174)
-* bfd_set_reloc:                         Miscellaneous.      (line   33)
-* bfd_set_section_contents:              section prototypes. (line  228)
-* bfd_set_section_flags:                 section prototypes. (line  154)
-* bfd_set_section_size:                  section prototypes. (line  214)
-* bfd_set_start_address:                 Miscellaneous.      (line   95)
+                                                             (line  378)
+* bfd_set_file_flags:                    Miscellaneous.      (line   41)
+* bfd_set_file_flags <1>:                Miscellaneous.      (line   45)
+* bfd_set_format:                        Formats.            (line   65)
+* bfd_set_format <1>:                    Formats.            (line   69)
+* bfd_set_gp_size:                       Miscellaneous.      (line  100)
+* bfd_set_gp_size <1>:                   Miscellaneous.      (line  104)
+* bfd_set_gp_value:                      Miscellaneous.      (line  108)
+* bfd_set_gp_value <1>:                  Miscellaneous.      (line  112)
+* bfd_set_input_error:                   Error reporting.    (line   66)
+* bfd_set_input_error <1>:               Error reporting.    (line   70)
+* bfd_set_private_flags:                 Miscellaneous.      (line  153)
+* bfd_set_private_flags <1>:             Miscellaneous.      (line  157)
+* bfd_set_reloc:                         Miscellaneous.      (line   31)
+* bfd_set_reloc <1>:                     Miscellaneous.      (line   35)
+* bfd_set_section_contents:              section prototypes. (line  201)
+* bfd_set_section_contents <1>:          section prototypes. (line  205)
+* bfd_set_section_flags:                 section prototypes. (line  137)
+* bfd_set_section_flags <1>:             section prototypes. (line  141)
+* bfd_set_section_size:                  section prototypes. (line  188)
+* bfd_set_section_size <1>:              section prototypes. (line  192)
+* bfd_set_start_address:                 Miscellaneous.      (line   84)
+* bfd_set_start_address <1>:             Miscellaneous.      (line   88)
 * bfd_set_symtab:                        symbol handling functions.
-                                                             (line   63)
+                                                             (line   57)
+* bfd_set_symtab <1>:                    symbol handling functions.
+                                                             (line   61)
+* bfd_sprintf_vma:                       Miscellaneous.      (line  287)
+* bfd_sprintf_vma <1>:                   Miscellaneous.      (line  291)
+* bfd_stat:                              Miscellaneous.      (line  394)
+* bfd_stat <1>:                          Miscellaneous.      (line  398)
+* bfd_strtab_hash:                       Write Other Derived Routines.
+                                                             (line  110)
+* bfd_strtab_hash <1>:                   Write Other Derived Routines.
+                                                             (line  116)
 * bfd_symbol_info:                       symbol handling functions.
-                                                             (line  135)
-* bfd_target_list:                       bfd_target.         (line  609)
-* bfd_update_compression_header:         Miscellaneous.      (line  353)
-* bfd_write_bigendian_4byte_int:         Internal.           (line   12)
-* bfd_zalloc:                            Opening and Closing.
-                                                             (line  257)
-* bfd_zalloc2:                           Opening and Closing.
-                                                             (line  266)
-* check_build_id_file:                   Opening and Closing.
-                                                             (line  491)
-* coff_symbol_type:                      coff.               (line  233)
-* core_file_matches_executable_p:        Core Files.         (line   38)
-* find_separate_debug_file:              Opening and Closing.
-                                                             (line  365)
-* generic_core_file_matches_executable_p: Core Files.        (line   48)
-* get_build_id:                          Opening and Closing.
-                                                             (line  460)
-* get_build_id_name:                     Opening and Closing.
-                                                             (line  474)
+                                                             (line  119)
+* bfd_symbol_info <1>:                   symbol handling functions.
+                                                             (line  123)
+* bfd_target:                            bfd_target.         (line  566)
+* bfd_target <1>:                        bfd_target.         (line  581)
+* bfd_target <2>:                        bfd_target.         (line  611)
+* bfd_target_list:                       bfd_target.         (line  600)
+* bfd_tell:                              Miscellaneous.      (line  382)
+* bfd_tell <1>:                          Miscellaneous.      (line  386)
+* bfd_thread_cleanup:                    Threading.          (line   28)
+* bfd_thread_cleanup <1>:                Threading.          (line   32)
+* bfd_thread_init:                       Threading.          (line   15)
+* bfd_thread_init <1>:                   Threading.          (line   20)
+* bfd_unlock:                            Threading.          (line   44)
+* bfd_unlock <1>:                        Threading.          (line   48)
+* bfd_write:                             Miscellaneous.      (line  374)
+* bfd_write <1>:                         Miscellaneous.      (line  378)
+* bfd_write_bigendian_4byte_int:         Internal.           (line   91)
+* bfd_write_bigendian_4byte_int <1>:     Internal.           (line   95)
+* bfd_zalloc:                            Internal.           (line   77)
+* bfd_zmalloc:                           Internal.           (line   58)
+* Byte swapping routines.:               Internal.           (line  256)
+* char:                                  Error reporting.    (line   79)
+* char <1>:                              Error reporting.    (line  163)
+* char <2>:                              section prototypes. (line  273)
+* char <3>:                              Formats.            (line   78)
+* char <4>:                              howto manager.      (line 3654)
+* char <5>:                              Core Files.         (line   14)
+* char <6>:                              bfd_target.         (line  604)
+* char <7>:                              bfd_target.         (line  621)
+* char <8>:                              Architectures.      (line  598)
+* char <9>:                              Architectures.      (line  614)
+* char <10>:                             Architectures.      (line  715)
+* char <11>:                             Opening and Closing.
+                                                             (line  382)
+* coff_symbol_type:                      coff.               (line  234)
+* core_file_matches_executable_p:        Core Files.         (line   31)
+* core_file_matches_executable_p <1>:    Core Files.         (line   35)
+* generic_core_file_matches_executable_p: Core Files.        (line   40)
+* generic_core_file_matches_executable_p <1>: Core Files.    (line   44)
 * Hash tables:                           Hash Tables.        (line    6)
+* int:                                   Initialization.     (line    6)
+* int <1>:                               Miscellaneous.      (line   96)
+* int <2>:                               Architectures.      (line  671)
+* int <3>:                               Architectures.      (line  678)
+* int <4>:                               Architectures.      (line  725)
+* int <5>:                               Architectures.      (line  734)
+* int <6>:                               Internal.           (line  284)
+* int <7>:                               Write Other Derived Routines.
+                                                             (line  104)
 * internal object-file format:           Canonical format.   (line   11)
 * Linker:                                Linker Functions.   (line    6)
-* Other functions:                       Miscellaneous.      (line  188)
-* separate_alt_debug_file_exists:        Opening and Closing.
-                                                             (line  356)
-* separate_debug_file_exists:            Opening and Closing.
-                                                             (line  343)
-* struct bfd_iovec:                      Miscellaneous.      (line  414)
+* long:                                  Architectures.      (line  665)
+* machine_type:                          aout.               (line  134)
+* Other functions:                       Miscellaneous.      (line  165)
+* per_xvec_message:                      bfd_target.         (line  544)
+* struct bfd_iovec:                      Miscellaneous.      (line  327)
 * target vector (_bfd_final_link):       Performing the Final Link.
                                                              (line    6)
 * target vector (_bfd_link_add_symbols): Adding Symbols to the Hash Table.
                                                              (line    6)
 * target vector (_bfd_link_hash_table_create): Creating a Linker Hash Table.
                                                              (line    6)
-* The HOWTO Macro:                       typedef arelent.    (line  287)
+* The HOWTO Macro:                       typedef arelent.    (line  254)
 * what is it?:                           Overview.           (line    6)
 
 
@@ -14650,62 +14734,63 @@ Node: What BFD Version 2 Can Do4927
 Node: BFD information loss6244
 Node: Canonical format8785
 Node: BFD front end13128
-Node: typedef bfd13552
-Node: Error reporting31009
-Node: Miscellaneous36260
-Node: Memory Usage55374
-Node: Initialization56605
-Node: Sections57281
-Node: Section Input57764
-Node: Section Output58958
-Node: typedef asection61445
-Node: section prototypes85488
-Node: Symbols96232
-Node: Reading Symbols97835
-Node: Writing Symbols98943
-Node: Mini Symbols100687
-Node: typedef asymbol101661
-Node: symbol handling functions107746
-Node: Archives113121
-Node: Formats117258
-Node: Relocations120209
-Node: typedef arelent120936
-Node: howto manager135854
-Node: Core Files267925
-Node: Targets269963
-Node: bfd_target271938
-Node: Architectures299273
-Node: Opening and Closing330730
-Node: Internal349193
-Node: File Caching355998
-Node: Linker Functions357916
-Node: Creating a Linker Hash Table359590
-Node: Adding Symbols to the Hash Table361329
-Node: Differing file formats362229
-Node: Adding symbols from an object file363954
-Node: Adding symbols from an archive366104
-Node: Performing the Final Link368450
-Node: Information provided by the linker369691
-Node: Relocating the section contents370845
-Node: Writing the symbol table372597
-Node: Hash Tables379751
-Node: Creating and Freeing a Hash Table380949
-Node: Looking Up or Entering a String382199
-Node: Traversing a Hash Table383452
-Node: Deriving a New Hash Table Type384241
-Node: Define the Derived Structures385307
-Node: Write the Derived Creation Routine386388
-Node: Write Other Derived Routines389013
-Node: BFD back ends390328
-Node: What to Put Where390598
-Node: aout390778
-Node: coff397060
-Node: elf425211
-Node: mmo425612
-Node: File layout426482
-Node: Symbol-table432395
-Node: mmo section mapping436158
-Node: GNU Free Documentation License439812
-Node: BFD Index464876
+Node: typedef bfd13566
+Node: Error reporting26966
+Node: Initialization33419
+Node: Threading33950
+Node: Miscellaneous35829
+Node: Memory Usage55068
+Node: Sections56293
+Node: Section Input56774
+Node: Section Output57968
+Node: typedef asection60455
+Node: section prototypes77736
+Node: Symbols89009
+Node: Reading Symbols90612
+Node: Writing Symbols91720
+Node: Mini Symbols93464
+Node: typedef asymbol94438
+Node: symbol handling functions100644
+Node: Archives105859
+Node: Formats110007
+Node: Relocations113020
+Node: typedef arelent113747
+Node: howto manager127622
+Node: Core Files268041
+Node: Targets270042
+Node: bfd_target272003
+Node: Architectures298778
+Node: Opening and Closing331229
+Node: Internal346840
+Node: File Caching358175
+Node: Linker Functions360348
+Node: Creating a Linker Hash Table362022
+Node: Adding Symbols to the Hash Table363761
+Node: Differing file formats364661
+Node: Adding symbols from an object file366386
+Node: Adding symbols from an archive368536
+Node: Performing the Final Link370882
+Node: Information provided by the linker372123
+Node: Relocating the section contents373277
+Node: Writing the symbol table375029
+Node: Hash Tables382120
+Node: Creating and Freeing a Hash Table383318
+Node: Looking Up or Entering a String384568
+Node: Traversing a Hash Table385821
+Node: Deriving a New Hash Table Type386610
+Node: Define the Derived Structures387676
+Node: Write the Derived Creation Routine388757
+Node: Write Other Derived Routines391368
+Node: BFD back ends396793
+Node: What to Put Where397063
+Node: aout397243
+Node: coff403328
+Node: elf424471
+Node: mmo424872
+Node: File layout425742
+Node: Symbol-table431655
+Node: mmo section mapping435418
+Node: GNU Free Documentation License439072
+Node: BFD Index464136
 
 End Tag Table
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdint.texi ./bfd/doc/bfdint.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdint.texi	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/doc/bfdint.texi	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 \input texinfo
-@c Copyright (C) 1988-2019 Free Software Foundation, Inc.
+@c Copyright (C) 1988-2024 Free Software Foundation, Inc.
 @setfilename bfdint.info
 
 @settitle BFD Internals
@@ -14,7 +14,7 @@
 @copying
 This file documents the internals of the BFD library.
 
-Copyright @copyright{} 1988-2019 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2024 Free Software Foundation, Inc.
 Contributed by Cygnus Support.
 
 Permission is granted to copy, distribute and/or modify this document
@@ -346,10 +346,6 @@ Intel hex format.
 SOM (used on HP/UX).
 @item bfd_target_verilog_flavour
 Verilog memory hex dump format.
-@item bfd_target_os9k_flavour
-os9000.
-@item bfd_target_versados_flavour
-VERSAdos.
 @item bfd_target_msdos_flavour
 MS-DOS.
 @item bfd_target_evax_flavour
@@ -497,22 +493,25 @@ functions which don't easily fit into ot
 
 @table @samp
 @item _close_and_cleanup
-Free any target specific information associated with the BFD.  This is
-called when any BFD is closed (the @samp{bfd_write_contents} function
-mentioned earlier is only called for a BFD opened for writing).  Most
-targets use @samp{bfd_alloc} to allocate all target specific
-information, and therefore don't have to do anything in this function.
-This function pointer is typically set to
-@samp{_bfd_generic_close_and_cleanup}, which simply returns true.
+Free any target specific information associated with the BFD that
+isn't freed by @samp{_bfd_free_cached_info}.  This is called when any
+BFD is closed (the @samp{bfd_write_contents} function mentioned
+earlier is only called for a BFD opened for writing).  This function
+pointer is typically set to @samp{_bfd_generic_close_and_cleanup},
+which simply returns true.
 
 @item _bfd_free_cached_info
-Free any cached information associated with the BFD which can be
-recreated later if necessary.  This is used to reduce the memory
-consumption required by programs using BFD.  This is normally called via
-the @samp{bfd_free_cached_info} macro.  It is used by the default
-archive routines when computing the archive map.  Most targets do not
-do anything special for this entry point, and just set it to
-@samp{_bfd_generic_free_cached_info}, which simply returns true.
+This function is designed for use by the generic archive routines, and
+is also called by bfd_close.  After creating the archive map archive
+element bfds don't need symbols and other structures.  Many targets
+use @samp{bfd_alloc} to allocate target specific information and thus
+do not need to do anything special for this entry point, and just set
+it to @samp{_bfd_generic_free_cached_info} which throws away objalloc
+memory for the bfd.  Note that this means the bfd tdata and sections
+are no longer available.  Targets that malloc memory, attaching it to
+the bfd tdata or to section used_by_bfd should implement a target
+version of this function to free that memory before calling
+@samp{_bfd_generic_free_cached_info}.
 
 @item _new_section_hook
 This is called from @samp{bfd_make_section_anyway} whenever a new
@@ -524,7 +523,7 @@ corresponds to an actual section in an a
 Get the contents of a section.  This is called from
 @samp{bfd_get_section_contents}.  Most targets set this to
 @samp{_bfd_generic_get_section_contents}, which does a @samp{bfd_seek}
-based on the section's @samp{filepos} field and a @samp{bfd_bread}.  The
+based on the section's @samp{filepos} field and a @samp{bfd_read}.  The
 corresponding field in the target vector is named
 @samp{_bfd_get_section_contents}.
 
@@ -657,7 +656,7 @@ always uses extended name tables anyhow.
 target vector is named @samp{_bfd_truncate_arname}.
 
 @item _write_armap
-Write out the archive symbol table using calls to @samp{bfd_bwrite}.
+Write out the archive symbol table using calls to @samp{bfd_write}.
 This is normally called from the archive @samp{write_contents} routine.
 The corresponding field in the target vector is named @samp{write_armap}
 (no leading underscore).
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdio.texi ./bfd/doc/bfdio.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdio.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/bfdio.texi	2024-02-01 01:50:55.000000000 +0000
@@ -1,6 +1,5 @@
 @findex struct bfd_iovec
 @subsubsection @code{struct bfd_iovec}
-@strong{Description}@*
 The @code{struct bfd_iovec} contains the internal file I/O class.
 Each @code{BFD} has an instance of this class and all file I/O is
 routed through it (it is assumed that the instance implements
@@ -37,25 +36,59 @@ struct bfd_iovec
                   void **map_addr, bfd_size_type *map_len);
 @};
 extern const struct bfd_iovec _bfd_memory_iovec;
+
 @end example
 
+@findex bfd_read
+@subsubsection @code{bfd_read}
+@deftypefn {Function} bfd_size_type bfd_read (void *, bfd_size_type, bfd *) ATTRIBUTE_WARN_UNUSED_RESULT; 
+Attempt to read SIZE bytes from ABFD's iostream to PTR.
+Return the amount read.
+
+@end deftypefn
+@findex bfd_write
+@subsubsection @code{bfd_write}
+@deftypefn {Function} bfd_size_type bfd_write (const void *, bfd_size_type, bfd *) ATTRIBUTE_WARN_UNUSED_RESULT; 
+Attempt to write SIZE bytes to ABFD's iostream from PTR.
+Return the amount written.
+
+@end deftypefn
+@findex bfd_tell
+@subsubsection @code{bfd_tell}
+@deftypefn {Function} file_ptr bfd_tell (bfd *) ATTRIBUTE_WARN_UNUSED_RESULT; 
+Return ABFD's iostream file position.
+
+@end deftypefn
+@findex bfd_flush
+@subsubsection @code{bfd_flush}
+@deftypefn {Function} int bfd_flush (bfd *); 
+Flush ABFD's iostream pending IO.
+
+@end deftypefn
+@findex bfd_stat
+@subsubsection @code{bfd_stat}
+@deftypefn {Function} int bfd_stat (bfd *, struct stat *) ATTRIBUTE_WARN_UNUSED_RESULT; 
+Call fstat on ABFD's iostream.  Return 0 on success, and a
+negative value on failure.
+
+@end deftypefn
+@findex bfd_seek
+@subsubsection @code{bfd_seek}
+@deftypefn {Function} int bfd_seek (bfd *, file_ptr, int) ATTRIBUTE_WARN_UNUSED_RESULT; 
+Call fseek on ABFD's iostream.  Return 0 on success, and a
+negative value on failure.
+
+@end deftypefn
 @findex bfd_get_mtime
 @subsubsection @code{bfd_get_mtime}
-@strong{Synopsis}
-@example
-long bfd_get_mtime (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} long bfd_get_mtime (bfd *abfd); 
 Return the file modification time (as read from the file system, or
 from the archive header for archive members).
 
+@end deftypefn
 @findex bfd_get_size
 @subsubsection @code{bfd_get_size}
-@strong{Synopsis}
-@example
-ufile_ptr bfd_get_size (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} ufile_ptr bfd_get_size (bfd *abfd); 
 Return the file size (as read from file system) for the file
 associated with BFD @var{abfd}.
 
@@ -80,27 +113,34 @@ of space for the 15 bazillon byte table
 This function at least allows us to answer the question, "is the
 size reasonable?".
 
+A return value of zero indicates the file size is unknown.
+
+@end deftypefn
 @findex bfd_get_file_size
 @subsubsection @code{bfd_get_file_size}
-@strong{Synopsis}
-@example
-ufile_ptr bfd_get_file_size (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} ufile_ptr bfd_get_file_size (bfd *abfd); 
 Return the file size (as read from file system) for the file
 associated with BFD @var{abfd}.  It supports both normal files
 and archive elements.
 
+@end deftypefn
 @findex bfd_mmap
 @subsubsection @code{bfd_mmap}
-@strong{Synopsis}
-@example
-void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
-    int prot, int flags, file_ptr offset,
-    void **map_addr, bfd_size_type *map_len);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len, int prot, int flags, file_ptr offset, void **map_addr, bfd_size_type *map_len) ATTRIBUTE_WARN_UNUSED_RESULT; 
 Return mmap()ed region of the file, if possible and implemented.
 LEN and OFFSET do not need to be page aligned.  The page aligned
 address and length are written to MAP_ADDR and MAP_LEN.
 
+@end deftypefn
+@findex bfd_get_current_time
+@subsubsection @code{bfd_get_current_time}
+@deftypefn {Function} time_t bfd_get_current_time (time_t now); 
+Returns the current time.
+
+If the environment variable SOURCE_DATE_EPOCH is defined
+then this is parsed and its value is returned.  Otherwise
+if the paramter NOW is non-zero, then that is returned.
+Otherwise the result of the system call "time(NULL)" is
+returned.
+
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdsumm.texi ./bfd/doc/bfdsumm.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdsumm.texi	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/doc/bfdsumm.texi	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 @c This summary of BFD is shared by the BFD and LD docs.
-@c Copyright (C) 2012-2019 Free Software Foundation, Inc.
+@c Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
 When an object file is opened, BFD subroutines automatically determine
 the format of the input object file.  They then build a descriptor in
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfd.texi ./bfd/doc/bfd.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfd.texi	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/doc/bfd.texi	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 \input texinfo.tex
 @setfilename bfd.info
-@c Copyright (C) 1988-2019 Free Software Foundation, Inc.
+@c Copyright (C) 1988-2024 Free Software Foundation, Inc.
 @c 
 @synindex fn cp
 
@@ -14,7 +14,7 @@
 @copying
 This file documents the BFD library.
 
-Copyright @copyright{} 1991-2019 Free Software Foundation, Inc.
+Copyright @copyright{} 1991-2024 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -62,7 +62,7 @@ included in the section entitled ``GNU F
 @end tex
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1991-2019 Free Software Foundation, Inc.
+Copyright @copyright{} 1991-2024 Free Software Foundation, Inc.
 
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.3
@@ -198,9 +198,10 @@ IEEE-695.
 @menu
 * typedef bfd::
 * Error reporting::
+* Initialization::
+* Threading::
 * Miscellaneous::
 * Memory Usage::
-* Initialization::
 * Sections::
 * Symbols::
 * Archives::
@@ -219,7 +220,7 @@ IEEE-695.
 @include bfdt.texi
 @include bfdio.texi
 
-@node Memory Usage, Initialization, Miscellaneous, BFD front end
+@node Memory Usage, Sections, Miscellaneous, BFD front end
 @section Memory Usage
 BFD keeps all of its internal structures in obstacks. There is one obstack
 per open BFD file, into which the current state is stored. When a BFD is
@@ -242,10 +243,7 @@ select the greediest open BFD, close it
 some operation and reopen the BFD again, to get a fresh copy of the data
 structures.
 
-@node Initialization, Sections, Memory Usage, BFD front end
-@include  init.texi
-
-@node Sections, Symbols, Initialization, BFD front end
+@node Sections, Symbols, Memory Usage, BFD front end
 @include  section.texi
 
 @node Symbols, Archives, Sections, BFD front end
@@ -261,7 +259,7 @@ structures.
 @include  reloc.texi
 
 @node Core Files, Targets, Relocations, BFD front end
-@include  core.texi
+@include  corefile.texi
 
 @node Targets, Architectures, Core Files, BFD front end
 @include  targets.texi
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdt.texi ./bfd/doc/bfdt.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdt.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/bfdt.texi	2024-02-01 01:50:55.000000000 +0000
@@ -10,28 +10,6 @@ to the rest of the data.
 
 
 @example
-
-enum bfd_direction
-  @{
-    no_direction = 0,
-    read_direction = 1,
-    write_direction = 2,
-    both_direction = 3
-  @};
-
-enum bfd_plugin_format
-  @{
-    bfd_plugin_unknown = 0,
-    bfd_plugin_yes = 1,
-    bfd_plugin_no = 2
-  @};
-
-struct bfd_build_id
-  @{
-    bfd_size_type size;
-    bfd_byte data[1];
-  @};
-
 struct bfd
 @{
   /* The filename the application opened the BFD with.  */
@@ -60,12 +38,6 @@ struct bfd
   /* A unique identifier of the BFD  */
   unsigned int id;
 
-  /* The format which belongs to the BFD. (object, core, etc.)  */
-  ENUM_BITFIELD (bfd_format) format : 3;
-
-  /* The direction with which the BFD was opened.  */
-  ENUM_BITFIELD (bfd_direction) direction : 2;
-
   /* Format_specific flags.  */
   flagword flags;
 
@@ -122,8 +94,8 @@ struct bfd
 #define BFD_TRADITIONAL_FORMAT    0x400
 
   /* This flag indicates that the BFD contents are actually cached
-     in memory.  If this is set, iostream points to a bfd_in_memory
-     struct.  */
+     in memory.  If this is set, iostream points to a malloc'd
+     bfd_in_memory struct.  */
 #define BFD_IN_MEMORY             0x800
 
   /* This BFD has been created by the linker and doesn't correspond
@@ -157,17 +129,39 @@ struct bfd
   /* Put pathnames into archives (non-POSIX).  */
 #define BFD_ARCHIVE_FULL_PATH  0x100000
 
-  /* Flags bits to be saved in bfd_preserve_save.  */
-#define BFD_FLAGS_SAVED \
-  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
-   | BFD_PLUGIN | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON \
-   | BFD_USE_ELF_STT_COMMON)
+#define BFD_CLOSED_BY_CACHE    0x200000
+  /* Compress sections in this BFD with SHF_COMPRESSED zstd.  */
+#define BFD_COMPRESS_ZSTD      0x400000
+
+  /* Don't generate ELF section header.  */
+#define BFD_NO_SECTION_HEADER  0x800000
 
   /* Flags bits which are for BFD use only.  */
 #define BFD_FLAGS_FOR_BFD_USE_MASK \
   (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
    | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
-   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
+   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON \
+   | BFD_NO_SECTION_HEADER)
+
+  /* The format which belongs to the BFD. (object, core, etc.)  */
+  ENUM_BITFIELD (bfd_format) format : 3;
+
+  /* The direction with which the BFD was opened.  */
+  ENUM_BITFIELD (bfd_direction) direction : 2;
+
+  /* POSIX.1-2017 (IEEE Std 1003.1) says of fopen : "When a file is
+     opened with update mode ('+' as the second or third character in
+     the mode argument), both input and output may be performed on
+     the associated stream.  However, the application shall ensure
+     that output is not directly followed by input without an
+     intervening call to fflush() or to a file positioning function
+     (fseek(), fsetpos(), or rewind()), and input is not directly
+     followed by output without an intervening call to a file
+     positioning function, unless the input operation encounters
+     end-of-file."
+     This field tracks the last IO operation, so that bfd can insert
+     a seek when IO direction changes.  */
+  ENUM_BITFIELD (bfd_last_io) last_io : 2;
 
   /* Is the file descriptor being cached?  That is, can it be closed as
      needed, and re-opened when accessed later?  */
@@ -220,13 +214,16 @@ struct bfd
   /* Set if this is a slim LTO object not loaded with a compiler plugin.  */
   unsigned int lto_slim_object : 1;
 
+  /* Do not attempt to modify this file.  Set when detecting errors
+     that BFD is not prepared to handle for objcopy/strip.  */
+  unsigned int read_only : 1;
+
   /* Set to dummy BFD created when claimed by a compiler plug-in
      library.  */
   bfd *plugin_dummy_bfd;
 
-  /* Currently my_archive is tested before adding origin to
-     anything. I believe that this can become always an add of
-     origin, with origin set to 0 for non archive files.  */
+  /* The offset of this bfd in the file, typically 0 if it is not
+     contained in an archive.  */
   ufile_ptr origin;
 
   /* The origin in the archive of the proxy entry.  This will
@@ -248,17 +245,26 @@ struct bfd
   /* The number of sections.  */
   unsigned int section_count;
 
+  /* The archive plugin file descriptor.  */
+  int archive_plugin_fd;
+
+  /* The number of opens on the archive plugin file descriptor.  */
+  unsigned int archive_plugin_fd_open_count;
+
   /* A field used by _bfd_generic_link_add_archive_symbols.  This will
      be used only for archive elements.  */
   int archive_pass;
 
+  /* The total size of memory from bfd_alloc.  */
+  bfd_size_type alloc_size;
+
   /* Stuff only useful for object files:
      The start address.  */
   bfd_vma start_address;
 
   /* Symbol table for output BFD (with symcount entries).
      Also used by the linker to cache input BFD symbols.  */
-  struct bfd_symbol  **outsymbols;
+  struct bfd_symbol **outsymbols;
 
   /* Used for input and output.  */
   unsigned int symcount;
@@ -269,6 +275,11 @@ struct bfd
   /* Pointer to structure which contains architecture information.  */
   const struct bfd_arch_info *arch_info;
 
+  /* Cached length of file for bfd_get_size.  0 until bfd_get_size is
+     called, 1 if stat returns an error or the file size is too large to
+     return in ufile_ptr.  Both 0 and 1 should be treated as "unknown".  */
+  ufile_ptr size;
+
   /* Stuff only useful for archives.  */
   void *arelt_data;
   struct bfd *my_archive;      /* The containing archive BFD.  */
@@ -299,8 +310,6 @@ struct bfd
       struct tekhex_data_struct *tekhex_data;
       struct elf_obj_tdata *elf_obj_data;
       struct mmo_data_struct *mmo_data;
-      struct sun_core_struct *sun_core_data;
-      struct sco5_core_struct *sco5_core_data;
       struct trad_core_struct *trad_core_data;
       struct som_data_struct *som_data;
       struct hpux_core_struct *hpux_core_data;
@@ -309,7 +318,6 @@ struct bfd
       struct lynx_core_struct *lynx_core_data;
       struct osf_core_struct *osf_core_data;
       struct cisco_core_struct *cisco_core_data;
-      struct versados_data_struct *versados_data;
       struct netbsd_core_struct *netbsd_core_data;
       struct mach_o_data_struct *mach_o_data;
       struct mach_o_fat_data_struct *mach_o_fat_data;
@@ -333,230 +341,8 @@ struct bfd
   const struct bfd_build_id *build_id;
 @};
 
-static inline const char *
-bfd_get_filename (const bfd *abfd)
-@{
-  return abfd->filename;
-@}
-
-static inline bfd_boolean
-bfd_get_cacheable (const bfd *abfd)
-@{
-  return abfd->cacheable;
-@}
-
-static inline enum bfd_format
-bfd_get_format (const bfd *abfd)
-@{
-  return abfd->format;
-@}
-
-static inline flagword
-bfd_get_file_flags (const bfd *abfd)
-@{
-  return abfd->flags;
-@}
-
-static inline bfd_vma
-bfd_get_start_address (const bfd *abfd)
-@{
-  return abfd->start_address;
-@}
-
-static inline unsigned int
-bfd_get_symcount (const bfd *abfd)
-@{
-  return abfd->symcount;
-@}
-
-static inline unsigned int
-bfd_get_dynamic_symcount (const bfd *abfd)
-@{
-  return abfd->dynsymcount;
-@}
-
-static inline struct bfd_symbol **
-bfd_get_outsymbols (const bfd *abfd)
-@{
-  return abfd->outsymbols;
-@}
-
-static inline unsigned int
-bfd_count_sections (const bfd *abfd)
-@{
-  return abfd->section_count;
-@}
-
-static inline bfd_boolean
-bfd_has_map (const bfd *abfd)
-@{
-  return abfd->has_armap;
-@}
-
-static inline bfd_boolean
-bfd_is_thin_archive (const bfd *abfd)
-@{
-  return abfd->is_thin_archive;
-@}
-
-static inline void *
-bfd_usrdata (const bfd *abfd)
-@{
-  return abfd->usrdata;
-@}
-
-/* See note beside bfd_set_section_userdata.  */
-static inline bfd_boolean
-bfd_set_cacheable (bfd * abfd, bfd_boolean val)
-@{
-  abfd->cacheable = val;
-  return TRUE;
-@}
-
-static inline void
-bfd_set_thin_archive (bfd *abfd, bfd_boolean val)
-@{
-  abfd->is_thin_archive = val;
-@}
-
-static inline void
-bfd_set_usrdata (bfd *abfd, void *val)
-@{
-  abfd->usrdata = val;
-@}
-
-static inline asection *
-bfd_asymbol_section (const asymbol *sy)
-@{
-  return sy->section;
-@}
-
-static inline bfd_vma
-bfd_asymbol_value (const asymbol *sy)
-@{
-  return sy->section->vma + sy->value;
-@}
-
-static inline const char *
-bfd_asymbol_name (const asymbol *sy)
-@{
-  return sy->name;
-@}
-
-static inline struct bfd *
-bfd_asymbol_bfd (const asymbol *sy)
-@{
-  return sy->the_bfd;
-@}
-
-static inline void
-bfd_set_asymbol_name (asymbol *sy, const char *name)
-@{
-  sy->name = name;
-@}
-
-static inline bfd_size_type
-bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
-@{
-  if (abfd->direction != write_direction && sec->rawsize != 0)
-    return sec->rawsize;
-  return sec->size;
-@}
-
-/* Find the address one past the end of SEC.  */
-static inline bfd_size_type
-bfd_get_section_limit (const bfd *abfd, const asection *sec)
-@{
-  return (bfd_get_section_limit_octets (abfd, sec)
-          / bfd_octets_per_byte (abfd, sec));
-@}
-
-/* Functions to handle insertion and deletion of a bfd's sections.  These
-   only handle the list pointers, ie. do not adjust section_count,
-   target_index etc.  */
-static inline void
-bfd_section_list_remove (bfd *abfd, asection *s)
-@{
-  asection *next = s->next;
-  asection *prev = s->prev;
-  if (prev)
-    prev->next = next;
-  else
-    abfd->sections = next;
-  if (next)
-    next->prev = prev;
-  else
-    abfd->section_last = prev;
-@}
-
-static inline void
-bfd_section_list_append (bfd *abfd, asection *s)
-@{
-  s->next = 0;
-  if (abfd->section_last)
-    @{
-      s->prev = abfd->section_last;
-      abfd->section_last->next = s;
-    @}
-  else
-    @{
-      s->prev = 0;
-      abfd->sections = s;
-    @}
-  abfd->section_last = s;
-@}
-
-static inline void
-bfd_section_list_prepend (bfd *abfd, asection *s)
-@{
-  s->prev = 0;
-  if (abfd->sections)
-    @{
-      s->next = abfd->sections;
-      abfd->sections->prev = s;
-    @}
-  else
-    @{
-      s->next = 0;
-      abfd->section_last = s;
-    @}
-  abfd->sections = s;
-@}
-
-static inline void
-bfd_section_list_insert_after (bfd *abfd, asection *a, asection *s)
-@{
-  asection *next = a->next;
-  s->next = next;
-  s->prev = a;
-  a->next = s;
-  if (next)
-    next->prev = s;
-  else
-    abfd->section_last = s;
-@}
-
-static inline void
-bfd_section_list_insert_before (bfd *abfd, asection *b, asection *s)
-@{
-  asection *prev = b->prev;
-  s->prev = prev;
-  s->next = b;
-  b->prev = s;
-  if (prev)
-    prev->next = s;
-  else
-    abfd->sections = s;
-@}
-
-static inline bfd_boolean
-bfd_section_removed_from_list (const bfd *abfd, const asection *s)
-@{
-  return s->next ? s->next->prev != s : abfd->section_last != s;
-@}
-
 @end example
-@node Error reporting, Miscellaneous, typedef bfd, BFD front end
+@node Error reporting, Initialization, typedef bfd, BFD front end
 @section Error reporting
 Most BFD functions return nonzero on success (check their
 individual documentation for precise semantics).  On an error,
@@ -568,13 +354,14 @@ If that returns @code{bfd_error_system_c
 The easiest way to report a BFD error to the user is to
 use @code{bfd_perror}.
 
+The BFD error is thread-local.
+
 @subsection Type @code{bfd_error_type}
 The values returned by @code{bfd_get_error} are defined by the
 enumerated type @code{bfd_error_type}.
 
 
 @example
-
 typedef enum bfd_error
 @{
   bfd_error_no_error = 0,
@@ -606,59 +393,62 @@ bfd_error_type;
 @end example
 @findex bfd_get_error
 @subsubsection @code{bfd_get_error}
-@strong{Synopsis}
-@example
-bfd_error_type bfd_get_error (void);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_error_type bfd_get_error (void); 
 Return the current BFD error condition.
 
+@end deftypefn
 @findex bfd_set_error
 @subsubsection @code{bfd_set_error}
-@strong{Synopsis}
-@example
-void bfd_set_error (bfd_error_type error_tag);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_set_error (bfd_error_type error_tag); 
 Set the BFD error condition to be @var{error_tag}.
 
 @var{error_tag} must not be bfd_error_on_input.  Use
 bfd_set_input_error for input errors instead.
 
+@end deftypefn
 @findex bfd_set_input_error
 @subsubsection @code{bfd_set_input_error}
-@strong{Synopsis}
-@example
-void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_set_input_error (bfd *input, bfd_error_type error_tag); 
 Set the BFD error condition to be bfd_error_on_input.
 @var{input} is the input bfd where the error occurred, and
 @var{error_tag} the bfd_error_type error.
 
+@end deftypefn
 @findex bfd_errmsg
 @subsubsection @code{bfd_errmsg}
-@strong{Synopsis}
-@example
-const char *bfd_errmsg (bfd_error_type error_tag);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const char *bfd_errmsg (bfd_error_type error_tag); 
 Return a string describing the error @var{error_tag}, or
 the system error if @var{error_tag} is @code{bfd_error_system_call}.
 
+@end deftypefn
 @findex bfd_perror
 @subsubsection @code{bfd_perror}
-@strong{Synopsis}
-@example
-void bfd_perror (const char *message);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_perror (const char *message); 
 Print to the standard error stream a string describing the
 last BFD error that occurred, or the last system error if
 the last BFD error was a system call failure.  If @var{message}
 is non-NULL and non-empty, the error string printed is preceded
 by @var{message}, a colon, and a space.  It is followed by a newline.
 
+@end deftypefn
+@findex _bfd_clear_error_data
+@subsubsection @code{_bfd_clear_error_data}
+@deftypefn {Function} void _bfd_clear_error_data (void); 
+Free any data associated with the BFD error.
+
+@end deftypefn
+@findex bfd_asprintf
+@subsubsection @code{bfd_asprintf}
+@deftypefn {Function} char *bfd_asprintf (const char *fmt, ...); 
+Primarily for error reporting, this function is like
+libiberty's xasprintf except that it can return NULL on no
+memory and the returned string should not be freed.  Uses a
+thread-local malloc'd buffer managed by libbfd, _bfd_error_buf.
+Be aware that a call to this function frees the result of any
+previous call.  bfd_errmsg (bfd_error_on_input) also calls
+this function.
+
+@end deftypefn
 @subsection BFD error handler
 Some BFD functions want to print messages describing the
 problem.  They call a BFD error handler function.  This
@@ -668,17 +458,12 @@ The BFD error handler acts like vprintf.
 
 
 @example
-
 typedef void (*bfd_error_handler_type) (const char *, va_list);
 
 @end example
 @findex _bfd_error_handler
 @subsubsection @code{_bfd_error_handler}
-@strong{Synopsis}
-@example
-void _bfd_error_handler (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
-@end example
-@strong{Description}@*
+@deftypefn {Function} void _bfd_error_handler (const char *fmt, ...) ATTRIBUTE_PRINTF_1; 
 This is the default routine to handle BFD error messages.
 Like fprintf (stderr, ...), but also handles some extra format
 specifiers.
@@ -690,28 +475,36 @@ archive too.
 
 Beware: Only supports a maximum of 9 format arguments.
 
+@end deftypefn
 @findex bfd_set_error_handler
 @subsubsection @code{bfd_set_error_handler}
-@strong{Synopsis}
-@example
-bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type); 
 Set the BFD error handler function.  Returns the previous
 function.
 
+@end deftypefn
+@findex _bfd_set_error_handler_caching
+@subsubsection @code{_bfd_set_error_handler_caching}
+@deftypefn {Function} bfd_error_handler_type _bfd_set_error_handler_caching (bfd *); 
+Set the BFD error handler function to one that stores messages
+to the per_xvec_warn array.  Returns the previous function.
+
+@end deftypefn
 @findex bfd_set_error_program_name
 @subsubsection @code{bfd_set_error_program_name}
-@strong{Synopsis}
-@example
-void bfd_set_error_program_name (const char *);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_set_error_program_name (const char *); 
 Set the program name to use when printing a BFD error.  This
 is printed before the error message followed by a colon and
 space.  The string must not be changed after it is passed to
 this function.
 
+@end deftypefn
+@findex _bfd_get_error_program_name
+@subsubsection @code{_bfd_get_error_program_name}
+@deftypefn {Function} const char *_bfd_get_error_program_name (void); 
+Get the program name used when printing a BFD error.
+
+@end deftypefn
 @subsection BFD assert handler
 If BFD finds an internal inconsistency, the bfd assert
 handler is called with information on the BFD version, BFD
@@ -723,7 +516,6 @@ _bfd_error_handler and continues.
 
 
 @example
-
 typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
                                          const char *bfd_version,
                                          const char *bfd_file,
@@ -732,15 +524,78 @@ typedef void (*bfd_assert_handler_type)
 @end example
 @findex bfd_set_assert_handler
 @subsubsection @code{bfd_set_assert_handler}
-@strong{Synopsis}
-@example
-bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type); 
 Set the BFD assert handler function.  Returns the previous
 function.
 
-@node Miscellaneous, Memory Usage, Error reporting, BFD front end
+@end deftypefn
+@node Initialization, Threading, Error reporting, BFD front end
+@findex bfd_init
+@subsubsection @code{bfd_init}
+@deftypefn {Function} unsigned int bfd_init (void); 
+This routine must be called before any other BFD function to
+initialize magical internal data structures.
+Returns a magic number, which may be used to check
+that the bfd library is configured as expected by users.
+@example
+/* Value returned by bfd_init.  */
+#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
+
+@end example
+
+@end deftypefn
+@node Threading, Miscellaneous, Initialization, BFD front end
+@section Threading
+BFD has limited support for thread-safety.  Most BFD globals
+are protected by locks, while the error-related globals are
+thread-local.  A given BFD cannot safely be used from two
+threads at the same time; it is up to the application to do
+any needed locking.  However, it is ok for different threads
+to work on different BFD objects at the same time.
+
+@subsection Thread functions.
+
+
+
+@example
+typedef bool (*bfd_lock_unlock_fn_type) (void *);
+@end example
+@findex bfd_thread_init
+@subsubsection @code{bfd_thread_init}
+@deftypefn {Function} bool bfd_thread_init (bfd_lock_unlock_fn_type lock, bfd_lock_unlock_fn_type unlock, void *data); 
+Initialize BFD threading.  The functions passed in will be
+used to lock and unlock global data structures.  This may only
+be called a single time in a given process.  Returns true on
+success and false on error.  DATA is passed verbatim to the
+lock and unlock functions.  The lock and unlock functions
+should return true on success, or set the BFD error and return
+false on failure.
+
+@end deftypefn
+@findex bfd_thread_cleanup
+@subsubsection @code{bfd_thread_cleanup}
+@deftypefn {Function} void bfd_thread_cleanup (void); 
+Clean up any thread-local state.  This should be called by a
+thread that uses any BFD functions, before the thread exits.
+It is fine to call this multiple times, or to call it and then
+later call BFD functions on the same thread again.
+
+@end deftypefn
+@findex bfd_lock
+@subsubsection @code{bfd_lock}
+@deftypefn {Function} bool bfd_lock (void); 
+Acquire the global BFD lock, if needed.  Returns true on
+success, false on error.
+
+@end deftypefn
+@findex bfd_unlock
+@subsubsection @code{bfd_unlock}
+@deftypefn {Function} bool bfd_unlock (void); 
+Release the global BFD lock, if needed.  Returns true on
+success, false on error.
+
+@end deftypefn
+@node Miscellaneous, Memory Usage, Threading, BFD front end
 @section Miscellaneous
 
 
@@ -749,23 +604,15 @@ function.
 
 @findex bfd_get_reloc_upper_bound
 @subsubsection @code{bfd_get_reloc_upper_bound}
-@strong{Synopsis}
-@example
-long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
-@end example
-@strong{Description}@*
+@deftypefn {Function} long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect); 
 Return the number of bytes required to store the
 relocation information associated with section @var{sect}
 attached to bfd @var{abfd}.  If an error occurs, return -1.
 
+@end deftypefn
 @findex bfd_canonicalize_reloc
 @subsubsection @code{bfd_canonicalize_reloc}
-@strong{Synopsis}
-@example
-long bfd_canonicalize_reloc
-   (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
-@end example
-@strong{Description}@*
+@deftypefn {Function} long bfd_canonicalize_reloc (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); 
 Call the back end associated with the open BFD
 @var{abfd} and translate the external form of the relocation
 information attached to @var{sec} into the internal canonical
@@ -777,14 +624,10 @@ been preallocated, usually by a call to
 The @var{syms} table is also needed for horrible internal magic
 reasons.
 
+@end deftypefn
 @findex bfd_set_reloc
 @subsubsection @code{bfd_set_reloc}
-@strong{Synopsis}
-@example
-void bfd_set_reloc
-   (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_set_reloc (bfd *abfd, asection *sec, arelent **rel, unsigned int count); 
 Set the relocation pointer and count within
 section @var{sec} to the values @var{rel} and @var{count}.
 The argument @var{abfd} is ignored.
@@ -793,13 +636,10 @@ The argument @var{abfd} is ignored.
        BFD_SEND (abfd, _bfd_set_reloc, (abfd, asect, location, count))
 @end example
 
+@end deftypefn
 @findex bfd_set_file_flags
 @subsubsection @code{bfd_set_file_flags}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_file_flags (bfd *abfd, flagword flags); 
 Set the flag word in the BFD @var{abfd} to the value @var{flags}.
 
 Possible errors are:
@@ -816,29 +656,22 @@ type of file.  E.g., an attempt was made
 on a BFD format which does not support demand paging.
 @end itemize
 
+@end deftypefn
 @findex bfd_get_arch_size
 @subsubsection @code{bfd_get_arch_size}
-@strong{Synopsis}
-@example
-int bfd_get_arch_size (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} int bfd_get_arch_size (bfd *abfd); 
 Returns the normalized architecture address size, in bits, as
 determined by the object file's format.  By normalized, we mean
 either 32 or 64.  For ELF, this information is included in the
 header.  Use bfd_arch_bits_per_address for number of bits in
 the architecture address.
 
-@strong{Returns}@*
 Returns the arch size in bits if known, @code{-1} otherwise.
 
+@end deftypefn
 @findex bfd_get_sign_extend_vma
 @subsubsection @code{bfd_get_sign_extend_vma}
-@strong{Synopsis}
-@example
-int bfd_get_sign_extend_vma (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} int bfd_get_sign_extend_vma (bfd *abfd); 
 Indicates if the target architecture "naturally" sign extends
 an address.  Some architectures implicitly sign extend address
 values when they are converted to types larger than the size
@@ -846,71 +679,53 @@ of an address.  For instance, bfd_get_st
 return an address sign extended to fill a bfd_vma when this is
 the case.
 
-@strong{Returns}@*
 Returns @code{1} if the target architecture is known to sign
 extend addresses, @code{0} if the target architecture is known to
 not sign extend addresses, and @code{-1} otherwise.
 
+@end deftypefn
 @findex bfd_set_start_address
 @subsubsection @code{bfd_set_start_address}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_start_address (bfd *abfd, bfd_vma vma); 
 Make @var{vma} the entry point of output BFD @var{abfd}.
 
-@strong{Returns}@*
 Returns @code{TRUE} on success, @code{FALSE} otherwise.
 
+@end deftypefn
 @findex bfd_get_gp_size
 @subsubsection @code{bfd_get_gp_size}
-@strong{Synopsis}
-@example
-unsigned int bfd_get_gp_size (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} unsigned int bfd_get_gp_size (bfd *abfd); 
 Return the maximum size of objects to be optimized using the GP
 register under MIPS ECOFF.  This is typically set by the @code{-G}
 argument to the compiler, assembler or linker.
 
+@end deftypefn
 @findex bfd_set_gp_size
 @subsubsection @code{bfd_set_gp_size}
-@strong{Synopsis}
-@example
-void bfd_set_gp_size (bfd *abfd, unsigned int i);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_set_gp_size (bfd *abfd, unsigned int i); 
 Set the maximum size of objects to be optimized using the GP
 register under ECOFF or MIPS ELF.  This is typically set by
 the @code{-G} argument to the compiler, assembler or linker.
 
+@end deftypefn
+@findex bfd_set_gp_value
+@subsubsection @code{bfd_set_gp_value}
+@deftypefn {Function} void bfd_set_gp_value (bfd *abfd, bfd_vma v); 
+Allow external access to the fucntion to set the GP value.
+This is specifically added for gdb-compile support.
+
+@end deftypefn
 @findex bfd_scan_vma
 @subsubsection @code{bfd_scan_vma}
-@strong{Synopsis}
-@example
-bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
-@end example
-@strong{Description}@*
-Convert, like @code{strtoul}, a numerical expression
-@var{string} into a @code{bfd_vma} integer, and return that integer.
-(Though without as many bells and whistles as @code{strtoul}.)
-The expression is assumed to be unsigned (i.e., positive).
-If given a @var{base}, it is used as the base for conversion.
-A base of 0 causes the function to interpret the string
-in hex if a leading "0x" or "0X" is found, otherwise
-in octal if a leading zero is found, otherwise in decimal.
-
-If the value would overflow, the maximum @code{bfd_vma} value is
-returned.
+@deftypefn {Function} bfd_vma bfd_scan_vma (const char *string, const char **end, int base); 
+Convert, like @code{strtoul} or @code{stdtoull}depending on the size
+of a @code{bfd_vma}, a numerical expression @var{string} into a
+@code{bfd_vma} integer, and return that integer.
 
+@end deftypefn
 @findex bfd_copy_private_header_data
 @subsubsection @code{bfd_copy_private_header_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_copy_private_header_data (bfd *ibfd, bfd *obfd); 
 Copy private BFD header information from the BFD @var{ibfd} to the
 the BFD @var{obfd}.  This copies information that may require
 sections to exist, but does not require symbol tables.  Return
@@ -929,13 +744,10 @@ Not enough memory exists to create priva
                  (ibfd, obfd))
 @end example
 
+@end deftypefn
 @findex bfd_copy_private_bfd_data
 @subsubsection @code{bfd_copy_private_bfd_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd); 
 Copy private BFD information from the BFD @var{ibfd} to the
 the BFD @var{obfd}.  Return @code{TRUE} on success, @code{FALSE} on error.
 Possible error returns are:
@@ -952,13 +764,10 @@ Not enough memory exists to create priva
                  (ibfd, obfd))
 @end example
 
+@end deftypefn
 @findex bfd_set_private_flags
 @subsubsection @code{bfd_set_private_flags}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_private_flags (bfd *abfd, flagword flags); 
 Set private BFD flag information in the BFD @var{abfd}.
 Return @code{TRUE} on success, @code{FALSE} on error.  Possible error
 returns are:
@@ -974,9 +783,9 @@ Not enough memory exists to create priva
        BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
 @end example
 
+@end deftypefn
 @findex Other functions
 @subsubsection @code{Other functions}
-@strong{Description}@*
 The following functions exist but have not yet been documented.
 @example
 #define bfd_sizeof_headers(abfd, info) \
@@ -986,6 +795,11 @@ The following functions exist but have n
        BFD_SEND (abfd, _bfd_find_nearest_line, \
                  (abfd, syms, sec, off, file, func, line, NULL))
 
+#define bfd_find_nearest_line_with_alt(abfd, alt_filename, sec, syms, off, \
+                                       file, func, line, disc) \
+       BFD_SEND (abfd, _bfd_find_nearest_line_with_alt, \
+                 (abfd, alt_filename, syms, sec, off, file, func, line, disc))
+
 #define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
                                            line, disc) \
        BFD_SEND (abfd, _bfd_find_nearest_line, \
@@ -1009,7 +823,8 @@ The following functions exist but have n
        BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
 
 #define bfd_stat_arch_elt(abfd, stat) \
-       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
+       BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \
+                 _bfd_stat_arch_elt, (abfd, stat))
 
 #define bfd_update_armap_timestamp(abfd) \
        BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
@@ -1072,148 +887,60 @@ The following functions exist but have n
 #define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
        BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
 
-extern bfd_byte *bfd_get_relocated_section_contents
-  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
-   bfd_boolean, asymbol **);
-
 @end example
 
+@findex bfd_get_relocated_section_contents
+@subsubsection @code{bfd_get_relocated_section_contents}
+@deftypefn {Function} bfd_byte *bfd_get_relocated_section_contents (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *, bool, asymbol **); 
+Read and relocate the indirect link_order section, into DATA
+(if non-NULL) or to a malloc'd buffer.  Return the buffer, or
+NULL on errors.
+
+@end deftypefn
+@findex bfd_record_phdr
+@subsubsection @code{bfd_record_phdr}
+@deftypefn {Function} bool bfd_record_phdr (bfd *, unsigned long, bool, flagword, bool, bfd_vma, bool, bool, unsigned int, struct bfd_section **); 
+Record information about an ELF program header.
+
+@end deftypefn
+@findex bfd_sprintf_vma
+@subsubsection @code{bfd_sprintf_vma}
+@deftypefn {Function} void bfd_sprintf_vma (bfd *, char *, bfd_vma); void bfd_fprintf_vma (bfd *, void *, bfd_vma); 
+bfd_sprintf_vma and bfd_fprintf_vma display an address in the
+target's address size.
+
+@end deftypefn
 @findex bfd_alt_mach_code
 @subsubsection @code{bfd_alt_mach_code}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_alt_mach_code (bfd *abfd, int alternative); 
 When more than one machine code number is available for the
 same machine type, this function can be used to switch between
 the preferred one (alternative == 0) and any others.  Currently,
 only ELF supports this feature, with up to two alternate
 machine codes.
 
+@end deftypefn
 @findex bfd_emul_get_maxpagesize
 @subsubsection @code{bfd_emul_get_maxpagesize}
-@strong{Synopsis}
-@example
-bfd_vma bfd_emul_get_maxpagesize (const char *);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_vma bfd_emul_get_maxpagesize (const char *); 
 Returns the maximum page size, in bytes, as determined by
 emulation.
 
-@strong{Returns}@*
-Returns the maximum page size in bytes for ELF, 0 otherwise.
-
-@findex bfd_emul_set_maxpagesize
-@subsubsection @code{bfd_emul_set_maxpagesize}
-@strong{Synopsis}
-@example
-void bfd_emul_set_maxpagesize (const char *, bfd_vma);
-@end example
-@strong{Description}@*
-For ELF, set the maximum page size for the emulation.  It is
-a no-op for other formats.
-
+@end deftypefn
 @findex bfd_emul_get_commonpagesize
 @subsubsection @code{bfd_emul_get_commonpagesize}
-@strong{Synopsis}
-@example
-bfd_vma bfd_emul_get_commonpagesize (const char *, bfd_boolean);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_vma bfd_emul_get_commonpagesize (const char *); 
 Returns the common page size, in bytes, as determined by
 emulation.
 
-@strong{Returns}@*
-Returns the common page size in bytes for ELF, 0 otherwise.
-
-@findex bfd_emul_set_commonpagesize
-@subsubsection @code{bfd_emul_set_commonpagesize}
-@strong{Synopsis}
-@example
-void bfd_emul_set_commonpagesize (const char *, bfd_vma);
-@end example
-@strong{Description}@*
-For ELF, set the common page size for the emulation.  It is
-a no-op for other formats.
-
+@end deftypefn
 @findex bfd_demangle
 @subsubsection @code{bfd_demangle}
-@strong{Synopsis}
-@example
-char *bfd_demangle (bfd *, const char *, int);
-@end example
-@strong{Description}@*
+@deftypefn {Function} char *bfd_demangle (bfd *, const char *, int); 
 Wrapper around cplus_demangle.  Strips leading underscores and
 other such chars that would otherwise confuse the demangler.
 If passed a g++ v3 ABI mangled name, returns a buffer allocated
 with malloc holding the demangled name.  Returns NULL otherwise
 and on memory alloc failure.
 
-@findex bfd_update_compression_header
-@subsubsection @code{bfd_update_compression_header}
-@strong{Synopsis}
-@example
-void bfd_update_compression_header
-   (bfd *abfd, bfd_byte *contents, asection *sec);
-@end example
-@strong{Description}@*
-Set the compression header at CONTENTS of SEC in ABFD and update
-elf_section_flags for compression.
-
-@findex bfd_check_compression_header
-@subsubsection @code{bfd_check_compression_header}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_check_compression_header
-   (bfd *abfd, bfd_byte *contents, asection *sec,
-    bfd_size_type *uncompressed_size,
-    unsigned int *uncompressed_alignment_power);
-@end example
-@strong{Description}@*
-Check the compression header at CONTENTS of SEC in ABFD and
-store the uncompressed size in UNCOMPRESSED_SIZE and the
-uncompressed data alignment in UNCOMPRESSED_ALIGNMENT_POWER
-if the compression header is valid.
-
-@strong{Returns}@*
-Return TRUE if the compression header is valid.
-
-@findex bfd_get_compression_header_size
-@subsubsection @code{bfd_get_compression_header_size}
-@strong{Synopsis}
-@example
-int bfd_get_compression_header_size (bfd *abfd, asection *sec);
-@end example
-@strong{Description}@*
-Return the size of the compression header of SEC in ABFD.
-
-@strong{Returns}@*
-Return the size of the compression header in bytes.
-
-@findex bfd_convert_section_size
-@subsubsection @code{bfd_convert_section_size}
-@strong{Synopsis}
-@example
-bfd_size_type bfd_convert_section_size
-   (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
-@end example
-@strong{Description}@*
-Convert the size @var{size} of the section @var{isec} in input
-BFD @var{ibfd} to the section size in output BFD @var{obfd}.
-
-@findex bfd_convert_section_contents
-@subsubsection @code{bfd_convert_section_contents}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_convert_section_contents
-   (bfd *ibfd, asection *isec, bfd *obfd,
-    bfd_byte **ptr, bfd_size_type *ptr_size);
-@end example
-@strong{Description}@*
-Convert the contents, stored in @var{*ptr}, of the section
-@var{isec} in input BFD @var{ibfd} to output BFD @var{obfd}
-if needed.  The original buffer pointed to by @var{*ptr} may
-be freed and @var{*ptr} is returned with memory malloc'd by this
-function, and the new size written to @var{ptr_size}.
-
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdver.texi ./bfd/doc/bfdver.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdver.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/bfdver.texi	2024-02-01 01:50:55.000000000 +0000
@@ -1,4 +1,4 @@
-@set VERSION 2.33.50
+@set VERSION 2.42.50
 @set VERSION_PACKAGE (GNU Binutils) 
-@set UPDATED December 2019
-@set BUGURL @uref{http://www.sourceware.org/bugzilla/}
+@set UPDATED February 2024
+@set BUGURL @uref{https://sourceware.org/bugzilla/}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdwin.texi ./bfd/doc/bfdwin.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/bfdwin.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/bfdwin.texi	2024-02-01 01:50:55.000000000 +0000
@@ -1,2 +1,18 @@
-@findex 
-@subsubsection @code{}
+@findex bfd_init_window
+@subsubsection @code{bfd_init_window}
+@deftypefn {Function} void bfd_init_window (bfd_window *); 
+Initialise mmap window.
+
+@end deftypefn
+@findex bfd_free_window
+@subsubsection @code{bfd_free_window}
+@deftypefn {Function} void bfd_free_window (bfd_window *); 
+Finalise mmap window struct.
+
+@end deftypefn
+@findex bfd_get_file_window
+@subsubsection @code{bfd_get_file_window}
+@deftypefn {Function} bool bfd_get_file_window (bfd *, file_ptr, bfd_size_type, bfd_window *, bool {*writable*}); 
+mmap from a bfd's iostream.
+
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/cache.texi ./bfd/doc/cache.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/cache.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/cache.texi	2024-02-01 01:50:55.000000000 +0000
@@ -15,51 +15,45 @@ handle.
 
 @findex bfd_cache_init
 @subsubsection @code{bfd_cache_init}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_cache_init (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_cache_init (bfd *abfd); 
 Add a newly opened BFD to the cache.
 
+@end deftypefn
 @findex bfd_cache_close
 @subsubsection @code{bfd_cache_close}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_cache_close (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_cache_close (bfd *abfd); 
 Remove the BFD @var{abfd} from the cache. If the attached file is open,
 then close it too.
 
-@strong{Returns}@*
 @code{FALSE} is returned if closing the file fails, @code{TRUE} is
 returned if all is well.
 
+@end deftypefn
 @findex bfd_cache_close_all
 @subsubsection @code{bfd_cache_close_all}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_cache_close_all (void);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_cache_close_all (void); 
 Remove all BFDs from the cache. If the attached file is open,
-then close it too.
+then close it too.  Note - despite its name this function will
+close a BFD even if it is not marked as being cacheable, ie
+even if bfd_get_cacheable() returns false.
 
-@strong{Returns}@*
 @code{FALSE} is returned if closing one of the file fails, @code{TRUE} is
 returned if all is well.
 
+@end deftypefn
+@findex bfd_cache_size
+@subsubsection @code{bfd_cache_size}
+@deftypefn {Function} unsigned bfd_cache_size (void); 
+Return the number of open files in the cache.
+
+@end deftypefn
 @findex bfd_open_file
 @subsubsection @code{bfd_open_file}
-@strong{Synopsis}
-@example
-FILE* bfd_open_file (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} FILE* bfd_open_file (bfd *abfd); 
 Call the OS to open a file for @var{abfd}.  Return the @code{FILE *}
 (possibly @code{NULL}) that results from this operation.  Set up the
 BFD so that future accesses know the file is open. If the @code{FILE *}
 returned is @code{NULL}, then it won't have been put in the
 cache, so it won't have to be removed from it.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/chew.c ./bfd/doc/chew.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/chew.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/doc/chew.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* chew
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Contributed by steve chamberlain @cygnus
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -31,6 +31,9 @@
    You define new words thus:
    : <newword> <oldwords> ;
 
+   Variables are defined using:
+   variable NAME
+
 */
 
 /* Primitives provided by the program:
@@ -65,37 +68,34 @@
 	exit - fn chew_exit
 	swap
 	outputdots - strip out lines without leading dots
-	paramstuff - convert full declaration into "PARAMS" form if not already
 	maybecatstr - do catstr if internal_mode == internal_wanted, discard
 		value in any case
+	catstrif - do catstr if top of integer stack is nonzero
 	translatecomments - turn {* and *} into comment delimiters
 	kill_bogus_lines - get rid of extra newlines
 	indent
-	internalmode - pop from integer stack, set `internalmode' to that value
 	print_stack_level - print current stack depth to stderr
 	strip_trailing_newlines - go ahead, guess...
 	[quoted string] - push string onto string stack
 	[word starting with digit] - push atol(str) onto integer stack
 
+	internalmode - the internalmode variable (evaluates to address)
+
    A command must be all upper-case, and alone on a line.
 
    Foo.  */
 
-#include "ansidecl.h"
 #include <assert.h>
 #include <stdio.h>
 #include <ctype.h>
 #include <stdlib.h>
 #include <string.h>
+#include <stdint.h>
+#include <inttypes.h>
 
 #define DEF_SIZE 5000
 #define STACK 50
 
-int internal_wanted;
-int internal_mode;
-
-int warning;
-
 /* Here is a string type ...  */
 
 typedef struct buffer
@@ -105,43 +105,105 @@ typedef struct buffer
   unsigned long size;
 } string_type;
 
-#ifdef __STDC__
-static void init_string_with_size (string_type *, unsigned int);
-static void init_string (string_type *);
-static int find (string_type *, char *);
-static void write_buffer (string_type *, FILE *);
-static void delete_string (string_type *);
-static char *addr (string_type *, unsigned int);
-static char at (string_type *, unsigned int);
-static void catchar (string_type *, int);
-static void overwrite_string (string_type *, string_type *);
-static void catbuf (string_type *, char *, unsigned int);
-static void cattext (string_type *, char *);
-static void catstr (string_type *, string_type *);
-static void die (char *);
-#endif
-
-static void
-init_string_with_size (buffer, size)
-     string_type *buffer;
-     unsigned int size;
+/* Compiled programs consist of arrays of these.  */
+
+typedef union
+{
+  void (*f) (void);
+  struct dict_struct *e;
+  char *s;
+  intptr_t l;
+} pcu;
+
+typedef struct dict_struct
+{
+  char *word;
+  struct dict_struct *next;
+  pcu *code;
+  int code_length;
+  int code_end;
+} dict_type;
+
+int internal_wanted;
+intptr_t *internal_mode;
+
+int warning;
+
+string_type stack[STACK];
+string_type *tos;
+
+unsigned int idx = 0; /* Pos in input buffer */
+string_type *ptr; /* and the buffer */
+
+intptr_t istack[STACK];
+intptr_t *isp = &istack[0];
+
+dict_type *root;
+
+pcu *pc;
+
+static void
+die (char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+  exit (1);
+}
+
+void *
+xmalloc (size_t size)
+{
+  void *newmem;
+
+  if (size == 0)
+    size = 1;
+  newmem = malloc (size);
+  if (!newmem)
+    die ("out of memory");
+
+  return newmem;
+}
+
+void *
+xrealloc (void *oldmem, size_t size)
+{
+  void *newmem;
+
+  if (size == 0)
+    size = 1;
+  if (!oldmem)
+    newmem = malloc (size);
+  else
+    newmem = realloc (oldmem, size);
+  if (!newmem)
+    die ("out of memory");
+
+  return newmem;
+}
+
+char *
+xstrdup (const char *s)
+{
+  size_t len = strlen (s) + 1;
+  char *ret = xmalloc (len);
+  return memcpy (ret, s, len);
+}
+
+static void
+init_string_with_size (string_type *buffer, unsigned int size)
 {
   buffer->write_idx = 0;
   buffer->size = size;
-  buffer->ptr = (char *) malloc (size);
+  buffer->ptr = xmalloc (size);
 }
 
 static void
-init_string (buffer)
-     string_type *buffer;
+init_string (string_type *buffer)
 {
   init_string_with_size (buffer, DEF_SIZE);
 }
 
 static int
-find (str, what)
-     string_type *str;
-     char *what;
+find (string_type *str, char *what)
 {
   unsigned int i;
   char *p;
@@ -157,9 +219,7 @@ find (str, what)
 }
 
 static void
-write_buffer (buffer, f)
-     string_type *buffer;
-     FILE *f;
+write_buffer (string_type *buffer, FILE *f)
 {
   if (buffer->write_idx != 0
       && fwrite (buffer->ptr, buffer->write_idx, 1, f) != 1)
@@ -167,26 +227,20 @@ write_buffer (buffer, f)
 }
 
 static void
-delete_string (buffer)
-     string_type *buffer;
+delete_string (string_type *buffer)
 {
-  if (buffer->ptr)
-    free (buffer->ptr);
+  free (buffer->ptr);
   buffer->ptr = NULL;
 }
 
 static char *
-addr (buffer, idx)
-     string_type *buffer;
-     unsigned int idx;
+addr (string_type *buffer, unsigned int idx)
 {
   return buffer->ptr + idx;
 }
 
 static char
-at (buffer, pos)
-     string_type *buffer;
-     unsigned int pos;
+at (string_type *buffer, unsigned int pos)
 {
   if (pos >= buffer->write_idx)
     return 0;
@@ -194,23 +248,19 @@ at (buffer, pos)
 }
 
 static void
-catchar (buffer, ch)
-     string_type *buffer;
-     int ch;
+catchar (string_type *buffer, int ch)
 {
   if (buffer->write_idx == buffer->size)
     {
       buffer->size *= 2;
-      buffer->ptr = (char *) realloc (buffer->ptr, buffer->size);
+      buffer->ptr = xrealloc (buffer->ptr, buffer->size);
     }
 
   buffer->ptr[buffer->write_idx++] = ch;
 }
 
 static void
-overwrite_string (dst, src)
-     string_type *dst;
-     string_type *src;
+overwrite_string (string_type *dst, string_type *src)
 {
   free (dst->ptr);
   dst->size = src->size;
@@ -219,41 +269,32 @@ overwrite_string (dst, src)
 }
 
 static void
-catbuf (buffer, buf, len)
-     string_type *buffer;
-     char *buf;
-     unsigned int len;
+catbuf (string_type *buffer, char *buf, unsigned int len)
 {
   if (buffer->write_idx + len >= buffer->size)
     {
       while (buffer->write_idx + len >= buffer->size)
 	buffer->size *= 2;
-      buffer->ptr = (char *) realloc (buffer->ptr, buffer->size);
+      buffer->ptr = xrealloc (buffer->ptr, buffer->size);
     }
   memcpy (buffer->ptr + buffer->write_idx, buf, len);
   buffer->write_idx += len;
 }
 
 static void
-cattext (buffer, string)
-     string_type *buffer;
-     char *string;
+cattext (string_type *buffer, char *string)
 {
   catbuf (buffer, string, (unsigned int) strlen (string));
 }
 
 static void
-catstr (dst, src)
-     string_type *dst;
-     string_type *src;
+catstr (string_type *dst, string_type *src)
 {
   catbuf (dst, src->ptr, src->write_idx);
 }
 
 static unsigned int
-skip_white_and_stars (src, idx)
-     string_type *src;
-     unsigned int idx;
+skip_white_and_stars (string_type *src, unsigned int idx)
 {
   char c;
   while ((c = at (src, idx)),
@@ -268,9 +309,7 @@ skip_white_and_stars (src, idx)
 }
 
 static unsigned int
-skip_past_newline_1 (ptr, idx)
-     string_type *ptr;
-     unsigned int idx;
+skip_past_newline_1 (string_type *ptr, unsigned int idx)
 {
   while (at (ptr, idx)
 	 && at (ptr, idx) != '\n')
@@ -280,44 +319,8 @@ skip_past_newline_1 (ptr, idx)
   return idx;
 }
 
-/***********************************************************************/
-
-string_type stack[STACK];
-string_type *tos;
-
-unsigned int idx = 0; /* Pos in input buffer */
-string_type *ptr; /* and the buffer */
-typedef void (*stinst_type)();
-stinst_type *pc;
-stinst_type sstack[STACK];
-stinst_type *ssp = &sstack[0];
-long istack[STACK];
-long *isp = &istack[0];
-
-typedef int *word_type;
-
-struct dict_struct
-{
-  char *word;
-  struct dict_struct *next;
-  stinst_type *code;
-  int code_length;
-  int code_end;
-  int var;
-};
-
-typedef struct dict_struct dict_type;
-
-static void
-die (msg)
-     char *msg;
-{
-  fprintf (stderr, "%s\n", msg);
-  exit (1);
-}
-
 static void
-check_range ()
+check_range (void)
 {
   if (tos < stack)
     die ("underflow in string stack");
@@ -326,7 +329,7 @@ check_range ()
 }
 
 static void
-icheck_range ()
+icheck_range (void)
 {
   if (isp < istack)
     die ("underflow in integer stack");
@@ -334,63 +337,42 @@ icheck_range ()
     die ("overflow in integer stack");
 }
 
-#ifdef __STDC__
-static void exec (dict_type *);
-static void call (void);
-static void remchar (void), strip_trailing_newlines (void), push_number (void);
-static void push_text (void);
-static void remove_noncomments (string_type *, string_type *);
-static void print_stack_level (void);
-static void paramstuff (void), translatecomments (void);
-static void outputdots (void), courierize (void), bulletize (void);
-static void do_fancy_stuff (void);
-static int iscommand (string_type *, unsigned int);
-static int copy_past_newline (string_type *, unsigned int, string_type *);
-static void icopy_past_newline (void), kill_bogus_lines (void), indent (void);
-static void get_stuff_in_command (void), swap (void), other_dup (void);
-static void drop (void), idrop (void);
-static void icatstr (void), skip_past_newline (void), internalmode (void);
-static void maybecatstr (void);
-static char *nextword (char *, char **);
-dict_type *lookup_word (char *);
-static void perform (void);
-dict_type *newentry (char *);
-unsigned int add_to_definition (dict_type *, stinst_type);
-void add_intrinsic (char *, void (*)());
-void add_var (char *);
-void compile (char *);
-static void bang (void);
-static void atsign (void);
-static void hello (void);
-static void stdout_ (void);
-static void stderr_ (void);
-static void print (void);
-static void read_in (string_type *, FILE *);
-static void usage (void);
-static void chew_exit (void);
-#endif
+static void
+drop (void)
+{
+  tos--;
+  check_range ();
+  delete_string (tos + 1);
+  pc++;
+}
+
+static void
+idrop (void)
+{
+  isp--;
+  icheck_range ();
+  pc++;
+}
 
 static void
-exec (word)
-     dict_type *word;
+exec (dict_type *word)
 {
   pc = word->code;
-  while (*pc)
-    (*pc) ();
+  while (pc->f)
+    pc->f ();
 }
 
 static void
-call ()
+call (void)
 {
-  stinst_type *oldpc = pc;
-  dict_type *e;
-  e = (dict_type *) (pc[1]);
+  pcu *oldpc = pc;
+  dict_type *e = pc[1].e;
   exec (e);
   pc = oldpc + 2;
 }
 
 static void
-remchar ()
+remchar (void)
 {
   if (tos->write_idx)
     tos->write_idx--;
@@ -398,33 +380,41 @@ remchar ()
 }
 
 static void
-strip_trailing_newlines ()
+strip_trailing_newlines (void)
 {
-  while ((isspace ((unsigned char) at (tos, tos->write_idx - 1))
-	  || at (tos, tos->write_idx - 1) == '\n')
-	 && tos->write_idx > 0)
+  while (tos->write_idx > 0
+	 && (isspace ((unsigned char) at (tos, tos->write_idx - 1))
+	     || at (tos, tos->write_idx - 1) == '\n'))
     tos->write_idx--;
   pc++;
 }
 
 static void
-push_number ()
+push_number (void)
 {
   isp++;
   icheck_range ();
   pc++;
-  *isp = (long) (*pc);
+  *isp = pc->l;
   pc++;
 }
 
+/* This is a wrapper for push_number just so we can correctly free the
+   variable at the end.  */
 static void
-push_text ()
+push_variable (void)
+{
+  push_number ();
+}
+
+static void
+push_text (void)
 {
   tos++;
   check_range ();
   init_string (tos);
   pc++;
-  cattext (tos, *((char **) pc));
+  cattext (tos, pc->s);
   pc++;
 }
 
@@ -434,9 +424,7 @@ push_text ()
    Blank lines are turned into one blank line.  */
 
 static void
-remove_noncomments (src, dst)
-     string_type *src;
-     string_type *dst;
+remove_noncomments (string_type *src, string_type *dst)
 {
   unsigned int idx = 0;
 
@@ -487,7 +475,7 @@ remove_noncomments (src, dst)
 }
 
 static void
-print_stack_level ()
+print_stack_level (void)
 {
   fprintf (stderr, "current string stack depth = %ld, ",
 	   (long) (tos - stack));
@@ -496,89 +484,11 @@ print_stack_level ()
   pc++;
 }
 
-/* turn:
-     foobar name(stuff);
-   into:
-     foobar
-     name PARAMS ((stuff));
-   and a blank line.
- */
-
-static void
-paramstuff ()
-{
-  unsigned int openp;
-  unsigned int fname;
-  unsigned int idx;
-  unsigned int len;
-  string_type out;
-  init_string (&out);
-
-#define NO_PARAMS 1
-
-  /* Make sure that it's not already param'd or proto'd.  */
-  if (NO_PARAMS
-      || find (tos, "PARAMS") || find (tos, "PROTO") || !find (tos, "("))
-    {
-      catstr (&out, tos);
-    }
-  else
-    {
-      /* Find the open paren.  */
-      for (openp = 0; at (tos, openp) != '(' && at (tos, openp); openp++)
-	;
-
-      fname = openp;
-      /* Step back to the fname.  */
-      fname--;
-      while (fname && isspace ((unsigned char) at (tos, fname)))
-	fname--;
-      while (fname
-	     && !isspace ((unsigned char) at (tos,fname))
-	     && at (tos,fname) != '*')
-	fname--;
-
-      fname++;
-
-      /* Output type, omitting trailing whitespace character(s), if
-         any.  */
-      for (len = fname; 0 < len; len--)
-	{
-	  if (!isspace ((unsigned char) at (tos, len - 1)))
-	    break;
-	}
-      for (idx = 0; idx < len; idx++)
-	catchar (&out, at (tos, idx));
-
-      cattext (&out, "\n");	/* Insert a newline between type and fnname */
-
-      /* Output function name, omitting trailing whitespace
-         character(s), if any.  */
-      for (len = openp; 0 < len; len--)
-	{
-	  if (!isspace ((unsigned char) at (tos, len - 1)))
-	    break;
-	}
-      for (idx = fname; idx < len; idx++)
-	catchar (&out, at (tos, idx));
-
-      cattext (&out, " PARAMS (");
-
-      for (idx = openp; at (tos, idx) && at (tos, idx) != ';'; idx++)
-	catchar (&out, at (tos, idx));
-
-      cattext (&out, ");\n\n");
-    }
-  overwrite_string (tos, &out);
-  pc++;
-
-}
-
 /* turn {*
    and *} into comments */
 
 static void
-translatecomments ()
+translatecomments (void)
 {
   unsigned int idx = 0;
   string_type out;
@@ -608,9 +518,34 @@ translatecomments ()
   pc++;
 }
 
+/* Wrap tos-1 as a C comment, indenting by tos.  */
+
+static void
+wrap_comment (void)
+{
+  string_type out;
+  init_string (&out);
+
+  catstr (&out, tos);
+  cattext (&out, "/* ");
+  for (unsigned int idx = 0; at (tos - 1, idx); idx++)
+    {
+      catchar (&out, at (tos - 1, idx));
+      if (at (tos - 1, idx) == '\n' && at (tos - 1, idx + 1) != '\n')
+	{
+	  catstr (&out, tos);
+	  cattext (&out, "   ");
+	}
+    }
+  cattext (&out, "  */");
+
+  overwrite_string (tos - 1, &out);
+  drop ();
+}
+
 /* Mod tos so that only lines with leading dots remain */
 static void
-outputdots ()
+outputdots (void)
 {
   unsigned int idx = 0;
   string_type out;
@@ -622,11 +557,31 @@ outputdots ()
       if (at (tos, idx) == '.')
 	{
 	  char c;
+	  int spaces;
 
 	  idx++;
-
+	  spaces = 0;
 	  while ((c = at (tos, idx)) && c != '\n')
 	    {
+	      if (spaces >= 0)
+		{
+		  if (c == ' ')
+		    {
+		      spaces++;
+		      idx++;
+		      continue;
+		    }
+		  else
+		    {
+		      while (spaces >= 8)
+			{
+			  catchar (&out, '\t');
+			  spaces -= 8;
+			}
+		      while (spaces-- > 0)
+			catchar (&out, ' ');
+		    }
+		}
 	      if (c == '{' && at (tos, idx + 1) == '*')
 		{
 		  cattext (&out, "/*");
@@ -659,7 +614,7 @@ outputdots ()
 
 /* Find lines starting with . and | and put example around them on tos */
 static void
-courierize ()
+courierize (void)
 {
   string_type out;
   unsigned int idx = 0;
@@ -746,7 +701,7 @@ courierize ()
    itemize, inplace at TOS*/
 
 static void
-bulletize ()
+bulletize (void)
 {
   unsigned int idx = 0;
   int on = 0;
@@ -801,7 +756,7 @@ bulletize ()
 /* Turn <<foo>> into @code{foo} in place at TOS*/
 
 static void
-do_fancy_stuff ()
+do_fancy_stuff (void)
 {
   unsigned int idx = 0;
   string_type out;
@@ -840,9 +795,7 @@ do_fancy_stuff ()
 /* A command is all upper case,and alone on a line.  */
 
 static int
-iscommand (ptr, idx)
-     string_type *ptr;
-     unsigned int idx;
+iscommand (string_type *ptr, unsigned int idx)
 {
   unsigned int len = 0;
   while (at (ptr, idx))
@@ -866,10 +819,7 @@ iscommand (ptr, idx)
 }
 
 static int
-copy_past_newline (ptr, idx, dst)
-     string_type *ptr;
-     unsigned int idx;
-     string_type *dst;
+copy_past_newline (string_type *ptr, unsigned int idx, string_type *dst)
 {
   int column = 0;
 
@@ -898,7 +848,7 @@ copy_past_newline (ptr, idx, dst)
 }
 
 static void
-icopy_past_newline ()
+icopy_past_newline (void)
 {
   tos++;
   check_range ();
@@ -907,11 +857,8 @@ icopy_past_newline ()
   pc++;
 }
 
-/* indent
-   Take the string at the top of the stack, do some prettying.  */
-
 static void
-kill_bogus_lines ()
+kill_bogus_lines (void)
 {
   int sl;
 
@@ -998,7 +945,42 @@ kill_bogus_lines ()
 }
 
 static void
-indent ()
+collapse_whitespace (void)
+{
+  int last_was_ws = 0;
+  int idx;
+
+  string_type out;
+  init_string (&out);
+
+  for (idx = 0; at (tos, idx) != 0; ++idx)
+    {
+      char c = at (tos, idx);
+      if (isspace (c))
+	{
+	  if (!last_was_ws)
+	    {
+	      catchar (&out, ' ');
+	      last_was_ws = 1;
+	    }
+	}
+      else
+	{
+	  catchar (&out, c);
+	  last_was_ws = 0;
+	}
+    }
+
+  pc++;
+  delete_string (tos);
+  *tos = out;
+}
+
+/* indent
+   Take the string at the top of the stack, do some prettying.  */
+
+static void
+indent (void)
 {
   string_type out;
   int tab = 0;
@@ -1010,33 +992,42 @@ indent ()
       switch (at (tos, idx))
 	{
 	case '\n':
-	  cattext (&out, "\n");
+	  catchar (&out, '\n');
 	  idx++;
 	  if (tab && at (tos, idx))
 	    {
-	      cattext (&out, "    ");
+	      int i;
+	      for (i = 0; i < tab - 1; i += 2)
+		catchar (&out, '\t');
+	      if (i < tab)
+		cattext (&out, "    ");
 	    }
 	  ol = 0;
 	  break;
 	case '(':
-	  tab++;
 	  if (ol == 0)
-	    cattext (&out, "   ");
+	    {
+	      int i;
+	      for (i = 1; i < tab - 1; i += 2)
+		catchar (&out, '\t');
+	      if (i < tab)
+		cattext (&out, "    ");
+	      cattext (&out, "   ");
+	    }
+	  tab++;
 	  idx++;
-	  cattext (&out, "(");
+	  catchar (&out, '(');
 	  ol = 1;
 	  break;
 	case ')':
 	  tab--;
-	  cattext (&out, ")");
+	  catchar (&out, ')');
 	  idx++;
 	  ol = 1;
-
 	  break;
 	default:
 	  catchar (&out, at (tos, idx));
 	  ol = 1;
-
 	  idx++;
 	  break;
 	}
@@ -1049,7 +1040,7 @@ indent ()
 }
 
 static void
-get_stuff_in_command ()
+get_stuff_in_command (void)
 {
   tos++;
   check_range ();
@@ -1065,7 +1056,7 @@ get_stuff_in_command ()
 }
 
 static void
-swap ()
+swap (void)
 {
   string_type t;
 
@@ -1076,7 +1067,7 @@ swap ()
 }
 
 static void
-other_dup ()
+other_dup (void)
 {
   tos++;
   check_range ();
@@ -1086,55 +1077,43 @@ other_dup ()
 }
 
 static void
-drop ()
+icatstr (void)
 {
   tos--;
   check_range ();
+  catstr (tos, tos + 1);
   delete_string (tos + 1);
   pc++;
 }
 
 static void
-idrop ()
+skip_past_newline (void)
 {
-  isp--;
-  icheck_range ();
+  idx = skip_past_newline_1 (ptr, idx);
   pc++;
 }
 
 static void
-icatstr ()
+maybecatstr (void)
 {
+  if (internal_wanted == *internal_mode)
+    {
+      catstr (tos - 1, tos);
+    }
+  delete_string (tos);
   tos--;
   check_range ();
-  catstr (tos, tos + 1);
-  delete_string (tos + 1);
-  pc++;
-}
-
-static void
-skip_past_newline ()
-{
-  idx = skip_past_newline_1 (ptr, idx);
   pc++;
 }
 
 static void
-internalmode ()
+catstrif (void)
 {
-  internal_mode = *(isp);
+  int cond = isp[0];
   isp--;
   icheck_range ();
-  pc++;
-}
-
-static void
-maybecatstr ()
-{
-  if (internal_wanted == internal_mode)
-    {
-      catstr (tos - 1, tos);
-    }
+  if (cond)
+    catstr (tos - 1, tos);
   delete_string (tos);
   tos--;
   check_range ();
@@ -1142,9 +1121,7 @@ maybecatstr ()
 }
 
 char *
-nextword (string, word)
-     char *string;
-     char **word;
+nextword (char *string, char **word)
 {
   char *word_start;
   int idx;
@@ -1197,7 +1174,7 @@ nextword (string, word)
 	}
     }
 
-  *word = (char *) malloc (length + 1);
+  *word = xmalloc (length + 1);
 
   dst = *word;
   src = word_start;
@@ -1231,11 +1208,8 @@ nextword (string, word)
     return NULL;
 }
 
-dict_type *root;
-
 dict_type *
-lookup_word (word)
-     char *word;
+lookup_word (char *word)
 {
   dict_type *ptr = root;
   while (ptr)
@@ -1258,17 +1232,21 @@ free_words (void)
     {
       dict_type *next;
 
-      if (ptr->word)
-	free (ptr->word);
+      free (ptr->word);
       if (ptr->code)
 	{
 	  int i;
 	  for (i = 0; i < ptr->code_end - 1; i ++)
-	    if (ptr->code[i] == push_text
-		&& ptr->code[i + 1])
+	    if (ptr->code[i].f == push_text
+		&& ptr->code[i + 1].s)
 	      {
-		free ((char *) ptr->code[i + 1] - 1);
-		++ i;
+		free (ptr->code[i + 1].s - 1);
+		++i;
+	      }
+	    else if (ptr->code[i].f == push_variable)
+	      {
+		free ((void *) ptr->code[i + 1].l);
+		++i;
 	      }
 	  free (ptr->code);
 	}
@@ -1303,40 +1281,36 @@ perform (void)
 	    {
 	      if (warning)
 		fprintf (stderr, "warning, %s is not recognised\n", next);
-	      skip_past_newline ();
+	      idx = skip_past_newline_1 (ptr, idx);
 	    }
 	  free (next);
 	}
       else
-	skip_past_newline ();
+	idx = skip_past_newline_1 (ptr, idx);
     }
 }
 
 dict_type *
-newentry (word)
-     char *word;
+newentry (char *word)
 {
-  dict_type *new_d = (dict_type *) malloc (sizeof (dict_type));
+  dict_type *new_d = xmalloc (sizeof (*new_d));
   new_d->word = word;
   new_d->next = root;
   root = new_d;
-  new_d->code = (stinst_type *) malloc (sizeof (stinst_type));
+  new_d->code = xmalloc (sizeof (*new_d->code));
   new_d->code_length = 1;
   new_d->code_end = 0;
   return new_d;
 }
 
 unsigned int
-add_to_definition (entry, word)
-     dict_type *entry;
-     stinst_type word;
+add_to_definition (dict_type *entry, pcu word)
 {
   if (entry->code_end == entry->code_length)
     {
       entry->code_length += 2;
-      entry->code =
-	(stinst_type *) realloc ((char *) (entry->code),
-				 entry->code_length * sizeof (stinst_type));
+      entry->code = xrealloc (entry->code,
+			      entry->code_length * sizeof (*entry->code));
     }
   entry->code[entry->code_end] = word;
 
@@ -1344,28 +1318,35 @@ add_to_definition (entry, word)
 }
 
 void
-add_intrinsic (name, func)
-     char *name;
-     void (*func) ();
-{
-  dict_type *new_d = newentry (strdup (name));
-  add_to_definition (new_d, func);
-  add_to_definition (new_d, 0);
+add_intrinsic (char *name, void (*func) (void))
+{
+  dict_type *new_d = newentry (xstrdup (name));
+  pcu p = { func };
+  add_to_definition (new_d, p);
+  p.f = 0;
+  add_to_definition (new_d, p);
 }
 
-void
-add_var (name)
-     char *name;
+static void
+add_variable (char *name, intptr_t *loc)
 {
   dict_type *new_d = newentry (name);
-  add_to_definition (new_d, push_number);
-  add_to_definition (new_d, (stinst_type) (&(new_d->var)));
-  add_to_definition (new_d, 0);
+  pcu p = { push_variable };
+  add_to_definition (new_d, p);
+  p.l = (intptr_t) loc;
+  add_to_definition (new_d, p);
+  p.f = 0;
+  add_to_definition (new_d, p);
+}
+
+static void
+add_intrinsic_variable (const char *name, intptr_t *loc)
+{
+  add_variable (xstrdup (name), loc);
 }
 
 void
-compile (string)
-     char *string;
+compile (char *string)
 {
   /* Add words to the dictionary.  */
   char *word;
@@ -1373,18 +1354,10 @@ compile (string)
   string = nextword (string, &word);
   while (string && *string && word[0])
     {
-      if (strcmp (word, "var") == 0)
-	{
-	  free (word);
-	  string = nextword (string, &word);
-	  if (!string)
-	    continue;
-	  add_var (word);
-	  string = nextword (string, &word);
-	}
-      else if (word[0] == ':')
+      if (word[0] == ':')
 	{
 	  dict_type *ptr;
+	  pcu p;
 
 	  /* Compile a word and add to dictionary.  */
 	  free (word);
@@ -1407,8 +1380,10 @@ compile (string)
 		case '"':
 		  /* got a string, embed magic push string
 		     function */
-		  add_to_definition (ptr, push_text);
-		  add_to_definition (ptr, (stinst_type) (word + 1));
+		  p.f = push_text;
+		  add_to_definition (ptr, p);
+		  p.s = word + 1;
+		  add_to_definition (ptr, p);
 		  break;
 		case '0':
 		case '1':
@@ -1422,56 +1397,71 @@ compile (string)
 		case '9':
 		  /* Got a number, embedd the magic push number
 		     function */
-		  add_to_definition (ptr, push_number);
-		  add_to_definition (ptr, (stinst_type) atol (word));
+		  p.f = push_number;
+		  add_to_definition (ptr, p);
+		  p.l = atol (word);
+		  add_to_definition (ptr, p);
 		  free (word);
 		  break;
 		default:
-		  add_to_definition (ptr, call);
-		  add_to_definition (ptr, (stinst_type) lookup_word (word));
+		  p.f = call;
+		  add_to_definition (ptr, p);
+		  p.e = lookup_word (word);
+		  add_to_definition (ptr, p);
 		  free (word);
 		}
 
 	      string = nextword (string, &word);
 	    }
-	  add_to_definition (ptr, 0);
+	  p.f = 0;
+	  add_to_definition (ptr, p);
 	  free (word);
 	  string = nextword (string, &word);
 	}
+      else if (strcmp (word, "variable") == 0)
+	{
+	  free (word);
+	  string = nextword (string, &word);
+	  if (!string)
+	    continue;
+	  intptr_t *loc = xmalloc (sizeof (intptr_t));
+	  *loc = 0;
+	  add_variable (word, loc);
+	  string = nextword (string, &word);
+	}
       else
 	{
 	  fprintf (stderr, "syntax error at %s\n", string - 1);
 	}
     }
-  if (word)
-    free (word);
+  free (word);
 }
 
 static void
-bang ()
+bang (void)
 {
-  *(long *) ((isp[0])) = isp[-1];
+  *(intptr_t *) ((isp[0])) = isp[-1];
   isp -= 2;
   icheck_range ();
   pc++;
 }
 
 static void
-atsign ()
+atsign (void)
 {
-  isp[0] = *(long *) (isp[0]);
+  isp[0] = *(intptr_t *) (isp[0]);
   pc++;
 }
 
 static void
-hello ()
+hello (void)
 {
   printf ("hello\n");
   pc++;
 }
 
 static void
-stdout_ ()
+stdout_ (void)
 {
   isp++;
   icheck_range ();
@@ -1480,7 +1470,7 @@ stdout_ ()
 }
 
 static void
-stderr_ ()
+stderr_ (void)
 {
   isp++;
   icheck_range ();
@@ -1489,14 +1479,14 @@ stderr_ ()
 }
 
 static void
-print ()
+print (void)
 {
   if (*isp == 1)
     write_buffer (tos, stdout);
   else if (*isp == 2)
     write_buffer (tos, stderr);
   else
-    fprintf (stderr, "print: illegal print destination `%ld'\n", *isp);
+    fprintf (stderr, "print: illegal print destination `%" PRIdPTR "'\n", *isp);
   isp--;
   tos--;
   icheck_range ();
@@ -1505,9 +1495,7 @@ print ()
 }
 
 static void
-read_in (str, file)
-     string_type *str;
-     FILE *file;
+read_in (string_type *str, FILE *file)
 {
   char buff[10000];
   unsigned int r;
@@ -1523,7 +1511,7 @@ read_in (str, file)
 }
 
 static void
-usage ()
+usage (void)
 {
   fprintf (stderr, "usage: -[d|i|g] <file >file\n");
   exit (33);
@@ -1535,15 +1523,13 @@ usage ()
    is a pointless waste of time.  */
 
 static void
-chew_exit ()
+chew_exit (void)
 {
   exit (0);
 }
 
 int
-main (ac, av)
-     int ac;
-     char *av[];
+main (int ac, char *av[])
 {
   unsigned int i;
   string_type buffer;
@@ -1579,14 +1565,19 @@ main (ac, av)
   add_intrinsic ("exit", chew_exit);
   add_intrinsic ("swap", swap);
   add_intrinsic ("outputdots", outputdots);
-  add_intrinsic ("paramstuff", paramstuff);
   add_intrinsic ("maybecatstr", maybecatstr);
+  add_intrinsic ("catstrif", catstrif);
   add_intrinsic ("translatecomments", translatecomments);
+  add_intrinsic ("wrap_comment", wrap_comment);
   add_intrinsic ("kill_bogus_lines", kill_bogus_lines);
   add_intrinsic ("indent", indent);
-  add_intrinsic ("internalmode", internalmode);
   add_intrinsic ("print_stack_level", print_stack_level);
   add_intrinsic ("strip_trailing_newlines", strip_trailing_newlines);
+  add_intrinsic ("collapse_whitespace", collapse_whitespace);
+
+  internal_mode = xmalloc (sizeof (intptr_t));
+  *internal_mode = 0;
+  add_intrinsic_variable ("internalmode", internal_mode);
 
   /* Put a nl at the start.  */
   catchar (&buffer, '\n');
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/coffcode.texi ./bfd/doc/coffcode.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/coffcode.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/coffcode.texi	2024-02-01 01:50:55.000000000 +0000
@@ -102,9 +102,10 @@ structure.  The flag controls the genera
 in output BFDs at runtime; if it is false, as it will be by default
 when generating an executable image, long section names are truncated;
 if true, the long section names extension is employed.  The hook
-points to a function that allows the value of the flag to be altered
-at runtime, on formats that support long section names at all; on
-other formats it points to a stub that returns an error indication.
+points to a function that allows the value of a copy of the flag
+in coff object tdata to be altered at runtime, on formats that
+support long section names at all; on other formats it points
+to a stub that returns an error indication.
 
 With input BFDs, the flag is set according to whether any long section
 names are detected while reading the section headers.  For a completely
@@ -248,37 +249,38 @@ bit twiddlers, and writes out the table
 
 @findex coff_symbol_type
 @subsubsection @code{coff_symbol_type}
-@strong{Description}@*
 The hidden information for an @code{asymbol} is described in a
 @code{combined_entry_type}:
 
 
 @example
-
 typedef struct coff_ptr_struct
 @{
   /* Remembers the offset from the first symbol in the file for
-     this symbol. Generated by coff_renumber_symbols.  */
+     this symbol.  Generated by coff_renumber_symbols.  */
   unsigned int offset;
 
-  /* Should the value of this symbol be renumbered.  Used for
-     XCOFF C_BSTAT symbols.  Set by coff_slurp_symbol_table.  */
-  unsigned int fix_value : 1;
+  /* Selects between the elements of the union below.  */
+  unsigned int is_sym : 1;
 
-  /* Should the tag field of this symbol be renumbered.
-     Created by coff_pointerize_aux.  */
+  /* Selects between the elements of the x_sym.x_tagndx union.  If set,
+     p is valid and the field will be renumbered.  */
   unsigned int fix_tag : 1;
 
-  /* Should the endidx field of this symbol be renumbered.
-     Created by coff_pointerize_aux.  */
+  /* Selects between the elements of the x_sym.x_fcnary.x_fcn.x_endndx
+     union.  If set, p is valid and the field will be renumbered.  */
   unsigned int fix_end : 1;
 
-  /* Should the x_csect.x_scnlen field be renumbered.
-     Created by coff_pointerize_aux.  */
+  /* Selects between the elements of the x_csect.x_scnlen union.  If set,
+     p is valid and the field will be renumbered.  */
   unsigned int fix_scnlen : 1;
 
-  /* Fix up an XCOFF C_BINCL/C_EINCL symbol.  The value is the
-     index into the line number entries.  Set by coff_slurp_symbol_table.  */
+  /* If set, u.syment.n_value contains a pointer to a symbol.  The final
+     value will be the offset field.  Used for XCOFF C_BSTAT symbols.  */
+  unsigned int fix_value : 1;
+
+  /* If set, u.syment.n_value is an index into the line number entries.
+     Used for XCOFF C_BINCL/C_EINCL symbols.  */
   unsigned int fix_line : 1;
 
   /* The container for the symbol structure as read and translated
@@ -289,11 +291,11 @@ typedef struct coff_ptr_struct
     struct internal_syment syment;
   @} u;
 
- /* Selector for the union above.  */
- bfd_boolean is_sym;
+ /* An extra pointer which can used by format based on COFF (like XCOFF)
+    to provide extra information to their backend.  */
+ void *extrap;
 @} combined_entry_type;
 
-
 /* Each canonical asymbol really looks like this: */
 
 typedef struct coff_symbol_struct
@@ -308,36 +310,14 @@ typedef struct coff_symbol_struct
   struct lineno_cache_entry *lineno;
 
   /* Have the line numbers been relocated yet ? */
-  bfd_boolean done_lineno;
+  bool done_lineno;
 @} coff_symbol_type;
+
 @end example
 @findex bfd_coff_backend_data
 @subsubsection @code{bfd_coff_backend_data}
 
 @example
-/* COFF symbol classifications.  */
-
-enum coff_symbol_classification
-@{
-  /* Global symbol.  */
-  COFF_SYMBOL_GLOBAL,
-  /* Common symbol.  */
-  COFF_SYMBOL_COMMON,
-  /* Undefined symbol.  */
-  COFF_SYMBOL_UNDEFINED,
-  /* Local symbol.  */
-  COFF_SYMBOL_LOCAL,
-  /* PE section symbol.  */
-  COFF_SYMBOL_PE_SECTION
-@};
-
-typedef asection * (*coff_gc_mark_hook_fn)
-  (asection *, struct bfd_link_info *, struct internal_reloc *,
-   struct coff_link_hash_entry *, struct internal_syment *);
-
-@end example
-Special entry points for gdb to swap in coff symbol table parts:
-@example
 typedef struct
 @{
   void (*_bfd_coff_swap_aux_in)
@@ -378,14 +358,14 @@ typedef struct
   unsigned int _bfd_relsz;
   unsigned int _bfd_linesz;
   unsigned int _bfd_filnmlen;
-  bfd_boolean _bfd_coff_long_filenames;
+  bool _bfd_coff_long_filenames;
 
-  bfd_boolean _bfd_coff_long_section_names;
-  bfd_boolean (*_bfd_coff_set_long_section_names)
+  bool _bfd_coff_long_section_names;
+  bool (*_bfd_coff_set_long_section_names)
     (bfd *, int);
 
   unsigned int _bfd_coff_default_section_alignment_power;
-  bfd_boolean _bfd_coff_force_symnames_in_strings;
+  bool _bfd_coff_force_symnames_in_strings;
   unsigned int _bfd_coff_debug_string_prefix_length;
   unsigned int _bfd_coff_max_nscns;
 
@@ -401,38 +381,38 @@ typedef struct
   void (*_bfd_coff_swap_reloc_in)
     (bfd *abfd, void *, void *);
 
-  bfd_boolean (*_bfd_coff_bad_format_hook)
+  bool (*_bfd_coff_bad_format_hook)
     (bfd *, void *);
 
-  bfd_boolean (*_bfd_coff_set_arch_mach_hook)
+  bool (*_bfd_coff_set_arch_mach_hook)
     (bfd *, void *);
 
   void * (*_bfd_coff_mkobject_hook)
     (bfd *, void *, void *);
 
-  bfd_boolean (*_bfd_styp_to_sec_flags_hook)
+  bool (*_bfd_styp_to_sec_flags_hook)
     (bfd *, void *, const char *, asection *, flagword *);
 
   void (*_bfd_set_alignment_hook)
     (bfd *, asection *, void *);
 
-  bfd_boolean (*_bfd_coff_slurp_symbol_table)
+  bool (*_bfd_coff_slurp_symbol_table)
     (bfd *);
 
-  bfd_boolean (*_bfd_coff_symname_in_debug)
+  bool (*_bfd_coff_symname_in_debug)
     (bfd *, struct internal_syment *);
 
-  bfd_boolean (*_bfd_coff_pointerize_aux_hook)
+  bool (*_bfd_coff_pointerize_aux_hook)
     (bfd *, combined_entry_type *, combined_entry_type *,
      unsigned int, combined_entry_type *);
 
-  bfd_boolean (*_bfd_coff_print_aux)
+  bool (*_bfd_coff_print_aux)
     (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
      combined_entry_type *, unsigned int);
 
-  void (*_bfd_coff_reloc16_extra_cases)
+  bool (*_bfd_coff_reloc16_extra_cases)
     (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
-     bfd_byte *, unsigned int *, unsigned int *);
+     bfd_byte *, size_t *, size_t *);
 
   int (*_bfd_coff_reloc16_estimate)
     (bfd *, asection *, arelent *, unsigned int,
@@ -441,13 +421,13 @@ typedef struct
   enum coff_symbol_classification (*_bfd_coff_classify_symbol)
     (bfd *, struct internal_syment *);
 
-  bfd_boolean (*_bfd_coff_compute_section_file_positions)
+  bool (*_bfd_coff_compute_section_file_positions)
     (bfd *);
 
-  bfd_boolean (*_bfd_coff_start_final_link)
+  bool (*_bfd_coff_start_final_link)
     (bfd *, struct bfd_link_info *);
 
-  bfd_boolean (*_bfd_coff_relocate_section)
+  bool (*_bfd_coff_relocate_section)
     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
      struct internal_reloc *, struct internal_syment *, asection **);
 
@@ -455,170 +435,26 @@ typedef struct
     (bfd *, asection *, struct internal_reloc *,
      struct coff_link_hash_entry *, struct internal_syment *, bfd_vma *);
 
-  bfd_boolean (*_bfd_coff_adjust_symndx)
+  bool (*_bfd_coff_adjust_symndx)
     (bfd *, struct bfd_link_info *, bfd *, asection *,
-     struct internal_reloc *, bfd_boolean *);
+     struct internal_reloc *, bool *);
 
-  bfd_boolean (*_bfd_coff_link_add_one_symbol)
+  bool (*_bfd_coff_link_add_one_symbol)
     (struct bfd_link_info *, bfd *, const char *, flagword,
-     asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
+     asection *, bfd_vma, const char *, bool, bool,
      struct bfd_link_hash_entry **);
 
-  bfd_boolean (*_bfd_coff_link_output_has_begun)
+  bool (*_bfd_coff_link_output_has_begun)
     (bfd *, struct coff_final_link_info *);
 
-  bfd_boolean (*_bfd_coff_final_link_postscript)
+  bool (*_bfd_coff_final_link_postscript)
     (bfd *, struct coff_final_link_info *);
 
-  bfd_boolean (*_bfd_coff_print_pdata)
+  bool (*_bfd_coff_print_pdata)
     (bfd *, void *);
 
 @} bfd_coff_backend_data;
 
-#define coff_backend_info(abfd) \
-  ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
-
-#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
-  ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
-
-#define bfd_coff_swap_sym_in(a,e,i) \
-  ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
-
-#define bfd_coff_swap_lineno_in(a,e,i) \
-  ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))
-
-#define bfd_coff_swap_reloc_out(abfd, i, o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))
-
-#define bfd_coff_swap_lineno_out(abfd, i, o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
-
-#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
-  ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
-
-#define bfd_coff_swap_sym_out(abfd, i,o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
-
-#define bfd_coff_swap_scnhdr_out(abfd, i,o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))
-
-#define bfd_coff_swap_filehdr_out(abfd, i,o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))
-
-#define bfd_coff_swap_aouthdr_out(abfd, i,o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))
-
-#define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)
-#define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)
-#define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)
-#define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)
-#define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
-#define bfd_coff_relsz(abfd)  (coff_backend_info (abfd)->_bfd_relsz)
-#define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
-#define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
-#define bfd_coff_long_filenames(abfd) \
-  (coff_backend_info (abfd)->_bfd_coff_long_filenames)
-#define bfd_coff_long_section_names(abfd) \
-  (coff_backend_info (abfd)->_bfd_coff_long_section_names)
-#define bfd_coff_set_long_section_names(abfd, enable) \
-  ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
-#define bfd_coff_default_section_alignment_power(abfd) \
-  (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)
-#define bfd_coff_max_nscns(abfd) \
-  (coff_backend_info (abfd)->_bfd_coff_max_nscns)
-
-#define bfd_coff_swap_filehdr_in(abfd, i,o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))
-
-#define bfd_coff_swap_aouthdr_in(abfd, i,o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))
-
-#define bfd_coff_swap_scnhdr_in(abfd, i,o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))
-
-#define bfd_coff_swap_reloc_in(abfd, i, o) \
-  ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))
-
-#define bfd_coff_bad_format_hook(abfd, filehdr) \
-  ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))
-
-#define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
-  ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
-#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
-  ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\
-   (abfd, filehdr, aouthdr))
-
-#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\
-  ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
-   (abfd, scnhdr, name, section, flags_ptr))
-
-#define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
-  ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))
-
-#define bfd_coff_slurp_symbol_table(abfd)\
-  ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))
-
-#define bfd_coff_symname_in_debug(abfd, sym)\
-  ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
-
-#define bfd_coff_force_symnames_in_strings(abfd)\
-  (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)
-
-#define bfd_coff_debug_string_prefix_length(abfd)\
-  (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)
-
-#define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
-  ((coff_backend_info (abfd)->_bfd_coff_print_aux)\
-   (abfd, file, base, symbol, aux, indaux))
-
-#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
-                                     reloc, data, src_ptr, dst_ptr)\
-  ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
-   (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
-
-#define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
-  ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
-   (abfd, section, reloc, shrink, link_info))
-
-#define bfd_coff_classify_symbol(abfd, sym)\
-  ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\
-   (abfd, sym))
-
-#define bfd_coff_compute_section_file_positions(abfd)\
-  ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\
-   (abfd))
-
-#define bfd_coff_start_final_link(obfd, info)\
-  ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\
-   (obfd, info))
-#define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
-  ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
-   (obfd, info, ibfd, o, con, rel, isyms, secs))
-#define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
-  ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
-   (abfd, sec, rel, h, sym, addendp))
-#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
-  ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
-   (obfd, info, ibfd, sec, rel, adjustedp))
-#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
-                                     value, string, cp, coll, hashp)\
-  ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
-   (info, abfd, name, flags, section, value, string, cp, coll, hashp))
-
-#define bfd_coff_link_output_has_begun(a,p) \
-  ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
-#define bfd_coff_final_link_postscript(a,p) \
-  ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p))
-
-#define bfd_coff_have_print_pdata(a) \
-  (coff_backend_info (a)->_bfd_coff_print_pdata)
-#define bfd_coff_print_pdata(a,p) \
-  ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p))
-
-/* Macro: Returns true if the bfd is a PE executable as opposed to a
-   PE object file.  */
-#define bfd_pei_p(abfd) \
-  (CONST_STRNEQ ((abfd)->xvec->name, "pei-"))
 @end example
 @subsubsection Writing relocations
 To write relocations, the back end steps though the
@@ -677,5 +513,14 @@ The reloc index is turned into a pointer
 structure, in a back end specific way. For instance, the 386
 uses the @code{r_type} to directly produce an index
 into a howto table vector.
+
+@item
+Note that @code{arelent.addend} for COFF is often not what
+most people understand as a relocation addend, but rather an
+adjustment to the relocation addend stored in section contents
+of relocatable object files.  The value found in section
+contents may also be confusing, depending on both symbol value
+and addend somewhat similar to the field value for a
+final-linked object.  See @code{CALC_ADDEND}.
 @end itemize
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/corefile.texi ./bfd/doc/corefile.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/corefile.texi	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/doc/corefile.texi	2024-02-01 01:50:55.000000000 +0000
@@ -0,0 +1,52 @@
+@section Core files
+
+
+@subsection Core file functions
+
+
+These are functions pertaining to core files.
+
+@findex bfd_core_file_failing_command
+@subsubsection @code{bfd_core_file_failing_command}
+@deftypefn {Function} const char *bfd_core_file_failing_command (bfd *abfd); 
+Return a read-only string explaining which program was running
+when it failed and produced the core file @var{abfd}.
+
+@end deftypefn
+@findex bfd_core_file_failing_signal
+@subsubsection @code{bfd_core_file_failing_signal}
+@deftypefn {Function} int bfd_core_file_failing_signal (bfd *abfd); 
+Returns the signal number which caused the core dump which
+generated the file the BFD @var{abfd} is attached to.
+
+@end deftypefn
+@findex bfd_core_file_pid
+@subsubsection @code{bfd_core_file_pid}
+@deftypefn {Function} int bfd_core_file_pid (bfd *abfd); 
+Returns the PID of the process the core dump the BFD
+@var{abfd} is attached to was generated from.
+
+@end deftypefn
+@findex core_file_matches_executable_p
+@subsubsection @code{core_file_matches_executable_p}
+@deftypefn {Function} bool core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd); 
+Return @code{TRUE} if the core file attached to @var{core_bfd}
+was generated by a run of the executable file attached to
+@var{exec_bfd}, @code{FALSE} otherwise.
+
+@end deftypefn
+@findex generic_core_file_matches_executable_p
+@subsubsection @code{generic_core_file_matches_executable_p}
+@deftypefn {Function} bool generic_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd); 
+Return TRUE if the core file attached to @var{core_bfd}
+was generated by a run of the executable file attached
+to @var{exec_bfd}.  The match is based on executable
+basenames only.
+
+Note: When not able to determine the core file failing
+command or the executable name, we still return TRUE even
+though we're not sure that core file and executable match.
+This is to avoid generating a false warning in situations
+where we really don't know whether they match or not.
+
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/core.texi ./bfd/doc/core.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/core.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/core.texi	1970-01-01 00:00:00.000000000 +0000
@@ -1,70 +0,0 @@
-@section Core files
-
-
-@subsection Core file functions
-
-
-@strong{Description}@*
-These are functions pertaining to core files.
-
-@findex bfd_core_file_failing_command
-@subsubsection @code{bfd_core_file_failing_command}
-@strong{Synopsis}
-@example
-const char *bfd_core_file_failing_command (bfd *abfd);
-@end example
-@strong{Description}@*
-Return a read-only string explaining which program was running
-when it failed and produced the core file @var{abfd}.
-
-@findex bfd_core_file_failing_signal
-@subsubsection @code{bfd_core_file_failing_signal}
-@strong{Synopsis}
-@example
-int bfd_core_file_failing_signal (bfd *abfd);
-@end example
-@strong{Description}@*
-Returns the signal number which caused the core dump which
-generated the file the BFD @var{abfd} is attached to.
-
-@findex bfd_core_file_pid
-@subsubsection @code{bfd_core_file_pid}
-@strong{Synopsis}
-@example
-int bfd_core_file_pid (bfd *abfd);
-@end example
-@strong{Description}@*
-Returns the PID of the process the core dump the BFD
-@var{abfd} is attached to was generated from.
-
-@findex core_file_matches_executable_p
-@subsubsection @code{core_file_matches_executable_p}
-@strong{Synopsis}
-@example
-bfd_boolean core_file_matches_executable_p
-   (bfd *core_bfd, bfd *exec_bfd);
-@end example
-@strong{Description}@*
-Return @code{TRUE} if the core file attached to @var{core_bfd}
-was generated by a run of the executable file attached to
-@var{exec_bfd}, @code{FALSE} otherwise.
-
-@findex generic_core_file_matches_executable_p
-@subsubsection @code{generic_core_file_matches_executable_p}
-@strong{Synopsis}
-@example
-bfd_boolean generic_core_file_matches_executable_p
-   (bfd *core_bfd, bfd *exec_bfd);
-@end example
-@strong{Description}@*
-Return TRUE if the core file attached to @var{core_bfd}
-was generated by a run of the executable file attached
-to @var{exec_bfd}.  The match is based on executable
-basenames only.
-
-Note: When not able to determine the core file failing
-command or the executable name, we still return TRUE even
-though we're not sure that core file and executable match.
-This is to avoid generating a false warning in situations
-where we really don't know whether they match or not.
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/doc.str ./bfd/doc/doc.str
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/doc.str	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/doc/doc.str	2024-02-01 01:47:13.000000000 +0000
@@ -1,3 +1,27 @@
+- Documentation extraction program for chew.
+-  Copyright (C) 1990-2024 Free Software Foundation, Inc.
+-  This file is part of BFD, the Binary File Descriptor library.
+
+-  This program is free software; you can redistribute it and/or modify
+-  it under the terms of the GNU General Public License as published by
+-  the Free Software Foundation; either version 3 of the License, or
+-  (at your option) any later version.
+
+-  This program is distributed in the hope that it will be useful,
+-  but WITHOUT ANY WARRANTY; without even the implied warranty of
+-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-  GNU General Public License for more details.
+
+-  You should have received a copy of the GNU General Public License
+-  along with this program; if not, write to the Free Software
+-  Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+- chew.c keywords defined here put output into doc/*.texi files
+- from comments in the source.  See also proto.str.
+
+-  True if SYNOPSIS was seen.
+variable synopsis_seen
+
 : DOCDD
 	skip_past_newline
 	get_stuff_in_command kill_bogus_lines catstr
@@ -11,7 +35,6 @@
 	skip_past_newline	
 	get_stuff_in_command kill_bogus_lines do_fancy_stuff translatecomments 
 	courierize catstr
-
 	;
 
 : INODE 
@@ -30,14 +53,14 @@
 
 : SYNOPSIS
 	skip_past_newline
-	"@strong{Synopsis}\n" catstr
-	"@example\n" catstr
+	1 synopsis_seen !
+	"@deftypefn {Function} " catstr
 	get_stuff_in_command  
 	kill_bogus_lines
+	collapse_whitespace
 	indent
 	catstr
-	"@end example\n" catstr
-
+	"\n" catstr
 	;
 
 : func
@@ -52,18 +75,6 @@
 	catstr 	catstr 	catstr 	catstr 	catstr 
 	;
 
-: FUNCTION
-	"@findex "	- a
-	skip_past_newline
-	copy_past_newline
-	dup		- a x x 
-	"@subsubsection @code{" - a x x b 
-	swap
-	remchar
-	"}\n" - a x b x c
-	catstr 	catstr 	catstr 	catstr 	catstr 
-	;
-
 : bodytext
 	get_stuff_in_command 
 	bulletize
@@ -96,28 +107,29 @@
 	bodytext
 	;
 
-
-
-	
 : DESCRIPTION 
-	"@strong{Description}@*\n" catstr subhead ;
+	subhead
+	"@end deftypefn\n" synopsis_seen @ catstrif
+	0 synopsis_seen !
+	;
 
-: RETURNS
-	"@strong{Returns}@*\n" catstr subhead ;
+: FUNCTION
+	func ;
 
 : INTERNAL_FUNCTION
 	func ;
 
+: DEFINITION
+	func ;
 
-: INTERNAL_DEFINITION 
+: INTERNAL_DEFINITION
 	func ;
 
+: EXTERNAL
+	COMMENT ;
 
 : INTERNAL
-	func ;
-
-: TYPEDEF
-	FUNCTION ;
+	COMMENT ;
 
 : SENUM
 	skip_past_newline
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/format.texi ./bfd/doc/format.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/format.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/format.texi	2024-02-01 01:50:55.000000000 +0000
@@ -28,11 +28,7 @@ The BFD contains the result of an execut
 
 @findex bfd_check_format
 @subsubsection @code{bfd_check_format}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_check_format (bfd *abfd, bfd_format format); 
 Verify if the file attached to the BFD @var{abfd} is compatible
 with the format @var{format} (i.e., one of @code{bfd_object},
 @code{bfd_archive} or @code{bfd_core}).
@@ -69,14 +65,10 @@ none of the backends recognised the file
 more than one backend recognised the file format.
 @end itemize
 
+@end deftypefn
 @findex bfd_check_format_matches
 @subsubsection @code{bfd_check_format_matches}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_check_format_matches
-   (bfd *abfd, bfd_format format, char ***matching);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching); 
 Like @code{bfd_check_format}, except when it returns FALSE with
 @code{bfd_errno} set to @code{bfd_error_file_ambiguously_recognized}.  In that
 case, if @var{matching} is not NULL, it will be filled in with
@@ -87,26 +79,21 @@ Then the user may choose a format and tr
 When done with the list that @var{matching} points to, the caller
 should free it.
 
+@end deftypefn
 @findex bfd_set_format
 @subsubsection @code{bfd_set_format}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_format (bfd *abfd, bfd_format format); 
 This function sets the file format of the BFD @var{abfd} to the
 format @var{format}. If the target set in the BFD does not
 support the format requested, the format is invalid, or the BFD
 is not open for writing, then an error occurs.
 
+@end deftypefn
 @findex bfd_format_string
 @subsubsection @code{bfd_format_string}
-@strong{Synopsis}
-@example
-const char *bfd_format_string (bfd_format format);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const char *bfd_format_string (bfd_format format); 
 Return a pointer to a const string
 @code{invalid}, @code{object}, @code{archive}, @code{core}, or @code{unknown},
 depending upon the value of @var{format}.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/hash.texi ./bfd/doc/hash.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/hash.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/hash.texi	2024-02-01 01:50:55.000000000 +0000
@@ -206,7 +206,6 @@ struct bfd_hash_entry *
   return (struct bfd_hash_entry *) ret;
 @}
 @end example
-@strong{Description}@*
 The creation routine for the linker hash table, which is in
 @code{linker.c}, looks just like this example.
 @var{function_name} is @code{_bfd_link_hash_newfunc}.
@@ -245,3 +244,111 @@ linker hash table, uses macros for the l
 routines.  These are @code{aout_link_hash_lookup} and
 @code{aout_link_hash_traverse} in aoutx.h.
 
+@findex bfd_hash_table_init_n
+@subsubsection @code{bfd_hash_table_init_n}
+@deftypefn {Function} bool bfd_hash_table_init_n (struct bfd_hash_table *, struct bfd_hash_entry *(* {*newfunc*}) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *), unsigned int {*entsize*}, unsigned int {*size*}); 
+Create a new hash table, given a number of entries.
+
+@end deftypefn
+@findex bfd_hash_table_init
+@subsubsection @code{bfd_hash_table_init}
+@deftypefn {Function} bool bfd_hash_table_init (struct bfd_hash_table *, struct bfd_hash_entry *(* {*newfunc*}) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *), unsigned int {*entsize*}); 
+Create a new hash table with the default number of entries.
+
+@end deftypefn
+@findex bfd_hash_table_free
+@subsubsection @code{bfd_hash_table_free}
+@deftypefn {Function} void bfd_hash_table_free (struct bfd_hash_table *); 
+Free a hash table.
+
+@end deftypefn
+@findex bfd_hash_lookup
+@subsubsection @code{bfd_hash_lookup}
+@deftypefn {Function} struct bfd_hash_entry *bfd_hash_lookup (struct bfd_hash_table *, const char *, bool {*create*}, bool {*copy*}); 
+Look up a string in a hash table.
+
+@end deftypefn
+@findex bfd_hash_insert
+@subsubsection @code{bfd_hash_insert}
+@deftypefn {Function} struct bfd_hash_entry *bfd_hash_insert (struct bfd_hash_table *, const char *, unsigned long {*hash*}); 
+Insert an entry in a hash table.
+
+@end deftypefn
+@findex bfd_hash_rename
+@subsubsection @code{bfd_hash_rename}
+@deftypefn {Function} void bfd_hash_rename (struct bfd_hash_table *, const char *, struct bfd_hash_entry *); 
+Rename an entry in a hash table.
+
+@end deftypefn
+@findex bfd_hash_replace
+@subsubsection @code{bfd_hash_replace}
+@deftypefn {Function} void bfd_hash_replace (struct bfd_hash_table *, struct bfd_hash_entry * {*old*}, struct bfd_hash_entry * {*new*}); 
+Replace an entry in a hash table.
+
+@end deftypefn
+@findex bfd_hash_allocate
+@subsubsection @code{bfd_hash_allocate}
+@deftypefn {Function} void *bfd_hash_allocate (struct bfd_hash_table *, unsigned int {*size*}); 
+Allocate space in a hash table.
+
+@end deftypefn
+@findex bfd_hash_newfunc
+@subsubsection @code{bfd_hash_newfunc}
+@deftypefn {Function} struct bfd_hash_entry *bfd_hash_newfunc (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); 
+Base method for creating a new hash table entry.
+
+@end deftypefn
+@findex bfd_hash_traverse
+@subsubsection @code{bfd_hash_traverse}
+@deftypefn {Function} void bfd_hash_traverse (struct bfd_hash_table *, bool (*) (struct bfd_hash_entry *, void *), void *); 
+Traverse a hash table.
+
+@end deftypefn
+@findex bfd_hash_set_default_size
+@subsubsection @code{bfd_hash_set_default_size}
+@deftypefn {Function} unsigned int bfd_hash_set_default_size (unsigned int); 
+Set hash table default size.
+
+@end deftypefn
+@findex _bfd_stringtab_init
+@subsubsection @code{_bfd_stringtab_init}
+@deftypefn {Function} struct bfd_strtab_hash *_bfd_stringtab_init (void); 
+Create a new strtab.
+
+@end deftypefn
+@findex _bfd_xcoff_stringtab_init
+@subsubsection @code{_bfd_xcoff_stringtab_init}
+@deftypefn {Function} struct bfd_strtab_hash *_bfd_xcoff_stringtab_init (bool {*isxcoff64*}); 
+Create a new strtab in which the strings are output in the format
+used in the XCOFF .debug section: a two byte length precedes each
+string.
+
+@end deftypefn
+@findex _bfd_stringtab_free
+@subsubsection @code{_bfd_stringtab_free}
+@deftypefn {Function} void _bfd_stringtab_free (struct bfd_strtab_hash *); 
+Free a strtab.
+
+@end deftypefn
+@findex _bfd_stringtab_add
+@subsubsection @code{_bfd_stringtab_add}
+@deftypefn {Function} bfd_size_type _bfd_stringtab_add (struct bfd_strtab_hash *, const char *, bool {*hash*}, bool {*copy*}); 
+Get the index of a string in a strtab, adding it if it is not
+already present.  If HASH is FALSE, we don't really use the hash
+table, and we don't eliminate duplicate strings.  If COPY is true
+then store a copy of STR if creating a new entry.
+
+@end deftypefn
+@findex _bfd_stringtab_size
+@subsubsection @code{_bfd_stringtab_size}
+@deftypefn {Function} bfd_size_type _bfd_stringtab_size (struct bfd_strtab_hash *); 
+Get the number of bytes in a strtab.
+
+@end deftypefn
+@findex _bfd_stringtab_emit
+@subsubsection @code{_bfd_stringtab_emit}
+@deftypefn {Function} bool _bfd_stringtab_emit (bfd *, struct bfd_strtab_hash *); 
+Write out a strtab.  ABFD must already be at the right location in
+the file.
+
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/init.texi ./bfd/doc/init.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/init.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/init.texi	1970-01-01 00:00:00.000000000 +0000
@@ -1,24 +0,0 @@
-@section Initialization
-
-
-@subsection Initialization functions
-These are the functions that handle initializing a BFD.
-
-@findex bfd_init
-@subsubsection @code{bfd_init}
-@strong{Synopsis}
-@example
-unsigned int bfd_init (void);
-@end example
-@strong{Description}@*
-This routine must be called before any other BFD function to
-initialize magical internal data structures.
-Returns a magic number, which may be used to check
-that the bfd library is configured as expected by users.
-@example
-
-/* Value returned by bfd_init.  */
-
-#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
-@end example
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/libbfd.texi ./bfd/doc/libbfd.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/libbfd.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/libbfd.texi	2024-02-01 01:50:55.000000000 +0000
@@ -4,27 +4,102 @@
 @subsection Internal functions
 
 
-@strong{Description}@*
 These routines are used within BFD.
 They are not intended for export, but are documented here for
 completeness.
 
+@findex bfd_malloc
+@subsubsection @code{bfd_malloc}
+@deftypefn {Function} void *bfd_malloc (bfd_size_type {*size*}); 
+Returns a pointer to an allocated block of memory that is at least
+SIZE bytes long.  If SIZE is 0 then it will be treated as if it were
+1.  If SIZE is too big then NULL will be returned.
+Returns NULL upon error and sets bfd_error.
+
+@end deftypefn
+@findex bfd_realloc
+@subsubsection @code{bfd_realloc}
+@deftypefn {Function} void *bfd_realloc (void *{*mem*}, bfd_size_type {*size*}); 
+Returns a pointer to an allocated block of memory that is at least
+SIZE bytes long.  If SIZE is 0 then it will be treated as if it were
+1.  If SIZE is too big then NULL will be returned.
+If MEM is not NULL then it must point to an allocated block of memory.
+If this block is large enough then MEM may be used as the return
+value for this function, but this is not guaranteed.
+
+If MEM is not returned then the first N bytes in the returned block
+will be identical to the first N bytes in region pointed to by MEM,
+where N is the lessor of SIZE and the length of the region of memory
+currently addressed by MEM.
+
+Returns NULL upon error and sets bfd_error.
+
+@end deftypefn
+@findex bfd_realloc_or_free
+@subsubsection @code{bfd_realloc_or_free}
+@deftypefn {Function} void *bfd_realloc_or_free (void *{*mem*}, bfd_size_type {*size*}); 
+Returns a pointer to an allocated block of memory that is at least
+SIZE bytes long.  If SIZE is 0 then no memory will be allocated,
+MEM will be freed, and NULL will be returned.  This will not cause
+bfd_error to be set.
+
+If SIZE is too big then NULL will be returned and bfd_error will be
+set. 
+If MEM is not NULL then it must point to an allocated block of memory.
+If this block is large enough then MEM may be used as the return
+value for this function, but this is not guaranteed.
+
+If MEM is not returned then the first N bytes in the returned block
+will be identical to the first N bytes in region pointed to by MEM,
+where N is the lessor of SIZE and the length of the region of memory
+currently addressed by MEM.
+
+@end deftypefn
+@findex bfd_zmalloc
+@subsubsection @code{bfd_zmalloc}
+@deftypefn {Function} void *bfd_zmalloc (bfd_size_type {*size*}); 
+Returns a pointer to an allocated block of memory that is at least
+SIZE bytes long.  If SIZE is 0 then it will be treated as if it were
+1.  If SIZE is too big then NULL will be returned.
+Returns NULL upon error and sets bfd_error.
+
+If NULL is not returned then the allocated block of memory will
+have been cleared.
+
+@end deftypefn
+@findex bfd_alloc
+@subsubsection @code{bfd_alloc}
+@deftypefn {Function} void *bfd_alloc (bfd *abfd, bfd_size_type wanted); 
+Allocate a block of @var{wanted} bytes of memory attached to
+@code{abfd} and return a pointer to it.
+
+@end deftypefn
+@findex bfd_zalloc
+@subsubsection @code{bfd_zalloc}
+@deftypefn {Function} void *bfd_zalloc (bfd *abfd, bfd_size_type wanted); 
+Allocate a block of @var{wanted} bytes of zeroed memory
+attached to @code{abfd} and return a pointer to it.
+
+@end deftypefn
+@findex bfd_release
+@subsubsection @code{bfd_release}
+@deftypefn {Function} void bfd_release (bfd *, void *); 
+Free a block allocated for a BFD.
+Note: Also frees all more recently allocated blocks!
+
+@end deftypefn
 @findex bfd_write_bigendian_4byte_int
 @subsubsection @code{bfd_write_bigendian_4byte_int}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_write_bigendian_4byte_int (bfd *, unsigned int); 
 Write a 4 byte integer @var{i} to the output BFD @var{abfd}, in big
 endian order regardless of what else is going on.  This is useful in
 archives.
 
+@end deftypefn
 @findex bfd_put_size
 @subsubsection @code{bfd_put_size}
 @findex bfd_get_size
 @subsubsection @code{bfd_get_size}
-@strong{Description}@*
 These macros as used for reading and writing raw data in
 sections; each access (except for bytes) is vectored through
 the target format of the BFD and mangled accordingly. The
@@ -46,13 +121,13 @@ To detect calling these with less than a
 /* Byte swapping macros for user section data.  */
 
 #define bfd_put_8(abfd, val, ptr) \
-  ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
+  ((void) (*((bfd_byte *) (ptr)) = (val) & 0xff))
 #define bfd_put_signed_8 \
   bfd_put_8
 #define bfd_get_8(abfd, ptr) \
-  (*(const unsigned char *) (ptr) & 0xff)
+  ((bfd_vma) *(const bfd_byte *) (ptr) & 0xff)
 #define bfd_get_signed_8(abfd, ptr) \
-  (((*(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
+  ((((bfd_signed_vma) *(const bfd_byte *) (ptr) & 0xff) ^ 0x80) - 0x80)
 
 #define bfd_put_16(abfd, val, ptr) \
   BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
@@ -96,7 +171,7 @@ bfd_vma bfd_getl24 (const void *p);
   BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
 
 #define bfd_get(bits, abfd, ptr)                       \
-  ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \
+  ((bits) == 8 ? bfd_get_8 (abfd, ptr)                 \
    : (bits) == 16 ? bfd_get_16 (abfd, ptr)             \
    : (bits) == 32 ? bfd_get_32 (abfd, ptr)             \
    : (bits) == 64 ? bfd_get_64 (abfd, ptr)             \
@@ -113,7 +188,6 @@ bfd_vma bfd_getl24 (const void *p);
 
 @findex bfd_h_put_size
 @subsubsection @code{bfd_h_put_size}
-@strong{Description}@*
 These macros have the same function as their @code{bfd_get_x}
 brethren, except that they are used for removing information
 for the header records of object files. Believe it or not,
@@ -181,13 +255,20 @@ order and their data in little endian or
 
 @end example
 
+@findex Byte swapping routines.
+@subsubsection @code{Byte swapping routines.}
+@deftypefn {Function} uint64_t bfd_getb64 (const void *); uint64_t bfd_getl64 (const void *); int64_t bfd_getb_signed_64 (const void *); int64_t bfd_getl_signed_64 (const void *); bfd_vma bfd_getb32 (const void *); bfd_vma bfd_getl32 (const void *); bfd_signed_vma bfd_getb_signed_32 (const void *); bfd_signed_vma bfd_getl_signed_32 (const void *); bfd_vma bfd_getb16 (const void *); bfd_vma bfd_getl16 (const void *); bfd_signed_vma bfd_getb_signed_16 (const void *); bfd_signed_vma bfd_getl_signed_16 (const void *); void bfd_putb64 (uint64_t, void *); void bfd_putl64 (uint64_t, void *); void bfd_putb32 (bfd_vma, void *); void bfd_putl32 (bfd_vma, void *); void bfd_putb24 (bfd_vma, void *); void bfd_putl24 (bfd_vma, void *); void bfd_putb16 (bfd_vma, void *); void bfd_putl16 (bfd_vma, void *); uint64_t bfd_get_bits (const void *, int, bool); void bfd_put_bits (uint64_t, void *, int, bool); 
+Read and write integers in a particular endian order.  getb
+and putb functions handle big-endian, getl and putl handle
+little-endian.  bfd_get_bits and bfd_put_bits specify
+big-endian by passing TRUE in the last parameter,
+little-endian by passing FALSE.
+
+@end deftypefn
 @findex bfd_log2
 @subsubsection @code{bfd_log2}
-@strong{Synopsis}
-@example
-unsigned int bfd_log2 (bfd_vma x);
-@end example
-@strong{Description}@*
+@deftypefn {Function} unsigned int bfd_log2 (bfd_vma x); 
 Return the log base 2 of the value supplied, rounded up.  E.g., an
 @var{x} of 1025 returns 11.  A @var{x} of 0 returns 0.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/linker.texi ./bfd/doc/linker.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/linker.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/linker.texi	2024-02-01 01:50:55.000000000 +0000
@@ -346,11 +346,7 @@ file at the end of @code{NAME(aout,final
 
 @findex bfd_link_split_section
 @subsubsection @code{bfd_link_split_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_link_split_section (bfd *abfd, asection *sec); 
 Return nonzero if @var{sec} should be split during a
 reloceatable or final link.
 @example
@@ -359,15 +355,10 @@ reloceatable or final link.
 
 @end example
 
+@end deftypefn
 @findex bfd_section_already_linked
 @subsubsection @code{bfd_section_already_linked}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_section_already_linked (bfd *abfd,
-    asection *sec,
-    struct bfd_link_info *info);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_section_already_linked (bfd *abfd, asection *sec, struct bfd_link_info *info); 
 Check if @var{data} has been already linked during a reloceatable
 or final link.  Return TRUE if it has.
 @example
@@ -376,15 +367,10 @@ or final link.  Return TRUE if it has.
 
 @end example
 
+@end deftypefn
 @findex bfd_generic_define_common_symbol
 @subsubsection @code{bfd_generic_define_common_symbol}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_define_common_symbol
-   (bfd *output_bfd, struct bfd_link_info *info,
-    struct bfd_link_hash_entry *h);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_generic_define_common_symbol (bfd *output_bfd, struct bfd_link_info *info, struct bfd_link_hash_entry *h); 
 Convert common symbol @var{h} into a defined symbol.
 Return TRUE on success and FALSE on failure.
 @example
@@ -393,15 +379,10 @@ Return TRUE on success and FALSE on fail
 
 @end example
 
+@end deftypefn
 @findex _bfd_generic_link_hide_symbol
 @subsubsection @code{_bfd_generic_link_hide_symbol}
-@strong{Synopsis}
-@example
-void _bfd_generic_link_hide_symbol
-   (bfd *output_bfd, struct bfd_link_info *info,
-    struct bfd_link_hash_entry *h);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void _bfd_generic_link_hide_symbol (bfd *output_bfd, struct bfd_link_info *info, struct bfd_link_hash_entry *h); 
 Hide symbol @var{h}.
 This is an internal function.  It should not be called from
 outside the BFD library.
@@ -411,15 +392,10 @@ outside the BFD library.
 
 @end example
 
+@end deftypefn
 @findex bfd_generic_define_start_stop
 @subsubsection @code{bfd_generic_define_start_stop}
-@strong{Synopsis}
-@example
-struct bfd_link_hash_entry *bfd_generic_define_start_stop
-   (struct bfd_link_info *info,
-    const char *symbol, asection *sec);
-@end example
-@strong{Description}@*
+@deftypefn {Function} struct bfd_link_hash_entry *bfd_generic_define_start_stop (struct bfd_link_info *info, const char *symbol, asection *sec); 
 Define a __start, __stop, .startof. or .sizeof. symbol.
 Return the symbol or NULL if no such undefined symbol exists.
 @example
@@ -428,65 +404,44 @@ Return the symbol or NULL if no such und
 
 @end example
 
+@end deftypefn
 @findex bfd_find_version_for_sym
 @subsubsection @code{bfd_find_version_for_sym}
-@strong{Synopsis}
-@example
-struct bfd_elf_version_tree * bfd_find_version_for_sym
-   (struct bfd_elf_version_tree *verdefs,
-    const char *sym_name, bfd_boolean *hide);
-@end example
-@strong{Description}@*
+@deftypefn {Function} struct bfd_elf_version_tree * bfd_find_version_for_sym (struct bfd_elf_version_tree *verdefs, const char *sym_name, bool *hide); 
 Search an elf version script tree for symbol versioning
 info and export / don't-export status for a given symbol.
 Return non-NULL on success and NULL on failure; also sets
 the output @samp{hide} boolean parameter.
 
+@end deftypefn
 @findex bfd_hide_sym_by_version
 @subsubsection @code{bfd_hide_sym_by_version}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_hide_sym_by_version
-   (struct bfd_elf_version_tree *verdefs, const char *sym_name);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_hide_sym_by_version (struct bfd_elf_version_tree *verdefs, const char *sym_name); 
 Search an elf version script tree for symbol versioning
 info for a given symbol.  Return TRUE if the symbol is hidden.
 
+@end deftypefn
 @findex bfd_link_check_relocs
 @subsubsection @code{bfd_link_check_relocs}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_link_check_relocs
-   (bfd *abfd, struct bfd_link_info *info);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_link_check_relocs (bfd *abfd, struct bfd_link_info *info); 
 Checks the relocs in ABFD for validity.
 Does not execute the relocs.
 Return TRUE if everything is OK, FALSE otherwise.
 This is the external entry point to this code.
 
+@end deftypefn
 @findex _bfd_generic_link_check_relocs
 @subsubsection @code{_bfd_generic_link_check_relocs}
-@strong{Synopsis}
-@example
-bfd_boolean _bfd_generic_link_check_relocs
-   (bfd *abfd, struct bfd_link_info *info);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool _bfd_generic_link_check_relocs (bfd *abfd, struct bfd_link_info *info); 
 Stub function for targets that do not implement reloc checking.
 Return TRUE.
 This is an internal function.  It should not be called from
 outside the BFD library.
 
+@end deftypefn
 @findex bfd_merge_private_bfd_data
 @subsubsection @code{bfd_merge_private_bfd_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_merge_private_bfd_data
-   (bfd *ibfd, struct bfd_link_info *info);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info); 
 Merge private BFD information from the BFD @var{ibfd} to the
 the output file BFD when linking.  Return @code{TRUE} on success,
 @code{FALSE} on error.  Possible error returns are:
@@ -501,17 +456,15 @@ Not enough memory exists to create priva
 #define bfd_merge_private_bfd_data(ibfd, info) \
        BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \
                  (ibfd, info))
+
 @end example
 
+@end deftypefn
 @findex _bfd_generic_verify_endian_match
 @subsubsection @code{_bfd_generic_verify_endian_match}
-@strong{Synopsis}
-@example
-bfd_boolean _bfd_generic_verify_endian_match
-   (bfd *ibfd, struct bfd_link_info *info);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool _bfd_generic_verify_endian_match (bfd *ibfd, struct bfd_link_info *info); 
 Can be used from / for bfd_merge_private_bfd_data to check that
 endianness matches between input and output file.  Returns
 TRUE for a match, otherwise returns FALSE and emits an error.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/local.mk ./bfd/doc/local.mk
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/local.mk	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/doc/local.mk	2024-02-01 01:47:13.000000000 +0000
@@ -0,0 +1,153 @@
+## Process this file with automake to generate Makefile.in
+##
+##   Copyright (C) 2012-2024 Free Software Foundation, Inc.
+##
+## This file is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; see the file COPYING3.  If not see
+## <http://www.gnu.org/licenses/>.
+##
+
+DOCFILES = \
+	%D%/aoutx.texi \
+	%D%/archive.texi \
+	%D%/archures.texi \
+	%D%/bfdio.texi \
+	%D%/bfdt.texi \
+	%D%/bfdver.texi \
+	%D%/bfdwin.texi \
+	%D%/cache.texi \
+	%D%/coffcode.texi \
+	%D%/corefile.texi \
+	%D%/elfcode.texi \
+	%D%/elf.texi \
+	%D%/format.texi \
+	%D%/hash.texi \
+	%D%/libbfd.texi \
+	%D%/linker.texi \
+	%D%/mmo.texi \
+	%D%/opncls.texi \
+	%D%/reloc.texi \
+	%D%/section.texi \
+	%D%/syms.texi \
+	%D%/targets.texi
+
+# SRCDOC, SRCPROT, SRCIPROT only used to sidestep Sun Make bug in interaction
+# between VPATH and suffix rules.  If you use GNU Make, perhaps other Makes,
+# you don't need these three:
+SRCDOC = \
+	$(srcdir)/aoutx.h $(srcdir)/archive.c \
+	$(srcdir)/archures.c $(srcdir)/bfd.c \
+	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+	$(srcdir)/cache.c $(srcdir)/coffcode.h \
+	$(srcdir)/corefile.c $(srcdir)/elf.c \
+	$(srcdir)/elfcode.h $(srcdir)/format.c \
+	$(srcdir)/libbfd.c $(srcdir)/opncls.c \
+	$(srcdir)/reloc.c $(srcdir)/section.c \
+	$(srcdir)/syms.c $(srcdir)/targets.c \
+	$(srcdir)/hash.c $(srcdir)/linker.c \
+	$(srcdir)/mmo.c
+
+SRCPROT = $(srcdir)/archive.c $(srcdir)/archures.c \
+	$(srcdir)/bfd.c $(srcdir)/coffcode.h $(srcdir)/corefile.c \
+	$(srcdir)/format.c $(srcdir)/libbfd.c \
+	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+	$(srcdir)/opncls.c $(srcdir)/reloc.c \
+	$(srcdir)/section.c $(srcdir)/syms.c \
+	$(srcdir)/targets.c
+
+SRCIPROT = $(srcdir)/cache.c $(srcdir)/libbfd.c \
+	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+	$(srcdir)/reloc.c $(srcdir)/cpu-h8300.c \
+	$(srcdir)/archures.c
+
+TEXIDIR = $(srcdir)/../texinfo/fsf
+
+info_TEXINFOS = %D%/bfd.texi
+%C%_bfd_TEXINFOS = $(DOCFILES) %D%/bfdsumm.texi
+
+AM_MAKEINFOFLAGS = --no-split -I "$(srcdir)/%D%" -I %D%
+TEXI2DVI = texi2dvi -I "$(srcdir)/%D%" -I %D%
+
+MKDOC = %D%/chew$(EXEEXT_FOR_BUILD)
+
+$(MKDOC): %D%/chew.stamp ; @true
+%D%/chew.stamp: $(srcdir)/%D%/chew.c %D%/$(am__dirstamp)
+	$(AM_V_CCLD)$(CC_FOR_BUILD) -o %D%/chw$$$$$(EXEEXT_FOR_BUILD) $(CFLAGS_FOR_BUILD) \
+	  $(CPPFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) \
+	  -I. -I$(srcdir) -I%D% -I$(srcdir)/../include -I$(srcdir)/../intl -I../intl \
+	  $(srcdir)/%D%/chew.c && \
+	$(SHELL) $(srcdir)/../move-if-change \
+	  %D%/chw$$$$$(EXEEXT_FOR_BUILD) $(MKDOC) && \
+	touch $@
+
+# We can't replace these rules with an implicit rule, because
+# makes without VPATH support couldn't find the .h files in `..'.
+
+# We do not depend on chew directly so that we can distribute the info
+# files, and permit people to rebuild them, without requiring the makeinfo
+# program.  If somebody tries to rebuild info, but none of the .texi files
+# have changed, then nothing will be rebuilt.
+
+REGEN_TEXI = \
+	( \
+	set -e; \
+	$(MKDOC) -f $(srcdir)/%D%/doc.str < $< > $@.tmp; \
+	texi=$@; \
+	texi=$${texi%.stamp}.texi; \
+	test -e $$texi || test ! -f $(srcdir)/$$texi || $(LN_S) $(srcdir)/$$texi .; \
+	$(SHELL) $(srcdir)/../move-if-change $@.tmp $$texi; \
+	touch $@; \
+	)
+
+.PRECIOUS: %D%/%.stamp
+%D%/%.texi: %D%/%.stamp ; @true
+%D%/%.stamp: $(srcdir)/%.c $(srcdir)/%D%/doc.str $(MKDOC) %D%/$(am__dirstamp)
+	$(AM_V_GEN)$(REGEN_TEXI)
+%D%/%.stamp: $(srcdir)/%.h $(srcdir)/%D%/doc.str $(MKDOC) %D%/$(am__dirstamp)
+	$(AM_V_GEN)$(REGEN_TEXI)
+
+# Avoid the %.stamp generating a builddir/bfd.texi that overrides the
+# srcdir/ as well as regenerating doc/bfd.info for each make run.
+%D%/bfd.stamp: $(srcdir)/%D%/bfd.texi ; $(AM_V_at)touch $@
+
+# We use bfdt.texi, rather than bfd.texi, to avoid conflicting with
+# bfd.texi on an 8.3 filesystem.
+%D%/bfdt.stamp: $(srcdir)/bfd.c $(srcdir)/%D%/doc.str $(MKDOC) %D%/$(am__dirstamp)
+	$(AM_V_GEN)$(REGEN_TEXI)
+
+%D%/bfdver.texi: $(srcdir)/Makefile.in
+	$(AM_V_GEN)\
+	$(MKDIR_P) $(@D); \
+	echo "@set VERSION $(VERSION)" > $@; \
+	if test -n "$(PKGVERSION)"; then \
+	  echo "@set VERSION_PACKAGE $(PKGVERSION)" >> $@; \
+	fi; \
+	echo "@set UPDATED `date '+%B %Y'`" >> $@; \
+	if test -n "$(REPORT_BUGS_TEXI)"; then \
+	  echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> $@; \
+	fi
+
+noinst_TEXINFOS = %D%/bfdint.texi
+
+MOSTLYCLEANFILES += $(MKDOC) %D%/*.o %D%/*.stamp
+
+DISTCLEANFILES += %D%/bfd.?? %D%/bfd.??? texput.log
+
+MAINTAINERCLEANFILES += $(DOCFILES)
+
+html-local: %D%/bfd/index.html
+%D%/bfd/index.html: %D%/bfd.texi $(bfd_TEXINFOS) %D%/$(am__dirstamp)
+	$(AM_V_at)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \
+	  --split=node -o %D%/bfd $(srcdir)/%D%/bfd.texi
+
+MAINTAINERCLEANFILES += %D%/bfd.info
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/Makefile.am ./bfd/doc/Makefile.am
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/Makefile.am	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/doc/Makefile.am	1970-01-01 00:00:00.000000000 +0000
@@ -1,370 +0,0 @@
-## Process this file with automake to generate Makefile.in
-#
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-#
-
-AUTOMAKE_OPTIONS = info-in-builddir no-texinfo.tex foreign
-
-DOCFILES = aoutx.texi  archive.texi archures.texi \
-	bfdt.texi  cache.texi coffcode.texi \
-	core.texi elf.texi elfcode.texi  format.texi \
-	libbfd.texi bfdwin.texi bfdio.texi \
-	opncls.texi  reloc.texi  section.texi  \
-	syms.texi  targets.texi init.texi hash.texi linker.texi \
-	mmo.texi \
-	bfdver.texi
-
-PROTOS = archive.p archures.p bfd.p \
-	 core.p format.p \
-	bfdio.p bfdwin.p \
-	libbfd.p opncls.p reloc.p \
-	section.p syms.p targets.p  \
-	format.p  core.p init.p
-
-IPROTOS = cache.ip libbfd.ip reloc.ip init.ip archures.ip coffcode.ip
-
-# SRCDOC, SRCPROT, SRCIPROT only used to sidestep Sun Make bug in interaction 
-# between VPATH and suffix rules.  If you use GNU Make, perhaps other Makes,
-# you don't need these three:
-SRCDOC = $(srcdir)/../aoutx.h  $(srcdir)/../archive.c \
-	$(srcdir)/../archures.c $(srcdir)/../bfd.c \
-	$(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
-	$(srcdir)/../cache.c $(srcdir)/../coffcode.h \
-	$(srcdir)/../corefile.c $(srcdir)/../elf.c \
-	$(srcdir)/../elfcode.h  $(srcdir)/../format.c \
-	$(srcdir)/../libbfd.c $(srcdir)/../opncls.c \
-	$(srcdir)/../reloc.c  $(srcdir)/../section.c \
-	$(srcdir)/../syms.c  $(srcdir)/../targets.c \
-	$(srcdir)/../hash.c $(srcdir)/../linker.c \
-	$(srcdir)/../mmo.c
-
-SRCPROT = $(srcdir)/../archive.c $(srcdir)/../archures.c \
-	$(srcdir)/../bfd.c $(srcdir)/../coffcode.h $(srcdir)/../corefile.c \
-	$(srcdir)/../format.c $(srcdir)/../libbfd.c \
-	$(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
-	$(srcdir)/../opncls.c $(srcdir)/../reloc.c \
-	$(srcdir)/../section.c $(srcdir)/../syms.c \
-	$(srcdir)/../targets.c $(srcdir)/../init.c
-
-SRCIPROT = $(srcdir)/../cache.c $(srcdir)/../libbfd.c \
-	$(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
-	$(srcdir)/../reloc.c $(srcdir)/../cpu-h8300.c \
-	$(srcdir)/../cpu-i960.c $(srcdir)/../archures.c \
-	$(srcdir)/../init.c
-
-TEXIDIR = $(srcdir)/../../texinfo/fsf
-
-info_TEXINFOS = bfd.texi
-bfd_TEXINFOS = $(DOCFILES) bfdsumm.texi
-
-MKDOC = chew$(EXEEXT_FOR_BUILD)
-
-AM_CPPFLAGS = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \
-	-I$(srcdir)/../../intl -I../../intl
-
-$(MKDOC): chew.stamp ; @true
-chew.stamp: $(srcdir)/chew.c
-	$(CC_FOR_BUILD) -o chw$$$$$(EXEEXT_FOR_BUILD) $(CFLAGS_FOR_BUILD) \
-	  $(LDFLAGS_FOR_BUILD) $(H_CFLAGS) $(AM_CPPFLAGS) $(srcdir)/chew.c; \
-	$(SHELL) $(srcdir)/../../move-if-change \
-	  chw$$$$$(EXEEXT_FOR_BUILD) $(MKDOC); \
-	touch $@
-
-protos: libbfd.h libcoff.h bfd.h
-
-# We can't replace these rules with an implicit rule, because
-# makes without VPATH support couldn't find the .h files in `..'.
-
-# We do not depend on chew directly so that we can distribute the info
-# files, and permit people to rebuild them, without requiring the makeinfo
-# program.  If somebody tries to rebuild info, but none of the .texi files
-# have changed, then nothing will be rebuilt.
-
-aoutx.texi: aoutx.stamp ; @true
-aoutx.stamp: $(srcdir)/../aoutx.h $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../aoutx.h >aoutx.tmp
-	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || cp -p $(srcdir)/aoutx.texi .
-	$(SHELL) $(srcdir)/../../move-if-change aoutx.tmp aoutx.texi
-	touch $@
-
-archive.texi: archive.stamp ; @true
-archive.stamp: $(srcdir)/../archive.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../archive.c >archive.tmp
-	test -e archive.texi || test ! -f $(srcdir)/archive.texi || cp -p $(srcdir)/archive.texi .
-	$(SHELL) $(srcdir)/../../move-if-change archive.tmp archive.texi
-	touch $@
-
-archures.texi: archures.stamp ; @true
-archures.stamp: $(srcdir)/../archures.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../archures.c >archures.tmp
-	test -e archures.texi || test ! -f $(srcdir)/archures.texi || cp -p $(srcdir)/archures.texi .
-	$(SHELL) $(srcdir)/../../move-if-change archures.tmp archures.texi
-	touch $@
-
-# We use bfdt.texi, rather than bfd.texi, to avoid conflicting with
-# bfd.texi on an 8.3 filesystem.
-bfdt.texi: bfdt.stamp ; @true
-bfdt.stamp: $(srcdir)/../bfd.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../bfd.c >bfd.tmp
-	test -e bfdt.texi || test ! -f $(srcdir)/bfdt.texi || cp -p $(srcdir)/bfdt.texi .
-	$(SHELL) $(srcdir)/../../move-if-change bfd.tmp bfdt.texi
-	touch $@
-
-cache.texi: cache.stamp ; @true
-cache.stamp: $(srcdir)/../cache.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../cache.c >cache.tmp
-	test -e cache.texi || test ! -f $(srcdir)/cache.texi || cp -p $(srcdir)/cache.texi .
-	$(SHELL) $(srcdir)/../../move-if-change cache.tmp cache.texi
-	touch $@
-
-coffcode.texi: coffcode.stamp ; @true
-coffcode.stamp: $(srcdir)/../coffcode.h $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../coffcode.h >coffcode.tmp
-	test -e coffcode.texi || test ! -f $(srcdir)/coffcode.texi || cp -p $(srcdir)/coffcode.texi .
-	$(SHELL) $(srcdir)/../../move-if-change coffcode.tmp coffcode.texi
-	touch $@
-
-core.texi: core.stamp ; @true
-core.stamp: $(srcdir)/../corefile.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../corefile.c >core.tmp
-	test -e core.texi || test ! -f $(srcdir)/core.texi || cp -p $(srcdir)/core.texi .
-	$(SHELL) $(srcdir)/../../move-if-change core.tmp core.texi
-	touch $@
-
-elf.texi: elf.stamp ; @true
-elf.stamp: $(srcdir)/../elf.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../elf.c >elf.tmp
-	test -e elf.texi || test ! -f $(srcdir)/elf.texi || cp -p $(srcdir)/elf.texi .
-	$(SHELL) $(srcdir)/../../move-if-change elf.tmp elf.texi
-	touch $@
-
-elfcode.texi: elfcode.stamp ; @true
-elfcode.stamp: $(srcdir)/../elfcode.h $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../elfcode.h >elfcode.tmp
-	test -e elfcode.texi || test ! -f $(srcdir)/elfcode.texi || cp -p $(srcdir)/elfcode.texi .
-	$(SHELL) $(srcdir)/../../move-if-change elfcode.tmp elfcode.texi
-	touch $@
-
-mmo.texi: mmo.stamp ; @true
-mmo.stamp: $(srcdir)/../mmo.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../mmo.c >mmo.tmp
-	test -e mmo.texi || test ! -f $(srcdir)/mmo.texi || cp -p $(srcdir)/mmo.texi .
-	$(SHELL) $(srcdir)/../../move-if-change mmo.tmp mmo.texi
-	touch $@
-
-format.texi: format.stamp ; @true
-format.stamp: $(srcdir)/../format.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../format.c >format.tmp
-	test -e format.texi || test ! -f $(srcdir)/format.texi || cp -p $(srcdir)/format.texi .
-	$(SHELL) $(srcdir)/../../move-if-change format.tmp format.texi
-	touch $@
-
-libbfd.texi: libbfd.stamp ; @true
-libbfd.stamp: $(srcdir)/../libbfd.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../libbfd.c >libbfd.tmp
-	test -e libbfd.texi || test ! -f $(srcdir)/libbfd.texi || cp -p $(srcdir)/libbfd.texi .
-	$(SHELL) $(srcdir)/../../move-if-change libbfd.tmp libbfd.texi
-	touch $@
-
-bfdio.texi: bfdio.stamp ; @true
-bfdio.stamp: $(srcdir)/../bfdio.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../bfdio.c >bfdio.tmp
-	test -e bfdio.texi || test ! -f $(srcdir)/bfdio.texi || cp -p $(srcdir)/bfdio.texi .
-	$(SHELL) $(srcdir)/../../move-if-change bfdio.tmp bfdio.texi
-	touch $@
-
-bfdwin.texi: bfdwin.stamp ; @true
-bfdwin.stamp: $(srcdir)/../bfdwin.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../bfdwin.c >bfdwin.tmp
-	test -e bfdwin.texi || test ! -f $(srcdir)/bfdwin.texi || cp -p $(srcdir)/bfdwin.texi .
-	$(SHELL) $(srcdir)/../../move-if-change bfdwin.tmp bfdwin.texi
-	touch $@
-
-opncls.texi: opncls.stamp ; @true
-opncls.stamp: $(srcdir)/../opncls.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../opncls.c >opncls.tmp
-	test -e opncls.texi || test ! -f $(srcdir)/opncls.texi || cp -p $(srcdir)/opncls.texi .
-	$(SHELL) $(srcdir)/../../move-if-change opncls.tmp opncls.texi
-	touch $@
-
-reloc.texi: reloc.stamp ; @true
-reloc.stamp: $(srcdir)/../reloc.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../reloc.c >reloc.tmp
-	test -e reloc.texi || test ! -f $(srcdir)/reloc.texi || cp -p $(srcdir)/reloc.texi .
-	$(SHELL) $(srcdir)/../../move-if-change reloc.tmp reloc.texi
-	touch $@
-
-section.texi: section.stamp ; @true
-section.stamp: $(srcdir)/../section.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../section.c >section.tmp
-	test -e section.texi || test ! -f $(srcdir)/section.texi || cp -p $(srcdir)/section.texi .
-	$(SHELL) $(srcdir)/../../move-if-change section.tmp section.texi
-	touch $@
-
-syms.texi: syms.stamp ; @true
-syms.stamp: $(srcdir)/../syms.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../syms.c >syms.tmp
-	test -e syms.texi || test ! -f $(srcdir)/syms.texi || cp -p $(srcdir)/syms.texi .
-	$(SHELL) $(srcdir)/../../move-if-change syms.tmp syms.texi
-	touch $@
-
-targets.texi: targets.stamp ; @true
-targets.stamp: $(srcdir)/../targets.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../targets.c >targets.tmp
-	test -e targets.texi || test ! -f $(srcdir)/targets.texi || cp -p $(srcdir)/targets.texi .
-	$(SHELL) $(srcdir)/../../move-if-change targets.tmp targets.texi
-	touch $@
-
-init.texi: init.stamp ; @true
-init.stamp: $(srcdir)/../init.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../init.c >init.tmp
-	test -e init.texi || test ! -f $(srcdir)/init.texi || cp -p $(srcdir)/init.texi .
-	$(SHELL) $(srcdir)/../../move-if-change init.tmp init.texi
-	touch $@
-
-hash.texi: hash.stamp ; @true
-hash.stamp: $(srcdir)/../hash.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../hash.c >hash.tmp
-	test -e hash.texi || test ! -f $(srcdir)/hash.texi || cp -p $(srcdir)/hash.texi .
-	$(SHELL) $(srcdir)/../../move-if-change hash.tmp hash.texi
-	touch $@
-
-linker.texi: linker.stamp ; @true
-linker.stamp: $(srcdir)/../linker.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../linker.c >linker.tmp
-	test -e linker.texi || test ! -f $(srcdir)/linker.texi || cp -p $(srcdir)/linker.texi .
-	$(SHELL) $(srcdir)/../../move-if-change linker.tmp linker.texi
-	touch $@
-
-LIBBFD_H_DEP = \
-	$(srcdir)/../libbfd-in.h	\
-	$(srcdir)/../libbfd.c		\
-	$(srcdir)/../bfdio.c		\
-	$(srcdir)/../bfdwin.c		\
-	$(srcdir)/../cache.c		\
-	$(srcdir)/../reloc.c		\
-	$(srcdir)/../archures.c		\
-	$(srcdir)/../linker.c		\
-	$(srcdir)/header.sed		\
-	$(srcdir)/proto.str		\
-	$(MKDOC)
-
-libbfd.h: $(LIBBFD_H_DEP)
-	echo "$(LIBBFD_H_DEP)" | sed -f $(srcdir)/header.sed > $@
-	for file in $(LIBBFD_H_DEP); do \
-	  case $$file in \
-	    *-in.h) cat $$file >> $@ ;; \
-	    */header.sed) break ;; \
-	    *)	echo $$file | sed -e 's,.*/,,' -e 's,^,/* Extracted from ,' \
-				-e 's,$$,.  */,' >> $@ ; \
-		./$(MKDOC) -i -f $(srcdir)/proto.str < $$file >> $@ ;; \
-	  esac; \
-	done
-	echo "#ifdef __cplusplus" >> $@
-	echo "}" >> $@
-	echo "#endif" >> $@
-	echo "#endif" >> $@
-
-LIBCOFF_H_DEP = \
-	$(srcdir)/../libcoff-in.h	\
-	$(srcdir)/../coffcode.h		\
-	$(srcdir)/header.sed		\
-	$(srcdir)/proto.str		\
-	$(MKDOC)
-
-libcoff.h: $(LIBCOFF_H_DEP)
-	echo "$(LIBCOFF_H_DEP)" | sed -f $(srcdir)/header.sed > $@
-	for file in $(LIBCOFF_H_DEP); do \
-	  case $$file in \
-	    *-in.h) cat $$file >> $@ ;; \
-	    */header.sed) break ;; \
-	    *)	echo $$file | sed -e 's,.*/,,' -e 's,^,/* Extracted from ,' \
-				-e 's,$$,.  */,' >> $@ ; \
-		./$(MKDOC) -i -f $(srcdir)/proto.str < $$file >> $@ ;; \
-	  esac; \
-	done
-	echo "#ifdef __cplusplus" >> $@
-	echo "}" >> $@
-	echo "#endif" >> $@
-	echo "#endif" >> $@
-
-BFD_H_DEP = \
-	$(srcdir)/../bfd-in.h 		\
-	$(srcdir)/../init.c 		\
-	$(srcdir)/../opncls.c 		\
-	$(srcdir)/../libbfd.c 		\
-	$(srcdir)/../bfdio.c		\
-	$(srcdir)/../bfdwin.c		\
-	$(srcdir)/../section.c 		\
-	$(srcdir)/../archures.c		\
-	$(srcdir)/../reloc.c		\
-	$(srcdir)/../syms.c		\
-	$(srcdir)/../bfd.c		\
-	$(srcdir)/../archive.c		\
-	$(srcdir)/../corefile.c		\
-	$(srcdir)/../targets.c		\
-	$(srcdir)/../format.c		\
-	$(srcdir)/../linker.c		\
-	$(srcdir)/../simple.c		\
-	$(srcdir)/../compress.c		\
-	$(srcdir)/header.sed		\
-	$(srcdir)/proto.str		\
-	$(srcdir)/../version.h		\
-	$(MKDOC)
-
-bfd.h: $(BFD_H_DEP)
-	echo "$(BFD_H_DEP)" | sed -f $(srcdir)/header.sed > $@
-	for file in $(BFD_H_DEP); do \
-	  case $$file in \
-	    *-in.h) cat $$file >> $@ ;; \
-	    */header.sed) break ;; \
-	    *)	echo $$file | sed -e 's,.*/,,' -e 's,^,/* Extracted from ,' \
-				-e 's,$$,.  */,' >> $@ ; \
-		./$(MKDOC) -f $(srcdir)/proto.str < $$file >> $@ ;; \
-	  esac; \
-	done
-	echo "#ifdef __cplusplus" >> $@
-	echo "}" >> $@
-	echo "#endif" >> $@
-	echo "#endif" >> $@
-
-bfdver.texi: $(srcdir)/Makefile.in
-	@echo "creating $@"; \
-	echo "@set VERSION $(VERSION)" > bfdver.texi; \
-	if test -n "$(PKGVERSION)"; then \
-	  echo "@set VERSION_PACKAGE $(PKGVERSION)" >> bfdver.texi; \
-	fi; \
-	echo "@set UPDATED `date '+%B %Y'`" >> bfdver.texi; \
-	if test -n "$(REPORT_BUGS_TEXI)"; then \
-	  echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> bfdver.texi; \
-	fi
-
-noinst_TEXINFOS = bfdint.texi
-
-MOSTLYCLEANFILES = $(MKDOC) *.o *.stamp
-
-CLEANFILES = *.p *.ip
-
-DISTCLEANFILES = bfd.?? bfd.??? bfd.h libbfd.h libcoff.h texput.log
-
-MAINTAINERCLEANFILES = $(DOCFILES)
-
-# We want install to imply install-info as per GNU standards, despite the
-# cygnus option.
-install: install-info
-
-MAINTAINERCLEANFILES += bfd.info
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/Makefile.in ./bfd/doc/Makefile.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/Makefile.in	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/doc/Makefile.in	1970-01-01 00:00:00.000000000 +0000
@@ -1,1171 +0,0 @@
-# Makefile.in generated by automake 1.15.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2017 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-#
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-#
-VPATH = @srcdir@
-am__is_gnu_make = { \
-  if test -z '$(MAKELEVEL)'; then \
-    false; \
-  elif test -n '$(MAKE_HOST)'; then \
-    true; \
-  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
-    true; \
-  else \
-    false; \
-  fi; \
-}
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-subdir = doc
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
-	$(top_srcdir)/../config/depstand.m4 \
-	$(top_srcdir)/../config/gettext-sister.m4 \
-	$(top_srcdir)/../config/largefile.m4 \
-	$(top_srcdir)/../config/lead-dot.m4 \
-	$(top_srcdir)/../config/nls.m4 \
-	$(top_srcdir)/../config/override.m4 \
-	$(top_srcdir)/../config/plugins.m4 \
-	$(top_srcdir)/../config/po.m4 \
-	$(top_srcdir)/../config/progtest.m4 \
-	$(top_srcdir)/../config/stdint.m4 \
-	$(top_srcdir)/../config/zlib.m4 $(top_srcdir)/../libtool.m4 \
-	$(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
-	$(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
-	$(top_srcdir)/bfd.m4 $(top_srcdir)/warning.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/version.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
-AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
-am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
-am__v_DVIPS_0 = @echo "  DVIPS   " $@;
-am__v_DVIPS_1 = 
-AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
-am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
-am__v_MAKEINFO_0 = @echo "  MAKEINFO" $@;
-am__v_MAKEINFO_1 = 
-AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
-am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
-am__v_INFOHTML_0 = @echo "  INFOHTML" $@;
-am__v_INFOHTML_1 = 
-AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
-am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
-am__v_TEXI2DVI_0 = @echo "  TEXI2DVI" $@;
-am__v_TEXI2DVI_1 = 
-AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
-am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
-am__v_TEXI2PDF_0 = @echo "  TEXI2PDF" $@;
-am__v_TEXI2PDF_1 = 
-AM_V_texinfo = $(am__v_texinfo_@AM_V@)
-am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
-am__v_texinfo_0 = -q
-am__v_texinfo_1 = 
-AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
-am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
-am__v_texidevnull_0 = > /dev/null
-am__v_texidevnull_1 = 
-INFO_DEPS = bfd.info
-am__TEXINFO_TEX_DIR = $(srcdir)
-DVIS = bfd.dvi
-PDFS = bfd.pdf
-PSS = bfd.ps
-HTMLS = bfd.html
-TEXINFOS = bfd.texi
-TEXI2DVI = texi2dvi
-TEXI2PDF = $(TEXI2DVI) --pdf --batch
-MAKEINFOHTML = $(MAKEINFO) --html
-AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
-DVIPS = dvips
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-am__installdirs = "$(DESTDIR)$(infodir)"
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(bfd_TEXINFOS) $(srcdir)/Makefile.in \
-	$(top_srcdir)/../mkinstalldirs
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BFD_HOSTPTR_T = @BFD_HOSTPTR_T@
-BFD_HOST_64BIT_LONG = @BFD_HOST_64BIT_LONG@
-BFD_HOST_64BIT_LONG_LONG = @BFD_HOST_64BIT_LONG_LONG@
-BFD_HOST_64_BIT = @BFD_HOST_64_BIT@
-BFD_HOST_64_BIT_DEFINED = @BFD_HOST_64_BIT_DEFINED@
-BFD_HOST_U_64_BIT = @BFD_HOST_U_64_BIT@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CC_FOR_BUILD = @CC_FOR_BUILD@
-CFLAGS = @CFLAGS@
-COREFILE = @COREFILE@
-COREFLAG = @COREFLAG@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGDIR = @DEBUGDIR@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
-FGREP = @FGREP@
-GENCAT = @GENCAT@
-GMSGFMT = @GMSGFMT@
-GREP = @GREP@
-HDEFINES = @HDEFINES@
-INCINTL = @INCINTL@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBINTL = @LIBINTL@
-LIBINTL_DEP = @LIBINTL_DEP@
-LIBM = @LIBM@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MSGFMT = @MSGFMT@
-MSGMERGE = @MSGMERGE@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NO_WERROR = @NO_WERROR@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKGVERSION = @PKGVERSION@
-POSUB = @POSUB@
-RANLIB = @RANLIB@
-REPORT_BUGS_TEXI = @REPORT_BUGS_TEXI@
-REPORT_BUGS_TO = @REPORT_BUGS_TO@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_LDFLAGS = @SHARED_LDFLAGS@
-SHARED_LIBADD = @SHARED_LIBADD@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TDEFINES = @TDEFINES@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-WARN_CFLAGS_FOR_BUILD = @WARN_CFLAGS_FOR_BUILD@
-WARN_WRITE_STRINGS = @WARN_WRITE_STRINGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-all_backends = @all_backends@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bfd64_libs = @bfd64_libs@
-bfd_backends = @bfd_backends@
-bfd_default_target_size = @bfd_default_target_size@
-bfd_file_ptr = @bfd_file_ptr@
-bfd_machines = @bfd_machines@
-bfd_ufile_ptr = @bfd_ufile_ptr@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-havevecs = @havevecs@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_noncanonical = @host_noncanonical@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_cv_dlopen_libs = @lt_cv_dlopen_libs@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-supports_plugins = @supports_plugins@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_noncanonical = @target_noncanonical@
-target_os = @target_os@
-target_vendor = @target_vendor@
-tdefaults = @tdefaults@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-wordsize = @wordsize@
-zlibdir = @zlibdir@
-zlibinc = @zlibinc@
-AUTOMAKE_OPTIONS = info-in-builddir no-texinfo.tex foreign
-DOCFILES = aoutx.texi  archive.texi archures.texi \
-	bfdt.texi  cache.texi coffcode.texi \
-	core.texi elf.texi elfcode.texi  format.texi \
-	libbfd.texi bfdwin.texi bfdio.texi \
-	opncls.texi  reloc.texi  section.texi  \
-	syms.texi  targets.texi init.texi hash.texi linker.texi \
-	mmo.texi \
-	bfdver.texi
-
-PROTOS = archive.p archures.p bfd.p \
-	 core.p format.p \
-	bfdio.p bfdwin.p \
-	libbfd.p opncls.p reloc.p \
-	section.p syms.p targets.p  \
-	format.p  core.p init.p
-
-IPROTOS = cache.ip libbfd.ip reloc.ip init.ip archures.ip coffcode.ip
-
-# SRCDOC, SRCPROT, SRCIPROT only used to sidestep Sun Make bug in interaction 
-# between VPATH and suffix rules.  If you use GNU Make, perhaps other Makes,
-# you don't need these three:
-SRCDOC = $(srcdir)/../aoutx.h  $(srcdir)/../archive.c \
-	$(srcdir)/../archures.c $(srcdir)/../bfd.c \
-	$(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
-	$(srcdir)/../cache.c $(srcdir)/../coffcode.h \
-	$(srcdir)/../corefile.c $(srcdir)/../elf.c \
-	$(srcdir)/../elfcode.h  $(srcdir)/../format.c \
-	$(srcdir)/../libbfd.c $(srcdir)/../opncls.c \
-	$(srcdir)/../reloc.c  $(srcdir)/../section.c \
-	$(srcdir)/../syms.c  $(srcdir)/../targets.c \
-	$(srcdir)/../hash.c $(srcdir)/../linker.c \
-	$(srcdir)/../mmo.c
-
-SRCPROT = $(srcdir)/../archive.c $(srcdir)/../archures.c \
-	$(srcdir)/../bfd.c $(srcdir)/../coffcode.h $(srcdir)/../corefile.c \
-	$(srcdir)/../format.c $(srcdir)/../libbfd.c \
-	$(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
-	$(srcdir)/../opncls.c $(srcdir)/../reloc.c \
-	$(srcdir)/../section.c $(srcdir)/../syms.c \
-	$(srcdir)/../targets.c $(srcdir)/../init.c
-
-SRCIPROT = $(srcdir)/../cache.c $(srcdir)/../libbfd.c \
-	$(srcdir)/../bfdio.c $(srcdir)/../bfdwin.c \
-	$(srcdir)/../reloc.c $(srcdir)/../cpu-h8300.c \
-	$(srcdir)/../cpu-i960.c $(srcdir)/../archures.c \
-	$(srcdir)/../init.c
-
-TEXIDIR = $(srcdir)/../../texinfo/fsf
-info_TEXINFOS = bfd.texi
-bfd_TEXINFOS = $(DOCFILES) bfdsumm.texi
-MKDOC = chew$(EXEEXT_FOR_BUILD)
-AM_CPPFLAGS = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \
-	-I$(srcdir)/../../intl -I../../intl
-
-LIBBFD_H_DEP = \
-	$(srcdir)/../libbfd-in.h	\
-	$(srcdir)/../libbfd.c		\
-	$(srcdir)/../bfdio.c		\
-	$(srcdir)/../bfdwin.c		\
-	$(srcdir)/../cache.c		\
-	$(srcdir)/../reloc.c		\
-	$(srcdir)/../archures.c		\
-	$(srcdir)/../linker.c		\
-	$(srcdir)/header.sed		\
-	$(srcdir)/proto.str		\
-	$(MKDOC)
-
-LIBCOFF_H_DEP = \
-	$(srcdir)/../libcoff-in.h	\
-	$(srcdir)/../coffcode.h		\
-	$(srcdir)/header.sed		\
-	$(srcdir)/proto.str		\
-	$(MKDOC)
-
-BFD_H_DEP = \
-	$(srcdir)/../bfd-in.h 		\
-	$(srcdir)/../init.c 		\
-	$(srcdir)/../opncls.c 		\
-	$(srcdir)/../libbfd.c 		\
-	$(srcdir)/../bfdio.c		\
-	$(srcdir)/../bfdwin.c		\
-	$(srcdir)/../section.c 		\
-	$(srcdir)/../archures.c		\
-	$(srcdir)/../reloc.c		\
-	$(srcdir)/../syms.c		\
-	$(srcdir)/../bfd.c		\
-	$(srcdir)/../archive.c		\
-	$(srcdir)/../corefile.c		\
-	$(srcdir)/../targets.c		\
-	$(srcdir)/../format.c		\
-	$(srcdir)/../linker.c		\
-	$(srcdir)/../simple.c		\
-	$(srcdir)/../compress.c		\
-	$(srcdir)/header.sed		\
-	$(srcdir)/proto.str		\
-	$(srcdir)/../version.h		\
-	$(MKDOC)
-
-noinst_TEXINFOS = bfdint.texi
-MOSTLYCLEANFILES = $(MKDOC) *.o *.stamp
-CLEANFILES = *.p *.ip
-DISTCLEANFILES = bfd.?? bfd.??? bfd.h libbfd.h libcoff.h texput.log
-MAINTAINERCLEANFILES = $(DOCFILES) bfd.info
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .dvi .ps
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign doc/Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-bfd.info: bfd.texi $(bfd_TEXINFOS)
-	$(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
-	rm -rf $$backupdir && mkdir $$backupdir && \
-	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
-	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
-	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
-	  done; \
-	else :; fi && \
-	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-	 -o $@ `test -f 'bfd.texi' || echo '$(srcdir)/'`bfd.texi; \
-	then \
-	  rc=0; \
-	else \
-	  rc=$$?; \
-	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
-	fi; \
-	rm -rf $$backupdir; exit $$rc
-
-bfd.dvi: bfd.texi $(bfd_TEXINFOS) 
-	$(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
-	`test -f 'bfd.texi' || echo '$(srcdir)/'`bfd.texi
-
-bfd.pdf: bfd.texi $(bfd_TEXINFOS) 
-	$(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
-	`test -f 'bfd.texi' || echo '$(srcdir)/'`bfd.texi
-
-bfd.html: bfd.texi $(bfd_TEXINFOS) 
-	$(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
-	$(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-	 -o $(@:.html=.htp) `test -f 'bfd.texi' || echo '$(srcdir)/'`bfd.texi; \
-	then \
-	  rm -rf $@ && mv $(@:.html=.htp) $@; \
-	else \
-	  rm -rf $(@:.html=.htp); exit 1; \
-	fi
-.dvi.ps:
-	$(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	$(DVIPS) $(AM_V_texinfo) -o $@ $<
-
-uninstall-dvi-am:
-	@$(NORMAL_UNINSTALL)
-	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(dvidir)/$$f"; \
-	done
-
-uninstall-html-am:
-	@$(NORMAL_UNINSTALL)
-	@list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
-	  rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
-	done
-
-uninstall-info-am:
-	@$(PRE_UNINSTALL)
-	@if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
-	  list='$(INFO_DEPS)'; \
-	  for file in $$list; do \
-	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
-	    if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
-	    then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
-	  done; \
-	else :; fi
-	@$(NORMAL_UNINSTALL)
-	@list='$(INFO_DEPS)'; \
-	for file in $$list; do \
-	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
-	     echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
-	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
-	   else :; fi); \
-	done
-
-uninstall-pdf-am:
-	@$(NORMAL_UNINSTALL)
-	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
-	done
-
-uninstall-ps-am:
-	@$(NORMAL_UNINSTALL)
-	@list='$(PSS)'; test -n "$(psdir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(psdir)/$$f"; \
-	done
-
-dist-info: $(INFO_DEPS)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	list='$(INFO_DEPS)'; \
-	for base in $$list; do \
-	  case $$base in \
-	    $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
-	  esac; \
-	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
-	  base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
-	    if test -f $$file; then \
-	      relfile=`expr "$$file" : "$$d/\(.*\)"`; \
-	      test -f "$(distdir)/$$relfile" || \
-		cp -p $$file "$(distdir)/$$relfile"; \
-	    else :; fi; \
-	  done; \
-	done
-
-mostlyclean-aminfo:
-	-rm -rf bfd.t2d bfd.t2p
-
-clean-aminfo:
-	-test -z "bfd.dvi bfd.pdf bfd.ps bfd.html" \
-	|| rm -rf bfd.dvi bfd.pdf bfd.ps bfd.html
-
-maintainer-clean-aminfo:
-	@list='$(INFO_DEPS)'; for i in $$list; do \
-	  i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
-	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
-	done
-tags TAGS:
-
-ctags CTAGS:
-
-cscope cscopelist:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	$(MAKE) $(AM_MAKEFLAGS) \
-	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
-	  dist-info
-check-am: all-am
-check: check-am
-all-am: Makefile $(INFO_DEPS)
-installdirs:
-	for dir in "$(DESTDIR)$(infodir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am: $(DVIS)
-
-html: html-am
-
-html-am: $(HTMLS)
-
-info: info-am
-
-info-am: $(INFO_DEPS)
-
-install-data-am: install-info-am
-
-install-dvi: install-dvi-am
-
-install-dvi-am: $(DVIS)
-	@$(NORMAL_INSTALL)
-	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
-	done
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am: $(HTMLS)
-	@$(NORMAL_INSTALL)
-	@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  $(am__strip_dir) \
-	  d2=$$d$$p; \
-	  if test -d "$$d2"; then \
-	    echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
-	    $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
-	    echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
-	    $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
-	  else \
-	    list2="$$list2 $$d2"; \
-	  fi; \
-	done; \
-	test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
-	done; }
-install-info: install-info-am
-
-install-info-am: $(INFO_DEPS)
-	@$(NORMAL_INSTALL)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
-	fi; \
-	for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	  esac; \
-	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
-	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
-	               $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
-	    if test -f $$ifile; then \
-	      echo "$$ifile"; \
-	    else : ; fi; \
-	  done; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
-	@$(POST_INSTALL)
-	@if $(am__can_run_installinfo); then \
-	  list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
-	  for file in $$list; do \
-	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
-	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
-	  done; \
-	else : ; fi
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am: $(PDFS)
-	@$(NORMAL_INSTALL)
-	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
-install-ps: install-ps-am
-
-install-ps-am: $(PSS)
-	@$(NORMAL_INSTALL)
-	@list='$(PSS)'; test -n "$(psdir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-aminfo \
-	maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am: $(PDFS)
-
-ps: ps-am
-
-ps-am: $(PSS)
-
-uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
-	uninstall-pdf-am uninstall-ps-am
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
-	clean-libtool cscopelist-am ctags-am dist-info distclean \
-	distclean-generic distclean-libtool distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
-	mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool pdf \
-	pdf-am ps ps-am tags-am uninstall uninstall-am \
-	uninstall-dvi-am uninstall-html-am uninstall-info-am \
-	uninstall-pdf-am uninstall-ps-am
-
-.PRECIOUS: Makefile
-
-
-$(MKDOC): chew.stamp ; @true
-chew.stamp: $(srcdir)/chew.c
-	$(CC_FOR_BUILD) -o chw$$$$$(EXEEXT_FOR_BUILD) $(CFLAGS_FOR_BUILD) \
-	  $(LDFLAGS_FOR_BUILD) $(H_CFLAGS) $(AM_CPPFLAGS) $(srcdir)/chew.c; \
-	$(SHELL) $(srcdir)/../../move-if-change \
-	  chw$$$$$(EXEEXT_FOR_BUILD) $(MKDOC); \
-	touch $@
-
-protos: libbfd.h libcoff.h bfd.h
-
-# We can't replace these rules with an implicit rule, because
-# makes without VPATH support couldn't find the .h files in `..'.
-
-# We do not depend on chew directly so that we can distribute the info
-# files, and permit people to rebuild them, without requiring the makeinfo
-# program.  If somebody tries to rebuild info, but none of the .texi files
-# have changed, then nothing will be rebuilt.
-
-aoutx.texi: aoutx.stamp ; @true
-aoutx.stamp: $(srcdir)/../aoutx.h $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../aoutx.h >aoutx.tmp
-	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || cp -p $(srcdir)/aoutx.texi .
-	$(SHELL) $(srcdir)/../../move-if-change aoutx.tmp aoutx.texi
-	touch $@
-
-archive.texi: archive.stamp ; @true
-archive.stamp: $(srcdir)/../archive.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../archive.c >archive.tmp
-	test -e archive.texi || test ! -f $(srcdir)/archive.texi || cp -p $(srcdir)/archive.texi .
-	$(SHELL) $(srcdir)/../../move-if-change archive.tmp archive.texi
-	touch $@
-
-archures.texi: archures.stamp ; @true
-archures.stamp: $(srcdir)/../archures.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../archures.c >archures.tmp
-	test -e archures.texi || test ! -f $(srcdir)/archures.texi || cp -p $(srcdir)/archures.texi .
-	$(SHELL) $(srcdir)/../../move-if-change archures.tmp archures.texi
-	touch $@
-
-# We use bfdt.texi, rather than bfd.texi, to avoid conflicting with
-# bfd.texi on an 8.3 filesystem.
-bfdt.texi: bfdt.stamp ; @true
-bfdt.stamp: $(srcdir)/../bfd.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../bfd.c >bfd.tmp
-	test -e bfdt.texi || test ! -f $(srcdir)/bfdt.texi || cp -p $(srcdir)/bfdt.texi .
-	$(SHELL) $(srcdir)/../../move-if-change bfd.tmp bfdt.texi
-	touch $@
-
-cache.texi: cache.stamp ; @true
-cache.stamp: $(srcdir)/../cache.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../cache.c >cache.tmp
-	test -e cache.texi || test ! -f $(srcdir)/cache.texi || cp -p $(srcdir)/cache.texi .
-	$(SHELL) $(srcdir)/../../move-if-change cache.tmp cache.texi
-	touch $@
-
-coffcode.texi: coffcode.stamp ; @true
-coffcode.stamp: $(srcdir)/../coffcode.h $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../coffcode.h >coffcode.tmp
-	test -e coffcode.texi || test ! -f $(srcdir)/coffcode.texi || cp -p $(srcdir)/coffcode.texi .
-	$(SHELL) $(srcdir)/../../move-if-change coffcode.tmp coffcode.texi
-	touch $@
-
-core.texi: core.stamp ; @true
-core.stamp: $(srcdir)/../corefile.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../corefile.c >core.tmp
-	test -e core.texi || test ! -f $(srcdir)/core.texi || cp -p $(srcdir)/core.texi .
-	$(SHELL) $(srcdir)/../../move-if-change core.tmp core.texi
-	touch $@
-
-elf.texi: elf.stamp ; @true
-elf.stamp: $(srcdir)/../elf.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../elf.c >elf.tmp
-	test -e elf.texi || test ! -f $(srcdir)/elf.texi || cp -p $(srcdir)/elf.texi .
-	$(SHELL) $(srcdir)/../../move-if-change elf.tmp elf.texi
-	touch $@
-
-elfcode.texi: elfcode.stamp ; @true
-elfcode.stamp: $(srcdir)/../elfcode.h $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../elfcode.h >elfcode.tmp
-	test -e elfcode.texi || test ! -f $(srcdir)/elfcode.texi || cp -p $(srcdir)/elfcode.texi .
-	$(SHELL) $(srcdir)/../../move-if-change elfcode.tmp elfcode.texi
-	touch $@
-
-mmo.texi: mmo.stamp ; @true
-mmo.stamp: $(srcdir)/../mmo.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../mmo.c >mmo.tmp
-	test -e mmo.texi || test ! -f $(srcdir)/mmo.texi || cp -p $(srcdir)/mmo.texi .
-	$(SHELL) $(srcdir)/../../move-if-change mmo.tmp mmo.texi
-	touch $@
-
-format.texi: format.stamp ; @true
-format.stamp: $(srcdir)/../format.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../format.c >format.tmp
-	test -e format.texi || test ! -f $(srcdir)/format.texi || cp -p $(srcdir)/format.texi .
-	$(SHELL) $(srcdir)/../../move-if-change format.tmp format.texi
-	touch $@
-
-libbfd.texi: libbfd.stamp ; @true
-libbfd.stamp: $(srcdir)/../libbfd.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../libbfd.c >libbfd.tmp
-	test -e libbfd.texi || test ! -f $(srcdir)/libbfd.texi || cp -p $(srcdir)/libbfd.texi .
-	$(SHELL) $(srcdir)/../../move-if-change libbfd.tmp libbfd.texi
-	touch $@
-
-bfdio.texi: bfdio.stamp ; @true
-bfdio.stamp: $(srcdir)/../bfdio.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../bfdio.c >bfdio.tmp
-	test -e bfdio.texi || test ! -f $(srcdir)/bfdio.texi || cp -p $(srcdir)/bfdio.texi .
-	$(SHELL) $(srcdir)/../../move-if-change bfdio.tmp bfdio.texi
-	touch $@
-
-bfdwin.texi: bfdwin.stamp ; @true
-bfdwin.stamp: $(srcdir)/../bfdwin.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../bfdwin.c >bfdwin.tmp
-	test -e bfdwin.texi || test ! -f $(srcdir)/bfdwin.texi || cp -p $(srcdir)/bfdwin.texi .
-	$(SHELL) $(srcdir)/../../move-if-change bfdwin.tmp bfdwin.texi
-	touch $@
-
-opncls.texi: opncls.stamp ; @true
-opncls.stamp: $(srcdir)/../opncls.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../opncls.c >opncls.tmp
-	test -e opncls.texi || test ! -f $(srcdir)/opncls.texi || cp -p $(srcdir)/opncls.texi .
-	$(SHELL) $(srcdir)/../../move-if-change opncls.tmp opncls.texi
-	touch $@
-
-reloc.texi: reloc.stamp ; @true
-reloc.stamp: $(srcdir)/../reloc.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../reloc.c >reloc.tmp
-	test -e reloc.texi || test ! -f $(srcdir)/reloc.texi || cp -p $(srcdir)/reloc.texi .
-	$(SHELL) $(srcdir)/../../move-if-change reloc.tmp reloc.texi
-	touch $@
-
-section.texi: section.stamp ; @true
-section.stamp: $(srcdir)/../section.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../section.c >section.tmp
-	test -e section.texi || test ! -f $(srcdir)/section.texi || cp -p $(srcdir)/section.texi .
-	$(SHELL) $(srcdir)/../../move-if-change section.tmp section.texi
-	touch $@
-
-syms.texi: syms.stamp ; @true
-syms.stamp: $(srcdir)/../syms.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../syms.c >syms.tmp
-	test -e syms.texi || test ! -f $(srcdir)/syms.texi || cp -p $(srcdir)/syms.texi .
-	$(SHELL) $(srcdir)/../../move-if-change syms.tmp syms.texi
-	touch $@
-
-targets.texi: targets.stamp ; @true
-targets.stamp: $(srcdir)/../targets.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../targets.c >targets.tmp
-	test -e targets.texi || test ! -f $(srcdir)/targets.texi || cp -p $(srcdir)/targets.texi .
-	$(SHELL) $(srcdir)/../../move-if-change targets.tmp targets.texi
-	touch $@
-
-init.texi: init.stamp ; @true
-init.stamp: $(srcdir)/../init.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../init.c >init.tmp
-	test -e init.texi || test ! -f $(srcdir)/init.texi || cp -p $(srcdir)/init.texi .
-	$(SHELL) $(srcdir)/../../move-if-change init.tmp init.texi
-	touch $@
-
-hash.texi: hash.stamp ; @true
-hash.stamp: $(srcdir)/../hash.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../hash.c >hash.tmp
-	test -e hash.texi || test ! -f $(srcdir)/hash.texi || cp -p $(srcdir)/hash.texi .
-	$(SHELL) $(srcdir)/../../move-if-change hash.tmp hash.texi
-	touch $@
-
-linker.texi: linker.stamp ; @true
-linker.stamp: $(srcdir)/../linker.c $(srcdir)/doc.str $(MKDOC)
-	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../linker.c >linker.tmp
-	test -e linker.texi || test ! -f $(srcdir)/linker.texi || cp -p $(srcdir)/linker.texi .
-	$(SHELL) $(srcdir)/../../move-if-change linker.tmp linker.texi
-	touch $@
-
-libbfd.h: $(LIBBFD_H_DEP)
-	echo "$(LIBBFD_H_DEP)" | sed -f $(srcdir)/header.sed > $@
-	for file in $(LIBBFD_H_DEP); do \
-	  case $$file in \
-	    *-in.h) cat $$file >> $@ ;; \
-	    */header.sed) break ;; \
-	    *)	echo $$file | sed -e 's,.*/,,' -e 's,^,/* Extracted from ,' \
-				-e 's,$$,.  */,' >> $@ ; \
-		./$(MKDOC) -i -f $(srcdir)/proto.str < $$file >> $@ ;; \
-	  esac; \
-	done
-	echo "#ifdef __cplusplus" >> $@
-	echo "}" >> $@
-	echo "#endif" >> $@
-	echo "#endif" >> $@
-
-libcoff.h: $(LIBCOFF_H_DEP)
-	echo "$(LIBCOFF_H_DEP)" | sed -f $(srcdir)/header.sed > $@
-	for file in $(LIBCOFF_H_DEP); do \
-	  case $$file in \
-	    *-in.h) cat $$file >> $@ ;; \
-	    */header.sed) break ;; \
-	    *)	echo $$file | sed -e 's,.*/,,' -e 's,^,/* Extracted from ,' \
-				-e 's,$$,.  */,' >> $@ ; \
-		./$(MKDOC) -i -f $(srcdir)/proto.str < $$file >> $@ ;; \
-	  esac; \
-	done
-	echo "#ifdef __cplusplus" >> $@
-	echo "}" >> $@
-	echo "#endif" >> $@
-	echo "#endif" >> $@
-
-bfd.h: $(BFD_H_DEP)
-	echo "$(BFD_H_DEP)" | sed -f $(srcdir)/header.sed > $@
-	for file in $(BFD_H_DEP); do \
-	  case $$file in \
-	    *-in.h) cat $$file >> $@ ;; \
-	    */header.sed) break ;; \
-	    *)	echo $$file | sed -e 's,.*/,,' -e 's,^,/* Extracted from ,' \
-				-e 's,$$,.  */,' >> $@ ; \
-		./$(MKDOC) -f $(srcdir)/proto.str < $$file >> $@ ;; \
-	  esac; \
-	done
-	echo "#ifdef __cplusplus" >> $@
-	echo "}" >> $@
-	echo "#endif" >> $@
-	echo "#endif" >> $@
-
-bfdver.texi: $(srcdir)/Makefile.in
-	@echo "creating $@"; \
-	echo "@set VERSION $(VERSION)" > bfdver.texi; \
-	if test -n "$(PKGVERSION)"; then \
-	  echo "@set VERSION_PACKAGE $(PKGVERSION)" >> bfdver.texi; \
-	fi; \
-	echo "@set UPDATED `date '+%B %Y'`" >> bfdver.texi; \
-	if test -n "$(REPORT_BUGS_TEXI)"; then \
-	  echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> bfdver.texi; \
-	fi
-
-# We want install to imply install-info as per GNU standards, despite the
-# cygnus option.
-install: install-info
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/makefile.vms ./bfd/doc/makefile.vms
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/makefile.vms	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/doc/makefile.vms	2024-02-01 01:47:13.000000000 +0000
@@ -1,4 +1,4 @@
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/opncls.texi ./bfd/doc/opncls.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/opncls.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/opncls.texi	2024-02-01 01:50:55.000000000 +0000
@@ -1,22 +1,30 @@
-
-@example
-/* Set to N to open the next N BFDs using an alternate id space.  */
-extern unsigned int bfd_use_reserved_id;
-@end example
 @section Opening and closing BFDs
 
 
 @subsection Functions for opening and closing
 
 
+@findex _bfd_new_bfd
+@subsubsection @code{_bfd_new_bfd}
+@deftypefn {Function} bfd *_bfd_new_bfd (void); 
+Return a new BFD.  All BFD's are allocated through this routine.
+
+@end deftypefn
+@findex _bfd_new_bfd_contained_in
+@subsubsection @code{_bfd_new_bfd_contained_in}
+@deftypefn {Function} bfd *_bfd_new_bfd_contained_in (bfd *); 
+Allocate a new BFD as a member of archive OBFD.
+
+@end deftypefn
+@findex _bfd_free_cached_info
+@subsubsection @code{_bfd_free_cached_info}
+@deftypefn {Function} bool _bfd_free_cached_info (bfd *); 
+Free objalloc memory.
+
+@end deftypefn
 @findex bfd_fopen
 @subsubsection @code{bfd_fopen}
-@strong{Synopsis}
-@example
-bfd *bfd_fopen (const char *filename, const char *target,
-    const char *mode, int fd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd *bfd_fopen (const char *filename, const char *target, const char *mode, int fd); 
 Open the file @var{filename} with the target @var{target}.
 Return a pointer to the created BFD.  If @var{fd} is not -1,
 then @code{fdopen} is used to open the file; otherwise, @code{fopen}
@@ -37,13 +45,10 @@ On error, @var{fd} is always closed.
 A copy of the @var{filename} argument is stored in the newly created
 BFD.  It can be accessed via the bfd_get_filename() macro.
 
+@end deftypefn
 @findex bfd_openr
 @subsubsection @code{bfd_openr}
-@strong{Synopsis}
-@example
-bfd *bfd_openr (const char *filename, const char *target);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd *bfd_openr (const char *filename, const char *target); 
 Open the file @var{filename} (using @code{fopen}) with the target
 @var{target}.  Return a pointer to the created BFD.
 
@@ -57,13 +62,10 @@ are @code{bfd_error_no_memory}, @code{bf
 A copy of the @var{filename} argument is stored in the newly created
 BFD.  It can be accessed via the bfd_get_filename() macro.
 
+@end deftypefn
 @findex bfd_fdopenr
 @subsubsection @code{bfd_fdopenr}
-@strong{Synopsis}
-@example
-bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd *bfd_fdopenr (const char *filename, const char *target, int fd); 
 @code{bfd_fdopenr} is to @code{bfd_fopenr} much like @code{fdopen} is to
 @code{fopen}.  It opens a BFD on a file already described by the
 @var{fd} supplied.
@@ -86,40 +88,27 @@ On error, @var{fd} is closed.
 A copy of the @var{filename} argument is stored in the newly created
 BFD.  It can be accessed via the bfd_get_filename() macro.
 
+@end deftypefn
+@findex bfd_fdopenw
+@subsubsection @code{bfd_fdopenw}
+@deftypefn {Function} bfd *bfd_fdopenw (const char *filename, const char *target, int fd); 
+@code{bfd_fdopenw} is exactly like @code{bfd_fdopenr} with the exception that
+the resulting BFD is suitable for output.
+
+@end deftypefn
 @findex bfd_openstreamr
 @subsubsection @code{bfd_openstreamr}
-@strong{Synopsis}
-@example
-bfd *bfd_openstreamr (const char * filename, const char * target,
-    void * stream);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd *bfd_openstreamr (const char * filename, const char * target, void * stream); 
 Open a BFD for read access on an existing stdio stream.  When
 the BFD is passed to @code{bfd_close}, the stream will be closed.
 
 A copy of the @var{filename} argument is stored in the newly created
 BFD.  It can be accessed via the bfd_get_filename() macro.
 
+@end deftypefn
 @findex bfd_openr_iovec
 @subsubsection @code{bfd_openr_iovec}
-@strong{Synopsis}
-@example
-bfd *bfd_openr_iovec (const char *filename, const char *target,
-    void *(*open_func) (struct bfd *nbfd,
-    void *open_closure),
-    void *open_closure,
-    file_ptr (*pread_func) (struct bfd *nbfd,
-    void *stream,
-    void *buf,
-    file_ptr nbytes,
-    file_ptr offset),
-    int (*close_func) (struct bfd *nbfd,
-    void *stream),
-    int (*stat_func) (struct bfd *abfd,
-    void *stream,
-    struct stat *sb));
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd *bfd_openr_iovec (const char *filename, const char *target, void *(*open_func) (struct bfd *nbfd, void *open_closure), void *open_closure, file_ptr (*pread_func) (struct bfd *nbfd, void *stream, void *buf, file_ptr nbytes, file_ptr offset), int (*close_func) (struct bfd *nbfd, void *stream), int (*stat_func) (struct bfd *abfd, void *stream, struct stat *sb)); 
 Create and return a BFD backed by a read-only @var{stream}.
 The @var{stream} is created using @var{open_func}, accessed using
 @var{pread_func} and destroyed using @var{close_func}.
@@ -154,13 +143,10 @@ occurred.  Possible errors are @code{bfd
 A copy of the @var{filename} argument is stored in the newly created
 BFD.  It can be accessed via the bfd_get_filename() macro.
 
+@end deftypefn
 @findex bfd_openw
 @subsubsection @code{bfd_openw}
-@strong{Synopsis}
-@example
-bfd *bfd_openw (const char *filename, const char *target);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd *bfd_openw (const char *filename, const char *target); 
 Create a BFD, associated with file @var{filename}, using the
 file format @var{target}, and return a pointer to it.
 
@@ -170,13 +156,30 @@ Possible errors are @code{bfd_error_syst
 A copy of the @var{filename} argument is stored in the newly created
 BFD.  It can be accessed via the bfd_get_filename() macro.
 
+@end deftypefn
+@findex bfd_elf_bfd_from_remote_memory
+@subsubsection @code{bfd_elf_bfd_from_remote_memory}
+@deftypefn {Function} bfd *bfd_elf_bfd_from_remote_memory (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep, int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, bfd_size_type len)); 
+Create a new BFD as if by bfd_openr.  Rather than opening a
+file, reconstruct an ELF file by reading the segments out of
+remote memory based on the ELF file header at EHDR_VMA and the
+ELF program headers it points to.  If non-zero, SIZE is the
+known extent of the object.  If not null, *LOADBASEP is filled
+in with the difference between the VMAs from which the
+segments were read, and the VMAs the file headers (and hence
+BFD's idea of each section's VMA) put them at.
+
+The function TARGET_READ_MEMORY is called to copy LEN bytes
+from the remote memory at target address VMA into the local
+buffer at MYADDR; it should return zero on success or an
+errno code on failure.  TEMPL must be a BFD for an ELF
+target with the word size and byte order found in the remote
+memory.
+
+@end deftypefn
 @findex bfd_close
 @subsubsection @code{bfd_close}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_close (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_close (bfd *abfd); 
 Close a BFD. If the BFD was open for writing, then pending
 operations are completed and the file written out and closed.
 If the created file is executable, then @code{chmod} is called
@@ -187,16 +190,12 @@ All memory attached to the BFD is releas
 The file descriptor associated with the BFD is closed (even
 if it was passed in to BFD by @code{bfd_fdopenr}).
 
-@strong{Returns}@*
 @code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
 
+@end deftypefn
 @findex bfd_close_all_done
 @subsubsection @code{bfd_close_all_done}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_close_all_done (bfd *);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_close_all_done (bfd *); 
 Close a BFD.  Differs from @code{bfd_close} since it does not
 complete any pending operations.  This routine would be used
 if the application had just used BFD for swapping and didn't
@@ -207,16 +206,12 @@ to mark it as such.
 
 All memory attached to the BFD is released.
 
-@strong{Returns}@*
 @code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
 
+@end deftypefn
 @findex bfd_create
 @subsubsection @code{bfd_create}
-@strong{Synopsis}
-@example
-bfd *bfd_create (const char *filename, bfd *templ);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd *bfd_create (const char *filename, bfd *templ); 
 Create a new BFD in the manner of @code{bfd_openw}, but without
 opening a file. The new BFD takes the target from the target
 used by @var{templ}. The format is always set to @code{bfd_object}.
@@ -224,143 +219,58 @@ used by @var{templ}. The format is alway
 A copy of the @var{filename} argument is stored in the newly created
 BFD.  It can be accessed via the bfd_get_filename() macro.
 
+@end deftypefn
 @findex bfd_make_writable
 @subsubsection @code{bfd_make_writable}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_make_writable (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_make_writable (bfd *abfd); 
 Takes a BFD as created by @code{bfd_create} and converts it
 into one like as returned by @code{bfd_openw}.  It does this
 by converting the BFD to BFD_IN_MEMORY.  It's assumed that
 you will call @code{bfd_make_readable} on this bfd later.
 
-@strong{Returns}@*
 @code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
 
+@end deftypefn
 @findex bfd_make_readable
 @subsubsection @code{bfd_make_readable}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_make_readable (bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_make_readable (bfd *abfd); 
 Takes a BFD as created by @code{bfd_create} and
 @code{bfd_make_writable} and converts it into one like as
 returned by @code{bfd_openr}.  It does this by writing the
 contents out to the memory buffer, then reversing the
 direction.
 
-@strong{Returns}@*
 @code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
 
-@findex bfd_alloc
-@subsubsection @code{bfd_alloc}
-@strong{Synopsis}
-@example
-void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
-@end example
-@strong{Description}@*
-Allocate a block of @var{wanted} bytes of memory attached to
-@code{abfd} and return a pointer to it.
-
-@findex bfd_alloc2
-@subsubsection @code{bfd_alloc2}
-@strong{Synopsis}
-@example
-void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
-@end example
-@strong{Description}@*
-Allocate a block of @var{nmemb} elements of @var{size} bytes each
-of memory attached to @code{abfd} and return a pointer to it.
-
-@findex bfd_zalloc
-@subsubsection @code{bfd_zalloc}
-@strong{Synopsis}
-@example
-void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
-@end example
-@strong{Description}@*
-Allocate a block of @var{wanted} bytes of zeroed memory
-attached to @code{abfd} and return a pointer to it.
-
-@findex bfd_zalloc2
-@subsubsection @code{bfd_zalloc2}
-@strong{Synopsis}
-@example
-void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
-@end example
-@strong{Description}@*
-Allocate a block of @var{nmemb} elements of @var{size} bytes each
-of zeroed memory attached to @code{abfd} and return a pointer to it.
-
+@end deftypefn
 @findex bfd_calc_gnu_debuglink_crc32
 @subsubsection @code{bfd_calc_gnu_debuglink_crc32}
-@strong{Synopsis}
-@example
-unsigned long bfd_calc_gnu_debuglink_crc32
-   (unsigned long crc, const unsigned char *buf, bfd_size_type len);
-@end example
-@strong{Description}@*
+@deftypefn {Function} uint32_t bfd_calc_gnu_debuglink_crc32 (uint32_t crc, const bfd_byte *buf, bfd_size_type len); 
 Computes a CRC value as used in the .gnu_debuglink section.
 Advances the previously computed @var{crc} value by computing
 and adding in the crc32 for @var{len} bytes of @var{buf}.
 
-@strong{Returns}@*
 Return the updated CRC32 value.
 
-@findex bfd_get_debug_link_info_1
-@subsubsection @code{bfd_get_debug_link_info_1}
-@strong{Synopsis}
-@example
-char *bfd_get_debug_link_info_1 (bfd *abfd, void *crc32_out);
-@end example
-@strong{Description}@*
-Extracts the filename and CRC32 value for any separate debug
-information file associated with @var{abfd}.
-
-The @var{crc32_out} parameter is an untyped pointer because
-this routine is used as a @code{get_func_type} function, but it
-is expected to be an unsigned long pointer.
-
-@strong{Returns}@*
-The filename of the associated debug information file, or NULL
-if there is no such file.  If the filename was found then the
-contents of @var{crc32_out} are updated to hold the corresponding
-CRC32 value for the file.
-
-The returned filename is allocated with @code{malloc}; freeing
-it is the responsibility of the caller.
-
+@end deftypefn
 @findex bfd_get_debug_link_info
 @subsubsection @code{bfd_get_debug_link_info}
-@strong{Synopsis}
-@example
-char *bfd_get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
-@end example
-@strong{Description}@*
+@deftypefn {Function} char *bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out); 
 Extracts the filename and CRC32 value for any separate debug
 information file associated with @var{abfd}.
 
-@strong{Returns}@*
-The filename of the associated debug information file, or NULL
-if there is no such file.  If the filename was found then the
-contents of @var{crc32_out} are updated to hold the corresponding
-CRC32 value for the file.
+Returns the filename of the associated debug information file,
+or NULL if there is no such file.  If the filename was found
+then the contents of @var{crc32_out} are updated to hold the
+corresponding CRC32 value for the file.
 
 The returned filename is allocated with @code{malloc}; freeing
 it is the responsibility of the caller.
 
+@end deftypefn
 @findex bfd_get_alt_debug_link_info
 @subsubsection @code{bfd_get_alt_debug_link_info}
-@strong{Synopsis}
-@example
-char *bfd_get_alt_debug_link_info (bfd * abfd,
-    bfd_size_type *buildid_len,
-    bfd_byte **buildid_out);
-@end example
-@strong{Description}@*
+@deftypefn {Function} char *bfd_get_alt_debug_link_info (bfd * abfd, bfd_size_type *buildid_len, bfd_byte **buildid_out); 
 Fetch the filename and BuildID value for any alternate debuginfo
 associated with @var{abfd}.  Return NULL if no such info found,
 otherwise return filename and update @var{buildid_len} and
@@ -368,65 +278,10 @@ otherwise return filename and update @va
 allocated with @code{malloc}; freeing them is the responsibility
 of the caller.
 
-@findex separate_debug_file_exists
-@subsubsection @code{separate_debug_file_exists}
-@strong{Synopsis}
-@example
-bfd_boolean separate_debug_file_exists
-   (char *name, void *crc32_p);
-@end example
-@strong{Description}@*
-Checks to see if @var{name} is a file and if its contents
-match @var{crc32}, which is a pointer to an @code{unsigned
-long} containing a CRC32.
-
-The @var{crc32_p} parameter is an untyped pointer because
-this routine is used as a @code{check_func_type} function.
-
-@findex separate_alt_debug_file_exists
-@subsubsection @code{separate_alt_debug_file_exists}
-@strong{Synopsis}
-@example
-bfd_boolean separate_alt_debug_file_exists
-   (char *name, void *unused);
-@end example
-@strong{Description}@*
-Checks to see if @var{name} is a file.
-
-@findex find_separate_debug_file
-@subsubsection @code{find_separate_debug_file}
-@strong{Synopsis}
-@example
-char *find_separate_debug_file
-   (bfd *abfd, const char *dir, bfd_boolean include_dirs,
-    get_func_type get, check_func_type check, void *data);
-@end example
-@strong{Description}@*
-Searches for a debug information file corresponding to @var{abfd}.
-
-The name of the separate debug info file is returned by the
-@var{get} function.  This function scans various fixed locations
-in the filesystem, including the file tree rooted at @var{dir}.
-If the @var{include_dirs} parameter is true then the directory
-components of @var{abfd}'s filename will be included in the
-searched locations.
-
-@var{data} is passed unmodified to the @var{get} and @var{check}
-functions.  It is generally used to implement build-id-like
-matching in the callback functions.
-
-@strong{Returns}@*
-Returns the filename of the first file to be found which
-receives a TRUE result from the @var{check} function.
-Returns NULL if no valid file could be found.
-
+@end deftypefn
 @findex bfd_follow_gnu_debuglink
 @subsubsection @code{bfd_follow_gnu_debuglink}
-@strong{Synopsis}
-@example
-char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
-@end example
-@strong{Description}@*
+@deftypefn {Function} char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir); 
 Takes a BFD and searches it for a .gnu_debuglink section.  If this
 section is found, it examines the section for the name and checksum
 of a '.debug' file containing auxiliary debugging information.  It
@@ -437,18 +292,15 @@ found returns the full filename.
 If @var{dir} is NULL, the search will take place starting at
 the current directory.
 
-@strong{Returns}@*
-@code{NULL} on any errors or failure to locate the .debug file,
-otherwise a pointer to a heap-allocated string containing the
-filename.  The caller is responsible for freeing this string.
+Returns @code{NULL} on any errors or failure to locate the .debug
+file, otherwise a pointer to a heap-allocated string
+containing the filename.  The caller is responsible for
+freeing this string.
 
+@end deftypefn
 @findex bfd_follow_gnu_debugaltlink
 @subsubsection @code{bfd_follow_gnu_debugaltlink}
-@strong{Synopsis}
-@example
-char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir);
-@end example
-@strong{Description}@*
+@deftypefn {Function} char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir); 
 Takes a BFD and searches it for a .gnu_debugaltlink section.  If this
 section is found, it examines the section for the name of a file
 containing auxiliary debugging information.  It then searches the
@@ -459,102 +311,38 @@ full filename.
 If @var{dir} is NULL, the search will take place starting at
 the current directory.
 
-@strong{Returns}@*
-@code{NULL} on any errors or failure to locate the debug file,
-otherwise a pointer to a heap-allocated string containing the
-filename.  The caller is responsible for freeing this string.
+Returns @code{NULL} on any errors or failure to locate the debug
+file, otherwise a pointer to a heap-allocated string
+containing the filename.  The caller is responsible for
+freeing this string.
 
+@end deftypefn
 @findex bfd_create_gnu_debuglink_section
 @subsubsection @code{bfd_create_gnu_debuglink_section}
-@strong{Synopsis}
-@example
-struct bfd_section *bfd_create_gnu_debuglink_section
-   (bfd *abfd, const char *filename);
-@end example
-@strong{Description}@*
+@deftypefn {Function} struct bfd_section *bfd_create_gnu_debuglink_section (bfd *abfd, const char *filename); 
 Takes a @var{BFD} and adds a .gnu_debuglink section to it.  The
 section is sized to be big enough to contain a link to the specified
 @var{filename}.
 
-@strong{Returns}@*
 A pointer to the new section is returned if all is ok.  Otherwise
 @code{NULL} is returned and bfd_error is set.
 
+@end deftypefn
 @findex bfd_fill_in_gnu_debuglink_section
 @subsubsection @code{bfd_fill_in_gnu_debuglink_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_fill_in_gnu_debuglink_section
-   (bfd *abfd, struct bfd_section *sect, const char *filename);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_fill_in_gnu_debuglink_section (bfd *abfd, struct bfd_section *sect, const char *filename); 
 Takes a @var{BFD} and containing a .gnu_debuglink section @var{SECT}
 and fills in the contents of the section to contain a link to the
-specified @var{filename}.  The filename should be relative to the
-current directory.
+specified @var{filename}.  The filename should be absolute or
+relative to the current directory.
 
-@strong{Returns}@*
 @code{TRUE} is returned if all is ok.  Otherwise @code{FALSE} is returned
 and bfd_error is set.
 
-@findex get_build_id
-@subsubsection @code{get_build_id}
-@strong{Synopsis}
-@example
-struct bfd_build_id * get_build_id (bfd *abfd);
-@end example
-@strong{Description}@*
-Finds the build-id associated with @var{abfd}.  If the build-id is
-extracted from the note section then a build-id structure is built
-for it, using memory allocated to @var{abfd}, and this is then
-attached to the @var{abfd}.
-
-@strong{Returns}@*
-Returns a pointer to the build-id structure if a build-id could be
-found.  If no build-id is found NULL is returned and error code is
-set.
-
-@findex get_build_id_name
-@subsubsection @code{get_build_id_name}
-@strong{Synopsis}
-@example
-char * get_build_id_name (bfd *abfd, void *build_id_out_p)
-@end example
-@strong{Description}@*
-Searches @var{abfd} for a build-id, and then constructs a pathname
-from it.  The path is computed as .build-id/NN/NN+NN.debug where
-NNNN+NN is the build-id value as a hexadecimal string.
-
-@strong{Returns}@*
-Returns the constructed filename or NULL upon error.
-It is the caller's responsibility to free the memory used to hold the
-filename.
-If a filename is returned then the @var{build_id_out_p}
-parameter (which points to a @code{struct bfd_build_id}
-pointer) is set to a pointer to the build_id structure.
-
-@findex check_build_id_file
-@subsubsection @code{check_build_id_file}
-@strong{Synopsis}
-@example
-bfd_boolean check_build_id_file (char *name, void *buildid_p);
-@end example
-@strong{Description}@*
-Checks to see if @var{name} is a readable file and if its build-id
-matches @var{buildid}.
-
-@strong{Returns}@*
-Returns TRUE if the file exists, is readable, and contains a
-build-id which matches the build-id pointed at by
-@var{build_id_p} (which is really a @code{struct bfd_build_id **}).
-
+@end deftypefn
 @findex bfd_follow_build_id_debuglink
 @subsubsection @code{bfd_follow_build_id_debuglink}
-@strong{Synopsis}
-@example
-char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir);
-@end example
-@strong{Description}@*
+@deftypefn {Function} char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir); 
 Takes @var{abfd} and searches it for a .note.gnu.build-id section.
 If this section is found, it extracts the value of the NT_GNU_BUILD_ID
 note, which should be a hexadecimal value @var{NNNN+NN} (for
@@ -569,19 +357,17 @@ not implemented.
 If @var{dir} is NULL, the search will take place starting at
 the current directory.
 
-@strong{Returns}@*
-@code{NULL} on any errors or failure to locate the debug file,
-otherwise a pointer to a heap-allocated string containing the
-filename.  The caller is responsible for freeing this string.
+Returns @code{NULL} on any errors or failure to locate the debug
+file, otherwise a pointer to a heap-allocated string
+containing the filename.  The caller is responsible for
+freeing this string.
 
+@end deftypefn
 @findex bfd_set_filename
 @subsubsection @code{bfd_set_filename}
-@strong{Synopsis}
-@example
-void bfd_set_filename (bfd *abfd, char *filename);
-@end example
-@strong{Description}@*
-Set the filename of @var{abfd}.  The old filename, if any, is freed.
-@var{filename} must be allocated using @code{xmalloc}.  After
-this call, it is owned @var{abfd}.
+@deftypefn {Function} const char *bfd_set_filename (bfd *abfd, const char *filename); 
+Set the filename of @var{abfd}, copying the FILENAME parameter to
+bfd_alloc'd memory owned by @var{abfd}.  Returns a pointer the
+newly allocated name, or NULL if the allocation failed.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/proto.str ./bfd/doc/proto.str
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/proto.str	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/doc/proto.str	2024-02-01 01:47:13.000000000 +0000
@@ -1,12 +1,50 @@
+- Source extraction program for chew.
+-  Copyright (C) 1990-2024 Free Software Foundation, Inc.
+-  This file is part of BFD, the Binary File Descriptor library.
+
+-  This program is free software; you can redistribute it and/or modify
+-  it under the terms of the GNU General Public License as published by
+-  the Free Software Foundation; either version 3 of the License, or
+-  (at your option) any later version.
+
+-  This program is distributed in the hope that it will be useful,
+-  but WITHOUT ANY WARRANTY; without even the implied warranty of
+-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-  GNU General Public License for more details.
+
+-  You should have received a copy of the GNU General Public License
+-  along with this program; if not, write to the Free Software
+-  Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+- chew.c keywords defined here put output into bfd-in2.h and libbfd.h or
+- libcoff.h, from comments in the source.  See also doc.str.
+- Output lines generally come from comment lines starting with a dot,
+- or from keywords like SYNOPSIS.  Output switches to bfd-in2.h at the
+- end of each comment.  Use INTERNAL* to output to libbfd.h.
+-
+- EXTERNAL: output to bfd-in2.h, nothing to docs
+- INTERNAL: output to libbfd.h, nothing to docs
+- CODE_FRAGMENT: output to header and docs
+- FUNCTION: output to bfd-in2.h and docs
+- INTERNAL_FUNCTION: output to libbfd.h and docs
+- DEFINITION: alias for FUNCTION, but generally doesn't have SYNOPSIS,
+-	used for structs and other random code
+- INTERNAL_DEFINITION: as above, but output to libbfd.h and docs
+- ENUM* outputs to bfd-in2.h, libbfd.h and docs.
 
 : SYNOPSIS
 	skip_past_newline
 	get_stuff_in_command	
-	paramstuff
+	translatecomments
+	strip_trailing_newlines
+	remchar
+	" ATTRIBUTE_HIDDEN" internalmode @ catstrif
+	";\n\n" catstr
 	indent
 	maybecatstr
 ;
 
+- Ignore stuff that is for the docs.  Output lines starting with dots.
 : ignore
 	skip_past_newline 
 	get_stuff_in_command
@@ -17,17 +55,19 @@
 : CODE_FRAGMENT
 	ignore ;
 
-: external
-	0 internalmode ignore ;
-
-: internal 
-	1 internalmode ignore ;
+- Output goes to bfd-in2.h
+: EXTERNAL
+	0 internalmode ! ignore ;
+
+- Output goes to libbfd.h/libcoff.h
+: INTERNAL 
+	1 internalmode ! ignore ;
 
 - input stack { a b } output b if internal, a if external
 : ifinternal
-	"" swap 1 internalmode maybecatstr
+	"" swap 1 internalmode ! maybecatstr
 	swap
-	"" swap 0 internalmode maybecatstr
+	"" swap 0 internalmode ! maybecatstr
 	catstr
 	;
 
@@ -48,7 +88,7 @@
 : make_enum_header
 	dup
 	"enum " swap catstr
-	" {\n" catstr
+	"\n{\n" catstr
 	swap "  _dummy_first_" swap catstr catstr
 	",\n" catstr
 	;
@@ -74,7 +114,7 @@
 	skip_past_newline
 	copy_past_newline strip_trailing_newlines
 	dup
-	"  " swap catstr " };\n" catstr	swap
+	"  " swap catstr "\n};\n" catstr swap
 	" \"@@overflow: " swap catstr "@@\",\n};\n#endif\n\n" catstr
 	ifinternal
 	catstr
@@ -107,29 +147,28 @@
 	catstr
 	copy_past_newline
 	catstr
-	"" swap 0 internalmode maybecatstr
+	"" swap 0 internalmode ! maybecatstr
 	;
 : ENUMEQX ENUMEQ catstr ;
 : ENUMDOC
 	skip_past_newline
 	get_stuff_in_command
 	strip_trailing_newlines
-	"\n{* " swap catstr "  *}\n" catstr
-	translatecomments
+	"  " wrap_comment
+	"\n" swap catstr "\n" catstr
 	- discard it if we're doing internal mode
-	"" swap 0 internalmode maybecatstr
+	"" swap 0 internalmode ! maybecatstr
 	swap
 	catstr catstr
 	;
-: ENDDD external ;
 : SECTION ignore ;
 : SUBSECTION ignore ;
 : SUBSUBSECTION ignore ;
-: INTERNAL_DEFINITION internal ;
-: DESCRIPTION ignore ;
-: FUNCTION external ;
-: RETURNS ignore ;
-: TYPEDEF external ;
-: INTERNAL_FUNCTION internal ;
-: INTERNAL internal ;
 : INODE ignore ;
+: DESCRIPTION ignore ;
+: DOCDD ignore ;
+: ENDDD EXTERNAL ;
+: FUNCTION EXTERNAL ;
+: INTERNAL_FUNCTION INTERNAL ;
+: DEFINITION EXTERNAL ;
+: INTERNAL_DEFINITION INTERNAL ;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/reloc.texi ./bfd/doc/reloc.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/reloc.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/reloc.texi	2024-02-01 01:50:55.000000000 +0000
@@ -24,41 +24,7 @@ This is the structure of a relocation en
 
 
 @example
-
-typedef enum bfd_reloc_status
-@{
-  /* No errors detected.  Note - the value 2 is used so that it
-     will not be mistaken for the boolean TRUE or FALSE values.  */
-  bfd_reloc_ok = 2,
-
-  /* The relocation was performed, but there was an overflow.  */
-  bfd_reloc_overflow,
-
-  /* The address to relocate was not within the section supplied.  */
-  bfd_reloc_outofrange,
-
-  /* Used by special functions.  */
-  bfd_reloc_continue,
-
-  /* Unsupported relocation size requested.  */
-  bfd_reloc_notsupported,
-
-  /* Unused.  */
-  bfd_reloc_other,
-
-  /* The symbol to relocate against was undefined.  */
-  bfd_reloc_undefined,
-
-  /* The relocation was performed, but may not be ok.  If this type is
-     returned, the error_message argument to bfd_perform_relocation
-     will be set.  */
-  bfd_reloc_dangerous
- @}
- bfd_reloc_status_type;
-
-typedef const struct reloc_howto_struct reloc_howto_type;
-
-typedef struct reloc_cache_entry
+struct reloc_cache_entry
 @{
   /* A pointer into the canonical table of pointers.  */
   struct bfd_symbol **sym_ptr_ptr;
@@ -72,11 +38,9 @@ typedef struct reloc_cache_entry
   /* Pointer to how to perform the required relocation.  */
   reloc_howto_type *howto;
 
-@}
-arelent;
+@};
 
 @end example
-@strong{Description}@*
 Here is a description of each of the fields within an @code{arelent}:
 
 @itemize @bullet
@@ -231,7 +195,6 @@ performing a relocation.
 
 
 @example
-
 enum complain_overflow
 @{
   /* Do not complain on overflow.  */
@@ -250,6 +213,7 @@ enum complain_overflow
      unsigned number.  */
   complain_overflow_unsigned
 @};
+
 @end example
 @subsubsection @code{reloc_howto_type}
 The @code{reloc_howto_type} is a structure which contains all the
@@ -264,10 +228,8 @@ struct reloc_howto_struct
      an external reloc number is stored in this field.  */
   unsigned int type;
 
-  /* The encoded size of the item to be relocated.  This is *not* a
-     power-of-two measure.  Use bfd_get_reloc_size to find the size
-     of the item in bytes.  */
-  unsigned int size:3;
+  /* The size of the item to be relocated in bytes.  */
+  unsigned int size:4;
 
   /* The number of bits in the field to be relocated.  This is used
      when doing overflow checking.  */
@@ -316,6 +278,11 @@ struct reloc_howto_struct
      empty (e.g., ELF); this flag signals the fact.  */
   unsigned int pcrel_offset:1;
 
+  /* Whether bfd_install_relocation should just install the addend,
+     or should follow the practice of some older object formats and
+     install a value including the symbol.  */
+  unsigned int install_addend:1;
+
   /* src_mask selects the part of the instruction (or data) to be used
      in the relocation sum.  If the target relocations don't have an
      addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
@@ -344,38 +311,34 @@ struct reloc_howto_struct
 @end example
 @findex The HOWTO Macro
 @subsubsection @code{The HOWTO Macro}
-@strong{Description}@*
 The HOWTO macro fills in a reloc_howto_type (a typedef for
 const struct reloc_howto_struct).
 @example
+#define HOWTO_INSTALL_ADDEND 0
+#define HOWTO_RSIZE(sz) ((sz) < 0 ? -(sz) : (sz))
 #define HOWTO(type, right, size, bits, pcrel, left, ovf, func, name,   \
               inplace, src_mask, dst_mask, pcrel_off)                  \
-  @{ (unsigned) type, size < 0 ? -size : size, bits, right, left, ovf,  \
-    size < 0, pcrel, inplace, pcrel_off, src_mask, dst_mask, func, name @}
+  @{ (unsigned) type, HOWTO_RSIZE (size), bits, right, left, ovf,       \
+    size < 0, pcrel, inplace, pcrel_off, HOWTO_INSTALL_ADDEND,         \
+    src_mask, dst_mask, func, name @}
 @end example
 
-@strong{Description}@*
 This is used to fill in an empty howto entry in an array.
 @example
 #define EMPTY_HOWTO(C) \
-  HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
-         NULL, FALSE, 0, 0, FALSE)
+  HOWTO ((C), 0, 1, 0, false, 0, complain_overflow_dont, NULL, \
+         NULL, false, 0, 0, false)
 
-@end example
+static inline unsigned int
+bfd_get_reloc_size (reloc_howto_type *howto)
+@{
+  return howto->size;
+@}
 
-@findex bfd_get_reloc_size
-@subsubsection @code{bfd_get_reloc_size}
-@strong{Synopsis}
-@example
-unsigned int bfd_get_reloc_size (reloc_howto_type *);
 @end example
-@strong{Description}@*
-For a reloc_howto_type that operates on a fixed number of bytes,
-this returns the number of bytes operated on.
 
 @findex arelent_chain
 @subsubsection @code{arelent_chain}
-@strong{Description}@*
 How relocs are tied together in an @code{asection}:
 @example
 typedef struct relent_chain
@@ -389,49 +352,24 @@ arelent_chain;
 
 @findex bfd_check_overflow
 @subsubsection @code{bfd_check_overflow}
-@strong{Synopsis}
-@example
-bfd_reloc_status_type bfd_check_overflow
-   (enum complain_overflow how,
-    unsigned int bitsize,
-    unsigned int rightshift,
-    unsigned int addrsize,
-    bfd_vma relocation);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_reloc_status_type bfd_check_overflow (enum complain_overflow how, unsigned int bitsize, unsigned int rightshift, unsigned int addrsize, bfd_vma relocation); 
 Perform overflow checking on @var{relocation} which has
 @var{bitsize} significant bits and will be shifted right by
 @var{rightshift} bits, on a machine with addresses containing
 @var{addrsize} significant bits.  The result is either of
 @code{bfd_reloc_ok} or @code{bfd_reloc_overflow}.
 
+@end deftypefn
 @findex bfd_reloc_offset_in_range
 @subsubsection @code{bfd_reloc_offset_in_range}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_reloc_offset_in_range
-   (reloc_howto_type *howto,
-    bfd *abfd,
-    asection *section,
-    bfd_size_type offset);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_reloc_offset_in_range (reloc_howto_type *howto, bfd *abfd, asection *section, bfd_size_type offset); 
 Returns TRUE if the reloc described by @var{HOWTO} can be
 applied at @var{OFFSET} octets in @var{SECTION}.
 
+@end deftypefn
 @findex bfd_perform_relocation
 @subsubsection @code{bfd_perform_relocation}
-@strong{Synopsis}
-@example
-bfd_reloc_status_type bfd_perform_relocation
-   (bfd *abfd,
-    arelent *reloc_entry,
-    void *data,
-    asection *input_section,
-    bfd *output_bfd,
-    char **error_message);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_reloc_status_type bfd_perform_relocation (bfd *abfd, arelent *reloc_entry, void *data, asection *input_section, bfd *output_bfd, char **error_message); 
 If @var{output_bfd} is supplied to this function, the
 generated image will be relocatable; the relocations are
 copied to the output file after they have been changed to
@@ -447,18 +385,10 @@ types with addends were invented to solv
 The @var{error_message} argument is set to an error message if
 this return @code{bfd_reloc_dangerous}.
 
+@end deftypefn
 @findex bfd_install_relocation
 @subsubsection @code{bfd_install_relocation}
-@strong{Synopsis}
-@example
-bfd_reloc_status_type bfd_install_relocation
-   (bfd *abfd,
-    arelent *reloc_entry,
-    void *data, bfd_vma data_start,
-    asection *input_section,
-    char **error_message);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_reloc_status_type bfd_install_relocation (bfd *abfd, arelent *reloc_entry, void *data, bfd_vma data_start, asection *input_section, char **error_message); 
 This looks remarkably like @code{bfd_perform_relocation}, except it
 does not expect that the section contents have been filled in.
 I.e., it's suitable for use when creating, rather than applying
@@ -467,6 +397,7 @@ a relocation.
 For now, this function should be considered reserved for the
 assembler.
 
+@end deftypefn
 
 @node howto manager,  , typedef arelent, Relocations
 @subsection The howto manager
@@ -474,9 +405,8 @@ When an application wants to create a re
 know what the target machine might call it, it can find out by
 using this bit of code.
 
-@findex bfd_reloc_code_type
-@subsubsection @code{bfd_reloc_code_type}
-@strong{Description}@*
+@findex bfd_reloc_code_real_type
+@subsubsection @code{bfd_reloc_code_real_type}
 The insides of a reloc code.  The idea is that, eventually, there
 will be one enumerator for every type of relocation we ever do.
 Pass one of these values to @code{bfd_reloc_type_lookup}, and it'll
@@ -503,11 +433,13 @@ Basic absolute relocations of N bits.
 @deffnx {} BFD_RELOC_16_PCREL
 @deffnx {} BFD_RELOC_12_PCREL
 @deffnx {} BFD_RELOC_8_PCREL
-PC-relative relocations.  Sometimes these are relative to the address
-of the relocation itself; sometimes they are relative to the start of
-the section containing the relocation.  It depends on the specific target.
+PC-relative relocations.  Sometimes these are relative to the
+address of the relocation itself; sometimes they are relative to the
+start of the section containing the relocation.  It depends on the
+specific target.
 @end deffn
 @deffn {} BFD_RELOC_32_SECREL
+@deffnx {} BFD_RELOC_16_SECIDX
 Section relative relocations.  Some targets need this for DWARF2.
 @end deffn
 @deffn {} BFD_RELOC_32_GOT_PCREL
@@ -581,8 +513,8 @@ displacement is used on the Alpha.
 @end deffn
 @deffn {} BFD_RELOC_HI22
 @deffnx {} BFD_RELOC_LO10
-High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
-the target word.  These are used on the SPARC.
+High 22 bits and low 10 bits of 32-bit value, placed into lower bits
+of the target word.  These are used on the SPARC.
 @end deffn
 @deffn {} BFD_RELOC_GPREL16
 @deffnx {} BFD_RELOC_GPREL32
@@ -650,10 +582,10 @@ I think these are specific to SPARC a.ou
 @deffnx {} BFD_RELOC_SPARC_SIZE32
 @deffnx {} BFD_RELOC_SPARC_SIZE64
 @deffnx {} BFD_RELOC_SPARC_WDISP10
-SPARC64 relocations
+SPARC64 relocations.
 @end deffn
 @deffn {} BFD_RELOC_SPARC_REV32
-SPARC little endian relocation
+SPARC little endian relocation.
 @end deffn
 @deffn {} BFD_RELOC_SPARC_TLS_GD_HI22
 @deffnx {} BFD_RELOC_SPARC_TLS_GD_LO10
@@ -679,7 +611,7 @@ SPARC little endian relocation
 @deffnx {} BFD_RELOC_SPARC_TLS_DTPOFF64
 @deffnx {} BFD_RELOC_SPARC_TLS_TPOFF32
 @deffnx {} BFD_RELOC_SPARC_TLS_TPOFF64
-SPARC TLS relocations
+SPARC TLS relocations.
 @end deffn
 @deffn {} BFD_RELOC_SPU_IMM7
 @deffnx {} BFD_RELOC_SPU_IMM8
@@ -821,18 +753,18 @@ to compensate for the borrow when the lo
 Low 16 bits.
 @end deffn
 @deffn {} BFD_RELOC_HI16_PCREL
-High 16 bits of 32-bit pc-relative value
+High 16 bits of 32-bit pc-relative value.
 @end deffn
 @deffn {} BFD_RELOC_HI16_S_PCREL
-High 16 bits of 32-bit pc-relative value, adjusted
+High 16 bits of 32-bit pc-relative value, adjusted.
 @end deffn
 @deffn {} BFD_RELOC_LO16_PCREL
-Low 16 bits of pc-relative value
+Low 16 bits of pc-relative value.
 @end deffn
 @deffn {} BFD_RELOC_MIPS16_GOT16
 @deffnx {} BFD_RELOC_MIPS16_CALL16
 Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
-16-bit immediate fields
+16-bit immediate fields.
 @end deffn
 @deffn {} BFD_RELOC_MIPS16_HI16
 MIPS16 high 16 bits of 32-bit value.
@@ -853,7 +785,7 @@ MIPS16 low 16 bits.
 @deffnx {} BFD_RELOC_MIPS16_TLS_GOTTPREL
 @deffnx {} BFD_RELOC_MIPS16_TLS_TPREL_HI16
 @deffnx {} BFD_RELOC_MIPS16_TLS_TPREL_LO16
-MIPS16 TLS relocations
+MIPS16 TLS relocations.
 @end deffn
 @deffn {} BFD_RELOC_MIPS_LITERAL
 @deffnx {} BFD_RELOC_MICROMIPS_LITERAL
@@ -910,7 +842,7 @@ microMIPS versions of generic BFD relocs
 @deffnx {} BFD_RELOC_MICROMIPS_HIGHER
 @deffnx {} BFD_RELOC_MIPS_SCN_DISP
 @deffnx {} BFD_RELOC_MICROMIPS_SCN_DISP
-@deffnx {} BFD_RELOC_MIPS_REL16
+@deffnx {} BFD_RELOC_MIPS_16
 @deffnx {} BFD_RELOC_MIPS_RELGOT
 @deffnx {} BFD_RELOC_MIPS_JALR
 @deffnx {} BFD_RELOC_MICROMIPS_JALR
@@ -1000,16 +932,16 @@ Fujitsu Frv Relocations.
 This is a 24bit GOT-relative reloc for the mn10300.
 @end deffn
 @deffn {} BFD_RELOC_MN10300_GOT32
-This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.
+This is a 32bit GOT-relative reloc for the mn10300, offset by two
+bytes in the instruction.
 @end deffn
 @deffn {} BFD_RELOC_MN10300_GOT24
-This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.
+This is a 24bit GOT-relative reloc for the mn10300, offset by two
+bytes in the instruction.
 @end deffn
 @deffn {} BFD_RELOC_MN10300_GOT16
-This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.
+This is a 16bit GOT-relative reloc for the mn10300, offset by two
+bytes in the instruction.
 @end deffn
 @deffn {} BFD_RELOC_MN10300_COPY
 Copy symbol at runtime.
@@ -1024,14 +956,13 @@ Create PLT entry.
 Adjust by program base.
 @end deffn
 @deffn {} BFD_RELOC_MN10300_SYM_DIFF
-Together with another reloc targeted at the same location,
-allows for a value that is the difference of two symbols
-in the same section.
+Together with another reloc targeted at the same location, allows
+for a value that is the difference of two symbols in the same
+section.
 @end deffn
 @deffn {} BFD_RELOC_MN10300_ALIGN
-The addend of this reloc is an alignment power that must
-be honoured at the offset's location, regardless of linker
-relaxation.
+The addend of this reloc is an alignment power that must be honoured
+at the offset's location, regardless of linker relaxation.
 @end deffn
 @deffn {} BFD_RELOC_MN10300_TLS_GD
 @deffnx {} BFD_RELOC_MN10300_TLS_LD
@@ -1045,12 +976,12 @@ relaxation.
 Various TLS-related relocations.
 @end deffn
 @deffn {} BFD_RELOC_MN10300_32_PCREL
-This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.
+This is a 32bit pcrel reloc for the mn10300, offset by two bytes in
+the instruction.
 @end deffn
 @deffn {} BFD_RELOC_MN10300_16_PCREL
-This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.
+This is a 16bit pcrel reloc for the mn10300, offset by two bytes in
+the instruction.
 @end deffn
 @deffn {} BFD_RELOC_386_GOT32
 @deffnx {} BFD_RELOC_386_PLT32
@@ -1077,7 +1008,7 @@ instruction.
 @deffnx {} BFD_RELOC_386_TLS_DESC
 @deffnx {} BFD_RELOC_386_IRELATIVE
 @deffnx {} BFD_RELOC_386_GOT32X
-i386/elf relocations
+i386/elf relocations.
 @end deffn
 @deffn {} BFD_RELOC_X86_64_GOT32
 @deffnx {} BFD_RELOC_X86_64_PLT32
@@ -1110,7 +1041,10 @@ i386/elf relocations
 @deffnx {} BFD_RELOC_X86_64_PLT32_BND
 @deffnx {} BFD_RELOC_X86_64_GOTPCRELX
 @deffnx {} BFD_RELOC_X86_64_REX_GOTPCRELX
-x86-64/elf relocations
+@deffnx {} BFD_RELOC_X86_64_CODE_4_GOTPCRELX
+@deffnx {} BFD_RELOC_X86_64_CODE_4_GOTTPOFF
+@deffnx {} BFD_RELOC_X86_64_CODE_4_GOTPC32_TLSDESC
+x86-64/elf relocations.
 @end deffn
 @deffn {} BFD_RELOC_NS32K_IMM_8
 @deffnx {} BFD_RELOC_NS32K_IMM_16
@@ -1124,11 +1058,11 @@ x86-64/elf relocations
 @deffnx {} BFD_RELOC_NS32K_DISP_8_PCREL
 @deffnx {} BFD_RELOC_NS32K_DISP_16_PCREL
 @deffnx {} BFD_RELOC_NS32K_DISP_32_PCREL
-ns32k relocations
+ns32k relocations.
 @end deffn
 @deffn {} BFD_RELOC_PDP11_DISP_8_PCREL
 @deffnx {} BFD_RELOC_PDP11_DISP_6_PCREL
-PDP11 relocations
+PDP11 relocations.
 @end deffn
 @deffn {} BFD_RELOC_PJ_CODE_HI16
 @deffnx {} BFD_RELOC_PJ_CODE_LO16
@@ -1141,6 +1075,8 @@ Picojava relocs.  Not all of these appea
 @deffn {} BFD_RELOC_PPC_B26
 @deffnx {} BFD_RELOC_PPC_BA26
 @deffnx {} BFD_RELOC_PPC_TOC16
+@deffnx {} BFD_RELOC_PPC_TOC16_LO
+@deffnx {} BFD_RELOC_PPC_TOC16_HI
 @deffnx {} BFD_RELOC_PPC_B16
 @deffnx {} BFD_RELOC_PPC_B16_BRTAKEN
 @deffnx {} BFD_RELOC_PPC_B16_BRNTAKEN
@@ -1187,6 +1123,7 @@ Picojava relocs.  Not all of these appea
 @deffnx {} BFD_RELOC_PPC_VLE_SDAREL_HA16D
 @deffnx {} BFD_RELOC_PPC_16DX_HA
 @deffnx {} BFD_RELOC_PPC_REL16DX_HA
+@deffnx {} BFD_RELOC_PPC_NEG
 @deffnx {} BFD_RELOC_PPC64_HIGHER
 @deffnx {} BFD_RELOC_PPC64_HIGHER_S
 @deffnx {} BFD_RELOC_PPC64_HIGHEST
@@ -1221,6 +1158,7 @@ Picojava relocs.  Not all of these appea
 @deffnx {} BFD_RELOC_PPC64_ADDR64_LOCAL
 @deffnx {} BFD_RELOC_PPC64_ENTRY
 @deffnx {} BFD_RELOC_PPC64_REL24_NOTOC
+@deffnx {} BFD_RELOC_PPC64_REL24_P9NOTOC
 @deffnx {} BFD_RELOC_PPC64_D34
 @deffnx {} BFD_RELOC_PPC64_D34_LO
 @deffnx {} BFD_RELOC_PPC64_D34_HI30
@@ -1243,6 +1181,10 @@ Power(rs6000) and PowerPC relocations.
 @deffn {} BFD_RELOC_PPC_TLS
 @deffnx {} BFD_RELOC_PPC_TLSGD
 @deffnx {} BFD_RELOC_PPC_TLSLD
+@deffnx {} BFD_RELOC_PPC_TLSLE
+@deffnx {} BFD_RELOC_PPC_TLSIE
+@deffnx {} BFD_RELOC_PPC_TLSM
+@deffnx {} BFD_RELOC_PPC_TLSML
 @deffnx {} BFD_RELOC_PPC_DTPMOD
 @deffnx {} BFD_RELOC_PPC_TPREL16
 @deffnx {} BFD_RELOC_PPC_TPREL16_LO
@@ -1270,6 +1212,12 @@ Power(rs6000) and PowerPC relocations.
 @deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_LO
 @deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_HI
 @deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_HA
+@deffnx {} BFD_RELOC_PPC64_TLSGD
+@deffnx {} BFD_RELOC_PPC64_TLSLD
+@deffnx {} BFD_RELOC_PPC64_TLSLE
+@deffnx {} BFD_RELOC_PPC64_TLSIE
+@deffnx {} BFD_RELOC_PPC64_TLSM
+@deffnx {} BFD_RELOC_PPC64_TLSML
 @deffnx {} BFD_RELOC_PPC64_TPREL16_DS
 @deffnx {} BFD_RELOC_PPC64_TPREL16_LO_DS
 @deffnx {} BFD_RELOC_PPC64_TPREL16_HIGH
@@ -1288,15 +1236,15 @@ Power(rs6000) and PowerPC relocations.
 @deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHESTA
 @deffnx {} BFD_RELOC_PPC64_TPREL34
 @deffnx {} BFD_RELOC_PPC64_DTPREL34
-@deffnx {} BFD_RELOC_PPC64_GOT_TLSGD34
-@deffnx {} BFD_RELOC_PPC64_GOT_TLSLD34
-@deffnx {} BFD_RELOC_PPC64_GOT_TPREL34
-@deffnx {} BFD_RELOC_PPC64_GOT_DTPREL34
+@deffnx {} BFD_RELOC_PPC64_GOT_TLSGD_PCREL34
+@deffnx {} BFD_RELOC_PPC64_GOT_TLSLD_PCREL34
+@deffnx {} BFD_RELOC_PPC64_GOT_TPREL_PCREL34
+@deffnx {} BFD_RELOC_PPC64_GOT_DTPREL_PCREL34
 @deffnx {} BFD_RELOC_PPC64_TLS_PCREL
 PowerPC and PowerPC64 thread-local storage relocations.
 @end deffn
 @deffn {} BFD_RELOC_I370_D12
-IBM 370/390 relocations
+IBM 370/390 relocations.
 @end deffn
 @deffn {} BFD_RELOC_CTOR
 The type of reloc used to build a constructor table - at the moment
@@ -1304,8 +1252,8 @@ probably a 32 bit wide absolute relocati
 It generally does map to one of the other relocation types.
 @end deffn
 @deffn {} BFD_RELOC_ARM_PCREL_BRANCH
-ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
-not stored in the instruction.
+ARM 26 bit pc-relative branch.  The lowest two bits must be zero and
+are not stored in the instruction.
 @end deffn
 @deffn {} BFD_RELOC_ARM_PCREL_BLX
 ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
@@ -1318,7 +1266,8 @@ not stored in the instruction.  The 2nd
 field in the instruction.
 @end deffn
 @deffn {} BFD_RELOC_ARM_PCREL_CALL
-ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction.
+ARM 26-bit pc-relative branch for an unconditional BL or BLX
+instruction.
 @end deffn
 @deffn {} BFD_RELOC_ARM_PCREL_JUMP
 ARM 26-bit pc-relative branch for B or conditional BL instruction.
@@ -1370,9 +1319,9 @@ Read-only segment base relative address.
 Data segment base relative address.
 @end deffn
 @deffn {} BFD_RELOC_ARM_TARGET2
-This reloc is used for references to RTTI data from exception handling
-tables.  The actual definition depends on the target.  It may be a
-pc-relative or some form of GOT-indirect relocation.
+This reloc is used for references to RTTI data from exception
+handling tables.  The actual definition depends on the target.  It
+may be a pc-relative or some form of GOT-indirect relocation.
 @end deffn
 @deffn {} BFD_RELOC_ARM_PREL31
 31-bit PC relative address.
@@ -1781,65 +1730,58 @@ ADI Blackfin arithmetic relocation.
 @end deffn
 @deffn {} BFD_RELOC_D10V_10_PCREL_R
 Mitsubishi D10V relocs.
-This is a 10-bit reloc with the right 2 bits
-assumed to be 0.
+This is a 10-bit reloc with the right 2 bits assumed to be 0.
 @end deffn
 @deffn {} BFD_RELOC_D10V_10_PCREL_L
 Mitsubishi D10V relocs.
-This is a 10-bit reloc with the right 2 bits
-assumed to be 0.  This is the same as the previous reloc
-except it is in the left container, i.e.,
-shifted left 15 bits.
+This is a 10-bit reloc with the right 2 bits assumed to be 0.  This
+is the same as the previous reloc except it is in the left
+container, i.e., shifted left 15 bits.
 @end deffn
 @deffn {} BFD_RELOC_D10V_18
-This is an 18-bit reloc with the right 2 bits
-assumed to be 0.
+This is an 18-bit reloc with the right 2 bits assumed to be 0.
 @end deffn
 @deffn {} BFD_RELOC_D10V_18_PCREL
-This is an 18-bit reloc with the right 2 bits
-assumed to be 0.
+This is an 18-bit reloc with the right 2 bits assumed to be 0.
 @end deffn
 @deffn {} BFD_RELOC_D30V_6
 Mitsubishi D30V relocs.
 This is a 6-bit absolute reloc.
 @end deffn
 @deffn {} BFD_RELOC_D30V_9_PCREL
-This is a 6-bit pc-relative reloc with
-the right 3 bits assumed to be 0.
+This is a 6-bit pc-relative reloc with the right 3 bits assumed to
+be 0.
 @end deffn
 @deffn {} BFD_RELOC_D30V_9_PCREL_R
-This is a 6-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.
+This is a 6-bit pc-relative reloc with the right 3 bits assumed to
+be 0.  Same as the previous reloc but on the right side of the
+container.
 @end deffn
 @deffn {} BFD_RELOC_D30V_15
-This is a 12-bit absolute reloc with the
-right 3 bitsassumed to be 0.
+This is a 12-bit absolute reloc with the right 3 bitsassumed to
+be 0.
 @end deffn
 @deffn {} BFD_RELOC_D30V_15_PCREL
-This is a 12-bit pc-relative reloc with
-the right 3 bits assumed to be 0.
+This is a 12-bit pc-relative reloc with the right 3 bits assumed to
+be 0.
 @end deffn
 @deffn {} BFD_RELOC_D30V_15_PCREL_R
-This is a 12-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.
+This is a 12-bit pc-relative reloc with the right 3 bits assumed to
+be 0.  Same as the previous reloc but on the right side of the
+container.
 @end deffn
 @deffn {} BFD_RELOC_D30V_21
-This is an 18-bit absolute reloc with
-the right 3 bits assumed to be 0.
+This is an 18-bit absolute reloc with the right 3 bits assumed to
+be 0.
 @end deffn
 @deffn {} BFD_RELOC_D30V_21_PCREL
-This is an 18-bit pc-relative reloc with
-the right 3 bits assumed to be 0.
+This is an 18-bit pc-relative reloc with the right 3 bits assumed to
+be 0.
 @end deffn
 @deffn {} BFD_RELOC_D30V_21_PCREL_R
-This is an 18-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.
+This is an 18-bit pc-relative reloc with the right 3 bits assumed to
+be 0.  Same as the previous reloc but on the right side of the
+container.
 @end deffn
 @deffn {} BFD_RELOC_D30V_32
 This is a 32-bit absolute reloc.
@@ -1848,13 +1790,9 @@ This is a 32-bit absolute reloc.
 This is a 32-bit pc-relative reloc.
 @end deffn
 @deffn {} BFD_RELOC_DLX_HI16_S
-DLX relocs
-@end deffn
-@deffn {} BFD_RELOC_DLX_LO16
-DLX relocs
-@end deffn
-@deffn {} BFD_RELOC_DLX_JMP26
-DLX relocs
+@deffnx {} BFD_RELOC_DLX_LO16
+@deffnx {} BFD_RELOC_DLX_JMP26
+DLX relocs.
 @end deffn
 @deffn {} BFD_RELOC_M32C_HI8
 @deffnx {} BFD_RELOC_M32C_RL_JUMP
@@ -1867,7 +1805,8 @@ Renesas M32R (formerly Mitsubishi M32R)
 This is a 24 bit absolute address.
 @end deffn
 @deffn {} BFD_RELOC_M32R_10_PCREL
-This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0.
+This is a 10-bit pc-relative reloc with the right 2 bits assumed to
+be 0.
 @end deffn
 @deffn {} BFD_RELOC_M32R_18_PCREL
 This is an 18-bit reloc with the right 2 bits assumed to be 0.
@@ -1887,8 +1826,8 @@ used when the lower 16 bits are treated
 This is a 16-bit reloc containing the lower 16 bits of an address.
 @end deffn
 @deffn {} BFD_RELOC_M32R_SDA16
-This is a 16-bit reloc containing the small data area offset for use in
-add3, load, and store instructions.
+This is a 16-bit reloc containing the small data area offset for use
+in add3, load, and store instructions.
 @end deffn
 @deffn {} BFD_RELOC_M32R_GOT24
 @deffnx {} BFD_RELOC_M32R_26_PLTREL
@@ -1914,10 +1853,12 @@ NDS32 relocs.
 This is a 20 bit absolute address.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_9_PCREL
-This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0.
+This is a 9-bit pc-relative reloc with the right 1 bit assumed to
+be 0.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_WORD_9_PCREL
-This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0.
+This is a 9-bit pc-relative reloc with the right 1 bit assumed to
+be 0.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_15_PCREL
 This is an 15-bit reloc with the right 1 bit assumed to be 0.
@@ -1930,59 +1871,59 @@ This is a 25-bit reloc with the right 1
 @end deffn
 @deffn {} BFD_RELOC_NDS32_HI20
 This is a 20-bit reloc containing the high 20 bits of an address
-used with the lower 12 bits
+used with the lower 12 bits.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_LO12S3
 This is a 12-bit reloc containing the lower 12 bits of an address
-then shift right by 3. This is used with ldi,sdi...
+then shift right by 3.  This is used with ldi,sdi.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_LO12S2
 This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 2. This is used with lwi,swi...
+then shift left by 2.  This is used with lwi,swi.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_LO12S1
 This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 1. This is used with lhi,shi...
+then shift left by 1.  This is used with lhi,shi.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_LO12S0
 This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 0. This is used with lbisbi...
+then shift left by 0.  This is used with lbisbi.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_LO12S0_ORI
 This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 0. This is only used with branch relaxations
+then shift left by 0.  This is only used with branch relaxations.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA15S3
-This is a 15-bit reloc containing the small data area 18-bit signed offset
-and shift left by 3 for use in ldi, sdi...
+This is a 15-bit reloc containing the small data area 18-bit signed
+offset and shift left by 3 for use in ldi, sdi.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA15S2
-This is a 15-bit reloc containing the small data area 17-bit signed offset
-and shift left by 2 for use in lwi, swi...
+This is a 15-bit reloc containing the small data area 17-bit signed
+offset and shift left by 2 for use in lwi, swi.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA15S1
-This is a 15-bit reloc containing the small data area 16-bit signed offset
-and shift left by 1 for use in lhi, shi...
+This is a 15-bit reloc containing the small data area 16-bit signed
+offset and shift left by 1 for use in lhi, shi.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA15S0
-This is a 15-bit reloc containing the small data area 15-bit signed offset
-and shift left by 0 for use in lbi, sbi...
+This is a 15-bit reloc containing the small data area 15-bit signed
+offset and shift left by 0 for use in lbi, sbi.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA16S3
-This is a 16-bit reloc containing the small data area 16-bit signed offset
-and shift left by 3
+This is a 16-bit reloc containing the small data area 16-bit signed
+offset and shift left by 3.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA17S2
-This is a 17-bit reloc containing the small data area 17-bit signed offset
-and shift left by 2 for use in lwi.gp, swi.gp...
+This is a 17-bit reloc containing the small data area 17-bit signed
+offset and shift left by 2 for use in lwi.gp, swi.gp.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA18S1
-This is a 18-bit reloc containing the small data area 18-bit signed offset
-and shift left by 1 for use in lhi.gp, shi.gp...
+This is a 18-bit reloc containing the small data area 18-bit signed
+offset and shift left by 1 for use in lhi.gp, shi.gp.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA19S0
-This is a 19-bit reloc containing the small data area 19-bit signed offset
-and shift left by 0 for use in lbi.gp, sbi.gp...
+This is a 19-bit reloc containing the small data area 19-bit signed
+offset and shift left by 0 for use in lbi.gp, sbi.gp.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_GOT20
 @deffnx {} BFD_RELOC_NDS32_9_PLTREL
@@ -1999,7 +1940,7 @@ and shift left by 0 for use in lbi.gp, s
 @deffnx {} BFD_RELOC_NDS32_GOT_LO12
 @deffnx {} BFD_RELOC_NDS32_GOTPC_HI20
 @deffnx {} BFD_RELOC_NDS32_GOTPC_LO12
-for PIC
+For PIC.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_INSN16
 @deffnx {} BFD_RELOC_NDS32_LABEL
@@ -2021,27 +1962,27 @@ for PIC
 @deffnx {} BFD_RELOC_NDS32_LONGJUMP5
 @deffnx {} BFD_RELOC_NDS32_LONGJUMP6
 @deffnx {} BFD_RELOC_NDS32_LONGJUMP7
-for relax
+For relax.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_PLTREL_HI20
 @deffnx {} BFD_RELOC_NDS32_PLTREL_LO12
 @deffnx {} BFD_RELOC_NDS32_PLT_GOTREL_HI20
 @deffnx {} BFD_RELOC_NDS32_PLT_GOTREL_LO12
-for PIC
+For PIC.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA12S2_DP
 @deffnx {} BFD_RELOC_NDS32_SDA12S2_SP
 @deffnx {} BFD_RELOC_NDS32_LO12S2_DP
 @deffnx {} BFD_RELOC_NDS32_LO12S2_SP
-for floating point
+For floating point.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_DWARF2_OP1
 @deffnx {} BFD_RELOC_NDS32_DWARF2_OP2
 @deffnx {} BFD_RELOC_NDS32_DWARF2_LEB
-for dwarf2 debug_line.
+For dwarf2 debug_line.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_UPDATE_TA
-for eliminate 16-bit instructions
+For eliminating 16-bit instructions.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_PLT_GOTREL_LO20
 @deffnx {} BFD_RELOC_NDS32_PLT_GOTREL_LO15
@@ -2052,14 +1993,15 @@ for eliminate 16-bit instructions
 @deffnx {} BFD_RELOC_NDS32_GOTOFF_LO19
 @deffnx {} BFD_RELOC_NDS32_GOT15S2
 @deffnx {} BFD_RELOC_NDS32_GOT17S2
-for PIC object relaxation
+For PIC object relaxation.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_5
 NDS32 relocs.
 This is a 5 bit absolute address.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_10_UPCREL
-This is a 10-bit unsigned pc-relative reloc with the right 1 bit assumed to be 0.
+This is a 10-bit unsigned pc-relative reloc with the right 1 bit
+assumed to be 0.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_SDA_FP7U2_RELA
 If fp were omitted, fp can used as another gp.
@@ -2082,7 +2024,7 @@ If fp were omitted, fp can used as anoth
 @deffnx {} BFD_RELOC_NDS32_DIFF32
 @deffnx {} BFD_RELOC_NDS32_DIFF_ULEB128
 @deffnx {} BFD_RELOC_NDS32_EMPTY
-relaxation relative relocation types
+Relaxation relative relocation types.
 @end deffn
 @deffn {} BFD_RELOC_NDS32_25_ABS
 This is a 25 bit absolute address.
@@ -2127,10 +2069,10 @@ For TLS.
 For floating load store relaxation.
 @end deffn
 @deffn {} BFD_RELOC_V850_9_PCREL
-This is a 9-bit reloc
+This is a 9-bit reloc.
 @end deffn
 @deffn {} BFD_RELOC_V850_22_PCREL
-This is a 22-bit reloc
+This is a 22-bit reloc.
 @end deffn
 @deffn {} BFD_RELOC_V850_SDA_16_16_OFFSET
 This is a 16 bit offset from the short data area pointer.
@@ -2191,8 +2133,8 @@ Used for relaxing indirect jumps.
 Used to maintain alignment whilst relaxing.
 @end deffn
 @deffn {} BFD_RELOC_V850_LO16_SPLIT_OFFSET
-This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
-instructions.
+This is a variation of BFD_RELOC_LO16 that can be used in v850e
+ld.bu instructions.
 @end deffn
 @deffn {} BFD_RELOC_V850_16_PCREL
 This is a 16-bit reloc.
@@ -2216,49 +2158,29 @@ This is a 16-bit reloc.
 This is a 16-bit reloc.
 @end deffn
 @deffn {} BFD_RELOC_V850_LO16_S1
-Low 16 bits. 16 bit shifted by 1.
+Low 16 bits.  16 bit shifted by 1.
 @end deffn
 @deffn {} BFD_RELOC_V850_CALLT_15_16_OFFSET
 This is a 16 bit offset from the call table base pointer.
 @end deffn
 @deffn {} BFD_RELOC_V850_32_GOTPCREL
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_16_GOT
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_32_GOT
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_22_PLT_PCREL
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_32_PLT_PCREL
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_COPY
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_GLOB_DAT
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_JMP_SLOT
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_RELATIVE
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_16_GOTOFF
-DSO relocations.
-@end deffn
-@deffn {} BFD_RELOC_V850_32_GOTOFF
+@deffnx {} BFD_RELOC_V850_16_GOT
+@deffnx {} BFD_RELOC_V850_32_GOT
+@deffnx {} BFD_RELOC_V850_22_PLT_PCREL
+@deffnx {} BFD_RELOC_V850_32_PLT_PCREL
+@deffnx {} BFD_RELOC_V850_COPY
+@deffnx {} BFD_RELOC_V850_GLOB_DAT
+@deffnx {} BFD_RELOC_V850_JMP_SLOT
+@deffnx {} BFD_RELOC_V850_RELATIVE
+@deffnx {} BFD_RELOC_V850_16_GOTOFF
+@deffnx {} BFD_RELOC_V850_32_GOTOFF
 DSO relocations.
 @end deffn
 @deffn {} BFD_RELOC_V850_CODE
-start code.
+Start code.
 @end deffn
 @deffn {} BFD_RELOC_V850_DATA
-start data in text.
+Start data in text.
 @end deffn
 @deffn {} BFD_RELOC_TIC30_LDP
 This is a 8bit DP reloc for the tms320c30, where the most
@@ -2324,12 +2246,12 @@ TMS320C6000 relocations.
 This is a 48 bit reloc for the FR30 that stores 32 bits.
 @end deffn
 @deffn {} BFD_RELOC_FR30_20
-This is a 32 bit reloc for the FR30 that stores 20 bits split up into
-two sections.
+This is a 32 bit reloc for the FR30 that stores 20 bits split up
+into two sections.
 @end deffn
 @deffn {} BFD_RELOC_FR30_6_IN_4
-This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
-4 bits.
+This is a 16 bit reloc for the FR30 that stores a 6 bit word offset
+in 4 bits.
 @end deffn
 @deffn {} BFD_RELOC_FR30_8_IN_8
 This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
@@ -2448,8 +2370,8 @@ These are relocations for the PUSHJ inst
 These are relocations for the JMP instruction.
 @end deffn
 @deffn {} BFD_RELOC_MMIX_ADDR19
-This is a relocation for a relative address as in a GETA instruction or
-a branch.
+This is a relocation for a relative address as in a GETA instruction
+or a branch.
 @end deffn
 @deffn {} BFD_RELOC_MMIX_ADDR27
 This is a relocation for a relative address as in a JMP instruction.
@@ -2463,12 +2385,12 @@ This is a relocation for an instruction
 register.
 @end deffn
 @deffn {} BFD_RELOC_MMIX_BASE_PLUS_OFFSET
-This is a relocation for two instruction fields holding a register and
-an offset, the equivalent of the relocation.
+This is a relocation for two instruction fields holding a register
+and an offset, the equivalent of the relocation.
 @end deffn
 @deffn {} BFD_RELOC_MMIX_LOCAL
-This relocation is an assertion that the expression is not allocated as
-a global register.  It does not modify contents.
+This relocation is an assertion that the expression is not allocated
+as a global register.  It does not modify contents.
 @end deffn
 @deffn {} BFD_RELOC_AVR_7_PCREL
 This is a 16 bit reloc for the AVR that stores 8 bit pc relative
@@ -2491,12 +2413,13 @@ This is a 16 bit reloc for the AVR that
 of data memory address) into 8 bit immediate value of LDI insn.
 @end deffn
 @deffn {} BFD_RELOC_AVR_HH8_LDI
-This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of program memory address) into 8 bit immediate value of LDI insn.
+This is a 16 bit reloc for the AVR that stores 8 bit value (most
+high 8 bit of program memory address) into 8 bit immediate value of
+LDI insn.
 @end deffn
 @deffn {} BFD_RELOC_AVR_MS8_LDI
-This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of 32 bit value) into 8 bit immediate value of LDI insn.
+This is a 16 bit reloc for the AVR that stores 8 bit value (most
+high 8 bit of 32 bit value) into 8 bit immediate value of LDI insn.
 @end deffn
 @deffn {} BFD_RELOC_AVR_LO8_LDI_NEG
 This is a 16 bit reloc for the AVR that stores negated 8 bit value
@@ -2509,12 +2432,12 @@ SUBI insn.
 @end deffn
 @deffn {} BFD_RELOC_AVR_HH8_LDI_NEG
 This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(most high 8 bit of program memory address) into 8 bit immediate value
-of LDI or SUBI insn.
+(most high 8 bit of program memory address) into 8 bit immediate
+value of LDI or SUBI insn.
 @end deffn
 @deffn {} BFD_RELOC_AVR_MS8_LDI_NEG
-This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
-of 32 bit value) into 8 bit immediate value of LDI insn.
+This is a 16 bit reloc for the AVR that stores negated 8 bit value
+(msb of 32 bit value) into 8 bit immediate value of LDI insn.
 @end deffn
 @deffn {} BFD_RELOC_AVR_LO8_LDI_PM
 This is a 16 bit reloc for the AVR that stores 8 bit value (usually
@@ -2522,9 +2445,9 @@ command address) into 8 bit immediate va
 @end deffn
 @deffn {} BFD_RELOC_AVR_LO8_LDI_GS
 This is a 16 bit reloc for the AVR that stores 8 bit value
-(command address) into 8 bit immediate value of LDI insn. If the address
-is beyond the 128k boundary, the linker inserts a jump stub for this reloc
-in the lower 128k.
+(command address) into 8 bit immediate value of LDI insn. If the
+address is beyond the 128k boundary, the linker inserts a jump stub
+for this reloc in the lower 128k.
 @end deffn
 @deffn {} BFD_RELOC_AVR_HI8_LDI_PM
 This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
@@ -2532,13 +2455,14 @@ of command address) into 8 bit immediate
 @end deffn
 @deffn {} BFD_RELOC_AVR_HI8_LDI_GS
 This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-of command address) into 8 bit immediate value of LDI insn.  If the address
-is beyond the 128k boundary, the linker inserts a jump stub for this reloc
-below 128k.
+of command address) into 8 bit immediate value of LDI insn.  If the
+address is beyond the 128k boundary, the linker inserts a jump stub
+for this reloc below 128k.
 @end deffn
 @deffn {} BFD_RELOC_AVR_HH8_LDI_PM
-This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of command address) into 8 bit immediate value of LDI insn.
+This is a 16 bit reloc for the AVR that stores 8 bit value (most
+high 8 bit of command address) into 8 bit immediate value of LDI
+insn.
 @end deffn
 @deffn {} BFD_RELOC_AVR_LO8_LDI_PM_NEG
 This is a 16 bit reloc for the AVR that stores negated 8 bit value
@@ -2560,27 +2484,27 @@ into 22 bits.
 @end deffn
 @deffn {} BFD_RELOC_AVR_LDI
 This is a 16 bit reloc for the AVR that stores all needed bits
-for absolute addressing with ldi with overflow check to linktime
+for absolute addressing with ldi with overflow check to linktime.
 @end deffn
 @deffn {} BFD_RELOC_AVR_6
 This is a 6 bit reloc for the AVR that stores offset for ldd/std
-instructions
+instructions.
 @end deffn
 @deffn {} BFD_RELOC_AVR_6_ADIW
 This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
-instructions
+instructions.
 @end deffn
 @deffn {} BFD_RELOC_AVR_8_LO
 This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
-in .byte lo8(symbol)
+in .byte lo8(symbol).
 @end deffn
 @deffn {} BFD_RELOC_AVR_8_HI
 This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
-in .byte hi8(symbol)
+in .byte hi8(symbol).
 @end deffn
 @deffn {} BFD_RELOC_AVR_8_HLO
 This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
-in .byte hlo8(symbol)
+in .byte hlo8(symbol).
 @end deffn
 @deffn {} BFD_RELOC_AVR_DIFF8
 @deffnx {} BFD_RELOC_AVR_DIFF16
@@ -2598,11 +2522,11 @@ lds and sts instructions supported only
 @end deffn
 @deffn {} BFD_RELOC_AVR_PORT6
 This is a 6 bit reloc for the AVR that stores an I/O register
-number for the IN and OUT instructions
+number for the IN and OUT instructions.
 @end deffn
 @deffn {} BFD_RELOC_AVR_PORT5
 This is a 5 bit reloc for the AVR that stores an I/O register
-number for the SBIC, SBIS, SBI and CBI instructions
+number for the SBIC, SBIS, SBI and CBI instructions.
 @end deffn
 @deffn {} BFD_RELOC_RISCV_HI20
 @deffnx {} BFD_RELOC_RISCV_PCREL_HI20
@@ -2639,11 +2563,6 @@ number for the SBIC, SBIS, SBI and CBI i
 @deffnx {} BFD_RELOC_RISCV_ALIGN
 @deffnx {} BFD_RELOC_RISCV_RVC_BRANCH
 @deffnx {} BFD_RELOC_RISCV_RVC_JUMP
-@deffnx {} BFD_RELOC_RISCV_RVC_LUI
-@deffnx {} BFD_RELOC_RISCV_GPREL_I
-@deffnx {} BFD_RELOC_RISCV_GPREL_S
-@deffnx {} BFD_RELOC_RISCV_TPREL_I
-@deffnx {} BFD_RELOC_RISCV_TPREL_S
 @deffnx {} BFD_RELOC_RISCV_RELAX
 @deffnx {} BFD_RELOC_RISCV_CFA
 @deffnx {} BFD_RELOC_RISCV_SUB6
@@ -2652,6 +2571,8 @@ number for the SBIC, SBIS, SBI and CBI i
 @deffnx {} BFD_RELOC_RISCV_SET16
 @deffnx {} BFD_RELOC_RISCV_SET32
 @deffnx {} BFD_RELOC_RISCV_32_PCREL
+@deffnx {} BFD_RELOC_RISCV_SET_ULEB128
+@deffnx {} BFD_RELOC_RISCV_SUB_ULEB128
 RISC-V relocations.
 @end deffn
 @deffn {} BFD_RELOC_RL78_NEG8
@@ -2841,15 +2762,15 @@ Long displacement extension.
 STT_GNU_IFUNC relocation.
 @end deffn
 @deffn {} BFD_RELOC_SCORE_GPREL15
-Score relocations
-Low 16 bit for load/store
+Score relocations.
+Low 16 bit for load/store.
 @end deffn
 @deffn {} BFD_RELOC_SCORE_DUMMY2
 @deffnx {} BFD_RELOC_SCORE_JMP
-This is a 24-bit reloc with the right 1 bit assumed to be 0
+This is a 24-bit reloc with the right 1 bit assumed to be 0.
 @end deffn
 @deffn {} BFD_RELOC_SCORE_BRANCH
-This is a 19-bit reloc with the right 1 bit assumed to be 0
+This is a 19-bit reloc with the right 1 bit assumed to be 0.
 @end deffn
 @deffn {} BFD_RELOC_SCORE_IMM30
 This is a 32-bit reloc for 48-bit instructions.
@@ -2858,61 +2779,61 @@ This is a 32-bit reloc for 48-bit instru
 This is a 32-bit reloc for 48-bit instructions.
 @end deffn
 @deffn {} BFD_RELOC_SCORE16_JMP
-This is a 11-bit reloc with the right 1 bit assumed to be 0
+This is a 11-bit reloc with the right 1 bit assumed to be 0.
 @end deffn
 @deffn {} BFD_RELOC_SCORE16_BRANCH
-This is a 8-bit reloc with the right 1 bit assumed to be 0
+This is a 8-bit reloc with the right 1 bit assumed to be 0.
 @end deffn
 @deffn {} BFD_RELOC_SCORE_BCMP
-This is a 9-bit reloc with the right 1 bit assumed to be 0
+This is a 9-bit reloc with the right 1 bit assumed to be 0.
 @end deffn
 @deffn {} BFD_RELOC_SCORE_GOT15
 @deffnx {} BFD_RELOC_SCORE_GOT_LO16
 @deffnx {} BFD_RELOC_SCORE_CALL15
 @deffnx {} BFD_RELOC_SCORE_DUMMY_HI16
-Undocumented Score relocs
+Undocumented Score relocs.
 @end deffn
 @deffn {} BFD_RELOC_IP2K_FR9
-Scenix IP2K - 9-bit register number / data address
+Scenix IP2K - 9-bit register number / data address.
 @end deffn
 @deffn {} BFD_RELOC_IP2K_BANK
-Scenix IP2K - 4-bit register/data bank number
+Scenix IP2K - 4-bit register/data bank number.
 @end deffn
 @deffn {} BFD_RELOC_IP2K_ADDR16CJP
-Scenix IP2K - low 13 bits of instruction word address
+Scenix IP2K - low 13 bits of instruction word address.
 @end deffn
 @deffn {} BFD_RELOC_IP2K_PAGE3
-Scenix IP2K - high 3 bits of instruction word address
+Scenix IP2K - high 3 bits of instruction word address.
 @end deffn
 @deffn {} BFD_RELOC_IP2K_LO8DATA
 @deffnx {} BFD_RELOC_IP2K_HI8DATA
 @deffnx {} BFD_RELOC_IP2K_EX8DATA
-Scenix IP2K - ext/low/high 8 bits of data address
+Scenix IP2K - ext/low/high 8 bits of data address.
 @end deffn
 @deffn {} BFD_RELOC_IP2K_LO8INSN
 @deffnx {} BFD_RELOC_IP2K_HI8INSN
-Scenix IP2K - low/high 8 bits of instruction word address
+Scenix IP2K - low/high 8 bits of instruction word address.
 @end deffn
 @deffn {} BFD_RELOC_IP2K_PC_SKIP
-Scenix IP2K - even/odd PC modifier to modify snb pcl.0
+Scenix IP2K - even/odd PC modifier to modify snb pcl.0.
 @end deffn
 @deffn {} BFD_RELOC_IP2K_TEXT
 Scenix IP2K - 16 bit word address in text section.
 @end deffn
 @deffn {} BFD_RELOC_IP2K_FR_OFFSET
-Scenix IP2K - 7-bit sp or dp offset
+Scenix IP2K - 7-bit sp or dp offset.
 @end deffn
 @deffn {} BFD_RELOC_VPE4KMATH_DATA
 @deffnx {} BFD_RELOC_VPE4KMATH_INSN
-Scenix VPE4K coprocessor - data/insn-space addressing
+Scenix VPE4K coprocessor - data/insn-space addressing.
 @end deffn
 @deffn {} BFD_RELOC_VTABLE_INHERIT
 @deffnx {} BFD_RELOC_VTABLE_ENTRY
 These two relocations are used by the linker to determine which of
 the entries in a C++ virtual function table are actually used.  When
-the --gc-sections option is given, the linker will zero out the entries
-that are not used, so that the code for those functions need not be
-included in the output.
+the --gc-sections option is given, the linker will zero out the
+entries that are not used, so that the code for those functions need
+not be included in the output.
 
 VTABLE_INHERIT is a zero-space relocation used to describe to the
 linker the inheritance tree of a C++ virtual function table.  The
@@ -2920,11 +2841,11 @@ relocation's symbol should be the parent
 relocation should be located at the child vtable.
 
 VTABLE_ENTRY is a zero-space relocation that describes the use of a
-virtual function table entry.  The reloc's symbol should refer to the
-table of the class mentioned in the code.  Off of that base, an offset
-describes the entry that is being used.  For Rela hosts, this offset
-is stored in the reloc's addend.  For Rel hosts, we are forced to put
-this offset in the reloc's section offset.
+virtual function table entry.  The reloc's symbol should refer to
+the table of the class mentioned in the code.  Off of that base, an
+offset describes the entry that is being used.  For Rela hosts, this
+offset is stored in the reloc's addend.  For Rel hosts, we are
+forced to put this offset in the reloc's section offset.
 @end deffn
 @deffn {} BFD_RELOC_IA64_IMM14
 @deffnx {} BFD_RELOC_IA64_IMM22
@@ -3048,7 +2969,8 @@ the symbol.
 Motorola 68HC11 reloc.
 This is a 24-bit reloc that represents the address with a 16-bit
 value and a 8-bit page number.  The symbol address is transformed
-to follow the 16K memory bank of 68HC12 (seen as mapped in the window).
+to follow the 16K memory bank of 68HC12 (seen as mapped in the
+window).
 @end deffn
 @deffn {} BFD_RELOC_M68HC12_5B
 Motorola 68HC12 reloc.
@@ -3066,8 +2988,8 @@ some of them.
 @end deffn
 @deffn {} BFD_RELOC_XGATE_LO16
 Freescale XGATE reloc.
-This is the 16-bit lower part of an address.  It is used for the '16-bit'
-instructions.
+This is the 16-bit lower part of an address.  It is used for the
+'16-bit' instructions.
 @end deffn
 @deffn {} BFD_RELOC_XGATE_GPAGE
 Freescale XGATE reloc.
@@ -3085,13 +3007,13 @@ This is a 10-bit pc-relative reloc.
 @end deffn
 @deffn {} BFD_RELOC_XGATE_IMM8_LO
 Freescale XGATE reloc.
-This is the 16-bit lower part of an address.  It is used for the '16-bit'
-instructions.
+This is the 16-bit lower part of an address.  It is used for the
+'16-bit' instructions.
 @end deffn
 @deffn {} BFD_RELOC_XGATE_IMM8_HI
 Freescale XGATE reloc.
-This is the 16-bit higher part of an address.  It is used for the '16-bit'
-instructions.
+This is the 16-bit higher part of an address.  It is used for the
+'16-bit' instructions.
 @end deffn
 @deffn {} BFD_RELOC_XGATE_IMM3
 Freescale XGATE reloc.
@@ -3123,18 +3045,18 @@ This is a PCREL10 branch.
 @end deffn
 @deffn {} BFD_RELOC_M68HC12_LO8XG
 Motorola 68HC12/XGATE reloc.
-This is the 8 bit low part of an absolute address and immediately precedes
-a matching HI8XG part.
+This is the 8 bit low part of an absolute address and immediately
+precedes a matching HI8XG part.
 @end deffn
 @deffn {} BFD_RELOC_M68HC12_HI8XG
 Motorola 68HC12/XGATE reloc.
-This is the 8 bit high part of an absolute address and immediately follows
-a matching LO8XG part.
+This is the 8 bit high part of an absolute address and immediately
+follows a matching LO8XG part.
 @end deffn
 @deffn {} BFD_RELOC_S12Z_15_PCREL
 Freescale S12Z reloc.
-This is a 15 bit relative address.  If the most significant bits are all zero
-then it may be truncated to 8 bits.
+This is a 15 bit relative address.  If the most significant bits are
+all zero then it may be truncated to 8 bits.
 @end deffn
 @deffn {} BFD_RELOC_CR16_NUM8
 @deffnx {} BFD_RELOC_CR16_NUM16
@@ -3231,7 +3153,8 @@ Relocs used in ELF shared libraries for
 32-bit offset to symbol with PLT entry, relative to GOT.
 @end deffn
 @deffn {} BFD_RELOC_CRIS_32_PLT_PCREL
-32-bit offset to symbol with PLT entry, relative to this relocation.
+32-bit offset to symbol with PLT entry, relative to this
+relocation.
 @end deffn
 @deffn {} BFD_RELOC_CRIS_32_GOT_GD
 @deffnx {} BFD_RELOC_CRIS_16_GOT_GD
@@ -3254,6 +3177,7 @@ Relocs used in TLS code for CRIS.
 @deffnx {} BFD_RELOC_OR1K_SLO13
 @deffnx {} BFD_RELOC_OR1K_GOTPC_HI16
 @deffnx {} BFD_RELOC_OR1K_GOTPC_LO16
+@deffnx {} BFD_RELOC_OR1K_GOT_AHI16
 @deffnx {} BFD_RELOC_OR1K_GOT16
 @deffnx {} BFD_RELOC_OR1K_GOT_PG21
 @deffnx {} BFD_RELOC_OR1K_GOT_LO13
@@ -3305,12 +3229,6 @@ Sony Xstormy16 Relocations.
 @deffn {} BFD_RELOC_RELC
 Self-describing complex relocations.
 @end deffn
-@deffn {} BFD_RELOC_XC16X_PAG
-@deffnx {} BFD_RELOC_XC16X_POF
-@deffnx {} BFD_RELOC_XC16X_SEG
-@deffnx {} BFD_RELOC_XC16X_SOF
-Infineon Relocations.
-@end deffn
 @deffn {} BFD_RELOC_VAX_GLOB_DAT
 @deffnx {} BFD_RELOC_VAX_JMP_SLOT
 @deffnx {} BFD_RELOC_VAX_RELATIVE
@@ -3356,7 +3274,9 @@ Morpho MT - 8 bit immediate relocation.
 @deffnx {} BFD_RELOC_MSP430_ABS_HI16
 @deffnx {} BFD_RELOC_MSP430_PREL31
 @deffnx {} BFD_RELOC_MSP430_SYM_DIFF
-msp430 specific relocation codes
+@deffnx {} BFD_RELOC_MSP430_SET_ULEB128
+@deffnx {} BFD_RELOC_MSP430_SUB_ULEB128
+msp430 specific relocation codes.
 @end deffn
 @deffn {} BFD_RELOC_NIOS2_S16
 @deffnx {} BFD_RELOC_NIOS2_U16
@@ -3431,8 +3351,8 @@ PRU 8-bit unsigned relocation used for t
 @end deffn
 @deffn {} BFD_RELOC_PRU_32_PMEM
 @deffnx {} BFD_RELOC_PRU_16_PMEM
-PRU Program Memory relocations.  Used to convert from byte addressing to
-32-bit word addressing.
+PRU Program Memory relocations.  Used to convert from byte
+addressing to 32-bit word addressing.
 @end deffn
 @deffn {} BFD_RELOC_PRU_GNU_DIFF8
 @deffnx {} BFD_RELOC_PRU_GNU_DIFF16
@@ -3440,12 +3360,12 @@ PRU Program Memory relocations.  Used to
 @deffnx {} BFD_RELOC_PRU_GNU_DIFF16_PMEM
 @deffnx {} BFD_RELOC_PRU_GNU_DIFF32_PMEM
 PRU relocations to mark the difference of two local symbols.
-These are only needed to support linker relaxation and can be ignored
-when not relaxing.  The field is set to the value of the difference
-assuming no relaxation.  The relocation encodes the position of the
-second symbol so the linker can determine whether to adjust the field
-value. The PMEM variants encode the word difference, instead of byte
-difference between symbols.
+These are only needed to support linker relaxation and can be
+ignored when not relaxing.  The field is set to the value of the
+difference assuming no relaxation.  The relocation encodes the
+position of the second symbol so the linker can determine whether to
+adjust the field value.  The PMEM variants encode the word
+difference, instead of byte difference between symbols.
 @end deffn
 @deffn {} BFD_RELOC_IQ2000_OFFSET_16
 @deffnx {} BFD_RELOC_IQ2000_OFFSET_21
@@ -3463,18 +3383,21 @@ to one of its own internal functions or
 Xtensa relocations for ELF shared objects.
 @end deffn
 @deffn {} BFD_RELOC_XTENSA_PLT
-Xtensa relocation used in ELF object files for symbols that may require
-PLT entries.  Otherwise, this is just a generic 32-bit relocation.
+Xtensa relocation used in ELF object files for symbols that may
+require PLT entries.  Otherwise, this is just a generic 32-bit
+relocation.
 @end deffn
 @deffn {} BFD_RELOC_XTENSA_DIFF8
 @deffnx {} BFD_RELOC_XTENSA_DIFF16
 @deffnx {} BFD_RELOC_XTENSA_DIFF32
+Xtensa relocations for backward compatibility.  These have been
+replaced by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF.
 Xtensa relocations to mark the difference of two local symbols.
-These are only needed to support linker relaxation and can be ignored
-when not relaxing.  The field is set to the value of the difference
-assuming no relaxation.  The relocation encodes the position of the
-first symbol so the linker can determine whether to adjust the field
-value.
+These are only needed to support linker relaxation and can be
+ignored when not relaxing.  The field is set to the value of the
+difference assuming no relaxation.  The relocation encodes the
+position of the first symbol so the linker can determine whether to
+adjust the field value.
 @end deffn
 @deffn {} BFD_RELOC_XTENSA_SLOT0_OP
 @deffnx {} BFD_RELOC_XTENSA_SLOT1_OP
@@ -3540,9 +3463,46 @@ BFD_RELOC_XTENSA_ASM_EXPAND.
 @deffnx {} BFD_RELOC_XTENSA_TLS_CALL
 Xtensa TLS relocations.
 @end deffn
+@deffn {} BFD_RELOC_XTENSA_PDIFF8
+@deffnx {} BFD_RELOC_XTENSA_PDIFF16
+@deffnx {} BFD_RELOC_XTENSA_PDIFF32
+@deffnx {} BFD_RELOC_XTENSA_NDIFF8
+@deffnx {} BFD_RELOC_XTENSA_NDIFF16
+@deffnx {} BFD_RELOC_XTENSA_NDIFF32
+Xtensa relocations to mark the difference of two local symbols.
+These are only needed to support linker relaxation and can be
+ignored when not relaxing.  The field is set to the value of the
+difference assuming no relaxation.  The relocation encodes the
+position of the subtracted symbol so the linker can determine
+whether to adjust the field value.  PDIFF relocations are used for
+positive differences, NDIFF relocations are used for negative
+differences.  The difference value is treated as unsigned with these
+relocation types, giving full 8/16 value ranges.
+@end deffn
 @deffn {} BFD_RELOC_Z80_DISP8
 8 bit signed offset in (ix+d) or (iy+d).
 @end deffn
+@deffn {} BFD_RELOC_Z80_BYTE0
+First 8 bits of multibyte (32, 24 or 16 bit) value.
+@end deffn
+@deffn {} BFD_RELOC_Z80_BYTE1
+Second 8 bits of multibyte (32, 24 or 16 bit) value.
+@end deffn
+@deffn {} BFD_RELOC_Z80_BYTE2
+Third 8 bits of multibyte (32 or 24 bit) value.
+@end deffn
+@deffn {} BFD_RELOC_Z80_BYTE3
+Fourth 8 bits of multibyte (32 bit) value.
+@end deffn
+@deffn {} BFD_RELOC_Z80_WORD0
+Lowest 16 bits of multibyte (32 or 24 bit) value.
+@end deffn
+@deffn {} BFD_RELOC_Z80_WORD1
+Highest 16 bits of multibyte (32 or 24 bit) value.
+@end deffn
+@deffn {} BFD_RELOC_Z80_16_BE
+Like BFD_RELOC_16 but big-endian.
+@end deffn
 @deffn {} BFD_RELOC_Z8K_DISP7
 DJNZ offset.
 @end deffn
@@ -3588,8 +3548,8 @@ required.
 Used when referencing a GOT entry.
 @end deffn
 @deffn {} BFD_RELOC_MACH_O_X86_64_GOT_LOAD
-Used when loading a GOT entry with movq.  It is specially marked so that
-the linker could optimize the movq to a leaq if possible.
+Used when loading a GOT entry with movq.  It is specially marked so
+that the linker could optimize the movq to a leaq if possible.
 @end deffn
 @deffn {} BFD_RELOC_MACH_O_X86_64_PCREL32_1
 Same as BFD_RELOC_32_PCREL but with an implicit -1 addend.
@@ -3616,70 +3576,75 @@ Relative offset within page of GOT slot.
 Address of a GOT entry.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_32_LO
-This is a 32 bit reloc for the microblaze that stores the
-low 16 bits of a value
+This is a 32 bit reloc for the microblaze that stores the low 16
+bits of a value.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_32_LO_PCREL
-This is a 32 bit pc-relative reloc for the microblaze that
-stores the low 16 bits of a value
+This is a 32 bit pc-relative reloc for the microblaze that stores
+the low 16 bits of a value.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_32_ROSDA
-This is a 32 bit reloc for the microblaze that stores a
-value relative to the read-only small data area anchor
+This is a 32 bit reloc for the microblaze that stores a value
+relative to the read-only small data area anchor.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_32_RWSDA
-This is a 32 bit reloc for the microblaze that stores a
-value relative to the read-write small data area anchor
+This is a 32 bit reloc for the microblaze that stores a value
+relative to the read-write small data area anchor.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM
-This is a 32 bit reloc for the microblaze to handle
-expressions of the form "Symbol Op Symbol"
+This is a 32 bit reloc for the microblaze to handle expressions of
+the form "Symbol Op Symbol".
+@end deffn
+@deffn {} BFD_RELOC_MICROBLAZE_32_NONE
+This is a 32 bit reloc that stores the 32 bit pc relative value in
+two words (with an imm instruction).  No relocation is done here -
+only used for relaxing.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_NONE
-This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  No relocation is
-done here - only used for relaxing
+This is a 64 bit reloc that stores the 32 bit pc relative value in
+two words (with an imm instruction).  No relocation is done here -
+only used for relaxing.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_GOTPC
-This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-PC-relative GOT offset
+This is a 64 bit reloc that stores the 32 bit pc relative value in
+two words (with an imm instruction).  The relocation is PC-relative
+GOT offset.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_GOT
-This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-GOT offset
+This is a 64 bit reloc that stores the 32 bit pc relative value in
+two words (with an imm instruction).  The relocation is GOT offset.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_PLT
-This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-PC-relative offset into PLT
+This is a 64 bit reloc that stores the 32 bit pc relative value in
+two words (with an imm instruction).  The relocation is PC-relative
+offset into PLT.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_GOTOFF
-This is a 64 bit reloc that stores the 32 bit GOT relative
-value in two words (with an imm instruction).  The relocation is
-relative offset from _GLOBAL_OFFSET_TABLE_
+This is a 64 bit reloc that stores the 32 bit GOT relative value in
+two words (with an imm instruction).  The relocation is relative
+offset from _GLOBAL_OFFSET_TABLE_.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_32_GOTOFF
-This is a 32 bit reloc that stores the 32 bit GOT relative
-value in a word.  The relocation is relative offset from
+This is a 32 bit reloc that stores the 32 bit GOT relative value in
+a word.  The relocation is relative offset from
+_GLOBAL_OFFSET_TABLE_.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_COPY
 This is used to tell the dynamic linker to copy the value out of
 the dynamic object into the runtime process image.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_TLS
-Unused Reloc
+Unused Reloc.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_TLSGD
 This is a 64 bit reloc that stores the 32 bit GOT relative value
-of the GOT TLS GD info entry in two words (with an imm instruction). The
-relocation is GOT offset.
+of the GOT TLS GD info entry in two words (with an imm instruction).
+The relocation is GOT offset.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_TLSLD
 This is a 64 bit reloc that stores the 32 bit GOT relative value
-of the GOT TLS LD info entry in two words (with an imm instruction). The
-relocation is GOT offset.
+of the GOT TLS LD info entry in two words (with an imm instruction).
+The relocation is GOT offset.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_32_TLSDTPMOD
 This is a 32 bit reloc that stores the Module ID to GOT(n).
@@ -3689,25 +3654,125 @@ This is a 32 bit reloc that stores TLS o
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_TLSDTPREL
 This is a 32 bit reloc for storing TLS offset to two words (uses imm
-instruction)
+instruction).
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL
-This is a 64 bit reloc that stores 32-bit thread pointer relative offset
-to two words (uses imm instruction).
+This is a 64 bit reloc that stores 32-bit thread pointer relative
+offset to two words (uses imm instruction).
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_TLSTPREL
-This is a 64 bit reloc that stores 32-bit thread pointer relative offset
-to two words (uses imm instruction).
+This is a 64 bit reloc that stores 32-bit thread pointer relative
+offset to two words (uses imm instruction).
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_TEXTPCREL
-This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-PC-relative offset from start of TEXT.
+This is a 64 bit reloc that stores the 32 bit pc relative value in
+two words (with an imm instruction).  The relocation is PC-relative
+offset from start of TEXT.
 @end deffn
 @deffn {} BFD_RELOC_MICROBLAZE_64_TEXTREL
-This is a 64 bit reloc that stores the 32 bit offset
-value in two words (with an imm instruction).  The relocation is
-relative offset from start of TEXT.
+This is a 64 bit reloc that stores the 32 bit offset value in two
+words (with an imm instruction).  The relocation is relative offset
+from start of TEXT.
+@end deffn
+@deffn {} BFD_RELOC_KVX_RELOC_START
+KVX pseudo relocation code to mark the start of the KVX relocation
+enumerators.  N.B. the order of the enumerators is important as
+several tables in the KVX bfd backend are indexed by these
+enumerators; make sure they are all synced.
+@end deffn
+@deffn {} BFD_RELOC_KVX_NONE
+KVX null relocation code.
+@end deffn
+@deffn {} BFD_RELOC_KVX_16
+@deffnx {} BFD_RELOC_KVX_32
+@deffnx {} BFD_RELOC_KVX_64
+@deffnx {} BFD_RELOC_KVX_S16_PCREL
+@deffnx {} BFD_RELOC_KVX_PCREL17
+@deffnx {} BFD_RELOC_KVX_PCREL27
+@deffnx {} BFD_RELOC_KVX_32_PCREL
+@deffnx {} BFD_RELOC_KVX_S37_PCREL_LO10
+@deffnx {} BFD_RELOC_KVX_S37_PCREL_UP27
+@deffnx {} BFD_RELOC_KVX_S43_PCREL_LO10
+@deffnx {} BFD_RELOC_KVX_S43_PCREL_UP27
+@deffnx {} BFD_RELOC_KVX_S43_PCREL_EX6
+@deffnx {} BFD_RELOC_KVX_S64_PCREL_LO10
+@deffnx {} BFD_RELOC_KVX_S64_PCREL_UP27
+@deffnx {} BFD_RELOC_KVX_S64_PCREL_EX27
+@deffnx {} BFD_RELOC_KVX_64_PCREL
+@deffnx {} BFD_RELOC_KVX_S16
+@deffnx {} BFD_RELOC_KVX_S32_LO5
+@deffnx {} BFD_RELOC_KVX_S32_UP27
+@deffnx {} BFD_RELOC_KVX_S37_LO10
+@deffnx {} BFD_RELOC_KVX_S37_UP27
+@deffnx {} BFD_RELOC_KVX_S37_GOTOFF_LO10
+@deffnx {} BFD_RELOC_KVX_S37_GOTOFF_UP27
+@deffnx {} BFD_RELOC_KVX_S43_GOTOFF_LO10
+@deffnx {} BFD_RELOC_KVX_S43_GOTOFF_UP27
+@deffnx {} BFD_RELOC_KVX_S43_GOTOFF_EX6
+@deffnx {} BFD_RELOC_KVX_32_GOTOFF
+@deffnx {} BFD_RELOC_KVX_64_GOTOFF
+@deffnx {} BFD_RELOC_KVX_32_GOT
+@deffnx {} BFD_RELOC_KVX_S37_GOT_LO10
+@deffnx {} BFD_RELOC_KVX_S37_GOT_UP27
+@deffnx {} BFD_RELOC_KVX_S43_GOT_LO10
+@deffnx {} BFD_RELOC_KVX_S43_GOT_UP27
+@deffnx {} BFD_RELOC_KVX_S43_GOT_EX6
+@deffnx {} BFD_RELOC_KVX_64_GOT
+@deffnx {} BFD_RELOC_KVX_GLOB_DAT
+@deffnx {} BFD_RELOC_KVX_COPY
+@deffnx {} BFD_RELOC_KVX_JMP_SLOT
+@deffnx {} BFD_RELOC_KVX_RELATIVE
+@deffnx {} BFD_RELOC_KVX_S43_LO10
+@deffnx {} BFD_RELOC_KVX_S43_UP27
+@deffnx {} BFD_RELOC_KVX_S43_EX6
+@deffnx {} BFD_RELOC_KVX_S64_LO10
+@deffnx {} BFD_RELOC_KVX_S64_UP27
+@deffnx {} BFD_RELOC_KVX_S64_EX27
+@deffnx {} BFD_RELOC_KVX_S37_GOTADDR_LO10
+@deffnx {} BFD_RELOC_KVX_S37_GOTADDR_UP27
+@deffnx {} BFD_RELOC_KVX_S43_GOTADDR_LO10
+@deffnx {} BFD_RELOC_KVX_S43_GOTADDR_UP27
+@deffnx {} BFD_RELOC_KVX_S43_GOTADDR_EX6
+@deffnx {} BFD_RELOC_KVX_S64_GOTADDR_LO10
+@deffnx {} BFD_RELOC_KVX_S64_GOTADDR_UP27
+@deffnx {} BFD_RELOC_KVX_S64_GOTADDR_EX27
+@deffnx {} BFD_RELOC_KVX_64_DTPMOD
+@deffnx {} BFD_RELOC_KVX_64_DTPOFF
+@deffnx {} BFD_RELOC_KVX_S37_TLS_DTPOFF_LO10
+@deffnx {} BFD_RELOC_KVX_S37_TLS_DTPOFF_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_DTPOFF_LO10
+@deffnx {} BFD_RELOC_KVX_S43_TLS_DTPOFF_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_DTPOFF_EX6
+@deffnx {} BFD_RELOC_KVX_S37_TLS_GD_LO10
+@deffnx {} BFD_RELOC_KVX_S37_TLS_GD_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_GD_LO10
+@deffnx {} BFD_RELOC_KVX_S43_TLS_GD_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_GD_EX6
+@deffnx {} BFD_RELOC_KVX_S37_TLS_LD_LO10
+@deffnx {} BFD_RELOC_KVX_S37_TLS_LD_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_LD_LO10
+@deffnx {} BFD_RELOC_KVX_S43_TLS_LD_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_LD_EX6
+@deffnx {} BFD_RELOC_KVX_64_TPOFF
+@deffnx {} BFD_RELOC_KVX_S37_TLS_IE_LO10
+@deffnx {} BFD_RELOC_KVX_S37_TLS_IE_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_IE_LO10
+@deffnx {} BFD_RELOC_KVX_S43_TLS_IE_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_IE_EX6
+@deffnx {} BFD_RELOC_KVX_S37_TLS_LE_LO10
+@deffnx {} BFD_RELOC_KVX_S37_TLS_LE_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_LE_LO10
+@deffnx {} BFD_RELOC_KVX_S43_TLS_LE_UP27
+@deffnx {} BFD_RELOC_KVX_S43_TLS_LE_EX6
+@deffnx {} BFD_RELOC_KVX_8
+KVX Relocations.
+@end deffn
+@deffn {} BFD_RELOC_KVX_RELOC_END
+KVX pseudo relocation code to mark the end of the KVX relocation
+enumerators that have direct mapping to ELF reloc codes.  There are
+a few more enumerators after this one; those are mainly used by the
+KVX assembler for the internal fixup or to select one of the above
+enumerators.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_RELOC_START
 AArch64 pseudo relocation code to mark the start of the AArch64
@@ -3735,77 +3800,77 @@ PC-relative relocations.  These are equi
 and they were added to assist the indexing of the howto table.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G0
-AArch64 MOV[NZK] instruction with most significant bits 0 to 15
-of an unsigned address/value.
+AArch64 MOV[NZK] instruction with most significant bits 0 to 15 of
+an unsigned address/value.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G0_NC
 AArch64 MOV[NZK] instruction with less significant bits 0 to 15 of
 an address/value.  No overflow checking.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G1
-AArch64 MOV[NZK] instruction with most significant bits 16 to 31
-of an unsigned address/value.
+AArch64 MOV[NZK] instruction with most significant bits 16 to 31 of
+an unsigned address/value.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G1_NC
-AArch64 MOV[NZK] instruction with less significant bits 16 to 31
-of an address/value.  No overflow checking.
+AArch64 MOV[NZK] instruction with less significant bits 16 to 31 of
+an address/value.  No overflow checking.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G2
-AArch64 MOV[NZK] instruction with most significant bits 32 to 47
-of an unsigned address/value.
+AArch64 MOV[NZK] instruction with most significant bits 32 to 47 of
+an unsigned address/value.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G2_NC
-AArch64 MOV[NZK] instruction with less significant bits 32 to 47
-of an address/value.  No overflow checking.
+AArch64 MOV[NZK] instruction with less significant bits 32 to 47 of
+an address/value.  No overflow checking.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G3
-AArch64 MOV[NZK] instruction with most signficant bits 48 to 64
-of a signed or unsigned address/value.
+AArch64 MOV[NZK] instruction with most signficant bits 48 to 64 of a
+signed or unsigned address/value.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G0_S
-AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of a
+signed value.  Changes instruction to MOVZ or MOVN depending on the
 value's sign.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G1_S
-AArch64 MOV[NZ] instruction with most significant bits 16 to 31
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+AArch64 MOV[NZ] instruction with most significant bits 16 to 31 of a
+signed value.  Changes instruction to MOVZ or MOVN depending on the
 value's sign.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_G2_S
-AArch64 MOV[NZ] instruction with most significant bits 32 to 47
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+AArch64 MOV[NZ] instruction with most significant bits 32 to 47 of a
+signed value.  Changes instruction to MOVZ or MOVN depending on the
 value's sign.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_PREL_G0
-AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of a
+signed value.  Changes instruction to MOVZ or MOVN depending on the
 value's sign.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_PREL_G0_NC
-AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of a
+signed value.  Changes instruction to MOVZ or MOVN depending on the
 value's sign.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_PREL_G1
-AArch64 MOVK instruction with most significant bits 16 to 31
-of a signed value.
+AArch64 MOVK instruction with most significant bits 16 to 31 of a
+signed value.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_PREL_G1_NC
-AArch64 MOVK instruction with most significant bits 16 to 31
-of a signed value.
+AArch64 MOVK instruction with most significant bits 16 to 31 of a
+signed value.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_PREL_G2
-AArch64 MOVK instruction with most significant bits 32 to 47
-of a signed value.
+AArch64 MOVK instruction with most significant bits 32 to 47 of a
+signed value.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_PREL_G2_NC
-AArch64 MOVK instruction with most significant bits 32 to 47
-of a signed value.
+AArch64 MOVK instruction with most significant bits 32 to 47 of a
+signed value.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_PREL_G3
-AArch64 MOVK instruction with most significant bits 47 to 63
-of a signed value.
+AArch64 MOVK instruction with most significant bits 47 to 63 of a
+signed value.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_LD_LO19_PCREL
 AArch64 Load Literal instruction, holding a 19 bit pc-relative word
@@ -3813,7 +3878,8 @@ offset.  The lowest two bits must be zer
 instruction, giving a 21 bit signed byte offset.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_ADR_LO21_PCREL
-AArch64 ADR instruction, holding a simple 21 bit pc-relative byte offset.
+AArch64 ADR instruction, holding a simple 21 bit pc-relative byte
+offset.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_ADR_HI21_PCREL
 AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
@@ -3825,8 +3891,8 @@ offset, giving a 4KB aligned page base a
 checking.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_ADD_LO12
-AArch64 ADD immediate instruction, holding bits 0 to 11 of the address.
-Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.
+AArch64 ADD immediate instruction, holding bits 0 to 11 of the
+address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_LDST8_LO12
 AArch64 8-bit load/store instruction, holding bits 0 to 11 of the
@@ -3834,23 +3900,23 @@ address.  Used in conjunction with BFD_R
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TSTBR14
 AArch64 14 bit pc-relative test bit and branch.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 16 bit signed byte offset.
+The lowest two bits must be zero and are not stored in the
+instruction, giving a 16 bit signed byte offset.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_BRANCH19
 AArch64 19 bit pc-relative conditional branch and compare & branch.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 21 bit signed byte offset.
+The lowest two bits must be zero and are not stored in the
+instruction, giving a 21 bit signed byte offset.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_JUMP26
 AArch64 26 bit pc-relative unconditional branch.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 28 bit signed byte offset.
+The lowest two bits must be zero and are not stored in the
+instruction, giving a 28 bit signed byte offset.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_CALL26
 AArch64 26 bit pc-relative unconditional branch and link.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 28 bit signed byte offset.
+The lowest two bits must be zero and are not stored in the
+instruction, giving a 28 bit signed byte offset.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_LDST16_LO12
 AArch64 16-bit load/store instruction, holding bits 0 to 11 of the
@@ -3870,15 +3936,15 @@ address.  Used in conjunction with BFD_R
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_GOT_LD_PREL19
 AArch64 Load Literal instruction, holding a 19 bit PC relative word
-offset of the global offset table entry for a symbol.  The lowest two
-bits must be zero and are not stored in the instruction, giving a 21
-bit signed byte offset.  This relocation type requires signed overflow
-checking.
+offset of the global offset table entry for a symbol.  The lowest
+two bits must be zero and are not stored in the instruction, giving
+a 21 bit signed byte offset.  This relocation type requires signed
+overflow checking.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_ADR_GOT_PAGE
-Get to the page base of the global offset table entry for a symbol as
-part of an ADRP instruction using a 21 bit PC relative value.Used in
-conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.
+Get to the page base of the global offset table entry for a symbol
+as part of an ADRP instruction using a 21 bit PC relative value.
+Used in conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_LD64_GOT_LO12_NC
 Unsigned 12 bit byte offset for 64 bit load/store from the page of
@@ -3895,18 +3961,20 @@ Unsigned 16 bit byte offset for 64 bit l
 for this symbol.  Valid in LP64 ABI only.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_MOVW_GOTOFF_G1
-Unsigned 16 bit byte higher offset for 64 bit load/store from the GOT entry
-for this symbol.  Valid in LP64 ABI only.
+Unsigned 16 bit byte higher offset for 64 bit load/store from the
+GOT entry for this symbol.  Valid in LP64 ABI only.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_LD64_GOTOFF_LO15
 Unsigned 15 bit byte offset for 64 bit load/store from the page of
 the GOT entry for this symbol.  Valid in LP64 ABI only.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14
-Scaled 14 bit byte offset to the page base of the global offset table.
+Scaled 14 bit byte offset to the page base of the global offset
+table.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15
-Scaled 15 bit byte offset to the page base of the global offset table.
+Scaled 15 bit byte offset to the page base of the global offset
+table.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21
 Get to the page base of the global offset table entry for a symbols
@@ -3915,11 +3983,11 @@ relative value.  Used in conjunction wit
 BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSGD_ADR_PREL21
-AArch64 TLS General Dynamic
+AArch64 TLS General Dynamic.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC
-Unsigned 12 bit byte offset to global offset table entry for a symbols
-tls_index structure.  Used in conjunction with
+Unsigned 12 bit byte offset to global offset table entry for a
+symbol's tls_index structure.  Used in conjunction with
 BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC
@@ -3953,11 +4021,12 @@ bit[23:12] of byte offset to module TLS
 Unsigned 12 bit byte offset to module TLS base address.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC
-No overflow check version of BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12.
+No overflow check version of
+BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC
-Unsigned 12 bit byte offset to global offset table entry for a symbols
-tls_index structure.  Used in conjunction with
+Unsigned 12 bit byte offset to global offset table entry for a
+symbol's tls_index structure.  Used in conjunction with
 BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21
@@ -3965,47 +4034,52 @@ GOT entry page address for AArch64 TLS L
 instruction.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_ADR_PREL21
-GOT entry address for AArch64 TLS Local Dynamic, used with ADR instruction.
+GOT entry address for AArch64 TLS Local Dynamic, used with ADR
+instruction.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12
 bit[11:1] of byte offset to module TLS base address, encoded in ldst
 instructions.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no
+overflow check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12
 bit[11:2] of byte offset to module TLS base address, encoded in ldst
 instructions.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no
+overflow check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12
 bit[11:3] of byte offset to module TLS base address, encoded in ldst
 instructions.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no
+overflow check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12
 bit[11:0] of byte offset to module TLS base address, encoded in ldst
 instructions.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no
+overflow check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0
 bit[15:0] of byte offset to module TLS base address.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC
-No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0
+No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1
 bit[31:16] of byte offset to module TLS base address.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC
-No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1
+No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2
 bit[47:32] of byte offset to module TLS base address.
@@ -4039,85 +4113,57 @@ bit[11:1] of byte offset to module TLS b
 instructions.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no
+overflow check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12
 bit[11:2] of byte offset to module TLS base address, encoded in ldst
 instructions.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no
+overflow check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12
 bit[11:3] of byte offset to module TLS base address, encoded in ldst
 instructions.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no
+overflow check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12
 bit[11:0] of byte offset to module TLS base address, encoded in ldst
 instructions.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no overflow
+check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSDESC_LD_PREL19
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_LD64_LO12
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_ADD_LO12
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_OFF_G1
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_LDR
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_ADD
-AArch64 TLS DESC relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC_CALL
-AArch64 TLS DESC relocation.
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_LD64_LO12
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_ADD_LO12
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_OFF_G1
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_LDR
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_ADD
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC_CALL
+AArch64 TLS DESC relocations.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_COPY
-AArch64 TLS relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_GLOB_DAT
-AArch64 TLS relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_JUMP_SLOT
-AArch64 TLS relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_RELATIVE
-AArch64 TLS relocation.
+@deffnx {} BFD_RELOC_AARCH64_GLOB_DAT
+@deffnx {} BFD_RELOC_AARCH64_JUMP_SLOT
+@deffnx {} BFD_RELOC_AARCH64_RELATIVE
+AArch64 DSO relocations.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLS_DTPMOD
-AArch64 TLS relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLS_DTPREL
-AArch64 TLS relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLS_TPREL
-AArch64 TLS relocation.
-@end deffn
-@deffn {} BFD_RELOC_AARCH64_TLSDESC
-AArch64 TLS relocation.
+@deffnx {} BFD_RELOC_AARCH64_TLS_DTPREL
+@deffnx {} BFD_RELOC_AARCH64_TLS_TPREL
+@deffnx {} BFD_RELOC_AARCH64_TLSDESC
+AArch64 TLS relocations.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_IRELATIVE
 AArch64 support for STT_GNU_IFUNC.
@@ -4138,20 +4184,22 @@ AArch64 unspecified load/store instructi
 address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12
-AArch64 pseudo relocation code for TLS local dynamic mode.  It's to be
-used internally by the AArch64 assembler and not (currently) written to
-any object files.
+AArch64 pseudo relocation code for TLS local dynamic mode.  It's to
+be used internally by the AArch64 assembler and not (currently)
+written to any object files.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no overflow
+check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12
 AArch64 pseudo relocation code for TLS local exec mode.  It's to be
-used internally by the AArch64 assembler and not (currently) written to
-any object files.
+used internally by the AArch64 assembler and not (currently) written
+to any object files.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC
-Similar as BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12, but no overflow check.
+Similar to BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12, but no overflow
+check.
 @end deffn
 @deffn {} BFD_RELOC_AARCH64_LD_GOT_LO12_NC
 AArch64 pseudo relocation code to be used internally by the AArch64
@@ -4358,29 +4406,29 @@ Tilera TILEPro Relocations.
 Tilera TILE-Gx Relocations.
 @end deffn
 @deffn {} BFD_RELOC_BPF_64
-@deffnx {} BFD_RELOC_BPF_32
-@deffnx {} BFD_RELOC_BPF_16
-@deffnx {} BFD_RELOC_BPF_DISP16
 @deffnx {} BFD_RELOC_BPF_DISP32
+@deffnx {} BFD_RELOC_BPF_DISPCALL32
+@deffnx {} BFD_RELOC_BPF_DISP16
 Linux eBPF relocations.
 @end deffn
 @deffn {} BFD_RELOC_EPIPHANY_SIMM8
-Adapteva EPIPHANY - 8 bit signed pc-relative displacement
+Adapteva EPIPHANY - 8 bit signed pc-relative displacement.
 @end deffn
 @deffn {} BFD_RELOC_EPIPHANY_SIMM24
-Adapteva EPIPHANY - 24 bit signed pc-relative displacement
+Adapteva EPIPHANY - 24 bit signed pc-relative displacement.
 @end deffn
 @deffn {} BFD_RELOC_EPIPHANY_HIGH
-Adapteva EPIPHANY - 16 most-significant bits of absolute address
+Adapteva EPIPHANY - 16 most-significant bits of absolute address.
 @end deffn
 @deffn {} BFD_RELOC_EPIPHANY_LOW
-Adapteva EPIPHANY - 16 least-significant bits of absolute address
+Adapteva EPIPHANY - 16 least-significant bits of absolute address.
 @end deffn
 @deffn {} BFD_RELOC_EPIPHANY_SIMM11
-Adapteva EPIPHANY - 11 bit signed number - add/sub immediate
+Adapteva EPIPHANY - 11 bit signed number - add/sub immediate.
 @end deffn
 @deffn {} BFD_RELOC_EPIPHANY_IMM11
-Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st displacement)
+Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st
+displacement).
 @end deffn
 @deffn {} BFD_RELOC_EPIPHANY_IMM8
 Adapteva EPIPHANY - 8 bit immediate for 16 bit mov instruction.
@@ -4476,133 +4524,189 @@ C-SKY relocations.
 @deffn {} BFD_RELOC_S12Z_OPR
 S12Z relocations.
 @end deffn
+@deffn {} BFD_RELOC_LARCH_TLS_DTPMOD32
+@deffnx {} BFD_RELOC_LARCH_TLS_DTPREL32
+@deffnx {} BFD_RELOC_LARCH_TLS_DTPMOD64
+@deffnx {} BFD_RELOC_LARCH_TLS_DTPREL64
+@deffnx {} BFD_RELOC_LARCH_TLS_TPREL32
+@deffnx {} BFD_RELOC_LARCH_TLS_TPREL64
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC32
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC64
+@deffnx {} BFD_RELOC_LARCH_MARK_LA
+@deffnx {} BFD_RELOC_LARCH_MARK_PCREL
+@deffnx {} BFD_RELOC_LARCH_SOP_PUSH_PCREL
+@deffnx {} BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE
+@deffnx {} BFD_RELOC_LARCH_SOP_PUSH_DUP
+@deffnx {} BFD_RELOC_LARCH_SOP_PUSH_GPREL
+@deffnx {} BFD_RELOC_LARCH_SOP_PUSH_TLS_TPREL
+@deffnx {} BFD_RELOC_LARCH_SOP_PUSH_TLS_GOT
+@deffnx {} BFD_RELOC_LARCH_SOP_PUSH_TLS_GD
+@deffnx {} BFD_RELOC_LARCH_SOP_PUSH_PLT_PCREL
+@deffnx {} BFD_RELOC_LARCH_SOP_ASSERT
+@deffnx {} BFD_RELOC_LARCH_SOP_NOT
+@deffnx {} BFD_RELOC_LARCH_SOP_SUB
+@deffnx {} BFD_RELOC_LARCH_SOP_SL
+@deffnx {} BFD_RELOC_LARCH_SOP_SR
+@deffnx {} BFD_RELOC_LARCH_SOP_ADD
+@deffnx {} BFD_RELOC_LARCH_SOP_AND
+@deffnx {} BFD_RELOC_LARCH_SOP_IF_ELSE
+@deffnx {} BFD_RELOC_LARCH_SOP_POP_32_S_10_5
+@deffnx {} BFD_RELOC_LARCH_SOP_POP_32_U_10_12
+@deffnx {} BFD_RELOC_LARCH_SOP_POP_32_S_10_12
+@deffnx {} BFD_RELOC_LARCH_SOP_POP_32_S_10_16
+@deffnx {} BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2
+@deffnx {} BFD_RELOC_LARCH_SOP_POP_32_S_5_20
+@deffnx {} BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2
+@deffnx {} BFD_RELOC_LARCH_SOP_POP_32_S_0_10_10_16_S2
+@deffnx {} BFD_RELOC_LARCH_SOP_POP_32_U
+@deffnx {} BFD_RELOC_LARCH_ADD8
+@deffnx {} BFD_RELOC_LARCH_ADD16
+@deffnx {} BFD_RELOC_LARCH_ADD24
+@deffnx {} BFD_RELOC_LARCH_ADD32
+@deffnx {} BFD_RELOC_LARCH_ADD64
+@deffnx {} BFD_RELOC_LARCH_SUB8
+@deffnx {} BFD_RELOC_LARCH_SUB16
+@deffnx {} BFD_RELOC_LARCH_SUB24
+@deffnx {} BFD_RELOC_LARCH_SUB32
+@deffnx {} BFD_RELOC_LARCH_SUB64
+@deffnx {} BFD_RELOC_LARCH_B16
+@deffnx {} BFD_RELOC_LARCH_B21
+@deffnx {} BFD_RELOC_LARCH_B26
+@deffnx {} BFD_RELOC_LARCH_ABS_HI20
+@deffnx {} BFD_RELOC_LARCH_ABS_LO12
+@deffnx {} BFD_RELOC_LARCH_ABS64_LO20
+@deffnx {} BFD_RELOC_LARCH_ABS64_HI12
+@deffnx {} BFD_RELOC_LARCH_PCALA_HI20
+@deffnx {} BFD_RELOC_LARCH_PCALA_LO12
+@deffnx {} BFD_RELOC_LARCH_PCALA64_LO20
+@deffnx {} BFD_RELOC_LARCH_PCALA64_HI12
+@deffnx {} BFD_RELOC_LARCH_GOT_PC_HI20
+@deffnx {} BFD_RELOC_LARCH_GOT_PC_LO12
+@deffnx {} BFD_RELOC_LARCH_GOT64_PC_LO20
+@deffnx {} BFD_RELOC_LARCH_GOT64_PC_HI12
+@deffnx {} BFD_RELOC_LARCH_GOT_HI20
+@deffnx {} BFD_RELOC_LARCH_GOT_LO12
+@deffnx {} BFD_RELOC_LARCH_GOT64_LO20
+@deffnx {} BFD_RELOC_LARCH_GOT64_HI12
+@deffnx {} BFD_RELOC_LARCH_TLS_LE_HI20
+@deffnx {} BFD_RELOC_LARCH_TLS_LE_LO12
+@deffnx {} BFD_RELOC_LARCH_TLS_LE64_LO20
+@deffnx {} BFD_RELOC_LARCH_TLS_LE64_HI12
+@deffnx {} BFD_RELOC_LARCH_TLS_IE_PC_HI20
+@deffnx {} BFD_RELOC_LARCH_TLS_IE_PC_LO12
+@deffnx {} BFD_RELOC_LARCH_TLS_IE64_PC_LO20
+@deffnx {} BFD_RELOC_LARCH_TLS_IE64_PC_HI12
+@deffnx {} BFD_RELOC_LARCH_TLS_IE_HI20
+@deffnx {} BFD_RELOC_LARCH_TLS_IE_LO12
+@deffnx {} BFD_RELOC_LARCH_TLS_IE64_LO20
+@deffnx {} BFD_RELOC_LARCH_TLS_IE64_HI12
+@deffnx {} BFD_RELOC_LARCH_TLS_LD_PC_HI20
+@deffnx {} BFD_RELOC_LARCH_TLS_LD_HI20
+@deffnx {} BFD_RELOC_LARCH_TLS_GD_PC_HI20
+@deffnx {} BFD_RELOC_LARCH_TLS_GD_HI20
+@deffnx {} BFD_RELOC_LARCH_32_PCREL
+@deffnx {} BFD_RELOC_LARCH_RELAX
+@deffnx {} BFD_RELOC_LARCH_DELETE
+@deffnx {} BFD_RELOC_LARCH_ALIGN
+@deffnx {} BFD_RELOC_LARCH_PCREL20_S2
+@deffnx {} BFD_RELOC_LARCH_CFA
+@deffnx {} BFD_RELOC_LARCH_ADD6
+@deffnx {} BFD_RELOC_LARCH_SUB6
+@deffnx {} BFD_RELOC_LARCH_ADD_ULEB128
+@deffnx {} BFD_RELOC_LARCH_SUB_ULEB128
+@deffnx {} BFD_RELOC_LARCH_64_PCREL
+@deffnx {} BFD_RELOC_LARCH_CALL36
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC_PC_HI20
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC_PC_LO12
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC64_PC_LO20
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC64_PC_HI12
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC_HI20
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC_LO12
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC64_LO20
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC64_HI12
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC_LD
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC_CALL
+@deffnx {} BFD_RELOC_LARCH_TLS_LE_HI20_R
+@deffnx {} BFD_RELOC_LARCH_TLS_LE_ADD_R
+@deffnx {} BFD_RELOC_LARCH_TLS_LE_LO12_R
+@deffnx {} BFD_RELOC_LARCH_TLS_LD_PCREL20_S2
+@deffnx {} BFD_RELOC_LARCH_TLS_GD_PCREL20_S2
+@deffnx {} BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2
+LARCH relocations.
+@end deffn
 
 @example
-
 typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
+
 @end example
 @findex bfd_reloc_type_lookup
 @subsubsection @code{bfd_reloc_type_lookup}
-@strong{Synopsis}
-@example
-reloc_howto_type *bfd_reloc_type_lookup
-   (bfd *abfd, bfd_reloc_code_real_type code);
-reloc_howto_type *bfd_reloc_name_lookup
-   (bfd *abfd, const char *reloc_name);
-@end example
-@strong{Description}@*
+@deftypefn {Function} reloc_howto_type *bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code); reloc_howto_type *bfd_reloc_name_lookup (bfd *abfd, const char *reloc_name); 
 Return a pointer to a howto structure which, when
 invoked, will perform the relocation @var{code} on data from the
 architecture noted.
 
+@end deftypefn
 @findex bfd_default_reloc_type_lookup
 @subsubsection @code{bfd_default_reloc_type_lookup}
-@strong{Synopsis}
-@example
-reloc_howto_type *bfd_default_reloc_type_lookup
-   (bfd *abfd, bfd_reloc_code_real_type  code);
-@end example
-@strong{Description}@*
+@deftypefn {Function} reloc_howto_type *bfd_default_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code); 
 Provides a default relocation lookup routine for any architecture.
 
+@end deftypefn
 @findex bfd_get_reloc_code_name
 @subsubsection @code{bfd_get_reloc_code_name}
-@strong{Synopsis}
-@example
-const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code); 
 Provides a printable name for the supplied relocation code.
 Useful mainly for printing error messages.
 
+@end deftypefn
 @findex bfd_generic_relax_section
 @subsubsection @code{bfd_generic_relax_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_relax_section
-   (bfd *abfd,
-    asection *section,
-    struct bfd_link_info *,
-    bfd_boolean *);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_generic_relax_section (bfd *abfd, asection *section, struct bfd_link_info *, bool *); 
 Provides default handling for relaxing for back ends which
 don't do relaxing.
 
+@end deftypefn
 @findex bfd_generic_gc_sections
 @subsubsection @code{bfd_generic_gc_sections}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_gc_sections
-   (bfd *, struct bfd_link_info *);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_generic_gc_sections (bfd *, struct bfd_link_info *); 
 Provides default handling for relaxing for back ends which
 don't do section gc -- i.e., does nothing.
 
+@end deftypefn
 @findex bfd_generic_lookup_section_flags
 @subsubsection @code{bfd_generic_lookup_section_flags}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_lookup_section_flags
-   (struct bfd_link_info *, struct flag_info *, asection *);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_generic_lookup_section_flags (struct bfd_link_info *, struct flag_info *, asection *); 
 Provides default handling for section flags lookup
 -- i.e., does nothing.
 Returns FALSE if the section should be omitted, otherwise TRUE.
 
+@end deftypefn
 @findex bfd_generic_merge_sections
 @subsubsection @code{bfd_generic_merge_sections}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_merge_sections
-   (bfd *, struct bfd_link_info *);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_generic_merge_sections (bfd *, struct bfd_link_info *); 
 Provides default handling for SEC_MERGE section merging for back ends
 which don't have SEC_MERGE support -- i.e., does nothing.
 
+@end deftypefn
 @findex bfd_generic_get_relocated_section_contents
 @subsubsection @code{bfd_generic_get_relocated_section_contents}
-@strong{Synopsis}
-@example
-bfd_byte *bfd_generic_get_relocated_section_contents
-   (bfd *abfd,
-    struct bfd_link_info *link_info,
-    struct bfd_link_order *link_order,
-    bfd_byte *data,
-    bfd_boolean relocatable,
-    asymbol **symbols);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bfd_byte *bfd_generic_get_relocated_section_contents (bfd *abfd, struct bfd_link_info *link_info, struct bfd_link_order *link_order, bfd_byte *data, bool relocatable, asymbol **symbols); 
 Provides default handling of relocation effort for back ends
 which can't be bothered to do it efficiently.
 
+@end deftypefn
 @findex _bfd_generic_set_reloc
 @subsubsection @code{_bfd_generic_set_reloc}
-@strong{Synopsis}
-@example
-void _bfd_generic_set_reloc
-   (bfd *abfd,
-    sec_ptr section,
-    arelent **relptr,
-    unsigned int count);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void _bfd_generic_set_reloc (bfd *abfd, sec_ptr section, arelent **relptr, unsigned int count); 
 Installs a new set of internal relocations in SECTION.
 
+@end deftypefn
 @findex _bfd_unrecognized_reloc
 @subsubsection @code{_bfd_unrecognized_reloc}
-@strong{Synopsis}
-@example
-bfd_boolean _bfd_unrecognized_reloc
-   (bfd * abfd,
-    sec_ptr section,
-    unsigned int r_type);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool _bfd_unrecognized_reloc (bfd * abfd, sec_ptr section, unsigned int r_type); 
 Reports an unrecognized reloc.
 Written as a function in order to reduce code duplication.
 Returns FALSE so that it can be called from a return statement.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/section.texi ./bfd/doc/section.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/section.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/section.texi	2024-02-01 01:50:55.000000000 +0000
@@ -103,25 +103,28 @@ Here is the section structure:
 
 
 @example
-
 typedef struct bfd_section
 @{
   /* The name of the section; the name isn't a copy, the pointer is
      the same as that passed to bfd_make_section.  */
   const char *name;
 
-  /* A unique sequence number.  */
-  unsigned int id;
-
-  /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
-  unsigned int index;
-
   /* The next section in the list belonging to the BFD, or NULL.  */
   struct bfd_section *next;
 
   /* The previous section in the list belonging to the BFD, or NULL.  */
   struct bfd_section *prev;
 
+  /* A unique sequence number.  */
+  unsigned int id;
+
+  /* A unique section number which can be used by assembler to
+     distinguish different sections with the same section name.  */
+  unsigned int section_id;
+
+  /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
+  unsigned int index;
+
   /* The field flags contains attributes of the section. Some
      flags are read in from the object file, and some are
      synthesized from other information.  */
@@ -246,6 +249,10 @@ typedef struct bfd_section
      else up the line will take care of it later.  */
 #define SEC_LINKER_CREATED           0x100000
 
+  /* This section contains a section ID to distinguish different
+     sections with the same section name.  */
+#define SEC_ASSEMBLER_SECTION_ID     0x100000
+
   /* This section should not be subject to garbage collection.
      Also set to inform the linker that this section should not be
      listed in the link map as discarded.  */
@@ -287,9 +294,8 @@ typedef struct bfd_section
      executables or shared objects. This is for COFF only.  */
 #define SEC_COFF_SHARED             0x8000000
 
-  /* This section should be compressed.  This is for ELF linker
-     internal use only.  */
-#define SEC_ELF_COMPRESS            0x8000000
+  /* Indicate that section has the purecode flag set.  */
+#define SEC_ELF_PURECODE            0x8000000
 
   /* When a section with this flag is being linked, then if the size of
      the input section is less than a page, it should not cross a page
@@ -298,9 +304,8 @@ typedef struct bfd_section
      TMS320C54X only.  */
 #define SEC_TIC54X_BLOCK           0x10000000
 
-  /* This section should be renamed.  This is for ELF linker
-     internal use only.  */
-#define SEC_ELF_RENAME             0x10000000
+  /* This section has the SHF_X86_64_LARGE flag.  This is ELF x86-64 only.  */
+#define SEC_ELF_LARGE              0x10000000
 
   /* Conditionally link this section; do not link if there are no
      references found to any symbol in the section.  This is for TI
@@ -319,9 +324,6 @@ typedef struct bfd_section
      when memory read flag isn't set. */
 #define SEC_COFF_NOREAD            0x40000000
 
-  /* Indicate that section has the purecode flag set.  */
-#define SEC_ELF_PURECODE           0x80000000
-
   /*  End of section flags.  */
 
   /* Some internal packed boolean fields.  */
@@ -343,7 +345,8 @@ typedef struct bfd_section
   unsigned int compress_status : 2;
 #define COMPRESS_SECTION_NONE    0
 #define COMPRESS_SECTION_DONE    1
-#define DECOMPRESS_SECTION_SIZED 2
+#define DECOMPRESS_SECTION_ZLIB  2
+#define DECOMPRESS_SECTION_ZSTD  3
 
   /* The following flags are used by the ELF linker. */
 
@@ -359,6 +362,7 @@ typedef struct bfd_section
 #define SEC_INFO_TYPE_JUST_SYMS 4
 #define SEC_INFO_TYPE_TARGET    5
 #define SEC_INFO_TYPE_EH_FRAME_ENTRY 6
+#define SEC_INFO_TYPE_SFRAME  7
 
   /* Nonzero if this section uses RELA relocations, rather than REL.  */
   unsigned int use_rela_p:1;
@@ -406,13 +410,6 @@ typedef struct bfd_section
   /* The compressed size of the section in octets.  */
   bfd_size_type compressed_size;
 
-  /* Relaxation table. */
-  struct relax_table *relax;
-
-  /* Count of used relaxation table entries. */
-  int relax_count;
-
-
   /* If this section is going to be output, then this value is the
      offset in *bytes* into the output section of the first byte in the
      input section (byte ==> smallest addressable unit on the
@@ -425,10 +422,6 @@ typedef struct bfd_section
   /* The output section through which to map on output.  */
   struct bfd_section *output_section;
 
-  /* The alignment requirement of the section, as an exponent of 2 -
-     e.g., 3 aligns to 2^3 (or 8).  */
-  unsigned int alignment_power;
-
   /* If an input section, a pointer to a vector of relocation
      records for the data in this section.  */
   struct reloc_cache_entry *relocation;
@@ -440,6 +433,10 @@ typedef struct bfd_section
   /* The number of relocation records in one of the above.  */
   unsigned reloc_count;
 
+  /* The alignment requirement of the section, as an exponent of 2 -
+     e.g., 3 aligns to 2^3 (or 8).  */
+  unsigned int alignment_power;
+
   /* Information below is back end specific - and not always used
      or updated.  */
 
@@ -457,7 +454,7 @@ typedef struct bfd_section
 
   /* If the SEC_IN_MEMORY flag is set, this points to the actual
      contents.  */
-  unsigned char *contents;
+  bfd_byte *contents;
 
   /* Attached line number information.  */
   alent *lineno;
@@ -495,206 +492,23 @@ typedef struct bfd_section
   /* Early in the link process, map_head and map_tail are used to build
      a list of input sections attached to an output section.  Later,
      output sections use these fields for a list of bfd_link_order
-     structs.  */
+     structs.  The linked_to_symbol_name field is for ELF assembler
+     internal use.  */
   union @{
     struct bfd_link_order *link_order;
     struct bfd_section *s;
+    const char *linked_to_symbol_name;
   @} map_head, map_tail;
-@} asection;
-
-/* Relax table contains information about instructions which can
-   be removed by relaxation -- replacing a long address with a
-   short address.  */
-struct relax_table @{
-  /* Address where bytes may be deleted. */
-  bfd_vma addr;
-
-  /* Number of bytes to be deleted.  */
-  int size;
-@};
-
-static inline const char *
-bfd_section_name (const asection *sec)
-@{
-  return sec->name;
-@}
-
-static inline bfd_size_type
-bfd_section_size (const asection *sec)
-@{
-  return sec->size;
-@}
 
-static inline bfd_vma
-bfd_section_vma (const asection *sec)
-@{
-  return sec->vma;
-@}
-
-static inline bfd_vma
-bfd_section_lma (const asection *sec)
-@{
-  return sec->lma;
-@}
+  /* Points to the output section this section is already assigned to,
+     if any.  This is used when support for non-contiguous memory
+     regions is enabled.  */
+  struct bfd_section *already_assigned;
 
-static inline unsigned int
-bfd_section_alignment (const asection *sec)
-@{
-  return sec->alignment_power;
-@}
+  /* Explicitly specified section type, if non-zero.  */
+  unsigned int type;
 
-static inline flagword
-bfd_section_flags (const asection *sec)
-@{
-  return sec->flags;
-@}
-
-static inline void *
-bfd_section_userdata (const asection *sec)
-@{
-  return sec->userdata;
-@}
-static inline bfd_boolean
-bfd_is_com_section (const asection *sec)
-@{
-  return (sec->flags & SEC_IS_COMMON) != 0;
-@}
-
-/* Note: the following are provided as inline functions rather than macros
-   because not all callers use the return value.  A macro implementation
-   would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
-   compilers will complain about comma expressions that have no effect.  */
-static inline bfd_boolean
-bfd_set_section_userdata (asection *sec, void *val)
-@{
-  sec->userdata = val;
-  return TRUE;
-@}
-
-static inline bfd_boolean
-bfd_set_section_vma (asection *sec, bfd_vma val)
-@{
-  sec->vma = sec->lma = val;
-  sec->user_set_vma = TRUE;
-  return TRUE;
-@}
-
-static inline bfd_boolean
-bfd_set_section_lma (asection *sec, bfd_vma val)
-@{
-  sec->lma = val;
-  return TRUE;
-@}
-
-static inline bfd_boolean
-bfd_set_section_alignment (asection *sec, unsigned int val)
-@{
-  sec->alignment_power = val;
-  return TRUE;
-@}
-
-/* These sections are global, and are managed by BFD.  The application
-   and target back end are not permitted to change the values in
-   these sections.  */
-extern asection _bfd_std_section[4];
-
-#define BFD_ABS_SECTION_NAME "*ABS*"
-#define BFD_UND_SECTION_NAME "*UND*"
-#define BFD_COM_SECTION_NAME "*COM*"
-#define BFD_IND_SECTION_NAME "*IND*"
-
-/* Pointer to the common section.  */
-#define bfd_com_section_ptr (&_bfd_std_section[0])
-/* Pointer to the undefined section.  */
-#define bfd_und_section_ptr (&_bfd_std_section[1])
-/* Pointer to the absolute section.  */
-#define bfd_abs_section_ptr (&_bfd_std_section[2])
-/* Pointer to the indirect section.  */
-#define bfd_ind_section_ptr (&_bfd_std_section[3])
-
-static inline bfd_boolean
-bfd_is_und_section (const asection *sec)
-@{
-  return sec == bfd_und_section_ptr;
-@}
-
-static inline bfd_boolean
-bfd_is_abs_section (const asection *sec)
-@{
-  return sec == bfd_abs_section_ptr;
-@}
-
-static inline bfd_boolean
-bfd_is_ind_section (const asection *sec)
-@{
-  return sec == bfd_ind_section_ptr;
-@}
-
-static inline bfd_boolean
-bfd_is_const_section (const asection *sec)
-@{
-  return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr;
-@}
-
-/* Return TRUE if input section SEC has been discarded.  */
-static inline bfd_boolean
-discarded_section (const asection *sec)
-@{
-  return (!bfd_is_abs_section (sec)
-          && bfd_is_abs_section (sec->output_section)
-          && sec->sec_info_type != SEC_INFO_TYPE_MERGE
-          && sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS);
-@}
-
-#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS)                   \
-  /* name, id,  index, next, prev, flags, user_set_vma,            */  \
-  @{  NAME, IDX, 0,     NULL, NULL, FLAGS, 0,                           \
-                                                                       \
-  /* linker_mark, linker_has_input, gc_mark, decompress_status,    */  \
-     0,           0,                1,       0,                        \
-                                                                       \
-  /* segment_mark, sec_info_type, use_rela_p,                      */  \
-     0,            0,             0,                                   \
-                                                                       \
-  /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   */  \
-     0,        0,        0,        0,        0,        0,              \
-                                                                       \
-  /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */  \
-     0,   0,   0,    0,       0,               0,     0,               \
-                                                                       \
-  /* output_offset, output_section, alignment_power,               */  \
-     0,             &SEC,           0,                                 \
-                                                                       \
-  /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
-     NULL,       NULL,        0,           0,       0,                 \
-                                                                       \
-  /* line_filepos, userdata, contents, lineno, lineno_count,       */  \
-     0,            NULL,     NULL,     NULL,   0,                      \
-                                                                       \
-  /* entsize, kept_section, moving_line_filepos,                    */ \
-     0,       NULL,          0,                                        \
-                                                                       \
-  /* target_index, used_by_bfd, constructor_chain, owner,          */  \
-     0,            NULL,        NULL,              NULL,               \
-                                                                       \
-  /* symbol,                    symbol_ptr_ptr,                    */  \
-     (struct bfd_symbol *) SYM, &SEC.symbol,                           \
-                                                                       \
-  /* map_head, map_tail                                            */  \
-     @{ NULL @}, @{ NULL @}                                                \
-    @}
-
-/* We use a macro to initialize the static asymbol structures because
-   traditional C does not permit us to initialize a union member while
-   gcc warns if we don't initialize it.
-   the_bfd, name, value, attr, section [, udata]  */
-#ifdef __STDC__
-#define GLOBAL_SYM_INIT(NAME, SECTION) \
-  @{ 0, NAME, 0, BSF_SECTION_SYM, SECTION, @{ 0 @}@}
-#else
-#define GLOBAL_SYM_INIT(NAME, SECTION) \
-  @{ 0, NAME, 0, BSF_SECTION_SYM, SECTION @}
-#endif
+@} asection;
 
 @end example
 
@@ -704,58 +518,38 @@ These are the functions exported by the
 
 @findex bfd_section_list_clear
 @subsubsection @code{bfd_section_list_clear}
-@strong{Synopsis}
-@example
-void bfd_section_list_clear (bfd *);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_section_list_clear (bfd *); 
 Clears the section list, and also resets the section count and
 hash table entries.
 
+@end deftypefn
 @findex bfd_get_section_by_name
 @subsubsection @code{bfd_get_section_by_name}
-@strong{Synopsis}
-@example
-asection *bfd_get_section_by_name (bfd *abfd, const char *name);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_get_section_by_name (bfd *abfd, const char *name); 
 Return the most recently created section attached to @var{abfd}
 named @var{name}.  Return NULL if no such section exists.
 
+@end deftypefn
 @findex bfd_get_next_section_by_name
 @subsubsection @code{bfd_get_next_section_by_name}
-@strong{Synopsis}
-@example
-asection *bfd_get_next_section_by_name (bfd *ibfd, asection *sec);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_get_next_section_by_name (bfd *ibfd, asection *sec); 
 Given @var{sec} is a section returned by @code{bfd_get_section_by_name},
 return the next most recently created section attached to the same
 BFD with the same name, or if no such section exists in the same BFD and
 IBFD is non-NULL, the next section with the same name in any input
 BFD following IBFD.  Return NULL on finding no section.
 
+@end deftypefn
 @findex bfd_get_linker_section
 @subsubsection @code{bfd_get_linker_section}
-@strong{Synopsis}
-@example
-asection *bfd_get_linker_section (bfd *abfd, const char *name);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_get_linker_section (bfd *abfd, const char *name); 
 Return the linker created section attached to @var{abfd}
 named @var{name}.  Return NULL if no such section exists.
 
+@end deftypefn
 @findex bfd_get_section_by_name_if
 @subsubsection @code{bfd_get_section_by_name_if}
-@strong{Synopsis}
-@example
-asection *bfd_get_section_by_name_if
-   (bfd *abfd,
-    const char *name,
-    bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
-    void *obj);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_get_section_by_name_if (bfd *abfd, const char *name, bool (*func) (bfd *abfd, asection *sect, void *obj), void *obj); 
 Call the provided function @var{func} for each section
 attached to the BFD @var{abfd} whose name matches @var{name},
 passing @var{obj} as an argument. The function will be called
@@ -768,27 +562,20 @@ as if by
 It returns the first section for which @var{func} returns true,
 otherwise @code{NULL}.
 
+@end deftypefn
 @findex bfd_get_unique_section_name
 @subsubsection @code{bfd_get_unique_section_name}
-@strong{Synopsis}
-@example
-char *bfd_get_unique_section_name
-   (bfd *abfd, const char *templat, int *count);
-@end example
-@strong{Description}@*
+@deftypefn {Function} char *bfd_get_unique_section_name (bfd *abfd, const char *templat, int *count); 
 Invent a section name that is unique in @var{abfd} by tacking
 a dot and a digit suffix onto the original @var{templat}.  If
 @var{count} is non-NULL, then it specifies the first number
 tried as a suffix to generate a unique name.  The value
 pointed to by @var{count} will be incremented in this case.
 
+@end deftypefn
 @findex bfd_make_section_old_way
 @subsubsection @code{bfd_make_section_old_way}
-@strong{Synopsis}
-@example
-asection *bfd_make_section_old_way (bfd *abfd, const char *name);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_make_section_old_way (bfd *abfd, const char *name); 
 Create a new empty section called @var{name}
 and attach it to the end of the chain of sections for the
 BFD @var{abfd}. An attempt to create a section with a name which
@@ -809,14 +596,10 @@ If output has already started for this B
 If memory allocation fails.
 @end itemize
 
+@end deftypefn
 @findex bfd_make_section_anyway_with_flags
 @subsubsection @code{bfd_make_section_anyway_with_flags}
-@strong{Synopsis}
-@example
-asection *bfd_make_section_anyway_with_flags
-   (bfd *abfd, const char *name, flagword flags);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_make_section_anyway_with_flags (bfd *abfd, const char *name, flagword flags); 
 Create a new empty section called @var{name} and attach it to the end of
 the chain of sections for @var{abfd}.  Create a new section even if there
 is already a section with that name.  Also set the attributes of the
@@ -831,13 +614,10 @@ Return @code{NULL} and set @code{bfd_err
 @code{bfd_error_no_memory} - If memory allocation fails.
 @end itemize
 
+@end deftypefn
 @findex bfd_make_section_anyway
 @subsubsection @code{bfd_make_section_anyway}
-@strong{Synopsis}
-@example
-asection *bfd_make_section_anyway (bfd *abfd, const char *name);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_make_section_anyway (bfd *abfd, const char *name); 
 Create a new empty section called @var{name} and attach it to the end of
 the chain of sections for @var{abfd}.  Create a new section even if there
 is already a section with that name.
@@ -851,39 +631,29 @@ Return @code{NULL} and set @code{bfd_err
 @code{bfd_error_no_memory} - If memory allocation fails.
 @end itemize
 
+@end deftypefn
 @findex bfd_make_section_with_flags
 @subsubsection @code{bfd_make_section_with_flags}
-@strong{Synopsis}
-@example
-asection *bfd_make_section_with_flags
-   (bfd *, const char *name, flagword flags);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_make_section_with_flags (bfd *, const char *name, flagword flags); 
 Like @code{bfd_make_section_anyway}, but return @code{NULL} (without calling
 bfd_set_error ()) without changing the section chain if there is already a
 section named @var{name}.  Also set the attributes of the new section to
 the value @var{flags}.  If there is an error, return @code{NULL} and set
 @code{bfd_error}.
 
+@end deftypefn
 @findex bfd_make_section
 @subsubsection @code{bfd_make_section}
-@strong{Synopsis}
-@example
-asection *bfd_make_section (bfd *, const char *name);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_make_section (bfd *, const char *name); 
 Like @code{bfd_make_section_anyway}, but return @code{NULL} (without calling
 bfd_set_error ()) without changing the section chain if there is already a
 section named @var{name}.  If there is an error, return @code{NULL} and set
 @code{bfd_error}.
 
+@end deftypefn
 @findex bfd_set_section_flags
 @subsubsection @code{bfd_set_section_flags}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_section_flags (asection *sec, flagword flags);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_section_flags (asection *sec, flagword flags); 
 Set the attributes of the section @var{sec} to the value @var{flags}.
 Return @code{TRUE} on success, @code{FALSE} on error.  Possible error
 returns are:
@@ -897,26 +667,16 @@ requested. For example, a .bss section i
 have the @code{SEC_HAS_CONTENTS} field set.
 @end itemize
 
+@end deftypefn
 @findex bfd_rename_section
 @subsubsection @code{bfd_rename_section}
-@strong{Synopsis}
-@example
-void bfd_rename_section
-   (asection *sec, const char *newname);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_rename_section (asection *sec, const char *newname); 
 Rename section @var{sec} to @var{newname}.
 
+@end deftypefn
 @findex bfd_map_over_sections
 @subsubsection @code{bfd_map_over_sections}
-@strong{Synopsis}
-@example
-void bfd_map_over_sections
-   (bfd *abfd,
-    void (*func) (bfd *abfd, asection *sect, void *obj),
-    void *obj);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_map_over_sections (bfd *abfd, void (*func) (bfd *abfd, asection *sect, void *obj), void *obj); 
 Call the provided function @var{func} for each section
 attached to the BFD @var{abfd}, passing @var{obj} as an
 argument. The function will be called as if by
@@ -934,16 +694,10 @@ alternative would be to use a loop:
              func (abfd, p, ...)
 @end example
 
+@end deftypefn
 @findex bfd_sections_find_if
 @subsubsection @code{bfd_sections_find_if}
-@strong{Synopsis}
-@example
-asection *bfd_sections_find_if
-   (bfd *abfd,
-    bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
-    void *obj);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asection *bfd_sections_find_if (bfd *abfd, bool (*operation) (bfd *abfd, asection *sect, void *obj), void *obj); 
 Call the provided function @var{operation} for each section
 attached to the BFD @var{abfd}, passing @var{obj} as an
 argument. The function will be called as if by
@@ -954,13 +708,10 @@ argument. The function will be called as
 
 It returns the first section for which @var{operation} returns true.
 
+@end deftypefn
 @findex bfd_set_section_size
 @subsubsection @code{bfd_set_section_size}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_section_size (asection *sec, bfd_size_type val);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_section_size (asection *sec, bfd_size_type val); 
 Set @var{sec} to the size @var{val}. If the operation is
 ok, then @code{TRUE} is returned, else @code{FALSE}.
 
@@ -972,15 +723,10 @@ Possible error returns:
 Writing has started to the BFD, so setting the size is invalid.
 @end itemize
 
+@end deftypefn
 @findex bfd_set_section_contents
 @subsubsection @code{bfd_set_section_contents}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_section_contents
-   (bfd *abfd, asection *section, const void *data,
-    file_ptr offset, bfd_size_type count);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_section_contents (bfd *abfd, asection *section, const void *data, file_ptr offset, bfd_size_type count); 
 Sets the contents of the section @var{section} in BFD
 @var{abfd} to the data starting in memory at @var{location}.
 The data is written to the output section starting at offset
@@ -1006,15 +752,10 @@ and some more too.
 This routine is front end to the back end function
 @code{_bfd_set_section_contents}.
 
+@end deftypefn
 @findex bfd_get_section_contents
 @subsubsection @code{bfd_get_section_contents}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_get_section_contents
-   (bfd *abfd, asection *section, void *location, file_ptr offset,
-    bfd_size_type count);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_get_section_contents (bfd *abfd, asection *section, void *location, file_ptr offset, bfd_size_type count); 
 Read data from @var{section} in BFD @var{abfd}
 into memory starting at @var{location}. The data is read at an
 offset of @var{offset} from the start of the input section,
@@ -1026,25 +767,19 @@ flag set are requested or if the section
 with zeroes. If no errors occur, @code{TRUE} is returned, else
 @code{FALSE}.
 
+@end deftypefn
 @findex bfd_malloc_and_get_section
 @subsubsection @code{bfd_malloc_and_get_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_malloc_and_get_section
-   (bfd *abfd, asection *section, bfd_byte **buf);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_malloc_and_get_section (bfd *abfd, asection *section, bfd_byte **buf); 
 Read all data from @var{section} in BFD @var{abfd}
 into a buffer, *@var{buf}, malloc'd by this function.
+Return @code{true} on success, @code{false} on failure in which
+case *@var{buf} will be NULL.
 
+@end deftypefn
 @findex bfd_copy_private_section_data
 @subsubsection @code{bfd_copy_private_section_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_copy_private_section_data
-   (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_copy_private_section_data (bfd *ibfd, asection *isec, bfd *obfd, asection *osec); 
 Copy private section information from @var{isec} in the BFD
 @var{ibfd} to the section @var{osec} in the BFD @var{obfd}.
 Return @code{TRUE} on success, @code{FALSE} on error.  Possible error
@@ -1062,30 +797,30 @@ Not enough memory exists to create priva
                  (ibfd, isection, obfd, osection))
 @end example
 
+@end deftypefn
 @findex bfd_generic_is_group_section
 @subsubsection @code{bfd_generic_is_group_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_generic_is_group_section (bfd *, const asection *sec); 
 Returns TRUE if @var{sec} is a member of a group.
 
+@end deftypefn
 @findex bfd_generic_group_name
 @subsubsection @code{bfd_generic_group_name}
-@strong{Synopsis}
-@example
-const char *bfd_generic_group_name (bfd *, const asection *sec);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const char *bfd_generic_group_name (bfd *, const asection *sec); 
 Returns group name if @var{sec} is a member of a group.
 
+@end deftypefn
 @findex bfd_generic_discard_group
 @subsubsection @code{bfd_generic_discard_group}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_generic_discard_group (bfd *abfd, asection *group); 
 Remove all members of @var{group} from the output.
 
+@end deftypefn
+@findex _bfd_section_size_insane
+@subsubsection @code{_bfd_section_size_insane}
+@deftypefn {Function} bool _bfd_section_size_insane (bfd *abfd, asection *sec); 
+Returns true if the given section has a size that indicates
+it cannot be read from file.  Return false if the size is OK
+or* this function can't say one way or the other.
+
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/syms.texi ./bfd/doc/syms.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/syms.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/syms.texi	2024-02-01 01:50:55.000000000 +0000
@@ -139,7 +139,6 @@ An @code{asymbol} has the form:
 
 
 @example
-
 typedef struct bfd_symbol
 @{
   /* A pointer to the BFD which owns the symbol. This information
@@ -266,6 +265,9 @@ typedef struct bfd_symbol
      with this name and type in use.  BSF_OBJECT must also be set.  */
 #define BSF_GNU_UNIQUE          (1 << 23)
 
+  /* This section symbol should be included in the symbol table.  */
+#define BSF_SECTION_SYM_USED    (1 << 24)
+
   flagword flags;
 
   /* A pointer to the section to which this symbol is
@@ -291,7 +293,6 @@ asymbol;
 
 @findex bfd_get_symtab_upper_bound
 @subsubsection @code{bfd_get_symtab_upper_bound}
-@strong{Description}@*
 Return the number of bytes required to store a vector of pointers
 to @code{asymbols} for all the symbols in the BFD @var{abfd},
 including a terminal NULL pointer. If there are no symbols in
@@ -304,21 +305,14 @@ the BFD, then return 0.  If an error occ
 
 @findex bfd_is_local_label
 @subsubsection @code{bfd_is_local_label}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_is_local_label (bfd *abfd, asymbol *sym); 
 Return TRUE if the given symbol @var{sym} in the BFD @var{abfd} is
 a compiler generated local label, else return FALSE.
 
+@end deftypefn
 @findex bfd_is_local_label_name
 @subsubsection @code{bfd_is_local_label_name}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_is_local_label_name (bfd *abfd, const char *name); 
 Return TRUE if a symbol with the name @var{name} in the BFD
 @var{abfd} is a compiler generated local label, else return
 FALSE.  This just checks whether the name has the form of a
@@ -329,13 +323,10 @@ local label.
 
 @end example
 
+@end deftypefn
 @findex bfd_is_target_special_symbol
 @subsubsection @code{bfd_is_target_special_symbol}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_is_target_special_symbol (bfd *abfd, asymbol *sym); 
 Return TRUE iff a symbol @var{sym} in the BFD @var{abfd} is something
 special to the particular target represented by the BFD.  Such symbols
 should normally not be mentioned to the user.
@@ -345,9 +336,9 @@ should normally not be mentioned to the
 
 @end example
 
+@end deftypefn
 @findex bfd_canonicalize_symtab
 @subsubsection @code{bfd_canonicalize_symtab}
-@strong{Description}@*
 Read the symbols from the BFD @var{abfd}, and fills in
 the vector @var{location} with pointers to the symbols and
 a trailing NULL.
@@ -361,29 +352,21 @@ including the NULL.
 
 @findex bfd_set_symtab
 @subsubsection @code{bfd_set_symtab}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_symtab
-   (bfd *abfd, asymbol **location, unsigned int count);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_symtab (bfd *abfd, asymbol **location, unsigned int count); 
 Arrange that when the output BFD @var{abfd} is closed,
 the table @var{location} of @var{count} pointers to symbols
 will be written.
 
+@end deftypefn
 @findex bfd_print_symbol_vandf
 @subsubsection @code{bfd_print_symbol_vandf}
-@strong{Synopsis}
-@example
-void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
-@end example
-@strong{Description}@*
+@deftypefn {Function} void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol); 
 Print the value and flags of the @var{symbol} supplied to the
 stream @var{file}.
 
+@end deftypefn
 @findex bfd_make_empty_symbol
 @subsubsection @code{bfd_make_empty_symbol}
-@strong{Description}@*
 Create a new @code{asymbol} structure for the BFD @var{abfd}
 and return a pointer to it.
 
@@ -399,68 +382,49 @@ information, and will cause problems lat
 
 @findex _bfd_generic_make_empty_symbol
 @subsubsection @code{_bfd_generic_make_empty_symbol}
-@strong{Synopsis}
-@example
-asymbol *_bfd_generic_make_empty_symbol (bfd *);
-@end example
-@strong{Description}@*
+@deftypefn {Function} asymbol *_bfd_generic_make_empty_symbol (bfd *); 
 Create a new @code{asymbol} structure for the BFD @var{abfd}
 and return a pointer to it.  Used by core file routines,
 binary back-end and anywhere else where no private info
 is needed.
 
+@end deftypefn
 @findex bfd_make_debug_symbol
 @subsubsection @code{bfd_make_debug_symbol}
-@strong{Description}@*
 Create a new @code{asymbol} structure for the BFD @var{abfd},
-to be used as a debugging symbol.  Further details of its use have
-yet to be worked out.
+to be used as a debugging symbol.
 @example
-#define bfd_make_debug_symbol(abfd,ptr,size) \
-       BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
+#define bfd_make_debug_symbol(abfd) \
+       BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd))
 
 @end example
 
 @findex bfd_decode_symclass
 @subsubsection @code{bfd_decode_symclass}
-@strong{Description}@*
+@deftypefn {Function} int bfd_decode_symclass (asymbol *symbol); 
 Return a character corresponding to the symbol
 class of @var{symbol}, or '?' for an unknown class.
 
-@strong{Synopsis}
-@example
-int bfd_decode_symclass (asymbol *symbol);
-@end example
+@end deftypefn
 @findex bfd_is_undefined_symclass
 @subsubsection @code{bfd_is_undefined_symclass}
-@strong{Description}@*
+@deftypefn {Function} bool bfd_is_undefined_symclass (int symclass); 
 Returns non-zero if the class symbol returned by
 bfd_decode_symclass represents an undefined symbol.
 Returns zero otherwise.
 
-@strong{Synopsis}
-@example
-bfd_boolean bfd_is_undefined_symclass (int symclass);
-@end example
+@end deftypefn
 @findex bfd_symbol_info
 @subsubsection @code{bfd_symbol_info}
-@strong{Description}@*
+@deftypefn {Function} void bfd_symbol_info (asymbol *symbol, symbol_info *ret); 
 Fill in the basic info about symbol that nm needs.
 Additional info may be added by the back-ends after
 calling this function.
 
-@strong{Synopsis}
-@example
-void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
-@end example
+@end deftypefn
 @findex bfd_copy_private_symbol_data
 @subsubsection @code{bfd_copy_private_symbol_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_copy_private_symbol_data
-   (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_copy_private_symbol_data (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym); 
 Copy private symbol information from @var{isym} in the BFD
 @var{ibfd} to the symbol @var{osym} in the BFD @var{obfd}.
 Return @code{TRUE} on success, @code{FALSE} on error.  Possible error
@@ -479,3 +443,4 @@ Not enough memory exists to create priva
 
 @end example
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/targets.texi ./bfd/doc/targets.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/doc/targets.texi	2019-12-11 01:51:19.000000000 +0000
+++ ./bfd/doc/targets.texi	2024-02-01 01:50:55.000000000 +0000
@@ -1,7 +1,6 @@
 @section Targets
 
 
-@strong{Description}@*
 Each port of BFD to a different machine requires the creation
 of a target back end. All the back end provides to the root
 part of BFD is a structure containing pointers to functions
@@ -60,7 +59,6 @@ type is tried to see if it recognizes th
 @subsection bfd_target
 
 
-@strong{Description}@*
 This structure contains everything that BFD knows about a
 target. It includes things like its byte order, name, and which
 routines to call to do various operations.
@@ -102,6 +100,11 @@ For operations which index on the BFD fo
    (bfd_assert (__FILE__,__LINE__), NULL))
 #endif
 
+/* Defined to TRUE if unused section symbol should be kept.  */
+#ifndef TARGET_KEEP_UNUSED_SECTION_SYMBOLS
+#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true
+#endif
+
 @end example
 This is the structure which defines the type of BFD this is.  The
 @code{xvec} member of the struct @code{bfd} itself points here.  Each
@@ -111,41 +114,9 @@ defines one of these.
 FIXME, these names should be rationalised with the names of
 the entry points which call them. Too bad we can't have one
 macro to define them both!
-@example
-enum bfd_flavour
-@{
-  /* N.B. Update bfd_flavour_name if you change this.  */
-  bfd_target_unknown_flavour,
-  bfd_target_aout_flavour,
-  bfd_target_coff_flavour,
-  bfd_target_ecoff_flavour,
-  bfd_target_xcoff_flavour,
-  bfd_target_elf_flavour,
-  bfd_target_tekhex_flavour,
-  bfd_target_srec_flavour,
-  bfd_target_verilog_flavour,
-  bfd_target_ihex_flavour,
-  bfd_target_som_flavour,
-  bfd_target_os9k_flavour,
-  bfd_target_versados_flavour,
-  bfd_target_msdos_flavour,
-  bfd_target_ovax_flavour,
-  bfd_target_evax_flavour,
-  bfd_target_mmo_flavour,
-  bfd_target_mach_o_flavour,
-  bfd_target_pef_flavour,
-  bfd_target_pef_xlib_flavour,
-  bfd_target_sym_flavour
-@};
 
-enum bfd_endian @{ BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN @};
-
-/* Forward declaration.  */
-typedef struct bfd_link_info _bfd_link_info;
-
-/* Forward declaration.  */
-typedef struct flag_info flag_info;
 
+@example
 typedef struct bfd_target
 @{
   /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */
@@ -183,12 +154,15 @@ typedef struct bfd_target
      possible targets when more than one target matches.  */
   unsigned char match_priority;
 
+ /* TRUE if unused section symbols should be kept.  */
+  bool keep_unused_section_symbols;
+
   /* Entries for byte swapping for data. These are different from the
      other entry points, since they don't take a BFD as the first argument.
      Certain other handlers could do the same.  */
-  bfd_uint64_t   (*bfd_getx64) (const void *);
-  bfd_int64_t    (*bfd_getx_signed_64) (const void *);
-  void           (*bfd_putx64) (bfd_uint64_t, void *);
+  uint64_t       (*bfd_getx64) (const void *);
+  int64_t        (*bfd_getx_signed_64) (const void *);
+  void           (*bfd_putx64) (uint64_t, void *);
   bfd_vma        (*bfd_getx32) (const void *);
   bfd_signed_vma (*bfd_getx_signed_32) (const void *);
   void           (*bfd_putx32) (bfd_vma, void *);
@@ -197,9 +171,9 @@ typedef struct bfd_target
   void           (*bfd_putx16) (bfd_vma, void *);
 
   /* Byte swapping for the headers.  */
-  bfd_uint64_t   (*bfd_h_getx64) (const void *);
-  bfd_int64_t    (*bfd_h_getx_signed_64) (const void *);
-  void           (*bfd_h_putx64) (bfd_uint64_t, void *);
+  uint64_t       (*bfd_h_getx64) (const void *);
+  int64_t        (*bfd_h_getx_signed_64) (const void *);
+  void           (*bfd_h_putx64) (uint64_t, void *);
   bfd_vma        (*bfd_h_getx32) (const void *);
   bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
   void           (*bfd_h_putx32) (bfd_vma, void *);
@@ -210,21 +184,20 @@ typedef struct bfd_target
   /* Format dependent routines: these are vectors of entry points
      within the target vector structure, one for each format to check.  */
 
-  /* Check the format of a file being read.  Return a @code{bfd_target *} or zero.  */
-  const struct bfd_target *
-              (*_bfd_check_format[bfd_type_end]) (bfd *);
+  /* Check the format of a file being read.  Return a @code{bfd_cleanup} on
+     success or zero on failure.  */
+  bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *);
 
   /* Set the format of a file being written.  */
-  bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
+  bool (*_bfd_set_format[bfd_type_end]) (bfd *);
 
   /* Write cached information into a file being written, at @code{bfd_close}.  */
-  bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
+  bool (*_bfd_write_contents[bfd_type_end]) (bfd *);
 
 @end example
 The general target vector.  These vectors are initialized using the
 BFD_JUMP_TABLE macros.
 @example
-
   /* Generic entry points.  */
 #define BFD_JUMP_TABLE_GENERIC(NAME) \
   NAME##_close_and_cleanup, \
@@ -234,17 +207,16 @@ BFD_JUMP_TABLE macros.
   NAME##_get_section_contents_in_window
 
   /* Called when the BFD is being closed to do any necessary cleanup.  */
-  bfd_boolean (*_close_and_cleanup) (bfd *);
+  bool (*_close_and_cleanup) (bfd *);
   /* Ask the BFD to free all cached information.  */
-  bfd_boolean (*_bfd_free_cached_info) (bfd *);
+  bool (*_bfd_free_cached_info) (bfd *);
   /* Called when a new section is created.  */
-  bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
+  bool (*_new_section_hook) (bfd *, sec_ptr);
   /* Read the contents of a section.  */
-  bfd_boolean (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr,
-                                            bfd_size_type);
-  bfd_boolean (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr,
-                                                      bfd_window *, file_ptr,
-                                                      bfd_size_type);
+  bool (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr,
+                                     bfd_size_type);
+  bool (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr, bfd_window *,
+                                               file_ptr, bfd_size_type);
 
   /* Entry points to copy private data.  */
 #define BFD_JUMP_TABLE_COPY(NAME) \
@@ -259,34 +231,32 @@ BFD_JUMP_TABLE macros.
 
   /* Called to copy BFD general private data from one object file
      to another.  */
-  bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
+  bool (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
   /* Called to merge BFD general private data from one object file
      to a common output file when linking.  */
-  bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
   /* Called to initialize BFD private section data from one object file
      to another.  */
 #define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
        BFD_SEND (obfd, _bfd_init_private_section_data, \
                  (ibfd, isec, obfd, osec, link_info))
-  bfd_boolean (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *,
-                                                 sec_ptr,
-                                                 struct bfd_link_info *);
+  bool (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr,
+                                          struct bfd_link_info *);
   /* Called to copy BFD private section data from one object file
      to another.  */
-  bfd_boolean (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *,
-                                                 sec_ptr);
+  bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr);
   /* Called to copy BFD private symbol data from one symbol
      to another.  */
-  bfd_boolean (*_bfd_copy_private_symbol_data) (bfd *, asymbol *, bfd *,
-                                                asymbol *);
+  bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
+                                         bfd *, asymbol *);
   /* Called to copy BFD private header data from one object file
      to another.  */
-  bfd_boolean (*_bfd_copy_private_header_data) (bfd *, bfd *);
+  bool (*_bfd_copy_private_header_data) (bfd *, bfd *);
   /* Called to set private backend flags.  */
-  bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
+  bool (*_bfd_set_private_flags) (bfd *, flagword);
 
   /* Called to print private BFD data.  */
-  bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
+  bool (*_bfd_print_private_bfd_data) (bfd *, void *);
 
   /* Core file entry points.  */
 #define BFD_JUMP_TABLE_CORE(NAME) \
@@ -295,10 +265,10 @@ BFD_JUMP_TABLE macros.
   NAME##_core_file_matches_executable_p, \
   NAME##_core_file_pid
 
-  char *      (*_core_file_failing_command) (bfd *);
-  int         (*_core_file_failing_signal) (bfd *);
-  bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
-  int         (*_core_file_pid) (bfd *);
+  char *(*_core_file_failing_command) (bfd *);
+  int   (*_core_file_failing_signal) (bfd *);
+  bool  (*_core_file_matches_executable_p) (bfd *, bfd *);
+  int   (*_core_file_pid) (bfd *);
 
   /* Archive entry points.  */
 #define BFD_JUMP_TABLE_ARCHIVE(NAME) \
@@ -314,22 +284,21 @@ BFD_JUMP_TABLE macros.
   NAME##_generic_stat_arch_elt, \
   NAME##_update_armap_timestamp
 
-  bfd_boolean (*_bfd_slurp_armap) (bfd *);
-  bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
-  bfd_boolean (*_bfd_construct_extended_name_table) (bfd *, char **,
-                                                     bfd_size_type *,
-                                                     const char **);
-  void        (*_bfd_truncate_arname) (bfd *, const char *, char *);
-  bfd_boolean (*write_armap) (bfd *, unsigned int, struct orl *,
-                              unsigned int, int);
-  void *      (*_bfd_read_ar_hdr_fn) (bfd *);
-  bfd_boolean (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
-  bfd *       (*openr_next_archived_file) (bfd *, bfd *);
+  bool (*_bfd_slurp_armap) (bfd *);
+  bool (*_bfd_slurp_extended_name_table) (bfd *);
+  bool (*_bfd_construct_extended_name_table) (bfd *, char **,
+                                              bfd_size_type *,
+                                              const char **);
+  void (*_bfd_truncate_arname) (bfd *, const char *, char *);
+  bool (*write_armap) (bfd *, unsigned, struct orl *, unsigned, int);
+  void *(*_bfd_read_ar_hdr_fn) (bfd *);
+  bool (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
+  bfd *(*openr_next_archived_file) (bfd *, bfd *);
 #define bfd_get_elt_at_index(b,i) \
        BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
-  bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex);
-  int         (*_bfd_stat_arch_elt) (bfd *, struct stat *);
-  bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
+  bfd *(*_bfd_get_elt_at_index) (bfd *, symindex);
+  int  (*_bfd_stat_arch_elt) (bfd *, struct stat *);
+  bool (*_bfd_update_armap_timestamp) (bfd *);
 
   /* Entry points used for symbols.  */
 #define BFD_JUMP_TABLE_SYMBOLS(NAME) \
@@ -343,52 +312,59 @@ BFD_JUMP_TABLE macros.
   NAME##_bfd_is_target_special_symbol, \
   NAME##_get_lineno, \
   NAME##_find_nearest_line, \
+  NAME##_find_nearest_line_with_alt, \
   NAME##_find_line, \
   NAME##_find_inliner_info, \
   NAME##_bfd_make_debug_symbol, \
   NAME##_read_minisymbols, \
   NAME##_minisymbol_to_symbol
 
-  long        (*_bfd_get_symtab_upper_bound) (bfd *);
-  long        (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **);
+  long (*_bfd_get_symtab_upper_bound) (bfd *);
+  long (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **);
   struct bfd_symbol *
-              (*_bfd_make_empty_symbol) (bfd *);
-  void        (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *,
-                                    bfd_print_symbol_type);
+       (*_bfd_make_empty_symbol) (bfd *);
+  void (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *,
+                             bfd_print_symbol_type);
 #define bfd_print_symbol(b,p,s,e) \
        BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
-  void        (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *,
-                                       symbol_info *);
+  void  (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *, symbol_info *);
 #define bfd_get_symbol_info(b,p,e) \
        BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
-  const char *(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *,
-                                                 bfd_boolean *);
-#define bfd_get_symbol_version_string(b,s,h) \
-       BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h))
-  bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
-  bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
-  alent *     (*_get_lineno) (bfd *, struct bfd_symbol *);
-  bfd_boolean (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **,
-                                         struct bfd_section *, bfd_vma,
-                                         const char **, const char **,
-                                         unsigned int *, unsigned int *);
-  bfd_boolean (*_bfd_find_line) (bfd *, struct bfd_symbol **,
-                                 struct bfd_symbol *, const char **,
-                                 unsigned int *);
-  bfd_boolean (*_bfd_find_inliner_info)
+  const char *
+       (*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *,
+                                          bool, bool *);
+#define bfd_get_symbol_version_string(b,s,p,h) \
+       BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h))
+  bool (*_bfd_is_local_label_name) (bfd *, const char *);
+  bool (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
+  alent *
+       (*_get_lineno) (bfd *, struct bfd_symbol *);
+  bool (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **,
+                                  struct bfd_section *, bfd_vma,
+                                  const char **, const char **,
+                                  unsigned int *, unsigned int *);
+  bool (*_bfd_find_nearest_line_with_alt) (bfd *, const char *,
+                                           struct bfd_symbol **,
+                                           struct bfd_section *, bfd_vma,
+                                           const char **, const char **,
+                                           unsigned int *, unsigned int *);
+  bool (*_bfd_find_line) (bfd *, struct bfd_symbol **,
+                          struct bfd_symbol *, const char **,
+                          unsigned int *);
+  bool (*_bfd_find_inliner_info)
     (bfd *, const char **, const char **, unsigned int *);
  /* Back-door to allow format-aware applications to create debug symbols
     while using BFD for everything else.  Currently used by the assembler
     when creating COFF files.  */
-  asymbol *   (*_bfd_make_debug_symbol) (bfd *, void *, unsigned long size);
+  asymbol *
+       (*_bfd_make_debug_symbol) (bfd *);
 #define bfd_read_minisymbols(b, d, m, s) \
        BFD_SEND (b, _read_minisymbols, (b, d, m, s))
-  long        (*_read_minisymbols) (bfd *, bfd_boolean, void **,
-                                    unsigned int *);
+  long (*_read_minisymbols) (bfd *, bool, void **, unsigned int *);
 #define bfd_minisymbol_to_symbol(b, d, m, f) \
        BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
-  asymbol *   (*_minisymbol_to_symbol) (bfd *, bfd_boolean, const void *,
-                                        asymbol *);
+  asymbol *
+       (*_minisymbol_to_symbol) (bfd *, bool, const void *, asymbol *);
 
   /* Routines for relocs.  */
 #define BFD_JUMP_TABLE_RELOCS(NAME) \
@@ -398,25 +374,25 @@ BFD_JUMP_TABLE macros.
   NAME##_bfd_reloc_type_lookup, \
   NAME##_bfd_reloc_name_lookup
 
-  long        (*_get_reloc_upper_bound) (bfd *, sec_ptr);
-  long        (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **,
-                                          struct bfd_symbol **);
-  void        (*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int);
+  long (*_get_reloc_upper_bound) (bfd *, sec_ptr);
+  long (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **,
+                                   struct bfd_symbol **);
+  void (*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int);
   /* See documentation on reloc types.  */
   reloc_howto_type *
-              (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+       (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
   reloc_howto_type *
-              (*reloc_name_lookup) (bfd *, const char *);
+       (*reloc_name_lookup) (bfd *, const char *);
 
   /* Routines used when writing an object file.  */
 #define BFD_JUMP_TABLE_WRITE(NAME) \
   NAME##_set_arch_mach, \
   NAME##_set_section_contents
 
-  bfd_boolean (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture,
+  bool (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture,
                                      unsigned long);
-  bfd_boolean (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *,
-                                            file_ptr, bfd_size_type);
+  bool (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *,
+                                     file_ptr, bfd_size_type);
 
   /* Routines used by the linker.  */
 #define BFD_JUMP_TABLE_LINK(NAME) \
@@ -441,72 +417,73 @@ BFD_JUMP_TABLE macros.
   NAME##_bfd_link_hide_symbol, \
   NAME##_bfd_define_start_stop
 
-  int         (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
-  bfd_byte *  (*_bfd_get_relocated_section_contents) (bfd *,
-                                                      struct bfd_link_info *,
-                                                      struct bfd_link_order *,
-                                                      bfd_byte *, bfd_boolean,
-                                                      struct bfd_symbol **);
+  int  (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
+  bfd_byte *
+       (*_bfd_get_relocated_section_contents) (bfd *,
+                                               struct bfd_link_info *,
+                                               struct bfd_link_order *,
+                                               bfd_byte *, bool,
+                                               struct bfd_symbol **);
 
-  bfd_boolean (*_bfd_relax_section) (bfd *, struct bfd_section *,
-                                     struct bfd_link_info *, bfd_boolean *);
+  bool (*_bfd_relax_section) (bfd *, struct bfd_section *,
+                              struct bfd_link_info *, bool *);
 
   /* Create a hash table for the linker.  Different backends store
      different information in this table.  */
   struct bfd_link_hash_table *
-              (*_bfd_link_hash_table_create) (bfd *);
+       (*_bfd_link_hash_table_create) (bfd *);
 
   /* Add symbols from this object file into the hash table.  */
-  bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
 
   /* Indicate that we are only retrieving symbol values from this section.  */
-  void        (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
+  void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
 
   /* Copy the symbol type and other attributes for a linker script
      assignment of one symbol to another.  */
 #define bfd_copy_link_hash_symbol_type(b, t, f) \
        BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
-  void        (*_bfd_copy_link_hash_symbol_type) (bfd *,
-                                                  struct bfd_link_hash_entry *,
-                                                  struct bfd_link_hash_entry *);
+  void (*_bfd_copy_link_hash_symbol_type) (bfd *,
+                                           struct bfd_link_hash_entry *,
+                                           struct bfd_link_hash_entry *);
 
   /* Do a link based on the link_order structures attached to each
      section of the BFD.  */
-  bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_final_link) (bfd *, struct bfd_link_info *);
 
   /* Should this section be split up into smaller pieces during linking.  */
-  bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
+  bool (*_bfd_link_split_section) (bfd *, struct bfd_section *);
 
   /* Check the relocations in the bfd for validity.  */
-  bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
+  bool (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
 
   /* Remove sections that are not referenced from the output.  */
-  bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
 
   /* Sets the bitmask of allowed and disallowed section flags.  */
-  bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
-                                            struct flag_info *, asection *);
+  bool (*_bfd_lookup_section_flags) (struct bfd_link_info *,
+                                     struct flag_info *, asection *);
 
   /* Attempt to merge SEC_MERGE sections.  */
-  bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
+  bool (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
 
   /* Is this section a member of a group?  */
-  bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
+  bool (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
 
   /* The group name, if section is a member of a group.  */
   const char *(*_bfd_group_name) (bfd *, const struct bfd_section *);
 
   /* Discard members of a group.  */
-  bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
+  bool (*_bfd_discard_group) (bfd *, struct bfd_section *);
 
   /* Check if SEC has been already linked during a reloceatable or
      final link.  */
-  bfd_boolean (*_section_already_linked) (bfd *, asection *,
-                                          struct bfd_link_info *);
+  bool (*_section_already_linked) (bfd *, asection *,
+                                   struct bfd_link_info *);
 
   /* Define a common symbol.  */
-  bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
-                                            struct bfd_link_hash_entry *);
+  bool (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
+                                     struct bfd_link_hash_entry *);
 
   /* Hide a symbol.  */
   void (*_bfd_link_hide_symbol) (bfd *, struct bfd_link_info *,
@@ -514,8 +491,8 @@ BFD_JUMP_TABLE macros.
 
   /* Define a __start, __stop, .startof. or .sizeof. symbol.  */
   struct bfd_link_hash_entry *
-              (*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
-                                         asection *);
+       (*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
+                                  asection *);
 
   /* Routines to handle dynamic symbols and relocs.  */
 #define BFD_JUMP_TABLE_DYNAMIC(NAME) \
@@ -526,18 +503,18 @@ BFD_JUMP_TABLE macros.
   NAME##_canonicalize_dynamic_reloc
 
   /* Get the amount of memory required to hold the dynamic symbols.  */
-  long        (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
+  long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
   /* Read in the dynamic symbols.  */
-  long        (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **);
+  long (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **);
   /* Create synthetized symbols.  */
-  long        (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **,
-                                            long, struct bfd_symbol **,
-                                            struct bfd_symbol **);
+  long (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **,
+                                     long, struct bfd_symbol **,
+                                     struct bfd_symbol **);
   /* Get the amount of memory required to hold the dynamic relocs.  */
-  long        (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
+  long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
   /* Read in the dynamic relocs.  */
-  long        (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **,
-                                                  struct bfd_symbol **);
+  long (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **,
+                                           struct bfd_symbol **);
 
 @end example
 A pointer to an alternative bfd_target in case the current one is not
@@ -573,31 +550,31 @@ bfd_applicable_file_flags (const bfd *ab
   return abfd->xvec->object_flags;
 @}
 
-static inline bfd_boolean
+static inline bool
 bfd_family_coff (const bfd *abfd)
 @{
   return (bfd_get_flavour (abfd) == bfd_target_coff_flavour
           || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
 @}
 
-static inline bfd_boolean
+static inline bool
 bfd_big_endian (const bfd *abfd)
 @{
   return abfd->xvec->byteorder == BFD_ENDIAN_BIG;
 @}
-static inline bfd_boolean
+static inline bool
 bfd_little_endian (const bfd *abfd)
 @{
   return abfd->xvec->byteorder == BFD_ENDIAN_LITTLE;
 @}
 
-static inline bfd_boolean
+static inline bool
 bfd_header_big_endian (const bfd *abfd)
 @{
   return abfd->xvec->header_byteorder == BFD_ENDIAN_BIG;
 @}
 
-static inline bfd_boolean
+static inline bool
 bfd_header_little_endian (const bfd *abfd)
 @{
   return abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE;
@@ -623,26 +600,37 @@ bfd_asymbol_flavour (const asymbol *sy)
   return sy->the_bfd->xvec->flavour;
 @}
 
+static inline bool
+bfd_keep_unused_section_symbols (const bfd *abfd)
+@{
+  return abfd->xvec->keep_unused_section_symbols;
+@}
+
 @end example
+@findex _bfd_per_xvec_warn
+@subsubsection @code{_bfd_per_xvec_warn}
+@deftypefn {Function} struct per_xvec_message **_bfd_per_xvec_warn (const bfd_target *, size_t); 
+Return a location for the given target xvec to use for
+warnings specific to that target.  If TARG is NULL, returns
+the array of per_xvec_message pointers, otherwise if ALLOC is
+zero, returns a pointer to a pointer to the list of messages
+for TARG, otherwise (both TARG and ALLOC non-zero), allocates
+a new   per_xvec_message with space for a string of ALLOC
+bytes and returns a pointer to a pointer to it.  May return a
+pointer to a NULL pointer on allocation failure.
 
+@end deftypefn
 @findex bfd_set_default_target
 @subsubsection @code{bfd_set_default_target}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_default_target (const char *name);
-@end example
-@strong{Description}@*
+@deftypefn {Function} bool bfd_set_default_target (const char *name); 
 Set the default target vector to use when recognizing a BFD.
 This takes the name of the target, which may be a BFD target
 name or a configuration triplet.
 
+@end deftypefn
 @findex bfd_find_target
 @subsubsection @code{bfd_find_target}
-@strong{Synopsis}
-@example
-const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const bfd_target *bfd_find_target (const char *target_name, bfd *abfd); 
 Return a pointer to the transfer vector for the object target
 named @var{target_name}.  If @var{target_name} is @code{NULL},
 choose the one in the environment variable @code{GNUTARGET}; if
@@ -654,17 +642,10 @@ set in the BFD if @var{abfd} isn't @code
 @code{bfd_check_format} to loop over all the targets to find the
 one that matches the file being read.
 
+@end deftypefn
 @findex bfd_get_target_info
 @subsubsection @code{bfd_get_target_info}
-@strong{Synopsis}
-@example
-const bfd_target *bfd_get_target_info (const char *target_name,
-    bfd *abfd,
-    bfd_boolean *is_bigendian,
-    int *underscoring,
-    const char **def_target_arch);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const bfd_target *bfd_get_target_info (const char *target_name, bfd *abfd, bool *is_bigendian, int *underscoring, const char **def_target_arch); 
 Return a pointer to the transfer vector for the object target
 named @var{target_name}.  If @var{target_name} is @code{NULL},
 choose the one in the environment variable @code{GNUTARGET}; if
@@ -684,37 +665,27 @@ else the value of target vector's symbol
 If @var{def_target_arch} is not @code{NULL}, then set it to the architecture
 string specified by the target_name.
 
+@end deftypefn
 @findex bfd_target_list
 @subsubsection @code{bfd_target_list}
-@strong{Synopsis}
-@example
-const char ** bfd_target_list (void);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const char ** bfd_target_list (void); 
 Return a freshly malloced NULL-terminated
 vector of the names of all the valid BFD targets. Do not
 modify the names.
 
+@end deftypefn
 @findex bfd_iterate_over_targets
 @subsubsection @code{bfd_iterate_over_targets}
-@strong{Synopsis}
-@example
-const bfd_target *bfd_iterate_over_targets
-   (int (*func) (const bfd_target *, void *),
-    void *data);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const bfd_target *bfd_iterate_over_targets (int (*func) (const bfd_target *, void *), void *data); 
 Call @var{func} for each target in the list of BFD target
 vectors, passing @var{data} to @var{func}.  Stop iterating if
 @var{func} returns a non-zero result, and return that target
 vector.  Return NULL if @var{func} always returns zero.
 
+@end deftypefn
 @findex bfd_flavour_name
 @subsubsection @code{bfd_flavour_name}
-@strong{Synopsis}
-@example
-const char *bfd_flavour_name (enum bfd_flavour flavour);
-@end example
-@strong{Description}@*
+@deftypefn {Function} const char *bfd_flavour_name (enum bfd_flavour flavour); 
 Return the string form of @var{flavour}.
 
+@end deftypefn
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/dwarf1.c ./bfd/dwarf1.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/dwarf1.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/dwarf1.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* DWARF 1 find nearest line (_bfd_dwarf1_find_nearest_line).
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    Written by Gavin Romig-Koch of Cygnus Solutions (gavin@cygnus.com).
 
@@ -140,7 +140,7 @@ struct linenumber
 static struct dwarf1_unit*
 alloc_dwarf1_unit (struct dwarf1_debug* stash)
 {
-  bfd_size_type amt = sizeof (struct dwarf1_unit);
+  size_t amt = sizeof (struct dwarf1_unit);
 
   struct dwarf1_unit* x = (struct dwarf1_unit *) bfd_zalloc (stash->abfd, amt);
   if (x)
@@ -158,7 +158,7 @@ alloc_dwarf1_unit (struct dwarf1_debug*
 static struct dwarf1_func *
 alloc_dwarf1_func (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit)
 {
-  bfd_size_type amt = sizeof (struct dwarf1_func);
+  size_t amt = sizeof (struct dwarf1_func);
 
   struct dwarf1_func* x = (struct dwarf1_func *) bfd_zalloc (stash->abfd, amt);
   if (x)
@@ -177,7 +177,7 @@ alloc_dwarf1_func (struct dwarf1_debug*
 
    Return FALSE if the die is invalidly formatted; TRUE otherwise.  */
 
-static bfd_boolean
+static bool
 parse_die (bfd *	     abfd,
 	   struct die_info * aDieInfo,
 	   bfd_byte *	     aDiePtr,
@@ -190,23 +190,23 @@ parse_die (bfd *	     abfd,
 
   /* First comes the length.  */
   if (xptr + 4 > aDiePtrEnd)
-    return FALSE;
+    return false;
   aDieInfo->length = bfd_get_32 (abfd, xptr);
   xptr += 4;
-  if (aDieInfo->length == 0
-      || this_die + aDieInfo->length > aDiePtrEnd)
-    return FALSE;
+  if (aDieInfo->length <= 4
+      || (size_t) (aDiePtrEnd - this_die) < aDieInfo->length)
+    return false;
   aDiePtrEnd = this_die + aDieInfo->length;
   if (aDieInfo->length < 6)
     {
       /* Just padding bytes.  */
       aDieInfo->tag = TAG_padding;
-      return TRUE;
+      return true;
     }
 
   /* Then the tag.  */
   if (xptr + 2 > aDiePtrEnd)
-    return FALSE;
+    return false;
   aDieInfo->tag = bfd_get_16 (abfd, xptr);
   xptr += 2;
 
@@ -258,9 +258,8 @@ parse_die (bfd *	     abfd,
 	  if (xptr + 2 <= aDiePtrEnd)
 	    {
 	      block_len = bfd_get_16 (abfd, xptr);
-	      if (xptr + block_len > aDiePtrEnd
-		  || xptr + block_len < xptr)
-		return FALSE;
+	      if ((size_t) (aDiePtrEnd - xptr) < block_len)
+		return false;
 	      xptr += block_len;
 	    }
 	  xptr += 2;
@@ -269,9 +268,8 @@ parse_die (bfd *	     abfd,
 	  if (xptr + 4 <= aDiePtrEnd)
 	    {
 	      block_len = bfd_get_32 (abfd, xptr);
-	      if (xptr + block_len > aDiePtrEnd
-		  || xptr + block_len < xptr)
-		return FALSE;
+	      if ((size_t) (aDiePtrEnd - xptr) < block_len)
+		return false;
 	      xptr += block_len;
 	    }
 	  xptr += 4;
@@ -284,14 +282,14 @@ parse_die (bfd *	     abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Parse a dwarf1 line number table for 'aUnit->stmt_list_offset'
    into 'aUnit->linenumber_table'.  Return FALSE if an error
    occurs; TRUE otherwise.  */
 
-static bfd_boolean
+static bool
 parse_line_table (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit)
 {
   bfd_byte *xptr;
@@ -303,16 +301,16 @@ parse_line_table (struct dwarf1_debug* s
       bfd_size_type size;
 
       msec = bfd_get_section_by_name (stash->abfd, ".line");
-      if (! msec)
-	return FALSE;
+      if (! msec || (msec->flags & SEC_HAS_CONTENTS) == 0)
+	return false;
 
       size = msec->rawsize ? msec->rawsize : msec->size;
       stash->line_section
-	= bfd_simple_get_relocated_section_contents
-	(stash->abfd, msec, NULL, stash->syms);
+	= bfd_simple_get_relocated_section_contents (stash->abfd, msec, NULL,
+						     stash->syms);
 
       if (! stash->line_section)
-	return FALSE;
+	return false;
 
       stash->line_section_end = stash->line_section + size;
     }
@@ -342,7 +340,7 @@ parse_line_table (struct dwarf1_debug* s
       aUnit->linenumber_table = (struct linenumber *) bfd_alloc (stash->abfd,
 								 amt);
       if (!aUnit->linenumber_table)
-	return FALSE;
+	return false;
 
       for (eachLine = 0; eachLine < aUnit->line_count; eachLine++)
 	{
@@ -366,7 +364,7 @@ parse_line_table (struct dwarf1_debug* s
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Parse each function die in a compilation unit 'aUnit'.
@@ -374,7 +372,7 @@ parse_line_table (struct dwarf1_debug* s
    the result is placed in 'aUnit->func_list'.
    Return FALSE if error; TRUE otherwise.  */
 
-static bfd_boolean
+static bool
 parse_functions_in_unit (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit)
 {
   bfd_byte *eachDie;
@@ -388,7 +386,7 @@ parse_functions_in_unit (struct dwarf1_d
 
 	if (! parse_die (stash->abfd, &eachDieInfo, eachDie,
 			 stash->debug_section_end))
-	  return FALSE;
+	  return false;
 
 	if (eachDieInfo.tag == TAG_global_subroutine
 	    || eachDieInfo.tag == TAG_subroutine
@@ -397,7 +395,7 @@ parse_functions_in_unit (struct dwarf1_d
 	  {
 	    struct dwarf1_func* aFunc = alloc_dwarf1_func (stash,aUnit);
 	    if (!aFunc)
-	      return FALSE;
+	      return false;
 
 	    aFunc->name = eachDieInfo.name;
 	    aFunc->low_pc = eachDieInfo.low_pc;
@@ -411,13 +409,13 @@ parse_functions_in_unit (struct dwarf1_d
 	  break;
       }
 
-  return TRUE;
+  return true;
 }
 
 /* Find the nearest line to 'addr' in 'aUnit'.
    Return whether we found the line (or a function) without error.  */
 
-static bfd_boolean
+static bool
 dwarf1_unit_find_nearest_line (struct dwarf1_debug* stash,
 			       struct dwarf1_unit* aUnit,
 			       unsigned long addr,
@@ -425,8 +423,8 @@ dwarf1_unit_find_nearest_line (struct dw
 			       const char **functionname_ptr,
 			       unsigned int *linenumber_ptr)
 {
-  int line_p = FALSE;
-  int func_p = FALSE;
+  int line_p = false;
+  int func_p = false;
 
   if (aUnit->low_pc <= addr && addr < aUnit->high_pc)
     {
@@ -438,13 +436,13 @@ dwarf1_unit_find_nearest_line (struct dw
 	  if (! aUnit->linenumber_table)
 	    {
 	      if (! parse_line_table (stash, aUnit))
-		return FALSE;
+		return false;
 	    }
 
 	  if (! aUnit->func_list)
 	    {
 	      if (! parse_functions_in_unit (stash, aUnit))
-		return FALSE;
+		return false;
 	    }
 
 	  for (i = 0; i < aUnit->line_count; i++)
@@ -454,7 +452,7 @@ dwarf1_unit_find_nearest_line (struct dw
 		{
 		  *filename_ptr = aUnit->name;
 		  *linenumber_ptr = aUnit->linenumber_table[i].linenumber;
-		  line_p = TRUE;
+		  line_p = true;
 		  break;
 		}
 	    }
@@ -467,7 +465,7 @@ dwarf1_unit_find_nearest_line (struct dw
 		  && addr < eachFunc->high_pc)
 		{
 		  *functionname_ptr = eachFunc->name;
-		  func_p = TRUE;
+		  func_p = true;
 		  break;
 		}
 	    }
@@ -480,7 +478,7 @@ dwarf1_unit_find_nearest_line (struct dw
 /* The DWARF 1 version of find_nearest line.
    Return TRUE if the line is found without error.  */
 
-bfd_boolean
+bool
 _bfd_dwarf1_find_nearest_line (bfd *abfd,
 			       asymbol **symbols,
 			       asection *section,
@@ -509,14 +507,15 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd
 	= (struct dwarf1_debug *) bfd_zalloc (abfd, size);
 
       if (! stash)
-	return FALSE;
+	return false;
 
       msec = bfd_get_section_by_name (abfd, ".debug");
-      if (! msec)
+      if (! msec
+	  || (msec->flags & SEC_HAS_CONTENTS) == 0)
 	/* No dwarf1 info.  Note that at this point the stash
 	   has been allocated, but contains zeros, this lets
 	   future calls to this function fail quicker.  */
-	return FALSE;
+	return false;
 
       size = msec->rawsize ? msec->rawsize : msec->size;
       stash->debug_section
@@ -524,7 +523,7 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd
 						     symbols);
 
       if (! stash->debug_section)
-	return FALSE;
+	return false;
 
       stash->debug_section_end = stash->debug_section + size;
       stash->currentDie = stash->debug_section;
@@ -536,7 +535,7 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd
      or that an error occured while setting up the stash.  */
 
   if (! stash->debug_section)
-    return FALSE;
+    return false;
 
   /* Look at the previously parsed units to see if any contain
      the addr.  */
@@ -553,14 +552,14 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd
 
       if (! parse_die (stash->abfd, &aDieInfo, stash->currentDie,
 		       stash->debug_section_end))
-	return FALSE;
+	return false;
 
       if (aDieInfo.tag == TAG_compile_unit)
 	{
 	  struct dwarf1_unit* aUnit
 	    = alloc_dwarf1_unit (stash);
 	  if (!aUnit)
-	    return FALSE;
+	    return false;
 
 	  aUnit->name = aDieInfo.name;
 	  aUnit->low_pc = aDieInfo.low_pc;
@@ -592,5 +591,17 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd
 	stash->currentDie += aDieInfo.length;
     }
 
-  return FALSE;
+  return false;
+}
+
+void
+_bfd_dwarf1_cleanup_debug_info (bfd *abfd ATTRIBUTE_UNUSED, void **pinfo)
+{
+  struct dwarf1_debug* stash = *pinfo;
+
+  if (stash == NULL)
+    return;
+
+  free (stash->debug_section);
+  free (stash->line_section);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/dwarf2.c ./bfd/dwarf2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/dwarf2.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/dwarf2.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* DWARF 2 support.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
 
    Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
    (gavin@cygnus.com).
@@ -32,10 +32,12 @@
 #include "sysdep.h"
 #include "bfd.h"
 #include "libiberty.h"
+#include "demangle.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
 #include "dwarf2.h"
 #include "hashtab.h"
+#include "splay-tree.h"
 
 /* The data in the .debug_line statement prologue looks like this.  */
 
@@ -63,8 +65,8 @@ struct attribute
   {
     char *str;
     struct dwarf_block *blk;
-    bfd_uint64_t val;
-    bfd_int64_t sval;
+    uint64_t val;
+    int64_t sval;
   }
   u;
 };
@@ -80,8 +82,120 @@ struct adjusted_section
 {
   asection *section;
   bfd_vma adj_vma;
+  bfd_vma orig_vma;
 };
 
+/* A trie to map quickly from address range to compilation unit.
+
+   This is a fairly standard radix-256 trie, used to quickly locate which
+   compilation unit any given address belongs to.  Given that each compilation
+   unit may register hundreds of very small and unaligned ranges (which may
+   potentially overlap, due to inlining and other concerns), and a large
+   program may end up containing hundreds of thousands of such ranges, we cannot
+   scan through them linearly without undue slowdown.
+
+   We use a hybrid trie to avoid memory explosion: There are two types of trie
+   nodes, leaves and interior nodes.  (Almost all nodes are leaves, so they
+   take up the bulk of the memory usage.) Leaves contain a simple array of
+   ranges (high/low address) and which compilation unit contains those ranges,
+   and when we get to a leaf, we scan through it linearly.  Interior nodes
+   contain pointers to 256 other nodes, keyed by the next byte of the address.
+   So for a 64-bit address like 0x1234567abcd, we would start at the root and go
+   down child[0x00]->child[0x00]->child[0x01]->child[0x23]->child[0x45] etc.,
+   until we hit a leaf.  (Nodes are, in general, leaves until they exceed the
+   default allocation of 16 elements, at which point they are converted to
+   interior node if possible.) This gives us near-constant lookup times;
+   the only thing that can be costly is if there are lots of overlapping ranges
+   within a single 256-byte segment of the binary, in which case we have to
+   scan through them all to find the best match.
+
+   For a binary with few ranges, we will in practice only have a single leaf
+   node at the root, containing a simple array.  Thus, the scheme is efficient
+   for both small and large binaries.
+ */
+
+/* Experiments have shown 16 to be a memory-efficient default leaf size.
+   The only case where a leaf will hold more memory than this, is at the
+   bottomost level (covering 256 bytes in the binary), where we'll expand
+   the leaf to be able to hold more ranges if needed.
+ */
+#define TRIE_LEAF_SIZE 16
+
+/* All trie_node pointers will really be trie_leaf or trie_interior,
+   but they have this common head.  */
+struct trie_node
+{
+  /* If zero, we are an interior node.
+     Otherwise, how many ranges we have room for in this leaf.  */
+  unsigned int num_room_in_leaf;
+};
+
+struct trie_leaf
+{
+  struct trie_node head;
+  unsigned int num_stored_in_leaf;
+  struct {
+    struct comp_unit *unit;
+    bfd_vma low_pc, high_pc;
+  } ranges[];
+};
+
+struct trie_interior
+{
+  struct trie_node head;
+  struct trie_node *children[256];
+};
+
+static struct trie_node *alloc_trie_leaf (bfd *abfd)
+{
+  struct trie_leaf *leaf;
+  size_t amt = sizeof (*leaf) + TRIE_LEAF_SIZE * sizeof (leaf->ranges[0]);
+  leaf = bfd_zalloc (abfd, amt);
+  if (leaf == NULL)
+    return NULL;
+  leaf->head.num_room_in_leaf = TRIE_LEAF_SIZE;
+  return &leaf->head;
+}
+
+struct addr_range
+{
+  bfd_byte *start;
+  bfd_byte *end;
+};
+
+/* Return true if address range do intersect.  */
+
+static bool
+addr_range_intersects (struct addr_range *r1, struct addr_range *r2)
+{
+  return (r1->start <= r2->start && r2->start < r1->end)
+    || (r1->start <= (r2->end - 1) && (r2->end - 1) < r1->end);
+}
+
+/* Compare function for splay tree of addr_ranges.  */
+
+static int
+splay_tree_compare_addr_range (splay_tree_key xa, splay_tree_key xb)
+{
+  struct addr_range *r1 = (struct addr_range *) xa;
+  struct addr_range *r2 = (struct addr_range *) xb;
+
+  if (addr_range_intersects (r1, r2) || addr_range_intersects (r2, r1))
+    return 0;
+  else if (r1->end <= r2->start)
+    return -1;
+  else
+    return 1;
+}
+
+/* Splay tree release function for keys (addr_range).  */
+
+static void
+splay_tree_free_addr_range (splay_tree_key key)
+{
+  free ((struct addr_range *)key);
+}
+
 struct dwarf2_debug_file
 {
   /* The actual bfd from which debug info was loaded.  Might be
@@ -118,6 +232,18 @@ struct dwarf2_debug_file
   /* Length of the loaded .debug_str section.  */
   bfd_size_type dwarf_str_size;
 
+  /* Pointer to the .debug_str_offsets section loaded into memory.  */
+  bfd_byte *dwarf_str_offsets_buffer;
+
+  /* Length of the loaded .debug_str_offsets section.  */
+  bfd_size_type dwarf_str_offsets_size;
+
+  /* Pointer to the .debug_addr section loaded into memory.  */
+  bfd_byte *dwarf_addr_buffer;
+
+  /* Length of the loaded .debug_addr section.  */
+  bfd_size_type dwarf_addr_size;
+
   /* Pointer to the .debug_line_str section loaded into memory.  */
   bfd_byte *dwarf_line_str_buffer;
 
@@ -130,9 +256,18 @@ struct dwarf2_debug_file
   /* Length of the loaded .debug_ranges section.  */
   bfd_size_type dwarf_ranges_size;
 
+  /* Pointer to the .debug_rnglists section loaded into memory.  */
+  bfd_byte *dwarf_rnglists_buffer;
+
+  /* Length of the loaded .debug_rnglists section.  */
+  bfd_size_type dwarf_rnglists_size;
+
   /* A list of all previously read comp_units.  */
   struct comp_unit *all_comp_units;
 
+  /* A list of all previously read comp_units with no ranges (yet).  */
+  struct comp_unit *all_comp_units_without_ranges;
+
   /* Last comp unit in list above.  */
   struct comp_unit *last_comp_unit;
 
@@ -141,6 +276,12 @@ struct dwarf2_debug_file
 
   /* Hash table to map offsets to decoded abbrevs.  */
   htab_t abbrev_offsets;
+
+  /* Root of a trie to map addresses to compilation units.  */
+  struct trie_node *trie_root;
+
+  /* Splay tree to map info_ptr address to compilation units.  */
+  splay_tree comp_unit_tree;
 };
 
 struct dwarf2_debug
@@ -196,7 +337,7 @@ struct dwarf2_debug
 #define STASH_INFO_HASH_DISABLED   2
 
   /* True if we opened bfd_ptr.  */
-  bfd_boolean close_on_cleanup;
+  bool close_on_cleanup;
 };
 
 struct arange
@@ -214,6 +355,11 @@ struct comp_unit
   /* Chain the previously read compilation units.  */
   struct comp_unit *next_unit;
 
+  /* Chain the previously read compilation units that have no ranges yet.
+     We scan these separately when we have a trie over the ranges.
+     Unused if arange.high != 0. */
+  struct comp_unit *next_unit_without_ranges;
+
   /* Likewise, chain the compilation unit read after this one.
      The comp units are stored in reversed reading order.  */
   struct comp_unit *prev_unit;
@@ -289,18 +435,28 @@ struct comp_unit
   bfd_vma base_address;
 
   /* TRUE if symbols are cached in hash table for faster lookup by name.  */
-  bfd_boolean cached;
+  bool cached;
+
+  /* Used when iterating over trie leaves to know which units we have
+     already seen in this iteration.  */
+  bool mark;
+
+ /* Base address of debug_addr section.  */
+  size_t dwarf_addr_offset;
+
+  /* Base address of string offset table.  */
+  size_t dwarf_str_offset;
 };
 
 /* This data structure holds the information of an abbrev.  */
 struct abbrev_info
 {
-  unsigned int number;		/* Number identifying abbrev.  */
-  enum dwarf_tag tag;		/* DWARF tag.  */
-  int has_children;		/* Boolean.  */
-  unsigned int num_attrs;	/* Number of attributes.  */
-  struct attr_abbrev *attrs;	/* An array of attribute descriptions.  */
-  struct abbrev_info *next;	/* Next in chain.  */
+  unsigned int         number;		/* Number identifying abbrev.  */
+  enum dwarf_tag       tag;		/* DWARF tag.  */
+  bool                 has_children;	/* TRUE if the abbrev has children.  */
+  unsigned int         num_attrs;	/* Number of attributes.  */
+  struct attr_abbrev * attrs;		/* An array of attribute descriptions.  */
+  struct abbrev_info * next;		/* Next in chain.  */
 };
 
 struct attr_abbrev
@@ -327,10 +483,13 @@ const struct dwarf_debug_section dwarf_d
   { ".debug_pubnames",		".zdebug_pubnames" },
   { ".debug_pubtypes",		".zdebug_pubtypes" },
   { ".debug_ranges",		".zdebug_ranges" },
+  { ".debug_rnglists",		".zdebug_rnglist" },
   { ".debug_static_func",	".zdebug_static_func" },
   { ".debug_static_vars",	".zdebug_static_vars" },
   { ".debug_str",		".zdebug_str", },
   { ".debug_str",		".zdebug_str", },
+  { ".debug_str_offsets",	".zdebug_str_offsets", },
+  { ".debug_addr",		".zdebug_addr", },
   { ".debug_line_str",		".zdebug_line_str", },
   { ".debug_types",		".zdebug_types" },
   /* GNU DWARF 1 extensions */
@@ -360,10 +519,13 @@ enum dwarf_debug_section_enum
   debug_pubnames,
   debug_pubtypes,
   debug_ranges,
+  debug_rnglists,
   debug_static_func,
   debug_static_vars,
   debug_str,
   debug_str_alt,
+  debug_str_offsets,
+  debug_addr,
   debug_line_str,
   debug_types,
   debug_sfnames,
@@ -470,30 +632,30 @@ create_info_hash_table (bfd *abfd)
    right type of info in inserted as info is passed as a void* pointer.
    This function returns true if there is no error.  */
 
-static bfd_boolean
+static bool
 insert_info_hash_table (struct info_hash_table *hash_table,
 			const char *key,
 			void *info,
-			bfd_boolean copy_p)
+			bool copy_p)
 {
   struct info_hash_entry *entry;
   struct info_list_node *node;
 
   entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base,
-						     key, TRUE, copy_p);
+						     key, true, copy_p);
   if (!entry)
-    return FALSE;
+    return false;
 
   node = (struct info_list_node *) bfd_hash_allocate (&hash_table->base,
 						      sizeof (*node));
   if (!node)
-    return FALSE;
+    return false;
 
   node->info = info;
   node->next = entry->head;
   entry->head = node;
 
-  return TRUE;
+  return true;
 }
 
 /* Look up an info entry list from an info hash table.  Return NULL
@@ -505,7 +667,7 @@ lookup_info_hash_table (struct info_hash
   struct info_hash_entry *entry;
 
   entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base, key,
-						     FALSE, FALSE);
+						     false, false);
   return entry ? entry->head : NULL;
 }
 
@@ -515,56 +677,73 @@ lookup_info_hash_table (struct info_hash
    section contents, otherwise use bfd_get_section_contents.  Fail if
    the located section does not contain at least OFFSET bytes.  */
 
-static bfd_boolean
-read_section (bfd *	      abfd,
+static bool
+read_section (bfd *abfd,
 	      const struct dwarf_debug_section *sec,
-	      asymbol **      syms,
-	      bfd_uint64_t    offset,
-	      bfd_byte **     section_buffer,
-	      bfd_size_type * section_size)
+	      asymbol **syms,
+	      uint64_t offset,
+	      bfd_byte **section_buffer,
+	      bfd_size_type *section_size)
 {
-  asection *msec;
   const char *section_name = sec->uncompressed_name;
   bfd_byte *contents = *section_buffer;
-  bfd_size_type amt;
 
   /* The section may have already been read.  */
   if (contents == NULL)
     {
+      bfd_size_type amt;
+      asection *msec;
+
       msec = bfd_get_section_by_name (abfd, section_name);
-      if (! msec)
+      if (msec == NULL)
 	{
 	  section_name = sec->compressed_name;
-	  if (section_name != NULL)
-	    msec = bfd_get_section_by_name (abfd, section_name);
+          msec = bfd_get_section_by_name (abfd, section_name);
 	}
-      if (! msec)
+      if (msec == NULL)
 	{
 	  _bfd_error_handler (_("DWARF error: can't find %s section."),
 			      sec->uncompressed_name);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
+	}
+
+      if ((msec->flags & SEC_HAS_CONTENTS) == 0)
+	{
+	  _bfd_error_handler (_("DWARF error: section %s has no contents"),
+			      section_name);
+	  bfd_set_error (bfd_error_no_contents);
+	  return false;
 	}
 
-      *section_size = msec->rawsize ? msec->rawsize : msec->size;
+      if (_bfd_section_size_insane (abfd, msec))
+	{
+	  /* PR 26946 */
+	  _bfd_error_handler (_("DWARF error: section %s is too big"),
+			      section_name);
+	  return false;
+	}
+      amt = bfd_get_section_limit_octets (abfd, msec);
+      *section_size = amt;
       /* Paranoia - alloc one extra so that we can make sure a string
 	 section is NUL terminated.  */
-      amt = *section_size + 1;
+      amt += 1;
       if (amt == 0)
 	{
+	  /* Paranoia - this should never happen.  */
 	  bfd_set_error (bfd_error_no_memory);
-	  return FALSE;
+	  return false;
 	}
       contents = (bfd_byte *) bfd_malloc (amt);
       if (contents == NULL)
-	return FALSE;
+	return false;
       if (syms
 	  ? !bfd_simple_get_relocated_section_contents (abfd, msec, contents,
 							syms)
 	  : !bfd_get_section_contents (abfd, msec, contents, 0, *section_size))
 	{
 	  free (contents);
-	  return FALSE;
+	  return false;
 	}
       contents[*section_size] = 0;
       *section_buffer = contents;
@@ -580,143 +759,157 @@ read_section (bfd *	      abfd,
 			  (uint64_t) offset, section_name,
 			  (uint64_t) *section_size);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read dwarf information from a buffer.  */
 
+static inline uint64_t
+read_n_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end, int n)
+{
+  bfd_byte *buf = *ptr;
+  if (end - buf < n)
+    {
+      *ptr = end;
+      return 0;
+    }
+  *ptr = buf + n;
+  return bfd_get (n * 8, abfd, buf);
+}
+
 static unsigned int
-read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf, bfd_byte *end)
+read_1_byte (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
 {
-  if (buf + 1 > end)
-    return 0;
-  return bfd_get_8 (abfd, buf);
+  return read_n_bytes (abfd, ptr, end, 1);
 }
 
 static int
-read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf, bfd_byte *end)
+read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte **ptr, bfd_byte *end)
 {
-  if (buf + 1 > end)
-    return 0;
+  bfd_byte *buf = *ptr;
+  if (end - buf < 1)
+    {
+      *ptr = end;
+      return 0;
+    }
+  *ptr = buf + 1;
   return bfd_get_signed_8 (abfd, buf);
 }
 
 static unsigned int
-read_2_bytes (bfd *abfd, bfd_byte *buf, bfd_byte *end)
+read_2_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
 {
-  if (buf + 2 > end)
-    return 0;
-  return bfd_get_16 (abfd, buf);
+  return read_n_bytes (abfd, ptr, end, 2);
 }
 
 static unsigned int
-read_4_bytes (bfd *abfd, bfd_byte *buf, bfd_byte *end)
+read_3_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
 {
-  if (buf + 4 > end)
-    return 0;
-  return bfd_get_32 (abfd, buf);
+  unsigned int val = read_1_byte (abfd, ptr, end);
+  val <<= 8;
+  val |= read_1_byte (abfd, ptr, end);
+  val <<= 8;
+  val |= read_1_byte (abfd, ptr, end);
+  if (bfd_little_endian (abfd))
+    val = (((val >> 16) & 0xff)
+	   | (val & 0xff00)
+	   | ((val & 0xff) << 16));
+  return val;
 }
 
-static bfd_uint64_t
-read_8_bytes (bfd *abfd, bfd_byte *buf, bfd_byte *end)
+static unsigned int
+read_4_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
 {
-  if (buf + 8 > end)
-    return 0;
-  return bfd_get_64 (abfd, buf);
+  return read_n_bytes (abfd, ptr, end, 4);
 }
 
-static bfd_byte *
-read_n_bytes (bfd_byte *           buf,
-	      bfd_byte *           end,
-	      struct dwarf_block * block)
+static uint64_t
+read_8_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
+{
+  return read_n_bytes (abfd, ptr, end, 8);
+}
+
+static struct dwarf_block *
+read_blk (bfd *abfd, bfd_byte **ptr, bfd_byte *end, size_t size)
 {
-  unsigned int  size = block->size;
-  bfd_byte *    block_end = buf + size;
+  bfd_byte *buf = *ptr;
+  struct dwarf_block *block;
+
+  block = (struct dwarf_block *) bfd_alloc (abfd, sizeof (*block));
+  if (block == NULL)
+    return NULL;
 
-  if (block_end > end || block_end < buf)
+  if (size > (size_t) (end - buf))
     {
+      *ptr = end;
       block->data = NULL;
       block->size = 0;
-      return end;
     }
   else
     {
+      *ptr = buf + size;
       block->data = buf;
-      return block_end;
+      block->size = size;
     }
+  return block;
 }
 
-/* Scans a NUL terminated string starting at BUF, returning a pointer to it.
-   Returns the number of characters in the string, *including* the NUL byte,
-   in BYTES_READ_PTR.  This value is set even if the function fails.  Bytes
-   at or beyond BUF_END will not be read.  Returns NULL if there was a
-   problem, or if the string is empty.  */
+/* Scans a NUL terminated string starting at *PTR, returning a pointer to it.
+   Bytes at or beyond BUF_END will not be read.  Returns NULL if the
+   terminator is not found or if the string is empty.  *PTR is
+   incremented over the bytes scanned, including the terminator.  */
 
 static char *
-read_string (bfd *	    abfd ATTRIBUTE_UNUSED,
-	     bfd_byte *	    buf,
-	     bfd_byte *	    buf_end,
-	     unsigned int * bytes_read_ptr)
+read_string (bfd_byte **ptr,
+	     bfd_byte *buf_end)
 {
+  bfd_byte *buf = *ptr;
   bfd_byte *str = buf;
 
-  if (buf >= buf_end)
-    {
-      * bytes_read_ptr = 0;
-      return NULL;
-    }
-
-  if (*str == '\0')
-    {
-      * bytes_read_ptr = 1;
-      return NULL;
-    }
-
   while (buf < buf_end)
-    if (* buf ++ == 0)
+    if (*buf++ == 0)
       {
-	* bytes_read_ptr = buf - str;
+	if (str == buf - 1)
+	  break;
+	*ptr = buf;
 	return (char *) str;
       }
 
-  * bytes_read_ptr = buf - str;
+  *ptr = buf;
   return NULL;
 }
 
-/* Reads an offset from BUF and then locates the string at this offset
+/* Reads an offset from *PTR and then locates the string at this offset
    inside the debug string section.  Returns a pointer to the string.
-   Returns the number of bytes read from BUF, *not* the length of the string,
-   in BYTES_READ_PTR.  This value is set even if the function fails.  Bytes
-   at or beyond BUF_END will not be read from BUF.  Returns NULL if there was
-   a problem, or if the string is empty.  Does not check for NUL termination
-   of the string.  */
+   Increments *PTR by the number of bytes read for the offset.  This
+   value is set even if the function fails.  Bytes at or beyond
+   BUF_END will not be read.  Returns NULL if there was a problem, or
+   if the string is empty.  Does not check for NUL termination of the
+   string.  */
 
 static char *
-read_indirect_string (struct comp_unit * unit,
-		      bfd_byte *	 buf,
-		      bfd_byte *	 buf_end,
-		      unsigned int *	 bytes_read_ptr)
+read_indirect_string (struct comp_unit *unit,
+		      bfd_byte **ptr,
+		      bfd_byte *buf_end)
 {
-  bfd_uint64_t offset;
+  uint64_t offset;
   struct dwarf2_debug *stash = unit->stash;
   struct dwarf2_debug_file *file = unit->file;
   char *str;
 
-  if (buf + unit->offset_size > buf_end)
+  if (unit->offset_size > (size_t) (buf_end - *ptr))
     {
-      * bytes_read_ptr = 0;
+      *ptr = buf_end;
       return NULL;
     }
 
   if (unit->offset_size == 4)
-    offset = read_4_bytes (unit->abfd, buf, buf_end);
+    offset = read_4_bytes (unit->abfd, ptr, buf_end);
   else
-    offset = read_8_bytes (unit->abfd, buf, buf_end);
-
-  *bytes_read_ptr = unit->offset_size;
+    offset = read_8_bytes (unit->abfd, ptr, buf_end);
 
   if (! read_section (unit->abfd, &stash->debug_sections[debug_str],
 		      file->syms, offset,
@@ -732,28 +925,25 @@ read_indirect_string (struct comp_unit *
 /* Like read_indirect_string but from .debug_line_str section.  */
 
 static char *
-read_indirect_line_string (struct comp_unit * unit,
-			   bfd_byte *	      buf,
-			   bfd_byte *	      buf_end,
-			   unsigned int *     bytes_read_ptr)
+read_indirect_line_string (struct comp_unit *unit,
+			   bfd_byte **ptr,
+			   bfd_byte *buf_end)
 {
-  bfd_uint64_t offset;
+  uint64_t offset;
   struct dwarf2_debug *stash = unit->stash;
   struct dwarf2_debug_file *file = unit->file;
   char *str;
 
-  if (buf + unit->offset_size > buf_end)
+  if (unit->offset_size > (size_t) (buf_end - *ptr))
     {
-      * bytes_read_ptr = 0;
+      *ptr = buf_end;
       return NULL;
     }
 
   if (unit->offset_size == 4)
-    offset = read_4_bytes (unit->abfd, buf, buf_end);
+    offset = read_4_bytes (unit->abfd, ptr, buf_end);
   else
-    offset = read_8_bytes (unit->abfd, buf, buf_end);
-
-  *bytes_read_ptr = unit->offset_size;
+    offset = read_8_bytes (unit->abfd, ptr, buf_end);
 
   if (! read_section (unit->abfd, &stash->debug_sections[debug_line_str],
 		      file->syms, offset,
@@ -772,27 +962,24 @@ read_indirect_line_string (struct comp_u
    Used to impement DW_FORM_GNU_strp_alt.  */
 
 static char *
-read_alt_indirect_string (struct comp_unit * unit,
-			  bfd_byte *	     buf,
-			  bfd_byte *	     buf_end,
-			  unsigned int *     bytes_read_ptr)
+read_alt_indirect_string (struct comp_unit *unit,
+			  bfd_byte **ptr,
+			  bfd_byte *buf_end)
 {
-  bfd_uint64_t offset;
+  uint64_t offset;
   struct dwarf2_debug *stash = unit->stash;
   char *str;
 
-  if (buf + unit->offset_size > buf_end)
+  if (unit->offset_size > (size_t) (buf_end - *ptr))
     {
-      * bytes_read_ptr = 0;
+      *ptr = buf_end;
       return NULL;
     }
 
   if (unit->offset_size == 4)
-    offset = read_4_bytes (unit->abfd, buf, buf_end);
+    offset = read_4_bytes (unit->abfd, ptr, buf_end);
   else
-    offset = read_8_bytes (unit->abfd, buf, buf_end);
-
-  *bytes_read_ptr = unit->offset_size;
+    offset = read_8_bytes (unit->abfd, ptr, buf_end);
 
   if (stash->alt.bfd_ptr == NULL)
     {
@@ -835,8 +1022,7 @@ read_alt_indirect_string (struct comp_un
    or NULL upon failure.  */
 
 static bfd_byte *
-read_alt_indirect_ref (struct comp_unit * unit,
-		       bfd_uint64_t       offset)
+read_alt_indirect_ref (struct comp_unit *unit, uint64_t offset)
 {
   struct dwarf2_debug *stash = unit->stash;
 
@@ -872,17 +1058,22 @@ read_alt_indirect_ref (struct comp_unit
   return stash->alt.dwarf_info_buffer + offset;
 }
 
-static bfd_uint64_t
-read_address (struct comp_unit *unit, bfd_byte *buf, bfd_byte * buf_end)
+static uint64_t
+read_address (struct comp_unit *unit, bfd_byte **ptr, bfd_byte *buf_end)
 {
+  bfd_byte *buf = *ptr;
   int signed_vma = 0;
 
   if (bfd_get_flavour (unit->abfd) == bfd_target_elf_flavour)
     signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
 
-  if (buf + unit->addr_size > buf_end)
-    return 0;
+  if (unit->addr_size > (size_t) (buf_end - buf))
+    {
+      *ptr = buf_end;
+      return 0;
+    }
 
+  *ptr = buf + unit->addr_size;
   if (signed_vma)
     {
       switch (unit->addr_size)
@@ -986,16 +1177,16 @@ del_abbrev (void *p)
    in a hash table.  */
 
 static struct abbrev_info**
-read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash,
+read_abbrevs (bfd *abfd, uint64_t offset, struct dwarf2_debug *stash,
 	      struct dwarf2_debug_file *file)
 {
   struct abbrev_info **abbrevs;
   bfd_byte *abbrev_ptr;
   bfd_byte *abbrev_end;
   struct abbrev_info *cur_abbrev;
-  unsigned int abbrev_number, bytes_read, abbrev_name;
+  unsigned int abbrev_number, abbrev_name;
   unsigned int abbrev_form, hash_number;
-  bfd_size_type amt;
+  size_t amt;
   void **slot;
   struct abbrev_offset_entry ent = { offset, NULL };
 
@@ -1021,9 +1212,8 @@ read_abbrevs (bfd *abfd, bfd_uint64_t of
 
   abbrev_ptr = file->dwarf_abbrev_buffer + offset;
   abbrev_end = file->dwarf_abbrev_buffer + file->dwarf_abbrev_size;
-  abbrev_number = _bfd_safe_read_leb128 (abfd, abbrev_ptr, &bytes_read,
-					 FALSE, abbrev_end);
-  abbrev_ptr += bytes_read;
+  abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
+					 false, abbrev_end);
 
   /* Loop until we reach an abbrev number of 0.  */
   while (abbrev_number)
@@ -1036,11 +1226,9 @@ read_abbrevs (bfd *abfd, bfd_uint64_t of
       /* Read in abbrev header.  */
       cur_abbrev->number = abbrev_number;
       cur_abbrev->tag = (enum dwarf_tag)
-	_bfd_safe_read_leb128 (abfd, abbrev_ptr, &bytes_read,
-			       FALSE, abbrev_end);
-      abbrev_ptr += bytes_read;
-      cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr, abbrev_end);
-      abbrev_ptr += 1;
+	_bfd_safe_read_leb128 (abfd, &abbrev_ptr,
+			       false, abbrev_end);
+      cur_abbrev->has_children = read_1_byte (abfd, &abbrev_ptr, abbrev_end);
 
       /* Now read in declarations.  */
       for (;;)
@@ -1048,20 +1236,13 @@ read_abbrevs (bfd *abfd, bfd_uint64_t of
 	  /* Initialize it just to avoid a GCC false warning.  */
 	  bfd_vma implicit_const = -1;
 
-	  abbrev_name = _bfd_safe_read_leb128 (abfd, abbrev_ptr, &bytes_read,
-					       FALSE, abbrev_end);
-	  abbrev_ptr += bytes_read;
-	  abbrev_form = _bfd_safe_read_leb128 (abfd, abbrev_ptr, &bytes_read,
-					       FALSE, abbrev_end);
-	  abbrev_ptr += bytes_read;
+	  abbrev_name = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
+					       false, abbrev_end);
+	  abbrev_form = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
+					       false, abbrev_end);
 	  if (abbrev_form == DW_FORM_implicit_const)
-	    {
-	      implicit_const = _bfd_safe_read_leb128 (abfd, abbrev_ptr,
-						      &bytes_read, TRUE,
-						      abbrev_end);
-	      abbrev_ptr += bytes_read;
-	    }
-
+	    implicit_const = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
+						    true, abbrev_end);
 	  if (abbrev_name == 0)
 	    break;
 
@@ -1100,9 +1281,8 @@ read_abbrevs (bfd *abfd, bfd_uint64_t of
       if ((size_t) (abbrev_ptr - file->dwarf_abbrev_buffer)
 	  >= file->dwarf_abbrev_size)
 	break;
-      abbrev_number = _bfd_safe_read_leb128 (abfd, abbrev_ptr,
-					     &bytes_read, FALSE, abbrev_end);
-      abbrev_ptr += bytes_read;
+      abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
+					     false, abbrev_end);
       if (lookup_abbrev (abbrev_number, abbrevs) != NULL)
 	break;
     }
@@ -1136,11 +1316,172 @@ read_abbrevs (bfd *abfd, bfd_uint64_t of
 
 /* Returns true if the form is one which has a string value.  */
 
-static inline bfd_boolean
-is_str_attr (enum dwarf_form form)
+static bool
+is_str_form (const struct attribute *attr)
+{
+  switch (attr->form)
+    {
+    case DW_FORM_string:
+    case DW_FORM_strp:
+    case DW_FORM_strx:
+    case DW_FORM_strx1:
+    case DW_FORM_strx2:
+    case DW_FORM_strx3:
+    case DW_FORM_strx4:
+    case DW_FORM_line_strp:
+    case DW_FORM_GNU_strp_alt:
+      return true;
+
+    default:
+      return false;
+    }
+}
+
+/* Returns true if the form is one which has an integer value.  */
+
+static bool
+is_int_form (const struct attribute *attr)
+{
+  switch (attr->form)
+    {
+    case DW_FORM_addr:
+    case DW_FORM_data2:
+    case DW_FORM_data4:
+    case DW_FORM_data8:
+    case DW_FORM_data1:
+    case DW_FORM_flag:
+    case DW_FORM_sdata:
+    case DW_FORM_udata:
+    case DW_FORM_ref_addr:
+    case DW_FORM_ref1:
+    case DW_FORM_ref2:
+    case DW_FORM_ref4:
+    case DW_FORM_ref8:
+    case DW_FORM_ref_udata:
+    case DW_FORM_sec_offset:
+    case DW_FORM_flag_present:
+    case DW_FORM_ref_sig8:
+    case DW_FORM_addrx:
+    case DW_FORM_implicit_const:
+    case DW_FORM_addrx1:
+    case DW_FORM_addrx2:
+    case DW_FORM_addrx3:
+    case DW_FORM_addrx4:
+    case DW_FORM_GNU_ref_alt:
+      return true;
+
+    default:
+      return false;
+    }
+}
+
+/* Returns true if the form is strx[1-4].  */
+
+static inline bool
+is_strx_form (enum dwarf_form form)
+{
+  return (form == DW_FORM_strx
+	  || form == DW_FORM_strx1
+	  || form == DW_FORM_strx2
+	  || form == DW_FORM_strx3
+	  || form == DW_FORM_strx4);
+}
+
+/* Return true if the form is addrx[1-4].  */
+
+static inline bool
+is_addrx_form (enum dwarf_form form)
 {
-  return (form == DW_FORM_string || form == DW_FORM_strp
-	  || form == DW_FORM_line_strp || form == DW_FORM_GNU_strp_alt);
+  return (form == DW_FORM_addrx
+	  || form == DW_FORM_addrx1
+	  || form == DW_FORM_addrx2
+	  || form == DW_FORM_addrx3
+	  || form == DW_FORM_addrx4);
+}
+
+/* Returns the address in .debug_addr section using DW_AT_addr_base.
+   Used to implement DW_FORM_addrx*.  */
+static uint64_t
+read_indexed_address (uint64_t idx, struct comp_unit *unit)
+{
+  struct dwarf2_debug *stash = unit->stash;
+  struct dwarf2_debug_file *file = unit->file;
+  bfd_byte *info_ptr;
+  size_t offset;
+
+  if (stash == NULL)
+    return 0;
+
+  if (!read_section (unit->abfd, &stash->debug_sections[debug_addr],
+		     file->syms, 0,
+		     &file->dwarf_addr_buffer, &file->dwarf_addr_size))
+    return 0;
+
+  if (_bfd_mul_overflow (idx, unit->addr_size, &offset))
+    return 0;
+
+  offset += unit->dwarf_addr_offset;
+  if (offset < unit->dwarf_addr_offset
+      || offset > file->dwarf_addr_size
+      || file->dwarf_addr_size - offset < unit->addr_size)
+    return 0;
+
+  info_ptr = file->dwarf_addr_buffer + offset;
+
+  if (unit->addr_size == 4)
+    return bfd_get_32 (unit->abfd, info_ptr);
+  else if (unit->addr_size == 8)
+    return bfd_get_64 (unit->abfd, info_ptr);
+  else
+    return 0;
+}
+
+/* Returns the string using DW_AT_str_offsets_base.
+   Used to implement DW_FORM_strx*.  */
+static const char *
+read_indexed_string (uint64_t idx, struct comp_unit *unit)
+{
+  struct dwarf2_debug *stash = unit->stash;
+  struct dwarf2_debug_file *file = unit->file;
+  bfd_byte *info_ptr;
+  uint64_t str_offset;
+  size_t offset;
+
+  if (stash == NULL)
+    return NULL;
+
+  if (!read_section (unit->abfd, &stash->debug_sections[debug_str],
+		     file->syms, 0,
+		     &file->dwarf_str_buffer, &file->dwarf_str_size))
+    return NULL;
+
+  if (!read_section (unit->abfd, &stash->debug_sections[debug_str_offsets],
+		     file->syms, 0,
+		     &file->dwarf_str_offsets_buffer,
+		     &file->dwarf_str_offsets_size))
+    return NULL;
+
+  if (_bfd_mul_overflow (idx, unit->offset_size, &offset))
+    return NULL;
+
+  offset += unit->dwarf_str_offset;
+  if (offset < unit->dwarf_str_offset
+      || offset > file->dwarf_str_offsets_size
+      || file->dwarf_str_offsets_size - offset < unit->offset_size)
+    return NULL;
+
+  info_ptr = file->dwarf_str_offsets_buffer + offset;
+
+  if (unit->offset_size == 4)
+    str_offset = bfd_get_32 (unit->abfd, info_ptr);
+  else if (unit->offset_size == 8)
+    str_offset = bfd_get_64 (unit->abfd, info_ptr);
+  else
+    return NULL;
+
+  if (str_offset >= file->dwarf_str_size)
+    return NULL;
+  return (const char *) file->dwarf_str_buffer + str_offset;
 }
 
 /* Read and fill in the value of attribute ATTR as described by FORM.
@@ -1156,172 +1497,186 @@ read_attribute_value (struct attribute *
 		      bfd_byte *	  info_ptr_end)
 {
   bfd *abfd = unit->abfd;
-  unsigned int bytes_read;
-  struct dwarf_block *blk;
-  bfd_size_type amt;
+  size_t amt;
 
   if (info_ptr >= info_ptr_end && form != DW_FORM_flag_present)
     {
       _bfd_error_handler (_("DWARF error: info pointer extends beyond end of attributes"));
       bfd_set_error (bfd_error_bad_value);
-      return info_ptr;
+      return NULL;
     }
 
   attr->form = (enum dwarf_form) form;
 
   switch (form)
     {
+    case DW_FORM_flag_present:
+      attr->u.val = 1;
+      break;
     case DW_FORM_ref_addr:
       /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
 	 DWARF3.  */
-      if (unit->version == 3 || unit->version == 4)
+      if (unit->version >= 3)
 	{
 	  if (unit->offset_size == 4)
-	    attr->u.val = read_4_bytes (unit->abfd, info_ptr, info_ptr_end);
+	    attr->u.val = read_4_bytes (unit->abfd, &info_ptr, info_ptr_end);
 	  else
-	    attr->u.val = read_8_bytes (unit->abfd, info_ptr, info_ptr_end);
-	  info_ptr += unit->offset_size;
+	    attr->u.val = read_8_bytes (unit->abfd, &info_ptr, info_ptr_end);
 	  break;
 	}
       /* FALLTHROUGH */
     case DW_FORM_addr:
-      attr->u.val = read_address (unit, info_ptr, info_ptr_end);
-      info_ptr += unit->addr_size;
+      attr->u.val = read_address (unit, &info_ptr, info_ptr_end);
       break;
     case DW_FORM_GNU_ref_alt:
     case DW_FORM_sec_offset:
       if (unit->offset_size == 4)
-	attr->u.val = read_4_bytes (unit->abfd, info_ptr, info_ptr_end);
+	attr->u.val = read_4_bytes (unit->abfd, &info_ptr, info_ptr_end);
       else
-	attr->u.val = read_8_bytes (unit->abfd, info_ptr, info_ptr_end);
-      info_ptr += unit->offset_size;
+	attr->u.val = read_8_bytes (unit->abfd, &info_ptr, info_ptr_end);
       break;
     case DW_FORM_block2:
-      amt = sizeof (struct dwarf_block);
-      blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
-      if (blk == NULL)
+      amt = read_2_bytes (abfd, &info_ptr, info_ptr_end);
+      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
+      if (attr->u.blk == NULL)
 	return NULL;
-      blk->size = read_2_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 2;
-      info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk);
-      attr->u.blk = blk;
       break;
     case DW_FORM_block4:
-      amt = sizeof (struct dwarf_block);
-      blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
-      if (blk == NULL)
+      amt = read_4_bytes (abfd, &info_ptr, info_ptr_end);
+      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
+      if (attr->u.blk == NULL)
 	return NULL;
-      blk->size = read_4_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 4;
-      info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk);
-      attr->u.blk = blk;
+      break;
+    case DW_FORM_ref1:
+    case DW_FORM_flag:
+    case DW_FORM_data1:
+      attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
+      break;
+    case DW_FORM_addrx1:
+      attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
+      /* dwarf_addr_offset value 0 indicates the attribute DW_AT_addr_base
+	 is not yet read.  */
+      if (unit->dwarf_addr_offset != 0)
+	attr->u.val = read_indexed_address (attr->u.val, unit);
       break;
     case DW_FORM_data2:
-      attr->u.val = read_2_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 2;
+    case DW_FORM_ref2:
+      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
+      break;
+    case DW_FORM_addrx2:
+      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
+      if (unit->dwarf_addr_offset != 0)
+	attr->u.val = read_indexed_address (attr->u.val, unit);
+      break;
+    case DW_FORM_addrx3:
+      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
+      if (unit->dwarf_addr_offset != 0)
+	attr->u.val = read_indexed_address(attr->u.val, unit);
       break;
+    case DW_FORM_ref4:
     case DW_FORM_data4:
-      attr->u.val = read_4_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 4;
+      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
+      break;
+    case DW_FORM_addrx4:
+      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
+      if (unit->dwarf_addr_offset != 0)
+	attr->u.val = read_indexed_address (attr->u.val, unit);
       break;
     case DW_FORM_data8:
-      attr->u.val = read_8_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 8;
+    case DW_FORM_ref8:
+    case DW_FORM_ref_sig8:
+      attr->u.val = read_8_bytes (abfd, &info_ptr, info_ptr_end);
       break;
     case DW_FORM_string:
-      attr->u.str = read_string (abfd, info_ptr, info_ptr_end, &bytes_read);
-      info_ptr += bytes_read;
+      attr->u.str = read_string (&info_ptr, info_ptr_end);
       break;
     case DW_FORM_strp:
-      attr->u.str = read_indirect_string (unit, info_ptr, info_ptr_end, &bytes_read);
-      info_ptr += bytes_read;
+      attr->u.str = read_indirect_string (unit, &info_ptr, info_ptr_end);
       break;
     case DW_FORM_line_strp:
-      attr->u.str = read_indirect_line_string (unit, info_ptr, info_ptr_end, &bytes_read);
-      info_ptr += bytes_read;
+      attr->u.str = read_indirect_line_string (unit, &info_ptr, info_ptr_end);
       break;
     case DW_FORM_GNU_strp_alt:
-      attr->u.str = read_alt_indirect_string (unit, info_ptr, info_ptr_end, &bytes_read);
-      info_ptr += bytes_read;
+      attr->u.str = read_alt_indirect_string (unit, &info_ptr, info_ptr_end);
+      break;
+    case DW_FORM_strx1:
+      attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
+      /* dwarf_str_offset value 0 indicates the attribute DW_AT_str_offsets_base
+	 is not yet read.  */
+      if (unit->dwarf_str_offset != 0)
+	attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+      else
+	attr->u.str = NULL;
+      break;
+    case DW_FORM_strx2:
+      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
+      if (unit->dwarf_str_offset != 0)
+	attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+      else
+	attr->u.str = NULL;
+      break;
+    case DW_FORM_strx3:
+      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
+      if (unit->dwarf_str_offset != 0)
+	attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+      else
+	attr->u.str = NULL;
+      break;
+    case DW_FORM_strx4:
+      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
+      if (unit->dwarf_str_offset != 0)
+	attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+      else
+	attr->u.str = NULL;
+      break;
+    case DW_FORM_strx:
+      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					   false, info_ptr_end);
+      if (unit->dwarf_str_offset != 0)
+	attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+      else
+	attr->u.str = NULL;
       break;
     case DW_FORM_exprloc:
     case DW_FORM_block:
-      amt = sizeof (struct dwarf_block);
-      blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
-      if (blk == NULL)
+      amt = _bfd_safe_read_leb128 (abfd, &info_ptr,
+				   false, info_ptr_end);
+      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
+      if (attr->u.blk == NULL)
 	return NULL;
-      blk->size = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read,
-					 FALSE, info_ptr_end);
-      info_ptr += bytes_read;
-      info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk);
-      attr->u.blk = blk;
       break;
     case DW_FORM_block1:
-      amt = sizeof (struct dwarf_block);
-      blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
-      if (blk == NULL)
+      amt = read_1_byte (abfd, &info_ptr, info_ptr_end);
+      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
+      if (attr->u.blk == NULL)
 	return NULL;
-      blk->size = read_1_byte (abfd, info_ptr, info_ptr_end);
-      info_ptr += 1;
-      info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk);
-      attr->u.blk = blk;
-      break;
-    case DW_FORM_data1:
-      attr->u.val = read_1_byte (abfd, info_ptr, info_ptr_end);
-      info_ptr += 1;
-      break;
-    case DW_FORM_flag:
-      attr->u.val = read_1_byte (abfd, info_ptr, info_ptr_end);
-      info_ptr += 1;
-      break;
-    case DW_FORM_flag_present:
-      attr->u.val = 1;
       break;
     case DW_FORM_sdata:
-      attr->u.sval = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read,
-					    TRUE, info_ptr_end);
-      info_ptr += bytes_read;
+      attr->u.sval = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					    true, info_ptr_end);
       break;
+
+    case DW_FORM_rnglistx:
+    case DW_FORM_loclistx:
+      /* FIXME: Add support for these forms!  */
+      /* Fall through.  */
+    case DW_FORM_ref_udata:
     case DW_FORM_udata:
-      attr->u.val = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read,
-					   FALSE, info_ptr_end);
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_ref1:
-      attr->u.val = read_1_byte (abfd, info_ptr, info_ptr_end);
-      info_ptr += 1;
-      break;
-    case DW_FORM_ref2:
-      attr->u.val = read_2_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 2;
-      break;
-    case DW_FORM_ref4:
-      attr->u.val = read_4_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 4;
-      break;
-    case DW_FORM_ref8:
-      attr->u.val = read_8_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 8;
+      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					   false, info_ptr_end);
       break;
-    case DW_FORM_ref_sig8:
-      attr->u.val = read_8_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 8;
-      break;
-    case DW_FORM_ref_udata:
-      attr->u.val = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read,
-					   FALSE, info_ptr_end);
-      info_ptr += bytes_read;
+    case DW_FORM_addrx:
+      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					   false, info_ptr_end);
+      if (unit->dwarf_addr_offset != 0)
+	attr->u.val = read_indexed_address (attr->u.val, unit);
       break;
     case DW_FORM_indirect:
-      form = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read,
-				    FALSE, info_ptr_end);
-      info_ptr += bytes_read;
+      form = _bfd_safe_read_leb128 (abfd, &info_ptr,
+				    false, info_ptr_end);
       if (form == DW_FORM_implicit_const)
-	{
-	  implicit_const = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read,
-						  TRUE, info_ptr_end);
-	  info_ptr += bytes_read;
-	}
+	implicit_const = _bfd_safe_read_leb128 (abfd, &info_ptr,
+						true, info_ptr_end);
       info_ptr = read_attribute_value (attr, form, implicit_const, unit,
 				       info_ptr, info_ptr_end);
       break;
@@ -1329,6 +1684,14 @@ read_attribute_value (struct attribute *
       attr->form = DW_FORM_sdata;
       attr->u.sval = implicit_const;
       break;
+    case DW_FORM_data16:
+      /* This is really a "constant", but there is no way to store that
+         so pretend it is a 16 byte block instead.  */
+      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, 16);
+      if (attr->u.blk == NULL)
+	return NULL;
+      break;
+
     default:
       _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"),
 			  form);
@@ -1353,30 +1716,52 @@ read_attribute (struct attribute *    at
   return info_ptr;
 }
 
-/* Return whether DW_AT_name will return the same as DW_AT_linkage_name
-   for a function.  */
+/* Return mangling style given LANG.  */
 
-static bfd_boolean
-non_mangled (int lang)
+static int
+mangle_style (int lang)
 {
   switch (lang)
     {
+    case DW_LANG_Ada83:
+    case DW_LANG_Ada95:
+      return DMGL_GNAT;
+
+    case DW_LANG_C_plus_plus:
+    case DW_LANG_C_plus_plus_03:
+    case DW_LANG_C_plus_plus_11:
+    case DW_LANG_C_plus_plus_14:
+      return DMGL_GNU_V3;
+
+    case DW_LANG_Java:
+      return DMGL_JAVA;
+
+    case DW_LANG_D:
+      return DMGL_DLANG;
+
+    case DW_LANG_Rust:
+    case DW_LANG_Rust_old:
+      return DMGL_RUST;
+
     default:
-      return FALSE;
+      return DMGL_AUTO;
 
     case DW_LANG_C89:
     case DW_LANG_C:
-    case DW_LANG_Ada83:
     case DW_LANG_Cobol74:
     case DW_LANG_Cobol85:
     case DW_LANG_Fortran77:
     case DW_LANG_Pascal83:
-    case DW_LANG_C99:
-    case DW_LANG_Ada95:
     case DW_LANG_PLI:
+    case DW_LANG_C99:
     case DW_LANG_UPC:
     case DW_LANG_C11:
-      return TRUE;
+    case DW_LANG_Mips_Assembler:
+    case DW_LANG_Upc:
+    case DW_LANG_HP_Basic91:
+    case DW_LANG_HP_IMacro:
+    case DW_LANG_HP_Assembler:
+      return 0;
     }
 }
 
@@ -1420,6 +1805,7 @@ struct line_info_table
   unsigned int		num_files;
   unsigned int		num_dirs;
   unsigned int		num_sequences;
+  bool                  use_dir_and_file_0;
   char *		comp_dir;
   char **		dirs;
   struct fileinfo*	files;
@@ -1435,61 +1821,64 @@ struct line_info_table
 struct funcinfo
 {
   /* Pointer to previous function in list of all functions.  */
-  struct funcinfo *	prev_func;
+  struct funcinfo *prev_func;
   /* Pointer to function one scope higher.  */
-  struct funcinfo *	caller_func;
+  struct funcinfo *caller_func;
   /* Source location file name where caller_func inlines this func.  */
-  char *		caller_file;
+  char *caller_file;
   /* Source location file name.  */
-  char *		file;
+  char *file;
   /* Source location line number where caller_func inlines this func.  */
-  int			caller_line;
+  int caller_line;
   /* Source location line number.  */
-  int			line;
-  int			tag;
-  bfd_boolean		is_linkage;
-  const char *		name;
-  struct arange		arange;
-  /* Where the symbol is defined.  */
-  asection *		sec;
+  int line;
+  int tag;
+  bool is_linkage;
+  const char *name;
+  struct arange arange;
+  /* The offset of the funcinfo from the start of the unit.  */
+  uint64_t unit_offset;
 };
 
 struct lookup_funcinfo
 {
   /* Function information corresponding to this lookup table entry.  */
-  struct funcinfo *	funcinfo;
+  struct funcinfo *funcinfo;
 
   /* The lowest address for this specific function.  */
-  bfd_vma		low_addr;
+  bfd_vma low_addr;
 
   /* The highest address of this function before the lookup table is sorted.
      The highest address of all prior functions after the lookup table is
      sorted, which is used for binary search.  */
-  bfd_vma		high_addr;
+  bfd_vma high_addr;
   /* Index of this function, used to ensure qsort is stable.  */
   unsigned int idx;
 };
 
 struct varinfo
 {
-  /* Pointer to previous variable in list of all variables */
+  /* Pointer to previous variable in list of all variables.  */
   struct varinfo *prev_var;
-  /* Source location file name */
+  /* The offset of the varinfo from the start of the unit.  */
+  uint64_t unit_offset;
+  /* Source location file name.  */
   char *file;
-  /* Source location line number */
+  /* Source location line number.  */
   int line;
+  /* The type of this variable.  */
   int tag;
-  char *name;
+  /* The name of the variable, if it has one.  */
+  const char *name;
+  /* The address of the variable.  */
   bfd_vma addr;
-  /* Where the symbol is defined */
-  asection *sec;
-  /* Is this a stack variable? */
-  unsigned int stack: 1;
+  /* Is this a stack variable?  */
+  bool stack;
 };
 
 /* Return TRUE if NEW_LINE should sort after LINE.  */
 
-static inline bfd_boolean
+static inline bool
 new_line_sorts_after (struct line_info *new_line, struct line_info *line)
 {
   return (new_line->address > line->address
@@ -1503,7 +1892,7 @@ new_line_sorts_after (struct line_info *
    highest to lowest VMA (with possible duplicates); that is,
    line_info->prev_line always accesses an equal or smaller VMA.  */
 
-static bfd_boolean
+static bool
 add_line_info (struct line_info_table *table,
 	       bfd_vma address,
 	       unsigned char op_index,
@@ -1513,12 +1902,12 @@ add_line_info (struct line_info_table *t
 	       unsigned int discriminator,
 	       int end_sequence)
 {
-  bfd_size_type amt = sizeof (struct line_info);
+  size_t amt = sizeof (struct line_info);
   struct line_sequence* seq = table->sequences;
   struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt);
 
   if (info == NULL)
-    return FALSE;
+    return false;
 
   /* Set member data of 'info'.  */
   info->prev_line = NULL;
@@ -1533,7 +1922,7 @@ add_line_info (struct line_info_table *t
     {
       info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1);
       if (info->filename == NULL)
-	return FALSE;
+	return false;
       strcpy (info->filename, filename);
     }
   else
@@ -1572,7 +1961,7 @@ add_line_info (struct line_info_table *t
       amt = sizeof (struct line_sequence);
       seq = (struct line_sequence *) bfd_malloc (amt);
       if (seq == NULL)
-	return FALSE;
+	return false;
       seq->low_pc = address;
       seq->prev_sequence = table->sequences;
       seq->last_line = info;
@@ -1621,7 +2010,7 @@ add_line_info (struct line_info_table *t
       if (address < seq->low_pc)
 	seq->low_pc = address;
     }
-  return TRUE;
+  return true;
 }
 
 /* Extract a fully qualified filename from a line info table.
@@ -1633,16 +2022,30 @@ concat_filename (struct line_info_table
 {
   char *filename;
 
-  if (table == NULL || file - 1 >= table->num_files)
+  /* Pre DWARF-5 entry 0 in the directory and filename tables was not used.
+     So in order to save space in the tables used here the info for, eg
+     directory 1 is stored in slot 0 of the directory table, directory 2
+     in slot 1 and so on.
+
+     Starting with DWARF-5 the 0'th entry is used so there is a one to one
+     mapping between DWARF slots and internal table entries.  */
+  if (! table->use_dir_and_file_0)
+    {
+      /* Pre DWARF-5, FILE == 0 means unknown.  */
+      if (file == 0)
+	return strdup ("<unknown>");
+      -- file;
+    }
+
+  if (table == NULL || file >= table->num_files)
     {
-      /* FILE == 0 means unknown.  */
-      if (file)
-	_bfd_error_handler
-	  (_("DWARF error: mangled line number section (bad file number)"));
+      _bfd_error_handler
+	(_("DWARF error: mangled line number section (bad file number)"));
       return strdup ("<unknown>");
     }
 
-  filename = table->files[file - 1].name;
+  filename = table->files[file].name;
+
   if (filename == NULL)
     return strdup ("<unknown>");
 
@@ -1652,13 +2055,16 @@ concat_filename (struct line_info_table
       char *subdir_name = NULL;
       char *name;
       size_t len;
+      unsigned int dir = table->files[file].dir;
 
-      if (table->files[file - 1].dir
-	  /* PR 17512: file: 0317e960.  */
-	  && table->files[file - 1].dir <= table->num_dirs
-	  /* PR 17512: file: 7f3d2e4b.  */
-	  && table->dirs != NULL)
-	subdir_name = table->dirs[table->files[file - 1].dir - 1];
+      if (!table->use_dir_and_file_0)
+	--dir;
+      /* Wrapping from 0 to -1u above gives the intended result with
+	 the test below of leaving subdir_name NULL for pre-DWARF5 dir
+	 of 0.  */
+      /* PR 17512: file: 0317e960, file: 7f3d2e4b.  */
+      if (dir < table->num_dirs)
+	subdir_name = table->dirs[dir];
 
       if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name))
 	dir_name = table->comp_dir;
@@ -1694,22 +2100,217 @@ concat_filename (struct line_info_table
   return strdup (filename);
 }
 
-static bfd_boolean
-arange_add (const struct comp_unit *unit, struct arange *first_arange,
-	    bfd_vma low_pc, bfd_vma high_pc)
+/* Number of bits in a bfd_vma.  */
+#define VMA_BITS (8 * sizeof (bfd_vma))
+
+/* Check whether [low1, high1) can be combined with [low2, high2),
+   i.e., they touch or overlap.  */
+
+static bool
+ranges_overlap (bfd_vma low1,
+		bfd_vma high1,
+		bfd_vma low2,
+		bfd_vma high2)
+{
+  if (low1 == low2 || high1 == high2)
+    return true;
+
+  /* Sort so that low1 is below low2. */
+  if (low1 > low2)
+    {
+      bfd_vma tmp;
+
+      tmp = low1;
+      low1 = low2;
+      low2 = tmp;
+
+      tmp = high1;
+      high1 = high2;
+      high2 = tmp;
+    }
+
+  /* We touch iff low2 == high1.
+     We overlap iff low2 is within [low1, high1). */
+  return low2 <= high1;
+}
+
+/* Insert an address range in the trie mapping addresses to compilation units.
+   Will return the new trie node (usually the same as is being sent in, but
+   in case of a leaf-to-interior conversion, or expansion of a leaf, it may be
+   different), or NULL on failure.  */
+
+static struct trie_node *
+insert_arange_in_trie (bfd *abfd,
+		       struct trie_node *trie,
+		       bfd_vma trie_pc,
+		       unsigned int trie_pc_bits,
+		       struct comp_unit *unit,
+		       bfd_vma low_pc,
+		       bfd_vma high_pc)
+{
+  bfd_vma clamped_low_pc, clamped_high_pc;
+  int ch, from_ch, to_ch;
+  bool is_full_leaf = false;
+
+  /* See if we can extend any of the existing ranges.  This merging
+     isn't perfect (if merging opens up the possibility of merging two existing
+     ranges, we won't find them), but it takes the majority of the cases.  */
+  if (trie->num_room_in_leaf > 0)
+    {
+      struct trie_leaf *leaf = (struct trie_leaf *) trie;
+      unsigned int i;
+
+      for (i = 0; i < leaf->num_stored_in_leaf; ++i)
+	{
+	  if (leaf->ranges[i].unit == unit
+	      && ranges_overlap (low_pc, high_pc,
+				 leaf->ranges[i].low_pc,
+				 leaf->ranges[i].high_pc))
+	    {
+	      if (low_pc < leaf->ranges[i].low_pc)
+		leaf->ranges[i].low_pc = low_pc;
+	      if (high_pc > leaf->ranges[i].high_pc)
+		leaf->ranges[i].high_pc = high_pc;
+	      return trie;
+	    }
+	}
+
+      is_full_leaf = leaf->num_stored_in_leaf == trie->num_room_in_leaf;
+    }
+
+  /* If we're a leaf with no more room and we're _not_ at the bottom,
+     convert to an interior node.  */
+  if (is_full_leaf && trie_pc_bits < VMA_BITS)
+    {
+      const struct trie_leaf *leaf = (struct trie_leaf *) trie;
+      unsigned int i;
+
+      trie = bfd_zalloc (abfd, sizeof (struct trie_interior));
+      if (!trie)
+	return NULL;
+      is_full_leaf = false;
+
+      /* TODO: If we wanted to save a little more memory at the cost of
+	 complexity, we could have reused the old leaf node as one of the
+	 children of the new interior node, instead of throwing it away.  */
+      for (i = 0; i < leaf->num_stored_in_leaf; ++i)
+        {
+	  if (!insert_arange_in_trie (abfd, trie, trie_pc, trie_pc_bits,
+				      leaf->ranges[i].unit, leaf->ranges[i].low_pc,
+				      leaf->ranges[i].high_pc))
+	    return NULL;
+	}
+    }
+
+  /* If we're a leaf with no more room and we _are_ at the bottom,
+     we have no choice but to just make it larger. */
+  if (is_full_leaf)
+    {
+      const struct trie_leaf *leaf = (struct trie_leaf *) trie;
+      unsigned int new_room_in_leaf = trie->num_room_in_leaf * 2;
+      struct trie_leaf *new_leaf;
+      size_t amt = sizeof (*leaf) + new_room_in_leaf * sizeof (leaf->ranges[0]);
+      new_leaf = bfd_zalloc (abfd, amt);
+      new_leaf->head.num_room_in_leaf = new_room_in_leaf;
+      new_leaf->num_stored_in_leaf = leaf->num_stored_in_leaf;
+
+      memcpy (new_leaf->ranges,
+	      leaf->ranges,
+	      leaf->num_stored_in_leaf * sizeof (leaf->ranges[0]));
+      trie = &new_leaf->head;
+      is_full_leaf = false;
+
+      /* Now the insert below will go through.  */
+    }
+
+  /* If we're a leaf (now with room), we can just insert at the end.  */
+  if (trie->num_room_in_leaf > 0)
+    {
+      struct trie_leaf *leaf = (struct trie_leaf *) trie;
+
+      unsigned int i = leaf->num_stored_in_leaf++;
+      leaf->ranges[i].unit = unit;
+      leaf->ranges[i].low_pc = low_pc;
+      leaf->ranges[i].high_pc = high_pc;
+      return trie;
+    }
+
+  /* Now we are definitely an interior node, so recurse into all
+     the relevant buckets.  */
+
+  /* Clamp the range to the current trie bucket.  */
+  clamped_low_pc = low_pc;
+  clamped_high_pc = high_pc;
+  if (trie_pc_bits > 0)
+    {
+      bfd_vma bucket_high_pc =
+	trie_pc + ((bfd_vma) -1 >> trie_pc_bits);  /* Inclusive.  */
+      if (clamped_low_pc < trie_pc)
+	clamped_low_pc = trie_pc;
+      if (clamped_high_pc > bucket_high_pc)
+	clamped_high_pc = bucket_high_pc;
+    }
+
+  /* Insert the ranges in all buckets that it spans.  */
+  from_ch = (clamped_low_pc >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
+  to_ch = ((clamped_high_pc - 1) >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
+  for (ch = from_ch; ch <= to_ch; ++ch)
+    {
+      struct trie_interior *interior = (struct trie_interior *) trie;
+      struct trie_node *child = interior->children[ch];
+
+      if (child == NULL)
+        {
+	  child = alloc_trie_leaf (abfd);
+	  if (!child)
+	    return NULL;
+	}
+      bfd_vma bucket = (bfd_vma) ch << (VMA_BITS - trie_pc_bits - 8);
+      child = insert_arange_in_trie (abfd,
+				     child,
+				     trie_pc + bucket,
+				     trie_pc_bits + 8,
+				     unit,
+				     low_pc,
+				     high_pc);
+      if (!child)
+	return NULL;
+
+      interior->children[ch] = child;
+    }
+
+    return trie;
+}
+
+static bool
+arange_add (struct comp_unit *unit, struct arange *first_arange,
+	    struct trie_node **trie_root, bfd_vma low_pc, bfd_vma high_pc)
 {
   struct arange *arange;
 
   /* Ignore empty ranges.  */
   if (low_pc == high_pc)
-    return TRUE;
+    return true;
+
+  if (trie_root != NULL)
+    {
+      *trie_root = insert_arange_in_trie (unit->file->bfd_ptr,
+					  *trie_root,
+					  0,
+					  0,
+					  unit,
+					  low_pc,
+					  high_pc);
+      if (*trie_root == NULL)
+	return false;
+    }
 
   /* If the first arange is empty, use it.  */
   if (first_arange->high == 0)
     {
       first_arange->low = low_pc;
       first_arange->high = high_pc;
-      return TRUE;
+      return true;
     }
 
   /* Next see if we can cheaply extend an existing range.  */
@@ -1719,12 +2320,12 @@ arange_add (const struct comp_unit *unit
       if (low_pc == arange->high)
 	{
 	  arange->high = high_pc;
-	  return TRUE;
+	  return true;
 	}
       if (high_pc == arange->low)
 	{
 	  arange->low = low_pc;
-	  return TRUE;
+	  return true;
 	}
       arange = arange->next;
     }
@@ -1734,12 +2335,12 @@ arange_add (const struct comp_unit *unit
      Order isn't significant, so just insert after the first arange.  */
   arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
   if (arange == NULL)
-    return FALSE;
+    return false;
   arange->low = low_pc;
   arange->high = high_pc;
   arange->next = first_arange->next;
   first_arange->next = arange;
-  return TRUE;
+  return true;
 }
 
 /* Compare function for line sequences.  */
@@ -1778,18 +2379,18 @@ compare_sequences (const void* a, const
 
 /* Construct the line information table for quick lookup.  */
 
-static bfd_boolean
+static bool
 build_line_info_table (struct line_info_table *  table,
 		       struct line_sequence *    seq)
 {
-  bfd_size_type      amt;
-  struct line_info** line_info_lookup;
-  struct line_info*  each_line;
-  unsigned int       num_lines;
-  unsigned int       line_index;
+  size_t amt;
+  struct line_info **line_info_lookup;
+  struct line_info *each_line;
+  unsigned int num_lines;
+  unsigned int line_index;
 
   if (seq->line_info_lookup != NULL)
-    return TRUE;
+    return true;
 
   /* Count the number of line information entries.  We could do this while
      scanning the debug information, but some entries may be added via
@@ -1801,14 +2402,14 @@ build_line_info_table (struct line_info_
 
   seq->num_lines = num_lines;
   if (num_lines == 0)
-    return TRUE;
+    return true;
 
   /* Allocate space for the line information lookup table.  */
   amt = sizeof (struct line_info*) * num_lines;
   line_info_lookup = (struct line_info**) bfd_alloc (table->abfd, amt);
   seq->line_info_lookup = line_info_lookup;
   if (line_info_lookup == NULL)
-    return FALSE;
+    return false;
 
   /* Create the line information lookup table.  */
   line_index = num_lines;
@@ -1816,29 +2417,29 @@ build_line_info_table (struct line_info_
     line_info_lookup[--line_index] = each_line;
 
   BFD_ASSERT (line_index == 0);
-  return TRUE;
+  return true;
 }
 
 /* Sort the line sequences for quick lookup.  */
 
-static bfd_boolean
+static bool
 sort_line_sequences (struct line_info_table* table)
 {
-  bfd_size_type		 amt;
-  struct line_sequence*	 sequences;
-  struct line_sequence*	 seq;
-  unsigned int		 n = 0;
-  unsigned int		 num_sequences = table->num_sequences;
-  bfd_vma		 last_high_pc;
+  size_t amt;
+  struct line_sequence *sequences;
+  struct line_sequence *seq;
+  unsigned int n = 0;
+  unsigned int num_sequences = table->num_sequences;
+  bfd_vma last_high_pc;
 
   if (num_sequences == 0)
-    return TRUE;
+    return true;
 
   /* Allocate space for an array of sequences.  */
   amt = sizeof (struct line_sequence) * num_sequences;
   sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt);
   if (sequences == NULL)
-    return FALSE;
+    return false;
 
   /* Copy the linked list into the array, freeing the original nodes.  */
   seq = table->sequences;
@@ -1886,33 +2487,33 @@ sort_line_sequences (struct line_info_ta
 
   table->sequences = sequences;
   table->num_sequences = num_sequences;
-  return TRUE;
+  return true;
 }
 
 /* Add directory to TABLE.  CUR_DIR memory ownership is taken by TABLE.  */
 
-static bfd_boolean
+static bool
 line_info_add_include_dir (struct line_info_table *table, char *cur_dir)
 {
   if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
     {
       char **tmp;
-      bfd_size_type amt;
+      size_t amt;
 
       amt = table->num_dirs + DIR_ALLOC_CHUNK;
       amt *= sizeof (char *);
 
       tmp = (char **) bfd_realloc (table->dirs, amt);
       if (tmp == NULL)
-	return FALSE;
+	return false;
       table->dirs = tmp;
     }
 
   table->dirs[table->num_dirs++] = cur_dir;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 line_info_add_include_dir_stub (struct line_info_table *table, char *cur_dir,
 				unsigned int dir ATTRIBUTE_UNUSED,
 				unsigned int xtime ATTRIBUTE_UNUSED,
@@ -1923,7 +2524,7 @@ line_info_add_include_dir_stub (struct l
 
 /* Add file to TABLE.  CUR_FILE memory ownership is taken by TABLE.  */
 
-static bfd_boolean
+static bool
 line_info_add_file_name (struct line_info_table *table, char *cur_file,
 			 unsigned int dir, unsigned int xtime,
 			 unsigned int size)
@@ -1931,14 +2532,14 @@ line_info_add_file_name (struct line_inf
   if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
     {
       struct fileinfo *tmp;
-      bfd_size_type amt;
+      size_t amt;
 
       amt = table->num_files + FILE_ALLOC_CHUNK;
       amt *= sizeof (struct fileinfo);
 
       tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
       if (tmp == NULL)
-	return FALSE;
+	return false;
       table->files = tmp;
     }
 
@@ -1947,7 +2548,7 @@ line_info_add_file_name (struct line_inf
   table->files[table->num_files].time = xtime;
   table->files[table->num_files].size = size;
   table->num_files++;
-  return TRUE;
+  return true;
 }
 
 /* Read directory or file name entry format, starting with byte of
@@ -1955,40 +2556,35 @@ line_info_add_file_name (struct line_inf
    entries count and the entries themselves in the described entry
    format.  */
 
-static bfd_boolean
+static bool
 read_formatted_entries (struct comp_unit *unit, bfd_byte **bufp,
 			bfd_byte *buf_end, struct line_info_table *table,
-			bfd_boolean (*callback) (struct line_info_table *table,
-						 char *cur_file,
-						 unsigned int dir,
-						 unsigned int time,
-						 unsigned int size))
+			bool (*callback) (struct line_info_table *table,
+					  char *cur_file,
+					  unsigned int dir,
+					  unsigned int time,
+					  unsigned int size))
 {
   bfd *abfd = unit->abfd;
   bfd_byte format_count, formati;
   bfd_vma data_count, datai;
   bfd_byte *buf = *bufp;
   bfd_byte *format_header_data;
-  unsigned int bytes_read;
 
-  format_count = read_1_byte (abfd, buf, buf_end);
-  buf += 1;
+  format_count = read_1_byte (abfd, &buf, buf_end);
   format_header_data = buf;
   for (formati = 0; formati < format_count; formati++)
     {
-      _bfd_safe_read_leb128 (abfd, buf, &bytes_read, FALSE, buf_end);
-      buf += bytes_read;
-      _bfd_safe_read_leb128 (abfd, buf, &bytes_read, FALSE, buf_end);
-      buf += bytes_read;
+      _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
+      _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
     }
 
-  data_count = _bfd_safe_read_leb128 (abfd, buf, &bytes_read, FALSE, buf_end);
-  buf += bytes_read;
+  data_count = _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
   if (format_count == 0 && data_count != 0)
     {
       _bfd_error_handler (_("DWARF error: zero format count"));
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* PR 22210.  Paranoia check.  Don't bother running the loop
@@ -1999,7 +2595,7 @@ read_formatted_entries (struct comp_unit
 	(_("DWARF error: data count (%" PRIx64 ") larger than buffer size"),
 	 (uint64_t) data_count);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   for (datai = 0; datai < data_count; datai++)
@@ -2016,9 +2612,7 @@ read_formatted_entries (struct comp_unit
 	  unsigned int uint_trash, *uintp = &uint_trash;
 	  struct attribute attr;
 
-	  content_type = _bfd_safe_read_leb128 (abfd, format, &bytes_read,
-						FALSE, buf_end);
-	  format += bytes_read;
+	  content_type = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
 	  switch (content_type)
 	    {
 	    case DW_LNCT_path:
@@ -2040,20 +2634,22 @@ read_formatted_entries (struct comp_unit
 		(_("DWARF error: unknown format content type %" PRIu64),
 		 (uint64_t) content_type);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
-	  form = _bfd_safe_read_leb128 (abfd, format, &bytes_read, FALSE,
-					buf_end);
-	  format += bytes_read;
-
+	  form = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
 	  buf = read_attribute_value (&attr, form, 0, unit, buf, buf_end);
 	  if (buf == NULL)
-	    return FALSE;
+	    return false;
 	  switch (form)
 	    {
 	    case DW_FORM_string:
 	    case DW_FORM_line_strp:
+	    case DW_FORM_strx:
+	    case DW_FORM_strx1:
+	    case DW_FORM_strx2:
+	    case DW_FORM_strx3:
+	    case DW_FORM_strx4:
 	      *stringp = attr.u.str;
 	      break;
 
@@ -2064,15 +2660,19 @@ read_formatted_entries (struct comp_unit
 	    case DW_FORM_udata:
 	      *uintp = attr.u.val;
 	      break;
+
+	    case DW_FORM_data16:
+	      /* MD5 data is in the attr.blk, but we are ignoring those.  */
+	      break;
 	    }
 	}
 
       if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
-	return FALSE;
+	return false;
     }
 
   *bufp = buf;
-  return TRUE;
+  return true;
 }
 
 /* Decode the line number information for UNIT.  */
@@ -2087,11 +2687,11 @@ decode_line_info (struct comp_unit *unit
   bfd_byte *line_ptr;
   bfd_byte *line_end;
   struct line_head lh;
-  unsigned int i, bytes_read, offset_size;
+  unsigned int i, offset_size;
   char *cur_file, *cur_dir;
   unsigned char op_code, extended_op, adj_opcode;
   unsigned int exop_len;
-  bfd_size_type amt;
+  size_t amt;
 
   if (unit->line_offset == 0 && file->line_table)
     return file->line_table;
@@ -2113,20 +2713,17 @@ decode_line_info (struct comp_unit *unit
   line_end = file->dwarf_line_buffer + file->dwarf_line_size;
 
   /* Read in the prologue.  */
-  lh.total_length = read_4_bytes (abfd, line_ptr, line_end);
-  line_ptr += 4;
+  lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
   offset_size = 4;
   if (lh.total_length == 0xffffffff)
     {
-      lh.total_length = read_8_bytes (abfd, line_ptr, line_end);
-      line_ptr += 8;
+      lh.total_length = read_8_bytes (abfd, &line_ptr, line_end);
       offset_size = 8;
     }
   else if (lh.total_length == 0 && unit->addr_size == 8)
     {
       /* Handle (non-standard) 64-bit DWARF2 formats.  */
-      lh.total_length = read_4_bytes (abfd, line_ptr, line_end);
-      line_ptr += 4;
+      lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
       offset_size = 8;
     }
 
@@ -2143,7 +2740,7 @@ decode_line_info (struct comp_unit *unit
 
   line_end = line_ptr + lh.total_length;
 
-  lh.version = read_2_bytes (abfd, line_ptr, line_end);
+  lh.version = read_2_bytes (abfd, &line_ptr, line_end);
   if (lh.version < 2 || lh.version > 5)
     {
       _bfd_error_handler
@@ -2151,7 +2748,6 @@ decode_line_info (struct comp_unit *unit
       bfd_set_error (bfd_error_bad_value);
       return NULL;
     }
-  line_ptr += 2;
 
   if (line_ptr + offset_size + (lh.version >= 5 ? 8 : (lh.version >= 4 ? 6 : 5))
       >= line_end)
@@ -2167,11 +2763,9 @@ decode_line_info (struct comp_unit *unit
       unsigned int segment_selector_size;
 
       /* Skip address size.  */
-      read_1_byte (abfd, line_ptr, line_end);
-      line_ptr += 1;
+      read_1_byte (abfd, &line_ptr, line_end);
 
-      segment_selector_size = read_1_byte (abfd, line_ptr, line_end);
-      line_ptr += 1;
+      segment_selector_size = read_1_byte (abfd, &line_ptr, line_end);
       if (segment_selector_size != 0)
 	{
 	  _bfd_error_handler
@@ -2183,19 +2777,14 @@ decode_line_info (struct comp_unit *unit
     }
 
   if (offset_size == 4)
-    lh.prologue_length = read_4_bytes (abfd, line_ptr, line_end);
+    lh.prologue_length = read_4_bytes (abfd, &line_ptr, line_end);
   else
-    lh.prologue_length = read_8_bytes (abfd, line_ptr, line_end);
-  line_ptr += offset_size;
+    lh.prologue_length = read_8_bytes (abfd, &line_ptr, line_end);
 
-  lh.minimum_instruction_length = read_1_byte (abfd, line_ptr, line_end);
-  line_ptr += 1;
+  lh.minimum_instruction_length = read_1_byte (abfd, &line_ptr, line_end);
 
   if (lh.version >= 4)
-    {
-      lh.maximum_ops_per_insn = read_1_byte (abfd, line_ptr, line_end);
-      line_ptr += 1;
-    }
+    lh.maximum_ops_per_insn = read_1_byte (abfd, &line_ptr, line_end);
   else
     lh.maximum_ops_per_insn = 1;
 
@@ -2207,17 +2796,10 @@ decode_line_info (struct comp_unit *unit
       return NULL;
     }
 
-  lh.default_is_stmt = read_1_byte (abfd, line_ptr, line_end);
-  line_ptr += 1;
-
-  lh.line_base = read_1_signed_byte (abfd, line_ptr, line_end);
-  line_ptr += 1;
-
-  lh.line_range = read_1_byte (abfd, line_ptr, line_end);
-  line_ptr += 1;
-
-  lh.opcode_base = read_1_byte (abfd, line_ptr, line_end);
-  line_ptr += 1;
+  lh.default_is_stmt = read_1_byte (abfd, &line_ptr, line_end);
+  lh.line_base = read_1_signed_byte (abfd, &line_ptr, line_end);
+  lh.line_range = read_1_byte (abfd, &line_ptr, line_end);
+  lh.opcode_base = read_1_byte (abfd, &line_ptr, line_end);
 
   if (line_ptr + (lh.opcode_base - 1) >= line_end)
     {
@@ -2232,10 +2814,7 @@ decode_line_info (struct comp_unit *unit
   lh.standard_opcode_lengths[0] = 1;
 
   for (i = 1; i < lh.opcode_base; ++i)
-    {
-      lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr, line_end);
-      line_ptr += 1;
-    }
+    lh.standard_opcode_lengths[i] = read_1_byte (abfd, &line_ptr, line_end);
 
   amt = sizeof (struct line_info_table);
   table = (struct line_info_table *) bfd_alloc (abfd, amt);
@@ -2266,39 +2845,30 @@ decode_line_info (struct comp_unit *unit
       if (!read_formatted_entries (unit, &line_ptr, line_end, table,
 				   line_info_add_file_name))
 	goto fail;
+      table->use_dir_and_file_0 = true;
     }
   else
     {
       /* Read directory table.  */
-      while ((cur_dir = read_string (abfd, line_ptr, line_end, &bytes_read)) != NULL)
+      while ((cur_dir = read_string (&line_ptr, line_end)) != NULL)
 	{
-	  line_ptr += bytes_read;
-
 	  if (!line_info_add_include_dir (table, cur_dir))
 	    goto fail;
 	}
 
-      line_ptr += bytes_read;
-
       /* Read file name table.  */
-      while ((cur_file = read_string (abfd, line_ptr, line_end, &bytes_read)) != NULL)
+      while ((cur_file = read_string (&line_ptr, line_end)) != NULL)
 	{
 	  unsigned int dir, xtime, size;
 
-	  line_ptr += bytes_read;
-
-	  dir = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, FALSE, line_end);
-	  line_ptr += bytes_read;
-	  xtime = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, FALSE, line_end);
-	  line_ptr += bytes_read;
-	  size = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, FALSE, line_end);
-	  line_ptr += bytes_read;
+	  dir = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
+	  xtime = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
+	  size = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
 
 	  if (!line_info_add_file_name (table, cur_file, dir, xtime, size))
 	    goto fail;
 	}
-
-      line_ptr += bytes_read;
+      table->use_dir_and_file_0 = false;
     }
 
   /* Read the statement sequences until there's nothing left.  */
@@ -2307,7 +2877,7 @@ decode_line_info (struct comp_unit *unit
       /* State machine registers.  */
       bfd_vma address = 0;
       unsigned char op_index = 0;
-      char * filename = table->num_files ? concat_filename (table, 1) : NULL;
+      char * filename = NULL;
       unsigned int line = 1;
       unsigned int column = 0;
       unsigned int discriminator = 0;
@@ -2322,11 +2892,18 @@ decode_line_info (struct comp_unit *unit
       bfd_vma low_pc  = (bfd_vma) -1;
       bfd_vma high_pc = 0;
 
+      if (table->num_files)
+	{
+	  if (table->use_dir_and_file_0)
+	    filename = concat_filename (table, 0);
+	  else
+	    filename = concat_filename (table, 1);
+	}
+
       /* Decode the table.  */
       while (!end_sequence && line_ptr < line_end)
 	{
-	  op_code = read_1_byte (abfd, line_ptr, line_end);
-	  line_ptr += 1;
+	  op_code = read_1_byte (abfd, &line_ptr, line_end);
 
 	  if (op_code >= lh.opcode_base)
 	    {
@@ -2359,11 +2936,9 @@ decode_line_info (struct comp_unit *unit
 	  else switch (op_code)
 	    {
 	    case DW_LNS_extended_op:
-	      exop_len = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read,
-						FALSE, line_end);
-	      line_ptr += bytes_read;
-	      extended_op = read_1_byte (abfd, line_ptr, line_end);
-	      line_ptr += 1;
+	      exop_len = _bfd_safe_read_leb128 (abfd, &line_ptr,
+						false, line_end);
+	      extended_op = read_1_byte (abfd, &line_ptr, line_end);
 
 	      switch (extended_op)
 		{
@@ -2377,35 +2952,29 @@ decode_line_info (struct comp_unit *unit
 		    low_pc = address;
 		  if (address > high_pc)
 		    high_pc = address;
-		  if (!arange_add (unit, &unit->arange, low_pc, high_pc))
+		  if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
+				   low_pc, high_pc))
 		    goto line_fail;
 		  break;
 		case DW_LNE_set_address:
-		  address = read_address (unit, line_ptr, line_end);
+		  address = read_address (unit, &line_ptr, line_end);
 		  op_index = 0;
-		  line_ptr += unit->addr_size;
 		  break;
 		case DW_LNE_define_file:
-		  cur_file = read_string (abfd, line_ptr, line_end, &bytes_read);
-		  line_ptr += bytes_read;
-		  dir = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read,
-					       FALSE, line_end);
-		  line_ptr += bytes_read;
-		  xtime = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read,
-						 FALSE, line_end);
-		  line_ptr += bytes_read;
-		  size = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read,
-						FALSE, line_end);
-		  line_ptr += bytes_read;
+		  cur_file = read_string (&line_ptr, line_end);
+		  dir = _bfd_safe_read_leb128 (abfd, &line_ptr,
+					       false, line_end);
+		  xtime = _bfd_safe_read_leb128 (abfd, &line_ptr,
+						 false, line_end);
+		  size = _bfd_safe_read_leb128 (abfd, &line_ptr,
+						false, line_end);
 		  if (!line_info_add_file_name (table, cur_file, dir,
 						xtime, size))
 		    goto line_fail;
 		  break;
 		case DW_LNE_set_discriminator:
-		  discriminator =
-		    _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read,
-					   FALSE, line_end);
-		  line_ptr += bytes_read;
+		  discriminator = _bfd_safe_read_leb128 (abfd, &line_ptr,
+							 false, line_end);
 		  break;
 		case DW_LNE_HP_source_file_correlation:
 		  line_ptr += exop_len - 1;
@@ -2415,8 +2984,7 @@ decode_line_info (struct comp_unit *unit
 		    (_("DWARF error: mangled line number section"));
 		  bfd_set_error (bfd_error_bad_value);
 		line_fail:
-		  if (filename != NULL)
-		    free (filename);
+		  free (filename);
 		  goto fail;
 		}
 	      break;
@@ -2433,24 +3001,20 @@ decode_line_info (struct comp_unit *unit
 	    case DW_LNS_advance_pc:
 	      if (lh.maximum_ops_per_insn == 1)
 		address += (lh.minimum_instruction_length
-			    * _bfd_safe_read_leb128 (abfd, line_ptr,
-						     &bytes_read,
-						     FALSE, line_end));
+			    * _bfd_safe_read_leb128 (abfd, &line_ptr,
+						     false, line_end));
 	      else
 		{
-		  bfd_vma adjust = _bfd_safe_read_leb128 (abfd, line_ptr,
-							  &bytes_read,
-							  FALSE, line_end);
+		  bfd_vma adjust = _bfd_safe_read_leb128 (abfd, &line_ptr,
+							  false, line_end);
 		  address = ((op_index + adjust) / lh.maximum_ops_per_insn
 			     * lh.minimum_instruction_length);
 		  op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
 		}
-	      line_ptr += bytes_read;
 	      break;
 	    case DW_LNS_advance_line:
-	      line += _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read,
-					     TRUE, line_end);
-	      line_ptr += bytes_read;
+	      line += _bfd_safe_read_leb128 (abfd, &line_ptr,
+					     true, line_end);
 	      break;
 	    case DW_LNS_set_file:
 	      {
@@ -2458,18 +3022,15 @@ decode_line_info (struct comp_unit *unit
 
 		/* The file and directory tables are 0
 		   based, the references are 1 based.  */
-		filenum = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read,
-						 FALSE, line_end);
-		line_ptr += bytes_read;
-		if (filename)
-		  free (filename);
+		filenum = _bfd_safe_read_leb128 (abfd, &line_ptr,
+						 false, line_end);
+		free (filename);
 		filename = concat_filename (table, filenum);
 		break;
 	      }
 	    case DW_LNS_set_column:
-	      column = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read,
-					      FALSE, line_end);
-	      line_ptr += bytes_read;
+	      column = _bfd_safe_read_leb128 (abfd, &line_ptr,
+					      false, line_end);
 	      break;
 	    case DW_LNS_negate_stmt:
 	      is_stmt = (!is_stmt);
@@ -2492,24 +3053,19 @@ decode_line_info (struct comp_unit *unit
 		}
 	      break;
 	    case DW_LNS_fixed_advance_pc:
-	      address += read_2_bytes (abfd, line_ptr, line_end);
+	      address += read_2_bytes (abfd, &line_ptr, line_end);
 	      op_index = 0;
-	      line_ptr += 2;
 	      break;
 	    default:
 	      /* Unknown standard opcode, ignore it.  */
 	      for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
-		{
-		  (void) _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read,
-						FALSE, line_end);
-		  line_ptr += bytes_read;
-		}
+		(void) _bfd_safe_read_leb128 (abfd, &line_ptr,
+					      false, line_end);
 	      break;
 	    }
 	}
 
-      if (filename)
-	free (filename);
+      free (filename);
     }
 
   if (unit->line_offset == 0)
@@ -2524,20 +3080,17 @@ decode_line_info (struct comp_unit *unit
       table->sequences = table->sequences->prev_sequence;
       free (seq);
     }
-  if (table->files != NULL)
-    free (table->files);
-  if (table->dirs != NULL)
-    free (table->dirs);
+  free (table->files);
+  free (table->dirs);
   return NULL;
 }
 
-/* If ADDR is within TABLE set the output parameters and return the
-   range of addresses covered by the entry used to fill them out.
-   Otherwise set * FILENAME_PTR to NULL and return 0.
+/* If ADDR is within TABLE set the output parameters and return TRUE,
+   otherwise set *FILENAME_PTR to NULL and return FALSE.
    The parameters FILENAME_PTR, LINENUMBER_PTR and DISCRIMINATOR_PTR
    are pointers to the objects to be filled in.  */
 
-static bfd_vma
+static bool
 lookup_address_in_line_info_table (struct line_info_table *table,
 				   bfd_vma addr,
 				   const char **filename_ptr,
@@ -2596,17 +3149,17 @@ lookup_address_in_line_info_table (struc
       *linenumber_ptr = info->line;
       if (discriminator_ptr)
 	*discriminator_ptr = info->discriminator;
-      return seq->last_line->address - seq->low_pc;
+      return true;
     }
 
-fail:
+ fail:
   *filename_ptr = NULL;
-  return 0;
+  return false;
 }
 
 /* Read in the .debug_ranges section for future reference.  */
 
-static bfd_boolean
+static bool
 read_debug_ranges (struct comp_unit * unit)
 {
   struct dwarf2_debug *stash = unit->stash;
@@ -2617,6 +3170,19 @@ read_debug_ranges (struct comp_unit * un
 		       &file->dwarf_ranges_buffer, &file->dwarf_ranges_size);
 }
 
+/* Read in the .debug_rnglists section for future reference.  */
+
+static bool
+read_debug_rnglists (struct comp_unit * unit)
+{
+  struct dwarf2_debug *stash = unit->stash;
+  struct dwarf2_debug_file *file = unit->file;
+
+  return read_section (unit->abfd, &stash->debug_sections[debug_rnglists],
+		       file->syms, 0,
+		       &file->dwarf_rnglists_buffer, &file->dwarf_rnglists_size);
+}
+
 /* Function table functions.  */
 
 static int
@@ -2641,7 +3207,7 @@ compare_lookup_funcinfos (const void * a
   return 0;
 }
 
-static bfd_boolean
+static bool
 build_lookup_funcinfo_table (struct comp_unit * unit)
 {
   struct lookup_funcinfo *lookup_funcinfo_table = unit->lookup_funcinfo_table;
@@ -2653,13 +3219,13 @@ build_lookup_funcinfo_table (struct comp
   bfd_vma low_addr, high_addr;
 
   if (lookup_funcinfo_table || number_of_functions == 0)
-    return TRUE;
+    return true;
 
   /* Create the function info lookup table.  */
   lookup_funcinfo_table = (struct lookup_funcinfo *)
     bfd_malloc (number_of_functions * sizeof (struct lookup_funcinfo));
   if (lookup_funcinfo_table == NULL)
-    return FALSE;
+    return false;
 
   /* Populate the function info lookup table.  */
   func_index = number_of_functions;
@@ -2705,7 +3271,7 @@ build_lookup_funcinfo_table (struct comp
     }
 
   unit->lookup_funcinfo_table = lookup_funcinfo_table;
-  return TRUE;
+  return true;
 }
 
 /* If ADDR is within UNIT's function tables, set FUNCTION_PTR, and return
@@ -2713,7 +3279,7 @@ build_lookup_funcinfo_table (struct comp
    that contains ADDR, to handle inlined functions without depending upon
    them being ordered in TABLE by increasing range.  */
 
-static bfd_boolean
+static bool
 lookup_address_in_function_table (struct comp_unit *unit,
 				  bfd_vma addr,
 				  struct funcinfo **function_ptr)
@@ -2722,18 +3288,18 @@ lookup_address_in_function_table (struct
   struct lookup_funcinfo* lookup_funcinfo = NULL;
   struct funcinfo* funcinfo = NULL;
   struct funcinfo* best_fit = NULL;
-  bfd_vma best_fit_len = 0;
+  bfd_vma best_fit_len = (bfd_vma) -1;
   bfd_size_type low, high, mid, first;
   struct arange *arange;
 
   if (number_of_functions == 0)
-    return FALSE;
+    return false;
 
   if (!build_lookup_funcinfo_table (unit))
-    return FALSE;
+    return false;
 
   if (unit->lookup_funcinfo_table[number_of_functions - 1].high_addr < addr)
-    return FALSE;
+    return false;
 
   /* Find the first function in the lookup table which may contain the
      specified address.  */
@@ -2768,8 +3334,7 @@ lookup_address_in_function_table (struct
 	  if (addr < arange->low || addr >= arange->high)
 	    continue;
 
-	  if (!best_fit
-	      || arange->high - arange->low < best_fit_len
+	  if (arange->high - arange->low < best_fit_len
 	      /* The following comparison is designed to return the same
 		 match as the previous algorithm for routines which have the
 		 same best fit length.  */
@@ -2785,60 +3350,49 @@ lookup_address_in_function_table (struct
     }
 
   if (!best_fit)
-    return FALSE;
+    return false;
 
   *function_ptr = best_fit;
-  return TRUE;
+  return true;
 }
 
 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
    and LINENUMBER_PTR, and return TRUE.  */
 
-static bfd_boolean
+static bool
 lookup_symbol_in_function_table (struct comp_unit *unit,
 				 asymbol *sym,
 				 bfd_vma addr,
 				 const char **filename_ptr,
 				 unsigned int *linenumber_ptr)
 {
-  struct funcinfo* each_func;
+  struct funcinfo* each;
   struct funcinfo* best_fit = NULL;
-  bfd_vma best_fit_len = 0;
+  bfd_vma best_fit_len = (bfd_vma) -1;
   struct arange *arange;
   const char *name = bfd_asymbol_name (sym);
-  asection *sec = bfd_asymbol_section (sym);
 
-  for (each_func = unit->function_table;
-       each_func;
-       each_func = each_func->prev_func)
-    {
-      for (arange = &each_func->arange;
-	   arange;
-	   arange = arange->next)
+  for (each = unit->function_table; each; each = each->prev_func)
+    for (arange = &each->arange; arange; arange = arange->next)
+      if (addr >= arange->low
+	  && addr < arange->high
+	  && arange->high - arange->low < best_fit_len
+	  && each->file
+	  && each->name
+	  && strstr (name, each->name) != NULL)
 	{
-	  if ((!each_func->sec || each_func->sec == sec)
-	      && addr >= arange->low
-	      && addr < arange->high
-	      && each_func->name
-	      && strcmp (name, each_func->name) == 0
-	      && (!best_fit
-		  || arange->high - arange->low < best_fit_len))
-	    {
-	      best_fit = each_func;
-	      best_fit_len = arange->high - arange->low;
-	    }
+	  best_fit = each;
+	  best_fit_len = arange->high - arange->low;
 	}
-    }
 
   if (best_fit)
     {
-      best_fit->sec = sec;
       *filename_ptr = best_fit->file;
       *linenumber_ptr = best_fit->line;
-      return TRUE;
+      return true;
     }
-  else
-    return FALSE;
+
+  return false;
 }
 
 /* Variable table functions.  */
@@ -2846,65 +3400,61 @@ lookup_symbol_in_function_table (struct
 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
    LINENUMBER_PTR, and return TRUE.  */
 
-static bfd_boolean
+static bool
 lookup_symbol_in_variable_table (struct comp_unit *unit,
 				 asymbol *sym,
 				 bfd_vma addr,
 				 const char **filename_ptr,
 				 unsigned int *linenumber_ptr)
 {
-  const char *name = bfd_asymbol_name (sym);
-  asection *sec = bfd_asymbol_section (sym);
   struct varinfo* each;
+  const char *name = bfd_asymbol_name (sym);
 
   for (each = unit->variable_table; each; each = each->prev_var)
-    if (each->stack == 0
+    if (each->addr == addr
+	&& !each->stack
 	&& each->file != NULL
 	&& each->name != NULL
-	&& each->addr == addr
-	&& (!each->sec || each->sec == sec)
-	&& strcmp (name, each->name) == 0)
+	&& strstr (name, each->name) != NULL)
       break;
 
   if (each)
     {
-      each->sec = sec;
       *filename_ptr = each->file;
       *linenumber_ptr = each->line;
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 static struct comp_unit *stash_comp_unit (struct dwarf2_debug *,
 					  struct dwarf2_debug_file *);
-static bfd_boolean comp_unit_maybe_decode_line_info (struct comp_unit *);
+static bool comp_unit_maybe_decode_line_info (struct comp_unit *);
 
-static bfd_boolean
+static bool
 find_abstract_instance (struct comp_unit *unit,
 			struct attribute *attr_ptr,
 			unsigned int recur_count,
 			const char **pname,
-			bfd_boolean *is_linkage,
+			bool *is_linkage,
 			char **filename_ptr,
 			int *linenumber_ptr)
 {
   bfd *abfd = unit->abfd;
   bfd_byte *info_ptr = NULL;
   bfd_byte *info_ptr_end;
-  unsigned int abbrev_number, bytes_read, i;
+  unsigned int abbrev_number, i;
   struct abbrev_info *abbrev;
-  bfd_uint64_t die_ref = attr_ptr->u.val;
+  uint64_t die_ref = attr_ptr->u.val;
   struct attribute attr;
-  const char *name = NULL;
 
   if (recur_count == 100)
     {
       _bfd_error_handler
 	(_("DWARF error: abstract instance recursion detected"));
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* DW_FORM_ref_addr can reference an entry in a different CU. It
@@ -2932,19 +3482,19 @@ find_abstract_instance (struct comp_unit
       info_ptr_end = info_ptr + unit->file->dwarf_info_size;
       total = info_ptr_end - info_ptr;
       if (!die_ref)
-	return TRUE;
+	return true;
       else if (die_ref >= total)
 	{
 	  _bfd_error_handler
 	    (_("DWARF error: invalid abstract instance DIE ref"));
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       info_ptr += die_ref;
     }
   else if (attr_ptr->form == DW_FORM_GNU_ref_alt)
     {
-      bfd_boolean first_time = unit->stash->alt.dwarf_info_buffer == NULL;
+      bool first_time = unit->stash->alt.dwarf_info_buffer == NULL;
 
       info_ptr = read_alt_indirect_ref (unit, die_ref);
       if (first_time)
@@ -2955,7 +3505,7 @@ find_abstract_instance (struct comp_unit
 	    (_("DWARF error: unable to read alt ref %" PRIu64),
 	     (uint64_t) die_ref);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       info_ptr_end = (unit->stash->alt.dwarf_info_buffer
 		      + unit->stash->alt.dwarf_info_size);
@@ -2972,16 +3522,12 @@ find_abstract_instance (struct comp_unit
       else
 	{
 	  /* Check other CUs to see if they contain the abbrev.  */
-	  struct comp_unit *u;
-
-	  for (u = unit->prev_unit; u != NULL; u = u->prev_unit)
-	    if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
-	      break;
-
-	  if (u == NULL)
-	    for (u = unit->next_unit; u != NULL; u = u->next_unit)
-	      if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
-		break;
+	  struct comp_unit *u = NULL;
+	  struct addr_range range = { info_ptr, info_ptr };
+	  splay_tree_node v = splay_tree_lookup (unit->file->comp_unit_tree,
+						 (splay_tree_key)&range);
+	  if (v != NULL)
+	    u = (struct comp_unit *)v->value;
 
 	  if (attr_ptr->form == DW_FORM_ref_addr)
 	    while (u == NULL)
@@ -3011,7 +3557,7 @@ find_abstract_instance (struct comp_unit
 		(_("DWARF error: unable to locate abstract instance DIE ref %"
 		   PRIu64), (uint64_t) die_ref);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  unit = u;
 	  info_ptr_end = unit->end_ptr;
@@ -3032,15 +3578,13 @@ find_abstract_instance (struct comp_unit
 	  _bfd_error_handler
 	    (_("DWARF error: invalid abstract instance DIE ref"));
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       info_ptr += die_ref;
     }
 
-  abbrev_number = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read,
-					 FALSE, info_ptr_end);
-  info_ptr += bytes_read;
-
+  abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					 false, info_ptr_end);
   if (abbrev_number)
     {
       abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
@@ -3049,7 +3593,7 @@ find_abstract_instance (struct comp_unit
 	  _bfd_error_handler
 	    (_("DWARF error: could not find abbrev number %u"), abbrev_number);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       else
 	{
@@ -3064,37 +3608,43 @@ find_abstract_instance (struct comp_unit
 		case DW_AT_name:
 		  /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
 		     over DW_AT_name.  */
-		  if (name == NULL && is_str_attr (attr.form))
+		  if (*pname == NULL && is_str_form (&attr))
 		    {
-		      name = attr.u.str;
-		      if (non_mangled (unit->lang))
-			*is_linkage = TRUE;
+		      *pname = attr.u.str;
+		      if (mangle_style (unit->lang) == 0)
+			*is_linkage = true;
 		    }
 		  break;
 		case DW_AT_specification:
-		  if (!find_abstract_instance (unit, &attr, recur_count + 1,
-					       &name, is_linkage,
-					       filename_ptr, linenumber_ptr))
-		    return FALSE;
+		  if (is_int_form (&attr)
+		      && !find_abstract_instance (unit, &attr, recur_count + 1,
+						  pname, is_linkage,
+						  filename_ptr, linenumber_ptr))
+		    return false;
 		  break;
 		case DW_AT_linkage_name:
 		case DW_AT_MIPS_linkage_name:
 		  /* PR 16949:  Corrupt debug info can place
 		     non-string forms into these attributes.  */
-		  if (is_str_attr (attr.form))
+		  if (is_str_form (&attr))
 		    {
-		      name = attr.u.str;
-		      *is_linkage = TRUE;
+		      *pname = attr.u.str;
+		      *is_linkage = true;
 		    }
 		  break;
 		case DW_AT_decl_file:
 		  if (!comp_unit_maybe_decode_line_info (unit))
-		    return FALSE;
-		  *filename_ptr = concat_filename (unit->line_table,
-						   attr.u.val);
+		    return false;
+		  if (is_int_form (&attr))
+		    {
+		      free (*filename_ptr);
+		      *filename_ptr = concat_filename (unit->line_table,
+						       attr.u.val);
+		    }
 		  break;
 		case DW_AT_decl_line:
-		  *linenumber_ptr = attr.u.val;
+		  if (is_int_form (&attr))
+		    *linenumber_ptr = attr.u.val;
 		  break;
 		default:
 		  break;
@@ -3102,13 +3652,12 @@ find_abstract_instance (struct comp_unit
 	    }
 	}
     }
-  *pname = name;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
-read_rangelist (struct comp_unit *unit, struct arange *arange,
-		bfd_uint64_t offset)
+static bool
+read_ranges (struct comp_unit *unit, struct arange *arange,
+	     struct trie_node **trie_root, uint64_t offset)
 {
   bfd_byte *ranges_ptr;
   bfd_byte *ranges_end;
@@ -3117,12 +3666,12 @@ read_rangelist (struct comp_unit *unit,
   if (! unit->file->dwarf_ranges_buffer)
     {
       if (! read_debug_ranges (unit))
-	return FALSE;
+	return false;
     }
 
+  if (offset > unit->file->dwarf_ranges_size)
+    return false;
   ranges_ptr = unit->file->dwarf_ranges_buffer + offset;
-  if (ranges_ptr < unit->file->dwarf_ranges_buffer)
-    return FALSE;
   ranges_end = unit->file->dwarf_ranges_buffer + unit->file->dwarf_ranges_size;
 
   for (;;)
@@ -3131,74 +3680,219 @@ read_rangelist (struct comp_unit *unit,
       bfd_vma high_pc;
 
       /* PR 17512: file: 62cada7d.  */
-      if (ranges_ptr + 2 * unit->addr_size > ranges_end)
-	return FALSE;
+      if (2u * unit->addr_size > (size_t) (ranges_end - ranges_ptr))
+	return false;
 
-      low_pc = read_address (unit, ranges_ptr, ranges_end);
-      ranges_ptr += unit->addr_size;
-      high_pc = read_address (unit, ranges_ptr, ranges_end);
-      ranges_ptr += unit->addr_size;
+      low_pc = read_address (unit, &ranges_ptr, ranges_end);
+      high_pc = read_address (unit, &ranges_ptr, ranges_end);
 
       if (low_pc == 0 && high_pc == 0)
 	break;
-      if (low_pc == -1UL && high_pc != -1UL)
+      if (low_pc == (bfd_vma) -1 && high_pc != (bfd_vma) -1)
 	base_address = high_pc;
       else
 	{
-	  if (!arange_add (unit, arange,
+	  if (!arange_add (unit, arange, trie_root,
 			   base_address + low_pc, base_address + high_pc))
-	    return FALSE;
+	    return false;
 	}
     }
-  return TRUE;
+  return true;
+}
+
+static bool
+read_rnglists (struct comp_unit *unit, struct arange *arange,
+	       struct trie_node **trie_root, uint64_t offset)
+{
+  bfd_byte *rngs_ptr;
+  bfd_byte *rngs_end;
+  bfd_vma base_address = unit->base_address;
+  bfd_vma low_pc;
+  bfd_vma high_pc;
+  bfd *abfd = unit->abfd;
+
+  if (! unit->file->dwarf_rnglists_buffer)
+    {
+      if (! read_debug_rnglists (unit))
+	return false;
+    }
+
+  rngs_ptr = unit->file->dwarf_rnglists_buffer + offset;
+  if (rngs_ptr < unit->file->dwarf_rnglists_buffer)
+    return false;
+  rngs_end = unit->file->dwarf_rnglists_buffer;
+  rngs_end +=  unit->file->dwarf_rnglists_size;
+
+  for (;;)
+    {
+      enum dwarf_range_list_entry rlet;
+
+      if (rngs_ptr >= rngs_end)
+	return false;
+
+      rlet = read_1_byte (abfd, &rngs_ptr, rngs_end);
+
+      switch (rlet)
+	{
+	case DW_RLE_end_of_list:
+	  return true;
+
+	case DW_RLE_base_address:
+	  if (unit->addr_size > (size_t) (rngs_end - rngs_ptr))
+	    return false;
+	  base_address = read_address (unit, &rngs_ptr, rngs_end);
+	  continue;
+
+	case DW_RLE_start_length:
+	  if (unit->addr_size > (size_t) (rngs_end - rngs_ptr))
+	    return false;
+	  low_pc = read_address (unit, &rngs_ptr, rngs_end);
+	  high_pc = low_pc;
+	  high_pc += _bfd_safe_read_leb128 (abfd, &rngs_ptr,
+					    false, rngs_end);
+	  break;
+
+	case DW_RLE_offset_pair:
+	  low_pc = base_address;
+	  low_pc += _bfd_safe_read_leb128 (abfd, &rngs_ptr,
+					   false, rngs_end);
+	  high_pc = base_address;
+	  high_pc += _bfd_safe_read_leb128 (abfd, &rngs_ptr,
+					    false, rngs_end);
+	  break;
+
+	case DW_RLE_start_end:
+	  if (2u * unit->addr_size > (size_t) (rngs_end - rngs_ptr))
+	    return false;
+	  low_pc = read_address (unit, &rngs_ptr, rngs_end);
+	  high_pc = read_address (unit, &rngs_ptr, rngs_end);
+	  break;
+
+	/* TODO x-variants need .debug_addr support used for split-dwarf.  */
+	case DW_RLE_base_addressx:
+	case DW_RLE_startx_endx:
+	case DW_RLE_startx_length:
+	default:
+	  return false;
+	}
+
+      if (!arange_add (unit, arange, trie_root, low_pc, high_pc))
+	return false;
+    }
+}
+
+static bool
+read_rangelist (struct comp_unit *unit, struct arange *arange,
+		struct trie_node **trie_root, uint64_t offset)
+{
+  if (unit->version <= 4)
+    return read_ranges (unit, arange, trie_root, offset);
+  else
+    return read_rnglists (unit, arange, trie_root, offset);
+}
+
+static struct funcinfo *
+lookup_func_by_offset (uint64_t offset, struct funcinfo * table)
+{
+  for (; table != NULL; table = table->prev_func)
+    if (table->unit_offset == offset)
+      return table;
+  return NULL;
+}
+
+static struct varinfo *
+lookup_var_by_offset (uint64_t offset, struct varinfo * table)
+{
+  while (table)
+    {
+      if (table->unit_offset == offset)
+	return table;
+      table = table->prev_var;
+    }
+
+  return NULL;
 }
 
+
 /* DWARF2 Compilation unit functions.  */
 
+static struct funcinfo *
+reverse_funcinfo_list (struct funcinfo *head)
+{
+  struct funcinfo *rhead;
+  struct funcinfo *temp;
+
+  for (rhead = NULL; head; head = temp)
+    {
+      temp = head->prev_func;
+      head->prev_func = rhead;
+      rhead = head;
+    }
+  return rhead;
+}
+
+static struct varinfo *
+reverse_varinfo_list (struct varinfo *head)
+{
+  struct varinfo *rhead;
+  struct varinfo *temp;
+
+  for (rhead = NULL; head; head = temp)
+    {
+      temp = head->prev_var;
+      head->prev_var = rhead;
+      rhead = head;
+    }
+  return rhead;
+}
+
 /* Scan over each die in a comp. unit looking for functions to add
    to the function table and variables to the variable table.  */
 
-static bfd_boolean
+static bool
 scan_unit_for_symbols (struct comp_unit *unit)
 {
   bfd *abfd = unit->abfd;
   bfd_byte *info_ptr = unit->first_child_die_ptr;
   bfd_byte *info_ptr_end = unit->end_ptr;
   int nesting_level = 0;
-  struct nest_funcinfo {
+  struct nest_funcinfo
+  {
     struct funcinfo *func;
   } *nested_funcs;
   int nested_funcs_size;
-
+  struct funcinfo *last_func;
+  struct varinfo *last_var;
+  
   /* Maintain a stack of in-scope functions and inlined functions, which we
      can use to set the caller_func field.  */
   nested_funcs_size = 32;
   nested_funcs = (struct nest_funcinfo *)
     bfd_malloc (nested_funcs_size * sizeof (*nested_funcs));
   if (nested_funcs == NULL)
-    return FALSE;
+    return false;
   nested_funcs[nesting_level].func = 0;
 
+  /* PR 27484: We must scan the DIEs twice.  The first time we look for
+     function and variable tags and accumulate them into their respective
+     tables.  The second time through we process the attributes of the
+     functions/variables and augment the table entries.  */
   while (nesting_level >= 0)
     {
-      unsigned int abbrev_number, bytes_read, i;
+      unsigned int abbrev_number, i;
       struct abbrev_info *abbrev;
-      struct attribute attr;
       struct funcinfo *func;
       struct varinfo *var;
-      bfd_vma low_pc = 0;
-      bfd_vma high_pc = 0;
-      bfd_boolean high_pc_relative = FALSE;
+      uint64_t current_offset;
 
       /* PR 17512: file: 9f405d9d.  */
       if (info_ptr >= info_ptr_end)
 	goto fail;
 
-      abbrev_number = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read,
-					     FALSE, info_ptr_end);
-      info_ptr += bytes_read;
-
-      if (! abbrev_number)
+      current_offset = info_ptr - unit->info_ptr_unit;
+      abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					     false, info_ptr_end);
+      if (abbrev_number == 0)
 	{
 	  nesting_level--;
 	  continue;
@@ -3221,17 +3915,19 @@ scan_unit_for_symbols (struct comp_unit
 	  goto fail;
 	}
 
-      var = NULL;
       if (abbrev->tag == DW_TAG_subprogram
 	  || abbrev->tag == DW_TAG_entry_point
 	  || abbrev->tag == DW_TAG_inlined_subroutine)
 	{
-	  bfd_size_type amt = sizeof (struct funcinfo);
+	  size_t amt = sizeof (struct funcinfo);
+
+	  var = NULL;
 	  func = (struct funcinfo *) bfd_zalloc (abfd, amt);
 	  if (func == NULL)
 	    goto fail;
 	  func->tag = abbrev->tag;
 	  func->prev_func = unit->function_table;
+	  func->unit_offset = current_offset;
 	  unit->function_table = func;
 	  unit->number_of_functions++;
 	  BFD_ASSERT (!unit->cached);
@@ -3248,19 +3944,24 @@ scan_unit_for_symbols (struct comp_unit
       else
 	{
 	  func = NULL;
-	  if (abbrev->tag == DW_TAG_variable)
+	  if (abbrev->tag == DW_TAG_variable
+	      || abbrev->tag == DW_TAG_member)
 	    {
-	      bfd_size_type amt = sizeof (struct varinfo);
+	      size_t amt = sizeof (struct varinfo);
+
 	      var = (struct varinfo *) bfd_zalloc (abfd, amt);
 	      if (var == NULL)
 		goto fail;
 	      var->tag = abbrev->tag;
-	      var->stack = 1;
+	      var->stack = true;
 	      var->prev_var = unit->variable_table;
 	      unit->variable_table = var;
+	      var->unit_offset = current_offset;
 	      /* PR 18205: Missing debug information can cause this
 		 var to be attached to an already cached unit.  */
 	    }
+	  else
+	    var = NULL;
 
 	  /* No inline function in scope at this nesting level.  */
 	  nested_funcs[nesting_level].func = 0;
@@ -3268,6 +3969,109 @@ scan_unit_for_symbols (struct comp_unit
 
       for (i = 0; i < abbrev->num_attrs; ++i)
 	{
+	  struct attribute attr;
+
+	  info_ptr = read_attribute (&attr, &abbrev->attrs[i],
+				     unit, info_ptr, info_ptr_end);
+	  if (info_ptr == NULL)
+	    goto fail;
+	}
+
+      if (abbrev->has_children)
+	{
+	  nesting_level++;
+
+	  if (nesting_level >= nested_funcs_size)
+	    {
+	      struct nest_funcinfo *tmp;
+
+	      nested_funcs_size *= 2;
+	      tmp = (struct nest_funcinfo *)
+		bfd_realloc (nested_funcs,
+			     nested_funcs_size * sizeof (*nested_funcs));
+	      if (tmp == NULL)
+		goto fail;
+	      nested_funcs = tmp;
+	    }
+	  nested_funcs[nesting_level].func = 0;
+	}
+    }
+
+  unit->function_table = reverse_funcinfo_list (unit->function_table);
+  unit->variable_table = reverse_varinfo_list (unit->variable_table);
+
+  /* This is the second pass over the abbrevs.  */      
+  info_ptr = unit->first_child_die_ptr;
+  nesting_level = 0;
+  
+  last_func = NULL;
+  last_var = NULL;
+
+  while (nesting_level >= 0)
+    {
+      unsigned int abbrev_number, i;
+      struct abbrev_info *abbrev;
+      struct attribute attr;
+      struct funcinfo *func;
+      struct varinfo *var;
+      bfd_vma low_pc = 0;
+      bfd_vma high_pc = 0;
+      bool high_pc_relative = false;
+      uint64_t current_offset;
+
+      /* PR 17512: file: 9f405d9d.  */
+      if (info_ptr >= info_ptr_end)
+	goto fail;
+
+      current_offset = info_ptr - unit->info_ptr_unit;
+      abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					     false, info_ptr_end);
+      if (! abbrev_number)
+	{
+	  nesting_level--;
+	  continue;
+	}
+
+      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
+      /* This should have been handled above.  */
+      BFD_ASSERT (abbrev != NULL);
+
+      func = NULL;
+      var = NULL;
+      if (abbrev->tag == DW_TAG_subprogram
+	  || abbrev->tag == DW_TAG_entry_point
+	  || abbrev->tag == DW_TAG_inlined_subroutine)
+	{
+	  if (last_func
+	      && last_func->prev_func
+	      && last_func->prev_func->unit_offset == current_offset)
+	    func = last_func->prev_func;
+	  else
+	    func = lookup_func_by_offset (current_offset, unit->function_table);
+
+	  if (func == NULL)
+	    goto fail;
+
+	  last_func = func;
+	}
+      else if (abbrev->tag == DW_TAG_variable
+	       || abbrev->tag == DW_TAG_member)
+	{
+	  if (last_var
+	      && last_var->prev_var
+	      && last_var->prev_var->unit_offset == current_offset)
+	    var = last_var->prev_var;
+	  else
+	    var = lookup_var_by_offset (current_offset, unit->variable_table);
+
+	  if (var == NULL)
+	    goto fail;
+
+	  last_var = var;
+	}
+
+      for (i = 0; i < abbrev->num_attrs; ++i)
+	{
 	  info_ptr = read_attribute (&attr, &abbrev->attrs[i],
 				     unit, info_ptr, info_ptr_end);
 	  if (info_ptr == NULL)
@@ -3278,32 +4082,38 @@ scan_unit_for_symbols (struct comp_unit
 	      switch (attr.name)
 		{
 		case DW_AT_call_file:
-		  func->caller_file = concat_filename (unit->line_table,
-						       attr.u.val);
+		  if (is_int_form (&attr))
+		    {
+		      free (func->caller_file);
+		      func->caller_file = concat_filename (unit->line_table,
+							   attr.u.val);
+		    }
 		  break;
 
 		case DW_AT_call_line:
-		  func->caller_line = attr.u.val;
+		  if (is_int_form (&attr))
+		    func->caller_line = attr.u.val;
 		  break;
 
 		case DW_AT_abstract_origin:
 		case DW_AT_specification:
-		  if (!find_abstract_instance (unit, &attr, 0,
-					       &func->name,
-					       &func->is_linkage,
-					       &func->file,
-					       &func->line))
+		  if (is_int_form (&attr)
+		      && !find_abstract_instance (unit, &attr, 0,
+						  &func->name,
+						  &func->is_linkage,
+						  &func->file,
+						  &func->line))
 		    goto fail;
 		  break;
 
 		case DW_AT_name:
 		  /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
 		     over DW_AT_name.  */
-		  if (func->name == NULL && is_str_attr (attr.form))
+		  if (func->name == NULL && is_str_form (&attr))
 		    {
 		      func->name = attr.u.str;
-		      if (non_mangled (unit->lang))
-			func->is_linkage = TRUE;
+		      if (mangle_style (unit->lang) == 0)
+			func->is_linkage = true;
 		    }
 		  break;
 
@@ -3311,34 +4121,45 @@ scan_unit_for_symbols (struct comp_unit
 		case DW_AT_MIPS_linkage_name:
 		  /* PR 16949:  Corrupt debug info can place
 		     non-string forms into these attributes.  */
-		  if (is_str_attr (attr.form))
+		  if (is_str_form (&attr))
 		    {
 		      func->name = attr.u.str;
-		      func->is_linkage = TRUE;
+		      func->is_linkage = true;
 		    }
 		  break;
 
 		case DW_AT_low_pc:
-		  low_pc = attr.u.val;
+		  if (is_int_form (&attr))
+		    low_pc = attr.u.val;
 		  break;
 
 		case DW_AT_high_pc:
-		  high_pc = attr.u.val;
-		  high_pc_relative = attr.form != DW_FORM_addr;
+		  if (is_int_form (&attr))
+		    {
+		      high_pc = attr.u.val;
+		      high_pc_relative = attr.form != DW_FORM_addr;
+		    }
 		  break;
 
 		case DW_AT_ranges:
-		  if (!read_rangelist (unit, &func->arange, attr.u.val))
+		  if (is_int_form (&attr)
+		      && !read_rangelist (unit, &func->arange,
+					  &unit->file->trie_root, attr.u.val))
 		    goto fail;
 		  break;
 
 		case DW_AT_decl_file:
-		  func->file = concat_filename (unit->line_table,
-						attr.u.val);
+		  if (is_int_form (&attr))
+		    {
+		      free (func->file);
+		      func->file = concat_filename (unit->line_table,
+						    attr.u.val);
+		    }
 		  break;
 
 		case DW_AT_decl_line:
-		  func->line = attr.u.val;
+		  if (is_int_form (&attr))
+		    func->line = attr.u.val;
 		  break;
 
 		default:
@@ -3349,23 +4170,47 @@ scan_unit_for_symbols (struct comp_unit
 	    {
 	      switch (attr.name)
 		{
+		case DW_AT_specification:
+		  if (is_int_form (&attr) && attr.u.val)
+		    {
+		      bool is_linkage;
+		      if (!find_abstract_instance (unit, &attr, 0,
+						   &var->name,
+						   &is_linkage,
+						   &var->file,
+						   &var->line))
+			{
+			  _bfd_error_handler (_("DWARF error: could not find "
+						"variable specification "
+						"at offset 0x%lx"),
+					      (unsigned long) attr.u.val);
+			  break;
+			}
+		    }
+		  break;
+
 		case DW_AT_name:
-		  if (is_str_attr (attr.form))
+		  if (is_str_form (&attr))
 		    var->name = attr.u.str;
 		  break;
 
 		case DW_AT_decl_file:
-		  var->file = concat_filename (unit->line_table,
-					       attr.u.val);
+		  if (is_int_form (&attr))
+		    {
+		      free (var->file);
+		      var->file = concat_filename (unit->line_table,
+						   attr.u.val);
+		    }
 		  break;
 
 		case DW_AT_decl_line:
-		  var->line = attr.u.val;
+		  if (is_int_form (&attr))
+		    var->line = attr.u.val;
 		  break;
 
 		case DW_AT_external:
-		  if (attr.u.val != 0)
-		    var->stack = 0;
+		  if (is_int_form (&attr) && attr.u.val != 0)
+		    var->stack = false;
 		  break;
 
 		case DW_AT_location:
@@ -3379,7 +4224,7 @@ scan_unit_for_symbols (struct comp_unit
 		      if (attr.u.blk->data != NULL
 			  && *attr.u.blk->data == DW_OP_addr)
 			{
-			  var->stack = 0;
+			  var->stack = false;
 
 			  /* Verify that DW_OP_addr is the only opcode in the
 			     location, in which case the block size will be 1
@@ -3405,41 +4250,103 @@ scan_unit_for_symbols (struct comp_unit
 	    }
 	}
 
+      if (abbrev->has_children)
+	nesting_level++;
+
       if (high_pc_relative)
 	high_pc += low_pc;
 
       if (func && high_pc != 0)
 	{
-	  if (!arange_add (unit, &func->arange, low_pc, high_pc))
+	  if (!arange_add (unit, &func->arange, &unit->file->trie_root,
+			   low_pc, high_pc))
 	    goto fail;
 	}
-
-      if (abbrev->has_children)
-	{
-	  nesting_level++;
-
-	  if (nesting_level >= nested_funcs_size)
-	    {
-	      struct nest_funcinfo *tmp;
-
-	      nested_funcs_size *= 2;
-	      tmp = (struct nest_funcinfo *)
-		bfd_realloc (nested_funcs,
-			     nested_funcs_size * sizeof (*nested_funcs));
-	      if (tmp == NULL)
-		goto fail;
-	      nested_funcs = tmp;
-	    }
-	  nested_funcs[nesting_level].func = 0;
-	}
     }
 
+  unit->function_table = reverse_funcinfo_list (unit->function_table);
+  unit->variable_table = reverse_varinfo_list (unit->variable_table);
+
   free (nested_funcs);
-  return TRUE;
+  return true;
 
  fail:
   free (nested_funcs);
-  return FALSE;
+  return false;
+}
+
+/* Read the attributes of the form strx and addrx.  */
+
+static void
+reread_attribute (struct comp_unit *unit,
+		  struct attribute *attr,
+		  bfd_vma *low_pc,
+		  bfd_vma *high_pc,
+		  bool *high_pc_relative,
+		  bool compunit)
+{
+  if (is_strx_form (attr->form))
+    attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+  if (is_addrx_form (attr->form))
+    attr->u.val = read_indexed_address (attr->u.val, unit);
+
+  switch (attr->name)
+    {
+    case DW_AT_stmt_list:
+      unit->stmtlist = 1;
+      unit->line_offset = attr->u.val;
+      break;
+
+    case DW_AT_name:
+      if (is_str_form (attr))
+	unit->name = attr->u.str;
+      break;
+
+    case DW_AT_low_pc:
+      *low_pc = attr->u.val;
+      if (compunit)
+	unit->base_address = *low_pc;
+      break;
+
+    case DW_AT_high_pc:
+      *high_pc = attr->u.val;
+      *high_pc_relative = attr->form != DW_FORM_addr;
+      break;
+
+    case DW_AT_ranges:
+      if (!read_rangelist (unit, &unit->arange,
+			   &unit->file->trie_root, attr->u.val))
+	return;
+      break;
+
+    case DW_AT_comp_dir:
+      {
+	char *comp_dir = attr->u.str;
+
+	if (!is_str_form (attr))
+	  {
+	    _bfd_error_handler
+	      (_("DWARF error: DW_AT_comp_dir attribute encountered "
+		 "with a non-string form"));
+	    comp_dir = NULL;
+	  }
+
+	if (comp_dir)
+	  {
+	    char *cp = strchr (comp_dir, ':');
+
+	    if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
+	      comp_dir = cp + 1;
+	  }
+	unit->comp_dir = comp_dir;
+	break;
+      }
+
+    case DW_AT_language:
+      unit->lang = attr->u.val;
+    default:
+      break;
+    }
 }
 
 /* Parse a DWARF2 compilation unit starting at INFO_PTR.  UNIT_LENGTH
@@ -3461,23 +4368,26 @@ parse_comp_unit (struct dwarf2_debug *st
 {
   struct comp_unit* unit;
   unsigned int version;
-  bfd_uint64_t abbrev_offset = 0;
+  uint64_t abbrev_offset = 0;
   /* Initialize it just to avoid a GCC false warning.  */
   unsigned int addr_size = -1;
   struct abbrev_info** abbrevs;
-  unsigned int abbrev_number, bytes_read, i;
+  unsigned int abbrev_number, i;
   struct abbrev_info *abbrev;
   struct attribute attr;
   bfd_byte *end_ptr = info_ptr + unit_length;
-  bfd_size_type amt;
+  size_t amt;
   bfd_vma low_pc = 0;
   bfd_vma high_pc = 0;
   bfd *abfd = file->bfd_ptr;
-  bfd_boolean high_pc_relative = FALSE;
+  bool high_pc_relative = false;
   enum dwarf_unit_type unit_type;
+  struct attribute *str_addrp = NULL;
+  size_t str_count = 0;
+  size_t str_alloc = 0;
+  bool compunit_flag = false;
 
-  version = read_2_bytes (abfd, info_ptr, end_ptr);
-  info_ptr += 2;
+  version = read_2_bytes (abfd, &info_ptr, end_ptr);
   if (version < 2 || version > 5)
     {
       /* PR 19872: A version number of 0 probably means that there is padding
@@ -3498,33 +4408,36 @@ parse_comp_unit (struct dwarf2_debug *st
     unit_type = DW_UT_compile;
   else
     {
-      unit_type = read_1_byte (abfd, info_ptr, end_ptr);
-      info_ptr += 1;
-
-      addr_size = read_1_byte (abfd, info_ptr, end_ptr);
-      info_ptr += 1;
+      unit_type = read_1_byte (abfd, &info_ptr, end_ptr);
+      addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
     }
 
   BFD_ASSERT (offset_size == 4 || offset_size == 8);
   if (offset_size == 4)
-    abbrev_offset = read_4_bytes (abfd, info_ptr, end_ptr);
+    abbrev_offset = read_4_bytes (abfd, &info_ptr, end_ptr);
   else
-    abbrev_offset = read_8_bytes (abfd, info_ptr, end_ptr);
-  info_ptr += offset_size;
+    abbrev_offset = read_8_bytes (abfd, &info_ptr, end_ptr);
 
   if (version < 5)
-    {
-      addr_size = read_1_byte (abfd, info_ptr, end_ptr);
-      info_ptr += 1;
-    }
+    addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
 
-  if (unit_type == DW_UT_type)
+  switch (unit_type)
     {
+    case DW_UT_type:
       /* Skip type signature.  */
       info_ptr += 8;
 
       /* Skip type offset.  */
       info_ptr += offset_size;
+      break;
+
+    case DW_UT_skeleton:
+      /* Skip DWO_id field.  */
+      info_ptr += 8;
+      break;
+
+    default:
+      break;
     }
 
   if (addr_size > sizeof (bfd_vma))
@@ -3553,9 +4466,8 @@ parse_comp_unit (struct dwarf2_debug *st
   if (! abbrevs)
     return NULL;
 
-  abbrev_number = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read,
-					 FALSE, end_ptr);
-  info_ptr += bytes_read;
+  abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					 false, end_ptr);
   if (! abbrev_number)
     {
       /* PR 19872: An abbrev number of 0 probably means that there is padding
@@ -3588,43 +4500,76 @@ parse_comp_unit (struct dwarf2_debug *st
   unit->file = file;
   unit->info_ptr_unit = info_ptr_unit;
 
+  if (abbrev->tag == DW_TAG_compile_unit)
+    compunit_flag = true;
+
   for (i = 0; i < abbrev->num_attrs; ++i)
     {
       info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr, end_ptr);
       if (info_ptr == NULL)
-	return NULL;
+	goto err_exit;
+
+      /* Identify attributes of the form strx* and addrx* which come before
+	 DW_AT_str_offsets_base and DW_AT_addr_base respectively in the CU.
+	 Store the attributes in an array and process them later.  */
+      if ((unit->dwarf_str_offset == 0 && is_strx_form (attr.form))
+	  || (unit->dwarf_addr_offset == 0 && is_addrx_form (attr.form)))
+	{
+	  if (str_count <= str_alloc)
+	    {
+	      str_alloc = 2 * str_alloc + 200;
+	      str_addrp = bfd_realloc (str_addrp,
+				       str_alloc * sizeof (*str_addrp));
+	      if (str_addrp == NULL)
+		goto err_exit;
+	    }
+	  str_addrp[str_count] = attr;
+	  str_count++;
+	  continue;
+	}
 
       /* Store the data if it is of an attribute we want to keep in a
 	 partial symbol table.  */
       switch (attr.name)
 	{
 	case DW_AT_stmt_list:
-	  unit->stmtlist = 1;
-	  unit->line_offset = attr.u.val;
+	  if (is_int_form (&attr))
+	    {
+	      unit->stmtlist = 1;
+	      unit->line_offset = attr.u.val;
+	    }
 	  break;
 
 	case DW_AT_name:
-	  if (is_str_attr (attr.form))
+	  if (is_str_form (&attr))
 	    unit->name = attr.u.str;
 	  break;
 
 	case DW_AT_low_pc:
-	  low_pc = attr.u.val;
-	  /* If the compilation unit DIE has a DW_AT_low_pc attribute,
-	     this is the base address to use when reading location
-	     lists or range lists.  */
-	  if (abbrev->tag == DW_TAG_compile_unit)
-	    unit->base_address = low_pc;
+	  if (is_int_form (&attr))
+	    {
+	      low_pc = attr.u.val;
+	      /* If the compilation unit DIE has a DW_AT_low_pc attribute,
+		 this is the base address to use when reading location
+		 lists or range lists.  */
+	      if (compunit_flag)
+		unit->base_address = low_pc;
+	    }
 	  break;
 
 	case DW_AT_high_pc:
-	  high_pc = attr.u.val;
-	  high_pc_relative = attr.form != DW_FORM_addr;
+	  if (is_int_form (&attr))
+	    {
+	      high_pc = attr.u.val;
+	      high_pc_relative = attr.form != DW_FORM_addr;
+	    }
 	  break;
 
 	case DW_AT_ranges:
-	  if (!read_rangelist (unit, &unit->arange, attr.u.val))
-	    return NULL;
+	  if (is_int_form (&attr)
+	      && !read_rangelist (unit, &unit->arange,
+				  &unit->file->trie_root, attr.u.val))
+	    goto err_exit;
 	  break;
 
 	case DW_AT_comp_dir:
@@ -3632,7 +4577,7 @@ parse_comp_unit (struct dwarf2_debug *st
 	    char *comp_dir = attr.u.str;
 
 	    /* PR 17512: file: 1fe726be.  */
-	    if (! is_str_attr (attr.form))
+	    if (!is_str_form (&attr))
 	      {
 		_bfd_error_handler
 		  (_("DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"));
@@ -3653,23 +4598,45 @@ parse_comp_unit (struct dwarf2_debug *st
 	  }
 
 	case DW_AT_language:
-	  unit->lang = attr.u.val;
+	  if (is_int_form (&attr))
+	    unit->lang = attr.u.val;
+	  break;
+
+	case DW_AT_addr_base:
+	  unit->dwarf_addr_offset = attr.u.val;
+	  break;
+
+	case DW_AT_str_offsets_base:
+	  unit->dwarf_str_offset = attr.u.val;
 	  break;
 
 	default:
 	  break;
 	}
     }
+
+  for (i = 0; i < str_count; ++i)
+    reread_attribute (unit, &str_addrp[i], &low_pc, &high_pc,
+		      &high_pc_relative, compunit_flag);
+
   if (high_pc_relative)
     high_pc += low_pc;
   if (high_pc != 0)
     {
-      if (!arange_add (unit, &unit->arange, low_pc, high_pc))
-	return NULL;
+      if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
+		       low_pc, high_pc))
+	goto err_exit;
     }
 
   unit->first_child_die_ptr = info_ptr;
+
+  free (str_addrp);
   return unit;
+
+ err_exit:
+  unit->error = 1;
+  free (str_addrp);
+  return NULL;
 }
 
 /* Return TRUE if UNIT may contain the address given by ADDR.  When
@@ -3678,35 +4645,31 @@ parse_comp_unit (struct dwarf2_debug *st
    need to consult the line info table to see if a compilation unit
    really contains the given address.  */
 
-static bfd_boolean
-comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
+static bool
+comp_unit_may_contain_address (struct comp_unit *unit, bfd_vma addr)
 {
   struct arange *arange;
 
   if (unit->error)
-    return FALSE;
+    return false;
 
-  arange = &unit->arange;
-  do
-    {
-      if (addr >= arange->low && addr < arange->high)
-	return TRUE;
-      arange = arange->next;
-    }
-  while (arange);
+  if (unit->arange.high == 0 /* No ranges have been computed yet.  */
+      || unit->line_table == NULL) /* The line info table has not been loaded.  */
+    return true;
+
+  for (arange = &unit->arange; arange != NULL; arange = arange->next)
+    if (addr >= arange->low && addr < arange->high)
+      return true;
 
-  return FALSE;
+  return false;
 }
 
 /* If UNIT contains ADDR, set the output parameters to the values for
-   the line containing ADDR.  The output parameters, FILENAME_PTR,
-   FUNCTION_PTR, and LINENUMBER_PTR, are pointers to the objects
-   to be filled in.
-
-   Returns the range of addresses covered by the entry that was used
-   to fill in *LINENUMBER_PTR or 0 if it was not filled in.  */
+   the line containing ADDR and return TRUE.  Otherwise return FALSE.
+   The output parameters, FILENAME_PTR, FUNCTION_PTR, and
+   LINENUMBER_PTR, are pointers to the objects to be filled in.  */
 
-static bfd_vma
+static bool
 comp_unit_find_nearest_line (struct comp_unit *unit,
 			     bfd_vma addr,
 			     const char **filename_ptr,
@@ -3714,38 +4677,40 @@ comp_unit_find_nearest_line (struct comp
 			     unsigned int *linenumber_ptr,
 			     unsigned int *discriminator_ptr)
 {
-  bfd_boolean func_p;
+  bool line_p, func_p;
 
   if (!comp_unit_maybe_decode_line_info (unit))
-    return FALSE;
+    return false;
 
   *function_ptr = NULL;
   func_p = lookup_address_in_function_table (unit, addr, function_ptr);
+
   if (func_p && (*function_ptr)->tag == DW_TAG_inlined_subroutine)
     unit->stash->inliner_chain = *function_ptr;
 
-  return lookup_address_in_line_info_table (unit->line_table, addr,
-					    filename_ptr,
-					    linenumber_ptr,
-					    discriminator_ptr);
+  line_p = lookup_address_in_line_info_table (unit->line_table, addr,
+					      filename_ptr,
+					      linenumber_ptr,
+					      discriminator_ptr);
+  return line_p || func_p;
 }
 
 /* Check to see if line info is already decoded in a comp_unit.
    If not, decode it.  Returns TRUE if no errors were encountered;
    FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 comp_unit_maybe_decode_line_info (struct comp_unit *unit)
 {
   if (unit->error)
-    return FALSE;
+    return false;
 
   if (! unit->line_table)
     {
       if (! unit->stmtlist)
 	{
 	  unit->error = 1;
-	  return FALSE;
+	  return false;
 	}
 
       unit->line_table = decode_line_info (unit);
@@ -3753,18 +4718,18 @@ comp_unit_maybe_decode_line_info (struct
       if (! unit->line_table)
 	{
 	  unit->error = 1;
-	  return FALSE;
+	  return false;
 	}
 
       if (unit->first_child_die_ptr < unit->end_ptr
 	  && ! scan_unit_for_symbols (unit))
 	{
 	  unit->error = 1;
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* If UNIT contains SYM at ADDR, set the output parameters to the
@@ -3775,7 +4740,7 @@ comp_unit_maybe_decode_line_info (struct
    Return TRUE if UNIT contains SYM, and no errors were encountered;
    FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 comp_unit_find_line (struct comp_unit *unit,
 		     asymbol *sym,
 		     bfd_vma addr,
@@ -3783,7 +4748,7 @@ comp_unit_find_line (struct comp_unit *u
 		     unsigned int *linenumber_ptr)
 {
   if (!comp_unit_maybe_decode_line_info (unit))
-    return FALSE;
+    return false;
 
   if (sym->flags & BSF_FUNCTION)
     return lookup_symbol_in_function_table (unit, sym, addr,
@@ -3795,41 +4760,11 @@ comp_unit_find_line (struct comp_unit *u
 					  linenumber_ptr);
 }
 
-static struct funcinfo *
-reverse_funcinfo_list (struct funcinfo *head)
-{
-  struct funcinfo *rhead;
-  struct funcinfo *temp;
-
-  for (rhead = NULL; head; head = temp)
-    {
-      temp = head->prev_func;
-      head->prev_func = rhead;
-      rhead = head;
-    }
-  return rhead;
-}
-
-static struct varinfo *
-reverse_varinfo_list (struct varinfo *head)
-{
-  struct varinfo *rhead;
-  struct varinfo *temp;
-
-  for (rhead = NULL; head; head = temp)
-    {
-      temp = head->prev_var;
-      head->prev_var = rhead;
-      rhead = head;
-    }
-  return rhead;
-}
-
 /* Extract all interesting funcinfos and varinfos of a compilation
    unit into hash tables for faster lookup.  Returns TRUE if no
    errors were enountered; FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 comp_unit_hash_info (struct dwarf2_debug *stash,
 		     struct comp_unit *unit,
 		     struct info_hash_table *funcinfo_hash_table,
@@ -3837,12 +4772,12 @@ comp_unit_hash_info (struct dwarf2_debug
 {
   struct funcinfo* each_func;
   struct varinfo* each_var;
-  bfd_boolean okay = TRUE;
+  bool okay = true;
 
   BFD_ASSERT (stash->info_hash_status != STASH_INFO_HASH_DISABLED);
 
   if (!comp_unit_maybe_decode_line_info (unit))
-    return FALSE;
+    return false;
 
   BFD_ASSERT (!unit->cached);
 
@@ -3862,11 +4797,11 @@ comp_unit_hash_info (struct dwarf2_debug
 	   name string is either in the dwarf string buffer or
 	   info in the stash.  */
 	okay = insert_info_hash_table (funcinfo_hash_table, each_func->name,
-				       (void*) each_func, FALSE);
+				       (void*) each_func, false);
     }
   unit->function_table = reverse_funcinfo_list (unit->function_table);
   if (!okay)
-    return FALSE;
+    return false;
 
   /* We do the same for variable infos.  */
   unit->variable_table = reverse_varinfo_list (unit->variable_table);
@@ -3875,18 +4810,18 @@ comp_unit_hash_info (struct dwarf2_debug
        each_var = each_var->prev_var)
     {
       /* Skip stack vars and vars with no files or names.  */
-      if (each_var->stack == 0
+      if (! each_var->stack
 	  && each_var->file != NULL
 	  && each_var->name != NULL)
 	/* There is no need to copy name string into hash table as
 	   name string is either in the dwarf string buffer or
 	   info in the stash.  */
 	okay = insert_info_hash_table (varinfo_hash_table, each_var->name,
-				       (void*) each_var, FALSE);
+				       (void*) each_var, false);
     }
 
   unit->variable_table = reverse_varinfo_list (unit->variable_table);
-  unit->cached = TRUE;
+  unit->cached = true;
   return okay;
 }
 
@@ -3913,19 +4848,19 @@ find_debug_info (bfd *abfd, const struct
     {
       look = debug_sections[debug_info].uncompressed_name;
       msec = bfd_get_section_by_name (abfd, look);
-      if (msec != NULL)
+      /* Testing SEC_HAS_CONTENTS is an anti-fuzzer measure.  Of
+	 course debug sections always have contents.  */
+      if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
 	return msec;
 
       look = debug_sections[debug_info].compressed_name;
-      if (look != NULL)
-	{
-	  msec = bfd_get_section_by_name (abfd, look);
-	  if (msec != NULL)
-	    return msec;
-	}
+      msec = bfd_get_section_by_name (abfd, look);
+      if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
+        return msec;
 
       for (msec = abfd->sections; msec != NULL; msec = msec->next)
-	if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
+	if ((msec->flags & SEC_HAS_CONTENTS) != 0
+	    && startswith (msec->name, GNU_LINKONCE_INFO))
 	  return msec;
 
       return NULL;
@@ -3933,6 +4868,9 @@ find_debug_info (bfd *abfd, const struct
 
   for (msec = after_sec->next; msec != NULL; msec = msec->next)
     {
+      if ((msec->flags & SEC_HAS_CONTENTS) == 0)
+	continue;
+
       look = debug_sections[debug_info].uncompressed_name;
       if (strcmp (msec->name, look) == 0)
 	return msec;
@@ -3941,7 +4879,7 @@ find_debug_info (bfd *abfd, const struct
       if (look != NULL && strcmp (msec->name, look) == 0)
 	return msec;
 
-      if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
+      if (startswith (msec->name, GNU_LINKONCE_INFO))
 	return msec;
     }
 
@@ -4018,7 +4956,7 @@ unset_sections (struct dwarf2_debug *sta
   i = stash->adjusted_section_count;
   p = stash->adjusted_sections;
   for (; i > 0; i--, p++)
-    p->section->vma = 0;
+    p->section->vma = p->orig_vma;
 }
 
 /* Set VMAs for allocated and .debug_info sections in ORIG_BFD, a
@@ -4031,7 +4969,7 @@ unset_sections (struct dwarf2_debug *sta
    logical section.  ??? We should probably do the same for other
    debug sections.  */
 
-static bfd_boolean
+static bool
 place_sections (bfd *orig_bfd, struct dwarf2_debug *stash)
 {
   bfd *abfd;
@@ -4045,7 +4983,7 @@ place_sections (bfd *orig_bfd, struct dw
       p = stash->adjusted_sections;
       for (; i > 0; i--, p++)
 	p->section->vma = p->adj_vma;
-      return TRUE;
+      return true;
     }
 
   debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
@@ -4059,14 +4997,13 @@ place_sections (bfd *orig_bfd, struct dw
 	{
 	  int is_debug_info;
 
-	  if ((sect->output_section != NULL
-	       && sect->output_section != sect
-	       && (sect->flags & SEC_DEBUGGING) == 0)
-	      || sect->vma != 0)
+	  if (sect->output_section != NULL
+	      && sect->output_section != sect
+	      && (sect->flags & SEC_DEBUGGING) == 0)
 	    continue;
 
 	  is_debug_info = (strcmp (sect->name, debug_info_name) == 0
-			   || CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO));
+			   || startswith (sect->name, GNU_LINKONCE_INFO));
 
 	  if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
 	      && !is_debug_info)
@@ -4084,11 +5021,11 @@ place_sections (bfd *orig_bfd, struct dw
   else
     {
       bfd_vma last_vma = 0, last_dwarf = 0;
-      bfd_size_type amt = i * sizeof (struct adjusted_section);
+      size_t amt = i * sizeof (struct adjusted_section);
 
       p = (struct adjusted_section *) bfd_malloc (amt);
       if (p == NULL)
-	return FALSE;
+	return false;
 
       stash->adjusted_sections = p;
       stash->adjusted_section_count = i;
@@ -4103,14 +5040,13 @@ place_sections (bfd *orig_bfd, struct dw
 	      bfd_size_type sz;
 	      int is_debug_info;
 
-	      if ((sect->output_section != NULL
-		   && sect->output_section != sect
-		   && (sect->flags & SEC_DEBUGGING) == 0)
-		  || sect->vma != 0)
+	      if (sect->output_section != NULL
+		  && sect->output_section != sect
+		  && (sect->flags & SEC_DEBUGGING) == 0)
 		continue;
 
 	      is_debug_info = (strcmp (sect->name, debug_info_name) == 0
-			       || CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO));
+			       || startswith (sect->name, GNU_LINKONCE_INFO));
 
 	      if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
 		  && !is_debug_info)
@@ -4118,24 +5054,17 @@ place_sections (bfd *orig_bfd, struct dw
 
 	      sz = sect->rawsize ? sect->rawsize : sect->size;
 
-	      if (is_debug_info)
-		{
-		  BFD_ASSERT (sect->alignment_power == 0);
-		  sect->vma = last_dwarf;
-		  last_dwarf += sz;
-		}
-	      else
-		{
-		  /* Align the new address to the current section
-		     alignment.  */
-		  last_vma = ((last_vma
-			       + ~(-((bfd_vma) 1 << sect->alignment_power)))
-			      & (-((bfd_vma) 1 << sect->alignment_power)));
-		  sect->vma = last_vma;
-		  last_vma += sz;
-		}
-
 	      p->section = sect;
+	      p->orig_vma = sect->vma;
+
+	      bfd_vma *v = is_debug_info ? &last_dwarf : &last_vma;
+	      /* Align the new address to the current section
+		 alignment.  */
+	      bfd_vma mask = -(bfd_vma) 1 << sect->alignment_power;
+	      *v = (*v + ~mask) & mask;
+	      sect->vma = *v;
+	      *v += sz;
+
 	      p->adj_vma = sect->vma;
 	      p++;
 	    }
@@ -4148,7 +5077,7 @@ place_sections (bfd *orig_bfd, struct dw
   if (orig_bfd != stash->f.bfd_ptr)
     set_debug_vma (orig_bfd, stash->f.bfd_ptr);
 
-  return TRUE;
+  return true;
 }
 
 /* Look up a funcinfo by name using the given info hash table.  If found,
@@ -4157,7 +5086,7 @@ place_sections (bfd *orig_bfd, struct dw
    This function returns TRUE if a funcinfo that matches the given symbol
    and address is found with any error; otherwise it returns FALSE.  */
 
-static bfd_boolean
+static bool
 info_hash_lookup_funcinfo (struct info_hash_table *hash_table,
 			   asymbol *sym,
 			   bfd_vma addr,
@@ -4166,11 +5095,10 @@ info_hash_lookup_funcinfo (struct info_h
 {
   struct funcinfo* each_func;
   struct funcinfo* best_fit = NULL;
-  bfd_vma best_fit_len = 0;
+  bfd_vma best_fit_len = (bfd_vma) -1;
   struct info_list_node *node;
   struct arange *arange;
   const char *name = bfd_asymbol_name (sym);
-  asection *sec = bfd_asymbol_section (sym);
 
   for (node = lookup_info_hash_table (hash_table, name);
        node;
@@ -4181,11 +5109,9 @@ info_hash_lookup_funcinfo (struct info_h
 	   arange;
 	   arange = arange->next)
 	{
-	  if ((!each_func->sec || each_func->sec == sec)
-	      && addr >= arange->low
+	  if (addr >= arange->low
 	      && addr < arange->high
-	      && (!best_fit
-		  || arange->high - arange->low < best_fit_len))
+	      && arange->high - arange->low < best_fit_len)
 	    {
 	      best_fit = each_func;
 	      best_fit_len = arange->high - arange->low;
@@ -4195,13 +5121,12 @@ info_hash_lookup_funcinfo (struct info_h
 
   if (best_fit)
     {
-      best_fit->sec = sec;
       *filename_ptr = best_fit->file;
       *linenumber_ptr = best_fit->line;
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Look up a varinfo by name using the given info hash table.  If found,
@@ -4210,48 +5135,45 @@ info_hash_lookup_funcinfo (struct info_h
    This function returns TRUE if a varinfo that matches the given symbol
    and address is found with any error; otherwise it returns FALSE.  */
 
-static bfd_boolean
+static bool
 info_hash_lookup_varinfo (struct info_hash_table *hash_table,
 			  asymbol *sym,
 			  bfd_vma addr,
 			  const char **filename_ptr,
 			  unsigned int *linenumber_ptr)
 {
-  const char *name = bfd_asymbol_name (sym);
-  asection *sec = bfd_asymbol_section (sym);
   struct varinfo* each;
   struct info_list_node *node;
+  const char *name = bfd_asymbol_name (sym);
 
   for (node = lookup_info_hash_table (hash_table, name);
        node;
        node = node->next)
     {
       each = (struct varinfo *) node->info;
-      if (each->addr == addr
-	  && (!each->sec || each->sec == sec))
+      if (each->addr == addr)
 	{
-	  each->sec = sec;
 	  *filename_ptr = each->file;
 	  *linenumber_ptr = each->line;
-	  return TRUE;
+	  return true;
 	}
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Update the funcinfo and varinfo info hash tables if they are
    not up to date.  Returns TRUE if there is no error; otherwise
    returns FALSE and disable the info hash tables.  */
 
-static bfd_boolean
+static bool
 stash_maybe_update_info_hash_tables (struct dwarf2_debug *stash)
 {
   struct comp_unit *each;
 
   /* Exit if hash tables are up-to-date.  */
   if (stash->f.all_comp_units == stash->hash_units_head)
-    return TRUE;
+    return true;
 
   if (stash->hash_units_head)
     each = stash->hash_units_head->prev_unit;
@@ -4264,13 +5186,13 @@ stash_maybe_update_info_hash_tables (str
 				stash->varinfo_hash_table))
 	{
 	  stash->info_hash_status = STASH_INFO_HASH_DISABLED;
-	  return FALSE;
+	  return false;
 	}
       each = each->prev_unit;
     }
 
   stash->hash_units_head = stash->f.all_comp_units;
-  return TRUE;
+  return true;
 }
 
 /* Check consistency of info hash tables.  This is for debugging only.  */
@@ -4282,7 +5204,7 @@ stash_verify_info_hash_table (struct dwa
   struct funcinfo *each_func;
   struct varinfo *each_var;
   struct info_list_node *node;
-  bfd_boolean found;
+  bool found;
 
   for (each_unit = stash->f.all_comp_units;
        each_unit;
@@ -4297,7 +5219,7 @@ stash_verify_info_hash_table (struct dwa
 	  node = lookup_info_hash_table (stash->funcinfo_hash_table,
 					 each_func->name);
 	  BFD_ASSERT (node);
-	  found = FALSE;
+	  found = false;
 	  while (node && !found)
 	    {
 	      found = node->info == each_func;
@@ -4315,7 +5237,7 @@ stash_verify_info_hash_table (struct dwa
 	  node = lookup_info_hash_table (stash->varinfo_hash_table,
 					 each_var->name);
 	  BFD_ASSERT (node);
-	  found = FALSE;
+	  found = false;
 	  while (node && !found)
 	    {
 	      found = node->info == each_var;
@@ -4363,7 +5285,7 @@ stash_maybe_enable_info_hash_tables (bfd
    TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
    otherwise it returns FALSE.  */
 
-static bfd_boolean
+static bool
 stash_find_line_fast (struct dwarf2_debug *stash,
 		      asymbol *sym,
 		      bfd_vma addr,
@@ -4381,17 +5303,17 @@ stash_find_line_fast (struct dwarf2_debu
 
 /* Save current section VMAs.  */
 
-static bfd_boolean
+static bool
 save_section_vma (const bfd *abfd, struct dwarf2_debug *stash)
 {
   asection *s;
   unsigned int i;
 
   if (abfd->section_count == 0)
-    return TRUE;
+    return true;
   stash->sec_vma = bfd_malloc (sizeof (*stash->sec_vma) * abfd->section_count);
   if (stash->sec_vma == NULL)
-    return FALSE;
+    return false;
   stash->sec_vma_count = abfd->section_count;
   for (i = 0, s = abfd->sections;
        s != NULL && i < abfd->section_count;
@@ -4402,7 +5324,7 @@ save_section_vma (const bfd *abfd, struc
       else
 	stash->sec_vma[i] = s->vma;
     }
-  return TRUE;
+  return true;
 }
 
 /* Compare current section VMAs against those at the time the stash
@@ -4412,7 +5334,7 @@ save_section_vma (const bfd *abfd, struc
    sections, so the stashed section contents depend on symbol values,
    which in turn depend on section VMAs.  */
 
-static bfd_boolean
+static bool
 section_vma_same (const bfd *abfd, const struct dwarf2_debug *stash)
 {
   asection *s;
@@ -4422,7 +5344,7 @@ section_vma_same (const bfd *abfd, const
      when the stash was created and now, then we cannot trust the
      stashed vma information.  */
   if (abfd->section_count != stash->sec_vma_count)
-    return FALSE;
+    return false;
 
   for (i = 0, s = abfd->sections;
        s != NULL && i < abfd->section_count;
@@ -4435,9 +5357,9 @@ section_vma_same (const bfd *abfd, const
       else
 	vma = s->vma;
       if (vma != stash->sec_vma[i])
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
@@ -4445,14 +5367,13 @@ section_vma_same (const bfd *abfd, const
    or its gnu_debuglink. The results will be stored in PINFO.
    The function returns TRUE iff debug information is ready.  */
 
-bfd_boolean
+bool
 _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
 			      const struct dwarf_debug_section *debug_sections,
 			      asymbol **symbols,
 			      void **pinfo,
-			      bfd_boolean do_place)
+			      bool do_place)
 {
-  bfd_size_type amt = sizeof (struct dwarf2_debug);
   bfd_size_type total_size;
   asection *msec;
   struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
@@ -4464,41 +5385,48 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
 	{
 	  /* Check that we did previously find some debug information
 	     before attempting to make use of it.  */
-	  if (stash->f.bfd_ptr != NULL)
+	  if (stash->f.dwarf_info_size != 0)
 	    {
 	      if (do_place && !place_sections (abfd, stash))
-		return FALSE;
-	      return TRUE;
+		return false;
+	      return true;
 	    }
 
-	  return FALSE;
+	  return false;
 	}
       _bfd_dwarf2_cleanup_debug_info (abfd, pinfo);
-      memset (stash, 0, amt);
+      memset (stash, 0, sizeof (*stash));
     }
   else
     {
-      stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt);
+      stash = (struct dwarf2_debug *) bfd_zalloc (abfd, sizeof (*stash));
       if (! stash)
-	return FALSE;
+	return false;
+      *pinfo = stash;
     }
   stash->orig_bfd = abfd;
   stash->debug_sections = debug_sections;
   stash->f.syms = symbols;
   if (!save_section_vma (abfd, stash))
-    return FALSE;
+    return false;
 
   stash->f.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
 					       del_abbrev, calloc, free);
   if (!stash->f.abbrev_offsets)
-    return FALSE;
+    return false;
 
   stash->alt.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
 						 del_abbrev, calloc, free);
   if (!stash->alt.abbrev_offsets)
-    return FALSE;
+    return false;
 
-  *pinfo = stash;
+  stash->f.trie_root = alloc_trie_leaf (abfd);
+  if (!stash->f.trie_root)
+    return false;
+
+  stash->alt.trie_root = alloc_trie_leaf (abfd);
+  if (!stash->alt.trie_root)
+    return false;
 
   if (debug_bfd == NULL)
     debug_bfd = abfd;
@@ -4517,13 +5445,13 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
 	   Note that at this point the stash has been allocated, but
 	   contains zeros.  This lets future calls to this function
 	   fail more quickly.  */
-	return FALSE;
+	return false;
 
       debug_bfd = bfd_openr (debug_filename, NULL);
       free (debug_filename);
       if (debug_bfd == NULL)
 	/* FIXME: Should we report our failure to follow the debuglink ?  */
-	return FALSE;
+	return false;
 
       /* Set BFD_DECOMPRESS to decompress debug sections.  */
       debug_bfd->flags |= BFD_DECOMPRESS;
@@ -4533,29 +5461,26 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
 	  || !bfd_generic_link_read_symbols (debug_bfd))
 	{
 	  bfd_close (debug_bfd);
-	  return FALSE;
+	  return false;
 	}
 
       symbols = bfd_get_outsymbols (debug_bfd);
       stash->f.syms = symbols;
-      stash->close_on_cleanup = TRUE;
+      stash->close_on_cleanup = true;
     }
   stash->f.bfd_ptr = debug_bfd;
 
   if (do_place
       && !place_sections (abfd, stash))
-    return FALSE;
+    return false;
 
   /* There can be more than one DWARF2 info section in a BFD these
      days.  First handle the easy case when there's only one.  If
-     there's more than one, try case two: none of the sections is
-     compressed.  In that case, read them all in and produce one
-     large stash.  We do this in two passes - in the first pass we
+     there's more than one, try case two: read them all in and produce
+     one large stash.  We do this in two passes - in the first pass we
      just accumulate the section sizes, and in the second pass we
      read in the section's contents.  (The allows us to avoid
-     reallocing the data as we add sections to the stash.)  If
-     some or all sections are compressed, then do things the slow
-     way, with a bunch of reallocs.  */
+     reallocing the data as we add sections to the stash.)  */
 
   if (! find_debug_info (debug_bfd, debug_sections, msec))
     {
@@ -4564,7 +5489,7 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
       if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
 			  symbols, 0,
 			  &stash->f.dwarf_info_buffer, &total_size))
-	return FALSE;
+	goto restore_vma;
     }
   else
     {
@@ -4573,19 +5498,20 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
 	   msec;
 	   msec = find_debug_info (debug_bfd, debug_sections, msec))
 	{
+	  if (_bfd_section_size_insane (debug_bfd, msec))
+	    goto restore_vma;
 	  /* Catch PR25070 testcase overflowing size calculation here.  */
-	  if (total_size + msec->size < total_size
-	      || total_size + msec->size < msec->size)
+	  if (total_size + msec->size < total_size)
 	    {
 	      bfd_set_error (bfd_error_no_memory);
-	      return FALSE;
+	      goto restore_vma;
 	    }
 	  total_size += msec->size;
 	}
 
       stash->f.dwarf_info_buffer = (bfd_byte *) bfd_malloc (total_size);
       if (stash->f.dwarf_info_buffer == NULL)
-	return FALSE;
+	goto restore_vma;
 
       total_size = 0;
       for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
@@ -4601,7 +5527,7 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
 	  if (!(bfd_simple_get_relocated_section_contents
 		(debug_bfd, msec, stash->f.dwarf_info_buffer + total_size,
 		 symbols)))
-	    return FALSE;
+	    goto restore_vma;
 
 	  total_size += size;
 	}
@@ -4609,7 +5535,11 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
 
   stash->f.info_ptr = stash->f.dwarf_info_buffer;
   stash->f.dwarf_info_size = total_size;
-  return TRUE;
+  return true;
+
+ restore_vma:
+  unset_sections (stash);
+  return false;
 }
 
 /* Parse the next DWARF2 compilation unit at FILE->INFO_PTR.  */
@@ -4625,15 +5555,13 @@ stash_comp_unit (struct dwarf2_debug *st
   if (file->info_ptr >= info_ptr_end)
     return NULL;
 
-  length = read_4_bytes (file->bfd_ptr, file->info_ptr, info_ptr_end);
+  length = read_4_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
   /* A 0xffffff length is the DWARF3 way of indicating
      we use 64-bit offsets, instead of 32-bit offsets.  */
   if (length == 0xffffffff)
     {
       offset_size = 8;
-      length = read_8_bytes (file->bfd_ptr, file->info_ptr + 4,
-			     info_ptr_end);
-      file->info_ptr += 12;
+      length = read_8_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
     }
   /* A zero length is the IRIX way of indicating 64-bit offsets,
      mostly because the 64-bit length will generally fit in 32
@@ -4641,9 +5569,7 @@ stash_comp_unit (struct dwarf2_debug *st
   else if (length == 0)
     {
       offset_size = 8;
-      length = read_4_bytes (file->bfd_ptr, file->info_ptr + 4,
-			     info_ptr_end);
-      file->info_ptr += 8;
+      length = read_4_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
     }
   /* In the absence of the hints above, we assume 32-bit DWARF2
      offsets even for targets with 64-bit addresses, because:
@@ -4655,20 +5581,32 @@ stash_comp_unit (struct dwarf2_debug *st
      the size hints that are tested for above then they are
      not conforming to the DWARF3 standard anyway.  */
   else
-    {
-      offset_size = 4;
-      file->info_ptr += 4;
-    }
+    offset_size = 4;
 
   if (length != 0
-      && file->info_ptr + length <= info_ptr_end
-      && file->info_ptr + length > file->info_ptr)
+      && length <= (size_t) (info_ptr_end - file->info_ptr))
     {
       struct comp_unit *each = parse_comp_unit (stash, file,
 						file->info_ptr, length,
 						info_ptr_unit, offset_size);
       if (each)
 	{
+	  if (file->comp_unit_tree == NULL)
+	    file->comp_unit_tree
+	      = splay_tree_new (splay_tree_compare_addr_range,
+				splay_tree_free_addr_range, NULL);
+
+	  struct addr_range *r
+	    = (struct addr_range *)bfd_malloc (sizeof (struct addr_range));
+	  r->start = each->info_ptr_unit;
+	  r->end = each->end_ptr;
+	  splay_tree_node v = splay_tree_lookup (file->comp_unit_tree,
+						 (splay_tree_key)r);
+	  if (v != NULL || r->end <= r->start)
+	    abort ();
+	  splay_tree_insert (file->comp_unit_tree, (splay_tree_key)r,
+			     (splay_tree_value)each);
+
 	  if (file->all_comp_units)
 	    file->all_comp_units->prev_unit = each;
 	  else
@@ -4677,6 +5615,12 @@ stash_comp_unit (struct dwarf2_debug *st
 	  each->next_unit = file->all_comp_units;
 	  file->all_comp_units = each;
 
+	  if (each->arange.high == 0)
+	    {
+	      each->next_unit_without_ranges = file->all_comp_units_without_ranges;
+	      file->all_comp_units_without_ranges = each->next_unit_without_ranges;
+	    }
+
 	  file->info_ptr += length;
 	  return each;
 	}
@@ -4750,14 +5694,14 @@ _bfd_dwarf2_find_symbol_bias (asymbol **
 	  {
 	    asymbol search, *sym;
 
-	    /* FIXME: Do we need to scan the aranges looking for the lowest pc value ?  */
+	    /* FIXME: Do we need to scan the aranges looking for the
+	       lowest pc value?  */
 
 	    search.name = func->name;
 	    sym = htab_find (sym_hash, &search);
 	    if (sym != NULL)
 	      {
-		result = ((bfd_signed_vma) func->arange.low) -
-		  ((bfd_signed_vma) (sym->value + sym->section->vma));
+		result = func->arange.low - (sym->value + sym->section->vma);
 		goto done;
 	      }
 	  }
@@ -4768,18 +5712,7 @@ _bfd_dwarf2_find_symbol_bias (asymbol **
   return result;
 }
 
-/* Find the source code location of SYMBOL.  If SYMBOL is NULL
-   then find the nearest source code location corresponding to
-   the address SECTION + OFFSET.
-   Returns 1 if the line is found without error and fills in
-   FILENAME_PTR and LINENUMBER_PTR.  In the case where SYMBOL was
-   NULL the FUNCTIONNAME_PTR is also filled in.
-   Returns 2 if partial information from _bfd_elf_find_function is
-   returned (function and maybe file) by looking at symbols.  DWARF2
-   info is present but not regarding the requested code location.
-   Returns 0 otherwise.
-   SYMBOLS contains the symbol table for ABFD.
-   DEBUG_SECTIONS contains the name of the dwarf debug sections.  */
+/* See _bfd_dwarf2_find_nearest_line_with_alt.  */
 
 int
 _bfd_dwarf2_find_nearest_line (bfd *abfd,
@@ -4794,6 +5727,43 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
 			       const struct dwarf_debug_section *debug_sections,
 			       void **pinfo)
 {
+  return _bfd_dwarf2_find_nearest_line_with_alt
+    (abfd, NULL, symbols, symbol, section, offset, filename_ptr,
+     functionname_ptr, linenumber_ptr, discriminator_ptr, debug_sections,
+     pinfo);
+}
+
+/* Find the source code location of SYMBOL.  If SYMBOL is NULL
+   then find the nearest source code location corresponding to
+   the address SECTION + OFFSET.
+   Returns 1 if the line is found without error and fills in
+   FILENAME_PTR and LINENUMBER_PTR.  In the case where SYMBOL was
+   NULL the FUNCTIONNAME_PTR is also filled in.
+   Returns 2 if partial information from _bfd_elf_find_function is
+   returned (function and maybe file) by looking at symbols.  DWARF2
+   info is present but not regarding the requested code location.
+   Returns 0 otherwise.
+   SYMBOLS contains the symbol table for ABFD.
+   DEBUG_SECTIONS contains the name of the dwarf debug sections.
+   If ALT_FILENAME is given, attempt to open the file and use it
+   as the .gnu_debugaltlink file. Otherwise this file will be
+   searched for when needed.  */
+
+int
+_bfd_dwarf2_find_nearest_line_with_alt
+  (bfd *abfd,
+   const char *alt_filename,
+   asymbol **symbols,
+   asymbol *symbol,
+   asection *section,
+   bfd_vma offset,
+   const char **filename_ptr,
+   const char **functionname_ptr,
+   unsigned int *linenumber_ptr,
+   unsigned int *discriminator_ptr,
+   const struct dwarf_debug_section *debug_sections,
+   void **pinfo)
+{
   /* Read each compilation unit from the section .debug_info, and check
      to see if it contains the address we are searching for.  If yes,
      lookup the address, and return the line number info.  If no, go
@@ -4807,8 +5777,8 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
   bfd_vma addr;
   struct comp_unit* each;
   struct funcinfo *function = NULL;
-  int found = FALSE;
-  bfd_boolean do_line;
+  int found = false;
+  bool do_line;
 
   *filename_ptr = NULL;
   if (functionname_ptr != NULL)
@@ -4820,10 +5790,27 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
   if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL, debug_sections,
 				      symbols, pinfo,
 				      (abfd->flags & (EXEC_P | DYNAMIC)) == 0))
-    return FALSE;
+    return false;
 
   stash = (struct dwarf2_debug *) *pinfo;
 
+  if (stash->alt.bfd_ptr == NULL && alt_filename != NULL)
+    {
+      bfd *alt_bfd = bfd_openr (alt_filename, NULL);
+
+      if (alt_bfd == NULL)
+	/* bfd_openr will have set the bfd_error.  */
+	return false;
+      if (!bfd_check_format (alt_bfd, bfd_object))
+	{
+	  bfd_set_error (bfd_error_wrong_format);
+	  bfd_close (alt_bfd);
+	  return false;
+	}
+
+      stash->alt.bfd_ptr = alt_bfd;
+    }
+
   do_line = symbol != NULL;
   if (do_line)
     {
@@ -4860,7 +5847,7 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
 		&& ((*tmp)->flags & BSF_SECTION_SYM) == 0)
 	      {
 		symbol = *tmp;
-		do_line = TRUE;
+		do_line = true;
 		/* For local symbols, keep going in the hope we find a
 		   global.  */
 		if ((symbol->flags & BSF_GLOBAL) != 0)
@@ -4877,7 +5864,7 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
   /* A null info_ptr indicates that there is no dwarf2 info
      (or that an error occured while setting up the stash).  */
   if (! stash->f.info_ptr)
-    return FALSE;
+    return false;
 
   stash->inliner_chain = NULL;
 
@@ -4897,76 +5884,84 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
 
       if (stash->info_hash_status == STASH_INFO_HASH_ON)
 	{
-	  found = stash_find_line_fast (stash, symbol, addr, filename_ptr,
-					linenumber_ptr);
+	  found = stash_find_line_fast (stash, symbol, addr,
+					filename_ptr, linenumber_ptr);
 	  if (found)
 	    goto done;
 	}
-      else
-	{
-	  /* Check the previously read comp. units first.  */
-	  for (each = stash->f.all_comp_units; each; each = each->next_unit)
-	    if ((symbol->flags & BSF_FUNCTION) == 0
-		|| each->arange.high == 0
-		|| comp_unit_contains_address (each, addr))
-	      {
-		found = comp_unit_find_line (each, symbol, addr, filename_ptr,
-					     linenumber_ptr);
-		if (found)
-		  goto done;
-	      }
-	}
+
+      /* Check the previously read comp. units first.  */
+      for (each = stash->f.all_comp_units; each; each = each->next_unit)
+	if ((symbol->flags & BSF_FUNCTION) == 0
+	    || comp_unit_may_contain_address (each, addr))
+	  {
+	    found = comp_unit_find_line (each, symbol, addr, filename_ptr,
+					 linenumber_ptr);
+	    if (found)
+	      goto done;
+	  }
     }
   else
     {
-      bfd_vma min_range = (bfd_vma) -1;
-      const char * local_filename = NULL;
-      struct funcinfo *local_function = NULL;
-      unsigned int local_linenumber = 0;
-      unsigned int local_discriminator = 0;
+      struct trie_node *trie = stash->f.trie_root;
+      unsigned int bits = VMA_BITS - 8;
+      struct comp_unit **prev_each;
 
-      for (each = stash->f.all_comp_units; each; each = each->next_unit)
+      /* Traverse interior nodes until we get to a leaf.  */
+      while (trie && trie->num_room_in_leaf == 0)
 	{
-	  bfd_vma range = (bfd_vma) -1;
+	  int ch = (addr >> bits) & 0xff;
+	  trie = ((struct trie_interior *) trie)->children[ch];
+	  bits -= 8;
+	}
 
-	  found = ((each->arange.high == 0
-		    || comp_unit_contains_address (each, addr))
-		   && (range = (comp_unit_find_nearest_line
-				(each, addr, &local_filename,
-				 &local_function, &local_linenumber,
-				 &local_discriminator))) != 0);
-	  if (found)
+      if (trie)
+	{
+	  const struct trie_leaf *leaf = (struct trie_leaf *) trie;
+	  unsigned int i;
+
+	  for (i = 0; i < leaf->num_stored_in_leaf; ++i)
+	    leaf->ranges[i].unit->mark = false;
+
+	  for (i = 0; i < leaf->num_stored_in_leaf; ++i)
 	    {
-	      /* PRs 15935 15994: Bogus debug information may have provided us
-		 with an erroneous match.  We attempt to counter this by
-		 selecting the match that has the smallest address range
-		 associated with it.  (We are assuming that corrupt debug info
-		 will tend to result in extra large address ranges rather than
-		 extra small ranges).
-
-		 This does mean that we scan through all of the CUs associated
-		 with the bfd each time this function is called.  But this does
-		 have the benefit of producing consistent results every time the
-		 function is called.  */
-	      if (range <= min_range)
-		{
-		  if (filename_ptr && local_filename)
-		    * filename_ptr = local_filename;
-		  if (local_function)
-		    function = local_function;
-		  if (discriminator_ptr && local_discriminator)
-		    * discriminator_ptr = local_discriminator;
-		  if (local_linenumber)
-		    * linenumber_ptr = local_linenumber;
-		  min_range = range;
-		}
-	    }
+	      struct comp_unit *unit = leaf->ranges[i].unit;
+	      if (unit->mark
+		  || addr < leaf->ranges[i].low_pc
+		  || addr >= leaf->ranges[i].high_pc)
+	        continue;
+	      unit->mark = true;
+
+	      found = comp_unit_find_nearest_line (unit, addr,
+						   filename_ptr,
+						   &function,
+						   linenumber_ptr,
+						   discriminator_ptr);
+	      if (found)
+		goto done;
+	   }
 	}
 
-      if (* linenumber_ptr)
-	{
-	  found = TRUE;
-	  goto done;
+      /* Also scan through all compilation units without any ranges,
+         taking them out of the list if they have acquired any since
+	 last time.  */
+      prev_each = &stash->f.all_comp_units_without_ranges;
+      for (each = *prev_each; each; each = each->next_unit_without_ranges)
+        {
+	  if (each->arange.high != 0)
+	    {
+	      *prev_each = each->next_unit_without_ranges;
+	      continue;
+	    }
+
+	  found = comp_unit_find_nearest_line (each, addr,
+					       filename_ptr,
+					       &function,
+					       linenumber_ptr,
+					       discriminator_ptr);
+	  if (found)
+	    goto done;
+	  prev_each = &each->next_unit_without_ranges;
 	}
     }
 
@@ -4980,18 +5975,16 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
 	 address.  */
       if (do_line)
 	found = (((symbol->flags & BSF_FUNCTION) == 0
-		  || each->arange.high == 0
-		  || comp_unit_contains_address (each, addr))
+		  || comp_unit_may_contain_address (each, addr))
 		 && comp_unit_find_line (each, symbol, addr,
 					 filename_ptr, linenumber_ptr));
       else
-	found = ((each->arange.high == 0
-		  || comp_unit_contains_address (each, addr))
+	found = (comp_unit_may_contain_address (each, addr)
 		 && comp_unit_find_nearest_line (each, addr,
 						 filename_ptr,
 						 &function,
 						 linenumber_ptr,
-						 discriminator_ptr) != 0);
+						 discriminator_ptr));
 
       if (found)
 	break;
@@ -4999,7 +5992,11 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
 
  done:
   if (functionname_ptr && function && function->is_linkage)
-    *functionname_ptr = function->name;
+    {
+      *functionname_ptr = function->name;
+      if (!found)
+        found = 2;
+    }
   else if (functionname_ptr
 	   && (!*functionname_ptr
 	       || (function && !function->is_linkage)))
@@ -5023,22 +6020,22 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
 	  sec_vma = section->vma;
 	  if (section->output_section != NULL)
 	    sec_vma = section->output_section->vma + section->output_offset;
-	  if (fun != NULL
-	      && fun->value + sec_vma == function->arange.low)
+	  if (fun == NULL)
+	    *functionname_ptr = function->name;
+	  else if (fun->value + sec_vma == function->arange.low)
 	    function->name = *functionname_ptr;
 	  /* Even if we didn't find a linkage name, say that we have
 	     to stop a repeated search of symbols.  */
-	  function->is_linkage = TRUE;
+	  function->is_linkage = true;
 	}
     }
 
-  if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
-    unset_sections (stash);
+  unset_sections (stash);
 
   return found;
 }
 
-bfd_boolean
+bool
 _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
 			       const char **filename_ptr,
 			       const char **functionname_ptr,
@@ -5058,11 +6055,11 @@ _bfd_dwarf2_find_inliner_info (bfd *abfd
 	  *functionname_ptr = func->caller_func->name;
 	  *linenumber_ptr = func->caller_line;
 	  stash->inliner_chain = func->caller_func;
-	  return TRUE;
+	  return true;
 	}
     }
 
-  return FALSE;
+  return false;
 }
 
 void
@@ -5094,34 +6091,22 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abf
 	      free (each->line_table->dirs);
 	    }
 
-	  if (each->lookup_funcinfo_table)
-	    {
-	      free (each->lookup_funcinfo_table);
-	      each->lookup_funcinfo_table = NULL;
-	    }
+	  free (each->lookup_funcinfo_table);
+	  each->lookup_funcinfo_table = NULL;
 
 	  while (function_table)
 	    {
-	      if (function_table->file)
-		{
-		  free (function_table->file);
-		  function_table->file = NULL;
-		}
-	      if (function_table->caller_file)
-		{
-		  free (function_table->caller_file);
-		  function_table->caller_file = NULL;
-		}
+	      free (function_table->file);
+	      function_table->file = NULL;
+	      free (function_table->caller_file);
+	      function_table->caller_file = NULL;
 	      function_table = function_table->prev_func;
 	    }
 
 	  while (variable_table)
 	    {
-	      if (variable_table->file)
-		{
-		  free (variable_table->file);
-		  variable_table->file = NULL;
-		}
+	      free (variable_table->file);
+	      variable_table->file = NULL;
 	      variable_table = variable_table->prev_var;
 	    }
 	}
@@ -5132,10 +6117,13 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abf
 	  free (file->line_table->dirs);
 	}
       htab_delete (file->abbrev_offsets);
+      if (file->comp_unit_tree != NULL)
+	splay_tree_delete (file->comp_unit_tree);
 
       free (file->dwarf_line_str_buffer);
       free (file->dwarf_str_buffer);
       free (file->dwarf_ranges_buffer);
+      free (file->dwarf_rnglists_buffer);
       free (file->dwarf_line_buffer);
       free (file->dwarf_abbrev_buffer);
       free (file->dwarf_info_buffer);
@@ -5151,6 +6139,82 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abf
     bfd_close (stash->alt.bfd_ptr);
 }
 
+typedef struct elf_find_function_cache
+{
+  asection *     last_section;
+  asymbol *      func;
+  const char *   filename;
+  bfd_size_type  code_size;
+  bfd_vma        code_off;
+
+} elf_find_function_cache;
+
+
+/* Returns TRUE if symbol SYM with address CODE_OFF and size CODE_SIZE
+   is a better fit to match OFFSET than whatever is currenly stored in
+   CACHE.  */
+
+static inline bool
+better_fit (elf_find_function_cache *  cache,
+	    asymbol *                  sym,
+	    bfd_vma                    code_off,
+	    bfd_size_type              code_size,
+	    bfd_vma                    offset)
+{
+  /* If the symbol is beyond the desired offset, ignore it.  */
+  if (code_off > offset)
+    return false;
+
+  /* If the symbol is further away from the desired
+     offset than our current best, then ignore it.  */
+  if (code_off < cache->code_off)
+    return false;
+
+  /* On the other hand, if it is closer, then use it.  */
+  if (code_off > cache->code_off)
+    return true;
+
+  /* assert (code_off == cache->code_off);  */
+
+  /* If our current best fit does not actually reach the desired
+     offset...  */
+  if (cache->code_off + cache->code_size <= offset)
+    /* ... then return whichever candidate covers
+       more area and hence gets closer to OFFSET.  */
+    return code_size > cache->code_size;
+
+  /* The current cache'd symbol covers OFFSET.  */
+
+  /* If the new symbol does not cover the desired offset then skip it.  */  
+  if (code_off + code_size <= offset)
+    return false;
+
+  /* Both symbols cover OFFSET.  */
+
+  /* Prefer functions over non-functions.  */
+  flagword cache_flags = cache->func->flags;
+  flagword sym_flags   = sym->flags;
+
+  if ((cache_flags & BSF_FUNCTION) && ((sym_flags & BSF_FUNCTION) == 0))
+    return false;
+  if ((sym_flags & BSF_FUNCTION) && ((cache_flags & BSF_FUNCTION) == 0))
+    return true;
+
+  /* FIXME: Should we choose LOCAL over GLOBAL ?  */
+
+  /* Prefer typed symbols over notyped.  */
+  int cache_type = ELF_ST_TYPE (((elf_symbol_type *) cache->func)->internal_elf_sym.st_info);
+  int sym_type   = ELF_ST_TYPE (((elf_symbol_type *) sym)->internal_elf_sym.st_info);
+
+  if (cache_type == STT_NOTYPE && sym_type != STT_NOTYPE)
+    return true;
+  if (cache_type != STT_NOTYPE && sym_type == STT_NOTYPE)
+    return false;
+
+  /* Otherwise choose whichever symbol covers a smaller area.  */
+  return code_size < cache->code_size;
+}
+
 /* Find the function to a particular section and offset,
    for error reporting.  */
 
@@ -5162,21 +6226,14 @@ _bfd_elf_find_function (bfd *abfd,
 			const char **filename_ptr,
 			const char **functionname_ptr)
 {
-  struct elf_find_function_cache
-  {
-    asection *last_section;
-    asymbol *func;
-    const char *filename;
-    bfd_size_type func_size;
-  } *cache;
-
   if (symbols == NULL)
     return NULL;
 
   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
     return NULL;
 
-  cache = elf_tdata (abfd)->elf_find_function_cache;
+  elf_find_function_cache * cache = elf_tdata (abfd)->elf_find_function_cache;
+
   if (cache == NULL)
     {
       cache = bfd_zalloc (abfd, sizeof (*cache));
@@ -5184,13 +6241,13 @@ _bfd_elf_find_function (bfd *abfd,
       if (cache == NULL)
 	return NULL;
     }
+
   if (cache->last_section != section
       || cache->func == NULL
       || offset < cache->func->value
-      || offset >= cache->func->value + cache->func_size)
+      || offset >= cache->func->value + cache->code_size)
     {
       asymbol *file;
-      bfd_vma low_func;
       asymbol **p;
       /* ??? Given multiple file symbols, it is impossible to reliably
 	 choose the right file name for global symbols.  File symbols are
@@ -5204,11 +6261,11 @@ _bfd_elf_find_function (bfd *abfd,
       const struct elf_backend_data *bed = get_elf_backend_data (abfd);
 
       file = NULL;
-      low_func = 0;
       state = nothing_seen;
       cache->filename = NULL;
       cache->func = NULL;
-      cache->func_size = 0;
+      cache->code_size = 0;
+      cache->code_off = 0;
       cache->last_section = section;
 
       for (p = symbols; *p != NULL; p++)
@@ -5225,24 +6282,36 @@ _bfd_elf_find_function (bfd *abfd,
 	      continue;
 	    }
 
+	  if (state == nothing_seen)
+	    state = symbol_seen;
+
 	  size = bed->maybe_function_sym (sym, section, &code_off);
-	  if (size != 0
-	      && code_off <= offset
-	      && (code_off > low_func
-		  || (code_off == low_func
-		      && size > cache->func_size)))
+
+	  if (size == 0)
+	    continue;
+
+	  if (better_fit (cache, sym, code_off, size, offset))
 	    {
 	      cache->func = sym;
-	      cache->func_size = size;
+	      cache->code_size = size;
+	      cache->code_off = code_off;
 	      cache->filename = NULL;
-	      low_func = code_off;
+
 	      if (file != NULL
 		  && ((sym->flags & BSF_LOCAL) != 0
 		      || state != file_after_symbol_seen))
 		cache->filename = bfd_asymbol_name (file);
 	    }
-	  if (state == nothing_seen)
-	    state = symbol_seen;
+	  /* Otherwise, if the symbol is beyond the desired offset but it
+	     lies within the bounds of the current best match then reduce
+	     the size of the current best match so that future searches
+	     will not not used the cached symbol by mistake.  */
+	  else if (code_off > offset 
+		   && code_off > cache->code_off
+		   && code_off < cache->code_off + cache->code_size)
+	    {
+	      cache->code_size = code_off - cache->code_off;
+	    }
 	}
     }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ecoff-bfd.h ./bfd/ecoff-bfd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ecoff-bfd.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/ecoff-bfd.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Externally visible ECOFF routines.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,9 +18,9 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-extern bfd_boolean bfd_ecoff_set_gp_value
+extern bool bfd_ecoff_set_gp_value
   (bfd *abfd, bfd_vma gp_value);
-extern bfd_boolean bfd_ecoff_set_regmasks
+extern bool bfd_ecoff_set_regmasks
   (bfd *abfd, unsigned long gprmask, unsigned long fprmask,
    unsigned long *cprmask);
 extern void *bfd_ecoff_debug_init
@@ -29,31 +29,31 @@ extern void *bfd_ecoff_debug_init
 extern void bfd_ecoff_debug_free
   (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
    const struct ecoff_debug_swap *output_swap, struct bfd_link_info *);
-extern bfd_boolean bfd_ecoff_debug_accumulate
+extern bool bfd_ecoff_debug_accumulate
   (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
    const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
    struct ecoff_debug_info *input_debug,
    const struct ecoff_debug_swap *input_swap, struct bfd_link_info *);
-extern bfd_boolean bfd_ecoff_debug_accumulate_other
+extern bool bfd_ecoff_debug_accumulate_other
   (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
    const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
    struct bfd_link_info *);
-extern bfd_boolean bfd_ecoff_debug_externals
+extern bool bfd_ecoff_debug_externals
   (bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap, bfd_boolean relocatable,
-   bfd_boolean (*get_extr) (struct bfd_symbol *, struct ecoff_extr *),
+   const struct ecoff_debug_swap *swap, bool relocatable,
+   bool (*get_extr) (struct bfd_symbol *, struct ecoff_extr *),
    void (*set_index) (struct bfd_symbol *, bfd_size_type));
-extern bfd_boolean bfd_ecoff_debug_one_external
+extern bool bfd_ecoff_debug_one_external
   (bfd *abfd, struct ecoff_debug_info *debug,
    const struct ecoff_debug_swap *swap, const char *name,
    struct ecoff_extr *esym);
 extern bfd_size_type bfd_ecoff_debug_size
   (bfd *abfd, struct ecoff_debug_info *debug,
    const struct ecoff_debug_swap *swap);
-extern bfd_boolean bfd_ecoff_write_debug
+extern bool bfd_ecoff_write_debug
   (bfd *abfd, struct ecoff_debug_info *debug,
    const struct ecoff_debug_swap *swap, file_ptr where);
-extern bfd_boolean bfd_ecoff_write_accumulated_debug
+extern bool bfd_ecoff_write_accumulated_debug
   (void *handle, bfd *abfd, struct ecoff_debug_info *debug,
    const struct ecoff_debug_swap *swap,
    struct bfd_link_info *info, file_ptr where);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ecoff.c ./bfd/ecoff.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ecoff.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/ecoff.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic ECOFF (Extended-COFF) routines.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Original version by Per Bothner.
    Full support added by Ian Lance Taylor, ian@cygnus.com.
 
@@ -46,52 +46,24 @@
 #include "libiberty.h"
 
 #define streq(a, b)	(strcmp ((a), (b)) == 0)
-#define strneq(a, b, n)	(strncmp ((a), (b), (n)) == 0)
 
 
 /* This stuff is somewhat copied from coffcode.h.  */
 static asection bfd_debug_section =
-{
-  /* name,	id,  index, next, prev, flags, user_set_vma,	   */
-     "*DEBUG*", 0,   0,	    NULL, NULL, 0,     0,
-  /* linker_mark, linker_has_input, gc_mark, compress_status,	   */
-     0,		  0,		    1,	     0,
-  /* segment_mark, sec_info_type, use_rela_p,			   */
-     0,		   0,		  0,
-  /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   */
-     0,	       0,	 0,	   0,	     0,	       0,
-  /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */
-     0,	  0,   0,    0,	      0,	       0,     0,
-  /* output_offset, output_section, alignment_power,		   */
-     0,		    NULL,	    0,
-  /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */
-     NULL,	 NULL,	      0,	   0,	    0,
-  /* line_filepos, userdata, contents, lineno, lineno_count,	   */
-     0,		   NULL,     NULL,     NULL,   0,
-  /* entsize, kept_section, moving_line_filepos,		   */
-     0,	      NULL,	    0,
-  /* target_index, used_by_bfd, constructor_chain, owner,	   */
-     0,		   NULL,	NULL,		   NULL,
-  /* symbol,							   */
-     NULL,
-  /* symbol_ptr_ptr,						   */
-     NULL,
-  /* map_head, map_tail						   */
-     { NULL }, { NULL }
-};
+  BFD_FAKE_SECTION (bfd_debug_section, NULL, "*DEBUG*", 0, 0);
 
 /* Create an ECOFF object.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_mkobject (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (ecoff_data_type);
+  size_t amt = sizeof (ecoff_data_type);
 
   abfd->tdata.ecoff_obj_data = (struct ecoff_tdata *) bfd_zalloc (abfd, amt);
   if (abfd->tdata.ecoff_obj_data == NULL)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* This is a hook called by coff_real_object_p to create any backend
@@ -137,9 +109,29 @@ _bfd_ecoff_mkobject_hook (bfd *abfd, voi
   return (void *) ecoff;
 }
 
+bool
+_bfd_ecoff_bfd_free_cached_info (bfd *abfd)
+{
+  struct ecoff_tdata *tdata;
+
+  if ((bfd_get_format (abfd) == bfd_object
+       || bfd_get_format (abfd) == bfd_core)
+      && (tdata = ecoff_data (abfd)) != NULL)
+    {
+      while (tdata->mips_refhi_list != NULL)
+	{
+	  struct mips_hi *ref = tdata->mips_refhi_list;
+	  tdata->mips_refhi_list = ref->next;
+	  free (ref);
+	}
+      _bfd_ecoff_free_ecoff_debug_info (&tdata->debug_info);
+    }
+  return _bfd_generic_bfd_free_cached_info (abfd);
+}
+
 /* Initialize a new section.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_new_section_hook (bfd *abfd, asection *section)
 {
   unsigned int i;
@@ -154,14 +146,14 @@ _bfd_ecoff_new_section_hook (bfd *abfd,
     { _INIT,   SEC_ALLOC | SEC_CODE | SEC_LOAD },
     { _FINI,   SEC_ALLOC | SEC_CODE | SEC_LOAD },
     { _DATA,   SEC_ALLOC | SEC_DATA | SEC_LOAD },
-    { _SDATA,  SEC_ALLOC | SEC_DATA | SEC_LOAD },
+    { _SDATA,  SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_SMALL_DATA },
     { _RDATA,  SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY},
-    { _LIT8,   SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY},
-    { _LIT4,   SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY},
+    { _LIT8,   SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY | SEC_SMALL_DATA},
+    { _LIT4,   SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY | SEC_SMALL_DATA},
     { _RCONST, SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY},
     { _PDATA,  SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY},
     { _BSS,    SEC_ALLOC},
-    { _SBSS,   SEC_ALLOC},
+    { _SBSS,   SEC_ALLOC | SEC_SMALL_DATA},
     /* An Irix 4 shared libary.  */
     { _LIB,    SEC_COFF_SHARED_LIBRARY}
   };
@@ -195,7 +187,7 @@ _bfd_ecoff_set_alignment_hook (bfd *abfd
    below.  This could be an ECOFF backend routine, with one version
    for each target, but there aren't all that many ECOFF targets.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_set_arch_mach_hook (bfd *abfd, void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
@@ -239,12 +231,12 @@ _bfd_ecoff_set_arch_mach_hook (bfd *abfd
   return bfd_default_set_arch_mach (abfd, arch, mach);
 }
 
-bfd_boolean
+bool
 _bfd_ecoff_no_long_sections (bfd *abfd, int enable)
 {
   (void) abfd;
   (void) enable;
-  return FALSE;
+  return false;
 }
 
 /* Get the magic number to use based on the architecture and machine.
@@ -362,7 +354,7 @@ ecoff_sec_to_styp_flags (const char *nam
 
 /* Get the BFD flags to use for a section.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_styp_to_sec_flags (bfd *abfd ATTRIBUTE_UNUSED,
 			      void * hdr,
 			      const char *name ATTRIBUTE_UNUSED,
@@ -410,28 +402,31 @@ _bfd_ecoff_styp_to_sec_flags (bfd *abfd
 	  || styp_flags == STYP_PDATA
 	  || styp_flags == STYP_RCONST)
 	sec_flags |= SEC_READONLY;
+      if (styp_flags & STYP_SDATA)
+	sec_flags |= SEC_SMALL_DATA;
     }
-  else if ((styp_flags & STYP_BSS)
-	   || (styp_flags & STYP_SBSS))
+  else if (styp_flags & STYP_SBSS)
+    sec_flags |= SEC_ALLOC | SEC_SMALL_DATA;
+  else if (styp_flags & STYP_BSS)
     sec_flags |= SEC_ALLOC;
   else if ((styp_flags & STYP_INFO) || styp_flags == STYP_COMMENT)
     sec_flags |= SEC_NEVER_LOAD;
   else if ((styp_flags & STYP_LITA)
 	   || (styp_flags & STYP_LIT8)
 	   || (styp_flags & STYP_LIT4))
-    sec_flags |= SEC_DATA | SEC_LOAD | SEC_ALLOC | SEC_READONLY;
+    sec_flags |= SEC_DATA |SEC_SMALL_DATA | SEC_LOAD | SEC_ALLOC | SEC_READONLY;
   else if (styp_flags & STYP_ECOFF_LIB)
     sec_flags |= SEC_COFF_SHARED_LIBRARY;
   else
     sec_flags |= SEC_ALLOC | SEC_LOAD;
 
   * flags_ptr = sec_flags;
-  return TRUE;
+  return true;
 }
 
 /* Read in the symbolic header for an ECOFF object file.  */
 
-static bfd_boolean
+static bool
 ecoff_slurp_symbolic_header (bfd *abfd)
 {
   const struct ecoff_backend_data * const backend = ecoff_backend (abfd);
@@ -442,13 +437,13 @@ ecoff_slurp_symbolic_header (bfd *abfd)
   /* See if we've already read it in.  */
   if (ecoff_data (abfd)->debug_info.symbolic_header.magic ==
       backend->debug_swap.sym_magic)
-    return TRUE;
+    return true;
 
   /* See whether there is a symbolic header.  */
   if (ecoff_data (abfd)->sym_filepos == 0)
     {
       abfd->symcount = 0;
-      return TRUE;
+      return true;
     }
 
   /* At this point bfd_get_symcount (abfd) holds the number of symbols
@@ -459,17 +454,16 @@ ecoff_slurp_symbolic_header (bfd *abfd)
   if (bfd_get_symcount (abfd) != external_hdr_size)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* Read the symbolic information header.  */
-  raw = bfd_malloc (external_hdr_size);
+  if (bfd_seek (abfd, ecoff_data (abfd)->sym_filepos, SEEK_SET) != 0)
+    goto error_return;
+  raw = _bfd_malloc_and_read (abfd, external_hdr_size, external_hdr_size);
   if (raw == NULL)
     goto error_return;
 
-  if (bfd_seek (abfd, ecoff_data (abfd)->sym_filepos, SEEK_SET) != 0
-      || bfd_bread (raw, external_hdr_size, abfd) != external_hdr_size)
-    goto error_return;
   internal_symhdr = &ecoff_data (abfd)->debug_info.symbolic_header;
   (*backend->debug_swap.swap_hdr_in) (abfd, raw, internal_symhdr);
 
@@ -479,23 +473,38 @@ ecoff_slurp_symbolic_header (bfd *abfd)
       goto error_return;
     }
 
+#define FIX(start, count) \
+  if (internal_symhdr->start == 0)	\
+    internal_symhdr->count = 0;
+
+  FIX (cbLineOffset, cbLine);
+  FIX (cbDnOffset, idnMax);
+  FIX (cbPdOffset, ipdMax);
+  FIX (cbSymOffset, isymMax);
+  FIX (cbOptOffset, ioptMax);
+  FIX (cbAuxOffset, iauxMax);
+  FIX (cbSsOffset, issMax);
+  FIX (cbSsExtOffset, issExtMax);
+  FIX (cbFdOffset, ifdMax);
+  FIX (cbRfdOffset, crfd);
+  FIX (cbExtOffset, iextMax);
+#undef FIX
+
   /* Now we can get the correct number of symbols.  */
   abfd->symcount = internal_symhdr->isymMax + internal_symhdr->iextMax;
 
-  if (raw != NULL)
-    free (raw);
-  return TRUE;
+  free (raw);
+  return true;
  error_return:
-  if (raw != NULL)
-    free (raw);
-  return FALSE;
+  free (raw);
+  return false;
 }
 
 /* Read in and swap the important symbolic information for an ECOFF
    object file.  This is called by gdb via the read_debug_info entry
    point in the backend structure.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_slurp_symbolic_info (bfd *abfd,
 				asection *ignore ATTRIBUTE_UNUSED,
 				struct ecoff_debug_info *debug)
@@ -512,21 +521,22 @@ _bfd_ecoff_slurp_symbolic_info (bfd *abf
   bfd_size_type raw_end;
   bfd_size_type cb_end;
   file_ptr pos;
+  size_t amt;
 
   BFD_ASSERT (debug == &ecoff_data (abfd)->debug_info);
 
   /* Check whether we've already gotten it, and whether there's any to
      get.  */
-  if (ecoff_data (abfd)->raw_syments != NULL)
-    return TRUE;
+  if (debug->alloc_syments)
+    return true;
   if (ecoff_data (abfd)->sym_filepos == 0)
     {
       abfd->symcount = 0;
-      return TRUE;
+      return true;
     }
 
   if (! ecoff_slurp_symbolic_header (abfd))
-    return FALSE;
+    return false;
 
   internal_symhdr = &debug->symbolic_header;
 
@@ -539,12 +549,24 @@ _bfd_ecoff_slurp_symbolic_info (bfd *abf
      documented section. And the ordering of the sections varies between
      statically and dynamically linked executables.
      If bfd supports SEEK_END someday, this code could be simplified.  */
-  raw_end = 0;
+  raw_end = raw_base;
 
 #define UPDATE_RAW_END(start, count, size) \
-  cb_end = internal_symhdr->start + internal_symhdr->count * (size); \
-  if (cb_end > raw_end) \
-    raw_end = cb_end
+  do									\
+    if (internal_symhdr->count != 0)					\
+      {									\
+	if (internal_symhdr->start < raw_base)				\
+	  goto err;							\
+	if (_bfd_mul_overflow ((unsigned long) internal_symhdr->count,	\
+			       (size), &amt))				\
+	  goto err;							\
+	cb_end = internal_symhdr->start + amt;				\
+	if (cb_end < internal_symhdr->start)				\
+	  goto err;							\
+	if (cb_end > raw_end)						\
+	  raw_end = cb_end;						\
+      }									\
+  while (0)
 
   UPDATE_RAW_END (cbLineOffset, cbLine, sizeof (unsigned char));
   UPDATE_RAW_END (cbDnOffset, idnMax, backend->debug_swap.external_dnr_size);
@@ -566,45 +588,45 @@ _bfd_ecoff_slurp_symbolic_info (bfd *abf
   if (raw_size == 0)
     {
       ecoff_data (abfd)->sym_filepos = 0;
-      return TRUE;
+      return true;
     }
-  raw = bfd_alloc (abfd, raw_size);
-  if (raw == NULL)
-    return FALSE;
-
   pos = ecoff_data (abfd)->sym_filepos;
   pos += backend->debug_swap.external_hdr_size;
-  if (bfd_seek (abfd, pos, SEEK_SET) != 0
-      || bfd_bread (raw, raw_size, abfd) != raw_size)
-    {
-      bfd_release (abfd, raw);
-      return FALSE;
-    }
+  if (bfd_seek (abfd, pos, SEEK_SET) != 0)
+    return false;
+  raw = _bfd_alloc_and_read (abfd, raw_size, raw_size);
+  if (raw == NULL)
+    return false;
 
-  ecoff_data (abfd)->raw_syments = raw;
+  debug->alloc_syments = true;
 
   /* Get pointers for the numeric offsets in the HDRR structure.  */
-#define FIX(off1, off2, type)				\
-  if (internal_symhdr->off1 == 0)			\
-    debug->off2 = NULL;					\
-  else							\
-    debug->off2 = (type) ((char *) raw			\
-			  + (internal_symhdr->off1	\
-			     - raw_base))
-
-  FIX (cbLineOffset, line, unsigned char *);
-  FIX (cbDnOffset, external_dnr, void *);
-  FIX (cbPdOffset, external_pdr, void *);
-  FIX (cbSymOffset, external_sym, void *);
-  FIX (cbOptOffset, external_opt, void *);
-  FIX (cbAuxOffset, external_aux, union aux_ext *);
-  FIX (cbSsOffset, ss, char *);
-  FIX (cbSsExtOffset, ssext, char *);
-  FIX (cbFdOffset, external_fdr, void *);
-  FIX (cbRfdOffset, external_rfd, void *);
-  FIX (cbExtOffset, external_ext, void *);
+#define FIX(start, count, ptr, type) \
+  if (internal_symhdr->count == 0)					\
+    debug->ptr = NULL;							\
+  else									\
+    debug->ptr = (type) ((char *) raw					\
+			 + (internal_symhdr->start - raw_base))
+
+  FIX (cbLineOffset, cbLine, line, unsigned char *);
+  FIX (cbDnOffset, idnMax, external_dnr, void *);
+  FIX (cbPdOffset, ipdMax, external_pdr, void *);
+  FIX (cbSymOffset, isymMax, external_sym, void *);
+  FIX (cbOptOffset, ioptMax, external_opt, void *);
+  FIX (cbAuxOffset, iauxMax, external_aux, union aux_ext *);
+  FIX (cbSsOffset, issMax, ss, char *);
+  FIX (cbSsExtOffset, issExtMax, ssext, char *);
+  FIX (cbFdOffset, ifdMax, external_fdr, void *);
+  FIX (cbRfdOffset, crfd, external_rfd, void *);
+  FIX (cbExtOffset, iextMax, external_ext, void *);
 #undef FIX
 
+  /* Ensure string sections are zero terminated.  */
+  if (debug->ss)
+    debug->ss[internal_symhdr->issMax - 1] = 0;
+  if (debug->ssext)
+    debug->ssext[internal_symhdr->issExtMax - 1] = 0;
+
   /* I don't want to always swap all the data, because it will just
      waste time and most programs will never look at it.  The only
      time the linker needs most of the debugging information swapped
@@ -613,21 +635,27 @@ _bfd_ecoff_slurp_symbolic_info (bfd *abf
 
      We need to look at the fdr to deal with a lot of information in
      the symbols, so we swap them here.  */
-  debug->fdr = (FDR *) bfd_alloc2 (abfd, internal_symhdr->ifdMax,
-				   sizeof (struct fdr));
+  if (_bfd_mul_overflow ((unsigned long) internal_symhdr->ifdMax,
+			 sizeof (struct fdr), &amt))
+    {
+    err:
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  debug->fdr = (FDR *) bfd_alloc (abfd, amt);
   if (debug->fdr == NULL)
-    return FALSE;
+    return false;
   external_fdr_size = backend->debug_swap.external_fdr_size;
   fdr_ptr = debug->fdr;
   fraw_src = (char *) debug->external_fdr;
   /* PR 17512: file: 3372-1243-0.004.  */
   if (fraw_src == NULL && internal_symhdr->ifdMax > 0)
-    return FALSE;
+    return false;
   fraw_end = fraw_src + internal_symhdr->ifdMax * external_fdr_size;
   for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
     (*backend->debug_swap.swap_fdr_in) (abfd, (void *) fraw_src, fdr_ptr);
 
-  return TRUE;
+  return true;
 }
 
 /* ECOFF symbol table routines.  The ECOFF symbol table is described
@@ -639,8 +667,11 @@ _bfd_ecoff_slurp_symbolic_info (bfd *abf
    faster assembler code.  This is what we use for the small common
    section.  */
 static asection ecoff_scom_section;
-static asymbol ecoff_scom_symbol;
-static asymbol *ecoff_scom_symbol_ptr;
+static const asymbol ecoff_scom_symbol =
+  GLOBAL_SYM_INIT (SCOMMON, &ecoff_scom_section);
+static asection ecoff_scom_section =
+  BFD_FAKE_SECTION (ecoff_scom_section, &ecoff_scom_symbol,
+		    SCOMMON, 0, SEC_IS_COMMON | SEC_SMALL_DATA);
 
 /* Create an empty symbol.  */
 
@@ -648,14 +679,14 @@ asymbol *
 _bfd_ecoff_make_empty_symbol (bfd *abfd)
 {
   ecoff_symbol_type *new_symbol;
-  bfd_size_type amt = sizeof (ecoff_symbol_type);
+  size_t amt = sizeof (ecoff_symbol_type);
 
   new_symbol = (ecoff_symbol_type *) bfd_zalloc (abfd, amt);
   if (new_symbol == NULL)
     return NULL;
   new_symbol->symbol.section = NULL;
   new_symbol->fdr = NULL;
-  new_symbol->local = FALSE;
+  new_symbol->local = false;
   new_symbol->native = NULL;
   new_symbol->symbol.the_bfd = abfd;
   return &new_symbol->symbol;
@@ -663,7 +694,7 @@ _bfd_ecoff_make_empty_symbol (bfd *abfd)
 
 /* Set the BFD flags and section for an ECOFF symbol.  */
 
-static bfd_boolean
+static bool
 ecoff_set_symbol_info (bfd *abfd,
 		       SYMR *ecoff_sym,
 		       asymbol *asym,
@@ -688,12 +719,12 @@ ecoff_set_symbol_info (bfd *abfd,
       if (ECOFF_IS_STAB (ecoff_sym))
 	{
 	  asym->flags = BSF_DEBUGGING;
-	  return TRUE;
+	  return true;
 	}
       break;
     default:
       asym->flags = BSF_DEBUGGING;
-      return TRUE;
+      return true;
     }
 
   if (weak)
@@ -782,19 +813,6 @@ ecoff_set_symbol_info (bfd *abfd,
 	}
       /* Fall through.  */
     case scSCommon:
-      if (ecoff_scom_section.name == NULL)
-	{
-	  /* Initialize the small common section.  */
-	  ecoff_scom_section.name = SCOMMON;
-	  ecoff_scom_section.flags = SEC_IS_COMMON;
-	  ecoff_scom_section.output_section = &ecoff_scom_section;
-	  ecoff_scom_section.symbol = &ecoff_scom_symbol;
-	  ecoff_scom_section.symbol_ptr_ptr = &ecoff_scom_symbol_ptr;
-	  ecoff_scom_symbol.name = SCOMMON;
-	  ecoff_scom_symbol.flags = BSF_SECTION_SYM;
-	  ecoff_scom_symbol.section = &ecoff_scom_section;
-	  ecoff_scom_symbol_ptr = &ecoff_scom_symbol;
-	}
       asym->section = &ecoff_scom_section;
       asym->flags = 0;
       break;
@@ -847,12 +865,12 @@ ecoff_set_symbol_info (bfd *abfd,
 	  break;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Read an ECOFF symbol table.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_slurp_symbol_table (bfd *abfd)
 {
   const struct ecoff_backend_data * const backend = ecoff_backend (abfd);
@@ -870,22 +888,28 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd
   char *eraw_end;
   FDR *fdr_ptr;
   FDR *fdr_end;
+  size_t amt;
 
   /* If we've already read in the symbol table, do nothing.  */
   if (ecoff_data (abfd)->canonical_symbols != NULL)
-    return TRUE;
+    return true;
 
   /* Get the symbolic information.  */
   if (! _bfd_ecoff_slurp_symbolic_info (abfd, NULL,
 					&ecoff_data (abfd)->debug_info))
-    return FALSE;
+    return false;
   if (bfd_get_symcount (abfd) == 0)
-    return TRUE;
+    return true;
 
-  internal = (ecoff_symbol_type *) bfd_alloc2 (abfd, bfd_get_symcount (abfd),
-					       sizeof (ecoff_symbol_type));
+  if (_bfd_mul_overflow (bfd_get_symcount (abfd),
+			 sizeof (ecoff_symbol_type), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  internal = (ecoff_symbol_type *) bfd_alloc (abfd, amt);
   if (internal == NULL)
-    return FALSE;
+    return false;
 
   internal_ptr = internal;
   eraw_src = (char *) ecoff_data (abfd)->debug_info.external_ext;
@@ -899,9 +923,13 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd
       (*swap_ext_in) (abfd, (void *) eraw_src, &internal_esym);
 
       /* PR 17512: file: 3372-1000-0.004.  */
-      if (internal_esym.asym.iss >= ecoff_data (abfd)->debug_info.symbolic_header.issExtMax
+      HDRR *symhdr = &ecoff_data (abfd)->debug_info.symbolic_header;
+      if (internal_esym.asym.iss >= symhdr->issExtMax
 	  || internal_esym.asym.iss < 0)
-	return FALSE;
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
 
       internal_ptr->symbol.name = (ecoff_data (abfd)->debug_info.ssext
 				   + internal_esym.asym.iss);
@@ -909,21 +937,17 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd
       if (!ecoff_set_symbol_info (abfd, &internal_esym.asym,
 				  &internal_ptr->symbol, 1,
 				  internal_esym.weakext))
-	return FALSE;
+	return false;
 
       /* The alpha uses a negative ifd field for section symbols.  */
-      if (internal_esym.ifd >= 0)
-	{
-	  /* PR 17512: file: 3372-1983-0.004.  */
-	  if (internal_esym.ifd >= ecoff_data (abfd)->debug_info.symbolic_header.ifdMax)
-	    internal_ptr->fdr = NULL;
-	  else
-	    internal_ptr->fdr = (ecoff_data (abfd)->debug_info.fdr
-				 + internal_esym.ifd);
-	}
-      else
+      /* PR 17512: file: 3372-1983-0.004.  */
+      if (internal_esym.ifd >= symhdr->ifdMax
+	  || internal_esym.ifd < 0)
 	internal_ptr->fdr = NULL;
-      internal_ptr->local = FALSE;
+      else
+	internal_ptr->fdr = (ecoff_data (abfd)->debug_info.fdr
+			     + internal_esym.ifd);
+      internal_ptr->local = false;
       internal_ptr->native = (void *) eraw_src;
     }
 
@@ -935,7 +959,21 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd
     {
       char *lraw_src;
       char *lraw_end;
+      HDRR *symhdr = &ecoff_data (abfd)->debug_info.symbolic_header;
 
+      if (fdr_ptr->csym == 0)
+	continue;
+      if (fdr_ptr->isymBase < 0
+	  || fdr_ptr->isymBase > symhdr->isymMax
+	  || fdr_ptr->csym < 0
+	  || fdr_ptr->csym > ((long) bfd_get_symcount (abfd)
+			      - (internal_ptr - internal))
+	  || fdr_ptr->issBase < 0
+	  || fdr_ptr->issBase > symhdr->issMax)
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
       lraw_src = ((char *) ecoff_data (abfd)->debug_info.external_sym
 		  + fdr_ptr->isymBase * external_sym_size);
       lraw_end = lraw_src + fdr_ptr->csym * external_sym_size;
@@ -946,14 +984,21 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd
 	  SYMR internal_sym;
 
 	  (*swap_sym_in) (abfd, (void *) lraw_src, &internal_sym);
+
+	  if (internal_sym.iss >= symhdr->issMax - fdr_ptr->issBase
+	      || internal_sym.iss < 0)
+	    {
+	      bfd_set_error (bfd_error_bad_value);
+	      return false;
+	    }
 	  internal_ptr->symbol.name = (ecoff_data (abfd)->debug_info.ss
 				       + fdr_ptr->issBase
 				       + internal_sym.iss);
 	  if (!ecoff_set_symbol_info (abfd, &internal_sym,
 				      &internal_ptr->symbol, 0, 0))
-	    return FALSE;
+	    return false;
 	  internal_ptr->fdr = fdr_ptr;
-	  internal_ptr->local = TRUE;
+	  internal_ptr->local = true;
 	  internal_ptr->native = (void *) lraw_src;
 	}
     }
@@ -975,7 +1020,7 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd
 
   ecoff_data (abfd)->canonical_symbols = internal;
 
-  return TRUE;
+  return true;
 }
 
 /* Return the amount of space needed for the canonical symbols.  */
@@ -1086,7 +1131,7 @@ ecoff_emit_aggregate (bfd *abfd,
 /* Convert the type information to string format.  */
 
 static char *
-ecoff_type_to_string (bfd *abfd, FDR *fdr, unsigned int indx)
+ecoff_type_to_string (bfd *abfd, FDR *fdr, unsigned int indx, char *buff)
 {
   union aux_ext *aux_ptr;
   int bigendian;
@@ -1101,9 +1146,8 @@ ecoff_type_to_string (bfd *abfd, FDR *fd
   unsigned int basic_type;
   int i;
   char buffer1[1024];
-  static char buffer2[1024];
   char *p1 = buffer1;
-  char *p2 = buffer2;
+  char *p2 = buff;
   RNDXR rndx;
 
   aux_ptr = ecoff_data (abfd)->debug_info.external_aux + fdr->iauxBase;
@@ -1269,7 +1313,7 @@ ecoff_type_to_string (bfd *abfd, FDR *fd
       break;
     }
 
-  p1 += strlen (buffer1);
+  p1 += strlen (p1);
 
   /* If this is a bitfield, get the bitsize.  */
   if (u.ti.fBitfield)
@@ -1278,7 +1322,6 @@ ecoff_type_to_string (bfd *abfd, FDR *fd
 
       bitsize = AUX_GET_WIDTH (bigendian, &aux_ptr[indx++]);
       sprintf (p1, " : %d", bitsize);
-      p1 += strlen (buffer1);
     }
 
   /* Deal with any qualifiers.  */
@@ -1362,7 +1405,7 @@ ecoff_type_to_string (bfd *abfd, FDR *fd
 			       (long) (qualifiers[j].stride));
 
 		    else
-		      sprintf (p2, " {%ld bits}", (long) (qualifiers[j].stride));
+		      sprintf (p2, " {%ld bits}", (long) qualifiers[j].stride);
 
 		    p2 += strlen (p2);
 		    strcpy (p2, "] of ");
@@ -1375,7 +1418,7 @@ ecoff_type_to_string (bfd *abfd, FDR *fd
     }
 
   strcpy (p2, buffer1);
-  return buffer2;
+  return buff;
 }
 
 /* Return information about ECOFF symbol SYMBOL in RET.  */
@@ -1390,7 +1433,7 @@ _bfd_ecoff_get_symbol_info (bfd *abfd AT
 
 /* Return whether this is a local label.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 				    const char *name)
 {
@@ -1422,7 +1465,7 @@ _bfd_ecoff_print_symbol (bfd *abfd,
 	  (*debug_swap->swap_sym_in) (abfd, ecoffsymbol (symbol)->native,
 				      &ecoff_sym);
 	  fprintf (file, "ecoff local ");
-	  fprintf_vma (file, (bfd_vma) ecoff_sym.value);
+	  bfd_fprintf_vma (abfd, file, ecoff_sym.value);
 	  fprintf (file, " %x %x", (unsigned) ecoff_sym.st,
 		   (unsigned) ecoff_sym.sc);
 	}
@@ -1433,7 +1476,7 @@ _bfd_ecoff_print_symbol (bfd *abfd,
 	  (*debug_swap->swap_ext_in) (abfd, ecoffsymbol (symbol)->native,
 				      &ecoff_ext);
 	  fprintf (file, "ecoff extern ");
-	  fprintf_vma (file, (bfd_vma) ecoff_ext.asym.value);
+	  bfd_fprintf_vma (abfd, file, ecoff_ext.asym.value);
 	  fprintf (file, " %x %x", (unsigned) ecoff_ext.asym.st,
 		   (unsigned) ecoff_ext.asym.sc);
 	}
@@ -1476,7 +1519,7 @@ _bfd_ecoff_print_symbol (bfd *abfd,
 
 	fprintf (file, "[%3d] %c ",
 		 pos, type);
-	fprintf_vma (file, (bfd_vma) ecoff_ext.asym.value);
+	bfd_fprintf_vma (abfd, file, ecoff_ext.asym.value);
 	fprintf (file, " st %x sc %x indx %x %c%c%c %s",
 		 (unsigned) ecoff_ext.asym.st,
 		 (unsigned) ecoff_ext.asym.sc,
@@ -1544,13 +1587,16 @@ _bfd_ecoff_print_symbol (bfd *abfd,
 		if (ECOFF_IS_STAB (&ecoff_ext.asym))
 		  ;
 		else if (ecoffsymbol (symbol)->local)
-		  /* xgettext:c-format */
-		  fprintf (file, _("\n      End+1 symbol: %-7ld   Type:  %s"),
-			   ((long)
-			    (AUX_GET_ISYM (bigendian,
-					   &aux_base[ecoff_ext.asym.index])
-			     + sym_base)),
-			   ecoff_type_to_string (abfd, fdr, indx + 1));
+		  {
+		    char buff[1024];
+		    /* xgettext:c-format */
+		    fprintf (file, _("\n      End+1 symbol: %-7ld   Type:  %s"),
+			     ((long)
+			      (AUX_GET_ISYM (bigendian,
+					     &aux_base[ecoff_ext.asym.index])
+			       + sym_base)),
+			     ecoff_type_to_string (abfd, fdr, indx + 1, buff));
+		  }
 		else
 		  fprintf (file, _("\n      Local symbol: %ld"),
 			   ((long) indx
@@ -1576,8 +1622,11 @@ _bfd_ecoff_print_symbol (bfd *abfd,
 
 	      default:
 		if (! ECOFF_IS_STAB (&ecoff_ext.asym))
-		  fprintf (file, _("\n      Type: %s"),
-			   ecoff_type_to_string (abfd, fdr, indx));
+		  {
+		    char buff[1024];
+		    fprintf (file, _("\n      Type: %s"),
+			     ecoff_type_to_string (abfd, fdr, indx, buff));
+		  }
 		break;
 	      }
 	  }
@@ -1588,7 +1637,7 @@ _bfd_ecoff_print_symbol (bfd *abfd,
 
 /* Read in the relocs for a section.  */
 
-static bfd_boolean
+static bool
 ecoff_slurp_reloc_table (bfd *abfd,
 			 asection *section,
 			 asymbol **symbols)
@@ -1597,31 +1646,34 @@ ecoff_slurp_reloc_table (bfd *abfd,
   arelent *internal_relocs;
   bfd_size_type external_reloc_size;
   bfd_size_type amt;
-  char *external_relocs;
+  bfd_byte *external_relocs;
   arelent *rptr;
   unsigned int i;
 
   if (section->relocation != NULL
       || section->reloc_count == 0
       || (section->flags & SEC_CONSTRUCTOR) != 0)
-    return TRUE;
+    return true;
 
   if (! _bfd_ecoff_slurp_symbol_table (abfd))
-    return FALSE;
-
-  amt = section->reloc_count;
-  amt *= sizeof (arelent);
-  internal_relocs = (arelent *) bfd_alloc (abfd, amt);
+    return false;
 
   external_reloc_size = backend->external_reloc_size;
   amt = external_reloc_size * section->reloc_count;
-  external_relocs = (char *) bfd_alloc (abfd, amt);
-  if (internal_relocs == NULL || external_relocs == NULL)
-    return FALSE;
   if (bfd_seek (abfd, section->rel_filepos, SEEK_SET) != 0)
-    return FALSE;
-  if (bfd_bread (external_relocs, amt, abfd) != amt)
-    return FALSE;
+    return false;
+  external_relocs = _bfd_malloc_and_read (abfd, amt, amt);
+  if (external_relocs == NULL)
+    return false;
+
+  amt = section->reloc_count;
+  amt *= sizeof (arelent);
+  internal_relocs = (arelent *) bfd_alloc (abfd, amt);
+  if (internal_relocs == NULL)
+    {
+      free (external_relocs);
+      return false;
+    }
 
   for (i = 0, rptr = internal_relocs; i < section->reloc_count; i++, rptr++)
     {
@@ -1630,22 +1682,17 @@ ecoff_slurp_reloc_table (bfd *abfd,
       (*backend->swap_reloc_in) (abfd,
 				 external_relocs + i * external_reloc_size,
 				 &intern);
+      rptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+      rptr->addend = 0;
 
       if (intern.r_extern)
 	{
 	  /* r_symndx is an index into the external symbols.  */
-	  BFD_ASSERT (intern.r_symndx >= 0
-		      && (intern.r_symndx
-			  < (ecoff_data (abfd)
-			     ->debug_info.symbolic_header.iextMax)));
-	  rptr->sym_ptr_ptr = symbols + intern.r_symndx;
-	  rptr->addend = 0;
-	}
-      else if (intern.r_symndx == RELOC_SECTION_NONE
-	       || intern.r_symndx == RELOC_SECTION_ABS)
-	{
-	  rptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
-	  rptr->addend = 0;
+	  if (symbols != NULL
+	      && intern.r_symndx >= 0
+	      && (intern.r_symndx
+		  < (ecoff_data (abfd)->debug_info.symbolic_header.iextMax)))
+	    rptr->sym_ptr_ptr = symbols + intern.r_symndx;
 	}
       else
 	{
@@ -1669,15 +1716,20 @@ ecoff_slurp_reloc_table (bfd *abfd,
 	    case RELOC_SECTION_FINI:  sec_name = _FINI;  break;
 	    case RELOC_SECTION_LITA:  sec_name = _LITA;  break;
 	    case RELOC_SECTION_RCONST: sec_name = _RCONST; break;
-	    default: abort ();
+	    default:
+	      sec_name = NULL;
+	      break;
 	    }
 
-	  sec = bfd_get_section_by_name (abfd, sec_name);
-	  if (sec == NULL)
-	    abort ();
-	  rptr->sym_ptr_ptr = sec->symbol_ptr_ptr;
-
-	  rptr->addend = - bfd_section_vma (sec);
+	  if (sec_name != NULL)
+	    {
+	      sec = bfd_get_section_by_name (abfd, sec_name);
+	      if (sec != NULL)
+		{
+		  rptr->sym_ptr_ptr = sec->symbol_ptr_ptr;
+		  rptr->addend = - bfd_section_vma (sec);
+		}
+	    }
 	}
 
       rptr->address = intern.r_vaddr - bfd_section_vma (section);
@@ -1687,11 +1739,11 @@ ecoff_slurp_reloc_table (bfd *abfd,
       (*backend->adjust_reloc_in) (abfd, &intern, rptr);
     }
 
-  bfd_release (abfd, external_relocs);
+  free (external_relocs);
 
   section->relocation = internal_relocs;
 
-  return TRUE;
+  return true;
 }
 
 /* Get a canonical list of relocs.  */
@@ -1738,7 +1790,7 @@ _bfd_ecoff_canonicalize_reloc (bfd *abfd
    and return the name of the source file and the line nearest to the
    wanted location.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_find_nearest_line (bfd *abfd,
 			      asymbol **symbols ATTRIBUTE_UNUSED,
 			      asection *section,
@@ -1756,16 +1808,16 @@ _bfd_ecoff_find_nearest_line (bfd *abfd,
   /* Make sure we have the FDR's.  */
   if (! _bfd_ecoff_slurp_symbolic_info (abfd, NULL, debug_info)
       || bfd_get_symcount (abfd) == 0)
-    return FALSE;
+    return false;
 
   if (ecoff_data (abfd)->find_line_info == NULL)
     {
-      bfd_size_type amt = sizeof (struct ecoff_find_line);
+      size_t amt = sizeof (struct ecoff_find_line);
 
       ecoff_data (abfd)->find_line_info =
 	  (struct ecoff_find_line *) bfd_zalloc (abfd, amt);
       if (ecoff_data (abfd)->find_line_info == NULL)
-	return FALSE;
+	return false;
     }
 
   if (discriminator_ptr)
@@ -1789,7 +1841,7 @@ _bfd_ecoff_find_nearest_line (bfd *abfd,
    the symbol table, so this function only handles the other debugging
    information.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   struct ecoff_debug_info *iinfo = &ecoff_data (ibfd)->debug_info;
@@ -1797,13 +1849,13 @@ _bfd_ecoff_bfd_copy_private_bfd_data (bf
   int i;
   asymbol **sym_ptr_ptr;
   size_t c;
-  bfd_boolean local;
+  bool local;
 
   /* We only want to copy information over if both BFD's use ECOFF
      format.  */
   if (bfd_get_flavour (ibfd) != bfd_target_ecoff_flavour
       || bfd_get_flavour (obfd) != bfd_target_ecoff_flavour)
-    return TRUE;
+    return true;
 
   /* Copy the GP value and the register masks.  */
   ecoff_data (obfd)->gp = ecoff_data (ibfd)->gp;
@@ -1819,15 +1871,15 @@ _bfd_ecoff_bfd_copy_private_bfd_data (bf
   c = bfd_get_symcount (obfd);
   sym_ptr_ptr = bfd_get_outsymbols (obfd);
   if (c == 0 || sym_ptr_ptr == NULL)
-    return TRUE;
+    return true;
 
   /* See if there are any local symbols.  */
-  local = FALSE;
+  local = false;
   for (; c > 0; c--, sym_ptr_ptr++)
     {
       if (ecoffsymbol (*sym_ptr_ptr)->local)
 	{
-	  local = TRUE;
+	  local = true;
 	  break;
 	}
     }
@@ -1869,6 +1921,9 @@ _bfd_ecoff_bfd_copy_private_bfd_data (bf
 
       oinfo->symbolic_header.crfd = iinfo->symbolic_header.crfd;
       oinfo->external_rfd = iinfo->external_rfd;
+
+      /* Flag that oinfo entries should not be freed.  */
+      oinfo->alloc_syments = true;
     }
   else
     {
@@ -1890,14 +1945,14 @@ _bfd_ecoff_bfd_copy_private_bfd_data (bf
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the architecture.  The supported architecture is stored in the
    backend pointer.  We always set the architecture anyhow, since many
    callers ignore the return value.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_set_arch_mach (bfd *abfd,
 			  enum bfd_architecture arch,
 			  unsigned long machine)
@@ -1930,7 +1985,7 @@ _bfd_ecoff_sizeof_headers (bfd *abfd,
 
 /* Get the contents of a section.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_get_section_contents (bfd *abfd,
 				 asection *section,
 				 void * location,
@@ -1971,7 +2026,7 @@ ecoff_sort_hdrs (const void * arg1, cons
 /* Calculate the file position for each section, and set
    reloc_filepos.  */
 
-static bfd_boolean
+static bool
 ecoff_compute_section_file_positions (bfd *abfd)
 {
   file_ptr sofar, file_sofar;
@@ -1979,8 +2034,8 @@ ecoff_compute_section_file_positions (bf
   asection *current;
   unsigned int i;
   file_ptr old_sofar;
-  bfd_boolean rdata_in_text;
-  bfd_boolean first_data, first_nonalloc;
+  bool rdata_in_text;
+  bool first_data, first_nonalloc;
   const bfd_vma round = ecoff_backend (abfd)->round;
   bfd_size_type amt;
 
@@ -1992,7 +2047,7 @@ ecoff_compute_section_file_positions (bf
   amt *= sizeof (asection *);
   sorted_hdrs = (asection **) bfd_malloc (amt);
   if (sorted_hdrs == NULL)
-    return FALSE;
+    return false;
   for (current = abfd->sections, i = 0;
        current != NULL;
        current = current->next, i++)
@@ -2016,15 +2071,15 @@ ecoff_compute_section_file_positions (bf
 	      && ! streq (current->name, _PDATA)
 	      && ! streq (current->name, _RCONST))
 	    {
-	      rdata_in_text = FALSE;
+	      rdata_in_text = false;
 	      break;
 	    }
 	}
     }
   ecoff_data (abfd)->rdata_in_text = rdata_in_text;
 
-  first_data = TRUE;
-  first_nonalloc = TRUE;
+  first_data = true;
+  first_nonalloc = true;
   for (i = 0; i < abfd->section_count; i++)
     {
       unsigned int alignment_power;
@@ -2057,7 +2112,7 @@ ecoff_compute_section_file_positions (bf
 	{
 	  sofar = (sofar + round - 1) &~ (round - 1);
 	  file_sofar = (file_sofar + round - 1) &~ (round - 1);
-	  first_data = FALSE;
+	  first_data = false;
 	}
       else if (streq (current->name, _LIB))
 	{
@@ -2075,7 +2130,7 @@ ecoff_compute_section_file_positions (bf
 	  /* Skip up to the next page for an unallocated section, such
 	     as the .comment section on the Alpha.  This leaves room
 	     for the .bss section.  */
-	  first_nonalloc = FALSE;
+	  first_nonalloc = false;
 	  sofar = (sofar + round - 1) &~ (round - 1);
 	  file_sofar = (file_sofar + round - 1) &~ (round - 1);
 	}
@@ -2114,7 +2169,7 @@ ecoff_compute_section_file_positions (bf
 
   ecoff_data (abfd)->reloc_filepos = file_sofar;
 
-  return TRUE;
+  return true;
 }
 
 /* Determine the location of the relocs for all the sections in the
@@ -2135,7 +2190,7 @@ ecoff_compute_reloc_file_positions (bfd
     {
       if (! ecoff_compute_section_file_positions (abfd))
 	abort ();
-      abfd->output_has_begun = TRUE;
+      abfd->output_has_begun = true;
     }
 
   reloc_base = ecoff_data (abfd)->reloc_filepos;
@@ -2175,7 +2230,7 @@ ecoff_compute_reloc_file_positions (bfd
 
 /* Set the contents of a section.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_set_section_contents (bfd *abfd,
 				 asection *section,
 				 const void * location,
@@ -2188,7 +2243,7 @@ _bfd_ecoff_set_section_contents (bfd *ab
      going to set output_has_begun to TRUE.  */
   if (! abfd->output_has_begun
       && ! ecoff_compute_section_file_positions (abfd))
-    return FALSE;
+    return false;
 
   /* Handle the .lib section specially so that Irix 4 shared libraries
      work out.  See coff_set_section_contents in coffcode.h.  */
@@ -2208,38 +2263,38 @@ _bfd_ecoff_set_section_contents (bfd *ab
     }
 
   if (count == 0)
-    return TRUE;
+    return true;
 
   pos = section->filepos + offset;
   if (bfd_seek (abfd, pos, SEEK_SET) != 0
-      || bfd_bwrite (location, count, abfd) != count)
-    return FALSE;
+      || bfd_write (location, count, abfd) != count)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Set the GP value for an ECOFF file.  This is a hook used by the
    assembler.  */
 
-bfd_boolean
+bool
 bfd_ecoff_set_gp_value (bfd *abfd, bfd_vma gp_value)
 {
   if (bfd_get_flavour (abfd) != bfd_target_ecoff_flavour
       || bfd_get_format (abfd) != bfd_object)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   ecoff_data (abfd)->gp = gp_value;
 
-  return TRUE;
+  return true;
 }
 
 /* Set the register masks for an ECOFF file.  This is a hook used by
    the assembler.  */
 
-bfd_boolean
+bool
 bfd_ecoff_set_regmasks (bfd *abfd,
 			unsigned long gprmask,
 			unsigned long fprmask,
@@ -2251,7 +2306,7 @@ bfd_ecoff_set_regmasks (bfd *abfd,
       || bfd_get_format (abfd) != bfd_object)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   tdata = ecoff_data (abfd);
@@ -2265,13 +2320,13 @@ bfd_ecoff_set_regmasks (bfd *abfd,
 	tdata->cprmask[i] = cprmask[i];
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Get ECOFF EXTR information for an external symbol.  This function
    is passed to bfd_ecoff_debug_externals.  */
 
-static bfd_boolean
+static bool
 ecoff_get_extr (asymbol *sym, EXTR *esym)
 {
   ecoff_symbol_type *ecoff_sym_ptr;
@@ -2284,7 +2339,7 @@ ecoff_get_extr (asymbol *sym, EXTR *esym
       if ((sym->flags & BSF_DEBUGGING) != 0
 	  || (sym->flags & BSF_LOCAL) != 0
 	  || (sym->flags & BSF_SECTION_SYM) != 0)
-	return FALSE;
+	return false;
 
       esym->jmptbl = 0;
       esym->cobol_main = 0;
@@ -2296,13 +2351,13 @@ ecoff_get_extr (asymbol *sym, EXTR *esym
       esym->asym.sc = scAbs;
       esym->asym.reserved = 0;
       esym->asym.index = indexNil;
-      return TRUE;
+      return true;
     }
 
   ecoff_sym_ptr = ecoffsymbol (sym);
 
   if (ecoff_sym_ptr->local)
-    return FALSE;
+    return false;
 
   input_bfd = bfd_asymbol_bfd (sym);
   (*(ecoff_backend (input_bfd)->debug_swap.swap_ext_in))
@@ -2328,7 +2383,7 @@ ecoff_get_extr (asymbol *sym, EXTR *esym
 	esym->ifd = input_debug->ifdmap[esym->ifd];
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the external symbol index.  This routine is passed to
@@ -2342,7 +2397,7 @@ ecoff_set_index (asymbol *sym, bfd_size_
 
 /* Write out an ECOFF file.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_write_object_contents (bfd *abfd)
 {
   const struct ecoff_backend_data * const backend = ecoff_backend (abfd);
@@ -2364,10 +2419,10 @@ _bfd_ecoff_write_object_contents (bfd *a
   bfd_size_type reloc_size;
   bfd_size_type text_size;
   bfd_vma text_start;
-  bfd_boolean set_text_start;
+  bool set_text_start;
   bfd_size_type data_size;
   bfd_vma data_start;
-  bfd_boolean set_data_start;
+  bool set_data_start;
   bfd_size_type bss_size;
   void * buff = NULL;
   void * reloc_buff = NULL;
@@ -2393,10 +2448,10 @@ _bfd_ecoff_write_object_contents (bfd *a
   else
     text_size = 0;
   text_start = 0;
-  set_text_start = FALSE;
+  set_text_start = false;
   data_size = 0;
   data_start = 0;
-  set_data_start = FALSE;
+  set_data_start = false;
   bss_size = 0;
 
   /* Write section headers to the file.  */
@@ -2417,7 +2472,7 @@ _bfd_ecoff_write_object_contents (bfd *a
   }
 
   internal_f.f_nscns = 0;
-  if (bfd_seek (abfd, (file_ptr) (filhsz + aoutsz), SEEK_SET) != 0)
+  if (bfd_seek (abfd, filhsz + aoutsz, SEEK_SET) != 0)
     goto error_return;
 
   for (current = abfd->sections;
@@ -2472,7 +2527,7 @@ _bfd_ecoff_write_object_contents (bfd *a
 						 current->flags);
 
       if (bfd_coff_swap_scnhdr_out (abfd, (void *) &section, buff) == 0
-	  || bfd_bwrite (buff, scnhsz, abfd) != scnhsz)
+	  || bfd_write (buff, scnhsz, abfd) != scnhsz)
 	goto error_return;
 
       if ((section.s_flags & STYP_TEXT) != 0
@@ -2494,7 +2549,7 @@ _bfd_ecoff_write_object_contents (bfd *a
 	  if (! set_text_start || text_start > vma)
 	    {
 	      text_start = vma;
-	      set_text_start = TRUE;
+	      set_text_start = true;
 	    }
 	}
       else if ((section.s_flags & STYP_RDATA) != 0
@@ -2510,7 +2565,7 @@ _bfd_ecoff_write_object_contents (bfd *a
 	  if (! set_data_start || data_start > vma)
 	    {
 	      data_start = vma;
-	      set_data_start = TRUE;
+	      set_data_start = true;
 	    }
 	}
       else if ((section.s_flags & STYP_BSS) != 0
@@ -2617,15 +2672,15 @@ _bfd_ecoff_write_object_contents (bfd *a
     }
 
   /* Write out the file header and the optional header.  */
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
     goto error_return;
 
   bfd_coff_swap_filehdr_out (abfd, (void *) &internal_f, buff);
-  if (bfd_bwrite (buff, filhsz, abfd) != filhsz)
+  if (bfd_write (buff, filhsz, abfd) != filhsz)
     goto error_return;
 
   bfd_coff_swap_aouthdr_out (abfd, (void *) &internal_a, buff);
-  if (bfd_bwrite (buff, aoutsz, abfd) != aoutsz)
+  if (bfd_write (buff, aoutsz, abfd) != aoutsz)
     goto error_return;
 
   /* Build the external symbol information.  This must be done before
@@ -2657,7 +2712,7 @@ _bfd_ecoff_write_object_contents (bfd *a
 	    continue;
 
 	  amt = current->reloc_count * external_reloc_size;
-	  reloc_buff = bfd_alloc (abfd, amt);
+	  reloc_buff = bfd_zalloc (abfd, amt);
 	  if (reloc_buff == NULL)
 	    goto error_return;
 
@@ -2741,7 +2796,7 @@ _bfd_ecoff_write_object_contents (bfd *a
 	  if (bfd_seek (abfd, current->rel_filepos, SEEK_SET) != 0)
 	    goto error_return;
 	  amt = current->reloc_count * external_reloc_size;
-	  if (bfd_bwrite (reloc_buff, amt, abfd) != amt)
+	  if (bfd_write (reloc_buff, amt, abfd) != amt)
 	    goto error_return;
 	  bfd_release (abfd, reloc_buff);
 	  reloc_buff = NULL;
@@ -2767,29 +2822,25 @@ _bfd_ecoff_write_object_contents (bfd *a
     {
       char c;
 
-      if (bfd_seek (abfd, (file_ptr) ecoff_data (abfd)->sym_filepos - 1,
-		    SEEK_SET) != 0)
+      if (bfd_seek (abfd, ecoff_data (abfd)->sym_filepos - 1, SEEK_SET) != 0)
 	goto error_return;
-      if (bfd_bread (&c, (bfd_size_type) 1, abfd) == 0)
+      if (bfd_read (&c, 1, abfd) == 0)
 	c = 0;
-      if (bfd_seek (abfd, (file_ptr) ecoff_data (abfd)->sym_filepos - 1,
-		    SEEK_SET) != 0)
+      if (bfd_seek (abfd, ecoff_data (abfd)->sym_filepos - 1, SEEK_SET) != 0)
 	goto error_return;
-      if (bfd_bwrite (&c, (bfd_size_type) 1, abfd) != 1)
+      if (bfd_write (&c, 1, abfd) != 1)
 	goto error_return;
     }
 
   if (reloc_buff != NULL)
     bfd_release (abfd, reloc_buff);
-  if (buff != NULL)
-    free (buff);
-  return TRUE;
+  free (buff);
+  return true;
  error_return:
   if (reloc_buff != NULL)
     bfd_release (abfd, reloc_buff);
-  if (buff != NULL)
-    free (buff);
-  return FALSE;
+  free (buff);
+  return false;
 }
 
 /* Archive handling.  ECOFF uses what appears to be a unique type of
@@ -2861,13 +2912,13 @@ ecoff_armap_hash (const char *s,
 
 /* Read in the armap.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_slurp_armap (bfd *abfd)
 {
   char nextname[17];
   unsigned int i;
   struct areltdata *mapdata;
-  bfd_size_type parsed_size;
+  bfd_size_type parsed_size, stringsize;
   char *raw_armap;
   struct artdata *ardata;
   unsigned int count;
@@ -2877,35 +2928,35 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
   bfd_size_type amt;
 
   /* Get the name of the first element.  */
-  i = bfd_bread ((void *) nextname, (bfd_size_type) 16, abfd);
+  i = bfd_read (nextname, 16, abfd);
   if (i == 0)
-      return TRUE;
+    return true;
   if (i != 16)
-      return FALSE;
+    return false;
 
-  if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, -16, SEEK_CUR) != 0)
+    return false;
 
   /* Irix 4.0.5F apparently can use either an ECOFF armap or a
      standard COFF armap.  We could move the ECOFF armap stuff into
      bfd_slurp_armap, but that seems inappropriate since no other
      target uses this format.  Instead, we check directly for a COFF
      armap.  */
-  if (CONST_STRNEQ (nextname, "/               "))
+  if (startswith (nextname, "/               "))
     return bfd_slurp_armap (abfd);
 
   /* See if the first element is an armap.  */
-  if (! strneq (nextname, ecoff_backend (abfd)->armap_start, ARMAP_START_LENGTH)
+  if (strncmp (nextname, ecoff_backend (abfd)->armap_start, ARMAP_START_LENGTH) != 0
       || nextname[ARMAP_HEADER_MARKER_INDEX] != ARMAP_MARKER
       || (nextname[ARMAP_HEADER_ENDIAN_INDEX] != ARMAP_BIG_ENDIAN
 	  && nextname[ARMAP_HEADER_ENDIAN_INDEX] != ARMAP_LITTLE_ENDIAN)
       || nextname[ARMAP_OBJECT_MARKER_INDEX] != ARMAP_MARKER
       || (nextname[ARMAP_OBJECT_ENDIAN_INDEX] != ARMAP_BIG_ENDIAN
 	  && nextname[ARMAP_OBJECT_ENDIAN_INDEX] != ARMAP_LITTLE_ENDIAN)
-      || ! strneq (nextname + ARMAP_END_INDEX, ARMAP_END, sizeof ARMAP_END - 1))
+      || strncmp (nextname + ARMAP_END_INDEX, ARMAP_END, sizeof ARMAP_END - 1) != 0)
     {
-      abfd->has_armap = FALSE;
-      return TRUE;
+      abfd->has_armap = false;
+      return true;
     }
 
   /* Make sure we have the right byte ordering.  */
@@ -2915,32 +2966,33 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
 	  ^ (bfd_big_endian (abfd))))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   /* Read in the armap.  */
   ardata = bfd_ardata (abfd);
   mapdata = (struct areltdata *) _bfd_read_ar_hdr (abfd);
   if (mapdata == NULL)
-    return FALSE;
+    return false;
   parsed_size = mapdata->parsed_size;
   free (mapdata);
 
-  raw_armap = (char *) bfd_alloc (abfd, parsed_size);
-  if (raw_armap == NULL)
-    return FALSE;
-
-  if (bfd_bread ((void *) raw_armap, parsed_size, abfd) != parsed_size)
+  if (parsed_size + 1 < 9)
     {
-      if (bfd_get_error () != bfd_error_system_call)
-	bfd_set_error (bfd_error_malformed_archive);
-      bfd_release (abfd, (void *) raw_armap);
-      return FALSE;
+      bfd_set_error (bfd_error_malformed_archive);
+      return false;
     }
 
+  raw_armap = (char *) _bfd_alloc_and_read (abfd, parsed_size + 1, parsed_size);
+  if (raw_armap == NULL)
+    return false;
+  raw_armap[parsed_size] = 0;
+
   ardata->tdata = (void *) raw_armap;
 
   count = H_GET_32 (abfd, raw_armap);
+  if ((parsed_size - 8) / 8 < count)
+    goto error_malformed;
 
   ardata->symdef_count = 0;
   ardata->cache = NULL;
@@ -2948,6 +3000,7 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
   /* This code used to overlay the symdefs over the raw archive data,
      but that doesn't work on a 64 bit host.  */
   stringbase = raw_armap + count * 8 + 8;
+  stringsize = parsed_size - (count * 8 + 8);
 
 #ifdef CHECK_ARMAP_HASH
   {
@@ -2995,7 +3048,7 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
   amt *= sizeof (carsym);
   symdef_ptr = (carsym *) bfd_alloc (abfd, amt);
   if (!symdef_ptr)
-    return FALSE;
+    goto error_exit;
 
   ardata->symdefs = symdef_ptr;
 
@@ -3008,6 +3061,8 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
       if (file_offset == 0)
 	continue;
       name_offset = H_GET_32 (abfd, raw_ptr);
+      if (name_offset > stringsize)
+	goto error_malformed;
       symdef_ptr->name = stringbase + name_offset;
       symdef_ptr->file_offset = file_offset;
       ++symdef_ptr;
@@ -3016,15 +3071,22 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
   ardata->first_file_filepos = bfd_tell (abfd);
   /* Pad to an even boundary.  */
   ardata->first_file_filepos += ardata->first_file_filepos % 2;
+  abfd->has_armap = true;
+  return true;
 
-  abfd->has_armap = TRUE;
-
-  return TRUE;
+ error_malformed:
+  bfd_set_error (bfd_error_malformed_archive);
+ error_exit:
+  ardata->symdef_count = 0;
+  ardata->symdefs = NULL;
+  ardata->tdata = NULL;
+  bfd_release (abfd, raw_armap);
+  return false;
 }
 
 /* Write out an armap.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_write_armap (bfd *abfd,
 			unsigned int elength,
 			struct orl *map,
@@ -3079,7 +3141,7 @@ _bfd_ecoff_write_armap (bfd *abfd,
      complain that the index is out of date.  Actually, the Ultrix
      linker just checks the archive name; the GNU linker may check the
      date.  */
-  stat (abfd->filename, &statbuf);
+  stat (bfd_get_filename (abfd), &statbuf);
   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
 		    (long) (statbuf.st_mtime + 60));
 
@@ -3102,17 +3164,16 @@ _bfd_ecoff_write_armap (bfd *abfd,
    if (((char *) (&hdr))[i] == '\0')
      (((char *) (&hdr))[i]) = ' ';
 
-  if (bfd_bwrite ((void *) &hdr, (bfd_size_type) sizeof (struct ar_hdr), abfd)
-      != sizeof (struct ar_hdr))
-    return FALSE;
+  if (bfd_write (&hdr, sizeof (struct ar_hdr), abfd) != sizeof (struct ar_hdr))
+    return false;
 
   H_PUT_32 (abfd, hashsize, temp);
-  if (bfd_bwrite ((void *) temp, (bfd_size_type) 4, abfd) != 4)
-    return FALSE;
+  if (bfd_write (temp, 4, abfd) != 4)
+    return false;
 
   hashtable = (bfd_byte *) bfd_zalloc (abfd, symdefsize);
   if (!hashtable)
-    return FALSE;
+    return false;
 
   current = abfd->archive_head;
   last_elt = current;
@@ -3156,33 +3217,33 @@ _bfd_ecoff_write_armap (bfd *abfd,
       H_PUT_32 (abfd, firstreal, (hashtable + hash * 8 + 4));
     }
 
-  if (bfd_bwrite ((void *) hashtable, symdefsize, abfd) != symdefsize)
-    return FALSE;
+  if (bfd_write (hashtable, symdefsize, abfd) != symdefsize)
+    return false;
 
   bfd_release (abfd, hashtable);
 
   /* Now write the strings.  */
   H_PUT_32 (abfd, stringsize, temp);
-  if (bfd_bwrite ((void *) temp, (bfd_size_type) 4, abfd) != 4)
-    return FALSE;
+  if (bfd_write (temp, 4, abfd) != 4)
+    return false;
   for (i = 0; i < orl_count; i++)
     {
       bfd_size_type len;
 
       len = strlen (*map[i].name) + 1;
-      if (bfd_bwrite ((void *) (*map[i].name), len, abfd) != len)
-	return FALSE;
+      if (bfd_write (*map[i].name, len, abfd) != len)
+	return false;
     }
 
   /* The spec sez this should be a newline.  But in order to be
      bug-compatible for DECstation ar we use a null.  */
   if (padit)
     {
-      if (bfd_bwrite ("", (bfd_size_type) 1, abfd) != 1)
-	return FALSE;
+      if (bfd_write ("", 1, abfd) != 1)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* ECOFF linker code.  */
@@ -3228,7 +3289,7 @@ struct bfd_link_hash_table *
 _bfd_ecoff_bfd_link_hash_table_create (bfd *abfd)
 {
   struct ecoff_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct ecoff_link_hash_table);
+  size_t amt = sizeof (struct ecoff_link_hash_table);
 
   ret = (struct ecoff_link_hash_table *) bfd_malloc (amt);
   if (ret == NULL)
@@ -3260,7 +3321,7 @@ _bfd_ecoff_bfd_link_hash_table_create (b
    explicitly save any information we may need later on in the link.
    We do not want to read the external symbol information again.  */
 
-static bfd_boolean
+static bool
 ecoff_link_add_externals (bfd *abfd,
 			  struct bfd_link_info *info,
 			  void * external_ext,
@@ -3282,7 +3343,7 @@ ecoff_link_add_externals (bfd *abfd,
   amt *= sizeof (struct bfd_link_hash_entry *);
   sym_hash = (struct bfd_link_hash_entry **) bfd_alloc (abfd, amt);
   if (!sym_hash)
-    return FALSE;
+    return false;
   ecoff_data (abfd)->sym_hashes = (struct ecoff_link_hash_entry **) sym_hash;
 
   ext_ptr = (char *) external_ext;
@@ -3290,7 +3351,7 @@ ecoff_link_add_externals (bfd *abfd,
   for (; ext_ptr < ext_end; ext_ptr += external_ext_size, sym_hash++)
     {
       EXTR esym;
-      bfd_boolean skip;
+      bool skip;
       bfd_vma value;
       asection *section;
       const char *name;
@@ -3301,7 +3362,7 @@ ecoff_link_add_externals (bfd *abfd,
       (*swap_ext_in) (abfd, (void *) ext_ptr, &esym);
 
       /* Skip debugging symbols.  */
-      skip = FALSE;
+      skip = false;
       switch (esym.asym.st)
 	{
 	case stGlobal:
@@ -3311,7 +3372,7 @@ ecoff_link_add_externals (bfd *abfd,
 	case stStaticProc:
 	  break;
 	default:
-	  skip = TRUE;
+	  skip = true;
 	  break;
 	}
 
@@ -3377,19 +3438,6 @@ ecoff_link_add_externals (bfd *abfd,
 	    }
 	  /* Fall through.  */
 	case scSCommon:
-	  if (ecoff_scom_section.name == NULL)
-	    {
-	      /* Initialize the small common section.  */
-	      ecoff_scom_section.name = SCOMMON;
-	      ecoff_scom_section.flags = SEC_IS_COMMON;
-	      ecoff_scom_section.output_section = &ecoff_scom_section;
-	      ecoff_scom_section.symbol = &ecoff_scom_symbol;
-	      ecoff_scom_section.symbol_ptr_ptr = &ecoff_scom_symbol_ptr;
-	      ecoff_scom_symbol.name = SCOMMON;
-	      ecoff_scom_symbol.flags = BSF_SECTION_SYM;
-	      ecoff_scom_symbol.section = &ecoff_scom_section;
-	      ecoff_scom_symbol_ptr = &ecoff_scom_symbol;
-	    }
 	  section = &ecoff_scom_section;
 	  break;
 	case scSUndefined:
@@ -3417,8 +3465,8 @@ ecoff_link_add_externals (bfd *abfd,
       if (! (_bfd_generic_link_add_one_symbol
 	     (info, abfd, name,
 	      (flagword) (esym.weakext ? BSF_WEAK : BSF_GLOBAL),
-	      section, value, NULL, TRUE, TRUE, sym_hash)))
-	return FALSE;
+	      section, value, NULL, true, true, sym_hash)))
+	return false;
 
       h = (struct ecoff_link_hash_entry *) *sym_hash;
 
@@ -3458,13 +3506,13 @@ ecoff_link_add_externals (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Add symbols from an ECOFF object file to the global linker hash
    table.  */
 
-static bfd_boolean
+static bool
 ecoff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   HDRR *symhdr;
@@ -3472,74 +3520,66 @@ ecoff_link_add_object_symbols (bfd *abfd
   void * external_ext = NULL;
   bfd_size_type esize;
   char *ssext = NULL;
-  bfd_boolean result;
+  bool result;
 
   if (! ecoff_slurp_symbolic_header (abfd))
-    return FALSE;
+    return false;
 
   /* If there are no symbols, we don't want it.  */
   if (bfd_get_symcount (abfd) == 0)
-    return TRUE;
+    return true;
 
   symhdr = &ecoff_data (abfd)->debug_info.symbolic_header;
 
   /* Read in the external symbols and external strings.  */
+  if (bfd_seek (abfd, symhdr->cbExtOffset, SEEK_SET) != 0)
+    return false;
   external_ext_size = ecoff_backend (abfd)->debug_swap.external_ext_size;
   esize = symhdr->iextMax * external_ext_size;
-  external_ext = bfd_malloc (esize);
+  external_ext = _bfd_malloc_and_read (abfd, esize, esize);
   if (external_ext == NULL && esize != 0)
     goto error_return;
 
-  if (bfd_seek (abfd, (file_ptr) symhdr->cbExtOffset, SEEK_SET) != 0
-      || bfd_bread (external_ext, esize, abfd) != esize)
+  if (bfd_seek (abfd, symhdr->cbSsExtOffset, SEEK_SET) != 0)
     goto error_return;
-
-  ssext = (char *) bfd_malloc ((bfd_size_type) symhdr->issExtMax);
+  ssext = (char *) _bfd_malloc_and_read (abfd, symhdr->issExtMax,
+					 symhdr->issExtMax);
   if (ssext == NULL && symhdr->issExtMax != 0)
     goto error_return;
 
-  if (bfd_seek (abfd, (file_ptr) symhdr->cbSsExtOffset, SEEK_SET) != 0
-      || (bfd_bread (ssext, (bfd_size_type) symhdr->issExtMax, abfd)
-	  != (bfd_size_type) symhdr->issExtMax))
-    goto error_return;
-
   result = ecoff_link_add_externals (abfd, info, external_ext, ssext);
 
-  if (ssext != NULL)
-    free (ssext);
-  if (external_ext != NULL)
-    free (external_ext);
+  free (ssext);
+  free (external_ext);
   return result;
 
  error_return:
-  if (ssext != NULL)
-    free (ssext);
-  if (external_ext != NULL)
-    free (external_ext);
-  return FALSE;
+  free (ssext);
+  free (external_ext);
+  return false;
 }
 
 /* This is called if we used _bfd_generic_link_add_archive_symbols
    because we were not dealing with an ECOFF archive.  */
 
-static bfd_boolean
+static bool
 ecoff_link_check_archive_element (bfd *abfd,
 				  struct bfd_link_info *info,
 				  struct bfd_link_hash_entry *h,
 				  const char *name,
-				  bfd_boolean *pneeded)
+				  bool *pneeded)
 {
-  *pneeded = FALSE;
+  *pneeded = false;
 
   /* Unlike the generic linker, we do not pull in elements because
      of common symbols.  */
   if (h->type != bfd_link_hash_undefined)
-    return TRUE;
+    return true;
 
   /* Include this element?  */
   if (!(*info->callbacks->add_archive_element) (info, abfd, name, &abfd))
-    return TRUE;
-  *pneeded = TRUE;
+    return true;
+  *pneeded = true;
 
   return ecoff_link_add_object_symbols (abfd, info);
 }
@@ -3551,7 +3591,7 @@ ecoff_link_check_archive_element (bfd *a
    already have a hash table, so there is no reason to construct
    another one.  */
 
-static bfd_boolean
+static bool
 ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   const struct ecoff_backend_data * const backend = ecoff_backend (abfd);
@@ -3567,9 +3607,9 @@ ecoff_link_add_archive_symbols (bfd *abf
     {
       /* An empty archive is a special case.  */
       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
-	return TRUE;
+	return true;
       bfd_set_error (bfd_error_no_armap);
-      return FALSE;
+      return false;
     }
 
   /* If we don't have any raw data for this archive, as can happen on
@@ -3647,10 +3687,10 @@ ecoff_link_add_archive_symbols (bfd *abf
 	  || ! streq (name, h->root.string))
 	{
 	  unsigned int srch;
-	  bfd_boolean found;
+	  bool found;
 
 	  /* That was the wrong symbol.  Try rehashing.  */
-	  found = FALSE;
+	  found = false;
 	  for (srch = (hash + rehash) & (armap_count - 1);
 	       srch != hash;
 	       srch = (srch + rehash) & (armap_count - 1))
@@ -3662,7 +3702,7 @@ ecoff_link_add_archive_symbols (bfd *abf
 	      if (name[0] == h->root.string[0]
 		  && streq (name, h->root.string))
 		{
-		  found = TRUE;
+		  found = true;
 		  break;
 		}
 	    }
@@ -3676,32 +3716,34 @@ ecoff_link_add_archive_symbols (bfd *abf
 	  hash = srch;
 	}
 
-      element = (*backend->get_elt_at_filepos) (abfd, (file_ptr) file_offset);
+      element = (*backend->get_elt_at_filepos) (abfd,
+						(file_ptr) file_offset,
+						info);
       if (element == NULL)
-	return FALSE;
+	return false;
 
       if (! bfd_check_format (element, bfd_object))
-	return FALSE;
+	return false;
 
       /* Unlike the generic linker, we know that this element provides
 	 a definition for an undefined symbol and we know that we want
 	 to include it.  We don't need to check anything.  */
       if (!(*info->callbacks
 	    ->add_archive_element) (info, element, name, &element))
-	return FALSE;
+	return false;
       if (! ecoff_link_add_object_symbols (element, info))
-	return FALSE;
+	return false;
 
       pundef = &(*pundef)->u.undef.next;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Given an ECOFF BFD, add symbols to the global hash table as
    appropriate.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   switch (bfd_get_format (abfd))
@@ -3712,7 +3754,7 @@ _bfd_ecoff_bfd_link_add_symbols (bfd *ab
       return ecoff_link_add_archive_symbols (abfd, info);
     default:
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 }
 
@@ -3731,7 +3773,7 @@ struct extsym_info
    output BFD.  This must read in the symbolic information of the
    input BFD.  */
 
-static bfd_boolean
+static bool
 ecoff_final_link_debug_accumulate (bfd *output_bfd,
 				   bfd *input_bfd,
 				   struct bfd_link_info *info,
@@ -3741,43 +3783,48 @@ ecoff_final_link_debug_accumulate (bfd *
   const struct ecoff_debug_swap * const swap =
     &ecoff_backend (input_bfd)->debug_swap;
   HDRR *symhdr = &debug->symbolic_header;
-  bfd_boolean ret;
+  bool ret;
 
-#define READ(ptr, offset, count, size, type)				 \
-  if (symhdr->count == 0)						 \
-    debug->ptr = NULL;							 \
-  else									 \
-    {									 \
-      bfd_size_type amt = (bfd_size_type) size * symhdr->count;		 \
-      debug->ptr = (type) bfd_malloc (amt);				 \
-      if (debug->ptr == NULL)						 \
-	{								 \
-	  ret = FALSE;							 \
-	  goto return_something;					 \
-	}								 \
-      if (bfd_seek (input_bfd, (file_ptr) symhdr->offset, SEEK_SET) != 0 \
-	  || bfd_bread (debug->ptr, amt, input_bfd) != amt)		 \
-	{								 \
-	  ret = FALSE;							 \
-	  goto return_something;					 \
-	}								 \
-    }
+#define READ(ptr, offset, count, size)					\
+  do									\
+    {									\
+      size_t amt;							\
+      debug->ptr = NULL;						\
+      if (symhdr->count == 0)						\
+	break;								\
+      if (_bfd_mul_overflow (size, symhdr->count, &amt))		\
+	{								\
+	  bfd_set_error (bfd_error_file_too_big);			\
+	  ret = false;							\
+	  goto return_something;					\
+	}								\
+      if (bfd_seek (input_bfd, symhdr->offset, SEEK_SET) != 0)		\
+	{								\
+	  ret = false;							\
+	  goto return_something;					\
+	}								\
+      debug->ptr = _bfd_malloc_and_read (input_bfd, amt + 1, amt);	\
+      if (debug->ptr == NULL)						\
+	{								\
+	  ret = false;							\
+	  goto return_something;					\
+	}								\
+      ((char *) debug->ptr)[amt] = 0;					\
+    } while (0)
 
-  /* If raw_syments is not NULL, then the data was already by read by
+  /* If alloc_syments is true, then the data was already by read by
      _bfd_ecoff_slurp_symbolic_info.  */
-  if (ecoff_data (input_bfd)->raw_syments == NULL)
+  if (!debug->alloc_syments)
     {
-      READ (line, cbLineOffset, cbLine, sizeof (unsigned char),
-	    unsigned char *);
-      READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
-      READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
-      READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
-      READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
-      READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
-	    union aux_ext *);
-      READ (ss, cbSsOffset, issMax, sizeof (char), char *);
-      READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
-      READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
+      READ (line, cbLineOffset, cbLine, sizeof (unsigned char));
+      READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size);
+      READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size);
+      READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size);
+      READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size);
+      READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext));
+      READ (ss, cbSsOffset, issMax, sizeof (char));
+      READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size);
+      READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size);
     }
 #undef READ
 
@@ -3789,46 +3836,13 @@ ecoff_final_link_debug_accumulate (bfd *
 	  input_bfd, debug, swap, info));
 
  return_something:
-  if (ecoff_data (input_bfd)->raw_syments == NULL)
-    {
-      if (debug->line != NULL)
-	free (debug->line);
-      if (debug->external_dnr != NULL)
-	free (debug->external_dnr);
-      if (debug->external_pdr != NULL)
-	free (debug->external_pdr);
-      if (debug->external_sym != NULL)
-	free (debug->external_sym);
-      if (debug->external_opt != NULL)
-	free (debug->external_opt);
-      if (debug->external_aux != NULL)
-	free (debug->external_aux);
-      if (debug->ss != NULL)
-	free (debug->ss);
-      if (debug->external_fdr != NULL)
-	free (debug->external_fdr);
-      if (debug->external_rfd != NULL)
-	free (debug->external_rfd);
-
-      /* Make sure we don't accidentally follow one of these pointers
-	 into freed memory.  */
-      debug->line = NULL;
-      debug->external_dnr = NULL;
-      debug->external_pdr = NULL;
-      debug->external_sym = NULL;
-      debug->external_opt = NULL;
-      debug->external_aux = NULL;
-      debug->ss = NULL;
-      debug->external_fdr = NULL;
-      debug->external_rfd = NULL;
-    }
-
+  _bfd_ecoff_free_ecoff_debug_info (debug);
   return ret;
 }
 
 /* Relocate and write an ECOFF section into an ECOFF output file.  */
 
-static bfd_boolean
+static bool
 ecoff_indirect_link_order (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   asection *output_section,
@@ -3846,7 +3860,7 @@ ecoff_indirect_link_order (bfd *output_b
   input_section = link_order->u.indirect.section;
   input_bfd = input_section->owner;
   if (input_section->size == 0)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (input_section->output_section == output_section);
   BFD_ASSERT (input_section->output_offset == link_order->offset);
@@ -3861,13 +3875,11 @@ ecoff_indirect_link_order (bfd *output_b
   external_reloc_size = ecoff_backend (input_bfd)->external_reloc_size;
   external_relocs_size = external_reloc_size * input_section->reloc_count;
 
-  external_relocs = bfd_malloc (external_relocs_size);
-  if (external_relocs == NULL && external_relocs_size != 0)
+  if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0)
     goto error_return;
-
-  if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0
-      || (bfd_bread (external_relocs, external_relocs_size, input_bfd)
-	  != external_relocs_size))
+  external_relocs = _bfd_malloc_and_read (input_bfd, external_relocs_size,
+					  external_relocs_size);
+  if (external_relocs == NULL && external_relocs_size != 0)
     goto error_return;
 
   /* Relocate the section contents.  */
@@ -3893,24 +3905,20 @@ ecoff_indirect_link_order (bfd *output_b
       file_ptr pos = (output_section->rel_filepos
 		      + output_section->reloc_count * external_reloc_size);
       if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-	  || (bfd_bwrite (external_relocs, external_relocs_size, output_bfd)
+	  || (bfd_write (external_relocs, external_relocs_size, output_bfd)
 	      != external_relocs_size))
 	goto error_return;
       output_section->reloc_count += input_section->reloc_count;
     }
 
-  if (contents != NULL)
-    free (contents);
-  if (external_relocs != NULL)
-    free (external_relocs);
-  return TRUE;
+  free (contents);
+  free (external_relocs);
+  return true;
 
  error_return:
-  if (contents != NULL)
-    free (contents);
-  if (external_relocs != NULL)
-    free (external_relocs);
-  return FALSE;
+  free (contents);
+  free (external_relocs);
+  return false;
 }
 
 /* Generate a reloc when linking an ECOFF file.  This is a reloc
@@ -3918,7 +3926,7 @@ ecoff_indirect_link_order (bfd *output_b
    is used to build constructor and destructor tables when linking
    with -Ur.  */
 
-static bfd_boolean
+static bool
 ecoff_reloc_link_order (bfd *output_bfd,
 			struct bfd_link_info *info,
 			asection *output_section,
@@ -3931,7 +3939,7 @@ ecoff_reloc_link_order (bfd *output_bfd,
   struct internal_reloc in;
   bfd_size_type external_reloc_size;
   bfd_byte *rbuf;
-  bfd_boolean ok;
+  bool ok;
   file_ptr pos;
 
   type = link_order->type;
@@ -3946,7 +3954,7 @@ ecoff_reloc_link_order (bfd *output_bfd,
   if (rel.howto == 0)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   if (type == bfd_section_reloc_link_order)
@@ -3962,7 +3970,7 @@ ecoff_reloc_link_order (bfd *output_bfd,
 	 actually against the section.  */
       h = bfd_wrapped_link_hash_lookup (output_bfd, info,
 					link_order->u.reloc.p->u.name,
-					FALSE, FALSE, FALSE);
+					false, false, false);
       if (h != NULL
 	  && (h->type == bfd_link_hash_defined
 	      || h->type == bfd_link_hash_defweak))
@@ -3996,7 +4004,7 @@ ecoff_reloc_link_order (bfd *output_bfd,
       size = bfd_get_reloc_size (rel.howto);
       buf = (bfd_byte *) bfd_zmalloc (size);
       if (buf == NULL && size != 0)
-	return FALSE;
+	return false;
       rstat = _bfd_relocate_contents (rel.howto, output_bfd,
 				      (bfd_vma) addend, buf);
       switch (rstat)
@@ -4019,7 +4027,7 @@ ecoff_reloc_link_order (bfd *output_bfd,
 				     (file_ptr) link_order->offset, size);
       free (buf);
       if (! ok)
-	return FALSE;
+	return false;
     }
 
   rel.addend = 0;
@@ -4035,7 +4043,7 @@ ecoff_reloc_link_order (bfd *output_bfd,
       h = ((struct ecoff_link_hash_entry *)
 	   bfd_wrapped_link_hash_lookup (output_bfd, info,
 					 link_order->u.reloc.p->u.name,
-					 FALSE, FALSE, TRUE));
+					 false, false, true));
       if (h != NULL
 	  && h->indx != -1)
 	in.r_symndx = h->indx;
@@ -4097,14 +4105,14 @@ ecoff_reloc_link_order (bfd *output_bfd,
   external_reloc_size = ecoff_backend (output_bfd)->external_reloc_size;
   rbuf = (bfd_byte *) bfd_malloc (external_reloc_size);
   if (rbuf == NULL)
-    return FALSE;
+    return false;
 
   (*ecoff_backend (output_bfd)->swap_reloc_out) (output_bfd, &in, (void *) rbuf);
 
   pos = (output_section->rel_filepos
 	 + output_section->reloc_count * external_reloc_size);
   ok = (bfd_seek (output_bfd, pos, SEEK_SET) == 0
-	&& (bfd_bwrite ((void *) rbuf, external_reloc_size, output_bfd)
+	&& (bfd_write (rbuf, external_reloc_size, output_bfd)
 	    == external_reloc_size));
 
   if (ok)
@@ -4118,36 +4126,36 @@ ecoff_reloc_link_order (bfd *output_bfd,
 /* Put out information for an external symbol.  These come only from
    the hash table.  */
 
-static bfd_boolean
+static bool
 ecoff_link_write_external (struct bfd_hash_entry *bh, void * data)
 {
   struct ecoff_link_hash_entry *h = (struct ecoff_link_hash_entry *) bh;
   struct extsym_info *einfo = (struct extsym_info *) data;
   bfd *output_bfd = einfo->abfd;
-  bfd_boolean strip;
+  bool strip;
 
   if (h->root.type == bfd_link_hash_warning)
     {
       h = (struct ecoff_link_hash_entry *) h->root.u.i.link;
       if (h->root.type == bfd_link_hash_new)
-	return TRUE;
+	return true;
     }
 
   /* We need to check if this symbol is being stripped.  */
   if (h->root.type == bfd_link_hash_undefined
       || h->root.type == bfd_link_hash_undefweak)
-    strip = FALSE;
+    strip = false;
   else if (einfo->info->strip == strip_all
 	   || (einfo->info->strip == strip_some
 	       && bfd_hash_lookup (einfo->info->keep_hash,
 				   h->root.root.string,
-				   FALSE, FALSE) == NULL))
-    strip = TRUE;
+				   false, false) == NULL))
+    strip = true;
   else
-    strip = FALSE;
+    strip = false;
 
   if (strip || h->written)
-    return TRUE;
+    return true;
 
   if (h->abfd == NULL)
     {
@@ -4250,7 +4258,7 @@ ecoff_link_write_external (struct bfd_ha
     case bfd_link_hash_indirect:
       /* We ignore these symbols, since the indirected symbol is
 	 already in the hash table.  */
-      return TRUE;
+      return true;
     }
 
   /* bfd_ecoff_debug_one_external uses iextMax to keep track of the
@@ -4269,7 +4277,7 @@ ecoff_link_write_external (struct bfd_ha
    processes all the link order information.  This may cause it to
    close and reopen some input BFDs; I'll see how bad this is.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   const struct ecoff_backend_data * const backend = ecoff_backend (abfd);
@@ -4314,14 +4322,14 @@ _bfd_ecoff_bfd_final_link (bfd *abfd, st
 
   handle = bfd_ecoff_debug_init (abfd, debug, &backend->debug_swap, info);
   if (handle == NULL)
-    return FALSE;
+    return false;
 
   /* Accumulate the debugging symbols from each input BFD.  */
   for (input_bfd = info->input_bfds;
        input_bfd != NULL;
        input_bfd = input_bfd->link.next)
     {
-      bfd_boolean ret;
+      bool ret;
 
       if (bfd_get_flavour (input_bfd) == bfd_target_ecoff_flavour)
 	{
@@ -4338,7 +4346,7 @@ _bfd_ecoff_bfd_final_link (bfd *abfd, st
 						debug, &backend->debug_swap,
 						input_bfd, info);
       if (! ret)
-	return FALSE;
+	return false;
 
       /* Combine the register masks.  */
       ecoff_data (abfd)->gprmask |= ecoff_data (input_bfd)->gprmask;
@@ -4380,7 +4388,7 @@ _bfd_ecoff_bfd_final_link (bfd *abfd, st
   if (! bfd_ecoff_write_accumulated_debug (handle, abfd, debug,
 					   &backend->debug_swap, info,
 					   ecoff_data (abfd)->sym_filepos))
-    return FALSE;
+    return false;
 
   bfd_ecoff_debug_free (handle, abfd, debug, &backend->debug_swap, info);
 
@@ -4398,7 +4406,7 @@ _bfd_ecoff_bfd_final_link (bfd *abfd, st
     {
       struct bfd_link_hash_entry *h;
 
-      h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->hash, "_gp", false, false, true);
       if (h != NULL
 	  && h->type == bfd_link_hash_defined)
 	ecoff_data (abfd)->gp = (h->u.def.value
@@ -4441,25 +4449,25 @@ _bfd_ecoff_bfd_final_link (bfd *abfd, st
 		  == bfd_target_ecoff_flavour))
 	    {
 	      if (! ecoff_indirect_link_order (abfd, info, o, p))
-		return FALSE;
+		return false;
 	    }
 	  else if (p->type == bfd_section_reloc_link_order
 		   || p->type == bfd_symbol_reloc_link_order)
 	    {
 	      if (! ecoff_reloc_link_order (abfd, info, o, p))
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
 	      if (! _bfd_default_link_order (abfd, info, o, p))
-		return FALSE;
+		return false;
 	    }
 	}
     }
 
   abfd->symcount = symhdr->iextMax + symhdr->isymMax;
 
-  ecoff_data (abfd)->linker = TRUE;
+  ecoff_data (abfd)->linker = true;
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ecofflink.c ./bfd/ecofflink.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ecofflink.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/ecofflink.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Routines to link ECOFF debugging information.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -240,7 +240,7 @@ _bfd_ecoff_swap_rndx_out (int bigend,
 
 /* Add bytes to a buffer.  Return success.  */
 
-static bfd_boolean
+static bool
 ecoff_add_bytes (char **buf, char **bufend, size_t need)
 {
   size_t have;
@@ -258,10 +258,10 @@ ecoff_add_bytes (char **buf, char **bufe
     }
   newbuf = (char *) bfd_realloc (*buf, (bfd_size_type) have + want);
   if (newbuf == NULL)
-    return FALSE;
+    return false;
   *buf = newbuf;
   *bufend = *buf + have + want;
-  return TRUE;
+  return true;
 }
 
 /* We keep a hash table which maps strings to numbers.  We use it to
@@ -330,7 +330,7 @@ struct shuffle
   /* The length of the information.  */
   unsigned long size;
   /* Whether this information comes from a file or not.  */
-  bfd_boolean filep;
+  bool filep;
   union
     {
       struct
@@ -383,7 +383,7 @@ struct accumulate
 
 /* Add a file entry to a shuffle list.  */
 
-static bfd_boolean
+static bool
 add_file_shuffle (struct accumulate *ainfo,
 		  struct shuffle **head,
 		  struct shuffle **tail,
@@ -402,7 +402,7 @@ add_file_shuffle (struct accumulate *ain
       (*tail)->size += size;
       if ((*tail)->size > ainfo->largest_file_shuffle)
 	ainfo->largest_file_shuffle = (*tail)->size;
-      return TRUE;
+      return true;
     }
 
   n = (struct shuffle *) objalloc_alloc (ainfo->memory,
@@ -410,11 +410,11 @@ add_file_shuffle (struct accumulate *ain
   if (!n)
     {
       bfd_set_error (bfd_error_no_memory);
-      return FALSE;
+      return false;
     }
   n->next = NULL;
   n->size = size;
-  n->filep = TRUE;
+  n->filep = true;
   n->u.file.input_bfd = input_bfd;
   n->u.file.offset = offset;
   if (*head == (struct shuffle *) NULL)
@@ -424,12 +424,12 @@ add_file_shuffle (struct accumulate *ain
   *tail = n;
   if (size > ainfo->largest_file_shuffle)
     ainfo->largest_file_shuffle = size;
-  return TRUE;
+  return true;
 }
 
 /* Add a memory entry to a shuffle list.  */
 
-static bfd_boolean
+static bool
 add_memory_shuffle (struct accumulate *ainfo,
 		    struct shuffle **head,
 		    struct shuffle **tail,
@@ -443,18 +443,18 @@ add_memory_shuffle (struct accumulate *a
   if (!n)
     {
       bfd_set_error (bfd_error_no_memory);
-      return FALSE;
+      return false;
     }
   n->next = NULL;
   n->size = size;
-  n->filep = FALSE;
+  n->filep = false;
   n->u.memory = data;
   if (*head == (struct shuffle *) NULL)
     *head = n;
   if (*tail != (struct shuffle *) NULL)
     (*tail)->next = n;
   *tail = n;
-  return TRUE;
+  return true;
 }
 
 /* Initialize the FDR hash table.  This returns a handle which is then
@@ -467,7 +467,7 @@ bfd_ecoff_debug_init (bfd *output_bfd AT
 		      struct bfd_link_info *info)
 {
   struct accumulate *ainfo;
-  bfd_size_type amt = sizeof (struct accumulate);
+  size_t amt = sizeof (struct accumulate);
 
   ainfo = (struct accumulate *) bfd_malloc (amt);
   if (!ainfo)
@@ -546,7 +546,7 @@ bfd_ecoff_debug_free (void * handle,
    linker information structure.  HANDLE is returned by
    bfd_ecoff_debug_init.  */
 
-bfd_boolean
+bool
 bfd_ecoff_debug_accumulate (void * handle,
 			    bfd *output_bfd,
 			    struct ecoff_debug_info *output_debug,
@@ -639,10 +639,10 @@ bfd_ecoff_debug_accumulate (void * handl
   if (!input_debug->ifdmap || !rfd_out)
     {
       bfd_set_error (bfd_error_no_memory);
-      return FALSE;
+      return false;
     }
   if (!add_memory_shuffle (ainfo, &ainfo->rfd, &ainfo->rfd_end, rfd_out, sz))
-    return FALSE;
+    return false;
 
   copied = 0;
 
@@ -683,14 +683,14 @@ bfd_ecoff_debug_accumulate (void * handl
 
 	  lookup = (char *) bfd_malloc ((bfd_size_type) strlen (name) + 20);
 	  if (lookup == NULL)
-	    return FALSE;
+	    return false;
 	  sprintf (lookup, "%s %lx %lx", name, (unsigned long) fdr.csym,
 		   (unsigned long) fdr.caux);
 
-	  fh = string_hash_lookup (&ainfo->fdr_hash, lookup, TRUE, TRUE);
+	  fh = string_hash_lookup (&ainfo->fdr_hash, lookup, true, true);
 	  free (lookup);
 	  if (fh == (struct string_hash_entry *) NULL)
-	    return FALSE;
+	    return false;
 
 	  if (fh->val != -1)
 	    {
@@ -740,10 +740,10 @@ bfd_ecoff_debug_accumulate (void * handl
   if (!fdr_out)
     {
       bfd_set_error (bfd_error_no_memory);
-      return FALSE;
+      return false;
     }
   if (!add_memory_shuffle (ainfo, &ainfo->fdr, &ainfo->fdr_end, fdr_out, sz))
-    return FALSE;
+    return false;
   for (fdr_ptr = fdr_start, i = 0;
        fdr_ptr < fdr_end;
        fdr_ptr += fdr_add, i++)
@@ -752,7 +752,7 @@ bfd_ecoff_debug_accumulate (void * handl
       bfd_byte *sym_out;
       bfd_byte *lraw_src;
       bfd_byte *lraw_end;
-      bfd_boolean fgotfilename;
+      bool fgotfilename;
 
       if (input_debug->ifdmap[i] < output_symhdr->ifdMax)
 	{
@@ -772,17 +772,17 @@ bfd_ecoff_debug_accumulate (void * handl
 
       /* Swap in the local symbols, adjust their values, and swap them
 	 out again.  */
-      fgotfilename = FALSE;
+      fgotfilename = false;
       sz = fdr.csym * external_sym_size;
       sym_out = (bfd_byte *) objalloc_alloc (ainfo->memory, sz);
       if (!sym_out)
 	{
 	  bfd_set_error (bfd_error_no_memory);
-	  return FALSE;
+	  return false;
 	}
       if (!add_memory_shuffle (ainfo, &ainfo->sym, &ainfo->sym_end, sym_out,
 			       sz))
-	return FALSE;
+	return false;
       lraw_src = ((bfd_byte *) input_debug->external_sym
 		  + fdr.isymBase * input_swap->external_sym_size);
       lraw_end = lraw_src + fdr.csym * input_swap->external_sym_size;
@@ -821,13 +821,13 @@ bfd_ecoff_debug_accumulate (void * handl
 	     prevent us from easily merging different FDR's.  */
 	  if (! bfd_link_relocatable (info))
 	    {
-	      bfd_boolean ffilename;
+	      bool ffilename;
 	      const char *name;
 
 	      if (! fgotfilename && internal_sym.iss == fdr.rss)
-		ffilename = TRUE;
+		ffilename = true;
 	      else
-		ffilename = FALSE;
+		ffilename = false;
 
 	      /* Hash the name into the string table.  */
 	      name = input_debug->ss + fdr.issBase + internal_sym.iss;
@@ -837,9 +837,9 @@ bfd_ecoff_debug_accumulate (void * handl
 		{
 		  struct string_hash_entry *sh;
 
-		  sh = string_hash_lookup (&ainfo->str_hash, name, TRUE, TRUE);
+		  sh = string_hash_lookup (&ainfo->str_hash, name, true, true);
 		  if (sh == (struct string_hash_entry *) NULL)
-		    return FALSE;
+		    return false;
 		  if (sh->val == -1)
 		    {
 		      sh->val = output_symhdr->issMax;
@@ -857,7 +857,7 @@ bfd_ecoff_debug_accumulate (void * handl
 	      if (ffilename)
 		{
 		  fdr.rss = internal_sym.iss;
-		  fgotfilename = TRUE;
+		  fgotfilename = true;
 		}
 	    }
 
@@ -879,7 +879,7 @@ bfd_ecoff_debug_accumulate (void * handl
 	  file_ptr pos = input_symhdr->cbLineOffset + fdr.cbLineOffset;
 	  if (!add_file_shuffle (ainfo, &ainfo->line, &ainfo->line_end,
 				 input_bfd, pos, (unsigned long) fdr.cbLine))
-	    return FALSE;
+	    return false;
 	  fdr.ilineBase = output_symhdr->ilineMax;
 	  fdr.cbLineOffset = output_symhdr->cbLine;
 	  output_symhdr->ilineMax += fdr.cline;
@@ -892,7 +892,7 @@ bfd_ecoff_debug_accumulate (void * handl
 	  if (!add_file_shuffle (ainfo, &ainfo->aux, &ainfo->aux_end,
 				 input_bfd, pos,
 				 fdr.caux * sizeof (union aux_ext)))
-	    return FALSE;
+	    return false;
 	  fdr.iauxBase = output_symhdr->iauxMax;
 	  output_symhdr->iauxMax += fdr.caux;
 	}
@@ -911,7 +911,7 @@ bfd_ecoff_debug_accumulate (void * handl
 	  file_ptr pos = input_symhdr->cbSsOffset + fdr.issBase;
 	  if (!add_file_shuffle (ainfo, &ainfo->ss, &ainfo->ss_end,
 				 input_bfd, pos, (unsigned long) fdr.cbSs))
-	    return FALSE;
+	    return false;
 	  fdr.issBase = output_symhdr->issMax;
 	  output_symhdr->issMax += fdr.cbSs;
 	}
@@ -930,7 +930,7 @@ bfd_ecoff_debug_accumulate (void * handl
 	      unsigned long size = fdr.cpd * external_pdr_size;
 	      if (!add_file_shuffle (ainfo, &ainfo->pdr, &ainfo->pdr_end,
 				     input_bfd, pos, size))
-		return FALSE;
+		return false;
 	    }
 	  BFD_ASSERT (external_opt_size == input_swap->external_opt_size);
 	  if (fdr.copt > 0)
@@ -940,7 +940,7 @@ bfd_ecoff_debug_accumulate (void * handl
 	      unsigned long size = fdr.copt * external_opt_size;
 	      if (!add_file_shuffle (ainfo, &ainfo->opt, &ainfo->opt_end,
 				     input_bfd, pos, size))
-		return FALSE;
+		return false;
 	    }
 	}
       else
@@ -963,11 +963,11 @@ bfd_ecoff_debug_accumulate (void * handl
 	  if (!out)
 	    {
 	      bfd_set_error (bfd_error_no_memory);
-	      return FALSE;
+	      return false;
 	    }
 	  if (!add_memory_shuffle (ainfo, &ainfo->pdr, &ainfo->pdr_end, out,
 				   sz))
-	    return FALSE;
+	    return false;
 	  for (; in < end; in += insz, out += outsz)
 	    {
 	      PDR pdr;
@@ -987,11 +987,11 @@ bfd_ecoff_debug_accumulate (void * handl
 	  if (!out)
 	    {
 	      bfd_set_error (bfd_error_no_memory);
-	      return FALSE;
+	      return false;
 	    }
 	  if (!add_memory_shuffle (ainfo, &ainfo->opt, &ainfo->opt_end, out,
 				   sz))
-	    return FALSE;
+	    return false;
 	  for (; in < end; in += insz, out += outsz)
 	    {
 	      OPTR opt;
@@ -1023,7 +1023,7 @@ bfd_ecoff_debug_accumulate (void * handl
       ++output_symhdr->ifdMax;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Add a string to the debugging information we are accumulating.
@@ -1055,7 +1055,7 @@ ecoff_add_string (struct accumulate *ain
     {
       struct string_hash_entry *sh;
 
-      sh = string_hash_lookup (&ainfo->str_hash, string, TRUE, TRUE);
+      sh = string_hash_lookup (&ainfo->str_hash, string, true, true);
       if (sh == (struct string_hash_entry *) NULL)
 	return -1;
       if (sh->val == -1)
@@ -1077,7 +1077,7 @@ ecoff_add_string (struct accumulate *ain
 
 /* Add debugging information from a non-ECOFF file.  */
 
-bfd_boolean
+bool
 bfd_ecoff_debug_accumulate_other (void * handle,
 				  bfd *output_bfd,
 				  struct ecoff_debug_info *output_debug,
@@ -1112,21 +1112,21 @@ bfd_ecoff_debug_accumulate_other (void *
   fdr.issBase = output_symhdr->issMax;
   fdr.cbSs = 0;
   fdr.rss = ecoff_add_string (ainfo, info, output_debug, &fdr,
-			      input_bfd->filename);
+			      bfd_get_filename (input_bfd));
   if (fdr.rss == -1)
-    return FALSE;
+    return false;
   fdr.isymBase = output_symhdr->isymMax;
 
   /* Get the local symbols from the input BFD.  */
   symsize = bfd_get_symtab_upper_bound (input_bfd);
   if (symsize < 0)
-    return FALSE;
+    return false;
   symbols = (asymbol **) bfd_alloc (output_bfd, (bfd_size_type) symsize);
   if (symbols == (asymbol **) NULL)
-    return FALSE;
+    return false;
   symcount = bfd_canonicalize_symtab (input_bfd, symbols);
   if (symcount < 0)
-    return FALSE;
+    return false;
   sym_end = symbols + symcount;
 
   /* Handle the local symbols.  Any external symbols are handled
@@ -1144,7 +1144,7 @@ bfd_ecoff_debug_accumulate_other (void *
 					   (*sym_ptr)->name);
 
       if (internal_sym.iss == -1)
-	return FALSE;
+	return false;
       if (bfd_is_com_section ((*sym_ptr)->section)
 	  || bfd_is_und_section ((*sym_ptr)->section))
 	internal_sym.value = (*sym_ptr)->value;
@@ -1161,7 +1161,7 @@ bfd_ecoff_debug_accumulate_other (void *
       if (!external_sym)
 	{
 	  bfd_set_error (bfd_error_no_memory);
-	  return FALSE;
+	  return false;
 	}
       (*swap_sym_out) (output_bfd, &internal_sym, external_sym);
       add_memory_shuffle (ainfo, &ainfo->sym, &ainfo->sym_end,
@@ -1182,7 +1182,7 @@ bfd_ecoff_debug_accumulate_other (void *
   if (!external_fdr)
     {
       bfd_set_error (bfd_error_no_memory);
-      return FALSE;
+      return false;
     }
   (*output_swap->swap_fdr_out) (output_bfd, &fdr, external_fdr);
   add_memory_shuffle (ainfo, &ainfo->fdr, &ainfo->fdr_end,
@@ -1191,7 +1191,7 @@ bfd_ecoff_debug_accumulate_other (void *
 
   ++output_symhdr->ifdMax;
 
-  return TRUE;
+  return true;
 }
 
 /* Set up ECOFF debugging information for the external symbols.
@@ -1199,12 +1199,12 @@ bfd_ecoff_debug_accumulate_other (void *
    probably be changed to use a shuffle structure.  The assembler uses
    this interface, so that must be changed to do something else.  */
 
-bfd_boolean
+bool
 bfd_ecoff_debug_externals (bfd *abfd,
 			   struct ecoff_debug_info *debug,
 			   const struct ecoff_debug_swap *swap,
-			   bfd_boolean relocatable,
-			   bfd_boolean (*get_extr) (asymbol *, EXTR *),
+			   bool relocatable,
+			   bool (*get_extr) (asymbol *, EXTR *),
 			   void (*set_index) (asymbol *, bfd_size_type))
 {
   HDRR * const symhdr = &debug->symbolic_header;
@@ -1213,7 +1213,7 @@ bfd_ecoff_debug_externals (bfd *abfd,
 
   sym_ptr_ptr = bfd_get_outsymbols (abfd);
   if (sym_ptr_ptr == NULL)
-    return TRUE;
+    return true;
 
   for (c = bfd_get_symcount (abfd); c > 0; c--, sym_ptr_ptr++)
     {
@@ -1258,15 +1258,15 @@ bfd_ecoff_debug_externals (bfd *abfd,
 
       if (! bfd_ecoff_debug_one_external (abfd, debug, swap,
 					  sym_ptr->name, &esym))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Add a single external symbol to the debugging information.  */
 
-bfd_boolean
+bool
 bfd_ecoff_debug_one_external (bfd *abfd,
 			      struct ecoff_debug_info *debug,
 			      const struct ecoff_debug_swap *swap,
@@ -1287,7 +1287,7 @@ bfd_ecoff_debug_one_external (bfd *abfd,
       if (! ecoff_add_bytes ((char **) &debug->ssext,
 			     (char **) &debug->ssext_end,
 			     symhdr->issExtMax + namelen + 1))
-	return FALSE;
+	return false;
     }
   if ((size_t) ((char *) debug->external_ext_end
 		- (char *) debug->external_ext)
@@ -1298,7 +1298,7 @@ bfd_ecoff_debug_one_external (bfd *abfd,
       if (! ecoff_add_bytes ((char **) &external_ext,
 			     (char **) &external_ext_end,
 			     (symhdr->iextMax + 1) * (size_t) external_ext_size))
-	return FALSE;
+	return false;
       debug->external_ext = external_ext;
       debug->external_ext_end = external_ext_end;
     }
@@ -1314,7 +1314,7 @@ bfd_ecoff_debug_one_external (bfd *abfd,
   strcpy (debug->ssext + symhdr->issExtMax, name);
   symhdr->issExtMax += namelen + 1;
 
-  return TRUE;
+  return true;
 }
 
 /* Align the ECOFF debugging information.  */
@@ -1413,7 +1413,7 @@ bfd_ecoff_debug_size (bfd *abfd,
    going to be placed at.  This assumes that the counts are set
    correctly.  */
 
-static bfd_boolean
+static bool
 ecoff_write_symhdr (bfd *abfd,
 		    struct ecoff_debug_info *debug,
 		    const struct ecoff_debug_swap *swap,
@@ -1426,7 +1426,7 @@ ecoff_write_symhdr (bfd *abfd,
 
   /* Go to the right location in the file.  */
   if (bfd_seek (abfd, where, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   where += swap->external_hdr_size;
 
@@ -1460,17 +1460,15 @@ ecoff_write_symhdr (bfd *abfd,
     goto error_return;
 
   (*swap->swap_hdr_out) (abfd, symhdr, buff);
-  if (bfd_bwrite (buff, swap->external_hdr_size, abfd)
+  if (bfd_write (buff, swap->external_hdr_size, abfd)
       != swap->external_hdr_size)
     goto error_return;
 
-  if (buff != NULL)
-    free (buff);
-  return TRUE;
+  free (buff);
+  return true;
  error_return:
-  if (buff != NULL)
-    free (buff);
-  return FALSE;
+  free (buff);
+  return false;
 }
 
 /* Write out the ECOFF debugging information.  This function assumes
@@ -1479,7 +1477,7 @@ ecoff_write_symhdr (bfd *abfd,
    information to.  This function fills in the file offsets in the
    symbolic header.  */
 
-bfd_boolean
+bool
 bfd_ecoff_write_debug (bfd *abfd,
 		       struct ecoff_debug_info *debug,
 		       const struct ecoff_debug_swap *swap,
@@ -1488,22 +1486,22 @@ bfd_ecoff_write_debug (bfd *abfd,
   HDRR * const symhdr = &debug->symbolic_header;
 
   if (! ecoff_write_symhdr (abfd, debug, swap, where))
-    return FALSE;
+    return false;
 
 #define WRITE(ptr, count, size, offset) \
-  BFD_ASSERT (symhdr->offset == 0 \
-	      || (bfd_vma) bfd_tell (abfd) == symhdr->offset); \
-  if (bfd_bwrite (debug->ptr, (bfd_size_type) size * symhdr->count, abfd)\
-      != size * symhdr->count) \
-    return FALSE;
+  BFD_ASSERT (symhdr->offset == 0				\
+	      || (bfd_vma) bfd_tell (abfd) == symhdr->offset);	\
+  if (symhdr->count != 0					\
+      && bfd_write (debug->ptr, size * symhdr->count,		\
+		    abfd) != size * symhdr->count)		\
+    return false;
 
   WRITE (line, cbLine, sizeof (unsigned char), cbLineOffset);
   WRITE (external_dnr, idnMax, swap->external_dnr_size, cbDnOffset);
   WRITE (external_pdr, ipdMax, swap->external_pdr_size, cbPdOffset);
   WRITE (external_sym, isymMax, swap->external_sym_size, cbSymOffset);
   WRITE (external_opt, ioptMax, swap->external_opt_size, cbOptOffset);
-  WRITE (external_aux, iauxMax, (bfd_size_type) sizeof (union aux_ext),
-	 cbAuxOffset);
+  WRITE (external_aux, iauxMax, sizeof (union aux_ext), cbAuxOffset);
   WRITE (ss, issMax, sizeof (char), cbSsOffset);
   WRITE (ssext, issExtMax, sizeof (char), cbSsExtOffset);
   WRITE (external_fdr, ifdMax, swap->external_fdr_size, cbFdOffset);
@@ -1511,66 +1509,64 @@ bfd_ecoff_write_debug (bfd *abfd,
   WRITE (external_ext, iextMax, swap->external_ext_size, cbExtOffset);
 #undef WRITE
 
-  return TRUE;
+  return true;
 }
 
 /* Write out a shuffle list.  */
 
 
-static bfd_boolean
+static bool
 ecoff_write_shuffle (bfd *abfd,
 		     const struct ecoff_debug_swap *swap,
 		     struct shuffle *shuffle,
 		     void * space)
 {
   struct shuffle *l;
-  unsigned long total;
+  size_t total;
 
   total = 0;
-  for (l = shuffle; l != (struct shuffle *) NULL; l = l->next)
+  for (l = shuffle; l != NULL; l = l->next)
     {
       if (! l->filep)
 	{
-	  if (bfd_bwrite (l->u.memory, (bfd_size_type) l->size, abfd)
-	      != l->size)
-	    return FALSE;
+	  if (bfd_write (l->u.memory, l->size, abfd) != l->size)
+	    return false;
 	}
       else
 	{
 	  if (bfd_seek (l->u.file.input_bfd, l->u.file.offset, SEEK_SET) != 0
-	      || bfd_bread (space, (bfd_size_type) l->size,
-			   l->u.file.input_bfd) != l->size
-	      || bfd_bwrite (space, (bfd_size_type) l->size, abfd) != l->size)
-	    return FALSE;
+	      || bfd_read (space, l->size, l->u.file.input_bfd) != l->size
+	      || bfd_write (space, l->size, abfd) != l->size)
+	    return false;
 	}
       total += l->size;
     }
 
   if ((total & (swap->debug_align - 1)) != 0)
     {
-      unsigned int i;
+      size_t i;
       bfd_byte *s;
 
       i = swap->debug_align - (total & (swap->debug_align - 1));
-      s = (bfd_byte *) bfd_zmalloc ((bfd_size_type) i);
+      s = bfd_zmalloc (i);
       if (s == NULL && i != 0)
-	return FALSE;
+	return false;
 
-      if (bfd_bwrite (s, (bfd_size_type) i, abfd) != i)
+      if (bfd_write (s, i, abfd) != i)
 	{
 	  free (s);
-	  return FALSE;
+	  return false;
 	}
       free (s);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write out debugging information using accumulated linker
    information.  */
 
-bfd_boolean
+bool
 bfd_ecoff_write_accumulated_debug (void * handle,
 				   bfd *abfd,
 				   struct ecoff_debug_info *debug,
@@ -1611,36 +1607,34 @@ bfd_ecoff_write_accumulated_debug (void
       bfd_byte null;
       struct string_hash_entry *sh;
 
-      BFD_ASSERT (ainfo->ss == (struct shuffle *) NULL);
+      BFD_ASSERT (ainfo->ss == NULL);
       null = 0;
-      if (bfd_bwrite (&null, (bfd_size_type) 1, abfd) != 1)
+      if (bfd_write (&null, 1, abfd) != 1)
 	goto error_return;
       total = 1;
       BFD_ASSERT (ainfo->ss_hash == NULL || ainfo->ss_hash->val == 1);
-      for (sh = ainfo->ss_hash;
-	   sh != (struct string_hash_entry *) NULL;
-	   sh = sh->next)
+      for (sh = ainfo->ss_hash; sh != NULL; sh = sh->next)
 	{
 	  size_t len;
 
 	  len = strlen (sh->root.string);
 	  amt = len + 1;
-	  if (bfd_bwrite (sh->root.string, amt, abfd) != amt)
+	  if (bfd_write (sh->root.string, amt, abfd) != amt)
 	    goto error_return;
 	  total += len + 1;
 	}
 
       if ((total & (swap->debug_align - 1)) != 0)
 	{
-	  unsigned int i;
+	  size_t i;
 	  bfd_byte *s;
 
 	  i = swap->debug_align - (total & (swap->debug_align - 1));
-	  s = (bfd_byte *) bfd_zmalloc ((bfd_size_type) i);
+	  s = bfd_zmalloc (i);
 	  if (s == NULL && i != 0)
 	    goto error_return;
 
-	  if (bfd_bwrite (s, (bfd_size_type) i, abfd) != i)
+	  if (bfd_write (s, i, abfd) != i)
 	    {
 	      free (s);
 	      goto error_return;
@@ -1652,20 +1646,20 @@ bfd_ecoff_write_accumulated_debug (void
   /* The external strings and symbol are not converted over to using
      shuffles.  FIXME: They probably should be.  */
   amt = debug->symbolic_header.issExtMax;
-  if (bfd_bwrite (debug->ssext, amt, abfd) != amt)
+  if (amt != 0 && bfd_write (debug->ssext, amt, abfd) != amt)
     goto error_return;
   if ((debug->symbolic_header.issExtMax & (swap->debug_align - 1)) != 0)
     {
-      unsigned int i;
+      size_t i;
       bfd_byte *s;
 
       i = (swap->debug_align
 	   - (debug->symbolic_header.issExtMax & (swap->debug_align - 1)));
-      s = (bfd_byte *) bfd_zmalloc ((bfd_size_type) i);
+      s = bfd_zmalloc (i);
       if (s == NULL && i != 0)
 	goto error_return;
 
-      if (bfd_bwrite (s, (bfd_size_type) i, abfd) != i)
+      if (bfd_write (s, i, abfd) != i)
 	{
 	  free (s);
 	  goto error_return;
@@ -1682,22 +1676,52 @@ bfd_ecoff_write_accumulated_debug (void
 		  == (bfd_vma) bfd_tell (abfd)));
 
   amt = debug->symbolic_header.iextMax * swap->external_ext_size;
-  if (bfd_bwrite (debug->external_ext, amt, abfd) != amt)
+  if (amt != 0 && bfd_write (debug->external_ext, amt, abfd) != amt)
     goto error_return;
 
-  if (space != NULL)
-    free (space);
-  return TRUE;
+  free (space);
+  return true;
 
  error_return:
-  if (space != NULL)
-    free (space);
-  return FALSE;
+  free (space);
+  return false;
 }
 
 /* Handle the find_nearest_line function for both ECOFF and MIPS ELF
    files.  */
 
+/* Free ECOFF debugging info used by find_nearest_line.  */
+
+void
+_bfd_ecoff_free_ecoff_debug_info (struct ecoff_debug_info *debug)
+{
+  if (!debug->alloc_syments)
+    {
+      free (debug->line);
+      free (debug->external_dnr);
+      free (debug->external_pdr);
+      free (debug->external_sym);
+      free (debug->external_opt);
+      free (debug->external_aux);
+      free (debug->ss);
+      free (debug->ssext);
+      free (debug->external_fdr);
+      free (debug->external_rfd);
+      free (debug->external_ext);
+    }
+  debug->line= NULL;
+  debug->external_dnr= NULL;
+  debug->external_pdr= NULL;
+  debug->external_sym= NULL;
+  debug->external_opt= NULL;
+  debug->external_aux= NULL;
+  debug->ss= NULL;
+  debug->ssext= NULL;
+  debug->external_fdr= NULL;
+  debug->external_rfd= NULL;
+  debug->external_ext= NULL;
+}
+
 /* Compare FDR entries.  This is called via qsort.  */
 
 static int
@@ -1721,7 +1745,7 @@ cmp_fdrtab_entry (const void * leftp, co
    table will be sorted by address so we can look it up via binary
    search.  */
 
-static bfd_boolean
+static bool
 mk_fdrtab (bfd *abfd,
 	   struct ecoff_debug_info * const debug_info,
 	   const struct ecoff_debug_swap * const debug_swap,
@@ -1731,9 +1755,9 @@ mk_fdrtab (bfd *abfd,
   FDR *fdr_ptr;
   FDR *fdr_start;
   FDR *fdr_end;
-  bfd_boolean stabs;
-  long len;
-  bfd_size_type amt;
+  bool stabs;
+  size_t len;
+  size_t amt;
 
   fdr_start = debug_info->fdr;
   fdr_end = fdr_start + debug_info->symbolic_header.ifdMax;
@@ -1741,17 +1765,27 @@ mk_fdrtab (bfd *abfd,
   /* First, let's see how long the table needs to be.  */
   for (len = 0, fdr_ptr = fdr_start; fdr_ptr < fdr_end; fdr_ptr++)
     {
-      if (fdr_ptr->cpd == 0)	/* Skip FDRs that have no PDRs.  */
+      /* Sanity check fdr procedure descriptor pointer.  */
+      long ipdMax = debug_info->symbolic_header.ipdMax;
+      if (fdr_ptr->ipdFirst >= ipdMax
+	  || fdr_ptr->cpd < 0
+	  || fdr_ptr->cpd > ipdMax - fdr_ptr->ipdFirst)
+	fdr_ptr->cpd = 0;
+      /* Skip FDRs that have no PDRs.  */
+      if (fdr_ptr->cpd == 0)
 	continue;
       ++len;
     }
 
   /* Now, create and fill in the table.  */
-  amt = (bfd_size_type) len * sizeof (struct ecoff_fdrtab_entry);
+  if (_bfd_mul_overflow (len, sizeof (struct ecoff_fdrtab_entry), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
   line_info->fdrtab = (struct ecoff_fdrtab_entry*) bfd_zalloc (abfd, amt);
   if (line_info->fdrtab == NULL)
-    return FALSE;
-  line_info->fdrtab_len = len;
+    return false;
 
   tab = line_info->fdrtab;
   for (fdr_ptr = fdr_start; fdr_ptr < fdr_end; fdr_ptr++)
@@ -1762,18 +1796,27 @@ mk_fdrtab (bfd *abfd,
       /* Check whether this file has stabs debugging information.  In
 	 a file with stabs debugging information, the second local
 	 symbol is named @stabs.  */
-      stabs = FALSE;
+      stabs = false;
       if (fdr_ptr->csym >= 2)
 	{
 	  char *sym_ptr;
 	  SYMR sym;
 
+	  if ((long) ((unsigned long) fdr_ptr->isymBase + 1) <= 0
+	      || fdr_ptr->isymBase + 1 >= debug_info->symbolic_header.isymMax)
+	    continue;
+
 	  sym_ptr = ((char *) debug_info->external_sym
 		     + (fdr_ptr->isymBase + 1) * debug_swap->external_sym_size);
 	  (*debug_swap->swap_sym_in) (abfd, sym_ptr, &sym);
-	  if (strcmp (debug_info->ss + fdr_ptr->issBase + sym.iss,
-		      STABS_SYMBOL) == 0)
-	    stabs = TRUE;
+	  if (fdr_ptr->issBase >= 0
+	      && fdr_ptr->issBase < debug_info->symbolic_header.issMax
+	      && sym.iss >= 0
+	      && sym.iss < (debug_info->symbolic_header.issMax
+			    - fdr_ptr->issBase)
+	      && strcmp (debug_info->ss + fdr_ptr->issBase + sym.iss,
+			 STABS_SYMBOL) == 0)
+	    stabs = true;
 	}
 
       if (!stabs)
@@ -1799,15 +1842,17 @@ mk_fdrtab (bfd *abfd,
       tab->fdr = fdr_ptr;
       ++tab;
     }
+  len = tab - line_info->fdrtab;
+  line_info->fdrtab_len = len;
 
   /* Finally, the table is sorted in increasing memory-address order.
      The table is mostly sorted already, but there are cases (e.g.,
      static functions in include files), where this does not hold.
      Use "odump -PFv" to verify...  */
-  qsort (line_info->fdrtab, (size_t) len,
+  qsort (line_info->fdrtab, len,
 	 sizeof (struct ecoff_fdrtab_entry), cmp_fdrtab_entry);
 
-  return TRUE;
+  return true;
 }
 
 /* Return index of first FDR that covers to OFFSET.  */
@@ -1860,7 +1905,7 @@ fdrtab_lookup (struct ecoff_find_line *l
 /* Look up a line given an address, storing the information in
    LINE_INFO->cache.  */
 
-static bfd_boolean
+static bool
 lookup_line (bfd *abfd,
 	     struct ecoff_debug_info * const debug_info,
 	     const struct ecoff_debug_swap * const debug_swap,
@@ -1868,7 +1913,7 @@ lookup_line (bfd *abfd,
 {
   struct ecoff_fdrtab_entry *tab;
   bfd_vma offset;
-  bfd_boolean stabs;
+  bool stabs;
   FDR *fdr_ptr;
   int i;
 
@@ -1879,14 +1924,14 @@ lookup_line (bfd *abfd,
      don't have it already.  */
   if (line_info->fdrtab == NULL
       && !mk_fdrtab (abfd, debug_info, debug_swap, line_info))
-    return FALSE;
+    return false;
 
   tab = line_info->fdrtab;
 
   /* Find first FDR for address OFFSET.  */
   i = fdrtab_lookup (line_info, offset);
   if (i < 0)
-    return FALSE;		/* no FDR, no fun...  */
+    return false;		/* no FDR, no fun...  */
 
   /* eraxxon: 'fdrtab_lookup' doesn't give what we want, at least for Compaq's
      C++ compiler 6.2.  Consider three FDRs with starting addresses of x, y,
@@ -1962,20 +2007,33 @@ lookup_line (bfd *abfd,
   /* Check whether this file has stabs debugging information.  In a
      file with stabs debugging information, the second local symbol is
      named @stabs.  */
-  stabs = FALSE;
+  stabs = false;
   if (fdr_ptr->csym >= 2)
     {
       char *sym_ptr;
       SYMR sym;
 
-      sym_ptr = ((char *) debug_info->external_sym
-		 + (fdr_ptr->isymBase + 1) * debug_swap->external_sym_size);
-      (*debug_swap->swap_sym_in) (abfd, sym_ptr, &sym);
-      if (strcmp (debug_info->ss + fdr_ptr->issBase + sym.iss,
-		  STABS_SYMBOL) == 0)
-	stabs = TRUE;
+      if ((long) ((unsigned long) fdr_ptr->isymBase + 1) > 0
+	  && fdr_ptr->isymBase + 1 < debug_info->symbolic_header.isymMax)
+	{
+	  sym_ptr = ((char *) debug_info->external_sym
+		     + (fdr_ptr->isymBase + 1) * debug_swap->external_sym_size);
+	  (*debug_swap->swap_sym_in) (abfd, sym_ptr, &sym);
+	  if (fdr_ptr->issBase >= 0
+	      && fdr_ptr->issBase < debug_info->symbolic_header.issMax
+	      && sym.iss >= 0
+	      && sym.iss < (debug_info->symbolic_header.issMax
+			    - fdr_ptr->issBase)
+	      && strcmp (debug_info->ss + fdr_ptr->issBase + sym.iss,
+			 STABS_SYMBOL) == 0)
+	    stabs = true;
+	}
     }
 
+  line_info->cache.filename = NULL;
+  line_info->cache.functionname = NULL;
+  line_info->cache.line_num = 0;
+
   if (!stabs)
     {
       bfd_size_type external_pdr_size;
@@ -2062,7 +2120,7 @@ lookup_line (bfd *abfd,
 	     because we iterate over every FDR rather than just ones
 	     with a base address less than or equal to 'offset'.  */
 	  bfd_signed_vma dist = -1, min_dist = -1;
-	  char *pdr_hold;
+	  char *pdr_hold = NULL;
 	  char *pdr_end;
 
 	  fdr_ptr = tab[i].fdr;
@@ -2070,17 +2128,14 @@ lookup_line (bfd *abfd,
 	  pdr_ptr = ((char *) debug_info->external_pdr
 		     + fdr_ptr->ipdFirst * external_pdr_size);
 	  pdr_end = pdr_ptr + fdr_ptr->cpd * external_pdr_size;
-	  (*debug_swap->swap_pdr_in) (abfd, pdr_ptr, &pdr);
 	  /* Find PDR that is closest to OFFSET.  If pdr.prof is set,
 	     the procedure entry-point *may* be 0x10 below pdr.adr.  We
 	     simply pretend that pdr.prof *implies* a lower entry-point.
 	     This is safe because it just means that may identify 4 NOPs
 	     in front of the function as belonging to the function.  */
-	  for (pdr_hold = NULL;
-	       pdr_ptr < pdr_end;
-	       (pdr_ptr += external_pdr_size,
-		(*debug_swap->swap_pdr_in) (abfd, pdr_ptr, &pdr)))
+	  for (; pdr_ptr < pdr_end; pdr_ptr += external_pdr_size)
 	    {
+	      (*debug_swap->swap_pdr_in) (abfd, pdr_ptr, &pdr);
 	      if (offset >= (pdr.adr - 0x10 * pdr.prof))
 		{
 		  dist = offset - (pdr.adr - 0x10 * pdr.prof);
@@ -2108,7 +2163,7 @@ lookup_line (bfd *abfd,
       while (++i < line_info->fdrtab_len);
 
       if (!best_fdr || !best_pdr)
-	return FALSE;			/* Shouldn't happen...  */
+	return false;			/* Shouldn't happen...  */
 
       /* Phew, finally we got something that we can hold onto.  */
       fdr_ptr = best_fdr;
@@ -2118,12 +2173,20 @@ lookup_line (bfd *abfd,
 	 are stored in a very funky format, which I won't try to
 	 describe.  The search is bounded by the end of the FDRs line
 	 number entries.  */
-      line_end = debug_info->line + fdr_ptr->cbLineOffset + fdr_ptr->cbLine;
+      line_ptr = line_end = debug_info->line;
+      if (fdr_ptr->cbLineOffset < debug_info->symbolic_header.cbLine
+	  && fdr_ptr->cbLine <= (debug_info->symbolic_header.cbLine
+				 - fdr_ptr->cbLineOffset)
+	  && pdr.cbLineOffset <= (debug_info->symbolic_header.cbLine
+				  - fdr_ptr->cbLineOffset))
+	{
+	  line_end += fdr_ptr->cbLineOffset + fdr_ptr->cbLine;
+	  line_ptr += fdr_ptr->cbLineOffset + pdr.cbLineOffset;
+	}
 
       /* Make offset relative to procedure entry.  */
       offset -= pdr.adr - 0x10 * pdr.prof;
       lineno = pdr.lnLow;
-      line_ptr = debug_info->line + fdr_ptr->cbLineOffset + pdr.cbLineOffset;
       while (line_ptr < line_end)
 	{
 	  int delta;
@@ -2154,38 +2217,50 @@ lookup_line (bfd *abfd,
 	 symbols, at least according to gdb/mipsread.c.  */
       if (fdr_ptr->rss == -1)
 	{
-	  line_info->cache.filename = NULL;
-	  if (pdr.isym == -1)
-	    line_info->cache.functionname = NULL;
-	  else
-	    {
-	      EXTR proc_ext;
+	  EXTR proc_ext;
 
+	  if (pdr.isym >= 0
+	      && pdr.isym < debug_info->symbolic_header.iextMax)
+	    {
 	      (*debug_swap->swap_ext_in)
-		(abfd,
-		 ((char *) debug_info->external_ext
-		  + pdr.isym * debug_swap->external_ext_size),
+		(abfd, ((char *) debug_info->external_ext
+			+ pdr.isym * debug_swap->external_ext_size),
 		 &proc_ext);
-	      line_info->cache.functionname = (debug_info->ssext
-					       + proc_ext.asym.iss);
+	      if (proc_ext.asym.iss >= 0
+		  && proc_ext.asym.iss < debug_info->symbolic_header.issExtMax)
+		line_info->cache.functionname = (debug_info->ssext
+						 + proc_ext.asym.iss);
 	    }
 	}
-      else
+      else if (fdr_ptr->issBase >= 0
+	       && fdr_ptr->issBase < debug_info->symbolic_header.issMax
+	       && fdr_ptr->rss >= 0
+	       && fdr_ptr->rss < (debug_info->symbolic_header.issMax
+				  - fdr_ptr->issBase))
 	{
 	  SYMR proc_sym;
 
 	  line_info->cache.filename = (debug_info->ss
 				       + fdr_ptr->issBase
 				       + fdr_ptr->rss);
-	  (*debug_swap->swap_sym_in)
-	    (abfd,
-	     ((char *) debug_info->external_sym
-	      + ((fdr_ptr->isymBase + pdr.isym)
-		 * debug_swap->external_sym_size)),
-	     &proc_sym);
-	  line_info->cache.functionname = (debug_info->ss
-					   + fdr_ptr->issBase
-					   + proc_sym.iss);
+	  if (fdr_ptr->isymBase >= 0
+	      && fdr_ptr->isymBase < debug_info->symbolic_header.isymMax
+	      && pdr.isym >= 0
+	      && pdr.isym < (debug_info->symbolic_header.isymMax
+			     - fdr_ptr->isymBase))
+	    {
+	      (*debug_swap->swap_sym_in)
+		(abfd, ((char *) debug_info->external_sym
+			+ ((fdr_ptr->isymBase + pdr.isym)
+			   * debug_swap->external_sym_size)),
+		 &proc_sym);
+	      if (proc_sym.iss >= 0
+		  && proc_sym.iss < (debug_info->symbolic_header.issMax
+				     - fdr_ptr->issBase))
+		line_info->cache.functionname = (debug_info->ss
+						 + fdr_ptr->issBase
+						 + proc_sym.iss);
+	    }
 	}
       if (lineno == ilineNil)
 	lineno = 0;
@@ -2201,8 +2276,8 @@ lookup_line (bfd *abfd,
       const char *line_file_name;
       bfd_vma low_func_vma;
       bfd_vma low_line_vma;
-      bfd_boolean past_line;
-      bfd_boolean past_fn;
+      bool past_line;
+      bool past_fn;
       char *sym_ptr, *sym_ptr_end;
       size_t len, funclen;
       char *buffer = NULL;
@@ -2217,10 +2292,6 @@ lookup_line (bfd *abfd,
 	 looking through the symbols until we find both a line number
 	 and a function name which are beyond the address we want.  */
 
-      line_info->cache.filename = NULL;
-      line_info->cache.functionname = NULL;
-      line_info->cache.line_num = 0;
-
       directory_name = NULL;
       main_file_name = NULL;
       current_file_name = NULL;
@@ -2228,14 +2299,26 @@ lookup_line (bfd *abfd,
       line_file_name = NULL;
       low_func_vma = 0;
       low_line_vma = 0;
-      past_line = FALSE;
-      past_fn = FALSE;
+      past_line = false;
+      past_fn = false;
 
       external_sym_size = debug_swap->external_sym_size;
 
-      sym_ptr = ((char *) debug_info->external_sym
-		 + (fdr_ptr->isymBase + 2) * external_sym_size);
-      sym_ptr_end = sym_ptr + (fdr_ptr->csym - 2) * external_sym_size;
+      if (fdr_ptr->isymBase >= 0
+	  && fdr_ptr->isymBase < debug_info->symbolic_header.isymMax
+	  && fdr_ptr->csym >= 2
+	  && fdr_ptr->csym < (debug_info->symbolic_header.isymMax
+			      - fdr_ptr->isymBase))
+	{
+	  sym_ptr = ((char *) debug_info->external_sym
+		     + (fdr_ptr->isymBase + 2) * external_sym_size);
+	  sym_ptr_end = sym_ptr + (fdr_ptr->csym - 2) * external_sym_size;
+	}
+      else
+	{
+	  sym_ptr = NULL;
+	  sym_ptr_end = sym_ptr;
+	}
       for (;
 	   sym_ptr < sym_ptr_end && (! past_line || ! past_fn);
 	   sym_ptr += external_sym_size)
@@ -2249,8 +2332,13 @@ lookup_line (bfd *abfd,
 	      switch (ECOFF_UNMARK_STAB (sym.index))
 		{
 		case N_SO:
-		  main_file_name = current_file_name =
-		    debug_info->ss + fdr_ptr->issBase + sym.iss;
+		  if (fdr_ptr->issBase >= 0
+		      && fdr_ptr->issBase < debug_info->symbolic_header.issMax
+		      && sym.iss >= 0
+		      && sym.iss < (debug_info->symbolic_header.issMax
+				    - fdr_ptr->issBase))
+		    main_file_name = current_file_name
+		      = debug_info->ss + fdr_ptr->issBase + sym.iss;
 
 		  /* Check the next symbol to see if it is also an
 		     N_SO symbol.  */
@@ -2265,26 +2353,41 @@ lookup_line (bfd *abfd,
 			  && ECOFF_UNMARK_STAB (nextsym.index) == N_SO)
 			{
 			  directory_name = current_file_name;
-			  main_file_name = current_file_name =
-			    debug_info->ss + fdr_ptr->issBase + nextsym.iss;
+			  if (fdr_ptr->issBase >= 0
+			      && fdr_ptr->issBase < debug_info->symbolic_header.issMax
+			      && nextsym.iss >= 0
+			      && nextsym.iss < (debug_info->symbolic_header.issMax
+						- fdr_ptr->issBase))
+			  main_file_name = current_file_name
+			    = debug_info->ss + fdr_ptr->issBase + nextsym.iss;
 			  sym_ptr += external_sym_size;
 			}
 		    }
 		  break;
 
 		case N_SOL:
-		  current_file_name =
-		    debug_info->ss + fdr_ptr->issBase + sym.iss;
+		  if (fdr_ptr->issBase >= 0
+		      && fdr_ptr->issBase < debug_info->symbolic_header.issMax
+		      && sym.iss >= 0
+		      && sym.iss < (debug_info->symbolic_header.issMax
+				    - fdr_ptr->issBase))
+		    current_file_name
+		      = debug_info->ss + fdr_ptr->issBase + sym.iss;
 		  break;
 
 		case N_FUN:
 		  if (sym.value > offset)
-		    past_fn = TRUE;
+		    past_fn = true;
 		  else if (sym.value >= low_func_vma)
 		    {
 		      low_func_vma = sym.value;
-		      function_name =
-			debug_info->ss + fdr_ptr->issBase + sym.iss;
+		      if (fdr_ptr->issBase >= 0
+			  && fdr_ptr->issBase < debug_info->symbolic_header.issMax
+			  && sym.iss >= 0
+			  && sym.iss < (debug_info->symbolic_header.issMax
+					- fdr_ptr->issBase))
+			function_name
+			  = debug_info->ss + fdr_ptr->issBase + sym.iss;
 		    }
 		  break;
 		}
@@ -2292,7 +2395,7 @@ lookup_line (bfd *abfd,
 	  else if (sym.st == stLabel && sym.index != indexNil)
 	    {
 	      if (sym.value > offset)
-		past_line = TRUE;
+		past_line = true;
 	      else if (sym.value >= low_line_vma)
 		{
 		  low_line_vma = sym.value;
@@ -2320,12 +2423,11 @@ lookup_line (bfd *abfd,
 
       if (len != 0)
 	{
-	  if (line_info->find_buffer != NULL)
-	    free (line_info->find_buffer);
+	  free (line_info->find_buffer);
 	  buffer = (char *) bfd_malloc ((bfd_size_type) len);
-	  if (buffer == NULL)
-	    return FALSE;
 	  line_info->find_buffer = buffer;
+	  if (buffer == NULL)
+	    return false;
 	}
 
       if (function_name != NULL)
@@ -2352,12 +2454,12 @@ lookup_line (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Do the work of find_nearest_line.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_locate_line (bfd *abfd,
 			asection *section,
 			bfd_vma offset,
@@ -2381,7 +2483,7 @@ _bfd_ecoff_locate_line (bfd *abfd,
       if (! lookup_line (abfd, debug_info, debug_swap, line_info))
 	{
 	  line_info->cache.sect = NULL;
-	  return FALSE;
+	  return false;
 	}
     }
 
@@ -2389,7 +2491,7 @@ _bfd_ecoff_locate_line (bfd *abfd,
   *functionname_ptr = line_info->cache.functionname;
   *retline_ptr = line_info->cache.line_num;
 
-  return TRUE;
+  return true;
 }
 
 /* These routines copy symbolic information into a memory buffer.
@@ -2402,12 +2504,9 @@ _bfd_ecoff_locate_line (bfd *abfd,
 
 /* Collect a shuffle into a memory buffer.  */
 
-static bfd_boolean
+static bool
 ecoff_collect_shuffle (struct shuffle *l, bfd_byte *buff)
 {
-  unsigned long total;
-
-  total = 0;
   for (; l != (struct shuffle *) NULL; l = l->next)
     {
       if (! l->filep)
@@ -2415,20 +2514,18 @@ ecoff_collect_shuffle (struct shuffle *l
       else
 	{
 	  if (bfd_seek (l->u.file.input_bfd, l->u.file.offset, SEEK_SET) != 0
-	      || (bfd_bread (buff, (bfd_size_type) l->size, l->u.file.input_bfd)
-		  != l->size))
-	    return FALSE;
+	      || bfd_read (buff, l->size, l->u.file.input_bfd) != l->size)
+	    return false;
 	}
-      total += l->size;
       buff += l->size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy PDR information into a memory buffer.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_get_accumulated_pdr (void * handle,
 				bfd_byte *buff)
 {
@@ -2439,7 +2536,7 @@ _bfd_ecoff_get_accumulated_pdr (void * h
 
 /* Copy symbol information into a memory buffer.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_get_accumulated_sym (void * handle, bfd_byte *buff)
 {
   struct accumulate *ainfo = (struct accumulate *) handle;
@@ -2449,18 +2546,16 @@ _bfd_ecoff_get_accumulated_sym (void * h
 
 /* Copy the string table into a memory buffer.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_get_accumulated_ss (void * handle, bfd_byte *buff)
 {
   struct accumulate *ainfo = (struct accumulate *) handle;
   struct string_hash_entry *sh;
-  unsigned long total;
 
   /* The string table is written out from the hash table if this is a
      final link.  */
   BFD_ASSERT (ainfo->ss == (struct shuffle *) NULL);
   *buff++ = '\0';
-  total = 1;
   BFD_ASSERT (ainfo->ss_hash == NULL || ainfo->ss_hash->val == 1);
   for (sh = ainfo->ss_hash;
        sh != (struct string_hash_entry *) NULL;
@@ -2470,9 +2565,8 @@ _bfd_ecoff_get_accumulated_ss (void * ha
 
       len = strlen (sh->root.string);
       memcpy (buff, sh->root.string, len + 1);
-      total += len + 1;
       buff += len + 1;
     }
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ecoffswap.h ./bfd/ecoffswap.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ecoffswap.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/ecoffswap.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic ECOFF swapping routines, for BFD.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-am33lin.c ./bfd/elf32-am33lin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-am33lin.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-am33lin.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Matsushita AM33/2.0 support for 32-bit GNU/Linux ELF
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -38,7 +38,7 @@
 #define _bfd_mn10300_elf_final_write_processing	 _bfd_am33_elf_final_write_processing
 
 /* Support for core dump NOTE sections.  */
-static bfd_boolean
+static bool
 elf32_am33lin_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -47,7 +47,7 @@ elf32_am33lin_grok_prstatus (bfd *abfd,
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 184:
       case 188:		/* Linux/am33 */
@@ -69,13 +69,13 @@ elf32_am33lin_grok_prstatus (bfd *abfd,
 					  note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf32_am33lin_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 124:		/* Linux/am33 elf_prpsinfo */
 	elf_tdata (abfd)->core->program
@@ -96,12 +96,12 @@ elf32_am33lin_grok_psinfo (bfd *abfd, El
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 #define elf_backend_grok_prstatus	elf32_am33lin_grok_prstatus
 #define elf_backend_grok_psinfo		elf32_am33lin_grok_psinfo
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #include "elf-m10300.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-arc.c ./bfd/elf32-arc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-arc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-arc.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ARC-specific support for 32-bit ELF
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
    Contributed by Cupertino Miranda (cmiranda@synopsys.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -55,7 +55,7 @@ name_for_global_symbol (struct elf_link_
     Elf_Internal_Rela _rel;						\
     bfd_byte * _loc;							\
 									\
-    if (_htab->dynamic_sections_created == TRUE)				\
+    if (_htab->dynamic_sections_created)				\
       {									\
 	BFD_ASSERT (_htab->srel##SECTION &&_htab->srel##SECTION->contents); \
 	_loc = _htab->srel##SECTION->contents				\
@@ -125,58 +125,58 @@ bfd_put_32_me (bfd *abfd, bfd_vma value,
   bfd_put_16 (abfd, value & 0xffff, data + 2);
 }
 
-static ATTRIBUTE_UNUSED bfd_boolean
+static ATTRIBUTE_UNUSED bool
 is_reloc_PC_relative (reloc_howto_type *howto)
 {
-  return (strstr (howto->name, "PC") != NULL) ? TRUE : FALSE;
+  return strstr (howto->name, "PC") != NULL;
 }
 
-static bfd_boolean
+static bool
 is_reloc_SDA_relative (reloc_howto_type *howto)
 {
-  return (strstr (howto->name, "SDA") != NULL) ? TRUE : FALSE;
+  return strstr (howto->name, "SDA") != NULL;
 }
 
-static bfd_boolean
+static bool
 is_reloc_for_GOT (reloc_howto_type * howto)
 {
   if (strstr (howto->name, "TLS") != NULL)
-    return FALSE;
-  return (strstr (howto->name, "GOT") != NULL) ? TRUE : FALSE;
+    return false;
+  return strstr (howto->name, "GOT") != NULL;
 }
 
-static bfd_boolean
+static bool
 is_reloc_for_PLT (reloc_howto_type * howto)
 {
-  return (strstr (howto->name, "PLT") != NULL) ? TRUE : FALSE;
+  return strstr (howto->name, "PLT") != NULL;
 }
 
-static bfd_boolean
+static bool
 is_reloc_for_TLS (reloc_howto_type *howto)
 {
-  return (strstr (howto->name, "TLS") != NULL) ? TRUE : FALSE;
+  return strstr (howto->name, "TLS") != NULL;
 }
 
 struct arc_relocation_data
 {
-  bfd_signed_vma  reloc_offset;
-  bfd_signed_vma  reloc_addend;
-  bfd_signed_vma  got_offset_value;
+  bfd_signed_vma reloc_offset;
+  bfd_signed_vma reloc_addend;
+  bfd_signed_vma got_offset_value;
 
-  bfd_signed_vma  sym_value;
-  asection *	  sym_section;
+  bfd_signed_vma sym_value;
+  asection *sym_section;
 
   reloc_howto_type *howto;
 
-  asection *	  input_section;
+  asection *input_section;
 
-  bfd_signed_vma  sdata_begin_symbol_vma;
-  bfd_boolean	  sdata_begin_symbol_vma_set;
-  bfd_signed_vma  got_symbol_vma;
+  bfd_signed_vma sdata_begin_symbol_vma;
+  bool sdata_begin_symbol_vma_set;
+  bfd_signed_vma got_symbol_vma;
 
-  bfd_boolean	  should_relocate;
+  bool should_relocate;
 
-  const char *    symbol_name;
+  const char *symbol_name;
 };
 
 /* ARC ELF linker hash entry.  */
@@ -184,9 +184,6 @@ struct elf_arc_link_hash_entry
 {
   struct elf_link_hash_entry root;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   struct got_entry *got_ents;
 };
 
@@ -241,9 +238,9 @@ enum howto_list
 #undef ARC_RELOC_HOWTO
 
 #define ARC_RELOC_HOWTO(TYPE, VALUE, RSIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \
-  [TYPE] = HOWTO (R_##TYPE, 0, RSIZE, BITSIZE, FALSE, 0,		\
+  [TYPE] = HOWTO (R_##TYPE, 0, RSIZE, BITSIZE, false, 0,		\
 		  complain_overflow_##OVERFLOW, arc_elf_reloc,		\
-		  "R_" #TYPE, FALSE, 0, 0, FALSE),
+		  "R_" #TYPE, false, 0, 0, false),
 
 static struct reloc_howto_struct elf_arc_howto_table[] =
 {
@@ -252,17 +249,17 @@ static struct reloc_howto_struct elf_arc
    example.
  HOWTO (R_ARC_NONE, // Type.
     0, // Rightshift.
-    2, // Size (0 = byte, 1 = short, 2 = long).
+    4, // Size.
     32, // Bitsize.
-    FALSE, // PC_relative.
+    false, // PC_relative.
     0, // Bitpos.
     complain_overflow_bitfield, // Complain_on_overflow.
     bfd_elf_generic_reloc, // Special_function.
     "R_ARC_NONE", // Name.
-    TRUE, // Partial_inplace.
+    true, // Partial_inplace.
     0, // Src_mask.
     0, // Dst_mask.
-    FALSE), // PCrel_offset.
+    false), // PCrel_offset.
 */
 };
 #undef ARC_RELOC_HOWTO
@@ -277,7 +274,7 @@ arc_elf_howto_init (void)
   /* Only 32 bit data relocations should be marked as ME.  */		\
   if (strstr (#FORMULA, " ME ") != NULL)				\
     {									\
-      BFD_ASSERT (SIZE == 2);						\
+      BFD_ASSERT (SIZE == 4);						\
     }
 
 #include "elf/arc-reloc.def"
@@ -340,7 +337,6 @@ elf_arc_link_hash_newfunc (struct bfd_ha
 				     table, string));
   if (ret != NULL)
     {
-      ret->dyn_relocs = NULL;
       ret->got_ents = NULL;
     }
 
@@ -395,17 +391,17 @@ static const struct arc_reloc_map arc_re
 
 #undef ARC_RELOC_HOWTO
 
-typedef ATTRIBUTE_UNUSED bfd_vma (*replace_func) (unsigned, int ATTRIBUTE_UNUSED);
+typedef ATTRIBUTE_UNUSED unsigned (*replace_func) (unsigned, int ATTRIBUTE_UNUSED);
 
 #define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \
   case TYPE: \
-    func = (void *) RELOC_FUNCTION; \
+    func = RELOC_FUNCTION; \
     break;
 
 static replace_func
 get_replace_function (bfd *abfd, unsigned int r_type)
 {
-  void *func = NULL;
+  replace_func func = NULL;
 
   switch (r_type)
     {
@@ -415,7 +411,7 @@ get_replace_function (bfd *abfd, unsigne
   if (func == replace_bits24 && bfd_big_endian (abfd))
     func = replace_bits24_be;
 
-  return (replace_func) func;
+  return func;
 }
 #undef ARC_RELOC_HOWTO
 
@@ -435,16 +431,16 @@ arc_elf32_bfd_reloc_type_lookup (bfd * a
 }
 
 /* Function to set the ELF flag bits.  */
-static bfd_boolean
+static bool
 arc_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Print private flags.  */
-static bfd_boolean
+static bool
 arc_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -482,23 +478,23 @@ arc_elf_print_private_bfd_data (bfd *abf
     }
 
   fputc ('\n', file);
-  return TRUE;
+  return true;
 }
 
 /* Copy backend specific data from one object module to another.  */
 
-static bfd_boolean
+static bool
 arc_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (!elf_flags_init (obfd)
 	      || elf_elfheader (obfd)->e_flags == elf_elfheader (ibfd)->e_flags);
 
   elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
-  elf_flags_init (obfd) = TRUE;
+  elf_flags_init (obfd) = true;
 
   /* Copy object attributes.  */
   _bfd_elf_copy_obj_attributes (ibfd, obfd);
@@ -522,7 +518,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd * a
 
 /* Set the howto pointer for an ARC ELF reloc.  */
 
-static bfd_boolean
+static bool
 arc_info_to_howto_rel (bfd * abfd,
 		       arelent * cache_ptr,
 		       Elf_Internal_Rela * dst)
@@ -536,11 +532,11 @@ arc_info_to_howto_rel (bfd * abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = arc_elf_howto (r_type);
-  return TRUE;
+  return true;
 }
 
 /* Extract CPU features from an NTBS.  */
@@ -585,14 +581,14 @@ arc_stralloc (char * s1, const char * s2
 /* Merge ARC object attributes from IBFD into OBFD.  Raise an error if
    there are conflicting attributes.  */
 
-static bfd_boolean
+static bool
 arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   obj_attribute *in_attr;
   obj_attribute *out_attr;
   int i;
-  bfd_boolean result = TRUE;
+  bool result = true;
   const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
   char *tagname = NULL;
 
@@ -600,13 +596,13 @@ arc_elf_merge_attributes (bfd *ibfd, str
      of accepting unknown attributes in the first input file - but
      is that a bug?  */
   if (ibfd->flags & BFD_LINKER_CREATED)
-    return TRUE;
+    return true;
 
   /* Skip any input that hasn't attribute section.
      This enables to link object files without attribute section with
      any others.  */
   if (bfd_get_section_by_name (ibfd, sec_name) == NULL)
-    return TRUE;
+    return true;
 
   if (!elf_known_obj_attributes_proc (obfd)[0].i)
     {
@@ -619,7 +615,7 @@ arc_elf_merge_attributes (bfd *ibfd, str
 	 initialized.  */
       out_attr[0].i = 1;
 
-      return TRUE;
+      return true;
     }
 
   in_attr = elf_known_obj_attributes_proc (ibfd);
@@ -667,7 +663,7 @@ arc_elf_merge_attributes (bfd *ibfd, str
 		 obfd,
 		 tagval[in_attr[i].i],
 		 tagval[out_attr[i].i]);
-	      result = FALSE;
+	      result = false;
 	      break;
 	    }
 	  else
@@ -702,7 +698,7 @@ arc_elf_merge_attributes (bfd *ibfd, str
 		      (_("error: %pB: unable to merge ISA extension attributes "
 			 "%s"),
 		       obfd, bfd_feature_list[j].name);
-		    result = FALSE;
+		    result = false;
 		    break;
 		  }
 	      /* Second, if we have compatible features with the
@@ -726,7 +722,7 @@ arc_elf_merge_attributes (bfd *ibfd, str
 		      (_("error: %pB: conflicting ISA extension attributes "
 			 "%s with %s"),
 		       obfd, p1, p2);
-		    result = FALSE;
+		    result = false;
 		    break;
 		  }
 	      /* Everithing is alright.  */
@@ -765,7 +761,7 @@ arc_elf_merge_attributes (bfd *ibfd, str
 	      _bfd_error_handler
 		(_("error: %pB: cannot mix rf16 with full register set %pB"),
 		 obfd, ibfd);
-	      result = FALSE;
+	      result = false;
 	    }
 	  break;
 
@@ -795,7 +791,7 @@ arc_elf_merge_attributes (bfd *ibfd, str
 		   obfd, tagname,
 		   tagval[in_attr[i].i],
 		   tagval[out_attr[i].i]);
-		result = FALSE;
+		result = false;
 	      }
 	    tagname = NULL;
 	    break;
@@ -820,7 +816,7 @@ arc_elf_merge_attributes (bfd *ibfd, str
 	      _bfd_error_handler
 		(_("error: %pB: conflicting attributes %s"),
 		 obfd, tagname);
-	      result = FALSE;
+	      result = false;
 	    }
 	  break;
 
@@ -848,7 +844,7 @@ arc_elf_merge_attributes (bfd *ibfd, str
 
   /* Merge Tag_compatibility attributes and any common GNU ones.  */
   if (!_bfd_elf_merge_object_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   /* Check for any attributes not known on ARC.  */
   result &= _bfd_elf_merge_unknown_attribute_list (ibfd, obfd);
@@ -859,7 +855,7 @@ arc_elf_merge_attributes (bfd *ibfd, str
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 arc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -871,11 +867,11 @@ arc_elf_merge_private_bfd_data (bfd *ibf
 
    /* Check if we have the same endianess.  */
   if (! _bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   /* Collect ELF flags.  */
   in_flags = elf_elfheader (ibfd)->e_flags & EF_ARC_MACH_MSK;
@@ -883,33 +879,33 @@ arc_elf_merge_private_bfd_data (bfd *ibf
 
   if (!elf_flags_init (obfd)) /* First call, no flags set.  */
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       out_flags = in_flags;
     }
 
   if (!arc_elf_merge_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   /* Check to see if the input BFD actually contains any sections.  Do
      not short-circuit dynamic objects; their section list may be
      emptied by elf_link_add_object_symbols.  */
   if (!(ibfd->flags & DYNAMIC))
     {
-      bfd_boolean null_input_bfd = TRUE;
-      bfd_boolean only_data_sections = TRUE;
+      bool null_input_bfd = true;
+      bool only_data_sections = true;
 
       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
 	{
 	  if ((bfd_section_flags (sec)
 	       & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
 	      == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
-	    only_data_sections = FALSE;
+	    only_data_sections = false;
 
-	  null_input_bfd = FALSE;
+	  null_input_bfd = false;
 	}
 
       if (null_input_bfd || only_data_sections)
-	return TRUE;
+	return true;
     }
 
   /* Complain about various flag/architecture mismatches.  */
@@ -926,7 +922,7 @@ arc_elf_merge_private_bfd_data (bfd *ibf
 	  _bfd_error_handler (_("error: attempting to link %pB "
 				"with a binary %pB of different architecture"),
 			      ibfd, obfd);
-	  return FALSE;
+	  return false;
 	}
       else if ((in_flags != out_flags)
 	       /* If we have object attributes, then we already
@@ -942,7 +938,7 @@ arc_elf_merge_private_bfd_data (bfd *ibf
 		(_("%pB: uses different e_flags (%#x) fields than "
 		   "previous modules (%#x)"),
 		 ibfd, in_flags, out_flags);
-	      return FALSE;
+	      return false;
 	    }
 	  /* MWDT doesnt set the eflags hence make sure we choose the
 	     eflags set by gcc.  */
@@ -963,7 +959,7 @@ arc_elf_merge_private_bfd_data (bfd *ibf
       return bfd_set_arch_mach (obfd, bfd_arch_arc, bfd_get_mach (ibfd));
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return a best guess for the machine number based on the attributes.  */
@@ -991,7 +987,7 @@ bfd_arc_get_mach_from_attributes (bfd *
 }
 
 /* Set the right machine number for an ARC ELF file.  */
-static bfd_boolean
+static bool
 arc_elf_object_p (bfd * abfd)
 {
   /* Make sure this is initialised, or you'll have the potential of passing
@@ -1029,7 +1025,7 @@ arc_elf_object_p (bfd * abfd)
 	{
 	  _bfd_error_handler
 	    (_("error: the ARC4 architecture is no longer supported"));
-	  return FALSE;
+	  return false;
 	}
       else
 	{
@@ -1045,7 +1041,7 @@ arc_elf_object_p (bfd * abfd)
 /* The final processing done just before writing out an ARC ELF object file.
    This gets the ARC architecture right based on the machine number.  */
 
-static bfd_boolean
+static bool
 arc_elf_final_write_processing (bfd *abfd)
 {
   unsigned long emf;
@@ -1132,7 +1128,7 @@ debug_arc_reloc (struct arc_relocation_d
 #endif /* ARC_ENABLE_DEBUG */
 
 static bfd_vma
-middle_endian_convert (bfd_vma insn, bfd_boolean do_it)
+middle_endian_convert (bfd_vma insn, bool do_it)
 {
   if (do_it)
     {
@@ -1230,10 +1226,8 @@ arc_special_overflow_checks (const struc
   (bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
 #define JLI (bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
 #define _SDA_BASE_ (bfd_signed_vma) (reloc_data.sdata_begin_symbol_vma)
-#define TLS_REL (bfd_signed_vma) \
-  ((elf_hash_table (info))->tls_sec->output_section->vma)
-#define TLS_TBSS (align_power(TCB_SIZE, \
-		  reloc_data.sym_section->alignment_power))
+#define TLS_REL (bfd_signed_vma)(tls_sec->output_section->vma)
+#define TLS_TBSS (align_power (TCB_SIZE, tls_sec->alignment_power))
 
 #define none (0)
 
@@ -1255,11 +1249,11 @@ arc_special_overflow_checks (const struc
       else								\
 	ARC_DEBUG ("symbol_section->vma = NULL\n");			\
       if (input_section->output_section != NULL)			\
-	ARC_DEBUG ("symbol_section->vma = %#lx\n",			\
+	ARC_DEBUG ("input_section->vma = %#lx\n",			\
 		   input_section->output_section->vma			\
 		   + input_section->output_offset);			\
       else								\
-	ARC_DEBUG ("symbol_section->vma = NULL\n");			\
+	ARC_DEBUG ("input_section->vma = NULL\n");			\
       ARC_DEBUG ("PCL = %#lx\n", P);					\
       ARC_DEBUG ("P = %#lx\n", P);					\
       ARC_DEBUG ("G = %#lx\n", G);					\
@@ -1311,23 +1305,24 @@ arc_do_relocation (bfd_byte * contents,
   bfd * abfd = reloc_data.input_section->owner;
   struct elf_link_hash_table *htab ATTRIBUTE_UNUSED = elf_hash_table (info);
   bfd_reloc_status_type flag;
+  asection *tls_sec = htab->tls_sec;
 
   if (!reloc_data.should_relocate)
     return bfd_reloc_ok;
 
-  switch (reloc_data.howto->size)
+  switch (bfd_get_reloc_size (reloc_data.howto))
     {
-    case 2:
+    case 4:
       insn = arc_bfd_get_32 (abfd,
 			     contents + reloc_data.reloc_offset,
 			     reloc_data.input_section);
       break;
-    case 1:
+    case 2:
       insn = arc_bfd_get_16 (abfd,
 			     contents + reloc_data.reloc_offset,
 			     reloc_data.input_section);
       break;
-    case 0:
+    case 1:
       insn = arc_bfd_get_8 (abfd,
 			    contents + reloc_data.reloc_offset,
 			    reloc_data.input_section);
@@ -1340,6 +1335,20 @@ arc_do_relocation (bfd_byte * contents,
 
   orig_insn = insn;
 
+  /* If we resolve a TLS relocation, make sure we do have a valid TLS
+     section.  */
+  switch (reloc_data.howto->type)
+    {
+    case R_ARC_TLS_LE_32:
+      if (tls_sec == NULL)
+	return bfd_reloc_notsupported;
+      break;
+
+    default:
+      break;
+    }
+
+
   switch (reloc_data.howto->type)
     {
 #include "elf/arc-reloc.def"
@@ -1371,19 +1380,19 @@ arc_do_relocation (bfd_byte * contents,
     }
 
   /* Write updated instruction back to memory.  */
-  switch (reloc_data.howto->size)
+  switch (bfd_get_reloc_size (reloc_data.howto))
     {
-    case 2:
+    case 4:
       arc_bfd_put_32 (abfd, insn,
 		      contents + reloc_data.reloc_offset,
 		      reloc_data.input_section);
       break;
-    case 1:
+    case 2:
 	arc_bfd_put_16 (abfd, insn,
 			contents + reloc_data.reloc_offset,
 			reloc_data.input_section);
 	break;
-    case 0:
+    case 1:
       arc_bfd_put_8 (abfd, insn,
 		     contents + reloc_data.reloc_offset,
 		     reloc_data.input_section);
@@ -1427,7 +1436,7 @@ arc_do_relocation (bfd_byte * contents,
 	      local_section : is an array giving the section in the input file
 			      corresponding to the st_shndx field of each
 			      local symbol.  */
-static bfd_boolean
+static int
 elf_arc_relocate_section (bfd *			  output_bfd,
 			  struct bfd_link_info *  info,
 			  bfd *			  input_bfd,
@@ -1451,15 +1460,15 @@ elf_arc_relocate_section (bfd *			  outp
   relend = relocs + input_section->reloc_count;
   for (; rel < relend; wrel++, rel++)
     {
-      enum elf_arc_reloc_type	    r_type;
-      reloc_howto_type *	    howto;
-      unsigned long		    r_symndx;
-      struct elf_link_hash_entry *  h;
-      Elf_Internal_Sym *	    sym;
-      asection *		    sec;
-      struct elf_link_hash_entry *  h2;
-      const char *		    msg;
-      bfd_boolean		    unresolved_reloc = FALSE;
+      enum elf_arc_reloc_type r_type;
+      reloc_howto_type *howto;
+      unsigned long r_symndx;
+      struct elf_link_hash_entry *h;
+      Elf_Internal_Sym *sym;
+      asection *sec;
+      struct elf_link_hash_entry *h2;
+      const char *msg;
+      bool unresolved_reloc = false;
 
       struct arc_relocation_data reloc_data =
       {
@@ -1471,9 +1480,9 @@ elf_arc_relocate_section (bfd *			  outp
 	.howto = NULL,
 	.input_section = NULL,
 	.sdata_begin_symbol_vma = 0,
-	.sdata_begin_symbol_vma_set = FALSE,
+	.sdata_begin_symbol_vma_set = false,
 	.got_symbol_vma = 0,
-	.should_relocate = FALSE
+	.should_relocate = false
       };
 
       r_type = ELF32_R_TYPE (rel->r_info);
@@ -1481,7 +1490,7 @@ elf_arc_relocate_section (bfd *			  outp
       if (r_type >= (int) R_ARC_max)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       howto = arc_elf_howto (r_type);
 
@@ -1517,7 +1526,7 @@ elf_arc_relocate_section (bfd *			  outp
 	}
 
       h2 = elf_link_hash_lookup (elf_hash_table (info), "__SDATA_BEGIN__",
-				 FALSE, FALSE, TRUE);
+				 false, false, true);
 
       if (!reloc_data.sdata_begin_symbol_vma_set
 	  && h2 != NULL && h2->root.type != bfd_link_hash_undefined
@@ -1527,7 +1536,7 @@ elf_arc_relocate_section (bfd *			  outp
 	  reloc_data.sdata_begin_symbol_vma =
 	    (h2->root.u.def.value
 	     + h2->root.u.def.section->output_section->vma);
-	  reloc_data.sdata_begin_symbol_vma_set = TRUE;
+	  reloc_data.sdata_begin_symbol_vma_set = true;
 	}
 
       reloc_data.input_section = input_section;
@@ -1547,7 +1556,7 @@ elf_arc_relocate_section (bfd *			  outp
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 	  bfd_vma relocation ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
@@ -1631,7 +1640,7 @@ elf_arc_relocate_section (bfd *			  outp
 	    reloc_data.got_symbol_vma = htab->sgot->output_section->vma
 					+ htab->sgot->output_offset;
 
-	  reloc_data.should_relocate = TRUE;
+	  reloc_data.should_relocate = true;
 	}
       else /* Global symbol.  */
 	{
@@ -1665,7 +1674,7 @@ elf_arc_relocate_section (bfd *			  outp
 	      reloc_data.sym_value = h->root.u.def.value;
 	      reloc_data.sym_section = h->root.u.def.section;
 
-	      reloc_data.should_relocate = TRUE;
+	      reloc_data.should_relocate = true;
 
 	      if (is_reloc_for_GOT (howto) && !bfd_link_pic (info))
 		{
@@ -1699,7 +1708,7 @@ elf_arc_relocate_section (bfd *			  outp
 		{
 		  reloc_data.sym_value = h->root.u.def.value;
 		  reloc_data.sym_section = htab->sgot;
-		  reloc_data.should_relocate = TRUE;
+		  reloc_data.should_relocate = true;
 		}
 	      else if (is_reloc_for_PLT (howto)
 		       && h->plt.offset != (bfd_vma) -1)
@@ -1707,7 +1716,7 @@ elf_arc_relocate_section (bfd *			  outp
 		  /* TODO: This is repeated up here.  */
 		  reloc_data.sym_value = h->plt.offset;
 		  reloc_data.sym_section = htab->splt;
-		  reloc_data.should_relocate = TRUE;
+		  reloc_data.should_relocate = true;
 		}
 	      else
 		continue;
@@ -1719,7 +1728,7 @@ elf_arc_relocate_section (bfd *			  outp
 		  reloc_data.sym_value = h->root.u.def.value;
 		  reloc_data.sym_section = htab->sgot;
 
-		  reloc_data.should_relocate = TRUE;
+		  reloc_data.should_relocate = true;
 		}
 	      else if (is_reloc_for_PLT (howto))
 		{
@@ -1728,16 +1737,16 @@ elf_arc_relocate_section (bfd *			  outp
 		  if (bfd_link_executable (info))
 		    (*info->callbacks->undefined_symbol)
 		      (info, h->root.root.string, input_bfd, input_section,
-		       rel->r_offset, TRUE);
+		       rel->r_offset, true);
 		  reloc_data.sym_value = h->plt.offset;
 		  reloc_data.sym_section = htab->splt;
 
-		  reloc_data.should_relocate = TRUE;
+		  reloc_data.should_relocate = true;
 		}
 	      else if (!bfd_link_pic (info) || bfd_link_executable (info))
 		(*info->callbacks->undefined_symbol)
 		  (info, h->root.root.string, input_bfd, input_section,
-		   rel->r_offset, TRUE);
+		   rel->r_offset, true);
 	    }
 
 	  BFD_ASSERT (htab->sgot != NULL || !is_reloc_for_GOT (howto));
@@ -1749,7 +1758,7 @@ elf_arc_relocate_section (bfd *			  outp
       if ((is_reloc_for_GOT (howto)
 	   || is_reloc_for_TLS (howto)))
 	{
-	  reloc_data.should_relocate = TRUE;
+	  reloc_data.should_relocate = true;
 
 	  struct got_entry **list
 	    = get_got_entry_list_for_symbol (input_bfd, r_symndx, h);
@@ -1786,6 +1795,7 @@ elf_arc_relocate_section (bfd *			  outp
 	  case R_ARC_PC32:
 	  case R_ARC_32_PCREL:
 	    if (bfd_link_pic (info)
+		&& (input_section->flags & SEC_ALLOC) != 0
 		&& (!IS_ARC_PCREL_TYPE (r_type)
 		    || (h != NULL
 			&& h->dynindx != -1
@@ -1794,11 +1804,11 @@ elf_arc_relocate_section (bfd *			  outp
 	      {
 		Elf_Internal_Rela outrel;
 		bfd_byte *loc;
-		bfd_boolean skip = FALSE;
-		bfd_boolean relocate = FALSE;
+		bool skip = false;
+		bool relocate = false;
 		asection *sreloc = _bfd_elf_get_dynamic_reloc_section
 				 (input_bfd, input_section,
-				  /*RELA*/ TRUE);
+				  /*RELA*/ true);
 
 		BFD_ASSERT (sreloc != NULL);
 
@@ -1808,7 +1818,7 @@ elf_arc_relocate_section (bfd *			  outp
 							   rel->r_offset);
 
 		if (outrel.r_offset == (bfd_vma) -1)
-		  skip = TRUE;
+		  skip = true;
 
 		outrel.r_addend = rel->r_addend;
 		outrel.r_offset += (input_section->output_section->vma
@@ -1817,7 +1827,7 @@ elf_arc_relocate_section (bfd *			  outp
 		if (skip)
 		  {
 		    memset (&outrel, 0, sizeof outrel);
-		    relocate = FALSE;
+		    relocate = false;
 		  }
 		else if (h != NULL
 			 && h->dynindx != -1
@@ -1828,9 +1838,9 @@ elf_arc_relocate_section (bfd *			  outp
 		  {
 		    BFD_ASSERT (h != NULL);
 		    if ((input_section->flags & SEC_ALLOC) != 0)
-		      relocate = FALSE;
+		      relocate = false;
 		    else
-		      relocate = TRUE;
+		      relocate = true;
 
 		    BFD_ASSERT (h->dynindx != -1);
 		    outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
@@ -1847,7 +1857,7 @@ elf_arc_relocate_section (bfd *			  outp
 		       dynamic symbol table, and it's a regular symbol
 		       not defined in a shared object, then treat the
 		       symbol as local, resolve it now.  */
-		    relocate = TRUE;
+		    relocate = true;
 		    /* outrel.r_addend = 0; */
 		    outrel.r_info = ELF32_R_INFO (0, R_ARC_RELATIVE);
 		  }
@@ -1874,7 +1884,7 @@ elf_arc_relocate_section (bfd *			  outp
 	  _bfd_error_handler
 	    ("error: linker symbol __SDATA_BEGIN__ not found");
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       DEBUG_ARC_RELOC (reloc_data);
@@ -1887,7 +1897,7 @@ elf_arc_relocate_section (bfd *			  outp
 	  _bfd_error_handler
 	    (_("GOT and PLT relocations cannot be fixed with a non dynamic linker"));
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       msg = NULL;
@@ -1904,7 +1914,7 @@ elf_arc_relocate_section (bfd *			  outp
 
 	case bfd_reloc_undefined:
 	  (*info->callbacks->undefined_symbol)
-	    (info, reloc_data.symbol_name, input_bfd, input_section, rel->r_offset, TRUE);
+	    (info, reloc_data.symbol_name, input_bfd, input_section, rel->r_offset, true);
 	  break;
 
 	case bfd_reloc_other:
@@ -1935,17 +1945,18 @@ elf_arc_relocate_section (bfd *			  outp
 
       if (msg)
 	_bfd_error_handler (msg, input_bfd, input_section, reloc_data.symbol_name);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 #define elf_arc_hash_table(p) \
-    (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == ARC_ELF_DATA ? ((struct elf_arc_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == ARC_ELF_DATA)		\
+   ? (struct elf_arc_link_hash_table *) (p)->hash : NULL)
 
-static bfd_boolean
+static bool
 elf_arc_check_relocs (bfd *			 abfd,
 		      struct bfd_link_info *     info,
 		      asection *		 sec,
@@ -1960,7 +1971,7 @@ elf_arc_check_relocs (bfd *			 abfd,
   struct elf_link_hash_table *	htab = elf_hash_table (info);
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   if (htab->dynobj == NULL)
     htab->dynobj = abfd;
@@ -1982,7 +1993,7 @@ elf_arc_check_relocs (bfd *			 abfd,
       if (r_type >= (int) R_ARC_max)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       howto = arc_elf_howto (r_type);
 
@@ -2028,7 +2039,7 @@ elf_arc_check_relocs (bfd *			 abfd,
 		 arc_elf_howto (r_type)->name,
 		 name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	    /* In some cases we are not setting the 'non_got_ref'
@@ -2050,14 +2061,14 @@ elf_arc_check_relocs (bfd *			 abfd,
 		    if (info->dynamic
 			&& ! htab->dynamic_sections_created
 			&& ! _bfd_elf_link_create_dynamic_sections (abfd, info))
-		      return FALSE;
+		      return false;
 		    sreloc = _bfd_elf_make_dynamic_reloc_section (sec, dynobj,
 								  2, abfd,
 								  /*rela*/
-								  TRUE);
+								  true);
 
 		    if (sreloc == NULL)
-		      return FALSE;
+		      return false;
 		  }
 		sreloc->size += sizeof (Elf32_External_Rela);
 
@@ -2096,10 +2107,10 @@ elf_arc_check_relocs (bfd *			 abfd,
 		   arc_elf_howto (r_type)->name,
 		   name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  if (! _bfd_elf_create_got_section (dynobj, info))
-	    return FALSE;
+	    return false;
 
 	  arc_fill_got_info_for_reloc (
 		  arc_got_entry_type_for_reloc (howto),
@@ -2109,12 +2120,12 @@ elf_arc_check_relocs (bfd *			 abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 #define ELF_DYNAMIC_INTERPRETER  "/sbin/ld-uClibc.so"
 
-static struct plt_version_t *
+static const struct plt_version_t *
 arc_get_plt_version (struct bfd_link_info *info)
 {
   int i;
@@ -2148,7 +2159,7 @@ add_symbol_to_plt (struct bfd_link_info
   struct elf_link_hash_table *htab = elf_hash_table (info);
   bfd_vma ret;
 
-  struct plt_version_t *plt_data = arc_get_plt_version (info);
+  const struct plt_version_t *plt_data = arc_get_plt_version (info);
 
   /* If this is the first .plt entry, make room for the special first
      entry.  */
@@ -2228,7 +2239,7 @@ relocate_plt_for_symbol (bfd *output_bfd
 			 struct bfd_link_info *info,
 			 struct elf_link_hash_entry *h)
 {
-  struct plt_version_t *plt_data = arc_get_plt_version (info);
+  const struct plt_version_t *plt_data = arc_get_plt_version (info);
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
   bfd_vma plt_index = (h->plt.offset  - plt_data->entry_size)
@@ -2294,7 +2305,7 @@ static void
 relocate_plt_for_entry (bfd *abfd,
 			struct bfd_link_info *info)
 {
-  struct plt_version_t *plt_data = arc_get_plt_version (info);
+  const struct plt_version_t *plt_data = arc_get_plt_version (info);
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
   {
@@ -2317,7 +2328,7 @@ relocate_plt_for_entry (bfd *abfd,
    have to change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info,
 			      struct elf_link_hash_entry *h)
 {
@@ -2337,13 +2348,13 @@ elf_arc_adjust_dynamic_symbol (struct bf
 	     a procedure linkage table, and we can just do a PC32
 	     reloc instead.  */
 	  BFD_ASSERT (h->needs_plt);
-	  return TRUE;
+	  return true;
 	}
 
       /* Make sure this symbol is output as a dynamic symbol.  */
       if (h->dynindx == -1 && !h->forced_local
 	  && !bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
 
       if (bfd_link_pic (info)
 	  || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
@@ -2362,7 +2373,7 @@ elf_arc_adjust_dynamic_symbol (struct bf
 	  h->plt.offset = (bfd_vma) -1;
 	  h->needs_plt = 0;
 	}
-      return TRUE;
+      return true;
     }
 
   /* If this is a weak symbol, and there is a real definition, the
@@ -2374,7 +2385,7 @@ elf_arc_adjust_dynamic_symbol (struct bf
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2385,18 +2396,18 @@ elf_arc_adjust_dynamic_symbol (struct bf
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (!bfd_link_executable (info))
-    return TRUE;
+    return true;
 
   /* If there are no non-GOT references, we do not need a copy
      relocation.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -2410,7 +2421,7 @@ elf_arc_adjust_dynamic_symbol (struct bf
      same memory location for the variable.  */
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* We must generate a R_ARC_COPY reloc to tell the dynamic linker to
      copy the initial value out of the dynamic object and into the
@@ -2441,7 +2452,7 @@ elf_arc_adjust_dynamic_symbol (struct bf
 	       sym	  :
    Returns  : True/False as the return status.  */
 
-static bfd_boolean
+static bool
 elf_arc_finish_dynamic_symbol (bfd * output_bfd,
 			       struct bfd_link_info *info,
 			       struct elf_link_hash_entry *h,
@@ -2476,7 +2487,7 @@ elf_arc_finish_dynamic_symbol (bfd * out
       struct elf_arc_link_hash_table *arc_htab = elf_arc_hash_table (info);
 
       if (arc_htab == NULL)
-	return FALSE;
+	return false;
 
       if (h->dynindx == -1
 	  || (h->root.type != bfd_link_hash_defined
@@ -2508,14 +2519,14 @@ elf_arc_finish_dynamic_symbol (bfd * out
       || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 #define GET_SYMBOL_OR_SECTION(TAG, SYMBOL, SECTION)		\
   case TAG:							\
   if (SYMBOL != NULL)						\
     h = elf_link_hash_lookup (elf_hash_table (info),		\
-			      SYMBOL, FALSE, FALSE, TRUE);	\
+			      SYMBOL, false, false, true);	\
   else if (SECTION != NULL)					\
     s = bfd_get_linker_section (dynobj, SECTION);		\
   break;
@@ -2526,7 +2537,7 @@ struct obfd_info_group {
   struct bfd_link_info *info;
 };
 
-static bfd_boolean
+static bool
 arc_create_forced_local_got_entries_for_tls (struct bfd_hash_entry *bh,
 					     void *data)
 {
@@ -2549,7 +2560,7 @@ arc_create_forced_local_got_entries_for_
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -2561,7 +2572,7 @@ arc_create_forced_local_got_entries_for_
 	       sym	  :
    Returns  : True/False as the return status.  */
 
-static bfd_boolean
+static bool
 elf_arc_finish_dynamic_sections (bfd * output_bfd,
 				 struct bfd_link_info *info)
 {
@@ -2579,7 +2590,7 @@ elf_arc_finish_dynamic_sections (bfd * o
       for (; dyncon < dynconend; dyncon++)
 	{
 	  Elf_Internal_Dyn internal_dyn;
-	  bfd_boolean	  do_it = FALSE;
+	  bool do_it = false;
 
 	  struct elf_link_hash_entry *h = NULL;
 	  asection	 *s = NULL;
@@ -2621,7 +2632,7 @@ elf_arc_finish_dynamic_sections (bfd * o
 		     library and does not apply to this one.  */
 		  internal_dyn.d_un.d_val = 0;
 		}
-	      do_it = TRUE;
+	      do_it = true;
 	    }
 	  else if (s != NULL) /* With a section information.  */
 	    {
@@ -2634,12 +2645,12 @@ elf_arc_finish_dynamic_sections (bfd * o
 		  case DT_VERNEED:
 		    internal_dyn.d_un.d_ptr = (s->output_section->vma
 					       + s->output_offset);
-		    do_it = TRUE;
+		    do_it = true;
 		    break;
 
 		  case DT_PLTRELSZ:
 		    internal_dyn.d_un.d_val = s->size;
-		    do_it = TRUE;
+		    do_it = true;
 		    break;
 
 		  default:
@@ -2667,7 +2678,7 @@ elf_arc_finish_dynamic_sections (bfd * o
     {
       struct elf_link_hash_entry *h;
       h = elf_link_hash_lookup (elf_hash_table (info), "_GLOBAL_OFFSET_TABLE_",
-				 FALSE, FALSE, TRUE);
+				 false, false, true);
 
 	if (h != NULL && h->root.type != bfd_link_hash_undefined
 	    && h->root.u.def.section != NULL)
@@ -2692,25 +2703,24 @@ elf_arc_finish_dynamic_sections (bfd * o
   bfd_hash_traverse (&info->hash->table,
 		     arc_create_forced_local_got_entries_for_tls, &group);
 
-  return TRUE;
+  return true;
 }
 
 #define ADD_DYNAMIC_SYMBOL(NAME, TAG)					\
   h =  elf_link_hash_lookup (elf_hash_table (info),			\
-			     NAME, FALSE, FALSE, FALSE);		\
+			     NAME, false, false, false);		\
   if ((h != NULL && (h->ref_regular || h->def_regular)))		\
     if (! _bfd_elf_add_dynamic_entry (info, TAG, 0))			\
-      return FALSE;
+      return false;
 
 /* Set the sizes of the dynamic sections.  */
-static bfd_boolean
+static bool
 elf_arc_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 			       struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs_exist = FALSE;
-  bfd_boolean reltext_exist = FALSE;
+  bool relocs_exist = false;
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
   dynobj = htab->dynobj;
@@ -2762,32 +2772,10 @@ elf_arc_size_dynamic_sections (bfd *outp
 	{
 	  /* Strip this section if we don't need it.  */
 	}
-      else if (strncmp (s->name, ".rela", 5) == 0)
+      else if (startswith (s->name, ".rela"))
 	{
 	  if (s->size != 0 && s != htab->srelplt)
-	    {
-	      if (!reltext_exist)
-		{
-		  const char *name = s->name + 5;
-		  bfd *ibfd;
-		  for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
-		    if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
-			&& ibfd->flags & DYNAMIC)
-		      {
-			asection *target = bfd_get_section_by_name (ibfd, name);
-			if (target != NULL
-			    && elf_section_data (target)->sreloc == s
-			    && ((target->output_section->flags
-				 & (SEC_READONLY | SEC_ALLOC))
-				== (SEC_READONLY | SEC_ALLOC)))
-			  {
-			    reltext_exist = TRUE;
-			    break;
-			  }
-		      }
-		}
-	      relocs_exist = TRUE;
-	    }
+	    relocs_exist = true;
 
 	  /* We use the reloc_count field as a counter if we need to
 	     copy relocs into the output file.  */
@@ -2811,36 +2799,10 @@ elf_arc_size_dynamic_sections (bfd *outp
       /* Allocate memory for the section contents.  */
       s->contents = bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (htab->dynamic_sections_created)
-    {
-      /* TODO: Check if this is needed.  */
-      if (!bfd_link_pic (info))
-	if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0))
-		return FALSE;
-
-      if (htab->splt && (htab->splt->flags & SEC_EXCLUDE) == 0)
-	if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0))
-	  return FALSE;
-
-      if (relocs_exist)
-	if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT,
-					    sizeof (Elf32_External_Rela)))
-	  return FALSE;
-
-      if (reltext_exist)
-	if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0))
-	  return FALSE;
-    }
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs_exist);
 }
 
 
@@ -2908,7 +2870,7 @@ const struct elf_size_info arc_elf32_siz
    function relies on offsets inside elf_prstatus structure in Linux to be
    stable.  */
 
-static bfd_boolean
+static bool
 elf32_arc_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -2917,7 +2879,7 @@ elf32_arc_grok_prstatus (bfd *abfd, Elf_
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 236: /* sizeof (struct elf_prstatus) on Linux/arc.  */
       /* pr_cursig */
@@ -2952,7 +2914,7 @@ elf32_arc_obj_attrs_arg_type (int tag)
 
 /* Attribute numbers >=14 can be safely ignored.  */
 
-static bfd_boolean
+static bool
 elf32_arc_obj_attrs_handle_unknown (bfd *abfd, int tag)
 {
   if ((tag & 127) < (Tag_ARC_ISA_mpy_option + 1))
@@ -2961,14 +2923,14 @@ elf32_arc_obj_attrs_handle_unknown (bfd
 	(_("%pB: unknown mandatory ARC object attribute %d"),
 	 abfd, tag);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   else
     {
       _bfd_error_handler
 	(_("warning: %pB: unknown ARC object attribute %d"),
 	 abfd, tag);
-      return TRUE;
+      return true;
     }
 }
 
@@ -2976,7 +2938,7 @@ elf32_arc_obj_attrs_handle_unknown (bfd
    called when bfd_section_from_shdr finds a section with an unknown
    type.  */
 
-static bfd_boolean
+static bool
 elf32_arc_section_from_shdr (bfd *abfd,
 			     Elf_Internal_Shdr * hdr,
 			     const char *name,
@@ -2989,13 +2951,13 @@ elf32_arc_section_from_shdr (bfd *abfd,
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Relaxation hook.
@@ -3006,9 +2968,9 @@ elf32_arc_section_from_shdr (bfd *abfd,
 
 */
 
-static bfd_boolean
+static bool
 arc_elf_relax_section (bfd *abfd, asection *sec,
-		       struct bfd_link_info *link_info, bfd_boolean *again)
+		       struct bfd_link_info *link_info, bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -3017,16 +2979,17 @@ arc_elf_relax_section (bfd *abfd, asecti
   Elf_Internal_Sym *isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if this
      section does not have relocs, or if this is not a code
      section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -3104,7 +3067,7 @@ arc_elf_relax_section (bfd *abfd, asecti
 	  bfd_put_32_me (abfd, code, contents + irel->r_offset - 4);
 
 	  /* The size isn't changed, don't redo.  */
-	  *again = FALSE;
+	  *again = false;
 	}
     }
 
@@ -3128,24 +3091,20 @@ arc_elf_relax_section (bfd *abfd, asecti
        elf_section_data (sec)->this_hdr.contents = contents;
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 #define TARGET_LITTLE_SYM   arc_elf32_le_vec
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-arm.c ./bfd/elf32-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-arm.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-arm.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for ARM
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -66,10 +66,10 @@
 /* The Adjusted Place, as defined by AAELF.  */
 #define Pa(X) ((X) & 0xfffffffc)
 
-static bfd_boolean elf32_arm_write_section (bfd *output_bfd,
-					    struct bfd_link_info *link_info,
-					    asection *sec,
-					    bfd_byte *contents);
+static bool elf32_arm_write_section (bfd *output_bfd,
+				     struct bfd_link_info *link_info,
+				     asection *sec,
+				     bfd_byte *contents);
 
 /* Note: code such as elf32_arm_reloc_type_lookup expect to use e.g.
    R_ARM_PC24 as an index into this, and find the R_ARM_PC24 HOWTO
@@ -80,1581 +80,1581 @@ static reloc_howto_type elf32_arm_howto_
   /* No relocation.  */
   HOWTO (R_ARM_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_PC24,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_PC24",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ffffff,		/* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 32 bit absolute */
   HOWTO (R_ARM_ABS32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ABS32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* standard 32bit pc-relative reloc */
   HOWTO (R_ARM_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_REL32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 8 bit absolute - R_ARM_LDR_PC_G0 in AAELF */
   HOWTO (R_ARM_LDR_PC_G0,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDR_PC_G0",     /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
    /* 16 bit absolute */
   HOWTO (R_ARM_ABS16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ABS16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 12 bit absolute */
   HOWTO (R_ARM_ABS12,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ABS12",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_ABS5,	/* type */
 	 6,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 5,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_ABS5",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000007e0,		/* src_mask */
 	 0x000007e0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 8 bit absolute */
   HOWTO (R_ARM_ABS8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ABS8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_SBREL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_SBREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_CALL,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_CALL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x07ff2fff,		/* src_mask */
 	 0x07ff2fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_THM_PC8,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_PC8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_BREL_ADJ,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_BREL_ADJ",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_DESC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TLS_DESC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_SWI8,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_SWI8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* BLX instruction for the ARM.  */
   HOWTO (R_ARM_XPC25,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_XPC25",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ffffff,		/* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* BLX instruction for the Thumb.  */
   HOWTO (R_ARM_THM_XPC22,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_XPC22",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x07ff2fff,		/* src_mask */
 	 0x07ff2fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Dynamic TLS relocations.  */
 
   HOWTO (R_ARM_TLS_DTPMOD32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_TLS_DTPMOD32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_DTPOFF32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_TLS_DTPOFF32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_TPOFF32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_TLS_TPOFF32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Relocs used in ARM Linux */
 
   HOWTO (R_ARM_COPY,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_COPY",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_GLOB_DAT",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_JUMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_JUMP_SLOT",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_RELATIVE",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_GOTOFF32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_GOTOFF32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_GOTPC,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_GOTPC",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_GOT32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_GOT32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_PLT32,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_PLT32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ffffff,		/* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_CALL,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_CALL",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ffffff,		/* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_JUMP24,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_JUMP24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ffffff,		/* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_THM_JUMP24,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_JUMP24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x07ff2fff,		/* src_mask */
 	 0x07ff2fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_BASE_ABS,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_BASE_ABS",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_PCREL7_0,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_PCREL_7_0",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_PCREL15_8,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_PCREL_15_8",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_PCREL23_15,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 16,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_PCREL_23_15",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDR_SBREL_11_0,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDR_SBREL_11_0",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_SBREL_19_12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 12,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_SBREL_19_12",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000ff000,		/* src_mask */
 	 0x000ff000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_SBREL_27_20,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 20,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_SBREL_27_20",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0ff00000,		/* src_mask */
 	 0x0ff00000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TARGET1,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TARGET1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_ROSEGREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ROSEGREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_V4BX,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_V4BX",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TARGET2,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TARGET2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_PREL31,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 31,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_PREL31",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x7fffffff,		/* src_mask */
 	 0x7fffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_MOVW_ABS_NC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_MOVW_ABS_NC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000f0fff,		/* src_mask */
 	 0x000f0fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_MOVT_ABS,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_MOVT_ABS",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000f0fff,		/* src_mask */
 	 0x000f0fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_MOVW_PREL_NC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_MOVW_PREL_NC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000f0fff,		/* src_mask */
 	 0x000f0fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_MOVT_PREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_MOVT_PREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000f0fff,		/* src_mask */
 	 0x000f0fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_THM_MOVW_ABS_NC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_MOVW_ABS_NC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x040f70ff,		/* src_mask */
 	 0x040f70ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_MOVT_ABS,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_MOVT_ABS",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x040f70ff,		/* src_mask */
 	 0x040f70ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_MOVW_PREL_NC,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_MOVW_PREL_NC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x040f70ff,		/* src_mask */
 	 0x040f70ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_THM_MOVT_PREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_MOVT_PREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x040f70ff,		/* src_mask */
 	 0x040f70ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_THM_JUMP19,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_THM_JUMP19",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x043f2fff,		/* src_mask */
 	 0x043f2fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_THM_JUMP6,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 6,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_JUMP6",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x02f8,		/* src_mask */
 	 0x02f8,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* These are declared as 13-bit signed relocations because we can
      address -4095 .. 4095(base) by altering ADDW to SUBW or vice
      versa.  */
   HOWTO (R_ARM_THM_ALU_PREL_11_0,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 13,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_ALU_PREL_11_0",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_THM_PC12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 13,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_PC12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ABS32_NOI,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ABS32_NOI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_REL32_NOI,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_REL32_NOI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Group relocations.  */
 
   HOWTO (R_ARM_ALU_PC_G0_NC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_PC_G0_NC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_PC_G0,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_PC_G0",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_PC_G1_NC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_PC_G1_NC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_PC_G1,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_PC_G1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_PC_G2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_PC_G2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDR_PC_G1,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDR_PC_G1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDR_PC_G2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDR_PC_G2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDRS_PC_G0,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDRS_PC_G0",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDRS_PC_G1,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDRS_PC_G1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDRS_PC_G2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDRS_PC_G2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDC_PC_G0,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDC_PC_G0",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDC_PC_G1,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDC_PC_G1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDC_PC_G2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDC_PC_G2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_SB_G0_NC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_SB_G0_NC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_SB_G0,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_SB_G0",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_SB_G1_NC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_SB_G1_NC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_SB_G1,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_SB_G1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_ALU_SB_G2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_ALU_SB_G2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDR_SB_G0,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDR_SB_G0",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDR_SB_G1,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDR_SB_G1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDR_SB_G2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDR_SB_G2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDRS_SB_G0,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDRS_SB_G0",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDRS_SB_G1,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDRS_SB_G1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDRS_SB_G2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDRS_SB_G2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDC_SB_G0,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDC_SB_G0",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDC_SB_G1,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDC_SB_G1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_LDC_SB_G2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_LDC_SB_G2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* End of group relocations.  */
 
   HOWTO (R_ARM_MOVW_BREL_NC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_MOVW_BREL_NC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_MOVT_BREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_MOVT_BREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_MOVW_BREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_MOVW_BREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_MOVW_BREL_NC,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_MOVW_BREL_NC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x040f70ff,		/* src_mask */
 	 0x040f70ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_MOVT_BREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_MOVT_BREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x040f70ff,		/* src_mask */
 	 0x040f70ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_MOVW_BREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_MOVW_BREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x040f70ff,		/* src_mask */
 	 0x040f70ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_GOTDESC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_ARM_TLS_GOTDESC",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_CALL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TLS_CALL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ffffff,		/* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_DESCSEQ,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
-	 complain_overflow_bitfield,/* complain_on_overflow */
+	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TLS_DESCSEQ",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_TLS_CALL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_TLS_CALL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x07ff07ff,		/* src_mask */
 	 0x07ff07ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_PLT32_ABS,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_PLT32_ABS",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_GOT_ABS,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_GOT_ABS",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   HOWTO (R_ARM_GOT_PREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_GOT_PREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_GOT_BREL12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_GOT_BREL12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_GOTOFF12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_GOTOFF12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (R_ARM_GOTRELAX),	 /* reserved for future GOT-load optimizations */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_ARM_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_ARM_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_ARM_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_ARM_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_THM_JUMP11,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 11,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_JUMP11",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000007ff,		/* src_mask */
 	 0x000007ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_ARM_THM_JUMP8,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_JUMP8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* TLS relocations */
   HOWTO (R_ARM_TLS_GD32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_ARM_TLS_GD32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_LDM32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_TLS_LDM32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_LDO32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_TLS_LDO32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_IE32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			 /* pc_relative */
+	 false,			 /* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_ARM_TLS_IE32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_LE32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_ARM_TLS_LE32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_LDO12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TLS_LDO12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_LE12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TLS_LE12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_TLS_IE12GP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TLS_IE12GP",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000fff,		/* src_mask */
 	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 112-127 private relocations.  */
   EMPTY_HOWTO (112),
@@ -1679,111 +1679,111 @@ static reloc_howto_type elf32_arm_howto_
 
   HOWTO (R_ARM_THM_TLS_DESCSEQ,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
-	 complain_overflow_bitfield,/* complain_on_overflow */
+	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_THM_TLS_DESCSEQ",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   EMPTY_HOWTO (130),
   EMPTY_HOWTO (131),
   HOWTO (R_ARM_THM_ALU_ABS_G0_NC,/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_bitfield,/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_ARM_THM_ALU_ABS_G0_NC",/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0x00000000,		/* src_mask.  */
 	 0x00000000,		/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
   HOWTO (R_ARM_THM_ALU_ABS_G1_NC,/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_bitfield,/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_ARM_THM_ALU_ABS_G1_NC",/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0x00000000,		/* src_mask.  */
 	 0x00000000,		/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
   HOWTO (R_ARM_THM_ALU_ABS_G2_NC,/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_bitfield,/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_ARM_THM_ALU_ABS_G2_NC",/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0x00000000,		/* src_mask.  */
 	 0x00000000,		/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
   HOWTO (R_ARM_THM_ALU_ABS_G3_NC,/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_bitfield,/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_ARM_THM_ALU_ABS_G3_NC",/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0x00000000,		/* src_mask.  */
 	 0x00000000,		/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
   /* Relocations for Armv8.1-M Mainline.  */
   HOWTO (R_ARM_THM_BF16,	/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont,/* do not complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_ARM_THM_BF16",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0x001f0ffe,		/* src_mask.  */
 	 0x001f0ffe,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
   HOWTO (R_ARM_THM_BF12,	/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 12,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont,/* do not complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_ARM_THM_BF12",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0x00010ffe,		/* src_mask.  */
 	 0x00010ffe,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
   HOWTO (R_ARM_THM_BF18,	/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 18,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont,/* do not complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_ARM_THM_BF18",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0x007f0ffe,		/* src_mask.  */
 	 0x007f0ffe,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 };
 
 /* 160 onwards: */
@@ -1791,108 +1791,108 @@ static reloc_howto_type elf32_arm_howto_
 {
   HOWTO (R_ARM_IRELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_ARM_IRELATIVE",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_ARM_GOTFUNCDESC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_GOTFUNCDESC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_ARM_GOTOFFFUNCDESC, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_GOTOFFFUNCDESC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_ARM_FUNCDESC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_FUNCDESC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_ARM_FUNCDESC_VALUE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_FUNCDESC_VALUE",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_ARM_TLS_GD32_FDPIC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TLS_GD32_FDPIC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_ARM_TLS_LDM32_FDPIC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TLS_LDM32_FDPIC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_ARM_TLS_IE32_FDPIC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_TLS_IE32_FDPIC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 /* 249-255 extended, currently unused, relocations:  */
@@ -1900,59 +1900,59 @@ static reloc_howto_type elf32_arm_howto_
 {
   HOWTO (R_ARM_RREL32,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_RREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_RABS32,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_RABS32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_RPC24,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_RPC24",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_ARM_RBASE,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_ARM_RBASE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false)			/* pcrel_offset */
 };
 
 static reloc_howto_type *
@@ -1972,7 +1972,7 @@ elf32_arm_howto_from_type (unsigned int
   return NULL;
 }
 
-static bfd_boolean
+static bool
 elf32_arm_info_to_howto (bfd * abfd, arelent * bfd_reloc,
 			 Elf_Internal_Rela * elf_reloc)
 {
@@ -1985,9 +1985,9 @@ elf32_arm_info_to_howto (bfd * abfd, are
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 struct elf32_arm_reloc_map
@@ -2140,7 +2140,7 @@ elf32_arm_reloc_name_lookup (bfd *abfd A
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf32_arm_nabi_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -2149,7 +2149,7 @@ elf32_arm_nabi_grok_prstatus (bfd *abfd,
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 148:		/* Linux/ARM 32-bit.  */
 	/* pr_cursig */
@@ -2170,13 +2170,13 @@ elf32_arm_nabi_grok_prstatus (bfd *abfd,
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf32_arm_nabi_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 124:		/* Linux/ARM elf_prpsinfo.  */
 	elf_tdata (abfd)->core->pid
@@ -2198,7 +2198,7 @@ elf32_arm_nabi_grok_psinfo (bfd *abfd, E
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 static char *
@@ -2426,7 +2426,7 @@ static const bfd_vma elf32_arm_plt_entry
   0xe5bcf000,		/* ldr	 pc, [ip, #0xNNN]!   */
 };
 
-static bfd_boolean elf32_arm_use_long_plt_entry = FALSE;
+static bool elf32_arm_use_long_plt_entry = false;
 
 #endif /* not FOUR_WORD_PLT */
 
@@ -2453,8 +2453,8 @@ static const bfd_vma elf32_thumb2_plt_en
   0x0c00f240,		/* movw	   ip, #0xNNNN	  */
   0x0c00f2c0,		/* movt	   ip, #0xNNNN	  */
   0xf8dc44fc,		/* add	   ip, pc	  */
-  0xe7fdf000		/* ldr.w   pc, [ip]	  */
-			/* b      .-2		  */
+  0xe7fcf000		/* ldr.w   pc, [ip]	  */
+			/* b      .-4		  */
 };
 
 /* The format of the first entry in the procedure linkage table
@@ -2497,14 +2497,6 @@ static const bfd_vma elf32_arm_plt_thumb
   0xe7fd		/* b .-2 */
 };
 
-/* The entries in a PLT when using a DLL-based target with multiple
-   address spaces.  */
-static const bfd_vma elf32_arm_symbian_plt_entry [] =
-{
-  0xe51ff004,	      /* ldr   pc, [pc, #-4] */
-  0x00000000,	      /* dcd   R_ARM_GLOB_DAT(X) */
-};
-
 /* The first entry in a procedure linkage table looks like
    this.  It is set up so that any shared library function that is
    called before the relocation has been set up calls the dynamic
@@ -2544,11 +2536,23 @@ static const bfd_vma elf32_arm_nacl_plt_
   0xea000000,		/* b	.Lplt_tail			*/
 };
 
+/* PR 28924:
+   There was a bug due to too high values of THM_MAX_FWD_BRANCH_OFFSET and
+   THM2_MAX_FWD_BRANCH_OFFSET.  The first macro concerns the case when Thumb-2
+   is not available, and second macro when Thumb-2 is available.  Among other
+   things, they affect the range of branches represented as BLX instructions
+   in Encoding T2 defined in Section A8.8.25 of the ARM Architecture
+   Reference Manual ARMv7-A and ARMv7-R edition issue C.d.  Such branches are
+   specified there to have a maximum forward offset that is a multiple of 4.
+   Previously, the respective values defined here were multiples of 2 but not
+   4 and they are included in comments for reference.  */
 #define ARM_MAX_FWD_BRANCH_OFFSET  ((((1 << 23) - 1) << 2) + 8)
-#define ARM_MAX_BWD_BRANCH_OFFSET  ((-((1 << 23) << 2)) + 8)
-#define THM_MAX_FWD_BRANCH_OFFSET  ((1 << 22) -2 + 4)
+#define ARM_MAX_BWD_BRANCH_OFFSET ((-((1 << 23) << 2)) + 8)
+#define THM_MAX_FWD_BRANCH_OFFSET   ((1 << 22) - 4 + 4)
+/* #def THM_MAX_FWD_BRANCH_OFFSET   ((1 << 22) - 2 + 4) */
 #define THM_MAX_BWD_BRANCH_OFFSET  (-(1 << 22) + 4)
-#define THM2_MAX_FWD_BRANCH_OFFSET (((1 << 24) - 2) + 4)
+#define THM2_MAX_FWD_BRANCH_OFFSET (((1 << 24) - 4) + 4)
+/* #def THM2_MAX_FWD_BRANCH_OFFSET (((1 << 24) - 2) + 4) */
 #define THM2_MAX_BWD_BRANCH_OFFSET (-(1 << 24) + 4)
 #define THM2_MAX_FWD_COND_BRANCH_OFFSET (((1 << 20) -2) + 4)
 #define THM2_MAX_BWD_COND_BRANCH_OFFSET (-(1 << 20) + 4)
@@ -2839,29 +2843,29 @@ static const insn_sequence elf32_arm_stu
 
 /* One entry per long/short branch stub defined above.  */
 #define DEF_STUBS \
-  DEF_STUB(long_branch_any_any)	\
-  DEF_STUB(long_branch_v4t_arm_thumb) \
-  DEF_STUB(long_branch_thumb_only) \
-  DEF_STUB(long_branch_v4t_thumb_thumb)	\
-  DEF_STUB(long_branch_v4t_thumb_arm) \
-  DEF_STUB(short_branch_v4t_thumb_arm) \
-  DEF_STUB(long_branch_any_arm_pic) \
-  DEF_STUB(long_branch_any_thumb_pic) \
-  DEF_STUB(long_branch_v4t_thumb_thumb_pic) \
-  DEF_STUB(long_branch_v4t_arm_thumb_pic) \
-  DEF_STUB(long_branch_v4t_thumb_arm_pic) \
-  DEF_STUB(long_branch_thumb_only_pic) \
-  DEF_STUB(long_branch_any_tls_pic) \
-  DEF_STUB(long_branch_v4t_thumb_tls_pic) \
-  DEF_STUB(long_branch_arm_nacl) \
-  DEF_STUB(long_branch_arm_nacl_pic) \
-  DEF_STUB(cmse_branch_thumb_only) \
-  DEF_STUB(a8_veneer_b_cond) \
-  DEF_STUB(a8_veneer_b) \
-  DEF_STUB(a8_veneer_bl) \
-  DEF_STUB(a8_veneer_blx) \
-  DEF_STUB(long_branch_thumb2_only) \
-  DEF_STUB(long_branch_thumb2_only_pure)
+  DEF_STUB (long_branch_any_any)	\
+  DEF_STUB (long_branch_v4t_arm_thumb) \
+  DEF_STUB (long_branch_thumb_only) \
+  DEF_STUB (long_branch_v4t_thumb_thumb)	\
+  DEF_STUB (long_branch_v4t_thumb_arm) \
+  DEF_STUB (short_branch_v4t_thumb_arm) \
+  DEF_STUB (long_branch_any_arm_pic) \
+  DEF_STUB (long_branch_any_thumb_pic) \
+  DEF_STUB (long_branch_v4t_thumb_thumb_pic) \
+  DEF_STUB (long_branch_v4t_arm_thumb_pic) \
+  DEF_STUB (long_branch_v4t_thumb_arm_pic) \
+  DEF_STUB (long_branch_thumb_only_pic) \
+  DEF_STUB (long_branch_any_tls_pic) \
+  DEF_STUB (long_branch_v4t_thumb_tls_pic) \
+  DEF_STUB (long_branch_arm_nacl) \
+  DEF_STUB (long_branch_arm_nacl_pic) \
+  DEF_STUB (cmse_branch_thumb_only) \
+  DEF_STUB (a8_veneer_b_cond) \
+  DEF_STUB (a8_veneer_b) \
+  DEF_STUB (a8_veneer_bl) \
+  DEF_STUB (a8_veneer_blx) \
+  DEF_STUB (long_branch_thumb2_only) \
+  DEF_STUB (long_branch_thumb2_only_pure)
 
 #define DEF_STUB(x) arm_stub_##x,
 enum elf32_arm_stub_type
@@ -3096,7 +3100,7 @@ struct a8_erratum_reloc
   const char *sym_name;
   unsigned int r_type;
   enum arm_st_branch_type branch_type;
-  bfd_boolean non_a8_stub;
+  bool non_a8_stub;
 };
 
 /* The size of the thread control block.  */
@@ -3143,7 +3147,8 @@ struct arm_local_iplt_info
 };
 
 /* Structure to handle FDPIC support for local functions.  */
-struct fdpic_local {
+struct fdpic_local
+{
   unsigned int funcdesc_cnt;
   unsigned int gotofffuncdesc_cnt;
   int funcdesc_offset;
@@ -3153,6 +3158,16 @@ struct elf_arm_obj_tdata
 {
   struct elf_obj_tdata root;
 
+  /* Zero to warn when linking objects with incompatible enum sizes.  */
+  int no_enum_size_warning;
+
+  /* Zero to warn when linking objects with incompatible wchar_t sizes.  */
+  int no_wchar_size_warning;
+
+  /* The number of entries in each of the arrays in this strcuture.
+     Used to avoid buffer overruns.  */
+  bfd_size_type num_entries;
+
   /* tls_type for each local got entry.  */
   char *local_got_tls_type;
 
@@ -3162,12 +3177,6 @@ struct elf_arm_obj_tdata
   /* Information for local symbols that need entries in .iplt.  */
   struct arm_local_iplt_info **local_iplt;
 
-  /* Zero to warn when linking objects with incompatible enum sizes.  */
-  int no_enum_size_warning;
-
-  /* Zero to warn when linking objects with incompatible wchar_t sizes.  */
-  int no_wchar_size_warning;
-
   /* Maintains FDPIC counters and funcdesc info.  */
   struct fdpic_local *local_fdpic_cnts;
 };
@@ -3175,6 +3184,9 @@ struct elf_arm_obj_tdata
 #define elf_arm_tdata(bfd) \
   ((struct elf_arm_obj_tdata *) (bfd)->tdata.any)
 
+#define elf32_arm_num_entries(bfd) \
+  (elf_arm_tdata (bfd)->num_entries)
+
 #define elf32_arm_local_got_tls_type(bfd) \
   (elf_arm_tdata (bfd)->local_got_tls_type)
 
@@ -3192,7 +3204,7 @@ struct elf_arm_obj_tdata
    && elf_tdata (bfd) != NULL \
    && elf_object_id (bfd) == ARM_ELF_DATA)
 
-static bfd_boolean
+static bool
 elf32_arm_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct elf_arm_obj_tdata),
@@ -3215,9 +3227,6 @@ struct elf32_arm_link_hash_entry
 {
   struct elf_link_hash_entry root;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   /* ARM-specific PLT information.  */
   struct arm_plt_info plt;
 
@@ -3254,13 +3263,14 @@ struct elf32_arm_link_hash_entry
 #define elf32_arm_link_hash_traverse(table, func, info)			\
   (elf_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the ARM elf linker hash table from a link_info structure.  */
-#define elf32_arm_hash_table(info) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((info)->hash)) \
-  == ARM_ELF_DATA ? ((struct elf32_arm_link_hash_table *) ((info)->hash)) : NULL)
+#define elf32_arm_hash_table(p) \
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == ARM_ELF_DATA)		\
+   ? (struct elf32_arm_link_hash_table *) (p)->hash : NULL)
 
 #define arm_stub_hash_lookup(table, string, create, copy) \
   ((struct elf32_arm_stub_hash_entry *) \
@@ -3363,17 +3373,8 @@ struct elf32_arm_link_hash_table
   /* The number of bytes in the subsequent PLT etries.  */
   bfd_size_type plt_entry_size;
 
-  /* True if the target system is VxWorks.  */
-  int vxworks_p;
-
-  /* True if the target system is Symbian OS.  */
-  int symbian_p;
-
-  /* True if the target system is Native Client.  */
-  int nacl_p;
-
   /* True if the target uses REL relocations.  */
-  bfd_boolean use_rel;
+  bool use_rel;
 
   /* Nonzero if import library must be a secure gateway import library
      as per ARMv8-M Security Extensions.  */
@@ -3392,16 +3393,6 @@ struct elf32_arm_link_hash_table
   /* The (unloaded but important) VxWorks .rela.plt.unloaded section.  */
   asection *srelplt2;
 
-  /* The offset into splt of the PLT entry for the TLS descriptor
-     resolver.  Special values are 0, if not necessary (or not found
-     to be necessary yet), and -1 if needed but not determined
-     yet.  */
-  bfd_vma dt_tlsdesc_plt;
-
-  /* The offset into sgot of the GOT entry used by the PLT entry
-     above.  */
-  bfd_vma dt_tlsdesc_got;
-
   /* Offset in .plt section of tls_arm_trampoline.  */
   bfd_vma tls_trampoline;
 
@@ -3412,9 +3403,6 @@ struct elf32_arm_link_hash_table
     bfd_vma offset;
   } tls_ldm_got;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* For convenience in allocate_dynrelocs.  */
   bfd * obfd;
 
@@ -3511,21 +3499,21 @@ static void elf32_arm_add_dynreloc (bfd
 				    asection *sreloc, Elf_Internal_Rela *rel);
 
 static void
-arm_elf_fill_funcdesc(bfd *output_bfd,
-		      struct bfd_link_info *info,
-		      int *funcdesc_offset,
-		      int dynindx,
-		      int offset,
-		      bfd_vma addr,
-		      bfd_vma dynreloc_value,
-		      bfd_vma seg)
+arm_elf_fill_funcdesc (bfd *output_bfd,
+		       struct bfd_link_info *info,
+		       int *funcdesc_offset,
+		       int dynindx,
+		       int offset,
+		       bfd_vma addr,
+		       bfd_vma dynreloc_value,
+		       bfd_vma seg)
 {
   if ((*funcdesc_offset & 1) == 0)
     {
       struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (info);
       asection *sgot = globals->root.sgot;
 
-      if (bfd_link_pic(info))
+      if (bfd_link_pic (info))
 	{
 	  asection *srelgot = globals->root.srelgot;
 	  Elf_Internal_Rela outrel;
@@ -3545,12 +3533,12 @@ arm_elf_fill_funcdesc(bfd *output_bfd,
 	    + hgot->root.u.def.section->output_section->vma
 	    + hgot->root.u.def.section->output_offset;
 
-	  arm_elf_add_rofixup(output_bfd, globals->srofixup,
-			      sgot->output_section->vma + sgot->output_offset
-			      + offset);
-	  arm_elf_add_rofixup(output_bfd, globals->srofixup,
-			      sgot->output_section->vma + sgot->output_offset
-			      + offset + 4);
+	  arm_elf_add_rofixup (output_bfd, globals->srofixup,
+			       sgot->output_section->vma + sgot->output_offset
+			       + offset);
+	  arm_elf_add_rofixup (output_bfd, globals->srofixup,
+			       sgot->output_section->vma + sgot->output_offset
+			       + offset + 4);
 	  bfd_put_32 (output_bfd, dynreloc_value, sgot->contents + offset);
 	  bfd_put_32 (output_bfd, got_value, sgot->contents + offset + 4);
 	}
@@ -3582,14 +3570,13 @@ elf32_arm_link_hash_newfunc (struct bfd_
 				     table, string));
   if (ret != NULL)
     {
-      ret->dyn_relocs = NULL;
       ret->tls_type = GOT_UNKNOWN;
       ret->tlsdesc_got = (bfd_vma) -1;
       ret->plt.thumb_refcount = 0;
       ret->plt.maybe_thumb_refcount = 0;
       ret->plt.noncall_refcount = 0;
       ret->plt.got_offset = -1;
-      ret->is_iplt = FALSE;
+      ret->is_iplt = false;
       ret->export_glue = NULL;
 
       ret->stub_cache = NULL;
@@ -3607,40 +3594,66 @@ elf32_arm_link_hash_newfunc (struct bfd_
 /* Ensure that we have allocated bookkeeping structures for ABFD's local
    symbols.  */
 
-static bfd_boolean
+static bool
 elf32_arm_allocate_local_sym_info (bfd *abfd)
 {
   if (elf_local_got_refcounts (abfd) == NULL)
     {
       bfd_size_type num_syms;
-      bfd_size_type size;
-      char *data;
+
+      elf32_arm_num_entries (abfd) = 0;
+
+      /* Whilst it might be tempting to allocate a single block of memory and
+	 then divide it up amoungst the arrays in the elf_arm_obj_tdata
+	 structure, this interferes with the work of memory checkers looking
+	 for buffer overruns.  So allocate each array individually.  */
 
       num_syms = elf_tdata (abfd)->symtab_hdr.sh_info;
-      size = num_syms * (sizeof (bfd_signed_vma)
-			 + sizeof (struct arm_local_iplt_info *)
-			 + sizeof (bfd_vma)
-			 + sizeof (char)
-			 + sizeof (struct fdpic_local));
-      data = bfd_zalloc (abfd, size);
-      if (data == NULL)
-	return FALSE;
-
-      elf32_arm_local_fdpic_cnts (abfd) = (struct fdpic_local *) data;
-      data += num_syms * sizeof (struct fdpic_local);
-
-      elf_local_got_refcounts (abfd) = (bfd_signed_vma *) data;
-      data += num_syms * sizeof (bfd_signed_vma);
-
-      elf32_arm_local_iplt (abfd) = (struct arm_local_iplt_info **) data;
-      data += num_syms * sizeof (struct arm_local_iplt_info *);
 
-      elf32_arm_local_tlsdesc_gotent (abfd) = (bfd_vma *) data;
-      data += num_syms * sizeof (bfd_vma);
+      elf_local_got_refcounts (abfd) = bfd_zalloc
+	(abfd, num_syms * sizeof (* elf_local_got_refcounts (abfd)));
+
+      if (elf_local_got_refcounts (abfd) == NULL)
+	return false;
+
+      elf32_arm_local_tlsdesc_gotent (abfd) = bfd_zalloc
+	(abfd, num_syms * sizeof (* elf32_arm_local_tlsdesc_gotent (abfd)));
+
+      if (elf32_arm_local_tlsdesc_gotent (abfd) == NULL)
+	return false;
+
+      elf32_arm_local_iplt (abfd) = bfd_zalloc
+	(abfd, num_syms * sizeof (* elf32_arm_local_iplt (abfd)));
+
+      if (elf32_arm_local_iplt (abfd) == NULL)
+	return false;
 
-      elf32_arm_local_got_tls_type (abfd) = data;
+      elf32_arm_local_fdpic_cnts (abfd) = bfd_zalloc
+	(abfd, num_syms * sizeof (* elf32_arm_local_fdpic_cnts (abfd)));
+
+      if (elf32_arm_local_fdpic_cnts (abfd) == NULL)
+	return false;
+
+      elf32_arm_local_got_tls_type (abfd) = bfd_zalloc
+	(abfd, num_syms * sizeof (* elf32_arm_local_got_tls_type (abfd)));
+
+      if (elf32_arm_local_got_tls_type (abfd) == NULL)
+	return false;
+
+      elf32_arm_num_entries (abfd) = num_syms;
+
+#if GCC_VERSION >= 3000
+      BFD_ASSERT (__alignof__ (*elf32_arm_local_tlsdesc_gotent (abfd))
+		  <= __alignof__ (*elf_local_got_refcounts (abfd)));
+      BFD_ASSERT (__alignof__ (*elf32_arm_local_iplt (abfd))
+		  <= __alignof__ (*elf32_arm_local_tlsdesc_gotent (abfd)));
+      BFD_ASSERT (__alignof__ (*elf32_arm_local_fdpic_cnts (abfd))
+		  <= __alignof__ (*elf32_arm_local_iplt (abfd)));
+      BFD_ASSERT (__alignof__ (*elf32_arm_local_got_tls_type (abfd))
+		  <= __alignof__ (*elf32_arm_local_fdpic_cnts (abfd)));
+#endif
     }
-  return TRUE;
+  return true;
 }
 
 /* Return the .iplt information for local symbol R_SYMNDX, which belongs
@@ -3656,6 +3669,7 @@ elf32_arm_create_local_iplt (bfd *abfd,
     return NULL;
 
   BFD_ASSERT (r_symndx < elf_tdata (abfd)->symtab_hdr.sh_info);
+  BFD_ASSERT (r_symndx < elf32_arm_num_entries (abfd));
   ptr = &elf32_arm_local_iplt (abfd)[r_symndx];
   if (*ptr == NULL)
     *ptr = bfd_zalloc (abfd, sizeof (**ptr));
@@ -3670,7 +3684,7 @@ elf32_arm_create_local_iplt (bfd *abfd,
    true, point *ROOT_PLT at the target-independent reference count/offset
    union and *ARM_PLT at the ARM-specific information.  */
 
-static bfd_boolean
+static bool
 elf32_arm_get_plt_info (bfd *abfd, struct elf32_arm_link_hash_table *globals,
 			struct elf32_arm_link_hash_entry *h,
 			unsigned long r_symndx, union gotplt_union **root_plt,
@@ -3679,33 +3693,36 @@ elf32_arm_get_plt_info (bfd *abfd, struc
   struct arm_local_iplt_info *local_iplt;
 
   if (globals->root.splt == NULL && globals->root.iplt == NULL)
-    return FALSE;
+    return false;
 
   if (h != NULL)
     {
       *root_plt = &h->root.plt;
       *arm_plt = &h->plt;
-      return TRUE;
+      return true;
     }
 
   if (elf32_arm_local_iplt (abfd) == NULL)
-    return FALSE;
+    return false;
+
+  if (r_symndx >= elf32_arm_num_entries (abfd))
+    return false;
 
   local_iplt = elf32_arm_local_iplt (abfd)[r_symndx];
   if (local_iplt == NULL)
-    return FALSE;
+    return false;
 
   *root_plt = &local_iplt->root;
   *arm_plt = &local_iplt->arm;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean using_thumb_only (struct elf32_arm_link_hash_table *globals);
+static bool using_thumb_only (struct elf32_arm_link_hash_table *globals);
 
 /* Return true if the PLT described by ARM_PLT requires a Thumb stub
    before it.  */
 
-static bfd_boolean
+static bool
 elf32_arm_plt_needs_thumb_stub_p (struct bfd_link_info *info,
 				  struct arm_plt_info *arm_plt)
 {
@@ -3713,7 +3730,7 @@ elf32_arm_plt_needs_thumb_stub_p (struct
 
   htab = elf32_arm_hash_table (info);
 
-  return (!using_thumb_only(htab) && (arm_plt->thumb_refcount != 0
+  return (!using_thumb_only (htab) && (arm_plt->thumb_refcount != 0
 	  || (!htab->use_blx && arm_plt->maybe_thumb_refcount != 0)));
 }
 
@@ -3744,7 +3761,7 @@ elf32_arm_get_local_dynreloc_list (bfd *
 
       s = bfd_section_from_elf_index (abfd, isym->st_shndx);
       if (s == NULL)
-	abort ();
+	return NULL;
 
       vpp = &elf_section_data (s)->local_dynrel;
       return (struct elf_dyn_relocs **) vpp;
@@ -3797,21 +3814,17 @@ stub_hash_newfunc (struct bfd_hash_entry
 /* Create .got, .gotplt, and .rel(a).got sections in DYNOBJ, and set up
    shortcuts to them in our hash table.  */
 
-static bfd_boolean
+static bool
 create_got_section (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf32_arm_link_hash_table *htab;
 
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
-
-  /* BPABI objects never have a GOT, or associated sections.  */
-  if (htab->symbian_p)
-    return TRUE;
+    return false;
 
   if (! _bfd_elf_create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   /* Also create .rofixup.  */
   if (htab->fdpic_p)
@@ -3821,15 +3834,15 @@ create_got_section (bfd *dynobj, struct
 						     | SEC_IN_MEMORY | SEC_LINKER_CREATED | SEC_READONLY));
       if (htab->srofixup == NULL
 	  || !bfd_set_section_alignment (htab->srofixup, 2))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create the .iplt, .rel(a).iplt and .igot.plt sections.  */
 
-static bfd_boolean
+static bool
 create_ifunc_sections (struct bfd_link_info *info)
 {
   struct elf32_arm_link_hash_table *htab;
@@ -3849,7 +3862,7 @@ create_ifunc_sections (struct bfd_link_i
 					      flags | SEC_READONLY | SEC_CODE);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->plt_alignment))
-	return FALSE;
+	return false;
       htab->root.iplt = s;
     }
 
@@ -3860,7 +3873,7 @@ create_ifunc_sections (struct bfd_link_i
 					      flags | SEC_READONLY);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->root.irelplt = s;
     }
 
@@ -3869,15 +3882,15 @@ create_ifunc_sections (struct bfd_link_i
       s = bfd_make_section_anyway_with_flags (dynobj, ".igot.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->root.igotplt = s;
     }
-  return TRUE;
+  return true;
 }
 
 /* Determine if we're dealing with a Thumb only architecture.  */
 
-static bfd_boolean
+static bool
 using_thumb_only (struct elf32_arm_link_hash_table *globals)
 {
   int arch;
@@ -3898,23 +3911,25 @@ using_thumb_only (struct elf32_arm_link_
       || arch == TAG_CPU_ARCH_V8M_BASE
       || arch == TAG_CPU_ARCH_V8M_MAIN
       || arch == TAG_CPU_ARCH_V8_1M_MAIN)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Determine if we're dealing with a Thumb-2 object.  */
 
-static bfd_boolean
+static bool
 using_thumb2 (struct elf32_arm_link_hash_table *globals)
 {
   int arch;
   int thumb_isa = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC,
 					    Tag_THUMB_ISA_use);
 
-  if (thumb_isa)
+  /* No use of thumb permitted, or a legacy thumb-1/2 definition.  */
+  if (thumb_isa < 3)
     return thumb_isa == 2;
 
+  /* Variant of thumb is described by the architecture tag.  */
   arch = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, Tag_CPU_arch);
 
   /* Force return logic to be reviewed for each new architecture.  */
@@ -3931,14 +3946,14 @@ using_thumb2 (struct elf32_arm_link_hash
 
 /* Determine whether Thumb-2 BL instruction is available.  */
 
-static bfd_boolean
+static bool
 using_thumb2_bl (struct elf32_arm_link_hash_table *globals)
 {
   int arch =
     bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, Tag_CPU_arch);
 
   /* Force return logic to be reviewed for each new architecture.  */
-  BFD_ASSERT (arch <= TAG_CPU_ARCH_V8_1M_MAIN);
+  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9);
 
   /* Architecture was introduced after ARMv6T2 (eg. ARMv6-M).  */
   return (arch == TAG_CPU_ARCH_V6T2
@@ -3949,25 +3964,25 @@ using_thumb2_bl (struct elf32_arm_link_h
    .rel(a).bss sections in DYNOBJ, and set up shortcuts to them in our
    hash table.  */
 
-static bfd_boolean
+static bool
 elf32_arm_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf32_arm_link_hash_table *htab;
 
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (!htab->root.sgot && !create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
-    return FALSE;
+    return false;
 
-  if (htab->vxworks_p)
+  if (htab->root.target_os == is_vxworks)
     {
       if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2))
-	return FALSE;
+	return false;
 
       if (bfd_link_pic (info))
 	{
@@ -4006,9 +4021,9 @@ elf32_arm_create_dynamic_sections (bfd *
   if (htab->fdpic_p) {
     htab->plt_header_size = 0;
     if (info->flags & DF_BIND_NOW)
-      htab->plt_entry_size = 4 * (ARRAY_SIZE(elf32_arm_fdpic_plt_entry) - 5);
+      htab->plt_entry_size = 4 * (ARRAY_SIZE (elf32_arm_fdpic_plt_entry) - 5);
     else
-      htab->plt_entry_size = 4 * ARRAY_SIZE(elf32_arm_fdpic_plt_entry);
+      htab->plt_entry_size = 4 * ARRAY_SIZE (elf32_arm_fdpic_plt_entry);
   }
 
   if (!htab->root.splt
@@ -4017,7 +4032,7 @@ elf32_arm_create_dynamic_sections (bfd *
       || (!bfd_link_pic (info) && !htab->root.srelbss))
     abort ();
 
-  return TRUE;
+  return true;
 }
 
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
@@ -4032,37 +4047,6 @@ elf32_arm_copy_indirect_symbol (struct b
   edir = (struct elf32_arm_link_hash_entry *) dir;
   eind = (struct elf32_arm_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect)
     {
       /* Copy over PLT info.  */
@@ -4110,7 +4094,7 @@ static struct bfd_link_hash_table *
 elf32_arm_link_hash_table_create (bfd *abfd)
 {
   struct elf32_arm_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf32_arm_link_hash_table);
+  size_t amt = sizeof (struct elf32_arm_link_hash_table);
 
   ret = (struct elf32_arm_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -4134,7 +4118,7 @@ elf32_arm_link_hash_table_create (bfd *a
   ret->plt_header_size = 20;
   ret->plt_entry_size = elf32_arm_use_long_plt_entry ? 16 : 12;
 #endif
-  ret->use_rel = TRUE;
+  ret->use_rel = true;
   ret->obfd = abfd;
   ret->fdpic_p = 0;
 
@@ -4151,23 +4135,24 @@ elf32_arm_link_hash_table_create (bfd *a
 
 /* Determine what kind of NOPs are available.  */
 
-static bfd_boolean
+static bool
 arch_has_arm_nop (struct elf32_arm_link_hash_table *globals)
 {
   const int arch = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC,
 					     Tag_CPU_arch);
 
   /* Force return logic to be reviewed for each new architecture.  */
-  BFD_ASSERT (arch <= TAG_CPU_ARCH_V8_1M_MAIN);
+  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9);
 
   return (arch == TAG_CPU_ARCH_V6T2
 	  || arch == TAG_CPU_ARCH_V6K
 	  || arch == TAG_CPU_ARCH_V7
 	  || arch == TAG_CPU_ARCH_V8
-	  || arch == TAG_CPU_ARCH_V8R);
+	  || arch == TAG_CPU_ARCH_V8R
+	  || arch == TAG_CPU_ARCH_V9);
 }
 
-static bfd_boolean
+static bool
 arm_stub_is_thumb (enum elf32_arm_stub_type stub_type)
 {
   switch (stub_type)
@@ -4181,13 +4166,13 @@ arm_stub_is_thumb (enum elf32_arm_stub_t
     case arm_stub_long_branch_v4t_thumb_tls_pic:
     case arm_stub_long_branch_thumb_only_pic:
     case arm_stub_cmse_branch_thumb_only:
-      return TRUE;
+      return true;
     case arm_stub_none:
       BFD_FAIL ();
-      return FALSE;
+      return false;
       break;
     default:
-      return FALSE;
+      return false;
     }
 }
 
@@ -4209,7 +4194,7 @@ arm_type_of_stub (struct bfd_link_info *
   bfd_signed_vma branch_offset;
   unsigned int r_type;
   struct elf32_arm_link_hash_table * globals;
-  bfd_boolean thumb2, thumb2_bl, thumb_only;
+  bool thumb2, thumb2_bl, thumb_only;
   enum elf32_arm_stub_type stub_type = arm_stub_none;
   int use_plt = 0;
   enum arm_st_branch_type branch_type = *actual_branch_type;
@@ -4518,11 +4503,11 @@ arm_type_of_stub (struct bfd_link_info *
 		? (r_type == R_ARM_TLS_CALL
 		   /* TLS PIC Stub.  */
 		   ? arm_stub_long_branch_any_tls_pic
-		   : (globals->nacl_p
+		   : (globals->root.target_os == is_nacl
 		      ? arm_stub_long_branch_arm_nacl_pic
 		      : arm_stub_long_branch_any_arm_pic))
 		/* non-PIC stubs.  */
-		: (globals->nacl_p
+		: (globals->root.target_os == is_nacl
 		   ? arm_stub_long_branch_arm_nacl
 		   : arm_stub_long_branch_any_any);
 	    }
@@ -4598,7 +4583,7 @@ elf32_arm_get_stub_entry (const asection
   /* If the input section is the CMSE stubs one and it needs a long
      branch stub to reach it's final destination, give up with an
      error message: this is not supported.  See PR ld/24709.  */
-  if (!strncmp (input_section->name, CMSE_STUB_NAME, strlen(CMSE_STUB_NAME)))
+  if (!strncmp (input_section->name, CMSE_STUB_NAME, strlen (CMSE_STUB_NAME)))
     {
       bfd *output_bfd = htab->obfd;
       asection *out_sec = bfd_get_section_by_name (output_bfd, CMSE_STUB_NAME);
@@ -4613,7 +4598,7 @@ elf32_arm_get_stub_entry (const asection
 			    + h->root.root.u.def.value);
       /* Exit, rather than leave incompletely processed
 	 relocations.  */
-      xexit(1);
+      xexit (1);
     }
 
   /* If this input section is part of a group of sections sharing one
@@ -4640,7 +4625,7 @@ elf32_arm_get_stub_entry (const asection
 	return NULL;
 
       stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table,
-					stub_name, FALSE, FALSE);
+					stub_name, false, false);
       if (h != NULL)
 	h->stub_cache = stub_entry;
 
@@ -4653,7 +4638,7 @@ elf32_arm_get_stub_entry (const asection
 /* Whether veneers of type STUB_TYPE require to be in a dedicated output
    section.  */
 
-static bfd_boolean
+static bool
 arm_dedicated_stub_output_section_required (enum elf32_arm_stub_type stub_type)
 {
   if (stub_type >= max_stub_type)
@@ -4662,10 +4647,10 @@ arm_dedicated_stub_output_section_requir
   switch (stub_type)
     {
     case arm_stub_cmse_branch_thumb_only:
-      return TRUE;
+      return true;
 
     default:
-      return FALSE;
+      return false;
     }
 
   abort ();  /* Should be unreachable.  */
@@ -4756,7 +4741,7 @@ elf32_arm_create_or_find_stub_sec (asect
 {
   asection *link_sec, *out_sec, **stub_sec_p;
   const char *stub_sec_prefix;
-  bfd_boolean dedicated_output_section =
+  bool dedicated_output_section =
     arm_dedicated_stub_output_section_required (stub_type);
   int align;
 
@@ -4787,7 +4772,7 @@ elf32_arm_create_or_find_stub_sec (asect
 	stub_sec_p = &htab->stub_group[link_sec->id].stub_sec;
       stub_sec_prefix = link_sec->name;
       out_sec = link_sec->output_section;
-      align = htab->nacl_p ? 4 : 3;
+      align = htab->root.target_os == is_nacl ? 4 : 3;
     }
 
   if (*stub_sec_p == NULL)
@@ -4842,7 +4827,7 @@ elf32_arm_add_stub (const char *stub_nam
 
   /* Enter this entry into the linker stub hash table.  */
   stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table, stub_name,
-				     TRUE, FALSE);
+				     true, false);
   if (stub_entry == NULL)
     {
       if (section == NULL)
@@ -4936,7 +4921,7 @@ static bfd_reloc_status_type elf32_arm_f
   (reloc_howto_type *, bfd *, bfd *, asection *, bfd_byte *,
    Elf_Internal_Rela *, bfd_vma, struct bfd_link_info *, asection *,
    const char *, unsigned char, enum arm_st_branch_type,
-   struct elf_link_hash_entry *, bfd_boolean *, char **);
+   struct elf_link_hash_entry *, bool *, char **);
 
 static unsigned int
 arm_stub_required_alignment (enum elf32_arm_stub_type stub_type)
@@ -4980,7 +4965,7 @@ arm_stub_required_alignment (enum elf32_
 /* Returns whether stubs of type STUB_TYPE take over the symbol they are
    veneering (TRUE) or have their own symbol (FALSE).  */
 
-static bfd_boolean
+static bool
 arm_stub_sym_claimed (enum elf32_arm_stub_type stub_type)
 {
   if (stub_type >= max_stub_type)
@@ -4989,10 +4974,10 @@ arm_stub_sym_claimed (enum elf32_arm_stu
   switch (stub_type)
     {
     case arm_stub_cmse_branch_thumb_only:
-      return TRUE;
+      return true;
 
     default:
-      return FALSE;
+      return false;
     }
 
   abort ();  /* Should be unreachable.  */
@@ -5038,12 +5023,12 @@ arm_new_stubs_start_offset_ptr (struct e
     }
 }
 
-static bfd_boolean
+static bool
 arm_build_one_stub (struct bfd_hash_entry *gen_entry,
 		    void * in_arg)
 {
 #define MAXRELOCS 3
-  bfd_boolean removed_sg_veneer;
+  bool removed_sg_veneer;
   struct elf32_arm_stub_hash_entry *stub_entry;
   struct elf32_arm_link_hash_table *globals;
   struct bfd_link_info *info;
@@ -5064,16 +5049,24 @@ arm_build_one_stub (struct bfd_hash_entr
   stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry;
   info = (struct bfd_link_info *) in_arg;
 
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (stub_entry->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without --enable-non-contiguous-regions.\n"),
+			    stub_entry->target_section);
+
   globals = elf32_arm_hash_table (info);
   if (globals == NULL)
-    return FALSE;
+    return false;
 
   stub_sec = stub_entry->stub_sec;
 
   if ((globals->fix_cortex_a8 < 0)
       != (arm_stub_required_alignment (stub_entry->stub_type) == 2))
     /* We have to do less-strictly-aligned fixes last.  */
-    return TRUE;
+    return true;
 
   /* Assign a slot at the end of section if none assigned yet.  */
   if (stub_entry->stub_offset == (bfd_vma) -1)
@@ -5150,7 +5143,7 @@ arm_build_one_stub (struct bfd_hash_entr
 
 	default:
 	  BFD_FAIL ();
-	  return FALSE;
+	  return false;
 	}
     }
 
@@ -5174,7 +5167,7 @@ arm_build_one_stub (struct bfd_hash_entr
   for (i = 0; i < nrelocs; i++)
     {
       Elf_Internal_Rela rel;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       char *error_message;
       bfd_vma points_to =
 	sym_value + template_sequence[stub_reloc_idx[i]].reloc_addend;
@@ -5203,7 +5196,7 @@ arm_build_one_stub (struct bfd_hash_entr
 	   &error_message);
     }
 
-  return TRUE;
+  return true;
 #undef MAXRELOCS
 }
 
@@ -5254,7 +5247,7 @@ find_stub_size_and_template (enum elf32_
 /* As above, but don't actually build the stub.  Just bump offset so
    we know stub section sizes.  */
 
-static bfd_boolean
+static bool
 arm_size_one_stub (struct bfd_hash_entry *gen_entry,
 		   void *in_arg ATTRIBUTE_UNUSED)
 {
@@ -5265,8 +5258,8 @@ arm_size_one_stub (struct bfd_hash_entry
   /* Massage our args to the form they really have.  */
   stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry;
 
-  BFD_ASSERT((stub_entry->stub_type > arm_stub_none)
-	     && stub_entry->stub_type < ARRAY_SIZE(stub_definitions));
+  BFD_ASSERT ((stub_entry->stub_type > arm_stub_none)
+	      && stub_entry->stub_type < ARRAY_SIZE (stub_definitions));
 
   size = find_stub_size_and_template (stub_entry->stub_type, &template_sequence,
 				      &template_size);
@@ -5281,12 +5274,12 @@ arm_size_one_stub (struct bfd_hash_entry
 
   /* Already accounted for.  */
   if (stub_entry->stub_offset != (bfd_vma) -1)
-    return TRUE;
+    return true;
 
   size = (size + 7) & ~7;
   stub_entry->stub_sec->size += size;
 
-  return TRUE;
+  return true;
 }
 
 /* External entry points for sizing and building linker stubs.  */
@@ -5304,13 +5297,11 @@ elf32_arm_setup_section_lists (bfd *outp
   unsigned int top_id, top_index;
   asection *section;
   asection **input_list, **list;
-  bfd_size_type amt;
+  size_t amt;
   struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info);
 
   if (htab == NULL)
     return 0;
-  if (! is_elf_hash_table (htab))
-    return 0;
 
   /* Count the number of input BFDs and find the top input section id.  */
   for (input_bfd = info->input_bfds, bfd_count = 0, top_id = 0;
@@ -5410,7 +5401,7 @@ elf32_arm_next_input_section (struct bfd
 static void
 group_sections (struct elf32_arm_link_hash_table *htab,
 		bfd_size_type stub_group_size,
-		bfd_boolean stubs_always_after_branch)
+		bool stubs_always_after_branch)
 {
   asection **list = htab->input_list;
 
@@ -5526,7 +5517,7 @@ static struct elf_link_hash_entry *find_
    NUM_A8_FIXES_P, A8_FIX_TABLE_SIZE_P.  Returns true if an error occurs, false
    otherwise.  */
 
-static bfd_boolean
+static bool
 cortex_a8_erratum_scan (bfd *input_bfd,
 			struct bfd_link_info *info,
 			struct a8_erratum_fix **a8_fixes_p,
@@ -5535,7 +5526,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
 			struct a8_erratum_reloc *a8_relocs,
 			unsigned int num_a8_relocs,
 			unsigned prev_num_a8_fixes,
-			bfd_boolean *stub_changed_p)
+			bool *stub_changed_p)
 {
   asection *section;
   struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info);
@@ -5544,7 +5535,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
   unsigned int a8_fix_table_size = *a8_fix_table_size_p;
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   for (section = input_bfd->sections;
        section != NULL;
@@ -5567,7 +5558,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
       if (elf_section_data (section)->this_hdr.contents != NULL)
 	contents = elf_section_data (section)->this_hdr.contents;
       else if (! bfd_malloc_and_get_section (input_bfd, section, &contents))
-	return TRUE;
+	return true;
 
       sec_data = elf32_arm_section_data (section);
 
@@ -5578,7 +5569,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
 	    ? section->size : sec_data->map[span + 1].vma;
 	  unsigned int i;
 	  char span_type = sec_data->map[span].type;
-	  bfd_boolean last_was_32bit = FALSE, last_was_branch = FALSE;
+	  bool last_was_32bit = false, last_was_branch = false;
 
 	  if (span_type != 't')
 	    continue;
@@ -5598,11 +5589,11 @@ cortex_a8_erratum_scan (bfd *input_bfd,
 	  for (i = span_start; i < span_end;)
 	    {
 	      unsigned int insn = bfd_getl16 (&contents[i]);
-	      bfd_boolean insn_32bit = FALSE, is_blx = FALSE, is_b = FALSE;
-	      bfd_boolean is_bl = FALSE, is_bcc = FALSE, is_32bit_branch;
+	      bool insn_32bit = false, is_blx = false, is_b = false;
+	      bool is_bl = false, is_bcc = false, is_32bit_branch;
 
 	      if ((insn & 0xe000) == 0xe000 && (insn & 0x1800) != 0x0000)
-		insn_32bit = TRUE;
+		insn_32bit = true;
 
 	      if (insn_32bit)
 		{
@@ -5629,12 +5620,12 @@ cortex_a8_erratum_scan (bfd *input_bfd,
 		  && ! last_was_branch)
 		{
 		  bfd_signed_vma offset = 0;
-		  bfd_boolean force_target_arm = FALSE;
-		  bfd_boolean force_target_thumb = FALSE;
+		  bool force_target_arm = false;
+		  bool force_target_thumb = false;
 		  bfd_vma target;
 		  enum elf32_arm_stub_type stub_type = arm_stub_none;
 		  struct a8_erratum_reloc key, *found;
-		  bfd_boolean use_plt = FALSE;
+		  bool use_plt = false;
 
 		  key.from = base_vma + i;
 		  found = (struct a8_erratum_reloc *)
@@ -5653,20 +5644,20 @@ cortex_a8_erratum_scan (bfd *input_bfd,
 					       &error_message);
 
 		      if (entry)
-			found->non_a8_stub = TRUE;
+			found->non_a8_stub = true;
 
 		      /* Keep a simpler condition, for the sake of clarity.  */
 		      if (htab->root.splt != NULL && found->hash != NULL
 			  && found->hash->root.plt.offset != (bfd_vma) -1)
-			use_plt = TRUE;
+			use_plt = true;
 
 		      if (found->r_type == R_ARM_THM_CALL)
 			{
 			  if (found->branch_type == ST_BRANCH_TO_ARM
 			      || use_plt)
-			    force_target_arm = TRUE;
+			    force_target_arm = true;
 			  else
-			    force_target_thumb = TRUE;
+			    force_target_thumb = true;
 			}
 		    }
 
@@ -5724,8 +5715,8 @@ cortex_a8_erratum_scan (bfd *input_bfd,
 			  && stub_type == arm_stub_a8_veneer_bl)
 			{
 			  stub_type = arm_stub_a8_veneer_blx;
-			  is_blx = TRUE;
-			  is_bl = FALSE;
+			  is_blx = true;
+			  is_bl = false;
 			}
 		      /* Conversely, if the original instruction was
 			 BLX but the target is Thumb mode, use the BL
@@ -5734,8 +5725,8 @@ cortex_a8_erratum_scan (bfd *input_bfd,
 			       && stub_type == arm_stub_a8_veneer_blx)
 			{
 			  stub_type = arm_stub_a8_veneer_bl;
-			  is_blx = FALSE;
-			  is_bl = TRUE;
+			  is_blx = false;
+			  is_bl = true;
 			}
 
 		      if (is_blx)
@@ -5788,7 +5779,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
 				{
 				  free (stub_name);
 				  stub_name = NULL;
-				  *stub_changed_p = TRUE;
+				  *stub_changed_p = true;
 				}
 			    }
 
@@ -5829,7 +5820,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
   *num_a8_fixes_p = num_a8_fixes;
   *a8_fix_table_size_p = a8_fix_table_size;
 
-  return FALSE;
+  return false;
 }
 
 /* Create or update a stub entry depending on whether the stub can already be
@@ -5855,16 +5846,16 @@ elf32_arm_create_stub (struct elf32_arm_
 		       Elf_Internal_Rela *irela, asection *sym_sec,
 		       struct elf32_arm_link_hash_entry *hash, char *sym_name,
 		       bfd_vma sym_value, enum arm_st_branch_type branch_type,
-		       bfd_boolean *new_stub)
+		       bool *new_stub)
 {
   const asection *id_sec;
   char *stub_name;
   struct elf32_arm_stub_hash_entry *stub_entry;
   unsigned int r_type;
-  bfd_boolean sym_claimed = arm_stub_sym_claimed (stub_type);
+  bool sym_claimed = arm_stub_sym_claimed (stub_type);
 
   BFD_ASSERT (stub_type != arm_stub_none);
-  *new_stub = FALSE;
+  *new_stub = false;
 
   if (sym_claimed)
     stub_name = sym_name;
@@ -5884,8 +5875,8 @@ elf32_arm_create_stub (struct elf32_arm_
 	return NULL;
     }
 
-  stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table, stub_name, FALSE,
-				     FALSE);
+  stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table, stub_name, false,
+				     false);
   /* The proper stub has already been created, just update its value.  */
   if (stub_entry != NULL)
     {
@@ -5940,7 +5931,7 @@ elf32_arm_create_stub (struct elf32_arm_
 	sprintf (stub_entry->output_name, STUB_ENTRY_NAME, sym_name);
     }
 
-  *new_stub = TRUE;
+  *new_stub = true;
   return stub_entry;
 }
 
@@ -5965,7 +5956,7 @@ elf32_arm_create_stub (struct elf32_arm_
 
    The return value gives whether a stub failed to be allocated.  */
 
-static bfd_boolean
+static bool
 cmse_scan (bfd *input_bfd, struct elf32_arm_link_hash_table *htab,
 	   obj_attribute *out_attr, struct elf_link_hash_entry **sym_hashes,
 	   int *cmse_stub_created)
@@ -5980,7 +5971,7 @@ cmse_scan (bfd *input_bfd, struct elf32_
   bfd_vma sym_value;
   asection *section;
   struct elf32_arm_stub_hash_entry *stub_entry;
-  bfd_boolean is_v8m, new_stub, cmse_invalid, ret = TRUE;
+  bool is_v8m, new_stub, cmse_invalid, ret = true;
 
   bed = get_elf_backend_data (input_bfd);
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
@@ -5995,12 +5986,12 @@ cmse_scan (bfd *input_bfd, struct elf32_
 				       symtab_hdr->sh_info, 0, NULL, NULL,
 				       NULL);
   if (symtab_hdr->sh_info && local_syms == NULL)
-    return FALSE;
+    return false;
 
   /* Scan symbols.  */
   for (i = 0; i < sym_count; i++)
     {
-      cmse_invalid = FALSE;
+      cmse_invalid = false;
 
       if (i < ext_start)
 	{
@@ -6008,24 +5999,27 @@ cmse_scan (bfd *input_bfd, struct elf32_
 	  sym_name = bfd_elf_string_from_elf_section (input_bfd,
 						      symtab_hdr->sh_link,
 						      cmse_sym->st_name);
-	  if (!sym_name || !CONST_STRNEQ (sym_name, CMSE_PREFIX))
+	  if (!sym_name || !startswith (sym_name, CMSE_PREFIX))
 	    continue;
 
 	  /* Special symbol with local binding.  */
-	  cmse_invalid = TRUE;
+	  cmse_invalid = true;
 	}
       else
 	{
 	  cmse_hash = elf32_arm_hash_entry (sym_hashes[i - ext_start]);
+	  if (cmse_hash == NULL)
+	    continue;
+
 	  sym_name = (char *) cmse_hash->root.root.root.string;
-	  if (!CONST_STRNEQ (sym_name, CMSE_PREFIX))
+	  if (!startswith (sym_name, CMSE_PREFIX))
 	    continue;
 
 	  /* Special symbol has incorrect binding or type.  */
 	  if ((cmse_hash->root.root.type != bfd_link_hash_defined
 	       && cmse_hash->root.root.type != bfd_link_hash_defweak)
 	      || cmse_hash->root.type != STT_FUNC)
-	    cmse_invalid = TRUE;
+	    cmse_invalid = true;
 	}
 
       if (!is_v8m)
@@ -6033,8 +6027,8 @@ cmse_scan (bfd *input_bfd, struct elf32_
 	  _bfd_error_handler (_("%pB: special symbol `%s' only allowed for "
 				"ARMv8-M architecture or later"),
 			      input_bfd, sym_name);
-	  is_v8m = TRUE; /* Avoid multiple warning.  */
-	  ret = FALSE;
+	  is_v8m = true; /* Avoid multiple warning.  */
+	  ret = false;
 	}
 
       if (cmse_invalid)
@@ -6042,14 +6036,14 @@ cmse_scan (bfd *input_bfd, struct elf32_
 	  _bfd_error_handler (_("%pB: invalid special symbol `%s'; it must be"
 				" a global or weak function symbol"),
 			      input_bfd, sym_name);
-	  ret = FALSE;
+	  ret = false;
 	  if (i < ext_start)
 	    continue;
 	}
 
       sym_name += strlen (CMSE_PREFIX);
       hash = (struct elf32_arm_link_hash_entry *)
-	elf_link_hash_lookup (&(htab)->root, sym_name, FALSE, FALSE, TRUE);
+	elf_link_hash_lookup (&(htab)->root, sym_name, false, false, true);
 
       /* No associated normal symbol or it is neither global nor weak.  */
       if (!hash
@@ -6085,7 +6079,7 @@ cmse_scan (bfd *input_bfd, struct elf32_
 	  else
 	    _bfd_error_handler
 	      (_("%pB: absent standard symbol `%s'"), input_bfd, sym_name);
-	  ret = FALSE;
+	  ret = false;
 	  if (!hash)
 	    continue;
 	}
@@ -6098,7 +6092,7 @@ cmse_scan (bfd *input_bfd, struct elf32_
 	  _bfd_error_handler
 	    (_("%pB: `%s' and its special symbol are in different sections"),
 	     input_bfd, sym_name);
-	  ret = FALSE;
+	  ret = false;
 	}
       if (cmse_hash->root.root.u.def.value != sym_value)
 	continue; /* Ignore: could be an entry function starting with SG.  */
@@ -6116,7 +6110,7 @@ cmse_scan (bfd *input_bfd, struct elf32_
 	{
 	  _bfd_error_handler
 	    (_("%pB: entry function `%s' is empty"), input_bfd, sym_name);
-	  ret = FALSE;
+	  ret = false;
 	}
 
       if (!ret)
@@ -6128,7 +6122,7 @@ cmse_scan (bfd *input_bfd, struct elf32_
 				 sym_value, branch_type, &new_stub);
 
       if (stub_entry == NULL)
-	 ret = FALSE;
+	 ret = false;
       else
 	{
 	  BFD_ASSERT (new_stub);
@@ -6145,7 +6139,7 @@ cmse_scan (bfd *input_bfd, struct elf32_
    code entry function, ie can be called from non secure code without using a
    veneer.  */
 
-static bfd_boolean
+static bool
 cmse_entry_fct_p (struct elf32_arm_link_hash_entry *hash)
 {
   bfd_byte contents[4];
@@ -6157,9 +6151,9 @@ cmse_entry_fct_p (struct elf32_arm_link_
   /* Defined symbol of function type.  */
   if (hash->root.root.type != bfd_link_hash_defined
       && hash->root.root.type != bfd_link_hash_defweak)
-    return FALSE;
+    return false;
   if (hash->root.type != STT_FUNC)
-    return FALSE;
+    return false;
 
   /* Read first instruction.  */
   section = hash->root.root.u.def.section;
@@ -6167,7 +6161,7 @@ cmse_entry_fct_p (struct elf32_arm_link_
   offset = hash->root.root.u.def.value - section->vma;
   if (!bfd_get_section_contents (abfd, section, contents, offset,
 				 sizeof (contents)))
-    return FALSE;
+    return false;
 
   first_insn = bfd_get_32 (abfd, contents);
 
@@ -6179,7 +6173,7 @@ cmse_entry_fct_p (struct elf32_arm_link_
    secure gateway veneers (ie. the veneers was not in the input import library)
    and there is no output import library (GEN_INFO->out_implib_bfd is NULL.  */
 
-static bfd_boolean
+static bool
 arm_list_new_cmse_stub (struct bfd_hash_entry *gen_entry, void *gen_info)
 {
   struct elf32_arm_stub_hash_entry *stub_entry;
@@ -6190,15 +6184,15 @@ arm_list_new_cmse_stub (struct bfd_hash_
   info = (struct bfd_link_info *) gen_info;
 
   if (info->out_implib_bfd)
-    return TRUE;
+    return true;
 
   if (stub_entry->stub_type != arm_stub_cmse_branch_thumb_only)
-    return TRUE;
+    return true;
 
   if (stub_entry->stub_offset == (bfd_vma) -1)
     _bfd_error_handler ("  %s", stub_entry->output_name);
 
-  return TRUE;
+  return true;
 }
 
 /* Set offset of each secure gateway veneers so that its address remain
@@ -6214,7 +6208,7 @@ arm_list_new_cmse_stub (struct bfd_hash_
    and this function and HTAB->new_cmse_stub_offset is set to the biggest
    veneer observed set for new veneers to be layed out after.  */
 
-static bfd_boolean
+static bool
 set_cmse_veneer_addr_from_implib (struct bfd_link_info *info,
 				  struct elf32_arm_link_hash_table *htab,
 				  int *cmse_stub_created)
@@ -6225,7 +6219,7 @@ set_cmse_veneer_addr_from_implib (struct
   long i, symcount;
   bfd *in_implib_bfd;
   asection *stub_out_sec;
-  bfd_boolean ret = TRUE;
+  bool ret = true;
   Elf_Internal_Sym *intsym;
   const char *out_sec_name;
   bfd_size_type cmse_stub_size;
@@ -6239,30 +6233,30 @@ set_cmse_veneer_addr_from_implib (struct
 
   /* No input secure gateway import library.  */
   if (!htab->in_implib_bfd)
-    return TRUE;
+    return true;
 
   in_implib_bfd = htab->in_implib_bfd;
   if (!htab->cmse_implib)
     {
       _bfd_error_handler (_("%pB: --in-implib only supported for Secure "
 			    "Gateway import libraries"), in_implib_bfd);
-      return FALSE;
+      return false;
     }
 
   /* Get symbol table size.  */
   symsize = bfd_get_symtab_upper_bound (in_implib_bfd);
   if (symsize < 0)
-    return FALSE;
+    return false;
 
   /* Read in the input secure gateway import library's symbol table.  */
   sympp = (asymbol **) bfd_malloc (symsize);
   if (sympp == NULL)
-    return FALSE;
+    return false;
 
   symcount = bfd_canonicalize_symtab (in_implib_bfd, sympp);
   if (symcount < 0)
     {
-      ret = FALSE;
+      ret = false;
       goto free_sym_buf;
     }
 
@@ -6297,34 +6291,34 @@ set_cmse_veneer_addr_from_implib (struct
 				"symbol should be absolute, global and "
 				"refer to Thumb functions"),
 			      in_implib_bfd, sym_name);
-	  ret = FALSE;
+	  ret = false;
 	  continue;
 	}
 
       veneer_value = bfd_asymbol_value (sym);
       stub_offset = veneer_value - cmse_stub_sec_vma;
       stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table, sym_name,
-					 FALSE, FALSE);
+					 false, false);
       hash = (struct elf32_arm_link_hash_entry *)
-	elf_link_hash_lookup (&(htab)->root, sym_name, FALSE, FALSE, TRUE);
+	elf_link_hash_lookup (&(htab)->root, sym_name, false, false, true);
 
       /* Stub entry should have been created by cmse_scan or the symbol be of
 	 a secure function callable from non secure code.  */
       if (!stub_entry && !hash)
 	{
-	  bfd_boolean new_stub;
+	  bool new_stub;
 
 	  _bfd_error_handler
 	    (_("entry function `%s' disappeared from secure code"), sym_name);
 	  hash = (struct elf32_arm_link_hash_entry *)
-	    elf_link_hash_lookup (&(htab)->root, sym_name, TRUE, TRUE, TRUE);
+	    elf_link_hash_lookup (&(htab)->root, sym_name, true, true, true);
 	  stub_entry
 	    = elf32_arm_create_stub (htab, arm_stub_cmse_branch_thumb_only,
 				     NULL, NULL, bfd_abs_section_ptr, hash,
 				     sym_name, veneer_value,
 				     ST_BRANCH_TO_THUMB, &new_stub);
 	  if (stub_entry == NULL)
-	    ret = FALSE;
+	    ret = false;
 	  else
 	  {
 	    BFD_ASSERT (new_stub);
@@ -6341,7 +6335,7 @@ set_cmse_veneer_addr_from_implib (struct
 	    {
 	      _bfd_error_handler (_("`%s' refers to a non entry function"),
 				  sym_name);
-	      ret = FALSE;
+	      ret = false;
 	    }
 	  continue;
 	}
@@ -6365,7 +6359,7 @@ set_cmse_veneer_addr_from_implib (struct
 	{
 	  _bfd_error_handler (_("%pB: incorrect size for symbol `%s'"),
 			      in_implib_bfd, sym_name);
-	  ret = FALSE;
+	  ret = false;
 	}
 
       /* Previous veneer address is before current SG veneer section.  */
@@ -6375,7 +6369,7 @@ set_cmse_veneer_addr_from_implib (struct
 	  if (stub_entry)
 	    stub_entry->stub_offset = 0;
 	  stub_offset = 0;
-	  ret = FALSE;
+	  ret = false;
 	}
 
       /* Complain if stub offset not a multiple of stub size.  */
@@ -6384,7 +6378,7 @@ set_cmse_veneer_addr_from_implib (struct
 	  _bfd_error_handler
 	    (_("offset of veneer for entry function `%s' not a multiple of "
 	       "its size"), sym_name);
-	  ret = FALSE;
+	  ret = false;
 	}
 
       if (!ret)
@@ -6412,10 +6406,10 @@ set_cmse_veneer_addr_from_implib (struct
       _bfd_error_handler
 	(_("start address of `%s' is different from previous link"),
 	 out_sec_name);
-      ret = FALSE;
+      ret = false;
     }
 
-free_sym_buf:
+ free_sym_buf:
   free (sympp);
   return ret;
 }
@@ -6426,7 +6420,7 @@ free_sym_buf:
    PC-relative calls to a target that is unreachable with a "bl"
    instruction.  */
 
-bfd_boolean
+bool
 elf32_arm_size_stubs (bfd *output_bfd,
 		      bfd *stub_bfd,
 		      struct bfd_link_info *info,
@@ -6436,11 +6430,11 @@ elf32_arm_size_stubs (bfd *output_bfd,
 						      unsigned int),
 		      void (*layout_sections_again) (void))
 {
-  bfd_boolean ret = TRUE;
+  bool ret = true;
   obj_attribute *out_attr;
   int cmse_stub_created = 0;
   bfd_size_type stub_group_size;
-  bfd_boolean m_profile, stubs_always_after_branch, first_veneer_scan = TRUE;
+  bool m_profile, stubs_always_after_branch, first_veneer_scan = true;
   struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info);
   struct a8_erratum_fix *a8_fixes = NULL;
   unsigned int num_a8_fixes = 0, a8_fix_table_size = 10;
@@ -6448,7 +6442,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
   unsigned int num_a8_relocs = 0, a8_reloc_table_size = 10, i;
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (htab->fix_cortex_a8)
     {
@@ -6515,7 +6509,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
       unsigned int bfd_indx;
       asection *stub_sec;
       enum elf32_arm_stub_type stub_type;
-      bfd_boolean stub_changed = FALSE;
+      bool stub_changed = false;
       unsigned prev_num_a8_fixes = num_a8_fixes;
 
       num_a8_fixes = 0;
@@ -6553,7 +6547,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
 		goto error_ret_free_local;
 
 	      if (cmse_stub_created != 0)
-		stub_changed = TRUE;
+		stub_changed = true;
 	    }
 
 	  /* Walk over each section attached to the input bfd.  */
@@ -6596,7 +6590,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
 		  const char *sym_name;
 		  unsigned char st_type;
 		  enum arm_st_branch_type branch_type;
-		  bfd_boolean created_stub = FALSE;
+		  bool created_stub = false;
 
 		  r_type = ELF32_R_TYPE (irela->r_info);
 		  r_indx = ELF32_R_SYM (irela->r_info);
@@ -6609,11 +6603,9 @@ elf32_arm_size_stubs (bfd *output_bfd,
 			free (internal_relocs);
 		    /* Fall through.  */
 		    error_ret_free_local:
-		      if (local_syms != NULL
-			  && (symtab_hdr->contents
-			      != (unsigned char *) local_syms))
+		      if (symtab_hdr->contents != (unsigned char *) local_syms)
 			free (local_syms);
-		      return FALSE;
+		      return false;
 		    }
 
 		  hash = NULL;
@@ -6633,8 +6625,9 @@ elf32_arm_size_stubs (bfd *output_bfd,
 		      && (r_type != (unsigned int) R_ARM_PLT32)
 		      && !((r_type == (unsigned int) R_ARM_TLS_CALL
 			    || r_type == (unsigned int) R_ARM_THM_TLS_CALL)
-			   && r_type == elf32_arm_tls_transition
-			       (info, r_type, &hash->root)
+			   && r_type == (elf32_arm_tls_transition
+					 (info, r_type,
+					  (struct elf_link_hash_entry *) hash))
 			   && ((hash ? hash->tls_type
 				: (elf32_arm_local_got_tls_type
 				   (input_bfd)[r_indx]))
@@ -6784,7 +6777,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
 
 		  do
 		    {
-		      bfd_boolean new_stub;
+		      bool new_stub;
 		      struct elf32_arm_stub_hash_entry *stub_entry;
 
 		      /* Determine what (if any) linker stub is needed.  */
@@ -6809,7 +6802,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
 		      else if (!new_stub)
 			break;
 		      else
-			stub_changed = TRUE;
+			stub_changed = true;
 		    }
 		  while (0);
 
@@ -6888,10 +6881,10 @@ elf32_arm_size_stubs (bfd *output_bfd,
       if (first_veneer_scan
 	  && !set_cmse_veneer_addr_from_implib (info, htab,
 						&cmse_stub_created))
-	ret = FALSE;
+	ret = false;
 
       if (prev_num_a8_fixes != num_a8_fixes)
-	stub_changed = TRUE;
+	stub_changed = true;
 
       if (!stub_changed)
 	break;
@@ -6957,7 +6950,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
 			 a8_fixes[i].section, htab, a8_fixes[i].stub_type);
 
 	    if (stub_sec == NULL)
-	      return FALSE;
+	      return false;
 
 	    stub_sec->size
 	      += find_stub_size_and_template (a8_fixes[i].stub_type, NULL,
@@ -6967,7 +6960,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
 
       /* Ask the linker to do its stuff.  */
       (*htab->layout_sections_again) ();
-      first_veneer_scan = FALSE;
+      first_veneer_scan = false;
     }
 
   /* Add stubs for Cortex-A8 erratum fixes now.  */
@@ -6985,12 +6978,12 @@ elf32_arm_size_stubs (bfd *output_bfd,
 	  int template_size, size = 0;
 
 	  stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table, stub_name,
-					     TRUE, FALSE);
+					     true, false);
 	  if (stub_entry == NULL)
 	    {
 	      _bfd_error_handler (_("%pB: cannot create stub entry %s"),
 				  section->owner, stub_name);
-	      return FALSE;
+	      return false;
 	    }
 
 	  stub_entry->stub_sec = stub_sec;
@@ -7031,7 +7024,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
    functions here.  This function is called via arm_elf_finish in the
    linker.  */
 
-bfd_boolean
+bool
 elf32_arm_build_stubs (struct bfd_link_info *info)
 {
   asection *stub_sec;
@@ -7041,7 +7034,7 @@ elf32_arm_build_stubs (struct bfd_link_i
 
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   for (stub_sec = htab->stub_bfd->sections;
        stub_sec != NULL;
@@ -7060,7 +7053,7 @@ elf32_arm_build_stubs (struct bfd_link_i
       size = stub_sec->size;
       stub_sec->contents = (unsigned char *) bfd_zalloc (htab->stub_bfd, size);
       if (stub_sec->contents == NULL && size != 0)
-	return FALSE;
+	return false;
 
       stub_sec->size = 0;
     }
@@ -7091,7 +7084,7 @@ elf32_arm_build_stubs (struct bfd_link_i
       bfd_hash_traverse (table, arm_build_one_stub, info);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Locate the Thumb encoded calling stub for NAME.  */
@@ -7118,12 +7111,15 @@ find_thumb_glue (struct bfd_link_info *l
   sprintf (tmp_name, THUMB2ARM_GLUE_ENTRY_NAME, name);
 
   hash = elf_link_hash_lookup
-    (&(hash_table)->root, tmp_name, FALSE, FALSE, TRUE);
+    (&(hash_table)->root, tmp_name, false, false, true);
 
-  if (hash == NULL
-      && asprintf (error_message, _("unable to find %s glue '%s' for '%s'"),
-		   "Thumb", tmp_name, name) == -1)
-    *error_message = (char *) bfd_errmsg (bfd_error_system_call);
+  if (hash == NULL)
+    {
+      *error_message = bfd_asprintf (_("unable to find %s glue '%s' for '%s'"),
+				     "Thumb", tmp_name, name);
+      if (*error_message == NULL)
+	*error_message = (char *) bfd_errmsg (bfd_error_system_call);
+    }
 
   free (tmp_name);
 
@@ -7148,19 +7144,20 @@ find_arm_glue (struct bfd_link_info *lin
 
   tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (name)
 				  + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1);
-
   BFD_ASSERT (tmp_name);
 
   sprintf (tmp_name, ARM2THUMB_GLUE_ENTRY_NAME, name);
 
   myh = elf_link_hash_lookup
-    (&(hash_table)->root, tmp_name, FALSE, FALSE, TRUE);
-
-  if (myh == NULL
-      && asprintf (error_message, _("unable to find %s glue '%s' for '%s'"),
-		   "ARM", tmp_name, name) == -1)
-    *error_message = (char *) bfd_errmsg (bfd_error_system_call);
+    (&(hash_table)->root, tmp_name, false, false, true);
 
+  if (myh == NULL)
+    {
+      *error_message = bfd_asprintf (_("unable to find %s glue '%s' for '%s'"),
+				     "ARM", tmp_name, name);
+      if (*error_message == NULL)
+	*error_message = (char *) bfd_errmsg (bfd_error_system_call);
+    }
   free (tmp_name);
 
   return myh;
@@ -7265,7 +7262,7 @@ arm_allocate_glue_section_space (bfd * a
   s->contents = contents;
 }
 
-bfd_boolean
+bool
 bfd_elf32_arm_allocate_interworking_sections (struct bfd_link_info * info)
 {
   struct elf32_arm_link_hash_table * globals;
@@ -7293,7 +7290,7 @@ bfd_elf32_arm_allocate_interworking_sect
 				   globals->bx_glue_size,
 				   ARM_BX_GLUE_SECTION_NAME);
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space and symbols for calling a Thumb function from Arm mode.
@@ -7323,13 +7320,12 @@ record_arm_to_thumb_glue (struct bfd_lin
 
   tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (name)
 				  + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1);
-
   BFD_ASSERT (tmp_name);
 
   sprintf (tmp_name, ARM2THUMB_GLUE_ENTRY_NAME, name);
 
   myh = elf_link_hash_lookup
-    (&(globals)->root, tmp_name, FALSE, FALSE, TRUE);
+    (&(globals)->root, tmp_name, false, false, true);
 
   if (myh != NULL)
     {
@@ -7346,7 +7342,7 @@ record_arm_to_thumb_glue (struct bfd_lin
   val = globals->arm_glue_size + 1;
   _bfd_generic_link_add_one_symbol (link_info, globals->bfd_of_glue_owner,
 				    tmp_name, BSF_GLOBAL, s, val,
-				    NULL, TRUE, FALSE, &bh);
+				    NULL, true, false, &bh);
 
   myh = (struct elf_link_hash_entry *) bh;
   myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
@@ -7401,13 +7397,12 @@ record_arm_bx_glue (struct bfd_link_info
   /* Add symbol for veneer.  */
   tmp_name = (char *)
       bfd_malloc ((bfd_size_type) strlen (ARM_BX_GLUE_ENTRY_NAME) + 1);
-
   BFD_ASSERT (tmp_name);
 
   sprintf (tmp_name, ARM_BX_GLUE_ENTRY_NAME, reg);
 
   myh = elf_link_hash_lookup
-    (&(globals)->root, tmp_name, FALSE, FALSE, FALSE);
+    (&(globals)->root, tmp_name, false, false, false);
 
   BFD_ASSERT (myh == NULL);
 
@@ -7415,7 +7410,7 @@ record_arm_bx_glue (struct bfd_link_info
   val = globals->bx_glue_size;
   _bfd_generic_link_add_one_symbol (link_info, globals->bfd_of_glue_owner,
 				    tmp_name, BSF_FUNCTION | BSF_LOCAL, s, val,
-				    NULL, TRUE, FALSE, &bh);
+				    NULL, true, false, &bh);
 
   myh = (struct elf_link_hash_entry *) bh;
   myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
@@ -7493,14 +7488,13 @@ record_vfp11_erratum_veneer (struct bfd_
 
   tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen
 				  (VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10);
-
   BFD_ASSERT (tmp_name);
 
   sprintf (tmp_name, VFP11_ERRATUM_VENEER_ENTRY_NAME,
 	   hash_table->num_vfp11_fixes);
 
   myh = elf_link_hash_lookup
-    (&(hash_table)->root, tmp_name, FALSE, FALSE, FALSE);
+    (&(hash_table)->root, tmp_name, false, false, false);
 
   BFD_ASSERT (myh == NULL);
 
@@ -7508,7 +7502,7 @@ record_vfp11_erratum_veneer (struct bfd_
   val = hash_table->vfp11_erratum_glue_size;
   _bfd_generic_link_add_one_symbol (link_info, hash_table->bfd_of_glue_owner,
 				    tmp_name, BSF_FUNCTION | BSF_LOCAL, s, val,
-				    NULL, TRUE, FALSE, &bh);
+				    NULL, true, false, &bh);
 
   myh = (struct elf_link_hash_entry *) bh;
   myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
@@ -7533,7 +7527,7 @@ record_vfp11_erratum_veneer (struct bfd_
 	   hash_table->num_vfp11_fixes);
 
   myh = elf_link_hash_lookup
-    (&(hash_table)->root, tmp_name, FALSE, FALSE, FALSE);
+    (&(hash_table)->root, tmp_name, false, false, false);
 
   if (myh != NULL)
     abort ();
@@ -7541,7 +7535,7 @@ record_vfp11_erratum_veneer (struct bfd_
   bh = NULL;
   val = offset + 4;
   _bfd_generic_link_add_one_symbol (link_info, branch_bfd, tmp_name, BSF_LOCAL,
-				    branch_sec, val, NULL, TRUE, FALSE, &bh);
+				    branch_sec, val, NULL, true, false, &bh);
 
   myh = (struct elf_link_hash_entry *) bh;
   myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
@@ -7559,7 +7553,7 @@ record_vfp11_erratum_veneer (struct bfd_
       _bfd_generic_link_add_one_symbol (link_info,
 					hash_table->bfd_of_glue_owner, "$a",
 					BSF_LOCAL, s, 0, NULL,
-					TRUE, FALSE, &bh);
+					true, false, &bh);
 
       myh = (struct elf_link_hash_entry *) bh;
       myh->type = ELF_ST_INFO (STB_LOCAL, STT_NOTYPE);
@@ -7613,14 +7607,13 @@ record_stm32l4xx_erratum_veneer (struct
 
   tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen
 				  (STM32L4XX_ERRATUM_VENEER_ENTRY_NAME) + 10);
-
   BFD_ASSERT (tmp_name);
 
   sprintf (tmp_name, STM32L4XX_ERRATUM_VENEER_ENTRY_NAME,
 	   hash_table->num_stm32l4xx_fixes);
 
   myh = elf_link_hash_lookup
-    (&(hash_table)->root, tmp_name, FALSE, FALSE, FALSE);
+    (&(hash_table)->root, tmp_name, false, false, false);
 
   BFD_ASSERT (myh == NULL);
 
@@ -7628,7 +7621,7 @@ record_stm32l4xx_erratum_veneer (struct
   val = hash_table->stm32l4xx_erratum_glue_size;
   _bfd_generic_link_add_one_symbol (link_info, hash_table->bfd_of_glue_owner,
 				    tmp_name, BSF_FUNCTION | BSF_LOCAL, s, val,
-				    NULL, TRUE, FALSE, &bh);
+				    NULL, true, false, &bh);
 
   myh = (struct elf_link_hash_entry *) bh;
   myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
@@ -7653,7 +7646,7 @@ record_stm32l4xx_erratum_veneer (struct
 	   hash_table->num_stm32l4xx_fixes);
 
   myh = elf_link_hash_lookup
-    (&(hash_table)->root, tmp_name, FALSE, FALSE, FALSE);
+    (&(hash_table)->root, tmp_name, false, false, false);
 
   if (myh != NULL)
     abort ();
@@ -7661,7 +7654,7 @@ record_stm32l4xx_erratum_veneer (struct
   bh = NULL;
   val = offset + 4;
   _bfd_generic_link_add_one_symbol (link_info, branch_bfd, tmp_name, BSF_LOCAL,
-				    branch_sec, val, NULL, TRUE, FALSE, &bh);
+				    branch_sec, val, NULL, true, false, &bh);
 
   myh = (struct elf_link_hash_entry *) bh;
   myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
@@ -7678,7 +7671,7 @@ record_stm32l4xx_erratum_veneer (struct
       _bfd_generic_link_add_one_symbol (link_info,
 					hash_table->bfd_of_glue_owner, "$t",
 					BSF_LOCAL, s, 0, NULL,
-					TRUE, FALSE, &bh);
+					true, false, &bh);
 
       myh = (struct elf_link_hash_entry *) bh;
       myh->type = ELF_ST_INFO (STB_LOCAL, STT_NOTYPE);
@@ -7705,7 +7698,7 @@ record_stm32l4xx_erratum_veneer (struct
 
 /* Create a fake section for use by the ARM backend of the linker.  */
 
-static bfd_boolean
+static bool
 arm_make_glue_section (bfd * abfd, const char * name)
 {
   asection * sec;
@@ -7713,19 +7706,19 @@ arm_make_glue_section (bfd * abfd, const
   sec = bfd_get_linker_section (abfd, name);
   if (sec != NULL)
     /* Already made.  */
-    return TRUE;
+    return true;
 
   sec = bfd_make_section_anyway_with_flags (abfd, name, ARM_GLUE_SECTION_FLAGS);
 
   if (sec == NULL
       || !bfd_set_section_alignment (sec, 2))
-    return FALSE;
+    return false;
 
   /* Set the gc mark to prevent the section from being removed by garbage
      collection, despite the fact that no relocs refer to this section.  */
   sec->gc_mark = 1;
 
-  return TRUE;
+  return true;
 }
 
 /* Set size of .plt entries.  This function is called from the
@@ -7734,25 +7727,25 @@ arm_make_glue_section (bfd * abfd, const
 void
 bfd_elf32_arm_use_long_plt (void)
 {
-  elf32_arm_use_long_plt_entry = TRUE;
+  elf32_arm_use_long_plt_entry = true;
 }
 
 /* Add the glue sections to ABFD.  This function is called from the
    linker scripts in ld/emultempl/{armelf}.em.  */
 
-bfd_boolean
+bool
 bfd_elf32_arm_add_glue_sections_to_bfd (bfd *abfd,
 					struct bfd_link_info *info)
 {
   struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (info);
-  bfd_boolean dostm32l4xx = globals
+  bool dostm32l4xx = globals
     && globals->stm32l4xx_fix != BFD_ARM_STM32L4XX_FIX_NONE;
-  bfd_boolean addglue;
+  bool addglue;
 
   /* If we are only performing a partial
      link do not bother adding the glue.  */
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   addglue = arm_make_glue_section (abfd, ARM2THUMB_GLUE_SECTION_NAME)
     && arm_make_glue_section (abfd, THUMB2ARM_GLUE_SECTION_NAME)
@@ -7801,7 +7794,7 @@ bfd_elf32_arm_keep_private_stub_output_s
    This function is called from the linker scripts in ld/emultempl/
    {armelf/pe}.em.  */
 
-bfd_boolean
+bool
 bfd_elf32_arm_get_bfd_for_interworking (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf32_arm_link_hash_table *globals;
@@ -7809,7 +7802,7 @@ bfd_elf32_arm_get_bfd_for_interworking (
   /* If we are only performing a partial link
      do not bother getting a bfd to hold the glue.  */
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* Make sure we don't attach the glue sections to a dynamic object.  */
   BFD_ASSERT (!(abfd->flags & DYNAMIC));
@@ -7818,12 +7811,12 @@ bfd_elf32_arm_get_bfd_for_interworking (
   BFD_ASSERT (globals != NULL);
 
   if (globals->bfd_of_glue_owner != NULL)
-    return TRUE;
+    return true;
 
   /* Save the bfd for later use.  */
   globals->bfd_of_glue_owner = abfd;
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -7846,7 +7839,7 @@ check_use_blx (struct elf32_arm_link_has
     }
 }
 
-bfd_boolean
+bool
 bfd_elf32_arm_process_before_allocation (bfd *abfd,
 					 struct bfd_link_info *link_info)
 {
@@ -7861,7 +7854,7 @@ bfd_elf32_arm_process_before_allocation
   /* If we are only performing a partial link do not bother
      to construct any glue.  */
   if (bfd_link_relocatable (link_info))
-    return TRUE;
+    return true;
 
   /* Here we have a bfd that is to be included on the link.  We have a
      hook to do reloc rummaging, before section sizes are nailed down.  */
@@ -7874,34 +7867,35 @@ bfd_elf32_arm_process_before_allocation
     {
       _bfd_error_handler (_("%pB: BE8 images only valid in big-endian mode"),
 			  abfd);
-      return FALSE;
+      return false;
     }
 
   /* PR 5398: If we have not decided to include any loadable sections in
      the output then we will not have a glue owner bfd.  This is OK, it
      just means that there is nothing else for us to do here.  */
   if (globals->bfd_of_glue_owner == NULL)
-    return TRUE;
+    return true;
 
   /* Rummage around all the relocs and map the glue vectors.  */
   sec = abfd->sections;
 
   if (sec == NULL)
-    return TRUE;
+    return true;
 
   for (; sec != NULL; sec = sec->next)
     {
       if (sec->reloc_count == 0)
 	continue;
 
-      if ((sec->flags & SEC_EXCLUDE) != 0)
+      if ((sec->flags & SEC_EXCLUDE) != 0
+	  || (sec->flags & SEC_HAS_CONTENTS) == 0)
 	continue;
 
       symtab_hdr = & elf_symtab_hdr (abfd);
 
       /* Load the relocs.  */
       internal_relocs
-	= _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, FALSE);
+	= _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, false);
 
       if (internal_relocs == NULL)
 	goto error_return;
@@ -7983,28 +7977,24 @@ bfd_elf32_arm_process_before_allocation
 	    }
 	}
 
-      if (contents != NULL
-	  && elf_section_data (sec)->this_hdr.contents != contents)
+      if (elf_section_data (sec)->this_hdr.contents != contents)
 	free (contents);
       contents = NULL;
 
-      if (internal_relocs != NULL
-	  && elf_section_data (sec)->relocs != internal_relocs)
+      if (elf_section_data (sec)->relocs != internal_relocs)
 	free (internal_relocs);
       internal_relocs = NULL;
     }
 
-  return TRUE;
+  return true;
 
-error_return:
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+ error_return:
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 #endif
 
@@ -8156,7 +8146,7 @@ enum bfd_arm_vfp11_pipe
    encounter VFP3 instructions, so we allow the full range for DP registers.  */
 
 static unsigned int
-bfd_arm_vfp11_regno (unsigned int insn, bfd_boolean is_double, unsigned int rx,
+bfd_arm_vfp11_regno (unsigned int insn, bool is_double, unsigned int rx,
 		     unsigned int x)
 {
   if (is_double)
@@ -8179,7 +8169,7 @@ bfd_arm_vfp11_write_mask (unsigned int *
 
 /* Return TRUE if WMASK overwrites anything in REGS.  */
 
-static bfd_boolean
+static bool
 bfd_arm_vfp11_antidependency (unsigned int wmask, int *regs, int numregs)
 {
   int i;
@@ -8189,7 +8179,7 @@ bfd_arm_vfp11_antidependency (unsigned i
       unsigned int reg = regs[i];
 
       if (reg < 32 && (wmask & (1 << reg)) != 0)
-	return TRUE;
+	return true;
 
       reg -= 32;
 
@@ -8197,10 +8187,10 @@ bfd_arm_vfp11_antidependency (unsigned i
 	continue;
 
       if ((wmask & (3 << (reg * 2))) != 0)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* In this function, we're interested in two things: finding input registers
@@ -8216,7 +8206,7 @@ bfd_arm_vfp11_insn_decode (unsigned int
 			   int *numregs)
 {
   enum bfd_arm_vfp11_pipe vpipe = VFP11_BAD;
-  bfd_boolean is_double = ((insn & 0xf00) == 0xb00) ? 1 : 0;
+  bool is_double = ((insn & 0xf00) == 0xb00) ? 1 : 0;
 
   if ((insn & 0x0f000e10) == 0x0e000a00)  /* A data-processing insn.  */
     {
@@ -8404,7 +8394,7 @@ static int elf32_arm_compare_mapping (co
    (available from ARM) for details of the erratum.  A short version is
    described in ld.texinfo.  */
 
-bfd_boolean
+bool
 bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info)
 {
   asection *sec;
@@ -8415,7 +8405,7 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *a
   int use_vector = (globals->vfp11_fix == BFD_ARM_VFP11_FIX_VECTOR);
 
   if (globals == NULL)
-    return FALSE;
+    return false;
 
   /* We use a simple FSM to match troublesome VFP11 instruction sequences.
      The states transition as follows:
@@ -8446,21 +8436,21 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *a
   /* If we are only performing a partial link do not bother
      to construct any glue.  */
   if (bfd_link_relocatable (link_info))
-    return TRUE;
+    return true;
 
   /* Skip if this bfd does not correspond to an ELF image.  */
   if (! is_arm_elf (abfd))
-    return TRUE;
+    return true;
 
   /* We should have chosen a fix type by the time we get here.  */
   BFD_ASSERT (globals->vfp11_fix != BFD_ARM_VFP11_FIX_DEFAULT);
 
   if (globals->vfp11_fix == BFD_ARM_VFP11_FIX_NONE)
-    return TRUE;
+    return true;
 
   /* Skip this BFD if it corresponds to an executable or dynamic object.  */
   if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
-    return TRUE;
+    return true;
 
   for (sec = abfd->sections; sec != NULL; sec = sec->next)
     {
@@ -8506,14 +8496,14 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *a
 	    {
 	      unsigned int next_i = i + 4;
 	      unsigned int insn = bfd_big_endian (abfd)
-		? (contents[i] << 24)
-		  | (contents[i + 1] << 16)
-		  | (contents[i + 2] << 8)
-		  | contents[i + 3]
-		: (contents[i + 3] << 24)
-		  | (contents[i + 2] << 16)
-		  | (contents[i + 1] << 8)
-		  | contents[i];
+		? (((unsigned) contents[i] << 24)
+		   | (contents[i + 1] << 16)
+		   | (contents[i + 2] << 8)
+		   | contents[i + 3])
+		: (((unsigned) contents[i + 3] << 24)
+		   | (contents[i + 2] << 16)
+		   | (contents[i + 1] << 8)
+		   | contents[i]);
 	      unsigned int writemask = 0;
 	      enum bfd_arm_vfp11_pipe vpipe;
 
@@ -8604,20 +8594,18 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *a
 	    }
 	}
 
-      if (contents != NULL
-	  && elf_section_data (sec)->this_hdr.contents != contents)
+      if (elf_section_data (sec)->this_hdr.contents != contents)
 	free (contents);
       contents = NULL;
     }
 
-  return TRUE;
+  return true;
 
-error_return:
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+ error_return:
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
 
-  return FALSE;
+  return false;
 }
 
 /* Find virtual-memory addresses for VFP11 erratum veneers and return locations
@@ -8644,6 +8632,7 @@ bfd_elf32_arm_vfp11_fix_veneer_locations
 
   tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen
 				  (VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10);
+  BFD_ASSERT (tmp_name);
 
   for (sec = abfd->sections; sec != NULL; sec = sec->next)
     {
@@ -8664,7 +8653,7 @@ bfd_elf32_arm_vfp11_fix_veneer_locations
 		       errnode->u.b.veneer->u.v.id);
 
 	      myh = elf_link_hash_lookup
-		(&(globals)->root, tmp_name, FALSE, FALSE, TRUE);
+		(&(globals)->root, tmp_name, false, false, true);
 
 	      if (myh == NULL)
 		_bfd_error_handler (_("%pB: unable to find %s veneer `%s'"),
@@ -8684,7 +8673,7 @@ bfd_elf32_arm_vfp11_fix_veneer_locations
 		       errnode->u.v.id);
 
 	      myh = elf_link_hash_lookup
-		(&(globals)->root, tmp_name, FALSE, FALSE, TRUE);
+		(&(globals)->root, tmp_name, false, false, true);
 
 	      if (myh == NULL)
 		_bfd_error_handler (_("%pB: unable to find %s veneer `%s'"),
@@ -8731,6 +8720,7 @@ bfd_elf32_arm_stm32l4xx_fix_veneer_locat
 
   tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen
 				  (STM32L4XX_ERRATUM_VENEER_ENTRY_NAME) + 10);
+  BFD_ASSERT (tmp_name);
 
   for (sec = abfd->sections; sec != NULL; sec = sec->next)
     {
@@ -8750,7 +8740,7 @@ bfd_elf32_arm_stm32l4xx_fix_veneer_locat
 		       errnode->u.b.veneer->u.v.id);
 
 	      myh = elf_link_hash_lookup
-		(&(globals)->root, tmp_name, FALSE, FALSE, TRUE);
+		(&(globals)->root, tmp_name, false, false, true);
 
 	      if (myh == NULL)
 		_bfd_error_handler (_("%pB: unable to find %s veneer `%s'"),
@@ -8769,7 +8759,7 @@ bfd_elf32_arm_stm32l4xx_fix_veneer_locat
 		       errnode->u.v.id);
 
 	      myh = elf_link_hash_lookup
-		(&(globals)->root, tmp_name, FALSE, FALSE, TRUE);
+		(&(globals)->root, tmp_name, false, false, true);
 
 	      if (myh == NULL)
 		_bfd_error_handler (_("%pB: unable to find %s veneer `%s'"),
@@ -8791,7 +8781,7 @@ bfd_elf32_arm_stm32l4xx_fix_veneer_locat
   free (tmp_name);
 }
 
-static inline bfd_boolean
+static inline bool
 is_thumb2_ldmia (const insn32 insn)
 {
   /* Encoding T2: LDM<c>.W <Rn>{!},<registers>
@@ -8799,7 +8789,7 @@ is_thumb2_ldmia (const insn32 insn)
   return (insn & 0xffd02000) == 0xe8900000;
 }
 
-static inline bfd_boolean
+static inline bool
 is_thumb2_ldmdb (const insn32 insn)
 {
   /* Encoding T1: LDMDB<c> <Rn>{!},<registers>
@@ -8807,7 +8797,7 @@ is_thumb2_ldmdb (const insn32 insn)
   return (insn & 0xffd02000) == 0xe9100000;
 }
 
-static inline bfd_boolean
+static inline bool
 is_thumb2_vldm (const insn32 insn)
 {
   /* A6.5 Extension register load or store instruction
@@ -8839,7 +8829,7 @@ is_thumb2_vldm (const insn32 insn)
    . replaces only if > 8-word accesses
    . or (testing purposes only) replaces all accesses.  */
 
-static bfd_boolean
+static bool
 stm32l4xx_need_create_replacing_stub (const insn32 insn,
 				      bfd_arm_stm32l4xx_fix stm32l4xx_fix)
 {
@@ -8854,15 +8844,15 @@ stm32l4xx_need_create_replacing_stub (co
 
   /* DEFAULT mode accounts for the real bug condition situation,
      ALL mode inserts stubs for each LDM/VLDM instruction (testing).  */
-  return
-    (stm32l4xx_fix == BFD_ARM_STM32L4XX_FIX_DEFAULT) ? nb_words > 8 :
-    (stm32l4xx_fix == BFD_ARM_STM32L4XX_FIX_ALL) ? TRUE : FALSE;
+  return (stm32l4xx_fix == BFD_ARM_STM32L4XX_FIX_DEFAULT
+	  ? nb_words > 8
+	  : stm32l4xx_fix == BFD_ARM_STM32L4XX_FIX_ALL);
 }
 
 /* Look for potentially-troublesome code sequences which might trigger
    the STM STM32L4XX erratum.  */
 
-bfd_boolean
+bool
 bfd_elf32_arm_stm32l4xx_erratum_scan (bfd *abfd,
 				      struct bfd_link_info *link_info)
 {
@@ -8871,23 +8861,23 @@ bfd_elf32_arm_stm32l4xx_erratum_scan (bf
   struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (link_info);
 
   if (globals == NULL)
-    return FALSE;
+    return false;
 
   /* If we are only performing a partial link do not bother
      to construct any glue.  */
   if (bfd_link_relocatable (link_info))
-    return TRUE;
+    return true;
 
   /* Skip if this bfd does not correspond to an ELF image.  */
   if (! is_arm_elf (abfd))
-    return TRUE;
+    return true;
 
   if (globals->stm32l4xx_fix == BFD_ARM_STM32L4XX_FIX_NONE)
-    return TRUE;
+    return true;
 
   /* Skip this BFD if it corresponds to an executable or dynamic object.  */
   if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
-    return TRUE;
+    return true;
 
   for (sec = abfd->sections; sec != NULL; sec = sec->next)
     {
@@ -8934,17 +8924,17 @@ bfd_elf32_arm_stm32l4xx_erratum_scan (bf
 	  for (i = span_start; i < span_end;)
 	    {
 	      unsigned int insn = bfd_get_16 (abfd, &contents[i]);
-	      bfd_boolean insn_32bit = FALSE;
-	      bfd_boolean is_ldm = FALSE;
-	      bfd_boolean is_vldm = FALSE;
-	      bfd_boolean is_not_last_in_it_block = FALSE;
+	      bool insn_32bit = false;
+	      bool is_ldm = false;
+	      bool is_vldm = false;
+	      bool is_not_last_in_it_block = false;
 
 	      /* The first 16-bits of all 32-bit thumb2 instructions start
 		 with opcode[15..13]=0b111 and the encoded op1 can be anything
 		 except opcode[12..11]!=0b00.
 		 See 32-bit Thumb instruction encoding.  */
 	      if ((insn & 0xe000) == 0xe000 && (insn & 0x1800) != 0x0000)
-		insn_32bit = TRUE;
+		insn_32bit = true;
 
 	      /* Compute the predicate that tells if the instruction
 		 is concerned by the IT block
@@ -9022,7 +9012,7 @@ bfd_elf32_arm_stm32l4xx_erratum_scan (bf
 		     There can be no nested IT blocks so an IT block
 		     is naturally a new one for which it is worth
 		     computing its size.  */
-		  bfd_boolean is_newitblock = ((insn & 0xff00) == 0xbf00)
+		  bool is_newitblock = ((insn & 0xff00) == 0xbf00)
 		    && ((insn & 0x000f) != 0x0000);
 		  /* If we have a new IT block we compute its size.  */
 		  if (is_newitblock)
@@ -9039,20 +9029,18 @@ bfd_elf32_arm_stm32l4xx_erratum_scan (bf
 	    }
 	}
 
-      if (contents != NULL
-	  && elf_section_data (sec)->this_hdr.contents != contents)
+      if (elf_section_data (sec)->this_hdr.contents != contents)
 	free (contents);
       contents = NULL;
     }
 
-  return TRUE;
+  return true;
 
-error_return:
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+ error_return:
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
 
-  return FALSE;
+  return false;
 }
 
 /* Set target relocation values needed during linking.  */
@@ -9150,7 +9138,7 @@ elf32_thumb_to_arm_stub (struct bfd_link
 
   myh = find_thumb_glue (info, name, error_message);
   if (myh == NULL)
-    return FALSE;
+    return false;
 
   globals = elf32_arm_hash_table (info);
   BFD_ASSERT (globals != NULL);
@@ -9176,7 +9164,7 @@ elf32_thumb_to_arm_stub (struct bfd_link
 	       " first occurrence: %pB: %s call to %s"),
 	     sym_sec->owner, name, input_bfd, "Thumb", "ARM");
 
-	  return FALSE;
+	  return false;
 	}
 
       --my_offset;
@@ -9225,7 +9213,7 @@ elf32_thumb_to_arm_stub (struct bfd_link
 
   insert_thumb_branch (input_bfd, ret_offset, hit_data - input_section->vma);
 
-  return TRUE;
+  return true;
 }
 
 /* Populate an Arm to Thumb stub.  Returns the stub symbol.  */
@@ -9358,7 +9346,7 @@ elf32_arm_to_thumb_stub (struct bfd_link
   myh = elf32_arm_create_thumb_stub (info, name, input_bfd, output_bfd,
 				     sym_sec, val, s, error_message);
   if (!myh)
-    return FALSE;
+    return false;
 
   my_offset = myh->root.u.def.value;
   tmp = bfd_get_32 (input_bfd, hit_data);
@@ -9377,12 +9365,12 @@ elf32_arm_to_thumb_stub (struct bfd_link
 
   bfd_put_32 (output_bfd, (bfd_vma) tmp, hit_data - input_section->vma);
 
-  return TRUE;
+  return true;
 }
 
 /* Populate Arm stub for an exported Thumb function.  */
 
-static bfd_boolean
+static bool
 elf32_arm_to_thumb_export_stub (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info * info = (struct bfd_link_info *) inf;
@@ -9397,7 +9385,7 @@ elf32_arm_to_thumb_export_stub (struct e
   eh = elf32_arm_hash_entry (h);
   /* Allocate stubs for exported Thumb functions on v4t.  */
   if (eh->export_glue == NULL)
-    return TRUE;
+    return true;
 
   globals = elf32_arm_hash_table (info);
   BFD_ASSERT (globals != NULL);
@@ -9421,7 +9409,7 @@ elf32_arm_to_thumb_export_stub (struct e
 				     globals->obfd, sec, val, s,
 				     &error_message);
   BFD_ASSERT (myh);
-  return TRUE;
+  return true;
 }
 
 /* Populate ARMv4 BX veneers.  Returns the absolute adress of the veneer.  */
@@ -9548,7 +9536,7 @@ elf32_arm_add_dynreloc (bfd *output_bfd,
 
 static void
 elf32_arm_allocate_plt_entry (struct bfd_link_info *info,
-			      bfd_boolean is_iplt_entry,
+			      bool is_iplt_entry,
 			      union gotplt_union *root_plt,
 			      struct arm_plt_info *arm_plt)
 {
@@ -9564,7 +9552,7 @@ elf32_arm_allocate_plt_entry (struct bfd
       sgotplt = htab->root.igotplt;
 
       /* NaCl uses a special first entry in .iplt too.  */
-      if (htab->nacl_p && splt->size == 0)
+      if (htab->root.target_os == is_nacl && splt->size == 0)
 	splt->size += htab->plt_header_size;
 
       /* Allocate room for an R_ARM_IRELATIVE relocation in .rel.iplt.  */
@@ -9606,20 +9594,17 @@ elf32_arm_allocate_plt_entry (struct bfd
   root_plt->offset = splt->size;
   splt->size += htab->plt_entry_size;
 
-  if (!htab->symbian_p)
-    {
-      /* We also need to make an entry in the .got.plt section, which
-	 will be placed in the .got section by the linker script.  */
-      if (is_iplt_entry)
-	arm_plt->got_offset = sgotplt->size;
-      else
-	arm_plt->got_offset = sgotplt->size - 8 * htab->num_tls_desc;
-      if (htab->fdpic_p)
-	/* Function descriptor takes 64 bits in GOT.  */
-	sgotplt->size += 8;
-      else
-	sgotplt->size += 4;
-    }
+  /* We also need to make an entry in the .got.plt section, which
+     will be placed in the .got section by the linker script.  */
+  if (is_iplt_entry)
+    arm_plt->got_offset = sgotplt->size;
+  else
+    arm_plt->got_offset = sgotplt->size - 8 * htab->num_tls_desc;
+  if (htab->fdpic_p)
+    /* Function descriptor takes 64 bits in GOT.  */
+    sgotplt->size += 8;
+  else
+    sgotplt->size += 4;
 }
 
 static bfd_vma
@@ -9645,7 +9630,7 @@ arm_movt_immediate (bfd_vma value)
 
    Returns FALSE if there was a problem.  */
 
-static bfd_boolean
+static bool
 elf32_arm_populate_plt_entry (bfd *output_bfd, struct bfd_link_info *info,
 			      union gotplt_union *root_plt,
 			      struct arm_plt_info *arm_plt,
@@ -9658,7 +9643,6 @@ elf32_arm_populate_plt_entry (bfd *outpu
   bfd_byte *loc;
   bfd_vma plt_index;
   Elf_Internal_Rela rel;
-  bfd_vma plt_header_size;
   bfd_vma got_header_size;
 
   htab = elf32_arm_hash_table (info);
@@ -9673,7 +9657,6 @@ elf32_arm_populate_plt_entry (bfd *outpu
       /* There are no reserved entries in .igot.plt, and no special
 	 first entry in .iplt.  */
       got_header_size = 0;
-      plt_header_size = 0;
     }
   else
     {
@@ -9682,342 +9665,320 @@ elf32_arm_populate_plt_entry (bfd *outpu
       srel = htab->root.srelplt;
 
       got_header_size = get_elf_backend_data (output_bfd)->got_header_size;
-      plt_header_size = htab->plt_header_size;
     }
   BFD_ASSERT (splt != NULL && srel != NULL);
 
-  /* Fill in the entry in the procedure linkage table.  */
-  if (htab->symbian_p)
-    {
-      BFD_ASSERT (dynindx >= 0);
-      put_arm_insn (htab, output_bfd,
-		    elf32_arm_symbian_plt_entry[0],
-		    splt->contents + root_plt->offset);
-      bfd_put_32 (output_bfd,
-		  elf32_arm_symbian_plt_entry[1],
-		  splt->contents + root_plt->offset + 4);
-
-      /* Fill in the entry in the .rel.plt section.  */
-      rel.r_offset = (splt->output_section->vma
-		      + splt->output_offset
-		      + root_plt->offset + 4);
-      rel.r_info = ELF32_R_INFO (dynindx, R_ARM_GLOB_DAT);
-
-      /* Get the index in the procedure linkage table which
-	 corresponds to this symbol.  This is the index of this symbol
-	 in all the symbols for which we are making plt entries.  The
-	 first entry in the procedure linkage table is reserved.  */
-      plt_index = ((root_plt->offset - plt_header_size)
-		   / htab->plt_entry_size);
-    }
+  bfd_vma got_offset, got_address, plt_address;
+  bfd_vma got_displacement, initial_got_entry;
+  bfd_byte * ptr;
+
+  BFD_ASSERT (sgot != NULL);
+
+  /* Get the offset into the .(i)got.plt table of the entry that
+     corresponds to this function.  */
+  got_offset = (arm_plt->got_offset & -2);
+
+  /* Get the index in the procedure linkage table which
+     corresponds to this symbol.  This is the index of this symbol
+     in all the symbols for which we are making plt entries.
+     After the reserved .got.plt entries, all symbols appear in
+     the same order as in .plt.  */
+  if (htab->fdpic_p)
+    /* Function descriptor takes 8 bytes.  */
+    plt_index = (got_offset - got_header_size) / 8;
   else
+    plt_index = (got_offset - got_header_size) / 4;
+
+  /* Calculate the address of the GOT entry.  */
+  got_address = (sgot->output_section->vma
+		 + sgot->output_offset
+		 + got_offset);
+
+  /* ...and the address of the PLT entry.  */
+  plt_address = (splt->output_section->vma
+		 + splt->output_offset
+		 + root_plt->offset);
+
+  ptr = splt->contents + root_plt->offset;
+  if (htab->root.target_os == is_vxworks && bfd_link_pic (info))
+    {
+      unsigned int i;
+      bfd_vma val;
+
+      for (i = 0; i != htab->plt_entry_size / 4; i++, ptr += 4)
+	{
+	  val = elf32_arm_vxworks_shared_plt_entry[i];
+	  if (i == 2)
+	    val |= got_address - sgot->output_section->vma;
+	  if (i == 5)
+	    val |= plt_index * RELOC_SIZE (htab);
+	  if (i == 2 || i == 5)
+	    bfd_put_32 (output_bfd, val, ptr);
+	  else
+	    put_arm_insn (htab, output_bfd, val, ptr);
+	}
+    }
+  else if (htab->root.target_os == is_vxworks)
     {
-      bfd_vma got_offset, got_address, plt_address;
-      bfd_vma got_displacement, initial_got_entry;
-      bfd_byte * ptr;
+      unsigned int i;
+      bfd_vma val;
 
-      BFD_ASSERT (sgot != NULL);
+      for (i = 0; i != htab->plt_entry_size / 4; i++, ptr += 4)
+	{
+	  val = elf32_arm_vxworks_exec_plt_entry[i];
+	  if (i == 2)
+	    val |= got_address;
+	  if (i == 4)
+	    val |= 0xffffff & -((root_plt->offset + i * 4 + 8) >> 2);
+	  if (i == 5)
+	    val |= plt_index * RELOC_SIZE (htab);
+	  if (i == 2 || i == 5)
+	    bfd_put_32 (output_bfd, val, ptr);
+	  else
+	    put_arm_insn (htab, output_bfd, val, ptr);
+	}
 
-      /* Get the offset into the .(i)got.plt table of the entry that
-	 corresponds to this function.  */
-      got_offset = (arm_plt->got_offset & -2);
-
-      /* Get the index in the procedure linkage table which
-	 corresponds to this symbol.  This is the index of this symbol
-	 in all the symbols for which we are making plt entries.
-	 After the reserved .got.plt entries, all symbols appear in
-	 the same order as in .plt.  */
-      if (htab->fdpic_p)
-	/* Function descriptor takes 8 bytes.  */
-	plt_index = (got_offset - got_header_size) / 8;
-      else
-	plt_index = (got_offset - got_header_size) / 4;
+      loc = (htab->srelplt2->contents
+	     + (plt_index * 2 + 1) * RELOC_SIZE (htab));
 
-      /* Calculate the address of the GOT entry.  */
-      got_address = (sgot->output_section->vma
-		     + sgot->output_offset
-		     + got_offset);
+      /* Create the .rela.plt.unloaded R_ARM_ABS32 relocation
+	 referencing the GOT for this PLT entry.  */
+      rel.r_offset = plt_address + 8;
+      rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_ARM_ABS32);
+      rel.r_addend = got_offset;
+      SWAP_RELOC_OUT (htab) (output_bfd, &rel, loc);
+      loc += RELOC_SIZE (htab);
 
-      /* ...and the address of the PLT entry.  */
-      plt_address = (splt->output_section->vma
-		     + splt->output_offset
-		     + root_plt->offset);
+      /* Create the R_ARM_ABS32 relocation referencing the
+	 beginning of the PLT for this GOT entry.  */
+      rel.r_offset = got_address;
+      rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_ARM_ABS32);
+      rel.r_addend = 0;
+      SWAP_RELOC_OUT (htab) (output_bfd, &rel, loc);
+    }
+  else if (htab->root.target_os == is_nacl)
+    {
+      /* Calculate the displacement between the PLT slot and the
+	 common tail that's part of the special initial PLT slot.  */
+      int32_t tail_displacement
+	= ((splt->output_section->vma + splt->output_offset
+	    + ARM_NACL_PLT_TAIL_OFFSET)
+	   - (plt_address + htab->plt_entry_size + 4));
+      BFD_ASSERT ((tail_displacement & 3) == 0);
+      tail_displacement >>= 2;
+
+      BFD_ASSERT ((tail_displacement & 0xff000000) == 0
+		  || (-tail_displacement & 0xff000000) == 0);
+
+      /* Calculate the displacement between the PLT slot and the entry
+	 in the GOT.  The offset accounts for the value produced by
+	 adding to pc in the penultimate instruction of the PLT stub.  */
+      got_displacement = (got_address
+			  - (plt_address + htab->plt_entry_size));
 
-      ptr = splt->contents + root_plt->offset;
-      if (htab->vxworks_p && bfd_link_pic (info))
-	{
-	  unsigned int i;
-	  bfd_vma val;
+      /* NaCl does not support interworking at all.  */
+      BFD_ASSERT (!elf32_arm_plt_needs_thumb_stub_p (info, arm_plt));
 
-	  for (i = 0; i != htab->plt_entry_size / 4; i++, ptr += 4)
-	    {
-	      val = elf32_arm_vxworks_shared_plt_entry[i];
-	      if (i == 2)
-		val |= got_address - sgot->output_section->vma;
-	      if (i == 5)
-		val |= plt_index * RELOC_SIZE (htab);
-	      if (i == 2 || i == 5)
-		bfd_put_32 (output_bfd, val, ptr);
-	      else
-		put_arm_insn (htab, output_bfd, val, ptr);
-	    }
+      put_arm_insn (htab, output_bfd,
+		    elf32_arm_nacl_plt_entry[0]
+		    | arm_movw_immediate (got_displacement),
+		    ptr + 0);
+      put_arm_insn (htab, output_bfd,
+		    elf32_arm_nacl_plt_entry[1]
+		    | arm_movt_immediate (got_displacement),
+		    ptr + 4);
+      put_arm_insn (htab, output_bfd,
+		    elf32_arm_nacl_plt_entry[2],
+		    ptr + 8);
+      put_arm_insn (htab, output_bfd,
+		    elf32_arm_nacl_plt_entry[3]
+		    | (tail_displacement & 0x00ffffff),
+		    ptr + 12);
+    }
+  else if (htab->fdpic_p)
+    {
+      const bfd_vma *plt_entry = using_thumb_only (htab)
+	? elf32_arm_fdpic_thumb_plt_entry
+	: elf32_arm_fdpic_plt_entry;
+
+      /* Fill-up Thumb stub if needed.  */
+      if (elf32_arm_plt_needs_thumb_stub_p (info, arm_plt))
+	{
+	  put_thumb_insn (htab, output_bfd,
+			  elf32_arm_plt_thumb_stub[0], ptr - 4);
+	  put_thumb_insn (htab, output_bfd,
+			  elf32_arm_plt_thumb_stub[1], ptr - 2);
+	}
+      /* As we are using 32 bit instructions even for the Thumb
+	 version, we have to use 'put_arm_insn' instead of
+	 'put_thumb_insn'.  */
+      put_arm_insn (htab, output_bfd, plt_entry[0], ptr + 0);
+      put_arm_insn (htab, output_bfd, plt_entry[1], ptr + 4);
+      put_arm_insn (htab, output_bfd, plt_entry[2], ptr + 8);
+      put_arm_insn (htab, output_bfd, plt_entry[3], ptr + 12);
+      bfd_put_32 (output_bfd, got_offset, ptr + 16);
+
+      if (!(info->flags & DF_BIND_NOW))
+	{
+	  /* funcdesc_value_reloc_offset.  */
+	  bfd_put_32 (output_bfd,
+		      htab->root.srelplt->reloc_count * RELOC_SIZE (htab),
+		      ptr + 20);
+	  put_arm_insn (htab, output_bfd, plt_entry[6], ptr + 24);
+	  put_arm_insn (htab, output_bfd, plt_entry[7], ptr + 28);
+	  put_arm_insn (htab, output_bfd, plt_entry[8], ptr + 32);
+	  put_arm_insn (htab, output_bfd, plt_entry[9], ptr + 36);
 	}
-      else if (htab->vxworks_p)
+    }
+  else if (using_thumb_only (htab))
+    {
+      /* PR ld/16017: Generate thumb only PLT entries.  */
+      if (!using_thumb2 (htab))
 	{
-	  unsigned int i;
-	  bfd_vma val;
+	  /* FIXME: We ought to be able to generate thumb-1 PLT
+	     instructions...  */
+	  _bfd_error_handler (_("%pB: warning: thumb-1 mode PLT generation not currently supported"),
+			      output_bfd);
+	  return false;
+	}
+
+      /* Calculate the displacement between the PLT slot and the entry in
+	 the GOT.  The 12-byte offset accounts for the value produced by
+	 adding to pc in the 3rd instruction of the PLT stub.  */
+      got_displacement = got_address - (plt_address + 12);
 
-	  for (i = 0; i != htab->plt_entry_size / 4; i++, ptr += 4)
-	    {
-	      val = elf32_arm_vxworks_exec_plt_entry[i];
-	      if (i == 2)
-		val |= got_address;
-	      if (i == 4)
-		val |= 0xffffff & -((root_plt->offset + i * 4 + 8) >> 2);
-	      if (i == 5)
-		val |= plt_index * RELOC_SIZE (htab);
-	      if (i == 2 || i == 5)
-		bfd_put_32 (output_bfd, val, ptr);
-	      else
-		put_arm_insn (htab, output_bfd, val, ptr);
-	    }
-
-	  loc = (htab->srelplt2->contents
-		 + (plt_index * 2 + 1) * RELOC_SIZE (htab));
-
-	  /* Create the .rela.plt.unloaded R_ARM_ABS32 relocation
-	     referencing the GOT for this PLT entry.  */
-	  rel.r_offset = plt_address + 8;
-	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_ARM_ABS32);
-	  rel.r_addend = got_offset;
-	  SWAP_RELOC_OUT (htab) (output_bfd, &rel, loc);
-	  loc += RELOC_SIZE (htab);
+      /* As we are using 32 bit instructions we have to use 'put_arm_insn'
+	 instead of 'put_thumb_insn'.  */
+      put_arm_insn (htab, output_bfd,
+		    elf32_thumb2_plt_entry[0]
+		    | ((got_displacement & 0x000000ff) << 16)
+		    | ((got_displacement & 0x00000700) << 20)
+		    | ((got_displacement & 0x00000800) >>  1)
+		    | ((got_displacement & 0x0000f000) >> 12),
+		    ptr + 0);
+      put_arm_insn (htab, output_bfd,
+		    elf32_thumb2_plt_entry[1]
+		    | ((got_displacement & 0x00ff0000)      )
+		    | ((got_displacement & 0x07000000) <<  4)
+		    | ((got_displacement & 0x08000000) >> 17)
+		    | ((got_displacement & 0xf0000000) >> 28),
+		    ptr + 4);
+      put_arm_insn (htab, output_bfd,
+		    elf32_thumb2_plt_entry[2],
+		    ptr + 8);
+      put_arm_insn (htab, output_bfd,
+		    elf32_thumb2_plt_entry[3],
+		    ptr + 12);
+    }
+  else
+    {
+      /* Calculate the displacement between the PLT slot and the
+	 entry in the GOT.  The eight-byte offset accounts for the
+	 value produced by adding to pc in the first instruction
+	 of the PLT stub.  */
+      got_displacement = got_address - (plt_address + 8);
 
-	  /* Create the R_ARM_ABS32 relocation referencing the
-	     beginning of the PLT for this GOT entry.  */
-	  rel.r_offset = got_address;
-	  rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_ARM_ABS32);
-	  rel.r_addend = 0;
-	  SWAP_RELOC_OUT (htab) (output_bfd, &rel, loc);
-	}
-      else if (htab->nacl_p)
+      if (elf32_arm_plt_needs_thumb_stub_p (info, arm_plt))
 	{
-	  /* Calculate the displacement between the PLT slot and the
-	     common tail that's part of the special initial PLT slot.  */
-	  int32_t tail_displacement
-	    = ((splt->output_section->vma + splt->output_offset
-		+ ARM_NACL_PLT_TAIL_OFFSET)
-	       - (plt_address + htab->plt_entry_size + 4));
-	  BFD_ASSERT ((tail_displacement & 3) == 0);
-	  tail_displacement >>= 2;
-
-	  BFD_ASSERT ((tail_displacement & 0xff000000) == 0
-		      || (-tail_displacement & 0xff000000) == 0);
-
-	  /* Calculate the displacement between the PLT slot and the entry
-	     in the GOT.  The offset accounts for the value produced by
-	     adding to pc in the penultimate instruction of the PLT stub.  */
-	  got_displacement = (got_address
-			      - (plt_address + htab->plt_entry_size));
+	  put_thumb_insn (htab, output_bfd,
+			  elf32_arm_plt_thumb_stub[0], ptr - 4);
+	  put_thumb_insn (htab, output_bfd,
+			  elf32_arm_plt_thumb_stub[1], ptr - 2);
+	}
 
-	  /* NaCl does not support interworking at all.  */
-	  BFD_ASSERT (!elf32_arm_plt_needs_thumb_stub_p (info, arm_plt));
+      if (!elf32_arm_use_long_plt_entry)
+	{
+	  BFD_ASSERT ((got_displacement & 0xf0000000) == 0);
 
 	  put_arm_insn (htab, output_bfd,
-			elf32_arm_nacl_plt_entry[0]
-			| arm_movw_immediate (got_displacement),
+			elf32_arm_plt_entry_short[0]
+			| ((got_displacement & 0x0ff00000) >> 20),
 			ptr + 0);
 	  put_arm_insn (htab, output_bfd,
-			elf32_arm_nacl_plt_entry[1]
-			| arm_movt_immediate (got_displacement),
-			ptr + 4);
+			elf32_arm_plt_entry_short[1]
+			| ((got_displacement & 0x000ff000) >> 12),
+			ptr+ 4);
 	  put_arm_insn (htab, output_bfd,
-			elf32_arm_nacl_plt_entry[2],
+			elf32_arm_plt_entry_short[2]
+			| (got_displacement & 0x00000fff),
 			ptr + 8);
-	  put_arm_insn (htab, output_bfd,
-			elf32_arm_nacl_plt_entry[3]
-			| (tail_displacement & 0x00ffffff),
-			ptr + 12);
+#ifdef FOUR_WORD_PLT
+	  bfd_put_32 (output_bfd, elf32_arm_plt_entry_short[3], ptr + 12);
+#endif
 	}
-      else if (htab->fdpic_p)
+      else
 	{
-	  const bfd_vma *plt_entry = using_thumb_only(htab)
-	    ? elf32_arm_fdpic_thumb_plt_entry
-	    : elf32_arm_fdpic_plt_entry;
-
-	  /* Fill-up Thumb stub if needed.  */
-	  if (elf32_arm_plt_needs_thumb_stub_p (info, arm_plt))
-	    {
-	      put_thumb_insn (htab, output_bfd,
-			      elf32_arm_plt_thumb_stub[0], ptr - 4);
-	      put_thumb_insn (htab, output_bfd,
-			      elf32_arm_plt_thumb_stub[1], ptr - 2);
-	    }
-	  /* As we are using 32 bit instructions even for the Thumb
-	     version, we have to use 'put_arm_insn' instead of
-	     'put_thumb_insn'.  */
-	  put_arm_insn(htab, output_bfd, plt_entry[0], ptr + 0);
-	  put_arm_insn(htab, output_bfd, plt_entry[1], ptr + 4);
-	  put_arm_insn(htab, output_bfd, plt_entry[2], ptr + 8);
-	  put_arm_insn(htab, output_bfd, plt_entry[3], ptr + 12);
-	  bfd_put_32 (output_bfd, got_offset, ptr + 16);
-
-	  if (!(info->flags & DF_BIND_NOW))
-	    {
-	      /* funcdesc_value_reloc_offset.  */
-	      bfd_put_32 (output_bfd,
-			  htab->root.srelplt->reloc_count * RELOC_SIZE (htab),
-			  ptr + 20);
-	      put_arm_insn(htab, output_bfd, plt_entry[6], ptr + 24);
-	      put_arm_insn(htab, output_bfd, plt_entry[7], ptr + 28);
-	      put_arm_insn(htab, output_bfd, plt_entry[8], ptr + 32);
-	      put_arm_insn(htab, output_bfd, plt_entry[9], ptr + 36);
-	    }
-	}
-      else if (using_thumb_only (htab))
-	{
-	  /* PR ld/16017: Generate thumb only PLT entries.  */
-	  if (!using_thumb2 (htab))
-	    {
-	      /* FIXME: We ought to be able to generate thumb-1 PLT
-		 instructions...  */
-	      _bfd_error_handler (_("%pB: warning: thumb-1 mode PLT generation not currently supported"),
-				  output_bfd);
-	      return FALSE;
-	    }
-
-	  /* Calculate the displacement between the PLT slot and the entry in
-	     the GOT.  The 12-byte offset accounts for the value produced by
-	     adding to pc in the 3rd instruction of the PLT stub.  */
-	  got_displacement = got_address - (plt_address + 12);
-
-	  /* As we are using 32 bit instructions we have to use 'put_arm_insn'
-	     instead of 'put_thumb_insn'.  */
 	  put_arm_insn (htab, output_bfd,
-			elf32_thumb2_plt_entry[0]
-			| ((got_displacement & 0x000000ff) << 16)
-			| ((got_displacement & 0x00000700) << 20)
-			| ((got_displacement & 0x00000800) >>  1)
-			| ((got_displacement & 0x0000f000) >> 12),
+			elf32_arm_plt_entry_long[0]
+			| ((got_displacement & 0xf0000000) >> 28),
 			ptr + 0);
 	  put_arm_insn (htab, output_bfd,
-			elf32_thumb2_plt_entry[1]
-			| ((got_displacement & 0x00ff0000)      )
-			| ((got_displacement & 0x07000000) <<  4)
-			| ((got_displacement & 0x08000000) >> 17)
-			| ((got_displacement & 0xf0000000) >> 28),
+			elf32_arm_plt_entry_long[1]
+			| ((got_displacement & 0x0ff00000) >> 20),
 			ptr + 4);
 	  put_arm_insn (htab, output_bfd,
-			elf32_thumb2_plt_entry[2],
-			ptr + 8);
+			elf32_arm_plt_entry_long[2]
+			| ((got_displacement & 0x000ff000) >> 12),
+			ptr+ 8);
 	  put_arm_insn (htab, output_bfd,
-			elf32_thumb2_plt_entry[3],
+			elf32_arm_plt_entry_long[3]
+			| (got_displacement & 0x00000fff),
 			ptr + 12);
 	}
-      else
-	{
-	  /* Calculate the displacement between the PLT slot and the
-	     entry in the GOT.  The eight-byte offset accounts for the
-	     value produced by adding to pc in the first instruction
-	     of the PLT stub.  */
-	  got_displacement = got_address - (plt_address + 8);
-
-	  if (elf32_arm_plt_needs_thumb_stub_p (info, arm_plt))
-	    {
-	      put_thumb_insn (htab, output_bfd,
-			      elf32_arm_plt_thumb_stub[0], ptr - 4);
-	      put_thumb_insn (htab, output_bfd,
-			      elf32_arm_plt_thumb_stub[1], ptr - 2);
-	    }
-
-	  if (!elf32_arm_use_long_plt_entry)
-	    {
-	      BFD_ASSERT ((got_displacement & 0xf0000000) == 0);
-
-	      put_arm_insn (htab, output_bfd,
-			    elf32_arm_plt_entry_short[0]
-			    | ((got_displacement & 0x0ff00000) >> 20),
-			    ptr + 0);
-	      put_arm_insn (htab, output_bfd,
-			    elf32_arm_plt_entry_short[1]
-			    | ((got_displacement & 0x000ff000) >> 12),
-			    ptr+ 4);
-	      put_arm_insn (htab, output_bfd,
-			    elf32_arm_plt_entry_short[2]
-			    | (got_displacement & 0x00000fff),
-			    ptr + 8);
-#ifdef FOUR_WORD_PLT
-	      bfd_put_32 (output_bfd, elf32_arm_plt_entry_short[3], ptr + 12);
-#endif
-	    }
-	  else
-	    {
-	      put_arm_insn (htab, output_bfd,
-			    elf32_arm_plt_entry_long[0]
-			    | ((got_displacement & 0xf0000000) >> 28),
-			    ptr + 0);
-	      put_arm_insn (htab, output_bfd,
-			    elf32_arm_plt_entry_long[1]
-			    | ((got_displacement & 0x0ff00000) >> 20),
-			    ptr + 4);
-	      put_arm_insn (htab, output_bfd,
-			    elf32_arm_plt_entry_long[2]
-			    | ((got_displacement & 0x000ff000) >> 12),
-			    ptr+ 8);
-	      put_arm_insn (htab, output_bfd,
-			    elf32_arm_plt_entry_long[3]
-			    | (got_displacement & 0x00000fff),
-			    ptr + 12);
-	    }
-	}
+    }
 
-      /* Fill in the entry in the .rel(a).(i)plt section.  */
-      rel.r_offset = got_address;
-      rel.r_addend = 0;
-      if (dynindx == -1)
+  /* Fill in the entry in the .rel(a).(i)plt section.  */
+  rel.r_offset = got_address;
+  rel.r_addend = 0;
+  if (dynindx == -1)
+    {
+      /* .igot.plt entries use IRELATIVE relocations against SYM_VALUE.
+	 The dynamic linker or static executable then calls SYM_VALUE
+	 to determine the correct run-time value of the .igot.plt entry.  */
+      rel.r_info = ELF32_R_INFO (0, R_ARM_IRELATIVE);
+      initial_got_entry = sym_value;
+    }
+  else
+    {
+      /* For FDPIC we will have to resolve a R_ARM_FUNCDESC_VALUE
+	 used by PLT entry.  */
+      if (htab->fdpic_p)
 	{
-	  /* .igot.plt entries use IRELATIVE relocations against SYM_VALUE.
-	     The dynamic linker or static executable then calls SYM_VALUE
-	     to determine the correct run-time value of the .igot.plt entry.  */
-	  rel.r_info = ELF32_R_INFO (0, R_ARM_IRELATIVE);
-	  initial_got_entry = sym_value;
+	  rel.r_info = ELF32_R_INFO (dynindx, R_ARM_FUNCDESC_VALUE);
+	  initial_got_entry = 0;
 	}
       else
 	{
-	  /* For FDPIC we will have to resolve a R_ARM_FUNCDESC_VALUE
-	     used by PLT entry.  */
-	  if (htab->fdpic_p)
-	    {
-	      rel.r_info = ELF32_R_INFO (dynindx, R_ARM_FUNCDESC_VALUE);
-	      initial_got_entry = 0;
-	    }
-	  else
-	    {
-	      rel.r_info = ELF32_R_INFO (dynindx, R_ARM_JUMP_SLOT);
-	      initial_got_entry = (splt->output_section->vma
-				   + splt->output_offset);
-	    }
+	  rel.r_info = ELF32_R_INFO (dynindx, R_ARM_JUMP_SLOT);
+	  initial_got_entry = (splt->output_section->vma
+			       + splt->output_offset);
+
+	  /* PR ld/16017
+	     When thumb only we need to set the LSB for any address that
+	     will be used with an interworking branch instruction.  */
+	  if (using_thumb_only (htab))
+	    initial_got_entry |= 1;
 	}
+    }
 
-      /* Fill in the entry in the global offset table.  */
-      bfd_put_32 (output_bfd, initial_got_entry,
+  /* Fill in the entry in the global offset table.  */
+  bfd_put_32 (output_bfd, initial_got_entry,
+	      sgot->contents + got_offset);
+
+  if (htab->fdpic_p && !(info->flags & DF_BIND_NOW))
+    {
+      /* Setup initial funcdesc value.  */
+      /* FIXME: we don't support lazy binding because there is a
+	 race condition between both words getting written and
+	 some other thread attempting to read them. The ARM
+	 architecture does not have an atomic 64 bit load/store
+	 instruction that could be used to prevent it; it is
+	 recommended that threaded FDPIC applications run with the
+	 LD_BIND_NOW environment variable set.  */
+      bfd_put_32 (output_bfd, plt_address + 0x18,
 		  sgot->contents + got_offset);
-
-      if (htab->fdpic_p && !(info->flags & DF_BIND_NOW))
-	{
-	  /* Setup initial funcdesc value.  */
-	  /* FIXME: we don't support lazy binding because there is a
-	     race condition between both words getting written and
-	     some other thread attempting to read them. The ARM
-	     architecture does not have an atomic 64 bit load/store
-	     instruction that could be used to prevent it; it is
-	     recommended that threaded FDPIC applications run with the
-	     LD_BIND_NOW environment variable set.  */
-	  bfd_put_32(output_bfd, plt_address + 0x18,
-		     sgot->contents + got_offset);
-	  bfd_put_32(output_bfd, -1 /*TODO*/,
-		     sgot->contents + got_offset + 4);
-	}
+      bfd_put_32 (output_bfd, -1 /*TODO*/,
+		  sgot->contents + got_offset + 4);
     }
 
   if (dynindx == -1)
@@ -10030,9 +9991,9 @@ elf32_arm_populate_plt_entry (bfd *outpu
 	     lazy binding otherwise we put them in .rel.plt.  For now,
 	     we don't support lazy binding so put it in .rel.got.  */
 	  if (info->flags & DF_BIND_NOW)
-	    elf32_arm_add_dynreloc(output_bfd, info, htab->root.srelgot, &rel);
+	    elf32_arm_add_dynreloc (output_bfd, info, htab->root.srelgot, &rel);
 	  else
-	    elf32_arm_add_dynreloc(output_bfd, info, htab->root.srelplt, &rel);
+	    elf32_arm_add_dynreloc (output_bfd, info, htab->root.srelplt, &rel);
 	}
       else
 	{
@@ -10041,7 +10002,7 @@ elf32_arm_populate_plt_entry (bfd *outpu
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Some relocations map to different relocations depending on the
@@ -10289,7 +10250,7 @@ calculate_group_reloc_mask (bfd_vma valu
 	  /* Determine the most significant bit in the residual and
 	     align the resulting value to a 2-bit boundary.  */
 	  for (msb = 30; msb >= 0; msb -= 2)
-	    if (residual & (3 << msb))
+	    if (residual & (3u << msb))
 	      break;
 
 	  /* The desired shift is now (msb - 6), or zero, whichever
@@ -10346,7 +10307,7 @@ elf32_arm_final_link_relocate (reloc_how
 			       unsigned char		    st_type,
 			       enum arm_st_branch_type	    branch_type,
 			       struct elf_link_hash_entry * h,
-			       bfd_boolean *		    unresolved_reloc_p,
+			       bool *			    unresolved_reloc_p,
 			       char **			    error_message)
 {
   unsigned long			r_type = howto->type;
@@ -10368,8 +10329,8 @@ elf32_arm_final_link_relocate (reloc_how
   struct arm_plt_info	       *arm_plt;
   bfd_vma			plt_offset;
   bfd_vma			gotplt_offset;
-  bfd_boolean			has_iplt_entry;
-  bfd_boolean			resolved_to_zero;
+  bool				has_iplt_entry;
+  bool				resolved_to_zero;
 
   globals = elf32_arm_hash_table (info);
   if (globals == NULL)
@@ -10403,16 +10364,22 @@ elf32_arm_final_link_relocate (reloc_how
 
   if (globals->use_rel)
     {
-      addend = bfd_get_32 (input_bfd, hit_data) & howto->src_mask;
+      bfd_vma sign;
 
-      if (addend & ((howto->src_mask + 1) >> 1))
+      switch (bfd_get_reloc_size (howto))
 	{
-	  signed_addend = -1;
-	  signed_addend &= ~ howto->src_mask;
-	  signed_addend |= addend;
-	}
-      else
-	signed_addend = addend;
+	case 1: addend = bfd_get_8 (input_bfd, hit_data); break;
+	case 2: addend = bfd_get_16 (input_bfd, hit_data); break;
+	case 4: addend = bfd_get_32 (input_bfd, hit_data); break;
+	default: addend = 0; break;
+	}
+      /* Note: the addend and signed_addend calculated here are
+	 incorrect for any split field.  */
+      addend &= howto->src_mask;
+      sign = howto->src_mask & ~(howto->src_mask >> 1);
+      signed_addend = (addend ^ sign) - sign;
+      signed_addend = (bfd_vma) signed_addend << howto->rightshift;
+      addend <<= howto->rightshift;
     }
   else
     addend = signed_addend = rel->r_addend;
@@ -10434,7 +10401,7 @@ elf32_arm_final_link_relocate (reloc_how
 
   /* Find out whether the symbol has a PLT.  Set ST_VALUE, BRANCH_TYPE and
      VALUE appropriately for relocations that we resolve at link time.  */
-  has_iplt_entry = FALSE;
+  has_iplt_entry = false;
   if (elf32_arm_get_plt_info (input_bfd, globals, eh, r_symndx, &root_plt,
 			      &arm_plt)
       && root_plt->offset != (bfd_vma) -1)
@@ -10444,7 +10411,7 @@ elf32_arm_final_link_relocate (reloc_how
 
       if (h == NULL || eh->is_iplt)
 	{
-	  has_iplt_entry = TRUE;
+	  has_iplt_entry = true;
 	  splt = globals->root.iplt;
 
 	  /* Populate .iplt entries here, because not all of them will
@@ -10495,11 +10462,11 @@ elf32_arm_final_link_relocate (reloc_how
     case R_ARM_NONE:
       /* We don't need to find a value for this symbol.  It's just a
 	 marker.  */
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       return bfd_reloc_ok;
 
     case R_ARM_ABS12:
-      if (!globals->vxworks_p)
+      if (globals->root.target_os != is_vxworks)
 	return elf32_arm_abs12_reloc (input_bfd, hit_data, value + addend);
       /* Fall through.  */
 
@@ -10534,7 +10501,7 @@ elf32_arm_final_link_relocate (reloc_how
 	  value = (splt->output_section->vma
 		   + splt->output_offset
 		   + plt_offset);
-	  *unresolved_reloc_p = FALSE;
+	  *unresolved_reloc_p = false;
 	  return _bfd_final_link_relocate (howto, input_bfd, input_section,
 					   contents, rel->r_offset, value,
 					   rel->r_addend);
@@ -10547,7 +10514,7 @@ elf32_arm_final_link_relocate (reloc_how
 	   || globals->root.is_relocatable_executable
 	   || globals->fdpic_p)
 	  && (input_section->flags & SEC_ALLOC)
-	  && !(globals->vxworks_p
+	  && !(globals->root.target_os == is_vxworks
 	       && strcmp (input_section->output_section->name,
 			  ".tls_vars") == 0)
 	  && ((r_type != R_ARM_REL32 && r_type != R_ARM_REL32_NOI)
@@ -10565,7 +10532,7 @@ elf32_arm_final_link_relocate (reloc_how
 	  && r_type != R_ARM_PLT32)
 	{
 	  Elf_Internal_Rela outrel;
-	  bfd_boolean skip, relocate;
+	  bool skip, relocate;
 	  int isrofixup = 0;
 
 	  if ((r_type == R_ARM_REL32 || r_type == R_ARM_REL32_NOI)
@@ -10583,7 +10550,7 @@ elf32_arm_final_link_relocate (reloc_how
 	      return bfd_reloc_notsupported;
 	    }
 
-	  *unresolved_reloc_p = FALSE;
+	  *unresolved_reloc_p = false;
 
 	  if (sreloc == NULL && globals->root.dynamic_sections_created)
 	    {
@@ -10594,17 +10561,17 @@ elf32_arm_final_link_relocate (reloc_how
 		return bfd_reloc_notsupported;
 	    }
 
-	  skip = FALSE;
-	  relocate = FALSE;
+	  skip = false;
+	  relocate = false;
 
 	  outrel.r_addend = addend;
 	  outrel.r_offset =
 	    _bfd_elf_section_offset (output_bfd, info, input_section,
 				     rel->r_offset);
 	  if (outrel.r_offset == (bfd_vma) -1)
-	    skip = TRUE;
+	    skip = true;
 	  else if (outrel.r_offset == (bfd_vma) -2)
-	    skip = TRUE, relocate = TRUE;
+	    skip = true, relocate = true;
 	  outrel.r_offset += (input_section->output_section->vma
 			      + input_section->output_offset);
 
@@ -10623,64 +10590,29 @@ elf32_arm_final_link_relocate (reloc_how
 
 	      /* This symbol is local, or marked to become local.  */
 	      BFD_ASSERT (r_type == R_ARM_ABS32 || r_type == R_ARM_ABS32_NOI
-			  || (globals->fdpic_p && !bfd_link_pic(info)));
-	      if (globals->symbian_p)
-		{
-		  asection *osec;
-
-		  /* On Symbian OS, the data segment and text segement
-		     can be relocated independently.  Therefore, we
-		     must indicate the segment to which this
-		     relocation is relative.  The BPABI allows us to
-		     use any symbol in the right segment; we just use
-		     the section symbol as it is convenient.  (We
-		     cannot use the symbol given by "h" directly as it
-		     will not appear in the dynamic symbol table.)
-
-		     Note that the dynamic linker ignores the section
-		     symbol value, so we don't subtract osec->vma
-		     from the emitted reloc addend.  */
-		  if (sym_sec)
-		    osec = sym_sec->output_section;
-		  else
-		    osec = input_section->output_section;
-		  symbol = elf_section_data (osec)->dynindx;
-		  if (symbol == 0)
-		    {
-		      struct elf_link_hash_table *htab = elf_hash_table (info);
-
-		      if ((osec->flags & SEC_READONLY) == 0
-			  && htab->data_index_section != NULL)
-			osec = htab->data_index_section;
-		      else
-			osec = htab->text_index_section;
-		      symbol = elf_section_data (osec)->dynindx;
-		    }
-		  BFD_ASSERT (symbol != 0);
-		}
-	      else
-		/* On SVR4-ish systems, the dynamic loader cannot
-		   relocate the text and data segments independently,
-		   so the symbol does not matter.  */
-		symbol = 0;
+			  || (globals->fdpic_p && !bfd_link_pic (info)));
+	      /* On SVR4-ish systems, the dynamic loader cannot
+		 relocate the text and data segments independently,
+		 so the symbol does not matter.  */
+	      symbol = 0;
 	      if (dynreloc_st_type == STT_GNU_IFUNC)
 		/* We have an STT_GNU_IFUNC symbol that doesn't resolve
 		   to the .iplt entry.  Instead, every non-call reference
 		   must use an R_ARM_IRELATIVE relocation to obtain the
 		   correct run-time address.  */
 		outrel.r_info = ELF32_R_INFO (symbol, R_ARM_IRELATIVE);
-	      else if (globals->fdpic_p && !bfd_link_pic(info))
+	      else if (globals->fdpic_p && !bfd_link_pic (info))
 		isrofixup = 1;
 	      else
 		outrel.r_info = ELF32_R_INFO (symbol, R_ARM_RELATIVE);
 	      if (globals->use_rel)
-		relocate = TRUE;
+		relocate = true;
 	      else
 		outrel.r_addend += dynreloc_value;
 	    }
 
 	  if (isrofixup)
-	    arm_elf_add_rofixup(output_bfd, globals->srofixup, outrel.r_offset);
+	    arm_elf_add_rofixup (output_bfd, globals->srofixup, outrel.r_offset);
 	  else
 	    elf32_arm_add_dynreloc (output_bfd, info, sreloc, &outrel);
 
@@ -10765,7 +10697,7 @@ elf32_arm_final_link_relocate (reloc_how
 			       + stub_entry->stub_sec->output_section->vma);
 
 		    if (plt_offset != (bfd_vma) -1)
-		      *unresolved_reloc_p = FALSE;
+		      *unresolved_reloc_p = false;
 		  }
 		}
 	      else
@@ -10777,7 +10709,7 @@ elf32_arm_final_link_relocate (reloc_how
 		      value = (splt->output_section->vma
 			       + splt->output_offset
 			       + plt_offset);
-		      *unresolved_reloc_p = FALSE;
+		      *unresolved_reloc_p = false;
 		      /* The PLT entry is in ARM mode, regardless of the
 			 target function.  */
 		      branch_type = ST_BRANCH_TO_ARM;
@@ -10807,11 +10739,7 @@ elf32_arm_final_link_relocate (reloc_how
 	  value -= (input_section->output_section->vma
 		    + input_section->output_offset);
 	  value -= rel->r_offset;
-	  if (globals->use_rel)
-	    value += (signed_addend << howto->size);
-	  else
-	    /* RELA addends do not have to be adjusted by howto->size.  */
-	    value += signed_addend;
+	  value += signed_addend;
 
 	  signed_addend = value;
 	  signed_addend >>= howto->rightshift;
@@ -10915,9 +10843,6 @@ elf32_arm_final_link_relocate (reloc_how
       return bfd_reloc_ok;
 
     case R_ARM_ABS8:
-      /* PR 16202: Refectch the addend using the correct size.  */
-      if (globals->use_rel)
-	addend = bfd_get_8 (input_bfd, hit_data);
       value += addend;
 
       /* There is no way to tell whether the user intended to use a signed or
@@ -10930,9 +10855,6 @@ elf32_arm_final_link_relocate (reloc_how
       return bfd_reloc_ok;
 
     case R_ARM_ABS16:
-      /* PR 16202: Refectch the addend using the correct size.  */
-      if (globals->use_rel)
-	addend = bfd_get_16 (input_bfd, hit_data);
       value += addend;
 
       /* See comment for R_ARM_ABS8.  */
@@ -11084,7 +11006,7 @@ elf32_arm_final_link_relocate (reloc_how
       {
 	bfd_vma relocation;
 	bfd_vma reloc_sign;
-	bfd_boolean overflow = FALSE;
+	bool overflow = false;
 	bfd_vma upper_insn = bfd_get_16 (input_bfd, hit_data);
 	bfd_vma lower_insn = bfd_get_16 (input_bfd, hit_data + 2);
 	bfd_signed_vma reloc_signed_max;
@@ -11211,7 +11133,7 @@ elf32_arm_final_link_relocate (reloc_how
 			     + stub_entry->stub_sec->output_section->vma);
 
 		    if (plt_offset != (bfd_vma) -1)
-		      *unresolved_reloc_p = FALSE;
+		      *unresolved_reloc_p = false;
 		  }
 
 		/* If this call becomes a call to Arm, force BLX.  */
@@ -11249,7 +11171,7 @@ elf32_arm_final_link_relocate (reloc_how
 		  value -= PLT_THUMB_STUB_SIZE;
 		branch_type = ST_BRANCH_TO_THUMB;
 	      }
-	    *unresolved_reloc_p = FALSE;
+	    *unresolved_reloc_p = false;
 	  }
 
 	relocation = value + signed_addend;
@@ -11278,7 +11200,7 @@ elf32_arm_final_link_relocate (reloc_how
 
 	/* Assumes two's complement.  */
 	if (signed_check > reloc_signed_max || signed_check < reloc_signed_min)
-	  overflow = TRUE;
+	  overflow = true;
 
 	if ((lower_insn & 0x5000) == 0x4000)
 	  /* For a BLX instruction, make sure that the relocation is rounded up
@@ -11311,7 +11233,7 @@ elf32_arm_final_link_relocate (reloc_how
       /* Thumb32 conditional branch instruction.  */
       {
 	bfd_vma relocation;
-	bfd_boolean overflow = FALSE;
+	bool overflow = false;
 	bfd_vma upper_insn = bfd_get_16 (input_bfd, hit_data);
 	bfd_vma lower_insn = bfd_get_16 (input_bfd, hit_data + 2);
 	bfd_signed_vma reloc_signed_max = 0xffffe;
@@ -11348,7 +11270,7 @@ elf32_arm_final_link_relocate (reloc_how
 		     + plt_offset);
 	    /* Target the Thumb stub before the ARM PLT entry.  */
 	    value -= PLT_THUMB_STUB_SIZE;
-	    *unresolved_reloc_p = FALSE;
+	    *unresolved_reloc_p = false;
 	  }
 
 	hash = (struct elf32_arm_link_hash_entry *)h;
@@ -11378,7 +11300,7 @@ elf32_arm_final_link_relocate (reloc_how
 	signed_check = (bfd_signed_vma) relocation;
 
 	if (signed_check > reloc_signed_max || signed_check < reloc_signed_min)
-	  overflow = TRUE;
+	  overflow = true;
 
 	/* Put RELOCATION back into the insn.  */
 	{
@@ -11411,25 +11333,12 @@ elf32_arm_final_link_relocate (reloc_how
 
 	/* CZB cannot jump backward.  */
 	if (r_type == R_ARM_THM_JUMP6)
-	  reloc_signed_min = 0;
-
-	if (globals->use_rel)
 	  {
-	    /* Need to refetch addend.  */
-	    addend = bfd_get_16 (input_bfd, hit_data) & howto->src_mask;
-	    if (addend & ((howto->src_mask + 1) >> 1))
-	      {
-		signed_addend = -1;
-		signed_addend &= ~ howto->src_mask;
-		signed_addend |= addend;
-	      }
-	    else
-	      signed_addend = addend;
-	    /* The value in the insn has been right shifted.  We need to
-	       undo this, so that we can perform the address calculation
-	       in terms of bytes.  */
-	    signed_addend <<= howto->rightshift;
+	    reloc_signed_min = 0;
+	    if (globals->use_rel)
+	      signed_addend = ((addend & 0x200) >> 3) | ((addend & 0xf8) >> 2);
 	  }
+
 	relocation = value + signed_addend;
 
 	relocation -= (input_section->output_section->vma
@@ -11515,7 +11424,7 @@ elf32_arm_final_link_relocate (reloc_how
       if (sgot == NULL)
 	return bfd_reloc_notsupported;
 
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       value = sgot->output_section->vma;
       return _bfd_final_link_relocate (howto, input_bfd, input_section,
 				       contents, rel->r_offset, value,
@@ -11553,7 +11462,7 @@ elf32_arm_final_link_relocate (reloc_how
 	      off &= ~1;
 	      if (globals->root.dynamic_sections_created
 		  && !SYMBOL_REFERENCES_LOCAL (info, h))
-		*unresolved_reloc_p = FALSE;
+		*unresolved_reloc_p = false;
 	    }
 	  else
 	    {
@@ -11570,7 +11479,7 @@ elf32_arm_final_link_relocate (reloc_how
 		  if (globals->root.dynamic_sections_created)
 		    {
 		      outrel.r_info = ELF32_R_INFO (h->dynindx, R_ARM_GLOB_DAT);
-		      *unresolved_reloc_p = FALSE;
+		      *unresolved_reloc_p = false;
 		    }
 		  else
 		    outrel.r_info = 0;
@@ -11581,8 +11490,7 @@ elf32_arm_final_link_relocate (reloc_how
 		  if (dynreloc_st_type == STT_GNU_IFUNC)
 		    outrel.r_info = ELF32_R_INFO (0, R_ARM_IRELATIVE);
 		  else if (bfd_link_pic (info)
-			   && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-			       || h->root.type != bfd_link_hash_undefweak))
+			   && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
 		    outrel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
 		  else
 		    {
@@ -11605,7 +11513,7 @@ elf32_arm_final_link_relocate (reloc_how
 
 	      if (isrofixup)
 		arm_elf_add_rofixup (output_bfd,
-				     elf32_arm_hash_table(info)->srofixup,
+				     elf32_arm_hash_table (info)->srofixup,
 				     sgot->output_section->vma
 				     + sgot->output_offset + off);
 
@@ -11732,9 +11640,9 @@ elf32_arm_final_link_relocate (reloc_how
 
 	if (r_type == R_ARM_TLS_LDM32_FDPIC)
 	  {
-	    bfd_put_32(output_bfd,
-		       globals->root.sgot->output_offset + off,
-		       contents + rel->r_offset);
+	    bfd_put_32 (output_bfd,
+			globals->root.sgot->output_offset + off,
+			contents + rel->r_offset);
 
 	    return bfd_reloc_ok;
 	  }
@@ -11768,7 +11676,7 @@ elf32_arm_final_link_relocate (reloc_how
 
 	if (h != NULL)
 	  {
-	    bfd_boolean dyn;
+	    bool dyn;
 	    dyn = globals->root.dynamic_sections_created;
 	    if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
 						 bfd_link_pic (info),
@@ -11776,7 +11684,7 @@ elf32_arm_final_link_relocate (reloc_how
 		&& (!bfd_link_pic (info)
 		    || !SYMBOL_REFERENCES_LOCAL (info, h)))
 	      {
-		*unresolved_reloc_p = FALSE;
+		*unresolved_reloc_p = false;
 		indx = h->dynindx;
 	      }
 	    off = h->got.offset;
@@ -11786,6 +11694,16 @@ elf32_arm_final_link_relocate (reloc_how
 	else
 	  {
 	    BFD_ASSERT (local_got_offsets != NULL);
+
+	    if (r_symndx >= elf32_arm_num_entries (input_bfd))
+	      {
+		_bfd_error_handler (_("\
+%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"),
+				    input_bfd,
+				    (unsigned long) elf32_arm_num_entries (input_bfd),
+				    r_symndx);
+		return false;
+	      }
 	    off = local_got_offsets[r_symndx];
 	    offplt = local_tlsdesc_gotents[r_symndx];
 	    tls_type = elf32_arm_local_got_tls_type (input_bfd)[r_symndx];
@@ -11793,7 +11711,7 @@ elf32_arm_final_link_relocate (reloc_how
 
 	/* Linker relaxations happens from one of the
 	   R_ARM_{GOTDESC,CALL,DESCSEQ} relocations to IE or LE.  */
-	if (ELF32_R_TYPE(rel->r_info) != r_type)
+	if (ELF32_R_TYPE (rel->r_info) != r_type)
 	  tls_type = GOT_TLS_IE;
 
 	BFD_ASSERT (tls_type != GOT_UNKNOWN);
@@ -11802,7 +11720,7 @@ elf32_arm_final_link_relocate (reloc_how
 	  off &= ~1;
 	else
 	  {
-	    bfd_boolean need_relocs = FALSE;
+	    bool need_relocs = false;
 	    Elf_Internal_Rela outrel;
 	    int cur_off = off;
 
@@ -11816,7 +11734,7 @@ elf32_arm_final_link_relocate (reloc_how
 			&& !resolved_to_zero)
 		    || h->root.type != bfd_link_hash_undefweak))
 	      {
-		need_relocs = TRUE;
+		need_relocs = true;
 		BFD_ASSERT (srelgot != NULL);
 	      }
 
@@ -11948,8 +11866,8 @@ elf32_arm_final_link_relocate (reloc_how
 	else if (tls_type & GOT_TLS_GDESC)
 	  off = offplt;
 
-	if (ELF32_R_TYPE(rel->r_info) == R_ARM_TLS_CALL
-	    || ELF32_R_TYPE(rel->r_info) == R_ARM_THM_TLS_CALL)
+	if (ELF32_R_TYPE (rel->r_info) == R_ARM_TLS_CALL
+	    || ELF32_R_TYPE (rel->r_info) == R_ARM_THM_TLS_CALL)
 	  {
 	    bfd_signed_vma offset;
 	    /* TLS stubs are arm mode.  The original symbol is a
@@ -11977,7 +11895,7 @@ elf32_arm_final_link_relocate (reloc_how
 			+ globals->root.splt->output_offset
 			+ globals->tls_trampoline);
 
-	    if (ELF32_R_TYPE(rel->r_info) == R_ARM_TLS_CALL)
+	    if (ELF32_R_TYPE (rel->r_info) == R_ARM_TLS_CALL)
 	      {
 		unsigned long inst;
 
@@ -12107,9 +12025,9 @@ elf32_arm_final_link_relocate (reloc_how
 	  {
 	    /* For FDPIC relocations, resolve to the offset of the GOT
 	       entry from the start of GOT.  */
-	    bfd_put_32(output_bfd,
-		       globals->root.sgot->output_offset + off,
-		       contents + rel->r_offset);
+	    bfd_put_32 (output_bfd,
+			globals->root.sgot->output_offset + off,
+			contents + rel->r_offset);
 
 	    return bfd_reloc_ok;
 	  }
@@ -12697,30 +12615,40 @@ elf32_arm_final_link_relocate (reloc_how
 	    bfd_put_16 (input_bfd, insn, hit_data);
 	}
 
-	*unresolved_reloc_p = FALSE;
+	*unresolved_reloc_p = false;
 	return bfd_reloc_ok;
 
     case R_ARM_GOTOFFFUNCDESC:
       {
 	if (h == NULL)
 	  {
-	    struct fdpic_local *local_fdpic_cnts = elf32_arm_local_fdpic_cnts(input_bfd);
+	    struct fdpic_local *local_fdpic_cnts = elf32_arm_local_fdpic_cnts (input_bfd);
 	    int dynindx = elf_section_data (sym_sec->output_section)->dynindx;
+
+	    if (r_symndx >= elf32_arm_num_entries (input_bfd))
+	      {
+		* error_message = _("local symbol index too big");
+		return bfd_reloc_dangerous;
+	      }
+
 	    int offset = local_fdpic_cnts[r_symndx].funcdesc_offset & ~1;
 	    bfd_vma addr = dynreloc_value - sym_sec->output_section->vma;
 	    bfd_vma seg = -1;
 
-	    if (bfd_link_pic(info) && dynindx == 0)
-	      abort();
+	    if (bfd_link_pic (info) && dynindx == 0)
+	      {
+		* error_message = _("no dynamic index information available");
+		return bfd_reloc_dangerous;
+	      }
 
 	    /* Resolve relocation.  */
-	    bfd_put_32(output_bfd, (offset + sgot->output_offset)
+	    bfd_put_32 (output_bfd, (offset + sgot->output_offset)
 		       , contents + rel->r_offset);
 	    /* Emit R_ARM_FUNCDESC_VALUE or two fixups on funcdesc if
 	       not done yet.  */
-	    arm_elf_fill_funcdesc(output_bfd, info,
-				  &local_fdpic_cnts[r_symndx].funcdesc_offset,
-				  dynindx, offset, addr, dynreloc_value, seg);
+	    arm_elf_fill_funcdesc (output_bfd, info,
+				   &local_fdpic_cnts[r_symndx].funcdesc_offset,
+				   dynindx, offset, addr, dynreloc_value, seg);
 	  }
 	else
 	  {
@@ -12741,24 +12669,30 @@ elf32_arm_final_link_relocate (reloc_how
 		addr = 0;
 	      }
 
-	    if (bfd_link_pic(info) && dynindx == 0)
-	      abort();
+	    if (bfd_link_pic (info) && dynindx == 0)
+	      {
+		* error_message = _("no dynamic index information available");
+		return bfd_reloc_dangerous;
+	      }
 
 	    /* This case cannot occur since funcdesc is allocated by
 	       the dynamic loader so we cannot resolve the relocation.  */
 	    if (h->dynindx != -1)
-	      abort();
+	      {
+		* error_message = _("invalid dynamic index");
+		return bfd_reloc_dangerous;
+	      }
 
 	    /* Resolve relocation.  */
-	    bfd_put_32(output_bfd, (offset + sgot->output_offset),
-		       contents + rel->r_offset);
+	    bfd_put_32 (output_bfd, (offset + sgot->output_offset),
+		        contents + rel->r_offset);
 	    /* Emit R_ARM_FUNCDESC_VALUE on funcdesc if not done yet.  */
-	    arm_elf_fill_funcdesc(output_bfd, info,
-				  &eh->fdpic_cnts.funcdesc_offset,
-				  dynindx, offset, addr, dynreloc_value, seg);
+	    arm_elf_fill_funcdesc (output_bfd, info,
+				   &eh->fdpic_cnts.funcdesc_offset,
+				   dynindx, offset, addr, dynreloc_value, seg);
 	  }
       }
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       return bfd_reloc_ok;
 
     case R_ARM_GOTFUNCDESC:
@@ -12768,11 +12702,11 @@ elf32_arm_final_link_relocate (reloc_how
 	    Elf_Internal_Rela outrel;
 
 	    /* Resolve relocation.  */
-	    bfd_put_32(output_bfd, ((eh->fdpic_cnts.gotfuncdesc_offset & ~1)
-				    + sgot->output_offset),
-		       contents + rel->r_offset);
+	    bfd_put_32 (output_bfd, ((eh->fdpic_cnts.gotfuncdesc_offset & ~1)
+				     + sgot->output_offset),
+			contents + rel->r_offset);
 	    /* Add funcdesc and associated R_ARM_FUNCDESC_VALUE.  */
-	    if(h->dynindx == -1)
+	    if (h->dynindx == -1)
 	      {
 		int dynindx;
 		int offset = eh->fdpic_cnts.funcdesc_offset & ~1;
@@ -12792,9 +12726,9 @@ elf32_arm_final_link_relocate (reloc_how
 		  }
 
 		/* Emit R_ARM_FUNCDESC_VALUE on funcdesc if not done yet.  */
-		arm_elf_fill_funcdesc(output_bfd, info,
-				      &eh->fdpic_cnts.funcdesc_offset,
-				      dynindx, offset, addr, dynreloc_value, seg);
+		arm_elf_fill_funcdesc (output_bfd, info,
+				       &eh->fdpic_cnts.funcdesc_offset,
+				       dynindx, offset, addr, dynreloc_value, seg);
 	      }
 
 	    /* Add a dynamic relocation on GOT entry if not already done.  */
@@ -12804,14 +12738,14 @@ elf32_arm_final_link_relocate (reloc_how
 		  {
 		    outrel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
 		    if (h->root.type == bfd_link_hash_undefweak)
-		      bfd_put_32(output_bfd, 0, sgot->contents
-				 + (eh->fdpic_cnts.gotfuncdesc_offset & ~1));
+		      bfd_put_32 (output_bfd, 0, sgot->contents
+				  + (eh->fdpic_cnts.gotfuncdesc_offset & ~1));
 		    else
-		      bfd_put_32(output_bfd, sgot->output_section->vma
-				 + sgot->output_offset
-				 + (eh->fdpic_cnts.funcdesc_offset & ~1),
-				 sgot->contents
-				 + (eh->fdpic_cnts.gotfuncdesc_offset & ~1));
+		      bfd_put_32 (output_bfd, sgot->output_section->vma
+				  + sgot->output_offset
+				  + (eh->fdpic_cnts.funcdesc_offset & ~1),
+				  sgot->contents
+				  + (eh->fdpic_cnts.gotfuncdesc_offset & ~1));
 		  }
 		else
 		  {
@@ -12821,12 +12755,12 @@ elf32_arm_final_link_relocate (reloc_how
 		  + sgot->output_offset
 		  + (eh->fdpic_cnts.gotfuncdesc_offset & ~1);
 		outrel.r_addend = 0;
-		if (h->dynindx == -1 && !bfd_link_pic(info))
+		if (h->dynindx == -1 && !bfd_link_pic (info))
 		  if (h->root.type == bfd_link_hash_undefweak)
-		    arm_elf_add_rofixup(output_bfd, globals->srofixup, -1);
+		    arm_elf_add_rofixup (output_bfd, globals->srofixup, -1);
 		  else
-		    arm_elf_add_rofixup(output_bfd, globals->srofixup,
-					outrel.r_offset);
+		    arm_elf_add_rofixup (output_bfd, globals->srofixup,
+					 outrel.r_offset);
 		else
 		  elf32_arm_add_dynreloc (output_bfd, info, srelgot, &outrel);
 		eh->fdpic_cnts.gotfuncdesc_offset |= 1;
@@ -12836,25 +12770,35 @@ elf32_arm_final_link_relocate (reloc_how
 	  {
 	    /* Such relocation on static function should not have been
 	       emitted by the compiler.  */
-	    abort();
+	    return bfd_reloc_notsupported;
 	  }
       }
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       return bfd_reloc_ok;
 
     case R_ARM_FUNCDESC:
       {
 	if (h == NULL)
 	  {
-	    struct fdpic_local *local_fdpic_cnts = elf32_arm_local_fdpic_cnts(input_bfd);
+	    struct fdpic_local *local_fdpic_cnts = elf32_arm_local_fdpic_cnts (input_bfd);
 	    Elf_Internal_Rela outrel;
 	    int dynindx = elf_section_data (sym_sec->output_section)->dynindx;
+
+	    if (r_symndx >= elf32_arm_num_entries (input_bfd))
+	      {
+		* error_message = _("local symbol index too big");
+		return bfd_reloc_dangerous;
+	      }
+
 	    int offset = local_fdpic_cnts[r_symndx].funcdesc_offset & ~1;
 	    bfd_vma addr = dynreloc_value - sym_sec->output_section->vma;
 	    bfd_vma seg = -1;
 
-	    if (bfd_link_pic(info) && dynindx == 0)
-	      abort();
+	    if (bfd_link_pic (info) && dynindx == 0)
+	      {
+		* error_message = _("dynamic index information not available");
+		return bfd_reloc_dangerous;
+	      }
 
 	    /* Replace static FUNCDESC relocation with a
 	       R_ARM_RELATIVE dynamic relocation or with a rofixup for
@@ -12863,18 +12807,18 @@ elf32_arm_final_link_relocate (reloc_how
 	    outrel.r_offset = input_section->output_section->vma
 	      + input_section->output_offset + rel->r_offset;
 	    outrel.r_addend = 0;
-	    if (bfd_link_pic(info))
+	    if (bfd_link_pic (info))
 	      elf32_arm_add_dynreloc (output_bfd, info, srelgot, &outrel);
 	    else
-	      arm_elf_add_rofixup(output_bfd, globals->srofixup, outrel.r_offset);
+	      arm_elf_add_rofixup (output_bfd, globals->srofixup, outrel.r_offset);
 
 	    bfd_put_32 (input_bfd, sgot->output_section->vma
 			+ sgot->output_offset + offset, hit_data);
 
 	    /* Emit R_ARM_FUNCDESC_VALUE on funcdesc if not done yet.  */
-	    arm_elf_fill_funcdesc(output_bfd, info,
-				  &local_fdpic_cnts[r_symndx].funcdesc_offset,
-				  dynindx, offset, addr, dynreloc_value, seg);
+	    arm_elf_fill_funcdesc (output_bfd, info,
+				   &local_fdpic_cnts[r_symndx].funcdesc_offset,
+				   dynindx, offset, addr, dynreloc_value, seg);
 	  }
 	else
 	  {
@@ -12898,8 +12842,8 @@ elf32_arm_final_link_relocate (reloc_how
 		    addr = 0;
 		  }
 
-		if (bfd_link_pic(info) && dynindx == 0)
-		  abort();
+		if (bfd_link_pic (info) && dynindx == 0)
+		  abort ();
 
 		/* Replace static FUNCDESC relocation with a
 		   R_ARM_RELATIVE dynamic relocation.  */
@@ -12907,18 +12851,18 @@ elf32_arm_final_link_relocate (reloc_how
 		outrel.r_offset = input_section->output_section->vma
 		  + input_section->output_offset + rel->r_offset;
 		outrel.r_addend = 0;
-		if (bfd_link_pic(info))
+		if (bfd_link_pic (info))
 		  elf32_arm_add_dynreloc (output_bfd, info, srelgot, &outrel);
 		else
-		  arm_elf_add_rofixup(output_bfd, globals->srofixup, outrel.r_offset);
+		  arm_elf_add_rofixup (output_bfd, globals->srofixup, outrel.r_offset);
 
 		bfd_put_32 (input_bfd, sgot->output_section->vma
 			    + sgot->output_offset + offset, hit_data);
 
 		/* Emit R_ARM_FUNCDESC_VALUE on funcdesc if not done yet.  */
-		arm_elf_fill_funcdesc(output_bfd, info,
-				      &eh->fdpic_cnts.funcdesc_offset,
-				      dynindx, offset, addr, dynreloc_value, seg);
+		arm_elf_fill_funcdesc (output_bfd, info,
+				       &eh->fdpic_cnts.funcdesc_offset,
+				       dynindx, offset, addr, dynreloc_value, seg);
 	      }
 	    else
 	      {
@@ -12933,7 +12877,7 @@ elf32_arm_final_link_relocate (reloc_how
 	      }
 	  }
       }
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       return bfd_reloc_ok;
 
     case R_ARM_THM_BF16:
@@ -13124,7 +13068,7 @@ arm_add_to_rel (bfd *		   abfd,
 	case R_ARM_PLT32:
 	case R_ARM_CALL:
 	case R_ARM_JUMP24:
-	  addend <<= howto->size;
+	  addend *= bfd_get_reloc_size (howto);
 	  addend += increment;
 
 	  /* Should we check for overflow here ?  */
@@ -13164,7 +13108,7 @@ arm_add_to_rel (bfd *		   abfd,
 
 /* Relocate an ARM ELF section.  */
 
-static bfd_boolean
+static int
 elf32_arm_relocate_section (bfd *		   output_bfd,
 			    struct bfd_link_info * info,
 			    bfd *		   input_bfd,
@@ -13183,7 +13127,7 @@ elf32_arm_relocate_section (bfd *		   ou
 
   globals = elf32_arm_hash_table (info);
   if (globals == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = & elf_symtab_hdr (input_bfd);
   sym_hashes = elf_sym_hashes (input_bfd);
@@ -13202,7 +13146,7 @@ elf32_arm_relocate_section (bfd *		   ou
       bfd_reloc_status_type	   r;
       arelent			   bfd_reloc;
       char			   sym_type;
-      bfd_boolean		   unresolved_reloc = FALSE;
+      bool			   unresolved_reloc = false;
       char *error_message = NULL;
 
       r_symndx = ELF32_R_SYM (rel->r_info);
@@ -13243,7 +13187,7 @@ elf32_arm_relocate_section (bfd *		   ou
 	      (info, bfd_elf_string_from_elf_section
 	       (input_bfd, symtab_hdr->sh_link, sym->st_name),
 	       input_bfd, input_section,
-	       rel->r_offset, TRUE);
+	       rel->r_offset, true);
 
 	  if (globals->use_rel)
 	    {
@@ -13287,7 +13231,7 @@ elf32_arm_relocate_section (bfd *		   ou
 			       "%s relocation against SEC_MERGE section"),
 			     input_bfd, input_section,
 			     (uint64_t) rel->r_offset, howto->name);
-			  return FALSE;
+			  return false;
 			}
 
 		      value = bfd_get_32 (input_bfd, contents + rel->r_offset);
@@ -13345,7 +13289,7 @@ elf32_arm_relocate_section (bfd *		   ou
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -13458,7 +13402,7 @@ elf32_arm_relocate_section (bfd *		   ou
 	     (uint64_t) rel->r_offset,
 	     howto->name,
 	     h->root.root.string);
-	  return FALSE;
+	  return false;
 	}
 
       if (r != bfd_reloc_ok)
@@ -13477,7 +13421,7 @@ elf32_arm_relocate_section (bfd *		   ou
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -13505,7 +13449,7 @@ elf32_arm_relocate_section (bfd *		   ou
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Add a new unwind edit to the list described by HEAD, TAIL.  If TINDEX is zero,
@@ -13553,8 +13497,9 @@ add_unwind_table_edit (arm_unwind_table_
 static _arm_elf_section_data *get_arm_elf_section_data (asection *);
 
 /* Increase the size of EXIDX_SEC by ADJUST bytes.  ADJUST mau be negative.  */
+
 static void
-adjust_exidx_size(asection *exidx_sec, int adjust)
+adjust_exidx_size (asection *exidx_sec, int adjust)
 {
   asection *out_sec;
 
@@ -13564,24 +13509,25 @@ adjust_exidx_size(asection *exidx_sec, i
   bfd_set_section_size (exidx_sec, exidx_sec->size + adjust);
   out_sec = exidx_sec->output_section;
   /* Adjust size of output section.  */
-  bfd_set_section_size (out_sec, out_sec->size +adjust);
+  bfd_set_section_size (out_sec, out_sec->size + adjust);
 }
 
 /* Insert an EXIDX_CANTUNWIND marker at the end of a section.  */
+
 static void
-insert_cantunwind_after(asection *text_sec, asection *exidx_sec)
+insert_cantunwind_after (asection *text_sec, asection *exidx_sec)
 {
   struct _arm_elf_section_data *exidx_arm_data;
 
   exidx_arm_data = get_arm_elf_section_data (exidx_sec);
-  add_unwind_table_edit (
-    &exidx_arm_data->u.exidx.unwind_edit_list,
-    &exidx_arm_data->u.exidx.unwind_edit_tail,
-    INSERT_EXIDX_CANTUNWIND_AT_END, text_sec, UINT_MAX);
+  add_unwind_table_edit
+    (&exidx_arm_data->u.exidx.unwind_edit_list,
+     &exidx_arm_data->u.exidx.unwind_edit_tail,
+     INSERT_EXIDX_CANTUNWIND_AT_END, text_sec, UINT_MAX);
 
   exidx_arm_data->additional_reloc_count++;
 
-  adjust_exidx_size(exidx_sec, 8);
+  adjust_exidx_size (exidx_sec, 8);
 }
 
 /* Scan .ARM.exidx tables, and create a list describing edits which should be
@@ -13596,11 +13542,11 @@ insert_cantunwind_after(asection *text_s
    The edits are applied when the tables are written
    (in elf32_arm_write_section).  */
 
-bfd_boolean
+bool
 elf32_arm_fix_exidx_coverage (asection **text_section_order,
 			      unsigned int num_text_sections,
 			      struct bfd_link_info *info,
-			      bfd_boolean merge_exidx_entries)
+			      bool merge_exidx_entries)
 {
   bfd *inp;
   unsigned int last_second_word = 0, i;
@@ -13671,7 +13617,7 @@ elf32_arm_fix_exidx_coverage (asection *
 	  if (sec->size == 0)
 	    continue;
 
-	  insert_cantunwind_after(last_text_sec, last_exidx_sec);
+	  insert_cantunwind_after (last_text_sec, last_exidx_sec);
 	  last_unwind_type = 0;
 	  continue;
 	}
@@ -13755,7 +13701,7 @@ elf32_arm_fix_exidx_coverage (asection *
       exidx_arm_data->u.exidx.unwind_edit_tail = unwind_edit_tail;
 
       if (deleted_exidx_bytes > 0)
-	adjust_exidx_size(exidx_sec, -deleted_exidx_bytes);
+	adjust_exidx_size (exidx_sec, - deleted_exidx_bytes);
 
       last_exidx_sec = exidx_sec;
       last_text_sec = sec;
@@ -13764,12 +13710,12 @@ elf32_arm_fix_exidx_coverage (asection *
   /* Add terminating CANTUNWIND entry.  */
   if (!bfd_link_relocatable (info) && last_exidx_sec
       && last_unwind_type != 0)
-    insert_cantunwind_after(last_text_sec, last_exidx_sec);
+    insert_cantunwind_after (last_text_sec, last_exidx_sec);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_arm_output_glue_section (struct bfd_link_info *info, bfd *obfd,
 			       bfd *ibfd, const char *name)
 {
@@ -13777,31 +13723,31 @@ elf32_arm_output_glue_section (struct bf
 
   sec = bfd_get_linker_section (ibfd, name);
   if (sec == NULL || (sec->flags & SEC_EXCLUDE) != 0)
-    return TRUE;
+    return true;
 
   osec = sec->output_section;
   if (elf32_arm_write_section (obfd, info, sec, sec->contents))
-    return TRUE;
+    return true;
 
   if (! bfd_set_section_contents (obfd, osec, sec->contents,
 				  sec->output_offset, sec->size))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_arm_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (info);
   asection *sec, *osec;
 
   if (globals == NULL)
-    return FALSE;
+    return false;
 
   /* Invoke the regular ELF backend linker to do all the work.  */
   if (!bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
   /* Process stub sections (eg BE8 encoding, ...).  */
   struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info);
@@ -13816,7 +13762,7 @@ elf32_arm_final_link (bfd *abfd, struct
 	  elf32_arm_write_section (abfd, info, sec, sec->contents);
 	  if (! bfd_set_section_contents (abfd, osec, sec->contents,
 					  sec->output_offset, sec->size))
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -13827,30 +13773,30 @@ elf32_arm_final_link (bfd *abfd, struct
       if (! elf32_arm_output_glue_section (info, abfd,
 					   globals->bfd_of_glue_owner,
 					   ARM2THUMB_GLUE_SECTION_NAME))
-	return FALSE;
+	return false;
 
       if (! elf32_arm_output_glue_section (info, abfd,
 					   globals->bfd_of_glue_owner,
 					   THUMB2ARM_GLUE_SECTION_NAME))
-	return FALSE;
+	return false;
 
       if (! elf32_arm_output_glue_section (info, abfd,
 					   globals->bfd_of_glue_owner,
 					   VFP11_ERRATUM_VENEER_SECTION_NAME))
-	return FALSE;
+	return false;
 
       if (! elf32_arm_output_glue_section (info, abfd,
 					   globals->bfd_of_glue_owner,
 					   STM32L4XX_ERRATUM_VENEER_SECTION_NAME))
-	return FALSE;
+	return false;
 
       if (! elf32_arm_output_glue_section (info, abfd,
 					   globals->bfd_of_glue_owner,
 					   ARM_BX_GLUE_SECTION_NAME))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return a best guess for the machine number based on the attributes.  */
@@ -13928,6 +13874,8 @@ bfd_arm_get_mach_from_attributes (bfd *
 	return bfd_mach_arm_8M_MAIN;
     case TAG_CPU_ARCH_V8_1M_MAIN:
 	return bfd_mach_arm_8_1M_MAIN;
+    case TAG_CPU_ARCH_V9:
+	return bfd_mach_arm_9;
 
     default:
       /* Force entry to be added for any new known Tag_CPU_arch value.  */
@@ -13940,7 +13888,7 @@ bfd_arm_get_mach_from_attributes (bfd *
 
 /* Set the right machine number.  */
 
-static bfd_boolean
+static bool
 elf32_arm_object_p (bfd *abfd)
 {
   unsigned int mach;
@@ -13956,12 +13904,12 @@ elf32_arm_object_p (bfd *abfd)
     }
 
   bfd_default_set_arch_mach (abfd, bfd_arch_arm, mach);
-  return TRUE;
+  return true;
 }
 
 /* Function to keep ARM specific flags in the ELF header.  */
 
-static bfd_boolean
+static bool
 elf32_arm_set_private_flags (bfd *abfd, flagword flags)
 {
   if (elf_flags_init (abfd)
@@ -13982,22 +13930,22 @@ elf32_arm_set_private_flags (bfd *abfd,
   else
     {
       elf_elfheader (abfd)->e_flags = flags;
-      elf_flags_init (abfd) = TRUE;
+      elf_flags_init (abfd) = true;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy backend specific data from one object module to another.  */
 
-static bfd_boolean
+static bool
 elf32_arm_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   flagword in_flags;
   flagword out_flags;
 
   if (! is_arm_elf (ibfd) || ! is_arm_elf (obfd))
-    return TRUE;
+    return true;
 
   in_flags  = elf_elfheader (ibfd)->e_flags;
   out_flags = elf_elfheader (obfd)->e_flags;
@@ -14008,11 +13956,11 @@ elf32_arm_copy_private_bfd_data (bfd *ib
     {
       /* Cannot mix APCS26 and APCS32 code.  */
       if ((in_flags & EF_ARM_APCS_26) != (out_flags & EF_ARM_APCS_26))
-	return FALSE;
+	return false;
 
       /* Cannot mix float APCS and non-float APCS code.  */
       if ((in_flags & EF_ARM_APCS_FLOAT) != (out_flags & EF_ARM_APCS_FLOAT))
-	return FALSE;
+	return false;
 
       /* If the src and dest have different interworking flags
 	 then turn off the interworking bit.  */
@@ -14032,7 +13980,7 @@ elf32_arm_copy_private_bfd_data (bfd *ib
     }
 
   elf_elfheader (obfd)->e_flags = in_flags;
-  elf_flags_init (obfd) = TRUE;
+  elf_flags_init (obfd) = true;
 
   return _bfd_elf_copy_private_bfd_data (ibfd, obfd);
 }
@@ -14101,7 +14049,7 @@ elf32_arm_obj_attrs_order (int num)
 }
 
 /* Attribute numbers >=64 (mod 128) can be safely ignored.  */
-static bfd_boolean
+static bool
 elf32_arm_obj_attrs_handle_unknown (bfd *abfd, int tag)
 {
   if ((tag & 127) < 64)
@@ -14110,14 +14058,14 @@ elf32_arm_obj_attrs_handle_unknown (bfd
 	(_("%pB: unknown mandatory EABI object attribute %d"),
 	 abfd, tag);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   else
     {
       _bfd_error_handler
 	(_("warning: %pB: unknown EABI object attribute %d"),
 	 abfd, tag);
-      return TRUE;
+      return true;
     }
 }
 
@@ -14171,7 +14119,7 @@ set_secondary_compatible_arch (bfd *abfd
 
 static int
 tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
-		      int newtag, int secondary_compat)
+		      int newtag, int secondary_compat, const char* name_table[])
 {
 #define T(X) TAG_CPU_ARCH_##X
   int tagl, tagh, result;
@@ -14278,7 +14226,14 @@ tag_cpu_arch_combine (bfd *ibfd, int old
       T(V8),		/* V6_M.  */
       T(V8),		/* V6S_M.  */
       T(V8),		/* V7E_M.  */
-      T(V8)		/* V8.  */
+      T(V8),		/* V8.  */
+      T(V8),		/* V8-R.  */
+      T(V8),		/* V8-M.BASE.  */
+      T(V8),		/* V8-M.MAIN.  */
+      T(V8),		/* V8.1.  */
+      T(V8),		/* V8.2.  */
+      T(V8),		/* V8.3.  */
+      T(V8),		/* V8.1-M.MAIN.  */
     };
   const int v8r[] =
     {
@@ -14365,6 +14320,32 @@ tag_cpu_arch_combine (bfd *ibfd, int old
       -1,		/* Unused (20).  */
       T(V8_1M_MAIN)	/* V8.1-M MAINLINE.  */
     };
+  const int v9[] =
+    {
+      T(V9),		/* PRE_V4.  */
+      T(V9),		/* V4.  */
+      T(V9),		/* V4T.  */
+      T(V9),		/* V5T.  */
+      T(V9),		/* V5TE.  */
+      T(V9),		/* V5TEJ.  */
+      T(V9),		/* V6.  */
+      T(V9),		/* V6KZ.  */
+      T(V9),		/* V6T2.  */
+      T(V9),		/* V6K.  */
+      T(V9),		/* V7.  */
+      T(V9),		/* V6_M.  */
+      T(V9),		/* V6S_M.  */
+      T(V9),		/* V7E_M.  */
+      T(V9),		/* V8.  */
+      T(V9),		/* V8-R.  */
+      T(V9),		/* V8-M.BASE.  */
+      T(V9),		/* V8-M.MAIN.  */
+      T(V9),		/* V8.1.  */
+      T(V9),		/* V8.2.  */
+      T(V9),		/* V8.3.  */
+      T(V9),		/* V8.1-M.MAIN.  */
+      T(V9),		/* V9.  */
+     };
   const int v4t_plus_v6_m[] =
     {
       -1,		/* PRE_V4.  */
@@ -14389,6 +14370,7 @@ tag_cpu_arch_combine (bfd *ibfd, int old
       -1,		/* Unused (19).  */
       -1,		/* Unused (20).  */
       T(V8_1M_MAIN),	/* V8.1-M MAINLINE.  */
+      T(V9),		/* V9.  */
       T(V4T_PLUS_V6_M)	/* V4T plus V6_M.  */
     };
   const int *comb[] =
@@ -14407,6 +14389,7 @@ tag_cpu_arch_combine (bfd *ibfd, int old
       NULL,
       NULL,
       v8_1m_mainline,
+      v9,
       /* Pseudo-architecture.  */
       v4t_plus_v6_m
     };
@@ -14453,8 +14436,8 @@ tag_cpu_arch_combine (bfd *ibfd, int old
 
   if (result == -1)
     {
-      _bfd_error_handler (_("error: %pB: conflicting CPU architectures %d/%d"),
-			  ibfd, oldtag, newtag);
+      _bfd_error_handler (_("error: conflicting CPU architectures %s vs %s in %pB"),
+			  name_table[oldtag], name_table[newtag], ibfd);
       return -1;
     }
 
@@ -14464,7 +14447,7 @@ tag_cpu_arch_combine (bfd *ibfd, int old
 
 /* Query attributes object to see if integer divide instructions may be
    present in an object.  */
-static bfd_boolean
+static bool
 elf32_arm_attributes_accept_div (const obj_attribute *attr)
 {
   int arch = attr[Tag_CPU_arch].i;
@@ -14475,28 +14458,28 @@ elf32_arm_attributes_accept_div (const o
     case 0:
       /* Integer divide allowed if instruction contained in archetecture.  */
       if (arch == TAG_CPU_ARCH_V7 && (profile == 'R' || profile == 'M'))
-	return TRUE;
+	return true;
       else if (arch >= TAG_CPU_ARCH_V7E_M)
-	return TRUE;
+	return true;
       else
-	return FALSE;
+	return false;
 
     case 1:
       /* Integer divide explicitly prohibited.  */
-      return FALSE;
+      return false;
 
     default:
       /* Unrecognised case - treat as allowing divide everywhere.  */
     case 2:
       /* Integer divide allowed in ARM state.  */
-      return TRUE;
+      return true;
     }
 }
 
 /* Query attributes object to see if integer divide instructions are
    forbidden to be in the object.  This is not the inverse of
    elf32_arm_attributes_accept_div.  */
-static bfd_boolean
+static bool
 elf32_arm_attributes_forbid_div (const obj_attribute *attr)
 {
   return attr[Tag_DIV_use].i == 1;
@@ -14505,7 +14488,7 @@ elf32_arm_attributes_forbid_div (const o
 /* Merge EABI object attributes from IBFD into OBFD.  Raise an error if there
    are conflicting attributes.  */
 
-static bfd_boolean
+static bool
 elf32_arm_merge_eabi_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -14515,20 +14498,20 @@ elf32_arm_merge_eabi_attributes (bfd *ib
      2 = weak requirement.  */
   static const int order_021[3] = {0, 2, 1};
   int i;
-  bfd_boolean result = TRUE;
+  bool result = true;
   const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
 
   /* Skip the linker stubs file.  This preserves previous behavior
      of accepting unknown attributes in the first input file - but
      is that a bug?  */
   if (ibfd->flags & BFD_LINKER_CREATED)
-    return TRUE;
+    return true;
 
   /* Skip any input that hasn't attribute section.
      This enables to link object files without attribute section with
      any others.  */
   if (bfd_get_section_by_name (ibfd, sec_name) == NULL)
-    return TRUE;
+    return true;
 
   if (!elf_known_obj_attributes_proc (obfd)[0].i)
     {
@@ -14552,7 +14535,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 	      _bfd_error_handler
 		(_("Error: %pB has both the current and legacy "
 		   "Tag_MPextension_use attributes"), ibfd);
-	      result = FALSE;
+	      result = false;
 	    }
 
 	  out_attr[Tag_MPextension_use] =
@@ -14561,6 +14544,14 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 	  out_attr[Tag_MPextension_use_legacy].i = 0;
 	}
 
+      /* PR 28859 and 28848:  Handle the case where the first input file,
+	 eg crti.o, has a Tag_ABI_HardFP_use of 3 but no Tag_FP_arch set.
+	 Using Tag_ABI_HardFP_use in this way is deprecated, so reset the
+	 attribute to zero.
+	 FIXME: Should we handle other non-zero values of Tag_ABI_HardFO_use ? */
+      if (out_attr[Tag_ABI_HardFP_use].i == 3 && out_attr[Tag_FP_arch].i == 0)
+	out_attr[Tag_ABI_HardFP_use].i = 0;
+
       return result;
     }
 
@@ -14582,7 +14573,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 	    (_("error: %pB uses VFP register arguments, %pB does not"),
 	     in_attr[Tag_ABI_VFP_args].i ? ibfd : obfd,
 	     in_attr[Tag_ABI_VFP_args].i ? obfd : ibfd);
-	  result = FALSE;
+	  result = false;
 	}
     }
 
@@ -14623,10 +14614,16 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 		"ARM v7",
 		"ARM v6-M",
 		"ARM v6S-M",
+		"ARM v7E-M",
 		"ARM v8",
-		"",
+		"ARM v8-R",
 		"ARM v8-M.baseline",
 		"ARM v8-M.mainline",
+		"ARM v8.1-A",
+		"ARM v8.2-A",
+		"ARM v8.3-A",
+		"ARM v8.1-M.mainline",
+		"ARM v9",
 	    };
 
 	    /* Merge Tag_CPU_arch and Tag_also_compatible_with.  */
@@ -14635,11 +14632,12 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 	    arch_attr = tag_cpu_arch_combine (ibfd, out_attr[i].i,
 					      &secondary_compat_out,
 					      in_attr[i].i,
-					      secondary_compat);
+					      secondary_compat,
+					      name_table);
 
 	    /* Return with error if failed to merge.  */
 	    if (arch_attr == -1)
-	      return FALSE;
+	      return false;
 
 	    out_attr[i].i = arch_attr;
 
@@ -14688,6 +14686,10 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 	case Tag_T2EE_use:
 	case Tag_MPextension_use:
 	case Tag_MVE_arch:
+	case Tag_PAC_extension:
+	case Tag_BTI_extension:
+	case Tag_BTI_use:
+	case Tag_PACRET_use:
 	  /* Use the largest value specified.  */
 	  if (in_attr[i].i > out_attr[i].i)
 	    out_attr[i].i = in_attr[i].i;
@@ -14711,7 +14713,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 	      _bfd_error_handler
 		(_("error: %pB: 8-byte data alignment conflicts with %pB"),
 		 obfd, ibfd);
-	      result = FALSE; */
+	      result = false; */
 	    }
 	  /* Fall through.  */
 	case Tag_ABI_FP_denormal:
@@ -14741,7 +14743,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 		    (_("error: %pB: unable to merge virtualization attributes "
 		       "with %pB"),
 		     obfd, ibfd);
-		  result = FALSE;
+		  result = false;
 		}
 	    }
 	  break;
@@ -14768,7 +14770,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 		     ibfd,
 		     in_attr[i].i ? in_attr[i].i : '0',
 		     out_attr[i].i ? out_attr[i].i : '0');
-		  result = FALSE;
+		  result = false;
 		}
 	    }
 	  break;
@@ -14913,7 +14915,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 	    {
 	      _bfd_error_handler
 		(_("error: %pB: conflicting use of R9"), ibfd);
-	      result = FALSE;
+	      result = false;
 	    }
 	  if (out_attr[i].i == AEABI_R9_unused)
 	    out_attr[i].i = in_attr[i].i;
@@ -14926,7 +14928,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 	      _bfd_error_handler
 		(_("error: %pB: SB relative addressing conflicts with use of R9"),
 		 ibfd);
-	      result = FALSE;
+	      result = false;
 	    }
 	  /* Use the smallest value specified.  */
 	  if (in_attr[i].i < out_attr[i].i)
@@ -14960,11 +14962,11 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 		  static const char *aeabi_enum_names[] =
 		    { "", "variable-size", "32-bit", "" };
 		  const char *in_name =
-		    in_attr[i].i < ARRAY_SIZE(aeabi_enum_names)
+		    in_attr[i].i < ARRAY_SIZE (aeabi_enum_names)
 		    ? aeabi_enum_names[in_attr[i].i]
 		    : "<unknown>";
 		  const char *out_name =
-		    out_attr[i].i < ARRAY_SIZE(aeabi_enum_names)
+		    out_attr[i].i < ARRAY_SIZE (aeabi_enum_names)
 		    ? aeabi_enum_names[out_attr[i].i]
 		    : "<unknown>";
 		  _bfd_error_handler
@@ -14982,7 +14984,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 	      _bfd_error_handler
 		(_("error: %pB uses iWMMXt register arguments, %pB does not"),
 		 ibfd, obfd);
-	      result = FALSE;
+	      result = false;
 	    }
 	  break;
 	case Tag_compatibility:
@@ -14999,7 +15001,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 		  _bfd_error_handler
 		    (_("error: fp16 format mismatch between %pB and %pB"),
 		     ibfd, obfd);
-		  result = FALSE;
+		  result = false;
 		}
 	    }
 	  if (in_attr[i].i != 0)
@@ -15036,7 +15038,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 		    (_("%pB has both the current and legacy "
 		       "Tag_MPextension_use attributes"),
 		     ibfd);
-		  result = FALSE;
+		  result = false;
 		}
 	    }
 
@@ -15074,7 +15076,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 
   /* Merge Tag_compatibility attributes and any common GNU ones.  */
   if (!_bfd_elf_merge_object_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   /* Check for any attributes not known on ARM.  */
   result &= _bfd_elf_merge_unknown_attribute_list (ibfd, obfd);
@@ -15085,14 +15087,14 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 
 /* Return TRUE if the two EABI versions are incompatible.  */
 
-static bfd_boolean
+static bool
 elf32_arm_versions_compatible (unsigned iver, unsigned over)
 {
   /* v4 and v5 are the same spec before and after it was released,
      so allow mixing them.  */
   if ((iver == EF_ARM_EABI_VER4 && over == EF_ARM_EABI_VER5)
       || (iver == EF_ARM_EABI_VER5 && over == EF_ARM_EABI_VER4))
-    return TRUE;
+    return true;
 
   return (iver == over);
 }
@@ -15100,12 +15102,12 @@ elf32_arm_versions_compatible (unsigned
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf32_arm_merge_private_bfd_data (bfd *, struct bfd_link_info *);
 
 /* Display the flags field.  */
 
-static bfd_boolean
+static bool
 elf32_arm_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE * file = (FILE *) ptr;
@@ -15120,7 +15122,7 @@ elf32_arm_print_private_bfd_data (bfd *a
   /* Ignore init flag - it may not be set, despite the flags field
      containing valid data.  */
 
-  fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
+  fprintf (file, _("private flags = 0x%lx:"), elf_elfheader (abfd)->e_flags);
 
   switch (EF_ARM_EABI_VERSION (flags))
     {
@@ -15241,11 +15243,11 @@ elf32_arm_print_private_bfd_data (bfd *a
   flags &= ~ (EF_ARM_RELEXEC | EF_ARM_PIC);
 
   if (flags)
-    fprintf (file, _("<Unrecognised flag bits set>"));
+    fprintf (file, _(" <Unrecognised flag bits set>"));
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 static int
@@ -15292,7 +15294,7 @@ elf32_arm_gc_mark_hook (asection *sec,
 
 /* Look through the relocs for a section during the first phase.  */
 
-static bfd_boolean
+static bool
 elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -15303,19 +15305,19 @@ elf32_arm_check_relocs (bfd *abfd, struc
   bfd *dynobj;
   asection *sreloc;
   struct elf32_arm_link_hash_table *htab;
-  bfd_boolean call_reloc_p;
-  bfd_boolean may_become_dynamic_p;
-  bfd_boolean may_need_local_target_p;
+  bool call_reloc_p;
+  bool may_become_dynamic_p;
+  bool may_need_local_target_p;
   unsigned long nsyms;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is_arm_elf (abfd));
 
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   sreloc = NULL;
 
@@ -15325,13 +15327,13 @@ elf32_arm_check_relocs (bfd *abfd, struc
       && ! htab->root.dynamic_sections_created)
     {
       if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
-	return FALSE;
+	return false;
     }
 
   if (htab->root.dynobj == NULL)
     htab->root.dynobj = abfd;
   if (!create_ifunc_sections (info))
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
 
@@ -15360,7 +15362,7 @@ elf32_arm_check_relocs (bfd *abfd, struc
 	{
 	  _bfd_error_handler (_("%pB: bad symbol index: %d"), abfd,
 			      r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       h = NULL;
@@ -15370,10 +15372,10 @@ elf32_arm_check_relocs (bfd *abfd, struc
 	  if (r_symndx < symtab_hdr->sh_info)
 	    {
 	      /* A local symbol.  */
-	      isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	      isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
 					    abfd, r_symndx);
 	      if (isym == NULL)
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
@@ -15386,9 +15388,9 @@ elf32_arm_check_relocs (bfd *abfd, struc
 
       eh = (struct elf32_arm_link_hash_entry *) h;
 
-      call_reloc_p = FALSE;
-      may_become_dynamic_p = FALSE;
-      may_need_local_target_p = FALSE;
+      call_reloc_p = false;
+      may_become_dynamic_p = false;
+      may_need_local_target_p = false;
 
       /* Could be done earlier, if h were already available.  */
       r_type = elf32_arm_tls_transition (info, r_type, h);
@@ -15399,9 +15401,11 @@ elf32_arm_check_relocs (bfd *abfd, struc
 	    if (h == NULL)
 	      {
 		if (!elf32_arm_allocate_local_sym_info (abfd))
-		  return FALSE;
-		elf32_arm_local_fdpic_cnts(abfd)[r_symndx].gotofffuncdesc_cnt += 1;
-		elf32_arm_local_fdpic_cnts(abfd)[r_symndx].funcdesc_offset = -1;
+		  return false;
+		if (r_symndx >= elf32_arm_num_entries (abfd))
+		  return false;
+		elf32_arm_local_fdpic_cnts (abfd) [r_symndx].gotofffuncdesc_cnt += 1;
+		elf32_arm_local_fdpic_cnts (abfd) [r_symndx].funcdesc_offset = -1;
 	      }
 	    else
 	      {
@@ -15415,9 +15419,9 @@ elf32_arm_check_relocs (bfd *abfd, struc
 	    if (h == NULL)
 	      {
 		/* Such a relocation is not supposed to be generated
-		   by gcc on a static function. */
+		   by gcc on a static function.  */
 		/* Anyway if needed it could be handled.  */
-		abort();
+		return false;
 	      }
 	    else
 	      {
@@ -15431,9 +15435,11 @@ elf32_arm_check_relocs (bfd *abfd, struc
 	    if (h == NULL)
 	      {
 		if (!elf32_arm_allocate_local_sym_info (abfd))
-		  return FALSE;
-		elf32_arm_local_fdpic_cnts(abfd)[r_symndx].funcdesc_cnt += 1;
-		elf32_arm_local_fdpic_cnts(abfd)[r_symndx].funcdesc_offset = -1;
+		  return false;
+		if (r_symndx >= elf32_arm_num_entries (abfd))
+		  return false;
+		elf32_arm_local_fdpic_cnts (abfd) [r_symndx].funcdesc_cnt += 1;
+		elf32_arm_local_fdpic_cnts (abfd) [r_symndx].funcdesc_offset = -1;
 	      }
 	    else
 	      {
@@ -15485,7 +15491,14 @@ elf32_arm_check_relocs (bfd *abfd, struc
 		{
 		  /* This is a global offset table entry for a local symbol.  */
 		  if (!elf32_arm_allocate_local_sym_info (abfd))
-		    return FALSE;
+		    return false;
+		  if (r_symndx >= elf32_arm_num_entries (abfd))
+		    {
+		      _bfd_error_handler (_("%pB: bad symbol index: %d"), abfd,
+					  r_symndx);
+		      return false;
+		    }
+
 		  elf_local_got_refcounts (abfd)[r_symndx] += 1;
 		  old_tls_type = elf32_arm_local_got_tls_type (abfd) [r_symndx];
 		}
@@ -15530,7 +15543,7 @@ elf32_arm_check_relocs (bfd *abfd, struc
 	  case R_ARM_GOTPC:
 	    if (htab->root.sgot == NULL
 		&& !create_got_section (htab->root.dynobj, info))
-	      return FALSE;
+	      return false;
 	    break;
 
 	  case R_ARM_PC24:
@@ -15541,16 +15554,16 @@ elf32_arm_check_relocs (bfd *abfd, struc
 	  case R_ARM_THM_CALL:
 	  case R_ARM_THM_JUMP24:
 	  case R_ARM_THM_JUMP19:
-	    call_reloc_p = TRUE;
-	    may_need_local_target_p = TRUE;
+	    call_reloc_p = true;
+	    may_need_local_target_p = true;
 	    break;
 
 	  case R_ARM_ABS12:
 	    /* VxWorks uses dynamic R_ARM_ABS12 relocations for
 	       ldr __GOTT_INDEX__ offsets.  */
-	    if (!htab->vxworks_p)
+	    if (htab->root.target_os != is_vxworks)
 	      {
-		may_need_local_target_p = TRUE;
+		may_need_local_target_p = true;
 		break;
 	      }
 	    else goto jump_over;
@@ -15568,7 +15581,7 @@ elf32_arm_check_relocs (bfd *abfd, struc
 		   abfd, elf32_arm_howto_table_1[r_type].name,
 		   (h) ? h->root.root.string : "a local symbol");
 		bfd_set_error (bfd_error_bad_value);
-		return FALSE;
+		return false;
 	      }
 
 	    /* Fall through.  */
@@ -15599,32 +15612,32 @@ elf32_arm_check_relocs (bfd *abfd, struc
 		       we treat local relative references as calls;
 		       see the related SYMBOL_CALLS_LOCAL code in
 		       allocate_dynrelocs.  */
-		    call_reloc_p = TRUE;
-		    may_need_local_target_p = TRUE;
+		    call_reloc_p = true;
+		    may_need_local_target_p = true;
 		  }
 		else
 		  /* We are creating a shared library or relocatable
 		     executable, and this is a reloc against a global symbol,
 		     or a non-PC-relative reloc against a local symbol.
 		     We may need to copy the reloc into the output.  */
-		  may_become_dynamic_p = TRUE;
+		  may_become_dynamic_p = true;
 	      }
 	    else
-	      may_need_local_target_p = TRUE;
+	      may_need_local_target_p = true;
 	    break;
 
 	/* This relocation describes the C++ object vtable hierarchy.
 	   Reconstruct it for later use during GC.  */
 	case R_ARM_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_ARM_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 	}
 
@@ -15662,7 +15675,7 @@ elf32_arm_check_relocs (bfd *abfd, struc
 	    {
 	      local_iplt = elf32_arm_create_local_iplt (abfd, r_symndx);
 	      if (local_iplt == NULL)
-		return FALSE;
+		return false;
 	      root_plt = &local_iplt->root;
 	      arm_plt = &local_iplt->arm;
 	    }
@@ -15698,38 +15711,28 @@ elf32_arm_check_relocs (bfd *abfd, struc
 		(sec, dynobj, 2, abfd, ! htab->use_rel);
 
 	      if (sreloc == NULL)
-		return FALSE;
-
-	      /* BPABI objects never have dynamic relocations mapped.  */
-	      if (htab->symbian_p)
-		{
-		  flagword flags;
-
-		  flags = bfd_section_flags (sreloc);
-		  flags &= ~(SEC_LOAD | SEC_ALLOC);
-		  bfd_set_section_flags (sreloc, flags);
-		}
+		return false;
 	    }
 
 	  /* If this is a global symbol, count the number of
 	     relocations we need for this symbol.  */
 	  if (h != NULL)
-	    head = &((struct elf32_arm_link_hash_entry *) h)->dyn_relocs;
+	    head = &h->dyn_relocs;
 	  else
 	    {
 	      head = elf32_arm_get_local_dynreloc_list (abfd, r_symndx, isym);
 	      if (head == NULL)
-		return FALSE;
+		return false;
 	    }
 
 	  p = *head;
 	  if (p == NULL || p->sec != sec)
 	    {
-	      bfd_size_type amt = sizeof *p;
+	      size_t amt = sizeof *p;
 
 	      p = (struct elf_dyn_relocs *) bfd_alloc (htab->root.dynobj, amt);
 	      if (p == NULL)
-		return FALSE;
+		return false;
 	      p->next = *head;
 	      *head = p;
 	      p->sec = sec;
@@ -15740,22 +15743,22 @@ elf32_arm_check_relocs (bfd *abfd, struc
 	  if (elf32_arm_howto_from_type (r_type)->pc_relative)
 	    p->pc_count += 1;
 	  p->count += 1;
-	  if (h == NULL && htab->fdpic_p && !bfd_link_pic(info)
-	      && r_type != R_ARM_ABS32 && r_type != R_ARM_ABS32_NOI) {
-	    /* Here we only support R_ARM_ABS32 and R_ARM_ABS32_NOI
-	       that will become rofixup.  */
-	    /* This is due to the fact that we suppose all will become rofixup.  */
-	    fprintf(stderr, "FDPIC does not yet support %d relocation to become dynamic for executable\n", r_type);
-	    _bfd_error_handler
-	      (_("FDPIC does not yet support %s relocation"
-		 " to become dynamic for executable"),
-	       elf32_arm_howto_table_1[r_type].name);
-	    abort();
-	  }
+	  if (h == NULL && htab->fdpic_p && !bfd_link_pic (info)
+	      && r_type != R_ARM_ABS32 && r_type != R_ARM_ABS32_NOI)
+	    {
+	      /* Here we only support R_ARM_ABS32 and R_ARM_ABS32_NOI
+		 that will become rofixup.  */
+	      /* This is due to the fact that we suppose all will become rofixup.  */
+	      _bfd_error_handler
+		(_("FDPIC does not yet support %s relocation"
+		   " to become dynamic for executable"),
+		 elf32_arm_howto_table_1[r_type].name);
+	      abort ();
+	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -15926,7 +15929,7 @@ elf32_arm_update_relocs (asection *o,
    their own section (as would be the case if code was compiled with
    -ffunction-sections).  */
 
-static bfd_boolean
+static bool
 elf32_arm_gc_mark_extra_sections (struct bfd_link_info *info,
 				  elf_gc_mark_hook_fn gc_mark_hook)
 {
@@ -15939,8 +15942,8 @@ elf32_arm_gc_mark_extra_sections (struct
   const struct elf_backend_data *bed;
   struct elf_link_hash_entry **sym_hashes;
   struct elf32_arm_link_hash_entry *cmse_hash;
-  bfd_boolean again, is_v8m, first_bfd_browse = TRUE;
-  bfd_boolean debug_sec_need_to_be_marked = FALSE;
+  bool again, is_v8m, first_bfd_browse = true;
+  bool extra_marks_added = false;
   asection *isec;
 
   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
@@ -15951,10 +15954,10 @@ elf32_arm_gc_mark_extra_sections (struct
 
   /* Marking EH data may cause additional code sections to be marked,
      requiring multiple passes.  */
-  again = TRUE;
+  again = true;
   while (again)
     {
-      again = FALSE;
+      again = false;
       for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
 	{
 	  asection *o;
@@ -15974,9 +15977,9 @@ elf32_arm_gc_mark_extra_sections (struct
 		  && !o->gc_mark
 		  && elf_shdrp[hdr->sh_link]->bfd_section->gc_mark)
 		{
-		  again = TRUE;
+		  again = true;
 		  if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
-		    return FALSE;
+		    return false;
 		}
 	    }
 
@@ -15984,6 +15987,8 @@ elf32_arm_gc_mark_extra_sections (struct
 	     of them so no need for a second browsing.  */
 	  if (is_v8m && first_bfd_browse)
 	    {
+	      bool debug_sec_need_to_be_marked = false;
+
 	      sym_hashes = elf_sym_hashes (sub);
 	      bed = get_elf_backend_data (sub);
 	      symtab_hdr = &elf_tdata (sub)->symtab_hdr;
@@ -15994,19 +15999,21 @@ elf32_arm_gc_mark_extra_sections (struct
 	      for (i = ext_start; i < sym_count; i++)
 		{
 		  cmse_hash = elf32_arm_hash_entry (sym_hashes[i - ext_start]);
+		  if (cmse_hash == NULL)
+		    continue;
 
 		  /* Assume it is a special symbol.  If not, cmse_scan will
 		     warn about it and user can do something about it.  */
-		  if (CONST_STRNEQ (cmse_hash->root.root.root.string,
-				    CMSE_PREFIX))
+		  if (startswith (cmse_hash->root.root.root.string,
+				  CMSE_PREFIX))
 		    {
 		      cmse_sec = cmse_hash->root.root.u.def.section;
 		      if (!cmse_sec->gc_mark
 			  && !_bfd_elf_gc_mark (info, cmse_sec, gc_mark_hook))
-			return FALSE;
+			return false;
 		      /* The debug sections related to these secure entry
 			 functions are marked on enabling below flag.  */
-		      debug_sec_need_to_be_marked = TRUE;
+		      debug_sec_need_to_be_marked = true;
 		    }
 		}
 
@@ -16019,21 +16026,30 @@ elf32_arm_gc_mark_extra_sections (struct
 		    {
 		      /* If not a debug sections, skip it.  */
 		      if (!isec->gc_mark && (isec->flags & SEC_DEBUGGING))
-			isec->gc_mark = 1 ;
+			{
+			  isec->gc_mark = 1;
+			  extra_marks_added = true;
+			}
 		    }
-		  debug_sec_need_to_be_marked = FALSE;
+		  debug_sec_need_to_be_marked = false;
 		}
 	    }
 	}
-      first_bfd_browse = FALSE;
+
+      first_bfd_browse = false;
     }
 
-  return TRUE;
+  /* PR 30354: If we have added extra marks then make sure that any
+     dependencies of the newly marked sections are also marked.  */
+  if (extra_marks_added)
+    _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
+
+  return true;
 }
 
 /* Treat mapping symbols as special target symbols.  */
 
-static bfd_boolean
+static bool
 elf32_arm_is_target_special_symbol (bfd * abfd ATTRIBUTE_UNUSED, asymbol * sym)
 {
   return bfd_is_arm_special_symbol_name (sym->name,
@@ -16049,18 +16065,29 @@ elf32_arm_maybe_function_sym (const asym
 			      bfd_vma *code_off)
 {
   bfd_size_type size;
+  elf_symbol_type * elf_sym = (elf_symbol_type *) sym;
 
   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
 		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
       || sym->section != sec)
     return 0;
 
+  size = (sym->flags & BSF_SYNTHETIC) ? 0 : elf_sym->internal_elf_sym.st_size;
+
   if (!(sym->flags & BSF_SYNTHETIC))
-    switch (ELF_ST_TYPE (((elf_symbol_type *) sym)->internal_elf_sym.st_info))
+    switch (ELF_ST_TYPE (elf_sym->internal_elf_sym.st_info))
       {
+	case STT_NOTYPE:
+	  /* Ignore symbols created by the annobin plugin for gcc and clang.
+	     These symbols are hidden, local, notype and have a size of 0.  */
+	  if (size == 0
+	      && sym->flags & BSF_LOCAL
+	      && ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other) == STV_HIDDEN)
+	    return 0;
+	  /* Fall through.  */
 	case STT_FUNC:
 	case STT_ARM_TFUNC:
-	case STT_NOTYPE:
+	  /* FIXME: Allow STT_GNU_IFUNC as well ?  */
 	  break;
 	default:
 	  return 0;
@@ -16072,51 +16099,32 @@ elf32_arm_maybe_function_sym (const asym
     return 0;
 
   *code_off = sym->value;
-  size = 0;
-  if (!(sym->flags & BSF_SYNTHETIC))
-    size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
-  if (size == 0)
-    size = 1;
-  return size;
+
+  /* Do not return 0 for the function's size.  */
+  return size ? size : 1;
+
 }
 
-static bfd_boolean
+static bool
 elf32_arm_find_inliner_info (bfd *	    abfd,
 			     const char **  filename_ptr,
 			     const char **  functionname_ptr,
 			     unsigned int * line_ptr)
 {
-  bfd_boolean found;
+  bool found;
   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
 					 functionname_ptr, line_ptr,
 					 & elf_tdata (abfd)->dwarf2_find_line_info);
   return found;
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = elf32_arm_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info,
 				 struct elf_link_hash_entry * h)
 {
@@ -16127,7 +16135,7 @@ elf32_arm_adjust_dynamic_symbol (struct
 
   globals = elf32_arm_hash_table (info);
   if (globals == NULL)
-    return FALSE;
+    return false;
 
   dynobj = elf_hash_table (info)->dynobj;
 
@@ -16167,7 +16175,7 @@ elf32_arm_adjust_dynamic_symbol (struct
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     {
@@ -16191,13 +16199,13 @@ elf32_arm_adjust_dynamic_symbol (struct
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* If there are no non-GOT references, we do not need a copy
      relocation.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* This is a reference to a symbol defined by a dynamic object which
      is not a function.  */
@@ -16209,7 +16217,7 @@ elf32_arm_adjust_dynamic_symbol (struct
      can reference data in shared objects directly, so we don't need to
      do anything here.  */
   if (bfd_link_pic (info) || globals->root.is_relocatable_executable)
-    return TRUE;
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -16248,7 +16256,7 @@ elf32_arm_adjust_dynamic_symbol (struct
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info;
@@ -16257,14 +16265,14 @@ allocate_dynrelocs_for_symbol (struct el
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   eh = (struct elf32_arm_link_hash_entry *) h;
 
   info = (struct bfd_link_info *) inf;
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if ((htab->root.dynamic_sections_created || h->type == STT_GNU_IFUNC)
       && h->plt.refcount > 0)
@@ -16275,7 +16283,7 @@ allocate_dynrelocs_for_symbol (struct el
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       /* If the call in the PLT entry binds locally, the associated
@@ -16322,7 +16330,7 @@ allocate_dynrelocs_for_symbol (struct el
 	  /* VxWorks executables have a second set of relocations for
 	     each PLT entry.  They go in a separate relocation section,
 	     which is processed by the kernel loader.  */
-	  if (htab->vxworks_p && !bfd_link_pic (info))
+	  if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
 	    {
 	      /* There is a relocation for the initial PLT entry:
 		 an R_ARM_32 relocation for _GLOBAL_OFFSET_TABLE_.  */
@@ -16353,118 +16361,114 @@ allocate_dynrelocs_for_symbol (struct el
   if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = elf32_arm_hash_entry (h)->tls_type;
       int indx;
 
       /* Make sure this symbol is output as a dynamic symbol.
 	 Undefined weak syms won't yet be marked as dynamic.  */
-      if (htab->root.dynamic_sections_created && h->dynindx == -1 && !h->forced_local
+      if (htab->root.dynamic_sections_created
+	  && h->dynindx == -1
+	  && !h->forced_local
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
-      if (!htab->symbian_p)
-	{
-	  s = htab->root.sgot;
-	  h->got.offset = s->size;
+      s = htab->root.sgot;
+      h->got.offset = s->size;
 
-	  if (tls_type == GOT_UNKNOWN)
-	    abort ();
+      if (tls_type == GOT_UNKNOWN)
+	abort ();
 
-	  if (tls_type == GOT_NORMAL)
-	    /* Non-TLS symbols need one GOT slot.  */
-	    s->size += 4;
-	  else
+      if (tls_type == GOT_NORMAL)
+	/* Non-TLS symbols need one GOT slot.  */
+	s->size += 4;
+      else
+	{
+	  if (tls_type & GOT_TLS_GDESC)
 	    {
-	      if (tls_type & GOT_TLS_GDESC)
-		{
-		  /* R_ARM_TLS_DESC needs 2 GOT slots.  */
-		  eh->tlsdesc_got
-		    = (htab->root.sgotplt->size
-		       - elf32_arm_compute_jump_table_size (htab));
-		  htab->root.sgotplt->size += 8;
-		  h->got.offset = (bfd_vma) -2;
-		  /* plt.got_offset needs to know there's a TLS_DESC
-		     reloc in the middle of .got.plt.  */
-		  htab->num_tls_desc++;
-		}
-
-	      if (tls_type & GOT_TLS_GD)
-		{
-		  /* R_ARM_TLS_GD32 and R_ARM_TLS_GD32_FDPIC need two
-		     consecutive GOT slots.  If the symbol is both GD
-		     and GDESC, got.offset may have been
-		     overwritten.  */
-		  h->got.offset = s->size;
-		  s->size += 8;
-		}
-
-	      if (tls_type & GOT_TLS_IE)
-		/* R_ARM_TLS_IE32/R_ARM_TLS_IE32_FDPIC need one GOT
-		   slot.  */
-		s->size += 4;
+	      /* R_ARM_TLS_DESC needs 2 GOT slots.  */
+	      eh->tlsdesc_got
+		= (htab->root.sgotplt->size
+		   - elf32_arm_compute_jump_table_size (htab));
+	      htab->root.sgotplt->size += 8;
+	      h->got.offset = (bfd_vma) -2;
+	      /* plt.got_offset needs to know there's a TLS_DESC
+		 reloc in the middle of .got.plt.  */
+	      htab->num_tls_desc++;
+	    }
+
+	  if (tls_type & GOT_TLS_GD)
+	    {
+	      /* R_ARM_TLS_GD32 and R_ARM_TLS_GD32_FDPIC need two
+		 consecutive GOT slots.  If the symbol is both GD
+		 and GDESC, got.offset may have been
+		 overwritten.  */
+	      h->got.offset = s->size;
+	      s->size += 8;
 	    }
 
-	  dyn = htab->root.dynamic_sections_created;
+	  if (tls_type & GOT_TLS_IE)
+	    /* R_ARM_TLS_IE32/R_ARM_TLS_IE32_FDPIC need one GOT
+	       slot.  */
+	    s->size += 4;
+	}
 
-	  indx = 0;
-	  if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
-					       bfd_link_pic (info),
-					       h)
-	      && (!bfd_link_pic (info)
-		  || !SYMBOL_REFERENCES_LOCAL (info, h)))
-	    indx = h->dynindx;
-
-	  if (tls_type != GOT_NORMAL
-	      && (bfd_link_dll (info) || indx != 0)
-	      && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-		  || h->root.type != bfd_link_hash_undefweak))
-	    {
-	      if (tls_type & GOT_TLS_IE)
-		elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
+      dyn = htab->root.dynamic_sections_created;
 
-	      if (tls_type & GOT_TLS_GD)
-		elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
+      indx = 0;
+      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
+	  && (!bfd_link_pic (info)
+	      || !SYMBOL_REFERENCES_LOCAL (info, h)))
+	indx = h->dynindx;
+
+      if (tls_type != GOT_NORMAL
+	  && (bfd_link_dll (info) || indx != 0)
+	  && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+	      || h->root.type != bfd_link_hash_undefweak))
+	{
+	  if (tls_type & GOT_TLS_IE)
+	    elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
 
-	      if (tls_type & GOT_TLS_GDESC)
-		{
-		  elf32_arm_allocate_dynrelocs (info, htab->root.srelplt, 1);
-		  /* GDESC needs a trampoline to jump to.  */
-		  htab->tls_trampoline = -1;
-		}
+	  if (tls_type & GOT_TLS_GD)
+	    elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
 
-	      /* Only GD needs it.  GDESC just emits one relocation per
-		 2 entries.  */
-	      if ((tls_type & GOT_TLS_GD) && indx != 0)
-		elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
-	    }
-	  else if (((indx != -1) || htab->fdpic_p)
-		   && !SYMBOL_REFERENCES_LOCAL (info, h))
+	  if (tls_type & GOT_TLS_GDESC)
 	    {
-	      if (htab->root.dynamic_sections_created)
-		/* Reserve room for the GOT entry's R_ARM_GLOB_DAT relocation.  */
-		elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
+	      elf32_arm_allocate_dynrelocs (info, htab->root.srelplt, 1);
+	      /* GDESC needs a trampoline to jump to.  */
+	      htab->tls_trampoline = -1;
 	    }
-	  else if (h->type == STT_GNU_IFUNC
-		   && eh->plt.noncall_refcount == 0)
-	    /* No non-call references resolve the STT_GNU_IFUNC's PLT entry;
-	       they all resolve dynamically instead.  Reserve room for the
-	       GOT entry's R_ARM_IRELATIVE relocation.  */
-	    elf32_arm_allocate_irelocs (info, htab->root.srelgot, 1);
-	  else if (bfd_link_pic (info)
-		   && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-		       || h->root.type != bfd_link_hash_undefweak))
-	    /* Reserve room for the GOT entry's R_ARM_RELATIVE relocation.  */
+
+	  /* Only GD needs it.  GDESC just emits one relocation per
+	     2 entries.  */
+	  if ((tls_type & GOT_TLS_GD) && indx != 0)
+	    elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
+	}
+      else if (((indx != -1) || htab->fdpic_p)
+	       && !SYMBOL_REFERENCES_LOCAL (info, h))
+	{
+	  if (htab->root.dynamic_sections_created)
+	    /* Reserve room for the GOT entry's R_ARM_GLOB_DAT relocation.  */
 	    elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
-	  else if (htab->fdpic_p && tls_type == GOT_NORMAL)
-	    /* Reserve room for rofixup for FDPIC executable.  */
-	    /* TLS relocs do not need space since they are completely
-	       resolved.  */
-	    htab->srofixup->size += 4;
 	}
+      else if (h->type == STT_GNU_IFUNC
+	       && eh->plt.noncall_refcount == 0)
+	/* No non-call references resolve the STT_GNU_IFUNC's PLT entry;
+	   they all resolve dynamically instead.  Reserve room for the
+	   GOT entry's R_ARM_IRELATIVE relocation.  */
+	elf32_arm_allocate_irelocs (info, htab->root.srelgot, 1);
+      else if (bfd_link_pic (info)
+	       && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+	/* Reserve room for the GOT entry's R_ARM_RELATIVE relocation.  */
+	elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
+      else if (htab->fdpic_p && tls_type == GOT_NORMAL)
+	/* Reserve room for rofixup for FDPIC executable.  */
+	/* TLS relocs do not need space since they are completely
+	   resolved.  */
+	htab->srofixup->size += 4;
     }
   else
     h->got.offset = (bfd_vma) -1;
@@ -16474,9 +16478,10 @@ allocate_dynrelocs_for_symbol (struct el
     {
       /* Symbol musn't be exported.  */
       if (h->dynindx != -1)
-	abort();
+	abort ();
 
-      /* We only allocate one function descriptor with its associated relocation.  */
+      /* We only allocate one function descriptor with its associated
+	 relocation.  */
       if (eh->fdpic_cnts.funcdesc_offset == -1)
 	{
 	  asection *s = htab->root.sgot;
@@ -16484,7 +16489,7 @@ allocate_dynrelocs_for_symbol (struct el
 	  eh->fdpic_cnts.funcdesc_offset = s->size;
 	  s->size += 8;
 	  /* We will add an R_ARM_FUNCDESC_VALUE relocation or two rofixups.  */
-	  if (bfd_link_pic(info))
+	  if (bfd_link_pic (info))
 	    elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
 	  else
 	    htab->srofixup->size += 8;
@@ -16498,18 +16503,20 @@ allocate_dynrelocs_for_symbol (struct el
       if (htab->root.dynamic_sections_created && h->dynindx == -1
 	  && !h->forced_local)
 	if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	  return FALSE;
+	  return false;
 
       if (h->dynindx == -1)
 	{
-	  /* We only allocate one function descriptor with its associated relocation. q */
+	  /* We only allocate one function descriptor with its
+	     associated relocation.  */
 	  if (eh->fdpic_cnts.funcdesc_offset == -1)
 	    {
 
 	      eh->fdpic_cnts.funcdesc_offset = s->size;
 	      s->size += 8;
-	      /* We will add an R_ARM_FUNCDESC_VALUE relocation or two rofixups.  */
-	      if (bfd_link_pic(info))
+	      /* We will add an R_ARM_FUNCDESC_VALUE relocation or two
+		 rofixups.  */
+	      if (bfd_link_pic (info))
 		elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
 	      else
 		htab->srofixup->size += 8;
@@ -16520,7 +16527,7 @@ allocate_dynrelocs_for_symbol (struct el
 	 R_ARM_RELATIVE/rofixup relocation on it.  */
       eh->fdpic_cnts.gotfuncdesc_offset = s->size;
       s->size += 4;
-      if (h->dynindx == -1 && !bfd_link_pic(info))
+      if (h->dynindx == -1 && !bfd_link_pic (info))
 	htab->srofixup->size += 4;
       else
 	elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
@@ -16531,25 +16538,27 @@ allocate_dynrelocs_for_symbol (struct el
       if (htab->root.dynamic_sections_created && h->dynindx == -1
 	  && !h->forced_local)
 	if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	  return FALSE;
+	  return false;
 
       if (h->dynindx == -1)
 	{
-	  /* We only allocate one function descriptor with its associated relocation.  */
+	  /* We only allocate one function descriptor with its
+	     associated relocation.  */
 	  if (eh->fdpic_cnts.funcdesc_offset == -1)
 	    {
 	      asection *s = htab->root.sgot;
 
 	      eh->fdpic_cnts.funcdesc_offset = s->size;
 	      s->size += 8;
-	      /* We will add an R_ARM_FUNCDESC_VALUE relocation or two rofixups.  */
-	      if (bfd_link_pic(info))
+	      /* We will add an R_ARM_FUNCDESC_VALUE relocation or two
+		 rofixups.  */
+	      if (bfd_link_pic (info))
 		elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
 	      else
 		htab->srofixup->size += 8;
 	    }
 	}
-      if (h->dynindx == -1 && !bfd_link_pic(info))
+      if (h->dynindx == -1 && !bfd_link_pic (info))
 	{
 	  /* For FDPIC executable we replace R_ARM_RELATIVE with a rofixup.  */
 	  htab->srofixup->size += 4 * eh->fdpic_cnts.funcdesc_cnt;
@@ -16581,7 +16590,7 @@ allocate_dynrelocs_for_symbol (struct el
       _bfd_generic_link_add_one_symbol (info, s->owner,
 					name, BSF_GLOBAL, s,
 					h->root.u.def.value,
-					NULL, TRUE, FALSE, &bh);
+					NULL, true, false, &bh);
 
       myh = (struct elf_link_hash_entry *) bh;
       myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
@@ -16596,8 +16605,8 @@ allocate_dynrelocs_for_symbol (struct el
       h->root.u.def.value = th->root.u.def.value & ~1;
     }
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -16605,7 +16614,9 @@ allocate_dynrelocs_for_symbol (struct el
      space for pc-relative relocs that have become local due to symbol
      visibility changes.  */
 
-  if (bfd_link_pic (info) || htab->root.is_relocatable_executable || htab->fdpic_p)
+  if (bfd_link_pic (info)
+      || htab->root.is_relocatable_executable
+      || htab->fdpic_p)
     {
       /* Relocs that use pc_count are PC-relative forms, which will appear
 	 on something like ".long foo - ." or "movw REG, foo - .".  We want
@@ -16617,7 +16628,7 @@ allocate_dynrelocs_for_symbol (struct el
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -16628,11 +16639,11 @@ allocate_dynrelocs_for_symbol (struct el
 	    }
 	}
 
-      if (htab->vxworks_p)
+      if (htab->root.target_os == is_vxworks)
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      if (strcmp (p->sec->output_section->name, ".tls_vars") == 0)
 		*pp = p->next;
@@ -16643,12 +16654,12 @@ allocate_dynrelocs_for_symbol (struct el
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -16656,7 +16667,7 @@ allocate_dynrelocs_for_symbol (struct el
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -16667,7 +16678,7 @@ allocate_dynrelocs_for_symbol (struct el
 	     against them.  For normal symbols we output a relocation
 	     against the section that contains them.  */
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
     }
@@ -16690,7 +16701,7 @@ allocate_dynrelocs_for_symbol (struct el
 	      && h->root.type == bfd_link_hash_undefweak)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -16699,13 +16710,13 @@ allocate_dynrelocs_for_symbol (struct el
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
 
@@ -16713,43 +16724,16 @@ allocate_dynrelocs_for_symbol (struct el
 	  && eh->plt.noncall_refcount == 0
 	  && SYMBOL_REFERENCES_LOCAL (info, h))
 	elf32_arm_allocate_irelocs (info, sreloc, p->count);
-      else if (h->dynindx != -1 && (!bfd_link_pic(info) || !info->symbolic || !h->def_regular))
+      else if (h->dynindx != -1
+	       && (!bfd_link_pic (info) || !info->symbolic || !h->def_regular))
 	elf32_arm_allocate_dynrelocs (info, sreloc, p->count);
-      else if (htab->fdpic_p && !bfd_link_pic(info))
+      else if (htab->fdpic_p && !bfd_link_pic (info))
 	htab->srofixup->size += 4 * p->count;
       else
 	elf32_arm_allocate_dynrelocs (info, sreloc, p->count);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-
-  return TRUE;
+  return true;
 }
 
 void
@@ -16767,20 +16751,19 @@ bfd_elf32_arm_set_byteswap_code (struct
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
 				 struct bfd_link_info * info)
 {
   bfd * dynobj;
   asection * s;
-  bfd_boolean plt;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
   struct elf32_arm_link_hash_table *htab;
 
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = elf_hash_table (info)->dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -16810,7 +16793,6 @@ elf32_arm_size_dynamic_sections (bfd * o
       bfd_size_type locsymcount;
       Elf_Internal_Shdr *symtab_hdr;
       asection *srel;
-      bfd_boolean is_vxworks = htab->vxworks_p;
       unsigned int symndx;
       struct fdpic_local *local_fdpic_cnts;
 
@@ -16832,7 +16814,7 @@ elf32_arm_size_dynamic_sections (bfd * o
 		     linker script /DISCARD/, so we'll be discarding
 		     the relocs too.  */
 		}
-	      else if (is_vxworks
+	      else if (htab->root.target_os == is_vxworks
 		       && strcmp (p->sec->output_section->name,
 				  ".tls_vars") == 0)
 		{
@@ -16842,7 +16824,7 @@ elf32_arm_size_dynamic_sections (bfd * o
 	      else if (p->count != 0)
 		{
 		  srel = elf_section_data (p->sec)->sreloc;
-		  if (htab->fdpic_p && !bfd_link_pic(info))
+		  if (htab->fdpic_p && !bfd_link_pic (info))
 		    htab->srofixup->size += 4 * p->count;
 		  else
 		    elf32_arm_allocate_dynrelocs (info, srel, p->count);
@@ -16853,7 +16835,7 @@ elf32_arm_size_dynamic_sections (bfd * o
 	}
 
       local_got = elf_local_got_refcounts (ibfd);
-      if (!local_got)
+      if (local_got == NULL)
 	continue;
 
       symtab_hdr = & elf_symtab_hdr (ibfd);
@@ -16870,6 +16852,9 @@ elf32_arm_size_dynamic_sections (bfd * o
 	   ++local_got, ++local_iplt_ptr, ++local_tls_type,
 	   ++local_tlsdesc_gotent, ++symndx, ++local_fdpic_cnts)
 	{
+	  if (symndx >= elf32_arm_num_entries (ibfd))
+	    return false;
+
 	  *local_tlsdesc_gotent = (bfd_vma) -1;
 	  local_iplt = *local_iplt_ptr;
 
@@ -16882,7 +16867,7 @@ elf32_arm_size_dynamic_sections (bfd * o
 		  s->size += 8;
 
 		  /* We will add an R_ARM_FUNCDESC_VALUE relocation or two rofixups.  */
-		  if (bfd_link_pic(info))
+		  if (bfd_link_pic (info))
 		    elf32_arm_allocate_dynrelocs (info, srel, 1);
 		  else
 		    htab->srofixup->size += 8;
@@ -16897,14 +16882,14 @@ elf32_arm_size_dynamic_sections (bfd * o
 		  s->size += 8;
 
 		  /* We will add an R_ARM_FUNCDESC_VALUE relocation or two rofixups.  */
-		  if (bfd_link_pic(info))
+		  if (bfd_link_pic (info))
 		    elf32_arm_allocate_dynrelocs (info, srel, 1);
 		  else
 		    htab->srofixup->size += 8;
 		}
 
 	      /* We will add n R_ARM_RELATIVE relocations or n rofixups.  */
-	      if (bfd_link_pic(info))
+	      if (bfd_link_pic (info))
 		elf32_arm_allocate_dynrelocs (info, srel, local_fdpic_cnts->funcdesc_cnt);
 	      else
 		htab->srofixup->size += 4 * local_fdpic_cnts->funcdesc_cnt;
@@ -16916,7 +16901,7 @@ elf32_arm_size_dynamic_sections (bfd * o
 
 	      if (local_iplt->root.refcount > 0)
 		{
-		  elf32_arm_allocate_plt_entry (info, TRUE,
+		  elf32_arm_allocate_plt_entry (info, true,
 						&local_iplt->root,
 						&local_iplt->arm);
 		  if (local_iplt->arm.noncall_refcount == 0)
@@ -16973,9 +16958,10 @@ elf32_arm_size_dynamic_sections (bfd * o
 		  s->size += 4;
 		}
 
-	      isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, symndx);
+	      isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, ibfd,
+					    symndx);
 	      if (isym == NULL)
-		return FALSE;
+		return false;
 
 	      /* If all references to an STT_GNU_IFUNC PLT are calls,
 		 then all non-call references, including this GOT entry,
@@ -17050,7 +17036,7 @@ elf32_arm_size_dynamic_sections (bfd * o
      for them, it suffices to multiply the reloc count by the jump
      slot size.  */
   if (htab->root.srelplt)
-    htab->sgotplt_jump_table_size = elf32_arm_compute_jump_table_size(htab);
+    htab->sgotplt_jump_table_size = elf32_arm_compute_jump_table_size (htab);
 
   if (htab->tls_trampoline)
     {
@@ -17062,12 +17048,14 @@ elf32_arm_size_dynamic_sections (bfd * o
 
       /* If we're not using lazy TLS relocations, don't generate the
 	 PLT and GOT entries they require.  */
-      if (!(info->flags & DF_BIND_NOW))
+      if ((info->flags & DF_BIND_NOW))
+	htab->root.tlsdesc_plt = 0;
+      else
 	{
-	  htab->dt_tlsdesc_got = htab->root.sgot->size;
+	  htab->root.tlsdesc_got = htab->root.sgot->size;
 	  htab->root.sgot->size += 4;
 
-	  htab->dt_tlsdesc_plt = htab->root.splt->size;
+	  htab->root.tlsdesc_plt = htab->root.splt->size;
 	  htab->root.splt->size += 4 * ARRAY_SIZE (dl_tlsdesc_lazy_trampoline);
 	}
     }
@@ -17075,8 +17063,7 @@ elf32_arm_size_dynamic_sections (bfd * o
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  plt = FALSE;
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char * name;
@@ -17091,16 +17078,16 @@ elf32_arm_size_dynamic_sections (bfd * o
       if (s == htab->root.splt)
 	{
 	  /* Remember whether there is a PLT.  */
-	  plt = s->size != 0;
+	  ;
 	}
-      else if (CONST_STRNEQ (name, ".rel"))
+      else if (startswith (name, ".rel"))
 	{
 	  if (s->size != 0)
 	    {
 	      /* Remember whether there are any reloc sections other
 		 than .rel(a).plt and .rela.plt.unloaded.  */
 	      if (s != htab->root.srelplt && s != htab->srelplt2)
-		relocs = TRUE;
+		relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -17140,81 +17127,17 @@ elf32_arm_size_dynamic_sections (bfd * o
       /* Allocate memory for the section contents.  */
       s->contents = (unsigned char *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf32_arm_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-     if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (plt)
-	{
-	  if (   !add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL,
-				     htab->use_rel ? DT_REL : DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-
-	  if (htab->dt_tlsdesc_plt
-	      && (!add_dynamic_entry (DT_TLSDESC_PLT,0)
-		  || !add_dynamic_entry (DT_TLSDESC_GOT,0)))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (htab->use_rel)
-	    {
-	      if (!add_dynamic_entry (DT_REL, 0)
-		  || !add_dynamic_entry (DT_RELSZ, 0)
-		  || !add_dynamic_entry (DT_RELENT, RELOC_SIZE (htab)))
-		return FALSE;
-	    }
-	  else
-	    {
-	      if (!add_dynamic_entry (DT_RELA, 0)
-		  || !add_dynamic_entry (DT_RELASZ, 0)
-		  || !add_dynamic_entry (DT_RELAENT, RELOC_SIZE (htab)))
-		return FALSE;
-	    }
-	}
-
-      /* If any dynamic relocs apply to a read-only section,
-	 then we need a DT_TEXTREL entry.  */
-      if ((info->flags & DF_TEXTREL) == 0)
-	elf_link_hash_traverse (&htab->root, maybe_set_textrel, info);
-
-      if ((info->flags & DF_TEXTREL) != 0)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
-      if (htab->vxworks_p
-	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
-	return FALSE;
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info,
+						  relocs);
 }
 
 /* Size sections even though they're not dynamic.  We use it to setup
    _TLS_MODULE_BASE_, if needed.  */
 
-static bfd_boolean
+static bool
 elf32_arm_always_size_sections (bfd *output_bfd,
 				struct bfd_link_info *info)
 {
@@ -17224,7 +17147,7 @@ elf32_arm_always_size_sections (bfd *out
   htab = elf32_arm_hash_table (info);
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   tls_sec = elf_hash_table (info)->tls_sec;
 
@@ -17233,7 +17156,7 @@ elf32_arm_always_size_sections (bfd *out
       struct elf_link_hash_entry *tlsbase;
 
       tlsbase = elf_link_hash_lookup
-	(elf_hash_table (info), "_TLS_MODULE_BASE_", TRUE, TRUE, FALSE);
+	(elf_hash_table (info), "_TLS_MODULE_BASE_", true, true, false);
 
       if (tlsbase)
 	{
@@ -17243,30 +17166,30 @@ elf32_arm_always_size_sections (bfd *out
 
 	  if (!(_bfd_generic_link_add_one_symbol
 		(info, output_bfd, "_TLS_MODULE_BASE_", BSF_LOCAL,
-		 tls_sec, 0, NULL, FALSE,
+		 tls_sec, 0, NULL, false,
 		 bed->collect, &bh)))
-	    return FALSE;
+	    return false;
 
 	  tlsbase->type = STT_TLS;
 	  tlsbase = (struct elf_link_hash_entry *)bh;
 	  tlsbase->def_regular = 1;
 	  tlsbase->other = STV_HIDDEN;
-	  (*bed->elf_backend_hide_symbol) (info, tlsbase, TRUE);
+	  (*bed->elf_backend_hide_symbol) (info, tlsbase, true);
 	}
     }
 
   if (htab->fdpic_p && !bfd_link_relocatable (info)
       && !bfd_elf_stack_segment_size (output_bfd, info,
 				      "__stacksize", DEFAULT_STACK_SIZE))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf32_arm_finish_dynamic_symbol (bfd * output_bfd,
 				 struct bfd_link_info * info,
 				 struct elf_link_hash_entry * h,
@@ -17277,7 +17200,7 @@ elf32_arm_finish_dynamic_symbol (bfd * o
 
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   eh = (struct elf32_arm_link_hash_entry *) h;
 
@@ -17288,7 +17211,7 @@ elf32_arm_finish_dynamic_symbol (bfd * o
 	  BFD_ASSERT (h->dynindx != -1);
 	  if (! elf32_arm_populate_plt_entry (output_bfd, info, &h->plt, &eh->plt,
 					      h->dynindx, 0))
-	    return FALSE;
+	    return false;
 	}
 
       if (!h->def_regular)
@@ -17347,10 +17270,12 @@ elf32_arm_finish_dynamic_symbol (bfd * o
      and for FDPIC, the _GLOBAL_OFFSET_TABLE_ symbol is not absolute:
      it is relative to the ".got" section.  */
   if (h == htab->root.hdynamic
-      || (!htab->fdpic_p && !htab->vxworks_p && h == htab->root.hgot))
+      || (!htab->fdpic_p
+	  && htab->root.target_os != is_vxworks
+	  && h == htab->root.hgot))
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -17405,7 +17330,7 @@ arm_nacl_put_plt0 (struct elf32_arm_link
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info)
 {
   bfd * dynobj;
@@ -17415,7 +17340,7 @@ elf32_arm_finish_dynamic_sections (bfd *
 
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = elf_hash_table (info)->dynobj;
 
@@ -17423,7 +17348,7 @@ elf32_arm_finish_dynamic_sections (bfd *
   /* A broken linker script might have discarded the dynamic sections.
      Catch this here so that we do not seg-fault later on.  */
   if (sgot != NULL && bfd_is_abs_section (sgot->output_section))
-    return FALSE;
+    return false;
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -17433,7 +17358,7 @@ elf32_arm_finish_dynamic_sections (bfd *
 
       splt = htab->root.splt;
       BFD_ASSERT (splt != NULL && sdyn != NULL);
-      BFD_ASSERT (htab->symbian_p || sgot != NULL);
+      BFD_ASSERT (sgot != NULL);
 
       dyncon = (Elf32_External_Dyn *) sdyn->contents;
       dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
@@ -17448,35 +17373,22 @@ elf32_arm_finish_dynamic_sections (bfd *
 
 	  switch (dyn.d_tag)
 	    {
-	      unsigned int type;
-
 	    default:
-	      if (htab->vxworks_p
+	      if (htab->root.target_os == is_vxworks
 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 		bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 
 	    case DT_HASH:
-	      name = ".hash";
-	      goto get_vma_if_bpabi;
 	    case DT_STRTAB:
-	      name = ".dynstr";
-	      goto get_vma_if_bpabi;
 	    case DT_SYMTAB:
-	      name = ".dynsym";
-	      goto get_vma_if_bpabi;
 	    case DT_VERSYM:
-	      name = ".gnu.version";
-	      goto get_vma_if_bpabi;
 	    case DT_VERDEF:
-	      name = ".gnu.version_d";
-	      goto get_vma_if_bpabi;
 	    case DT_VERNEED:
-	      name = ".gnu.version_r";
-	      goto get_vma_if_bpabi;
+	      break;
 
 	    case DT_PLTGOT:
-	      name = htab->symbian_p ? ".got" : ".got.plt";
+	      name = ".got.plt";
 	      goto get_vma;
 	    case DT_JMPREL:
 	      name = RELOC_SECTION (htab, ".plt");
@@ -17487,23 +17399,12 @@ elf32_arm_finish_dynamic_sections (bfd *
 		  _bfd_error_handler
 		    (_("could not find section %s"), name);
 		  bfd_set_error (bfd_error_invalid_operation);
-		  return FALSE;
+		  return false;
 		}
-	      if (!htab->symbian_p)
-		dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
-	      else
-		/* In the BPABI, tags in the PT_DYNAMIC section point
-		   at the file offset, not the memory address, for the
-		   convenience of the post linker.  */
-		dyn.d_un.d_ptr = s->output_section->filepos + s->output_offset;
+	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 
-	    get_vma_if_bpabi:
-	      if (htab->symbian_p)
-		goto get_vma;
-	      break;
-
 	    case DT_PLTRELSZ:
 	      s = htab->root.srelplt;
 	      BFD_ASSERT (s != NULL);
@@ -17515,48 +17416,19 @@ elf32_arm_finish_dynamic_sections (bfd *
 	    case DT_RELASZ:
 	    case DT_REL:
 	    case DT_RELA:
-	      /* In the BPABI, the DT_REL tag must point at the file
-		 offset, not the VMA, of the first relocation
-		 section.  So, we use code similar to that in
-		 elflink.c, but do not check for SHF_ALLOC on the
-		 relocation section, since relocation sections are
-		 never allocated under the BPABI.  PLT relocs are also
-		 included.  */
-	      if (htab->symbian_p)
-		{
-		  unsigned int i;
-		  type = ((dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
-			  ? SHT_REL : SHT_RELA);
-		  dyn.d_un.d_val = 0;
-		  for (i = 1; i < elf_numsections (output_bfd); i++)
-		    {
-		      Elf_Internal_Shdr *hdr
-			= elf_elfsections (output_bfd)[i];
-		      if (hdr->sh_type == type)
-			{
-			  if (dyn.d_tag == DT_RELSZ
-			      || dyn.d_tag == DT_RELASZ)
-			    dyn.d_un.d_val += hdr->sh_size;
-			  else if ((ufile_ptr) hdr->sh_offset
-				   <= dyn.d_un.d_val - 1)
-			    dyn.d_un.d_val = hdr->sh_offset;
-			}
-		    }
-		  bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
-		}
 	      break;
 
 	    case DT_TLSDESC_PLT:
 	      s = htab->root.splt;
 	      dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
-				+ htab->dt_tlsdesc_plt);
+				+ htab->root.tlsdesc_plt);
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 
 	    case DT_TLSDESC_GOT:
 	      s = htab->root.sgot;
 	      dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
-				+ htab->dt_tlsdesc_got);
+				+ htab->root.tlsdesc_got);
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 
@@ -17575,7 +17447,7 @@ elf32_arm_finish_dynamic_sections (bfd *
 		  struct elf_link_hash_entry * eh;
 
 		  eh = elf_link_hash_lookup (elf_hash_table (info), name,
-					     FALSE, FALSE, TRUE);
+					     false, false, true);
 		  if (eh != NULL
 		      && ARM_GET_SYM_BRANCH_TYPE (eh->target_internal)
 			 == ST_BRANCH_TO_THUMB)
@@ -17598,7 +17470,7 @@ elf32_arm_finish_dynamic_sections (bfd *
 	  got_address = sgot->output_section->vma + sgot->output_offset;
 	  plt_address = splt->output_section->vma + splt->output_offset;
 
-	  if (htab->vxworks_p)
+	  if (htab->root.target_os == is_vxworks)
 	    {
 	      /* The VxWorks GOT is relocated by the dynamic linker.
 		 Therefore, we must emit relocations rather than simply
@@ -17621,7 +17493,7 @@ elf32_arm_finish_dynamic_sections (bfd *
 	      SWAP_RELOC_OUT (htab) (output_bfd, &rel,
 				     htab->srelplt2->contents);
 	    }
-	  else if (htab->nacl_p)
+	  else if (htab->root.target_os == is_nacl)
 	    arm_nacl_put_plt0 (htab, output_bfd, splt,
 			       got_address + 8 - (plt_address + 16));
 	  else if (using_thumb_only (htab))
@@ -17667,7 +17539,7 @@ elf32_arm_finish_dynamic_sections (bfd *
       if (splt->output_section->owner == output_bfd)
 	elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4;
 
-      if (htab->dt_tlsdesc_plt)
+      if (htab->root.tlsdesc_plt)
 	{
 	  bfd_vma got_address
 	    = sgot->output_section->vma + sgot->output_offset;
@@ -17677,18 +17549,18 @@ elf32_arm_finish_dynamic_sections (bfd *
 	    = splt->output_section->vma + splt->output_offset;
 
 	  arm_put_trampoline (htab, output_bfd,
-			      splt->contents + htab->dt_tlsdesc_plt,
+			      splt->contents + htab->root.tlsdesc_plt,
 			      dl_tlsdesc_lazy_trampoline, 6);
 
 	  bfd_put_32 (output_bfd,
-		      gotplt_address + htab->dt_tlsdesc_got
-		      - (plt_address + htab->dt_tlsdesc_plt)
+		      gotplt_address + htab->root.tlsdesc_got
+		      - (plt_address + htab->root.tlsdesc_plt)
 		      - dl_tlsdesc_lazy_trampoline[6],
-		      splt->contents + htab->dt_tlsdesc_plt + 24);
+		      splt->contents + htab->root.tlsdesc_plt + 24);
 	  bfd_put_32 (output_bfd,
-		      got_address - (plt_address + htab->dt_tlsdesc_plt)
+		      got_address - (plt_address + htab->root.tlsdesc_plt)
 		      - dl_tlsdesc_lazy_trampoline[7],
-		      splt->contents + htab->dt_tlsdesc_plt + 24 + 4);
+		      splt->contents + htab->root.tlsdesc_plt + 24 + 4);
 	}
 
       if (htab->tls_trampoline)
@@ -17702,7 +17574,7 @@ elf32_arm_finish_dynamic_sections (bfd *
 #endif
 	}
 
-      if (htab->vxworks_p
+      if (htab->root.target_os == is_vxworks
 	  && !bfd_link_pic (info)
 	  && htab->root.splt->size > 0)
 	{
@@ -17732,7 +17604,9 @@ elf32_arm_finish_dynamic_sections (bfd *
 	}
     }
 
-  if (htab->nacl_p && htab->root.iplt != NULL && htab->root.iplt->size > 0)
+  if (htab->root.target_os == is_nacl
+      && htab->root.iplt != NULL
+      && htab->root.iplt->size > 0)
     /* NaCl uses a special first entry in .iplt too.  */
     arm_nacl_put_plt0 (htab, output_bfd, htab->root.iplt, 0);
 
@@ -17763,16 +17637,16 @@ elf32_arm_finish_dynamic_sections (bfd *
 	+ hgot->root.u.def.section->output_section->vma
 	+ hgot->root.u.def.section->output_offset;
 
-      arm_elf_add_rofixup(output_bfd, htab->srofixup, got_value);
+      arm_elf_add_rofixup (output_bfd, htab->srofixup, got_value);
 
       /* Make sure we allocated and generated the same number of fixups.  */
       BFD_ASSERT (htab->srofixup->reloc_count * 4 == htab->srofixup->size);
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_arm_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
 {
   Elf_Internal_Ehdr * i_ehdrp;	/* ELF file header, internal form.  */
@@ -17780,7 +17654,7 @@ elf32_arm_init_file_header (bfd *abfd, s
   struct elf_segment_map *m;
 
   if (!_bfd_elf_init_file_header (abfd, link_info))
-    return FALSE;
+    return false;
 
   i_ehdrp = elf_elfheader (abfd);
 
@@ -17827,7 +17701,7 @@ elf32_arm_init_file_header (bfd *abfd, s
 	  m->p_flags_valid = 1;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -17835,6 +17709,35 @@ elf32_arm_reloc_type_class (const struct
 			    const asection *rel_sec ATTRIBUTE_UNUSED,
 			    const Elf_Internal_Rela *rela)
 {
+  struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info);
+
+  if (htab->root.dynsym != NULL
+      && htab->root.dynsym->contents != NULL)
+    {
+      /* Check relocation against STT_GNU_IFUNC symbol if there are
+	 dynamic symbols.  */
+      bfd *abfd = info->output_bfd;
+      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+      unsigned long r_symndx = ELF32_R_SYM (rela->r_info);
+      if (r_symndx != STN_UNDEF)
+	{
+	  Elf_Internal_Sym sym;
+	  if (!bed->s->swap_symbol_in (abfd,
+				       (htab->root.dynsym->contents
+					+ r_symndx * bed->s->sizeof_sym),
+				       0, &sym))
+	    {
+	      /* xgettext:c-format */
+	      _bfd_error_handler (_("%pB symbol number %lu references"
+				    " nonexistent SHT_SYMTAB_SHNDX section"),
+				  abfd, r_symndx);
+	      /* Ideally an error class should be returned here.  */
+	    }
+	  else if (ELF_ST_TYPE (sym.st_info) == STT_GNU_IFUNC)
+	    return reloc_class_ifunc;
+	}
+    }
+
   switch ((int) ELF32_R_TYPE (rela->r_info))
     {
     case R_ARM_RELATIVE:
@@ -17856,7 +17759,7 @@ arm_final_write_processing (bfd *abfd)
   bfd_arm_update_notes (abfd, ARM_NOTE_SECTION);
 }
 
-static bfd_boolean
+static bool
 elf32_arm_final_write_processing (bfd *abfd)
 {
   arm_final_write_processing (abfd);
@@ -17865,18 +17768,18 @@ elf32_arm_final_write_processing (bfd *a
 
 /* Return TRUE if this is an unwinding table entry.  */
 
-static bfd_boolean
+static bool
 is_arm_elf_unwind_section_name (bfd * abfd ATTRIBUTE_UNUSED, const char * name)
 {
-  return (CONST_STRNEQ (name, ELF_STRING_ARM_unwind)
-	  || CONST_STRNEQ (name, ELF_STRING_ARM_unwind_once));
+  return (startswith (name, ELF_STRING_ARM_unwind)
+	  || startswith (name, ELF_STRING_ARM_unwind_once));
 }
 
 
 /* Set the type and flags for an ARM section.  We do this by
    the section name, which is a hack, but ought to work.  */
 
-static bfd_boolean
+static bool
 elf32_arm_fake_sections (bfd * abfd, Elf_Internal_Shdr * hdr, asection * sec)
 {
   const char * name;
@@ -17892,14 +17795,14 @@ elf32_arm_fake_sections (bfd * abfd, Elf
   if (sec->flags & SEC_ELF_PURECODE)
     hdr->sh_flags |= SHF_ARM_PURECODE;
 
-  return TRUE;
+  return true;
 }
 
 /* Handle an ARM specific section when reading an object file.  This is
    called when bfd_section_from_shdr finds a section with an unknown
    type.  */
 
-static bfd_boolean
+static bool
 elf32_arm_section_from_shdr (bfd *abfd,
 			     Elf_Internal_Shdr * hdr,
 			     const char *name,
@@ -17918,13 +17821,13 @@ elf32_arm_section_from_shdr (bfd *abfd,
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 static _arm_elf_section_data *
@@ -17956,7 +17859,7 @@ enum map_symbol_type
 
 /* Output a single mapping symbol.  */
 
-static bfd_boolean
+static bool
 elf32_arm_output_map_sym (output_arch_syminfo *osi,
 			  enum map_symbol_type type,
 			  bfd_vma offset)
@@ -17979,9 +17882,9 @@ elf32_arm_output_map_sym (output_arch_sy
 /* Output mapping symbols for the PLT entry described by ROOT_PLT and ARM_PLT.
    IS_IPLT_ENTRY_P says whether the PLT is in .iplt rather than .plt.  */
 
-static bfd_boolean
+static bool
 elf32_arm_output_plt_map_1 (output_arch_syminfo *osi,
-			    bfd_boolean is_iplt_entry_p,
+			    bool is_iplt_entry_p,
 			    union gotplt_union *root_plt,
 			    struct arm_plt_info *arm_plt)
 {
@@ -17989,11 +17892,11 @@ elf32_arm_output_plt_map_1 (output_arch_
   bfd_vma addr, plt_header_size;
 
   if (root_plt->offset == (bfd_vma) -1)
-    return TRUE;
+    return true;
 
   htab = elf32_arm_hash_table (osi->info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (is_iplt_entry_p)
     {
@@ -18009,66 +17912,59 @@ elf32_arm_output_plt_map_1 (output_arch_
 		    (osi->info->output_bfd, osi->sec->output_section));
 
   addr = root_plt->offset & -2;
-  if (htab->symbian_p)
-    {
-      if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
-	return FALSE;
-      if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 4))
-	return FALSE;
-    }
-  else if (htab->vxworks_p)
+  if (htab->root.target_os == is_vxworks)
     {
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
-	return FALSE;
+	return false;
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 8))
-	return FALSE;
+	return false;
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr + 12))
-	return FALSE;
+	return false;
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 20))
-	return FALSE;
+	return false;
     }
-  else if (htab->nacl_p)
+  else if (htab->root.target_os == is_nacl)
     {
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
-	return FALSE;
+	return false;
     }
   else if (htab->fdpic_p)
     {
-      enum map_symbol_type type = using_thumb_only(htab)
+      enum map_symbol_type type = using_thumb_only (htab)
 	? ARM_MAP_THUMB
 	: ARM_MAP_ARM;
 
       if (elf32_arm_plt_needs_thumb_stub_p (osi->info, arm_plt))
 	if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr - 4))
-	  return FALSE;
+	  return false;
       if (!elf32_arm_output_map_sym (osi, type, addr))
-	return FALSE;
+	return false;
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 16))
-	return FALSE;
-      if (htab->plt_entry_size == 4 * ARRAY_SIZE(elf32_arm_fdpic_plt_entry))
+	return false;
+      if (htab->plt_entry_size == 4 * ARRAY_SIZE (elf32_arm_fdpic_plt_entry))
 	if (!elf32_arm_output_map_sym (osi, type, addr + 24))
-	  return FALSE;
+	  return false;
     }
   else if (using_thumb_only (htab))
     {
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr))
-	return FALSE;
+	return false;
     }
   else
     {
-      bfd_boolean thumb_stub_p;
+      bool thumb_stub_p;
 
       thumb_stub_p = elf32_arm_plt_needs_thumb_stub_p (osi->info, arm_plt);
       if (thumb_stub_p)
 	{
 	  if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr - 4))
-	    return FALSE;
+	    return false;
 	}
 #ifdef FOUR_WORD_PLT
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
-	return FALSE;
+	return false;
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 12))
-	return FALSE;
+	return false;
 #else
       /* A three-word PLT with no Thumb thunk contains only Arm code,
 	 so only need to output a mapping symbol for the first PLT entry and
@@ -18076,24 +17972,24 @@ elf32_arm_output_plt_map_1 (output_arch_
       if (thumb_stub_p || addr == plt_header_size)
 	{
 	  if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
-	    return FALSE;
+	    return false;
 	}
 #endif
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Output mapping symbols for PLT entries associated with H.  */
 
-static bfd_boolean
+static bool
 elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf)
 {
   output_arch_syminfo *osi = (output_arch_syminfo *) inf;
   struct elf32_arm_link_hash_entry *eh;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (h->root.type == bfd_link_hash_warning)
     /* When warning symbols are created, they **replace** the "real"
@@ -18122,7 +18018,7 @@ arm_stub_claim_sym (struct elf32_arm_stu
 
 /* Output a single local symbol for a generated stub.  */
 
-static bfd_boolean
+static bool
 elf32_arm_output_stub_sym (output_arch_syminfo *osi, const char *name,
 			   bfd_vma offset, bfd_vma size)
 {
@@ -18139,7 +18035,7 @@ elf32_arm_output_stub_sym (output_arch_s
   return osi->func (osi->flaginfo, name, &sym, osi->sec, NULL) == 1;
 }
 
-static bfd_boolean
+static bool
 arm_map_one_stub (struct bfd_hash_entry * gen_entry,
 		  void * in_arg)
 {
@@ -18163,7 +18059,7 @@ arm_map_one_stub (struct bfd_hash_entry
   /* Ensure this stub is attached to the current section being
      processed.  */
   if (stub_sec != osi->sec)
-    return TRUE;
+    return true;
 
   addr = (bfd_vma) stub_entry->stub_offset;
   template_sequence = stub_entry->stub_template;
@@ -18178,13 +18074,13 @@ arm_map_one_stub (struct bfd_hash_entry
 	case ARM_TYPE:
 	  if (!elf32_arm_output_stub_sym (osi, stub_name, addr,
 					  stub_entry->stub_size))
-	    return FALSE;
+	    return false;
 	  break;
 	case THUMB16_TYPE:
 	case THUMB32_TYPE:
 	  if (!elf32_arm_output_stub_sym (osi, stub_name, addr | 1,
 					  stub_entry->stub_size))
-	    return FALSE;
+	    return false;
 	  break;
 	default:
 	  BFD_FAIL ();
@@ -18213,14 +18109,14 @@ arm_map_one_stub (struct bfd_hash_entry
 
 	default:
 	  BFD_FAIL ();
-	  return FALSE;
+	  return false;
 	}
 
       if (template_sequence[i].type != prev_type)
 	{
 	  prev_type = template_sequence[i].type;
 	  if (!elf32_arm_output_map_sym (osi, sym_type, addr + size))
-	    return FALSE;
+	    return false;
 	}
 
       switch (template_sequence[i].type)
@@ -18240,18 +18136,18 @@ arm_map_one_stub (struct bfd_hash_entry
 
 	default:
 	  BFD_FAIL ();
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Output mapping symbols for linker generated sections,
    and for those data-only sections that do not have a
    $d.  */
 
-static bfd_boolean
+static bool
 elf32_arm_output_arch_local_syms (bfd *output_bfd,
 				  struct bfd_link_info *info,
 				  void *flaginfo,
@@ -18266,9 +18162,14 @@ elf32_arm_output_arch_local_syms (bfd *o
   bfd_size_type size;
   bfd *input_bfd;
 
+  if (info->strip == strip_all
+      && !info->emitrelocations
+      && !bfd_link_relocatable (info))
+    return true;
+
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   check_use_blx (htab);
 
@@ -18387,51 +18288,52 @@ elf32_arm_output_arch_local_syms (bfd *o
       osi.sec_shndx = (_bfd_elf_section_from_bfd_section
 		       (output_bfd, osi.sec->output_section));
 
-      /* Output mapping symbols for the plt header.  SymbianOS does not have a
-	 plt header.  */
-      if (htab->vxworks_p)
+      /* Output mapping symbols for the plt header.  */
+      if (htab->root.target_os == is_vxworks)
 	{
 	  /* VxWorks shared libraries have no PLT header.  */
 	  if (!bfd_link_pic (info))
 	    {
 	      if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
-		return FALSE;
+		return false;
 	      if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, 12))
-		return FALSE;
+		return false;
 	    }
 	}
-      else if (htab->nacl_p)
+      else if (htab->root.target_os == is_nacl)
 	{
 	  if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
-	    return FALSE;
+	    return false;
 	}
       else if (using_thumb_only (htab) && !htab->fdpic_p)
 	{
 	  if (!elf32_arm_output_map_sym (&osi, ARM_MAP_THUMB, 0))
-	    return FALSE;
+	    return false;
 	  if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, 12))
-	    return FALSE;
+	    return false;
 	  if (!elf32_arm_output_map_sym (&osi, ARM_MAP_THUMB, 16))
-	    return FALSE;
+	    return false;
 	}
-      else if (!htab->symbian_p && !htab->fdpic_p)
+      else if (!htab->fdpic_p)
 	{
 	  if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
-	    return FALSE;
+	    return false;
 #ifndef FOUR_WORD_PLT
 	  if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, 16))
-	    return FALSE;
+	    return false;
 #endif
 	}
     }
-  if (htab->nacl_p && htab->root.iplt && htab->root.iplt->size > 0)
+  if (htab->root.target_os == is_nacl
+      && htab->root.iplt
+      && htab->root.iplt->size > 0)
     {
       /* NaCl uses a special first entry in .iplt too.  */
       osi.sec = htab->root.iplt;
       osi.sec_shndx = (_bfd_elf_section_from_bfd_section
 		       (output_bfd, osi.sec->output_section));
       if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
-	return FALSE;
+	return false;
     }
   if ((htab->root.splt && htab->root.splt->size > 0)
       || (htab->root.iplt && htab->root.iplt->size > 0))
@@ -18448,38 +18350,48 @@ elf32_arm_output_arch_local_syms (bfd *o
 	  if (local_iplt != NULL)
 	    {
 	      num_syms = elf_symtab_hdr (input_bfd).sh_info;
+	      if (num_syms > elf32_arm_num_entries (input_bfd))
+		{
+		  _bfd_error_handler (_("\
+%pB: Number of symbols in input file has increased from %lu to %u\n"),
+				      input_bfd,
+				      (unsigned long) elf32_arm_num_entries (input_bfd),
+				      num_syms);
+		  return false;
+		}
 	      for (i = 0; i < num_syms; i++)
 		if (local_iplt[i] != NULL
-		    && !elf32_arm_output_plt_map_1 (&osi, TRUE,
+		    && !elf32_arm_output_plt_map_1 (&osi, true,
 						    &local_iplt[i]->root,
 						    &local_iplt[i]->arm))
-		  return FALSE;
+		  return false;
 	    }
 	}
     }
-  if (htab->dt_tlsdesc_plt != 0)
+  if (htab->root.tlsdesc_plt != 0)
     {
       /* Mapping symbols for the lazy tls trampoline.  */
-      if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, htab->dt_tlsdesc_plt))
-	return FALSE;
+      if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM,
+				     htab->root.tlsdesc_plt))
+	return false;
 
       if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA,
-				     htab->dt_tlsdesc_plt + 24))
-	return FALSE;
+				     htab->root.tlsdesc_plt + 24))
+	return false;
     }
   if (htab->tls_trampoline != 0)
     {
       /* Mapping symbols for the tls trampoline.  */
       if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, htab->tls_trampoline))
-	return FALSE;
+	return false;
 #ifdef FOUR_WORD_PLT
       if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA,
 				     htab->tls_trampoline + 12))
-	return FALSE;
+	return false;
 #endif
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Filter normal symbols of CMSE entry functions of ABFD to include in
@@ -18505,6 +18417,8 @@ elf32_arm_filter_cmse_symbols (bfd *abfd
 
   maxnamelen = 128;
   cmse_name = (char *) bfd_malloc (maxnamelen);
+  BFD_ASSERT (cmse_name);
+
   for (src_count = 0; src_count < symcount; src_count++)
     {
       struct elf32_arm_link_hash_entry *cmse_hash;
@@ -18531,7 +18445,7 @@ elf32_arm_filter_cmse_symbols (bfd *abfd
 	}
       snprintf (cmse_name, maxnamelen, "%s%s", CMSE_PREFIX, name);
       cmse_hash = (struct elf32_arm_link_hash_entry *)
-	elf_link_hash_lookup (&(htab)->root, cmse_name, FALSE, FALSE, TRUE);
+	elf_link_hash_lookup (&(htab)->root, cmse_name, false, false, true);
 
       if (!cmse_hash
 	  || (cmse_hash->root.root.type != bfd_link_hash_defined
@@ -18574,17 +18488,17 @@ elf32_arm_filter_implib_symbols (bfd *ab
 
 /* Allocate target specific section data.  */
 
-static bfd_boolean
+static bool
 elf32_arm_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
       _arm_elf_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = (_arm_elf_section_data *) bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -18657,7 +18571,7 @@ struct a8_branch_to_stub_data
 /* Helper to insert branches to Cortex-A8 erratum stubs in the right
    places for a particular section.  */
 
-static bfd_boolean
+static bool
 make_branch_to_a8_stub (struct bfd_hash_entry *gen_entry,
 		       void *in_arg)
 {
@@ -18675,7 +18589,7 @@ make_branch_to_a8_stub (struct bfd_hash_
 
   if (stub_entry->target_section != data->writing_section
       || stub_entry->stub_type < arm_stub_a8_veneer_lwm)
-    return TRUE;
+    return true;
 
   contents = data->contents;
 
@@ -18704,7 +18618,7 @@ make_branch_to_a8_stub (struct bfd_hash_
     {
       _bfd_error_handler (_("%pB: error: Cortex-A8 erratum stub is "
 			    "allocated in unsafe location"), abfd);
-      return FALSE;
+      return false;
     }
 
   switch (stub_entry->stub_type)
@@ -18731,7 +18645,7 @@ make_branch_to_a8_stub (struct bfd_hash_
 	       happens.  */
 	    _bfd_error_handler (_("%pB: error: Cortex-A8 erratum stub out "
 				  "of range (input file too large)"), abfd);
-	    return FALSE;
+	    return false;
 	  }
 
 	/* i1 = not(j1 eor s), so:
@@ -18753,13 +18667,13 @@ make_branch_to_a8_stub (struct bfd_hash_
 
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
   bfd_put_16 (abfd, (branch_insn >> 16) & 0xffff, &contents[loc]);
   bfd_put_16 (abfd, branch_insn & 0xffff, &contents[loc + 2]);
 
-  return TRUE;
+  return true;
 }
 
 /* Beginning of stm32l4xx work-around.  */
@@ -19356,7 +19270,7 @@ stm32l4xx_create_replacing_stub_vldm (st
 				      const bfd_byte *const initial_insn_addr,
 				      bfd_byte *const base_stub_contents)
 {
-  int num_words = ((unsigned int) initial_insn << 24) >> 24;
+  int num_words = initial_insn & 0xff;
   bfd_byte *current_stub_contents = base_stub_contents;
 
   BFD_ASSERT (is_thumb2_vldm (initial_insn));
@@ -19379,13 +19293,13 @@ stm32l4xx_create_replacing_stub_vldm (st
     }
   else
     {
-      bfd_boolean is_dp = /* DP encoding.  */
+      bool is_dp = /* DP encoding.  */
 	(initial_insn & 0xfe100f00) == 0xec100b00;
-      bfd_boolean is_ia_nobang = /* (IA without !).  */
+      bool is_ia_nobang = /* (IA without !).  */
 	(((initial_insn << 7) >> 28) & 0xd) == 0x4;
-      bfd_boolean is_ia_bang = /* (IA with !) - includes VPOP.  */
+      bool is_ia_bang = /* (IA with !) - includes VPOP.  */
 	(((initial_insn << 7) >> 28) & 0xd) == 0x5;
-      bfd_boolean is_db_bang = /* (DB with !).  */
+      bool is_db_bang = /* (DB with !).  */
 	(((initial_insn << 7) >> 28) & 0xd) == 0x9;
       int base_reg = ((unsigned int) initial_insn << 12) >> 28;
       /* d = UInt (Vd:D);.  */
@@ -19497,7 +19411,7 @@ stm32l4xx_create_replacing_stub (struct
 /* Do code byteswapping.  Return FALSE afterwards so that the section is
    written out as normal.  */
 
-static bfd_boolean
+static bool
 elf32_arm_write_section (bfd *output_bfd,
 			 struct bfd_link_info *link_info,
 			 asection *sec,
@@ -19516,13 +19430,13 @@ elf32_arm_write_section (bfd *output_bfd
   unsigned int i;
 
   if (globals == NULL)
-    return FALSE;
+    return false;
 
   /* If this section has not been allocated an _arm_elf_section_data
      structure then we cannot record anything.  */
   arm_data = get_arm_elf_section_data (sec);
   if (arm_data == NULL)
-    return FALSE;
+    return false;
 
   mapcount = arm_data->mapcount;
   map = arm_data->map;
@@ -19700,6 +19614,8 @@ elf32_arm_write_section (bfd *output_bfd
       unsigned int in_index, out_index;
       bfd_vma add_to_offsets = 0;
 
+      if (edited_contents == NULL)
+	return false;
       for (in_index = 0, out_index = 0; in_index * 8 < input_size || edit_node;)
 	{
 	  if (edit_node)
@@ -19780,7 +19696,7 @@ elf32_arm_write_section (bfd *output_bfd
 				  edited_contents,
 				  (file_ptr) sec->output_offset, sec->size);
 
-      return TRUE;
+      return true;
     }
 
   /* Fix code to point to Cortex-A8 erratum stubs.  */
@@ -19796,7 +19712,7 @@ elf32_arm_write_section (bfd *output_bfd
     }
 
   if (mapcount == 0)
-    return FALSE;
+    return false;
 
   if (globals->byteswap_code)
     {
@@ -19850,19 +19766,19 @@ elf32_arm_write_section (bfd *output_bfd
   arm_data->mapsize = 0;
   arm_data->map = NULL;
 
-  return FALSE;
+  return false;
 }
 
 /* Mangle thumb function symbols as we read them in.  */
 
-static bfd_boolean
+static bool
 elf32_arm_swap_symbol_in (bfd * abfd,
 			  const void *psrc,
 			  const void *pshn,
 			  Elf_Internal_Sym *dst)
 {
   if (!bfd_elf32_swap_symbol_in (abfd, psrc, pshn, dst))
-    return FALSE;
+    return false;
   dst->st_target_internal = 0;
 
   /* New EABI objects mark thumb function symbols by setting the low bit of
@@ -19889,7 +19805,7 @@ elf32_arm_swap_symbol_in (bfd * abfd,
   else
     ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, ST_BRANCH_UNKNOWN);
 
-  return TRUE;
+  return true;
 }
 
 
@@ -19932,7 +19848,7 @@ elf32_arm_swap_symbol_out (bfd *abfd,
 
 /* Add the PT_ARM_EXIDX program header.  */
 
-static bfd_boolean
+static bool
 elf32_arm_modify_segment_map (bfd *abfd,
 			      struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
@@ -19953,7 +19869,7 @@ elf32_arm_modify_segment_map (bfd *abfd,
 	  m = (struct elf_segment_map *)
 	      bfd_zalloc (abfd, sizeof (struct elf_segment_map));
 	  if (m == NULL)
-	    return FALSE;
+	    return false;
 	  m->p_type = PT_ARM_EXIDX;
 	  m->count = 1;
 	  m->sections[0] = sec;
@@ -19963,7 +19879,7 @@ elf32_arm_modify_segment_map (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We may add a PT_ARM_EXIDX program header.  */
@@ -19984,20 +19900,20 @@ elf32_arm_additional_program_headers (bf
 /* Hook called by the linker routine which adds symbols from an object
    file.  */
 
-static bfd_boolean
+static bool
 elf32_arm_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
 			   Elf_Internal_Sym *sym, const char **namep,
 			   flagword *flagsp, asection **secp, bfd_vma *valp)
 {
   if (elf32_arm_hash_table (info) == NULL)
-    return FALSE;
+    return false;
 
-  if (elf32_arm_hash_table (info)->vxworks_p
+  if (elf32_arm_hash_table (info)->root.target_os == is_vxworks
       && !elf_vxworks_add_symbol_hook (abfd, info, sym, namep,
 				       flagsp, secp, valp))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* We use this to override swap_symbol_in and swap_symbol_out.  */
@@ -20055,11 +19971,15 @@ read_code16 (const bfd *abfd, const bfd_
    or (bfd_vma) -1 if size can not be determined.  */
 
 static bfd_vma
-elf32_arm_plt0_size (const bfd *abfd, const bfd_byte *addr)
+elf32_arm_plt0_size (const bfd *abfd, const bfd_byte *addr,
+		     bfd_size_type data_size)
 {
   bfd_vma first_word;
   bfd_vma plt0_size;
 
+  if (data_size < 4)
+    return (bfd_vma) -1;
+
   first_word = read_code32 (abfd, addr);
 
   if (first_word == elf32_arm_plt0_entry[0])
@@ -20078,24 +19998,28 @@ elf32_arm_plt0_size (const bfd *abfd, co
    or (bfd_vma) -1 if size can not be determined.  */
 
 static bfd_vma
-elf32_arm_plt_size (const bfd *abfd, const bfd_byte *start, bfd_vma offset)
+elf32_arm_plt_size (const bfd *abfd, const bfd_byte *start, bfd_vma offset,
+		    bfd_size_type data_size)
 {
   bfd_vma first_insn;
   bfd_vma plt_size = 0;
-  const bfd_byte *addr = start + offset;
 
   /* PLT entry size if fixed on Thumb-only platforms.  */
   if (read_code32 (abfd, start) == elf32_thumb2_plt0_entry[0])
-      return 4 * ARRAY_SIZE (elf32_thumb2_plt_entry);
+    return 4 * ARRAY_SIZE (elf32_thumb2_plt_entry);
 
   /* Respect Thumb stub if necessary.  */
-  if (read_code16 (abfd, addr) == elf32_arm_plt_thumb_stub[0])
+  if (offset + 2 > data_size)
+    return (bfd_vma) -1;
+  if (read_code16 (abfd, start + offset) == elf32_arm_plt_thumb_stub[0])
     {
-      plt_size += 2 * ARRAY_SIZE(elf32_arm_plt_thumb_stub);
+      plt_size += 2 * ARRAY_SIZE (elf32_arm_plt_thumb_stub);
     }
 
   /* Strip immediate from first add.  */
-  first_insn = read_code32 (abfd, addr + plt_size) & 0xffffff00;
+  if (offset + plt_size + 4 > data_size)
+    return (bfd_vma) -1;
+  first_insn = read_code32 (abfd, start + offset + plt_size) & 0xffffff00;
 
 #ifdef FOUR_WORD_PLT
   if (first_insn == elf32_arm_plt_entry[0])
@@ -20155,18 +20079,14 @@ elf32_arm_get_synthetic_symtab (bfd *abf
   if (plt == NULL)
     return 0;
 
-  if (!elf32_arm_size_info.slurp_reloc_table (abfd, relplt, dynsyms, TRUE))
+  if (!elf32_arm_size_info.slurp_reloc_table (abfd, relplt, dynsyms, true))
     return -1;
 
-  data = plt->contents;
-  if (data == NULL)
-    {
-      if (!bfd_get_full_section_contents(abfd, (asection *) plt, &data) || data == NULL)
-	return -1;
-      bfd_cache_section_contents((asection *) plt, data);
-    }
+  data = NULL;
+  if (!bfd_get_full_section_contents (abfd, plt, &data))
+    return -1;
 
-  count = relplt->size / hdr->sh_entsize;
+  count = NUM_SHDR_ENTRIES (hdr);
   size = count * sizeof (asymbol);
   p = relplt->relocation;
   for (i = 0; i < count; i++, p += elf32_arm_size_info.int_rels_per_ext_rel)
@@ -20176,13 +20096,13 @@ elf32_arm_get_synthetic_symtab (bfd *abf
 	size += sizeof ("+0x") - 1 + 8;
     }
 
-  s = *ret = (asymbol *) bfd_malloc (size);
-  if (s == NULL)
-    return -1;
-
-  offset = elf32_arm_plt0_size (abfd, data);
-  if (offset == (bfd_vma) -1)
-    return -1;
+  offset = elf32_arm_plt0_size (abfd, data, plt->size);
+  if (offset == (bfd_vma) -1
+      || (s = *ret = (asymbol *) bfd_malloc (size)) == NULL)
+    {
+      free (data);
+      return -1;
+    }
 
   names = (char *) (s + count);
   p = relplt->relocation;
@@ -20191,7 +20111,7 @@ elf32_arm_get_synthetic_symtab (bfd *abf
     {
       size_t len;
 
-      bfd_vma plt_size = elf32_arm_plt_size (abfd, data, offset);
+      bfd_vma plt_size = elf32_arm_plt_size (abfd, data, offset, plt->size);
       if (plt_size == (bfd_vma) -1)
 	break;
 
@@ -20227,15 +20147,16 @@ elf32_arm_get_synthetic_symtab (bfd *abf
       offset += plt_size;
     }
 
+  free (data);
   return n;
 }
 
-static bfd_boolean
-elf32_arm_section_flags (flagword *flags, const Elf_Internal_Shdr * hdr)
+static bool
+elf32_arm_section_flags (const Elf_Internal_Shdr *hdr)
 {
   if (hdr->sh_flags & SHF_ARM_PURECODE)
-    *flags |= SEC_ELF_PURECODE;
-  return TRUE;
+    hdr->bfd_section->flags |= SEC_ELF_PURECODE;
+  return true;
 }
 
 static flagword
@@ -20261,7 +20182,7 @@ elf32_arm_count_additional_relocs (asect
    FALSE otherwise.  ISECTION is the best guess matching section from the
    input bfd IBFD, but it might be NULL.  */
 
-static bfd_boolean
+static bool
 elf32_arm_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
 				       bfd *obfd ATTRIBUTE_UNUSED,
 				       const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED,
@@ -20328,7 +20249,7 @@ elf32_arm_copy_special_section_fields (c
 	       then the index section should be too.  */
 	    if (oheaders[i]->sh_flags & SHF_GROUP)
 	      osection->sh_flags |= SHF_GROUP;
-	    return TRUE;
+	    return true;
 	  }
       }
       break;
@@ -20344,7 +20265,7 @@ elf32_arm_copy_special_section_fields (c
       break;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Returns TRUE if NAME is an ARM mapping symbol.
@@ -20354,7 +20275,7 @@ elf32_arm_copy_special_section_fields (c
    Other tools might also produce $b (Thumb BL), $f, $p, $m and $v, but we do
    not support them here.  $t.x indicates the start of ThumbEE instructions.  */
 
-static bfd_boolean
+static bool
 is_arm_mapping_symbol (const char * name)
 {
   return name != NULL /* Paranoia.  */
@@ -20390,12 +20311,7 @@ elf32_arm_backend_symbol_processing (bfd
 #define ELF_ARCH			bfd_arch_arm
 #define ELF_TARGET_ID			ARM_ELF_DATA
 #define ELF_MACHINE_CODE		EM_ARM
-#ifdef __QNXTARGET__
 #define ELF_MAXPAGESIZE			0x1000
-#else
-#define ELF_MAXPAGESIZE			0x10000
-#endif
-#define ELF_MINPAGESIZE			0x1000
 #define ELF_COMMONPAGESIZE		0x1000
 
 #define bfd_elf32_mkobject			elf32_arm_mkobject
@@ -20457,7 +20373,7 @@ elf32_arm_backend_symbol_processing (bfd
 #define elf_backend_dtrel_excludes_plt 1
 
 #define elf_backend_got_header_size	12
-#define elf_backend_extern_protected_data 1
+#define elf_backend_extern_protected_data 0
 
 #undef	elf_backend_obj_attrs_vendor
 #define elf_backend_obj_attrs_vendor		"aeabi"
@@ -20475,7 +20391,7 @@ elf32_arm_backend_symbol_processing (bfd
 #undef	elf_backend_lookup_section_flags_hook
 #define elf_backend_lookup_section_flags_hook	elf32_arm_lookup_section_flags
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #include "elf32-target.h"
 
@@ -20504,8 +20420,6 @@ elf32_arm_nacl_link_hash_table_create (b
       struct elf32_arm_link_hash_table *htab
 	= (struct elf32_arm_link_hash_table *) ret;
 
-      htab->nacl_p = 1;
-
       htab->plt_header_size = 4 * ARRAY_SIZE (elf32_arm_nacl_plt0_entry);
       htab->plt_entry_size = 4 * ARRAY_SIZE (elf32_arm_nacl_plt_entry);
     }
@@ -20516,14 +20430,14 @@ elf32_arm_nacl_link_hash_table_create (b
    really need to use elf32_arm_modify_segment_map.  But we do it
    anyway just to reduce gratuitous differences with the stock ARM backend.  */
 
-static bfd_boolean
+static bool
 elf32_arm_nacl_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
 {
   return (elf32_arm_modify_segment_map (abfd, info)
 	  && nacl_modify_segment_map (abfd, info));
 }
 
-static bfd_boolean
+static bool
 elf32_arm_nacl_final_write_processing (bfd *abfd)
 {
   arm_final_write_processing (abfd);
@@ -20560,6 +20474,8 @@ elf32_arm_nacl_plt_sym_val (bfd_vma i, c
 #undef	ELF_MINPAGESIZE
 #undef	ELF_COMMONPAGESIZE
 
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS				is_nacl
 
 #include "elf32-target.h"
 
@@ -20571,7 +20487,6 @@ elf32_arm_nacl_plt_sym_val (bfd_vma i, c
 #undef  elf_backend_final_write_processing
 #define elf_backend_final_write_processing	elf32_arm_final_write_processing
 #undef	ELF_MINPAGESIZE
-#define ELF_MINPAGESIZE			0x1000
 #undef	ELF_COMMONPAGESIZE
 #define ELF_COMMONPAGESIZE		0x1000
 
@@ -20611,7 +20526,7 @@ elf32_arm_fdpic_link_hash_table_create (
 
 /* We need dynamic symbols for every section, since segments can
    relocate independently.  */
-static bfd_boolean
+static bool
 elf32_arm_fdpic_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
 				    struct bfd_link_info *info
 				    ATTRIBUTE_UNUSED,
@@ -20624,12 +20539,12 @@ elf32_arm_fdpic_omit_section_dynsym (bfd
       /* If sh_type is yet undecided, assume it could be
 	 SHT_PROGBITS/SHT_NOBITS.  */
     case SHT_NULL:
-      return FALSE;
+      return false;
 
       /* There shouldn't be section relative relocations
 	 against any other section.  */
     default:
-      return TRUE;
+      return true;
     }
 }
 
@@ -20642,6 +20557,8 @@ elf32_arm_fdpic_omit_section_dynsym (bfd
 #undef elf_backend_omit_section_dynsym
 #define elf_backend_omit_section_dynsym		elf32_arm_fdpic_omit_section_dynsym
 
+#undef ELF_TARGET_OS
+
 #include "elf32-target.h"
 
 #undef elf_match_priority
@@ -20673,12 +20590,11 @@ elf32_arm_vxworks_link_hash_table_create
       struct elf32_arm_link_hash_table *htab
 	= (struct elf32_arm_link_hash_table *) ret;
       htab->use_rel = 0;
-      htab->vxworks_p = 1;
     }
   return ret;
 }
 
-static bfd_boolean
+static bool
 elf32_arm_vxworks_final_write_processing (bfd *abfd)
 {
   arm_final_write_processing (abfd);
@@ -20705,6 +20621,8 @@ elf32_arm_vxworks_final_write_processing
 #define elf_backend_want_plt_sym	1
 #undef  ELF_MAXPAGESIZE
 #define ELF_MAXPAGESIZE			0x1000
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS			is_vxworks
 
 #include "elf32-target.h"
 
@@ -20712,24 +20630,24 @@ elf32_arm_vxworks_final_write_processing
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf32_arm_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword out_flags;
   flagword in_flags;
-  bfd_boolean flags_compatible = TRUE;
+  bool flags_compatible = true;
   asection *sec;
 
   /* Check if we have the same endianness.  */
   if (! _bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   if (! is_arm_elf (ibfd) || ! is_arm_elf (obfd))
-    return TRUE;
+    return true;
 
   if (!elf32_arm_merge_eabi_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   /* The input BFD must have had its flags initialised.  */
   /* The following seems bogus to me -- The flags are initialized in
@@ -20749,39 +20667,40 @@ elf32_arm_merge_private_bfd_data (bfd *i
     {
       _bfd_error_handler (_("error: %pB is already in final BE8 format"),
 			  ibfd);
-      return FALSE;
+      return false;
     }
 
   if (!elf_flags_init (obfd))
     {
-      /* If the input is the default architecture and had the default
-	 flags then do not bother setting the flags for the output
-	 architecture, instead allow future merges to do this.  If no
-	 future merges ever set these flags then they will retain their
-	 uninitialised values, which surprise surprise, correspond
-	 to the default values.  */
-      if (bfd_get_arch_info (ibfd)->the_default
-	  && elf_elfheader (ibfd)->e_flags == 0)
-	return TRUE;
-
-      elf_flags_init (obfd) = TRUE;
+      /* If the input has no flags set, then do not set the output flags.
+	 This will allow future bfds to determine the desired output flags.
+	 If no input bfds have any flags set, then neither will the output bfd.
+
+	 Note - we used to restrict this test to when the input architecture
+	 variant was the default variant, but this does not allow for
+	 linker scripts which override the default.  See PR 28910 for an
+	 example.  */
+      if (in_flags == 0)
+	return true;
+      
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
 	  && bfd_get_arch_info (obfd)->the_default)
 	return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), bfd_get_mach (ibfd));
 
-      return TRUE;
+      return true;
     }
 
   /* Determine what should happen if the input ARM architecture
      does not match the output ARM architecture.  */
   if (! bfd_arm_merge_machines (ibfd, obfd))
-    return FALSE;
+    return false;
 
   /* Identical flags must be compatible.  */
   if (in_flags == out_flags)
-    return TRUE;
+    return true;
 
   /* Check to see if the input BFD actually contains any sections.  If
      not, its flags may not have been initialised either, but it
@@ -20795,8 +20714,8 @@ elf32_arm_merge_private_bfd_data (bfd *i
     in data sections ?  */
   if (!(ibfd->flags & DYNAMIC))
     {
-      bfd_boolean null_input_bfd = TRUE;
-      bfd_boolean only_data_sections = TRUE;
+      bool null_input_bfd = true;
+      bool only_data_sections = true;
 
       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
 	{
@@ -20807,15 +20726,15 @@ elf32_arm_merge_private_bfd_data (bfd *i
 	      if ((bfd_section_flags (sec)
 		   & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
 		  == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
-		only_data_sections = FALSE;
+		only_data_sections = false;
 
-	      null_input_bfd = FALSE;
+	      null_input_bfd = false;
 	      break;
 	    }
 	}
 
       if (null_input_bfd || only_data_sections)
-	return TRUE;
+	return true;
     }
 
   /* Complain about various flag mismatches.  */
@@ -20826,7 +20745,7 @@ elf32_arm_merge_private_bfd_data (bfd *i
 	(_("error: source object %pB has EABI version %d, but target %pB has EABI version %d"),
 	 ibfd, (in_flags & EF_ARM_EABIMASK) >> 24,
 	 obfd, (out_flags & EF_ARM_EABIMASK) >> 24);
-      return FALSE;
+      return false;
     }
 
   /* Not sure what needs to be checked for EABI versions >= 1.  */
@@ -20841,7 +20760,7 @@ elf32_arm_merge_private_bfd_data (bfd *i
 	    (_("error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"),
 	     ibfd, in_flags & EF_ARM_APCS_26 ? 26 : 32,
 	     obfd, out_flags & EF_ARM_APCS_26 ? 26 : 32);
-	  flags_compatible = FALSE;
+	  flags_compatible = false;
 	}
 
       if ((in_flags & EF_ARM_APCS_FLOAT) != (out_flags & EF_ARM_APCS_FLOAT))
@@ -20855,7 +20774,7 @@ elf32_arm_merge_private_bfd_data (bfd *i
 	      (_("error: %pB passes floats in integer registers, whereas %pB passes them in float registers"),
 	       ibfd, obfd);
 
-	  flags_compatible = FALSE;
+	  flags_compatible = false;
 	}
 
       if ((in_flags & EF_ARM_VFP_FLOAT) != (out_flags & EF_ARM_VFP_FLOAT))
@@ -20869,7 +20788,7 @@ elf32_arm_merge_private_bfd_data (bfd *i
 	      (_("error: %pB uses %s instructions, whereas %pB does not"),
 	       ibfd, "FPA", obfd);
 
-	  flags_compatible = FALSE;
+	  flags_compatible = false;
 	}
 
       if ((in_flags & EF_ARM_MAVERICK_FLOAT) != (out_flags & EF_ARM_MAVERICK_FLOAT))
@@ -20883,7 +20802,7 @@ elf32_arm_merge_private_bfd_data (bfd *i
 	      (_("error: %pB does not use %s instructions, whereas %pB does"),
 	       ibfd, "Maverick", obfd);
 
-	  flags_compatible = FALSE;
+	  flags_compatible = false;
 	}
 
 #ifdef EF_ARM_SOFT_FLOAT
@@ -20906,7 +20825,7 @@ elf32_arm_merge_private_bfd_data (bfd *i
 		  (_("error: %pB uses hardware FP, whereas %pB uses software FP"),
 		   ibfd, obfd);
 
-	      flags_compatible = FALSE;
+	      flags_compatible = false;
 	    }
 	}
 #endif
@@ -20931,166 +20850,3 @@ elf32_arm_merge_private_bfd_data (bfd *i
 
   return flags_compatible;
 }
-
-
-/* Symbian OS Targets.  */
-
-#undef	TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM		arm_elf32_symbian_le_vec
-#undef	TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME		"elf32-littlearm-symbian"
-#undef	TARGET_BIG_SYM
-#define TARGET_BIG_SYM			arm_elf32_symbian_be_vec
-#undef	TARGET_BIG_NAME
-#define TARGET_BIG_NAME			"elf32-bigarm-symbian"
-
-/* Like elf32_arm_link_hash_table_create -- but overrides
-   appropriately for Symbian OS.  */
-
-static struct bfd_link_hash_table *
-elf32_arm_symbian_link_hash_table_create (bfd *abfd)
-{
-  struct bfd_link_hash_table *ret;
-
-  ret = elf32_arm_link_hash_table_create (abfd);
-  if (ret)
-    {
-      struct elf32_arm_link_hash_table *htab
-	= (struct elf32_arm_link_hash_table *)ret;
-      /* There is no PLT header for Symbian OS.  */
-      htab->plt_header_size = 0;
-      /* The PLT entries are each one instruction and one word.  */
-      htab->plt_entry_size = 4 * ARRAY_SIZE (elf32_arm_symbian_plt_entry);
-      htab->symbian_p = 1;
-      /* Symbian uses armv5t or above, so use_blx is always true.  */
-      htab->use_blx = 1;
-      htab->root.is_relocatable_executable = 1;
-    }
-  return ret;
-}
-
-static const struct bfd_elf_special_section
-elf32_arm_symbian_special_sections[] =
-{
-  /* In a BPABI executable, the dynamic linking sections do not go in
-     the loadable read-only segment.  The post-linker may wish to
-     refer to these sections, but they are not part of the final
-     program image.  */
-  { STRING_COMMA_LEN (".dynamic"),	 0, SHT_DYNAMIC,  0 },
-  { STRING_COMMA_LEN (".dynstr"),	 0, SHT_STRTAB,	  0 },
-  { STRING_COMMA_LEN (".dynsym"),	 0, SHT_DYNSYM,	  0 },
-  { STRING_COMMA_LEN (".got"),		 0, SHT_PROGBITS, 0 },
-  { STRING_COMMA_LEN (".hash"),		 0, SHT_HASH,	  0 },
-  /* These sections do not need to be writable as the SymbianOS
-     postlinker will arrange things so that no dynamic relocation is
-     required.  */
-  { STRING_COMMA_LEN (".init_array"),	 0, SHT_INIT_ARRAY,    SHF_ALLOC },
-  { STRING_COMMA_LEN (".fini_array"),	 0, SHT_FINI_ARRAY,    SHF_ALLOC },
-  { STRING_COMMA_LEN (".preinit_array"), 0, SHT_PREINIT_ARRAY, SHF_ALLOC },
-  { NULL,			      0, 0, 0,		       0 }
-};
-
-static void
-elf32_arm_symbian_begin_write_processing (bfd *abfd,
-					  struct bfd_link_info *link_info)
-{
-  /* BPABI objects are never loaded directly by an OS kernel; they are
-     processed by a postlinker first, into an OS-specific format.  If
-     the D_PAGED bit is set on the file, BFD will align segments on
-     page boundaries, so that an OS can directly map the file.  With
-     BPABI objects, that just results in wasted space.  In addition,
-     because we clear the D_PAGED bit, map_sections_to_segments will
-     recognize that the program headers should not be mapped into any
-     loadable segment.  */
-  abfd->flags &= ~D_PAGED;
-  elf32_arm_begin_write_processing (abfd, link_info);
-}
-
-static bfd_boolean
-elf32_arm_symbian_modify_segment_map (bfd *abfd,
-				      struct bfd_link_info *info)
-{
-  struct elf_segment_map *m;
-  asection *dynsec;
-
-  /* BPABI shared libraries and executables should have a PT_DYNAMIC
-     segment.  However, because the .dynamic section is not marked
-     with SEC_LOAD, the generic ELF code will not create such a
-     segment.  */
-  dynsec = bfd_get_section_by_name (abfd, ".dynamic");
-  if (dynsec)
-    {
-      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
-	if (m->p_type == PT_DYNAMIC)
-	  break;
-
-      if (m == NULL)
-	{
-	  m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
-	  m->next = elf_seg_map (abfd);
-	  elf_seg_map (abfd) = m;
-	}
-    }
-
-  /* Also call the generic arm routine.  */
-  return elf32_arm_modify_segment_map (abfd, info);
-}
-
-/* Return address for Ith PLT stub in section PLT, for relocation REL
-   or (bfd_vma) -1 if it should not be included.  */
-
-static bfd_vma
-elf32_arm_symbian_plt_sym_val (bfd_vma i, const asection *plt,
-			       const arelent *rel ATTRIBUTE_UNUSED)
-{
-  return plt->vma + 4 * ARRAY_SIZE (elf32_arm_symbian_plt_entry) * i;
-}
-
-#undef  elf32_bed
-#define elf32_bed elf32_arm_symbian_bed
-
-/* The dynamic sections are not allocated on SymbianOS; the postlinker
-   will process them and then discard them.  */
-#undef  ELF_DYNAMIC_SEC_FLAGS
-#define ELF_DYNAMIC_SEC_FLAGS \
-  (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED)
-
-#undef elf_backend_emit_relocs
-
-#undef  bfd_elf32_bfd_link_hash_table_create
-#define bfd_elf32_bfd_link_hash_table_create	elf32_arm_symbian_link_hash_table_create
-#undef  elf_backend_special_sections
-#define elf_backend_special_sections		elf32_arm_symbian_special_sections
-#undef  elf_backend_begin_write_processing
-#define elf_backend_begin_write_processing	elf32_arm_symbian_begin_write_processing
-#undef  elf_backend_final_write_processing
-#define elf_backend_final_write_processing	elf32_arm_final_write_processing
-
-#undef  elf_backend_modify_segment_map
-#define elf_backend_modify_segment_map elf32_arm_symbian_modify_segment_map
-
-/* There is no .got section for BPABI objects, and hence no header.  */
-#undef  elf_backend_got_header_size
-#define elf_backend_got_header_size 0
-
-/* Similarly, there is no .got.plt section.  */
-#undef  elf_backend_want_got_plt
-#define elf_backend_want_got_plt 0
-
-#undef  elf_backend_plt_sym_val
-#define elf_backend_plt_sym_val		elf32_arm_symbian_plt_sym_val
-
-#undef  elf_backend_may_use_rel_p
-#define elf_backend_may_use_rel_p	1
-#undef  elf_backend_may_use_rela_p
-#define elf_backend_may_use_rela_p	0
-#undef  elf_backend_default_use_rela_p
-#define elf_backend_default_use_rela_p	0
-#undef  elf_backend_want_plt_sym
-#define elf_backend_want_plt_sym	0
-#undef  elf_backend_dtrel_excludes_plt
-#define elf_backend_dtrel_excludes_plt	0
-#undef  ELF_MAXPAGESIZE
-#define ELF_MAXPAGESIZE			0x8000
-
-#include "elf32-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-arm.h ./bfd/elf32-arm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-arm.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-arm.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for ARM
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -37,7 +37,7 @@ extern void bfd_elf32_arm_set_vfp11_fix
 extern void bfd_elf32_arm_set_cortex_a8_fix
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan
+extern bool bfd_elf32_arm_vfp11_erratum_scan
   (bfd *, struct bfd_link_info *);
 
 extern void bfd_elf32_arm_vfp11_fix_veneer_locations
@@ -54,17 +54,17 @@ typedef enum
 extern void bfd_elf32_arm_set_stm32l4xx_fix
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean bfd_elf32_arm_stm32l4xx_erratum_scan
+extern bool bfd_elf32_arm_stm32l4xx_erratum_scan
   (bfd *, struct bfd_link_info *);
 
 extern void bfd_elf32_arm_stm32l4xx_fix_veneer_locations
   (bfd *, struct bfd_link_info *);
 
 /* ELF ARM Interworking support.  Called from linker.  */
-extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
+extern bool bfd_elf32_arm_allocate_interworking_sections
   (struct bfd_link_info *);
 
-extern bfd_boolean bfd_elf32_arm_process_before_allocation
+extern bool bfd_elf32_arm_process_before_allocation
   (bfd *, struct bfd_link_info *);
 
 struct elf32_arm_params {
@@ -89,10 +89,10 @@ struct elf32_arm_params {
 void bfd_elf32_arm_set_target_params
   (bfd *, struct bfd_link_info *, struct elf32_arm_params *);
 
-extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
+extern bool bfd_elf32_arm_get_bfd_for_interworking
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd
+extern bool bfd_elf32_arm_add_glue_sections_to_bfd
   (bfd *, struct bfd_link_info *);
 
 extern void bfd_elf32_arm_keep_private_stub_output_sections
@@ -108,14 +108,14 @@ extern int elf32_arm_setup_section_lists
   (bfd *, struct bfd_link_info *);
 extern void elf32_arm_next_input_section
   (struct bfd_link_info *, struct bfd_section *);
-extern bfd_boolean elf32_arm_size_stubs
+extern bool elf32_arm_size_stubs
   (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
    struct bfd_section * (*) (const char *, struct bfd_section *,
 			     struct bfd_section *, unsigned int),
    void (*) (void));
-extern bfd_boolean elf32_arm_build_stubs
+extern bool elf32_arm_build_stubs
   (struct bfd_link_info *);
 
 /* ARM unwind section editing support.  */
-extern bfd_boolean elf32_arm_fix_exidx_coverage
-(struct bfd_section **, unsigned int, struct bfd_link_info *, bfd_boolean);
+extern bool elf32_arm_fix_exidx_coverage
+(struct bfd_section **, unsigned int, struct bfd_link_info *, bool);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-avr.c ./bfd/elf32-avr.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-avr.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-avr.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* AVR-specific support for 32-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by Denis Chertykov <denisc@overta.ru>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -27,10 +27,10 @@
 #include "elf32-avr.h"
 
 /* Enable debugging printout at stdout with this variable.  */
-static bfd_boolean debug_relax = FALSE;
+static bool debug_relax = false;
 
 /* Enable debugging printout at stdout with this variable.  */
-static bfd_boolean debug_stubs = FALSE;
+static bool debug_stubs = false;
 
 static bfd_reloc_status_type
 bfd_elf_avr_diff_reloc (bfd *, arelent *, asymbol *, void *,
@@ -62,7 +62,7 @@ struct elf32_avr_stub_hash_entry
   bfd_vma target_value;
 
   /* This way we could mark stubs to be no longer necessary.  */
-  bfd_boolean is_actually_needed;
+  bool is_actually_needed;
 };
 
 struct elf32_avr_link_hash_table
@@ -73,7 +73,7 @@ struct elf32_avr_link_hash_table
   /* The stub hash table.  */
   struct bfd_hash_table bstab;
 
-  bfd_boolean no_stubs;
+  bool no_stubs;
 
   /* Linker stub bfd.  */
   bfd *stub_bfd;
@@ -106,9 +106,9 @@ struct elf32_avr_link_hash_table
 
 /* Various hash macros and functions.  */
 #define avr_link_hash_table(p) \
-  /* PR 3874: Check that we have an AVR style hash table before using it.  */\
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == AVR_ELF_DATA ? ((struct elf32_avr_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == AVR_ELF_DATA)		\
+   ? (struct elf32_avr_link_hash_table *) (p)->hash : NULL)
 
 #define avr_stub_hash_entry(ent) \
   ((struct elf32_avr_stub_hash_entry *)(ent))
@@ -121,541 +121,541 @@ static reloc_howto_type elf_avr_howto_ta
 {
   HOWTO (R_AVR_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_AVR_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 7 bit PC relative relocation.  */
   HOWTO (R_AVR_7_PCREL,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_AVR_7_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 13 bit PC relative relocation.  */
   HOWTO (R_AVR_13_PCREL,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 13,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_AVR_13_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_AVR_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit absolute relocation for command address
      Will be changed when linker stubs are needed.  */
   HOWTO (R_AVR_16_PM,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_16_PM",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A low 8 bit absolute relocation of 16 bit address.
      For LDI command.  */
   HOWTO (R_AVR_LO8_LDI,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_LO8_LDI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A high 8 bit absolute relocation of 16 bit address.
      For LDI command.  */
   HOWTO (R_AVR_HI8_LDI,		/* type */
 	 8,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_HI8_LDI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A high 6 bit absolute relocation of 22 bit address.
      For LDI command.  As well second most significant 8 bit value of
      a 32 bit link-time constant.  */
   HOWTO (R_AVR_HH8_LDI,		/* type */
 	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_HH8_LDI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A negative low 8 bit absolute relocation of 16 bit address.
      For LDI command.  */
   HOWTO (R_AVR_LO8_LDI_NEG,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_LO8_LDI_NEG",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A negative high 8 bit absolute relocation of 16 bit address.
      For LDI command.  */
   HOWTO (R_AVR_HI8_LDI_NEG,	/* type */
 	 8,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_HI8_LDI_NEG",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A negative high 6 bit absolute relocation of 22 bit address.
      For LDI command.  */
   HOWTO (R_AVR_HH8_LDI_NEG,	/* type */
 	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_HH8_LDI_NEG",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A low 8 bit absolute relocation of 24 bit program memory address.
      For LDI command.  Will not be changed when linker stubs are needed. */
   HOWTO (R_AVR_LO8_LDI_PM,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_LO8_LDI_PM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A low 8 bit absolute relocation of 24 bit program memory address.
      For LDI command.  Will not be changed when linker stubs are needed. */
   HOWTO (R_AVR_HI8_LDI_PM,	/* type */
 	 9,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_HI8_LDI_PM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A low 8 bit absolute relocation of 24 bit program memory address.
      For LDI command.  Will not be changed when linker stubs are needed. */
   HOWTO (R_AVR_HH8_LDI_PM,	/* type */
 	 17,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_HH8_LDI_PM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A low 8 bit absolute relocation of 24 bit program memory address.
      For LDI command.  Will not be changed when linker stubs are needed. */
   HOWTO (R_AVR_LO8_LDI_PM_NEG,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_LO8_LDI_PM_NEG", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A low 8 bit absolute relocation of 24 bit program memory address.
      For LDI command.  Will not be changed when linker stubs are needed. */
   HOWTO (R_AVR_HI8_LDI_PM_NEG,	/* type */
 	 9,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_HI8_LDI_PM_NEG", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A low 8 bit absolute relocation of 24 bit program memory address.
      For LDI command.  Will not be changed when linker stubs are needed. */
   HOWTO (R_AVR_HH8_LDI_PM_NEG,	/* type */
 	 17,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_HH8_LDI_PM_NEG", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* Relocation for CALL command in ATmega.  */
   HOWTO (R_AVR_CALL,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 23,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_CALL",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
   /* A 16 bit absolute relocation of 16 bit address.
      For LDI command.  */
   HOWTO (R_AVR_LDI,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_LDI",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A 6 bit absolute relocation of 6 bit offset.
      For ldd/sdd command.  */
   HOWTO (R_AVR_6,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_6",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A 6 bit absolute relocation of 6 bit offset.
      For sbiw/adiw command.  */
   HOWTO (R_AVR_6_ADIW,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_6_ADIW",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* Most significant 8 bit value of a 32 bit link-time constant.  */
   HOWTO (R_AVR_MS8_LDI,		/* type */
 	 24,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_MS8_LDI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* Negative most significant 8 bit value of a 32 bit link-time constant.  */
   HOWTO (R_AVR_MS8_LDI_NEG,	/* type */
 	 24,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_MS8_LDI_NEG",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A low 8 bit absolute relocation of 24 bit program memory address.
      For LDI command.  Will be changed when linker stubs are needed.  */
   HOWTO (R_AVR_LO8_LDI_GS,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_AVR_LO8_LDI_GS",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* A low 8 bit absolute relocation of 24 bit program memory address.
      For LDI command.  Will be changed when linker stubs are needed.  */
   HOWTO (R_AVR_HI8_LDI_GS,	/* type */
 	 9,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_AVR_HI8_LDI_GS",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* 8 bit offset.  */
   HOWTO (R_AVR_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* lo8-part to use in  .byte lo8(sym).  */
   HOWTO (R_AVR_8_LO8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_8_LO8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* hi8-part to use in  .byte hi8(sym).  */
   HOWTO (R_AVR_8_HI8,		/* type */
 	 8,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_8_HI8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* hlo8-part to use in  .byte hlo8(sym).  */
   HOWTO (R_AVR_8_HLO8,		/* type */
 	 16,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_8_HLO8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_AVR_DIFF8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_avr_diff_reloc, /* special_function */
 	 "R_AVR_DIFF8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_AVR_DIFF16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_avr_diff_reloc,/* special_function */
 	 "R_AVR_DIFF16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_AVR_DIFF32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_avr_diff_reloc,/* special_function */
 	 "R_AVR_DIFF32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* 7 bit immediate for LDS/STS in Tiny core.  */
   HOWTO (R_AVR_LDS_STS_16,  /* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_AVR_LDS_STS_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_AVR_PORT6,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_PORT6",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_AVR_PORT5,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 5,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AVR_PORT5",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit PC relative relocation.  */
   HOWTO (R_AVR_32_PCREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_AVR_32_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 /* Map BFD reloc types to AVR ELF reloc types.  */
@@ -761,17 +761,17 @@ struct elf_avr_section_data
 
 /* Possibly initialise avr specific data for new section SEC from ABFD.  */
 
-static bfd_boolean
+static bool
 elf_avr_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
       struct elf_avr_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -858,10 +858,8 @@ elf32_avr_link_hash_table_free (bfd *obf
     = (struct elf32_avr_link_hash_table *) obfd->link.hash;
 
   /* Free the address mapping table.  */
-  if (htab->amt_stub_offsets != NULL)
-    free (htab->amt_stub_offsets);
-  if (htab->amt_destination_addr != NULL)
-    free (htab->amt_destination_addr);
+  free (htab->amt_stub_offsets);
+  free (htab->amt_destination_addr);
 
   bfd_hash_table_free (&htab->bstab);
   _bfd_elf_link_hash_table_free (obfd);
@@ -875,7 +873,7 @@ static struct bfd_link_hash_table *
 elf32_avr_link_hash_table_create (bfd *abfd)
 {
   struct elf32_avr_link_hash_table *htab;
-  bfd_size_type amt = sizeof (*htab);
+  size_t amt = sizeof (*htab);
 
   htab = bfd_zmalloc (amt);
   if (htab == NULL)
@@ -950,7 +948,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an AVR ELF reloc.  */
 
-static bfd_boolean
+static bool
 avr_info_to_howto_rela (bfd *abfd,
 			arelent *cache_ptr,
 			Elf_Internal_Rela *dst)
@@ -964,13 +962,13 @@ avr_info_to_howto_rela (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_avr_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 avr_stub_is_required_for_16_bit_reloc (bfd_vma relocation)
 {
   return (relocation >= 0x020000);
@@ -1027,12 +1025,12 @@ avr_final_link_relocate (reloc_howto_typ
 			 struct elf32_avr_link_hash_table * htab)
 {
   bfd_reloc_status_type r = bfd_reloc_ok;
-  bfd_vma		x;
-  bfd_signed_vma	srel;
-  bfd_signed_vma	reloc_addr;
-  bfd_boolean		use_stubs = FALSE;
+  bfd_vma x;
+  bfd_signed_vma srel;
+  bfd_signed_vma reloc_addr;
+  bool use_stubs = false;
   /* Usually is 0, unless we are generating code for a bootloader.  */
-  bfd_signed_vma	base_addr = htab->vector_base;
+  bfd_signed_vma base_addr = htab->vector_base;
 
   /* Absolute addr of the reloc in the final excecutable.  */
   reloc_addr = rel->r_offset + input_section->output_section->vma
@@ -1050,11 +1048,11 @@ avr_final_link_relocate (reloc_howto_typ
 	       input_section->output_offset);
 
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
       if (srel > ((1 << 7) - 1) || (srel < - (1 << 7)))
 	return bfd_reloc_overflow;
       x = bfd_get_16 (input_bfd, contents);
-      x = (x & 0xfc07) | (((srel >> 1) << 3) & 0x3f8);
+      x = (x & 0xfc07) | (((srel >> 1) * 8) & 0x3f8);
       bfd_put_16 (input_bfd, x, contents);
       break;
 
@@ -1068,7 +1066,7 @@ avr_final_link_relocate (reloc_howto_typ
 	       input_section->output_offset);
 
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
 
       srel = avr_relative_distance_considering_wrap_around (srel);
 
@@ -1230,11 +1228,11 @@ avr_final_link_relocate (reloc_howto_typ
 		    (unsigned int) reloc_addr);
 
 	  if (avr_stub_is_required_for_16_bit_reloc (srel - base_addr))
-	    return bfd_reloc_outofrange;
+	    return bfd_reloc_overflow;
 	}
 
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
       srel = srel >> 1;
       x = bfd_get_16 (input_bfd, contents);
       x = (x & 0xf0f0) | (srel & 0xf) | ((srel << 4) & 0xf00);
@@ -1263,11 +1261,11 @@ avr_final_link_relocate (reloc_howto_typ
 		    (unsigned int) reloc_addr);
 
 	  if (avr_stub_is_required_for_16_bit_reloc (srel - base_addr))
-	    return bfd_reloc_outofrange;
+	    return bfd_reloc_overflow;
 	}
 
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
       srel = srel >> 1;
       srel = (srel >> 8) & 0xff;
       x = bfd_get_16 (input_bfd, contents);
@@ -1279,7 +1277,7 @@ avr_final_link_relocate (reloc_howto_typ
       contents += rel->r_offset;
       srel = (bfd_signed_vma) relocation + rel->r_addend;
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
       srel = srel >> 1;
       srel = (srel >> 16) & 0xff;
       x = bfd_get_16 (input_bfd, contents);
@@ -1292,7 +1290,7 @@ avr_final_link_relocate (reloc_howto_typ
       srel = (bfd_signed_vma) relocation + rel->r_addend;
       srel = -srel;
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
       srel = srel >> 1;
       x = bfd_get_16 (input_bfd, contents);
       x = (x & 0xf0f0) | (srel & 0xf) | ((srel << 4) & 0xf00);
@@ -1304,7 +1302,7 @@ avr_final_link_relocate (reloc_howto_typ
       srel = (bfd_signed_vma) relocation + rel->r_addend;
       srel = -srel;
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
       srel = srel >> 1;
       srel = (srel >> 8) & 0xff;
       x = bfd_get_16 (input_bfd, contents);
@@ -1317,7 +1315,7 @@ avr_final_link_relocate (reloc_howto_typ
       srel = (bfd_signed_vma) relocation + rel->r_addend;
       srel = -srel;
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
       srel = srel >> 1;
       srel = (srel >> 16) & 0xff;
       x = bfd_get_16 (input_bfd, contents);
@@ -1329,7 +1327,7 @@ avr_final_link_relocate (reloc_howto_typ
       contents += rel->r_offset;
       srel = (bfd_signed_vma) relocation + rel->r_addend;
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
       srel = srel >> 1;
       x = bfd_get_16 (input_bfd, contents);
       x |= ((srel & 0x10000) | ((srel << 3) & 0x1f00000)) >> 16;
@@ -1357,11 +1355,11 @@ avr_final_link_relocate (reloc_howto_typ
 		    (unsigned int) reloc_addr);
 
 	  if (avr_stub_is_required_for_16_bit_reloc (srel - base_addr))
-	    return bfd_reloc_outofrange;
+	    return bfd_reloc_overflow;
 	}
 
       if (srel & 1)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_other;
       srel = srel >> 1;
       bfd_put_16 (input_bfd, (bfd_vma) srel &0x00ffff, contents);
       break;
@@ -1377,7 +1375,7 @@ avr_final_link_relocate (reloc_howto_typ
       contents += rel->r_offset;
       srel = (bfd_signed_vma) relocation + rel->r_addend;
       if ((srel & 0xFFFF) < 0x40 || (srel & 0xFFFF) > 0xbf)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_overflow;
       srel = srel & 0x7f;
       x = bfd_get_16 (input_bfd, contents);
       x |= (srel & 0x0f) | ((srel & 0x30) << 5) | ((srel & 0x40) << 2);
@@ -1388,7 +1386,7 @@ avr_final_link_relocate (reloc_howto_typ
       contents += rel->r_offset;
       srel = (bfd_signed_vma) relocation + rel->r_addend;
       if ((srel & 0xffff) > 0x3f)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_overflow;
       x = bfd_get_16 (input_bfd, contents);
       x = (x & 0xf9f0) | ((srel & 0x30) << 5) | (srel & 0x0f);
       bfd_put_16 (input_bfd, x, contents);
@@ -1398,7 +1396,7 @@ avr_final_link_relocate (reloc_howto_typ
       contents += rel->r_offset;
       srel = (bfd_signed_vma) relocation + rel->r_addend;
       if ((srel & 0xffff) > 0x1f)
-	return bfd_reloc_outofrange;
+	return bfd_reloc_overflow;
       x = bfd_get_16 (input_bfd, contents);
       x = (x & 0xff07) | ((srel & 0x1f) << 3);
       bfd_put_16 (input_bfd, x, contents);
@@ -1415,7 +1413,7 @@ avr_final_link_relocate (reloc_howto_typ
 
 /* Relocate an AVR ELF section.  */
 
-static bfd_boolean
+static int
 elf32_avr_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 			    struct bfd_link_info *info,
 			    bfd *input_bfd,
@@ -1432,7 +1430,7 @@ elf32_avr_relocate_section (bfd *output_
   struct elf32_avr_link_hash_table * htab = avr_link_hash_table (info);
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (input_bfd);
@@ -1469,7 +1467,7 @@ elf32_avr_relocate_section (bfd *output_
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1491,8 +1489,6 @@ elf32_avr_relocate_section (bfd *output_
 
       if (r != bfd_reloc_ok)
 	{
-	  const char * msg = (const char *) NULL;
-
 	  switch (r)
 	    {
 	    case bfd_reloc_overflow:
@@ -1503,40 +1499,44 @@ elf32_avr_relocate_section (bfd *output_
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
-	      msg = _("internal error: out of range error");
+	      /* xgettext:c-format */
+	      (*info->callbacks->einfo)
+		(_("%X%H: %s against `%s':"
+		   " error: relocation applies outside section\n"),
+		 input_bfd, input_section, rel->r_offset, howto->name, name);
 	      break;
 
-	    case bfd_reloc_notsupported:
-	      msg = _("internal error: unsupported relocation error");
-	      break;
-
-	    case bfd_reloc_dangerous:
-	      msg = _("internal error: dangerous relocation");
+	    case bfd_reloc_other:
+	      /* xgettext:c-format */
+	      (*info->callbacks->einfo)
+		(_("%X%H: %s against `%s':"
+		   " error: relocation target address is odd\n"),
+		 input_bfd, input_section, rel->r_offset, howto->name, name);
 	      break;
 
 	    default:
-	      msg = _("internal error: unknown error");
+	      /* xgettext:c-format */
+	      (*info->callbacks->einfo)
+		(_("%X%H: %s against `%s':"
+		   " internal error: unexpected relocation result %d\n"),
+		 input_bfd, input_section, rel->r_offset, howto->name, name, r);
 	      break;
 	    }
-
-	  if (msg)
-	    (*info->callbacks->warning) (info, msg, name, input_bfd,
-					 input_section, rel->r_offset);
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* The final processing done just before writing out a AVR ELF object
    file.  This gets the AVR architecture right based on the machine
    number.  */
 
-static bfd_boolean
+static bool
 bfd_elf_avr_final_write_processing (bfd *abfd)
 {
   unsigned long val;
@@ -1625,7 +1625,7 @@ bfd_elf_avr_final_write_processing (bfd
 
 /* Set the right machine number.  */
 
-static bfd_boolean
+static bool
 elf32_avr_object_p (bfd *abfd)
 {
   unsigned int e_set = bfd_mach_avr2;
@@ -1717,7 +1717,7 @@ elf32_avr_object_p (bfd *abfd)
 
 /* Returns whether the relocation type passed is a diff reloc. */
 
-static bfd_boolean
+static bool
 elf32_avr_is_diff_reloc (Elf_Internal_Rela *irel)
 {
   return (ELF32_R_TYPE (irel->r_info) == R_AVR_DIFF8
@@ -1847,10 +1847,9 @@ elf32_avr_adjust_reloc_if_spans_insn (bf
   else
     {
       bfd_vma reloc_value = symval + irel->r_addend;
-      bfd_boolean addend_within_shrink_boundary =
-	(reloc_value <= shrink_boundary);
+      bool addend_within_shrink_boundary = reloc_value <= shrink_boundary;
 
-      bfd_boolean reloc_spans_insn =
+      bool reloc_spans_insn =
 	(symval <= shrinked_insn_address
 	 && reloc_value > shrinked_insn_address
 	 && addend_within_shrink_boundary);
@@ -1865,38 +1864,36 @@ elf32_avr_adjust_reloc_if_spans_insn (bf
     }
 }
 
-static bfd_boolean
+static bool
 avr_should_move_sym (symvalue symval,
 		     bfd_vma start,
 		     bfd_vma end,
-		     bfd_boolean did_pad)
+		     bool did_pad)
 {
-  bfd_boolean sym_within_boundary =
-	  did_pad ? symval < end : symval <= end;
+  bool sym_within_boundary = did_pad ? symval < end : symval <= end;
   return (symval > start && sym_within_boundary);
 }
 
-static bfd_boolean
+static bool
 avr_should_reduce_sym_size (symvalue symval,
 			    symvalue symend,
 			    bfd_vma start,
 			    bfd_vma end,
-			    bfd_boolean did_pad)
+			    bool did_pad)
 {
-  bfd_boolean sym_end_within_boundary =
-	  did_pad ? symend < end : symend <= end;
+  bool sym_end_within_boundary = did_pad ? symend < end : symend <= end;
   return (symval <= start && symend > start && sym_end_within_boundary);
 }
 
-static bfd_boolean
+static bool
 avr_should_increase_sym_size (symvalue symval,
 			      symvalue symend,
 			      bfd_vma start,
 			      bfd_vma end,
-			      bfd_boolean did_pad)
+			      bool did_pad)
 {
-  return avr_should_move_sym (symval, start, end, did_pad)
-	  && symend >= end && did_pad;
+  return (avr_should_move_sym (symval, start, end, did_pad)
+	  && symend >= end && did_pad);
 }
 
 /* Delete some bytes from a section while changing the size of an instruction.
@@ -1907,12 +1904,12 @@ avr_should_increase_sym_size (symvalue s
    record handling. In that case, addr is section-relative offset of start
    of padding, and count is the number of padding bytes to delete. */
 
-static bfd_boolean
+static bool
 elf32_avr_relax_delete_bytes (bfd *abfd,
 			      asection *sec,
 			      bfd_vma addr,
 			      int count,
-			      bfd_boolean delete_shrinks_insn)
+			      bool delete_shrinks_insn)
 {
   Elf_Internal_Shdr *symtab_hdr;
   unsigned int sec_shndx;
@@ -1926,8 +1923,8 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
   unsigned int symcount;
   struct avr_relax_info *relax_info;
   struct avr_property_record *prop_record = NULL;
-  bfd_boolean did_shrink = FALSE;
-  bfd_boolean did_pad = FALSE;
+  bool did_shrink = false;
+  bool did_pad = false;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
@@ -1966,12 +1963,12 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
     {
       memmove (contents + addr, contents + addr + count,
 	       (size_t) (toaddr - addr - count));
-      did_shrink = TRUE;
+      did_shrink = true;
     }
   if (prop_record == NULL)
     {
       sec->size -= count;
-      did_shrink = TRUE;
+      did_shrink = true;
     }
   else
     {
@@ -1997,11 +1994,11 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
 	 to remember we didn't delete anything i.e. don't set did_shrink,
 	 so that we don't corrupt reloc offsets or symbol values.*/
       memset (contents + toaddr - count, fill, count);
-      did_pad = TRUE;
+      did_pad = true;
     }
 
   if (!did_shrink)
-    return TRUE;
+    return true;
 
   /* Adjust all the reloc addresses.  */
   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
@@ -2057,7 +2054,7 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
        irel = elf_section_data (isec)->relocs;
        /* PR 12161: Read in the relocs for this section if necessary.  */
        if (irel == NULL)
-	 irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, TRUE);
+	 irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, true);
 
        for (irelend = irel + isec->reloc_count;
 	    irel < irelend;
@@ -2073,7 +2070,7 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
 						 symtab_hdr->sh_info, 0,
 						 NULL, NULL, NULL);
 	       if (isymbuf == NULL)
-		 return FALSE;
+		 return false;
 	     }
 
 	   /* Get the value of the symbol referred to by the reloc.  */
@@ -2188,7 +2185,7 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static Elf_Internal_Sym *
@@ -2454,11 +2451,11 @@ avr_load_all_property_sections (struct b
    contains 4-byte jump instructions whose relative offset must not
    be changed.  */
 
-static bfd_boolean
+static bool
 elf32_avr_relax_section (bfd *abfd,
 			 asection *sec,
 			 struct bfd_link_info *link_info,
-			 bfd_boolean *again)
+			 bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -2466,11 +2463,11 @@ elf32_avr_relax_section (bfd *abfd,
   bfd_byte *contents = NULL;
   Elf_Internal_Sym *isymbuf = NULL;
   struct elf32_avr_link_hash_table *htab;
-  static bfd_boolean relaxation_initialised = FALSE;
+  static bool relaxation_initialised = false;
 
   if (!relaxation_initialised)
     {
-      relaxation_initialised = TRUE;
+      relaxation_initialised = true;
 
       /* Load entries from the .avr.prop sections.  */
       avr_load_all_property_sections (link_info);
@@ -2480,11 +2477,11 @@ elf32_avr_relax_section (bfd *abfd,
      relaxing. Such shrinking can cause issues for the sections such
      as .vectors and .jumptables. Instead the unused bytes should be
      filled with nop instructions. */
-  bfd_boolean shrinkable = TRUE;
+  bool shrinkable = true;
 
   if (!strcmp (sec->name,".vectors")
       || !strcmp (sec->name,".jumptables"))
-    shrinkable = FALSE;
+    shrinkable = false;
 
   if (bfd_link_relocatable (link_info))
     (*link_info->callbacks->einfo)
@@ -2492,10 +2489,10 @@ elf32_avr_relax_section (bfd *abfd,
 
   htab = avr_link_hash_table (link_info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   if ((!htab->no_stubs) && (sec == htab->stub_sec))
     {
@@ -2508,32 +2505,33 @@ elf32_avr_relax_section (bfd *abfd,
 		(int) last_estimated_stub_section_size);
 
       elf32_avr_size_stubs (htab->stub_sec->output_section->owner,
-			    link_info, FALSE);
+			    link_info, false);
 
       /* Check if the number of trampolines changed.  */
       if (last_estimated_stub_section_size != htab->stub_sec->size)
-	*again = TRUE;
+	*again = true;
 
       if (debug_relax)
 	printf ("Size of stub section after this pass: %i\n",
 		(int) htab->stub_sec->size);
 
-      return TRUE;
+      return true;
     }
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   /* Check if the object file to relax uses internal symbols so that we
      could fix up the relocations.  */
   if (!(elf_elfheader (abfd)->e_flags & EF_AVR_LINKRELAX_PREPARED))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -2750,12 +2748,12 @@ elf32_avr_relax_section (bfd *abfd,
 		    /* Delete two bytes of data.  */
 		    if (!elf32_avr_relax_delete_bytes (abfd, sec,
 						       irel->r_offset + 2, 2,
-						       TRUE))
+						       true))
 		      goto error_return;
 
 		    /* That will change things, so, we should relax again.
 		       Note that this is not required, and it may be slow.  */
-		    *again = TRUE;
+		    *again = true;
 		  }
 	      }
 	  }
@@ -2801,7 +2799,7 @@ elf32_avr_relax_section (bfd *abfd,
 		      printf ("converted rcall/ret sequence at address 0x%x"
 			      " into rjmp/ret sequence. Section is %s\n\n",
 			      (int) dot, sec->name);
-		    *again = TRUE;
+		    *again = true;
 		    break;
 		  }
 	      }
@@ -2832,7 +2830,7 @@ elf32_avr_relax_section (bfd *abfd,
 		      printf ("converted call/ret sequence at address 0x%x"
 			      " into jmp/ret sequence. Section is %s\n\n",
 			      (int) dot, sec->name);
-		    *again = TRUE;
+		    *again = true;
 		    break;
 		  }
 	      }
@@ -2995,7 +2993,7 @@ elf32_avr_relax_section (bfd *abfd,
 
 			    rel = elf_section_data (isec)->relocs;
 			    if (rel == NULL)
-			      rel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, TRUE);
+			      rel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, true);
 
 			    relend = rel + isec->reloc_count;
 
@@ -3073,16 +3071,20 @@ elf32_avr_relax_section (bfd *abfd,
 				      "at address 0x%x deleted.\n",
 				      (int) dot + insn_size);
 
+			    elf_section_data (sec)->relocs = internal_relocs;
+			    elf_section_data (sec)->this_hdr.contents = contents;
+			    symtab_hdr->contents = (unsigned char *) isymbuf;
+
 			    /* Delete two bytes of data.  */
 			    if (!elf32_avr_relax_delete_bytes (abfd, sec,
 							       irel->r_offset + insn_size, 2,
-							       TRUE))
+							       true))
 			      goto error_return;
 
 			    /* That will change things, so, we should relax
 			       again. Note that this is not required, and it
 			       may be slow.  */
-			    *again = TRUE;
+			    *again = true;
 			    break;
 			  }
 		      }
@@ -3144,8 +3146,8 @@ elf32_avr_relax_section (bfd *abfd,
 			record->offset -= count;
 			elf32_avr_relax_delete_bytes (abfd, sec,
 						      addr - count,
-						      count, FALSE);
-			*again = TRUE;
+						      count, false);
+			*again = true;
 		      }
 		  }
 		  break;
@@ -3166,24 +3168,20 @@ elf32_avr_relax_section (bfd *abfd,
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 /* This is a version of bfd_generic_get_relocated_section_contents
@@ -3199,7 +3197,7 @@ elf32_avr_get_relocated_section_contents
 					  struct bfd_link_info *link_info,
 					  struct bfd_link_order *link_order,
 					  bfd_byte *data,
-					  bfd_boolean relocatable,
+					  bool relocatable,
 					  asymbol **symbols)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -3219,6 +3217,13 @@ elf32_avr_get_relocated_section_contents
 						       symbols);
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
 
+  bfd_byte *orig_data = data;
+  if (data == NULL)
+    {
+      data = bfd_malloc (input_section->size);
+      if (data == NULL)
+	return NULL;
+    }
   memcpy (data, elf_section_data (input_section)->this_hdr.contents,
 	  (size_t) input_section->size);
 
@@ -3230,7 +3235,7 @@ elf32_avr_get_relocated_section_contents
       bfd_size_type amt;
 
       internal_relocs = (_bfd_elf_link_read_relocs
-			 (input_bfd, input_section, NULL, NULL, FALSE));
+			 (input_bfd, input_section, NULL, NULL, false));
       if (internal_relocs == NULL)
 	goto error_return;
 
@@ -3273,10 +3278,8 @@ elf32_avr_get_relocated_section_contents
 					isymbuf, sections))
 	goto error_return;
 
-      if (sections != NULL)
-	free (sections);
-      if (isymbuf != NULL
-	  && symtab_hdr->contents != (unsigned char *) isymbuf)
+      free (sections);
+      if (symtab_hdr->contents != (unsigned char *) isymbuf)
 	free (isymbuf);
       if (elf_section_data (input_section)->relocs != internal_relocs)
 	free (internal_relocs);
@@ -3285,14 +3288,13 @@ elf32_avr_get_relocated_section_contents
   return data;
 
  error_return:
-  if (sections != NULL)
-    free (sections);
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  free (sections);
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (input_section)->relocs != internal_relocs)
+  if (elf_section_data (input_section)->relocs != internal_relocs)
     free (internal_relocs);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
@@ -3330,7 +3332,7 @@ avr_add_stub (const char *stub_name,
   struct elf32_avr_stub_hash_entry *hsh;
 
   /* Enter this entry into the linker stub hash table.  */
-  hsh = avr_stub_hash_lookup (&htab->bstab, stub_name, TRUE, FALSE);
+  hsh = avr_stub_hash_lookup (&htab->bstab, stub_name, true, false);
 
   if (hsh == NULL)
     {
@@ -3351,7 +3353,7 @@ avr_add_stub (const char *stub_name,
    relative to the trampoline section start to the stub_offset entry in
    the stub hash table entry.  */
 
-static  bfd_boolean
+static  bool
 avr_build_one_stub (struct bfd_hash_entry *bh, void *in_arg)
 {
   struct elf32_avr_stub_hash_entry *hsh;
@@ -3369,13 +3371,13 @@ avr_build_one_stub (struct bfd_hash_entr
   hsh = avr_stub_hash_entry (bh);
 
   if (!hsh->is_actually_needed)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) in_arg;
 
   htab = avr_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   target = hsh->target_value;
 
@@ -3395,7 +3397,7 @@ avr_build_one_stub (struct bfd_hash_entr
 
   /* Check for the alignment of the address.  */
   if (target & 1)
-     return FALSE;
+     return false;
 
   starget = target >> 1;
   jmp_insn |= ((starget & 0x10000) | ((starget << 3) & 0x1f00000)) >> 16;
@@ -3419,22 +3421,22 @@ avr_build_one_stub (struct bfd_hash_entr
       }
   }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 avr_mark_stub_not_to_be_necessary (struct bfd_hash_entry *bh,
 				   void *in_arg ATTRIBUTE_UNUSED)
 {
   struct elf32_avr_stub_hash_entry *hsh;
 
   hsh = avr_stub_hash_entry (bh);
-  hsh->is_actually_needed = FALSE;
+  hsh->is_actually_needed = false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 avr_size_one_stub (struct bfd_hash_entry *bh, void *in_arg)
 {
   struct elf32_avr_stub_hash_entry *hsh;
@@ -3451,18 +3453,18 @@ avr_size_one_stub (struct bfd_hash_entry
     size = 0;
 
   htab->stub_sec->size += size;
-  return TRUE;
+  return true;
 }
 
 void
 elf32_avr_setup_params (struct bfd_link_info *info,
 			bfd *avr_stub_bfd,
 			asection *avr_stub_section,
-			bfd_boolean no_stubs,
-			bfd_boolean deb_stubs,
-			bfd_boolean deb_relax,
+			bool no_stubs,
+			bool deb_stubs,
+			bool deb_relax,
 			bfd_vma pc_wrap_around,
-			bfd_boolean call_ret_replacement)
+			bool call_ret_replacement)
 {
   struct elf32_avr_link_hash_table *htab = avr_link_hash_table (info);
 
@@ -3494,7 +3496,7 @@ elf32_avr_setup_section_lists (bfd *outp
   unsigned int top_id, top_index;
   asection *section;
   asection **input_list, **list;
-  bfd_size_type amt;
+  size_t amt;
   struct elf32_avr_link_hash_table *htab = avr_link_hash_table (info);
 
   if (htab == NULL || htab->no_stubs)
@@ -3558,7 +3560,7 @@ get_local_syms (bfd *input_bfd, struct b
   unsigned int bfd_indx;
   Elf_Internal_Sym *local_syms, **all_local_syms;
   struct elf32_avr_link_hash_table *htab = avr_link_hash_table (info);
-  bfd_size_type amt;
+  size_t amt;
 
   if (htab == NULL)
     return -1;
@@ -3607,17 +3609,17 @@ get_local_syms (bfd *input_bfd, struct b
 
 #define ADD_DUMMY_STUBS_FOR_DEBUGGING 0
 
-bfd_boolean
+bool
 elf32_avr_size_stubs (bfd *output_bfd,
 		      struct bfd_link_info *info,
-		      bfd_boolean is_prealloc_run)
+		      bool is_prealloc_run)
 {
   struct elf32_avr_link_hash_table *htab;
   int stub_changed = 0;
 
   htab = avr_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* At this point we initialize htab->vector_base
      To the start of the text output section.  */
@@ -3627,7 +3629,7 @@ elf32_avr_size_stubs (bfd *output_bfd,
     {
       if (htab->all_local_syms)
 	goto error_ret_free_local;
-      return FALSE;
+      return false;
     }
 
   if (ADD_DUMMY_STUBS_FOR_DEBUGGING)
@@ -3808,13 +3810,13 @@ elf32_avr_size_stubs (bfd *output_bfd,
 
 		  hsh = avr_stub_hash_lookup (&htab->bstab,
 					      stub_name,
-					      FALSE, FALSE);
+					      false, false);
 		  if (hsh != NULL)
 		    {
 		      /* The proper stub has already been created.  Mark it
 			 to be used and write the possibly changed destination
 			 value.  */
-		      hsh->is_actually_needed = TRUE;
+		      hsh->is_actually_needed = true;
 		      hsh->target_value = destination;
 		      free (stub_name);
 		      continue;
@@ -3827,7 +3829,7 @@ elf32_avr_size_stubs (bfd *output_bfd,
 		      goto error_ret_free_internal;
 		    }
 
-		  hsh->is_actually_needed = TRUE;
+		  hsh->is_actually_needed = true;
 		  hsh->target_value = destination;
 
 		  if (debug_stubs)
@@ -3836,7 +3838,7 @@ elf32_avr_size_stubs (bfd *output_bfd,
 		  if (debug_stubs)
 		    printf ("(Pre-Alloc run: %i)\n", is_prealloc_run);
 
-		  stub_changed = TRUE;
+		  stub_changed = true;
 		}
 
 	      /* We're done with the internal relocs, free them.  */
@@ -3852,15 +3854,15 @@ elf32_avr_size_stubs (bfd *output_bfd,
       if (!stub_changed)
 	break;
 
-      stub_changed = FALSE;
+      stub_changed = false;
     }
 
   free (htab->all_local_syms);
-  return TRUE;
+  return true;
 
  error_ret_free_local:
   free (htab->all_local_syms);
-  return FALSE;
+  return false;
 }
 
 
@@ -3870,7 +3872,7 @@ elf32_avr_size_stubs (bfd *output_bfd,
    functions here.  This function is called via hppaelf_finish in the
    linker.  */
 
-bfd_boolean
+bool
 elf32_avr_build_stubs (struct bfd_link_info *info)
 {
   asection *stub_sec;
@@ -3880,7 +3882,7 @@ elf32_avr_build_stubs (struct bfd_link_i
 
   htab = avr_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* In case that there were several stub sections:  */
   for (stub_sec = htab->stub_bfd->sections;
@@ -3895,7 +3897,7 @@ elf32_avr_build_stubs (struct bfd_link_i
 
       stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
       if (stub_sec->contents == NULL && size != 0)
-	return FALSE;
+	return false;
       stub_sec->size = 0;
     }
 
@@ -3917,7 +3919,7 @@ elf32_avr_build_stubs (struct bfd_link_i
   if (debug_stubs)
     printf ("Final Stub section Size: %i\n", (int) htab->stub_sec->size);
 
-  return TRUE;
+  return true;
 }
 
 /* Callback used by QSORT to order relocations AP and BP.  */
@@ -3946,7 +3948,7 @@ internal_reloc_compare (const void *ap,
 
 /* Return true if ADDRESS is within the vma range of SECTION from ABFD.  */
 
-static bfd_boolean
+static bool
 avr_is_section_for_address (asection *section, bfd_vma address)
 {
   bfd_vma vma;
@@ -3954,13 +3956,13 @@ avr_is_section_for_address (asection *se
 
   vma = bfd_section_vma (section);
   if (address < vma)
-    return FALSE;
+    return false;
 
   size = section->size;
   if (address >= vma + size)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Data structure used by AVR_FIND_SECTION_FOR_ADDRESS.  */
@@ -4012,7 +4014,7 @@ avr_find_section_for_address (bfd *abfd
 static struct avr_property_record_list *
 avr_elf32_load_records_from_section (bfd *abfd, asection *sec)
 {
-  char *contents = NULL, *ptr;
+  bfd_byte *contents, *ptr;
   bfd_size_type size, mem_size;
   bfd_byte version, flags;
   uint16_t record_count, i;
@@ -4022,15 +4024,14 @@ avr_elf32_load_records_from_section (bfd
 
   fs_data.section = NULL;
 
-  size = bfd_section_size (sec);
-  contents = bfd_malloc (size);
-  bfd_get_section_contents (abfd, sec, contents, 0, size);
+  if (!bfd_malloc_and_get_section (abfd, sec, &contents))
+    goto load_failed;
   ptr = contents;
 
   /* Load the relocations for the '.avr.prop' section if there are any, and
      sort them.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, sec, NULL, NULL, FALSE));
+		     (abfd, sec, NULL, NULL, false));
   if (internal_relocs)
     qsort (internal_relocs, sec->reloc_count,
 	   sizeof (Elf_Internal_Rela), internal_reloc_compare);
@@ -4043,15 +4044,16 @@ avr_elf32_load_records_from_section (bfd
   */
 
   /* Check we have at least got a headers worth of bytes.  */
+  size = bfd_section_size (sec);
   if (size < AVR_PROPERTY_SECTION_HEADER_SIZE)
     goto load_failed;
 
-  version = *((bfd_byte *) ptr);
+  version = *ptr;
   ptr++;
-  flags = *((bfd_byte *) ptr);
+  flags = *ptr;
   ptr++;
-  record_count = *((uint16_t *) ptr);
-  ptr+=2;
+  record_count = bfd_get_16 (abfd, ptr);
+  ptr += 2;
   BFD_ASSERT (ptr - contents == AVR_PROPERTY_SECTION_HEADER_SIZE);
 
   /* Now allocate space for the list structure, and all of the list
@@ -4117,7 +4119,7 @@ avr_elf32_load_records_from_section (bfd
 	    }
 	}
 
-      address = *((uint32_t *) ptr);
+      address = bfd_get_32 (abfd, ptr);
       ptr += 4;
       size -= 4;
 
@@ -4146,7 +4148,7 @@ avr_elf32_load_records_from_section (bfd
 	    = address - bfd_section_vma (fs_data.section);
 	}
 
-      r_list->records [i].type = *((bfd_byte *) ptr);
+      r_list->records [i].type = *ptr;
       ptr += 1;
       size -= 1;
 
@@ -4159,7 +4161,7 @@ avr_elf32_load_records_from_section (bfd
 	  /* Just a 4-byte fill to load.  */
 	  if (size < 4)
 	    goto load_failed;
-	  r_list->records [i].data.org.fill = *((uint32_t *) ptr);
+	  r_list->records [i].data.org.fill = bfd_get_32 (abfd, ptr);
 	  ptr += 4;
 	  size -= 4;
 	  break;
@@ -4167,7 +4169,7 @@ avr_elf32_load_records_from_section (bfd
 	  /* Just a 4-byte alignment to load.  */
 	  if (size < 4)
 	    goto load_failed;
-	  r_list->records [i].data.align.bytes = *((uint32_t *) ptr);
+	  r_list->records [i].data.align.bytes = bfd_get_32 (abfd, ptr);
 	  ptr += 4;
 	  size -= 4;
 	  /* Just initialise PRECEDING_DELETED field, this field is
@@ -4178,9 +4180,9 @@ avr_elf32_load_records_from_section (bfd
 	  /* A 4-byte alignment, and a 4-byte fill to load.  */
 	  if (size < 8)
 	    goto load_failed;
-	  r_list->records [i].data.align.bytes = *((uint32_t *) ptr);
+	  r_list->records [i].data.align.bytes = bfd_get_32 (abfd, ptr);
 	  ptr += 4;
-	  r_list->records [i].data.align.fill = *((uint32_t *) ptr);
+	  r_list->records [i].data.align.fill = bfd_get_32 (abfd, ptr);
 	  ptr += 4;
 	  size -= 8;
 	  /* Just initialise PRECEDING_DELETED field, this field is
@@ -4215,7 +4217,7 @@ avr_elf32_load_property_records (bfd *ab
 
   /* Find the '.avr.prop' section and load the contents into memory.  */
   sec = bfd_get_section_by_name (abfd, AVR_PROPERTY_RECORD_SECTION_NAME);
-  if (sec == NULL)
+  if (sec == NULL || (sec->flags & SEC_HAS_CONTENTS) == 0)
     return NULL;
   return avr_elf32_load_records_from_section (abfd, sec);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-avr.h ./bfd/elf32-avr.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-avr.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-avr.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* AVR-specific support for 32-bit ELF.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    Written by Bjoern Haase <bjoern.m.haase@web.de>
 
@@ -25,16 +25,15 @@
 
 extern void
 elf32_avr_setup_params (struct bfd_link_info *, bfd *, asection *,
-			bfd_boolean, bfd_boolean, bfd_boolean,
-			bfd_vma, bfd_boolean);
+			bool, bool, bool, bfd_vma, bool);
 
 extern int
 elf32_avr_setup_section_lists (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
-elf32_avr_size_stubs (bfd *, struct bfd_link_info *, bfd_boolean);
+extern bool
+elf32_avr_size_stubs (bfd *, struct bfd_link_info *, bool);
 
-extern bfd_boolean
+extern bool
 elf32_avr_build_stubs (struct bfd_link_info *);
 
 /* The name of the section into which the property records are stored.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-bfin.c ./bfd/elf32-bfin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-bfin.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-bfin.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ADI Blackfin BFD support for 32-bit ELF.
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -58,9 +58,9 @@ bfin_pcrel24_reloc (bfd *abfd,
   bfd_vma output_base = 0;
   reloc_howto_type *howto = reloc_entry->howto;
   asection *output_section;
-  bfd_boolean relocatable = (output_bfd != NULL);
+  bool relocatable = (output_bfd != NULL);
 
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+  if (!bfd_reloc_offset_in_range (howto, abfd, input_section, addr - 2))
     return bfd_reloc_outofrange;
 
   if (bfd_is_und_section (symbol->section)
@@ -155,10 +155,10 @@ bfin_imm16_reloc (bfd *abfd,
   bfd_vma output_base = 0;
   reloc_howto_type *howto = reloc_entry->howto;
   asection *output_section;
-  bfd_boolean relocatable = (output_bfd != NULL);
+  bool relocatable = (output_bfd != NULL);
 
   /* Is the address of the relocation really within the section?  */
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+  if (!bfd_reloc_offset_in_range (howto, abfd, input_section, reloc_addr))
     return bfd_reloc_outofrange;
 
   if (bfd_is_und_section (symbol->section)
@@ -226,10 +226,11 @@ bfin_byte4_reloc (bfd *abfd,
   bfd_size_type addr = reloc_entry->address;
   bfd_vma output_base = 0;
   asection *output_section;
-  bfd_boolean relocatable = (output_bfd != NULL);
+  bool relocatable = (output_bfd != NULL);
 
   /* Is the address of the relocation really within the section?  */
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd, input_section,
+				  addr))
     return bfd_reloc_outofrange;
 
   if (bfd_is_und_section (symbol->section)
@@ -293,10 +294,10 @@ bfin_bfd_reloc (bfd *abfd,
   bfd_vma output_base = 0;
   reloc_howto_type *howto = reloc_entry->howto;
   asection *output_section;
-  bfd_boolean relocatable = (output_bfd != NULL);
+  bool relocatable = (output_bfd != NULL);
 
   /* Is the address of the relocation really within the section?  */
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+  if (!bfd_reloc_offset_in_range (howto, abfd, input_section, addr))
     return bfd_reloc_outofrange;
 
   if (bfd_is_und_section (symbol->section)
@@ -374,9 +375,9 @@ bfin_bfd_reloc (bfd *abfd,
   x = ( (x & ~howto->dst_mask) | (relocation & howto->dst_mask))
 
   /* handle 8 and 16 bit relocations here. */
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
-    case 0:
+    case 1:
       {
 	char x = bfd_get_8 (abfd, (char *) data + addr);
 	DOIT (x);
@@ -384,7 +385,7 @@ bfin_bfd_reloc (bfd *abfd,
       }
       break;
 
-    case 1:
+    case 2:
       {
 	unsigned short x = bfd_get_16 (abfd, (bfd_byte *) data + addr);
 	DOIT (x);
@@ -424,59 +425,59 @@ static reloc_howto_type bfin_howto_table
   /* This reloc does nothing. .  */
   HOWTO (R_BFIN_UNUSED0,	/* type.  */
 	 0,			/* rightshift.  */
-	 3,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* size.  */
 	 0,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont, /* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_BFIN_UNUSED0",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0,			/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
   HOWTO (R_BFIN_PCREL5M2,	/* type.  */
 	 1,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)..  */
+	 2,			/* size.  */
 	 4,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_unsigned, /* complain_on_overflow.  */
 	 bfin_bfd_reloc,	/* special_function.  */
 	 "R_BFIN_PCREL5M2",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x0000000F,		/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
   HOWTO (R_BFIN_UNUSED1,	/* type.  */
 	 0,			/* rightshift.  */
-	 3,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* size.  */
 	 0,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont, /* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_BFIN_UNUSED1",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0,			/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
   HOWTO (R_BFIN_PCREL10,	/* type.  */
 	 1,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 10,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfin_bfd_reloc,	/* special_function.  */
 	 "R_BFIN_PCREL10",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x000003FF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_PCREL12_JUMP,	/* type.  */
 	 1,			/* rightshift.  */
@@ -484,511 +485,511 @@ static reloc_howto_type bfin_howto_table
 				   aligned on a word boundary so
 				   only 12 bits have to be used.
 				   Right shift the rightmost bit..  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 12,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfin_bfd_reloc,	/* special_function.  */
 	 "R_BFIN_PCREL12_JUMP",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x0FFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_RIMM16,		/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfin_imm16_reloc,	/* special_function.  */
 	 "R_BFIN_RIMM16",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x0000FFFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_LUIMM16,	/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont, /* complain_on_overflow.  */
 	 bfin_imm16_reloc,	/* special_function.  */
 	 "R_BFIN_LUIMM16",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x0000FFFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_HUIMM16,	/* type.  */
 	 16,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_unsigned, /* complain_on_overflow.  */
 	 bfin_imm16_reloc,	/* special_function.  */
 	 "R_BFIN_HUIMM16",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x0000FFFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_PCREL12_JUMP_S,	/* type.  */
 	 1,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 12,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfin_bfd_reloc,	/* special_function.  */
 	 "R_BFIN_PCREL12_JUMP_S", /* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x00000FFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_PCREL24_JUMP_X,	/* type.  */
 	 1,			/* rightshift.  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* size.  */
 	 24,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfin_pcrel24_reloc,	/* special_function.  */
 	"R_BFIN_PCREL24_JUMP_X", /* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x00FFFFFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_PCREL24,	/* type.  */
 	 1,			/* rightshift.  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* size.  */
 	 24,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfin_pcrel24_reloc,	/* special_function.  */
 	 "R_BFIN_PCREL24",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x00FFFFFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_UNUSEDB,	/* type.  */
 	 0,			/* rightshift.  */
-	 3,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* size.  */
 	 0,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont, /* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_BFIN_UNUSEDB",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0,			/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
   HOWTO (R_BFIN_UNUSEDC,	/* type.  */
 	 0,			/* rightshift.  */
-	 3,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* size.  */
 	 0,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont, /* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_BFIN_UNUSEDC",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0,			/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
   HOWTO (R_BFIN_PCREL24_JUMP_L,	/* type.  */
 	 1,			/* rightshift.  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* size.  */
 	 24,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfin_pcrel24_reloc,	/* special_function.  */
 	 "R_BFIN_PCREL24_JUMP_L", /* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x00FFFFFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_PCREL24_CALL_X,	/* type.  */
 	 1,			/* rightshift.  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* size.  */
 	 24,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfin_pcrel24_reloc,	/* special_function.  */
 	 "R_BFIN_PCREL24_CALL_X", /* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x00FFFFFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_VAR_EQ_SYMB,	/* type.  */
 	 0,			/* rightshift.  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* size.  */
 	 32,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_bitfield, /* complain_on_overflow.  */
 	 bfin_bfd_reloc,	/* special_function.  */
 	 "R_BFIN_VAR_EQ_SYMB",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0,			/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
   HOWTO (R_BFIN_BYTE_DATA,	/* type.  */
 	 0,			/* rightshift.  */
-	 0,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 1,			/* size.  */
 	 8,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_unsigned, /* complain_on_overflow.  */
 	 bfin_bfd_reloc,	/* special_function.  */
 	 "R_BFIN_BYTE_DATA",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0xFF,			/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_BYTE2_DATA,	/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfin_bfd_reloc,	/* special_function.  */
 	 "R_BFIN_BYTE2_DATA",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0xFFFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_BYTE4_DATA,	/* type.  */
 	 0,			/* rightshift.  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* size.  */
 	 32,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_unsigned, /* complain_on_overflow.  */
 	 bfin_byte4_reloc,	/* special_function.  */
 	 "R_BFIN_BYTE4_DATA",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0xFFFFFFFF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 
   HOWTO (R_BFIN_PCREL11,	/* type.  */
 	 1,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 10,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_unsigned, /* complain_on_overflow.  */
 	 bfin_bfd_reloc,	/* special_function.  */
 	 "R_BFIN_PCREL11",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x000003FF,		/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
 
   /* A 18-bit signed operand with the GOT offset for the address of
      the symbol.  */
   HOWTO (R_BFIN_GOT17M4,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_GOT17M4",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the address of the
      symbol.  */
   HOWTO (R_BFIN_GOTHI,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_GOTHI",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the address of the
      symbol.  */
   HOWTO (R_BFIN_GOTLO,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_GOTLO",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The 32-bit address of the canonical descriptor of a function.  */
   HOWTO (R_BFIN_FUNCDESC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_FUNCDESC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the GOT offset for the address of
      canonical descriptor of a function.  */
   HOWTO (R_BFIN_FUNCDESC_GOT17M4,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_FUNCDESC_GOT17M4", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the address of the
      canonical descriptor of a function.  */
   HOWTO (R_BFIN_FUNCDESC_GOTHI,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_FUNCDESC_GOTHI", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the address of the
      canonical descriptor of a function.  */
   HOWTO (R_BFIN_FUNCDESC_GOTLO,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_FUNCDESC_GOTLO", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The 32-bit address of the canonical descriptor of a function.  */
   HOWTO (R_BFIN_FUNCDESC_VALUE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_FUNCDESC_VALUE", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the GOT offset for the address of
      canonical descriptor of a function.  */
   HOWTO (R_BFIN_FUNCDESC_GOTOFF17M4, /* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_FUNCDESC_GOTOFF17M4", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the address of the
      canonical descriptor of a function.  */
   HOWTO (R_BFIN_FUNCDESC_GOTOFFHI, /* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_FUNCDESC_GOTOFFHI", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the address of the
      canonical descriptor of a function.  */
   HOWTO (R_BFIN_FUNCDESC_GOTOFFLO, /* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_FUNCDESC_GOTOFFLO", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the GOT offset for the address of
      the symbol.  */
   HOWTO (R_BFIN_GOTOFF17M4,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_GOTOFF17M4",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the address of the
      symbol.  */
   HOWTO (R_BFIN_GOTOFFHI,	 /* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_GOTOFFHI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the address of the
      symbol.  */
   HOWTO (R_BFIN_GOTOFFLO,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_BFIN_GOTOFFLO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 static reloc_howto_type bfin_gnuext_howto_table [] =
 {
   HOWTO (R_BFIN_PLTPC,		/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_bitfield, /* complain_on_overflow.  */
 	 bfin_pltpc_reloc,	/* special_function.  */
 	 "R_BFIN_PLTPC",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0xffff,		/* src_mask.  */
 	 0xffff,		/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
   HOWTO (R_BFIN_GOT,		/* type.  */
 	 0,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 16,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_bitfield, /* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_BFIN_GOT",		/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0x7fff,		/* src_mask.  */
 	 0x7fff,		/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
 /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_BFIN_GNU_VTINHERIT,	/* type.  */
 	 0,			/* rightshift.  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* size.  */
 	 0,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont, /* complain_on_overflow.  */
 	 NULL,			/* special_function.  */
 	 "R_BFIN_GNU_VTINHERIT", /* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0,			/* dst_mask.  */
-	 FALSE),		/* pcrel_offset.  */
+	 false),		/* pcrel_offset.  */
 
 /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_BFIN_GNU_VTENTRY,	/* type.  */
 	 0,			/* rightshift.  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* size.  */
 	 0,			/* bitsize.  */
-	 FALSE,			/* pc_relative.  */
+	 false,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_dont, /* complain_on_overflow.  */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function.  */
 	 "R_BFIN_GNU_VTENTRY",	/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0,			/* dst_mask.  */
-	 FALSE)			/* pcrel_offset.  */
+	 false)			/* pcrel_offset.  */
 };
 
 struct bfin_reloc_map
@@ -1041,7 +1042,7 @@ static const struct bfin_reloc_map bfin_
 };
 
 
-static bfd_boolean
+static bool
 bfin_info_to_howto (bfd *abfd,
 		    arelent *cache_ptr,
 		    Elf_Internal_Rela *dst)
@@ -1062,10 +1063,10 @@ bfin_info_to_howto (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Given a BFD reloc type, return the howto.  */
@@ -1129,12 +1130,12 @@ bfin_reloc_type_lookup (bfd * abfd ATTRI
 }
 
 /* Set by ld emulation if --code-in-l1.  */
-bfd_boolean elf32_bfin_code_in_l1 = 0;
+bool elf32_bfin_code_in_l1 = 0;
 
 /* Set by ld emulation if --data-in-l1.  */
-bfd_boolean elf32_bfin_data_in_l1 = 0;
+bool elf32_bfin_data_in_l1 = 0;
 
-static bfd_boolean
+static bool
 elf32_bfin_final_write_processing (bfd *abfd)
 {
   if (elf32_bfin_code_in_l1)
@@ -1146,11 +1147,11 @@ elf32_bfin_final_write_processing (bfd *
 
 /* Return TRUE if the name is a local label.
    bfin local labels begin with L$.  */
-static bfd_boolean
+static bool
 bfin_is_local_label_name (bfd *abfd, const char *label)
 {
   if (label[0] == 'L' && label[1] == '$' )
-    return TRUE;
+    return true;
 
   return _bfd_elf_is_local_label_name (abfd, label);
 }
@@ -1159,7 +1160,7 @@ bfin_is_local_label_name (bfd *abfd, con
    allocate space in the global offset table or procedure linkage
    table.  */
 
-static bfd_boolean
+static bool
 bfin_check_relocs (bfd * abfd,
 		   struct bfd_link_info *info,
 		   asection *sec,
@@ -1175,7 +1176,7 @@ bfin_check_relocs (bfd * abfd,
   asection *srelgot;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -1197,6 +1198,9 @@ bfin_check_relocs (bfd * abfd,
       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;
 	}
 
       switch (ELF32_R_TYPE (rel->r_info))
@@ -1205,14 +1209,14 @@ bfin_check_relocs (bfd * abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_BFIN_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries
 	   are actually used.  Record for later use during GC.  */
 	case R_BFIN_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_BFIN_GOT:
@@ -1226,7 +1230,7 @@ bfin_check_relocs (bfd * abfd,
 	      /* Create the .got section.  */
 	      elf_hash_table (info)->dynobj = dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return FALSE;
+		return false;
 	    }
 
 	  sgot = elf_hash_table (info)->sgot;
@@ -1241,7 +1245,7 @@ bfin_check_relocs (bfd * abfd,
 		  if (h->dynindx == -1 && !h->forced_local)
 		    {
 		      if (!bfd_elf_link_record_dynamic_symbol (info, h))
-			return FALSE;
+			return false;
 		    }
 
 		  /* Allocate space in the .got section.  */
@@ -1263,7 +1267,7 @@ bfin_check_relocs (bfd * abfd,
 		  local_got_refcounts = ((bfd_signed_vma *)
 					 bfd_zalloc (abfd, size));
 		  if (local_got_refcounts == NULL)
-		    return FALSE;
+		    return false;
 		  elf_local_got_refcounts (abfd) = local_got_refcounts;
 		}
 	      if (local_got_refcounts[r_symndx] == 0)
@@ -1286,7 +1290,7 @@ bfin_check_relocs (bfd * abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -1314,8 +1318,9 @@ bfin_final_link_relocate (Elf_Internal_R
       bfd_reloc_status_type r = bfd_reloc_ok;
       bfd_vma x;
 
-      if (address > bfd_get_section_limit (input_bfd, input_section))
-	return bfd_reloc_outofrange;
+      if (!bfd_reloc_offset_in_range (howto, input_bfd, input_section,
+				      address - 2))
+	  return bfd_reloc_outofrange;
 
       value += addend;
 
@@ -1354,7 +1359,7 @@ bfin_final_link_relocate (Elf_Internal_R
 
 }
 
-static bfd_boolean
+static int
 bfin_relocate_section (bfd * output_bfd,
 		       struct bfd_link_info *info,
 		       bfd * input_bfd,
@@ -1391,7 +1396,7 @@ bfin_relocate_section (bfd * output_bfd,
       Elf_Internal_Sym *sym;
       asection *sec;
       bfd_vma relocation = 0;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_reloc_status_type r;
       bfd_vma address;
 
@@ -1399,7 +1404,7 @@ bfin_relocate_section (bfd * output_bfd,
       if (r_type < 0 || r_type >= 243)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_type == R_BFIN_GNU_VTENTRY
@@ -1410,14 +1415,14 @@ bfin_relocate_section (bfd * output_bfd,
       if (howto == NULL)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       r_symndx = ELF32_R_SYM (rel->r_info);
 
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -1427,7 +1432,7 @@ bfin_relocate_section (bfd * output_bfd,
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1469,7 +1474,7 @@ bfin_relocate_section (bfd * output_bfd,
 		/* Create the .got section.  */
 		elf_hash_table (info)->dynobj = dynobj = output_bfd;
 		if (!_bfd_elf_create_got_section (dynobj, info))
-		  return FALSE;
+		  return false;
 	      }
 
 	    sgot = elf_hash_table (info)->sgot;
@@ -1477,7 +1482,7 @@ bfin_relocate_section (bfd * output_bfd,
 
 	    if (h != NULL)
 	      {
-		bfd_boolean dyn;
+		bool dyn;
 
 		off = h->got.offset;
 		BFD_ASSERT (off != (bfd_vma) - 1);
@@ -1514,7 +1519,7 @@ bfin_relocate_section (bfd * output_bfd,
 		      }
 		  }
 		else
-		  unresolved_reloc = FALSE;
+		  unresolved_reloc = false;
 	      }
 	    else
 	      {
@@ -1585,7 +1590,7 @@ bfin_relocate_section (bfd * output_bfd,
 	       "unresolvable relocation against symbol `%s'"),
 	     input_bfd, input_section, (uint64_t) rel->r_offset,
 	     h->root.root.string);
-	  return FALSE;
+	  return false;
 	}
 
       if (r != bfd_reloc_ok)
@@ -1600,7 +1605,7 @@ bfin_relocate_section (bfd * output_bfd,
 						      symtab_hdr->sh_link,
 						      sym->st_name);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      if (*name == '\0')
 		name = bfd_section_name (sec);
 	    }
@@ -1616,12 +1621,12 @@ bfin_relocate_section (bfd * output_bfd,
 		(_("%pB(%pA+%#" PRIx64 "): reloc against `%s': error %d"),
 		 input_bfd, input_section, (uint64_t) rel->r_offset,
 		 name, (int) r);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static asection *
@@ -1668,9 +1673,10 @@ struct bfinfdpic_elf_link_hash_table
 
 /* Get the Blackfin ELF linker hash table from a link_info structure.  */
 
-#define bfinfdpic_hash_table(info) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((info)->hash)) \
-  == BFIN_ELF_DATA ? ((struct bfinfdpic_elf_link_hash_table *) ((info)->hash)) : NULL)
+#define bfinfdpic_hash_table(p) \
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == BFIN_ELF_DATA)		\
+   ? (struct bfinfdpic_elf_link_hash_table *) (p)->hash : NULL)
 
 #define bfinfdpic_got_section(info) \
   (bfinfdpic_hash_table (info)->elf.sgot)
@@ -1728,7 +1734,7 @@ static struct bfd_link_hash_table *
 bfinfdpic_elf_link_hash_table_create (bfd *abfd)
 {
   struct bfinfdpic_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct bfinfdpic_elf_link_hash_table);
+  size_t amt = sizeof (struct bfinfdpic_elf_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -2046,7 +2052,7 @@ _bfinfdpic_osec_to_segment (bfd *output_
   return (p != NULL) ? p - elf_tdata (output_bfd)->phdr : -1;
 }
 
-inline static bfd_boolean
+inline static bool
 _bfinfdpic_osec_readonly_p (bfd *output_bfd, asection *osec)
 {
   unsigned seg = _bfinfdpic_osec_to_segment (output_bfd, osec);
@@ -2057,7 +2063,7 @@ _bfinfdpic_osec_readonly_p (bfd *output_
 /* Generate relocations for GOT entries, function descriptors, and
    code for PLT and lazy PLT entries.  */
 
-inline static bfd_boolean
+inline static bool
 _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry,
 					bfd *output_bfd,
 					struct bfd_link_info *info,
@@ -2069,7 +2075,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (
   int dynindx = -1;
 
   if (entry->done)
-    return TRUE;
+    return true;
   entry->done = 1;
 
   if (entry->got_entry || entry->fdgot_entry || entry->fd_entry)
@@ -2185,7 +2191,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (
 	      idx = dynindx;
 	      ad = addend;
 	      if (ad)
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
@@ -2329,7 +2335,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (
       else if (entry->lazyplt)
 	{
 	  if (ad)
-	    return FALSE;
+	    return false;
 
 	  fd_lazy_rel_offset = ofst;
 
@@ -2450,7 +2456,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relocate an Blackfin ELF section.
@@ -2483,7 +2489,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 bfinfdpic_relocate_section (bfd * output_bfd,
 			    struct bfd_link_info *info,
 			    bfd * input_bfd,
@@ -2546,12 +2552,13 @@ bfinfdpic_relocate_section (bfd * output
       if (howto == NULL)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       h      = NULL;
       sym    = NULL;
       sec    = NULL;
+      picrel = NULL;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -2565,8 +2572,8 @@ bfinfdpic_relocate_section (bfd * output
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
-	  bfd_boolean unresolved_reloc;
+	  bool warned, ignored;
+	  bool unresolved_reloc;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -2614,6 +2621,9 @@ bfinfdpic_relocate_section (bfd * output
 	case R_BFIN_FUNCDESC_GOTOFFLO:
 	case R_BFIN_FUNCDESC:
 	case R_BFIN_FUNCDESC_VALUE:
+	  if ((input_section->flags & SEC_ALLOC) == 0)
+	    break;
+
 	  if (h != NULL)
 	    picrel = bfinfdpic_relocs_info_for_global (bfinfdpic_relocs_info
 						       (info), input_bfd, h,
@@ -2626,7 +2636,7 @@ bfinfdpic_relocate_section (bfd * output
 						      (info), input_bfd, r_symndx,
 						      orig_addend, INSERT);
 	  if (! picrel)
-	    return FALSE;
+	    return false;
 
 	  if (!_bfinfdpic_emit_got_relocs_plt_entries (picrel, output_bfd, info,
 						       osec, sym,
@@ -2637,7 +2647,7 @@ bfinfdpic_relocate_section (bfd * output
 		(_("%pB: relocation at `%pA+%#" PRIx64 "' "
 		   "references symbol `%s' with nonzero addend"),
 		 input_bfd, input_section, (uint64_t) rel->r_offset, name);
-	      return FALSE;
+	      return false;
 
 	    }
 
@@ -2653,7 +2663,7 @@ bfinfdpic_relocate_section (bfd * output
 	      info->callbacks->warning
 		(info, _("relocation references symbol not defined in the module"),
 		 name, input_bfd, input_section, rel->r_offset);
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 	}
@@ -2719,129 +2729,130 @@ bfinfdpic_relocate_section (bfd * output
 	  break;
 
 	case R_BFIN_FUNCDESC:
-	  {
-	    int dynindx;
-	    bfd_vma addend = rel->r_addend;
+	  if ((input_section->flags & SEC_ALLOC) != 0)
+	    {
+	      int dynindx;
+	      bfd_vma addend = rel->r_addend;
 
-	    if (! (h && h->root.type == bfd_link_hash_undefweak
-		   && BFINFDPIC_SYM_LOCAL (info, h)))
-	      {
-		/* If the symbol is dynamic and there may be dynamic
-		   symbol resolution because we are or are linked with a
-		   shared library, emit a FUNCDESC relocation such that
-		   the dynamic linker will allocate the function
-		   descriptor.  If the symbol needs a non-local function
-		   descriptor but binds locally (e.g., its visibility is
-		   protected, emit a dynamic relocation decayed to
-		   section+offset.  */
-		if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h)
-		    && BFINFDPIC_SYM_LOCAL (info, h)
-		    && !bfd_link_pde (info))
-		  {
-		    dynindx = elf_section_data (h->root.u.def.section
-						->output_section)->dynindx;
-		    addend += h->root.u.def.section->output_offset
-		      + h->root.u.def.value;
-		  }
-		else if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h))
-		  {
-		    if (addend)
-		      {
-			info->callbacks->warning
-			  (info, _("R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"),
-			   name, input_bfd, input_section, rel->r_offset);
-			return FALSE;
-		      }
-		    dynindx = h->dynindx;
-		  }
-		else
-		  {
-		    /* Otherwise, we know we have a private function
-		       descriptor, so reference it directly.  */
-		    BFD_ASSERT (picrel->privfd);
-		    r_type = R_BFIN_BYTE4_DATA;
-		    dynindx = elf_section_data (bfinfdpic_got_section (info)
-						->output_section)->dynindx;
-		    addend = bfinfdpic_got_section (info)->output_offset
-		      + bfinfdpic_got_initial_offset (info)
-		      + picrel->fd_entry;
-		  }
+	      if (! (h && h->root.type == bfd_link_hash_undefweak
+		     && BFINFDPIC_SYM_LOCAL (info, h)))
+		{
+		  /* If the symbol is dynamic and there may be dynamic
+		     symbol resolution because we are or are linked with a
+		     shared library, emit a FUNCDESC relocation such that
+		     the dynamic linker will allocate the function
+		     descriptor.  If the symbol needs a non-local function
+		     descriptor but binds locally (e.g., its visibility is
+		     protected, emit a dynamic relocation decayed to
+		     section+offset.  */
+		  if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h)
+		      && BFINFDPIC_SYM_LOCAL (info, h)
+		      && !bfd_link_pde (info))
+		    {
+		      dynindx = elf_section_data (h->root.u.def.section
+						  ->output_section)->dynindx;
+		      addend += h->root.u.def.section->output_offset
+			+ h->root.u.def.value;
+		    }
+		  else if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h))
+		    {
+		      if (addend)
+			{
+			  info->callbacks->warning
+			    (info, _("R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"),
+			     name, input_bfd, input_section, rel->r_offset);
+			  return false;
+			}
+		      dynindx = h->dynindx;
+		    }
+		  else
+		    {
+		      /* Otherwise, we know we have a private function
+			 descriptor, so reference it directly.  */
+		      BFD_ASSERT (picrel->privfd);
+		      r_type = R_BFIN_BYTE4_DATA;
+		      dynindx = elf_section_data (bfinfdpic_got_section (info)
+						  ->output_section)->dynindx;
+		      addend = bfinfdpic_got_section (info)->output_offset
+			+ bfinfdpic_got_initial_offset (info)
+			+ picrel->fd_entry;
+		    }
 
-		/* If there is room for dynamic symbol resolution, emit
-		   the dynamic relocation.  However, if we're linking an
-		   executable at a fixed location, we won't have emitted a
-		   dynamic symbol entry for the got section, so idx will
-		   be zero, which means we can and should compute the
-		   address of the private descriptor ourselves.  */
-		if (bfd_link_pde (info)
-		    && (!h || BFINFDPIC_FUNCDESC_LOCAL (info, h)))
-		  {
-		    bfd_vma offset;
+		  /* If there is room for dynamic symbol resolution, emit
+		     the dynamic relocation.  However, if we're linking an
+		     executable at a fixed location, we won't have emitted a
+		     dynamic symbol entry for the got section, so idx will
+		     be zero, which means we can and should compute the
+		     address of the private descriptor ourselves.  */
+		  if (bfd_link_pde (info)
+		      && (!h || BFINFDPIC_FUNCDESC_LOCAL (info, h)))
+		    {
+		      bfd_vma offset;
 
-		    addend += bfinfdpic_got_section (info)->output_section->vma;
-		    if ((bfd_section_flags (input_section->output_section)
-			 & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
-		      {
-			if (_bfinfdpic_osec_readonly_p (output_bfd,
-						       input_section
-						       ->output_section))
-			  {
-			    info->callbacks->warning
-			      (info,
-			       _("cannot emit fixups in read-only section"),
-			       name, input_bfd, input_section, rel->r_offset);
-			    return FALSE;
-			  }
+		      addend += bfinfdpic_got_section (info)->output_section->vma;
+		      if ((bfd_section_flags (input_section->output_section)
+			   & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
+			{
+			  if (_bfinfdpic_osec_readonly_p (output_bfd,
+							  input_section
+							  ->output_section))
+			    {
+			      info->callbacks->warning
+				(info,
+				 _("cannot emit fixups in read-only section"),
+				 name, input_bfd, input_section, rel->r_offset);
+			      return false;
+			    }
+
+			  offset = _bfd_elf_section_offset
+			    (output_bfd, info,
+			     input_section, rel->r_offset);
 
-			offset = _bfd_elf_section_offset
-			  (output_bfd, info,
-			   input_section, rel->r_offset);
+			  if (offset != (bfd_vma)-1)
+			    _bfinfdpic_add_rofixup (output_bfd,
+						    bfinfdpic_gotfixup_section
+						    (info),
+						    offset + input_section
+						    ->output_section->vma
+						    + input_section->output_offset,
+						    picrel);
+			}
+		    }
+		  else if ((bfd_section_flags (input_section->output_section)
+			    & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
+		    {
+		      bfd_vma offset;
 
-			if (offset != (bfd_vma)-1)
-			  _bfinfdpic_add_rofixup (output_bfd,
-						  bfinfdpic_gotfixup_section
-						  (info),
+		      if (_bfinfdpic_osec_readonly_p (output_bfd,
+						      input_section
+						      ->output_section))
+			{
+			  info->callbacks->warning
+			    (info,
+			     _("cannot emit dynamic relocations in read-only section"),
+			     name, input_bfd, input_section, rel->r_offset);
+			  return false;
+			}
+		      offset = _bfd_elf_section_offset (output_bfd, info,
+							input_section, rel->r_offset);
+
+		      if (offset != (bfd_vma)-1)
+			_bfinfdpic_add_dyn_reloc (output_bfd,
+						  bfinfdpic_gotrel_section (info),
 						  offset + input_section
 						  ->output_section->vma
 						  + input_section->output_offset,
-						  picrel);
-		      }
-		  }
-		else if ((bfd_section_flags (input_section->output_section)
-			  & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
-		  {
-		    bfd_vma offset;
-
-		    if (_bfinfdpic_osec_readonly_p (output_bfd,
-						   input_section
-						   ->output_section))
-		      {
-			info->callbacks->warning
-			  (info,
-			   _("cannot emit dynamic relocations in read-only section"),
-			   name, input_bfd, input_section, rel->r_offset);
-			return FALSE;
-		      }
-		    offset = _bfd_elf_section_offset (output_bfd, info,
-						      input_section, rel->r_offset);
-
-		    if (offset != (bfd_vma)-1)
-		      _bfinfdpic_add_dyn_reloc (output_bfd,
-						bfinfdpic_gotrel_section (info),
-						offset + input_section
-						->output_section->vma
-						+ input_section->output_offset,
-						r_type,
-						dynindx, addend, picrel);
-		  }
-		else
-		  addend += bfinfdpic_got_section (info)->output_section->vma;
-	      }
+						  r_type,
+						  dynindx, addend, picrel);
+		    }
+		  else
+		    addend += bfinfdpic_got_section (info)->output_section->vma;
+		}
 
-	    /* We want the addend in-place because dynamic
-	       relocations are REL.  Setting relocation to it should
-	       arrange for it to be installed.  */
-	    relocation = addend - rel->r_addend;
+	      /* We want the addend in-place because dynamic
+		 relocations are REL.  Setting relocation to it should
+		 arrange for it to be installed.  */
+	      relocation = addend - rel->r_addend;
 	  }
 	  check_segment[0] = check_segment[1] = got_segment;
 	  break;
@@ -2870,7 +2881,7 @@ bfinfdpic_relocate_section (bfd * output
 		    info->callbacks->warning
 		      (info, _("R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"),
 		       name, input_bfd, input_section, rel->r_offset);
-		    return FALSE;
+		    return false;
 		  }
 		dynindx = h->dynindx;
 	      }
@@ -2911,7 +2922,7 @@ bfinfdpic_relocate_section (bfd * output
 			  (info,
 			   _("cannot emit fixups in read-only section"),
 			   name, input_bfd, input_section, rel->r_offset);
-			return FALSE;
+			return false;
 		      }
 		    if (!h || h->root.type != bfd_link_hash_undefweak)
 		      {
@@ -2948,7 +2959,7 @@ bfinfdpic_relocate_section (bfd * output
 			  (info,
 			   _("cannot emit dynamic relocations in read-only section"),
 			   name, input_bfd, input_section, rel->r_offset);
-			return FALSE;
+			return false;
 		      }
 
 		    if (offset != (bfd_vma)-1)
@@ -3015,11 +3026,11 @@ bfinfdpic_relocate_section (bfd * output
 	     input file basename is crt0.o only once.  */
 	  if (silence_segment_error == 1)
 	    silence_segment_error =
-	      (strlen (input_bfd->filename) == 6
-	       && filename_cmp (input_bfd->filename, "crt0.o") == 0)
-	      || (strlen (input_bfd->filename) > 6
-		  && filename_cmp (input_bfd->filename
-				   + strlen (input_bfd->filename) - 7,
+	      (strlen (bfd_get_filename (input_bfd)) == 6
+	       && filename_cmp (bfd_get_filename (input_bfd), "crt0.o") == 0)
+	      || (strlen (bfd_get_filename (input_bfd)) > 6
+		  && filename_cmp (bfd_get_filename (input_bfd)
+				   + strlen (bfd_get_filename (input_bfd)) - 7,
 			     "/crt0.o") == 0)
 	      ? -1 : 0;
 #endif
@@ -3035,7 +3046,7 @@ bfinfdpic_relocate_section (bfd * output
 	       : _("warning: relocation references a different segment"),
 	       name, input_bfd, input_section, rel->r_offset);
 	  if (!silence_segment_error && bfd_link_pic (info))
-	    return FALSE;
+	    return false;
 	  elf_elfheader (output_bfd)->e_flags |= EF_BFIN_PIC;
 	}
 
@@ -3115,7 +3126,7 @@ bfinfdpic_relocate_section (bfd * output
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -3141,12 +3152,12 @@ bfinfdpic_relocate_section (bfd * output
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We need dynamic symbols for every section, since segments can
    relocate independently.  */
-static bfd_boolean
+static bool
 _bfinfdpic_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
 				    struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				    asection *p)
@@ -3158,12 +3169,12 @@ _bfinfdpic_link_omit_section_dynsym (bfd
       /* If sh_type is yet undecided, assume it could be
 	 SHT_PROGBITS/SHT_NOBITS.  */
     case SHT_NULL:
-      return FALSE;
+      return false;
 
       /* There shouldn't be section relative relocations
 	 against any other section.  */
     default:
-      return TRUE;
+      return true;
     }
 }
 
@@ -3171,7 +3182,7 @@ _bfinfdpic_link_omit_section_dynsym (bfd
    is almost entirely copied from
    elflink.c:_bfd_elf_create_got_section().  */
 
-static bfd_boolean
+static bool
 _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags, pltflags;
@@ -3183,7 +3194,7 @@ _bfin_create_got_section (bfd *abfd, str
   /* This function may be called more than once.  */
   s = elf_hash_table (info)->sgot;
   if (s != NULL)
-    return TRUE;
+    return true;
 
   /* Machine specific: although pointers are 32-bits wide, we want the
      GOT to be aligned to a 64-bit boundary, such that function
@@ -3199,7 +3210,7 @@ _bfin_create_got_section (bfd *abfd, str
   elf_hash_table (info)->sgot = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
   if (bed->want_got_sym)
     {
@@ -3210,12 +3221,12 @@ _bfin_create_got_section (bfd *abfd, str
       h = _bfd_elf_define_linkage_sym (abfd, info, s, "__GLOBAL_OFFSET_TABLE_");
       elf_hash_table (info)->hgot = h;
       if (h == NULL)
-	return FALSE;
+	return false;
 
       /* Machine-specific: we want the symbol for executables as
 	 well.  */
       if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   /* The first bit of the global offset table is the header.  */
@@ -3230,13 +3241,13 @@ _bfin_create_got_section (bfd *abfd, str
 						      bfinfdpic_relocs_info_eq,
 						      (htab_del) NULL);
       if (! bfinfdpic_relocs_info (info))
-	return FALSE;
+	return false;
 
       s = bfd_make_section_anyway_with_flags (abfd, ".rel.got",
 					      (flags | SEC_READONLY));
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
-	return FALSE;
+	return false;
 
       bfinfdpic_gotrel_section (info) = s;
 
@@ -3245,7 +3256,7 @@ _bfin_create_got_section (bfd *abfd, str
 					      (flags | SEC_READONLY));
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
-	return FALSE;
+	return false;
 
       bfinfdpic_gotfixup_section (info) = s;
     }
@@ -3259,7 +3270,7 @@ _bfin_create_got_section (bfd *abfd, str
   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
   /* Blackfin-specific: remember it.  */
   bfinfdpic_plt_section (info) = s;
 
@@ -3271,15 +3282,15 @@ _bfin_create_got_section (bfd *abfd, str
 
       if (! (_bfd_generic_link_add_one_symbol
 	     (info, abfd, "__PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s, 0, NULL,
-	      FALSE, get_elf_backend_data (abfd)->collect, &bh)))
-	return FALSE;
+	      false, get_elf_backend_data (abfd)->collect, &bh)))
+	return false;
       h = (struct elf_link_hash_entry *) bh;
       h->def_regular = 1;
       h->type = STT_OBJECT;
 
       if (! bfd_link_executable (info)
 	  && ! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   /* Blackfin-specific: we want rel relocations for the plt.  */
@@ -3287,17 +3298,17 @@ _bfin_create_got_section (bfd *abfd, str
 					  flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   /* Blackfin-specific: remember it.  */
   bfinfdpic_pltrel_section (info) = s;
 
-  return TRUE;
+  return true;
 }
 
 /* Make sure the got and plt sections exist, and that our pointers in
    the link hash table point to them.  */
 
-static bfd_boolean
+static bool
 elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   /* This is mostly copied from
@@ -3314,7 +3325,7 @@ elf32_bfinfdpic_create_dynamic_sections
 
   /* Blackfin-specific: we want to create the GOT in the Blackfin way.  */
   if (! _bfin_create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   /* Blackfin-specific: make sure we created everything we wanted.  */
   BFD_ASSERT (bfinfdpic_got_section (info) && bfinfdpic_gotrel_section (info)
@@ -3333,7 +3344,7 @@ elf32_bfinfdpic_create_dynamic_sections
       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
 					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
-	return FALSE;
+	return false;
 
       /* The .rel[a].bss section holds copy relocs.  This section is not
 	 normally needed.  We need to create it here, though, so that the
@@ -3353,11 +3364,11 @@ elf32_bfinfdpic_create_dynamic_sections
 						  flags | SEC_READONLY);
 	  if (s == NULL
 	      || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Compute the total GOT size required by each symbol in each range.
@@ -3425,7 +3436,7 @@ _bfinfdpic_count_nontls_entries (struct
 static void
 _bfinfdpic_count_relocs_fixups (struct bfinfdpic_relocs_info *entry,
 				struct _bfinfdpic_dynamic_got_info *dinfo,
-				bfd_boolean subtract)
+				bool subtract)
 {
   bfd_vma relocs = 0, fixups = 0;
 
@@ -3478,7 +3489,7 @@ _bfinfdpic_count_got_plt_entries (void *
 
   _bfinfdpic_count_nontls_entries (entry, dinfo);
 
-  _bfinfdpic_count_relocs_fixups (entry, dinfo, FALSE);
+  _bfinfdpic_count_relocs_fixups (entry, dinfo, false);
 
   return 1;
 }
@@ -3851,7 +3862,7 @@ _bfinfdpic_resolve_final_relocs_info (vo
    section and the rofixup section.  Assign locations for GOT and PLT
    entries.  */
 
-static bfd_boolean
+static bool
 _bfinfdpic_size_got_plt (bfd *output_bfd,
 			 struct _bfinfdpic_dynamic_got_plt_info *gpinfop)
 {
@@ -3917,7 +3928,7 @@ _bfinfdpic_size_got_plt (bfd *output_bfd
 	(bfd_byte *) bfd_zalloc (dynobj,
 				 bfinfdpic_got_section (info)->size);
       if (bfinfdpic_got_section (info)->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -3936,7 +3947,7 @@ _bfinfdpic_size_got_plt (bfd *output_bfd
 	(bfd_byte *) bfd_zalloc (dynobj,
 				 bfinfdpic_gotrel_section (info)->size);
       if (bfinfdpic_gotrel_section (info)->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   bfinfdpic_gotfixup_section (info)->size = (gpinfop->g.fixups + 1) * 4;
@@ -3948,7 +3959,7 @@ _bfinfdpic_size_got_plt (bfd *output_bfd
 	(bfd_byte *) bfd_zalloc (dynobj,
 				 bfinfdpic_gotfixup_section (info)->size);
       if (bfinfdpic_gotfixup_section (info)->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -3962,7 +3973,7 @@ _bfinfdpic_size_got_plt (bfd *output_bfd
 	(bfd_byte *) bfd_zalloc (dynobj,
 				 bfinfdpic_pltrel_section (info)->size);
       if (bfinfdpic_pltrel_section (info)->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Add 4 bytes for every block of at most 65535 lazy PLT entries,
@@ -4007,15 +4018,15 @@ _bfinfdpic_size_got_plt (bfd *output_bfd
 	(bfd_byte *) bfd_zalloc (dynobj,
 				 bfinfdpic_plt_section (info)->size);
       if (bfinfdpic_plt_section (info)->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd,
 				      struct bfd_link_info *info)
 {
@@ -4061,27 +4072,7 @@ elf32_bfinfdpic_size_dynamic_sections (b
   bfinfdpic_dynamic_got_plt_info (info) = bfd_alloc (dynobj, sizeof (gpinfo.g));
 
   if (!_bfinfdpic_size_got_plt (output_bfd, &gpinfo))
-      return FALSE;
-
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      if (bfinfdpic_got_section (info)->size)
-	if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0))
-	  return FALSE;
-
-      if (bfinfdpic_pltrel_section (info)->size)
-	if (!_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_REL)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0))
-	  return FALSE;
-
-      if (bfinfdpic_gotrel_section (info)->size)
-	if (!_bfd_elf_add_dynamic_entry (info, DT_REL, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_RELSZ, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_RELENT,
-					    sizeof (Elf32_External_Rel)))
-	  return FALSE;
-    }
+      return false;
 
   s = bfd_get_linker_section (dynobj, ".dynbss");
   if (s && s->size == 0)
@@ -4091,41 +4082,38 @@ elf32_bfinfdpic_size_dynamic_sections (b
   if (s && s->size == 0)
     s->flags |= SEC_EXCLUDE;
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, true);
 }
 
-static bfd_boolean
+static bool
 elf32_bfinfdpic_always_size_sections (bfd *output_bfd,
 				     struct bfd_link_info *info)
 {
   if (!bfd_link_relocatable (info)
       && !bfd_elf_stack_segment_size (output_bfd, info,
 				      "__stacksize", DEFAULT_STACK_SIZE))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Check whether any of the relocations was optimized away, and
    subtract it from the relocation or fixup count.  */
-static bfd_boolean
+static bool
 _bfinfdpic_check_discarded_relocs (bfd *abfd, asection *sec,
 				   struct bfd_link_info *info,
-				   bfd_boolean *changed)
+				   bool *changed)
 {
   Elf_Internal_Shdr *symtab_hdr;
-  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
+  struct elf_link_hash_entry **sym_hashes;
   Elf_Internal_Rela *rel, *erel;
 
   if ((sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
-  sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof(Elf32_External_Sym);
-  if (!elf_bad_symtab (abfd))
-    sym_hashes_end -= symtab_hdr->sh_info;
 
   rel = elf_section_data (sec)->relocs;
 
@@ -4167,28 +4155,28 @@ _bfinfdpic_check_discarded_relocs (bfd *
 						 rel->r_addend, NO_INSERT);
 
       if (! picrel)
-	return FALSE;
+	return false;
 
-      *changed = TRUE;
+      *changed = true;
       dinfo = bfinfdpic_dynamic_got_plt_info (info);
 
-      _bfinfdpic_count_relocs_fixups (picrel, dinfo, TRUE);
+      _bfinfdpic_count_relocs_fixups (picrel, dinfo, true);
       if (ELF32_R_TYPE (rel->r_info) == R_BFIN_BYTE4_DATA)
 	picrel->relocs32--;
       else /* we know (ELF32_R_TYPE (rel->r_info) == R_BFIN_FUNCDESC) */
 	picrel->relocsfd--;
-      _bfinfdpic_count_relocs_fixups (picrel, dinfo, FALSE);
+      _bfinfdpic_count_relocs_fixups (picrel, dinfo, false);
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfinfdpic_elf_discard_info (bfd *ibfd,
 			   struct elf_reloc_cookie *cookie ATTRIBUTE_UNUSED,
 			   struct bfd_link_info *info)
 {
-  bfd_boolean changed = FALSE;
+  bool changed = false;
   asection *s;
   bfd *obfd = NULL;
 
@@ -4197,7 +4185,7 @@ bfinfdpic_elf_discard_info (bfd *ibfd,
     if (s->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
       {
 	if (!_bfinfdpic_check_discarded_relocs (ibfd, s, info, &changed))
-	  return FALSE;
+	  return false;
 	obfd = s->output_section->owner;
       }
 
@@ -4215,13 +4203,13 @@ bfinfdpic_elf_discard_info (bfd *ibfd,
 		     NULL);
 
       if (!_bfinfdpic_size_got_plt (obfd, &gpinfo))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd,
 					struct bfd_link_info *info)
 {
@@ -4257,7 +4245,7 @@ elf32_bfinfdpic_finish_dynamic_sections
 	    {
 	      _bfd_error_handler
 		("LINKER BUG: .rofixup section size mismatch");
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
@@ -4313,13 +4301,13 @@ elf32_bfinfdpic_finish_dynamic_sections
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  */
 
-static bfd_boolean
+static bool
 elf32_bfinfdpic_adjust_dynamic_symbol (struct bfd_link_info *info,
 				       struct elf_link_hash_entry *h)
 {
@@ -4345,32 +4333,32 @@ elf32_bfinfdpic_adjust_dynamic_symbol (s
       h->root.u.def.value = def->root.u.def.value;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Perform any actions needed for dynamic symbols.  */
 
-static bfd_boolean
+static bool
 elf32_bfinfdpic_finish_dynamic_symbol
 (bfd *output_bfd ATTRIBUTE_UNUSED,
  struct bfd_link_info *info ATTRIBUTE_UNUSED,
  struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
  Elf_Internal_Sym *sym ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* Decide whether to attempt to turn absptr or lsda encodings in
    shared libraries into pcrel within the given input section.  */
 
-static bfd_boolean
+static bool
 bfinfdpic_elf_use_relative_eh_frame
 (bfd *input_bfd ATTRIBUTE_UNUSED,
  struct bfd_link_info *info ATTRIBUTE_UNUSED,
  asection *eh_frame_section ATTRIBUTE_UNUSED)
 {
   /* We can't use PC-relative encodings in FDPIC binaries, in general.  */
-  return FALSE;
+  return false;
 }
 
 /* Adjust the contents of an eh_frame_hdr section before they're output.  */
@@ -4510,7 +4498,7 @@ bfinfdpic_elf_encode_eh_address (bfd *ab
    PLT entry should be faster), or taking hints from the compiler.
    Given infinite time and money... :-)  */
 
-static bfd_boolean
+static bool
 bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -4522,7 +4510,7 @@ bfinfdpic_check_relocs (bfd *abfd, struc
   struct bfinfdpic_relocs_info *picrel;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -4538,7 +4526,12 @@ bfinfdpic_check_relocs (bfd *abfd, struc
       if (r_symndx < symtab_hdr->sh_info)
 	h = NULL;
       else
-	h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	{
+	  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;
+	}
 
       switch (ELF32_R_TYPE (rel->r_info))
 	{
@@ -4566,7 +4559,7 @@ bfinfdpic_check_relocs (bfd *abfd, struc
 	    {
 	      elf_hash_table (info)->dynobj = dynobj = abfd;
 	      if (! _bfin_create_got_section (abfd, info))
-		return FALSE;
+		return false;
 	    }
 	  if (! IS_FDPIC (abfd))
 	    {
@@ -4595,7 +4588,7 @@ bfinfdpic_check_relocs (bfd *abfd, struc
 						     (info), abfd, r_symndx,
 						     rel->r_addend, INSERT);
 	  if (! picrel)
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -4668,7 +4661,7 @@ bfinfdpic_check_relocs (bfd *abfd, struc
 	   Reconstruct it for later use during GC.  */
 	case R_BFIN_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
@@ -4677,7 +4670,7 @@ bfinfdpic_check_relocs (bfd *abfd, struc
 	  BFD_ASSERT (h != NULL);
 	  if (h != NULL
 	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_BFIN_HUIMM16:
@@ -4692,16 +4685,16 @@ bfinfdpic_check_relocs (bfd *abfd, struc
 	    /* xgettext:c-format */
 	    (_("%pB: unsupported relocation type %#x"),
 	     abfd, (int) ELF32_R_TYPE (rel->r_info));
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the right machine number for a Blackfin ELF file.  */
 
-static bfd_boolean
+static bool
 elf32_bfin_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_bfin, 0);
@@ -4709,16 +4702,16 @@ elf32_bfin_object_p (bfd *abfd)
 	  == (IS_FDPIC (abfd)));
 }
 
-static bfd_boolean
+static bool
 elf32_bfin_set_private_flags (bfd * abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Display the flags field.  */
-static bfd_boolean
+static bool
 elf32_bfin_print_private_bfd_data (bfd * abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -4742,18 +4735,22 @@ elf32_bfin_print_private_bfd_data (bfd *
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf32_bfin_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword old_flags, new_flags;
-  bfd_boolean error = FALSE;
+  bool error = false;
+
+  /* FIXME: What should be checked when linking shared libraries?  */
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
@@ -4770,13 +4767,13 @@ elf32_bfin_merge_private_bfd_data (bfd *
 
   if (!elf_flags_init (obfd))			/* First call, no flags set.  */
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
 
   if (((new_flags & EF_BFIN_FDPIC) == 0) != (! IS_FDPIC (obfd)))
     {
-      error = TRUE;
+      error = true;
       if (IS_FDPIC (obfd))
 	_bfd_error_handler
 	  (_("%pB: cannot link non-fdpic object file into fdpic executable"),
@@ -4803,16 +4800,6 @@ struct bfin_link_hash_entry
   struct bfin_pcrel_relocs_copied *pcrel_relocs_copied;
 };
 
-/* bfin ELF linker hash table.  */
-
-struct bfin_link_hash_table
-{
-  struct elf_link_hash_table root;
-
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-};
-
 #define bfin_hash_entry(ent) ((struct bfin_link_hash_entry *) (ent))
 
 static struct bfd_hash_entry *
@@ -4841,15 +4828,14 @@ bfin_link_hash_newfunc (struct bfd_hash_
 static struct bfd_link_hash_table *
 bfin_link_hash_table_create (bfd * abfd)
 {
-  struct bfin_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct bfin_link_hash_table);
+  struct elf_link_hash_table *ret;
+  size_t amt = sizeof (struct elf_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
     return NULL;
 
-  if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
-				      bfin_link_hash_newfunc,
+  if (!_bfd_elf_link_hash_table_init (ret, abfd, bfin_link_hash_newfunc,
 				      sizeof (struct elf_link_hash_entry),
 				      BFIN_ELF_DATA))
     {
@@ -4857,16 +4843,14 @@ bfin_link_hash_table_create (bfd * abfd)
       return NULL;
     }
 
-  ret->sym_cache.abfd = NULL;
-
-  return &ret->root.root;
+  return &ret->root;
 }
 
 /* The size in bytes of an entry in the procedure linkage table.  */
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 bfin_finish_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
 			      struct bfd_link_info *info)
 {
@@ -4894,13 +4878,13 @@ bfin_finish_dynamic_sections (bfd * outp
 	}
 
     }
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 bfin_finish_dynamic_symbol (bfd * output_bfd,
 			    struct bfd_link_info *info,
 			    struct elf_link_hash_entry *h,
@@ -4933,8 +4917,7 @@ bfin_finish_dynamic_symbol (bfd * output
 	  && (info->symbolic
 	      || h->dynindx == -1 || h->forced_local) && h->def_regular)
 	{
-	  _bfd_error_handler (_("*** check this relocation %s"),
-			      __FUNCTION__);
+	  _bfd_error_handler (_("*** check this relocation %s"), __func__);
 	  rela.r_info = ELF32_R_INFO (0, R_BFIN_PCREL24);
 	  rela.r_addend = bfd_get_signed_32 (output_bfd,
 					     (sgot->contents
@@ -4964,7 +4947,7 @@ bfin_finish_dynamic_symbol (bfd * output
       || h == elf_hash_table (info)->hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -4973,7 +4956,7 @@ bfin_finish_dynamic_symbol (bfd * output
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 bfin_adjust_dynamic_symbol (struct bfd_link_info *info,
 			    struct elf_link_hash_entry *h)
 {
@@ -5006,7 +4989,7 @@ bfin_adjust_dynamic_symbol (struct bfd_l
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -5017,7 +5000,7 @@ bfin_adjust_dynamic_symbol (struct bfd_l
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -5050,7 +5033,7 @@ bfin_adjust_dynamic_symbol (struct bfd_l
   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
     {
       _bfd_error_handler (_("the bfin target does not currently support the generation of copy relocations"));
-      return FALSE;
+      return false;
     }
 #endif
   /* We need to figure out the alignment required for this symbol.  I
@@ -5064,7 +5047,7 @@ bfin_adjust_dynamic_symbol (struct bfd_l
   if (power_of_two > bfd_section_alignment (s))
     {
       if (!bfd_set_section_alignment (s, power_of_two))
-	return FALSE;
+	return false;
     }
 
   /* Define the symbol as being at this point in the section.  */
@@ -5074,7 +5057,7 @@ bfin_adjust_dynamic_symbol (struct bfd_l
   /* Increment the section size to make room for the symbol.  */
   s->size += h->size;
 
-  return TRUE;
+  return true;
 }
 
 /* The bfin linker needs to keep track of the number of relocs that it
@@ -5109,7 +5092,7 @@ struct bfin_pcrel_relocs_copied
    against a readonly section, and set the DF_TEXTREL flag in this
    case.  */
 
-static bfd_boolean
+static bool
 bfin_discard_copies (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) inf;
@@ -5129,23 +5112,23 @@ bfin_discard_copies (struct elf_link_has
 	      }
 	}
 
-      return TRUE;
+      return true;
     }
 
   for (s = bfin_hash_entry (h)->pcrel_relocs_copied;
        s != NULL; s = s->next)
     s->section->size -= s->count * sizeof (Elf32_External_Rela);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
 			    struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
 
   dynobj = elf_hash_table (info)->dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -5186,11 +5169,11 @@ bfin_size_dynamic_sections (bfd * output
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
-      bfd_boolean strip;
+      bool strip;
 
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
@@ -5199,9 +5182,9 @@ bfin_size_dynamic_sections (bfd * output
 	 of the dynobj section names depend upon the input files.  */
       name = bfd_section_name (s);
 
-      strip = FALSE;
+      strip = false;
 
-       if (CONST_STRNEQ (name, ".rela"))
+       if (startswith (name, ".rela"))
 	{
 	  if (s->size == 0)
 	    {
@@ -5214,18 +5197,18 @@ bfin_size_dynamic_sections (bfd * output
 		 adjust_dynamic_symbol is called, and it is that
 		 function which decides whether anything needs to go
 		 into these sections.  */
-	      strip = TRUE;
+	      strip = true;
 	    }
 	  else
 	    {
-	      relocs = TRUE;
+	      relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
 	      s->reloc_count = 0;
 	    }
 	}
-      else if (! CONST_STRNEQ (name, ".got"))
+      else if (! startswith (name, ".got"))
 	{
 	  /* It's not one of our sections, so don't allocate space.  */
 	  continue;
@@ -5245,7 +5228,7 @@ bfin_size_dynamic_sections (bfd * output
 	 contents to zero.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL && s->size != 0)
-	return FALSE;
+	return false;
     }
 
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -5261,7 +5244,7 @@ bfin_size_dynamic_sections (bfd * output
       if (!bfd_link_pic (info))
 	{
 	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
+	    return false;
 	}
 
 
@@ -5271,18 +5254,18 @@ bfin_size_dynamic_sections (bfd * output
 	      || !add_dynamic_entry (DT_RELASZ, 0)
 	      || !add_dynamic_entry (DT_RELAENT,
 				     sizeof (Elf32_External_Rela)))
-	    return FALSE;
+	    return false;
 	}
 
       if ((info->flags & DF_TEXTREL) != 0)
 	{
 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
+	    return false;
 	}
     }
 #undef add_dynamic_entry
 
-  return TRUE;
+  return true;
 }
 
 /* Given a .data section and a .emreloc in-memory section, store
@@ -5292,7 +5275,7 @@ bfin_size_dynamic_sections (bfd * output
    after the add_symbols entry point has been called for all the
    objects, and before the final_link entry point is called.  */
 
-bfd_boolean
+bool
 bfd_bfin_elf32_create_embedded_relocs (bfd *abfd,
 				       struct bfd_link_info *info,
 				       asection *datasec,
@@ -5311,7 +5294,7 @@ bfd_bfin_elf32_create_embedded_relocs (b
   *errmsg = NULL;
 
   if (datasec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -5391,20 +5374,18 @@ bfd_bfin_elf32_create_embedded_relocs (b
 	strncpy ((char *) p + 4, targetsec->output_section->name, 8);
     }
 
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (datasec)->relocs != internal_relocs)
+  if (elf_section_data (datasec)->relocs != internal_relocs)
     free (internal_relocs);
-  return TRUE;
+  return true;
 
-error_return:
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+ error_return:
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (datasec)->relocs != internal_relocs)
+  if (elf_section_data (datasec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 
 struct bfd_elf_special_section const elf32_bfin_special_sections[] =
@@ -5432,10 +5413,6 @@ struct bfd_elf_special_section const elf
 
 #define bfd_elf32_bfd_is_local_label_name \
 					bfin_is_local_label_name
-#define bfin_hash_table(p) \
-  ((struct bfin_link_hash_table *) (p)->hash)
-
-
 
 #define elf_backend_create_dynamic_sections \
 					_bfd_elf_create_dynamic_sections
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-bfin.h ./bfd/elf32-bfin.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-bfin.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-bfin.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ADI Blackfin BFD support for 32-bit ELF.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,6 +18,6 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-extern bfd_boolean bfd_bfin_elf32_create_embedded_relocs
+extern bool bfd_bfin_elf32_create_embedded_relocs
   (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
    char **);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32.c ./bfd/elf32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF 32-bit executable support for BFD.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-cr16.c ./bfd/elf32-cr16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-cr16.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-cr16.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for National Semiconductor's CR16 ELF
-   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Copyright (C) 2007-2024 Free Software Foundation, Inc.
    Written by M R Swami Reddy.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -116,467 +116,467 @@ static reloc_howto_type cr16_elf_howto_t
 {
   HOWTO (R_CR16_NONE,		   /* type */
 	 0,			   /* rightshift */
-	 3,			   /* size */
+	 0,			   /* size */
 	 0,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_dont,   /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_NONE",		   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0,			   /* src_mask */
 	 0,			   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_NUM8,		   /* type */
 	 0,			   /* rightshift */
-	 0,			   /* size */
+	 1,			   /* size */
 	 8,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_NUM8",		   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xff,			   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_NUM16,		   /* type */
 	 0,			   /* rightshift */
-	 1,			   /* size */
+	 2,			   /* size */
 	 16,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_NUM16",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_NUM32,		   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 32,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_NUM32",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffffffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_NUM32a,		   /* type */
 	 1,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 32,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_NUM32a",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffffffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_REGREL4,	   /* type */
 	 0,			   /* rightshift */
-	 0,			   /* size */
+	 1,			   /* size */
 	 4,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_REGREL4",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xf,			   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_REGREL4a,	   /* type */
 	 0,			   /* rightshift */
-	 0,			   /* size */
+	 1,			   /* size */
 	 4,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_REGREL4a",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xf,			   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_REGREL14,	   /* type */
 	 0,			   /* rightshift */
-	 1,			   /* size */
+	 2,			   /* size */
 	 14,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_REGREL14",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0x3fff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_REGREL14a,	   /* type */
 	 0,			   /* rightshift */
-	 1,			   /* size */
+	 2,			   /* size */
 	 14,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_REGREL14a",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0x3fff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_REGREL16,	   /* type */
 	 0,			   /* rightshift */
-	 1,			   /* size */
+	 2,			   /* size */
 	 16,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_REGREL16",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_REGREL20,	   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 20,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_REGREL20",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xfffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_REGREL20a,	   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 20,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_REGREL20a",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xfffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_ABS20,		   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 20,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_ABS20",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xfffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_ABS24,		   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 24,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_ABS24",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_IMM4,		   /* type */
 	 0,			   /* rightshift */
-	 0,			   /* size */
+	 1,			   /* size */
 	 4,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_IMM4",		   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xf,			   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_IMM8,		   /* type */
 	 0,			   /* rightshift */
-	 0,			   /* size */
+	 1,			   /* size */
 	 8,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_IMM8",		   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xff,			   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_IMM16,		   /* type */
 	 0,			   /* rightshift */
-	 1,			   /* size */
+	 2,			   /* size */
 	 16,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_IMM16",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_IMM20,		   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 20,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_IMM20",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xfffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_IMM24,		   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 24,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_IMM24",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_IMM32,		   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 32,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_IMM32",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffffffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_IMM32a,		   /* type */
 	 1,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 32,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_IMM32a",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffffffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_DISP4,		   /* type */
 	 1,			   /* rightshift */
-	 0,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 1,			   /* size */
 	 4,			   /* bitsize */
-	 TRUE,			   /* pc_relative */
+	 true,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_DISP4",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xf,			   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_DISP8,		   /* type */
 	 1,			   /* rightshift */
-	 0,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 1,			   /* size */
 	 8,			   /* bitsize */
-	 TRUE,			   /* pc_relative */
+	 true,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_DISP8",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0x1ff,			   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_DISP16,		   /* type */
 	 0,			   /* rightshift REVIITS: To sync with WinIDEA*/
-	 1,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 2,			   /* size */
 	 16,			   /* bitsize */
-	 TRUE,			   /* pc_relative */
+	 true,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_DISP16",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0x1ffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
   /* REVISIT: DISP24 should be left-shift by 2 as per ISA doc
      but its not done, to sync with WinIDEA and CR16 4.1 tools */
   HOWTO (R_CR16_DISP24,		   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			   /* size */
 	 24,			   /* bitsize */
-	 TRUE,			   /* pc_relative */
+	 true,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_DISP24",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0x1ffffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_DISP24a,	   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			   /* size */
 	 24,			   /* bitsize */
-	 TRUE,			   /* pc_relative */
+	 true,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_DISP24a",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   /* An 8 bit switch table entry.  This is generated for an expression
      such as ``.byte L1 - L2''.  The offset holds the difference
      between the reloc address and L2.  */
   HOWTO (R_CR16_SWITCH8,	   /* type */
 	 0,			   /* rightshift */
-	 0,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 1,			   /* size */
 	 8,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_SWITCH8",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xff,			   /* dst_mask */
-	 TRUE),			   /* pcrel_offset */
+	 true),			   /* pcrel_offset */
 
   /* A 16 bit switch table entry.  This is generated for an expression
      such as ``.word L1 - L2''.  The offset holds the difference
      between the reloc address and L2.  */
   HOWTO (R_CR16_SWITCH16,	   /* type */
 	 0,			   /* rightshift */
-	 1,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 2,			   /* size */
 	 16,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_SWITCH16",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffff,		   /* dst_mask */
-	 TRUE),			   /* pcrel_offset */
+	 true),			   /* pcrel_offset */
 
   /* A 32 bit switch table entry.  This is generated for an expression
      such as ``.long L1 - L2''.  The offset holds the difference
      between the reloc address and L2.  */
   HOWTO (R_CR16_SWITCH32,	   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			   /* size */
 	 32,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_SWITCH32",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffffffff,		   /* dst_mask */
-	 TRUE),			   /* pcrel_offset */
+	 true),			   /* pcrel_offset */
 
   HOWTO (R_CR16_GOT_REGREL20,	   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 20,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_GOT_REGREL20",	   /* name */
-	 TRUE,			   /* partial_inplace */
+	 true,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xfffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_GOTC_REGREL20,	   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size */
+	 4,			   /* size */
 	 20,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_GOTC_REGREL20",   /* name */
-	 TRUE,			   /* partial_inplace */
+	 true,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xfffff,		   /* dst_mask */
-	 FALSE),		   /* pcrel_offset */
+	 false),		   /* pcrel_offset */
 
   HOWTO (R_CR16_GLOB_DAT,	   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			   /* size */
 	 32,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	   /* special_function */
 	 "R_CR16_GLOB_DAT",	   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0x0,			   /* src_mask */
 	 0xffffffff,		   /* dst_mask */
-	 TRUE)			   /* pcrel_offset */
+	 true)			   /* pcrel_offset */
 };
 
 
 /* Create the GOT section.  */
 
-static bfd_boolean
+static bool
 _bfd_cr16_elf_create_got_section (bfd * abfd, struct bfd_link_info * info)
 {
   flagword   flags;
@@ -588,7 +588,7 @@ _bfd_cr16_elf_create_got_section (bfd *
 
   /* This function may be called more than once.  */
   if (htab->sgot != NULL)
-    return TRUE;
+    return true;
 
   switch (bed->s->arch_size)
     {
@@ -602,7 +602,7 @@ _bfd_cr16_elf_create_got_section (bfd *
 
     default:
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
@@ -612,7 +612,7 @@ _bfd_cr16_elf_create_got_section (bfd *
   htab->sgot= s;
   if (s == NULL
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
   if (bed->want_got_plt)
     {
@@ -620,7 +620,7 @@ _bfd_cr16_elf_create_got_section (bfd *
       htab->sgotplt = s;
       if (s == NULL
 	  || !bfd_set_section_alignment (s, ptralign))
-	return FALSE;
+	return false;
     }
 
   /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
@@ -630,12 +630,12 @@ _bfd_cr16_elf_create_got_section (bfd *
   h = _bfd_elf_define_linkage_sym (abfd, info, s, "_GLOBAL_OFFSET_TABLE_");
   htab->hgot = h;
   if (h == NULL)
-    return FALSE;
+    return false;
 
   /* The first bit of the global offset table is the header.  */
   s->size += bed->got_header_size;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -672,7 +672,7 @@ elf_cr16_reloc_name_lookup (bfd *abfd AT
 
 /* Retrieve a howto ptr using an internal relocation entry.  */
 
-static bfd_boolean
+static bool
 elf_cr16_info_to_howto (bfd *abfd, arelent *cache_ptr,
 			Elf_Internal_Rela *dst)
 {
@@ -684,23 +684,23 @@ elf_cr16_info_to_howto (bfd *abfd, arele
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = cr16_elf_howto_table + r_type;
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 cr16_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
 		       const Elf_Internal_Rela *relocs)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Sym * isymbuf = NULL;
-  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
+  struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
   bfd *      dynobj;
@@ -710,16 +710,13 @@ cr16_elf_check_relocs (bfd *abfd, struct
 
   sgot    = NULL;
   srelgot = NULL;
-  bfd_boolean result = FALSE;
+  bool result = false;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
-  sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym);
-  if (!elf_bad_symtab (abfd))
-    sym_hashes_end -= symtab_hdr->sh_info;
 
   dynobj = elf_hash_table (info)->dynobj;
   local_got_offsets = elf_local_got_offsets (abfd);
@@ -824,10 +821,9 @@ cr16_elf_check_relocs (bfd *abfd, struct
 	}
     }
 
-   result = TRUE;
-  fail:
-    if (isymbuf != NULL)
-      free (isymbuf);
+  result = true;
+ fail:
+  free (isymbuf);
 
   return result;
 }
@@ -855,56 +851,56 @@ cr16_elf_final_link_relocate (reloc_howt
 
   switch (r_type)
     {
-     case R_CR16_IMM4:
-     case R_CR16_IMM20:
-     case R_CR16_ABS20:
-       break;
-
-     case R_CR16_IMM8:
-     case R_CR16_IMM16:
-     case R_CR16_IMM32:
-     case R_CR16_IMM32a:
-     case R_CR16_REGREL4:
-     case R_CR16_REGREL4a:
-     case R_CR16_REGREL14:
-     case R_CR16_REGREL14a:
-     case R_CR16_REGREL16:
-     case R_CR16_REGREL20:
-     case R_CR16_REGREL20a:
-     case R_CR16_GOT_REGREL20:
-     case R_CR16_GOTC_REGREL20:
-     case R_CR16_ABS24:
-     case R_CR16_DISP16:
-     case R_CR16_DISP24:
-       /* 'hit_data' is relative to the start of the instruction, not the
-	   relocation offset. Advance it to account for the exact offset.  */
-       hit_data += 2;
-       break;
-
-     case R_CR16_NONE:
-       return bfd_reloc_ok;
-       break;
+    case R_CR16_IMM4:
+    case R_CR16_IMM20:
+    case R_CR16_ABS20:
+      break;
+
+    case R_CR16_IMM8:
+    case R_CR16_IMM16:
+    case R_CR16_IMM32:
+    case R_CR16_IMM32a:
+    case R_CR16_REGREL4:
+    case R_CR16_REGREL4a:
+    case R_CR16_REGREL14:
+    case R_CR16_REGREL14a:
+    case R_CR16_REGREL16:
+    case R_CR16_REGREL20:
+    case R_CR16_REGREL20a:
+    case R_CR16_GOT_REGREL20:
+    case R_CR16_GOTC_REGREL20:
+    case R_CR16_ABS24:
+    case R_CR16_DISP16:
+    case R_CR16_DISP24:
+      /* 'hit_data' is relative to the start of the instruction, not the
+	 relocation offset.  Advance it to account for the exact offset.  */
+      hit_data += 2;
+      break;
 
-     case R_CR16_DISP4:
-       if (is_local)
+    case R_CR16_NONE:
+      return bfd_reloc_ok;
+      break;
+
+    case R_CR16_DISP4:
+      if (is_local)
 	Rvalue += -1;
-       break;
+      break;
 
-     case R_CR16_DISP8:
-     case R_CR16_DISP24a:
-       if (is_local)
+    case R_CR16_DISP8:
+    case R_CR16_DISP24a:
+      if (is_local)
 	Rvalue -= -1;
-       break;
+      break;
 
-     case R_CR16_SWITCH8:
-     case R_CR16_SWITCH16:
-     case R_CR16_SWITCH32:
-       /* We only care about the addend, where the difference between
-	  expressions is kept.  */
-       Rvalue = 0;
+    case R_CR16_SWITCH8:
+    case R_CR16_SWITCH16:
+    case R_CR16_SWITCH32:
+      /* We only care about the addend, where the difference between
+	 expressions is kept.  */
+      Rvalue = 0;
 
-     default:
-       break;
+    default:
+      break;
     }
 
   if (howto->pc_relative)
@@ -923,31 +919,27 @@ cr16_elf_final_link_relocate (reloc_howt
      as signed or unsigned.  */
   check = Rvalue >> howto->rightshift;
 
-  /* Assumes two's complement.  This expression avoids
-     overflow if howto->bitsize is the number of bits in
-     bfd_vma.  */
-  reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
+  reloc_bits = ((bfd_vma) 1 << (howto->bitsize - 1) << 1) - 1;
 
   /* For GOT and GOTC relocs no boundary checks applied.  */
   if (!((r_type == R_CR16_GOT_REGREL20)
-      || (r_type == R_CR16_GOTC_REGREL20)))
+	|| (r_type == R_CR16_GOTC_REGREL20)))
     {
       if (((bfd_vma) check & ~reloc_bits) != 0
 	  && (((bfd_vma) check & ~reloc_bits)
-	  != (-(bfd_vma) 1 & ~reloc_bits)))
+	      != (-(bfd_vma) 1 & ~reloc_bits)))
 	{
 	  /* The above right shift is incorrect for a signed
 	     value.  See if turning on the upper bits fixes the
 	     overflow.  */
 	  if (howto->rightshift && (bfd_signed_vma) Rvalue < 0)
 	    {
-	      check |= ((bfd_vma) - 1
-			& ~((bfd_vma) - 1
-			 >> howto->rightshift));
+	      check |= ((bfd_vma) -1
+			& ~((bfd_vma) -1 >> howto->rightshift));
 
 	      if (((bfd_vma) check & ~reloc_bits)
 		  != (-(bfd_vma) 1 & ~reloc_bits))
-		 return bfd_reloc_overflow;
+		return bfd_reloc_overflow;
 	    }
 	  else
 	    return bfd_reloc_overflow;
@@ -960,278 +952,250 @@ cr16_elf_final_link_relocate (reloc_howt
       Rvalue &= howto->dst_mask;
     }
 
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
-      case 0:
-	if (r_type == R_CR16_DISP8)
-	  {
-	     Rvalue1 = bfd_get_16 (input_bfd, hit_data);
-	     Rvalue = ((Rvalue1 & 0xf000) | ((Rvalue << 4) & 0xf00)
-		       | (Rvalue1 & 0x00f0) | (Rvalue & 0xf));
-	     bfd_put_16 (input_bfd, Rvalue, hit_data);
-	  }
-	else if (r_type == R_CR16_IMM4)
-	  {
-	     Rvalue1 = bfd_get_16 (input_bfd, hit_data);
-	     Rvalue = (((Rvalue1 & 0xff) << 8) | ((Rvalue << 4) & 0xf0)
-		       | ((Rvalue1 & 0x0f00) >> 8));
-	     bfd_put_16 (input_bfd, Rvalue, hit_data);
-	  }
-	else if (r_type == R_CR16_DISP4)
-	  {
-	     Rvalue1 = bfd_get_16 (input_bfd, hit_data);
-	     Rvalue = (Rvalue1 | ((Rvalue & 0xf) << 4));
-	     bfd_put_16 (input_bfd, Rvalue, hit_data);
-	  }
-	else
-	  {
-	     bfd_put_8 (input_bfd, (unsigned char) Rvalue, hit_data);
-	  }
-	break;
-
-      case 1:
-	if (r_type == R_CR16_DISP16)
-	  {
-	    Rvalue |= (bfd_get_16 (input_bfd, hit_data));
-	    Rvalue = ((Rvalue & 0xfffe) | ((Rvalue >> 16) & 0x1));
-	  }
-	if (r_type == R_CR16_IMM16)
-	  {
-	    Rvalue1 = bfd_get_16 (input_bfd, hit_data);
-
-	    /* Add or subtract the offset value.  */
-	    if (Rvalue1 & 0x8000)
-	      Rvalue -= (~Rvalue1 + 1) & 0xffff;
-	    else
-	      Rvalue += Rvalue1;
+    case 1:
+      if (r_type == R_CR16_DISP8)
+	{
+	  Rvalue1 = bfd_get_16 (input_bfd, hit_data);
+	  Rvalue = ((Rvalue1 & 0xf000) | ((Rvalue << 4) & 0xf00)
+		    | (Rvalue1 & 0x00f0) | (Rvalue & 0xf));
+	  bfd_put_16 (input_bfd, Rvalue, hit_data);
+	}
+      else if (r_type == R_CR16_IMM4)
+	{
+	  Rvalue1 = bfd_get_16 (input_bfd, hit_data);
+	  Rvalue = (((Rvalue1 & 0xff) << 8) | ((Rvalue << 4) & 0xf0)
+		    | ((Rvalue1 & 0x0f00) >> 8));
+	  bfd_put_16 (input_bfd, Rvalue, hit_data);
+	}
+      else if (r_type == R_CR16_DISP4)
+	{
+	  Rvalue1 = bfd_get_16 (input_bfd, hit_data);
+	  Rvalue = (Rvalue1 | ((Rvalue & 0xf) << 4));
+	  bfd_put_16 (input_bfd, Rvalue, hit_data);
+	}
+      else
+	{
+	  bfd_put_8 (input_bfd, (unsigned char) Rvalue, hit_data);
+	}
+      break;
 
-	     /* Check for range.  */
-	     if ((long) Rvalue > 0xffff || (long) Rvalue < 0x0)
-	      return bfd_reloc_overflow;
-	  }
-
-	bfd_put_16 (input_bfd, Rvalue, hit_data);
-	break;
-
-      case 2:
-	if ((r_type == R_CR16_ABS20) || (r_type == R_CR16_IMM20))
-	  {
-	     Rvalue1 = (bfd_get_16 (input_bfd, hit_data + 2)
-			| (((bfd_get_16 (input_bfd, hit_data) & 0xf) <<16)));
-
-	     /* Add or subtract the offset value.  */
-	     if (Rvalue1 & 0x80000)
-		Rvalue -= (~Rvalue1 + 1) & 0xfffff;
-	      else
-		Rvalue += Rvalue1;
+    case 2:
+      if (r_type == R_CR16_DISP16)
+	{
+	  Rvalue |= (bfd_get_16 (input_bfd, hit_data));
+	  Rvalue = ((Rvalue & 0xfffe) | ((Rvalue >> 16) & 0x1));
+	}
+      if (r_type == R_CR16_IMM16)
+	{
+	  Rvalue1 = bfd_get_16 (input_bfd, hit_data);
 
-	      /* Check for range.  */
-	      if ((long) Rvalue > 0xfffff || (long) Rvalue < 0x0)
-	       return bfd_reloc_overflow;
+	  Rvalue1 = (Rvalue1 ^ 0x8000) - 0x8000;
+	  Rvalue += Rvalue1;
 
-	    bfd_put_16 (input_bfd, ((bfd_get_16 (input_bfd, hit_data) & 0xfff0)
-			| ((Rvalue >> 16) & 0xf)), hit_data);
-	    bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data + 2);
-	  }
-	else if (r_type == R_CR16_GOT_REGREL20)
-	  {
-	    asection *sgot = elf_hash_table (info)->sgot;
-
-	    if (h != NULL)
-	      {
-		bfd_vma off;
-
-		off = h->got.offset;
-		BFD_ASSERT (off != (bfd_vma) -1);
-
-		if (! elf_hash_table (info)->dynamic_sections_created
-		     || SYMBOL_REFERENCES_LOCAL (info, h))
-		    /* This is actually a static link, or it is a
-		       -Bsymbolic link and the symbol is defined
-		       locally, or the symbol was forced to be local
-		       because of a version file.  We must initialize
-		       this entry in the global offset table.
-		       When doing a dynamic link, we create a .rela.got
-		       relocation entry to initialize the value.  This
-		       is done in the finish_dynamic_symbol routine.  */
-		  bfd_put_32 (output_bfd, Rvalue, sgot->contents + off);
+	  /* Check for range.  */
+	  if (Rvalue > 0xffff)
+	    return bfd_reloc_overflow;
+	}
 
-		  Rvalue = sgot->output_offset + off;
-		}
-	      else
-		{
-		   bfd_vma off;
+      bfd_put_16 (input_bfd, Rvalue, hit_data);
+      break;
 
-		   off = elf_local_got_offsets (input_bfd)[symndx];
-		   bfd_put_32 (output_bfd,Rvalue, sgot->contents + off);
+    case 4:
+      if ((r_type == R_CR16_ABS20) || (r_type == R_CR16_IMM20))
+	{
+	  Rvalue1 = (bfd_get_16 (input_bfd, hit_data + 2)
+		     | (((bfd_get_16 (input_bfd, hit_data) & 0xf) << 16)));
 
-		   Rvalue = sgot->output_offset + off;
-		}
+	  Rvalue1 = (Rvalue1 ^ 0x80000) - 0x80000;
+	  Rvalue += Rvalue1;
+
+	  /* Check for range.  */
+	  if (Rvalue > 0xfffff)
+	    return bfd_reloc_overflow;
 
-	     Rvalue += addend;
+	  bfd_put_16 (input_bfd, ((bfd_get_16 (input_bfd, hit_data) & 0xfff0)
+				  | ((Rvalue >> 16) & 0xf)), hit_data);
+	  bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data + 2);
+	}
+      else if (r_type == R_CR16_GOT_REGREL20)
+	{
+	  asection *sgot = elf_hash_table (info)->sgot;
+	  bfd_vma off;
 
-	     /* REVISIT: if ((long) Rvalue > 0xffffff ||
-				    (long) Rvalue < -0x800000).  */
-	     if ((long) Rvalue > 0xffffff || (long) Rvalue < 0)
-	       return bfd_reloc_overflow;
-
-
-	     bfd_put_16 (input_bfd, (bfd_get_16 (input_bfd, hit_data))
-			 | (((Rvalue >> 16) & 0xf) << 8), hit_data);
-	     bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data + 2);
-
-	  }
-	else if (r_type == R_CR16_GOTC_REGREL20)
-	  {
-	     asection *sgot = elf_hash_table (info)->sgot;
-
-	     if (h != NULL)
-	       {
-		 bfd_vma off;
-
-		 off = h->got.offset;
-		 BFD_ASSERT (off != (bfd_vma) -1);
-
-		  Rvalue >>=1; /* For code symbols.  */
-
-		 if (! elf_hash_table (info)->dynamic_sections_created
-		      || SYMBOL_REFERENCES_LOCAL (info, h))
-		 /* This is actually a static link, or it is a
-		    -Bsymbolic link and the symbol is defined
-		     locally, or the symbol was forced to be local
-		     because of a version file.  We must initialize
-		     this entry in the global offset table.
-		     When doing a dynamic link, we create a .rela.got
-		     relocation entry to initialize the value.  This
-		     is done in the finish_dynamic_symbol routine.  */
-		  bfd_put_32 (output_bfd, Rvalue, sgot->contents + off);
-
-		  Rvalue = sgot->output_offset + off;
-	       }
-	     else
-	       {
-		  bfd_vma off;
-
-		  off = elf_local_got_offsets (input_bfd)[symndx];
-		  Rvalue >>= 1;
-		  bfd_put_32 (output_bfd,Rvalue, sgot->contents + off);
-		  Rvalue = sgot->output_offset + off;
-	       }
-
-	     Rvalue += addend;
-
-	     /* Check if any value in DISP.  */
-	     Rvalue1 =((bfd_get_32 (input_bfd, hit_data) >>16)
-		       | (((bfd_get_32 (input_bfd, hit_data) & 0xfff) >> 8) <<16));
-
-	     /* Add or subtract the offset value.  */
-	     if (Rvalue1 & 0x80000)
-	       Rvalue -= (~Rvalue1 + 1) & 0xfffff;
-	     else
-	       Rvalue += Rvalue1;
+	  if (h != NULL)
+	    {
+	      off = h->got.offset;
+	      BFD_ASSERT (off != (bfd_vma) -1);
+
+	      if (! elf_hash_table (info)->dynamic_sections_created
+		  || SYMBOL_REFERENCES_LOCAL (info, h))
+		/* This is actually a static link, or it is a
+		   -Bsymbolic link and the symbol is defined
+		   locally, or the symbol was forced to be local
+		   because of a version file.  We must initialize
+		   this entry in the global offset table.
+		   When doing a dynamic link, we create a .rela.got
+		   relocation entry to initialize the value.  This
+		   is done in the finish_dynamic_symbol routine.  */
+		bfd_put_32 (output_bfd, Rvalue, sgot->contents + off);
+	    }
+	  else
+	    {
+	      off = elf_local_got_offsets (input_bfd)[symndx];
+	      bfd_put_32 (output_bfd, Rvalue, sgot->contents + off);
+	    }
+
+	  Rvalue = sgot->output_offset + off;
+	  Rvalue += addend;
+
+	  /* REVISIT: if ((long) Rvalue > 0xffffff ||
+	     (long) Rvalue < -0x800000).  */
+	  if (Rvalue > 0xffffff)
+	    return bfd_reloc_overflow;
+
+
+	  bfd_put_16 (input_bfd, (bfd_get_16 (input_bfd, hit_data))
+		      | (((Rvalue >> 16) & 0xf) << 8), hit_data);
+	  bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data + 2);
+
+	}
+      else if (r_type == R_CR16_GOTC_REGREL20)
+	{
+	  asection *sgot = elf_hash_table (info)->sgot;
+	  bfd_vma off;
+
+	  if (h != NULL)
+	    {
+	      off = h->got.offset;
+	      BFD_ASSERT (off != (bfd_vma) -1);
+
+	      Rvalue >>= 1; /* For code symbols.  */
+
+	      if (! elf_hash_table (info)->dynamic_sections_created
+		  || SYMBOL_REFERENCES_LOCAL (info, h))
+		/* This is actually a static link, or it is a
+		   -Bsymbolic link and the symbol is defined
+		   locally, or the symbol was forced to be local
+		   because of a version file.  We must initialize
+		   this entry in the global offset table.
+		   When doing a dynamic link, we create a .rela.got
+		   relocation entry to initialize the value.  This
+		   is done in the finish_dynamic_symbol routine.  */
+		bfd_put_32 (output_bfd, Rvalue, sgot->contents + off);
+	    }
+	  else
+	    {
+	      off = elf_local_got_offsets (input_bfd)[symndx];
+	      Rvalue >>= 1;
+	      bfd_put_32 (output_bfd, Rvalue, sgot->contents + off);
+	    }
+
+	  Rvalue = sgot->output_offset + off;
+	  Rvalue += addend;
+
+	  /* Check if any value in DISP.  */
+	  Rvalue1 = bfd_get_32 (input_bfd, hit_data);
+	  Rvalue1 = ((Rvalue1 >> 16) | ((Rvalue1 & 0xfff) >> 8 << 16));
+
+	  Rvalue1 = (Rvalue1 ^ 0x80000) - 0x80000;
+	  Rvalue += Rvalue1;
+
+	  /* Check for range.  */
+	  /* REVISIT: if ((long) Rvalue > 0xffffff
+	     || (long) Rvalue < -0x800000).  */
+	  if (Rvalue > 0xffffff)
+	    return bfd_reloc_overflow;
+
+	  bfd_put_16 (input_bfd, (bfd_get_16 (input_bfd, hit_data))
+		      | (((Rvalue >> 16) & 0xf) << 8), hit_data);
+	  bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data + 2);
+	}
+      else
+	{
+	  if (r_type == R_CR16_ABS24)
+	    {
+	      Rvalue1 = bfd_get_32 (input_bfd, hit_data);
+	      Rvalue1 = ((Rvalue1 >> 16)
+			 | ((Rvalue1 & 0xfff) >> 8 << 16)
+			 | ((Rvalue1 & 0xf) << 20));
+
+	      Rvalue1 = (Rvalue1 ^ 0x800000) - 0x800000;
+	      Rvalue += Rvalue1;
+
+	      /* Check for Range.  */
+	      if (Rvalue > 0xffffff)
+		return bfd_reloc_overflow;
+
+	      Rvalue = ((((Rvalue >> 20) & 0xf) | (((Rvalue >> 16) & 0xf)<<8)
+			 | (bfd_get_32 (input_bfd, hit_data) & 0xf0f0))
+			| ((Rvalue & 0xffff) << 16));
+	    }
+	  else if (r_type == R_CR16_DISP24)
+	    {
+	      Rvalue = ((((Rvalue >> 20)& 0xf) | (((Rvalue >>16) & 0xf)<<8)
+			 | (bfd_get_16 (input_bfd, hit_data)))
+			| (((Rvalue & 0xfffe) | ((Rvalue >> 24) & 0x1)) << 16));
+	    }
+	  else if ((r_type == R_CR16_IMM32) || (r_type == R_CR16_IMM32a))
+	    {
+	      Rvalue1 = bfd_get_32 (input_bfd, hit_data);
+	      Rvalue1 = (((Rvalue1 >> 16) & 0xffff)
+			 | ((Rvalue1 & 0xffff) << 16));
+
+	      Rvalue1 = (Rvalue1 ^ 0x80000000) - 0x80000000;
+	      Rvalue += Rvalue1;
 
 	      /* Check for range.  */
-	     /* REVISIT: if ((long) Rvalue > 0xffffff
-			     || (long) Rvalue < -0x800000).  */
-	     if ((long) Rvalue > 0xffffff || (long) Rvalue < 0)
-	       return bfd_reloc_overflow;
-
-	     bfd_put_16 (input_bfd, (bfd_get_16 (input_bfd, hit_data))
-			 | (((Rvalue >> 16) & 0xf) << 8), hit_data);
-	     bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data + 2);
-	  }
-	else
-	  {
-	     if (r_type == R_CR16_ABS24)
-	       {
-		  Rvalue1 = ((bfd_get_32 (input_bfd, hit_data) >> 16)
-			     | (((bfd_get_32 (input_bfd, hit_data) & 0xfff) >> 8) <<16)
-			     | (((bfd_get_32 (input_bfd, hit_data) & 0xf) <<20)));
-
-		  /* Add or subtract the offset value.  */
-		  if (Rvalue1 & 0x800000)
-		    Rvalue -= (~Rvalue1 + 1) & 0xffffff;
-		  else
-		    Rvalue += Rvalue1;
+	      if (Rvalue > 0xffffffff)
+		return bfd_reloc_overflow;
 
-		 /* Check for Range.  */
-		 if ((long) Rvalue > 0xffffff || (long) Rvalue < 0x0)
-		   return bfd_reloc_overflow;
-
-		 Rvalue = ((((Rvalue >> 20) & 0xf) | (((Rvalue >> 16) & 0xf)<<8)
-			   | (bfd_get_32 (input_bfd, hit_data) & 0xf0f0))
-			   | ((Rvalue & 0xffff) << 16));
-	       }
-	     else if (r_type == R_CR16_DISP24)
-	       {
-		  Rvalue = ((((Rvalue >> 20)& 0xf) | (((Rvalue >>16) & 0xf)<<8)
-			    | (bfd_get_16 (input_bfd, hit_data)))
-			    | (((Rvalue & 0xfffe) | ((Rvalue >> 24) & 0x1)) << 16));
-	       }
-	     else if ((r_type == R_CR16_IMM32) || (r_type == R_CR16_IMM32a))
-	       {
-		  Rvalue1 =((((bfd_get_32 (input_bfd, hit_data)) >> 16) &0xffff)
-			    | (((bfd_get_32 (input_bfd, hit_data)) &0xffff)) << 16);
-
-		 /* Add or subtract the offset value.  */
-		 if (Rvalue1 & 0x80000000)
-		   Rvalue -= (~Rvalue1 + 1) & 0xffffffff;
-		 else
-		   Rvalue += Rvalue1;
-
-		 /* Check for range.  */
-		 if (Rvalue > 0xffffffff || (long) Rvalue < 0x0)
-		   return bfd_reloc_overflow;
-
-		 Rvalue = (((Rvalue >> 16)& 0xffff) | (Rvalue & 0xffff) << 16);
-	       }
-	     else if (r_type == R_CR16_DISP24a)
-	       {
-		  Rvalue = (((Rvalue & 0xfffffe) | (Rvalue >> 23)));
-		  Rvalue = ((Rvalue >> 16) & 0xff) | ((Rvalue & 0xffff) << 16)
-			    | (bfd_get_32 (input_bfd, hit_data));
-	       }
-	     else if ((r_type == R_CR16_REGREL20)
-		      || (r_type == R_CR16_REGREL20a))
-	       {
-		  Rvalue1 = ((bfd_get_32 (input_bfd, hit_data) >> 16)
-			     | (((bfd_get_32 (input_bfd, hit_data) & 0xfff) >> 8) <<16));
-		  /* Add or subtract the offset value.  */
-		  if (Rvalue1 & 0x80000)
-		     Rvalue -= (~Rvalue1 + 1) & 0xfffff;
-		  else
-		     Rvalue += Rvalue1;
+	      Rvalue = (((Rvalue >> 16) & 0xffff) | (Rvalue & 0xffff) << 16);
+	    }
+	  else if (r_type == R_CR16_DISP24a)
+	    {
+	      Rvalue = (((Rvalue & 0xfffffe) | (Rvalue >> 23)));
+	      Rvalue = (((Rvalue >> 16) & 0xff) | ((Rvalue & 0xffff) << 16)
+			| bfd_get_32 (input_bfd, hit_data));
+	    }
+	  else if ((r_type == R_CR16_REGREL20)
+		   || (r_type == R_CR16_REGREL20a))
+	    {
+	      Rvalue1 = bfd_get_32 (input_bfd, hit_data);
+	      Rvalue1 = (((Rvalue1 >> 16) & 0xffff)
+			 | ((Rvalue1 & 0xfff) >> 8 << 16));
+
+	      Rvalue1 = (Rvalue1 ^ 0x80000) - 0x80000;
+	      Rvalue += Rvalue1;
 
-		  /* Check for range.  */
-		  if ((long) Rvalue > 0xfffff || (long) Rvalue < 0x0)
-		    return bfd_reloc_overflow;
-
-		  Rvalue = (((((Rvalue >> 20)& 0xf) | (((Rvalue >>16) & 0xf)<<8)
-			    | ((Rvalue & 0xffff) << 16)))
-			    | (bfd_get_32 (input_bfd, hit_data) & 0xf0ff));
-
-	      }
-	    else if (r_type == R_CR16_NUM32)
-	      {
-		 Rvalue1 = (bfd_get_32 (input_bfd, hit_data));
-
-		 /* Add or subtract the offset value */
-		 if (Rvalue1 & 0x80000000)
-		   Rvalue -= (~Rvalue1 + 1) & 0xffffffff;
-		 else
-		   Rvalue += Rvalue1;
-
-		/* Check for Ranga */
-		if (Rvalue > 0xffffffff)
-		  return bfd_reloc_overflow;
-	      }
-
-	    bfd_put_32 (input_bfd, Rvalue, hit_data);
-	  }
-	break;
+	      /* Check for range.  */
+	      if (Rvalue > 0xfffff)
+		return bfd_reloc_overflow;
+
+	      Rvalue = (((((Rvalue >> 20) & 0xf) | (((Rvalue >> 16) & 0xf) << 8)
+			  | ((Rvalue & 0xffff) << 16)))
+			| (bfd_get_32 (input_bfd, hit_data) & 0xf0ff));
 
-      default:
-	return bfd_reloc_notsupported;
+	    }
+	  else if (r_type == R_CR16_NUM32)
+	    {
+	      Rvalue1 = (bfd_get_32 (input_bfd, hit_data));
+
+	      Rvalue1 = (Rvalue1 ^ 0x80000000) - 0x80000000;
+	      Rvalue += Rvalue1;
+
+	      /* Check for Range.  */
+	      if (Rvalue > 0xffffffff)
+		return bfd_reloc_overflow;
+	    }
+
+	  bfd_put_32 (input_bfd, Rvalue, hit_data);
+	}
+      break;
+
+    default:
+      return bfd_reloc_notsupported;
     }
 
   return bfd_reloc_ok;
@@ -1239,7 +1203,7 @@ cr16_elf_final_link_relocate (reloc_howt
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 elf32_cr16_relax_delete_bytes (struct bfd_link_info *link_info, bfd *abfd,
 			       asection *sec, bfd_vma addr, int count)
 {
@@ -1273,7 +1237,7 @@ elf32_cr16_relax_delete_bytes (struct bf
   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
     /* Get the new reloc address.  */
     if ((irel->r_offset > addr && irel->r_offset < toaddr))
-	irel->r_offset -= count;
+      irel->r_offset -= count;
 
   /* Adjust the local symbols defined in this section.  */
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -1297,7 +1261,7 @@ elf32_cr16_relax_delete_bytes (struct bf
 	      if (ELF32_R_TYPE (irel->r_info) != (int) R_CR16_SWITCH8
 		  && ELF32_R_TYPE (irel->r_info) != (int) R_CR16_SWITCH16
 		  && ELF32_R_TYPE (irel->r_info) != (int) R_CR16_SWITCH32)
-		 continue;
+		continue;
 
 	      r_symndx = ELF32_R_SYM (irel->r_info);
 	      rsym = (Elf_Internal_Sym *) symtab_hdr->contents + r_symndx;
@@ -1323,7 +1287,7 @@ elf32_cr16_relax_delete_bytes (struct bf
 
   /* Now adjust the global symbols defined in this section.  */
   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
-	       - symtab_hdr->sh_info);
+	      - symtab_hdr->sh_info);
   sym_hashes = start_hashes = elf_sym_hashes (abfd);
   end_hashes = sym_hashes + symcount;
 
@@ -1356,19 +1320,19 @@ elf32_cr16_relax_delete_bytes (struct bf
 	}
 
       if ((sym_hash->root.type == bfd_link_hash_defined
-	  || sym_hash->root.type == bfd_link_hash_defweak)
+	   || sym_hash->root.type == bfd_link_hash_defweak)
 	  && sym_hash->root.u.def.section == sec
 	  && sym_hash->root.u.def.value > addr
 	  && sym_hash->root.u.def.value < toaddr)
 	sym_hash->root.u.def.value -= count;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relocate a CR16 ELF section.  */
 
-static bfd_boolean
+static int
 elf32_cr16_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 			     bfd *input_bfd, asection *input_section,
 			     bfd_byte *contents, Elf_Internal_Rela *relocs,
@@ -1410,7 +1374,7 @@ elf32_cr16_relocate_section (bfd *output
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1450,42 +1414,42 @@ elf32_cr16_relocate_section (bfd *output
 
 	  switch (r)
 	    {
-	     case bfd_reloc_overflow:
-	       (*info->callbacks->reloc_overflow)
-		 (info, (h ? &h->root : NULL), name, howto->name,
-		  (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
-	       break;
-
-	     case bfd_reloc_undefined:
-	       (*info->callbacks->undefined_symbol)
-		 (info, name, input_bfd, input_section, rel->r_offset, TRUE);
-	       break;
-
-	     case bfd_reloc_outofrange:
-	       msg = _("internal error: out of range error");
-	       goto common_error;
+	    case bfd_reloc_overflow:
+	      (*info->callbacks->reloc_overflow)
+		(info, (h ? &h->root : NULL), name, howto->name,
+		 (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
+	      break;
 
-	     case bfd_reloc_notsupported:
-	       msg = _("internal error: unsupported relocation error");
-	       goto common_error;
+	    case bfd_reloc_undefined:
+	      (*info->callbacks->undefined_symbol)
+		(info, name, input_bfd, input_section, rel->r_offset, true);
+	      break;
 
-	     case bfd_reloc_dangerous:
-	       msg = _("internal error: dangerous error");
-	       goto common_error;
+	    case bfd_reloc_outofrange:
+	      msg = _("internal error: out of range error");
+	      goto common_error;
+
+	    case bfd_reloc_notsupported:
+	      msg = _("internal error: unsupported relocation error");
+	      goto common_error;
+
+	    case bfd_reloc_dangerous:
+	      msg = _("internal error: dangerous error");
+	      goto common_error;
 
-	     default:
-	       msg = _("internal error: unknown error");
-	       /* Fall through.  */
+	    default:
+	      msg = _("internal error: unknown error");
+	      /* Fall through.  */
 
-	     common_error:
-	       (*info->callbacks->warning) (info, msg, name, input_bfd,
-					    input_section, rel->r_offset);
-	       break;
+	    common_error:
+	      (*info->callbacks->warning) (info, msg, name, input_bfd,
+					   input_section, rel->r_offset);
+	      break;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This is a version of bfd_generic_get_relocated_section_contents
@@ -1496,7 +1460,7 @@ elf32_cr16_get_relocated_section_content
 					   struct bfd_link_info *link_info,
 					   struct bfd_link_order *link_order,
 					   bfd_byte *data,
-					   bfd_boolean relocatable,
+					   bool relocatable,
 					   asymbol **symbols)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -1517,6 +1481,13 @@ elf32_cr16_get_relocated_section_content
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
 
+  bfd_byte *orig_data = data;
+  if (data == NULL)
+    {
+      data = bfd_malloc (input_section->size);
+      if (data == NULL)
+	return NULL;
+    }
   memcpy (data, elf_section_data (input_section)->this_hdr.contents,
 	  (size_t) input_section->size);
 
@@ -1529,7 +1500,7 @@ elf32_cr16_get_relocated_section_content
       bfd_size_type amt;
 
       internal_relocs = _bfd_elf_link_read_relocs (input_bfd, input_section,
-						   NULL, NULL, FALSE);
+						   NULL, NULL, false);
       if (internal_relocs == NULL)
 	goto error_return;
 
@@ -1568,14 +1539,12 @@ elf32_cr16_get_relocated_section_content
 	}
 
       if (! elf32_cr16_relocate_section (output_bfd, link_info, input_bfd,
-				     input_section, data, internal_relocs,
-				     isymbuf, sections))
+					 input_section, data, internal_relocs,
+					 isymbuf, sections))
 	goto error_return;
 
-      if (sections != NULL)
-	free (sections);
-      if (isymbuf != NULL
-	  && symtab_hdr->contents != (unsigned char *) isymbuf)
+      free (sections);
+      if (symtab_hdr->contents != (unsigned char *) isymbuf)
 	free (isymbuf);
       if (elf_section_data (input_section)->relocs != internal_relocs)
 	free (internal_relocs);
@@ -1584,14 +1553,13 @@ elf32_cr16_get_relocated_section_content
   return data;
 
  error_return:
-  if (sections != NULL)
-    free (sections);
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  free (sections);
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (input_section)->relocs != internal_relocs)
+  if (elf_section_data (input_section)->relocs != internal_relocs)
     free (internal_relocs);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
@@ -1641,7 +1609,7 @@ static struct bfd_link_hash_table *
 elf32_cr16_link_hash_table_create (bfd *abfd)
 {
   struct elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_link_hash_table);
+  size_t amt = sizeof (struct elf_link_hash_table);
 
   ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
   if (ret == (struct elf_link_hash_table *) NULL)
@@ -1664,8 +1632,8 @@ elf_cr16_mach (flagword flags)
 {
   switch (flags)
     {
-      case EM_CR16:
-      default:
+    case EM_CR16:
+    default:
       return bfd_mach_cr16;
     }
 }
@@ -1674,51 +1642,51 @@ elf_cr16_mach (flagword flags)
    file.  This gets the CR16 architecture right based on the machine
    number.  */
 
-static bfd_boolean
+static bool
 _bfd_cr16_elf_final_write_processing (bfd *abfd)
 {
   unsigned long val;
   switch (bfd_get_mach (abfd))
     {
-     default:
-     case bfd_mach_cr16:
-	val = EM_CR16;
-	break;
+    default:
+    case bfd_mach_cr16:
+      val = EM_CR16;
+      break;
     }
   elf_elfheader (abfd)->e_flags |= val;
   return _bfd_elf_final_write_processing (abfd);
 }
 
 
-static bfd_boolean
+static bool
 _bfd_cr16_elf_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_cr16,
 			     elf_cr16_mach (elf_elfheader (abfd)->e_flags));
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 _bfd_cr16_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
       && bfd_get_mach (obfd) < bfd_get_mach (ibfd))
     {
       if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
 			       bfd_get_mach (ibfd)))
-	 return FALSE;
-     }
+	return false;
+    }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -1733,9 +1701,9 @@ _bfd_cr16_elf_merge_private_bfd_data (bf
 
    Symbol- and reloc-reading infrastructure copied from elf-m10200.c.  */
 
-static bfd_boolean
+static bool
 elf32_cr16_relax_section (bfd *abfd, asection *sec,
-			  struct bfd_link_info *link_info, bfd_boolean *again)
+			  struct bfd_link_info *link_info, bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -1744,16 +1712,17 @@ elf32_cr16_relax_section (bfd *abfd, ase
   Elf_Internal_Sym *isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -1870,11 +1839,13 @@ elf32_cr16_relax_section (bfd *abfd, ase
 	      unsigned int code;
 
 	      /* Get the opcode.  */
-	      code = (unsigned int) bfd_get_32 (abfd, contents + irel->r_offset);
+	      code = (unsigned int) bfd_get_32 (abfd,
+						contents + irel->r_offset);
 
 	      /* Verify it's a 'bcond' and fix the opcode.  */
 	      if ((code  & 0xffff) == 0x0010)
-		bfd_put_16 (abfd, 0x1800 | ((0xf & (code >> 20)) << 4), contents + irel->r_offset);
+		bfd_put_16 (abfd, 0x1800 | ((0xf & (code >> 20)) << 4),
+			    contents + irel->r_offset);
 	      else
 		continue;
 
@@ -1889,12 +1860,12 @@ elf32_cr16_relax_section (bfd *abfd, ase
 
 	      /* Delete two bytes of data.  */
 	      if (!elf32_cr16_relax_delete_bytes (link_info, abfd, sec,
-						   irel->r_offset + 2, 2))
+						  irel->r_offset + 2, 2))
 		goto error_return;
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -1918,7 +1889,7 @@ elf32_cr16_relax_section (bfd *abfd, ase
 	      unsigned short code;
 
 	      /* Get the opcode.  */
-	      code = (unsigned short) bfd_get_16 (abfd, contents + irel->r_offset);
+	      code = bfd_get_16 (abfd, contents + irel->r_offset);
 
 	      /* Verify it's a 'bcond' and fix the opcode.  */
 	      if ((code & 0xff0f) == 0x1800)
@@ -1937,12 +1908,12 @@ elf32_cr16_relax_section (bfd *abfd, ase
 
 	      /* Delete two bytes of data.  */
 	      if (!elf32_cr16_relax_delete_bytes (link_info, abfd, sec,
-						   irel->r_offset + 2, 2))
+						  irel->r_offset + 2, 2))
 		goto error_return;
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -1954,8 +1925,8 @@ elf32_cr16_relax_section (bfd *abfd, ase
 	  bfd_vma value1 = 0;
 
 	  /* Get the existing value from the mcode */
-	  value1 = ((bfd_get_32 (abfd, contents + irel->r_offset + 2) >> 16)
-		   |(((bfd_get_32 (abfd, contents + irel->r_offset + 2) & 0xffff) << 16)));
+	  value1 = bfd_get_32 (abfd, contents + irel->r_offset + 2);
+	  value1 = (value1 >> 16) | ((value1 & 0xffff) << 16);
 
 	  /* See if the value will fit in 20 bits.  */
 	  if ((long) (value + value1) < 0xfffff && (long) (value + value1) > 0)
@@ -1963,13 +1934,13 @@ elf32_cr16_relax_section (bfd *abfd, ase
 	      unsigned short code;
 
 	      /* Get the opcode.  */
-	      code = (unsigned short) bfd_get_16 (abfd, contents + irel->r_offset);
+	      code = bfd_get_16 (abfd, contents + irel->r_offset);
 
 	      /* Verify it's a 'arithmetic ADDD or MOVD instruction'.
 		 For ADDD and MOVD only, convert to IMM32 -> IMM20.  */
 
 	      if (((code & 0xfff0) == 0x0070) || ((code & 0xfff0) == 0x0020))
-		 is_add_mov = 1;
+		is_add_mov = 1;
 
 	      if (is_add_mov)
 		{
@@ -1991,9 +1962,16 @@ elf32_cr16_relax_section (bfd *abfd, ase
 		     place the 16-20bits (ie 4 bit) in new opcode,
 		     as the 0xffffxxxx, the higher 2 byte values removed. */
 		  if (value1 & 0x80000000)
-		    bfd_put_8 (abfd, (0x0f | (bfd_get_8(abfd, contents + irel->r_offset))), contents + irel->r_offset);
+		    bfd_put_8 (abfd,
+			       (0x0f | (bfd_get_8 (abfd,
+						   contents + irel->r_offset))),
+			       contents + irel->r_offset);
 		  else
-		    bfd_put_8 (abfd, (((value1 >> 16)&0xf) | (bfd_get_8(abfd, contents + irel->r_offset))), contents + irel->r_offset);
+		    bfd_put_8 (abfd,
+			       (((value1 >> 16) & 0xf)
+				| (bfd_get_8 (abfd,
+					      contents + irel->r_offset))),
+			       contents + irel->r_offset);
 
 		  /* Fix the relocation's type.  */
 		  irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
@@ -2006,7 +1984,7 @@ elf32_cr16_relax_section (bfd *abfd, ase
 
 		  /* That will change things, so, we should relax again.
 		     Note that this is not required, and it may be slow.  */
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 
@@ -2017,7 +1995,7 @@ elf32_cr16_relax_section (bfd *abfd, ase
 	      unsigned short code;
 
 	      /* Get the opcode.  */
-	      code = (unsigned short) bfd_get_16 (abfd, contents + irel->r_offset);
+	      code = bfd_get_16 (abfd, contents + irel->r_offset);
 
 	      /* Note that we've changed the relocs, section contents, etc.  */
 	      elf_section_data (sec)->relocs = internal_relocs;
@@ -2040,7 +2018,10 @@ elf32_cr16_relax_section (bfd *abfd, ase
 		 place the 12-16bits (ie 4 bit) in new opcode,
 		 as the 0xfffffxxx, the higher 2 byte values removed. */
 	      if (value1 & 0x80000000)
-		bfd_put_8 (abfd, (0x0f | (bfd_get_8(abfd, contents + irel->r_offset))), contents + irel->r_offset);
+		bfd_put_8 (abfd,
+			   (0x0f | (bfd_get_8 (abfd,
+					       contents + irel->r_offset))),
+			   contents + irel->r_offset);
 	      else
 		bfd_put_16 (abfd, value1, contents + irel->r_offset + 2);
 
@@ -2056,7 +2037,7 @@ elf32_cr16_relax_section (bfd *abfd, ase
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -2074,7 +2055,8 @@ elf32_cr16_relax_section (bfd *abfd, ase
 
 	  if (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_IMM20)
 	    {
-	      value1 |= ((bfd_get_16 (abfd, contents + irel->r_offset + 1) & 0xf000) << 0x4);
+	      value1 |= ((bfd_get_16 (abfd, contents + irel->r_offset + 1)
+			  & 0xf000) << 0x4);
 	    }
 
 	  /* See if the value will fit in 4 bits.  */
@@ -2084,7 +2066,7 @@ elf32_cr16_relax_section (bfd *abfd, ase
 	      unsigned short code;
 
 	      /* Get the opcode.  */
-	      code = (unsigned short) bfd_get_16 (abfd, contents + irel->r_offset);
+	      code = bfd_get_16 (abfd, contents + irel->r_offset);
 
 	      /* Note that we've changed the relocs, section contents, etc.  */
 	      elf_section_data (sec)->relocs = internal_relocs;
@@ -2098,7 +2080,8 @@ elf32_cr16_relax_section (bfd *abfd, ase
 		    bfd_put_8 (abfd, 0x60, contents + irel->r_offset);
 		  else				      /* For addd imm20.  */
 		    bfd_put_8 (abfd, 0x54, contents + irel->r_offset);
-		  bfd_put_8 (abfd, (code & 0xf0) >> 4, contents + irel->r_offset + 1);
+		  bfd_put_8 (abfd, (code & 0xf0) >> 4,
+			     contents + irel->r_offset + 1);
 		}
 	      else
 		{
@@ -2147,7 +2130,7 @@ elf32_cr16_relax_section (bfd *abfd, ase
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 #endif
@@ -2159,8 +2142,8 @@ elf32_cr16_relax_section (bfd *abfd, ase
       if (! link_info->keep_memory)
 	free (isymbuf);
       else
-       /* Cache the symbols for elf_link_input_bfd.  */
-       symtab_hdr->contents = (unsigned char *) isymbuf;
+	/* Cache the symbols for elf_link_input_bfd.  */
+	symtab_hdr->contents = (unsigned char *) isymbuf;
     }
 
   if (contents != NULL
@@ -2169,29 +2152,25 @@ elf32_cr16_relax_section (bfd *abfd, ase
       if (! link_info->keep_memory)
 	free (contents);
       else
-       /* Cache the section contents for elf_link_input_bfd.  */
-       elf_section_data (sec)->this_hdr.contents = contents;
+	/* Cache the section contents for elf_link_input_bfd.  */
+	elf_section_data (sec)->this_hdr.contents = contents;
 
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 static asection *
@@ -2206,7 +2185,7 @@ elf32_cr16_gc_mark_hook (asection *sec,
 
 /* Create dynamic sections when linking against a dynamic object.  */
 
-static bfd_boolean
+static bool
 _bfd_cr16_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   flagword   flags;
@@ -2227,7 +2206,7 @@ _bfd_cr16_elf_create_dynamic_sections (b
 
     default:
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
@@ -2243,10 +2222,10 @@ _bfd_cr16_elf_create_dynamic_sections (b
   htab->srelplt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
   if (! _bfd_cr16_elf_create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   if (bed->want_dynbss)
     {
@@ -2259,7 +2238,7 @@ _bfd_cr16_elf_create_dynamic_sections (b
       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
 					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
-	return FALSE;
+	return false;
 
       /* The .rel[a].bss section holds copy relocs.  This section is not
 	 normally needed.  We need to create it here, though, so that the
@@ -2280,11 +2259,11 @@ _bfd_cr16_elf_create_dynamic_sections (b
 						  flags | SEC_READONLY);
 	  if (s == NULL
 	      || !bfd_set_section_alignment (s, ptralign))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -2293,7 +2272,7 @@ _bfd_cr16_elf_create_dynamic_sections (b
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 _bfd_cr16_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
 				     struct elf_link_hash_entry * h)
 {
@@ -2326,14 +2305,14 @@ _bfd_cr16_elf_adjust_dynamic_symbol (str
 	     a procedure linkage table, and we can just do a REL32
 	     reloc instead.  */
 	  BFD_ASSERT (h->needs_plt);
-	  return TRUE;
+	  return true;
 	}
 
       /* Make sure this symbol is output as a dynamic symbol.  */
       if (h->dynindx == -1)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       /* We also need to make an entry in the .got.plt section, which
@@ -2349,7 +2328,7 @@ _bfd_cr16_elf_adjust_dynamic_symbol (str
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
-      return TRUE;
+      return true;
     }
 
   /* If this is a weak symbol, and there is a real definition, the
@@ -2361,7 +2340,7 @@ _bfd_cr16_elf_adjust_dynamic_symbol (str
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2372,12 +2351,12 @@ _bfd_cr16_elf_adjust_dynamic_symbol (str
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_executable (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -2411,15 +2390,13 @@ _bfd_cr16_elf_adjust_dynamic_symbol (str
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 _bfd_cr16_elf_size_dynamic_sections (bfd * output_bfd,
 				     struct bfd_link_info * info)
 {
   bfd * dynobj;
   asection * s;
-  bfd_boolean plt;
-  bfd_boolean relocs;
-  bfd_boolean reltext;
+  bool relocs;
 
   dynobj = elf_hash_table (info)->dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -2452,9 +2429,7 @@ _bfd_cr16_elf_size_dynamic_sections (bfd
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  plt = FALSE;
-  relocs = FALSE;
-  reltext = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char * name;
@@ -2469,41 +2444,23 @@ _bfd_cr16_elf_size_dynamic_sections (bfd
       if (strcmp (name, ".plt") == 0)
 	{
 	  /* Remember whether there is a PLT.  */
-	  plt = s->size != 0;
+	  ;
 	}
-      else if (CONST_STRNEQ (name, ".rela"))
+      else if (startswith (name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
-	      asection * target;
-
 	      /* Remember whether there are any reloc sections other
 		 than .rela.plt.  */
 	      if (strcmp (name, ".rela.plt") != 0)
-		{
-		  const char * outname;
-
-		  relocs = TRUE;
-
-		  /* If this relocation section applies to a read only
-		     section, then we probably need a DT_TEXTREL
-		     entry.  The entries in the .rela.plt section
-		     really apply to the .got section, which we
-		     created ourselves and so know is not readonly.  */
-		  outname = bfd_section_name (s->output_section);
-		  target = bfd_get_section_by_name (output_bfd, outname + 5);
-		  if (target != NULL
-		      && (target->flags & SEC_READONLY) != 0
-		      && (target->flags & SEC_ALLOC) != 0)
-		    reltext = TRUE;
-		}
+		relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
 	      s->reloc_count = 0;
 	    }
 	}
-      else if (! CONST_STRNEQ (name, ".got")
+      else if (! startswith (name, ".got")
 	       && strcmp (name, ".dynbss") != 0)
 	/* It's not one of our sections, so don't allocate space.  */
 	continue;
@@ -2523,8 +2480,8 @@ _bfd_cr16_elf_size_dynamic_sections (bfd
 	  continue;
 	}
 
-	if ((s->flags & SEC_HAS_CONTENTS) == 0)
-	  continue;
+      if ((s->flags & SEC_HAS_CONTENTS) == 0)
+	continue;
 
       /* Allocate memory for the section contents.  We use bfd_zalloc
 	 here in case unused entries are not reclaimed before the
@@ -2533,54 +2490,16 @@ _bfd_cr16_elf_size_dynamic_sections (bfd
 	 instead of garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in _bfd_cr16_elf_finish_dynamic_sections,
-	 but we must add the entries now so that we get the correct
-	 size for the .dynamic section.  The DT_DEBUG entry is filled
-	 in by the dynamic linker and used by the debugger.  */
-      if (! bfd_link_executable (info))
-	{
-	  if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (plt)
-	{
-	  if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT,
-					      sizeof (Elf32_External_Rela)))
-	    return FALSE;
-	}
-
-      if (reltext)
-	{
-	  if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0))
-	    return FALSE;
-	}
-    }
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 _bfd_cr16_elf_finish_dynamic_symbol (bfd * output_bfd,
 				     struct bfd_link_info * info,
 				     struct elf_link_hash_entry * h,
@@ -2654,7 +2573,7 @@ _bfd_cr16_elf_finish_dynamic_symbol (bfd
       bfd_elf32_swap_reloca_out (output_bfd, &rel,
 				 (bfd_byte *) ((Elf32_External_Rela *) s->contents
 					       + s->reloc_count));
-     ++ s->reloc_count;
+      ++ s->reloc_count;
     }
 
   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
@@ -2662,12 +2581,12 @@ _bfd_cr16_elf_finish_dynamic_symbol (bfd
       || h == elf_hash_table (info)->hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 _bfd_cr16_elf_finish_dynamic_sections (bfd * output_bfd,
 				       struct bfd_link_info * info)
 {
@@ -2737,7 +2656,7 @@ _bfd_cr16_elf_finish_dynamic_sections (b
 
   elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
 
-  return TRUE;
+  return true;
 }
 
 /* Given a .data.rel section and a .emreloc in-memory section, store
@@ -2747,7 +2666,7 @@ _bfd_cr16_elf_finish_dynamic_sections (b
    after the add_symbols entry point has been called for all the
    objects, and before the final_link entry point is called.  */
 
-bfd_boolean
+bool
 bfd_cr16_elf32_create_embedded_relocs (bfd *abfd,
 				       struct bfd_link_info *info,
 				       asection *datasec,
@@ -2766,7 +2685,7 @@ bfd_cr16_elf32_create_embedded_relocs (b
   *errmsg = NULL;
 
   if (datasec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -2789,14 +2708,14 @@ bfd_cr16_elf32_create_embedded_relocs (b
       asection *targetsec;
 
       /* We are going to write a four byte longword into the runtime
-       reloc section.  The longword will be the address in the data
-       section which must be relocated.  It is followed by the name
-       of the target section NUL-padded or truncated to 8
-       characters.  */
+	 reloc section.  The longword will be the address in the data
+	 section which must be relocated.  It is followed by the name
+	 of the target section NUL-padded or truncated to 8
+	 characters.  */
 
       /* We can only relocate absolute longword relocs at run time.  */
       if (!((ELF32_R_TYPE (irel->r_info) == (int) R_CR16_NUM32a)
-	  || (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_NUM32)))
+	    || (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_NUM32)))
 	{
 	  *errmsg = _("unsupported relocation type");
 	  bfd_set_error (bfd_error_bad_value);
@@ -2844,23 +2763,21 @@ bfd_cr16_elf32_create_embedded_relocs (b
       memset (p + 4, 0, 4);
       if ((ELF32_R_TYPE (irel->r_info) == (int) R_CR16_NUM32a)
 	  && (targetsec != NULL) )
-	 strncpy ((char *) p + 4, targetsec->output_section->name, 4);
+	strncpy ((char *) p + 4, targetsec->output_section->name, 4);
     }
 
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (datasec)->relocs != internal_relocs)
+  if (elf_section_data (datasec)->relocs != internal_relocs)
     free (internal_relocs);
-  return TRUE;
+  return true;
 
-error_return:
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+ error_return:
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (datasec)->relocs != internal_relocs)
+  if (elf_section_data (datasec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-cr16.h ./bfd/elf32-cr16.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-cr16.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-cr16.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for National Semiconductor's CR16 ELF
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -17,6 +17,6 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
 
-extern bfd_boolean bfd_cr16_elf32_create_embedded_relocs
+extern bool bfd_cr16_elf32_create_embedded_relocs
   (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
    char **);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-cris.c ./bfd/elf32-cris.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-cris.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-cris.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* CRIS-specific support for 32-bit ELF.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Contributed by Axis Communications AB.
    Written by Hans-Peter Nilsson, based on elf32-fr30.c
    PIC and shlib bits based primarily on elf32-m68k.c and elf32-i386.c.
@@ -31,7 +31,7 @@
 bfd_reloc_status_type
 cris_elf_pcrel_reloc (bfd *, arelent *, asymbol *, void *,
 		      asection *, bfd *, char **);
-static bfd_boolean
+static bool
 cris_elf_set_mach_from_flags (bfd *, unsigned long);
 
 /* Forward declarations.  */
@@ -40,54 +40,54 @@ static reloc_howto_type cris_elf_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_CRIS_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit absolute relocation.  */
   HOWTO (R_CRIS_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_CRIS_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_CRIS_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 /* We don't want overflow complaints for 64-bit vma builds
 	    for e.g. sym+0x40000000 (or actually sym-0xc0000000 in
@@ -97,85 +97,85 @@ static reloc_howto_type cris_elf_howto_t
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit PC-relative relocation.  */
   HOWTO (R_CRIS_8_PCREL,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 cris_elf_pcrel_reloc,	/* special_function */
 	 "R_CRIS_8_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit PC-relative relocation.  */
   HOWTO (R_CRIS_16_PCREL,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 cris_elf_pcrel_reloc,	/* special_function */
 	 "R_CRIS_16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 32 bit PC-relative relocation.  */
   HOWTO (R_CRIS_32_PCREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 cris_elf_pcrel_reloc,	/* special_function */
 	 "R_CRIS_32_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_CRIS_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_CRIS_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_CRIS_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_CRIS_GNU_VTENTRY",	 /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* This is used only by the dynamic linker.  The symbol should exist
      both in the object being run and in some shared library.  The
@@ -184,172 +184,172 @@ static reloc_howto_type cris_elf_howto_t
      run has to have the data at some particular address.  */
   HOWTO (R_CRIS_COPY,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Like R_CRIS_32, but used when setting global offset table entries.  */
   HOWTO (R_CRIS_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Marks a procedure linkage table entry for a symbol.  */
   HOWTO (R_CRIS_JUMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_JUMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Used only by the dynamic linker.  When the object is run, this
      longword is set to the load address of the object, plus the
      addend.  */
   HOWTO (R_CRIS_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Like R_CRIS_32, but referring to the GOT table entry for the symbol.  */
   HOWTO (R_CRIS_16_GOT,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_16_GOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRIS_32_GOT,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_32_GOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Like R_CRIS_32_GOT, but referring to (and requesting a) PLT part of
      the GOT table for the symbol.  */
   HOWTO (R_CRIS_16_GOTPLT,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_16_GOTPLT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRIS_32_GOTPLT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_32_GOTPLT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32-bit offset from GOT to (local const) symbol: no GOT entry should
      be necessary.  */
   HOWTO (R_CRIS_32_GOTREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_32_GOTREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32-bit offset from GOT to entry for this symbol in PLT and request
      to create PLT entry for symbol.  */
   HOWTO (R_CRIS_32_PLT_GOTREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRIS_32_PLT_GOTREL", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32-bit offset from PC (location after the relocation) + addend to
      entry for this symbol in PLT and request to create PLT entry for
      symbol.  */
   HOWTO (R_CRIS_32_PLT_PCREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 cris_elf_pcrel_reloc,	/* special_function */
 	 "R_CRIS_32_PLT_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* We don't handle these in any special manner and cross-format
      linking is not supported; just recognize them enough to pass them
@@ -357,11 +357,11 @@ static reloc_howto_type cris_elf_howto_t
      tests to actually refuse gracefully to handle these and PIC
      relocs for cross-format linking.  */
 #define TLSHOWTO32(name) \
- HOWTO (name, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, \
-	bfd_elf_generic_reloc, #name, FALSE, 0, 0xffffffff, FALSE)
+ HOWTO (name, 0, 4, 32, false, 0, complain_overflow_bitfield, \
+	bfd_elf_generic_reloc, #name, false, 0, 0xffffffff, false)
 #define TLSHOWTO16X(name, X)	     \
- HOWTO (name, 0, 1, 16, FALSE, 0, complain_overflow_ ## X, \
-	bfd_elf_generic_reloc, #name, FALSE, 0, 0xffff, FALSE)
+ HOWTO (name, 0, 2, 16, false, 0, complain_overflow_ ## X, \
+	bfd_elf_generic_reloc, #name, false, 0, 0xffff, false)
 #define TLSHOWTO16(name) TLSHOWTO16X(name, unsigned)
 #define TLSHOWTO16S(name) TLSHOWTO16X(name, signed)
 
@@ -453,7 +453,7 @@ cris_reloc_name_lookup (bfd *abfd ATTRIB
 
 /* Set the howto pointer for an CRIS ELF reloc.  */
 
-static bfd_boolean
+static bool
 cris_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
 			 arelent * cache_ptr,
 			 Elf_Internal_Rela * dst)
@@ -467,10 +467,10 @@ cris_info_to_howto_rela (bfd * abfd ATTR
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & cris_elf_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 bfd_reloc_status_type
@@ -492,7 +492,7 @@ cris_elf_pcrel_reloc (bfd *abfd ATTRIBUT
 
      Only adjust when doing a final link.  */
   if (output_bfd == (bfd *) NULL)
-    reloc_entry->addend -= 1 << reloc_entry->howto->size;
+    reloc_entry->addend -= bfd_get_reloc_size (reloc_entry->howto);
 
   return
     bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
@@ -504,7 +504,7 @@ cris_elf_pcrel_reloc (bfd *abfd ATTRIBUT
    some similarities with other ports, hoping to simplify general
    changes, while still keeping Linux/CRIS and Linux/CRISv32 code apart.  */
 
-static bfd_boolean
+static bool
 cris_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -514,7 +514,7 @@ cris_elf_grok_prstatus (bfd *abfd, Elf_I
     switch (note->descsz)
       {
       default:
-	return FALSE;
+	return false;
 
       case 202:		/* Linux/CRISv32 */
 	/* pr_cursig */
@@ -533,7 +533,7 @@ cris_elf_grok_prstatus (bfd *abfd, Elf_I
     switch (note->descsz)
       {
       default:
-	return FALSE;
+	return false;
 
       case 214:		/* Linux/CRIS */
 	/* pr_cursig */
@@ -554,14 +554,14 @@ cris_elf_grok_prstatus (bfd *abfd, Elf_I
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 cris_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (bfd_get_mach (abfd) == bfd_mach_cris_v32)
     switch (note->descsz)
       {
       default:
-	return FALSE;
+	return false;
 
       case 124:		/* Linux/CRISv32 elf_prpsinfo */
 	elf_tdata (abfd)->core->program
@@ -573,7 +573,7 @@ cris_elf_grok_psinfo (bfd *abfd, Elf_Int
     switch (note->descsz)
       {
       default:
-	return FALSE;
+	return false;
 
       case 124:		/* Linux/CRIS elf_prpsinfo */
 	elf_tdata (abfd)->core->program
@@ -594,7 +594,7 @@ cris_elf_grok_psinfo (bfd *abfd, Elf_Int
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 /* The name of the dynamic interpreter.  This is put in the .interp
@@ -787,10 +787,10 @@ struct elf_cris_link_hash_entry
   bfd_signed_vma dtp_refcount;
 };
 
-static bfd_boolean
+static bool
 elf_cris_discard_excess_dso_dynamics (struct elf_cris_link_hash_entry *,
 				      void * );
-static bfd_boolean
+static bool
 elf_cris_discard_excess_program_dynamics (struct elf_cris_link_hash_entry *,
 					  void *);
 
@@ -831,14 +831,15 @@ struct elf_cris_link_hash_table
 #define elf_cris_link_hash_traverse(table, func, info)			\
   (elf_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the CRIS ELF linker hash table from a link_info structure.  */
 
 #define elf_cris_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == CRIS_ELF_DATA ? ((struct elf_cris_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == CRIS_ELF_DATA)		\
+   ? (struct elf_cris_link_hash_table *) (p)->hash : NULL)
 
 /* Get the CRIS ELF linker hash entry from a regular hash entry (the
    "parent class").  The .root reference is just a simple type
@@ -889,7 +890,7 @@ static struct bfd_link_hash_table *
 elf_cris_link_hash_table_create (bfd *abfd)
 {
   struct elf_cris_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_cris_link_hash_table);
+  size_t amt = sizeof (struct elf_cris_link_hash_table);
 
   ret = ((struct elf_cris_link_hash_table *) bfd_zmalloc (amt));
   if (ret == (struct elf_cris_link_hash_table *) NULL)
@@ -967,7 +968,7 @@ static int additional_relocation_error_m
 /* Relocate an CRIS ELF section.  See elf32-fr30.c, from where this was
    copied, for further comments.  */
 
-static bfd_boolean
+static int
 cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -991,7 +992,7 @@ cris_elf_relocate_section (bfd *output_b
 
   htab = elf_cris_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
   local_got_offsets = elf_local_got_offsets (input_bfd);
@@ -1021,7 +1022,7 @@ cris_elf_relocate_section (bfd *output_b
       bfd_reloc_status_type r;
       const char *symname = NULL;
       enum elf_cris_reloc_type r_type;
-      bfd_boolean resolved_to_zero;
+      bool resolved_to_zero;
 
       r_type = ELF32_R_TYPE (rel->r_info);
 
@@ -1048,8 +1049,8 @@ cris_elf_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
-	  bfd_boolean unresolved_reloc;
+	  bool warned, ignored;
+	  bool unresolved_reloc;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1122,7 +1123,7 @@ cris_elf_relocate_section (bfd *output_b
 		     cris_elf_howto_table[r_type].name,
 		     symname);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	    }
 	}
@@ -1196,7 +1197,7 @@ cris_elf_relocate_section (bfd *output_b
 		 do; this is probably an internal error.  But it is true
 		 that we didn't like that particular input.  */
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  /* Fall through.  */
 
@@ -1326,7 +1327,7 @@ cris_elf_relocate_section (bfd *output_b
 		     symname[0] != '\0' ? symname : _("[whose name is lost]"));
 
 		bfd_set_error (bfd_error_bad_value);
-		return FALSE;
+		return false;
 	      }
 	  }
 	  break;
@@ -1351,7 +1352,7 @@ cris_elf_relocate_section (bfd *output_b
 		 cris_elf_howto_table[r_type].name,
 		 symname);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  /* This can happen if we get a link error with the input ELF
@@ -1366,7 +1367,7 @@ cris_elf_relocate_section (bfd *output_b
 		 input_section,
 		 cris_elf_howto_table[r_type].name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  /* This relocation is like a PC-relative one, except the
@@ -1450,7 +1451,7 @@ cris_elf_relocate_section (bfd *output_b
 	    {
 	      Elf_Internal_Rela outrel;
 	      bfd_byte *loc;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
@@ -1459,25 +1460,25 @@ cris_elf_relocate_section (bfd *output_b
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_get_dynamic_reloc_section
-		    (dynobj, input_section, /*rela?*/ TRUE);
+		    (dynobj, input_section, /*rela?*/ true);
 		  /* The section should have been created in cris_elf_check_relocs,
 		     but that function will not be called for objects which fail in
 		     cris_elf_merge_private_bfd_data.  */
 		  if (sreloc == NULL)
 		    {
 		      bfd_set_error (bfd_error_bad_value);
-		      return FALSE;
+		      return false;
 		    }
 		}
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2
 		       /* For now, undefined weak symbols with non-default
 			  visibility (yielding 0), like exception info for
@@ -1488,7 +1489,7 @@ cris_elf_relocate_section (bfd *output_b
 		       || (h != NULL
 			   && h->root.type == bfd_link_hash_undefweak
 			   && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT))
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -1510,7 +1511,7 @@ cris_elf_relocate_section (bfd *output_b
 
 		  if (r_type == R_CRIS_32)
 		    {
-		      relocate = TRUE;
+		      relocate = true;
 		      outrel.r_info = ELF32_R_INFO (0, R_CRIS_RELATIVE);
 		    }
 		  else
@@ -1522,7 +1523,7 @@ cris_elf_relocate_section (bfd *output_b
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -1590,7 +1591,7 @@ cris_elf_relocate_section (bfd *output_b
 		 symname != NULL && symname[0] != '\0'
 		 ? symname : _("[whose name is lost]"));
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  BFD_ASSERT ((input_section->flags & SEC_ALLOC) == 0
@@ -1651,7 +1652,7 @@ cris_elf_relocate_section (bfd *output_b
 
 	      /* We've already informed in cris_elf_check_relocs that
 		 this is an error.  */
-	      return FALSE;
+	      return false;
 	    }
 	  /* Fall through.  */
 
@@ -1674,7 +1675,7 @@ cris_elf_relocate_section (bfd *output_b
 		 symname[0] != '\0' ? symname : _("[whose name is lost]"));
 
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (!bfd_link_pic (info)
@@ -1803,7 +1804,7 @@ cris_elf_relocate_section (bfd *output_b
 
 	      /* We've already informed in cris_elf_check_relocs that
 		 this is an error.  */
-	      return FALSE;
+	      return false;
 	    }
 	  /* Fall through.  */
 
@@ -1826,7 +1827,7 @@ cris_elf_relocate_section (bfd *output_b
 		 (int64_t) rel->r_addend,
 		 symname[0] != '\0' ? symname : _("[whose name is lost]"));
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (!bfd_link_pic (info)
@@ -1940,7 +1941,7 @@ cris_elf_relocate_section (bfd *output_b
 
 	      /* We've already informed in cris_elf_check_relocs that
 		 this is an error.  */
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (h != NULL
@@ -1961,7 +1962,7 @@ cris_elf_relocate_section (bfd *output_b
 		 cris_elf_howto_table[r_type].name,
 		 symname);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  /* NULL if we had an error.  */
@@ -1975,7 +1976,7 @@ cris_elf_relocate_section (bfd *output_b
 
 	default:
 	  BFD_FAIL ();
-	  return FALSE;
+	  return false;
 	}
 
       r = cris_final_link_relocate (howto, input_bfd, input_section,
@@ -2026,7 +2027,7 @@ cris_elf_relocate_section (bfd *output_b
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, symname, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, symname, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -2052,13 +2053,13 @@ cris_elf_relocate_section (bfd *output_b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf_cris_finish_dynamic_symbol (bfd *output_bfd,
 				struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
@@ -2082,7 +2083,7 @@ elf_cris_finish_dynamic_symbol (bfd *out
 
   htab = elf_cris_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Adjust the various PLT entry offsets.  */
   if (bfd_get_mach (output_bfd) == bfd_mach_cris_v32)
@@ -2107,7 +2108,7 @@ elf_cris_finish_dynamic_symbol (bfd *out
 	= elf_cris_hash_entry (h)->gotplt_offset;
       Elf_Internal_Rela rela;
       bfd_byte *loc;
-      bfd_boolean has_gotplt = gotplt_offset != 0;
+      bool has_gotplt = gotplt_offset != 0;
 
       /* Get the index in the .rela.plt relocations for the .got.plt
 	 entry that corresponds to this symbol.
@@ -2302,14 +2303,14 @@ elf_cris_finish_dynamic_symbol (bfd *out
       || h == elf_hash_table (info)->hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  Do *not* emit relocs here, as their
    offsets were changed, as part of -z combreloc handling, from those we
    computed.  */
 
-static bfd_boolean
+static bool
 elf_cris_finish_dynamic_sections (bfd *output_bfd,
 				  struct bfd_link_info *info)
 {
@@ -2431,7 +2432,7 @@ elf_cris_finish_dynamic_sections (bfd *o
 
   elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -2529,7 +2530,7 @@ cris_elf_plt_sym_val (bfd_vma i ATTRIBUT
    or elf_cris_size_dynamic_sections if no dynamic sections will be
    created (we're only linking static objects).  */
 
-static bfd_boolean
+static bool
 elf_cris_adjust_gotplt_to_got (struct elf_cris_link_hash_entry *h, void * p)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) p;
@@ -2542,7 +2543,7 @@ elf_cris_adjust_gotplt_to_got (struct el
 
   /* If nobody wanted a GOTPLT with this symbol, we're done.  */
   if (h->gotplt_refcount <= 0)
-    return TRUE;
+    return true;
 
   if (h->reg_got_refcount > 0)
     {
@@ -2580,7 +2581,7 @@ elf_cris_adjust_gotplt_to_got (struct el
       srelgot->size += sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Try to fold PLT entries with GOT entries.  There are two cases when we
@@ -2607,7 +2608,7 @@ elf_cris_adjust_gotplt_to_got (struct el
    version scripts.  The differing cases are handled by
    elf_cris_hide_symbol.  */
 
-static bfd_boolean
+static bool
 elf_cris_try_fold_plt_to_got (struct elf_cris_link_hash_entry *h, void * p)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) p;
@@ -2616,7 +2617,7 @@ elf_cris_try_fold_plt_to_got (struct elf
      other reference so there's nothing to do.  Likewise if there are no
      PLT references; GOTPLT references included.  */
   if (h->root.got.refcount <= 0 || h->root.plt.refcount <= 0)
-    return TRUE;
+    return true;
 
   /* GOTPLT relocs are supposed to be included into the PLT refcount.  */
   BFD_ASSERT (h->gotplt_refcount <= h->root.plt.refcount);
@@ -2626,13 +2627,13 @@ elf_cris_try_fold_plt_to_got (struct elf
       /* The only PLT references are GOTPLT references, and there are GOT
 	 references.  Convert PLT to GOT references.  */
       if (! elf_cris_adjust_gotplt_to_got (h, info))
-	return FALSE;
+	return false;
 
       /* Clear the PLT references, so no PLT will be created.  */
       h->root.plt.offset = (bfd_vma) -1;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Our own version of hide_symbol, so that we can adjust a GOTPLT reloc
@@ -2642,7 +2643,7 @@ elf_cris_try_fold_plt_to_got (struct elf
 static void
 elf_cris_hide_symbol (struct bfd_link_info *info,
 		      struct elf_link_hash_entry *h,
-		      bfd_boolean force_local)
+		      bool force_local)
 {
   elf_cris_adjust_gotplt_to_got ((struct elf_cris_link_hash_entry *) h, info);
 
@@ -2655,7 +2656,7 @@ elf_cris_hide_symbol (struct bfd_link_in
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info,
 				struct elf_link_hash_entry *h)
 {
@@ -2667,7 +2668,7 @@ elf_cris_adjust_dynamic_symbol (struct b
 
   htab = elf_cris_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
 
@@ -2720,21 +2721,21 @@ elf_cris_adjust_dynamic_symbol (struct b
       if (bfd_link_pic (info)
 	  && !elf_cris_try_fold_plt_to_got ((struct elf_cris_link_hash_entry*)
 					    h, info))
-	return FALSE;
+	return false;
 
       /* GC or folding may have rendered this entry unused.  */
       if (h->plt.refcount <= 0)
 	{
 	  h->needs_plt = 0;
 	  h->plt.offset = (bfd_vma) -1;
-	  return TRUE;
+	  return true;
 	}
 
       /* Make sure this symbol is output as a dynamic symbol.  */
       if (h->dynindx == -1)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->root.splt;
@@ -2781,7 +2782,7 @@ elf_cris_adjust_dynamic_symbol (struct b
 	  /* Make room for this entry.  */
 	  s->size += plt_entry_size;
 
-	  return TRUE;
+	  return true;
 	}
 
       /* No GOT reference for this symbol; prepare for an ordinary PLT.  */
@@ -2806,7 +2807,7 @@ elf_cris_adjust_dynamic_symbol (struct b
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
-      return TRUE;
+      return true;
     }
 
   /* Reinitialize the plt offset now that it is not used as a reference
@@ -2822,7 +2823,7 @@ elf_cris_adjust_dynamic_symbol (struct b
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2833,12 +2834,12 @@ elf_cris_adjust_dynamic_symbol (struct b
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -2942,7 +2943,7 @@ elf_cris_copy_indirect_symbol (struct bf
 
 /* Look through the relocs for a section during the first phase.  */
 
-static bfd_boolean
+static bool
 cris_elf_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
@@ -2960,11 +2961,11 @@ cris_elf_check_relocs (bfd *abfd,
   asection *sreloc;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = elf_cris_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = elf_hash_table (info)->dynobj;
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -3050,7 +3051,7 @@ cris_elf_check_relocs (bfd *abfd,
 		    (_("%pB, section %pA: v10/v32 compatible object"
 		       " must not contain a PIC relocation"),
 		     abfd, sec);
-		  return FALSE;
+		  return false;
 		}
 	    }
 
@@ -3062,7 +3063,7 @@ cris_elf_check_relocs (bfd *abfd,
 		 can assume it's always present whenever there's a dynobj.
 		 It's ok to call this function more than once.  */
 	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return FALSE;
+		return false;
 
 	      sgot = elf_hash_table (info)->sgot;
 	      srelgot = elf_hash_table (info)->srelgot;
@@ -3079,7 +3080,7 @@ cris_elf_check_relocs (bfd *abfd,
 	      amt *= sizeof (bfd_signed_vma);
 	      local_got_refcounts = ((bfd_signed_vma *) bfd_zalloc (abfd, amt));
 	      if (local_got_refcounts == NULL)
-		return FALSE;
+		return false;
 
 	      local_got_refcounts++;
 	      elf_local_got_refcounts (abfd) = local_got_refcounts;
@@ -3185,7 +3186,7 @@ cris_elf_check_relocs (bfd *abfd,
 		  if (h->dynindx == -1)
 		    {
 		      if (!bfd_elf_link_record_dynamic_symbol (info, h))
-			return FALSE;
+			return false;
 		    }
 		}
 
@@ -3358,7 +3359,7 @@ cris_elf_check_relocs (bfd *abfd,
 
 	  /* No need to do anything if we're not creating a shared object.  */
 	  if (! bfd_link_pic (info)
-	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+	      || (h != NULL && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)))
 	    break;
 
 	  /* We may need to create a reloc section in the dynobj and made room
@@ -3366,10 +3367,10 @@ cris_elf_check_relocs (bfd *abfd,
 	  if (sreloc == NULL)
 	    {
 	      sreloc = _bfd_elf_make_dynamic_reloc_section
-		(sec, dynobj, 2, abfd, /*rela?*/ TRUE);
+		(sec, dynobj, 2, abfd, /*rela?*/ true);
 
 	      if (sreloc == NULL)
-		return FALSE;
+		return false;
 	    }
 
 	  if (sec->flags & SEC_READONLY)
@@ -3435,10 +3436,10 @@ cris_elf_check_relocs (bfd *abfd,
 	  if (sreloc == NULL)
 	    {
 	      sreloc = _bfd_elf_make_dynamic_reloc_section
-		(sec, dynobj, 2, abfd, /*rela?*/ TRUE);
+		(sec, dynobj, 2, abfd, /*rela?*/ true);
 
 	      if (sreloc == NULL)
-		return FALSE;
+		return false;
 	    }
 
 	  sreloc->size += sizeof (Elf32_External_Rela);
@@ -3463,7 +3464,7 @@ cris_elf_check_relocs (bfd *abfd,
 		p = ((struct elf_cris_pcrel_relocs_copied *)
 		     bfd_alloc (dynobj, (bfd_size_type) sizeof *p));
 		if (p == NULL)
-		  return FALSE;
+		  return false;
 		p->next = eh->pcrel_relocs_copied;
 		eh->pcrel_relocs_copied = p;
 		p->section = sec;
@@ -3479,14 +3480,14 @@ cris_elf_check_relocs (bfd *abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_CRIS_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_CRIS_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_CRIS_16_TPREL:
@@ -3497,28 +3498,27 @@ cris_elf_check_relocs (bfd *abfd,
 	default:
 	  /* Other relocs do not appear here.  */
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info)
 {
   struct elf_cris_link_hash_table * htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean plt;
-  bfd_boolean relocs;
+  bool relocs;
 
   htab = elf_cris_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -3569,8 +3569,7 @@ elf_cris_size_dynamic_sections (bfd *out
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  plt = FALSE;
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -3584,8 +3583,7 @@ elf_cris_size_dynamic_sections (bfd *out
 
       if (strcmp (name, ".plt") == 0)
 	{
-	  /* Remember whether there is a PLT.  */
-	  plt = s->size != 0;
+	  ;
 	}
       else if (strcmp (name, ".got.plt") == 0)
 	{
@@ -3595,7 +3593,7 @@ elf_cris_size_dynamic_sections (bfd *out
 	  s->size += htab->dtpmod_refcount != 0
 	    ? 8 : 0;
 	}
-      else if (CONST_STRNEQ (name, ".rela"))
+      else if (startswith (name, ".rela"))
 	{
 	  if (strcmp (name, ".rela.got") == 0
 	      && htab->dtpmod_refcount != 0
@@ -3607,14 +3605,14 @@ elf_cris_size_dynamic_sections (bfd *out
 	      /* Remember whether there are any reloc sections other
 		 than .rela.plt.  */
 	      if (strcmp (name, ".rela.plt") != 0)
-		  relocs = TRUE;
+		  relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
 	      s->reloc_count = 0;
 	    }
 	}
-      else if (! CONST_STRNEQ (name, ".got")
+      else if (! startswith (name, ".got")
 	       && strcmp (name, ".dynbss") != 0
 	       && s != htab->root.sdynrelro)
 	{
@@ -3647,52 +3645,10 @@ elf_cris_size_dynamic_sections (bfd *out
 	 this will make entries have the type R_CRIS_NONE.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf_cris_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (!bfd_link_pic (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (plt)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-	}
-
-      if ((info->flags & DF_TEXTREL) != 0)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	  info->flags |= DF_TEXTREL;
-	}
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* This function is called via elf_cris_link_hash_traverse if we are
@@ -3704,7 +3660,7 @@ elf_cris_size_dynamic_sections (bfd *out
    check_relocs routine, but we won't fill them in in the
    relocate_section routine.  */
 
-static bfd_boolean
+static bool
 elf_cris_discard_excess_dso_dynamics (struct elf_cris_link_hash_entry *h,
 				      void * inf)
 {
@@ -3724,10 +3680,10 @@ elf_cris_discard_excess_dso_dynamics (st
 	    = _bfd_elf_get_dynamic_reloc_section (elf_hash_table (info)
 						  ->dynobj,
 						  s->section,
-						  /*rela?*/ TRUE);
+						  /*rela?*/ true);
 	  sreloc->size -= s->count * sizeof (Elf32_External_Rela);
 	}
-      return TRUE;
+      return true;
     }
 
   /* If we have accounted for PC-relative relocs for read-only
@@ -3753,14 +3709,14 @@ elf_cris_discard_excess_dso_dynamics (st
 	info->flags |= DF_TEXTREL;
       }
 
-  return TRUE;
+  return true;
 }
 
 /* This function is called via elf_cris_link_hash_traverse if we are *not*
    creating a shared object.  We discard space for relocs for symbols put
    in the .got, but which we found we do not have to resolve at run-time.  */
 
-static bfd_boolean
+static bool
 elf_cris_discard_excess_program_dynamics (struct elf_cris_link_hash_entry *h,
 					  void * inf)
 {
@@ -3808,17 +3764,17 @@ elf_cris_discard_excess_program_dynamics
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Reject a file depending on presence and expectation of prefixed
    underscores on symbols.  */
 
-static bfd_boolean
+static bool
 cris_elf_object_p (bfd *abfd)
 {
   if (! cris_elf_set_mach_from_flags (abfd, elf_elfheader (abfd)->e_flags))
-    return FALSE;
+    return false;
 
   if ((elf_elfheader (abfd)->e_flags & EF_CRIS_UNDERSCORE))
     return (bfd_get_symbol_leading_char (abfd) == '_');
@@ -3829,7 +3785,7 @@ cris_elf_object_p (bfd *abfd)
 /* Mark presence or absence of leading underscore.  Set machine type
    flags from mach type.  */
 
-static bfd_boolean
+static bool
 cris_elf_final_write_processing (bfd *abfd)
 {
   unsigned long e_flags = elf_elfheader (abfd)->e_flags;
@@ -3863,7 +3819,7 @@ cris_elf_final_write_processing (bfd *ab
 
 /* Set the mach type from e_flags value.  */
 
-static bfd_boolean
+static bool
 cris_elf_set_mach_from_flags (bfd *abfd,
 			      unsigned long flags)
 {
@@ -3886,15 +3842,15 @@ cris_elf_set_mach_from_flags (bfd *abfd,
 	 with this code; we'd have to require that all future handling
 	 would be optional.  */
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Display the flags field.  */
 
-static bfd_boolean
+static bool
 cris_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -3915,30 +3871,30 @@ cris_elf_print_private_bfd_data (bfd *ab
     fprintf (file, _(" [v32]"));
 
   fputc ('\n', file);
-  return TRUE;
+  return true;
 }
 
 /* Don't mix files with and without a leading underscore.  */
 
-static bfd_boolean
+static bool
 cris_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   int imach, omach;
 
   if (! _bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   imach = bfd_get_mach (ibfd);
 
   if (! elf_flags_init (obfd))
     {
       /* This happens when ld starts out with a 'blank' output file.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
 
       /* We ignore the linker-set mach, and instead set it according to
 	 the first input file.  This would also happen if we could
@@ -3948,7 +3904,7 @@ cris_elf_merge_private_bfd_data (bfd *ib
 	 the output type, which might be a sane thing to do for a
 	 v10+v32 compatibility object.  */
       if (! bfd_set_arch_mach (obfd, bfd_arch_cris, imach))
-	return FALSE;
+	return false;
     }
 
   if (bfd_get_symbol_leading_char (ibfd)
@@ -3960,7 +3916,7 @@ cris_elf_merge_private_bfd_data (bfd *ib
 	 : _("%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"),
 	 ibfd);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   omach = bfd_get_mach (obfd);
@@ -3982,7 +3938,7 @@ cris_elf_merge_private_bfd_data (bfd *ib
 		 " with previous objects"),
 	     ibfd);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       /* We don't have to check the case where the input is compatible
@@ -3990,24 +3946,24 @@ cris_elf_merge_private_bfd_data (bfd *ib
 	 to the other (compatible) mach.  */
       if (omach == bfd_mach_cris_v10_v32
 	  && ! bfd_set_arch_mach (obfd, bfd_arch_cris, imach))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Do side-effects of e_flags copying to obfd.  */
 
-static bfd_boolean
+static bool
 cris_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   /* Call the base function.  */
   if (!_bfd_elf_copy_private_bfd_data (ibfd, obfd))
-    return FALSE;
+    return false;
 
   /* Do what we really came here for.  */
   return bfd_set_arch_mach (obfd, bfd_arch_cris, bfd_get_mach (ibfd));
@@ -4156,6 +4112,8 @@ elf_cris_got_elt_size (bfd *abfd ATTRIBU
 #define elf_backend_dtrel_excludes_plt	1
 #define elf_backend_want_dynrelro	1
 
+#define elf_backend_default_execstack	0
+
 /* Later, we my want to optimize RELA entries into REL entries for dynamic
    linking and libraries (if it's a win of any significance).  Until then,
    take the easy route.  */
@@ -4163,7 +4121,7 @@ elf_cris_got_elt_size (bfd *abfd ATTRIBU
 #define elf_backend_may_use_rela_p 1
 #define elf_backend_rela_normal		1
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #include "elf32-target.h"
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-crx.c ./bfd/elf32-crx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-crx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-crx.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for National Semiconductor's CRX ELF
-   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Copyright (C) 2004-2024 Free Software Foundation, Inc.
    Written by Tomer Levi, NSC, Israel.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -28,22 +28,22 @@
 
 static reloc_howto_type *elf_crx_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean elf_crx_info_to_howto
+static bool elf_crx_info_to_howto
   (bfd *, arelent *, Elf_Internal_Rela *);
-static bfd_boolean elf32_crx_relax_delete_bytes
+static bool elf32_crx_relax_delete_bytes
   (struct bfd_link_info *, bfd *, asection *, bfd_vma, int);
 static bfd_reloc_status_type crx_elf_final_link_relocate
   (reloc_howto_type *, bfd *, bfd *, asection *,
    bfd_byte *, bfd_vma, bfd_vma, bfd_vma,
    struct bfd_link_info *, asection *, int);
-static bfd_boolean elf32_crx_relocate_section
+static int elf32_crx_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
-static bfd_boolean elf32_crx_relax_section
-  (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
+static bool elf32_crx_relax_section
+  (bfd *, asection *, struct bfd_link_info *, bool *);
 static bfd_byte * elf32_crx_get_relocated_section_contents
   (bfd *, struct bfd_link_info *, struct bfd_link_order *,
-   bfd_byte *, bfd_boolean, asymbol **);
+   bfd_byte *, bool, asymbol **);
 
 /* crx_reloc_map array maps BFD relocation enum into a CRGAS relocation type.  */
 
@@ -82,306 +82,306 @@ static reloc_howto_type crx_elf_howto_ta
 {
   HOWTO (R_CRX_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REL4,		/* type */
 	 1,			/* rightshift */
-	 0,			/* size */
+	 1,			/* size */
 	 4,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REL4",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xf,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REL8,		/* type */
 	 1,			/* rightshift */
-	 0,			/* size */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REL8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REL8_CMP,	/* type */
 	 1,			/* rightshift */
-	 0,			/* size */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REL8_CMP",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REL16,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REL16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REL24,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REL24",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REL32,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REL32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REGREL12,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size */
+	 2,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REGREL12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REGREL22,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size */
+	 4,			/* size */
 	 22,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REGREL22",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x3fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REGREL28,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size */
+	 4,			/* size */
 	 28,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REGREL28",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xfffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_REGREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_REGREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_ABS16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_ABS16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_ABS32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_ABS32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_NUM8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_NUM8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_NUM16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_NUM16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_NUM32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_NUM32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_IMM16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_IMM16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_CRX_IMM32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_IMM32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit switch table entry.  This is generated for an expression
      such as ``.byte L1 - L2''.  The offset holds the difference
      between the reloc address and L2.  */
   HOWTO (R_CRX_SWITCH8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_SWITCH8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit switch table entry.  This is generated for an expression
      such as ``.word L1 - L2''.  The offset holds the difference
      between the reloc address and L2.  */
   HOWTO (R_CRX_SWITCH16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_SWITCH16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 32 bit switch table entry.  This is generated for an expression
      such as ``.long L1 - L2''.  The offset holds the difference
      between the reloc address and L2.  */
   HOWTO (R_CRX_SWITCH32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_CRX_SWITCH32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE)			/* pcrel_offset */
+	 true)			/* pcrel_offset */
 };
 
 /* Retrieve a howto ptr using a BFD reloc_code.  */
@@ -418,7 +418,7 @@ elf_crx_reloc_name_lookup (bfd *abfd ATT
 
 /* Retrieve a howto ptr using an internal relocation entry.  */
 
-static bfd_boolean
+static bool
 elf_crx_info_to_howto (bfd *abfd, arelent *cache_ptr,
 		       Elf_Internal_Rela *dst)
 {
@@ -429,10 +429,10 @@ elf_crx_info_to_howto (bfd *abfd, arelen
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &crx_elf_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 /* Perform a relocation as part of a final link.  */
@@ -506,25 +506,18 @@ crx_elf_final_link_relocate (reloc_howto
      as signed or unsigned.  */
   check = Rvalue >> howto->rightshift;
 
-  /* Assumes two's complement.  This expression avoids
-     overflow if howto->bitsize is the number of bits in
-     bfd_vma.  */
-  reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
-
-  if (((bfd_vma) check & ~reloc_bits) != 0
-      && (((bfd_vma) check & ~reloc_bits)
-	  != (-(bfd_vma) 1 & ~reloc_bits)))
+  reloc_bits = ((bfd_vma) 1 << (howto->bitsize - 1) << 1) - 1;
+
+  if ((check & ~reloc_bits) != 0
+      && (check & ~reloc_bits) != ((bfd_vma) -1 & ~reloc_bits))
     {
       /* The above right shift is incorrect for a signed
 	 value.  See if turning on the upper bits fixes the
 	 overflow.  */
       if (howto->rightshift && (bfd_signed_vma) Rvalue < 0)
 	{
-	  check |= ((bfd_vma) - 1
-		    & ~((bfd_vma) - 1
-			>> howto->rightshift));
-	  if (((bfd_vma) check & ~reloc_bits)
-	      != (-(bfd_vma) 1 & ~reloc_bits))
+	  check |= (bfd_vma) -1 & ~((bfd_vma) -1 >> howto->rightshift);
+	  if ((check & ~reloc_bits) != ((bfd_vma) -1 & ~reloc_bits))
 	    return bfd_reloc_overflow;
 	}
       else
@@ -532,14 +525,14 @@ crx_elf_final_link_relocate (reloc_howto
     }
 
   /* Drop unwanted bits from the value we are relocating to.  */
-  Rvalue >>= (bfd_vma) howto->rightshift;
+  Rvalue >>= howto->rightshift;
 
   /* Apply dst_mask to select only relocatable part of the insn.  */
   Rvalue &= howto->dst_mask;
 
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
-     case 0:
+     case 1:
        if (r_type == R_CRX_REL4)
 	 {
 	   Rvalue <<= 4;
@@ -549,14 +542,14 @@ crx_elf_final_link_relocate (reloc_howto
        bfd_put_8 (input_bfd, (unsigned char) Rvalue, hit_data);
        break;
 
-     case 1:
+     case 2:
        if (r_type == R_CRX_REGREL12)
 	 Rvalue |= (bfd_get_16 (input_bfd, hit_data) & 0xf000);
 
        bfd_put_16 (input_bfd, Rvalue, hit_data);
        break;
 
-     case 2:
+     case 4:
        if (r_type == R_CRX_REL24
 	   || r_type == R_CRX_REGREL22
 	   || r_type == R_CRX_REGREL28)
@@ -591,7 +584,7 @@ crx_elf_final_link_relocate (reloc_howto
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 elf32_crx_relax_delete_bytes (struct bfd_link_info *link_info, bfd *abfd,
 			      asection *sec, bfd_vma addr, int count)
 {
@@ -717,7 +710,7 @@ elf32_crx_relax_delete_bytes (struct bfd
 	sym_hash->root.u.def.value -= count;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This is a version of bfd_generic_get_relocated_section_contents
@@ -728,7 +721,7 @@ elf32_crx_get_relocated_section_contents
 					  struct bfd_link_info *link_info,
 					  struct bfd_link_order *link_order,
 					  bfd_byte *data,
-					  bfd_boolean relocatable,
+					  bool relocatable,
 					  asymbol **symbols)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -749,6 +742,13 @@ elf32_crx_get_relocated_section_contents
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
 
+  bfd_byte *orig_data = data;
+  if (data == NULL)
+    {
+      data = bfd_malloc (input_section->size);
+      if (data == NULL)
+	return NULL;
+    }
   memcpy (data, elf_section_data (input_section)->this_hdr.contents,
 	  (size_t) input_section->size);
 
@@ -762,7 +762,7 @@ elf32_crx_get_relocated_section_contents
 
       internal_relocs = (_bfd_elf_link_read_relocs
 			 (input_bfd, input_section, NULL,
-			  (Elf_Internal_Rela *) NULL, FALSE));
+			  (Elf_Internal_Rela *) NULL, false));
       if (internal_relocs == NULL)
 	goto error_return;
 
@@ -805,10 +805,8 @@ elf32_crx_get_relocated_section_contents
 				     isymbuf, sections))
 	goto error_return;
 
-      if (sections != NULL)
-	free (sections);
-      if (isymbuf != NULL
-	  && symtab_hdr->contents != (unsigned char *) isymbuf)
+      free (sections);
+      if (symtab_hdr->contents != (unsigned char *) isymbuf)
 	free (isymbuf);
       if (elf_section_data (input_section)->relocs != internal_relocs)
 	free (internal_relocs);
@@ -817,20 +815,19 @@ elf32_crx_get_relocated_section_contents
   return data;
 
  error_return:
-  if (sections != NULL)
-    free (sections);
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  free (sections);
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (input_section)->relocs != internal_relocs)
+  if (elf_section_data (input_section)->relocs != internal_relocs)
     free (internal_relocs);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
 /* Relocate a CRX ELF section.  */
 
-static bfd_boolean
+static int
 elf32_crx_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 			    bfd *input_bfd, asection *input_section,
 			    bfd_byte *contents, Elf_Internal_Rela *relocs,
@@ -872,7 +869,7 @@ elf32_crx_relocate_section (bfd *output_
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -918,7 +915,7 @@ elf32_crx_relocate_section (bfd *output_
 
 	     case bfd_reloc_undefined:
 	       (*info->callbacks->undefined_symbol)
-		 (info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		 (info, name, input_bfd, input_section, rel->r_offset, true);
 	       break;
 
 	     case bfd_reloc_outofrange:
@@ -945,7 +942,7 @@ elf32_crx_relocate_section (bfd *output_
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function handles relaxing for the CRX.
@@ -959,9 +956,9 @@ elf32_crx_relocate_section (bfd *output_
 
    Symbol- and reloc-reading infrastructure copied from elf-m10200.c.  */
 
-static bfd_boolean
+static bool
 elf32_crx_relax_section (bfd *abfd, asection *sec,
-			 struct bfd_link_info *link_info, bfd_boolean *again)
+			 struct bfd_link_info *link_info, bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -970,16 +967,17 @@ elf32_crx_relax_section (bfd *abfd, asec
   Elf_Internal_Sym *isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -1122,7 +1120,7 @@ elf32_crx_relax_section (bfd *abfd, asec
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -1167,7 +1165,7 @@ elf32_crx_relax_section (bfd *abfd, asec
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -1219,7 +1217,7 @@ elf32_crx_relax_section (bfd *abfd, asec
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -1260,7 +1258,7 @@ elf32_crx_relax_section (bfd *abfd, asec
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
     }
@@ -1289,24 +1287,20 @@ elf32_crx_relax_section (bfd *abfd, asec
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 /* Definitions for setting CRX target vector.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-csky.c ./bfd/elf32-csky.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-csky.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-csky.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for C-SKY.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
    Contributed by C-SKY Microsystems and Mentor Graphics.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -40,7 +40,7 @@ enum merge_class
   CSKY_V2
 };
 
-typedef struct csky_arch_for_merge
+typedef const struct csky_arch_for_merge
 {
   const char *name;
   const unsigned long arch_eflag;
@@ -53,17 +53,18 @@ typedef struct csky_arch_for_merge
   unsigned int do_warning;
 } csky_arch_for_merge;
 
-static struct csky_arch_for_merge csky_archs[] =
+static csky_arch_for_merge csky_archs[] =
 {
   /* 510 and 610 merge to 610 without warning.  */
-  { "510",  CSKY_ARCH_510,  CSKY_V1,  0, 0},
-  { "610",  CSKY_ARCH_610,  CSKY_V1,  1, 0},
+  { "ck510",  CSKY_ARCH_510,  CSKY_V1,  0, 0},
+  { "ck610",  CSKY_ARCH_610,  CSKY_V1,  1, 0},
   /* 801, 802, 803, 807, 810 merge to largest one.  */
-  { "801",  CSKY_ARCH_801,  CSKY_V2,  0, 1},
-  { "802",  CSKY_ARCH_802,  CSKY_V2,  1, 1},
-  { "803",  CSKY_ARCH_803,  CSKY_V2,  2, 1},
-  { "807",  CSKY_ARCH_807,  CSKY_V2,  3, 1},
-  { "810",  CSKY_ARCH_810,  CSKY_V2,  4, 1},
+  { "ck801",  CSKY_ARCH_801,  CSKY_V2,  0, 1},
+  { "ck802",  CSKY_ARCH_802,  CSKY_V2,  1, 1},
+  { "ck803",  CSKY_ARCH_803,  CSKY_V2,  2, 1},
+  { "ck807",  CSKY_ARCH_807,  CSKY_V2,  3, 1},
+  { "ck810",  CSKY_ARCH_810,  CSKY_V2,  4, 1},
+  { "ck860",  CSKY_ARCH_860,  CSKY_V2,  5, 1},
   { NULL, 0, 0, 0, 0}
 };
 
@@ -85,60 +86,60 @@ static reloc_howto_type csky_elf_howto_t
 	 0,                           /* rightshift */
 	 0,                           /* size */
 	 0,                           /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 NULL,                        /* special_function */
 	 "R_CKCORE_NONE",             /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0,                           /* src_mask */
 	 0,                           /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 1.  */
   HOWTO (R_CKCORE_ADDR32,             /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_ADDR32",           /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0,                           /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 2: Only for csky v1.  */
   HOWTO (R_CKCORE_PCREL_IMM8BY4,      /* type */
 	 2,                           /* rightshift */
-	 1,                           /* size */
+	 2,                           /* size */
 	 8,                           /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_bitfield,  /* complain_on_overflow */
 	 NULL,                        /* special_function */
 	 "R_CKCORE_PCREL_IMM8BY4",    /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0xff,                        /* src_mask */
 	 0xff,                        /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 3: Only for csky v1.  */
   HOWTO (R_CKCORE_PCREL_IMM11BY2,     /* type */
 	 1,                           /* rightshift */
-	 1,                           /* size */
+	 2,                           /* size */
 	 11,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_signed,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PCREL_IMM11BY2",   /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x7ff,                       /* src_mask */
 	 0x7ff,                       /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 4: DELETED.  */
   HOWTO (R_CKCORE_PCREL_IMM4BY2,0,0,0,0,0,0,0,"R_CKCORE_PCREL_IMM4BY2",0,0,0,0),
@@ -146,93 +147,93 @@ static reloc_howto_type csky_elf_howto_t
   /* 5.  */
   HOWTO (R_CKCORE_PCREL32,            /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PCREL32",          /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 6: Only for csky v1.  */
   HOWTO (R_CKCORE_PCREL_JSR_IMM11BY2, /* type */
 	 1,                           /* rightshift */
-	 1,                           /* size */
+	 2,                           /* size */
 	 11,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_signed,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PCREL_JSR_IMM11BY2", /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x7ff,                       /* src_mask */
 	 0x7ff,                       /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 7: GNU extension to record C++ vtable member usage.  */
   HOWTO (R_CKCORE_GNU_VTENTRY,        /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 0,                           /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_CKCORE_GNU_VTENTRY",      /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0x0,                         /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 8: GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_CKCORE_GNU_VTINHERIT,      /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 0,                           /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 NULL,                        /* special_function */
 	 "R_CKCORE_GNU_VTINHERIT",    /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0x0,                         /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 9.  */
   HOWTO (R_CKCORE_RELATIVE,           /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_signed,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_RELATIVE",         /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 10: None.  */
   /* FIXME:  It is a bug that copy relocations are not implemented.  */
   HOWTO (R_CKCORE_COPY,               /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_bitfield,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_COPY",             /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0xffffffff,                  /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 11: None.  */
   HOWTO (R_CKCORE_GLOB_DAT,0,0,0,0,0,0,0,"R_CKCORE_GLOB_DAT",0,0,0,0),
@@ -243,62 +244,62 @@ static reloc_howto_type csky_elf_howto_t
   /* 13.  */
   HOWTO (R_CKCORE_GOTOFF,             /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOTOFF",           /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffffl,                 /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 14.  */
   HOWTO (R_CKCORE_GOTPC,              /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOTPC",            /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 15.  */
   HOWTO (R_CKCORE_GOT32,              /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOT32",            /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 16.  */
   HOWTO (R_CKCORE_PLT32,              /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PLT32",            /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 17: None.  */
   HOWTO (R_CKCORE_ADDRGOT,0,0,0,0,0,0,0,"R_CKCORE_ADDRGOT",0,0,0,0),
@@ -309,257 +310,257 @@ static reloc_howto_type csky_elf_howto_t
   /* 19: Only for csky v2.  */
   HOWTO (R_CKCORE_PCREL_IMM26BY2,     /* type */
 	 1,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 26,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_signed,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PCREL_IMM26BY2",   /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0x3ffffff,                   /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 20: Only for csky v2.  */
   HOWTO (R_CKCORE_PCREL_IMM16BY2,     /* type */
-	 1,                           /* rightshift */
-	 2,                           /* size */
-	 16,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
-	 0,                           /* bitpos */
-	 complain_overflow_signed,    /* complain_on_overflow */
-	 NULL,                        /* special_function */
-	 "R_CKCORE_PCREL_IMM16BY2",   /* name */
-	 FALSE,                       /* partial_inplace */
-	 0x0,                         /* src_mask */
-	 0xffff,                      /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+         1,                           /* rightshift */
+         4,                           /* size */
+         16,                          /* bitsize */
+         true,                        /* pc_relative */
+         0,                           /* bitpos */
+         complain_overflow_signed,    /* complain_on_overflow */
+         bfd_elf_generic_reloc,       /* special_function */
+         "R_CKCORE_PCREL_IMM16BY2",   /* name */
+         false,                       /* partial_inplace */
+         0x0,                         /* src_mask */
+         0xffff,                      /* dst_mask */
+         true),                       /* pcrel_offset */
 
   /* 21: Only for csky v2.  */
   HOWTO (R_CKCORE_PCREL_IMM16BY4,     /* type */
-	 2,                           /* rightshift */
-	 2,                           /* size */
-	 16,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
-	 0,                           /* bitpos */
-	 complain_overflow_bitfield,  /* complain_on_overflow */
-	 NULL,                        /* special_function */
-	 "R_CKCORE_PCREL_IMM16BY4",   /* name */
-	 FALSE,                       /* partial_inplace */
-	 0xffff0000,                  /* src_mask */
-	 0xffff,                      /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+         2,                           /* rightshift */
+         4,                           /* size */
+         16,                          /* bitsize */
+         true,                        /* pc_relative */
+         0,                           /* bitpos */
+         complain_overflow_bitfield,  /* complain_on_overflow */
+         bfd_elf_generic_reloc,       /* special_function */
+         "R_CKCORE_PCREL_IMM16BY4",   /* name */
+         false,                       /* partial_inplace */
+         0xffff0000,                  /* src_mask */
+         0xffff,                      /* dst_mask */
+         true),                       /* pcrel_offset */
 
   /* 22: Only for csky v2.  */
   HOWTO (R_CKCORE_PCREL_IMM10BY2,     /* type */
 	 1,                           /* rightshift */
-	 1,                           /* size */
+	 2,                           /* size */
 	 10,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_signed,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PCREL_IMM10BY2",   /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0x3ff,                       /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 23: Only for csky v2.  */
   HOWTO (R_CKCORE_PCREL_IMM10BY4,     /* type */
-	 2,                           /* rightshift */
-	 2,                           /* size */
-	 10,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
-	 0,                           /* bitpos */
-	 complain_overflow_bitfield,  /* complain_on_overflow */
-	 NULL,                        /* special_function */
-	 "R_CKCORE_PCREL_IMM10BY4",   /* name */
-	 FALSE,                       /* partial_inplace */
-	 0x0,                         /* src_mask */
-	 0x3ff,                       /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+         2,                           /* rightshift */
+         4,                           /* size */
+         10,                          /* bitsize */
+         true,                        /* pc_relative */
+         0,                           /* bitpos */
+         complain_overflow_bitfield,  /* complain_on_overflow */
+         bfd_elf_generic_reloc,       /* special_function */
+         "R_CKCORE_PCREL_IMM10BY4",   /* name */
+         false,                       /* partial_inplace */
+         0x0,                         /* src_mask */
+         0x3ff,                       /* dst_mask */
+         true),                       /* pcrel_offset */
 
   /* 24: Only for csky v2.  */
   HOWTO (R_CKCORE_ADDR_HI16,          /* type */
 	 16,                          /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_ADDR_HI16",        /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 25.  */
   HOWTO (R_CKCORE_ADDR_LO16,          /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_ADDR_LO16",        /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 26.  */
   HOWTO (R_CKCORE_GOTPC_HI16,         /* type */
 	 16,                          /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOTPC_HI16",       /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 27.  */
   HOWTO (R_CKCORE_GOTPC_LO16,         /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOTPC_LO16",       /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 28.  */
   HOWTO (R_CKCORE_GOTOFF_HI16,        /* type */
 	 16,                          /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOTOFF_HI16",      /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 29.  */
   HOWTO (R_CKCORE_GOTOFF_LO16,        /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOTOFF_LO16",      /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 30.  */
   HOWTO (R_CKCORE_GOT12,              /* type */
 	 2,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 12,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_bitfield,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOT12",            /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xfff,                       /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 31.  */
   HOWTO (R_CKCORE_GOT_HI16,           /* type */
 	 16,                          /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOT_HI16",         /* name */
-	 TRUE,                       /* partial_inplace */
+	 true,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 32.  */
   HOWTO (R_CKCORE_GOT_LO16,           /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOT_LO16",         /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 33.  */
   HOWTO (R_CKCORE_PLT12,              /* type */
 	 2,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 12,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_bitfield,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PLT12",            /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xfff,                       /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 34.  */
   HOWTO (R_CKCORE_PLT_HI16,           /* type */
 	 16,                          /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PLT_HI16",         /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 35.  */
   HOWTO (R_CKCORE_PLT_LO16,           /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PLT_LO16",         /* name */
-	 TRUE,                       /* partial_inplace */
+	 true,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 36: None.  */
   HOWTO (R_CKCORE_ADDRGOT_HI16,0,0,0,0,0,0,0,"R_CKCORE_",0,0,0,0),
@@ -576,242 +577,242 @@ static reloc_howto_type csky_elf_howto_t
   /* 40.  */
   HOWTO (R_CKCORE_PCREL_JSR_IMM26BY2, /* type */
 	 1,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 26,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_signed,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PCREL_JSR_IMM26BY2", /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0x3ffffff,                   /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 41.  */
   HOWTO (R_CKCORE_TOFFSET_LO16,       /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_unsigned,  /* complain_on_overflow */
 	 NULL,                        /* special_function */
 	 "R_CKCORE_TOFFSET_LO16",     /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 42.  */
   HOWTO (R_CKCORE_DOFFSET_LO16,       /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 16,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_unsigned,  /* complain_on_overflow */
 	 NULL,                        /* special_function */
 	 "R_CKCORE_DOFFSET_LO16",     /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 43.  */
   HOWTO (R_CKCORE_PCREL_IMM18BY2,     /* type */
-	 1,                           /* rightshift */
-	 2,                           /* size */
-	 18,                          /* bitsize */
-	 TRUE,                        /* pc_relative */
-	 0,                           /* bitpos */
-	 complain_overflow_signed,    /* complain_on_overflow */
-	 NULL,                        /* special_function */
-	 "R_CKCORE_PCREL_IMM18BY2",   /* name */
-	 FALSE,                       /* partial_inplace */
-	 0x0,                         /* src_mask */
-	 0x3ffff,                     /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+         1,                           /* rightshift */
+         4,                           /* size */
+         18,                          /* bitsize */
+         true,                        /* pc_relative */
+         0,                           /* bitpos */
+         complain_overflow_signed,    /* complain_on_overflow */
+         bfd_elf_generic_reloc,       /* special_function */
+         "R_CKCORE_PCREL_IMM18BY2",   /* name */
+         false,                       /* partial_inplace */
+         0x0,                         /* src_mask */
+         0x3ffff,                     /* dst_mask */
+         true),                       /* pcrel_offset */
 
   /* 44.  */
   HOWTO (R_CKCORE_DOFFSET_IMM18,      /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 18,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_unsigned,  /* complain_on_overflow */
 	 NULL,                        /* special_function */
 	 "R_CKCORE_DOFFSET_IMM18",    /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0x3ffff,                     /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 45.  */
   HOWTO (R_CKCORE_DOFFSET_IMM18BY2,   /* type */
 	 1,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 18,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_unsigned,  /* complain_on_overflow */
 	 NULL,                        /* special_function */
 	 "R_CKCORE_DOFFSET_IMM18BY2", /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0x3ffff,                     /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 46.  */
   HOWTO (R_CKCORE_DOFFSET_IMM18BY4,   /* type */
 	 2,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 18,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_unsigned,  /* complain_on_overflow */
 	 NULL,                        /* special_function */
 	 "R_CKCORE_DOFFSET_IMM18BY4", /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0x3ffff,                     /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 47.  */
   HOWTO (R_CKCORE_GOTOFF_IMM18,       /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 18,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_bitfield,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOTOFF_IMM18",     /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0xfffc,                      /* src_mask */
 	 0x3ffff,                     /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 48.  */
   HOWTO (R_CKCORE_GOT_IMM18BY4,       /* type */
 	 2,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 18,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_bitfield,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_GOT_IMM18BY4",     /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0xfffc,                      /* src_mask */
 	 0x3ffff,                     /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 49.  */
   HOWTO (R_CKCORE_PLT_IMM18BY4,       /* type */
 	 2,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 18,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_bitfield,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PLT_IMM18BY4",     /* name */
-	 TRUE,                        /* partial_inplace */
+	 true,                        /* partial_inplace */
 	 0xfffc,                      /* src_mask */
 	 0x3ffff,                     /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 50: for lrw16.  */
   HOWTO (R_CKCORE_PCREL_IMM7BY4,      /* type */
 	 2,                           /* rightshift */
-	 1,                           /* size */
+	 2,                           /* size */
 	 7,                           /* bitsize */
-	 TRUE,                        /* pc_relative */
+	 true,                        /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_bitfield,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PCREL_IMM7BY4",    /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0xec1f,                      /* src_mask */
 	 0x31f,                       /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 51: for static nptl.  */
   HOWTO (R_CKCORE_TLS_LE32,           /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_TLS_LE32",         /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 52: for static nptl.  */
   HOWTO (R_CKCORE_TLS_IE32,           /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_TLS_IE32",         /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 53: for pic nptl.  */
   HOWTO (R_CKCORE_TLS_GD32,           /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_TLS_GD32",         /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 54: for pic nptl.  */
   HOWTO (R_CKCORE_TLS_LDM32,          /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_TLS_LDM32",        /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 55: for pic nptl.  */
   HOWTO (R_CKCORE_TLS_LDO32,          /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_TLS_LDO32",        /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xffffffff,                  /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 56: for linker.  */
   HOWTO (R_CKCORE_TLS_DTPMOD32,0,0,0,0,0,0,0,"R_CKCORE_TLS_DTPMOD32",0,0,0,0),
@@ -824,48 +825,48 @@ static reloc_howto_type csky_elf_howto_t
 
   /* 59: for ck807f.  */
   HOWTO (R_CKCORE_PCREL_FLRW_IMM8BY4, /* type */
-	 2,                           /* rightshift */
-	 2,                           /* size */
-	 8,                           /* bitsize */
-	 TRUE,                        /* pc_relative */
-	 0,                           /* bitpos */
-	 complain_overflow_bitfield,  /* complain_on_overflow */
-	 NULL,                        /* special_function */
-	 "R_CKCORE_PCREL_FLRW_IMM8BY4", /* name */
-	 FALSE,                       /* partial_inplace */
-	 0xfe1fff0f,                  /* src_mask */
-	 0x1e000f0,                   /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+         2,                           /* rightshift */
+         4,                           /* size */
+         8,                           /* bitsize */
+         true,                        /* pc_relative */
+         0,                           /* bitpos */
+         complain_overflow_bitfield,  /* complain_on_overflow */
+         bfd_elf_generic_reloc,       /* special_function */
+         "R_CKCORE_PCREL_FLRW_IMM8BY4",/* name */
+         false,                       /* partial_inplace */
+         0xfe1fff0f,                  /* src_mask */
+         0x1e000f0,                   /* dst_mask */
+         true),                       /* pcrel_offset */
 
   /* 60: for 810 not to generate jsri.  */
   HOWTO (R_CKCORE_NOJSRI,             /* type */
 	 0,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 32,                          /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_NOJSRI",           /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0xffff,                      /* src_mask */
 	 0xffff,                      /* dst_mask */
-	 FALSE),                      /* pcrel_offset */
+	 false),                      /* pcrel_offset */
 
   /* 61: for callgraph.  */
   HOWTO (R_CKCORE_CALLGRAPH,          /* type */
 	 0,                           /* rightshift */
 	 0,                           /* size */
 	 0,                           /* bitsize */
-	 FALSE,                       /* pc_relative */
+	 false,                       /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_dont,      /* complain_on_overflow */
 	 NULL,                        /* special_function */
 	 "R_CKCORE_CALLGRAPH",        /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0x0,                         /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
   /* 62: IRELATIVE*/
   HOWTO (R_CKCORE_IRELATIVE,0,0,0,0,0,0,0,"R_CKCORE_IRELATIVE",0,0,0,0),
@@ -873,31 +874,31 @@ static reloc_howto_type csky_elf_howto_t
   /* 63: for bloop instruction */
   HOWTO (R_CKCORE_PCREL_BLOOP_IMM4BY4, /* type */
 	 1,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 4,                           /* bitsize */
 	 1,                           /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_signed,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PCREL_BLOOP_IMM4BY4", /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xf,                         /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
   /* 64: for bloop instruction */
   HOWTO (R_CKCORE_PCREL_BLOOP_IMM12BY4, /* type */
 	 1,                           /* rightshift */
-	 2,                           /* size */
+	 4,                           /* size */
 	 12,                          /* bitsize */
 	 1,                           /* pc_relative */
 	 0,                           /* bitpos */
 	 complain_overflow_signed,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,       /* special_function */
 	 "R_CKCORE_PCREL_BLOOP_IMM12BY4", /* name */
-	 FALSE,                       /* partial_inplace */
+	 false,                       /* partial_inplace */
 	 0x0,                         /* src_mask */
 	 0xfff,                       /* dst_mask */
-	 TRUE),                       /* pcrel_offset */
+	 true),                       /* pcrel_offset */
 
 
 };
@@ -975,7 +976,7 @@ elf32_csky_howto_from_type (unsigned int
     return NULL;
 }
 
-static bfd_boolean
+static bool
 csky_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 			arelent *cache_ptr,
 			Elf_Internal_Rela *dst)
@@ -990,9 +991,9 @@ csky_elf_info_to_howto (bfd *abfd ATTRIB
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* The Global Offset Table max size.  */
@@ -1036,7 +1037,7 @@ enum stub_insn_type
   DATA_TYPE
 };
 
-bfd_boolean use_branch_stub = TRUE;
+bool use_branch_stub = true;
 typedef struct
 {
   bfd_vma data;
@@ -1163,8 +1164,6 @@ struct csky_elf_link_hash_entry
   int plt_refcount;
   /* For sub jsri2bsr relocs count.  */
   int jsri2bsr_refcount;
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
 
 #define GOT_UNKNOWN     0
 #define GOT_NORMAL      1
@@ -1179,18 +1178,17 @@ struct csky_elf_link_hash_entry
 };
 
 /* Traverse an C-SKY ELF linker hash table.  */
-#define csky_elf_link_hash_traverse(table, func, info)                     \
-  (elf_link_hash_traverse                                                  \
-   (&(table)->root,                                                        \
-    (bfd_boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func), \
+#define csky_elf_link_hash_traverse(table, func, info)			\
+  (elf_link_hash_traverse						\
+   (&(table)->root,							\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the C-SKY ELF linker hash table from a link_info structure.  */
-#define csky_elf_hash_table(info) \
-  ((elf_hash_table_id  ((struct elf_link_hash_table *) ((info)->hash))	\
-    == CSKY_ELF_DATA)							\
-   ? ((struct csky_elf_link_hash_table *) ((info)->hash))		\
-   : NULL)
+#define csky_elf_hash_table(p) \
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == CSKY_ELF_DATA)		\
+   ? (struct csky_elf_link_hash_table *) (p)->hash : NULL)
 
 #define csky_elf_hash_entry(ent)  ((struct csky_elf_link_hash_entry*)(ent))
 
@@ -1210,9 +1208,6 @@ struct csky_elf_link_hash_table
 {
   struct elf_link_hash_table elf;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* Data for R_CKCORE_TLS_LDM32 relocations.  */
   union
   {
@@ -1429,7 +1424,6 @@ csky_elf_link_hash_newfunc (struct bfd_h
       struct csky_elf_link_hash_entry *eh;
 
       eh = (struct csky_elf_link_hash_entry *) ret;
-      eh->dyn_relocs = NULL;
       eh->plt_refcount = 0;
       eh->jsri2bsr_refcount = 0;
       eh->tls_type = GOT_NORMAL;
@@ -1500,7 +1494,7 @@ static struct bfd_link_hash_table *
 csky_elf_link_hash_table_create (bfd *abfd)
 {
   struct csky_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct csky_elf_link_hash_table);
+  size_t amt = sizeof (struct csky_elf_link_hash_table);
 
   ret = (struct csky_elf_link_hash_table*) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -1525,7 +1519,7 @@ csky_elf_link_hash_table_create (bfd *ab
   return &ret->elf.root;
 }
 
-static bfd_boolean
+static bool
 csky_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct csky_elf_obj_tdata),
@@ -1538,7 +1532,7 @@ csky_elf_mkobject (bfd *abfd)
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 csky_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				struct elf_link_hash_entry *h)
 {
@@ -1548,11 +1542,11 @@ csky_elf_adjust_dynamic_symbol (struct b
   asection *s;
   eh = (struct csky_elf_link_hash_entry *)h;
   if (eh == NULL)
-    return FALSE;
+    return false;
 
   htab = csky_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Clear jsri2bsr_refcount, if creating shared library files.  */
   if (bfd_link_pic (info) && eh->jsri2bsr_refcount > 0)
@@ -1586,7 +1580,7 @@ csky_elf_adjust_dynamic_symbol (struct b
 	  h->got.refcount -= eh->plt_refcount;
 	  eh->plt_refcount = 0;
 	}
-      return TRUE;
+      return true;
     }
   else
     /* It's possible that we incorrectly decided a .plt reloc was
@@ -1605,13 +1599,13 @@ csky_elf_adjust_dynamic_symbol (struct b
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* If there are no non-GOT references, we do not need a copy
      relocation.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* This is a reference to a symbol defined by a dynamic object which
      is not a function.  */
@@ -1621,7 +1615,7 @@ csky_elf_adjust_dynamic_symbol (struct b
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info) || htab->elf.is_relocatable_executable)
-    return TRUE;
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -1658,14 +1652,14 @@ csky_elf_adjust_dynamic_symbol (struct b
     }
 
   h->non_got_ref = 0;
-  return TRUE;
+  return true;
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
-csky_allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
+static bool
+csky_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
   struct csky_elf_link_hash_table *htab;
@@ -1674,7 +1668,7 @@ csky_allocate_dynrelocs (struct elf_link
 
   /* For indirect case, such as _ZdlPv to _ZdlPv@@GLIBCXX_3.4.  */
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (h->root.type == bfd_link_hash_warning)
     h = (struct elf_link_hash_entry *) h->root.u.i.link;
@@ -1683,7 +1677,7 @@ csky_allocate_dynrelocs (struct elf_link
   info = (struct bfd_link_info *) inf;
   htab = csky_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
   /*TODO: how to deal with weak symbol relocs.  */
   if ((htab->elf.dynamic_sections_created || h->type == STT_GNU_IFUNC)
       && h->plt.refcount > 0)
@@ -1693,7 +1687,7 @@ csky_allocate_dynrelocs (struct elf_link
       if (h->dynindx == -1 && !h->forced_local
 	  && h->root.type == bfd_link_hash_undefweak
 	  && ! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
       if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
 	{
 	  asection *splt = htab->elf.splt;
@@ -1747,7 +1741,7 @@ csky_allocate_dynrelocs (struct elf_link
   if (h->got.refcount > 0)
     {
       asection *sgot;
-      bfd_boolean dyn;
+      bool dyn;
       int indx;
 
       int tls_type = csky_elf_hash_entry (h)->tls_type;
@@ -1756,7 +1750,7 @@ csky_allocate_dynrelocs (struct elf_link
       if (h->dynindx == -1 && !h->forced_local
 	  && h->root.type == bfd_link_hash_undefweak
 	  && ! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
 
       sgot = htab->elf.sgot;
       h->got.offset = sgot->size;
@@ -1804,8 +1798,8 @@ csky_allocate_dynrelocs (struct elf_link
     h->got.offset = (bfd_vma) -1;
 
   eh = (struct csky_elf_link_hash_entry *) h;
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -1819,7 +1813,7 @@ csky_allocate_dynrelocs (struct elf_link
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -1832,24 +1826,24 @@ csky_allocate_dynrelocs (struct elf_link
 
       if (eh->jsri2bsr_refcount
 	  && h->root.type == bfd_link_hash_defined
-	  && eh->dyn_relocs != NULL)
-	eh->dyn_relocs->count -= eh->jsri2bsr_refcount;
+	  && h->dyn_relocs != NULL)
+	h->dyn_relocs->count -= eh->jsri2bsr_refcount;
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
 	  else if (h->dynindx == -1
 		   && !h->forced_local
 		   && !bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
     }
@@ -1872,7 +1866,7 @@ csky_allocate_dynrelocs (struct elf_link
 	      && h->root.type == bfd_link_hash_undefweak)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -1881,81 +1875,39 @@ csky_allocate_dynrelocs (struct elf_link
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
       keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *srelgot = htab->elf.srelgot;
       srelgot->size += p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
-}
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = csky_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 csky_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info)
 {
   struct csky_elf_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
   htab = csky_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
   dynobj = htab->elf.dynobj;
   if (dynobj == NULL)
-    return FALSE;
+    return false;
 
   if (htab->elf.dynamic_sections_created)
     {
@@ -1990,8 +1942,7 @@ csky_elf_size_dynamic_sections (bfd *out
 	{
 	  struct elf_dyn_relocs *p;
 
-	  for (p = *((struct elf_dyn_relocs **)
-		     &elf_section_data (s)->local_dynrel);
+	  for (p = elf_section_data (s)->local_dynrel;
 	       p != NULL;
 	       p = p->next)
 	    {
@@ -2058,22 +2009,22 @@ csky_elf_size_dynamic_sections (bfd *out
 
   /* Allocate global sym .plt and .got entries, and space for global
      sym dynamic relocs.  */
-  elf_link_hash_traverse (&htab->elf, csky_allocate_dynrelocs, (PTR) info);
+  elf_link_hash_traverse (&htab->elf, csky_allocate_dynrelocs, info);
 
   /* Check for GOT overflow.  */
   if (check_got_overflow == 1
       && htab->elf.sgot->size + htab->elf.sgotplt->size > GOT_MAX_SIZE)
     {
       _bfd_error_handler (_("GOT table size out of range")); /*  */
-      return FALSE;
+      return false;
     }
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
-      bfd_boolean strip_section = TRUE;
+      bool strip_section = true;
 
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
@@ -2091,12 +2042,12 @@ csky_elf_size_dynamic_sections (bfd *out
 	     It's too late to tell BFD to get rid of the symbols.  */
 
 	  if (htab->elf.hplt != NULL)
-	    strip_section = FALSE;
+	    strip_section = false;
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rel") )
+      else if (startswith (bfd_section_name (s), ".rel") )
 	{
 	  if (s->size != 0 )
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -2134,58 +2085,18 @@ csky_elf_size_dynamic_sections (bfd *out
 	 of garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (htab->elf.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in csky_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info) && !add_dynamic_entry (DT_DEBUG, 0))
-	return FALSE;
-
-      if (htab->elf.sgot->size != 0 || htab->elf.splt->size)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT,
-				     sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0
-	      && !add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+    htab->elf.dt_pltgot_required = htab->elf.sgot->size != 0;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 csky_elf_finish_dynamic_symbol (bfd *output_bfd,
 				struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
@@ -2195,7 +2106,7 @@ csky_elf_finish_dynamic_symbol (bfd *out
 
   htab = csky_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Sanity check to make sure no unexpected symbol reaches here.
      This matches the test in csky_elf_relocate_section handling
@@ -2356,12 +2267,12 @@ csky_elf_finish_dynamic_symbol (bfd *out
       || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 csky_elf_finish_dynamic_sections (bfd *output_bfd,
 				  struct bfd_link_info *info)
 {
@@ -2372,7 +2283,7 @@ csky_elf_finish_dynamic_sections (bfd *o
 
   htab = csky_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->elf.dynobj;
   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
@@ -2388,7 +2299,7 @@ csky_elf_finish_dynamic_sections (bfd *o
       for (; dyncon < dynconend; dyncon++)
 	{
 	  Elf_Internal_Dyn dyn;
-	  bfd_boolean size = FALSE;
+	  bool size = false;
 	  const char *name = NULL;
 
 	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
@@ -2398,15 +2309,15 @@ csky_elf_finish_dynamic_sections (bfd *o
 	      continue;
 	    case DT_RELA:
 	      name = ".rela.dyn";
-	      size = FALSE;
+	      size = false;
 	      break;
 	    case DT_RELASZ:
 	      name = ".rela.dyn";
-	      size = TRUE;
+	      size = true;
 	      break;
 	    case DT_PLTRELSZ:
 	      name = ".rela.plt";
-	      size = TRUE;
+	      size = true;
 	      break;
 	    case DT_PLTGOT:
 	      dyn.d_un.d_ptr = htab->elf.sgot->output_section->vma;
@@ -2450,7 +2361,7 @@ csky_elf_finish_dynamic_sections (bfd *o
 	}
       elf_section_data (got_sec->output_section)->this_hdr.sh_entsize = 4;
     }
-  return TRUE;
+  return true;
 }
 
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
@@ -2465,35 +2376,6 @@ csky_elf_copy_indirect_symbol (struct bf
   edir = (struct csky_elf_link_hash_entry *) dir;
   eind = (struct csky_elf_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
   if (ind->root.type == bfd_link_hash_indirect
       && dir->got.refcount <= 0)
     {
@@ -2549,11 +2431,43 @@ csky_elf_gc_mark_hook (asection *sec,
   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
 }
 
+/* Match symbol names created by tc-csky.c:make_mapping_symbol.  */
+
+static bool
+is_mapping_symbol_name (const char *name)
+{
+  return (name && name[0] == '$'
+	  && (name[1] == 't' || name[1] == 'd')
+	  && name[2] == 0);
+}
+
+/* Treat mapping symbols as special target symbols.  */
+
+static bool
+csky_elf_is_target_special_symbol (bfd *abfd ATTRIBUTE_UNUSED, asymbol *sym)
+{
+  return is_mapping_symbol_name (sym->name);
+}
+
+/* Exclude mapping symbols from being treated as function symbols by
+   objdump and nm.  */
+
+static bfd_size_type
+csky_elf_maybe_function_sym (const asymbol *sym, asection *sec,
+			     bfd_vma *code_off)
+{
+  if ((sym->flags & BSF_LOCAL) != 0
+      && is_mapping_symbol_name (sym->name))
+    return 0;
+
+  return _bfd_elf_maybe_function_sym (sym, sec, code_off);
+}
+
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 csky_elf_check_relocs (bfd * abfd,
 		       struct bfd_link_info * info,
 		       asection * sec,
@@ -2568,11 +2482,11 @@ csky_elf_check_relocs (bfd * abfd,
 
   /* if output type is relocatable, return.  */
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = csky_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -2591,10 +2505,10 @@ csky_elf_check_relocs (bfd * abfd,
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* A local symbol.  */
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 					abfd, r_symndx);
 	  if (isym == NULL)
-	    return FALSE;
+	    return false;
 	  h = NULL;
 	}
       else
@@ -2663,10 +2577,10 @@ csky_elf_check_relocs (bfd * abfd,
 		    htab->elf.dynobj = abfd;
 
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 2, abfd, TRUE);
+		    (sec, htab->elf.dynobj, 2, abfd, true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      if (h == NULL && !use_branch_stub
@@ -2687,7 +2601,7 @@ csky_elf_check_relocs (bfd * abfd,
 		      || (ELF32_R_TYPE (rel->r_info)
 			  == R_CKCORE_PCREL_JSR_IMM11BY2))
 		    eh->jsri2bsr_refcount += 1;
-		  head = &eh->dyn_relocs;
+		  head = &h->dyn_relocs;
 		}
 	      else
 		{
@@ -2698,10 +2612,10 @@ csky_elf_check_relocs (bfd * abfd,
 		  asection *s;
 		  Elf_Internal_Sym *loc_isym;
 
-		  loc_isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  loc_isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 						    abfd, r_symndx);
 		  if (loc_isym == NULL)
-		    return FALSE;
+		    return false;
 		  s = bfd_section_from_elf_index (abfd, loc_isym->st_shndx);
 		  if (s == NULL)
 		    s = sec;
@@ -2712,11 +2626,11 @@ csky_elf_check_relocs (bfd * abfd,
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->elf.dynobj, amt));
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -2816,7 +2730,7 @@ csky_elf_check_relocs (bfd * abfd,
 		    local_got_refcounts = ((bfd_signed_vma *)
 					   bfd_zalloc (abfd, size));
 		    if (local_got_refcounts == NULL)
-		      return FALSE;
+		      return false;
 		    elf_local_got_refcounts (abfd) = local_got_refcounts;
 		    csky_elf_local_got_tls_type (abfd)
 		      = (char *) (local_got_refcounts + symtab_hdr->sh_info);
@@ -2860,7 +2774,7 @@ csky_elf_check_relocs (bfd * abfd,
 	      if (htab->elf.dynobj == NULL)
 		htab->elf.dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -2868,19 +2782,19 @@ csky_elf_check_relocs (bfd * abfd,
 	     Reconstruct it for later use during GC.  */
 	case R_CKCORE_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_CKCORE_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static const struct bfd_elf_special_section csky_elf_special_sections[]=
@@ -2892,15 +2806,15 @@ static const struct bfd_elf_special_sect
 
 /* Function to keep CSKY specific flags in the ELF header.  */
 
-static bfd_boolean
+static bool
 csky_elf_set_private_flags (bfd * abfd, flagword flags)
 {
   BFD_ASSERT (! elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 static csky_arch_for_merge *
@@ -2920,10 +2834,194 @@ csky_find_arch_with_eflag (const unsigne
   return csky_arch;
 }
 
+static csky_arch_for_merge *
+csky_find_arch_with_name (const char *name)
+{
+  csky_arch_for_merge *csky_arch = NULL;
+  const char *msg;
+
+  if (name == NULL)
+    return NULL;
+
+  for (csky_arch = csky_archs; csky_arch->name != NULL; csky_arch++)
+    {
+      if (strncmp (csky_arch->name, name, strlen (csky_arch->name)) == 0)
+	break;
+    }
+  if (csky_arch == NULL)
+    {
+      msg = _("warning: unrecognised arch name '%#x'");
+      (*_bfd_error_handler) (msg, name);
+      bfd_set_error (bfd_error_wrong_format);
+    }
+  return csky_arch;
+}
+
+static bool
+elf32_csky_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
+{
+  bfd *obfd = info->output_bfd;
+  obj_attribute *in_attr;
+  obj_attribute *out_attr;
+  csky_arch_for_merge *old_arch = NULL;
+  csky_arch_for_merge *new_arch = NULL;
+  int i;
+  bool result = true;
+  const char *msg = NULL;
+
+  const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
+
+  /* Skip the linker stubs file.  This preserves previous behavior
+     of accepting unknown attributes in the first input file - but
+     is that a bug?  */
+  if (ibfd->flags & BFD_LINKER_CREATED)
+    return true;
+
+  /* Skip any input that hasn't attribute section.
+     This enables to link object files without attribute section with
+     any others.  */
+  if (bfd_get_section_by_name (ibfd, sec_name) == NULL)
+    {
+      return true;
+    }
+
+  if (!elf_known_obj_attributes_proc (obfd)[0].i)
+    {
+      /* This is the first object.  Copy the attributes.  */
+      out_attr = elf_known_obj_attributes_proc (obfd);
+
+      _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
+      /* Use the Tag_null value to indicate the attributes have been
+	 initialized.  */
+      out_attr[0].i = 1;
+    }
+
+  in_attr = elf_known_obj_attributes_proc (ibfd);
+  out_attr = elf_known_obj_attributes_proc (obfd);
+
+  for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
+    {
+      /* Merge this attribute with existing attributes.  */
+      switch (i)
+        {
+	case Tag_CSKY_CPU_NAME:
+	case Tag_CSKY_ARCH_NAME:
+	  /* Do arch merge.  */
+	  new_arch = csky_find_arch_with_name (in_attr[Tag_CSKY_ARCH_NAME].s);
+	  old_arch = csky_find_arch_with_name (out_attr[Tag_CSKY_ARCH_NAME].s);
+
+	  if (new_arch != NULL && old_arch != NULL)
+	    {
+	      if (new_arch->class != old_arch->class)
+		{
+		  msg = _("%pB: machine flag conflict with target");
+		  (*_bfd_error_handler) (msg, ibfd);
+		  bfd_set_error (bfd_error_wrong_format);
+		  return false;
+		}
+	      else if (new_arch->class_level != old_arch->class_level)
+		{
+		  csky_arch_for_merge *newest_arch =
+		    ((new_arch->class_level > old_arch->class_level) ?
+		  new_arch : old_arch);
+
+		  if (new_arch->do_warning || old_arch->do_warning)
+		    {
+		      msg = _("warning: file %pB's arch flag %s conflict "
+			      "with target %s,set target arch flag to %s");
+		      (*_bfd_error_handler) (msg, ibfd,  new_arch->name,
+					     old_arch->name,
+					     (newest_arch->name));
+		      bfd_set_error (bfd_error_wrong_format);
+                    }
+
+		  if (out_attr[Tag_CSKY_ARCH_NAME].s != NULL)
+		    bfd_release (obfd, out_attr[Tag_CSKY_ARCH_NAME].s);
+
+		  out_attr[Tag_CSKY_ARCH_NAME].s =
+		    _bfd_elf_attr_strdup (obfd, newest_arch->name);
+		}
+	    }
+
+	  break;
+
+	case Tag_CSKY_ISA_FLAGS:
+	case Tag_CSKY_ISA_EXT_FLAGS:
+	  /* Do ISA merge.  */
+	  break;
+
+	case Tag_CSKY_VDSP_VERSION:
+	  if (out_attr[i].i == 0)
+	    out_attr[i].i = in_attr[i].i;
+	  else if (out_attr[i].i != in_attr[i].i)
+	    {
+	      _bfd_error_handler
+		(_("Error: %pB and %pB has different VDSP version"), ibfd, obfd);
+	      result = false;
+	    }
+	  break;
+
+	case Tag_CSKY_FPU_VERSION:
+	  if (out_attr[i].i <= in_attr[i].i
+	      && out_attr[i].i == 0)
+	    out_attr[i].i = in_attr[i].i;
+	  break;
+
+	case Tag_CSKY_DSP_VERSION:
+	  if (out_attr[i].i == 0)
+	    out_attr[i].i = in_attr[i].i;
+	  else if (out_attr[i].i != in_attr[i].i)
+	    {
+	      _bfd_error_handler
+		(_("Error: %pB and %pB has different DSP version"), ibfd, obfd);
+	      result = false;
+	    }
+	  break;
+
+	case Tag_CSKY_FPU_ABI:
+	  if (out_attr[i].i != in_attr[i].i
+	      && (out_attr[i].i == 0
+		  || (out_attr[i].i == VAL_CSKY_FPU_ABI_SOFT
+		      && in_attr[i].i == VAL_CSKY_FPU_ABI_SOFTFP)))
+	    {
+	      out_attr[i].i = in_attr[i].i;
+	    }
+	  else if (out_attr[i].i == VAL_CSKY_FPU_ABI_HARD
+		   && (out_attr[i].i != in_attr[i].i
+		       && in_attr[i].i != 0))
+	    {
+	      _bfd_error_handler
+	       (_("Error: %pB and %pB has different FPU ABI"), ibfd, obfd);
+	       result = false;
+	    }
+	  break;
+
+	default:
+	  result =
+	    result && _bfd_elf_merge_unknown_attribute_low (ibfd, obfd, i);
+	  break;
+	}
+
+      /* If out_attr was copied from in_attr then it won't have a type yet.  */
+      if (in_attr[i].type && !out_attr[i].type)
+	out_attr[i].type = in_attr[i].type;
+    }
+
+  /* Merge Tag_compatibility attributes and any common GNU ones.  */
+  if (!_bfd_elf_merge_object_attributes (ibfd, info))
+    return false;
+
+  /* Check for any attributes not known on CSKY.  */
+  result &= _bfd_elf_merge_unknown_attribute_list (ibfd, obfd);
+
+  return result;
+}
+
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 csky_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -2931,102 +3029,107 @@ csky_elf_merge_private_bfd_data (bfd *ib
   flagword new_flags;
   csky_arch_for_merge *old_arch = NULL;
   csky_arch_for_merge *new_arch = NULL;
+  flagword newest_flag = 0;
+  const char *sec_name;
+  obj_attribute *out_attr;
 
   /* Check if we have the same endianness.  */
   if (! _bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
-  new_flags = elf_elfheader (ibfd)->e_flags;
-  old_flags = elf_elfheader (obfd)->e_flags;
+  /* Merge ".csky.attribute" section.  */
+  if (!elf32_csky_merge_attributes (ibfd, info))
+    return false;
 
   if (! elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
-      elf_elfheader (obfd)->e_flags = new_flags;
+      elf_flags_init (obfd) = true;
     }
-  else if (new_flags == old_flags)
-    /* Do nothing.  */
-    ;
-  else if (new_flags == 0 || old_flags == 0)
-    /* When one flag is 0, assign the other one's flag.  */
-      elf_elfheader (obfd)->e_flags = new_flags | old_flags;
-  else
+
+  /* Try to merge e_flag.  */
+  new_flags = elf_elfheader (ibfd)->e_flags;
+  old_flags = elf_elfheader (obfd)->e_flags;
+  out_attr = elf_known_obj_attributes_proc (obfd);
+
+  /* The flags like "e , f ,g ..." , we take collection.  */
+  newest_flag = old_flags | new_flags;
+
+  sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
+
+  if (bfd_get_section_by_name (ibfd, sec_name) == NULL
+      || ((new_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK)) !=
+	  (old_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK))))
     {
-      flagword newest_flag = 0;
+      /* Input BFDs have no ".csky.attribute" section.  */
+      new_arch = csky_find_arch_with_eflag (new_flags & CSKY_ARCH_MASK);
+      old_arch = csky_find_arch_with_name (out_attr[Tag_CSKY_ARCH_NAME].s);
 
-      if ((new_flags & CSKY_ARCH_MASK) != 0
-	  && (old_flags & CSKY_ARCH_MASK) != 0)
+      if (new_arch != NULL && old_arch != NULL)
 	{
-	  new_arch = csky_find_arch_with_eflag (new_flags & CSKY_ARCH_MASK);
-	  old_arch = csky_find_arch_with_eflag (old_flags & CSKY_ARCH_MASK);
-	  /* Collect flags like e, f, g.  */
-	  newest_flag = (old_flags & (~CSKY_ARCH_MASK))
-			 | (new_flags & (~CSKY_ARCH_MASK));
-	  if (new_arch != NULL && old_arch != NULL)
+	  if (new_arch->class != old_arch->class)
 	    {
-	      if (new_arch->class != old_arch->class)
+	      _bfd_error_handler
+		/* xgettext:c-format */
+		(_("%pB: machine flag conflict with target"), ibfd);
+	      bfd_set_error (bfd_error_wrong_format);
+	      return false;
+	    }
+	  else if (new_arch->class_level != old_arch->class_level)
+	    {
+	      csky_arch_for_merge *newest_arch =
+		(new_arch->class_level > old_arch->class_level
+		 ? new_arch : old_arch);
+
+	      if (new_arch->do_warning || old_arch->do_warning)
 		{
 		  _bfd_error_handler
 		    /* xgettext:c-format */
-		    (_("%pB: machine flag conflict with target"), ibfd);
+		    (_("warning: file %pB's arch flag %s conflicts with "
+		       "target ck%s, using %s"),
+		     ibfd, new_arch->name, old_arch->name,
+		     newest_arch->name);
 		  bfd_set_error (bfd_error_wrong_format);
-		  return FALSE;
 		}
-	      else if (new_arch->class_level != old_arch->class_level)
-		{
-		  csky_arch_for_merge *newest_arch
-		    = (new_arch->class_level > old_arch->class_level
-		       ? new_arch : old_arch);
-		  if (new_arch->do_warning || old_arch->do_warning)
-		    {
-		      _bfd_error_handler
-			/* xgettext:c-format */
-			(_("warning: file %pB's arch flag ck%s conflicts with "
-			   "target ck%s, using ck%s"),
-			 ibfd, new_arch->name, old_arch->name,
-			 newest_arch->name);
-		       bfd_set_error (bfd_error_wrong_format);
-		    }
 
-		  newest_flag |= newest_arch->arch_eflag;
-		}
-	      else
-		newest_flag |= ((new_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK))
-				| (old_flags
-				   & (CSKY_ARCH_MASK | CSKY_ABI_MASK)));
+	      if (out_attr[Tag_CSKY_ARCH_NAME].s != NULL)
+		bfd_release (obfd, out_attr[Tag_CSKY_ARCH_NAME].s);
+
+	      out_attr[Tag_CSKY_ARCH_NAME].s =
+		_bfd_elf_attr_strdup (obfd, newest_arch->name);
 	    }
-	  else
-	    newest_flag |= ((new_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK))
-			    | (old_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK)));
 	}
       else
-	newest_flag |= ((new_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK))
-			| (old_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK)));
-
-      elf_elfheader (obfd)->e_flags = newest_flag;
+	{
+	  if (new_arch && new_arch->name != NULL)
+	    out_attr[Tag_CSKY_ARCH_NAME].s =
+	  _bfd_elf_attr_strdup (obfd, new_arch->name);
+	}
     }
-  return TRUE;
+
+  elf_elfheader (obfd)->e_flags = newest_flag;
+
+  return true;
 }
 
 /* Ignore the discarded relocs in special sections in link time.  */
 
-static bfd_boolean
+static bool
 csky_elf_ignore_discarded_relocs (asection *sec)
 {
   if (strcmp (sec->name, ".csky_stack_size") == 0)
-    return TRUE;
-  return FALSE;
+    return true;
+  return false;
 }
 
 /* .csky_stack_size are not referenced directly.  This pass marks all of
    them as required.  */
 
-static bfd_boolean
+static bool
 elf32_csky_gc_mark_extra_sections (struct bfd_link_info *info,
 				   elf_gc_mark_hook_fn gc_mark_hook ATTRIBUTE_UNUSED)
 {
@@ -3043,7 +3146,7 @@ elf32_csky_gc_mark_extra_sections (struc
 	  o->gc_mark = 1;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* The linker repeatedly calls this function for each input section,
@@ -3084,7 +3187,7 @@ elf32_csky_next_input_section (struct bf
 static void
 group_sections (struct csky_elf_link_hash_table *htab,
 		bfd_size_type stub_group_size,
-		bfd_boolean stubs_always_after_branch)
+		bool stubs_always_after_branch)
 {
   asection **list = htab->input_list;
 
@@ -3178,16 +3281,16 @@ group_sections (struct csky_elf_link_has
    or it is a weak symbol and we aim to create shared object file,
    we must create a stub for this bsr.  */
 
-static bfd_boolean
+static bool
 sym_must_create_stub (struct elf_link_hash_entry *h,
 		      struct bfd_link_info *info)
 {
   if (h != NULL
       && ((h->def_dynamic && !h->def_regular)
 	  || (bfd_link_pic (info) && h->root.type == bfd_link_hash_defweak)))
-    return TRUE;
+    return true;
   else
-    return FALSE;
+    return false;
 }
 
 /* Calculate the template, template size and instruction size for a stub.
@@ -3222,7 +3325,7 @@ find_stub_size_and_template (enum elf32_
 
       default:
 	BFD_FAIL ();
-	return FALSE;
+	return false;
       }
     }
 
@@ -3237,7 +3340,7 @@ find_stub_size_and_template (enum elf32_
 /* As above, but don't actually build the stub.  Just bump offset so
    we know stub section sizes.  */
 
-static bfd_boolean
+static bool
 csky_size_one_stub (struct bfd_hash_entry *gen_entry,
 		    void * in_arg ATTRIBUTE_UNUSED)
 {
@@ -3259,7 +3362,7 @@ csky_size_one_stub (struct bfd_hash_entr
 
   size = (size + 7) & ~7;
   stub_entry->stub_sec->size += size;
-  return TRUE;
+  return true;
 }
 
 /* Add a new stub entry to the stub hash.  Not all fields of the new
@@ -3280,7 +3383,7 @@ elf32_csky_add_stub (const char *stub_na
 
   /* Enter this entry into the linker stub hash table.  */
   stub_entry = csky_stub_hash_lookup (&htab->stub_hash_table, stub_name,
-				      TRUE, FALSE);
+				      true, false);
   if (stub_entry == NULL)
     {
       _bfd_error_handler (_("%pB: cannot create stub entry %s"),
@@ -3300,7 +3403,7 @@ elf32_csky_add_stub (const char *stub_na
    PC-relative calls to a target that is unreachable with a "bsr"
    instruction.  */
 
-bfd_boolean
+bool
 elf32_csky_size_stubs (bfd *output_bfd,
 		       bfd *stub_bfd,
 		       struct bfd_link_info *info,
@@ -3309,11 +3412,11 @@ elf32_csky_size_stubs (bfd *output_bfd,
 		       void (*layout_sections_again) (void))
 {
   bfd_size_type stub_group_size;
-  bfd_boolean stubs_always_after_branch;
+  bool stubs_always_after_branch;
   struct csky_elf_link_hash_table *htab = csky_elf_hash_table (info);
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Propagate mach to stub bfd, because it may not have been
      finalized when we created stub_bfd.  */
@@ -3347,7 +3450,7 @@ elf32_csky_size_stubs (bfd *output_bfd,
       bfd *input_bfd;
       unsigned int bfd_indx;
       asection *stub_sec;
-      bfd_boolean stub_changed = FALSE;
+      bool stub_changed = false;
 
       for (input_bfd = info->input_bfds, bfd_indx = 0;
 	   input_bfd != NULL;
@@ -3413,7 +3516,7 @@ elf32_csky_size_stubs (bfd *output_bfd,
 		  if (r_type >= (unsigned int) R_CKCORE_MAX)
 		    {
 		      bfd_set_error (bfd_error_bad_value);
-error_ret_free_internal:
+		    error_ret_free_internal:
 		      if (elf_section_data (section)->relocs == NULL)
 			free (internal_relocs);
 		      goto error_ret_free_local;
@@ -3530,7 +3633,7 @@ error_ret_free_internal:
 		      stub_entry
 			= csky_stub_hash_lookup	(&htab->stub_hash_table,
 						 stub_name,
-						 FALSE, FALSE);
+						 false, false);
 		      if (stub_entry != NULL)
 			{
 			  /* The proper stub has already been created.  */
@@ -3564,7 +3667,7 @@ error_ret_free_internal:
 			}
 		      sprintf (stub_entry->output_name, STUB_ENTRY_NAME,
 			       sym_name);
-		      stub_changed = TRUE;
+		      stub_changed = true;
 		    }
 		  while (0);
 		}
@@ -3591,12 +3694,12 @@ error_ret_free_internal:
       (*htab->layout_sections_again) ();
     }
 
-  return TRUE;
-error_ret_free_local:
-  return FALSE;
+  return true;
+ error_ret_free_local:
+  return false;
 }
 
-static bfd_boolean
+static bool
 csky_build_one_stub (struct bfd_hash_entry *gen_entry,
 		     void * in_arg)
 {
@@ -3621,9 +3724,17 @@ csky_build_one_stub (struct bfd_hash_ent
   stub_entry = (struct elf32_csky_stub_hash_entry *)gen_entry;
   info = (struct bfd_link_info *) in_arg;
 
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (stub_entry->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without --enable-non-contiguous-regions.\n"),
+			    stub_entry->target_section);
+
   globals = csky_elf_hash_table (info);
   if (globals == NULL)
-    return FALSE;
+    return false;
   stub_sec = stub_entry->stub_sec;
 
   /* Make a note of the offset within the stubs for this entry.  */
@@ -3671,7 +3782,7 @@ csky_build_one_stub (struct bfd_hash_ent
 	break;
       default:
 	BFD_FAIL ();
-	return FALSE;
+	return false;
       }
   stub_sec->size += size;
 
@@ -3710,7 +3821,7 @@ csky_build_one_stub (struct bfd_hash_ent
 				template_sequence[stub_reloc_idx[i]].reloc_addend);
     }
 
-  return TRUE;
+  return true;
 #undef MAXRELOCS
 }
 
@@ -3720,7 +3831,7 @@ csky_build_one_stub (struct bfd_hash_ent
    functions here.  This function is called via arm_elf_finish in the
    linker.  */
 
-bfd_boolean
+bool
 elf32_csky_build_stubs (struct bfd_link_info *info)
 {
   asection *stub_sec;
@@ -3730,7 +3841,7 @@ elf32_csky_build_stubs (struct bfd_link_
   htab = csky_elf_hash_table (info);
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   for (stub_sec = htab->stub_bfd->sections;
        stub_sec != NULL;
@@ -3746,7 +3857,7 @@ elf32_csky_build_stubs (struct bfd_link_
       size = stub_sec->size;
       stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
       if (stub_sec->contents == NULL && size != 0)
-	return FALSE;
+	return false;
       stub_sec->size = 0;
     }
 
@@ -3754,7 +3865,7 @@ elf32_csky_build_stubs (struct bfd_link_
   table = &htab->stub_hash_table;
   bfd_hash_traverse (table, csky_build_one_stub, info);
 
-  return TRUE;
+  return true;
 }
 
 /* Set up various things so that we can make a list of input sections
@@ -3770,13 +3881,11 @@ elf32_csky_setup_section_lists (bfd *out
   unsigned int top_id, top_index;
   asection *section;
   asection **input_list, **list;
-  bfd_size_type amt;
+  size_t amt;
   struct csky_elf_link_hash_table *htab = csky_elf_hash_table (info);
 
   if (!htab)
     return 0;
-  if (! is_elf_hash_table (htab))
-    return 0;
 
   /* Count the number of input BFDs and find the top input section id.  */
   for (input_bfd = info->input_bfds, bfd_count = 0, top_id = 0;
@@ -3828,7 +3937,7 @@ elf32_csky_setup_section_lists (bfd *out
 static bfd_reloc_status_type
 csky_relocate_contents (reloc_howto_type *howto,
 			bfd *input_bfd,
-			long relocation,
+			bfd_vma relocation,
 			bfd_byte *location)
 {
   int size;
@@ -3837,15 +3946,13 @@ csky_relocate_contents (reloc_howto_type
   unsigned int rightshift = howto->rightshift;
   unsigned int bitpos = howto->bitpos;
 
-  /* If the size is negative, negate RELOCATION. This isn't very
-     general.  */
-  if (howto->size < 0)
+  if (howto->negate)
     relocation = -relocation;
 
   /* FIXME: these macros should be defined at file head or head file head.  */
 #define CSKY_INSN_ADDI_TO_SUBI        0x04000000
-#define CSKY_INSN_MOV_RTB             0xc41d4820   // mov32 rx, r29, 0
-#define CSKY_INSN_MOV_RDB             0xc41c4820   // mov32 rx, r28, 0
+#define CSKY_INSN_MOV_RTB             0xc41d4820   /* mov32 rx, r29, 0 */
+#define CSKY_INSN_MOV_RDB             0xc41c4820   /* mov32 rx, r28, 0 */
 #define CSKY_INSN_GET_ADDI_RZ(x)      (((x) & 0x03e00000) >> 21)
 #define CSKY_INSN_SET_MOV_RZ(x)       ((x) & 0x0000001f)
 #define CSKY_INSN_JSRI_TO_LRW         0xea9a0000
@@ -3871,7 +3978,7 @@ csky_relocate_contents (reloc_howto_type
 
 	  if (R_CKCORE_DOFFSET_LO16 == howto->type)
 	    {
-	      if ((signed) relocation < 0)
+	      if ((bfd_signed_vma) relocation < 0)
 		{
 		  x |= CSKY_INSN_ADDI_TO_SUBI;
 		  relocation = -relocation;
@@ -3882,7 +3989,7 @@ csky_relocate_contents (reloc_howto_type
 	    }
 	  else if (R_CKCORE_TOFFSET_LO16 == howto->type)
 	    {
-	      if ((signed) relocation < 0)
+	      if ((bfd_signed_vma) relocation < 0)
 		{
 		  x |= CSKY_INSN_ADDI_TO_SUBI;
 		  relocation = -relocation;
@@ -3903,13 +4010,13 @@ csky_relocate_contents (reloc_howto_type
   flag = bfd_reloc_ok;
   if (howto->complain_on_overflow != complain_overflow_dont)
     {
-      int addrmask;
-      int fieldmask;
-      int signmask;
-      int ss;
-      int a;
-      int b;
-      int sum;
+      bfd_vma addrmask;
+      bfd_vma fieldmask;
+      bfd_vma signmask;
+      bfd_vma ss;
+      bfd_vma a;
+      bfd_vma b;
+      bfd_vma sum;
       /* Get the values to be added together.  For signed and unsigned
 	 relocations, we assume that all values should be truncated to
 	 the size of an address.  For bitfields, all the bits matter.
@@ -3995,7 +4102,7 @@ csky_relocate_contents (reloc_howto_type
 
     }
   /* Put RELOCATION in the right bits.  */
-  relocation >>= (bfd_vma) rightshift;
+  relocation >>= rightshift;
 
   if ((howto->type == R_CKCORE_DOFFSET_LO16
        || howto->type == R_CKCORE_TOFFSET_LO16)
@@ -4022,7 +4129,7 @@ csky_relocate_contents (reloc_howto_type
 	  csky_put_insn_32 (input_bfd, CSKY_INSN_JSR_R26, location + 4);
 	}
 
-      relocation <<= (bfd_vma) bitpos;
+      relocation <<= bitpos;
       /* Add RELOCATION to the right bits of X.  */
       x = ((x & ~howto->dst_mask)
 	   | (((x & howto->src_mask) + relocation) & howto->dst_mask));
@@ -4082,7 +4189,7 @@ elf32_csky_get_stub_entry (const asectio
       if (stub_name == NULL)
 	return NULL;
       stub_entry = csky_stub_hash_lookup (&htab->stub_hash_table,
-					  stub_name, FALSE, FALSE);
+					  stub_name, false, false);
       if (h != NULL)
 	h->stub_cache = stub_entry;
       free (stub_name);
@@ -4166,7 +4273,7 @@ tpoff (struct bfd_link_info *info, bfd_v
 
 /* Relocate a csky section.  */
 
-static bfd_boolean
+static int
 csky_elf_relocate_section (bfd *                  output_bfd,
 			   struct bfd_link_info * info,
 			   bfd *                  input_bfd,
@@ -4181,13 +4288,13 @@ csky_elf_relocate_section (bfd *
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
   const char *name;
-  bfd_boolean ret = TRUE;
+  bool ret = true;
   struct csky_elf_link_hash_table * htab;
   bfd_vma *local_got_offsets = elf_local_got_offsets (input_bfd);
 
   htab = csky_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = & elf_symtab_hdr (input_bfd);
   sym_hashes = elf_sym_hashes (input_bfd);
@@ -4196,20 +4303,20 @@ csky_elf_relocate_section (bfd *
   relend = relocs + input_section->reloc_count;
   for (; rel < relend; rel++)
     {
-      enum elf_csky_reloc_type     r_type
+      enum elf_csky_reloc_type r_type
 	= (enum elf_csky_reloc_type) ELF32_R_TYPE (rel->r_info);
-      unsigned long                r_symndx;
-      reloc_howto_type *           howto;
-      Elf_Internal_Sym *           sym;
-      asection *                   sec;
-      bfd_vma                      relocation;
-      bfd_vma                      off;
+      unsigned long r_symndx;
+      reloc_howto_type *howto;
+      Elf_Internal_Sym *sym;
+      asection *sec;
+      bfd_vma relocation;
+      bfd_vma off;
       struct elf_link_hash_entry * h;
-      bfd_vma                      addend = (bfd_vma)rel->r_addend;
-      bfd_reloc_status_type        r = bfd_reloc_ok;
-      bfd_boolean                  unresolved_reloc = FALSE;
-      int                          do_final_relocate = TRUE;
-      bfd_boolean                  relative_reloc = FALSE;
+      bfd_vma addend = (bfd_vma)rel->r_addend;
+      bfd_reloc_status_type r = bfd_reloc_ok;
+      bool unresolved_reloc = false;
+      int do_final_relocate = true;
+      bool relative_reloc = false;
       bfd_signed_vma disp;
 
       /* Ignore these relocation types:
@@ -4224,7 +4331,7 @@ csky_elf_relocate_section (bfd *
 	  _bfd_error_handler (_("%pB: unsupported relocation type: %#x"),
 			      input_bfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	  continue;
 	}
 
@@ -4234,7 +4341,7 @@ csky_elf_relocate_section (bfd *
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -4246,7 +4353,7 @@ csky_elf_relocate_section (bfd *
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -4324,7 +4431,7 @@ csky_elf_relocate_section (bfd *
 	  if (h != NULL)
 	    {
 	      /* Global symbol is defined by other modules.  */
-	      bfd_boolean dyn;
+	      bool dyn;
 	      off = h->got.offset;
 	      dyn = htab->elf.dynamic_sections_created;
 	      if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
@@ -4367,11 +4474,11 @@ csky_elf_relocate_section (bfd *
 		      if (GENERATE_RELATIVE_RELOC_P (info, h))
 			/* If this symbol isn't dynamic
 			   in PIC, generate R_CKCORE_RELATIVE here.  */
-			relative_reloc = TRUE;
+			relative_reloc = true;
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    } /* End if h != NULL.  */
 	  else
 	    {
@@ -4389,7 +4496,7 @@ csky_elf_relocate_section (bfd *
 			      htab->elf.sgot->contents + off);
 		  local_got_offsets[r_symndx] |= 1;
 		  if (bfd_link_pic (info))
-		    relative_reloc = TRUE;
+		    relative_reloc = true;
 		}
 	    }
 	  if (relative_reloc)
@@ -4434,7 +4541,7 @@ csky_elf_relocate_section (bfd *
 	  /* Use global offset table as symbol value.  */
 	  relocation = htab->elf.sgot->output_section->vma;
 	  addend = -addend;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_CKCORE_DOFFSET_IMM18:
@@ -4478,7 +4585,7 @@ csky_elf_relocate_section (bfd *
 		 using -Bsymbolic.  */
 	      if (h->got.offset != (bfd_vma) -1)
 		{
-		  bfd_boolean dyn;
+		  bool dyn;
 
 		  off = h->got.offset;
 		  dyn = htab->elf.dynamic_sections_created;
@@ -4508,7 +4615,7 @@ csky_elf_relocate_section (bfd *
 			{
 			  h->got.offset |= 1;
 			  if (GENERATE_RELATIVE_RELOC_P (info, h))
-			    relative_reloc = TRUE;
+			    relative_reloc = true;
 			}
 		    }
 		  bfd_put_32 (output_bfd, relocation,
@@ -4543,7 +4650,7 @@ csky_elf_relocate_section (bfd *
 	    relocation = (h->plt.offset / PLT_ENTRY_SIZE + 2) * 4;
 	  else
 	    relocation = (h->plt.offset / PLT_ENTRY_SIZE_P + 2) * 4;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_CKCORE_PCREL_IMM26BY2:
@@ -4563,19 +4670,19 @@ csky_elf_relocate_section (bfd *
 	  /* TODO: deal with callgraph.  */
 	  if (h == NULL && r_symndx == 0)
 	    {
-	      do_final_relocate = FALSE;
+	      do_final_relocate = false;
 	      break;
 	    }
 
 	  /* Ignore weak references to undefined symbols.  */
 	  if (h != NULL && h->root.type == bfd_link_hash_undefweak)
 	    {
-	      do_final_relocate = FALSE;
+	      do_final_relocate = false;
 	      break;
 	    }
 
 	  /* Using branch stub.  */
-	  if (use_branch_stub == TRUE
+	  if (use_branch_stub == true
 	      && ELF32_R_TYPE (rel->r_info) == R_CKCORE_PCREL_IMM26BY2)
 	    {
 	      struct elf32_csky_stub_hash_entry *stub_entry = NULL;
@@ -4655,24 +4762,24 @@ csky_elf_relocate_section (bfd *
 			      || h->root.type == bfd_link_hash_indirect)))))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 	      bfd_byte *loc;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at
 		 run time.  */
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
 		{
-		  skip = TRUE;
-		  relocate = TRUE;
+		  skip = true;
+		  relocate = true;
 		}
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
@@ -4691,7 +4798,7 @@ csky_elf_relocate_section (bfd *
 	      else
 		{
 		  /* This symbol is local, or marked to become local.  */
-		  relocate = TRUE;
+		  relocate = true;
 		  outrel.r_info = ELF32_R_INFO (0, r_type);
 		  outrel.r_addend = relocation + rel->r_addend;
 		}
@@ -4720,7 +4827,7 @@ csky_elf_relocate_section (bfd *
 	  if (r_symndx == 0
 	      && strcmp (sec->name, ".csky_stack_size") == 0)
 	    {
-	      do_final_relocate = FALSE;
+	      do_final_relocate = false;
 	      break;
 	    }
 	  if (r_symndx >= symtab_hdr->sh_info
@@ -4741,25 +4848,25 @@ csky_elf_relocate_section (bfd *
 			      || h->root.type == bfd_link_hash_indirect)))))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 	      bfd_byte *loc;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at
 		 run time.  */
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
 		{
-		  skip = TRUE;
-		  relocate = TRUE;
+		  skip = true;
+		  relocate = true;
 		}
 
 	      outrel.r_offset += (input_section->output_section->vma
@@ -4853,7 +4960,7 @@ csky_elf_relocate_section (bfd *
 		   "in shared object"),
 		 input_bfd, input_section, (uint64_t)rel->r_offset,
 		 howto->name);
-	      return FALSE;
+	      return false;
 	    }
 	  else
 	    relocation = tpoff (info, relocation);
@@ -4869,14 +4976,14 @@ csky_elf_relocate_section (bfd *
 	    indx = 0;
 	    if (h != NULL)
 	      {
-		bfd_boolean dyn;
+		bool dyn;
 		dyn = htab->elf.dynamic_sections_created;
 		if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
 						     bfd_link_pic (info), h)
 		    && (!bfd_link_pic (info)
 			|| !SYMBOL_REFERENCES_LOCAL (info, h)))
 		  {
-		    unresolved_reloc = FALSE;
+		    unresolved_reloc = false;
 		    indx = h->dynindx;
 		  }
 		off = h->got.offset;
@@ -4895,7 +5002,7 @@ csky_elf_relocate_section (bfd *
 	      off &= ~1;
 	    else
 	      {
-		bfd_boolean need_relocs = FALSE;
+		bool need_relocs = false;
 		Elf_Internal_Rela outrel;
 		bfd_byte *loc = NULL;
 		int cur_off = off;
@@ -4908,7 +5015,7 @@ csky_elf_relocate_section (bfd *
 			    && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
 			|| h->root.type != bfd_link_hash_undefined))
 		  {
-		    need_relocs = TRUE;
+		    need_relocs = true;
 		    BFD_ASSERT (htab->elf.srelgot != NULL);
 
 		    loc = htab->elf.srelgot->contents;
@@ -5028,7 +5135,7 @@ csky_elf_relocate_section (bfd *
 	 does no change with the data read. But we may need this mechanism in
 	 the future.  */
 
-      if (howto->size == 2
+      if (bfd_get_reloc_size (howto) == 4
 	  && (howto->type == R_CKCORE_ADDR32
 	      || howto->type == R_CKCORE_PCREL32
 	      || howto->type == R_CKCORE_GOT32
@@ -5055,7 +5162,7 @@ csky_elf_relocate_section (bfd *
 
       if (r != bfd_reloc_ok)
 	{
-	  ret = FALSE;
+	  ret = false;
 	  switch (r)
 	    {
 	    default:
@@ -5085,7 +5192,7 @@ csky_elf_relocate_section (bfd *
   return ret;
 }
 
-static bfd_boolean
+static bool
 csky_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -5094,7 +5201,7 @@ csky_elf_grok_prstatus (bfd *abfd, Elf_I
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
       /* Sizeof (struct elf_prstatus) on C-SKY V1 arch.  */
     case 148:
       elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
@@ -5115,13 +5222,13 @@ csky_elf_grok_prstatus (bfd *abfd, Elf_I
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 csky_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
       /* Sizeof (struct elf_prpsinfo) on linux csky.  */
     case 124:
@@ -5142,7 +5249,48 @@ csky_elf_grok_psinfo (bfd *abfd, Elf_Int
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
+}
+
+/* Determine whether an object attribute tag takes an integer, a
+   string or both.  */
+
+static int
+elf32_csky_obj_attrs_arg_type (int tag)
+{
+  switch (tag)
+    {
+    case Tag_compatibility:
+      return ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL;
+    case Tag_CSKY_ARCH_NAME:
+    case Tag_CSKY_CPU_NAME:
+    case Tag_CSKY_FPU_NUMBER_MODULE:
+      return ATTR_TYPE_FLAG_STR_VAL;
+    case Tag_CSKY_ISA_FLAGS:
+    case Tag_CSKY_ISA_EXT_FLAGS:
+    case Tag_CSKY_DSP_VERSION:
+    case Tag_CSKY_VDSP_VERSION:
+    case Tag_CSKY_FPU_VERSION:
+    case Tag_CSKY_FPU_ABI:
+    case Tag_CSKY_FPU_ROUNDING:
+    case Tag_CSKY_FPU_HARDFP:
+    case Tag_CSKY_FPU_Exception:
+    case Tag_CSKY_FPU_DENORMAL:
+      return ATTR_TYPE_FLAG_INT_VAL;
+    default:
+      break;
+    }
+
+  return (tag & 1) != 0 ? ATTR_TYPE_FLAG_STR_VAL : ATTR_TYPE_FLAG_INT_VAL;
+}
+
+/* Attribute numbers >=64 (mod 128) can be safely ignored.  */
+
+static bool
+elf32_csky_obj_attrs_handle_unknown (bfd *abfd ATTRIBUTE_UNUSED,
+				     int tag ATTRIBUTE_UNUSED)
+{
+  return true;
 }
 
 /* End of external entry points for sizing and building linker stubs.  */
@@ -5166,6 +5314,8 @@ csky_elf_grok_psinfo (bfd *abfd, Elf_Int
 #define bfd_elf32_bfd_merge_private_bfd_data  csky_elf_merge_private_bfd_data
 #define bfd_elf32_bfd_set_private_flags       csky_elf_set_private_flags
 #define elf_backend_copy_indirect_symbol      csky_elf_copy_indirect_symbol
+#define bfd_elf32_bfd_is_target_special_symbol csky_elf_is_target_special_symbol
+#define elf_backend_maybe_function_sym	      csky_elf_maybe_function_sym
 
 /* GC section related API.  */
 #define elf_backend_can_gc_sections           1
@@ -5198,4 +5348,15 @@ csky_elf_grok_psinfo (bfd *abfd, Elf_Int
 #define elf_backend_grok_prstatus             csky_elf_grok_prstatus
 #define elf_backend_grok_psinfo               csky_elf_grok_psinfo
 
+/* Attribute sections.  */
+#undef  elf_backend_obj_attrs_vendor
+#define elf_backend_obj_attrs_vendor          "csky"
+#undef  elf_backend_obj_attrs_section
+#define elf_backend_obj_attrs_section         ".csky.attributes"
+#undef  elf_backend_obj_attrs_arg_type
+#define elf_backend_obj_attrs_arg_type        elf32_csky_obj_attrs_arg_type
+#undef  elf_backend_obj_attrs_section_type
+#define elf_backend_obj_attrs_section_type    SHT_CSKY_ATTRIBUTES
+#define elf_backend_obj_attrs_handle_unknown  elf32_csky_obj_attrs_handle_unknown
+
 #include "elf32-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-csky.h ./bfd/elf32-csky.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-csky.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-csky.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for C-SKY.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,9 +18,9 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-extern bfd_boolean elf32_csky_build_stubs
+extern bool elf32_csky_build_stubs
   (struct bfd_link_info *);
-extern bfd_boolean elf32_csky_size_stubs
+extern bool elf32_csky_size_stubs
   (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
    struct bfd_section *(*) (const char*, struct bfd_section*),
    void (*) (void));
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-d10v.c ./bfd/elf32-d10v.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-d10v.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-d10v.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* D10V-specific support for 32-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Contributed by Martin Hunt (hunt@cygnus.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,137 +33,137 @@ static reloc_howto_type elf_d10v_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_D10V_NONE,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 3,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_D10V_NONE",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* An PC Relative 10-bit relocation, shifted by 2, right container.  */
   HOWTO (R_D10V_10_PCREL_R,	/* Type.  */
 	 2,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 8,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_D10V_10_PCREL_R",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xff,			/* Src_mask.  */
 	 0xff,			/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* An PC Relative 10-bit relocation, shifted by 2, left container.  */
   HOWTO (R_D10V_10_PCREL_L,	/* Type.  */
 	 2,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 8,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 15,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_D10V_10_PCREL_L",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0x07f8000,		/* Src_mask.  */
 	 0x07f8000,		/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_D10V_16,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* Size.  */
 	 16,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_D10V_16",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffff,		/* Src_mask.  */
 	 0xffff,		/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* An 18 bit absolute relocation, right shifted 2.  */
   HOWTO (R_D10V_18,		/* Type.  */
 	 2,			/* Rightshift.  */
-	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* Size.  */
 	 16,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont, /* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_D10V_18",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffff,		/* Src_mask.  */
 	 0xffff,		/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* A relative 18 bit relocation, right shifted by 2.  */
   HOWTO (R_D10V_18_PCREL,	/* Type.  */
 	 2,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 16,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_D10V_18_PCREL",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffff,		/* Src_mask.  */
 	 0xffff,		/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_D10V_32,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_D10V_32",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffffffff,		/* Src_mask.  */
 	 0xffffffff,		/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_D10V_GNU_VTINHERIT,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 NULL,			/* Special_function.  */
 	 "R_D10V_GNU_VTINHERIT",/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_D10V_GNU_VTENTRY,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 _bfd_elf_rel_vtable_reloc_fn,  /* Special_function.  */
 	 "R_D10V_GNU_VTENTRY",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 };
 
 /* Map BFD reloc types to D10V ELF reloc types.  */
@@ -220,7 +220,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an D10V ELF reloc.  */
 
-static bfd_boolean
+static bool
 d10v_info_to_howto_rel (bfd *abfd,
 			arelent *cache_ptr,
 			Elf_Internal_Rela *dst)
@@ -234,10 +234,10 @@ d10v_info_to_howto_rel (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_d10v_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 static asection *
@@ -262,7 +262,7 @@ elf32_d10v_gc_mark_hook (asection *sec,
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 elf32_d10v_check_relocs (bfd *abfd,
 			 struct bfd_link_info *info,
 			 asection *sec,
@@ -274,7 +274,7 @@ elf32_d10v_check_relocs (bfd *abfd,
   const Elf_Internal_Rela *rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -302,19 +302,19 @@ elf32_d10v_check_relocs (bfd *abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_D10V_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_D10V_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static bfd_vma
@@ -324,15 +324,15 @@ extract_rel_addend (bfd *abfd,
 {
   bfd_vma insn, val;
 
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
-    case 0:
+    case 1:
       insn = bfd_get_8 (abfd, where);
       break;
-    case 1:
+    case 2:
       insn = bfd_get_16 (abfd, where);
       break;
-    case 2:
+    case 4:
       insn = bfd_get_32 (abfd, where);
       break;
     default:
@@ -362,19 +362,19 @@ insert_rel_addend (bfd *abfd,
 
   addend = (addend >> howto->rightshift << howto->bitpos) & howto->dst_mask;
   insn = ~howto->dst_mask;
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
-    case 0:
+    case 1:
       insn &= bfd_get_8 (abfd, where);
       insn |= addend;
       bfd_put_8 (abfd, insn, where);
       break;
-    case 1:
+    case 2:
       insn &= bfd_get_16 (abfd, where);
       insn |= addend;
       bfd_put_16 (abfd, insn, where);
       break;
-    case 2:
+    case 4:
       insn &= bfd_get_32 (abfd, where);
       insn |= addend;
       bfd_put_32 (abfd, insn, where);
@@ -386,7 +386,7 @@ insert_rel_addend (bfd *abfd,
 
 /* Relocate a D10V ELF section.  */
 
-static bfd_boolean
+static int
 elf32_d10v_relocate_section (bfd *output_bfd,
 			     struct bfd_link_info *info,
 			     bfd *input_bfd,
@@ -460,7 +460,7 @@ elf32_d10v_relocate_section (bfd *output
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -503,7 +503,7 @@ elf32_d10v_relocate_section (bfd *output
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -530,7 +530,7 @@ elf32_d10v_relocate_section (bfd *output
 	}
     }
 
-  return TRUE;
+  return true;
 }
 #define ELF_ARCH		bfd_arch_d10v
 #define ELF_MACHINE_CODE	EM_D10V
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-d30v.c ./bfd/elf32-d30v.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-d30v.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-d30v.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* D30V-specific support for 32-bit ELF
-   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+   Copyright (C) 1997-2024 Free Software Foundation, Inc.
    Contributed by Martin Hunt (hunt@cygnus.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -254,197 +254,197 @@ static reloc_howto_type elf_d30v_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_D30V_NONE,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 3,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont, /* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* Special_function.  */
 	 "R_D30V_NONE",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* A 6 bit absolute relocation.  */
   HOWTO (R_D30V_6,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 6,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_bitfield, /* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* Special_function.  */
 	 "R_D30V_6",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0x3f,			/* Src_mask.  */
 	 0x3f,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* A relative 9 bit relocation, right shifted by 3.  */
   HOWTO (R_D30V_9_PCREL,	/* Type.  */
 	 3,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 6,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_d30v_reloc_21,	/* Special_function.  */
 	 "R_D30V_9_PCREL",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0x3f,			/* Src_mask.  */
 	 0x3f,			/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* A relative 9 bit relocation, right shifted by 3.  */
   HOWTO (R_D30V_9_PCREL_R,	/* Type.  */
 	 3,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 6,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_d30v_reloc_21,	/* Special_function.  */
 	 "R_D30V_9_PCREL_R",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0x3f,			/* Src_mask.  */
 	 0x3f,			/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* An absolute 15 bit relocation, right shifted by 3.  */
   HOWTO (R_D30V_15,		/* Type.  */
 	 3,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 12,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* Special_function.  */
 	 "R_D30V_15",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xfff,			/* Src_mask.  */
 	 0xfff,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* A relative 15 bit relocation, right shifted by 3.  */
   HOWTO (R_D30V_15_PCREL,	/* Type.  */
 	 3,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 12,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_d30v_reloc_21,	/* Special_function.  */
 	 "R_D30V_15_PCREL",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xfff,			/* Src_mask.  */
 	 0xfff,			/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* A relative 15 bit relocation, right shifted by 3.  */
   HOWTO (R_D30V_15_PCREL_R,	/* Type.  */
 	 3,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 12,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_d30v_reloc_21,	/* Special_function.  */
 	 "R_D30V_15_PCREL_R",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xfff,			/* Src_mask.  */
 	 0xfff,			/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* An absolute 21 bit relocation, right shifted by 3.  */
   HOWTO (R_D30V_21,		/* Type.  */
 	 3,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 18,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* Special_function.  */
 	 "R_D30V_21",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0x3ffff,		/* Src_mask.  */
 	 0x3ffff,		/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* A relative 21 bit relocation, right shifted by 3.  */
   HOWTO (R_D30V_21_PCREL,	/* Type.  */
 	 3,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 18,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_d30v_reloc_21,	/* Special_function.  */
 	 "R_D30V_21_PCREL",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0x3ffff,		/* Src_mask.  */
 	 0x3ffff,		/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* A relative 21 bit relocation, right shifted by 3, in the Right container.  */
   HOWTO (R_D30V_21_PCREL_R,	/* Type.  */
 	 3,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 18,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_d30v_reloc_21,	/* Special_function.  */
 	 "R_D30V_21_PCREL_R",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0x3ffff,		/* Src_mask.  */
 	 0x3ffff,		/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* A D30V 32 bit absolute relocation.  */
   HOWTO (R_D30V_32,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 4,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 8,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_bitfield, /* Complain_on_overflow.  */
 	 bfd_elf_d30v_reloc,	/* Special_function.  */
 	 "R_D30V_32",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffffffff,		/* Src_mask.  */
 	 0xffffffff,		/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* A relative 32 bit relocation.  */
   HOWTO (R_D30V_32_PCREL,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 4,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 8,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 bfd_elf_d30v_reloc,	/* Special_function.  */
 	 "R_D30V_32_PCREL",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffffffff,		/* Src_mask.  */
 	 0xffffffff,		/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* A regular 32 bit absolute relocation.  */
   HOWTO (R_D30V_32_NORMAL,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_bitfield, /* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* Special_function.  */
 	 "R_D30V_32_NORMAL",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffffffff,		/* Src_mask.  */
 	 0xffffffff,		/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
 };
 
@@ -508,7 +508,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an D30V ELF reloc (type REL).  */
 
-static bfd_boolean
+static bool
 d30v_info_to_howto_rel (bfd *abfd,
 			arelent *cache_ptr,
 			Elf_Internal_Rela *dst)
@@ -522,15 +522,15 @@ d30v_info_to_howto_rel (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_d30v_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 /* Set the howto pointer for an D30V ELF reloc (type RELA).  */
 
-static bfd_boolean
+static bool
 d30v_info_to_howto_rela (bfd *abfd,
 			 arelent *cache_ptr,
 			 Elf_Internal_Rela *dst)
@@ -544,10 +544,10 @@ d30v_info_to_howto_rela (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_d30v_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 #define ELF_ARCH		bfd_arch_d30v
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-dlx.c ./bfd/elf32-dlx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-dlx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-dlx.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* DLX specific support for 32-bit ELF
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -238,157 +238,157 @@ static reloc_howto_type dlx_elf_howto_ta
   /* No relocation.  */
   HOWTO (R_DLX_NONE,		/* Type. */
 	 0,			/* Rightshift.  */
-	 3,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_DLX_NONE",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* 8 bit relocation.  */
   HOWTO (R_DLX_RELOC_8,		/* Type. */
 	 0,			/* Rightshift.  */
-	 0,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 1,			/* Size.  */
 	 8,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_DLX_RELOC_8",	/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xff,			/* Src_mask.  */
 	 0xff,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* 16 bit relocation.  */
   HOWTO (R_DLX_RELOC_16,	/* Type. */
 	 0,			/* Rightshift.  */
-	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* Size.  */
 	 16,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_DLX_RELOC_16",	/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xffff,		/* Src_mask.  */
 	 0xffff,		/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* 32 bit relocation.  */
   HOWTO (R_DLX_RELOC_32,	/* Type. */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_DLX_RELOC_32",	/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xffffffff,		/* Src_mask.  */
 	 0xffffffff,		/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_DLX_GNU_VTINHERIT,	/* Type. */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 NULL,			/* Special_function.  */
 	 "R_DLX_GNU_VTINHERIT", /* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_DLX_GNU_VTENTRY,	/* Type. */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 _bfd_elf_rel_vtable_reloc_fn,/* Special_function.  */
 	 "R_DLX_GNU_VTENTRY",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE)			/* PCrel_offset.  */
+	 false)			/* PCrel_offset.  */
 };
 
 /* 16 bit offset for pc-relative branches.  */
 static reloc_howto_type elf_dlx_gnu_rel16_s2 =
   HOWTO (R_DLX_RELOC_16_PCREL,	/* Type. */
 	 0,			/* Rightshift.  */
-	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* Size.  */
 	 16,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 elf32_dlx_relocate16,	/* Special_function.  */
 	 "R_DLX_RELOC_16_PCREL",/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xffff,		/* Src_mask.  */
 	 0xffff,		/* Dst_mask.  */
-	 TRUE);			/* PCrel_offset.  */
+	 true);			/* PCrel_offset.  */
 
 /* 26 bit offset for pc-relative branches.  */
 static reloc_howto_type elf_dlx_gnu_rel26_s2 =
   HOWTO (R_DLX_RELOC_26_PCREL,	/* Type. */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 26,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 elf32_dlx_relocate26,	/* Special_function.  */
 	 "R_DLX_RELOC_26_PCREL",/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xffff,		/* Src_mask.  */
 	 0xffff,		/* Dst_mask.  */
-	 TRUE);			/* PCrel_offset.  */
+	 true);			/* PCrel_offset.  */
 
 /* High 16 bits of symbol value.  */
 static reloc_howto_type elf_dlx_reloc_16_hi =
   HOWTO (R_DLX_RELOC_16_HI,	/* Type. */
 	 16,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 _bfd_dlx_elf_hi16_reloc,/* Special_function.  */
 	 "R_DLX_RELOC_16_HI",	/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xFFFF,		/* Src_mask.  */
 	 0xffff,		/* Dst_mask.  */
-	 FALSE);		/* PCrel_offset.  */
+	 false);		/* PCrel_offset.  */
 
   /* Low 16 bits of symbol value.  */
 static reloc_howto_type elf_dlx_reloc_16_lo =
   HOWTO (R_DLX_RELOC_16_LO,	/* Type. */
 	 0,			/* Rightshift.  */
-	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* Size.  */
 	 16,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc, /* Special_function.  */
 	 "R_DLX_RELOC_16_LO",	/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xffff,		/* Src_mask.  */
 	 0xffff,		/* Dst_mask.  */
-	 FALSE);		/* PCrel_offset.  */
+	 false);		/* PCrel_offset.  */
 
 /* A mapping from BFD reloc types to DLX ELF reloc types.
    Stolen from elf32-mips.c.
@@ -419,7 +419,7 @@ static const struct elf_reloc_map dlx_re
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 elf32_dlx_check_relocs (bfd *abfd,
 			struct bfd_link_info *info,
 			asection *sec,
@@ -431,7 +431,7 @@ elf32_dlx_check_relocs (bfd *abfd,
   const Elf_Internal_Rela *rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -459,19 +459,19 @@ elf32_dlx_check_relocs (bfd *abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_DLX_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_DLX_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Given a BFD reloc type, return a howto structure.  */
@@ -552,15 +552,15 @@ dlx_rtype_to_howto (bfd *abfd, unsigned
     }
 }
 
-static bfd_boolean
+static bool
 elf32_dlx_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
 			 arelent * cache_ptr ATTRIBUTE_UNUSED,
 			 Elf_Internal_Rela * dst ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 elf32_dlx_info_to_howto_rel (bfd *abfd,
 			     arelent *cache_ptr,
 			     Elf_Internal_Rela *dst)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-dlx.h ./bfd/elf32-dlx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-dlx.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-dlx.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* DLX specific support for 32-bit ELF
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-epiphany.c ./bfd/elf32-epiphany.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-epiphany.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-epiphany.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Adapteva epiphany specific support for 32-bit ELF
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Contributed by Embecosm on behalf of Adapteva, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -42,7 +42,7 @@ struct epiphany_opcode
   unsigned short mask;
 };
 
-static bfd_boolean epiphany_relaxed = FALSE;
+static bool epiphany_relaxed = false;
 
 /* Relocation tables.  */
 static reloc_howto_type epiphany_elf_howto_table [] =
@@ -50,52 +50,52 @@ static reloc_howto_type epiphany_elf_how
 #define AHOW(t,rs,s,bs,pr,bp,co,name,sm,dm)	\
     HOWTO(t,			/* type */ \
 	  rs,			/* rightshift */ \
-	  s,			/* size (0 = byte, 1 = short, 2 = long) */ \
+	  s,			/* size */ \
 	  bs,			/* bitsize */ \
 	  pr,			/* pc_relative */ \
 	  bp,			/* bitpos */ \
 	  co,			/* complain_on_overflow */	       \
 	  bfd_elf_generic_reloc,/* special_function */ \
 	  name,			/* name */ \
-	  FALSE,		/* partial_inplace */ \
+	  false,		/* partial_inplace */ \
 	  sm,			/* src_mask */ \
 	  dm,			/* dst_mask */ \
 	  pr)			/* pcrel_offset */
 
   /* This reloc does nothing.  */
-  AHOW (R_EPIPHANY_NONE,    0, 3,0, FALSE, 0, complain_overflow_dont,	  "R_EPIPHANY_NONE",	    0,		0),
+  AHOW (R_EPIPHANY_NONE,    0, 0,0, false, 0, complain_overflow_dont,	  "R_EPIPHANY_NONE",	    0,		0),
 
   /* 8 bit absolute (not likely) */
-  AHOW (R_EPIPHANY_8,	    0, 0, 8, FALSE, 0, complain_overflow_bitfield, "R_EPIPHANY_8",	0x000000ff, 0x000000ff),
+  AHOW (R_EPIPHANY_8,	    0, 1, 8, false, 0, complain_overflow_bitfield, "R_EPIPHANY_8",	0x000000ff, 0x000000ff),
   /* 16 bit absolute */
-  AHOW (R_EPIPHANY_16,	    0, 1,16, FALSE, 0, complain_overflow_bitfield, "R_EPIPHANY_16",	0x0000ffff, 0x00ff1fe0),
+  AHOW (R_EPIPHANY_16,	    0, 2,16, false, 0, complain_overflow_bitfield, "R_EPIPHANY_16",	0x0000ffff, 0x00ff1fe0),
   /* A 32 bit absolute relocation.  */
-  AHOW (R_EPIPHANY_32,	    0, 2,32, FALSE, 0, complain_overflow_dont,	   "R_EPIPHANY_32",	0xffffffff, 0xffffffff),
+  AHOW (R_EPIPHANY_32,	    0, 4,32, false, 0, complain_overflow_dont,	   "R_EPIPHANY_32",	0xffffffff, 0xffffffff),
 
   /*  8 bit relative relocation */
-  HOWTO ( R_EPIPHANY_8_PCREL,  0, 0,  8, TRUE, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_EPIPHANY_8_PCREL", FALSE, 0x000000ff, 0x000000ff, FALSE),
+  HOWTO ( R_EPIPHANY_8_PCREL,  0, 1,  8, true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_EPIPHANY_8_PCREL", false, 0x000000ff, 0x000000ff, false),
   /* 16 bit relative relocation */
-  HOWTO ( R_EPIPHANY_16_PCREL, 0, 1, 16, TRUE, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_EPIPHANY_8_PCREL", FALSE, 0x000000ff, 0x000000ff, FALSE),
+  HOWTO ( R_EPIPHANY_16_PCREL, 0, 2, 16, true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_EPIPHANY_8_PCREL", false, 0x000000ff, 0x000000ff, false),
   /* 32 bit relative relocation */
-  HOWTO ( R_EPIPHANY_32_PCREL, 0, 2, 32, TRUE, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_EPIPHANY_8_PCREL", FALSE, 0x000000ff, 0x000000ff, FALSE),
+  HOWTO ( R_EPIPHANY_32_PCREL, 0, 4, 32, true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_EPIPHANY_8_PCREL", false, 0x000000ff, 0x000000ff, false),
 
   /* 8 bit pc-relative relocation */
-  AHOW (R_EPIPHANY_SIMM8,   1, 0, 8,  TRUE, 8, complain_overflow_signed,   "R_EPIPHANY_SIMM8",	 0x000000ff, 0x0000ff00),
+  AHOW (R_EPIPHANY_SIMM8,   1, 1, 8,  true, 8, complain_overflow_signed,   "R_EPIPHANY_SIMM8",	 0x000000ff, 0x0000ff00),
   /* 24 bit pc-relative relocation */
-  AHOW (R_EPIPHANY_SIMM24,  1, 2,24,  TRUE, 8, complain_overflow_signed,   "R_EPIPHANY_SIMM24",	 0x00ffffff, 0xffffff00),
+  AHOW (R_EPIPHANY_SIMM24,  1, 4,24,  true, 8, complain_overflow_signed,   "R_EPIPHANY_SIMM24",	 0x00ffffff, 0xffffff00),
 
   /* %HIGH(EA) */
-  AHOW (R_EPIPHANY_HIGH,    0, 2,16, FALSE, 0, complain_overflow_dont,	   "R_EPIPHANY_HIGH",	 0x0ff01fe0, 0x0ff01fe0),
+  AHOW (R_EPIPHANY_HIGH,    0, 4,16, false, 0, complain_overflow_dont,	   "R_EPIPHANY_HIGH",	 0x0ff01fe0, 0x0ff01fe0),
 
   /* %LOW(EA) */
-  AHOW (R_EPIPHANY_LOW,	    0, 2,16, FALSE, 0, complain_overflow_dont,	"R_EPIPHANY_LOW",     0x0ff01fe0, 0x0ff01fe0),
+  AHOW (R_EPIPHANY_LOW,	    0, 4,16, false, 0, complain_overflow_dont,	"R_EPIPHANY_LOW",     0x0ff01fe0, 0x0ff01fe0),
 
   /* simm11 */
-  AHOW (R_EPIPHANY_SIMM11,  0, 2,11, FALSE, 0, complain_overflow_bitfield, "R_EPIPHANY_SIMM11",	 0x00ff0380, 0x00ff0380),
+  AHOW (R_EPIPHANY_SIMM11,  0, 4,11, false, 0, complain_overflow_bitfield, "R_EPIPHANY_SIMM11",	 0x00ff0380, 0x00ff0380),
   /* imm12 - sign-magnitude */
-  AHOW (R_EPIPHANY_IMM11,   0, 2,11, FALSE, 0, complain_overflow_bitfield, "R_EPIPHANY_IMM12",	 0x00ff0380, 0x00ff0380),
+  AHOW (R_EPIPHANY_IMM11,   0, 4,11, false, 0, complain_overflow_bitfield, "R_EPIPHANY_IMM12",	 0x00ff0380, 0x00ff0380),
   /* imm8 */
-  AHOW (R_EPIPHANY_IMM8,    0, 1, 8, FALSE, 8, complain_overflow_signed,   "R_EPIPHANY_IMM8",	 0x0000ff00, 0x0000ff00)
+  AHOW (R_EPIPHANY_IMM8,    0, 2, 8, false, 8, complain_overflow_signed,   "R_EPIPHANY_IMM8",	 0x0000ff00, 0x0000ff00)
 
 
 };
@@ -175,10 +175,10 @@ epiphany_reloc_name_lookup (bfd *abfd AT
 /* This function handles relaxing for the epiphany.
    Dummy placeholder for future optimizations.  */
 
-static bfd_boolean
+static bool
 epiphany_elf_relax_section (bfd *abfd, asection *sec,
 			    struct bfd_link_info *link_info,
-			    bfd_boolean *again)
+			    bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -189,34 +189,35 @@ epiphany_elf_relax_section (bfd *abfd, a
   static unsigned long page_start = 0;
   static unsigned long page_end = 0;
   static unsigned int pass = 0;
-  static bfd_boolean new_pass = FALSE;
-  static bfd_boolean changed = FALSE;
+  static bool new_pass = false;
+  static bool changed = false;
   struct misc misc ATTRIBUTE_UNUSED;
   asection *stab;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   if (first_section == NULL)
     {
-      epiphany_relaxed = TRUE;
+      epiphany_relaxed = true;
       first_section = sec;
     }
 
   if (first_section == sec)
     {
       pass++;
-      new_pass = TRUE;
+      new_pass = true;
     }
 
   /* We don't have to do anything for a relocatable link,
      if this section does not have relocs, or if this is
      not a code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -278,8 +279,8 @@ epiphany_elf_relax_section (bfd *abfd, a
       if (new_pass)
 	{
 	  pass = 1;
-	  new_pass = FALSE;
-	  changed = TRUE; /* Pre-initialize to break out of pass 1.  */
+	  new_pass = false;
+	  changed = true; /* Pre-initialize to break out of pass 1.  */
 	  search_addr = 0xFFFFFFFF;
 	}
 
@@ -292,15 +293,15 @@ epiphany_elf_relax_section (bfd *abfd, a
 	    search_addr = BASEADDR (sec);
 
 	  /* Found a page => more work to do.  */
-	  *again = TRUE;
+	  *again = true;
 	}
     }
   else
     {
       if (new_pass)
 	{
-	  new_pass = FALSE;
-	  changed = FALSE;
+	  new_pass = false;
+	  changed = false;
 	  page_start = PAGENO (search_addr);
 	  page_end = page_start | 0x00003FFF;
 	}
@@ -313,9 +314,9 @@ epiphany_elf_relax_section (bfd *abfd, a
 	  if (!epiphany_elf_relax_section_page (abfd, sec, &changed, &misc,
 						page_start, page_end))
 #endif
-	    return FALSE;
+	    return false;
 	}
-      *again = TRUE;
+      *again = true;
     }
 
   /* Perform some house keeping after relaxing the section.  */
@@ -341,28 +342,24 @@ epiphany_elf_relax_section (bfd *abfd, a
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 
 /* Set the howto pointer for a EPIPHANY ELF reloc.  */
 
-static bfd_boolean
+static bool
 epiphany_info_to_howto_rela (bfd * abfd,
 			     arelent * cache_ptr,
 			     Elf_Internal_Rela * dst)
@@ -376,10 +373,10 @@ epiphany_info_to_howto_rela (bfd * abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & epiphany_elf_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 /* Perform a single relocation.
@@ -472,7 +469,7 @@ epiphany_final_link_relocate (reloc_howt
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 epiphany_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 			       struct bfd_link_info *info,
 			       bfd *input_bfd,
@@ -522,9 +519,9 @@ epiphany_elf_relocate_section (bfd *outp
 	}
       else
 	{
-	  bfd_boolean warned ATTRIBUTE_UNUSED;
-	  bfd_boolean unresolved_reloc ATTRIBUTE_UNUSED;
-	  bfd_boolean ignored ATTRIBUTE_UNUSED;
+	  bool warned ATTRIBUTE_UNUSED;
+	  bool unresolved_reloc ATTRIBUTE_UNUSED;
+	  bool ignored ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -559,7 +556,7 @@ epiphany_elf_relocate_section (bfd *outp
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -588,7 +585,7 @@ epiphany_elf_relocate_section (bfd *outp
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We only have a little-endian target.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-fr30.c ./bfd/elf32-fr30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-fr30.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-fr30.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* FR30-specific support for 32-bit ELF.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -37,196 +37,196 @@ static reloc_howto_type fr30_elf_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_FR30_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FR30_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit absolute relocation.  */
   HOWTO (R_FR30_8,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FR30_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x0ff0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 20 bit absolute relocation.  */
   HOWTO (R_FR30_20,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 fr30_elf_i20_reloc,	/* special_function */
 	 "R_FR30_20",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00f0ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_FR30_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FR30_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit into 48 bits absolute relocation.  */
   HOWTO (R_FR30_48,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 fr30_elf_i32_reloc,	/* special_function */
 	 "R_FR30_48",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 6 bit absolute relocation.  */
   HOWTO (R_FR30_6_IN_4,		/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FR30_6_IN_4",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x00f0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit absolute relocation.  */
   HOWTO (R_FR30_8_IN_8,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,/* special_function */
 	 "R_FR30_8_IN_8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x0ff0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 9 bit absolute relocation.  */
   HOWTO (R_FR30_9_IN_8,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 9,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,/* special_function */
 	 "R_FR30_9_IN_8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x0ff0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 10 bit absolute relocation.  */
   HOWTO (R_FR30_10_IN_8,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,/* special_function */
 	 "R_FR30_10_IN_8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x0ff0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A PC relative 9 bit relocation, right shifted by 1.  */
   HOWTO (R_FR30_9_PCREL,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 9,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_FR30_9_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A PC relative 12 bit relocation, right shifted by 1.  */
   HOWTO (R_FR30_12_PCREL,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 12,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_FR30_12_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x07ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_FR30_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_FR30_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_FR30_GNU_VTENTRY,	 /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_FR30_GNU_VTENTRY",	 /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 /* Utility to actually perform an R_FR30_20 reloc.  */
@@ -367,7 +367,7 @@ fr30_reloc_name_lookup (bfd *abfd ATTRIB
 
 /* Set the howto pointer for an FR30 ELF reloc.  */
 
-static bfd_boolean
+static bool
 fr30_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
 			 arelent *cache_ptr,
 			 Elf_Internal_Rela *dst)
@@ -381,10 +381,10 @@ fr30_info_to_howto_rela (bfd *abfd ATTRI
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & fr30_elf_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 /* Perform a single relocation.  By default we use the standard BFD
@@ -497,7 +497,7 @@ fr30_final_link_relocate (reloc_howto_ty
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 fr30_elf_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -553,7 +553,7 @@ fr30_elf_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -587,7 +587,7 @@ fr30_elf_relocate_section (bfd *output_b
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -613,7 +613,7 @@ fr30_elf_relocate_section (bfd *output_b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -641,7 +641,7 @@ fr30_elf_gc_mark_hook (asection *sec,
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 fr30_elf_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
@@ -653,7 +653,7 @@ fr30_elf_check_relocs (bfd *abfd,
   const Elf_Internal_Rela *rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -681,19 +681,19 @@ fr30_elf_check_relocs (bfd *abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_FR30_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_FR30_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 #define ELF_ARCH		bfd_arch_fr30
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-frv.c ./bfd/elf32-frv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-frv.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-frv.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* FRV-specific support for 32-bit ELF.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -35,722 +35,722 @@ static reloc_howto_type elf32_frv_howto_
   /* This reloc does nothing.  */
   HOWTO (R_FRV_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_FRV_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit pc-relative relocation.  */
   HOWTO (R_FRV_LABEL16,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_LABEL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 24-bit pc-relative relocation.  */
   HOWTO (R_FRV_LABEL24,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_LABEL24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x7e03ffff,		/* src_mask */
 	 0x7e03ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_FRV_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_LO16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FRV_HI16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_HI16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FRV_GPREL12,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GPREL12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FRV_GPRELU12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GPRELU12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0x3f03f,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FRV_GPREL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FRV_GPRELHI,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GPRELHI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FRV_GPRELLO,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GPRELLO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the GOT offset for the address of
      the symbol.  */
   HOWTO (R_FRV_GOT12,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOT12",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the address of the
      symbol.  */
   HOWTO (R_FRV_GOTHI,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTHI",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the address of the
      symbol.  */
   HOWTO (R_FRV_GOTLO,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTLO",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The 32-bit address of the canonical descriptor of a function.  */
   HOWTO (R_FRV_FUNCDESC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the GOT offset for the address of
      canonical descriptor of a function.  */
   HOWTO (R_FRV_FUNCDESC_GOT12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC_GOT12", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the address of the
      canonical descriptor of a function.  */
   HOWTO (R_FRV_FUNCDESC_GOTHI,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC_GOTHI", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the address of the
      canonical descriptor of a function.  */
   HOWTO (R_FRV_FUNCDESC_GOTLO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC_GOTLO", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The 64-bit descriptor of a function.  */
   HOWTO (R_FRV_FUNCDESC_VALUE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC_VALUE", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the GOT offset for the address of
      canonical descriptor of a function.  */
   HOWTO (R_FRV_FUNCDESC_GOTOFF12, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC_GOTOFF12", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the address of the
      canonical descriptor of a function.  */
   HOWTO (R_FRV_FUNCDESC_GOTOFFHI, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC_GOTOFFHI", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the address of the
      canonical descriptor of a function.  */
   HOWTO (R_FRV_FUNCDESC_GOTOFFLO, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC_GOTOFFLO", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the GOT offset for the address of
      the symbol.  */
   HOWTO (R_FRV_GOTOFF12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTOFF12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the address of the
      symbol.  */
   HOWTO (R_FRV_GOTOFFHI,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTOFFHI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the address of the
      symbol.  */
   HOWTO (R_FRV_GOTOFFLO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTOFFLO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 24-bit pc-relative relocation referencing the TLS PLT entry for
      a thread-local symbol.  If the symbol number is 0, it refers to
      the module.  */
   HOWTO (R_FRV_GETTLSOFF,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GETTLSOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x7e03ffff,		/* src_mask */
 	 0x7e03ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 64-bit TLS descriptor for a symbol.  This relocation is only
      valid as a REL, dynamic relocation.  */
   HOWTO (R_FRV_TLSDESC_VALUE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSDESC_VALUE", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the GOT offset for the TLS
      descriptor of the symbol.  */
   HOWTO (R_FRV_GOTTLSDESC12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTTLSDESC12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the TLS descriptor of the
      symbol.  */
   HOWTO (R_FRV_GOTTLSDESCHI,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTTLSDESCHI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the TLS descriptor of the
      symbol.  */
   HOWTO (R_FRV_GOTTLSDESCLO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTTLSDESCLO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the offset from the module base
      address to the thread-local symbol address.  */
   HOWTO (R_FRV_TLSMOFF12,	 /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSMOFF12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the offset from the module base address to
      the thread-local symbol address.  */
   HOWTO (R_FRV_TLSMOFFHI,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSMOFFHI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the offset from the module base address to
      the thread-local symbol address.  */
   HOWTO (R_FRV_TLSMOFFLO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSMOFFLO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12-bit signed operand with the GOT offset for the TLSOFF entry
      for a symbol.  */
   HOWTO (R_FRV_GOTTLSOFF12,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTTLSOFF12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The upper 16 bits of the GOT offset for the TLSOFF entry for a
      symbol.  */
   HOWTO (R_FRV_GOTTLSOFFHI,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTTLSOFFHI",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The lower 16 bits of the GOT offset for the TLSOFF entry for a
      symbol.  */
   HOWTO (R_FRV_GOTTLSOFFLO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GOTTLSOFFLO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The 32-bit offset from the thread pointer (not the module base
      address) to a thread-local symbol.  */
   HOWTO (R_FRV_TLSOFF,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An annotation for linker relaxation, that denotes the
      symbol+addend whose TLS descriptor is referenced by the sum of
      the two input registers of an ldd instruction.  */
   HOWTO (R_FRV_TLSDESC_RELAX,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSDESC_RELAX",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An annotation for linker relaxation, that denotes the
      symbol+addend whose TLS resolver entry point is given by the sum
      of the two register operands of an calll instruction.  */
   HOWTO (R_FRV_GETTLSOFF_RELAX,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_GETTLSOFF_RELAX", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An annotation for linker relaxation, that denotes the
      symbol+addend whose TLS offset GOT entry is given by the sum of
      the two input registers of an ld instruction.  */
   HOWTO (R_FRV_TLSOFF_RELAX,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSOFF_RELAX",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32-bit offset from the module base address to
      the thread-local symbol address.  */
   HOWTO (R_FRV_TLSMOFF,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSMOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 /* GNU extension to record C++ vtable hierarchy.  */
 static reloc_howto_type elf32_frv_vtinherit_howto =
   HOWTO (R_FRV_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_FRV_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
 static reloc_howto_type elf32_frv_vtentry_howto =
   HOWTO (R_FRV_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_FRV_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* The following 3 relocations are REL.  The only difference to the
-   entries in the table above are that partial_inplace is TRUE.  */
+   entries in the table above are that partial_inplace is true.  */
 static reloc_howto_type elf32_frv_rel_32_howto =
   HOWTO (R_FRV_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 static reloc_howto_type elf32_frv_rel_funcdesc_howto =
   HOWTO (R_FRV_FUNCDESC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 static reloc_howto_type elf32_frv_rel_funcdesc_value_howto =
   HOWTO (R_FRV_FUNCDESC_VALUE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_FUNCDESC_VALUE", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 static reloc_howto_type elf32_frv_rel_tlsdesc_value_howto =
   /* A 64-bit TLS descriptor for a symbol.  The first word resolves to
@@ -766,34 +766,34 @@ static reloc_howto_type elf32_frv_rel_tl
      thread.  */
   HOWTO (R_FRV_TLSDESC_VALUE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSDESC_VALUE", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 static reloc_howto_type elf32_frv_rel_tlsoff_howto =
   /* The 32-bit offset from the thread pointer (not the module base
      address) to a thread-local symbol.  */
   HOWTO (R_FRV_TLSOFF,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FRV_TLSOFF",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 
 
@@ -826,8 +826,9 @@ struct frvfdpic_elf_link_hash_table
 /* Get the FRV ELF linker hash table from a link_info structure.  */
 
 #define frvfdpic_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == FRV_ELF_DATA ? ((struct frvfdpic_elf_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == FRV_ELF_DATA)		\
+   ? (struct frvfdpic_elf_link_hash_table *) (p)->hash : NULL)
 
 #define frvfdpic_got_section(info) \
   (frvfdpic_hash_table (info)->elf.sgot)
@@ -942,7 +943,7 @@ static struct bfd_link_hash_table *
 frvfdpic_elf_link_hash_table_create (bfd *abfd)
 {
   struct frvfdpic_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct frvfdpic_elf_link_hash_table);
+  size_t amt = sizeof (struct frvfdpic_elf_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -1291,7 +1292,7 @@ _frvfdpic_osec_to_segment (bfd *output_b
   return (p != NULL) ? p - elf_tdata (output_bfd)->phdr : -1;
 }
 
-inline static bfd_boolean
+inline static bool
 _frvfdpic_osec_readonly_p (bfd *output_bfd, asection *osec)
 {
   unsigned seg = _frvfdpic_osec_to_segment (output_bfd, osec);
@@ -1317,7 +1318,7 @@ tls_biased_base (struct bfd_link_info *i
 /* Generate relocations for GOT entries, function descriptors, and
    code for PLT and lazy PLT entries.  */
 
-inline static bfd_boolean
+inline static bool
 _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry,
 				       bfd *output_bfd,
 				       struct bfd_link_info *info,
@@ -1330,7 +1331,7 @@ _frvfdpic_emit_got_relocs_plt_entries (s
   int dynindx = -1;
 
   if (entry->done)
-    return TRUE;
+    return true;
   entry->done = 1;
 
   if (entry->got_entry || entry->fdgot_entry || entry->fd_entry
@@ -1453,7 +1454,7 @@ _frvfdpic_emit_got_relocs_plt_entries (s
 		     elf_hash_table (info)->dynobj,
 		     frvfdpic_got_section (info),
 		     entry->fdgot_entry);
-		  return FALSE;
+		  return false;
 		}
 	    }
 	  else
@@ -1604,7 +1605,7 @@ _frvfdpic_emit_got_relocs_plt_entries (s
 		 elf_hash_table (info)->dynobj,
 		 frvfdpic_got_section (info),
 		 entry->fd_entry);
-	      return FALSE;
+	      return false;
 	    }
 
 	  fd_lazy_rel_offset = ofst;
@@ -1787,8 +1788,8 @@ _frvfdpic_emit_got_relocs_plt_entries (s
 		{
 		  (*info->callbacks->undefined_symbol)
 		    (info, "TLS section", elf_hash_table (info)->dynobj,
-		     frvfdpic_got_section (info), entry->tlsoff_entry, TRUE);
-		  return FALSE;
+		     frvfdpic_got_section (info), entry->tlsoff_entry, true);
+		  return false;
 		}
 	      idx = elf_section_data (elf_hash_table (info)->tls_sec)->dynindx;
 	      ad += FRVFDPIC_TLS_BIAS;
@@ -1901,8 +1902,8 @@ _frvfdpic_emit_got_relocs_plt_entries (s
 		{
 		  (*info->callbacks->undefined_symbol)
 		    (info, "TLS section", elf_hash_table (info)->dynobj,
-		     frvfdpic_got_section (info), entry->tlsdesc_entry, TRUE);
-		  return FALSE;
+		     frvfdpic_got_section (info), entry->tlsdesc_entry, true);
+		  return false;
 		}
 	      idx = elf_section_data (elf_hash_table (info)->tls_sec)->dynindx;
 	      ad += FRVFDPIC_TLS_BIAS;
@@ -2115,7 +2116,7 @@ _frvfdpic_emit_got_relocs_plt_entries (s
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Handle an FRV small data reloc.  */
@@ -2132,7 +2133,7 @@ elf32_frv_relocate_gprel12 (struct bfd_l
   bfd_vma gp;
   struct bfd_link_hash_entry *h;
 
-  h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, "_gp", false, false, true);
 
   gp = (h->u.def.value
 	+ h->u.def.section->output_section->vma
@@ -2170,7 +2171,7 @@ elf32_frv_relocate_gprelu12 (struct bfd_
   struct bfd_link_hash_entry *h;
   bfd_vma mask;
 
-  h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, "_gp", false, false, true);
 
   gp = (h->u.def.value
 	+ h->u.def.section->output_section->vma
@@ -2297,7 +2298,7 @@ elf32_frv_relocate_gprelhi (struct bfd_l
   bfd_vma gp;
   struct bfd_link_hash_entry *h;
 
-  h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, "_gp", false, false, true);
 
   gp = (h->u.def.value
 	+ h->u.def.section->output_section->vma
@@ -2330,7 +2331,7 @@ elf32_frv_relocate_gprello (struct bfd_l
   bfd_vma gp;
   struct bfd_link_hash_entry *h;
 
-  h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, "_gp", false, false, true);
 
   gp = (h->u.def.value
 	+ h->u.def.section->output_section->vma
@@ -2533,7 +2534,7 @@ frv_reloc_name_lookup (bfd *abfd ATTRIBU
 
 /* Set the howto pointer for an FRV ELF reloc.  */
 
-static bfd_boolean
+static bool
 frv_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
 			arelent *cache_ptr,
 			Elf_Internal_Rela *dst)
@@ -2558,17 +2559,17 @@ frv_info_to_howto_rela (bfd *abfd ATTRIB
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      abfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       cache_ptr->howto = & elf32_frv_howto_table [r_type];
       break;
     }
-  return TRUE;
+  return true;
 }
 
 /* Set the howto pointer for an FRV ELF REL reloc.  */
 
-static bfd_boolean
+static bool
 frvfdpic_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
 			    arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
@@ -2599,9 +2600,9 @@ frvfdpic_info_to_howto_rel (bfd *abfd AT
 
     default:
       cache_ptr->howto = NULL;
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Perform a single relocation.  By default we use the standard BFD
@@ -2651,7 +2652,7 @@ frv_final_link_relocate (reloc_howto_typ
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 			    struct bfd_link_info *info,
 			    bfd *input_bfd,
@@ -2712,7 +2713,7 @@ elf32_frv_relocate_section (bfd *output_
       const char *name;
       int r_type;
       asection *osec;
-      struct frvfdpic_relocs_info *picrel;
+      struct frvfdpic_relocs_info *picrel = NULL;
       bfd_vma orig_addend = rel->r_addend;
 
       r_type = ELF32_R_TYPE (rel->r_info);
@@ -2740,8 +2741,8 @@ elf32_frv_relocate_section (bfd *output_
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
-	  bfd_boolean unresolved_reloc;
+	  bool warned, ignored;
+	  bool unresolved_reloc;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -2806,6 +2807,9 @@ elf32_frv_relocate_section (bfd *output_
 	case R_FRV_GETTLSOFF_RELAX:
 	case R_FRV_TLSOFF_RELAX:
 	case R_FRV_TLSMOFF:
+	  if ((input_section->flags & SEC_ALLOC) == 0)
+	    break;
+
 	  if (h != NULL)
 	    picrel = frvfdpic_relocs_info_for_global (frvfdpic_relocs_info
 						      (info), input_bfd, h,
@@ -2818,7 +2822,7 @@ elf32_frv_relocate_section (bfd *output_
 						     (info), input_bfd, r_symndx,
 						     orig_addend, INSERT);
 	  if (! picrel)
-	    return FALSE;
+	    return false;
 
 	  if (!_frvfdpic_emit_got_relocs_plt_entries (picrel, output_bfd, info,
 						      osec, sym,
@@ -2829,7 +2833,7 @@ elf32_frv_relocate_section (bfd *output_
 		(_("%H: relocation to `%s+%v'"
 		   " may have caused the error above\n"),
 		 input_bfd, input_section, rel->r_offset, name, rel->r_addend);
-	      return FALSE;
+	      return false;
 	    }
 
 	  break;
@@ -2846,7 +2850,7 @@ elf32_frv_relocate_section (bfd *output_
 		(_("%H: relocation references symbol"
 		   " not defined in the module\n"),
 		 input_bfd, input_section, rel->r_offset);
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 	}
@@ -2921,7 +2925,7 @@ elf32_frv_relocate_section (bfd *output_
 		info->callbacks->einfo
 		  (_("%H: R_FRV_GETTLSOFF not applied to a call instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_GETTLSOFF_LOCAL_EXEC_P (info, picrel,
@@ -2963,7 +2967,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_GOTTLSDESC12"
 		     " not applied to an lddi instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_TLSDESC_LOCAL_EXEC_P (info, picrel,
@@ -3034,7 +3038,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_GOTTLSDESCHI"
 		     " not applied to a sethi instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_TLSDESC_LOCAL_EXEC_P (info, picrel,
@@ -3071,7 +3075,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_GOTTLSDESCLO"
 		     " not applied to a setlo or setlos instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_TLSDESC_LOCAL_EXEC_P (info, picrel,
@@ -3118,7 +3122,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_TLSDESC_RELAX"
 		     " not applied to an ldd instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_TLSDESC_LOCAL_EXEC_P (info, picrel,
@@ -3202,7 +3206,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_GETTLSOFF_RELAX"
 		     " not applied to a calll instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_TLSDESC_LOCAL_EXEC_P (info, picrel,
@@ -3256,7 +3260,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_GOTTLSOFF12"
 		     " not applied to an ldi instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_GOTTLSOFF_LOCAL_EXEC_P (info, picrel,
@@ -3286,7 +3290,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_GOTTLSOFFHI"
 		     " not applied to a sethi instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_GOTTLSOFF_LOCAL_EXEC_P (info, picrel,
@@ -3315,7 +3319,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_GOTTLSOFFLO"
 		     " not applied to a setlo or setlos instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_GOTTLSOFF_LOCAL_EXEC_P (info, picrel,
@@ -3345,7 +3349,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_TLSOFF_RELAX"
 		     " not applied to an ld instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (RELAX_GOTTLSOFF_LOCAL_EXEC_P (info, picrel,
@@ -3390,7 +3394,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("%H: R_FRV_TLSMOFFHI"
 		     " not applied to a sethi instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (TLSMOFF_IN_RANGE_FOR_SETLOS_P (relocation + rel->r_addend,
@@ -3417,7 +3421,7 @@ elf32_frv_relocate_section (bfd *output_
 		  (_("R_FRV_TLSMOFFLO"
 		     " not applied to a setlo or setlos instruction\n"),
 		   input_bfd, input_section, rel->r_offset);
-		return FALSE;
+		return false;
 	      }
 
 	    if (TLSMOFF_IN_RANGE_FOR_SETLOS_P (relocation + rel->r_addend,
@@ -3539,7 +3543,7 @@ elf32_frv_relocate_section (bfd *output_
 			     " with nonzero addend\n"),
 			   input_bfd, input_section, rel->r_offset,
 			   "R_FRV_FUNCDESC");
-			return FALSE;
+			return false;
 		      }
 		    dynindx = h->dynindx;
 		  }
@@ -3579,7 +3583,7 @@ elf32_frv_relocate_section (bfd *output_
 			      (_("%H: cannot emit fixups"
 				 " in read-only section\n"),
 			       input_bfd, input_section, rel->r_offset);
-			    return FALSE;
+			    return false;
 			  }
 
 			offset = _bfd_elf_section_offset
@@ -3609,7 +3613,7 @@ elf32_frv_relocate_section (bfd *output_
 			  (_("%H: cannot emit dynamic relocations"
 			     " in read-only section\n"),
 			   input_bfd, input_section, rel->r_offset);
-			return FALSE;
+			return false;
 		      }
 
 		    offset = _bfd_elf_section_offset
@@ -3659,7 +3663,7 @@ elf32_frv_relocate_section (bfd *output_
 			 " with nonzero addend\n"),
 		       input_bfd, input_section, rel->r_offset,
 		       "R_FRV_FUNCDESC_VALUE");
-		    return FALSE;
+		    return false;
 		  }
 		dynindx = h->dynindx;
 	      }
@@ -3699,7 +3703,7 @@ elf32_frv_relocate_section (bfd *output_
 			info->callbacks->einfo
 			  (_("%H: cannot emit fixups in read-only section\n"),
 			   input_bfd, input_section, rel->r_offset);
-			return FALSE;
+			return false;
 		      }
 		    if (!h || h->root.type != bfd_link_hash_undefweak)
 		      {
@@ -3742,7 +3746,7 @@ elf32_frv_relocate_section (bfd *output_
 			  (_("%H: cannot emit dynamic relocations"
 			     " in read-only section\n"),
 			   input_bfd, input_section, rel->r_offset);
-			return FALSE;
+			return false;
 		      }
 
 		    offset = _bfd_elf_section_offset
@@ -3896,11 +3900,11 @@ elf32_frv_relocate_section (bfd *output_
 	     input file basename is crt0.o only once.  */
 	  if (silence_segment_error == 1)
 	    silence_segment_error =
-	      (strlen (input_bfd->filename) == 6
-	       && filename_cmp (input_bfd->filename, "crt0.o") == 0)
-	      || (strlen (input_bfd->filename) > 6
-		  && filename_cmp (input_bfd->filename
-				   + strlen (input_bfd->filename) - 7,
+	      (strlen (bfd_get_filename (input_bfd)) == 6
+	       && filename_cmp (bfd_get_filename (input_bfd), "crt0.o") == 0)
+	      || (strlen (bfd_get_filename (input_bfd)) > 6
+		  && filename_cmp (bfd_get_filename (input_bfd)
+				   + strlen (bfd_get_filename (input_bfd)) - 7,
 			     "/crt0.o") == 0)
 	      ? -1 : 0;
 	  if (!silence_segment_error
@@ -3915,7 +3919,7 @@ elf32_frv_relocate_section (bfd *output_
 		 input_bfd, input_section, rel->r_offset, name);
 	    }
 	  if (!silence_segment_error && bfd_link_pic (info))
-	    return FALSE;
+	    return false;
 	  elf_elfheader (output_bfd)->e_flags |= EF_FRV_PIC;
 	}
 
@@ -4038,7 +4042,7 @@ elf32_frv_relocate_section (bfd *output_
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -4064,12 +4068,12 @@ elf32_frv_relocate_section (bfd *output_
 		/* xgettext:c-format */
 		(_("%H: reloc against `%s': %s\n"),
 		 input_bfd, input_section, rel->r_offset, name, msg);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -4096,7 +4100,7 @@ elf32_frv_gc_mark_hook (asection *sec,
 /* Hook called by the linker routine which adds symbols from an object
    file.  We use it to put .comm items in .scomm, and not .comm.  */
 
-static bfd_boolean
+static bool
 elf32_frv_add_symbol_hook (bfd *abfd,
 			   struct bfd_link_info *info,
 			   Elf_Internal_Sym *sym,
@@ -4119,21 +4123,22 @@ elf32_frv_add_symbol_hook (bfd *abfd,
 	  scomm = bfd_make_section_with_flags (abfd, ".scommon",
 					       (SEC_ALLOC
 						| SEC_IS_COMMON
+						| SEC_SMALL_DATA
 						| SEC_LINKER_CREATED));
 	  if (scomm == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       *secp = scomm;
       *valp = sym->st_size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We need dynamic symbols for every section, since segments can
    relocate independently.  */
-static bfd_boolean
+static bool
 _frvfdpic_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
 				    struct bfd_link_info *info
 				    ATTRIBUTE_UNUSED,
@@ -4146,12 +4151,12 @@ _frvfdpic_link_omit_section_dynsym (bfd
       /* If sh_type is yet undecided, assume it could be
 	 SHT_PROGBITS/SHT_NOBITS.  */
     case SHT_NULL:
-      return FALSE;
+      return false;
 
       /* There shouldn't be section relative relocations
 	 against any other section.  */
     default:
-      return TRUE;
+      return true;
     }
 }
 
@@ -4159,7 +4164,7 @@ _frvfdpic_link_omit_section_dynsym (bfd
    is almost entirely copied from
    elflink.c:_bfd_elf_create_got_section().  */
 
-static bfd_boolean
+static bool
 _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags, pltflags;
@@ -4173,7 +4178,7 @@ _frv_create_got_section (bfd *abfd, stru
   /* This function may be called more than once.  */
   s = elf_hash_table (info)->sgot;
   if (s != NULL)
-    return TRUE;
+    return true;
 
   /* Machine specific: although pointers are 32-bits wide, we want the
      GOT to be aligned to a 64-bit boundary, such that function
@@ -4189,7 +4194,7 @@ _frv_create_got_section (bfd *abfd, stru
   elf_hash_table (info)->sgot = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
   if (bed->want_got_sym)
     {
@@ -4200,12 +4205,12 @@ _frv_create_got_section (bfd *abfd, stru
       h = _bfd_elf_define_linkage_sym (abfd, info, s, "_GLOBAL_OFFSET_TABLE_");
       elf_hash_table (info)->hgot = h;
       if (h == NULL)
-	return FALSE;
+	return false;
 
       /* Machine-specific: we want the symbol for executables as
 	 well.  */
       if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   /* The first bit of the global offset table is the header.  */
@@ -4220,21 +4225,21 @@ _frv_create_got_section (bfd *abfd, stru
 						     frvfdpic_relocs_info_eq,
 						     (htab_del) NULL);
       if (! frvfdpic_relocs_info (info))
-	return FALSE;
+	return false;
 
       s = bfd_make_section_anyway_with_flags (abfd, ".rel.got",
 					      (flags | SEC_READONLY));
       elf_hash_table (info)->srelgot = s;
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
-	return FALSE;
+	return false;
 
       /* Machine-specific.  */
       s = bfd_make_section_anyway_with_flags (abfd, ".rofixup",
 					      (flags | SEC_READONLY));
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
-	return FALSE;
+	return false;
 
       frvfdpic_gotfixup_section (info) = s;
       offset = -2048;
@@ -4251,9 +4256,9 @@ _frv_create_got_section (bfd *abfd, stru
      linker script will override it.  */
   bh = NULL;
   if (!(_bfd_generic_link_add_one_symbol
-	(info, abfd, "_gp", flags, s, offset, (const char *) NULL, FALSE,
+	(info, abfd, "_gp", flags, s, offset, (const char *) NULL, false,
 	 bed->collect, &bh)))
-    return FALSE;
+    return false;
   h = (struct elf_link_hash_entry *) bh;
   h->def_regular = 1;
   h->type = STT_OBJECT;
@@ -4261,10 +4266,10 @@ _frv_create_got_section (bfd *abfd, stru
 
   /* Machine-specific: we want the symbol for executables as well.  */
   if (IS_FDPIC (abfd) && ! bfd_elf_link_record_dynamic_symbol (info, h))
-    return FALSE;
+    return false;
 
   if (!IS_FDPIC (abfd))
-    return TRUE;
+    return true;
 
   /* FDPIC supports Thread Local Storage, and this may require a
      procedure linkage table for TLS PLT entries.  */
@@ -4282,7 +4287,7 @@ _frv_create_got_section (bfd *abfd, stru
   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
   /* FRV-specific: remember it.  */
   frvfdpic_plt_section (info) = s;
 
@@ -4294,7 +4299,7 @@ _frv_create_got_section (bfd *abfd, stru
 				       "_PROCEDURE_LINKAGE_TABLE_");
       elf_hash_table (info)->hplt = h;
       if (h == NULL)
-	return FALSE;
+	return false;
     }
 
   /* FRV-specific: we want rel relocations for the plt.  */
@@ -4302,17 +4307,17 @@ _frv_create_got_section (bfd *abfd, stru
 					  flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   /* FRV-specific: remember it.  */
   frvfdpic_pltrel_section (info) = s;
 
-  return TRUE;
+  return true;
 }
 
 /* Make sure the got and plt sections exist, and that our pointers in
    the link hash table point to them.  */
 
-static bfd_boolean
+static bool
 elf32_frvfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   /* This is mostly copied from
@@ -4330,7 +4335,7 @@ elf32_frvfdpic_create_dynamic_sections (
   /* FRV-specific: we want to create the GOT and the PLT in the FRV
      way.  */
   if (! _frv_create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   /* FRV-specific: make sure we created everything we wanted.  */
   BFD_ASSERT (frvfdpic_got_section (info) && frvfdpic_gotrel_section (info)
@@ -4349,7 +4354,7 @@ elf32_frvfdpic_create_dynamic_sections (
       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
 					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
-	return FALSE;
+	return false;
 
       /* The .rel[a].bss section holds copy relocs.  This section is not
      normally needed.  We need to create it here, though, so that the
@@ -4370,11 +4375,11 @@ elf32_frvfdpic_create_dynamic_sections (
 						  flags | SEC_READONLY);
 	  if (s == NULL
 	      || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Compute the total GOT and PLT size required by each symbol in each
@@ -4450,7 +4455,7 @@ _frvfdpic_count_nontls_entries (struct f
 static void
 _frvfdpic_count_tls_entries (struct frvfdpic_relocs_info *entry,
 			     struct _frvfdpic_dynamic_got_info *dinfo,
-			     bfd_boolean subtract)
+			     bool subtract)
 {
   const int l = subtract ? -1 : 1;
 
@@ -4495,7 +4500,7 @@ _frvfdpic_count_tls_entries (struct frvf
 static void
 _frvfdpic_count_relocs_fixups (struct frvfdpic_relocs_info *entry,
 			       struct _frvfdpic_dynamic_got_info *dinfo,
-			       bfd_boolean subtract)
+			       bool subtract)
 {
   bfd_vma relocs = 0, fixups = 0, tlsrets = 0;
 
@@ -4566,9 +4571,9 @@ _frvfdpic_count_relocs_fixups (struct fr
 static void
 _frvfdpic_relax_tls_entries (struct frvfdpic_relocs_info *entry,
 			     struct _frvfdpic_dynamic_got_info *dinfo,
-			     bfd_boolean relaxing)
+			     bool relaxing)
 {
-  bfd_boolean changed = ! relaxing;
+  bool changed = ! relaxing;
 
   BFD_ASSERT (bfd_link_executable (dinfo->info)
 	      || (dinfo->info->flags & DF_STATIC_TLS));
@@ -4577,9 +4582,9 @@ _frvfdpic_relax_tls_entries (struct frvf
     {
       if (! changed)
 	{
-	  _frvfdpic_count_relocs_fixups (entry, dinfo, TRUE);
-	  _frvfdpic_count_tls_entries (entry, dinfo, TRUE);
-	  changed = TRUE;
+	  _frvfdpic_count_relocs_fixups (entry, dinfo, true);
+	  _frvfdpic_count_tls_entries (entry, dinfo, true);
+	  changed = true;
 	}
 
       /* When linking an executable, we can always decay GOTTLSDESC to
@@ -4633,9 +4638,9 @@ _frvfdpic_relax_tls_entries (struct frvf
     {
       if (! changed)
 	{
-	  _frvfdpic_count_relocs_fixups (entry, dinfo, TRUE);
-	  _frvfdpic_count_tls_entries (entry, dinfo, TRUE);
-	  changed = TRUE;
+	  _frvfdpic_count_relocs_fixups (entry, dinfo, true);
+	  _frvfdpic_count_tls_entries (entry, dinfo, true);
+	  changed = true;
 	}
 
       entry->tlsplt =
@@ -4655,9 +4660,9 @@ _frvfdpic_relax_tls_entries (struct frvf
     {
       if (! changed)
 	{
-	  _frvfdpic_count_relocs_fixups (entry, dinfo, TRUE);
-	  _frvfdpic_count_tls_entries (entry, dinfo, TRUE);
-	  changed = TRUE;
+	  _frvfdpic_count_relocs_fixups (entry, dinfo, true);
+	  _frvfdpic_count_tls_entries (entry, dinfo, true);
+	  changed = true;
 	}
 
       entry->tlsoff12 = 1;
@@ -4666,8 +4671,8 @@ _frvfdpic_relax_tls_entries (struct frvf
 
   if (changed)
     {
-      _frvfdpic_count_tls_entries (entry, dinfo, FALSE);
-      _frvfdpic_count_relocs_fixups (entry, dinfo, FALSE);
+      _frvfdpic_count_tls_entries (entry, dinfo, false);
+      _frvfdpic_count_relocs_fixups (entry, dinfo, false);
     }
 
   return;
@@ -4688,11 +4693,11 @@ _frvfdpic_count_got_plt_entries (void **
 
   if (bfd_link_executable (dinfo->info)
       || (dinfo->info->flags & DF_STATIC_TLS))
-    _frvfdpic_relax_tls_entries (entry, dinfo, FALSE);
+    _frvfdpic_relax_tls_entries (entry, dinfo, false);
   else
     {
-      _frvfdpic_count_tls_entries (entry, dinfo, FALSE);
-      _frvfdpic_count_relocs_fixups (entry, dinfo, FALSE);
+      _frvfdpic_count_tls_entries (entry, dinfo, false);
+      _frvfdpic_count_relocs_fixups (entry, dinfo, false);
     }
 
   return 1;
@@ -5209,7 +5214,7 @@ _frvfdpic_resolve_final_relocs_info (voi
    section and the rofixup section.  Assign locations for GOT and PLT
    entries.  */
 
-static bfd_boolean
+static bool
 _frvfdpic_size_got_plt (bfd *output_bfd,
 			struct _frvfdpic_dynamic_got_plt_info *gpinfop)
 {
@@ -5308,7 +5313,7 @@ _frvfdpic_size_got_plt (bfd *output_bfd,
 	(bfd_byte *) bfd_zalloc (dynobj,
 				 frvfdpic_got_section (info)->size);
       if (frvfdpic_got_section (info)->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (frvfdpic_gotrel_section (info))
@@ -5327,7 +5332,7 @@ _frvfdpic_size_got_plt (bfd *output_bfd,
 	(bfd_byte *) bfd_zalloc (dynobj,
 				 frvfdpic_gotrel_section (info)->size);
       if (frvfdpic_gotrel_section (info)->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   frvfdpic_gotfixup_section (info)->size = (gpinfop->g.fixups + 1) * 4;
@@ -5339,7 +5344,7 @@ _frvfdpic_size_got_plt (bfd *output_bfd,
 	(bfd_byte *) bfd_zalloc (dynobj,
 				 frvfdpic_gotfixup_section (info)->size);
       if (frvfdpic_gotfixup_section (info)->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (frvfdpic_pltrel_section (info))
@@ -5355,7 +5360,7 @@ _frvfdpic_size_got_plt (bfd *output_bfd,
 	    (bfd_byte *) bfd_zalloc (dynobj,
 				     frvfdpic_pltrel_section (info)->size);
 	  if (frvfdpic_pltrel_section (info)->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -5408,16 +5413,16 @@ _frvfdpic_size_got_plt (bfd *output_bfd,
 	    (bfd_byte *) bfd_zalloc (dynobj,
 				     frvfdpic_plt_section (info)->size);
 	  if (frvfdpic_plt_section (info)->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf32_frvfdpic_size_dynamic_sections (bfd *output_bfd,
 				      struct bfd_link_info *info)
 {
@@ -5461,50 +5466,29 @@ elf32_frvfdpic_size_dynamic_sections (bf
   frvfdpic_dynamic_got_plt_info (info) = bfd_alloc (dynobj, sizeof (gpinfo.g));
 
   if (!_frvfdpic_size_got_plt (output_bfd, &gpinfo))
-    return FALSE;
-
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      if (frvfdpic_got_section (info)->size)
-	if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0))
-	  return FALSE;
-
-      if (frvfdpic_pltrel_section (info)->size)
-	if (!_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_REL)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0))
-	  return FALSE;
-
-      if (frvfdpic_gotrel_section (info)->size)
-	if (!_bfd_elf_add_dynamic_entry (info, DT_REL, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_RELSZ, 0)
-	    || !_bfd_elf_add_dynamic_entry (info, DT_RELENT,
-					    sizeof (Elf32_External_Rel)))
-	  return FALSE;
-    }
+    return false;
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, true);
 }
 
-static bfd_boolean
+static bool
 elf32_frvfdpic_always_size_sections (bfd *output_bfd,
 				     struct bfd_link_info *info)
 {
   if (!bfd_link_relocatable (info)
       && !bfd_elf_stack_segment_size (output_bfd, info,
 				      "__stacksize", DEFAULT_STACK_SIZE))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Check whether any of the relocations was optimized away, and
    subtract it from the relocation or fixup count.  */
-static bfd_boolean
+static bool
 _frvfdpic_check_discarded_relocs (bfd *abfd, asection *sec,
 				  struct bfd_link_info *info,
-
-				  bfd_boolean *changed)
+				  bool *changed)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
@@ -5512,7 +5496,7 @@ _frvfdpic_check_discarded_relocs (bfd *a
 
   if ((sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -5557,28 +5541,28 @@ _frvfdpic_check_discarded_relocs (bfd *a
 						 rel->r_addend, NO_INSERT);
 
       if (! picrel)
-	return FALSE;
+	return false;
 
-      *changed = TRUE;
+      *changed = true;
       dinfo = frvfdpic_dynamic_got_plt_info (info);
 
-      _frvfdpic_count_relocs_fixups (picrel, dinfo, TRUE);
+      _frvfdpic_count_relocs_fixups (picrel, dinfo, true);
       if (ELF32_R_TYPE (rel->r_info) == R_FRV_32)
 	picrel->relocs32--;
       else /* we know (ELF32_R_TYPE (rel->r_info) == R_FRV_FUNCDESC) */
 	picrel->relocsfd--;
-      _frvfdpic_count_relocs_fixups (picrel, dinfo, FALSE);
+      _frvfdpic_count_relocs_fixups (picrel, dinfo, false);
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 frvfdpic_elf_discard_info (bfd *ibfd,
 			   struct elf_reloc_cookie *cookie ATTRIBUTE_UNUSED,
 			   struct bfd_link_info *info)
 {
-  bfd_boolean changed = FALSE;
+  bool changed = false;
   asection *s;
   bfd *obfd = NULL;
 
@@ -5587,7 +5571,7 @@ frvfdpic_elf_discard_info (bfd *ibfd,
     if (s->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
       {
 	if (!_frvfdpic_check_discarded_relocs (ibfd, s, info, &changed))
-	  return FALSE;
+	  return false;
 	obfd = s->output_section->owner;
       }
 
@@ -5605,10 +5589,10 @@ frvfdpic_elf_discard_info (bfd *ibfd,
 		     NULL);
 
       if (!_frvfdpic_size_got_plt (obfd, &gpinfo))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look for opportunities to relax TLS relocations.  We can assume
@@ -5621,14 +5605,14 @@ _frvfdpic_relax_got_plt_entries (void **
   struct frvfdpic_relocs_info *entry = *entryp;
   struct _frvfdpic_dynamic_got_info *dinfo = dinfo_;
 
-  _frvfdpic_relax_tls_entries (entry, dinfo, TRUE);
+  _frvfdpic_relax_tls_entries (entry, dinfo, true);
 
   return 1;
 }
 
-static bfd_boolean
+static bool
 elf32_frvfdpic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec,
-			      struct bfd_link_info *info, bfd_boolean *again)
+			      struct bfd_link_info *info, bool *again)
 {
   struct _frvfdpic_dynamic_got_plt_info gpinfo;
 
@@ -5637,22 +5621,22 @@ elf32_frvfdpic_relax_section (bfd *abfd
       (_("%P%F: --relax and -r may not be used together\n"));
 
   /* If we return early, we didn't change anything.  */
-  *again = FALSE;
+  *again = false;
 
   /* We'll do our thing when requested to relax the GOT section.  */
   if (sec != frvfdpic_got_section (info))
-    return TRUE;
+    return true;
 
   /* We can only relax when linking the main executable or a library
      that can't be dlopened.  */
   if (! bfd_link_executable (info) && ! (info->flags & DF_STATIC_TLS))
-    return TRUE;
+    return true;
 
   /* If there isn't a TLS section for this binary, we can't do
      anything about its TLS relocations (it probably doesn't have
      any.  */
   if (elf_hash_table (info)->tls_sec == NULL)
-    return TRUE;
+    return true;
 
   memset (&gpinfo, 0, sizeof (gpinfo));
   memcpy (&gpinfo.g, frvfdpic_dynamic_got_plt_info (info), sizeof (gpinfo.g));
@@ -5676,7 +5660,7 @@ elf32_frvfdpic_relax_section (bfd *abfd
 	 be a better way to get to it.  */
       if (!_frvfdpic_size_got_plt (elf_hash_table (info)->tls_sec->owner,
 				   &gpinfo))
-	return FALSE;
+	return false;
 
       /* Repeat until we don't make any further changes.  We could fail to
 	 introduce changes in a round if, for example, the 12-bit range is
@@ -5684,23 +5668,23 @@ elf32_frvfdpic_relax_section (bfd *abfd
 	 descriptors in it.  We have to repeat the whole process because
 	 we might have changed the size of a section processed before this
 	 one.  */
-      *again = TRUE;
+      *again = true;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Fill in code and data in dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf32_frv_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				   struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   /* Nothing to be done for non-FDPIC.  */
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_frvfdpic_finish_dynamic_sections (bfd *output_bfd,
 					struct bfd_link_info *info)
 {
@@ -5736,11 +5720,11 @@ elf32_frvfdpic_finish_dynamic_sections (
 	    error:
 	      info->callbacks->einfo
 		("LINKER BUG: .rofixup section size mismatch\n");
-	      return FALSE;
+	      return false;
 	    }
 
 	  hend = bfd_link_hash_lookup (info->hash, "__ROFIXUP_END__",
-				       FALSE, FALSE, TRUE);
+				       false, false, true);
 	  if (hend
 	      && (hend->type == bfd_link_hash_defined
 		  || hend->type == bfd_link_hash_defweak)
@@ -5811,13 +5795,13 @@ elf32_frvfdpic_finish_dynamic_sections (
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  */
 
-static bfd_boolean
+static bool
 elf32_frvfdpic_adjust_dynamic_symbol
 (struct bfd_link_info *info ATTRIBUTE_UNUSED,
  struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
@@ -5842,35 +5826,35 @@ elf32_frvfdpic_adjust_dynamic_symbol
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Perform any actions needed for dynamic symbols.  */
 
-static bfd_boolean
+static bool
 elf32_frvfdpic_finish_dynamic_symbol
 (bfd *output_bfd ATTRIBUTE_UNUSED,
  struct bfd_link_info *info ATTRIBUTE_UNUSED,
  struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
  Elf_Internal_Sym *sym ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* Decide whether to attempt to turn absptr or lsda encodings in
    shared libraries into pcrel within the given input section.  */
 
-static bfd_boolean
+static bool
 frvfdpic_elf_use_relative_eh_frame
 (bfd *input_bfd ATTRIBUTE_UNUSED,
  struct bfd_link_info *info ATTRIBUTE_UNUSED,
  asection *eh_frame_section ATTRIBUTE_UNUSED)
 {
   /* We can't use PC-relative encodings in FDPIC binaries, in general.  */
-  return FALSE;
+  return false;
 }
 
 /* Adjust the contents of an eh_frame_hdr section before they're output.  */
@@ -6008,7 +5992,7 @@ frvfdpic_elf_encode_eh_address (bfd *abf
    PLT entry should be faster), or taking hints from the compiler.
    Given infinite time and money... :-)  */
 
-static bfd_boolean
+static bool
 elf32_frv_check_relocs (bfd *abfd,
 			struct bfd_link_info *info,
 			asection *sec,
@@ -6022,7 +6006,7 @@ elf32_frv_check_relocs (bfd *abfd,
   struct frvfdpic_relocs_info *picrel;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -6087,7 +6071,7 @@ elf32_frv_check_relocs (bfd *abfd,
 	    {
 	      elf_hash_table (info)->dynobj = dynobj = abfd;
 	      if (! _frv_create_got_section (abfd, info))
-		return FALSE;
+		return false;
 	    }
 	  if (! IS_FDPIC (abfd))
 	    {
@@ -6116,7 +6100,7 @@ elf32_frv_check_relocs (bfd *abfd,
 						     (info), abfd, r_symndx,
 						     rel->r_addend, INSERT);
 	  if (! picrel)
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -6227,14 +6211,14 @@ elf32_frv_check_relocs (bfd *abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_FRV_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_FRV_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_FRV_LABEL16:
@@ -6255,11 +6239,11 @@ elf32_frv_check_relocs (bfd *abfd,
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      abfd, (unsigned int) ELF32_R_TYPE (rel->r_info));
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -6286,7 +6270,7 @@ elf32_frv_machine (bfd *abfd)
 
 /* Set the right machine number for a FRV ELF file.  */
 
-static bfd_boolean
+static bool
 elf32_frv_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_frv, elf32_frv_machine (abfd));
@@ -6296,54 +6280,58 @@ elf32_frv_object_p (bfd *abfd)
 
 /* Function to set the ELF flag bits.  */
 
-static bfd_boolean
+static bool
 frv_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Return true if the architecture described by elf header flag
    EXTENSION is an extension of the architecture described by BASE.  */
 
-static bfd_boolean
+static bool
 frv_elf_arch_extension_p (flagword base, flagword extension)
 {
   if (base == extension)
-    return TRUE;
+    return true;
 
   /* CPU_GENERIC code can be merged with code for a specific
      architecture, in which case the result is marked as being
      for the specific architecture.  Everything is therefore
      an extension of CPU_GENERIC.  */
   if (base == EF_FRV_CPU_GENERIC)
-    return TRUE;
+    return true;
 
   if (extension == EF_FRV_CPU_FR450)
     if (base == EF_FRV_CPU_FR400 || base == EF_FRV_CPU_FR405)
-      return TRUE;
+      return true;
 
   if (extension == EF_FRV_CPU_FR405)
     if (base == EF_FRV_CPU_FR400)
-      return TRUE;
+      return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 frv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword old_flags, old_partial;
   flagword new_flags, new_partial;
-  bfd_boolean error = FALSE;
+  bool error = false;
   char new_opt[80];
   char old_opt[80];
 
+  /* FIXME: What should be checked when linking shared libraries?  */
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
+
   new_opt[0] = old_opt[0] = '\0';
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
@@ -6360,7 +6348,7 @@ frv_elf_merge_private_bfd_data (bfd *ibf
 
   if (!elf_flags_init (obfd))			/* First call, no flags set.  */
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       old_flags = new_flags;
     }
 
@@ -6502,7 +6490,7 @@ frv_elf_merge_private_bfd_data (bfd *ibf
 	    {
 	      old_flags &= ~ EF_FRV_PIC_FLAGS;
 #ifndef FRV_NO_PIC_ERROR
-	      error = TRUE;
+	      error = true;
 	      _bfd_error_handler
 		/* xgettext:c-format */
 		(_("%pB: compiled with %s and linked with modules"
@@ -6556,7 +6544,7 @@ frv_elf_merge_private_bfd_data (bfd *ibf
       /* Print out any mismatches from above.  */
       if (new_opt[0])
 	{
-	  error = TRUE;
+	  error = true;
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: compiled with %s and linked with modules compiled with %s"),
@@ -6569,7 +6557,7 @@ frv_elf_merge_private_bfd_data (bfd *ibf
       if (new_partial != old_partial)
 	{
 	  old_flags |= new_partial;
-	  error = TRUE;
+	  error = true;
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: uses different unknown e_flags (%#x) fields"
@@ -6591,7 +6579,7 @@ frv_elf_merge_private_bfd_data (bfd *ibf
   if (((new_flags & EF_FRV_FDPIC) == 0)
       != (! IS_FDPIC (ibfd)))
     {
-      error = TRUE;
+      error = true;
       if (IS_FDPIC (obfd))
 	_bfd_error_handler
 	  (_("%pB: cannot link non-fdpic object file into fdpic executable"),
@@ -6609,7 +6597,7 @@ frv_elf_merge_private_bfd_data (bfd *ibf
 }
 
 
-static bfd_boolean
+static bool
 frv_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -6686,13 +6674,13 @@ frv_elf_print_private_bfd_data (bfd *abf
     fprintf (file, " -G0");
 
   fputc ('\n', file);
-  return TRUE;
+  return true;
 }
 
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf32_frv_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -6701,7 +6689,7 @@ elf32_frv_grok_prstatus (bfd *abfd, Elf_
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       /* The Linux/FRV elf_prstatus struct is 268 bytes long.  The other
 	 hardcoded offsets and sizes listed below (and contained within
@@ -6736,13 +6724,13 @@ elf32_frv_grok_prstatus (bfd *abfd, Elf_
 					  note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       /* The Linux/FRV elf_prpsinfo struct is 124 bytes long.  */
       case 124:
@@ -6768,7 +6756,7 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_In
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 #define ELF_ARCH		bfd_arch_frv
 #define ELF_MACHINE_CODE	EM_CYGNUS_FRV
@@ -6807,7 +6795,7 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_In
 #define elf_backend_grok_prstatus	elf32_frv_grok_prstatus
 #define elf_backend_grok_psinfo		elf32_frv_grok_psinfo
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #include "elf32-target.h"
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-ft32.c ./bfd/elf32-ft32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-ft32.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-ft32.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,8 +1,8 @@
 /* ft32-specific support for 32-bit ELF.
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2024 Free Software Foundation, Inc.
 
    Copied from elf32-moxie.c which is..
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -29,7 +29,7 @@
 #include "elf/ft32.h"
 #include "opcode/ft32.h"
 
-static bfd_boolean debug_relax = FALSE;
+static bool debug_relax = false;
 
 static bfd_reloc_status_type
 bfd_elf_ft32_diff_reloc (bfd *, arelent *, asymbol *, void *,
@@ -40,187 +40,186 @@ static reloc_howto_type ft32_elf_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_FT32_NONE,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 0,			/* size */
+	 0,			/* bitsize */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
+	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
 
   HOWTO (R_FT32_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FT32_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FT32_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FT32_10,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_10",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00003ff0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FT32_20,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_20",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x000fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FT32_17,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 17,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_17",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0001ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FT32_18,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 18,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_18",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0003ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FT32_RELAX,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_RELAX",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_FT32_SC0,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_SC0",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_FT32_SC1,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 22,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_SC1",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x07ffff80,		/* src_mask */
 	 0x07ffff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_FT32_15,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_FT32_15",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_FT32_DIFF32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_ft32_diff_reloc, /* special_function */
 	 "R_FT32_DIFF32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
-
 /* Map BFD reloc types to FT32 ELF reloc types.  */
 
 struct ft32_reloc_map
@@ -267,8 +266,7 @@ ft32_reloc_type_lookup (bfd *abfd ATTRIB
 {
   unsigned int i;
 
-  for (i = sizeof (ft32_reloc_map) / sizeof (ft32_reloc_map[0]);
-       --i;)
+  for (i = 0; i < sizeof (ft32_reloc_map) / sizeof (ft32_reloc_map[0]); i++)
     if (ft32_reloc_map [i].bfd_reloc_val == code)
       return & ft32_elf_howto_table [ft32_reloc_map[i].ft32_reloc_val];
 
@@ -292,7 +290,7 @@ ft32_reloc_name_lookup (bfd *abfd ATTRIB
 
 /* Set the howto pointer for an FT32 ELF reloc.  */
 
-static bfd_boolean
+static bool
 ft32_info_to_howto_rela (bfd *abfd,
 			  arelent *cache_ptr,
 			  Elf_Internal_Rela *dst)
@@ -306,7 +304,7 @@ ft32_info_to_howto_rela (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = & ft32_elf_howto_table [r_type];
@@ -343,7 +341,7 @@ ft32_info_to_howto_rela (bfd *abfd,
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 ft32_elf_relocate_section (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    bfd *input_bfd,
@@ -393,7 +391,7 @@ ft32_elf_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -487,7 +485,7 @@ ft32_elf_relocate_section (bfd *output_b
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -513,12 +511,12 @@ ft32_elf_relocate_section (bfd *output_b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relaxation.  */
 
-static bfd_boolean
+static bool
 ft32_reloc_shortable
     (bfd *		    abfd,
      asection *		    sec,
@@ -572,7 +570,7 @@ ft32_reloc_shortable
 	/* This appears to be a reference to an undefined
 	   symbol.  Just ignore it--it will be caught by the
 	   regular reloc processing.  */
-	return FALSE;
+	return false;
 
       symval = (h->root.u.def.value
 		+ h->root.u.def.section->output_section->vma
@@ -587,7 +585,7 @@ ft32_reloc_shortable
       case R_FT32_20:
       case R_FT32_RELAX:
 	if (symval != 0)
-	  return FALSE;
+	  return false;
 	insn = bfd_get_32 (abfd, contents + irel->r_offset);
 	insn |= ((symval + irel->r_addend) << howto->bitpos) & howto->dst_mask;
 	return ft32_shortcode (insn, sc);
@@ -604,23 +602,23 @@ ft32_reloc_shortable
 	  {
 	    switch (insn)
 	      {
-		case 0x00200000: *sc = (3 << 13) | (0  << 9); return TRUE;
-		case 0x00280000: *sc = (3 << 13) | (1  << 9); return TRUE;
-		case 0x00600000: *sc = (3 << 13) | (2  << 9); return TRUE;
-		case 0x00680000: *sc = (3 << 13) | (3  << 9); return TRUE;
-		case 0x00a00000: *sc = (3 << 13) | (4  << 9); return TRUE;
-		case 0x00a80000: *sc = (3 << 13) | (5  << 9); return TRUE;
-		case 0x00e00000: *sc = (3 << 13) | (6  << 9); return TRUE;
-		case 0x00e80000: *sc = (3 << 13) | (7  << 9); return TRUE;
-		case 0x01200000: *sc = (3 << 13) | (8  << 9); return TRUE;
-		case 0x01280000: *sc = (3 << 13) | (9  << 9); return TRUE;
-		case 0x01600000: *sc = (3 << 13) | (10 << 9); return TRUE;
-		case 0x01680000: *sc = (3 << 13) | (11 << 9); return TRUE;
-		case 0x01a00000: *sc = (3 << 13) | (12 << 9); return TRUE;
-		case 0x01a80000: *sc = (3 << 13) | (13 << 9); return TRUE;
+		case 0x00200000: *sc = (3 << 13) | (0  << 9); return true;
+		case 0x00280000: *sc = (3 << 13) | (1  << 9); return true;
+		case 0x00600000: *sc = (3 << 13) | (2  << 9); return true;
+		case 0x00680000: *sc = (3 << 13) | (3  << 9); return true;
+		case 0x00a00000: *sc = (3 << 13) | (4  << 9); return true;
+		case 0x00a80000: *sc = (3 << 13) | (5  << 9); return true;
+		case 0x00e00000: *sc = (3 << 13) | (6  << 9); return true;
+		case 0x00e80000: *sc = (3 << 13) | (7  << 9); return true;
+		case 0x01200000: *sc = (3 << 13) | (8  << 9); return true;
+		case 0x01280000: *sc = (3 << 13) | (9  << 9); return true;
+		case 0x01600000: *sc = (3 << 13) | (10 << 9); return true;
+		case 0x01680000: *sc = (3 << 13) | (11 << 9); return true;
+		case 0x01a00000: *sc = (3 << 13) | (12 << 9); return true;
+		case 0x01a80000: *sc = (3 << 13) | (13 << 9); return true;
 
-		case 0x00300000: *sc = (3 << 13) | (14 << 9); return TRUE;
-		case 0x00340000: *sc = (3 << 13) | (15 << 9); return TRUE;
+		case 0x00300000: *sc = (3 << 13) | (14 << 9); return true;
+		case 0x00340000: *sc = (3 << 13) | (15 << 9); return true;
 
 		default:
 		  break;
@@ -631,12 +629,12 @@ ft32_reloc_shortable
       default:
 	break;
     }
-  return FALSE;
+  return false;
 }
 
 /* Returns whether the relocation type passed is a diff reloc.  */
 
-static bfd_boolean
+static bool
 elf32_ft32_is_diff_reloc (Elf_Internal_Rela *irel)
 {
   return (ELF32_R_TYPE (irel->r_info) == R_FT32_DIFF32);
@@ -646,7 +644,7 @@ elf32_ft32_is_diff_reloc (Elf_Internal_R
    insn address happens to fall between the two symbols for which this
    diff reloc was emitted.  */
 
-static bfd_boolean
+static bool
 elf32_ft32_adjust_diff_reloc_value (bfd *abfd,
 				   struct bfd_section *isec,
 				   Elf_Internal_Rela *irel,
@@ -666,7 +664,7 @@ elf32_ft32_adjust_diff_reloc_value (bfd
   if (isec_contents == NULL)
     {
       if (! bfd_malloc_and_get_section (abfd, isec, &isec_contents))
-	return FALSE;
+	return false;
 
       elf_section_data (isec)->this_hdr.contents = isec_contents;
     }
@@ -681,7 +679,7 @@ elf32_ft32_adjust_diff_reloc_value (bfd
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   /* For a diff reloc sym1 - sym2 the diff at assembly time (x) is written
@@ -714,14 +712,14 @@ elf32_ft32_adjust_diff_reloc_value (bfd
 	  break;
 
 	default:
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_ft32_adjust_reloc_if_spans_insn (bfd *abfd,
 				      asection *isec,
 				      Elf_Internal_Rela *irel,  bfd_vma symval,
@@ -736,32 +734,32 @@ elf32_ft32_adjust_reloc_if_spans_insn (b
 					       symval,
 					       shrinked_insn_address,
 					       count))
-	return FALSE;
+	return false;
     }
   else
     {
       bfd_vma reloc_value = symval + irel->r_addend;
-      bfd_boolean addend_within_shrink_boundary =
+      bool addend_within_shrink_boundary =
 	(reloc_value <= shrink_boundary);
-      bfd_boolean reloc_spans_insn =
+      bool reloc_spans_insn =
 	(symval <= shrinked_insn_address
 	 && reloc_value > shrinked_insn_address
 	 && addend_within_shrink_boundary);
 
       if (! reloc_spans_insn)
-	return TRUE;
+	return true;
 
       irel->r_addend -= count;
 
       if (debug_relax)
 	printf ("Relocation's addend needed to be fixed \n");
     }
-  return TRUE;
+  return true;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 elf32_ft32_relax_delete_bytes (struct bfd_link_info *link_info, bfd * abfd,
 			       asection * sec, bfd_vma addr, int count)
 {
@@ -826,7 +824,7 @@ elf32_ft32_relax_delete_bytes (struct bf
 	irel = elf_section_data (isec)->relocs;
 	/* PR 12161: Read in the relocs for this section if necessary.  */
 	if (irel == NULL)
-	  irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, TRUE);
+	  irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, true);
 
 	for (irelend = irel + isec->reloc_count; irel < irelend; irel++)
 	  {
@@ -840,7 +838,7 @@ elf32_ft32_relax_delete_bytes (struct bf
 						  symtab_hdr->sh_info, 0,
 						  NULL, NULL, NULL);
 		if (isymbuf == NULL)
-		  return FALSE;
+		  return false;
 	      }
 
 	    /* Get the value of the symbol referred to by the reloc.  */
@@ -887,7 +885,7 @@ elf32_ft32_relax_delete_bytes (struct bf
 								    shrinked_insn_address,
 								    shrink_boundary,
 								    count))
-			  return FALSE;
+			  return false;
 		      }
 		  }
 		/* else reference symbol is absolute. No adjustment needed. */
@@ -953,12 +951,12 @@ elf32_ft32_relax_delete_bytes (struct bf
 	sym_hash->root.u.def.value -= count;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if LOC can be a target of a branch, jump or call.  */
 
-static bfd_boolean
+static bool
 elf32_ft32_relax_is_branch_target (struct bfd_link_info *link_info,
 				   bfd * abfd, asection * sec,
 				   bfd_vma loc)
@@ -982,7 +980,7 @@ elf32_ft32_relax_is_branch_target (struc
     {
       irel = elf_section_data (isec)->relocs;
       if (irel == NULL)
-	irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, TRUE);
+	irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, true);
 
       irelend = irel + isec->reloc_count;
 
@@ -998,7 +996,7 @@ elf32_ft32_relax_is_branch_target (struc
 						symtab_hdr->sh_info, 0,
 						NULL, NULL, NULL);
 	      if (isymbuf == NULL)
-		return FALSE;
+		return false;
 	    }
 
 	  /* Get the value of the symbol referred to by the reloc.  */
@@ -1024,7 +1022,7 @@ elf32_ft32_relax_is_branch_target (struc
 			    (unsigned int) symval,
 			    (unsigned int) (symval + irel->r_addend));
 		  if ((irel->r_addend) == loc)
-		    return TRUE;
+		    return true;
 		}
 	    }
 	}
@@ -1067,18 +1065,17 @@ elf32_ft32_relax_is_branch_target (struc
 	  || sym_hash->root.type == bfd_link_hash_defweak)
 	  && sym_hash->root.u.def.section == sec
 	  && sym_hash->root.u.def.value == loc)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
-ft32_elf_relax_section
-    (bfd *		    abfd,
-     asection *		    sec,
-     struct bfd_link_info * link_info,
-     bfd_boolean *	    again)
+static bool
+ft32_elf_relax_section (bfd *abfd,
+			asection *sec,
+			struct bfd_link_info *link_info,
+			bool *again)
 {
   Elf_Internal_Rela * free_relocs = NULL;
   Elf_Internal_Rela * internal_relocs;
@@ -1089,16 +1086,17 @@ ft32_elf_relax_section
   Elf_Internal_Sym *  isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   /* Get the section contents.  */
   if (elf_section_data (sec)->this_hdr.contents != NULL)
@@ -1199,7 +1197,7 @@ ft32_elf_relax_section
 
 	  /* That will change things, so, we should relax again.
 	     Note that this is not required, and it may be slow.  */
-	  *again = TRUE;
+	  *again = true;
 
 	  irel += 2;
 	}
@@ -1230,17 +1228,15 @@ ft32_elf_relax_section
 
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (free_relocs != NULL)
-    free (free_relocs);
+  free (free_relocs);
 
-  return TRUE;
+  return true;
 }
 
 #define ELF_ARCH		bfd_arch_ft32
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-gen.c ./bfd/elf32-gen.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-gen.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-gen.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,34 +29,34 @@
 static reloc_howto_type dummy =
   HOWTO (0,			/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "UNKNOWN",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
-static bfd_boolean
+static bool
 elf_generic_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 			   arelent *bfd_reloc,
 			   Elf_Internal_Rela *elf_reloc ATTRIBUTE_UNUSED)
 {
   bfd_reloc->howto = &dummy;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_generic_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
 			       arelent *bfd_reloc,
 			       Elf_Internal_Rela *elf_reloc ATTRIBUTE_UNUSED)
 {
   bfd_reloc->howto = &dummy;
-  return TRUE;
+  return true;
 }
 
 static void
@@ -72,20 +72,20 @@ check_for_relocs (bfd * abfd, asection *
 			  abfd, ehdrp->e_machine);
 
       bfd_set_error (bfd_error_wrong_format);
-      * (bfd_boolean *) failed = TRUE;
+      * (bool *) failed = true;
     }
 }
 
-static bfd_boolean
+static bool
 elf32_generic_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
-  bfd_boolean failed = FALSE;
+  bool failed = false;
 
   /* Check if there are any relocations.  */
   bfd_map_over_sections (abfd, check_for_relocs, & failed);
 
   if (failed)
-    return FALSE;
+    return false;
   return bfd_elf_link_add_symbols (abfd, info);
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-h8300.c ./bfd/elf32-h8300.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-h8300.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-h8300.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Renesas H8/300 ELF binaries.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -27,27 +27,27 @@
 
 static reloc_howto_type *elf32_h8_reloc_type_lookup
   (bfd *abfd, bfd_reloc_code_real_type code);
-static bfd_boolean elf32_h8_info_to_howto
+static bool elf32_h8_info_to_howto
   (bfd *, arelent *, Elf_Internal_Rela *);
-static bfd_boolean elf32_h8_info_to_howto_rel
+static bool elf32_h8_info_to_howto_rel
   (bfd *, arelent *, Elf_Internal_Rela *);
 static unsigned long elf32_h8_mach (flagword);
-static bfd_boolean elf32_h8_object_p (bfd *);
-static bfd_boolean elf32_h8_merge_private_bfd_data
+static bool elf32_h8_object_p (bfd *);
+static bool elf32_h8_merge_private_bfd_data
   (bfd *, struct bfd_link_info *);
-static bfd_boolean elf32_h8_relax_section
-  (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
-static bfd_boolean elf32_h8_relax_delete_bytes
+static bool elf32_h8_relax_section
+  (bfd *, asection *, struct bfd_link_info *, bool *);
+static bool elf32_h8_relax_delete_bytes
   (bfd *, asection *, bfd_vma, int);
-static bfd_boolean elf32_h8_symbol_address_p (bfd *, asection *, bfd_vma);
+static bool elf32_h8_symbol_address_p (bfd *, asection *, bfd_vma);
 static bfd_byte *elf32_h8_get_relocated_section_contents
   (bfd *, struct bfd_link_info *, struct bfd_link_order *,
-   bfd_byte *, bfd_boolean, asymbol **);
+   bfd_byte *, bool, asymbol **);
 static bfd_reloc_status_type elf32_h8_final_link_relocate
   (unsigned long, bfd *, bfd *, asection *,
    bfd_byte *, bfd_vma, bfd_vma, bfd_vma,
    struct bfd_link_info *, asection *, int);
-static bfd_boolean elf32_h8_relocate_section
+static int elf32_h8_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *,
    bfd_byte *, Elf_Internal_Rela *,
    Elf_Internal_Sym *, asection **);
@@ -62,171 +62,171 @@ static reloc_howto_type h8_elf_howto_tab
 #define R_H8_NONE_X 0
   HOWTO (R_H8_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_DIR32_X (R_H8_NONE_X + 1)
   HOWTO (R_H8_DIR32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_DIR32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_DIR16_X (R_H8_DIR32_X + 1)
   HOWTO (R_H8_DIR16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_DIR16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_DIR8_X (R_H8_DIR16_X + 1)
   HOWTO (R_H8_DIR8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_DIR8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_DIR16A8_X (R_H8_DIR8_X + 1)
   HOWTO (R_H8_DIR16A8,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_DIR16A8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_DIR16R8_X (R_H8_DIR16A8_X + 1)
   HOWTO (R_H8_DIR16R8,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_DIR16R8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_DIR24A8_X (R_H8_DIR16R8_X + 1)
   HOWTO (R_H8_DIR24A8,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_DIR24A8",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff000000,		/* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_DIR24R8_X (R_H8_DIR24A8_X + 1)
   HOWTO (R_H8_DIR24R8,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_DIR24R8",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff000000,		/* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_DIR32A16_X (R_H8_DIR24R8_X + 1)
   HOWTO (R_H8_DIR32A16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_DIR32A16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_DISP32A16_X (R_H8_DIR32A16_X + 1)
   HOWTO (R_H8_DISP32A16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_DISP32A16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #define R_H8_PCREL16_X (R_H8_DISP32A16_X + 1)
   HOWTO (R_H8_PCREL16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_PCREL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 #define R_H8_PCREL8_X (R_H8_PCREL16_X + 1)
   HOWTO (R_H8_PCREL8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 special,		/* special_function */
 	 "R_H8_PCREL8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 /* This structure is used to map BFD reloc codes to H8 ELF relocs.  */
@@ -284,7 +284,7 @@ elf32_h8_reloc_name_lookup (bfd *abfd AT
   return NULL;
 }
 
-static bfd_boolean
+static bool
 elf32_h8_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *bfd_reloc,
 			Elf_Internal_Rela *elf_reloc)
 {
@@ -296,20 +296,20 @@ elf32_h8_info_to_howto (bfd *abfd ATTRIB
     if (h8_elf_howto_table[i].type == r)
       {
 	bfd_reloc->howto = &h8_elf_howto_table[i];
-	return TRUE;
+	return true;
       }
   /* xgettext:c-format */
   _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r);
   bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 elf32_h8_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
 			    arelent *bfd_reloc ATTRIBUTE_UNUSED,
 			    Elf_Internal_Rela *elf_reloc ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
 /* Special handling for H8/300 relocs.
@@ -425,7 +425,7 @@ elf32_h8_final_link_relocate (unsigned l
 }
 
 /* Relocate an H8 ELF section.  */
-static bfd_boolean
+static int
 elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 			   bfd *input_bfd, asection *input_section,
 			   bfd_byte *contents, Elf_Internal_Rela *relocs,
@@ -470,7 +470,7 @@ elf32_h8_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -516,7 +516,7 @@ elf32_h8_relocate_section (bfd *output_b
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -543,7 +543,7 @@ elf32_h8_relocate_section (bfd *output_b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Object files encode the specific H8 model they were compiled
@@ -584,7 +584,7 @@ elf32_h8_mach (flagword flags)
    file.  We use this opportunity to encode the BFD machine type
    into the flags field in the object file.  */
 
-static bfd_boolean
+static bool
 elf32_h8_final_write_processing (bfd *abfd)
 {
   unsigned long val;
@@ -629,36 +629,36 @@ elf32_h8_final_write_processing (bfd *ab
 /* Return nonzero if ABFD represents a valid H8 ELF object file; also
    record the encoded machine type found in the ELF flags.  */
 
-static bfd_boolean
+static bool
 elf32_h8_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_h8300,
 			     elf32_h8_mach (elf_elfheader (abfd)->e_flags));
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  The only data we need to copy at this
    time is the architecture/machine information.  */
 
-static bfd_boolean
+static bool
 elf32_h8_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
       && bfd_get_mach (obfd) < bfd_get_mach (ibfd))
     {
       if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
 			       bfd_get_mach (ibfd)))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function handles relaxing for the H8..
@@ -687,9 +687,9 @@ elf32_h8_merge_private_bfd_data (bfd *ib
 
      mov.[bwl] @(displ:24/32+ERx) -> mov.[bwl] @(displ:16+ERx)	4 bytes.  */
 
-static bfd_boolean
+static bool
 elf32_h8_relax_section (bfd *abfd, asection *sec,
-			struct bfd_link_info *link_info, bfd_boolean *again)
+			struct bfd_link_info *link_info, bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -700,16 +700,17 @@ elf32_h8_relax_section (bfd *abfd, asect
   static Elf_Internal_Rela *last_reloc = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -934,7 +935,7 @@ elf32_h8_relax_section (bfd *abfd, asect
 							  4))
 			  goto error_return;
 
-			*again = TRUE;
+			*again = true;
 			break;
 		      }
 		  }
@@ -959,7 +960,7 @@ elf32_h8_relax_section (bfd *abfd, asect
 
 		/* That will change things, so, we should relax again.
 		   Note that this is not required, and it may be slow.  */
-		*again = TRUE;
+		*again = true;
 	      }
 	    break;
 	  }
@@ -1030,7 +1031,7 @@ elf32_h8_relax_section (bfd *abfd, asect
 
 		/* That will change things, so, we should relax again.
 		   Note that this is not required, and it may be slow.  */
-		*again = TRUE;
+		*again = true;
 	      }
 	    break;
 	  }
@@ -1118,7 +1119,7 @@ elf32_h8_relax_section (bfd *abfd, asect
 
 		/* That will change things, so, we should relax again.
 		   Note that this is not required, and it may be slow.  */
-		*again = TRUE;
+		*again = true;
 	      }
 	    break;
 	  }
@@ -1205,7 +1206,7 @@ elf32_h8_relax_section (bfd *abfd, asect
 
 		/* That will change things, so, we should relax again.
 		   Note that this is not required, and it may be slow.  */
-		*again = TRUE;
+		*again = true;
 		break;
 	      }
 	  }
@@ -1344,7 +1345,7 @@ elf32_h8_relax_section (bfd *abfd, asect
 
 		/* That will change things, so, we should relax again.
 		   Note that this is not required, and it may be slow.  */
-		*again = TRUE;
+		*again = true;
 	      }
 	    break;	/* case R_H8_DIR32A16 */
 	  }
@@ -1433,7 +1434,7 @@ elf32_h8_relax_section (bfd *abfd, asect
 
 		    /* That will change things, so, we should relax again.
 		       Note that this is not required, and it may be slow.  */
-		    *again = TRUE;
+		    *again = true;
 		  }
 	      }
 	  }
@@ -1465,28 +1466,24 @@ elf32_h8_relax_section (bfd *abfd, asect
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 elf32_h8_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, int count)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -1552,12 +1549,12 @@ elf32_h8_relax_delete_bytes (bfd *abfd,
 	sym_hash->root.u.def.value -= count;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if a symbol exists at the given address, else return
    FALSE.  */
-static bfd_boolean
+static bool
 elf32_h8_symbol_address_p (bfd *abfd, asection *sec, bfd_vma addr)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -1578,7 +1575,7 @@ elf32_h8_symbol_address_p (bfd *abfd, as
     {
       if (isym->st_shndx == sec_shndx
 	  && isym->st_value == addr)
-	return TRUE;
+	return true;
     }
 
   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
@@ -1592,10 +1589,10 @@ elf32_h8_symbol_address_p (bfd *abfd, as
 	   || sym_hash->root.type == bfd_link_hash_defweak)
 	  && sym_hash->root.u.def.section == sec
 	  && sym_hash->root.u.def.value == addr)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* This is a version of bfd_generic_get_relocated_section_contents
@@ -1606,7 +1603,7 @@ elf32_h8_get_relocated_section_contents
 					 struct bfd_link_info *link_info,
 					 struct bfd_link_order *link_order,
 					 bfd_byte *data,
-					 bfd_boolean relocatable,
+					 bool relocatable,
 					 asymbol **symbols)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -1627,6 +1624,13 @@ elf32_h8_get_relocated_section_contents
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
 
+  bfd_byte *orig_data = data;
+  if (data == NULL)
+    {
+      data = bfd_malloc (input_section->size);
+      if (data == NULL)
+	return NULL;
+    }
   memcpy (data, elf_section_data (input_section)->this_hdr.contents,
 	  (size_t) input_section->size);
 
@@ -1639,7 +1643,7 @@ elf32_h8_get_relocated_section_contents
 
       internal_relocs = (_bfd_elf_link_read_relocs
 			 (input_bfd, input_section, NULL,
-			  (Elf_Internal_Rela *) NULL, FALSE));
+			  (Elf_Internal_Rela *) NULL, false));
       if (internal_relocs == NULL)
 	goto error_return;
 
@@ -1682,10 +1686,8 @@ elf32_h8_get_relocated_section_contents
 				       isymbuf, sections))
 	goto error_return;
 
-      if (sections != NULL)
-	free (sections);
-      if (isymbuf != NULL
-	  && symtab_hdr->contents != (unsigned char *) isymbuf)
+      free (sections);
+      if (symtab_hdr->contents != (unsigned char *) isymbuf)
 	free (isymbuf);
       if (elf_section_data (input_section)->relocs != internal_relocs)
 	free (internal_relocs);
@@ -1694,14 +1696,13 @@ elf32_h8_get_relocated_section_contents
   return data;
 
  error_return:
-  if (sections != NULL)
-    free (sections);
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  free (sections);
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (input_section)->relocs != internal_relocs)
+  if (elf_section_data (input_section)->relocs != internal_relocs)
     free (internal_relocs);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-hppa.c ./bfd/elf32-hppa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-hppa.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-hppa.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for HP PA-RISC ELF files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Original code by
 	Center for Software Science
@@ -231,10 +231,6 @@ struct elf32_hppa_link_hash_entry
      symbol.  */
   struct elf32_hppa_stub_hash_entry *hsh_cache;
 
-  /* Used to count relocations for delayed sizing of relocation
-     sections.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   ENUM_BITFIELD (_tls_type) tls_type : 8;
 
   /* Set if this symbol is used by a plabel reloc.  */
@@ -290,9 +286,6 @@ struct elf32_hppa_link_hash_table
   /* Set if we need a .plt stub to support lazy dynamic linking.  */
   unsigned int need_plt_stub:1;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* Data for LDM relocations.  */
   union
   {
@@ -303,8 +296,9 @@ struct elf32_hppa_link_hash_table
 
 /* Various hash macros and functions.  */
 #define hppa_link_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == HPPA32_ELF_DATA ? ((struct elf32_hppa_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == HPPA32_ELF_DATA)	\
+   ? (struct elf32_hppa_link_hash_table *) (p)->hash : NULL)
 
 #define hppa_elf_hash_entry(ent) \
   ((struct elf32_hppa_link_hash_entry *)(ent))
@@ -390,7 +384,6 @@ hppa_link_hash_newfunc (struct bfd_hash_
       /* Initialize the local fields.  */
       hh = hppa_elf_hash_entry (entry);
       hh->hsh_cache = NULL;
-      hh->dyn_relocs = NULL;
       hh->plabel = 0;
       hh->tls_type = GOT_UNKNOWN;
     }
@@ -418,7 +411,7 @@ static struct bfd_link_hash_table *
 elf32_hppa_link_hash_table_create (bfd *abfd)
 {
   struct elf32_hppa_link_hash_table *htab;
-  bfd_size_type amt = sizeof (*htab);
+  size_t amt = sizeof (*htab);
 
   htab = bfd_zmalloc (amt);
   if (htab == NULL)
@@ -440,6 +433,7 @@ elf32_hppa_link_hash_table_create (bfd *
       return NULL;
     }
   htab->etab.root.hash_table_free = elf32_hppa_link_hash_table_free;
+  htab->etab.dt_pltgot_required = true;
 
   htab->text_segment_base = (bfd_vma) -1;
   htab->data_segment_base = (bfd_vma) -1;
@@ -530,7 +524,7 @@ hppa_get_stub_entry (const asection *inp
 	return NULL;
 
       hsh_entry = hppa_stub_hash_lookup (&htab->bstab,
-					  stub_name, FALSE, FALSE);
+					  stub_name, false, false);
       if (hh != NULL)
 	hh->hsh_cache = hsh_entry;
 
@@ -581,7 +575,7 @@ hppa_add_stub (const char *stub_name,
 
   /* Enter this entry into the linker stub hash table.  */
   hsh = hppa_stub_hash_lookup (&htab->bstab, stub_name,
-				      TRUE, FALSE);
+				      true, false);
   if (hsh == NULL)
     {
       /* xgettext:c-format */
@@ -697,7 +691,7 @@ hppa_type_of_stub (asection *input_sec,
 #define LDW_R1_DLT	LDW_R1_DP
 #endif
 
-static bfd_boolean
+static bool
 hppa_build_one_stub (struct bfd_hash_entry *bh, void *in_arg)
 {
   struct elf32_hppa_stub_hash_entry *hsh;
@@ -718,7 +712,7 @@ hppa_build_one_stub (struct bfd_hash_ent
 
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   stub_sec = hsh->stub_sec;
 
@@ -731,6 +725,15 @@ hppa_build_one_stub (struct bfd_hash_ent
   switch (hsh->stub_type)
     {
     case hppa_stub_long_branch:
+      /* Fail if the target section could not be assigned to an output
+	 section.  The user should fix his linker script.  */
+      if (hsh->target_section->output_section == NULL
+	  && info->non_contiguous_regions)
+	info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output "
+				  "section. Retry without "
+				  "--enable-non-contiguous-regions.\n"),
+				hsh->target_section);
+
       /* Create the long branch.  A long branch is formed with "ldil"
 	 loading the upper bits of the target address into a register,
 	 then branching with "be" which adds in the lower bits.
@@ -751,6 +754,15 @@ hppa_build_one_stub (struct bfd_hash_ent
       break;
 
     case hppa_stub_long_branch_shared:
+      /* Fail if the target section could not be assigned to an output
+	 section.  The user should fix his linker script.  */
+      if (hsh->target_section->output_section == NULL
+	  && info->non_contiguous_regions)
+	info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output "
+				  "section. Retry without "
+				  "--enable-non-contiguous-regions.\n"),
+				hsh->target_section);
+
       /* Branches are relative.  This is where we are going to.  */
       sym_value = (hsh->target_value
 		   + hsh->target_section->output_offset
@@ -823,6 +835,15 @@ hppa_build_one_stub (struct bfd_hash_ent
       break;
 
     case hppa_stub_export:
+      /* Fail if the target section could not be assigned to an output
+	 section.  The user should fix his linker script.  */
+      if (hsh->target_section->output_section == NULL
+	  && info->non_contiguous_regions)
+	info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output "
+				  "section. Retry without "
+				  "--enable-non-contiguous-regions.\n"),
+				hsh->target_section);
+
       /* Branches are relative.  This is where we are going to.  */
       sym_value = (hsh->target_value
 		   + hsh->target_section->output_offset
@@ -846,7 +867,7 @@ hppa_build_one_stub (struct bfd_hash_ent
 	     (uint64_t) hsh->stub_offset,
 	     hsh->bh_root.string);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       val = hppa_field_adjust (sym_value, (bfd_signed_vma) -8, e_fsel) >> 2;
@@ -871,11 +892,11 @@ hppa_build_one_stub (struct bfd_hash_ent
 
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
   stub_sec->size += size;
-  return TRUE;
+  return true;
 }
 
 #undef LDIL_R1
@@ -902,7 +923,7 @@ hppa_build_one_stub (struct bfd_hash_ent
 /* As above, but don't actually build the stub.  Just bump offset so
    we know stub section sizes.  */
 
-static bfd_boolean
+static bool
 hppa_size_one_stub (struct bfd_hash_entry *bh, void *in_arg)
 {
   struct elf32_hppa_stub_hash_entry *hsh;
@@ -928,13 +949,13 @@ hppa_size_one_stub (struct bfd_hash_entr
     }
 
   hsh->stub_sec->size += size;
-  return TRUE;
+  return true;
 }
 
 /* Return nonzero if ABFD represents an HPPA ELF32 file.
    Additionally we set the default architecture and machine.  */
 
-static bfd_boolean
+static bool
 elf32_hppa_object_p (bfd *abfd)
 {
   Elf_Internal_Ehdr * i_ehdrp;
@@ -947,7 +968,7 @@ elf32_hppa_object_p (bfd *abfd)
 	 but the kernel produces corefiles with OSABI=SysV.  */
       if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU &&
 	  i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_NONE) /* aka SYSV */
-	return FALSE;
+	return false;
     }
   else if (strcmp (bfd_get_target (abfd), "elf32-hppa-netbsd") == 0)
     {
@@ -955,12 +976,12 @@ elf32_hppa_object_p (bfd *abfd)
 	 but the kernel produces corefiles with OSABI=SysV.  */
       if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_NETBSD &&
 	  i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_NONE) /* aka SYSV */
-	return FALSE;
+	return false;
     }
   else
     {
       if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_HPUX)
-	return FALSE;
+	return false;
     }
 
   flags = i_ehdrp->e_flags;
@@ -975,13 +996,13 @@ elf32_hppa_object_p (bfd *abfd)
     case EFA_PARISC_2_0 | EF_PARISC_WIDE:
       return bfd_default_set_arch_mach (abfd, bfd_arch_hppa, 25);
     }
-  return TRUE;
+  return true;
 }
 
 /* Create the .plt and .got sections, and set up our hash table
    short-cuts to various dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf32_hppa_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf32_hppa_link_hash_table *htab;
@@ -990,13 +1011,13 @@ elf32_hppa_create_dynamic_sections (bfd
   /* Don't try to create the .plt and .got twice.  */
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
   if (htab->etab.splt != NULL)
-    return TRUE;
+    return true;
 
   /* Call the generic code to do most of the work.  */
   if (! _bfd_elf_create_dynamic_sections (abfd, info))
-    return FALSE;
+    return false;
 
   /* hppa-linux needs _GLOBAL_OFFSET_TABLE_ to be visible from the main
      application, because __canonicalize_funcptr_for_compare needs it.  */
@@ -1018,42 +1039,6 @@ elf32_hppa_copy_indirect_symbol (struct
   hh_dir = hppa_elf_hash_entry (eh_dir);
   hh_ind = hppa_elf_hash_entry (eh_ind);
 
-  if (hh_ind->dyn_relocs != NULL
-      && eh_ind->root.type == bfd_link_hash_indirect)
-    {
-      if (hh_dir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **hdh_pp;
-	  struct elf_dyn_relocs *hdh_p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (hdh_pp = &hh_ind->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *hdh_q;
-
-	      for (hdh_q = hh_dir->dyn_relocs;
-		   hdh_q != NULL;
-		   hdh_q = hdh_q->next)
-		if (hdh_q->sec == hdh_p->sec)
-		  {
-#if RELATIVE_DYNRELOCS
-		    hdh_q->pc_count += hdh_p->pc_count;
-#endif
-		    hdh_q->count += hdh_p->count;
-		    *hdh_pp = hdh_p->next;
-		    break;
-		  }
-	      if (hdh_q == NULL)
-		hdh_pp = &hdh_p->next;
-	    }
-	  *hdh_pp = hh_dir->dyn_relocs;
-	}
-
-      hh_dir->dyn_relocs = hh_ind->dyn_relocs;
-      hh_ind->dyn_relocs = NULL;
-    }
-
   if (eh_ind->root.type == bfd_link_hash_indirect)
     {
       hh_dir->plabel |= hh_ind->plabel;
@@ -1109,7 +1094,7 @@ hppa32_elf_local_refcounts (bfd *abfd)
    table, and dynamic reloc sections.  At this point we haven't
    necessarily read all the input files.  */
 
-static bfd_boolean
+static bool
 elf32_hppa_check_relocs (bfd *abfd,
 			 struct bfd_link_info *info,
 			 asection *sec,
@@ -1123,11 +1108,11 @@ elf32_hppa_check_relocs (bfd *abfd,
   asection *sreloc;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   eh_syms = elf_sym_hashes (abfd);
   sreloc = NULL;
@@ -1257,7 +1242,7 @@ elf32_hppa_check_relocs (bfd *abfd,
 		 abfd,
 		 elf_hppa_howto_table[r_type].name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  /* Fall through.  */
 
@@ -1275,14 +1260,14 @@ elf32_hppa_check_relocs (bfd *abfd,
 	     Reconstruct it for later use during GC.  */
 	case R_PARISC_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, &hh->eh, rela->r_offset))
-	    return FALSE;
+	    return false;
 	  continue;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_PARISC_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rela->r_addend))
-	    return FALSE;
+	    return false;
 	  continue;
 
 	case R_PARISC_TLS_GD21L:
@@ -1331,7 +1316,7 @@ elf32_hppa_check_relocs (bfd *abfd,
 	  if (htab->etab.sgot == NULL)
 	    {
 	      if (!elf32_hppa_create_dynamic_sections (htab->etab.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 
 	  if (hh != NULL)
@@ -1349,7 +1334,7 @@ elf32_hppa_check_relocs (bfd *abfd,
 	      /* This is a global offset table entry for a local symbol.  */
 	      local_got_refcounts = hppa32_elf_local_refcounts (abfd);
 	      if (local_got_refcounts == NULL)
-		return FALSE;
+		return false;
 	      if (tls_type == GOT_TLS_LDM)
 		htab->tls_ldm_got.refcount += 1;
 	      else
@@ -1389,7 +1374,7 @@ elf32_hppa_check_relocs (bfd *abfd,
 
 		  local_got_refcounts = hppa32_elf_local_refcounts (abfd);
 		  if (local_got_refcounts == NULL)
-		    return FALSE;
+		    return false;
 		  local_plt_refcounts = (local_got_refcounts
 					 + symtab_hdr->sh_info);
 		  local_plt_refcounts[r_symndx] += 1;
@@ -1454,12 +1439,12 @@ elf32_hppa_check_relocs (bfd *abfd,
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->etab.dynobj, 2, abfd, /*rela?*/ TRUE);
+		    (sec, htab->etab.dynobj, 2, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
 		    {
 		      bfd_set_error (bfd_error_bad_value);
-		      return FALSE;
+		      return false;
 		    }
 		}
 
@@ -1467,7 +1452,7 @@ elf32_hppa_check_relocs (bfd *abfd,
 		 relocations we need for this symbol.  */
 	      if (hh != NULL)
 		{
-		  hdh_head = &hh->dyn_relocs;
+		  hdh_head = &hh->eh.dyn_relocs;
 		}
 	      else
 		{
@@ -1478,10 +1463,10 @@ elf32_hppa_check_relocs (bfd *abfd,
 		  void *vpp;
 		  Elf_Internal_Sym *isym;
 
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  isym = bfd_sym_from_r_symndx (&htab->etab.sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  sr = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (sr == NULL)
@@ -1496,7 +1481,7 @@ elf32_hppa_check_relocs (bfd *abfd,
 		{
 		  hdh_p = bfd_alloc (htab->etab.dynobj, sizeof *hdh_p);
 		  if (hdh_p == NULL)
-		    return FALSE;
+		    return false;
 		  hdh_p->next = *hdh_head;
 		  *hdh_head = hdh_p;
 		  hdh_p->sec = sec;
@@ -1515,7 +1500,7 @@ elf32_hppa_check_relocs (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against garbage collection
@@ -1541,7 +1526,7 @@ elf32_hppa_gc_mark_hook (asection *sec,
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf32_hppa_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -1550,7 +1535,7 @@ elf32_hppa_grok_prstatus (bfd *abfd, Elf
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 396:		/* Linux/hppa */
 	/* pr_cursig */
@@ -1571,13 +1556,13 @@ elf32_hppa_grok_prstatus (bfd *abfd, Elf
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf32_hppa_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 124:		/* Linux/hppa elf_prpsinfo.  */
 	elf_tdata (abfd)->core->program
@@ -1597,7 +1582,7 @@ elf32_hppa_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 /* Our own version of hide_symbol, so that we can keep plt entries for
@@ -1606,7 +1591,7 @@ elf32_hppa_grok_psinfo (bfd *abfd, Elf_I
 static void
 elf32_hppa_hide_symbol (struct bfd_link_info *info,
 			struct elf_link_hash_entry *eh,
-			bfd_boolean force_local)
+			bool force_local)
 {
   if (force_local)
     {
@@ -1632,41 +1617,22 @@ elf32_hppa_hide_symbol (struct bfd_link_
     }
 }
 
-/* Find any dynamic relocs that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *eh)
-{
-  struct elf32_hppa_link_hash_entry *hh;
-  struct elf_dyn_relocs *hdh_p;
-
-  hh = hppa_elf_hash_entry (eh);
-  for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next)
-    {
-      asection *sec = hdh_p->sec->output_section;
-
-      if (sec != NULL && (sec->flags & SEC_READONLY) != 0)
-	return hdh_p->sec;
-    }
-  return NULL;
-}
-
 /* Return true if we have dynamic relocs against H or any of its weak
    aliases, that apply to read-only sections.  Cannot be used after
    size_dynamic_sections.  */
 
-static bfd_boolean
+static bool
 alias_readonly_dynrelocs (struct elf_link_hash_entry *eh)
 {
   struct elf32_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
   do
     {
-      if (readonly_dynrelocs (&hh->eh))
-	return TRUE;
+      if (_bfd_elf_readonly_dynrelocs (&hh->eh))
+	return true;
       hh = hppa_elf_hash_entry (hh->eh.u.alias);
     } while (hh != NULL && &hh->eh != eh);
 
-  return FALSE;
+  return false;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -1675,7 +1641,7 @@ alias_readonly_dynrelocs (struct elf_lin
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
 				  struct elf_link_hash_entry *eh)
 {
@@ -1687,12 +1653,12 @@ elf32_hppa_adjust_dynamic_symbol (struct
   if (eh->type == STT_FUNC
       || eh->needs_plt)
     {
-      bfd_boolean local = (SYMBOL_CALLS_LOCAL (info, eh)
-			   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh));
+      bool local = (SYMBOL_CALLS_LOCAL (info, eh)
+		    || UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh));
       /* Discard dyn_relocs when non-pic if we've decided that a
 	 function symbol is local.  */
       if (!bfd_link_pic (info) && local)
-	hppa_elf_hash_entry (eh)->dyn_relocs = NULL;
+	eh->dyn_relocs = NULL;
 
       /* If the symbol is used by a plabel, we must allocate a PLT slot.
 	 The refcounts are not reliable when it has been hidden since
@@ -1722,14 +1688,14 @@ elf32_hppa_adjust_dynamic_symbol (struct
 	 be discarded.  */
 
       /* Function symbols can't have copy relocs.  */
-      return TRUE;
+      return true;
     }
   else
     eh->plt.offset = (bfd_vma) -1;
 
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* If this is a weak symbol, and there is a real definition, the
      processor independent code will have arranged for us to see the
@@ -1742,8 +1708,8 @@ elf32_hppa_adjust_dynamic_symbol (struct
       eh->root.u.def.value = def->root.u.def.value;
       if (def->root.u.def.section == htab->etab.sdynbss
 	  || def->root.u.def.section == htab->etab.sdynrelro)
-	hppa_elf_hash_entry (eh)->dyn_relocs = NULL;
-      return TRUE;
+	eh->dyn_relocs = NULL;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -1754,22 +1720,22 @@ elf32_hppa_adjust_dynamic_symbol (struct
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!eh->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
-    return TRUE;
+    return true;
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
   if (ELIMINATE_COPY_RELOCS
       && !alias_readonly_dynrelocs (eh))
-    return TRUE;
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -1800,13 +1766,13 @@ elf32_hppa_adjust_dynamic_symbol (struct
     }
 
   /* We no longer want dyn_relocs.  */
-  hppa_elf_hash_entry (eh)->dyn_relocs = NULL;
+  eh->dyn_relocs = NULL;
   return _bfd_elf_adjust_dynamic_copy (info, eh, sec);
 }
 
 /* If EH is undefined, make it dynamic if that makes sense.  */
 
-static bfd_boolean
+static bool
 ensure_undef_dynamic (struct bfd_link_info *info,
 		      struct elf_link_hash_entry *eh)
 {
@@ -1821,13 +1787,13 @@ ensure_undef_dynamic (struct bfd_link_in
       && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh)
       && ELF_ST_VISIBILITY (eh->other) == STV_DEFAULT)
     return bfd_elf_link_record_dynamic_symbol (info, eh);
-  return TRUE;
+  return true;
 }
 
 /* Allocate space in the .plt for entries that won't have relocations.
    ie. plabel entries.  */
 
-static bfd_boolean
+static bool
 allocate_plt_static (struct elf_link_hash_entry *eh, void *inf)
 {
   struct bfd_link_info *info;
@@ -1836,19 +1802,19 @@ allocate_plt_static (struct elf_link_has
   asection *sec;
 
   if (eh->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   hh = hppa_elf_hash_entry (eh);
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (htab->etab.dynamic_sections_created
       && eh->plt.refcount > 0)
     {
       if (!ensure_undef_dynamic (info, eh))
-	return FALSE;
+	return false;
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), eh))
 	{
@@ -1882,7 +1848,7 @@ allocate_plt_static (struct elf_link_has
       eh->needs_plt = 0;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Calculate size of GOT entries for symbol given its TLS_TYPE.  */
@@ -1908,7 +1874,7 @@ got_entries_needed (int tls_type)
 
 static inline unsigned int
 got_relocs_needed (int tls_type, unsigned int need,
-		   bfd_boolean dtprel_known, bfd_boolean tprel_known)
+		   bool dtprel_known, bool tprel_known)
 {
   /* All the entries we allocated need relocs.
      Except for GD and IE with local symbols.  */
@@ -1922,7 +1888,7 @@ got_relocs_needed (int tls_type, unsigne
 /* Allocate space in .plt, .got and associated reloc sections for
    global syms.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
 {
   struct bfd_link_info *info;
@@ -1932,12 +1898,12 @@ allocate_dynrelocs (struct elf_link_hash
   struct elf_dyn_relocs *hdh_p;
 
   if (eh->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = inf;
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   hh = hppa_elf_hash_entry (eh);
 
@@ -1961,7 +1927,7 @@ allocate_dynrelocs (struct elf_link_hash
       unsigned int need;
 
       if (!ensure_undef_dynamic (info, eh))
-	return FALSE;
+	return false;
 
       sec = htab->etab.sgot;
       eh->got.offset = sec->size;
@@ -1974,7 +1940,7 @@ allocate_dynrelocs (struct elf_link_hash
 		  && !SYMBOL_REFERENCES_LOCAL (info, eh)))
 	  && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh))
 	{
-	  bfd_boolean local = SYMBOL_REFERENCES_LOCAL (info, eh);
+	  bool local = SYMBOL_REFERENCES_LOCAL (info, eh);
 	  htab->etab.srelgot->size
 	    += got_relocs_needed (hh->tls_type, need, local,
 				  local && bfd_link_executable (info));
@@ -1985,16 +1951,16 @@ allocate_dynrelocs (struct elf_link_hash
 
   /* If no dynamic sections we can't have dynamic relocs.  */
   if (!htab->etab.dynamic_sections_created)
-    hh->dyn_relocs = NULL;
+    eh->dyn_relocs = NULL;
 
   /* Discard relocs on undefined syms with non-default visibility.  */
   else if ((eh->root.type == bfd_link_hash_undefined
 	    && ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT)
 	   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh))
-    hh->dyn_relocs = NULL;
+    eh->dyn_relocs = NULL;
 
-  if (hh->dyn_relocs == NULL)
-    return TRUE;
+  if (eh->dyn_relocs == NULL)
+    return true;
 
   /* If this is a -Bsymbolic shared link, then we need to discard all
      space allocated for dynamic pc-relative relocs against symbols
@@ -2008,7 +1974,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **hdh_pp;
 
-	  for (hdh_pp = &hh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
+	  for (hdh_pp = &eh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
 	    {
 	      hdh_p->count -= hdh_p->pc_count;
 	      hdh_p->pc_count = 0;
@@ -2020,10 +1986,10 @@ allocate_dynrelocs (struct elf_link_hash
 	}
 #endif
 
-      if (hh->dyn_relocs != NULL)
+      if (eh->dyn_relocs != NULL)
 	{
 	  if (!ensure_undef_dynamic (info, eh))
-	    return FALSE;
+	    return false;
 	}
     }
   else if (ELIMINATE_COPY_RELOCS)
@@ -2037,23 +2003,23 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !ELF_COMMON_DEF_P (eh))
 	{
 	  if (!ensure_undef_dynamic (info, eh))
-	    return FALSE;
+	    return false;
 
 	  if (eh->dynindx == -1)
-	    hh->dyn_relocs = NULL;
+	    eh->dyn_relocs = NULL;
 	}
       else
-	hh->dyn_relocs = NULL;
+	eh->dyn_relocs = NULL;
     }
 
   /* Finally, allocate space.  */
-  for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next)
+  for (hdh_p = eh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next)
     {
       asection *sreloc = elf_section_data (hdh_p->sec)->sreloc;
       sreloc->size += hdh_p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function is called via elf_link_hash_traverse to force
@@ -2063,48 +2029,19 @@ allocate_dynrelocs (struct elf_link_hash
    for all dynamic symbols.  Arguably, this is a bug in
    elf_adjust_dynamic_symbol.  */
 
-static bfd_boolean
+static bool
 clobber_millicode_symbols (struct elf_link_hash_entry *eh,
-			   struct bfd_link_info *info)
+			   void *info)
 {
   if (eh->type == STT_PARISC_MILLI
       && !eh->forced_local)
-    {
-      elf32_hppa_hide_symbol (info, eh, TRUE);
-    }
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *eh, void *inf)
-{
-  asection *sec;
-
-  if (eh->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (eh);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) inf;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, eh->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+    elf32_hppa_hide_symbol ((struct bfd_link_info *) info, eh, true);
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				  struct bfd_link_info *info)
 {
@@ -2112,11 +2049,11 @@ elf32_hppa_size_dynamic_sections (bfd *o
   bfd *dynobj;
   bfd *ibfd;
   asection *sec;
-  bfd_boolean relocs;
+  bool relocs;
 
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->etab.dynobj;
   if (dynobj == NULL)
@@ -2206,7 +2143,7 @@ elf32_hppa_size_dynamic_sections (bfd *o
 		  || (bfd_link_pic (info)
 		      && (*local_tls_type & GOT_NORMAL) != 0))
 		htab->etab.srelgot->size
-		  += got_relocs_needed (*local_tls_type, need, TRUE,
+		  += got_relocs_needed (*local_tls_type, need, true,
 					bfd_link_executable (info));
 	    }
 	  else
@@ -2265,7 +2202,7 @@ elf32_hppa_size_dynamic_sections (bfd *o
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (sec = dynobj->sections; sec != NULL; sec = sec->next)
     {
       if ((sec->flags & SEC_LINKER_CREATED) == 0)
@@ -2293,14 +2230,14 @@ elf32_hppa_size_dynamic_sections (bfd *o
 	       || sec == htab->etab.sdynbss
 	       || sec == htab->etab.sdynrelro)
 	;
-      else if (CONST_STRNEQ (bfd_section_name (sec), ".rela"))
+      else if (startswith (bfd_section_name (sec), ".rela"))
 	{
 	  if (sec->size != 0)
 	    {
 	      /* Remember whether there are any reloc sections other
 		 than .rela.plt.  */
 	      if (sec != htab->etab.srelplt)
-		relocs = TRUE;
+		relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -2335,62 +2272,10 @@ elf32_hppa_size_dynamic_sections (bfd *o
 	 we may not fill in all the reloc sections.  */
       sec->contents = bfd_zalloc (dynobj, sec->size);
       if (sec->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (htab->etab.dynamic_sections_created)
-    {
-      /* Like IA-64 and HPPA64, always create a DT_PLTGOT.  It
-	 actually has nothing to do with the PLT, it is how we
-	 communicate the LTP value of a load module to the dynamic
-	 linker.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (!add_dynamic_entry (DT_PLTGOT, 0))
-	return FALSE;
-
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf32_hppa_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->etab.srelplt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->etab, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* External entry points for sizing and building linker stubs.  */
@@ -2407,7 +2292,7 @@ elf32_hppa_setup_section_lists (bfd *out
   unsigned int top_id, top_index;
   asection *section;
   asection **input_list, **list;
-  bfd_size_type amt;
+  size_t amt;
   struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info);
 
   if (htab == NULL)
@@ -2508,7 +2393,7 @@ elf32_hppa_next_input_section (struct bf
 static void
 group_sections (struct elf32_hppa_link_hash_table *htab,
 		bfd_size_type stub_group_size,
-		bfd_boolean stubs_always_before_branch)
+		bool stubs_always_before_branch)
 {
   asection **list = htab->input_list + htab->top_index;
   do
@@ -2521,7 +2406,7 @@ group_sections (struct elf32_hppa_link_h
 	  asection *curr;
 	  asection *prev;
 	  bfd_size_type total;
-	  bfd_boolean big_sec;
+	  bool big_sec;
 
 	  curr = tail;
 	  total = tail->size;
@@ -2596,7 +2481,7 @@ get_local_syms (bfd *output_bfd, bfd *in
   /* We want to read in symbol extension records only once.  To do this
      we need to read in the local symbols in parallel and save them for
      later use; so hold pointers to the local symbols in an array.  */
-  bfd_size_type amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count;
+  size_t amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count;
   all_local_syms = bfd_zmalloc (amt);
   htab->all_local_syms = all_local_syms;
   if (all_local_syms == NULL)
@@ -2676,7 +2561,7 @@ get_local_syms (bfd *output_bfd, bfd *in
 		  stub_name = hh_name (hh);
 		  hsh = hppa_stub_hash_lookup (&htab->bstab,
 						      stub_name,
-						      FALSE, FALSE);
+						      false, false);
 		  if (hsh == NULL)
 		    {
 		      hsh = hppa_add_stub (stub_name, sec, htab);
@@ -2709,20 +2594,20 @@ get_local_syms (bfd *output_bfd, bfd *in
    PC-relative calls to a target that is unreachable with a "bl"
    instruction.  */
 
-bfd_boolean
+bool
 elf32_hppa_size_stubs
   (bfd *output_bfd, bfd *stub_bfd, struct bfd_link_info *info,
-   bfd_boolean multi_subspace, bfd_signed_vma group_size,
+   bool multi_subspace, bfd_signed_vma group_size,
    asection * (*add_stub_section) (const char *, asection *),
    void (*layout_sections_again) (void))
 {
   bfd_size_type stub_group_size;
-  bfd_boolean stubs_always_before_branch;
-  bfd_boolean stub_changed;
+  bool stubs_always_before_branch;
+  bool stub_changed;
   struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info);
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Stash our params away.  */
   htab->stub_bfd = stub_bfd;
@@ -2762,14 +2647,14 @@ elf32_hppa_size_stubs
     default:
       if (htab->all_local_syms)
 	goto error_ret_free_local;
-      return FALSE;
+      return false;
 
     case 0:
-      stub_changed = FALSE;
+      stub_changed = false;
       break;
 
     case 1:
-      stub_changed = TRUE;
+      stub_changed = true;
       break;
     }
 
@@ -2940,7 +2825,7 @@ elf32_hppa_size_stubs
 
 		  hsh = hppa_stub_hash_lookup (&htab->bstab,
 						      stub_name,
-						      FALSE, FALSE);
+						      false, false);
 		  if (hsh != NULL)
 		    {
 		      /* The proper stub has already been created.  */
@@ -2966,7 +2851,7 @@ elf32_hppa_size_stubs
 			hsh->stub_type = hppa_stub_long_branch_shared;
 		    }
 		  hsh->hh = hh;
-		  stub_changed = TRUE;
+		  stub_changed = true;
 		}
 
 	      /* We're done with the internal relocs, free them.  */
@@ -2990,28 +2875,28 @@ elf32_hppa_size_stubs
 
       /* Ask the linker to do its stuff.  */
       (*htab->layout_sections_again) ();
-      stub_changed = FALSE;
+      stub_changed = false;
     }
 
   free (htab->all_local_syms);
-  return TRUE;
+  return true;
 
  error_ret_free_local:
   free (htab->all_local_syms);
-  return FALSE;
+  return false;
 }
 
 /* For a final link, this function is called after we have sized the
    stubs to provide a value for __gp.  */
 
-bfd_boolean
+bool
 elf32_hppa_set_gp (bfd *abfd, struct bfd_link_info *info)
 {
   struct bfd_link_hash_entry *h;
   asection *sec = NULL;
   bfd_vma gp_val = 0;
 
-  h = bfd_link_hash_lookup (info->hash, "$global$", FALSE, FALSE, FALSE);
+  h = bfd_link_hash_lookup (info->hash, "$global$", false, false, false);
 
   if (h != NULL
       && (h->type == bfd_link_hash_defined
@@ -3081,7 +2966,7 @@ elf32_hppa_set_gp (bfd *abfd, struct bfd
 
       elf_gp (abfd) = gp_val;
     }
-  return TRUE;
+  return true;
 }
 
 /* Build all the stubs associated with the current output file.  The
@@ -3090,7 +2975,7 @@ elf32_hppa_set_gp (bfd *abfd, struct bfd
    functions here.  This function is called via hppaelf_finish in the
    linker.  */
 
-bfd_boolean
+bool
 elf32_hppa_build_stubs (struct bfd_link_info *info)
 {
   asection *stub_sec;
@@ -3099,7 +2984,7 @@ elf32_hppa_build_stubs (struct bfd_link_
 
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   for (stub_sec = htab->stub_bfd->sections;
        stub_sec != NULL;
@@ -3110,7 +2995,7 @@ elf32_hppa_build_stubs (struct bfd_link_
 	/* Allocate memory to hold the linker stubs.  */
 	stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size);
 	if (stub_sec->contents == NULL)
-	  return FALSE;
+	  return false;
 	stub_sec->size = 0;
       }
 
@@ -3118,7 +3003,7 @@ elf32_hppa_build_stubs (struct bfd_link_
   table = &htab->bstab;
   bfd_hash_traverse (table, hppa_build_one_stub, info);
 
-  return TRUE;
+  return true;
 }
 
 /* Return the base vma address which should be subtracted from the real
@@ -3152,26 +3037,26 @@ tpoff (struct bfd_link_info *info, bfd_v
 
 /* Perform a final link.  */
 
-static bfd_boolean
+static bool
 elf32_hppa_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   struct stat buf;
 
   /* Invoke the regular ELF linker to do all the work.  */
   if (!bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
   /* If we're producing a final executable, sort the contents of the
      unwind section.  */
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* Do not attempt to sort non-regular files.  This is here
      especially for configure scripts and kernel builds which run
      tests with "ld [...] -o /dev/null".  */
-  if (stat (abfd->filename, &buf) != 0
+  if (stat (bfd_get_filename (abfd), &buf) != 0
       || !S_ISREG(buf.st_mode))
-    return TRUE;
+    return true;
 
   return elf_hppa_sort_unwind (abfd);
 }
@@ -3221,7 +3106,7 @@ final_link_relocate (asection *input_sec
 		     struct elf32_hppa_link_hash_entry *hh,
 		     struct bfd_link_info *info)
 {
-  int insn;
+  unsigned int insn;
   unsigned int r_type = ELF32_R_TYPE (rela->r_info);
   unsigned int orig_r_type = r_type;
   reloc_howto_type *howto = elf_hppa_howto_table + r_type;
@@ -3340,7 +3225,7 @@ final_link_relocate (asection *input_sec
 	      /* GCC sometimes uses a register other than r19 for the
 		 operation, so we must convert any addil instruction
 		 that uses this relocation.  */
-	      if ((insn & 0xfc000000) == ((int) OP_ADDIL << 26))
+	      if ((insn & 0xfc000000) == OP_ADDIL << 26)
 		insn = ADDIL_DP;
 	      else
 		/* We must have a ldil instruction.  It's too hard to find
@@ -3374,8 +3259,8 @@ final_link_relocate (asection *input_sec
 	 instance: "extern int foo" with foo defined as "const int foo".  */
       if (sym_sec == NULL || (sym_sec->flags & SEC_CODE) != 0)
 	{
-	  if ((insn & ((0x3f << 26) | (0x1f << 21)))
-	      == (((int) OP_ADDIL << 26) | (27 << 21)))
+	  if ((insn & ((0x3fu << 26) | (0x1f << 21)))
+	      == ((OP_ADDIL << 26) | (27 << 21)))
 	    {
 	      insn &= ~ (0x1f << 21);
 	    }
@@ -3556,7 +3441,7 @@ final_link_relocate (asection *input_sec
 
 /* Relocate an HPPA ELF section.  */
 
-static bfd_boolean
+static int
 elf32_hppa_relocate_section (bfd *output_bfd,
 			     struct bfd_link_info *info,
 			     bfd *input_bfd,
@@ -3576,7 +3461,7 @@ elf32_hppa_relocate_section (bfd *output
 
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   local_got_offsets = elf_local_got_offsets (input_bfd);
 
@@ -3593,14 +3478,14 @@ elf32_hppa_relocate_section (bfd *output
       bfd_vma relocation;
       bfd_reloc_status_type rstatus;
       const char *sym_name;
-      bfd_boolean plabel;
-      bfd_boolean warned_undef;
+      bool plabel;
+      bool warned_undef;
 
       r_type = ELF32_R_TYPE (rela->r_info);
       if (r_type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       if (r_type == (unsigned int) R_PARISC_GNU_VTENTRY
 	  || r_type == (unsigned int) R_PARISC_GNU_VTINHERIT)
@@ -3610,7 +3495,7 @@ elf32_hppa_relocate_section (bfd *output
       hh = NULL;
       sym = NULL;
       sym_sec = NULL;
-      warned_undef = FALSE;
+      warned_undef = false;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* This is a local symbol, h defaults to NULL.  */
@@ -3621,7 +3506,7 @@ elf32_hppa_relocate_section (bfd *output
       else
 	{
 	  struct elf_link_hash_entry *eh;
-	  bfd_boolean unresolved_reloc, ignored;
+	  bool unresolved_reloc, ignored;
 	  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rela,
@@ -3642,8 +3527,8 @@ elf32_hppa_relocate_section (bfd *output
 		{
 		  (*info->callbacks->undefined_symbol)
 		    (info, eh_name (eh), input_bfd,
-		     input_section, rela->r_offset, FALSE);
-		  warned_undef = TRUE;
+		     input_section, rela->r_offset, false);
+		  warned_undef = true;
 		}
 	    }
 	  hh = hppa_elf_hash_entry (eh);
@@ -3669,14 +3554,14 @@ elf32_hppa_relocate_section (bfd *output
 	case R_PARISC_DLTIND21L:
 	  {
 	    bfd_vma off;
-	    bfd_boolean do_got = FALSE;
-	    bfd_boolean reloc = bfd_link_pic (info);
+	    bool do_got = false;
+	    bool reloc = bfd_link_pic (info);
 
 	    /* Relocation is to the entry for this symbol in the
 	       global offset table.  */
 	    if (hh != NULL)
 	      {
-		bfd_boolean dyn;
+		bool dyn;
 
 		off = hh->eh.got.offset;
 		dyn = htab->etab.dynamic_sections_created;
@@ -3700,7 +3585,7 @@ elf32_hppa_relocate_section (bfd *output
 		    else
 		      {
 			hh->eh.got.offset |= 1;
-			do_got = TRUE;
+			do_got = true;
 		      }
 		  }
 	      }
@@ -3720,7 +3605,7 @@ elf32_hppa_relocate_section (bfd *output
 		else
 		  {
 		    local_got_offsets[r_symndx] |= 1;
-		    do_got = TRUE;
+		    do_got = true;
 		  }
 	      }
 
@@ -3772,7 +3657,7 @@ elf32_hppa_relocate_section (bfd *output
 	  if (htab->etab.dynamic_sections_created)
 	    {
 	      bfd_vma off;
-	      bfd_boolean do_plt = 0;
+	      bool do_plt = 0;
 	      /* If we have a global symbol with a PLT slot, then
 		 redirect this relocation to it.  */
 	      if (hh != NULL)
@@ -3882,14 +3767,14 @@ elf32_hppa_relocate_section (bfd *output
 
 	  if (bfd_link_pic (info)
 	      ? ((hh == NULL
-		  || hh->dyn_relocs != NULL)
+		  || hh->eh.dyn_relocs != NULL)
 		 && ((hh != NULL && pc_dynrelocs (hh))
 		     || IS_ABSOLUTE_RELOC (r_type)))
 	      : (hh != NULL
-		 && hh->dyn_relocs != NULL))
+		 && hh->eh.dyn_relocs != NULL))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip;
+	      bool skip;
 	      asection *sreloc;
 	      bfd_byte *loc;
 
@@ -4045,7 +3930,7 @@ elf32_hppa_relocate_section (bfd *output
 	      off &= ~1;
 	    else
 	      {
-		bfd_boolean need_relocs = FALSE;
+		bool need_relocs = false;
 		Elf_Internal_Rela outrel;
 		bfd_byte *loc = NULL;
 		int cur_off = off;
@@ -4059,7 +3944,7 @@ elf32_hppa_relocate_section (bfd *output
 			&& (hh == NULL
 			    || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &hh->eh))))
 		  {
-		    need_relocs = TRUE;
+		    need_relocs = true;
 		    loc = htab->etab.srelgot->contents;
 		    loc += (htab->etab.srelgot->reloc_count
 			    * sizeof (Elf32_External_Rela));
@@ -4149,16 +4034,16 @@ elf32_hppa_relocate_section (bfd *output
 		else
 		  {
 		    Elf_Internal_Sym *isym
-		      = bfd_sym_from_r_symndx (&htab->sym_cache,
+		      = bfd_sym_from_r_symndx (&htab->etab.sym_cache,
 					       input_bfd, r_symndx);
 		    if (isym == NULL)
-		      return FALSE;
+		      return false;
 		    sym_name
 		      = bfd_elf_string_from_elf_section (input_bfd,
 							 symtab_hdr->sh_link,
 							 isym->st_name);
 		    if (sym_name == NULL)
-		      return FALSE;
+		      return false;
 		    if (*sym_name == '\0')
 		      sym_name = bfd_section_name (sym_sec);
 		    _bfd_error_handler
@@ -4166,7 +4051,7 @@ elf32_hppa_relocate_section (bfd *output
 		       input_bfd, sym_name);
 		  }
 		bfd_set_error (bfd_error_bad_value);
-		return FALSE;
+		return false;
 	      }
 
 	    if ((tls_type & GOT_TLS_GD)
@@ -4208,7 +4093,7 @@ elf32_hppa_relocate_section (bfd *output
 						      symtab_hdr->sh_link,
 						      sym->st_name);
 	  if (sym_name == NULL)
-	    return FALSE;
+	    return false;
 	  if (*sym_name == '\0')
 	    sym_name = bfd_section_name (sym_sec);
 	}
@@ -4228,7 +4113,7 @@ elf32_hppa_relocate_section (bfd *output
 		 howto->name,
 		 sym_name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
       else
@@ -4237,13 +4122,13 @@ elf32_hppa_relocate_section (bfd *output
 	   (bfd_vma) 0, input_bfd, input_section, rela->r_offset);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf32_hppa_finish_dynamic_symbol (bfd *output_bfd,
 				  struct bfd_link_info *info,
 				  struct elf_link_hash_entry *eh,
@@ -4255,7 +4140,7 @@ elf32_hppa_finish_dynamic_symbol (bfd *o
 
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (eh->plt.offset != (bfd_vma) -1)
     {
@@ -4314,8 +4199,8 @@ elf32_hppa_finish_dynamic_symbol (bfd *o
       && (hppa_elf_hash_entry (eh)->tls_type & GOT_NORMAL) != 0
       && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh))
     {
-      bfd_boolean is_dyn = (eh->dynindx != -1
-			    && !SYMBOL_REFERENCES_LOCAL (info, eh));
+      bool is_dyn = (eh->dynindx != -1
+		     && !SYMBOL_REFERENCES_LOCAL (info, eh));
 
       if (is_dyn || bfd_link_pic (info))
 	{
@@ -4331,7 +4216,9 @@ elf32_hppa_finish_dynamic_symbol (bfd *o
 	     file, we just want to emit a RELATIVE reloc.  The entry
 	     in the global offset table will already have been
 	     initialized in the relocate_section function.  */
-	  if (!is_dyn)
+	  if (!is_dyn
+	      && (eh->root.type == bfd_link_hash_defined
+		  || eh->root.type == bfd_link_hash_defweak))
 	    {
 	      rela.r_info = ELF32_R_INFO (0, R_PARISC_DIR32);
 	      rela.r_addend = (eh->root.u.def.value
@@ -4386,7 +4273,7 @@ elf32_hppa_finish_dynamic_symbol (bfd *o
       sym->st_shndx = SHN_ABS;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Used to decide how to sort relocs in an optimal manner for the
@@ -4424,7 +4311,7 @@ elf32_hppa_reloc_type_class (const struc
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf32_hppa_finish_dynamic_sections (bfd *output_bfd,
 				    struct bfd_link_info *info)
 {
@@ -4435,7 +4322,7 @@ elf32_hppa_finish_dynamic_sections (bfd
 
   htab = hppa_link_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->etab.dynobj;
 
@@ -4443,7 +4330,7 @@ elf32_hppa_finish_dynamic_sections (bfd
   /* A broken linker script might have discarded the dynamic sections.
      Catch this here so that we do not seg-fault later on.  */
   if (sgot != NULL && bfd_is_abs_section (sgot->output_section))
-    return FALSE;
+    return false;
 
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
@@ -4526,12 +4413,12 @@ elf32_hppa_finish_dynamic_sections (bfd
 	    {
 	      _bfd_error_handler
 		(_(".got section not immediately after .plt section"));
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Called when writing out an object file to decide the type of a
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-hppa.h ./bfd/elf32-hppa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-hppa.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-hppa.h	2024-02-01 01:47:14.000000000 +0000
@@ -4,7 +4,7 @@
    in the Stratus FTX/Golf Object File Format (SED-1762) dated
    February 1994.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Written by:
 
@@ -49,14 +49,14 @@ int elf32_hppa_setup_section_lists
 void elf32_hppa_next_input_section
   (struct bfd_link_info *, asection *);
 
-bfd_boolean elf32_hppa_size_stubs
-  (bfd *, bfd *, struct bfd_link_info *, bfd_boolean, bfd_signed_vma,
+bool elf32_hppa_size_stubs
+  (bfd *, bfd *, struct bfd_link_info *, bool, bfd_signed_vma,
    asection * (*) (const char *, asection *), void (*) (void));
 
-bfd_boolean elf32_hppa_set_gp
+bool elf32_hppa_set_gp
   (bfd *, struct bfd_link_info *);
 
-bfd_boolean elf32_hppa_build_stubs
+bool elf32_hppa_build_stubs
   (struct bfd_link_info *);
 
 elf_hppa_reloc_type elf32_hppa_reloc_final_type
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-i386.c ./bfd/elf32-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-i386.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-i386.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Intel 80386/80486-specific support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -19,7 +19,6 @@
    MA 02110-1301, USA.  */
 
 #include "elfxx-x86.h"
-#include "elf-nacl.h"
 #include "elf-vxworks.h"
 #include "dwarf2.h"
 #include "opcode/i386.h"
@@ -27,43 +26,41 @@
 /* 386 uses REL relocations instead of RELA.  */
 #define USE_REL	1
 
-#include "elf/i386.h"
-
 static reloc_howto_type elf_howto_table[]=
 {
-  HOWTO(R_386_NONE, 0, 3, 0, FALSE, 0, complain_overflow_dont,
+  HOWTO(R_386_NONE, 0, 0, 0, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_NONE",
-	TRUE, 0x00000000, 0x00000000, FALSE),
-  HOWTO(R_386_32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0x00000000, 0x00000000, false),
+  HOWTO(R_386_32, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_32",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_PC32, 0, 2, 32, TRUE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_PC32, 0, 4, 32, true, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_PC32",
-	TRUE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO(R_386_GOT32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, true),
+  HOWTO(R_386_GOT32, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_GOT32",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_PLT32, 0, 2, 32, TRUE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_PLT32, 0, 4, 32, true, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_PLT32",
-	TRUE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO(R_386_COPY, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, true),
+  HOWTO(R_386_COPY, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_COPY",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_GLOB_DAT, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_GLOB_DAT, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_GLOB_DAT",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_JUMP_SLOT, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_JUMP_SLOT, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_JUMP_SLOT",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_RELATIVE, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_RELATIVE, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_RELATIVE",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_GOTOFF, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_GOTOFF, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_GOTOFF",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_GOTPC, 0, 2, 32, TRUE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_GOTPC, 0, 4, 32, true, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_GOTPC",
-	TRUE, 0xffffffff, 0xffffffff, TRUE),
+	true, 0xffffffff, 0xffffffff, true),
 
   /* We have a gap in the reloc numbers here.
      R_386_standard counts the number up to this point, and
@@ -73,76 +70,76 @@ static reloc_howto_type elf_howto_table[
 #define R_386_ext_offset (R_386_TLS_TPOFF - R_386_standard)
 
   /* These relocs are a GNU extension.  */
-  HOWTO(R_386_TLS_TPOFF, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+  HOWTO(R_386_TLS_TPOFF, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_TPOFF",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_IE, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_IE, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_IE",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_GOTIE, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_GOTIE, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_GOTIE",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_LE, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_LE, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_LE",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_GD, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_GD, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_GD",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_LDM, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_LDM, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_LDM",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_16, 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_16, 0, 2, 16, false, 0, complain_overflow_bitfield,
 	bfd_elf_generic_reloc, "R_386_16",
-	TRUE, 0xffff, 0xffff, FALSE),
-  HOWTO(R_386_PC16, 0, 1, 16, TRUE, 0, complain_overflow_bitfield,
+	true, 0xffff, 0xffff, false),
+  HOWTO(R_386_PC16, 0, 2, 16, true, 0, complain_overflow_bitfield,
 	bfd_elf_generic_reloc, "R_386_PC16",
-	TRUE, 0xffff, 0xffff, TRUE),
-  HOWTO(R_386_8, 0, 0, 8, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffff, 0xffff, true),
+  HOWTO(R_386_8, 0, 1, 8, false, 0, complain_overflow_bitfield,
 	bfd_elf_generic_reloc, "R_386_8",
-	TRUE, 0xff, 0xff, FALSE),
-  HOWTO(R_386_PC8, 0, 0, 8, TRUE, 0, complain_overflow_signed,
+	true, 0xff, 0xff, false),
+  HOWTO(R_386_PC8, 0, 1, 8, true, 0, complain_overflow_signed,
 	bfd_elf_generic_reloc, "R_386_PC8",
-	TRUE, 0xff, 0xff, TRUE),
+	true, 0xff, 0xff, true),
 
 #define R_386_ext (R_386_PC8 + 1 - R_386_ext_offset)
 #define R_386_tls_offset (R_386_TLS_LDO_32 - R_386_ext)
   /* These are common with Solaris TLS implementation.  */
-  HOWTO(R_386_TLS_LDO_32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+  HOWTO(R_386_TLS_LDO_32, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_LDO_32",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_IE_32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_IE_32, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_IE_32",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_LE_32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_LE_32, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_LE_32",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_DTPMOD32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_DTPMOD32, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_DTPMOD32",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_DTPOFF32, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_DTPOFF32",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_TPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_TPOFF32, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_TPOFF32",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_SIZE32, 0, 2, 32, FALSE, 0, complain_overflow_unsigned,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_SIZE32, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_SIZE32",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_GOTDESC, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_GOTDESC, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_GOTDESC",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_TLS_DESC_CALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_TLS_DESC_CALL, 0, 0, 0, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_DESC_CALL",
-	FALSE, 0, 0, FALSE),
-  HOWTO(R_386_TLS_DESC, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	false, 0, 0, false),
+  HOWTO(R_386_TLS_DESC, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_TLS_DESC",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_IRELATIVE, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_IRELATIVE, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_IRELATIVE",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(R_386_GOT32X, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	true, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_386_GOT32X, 0, 4, 32, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_386_GOT32X",
-	TRUE, 0xffffffff, 0xffffffff, FALSE),
+	true, 0xffffffff, 0xffffffff, false),
 
   /* Another gap.  */
 #define R_386_ext2 (R_386_GOT32X + 1 - R_386_tls_offset)
@@ -151,41 +148,37 @@ static reloc_howto_type elf_howto_table[
 /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_386_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_386_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_386_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_386_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false)			/* pcrel_offset */
 
 #define R_386_vt (R_386_GNU_VTENTRY + 1 - R_386_vt_offset)
 
 };
 
-#define X86_PCREL_TYPE_P(TYPE) ((TYPE) == R_386_PC32)
-
-#define X86_SIZE_TYPE_P(TYPE) ((TYPE) == R_386_SIZE32)
-
 #ifdef DEBUG_GEN_RELOC
 #define TRACE(str) \
   fprintf (stderr, "i386 bfd reloc lookup %d (%s)\n", code, str)
@@ -388,7 +381,7 @@ elf_i386_rtype_to_howto (unsigned r_type
   return &elf_howto_table[indx];
 }
 
-static bfd_boolean
+static bool
 elf_i386_info_to_howto_rel (bfd *abfd,
 			    arelent *cache_ptr,
 			    Elf_Internal_Rela *dst)
@@ -401,10 +394,10 @@ elf_i386_info_to_howto_rel (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return whether a symbol name implies a local label.  The UnixWare
@@ -413,18 +406,18 @@ elf_i386_info_to_howto_rel (bfd *abfd,
    If so, we should move the .X recognition into
    _bfd_elf_is_local_label_name.  */
 
-static bfd_boolean
+static bool
 elf_i386_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == '.' && name[1] == 'X')
-    return TRUE;
+    return true;
 
   return _bfd_elf_is_local_label_name (abfd, name);
 }
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf_i386_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -435,7 +428,7 @@ elf_i386_grok_prstatus (bfd *abfd, Elf_I
       int pr_version = bfd_get_32 (abfd, note->descdata);
 
       if (pr_version != 1)
-	return FALSE;
+	return false;
 
       /* pr_cursig */
       elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 20);
@@ -452,7 +445,7 @@ elf_i386_grok_prstatus (bfd *abfd, Elf_I
       switch (note->descsz)
 	{
 	default:
-	  return FALSE;
+	  return false;
 
 	case 144:		/* Linux/i386 */
 	  /* pr_cursig */
@@ -474,7 +467,7 @@ elf_i386_grok_prstatus (bfd *abfd, Elf_I
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf_i386_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->namesz == 8 && strcmp (note->namedata, "FreeBSD") == 0)
@@ -482,7 +475,7 @@ elf_i386_grok_psinfo (bfd *abfd, Elf_Int
       int pr_version = bfd_get_32 (abfd, note->descdata);
 
       if (pr_version != 1)
-	return FALSE;
+	return false;
 
       elf_tdata (abfd)->core->program
 	= _bfd_elfcore_strndup (abfd, note->descdata + 8, 17);
@@ -494,7 +487,7 @@ elf_i386_grok_psinfo (bfd *abfd, Elf_Int
       switch (note->descsz)
 	{
 	default:
-	  return FALSE;
+	  return false;
 
 	case 124:		/* Linux/i386 elf_prpsinfo.  */
 	  elf_tdata (abfd)->core->pid
@@ -517,7 +510,7 @@ elf_i386_grok_psinfo (bfd *abfd, Elf_Int
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 /* Functions for the i386 ELF linker.
@@ -529,7 +522,7 @@ elf_i386_grok_psinfo (bfd *abfd, Elf_Int
    Functions named elf_i386_* are called by external routines, other
    functions are only called locally.  elf_i386_* functions appear
    in this file more or less in the order in which they are called
-   from external routines.  eg. elf_i386_check_relocs is called
+   from external routines.  eg. elf_i386_scan_relocs is called
    early in the link process, elf_i386_finish_dynamic_sections is
    one of the last functions.  */
 
@@ -843,18 +836,10 @@ static const struct elf_x86_non_lazy_plt
 #define PLTRESOLVE_RELOCS 2
 #define PLT_NON_JUMP_SLOT_RELOCS 2
 
-/* These are the standard parameters.  */
-static const struct elf_x86_backend_data elf_i386_arch_bed =
-  {
-    is_normal				/* os */
-  };
-
-#define	elf_backend_arch_data	&elf_i386_arch_bed
-
 /* Return TRUE if the TLS access code sequence support transition
    from R_TYPE.  */
 
-static bfd_boolean
+static bool
 elf_i386_check_tls_transition (asection *sec,
 			       bfd_byte *contents,
 			       Elf_Internal_Shdr *symtab_hdr,
@@ -868,7 +853,7 @@ elf_i386_check_tls_transition (asection
   struct elf_link_hash_entry *h;
   bfd_vma offset;
   bfd_byte *call;
-  bfd_boolean indirect_call;
+  bool indirect_call;
 
   offset = rel->r_offset;
   switch (r_type)
@@ -876,9 +861,9 @@ elf_i386_check_tls_transition (asection
     case R_386_TLS_GD:
     case R_386_TLS_LDM:
       if (offset < 2 || (rel + 1) >= relend)
-	return FALSE;
+	return false;
 
-      indirect_call = FALSE;
+      indirect_call = false;
       call = contents + offset + 4;
       val = *(call - 5);
       type = *(call - 6);
@@ -899,19 +884,19 @@ elf_i386_check_tls_transition (asection
 	     can transit to different access model.  */
 	  if ((offset + 10) > sec->size
 	      || (type != 0x8d && type != 0x04))
-	    return FALSE;
+	    return false;
 
 	  if (type == 0x04)
 	    {
 	      /* leal foo@tlsgd(,%ebx,1), %eax
 		 call ___tls_get_addr@PLT  */
 	      if (offset < 3)
-		return FALSE;
+		return false;
 
 	      if (*(call - 7) != 0x8d
 		  || val != 0x1d
 		  || call[0] != 0xe8)
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
@@ -929,7 +914,7 @@ elf_i386_check_tls_transition (asection
 		 is used to pass parameter to ___tls_get_addr.  */
 	      reg = val & 7;
 	      if ((val & 0xf8) != 0x80 || reg == 4 || reg == 0)
-		return FALSE;
+		return false;
 
 	      indirect_call = call[0] == 0xff;
 	      if (!(reg == 3 && call[0] == 0xe8 && call[5] == 0x90)
@@ -937,7 +922,7 @@ elf_i386_check_tls_transition (asection
 		  && !(indirect_call
 		       && (call[1] & 0xf8) == 0x90
 		       && (call[1] & 0x7) == reg))
-		return FALSE;
+		return false;
 	    }
 	}
       else
@@ -952,13 +937,13 @@ elf_i386_check_tls_transition (asection
 		addr32 call ___tls_get_addr
 	     can transit to different access model.  */
 	  if (type != 0x8d || (offset + 9) > sec->size)
-	    return FALSE;
+	    return false;
 
 	  /* %eax can't be used as the GOT base register since it is
 	     used to pass parameter to ___tls_get_addr.  */
 	  reg = val & 7;
 	  if ((val & 0xf8) != 0x80 || reg == 4 || reg == 0)
-	    return FALSE;
+	    return false;
 
 	  indirect_call = call[0] == 0xff;
 	  if (!(reg == 3 && call[0] == 0xe8)
@@ -966,19 +951,20 @@ elf_i386_check_tls_transition (asection
 	      && !(indirect_call
 		   && (call[1] & 0xf8) == 0x90
 		   && (call[1] & 0x7) == reg))
-	    return FALSE;
+	    return false;
 	}
 
       r_symndx = ELF32_R_SYM (rel[1].r_info);
       if (r_symndx < symtab_hdr->sh_info)
-	return FALSE;
+	return false;
 
       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
       if (h == NULL
 	  || !((struct elf_x86_link_hash_entry *) h)->tls_get_addr)
-	return FALSE;
+	return false;
       else if (indirect_call)
-	return (ELF32_R_TYPE (rel[1].r_info) == R_386_GOT32X);
+	return (ELF32_R_TYPE (rel[1].r_info) == R_386_GOT32X
+		|| ELF32_R_TYPE (rel[1].r_info) == R_386_GOT32);
       else
 	return (ELF32_R_TYPE (rel[1].r_info) == R_386_PC32
 		|| ELF32_R_TYPE (rel[1].r_info) == R_386_PLT32);
@@ -991,15 +977,15 @@ elf_i386_check_tls_transition (asection
        */
 
       if (offset < 1 || (offset + 4) > sec->size)
-	return FALSE;
+	return false;
 
       /* Check "movl foo@tpoff(%rip), %eax" first.  */
       val = bfd_get_8 (abfd, contents + offset - 1);
       if (val == 0xa1)
-	return TRUE;
+	return true;
 
       if (offset < 2)
-	return FALSE;
+	return false;
 
       /* Check movl|addl foo@tpoff(%rip), %reg.   */
       type = bfd_get_8 (abfd, contents + offset - 2);
@@ -1015,11 +1001,11 @@ elf_i386_check_tls_transition (asection
        */
 
       if (offset < 2 || (offset + 4) > sec->size)
-	return FALSE;
+	return false;
 
       val = bfd_get_8 (abfd, contents + offset - 1);
       if ((val & 0xc0) != 0x80 || (val & 7) == 4)
-	return FALSE;
+	return false;
 
       type = bfd_get_8 (abfd, contents + offset - 2);
       return type == 0x8b || type == 0x2b || type == 0x03;
@@ -1033,10 +1019,10 @@ elf_i386_check_tls_transition (asection
 	 going to be eax.  */
 
       if (offset < 2 || (offset + 4) > sec->size)
-	return FALSE;
+	return false;
 
       if (bfd_get_8 (abfd, contents + offset - 2) != 0x8d)
-	return FALSE;
+	return false;
 
       val = bfd_get_8 (abfd, contents + offset - 1);
       return (val & 0xc7) == 0x83;
@@ -1052,7 +1038,7 @@ elf_i386_check_tls_transition (asection
 	  return call[0] == 0xff && call[1] == 0x10;
 	}
 
-      return FALSE;
+      return false;
 
     default:
       abort ();
@@ -1062,7 +1048,7 @@ elf_i386_check_tls_transition (asection
 /* Return TRUE if the TLS access transition is OK or no transition
    will be performed.  Update R_TYPE if there is a transition.  */
 
-static bfd_boolean
+static bool
 elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd,
 			 asection *sec, bfd_byte *contents,
 			 Elf_Internal_Shdr *symtab_hdr,
@@ -1072,17 +1058,30 @@ elf_i386_tls_transition (struct bfd_link
 			 const Elf_Internal_Rela *relend,
 			 struct elf_link_hash_entry *h,
 			 unsigned long r_symndx,
-			 bfd_boolean from_relocate_section)
+			 bool from_relocate_section)
 {
   unsigned int from_type = *r_type;
   unsigned int to_type = from_type;
-  bfd_boolean check = TRUE;
+  bool check = true;
+  unsigned int to_le_type, to_ie_type;
 
   /* Skip TLS transition for functions.  */
   if (h != NULL
       && (h->type == STT_FUNC
 	  || h->type == STT_GNU_IFUNC))
-    return TRUE;
+    return true;
+
+  if (get_elf_backend_data (abfd)->target_os == is_solaris)
+    {
+      /* NB: Solaris only supports R_386_TLS_LE and R_386_TLS_IE.  */
+      to_le_type = R_386_TLS_LE;
+      to_ie_type = R_386_TLS_IE;
+    }
+  else
+    {
+      to_le_type = R_386_TLS_LE_32;
+      to_ie_type = R_386_TLS_IE_32;
+    }
 
   switch (from_type)
     {
@@ -1095,10 +1094,10 @@ elf_i386_tls_transition (struct bfd_link
       if (bfd_link_executable (info))
 	{
 	  if (h == NULL)
-	    to_type = R_386_TLS_LE_32;
+	    to_type = to_le_type;
 	  else if (from_type != R_386_TLS_IE
 		   && from_type != R_386_TLS_GOTIE)
-	    to_type = R_386_TLS_IE_32;
+	    to_type = to_ie_type;
 	}
 
       /* When we are called from elf_i386_relocate_section, there may
@@ -1108,7 +1107,7 @@ elf_i386_tls_transition (struct bfd_link
 	  unsigned int new_to_type = to_type;
 
 	  if (TLS_TRANSITION_IE_TO_LE_P (info, h, tls_type))
-	    new_to_type = R_386_TLS_LE_32;
+	    new_to_type = to_le_type;
 
 	  if (to_type == R_386_TLS_GD
 	      || to_type == R_386_TLS_GOTDESC
@@ -1117,11 +1116,11 @@ elf_i386_tls_transition (struct bfd_link
 	      if (tls_type == GOT_TLS_IE_POS)
 		new_to_type = R_386_TLS_GOTIE;
 	      else if (tls_type & GOT_TLS_IE)
-		new_to_type = R_386_TLS_IE_32;
+		new_to_type = to_ie_type;
 	    }
 
 	  /* We checked the transition before when we were called from
-	     elf_i386_check_relocs.  We only want to check the new
+	     elf_i386_scan_relocs.  We only want to check the new
 	     transition which hasn't been checked before.  */
 	  check = new_to_type != to_type && from_type == to_type;
 	  to_type = new_to_type;
@@ -1131,16 +1130,16 @@ elf_i386_tls_transition (struct bfd_link
 
     case R_386_TLS_LDM:
       if (bfd_link_executable (info))
-	to_type = R_386_TLS_LE_32;
+	to_type = to_le_type;
       break;
 
     default:
-      return TRUE;
+      return true;
     }
 
   /* Return TRUE if there is no transition.  */
   if (from_type == to_type)
-    return TRUE;
+    return true;
 
   /* Check if the transition can be performed.  */
   if (check
@@ -1167,7 +1166,7 @@ elf_i386_tls_transition (struct bfd_link
 	    {
 	      Elf_Internal_Sym *isym;
 
-	      isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	      isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 					    abfd, r_symndx);
 	      name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);
 	    }
@@ -1180,11 +1179,11 @@ elf_i386_tls_transition (struct bfd_link
 	 abfd, from->name, to->name, name,
 	 (uint64_t) rel->r_offset, sec);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   *r_type = to_type;
-  return TRUE;
+  return true;
 }
 
 /* With the local symbol, foo, we convert
@@ -1207,40 +1206,47 @@ elf_i386_tls_transition (struct bfd_link
    instructions.  */
 
 static
-bfd_boolean
+bool
 elf_i386_convert_load_reloc (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
 			     bfd_byte *contents,
 			     unsigned int *r_type_p,
 			     Elf_Internal_Rela *irel,
 			     struct elf_link_hash_entry *h,
-			     bfd_boolean *converted,
+			     bool *converted,
 			     struct bfd_link_info *link_info)
 {
   struct elf_x86_link_hash_table *htab;
   unsigned int opcode;
   unsigned int modrm;
-  bfd_boolean baseless;
+  bool baseless;
   Elf_Internal_Sym *isym;
   unsigned int addend;
   unsigned int nop;
   bfd_vma nop_offset;
-  bfd_boolean is_pic;
-  bfd_boolean to_reloc_32;
+  bool is_pic;
+  bool to_reloc_32;
+  bool abs_symbol;
   unsigned int r_type;
   unsigned int r_symndx;
   bfd_vma roff = irel->r_offset;
-  bfd_boolean local_ref;
+  bool local_ref;
   struct elf_x86_link_hash_entry *eh;
 
   if (roff < 2)
-    return TRUE;
+    return true;
 
   /* Addend for R_386_GOT32X relocations must be 0.  */
   addend = bfd_get_32 (abfd, contents + roff);
   if (addend != 0)
-    return TRUE;
+    return true;
 
   htab = elf_x86_hash_table (link_info, I386_ELF_DATA);
+  if (htab == NULL || ! is_x86_elf (abfd, htab))
+    {
+      bfd_set_error (bfd_error_wrong_format);
+      return false;
+    }
+
   is_pic = bfd_link_pic (link_info);
 
   r_type = *r_type_p;
@@ -1249,6 +1255,21 @@ elf_i386_convert_load_reloc (bfd *abfd,
   modrm = bfd_get_8 (abfd, contents + roff - 1);
   baseless = (modrm & 0xc7) == 0x5;
 
+  if (h)
+    {
+      /* NB: Also set linker_def via SYMBOL_REFERENCES_LOCAL_P.  */
+      local_ref = SYMBOL_REFERENCES_LOCAL_P (link_info, h);
+      isym = NULL;
+      abs_symbol = ABS_SYMBOL_P (h);
+    }
+  else
+    {
+      local_ref = true;
+      isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd,
+				    r_symndx);
+      abs_symbol = isym->st_shndx == SHN_ABS;
+    }
+
   if (baseless && is_pic)
     {
       /* For PIC, disallow R_386_GOT32X without a base register
@@ -1256,11 +1277,7 @@ elf_i386_convert_load_reloc (bfd *abfd,
       const char *name;
 
       if (h == NULL)
-	{
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd,
-					r_symndx);
-	  name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);
-	}
+	name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);
       else
 	name = h->root.root.string;
 
@@ -1269,7 +1286,7 @@ elf_i386_convert_load_reloc (bfd *abfd,
 	(_("%pB: direct GOT relocation R_386_GOT32X against `%s' without base"
 	   " register can not be used when making a shared object"),
 	 abfd, name);
-      return FALSE;
+      return false;
     }
 
   opcode = bfd_get_8 (abfd, contents + roff - 2);
@@ -1294,9 +1311,6 @@ elf_i386_convert_load_reloc (bfd *abfd,
 	goto convert_load;
     }
 
-  /* NB: Also set linker_def via SYMBOL_REFERENCES_LOCAL_P.  */
-  local_ref = SYMBOL_REFERENCES_LOCAL_P (link_info, h);
-
   /* Undefined weak symbol is only bound locally in executable
      and its reference is resolved as 0.  */
   if (h->root.type == bfd_link_hash_undefweak
@@ -1307,14 +1321,14 @@ elf_i386_convert_load_reloc (bfd *abfd,
 	{
 	  /* No direct branch to 0 for PIC.  */
 	  if (is_pic)
-	    return TRUE;
+	    return true;
 	  else
 	    goto convert_branch;
 	}
       else
 	{
 	  /* We can convert load of address 0 to R_386_32.  */
-	  to_reloc_32 = TRUE;
+	  to_reloc_32 = true;
 	  goto convert_load;
 	}
     }
@@ -1327,7 +1341,7 @@ elf_i386_convert_load_reloc (bfd *abfd,
 	  && local_ref)
 	{
 	  /* The function is locally defined.   */
-convert_branch:
+	convert_branch:
 	  /* Convert R_386_GOT32X to R_386_PC32.  */
 	  if (modrm == 0x15 || (modrm & 0xf8) == 0x90)
 	    {
@@ -1369,7 +1383,7 @@ convert_branch:
 	  bfd_put_32 (abfd, -4, contents + irel->r_offset);
 	  irel->r_info = ELF32_R_INFO (r_symndx, R_386_PC32);
 	  *r_type_p = R_386_PC32;
-	  *converted = TRUE;
+	  *converted = true;
 	}
     }
   else
@@ -1381,7 +1395,7 @@ convert_branch:
 	 Avoid optimizing _DYNAMIC since ld.so may use its
 	 link-time address.  */
       if (h == htab->elf.hdynamic)
-	return TRUE;
+	return true;
 
       /* def_regular is set by an assignment in a linker script in
 	 bfd_elf_record_link_assignment.  start_stop is set on
@@ -1393,9 +1407,12 @@ convert_branch:
 	       || h->root.type == bfd_link_hash_defweak)
 	      && local_ref))
 	{
-convert_load:
+	convert_load:
 	  if (opcode == 0x8b)
 	    {
+	      if (abs_symbol && local_ref)
+		to_reloc_32 = true;
+
 	      if (to_reloc_32)
 		{
 		  /* Convert "mov foo@GOT[(%reg1)], %reg2" to
@@ -1417,7 +1434,7 @@ convert_load:
 	    {
 	      /* Only R_386_32 is supported.  */
 	      if (!to_reloc_32)
-		return TRUE;
+		return true;
 
 	      if (opcode == 0x85)
 		{
@@ -1442,53 +1459,39 @@ convert_load:
 	  bfd_put_8 (abfd, opcode, contents + roff - 2);
 	  irel->r_info = ELF32_R_INFO (r_symndx, r_type);
 	  *r_type_p = r_type;
-	  *converted = TRUE;
+	  *converted = true;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-/* Rename some of the generic section flags to better document how they
-   are used here.  */
-#define check_relocs_failed	sec_flg0
-
 /* Look through the relocs for a section during the first phase, and
-   calculate needed space in the global offset table, procedure linkage
-   table, and dynamic reloc sections.  */
+   calculate needed space in the global offset table, and procedure
+   linkage table.  */
 
-static bfd_boolean
-elf_i386_check_relocs (bfd *abfd,
-		       struct bfd_link_info *info,
-		       asection *sec,
-		       const Elf_Internal_Rela *relocs)
+static bool
+elf_i386_scan_relocs (bfd *abfd,
+		      struct bfd_link_info *info,
+		      asection *sec,
+		      const Elf_Internal_Rela *relocs)
 {
   struct elf_x86_link_hash_table *htab;
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
-  asection *sreloc;
   bfd_byte *contents;
-  bfd_boolean converted;
+  bool converted;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+    return true;
 
   htab = elf_x86_hash_table (info, I386_ELF_DATA);
   if (htab == NULL)
     {
       sec->check_relocs_failed = 1;
-      return FALSE;
+      return false;
     }
 
   BFD_ASSERT (is_x86_elf (abfd, htab));
@@ -1499,15 +1502,13 @@ elf_i386_check_relocs (bfd *abfd,
   else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
     {
       sec->check_relocs_failed = 1;
-      return FALSE;
+      return false;
     }
 
   symtab_hdr = &elf_symtab_hdr (abfd);
   sym_hashes = elf_sym_hashes (abfd);
 
-  converted = FALSE;
-
-  sreloc = NULL;
+  converted = false;
 
   rel_end = relocs + sec->reloc_count;
   for (rel = relocs; rel < rel_end; rel++)
@@ -1518,11 +1519,16 @@ elf_i386_check_relocs (bfd *abfd,
       struct elf_x86_link_hash_entry *eh;
       Elf_Internal_Sym *isym;
       const char *name;
-      bfd_boolean size_reloc;
+      bool size_reloc;
+      bool no_dynreloc;
 
       r_symndx = ELF32_R_SYM (rel->r_info);
       r_type = ELF32_R_TYPE (rel->r_info);
 
+      /* Don't check R_386_NONE.  */
+      if (r_type == R_386_NONE)
+	continue;
+
       if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
 	{
 	  /* xgettext:c-format */
@@ -1534,7 +1540,7 @@ elf_i386_check_relocs (bfd *abfd,
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* A local symbol.  */
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 					abfd, r_symndx);
 	  if (isym == NULL)
 	    goto error_return;
@@ -1542,7 +1548,7 @@ elf_i386_check_relocs (bfd *abfd,
 	  /* Check relocation against local STT_GNU_IFUNC symbol.  */
 	  if (ELF32_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 	    {
-	      h = _bfd_elf_x86_get_local_sym_hash (htab, abfd, rel, TRUE);
+	      h = _bfd_elf_x86_get_local_sym_hash (htab, abfd, rel, true);
 	      if (h == NULL)
 		goto error_return;
 
@@ -1587,15 +1593,19 @@ elf_i386_check_relocs (bfd *abfd,
 	    goto error_return;
 	}
 
+      if (!_bfd_elf_x86_valid_reloc_p (sec, info, htab, rel, h, isym,
+				       symtab_hdr, &no_dynreloc))
+	return false;
+
       if (! elf_i386_tls_transition (info, abfd, sec, contents,
 				     symtab_hdr, sym_hashes,
 				     &r_type, GOT_UNKNOWN,
-				     rel, rel_end, h, r_symndx, FALSE))
+				     rel, rel_end, h, r_symndx, false))
 	goto error_return;
 
       /* Check if _GLOBAL_OFFSET_TABLE_ is referenced.  */
       if (h == htab->elf.hgot)
-	htab->got_referenced = TRUE;
+	htab->got_referenced = true;
 
       switch (r_type)
 	{
@@ -1622,7 +1632,7 @@ elf_i386_check_relocs (bfd *abfd,
 	  break;
 
 	case R_386_SIZE32:
-	  size_reloc = TRUE;
+	  size_reloc = true;
 	  goto do_size;
 
 	case R_386_TLS_IE_32:
@@ -1674,25 +1684,12 @@ elf_i386_check_relocs (bfd *abfd,
 	      {
 		bfd_signed_vma *local_got_refcounts;
 
+		if (!elf_x86_allocate_local_got_info (abfd,
+						      symtab_hdr->sh_info))
+		      goto error_return;
+
 		/* This is a global offset table entry for a local symbol.  */
 		local_got_refcounts = elf_local_got_refcounts (abfd);
-		if (local_got_refcounts == NULL)
-		  {
-		    bfd_size_type size;
-
-		    size = symtab_hdr->sh_info;
-		    size *= (sizeof (bfd_signed_vma)
-			     + sizeof (bfd_vma) + sizeof(char));
-		    local_got_refcounts = (bfd_signed_vma *)
-			bfd_zalloc (abfd, size);
-		    if (local_got_refcounts == NULL)
-		      goto error_return;
-		    elf_local_got_refcounts (abfd) = local_got_refcounts;
-		    elf_x86_local_tlsdesc_gotent (abfd)
-		      = (bfd_vma *) (local_got_refcounts + symtab_hdr->sh_info);
-		    elf_x86_local_got_tls_type (abfd)
-		      = (char *) (local_got_refcounts + 2 * symtab_hdr->sh_info);
-		  }
 		local_got_refcounts[r_symndx] = 1;
 		old_tls_type = elf_x86_local_got_tls_type (abfd) [r_symndx];
 	      }
@@ -1739,7 +1736,7 @@ elf_i386_check_relocs (bfd *abfd,
 
 	case R_386_GOTOFF:
 	case R_386_GOTPC:
-create_got:
+	create_got:
 	  if (r_type != R_386_TLS_IE)
 	    {
 	      if (eh != NULL)
@@ -1750,7 +1747,7 @@ create_got:
 		  if (r_type == R_386_GOTOFF
 		      && h->root.type == bfd_link_hash_undefweak
 		      && bfd_link_executable (info))
-		    htab->got_referenced = TRUE;
+		    htab->got_referenced = true;
 		}
 	      break;
 	    }
@@ -1769,7 +1766,7 @@ create_got:
 	case R_386_PC32:
 	  if (eh != NULL && (sec->flags & SEC_CODE) != 0)
 	    eh->zero_undefweak |= 0x2;
-do_relocation:
+	do_relocation:
 	  /* We are called after all symbols have been resolved.  Only
 	     relocation against STT_GNU_IFUNC symbol must go through
 	     PLT.  */
@@ -1777,7 +1774,7 @@ do_relocation:
 	      && (bfd_link_executable (info)
 		  || h->type == STT_GNU_IFUNC))
 	    {
-	      bfd_boolean func_pointer_ref = FALSE;
+	      bool func_pointer_ref = false;
 
 	      if (r_type == R_386_PC32)
 		{
@@ -1799,11 +1796,20 @@ do_relocation:
 		}
 	      else
 		{
-		  h->pointer_equality_needed = 1;
-		  /* R_386_32 can be resolved at run-time.  */
+		  /* R_386_32 can be resolved at run-time.  Function
+		     pointer reference doesn't need PLT for pointer
+		     equality.  */
 		  if (r_type == R_386_32
 		      && (sec->flags & SEC_READONLY) == 0)
-		    func_pointer_ref = TRUE;
+		    func_pointer_ref = true;
+
+		  /* IFUNC symbol needs pointer equality in PDE so that
+		     function pointer reference will be resolved to its
+		     PLT entry directly.  */
+		  if (!func_pointer_ref
+		      || (bfd_link_pde (info)
+			  && h->type == STT_GNU_IFUNC))
+		    h->pointer_equality_needed = 1;
 		}
 
 	      if (!func_pointer_ref)
@@ -1816,40 +1822,51 @@ do_relocation:
 		     adjust_dynamic_symbol.  */
 		  h->non_got_ref = 1;
 
+		  if (!elf_has_indirect_extern_access (sec->owner))
+		    eh->non_got_ref_without_indirect_extern_access = 1;
+
 		  /* We may need a .plt entry if the symbol is a function
 		     defined in a shared lib or is a function referenced
 		     from the code or read-only section.  */
 		  if (!h->def_regular
 		      || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0)
 		    h->plt.refcount = 1;
+
+		  if (htab->elf.target_os != is_solaris
+		      && h->pointer_equality_needed
+		      && h->type == STT_FUNC
+		      && eh->def_protected
+		      && !SYMBOL_DEFINED_NON_SHARED_P (h)
+		      && h->def_dynamic)
+		    {
+		      /* Disallow non-canonical reference to canonical
+			 protected function.  */
+		      _bfd_error_handler
+			/* xgettext:c-format */
+			(_("%pB: non-canonical reference to canonical "
+			   "protected function `%s' in %pB"),
+			 abfd, h->root.root.string,
+			 h->root.u.def.section->owner);
+		      bfd_set_error (bfd_error_bad_value);
+		      goto error_return;
+		    }
 		}
 	    }
 
-	  size_reloc = FALSE;
-do_size:
-	  if (NEED_DYNAMIC_RELOCATION_P (info, FALSE, h, sec, r_type,
-					 R_386_32))
+	  size_reloc = false;
+	do_size:
+	  if (!no_dynreloc
+	      && NEED_DYNAMIC_RELOCATION_P (false, info, false, h, sec,
+					    r_type, R_386_32))
 	    {
 	      struct elf_dyn_relocs *p;
 	      struct elf_dyn_relocs **head;
 
-	      /* We must copy these reloc types into the output file.
-		 Create a reloc section in dynobj and make room for
-		 this reloc.  */
-	      if (sreloc == NULL)
-		{
-		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ FALSE);
-
-		  if (sreloc == NULL)
-		    goto error_return;
-		}
-
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
 		{
-		  head = &eh->dyn_relocs;
+		  head = &h->dyn_relocs;
 		}
 	      else
 		{
@@ -1859,7 +1876,7 @@ do_size:
 		  void **vpp;
 		  asection *s;
 
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
 		    goto error_return;
@@ -1875,7 +1892,7 @@ do_size:
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 		  p = (struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj,
 							   amt);
 		  if (p == NULL)
@@ -1915,13 +1932,14 @@ do_size:
 
   if (elf_section_data (sec)->this_hdr.contents != contents)
     {
-      if (!converted && !info->keep_memory)
+      if (!converted && !_bfd_link_keep_memory (info))
 	free (contents);
       else
 	{
 	  /* Cache the section contents for elf_link_input_bfd if any
 	     load is converted or --no-keep-memory isn't used.  */
 	  elf_section_data (sec)->this_hdr.contents = contents;
+	  info->cache_size += sec->size;
 	}
     }
 
@@ -1929,19 +1947,37 @@ do_size:
   if (elf_section_data (sec)->relocs != relocs && converted)
     elf_section_data (sec)->relocs = (Elf_Internal_Rela *) relocs;
 
-  return TRUE;
+  return true;
 
-error_return:
+ error_return:
   if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
   sec->check_relocs_failed = 1;
-  return FALSE;
+  return false;
+}
+
+static bool
+elf_i386_always_size_sections (bfd *output_bfd,
+			       struct bfd_link_info *info)
+{
+  bfd *abfd;
+
+  /* Scan relocations after rel_from_abs has been set on __ehdr_start.  */
+  for (abfd = info->input_bfds;
+       abfd != (bfd *) NULL;
+       abfd = abfd->link.next)
+    if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+	&& !_bfd_elf_link_iterate_on_relocs (abfd, info,
+					     elf_i386_scan_relocs))
+      return false;
+
+  return _bfd_x86_elf_always_size_sections (output_bfd, info);
 }
 
 /* Set the correct type for an x86 ELF section.  We do this by the
    section name, which is a hack, but ought to work.  */
 
-static bfd_boolean
+static bool
 elf_i386_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 			Elf_Internal_Shdr *hdr,
 			asection *sec)
@@ -1969,7 +2005,7 @@ elf_i386_fake_sections (bfd *abfd ATTRIB
   if (strcmp (name, ".reloc") == 0)
     hdr->sh_type = SHT_PROGBITS;
 
-  return TRUE;
+  return true;
 }
 
 /* Return the relocation value for @tpoff relocation
@@ -1993,7 +2029,7 @@ elf_i386_tpoff (struct bfd_link_info *in
 
 /* Relocate an i386 ELF section.  */
 
-static bfd_boolean
+static int
 elf_i386_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -2011,21 +2047,22 @@ elf_i386_relocate_section (bfd *output_b
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *wrel;
   Elf_Internal_Rela *relend;
-  bfd_boolean is_vxworks_tls;
+  bool is_vxworks_tls;
+  unsigned expected_tls_le;
   unsigned plt_entry_size;
 
-  /* Skip if check_relocs failed.  */
+  /* Skip if check_relocs or scan_relocs failed.  */
   if (input_section->check_relocs_failed)
-    return FALSE;
+    return false;
 
   htab = elf_x86_hash_table (info, I386_ELF_DATA);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (!is_x86_elf (input_bfd, htab))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   symtab_hdr = &elf_symtab_hdr (input_bfd);
@@ -2034,7 +2071,7 @@ elf_i386_relocate_section (bfd *output_b
   local_tlsdesc_gotents = elf_x86_local_tlsdesc_gotent (input_bfd);
   /* We have to handle relocations in vxworks .tls_vars sections
      specially, because the dynamic loader is 'weird'.  */
-  is_vxworks_tls = (htab->target_os == is_vxworks
+  is_vxworks_tls = (htab->elf.target_os == is_vxworks
 		    && bfd_link_pic (info)
 		    && !strcmp (input_section->output_section->name,
 				".tls_vars"));
@@ -2056,14 +2093,14 @@ elf_i386_relocate_section (bfd *output_b
       asection *sec;
       bfd_vma off, offplt, plt_offset;
       bfd_vma relocation;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_reloc_status_type r;
       unsigned int indx;
       int tls_type;
       bfd_vma st_size;
       asection *resolved_plt;
-      bfd_boolean resolved_to_zero;
-      bfd_boolean relative_reloc;
+      bool resolved_to_zero;
+      bool relative_reloc;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       if (r_type == R_386_GNU_VTINHERIT
@@ -2082,7 +2119,7 @@ elf_i386_relocate_section (bfd *output_b
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  sym = local_syms + r_symndx;
@@ -2100,9 +2137,9 @@ elf_i386_relocate_section (bfd *output_b
 	      bfd_vma addend;
 	      bfd_byte *where = contents + rel->r_offset;
 
-	      switch (howto->size)
+	      switch (bfd_get_reloc_size (howto))
 		{
-		case 0:
+		case 1:
 		  addend = bfd_get_8 (input_bfd, where);
 		  if (howto->pc_relative)
 		    {
@@ -2110,7 +2147,7 @@ elf_i386_relocate_section (bfd *output_b
 		      addend += 1;
 		    }
 		  break;
-		case 1:
+		case 2:
 		  addend = bfd_get_16 (input_bfd, where);
 		  if (howto->pc_relative)
 		    {
@@ -2118,7 +2155,7 @@ elf_i386_relocate_section (bfd *output_b
 		      addend += 2;
 		    }
 		  break;
-		case 2:
+		case 4:
 		  addend = bfd_get_32 (input_bfd, where);
 		  if (howto->pc_relative)
 		    {
@@ -2141,20 +2178,20 @@ elf_i386_relocate_section (bfd *output_b
 		  addend += msec->output_section->vma + msec->output_offset;
 		}
 
-	      switch (howto->size)
+	      switch (bfd_get_reloc_size (howto))
 		{
-		case 0:
+		case 1:
 		  /* FIXME: overflow checks.  */
 		  if (howto->pc_relative)
 		    addend -= 1;
 		  bfd_put_8 (input_bfd, addend, where);
 		  break;
-		case 1:
+		case 2:
 		  if (howto->pc_relative)
 		    addend -= 2;
 		  bfd_put_16 (input_bfd, addend, where);
 		  break;
-		case 2:
+		case 4:
 		  if (howto->pc_relative)
 		    addend -= 4;
 		  bfd_put_32 (input_bfd, addend, where);
@@ -2166,7 +2203,7 @@ elf_i386_relocate_section (bfd *output_b
 	    {
 	      /* Relocate against local STT_GNU_IFUNC symbol.  */
 	      h = _bfd_elf_x86_get_local_sym_hash (htab, input_bfd, rel,
-						   FALSE);
+						   false);
 	      if (h == NULL)
 		abort ();
 
@@ -2177,8 +2214,8 @@ elf_i386_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean warned ATTRIBUTE_UNUSED;
-	  bfd_boolean ignored ATTRIBUTE_UNUSED;
+	  bool warned ATTRIBUTE_UNUSED;
+	  bool ignored ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -2302,7 +2339,7 @@ elf_i386_relocate_section (bfd *output_b
 		    {
 		      /* This references the local defitionion.  We must
 			 initialize this entry in the global offset table.
-			 Since the offset must always be a multiple of 8,
+			 Since the offset must always be a multiple of 4,
 			 we use the least significant bit to record
 			 whether we have initialized it already.
 
@@ -2362,7 +2399,7 @@ elf_i386_relocate_section (bfd *output_b
 	  switch (r_type)
 	    {
 	    default:
-bad_ifunc_reloc:
+	    bad_ifunc_reloc:
 	      if (h->root.root.string)
 		name = h->root.root.string;
 	      else
@@ -2374,7 +2411,7 @@ bad_ifunc_reloc:
 		   "symbol `%s' isn't supported"), input_bfd,
 		 howto->name, name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 
 	    case R_386_32:
 	      /* Generate dynamic relcoation only when there is a
@@ -2386,7 +2423,7 @@ bad_ifunc_reloc:
 		  asection *sreloc;
 		  bfd_vma offset;
 
-do_ifunc_pointer:
+		do_ifunc_pointer:
 		  /* Need a dynamic relocation to get the real function
 		     adddress.  */
 		  offset = _bfd_elf_section_offset (output_bfd,
@@ -2409,6 +2446,12 @@ do_ifunc_pointer:
 
 		      /* This symbol is resolved locally.  */
 		      outrel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE);
+
+		      if (htab->params->report_relative_reloc)
+			_bfd_x86_elf_link_report_relative_reloc
+			  (info, input_section, h, sym,
+			   "R_386_IRELATIVE", &outrel);
+
 		      bfd_put_32 (output_bfd,
 				  (h->root.u.def.value
 				   + h->root.u.def.section->output_section->vma
@@ -2443,13 +2486,18 @@ do_ifunc_pointer:
 	      goto do_relocation;
 
 	    case R_386_GOTOFF:
+	      /* NB: We can't use the PLT entry as the function address
+		 for PIC since the PIC register may not be set up
+		 properly for indirect call. */
+	      if (bfd_link_pic (info))
+		goto bad_ifunc_reloc;
 	      relocation -= (gotplt->output_section->vma
 			     + gotplt->output_offset);
 	      goto do_relocation;
 	    }
 	}
 
-skip_ifunc:
+    skip_ifunc:
       resolved_to_zero = (eh != NULL
 			  && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
 
@@ -2462,7 +2510,7 @@ skip_ifunc:
 	  if (htab->elf.sgot == NULL)
 	    abort ();
 
-	  relative_reloc = FALSE;
+	  relative_reloc = false;
 	  if (h != NULL)
 	    {
 	      off = h->got.offset;
@@ -2483,18 +2531,20 @@ skip_ifunc:
 		      bfd_put_32 (output_bfd, relocation,
 				  htab->elf.sgot->contents + off);
 		      h->got.offset |= 1;
-
-		      if (GENERATE_RELATIVE_RELOC_P (info, h))
+		      /* NB: Don't generate relative relocation here if
+			 it has been generated by DT_RELR.  */
+		      if (!info->enable_dt_relr
+			  && GENERATE_RELATIVE_RELOC_P (info, h))
 			{
 			  /* PR ld/21402: If this symbol isn't dynamic
 			     in PIC, generate R_386_RELATIVE here.  */
 			  eh->no_finish_dynamic_symbol = 1;
-			  relative_reloc = TRUE;
+			  relative_reloc = true;
 			}
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -2514,8 +2564,10 @@ skip_ifunc:
 			      htab->elf.sgot->contents + off);
 		  local_got_offsets[r_symndx] |= 1;
 
-		  if (bfd_link_pic (info))
-		    relative_reloc = TRUE;
+		  /* NB: Don't generate relative relocation here if it
+		     has been generated by DT_RELR.  */
+		  if (!info->enable_dt_relr && bfd_link_pic (info))
+		    relative_reloc = true;
 		}
 	    }
 
@@ -2532,6 +2584,12 @@ skip_ifunc:
 				 + htab->elf.sgot->output_offset
 				 + off);
 	      outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
+
+	      if (htab->params->report_relative_reloc)
+		_bfd_x86_elf_link_report_relative_reloc
+		  (info, input_section, h, sym, "R_386_RELATIVE",
+		   &outrel);
+
 	      elf_append_rel (output_bfd, s, &outrel);
 	    }
 
@@ -2551,7 +2609,7 @@ skip_ifunc:
 		     we don't know what the GOT base is.  */
 		  const char *name;
 
-disallow_got32:
+		disallow_got32:
 		  if (h == NULL || h->root.root.string == NULL)
 		    name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
 					     NULL);
@@ -2565,7 +2623,7 @@ disallow_got32:
 		       " when making a shared object"),
 		     input_bfd, howto->name, name);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	    }
 	  else
@@ -2614,7 +2672,7 @@ disallow_got32:
 		       " `%s' can not be used when making a shared object"),
 		     input_bfd, v, h->root.root.string);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	      else if (!SYMBOL_REFERENCES_LOCAL_P (info, h)
 		       && (h->type == STT_FUNC
@@ -2629,7 +2687,7 @@ disallow_got32:
 		     h->type == STT_FUNC ? "function" : "data",
 		     h->root.root.string);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	    }
 
@@ -2646,7 +2704,7 @@ disallow_got32:
 	  /* Use global offset table as symbol value.  */
 	  relocation = htab->elf.sgotplt->output_section->vma
 		       + htab->elf.sgotplt->output_offset;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_386_PLT32:
@@ -2690,7 +2748,7 @@ disallow_got32:
 	  relocation = (resolved_plt->output_section->vma
 			+ resolved_plt->output_offset
 			+ plt_offset);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_386_SIZE32:
@@ -2704,51 +2762,68 @@ disallow_got32:
 	      || is_vxworks_tls)
 	    break;
 
-	  if (GENERATE_DYNAMIC_RELOCATION_P (info, eh, r_type,
-					     FALSE, resolved_to_zero,
+	  if (GENERATE_DYNAMIC_RELOCATION_P (false, info, eh, r_type,
+					     sec, false,
+					     resolved_to_zero,
 					     (r_type == R_386_PC32)))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
+	      bool generate_dynamic_reloc = true;
 	      asection *sreloc;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
 		 time.  */
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
 	      if (skip)
 		memset (&outrel, 0, sizeof outrel);
-	      else if (COPY_INPUT_RELOC_P (info, h, r_type))
+	      else if (COPY_INPUT_RELOC_P (false, info, h, r_type))
 		outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
 	      else
 		{
 		  /* This symbol is local, or marked to become local.  */
-		  relocate = TRUE;
-		  outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
-		}
+		  relocate = true;
+		  /* NB: Don't generate relative relocation here if it
+		     has been generated by DT_RELR.  */
+		  if (info->enable_dt_relr)
+		    generate_dynamic_reloc = false;
+		  else
+		    {
+		      outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
 
-	      sreloc = elf_section_data (input_section)->sreloc;
+		      if (htab->params->report_relative_reloc)
+			_bfd_x86_elf_link_report_relative_reloc
+			  (info, input_section, h, sym, "R_386_RELATIVE",
+			   &outrel);
+		    }
+		}
 
-	      if (sreloc == NULL || sreloc->contents == NULL)
+	      if (generate_dynamic_reloc)
 		{
-		  r = bfd_reloc_notsupported;
-		  goto check_relocation_error;
-		}
+		  sreloc = elf_section_data (input_section)->sreloc;
 
-	      elf_append_rel (output_bfd, sreloc, &outrel);
+		  if (sreloc == NULL || sreloc->contents == NULL)
+		    {
+		      r = bfd_reloc_notsupported;
+		      goto check_relocation_error;
+		    }
+
+		  elf_append_rel (output_bfd, sreloc, &outrel);
+		}
 
 	      /* If this reloc is against an external symbol, we do
 		 not want to fiddle with the addend.  Otherwise, we
@@ -2769,6 +2844,12 @@ disallow_got32:
 				+ input_section->output_section->vma
 				+ input_section->output_offset;
 	      outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
+
+	      if (htab->params->report_relative_reloc)
+		_bfd_x86_elf_link_report_relative_reloc
+		  (info, input_section, h, sym, "R_386_RELATIVE",
+		   &outrel);
+
 	      sreloc = elf_section_data (input_section)->sreloc;
 	      if (sreloc == NULL)
 		abort ();
@@ -2794,12 +2875,20 @@ disallow_got32:
 					 input_section, contents,
 					 symtab_hdr, sym_hashes,
 					 &r_type_tls, tls_type, rel,
-					 relend, h, r_symndx, TRUE))
-	    return FALSE;
+					 relend, h, r_symndx, true))
+	    return false;
 
-	  if (r_type_tls == R_386_TLS_LE_32)
-	    {
-	      BFD_ASSERT (! unresolved_reloc);
+	  expected_tls_le = htab->elf.target_os == is_solaris
+	    ? R_386_TLS_LE : R_386_TLS_LE_32;
+	  if (r_type_tls == expected_tls_le)
+	    {
+	      /* NB: Solaris only supports R_386_TLS_GD->R_386_TLS_LE.  */
+	      BFD_ASSERT (! unresolved_reloc
+			  && (htab->elf.target_os != is_solaris
+			      || (htab->elf.target_os == is_solaris
+				  && (r_type == R_386_TLS_GD
+				      || r_type == R_386_TLS_IE
+				      || r_type == R_386_TLS_GOTIE))));
 	      if (r_type == R_386_TLS_GD)
 		{
 		  unsigned int type;
@@ -3124,7 +3213,7 @@ disallow_got32:
 	      || r_type_tls == R_386_TLS_DESC_CALL)
 	    {
 	      relocation = htab->sgotplt_jump_table_size + offplt;
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	    }
 	  else if (r_type_tls == r_type)
 	    {
@@ -3137,7 +3226,7 @@ disallow_got32:
 		relocation += 4;
 	      if (r_type == R_386_TLS_IE)
 		relocation += g_o_t;
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	    }
 	  else if (r_type == R_386_TLS_GD)
 	    {
@@ -3268,7 +3357,7 @@ disallow_got32:
 	      continue;
 	    }
 	  else
-	    BFD_ASSERT (FALSE);
+	    BFD_ASSERT (false);
 	  break;
 
 	case R_386_TLS_LDM:
@@ -3276,8 +3365,8 @@ disallow_got32:
 					 input_section, contents,
 					 symtab_hdr, sym_hashes,
 					 &r_type, GOT_UNKNOWN, rel,
-					 relend, h, r_symndx, TRUE))
-	    return FALSE;
+					 relend, h, r_symndx, true))
+	    return false;
 
 	  if (r_type != R_386_TLS_LDM)
 	    {
@@ -3296,7 +3385,9 @@ disallow_got32:
 		 into:
 			movl %gs:0, %eax
 			leal 0(%esi), %esi  */
-	      BFD_ASSERT (r_type == R_386_TLS_LE_32);
+	      expected_tls_le = htab->elf.target_os == is_solaris
+		? R_386_TLS_LE : R_386_TLS_LE_32;
+	      BFD_ASSERT (r_type == expected_tls_le);
 	      if (*(contents + rel->r_offset + 4) == 0xff
 		  || *(contents + rel->r_offset + 4) == 0x67)
 		memcpy (contents + rel->r_offset - 2,
@@ -3338,7 +3429,7 @@ disallow_got32:
 		       + htab->elf.sgot->output_offset + off
 		       - htab->elf.sgotplt->output_section->vma
 		       - htab->elf.sgotplt->output_offset;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_386_TLS_LDO_32:
@@ -3406,15 +3497,15 @@ disallow_got32:
 	     (uint64_t) rel->r_offset,
 	     howto->name,
 	     h->root.root.string);
-	  return FALSE;
+	  return false;
 	}
 
-do_relocation:
+    do_relocation:
       r = _bfd_final_link_relocate (howto, input_bfd, input_section,
 				    contents, rel->r_offset,
 				    relocation, 0);
 
-check_relocation_error:
+    check_relocation_error:
       if (r != bfd_reloc_ok)
 	{
 	  const char *name;
@@ -3427,7 +3518,7 @@ check_relocation_error:
 						      symtab_hdr->sh_link,
 						      sym->st_name);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      if (*name == '\0')
 		name = bfd_section_name (sec);
 	    }
@@ -3443,7 +3534,7 @@ check_relocation_error:
 		(_("%pB(%pA+%#" PRIx64 "): reloc against `%s': error %d"),
 		 input_bfd, input_section,
 		 (uint64_t) rel->r_offset, name, (int) r);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -3471,13 +3562,13 @@ check_relocation_error:
       input_section->reloc_count -= deleted;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf_i386_finish_dynamic_symbol (bfd *output_bfd,
 				struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
@@ -3486,12 +3577,12 @@ elf_i386_finish_dynamic_symbol (bfd *out
   struct elf_x86_link_hash_table *htab;
   unsigned plt_entry_size;
   struct elf_x86_link_hash_entry *eh;
-  bfd_boolean local_undefweak;
-  bfd_boolean use_plt_second;
+  bool local_undefweak;
+  bool use_plt_second;
 
   htab = elf_x86_hash_table (info, I386_ELF_DATA);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   plt_entry_size = htab->plt.plt_entry_size;
 
@@ -3588,7 +3679,7 @@ elf_i386_finish_dynamic_symbol (bfd *out
 		      resolved_plt->contents + plt_offset
 		      + htab->plt.plt_got_offset);
 
-	  if (htab->target_os == is_vxworks)
+	  if (htab->elf.target_os == is_vxworks)
 	    {
 	      int s, k, reloc_index;
 
@@ -3664,6 +3755,11 @@ elf_i386_finish_dynamic_symbol (bfd *out
 			   + h->root.u.def.section->output_offset),
 			  gotplt->contents + got_offset);
 	      rel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE);
+
+	      if (htab->params->report_relative_reloc)
+		_bfd_x86_elf_link_report_relative_reloc
+		  (info, relplt, h, sym, "R_386_IRELATIVE", &rel);
+
 	      /* R_386_IRELATIVE comes last.  */
 	      plt_index = htab->next_irelative_index--;
 	    }
@@ -3762,6 +3858,8 @@ elf_i386_finish_dynamic_symbol (bfd *out
     {
       Elf_Internal_Rela rel;
       asection *relgot = htab->elf.srelgot;
+      const char *relative_reloc_name = NULL;
+      bool generate_dynamic_reloc = true;
 
       /* This symbol has an entry in the global offset table.  Set it
 	 up.  */
@@ -3802,6 +3900,7 @@ elf_i386_finish_dynamic_symbol (bfd *out
 			       + h->root.u.def.section->output_offset),
 			      htab->elf.sgot->contents + h->got.offset);
 		  rel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE);
+		  relative_reloc_name = "R_386_IRELATIVE";
 		}
 	      else
 		goto do_glob_dat;
@@ -3836,25 +3935,39 @@ elf_i386_finish_dynamic_symbol (bfd *out
 			  (plt->output_section->vma
 			   + plt->output_offset + plt_offset),
 			  htab->elf.sgot->contents + h->got.offset);
-	      return TRUE;
+	      return true;
 	    }
 	}
       else if (bfd_link_pic (info)
 	       && SYMBOL_REFERENCES_LOCAL_P (info, h))
 	{
 	  BFD_ASSERT((h->got.offset & 1) != 0);
-	  rel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
+	  if (info->enable_dt_relr)
+	    generate_dynamic_reloc = false;
+	  else
+	    {
+	      rel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
+	      relative_reloc_name = "R_386_RELATIVE";
+	    }
 	}
       else
 	{
 	  BFD_ASSERT((h->got.offset & 1) == 0);
-do_glob_dat:
+	do_glob_dat:
 	  bfd_put_32 (output_bfd, (bfd_vma) 0,
 		      htab->elf.sgot->contents + h->got.offset);
 	  rel.r_info = ELF32_R_INFO (h->dynindx, R_386_GLOB_DAT);
 	}
 
-      elf_append_rel (output_bfd, relgot, &rel);
+      if (generate_dynamic_reloc)
+	{
+	  if (relative_reloc_name != NULL
+	      && htab->params->report_relative_reloc)
+	    _bfd_x86_elf_link_report_relative_reloc
+	      (info, relgot, h, sym, relative_reloc_name, &rel);
+
+	  elf_append_rel (output_bfd, relgot, &rel);
+	}
     }
 
   if (h->needs_copy)
@@ -3876,13 +3989,13 @@ do_glob_dat:
       elf_append_rel (output_bfd, s, &rel);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up local dynamic symbol handling.  We set the contents of
    various dynamic sections here.  */
 
-static bfd_boolean
+static int
 elf_i386_finish_local_dynamic_symbol (void **slot, void *inf)
 {
   struct elf_link_hash_entry *h
@@ -3898,7 +4011,7 @@ elf_i386_finish_local_dynamic_symbol (vo
    here since undefined weak symbol may not be dynamic and may not be
    called for elf_i386_finish_dynamic_symbol.  */
 
-static bfd_boolean
+static bool
 elf_i386_pie_finish_undefweak_symbol (struct bfd_hash_entry *bh,
 				      void *inf)
 {
@@ -3907,7 +4020,7 @@ elf_i386_pie_finish_undefweak_symbol (st
 
   if (h->root.type != bfd_link_hash_undefweak
       || h->dynindx != -1)
-    return TRUE;
+    return true;
 
   return elf_i386_finish_dynamic_symbol (info->output_bfd,
 					 info, h, NULL);
@@ -3962,7 +4075,7 @@ elf_i386_reloc_type_class (const struct
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_i386_finish_dynamic_sections (bfd *output_bfd,
 				  struct bfd_link_info *info)
 {
@@ -3970,13 +4083,21 @@ elf_i386_finish_dynamic_sections (bfd *o
 
   htab = _bfd_x86_elf_finish_dynamic_sections (output_bfd, info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (!htab->elf.dynamic_sections_created)
-    return TRUE;
+    return true;
 
   if (htab->elf.splt && htab->elf.splt->size > 0)
     {
+      if (bfd_is_abs_section (htab->elf.splt->output_section))
+	{
+	  info->callbacks->einfo
+	    (_("%F%P: discarded output section: `%pA'\n"),
+	     htab->elf.splt);
+	  return false;
+	}
+
       /* UnixWare sets the entsize of .plt to 4, although that doesn't
 	 really seem like the right value.  */
       elf_section_data (htab->elf.splt->output_section)
@@ -4006,7 +4127,7 @@ elf_i386_finish_dynamic_sections (bfd *o
 			  htab->elf.splt->contents
 			  + htab->lazy_plt->plt0_got2_offset);
 
-	      if (htab->target_os == is_vxworks)
+	      if (htab->elf.target_os == is_vxworks)
 		{
 		  Elf_Internal_Rela rel;
 		  int num_plts = (htab->elf.splt->size
@@ -4066,7 +4187,7 @@ elf_i386_finish_dynamic_sections (bfd *o
 		       elf_i386_pie_finish_undefweak_symbol,
 		       info);
 
-  return TRUE;
+  return true;
 }
 
 /* Fill PLT/GOT entries and allocate dynamic relocations for local
@@ -4074,7 +4195,7 @@ elf_i386_finish_dynamic_sections (bfd *o
    It has to be done before elf_link_sort_relocs is called so that
    dynamic relocations are properly sorted.  */
 
-static bfd_boolean
+static bool
 elf_i386_output_arch_local_syms
   (bfd *output_bfd ATTRIBUTE_UNUSED,
    struct bfd_link_info *info,
@@ -4087,19 +4208,16 @@ elf_i386_output_arch_local_syms
   struct elf_x86_link_hash_table *htab
     = elf_x86_hash_table (info, I386_ELF_DATA);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols.  */
   htab_traverse (htab->loc_hash_table,
 		 elf_i386_finish_local_dynamic_symbol,
 		 info);
 
-  return TRUE;
+  return true;
 }
 
-/* Forward declaration.  */
-static const struct elf_x86_lazy_plt_layout elf_i386_nacl_plt;
-
 /* Similar to _bfd_elf_get_synthetic_symtab.  Support PLTs with all
    dynamic relocations.   */
 
@@ -4147,7 +4265,7 @@ elf_i386_get_synthetic_symtab (bfd *abfd
   lazy_plt = NULL;
   non_lazy_ibt_plt = NULL;
   lazy_ibt_plt = NULL;
-  switch (get_elf_x86_backend_data (abfd)->target_os)
+  switch (get_elf_backend_data (abfd)->target_os)
     {
     case is_normal:
     case is_solaris:
@@ -4158,9 +4276,8 @@ elf_i386_get_synthetic_symtab (bfd *abfd
     case is_vxworks:
       lazy_plt = &elf_i386_lazy_plt;
       break;
-    case is_nacl:
-      lazy_plt = &elf_i386_nacl_plt;
-      break;
+    default:
+      abort ();
     }
 
   got_addr = 0;
@@ -4307,7 +4424,7 @@ elf_i386_link_setup_gnu_properties (stru
 {
   struct elf_x86_init_table init_table;
 
-  switch (get_elf_x86_backend_data (info->output_bfd)->target_os)
+  switch (get_elf_backend_data (info->output_bfd)->target_os)
     {
     case is_normal:
     case is_solaris:
@@ -4324,13 +4441,8 @@ elf_i386_link_setup_gnu_properties (stru
       init_table.lazy_ibt_plt = NULL;
       init_table.non_lazy_ibt_plt = NULL;
       break;
-    case is_nacl:
-      init_table.plt0_pad_byte = 0x90;
-      init_table.lazy_plt = &elf_i386_nacl_plt;
-      init_table.non_lazy_plt = NULL;
-      init_table.lazy_ibt_plt = NULL;
-      init_table.non_lazy_ibt_plt = NULL;
-      break;
+    default:
+      abort ();
     }
 
   init_table.r_info = elf32_r_info;
@@ -4354,7 +4466,6 @@ elf_i386_link_setup_gnu_properties (stru
 #define elf_backend_got_header_size	12
 #define elf_backend_plt_alignment	4
 #define elf_backend_dtrel_excludes_plt	1
-#define elf_backend_extern_protected_data 1
 #define elf_backend_caches_rawsize	1
 #define elf_backend_want_dynrelro	1
 
@@ -4368,7 +4479,7 @@ elf_i386_link_setup_gnu_properties (stru
 #define bfd_elf32_get_synthetic_symtab	      elf_i386_get_synthetic_symtab
 
 #define elf_backend_relocs_compatible	      _bfd_elf_relocs_compatible
-#define elf_backend_check_relocs	      elf_i386_check_relocs
+#define elf_backend_always_size_sections      elf_i386_always_size_sections
 #define elf_backend_create_dynamic_sections   _bfd_elf_create_dynamic_sections
 #define elf_backend_fake_sections	      elf_i386_fake_sections
 #define elf_backend_finish_dynamic_sections   elf_i386_finish_dynamic_sections
@@ -4381,7 +4492,7 @@ elf_i386_link_setup_gnu_properties (stru
 #define elf_backend_setup_gnu_properties      elf_i386_link_setup_gnu_properties
 #define elf_backend_hide_symbol		      _bfd_x86_elf_hide_symbol
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #define	elf32_bed			      elf32_i386_bed
 
@@ -4400,11 +4511,11 @@ elf_i386_link_setup_gnu_properties (stru
    "FreeBSD" label in the ELF header.  So we put this label on all
    executables and (for simplicity) also all other object files.  */
 
-static bfd_boolean
+static bool
 elf_i386_fbsd_init_file_header (bfd *abfd, struct bfd_link_info *info)
 {
   if (!_bfd_elf_init_file_header (abfd, info))
-    return FALSE;
+    return false;
 
 #ifdef OLD_FREEBSD_ABI_LABEL
   {
@@ -4413,7 +4524,7 @@ elf_i386_fbsd_init_file_header (bfd *abf
     memcpy (&i_ehdrp->e_ident[EI_ABIVERSION], "FreeBSD", 8);
   }
 #endif
-  return TRUE;
+  return true;
 }
 
 #undef	elf_backend_init_file_header
@@ -4434,13 +4545,8 @@ elf_i386_fbsd_init_file_header (bfd *abf
 #undef	TARGET_LITTLE_NAME
 #define	TARGET_LITTLE_NAME		"elf32-i386-sol2"
 
-static const struct elf_x86_backend_data elf_i386_solaris_arch_bed =
-  {
-    is_solaris				/* os */
-  };
-
-#undef	elf_backend_arch_data
-#define	elf_backend_arch_data		&elf_i386_solaris_arch_bed
+#undef	ELF_TARGET_OS
+#define	ELF_TARGET_OS			is_solaris
 
 /* Restore default: we cannot use ELFOSABI_SOLARIS, otherwise ELFOSABI_NONE
    objects won't be recognized.  */
@@ -4469,7 +4575,7 @@ static const struct elf_x86_backend_data
    FALSE otherwise.  ISECTION is the best guess matching section from the
    input bfd IBFD, but it might be NULL.  */
 
-static bfd_boolean
+static bool
 elf32_i386_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
 						bfd *obfd ATTRIBUTE_UNUSED,
 						const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED,
@@ -4477,7 +4583,7 @@ elf32_i386_copy_solaris_special_section_
 {
   /* PR 19938: FIXME: Need to add code for setting the sh_info
      and sh_link fields of Solaris specific section types.  */
-  return FALSE;
+  return false;
 
   /* Based upon Oracle Solaris 11.3 Linkers and Libraries Guide, Ch. 13,
      Object File Format, Table 13-9  ELF sh_link and sh_info Interpretation:
@@ -4548,12 +4654,12 @@ SHT_SUNW_versym	     The section header
 
 /* Intel MCU support.  */
 
-static bfd_boolean
+static bool
 elf32_iamcu_elf_object_p (bfd *abfd)
 {
   /* Set the right machine number for an IAMCU elf32 file.  */
   bfd_default_set_arch_mach (abfd, bfd_arch_iamcu, bfd_mach_i386_iamcu);
-  return TRUE;
+  return true;
 }
 
 #undef  TARGET_LITTLE_SYM
@@ -4566,9 +4672,7 @@ elf32_iamcu_elf_object_p (bfd *abfd)
 #undef	ELF_MACHINE_CODE
 #define	ELF_MACHINE_CODE		EM_IAMCU
 
-#undef	elf_backend_arch_data
-#define	elf_backend_arch_data		&elf_i386_arch_bed
-
+#undef	ELF_TARGET_OS
 #undef	ELF_OSABI
 
 #undef  elf32_bed
@@ -4592,201 +4696,7 @@ elf32_iamcu_elf_object_p (bfd *abfd)
 #define ELF_ARCH			bfd_arch_i386
 #undef	ELF_MACHINE_CODE
 #define ELF_MACHINE_CODE		EM_386
-
-/* Native Client support.  */
-
-#undef	TARGET_LITTLE_SYM
-#define	TARGET_LITTLE_SYM		i386_elf32_nacl_vec
-#undef	TARGET_LITTLE_NAME
-#define	TARGET_LITTLE_NAME		"elf32-i386-nacl"
-#undef	elf32_bed
-#define	elf32_bed			elf32_i386_nacl_bed
-
-#undef	ELF_MAXPAGESIZE
-#define	ELF_MAXPAGESIZE			0x10000
-
-/* Restore defaults.  */
-#undef	ELF_OSABI
-#undef	elf_backend_want_plt_sym
-#define elf_backend_want_plt_sym	0
-#undef	elf_backend_static_tls_alignment
-
-/* NaCl uses substantially different PLT entries for the same effects.  */
-
-#undef	elf_backend_plt_alignment
-#define elf_backend_plt_alignment	5
-#define NACL_PLT_ENTRY_SIZE		64
-#define	NACLMASK			0xe0 /* 32-byte alignment mask.  */
-
-static const bfd_byte elf_i386_nacl_plt0_entry[] =
-  {
-    0xff, 0x35,			  /* pushl contents of address */
-    0, 0, 0, 0,			  /* replaced with address of .got + 4.  */
-    0x8b, 0x0d,			  /* movl contents of address, %ecx */
-    0, 0, 0, 0,			  /* replaced with address of .got + 8.  */
-    0x83, 0xe1, NACLMASK,	  /* andl $NACLMASK, %ecx */
-    0xff, 0xe1			  /* jmp *%ecx */
-  };
-
-static const bfd_byte elf_i386_nacl_plt_entry[NACL_PLT_ENTRY_SIZE] =
-  {
-    0x8b, 0x0d,				/* movl contents of address, %ecx */
-    0, 0, 0, 0,				/* replaced with GOT slot address.  */
-    0x83, 0xe1, NACLMASK,		/* andl $NACLMASK, %ecx */
-    0xff, 0xe1,				/* jmp *%ecx */
-
-    /* Pad to the next 32-byte boundary with nop instructions.  */
-    0x90,
-    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-
-    /* Lazy GOT entries point here (32-byte aligned).  */
-    0x68,			       /* pushl immediate */
-    0, 0, 0, 0,			       /* replaced with reloc offset.  */
-    0xe9,			       /* jmp relative */
-    0, 0, 0, 0,			       /* replaced with offset to .plt.  */
-
-    /* Pad to the next 32-byte boundary with nop instructions.  */
-    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-    0x90, 0x90
-  };
-
-static const bfd_byte
-elf_i386_nacl_pic_plt0_entry[sizeof (elf_i386_nacl_plt0_entry)] =
-  {
-    0xff, 0x73, 0x04,		/* pushl 4(%ebx) */
-    0x8b, 0x4b, 0x08,		/* mov 0x8(%ebx), %ecx */
-    0x83, 0xe1, 0xe0,		/* and $NACLMASK, %ecx */
-    0xff, 0xe1,			/* jmp *%ecx */
-
-    /* This is expected to be the same size as elf_i386_nacl_plt0_entry,
-       so pad to that size with nop instructions.  */
-    0x90, 0x90, 0x90, 0x90, 0x90, 0x90
-  };
-
-static const bfd_byte elf_i386_nacl_pic_plt_entry[NACL_PLT_ENTRY_SIZE] =
-  {
-    0x8b, 0x8b,		 /* movl offset(%ebx), %ecx */
-    0, 0, 0, 0,		 /* replaced with offset of this symbol in .got.  */
-    0x83, 0xe1, 0xe0,	 /* andl $NACLMASK, %ecx */
-    0xff, 0xe1,		 /* jmp *%ecx */
-
-    /* Pad to the next 32-byte boundary with nop instructions.  */
-    0x90,
-    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-
-    /* Lazy GOT entries point here (32-byte aligned).  */
-    0x68,		 /* pushl immediate */
-    0, 0, 0, 0,		 /* replaced with offset into relocation table.  */
-    0xe9,		 /* jmp relative */
-    0, 0, 0, 0,		 /* replaced with offset to start of .plt.  */
-
-    /* Pad to the next 32-byte boundary with nop instructions.  */
-    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-    0x90, 0x90
-  };
-
-static const bfd_byte elf_i386_nacl_eh_frame_plt[] =
-  {
-#if (PLT_CIE_LENGTH != 20				\
-     || PLT_FDE_LENGTH != 36				\
-     || PLT_FDE_START_OFFSET != 4 + PLT_CIE_LENGTH + 8	\
-     || PLT_FDE_LEN_OFFSET != 4 + PLT_CIE_LENGTH + 12)
-# error "Need elf_x86_backend_data parameters for eh_frame_plt offsets!"
-#endif
-    PLT_CIE_LENGTH, 0, 0, 0,		/* CIE length */
-    0, 0, 0, 0,				/* CIE ID */
-    1,					/* CIE version */
-    'z', 'R', 0,			/* Augmentation string */
-    1,					/* Code alignment factor */
-    0x7c,				/* Data alignment factor: -4 */
-    8,					/* Return address column */
-    1,					/* Augmentation size */
-    DW_EH_PE_pcrel | DW_EH_PE_sdata4,	/* FDE encoding */
-    DW_CFA_def_cfa, 4, 4,		/* DW_CFA_def_cfa: r4 (esp) ofs 4 */
-    DW_CFA_offset + 8, 1,		/* DW_CFA_offset: r8 (eip) at cfa-4 */
-    DW_CFA_nop, DW_CFA_nop,
-
-    PLT_FDE_LENGTH, 0, 0, 0,	 /* FDE length */
-    PLT_CIE_LENGTH + 8, 0, 0, 0, /* CIE pointer */
-    0, 0, 0, 0,			 /* R_386_PC32 .plt goes here */
-    0, 0, 0, 0,			 /* .plt size goes here */
-    0,				 /* Augmentation size */
-    DW_CFA_def_cfa_offset, 8,	 /* DW_CFA_def_cfa_offset: 8 */
-    DW_CFA_advance_loc + 6,	 /* DW_CFA_advance_loc: 6 to __PLT__+6 */
-    DW_CFA_def_cfa_offset, 12,	 /* DW_CFA_def_cfa_offset: 12 */
-    DW_CFA_advance_loc + 58,	 /* DW_CFA_advance_loc: 58 to __PLT__+64 */
-    DW_CFA_def_cfa_expression,	 /* DW_CFA_def_cfa_expression */
-    13,				 /* Block length */
-    DW_OP_breg4, 4,		 /* DW_OP_breg4 (esp): 4 */
-    DW_OP_breg8, 0,		 /* DW_OP_breg8 (eip): 0 */
-    DW_OP_const1u, 63, DW_OP_and, DW_OP_const1u, 37, DW_OP_ge,
-    DW_OP_lit2, DW_OP_shl, DW_OP_plus,
-    DW_CFA_nop, DW_CFA_nop
-  };
-
-static const struct elf_x86_lazy_plt_layout elf_i386_nacl_plt =
-  {
-    elf_i386_nacl_plt0_entry,		/* plt0_entry */
-    sizeof (elf_i386_nacl_plt0_entry),	/* plt0_entry_size */
-    elf_i386_nacl_plt_entry,		/* plt_entry */
-    NACL_PLT_ENTRY_SIZE,		/* plt_entry_size */
-    NULL,				/* plt_tlsdesc_entry */
-    0,					/* plt_tlsdesc_entry_size*/
-    0,					/* plt_tlsdesc_got1_offset */
-    0,					/* plt_tlsdesc_got2_offset */
-    0,					/* plt_tlsdesc_got1_insn_end */
-    0,					/* plt_tlsdesc_got2_insn_end */
-    2,					/* plt0_got1_offset */
-    8,					/* plt0_got2_offset */
-    0,					/* plt0_got2_insn_end */
-    2,					/* plt_got_offset */
-    33,					/* plt_reloc_offset */
-    38,					/* plt_plt_offset */
-    0,					/* plt_got_insn_size */
-    0,					/* plt_plt_insn_end */
-    32,					/* plt_lazy_offset */
-    elf_i386_nacl_pic_plt0_entry,	/* pic_plt0_entry */
-    elf_i386_nacl_pic_plt_entry,	/* pic_plt_entry */
-    elf_i386_nacl_eh_frame_plt,		/* eh_frame_plt */
-    sizeof (elf_i386_nacl_eh_frame_plt) /* eh_frame_plt_size */
-  };
-
-static const struct elf_x86_backend_data elf_i386_nacl_arch_bed =
-  {
-    is_nacl				/* os */
-  };
-
-static bfd_boolean
-elf32_i386_nacl_elf_object_p (bfd *abfd)
-{
-  /* Set the right machine number for a NaCl i386 ELF32 file.  */
-  bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_i386_i386_nacl);
-  return TRUE;
-}
-
-#undef	elf_backend_arch_data
-#define elf_backend_arch_data	&elf_i386_nacl_arch_bed
-
 #undef	elf_backend_object_p
-#define elf_backend_object_p			elf32_i386_nacl_elf_object_p
-#undef	elf_backend_modify_segment_map
-#define	elf_backend_modify_segment_map		nacl_modify_segment_map
-#undef	elf_backend_modify_headers
-#define	elf_backend_modify_headers		nacl_modify_headers
-#undef	elf_backend_final_write_processing
-#define elf_backend_final_write_processing	nacl_final_write_processing
-
-#include "elf32-target.h"
-
-/* Restore defaults.  */
-#undef	elf_backend_object_p
-#undef	elf_backend_modify_segment_map
-#undef	elf_backend_modify_headers
-#undef	elf_backend_final_write_processing
 
 /* VxWorks support.  */
 
@@ -4800,13 +4710,8 @@ elf32_i386_nacl_elf_object_p (bfd *abfd)
 #undef	elf_backend_plt_alignment
 #define elf_backend_plt_alignment	4
 
-static const struct elf_x86_backend_data elf_i386_vxworks_arch_bed =
-  {
-    is_vxworks				/* os */
-  };
-
-#undef	elf_backend_arch_data
-#define	elf_backend_arch_data	&elf_i386_vxworks_arch_bed
+#undef	ELF_TARGET_OS
+#define ELF_TARGET_OS		is_vxworks
 
 #undef elf_backend_relocs_compatible
 #undef elf_backend_add_symbol_hook
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-ip2k.c ./bfd/elf32-ip2k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-ip2k.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-ip2k.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Ubicom IP2xxx specific support for 32-bit ELF
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -40,7 +40,7 @@ struct ip2k_opcode
   unsigned short mask;
 };
 
-static bfd_boolean ip2k_relaxed = FALSE;
+static bool ip2k_relaxed = false;
 
 static const struct ip2k_opcode ip2k_page_opcode[] =
 {
@@ -135,40 +135,40 @@ static reloc_howto_type ip2k_elf_howto_t
 	  complain_overflow_dont,/* complain_on_overflow */ \
 	  bfd_elf_generic_reloc,/* special_function */ \
 	  name,			/* name */ \
-	  FALSE,		/* partial_inplace */ \
+	  false,		/* partial_inplace */ \
 	  sm,			/* src_mask */ \
 	  dm,			/* dst_mask */ \
 	  pr)			/* pcrel_offset */
 
   /* This reloc does nothing.  */
-  IP2K_HOWTO (R_IP2K_NONE, 0,3,0, FALSE, 0, "R_IP2K_NONE", 0, 0),
+  IP2K_HOWTO (R_IP2K_NONE, 0,0,0, false, 0, "R_IP2K_NONE", 0, 0),
   /* A 16 bit absolute relocation.  */
-  IP2K_HOWTO (R_IP2K_16, 0,1,16, FALSE, 0, "R_IP2K_16", 0, 0xffff),
+  IP2K_HOWTO (R_IP2K_16, 0,2,16, false, 0, "R_IP2K_16", 0, 0xffff),
   /* A 32 bit absolute relocation.  */
-  IP2K_HOWTO (R_IP2K_32, 0,2,32, FALSE, 0, "R_IP2K_32", 0, 0xffffffff),
+  IP2K_HOWTO (R_IP2K_32, 0,4,32, false, 0, "R_IP2K_32", 0, 0xffffffff),
   /* A 8-bit data relocation for the FR9 field.  Ninth bit is computed specially.  */
-  IP2K_HOWTO (R_IP2K_FR9, 0,1,9, FALSE, 0, "R_IP2K_FR9", 0, 0x00ff),
+  IP2K_HOWTO (R_IP2K_FR9, 0,2,9, false, 0, "R_IP2K_FR9", 0, 0x00ff),
   /* A 4-bit data relocation.  */
-  IP2K_HOWTO (R_IP2K_BANK, 8,1,4, FALSE, 0, "R_IP2K_BANK", 0, 0x000f),
+  IP2K_HOWTO (R_IP2K_BANK, 8,2,4, false, 0, "R_IP2K_BANK", 0, 0x000f),
   /* A 13-bit insn relocation - word address => right-shift 1 bit extra.  */
-  IP2K_HOWTO (R_IP2K_ADDR16CJP, 1,1,13, FALSE, 0, "R_IP2K_ADDR16CJP", 0, 0x1fff),
+  IP2K_HOWTO (R_IP2K_ADDR16CJP, 1,2,13, false, 0, "R_IP2K_ADDR16CJP", 0, 0x1fff),
   /* A 3-bit insn relocation - word address => right-shift 1 bit extra.  */
-  IP2K_HOWTO (R_IP2K_PAGE3, 14,1,3, FALSE, 0, "R_IP2K_PAGE3", 0, 0x0007),
+  IP2K_HOWTO (R_IP2K_PAGE3, 14,2,3, false, 0, "R_IP2K_PAGE3", 0, 0x0007),
   /* Two 8-bit data relocations.  */
-  IP2K_HOWTO (R_IP2K_LO8DATA, 0,1,8, FALSE, 0, "R_IP2K_LO8DATA", 0, 0x00ff),
-  IP2K_HOWTO (R_IP2K_HI8DATA, 8,1,8, FALSE, 0, "R_IP2K_HI8DATA", 0, 0x00ff),
+  IP2K_HOWTO (R_IP2K_LO8DATA, 0,2,8, false, 0, "R_IP2K_LO8DATA", 0, 0x00ff),
+  IP2K_HOWTO (R_IP2K_HI8DATA, 8,2,8, false, 0, "R_IP2K_HI8DATA", 0, 0x00ff),
   /* Two 8-bit insn relocations.  word address => right-shift 1 bit extra.  */
-  IP2K_HOWTO (R_IP2K_LO8INSN, 1,1,8, FALSE, 0, "R_IP2K_LO8INSN", 0, 0x00ff),
-  IP2K_HOWTO (R_IP2K_HI8INSN, 9,1,8, FALSE, 0, "R_IP2K_HI8INSN", 0, 0x00ff),
+  IP2K_HOWTO (R_IP2K_LO8INSN, 1,2,8, false, 0, "R_IP2K_LO8INSN", 0, 0x00ff),
+  IP2K_HOWTO (R_IP2K_HI8INSN, 9,2,8, false, 0, "R_IP2K_HI8INSN", 0, 0x00ff),
 
   /* Special 1 bit relocation for SKIP instructions.  */
-  IP2K_HOWTO (R_IP2K_PC_SKIP, 1,1,1, FALSE, 12, "R_IP2K_PC_SKIP", 0xfffe, 0x1000),
+  IP2K_HOWTO (R_IP2K_PC_SKIP, 1,2,1, false, 12, "R_IP2K_PC_SKIP", 0xfffe, 0x1000),
   /* 16 bit word address.  */
-  IP2K_HOWTO (R_IP2K_TEXT, 1,1,16, FALSE, 0, "R_IP2K_TEXT", 0, 0xffff),
+  IP2K_HOWTO (R_IP2K_TEXT, 1,2,16, false, 0, "R_IP2K_TEXT", 0, 0xffff),
   /* A 7-bit offset relocation for the FR9 field.  Eigth and ninth bit comes from insn.  */
-  IP2K_HOWTO (R_IP2K_FR_OFFSET, 0,1,9, FALSE, 0, "R_IP2K_FR_OFFSET", 0x180, 0x007f),
+  IP2K_HOWTO (R_IP2K_FR_OFFSET, 0,2,9, false, 0, "R_IP2K_FR_OFFSET", 0x180, 0x007f),
   /* Bits 23:16 of an address.  */
-  IP2K_HOWTO (R_IP2K_EX8DATA, 16,1,8, FALSE, 0, "R_IP2K_EX8DATA", 0, 0x00ff),
+  IP2K_HOWTO (R_IP2K_EX8DATA, 16,2,8, false, 0, "R_IP2K_EX8DATA", 0, 0x00ff),
 };
 
 
@@ -247,7 +247,7 @@ ip2k_get_mem (bfd *abfd ATTRIBUTE_UNUSED
     * ptr ++ = bfd_get_8 (abfd, addr ++);
 }
 
-static bfd_boolean
+static bool
 ip2k_is_opcode (bfd_byte *code, const struct ip2k_opcode *opcodes)
 {
   unsigned short insn = (code[0] << 8) | code[1];
@@ -255,12 +255,12 @@ ip2k_is_opcode (bfd_byte *code, const st
   while (opcodes->mask != 0)
     {
       if ((insn & opcodes->mask) == opcodes->opcode)
-	return TRUE;
+	return true;
 
       opcodes ++;
     }
 
-  return FALSE;
+  return false;
 }
 
 #define PAGENO(ABSADDR) ((ABSADDR) & 0xFFFFC000)
@@ -530,7 +530,7 @@ ip2k_nominal_page_bits (bfd *abfd ATTRIB
   return 0;
 }
 
-static bfd_boolean
+static bool
 ip2k_test_page_insn (bfd *abfd ATTRIBUTE_UNUSED,
 		     asection *sec,
 		     Elf_Internal_Rela *irel,
@@ -544,14 +544,14 @@ ip2k_test_page_insn (bfd *abfd ATTRIBUTE
     /* This appears to be a reference to an undefined
        symbol.  Just ignore it--it will be caught by the
        regular reloc processing.  */
-    return FALSE;
+    return false;
 
   /* Test if we can delete this page instruction.  */
   if (PAGENO (symval + irel->r_addend) !=
       ip2k_nominal_page_bits (abfd, sec, irel->r_offset, misc->contents))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Parts of a Stabs entry.  */
@@ -623,7 +623,7 @@ adjust_all_relocations (bfd *abfd,
 
   /* Now fix the stab relocations.  */
   stab = bfd_get_section_by_name (abfd, ".stab");
-  if (stab)
+  if (stab && stab->reloc_count != 0)
     {
       bfd_byte *stabcontents, *stabend, *stabp;
       bfd_size_type stab_size = stab->rawsize ? stab->rawsize : stab->size;
@@ -638,8 +638,7 @@ adjust_all_relocations (bfd *abfd,
 	{
 	  if (!bfd_malloc_and_get_section (abfd, stab, &stabcontents))
 	    {
-	      if (stabcontents != NULL)
-		free (stabcontents);
+	      free (stabcontents);
 	      return;
 	    }
 
@@ -781,7 +780,7 @@ adjust_all_relocations (bfd *abfd,
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 ip2k_elf_relax_delete_bytes (bfd *abfd,
 			     asection *sec,
 			     bfd_vma addr,
@@ -797,14 +796,14 @@ ip2k_elf_relax_delete_bytes (bfd *abfd,
   sec->size -= count;
 
   adjust_all_relocations (abfd, sec, addr + count, endaddr, -count, 0);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 ip2k_delete_page_insn (bfd *abfd ATTRIBUTE_UNUSED,
 		       asection *sec,
 		       Elf_Internal_Rela *irel,
-		       bfd_boolean *again,
+		       bool *again,
 		       struct misc *misc)
 {
   /* Note that we've changed the relocs, section contents, etc.  */
@@ -817,19 +816,19 @@ ip2k_delete_page_insn (bfd *abfd ATTRIBU
 
   /* Delete the PAGE insn.  */
   if (!ip2k_elf_relax_delete_bytes (abfd, sec, irel->r_offset, 2))
-    return FALSE;
+    return false;
 
   /* Modified => will need to iterate relaxation again.  */
-  *again = TRUE;
+  *again = true;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 ip2k_relax_switch_table_128 (bfd *abfd ATTRIBUTE_UNUSED,
 			     asection *sec,
 			     Elf_Internal_Rela *irel,
-			     bfd_boolean *again,
+			     bool *again,
 			     struct misc *misc)
 {
   Elf_Internal_Rela *irelend = misc->irelbase + sec->reloc_count;
@@ -854,18 +853,18 @@ ip2k_relax_switch_table_128 (bfd *abfd A
       if (ireltest >= irelend)
 	{
 	  _bfd_error_handler (_("ip2k relaxer: switch table without complete matching relocation information."));
-	  return FALSE;
+	  return false;
 	}
 
       if (ireltest->r_offset != addr)
 	{
 	  _bfd_error_handler (_("ip2k relaxer: switch table without complete matching relocation information."));
-	  return FALSE;
+	  return false;
 	}
 
       if (! ip2k_test_page_insn (abfd, sec, ireltest, misc))
 	/* Un-removable page insn => nothing can be done.  */
-	return TRUE;
+	return true;
 
       addr += 4;
       ireltest += 2;
@@ -877,30 +876,30 @@ ip2k_relax_switch_table_128 (bfd *abfd A
       || (! IS_ADD_PCL_W_OPCODE (code + 2)))
     {
       _bfd_error_handler (_("ip2k relaxer: switch table header corrupt."));
-      return FALSE;
+      return false;
     }
 
   if (!ip2k_elf_relax_delete_bytes (abfd, sec, irel->r_offset - 4, 2))
-    return FALSE;
+    return false;
 
-  *again = TRUE;
+  *again = true;
 
   /* Delete all page instructions in table.  */
   while (irel < ireltest)
     {
       if (!ip2k_delete_page_insn (abfd, sec, irel, again, misc))
-	return FALSE;
+	return false;
       irel += 2;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 ip2k_relax_switch_table_256 (bfd *abfd ATTRIBUTE_UNUSED,
 			     asection *sec,
 			     Elf_Internal_Rela *irel,
-			     bfd_boolean *again,
+			     bool *again,
 			     struct misc *misc)
 {
   Elf_Internal_Rela *irelend = misc->irelbase + sec->reloc_count;
@@ -927,18 +926,18 @@ ip2k_relax_switch_table_256 (bfd *abfd A
       if (ireltest >= irelend)
 	{
 	  _bfd_error_handler (_("ip2k relaxer: switch table without complete matching relocation information."));
-	  return FALSE;
+	  return false;
 	}
 
       if (ireltest->r_offset != addr)
 	{
 	  _bfd_error_handler (_("ip2k relaxer: switch table without complete matching relocation information."));
-	  return FALSE;
+	  return false;
 	}
 
       if (!ip2k_test_page_insn (abfd, sec, ireltest, misc))
 	/* Un-removable page insn => nothing can be done.  */
-	return TRUE;
+	return true;
 
       addr += 4;
       ireltest += 2;
@@ -960,32 +959,32 @@ ip2k_relax_switch_table_256 (bfd *abfd A
       || (!IS_INC_1SP_OPCODE (code + 10)))
     {
       _bfd_error_handler (_("ip2k relaxer: switch table header corrupt."));
-      return FALSE;
+      return false;
     }
 
   /* Delete first 3 opcodes.  */
   if (!ip2k_elf_relax_delete_bytes (abfd, sec, addr + 0, 6))
-    return FALSE;
+    return false;
 
-  *again = TRUE;
+  *again = true;
 
   /* Delete all page instructions in table.  */
   while (irel < ireltest)
     {
       if (!ip2k_delete_page_insn (abfd, sec, irel, again, misc))
-	return FALSE;
+	return false;
       irel += 2;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function handles relaxation of a section in a specific page.  */
 
-static bfd_boolean
+static bool
 ip2k_elf_relax_section_page (bfd *abfd,
 			     asection *sec,
-			     bfd_boolean *again,
+			     bool *again,
 			     struct misc *misc,
 			     unsigned long page_start,
 			     unsigned long page_end)
@@ -1010,7 +1009,7 @@ ip2k_elf_relax_section_page (bfd *abfd,
 
       if (BASEADDR (sec) + irel->r_offset > page_end)
 	/* Flow beyond end of page => nothing more to do for this page.  */
-	return TRUE;
+	return true;
 
       /* Detect switch tables.  */
       switch_table_128 = ip2k_is_switch_table_128 (abfd, sec, irel->r_offset, misc->contents);
@@ -1023,7 +1022,7 @@ ip2k_elf_relax_section_page (bfd *abfd,
       if (switch_table_128 == 0)
 	{
 	  if (!ip2k_relax_switch_table_128 (abfd, sec, irel, again, misc))
-	    return FALSE;
+	    return false;
 
 	  continue;
 	}
@@ -1031,7 +1030,7 @@ ip2k_elf_relax_section_page (bfd *abfd,
       if (switch_table_256 == 0)
 	{
 	  if (!ip2k_relax_switch_table_256 (abfd, sec, irel, again, misc))
-	    return FALSE;
+	    return false;
 
 	  continue;
 	}
@@ -1040,13 +1039,13 @@ ip2k_elf_relax_section_page (bfd *abfd,
       if (ip2k_test_page_insn (abfd, sec, irel, misc))
 	{
 	  if (!ip2k_delete_page_insn (abfd, sec, irel, again, misc))
-	    return FALSE;
+	    return false;
 
 	  continue;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function handles relaxing for the ip2k.
@@ -1059,11 +1058,11 @@ ip2k_elf_relax_section_page (bfd *abfd,
    Processing the pages one at a time from the lowest page allows a removal
    only policy to be used - pages can be removed but are never reinserted.  */
 
-static bfd_boolean
+static bool
 ip2k_elf_relax_section (bfd *abfd,
 			asection *sec,
 			struct bfd_link_info *link_info,
-			bfd_boolean *again)
+			bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -1074,33 +1073,34 @@ ip2k_elf_relax_section (bfd *abfd,
   static unsigned long page_start = 0;
   static unsigned long page_end = 0;
   static unsigned int pass = 0;
-  static bfd_boolean new_pass = FALSE;
-  static bfd_boolean changed = FALSE;
+  static bool new_pass = false;
+  static bool changed = false;
   struct misc misc;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   if (first_section == NULL)
     {
-      ip2k_relaxed = TRUE;
+      ip2k_relaxed = true;
       first_section = sec;
     }
 
   if (first_section == sec)
     {
       pass++;
-      new_pass = TRUE;
+      new_pass = true;
     }
 
   /* We don't have to do anything for a relocatable link,
      if this section does not have relocs, or if this is
      not a code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -1150,8 +1150,8 @@ ip2k_elf_relax_section (bfd *abfd,
       if (new_pass)
 	{
 	  pass = 1;
-	  new_pass = FALSE;
-	  changed = TRUE; /* Pre-initialize to break out of pass 1.  */
+	  new_pass = false;
+	  changed = true; /* Pre-initialize to break out of pass 1.  */
 	  search_addr = 0xFFFFFFFF;
 	}
 
@@ -1164,15 +1164,15 @@ ip2k_elf_relax_section (bfd *abfd,
 	    search_addr = BASEADDR (sec);
 
 	  /* Found a page => more work to do.  */
-	  *again = TRUE;
+	  *again = true;
 	}
     }
   else
     {
       if (new_pass)
 	{
-	  new_pass = FALSE;
-	  changed = FALSE;
+	  new_pass = false;
+	  changed = false;
 	  page_start = PAGENO (search_addr);
 	  page_end = page_start | 0x00003FFF;
 	}
@@ -1182,9 +1182,9 @@ ip2k_elf_relax_section (bfd *abfd,
 	  && (BASEADDR (sec) <= page_end))
 	{
 	  if (!ip2k_elf_relax_section_page (abfd, sec, &changed, &misc, page_start, page_end))
-	    return FALSE;
+	    return false;
 	}
-      *again = TRUE;
+      *again = true;
     }
 
   /* Perform some house keeping after relaxing the section.  */
@@ -1210,28 +1210,24 @@ ip2k_elf_relax_section (bfd *abfd,
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 
 /* Set the howto pointer for a IP2K ELF reloc.  */
 
-static bfd_boolean
+static bool
 ip2k_info_to_howto_rela (bfd * abfd,
 			 arelent * cache_ptr,
 			 Elf_Internal_Rela * dst)
@@ -1245,10 +1241,10 @@ ip2k_info_to_howto_rela (bfd * abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & ip2k_elf_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 /* Perform a single relocation.
@@ -1389,7 +1385,7 @@ ip2k_final_link_relocate (reloc_howto_ty
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -1439,8 +1435,8 @@ ip2k_elf_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
-	  bfd_boolean unresolved_reloc;
+	  bool warned, ignored;
+	  bool unresolved_reloc;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1475,7 +1471,7 @@ ip2k_elf_relocate_section (bfd *output_b
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -1504,7 +1500,7 @@ ip2k_elf_relocate_section (bfd *output_b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 #define TARGET_BIG_SYM	 ip2k_elf32_vec
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-iq2000.c ./bfd/elf32-iq2000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-iq2000.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-iq2000.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* IQ2000-specific support for 32-bit ELF.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -35,54 +35,54 @@ static reloc_howto_type iq2000_elf_howto
 
   HOWTO (R_IQ2000_NONE,		     /* type */
 	 0,			     /* rightshift */
-	 3,			     /* size (0 = byte, 1 = short, 2 = long) */
+	 0,			     /* size */
 	 0,			     /* bitsize */
-	 FALSE,			     /* pc_relative */
+	 false,			     /* pc_relative */
 	 0,			     /* bitpos */
 	 complain_overflow_dont,     /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	     /* special_function */
 	 "R_IQ2000_NONE",	     /* name */
-	 FALSE,			     /* partial_inplace */
+	 false,			     /* partial_inplace */
 	 0,			     /* src_mask */
 	 0,			     /* dst_mask */
-	 FALSE),		     /* pcrel_offset */
+	 false),		     /* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_IQ2000_16,		     /* type */
 	 0,			     /* rightshift */
-	 1,			     /* size (0 = byte, 1 = short, 2 = long) */
+	 2,			     /* size */
 	 16,			     /* bitsize */
-	 FALSE,			     /* pc_relative */
+	 false,			     /* pc_relative */
 	 0,			     /* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	     /* special_function */
 	 "R_IQ2000_16",		     /* name */
-	 FALSE,			     /* partial_inplace */
+	 false,			     /* partial_inplace */
 	 0x0000,		     /* src_mask */
 	 0xffff,		     /* dst_mask */
-	 FALSE),		     /* pcrel_offset */
+	 false),		     /* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_IQ2000_32,		     /* type */
 	 0,			     /* rightshift */
-	 2,			     /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			     /* size */
 	 31,			     /* bitsize */
-	 FALSE,			     /* pc_relative */
+	 false,			     /* pc_relative */
 	 0,			     /* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	     /* special_function */
 	 "R_IQ2000_32",		     /* name */
-	 FALSE,			     /* partial_inplace */
+	 false,			     /* partial_inplace */
 	 0x00000000,		     /* src_mask */
 	 0x7fffffff,		     /* dst_mask */
-	 FALSE),		     /* pcrel_offset */
+	 false),		     /* pcrel_offset */
 
   /* 26 bit branch address.  */
   HOWTO (R_IQ2000_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -90,115 +90,115 @@ static reloc_howto_type iq2000_elf_howto
 				   bits must match the PC.  */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_IQ2000_26",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit PC relative reference.  */
   HOWTO (R_IQ2000_PC16,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_IQ2000_PC16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* high 16 bits of symbol value.  */
   HOWTO (R_IQ2000_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 iq2000_elf_howto_hi16_reloc,	/* special_function */
 	 "R_IQ2000_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x7fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_IQ2000_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_IQ2000_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16-bit jump offset.  */
   HOWTO (R_IQ2000_OFFSET_16,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_IQ2000_OFFSET_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 21-bit jump offset.  */
   HOWTO (R_IQ2000_OFFSET_21,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_IQ2000_OFFSET_21",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000000,		/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* unsigned high 16 bits of value.  */
   HOWTO (R_IQ2000_OFFSET_21,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_IQ2000_UHI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x7fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute debug relocation.  */
   HOWTO (R_IQ2000_32_DEBUG,	     /* type */
 	 0,			     /* rightshift */
-	 2,			     /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			     /* size */
 	 32,			     /* bitsize */
-	 FALSE,			     /* pc_relative */
+	 false,			     /* pc_relative */
 	 0,			     /* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	     /* special_function */
 	 "R_IQ2000_32",		     /* name */
-	 FALSE,			     /* partial_inplace */
+	 false,			     /* partial_inplace */
 	 0x00000000,		     /* src_mask */
 	 0xffffffff,		     /* dst_mask */
-	 FALSE),		     /* pcrel_offset */
+	 false),		     /* pcrel_offset */
 
 };
 
@@ -206,33 +206,33 @@ static reloc_howto_type iq2000_elf_howto
 static reloc_howto_type iq2000_elf_vtinherit_howto =
   HOWTO (R_IQ2000_GNU_VTINHERIT,    /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			   /* size */
 	 0,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_dont,   /* complain_on_overflow */
 	 NULL,			   /* special_function */
 	 "R_IQ2000_GNU_VTINHERIT",  /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0,			   /* src_mask */
 	 0,			   /* dst_mask */
-	 FALSE);		   /* pcrel_offset */
+	 false);		   /* pcrel_offset */
 
 /* GNU extension to record C++ vtable member usage.  */
 static reloc_howto_type iq2000_elf_vtentry_howto =
   HOWTO (R_IQ2000_GNU_VTENTRY,	   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			   /* size */
 	 0,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_dont,   /* complain_on_overflow */
 	 NULL,			   /* special_function */
 	 "R_IQ2000_GNU_VTENTRY",    /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0,			   /* src_mask */
 	 0,			   /* dst_mask */
-	 FALSE);		   /* pcrel_offset */
+	 false);		   /* pcrel_offset */
 
 
 static bfd_reloc_status_type
@@ -417,7 +417,7 @@ iq2000_final_link_relocate (reloc_howto_
 
 /* Set the howto pointer for a IQ2000 ELF reloc.  */
 
-static bfd_boolean
+static bool
 iq2000_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
 			   arelent * cache_ptr,
 			   Elf_Internal_Rela * dst)
@@ -442,19 +442,19 @@ iq2000_info_to_howto_rela (bfd * abfd AT
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      abfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       cache_ptr->howto = & iq2000_elf_howto_table [r_type];
       break;
     }
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.	 */
 
-static bfd_boolean
+static bool
 iq2000_elf_check_relocs (bfd *abfd,
 			 struct bfd_link_info *info,
 			 asection *sec,
@@ -464,10 +464,10 @@ iq2000_elf_check_relocs (bfd *abfd,
   struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
-  bfd_boolean changed = FALSE;
+  bool changed = false;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -495,25 +495,25 @@ iq2000_elf_check_relocs (bfd *abfd,
 	     hierarchy.  Reconstruct it for later use during GC.  */
 	case R_IQ2000_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries
 	     are actually used.  Record for later use during GC.  */
 	case R_IQ2000_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_IQ2000_32:
 	  /* For debug section, change to special harvard-aware relocations.  */
-	  if (CONST_STRNEQ (sec->name, ".debug")
-	      || CONST_STRNEQ (sec->name, ".stab")
-	      || CONST_STRNEQ (sec->name, ".eh_frame"))
+	  if (startswith (sec->name, ".debug")
+	      || startswith (sec->name, ".stab")
+	      || startswith (sec->name, ".eh_frame"))
 	    {
 	      ((Elf_Internal_Rela *) rel)->r_info
 		= ELF32_R_INFO (ELF32_R_SYM (rel->r_info), R_IQ2000_32_DEBUG);
-	      changed = TRUE;
+	      changed = true;
 	    }
 	  break;
 	}
@@ -524,7 +524,7 @@ iq2000_elf_check_relocs (bfd *abfd,
        we'll free the relocs and lose our changes.  */
     elf_section_data (sec)->relocs = (Elf_Internal_Rela *) relocs;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -561,7 +561,7 @@ iq2000_elf_check_relocs (bfd *abfd,
    section, which means that the addend must be adjusted
    accordingly.	 */
 
-static bfd_boolean
+static int
 iq2000_elf_relocate_section (bfd *		     output_bfd ATTRIBUTE_UNUSED,
 			     struct bfd_link_info *  info,
 			     bfd *		     input_bfd,
@@ -629,8 +629,8 @@ iq2000_elf_relocate_section (bfd *
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc;
-	  bfd_boolean warned, ignored;
+	  bool unresolved_reloc;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -684,7 +684,7 @@ iq2000_elf_relocate_section (bfd *
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -710,7 +710,7 @@ iq2000_elf_relocate_section (bfd *
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -755,24 +755,24 @@ elf32_iq2000_machine (bfd *abfd)
 
 /* Function to set the ELF flag bits.  */
 
-static bfd_boolean
+static bool
 iq2000_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object
    file to the output object file when linking.  */
 
-static bfd_boolean
+static bool
 iq2000_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword old_flags, old_partial;
   flagword new_flags, new_partial;
-  bfd_boolean error = FALSE;
+  bool error = false;
   char new_opt[80];
   char old_opt[80];
 
@@ -783,7 +783,7 @@ iq2000_elf_merge_private_bfd_data (bfd *
   if (!elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
 
@@ -824,7 +824,7 @@ iq2000_elf_merge_private_bfd_data (bfd *
       /* Print out any mismatches from above.  */
       if (new_opt[0])
 	{
-	  error = TRUE;
+	  error = true;
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: compiled with %s and linked with modules compiled with %s"),
@@ -837,7 +837,7 @@ iq2000_elf_merge_private_bfd_data (bfd *
       /* Warn about any other mismatches.  */
       if (new_flags != old_flags)
 	{
-	  error = TRUE;
+	  error = true;
 
 	  _bfd_error_handler
 	    /* xgettext:c-format */
@@ -853,7 +853,7 @@ iq2000_elf_merge_private_bfd_data (bfd *
 }
 
 
-static bfd_boolean
+static bool
 iq2000_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -880,16 +880,16 @@ iq2000_elf_print_private_bfd_data (bfd *
     }
 
   fputc ('\n', file);
-  return TRUE;
+  return true;
 }
 
 static
-bfd_boolean
+bool
 iq2000_elf_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_iq2000,
 			     elf32_iq2000_machine (abfd));
-  return TRUE;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-lm32.c ./bfd/elf32-lm32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-lm32.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-lm32.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Lattice Mico32-specific support for 32-bit ELF
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2024 Free Software Foundation, Inc.
    Contributed by Jon Beniston <jon@beniston.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -50,16 +50,6 @@ extern const bfd_target lm32_elf32_fdpic
 static bfd_reloc_status_type lm32_elf_gprel_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 
-/* lm32 ELF linker hash entry.  */
-
-struct elf_lm32_link_hash_entry
-{
-  struct elf_link_hash_entry root;
-
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-};
-
 /* lm32 ELF linker hash table.  */
 
 struct elf_lm32_link_hash_table
@@ -77,8 +67,9 @@ struct elf_lm32_link_hash_table
 /* Get the lm32 ELF linker hash table from a link_info structure.  */
 
 #define lm32_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == LM32_ELF_DATA ? ((struct elf_lm32_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == LM32_ELF_DATA)		\
+   ? (struct elf_lm32_link_hash_table *) (p)->hash : NULL)
 
 #define lm32fdpic_got_section(info) \
   (lm32_elf_hash_table (info)->root.sgot)
@@ -93,54 +84,21 @@ struct weak_symbol_list
   struct weak_symbol_list *next;
 };
 
-/* Create an entry in an lm32 ELF linker hash table.  */
-
-static struct bfd_hash_entry *
-lm32_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
-			    struct bfd_hash_table *table,
-			    const char *string)
-{
-  struct elf_lm32_link_hash_entry *ret =
-    (struct elf_lm32_link_hash_entry *) entry;
-
-  /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
-  if (ret == NULL)
-    ret = bfd_hash_allocate (table,
-			     sizeof (struct elf_lm32_link_hash_entry));
-  if (ret == NULL)
-    return NULL;
-
-  /* Call the allocation method of the superclass.  */
-  ret = ((struct elf_lm32_link_hash_entry *)
-	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
-				     table, string));
-  if (ret != NULL)
-    {
-      struct elf_lm32_link_hash_entry *eh;
-
-      eh = (struct elf_lm32_link_hash_entry *) ret;
-      eh->dyn_relocs = NULL;
-    }
-
-  return (struct bfd_hash_entry *) ret;
-}
-
 /* Create an lm32 ELF linker hash table.  */
 
 static struct bfd_link_hash_table *
 lm32_elf_link_hash_table_create (bfd *abfd)
 {
   struct elf_lm32_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_lm32_link_hash_table);
+  size_t amt = sizeof (struct elf_lm32_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
     return NULL;
 
   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
-				      lm32_elf_link_hash_newfunc,
-				      sizeof (struct elf_lm32_link_hash_entry),
+				      _bfd_elf_link_hash_newfunc,
+				      sizeof (struct elf_link_hash_entry),
 				      LM32_ELF_DATA))
     {
       free (ret);
@@ -175,14 +133,14 @@ _lm32fdpic_add_rofixup (bfd *output_bfd,
 /* Create .rofixup sections in DYNOBJ, and set up
    shortcuts to them in our hash table.  */
 
-static bfd_boolean
+static bool
 create_rofixup_section (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf_lm32_link_hash_table *htab;
   htab = lm32_elf_hash_table (info);
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Fixup section for R_LM32_32 relocs.  */
   lm32fdpic_fixup32_section (info)
@@ -196,9 +154,9 @@ create_rofixup_section (bfd *dynobj, str
 					   | SEC_READONLY));
   if (lm32fdpic_fixup32_section (info) == NULL
       || !bfd_set_section_alignment (lm32fdpic_fixup32_section (info), 2))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type lm32_elf_howto_table [] =
@@ -206,260 +164,260 @@ static reloc_howto_type lm32_elf_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_LM32_NONE,		    /* type */
 	 0,			    /* rightshift */
-	 3,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 0,			    /* size */
 	 0,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_dont,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_NONE",		    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0,			    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   /* An 8 bit absolute relocation.  */
   HOWTO (R_LM32_8,		    /* type */
 	 0,			    /* rightshift */
-	 0,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 1,			    /* size */
 	 8,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_8",		    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0xff,			    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_LM32_16,		    /* type */
 	 0,			    /* rightshift */
-	 1,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 2,			    /* size */
 	 16,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_16",		    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0xffff,		    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_LM32_32,		    /* type */
 	 0,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 32,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_32",		    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0xffffffff,		    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   HOWTO (R_LM32_HI16,		    /* type */
 	 16,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 16,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_HI16",		    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0xffff,		    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   HOWTO (R_LM32_LO16,		    /* type */
 	 0,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 16,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_dont,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_LO16",		    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0xffff,		    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   HOWTO (R_LM32_GPREL16,	    /* type */
 	 0,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 16,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_dont,    /* complain_on_overflow */
 	 lm32_elf_gprel_reloc,	    /* special_function */
 	 "R_LM32_GPREL16",	    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0xffff,		    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   HOWTO (R_LM32_CALL,		    /* type */
 	 2,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 26,			    /* bitsize */
-	 TRUE,			    /* pc_relative */
+	 true,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_signed,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_CALL",		    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0x3ffffff,		    /* dst_mask */
-	 TRUE),			    /* pcrel_offset */
+	 true),			    /* pcrel_offset */
 
   HOWTO (R_LM32_BRANCH,		    /* type */
 	 2,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 16,			    /* bitsize */
-	 TRUE,			    /* pc_relative */
+	 true,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_signed,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_BRANCH",	    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0xffff,		    /* dst_mask */
-	 TRUE),			    /* pcrel_offset */
+	 true),			    /* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_LM32_GNU_VTINHERIT,	    /* type */
 	 0,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 0,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_dont,    /* complain_on_overflow */
 	 NULL,			    /* special_function */
 	 "R_LM32_GNU_VTINHERIT",    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0,			    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_LM32_GNU_VTENTRY,	    /* type */
 	 0,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 0,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_dont,    /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,/* special_function */
 	 "R_LM32_GNU_VTENTRY",	    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0,			    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   HOWTO (R_LM32_16_GOT,		    /* type */
 	 0,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 16,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_signed,  /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_16_GOT",	    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0,			    /* src_mask */
 	 0xffff,		    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   HOWTO (R_LM32_GOTOFF_HI16,	    /* type */
 	 16,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 16,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_dont,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_GOTOFF_HI16",	    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0xffff,		    /* src_mask */
 	 0xffff,		    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   HOWTO (R_LM32_GOTOFF_LO16,	    /* type */
 	 0,			    /* rightshift */
-	 2,			    /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			    /* size */
 	 16,			    /* bitsize */
-	 FALSE,			    /* pc_relative */
+	 false,			    /* pc_relative */
 	 0,			    /* bitpos */
 	 complain_overflow_dont,    /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	    /* special_function */
 	 "R_LM32_GOTOFF_LO16",	    /* name */
-	 FALSE,			    /* partial_inplace */
+	 false,			    /* partial_inplace */
 	 0xffff,		    /* src_mask */
 	 0xffff,		    /* dst_mask */
-	 FALSE),		    /* pcrel_offset */
+	 false),		    /* pcrel_offset */
 
   HOWTO (R_LM32_COPY,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_LM32_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_LM32_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_LM32_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_LM32_JMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_LM32_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_LM32_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_LM32_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 };
 
@@ -524,7 +482,7 @@ lm32_reloc_name_lookup (bfd *abfd ATTRIB
 
 /* Set the howto pointer for an Lattice Mico32 ELF reloc.  */
 
-static bfd_boolean
+static bool
 lm32_info_to_howto_rela (bfd *abfd,
 			 arelent *cache_ptr,
 			 Elf_Internal_Rela *dst)
@@ -538,15 +496,15 @@ lm32_info_to_howto_rela (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &lm32_elf_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 /* Set the right machine number for an Lattice Mico32 ELF file. */
 
-static bfd_boolean
+static bool
 lm32_elf_object_p (bfd *abfd)
 {
   return bfd_default_set_arch_mach (abfd, bfd_arch_lm32, bfd_mach_lm32);
@@ -554,7 +512,7 @@ lm32_elf_object_p (bfd *abfd)
 
 /* Set machine type flags just before file is written out. */
 
-static bfd_boolean
+static bool
 lm32_elf_final_write_processing (bfd *abfd)
 {
   elf_elfheader (abfd)->e_machine = EM_LATTICEMICO32;
@@ -573,7 +531,7 @@ lm32_elf_final_write_processing (bfd *ab
 /* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
    dangerous relocation.  */
 
-static bfd_boolean
+static bool
 lm32_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp)
 {
   unsigned int count;
@@ -583,7 +541,7 @@ lm32_elf_assign_gp (bfd *output_bfd, bfd
   /* If we've already figured out what GP will be, just return it. */
   *pgp = _bfd_get_gp_value (output_bfd);
   if (*pgp)
-    return TRUE;
+    return true;
 
   count = bfd_get_symcount (output_bfd);
   sym = bfd_get_outsymbols (output_bfd);
@@ -613,10 +571,10 @@ lm32_elf_assign_gp (bfd *output_bfd, bfd
       /* Only get the error once.  */
       *pgp = 4;
       _bfd_set_gp_value (output_bfd, *pgp);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We have to figure out the gp value, so that we can adjust the
@@ -626,7 +584,7 @@ lm32_elf_assign_gp (bfd *output_bfd, bfd
    external symbol if we are producing relocatable output.  */
 
 static bfd_reloc_status_type
-lm32_elf_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable,
+lm32_elf_final_gp (bfd *output_bfd, asymbol *symbol, bool relocatable,
 		    char **error_message, bfd_vma *pgp)
 {
   if (bfd_is_und_section (symbol->section) && !relocatable)
@@ -697,7 +655,7 @@ lm32_elf_gprel_reloc (bfd *abfd,
     + symbol->section->output_section->vma + symbol->section->output_offset;
 
   if ((r =
-       lm32_elf_final_gp (abfd, symbol, FALSE, msg, &gp)) == bfd_reloc_ok)
+       lm32_elf_final_gp (abfd, symbol, false, msg, &gp)) == bfd_reloc_ok)
     {
       relocation = relocation + reloc_entry->addend - gp;
       reloc_entry->addend = 0;
@@ -747,7 +705,7 @@ _lm32fdpic_osec_to_segment (bfd *output_
 
 /* Determine if an output section is read-only.  */
 
-inline static bfd_boolean
+inline static bool
 _lm32fdpic_osec_readonly_p (bfd *output_bfd, asection *osec)
 {
   unsigned seg = _lm32fdpic_osec_to_segment (output_bfd, osec);
@@ -757,7 +715,7 @@ _lm32fdpic_osec_readonly_p (bfd *output_
 
 /* Relocate a section */
 
-static bfd_boolean
+static int
 lm32_elf_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -775,7 +733,7 @@ lm32_elf_relocate_section (bfd *output_b
   asection *sgot;
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   local_got_offsets = elf_local_got_offsets (input_bfd);
 
@@ -825,8 +783,8 @@ lm32_elf_relocate_section (bfd *output_b
       else
 	{
 	  /* It's a global symbol.  */
-	  bfd_boolean unresolved_reloc;
-	  bfd_boolean warned, ignored;
+	  bool unresolved_reloc;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -885,7 +843,7 @@ lm32_elf_relocate_section (bfd *output_b
 	      BFD_ASSERT (sgot != NULL);
 	      if (h != NULL)
 		{
-		  bfd_boolean dyn;
+		  bool dyn;
 		  bfd_vma off;
 
 		  off = h->got.offset;
@@ -1048,7 +1006,7 @@ lm32_elf_relocate_section (bfd *output_b
 				(info,
 				 _("cannot emit dynamic relocations in read-only section"),
 				 name, input_bfd, input_section, rel->r_offset);
-			       return FALSE;
+			       return false;
 			    }
 			  /* Create entry in .rofixup section.  */
 			  _lm32fdpic_add_rofixup (output_bfd,
@@ -1105,7 +1063,7 @@ lm32_elf_relocate_section (bfd *output_b
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -1132,7 +1090,7 @@ lm32_elf_relocate_section (bfd *output_b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static asection *
@@ -1155,40 +1113,28 @@ lm32_elf_gc_mark_hook (asection *sec,
 
 /* Look through the relocs for a section during the first phase.  */
 
-static bfd_boolean
+static bool
 lm32_elf_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
 		       const Elf_Internal_Rela *relocs)
 {
   Elf_Internal_Shdr *symtab_hdr;
-  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
+  struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
   struct elf_lm32_link_hash_table *htab;
   bfd *dynobj;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
-  sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym);
-  if (!elf_bad_symtab (abfd))
-    sym_hashes_end -= symtab_hdr->sh_info;
 
   htab = lm32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
 
@@ -1222,7 +1168,7 @@ lm32_elf_check_relocs (bfd *abfd,
 	      if (dynobj == NULL)
 		htab->root.dynobj = dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return FALSE;
+		return false;
 	      break;
 	    }
 	}
@@ -1238,12 +1184,12 @@ lm32_elf_check_relocs (bfd *abfd,
 	      if (dynobj == NULL)
 		htab->root.dynobj = dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return FALSE;
+		return false;
 	      /* Create .rofixup section */
 	      if (htab->sfixup32 == NULL)
 		{
 		  if (! create_rofixup_section (dynobj, info))
-		    return FALSE;
+		    return false;
 		}
 	      break;
 	    case R_LM32_16_GOT:
@@ -1255,7 +1201,7 @@ lm32_elf_check_relocs (bfd *abfd,
 		  if (dynobj == NULL)
 		    htab->root.dynobj = dynobj = abfd;
 		  if (! create_rofixup_section (dynobj, info))
-		    return FALSE;
+		    return false;
 		}
 	      break;
 	    }
@@ -1280,7 +1226,7 @@ lm32_elf_check_relocs (bfd *abfd,
 		  size *= sizeof (bfd_signed_vma);
 		  local_got_refcounts = bfd_zalloc (abfd, size);
 		  if (local_got_refcounts == NULL)
-		    return FALSE;
+		    return false;
 		  elf_local_got_refcounts (abfd) = local_got_refcounts;
 		}
 	      local_got_refcounts[r_symndx] += 1;
@@ -1291,25 +1237,25 @@ lm32_elf_check_relocs (bfd *abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_LM32_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_LM32_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 lm32_elf_finish_dynamic_sections (bfd *output_bfd,
 				  struct bfd_link_info *info)
 {
@@ -1320,7 +1266,7 @@ lm32_elf_finish_dynamic_sections (bfd *o
 
   htab = lm32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
 
@@ -1437,11 +1383,11 @@ lm32_elf_finish_dynamic_sections (bfd *o
 	     " != relocs %d",
 	    (int64_t) (lm32fdpic_fixup32_section (info)->size / 4),
 	    lm32fdpic_fixup32_section (info)->reloc_count);
-	  return FALSE;
+	  return false;
 	}
 
       hend = bfd_link_hash_lookup (info->hash, "__ROFIXUP_END__",
-	      FALSE, FALSE, TRUE);
+	      false, false, true);
       if (hend
 	  && (hend->type == bfd_link_hash_defined
 	      || hend->type == bfd_link_hash_defweak)
@@ -1460,18 +1406,18 @@ lm32_elf_finish_dynamic_sections (bfd *o
 		("LINKER BUG: .rofixup section hend->u.def.value != value: %"
 		 PRId64 " != %" PRId64,
 		 (int64_t) hend->u.def.value, (int64_t) value);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 lm32_elf_finish_dynamic_symbol (bfd *output_bfd,
 				struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
@@ -1482,7 +1428,7 @@ lm32_elf_finish_dynamic_symbol (bfd *out
 
   htab = lm32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (h->plt.offset != (bfd_vma) -1)
     {
@@ -1625,7 +1571,7 @@ lm32_elf_finish_dynamic_symbol (bfd *out
   if (h == htab->root.hdynamic || h == htab->root.hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -1642,31 +1588,13 @@ lm32_elf_reloc_type_class (const struct
     }
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-  struct elf_lm32_link_hash_entry *eh = (struct elf_lm32_link_hash_entry *) h;
-
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 lm32_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				struct elf_link_hash_entry *h)
 {
@@ -1705,7 +1633,7 @@ lm32_elf_adjust_dynamic_symbol (struct b
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) -1;
@@ -1719,7 +1647,7 @@ lm32_elf_adjust_dynamic_symbol (struct b
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -1730,26 +1658,26 @@ lm32_elf_adjust_dynamic_symbol (struct b
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (0 && info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (0 && !readonly_dynrelocs (h))
+  if (0 && !_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -1764,7 +1692,7 @@ lm32_elf_adjust_dynamic_symbol (struct b
 
   htab = lm32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   s = htab->sdynbss;
   BFD_ASSERT (s != NULL);
@@ -1789,23 +1717,20 @@ lm32_elf_adjust_dynamic_symbol (struct b
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info;
   struct elf_lm32_link_hash_table *htab;
-  struct elf_lm32_link_hash_entry *eh;
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = lm32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
-
-  eh = (struct elf_lm32_link_hash_entry *) h;
+    return false;
 
   if (htab->root.dynamic_sections_created
       && h->plt.refcount > 0)
@@ -1816,7 +1741,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
@@ -1867,7 +1792,7 @@ allocate_dynrelocs (struct elf_link_hash
   if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
 
       /* Make sure this symbol is output as a dynamic symbol.
 	 Undefined weak syms won't yet be marked as dynamic.  */
@@ -1875,7 +1800,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->root.sgot;
@@ -1889,8 +1814,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -1906,7 +1831,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL;)
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -1919,11 +1844,11 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -1931,7 +1856,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -1954,7 +1879,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -1963,63 +1888,36 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 lm32_elf_size_dynamic_sections (bfd *output_bfd,
 				struct bfd_link_info *info)
 {
   struct elf_lm32_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
   htab = lm32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -2105,7 +2003,7 @@ lm32_elf_size_dynamic_sections (bfd *out
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LINKER_CREATED) == 0)
@@ -2119,10 +2017,10 @@ lm32_elf_size_dynamic_sections (bfd *out
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0 && s != htab->root.srelplt)
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -2157,55 +2055,11 @@ lm32_elf_size_dynamic_sections (bfd *out
 	 of garbage.  */
       s->contents = bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (htab->root.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in lm32_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-     if (bfd_link_executable (info))
-	{
-	  if (! add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->root.splt->size != 0)
-	{
-	  if (! add_dynamic_entry (DT_PLTGOT, 0)
-	      || ! add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || ! add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || ! add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (! add_dynamic_entry (DT_RELA, 0)
-	      || ! add_dynamic_entry (DT_RELASZ, 0)
-	      || ! add_dynamic_entry (DT_RELAENT,
-				      sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->root, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (! add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
-    }
-#undef add_dynamic_entry
+  if (!_bfd_elf_add_dynamic_tags (output_bfd, info, relocs))
+    return false;
 
   /* Allocate .rofixup section.  */
   if (IS_FDPIC (output_bfd))
@@ -2213,7 +2067,7 @@ lm32_elf_size_dynamic_sections (bfd *out
       struct weak_symbol_list *list_start = NULL, *list_end = NULL;
       int rgot_weak_count = 0;
       int r32_count = 0;
-      int rgot_count = 0;
+      int rgot_count ATTRIBUTE_UNUSED = 0;
       /* Look for deleted sections.  */
       for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
 	{
@@ -2225,7 +2079,7 @@ lm32_elf_size_dynamic_sections (bfd *out
 		  Elf_Internal_Rela *internal_relocs, *end;
 		  internal_relocs = elf_section_data (s)->relocs;
 		  if (internal_relocs == NULL)
-		    internal_relocs = (_bfd_elf_link_read_relocs (ibfd, s, NULL, NULL, FALSE));
+		    internal_relocs = (_bfd_elf_link_read_relocs (ibfd, s, NULL, NULL, false));
 		  if (internal_relocs != NULL)
 		    {
 		      end = internal_relocs + s->reloc_count;
@@ -2284,7 +2138,7 @@ lm32_elf_size_dynamic_sections (bfd *out
 				      /* Create a new entry.  */
 				      new_entry = malloc (sizeof (struct weak_symbol_list));
 				      if (!new_entry)
-					return FALSE;
+					return false;
 				      new_entry->name = h->root.root.string;
 				      new_entry->next = NULL;
 				      /* Add to list */
@@ -2307,7 +2161,7 @@ lm32_elf_size_dynamic_sections (bfd *out
 			}
 		    }
 		  else
-		    return FALSE;
+		    return false;
 		}
 	    }
 	}
@@ -2329,16 +2183,16 @@ lm32_elf_size_dynamic_sections (bfd *out
 	  lm32fdpic_fixup32_section (info)->contents =
 	     bfd_zalloc (dynobj, lm32fdpic_fixup32_section (info)->size);
 	  if (lm32fdpic_fixup32_section (info)->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create dynamic sections when linking against a dynamic object.  */
 
-static bfd_boolean
+static bool
 lm32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_lm32_link_hash_table *htab;
@@ -2349,16 +2203,16 @@ lm32_elf_create_dynamic_sections (bfd *a
 
   htab = lm32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Make sure we have a GOT - For the case where we have a dynamic object
      but none of the relocs in check_relocs */
   if (!_bfd_elf_create_got_section (abfd, info))
-    return FALSE;
+    return false;
   if (IS_FDPIC (abfd) && (htab->sfixup32 == NULL))
     {
       if (! create_rofixup_section (abfd, info))
-	return FALSE;
+	return false;
     }
 
   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
@@ -2377,7 +2231,7 @@ lm32_elf_create_dynamic_sections (bfd *a
   htab->root.splt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
 
   if (bed->want_plt_sym)
     {
@@ -2388,9 +2242,9 @@ lm32_elf_create_dynamic_sections (bfd *a
 
       if (! (_bfd_generic_link_add_one_symbol
 	     (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s,
-	      (bfd_vma) 0, NULL, FALSE,
+	      (bfd_vma) 0, NULL, false,
 	      get_elf_backend_data (abfd)->collect, &bh)))
-	return FALSE;
+	return false;
       h = (struct elf_link_hash_entry *) bh;
       h->def_regular = 1;
       h->type = STT_OBJECT;
@@ -2398,7 +2252,7 @@ lm32_elf_create_dynamic_sections (bfd *a
 
       if (bfd_link_pic (info)
 	  && ! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   s = bfd_make_section_anyway_with_flags (abfd,
@@ -2408,11 +2262,11 @@ lm32_elf_create_dynamic_sections (bfd *a
   htab->root.srelplt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
   if (htab->root.sgot == NULL
       && !_bfd_elf_create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   if (bed->want_dynbss)
     {
@@ -2426,7 +2280,7 @@ lm32_elf_create_dynamic_sections (bfd *a
 					      SEC_ALLOC | SEC_LINKER_CREATED);
       htab->sdynbss = s;
       if (s == NULL)
-	return FALSE;
+	return false;
       /* The .rel[a].bss section holds copy relocs.  This section is not
 	 normally needed.  We need to create it here, though, so that the
 	 linker will map it to an output section.  We can't just create it
@@ -2447,92 +2301,45 @@ lm32_elf_create_dynamic_sections (bfd *a
 	  htab->srelbss = s;
 	  if (s == NULL
 	      || !bfd_set_section_alignment (s, ptralign))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
-}
-
-/* Copy the extra info we tack onto an elf_link_hash_entry.  */
-
-static void
-lm32_elf_copy_indirect_symbol (struct bfd_link_info *info,
-			       struct elf_link_hash_entry *dir,
-			       struct elf_link_hash_entry *ind)
-{
-  struct elf_lm32_link_hash_entry * edir;
-  struct elf_lm32_link_hash_entry * eind;
-
-  edir = (struct elf_lm32_link_hash_entry *) dir;
-  eind = (struct elf_lm32_link_hash_entry *) ind;
-
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL;)
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
-  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
+  return true;
 }
 
-static bfd_boolean
+static bool
 lm32_elf_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   if (!bfd_link_relocatable (info))
     {
       if (!bfd_elf_stack_segment_size (output_bfd, info,
 				       "__stacksize", DEFAULT_STACK_SIZE))
-	return FALSE;
+	return false;
 
       asection *sec = bfd_get_section_by_name (output_bfd, ".stack");
       if (sec)
 	sec->size = info->stacksize >= 0 ? info->stacksize : 0;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 lm32_elf_fdpic_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   unsigned i;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   if (! _bfd_elf_copy_private_bfd_data (ibfd, obfd))
-    return FALSE;
+    return false;
 
   if (! elf_tdata (ibfd) || ! elf_tdata (ibfd)->phdr
       || ! elf_tdata (obfd) || ! elf_tdata (obfd)->phdr)
-    return TRUE;
+    return true;
 
   /* Copy the stack size.  */
   for (i = 0; i < elf_elfheader (ibfd)->e_phnum; i++)
@@ -2550,14 +2357,14 @@ lm32_elf_fdpic_copy_private_bfd_data (bf
 			    ->s->sizeof_ehdr, SEEK_SET) != 0
 		  || get_elf_backend_data (obfd)->s->write_out_phdrs (obfd, elf_tdata (obfd)->phdr,
 				     elf_elfheader (obfd)->e_phnum) != 0)
-		return FALSE;
+		return false;
 	      break;
 	    }
 
 	break;
       }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -2588,7 +2395,6 @@ lm32_elf_fdpic_copy_private_bfd_data (bf
 #define bfd_elf32_bfd_link_hash_table_create	lm32_elf_link_hash_table_create
 #define elf_backend_check_relocs		lm32_elf_check_relocs
 #define elf_backend_reloc_type_class		lm32_elf_reloc_type_class
-#define elf_backend_copy_indirect_symbol	lm32_elf_copy_indirect_symbol
 #define elf_backend_size_dynamic_sections	lm32_elf_size_dynamic_sections
 #define elf_backend_omit_section_dynsym		_bfd_elf_omit_section_dynsym_all
 #define elf_backend_create_dynamic_sections	lm32_elf_create_dynamic_sections
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m32c.c ./bfd/elf32-m32c.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m32c.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-m32c.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* M16C/M32C specific support for 32-bit ELF.
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,19 +28,19 @@
 /* Forward declarations.  */
 static reloc_howto_type * m32c_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean m32c_info_to_howto_rela
+static bool m32c_info_to_howto_rela
   (bfd *, arelent *, Elf_Internal_Rela *);
-static bfd_boolean m32c_elf_relocate_section
+static int m32c_elf_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
-static bfd_boolean m32c_elf_check_relocs
+static bool m32c_elf_check_relocs
   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
-static bfd_boolean m32c_elf_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
+static bool m32c_elf_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
 #ifdef DEBUG
 char * m32c_get_reloc (long reloc);
 void dump_symtab (bfd *, void *, void *);
 #endif
-static bfd_boolean m32c_elf_relax_section
-(bfd *abfd, asection *sec, struct bfd_link_info *link_info, bfd_boolean *again);
+static bool m32c_elf_relax_section
+(bfd *abfd, asection *sec, struct bfd_link_info *link_info, bool *again);
 static bfd_reloc_status_type m32c_apply_reloc_24
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 
@@ -50,188 +50,188 @@ static reloc_howto_type m32c_elf_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_M32C_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GCC intentionally overflows these next two in order to work
      around limitations in the addressing modes, so don't complain
      about overflow.  */
   HOWTO (R_M32C_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32C_24,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 m32c_apply_reloc_24,	/* special_function */
 	 "R_M32C_24",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32C_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32C_8_PCREL,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_8_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_M32C_16_PCREL,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_M32C_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32C_LO16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_LO16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32C_HI8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_HI8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32C_HI16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_HI16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32C_RL_JUMP,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_RL_JUMP",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32C_RL_1ADDR,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_RL_1ADDR",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32C_RL_2ADDR,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32C_RL_2ADDR",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 };
 
@@ -291,7 +291,7 @@ m32c_reloc_name_lookup (bfd *abfd ATTRIB
 
 /* Set the howto pointer for an M32C ELF reloc.  */
 
-static bfd_boolean
+static bool
 m32c_info_to_howto_rela (bfd *               abfd,
 			 arelent *           cache_ptr,
 			 Elf_Internal_Rela * dst)
@@ -305,10 +305,10 @@ m32c_info_to_howto_rela (bfd *
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & m32c_elf_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 
@@ -388,7 +388,7 @@ static bfd_reloc_status_type m32c_apply_
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 m32c_elf_relocate_section
     (bfd *		     output_bfd ATTRIBUTE_UNUSED,
      struct bfd_link_info *  info,
@@ -480,7 +480,7 @@ m32c_elf_relocate_section
 	  else if (!bfd_link_relocatable (info))
 	    (*info->callbacks->undefined_symbol) (info, h->root.root.string,
 						  input_bfd, input_section,
-						  rel->r_offset, TRUE);
+						  rel->r_offset, true);
 	}
 
       if (sec != NULL && discarded_section (sec))
@@ -617,7 +617,7 @@ m32c_elf_relocate_section
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -643,13 +643,13 @@ m32c_elf_relocate_section
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We support 16-bit pointers to code above 64k by generating a thunk
    below 64k containing a JMP instruction to the final address.  */
 
-static bfd_boolean
+static bool
 m32c_elf_check_relocs
     (bfd *		       abfd,
      struct bfd_link_info *    info,
@@ -665,7 +665,7 @@ m32c_elf_check_relocs
   bfd *dynobj;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -710,7 +710,7 @@ m32c_elf_check_relocs
 	      elf_hash_table (info)->splt = splt;
 	      if (splt == NULL
 		  || !bfd_set_section_alignment (splt, 1))
-		return FALSE;
+		return false;
 	    }
 
 	  if (h != NULL)
@@ -725,7 +725,7 @@ m32c_elf_check_relocs
 		  size = symtab_hdr->sh_info * sizeof (bfd_vma);
 		  local_plt_offsets = (bfd_vma *) bfd_alloc (abfd, size);
 		  if (local_plt_offsets == NULL)
-		    return FALSE;
+		    return false;
 		  elf_local_got_offsets (abfd) = local_plt_offsets;
 
 		  for (i = 0; i < symtab_hdr->sh_info; i++)
@@ -743,12 +743,12 @@ m32c_elf_check_relocs
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This must exist if dynobj is ever set.  */
 
-static bfd_boolean
+static bool
 m32c_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
 				  struct bfd_link_info *info)
 {
@@ -769,10 +769,10 @@ m32c_elf_finish_dynamic_sections (bfd *a
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 m32c_elf_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 			       struct bfd_link_info *info)
 {
@@ -780,42 +780,42 @@ m32c_elf_always_size_sections (bfd *outp
   asection *splt;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   if (dynobj == NULL)
-    return TRUE;
+    return true;
 
   splt = elf_hash_table (info)->splt;
   BFD_ASSERT (splt != NULL);
 
   splt->contents = (bfd_byte *) bfd_zalloc (dynobj, splt->size);
   if (splt->contents == NULL)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Function to set the ELF flag bits.  */
 
-static bfd_boolean
+static bool
 m32c_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 m32c_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword old_flags, old_partial;
   flagword new_flags, new_partial;
-  bfd_boolean error = FALSE;
+  bool error = false;
   char new_opt[80];
   char old_opt[80];
 
@@ -833,7 +833,7 @@ m32c_elf_merge_private_bfd_data (bfd *ib
   if (!elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
 
@@ -870,7 +870,7 @@ m32c_elf_merge_private_bfd_data (bfd *ib
       /* Print out any mismatches from above.  */
       if (new_opt[0])
 	{
-	  error = TRUE;
+	  error = true;
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: compiled with %s and linked with modules compiled with %s"),
@@ -883,7 +883,7 @@ m32c_elf_merge_private_bfd_data (bfd *ib
       /* Warn about any other mismatches.  */
       if (new_flags != old_flags)
 	{
-	  error = TRUE;
+	  error = true;
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: uses different e_flags (%#x) fields"
@@ -899,7 +899,7 @@ m32c_elf_merge_private_bfd_data (bfd *ib
 }
 
 
-static bfd_boolean
+static bool
 m32c_elf_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -921,7 +921,7 @@ m32c_elf_print_private_bfd_data (bfd *ab
     }
 
   fputc ('\n', file);
-  return TRUE;
+  return true;
 }
 
 /* Return the MACH for an e_flags value.  */
@@ -938,12 +938,12 @@ elf32_m32c_machine (bfd *abfd)
   return bfd_mach_m16c;
 }
 
-static bfd_boolean
+static bool
 m32c_elf_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_m32c,
 			     elf32_m32c_machine (abfd));
-  return TRUE;
+  return true;
 }
  
 
@@ -956,7 +956,7 @@ dump_symtab (bfd * abfd, void *internal_
   Elf_Internal_Sym *isymend;
   Elf_Internal_Sym *isym;
   Elf_Internal_Shdr *symtab_hdr;
-  bfd_boolean free_internal = 0, free_external = 0;
+  bool free_internal = 0, free_external = 0;
   char * st_info_str;
   char * st_info_stb_str;
   char * st_other_str;
@@ -1097,10 +1097,10 @@ m32c_get_reloc (long reloc)
 struct relax_plt_data
 {
   asection *splt;
-  bfd_boolean *again;
+  bool *again;
 };
 
-static bfd_boolean
+static bool
 m32c_relax_plt_check (struct elf_link_hash_entry *h, void * xdata)
 {
   struct relax_plt_data *data = (struct relax_plt_data *) xdata;
@@ -1121,17 +1121,17 @@ m32c_relax_plt_check (struct elf_link_ha
 	{
 	  h->plt.offset = -1;
 	  data->splt->size -= 4;
-	  *data->again = TRUE;
+	  *data->again = true;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* A subroutine of m32c_elf_relax_section.  If the global symbol H
    previously had a plt entry, give it a new entry offset.  */
 
-static bfd_boolean
+static bool
 m32c_relax_plt_realloc (struct elf_link_hash_entry *h, void * xdata)
 {
   bfd_vma *entry = (bfd_vma *) xdata;
@@ -1142,26 +1142,26 @@ m32c_relax_plt_realloc (struct elf_link_
       *entry += 4;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 m32c_elf_relax_plt_section (asection *splt,
 			    struct bfd_link_info *info,
-			    bfd_boolean *again)
+			    bool *again)
 {
   struct relax_plt_data relax_plt_data;
   bfd *ibfd;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* Quick check for an empty plt.  */
   if (splt->size == 0)
-    return TRUE;
+    return true;
 
   /* Map across all global symbols; see which ones happen to
      fall in the low 64k.  */
@@ -1191,7 +1191,7 @@ m32c_elf_relax_plt_section (asection *sp
 					    symtab_hdr->sh_info, 0,
 					    NULL, NULL, NULL);
 	  if (isymbuf == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       for (idx = 0; idx < symtab_hdr->sh_info; ++idx)
@@ -1220,7 +1220,7 @@ m32c_elf_relax_plt_section (asection *sp
 	    {
 	      local_plt_offsets[idx] = -1;
 	      splt->size -= 4;
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -1264,7 +1264,7 @@ m32c_elf_relax_plt_section (asection *sp
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static int
@@ -1284,7 +1284,7 @@ static bfd_vma
 m32c_offset_for_reloc (bfd *abfd,
 		       Elf_Internal_Rela *rel,
 		       Elf_Internal_Shdr *symtab_hdr,
-		       Elf_External_Sym_Shndx *shndx_buf ATTRIBUTE_UNUSED,
+		       bfd_byte *shndx_buf ATTRIBUTE_UNUSED,
 		       Elf_Internal_Sym *intsyms)
 {
   bfd_vma symval;
@@ -1347,7 +1347,7 @@ static int bytes_to_reloc[] = {
 /* If the displacement is within the given range and the new encoding
    differs from the old encoding (the index), then the insn can be
    relaxed to the new encoding.  */
-typedef struct {
+typedef const struct {
   int bytes;
   unsigned int max_disp;
   unsigned char new_encoding;
@@ -1426,12 +1426,11 @@ static EncodingTable m32c_addr_encodings
   { 0,     0, 31 }, /*  */
 };
 
-static bfd_boolean
-m32c_elf_relax_section
-    (bfd *		    abfd,
-     asection *		    sec,
-     struct bfd_link_info * link_info,
-     bfd_boolean *	    again)
+static bool
+m32c_elf_relax_section (bfd *abfd,
+			asection *sec,
+			struct bfd_link_info *link_info,
+			bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Shdr *shndx_hdr;
@@ -1442,16 +1441,17 @@ m32c_elf_relax_section
   bfd_byte * free_contents = NULL;
   Elf_Internal_Sym *intsyms = NULL;
   Elf_Internal_Sym *free_intsyms = NULL;
-  Elf_External_Sym_Shndx *shndx_buf = NULL;
+  bfd_byte *shndx_buf = NULL;
   int machine;
 
-  if (abfd == elf_hash_table (link_info)->dynobj
+  if (is_elf_hash_table (link_info->hash)
+      && abfd == elf_hash_table (link_info)->dynobj
       && (sec->flags & SEC_LINKER_CREATED) != 0
       && strcmp (sec->name, ".plt") == 0)
     return m32c_elf_relax_plt_section (sec, link_info, again);
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   machine = elf32_m32c_machine (abfd);
 
@@ -1459,10 +1459,11 @@ m32c_elf_relax_section
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_symtab_hdr (abfd);
   if (elf_symtab_shndx_list (abfd))
@@ -1491,17 +1492,20 @@ m32c_elf_relax_section
 
   if (shndx_hdr && shndx_hdr->sh_size != 0)
     {
-      bfd_size_type amt;
+      size_t amt;
 
-      amt = symtab_hdr->sh_info;
-      amt *= sizeof (Elf_External_Sym_Shndx);
-      shndx_buf = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
-      if (shndx_buf == NULL)
+      if (_bfd_mul_overflow (symtab_hdr->sh_info,
+			     sizeof (Elf_External_Sym_Shndx), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  goto error_return;
+	}
+      if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0)
 	goto error_return;
-      if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0
-	  || bfd_bread (shndx_buf, amt, abfd) != amt)
+      shndx_buf = _bfd_malloc_and_read (abfd, amt, amt);
+      if (shndx_buf == NULL)
 	goto error_return;
-      shndx_hdr->contents = (bfd_byte *) shndx_buf;
+      shndx_hdr->contents = shndx_buf;
     }
 
   /* Get a copy of the native relocations.  */
@@ -1877,7 +1881,7 @@ m32c_elf_relax_section
       if (gap_size == 0)
 	continue;
 
-      *again = TRUE;
+      *again = true;
 
       srel->r_info = ELF32_R_INFO (ELF32_R_SYM (srel->r_info), new_type);
 
@@ -1898,11 +1902,8 @@ m32c_elf_relax_section
 
     } /* next relocation */
 
-  if (free_relocs != NULL)
-    {
-      free (free_relocs);
-      free_relocs = NULL;
-    }
+  free (free_relocs);
+  free_relocs = NULL;
 
   if (free_contents != NULL)
     {
@@ -1928,37 +1929,33 @@ m32c_elf_relax_section
       /* Cache the symbols for elf_link_input_bfd.  */
       else
 	{
-	symtab_hdr->contents = NULL /* (unsigned char *) intsyms*/;
+	  symtab_hdr->contents = NULL /* (unsigned char *) intsyms*/;
 	}
 
       free_intsyms = NULL;
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (free_relocs != NULL)
-    free (free_relocs);
-  if (free_contents != NULL)
-    free (free_contents);
+  free (free_relocs);
+  free (free_contents);
   if (shndx_buf != NULL)
     {
       shndx_hdr->contents = NULL;
       free (shndx_buf);
     }
-  if (free_intsyms != NULL)
-    free (free_intsyms);
-  return FALSE;
+  free (free_intsyms);
+  return false;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
-m32c_elf_relax_delete_bytes
- (bfd *	     abfd,
-  asection * sec,
-  bfd_vma    addr,
-  int	     count)
+static bool
+m32c_elf_relax_delete_bytes (bfd *abfd,
+			     asection *sec,
+			     bfd_vma addr,
+			     int count)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Shdr *shndx_hdr;
@@ -2075,7 +2072,6 @@ m32c_elf_relax_delete_bytes
   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
 	      - symtab_hdr->sh_info);
   sym_hashes = elf_sym_hashes (abfd);
-  //  sym_hashes += symtab_hdr->sh_info;
   end_hashes = sym_hashes + symcount;
 
   for (; sym_hashes < end_hashes; sym_hashes ++)
@@ -2101,7 +2097,7 @@ m32c_elf_relax_delete_bytes
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This is for versions of gcc prior to 4.3.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m32r.c ./bfd/elf32-m32r.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m32r.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-m32r.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* M32R-specific support for 32-bit ELF.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -221,16 +221,16 @@ m32r_elf_generic_reloc (bfd *input_bfd,
   (((x & reloc_entry->howto->src_mask) +  relocation) &	\
   reloc_entry->howto->dst_mask))
 
-  switch (reloc_entry->howto->size)
+  switch (bfd_get_reloc_size (reloc_entry->howto))
     {
-    case 1:
+    case 2:
       {
 	short x = bfd_get_16 (input_bfd, inplace_address);
 	DOIT (x);
 	bfd_put_16 (input_bfd, (bfd_vma) x, inplace_address);
       }
       break;
-    case 2:
+    case 4:
       {
 	unsigned long x = bfd_get_32 (input_bfd, inplace_address);
 	DOIT (x);
@@ -474,62 +474,62 @@ static reloc_howto_type m32r_elf_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_M32R_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_M32R_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 m32r_elf_generic_reloc,/* special_function */
 	 "R_M32R_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_M32R_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 m32r_elf_generic_reloc,/* special_function */
 	 "R_M32R_32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 24 bit address.  */
   HOWTO (R_M32R_24,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 m32r_elf_generic_reloc,/* special_function */
 	 "R_M32R_24",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An PC Relative 10-bit relocation, shifted by 2.
      This reloc is complicated because relocations are relative to pc & -4.
@@ -541,32 +541,32 @@ static reloc_howto_type m32r_elf_howto_t
      again.  */
   HOWTO (R_M32R_10_PCREL,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 m32r_elf_10_pcrel_reloc, /* special_function */
 	 "R_M32R_10_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A relative 18 bit relocation, right shifted by 2.  */
   HOWTO (R_M32R_18_PCREL,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_18_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A relative 26 bit relocation, right shifted by 2.  */
   /* ??? It's not clear whether this should have partial_inplace set or not.
@@ -575,107 +575,107 @@ static reloc_howto_type m32r_elf_howto_t
      again.  */
   HOWTO (R_M32R_26_PCREL,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_26_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* High 16 bits of address when lower 16 is or'd in.  */
   HOWTO (R_M32R_HI16_ULO,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 m32r_elf_hi16_reloc,	/* special_function */
 	 "R_M32R_HI16_ULO",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of address when lower 16 is added in.  */
   HOWTO (R_M32R_HI16_SLO,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 m32r_elf_hi16_reloc,	/* special_function */
 	 "R_M32R_HI16_SLO",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Lower 16 bits of address.  */
   HOWTO (R_M32R_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 m32r_elf_lo16_reloc,	/* special_function */
 	 "R_M32R_LO16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Small data area 16 bits offset.  */
   HOWTO (R_M32R_SDA16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 m32r_elf_sda16_reloc,	/* special_function */
 	 "R_M32R_SDA16",	/* name */
-	 TRUE,			/* partial_inplace */  /* FIXME: correct? */
+	 true,			/* partial_inplace */  /* FIXME: correct? */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_M32R_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_M32R_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_M32R_GNU_VTENTRY,	 /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_M32R_GNU_VTENTRY",	 /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (13),
   EMPTY_HOWTO (14),
@@ -701,196 +701,196 @@ static reloc_howto_type m32r_elf_howto_t
   /* A 16 bit absolute relocation.  */
   HOWTO (R_M32R_16_RELA,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_16_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_M32R_32_RELA,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,/* special_function */
 	 "R_M32R_32_RELA",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 24 bit address.  */
   HOWTO (R_M32R_24_RELA,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,/* special_function */
 	 "R_M32R_24_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32R_10_PCREL_RELA,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 m32r_elf_10_pcrel_reloc, /* special_function */
 	 "R_M32R_10_PCREL_RELA",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A relative 18 bit relocation, right shifted by 2.  */
   HOWTO (R_M32R_18_PCREL_RELA,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_18_PCREL_RELA",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A relative 26 bit relocation, right shifted by 2.  */
   HOWTO (R_M32R_26_PCREL_RELA,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_26_PCREL_RELA",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* High 16 bits of address when lower 16 is or'd in.  */
   HOWTO (R_M32R_HI16_ULO_RELA,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_HI16_ULO_RELA",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of address when lower 16 is added in.  */
   HOWTO (R_M32R_HI16_SLO_RELA,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_HI16_SLO_RELA",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Lower 16 bits of address.  */
   HOWTO (R_M32R_LO16_RELA,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_LO16_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Small data area 16 bits offset.  */
   HOWTO (R_M32R_SDA16_RELA,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_SDA16_RELA",	/* name */
-	 TRUE,			/* partial_inplace */  /* FIXME: correct? */
+	 true,			/* partial_inplace */  /* FIXME: correct? */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_M32R_RELA_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_M32R_RELA_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_M32R_RELA_GNU_VTENTRY,     /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_M32R_RELA_GNU_VTENTRY",   /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit PC relative relocation.  */
   HOWTO (R_M32R_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,/* special_function */
 	 "R_M32R_REL32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   EMPTY_HOWTO (46),
   EMPTY_HOWTO (47),
@@ -899,33 +899,33 @@ static reloc_howto_type m32r_elf_howto_t
      the symbol.  */
   HOWTO (R_M32R_GOT24,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_M32R_GOT24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Like R_M32R_PCREL, but referring to the procedure linkage table
      entry for the symbol.  */
   HOWTO (R_M32R_26_PLTREL,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_26_PLTREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* This is used only by the dynamic linker.  The symbol should exist
      both in the object being run and in some shared library.  The
@@ -934,236 +934,236 @@ static reloc_howto_type m32r_elf_howto_t
      run has to have the data at some particular address.  */
   HOWTO (R_M32R_COPY,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_M32R_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Like R_M32R_24, but used when setting global offset table
      entries.  */
   HOWTO (R_M32R_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_M32R_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Marks a procedure linkage table entry for a symbol.  */
   HOWTO (R_M32R_JMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_M32R_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Used only by the dynamic linker.  When the object is run, this
      longword is set to the load address of the object, plus the
      addend.  */
   HOWTO (R_M32R_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_M32R_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32R_GOTOFF,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_M32R_GOTOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An PC Relative 24-bit relocation used when setting PIC offset
      table register. */
   HOWTO (R_M32R_GOTPC24,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_M32R_GOTPC24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Like R_M32R_HI16_ULO, but referring to the GOT table entry for
      the symbol.  */
   HOWTO (R_M32R_GOT16_HI_ULO,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_GOT16_HI_ULO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Like R_M32R_HI16_SLO, but referring to the GOT table entry for
      the symbol.  */
   HOWTO (R_M32R_GOT16_HI_SLO,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_GOT16_HI_SLO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Like R_M32R_LO16, but referring to the GOT table entry for
      the symbol.  */
   HOWTO (R_M32R_GOT16_LO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_GOT16_LO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An PC Relative relocation used when setting PIC offset table register.
      Like R_M32R_HI16_ULO, but referring to the GOT table entry for
      the symbol.  */
   HOWTO (R_M32R_GOTPC_HI_ULO,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_GOTPC_HI_ULO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* An PC Relative relocation used when setting PIC offset table register.
      Like R_M32R_HI16_SLO, but referring to the GOT table entry for
      the symbol.  */
   HOWTO (R_M32R_GOTPC_HI_SLO,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_GOTPC_HI_SLO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* An PC Relative relocation used when setting PIC offset table register.
      Like R_M32R_LO16, but referring to the GOT table entry for
      the symbol.  */
   HOWTO (R_M32R_GOTPC_LO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_GOTPC_LO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_M32R_GOTOFF_HI_ULO,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_GOTOFF_HI_ULO",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32R_GOTOFF_HI_SLO,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_GOTOFF_HI_SLO",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_M32R_GOTOFF_LO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M32R_GOTOFF_LO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 /* Map BFD reloc types to M32R ELF reloc types.  */
@@ -1272,7 +1272,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an M32R ELF reloc.  */
 
-static bfd_boolean
+static bool
 m32r_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
 			arelent *cache_ptr,
 			Elf_Internal_Rela *dst)
@@ -1286,13 +1286,13 @@ m32r_info_to_howto_rel (bfd *abfd ATTRIB
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &m32r_elf_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 m32r_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 		    arelent *cache_ptr,
 		    Elf_Internal_Rela *dst)
@@ -1304,20 +1304,20 @@ m32r_info_to_howto (bfd *abfd ATTRIBUTE_
 	  && (r_type < (unsigned int) R_M32R_max)))
     {
       cache_ptr->howto = &m32r_elf_howto_table[r_type];
-      return TRUE;
+      return true;
     }
 
   /* xgettext:c-format */
   _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r_type);
   bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return false;
 }
 
 
 /* Given a BFD section, try to locate the corresponding ELF section
    index.  */
 
-static bfd_boolean
+static bool
 _bfd_m32r_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
 					asection *sec,
 					int *retval)
@@ -1325,9 +1325,9 @@ _bfd_m32r_elf_section_from_bfd_section (
   if (strcmp (bfd_section_name (sec), ".scommon") == 0)
     {
       *retval = SHN_M32R_SCOMMON;
-      return TRUE;
+      return true;
     }
-  return FALSE;
+  return false;
 }
 
 /* M32R ELF uses two common sections.  One is the usual one, and the other
@@ -1337,8 +1337,11 @@ _bfd_m32r_elf_section_from_bfd_section (
    _SDA_BASE.  This is what we use for the small common section.  This
    approach is copied from elf32-mips.c.  */
 static asection m32r_elf_scom_section;
-static asymbol m32r_elf_scom_symbol;
-static asymbol *m32r_elf_scom_symbol_ptr;
+static const asymbol m32r_elf_scom_symbol =
+  GLOBAL_SYM_INIT (".scommon", &m32r_elf_scom_section);
+static asection m32r_elf_scom_section =
+  BFD_FAKE_SECTION (m32r_elf_scom_section, &m32r_elf_scom_symbol,
+		    ".scommon", 0, SEC_IS_COMMON | SEC_SMALL_DATA);
 
 /* Handle the special M32R section numbers that a symbol may use.  */
 
@@ -1350,19 +1353,6 @@ _bfd_m32r_elf_symbol_processing (bfd *ab
   switch (elfsym->internal_elf_sym.st_shndx)
     {
     case SHN_M32R_SCOMMON:
-      if (m32r_elf_scom_section.name == NULL)
-	{
-	  /* Initialize the small common section.  */
-	  m32r_elf_scom_section.name = ".scommon";
-	  m32r_elf_scom_section.flags = SEC_IS_COMMON;
-	  m32r_elf_scom_section.output_section = &m32r_elf_scom_section;
-	  m32r_elf_scom_section.symbol = &m32r_elf_scom_symbol;
-	  m32r_elf_scom_section.symbol_ptr_ptr = &m32r_elf_scom_symbol_ptr;
-	  m32r_elf_scom_symbol.name = ".scommon";
-	  m32r_elf_scom_symbol.flags = BSF_SECTION_SYM;
-	  m32r_elf_scom_symbol.section = &m32r_elf_scom_section;
-	  m32r_elf_scom_symbol_ptr = &m32r_elf_scom_symbol;
-	}
       asym->section = &m32r_elf_scom_section;
       asym->value = elfsym->internal_elf_sym.st_size;
       break;
@@ -1374,7 +1364,7 @@ _bfd_m32r_elf_symbol_processing (bfd *ab
    We also keep watching for whether we need to create the sdata special
    linker sections.  */
 
-static bfd_boolean
+static bool
 m32r_elf_add_symbol_hook (bfd *abfd,
 			  struct bfd_link_info *info,
 			  Elf_Internal_Sym *sym,
@@ -1406,13 +1396,13 @@ m32r_elf_add_symbol_hook (bfd *abfd,
 	  s = bfd_make_section_anyway_with_flags (abfd, ".sdata",
 						  flags);
 	  if (s == NULL)
-	    return FALSE;
+	    return false;
 	  if (!bfd_set_section_alignment (s, 2))
-	    return FALSE;
+	    return false;
 	}
 
       bh = bfd_link_hash_lookup (info->hash, "_SDA_BASE_",
-				 FALSE, FALSE, FALSE);
+				 false, false, false);
 
       if ((bh == NULL || bh->type == bfd_link_hash_undefined)
 	  && !(_bfd_generic_link_add_one_symbol (info,
@@ -1422,10 +1412,10 @@ m32r_elf_add_symbol_hook (bfd *abfd,
 						 s,
 						 (bfd_vma) 32768,
 						 NULL,
-						 FALSE,
+						 false,
 						 get_elf_backend_data (abfd)->collect,
 						 &bh)))
-	return FALSE;
+	return false;
       h = (struct elf_link_hash_entry *) bh;
       h->type = STT_OBJECT;
     }
@@ -1434,12 +1424,12 @@ m32r_elf_add_symbol_hook (bfd *abfd,
     {
     case SHN_M32R_SCOMMON:
       *secp = bfd_make_section_old_way (abfd, ".scommon");
-      (*secp)->flags |= SEC_IS_COMMON;
+      (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
       *valp = sym->st_size;
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We have to figure out the SDA_BASE value, so that we can adjust the
@@ -1458,7 +1448,7 @@ m32r_elf_final_sda_base (bfd *output_bfd
     {
       struct bfd_link_hash_entry *h;
 
-      h = bfd_link_hash_lookup (info->hash, "_SDA_BASE_", FALSE, FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->hash, "_SDA_BASE_", false, false, true);
       if (h != NULL && h->type == bfd_link_hash_defined)
 	elf_gp (output_bfd) = (h->u.def.value
 			       + h->u.def.section->output_section->vma
@@ -1498,107 +1488,51 @@ struct elf_m32r_pcrel_relocs_copied
   bfd_size_type count;
 };
 
-/* m32r ELF linker hash entry.  */
-
-struct elf_m32r_link_hash_entry
-{
-  struct elf_link_hash_entry root;
-
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-};
-
-/* m32r ELF linker hash table.  */
-
-struct elf_m32r_link_hash_table
-{
-  struct elf_link_hash_table root;
-
-  /* Short-cuts to get to dynamic linker sections.  */
-  asection *sdynbss;
-  asection *srelbss;
-
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-};
-
 /* Traverse an m32r ELF linker hash table.  */
 
 #define m32r_elf_link_hash_traverse(table, func, info)			\
   (elf_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the m32r ELF linker hash table from a link_info structure.  */
 
 #define m32r_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == M32R_ELF_DATA ? ((struct elf_m32r_link_hash_table *) ((p)->hash)) : NULL)
-
-/* Create an entry in an m32r ELF linker hash table.  */
-
-static struct bfd_hash_entry *
-m32r_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
-			    struct bfd_hash_table *table,
-			    const char *string)
-{
-  struct elf_m32r_link_hash_entry *ret =
-    (struct elf_m32r_link_hash_entry *) entry;
-
-  /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
-  if (ret == NULL)
-    ret = bfd_hash_allocate (table,
-			     sizeof (struct elf_m32r_link_hash_entry));
-  if (ret == NULL)
-    return NULL;
-
-  /* Call the allocation method of the superclass.  */
-  ret = ((struct elf_m32r_link_hash_entry *)
-	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
-				     table, string));
-  if (ret != NULL)
-    {
-      struct elf_m32r_link_hash_entry *eh;
-
-      eh = (struct elf_m32r_link_hash_entry *) ret;
-      eh->dyn_relocs = NULL;
-    }
-
-  return (struct bfd_hash_entry *) ret;
-}
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == M32R_ELF_DATA)		\
+   ? (struct elf_link_hash_table *) (p)->hash : NULL)
 
 /* Create an m32r ELF linker hash table.  */
 
 static struct bfd_link_hash_table *
 m32r_elf_link_hash_table_create (bfd *abfd)
 {
-  struct elf_m32r_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_m32r_link_hash_table);
+  struct elf_link_hash_table *ret;
+  size_t amt = sizeof (struct elf_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
     return NULL;
 
-  if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
-				      m32r_elf_link_hash_newfunc,
-				      sizeof (struct elf_m32r_link_hash_entry),
+  if (!_bfd_elf_link_hash_table_init (ret, abfd,
+				      _bfd_elf_link_hash_newfunc,
+				      sizeof (struct elf_link_hash_entry),
 				      M32R_ELF_DATA))
     {
       free (ret);
       return NULL;
     }
 
-  return &ret->root.root;
+  return &ret->root;
 }
 
 /* Create dynamic sections when linking against a dynamic object.  */
 
-static bfd_boolean
+static bool
 m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
-  struct elf_m32r_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   flagword flags, pltflags;
   asection *s;
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -1606,7 +1540,7 @@ m32r_elf_create_dynamic_sections (bfd *a
 
   htab = m32r_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
      .rel[a].bss sections.  */
@@ -1621,10 +1555,10 @@ m32r_elf_create_dynamic_sections (bfd *a
     pltflags |= SEC_READONLY;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
-  htab->root.splt = s;
+  htab->splt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
 
   if (bed->want_plt_sym)
     {
@@ -1635,31 +1569,31 @@ m32r_elf_create_dynamic_sections (bfd *a
 
       if (! (_bfd_generic_link_add_one_symbol
 	     (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s,
-	      (bfd_vma) 0, NULL, FALSE,
+	      (bfd_vma) 0, NULL, false,
 	      get_elf_backend_data (abfd)->collect, &bh)))
-	return FALSE;
+	return false;
       h = (struct elf_link_hash_entry *) bh;
       h->def_regular = 1;
       h->type = STT_OBJECT;
-      htab->root.hplt = h;
+      htab->hplt = h;
 
       if (bfd_link_pic (info)
 	  && ! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   s = bfd_make_section_anyway_with_flags (abfd,
 					  bed->default_use_rela_p
 					  ? ".rela.plt" : ".rel.plt",
 					  flags | SEC_READONLY);
-  htab->root.srelplt = s;
+  htab->srelplt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
-  if (htab->root.sgot == NULL
+  if (htab->sgot == NULL
       && !_bfd_elf_create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   if (bed->want_dynbss)
     {
@@ -1673,7 +1607,7 @@ m32r_elf_create_dynamic_sections (bfd *a
 					      SEC_ALLOC | SEC_LINKER_CREATED);
       htab->sdynbss = s;
       if (s == NULL)
-	return FALSE;
+	return false;
       /* The .rel[a].bss section holds copy relocs.  This section is not
 	 normally needed.  We need to create it here, though, so that the
 	 linker will map it to an output section.  We can't just create it
@@ -1694,90 +1628,25 @@ m32r_elf_create_dynamic_sections (bfd *a
 	  htab->srelbss = s;
 	  if (s == NULL
 	      || !bfd_set_section_alignment (s, ptralign))
-	    return FALSE;
-	}
-    }
-
-  return TRUE;
-}
-
-/* Copy the extra info we tack onto an elf_link_hash_entry.  */
-
-static void
-m32r_elf_copy_indirect_symbol (struct bfd_link_info *info,
-			       struct elf_link_hash_entry *dir,
-			       struct elf_link_hash_entry *ind)
-{
-  struct elf_m32r_link_hash_entry * edir;
-  struct elf_m32r_link_hash_entry * eind;
-
-  edir = (struct elf_m32r_link_hash_entry *) dir;
-  eind = (struct elf_m32r_link_hash_entry *) ind;
-
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL;)
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
+	    return false;
 	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
     }
 
-  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
+  return true;
 }
 
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-  struct elf_m32r_link_hash_entry *eh = (struct elf_m32r_link_hash_entry *) h;
-
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				struct elf_link_hash_entry *h)
 {
-  struct elf_m32r_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
 
@@ -1816,7 +1685,7 @@ m32r_elf_adjust_dynamic_symbol (struct b
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) -1;
@@ -1830,7 +1699,7 @@ m32r_elf_adjust_dynamic_symbol (struct b
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -1841,26 +1710,26 @@ m32r_elf_adjust_dynamic_symbol (struct b
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (0 && info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (0 && !readonly_dynrelocs (h))
+  if (0 && !_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -1875,7 +1744,7 @@ m32r_elf_adjust_dynamic_symbol (struct b
 
   htab = m32r_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   s = htab->sdynbss;
   BFD_ASSERT (s != NULL);
@@ -1900,25 +1769,22 @@ m32r_elf_adjust_dynamic_symbol (struct b
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info;
-  struct elf_m32r_link_hash_table *htab;
-  struct elf_m32r_link_hash_entry *eh;
+  struct elf_link_hash_table *htab;
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = m32r_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
-
-  eh = (struct elf_m32r_link_hash_entry *) h;
+    return false;
 
-  if (htab->root.dynamic_sections_created
+  if (htab->dynamic_sections_created
       && h->plt.refcount > 0)
     {
       /* Make sure this symbol is output as a dynamic symbol.
@@ -1927,12 +1793,12 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
 	{
-	  asection *s = htab->root.splt;
+	  asection *s = htab->splt;
 
 	  /* If this is the first .plt entry, make room for the special
 	     first entry.  */
@@ -1958,10 +1824,10 @@ allocate_dynrelocs (struct elf_link_hash
 
 	  /* We also need to make an entry in the .got.plt section, which
 	     will be placed in the .got section by the linker script.  */
-	  htab->root.sgotplt->size += 4;
+	  htab->sgotplt->size += 4;
 
 	  /* We also need to make an entry in the .rel.plt section.  */
-	  htab->root.srelplt->size += sizeof (Elf32_External_Rela);
+	  htab->srelplt->size += sizeof (Elf32_External_Rela);
 	}
       else
 	{
@@ -1978,7 +1844,7 @@ allocate_dynrelocs (struct elf_link_hash
   if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
 
       /* Make sure this symbol is output as a dynamic symbol.
 	 Undefined weak syms won't yet be marked as dynamic.  */
@@ -1986,22 +1852,22 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
-      s = htab->root.sgot;
+      s = htab->sgot;
 
       h->got.offset = s->size;
       s->size += 4;
-      dyn = htab->root.dynamic_sections_created;
+      dyn = htab->dynamic_sections_created;
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h))
-	htab->root.srelgot->size += sizeof (Elf32_External_Rela);
+	htab->srelgot->size += sizeof (Elf32_External_Rela);
     }
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -2017,7 +1883,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL;)
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -2030,11 +1896,11 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -2042,7 +1908,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -2055,7 +1921,7 @@ allocate_dynrelocs (struct elf_link_hash
       if (!h->non_got_ref
 	  && ((h->def_dynamic
 	       && !h->def_regular)
-	      || (htab->root.dynamic_sections_created
+	      || (htab->dynamic_sections_created
 		  && (h->root.type == bfd_link_hash_undefweak
 		      || h->root.type == bfd_link_hash_undefined))))
 	{
@@ -2065,7 +1931,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -2074,58 +1940,31 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info)
 {
-  struct elf_m32r_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
 #ifdef DEBUG_PIC
@@ -2134,12 +1973,12 @@ m32r_elf_size_dynamic_sections (bfd *out
 
   htab = m32r_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
-  dynobj = htab->root.dynobj;
+  dynobj = htab->dynobj;
   BFD_ASSERT (dynobj != NULL);
 
-  if (htab->root.dynamic_sections_created)
+  if (htab->dynamic_sections_created)
     {
       /* Set the contents of the .interp section to the interpreter.  */
       if (bfd_link_executable (info) && !info->nointerp)
@@ -2198,8 +2037,8 @@ m32r_elf_size_dynamic_sections (bfd *out
       symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
       locsymcount = symtab_hdr->sh_info;
       end_local_got = local_got + locsymcount;
-      s = htab->root.sgot;
-      srel = htab->root.srelgot;
+      s = htab->sgot;
+      srel = htab->srelgot;
       for (; local_got < end_local_got; ++local_got)
 	{
 	  if (*local_got > 0)
@@ -2216,28 +2055,28 @@ m32r_elf_size_dynamic_sections (bfd *out
 
   /* Allocate global sym .plt and .got entries, and space for global
      sym dynamic relocs.  */
-  elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
+  elf_link_hash_traverse (htab, allocate_dynrelocs, info);
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
 
-      if (s == htab->root.splt
-	  || s == htab->root.sgot
-	  || s == htab->root.sgotplt
+      if (s == htab->splt
+	  || s == htab->sgot
+	  || s == htab->sgotplt
 	  || s == htab->sdynbss)
 	{
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
-	  if (s->size != 0 && s != htab->root.srelplt)
-	    relocs = TRUE;
+	  if (s->size != 0 && s != htab->srelplt)
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -2272,57 +2111,10 @@ m32r_elf_size_dynamic_sections (bfd *out
 	 of garbage.  */
       s->contents = bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
-    }
-
-  if (htab->root.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in m32r_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-     if (bfd_link_executable (info))
-	{
-	  if (! add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->root.splt->size != 0)
-	{
-	  if (! add_dynamic_entry (DT_PLTGOT, 0)
-	      || ! add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || ! add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || ! add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (! add_dynamic_entry (DT_RELA, 0)
-	      || ! add_dynamic_entry (DT_RELASZ, 0)
-	      || ! add_dynamic_entry (DT_RELAENT,
-				      sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->root, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (! add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
+	return false;
     }
-#undef add_dynamic_entry
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Relocate an M32R/D ELF section.
@@ -2358,7 +2150,7 @@ m32r_elf_size_dynamic_sections (bfd *out
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -2372,19 +2164,19 @@ m32r_elf_relocate_section (bfd *output_b
   struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
   Elf_Internal_Rela *rel, *relend;
   /* Assume success.  */
-  bfd_boolean ret = TRUE;
-  struct elf_m32r_link_hash_table *htab = m32r_elf_hash_table (info);
+  bool ret = true;
+  struct elf_link_hash_table *htab = m32r_elf_hash_table (info);
   bfd_vma *local_got_offsets;
   asection *sgot, *splt, *sreloc;
   bfd_vma high_address = bfd_get_section_limit (input_bfd, input_section);
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   local_got_offsets = elf_local_got_offsets (input_bfd);
 
-  sgot = htab->root.sgot;
-  splt = htab->root.splt;
+  sgot = htab->sgot;
+  splt = htab->splt;
   sreloc = NULL;
 
   rel = relocs;
@@ -2407,7 +2199,7 @@ m32r_elf_relocate_section (bfd *output_b
       const char *sym_name;
       bfd_reloc_status_type r;
       const char *errmsg = NULL;
-      bfd_boolean use_rel = FALSE;
+      bool use_rel = false;
 
       h = NULL;
       r_type = ELF32_R_TYPE (rel->r_info);
@@ -2417,7 +2209,7 @@ m32r_elf_relocate_section (bfd *output_b
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      input_bfd, (int) r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	  continue;
 	}
 
@@ -2429,7 +2221,7 @@ m32r_elf_relocate_section (bfd *output_b
 	continue;
 
       if (r_type <= R_M32R_GNU_VTENTRY)
-	use_rel = TRUE;
+	use_rel = true;
 
       howto = m32r_elf_howto_table + r_type;
       r_symndx = ELF32_R_SYM (rel->r_info);
@@ -2477,10 +2269,10 @@ m32r_elf_relocate_section (bfd *output_b
 	  if (h->root.type == bfd_link_hash_defined
 	      || h->root.type == bfd_link_hash_defweak)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 	      sec = h->root.u.def.section;
 
-	      dyn = htab->root.dynamic_sections_created;
+	      dyn = htab->dynamic_sections_created;
 	      sec = h->root.u.def.section;
 	      if (r_type == R_M32R_GOTPC24
 		  || (r_type == R_M32R_GOTPC_HI_ULO
@@ -2551,12 +2343,12 @@ m32r_elf_relocate_section (bfd *output_b
 		   && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
 	    ;
 	  else if (!bfd_link_relocatable (info))
-	    (*info->callbacks->undefined_symbol)
-	      (info, h->root.root.string, input_bfd,
-	       input_section, offset,
-	       (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
-		|| ELF_ST_VISIBILITY (h->other)));
-	}
+            info->callbacks->undefined_symbol
+	      (info, h->root.root.string, input_bfd, input_section, offset,
+	       (info->unresolved_syms_in_objects == RM_DIAGNOSE
+		&& !info->warn_unresolved_syms)
+	       || ELF_ST_VISIBILITY (h->other));
+        }
 
       if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
@@ -2695,13 +2487,13 @@ m32r_elf_relocate_section (bfd *output_b
 
 	      if (h != NULL)
 		{
-		  bfd_boolean dyn;
+		  bool dyn;
 		  bfd_vma off;
 
 		  off = h->got.offset;
 		  BFD_ASSERT (off != (bfd_vma) -1);
 
-		  dyn = htab->root.dynamic_sections_created;
+		  dyn = htab->dynamic_sections_created;
 		  if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
 							 bfd_link_pic (info),
 							 h)
@@ -2761,7 +2553,7 @@ m32r_elf_relocate_section (bfd *output_b
 
 			  /* We need to generate a R_M32R_RELATIVE reloc
 			     for the dynamic linker.  */
-			  srelgot = htab->root.srelgot;
+			  srelgot = htab->srelgot;
 			  BFD_ASSERT (srelgot != NULL);
 
 			  outrel.r_offset = (sgot->output_section->vma
@@ -2837,7 +2629,7 @@ m32r_elf_relocate_section (bfd *output_b
 			      || !h->def_regular))))
 		{
 		  Elf_Internal_Rela outrel;
-		  bfd_boolean skip, relocate;
+		  bool skip, relocate;
 		  bfd_byte *loc;
 
 		  /* When generating a shared object, these relocations
@@ -2846,22 +2638,22 @@ m32r_elf_relocate_section (bfd *output_b
 		  if (sreloc == NULL)
 		    {
 		      sreloc = _bfd_elf_get_dynamic_reloc_section
-			(input_bfd, input_section, /*rela?*/ TRUE);
+			(input_bfd, input_section, /*rela?*/ true);
 		      if (sreloc == NULL)
-			return FALSE;
+			return false;
 		    }
 
-		  skip = FALSE;
-		  relocate = FALSE;
+		  skip = false;
+		  relocate = false;
 
 		  outrel.r_offset = _bfd_elf_section_offset (output_bfd,
 							     info,
 							     input_section,
 							     rel->r_offset);
 		  if (outrel.r_offset == (bfd_vma) -1)
-		    skip = TRUE;
+		    skip = true;
 		  else if (outrel.r_offset == (bfd_vma) -2)
-		    skip = relocate = TRUE;
+		    skip = relocate = true;
 		  outrel.r_offset += (input_section->output_section->vma
 				      + input_section->output_offset);
 
@@ -2884,7 +2676,7 @@ m32r_elf_relocate_section (bfd *output_b
 			|| ((info->symbolic || h->dynindx == -1)
 			     && h->def_regular))
 		      {
-			relocate = TRUE;
+			relocate = true;
 			outrel.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
 			outrel.r_addend = relocation + rel->r_addend;
 		      }
@@ -2968,7 +2760,7 @@ m32r_elf_relocate_section (bfd *output_b
 						 &sda_base);
 		    if (r != bfd_reloc_ok)
 		      {
-			ret = FALSE;
+			ret = false;
 			goto check_reloc;
 		      }
 
@@ -2988,7 +2780,7 @@ m32r_elf_relocate_section (bfd *output_b
 		       m32r_elf_howto_table[(int) r_type].name,
 		       sec);
 		    /*bfd_set_error (bfd_error_bad_value); ??? why? */
-		    ret = FALSE;
+		    ret = false;
 		    continue;
 		  }
 	      }
@@ -3038,7 +2830,7 @@ m32r_elf_relocate_section (bfd *output_b
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, offset, TRUE);
+		(info, name, input_bfd, input_section, offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -3071,13 +2863,13 @@ m32r_elf_relocate_section (bfd *output_b
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 m32r_elf_finish_dynamic_symbol (bfd *output_bfd,
 				struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
 				Elf_Internal_Sym *sym)
 {
-  struct elf_m32r_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   bfd_byte *loc;
 
 #ifdef DEBUG_PIC
@@ -3086,7 +2878,7 @@ m32r_elf_finish_dynamic_symbol (bfd *out
 
   htab = m32r_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (h->plt.offset != (bfd_vma) -1)
     {
@@ -3103,9 +2895,9 @@ m32r_elf_finish_dynamic_symbol (bfd *out
 
       BFD_ASSERT (h->dynindx != -1);
 
-      splt = htab->root.splt;
-      sgot = htab->root.sgotplt;
-      srela = htab->root.srelplt;
+      splt = htab->splt;
+      sgot = htab->sgotplt;
+      srela = htab->srelplt;
       BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
 
       /* Get the index in the procedure linkage table which
@@ -3199,8 +2991,8 @@ m32r_elf_finish_dynamic_symbol (bfd *out
       /* This symbol has an entry in the global offset table.  Set it
 	 up.  */
 
-      sgot = htab->root.sgot;
-      srela = htab->root.srelgot;
+      sgot = htab->sgot;
+      srela = htab->srelgot;
       BFD_ASSERT (sgot != NULL && srela != NULL);
 
       rela.r_offset = (sgot->output_section->vma
@@ -3248,7 +3040,7 @@ m32r_elf_finish_dynamic_symbol (bfd *out
 		  && (h->root.type == bfd_link_hash_defined
 		      || h->root.type == bfd_link_hash_defweak));
 
-      s = bfd_get_linker_section (htab->root.dynobj, ".rela.bss");
+      s = bfd_get_linker_section (htab->dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -3263,20 +3055,20 @@ m32r_elf_finish_dynamic_symbol (bfd *out
     }
 
   /* Mark some specially defined symbols as absolute.  */
-  if (h == htab->root.hdynamic || h == htab->root.hgot)
+  if (h == htab->hdynamic || h == htab->hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 m32r_elf_finish_dynamic_sections (bfd *output_bfd,
 				  struct bfd_link_info *info)
 {
-  struct elf_m32r_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   bfd *dynobj;
   asection *sdyn;
   asection *sgot;
@@ -3287,14 +3079,14 @@ m32r_elf_finish_dynamic_sections (bfd *o
 
   htab = m32r_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
-  dynobj = htab->root.dynobj;
+  dynobj = htab->dynobj;
 
-  sgot = htab->root.sgotplt;
+  sgot = htab->sgotplt;
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
-  if (htab->root.dynamic_sections_created)
+  if (htab->dynamic_sections_created)
     {
       asection *splt;
       Elf32_External_Dyn *dyncon, *dynconend;
@@ -3317,17 +3109,17 @@ m32r_elf_finish_dynamic_sections (bfd *o
 	      break;
 
 	    case DT_PLTGOT:
-	      s = htab->root.sgotplt;
+	      s = htab->sgotplt;
 	      goto get_vma;
 	    case DT_JMPREL:
-	      s = htab->root.srelplt;
+	      s = htab->srelplt;
 	    get_vma:
 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 
 	    case DT_PLTRELSZ:
-	      s = htab->root.srelplt;
+	      s = htab->srelplt;
 	      dyn.d_un.d_val = s->size;
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
@@ -3335,7 +3127,7 @@ m32r_elf_finish_dynamic_sections (bfd *o
 	}
 
       /* Fill in the first entry in the procedure linkage table.  */
-      splt = htab->root.splt;
+      splt = htab->splt;
       if (splt && splt->size > 0)
 	{
 	  if (bfd_link_pic (info))
@@ -3382,13 +3174,13 @@ m32r_elf_finish_dynamic_sections (bfd *o
       elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
     }
 
-  return TRUE;
+  return true;
 }
 
 
 /* Set the right machine number.  */
 
-static bfd_boolean
+static bool
 m32r_elf_object_p (bfd *abfd)
 {
   switch (elf_elfheader (abfd)->e_flags & EF_M32R_ARCH)
@@ -3398,12 +3190,12 @@ m32r_elf_object_p (bfd *abfd)
     case E_M32RX_ARCH:  (void) bfd_default_set_arch_mach (abfd, bfd_arch_m32r, bfd_mach_m32rx); break;
     case E_M32R2_ARCH:  (void) bfd_default_set_arch_mach (abfd, bfd_arch_m32r, bfd_mach_m32r2); break;
     }
-  return TRUE;
+  return true;
 }
 
 /* Store the machine number in the flags field.  */
 
-static bfd_boolean
+static bool
 m32r_elf_final_write_processing (bfd *abfd)
 {
   unsigned long val;
@@ -3423,21 +3215,21 @@ m32r_elf_final_write_processing (bfd *ab
 
 /* Function to keep M32R specific file flags.  */
 
-static bfd_boolean
+static bool
 m32r_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 m32r_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -3446,7 +3238,7 @@ m32r_elf_merge_private_bfd_data (bfd *ib
 
   if (   bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   in_flags  = elf_elfheader (ibfd)->e_flags;
   out_flags = elf_elfheader (obfd)->e_flags;
@@ -3460,9 +3252,9 @@ m32r_elf_merge_private_bfd_data (bfd *ib
 	 unitialised values, which surprise surprise, correspond
 	 to the default values.  */
       if (bfd_get_arch_info (ibfd)->the_default)
-	return TRUE;
+	return true;
 
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
@@ -3470,12 +3262,12 @@ m32r_elf_merge_private_bfd_data (bfd *ib
 	return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
 				  bfd_get_mach (ibfd));
 
-      return TRUE;
+      return true;
     }
 
   /* Check flag compatibility.  */
   if (in_flags == out_flags)
-    return TRUE;
+    return true;
 
   if ((in_flags & EF_M32R_ARCH) != (out_flags & EF_M32R_ARCH))
     {
@@ -3487,16 +3279,16 @@ m32r_elf_merge_private_bfd_data (bfd *ib
 	    (_("%pB: instruction set mismatch with previous modules"), ibfd);
 
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Display the flags field.  */
 
-static bfd_boolean
+static bool
 m32r_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE * file = (FILE *) ptr;
@@ -3517,7 +3309,7 @@ m32r_elf_print_private_bfd_data (bfd *ab
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 static asection *
@@ -3544,7 +3336,7 @@ m32r_elf_gc_mark_hook (asection *sec,
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 m32r_elf_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
@@ -3554,21 +3346,12 @@ m32r_elf_check_relocs (bfd *abfd,
   struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
-  struct elf_m32r_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   bfd *dynobj;
   asection *sreloc;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+    return true;
 
   sreloc = NULL;
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -3576,9 +3359,9 @@ m32r_elf_check_relocs (bfd *abfd,
 
   htab = m32r_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
-  dynobj = htab->root.dynobj;
+  dynobj = htab->dynobj;
 
   rel_end = relocs + sec->reloc_count;
   for (rel = relocs; rel < rel_end; rel++)
@@ -3600,7 +3383,7 @@ m32r_elf_check_relocs (bfd *abfd,
 	}
 
       /* Some relocs require a global offset table.  */
-      if (htab->root.sgot == NULL)
+      if (htab->sgot == NULL)
 	{
 	  switch (r_type)
 	    {
@@ -3617,9 +3400,9 @@ m32r_elf_check_relocs (bfd *abfd,
 	    case R_M32R_GOTPC_LO:
 	    case R_M32R_GOT24:
 	      if (dynobj == NULL)
-		htab->root.dynobj = dynobj = abfd;
+		htab->dynobj = dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return FALSE;
+		return false;
 	      break;
 
 	    default:
@@ -3651,7 +3434,7 @@ m32r_elf_check_relocs (bfd *abfd,
 		  size *= sizeof (bfd_signed_vma);
 		  local_got_refcounts = bfd_zalloc (abfd, size);
 		  if (local_got_refcounts == NULL)
-		    return FALSE;
+		    return false;
 		  elf_local_got_refcounts (abfd) = local_got_refcounts;
 		}
 	      local_got_refcounts[r_symndx] += 1;
@@ -3734,7 +3517,7 @@ m32r_elf_check_relocs (bfd *abfd,
 	      struct elf_dyn_relocs **head;
 
 	      if (dynobj == NULL)
-		htab->root.dynobj = dynobj = abfd;
+		htab->dynobj = dynobj = abfd;
 
 	      /* When creating a shared object, we must copy these
 		 relocs into the output file.  We create a reloc
@@ -3742,16 +3525,16 @@ m32r_elf_check_relocs (bfd *abfd,
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, dynobj, 2, abfd, /*rela?*/ TRUE);
+		    (sec, dynobj, 2, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
-		head = &((struct elf_m32r_link_hash_entry *) h)->dyn_relocs;
+		head = &h->dyn_relocs;
 	      else
 		{
 		  /* Track dynamic relocs needed for local syms too.  */
@@ -3762,7 +3545,7 @@ m32r_elf_check_relocs (bfd *abfd,
 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
@@ -3775,11 +3558,11 @@ m32r_elf_check_relocs (bfd *abfd,
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof (*p);
+		  size_t amt = sizeof (*p);
 
 		  p = bfd_alloc (dynobj, amt);
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -3801,23 +3584,23 @@ m32r_elf_check_relocs (bfd *abfd,
 	case R_M32R_RELA_GNU_VTINHERIT:
 	case R_M32R_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_M32R_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 	case R_M32R_RELA_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static const struct bfd_elf_special_section m32r_elf_special_sections[] =
@@ -3827,6 +3610,18 @@ static const struct bfd_elf_special_sect
   { NULL,		      0,  0, 0,		   0 }
 };
 
+static bool
+m32r_elf_section_flags (const Elf_Internal_Shdr *hdr)
+{
+  const char *name = hdr->bfd_section->name;
+
+  if (startswith (name, ".sbss")
+      || startswith (name, ".sdata"))
+    hdr->bfd_section->flags |= SEC_SMALL_DATA;
+
+  return true;
+}
+
 static enum elf_reloc_type_class
 m32r_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			   const asection *rel_sec ATTRIBUTE_UNUSED,
@@ -3869,7 +3664,6 @@ m32r_elf_reloc_type_class (const struct
 #define elf_backend_adjust_dynamic_symbol	m32r_elf_adjust_dynamic_symbol
 #define elf_backend_finish_dynamic_symbol	m32r_elf_finish_dynamic_symbol
 #define elf_backend_reloc_type_class		m32r_elf_reloc_type_class
-#define elf_backend_copy_indirect_symbol	m32r_elf_copy_indirect_symbol
 
 #define elf_backend_can_gc_sections		1
 /*#if !USE_REL
@@ -3897,8 +3691,9 @@ m32r_elf_reloc_type_class (const struct
 #define bfd_elf32_bfd_set_private_flags		m32r_elf_set_private_flags
 #define bfd_elf32_bfd_print_private_bfd_data	m32r_elf_print_private_bfd_data
 #define elf_backend_special_sections		m32r_elf_special_sections
+#define elf_backend_section_flags		m32r_elf_section_flags
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #include "elf32-target.h"
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68hc11.c ./bfd/elf32-m68hc11.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68hc11.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-m68hc11.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Motorola 68HC11-specific support for 32-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by Stephane Carrez (stcarrez@nerim.fr)
    (Heavily copied from the D10V port by Martin Hunt (hunt@cygnus.com))
 
@@ -32,20 +32,20 @@
 /* Relocation functions.  */
 static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean m68hc11_info_to_howto_rel
+static bool m68hc11_info_to_howto_rel
   (bfd *, arelent *, Elf_Internal_Rela *);
 
 /* Trampoline generation.  */
-static bfd_boolean m68hc11_elf_size_one_stub
+static bool m68hc11_elf_size_one_stub
   (struct bfd_hash_entry *gen_entry, void *in_arg);
-static bfd_boolean m68hc11_elf_build_one_stub
+static bool m68hc11_elf_build_one_stub
   (struct bfd_hash_entry *gen_entry, void *in_arg);
 static struct bfd_link_hash_table* m68hc11_elf_bfd_link_hash_table_create
   (bfd* abfd);
 
 /* Linker relaxation.  */
-static bfd_boolean m68hc11_elf_relax_section
-  (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
+static bool m68hc11_elf_relax_section
+  (bfd *, asection *, struct bfd_link_info *, bool *);
 static void m68hc11_elf_relax_delete_bytes
   (bfd *, asection *, bfd_vma, int);
 static void m68hc11_relax_group
@@ -65,213 +65,213 @@ static reloc_howto_type elf_m68hc11_howt
   /* This reloc does nothing.  */
   HOWTO (R_M68HC11_NONE,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit absolute relocation */
   HOWTO (R_M68HC11_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit absolute relocation (upper address) */
   HOWTO (R_M68HC11_HI8,		/* type */
 	 8,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_HI8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit absolute relocation (upper address) */
   HOWTO (R_M68HC11_LO8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_LO8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit PC-rel relocation */
   HOWTO (R_M68HC11_PCREL_8,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_PCREL_8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit absolute relocation */
   HOWTO (R_M68HC11_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont /*bitfield */ ,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  This one is never used for the
      code relocation.  It's used by gas for -gstabs generation.  */
   HOWTO (R_M68HC11_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 3 bit absolute relocation */
   HOWTO (R_M68HC11_3B,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 3,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_4B",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x003,			/* src_mask */
 	 0x003,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit PC-rel relocation */
   HOWTO (R_M68HC11_PCREL_16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_PCREL_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_M68HC11_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_M68HC11_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_M68HC11_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_M68HC11_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 24 bit relocation */
   HOWTO (R_M68HC11_24,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16-bit low relocation */
   HOWTO (R_M68HC11_LO16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A page relocation */
   HOWTO (R_M68HC11_PAGE,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC11_PAGE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (14),
   EMPTY_HOWTO (15),
@@ -283,32 +283,32 @@ static reloc_howto_type elf_m68hc11_howt
   /* Mark beginning of a jump instruction (any form).  */
   HOWTO (R_M68HC11_RL_JUMP,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 m68hc11_elf_ignore_reloc,	/* special_function */
 	 "R_M68HC11_RL_JUMP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Mark beginning of Gcc relaxation group instruction.  */
   HOWTO (R_M68HC11_RL_GROUP,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 m68hc11_elf_ignore_reloc,	/* special_function */
 	 "R_M68HC11_RL_GROUP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 /* Map BFD reloc types to M68HC11 ELF reloc types.  */
@@ -377,7 +377,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an M68HC11 ELF reloc.  */
 
-static bfd_boolean
+static bool
 m68hc11_info_to_howto_rel (bfd *abfd,
 			   arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
@@ -390,17 +390,17 @@ m68hc11_info_to_howto_rel (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_m68hc11_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 
 /* Far trampoline generation.  */
 
 /* Build a 68HC11 trampoline stub.  */
-static bfd_boolean
+static bool
 m68hc11_elf_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 {
   struct elf32_m68hc11_stub_hash_entry *stub_entry;
@@ -415,9 +415,17 @@ m68hc11_elf_build_one_stub (struct bfd_h
   stub_entry = (struct elf32_m68hc11_stub_hash_entry *) gen_entry;
   info = (struct bfd_link_info *) in_arg;
 
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (stub_entry->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without --enable-non-contiguous-regions.\n"),
+			    stub_entry->target_section);
+
   htab = m68hc11_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   stub_sec = stub_entry->stub_sec;
 
@@ -458,13 +466,13 @@ m68hc11_elf_build_one_stub (struct bfd_h
   bfd_put_8 (stub_bfd, 0x7E, loc);
   bfd_put_16 (stub_bfd, htab->pinfo.trampoline_addr, loc + 1);
 
-  return TRUE;
+  return true;
 }
 
 /* As above, but don't actually build the stub.  Just bump offset so
    we know stub section sizes.  */
 
-static bfd_boolean
+static bool
 m68hc11_elf_size_one_stub (struct bfd_hash_entry *gen_entry,
 			   void *in_arg ATTRIBUTE_UNUSED)
 {
@@ -474,7 +482,7 @@ m68hc11_elf_size_one_stub (struct bfd_ha
   stub_entry = (struct elf32_m68hc11_stub_hash_entry *) gen_entry;
 
   stub_entry->stub_sec->size += 10;
-  return TRUE;
+  return true;
 }
 
 /* Create a 68HC11 ELF linker hash table.  */
@@ -497,7 +505,7 @@ m68hc11_elf_bfd_link_hash_table_create (
 
 /* 68HC11 Linker Relaxation.  */
 
-struct m68hc11_direct_relax
+const struct m68hc11_direct_relax
 {
   const char *name;
   unsigned char code;
@@ -540,7 +548,7 @@ struct m68hc11_direct_relax
   { 0, 0, 0 }
 };
 
-static struct m68hc11_direct_relax *
+static const struct m68hc11_direct_relax *
 find_relaxable_insn (unsigned char code)
 {
   int i;
@@ -678,9 +686,9 @@ m68hc11_relax_group (bfd *abfd, asection
 
 	and somewhat more difficult to support.  */
 
-static bfd_boolean
+static bool
 m68hc11_elf_relax_section (bfd *abfd, asection *sec,
-			   struct bfd_link_info *link_info, bfd_boolean *again)
+			   struct bfd_link_info *link_info, bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -695,16 +703,17 @@ m68hc11_elf_relax_section (bfd *abfd, as
   Elf_Internal_Sym *isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -945,7 +954,7 @@ m68hc11_elf_relax_section (bfd *abfd, as
 					      irel->r_offset + 1, 3);
 	    }
 	  prev_insn_branch = 0;
-	  *again = TRUE;
+	  *again = true;
 	}
 
       /* Try to turn a 16 bit address into a 8 bit page0 address.  */
@@ -954,7 +963,7 @@ m68hc11_elf_relax_section (bfd *abfd, as
 	{
 	  unsigned char code;
 	  unsigned short offset;
-	  struct m68hc11_direct_relax *rinfo;
+	  const struct m68hc11_direct_relax *rinfo;
 
 	  prev_insn_branch = 0;
 	  offset = bfd_get_16 (abfd, contents + irel->r_offset);
@@ -987,7 +996,7 @@ m68hc11_elf_relax_section (bfd *abfd, as
 	      irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
 					   R_M68HC11_NONE);
 	      if (sec->size != old_sec_size)
-		*again = TRUE;
+		*again = true;
 	      continue;
 	    }
 
@@ -1024,7 +1033,7 @@ m68hc11_elf_relax_section (bfd *abfd, as
 				       R_M68HC11_8);
 
 	  /* That will change things, so, we should relax again.  */
-	  *again = TRUE;
+	  *again = true;
 	}
       else if (ELF32_R_TYPE (irel->r_info) == R_M68HC11_16 && !is_far)
 	{
@@ -1066,7 +1075,7 @@ m68hc11_elf_relax_section (bfd *abfd, as
 		  m68hc11_elf_relax_delete_bytes (abfd, sec,
 						  irel->r_offset + 1, 1);
 		  /* That will change things, so, we should relax again.  */
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 	}
@@ -1074,11 +1083,8 @@ m68hc11_elf_relax_section (bfd *abfd, as
       prev_insn_group = 0;
     }
 
-  if (free_relocs != NULL)
-    {
-      free (free_relocs);
-      free_relocs = NULL;
-    }
+  free (free_relocs);
+  free_relocs = NULL;
 
   if (free_contents != NULL)
     {
@@ -1104,16 +1110,13 @@ m68hc11_elf_relax_section (bfd *abfd, as
       free_extsyms = NULL;
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (free_relocs != NULL)
-    free (free_relocs);
-  if (free_contents != NULL)
-    free (free_contents);
-  if (free_extsyms != NULL)
-    free (free_extsyms);
-  return FALSE;
+  free (free_relocs);
+  free (free_contents);
+  free (free_extsyms);
+  return false;
 }
 
 /* Delete some bytes from a section while relaxing.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68hc12.c ./bfd/elf32-m68hc12.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68hc12.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-m68hc12.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Motorola 68HC12-specific support for 32-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by Stephane Carrez (stcarrez@nerim.fr)
    (Heavily copied from the D10V port by Martin Hunt (hunt@cygnus.com))
 
@@ -32,7 +32,7 @@
 /* Relocation functions.  */
 static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean m68hc11_info_to_howto_rel
+static bool m68hc11_info_to_howto_rel
   (bfd *, arelent *, Elf_Internal_Rela *);
 
 /* Trampoline generation.  */
@@ -107,320 +107,320 @@ static reloc_howto_type elf_m68hc11_howt
   /* This reloc does nothing.  */
   HOWTO (R_M68HC11_NONE,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit absolute relocation */
   HOWTO (R_M68HC11_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit absolute relocation (upper address) */
   HOWTO (R_M68HC11_HI8,		/* type */
 	 8,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_HI8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit absolute relocation (upper address) */
   HOWTO (R_M68HC11_LO8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_LO8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit PC-rel relocation */
   HOWTO (R_M68HC11_PCREL_8,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_PCREL_8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit absolute relocation */
   HOWTO (R_M68HC11_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont /*bitfield */ ,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  This one is never used for the
      code relocation.  It's used by gas for -gstabs generation.  */
   HOWTO (R_M68HC11_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 3 bit absolute relocation */
   HOWTO (R_M68HC11_3B,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 3,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_4B",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x003,			/* src_mask */
 	 0x003,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit PC-rel relocation */
   HOWTO (R_M68HC11_PCREL_16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_PCREL_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_M68HC11_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_M68HC11_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_M68HC11_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_M68HC11_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 24 bit relocation */
   HOWTO (R_M68HC11_24,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 m68hc11_elf_special_reloc,	/* special_function */
 	 "R_M68HC12_24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16-bit low relocation */
   HOWTO (R_M68HC11_LO16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 m68hc11_elf_special_reloc,/* special_function */
 	 "R_M68HC12_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A page relocation */
   HOWTO (R_M68HC11_PAGE,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 m68hc11_elf_special_reloc,/* special_function */
 	 "R_M68HC12_PAGE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (14),
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_M68HC12_16B,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_16B",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 9 bit PC-rel relocation.  */
   HOWTO (R_M68HC12_PCREL_9,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize (result is >>1) */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_PCREL_9",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xfe00,		/* src_mask */
 	 0x01ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 10 bit PC-rel relocation.  */
   HOWTO (R_M68HC12_PCREL_10,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 11,			/* bitsize (result is >>1) */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_PCREL_10",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xfc00,		/* src_mask */
 	 0x03ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 8 bit absolute relocation (upper address).  */
   HOWTO (R_M68HC12_HI8XG,		/* type */
 	 8,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_HI8XG",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit absolute relocation (lower address).  */
   HOWTO (R_M68HC12_LO8XG,		/* type */
 	 8,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_M68HC12_LO8XG",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ff,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Mark beginning of a jump instruction (any form).  */
   HOWTO (R_M68HC11_RL_JUMP,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 m68hc11_elf_ignore_reloc,	/* special_function */
 	 "R_M68HC12_RL_JUMP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Mark beginning of Gcc relaxation group instruction.  */
   HOWTO (R_M68HC11_RL_GROUP,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 m68hc11_elf_ignore_reloc,	/* special_function */
 	 "R_M68HC12_RL_GROUP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 /* Map BFD reloc types to M68HC11 ELF reloc types.  */
@@ -497,7 +497,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an M68HC11 ELF reloc.  */
 
-static bfd_boolean
+static bool
 m68hc11_info_to_howto_rel (bfd *abfd,
 			   arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
@@ -510,17 +510,17 @@ m68hc11_info_to_howto_rel (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_m68hc11_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 
 /* Far trampoline generation.  */
 
 /* Build a 68HC12 trampoline stub.  */
-static bfd_boolean
+static bool
 m68hc12_elf_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 {
   struct elf32_m68hc11_stub_hash_entry *stub_entry;
@@ -535,6 +535,14 @@ m68hc12_elf_build_one_stub (struct bfd_h
   stub_entry = (struct elf32_m68hc11_stub_hash_entry *) gen_entry;
   info = (struct bfd_link_info *) in_arg;
 
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (stub_entry->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without --enable-non-contiguous-regions.\n"),
+			    stub_entry->target_section);
+
   htab = m68hc11_elf_hash_table (info);
 
   stub_sec = stub_entry->stub_sec;
@@ -568,13 +576,13 @@ m68hc12_elf_build_one_stub (struct bfd_h
   bfd_put_16 (stub_bfd, htab->pinfo.trampoline_addr, loc + 1);
   bfd_put_8 (stub_bfd, phys_page, loc + 3);
 
-  return TRUE;
+  return true;
 }
 
 /* As above, but don't actually build the stub.  Just bump offset so
    we know stub section sizes.  */
 
-static bfd_boolean
+static bool
 m68hc12_elf_size_one_stub (struct bfd_hash_entry *gen_entry,
 			   void *in_arg ATTRIBUTE_UNUSED)
 {
@@ -584,7 +592,7 @@ m68hc12_elf_size_one_stub (struct bfd_ha
   stub_entry = (struct elf32_m68hc11_stub_hash_entry *) gen_entry;
 
   stub_entry->stub_sec->size += 7;
-  return TRUE;
+  return true;
 }
 
 /* Create a 68HC12 ELF linker hash table.  */
@@ -604,7 +612,7 @@ m68hc12_elf_bfd_link_hash_table_create (
   return &ret->root.root;
 }
 
-static bfd_boolean
+static bool
 m68hc12_elf_set_mach_from_flags (bfd *abfd)
 {
   flagword flags = elf_elfheader (abfd)->e_flags;
@@ -622,9 +630,9 @@ m68hc12_elf_set_mach_from_flags (bfd *ab
 				 bfd_mach_m6812_default);
       break;
     default:
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Specific sections:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68hc1x.c ./bfd/elf32-m68hc1x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68hc1x.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-m68hc1x.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Motorola 68HC11/HC12-specific support for 32-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by Stephane Carrez (stcarrez@nerim.fr)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -20,7 +20,6 @@
    MA 02110-1301, USA.  */
 
 #include "sysdep.h"
-#include "alloca-conf.h"
 #include "bfd.h"
 #include "bfdlink.h"
 #include "libbfd.h"
@@ -46,7 +45,7 @@ static void m68hc11_elf_set_symbol (bfd*
 				    const char* name, bfd_vma value,
 				    asection* sec);
 
-static bfd_boolean m68hc11_elf_export_one_stub
+static bool m68hc11_elf_export_one_stub
   (struct bfd_hash_entry *gen_entry, void *in_arg);
 
 static void scan_sections_for_abi (bfd*, asection*, void *);
@@ -54,7 +53,7 @@ static void scan_sections_for_abi (bfd*,
 struct m68hc11_scan_param
 {
    struct m68hc11_page_info* pinfo;
-   bfd_boolean use_memory_banks;
+   bool use_memory_banks;
 };
 
 
@@ -77,7 +76,7 @@ struct m68hc11_elf_link_hash_table*
 m68hc11_elf_hash_table_create (bfd *abfd)
 {
   struct m68hc11_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct m68hc11_elf_link_hash_table);
+  size_t amt = sizeof (struct m68hc11_elf_link_hash_table);
 
   ret = (struct m68hc11_elf_link_hash_table *) bfd_zmalloc (amt);
   if (ret == (struct m68hc11_elf_link_hash_table *) NULL)
@@ -158,7 +157,7 @@ m68hc12_add_stub (const char *stub_name,
 
   /* Enter this entry into the linker stub hash table.  */
   stub_entry = m68hc12_stub_hash_lookup (htab->stub_hash_table, stub_name,
-					 TRUE, FALSE);
+					 true, false);
   if (stub_entry == NULL)
     {
       /* xgettext:c-format */
@@ -182,7 +181,7 @@ m68hc12_add_stub (const char *stub_name,
    file.  We use it for identify far symbols and force a loading of
    the trampoline handler.  */
 
-bfd_boolean
+bool
 elf32_m68hc11_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
 			       Elf_Internal_Sym *sym,
 			       const char **namep ATTRIBUTE_UNUSED,
@@ -196,7 +195,7 @@ elf32_m68hc11_add_symbol_hook (bfd *abfd
 
       h = (struct elf_link_hash_entry *)
 	bfd_link_hash_lookup (info->hash, "__far_trampoline",
-			      FALSE, FALSE, FALSE);
+			      false, false, false);
       if (h == NULL)
 	{
 	  struct bfd_link_hash_entry* entry = NULL;
@@ -206,11 +205,11 @@ elf32_m68hc11_add_symbol_hook (bfd *abfd
 					    BSF_GLOBAL,
 					    bfd_und_section_ptr,
 					    (bfd_vma) 0, (const char*) NULL,
-					    FALSE, FALSE, &entry);
+					    false, false, &entry);
 	}
 
     }
-  return TRUE;
+  return true;
 }
 
 /* Merge non-visibility st_other attributes, STO_M68HC12_FAR and
@@ -218,12 +217,12 @@ elf32_m68hc11_add_symbol_hook (bfd *abfd
 
 void
 elf32_m68hc11_merge_symbol_attribute (struct elf_link_hash_entry *h,
-				      const Elf_Internal_Sym *isym,
-				      bfd_boolean definition,
-				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
+				      unsigned int st_other,
+				      bool definition,
+				      bool dynamic ATTRIBUTE_UNUSED)
 {
   if (definition)
-    h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
+    h->other = ((st_other & ~ELF_ST_VISIBILITY (-1))
 		| ELF_ST_VISIBILITY (h->other));
 }
 
@@ -241,7 +240,7 @@ elf32_m68hc11_setup_section_lists (bfd *
   unsigned int top_id, top_index;
   asection *section;
   asection **input_list, **list;
-  bfd_size_type amt;
+  size_t amt;
   asection *text_section;
   struct m68hc11_elf_link_hash_table *htab;
 
@@ -325,7 +324,7 @@ elf32_m68hc11_setup_section_lists (bfd *
    PC-relative calls to a target that is unreachable with a "bl"
    instruction.  */
 
-bfd_boolean
+bool
 elf32_m68hc11_size_stubs (bfd *output_bfd, bfd *stub_bfd,
 			  struct bfd_link_info *info,
 			  asection * (*add_stub_section) (const char*, asection*))
@@ -334,12 +333,12 @@ elf32_m68hc11_size_stubs (bfd *output_bf
   asection *section;
   Elf_Internal_Sym *local_syms, **all_local_syms;
   unsigned int bfd_indx, bfd_count;
-  bfd_size_type amt;
+  size_t amt;
   asection *stub_sec;
   struct m68hc11_elf_link_hash_table *htab = m68hc11_elf_hash_table (info);
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Stash our params away.  */
   htab->stub_bfd = stub_bfd;
@@ -357,7 +356,7 @@ elf32_m68hc11_size_stubs (bfd *output_bf
   amt = sizeof (Elf_Internal_Sym *) * bfd_count;
   all_local_syms = (Elf_Internal_Sym **) bfd_zmalloc (amt);
   if (all_local_syms == NULL)
-    return FALSE;
+    return false;
 
   /* Walk over all the input BFDs, swapping in local symbols.  */
   for (input_bfd = info->input_bfds, bfd_indx = 0;
@@ -384,7 +383,7 @@ elf32_m68hc11_size_stubs (bfd *output_bf
       if (local_syms == NULL)
 	{
 	  free (all_local_syms);
-	  return FALSE;
+	  return false;
 	}
 
       all_local_syms[bfd_indx] = local_syms;
@@ -459,7 +458,7 @@ elf32_m68hc11_size_stubs (bfd *output_bf
 		{
 		  /* It's a local symbol.  */
 		  Elf_Internal_Shdr *hdr;
-		  bfd_boolean is_far;
+		  bool is_far;
 
 		  sym = local_syms + r_indx;
 		  is_far = (sym && (sym->st_other & STO_M68HC12_FAR));
@@ -524,7 +523,7 @@ elf32_m68hc11_size_stubs (bfd *output_bf
 	      stub_entry = m68hc12_stub_hash_lookup
 		(htab->stub_hash_table,
 		 stub_name,
-		 FALSE, FALSE);
+		 false, false);
 	      if (stub_entry == NULL)
 		{
 		  if (add_stub_section == 0)
@@ -564,27 +563,27 @@ elf32_m68hc11_size_stubs (bfd *output_bf
       bfd_hash_traverse (htab->stub_hash_table, htab->size_one_stub, htab);
     }
   free (all_local_syms);
-  return TRUE;
+  return true;
 
  error_ret_free_local:
   free (all_local_syms);
-  return FALSE;
+  return false;
 }
 
 /* Export the trampoline addresses in the symbol table.  */
-static bfd_boolean
+static bool
 m68hc11_elf_export_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 {
   struct bfd_link_info *info;
   struct m68hc11_elf_link_hash_table *htab;
   struct elf32_m68hc11_stub_hash_entry *stub_entry;
   char* name;
-  bfd_boolean result;
+  bool result;
 
   info = (struct bfd_link_info *) in_arg;
   htab = m68hc11_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Massage our args to the form they really have.  */
   stub_entry = (struct elf32_m68hc11_stub_hash_entry *) gen_entry;
@@ -611,7 +610,7 @@ m68hc11_elf_set_symbol (bfd *abfd, struc
   struct elf_link_hash_entry *h;
 
   h = (struct elf_link_hash_entry *)
-    bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, FALSE);
+    bfd_link_hash_lookup (info->hash, name, false, false, false);
   if (h == NULL)
     {
       _bfd_generic_link_add_one_symbol (info, abfd,
@@ -620,7 +619,7 @@ m68hc11_elf_set_symbol (bfd *abfd, struc
 					sec,
 					value,
 					(const char*) NULL,
-					TRUE, FALSE, NULL);
+					true, false, NULL);
     }
   else
     {
@@ -636,7 +635,7 @@ m68hc11_elf_set_symbol (bfd *abfd, struc
    table.  This function is called via m68hc12elf_finish in the
    linker.  */
 
-bfd_boolean
+bool
 elf32_m68hc11_build_stubs (bfd *abfd, struct bfd_link_info *info)
 {
   asection *stub_sec;
@@ -647,7 +646,7 @@ elf32_m68hc11_build_stubs (bfd *abfd, st
   m68hc11_elf_get_bank_parameters (info);
   htab = m68hc11_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   for (stub_sec = htab->stub_bfd->sections;
        stub_sec != NULL;
@@ -659,7 +658,7 @@ elf32_m68hc11_build_stubs (bfd *abfd, st
       size = stub_sec->size;
       stub_sec->contents = (unsigned char *) bfd_zalloc (htab->stub_bfd, size);
       if (stub_sec->contents == NULL && size != 0)
-	return FALSE;
+	return false;
       stub_sec->size = 0;
     }
 
@@ -672,7 +671,7 @@ elf32_m68hc11_build_stubs (bfd *abfd, st
      are mapped.  This is used by gdb and the simulator to obtain
      the information.  It can be used by programs to burn the eprom
      at the good addresses.  */
-  param.use_memory_banks = FALSE;
+  param.use_memory_banks = false;
   param.pinfo = &htab->pinfo;
   bfd_map_over_sections (abfd, scan_sections_for_abi, &param);
   if (param.use_memory_banks)
@@ -688,7 +687,7 @@ elf32_m68hc11_build_stubs (bfd *abfd, st
 			      bfd_abs_section_ptr);
     }
 
-  return TRUE;
+  return true;
 }
 
 void
@@ -714,7 +713,7 @@ m68hc11_elf_get_bank_parameters (struct
   pinfo->bank_size = 1 << M68HC12_BANK_SHIFT;
 
   h = bfd_link_hash_lookup (info->hash, BFD_M68HC11_BANK_START_NAME,
-			    FALSE, FALSE, TRUE);
+			    false, false, true);
   if (h != (struct bfd_link_hash_entry*) NULL
       && h->type == bfd_link_hash_defined)
     pinfo->bank_physical = (h->u.def.value
@@ -722,7 +721,7 @@ m68hc11_elf_get_bank_parameters (struct
 			    + h->u.def.section->output_offset);
 
   h = bfd_link_hash_lookup (info->hash, BFD_M68HC11_BANK_VIRTUAL_NAME,
-			    FALSE, FALSE, TRUE);
+			    false, false, true);
   if (h != (struct bfd_link_hash_entry*) NULL
       && h->type == bfd_link_hash_defined)
     pinfo->bank_virtual = (h->u.def.value
@@ -730,7 +729,7 @@ m68hc11_elf_get_bank_parameters (struct
 			   + h->u.def.section->output_offset);
 
   h = bfd_link_hash_lookup (info->hash, BFD_M68HC11_BANK_SIZE_NAME,
-			    FALSE, FALSE, TRUE);
+			    false, false, true);
   if (h != (struct bfd_link_hash_entry*) NULL
       && h->type == bfd_link_hash_defined)
     pinfo->bank_size = (h->u.def.value
@@ -745,8 +744,8 @@ m68hc11_elf_get_bank_parameters (struct
   pinfo->bank_physical_end = pinfo->bank_physical + pinfo->bank_size;
   pinfo->bank_param_initialized = 1;
 
-  h = bfd_link_hash_lookup (info->hash, "__far_trampoline", FALSE,
-			    FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, "__far_trampoline", false,
+			    false, true);
   if (h != (struct bfd_link_hash_entry*) NULL
       && h->type == bfd_link_hash_defined)
     pinfo->trampoline_addr = (h->u.def.value
@@ -845,7 +844,7 @@ m68hc11_elf_special_reloc (bfd *abfd ATT
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-bfd_boolean
+bool
 elf32_m68hc11_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			    asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -855,7 +854,7 @@ elf32_m68hc11_check_relocs (bfd *abfd, s
   const Elf_Internal_Rela *	rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -884,22 +883,22 @@ elf32_m68hc11_check_relocs (bfd *abfd, s
 	   Reconstruct it for later use during GC.  */
 	case R_M68HC11_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_M68HC11_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean ATTRIBUTE_PRINTF (6, 7)
+static bool ATTRIBUTE_PRINTF (6, 7)
 reloc_warning (struct bfd_link_info *info, const char *name, bfd *input_bfd,
 	       asection *input_section, const Elf_Internal_Rela *rel,
 	       const char *fmt, ...)
@@ -914,16 +913,16 @@ reloc_warning (struct bfd_link_info *inf
   if (ret < 0)
     {
       bfd_set_error (bfd_error_no_memory);
-      return FALSE;
+      return false;
     }
   info->callbacks->warning (info, buf, name, input_bfd, input_section,
 			    rel->r_offset);
   free (buf);
-  return TRUE;
+  return true;
 }
 
 /* Relocate a 68hc11/68hc12 ELF section.  */
-bfd_boolean
+int
 elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info,
 				bfd *input_bfd, asection *input_section,
@@ -946,7 +945,7 @@ elf32_m68hc11_relocate_section (bfd *out
 
   htab = m68hc11_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Get memory bank parameters.  */
   m68hc11_elf_get_bank_parameters (info);
@@ -969,9 +968,9 @@ elf32_m68hc11_relocate_section (bfd *out
       bfd_vma phys_addr;
       bfd_vma insn_addr;
       bfd_vma insn_page;
-      bfd_boolean is_far = FALSE;
-      bfd_boolean is_xgate_symbol = FALSE;
-      bfd_boolean is_section_symbol = FALSE;
+      bool is_far = false;
+      bool is_xgate_symbol = false;
+      bool is_section_symbol = false;
       struct elf_link_hash_entry *h;
       bfd_vma val;
       const char *msg;
@@ -1003,7 +1002,7 @@ elf32_m68hc11_relocate_section (bfd *out
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1044,13 +1043,13 @@ elf32_m68hc11_relocate_section (bfd *out
 	  struct elf32_m68hc11_stub_hash_entry* stub;
 
 	  stub = m68hc12_stub_hash_lookup (htab->stub_hash_table,
-					   name, FALSE, FALSE);
+					   name, false, false);
 	  if (stub)
 	    {
 	      relocation = stub->stub_offset
 		+ stub->stub_sec->output_section->vma
 		+ stub->stub_sec->output_offset;
-	      is_far = FALSE;
+	      is_far = false;
 	    }
 	}
 
@@ -1136,7 +1135,7 @@ elf32_m68hc11_relocate_section (bfd *out
 				  _("reference to the far symbol `%s' using a "
 				    "wrong relocation may result in incorrect "
 				    "execution"), name))
-		return FALSE;
+		return false;
 	    }
 
 	  /* Get virtual address of instruction having the relocation.  */
@@ -1169,7 +1168,7 @@ elf32_m68hc11_relocate_section (bfd *out
 					"you must manually offset the address, "
 					"and possibly manage the page, in your "
 					"code."), (long) phys_addr))
-		    return FALSE;
+		    return false;
 		  break;
 		}
 	    }
@@ -1188,7 +1187,7 @@ elf32_m68hc11_relocate_section (bfd *out
 				  (long) insn_page,
 				  (long) m68hc11_phys_addr (pinfo, insn_addr),
 				  (long) insn_addr))
-		return FALSE;
+		return false;
 	      break;
 	    }
 
@@ -1199,7 +1198,7 @@ elf32_m68hc11_relocate_section (bfd *out
 				    "in the normal address space at %04lx"),
 				  (long) phys_page, (long) phys_addr,
 				  (long) insn_addr))
-		return FALSE;
+		return false;
 	      relocation = phys_addr;
 	      break;
 	    }
@@ -1235,7 +1234,7 @@ elf32_m68hc11_relocate_section (bfd *out
 					"shared RAM(0x2000-0x4000), therefore "
 					"you must manually offset the address "
 					"in your code"), (long) phys_addr))
-		    return FALSE;
+		    return false;
 		  break;
 		}
 	    }
@@ -1265,7 +1264,7 @@ elf32_m68hc11_relocate_section (bfd *out
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -1292,42 +1291,42 @@ elf32_m68hc11_relocate_section (bfd *out
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
 
 /* Set and control ELF flags in ELF header.  */
 
-bfd_boolean
+bool
 _bfd_m68hc11_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-bfd_boolean
+bool
 _bfd_m68hc11_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword old_flags;
   flagword new_flags;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
 
   /* Check if we have the same endianness */
   if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   elf_elfheader (obfd)->e_flags |= new_flags & EF_M68HC11_ABI;
@@ -1335,7 +1334,7 @@ _bfd_m68hc11_elf_merge_private_bfd_data
 
   if (! elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
       elf_elfheader (obfd)->e_ident[EI_CLASS]
 	= elf_elfheader (ibfd)->e_ident[EI_CLASS];
@@ -1345,10 +1344,10 @@ _bfd_m68hc11_elf_merge_private_bfd_data
 	{
 	  if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
 				   bfd_get_mach (ibfd)))
-	    return FALSE;
+	    return false;
 	}
 
-      return TRUE;
+      return true;
     }
 
   /* Check ABI compatibility.  */
@@ -1357,14 +1356,14 @@ _bfd_m68hc11_elf_merge_private_bfd_data
       _bfd_error_handler
 	(_("%pB: linking files compiled for 16-bit integers (-mshort) "
 	   "and others for 32-bit integers"), ibfd);
-      ok = FALSE;
+      ok = false;
     }
   if ((new_flags & E_M68HC11_F64) != (old_flags & E_M68HC11_F64))
     {
       _bfd_error_handler
 	(_("%pB: linking files compiled for 32-bit double (-fshort-double) "
 	   "and others for 64-bit double"), ibfd);
-      ok = FALSE;
+      ok = false;
     }
 
   /* Processor compatibility.  */
@@ -1373,7 +1372,7 @@ _bfd_m68hc11_elf_merge_private_bfd_data
       _bfd_error_handler
 	(_("%pB: linking files compiled for HCS12 with "
 	   "others compiled for HC12"), ibfd);
-      ok = FALSE;
+      ok = false;
     }
   new_flags = ((new_flags & ~EF_M68HC11_MACH_MASK)
 	       | (EF_M68HC11_MERGE_MACH (new_flags, old_flags)));
@@ -1390,19 +1389,19 @@ _bfd_m68hc11_elf_merge_private_bfd_data
 	/* xgettext:c-format */
 	(_("%pB: uses different e_flags (%#x) fields than previous modules (%#x)"),
 	 ibfd, new_flags, old_flags);
-      ok = FALSE;
+      ok = false;
     }
 
   if (! ok)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_m68hc11_elf_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -1442,7 +1441,7 @@ _bfd_m68hc11_elf_print_private_bfd_data
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 static void scan_sections_for_abi (bfd *abfd ATTRIBUTE_UNUSED,
@@ -1451,30 +1450,30 @@ static void scan_sections_for_abi (bfd *
   struct m68hc11_scan_param* p = (struct m68hc11_scan_param*) arg;
 
   if (asect->vma >= p->pinfo->bank_virtual)
-    p->use_memory_banks = TRUE;
+    p->use_memory_banks = true;
 }
 
 /* Tweak the OSABI field of the elf header.  */
 
-bfd_boolean
+bool
 elf32_m68hc11_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
 {
   struct m68hc11_scan_param param;
   struct m68hc11_elf_link_hash_table *htab;
 
   if (!_bfd_elf_init_file_header (abfd, link_info))
-    return FALSE;
+    return false;
 
   if (link_info == NULL)
-    return TRUE;
+    return true;
 
   htab = m68hc11_elf_hash_table (link_info);
   if (htab == NULL)
-    return TRUE;
+    return true;
 
   m68hc11_elf_get_bank_parameters (link_info);
 
-  param.use_memory_banks = FALSE;
+  param.use_memory_banks = false;
   param.pinfo = & htab->pinfo;
 
   bfd_map_over_sections (abfd, scan_sections_for_abi, &param);
@@ -1486,5 +1485,5 @@ elf32_m68hc11_init_file_header (bfd *abf
       i_ehdrp = elf_elfheader (abfd);
       i_ehdrp->e_flags |= E_M68HC12_BANKS;
     }
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68hc1x.h ./bfd/elf32-m68hc1x.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68hc1x.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-m68hc1x.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Motorola 68HC11/68HC12-specific support for 32-bit ELF
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
    Contributed by Stephane Carrez (stcarrez@nerim.fr)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,10 +33,10 @@
 #define BFD_M68HC11_BANK_VIRTUAL_NAME "__bank_virtual"
 
 /* Set and control ELF flags in ELF header.  */
-extern bfd_boolean _bfd_m68hc11_elf_merge_private_bfd_data
+extern bool _bfd_m68hc11_elf_merge_private_bfd_data
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_m68hc11_elf_set_private_flags (bfd*,flagword);
-extern bfd_boolean _bfd_m68hc11_elf_print_private_bfd_data (bfd*, void*);
+extern bool _bfd_m68hc11_elf_set_private_flags (bfd*,flagword);
+extern bool _bfd_m68hc11_elf_print_private_bfd_data (bfd*, void*);
 
 /* This hash entry is used to record a trampoline that must be generated
    to call a far function using a normal calling convention ('jsr').
@@ -120,18 +120,16 @@ struct m68hc11_elf_link_hash_table
   int top_index;
   asection **input_list;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
-  bfd_boolean (* size_one_stub)  (struct bfd_hash_entry*, void*);
-  bfd_boolean (* build_one_stub) (struct bfd_hash_entry*, void*);
+  bool (* size_one_stub)  (struct bfd_hash_entry*, void*);
+  bool (* build_one_stub) (struct bfd_hash_entry*, void*);
 };
 
 /* Get the Sparc64 ELF linker hash table from a link_info structure.  */
 
 #define m68hc11_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == M68HC11_ELF_DATA ? ((struct m68hc11_elf_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == M68HC11_ELF_DATA)	\
+   ? (struct m68hc11_elf_link_hash_table *) (p)->hash : NULL)
 
 /* Create a 68HC11/68HC12 ELF linker hash table.  */
 
@@ -160,34 +158,33 @@ bfd_reloc_status_type m68hc11_elf_specia
     asymbol *symbol, void *data, asection *input_section,
     bfd *output_bfd, char **error_message);
 
-bfd_boolean elf32_m68hc11_check_relocs
+bool elf32_m68hc11_check_relocs
   (bfd * abfd, struct bfd_link_info * info,
    asection * sec, const Elf_Internal_Rela * relocs);
-bfd_boolean elf32_m68hc11_relocate_section
+int elf32_m68hc11_relocate_section
   (bfd *output_bfd, struct bfd_link_info *info,
    bfd *input_bfd, asection *input_section,
    bfd_byte *contents, Elf_Internal_Rela *relocs,
    Elf_Internal_Sym *local_syms, asection **local_sections);
 
-bfd_boolean elf32_m68hc11_add_symbol_hook
+bool elf32_m68hc11_add_symbol_hook
   (bfd *abfd, struct bfd_link_info *info,
    Elf_Internal_Sym *sym, const char **namep,
    flagword *flagsp, asection **secp,
    bfd_vma *valp);
 
 void elf32_m68hc11_merge_symbol_attribute
-  (struct elf_link_hash_entry *, const Elf_Internal_Sym *,
-   bfd_boolean, bfd_boolean);
+  (struct elf_link_hash_entry *, unsigned int, bool, bool);
 
 /* Tweak the OSABI field of the elf header.  */
 
-extern bfd_boolean elf32_m68hc11_init_file_header (bfd*, struct bfd_link_info*);
+extern bool elf32_m68hc11_init_file_header (bfd*, struct bfd_link_info*);
 
 int elf32_m68hc11_setup_section_lists (bfd *, struct bfd_link_info *);
 
-bfd_boolean elf32_m68hc11_size_stubs
+bool elf32_m68hc11_size_stubs
   (bfd *, bfd *, struct bfd_link_info *,
    asection * (*) (const char *, asection *));
 
-bfd_boolean elf32_m68hc11_build_stubs (bfd* abfd, struct bfd_link_info *);
+bool elf32_m68hc11_build_stubs (bfd* abfd, struct bfd_link_info *);
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68k.c ./bfd/elf32-m68k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68k.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-m68k.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Motorola 68k series support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,322 +28,322 @@
 #include "cpu-m68k.h"
 #include "elf32-m68k.h"
 
-static bfd_boolean
+static bool
 elf_m68k_discard_copies (struct elf_link_hash_entry *, void *);
 
 static reloc_howto_type howto_table[] =
 {
-  HOWTO(R_68K_NONE,	  0, 3, 0, FALSE,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_NONE",	  FALSE, 0, 0x00000000,FALSE),
-  HOWTO(R_68K_32,	  0, 2,32, FALSE,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_32",	  FALSE, 0, 0xffffffff,FALSE),
-  HOWTO(R_68K_16,	  0, 1,16, FALSE,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_16",	  FALSE, 0, 0x0000ffff,FALSE),
-  HOWTO(R_68K_8,	  0, 0, 8, FALSE,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_8",	  FALSE, 0, 0x000000ff,FALSE),
-  HOWTO(R_68K_PC32,	  0, 2,32, TRUE, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_PC32",	  FALSE, 0, 0xffffffff,TRUE),
-  HOWTO(R_68K_PC16,	  0, 1,16, TRUE, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PC16",	  FALSE, 0, 0x0000ffff,TRUE),
-  HOWTO(R_68K_PC8,	  0, 0, 8, TRUE, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PC8",	  FALSE, 0, 0x000000ff,TRUE),
-  HOWTO(R_68K_GOT32,	  0, 2,32, TRUE, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_GOT32",	  FALSE, 0, 0xffffffff,TRUE),
-  HOWTO(R_68K_GOT16,	  0, 1,16, TRUE, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_GOT16",	  FALSE, 0, 0x0000ffff,TRUE),
-  HOWTO(R_68K_GOT8,	  0, 0, 8, TRUE, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_GOT8",	  FALSE, 0, 0x000000ff,TRUE),
-  HOWTO(R_68K_GOT32O,	  0, 2,32, FALSE,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_GOT32O",	  FALSE, 0, 0xffffffff,FALSE),
-  HOWTO(R_68K_GOT16O,	  0, 1,16, FALSE,0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_GOT16O",	  FALSE, 0, 0x0000ffff,FALSE),
-  HOWTO(R_68K_GOT8O,	  0, 0, 8, FALSE,0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_GOT8O",	  FALSE, 0, 0x000000ff,FALSE),
-  HOWTO(R_68K_PLT32,	  0, 2,32, TRUE, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_PLT32",	  FALSE, 0, 0xffffffff,TRUE),
-  HOWTO(R_68K_PLT16,	  0, 1,16, TRUE, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PLT16",	  FALSE, 0, 0x0000ffff,TRUE),
-  HOWTO(R_68K_PLT8,	  0, 0, 8, TRUE, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PLT8",	  FALSE, 0, 0x000000ff,TRUE),
-  HOWTO(R_68K_PLT32O,	  0, 2,32, FALSE,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_PLT32O",	  FALSE, 0, 0xffffffff,FALSE),
-  HOWTO(R_68K_PLT16O,	  0, 1,16, FALSE,0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PLT16O",	  FALSE, 0, 0x0000ffff,FALSE),
-  HOWTO(R_68K_PLT8O,	  0, 0, 8, FALSE,0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PLT8O",	  FALSE, 0, 0x000000ff,FALSE),
-  HOWTO(R_68K_COPY,	  0, 0, 0, FALSE,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_COPY",	  FALSE, 0, 0xffffffff,FALSE),
-  HOWTO(R_68K_GLOB_DAT,	  0, 2,32, FALSE,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_GLOB_DAT",  FALSE, 0, 0xffffffff,FALSE),
-  HOWTO(R_68K_JMP_SLOT,	  0, 2,32, FALSE,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_JMP_SLOT",  FALSE, 0, 0xffffffff,FALSE),
-  HOWTO(R_68K_RELATIVE,	  0, 2,32, FALSE,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_RELATIVE",  FALSE, 0, 0xffffffff,FALSE),
+  HOWTO(R_68K_NONE,	  0, 0, 0, false,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_NONE",	  false, 0, 0x00000000,false),
+  HOWTO(R_68K_32,	  0, 4,32, false,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_32",	  false, 0, 0xffffffff,false),
+  HOWTO(R_68K_16,	  0, 2,16, false,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_16",	  false, 0, 0x0000ffff,false),
+  HOWTO(R_68K_8,	  0, 1, 8, false,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_8",	  false, 0, 0x000000ff,false),
+  HOWTO(R_68K_PC32,	  0, 4,32, true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_PC32",	  false, 0, 0xffffffff,true),
+  HOWTO(R_68K_PC16,	  0, 2,16, true, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PC16",	  false, 0, 0x0000ffff,true),
+  HOWTO(R_68K_PC8,	  0, 1, 8, true, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PC8",	  false, 0, 0x000000ff,true),
+  HOWTO(R_68K_GOT32,	  0, 4,32, true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_GOT32",	  false, 0, 0xffffffff,true),
+  HOWTO(R_68K_GOT16,	  0, 2,16, true, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_GOT16",	  false, 0, 0x0000ffff,true),
+  HOWTO(R_68K_GOT8,	  0, 1, 8, true, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_GOT8",	  false, 0, 0x000000ff,true),
+  HOWTO(R_68K_GOT32O,	  0, 4,32, false,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_GOT32O",	  false, 0, 0xffffffff,false),
+  HOWTO(R_68K_GOT16O,	  0, 2,16, false,0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_GOT16O",	  false, 0, 0x0000ffff,false),
+  HOWTO(R_68K_GOT8O,	  0, 1, 8, false,0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_GOT8O",	  false, 0, 0x000000ff,false),
+  HOWTO(R_68K_PLT32,	  0, 4,32, true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_PLT32",	  false, 0, 0xffffffff,true),
+  HOWTO(R_68K_PLT16,	  0, 2,16, true, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PLT16",	  false, 0, 0x0000ffff,true),
+  HOWTO(R_68K_PLT8,	  0, 1, 8, true, 0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PLT8",	  false, 0, 0x000000ff,true),
+  HOWTO(R_68K_PLT32O,	  0, 4,32, false,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_PLT32O",	  false, 0, 0xffffffff,false),
+  HOWTO(R_68K_PLT16O,	  0, 2,16, false,0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PLT16O",	  false, 0, 0x0000ffff,false),
+  HOWTO(R_68K_PLT8O,	  0, 1, 8, false,0, complain_overflow_signed,	bfd_elf_generic_reloc, "R_68K_PLT8O",	  false, 0, 0x000000ff,false),
+  HOWTO(R_68K_COPY,	  0, 0, 0, false,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_COPY",	  false, 0, 0xffffffff,false),
+  HOWTO(R_68K_GLOB_DAT,	  0, 4,32, false,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_GLOB_DAT",  false, 0, 0xffffffff,false),
+  HOWTO(R_68K_JMP_SLOT,	  0, 4,32, false,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_JMP_SLOT",  false, 0, 0xffffffff,false),
+  HOWTO(R_68K_RELATIVE,	  0, 4,32, false,0, complain_overflow_dont,	bfd_elf_generic_reloc, "R_68K_RELATIVE",  false, 0, 0xffffffff,false),
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_68K_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_68K_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),
+	 false),
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_68K_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_68K_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),
+	 false),
 
   /* TLS general dynamic variable reference.  */
   HOWTO (R_68K_TLS_GD32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_GD32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_GD16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_GD16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_GD8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_GD8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_68K_TLS_LDM32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_LDM32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_LDM16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_LDM16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_LDM8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_LDM8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_LDO32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_LDO32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_LDO16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_LDO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_LDO8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_LDO8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS initial execution variable reference.  */
   HOWTO (R_68K_TLS_IE32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_IE32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_IE16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_IE16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_IE8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_IE8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local execution variable reference.  */
   HOWTO (R_68K_TLS_LE32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_LE32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_LE16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_LE16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_LE8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_LE8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS GD/LD dynamic relocations.  */
   HOWTO (R_68K_TLS_DTPMOD32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_DTPMOD32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_DTPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_DTPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_68K_TLS_TPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_68K_TLS_TPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
-static bfd_boolean
+static bool
 rtype_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
   unsigned int indx = ELF32_R_TYPE (dst->r_info);
@@ -354,10 +354,10 @@ rtype_to_howto (bfd *abfd, arelent *cach
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, indx);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &howto_table[indx];
-  return TRUE;
+  return true;
 }
 
 #define elf_info_to_howto rtype_to_howto
@@ -756,7 +756,7 @@ elf_m68k_reloc_got_type (enum elf_m68k_r
       return R_68K_TLS_IE32;
 
     default:
-      BFD_ASSERT (FALSE);
+      BFD_ASSERT (false);
       return 0;
     }
 }
@@ -782,7 +782,7 @@ elf_m68k_reloc_got_offset_size (enum elf
       return R_8;
 
     default:
-      BFD_ASSERT (FALSE);
+      BFD_ASSERT (false);
       return 0;
     }
 }
@@ -804,14 +804,14 @@ elf_m68k_reloc_got_n_slots (enum elf_m68
       return 2;
 
     default:
-      BFD_ASSERT (FALSE);
+      BFD_ASSERT (false);
       return 0;
     }
 }
 
 /* Return TRUE if relocation R_TYPE is a TLS one.  */
 
-static bfd_boolean
+static bool
 elf_m68k_reloc_tls_p (enum elf_m68k_reloc_type r_type)
 {
   switch (r_type)
@@ -822,10 +822,10 @@ elf_m68k_reloc_tls_p (enum elf_m68k_relo
     case R_68K_TLS_IE32: case R_68K_TLS_IE16: case R_68K_TLS_IE8:
     case R_68K_TLS_LE32: case R_68K_TLS_LE16: case R_68K_TLS_LE8:
     case R_68K_TLS_DTPMOD32: case R_68K_TLS_DTPREL32: case R_68K_TLS_TPREL32:
-      return TRUE;
+      return true;
 
     default:
-      return FALSE;
+      return false;
     }
 }
 
@@ -889,22 +889,19 @@ struct elf_m68k_link_hash_table
 {
   struct elf_link_hash_table root;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* The PLT format used by this link, or NULL if the format has not
      yet been chosen.  */
   const struct elf_m68k_plt_info *plt_info;
 
   /* True, if GP is loaded within each function which uses it.
      Set to TRUE when GOT negative offsets or multi-GOT is enabled.  */
-  bfd_boolean local_gp_p;
+  bool local_gp_p;
 
   /* Switch controlling use of negative offsets to double the size of GOTs.  */
-  bfd_boolean use_neg_got_offsets_p;
+  bool use_neg_got_offsets_p;
 
   /* Switch controlling generation of multiple GOTs.  */
-  bfd_boolean allow_multigot_p;
+  bool allow_multigot_p;
 
   /* Multi-GOT data structure.  */
   struct elf_m68k_multi_got multi_got_;
@@ -913,8 +910,9 @@ struct elf_m68k_link_hash_table
 /* Get the m68k ELF linker hash table from a link_info structure.  */
 
 #define elf_m68k_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == M68K_ELF_DATA ? ((struct elf_m68k_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == M68K_ELF_DATA)		\
+   ? (struct elf_m68k_link_hash_table *) (p)->hash : NULL)
 
 /* Shortcut to multi-GOT data.  */
 #define elf_m68k_multi_got(INFO) (&elf_m68k_hash_table (INFO)->multi_got_)
@@ -971,7 +969,7 @@ static struct bfd_link_hash_table *
 elf_m68k_link_hash_table_create (bfd *abfd)
 {
   struct elf_m68k_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_m68k_link_hash_table);
+  size_t amt = sizeof (struct elf_m68k_link_hash_table);
 
   ret = (struct elf_m68k_link_hash_table *) bfd_zmalloc (amt);
   if (ret == (struct elf_m68k_link_hash_table *) NULL)
@@ -994,7 +992,7 @@ elf_m68k_link_hash_table_create (bfd *ab
 
 /* Set the right machine number.  */
 
-static bfd_boolean
+static bool
 elf32_m68k_object_p (bfd *abfd)
 {
   unsigned int mach = 0;
@@ -1049,13 +1047,13 @@ elf32_m68k_object_p (bfd *abfd)
   mach = bfd_m68k_features_to_mach (features);
   bfd_default_set_arch_mach (abfd, bfd_arch_m68k, mach);
 
-  return TRUE;
+  return true;
 }
 
 /* Somewhat reverse of elf32_m68k_object_p, this sets the e_flag
    field based on the machine number.  */
 
-static bfd_boolean
+static bool
 elf_m68k_final_write_processing (bfd *abfd)
 {
   int mach = bfd_get_mach (abfd);
@@ -1114,17 +1112,76 @@ elf_m68k_final_write_processing (bfd *ab
 
 /* Keep m68k-specific flags in the ELF header.  */
 
-static bfd_boolean
+static bool
 elf32_m68k_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
+}
+
+/* Merge object attributes from IBFD into OBFD.  Warn if
+   there are conflicting attributes. */
+static bool
+m68k_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
+{
+  bfd *obfd = info->output_bfd;
+  obj_attribute *in_attr, *in_attrs;
+  obj_attribute *out_attr, *out_attrs;
+  bool ret = true;
+
+  in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
+  out_attrs = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
+
+  in_attr = &in_attrs[Tag_GNU_M68K_ABI_FP];
+  out_attr = &out_attrs[Tag_GNU_M68K_ABI_FP];
+
+  if (in_attr->i != out_attr->i)
+    {
+      int in_fp = in_attr->i & 3;
+      int out_fp = out_attr->i & 3;
+      static bfd *last_fp;
+
+      if (in_fp == 0)
+	;
+      else if (out_fp == 0)
+	{
+	  out_attr->type = ATTR_TYPE_FLAG_INT_VAL;
+	  out_attr->i ^= in_fp;
+	  last_fp = ibfd;
+	}
+      else if (out_fp == 1 && in_fp == 2)
+	{
+	  _bfd_error_handler
+	    /* xgettext:c-format */
+	    (_("%pB uses hard float, %pB uses soft float"),
+	     last_fp, ibfd);
+	  ret = false;
+	}
+      else if (out_fp == 2 && in_fp == 1)
+	{
+	  _bfd_error_handler
+	    /* xgettext:c-format */
+	    (_("%pB uses hard float, %pB uses soft float"),
+	     ibfd, last_fp);
+	  ret = false;
+	}
+    }
+
+  if (!ret)
+    {
+      out_attr->type = ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_ERROR;
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+
+  /* Merge Tag_compatibility attributes and any common GNU ones.  */
+  return _bfd_elf_merge_object_attributes (ibfd, info);
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
-static bfd_boolean
+static bool
 elf32_m68k_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -1138,21 +1195,24 @@ elf32_m68k_merge_private_bfd_data (bfd *
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
     /* PR 24523: For non-ELF files do not try to merge any private
        data, but also do not prevent the link from succeeding.  */
-    return TRUE;
+    return true;
 
   /* Get the merged machine.  This checks for incompatibility between
      Coldfire & non-Coldfire flags, incompability between different
      Coldfire ISAs, and incompability between different MAC types.  */
-  arch_info = bfd_arch_get_compatible (ibfd, obfd, FALSE);
+  arch_info = bfd_arch_get_compatible (ibfd, obfd, false);
   if (!arch_info)
-    return FALSE;
+    return false;
 
   bfd_set_arch_mach (obfd, bfd_arch_m68k, arch_info->mach);
 
+  if (!m68k_elf_merge_obj_attributes (ibfd, info))
+    return false;
+
   in_flags = elf_elfheader (ibfd)->e_flags;
   if (!elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       out_flags = in_flags;
     }
   else
@@ -1183,12 +1243,12 @@ elf32_m68k_merge_private_bfd_data (bfd *
     }
   elf_elfheader (obfd)->e_flags = out_flags;
 
-  return TRUE;
+  return true;
 }
 
 /* Display the flags field.  */
 
-static bfd_boolean
+static bool
 elf32_m68k_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -1275,7 +1335,7 @@ elf32_m68k_print_private_bfd_data (bfd *
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 /* Multi-GOT support implementation design:
@@ -1821,7 +1881,7 @@ struct elf_m68k_can_merge_gots_arg
   struct bfd_link_info *info;
 
   /* Error flag.  */
-  bfd_boolean error_p;
+  bool error_p;
 };
 
 /* Process a single entry from the small GOT to see if it should be added
@@ -1874,7 +1934,7 @@ elf_m68k_can_merge_gots_1 (void **_entry
 				      arg->info);
       if (entry == NULL)
 	{
-	  arg->error_p = TRUE;
+	  arg->error_p = true;
 	  return 0;
 	}
 
@@ -1889,7 +1949,7 @@ elf_m68k_can_merge_gots_1 (void **_entry
    in BIG GOT to accumulate information from SMALL.
    INFO is the context where memory should be allocated.  */
 
-static bfd_boolean
+static bool
 elf_m68k_can_merge_gots (struct elf_m68k_got *big,
 			 const struct elf_m68k_got *small,
 			 struct bfd_link_info *info,
@@ -1902,12 +1962,12 @@ elf_m68k_can_merge_gots (struct elf_m68k
   arg_.big = big;
   arg_.diff = diff;
   arg_.info = info;
-  arg_.error_p = FALSE;
+  arg_.error_p = false;
   htab_traverse_noresize (small->entries, elf_m68k_can_merge_gots_1, &arg_);
   if (arg_.error_p)
     {
       diff->offset = 0;
-      return FALSE;
+      return false;
     }
 
   /* Check for overflow.  */
@@ -1915,9 +1975,9 @@ elf_m68k_can_merge_gots (struct elf_m68k
        > ELF_M68K_R_8_MAX_N_SLOTS_IN_GOT (info))
       || (big->n_slots[R_16] + arg_.diff->n_slots[R_16]
 	  > ELF_M68K_R_8_16_MAX_N_SLOTS_IN_GOT (info)))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 struct elf_m68k_merge_gots_arg
@@ -1929,7 +1989,7 @@ struct elf_m68k_merge_gots_arg
   struct bfd_link_info *info;
 
   /* Error flag.  */
-  bfd_boolean error_p;
+  bool error_p;
 };
 
 /* Process a single entry from DIFF got.  Add or update corresponding
@@ -1949,7 +2009,7 @@ elf_m68k_merge_gots_1 (void **entry_ptr,
 			       arg->info);
   if (to == NULL)
     {
-      arg->error_p = TRUE;
+      arg->error_p = true;
       return 0;
     }
 
@@ -1963,7 +2023,7 @@ elf_m68k_merge_gots_1 (void **entry_ptr,
 /* Merge data from DIFF to BIG.  INFO is context where memory should be
    allocated.  */
 
-static bfd_boolean
+static bool
 elf_m68k_merge_gots (struct elf_m68k_got *big,
 		     struct elf_m68k_got *diff,
 		     struct bfd_link_info *info)
@@ -1976,10 +2036,10 @@ elf_m68k_merge_gots (struct elf_m68k_got
       /* Merge entries.  */
       arg_.big = big;
       arg_.info = info;
-      arg_.error_p = FALSE;
+      arg_.error_p = false;
       htab_traverse_noresize (diff->entries, elf_m68k_merge_gots_1, &arg_);
       if (arg_.error_p)
-	return FALSE;
+	return false;
 
       /* Merge counters.  */
       big->n_slots[R_8] += diff->n_slots[R_8];
@@ -2002,7 +2062,7 @@ elf_m68k_merge_gots (struct elf_m68k_got
 		  && (big->n_slots[R_16]
 		      <= ELF_M68K_R_8_16_MAX_N_SLOTS_IN_GOT (info))));
 
-  return TRUE;
+  return true;
 }
 
 struct elf_m68k_finalize_got_offsets_arg
@@ -2105,7 +2165,7 @@ elf_m68k_finalize_got_offsets_1 (void **
 
 static void
 elf_m68k_finalize_got_offsets (struct elf_m68k_got *got,
-			       bfd_boolean use_neg_got_offsets_p,
+			       bool use_neg_got_offsets_p,
 			       struct elf_m68k_link_hash_entry **symndx2h,
 			       bfd_vma *final_offset, bfd_vma *n_ldm_entries)
 {
@@ -2218,7 +2278,7 @@ struct elf_m68k_partition_multi_got_arg
   bfd_vma slots_relas_diff;
 
   /* Error flag.  */
-  bfd_boolean error_p;
+  bool error_p;
 
   /* Mapping from global symndx to global symbols.
      This is used to build lists of got entries for global symbols.  */
@@ -2285,7 +2345,7 @@ elf_m68k_partition_multi_got_1 (void **_
 	  if (diff->offset == 0)
 	    /* Offset set to 0 in the diff_ indicates an error.  */
 	    {
-	      arg->error_p = TRUE;
+	      arg->error_p = true;
 	      goto final_return;
 	    }
 
@@ -2309,7 +2369,7 @@ elf_m68k_partition_multi_got_1 (void **_
       arg->current_got = elf_m68k_create_empty_got (arg->info);
       if (arg->current_got == NULL)
 	{
-	  arg->error_p = TRUE;
+	  arg->error_p = true;
 	  goto final_return;
 	}
 
@@ -2322,7 +2382,7 @@ elf_m68k_partition_multi_got_1 (void **_
     {
       if (!elf_m68k_merge_gots (arg->current_got, diff, arg->info))
 	{
-	  arg->error_p = TRUE;
+	  arg->error_p = true;
 	  goto final_return;
 	}
 
@@ -2356,7 +2416,7 @@ elf_m68k_partition_multi_got_1 (void **_
 
 /* Helper function to build symndx2h mapping.  */
 
-static bfd_boolean
+static bool
 elf_m68k_init_symndx2h_1 (struct elf_link_hash_entry *_h,
 			  void *_arg)
 {
@@ -2375,14 +2435,14 @@ elf_m68k_init_symndx2h_1 (struct elf_lin
       arg->symndx2h[h->got_entry_key] = h;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Merge GOTs of some BFDs, assign offsets to GOT entries and build
    lists of GOT entries for global symbols.
    Calculate sizes of .got and .rela.got sections.  */
 
-static bfd_boolean
+static bool
 elf_m68k_partition_multi_got (struct bfd_link_info *info)
 {
   struct elf_m68k_multi_got *multi_got;
@@ -2395,7 +2455,7 @@ elf_m68k_partition_multi_got (struct bfd
   arg_.info = info;
   arg_.n_slots = 0;
   arg_.slots_relas_diff = 0;
-  arg_.error_p = FALSE;
+  arg_.error_p = false;
 
   if (multi_got->bfd2got != NULL)
     {
@@ -2404,7 +2464,7 @@ elf_m68k_partition_multi_got (struct bfd
 	arg_.symndx2h = bfd_zmalloc (multi_got->global_symndx
 				     * sizeof (*arg_.symndx2h));
 	if (arg_.symndx2h == NULL)
-	  return FALSE;
+	  return false;
 
 	elf_link_hash_traverse (elf_hash_table (info),
 				elf_m68k_init_symndx2h_1, &arg_);
@@ -2418,7 +2478,7 @@ elf_m68k_partition_multi_got (struct bfd
 	  free (arg_.symndx2h);
 	  arg_.symndx2h = NULL;
 
-	  return FALSE;
+	  return false;
 	}
 
       /* Finish up last current_got.  */
@@ -2450,7 +2510,7 @@ elf_m68k_partition_multi_got (struct bfd
   else
     BFD_ASSERT (multi_got->bfd2got == NULL);
 
-  return TRUE;
+  return true;
 }
 
 /* Copy any information related to dynamic linking from a pre-existing
@@ -2498,7 +2558,7 @@ elf_m68k_copy_indirect_symbol (struct bf
    allocate space in the global offset table or procedure linkage
    table.  */
 
-static bfd_boolean
+static bool
 elf_m68k_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
@@ -2513,7 +2573,7 @@ elf_m68k_check_relocs (bfd *abfd,
   struct elf_m68k_got *got;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -2583,7 +2643,7 @@ elf_m68k_check_relocs (bfd *abfd,
 	      /* Create the .got section.  */
 	      elf_hash_table (info)->dynobj = dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return FALSE;
+		return false;
 	    }
 
 	  if (got == NULL)
@@ -2594,7 +2654,7 @@ elf_m68k_check_relocs (bfd *abfd,
 		= elf_m68k_get_bfd2got_entry (elf_m68k_multi_got (info),
 					      abfd, FIND_OR_CREATE, info);
 	      if (bfd2got_entry == NULL)
-		return FALSE;
+		return false;
 
 	      got = bfd2got_entry->got;
 	      BFD_ASSERT (got != NULL);
@@ -2608,7 +2668,7 @@ elf_m68k_check_relocs (bfd *abfd,
 						   ELF32_R_TYPE (rel->r_info),
 						   r_symndx, info);
 	    if (got_entry == NULL)
-	      return FALSE;
+	      return false;
 
 	    if (got_entry->u.s1.refcount == 1)
 	      {
@@ -2618,7 +2678,7 @@ elf_m68k_check_relocs (bfd *abfd,
 		    && !h->forced_local)
 		  {
 		    if (!bfd_elf_link_record_dynamic_symbol (info, h))
-		      return FALSE;
+		      return false;
 		  }
 	      }
 	  }
@@ -2655,7 +2715,7 @@ elf_m68k_check_relocs (bfd *abfd,
 		 local symbol.  FIXME: does it?  How to handle it if
 		 it does make sense?  */
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  /* Make sure this symbol is output as a dynamic symbol.  */
@@ -2663,7 +2723,7 @@ elf_m68k_check_relocs (bfd *abfd,
 	      && !h->forced_local)
 	    {
 	      if (!bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  h->needs_plt = 1;
@@ -2731,10 +2791,10 @@ elf_m68k_check_relocs (bfd *abfd,
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, dynobj, 2, abfd, /*rela?*/ TRUE);
+		    (sec, dynobj, 2, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      if (sec->flags & SEC_READONLY
@@ -2774,10 +2834,10 @@ elf_m68k_check_relocs (bfd *abfd,
 		      void *vpp;
 		      Elf_Internal_Sym *isym;
 
-		      isym = bfd_sym_from_r_symndx (&elf_m68k_hash_table (info)->sym_cache,
+		      isym = bfd_sym_from_r_symndx (&elf_m68k_hash_table (info)->root.sym_cache,
 						    abfd, r_symndx);
 		      if (isym == NULL)
-			return FALSE;
+			return false;
 
 		      s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		      if (s == NULL)
@@ -2796,7 +2856,7 @@ elf_m68k_check_relocs (bfd *abfd,
 		      p = ((struct elf_m68k_pcrel_relocs_copied *)
 			   bfd_alloc (dynobj, (bfd_size_type) sizeof *p));
 		      if (p == NULL)
-			return FALSE;
+			return false;
 		      p->next = *head;
 		      *head = p;
 		      p->section = sreloc;
@@ -2813,14 +2873,14 @@ elf_m68k_check_relocs (bfd *abfd,
 	     Reconstruct it for later use during GC.  */
 	case R_68K_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_68K_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -2828,7 +2888,7 @@ elf_m68k_check_relocs (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -2873,16 +2933,16 @@ elf_m68k_get_plt_info (bfd *output_bfd)
    and the input sections have been assigned to output sections.
    It's a convenient place to determine the PLT style.  */
 
-static bfd_boolean
+static bool
 elf_m68k_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   /* Bind input BFDs to GOTs and calculate sizes of .got and .rela.got
      sections.  */
   if (!elf_m68k_partition_multi_got (info))
-    return FALSE;
+    return false;
 
   elf_m68k_hash_table (info)->plt_info = elf_m68k_get_plt_info (output_bfd);
-  return TRUE;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -2891,7 +2951,7 @@ elf_m68k_always_size_sections (bfd *outp
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf_m68k_adjust_dynamic_symbol (struct bfd_link_info *info,
 				struct elf_link_hash_entry *h)
 {
@@ -2933,7 +2993,7 @@ elf_m68k_adjust_dynamic_symbol (struct b
 	     linkage table, and we can just do a PCxx reloc instead.  */
 	  h->plt.offset = (bfd_vma) -1;
 	  h->needs_plt = 0;
-	  return TRUE;
+	  return true;
 	}
 
       /* Make sure this symbol is output as a dynamic symbol.  */
@@ -2941,7 +3001,7 @@ elf_m68k_adjust_dynamic_symbol (struct b
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->root.splt;
@@ -2980,7 +3040,7 @@ elf_m68k_adjust_dynamic_symbol (struct b
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
-      return TRUE;
+      return true;
     }
 
   /* Reinitialize the plt offset now that it is not used as a reference
@@ -2996,7 +3056,7 @@ elf_m68k_adjust_dynamic_symbol (struct b
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -3007,12 +3067,12 @@ elf_m68k_adjust_dynamic_symbol (struct b
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -3046,14 +3106,13 @@ elf_m68k_adjust_dynamic_symbol (struct b
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_m68k_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
-  bfd_boolean plt;
-  bfd_boolean relocs;
+  bool relocs;
 
   dynobj = elf_hash_table (info)->dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -3095,8 +3154,7 @@ elf_m68k_size_dynamic_sections (bfd *out
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  plt = FALSE;
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -3111,20 +3169,20 @@ elf_m68k_size_dynamic_sections (bfd *out
       if (strcmp (name, ".plt") == 0)
 	{
 	  /* Remember whether there is a PLT.  */
-	  plt = s->size != 0;
+	  ;
 	}
-      else if (CONST_STRNEQ (name, ".rela"))
+      else if (startswith (name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
-	      relocs = TRUE;
+	      relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
 	      s->reloc_count = 0;
 	    }
 	}
-      else if (! CONST_STRNEQ (name, ".got")
+      else if (! startswith (name, ".got")
 	       && strcmp (name, ".dynbss") != 0)
 	{
 	  /* It's not one of our sections, so don't allocate space.  */
@@ -3157,51 +3215,10 @@ elf_m68k_size_dynamic_sections (bfd *out
 	 contents to zero.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
-    }
-
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf_m68k_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (plt)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-	}
-
-      if ((info->flags & DF_TEXTREL) != 0)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
+	return false;
     }
-#undef add_dynamic_entry
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* This function is called via elf_link_hash_traverse if we are
@@ -3217,7 +3234,7 @@ elf_m68k_size_dynamic_sections (bfd *out
    against a readonly section, and set the DF_TEXTREL flag in this
    case.  */
 
-static bfd_boolean
+static bool
 elf_m68k_discard_copies (struct elf_link_hash_entry *h,
 			 void * inf)
 {
@@ -3248,10 +3265,10 @@ elf_m68k_discard_copies (struct elf_link
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
-      return TRUE;
+      return true;
     }
 
   for (s = elf_m68k_hash_entry (h)->pcrel_relocs_copied;
@@ -3259,7 +3276,7 @@ elf_m68k_discard_copies (struct elf_link
        s = s->next)
     s->section->size -= s->count * sizeof (Elf32_External_Rela);
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3336,7 +3353,7 @@ elf_m68k_init_got_entry_static (struct b
       break;
 
     default:
-      BFD_ASSERT (FALSE);
+      BFD_ASSERT (false);
     }
 }
 
@@ -3387,7 +3404,7 @@ elf_m68k_init_got_entry_local_shared (st
       break;
 
     default:
-      BFD_ASSERT (FALSE);
+      BFD_ASSERT (false);
     }
 
   /* Offset of the GOT entry.  */
@@ -3403,7 +3420,7 @@ elf_m68k_init_got_entry_local_shared (st
 
 /* Relocate an M68K ELF section.  */
 
-static bfd_boolean
+static int
 elf_m68k_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -3444,15 +3461,15 @@ elf_m68k_relocate_section (bfd *output_b
       Elf_Internal_Sym *sym;
       asection *sec;
       bfd_vma relocation;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_reloc_status_type r;
-      bfd_boolean resolved_to_zero;
+      bool resolved_to_zero;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       if (r_type < 0 || r_type >= (int) R_68K_max)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       howto = howto_table + r_type;
 
@@ -3461,7 +3478,7 @@ elf_m68k_relocate_section (bfd *output_b
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -3471,7 +3488,7 @@ elf_m68k_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -3602,7 +3619,7 @@ elf_m68k_relocate_section (bfd *output_b
 		       itself.  */
 		    && elf_m68k_reloc_got_type (r_type) != R_68K_TLS_LDM32)
 		  {
-		    bfd_boolean dyn;
+		    bool dyn;
 
 		    dyn = elf_hash_table (info)->dynamic_sections_created;
 		    if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
@@ -3637,7 +3654,7 @@ elf_m68k_relocate_section (bfd *output_b
 			*off_ptr |= 1;
 		      }
 		    else
-		      unresolved_reloc = FALSE;
+		      unresolved_reloc = false;
 		  }
 		else if (bfd_link_pic (info)) /* && h == NULL */
 		  /* Process local symbol during dynamic link.  */
@@ -3718,7 +3735,7 @@ elf_m68k_relocate_section (bfd *output_b
 		 input_bfd, input_section, (uint64_t) rel->r_offset,
 		 howto->name);
 
-	      return FALSE;
+	      return false;
 	    }
 	  else
 	    relocation -= tpoff_base (info);
@@ -3751,7 +3768,7 @@ elf_m68k_relocate_section (bfd *output_b
 	  relocation = (splt->output_section->vma
 			+ splt->output_offset
 			+ h->plt.offset);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_68K_PLT8O:
@@ -3765,7 +3782,7 @@ elf_m68k_relocate_section (bfd *output_b
 	  BFD_ASSERT (splt != NULL);
 
 	  relocation = h->plt.offset;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 
 	  /* This relocation does not use the addend.  */
 	  rel->r_addend = 0;
@@ -3792,22 +3809,22 @@ elf_m68k_relocate_section (bfd *output_b
 	    {
 	      Elf_Internal_Rela outrel;
 	      bfd_byte *loc;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
 		 time.  */
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -3832,7 +3849,7 @@ elf_m68k_relocate_section (bfd *output_b
 
 		  if (r_type == R_68K_32)
 		    {
-		      relocate = TRUE;
+		      relocate = true;
 		      outrel.r_info = ELF32_R_INFO (0, R_68K_RELATIVE);
 		    }
 		  else
@@ -3844,7 +3861,7 @@ elf_m68k_relocate_section (bfd *output_b
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -3916,7 +3933,7 @@ elf_m68k_relocate_section (bfd *output_b
 	     (uint64_t) rel->r_offset,
 	     howto->name,
 	     h->root.root.string);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx != STN_UNDEF
@@ -3973,7 +3990,7 @@ elf_m68k_relocate_section (bfd *output_b
 						      symtab_hdr->sh_link,
 						      sym->st_name);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      if (*name == '\0')
 		name = bfd_section_name (sec);
 	    }
@@ -3989,12 +4006,12 @@ elf_m68k_relocate_section (bfd *output_b
 		(_("%pB(%pA+%#" PRIx64 "): reloc against `%s': error %d"),
 		 input_bfd, input_section,
 		 (uint64_t) rel->r_offset, name, (int) r);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Install an M_68K_PC32 relocation against VALUE at offset OFFSET
@@ -4015,7 +4032,7 @@ elf_m68k_install_pc32 (asection *sec, bf
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf_m68k_finish_dynamic_symbol (bfd *output_bfd,
 				struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
@@ -4158,7 +4175,7 @@ elf_m68k_finish_dynamic_symbol (bfd *out
 		  break;
 
 		default:
-		  BFD_ASSERT (FALSE);
+		  BFD_ASSERT (false);
 		}
 
 	      elf_m68k_init_got_entry_local_shared (info,
@@ -4212,7 +4229,7 @@ elf_m68k_finish_dynamic_symbol (bfd *out
 		  break;
 
 		default:
-		  BFD_ASSERT (FALSE);
+		  BFD_ASSERT (false);
 		  break;
 		}
 	    }
@@ -4245,12 +4262,12 @@ elf_m68k_finish_dynamic_symbol (bfd *out
       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_m68k_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd *dynobj;
@@ -4341,7 +4358,7 @@ elf_m68k_finish_dynamic_sections (bfd *o
 
   elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
 
-  return TRUE;
+  return true;
 }
 
 /* Given a .data section and a .emreloc in-memory section, store
@@ -4351,7 +4368,7 @@ elf_m68k_finish_dynamic_sections (bfd *o
    after the add_symbols entry point has been called for all the
    objects, and before the final_link entry point is called.  */
 
-bfd_boolean
+bool
 bfd_m68k_elf32_create_embedded_relocs (bfd *abfd, struct bfd_link_info *info,
 				       asection *datasec, asection *relsec,
 				       char **errmsg)
@@ -4368,7 +4385,7 @@ bfd_m68k_elf32_create_embedded_relocs (b
   *errmsg = NULL;
 
   if (datasec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -4448,20 +4465,18 @@ bfd_m68k_elf32_create_embedded_relocs (b
 	strncpy ((char *) p + 4, targetsec->output_section->name, 8);
     }
 
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (datasec)->relocs != internal_relocs)
+  if (elf_section_data (datasec)->relocs != internal_relocs)
     free (internal_relocs);
-  return TRUE;
+  return true;
 
-error_return:
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+ error_return:
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (datasec)->relocs != internal_relocs)
+  if (elf_section_data (datasec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 
 /* Set target options.  */
@@ -4470,35 +4485,35 @@ void
 bfd_elf_m68k_set_target_options (struct bfd_link_info *info, int got_handling)
 {
   struct elf_m68k_link_hash_table *htab;
-  bfd_boolean use_neg_got_offsets_p;
-  bfd_boolean allow_multigot_p;
-  bfd_boolean local_gp_p;
+  bool use_neg_got_offsets_p;
+  bool allow_multigot_p;
+  bool local_gp_p;
 
   switch (got_handling)
     {
     case 0:
       /* --got=single.  */
-      local_gp_p = FALSE;
-      use_neg_got_offsets_p = FALSE;
-      allow_multigot_p = FALSE;
+      local_gp_p = false;
+      use_neg_got_offsets_p = false;
+      allow_multigot_p = false;
       break;
 
     case 1:
       /* --got=negative.  */
-      local_gp_p = TRUE;
-      use_neg_got_offsets_p = TRUE;
-      allow_multigot_p = FALSE;
+      local_gp_p = true;
+      use_neg_got_offsets_p = true;
+      allow_multigot_p = false;
       break;
 
     case 2:
       /* --got=multigot.  */
-      local_gp_p = TRUE;
-      use_neg_got_offsets_p = TRUE;
-      allow_multigot_p = TRUE;
+      local_gp_p = true;
+      use_neg_got_offsets_p = true;
+      allow_multigot_p = true;
       break;
 
     default:
-      BFD_ASSERT (FALSE);
+      BFD_ASSERT (false);
       return;
     }
 
@@ -4541,7 +4556,7 @@ elf_m68k_plt_sym_val (bfd_vma i, const a
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf_m68k_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -4550,7 +4565,7 @@ elf_m68k_grok_prstatus (bfd *abfd, Elf_I
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 154:		/* Linux/m68k */
       /* pr_cursig */
@@ -4571,13 +4586,13 @@ elf_m68k_grok_prstatus (bfd *abfd, Elf_I
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf_m68k_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 124:		/* Linux/m68k elf_prpsinfo.  */
       elf_tdata (abfd)->core->pid
@@ -4599,7 +4614,7 @@ elf_m68k_grok_psinfo (bfd *abfd, Elf_Int
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 #define TARGET_BIG_SYM			m68k_elf32_vec
@@ -4649,6 +4664,6 @@ elf_m68k_grok_psinfo (bfd *abfd, Elf_Int
 #define elf_backend_rela_normal		1
 #define elf_backend_dtrel_excludes_plt	1
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #include "elf32-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68k.h ./bfd/elf32-m68k.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-m68k.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-m68k.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Motorola 68k series support for 32-bit ELF
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,7 +18,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs
+extern bool bfd_m68k_elf32_create_embedded_relocs
   (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
    char **);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-mcore.c ./bfd/elf32-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-mcore.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-mcore.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Motorola MCore specific support for 32-bit ELF
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -34,21 +34,21 @@
 
 /* Function to set whether a module needs the -mrelocatable bit set.  */
 
-static bfd_boolean
+static bool
 mcore_elf_set_private_flags (bfd * abfd, flagword flags)
 {
   BFD_ASSERT (! elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 mcore_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -57,11 +57,11 @@ mcore_elf_merge_private_bfd_data (bfd *i
 
   /* Check if we have the same endianness.  */
   if (! _bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   if (   bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
@@ -69,7 +69,7 @@ mcore_elf_merge_private_bfd_data (bfd *i
   if (! elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
   else if (new_flags == old_flags)
@@ -80,7 +80,7 @@ mcore_elf_merge_private_bfd_data (bfd *i
       /* FIXME */
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Don't pretend we can deal with unsupported relocs.  */
@@ -111,95 +111,95 @@ static reloc_howto_type mcore_elf_howto_
   /* This reloc does nothing.  */
   HOWTO (R_MCORE_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,  /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_MCORE_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A standard 32 bit relocation.  */
   HOWTO (R_MCORE_ADDR32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "ADDR32",		/* name *//* For compatibility with coff/pe port.  */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 8 bits + 2 zero bits; jmpi/jsri/lrw instructions.
      Should not appear in object files.  */
   HOWTO (R_MCORE_PCRELIMM8BY4,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mcore_elf_unsupported_reloc,	/* special_function */
 	 "R_MCORE_PCRELIMM8BY4",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* bsr/bt/bf/br instructions; 11 bits + 1 zero bit
      Span 2k instructions == 4k bytes.
      Only useful pieces at the relocated address are the opcode (5 bits) */
   HOWTO (R_MCORE_PCRELIMM11BY2,/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 11,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MCORE_PCRELIMM11BY2",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x7ff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 4 bits + 1 zero bit; 'loopt' instruction only; unsupported.  */
   HOWTO (R_MCORE_PCRELIMM4BY2,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 4,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mcore_elf_unsupported_reloc,/* special_function */
 	 "R_MCORE_PCRELIMM4BY2",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 32-bit pc-relative. Eventually this will help support PIC code.  */
   HOWTO (R_MCORE_PCREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MCORE_PCREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Like PCRELIMM11BY2, this relocation indicates that there is a
      'jsri' at the specified address. There is a separate relocation
@@ -210,61 +210,61 @@ static reloc_howto_type mcore_elf_howto_
      is a relocation that we are allowed to safely ignore.  */
   HOWTO (R_MCORE_PCRELJSR_IMM11BY2,/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 11,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MCORE_PCRELJSR_IMM11BY2", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x7ff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_MCORE_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_MCORE_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_MCORE_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_MCORE_GNU_VTENTRY", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MCORE_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_MCORE_RELATIVE",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false)			/* pcrel_offset */
 };
 
 #ifndef NUM_ELEM
@@ -336,7 +336,7 @@ mcore_elf_reloc_name_lookup (bfd *abfd A
 
 /* Set the howto pointer for a RCE ELF reloc.  */
 
-static bfd_boolean
+static bool
 mcore_elf_info_to_howto (bfd * abfd,
 			 arelent * cache_ptr,
 			 Elf_Internal_Rela * dst)
@@ -354,11 +354,11 @@ mcore_elf_info_to_howto (bfd * abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = mcore_elf_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 /* The RELOCATE_SECTION function is called by the ELF backend linker
@@ -390,7 +390,7 @@ mcore_elf_info_to_howto (bfd * abfd,
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 mcore_elf_relocate_section (bfd * output_bfd,
 			    struct bfd_link_info * info,
 			    bfd * input_bfd,
@@ -404,7 +404,7 @@ mcore_elf_relocate_section (bfd * output
   struct elf_link_hash_entry ** sym_hashes = elf_sym_hashes (input_bfd);
   Elf_Internal_Rela * rel = relocs;
   Elf_Internal_Rela * relend = relocs + input_section->reloc_count;
-  bfd_boolean ret = TRUE;
+  bool ret = true;
 
 #ifdef DEBUG
   _bfd_error_handler
@@ -441,7 +441,7 @@ mcore_elf_relocate_section (bfd * output
 			      input_bfd, (int) r_type);
 
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	  continue;
 	}
 
@@ -457,7 +457,7 @@ mcore_elf_relocate_section (bfd * output
 			      howto->name);
 
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	  continue;
 	}
 
@@ -470,7 +470,7 @@ mcore_elf_relocate_section (bfd * output
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -514,7 +514,7 @@ mcore_elf_relocate_section (bfd * output
 
       if (r != bfd_reloc_ok)
 	{
-	  ret = FALSE;
+	  ret = false;
 
 	  switch (r)
 	    {
@@ -580,7 +580,7 @@ mcore_elf_gc_mark_hook (asection *sec,
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 mcore_elf_check_relocs (bfd * abfd,
 			struct bfd_link_info * info,
 			asection * sec,
@@ -592,7 +592,7 @@ mcore_elf_check_relocs (bfd * abfd,
   const Elf_Internal_Rela * rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -622,19 +622,19 @@ mcore_elf_check_relocs (bfd * abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_MCORE_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_MCORE_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static const struct bfd_elf_special_section mcore_elf_special_sections[]=
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-mep.c ./bfd/elf32-mep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-mep.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-mep.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* MeP-specific support for 32-bit ELF.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -30,7 +30,7 @@
 /* Private relocation functions.  */
 
 #define MEPREL(type, size, bits, right, left, pcrel, overflow, mask) \
-  HOWTO (type, right, size, bits, pcrel, left, overflow, bfd_elf_generic_reloc, #type, FALSE, 0, mask, 0)
+  HOWTO (type, right, size, bits, pcrel, left, overflow, bfd_elf_generic_reloc, #type, false, 0, mask, 0)
 
 #define N complain_overflow_dont
 #define S complain_overflow_signed
@@ -39,30 +39,30 @@
 static reloc_howto_type mep_elf_howto_table [] =
 {
   /* type, size, bits, leftshift, rightshift, pcrel, OD/OS/OU, mask.  */
-  MEPREL (R_MEP_NONE,	  3,  0, 0, 0, 0, N, 0),
+  MEPREL (R_MEP_NONE,	  0,  0, 0, 0, 0, N, 0),
   MEPREL (R_RELC,	  0,  0, 0, 0, 0, N, 0),
   /* MEPRELOC:HOWTO */
     /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h.  */
-  MEPREL (R_MEP_8,	  0,  8, 0, 0, 0, U, 0xff),
-  MEPREL (R_MEP_16,	  1, 16, 0, 0, 0, U, 0xffff),
-  MEPREL (R_MEP_32,	  2, 32, 0, 0, 0, U, 0xffffffff),
-  MEPREL (R_MEP_PCREL8A2, 1,  8, 1, 1, 1, S, 0x00fe),
-  MEPREL (R_MEP_PCREL12A2,1, 12, 1, 1, 1, S, 0x0ffe),
-  MEPREL (R_MEP_PCREL17A2,2, 17, 0, 1, 1, S, 0x0000ffff),
-  MEPREL (R_MEP_PCREL24A2,2, 24, 0, 1, 1, S, 0x07f0ffff),
-  MEPREL (R_MEP_PCABS24A2,2, 24, 0, 1, 0, U, 0x07f0ffff),
-  MEPREL (R_MEP_LOW16,	  2, 16, 0, 0, 0, N, 0x0000ffff),
-  MEPREL (R_MEP_HI16U,	  2, 32, 0,16, 0, N, 0x0000ffff),
-  MEPREL (R_MEP_HI16S,	  2, 32, 0,16, 0, N, 0x0000ffff),
-  MEPREL (R_MEP_GPREL,	  2, 16, 0, 0, 0, S, 0x0000ffff),
-  MEPREL (R_MEP_TPREL,	  2, 16, 0, 0, 0, S, 0x0000ffff),
-  MEPREL (R_MEP_TPREL7,	  1,  7, 0, 0, 0, U, 0x007f),
-  MEPREL (R_MEP_TPREL7A2, 1,  7, 1, 1, 0, U, 0x007e),
-  MEPREL (R_MEP_TPREL7A4, 1,  7, 2, 2, 0, U, 0x007c),
-  MEPREL (R_MEP_UIMM24,	  2, 24, 0, 0, 0, U, 0x00ffffff),
-  MEPREL (R_MEP_ADDR24A4, 2, 24, 0, 2, 0, U, 0x00fcffff),
-  MEPREL (R_MEP_GNU_VTINHERIT,1,  0,16,32, 0, N, 0x0000),
-  MEPREL (R_MEP_GNU_VTENTRY,1,	0,16,32, 0, N, 0x0000),
+  MEPREL (R_MEP_8,        1,  8, 0, 0, 0, U, 0xff),
+  MEPREL (R_MEP_16,       2, 16, 0, 0, 0, U, 0xffff),
+  MEPREL (R_MEP_32,       4, 32, 0, 0, 0, U, 0xffffffff),
+  MEPREL (R_MEP_PCREL8A2, 2,  8, 1, 1, 1, S, 0x00fe),
+  MEPREL (R_MEP_PCREL12A2,2, 12, 1, 1, 1, S, 0x0ffe),
+  MEPREL (R_MEP_PCREL17A2,4, 17, 0, 1, 1, S, 0x0000ffff),
+  MEPREL (R_MEP_PCREL24A2,4, 24, 0, 1, 1, S, 0x07f0ffff),
+  MEPREL (R_MEP_PCABS24A2,4, 24, 0, 1, 0, U, 0x07f0ffff),
+  MEPREL (R_MEP_LOW16,    4, 16, 0, 0, 0, N, 0x0000ffff),
+  MEPREL (R_MEP_HI16U,    4, 32, 0,16, 0, N, 0x0000ffff),
+  MEPREL (R_MEP_HI16S,    4, 32, 0,16, 0, N, 0x0000ffff),
+  MEPREL (R_MEP_GPREL,    4, 16, 0, 0, 0, S, 0x0000ffff),
+  MEPREL (R_MEP_TPREL,    4, 16, 0, 0, 0, S, 0x0000ffff),
+  MEPREL (R_MEP_TPREL7,   2,  7, 0, 0, 0, U, 0x007f),
+  MEPREL (R_MEP_TPREL7A2, 2,  7, 1, 1, 0, U, 0x007e),
+  MEPREL (R_MEP_TPREL7A4, 2,  7, 2, 2, 0, U, 0x007c),
+  MEPREL (R_MEP_UIMM24,   4, 24, 0, 0, 0, U, 0x00ffffff),
+  MEPREL (R_MEP_ADDR24A4, 4, 24, 0, 2, 0, U, 0x00fcffff),
+  MEPREL (R_MEP_GNU_VTINHERIT,2,  0,16,32, 0, N, 0x0000),
+  MEPREL (R_MEP_GNU_VTENTRY,2,  0,16,32, 0, N, 0x0000),
   /* MEPRELOC:END */
 };
 
@@ -185,7 +185,7 @@ mep_lookup_global
   if (*cache || *warn)
     return *cache;
 
-  h = bfd_link_hash_lookup (mep_info->hash, name, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (mep_info->hash, name, false, false, true);
   if (h == 0 || h->type != bfd_link_hash_defined)
     {
       *warn = ofs + 1;
@@ -221,7 +221,6 @@ mep_final_link_relocate
      bfd_vma		 relocation)
 {
   unsigned long u;
-  long s;
   unsigned char *byte;
   bfd_vma pc;
   bfd_reloc_status_type r = bfd_reloc_ok;
@@ -242,12 +241,12 @@ mep_final_link_relocate
 	+ input_section->output_offset
 	+ rel->r_offset);
 
-  s = relocation + rel->r_addend;
+  u = relocation + rel->r_addend;
 
   byte = (unsigned char *)contents + rel->r_offset;
 
   if (howto->type == R_MEP_PCREL24A2
-      && s == 0
+      && u == 0
       && pc >= 0x800000)
     {
       /* This is an unreachable branch to an undefined weak function.
@@ -257,9 +256,7 @@ mep_final_link_relocate
     }
 
   if (howto->pc_relative)
-    s -= pc;
-
-  u = (unsigned long) s;
+    u -= pc;
 
   switch (howto->type)
     {
@@ -281,25 +278,25 @@ mep_final_link_relocate
       byte[3^e4] = (u & 0xff);
       break;
     case R_MEP_PCREL8A2: /* --------7654321- */
-      if (-128 > s || s > 127) r = bfd_reloc_overflow;
-      byte[1^e2] = (byte[1^e2] & 0x01) | (s & 0xfe);
+      if (u + 128 > 255) r = bfd_reloc_overflow;
+      byte[1^e2] = (byte[1^e2] & 0x01) | (u & 0xfe);
       break;
     case R_MEP_PCREL12A2: /* ----ba987654321- */
-      if (-2048 > s || s > 2047) r = bfd_reloc_overflow;
-      byte[0^e2] = (byte[0^e2] & 0xf0) | ((s >> 8) & 0x0f);
-      byte[1^e2] = (byte[1^e2] & 0x01) | (s & 0xfe);
+      if (u + 2048 > 4095) r = bfd_reloc_overflow;
+      byte[0^e2] = (byte[0^e2] & 0xf0) | ((u >> 8) & 0x0f);
+      byte[1^e2] = (byte[1^e2] & 0x01) | (u & 0xfe);
       break;
     case R_MEP_PCREL17A2: /* ----------------gfedcba987654321 */
-      if (-65536 > s || s > 65535) r = bfd_reloc_overflow;
-      byte[2^e2] = ((s >> 9) & 0xff);
-      byte[3^e2] = ((s >> 1) & 0xff);
+      if (u + 65536 > 131071) r = bfd_reloc_overflow;
+      byte[2^e2] = ((u >> 9) & 0xff);
+      byte[3^e2] = ((u >> 1) & 0xff);
       break;
     case R_MEP_PCREL24A2: /* -----7654321----nmlkjihgfedcba98 */
-      if (-8388608 > s || s > 8388607) r = bfd_reloc_overflow;
-      byte[0^e2] = (byte[0^e2] & 0xf8) | ((s >> 5) & 0x07);
-      byte[1^e2] = (byte[1^e2] & 0x0f) | ((s << 3) & 0xf0);
-      byte[2^e2] = ((s >> 16) & 0xff);
-      byte[3^e2] = ((s >> 8) & 0xff);
+      if (u + 8388608 > 16777215) r = bfd_reloc_overflow;
+      byte[0^e2] = (byte[0^e2] & 0xf8) | ((u >> 5) & 0x07);
+      byte[1^e2] = (byte[1^e2] & 0x0f) | ((u << 3) & 0xf0);
+      byte[2^e2] = ((u >> 16) & 0xff);
+      byte[3^e2] = ((u >> 8) & 0xff);
       break;
     case R_MEP_PCABS24A2: /* -----7654321----nmlkjihgfedcba98 */
       if (u > 16777215) r = bfd_reloc_overflow;
@@ -317,22 +314,21 @@ mep_final_link_relocate
       byte[3^e2] = ((u >> 16) & 0xff);
       break;
     case R_MEP_HI16S: /* ----------------vutsrqponmlkjihg */
-      if (s & 0x8000)
-	s += 0x10000;
-      byte[2^e2] = ((s >> 24) & 0xff);
-      byte[3^e2] = ((s >> 16) & 0xff);
+      u += 0x8000;
+      byte[2^e2] = ((u >> 24) & 0xff);
+      byte[3^e2] = ((u >> 16) & 0xff);
       break;
     case R_MEP_GPREL: /* ----------------fedcba9876543210 */
-      s -= mep_sdaoff_base(rel->r_offset);
-      if (-32768 > s || s > 32767) r = bfd_reloc_overflow;
-      byte[2^e2] = ((s >> 8) & 0xff);
-      byte[3^e2] = (s & 0xff);
+      u -= mep_sdaoff_base(rel->r_offset);
+      if (u + 32768 > 65535) r = bfd_reloc_overflow;
+      byte[2^e2] = ((u >> 8) & 0xff);
+      byte[3^e2] = (u & 0xff);
       break;
     case R_MEP_TPREL: /* ----------------fedcba9876543210 */
-      s -= mep_tpoff_base(rel->r_offset);
-      if (-32768 > s || s > 32767) r = bfd_reloc_overflow;
-      byte[2^e2] = ((s >> 8) & 0xff);
-      byte[3^e2] = (s & 0xff);
+      u -= mep_tpoff_base(rel->r_offset);
+      if (u + 32768 > 65535) r = bfd_reloc_overflow;
+      byte[2^e2] = ((u >> 8) & 0xff);
+      byte[3^e2] = (u & 0xff);
       break;
     case R_MEP_TPREL7: /* ---------6543210 */
       u -= mep_tpoff_base(rel->r_offset);
@@ -375,7 +371,7 @@ mep_final_link_relocate
 
 /* Set the howto pointer for a MEP ELF reloc.  */
 
-static bfd_boolean
+static bool
 mep_info_to_howto_rela (bfd *		    abfd,
 			arelent *	    cache_ptr,
 			Elf_Internal_Rela * dst)
@@ -389,10 +385,10 @@ mep_info_to_howto_rela (bfd *		    abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & mep_elf_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 /* Relocate a MEP ELF section.
@@ -428,7 +424,7 @@ mep_info_to_howto_rela (bfd *		    abfd,
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 mep_elf_relocate_section
     (bfd *		     output_bfd ATTRIBUTE_UNUSED,
      struct bfd_link_info *  info,
@@ -481,7 +477,7 @@ mep_elf_relocate_section
 	}
       else
 	{
-	  bfd_boolean warned, unresolved_reloc, ignored;
+	  bool warned, unresolved_reloc, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL(info, input_bfd, input_section, rel,
 				  r_symndx, symtab_hdr, sym_hashes,
@@ -519,7 +515,7 @@ mep_elf_relocate_section
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -547,31 +543,31 @@ mep_elf_relocate_section
 
   if (warn_tp)
     info->callbacks->undefined_symbol
-      (info, "__tpbase", input_bfd, input_section, warn_tp-1, TRUE);
+      (info, "__tpbase", input_bfd, input_section, warn_tp-1, true);
   if (warn_sda)
     info->callbacks->undefined_symbol
-      (info, "__sdabase", input_bfd, input_section, warn_sda-1, TRUE);
+      (info, "__sdabase", input_bfd, input_section, warn_sda-1, true);
   if (warn_sda || warn_tp)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Function to set the ELF flag bits.  */
 
-static bfd_boolean
+static bool
 mep_elf_set_private_flags (bfd *    abfd,
 			   flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 mep_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -581,7 +577,7 @@ mep_elf_merge_private_bfd_data (bfd *ibf
 
   /* Check if we have the same endianness.  */
   if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
@@ -594,7 +590,7 @@ mep_elf_merge_private_bfd_data (bfd *ibf
     /* First call, no flags set.  */
     if (!elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       old_flags = new_flags;
     }
   else if ((new_flags | old_flags) & EF_MEP_LIBRARY)
@@ -622,7 +618,7 @@ mep_elf_merge_private_bfd_data (bfd *ibf
 	  _bfd_error_handler (_("%pB and %pB are for different cores"),
 			      last_ibfd, ibfd);
 	  bfd_set_error (bfd_error_invalid_target);
-	  return FALSE;
+	  return false;
 	}
 
       /* Make sure they're for the same me_module.  Allow basic config to
@@ -641,13 +637,13 @@ mep_elf_merge_private_bfd_data (bfd *ibf
 	  _bfd_error_handler (_("%pB and %pB are for different configurations"),
 			      last_ibfd, ibfd);
 	  bfd_set_error (bfd_error_invalid_target);
-	  return FALSE;
+	  return false;
 	}
     }
 
   elf_elfheader (obfd)->e_flags = old_flags;
   last_ibfd = ibfd;
-  return TRUE;
+  return true;
 }
 
 /* This will be edited by the MeP configration tool.  */
@@ -664,7 +660,7 @@ static const char * core_names[] =
   "MeP", "MeP-c2", "MeP-c3", "MeP-h1"
 };
 
-static bfd_boolean
+static bool
 mep_elf_print_private_bfd_data (bfd * abfd, void * ptr)
 {
   FILE *   file = (FILE *) ptr;
@@ -688,7 +684,7 @@ mep_elf_print_private_bfd_data (bfd * ab
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 /* Return the machine subcode from the ELF e_flags header.  */
@@ -709,29 +705,29 @@ elf32_mep_machine (bfd * abfd)
   return bfd_mach_mep;
 }
 
-static bfd_boolean
+static bool
 mep_elf_object_p (bfd * abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_mep, elf32_mep_machine (abfd));
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
-mep_elf_section_flags (flagword * flags, const Elf_Internal_Shdr * hdr)
+static bool
+mep_elf_section_flags (const Elf_Internal_Shdr *hdr)
 {
   if (hdr->sh_flags & SHF_MEP_VLIW)
-    * flags |= SEC_MEP_VLIW;
-  return TRUE;
+    hdr->bfd_section->flags |= SEC_MEP_VLIW;
+  return true;
 }
 
-static bfd_boolean
+static bool
 mep_elf_fake_sections (bfd *		   abfd ATTRIBUTE_UNUSED,
 		       Elf_Internal_Shdr * hdr,
 		       asection *	   sec)
 {
   if (sec->flags & SEC_MEP_VLIW)
     hdr->sh_flags |= SHF_MEP_VLIW;
-  return TRUE;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-metag.c ./bfd/elf32-metag.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-metag.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-metag.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Meta support for 32-bit ELF
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2024 Free Software Foundation, Inc.
    Contributed by Imagination Technologies Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -95,92 +95,92 @@ static reloc_howto_type elf_metag_howto_
   /* High order 16 bit absolute.  */
   HOWTO (R_METAG_HIADDR16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_HIADDR16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low order 16 bit absolute.  */
   HOWTO (R_METAG_LOADDR16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_LOADDR16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit absolute.  */
   HOWTO (R_METAG_ADDR32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_ADDR32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* No relocation.  */
   HOWTO (R_METAG_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 19 bit pc relative */
   HOWTO (R_METAG_RELBRANCH,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 5,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_RELBRANCH",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00ffffe0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GET/SET offset */
   HOWTO (R_METAG_GETSETOFF,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_GETSETOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (6),
   EMPTY_HOWTO (7),
@@ -209,194 +209,194 @@ static reloc_howto_type elf_metag_howto_
 
   HOWTO (R_METAG_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,		/* pc_relative */
+	 false,		/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_METAG_GNU_VTINHERIT", /* name */
-	 FALSE,		/* partial_inplace */
+	 false,		/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_METAG_GNU_VTENTRY",  /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High order 16 bit GOT offset */
   HOWTO (R_METAG_HI16_GOTOFF,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_HI16_GOTOFF", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low order 16 bit GOT offset */
   HOWTO (R_METAG_LO16_GOTOFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_LO16_GOTOFF", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GET/SET GOT offset */
   HOWTO (R_METAG_GETSET_GOTOFF, /* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_GETSET_GOTOFF", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GET/SET GOT relative */
   HOWTO (R_METAG_GETSET_GOT,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_GETSET_GOT",  /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High order 16 bit GOT reference */
   HOWTO (R_METAG_HI16_GOTPC,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_HI16_GOTPC",  /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low order 16 bit GOT reference */
   HOWTO (R_METAG_LO16_GOTPC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_LO16_GOTPC",  /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High order 16 bit PLT */
   HOWTO (R_METAG_HI16_PLT,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_HI16_PLT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low order 16 bit PLT */
   HOWTO (R_METAG_LO16_PLT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_LO16_PLT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_RELBRANCH_PLT, /* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 5,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_RELBRANCH_PLT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00ffffe0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Dummy relocs used by the linker internally.  */
   HOWTO (R_METAG_GOTOFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_GOTOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_PLT,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_GOTOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* This is used only by the dynamic linker.  The symbol should exist
      both in the object being run and in some shared library.  The
@@ -405,276 +405,276 @@ static reloc_howto_type elf_metag_howto_
      run has to have the data at some particular address.  */
   HOWTO (R_METAG_COPY,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_COPY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Marks a procedure linkage table entry for a symbol.  */
   HOWTO (R_METAG_JMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Used only by the dynamic linker.  When the object is run, this
      longword is set to the load address of the object, plus the
      addend.  */
   HOWTO (R_METAG_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_GD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_GD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_LDM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_LDO_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_LDO_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_LDO_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_LDO_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Dummy reloc used by the linker internally.  */
   HOWTO (R_METAG_TLS_LDO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_LDO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_IE,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_IE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007ff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Dummy reloc used by the linker internally.  */
   HOWTO (R_METAG_TLS_IENONPIC,  /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_IENONPIC", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_IENONPIC_HI16,/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_IENONPIC_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_IENONPIC_LO16,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_IENONPIC_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_TPOFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_TPOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_DTPMOD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_DTPMOD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_DTPOFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_DTPOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Dummy reloc used by the linker internally.  */
   HOWTO (R_METAG_TLS_LE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_LE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_LE_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_LE_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_METAG_TLS_LE_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 3,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_METAG_TLS_LE_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007fff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 };
 
@@ -785,10 +785,6 @@ struct elf_metag_link_hash_entry
      symbol.  */
   struct elf_metag_stub_hash_entry *hsh_cache;
 
-  /* Used to count relocations for delayed sizing of relocation
-     sections.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   enum
     {
       GOT_UNKNOWN = 0, GOT_NORMAL = 1, GOT_TLS_IE = 2, GOT_TLS_LDM = 4, GOT_TLS_GD = 8
@@ -827,9 +823,6 @@ struct elf_metag_link_hash_table
   asection **input_list;
   Elf_Internal_Sym **all_local_syms;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* Data for LDM relocations.  */
   union
   {
@@ -864,7 +857,7 @@ tpoff (struct bfd_link_info *info, bfd_v
 			 elf_hash_table (info)->tls_sec->alignment_power));
 }
 
-static bfd_boolean
+static bool
 metag_info_to_howto_rela (bfd *abfd,
 			  arelent *cache_ptr,
 			  Elf_Internal_Rela *dst)
@@ -878,10 +871,10 @@ metag_info_to_howto_rela (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & elf_metag_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type *
@@ -913,8 +906,9 @@ metag_reloc_name_lookup (bfd *abfd ATTRI
 
 /* Various hash macros and functions.  */
 #define metag_link_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == METAG_ELF_DATA ? ((struct elf_metag_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == METAG_ELF_DATA)	\
+   ? (struct elf_metag_link_hash_table *) (p)->hash : NULL)
 
 #define metag_elf_hash_entry(ent) \
   ((struct elf_metag_link_hash_entry *)(ent))
@@ -994,7 +988,6 @@ metag_link_hash_newfunc (struct bfd_hash
       /* Initialize the local fields.  */
       hh = (struct elf_metag_link_hash_entry *) entry;
       hh->hsh_cache = NULL;
-      hh->dyn_relocs = NULL;
       hh->tls_type = GOT_UNKNOWN;
     }
 
@@ -1021,7 +1014,7 @@ static struct bfd_link_hash_table *
 elf_metag_link_hash_table_create (bfd *abfd)
 {
   struct elf_metag_link_hash_table *htab;
-  bfd_size_type amt = sizeof (*htab);
+  size_t amt = sizeof (*htab);
 
   htab = bfd_zmalloc (amt);
   if (htab == NULL)
@@ -1044,6 +1037,7 @@ elf_metag_link_hash_table_create (bfd *a
       return NULL;
     }
   htab->etab.root.hash_table_free = elf_metag_link_hash_table_free;
+  htab->etab.dt_pltgot_required = true;
 
   return &htab->etab.root;
 }
@@ -1126,7 +1120,7 @@ metag_get_stub_entry (const asection *in
 	return NULL;
 
       hsh = metag_stub_hash_lookup (&htab->bstab,
-				    stub_name, FALSE, FALSE);
+				    stub_name, false, false);
 
       if (hh != NULL)
 	hh->hsh_cache = hsh;
@@ -1179,7 +1173,7 @@ metag_add_stub (const char *stub_name,
 
   /* Enter this entry into the linker stub hash table.  */
   hsh = metag_stub_hash_lookup (&htab->bstab, stub_name,
-				TRUE, FALSE);
+				true, false);
   if (hsh == NULL)
     {
       /* xgettext:c-format */
@@ -1197,7 +1191,7 @@ metag_add_stub (const char *stub_name,
 /* Check a signed integer value can be represented in the given number
    of bits.  */
 
-static bfd_boolean
+static bool
 within_signed_range (int value, unsigned int bits)
 {
   int min_val = -(1 << (bits - 1));
@@ -1458,7 +1452,7 @@ going to be the section symbol correspon
 section, which means that the addend must be adjusted
 accordingly.  */
 
-static bfd_boolean
+static int
 elf_metag_relocate_section (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    bfd *input_bfd,
@@ -1524,7 +1518,7 @@ elf_metag_relocate_section (bfd *output_
       else
 	{
 	  struct elf_link_hash_entry *eh;
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, eh_syms,
@@ -1552,8 +1546,8 @@ elf_metag_relocate_section (bfd *output_
 	  if ((bfd_link_pic (info)
 	       && r_symndx != STN_UNDEF
 	       && (input_section->flags & SEC_ALLOC) != 0
-	       && (r_type != R_METAG_RELBRANCH
-		   || !SYMBOL_CALLS_LOCAL (info, &hh->eh)))
+	       && !(r_type == R_METAG_RELBRANCH
+		    && (hh == NULL || SYMBOL_CALLS_LOCAL (info, &hh->eh))))
 	      || (!bfd_link_pic (info)
 		  && hh != NULL
 		  && hh->eh.dynindx != -1
@@ -1564,7 +1558,7 @@ elf_metag_relocate_section (bfd *output_
 		      || hh->eh.root.type == bfd_link_hash_undefined)))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 	      bfd_byte *loc;
 
 	      /* When generating a shared object, these relocations
@@ -1574,17 +1568,17 @@ elf_metag_relocate_section (bfd *output_
 	      sreloc = elf_section_data (input_section)->sreloc;
 	      BFD_ASSERT (sreloc != NULL);
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset = _bfd_elf_section_offset (output_bfd,
 							 info,
 							 input_section,
 							 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -1607,7 +1601,7 @@ elf_metag_relocate_section (bfd *output_
 		      || ((info->symbolic || hh->eh.dynindx == -1)
 			  && hh->eh.def_regular))
 		    {
-		      relocate = TRUE;
+		      relocate = true;
 		      outrel.r_info = ELF32_R_INFO (0, R_METAG_RELATIVE);
 		      outrel.r_addend = relocation + rel->r_addend;
 		    }
@@ -1678,13 +1672,13 @@ elf_metag_relocate_section (bfd *output_
 	case R_METAG_GETSET_GOT:
 	  {
 	    bfd_vma off;
-	    bfd_boolean do_got = 0;
+	    bool do_got = 0;
 
 	    /* Relocation is to the entry for this symbol in the
 	       global offset table.  */
 	    if (hh != NULL)
 	      {
-		bfd_boolean dyn;
+		bool dyn;
 
 		off = hh->eh.got.offset;
 		dyn = htab->etab.dynamic_sections_created;
@@ -1773,7 +1767,7 @@ elf_metag_relocate_section (bfd *output_
 	    indx = 0;
 	    if (hh != NULL)
 	      {
-		bfd_boolean dyn;
+		bool dyn;
 		dyn = htab->etab.dynamic_sections_created;
 
 		if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
@@ -1804,7 +1798,7 @@ elf_metag_relocate_section (bfd *output_
 	      off &= ~1;
 	    else
 	      {
-		bfd_boolean need_relocs = FALSE;
+		bool need_relocs = false;
 		Elf_Internal_Rela outrel;
 		bfd_byte *loc = NULL;
 		int cur_off = off;
@@ -1818,7 +1812,7 @@ elf_metag_relocate_section (bfd *output_
 			|| ELF_ST_VISIBILITY (hh->eh.other) == STV_DEFAULT
 			|| hh->eh.root.type != bfd_link_hash_undefweak))
 		  {
-		    need_relocs = TRUE;
+		    need_relocs = true;
 		    loc = htab->etab.srelgot->contents;
 		    /* FIXME (CAO): Should this be reloc_count++ ? */
 		    loc += htab->etab.srelgot->reloc_count * sizeof (Elf32_External_Rela);
@@ -1865,7 +1859,7 @@ elf_metag_relocate_section (bfd *output_
 			else
 			  _bfd_error_handler (_("%pB(%pA): shared library symbol %s encountered whilst performing a static link"),
 					      input_bfd, input_section, name);
-			return FALSE;
+			return false;
 		      }
 
 		    cur_off += 8;
@@ -1920,7 +1914,7 @@ elf_metag_relocate_section (bfd *output_
 		   "%s relocation not permitted in shared object"),
 		 input_bfd, input_section, (uint64_t) rel->r_offset,
 		 howto->name);
-	      return FALSE;
+	      return false;
 	    }
 	  else
 	    relocation = tpoff (info, relocation);
@@ -1983,7 +1977,7 @@ elf_metag_relocate_section (bfd *output_
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -2009,13 +2003,13 @@ elf_metag_relocate_section (bfd *output_
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create the .plt and .got sections, and set up our hash table
    short-cuts to various dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_metag_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_metag_link_hash_table *htab;
@@ -2026,11 +2020,11 @@ elf_metag_create_dynamic_sections (bfd *
   /* Don't try to create the .plt and .got twice.  */
   htab = metag_link_hash_table (info);
   if (htab->etab.splt != NULL)
-    return TRUE;
+    return true;
 
   /* Call the generic code to do most of the work.  */
   if (! _bfd_elf_create_dynamic_sections (abfd, info))
-    return FALSE;
+    return false;
 
   /* The header goes at the start of the dynamic .got section, which
      is placed after the dynamic .got.plt section.  ie. The header is
@@ -2041,8 +2035,8 @@ elf_metag_create_dynamic_sections (bfd *
   bh = NULL;
   if (!(_bfd_generic_link_add_one_symbol
 	(info, abfd, "__GLOBAL_OFFSET_TABLE__", BSF_GLOBAL, htab->etab.sgot,
-	 (bfd_vma) 0, NULL, FALSE, bed->collect, &bh)))
-    return FALSE;
+	 (bfd_vma) 0, NULL, false, bed->collect, &bh)))
+    return false;
   eh = (struct elf_link_hash_entry *) bh;
   eh->def_regular = 1;
   eh->type = STT_OBJECT;
@@ -2050,11 +2044,11 @@ elf_metag_create_dynamic_sections (bfd *
 
   if (! bfd_link_executable (info)
       && ! bfd_elf_link_record_dynamic_symbol (info, eh))
-    return FALSE;
+    return false;
 
   htab->etab.hgot = eh;
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase, and
@@ -2062,7 +2056,7 @@ elf_metag_create_dynamic_sections (bfd *
    table, and dynamic reloc sections.  At this point we haven't
    necessarily read all the input files.  */
 
-static bfd_boolean
+static bool
 elf_metag_check_relocs (bfd *abfd,
 			struct bfd_link_info *info,
 			asection *sec,
@@ -2078,7 +2072,7 @@ elf_metag_check_relocs (bfd *abfd,
   int tls_type = GOT_UNKNOWN, old_tls_type = GOT_UNKNOWN;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = metag_link_hash_table (info);
   dynobj = htab->etab.dynobj;
@@ -2087,7 +2081,7 @@ elf_metag_check_relocs (bfd *abfd,
   sreloc = NULL;
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   rel_end = relocs + sec->reloc_count;
   for (rel = relocs; rel < rel_end; rel++)
@@ -2102,10 +2096,10 @@ elf_metag_check_relocs (bfd *abfd,
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* A local symbol.  */
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  isym = bfd_sym_from_r_symndx (&htab->etab.sym_cache,
 					abfd, r_symndx);
 	  if (isym == NULL)
-	    return FALSE;
+	    return false;
 
 	  hh = NULL;
 	}
@@ -2141,7 +2135,7 @@ elf_metag_check_relocs (bfd *abfd,
 	      if (dynobj == NULL)
 		htab->etab.dynobj = dynobj = abfd;
 	      if (!elf_metag_create_dynamic_sections (dynobj, info))
-		return FALSE;
+		return false;
 	      break;
 
 	    default:
@@ -2190,7 +2184,7 @@ elf_metag_check_relocs (bfd *abfd,
 		  local_got_refcounts = ((bfd_signed_vma *)
 					 bfd_zalloc (abfd, size));
 		  if (local_got_refcounts == NULL)
-		    return FALSE;
+		    return false;
 		  elf_local_got_refcounts (abfd) = local_got_refcounts;
 		  memset (metag_elf_local_got_tls_type (abfd),
 			  GOT_UNKNOWN, symtab_hdr->sh_info);
@@ -2257,7 +2251,7 @@ elf_metag_check_relocs (bfd *abfd,
 		(_("%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
 		 abfd, elf_metag_howto_table[r_type].name, name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  /* Fall through.  */
@@ -2314,12 +2308,12 @@ elf_metag_check_relocs (bfd *abfd,
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->etab.dynobj, 2, abfd, /*rela?*/ TRUE);
+		    (sec, htab->etab.dynobj, 2, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
 		    {
 		      bfd_set_error (bfd_error_bad_value);
-		      return FALSE;
+		      return false;
 		    }
 
 		  elf_section_data (sec)->sreloc = sreloc;
@@ -2328,7 +2322,7 @@ elf_metag_check_relocs (bfd *abfd,
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (hh != NULL)
-		hdh_head = &((struct elf_metag_link_hash_entry *) hh)->dyn_relocs;
+		hdh_head = &hh->eh.dyn_relocs;
 	      else
 		{
 		  /* Track dynamic relocs needed for local syms too.  */
@@ -2349,7 +2343,7 @@ elf_metag_check_relocs (bfd *abfd,
 		  hdh_p = ((struct elf_dyn_relocs *)
 			   bfd_alloc (dynobj, sizeof *hdh_p));
 		  if (hdh_p == NULL)
-		    return FALSE;
+		    return false;
 		  hdh_p->next = *hdh_head;
 		  *hdh_head = hdh_p;
 		  hdh_p->sec = sec;
@@ -2368,19 +2362,19 @@ elf_metag_check_relocs (bfd *abfd,
 	case R_METAG_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, &hh->eh,
 					    rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_METAG_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
@@ -2395,41 +2389,6 @@ elf_metag_copy_indirect_symbol (struct b
   hh_dir = metag_elf_hash_entry (eh_dir);
   hh_ind = metag_elf_hash_entry (eh_ind);
 
-  if (hh_ind->dyn_relocs != NULL)
-    {
-      if (hh_dir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **hdh_pp;
-	  struct elf_dyn_relocs *hdh_p;
-
-	  if (eh_ind->root.type == bfd_link_hash_indirect)
-	    abort ();
-
-	  /* Add reloc counts against the weak sym to the strong sym
-	     list.  Merge any entries against the same section.  */
-	  for (hdh_pp = &hh_ind->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *hdh_q;
-
-	      for (hdh_q = hh_dir->dyn_relocs; hdh_q != NULL;
-		   hdh_q = hdh_q->next)
-		if (hdh_q->sec == hdh_p->sec)
-		  {
-		    hdh_q->pc_count += hdh_p->pc_count;
-		    hdh_q->count += hdh_p->count;
-		    *hdh_pp = hdh_p->next;
-		    break;
-		  }
-	      if (hdh_q == NULL)
-		hdh_pp = &hdh_p->next;
-	    }
-	  *hdh_pp = hh_dir->dyn_relocs;
-	}
-
-      hh_dir->dyn_relocs = hh_ind->dyn_relocs;
-      hh_ind->dyn_relocs = NULL;
-    }
-
   if (eh_ind->root.type == bfd_link_hash_indirect
       && eh_dir->got.refcount <= 0)
     {
@@ -2440,30 +2399,13 @@ elf_metag_copy_indirect_symbol (struct b
   _bfd_elf_link_hash_copy_indirect (info, eh_dir, eh_ind);
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = metag_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf_metag_adjust_dynamic_symbol (struct bfd_link_info *info,
 				 struct elf_link_hash_entry *eh)
 {
@@ -2490,7 +2432,7 @@ elf_metag_adjust_dynamic_symbol (struct
 	  eh->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     eh->plt.offset = (bfd_vma) -1;
@@ -2505,7 +2447,7 @@ elf_metag_adjust_dynamic_symbol (struct
       eh->root.u.def.section = def->root.u.def.section;
       eh->root.u.def.value = def->root.u.def.value;
       eh->non_got_ref = def->non_got_ref;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2516,26 +2458,26 @@ elf_metag_adjust_dynamic_symbol (struct
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!eh->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       eh->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (!readonly_dynrelocs (eh))
+  if (!_bfd_elf_readonly_dynrelocs (eh))
     {
       eh->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -2575,16 +2517,15 @@ elf_metag_adjust_dynamic_symbol (struct
 /* Allocate space in .plt, .got and associated reloc sections for
    global syms.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
 {
   struct bfd_link_info *info;
   struct elf_metag_link_hash_table *htab;
-  struct elf_metag_link_hash_entry *hh;
   struct elf_dyn_relocs *hdh_p;
 
   if (eh->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (eh->root.type == bfd_link_hash_warning)
     eh = (struct elf_link_hash_entry *) eh->root.u.i.link;
@@ -2601,7 +2542,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !eh->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, eh))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), eh))
@@ -2652,7 +2593,7 @@ allocate_dynrelocs (struct elf_link_hash
   if (eh->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = metag_elf_hash_entry (eh)->tls_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -2661,7 +2602,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !eh->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, eh))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->etab.sgot;
@@ -2687,9 +2628,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     eh->got.offset = (bfd_vma) -1;
 
-  hh = (struct elf_metag_link_hash_entry *) eh;
-  if (hh->dyn_relocs == NULL)
-    return TRUE;
+  if (eh->dyn_relocs == NULL)
+    return true;
 
   /* If this is a -Bsymbolic shared link, then we need to discard all
      space allocated for dynamic pc-relative relocs against symbols
@@ -2702,7 +2642,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **hdh_pp;
 
-	  for (hdh_pp = &hh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
+	  for (hdh_pp = &eh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
 	    {
 	      hdh_p->count -= hdh_p->pc_count;
 	      hdh_p->pc_count = 0;
@@ -2715,11 +2655,11 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (hh->dyn_relocs != NULL
+      if (eh->dyn_relocs != NULL
 	  && eh->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT)
-	    hh->dyn_relocs = NULL;
+	    eh->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -2727,7 +2667,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !eh->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, eh))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -2749,7 +2689,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !eh->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, eh))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -2758,52 +2698,25 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      hh->dyn_relocs = NULL;
-      return TRUE;
+      eh->dyn_relocs = NULL;
+      return true;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next)
+  for (hdh_p = eh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next)
     {
       asection *sreloc = elf_section_data (hdh_p->sec)->sreloc;
       sreloc->size += hdh_p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_metag_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				 struct bfd_link_info *info)
 {
@@ -2811,7 +2724,7 @@ elf_metag_size_dynamic_sections (bfd *ou
   bfd *dynobj;
   bfd *ibfd;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
 
   htab = metag_link_hash_table (info);
   dynobj = htab->etab.dynobj;
@@ -2917,10 +2830,10 @@ elf_metag_size_dynamic_sections (bfd *ou
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
-      bfd_boolean reloc_section = FALSE;
+      bool reloc_section = false;
 
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
@@ -2934,15 +2847,15 @@ elf_metag_size_dynamic_sections (bfd *ou
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0 && s != htab->etab.srelplt)
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
 	  s->reloc_count = 0;
-	  reloc_section = TRUE;
+	  reloc_section = true;
 	}
       else
 	{
@@ -2971,7 +2884,7 @@ elf_metag_size_dynamic_sections (bfd *ou
       /* Allocate memory for the section contents.  */
       s->contents = bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
       else if (reloc_section)
 	{
 	  unsigned char *contents = s->contents;
@@ -2988,61 +2901,13 @@ elf_metag_size_dynamic_sections (bfd *ou
 	}
     }
 
-  if (htab->etab.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf_metag_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (!add_dynamic_entry (DT_PLTGOT, 0))
-	return FALSE;
-
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->etab.srelplt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->etab, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf_metag_finish_dynamic_symbol (bfd *output_bfd,
 				 struct bfd_link_info *info,
 				 struct elf_link_hash_entry *eh,
@@ -3232,22 +3097,22 @@ elf_metag_finish_dynamic_symbol (bfd *ou
       sym->st_shndx = SHN_ABS;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the Meta ELF ABI version.  */
 
-static bfd_boolean
+static bool
 elf_metag_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
 {
   Elf_Internal_Ehdr * i_ehdrp;	/* ELF file header, internal form.  */
 
   if (!_bfd_elf_init_file_header (abfd, link_info))
-    return FALSE;
+    return false;
 
   i_ehdrp = elf_elfheader (abfd);
   i_ehdrp->e_ident[EI_ABIVERSION] = METAG_ELF_ABI_VERSION;
-  return TRUE;
+  return true;
 }
 
 /* Used to decide how to sort relocs in an optimal manner for the
@@ -3273,7 +3138,7 @@ elf_metag_reloc_type_class (const struct
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_metag_finish_dynamic_sections (bfd *output_bfd,
 				   struct bfd_link_info *info)
 {
@@ -3384,7 +3249,7 @@ elf_metag_finish_dynamic_sections (bfd *
 	->this_hdr.sh_entsize = GOT_ENTRY_SIZE;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -3458,8 +3323,8 @@ metag_type_of_stub (asection *input_sec,
 #define ADD_A0_3_A0_3	0x82180000
 #define MOV_PC_A0_3	0xa3180ca0
 
-static bfd_boolean
-metag_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg ATTRIBUTE_UNUSED)
+static bool
+metag_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 {
   struct elf_metag_stub_hash_entry *hsh;
   asection *stub_sec;
@@ -3467,9 +3332,19 @@ metag_build_one_stub (struct bfd_hash_en
   bfd_byte *loc;
   bfd_vma sym_value;
   int size;
+  struct bfd_link_info *info;
 
   /* Massage our args to the form they really have.  */
   hsh = (struct elf_metag_stub_hash_entry *) gen_entry;
+  info = (struct bfd_link_info *) in_arg;
+
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (hsh->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without --enable-non-contiguous-regions.\n"),
+			    hsh->target_section);
 
   stub_sec = hsh->stub_sec;
 
@@ -3522,17 +3397,17 @@ metag_build_one_stub (struct bfd_hash_en
       break;
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
   stub_sec->size += size;
-  return TRUE;
+  return true;
 }
 
 /* As above, but don't actually build the stub.  Just bump offset so
    we know stub section sizes.  */
 
-static bfd_boolean
+static bool
 metag_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg ATTRIBUTE_UNUSED)
 {
   struct elf_metag_stub_hash_entry *hsh;
@@ -3547,7 +3422,7 @@ metag_size_one_stub (struct bfd_hash_ent
     size = 12;
 
   hsh->stub_sec->size += size;
-  return TRUE;
+  return true;
 }
 
 /* Set up various things so that we can make a list of input sections
@@ -3562,7 +3437,7 @@ elf_metag_setup_section_lists (bfd *outp
   unsigned int top_id, top_index;
   asection *section;
   asection **input_list, **list;
-  bfd_size_type amt;
+  size_t amt;
   struct elf_metag_link_hash_table *htab = metag_link_hash_table (info);
 
   /* Count the number of input BFDs and find the top input section id.  */
@@ -3662,7 +3537,7 @@ elf_metag_next_input_section (struct bfd
 static void
 group_sections (struct elf_metag_link_hash_table *htab,
 		bfd_size_type stub_group_size,
-		bfd_boolean stubs_always_before_branch)
+		bool stubs_always_before_branch)
 {
   asection **list = htab->input_list + htab->top_index;
   do
@@ -3675,7 +3550,7 @@ group_sections (struct elf_metag_link_ha
 	  asection *curr;
 	  asection *prev;
 	  bfd_size_type total;
-	  bfd_boolean big_sec;
+	  bool big_sec;
 
 	  curr = tail;
 	  total = tail->size;
@@ -3741,7 +3616,7 @@ get_local_syms (bfd *output_bfd ATTRIBUT
   /* We want to read in symbol extension records only once.  To do this
      we need to read in the local symbols in parallel and save them for
      later use; so hold pointers to the local symbols in an array.  */
-  bfd_size_type amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count;
+  size_t amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count;
   all_local_syms = bfd_zmalloc (amt);
   htab->all_local_syms = all_local_syms;
   if (all_local_syms == NULL)
@@ -3786,7 +3661,7 @@ instruction.  */
 
 /* See elf32-hppa.c and elf64-ppc.c.  */
 
-bfd_boolean
+bool
 elf_metag_size_stubs(bfd *output_bfd, bfd *stub_bfd,
 		     struct bfd_link_info *info,
 		     bfd_signed_vma group_size,
@@ -3794,8 +3669,8 @@ elf_metag_size_stubs(bfd *output_bfd, bf
 		     void (*layout_sections_again) (void))
 {
   bfd_size_type stub_group_size;
-  bfd_boolean stubs_always_before_branch;
-  bfd_boolean stub_changed;
+  bool stubs_always_before_branch;
+  bool stub_changed;
   struct elf_metag_link_hash_table *htab = metag_link_hash_table (info);
 
   /* Stash our params away.  */
@@ -3828,14 +3703,14 @@ elf_metag_size_stubs(bfd *output_bfd, bf
     default:
       if (htab->all_local_syms)
 	goto error_ret_free_local;
-      return FALSE;
+      return false;
 
     case 0:
-      stub_changed = FALSE;
+      stub_changed = false;
       break;
 
     case 1:
-      stub_changed = TRUE;
+      stub_changed = true;
       break;
     }
 
@@ -4013,7 +3888,7 @@ elf_metag_size_stubs(bfd *output_bfd, bf
 
 		  hsh = metag_stub_hash_lookup (&htab->bstab,
 						stub_name,
-						FALSE, FALSE);
+						false, false);
 		  if (hsh != NULL)
 		    {
 		      /* The proper stub has already been created.  */
@@ -4032,7 +3907,7 @@ elf_metag_size_stubs(bfd *output_bfd, bf
 		  hsh->stub_type = stub_type;
 		  hsh->hh = hh;
 		  hsh->addend = irela->r_addend;
-		  stub_changed = TRUE;
+		  stub_changed = true;
 		}
 
 	      /* We're done with the internal relocs, free them.  */
@@ -4055,22 +3930,22 @@ elf_metag_size_stubs(bfd *output_bfd, bf
 
       /* Ask the linker to do its stuff.  */
       (*htab->layout_sections_again) ();
-      stub_changed = FALSE;
+      stub_changed = false;
     }
 
   free (htab->all_local_syms);
-  return TRUE;
+  return true;
 
  error_ret_free_local:
   free (htab->all_local_syms);
-  return FALSE;
+  return false;
 }
 
 /* Build all the stubs associated with the current output file.  The
    stubs are kept in a hash table attached to the main linker hash
    table.  This function is called via metagelf_finish in the linker.  */
 
-bfd_boolean
+bool
 elf_metag_build_stubs (struct bfd_link_info *info)
 {
   asection *stub_sec;
@@ -4089,7 +3964,7 @@ elf_metag_build_stubs (struct bfd_link_i
       size = stub_sec->size;
       stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
       if (stub_sec->contents == NULL && size != 0)
-	return FALSE;
+	return false;
       stub_sec->size = 0;
     }
 
@@ -4097,12 +3972,12 @@ elf_metag_build_stubs (struct bfd_link_i
   table = &htab->bstab;
   bfd_hash_traverse (table, metag_build_one_stub, info);
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if SYM represents a local label symbol.  */
 
-static bfd_boolean
+static bool
 elf_metag_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
 {
   if (name[0] == '$' && name[1] == 'L')
@@ -4123,8 +3998,7 @@ elf_metag_plt_sym_val (bfd_vma i, const
 #define ELF_ARCH		bfd_arch_metag
 #define ELF_TARGET_ID		METAG_ELF_DATA
 #define ELF_MACHINE_CODE	EM_METAG
-#define ELF_MINPAGESIZE	0x1000
-#define ELF_MAXPAGESIZE	0x4000
+#define ELF_MAXPAGESIZE		0x4000
 #define ELF_COMMONPAGESIZE	0x1000
 
 #define TARGET_LITTLE_SYM	metag_elf32_vec
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-metag.h ./bfd/elf32-metag.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-metag.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-metag.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Meta support for 32-bit ELF
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2024 Free Software Foundation, Inc.
    Contributed by Imagination Technologies Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -28,11 +28,11 @@ extern int elf_metag_setup_section_lists
 extern void elf_metag_next_input_section
   (struct bfd_link_info *, asection *);
 
-extern bfd_boolean elf_metag_size_stubs
+extern bool elf_metag_size_stubs
   (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
    asection * (*) (const char *, asection *), void (*) (void));
 
-extern bfd_boolean elf_metag_build_stubs
+extern bool elf_metag_build_stubs
   (struct bfd_link_info *);
 
 #endif  /* _ELF32_METAG_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-microblaze.c ./bfd/elf32-microblaze.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-microblaze.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-microblaze.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 /* Xilinx MicroBlaze-specific support for 32-bit ELF
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -20,8 +20,6 @@
    Boston, MA 02110-1301, USA.  */
 
 
-int dbg = 0;
-
 #include "sysdep.h"
 #include "bfd.h"
 #include "bfdlink.h"
@@ -44,487 +42,502 @@ static reloc_howto_type microblaze_elf_h
    /* This reloc does nothing.  */
    HOWTO (R_MICROBLAZE_NONE,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  3,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  0,			/* Size.  */
 	  0,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont,  /* Complain on overflow.  */
 	  NULL,			 /* Special Function.  */
 	  "R_MICROBLAZE_NONE",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0,			/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* A standard 32 bit relocation.  */
    HOWTO (R_MICROBLAZE_32,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  32,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_bitfield, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_32",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0xffffffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* A standard PCREL 32 bit relocation.  */
    HOWTO (R_MICROBLAZE_32_PCREL,/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  32,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_bitfield, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_32_PCREL",	/* Name.  */
-	  TRUE,			/* Partial Inplace.  */
+	  true,			/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0xffffffff,		/* Dest Mask.  */
-	  TRUE),		/* PC relative offset?  */
+	  true),		/* PC relative offset?  */
 
    /* A 64 bit PCREL relocation.  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_64_PCREL,/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_64_PCREL",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  TRUE),		/* PC relative offset?  */
+	  true),		/* PC relative offset?  */
 
    /* The low half of a PCREL 32 bit relocation.  */
    HOWTO (R_MICROBLAZE_32_PCREL_LO,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_signed, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,	/* Special Function.  */
 	  "R_MICROBLAZE_32_PCREL_LO",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  TRUE),		/* PC relative offset?  */
+	  true),		/* PC relative offset?  */
 
    /* A 64 bit relocation.  Table entry not really used.  */
    HOWTO (R_MICROBLAZE_64,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_64",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* The low half of a 32 bit relocation.  */
    HOWTO (R_MICROBLAZE_32_LO,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_signed, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_32_LO", /* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* Read-only small data section relocation.  */
    HOWTO (R_MICROBLAZE_SRO32,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_bitfield, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_SRO32", /* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* Read-write small data area relocation.  */
    HOWTO (R_MICROBLAZE_SRW32,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_bitfield, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_SRW32", /* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
+
+   /* This reloc does nothing.	Used for relaxation.  */
+   HOWTO (R_MICROBLAZE_32_NONE,	/* Type.  */
+	0,			/* Rightshift.  */
+	2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	32,			/* Bitsize.  */
+	true,			/* PC_relative.  */
+	0,			/* Bitpos.  */
+	complain_overflow_bitfield, /* Complain on overflow.  */
+	NULL,			/* Special Function.  */
+	"R_MICROBLAZE_32_NONE", /* Name.  */
+	false,			/* Partial Inplace.  */
+	0,			/* Source Mask.  */
+	0,			/* Dest Mask.  */
+	false),		/* PC relative offset?  */
 
    /* This reloc does nothing.	Used for relaxation.  */
    HOWTO (R_MICROBLAZE_64_NONE,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  3,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  0,			/* Size.  */
 	  0,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  NULL,			 /* Special Function.  */
 	  "R_MICROBLAZE_64_NONE",/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0,			/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* Symbol Op Symbol relocation.  */
    HOWTO (R_MICROBLAZE_32_SYM_OP_SYM,		/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  32,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_bitfield, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_32_SYM_OP_SYM",		/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0xffffffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* GNU extension to record C++ vtable hierarchy.  */
    HOWTO (R_MICROBLAZE_GNU_VTINHERIT, /* Type.  */
 	  0,			 /* Rightshift.  */
-	  2,			 /* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			 /* Size.  */
 	  0,			 /* Bitsize.  */
-	  FALSE,		 /* PC_relative.  */
+	  false,		 /* PC_relative.  */
 	  0,			 /* Bitpos.  */
 	  complain_overflow_dont,/* Complain on overflow.  */
 	  NULL,			 /* Special Function.  */
 	  "R_MICROBLAZE_GNU_VTINHERIT", /* Name.  */
-	  FALSE,		 /* Partial Inplace.  */
+	  false,		 /* Partial Inplace.  */
 	  0,			 /* Source Mask.  */
 	  0,			 /* Dest Mask.  */
-	  FALSE),		 /* PC relative offset?  */
+	  false),		 /* PC relative offset?  */
 
    /* GNU extension to record C++ vtable member usage.  */
    HOWTO (R_MICROBLAZE_GNU_VTENTRY,   /* Type.  */
 	  0,			 /* Rightshift.  */
-	  2,			 /* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			 /* Size.  */
 	  0,			 /* Bitsize.  */
-	  FALSE,		 /* PC_relative.  */
+	  false,		 /* PC_relative.  */
 	  0,			 /* Bitpos.  */
 	  complain_overflow_dont,/* Complain on overflow.  */
 	  _bfd_elf_rel_vtable_reloc_fn,	 /* Special Function.  */
 	  "R_MICROBLAZE_GNU_VTENTRY", /* Name.  */
-	  FALSE,		 /* Partial Inplace.  */
+	  false,		 /* Partial Inplace.  */
 	  0,			 /* Source Mask.  */
 	  0,			 /* Dest Mask.  */
-	  FALSE),		 /* PC relative offset?  */
+	  false),		 /* PC relative offset?  */
 
    /* A 64 bit GOTPC relocation.  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_GOTPC_64,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,	/* Special Function.  */
 	  "R_MICROBLAZE_GOTPC_64",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  TRUE),		/* PC relative offset?  */
+	  true),		/* PC relative offset?  */
 
      /* A 64 bit TEXTPCREL relocation.  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_TEXTPCREL_64,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,	/* Special Function.  */
 	  "R_MICROBLAZE_TEXTPCREL_64",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  TRUE),		/* PC relative offset?  */
+	  true),		/* PC relative offset?  */
 
    /* A 64 bit GOT relocation.  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_GOT_64,  /* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_GOT_64",/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
     /* A 64 bit TEXTREL relocation.  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_TEXTREL_64,  /* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_TEXTREL_64",/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* A 64 bit PLT relocation.  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_PLT_64,  /* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_PLT_64",/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  TRUE),		/* PC relative offset?  */
+	  true),		/* PC relative offset?  */
 
    /*  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_REL,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_REL",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  TRUE),		/* PC relative offset?  */
+	  true),		/* PC relative offset?  */
 
    /*  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_JUMP_SLOT,/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_JUMP_SLOT",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  TRUE),		/* PC relative offset?  */
+	  true),		/* PC relative offset?  */
 
    /*  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_GLOB_DAT,/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  TRUE,			/* PC_relative.  */
+	  true,			/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_GLOB_DAT",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  TRUE),		/* PC relative offset?  */
+	  true),		/* PC relative offset?  */
 
    /* A 64 bit GOT relative relocation.  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_GOTOFF_64,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_GOTOFF_64",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* A 32 bit GOT relative relocation.  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_GOTOFF_32,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,	/* Special Function.  */
 	  "R_MICROBLAZE_GOTOFF_32",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* COPY relocation.  Table-entry not really used.  */
    HOWTO (R_MICROBLAZE_COPY,	/* Type.  */
 	  0,			/* Rightshift.  */
-	  2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	  4,			/* Size.  */
 	  16,			/* Bitsize.  */
-	  FALSE,		/* PC_relative.  */
+	  false,		/* PC_relative.  */
 	  0,			/* Bitpos.  */
 	  complain_overflow_dont, /* Complain on overflow.  */
 	  bfd_elf_generic_reloc,/* Special Function.  */
 	  "R_MICROBLAZE_COPY",	/* Name.  */
-	  FALSE,		/* Partial Inplace.  */
+	  false,		/* Partial Inplace.  */
 	  0,			/* Source Mask.  */
 	  0x0000ffff,		/* Dest Mask.  */
-	  FALSE),		/* PC relative offset?  */
+	  false),		/* PC relative offset?  */
 
    /* Marker relocs for TLS.  */
    HOWTO (R_MICROBLAZE_TLS,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MICROBLAZE_TLS",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
    HOWTO (R_MICROBLAZE_TLSGD,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_MICROBLAZE_TLSGD",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
    HOWTO (R_MICROBLAZE_TLSLD,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_MICROBLAZE_TLSLD",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
    /* Computes the load module index of the load module that contains the
       definition of its TLS sym.  */
    HOWTO (R_MICROBLAZE_TLSDTPMOD32,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_MICROBLAZE_TLSDTPMOD32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
    /* Computes a dtv-relative displacement, the difference between the value
       of sym+add and the base address of the thread-local storage block that
       contains the definition of sym, minus 0x8000.  Used for initializing GOT */
    HOWTO (R_MICROBLAZE_TLSDTPREL32,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_MICROBLAZE_TLSDTPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
    /* Computes a dtv-relative displacement, the difference between the value
       of sym+add and the base address of the thread-local storage block that
       contains the definition of sym, minus 0x8000.  */
    HOWTO (R_MICROBLAZE_TLSDTPREL64,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_MICROBLAZE_TLSDTPREL64",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
    /* Computes a tp-relative displacement, the difference between the value of
       sym+add and the value of the thread pointer (r13).  */
    HOWTO (R_MICROBLAZE_TLSGOTTPREL32,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_MICROBLAZE_TLSGOTTPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
    /* Computes a tp-relative displacement, the difference between the value of
       sym+add and the value of the thread pointer (r13).  */
    HOWTO (R_MICROBLAZE_TLSTPREL32,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_MICROBLAZE_TLSTPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 };
 
@@ -562,6 +575,9 @@ microblaze_elf_reloc_type_lookup (bfd *
     case BFD_RELOC_NONE:
       microblaze_reloc = R_MICROBLAZE_NONE;
       break;
+    case BFD_RELOC_MICROBLAZE_32_NONE:
+      microblaze_reloc = R_MICROBLAZE_32_NONE;
+      break;
     case BFD_RELOC_MICROBLAZE_64_NONE:
       microblaze_reloc = R_MICROBLAZE_64_NONE;
       break;
@@ -674,7 +690,7 @@ microblaze_elf_reloc_name_lookup (bfd *a
 
 /* Set the howto pointer for a RCE ELF reloc.  */
 
-static bfd_boolean
+static bool
 microblaze_elf_info_to_howto (bfd * abfd,
 			      arelent * cache_ptr,
 			      Elf_Internal_Rela * dst)
@@ -692,23 +708,64 @@ microblaze_elf_info_to_howto (bfd * abfd
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = microblaze_elf_howto_table [r_type];
-  return TRUE;
+  return true;
+}
+
+/* Relax table contains information about instructions which can
+   be removed by relaxation -- replacing a long address with a
+   short address.  */
+struct relax_table
+{
+  /* Address where bytes may be deleted.  */
+  bfd_vma addr;
+
+  /* Number of bytes to be deleted.  */
+  size_t size;
+};
+
+struct _microblaze_elf_section_data
+{
+  struct bfd_elf_section_data elf;
+  /* Count of used relaxation table entries.  */
+  size_t relax_count;
+  /* Relaxation table.  */
+  struct relax_table *relax;
+};
+
+#define microblaze_elf_section_data(sec) \
+  ((struct _microblaze_elf_section_data *) elf_section_data (sec))
+
+static bool
+microblaze_elf_new_section_hook (bfd *abfd, asection *sec)
+{
+  if (!sec->used_by_bfd)
+    {
+      struct _microblaze_elf_section_data *sdata;
+      size_t amt = sizeof (*sdata);
+
+      sdata = bfd_zalloc (abfd, amt);
+      if (sdata == NULL)
+	return false;
+      sec->used_by_bfd = sdata;
+    }
+
+  return _bfd_elf_new_section_hook (abfd, sec);
 }
 
 /* Microblaze ELF local labels start with 'L.' or '$L', not '.L'.  */
 
-static bfd_boolean
+static bool
 microblaze_elf_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == 'L' && name[1] == '.')
-    return TRUE;
+    return true;
 
   if (name[0] == '$' && name[1] == 'L')
-    return TRUE;
+    return true;
 
   /* With gcc, the labels go back to starting with '.', so we accept
      the generic ELF local label syntax as well.  */
@@ -721,9 +778,6 @@ struct elf32_mb_link_hash_entry
 {
   struct elf_link_hash_entry elf;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   /* TLS Reference Types for the symbol; Updated by check_relocs */
 #define TLS_GD     1  /* GD reloc. */
 #define TLS_LD     2  /* LD reloc. */
@@ -747,9 +801,6 @@ struct elf32_mb_link_hash_table
 {
   struct elf_link_hash_table elf;
 
-  /* Small local sym to section mapping cache.  */
-  struct sym_cache sym_sec;
-
   /* TLS Local Dynamic GOT Entry */
   union {
     bfd_signed_vma refcount;
@@ -762,9 +813,10 @@ struct elf32_mb_link_hash_table
 
 /* Get the ELF linker hash table from a link_info structure.  */
 
-#define elf32_mb_hash_table(p)				\
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == MICROBLAZE_ELF_DATA ? ((struct elf32_mb_link_hash_table *) ((p)->hash)) : NULL)
+#define elf32_mb_hash_table(p) \
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == MICROBLAZE_ELF_DATA)	\
+   ? (struct elf32_mb_link_hash_table *) (p)->hash : NULL)
 
 /* Create an entry in a microblaze ELF linker hash table.  */
 
@@ -790,7 +842,6 @@ link_hash_newfunc (struct bfd_hash_entry
       struct elf32_mb_link_hash_entry *eh;
 
       eh = (struct elf32_mb_link_hash_entry *) entry;
-      eh->dyn_relocs = NULL;
       eh->tls_mask = 0;
     }
 
@@ -803,7 +854,7 @@ static struct bfd_link_hash_table *
 microblaze_elf_link_hash_table_create (bfd *abfd)
 {
   struct elf32_mb_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf32_mb_link_hash_table);
+  size_t amt = sizeof (struct elf32_mb_link_hash_table);
 
   ret = (struct elf32_mb_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -827,14 +878,14 @@ microblaze_elf_final_sdp (struct bfd_lin
 {
   struct bfd_link_hash_entry *h;
 
-  h = bfd_link_hash_lookup (info->hash, RO_SDA_ANCHOR_NAME, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, RO_SDA_ANCHOR_NAME, false, false, true);
   if (h != (struct bfd_link_hash_entry *) NULL
       && h->type == bfd_link_hash_defined)
     ro_small_data_pointer = (h->u.def.value
 			     + h->u.def.section->output_section->vma
 			     + h->u.def.section->output_offset);
 
-  h = bfd_link_hash_lookup (info->hash, RW_SDA_ANCHOR_NAME, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, RW_SDA_ANCHOR_NAME, false, false, true);
   if (h != (struct bfd_link_hash_entry *) NULL
       && h->type == bfd_link_hash_defined)
     rw_small_data_pointer = (h->u.def.value
@@ -910,7 +961,7 @@ microblaze_elf_output_dynamic_relocation
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 microblaze_elf_relocate_section (bfd *output_bfd,
 				 struct bfd_link_info *info,
 				 bfd *input_bfd,
@@ -926,7 +977,7 @@ microblaze_elf_relocate_section (bfd *ou
   Elf_Internal_Rela *rel, *relend;
   int endian = (bfd_little_endian (output_bfd)) ? 0 : 2;
   /* Assume success.  */
-  bfd_boolean ret = TRUE;
+  bool ret = true;
   asection *sreloc;
   bfd_vma *local_got_offsets;
   unsigned int tls_type;
@@ -936,7 +987,7 @@ microblaze_elf_relocate_section (bfd *ou
 
   htab = elf32_mb_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   local_got_offsets = elf_local_got_offsets (input_bfd);
 
@@ -957,7 +1008,7 @@ microblaze_elf_relocate_section (bfd *ou
       const char *sym_name;
       bfd_reloc_status_type r = bfd_reloc_ok;
       const char *errmsg = NULL;
-      bfd_boolean unresolved_reloc = FALSE;
+      bool unresolved_reloc = false;
 
       h = NULL;
       r_type = ELF32_R_TYPE (rel->r_info);
@@ -969,7 +1020,7 @@ microblaze_elf_relocate_section (bfd *ou
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      input_bfd, (int) r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	  continue;
 	}
 
@@ -1019,12 +1070,12 @@ microblaze_elf_relocate_section (bfd *ou
       else
 	{
 	  bfd_vma relocation;
-	  bfd_boolean resolved_to_zero;
+	  bool resolved_to_zero;
 
 	  /* This is a final link.  */
 	  sym = NULL;
 	  sec = NULL;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 
 	  if (r_symndx < symtab_hdr->sh_info)
 	    {
@@ -1042,8 +1093,8 @@ microblaze_elf_relocate_section (bfd *ou
 	  else
 	    {
 	      /* External symbol.  */
-	      bfd_boolean warned ATTRIBUTE_UNUSED;
-	      bfd_boolean ignored ATTRIBUTE_UNUSED;
+	      bool warned ATTRIBUTE_UNUSED;
+	      bool ignored ATTRIBUTE_UNUSED;
 
 	      RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				       r_symndx, symtab_hdr, sym_hashes,
@@ -1080,7 +1131,7 @@ microblaze_elf_relocate_section (bfd *ou
 			  microblaze_elf_final_sdp (info);
 			if (ro_small_data_pointer == 0)
 			  {
-			    ret = FALSE;
+			    ret = false;
 			    r = bfd_reloc_undefined;
 			    goto check_reloc;
 			  }
@@ -1105,7 +1156,7 @@ microblaze_elf_relocate_section (bfd *ou
 			   microblaze_elf_howto_table[(int) r_type]->name,
 			   sec);
 			/*bfd_set_error (bfd_error_bad_value); ??? why? */
-			ret = FALSE;
+			ret = false;
 			continue;
 		      }
 		  }
@@ -1128,7 +1179,7 @@ microblaze_elf_relocate_section (bfd *ou
 			  microblaze_elf_final_sdp (info);
 			if (rw_small_data_pointer == 0)
 			  {
-			    ret = FALSE;
+			    ret = false;
 			    r = bfd_reloc_undefined;
 			    goto check_reloc;
 			  }
@@ -1153,7 +1204,7 @@ microblaze_elf_relocate_section (bfd *ou
 			   microblaze_elf_howto_table[(int) r_type]->name,
 			   sec);
 			/*bfd_set_error (bfd_error_bad_value); ??? why? */
-			ret = FALSE;
+			ret = false;
 			continue;
 		      }
 		  }
@@ -1197,7 +1248,7 @@ microblaze_elf_relocate_section (bfd *ou
 		    relocation = (htab->elf.splt->output_section->vma
 				  + htab->elf.splt->output_offset
 				  + h->plt.offset);
-		    unresolved_reloc = FALSE;
+		    unresolved_reloc = false;
 		    immediate = relocation - (input_section->output_section->vma
 					      + input_section->output_offset
 					      + offset + INST_WORD_SIZE);
@@ -1234,7 +1285,7 @@ microblaze_elf_relocate_section (bfd *ou
 		unsigned long indx;
 		bfd_vma static_value;
 
-		bfd_boolean need_relocs = FALSE;
+		bool need_relocs = false;
 		if (htab->elf.sgot == NULL)
 		  abort ();
 
@@ -1276,7 +1327,7 @@ microblaze_elf_relocate_section (bfd *ou
 		/* Symbol index to use for relocs */
 		if (h != NULL)
 		  {
-		    bfd_boolean dyn =
+		    bool dyn =
 			elf_hash_table (info)->dynamic_sections_created;
 
 		    if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
@@ -1290,10 +1341,10 @@ microblaze_elf_relocate_section (bfd *ou
 		/* Need to generate relocs ? */
 		if ((bfd_link_pic (info) || indx != 0)
 		    && (h == NULL
-		    || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-			&& !resolved_to_zero)
-		    || h->root.type != bfd_link_hash_undefweak))
-		  need_relocs = TRUE;
+			|| (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+			    && !resolved_to_zero)
+			|| h->root.type != bfd_link_hash_undefweak))
+		  need_relocs = true;
 
 		/* 2. Compute/Emit Static value of r-expression */
 		static_value = relocation + addend;
@@ -1399,7 +1450,7 @@ microblaze_elf_relocate_section (bfd *ou
 		bfd_put_16 (input_bfd, relocation & 0xffff,
 			    contents + offset + endian + INST_WORD_SIZE);
 
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 		break;
 	      }
 
@@ -1434,9 +1485,9 @@ microblaze_elf_relocate_section (bfd *ou
 	      relocation += addend;
 	      relocation -= dtprel_base(info);
 	      bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff,
-			  contents + offset + 2);
+			  contents + offset + endian);
 	      bfd_put_16 (input_bfd, relocation & 0xffff,
-			  contents + offset + 2 + INST_WORD_SIZE);
+			  contents + offset + endian + INST_WORD_SIZE);
 	      break;
 	    case (int) R_MICROBLAZE_TEXTREL_64:
 	    case (int) R_MICROBLAZE_TEXTREL_32_LO:
@@ -1498,7 +1549,7 @@ microblaze_elf_relocate_section (bfd *ou
 		  {
 		    Elf_Internal_Rela outrel;
 		    bfd_byte *loc;
-		    bfd_boolean skip;
+		    bool skip;
 
 		    /* When generating a shared object, these relocations
 		       are copied into the output file to be resolved at run
@@ -1506,15 +1557,15 @@ microblaze_elf_relocate_section (bfd *ou
 
 		    BFD_ASSERT (sreloc != NULL);
 
-		    skip = FALSE;
+		    skip = false;
 
 		    outrel.r_offset =
 		      _bfd_elf_section_offset (output_bfd, info, input_section,
 					       rel->r_offset);
 		    if (outrel.r_offset == (bfd_vma) -1)
-		      skip = TRUE;
+		      skip = true;
 		    else if (outrel.r_offset == (bfd_vma) -2)
-		      skip = TRUE;
+		      skip = true;
 		    outrel.r_offset += (input_section->output_section->vma
 					+ input_section->output_offset);
 
@@ -1544,7 +1595,7 @@ microblaze_elf_relocate_section (bfd *ou
 			      (_("%pB: probably compiled without -fPIC?"),
 			       input_bfd);
 			    bfd_set_error (bfd_error_bad_value);
-			    return FALSE;
+			    return false;
 			  }
 		      }
 
@@ -1624,7 +1675,7 @@ microblaze_elf_relocate_section (bfd *ou
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, offset, TRUE);
+		(info, name, input_bfd, input_section, offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -1655,23 +1706,24 @@ microblaze_elf_relocate_section (bfd *ou
 
 /* Calculate fixup value for reference.  */
 
-static int
+static size_t
 calc_fixup (bfd_vma start, bfd_vma size, asection *sec)
 {
   bfd_vma end = start + size;
-  int i, fixup = 0;
+  size_t i, fixup = 0;
+  struct _microblaze_elf_section_data *sdata;
 
-  if (sec == NULL || sec->relax == NULL)
+  if (sec == NULL || (sdata = microblaze_elf_section_data (sec)) == NULL)
     return 0;
 
   /* Look for addr in relax table, total fixup value.  */
-  for (i = 0; i < sec->relax_count; i++)
+  for (i = 0; i < sdata->relax_count; i++)
     {
-      if (end <= sec->relax[i].addr)
+      if (end <= sdata->relax[i].addr)
 	break;
-      if ((end != start) && (start > sec->relax[i].addr))
+      if (end != start && start > sdata->relax[i].addr)
 	continue;
-      fixup += sec->relax[i].size;
+      fixup += sdata->relax[i].size;
     }
   return fixup;
 }
@@ -1706,11 +1758,11 @@ microblaze_bfd_write_imm_value_64 (bfd *
     bfd_put_32 (abfd, instr_lo, bfd_addr + INST_WORD_SIZE);
 }
 
-static bfd_boolean
+static bool
 microblaze_elf_relax_section (bfd *abfd,
 			      asection *sec,
 			      struct bfd_link_info *link_info,
-			      bfd_boolean *again)
+			      bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -1720,25 +1772,27 @@ microblaze_elf_relax_section (bfd *abfd,
   bfd_byte *free_contents = NULL;
   int rel_count;
   unsigned int shndx;
-  int i, sym_index;
+  size_t i, sym_index;
   asection *o;
   struct elf_link_hash_entry *sym_hash;
   Elf_Internal_Sym *isymbuf, *isymend;
   Elf_Internal_Sym *isym;
-  int symcount;
-  int offset;
+  size_t symcount;
+  size_t offset;
   bfd_vma src, dest;
+  struct _microblaze_elf_section_data *sdata;
 
   /* We only do this once per section.  We may be able to delete some code
      by running multiple passes, but it is not worth it.  */
-  *again = FALSE;
+  *again = false;
 
   /* Only do this for a text section.  */
   if (bfd_link_relocatable (link_info)
       || (sec->flags & SEC_RELOC) == 0
-      || (sec->reloc_count == 0)
-      || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+      || (sec->flags & SEC_CODE) == 0
+      || sec->reloc_count == 0
+      || (sdata = microblaze_elf_section_data (sec)) == NULL)
+    return true;
 
   BFD_ASSERT ((sec->size > 0) || (sec->rawsize > 0));
 
@@ -1762,11 +1816,11 @@ microblaze_elf_relax_section (bfd *abfd,
   if (! link_info->keep_memory)
     free_relocs = internal_relocs;
 
-  sec->relax = (struct relax_table *) bfd_malloc ((sec->reloc_count + 1)
-						  * sizeof (struct relax_table));
-  if (sec->relax == NULL)
+  sdata->relax_count = 0;
+  sdata->relax = (struct relax_table *) bfd_malloc ((sec->reloc_count + 1)
+						    * sizeof (*sdata->relax));
+  if (sdata->relax == NULL)
     goto error_return;
-  sec->relax_count = 0;
 
   irelend = internal_relocs + sec->reloc_count;
   rel_count = 0;
@@ -1856,9 +1910,9 @@ microblaze_elf_relax_section (bfd *abfd,
 	  || (symval & 0xffff8000) == 0xffff8000)
 	{
 	  /* We can delete this instruction.  */
-	  sec->relax[sec->relax_count].addr = irel->r_offset;
-	  sec->relax[sec->relax_count].size = INST_WORD_SIZE;
-	  sec->relax_count++;
+	  sdata->relax[sdata->relax_count].addr = irel->r_offset;
+	  sdata->relax[sdata->relax_count].size = INST_WORD_SIZE;
+	  sdata->relax_count++;
 
 	  /* Rewrite relocation type.  */
 	  switch ((enum elf_microblaze_reloc_type) ELF32_R_TYPE (irel->r_info))
@@ -1877,17 +1931,17 @@ microblaze_elf_relax_section (bfd *abfd,
 	      break;
 	    default:
 	      /* Cannot happen.  */
-	      BFD_ASSERT (FALSE);
+	      BFD_ASSERT (false);
 	    }
 	}
     } /* Loop through all relocations.  */
 
   /* Loop through the relocs again, and see if anything needs to change.  */
-  if (sec->relax_count > 0)
+  if (sdata->relax_count > 0)
     {
       shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
       rel_count = 0;
-      sec->relax[sec->relax_count].addr = sec->size;
+      sdata->relax[sdata->relax_count].addr = sec->size;
 
       for (irel = internal_relocs; irel < irelend; irel++, rel_count++)
 	{
@@ -1918,10 +1972,11 @@ microblaze_elf_relax_section (bfd *abfd,
 		}
 	      break;
 	    case R_MICROBLAZE_NONE:
+	    case R_MICROBLAZE_32_NONE:
 	      {
 		/* This was a PC-relative instruction that was
 		   completely resolved.  */
-		int sfix, efix;
+		size_t sfix, efix;
 		bfd_vma target_address;
 		target_address = irel->r_addend + irel->r_offset;
 		sfix = calc_fixup (irel->r_offset, 0, sec);
@@ -1936,7 +1991,7 @@ microblaze_elf_relax_section (bfd *abfd,
 	      {
 		/* This was a PC-relative 64-bit instruction that was
 		   completely resolved.  */
-		int sfix, efix;
+		size_t sfix, efix;
 		bfd_vma target_address;
 		target_address = irel->r_addend + irel->r_offset + INST_WORD_SIZE;
 		sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, 0, sec);
@@ -1965,7 +2020,7 @@ microblaze_elf_relax_section (bfd *abfd,
 	  /* We always cache the relocs.  Perhaps, if info->keep_memory is
 	     FALSE, we should free them, if we are permitted to.  */
 
-	  irelocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, TRUE);
+	  irelocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, true);
 	  if (irelocs == NULL)
 	    goto error_return;
 
@@ -1973,7 +2028,8 @@ microblaze_elf_relax_section (bfd *abfd,
 	  irelscanend = irelocs + o->reloc_count;
 	  for (irelscan = irelocs; irelscan < irelscanend; irelscan++)
 	    {
-	      if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32)
+	      if ((ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32)
+		  || (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_NONE))
 		{
 		  isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
 
@@ -2032,7 +2088,7 @@ microblaze_elf_relax_section (bfd *abfd,
 			      elf_section_data (o)->this_hdr.contents = ocontents;
 			    }
 			}
-		      irelscan->r_addend -= calc_fixup (irel->r_addend
+		      irelscan->r_addend -= calc_fixup (irelscan->r_addend
 							+ isym->st_value,
 							0,
 							sec);
@@ -2040,9 +2096,9 @@ microblaze_elf_relax_section (bfd *abfd,
 		}
 	      else if ((ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_PCREL_LO)
 		       || (ELF32_R_TYPE (irelscan->r_info)
-				   == (int) R_MICROBLAZE_32_LO)
+			   == (int) R_MICROBLAZE_32_LO)
 		       || (ELF32_R_TYPE (irelscan->r_info)
-				   == (int) R_MICROBLAZE_TEXTREL_32_LO))
+			   == (int) R_MICROBLAZE_TEXTREL_32_LO))
 		{
 		  isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
 
@@ -2096,8 +2152,6 @@ microblaze_elf_relax_section (bfd *abfd,
 		  if (isym->st_shndx == shndx
 		      && (ELF32_ST_TYPE (isym->st_info) == STT_SECTION))
 		    {
-		      bfd_vma immediate;
-
 		      if (ocontents == NULL)
 			{
 			  if (elf_section_data (o)->this_hdr.contents != NULL)
@@ -2120,15 +2174,7 @@ microblaze_elf_relax_section (bfd *abfd,
 			      elf_section_data (o)->this_hdr.contents = ocontents;
 			    }
 			}
-	  unsigned long instr_hi =  bfd_get_32 (abfd, ocontents
-						+ irelscan->r_offset);
-	  unsigned long instr_lo =  bfd_get_32 (abfd, ocontents
-						+ irelscan->r_offset
-						+ INST_WORD_SIZE);
-	  immediate = (instr_hi & 0x0000ffff) << 16;
-	  immediate |= (instr_lo & 0x0000ffff);
 		      offset = calc_fixup (irelscan->r_addend, 0, sec);
-		      immediate -= offset;
 		      irelscan->r_addend -= offset;
 		    }
 		}
@@ -2213,15 +2259,16 @@ microblaze_elf_relax_section (bfd *abfd,
 	}
 
       /* Physically move the code and change the cooked size.  */
-      dest = sec->relax[0].addr;
-      for (i = 0; i < sec->relax_count; i++)
+      dest = sdata->relax[0].addr;
+      for (i = 0; i < sdata->relax_count; i++)
 	{
-	  int len;
-	  src = sec->relax[i].addr + sec->relax[i].size;
-	  len = sec->relax[i+1].addr - sec->relax[i].addr - sec->relax[i].size;
+	  size_t len;
+	  src = sdata->relax[i].addr + sdata->relax[i].size;
+	  len = (sdata->relax[i+1].addr - sdata->relax[i].addr
+		 - sdata->relax[i].size);
 
 	  memmove (contents + dest, contents + src, len);
-	  sec->size -= sec->relax[i].size;
+	  sec->size -= sdata->relax[i].size;
 	  dest += len;
 	}
 
@@ -2234,11 +2281,8 @@ microblaze_elf_relax_section (bfd *abfd,
       symtab_hdr->contents = (bfd_byte *) isymbuf;
     }
 
-  if (free_relocs != NULL)
-    {
-      free (free_relocs);
-      free_relocs = NULL;
-    }
+  free (free_relocs);
+  free_relocs = NULL;
 
   if (free_contents != NULL)
     {
@@ -2250,28 +2294,23 @@ microblaze_elf_relax_section (bfd *abfd,
       free_contents = NULL;
     }
 
-  if (sec->relax_count == 0)
+  if (sdata->relax_count == 0)
     {
-      *again = FALSE;
-      free (sec->relax);
-      sec->relax = NULL;
+      *again = false;
+      free (sdata->relax);
+      sdata->relax = NULL;
     }
   else
-    *again = TRUE;
-  return TRUE;
+    *again = true;
+  return true;
 
  error_return:
-  if (free_relocs != NULL)
-    free (free_relocs);
-  if (free_contents != NULL)
-    free (free_contents);
-  if (sec->relax != NULL)
-    {
-      free (sec->relax);
-      sec->relax = NULL;
-      sec->relax_count = 0;
-    }
-  return FALSE;
+  free (free_relocs);
+  free (free_contents);
+  free (sdata->relax);
+  sdata->relax = NULL;
+  sdata->relax_count = 0;
+  return false;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -2305,7 +2344,7 @@ microblaze_elf_gc_mark_hook (asection *s
 #define PLT_ENTRY_WORD_2  0x98186000	      /* "brad r12".  */
 #define PLT_ENTRY_WORD_3  0x80000000	      /* "nop".  */
 
-static bfd_boolean
+static bool
 update_local_sym_info (bfd *abfd,
 		       Elf_Internal_Shdr *symtab_hdr,
 		       unsigned long r_symndx,
@@ -2321,7 +2360,7 @@ update_local_sym_info (bfd *abfd,
       size *= (sizeof (*local_got_refcounts) + sizeof (*local_got_tls_masks));
       local_got_refcounts = bfd_zalloc (abfd, size);
       if (local_got_refcounts == NULL)
-	return FALSE;
+	return false;
       elf_local_got_refcounts (abfd) = local_got_refcounts;
     }
 
@@ -2330,11 +2369,11 @@ update_local_sym_info (bfd *abfd,
   local_got_tls_masks[r_symndx] |= tls_type;
   local_got_refcounts[r_symndx] += 1;
 
-  return TRUE;
+  return true;
 }
 /* Look through the relocs for a section during the first phase.  */
 
-static bfd_boolean
+static bool
 microblaze_elf_check_relocs (bfd * abfd,
 			     struct bfd_link_info * info,
 			     asection * sec,
@@ -2342,24 +2381,20 @@ microblaze_elf_check_relocs (bfd * abfd,
 {
   Elf_Internal_Shdr *		symtab_hdr;
   struct elf_link_hash_entry ** sym_hashes;
-  struct elf_link_hash_entry ** sym_hashes_end;
   const Elf_Internal_Rela *	rel;
   const Elf_Internal_Rela *	rel_end;
   struct elf32_mb_link_hash_table *htab;
   asection *sreloc = NULL;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = elf32_mb_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
-  sym_hashes_end = sym_hashes + symtab_hdr->sh_size / sizeof (Elf32_External_Sym);
-  if (!elf_bad_symtab (abfd))
-    sym_hashes_end -= symtab_hdr->sh_info;
 
   rel_end = relocs + sec->reloc_count;
 
@@ -2389,14 +2424,14 @@ microblaze_elf_check_relocs (bfd * abfd,
 	     Reconstruct it for later use during GC.  */
 	case R_MICROBLAZE_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_MICROBLAZE_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation requires .plt entry.  */
@@ -2424,7 +2459,7 @@ microblaze_elf_check_relocs (bfd * abfd,
 	      if (htab->elf.dynobj == NULL)
 		htab->elf.dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	  if (h != NULL)
 	    {
@@ -2434,7 +2469,7 @@ microblaze_elf_check_relocs (bfd * abfd,
 	  else
 	    {
 	      if (! update_local_sym_info(abfd, symtab_hdr, r_symndx, tls_type) )
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -2445,7 +2480,7 @@ microblaze_elf_check_relocs (bfd * abfd,
 	      if (htab->elf.dynobj == NULL)
 		htab->elf.dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -2518,13 +2553,13 @@ microblaze_elf_check_relocs (bfd * abfd,
 		    sreloc = _bfd_elf_make_dynamic_reloc_section (sec, dynobj,
 								  2, abfd, 1);
 		    if (sreloc == NULL)
-		      return FALSE;
+		      return false;
 		  }
 
 		/* If this is a global symbol, we count the number of
 		   relocations we need for this symbol.  */
 		if (h != NULL)
-		  head = &((struct elf32_mb_link_hash_entry *) h)->dyn_relocs;
+		  head = &h->dyn_relocs;
 		else
 		  {
 		    /* Track dynamic relocs needed for local syms too.
@@ -2535,14 +2570,14 @@ microblaze_elf_check_relocs (bfd * abfd,
 		    Elf_Internal_Sym *isym;
 		    void *vpp;
 
-		    isym = bfd_sym_from_r_symndx (&htab->sym_sec,
+		    isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 						  abfd, r_symndx);
 		    if (isym == NULL)
-		      return FALSE;
+		      return false;
 
 		    s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		    if (s == NULL)
-		      return FALSE;
+		      return false;
 
 		    vpp = &elf_section_data (s)->local_dynrel;
 		    head = (struct elf_dyn_relocs **) vpp;
@@ -2551,11 +2586,11 @@ microblaze_elf_check_relocs (bfd * abfd,
 		p = *head;
 		if (p == NULL || p->sec != sec)
 		  {
-		    bfd_size_type amt = sizeof *p;
+		    size_t amt = sizeof *p;
 		    p = ((struct elf_dyn_relocs *)
 			 bfd_alloc (htab->elf.dynobj, amt));
 		    if (p == NULL)
-		      return FALSE;
+		      return false;
 		    p->next = *head;
 		    *head = p;
 		    p->sec = sec;
@@ -2572,7 +2607,7 @@ microblaze_elf_check_relocs (bfd * abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
@@ -2587,63 +2622,12 @@ microblaze_elf_copy_indirect_symbol (str
   edir = (struct elf32_mb_link_hash_entry *) dir;
   eind = (struct elf32_mb_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  if (ind->root.type == bfd_link_hash_indirect)
-	    abort ();
-
-	  /* Add reloc counts against the weak sym to the strong sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   edir->tls_mask |= eind->tls_mask;
 
   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = elf32_mb_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
-static bfd_boolean
+static bool
 microblaze_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				      struct elf_link_hash_entry *h)
 {
@@ -2653,7 +2637,7 @@ microblaze_elf_adjust_dynamic_symbol (st
 
   htab = elf32_mb_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* If this is a function, put it in the procedure linkage table.  We
      will fill in the contents of the procedure linkage table later,
@@ -2675,7 +2659,7 @@ microblaze_elf_adjust_dynamic_symbol (st
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     /* It's possible that we incorrectly decided a .plt reloc was
@@ -2694,7 +2678,7 @@ microblaze_elf_adjust_dynamic_symbol (st
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2705,26 +2689,26 @@ microblaze_elf_adjust_dynamic_symbol (st
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (!readonly_dynrelocs (h))
+  if (!_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -2767,7 +2751,7 @@ microblaze_elf_adjust_dynamic_symbol (st
   if (power_of_two > s->alignment_power)
     {
       if (!bfd_set_section_alignment (s, power_of_two))
-	return FALSE;
+	return false;
     }
 
   /* Define the symbol as being at this point in the section.  */
@@ -2776,13 +2760,13 @@ microblaze_elf_adjust_dynamic_symbol (st
 
   /* Increment the section size to make room for the symbol.  */
   s->size += h->size;
-  return TRUE;
+  return true;
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void * dat)
 {
   struct bfd_link_info *info;
@@ -2791,12 +2775,12 @@ allocate_dynrelocs (struct elf_link_hash
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) dat;
   htab = elf32_mb_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (htab->elf.dynamic_sections_created
       && h->plt.refcount > 0)
@@ -2807,7 +2791,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
@@ -2866,7 +2850,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       need = 0;
@@ -2906,8 +2890,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -2923,7 +2907,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -2934,7 +2918,7 @@ allocate_dynrelocs (struct elf_link_hash
 	    }
 	}
       else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	eh->dyn_relocs = NULL;
+	h->dyn_relocs = NULL;
     }
   else
     {
@@ -2955,7 +2939,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -2964,24 +2948,24 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 microblaze_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				      struct bfd_link_info *info)
 {
@@ -2992,7 +2976,7 @@ microblaze_elf_size_dynamic_sections (bf
 
   htab = elf32_mb_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->elf.dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -3108,7 +3092,7 @@ microblaze_elf_size_dynamic_sections (bf
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
-      bfd_boolean strip = FALSE;
+      bool strip = false;
 
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
@@ -3117,7 +3101,7 @@ microblaze_elf_size_dynamic_sections (bf
 	 of the dynobj section names depend upon the input files.  */
       name = bfd_section_name (s);
 
-      if (strncmp (name, ".rela", 5) == 0)
+      if (startswith (name, ".rela"))
 	{
 	  if (s->size == 0)
 	    {
@@ -3130,7 +3114,7 @@ microblaze_elf_size_dynamic_sections (bf
 		 adjust_dynamic_symbol is called, and it is that
 		 function which decides whether anything needs to go
 		 into these sections.  */
-	      strip = TRUE;
+	      strip = true;
 	    }
 	  else
 	    {
@@ -3163,54 +3147,18 @@ microblaze_elf_size_dynamic_sections (bf
 	 contents to zero.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL && s->size != 0)
-	return FALSE;
+	return false;
     }
 
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in microblaze_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL)			\
-      _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (!add_dynamic_entry (DT_RELA, 0)
-	  || !add_dynamic_entry (DT_RELASZ, 0)
-	  || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	return FALSE;
-
-      if (htab->elf.splt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0)
-	      || !add_dynamic_entry (DT_BIND_NOW, 1))
-	    return FALSE;
-	}
-
-      if (info->flags & DF_TEXTREL)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
-    }
-#undef add_dynamic_entry
-  return TRUE;
+  /* ??? Force DF_BIND_NOW?  */
+  info->flags |= DF_BIND_NOW;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, true);
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 microblaze_elf_finish_dynamic_symbol (bfd *output_bfd,
 				      struct bfd_link_info *info,
 				      struct elf_link_hash_entry *h,
@@ -3221,7 +3169,7 @@ microblaze_elf_finish_dynamic_symbol (bf
 
   htab = elf32_mb_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (h->plt.offset != (bfd_vma) -1)
     {
@@ -3290,9 +3238,9 @@ microblaze_elf_finish_dynamic_symbol (bf
     }
 
   /* h->got.refcount to be checked ? */
-  if (h->got.offset != (bfd_vma) -1 &&
-      ! ((h->got.offset & 1) ||
-	  IS_TLS_LD(eh->tls_mask) || IS_TLS_GD(eh->tls_mask)))
+  if ((h->got.offset != (bfd_vma) -1)
+      && ! ((h->got.offset & 1)
+	    || IS_TLS_LD(eh->tls_mask) || IS_TLS_GD(eh->tls_mask)))
     {
       asection *sgot;
       asection *srela;
@@ -3375,13 +3323,13 @@ microblaze_elf_finish_dynamic_symbol (bf
       || h == htab->elf.hplt)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 microblaze_elf_finish_dynamic_sections (bfd *output_bfd,
 					struct bfd_link_info *info)
 {
@@ -3391,7 +3339,7 @@ microblaze_elf_finish_dynamic_sections (
 
   htab = elf32_mb_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->elf.dynobj;
 
@@ -3408,7 +3356,7 @@ microblaze_elf_finish_dynamic_sections (
 	{
 	  Elf_Internal_Dyn dyn;
 	  asection *s;
-	  bfd_boolean size;
+	  bool size;
 
 	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
 
@@ -3416,17 +3364,17 @@ microblaze_elf_finish_dynamic_sections (
 	    {
 	    case DT_PLTGOT:
 	      s = htab->elf.sgotplt;
-	      size = FALSE;
+	      size = false;
 	      break;
 
 	    case DT_PLTRELSZ:
 	      s = htab->elf.srelplt;
-	      size = TRUE;
+	      size = true;
 	      break;
 
 	    case DT_JMPREL:
 	      s = htab->elf.srelplt;
-	      size = FALSE;
+	      size = false;
 	      break;
 
 	    default:
@@ -3478,13 +3426,13 @@ microblaze_elf_finish_dynamic_sections (
   if (htab->elf.sgot && htab->elf.sgot->size > 0)
     elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = 4;
 
-  return TRUE;
+  return true;
 }
 
 /* Hook called by the linker routine which adds symbols from an object
    file.  We use it to put .comm items in .sbss, and not .bss.  */
 
-static bfd_boolean
+static bool
 microblaze_elf_add_symbol_hook (bfd *abfd,
 				struct bfd_link_info *info,
 				Elf_Internal_Sym *sym,
@@ -3501,13 +3449,13 @@ microblaze_elf_add_symbol_hook (bfd *abf
 	 put into .sbss.  */
       *secp = bfd_make_section_old_way (abfd, ".sbss");
       if (*secp == NULL
-	  || !bfd_set_section_flags (*secp, SEC_IS_COMMON))
-	return FALSE;
+	  || !bfd_set_section_flags (*secp, SEC_IS_COMMON | SEC_SMALL_DATA))
+	return false;
 
       *valp = sym->st_size;
     }
 
-  return TRUE;
+  return true;
 }
 
 #define TARGET_LITTLE_SYM      microblaze_elf32_le_vec
@@ -3526,6 +3474,7 @@ microblaze_elf_add_symbol_hook (bfd *abf
 
 #define bfd_elf32_bfd_reloc_type_lookup		microblaze_elf_reloc_type_lookup
 #define bfd_elf32_bfd_is_local_label_name	microblaze_elf_is_local_label_name
+#define bfd_elf32_new_section_hook		microblaze_elf_new_section_hook
 #define elf_backend_relocate_section		microblaze_elf_relocate_section
 #define bfd_elf32_bfd_relax_section		microblaze_elf_relax_section
 #define bfd_elf32_bfd_merge_private_bfd_data	_bfd_generic_verify_endian_match
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-mips.c ./bfd/elf32-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-mips.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-mips.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS-specific support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    Most of the information added by Ian Lance Taylor, Cygnus Support,
    <ian@cygnus.com>.
@@ -50,32 +50,34 @@
 #include "ecoffswap.h"
 
 static bfd_reloc_status_type gprel32_with_gp
-  (bfd *, asymbol *, arelent *, asection *, bfd_boolean, void *, bfd_vma);
+  (bfd *, asymbol *, arelent *, asection *, bool, void *, bfd_vma);
 static bfd_reloc_status_type mips_elf_gprel32_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type mips32_64bit_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean mips_info_to_howto_rel
+static bool mips_info_to_howto_rel
   (bfd *, arelent *, Elf_Internal_Rela *);
-static bfd_boolean mips_info_to_howto_rela
+static bool mips_info_to_howto_rela
   (bfd *, arelent *, Elf_Internal_Rela *);
-static bfd_boolean mips_elf_sym_is_global
+static bool mips_elf_sym_is_global
   (bfd *, asymbol *);
-static bfd_boolean mips_elf32_object_p
+static bool mips_elf32_elfsym_local_is_section
   (bfd *);
-static bfd_boolean mips_elf_is_local_label_name
+static bool mips_elf32_object_p
+  (bfd *);
+static bool mips_elf_is_local_label_name
   (bfd *, const char *);
 static bfd_reloc_status_type mips16_gprel_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type mips_elf_final_gp
-  (bfd *, asymbol *, bfd_boolean, char **, bfd_vma *);
-static bfd_boolean mips_elf_assign_gp
+  (bfd *, asymbol *, bool, char **, bfd_vma *);
+static bool mips_elf_assign_gp
   (bfd *, bfd_vma *);
-static bfd_boolean elf32_mips_grok_prstatus
+static bool elf32_mips_grok_prstatus
   (bfd *, Elf_Internal_Note *);
-static bfd_boolean elf32_mips_grok_psinfo
+static bool elf32_mips_grok_psinfo
   (bfd *, Elf_Internal_Note *);
 static irix_compat_t elf32_mips_irix_compat
   (bfd *);
@@ -105,69 +107,69 @@ static reloc_howto_type elf_mips_howto_t
   /* No relocation.  */
   HOWTO (R_MIPS_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit relocation.  */
   HOWTO (R_MIPS_16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation.  */
   HOWTO (R_MIPS_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit symbol relative relocation.  */
   HOWTO (R_MIPS_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_REL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 26 bit jump address.  */
   HOWTO (R_MIPS_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -175,132 +177,132 @@ static reloc_howto_type elf_mips_howto_t
 				   bits must match the PC + 4.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03ffffff,		/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_MIPS_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MIPS_HI16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MIPS_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MIPS_LO16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MIPS_GOT16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit PC relative reference.  Note that the ABI document has a typo
      and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
      We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MIPS_CALL16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit GP relative reference.  */
   HOWTO (R_MIPS_GPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 mips_elf_gprel32_reloc, /* special_function */
 	 "R_MIPS_GPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The remaining relocs are defined on Irix 5, although they are
      not defined by the ABI.  */
@@ -311,139 +313,139 @@ static reloc_howto_type elf_mips_howto_t
   /* A 5 bit shift field.  */
   HOWTO (R_MIPS_SHIFT5,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 5,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SHIFT5",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000007c0,		/* src_mask */
 	 0x000007c0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 6 bit shift field.  */
   /* FIXME: This is not handled correctly; a special function is
      needed to put the most significant bit in the right place.  */
   HOWTO (R_MIPS_SHIFT6,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SHIFT6",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000007c4,		/* src_mask */
 	 0x000007c4,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 64 bit relocation.  */
   HOWTO (R_MIPS_64,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 mips32_64bit_reloc,	/* special_function */
 	 "R_MIPS_64",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement in the global offset table.  */
   HOWTO (R_MIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_DISP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_PAGE",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_OFST",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  Used in the N32 ABI.  */
   HOWTO (R_MIPS_SUB,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SUB",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Used to cause the linker to insert and delete instructions?  */
   EMPTY_HOWTO (R_MIPS_INSERT_A),
@@ -453,77 +455,77 @@ static reloc_howto_type elf_mips_howto_t
   /* Get the higher value of a 64 bit addend.  */
   HOWTO (R_MIPS_HIGHER,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_HIGHER",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the highest value of a 64 bit addend.  */
   HOWTO (R_MIPS_HIGHEST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_HIGHEST",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_CALL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_CALL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement.  */
   HOWTO (R_MIPS_SCN_DISP,       /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SCN_DISP",     /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (R_MIPS_REL16),
   EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),
@@ -534,46 +536,46 @@ static reloc_howto_type elf_mips_howto_t
      relocation is required for correctness.  */
   HOWTO (R_MIPS_JALR,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_JALR",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS GD/LD dynamic relocations.  */
   HOWTO (R_MIPS_TLS_DTPMOD32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPMOD32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MIPS_TLS_DTPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
   EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
@@ -581,139 +583,139 @@ static reloc_howto_type elf_mips_howto_t
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS IE dynamic relocations.  */
   HOWTO (R_MIPS_TLS_TPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (R_MIPS_TLS_TPREL64),
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation with no addend.  */
   HOWTO (R_MIPS_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (52),
   EMPTY_HOWTO (53),
@@ -726,87 +728,87 @@ static reloc_howto_type elf_mips_howto_t
 
   HOWTO (R_MIPS_PC21_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC21_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x001fffff,		/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC26_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC26_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03ffffff,		/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC18_S3,	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 18,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC18_S3",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0003ffff,		/* src_mask */
 	 0x0003ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC19_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC19_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0007ffff,		/* src_mask */
 	 0x0007ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCHI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCHI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCLO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCLO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 /* The reloc used for BFD_RELOC_CTOR when doing a 64 bit link.  This
@@ -814,26 +816,26 @@ static reloc_howto_type elf_mips_howto_t
 static reloc_howto_type elf_mips_ctor64_howto =
   HOWTO (R_MIPS_64,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips32_64bit_reloc,	/* special_function */
 	 "R_MIPS_64",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 static reloc_howto_type elf_mips16_howto_table_rel[] =
 {
   /* The reloc used for the mips16 jump instruction.  */
   HOWTO (R_MIPS16_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -841,205 +843,205 @@ static reloc_howto_type elf_mips16_howto
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x3ffffff,		/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The reloc used for the mips16 gprel instruction.  */
   HOWTO (R_MIPS16_GPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips16_gprel_reloc,	/* special_function */
 	 "R_MIPS16_GPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 reference to the global offset table.  */
   HOWTO (R_MIPS16_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MIPS16_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 call through the global offset table.  */
   HOWTO (R_MIPS16_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 high 16 bits of symbol value.  */
   HOWTO (R_MIPS16_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MIPS16_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 low 16 bits of symbol value.  */
   HOWTO (R_MIPS16_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MIPS16_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS general dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_GD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 16-bit PC-relative branch offset.  */
   HOWTO (R_MIPS16_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 static reloc_howto_type elf_micromips_howto_table_rel[] =
@@ -1051,9 +1053,9 @@ static reloc_howto_type elf_micromips_ho
   /* 26 bit jump address.  */
   HOWTO (R_MICROMIPS_26_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -1061,143 +1063,143 @@ static reloc_howto_type elf_micromips_ho
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_26_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x3ffffff,		/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MICROMIPS_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MICROMIPS_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MICROMIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MICROMIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MICROMIPS_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MICROMIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* This is for microMIPS branches.  */
   HOWTO (R_MICROMIPS_PC7_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC7_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000007f,		/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC10_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC10_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000003ff,		/* src_mask */
 	 0x000003ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MICROMIPS_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (143),
   EMPTY_HOWTO (144),
@@ -1205,199 +1207,199 @@ static reloc_howto_type elf_micromips_ho
   /* Displacement in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_DISP",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_PAGE",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_OFST",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_HI16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_LO16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  Used in the N32 ABI.  */
   HOWTO (R_MICROMIPS_SUB,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SUB",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the higher value of a 64 bit addend.  */
   HOWTO (R_MICROMIPS_HIGHER,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HIGHER",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the highest value of a 64 bit addend.  */
   HOWTO (R_MICROMIPS_HIGHEST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HIGHEST",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_HI16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_LO16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement.  */
   HOWTO (R_MICROMIPS_SCN_DISP,  /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SCN_DISP",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Protected jump conversion.  This is an optimization hint.  No
      relocation is required for correctness.  */
   HOWTO (R_MICROMIPS_JALR,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_JALR",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values
      must be zero.  This is used for relaxation.  */
   HOWTO (R_MICROMIPS_HI0_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HI0_LO16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (158),
   EMPTY_HOWTO (159),
@@ -1407,77 +1409,77 @@ static reloc_howto_type elf_micromips_ho
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (167),
   EMPTY_HOWTO (168),
@@ -1485,80 +1487,80 @@ static reloc_howto_type elf_micromips_ho
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (171),
 
   /* GP- and PC-relative relocations.  */
   HOWTO (R_MICROMIPS_GPREL7_S2,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL7_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000007f,		/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC23_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 23,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC23_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fffff,		/* src_mask */
 	 0x007fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 /* 16 bit offset for pc-relative branches.  */
 static reloc_howto_type elf_mips_gnu_rel16_s2 =
   HOWTO (R_MIPS_GNU_REL16_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GNU_REL16_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE);			/* pcrel_offset */
+	 true);			/* pcrel_offset */
 
 /* 32 bit pc-relative.  This was a GNU extension used by embedded-PIC.
    It was co-opted by mips-linux for exception-handling data.  GCC stopped
@@ -1567,49 +1569,49 @@ static reloc_howto_type elf_mips_gnu_rel
 static reloc_howto_type elf_mips_gnu_pcrel32 =
   HOWTO (R_MIPS_PC32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE);			/* pcrel_offset */
+	 true);			/* pcrel_offset */
 
 /* GNU extension to record C++ vtable hierarchy */
 static reloc_howto_type elf_mips_gnu_vtinherit_howto =
   HOWTO (R_MIPS_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_MIPS_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* GNU extension to record C++ vtable member usage */
 static reloc_howto_type elf_mips_gnu_vtentry_howto =
   HOWTO (R_MIPS_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_MIPS_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* Originally a VxWorks extension, but now used for other systems too.  */
 static reloc_howto_type elf_mips_copy_howto =
@@ -1617,52 +1619,52 @@ static reloc_howto_type elf_mips_copy_ho
 	 0,			/* rightshift */
 	 0,			/* this one is variable size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* Originally a VxWorks extension, but now used for other systems too.  */
 static reloc_howto_type elf_mips_jump_slot_howto =
   HOWTO (R_MIPS_JUMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_JUMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* Used in EH tables.  */
 static reloc_howto_type elf_mips_eh_howto =
   HOWTO (R_MIPS_EH,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_EH",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
    dangerous relocation.  */
 
-static bfd_boolean
+static bool
 mips_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp)
 {
   unsigned int count;
@@ -1672,7 +1674,7 @@ mips_elf_assign_gp (bfd *output_bfd, bfd
   /* If we've already figured out what GP will be, just return it.  */
   *pgp = _bfd_get_gp_value (output_bfd);
   if (*pgp)
-    return TRUE;
+    return true;
 
   count = bfd_get_symcount (output_bfd);
   sym = bfd_get_outsymbols (output_bfd);
@@ -1702,10 +1704,10 @@ mips_elf_assign_gp (bfd *output_bfd, bfd
       /* Only get the error once.  */
       *pgp = 4;
       _bfd_set_gp_value (output_bfd, *pgp);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We have to figure out the gp value, so that we can adjust the
@@ -1715,11 +1717,10 @@ mips_elf_assign_gp (bfd *output_bfd, bfd
    external symbol if we are producing relocatable output.  */
 
 static bfd_reloc_status_type
-mips_elf_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable,
+mips_elf_final_gp (bfd *output_bfd, asymbol *symbol, bool relocatable,
 		   char **error_message, bfd_vma *pgp)
 {
-  if (bfd_is_und_section (symbol->section)
-      && ! relocatable)
+  if (output_bfd == NULL)
     {
       *pgp = 0;
       return bfd_reloc_undefined;
@@ -1759,7 +1760,7 @@ _bfd_mips_elf32_gprel16_reloc (bfd *abfd
 			       asection *input_section, bfd *output_bfd,
 			       char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_byte *location;
   bfd_vma gp;
@@ -1777,11 +1778,11 @@ _bfd_mips_elf32_gprel16_reloc (bfd *abfd
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      output_bfd = input_section->output_section->owner;
     }
 
   ret = mips_elf_final_gp (output_bfd, symbol, relocatable, error_message,
@@ -1789,8 +1790,12 @@ _bfd_mips_elf32_gprel16_reloc (bfd *abfd
   if (ret != bfd_reloc_ok)
     return ret;
 
+  if (!_bfd_mips_reloc_offset_in_range (abfd, input_section, reloc_entry,
+					check_shuffle))
+    return bfd_reloc_outofrange;
+
   location = (bfd_byte *) data + reloc_entry->address;
-  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
+  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, false,
 				 location);
   ret = _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry,
 				       input_section, relocatable,
@@ -1809,7 +1814,7 @@ mips_elf_gprel32_reloc (bfd *abfd, arele
 			void *data, asection *input_section, bfd *output_bfd,
 			char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
@@ -1824,11 +1829,11 @@ mips_elf_gprel32_reloc (bfd *abfd, arele
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      output_bfd = input_section->output_section->owner;
     }
 
   ret = mips_elf_final_gp (output_bfd, symbol, relocatable,
@@ -1842,7 +1847,7 @@ mips_elf_gprel32_reloc (bfd *abfd, arele
 
 static bfd_reloc_status_type
 gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry,
-		 asection *input_section, bfd_boolean relocatable,
+		 asection *input_section, bool relocatable,
 		 void *data, bfd_vma gp)
 {
   bfd_vma relocation;
@@ -1853,10 +1858,14 @@ gprel32_with_gp (bfd *abfd, asymbol *sym
   else
     relocation = symbol->value;
 
-  relocation += symbol->section->output_section->vma;
-  relocation += symbol->section->output_offset;
+  if (symbol->section->output_section != NULL)
+    {
+      relocation += symbol->section->output_section->vma;
+      relocation += symbol->section->output_offset;
+    }
 
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+  if (!_bfd_mips_reloc_offset_in_range (abfd, input_section, reloc_entry,
+					check_inplace))
     return bfd_reloc_outofrange;
 
   /* Set val to the offset into the section or symbol.  */
@@ -1927,7 +1936,7 @@ mips16_gprel_reloc (bfd *abfd, arelent *
 		    void *data, asection *input_section, bfd *output_bfd,
 		    char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_byte *location;
   bfd_vma gp;
@@ -1943,11 +1952,11 @@ mips16_gprel_reloc (bfd *abfd, arelent *
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      output_bfd = input_section->output_section->owner;
     }
 
   ret = mips_elf_final_gp (output_bfd, symbol, relocatable, error_message,
@@ -1955,8 +1964,12 @@ mips16_gprel_reloc (bfd *abfd, arelent *
   if (ret != bfd_reloc_ok)
     return ret;
 
+  if (!_bfd_mips_reloc_offset_in_range (abfd, input_section, reloc_entry,
+					check_shuffle))
+    return bfd_reloc_outofrange;
+
   location = (bfd_byte *) data + reloc_entry->address;
-  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
+  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, false,
 				 location);
   ret = _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry,
 				       input_section, relocatable,
@@ -1977,7 +1990,7 @@ struct elf_reloc_map {
 static const struct elf_reloc_map mips_reloc_map[] =
 {
   { BFD_RELOC_NONE, R_MIPS_NONE },
-  { BFD_RELOC_16, R_MIPS_16 },
+  { BFD_RELOC_MIPS_16, R_MIPS_16 },
   { BFD_RELOC_32, R_MIPS_32 },
   /* There is no BFD reloc for R_MIPS_REL32.  */
   { BFD_RELOC_64, R_MIPS_64 },
@@ -2122,8 +2135,8 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *ab
       /* We need to handle BFD_RELOC_CTOR specially.
 	 Select the right relocation (R_MIPS_32 or R_MIPS_64) based on the
 	 size of addresses of the ABI.  */
-      if ((elf_elfheader (abfd)->e_flags & (E_MIPS_ABI_O64
-					    | E_MIPS_ABI_EABI64)) != 0)
+      if ((elf_elfheader (abfd)->e_flags & (EF_MIPS_ABI_O64
+					    | EF_MIPS_ABI_EABI64)) != 0)
 	return &elf_mips_ctor64_howto;
       else
 	return &howto_table[(int) R_MIPS_32];
@@ -2196,7 +2209,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 static reloc_howto_type *
 mips_elf32_rtype_to_howto (bfd *abfd,
 			   unsigned int r_type,
-			   bfd_boolean rela_p ATTRIBUTE_UNUSED)
+			   bool rela_p ATTRIBUTE_UNUSED)
 {
   reloc_howto_type *howto = NULL;
 
@@ -2235,16 +2248,16 @@ mips_elf32_rtype_to_howto (bfd *abfd,
 
 /* Given a MIPS Elf_Internal_Rel, fill in an arelent structure.  */
 
-static bfd_boolean
+static bool
 mips_info_to_howto_rel (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
   r_type = ELF32_R_TYPE (dst->r_info);
-  cache_ptr->howto = mips_elf32_rtype_to_howto (abfd, r_type, FALSE);
+  cache_ptr->howto = mips_elf32_rtype_to_howto (abfd, r_type, false);
 
   if (cache_ptr->howto == NULL)
-    return FALSE;
+    return false;
 
   /* The addend for a GPREL16 or LITERAL relocation comes from the GP
      value for the object file.  We get the addend now, rather than
@@ -2254,12 +2267,12 @@ mips_info_to_howto_rel (bfd *abfd, arele
       && (gprel16_reloc_p (r_type) || literal_reloc_p (r_type)))
     cache_ptr->addend = elf_gp (abfd);
 
-  return TRUE;
+  return true;
 }
 
 /* Given a MIPS Elf_Internal_Rela, fill in an arelent structure.  */
 
-static bfd_boolean
+static bool
 mips_info_to_howto_rela (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
   return mips_info_to_howto_rel (abfd, cache_ptr, dst);
@@ -2274,7 +2287,7 @@ mips_info_to_howto_rela (bfd *abfd, arel
    symbols.  On most ELF targets the split is between static symbols
    and externally visible symbols.  */
 
-static bfd_boolean
+static bool
 mips_elf_sym_is_global (bfd *abfd ATTRIBUTE_UNUSED, asymbol *sym)
 {
   if (SGI_COMPAT (abfd))
@@ -2284,35 +2297,43 @@ mips_elf_sym_is_global (bfd *abfd ATTRIB
 	    || bfd_is_und_section (bfd_asymbol_section (sym))
 	    || bfd_is_com_section (bfd_asymbol_section (sym)));
 }
+
+/* Likewise, return TRUE if the symbol table split overall must be
+   between section symbols and all other symbols.  */
+static bool
+mips_elf32_elfsym_local_is_section (bfd *abfd)
+{
+  return SGI_COMPAT (abfd);
+}
 
 /* Set the right machine number for a MIPS ELF file.  */
 
-static bfd_boolean
+static bool
 mips_elf32_object_p (bfd *abfd)
 {
   unsigned long mach;
 
   if (ABI_N32_P (abfd))
-    return FALSE;
+    return false;
 
   /* Irix 5 and 6 are broken.  Object file symbol tables are not always
      sorted correctly such that local symbols precede global symbols,
      and the sh_info field in the symbol table is not always right.  */
   if (SGI_COMPAT (abfd))
-    elf_bad_symtab (abfd) = TRUE;
+    elf_bad_symtab (abfd) = true;
 
   mach = _bfd_elf_mips_mach (elf_elfheader (abfd)->e_flags);
   bfd_default_set_arch_mach (abfd, bfd_arch_mips, mach);
-  return TRUE;
+  return true;
 }
 
 /* MIPS ELF local labels start with '$', not 'L'.  */
 
-static bfd_boolean
+static bool
 mips_elf_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == '$')
-    return TRUE;
+    return true;
 
   /* On Irix 6, the labels go back to starting with '.', so we accept
      the generic ELF local label syntax as well.  */
@@ -2320,7 +2341,7 @@ mips_elf_is_local_label_name (bfd *abfd,
 }
 
 /* Support for core dump NOTE sections.  */
-static bfd_boolean
+static bool
 elf32_mips_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -2329,7 +2350,7 @@ elf32_mips_grok_prstatus (bfd *abfd, Elf
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 256:		/* Linux/MIPS */
 	/* pr_cursig */
@@ -2350,13 +2371,13 @@ elf32_mips_grok_prstatus (bfd *abfd, Elf
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf32_mips_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 128:		/* Linux/MIPS elf_prpsinfo */
 	elf_tdata (abfd)->core->pid
@@ -2379,7 +2400,7 @@ elf32_mips_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 /* Write Linux core PRSTATUS note into core file.  */
@@ -2423,13 +2444,13 @@ elf32_mips_write_core_note (bfd *abfd, c
 
 /* Remove the magic _gp_disp symbol from the symbol tables.  */
 
-static bfd_boolean
+static bool
 elf32_mips_fixup_symbol (struct bfd_link_info *info,
 			 struct elf_link_hash_entry *h)
 {
   if (strcmp (h->root.root.string, "_gp_disp") == 0)
-    _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
-  return TRUE;
+    _bfd_elf_link_hash_hide_symbol (info, h, true);
+  return true;
 }
 
 /* Depending on the target vector we generate some version of Irix
@@ -2490,9 +2511,9 @@ static const struct ecoff_debug_swap mip
 #define ELF_TARGET_ID			MIPS_ELF_DATA
 #define ELF_MACHINE_CODE		EM_MIPS
 
-#define elf_backend_collect		TRUE
-#define elf_backend_type_change_ok	TRUE
-#define elf_backend_can_gc_sections	TRUE
+#define elf_backend_collect		true
+#define elf_backend_type_change_ok	true
+#define elf_backend_can_gc_sections	true
 #define elf_backend_gc_mark_extra_sections \
 					_bfd_mips_elf_gc_mark_extra_sections
 #define elf_info_to_howto		mips_info_to_howto_rela
@@ -2545,13 +2566,15 @@ static const struct ecoff_debug_swap mip
 #define elf_backend_may_use_rel_p	1
 #define elf_backend_may_use_rela_p	0
 #define elf_backend_default_use_rela_p	0
-#define elf_backend_sign_extend_vma	TRUE
+#define elf_backend_sign_extend_vma	true
 #define elf_backend_plt_readonly	1
 
 #define elf_backend_discard_info	_bfd_mips_elf_discard_info
 #define elf_backend_ignore_discarded_relocs \
 					_bfd_mips_elf_ignore_discarded_relocs
 #define elf_backend_write_section	_bfd_mips_elf_write_section
+#define elf_backend_elfsym_local_is_section \
+					mips_elf32_elfsym_local_is_section
 #define elf_backend_mips_irix_compat	elf32_mips_irix_compat
 #define elf_backend_mips_rtype_to_howto	mips_elf32_rtype_to_howto
 #define elf_backend_sort_relocs_p	_bfd_mips_elf_sort_relocs_p
@@ -2562,6 +2585,8 @@ static const struct ecoff_debug_swap mip
 					_bfd_mips_elf_is_target_special_symbol
 #define bfd_elf32_get_synthetic_symtab	_bfd_mips_elf_get_synthetic_symtab
 #define bfd_elf32_find_nearest_line	_bfd_mips_elf_find_nearest_line
+#define bfd_elf32_find_nearest_line_with_alt \
+					_bfd_mips_elf_find_nearest_line_with_alt
 #define bfd_elf32_find_inliner_info	_bfd_mips_elf_find_inliner_info
 #define bfd_elf32_new_section_hook	_bfd_mips_elf_new_section_hook
 #define bfd_elf32_set_section_contents	_bfd_mips_elf_set_section_contents
@@ -2577,6 +2602,7 @@ static const struct ecoff_debug_swap mip
 					_bfd_mips_elf_print_private_bfd_data
 #define bfd_elf32_bfd_relax_section	_bfd_mips_elf_relax_section
 #define bfd_elf32_mkobject		_bfd_mips_elf_mkobject
+#define bfd_elf32_bfd_free_cached_info	_bfd_mips_elf_free_cached_info
 
 /* Support for SGI-ish mips targets.  */
 #define TARGET_LITTLE_SYM		mips_elf32_le_vec
@@ -2643,7 +2669,7 @@ static const struct ecoff_debug_swap mip
 #include "elf32-target.h"
 /* Implement elf_backend_final_write_processing for VxWorks.  */
 
-static bfd_boolean
+static bool
 mips_vxworks_final_write_processing (bfd *abfd)
 {
   _bfd_mips_final_write_processing (abfd);
@@ -2670,6 +2696,9 @@ mips_vxworks_final_write_processing (bfd
 #define ELF_MAXPAGESIZE			0x1000
 #define ELF_COMMONPAGESIZE		0x1000
 
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS			is_vxworks
+
 #undef elf_backend_want_got_plt
 #define elf_backend_want_got_plt		1
 #undef elf_backend_want_plt_sym
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-moxie.c ./bfd/elf32-moxie.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-moxie.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-moxie.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,8 +1,8 @@
 /* moxie-specific support for 32-bit ELF.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    Copied from elf32-fr30.c which is..
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -34,47 +34,47 @@ static reloc_howto_type moxie_elf_howto_
   /* This reloc does nothing.  */
   HOWTO (R_MOXIE_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MOXIE_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_MOXIE_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MOXIE_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 10 bit PC-relative relocation.  */
   HOWTO (R_MOXIE_PCREL10,	/* type.  */
 	 1,			/* rightshift.  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* size.  */
 	 10,			/* bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* bitpos.  */
 	 complain_overflow_signed, /* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,	/* special_function.  */
 	 "R_MOXIE_PCREL10",		/* name.  */
-	 FALSE,			/* partial_inplace.  */
+	 false,			/* partial_inplace.  */
 	 0,			/* src_mask.  */
 	 0x000003FF,		/* dst_mask.  */
-	 TRUE),			/* pcrel_offset.  */
+	 true),			/* pcrel_offset.  */
 };
 
 /* Map BFD reloc types to MOXIE ELF reloc types.  */
@@ -123,7 +123,7 @@ moxie_reloc_name_lookup (bfd *abfd ATTRI
 
 /* Set the howto pointer for an MOXIE ELF reloc.  */
 
-static bfd_boolean
+static bool
 moxie_info_to_howto_rela (bfd *abfd,
 			  arelent *cache_ptr,
 			  Elf_Internal_Rela *dst)
@@ -137,10 +137,10 @@ moxie_info_to_howto_rela (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & moxie_elf_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 /* Perform a single relocation.  By default we use the standard BFD
@@ -197,7 +197,7 @@ moxie_final_link_relocate (reloc_howto_t
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 moxie_elf_relocate_section (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    bfd *input_bfd,
@@ -247,7 +247,7 @@ moxie_elf_relocate_section (bfd *output_
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -281,7 +281,7 @@ moxie_elf_relocate_section (bfd *output_
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -307,7 +307,7 @@ moxie_elf_relocate_section (bfd *output_
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -327,7 +327,7 @@ moxie_elf_gc_mark_hook (asection *sec,
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 moxie_elf_check_relocs (bfd *abfd,
 			struct bfd_link_info *info,
 			asection *sec,
@@ -339,7 +339,7 @@ moxie_elf_check_relocs (bfd *abfd,
   const Elf_Internal_Rela *rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -362,7 +362,7 @@ moxie_elf_check_relocs (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 #define ELF_ARCH		bfd_arch_moxie
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-msp430.c ./bfd/elf32-msp430.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-msp430.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-msp430.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /*  MSP430-specific support for 32-bit ELF
-    Copyright (C) 2002-2019 Free Software Foundation, Inc.
+    Copyright (C) 2002-2024 Free Software Foundation, Inc.
     Contributed by Dmitry Diky <diwil@mail.ru>
 
     This file is part of BFD, the Binary File Descriptor library.
@@ -26,6 +26,8 @@
 #include "elf-bfd.h"
 #include "elf/msp430.h"
 
+static bool debug_relocs = 0;
+
 /* All users of this file have bfd_octets_per_byte (abfd, sec) == 1.  */
 #define OCTETS_PER_BYTE(ABFD, SEC) 1
 
@@ -54,474 +56,554 @@ rl78_sym_diff_handler (bfd * abfd,
   return bfd_reloc_continue;
 }
 
+/* Special handler for relocations which don't have to be relocated.
+   This function just simply returns bfd_reloc_ok.  */
+static bfd_reloc_status_type
+msp430_elf_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
+			asymbol *symbol ATTRIBUTE_UNUSED,
+			void *data ATTRIBUTE_UNUSED, asection *input_section,
+			bfd *output_bfd, char **error_message ATTRIBUTE_UNUSED)
+{
+  if (output_bfd != NULL)
+    reloc_entry->address += input_section->output_offset;
+
+  return bfd_reloc_ok;
+}
+
 static reloc_howto_type elf_msp430_howto_table[] =
 {
   HOWTO (R_MSP430_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MSP430_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 10 bit PC relative relocation.  */
   HOWTO (R_MSP430_10_PCREL,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_10_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x3ff,			/* src_mask */
 	 0x3ff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_MSP430_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit PC relative relocation for command address.  */
   HOWTO (R_MSP430_16_PCREL,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit absolute relocation, byte operations.  */
   HOWTO (R_MSP430_16_BYTE,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_16_BYTE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit absolute relocation for command address.  */
   HOWTO (R_MSP430_16_PCREL_BYTE,/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_16_PCREL_BYTE",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 10 bit PC relative relocation for complicated polymorphs.  */
   HOWTO (R_MSP430_2X_PCREL,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_2X_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x3ff,			/* src_mask */
 	 0x3ff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit relaxable relocation for command address.  */
   HOWTO (R_MSP430_RL_PCREL,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_RL_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE)			/* pcrel_offset */
+	 true)			/* pcrel_offset */
 
   /* A 8-bit absolute relocation.  */
   , HOWTO (R_MSP430_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Together with a following reloc, allows for the difference
      between two symbols to be the real addend of the second reloc.  */
   HOWTO (R_MSP430_SYM_DIFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 rl78_sym_diff_handler,	/* special handler.  */
 	 "R_MSP430_SYM_DIFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false),		/* pcrel_offset */
+
+  /* The length of unsigned-leb128 is variable, just assume the
+     size is one byte here.  */
+  HOWTO (R_MSP430_GNU_SET_ULEB128,	/* type */
+	 0,				/* rightshift */
+	 1,				/* size */
+	 0,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 msp430_elf_ignore_reloc,	/* special handler.  */
+	 "R_MSP430_GNU_SET_ULEB128",	/* name */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
+	 0,				/* dst_mask */
+	 false),			/* pcrel_offset */
+
+  /* The length of unsigned-leb128 is variable, just assume the
+     size is one byte here.  */
+  HOWTO (R_MSP430_GNU_SUB_ULEB128,	/* type */
+	 0,				/* rightshift */
+	 1,				/* size */
+	 0,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 msp430_elf_ignore_reloc,	/* special handler.  */
+	 "R_MSP430_GNU_SUB_ULEB128",	/* name */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
+	 0,				/* dst_mask */
+	 false),			/* pcrel_offset */
+
 };
 
 static reloc_howto_type elf_msp430x_howto_table[] =
 {
   HOWTO (R_MSP430_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MSP430_ABS32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_ABS32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MSP430_ABS16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_ABS16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MSP430_ABS8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_ABS8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MSP430_PCR16,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_PCR16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_PCR20_EXT_SRC,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_PCR20_EXT_SRC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_PCR20_EXT_DST,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_PCR20_EXT_DST",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_PCR20_EXT_ODST,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_PCR20_EXT_ODST",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_ABS20_EXT_SRC,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_ABS20_EXT_SRC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_ABS20_EXT_DST,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_ABS20_EXT_DST",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_ABS20_EXT_ODST,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_ABS20_EXT_ODST",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_ABS20_ADR_SRC,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_ABS20_ADR_SRC",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_ABS20_ADR_DST,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_ABS20_ADR_DST",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_PCR16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_PCR16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_PCR20_CALL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_PCR20_CALL",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430X_ABS16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_ABS16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430_ABS_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_ABS_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MSP430_PREL31,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430_PREL31",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   EMPTY_HOWTO (R_MSP430_EHTYPE),
 
   /* A 10 bit PC relative relocation.  */
   HOWTO (R_MSP430X_10_PCREL,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_10_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x3ff,			/* src_mask */
 	 0x3ff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 10 bit PC relative relocation for complicated polymorphs.  */
   HOWTO (R_MSP430X_2X_PCREL,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MSP430X_2X_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x3ff,			/* src_mask */
 	 0x3ff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Together with a following reloc, allows for the difference
      between two symbols to be the real addend of the second reloc.  */
   HOWTO (R_MSP430X_SYM_DIFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 rl78_sym_diff_handler,	/* special handler.  */
 	 "R_MSP430X_SYM_DIFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false),		/* pcrel_offset */
+
+  /* The length of unsigned-leb128 is variable, just assume the
+     size is one byte here.  */
+  HOWTO (R_MSP430X_GNU_SET_ULEB128,	/* type */
+	 0,				/* rightshift */
+	 1,				/* size */
+	 0,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 msp430_elf_ignore_reloc,	/* special handler.  */
+	 "R_MSP430X_GNU_SET_ULEB128",	/* name */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
+	 0,				/* dst_mask */
+	 false),			/* pcrel_offset */
+
+  /* The length of unsigned-leb128 is variable, just assume the
+     size is one byte here.  */
+  HOWTO (R_MSP430X_GNU_SUB_ULEB128,	/* type */
+	 0,				/* rightshift */
+	 1,				/* size */
+	 0,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 msp430_elf_ignore_reloc,	/* special handler.  */
+	 "R_MSP430X_GNU_SUB_ULEB128",	/* name */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
+	 0,				/* dst_mask */
+	 false),			/* pcrel_offset */
+
 };
 
 /* Map BFD reloc types to MSP430 ELF reloc types.  */
@@ -545,7 +627,9 @@ static const struct msp430_reloc_map msp
   {BFD_RELOC_MSP430_2X_PCREL,	   R_MSP430_2X_PCREL},
   {BFD_RELOC_MSP430_RL_PCREL,	   R_MSP430_RL_PCREL},
   {BFD_RELOC_8,			   R_MSP430_8},
-  {BFD_RELOC_MSP430_SYM_DIFF,	   R_MSP430_SYM_DIFF}
+  {BFD_RELOC_MSP430_SYM_DIFF,	   R_MSP430_SYM_DIFF},
+  {BFD_RELOC_MSP430_SET_ULEB128,   R_MSP430_GNU_SET_ULEB128 },
+  {BFD_RELOC_MSP430_SUB_ULEB128,   R_MSP430_GNU_SUB_ULEB128 }
 };
 
 static const struct msp430_reloc_map msp430x_reloc_map[] =
@@ -571,10 +655,12 @@ static const struct msp430_reloc_map msp
   {BFD_RELOC_MSP430_10_PCREL,	      R_MSP430X_10_PCREL},
   {BFD_RELOC_MSP430_2X_PCREL,	      R_MSP430X_2X_PCREL},
   {BFD_RELOC_MSP430_RL_PCREL,	      R_MSP430X_PCR16},
-  {BFD_RELOC_MSP430_SYM_DIFF,	      R_MSP430X_SYM_DIFF}
+  {BFD_RELOC_MSP430_SYM_DIFF,	      R_MSP430X_SYM_DIFF},
+  {BFD_RELOC_MSP430_SET_ULEB128,      R_MSP430X_GNU_SET_ULEB128 },
+  {BFD_RELOC_MSP430_SUB_ULEB128,      R_MSP430X_GNU_SUB_ULEB128 }
 };
 
-static inline bfd_boolean
+static inline bool
 uses_msp430x_relocs (bfd * abfd)
 {
   extern const bfd_target msp430_elf32_ti_vec;
@@ -634,7 +720,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an MSP430 ELF reloc.  */
 
-static bfd_boolean
+static bool
 msp430_info_to_howto_rela (bfd * abfd,
 			   arelent * cache_ptr,
 			   Elf_Internal_Rela * dst)
@@ -651,7 +737,7 @@ msp430_info_to_howto_rela (bfd * abfd,
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      abfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       cache_ptr->howto = elf_msp430x_howto_table + r_type;
     }
@@ -661,19 +747,19 @@ msp430_info_to_howto_rela (bfd * abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   else
     cache_ptr->howto = &elf_msp430_howto_table[r_type];
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 elf32_msp430_check_relocs (bfd * abfd, struct bfd_link_info * info,
 			   asection * sec, const Elf_Internal_Rela * relocs)
 {
@@ -683,7 +769,7 @@ elf32_msp430_check_relocs (bfd * abfd, s
   const Elf_Internal_Rela *rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -706,7 +792,7 @@ elf32_msp430_check_relocs (bfd * abfd, s
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Perform a single relocation.  By default we use the standard BFD
@@ -728,7 +814,7 @@ msp430_final_link_relocate (reloc_howto_
   bfd_reloc_status_type r = bfd_reloc_ok;
   bfd_vma x;
   bfd_signed_vma srel;
-  bfd_boolean is_rel_reloc = FALSE;
+  bool is_rel_reloc = false;
 
   if (uses_msp430x_relocs (input_bfd))
     {
@@ -742,6 +828,10 @@ msp430_final_link_relocate (reloc_howto_
       BFD_ASSERT (! is_rel_reloc || rel->r_addend == 0);
     }
 
+  if (debug_relocs)
+    printf ("writing relocation (%p) at 0x%lx type: %d\n", rel,
+	    (long) (input_section->output_section->vma + input_section->output_offset
+		    + rel->r_offset), howto->type);
   if (sym_diff_section != NULL)
     {
       BFD_ASSERT (sym_diff_section == input_section);
@@ -749,6 +839,9 @@ msp430_final_link_relocate (reloc_howto_
      if (uses_msp430x_relocs (input_bfd))
        switch (howto->type)
 	 {
+	 case R_MSP430X_GNU_SET_ULEB128:
+	   relocation += (!is_rel_reloc ? rel->r_addend : 0);
+	   /* Fall through.  */
 	 case R_MSP430_ABS32:
 	  /* If we are computing a 32-bit value for the location lists
 	     and the result is 0 then we add one to the value.  A zero
@@ -774,6 +867,9 @@ msp430_final_link_relocate (reloc_howto_
      else
        switch (howto->type)
 	 {
+	 case R_MSP430_GNU_SET_ULEB128:
+	   relocation += (!is_rel_reloc ? rel->r_addend : 0);
+	   /* Fall through.  */
 	 case R_MSP430_32:
 	 case R_MSP430_16:
 	 case R_MSP430_16_BYTE:
@@ -788,16 +884,63 @@ msp430_final_link_relocate (reloc_howto_
       sym_diff_section = NULL;
     }
 
-  if (uses_msp430x_relocs (input_bfd))
+  if ((uses_msp430x_relocs (input_bfd)
+       && howto->type == R_MSP430X_GNU_SET_ULEB128)
+      || (!uses_msp430x_relocs (input_bfd)
+	  && howto->type == R_MSP430_GNU_SET_ULEB128))
+    {
+      unsigned int len, new_len = 0;
+      bfd_byte *endp, *p;
+      unsigned int val = relocation;
+
+      _bfd_read_unsigned_leb128 (input_bfd, contents + rel->r_offset, &len);
+
+      /* Clean the contents value to zero.  Do not reduce the length.  */
+      p = contents + rel->r_offset;
+      endp = (p + len) - 1;
+      memset (p, 0x80, len - 1);
+      *(endp) = 0;
+
+      /* Get the length of the new uleb128 value.  */
+      do
+	{
+	  new_len++;
+	  val >>= 7;
+	} while (val);
+
+      if (new_len > len)
+	{
+	  _bfd_error_handler
+	    (_("error: final size of uleb128 value at offset 0x%lx in %pA "
+	       "from %pB exceeds available space"),
+	     (long) rel->r_offset, input_section, input_bfd);
+	}
+      else
+	{
+	  /* If the number of bytes required to store the new value has
+	     decreased, "right align" the new value within the available space,
+	     so the MSB side is padded with uleb128 zeros (0x80).  */
+	  p = _bfd_write_unsigned_leb128 (p + (len - new_len), endp,
+					  relocation);
+	  /* We checked there is enough space for the new value above, so this
+	     should never be NULL.  */
+	  BFD_ASSERT (p);
+	}
+
+      return bfd_reloc_ok;
+    }
+  else if (uses_msp430x_relocs (input_bfd))
     switch (howto->type)
       {
       case R_MSP430X_SYM_DIFF:
+      case R_MSP430X_GNU_SUB_ULEB128:
 	/* Cache the input section and value.
 	   The offset is unreliable, since relaxation may
 	   have reduced the following reloc's offset.  */
 	BFD_ASSERT (! is_rel_reloc);
 	sym_diff_section = input_section;
-	sym_diff_value = relocation;
+	sym_diff_value = relocation + (howto->type == R_MSP430X_GNU_SUB_ULEB128
+				       ? rel->r_addend : 0);
 	return bfd_reloc_ok;
 
       case R_MSP430_ABS16:
@@ -832,14 +975,14 @@ msp430_final_link_relocate (reloc_howto_
 	  {
 	    if (info->disable_target_specific_optimizations < 0)
 	      {
-		static bfd_boolean warned = FALSE;
+		static bool warned = false;
 		if (! warned)
 		  {
 		    info->callbacks->warning
 		      (info,
 		       _("try enabling relaxation to avoid relocation truncations"),
 		       NULL, input_bfd, input_section, relocation);
-		    warned = TRUE;
+		    warned = true;
 		  }
 	      }
 	    return bfd_reloc_overflow;
@@ -1146,14 +1289,14 @@ msp430_final_link_relocate (reloc_howto_
 	{
 	  if (info->disable_target_specific_optimizations < 0)
 	    {
-	      static bfd_boolean warned = FALSE;
+	      static bool warned = false;
 	      if (! warned)
 		{
 		  info->callbacks->warning
 		    (info,
 		     _("try enabling relaxation to avoid relocation truncations"),
 		     NULL, input_bfd, input_section, relocation);
-		  warned = TRUE;
+		  warned = true;
 		}
 	    }
 	  return bfd_reloc_overflow;
@@ -1248,11 +1391,13 @@ msp430_final_link_relocate (reloc_howto_
       break;
 
     case R_MSP430_SYM_DIFF:
+    case R_MSP430_GNU_SUB_ULEB128:
       /* Cache the input section and value.
 	 The offset is unreliable, since relaxation may
 	 have reduced the following reloc's offset.  */
       sym_diff_section = input_section;
-      sym_diff_value = relocation;
+      sym_diff_value = relocation + (howto->type == R_MSP430_GNU_SUB_ULEB128
+				     ? rel->r_addend : 0);
       return bfd_reloc_ok;
 
       default:
@@ -1266,7 +1411,7 @@ msp430_final_link_relocate (reloc_howto_
 
 /* Relocate an MSP430 ELF section.  */
 
-static bfd_boolean
+static int
 elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED,
 			       struct bfd_link_info * info,
 			       bfd * input_bfd,
@@ -1321,7 +1466,7 @@ elf32_msp430_relocate_section (bfd * out
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1354,7 +1499,7 @@ elf32_msp430_relocate_section (bfd * out
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -1381,14 +1526,14 @@ elf32_msp430_relocate_section (bfd * out
 
     }
 
-  return TRUE;
+  return true;
 }
 
 /* The final processing done just before writing out a MSP430 ELF object
    file.  This gets the MSP430 architecture right based on the machine
    number.  */
 
-static bfd_boolean
+static bool
 bfd_elf_msp430_final_write_processing (bfd *abfd)
 {
   unsigned long val;
@@ -1429,7 +1574,7 @@ bfd_elf_msp430_final_write_processing (b
 
 /* Set the right machine number.  */
 
-static bfd_boolean
+static bool
 elf32_msp430_object_p (bfd * abfd)
 {
   int e_set = bfd_mach_msp14;
@@ -1564,7 +1709,7 @@ static struct rcodes_s
 
 /* Return TRUE if a symbol exists at the given address.  */
 
-static bfd_boolean
+static bool
 msp430_elf_symbol_address_p (bfd * abfd,
 			     asection * sec,
 			     Elf_Internal_Sym * isym,
@@ -1583,7 +1728,7 @@ msp430_elf_symbol_address_p (bfd * abfd,
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
     if (isym->st_shndx == sec_shndx && isym->st_value == addr)
-      return TRUE;
+      return true;
 
   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
 	      - symtab_hdr->sh_info);
@@ -1597,16 +1742,16 @@ msp430_elf_symbol_address_p (bfd * abfd,
 	   || sym_hash->root.type == bfd_link_hash_defweak)
 	  && sym_hash->root.u.def.section == sec
 	  && sym_hash->root.u.def.value == addr)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Adjust all local symbols defined as '.section + 0xXXXX' (.section has
    sec_shndx) referenced from current and other sections.  */
 
-static bfd_boolean
+static bool
 msp430_elf_relax_adjust_locals (bfd * abfd, asection * sec, bfd_vma addr,
 				int count, unsigned int sec_shndx,
 				bfd_vma toaddr)
@@ -1618,7 +1763,7 @@ msp430_elf_relax_adjust_locals (bfd * ab
 
   irel = elf_section_data (sec)->relocs;
   if (irel == NULL)
-    return TRUE;
+    return true;
 
   irelend = irel + sec->reloc_count;
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
@@ -1636,12 +1781,12 @@ msp430_elf_relax_adjust_locals (bfd * ab
 	irel->r_addend -= count;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 msp430_elf_relax_delete_bytes (bfd * abfd, asection * sec, bfd_vma addr,
 			       int count)
 {
@@ -1663,6 +1808,9 @@ msp430_elf_relax_delete_bytes (bfd * abf
   contents = elf_section_data (sec)->this_hdr.contents;
 
   toaddr = sec->size;
+  if (debug_relocs)
+    printf ("      deleting %d bytes between 0x%lx to 0x%lx\n",
+	    count, (long) addr, (long) toaddr);
 
   irel = elf_section_data (sec)->relocs;
   irelend = irel + sec->reloc_count;
@@ -1707,13 +1855,18 @@ msp430_elf_relax_delete_bytes (bfd * abf
 		 the start of the next section.  */
 	      || (isym->st_value == toaddr
 		  && name != NULL
-		  && (CONST_STRNEQ (name, ".Letext")
-		      || CONST_STRNEQ (name, ".LFE")))))
+		  && (startswith (name, ".Letext")
+		      || startswith (name, ".LFE")))))
 	{
+	  if (debug_relocs)
+	    printf ("      adjusting value of local symbol %s from 0x%lx ",
+		    name, (long) isym->st_value);
 	  if (isym->st_value < addr + count)
 	    isym->st_value = addr;
 	  else
 	    isym->st_value -= count;
+	  if (debug_relocs)
+	    printf ("to 0x%lx\n", (long) isym->st_value);
 	}
       /* Adjust the function symbol's size as well.  */
       else if (ELF_ST_TYPE (isym->st_info) == STT_FUNC
@@ -1751,14 +1904,14 @@ msp430_elf_relax_delete_bytes (bfd * abf
 	sym_hash->size -= count;
     }
 
-  return TRUE;
+  return true;
 }
 
-/* Insert two words into a section whilst relaxing.  */
+/* Insert one or two words into a section whilst relaxing.  */
 
 static bfd_byte *
-msp430_elf_relax_add_two_words (bfd * abfd, asection * sec, bfd_vma addr,
-				int word1, int word2)
+msp430_elf_relax_add_words (bfd * abfd, asection * sec, bfd_vma addr,
+			    int num_words, int word1, int word2)
 {
   Elf_Internal_Shdr *symtab_hdr;
   unsigned int sec_shndx;
@@ -1772,20 +1925,25 @@ msp430_elf_relax_add_two_words (bfd * ab
   unsigned int symcount;
   bfd_vma sec_end;
   asection *p;
+  if (debug_relocs)
+    printf ("      adding %d words at 0x%lx\n", num_words,
+	    (long) (sec->output_section->vma + sec->output_offset + addr));
 
   contents = elf_section_data (sec)->this_hdr.contents;
   sec_end = sec->size;
+  int num_bytes = num_words * 2;
 
   /* Make space for the new words.  */
-  contents = bfd_realloc (contents, sec_end + 4);
-  memmove (contents + addr + 4, contents + addr, sec_end - addr);
+  contents = bfd_realloc (contents, sec_end + num_bytes);
+  memmove (contents + addr + num_bytes, contents + addr, sec_end - addr);
 
   /* Insert the new words.  */
   bfd_put_16 (abfd, word1, contents + addr);
-  bfd_put_16 (abfd, word2, contents + addr + 2);
+  if (num_words == 2)
+    bfd_put_16 (abfd, word2, contents + addr + 2);
 
   /* Update the section information.  */
-  sec->size += 4;
+  sec->size += num_bytes;
   elf_section_data (sec)->this_hdr.contents = contents;
 
   /* Adjust all the relocs.  */
@@ -1794,12 +1952,12 @@ msp430_elf_relax_add_two_words (bfd * ab
 
   for (; irel < irelend; irel++)
     if ((irel->r_offset >= addr && irel->r_offset < sec_end))
-      irel->r_offset += 4;
+      irel->r_offset += num_bytes;
 
   /* Adjust the local symbols defined in this section.  */
   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
   for (p = abfd->sections; p != NULL; p = p->next)
-    msp430_elf_relax_adjust_locals (abfd, p, addr, -4,
+    msp430_elf_relax_adjust_locals (abfd, p, addr, -num_bytes,
 				    sec_shndx, sec_end);
 
   /* Adjust the global symbols affected by the move.  */
@@ -1808,7 +1966,14 @@ msp430_elf_relax_add_two_words (bfd * ab
   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
     if (isym->st_shndx == sec_shndx
 	&& isym->st_value >= addr && isym->st_value < sec_end)
-      isym->st_value += 4;
+      {
+	if (debug_relocs)
+	  printf ("      adjusting value of local symbol %s from 0x%lx to "
+		  "0x%lx\n", bfd_elf_string_from_elf_section
+		  (abfd, symtab_hdr->sh_link, isym->st_name),
+		  (long) isym->st_value, (long)(isym->st_value + num_bytes));
+	isym->st_value += num_bytes;
+      }
 
   /* Now adjust the global symbols defined in this section.  */
   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
@@ -1824,16 +1989,16 @@ msp430_elf_relax_add_two_words (bfd * ab
 	  && sym_hash->root.u.def.section == sec
 	  && sym_hash->root.u.def.value >= addr
 	  && sym_hash->root.u.def.value < sec_end)
-	sym_hash->root.u.def.value += 4;
+	sym_hash->root.u.def.value += num_bytes;
     }
 
   return contents;
 }
 
-static bfd_boolean
+static bool
 msp430_elf_relax_section (bfd * abfd, asection * sec,
 			  struct bfd_link_info * link_info,
-			  bfd_boolean * again)
+			  bool * again)
 {
   Elf_Internal_Shdr * symtab_hdr;
   Elf_Internal_Rela * internal_relocs;
@@ -1843,15 +2008,21 @@ msp430_elf_relax_section (bfd * abfd, as
   Elf_Internal_Sym *  isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-    || (sec->flags & SEC_RELOC) == 0
-    || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+      || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
+      || (sec->flags & SEC_CODE) == 0)
+    return true;
+
+  if (debug_relocs)
+    printf ("Relaxing %s (%p), output_offset: 0x%lx sec size: 0x%lx\n",
+	    sec->name, sec, (long) sec->output_offset, (long) sec->size);
 
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
 
@@ -1864,6 +2035,8 @@ msp430_elf_relax_section (bfd * abfd, as
   /* Walk through them looking for relaxing opportunities.  */
   irelend = internal_relocs + sec->reloc_count;
 
+  if (debug_relocs)
+    printf ("  trying code size growing relocs\n");
   /* Do code size growing relocs first.  */
   for (irel = internal_relocs; irel < irelend; irel++)
     {
@@ -1920,6 +2093,15 @@ msp430_elf_relax_section (bfd * abfd, as
 	    sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
 	  symval = (isym->st_value
 		    + sym_sec->output_section->vma + sym_sec->output_offset);
+
+	  if (debug_relocs)
+	    printf ("    processing reloc at 0x%lx for local sym: %s "
+		    "st_value: 0x%lx adj value: 0x%lx\n",
+		    (long) (sec->output_offset + sec->output_section->vma
+			    + irel->r_offset),
+		    bfd_elf_string_from_elf_section (abfd, symtab_hdr->sh_link,
+						     isym->st_name),
+		    (long) isym->st_value, (long) symval);
 	}
       else
 	{
@@ -1941,6 +2123,13 @@ msp430_elf_relax_section (bfd * abfd, as
 	  symval = (h->root.u.def.value
 		    + h->root.u.def.section->output_section->vma
 		    + h->root.u.def.section->output_offset);
+	  if (debug_relocs)
+	    printf ("    processing reloc at 0x%lx for global sym: %s "
+		    "st_value: 0x%lx adj value: 0x%lx\n",
+		    (long) (sec->output_offset + sec->output_section->vma
+		    + irel->r_offset),
+	      h->root.root.string, (long) h->root.u.def.value,
+	      (long) symval);
 	}
 
       /* For simplicity of coding, we are going to modify the section
@@ -1960,6 +2149,7 @@ msp430_elf_relax_section (bfd * abfd, as
       value -= (sec->output_section->vma + sec->output_offset);
       value -= irel->r_offset;
       value -= 2;
+
       /* Scale.  */
       value >>= 1;
 
@@ -1971,8 +2161,12 @@ msp430_elf_relax_section (bfd * abfd, as
       opcode = bfd_get_16 (abfd, contents + irel->r_offset);
 
       /* Compute the new opcode.  We are going to convert:
+	 JMP label
+	   into:
+	 BR[A] label
+	   or
 	 J<cond> label
-	 into:
+	   into:
 	 J<inv-cond> 1f
 	 BR[A] #label
 	 1:			*/
@@ -1992,8 +2186,14 @@ msp430_elf_relax_section (bfd * abfd, as
 	     1: br label
 	     2:		       */
 	  continue;
+	case 0x3c00:
+	  if (uses_msp430x_relocs (abfd))
+	    opcode = 0x0080;	/* JMP -> BRA  */
+	  else
+	    opcode = 0x4030;	/* JMP -> BR  */
+	  break;
 	default:
-	  /* Not a conditional branch instruction.  */
+	  /* Unhandled branch instruction.  */
 	  /* fprintf (stderr, "unrecog: %x\n", opcode); */
 	  continue;
 	}
@@ -2009,36 +2209,70 @@ msp430_elf_relax_section (bfd * abfd, as
       /* Insert the new branch instruction.  */
       if (uses_msp430x_relocs (abfd))
 	{
-	  /* Insert an absolute branch (aka MOVA) instruction.  */
-	  contents = msp430_elf_relax_add_two_words
-	    (abfd, sec, irel->r_offset + 2, 0x0080, 0x0000);
-
-	  /* Update the relocation to point to the inserted branch
-	     instruction.  Note - we are changing a PC-relative reloc
-	     into an absolute reloc, but this is OK because we have
-	     arranged with the assembler to have the reloc's value be
-	     a (local) symbol, not a section+offset value.  */
-	  irel->r_offset += 2;
+	  if (debug_relocs)
+	    printf ("      R_MSP430X_10_PCREL -> R_MSP430X_ABS20_ADR_SRC "
+		    "(growing with new opcode 0x%x)\n", opcode);
+
+	  /* Insert an absolute branch (aka MOVA) instruction.
+	     Note that bits 19:16 of the address are stored in the first word
+	     of the insn, so this is where r_offset will point to.  */
+	  if (opcode == 0x0080)
+	    {
+	      /* If we're inserting a BRA because we are converting from a JMP,
+		 then only add one word for destination address; the BRA opcode
+		 has already been written.  */
+	      contents = msp430_elf_relax_add_words
+		(abfd, sec, irel->r_offset + 2, 1, 0x0000, 0);
+	    }
+	  else
+	    {
+	      contents = msp430_elf_relax_add_words
+		(abfd, sec, irel->r_offset + 2, 2, 0x0080, 0x0000);
+	      /* Update the relocation to point to the inserted branch
+		 instruction.  Note - we are changing a PC-relative reloc
+		 into an absolute reloc, but this is OK because we have
+		 arranged with the assembler to have the reloc's value be
+		 a (local) symbol, not a section+offset value.  */
+	      irel->r_offset += 2;
+	    }
+
 	  irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
 				       R_MSP430X_ABS20_ADR_SRC);
 	}
       else
 	{
-	  contents = msp430_elf_relax_add_two_words
-	    (abfd, sec, irel->r_offset + 2, 0x4030, 0x0000);
-
-	  /* See comment above about converting a 10-bit PC-rel
-	     relocation into a 16-bit absolute relocation.  */
-	  irel->r_offset += 4;
+	  if (debug_relocs)
+	    printf ("      R_MSP430_10_PCREL -> R_MSP430_16 "
+		    "(growing with new opcode 0x%x)\n", opcode);
+	  if (opcode == 0x4030)
+	    {
+	      /* If we're inserting a BR because we are converting from a JMP,
+		 then only add one word for destination address; the BR opcode
+		 has already been written.  */
+	      contents = msp430_elf_relax_add_words
+		(abfd, sec, irel->r_offset + 2, 1, 0x0000, 0);
+	      irel->r_offset += 2;
+	    }
+	  else
+	    {
+	      contents = msp430_elf_relax_add_words
+		(abfd, sec, irel->r_offset + 2, 2, 0x4030, 0x0000);
+	      /* See comment above about converting a 10-bit PC-rel
+		 relocation into a 16-bit absolute relocation.  */
+	      irel->r_offset += 4;
+	    }
 	  irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
 				       R_MSP430_16);
 	}
 
       /* Growing the section may mean that other
 	 conditional branches need to be fixed.  */
-      *again = TRUE;
+      *again = true;
     }
 
+    if (debug_relocs)
+      printf ("  trying code size shrinking relocs\n");
+
     for (irel = internal_relocs; irel < irelend; irel++)
       {
 	bfd_vma symval;
@@ -2083,6 +2317,15 @@ msp430_elf_relax_section (bfd * abfd, as
 	      sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
 	    symval = (isym->st_value
 		      + sym_sec->output_section->vma + sym_sec->output_offset);
+
+	    if (debug_relocs)
+	      printf ("    processing reloc at 0x%lx for local sym: %s "
+		      "st_value: 0x%lx adj value: 0x%lx\n",
+		      (long) (sec->output_offset + sec->output_section->vma
+			      + irel->r_offset),
+		      bfd_elf_string_from_elf_section
+		      (abfd, symtab_hdr->sh_link, isym->st_name),
+		      (long) isym->st_value, (long) symval);
 	  }
 	else
 	  {
@@ -2104,6 +2347,13 @@ msp430_elf_relax_section (bfd * abfd, as
 	    symval = (h->root.u.def.value
 		      + h->root.u.def.section->output_section->vma
 		      + h->root.u.def.section->output_offset);
+	    if (debug_relocs)
+	      printf ("    processing reloc at 0x%lx for global sym: %s "
+		      "st_value: 0x%lx adj value: 0x%lx\n", (long)
+		      (sec->output_offset + sec->output_section->vma
+		       + irel->r_offset),
+		      h->root.root.string, (long) h->root.u.def.value,
+		      (long) symval);
 	  }
 
 	/* For simplicity of coding, we are going to modify the section
@@ -2187,6 +2437,8 @@ msp430_elf_relax_section (bfd * abfd, as
 		elf_section_data (sec)->this_hdr.contents = contents;
 		symtab_hdr->contents = (unsigned char *) isymbuf;
 
+		if (debug_relocs)
+		  printf ("      R_MSP430_RL_PCREL -> ");
 		/* Fix the relocation's type.  */
 		if (uses_msp430x_relocs (abfd))
 		  {
@@ -2200,11 +2452,21 @@ msp430_elf_relax_section (bfd * abfd, as
 		else
 		  {
 		    if (rx->labels == 3)	/* Handle special cases.  */
-		      irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
-						   R_MSP430_2X_PCREL);
+		      {
+			irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
+						     R_MSP430_2X_PCREL);
+			if (debug_relocs)
+			  printf ("R_MSP430_2X_PCREL (shrinking with new opcode"
+				  " 0x%x)\n", rx->t0);
+		      }
 		    else
-		      irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
-						   R_MSP430_10_PCREL);
+		      {
+			irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
+						     R_MSP430_10_PCREL);
+			if (debug_relocs)
+			  printf ("R_MSP430_10_PCREL (shrinking with new opcode"
+				  " 0x%x)\n", rx->t0);
+		      }
 		  }
 
 		/* Fix the opcode right way.  */
@@ -2225,7 +2487,7 @@ msp430_elf_relax_section (bfd * abfd, as
 
 		/* That will change things, so, we should relax again.
 		   Note that this is not required, and it may be slow.  */
-		*again = TRUE;
+		*again = true;
 	      }
 	  }
 
@@ -2247,11 +2509,11 @@ msp430_elf_relax_section (bfd * abfd, as
 	       able to relax.  */
 	    if ((long) value < 1016 && (long) value > -1016)
 	      {
-		int code2;
+		int code1, code2, opcode;
 
 		/* Get the opcode.  */
 		code2 = bfd_get_16 (abfd, contents + irel->r_offset - 2);
-		if (code2 != 0x4030)
+		if (code2 != 0x4030) /* BR -> JMP */
 		  continue;
 		/* FIXME: check r4 and r3 ? */
 		/* FIXME: Handle 0x4010 as well ?  */
@@ -2266,25 +2528,79 @@ msp430_elf_relax_section (bfd * abfd, as
 		  {
 		    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
 						 R_MSP430X_10_PCREL);
+		    if (debug_relocs)
+		      printf ("      R_MSP430X_16 -> R_MSP430X_10_PCREL ");
 		  }
 		else
 		  {
 		    irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
 						 R_MSP430_10_PCREL);
+		    if (debug_relocs)
+		      printf ("      R_MSP430_16 -> R_MSP430_10_PCREL ");
 		  }
+		/* If we're trying to shrink a BR[A] after previously having
+		   grown a JMP for this reloc, then we have a sequence like
+		   this:
+		     J<cond> 1f
+		     BR[A]
+		     1:
+		   The opcode for J<cond> has the target hard-coded as 2 words
+		   ahead of the insn, instead of using a reloc.
+		   This means we cannot rely on any of the helper functions to
+		   update this hard-coded jump destination if we remove the
+		   BR[A] insn, so we must explicitly update it here.
+		   This does mean that we can remove the entire branch
+		   instruction, and invert the conditional jump, saving us 4
+		   bytes rather than only 2 if we detected this in the normal
+		   way.  */
+		code1 = bfd_get_16 (abfd, contents + irel->r_offset - 4);
+		switch (code1)
+		  {
+		    case 0x3802: opcode = 0x3401; break; /* Jl  +2 -> Jge +1 */
+		    case 0x3402: opcode = 0x3801; break; /* Jge +2 -> Jl  +1 */
+		    case 0x2c02: opcode = 0x2801; break; /* Jhs +2 -> Jlo +1 */
+		    case 0x2802: opcode = 0x2c01; break; /* Jlo +2 -> Jhs +1 */
+		    case 0x2402: opcode = 0x2001; break; /* Jeq +2 -> Jne +1 */
+		    case 0x2002: opcode = 0x2401; break; /* jne +2 -> Jeq +1 */
+		    case 0x3002: /* jn +2   */
+		      /* FIXME: There is no direct inverse of the Jn insn.  */
+		      continue;
+		    default:
+		      /* The previous opcode does not have a hard-coded jump
+			 that we added when previously relaxing, so relax the
+			 current branch as normal.  */
+		      opcode = 0x3c00;
+		      break;
+		    }
+		if (debug_relocs)
+		  printf ("(shrinking with new opcode 0x%x)\n", opcode);
 
-		/* Fix the opcode right way.  */
-		bfd_put_16 (abfd, 0x3c00, contents + irel->r_offset - 2);
-		irel->r_offset -= 2;
-
-		/* Delete bytes.  */
-		if (!msp430_elf_relax_delete_bytes (abfd, sec,
-						    irel->r_offset + 2, 2))
-		  goto error_return;
+		if (opcode != 0x3c00)
+		  {
+		    /* Invert the opcode of the conditional jump.  */
+		    bfd_put_16 (abfd, opcode, contents + irel->r_offset - 4);
+		    irel->r_offset -= 4;
+
+		    /* Delete 4 bytes - the full BR insn.  */
+		    if (!msp430_elf_relax_delete_bytes (abfd, sec,
+							irel->r_offset + 2, 4))
+		      goto error_return;
+		  }
+		else
+		  {
+		    /* Fix the opcode right way.  */
+		    bfd_put_16 (abfd, opcode, contents + irel->r_offset - 2);
+		    irel->r_offset -= 2;
+
+		    /* Delete bytes.  */
+		    if (!msp430_elf_relax_delete_bytes (abfd, sec,
+							irel->r_offset + 2, 2))
+		      goto error_return;
+		  }
 
 		/* That will change things, so, we should relax again.
 		   Note that this is not required, and it may be slow.  */
-		*again = TRUE;
+		*again = true;
 	      }
 	  }
       }
@@ -2312,30 +2628,27 @@ msp430_elf_relax_section (bfd * abfd, as
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
-error_return:
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+ error_return:
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 /* Handle an MSP430 specific section when reading an object file.
    This is called when bfd_section_from_shdr finds a section with
    an unknown type.  */
 
-static bfd_boolean
+static bool
 elf32_msp430_section_from_shdr (bfd *abfd,
 				Elf_Internal_Shdr * hdr,
 				const char *name,
@@ -2348,18 +2661,18 @@ elf32_msp430_section_from_shdr (bfd *abf
     case SHT_MSP430_ATTRIBUTES:
       return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
     default:
-      return FALSE;
+      return false;
     }
 }
 
-static bfd_boolean
+static bool
 elf32_msp430_obj_attrs_handle_unknown (bfd *abfd, int tag)
 {
   _bfd_error_handler
     /* xgettext:c-format */
     (_("warning: %pB: unknown MSPABI object attribute %d"),
      abfd, tag);
-  return TRUE;
+  return true;
 }
 
 /* Determine whether an object attribute tag takes an integer, a
@@ -2414,24 +2727,24 @@ data_model (int model)
 /* Merge MSPABI and GNU object attributes from IBFD into OBFD.
    Raise an error if there are conflicting attributes.  */
 
-static bfd_boolean
+static bool
 elf32_msp430_merge_msp430_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   obj_attribute *in_msp_attr, *in_gnu_attr;
   obj_attribute *out_msp_attr, *out_gnu_attr;
-  bfd_boolean result = TRUE;
+  bool result = true;
   static bfd * first_input_bfd = NULL;
 
   /* Skip linker created files.  */
   if (ibfd->flags & BFD_LINKER_CREATED)
-    return TRUE;
+    return true;
 
   /* LTO can create temporary files for linking which may not have an attribute
      section.  */
   if (ibfd->lto_output
       && bfd_get_section_by_name (ibfd, ".MSP430.attributes") == NULL)
-    return TRUE;
+    return true;
 
   /* If this is the first real object just copy the attributes.  */
   if (!elf_known_obj_attributes_proc (obfd)[0].i)
@@ -2445,7 +2758,7 @@ elf32_msp430_merge_msp430_attributes (bf
       out_msp_attr[0].i = 1;
 
       first_input_bfd = ibfd;
-      return TRUE;
+      return true;
     }
 
   in_msp_attr = elf_known_obj_attributes_proc (ibfd);
@@ -2461,7 +2774,7 @@ elf32_msp430_merge_msp430_attributes (bf
 	(_("error: %pB uses %s instructions but %pB uses %s"),
 	 ibfd, isa_type (in_msp_attr[OFBA_MSPABI_Tag_ISA].i),
 	 first_input_bfd, isa_type (out_msp_attr[OFBA_MSPABI_Tag_ISA].i));
-      result = FALSE;
+      result = false;
     }
 
   /* The code models must be the same.  */
@@ -2474,7 +2787,7 @@ elf32_msp430_merge_msp430_attributes (bf
 	 ibfd, code_model (in_msp_attr[OFBA_MSPABI_Tag_Code_Model].i),
 	 first_input_bfd,
 	 code_model (out_msp_attr[OFBA_MSPABI_Tag_Code_Model].i));
-      result = FALSE;
+      result = false;
     }
 
   /* The large code model is only supported by the MSP430X.  */
@@ -2485,7 +2798,7 @@ elf32_msp430_merge_msp430_attributes (bf
 	/* xgettext:c-format */
 	(_("error: %pB uses the large code model but %pB uses MSP430 instructions"),
 	 ibfd, first_input_bfd);
-      result = FALSE;
+      result = false;
     }
 
   /* The data models must be the same.  */
@@ -2498,7 +2811,7 @@ elf32_msp430_merge_msp430_attributes (bf
 	 ibfd, data_model (in_msp_attr[OFBA_MSPABI_Tag_Data_Model].i),
 	 first_input_bfd,
 	 data_model (out_msp_attr[OFBA_MSPABI_Tag_Data_Model].i));
-      result = FALSE;
+      result = false;
     }
 
   /* The small code model requires the use of the small data model.  */
@@ -2510,7 +2823,7 @@ elf32_msp430_merge_msp430_attributes (bf
 	(_("error: %pB uses the small code model but %pB uses the %s data model"),
 	 ibfd, first_input_bfd,
 	 data_model (out_msp_attr[OFBA_MSPABI_Tag_Data_Model].i));
-      result = FALSE;
+      result = false;
     }
 
   /* The large data models are only supported by the MSP430X.  */
@@ -2522,7 +2835,7 @@ elf32_msp430_merge_msp430_attributes (bf
 	(_("error: %pB uses the %s data model but %pB only uses MSP430 instructions"),
 	 ibfd, data_model (in_msp_attr[OFBA_MSPABI_Tag_Data_Model].i),
 	 first_input_bfd);
-      result = FALSE;
+      result = false;
     }
 
   /* Just ignore the data region unless the large memory model is in use.
@@ -2535,10 +2848,10 @@ elf32_msp430_merge_msp430_attributes (bf
       /* We cannot allow "lower region only" to be linked with any other
 	 values (i.e. ANY or NONE).
 	 Before this attribute existed, "ANY" region was the default.  */
-      bfd_boolean ibfd_lower_region_used
+      bool ibfd_lower_region_used
 	= (in_gnu_attr[Tag_GNU_MSP430_Data_Region].i
 	   == Val_GNU_MSP430_Data_Region_Lower);
-      bfd_boolean obfd_lower_region_used
+      bool obfd_lower_region_used
 	= (out_gnu_attr[Tag_GNU_MSP430_Data_Region].i
 	   == Val_GNU_MSP430_Data_Region_Lower);
       if (ibfd_lower_region_used != obfd_lower_region_used)
@@ -2548,7 +2861,7 @@ elf32_msp430_merge_msp430_attributes (bf
 	       "but %pB assumes data is exclusively in lower memory"),
 	     ibfd_lower_region_used ? obfd : ibfd,
 	     ibfd_lower_region_used ? ibfd : obfd);
-	  result = FALSE;
+	  result = false;
 	}
     }
 
@@ -2558,7 +2871,7 @@ elf32_msp430_merge_msp430_attributes (bf
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf32_msp430_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -2573,23 +2886,23 @@ elf32_msp430_merge_private_bfd_data (bfd
   return elf32_msp430_merge_msp430_attributes (ibfd, info);
 }
 
-static bfd_boolean
+static bool
 msp430_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
 {
   return _bfd_elf_is_local_label_name (abfd, sym->name);
 }
 
-static bfd_boolean
+static bool
 uses_large_model (bfd *abfd)
 {
   obj_attribute * attr;
 
   if (abfd->flags & BFD_LINKER_CREATED)
-    return FALSE;
+    return false;
 
   attr = elf_known_obj_attributes_proc (abfd);
   if (attr == NULL)
-    return FALSE;
+    return false;
 
   return attr[OFBA_MSPABI_Tag_Code_Model].i == 2;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-mt.c ./bfd/elf32-mt.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-mt.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-mt.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Morpho Technologies MT specific support for 32-bit ELF
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,7 +28,7 @@
 static reloc_howto_type * mt_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
 
-static bfd_boolean mt_info_to_howto_rela
+static bool mt_info_to_howto_rela
   (bfd *, arelent *, Elf_Internal_Rela *);
 
 static bfd_reloc_status_type mt_elf_relocate_hi16
@@ -38,7 +38,7 @@ static bfd_reloc_status_type mt_final_li
   (reloc_howto_type *, bfd *, asection *, bfd_byte *,
    Elf_Internal_Rela *, bfd_vma);
 
-static bfd_boolean mt_elf_relocate_section
+static int mt_elf_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
 
@@ -48,107 +48,107 @@ static reloc_howto_type mt_elf_howto_tab
   /* This reloc does nothing.  */
   HOWTO (R_MT_NONE,	      /* type */
 	  0,			  /* rightshift */
-	  3,			  /* size (0 = byte, 1 = short, 2 = long) */
+	  0,			  /* size */
 	  0,			  /* bitsize */
-	  FALSE,		  /* pc_relative */
+	  false,		  /* pc_relative */
 	  0,			  /* bitpos */
 	  complain_overflow_dont, /* complain_on_overflow */
 	  bfd_elf_generic_reloc,  /* special_function */
 	  "R_MT_NONE",		/* name */
-	  FALSE,		  /* partial_inplace */
+	  false,		  /* partial_inplace */
 	  0 ,			  /* src_mask */
 	  0,			  /* dst_mask */
-	  FALSE),		  /* pcrel_offset */
+	  false),		  /* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_MT_16,	      /* type */
 	  0,			  /* rightshift */
-	  2,			  /* size (0 = byte, 1 = short, 2 = long) */
+	  4,			  /* size */
 	  16,			  /* bitsize */
-	  FALSE,		  /* pc_relative */
+	  false,		  /* pc_relative */
 	  0,			  /* bitpos */
 	  complain_overflow_dont, /* complain_on_overflow */
 	  bfd_elf_generic_reloc,  /* special_function */
 	  "R_MT_16",		/* name */
-	  FALSE,		  /* partial_inplace */
+	  false,		  /* partial_inplace */
 	  0 ,			  /* src_mask */
 	  0xffff,		  /* dst_mask */
-	  FALSE),		  /* pcrel_offset */
+	  false),		  /* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_MT_32,	      /* type */
 	  0,			  /* rightshift */
-	  2,			  /* size (0 = byte, 1 = short, 2 = long) */
+	  4,			  /* size */
 	  32,			  /* bitsize */
-	  FALSE,		  /* pc_relative */
+	  false,		  /* pc_relative */
 	  0,			  /* bitpos */
 	  complain_overflow_dont, /* complain_on_overflow */
 	  bfd_elf_generic_reloc,  /* special_function */
 	  "R_MT_32",		/* name */
-	  FALSE,		  /* partial_inplace */
+	  false,		  /* partial_inplace */
 	  0 ,			  /* src_mask */
 	  0xffffffff,		  /* dst_mask */
-	  FALSE),		  /* pcrel_offset */
+	  false),		  /* pcrel_offset */
 
   /* A 32 bit pc-relative relocation.  */
   HOWTO (R_MT_32_PCREL,	      /* type */
 	  0,			  /* rightshift */
-	  2,			  /* size (0 = byte, 1 = short, 2 = long) */
+	  4,			  /* size */
 	  32,			  /* bitsize */
-	  TRUE,			  /* pc_relative */
+	  true,			  /* pc_relative */
 	  0,			  /* bitpos */
 	  complain_overflow_dont, /* complain_on_overflow */
 	  bfd_elf_generic_reloc,  /* special_function */
 	  "R_MT_32_PCREL",    /* name */
-	  FALSE,		  /* partial_inplace */
+	  false,		  /* partial_inplace */
 	  0 ,			  /* src_mask */
 	  0xffffffff,		  /* dst_mask */
-	  TRUE),		  /* pcrel_offset */
+	  true),		  /* pcrel_offset */
 
   /* A 16 bit pc-relative relocation.  */
   HOWTO (R_MT_PC16,	      /* type */
 	  0,			  /* rightshift */
-	  2,			  /* size (0 = byte, 1 = short, 2 = long) */
+	  4,			  /* size */
 	  16,			  /* bitsize */
-	  TRUE,			  /* pc_relative */
+	  true,			  /* pc_relative */
 	  0,			  /* bitpos */
 	  complain_overflow_signed, /* complain_on_overflow */
 	  bfd_elf_generic_reloc,  /* special_function */
 	  "R_MT_PC16",		/* name */
-	  FALSE,		  /* partial_inplace */
+	  false,		  /* partial_inplace */
 	  0,			  /* src_mask */
 	  0xffff,		  /* dst_mask */
-	  TRUE),		  /* pcrel_offset */
+	  true),		  /* pcrel_offset */
 
   /* high 16 bits of symbol value.  */
   HOWTO (R_MT_HI16,	     /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_MT_HI16",	     /* name */
-	 FALSE,			 /* partial_inplace */
+	 false,			 /* partial_inplace */
 	 0xffff0000,		/* src_mask */
 	 0xffff0000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MT_LO16,	     /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_MT_LO16",	     /* name */
-	 FALSE,			 /* partial_inplace */
+	 false,			 /* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 /* Map BFD reloc types to MT ELF reloc types.  */
@@ -227,10 +227,10 @@ mt_elf_relocate_hi16
 
 /* Set the howto pointer for a MT ELF reloc.  */
 
-static bfd_boolean
-mt_info_to_howto_rela (bfd *		    abfd,
-		       arelent *	    cache_ptr,
-		       Elf_Internal_Rela *  dst)
+static bool
+mt_info_to_howto_rela (bfd *abfd,
+		       arelent *cache_ptr,
+		       Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
@@ -241,10 +241,10 @@ mt_info_to_howto_rela (bfd *		    abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & mt_elf_howto_table [r_type];
-  return TRUE;
+  return true;
 }
 
 /* Perform a single relocation.  By default we use the standard BFD
@@ -297,7 +297,7 @@ mt_final_link_relocate
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 mt_elf_relocate_section
     (bfd *		     output_bfd ATTRIBUTE_UNUSED,
      struct bfd_link_info *  info,
@@ -350,8 +350,8 @@ mt_elf_relocate_section
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc;
-	  bfd_boolean warned, ignored;
+	  bool unresolved_reloc;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -395,7 +395,7 @@ mt_elf_relocate_section
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -417,27 +417,26 @@ mt_elf_relocate_section
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
-mt_elf_check_relocs
-    (bfd *		       abfd,
-     struct bfd_link_info *    info,
-     asection *		       sec,
-     const Elf_Internal_Rela * relocs)
-{
-  Elf_Internal_Shdr *		symtab_hdr;
-  struct elf_link_hash_entry ** sym_hashes;
-  const Elf_Internal_Rela *	rel;
-  const Elf_Internal_Rela *	rel_end;
+static bool
+mt_elf_check_relocs (bfd *abfd,
+		     struct bfd_link_info *info,
+		     asection *sec,
+		     const Elf_Internal_Rela *relocs)
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  const Elf_Internal_Rela *rel;
+  const Elf_Internal_Rela *rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -460,7 +459,7 @@ mt_elf_check_relocs
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the MACH for an e_flags value.  */
@@ -478,45 +477,44 @@ elf32_mt_machine (bfd *abfd)
   return bfd_mach_ms1;
 }
 
-static bfd_boolean
-mt_elf_object_p (bfd * abfd)
+static bool
+mt_elf_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_mt, elf32_mt_machine (abfd));
 
-  return TRUE;
+  return true;
 }
 
 /* Function to set the ELF flag bits.  */
 
-static bfd_boolean
-mt_elf_set_private_flags (bfd *    abfd,
-			   flagword flags)
+static bool
+mt_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 mt_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
-  flagword     old_flags, new_flags;
-  bfd_boolean  ok = TRUE;
+  flagword old_flags, new_flags;
+  bool ok = true;
 
   /* Check if we have the same endianness.  */
   if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   /* If they're not both mt, then merging is meaningless, so just
      don't do it.  */
   if (strcmp (ibfd->arch_info->arch_name, "mt") != 0)
-    return TRUE;
+    return true;
   if (strcmp (obfd->arch_info->arch_name, "mt") != 0)
-    return TRUE;
+    return true;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
@@ -529,13 +527,13 @@ mt_elf_merge_private_bfd_data (bfd *ibfd
   if (!elf_flags_init (obfd))
     {
       old_flags = new_flags;
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
     }
   else if ((new_flags & EF_MT_CPU_MASK) != (old_flags & EF_MT_CPU_MASK))
     {
       /* CPU has changed.  This is invalid, because MRISC, MRISC2 and
 	 MS2 are not subsets of each other.   */
-      ok = FALSE;
+      ok = false;
     }
 
   if (ok)
@@ -547,10 +545,10 @@ mt_elf_merge_private_bfd_data (bfd *ibfd
   return ok;
 }
 
-static bfd_boolean
-mt_elf_print_private_bfd_data (bfd * abfd, void * ptr)
+static bool
+mt_elf_print_private_bfd_data (bfd *abfd, void *ptr)
 {
-  FILE *   file = (FILE *) ptr;
+  FILE *file = (FILE *) ptr;
   flagword flags;
 
   BFD_ASSERT (abfd != NULL && ptr != NULL);
@@ -571,7 +569,7 @@ mt_elf_print_private_bfd_data (bfd * abf
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-nds32.c ./bfd/elf32-nds32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-nds32.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-nds32.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* NDS32-specific support for 32-bit ELF.
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
    Contributed by Andes Technology Corporation.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -62,14 +62,14 @@ static bfd_reloc_status_type nds32_elf_d
 static bfd_vma calculate_memory_address
   (bfd *, Elf_Internal_Rela *, Elf_Internal_Sym *, Elf_Internal_Shdr *);
 static int nds32_get_section_contents (bfd *, asection *,
-				       bfd_byte **, bfd_boolean);
+				       bfd_byte **, bool);
 static int nds32_get_local_syms (bfd *, asection *ATTRIBUTE_UNUSED,
 				 Elf_Internal_Sym **);
-static bfd_boolean  nds32_relax_fp_as_gp
+static bool  nds32_relax_fp_as_gp
   (struct bfd_link_info *link_info, bfd *abfd, asection *sec,
    Elf_Internal_Rela *internal_relocs, Elf_Internal_Rela *irelend,
    Elf_Internal_Sym *isymbuf);
-static bfd_boolean nds32_fag_remove_unused_fpbase
+static bool nds32_fag_remove_unused_fpbase
   (bfd *abfd, asection *sec, Elf_Internal_Rela *internal_relocs,
    Elf_Internal_Rela *irelend);
 
@@ -199,9 +199,6 @@ struct elf_nds32_link_hash_entry
 {
   struct elf_link_hash_entry root;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   /* For checking relocation type.  */
   enum elf_nds32_tls_type tls_type;
 
@@ -256,7 +253,7 @@ struct elf_nds32_obj_tdata
 #define elf32_nds32_relax_group_ptr(bfd) \
   &(elf_nds32_tdata (bfd)->relax_group)
 
-static bfd_boolean
+static bool
 nds32_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct elf_nds32_obj_tdata),
@@ -276,62 +273,62 @@ static reloc_howto_type nds32_elf_howto_
   /* This reloc does nothing.  */
   HOWTO2 (R_NDS32_NONE,		/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_NONE",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0,			/* src_mask  */
 	 0,			/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* A 16 bit absolute relocation.  */
   HOWTO2 (R_NDS32_16,		/* type  */
 	 0,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 nds32_elf_generic_reloc,/* special_function  */
 	 "R_NDS32_16",		/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffff,		/* src_mask  */
 	 0xffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* A 32 bit absolute relocation.  */
   HOWTO2 (R_NDS32_32,		/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 nds32_elf_generic_reloc,/* special_function  */
 	 "R_NDS32_32",		/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* A 20 bit address.  */
   HOWTO2 (R_NDS32_20,		/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_unsigned,/* complain_on_overflow  */
 	 nds32_elf_generic_reloc,/* special_function  */
 	 "R_NDS32_20",		/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xfffff,		/* src_mask  */
 	 0xfffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* An PC Relative 9-bit relocation, shifted by 2.
      This reloc is complicated because relocations are relative to pc & -4.
@@ -343,47 +340,47 @@ static reloc_howto_type nds32_elf_howto_
      again.  */
   HOWTO2 (R_NDS32_9_PCREL,	/* type  */
 	 1,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 8,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 nds32_elf_9_pcrel_reloc,/* special_function  */
 	 "R_NDS32_9_PCREL",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xff,			/* src_mask  */
 	 0xff,			/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* A relative 15 bit relocation, right shifted by 1.  */
   HOWTO2 (R_NDS32_15_PCREL,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 14,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_15_PCREL",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x3fff,		/* src_mask  */
 	 0x3fff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* A relative 17 bit relocation, right shifted by 1.  */
   HOWTO2 (R_NDS32_17_PCREL,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 16,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_17_PCREL",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffff,		/* src_mask  */
 	 0xffff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* A relative 25 bit relocation, right shifted by 1.  */
   /* It's not clear whether this should have partial_inplace set or not.
@@ -392,481 +389,481 @@ static reloc_howto_type nds32_elf_howto_
      again.  */
   HOWTO2 (R_NDS32_25_PCREL,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 24,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_25_PCREL",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffff,		/* src_mask  */
 	 0xffffff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* High 20 bits of address when lower 12 is or'd in.  */
   HOWTO2 (R_NDS32_HI20,		/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_hi20_reloc,	/* special_function  */
 	 "R_NDS32_HI20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
   HOWTO2 (R_NDS32_LO12S3,	/* type  */
 	 3,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 9,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_lo12_reloc,	/* special_function  */
 	 "R_NDS32_LO12S3",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000001ff,		/* src_mask  */
 	 0x000001ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
   HOWTO2 (R_NDS32_LO12S2,	/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 10,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_lo12_reloc,	/* special_function  */
 	 "R_NDS32_LO12S2",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000003ff,		/* src_mask  */
 	 0x000003ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
   HOWTO2 (R_NDS32_LO12S1,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 11,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_lo12_reloc,	/* special_function  */
 	 "R_NDS32_LO12S1",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000007ff,		/* src_mask  */
 	 0x000007ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
   HOWTO2 (R_NDS32_LO12S0,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_lo12_reloc,	/* special_function  */
 	 "R_NDS32_LO12S0",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
   HOWTO2 (R_NDS32_SDA15S3,	/* type  */
 	 3,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 nds32_elf_sda15_reloc,	/* special_function  */
 	 "R_NDS32_SDA15S3",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
   HOWTO2 (R_NDS32_SDA15S2,	/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 nds32_elf_sda15_reloc,	/* special_function  */
 	 "R_NDS32_SDA15S2",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
   HOWTO2 (R_NDS32_SDA15S1,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 nds32_elf_sda15_reloc,	/* special_function  */
 	 "R_NDS32_SDA15S1",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
   HOWTO2 (R_NDS32_SDA15S0,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 nds32_elf_sda15_reloc,	/* special_function  */
 	 "R_NDS32_SDA15S0",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* GNU extension to record C++ vtable hierarchy  */
   HOWTO2 (R_NDS32_GNU_VTINHERIT,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 0,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 NULL,			/* special_function  */
 	 "R_NDS32_GNU_VTINHERIT",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0,			/* src_mask  */
 	 0,			/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* GNU extension to record C++ vtable member usage  */
   HOWTO2 (R_NDS32_GNU_VTENTRY,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 0,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 _bfd_elf_rel_vtable_reloc_fn,/* special_function  */
 	 "R_NDS32_GNU_VTENTRY",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0,			/* src_mask  */
 	 0,			/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* A 16 bit absolute relocation.  */
   HOWTO2 (R_NDS32_16_RELA,	/* type  */
 	 0,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_16_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffff,		/* src_mask  */
 	 0xffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* A 32 bit absolute relocation.  */
   HOWTO2 (R_NDS32_32_RELA,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_32_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* A 20 bit address.  */
   HOWTO2 (R_NDS32_20_RELA,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_20_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xfffff,		/* src_mask  */
 	 0xfffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_9_PCREL_RELA,	/* type  */
 	 1,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 8,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_9_PCREL_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xff,			/* src_mask  */
 	 0xff,			/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* A relative 15 bit relocation, right shifted by 1.  */
   HOWTO2 (R_NDS32_15_PCREL_RELA,/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 14,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_15_PCREL_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x3fff,		/* src_mask  */
 	 0x3fff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* A relative 17 bit relocation, right shifted by 1.  */
   HOWTO2 (R_NDS32_17_PCREL_RELA,/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 16,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_17_PCREL_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffff,		/* src_mask  */
 	 0xffff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* A relative 25 bit relocation, right shifted by 2.  */
   HOWTO2 (R_NDS32_25_PCREL_RELA,/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 24,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_25_PCREL_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffff,		/* src_mask  */
 	 0xffffff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* High 20 bits of address when lower 16 is or'd in.  */
   HOWTO2 (R_NDS32_HI20_RELA,	/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_HI20_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
   HOWTO2 (R_NDS32_LO12S3_RELA,	/* type  */
 	 3,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 9,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_LO12S3_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000001ff,		/* src_mask  */
 	 0x000001ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
   HOWTO2 (R_NDS32_LO12S2_RELA,	/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 10,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_LO12S2_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000003ff,		/* src_mask  */
 	 0x000003ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
   HOWTO2 (R_NDS32_LO12S1_RELA,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 11,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_LO12S1_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000007ff,		/* src_mask  */
 	 0x000007ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
   HOWTO2 (R_NDS32_LO12S0_RELA,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_LO12S0_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
   HOWTO2 (R_NDS32_SDA15S3_RELA,	/* type  */
 	 3,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA15S3_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
   HOWTO2 (R_NDS32_SDA15S2_RELA,	/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA15S2_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_SDA15S1_RELA,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA15S1_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_SDA15S0_RELA,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA15S0_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* GNU extension to record C++ vtable hierarchy  */
   HOWTO2 (R_NDS32_RELA_GNU_VTINHERIT,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 0,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 NULL,			/* special_function  */
 	 "R_NDS32_RELA_GNU_VTINHERIT",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0,			/* src_mask  */
 	 0,			/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* GNU extension to record C++ vtable member usage  */
   HOWTO2 (R_NDS32_RELA_GNU_VTENTRY,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 0,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 _bfd_elf_rel_vtable_reloc_fn,/* special_function  */
 	 "R_NDS32_RELA_GNU_VTENTRY",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0,			/* src_mask  */
 	 0,			/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Like R_NDS32_20, but referring to the GOT table entry for
      the symbol.  */
   HOWTO2 (R_NDS32_GOT20,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOT20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xfffff,		/* src_mask  */
 	 0xfffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Like R_NDS32_PCREL, but referring to the procedure linkage table
      entry for the symbol.  */
   HOWTO2 (R_NDS32_25_PLTREL,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 24,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_25_PLTREL",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffff,		/* src_mask  */
 	 0xffffff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* This is used only by the dynamic linker.  The symbol should exist
      both in the object being run and in some shared library.  The
@@ -875,1220 +872,1247 @@ static reloc_howto_type nds32_elf_howto_
      run has to have the data at some particular address.  */
   HOWTO2 (R_NDS32_COPY,		/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_COPY",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Like R_NDS32_20, but used when setting global offset table
      entries.  */
   HOWTO2 (R_NDS32_GLOB_DAT,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GLOB_DAT",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Marks a procedure linkage table entry for a symbol.  */
   HOWTO2 (R_NDS32_JMP_SLOT,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_JMP_SLOT",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Used only by the dynamic linker.  When the object is run, this
      longword is set to the load address of the object, plus the
      addend.  */
   HOWTO2 (R_NDS32_RELATIVE,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_RELATIVE",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_GOTOFF,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOTOFF",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xfffff,		/* src_mask  */
 	 0xfffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* An PC Relative 20-bit relocation used when setting PIC offset
      table register.  */
   HOWTO2 (R_NDS32_GOTPC20,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOTPC20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xfffff,		/* src_mask  */
 	 0xfffff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* Like R_NDS32_HI20, but referring to the GOT table entry for
      the symbol.  */
   HOWTO2 (R_NDS32_GOT_HI20,	/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOT_HI20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_GOT_LO12,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOT_LO12",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* An PC Relative relocation used when setting PIC offset table register.
      Like R_NDS32_HI20, but referring to the GOT table entry for
      the symbol.  */
   HOWTO2 (R_NDS32_GOTPC_HI20,	/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOTPC_HI20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_GOTPC_LO12,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOTPC_LO12",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_GOTOFF_HI20,	/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOTOFF_HI20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_GOTOFF_LO12,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOTOFF_LO12",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Alignment hint for relaxable instruction.  This is used with
      R_NDS32_LABEL as a pair.  Relax this instruction from 4 bytes to 2
      in order to make next label aligned on word boundary.  */
   HOWTO2 (R_NDS32_INSN16,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_INSN16",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Alignment hint for label.  */
   HOWTO2 (R_NDS32_LABEL,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LABEL",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for unconditional call sequence  */
   HOWTO2 (R_NDS32_LONGCALL1,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGCALL1",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for conditional call sequence.  */
   HOWTO2 (R_NDS32_LONGCALL2,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGCALL2",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for conditional call sequence.  */
   HOWTO2 (R_NDS32_LONGCALL3,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGCALL3",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for unconditional branch sequence.  */
   HOWTO2 (R_NDS32_LONGJUMP1,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGJUMP1",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for conditional branch sequence.  */
   HOWTO2 (R_NDS32_LONGJUMP2,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGJUMP2",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for conditional branch sequence.  */
   HOWTO2 (R_NDS32_LONGJUMP3,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGJUMP3",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.   */
   HOWTO2 (R_NDS32_LOADSTORE,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LOADSTORE",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.  */
   HOWTO2 (R_NDS32_9_FIXED_RELA,	/* type  */
 	 0,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_9_FIXED_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000000ff,		/* src_mask  */
 	 0x000000ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.  */
   HOWTO2 (R_NDS32_15_FIXED_RELA,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_15_FIXED_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00003fff,		/* src_mask  */
 	 0x00003fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.  */
   HOWTO2 (R_NDS32_17_FIXED_RELA,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_17_FIXED_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0000ffff,		/* src_mask  */
 	 0x0000ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.  */
   HOWTO2 (R_NDS32_25_FIXED_RELA,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_25_FIXED_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00ffffff,		/* src_mask  */
 	 0x00ffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* High 20 bits of PLT symbol offset relative to PC.  */
   HOWTO2 (R_NDS32_PLTREL_HI20,	/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_PLTREL_HI20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Low 12 bits of PLT symbol offset relative to PC.  */
   HOWTO2 (R_NDS32_PLTREL_LO12,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_PLTREL_LO12",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* High 20 bits of PLT symbol offset relative to GOT (GP).  */
   HOWTO2 (R_NDS32_PLT_GOTREL_HI20,	/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_PLT_GOTREL_HI20",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Low 12 bits of PLT symbol offset relative to GOT (GP).  */
   HOWTO2 (R_NDS32_PLT_GOTREL_LO12,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_PLT_GOTREL_LO12",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Small data area 12 bits offset.  */
   HOWTO2 (R_NDS32_SDA12S2_DP_RELA,/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA12S2_DP_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Small data area 12 bits offset.  */
   HOWTO2 (R_NDS32_SDA12S2_SP_RELA,/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA12S2_SP_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
   /* Lower 12 bits of address.  */
 
   HOWTO2 (R_NDS32_LO12S2_DP_RELA,	/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 10,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_LO12S2_DP_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000003ff,		/* src_mask  */
 	 0x000003ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
   HOWTO2 (R_NDS32_LO12S2_SP_RELA,/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 10,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_LO12S2_SP_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000003ff,		/* src_mask  */
 	 0x000003ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* Lower 12 bits of address.  Special identity for or case.  */
   HOWTO2 (R_NDS32_LO12S0_ORI_RELA,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_LO12S0_ORI_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* Small data area 19 bits offset.  */
   HOWTO2 (R_NDS32_SDA16S3_RELA,	/* type  */
 	 3,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA16S3_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0000ffff,		/* src_mask  */
 	 0x0000ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
   HOWTO2 (R_NDS32_SDA17S2_RELA,	/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 17,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA17S2_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0001ffff,		/* src_mask  */
 	 0x0001ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_SDA18S1_RELA,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 18,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA18S1_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0003ffff,		/* src_mask  */
 	 0x0003ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_SDA19S0_RELA,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 19,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA19S0_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0007ffff,		/* src_mask  */
 	 0x0007ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
   HOWTO2 (R_NDS32_DWARF2_OP1_RELA,/* type  */
 	 0,			/* rightshift  */
-	 0,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 1,			/* size  */
 	 8,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_DWARF2_OP1_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xff,			/* src_mask  */
 	 0xff,			/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_DWARF2_OP2_RELA,/* type  */
 	 0,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_DWARF2_OP2_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffff,		/* src_mask  */
 	 0xffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_DWARF2_LEB_RELA,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_DWARF2_LEB_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_UPDATE_TA_RELA,/* type  */
 	 0,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_UPDATE_TA_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffff,		/* src_mask  */
 	 0xffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* Like R_NDS32_PCREL, but referring to the procedure linkage table
      entry for the symbol.  */
   HOWTO2 (R_NDS32_9_PLTREL,	/* type  */
 	 1,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 8,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_9_PLTREL",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xff,			/* src_mask  */
 	 0xff,			/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
+
   /* Low 20 bits of PLT symbol offset relative to GOT (GP).  */
   HOWTO2 (R_NDS32_PLT_GOTREL_LO20,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_PLT_GOTREL_LO20",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* low 15 bits of PLT symbol offset relative to GOT (GP)  */
   HOWTO2 (R_NDS32_PLT_GOTREL_LO15,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_PLT_GOTREL_LO15",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* Low 19 bits of PLT symbol offset relative to GOT (GP).  */
   HOWTO2 (R_NDS32_PLT_GOTREL_LO19,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 19,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_PLT_GOTREL_LO19",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0007ffff,		/* src_mask  */
 	 0x0007ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_GOT_LO15,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOT_LO15",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_GOT_LO19,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 19,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOT_LO19",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0007ffff,		/* src_mask  */
 	 0x0007ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_GOTOFF_LO15,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOTOFF_LO15",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_GOTOFF_LO19,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 19,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOTOFF_LO19",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0007ffff,		/* src_mask  */
 	 0x0007ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* GOT 15 bits offset.  */
   HOWTO2 (R_NDS32_GOT15S2_RELA,	/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOT15S2_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00007fff,		/* src_mask  */
 	 0x00007fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* GOT 17 bits offset.  */
   HOWTO2 (R_NDS32_GOT17S2_RELA,	/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 17,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_GOT17S2_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0001ffff,		/* src_mask  */
 	 0x0001ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* A 5 bit address.  */
   HOWTO2 (R_NDS32_5_RELA,	/* type  */
 	 0,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 5,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_5_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x1f,			/* src_mask  */
 	 0x1f,			/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_10_UPCREL_RELA,/* type  */
 	 1,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 9,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_unsigned,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_10_UPCREL_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x1ff,			/* src_mask  */
 	 0x1ff,			/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_SDA_FP7U2_RELA,/* type  */
 	 2,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 7,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_unsigned,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_SDA_FP7U2_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0000007f,		/* src_mask  */
 	 0x0000007f,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_WORD_9_PCREL_RELA,/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 8,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_WORD_9_PCREL_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xff,			/* src_mask  */
 	 0xff,			/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_25_ABS_RELA,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 24,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_25_ABS_RELA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffff,		/* src_mask  */
 	 0xffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* A relative 17 bit relocation for ifc, right shifted by 1.  */
   HOWTO2 (R_NDS32_17IFC_PCREL_RELA,/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 16,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_17IFC_PCREL_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffff,		/* src_mask  */
 	 0xffff,		/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* A relative unsigned 10 bit relocation for ifc, right shifted by 1.  */
   HOWTO2 (R_NDS32_10IFCU_PCREL_RELA,/* type  */
 	 1,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 9,			/* bitsize  */
-	 TRUE,			/* pc_relative  */
+	 true,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_unsigned,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_10IFCU_PCREL_RELA",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x1ff,			/* src_mask  */
 	 0x1ff,			/* dst_mask  */
-	 TRUE),			/* pcrel_offset  */
+	 true),			/* pcrel_offset  */
 
   /* Like R_NDS32_HI20, but referring to the TLS LE entry for the symbol.  */
   HOWTO2 (R_NDS32_TLS_LE_HI20,	/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_LE_HI20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_TLS_LE_LO12,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_LE_LO12",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Like R_NDS32_HI20, but referring to the TLS IE entry for the symbol.  */
   HOWTO2 (R_NDS32_TLS_IE_HI20,	/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_IE_HI20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_TLS_IE_LO12S2,/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 10,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_IE_LO12S2",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000003ff,		/* src_mask  */
 	 0x000003ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* TLS LE TP offset relocation  */
   HOWTO2 (R_NDS32_TLS_TPOFF,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_TPOFF",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* A 20 bit address.  */
   HOWTO2 (R_NDS32_TLS_LE_20,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_LE_20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xfffff,		/* src_mask  */
 	 0xfffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_TLS_LE_15S0,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_LE_15S0",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x7fff,		/* src_mask  */
 	 0x7fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_TLS_LE_15S1,	/* type  */
 	 1,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_LE_15S1",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x7fff,		/* src_mask  */
 	 0x7fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO2 (R_NDS32_TLS_LE_15S2,	/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 15,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_LE_15S2",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x7fff,		/* src_mask  */
 	 0x7fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for unconditional call sequence  */
   HOWTO2 (R_NDS32_LONGCALL4,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGCALL4",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for conditional call sequence.  */
   HOWTO2 (R_NDS32_LONGCALL5,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGCALL5",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for conditional call sequence.  */
   HOWTO2 (R_NDS32_LONGCALL6,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGCALL6",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for unconditional branch sequence.  */
   HOWTO2 (R_NDS32_LONGJUMP4,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGJUMP4",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for conditional branch sequence.  */
   HOWTO2 (R_NDS32_LONGJUMP5,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGJUMP5",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for conditional branch sequence.  */
   HOWTO2 (R_NDS32_LONGJUMP6,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGJUMP6",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Relax hint for conditional branch sequence.  */
   HOWTO2 (R_NDS32_LONGJUMP7,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LONGJUMP7",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
+  EMPTY_HOWTO (114),
 
   HOWTO2 (R_NDS32_TLS_IE_LO12,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_IE_LO12",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* Like R_NDS32_HI20, but referring to the TLS IE (PIE)
      entry for the symbol.  */
   HOWTO2 (R_NDS32_TLS_IEGP_HI20,/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_IEGP_HI20",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_TLS_IEGP_LO12,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_IEGP_LO12",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   HOWTO2 (R_NDS32_TLS_IEGP_LO12S2,/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 10,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_IEGP_LO12S2",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000003ff,		/* src_mask  */
 	 0x000003ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* TLS description relocation  */
   HOWTO2 (R_NDS32_TLS_DESC,	/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_hi20_reloc,	/* special_function  */
 	 "R_NDS32_TLS_DESC_HI20",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* TLS GD/LD description offset high part.  */
   HOWTO2 (R_NDS32_TLS_DESC_HI20,/* type  */
 	 12,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_hi20_reloc,	/* special_function  */
 	 "R_NDS32_TLS_DESC_HI20",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* TLS GD/LD description offset low part.  */
   HOWTO2 (R_NDS32_TLS_DESC_LO12,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 12,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_lo12_reloc,	/* special_function  */
 	 "R_NDS32_TLS_DESC_LO12",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x00000fff,		/* src_mask  */
 	 0x00000fff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* TLS GD/LD description offset set (movi).  */
   HOWTO2 (R_NDS32_TLS_DESC_20,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 20,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_DESC_20",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000fffff,		/* src_mask  */
 	 0x000fffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
   /* TLS GD/LD description offset set (lwi.gp).  */
   HOWTO2 (R_NDS32_TLS_DESC_SDA17S2,/* type  */
 	 2,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 17,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed,/* complain_on_overflow  */
 	 bfd_elf_generic_reloc,	/* special_function  */
 	 "R_NDS32_TLS_DESC_SDA17S2",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0001ffff,		/* src_mask  */
 	 0x0001ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 };
 
 /* Relocations used for relaxation.  */
@@ -2098,401 +2122,430 @@ static reloc_howto_type nds32_elf_howto_
 static reloc_howto_type nds32_elf_relax_howto_table[] = {
   HOWTO3 (R_NDS32_RELAX_ENTRY,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_RELAX_ENTRY",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_GOT_SUFF,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_GOT_SUFF",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_GOTOFF_SUFF,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_bitfield,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_GOTOFF_SUFF",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_PLT_GOT_SUFF,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_PLT_GOT_SUFF",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_MULCALL_SUFF,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_MULCALL_SUFF",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_PTR,		/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_PTR",		/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_PTR_COUNT,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_PTR_COUNT",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_PTR_RESOLVED,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_PTR_RESOLVED",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_PLTBLOCK,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_PLTBLOCK",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_RELAX_REGION_BEGIN,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_RELAX_REGION_BEGIN",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_RELAX_REGION_END,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_RELAX_REGION_END",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_MINUEND,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_MINUEND",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_SUBTRAHEND,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_SUBTRAHEND",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_DIFF8,	/* type  */
 	 0,			/* rightshift  */
-	 0,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 1,			/* size  */
 	 8,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_DIFF8",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x000000ff,		/* src_mask  */
 	 0x000000ff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_DIFF16,	/* type  */
 	 0,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 2,			/* size  */
 	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_DIFF16",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0x0000ffff,		/* src_mask  */
 	 0x0000ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_DIFF32,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_DIFF32",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_DIFF_ULEB128,	/* type  */
 	 0,			/* rightshift  */
-	 0,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 1,			/* size  */
 	 0,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_DIFF_ULEB128",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_DATA,		/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_DATA",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_TRAN,		/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_TRAN",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_TLS_LE_ADD,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_TLS_LE_ADD",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_TLS_LE_LS,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_TLS_LE_LS",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_EMPTY,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_EMPTY",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* TLS GD/LD description address base addition.  */
   HOWTO3 (R_NDS32_TLS_DESC_ADD,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_TLS_DESC_ADD",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* TLS GD/LD description function load.  */
   HOWTO3 (R_NDS32_TLS_DESC_FUNC,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_TLS_DESC_FUNC",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* TLS DESC resolve function call.  */
   HOWTO3 (R_NDS32_TLS_DESC_CALL,/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_TLS_DESC_CALL",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* TLS DESC variable access.  */
   HOWTO3 (R_NDS32_TLS_DESC_MEM,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_TLS_DESC_MEM",/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* TLS GD/LD description mark (@tlsdec).  */
   HOWTO3 (R_NDS32_RELAX_REMOVE,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_REMOVE",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* TLS GD/LD description mark (@tlsdec).  */
   HOWTO3 (R_NDS32_RELAX_GROUP,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_GROUP",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   HOWTO3 (R_NDS32_TLS_IEGP_LW,	/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_TLS_IEGP_LW",	/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
+
   /* LA and FLSI relaxation.  */
   HOWTO3 (R_NDS32_LSI,		/* type  */
 	 0,			/* rightshift  */
-	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 4,			/* size  */
 	 32,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_dont,/* complain_on_overflow  */
 	 nds32_elf_ignore_reloc,/* special_function  */
 	 "R_NDS32_LSI",		/* name  */
-	 FALSE,			/* partial_inplace  */
+	 false,			/* partial_inplace  */
 	 0xffffffff,		/* src_mask  */
 	 0xffffffff,		/* dst_mask  */
-	 FALSE),
+	 false),
 };
 
 static unsigned long dl_tlsdesc_lazy_trampoline[] =
@@ -2523,7 +2576,7 @@ nds32_put_trampoline (void *contents, co
 /* nds32_insertion_sort sorts an array with nmemb elements of size size.
    This prototype is the same as qsort ().  */
 
-void
+static void
 nds32_insertion_sort (void *base, size_t nmemb, size_t size,
 		      int (*compar) (const void *lhs, const void *rhs))
 {
@@ -2933,9 +2986,9 @@ nds32_elf_generic_reloc (bfd *input_bfd,
   (((x & reloc_entry->howto->src_mask) +  relocation) &	\
   reloc_entry->howto->dst_mask))
 
-  switch (reloc_entry->howto->size)
+  switch (bfd_get_reloc_size (reloc_entry->howto))
     {
-    case 1:
+    case 2:
       {
 	short x = bfd_getb16 (inplace_address);
 
@@ -2943,7 +2996,7 @@ nds32_elf_generic_reloc (bfd *input_bfd,
 	bfd_putb16 ((bfd_vma) x, inplace_address);
       }
       break;
-    case 2:
+    case 4:
       {
 	unsigned long x = bfd_getb32 (inplace_address);
 
@@ -3187,26 +3240,19 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 }
 
 static reloc_howto_type *
-bfd_elf32_bfd_reloc_type_table_lookup (enum elf_nds32_reloc_type code)
+bfd_elf32_bfd_reloc_type_table_lookup (unsigned int code)
 {
   if (code < R_NDS32_RELAX_ENTRY)
     {
-      BFD_ASSERT (code < ARRAY_SIZE (nds32_elf_howto_table));
-      return &nds32_elf_howto_table[code];
+      if (code < ARRAY_SIZE (nds32_elf_howto_table))
+	return &nds32_elf_howto_table[code];
     }
   else
     {
-      if ((size_t) (code - R_NDS32_RELAX_ENTRY)
-	  >= ARRAY_SIZE (nds32_elf_relax_howto_table))
-	{
-	  int i = code;
-	  i += 1;
-	}
-
-      BFD_ASSERT ((size_t) (code - R_NDS32_RELAX_ENTRY)
-		  < ARRAY_SIZE (nds32_elf_relax_howto_table));
-      return &nds32_elf_relax_howto_table[code - R_NDS32_RELAX_ENTRY];
+      if (code - R_NDS32_RELAX_ENTRY < ARRAY_SIZE (nds32_elf_relax_howto_table))
+	return &nds32_elf_relax_howto_table[code - R_NDS32_RELAX_ENTRY];
     }
+  return NULL;
 }
 
 static reloc_howto_type *
@@ -3227,51 +3273,51 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *ab
 
 /* Set the howto pointer for an NDS32 ELF reloc.  */
 
-static bfd_boolean
+static bool
 nds32_info_to_howto_rel (bfd *abfd, arelent *cache_ptr,
 			 Elf_Internal_Rela *dst)
 {
-  enum elf_nds32_reloc_type r_type;
+  unsigned int r_type = ELF32_R_TYPE (dst->r_info);
 
-  r_type = ELF32_R_TYPE (dst->r_info);
-  if (r_type > R_NDS32_GNU_VTENTRY)
+  cache_ptr->howto = NULL;
+  if (r_type <= R_NDS32_GNU_VTENTRY)
+    cache_ptr->howto = bfd_elf32_bfd_reloc_type_table_lookup (r_type);
+  if (cache_ptr->howto == NULL || cache_ptr->howto->name == NULL)
     {
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-
-  BFD_ASSERT (ELF32_R_TYPE (dst->r_info) <= R_NDS32_GNU_VTENTRY);
-  cache_ptr->howto = bfd_elf32_bfd_reloc_type_table_lookup (r_type);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
-nds32_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
+static bool
+nds32_info_to_howto (bfd *abfd, arelent *cache_ptr,
 		     Elf_Internal_Rela *dst)
 {
   unsigned int r_type = ELF32_R_TYPE (dst->r_info);
 
-  if ((r_type == R_NDS32_NONE)
-      || ((r_type > R_NDS32_GNU_VTENTRY)
-	  && (r_type < R_NDS32_max)))
+  cache_ptr->howto = NULL;
+  if (r_type == R_NDS32_NONE
+      || r_type > R_NDS32_GNU_VTENTRY)
+    cache_ptr->howto = bfd_elf32_bfd_reloc_type_table_lookup (r_type);
+  if (cache_ptr->howto == NULL || cache_ptr->howto->name == NULL)
     {
-      cache_ptr->howto = bfd_elf32_bfd_reloc_type_table_lookup (r_type);
-      return TRUE;
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+			  abfd, r_type);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
     }
-
-  /* xgettext:c-format */
-  _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r_type);
-  bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return true;
 }
 
 /* Support for core dump NOTE sections.
    Reference to include/linux/elfcore.h in Linux.  */
 
-static bfd_boolean
+static bool
 nds32_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -3308,7 +3354,7 @@ nds32_elf_grok_prstatus (bfd *abfd, Elf_
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   /* Make a ".reg" section.  */
@@ -3316,7 +3362,7 @@ nds32_elf_grok_prstatus (bfd *abfd, Elf_
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 nds32_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
@@ -3332,7 +3378,7 @@ nds32_elf_grok_psinfo (bfd *abfd, Elf_In
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   /* Note that for some reason, a spurious space is tacked
@@ -3346,7 +3392,7 @@ nds32_elf_grok_psinfo (bfd *abfd, Elf_In
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 /* Hook called by the linker routine which adds symbols from an object
@@ -3354,7 +3400,7 @@ nds32_elf_grok_psinfo (bfd *abfd, Elf_In
    We also keep watching for whether we need to create the sdata special
    linker sections.  */
 
-static bfd_boolean
+static bool
 nds32_elf_add_symbol_hook (bfd *abfd,
 			   struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			   Elf_Internal_Sym *sym,
@@ -3371,7 +3417,7 @@ nds32_elf_add_symbol_hook (bfd *abfd,
 	  || ELF_ST_TYPE (sym->st_info) == STT_TLS)
 	break;
 
-      /* st_value is the alignemnt constraint.
+      /* st_value is the alignment constraint.
 	 That might be its actual size if it is an array or structure.  */
       switch (sym->st_value)
 	{
@@ -3388,15 +3434,15 @@ nds32_elf_add_symbol_hook (bfd *abfd,
 	  *secp = bfd_make_section_old_way (abfd, ".scommon_d");
 	  break;
 	default:
-	  return TRUE;
+	  return true;
 	}
 
-      (*secp)->flags |= SEC_IS_COMMON;
+      (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
       *valp = sym->st_size;
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function can figure out the best location for a base register to access
@@ -3447,10 +3493,10 @@ static asection *sda_rela_sec = NULL;
 #define SDA_SECTION_NUM 10
 
 static bfd_reloc_status_type
-nds32_elf_final_sda_base (bfd *                   output_bfd,
-			  struct bfd_link_info *  info,
-			  bfd_vma *               psb,
-			  bfd_boolean             add_symbol)
+nds32_elf_final_sda_base (bfd *output_bfd,
+			  struct bfd_link_info *info,
+			  bfd_vma *psb,
+			  bool add_symbol)
 {
   int relax_fp_as_gp;
   struct elf_nds32_link_hash_table *table;
@@ -3459,7 +3505,7 @@ nds32_elf_final_sda_base (bfd *
   asection *first = NULL, *final = NULL, *temp;
   bfd_vma sda_base = 0;
 
-  h = bfd_link_hash_lookup (info->hash, "_SDA_BASE_", FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, "_SDA_BASE_", false, false, true);
   if (!h || (h->type != bfd_link_hash_defined
 	     && h->type != bfd_link_hash_defweak))
     {
@@ -3582,9 +3628,9 @@ nds32_elf_final_sda_base (bfd *
 
       if (!_bfd_generic_link_add_one_symbol
 	  (info, output_bfd, "_SDA_BASE_", BSF_GLOBAL | BSF_WEAK, first,
-	   (bfd_vma) sda_base, (const char *) NULL, FALSE,
+	   (bfd_vma) sda_base, (const char *) NULL, false,
 	   get_elf_backend_data (output_bfd)->collect, &h))
-	return FALSE;
+	return false;
 
       sda_rela_sec = first;
     }
@@ -3592,7 +3638,7 @@ nds32_elf_final_sda_base (bfd *
   /* Set _FP_BASE_ to _SDA_BASE_.  */
   table = nds32_elf_hash_table (info);
   relax_fp_as_gp = table->relax_fp_as_gp;
-  h2 = bfd_link_hash_lookup (info->hash, FP_BASE_NAME, FALSE, FALSE, FALSE);
+  h2 = bfd_link_hash_lookup (info->hash, FP_BASE_NAME, false, false, false);
   /* _SDA_BASE_ is difined in linker script.  */
   if (!first)
     {
@@ -3610,8 +3656,8 @@ nds32_elf_final_sda_base (bfd *
       if (!_bfd_generic_link_add_one_symbol
 	  (info, output_bfd, FP_BASE_NAME, BSF_GLOBAL | BSF_WEAK,
 	   first, sda_base, (const char *) NULL,
-	   FALSE, get_elf_backend_data (output_bfd)->collect, &h2))
-	return FALSE;
+	   false, get_elf_backend_data (output_bfd)->collect, &h2))
+	return false;
     }
 
   if (add_symbol)
@@ -3669,7 +3715,6 @@ nds32_elf_link_hash_newfunc (struct bfd_
       struct elf_nds32_link_hash_entry *eh;
 
       eh = (struct elf_nds32_link_hash_entry *) ret;
-      eh->dyn_relocs = NULL;
       eh->tls_type = GOT_UNKNOWN;
       eh->offset_to_gp = 0;
     }
@@ -3684,7 +3729,7 @@ nds32_elf_link_hash_table_create (bfd *a
 {
   struct elf_nds32_link_hash_table *ret;
 
-  bfd_size_type amt = sizeof (struct elf_nds32_link_hash_table);
+  size_t amt = sizeof (struct elf_nds32_link_hash_table);
 
   ret = (struct elf_nds32_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -3700,8 +3745,6 @@ nds32_elf_link_hash_table_create (bfd *a
       return NULL;
     }
 
-  ret->sdynbss = NULL;
-  ret->srelbss = NULL;
   ret->sym_ld_script = NULL;
 
   return &ret->root.root;
@@ -3710,13 +3753,13 @@ nds32_elf_link_hash_table_create (bfd *a
 /* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up
    shortcuts to them in our hash table.  */
 
-static bfd_boolean
+static bool
 create_got_section (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf_link_hash_table *ehtab;
 
   if (!_bfd_elf_create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   ehtab = elf_hash_table (info);
   ehtab->sgot = bfd_get_section_by_name (dynobj, ".got");
@@ -3732,14 +3775,14 @@ create_got_section (bfd *dynobj, struct
 				  | SEC_IN_MEMORY | SEC_LINKER_CREATED
 				  | SEC_READONLY))
       || !bfd_set_section_alignment (ehtab->srelgot, 2))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Create dynamic sections when linking against a dynamic object.  */
 
-static bfd_boolean
+static bool
 nds32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_table *ehtab;
@@ -3775,7 +3818,7 @@ nds32_elf_create_dynamic_sections (bfd *
   if (s == NULL
       || !bfd_set_section_flags (s, pltflags)
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
 
   if (bed->want_plt_sym)
     {
@@ -3786,16 +3829,16 @@ nds32_elf_create_dynamic_sections (bfd *
 
       if (!(_bfd_generic_link_add_one_symbol
 	    (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s,
-	     (bfd_vma) 0, (const char *) NULL, FALSE,
+	     (bfd_vma) 0, (const char *) NULL, false,
 	     get_elf_backend_data (abfd)->collect, &bh)))
-	return FALSE;
+	return false;
 
       h = (struct elf_link_hash_entry *) bh;
       h->def_regular = 1;
       h->type = STT_OBJECT;
 
       if (bfd_link_pic (info) && !bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   s = bfd_make_section (abfd,
@@ -3804,10 +3847,10 @@ nds32_elf_create_dynamic_sections (bfd *
   if (s == NULL
       || !bfd_set_section_flags (s, flags | SEC_READONLY)
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
   if (ehtab->sgot == NULL && !create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   for (sec = abfd->sections; sec; sec = sec->next)
     {
@@ -3825,7 +3868,7 @@ nds32_elf_create_dynamic_sections (bfd *
       if (s == NULL
 	  || !bfd_set_section_flags (s, flags | SEC_READONLY)
 	  || !bfd_set_section_alignment (s, ptralign))
-	return FALSE;
+	return false;
     }
 
   if (bed->want_dynbss)
@@ -3837,10 +3880,10 @@ nds32_elf_create_dynamic_sections (bfd *
 	 initialize them at run time.  The linker script puts the .dynbss
 	 section into the .bss section of the final image.  */
       s = bfd_make_section (abfd, ".dynbss");
-      htab->sdynbss = s;
+      htab->root.sdynbss = s;
       if (s == NULL
 	  || !bfd_set_section_flags (s, SEC_ALLOC | SEC_LINKER_CREATED))
-	return FALSE;
+	return false;
       /* The .rel[a].bss section holds copy relocs.  This section is not
 	 normally needed.  We need to create it here, though, so that the
 	 linker will map it to an output section.  We can't just create it
@@ -3856,15 +3899,15 @@ nds32_elf_create_dynamic_sections (bfd *
 	{
 	  s = bfd_make_section (abfd, (bed->default_use_rela_p
 				       ? ".rela.bss" : ".rel.bss"));
-	  htab->srelbss = s;
+	  htab->root.srelbss = s;
 	  if (s == NULL
 	      || !bfd_set_section_flags (s, flags | SEC_READONLY)
 	      || !bfd_set_section_alignment (s, ptralign))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
@@ -3878,40 +3921,6 @@ nds32_elf_copy_indirect_symbol (struct b
   edir = (struct elf_nds32_link_hash_entry *) dir;
   eind = (struct elf_nds32_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  if (ind->root.type == bfd_link_hash_indirect)
-	    abort ();
-
-	  /* Add reloc counts against the weak sym to the strong sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL;)
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect)
     {
       if (dir->got.refcount <= 0)
@@ -3924,31 +3933,13 @@ nds32_elf_copy_indirect_symbol (struct b
   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
 }
 
-
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = elf32_nds32_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 nds32_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				 struct elf_link_hash_entry *h)
 {
@@ -3986,7 +3977,7 @@ nds32_elf_adjust_dynamic_symbol (struct
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) - 1;
@@ -4000,7 +3991,7 @@ nds32_elf_adjust_dynamic_symbol (struct
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -4011,26 +4002,26 @@ nds32_elf_adjust_dynamic_symbol (struct
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (0 && info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (!readonly_dynrelocs (h))
+  if (!_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -4044,7 +4035,7 @@ nds32_elf_adjust_dynamic_symbol (struct
      same memory location for the variable.  */
 
   htab = nds32_elf_hash_table (info);
-  s = htab->sdynbss;
+  s = htab->root.sdynbss;
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_NDS32_COPY reloc to tell the dynamic linker
@@ -4055,7 +4046,7 @@ nds32_elf_adjust_dynamic_symbol (struct
     {
       asection *srel;
 
-      srel = htab->srelbss;
+      srel = htab->root.srelbss;
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -4072,7 +4063,7 @@ nds32_elf_adjust_dynamic_symbol (struct
   if (power_of_two > bfd_section_alignment (s))
     {
       if (!bfd_set_section_alignment (s, power_of_two))
-	return FALSE;
+	return false;
     }
 
   /* Define the symbol as being at this point in the section.  */
@@ -4082,23 +4073,22 @@ nds32_elf_adjust_dynamic_symbol (struct
   /* Increment the section size to make room for the symbol.  */
   s->size += h->size;
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
   struct elf_link_hash_table *ehtab;
   struct elf_nds32_link_hash_table *htab;
-  struct elf_nds32_link_hash_entry *eh;
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   /* When warning symbols are created, they **replace** the "real"
      entry in the hash table, thus we never get to see the real
@@ -4106,15 +4096,11 @@ allocate_dynrelocs (struct elf_link_hash
   if (h->root.type == bfd_link_hash_warning)
     h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
-  eh = (struct elf_nds32_link_hash_entry *) h;
-
   info = (struct bfd_link_info *) inf;
   ehtab = elf_hash_table (info);
   htab = nds32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
-
-  eh = (struct elf_nds32_link_hash_entry *) h;
+    return false;
 
   if ((htab->root.dynamic_sections_created || h->type == STT_GNU_IFUNC)
       && h->plt.refcount > 0
@@ -4125,7 +4111,7 @@ allocate_dynrelocs (struct elf_link_hash
       if (h->dynindx == -1 && !h->forced_local)
 	{
 	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
@@ -4177,7 +4163,7 @@ allocate_dynrelocs (struct elf_link_hash
   if (h->got.refcount > 0)
     {
       asection *sgot;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = elf32_nds32_hash_entry (h)->tls_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -4185,7 +4171,7 @@ allocate_dynrelocs (struct elf_link_hash
       if (h->dynindx == -1 && !h->forced_local)
 	{
 	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       sgot = elf_hash_table (info)->sgot;
@@ -4227,8 +4213,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     h->got.offset = (bfd_vma)-1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -4242,7 +4228,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL;)
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -4270,7 +4256,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  if (h->dynindx == -1 && !h->forced_local)
 	    {
 	      if (!bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -4279,19 +4265,19 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
-keep:;
+    keep:;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Add relocation REL to the end of relocation section SRELOC.  */
@@ -4313,49 +4299,21 @@ elf32_nds32_add_dynreloc (bfd *output_bf
   bfd_elf32_swap_reloca_out (output_bfd, rel, loc);
 }
 
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
-}
-
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 nds32_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				 struct bfd_link_info *info)
 {
   struct elf_nds32_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
-  bfd_boolean plt;
+  bool relocs;
   bfd *ibfd;
 
   htab = nds32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = elf_hash_table (info)->dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -4493,12 +4451,14 @@ nds32_elf_size_dynamic_sections (bfd *ou
 
       /* If we're not using lazy TLS relocations, don't generate the
 	 PLT and GOT entries they require.  */
-      if (!(info->flags & DF_BIND_NOW))
+      if ((info->flags & DF_BIND_NOW))
+	htab->root.tlsdesc_plt = 0;
+      else
 	{
-	  htab->dt_tlsdesc_got = htab->root.sgot->size;
+	  htab->root.tlsdesc_got = htab->root.sgot->size;
 	  htab->root.sgot->size += 4;
 
-	  htab->dt_tlsdesc_plt = htab->root.splt->size;
+	  htab->root.tlsdesc_plt = htab->root.splt->size;
 	  htab->root.splt->size += 4 * ARRAY_SIZE (dl_tlsdesc_lazy_trampoline);
 	}
     }
@@ -4508,8 +4468,7 @@ nds32_elf_size_dynamic_sections (bfd *ou
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  plt = FALSE;
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LINKER_CREATED) == 0)
@@ -4519,7 +4478,7 @@ nds32_elf_size_dynamic_sections (bfd *ou
 	{
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
-	  plt = s->size != 0;
+	  ;
 	}
       else if (s == elf_hash_table (info)->sgot)
 	{
@@ -4529,10 +4488,10 @@ nds32_elf_size_dynamic_sections (bfd *ou
 	{
 	  got_size += s->size;
 	}
-      else if (strncmp (bfd_section_name (s), ".rela", 5) == 0)
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0 && s != elf_hash_table (info)->srelplt)
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -4566,66 +4525,10 @@ nds32_elf_size_dynamic_sections (bfd *ou
 	 of garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
-    }
-
-
-  if (htab->root.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in nds32_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (elf_hash_table (info)->splt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (htab->tls_desc_trampoline && plt)
-	{
-	  if (htab->dt_tlsdesc_plt
-	      && (!add_dynamic_entry (DT_TLSDESC_PLT, 0)
-		  || !add_dynamic_entry (DT_TLSDESC_GOT, 0)))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->root, maybe_set_textrel,
-				    (void *) info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
+	return false;
     }
-#undef add_dynamic_entry
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 static bfd_reloc_status_type
@@ -4638,9 +4541,7 @@ nds32_relocate_contents (reloc_howto_typ
   unsigned int rightshift = howto->rightshift;
   unsigned int bitpos = howto->bitpos;
 
-  /* If the size is negative, negate RELOCATION.  This isn't very
-     general.  */
-  if (howto->size < 0)
+  if (howto->negate)
     relocation = -relocation;
 
   /* Get the value we are going to relocate.  */
@@ -4825,7 +4726,7 @@ nds32_elf_final_link_relocate (reloc_how
 				  contents + address);
 }
 
-static bfd_boolean
+static int
 nds32_elf_output_symbol_hook (struct bfd_link_info *info,
 			      const char *name,
 			      Elf_Internal_Sym *elfsym ATTRIBUTE_UNUSED,
@@ -4839,13 +4740,13 @@ nds32_elf_output_symbol_hook (struct bfd
   table = nds32_elf_hash_table (info);
   sym_ld_script = table->sym_ld_script;
   if (!sym_ld_script)
-    return TRUE;
+    return true;
 
   if (!h || !name || *name == '\0')
-    return TRUE;
+    return true;
 
   if (input_sec->flags & SEC_EXCLUDE)
-    return TRUE;
+    return true;
 
   if (!check_start_export_sym)
     {
@@ -4857,12 +4758,12 @@ nds32_elf_output_symbol_hook (struct bfd
       || h->root.type == bfd_link_hash_defweak)
     {
       if (!h->root.u.def.section->output_section)
-	return TRUE;
+	return true;
 
       if (bfd_is_const_section (input_sec))
 	source = input_sec->name;
       else
-	source = input_sec->owner->filename;
+	source = bfd_get_filename (input_sec->owner);
 
       fprintf (sym_ld_script, "\t%s = 0x%08lx;\t /* %s */\n",
 	       h->root.root.string,
@@ -4871,7 +4772,7 @@ nds32_elf_output_symbol_hook (struct bfd
 		+ h->root.u.def.section->output_offset), source);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relocate an NDS32/D ELF section.
@@ -4933,7 +4834,7 @@ gottpoff (struct bfd_link_info *info, bf
   return tp_offset;
 }
 
-static bfd_boolean
+static bool
 patch_tls_desc_to_ie (bfd_byte *contents, Elf_Internal_Rela *rel, bfd *ibfd)
 {
   /* TLS_GD/TLS_LD model #1
@@ -4968,7 +4869,7 @@ patch_tls_desc_to_ie (bfd_byte *contents
      04 00 00 01 lwi $r0,[$r0+#0x4]
      40 00 64 00 add $r0,$r0,$r25  */
 
-  bfd_boolean rz = FALSE;
+  bool rz = false;
 
   typedef struct
     {
@@ -5020,7 +4921,7 @@ patch_tls_desc_to_ie (bfd_byte *contents
       /* already patched?  */
       if ((patch[0] == (0xfff07fffu & bfd_getb32 (p + 0))) &&
 	  (patch[1] == bfd_getb32 (p + 4)))
-	rz = TRUE;
+	rz = true;
     }
   else if (mode0[0].opcode == (mode0[0].mask & bfd_getb32 (p + 0)))
     {
@@ -5030,7 +4931,7 @@ patch_tls_desc_to_ie (bfd_byte *contents
 	  bfd_putb32 (patch[0] | (regidx << 15), p + 0);
 	  bfd_putb32 (patch[1], p + 4);
 	  bfd_putb32 (patch[2], p + 8);
-	  rz = TRUE;
+	  rz = true;
 	}
     }
   else if (mode1[0].opcode == (mode1[0].mask & bfd_getb32 (p + 0)))
@@ -5041,13 +4942,13 @@ patch_tls_desc_to_ie (bfd_byte *contents
 	  bfd_putb32 (patch[0] | (regidx << 15), p + 0);
 	  bfd_putb32 (patch[1], p + 4);
 	  bfd_putb32 (patch[2], p + 8);
-	  rz = TRUE;
+	  rz = true;
 	}
     }
 
   if (!rz)
     {
-      printf ("%s: %s @ 0x%08x\n", __func__, ibfd->filename,
+      printf ("%s: %s @ 0x%08x\n", __func__, bfd_get_filename (ibfd),
 	      (int) rel->r_offset);
       BFD_ASSERT(0); /* Unsupported pattern.  */
     }
@@ -5083,7 +4984,7 @@ fls (register unsigned int x)
 #define nds32_elf_local_tlsdesc_gotent(bfd) \
   (elf_nds32_tdata (bfd)->local_tlsdesc_gotent)
 
-static bfd_boolean
+static int
 nds32_elf_relocate_section (bfd *		   output_bfd ATTRIBUTE_UNUSED,
 			    struct bfd_link_info * info,
 			    bfd *		   input_bfd,
@@ -5096,7 +4997,7 @@ nds32_elf_relocate_section (bfd *		   ou
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
   Elf_Internal_Rela *rel, *relend;
-  bfd_boolean ret = TRUE;		/* Assume success.  */
+  bool ret = true;		/* Assume success.  */
   int align = 0;
   bfd_reloc_status_type r;
   const char *errmsg = NULL;
@@ -5135,9 +5036,9 @@ nds32_elf_relocate_section (bfd *		   ou
   if ((!bfd_link_relocatable (info)))
     {
       is_SDA_BASE_set = 1;
-      r = nds32_elf_final_sda_base (output_bfd, info, &gp, TRUE);
+      r = nds32_elf_final_sda_base (output_bfd, info, &gp, true);
       if (r != bfd_reloc_ok)
-	return FALSE;
+	return false;
     }
 
   /* Do TLS model conversion once at first.  */
@@ -5177,7 +5078,7 @@ nds32_elf_relocate_section (bfd *		   ou
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      input_bfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	  continue;
 	}
 
@@ -5254,7 +5155,7 @@ nds32_elf_relocate_section (bfd *		   ou
 	  /* External symbol.  */
 	  if (bfd_link_relocatable (info))
 	    continue;
-	  bfd_boolean warned, ignored, unresolved_reloc;
+	  bool warned, ignored, unresolved_reloc;
 	  int symndx = r_symndx - symtab_hdr->sh_info;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
@@ -5440,7 +5341,7 @@ nds32_elf_relocate_section (bfd *		   ou
 	  if (h != NULL)
 	    {
 	      /* External symbol  */
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      BFD_ASSERT (off != (bfd_vma) - 1);
@@ -5557,7 +5458,7 @@ nds32_elf_relocate_section (bfd *		   ou
 		      && (!info->symbolic || !h->def_regular))))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 	      bfd_byte *loc;
 
 	      /* When generating a shared object, these relocations
@@ -5572,9 +5473,9 @@ nds32_elf_relocate_section (bfd *		   ou
 		    (input_bfd, elf_elfheader (input_bfd)->e_shstrndx,
 		     elf_section_data (input_section)->rela.hdr->sh_name);
 		  if (name == NULL)
-		    return FALSE;
+		    return false;
 
-		  BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+		  BFD_ASSERT (startswith (name, ".rela")
 			      && strcmp (bfd_section_name (input_section),
 					 name + 5) == 0);
 
@@ -5582,17 +5483,17 @@ nds32_elf_relocate_section (bfd *		   ou
 		  BFD_ASSERT (sreloc != NULL);
 		}
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset = _bfd_elf_section_offset (output_bfd,
 							 info,
 							 input_section,
 							 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) - 1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) - 2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -5615,7 +5516,7 @@ nds32_elf_relocate_section (bfd *		   ou
 			  && h->def_regular)
 		      || (bfd_link_pie (info) && h->def_regular))
 		    {
-		      relocate = TRUE;
+		      relocate = true;
 		      outrel.r_info = ELF32_R_INFO (0, R_NDS32_RELATIVE);
 		      outrel.r_addend = relocation + rel->r_addend;
 
@@ -5643,7 +5544,7 @@ nds32_elf_relocate_section (bfd *		   ou
 			       "making a shared object; recompile with -fPIC"),
 			     input_bfd, nds32_elf_howto_table[r_type].name, h->root.root.string);
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 
 		      outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
@@ -5671,7 +5572,7 @@ nds32_elf_relocate_section (bfd *		   ou
 	      _bfd_error_handler
 		(_("%pB: warning: %s unsupported in shared mode"),
 		 input_bfd, "R_NDS32_25_ABS_RELA");
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 
@@ -5711,7 +5612,7 @@ nds32_elf_relocate_section (bfd *		   ou
 
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      BFD_ASSERT (off != (bfd_vma) - 1);
@@ -5796,7 +5697,7 @@ nds32_elf_relocate_section (bfd *		   ou
 	      /* Incorrect alignment.  */
 	      _bfd_error_handler
 		(_("%pB: warning: unaligned access to GOT entry"), input_bfd);
-	      ret = FALSE;
+	      ret = false;
 	      r = bfd_reloc_dangerous;
 	      goto check_reloc;
 	    }
@@ -5827,17 +5728,17 @@ nds32_elf_relocate_section (bfd *		   ou
 	case R_NDS32_SDA15S0_RELA:
 	case R_NDS32_SDA15S0:
 	  align = 0x0;
-handle_sda:
+	handle_sda:
 	  BFD_ASSERT (sec != NULL);
 
 	  /* If the symbol is in the abs section, the out_bfd will be null.
 	     This happens when the relocation has a symbol@GOTOFF.  */
-	  r = nds32_elf_final_sda_base (output_bfd, info, &gp, FALSE);
+	  r = nds32_elf_final_sda_base (output_bfd, info, &gp, false);
 	  if (r != bfd_reloc_ok)
 	    {
 	      _bfd_error_handler
 		(_("%pB: warning: relocate SDA_BASE failed"), input_bfd);
-	      ret = FALSE;
+	      ret = false;
 	      goto check_reloc;
 	    }
 
@@ -5861,7 +5762,7 @@ handle_sda:
 		(_("%pB(%pA): warning: unaligned small data access"
 		   " of type %d"),
 		 input_bfd, input_section, r_type);
-	      ret = FALSE;
+	      ret = false;
 	      goto check_reloc;
 	    }
 	  break;
@@ -5906,7 +5807,7 @@ handle_sda:
 	    BFD_ASSERT (sgot != NULL);
 	    if (h != NULL)
 	      {
-		bfd_boolean dyn;
+		bool dyn;
 
 		off = h->got.offset;
 		BFD_ASSERT (off != (bfd_vma) -1);
@@ -5943,13 +5844,13 @@ handle_sda:
 	    /* The offset must always be a multiple of 4.  We use
 	       the least significant bit to record whether we have
 	       already processed this entry.  */
-	    bfd_boolean need_relocs = FALSE;
+	    bool need_relocs = false;
 	    srelgot = ehtab->srelgot;
 	    if ((bfd_link_pic (info) || indx != 0)
 		&& (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 		    || h->root.type != bfd_link_hash_undefweak))
 	      {
-		need_relocs = TRUE;
+		need_relocs = true;
 		BFD_ASSERT (srelgot != NULL);
 	      }
 
@@ -6155,7 +6056,7 @@ handle_sda:
 	  break;
 	}
 
-check_reloc:
+    check_reloc:
 
       if (r != bfd_reloc_ok)
 	{
@@ -6185,7 +6086,7 @@ check_reloc:
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, offset, TRUE);
+		(info, name, input_bfd, input_section, offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -6204,7 +6105,7 @@ check_reloc:
 	      errmsg = _("internal error: unknown error");
 	      /* Fall through.  */
 
-common_error:
+	    common_error:
 	      (*info->callbacks->warning) (info, errmsg, name, input_bfd,
 					   input_section, offset);
 	      break;
@@ -6222,7 +6123,7 @@ common_error:
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 nds32_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
 				 struct elf_link_hash_entry *h, Elf_Internal_Sym *sym)
 {
@@ -6431,13 +6332,13 @@ nds32_elf_finish_dynamic_symbol (bfd *ou
       || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd *dynobj;
@@ -6449,7 +6350,7 @@ nds32_elf_finish_dynamic_sections (bfd *
   ehtab = elf_hash_table (info);
   htab = nds32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = elf_hash_table (info)->dynobj;
 
@@ -6457,7 +6358,7 @@ nds32_elf_finish_dynamic_sections (bfd *
   /* A broken linker script might have discarded the dynamic sections.
      Catch this here so that we do not seg-fault later on.  */
   if (sgotplt != NULL && bfd_is_abs_section (sgotplt->output_section))
-    return FALSE;
+    return false;
   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -6484,18 +6385,18 @@ nds32_elf_finish_dynamic_sections (bfd *
 
 	    case DT_PLTGOT:
 	      /* name = ".got";  */
-	      s = ehtab->sgot->output_section;
+	      s = ehtab->sgot;
 	      goto get_vma;
 	    case DT_JMPREL:
-	      s = ehtab->srelplt->output_section;
-get_vma:
+	      s = ehtab->srelplt;
+	    get_vma:
 	      BFD_ASSERT (s != NULL);
-	      dyn.d_un.d_ptr = s->vma;
+	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 
 	    case DT_PLTRELSZ:
-	      s = ehtab->srelplt->output_section;
+	      s = ehtab->srelplt;
 	      BFD_ASSERT (s != NULL);
 	      dyn.d_un.d_val = s->size;
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
@@ -6513,7 +6414,7 @@ get_vma:
 		 about changing the DT_RELA entry.  */
 	      if (ehtab->srelplt != NULL)
 		{
-		  s = ehtab->srelplt->output_section;
+		  s = ehtab->srelplt;
 		  dyn.d_un.d_val -= s->size;
 		}
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
@@ -6522,14 +6423,14 @@ get_vma:
 	    case DT_TLSDESC_PLT:
 	      s = htab->root.splt;
 	      dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
-				+ htab->dt_tlsdesc_plt);
+				+ htab->root.tlsdesc_plt);
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 
 	    case DT_TLSDESC_GOT:
 	      s = htab->root.sgot;
 	      dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
-				+ htab->dt_tlsdesc_got);
+				+ htab->root.tlsdesc_got);
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 	    }
@@ -6592,14 +6493,14 @@ get_vma:
 	    PLT_ENTRY_SIZE;
 	}
 
-      if (htab->dt_tlsdesc_plt)
+      if (htab->root.tlsdesc_plt)
 	{
 	  /* Calculate addresses.  */
 	  asection *sgot = sgot = ehtab->sgot;
 	  bfd_vma pltgot = sgotplt->output_section->vma
 	    + sgotplt->output_offset;
 	  bfd_vma tlsdesc_got = sgot->output_section->vma + sgot->output_offset
-	    + htab->dt_tlsdesc_got;
+	    + htab->root.tlsdesc_got;
 
 	  /* Get GP offset.  */
 	  pltgot -= elf_gp (output_bfd) - 4; /* PLTGOT[1]  */
@@ -6612,7 +6513,7 @@ get_vma:
 	  dl_tlsdesc_lazy_trampoline[5] +=  0xfff & pltgot;
 
 	  /* Insert .plt.  */
-	  nds32_put_trampoline (splt->contents + htab->dt_tlsdesc_plt,
+	  nds32_put_trampoline (splt->contents + htab->root.tlsdesc_plt,
 				dl_tlsdesc_lazy_trampoline,
 				ARRAY_SIZE (dl_tlsdesc_lazy_trampoline));
 	}
@@ -6633,13 +6534,13 @@ get_vma:
       elf_section_data (sgotplt->output_section)->this_hdr.sh_entsize = 4;
     }
 
-  return TRUE;
+  return true;
 }
 
 
 /* Set the right machine number.  */
 
-static bfd_boolean
+static bool
 nds32_elf_object_p (bfd *abfd)
 {
   static unsigned int cur_arch = 0;
@@ -6670,12 +6571,12 @@ nds32_elf_object_p (bfd *abfd)
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Store the machine number in the flags field.  */
 
-static bfd_boolean
+static bool
 nds32_elf_final_write_processing (bfd *abfd)
 {
   unsigned long val;
@@ -6718,15 +6619,15 @@ nds32_elf_final_write_processing (bfd *a
 
 /* Function to keep NDS32 specific file flags.  */
 
-static bfd_boolean
+static bool
 nds32_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 static unsigned int
@@ -6757,7 +6658,7 @@ convert_e_flags (unsigned int e_flags, u
   return e_flags;
 }
 
-static bfd_boolean
+static bool
 nds32_check_vec_size (bfd *ibfd)
 {
   static unsigned int nds32_vec_size = 0;
@@ -6772,7 +6673,7 @@ nds32_check_vec_size (bfd *ibfd)
       /* Get vec_size in file.  */
       unsigned int flag_t;
 
-      nds32_get_section_contents (ibfd, sec_t, &contents, TRUE);
+      nds32_get_section_contents (ibfd, sec_t, &contents, true);
       flag_t = bfd_get_32 (ibfd, contents);
 
       /* The value could only be 4 or 16.  */
@@ -6789,20 +6690,20 @@ nds32_check_vec_size (bfd *ibfd)
 	     ibfd,
 	     nds32_vec_size == 1 ? 4 : nds32_vec_size == 2 ? 16 : 0xffffffff,
 	     (flag_t & 0x3) == 1 ? 4 : (flag_t & 0x3) == 2 ? 16 : 0xffffffff);
-	  return FALSE;
+	  return false;
 	}
       else
 	/* Only keep the first vec_size section.  */
 	sec_t->flags |= SEC_EXCLUDE;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 nds32_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -6817,13 +6718,17 @@ nds32_elf_merge_private_bfd_data (bfd *i
   flagword out_fpu_config;
   flagword in_fpu_config;
 
+  /* FIXME: What should be checked when linking shared libraries?  */
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
+
   /* TODO: Revise to use object-attributes instead.  */
   if (!nds32_check_vec_size (ibfd))
-    return FALSE;
+    return false;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   if (bfd_little_endian (ibfd) != bfd_little_endian (obfd))
     {
@@ -6831,7 +6736,7 @@ nds32_elf_merge_private_bfd_data (bfd *i
 	(_("%pB: warning: endian mismatch with previous modules"), ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* -B option in objcopy cannot work as expected. e_flags = 0 shall be
@@ -6911,9 +6816,9 @@ nds32_elf_merge_private_bfd_data (bfd *i
 	     unitialised values, which surprise surprise, correspond
 	     to the default values.  */
 	  if (bfd_get_arch_info (ibfd)->the_default)
-	    return TRUE;
+	    return true;
 
-	  elf_flags_init (obfd) = TRUE;
+	  elf_flags_init (obfd) = true;
 	  elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
 
 	  if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
@@ -6923,7 +6828,7 @@ nds32_elf_merge_private_bfd_data (bfd *i
 					bfd_get_mach (ibfd));
 	    }
 
-	  return TRUE;
+	  return true;
 	}
 
       /* Check flag compatibility.  */
@@ -6932,7 +6837,7 @@ nds32_elf_merge_private_bfd_data (bfd *i
 	  _bfd_error_handler
 	    (_("%pB: error: ABI mismatch with previous modules"), ibfd);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       if ((in_flags & EF_NDS_ARCH) != (out_flags & EF_NDS_ARCH))
@@ -6944,7 +6849,7 @@ nds32_elf_merge_private_bfd_data (bfd *i
 		 ibfd);
 
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -6978,12 +6883,12 @@ nds32_elf_merge_private_bfd_data (bfd *i
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Display the flags field.  */
 
-static bfd_boolean
+static bool
 nds32_elf_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -7007,15 +6912,14 @@ nds32_elf_print_private_bfd_data (bfd *a
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 static unsigned int
 nds32_elf_action_discarded (asection *sec)
 {
 
-  if (strncmp
-      (".gcc_except_table", sec->name, sizeof (".gcc_except_table") - 1) == 0)
+  if (startswith (sec->name, ".gcc_except_table"))
     return 0;
 
   return _bfd_elf_default_action_discarded (sec);
@@ -7079,7 +6983,7 @@ get_tls_type (enum elf_nds32_reloc_type
 /* Ensure that we have allocated bookkeeping structures for ABFD's local
    symbols.  */
 
-static bfd_boolean
+static bool
 elf32_nds32_allocate_local_sym_info (bfd *abfd)
 {
   if (elf_local_got_refcounts (abfd) == NULL)
@@ -7093,10 +6997,10 @@ elf32_nds32_allocate_local_sym_info (bfd
 	 gp_offset.  The details can refer to struct elf_nds32_obj_tdata.  */
       size = num_syms * (sizeof (bfd_signed_vma) + sizeof (char)
 			 + sizeof (bfd_vma) + sizeof (int)
-			 + sizeof (bfd_boolean) + sizeof (bfd_vma));
+			 + sizeof (bool) + sizeof (bfd_vma));
       data = bfd_zalloc (abfd, size);
       if (data == NULL)
-	return FALSE;
+	return false;
 
       elf_local_got_refcounts (abfd) = (bfd_signed_vma *) data;
       data += num_syms * sizeof (bfd_signed_vma);
@@ -7111,19 +7015,19 @@ elf32_nds32_allocate_local_sym_info (bfd
       data += num_syms * sizeof (int);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			asection *sec, const Elf_Internal_Rela *relocs)
 {
   Elf_Internal_Shdr *symtab_hdr;
-  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
+  struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
   struct elf_link_hash_table *ehtab;
@@ -7135,24 +7039,11 @@ nds32_elf_check_relocs (bfd *abfd, struc
   if (bfd_link_relocatable (info))
     {
       elf32_nds32_check_relax_group (abfd, sec);
-      return TRUE;
+      return true;
     }
 
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
-
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
-  sym_hashes_end =
-    sym_hashes + symtab_hdr->sh_size / sizeof (Elf32_External_Sym);
-  if (!elf_bad_symtab (abfd))
-    sym_hashes_end -= symtab_hdr->sh_info;
 
   ehtab = elf_hash_table (info);
   htab = nds32_elf_hash_table (info);
@@ -7212,7 +7103,7 @@ nds32_elf_check_relocs (bfd *abfd, struc
 	      if (dynobj == NULL)
 		htab->root.dynobj = dynobj = abfd;
 	      if (!create_got_section (dynobj, info))
-		return FALSE;
+		return false;
 	      break;
 
 	    default:
@@ -7249,7 +7140,7 @@ nds32_elf_check_relocs (bfd *abfd, struc
 	    {
 	      /* This is a global offset table entry for a local symbol.  */
 	      if (!elf32_nds32_allocate_local_sym_info (abfd))
-		return FALSE;
+		return false;
 
 	      BFD_ASSERT (r_symndx < symtab_hdr->sh_info);
 	      if (tls_type != GOT_TLS_LE)
@@ -7390,9 +7281,9 @@ nds32_elf_check_relocs (bfd *abfd, struc
 		    (abfd, elf_elfheader (abfd)->e_shstrndx,
 		     elf_section_data (sec)->rela.hdr->sh_name);
 		  if (name == NULL)
-		    return FALSE;
+		    return false;
 
-		  BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+		  BFD_ASSERT (startswith (name, ".rela")
 			      && strcmp (bfd_section_name (sec),
 					 name + 5) == 0);
 
@@ -7409,7 +7300,7 @@ nds32_elf_check_relocs (bfd *abfd, struc
 		      if (sreloc == NULL
 			  || !bfd_set_section_flags (sreloc, flags)
 			  || !bfd_set_section_alignment (sreloc, 2))
-			return FALSE;
+			return false;
 
 		      elf_section_type (sreloc) = SHT_RELA;
 		    }
@@ -7419,21 +7310,22 @@ nds32_elf_check_relocs (bfd *abfd, struc
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
-		head = &((struct elf_nds32_link_hash_entry *) h)->dyn_relocs;
+		head = &h->dyn_relocs;
 	      else
 		{
 		  asection *s;
 		  void *vpp;
 
 		  Elf_Internal_Sym *isym;
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx);
+		  isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
+						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  /* Track dynamic relocs needed for local syms too.  */
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
-		    return FALSE;
+		    return false;
 
 		  vpp = &elf_section_data (s)->local_dynrel;
 		  head = (struct elf_dyn_relocs **) vpp;
@@ -7442,10 +7334,10 @@ nds32_elf_check_relocs (bfd *abfd, struc
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof (*p);
+		  size_t amt = sizeof (*p);
 		  p = (struct elf_dyn_relocs *) bfd_alloc (dynobj, amt);
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -7505,23 +7397,23 @@ nds32_elf_check_relocs (bfd *abfd, struc
 	case R_NDS32_RELA_GNU_VTINHERIT:
 	case R_NDS32_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_NDS32_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 	case R_NDS32_RELA_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write VAL in uleb128 format to P, returning a pointer to the
@@ -8281,7 +8173,7 @@ nds32_convert_32_to_16 (bfd *abfd, uint3
       goto done;
     }
 
-done:
+ done:
   /* Bit-15 of insn16 should be set for a valid instruction.  */
   if ((insn16 & 0x8000) == 0)
     return 0;
@@ -8603,7 +8495,7 @@ nds32_convert_16_to_32 (bfd *abfd, uint1
       goto done;
     }
 
-done:
+ done:
   if (insn & 0x80000000)
     return 0;
 
@@ -8613,7 +8505,7 @@ done:
 }
 
 
-static bfd_boolean
+static bool
 is_sda_access_insn (unsigned long insn)
 {
   switch (N32_OP6 (insn))
@@ -8630,11 +8522,11 @@ is_sda_access_insn (unsigned long insn)
     case N32_OP6_LDC:
     case N32_OP6_SWC:
     case N32_OP6_SDC:
-      return TRUE;
+      return true;
     default:
       ;
     }
-  return FALSE;
+  return false;
 }
 
 static unsigned long
@@ -8836,12 +8728,12 @@ is_16bit_NOP (bfd *abfd ATTRIBUTE_UNUSED
   unsigned short insn16;
 
   if (!(rel->r_addend & R_NDS32_INSN16_CONVERT_FLAG))
-    return FALSE;
+    return false;
   contents = elf_section_data (sec)->this_hdr.contents;
   insn16 = bfd_getb16 (contents + rel->r_offset);
   if (insn16 == NDS32_NOP16)
-    return TRUE;
-  return FALSE;
+    return true;
+  return false;
 }
 
 /* It checks whether the instruction could be converted to
@@ -8869,12 +8761,12 @@ is_convert_32_to_16 (bfd *abfd, asection
   bfd_vma offset;
 
   if (reloc->r_offset + 4 > sec->size)
-    return FALSE;
+    return false;
 
   offset = reloc->r_offset;
 
-  if (!nds32_get_section_contents (abfd, sec, &contents, TRUE))
-    return FALSE;
+  if (!nds32_get_section_contents (abfd, sec, &contents, true))
+    return false;
   insn = bfd_getb32 (contents + offset);
 
   if (nds32_convert_32_to_16 (abfd, insn, insn16, NULL))
@@ -8882,11 +8774,11 @@ is_convert_32_to_16 (bfd *abfd, asection
   else if (special_convert_32_to_16 (insn, insn16, reloc))
     convert_type = SPECIAL_32_TO_16;
   else
-    return FALSE;
+    return false;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   if (!nds32_get_local_syms (abfd, sec, &isymbuf))
-    return FALSE;
+    return false;
 
   /* Find the first relocation of the same relocation-type,
      so we iteratie them forward.  */
@@ -8904,7 +8796,7 @@ is_convert_32_to_16 (bfd *abfd, asection
 	  off = calculate_offset (abfd, sec, pc_rel, isymbuf, symtab_hdr);
 	  if (off >= ACCURATE_8BIT_S1 || off < -ACCURATE_8BIT_S1
 	      || off == 0)
-	    return FALSE;
+	    return false;
 	  break;
 	}
       else if (ELF32_R_TYPE (pc_rel->r_info) == R_NDS32_20_RELA)
@@ -8915,7 +8807,7 @@ is_convert_32_to_16 (bfd *abfd, asection
 	  /* mem_addr is unsigned, but the value should
 	     be between [-16, 15].  */
 	  if ((mem_addr + 0x10) >> 5)
-	    return FALSE;
+	    return false;
 	  break;
 	}
       else if ((ELF32_R_TYPE (pc_rel->r_info) == R_NDS32_TLS_LE_20)
@@ -8923,7 +8815,7 @@ is_convert_32_to_16 (bfd *abfd, asection
 	{
 	  /* It never happen movi to movi55 for R_NDS32_TLS_LE_20,
 	     because it can be relaxed to addi for TLS_LE_ADD.  */
-	  return FALSE;
+	  return false;
 	}
       else if ((ELF32_R_TYPE (pc_rel->r_info) == R_NDS32_SDA15S2_RELA
 		|| ELF32_R_TYPE (pc_rel->r_info) == R_NDS32_SDA17S2_RELA)
@@ -8944,18 +8836,18 @@ is_convert_32_to_16 (bfd *abfd, asection
 	{
 	  /* Prevent unresolved addi instruction translate
 	     to addi45 or addi333.  */
-	  return FALSE;
+	  return false;
 	}
       else if ((ELF32_R_TYPE (pc_rel->r_info) == R_NDS32_17IFC_PCREL_RELA))
 	{
 	  off = calculate_offset (abfd, sec, pc_rel, isymbuf, symtab_hdr);
 	  if (off >= ACCURATE_U9BIT_S1 || off <= 0)
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -9182,7 +9074,7 @@ get_nds32_elf_blank_total (nds32_elf_bla
     return blank_t->total_size + blank_t->size;
 }
 
-static bfd_boolean
+static bool
 insert_nds32_elf_blank (nds32_elf_blank_t **blank_p, bfd_vma addr, bfd_vma len)
 {
   nds32_elf_blank_t *blank_t, *blank_t2;
@@ -9190,7 +9082,7 @@ insert_nds32_elf_blank (nds32_elf_blank_
   if (!*blank_p)
     {
       *blank_p = create_nds32_elf_blank (addr, len);
-      return *blank_p ? TRUE : FALSE;
+      return *blank_p != NULL;
     }
 
   blank_t = search_nds32_elf_blank (*blank_p, addr);
@@ -9199,13 +9091,13 @@ insert_nds32_elf_blank (nds32_elf_blank_
     {
       blank_t = create_nds32_elf_blank (addr, len);
       if (!blank_t)
-	return FALSE;
+	return false;
       while ((*blank_p)->prev != NULL)
 	*blank_p = (*blank_p)->prev;
       blank_t->next = *blank_p;
       (*blank_p)->prev = blank_t;
       (*blank_p) = blank_t;
-      return TRUE;
+      return true;
     }
 
   if (addr < blank_t->offset + blank_t->size)
@@ -9218,7 +9110,7 @@ insert_nds32_elf_blank (nds32_elf_blank_
     {
       blank_t2 = create_nds32_elf_blank (addr, len);
       if (!blank_t2)
-	return FALSE;
+	return false;
       if (blank_t->next)
 	{
 	  blank_t->next->prev = blank_t2;
@@ -9229,17 +9121,17 @@ insert_nds32_elf_blank (nds32_elf_blank_
       *blank_p = blank_t2;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 insert_nds32_elf_blank_recalc_total (nds32_elf_blank_t **blank_p, bfd_vma addr,
 				     bfd_vma len)
 {
   nds32_elf_blank_t *blank_t;
 
   if (!insert_nds32_elf_blank (blank_p, addr, len))
-    return FALSE;
+    return false;
 
   blank_t = *blank_p;
 
@@ -9255,7 +9147,7 @@ insert_nds32_elf_blank_recalc_total (nds
       blank_t = blank_t->next;
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -9278,7 +9170,7 @@ calc_nds32_blank_total (nds32_elf_blank_
     }
 }
 
-static bfd_boolean
+static bool
 nds32_elf_relax_delete_blanks (bfd *abfd, asection *sec,
 			       nds32_elf_blank_t *blank_p)
 {
@@ -9323,7 +9215,7 @@ nds32_elf_relax_delete_blanks (bfd *abfd
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   if (!nds32_get_local_syms (abfd, sec, &isym))
-    return FALSE;
+    return false;
 
   if (isym == NULL)
     {
@@ -9333,7 +9225,7 @@ nds32_elf_relax_delete_blanks (bfd *abfd
     }
 
   if (isym == NULL || symtab_hdr->sh_info == 0)
-    return FALSE;
+    return false;
 
   blank_t = blank_head;
   calc_nds32_blank_total (blank_head);
@@ -9344,7 +9236,7 @@ nds32_elf_relax_delete_blanks (bfd *abfd
 
       /* Relocations MUST be kept in memory, because relaxation adjust them.  */
       internal_relocs = _bfd_elf_link_read_relocs (abfd, sect, NULL, NULL,
-						   TRUE /* keep_memory */);
+						   true /* keep_memory */);
       irelend = internal_relocs + sect->reloc_count;
 
       blank_t = blank_head;
@@ -9353,7 +9245,8 @@ nds32_elf_relax_delete_blanks (bfd *abfd
       if (!(sect->flags & SEC_RELOC))
 	continue;
 
-      nds32_get_section_contents (abfd, sect, &contents, TRUE);
+      contents = NULL;
+      nds32_get_section_contents (abfd, sect, &contents, true);
 
       for (irel = internal_relocs; irel < irelend; irel++)
 	{
@@ -9448,7 +9341,7 @@ nds32_elf_relax_delete_blanks (bfd *abfd
 	      if (p < endp)
 		*p |= 0x80;
 	    }
-done_adjust_diff:
+	done_adjust_diff:
 
 	  if (sec == sect)
 	    {
@@ -9595,27 +9488,27 @@ done_adjust_diff:
       remove_nds32_elf_blank (blank_t);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Get the contents of a section.  */
 
 static int
 nds32_get_section_contents (bfd *abfd, asection *sec,
-			    bfd_byte **contents_p, bfd_boolean cache)
+			    bfd_byte **contents_p, bool cache)
 {
   /* Get the section contents.  */
   if (elf_section_data (sec)->this_hdr.contents != NULL)
     *contents_p = elf_section_data (sec)->this_hdr.contents;
   else
     {
-      if (!bfd_malloc_and_get_section (abfd, sec, contents_p))
-	return FALSE;
+      if (!bfd_get_full_section_contents (abfd, sec, contents_p))
+	return false;
       if (cache)
 	elf_section_data (sec)->this_hdr.contents = *contents_p;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Get the contents of the internal symbol of abfd.  */
@@ -9637,12 +9530,12 @@ nds32_get_local_syms (bfd *abfd, asectio
 					     symtab_hdr->sh_info, 0,
 					     NULL, NULL, NULL);
 	  if (*isymbuf_p == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
   symtab_hdr->contents = (bfd_byte *) (*isymbuf_p);
 
-  return TRUE;
+  return true;
 }
 
 /* Range of small data.  */
@@ -9666,11 +9559,11 @@ nds32_elf_insn_size (bfd *abfd ATTRIBUTE
    to do gp relaxation.  */
 
 static void
-relax_range_measurement (bfd *abfd)
+relax_range_measurement (bfd *abfd, struct bfd_link_info *link_info)
 {
   asection *sec_f, *sec_b;
   /* For upper bound.   */
-  bfd_vma maxpgsz = get_elf_backend_data (abfd)->maxpagesize;
+  bfd_vma maxpgsz;
   bfd_vma align;
   static int decide_relax_range = 0;
   int i;
@@ -9702,6 +9595,10 @@ relax_range_measurement (bfd *abfd)
       sec_b = sec_b->next;
     }
 
+  if (link_info != NULL)
+    maxpgsz = link_info->maxpagesize;
+  else
+    maxpgsz = get_elf_backend_data (abfd)->maxpagesize;
   /* I guess we can not determine the section before
      gp located section, so we assume the align is max page size.  */
   for (i = 0; i < range_number; i++)
@@ -9726,7 +9623,7 @@ static const char * unrecognized_reloc_m
 
 /* Relax LONGCALL1 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longcall1 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -9775,7 +9672,7 @@ nds32_elf_relax_longcall1 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGCALL1",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -9785,7 +9682,7 @@ nds32_elf_relax_longcall1 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_24BIT_S1
       || foff >= CONSERVATIVE_24BIT_S1)
-    return FALSE;
+    return false;
 
   /* Relax to: jal symbol; 25_PCREL.  */
   /* For simplicity of coding, we are going to modify the section
@@ -9820,13 +9717,13 @@ nds32_elf_relax_longcall1 (bfd *abfd, as
       lo_irelfn->r_addend = R_NDS32_INSN16_CONVERT_FLAG;
       *insn_len += 2;
     }
-  return TRUE;
+  return true;
 }
 
 #define CONVERT_CONDITION_CALL(insn) (((insn) & 0xffff0000) ^ 0x90000)
 /* Relax LONGCALL2 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longcall2 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -9855,7 +9752,7 @@ nds32_elf_relax_longcall2 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGCALL2",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   insn = bfd_getb32 (contents + laddr);
@@ -9866,7 +9763,7 @@ nds32_elf_relax_longcall2 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_16BIT_S1
       || foff >= CONSERVATIVE_16BIT_S1)
-    return FALSE;
+    return false;
 
   /* Relax to	bgezal   rt, label ; 17_PCREL
      or		bltzal   rt, label ; 17_PCREL */
@@ -9900,12 +9797,12 @@ nds32_elf_relax_longcall2 (bfd *abfd, as
   bfd_putb32 (insn, contents + irel->r_offset);
 
   *insn_len = 4;
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGCALL3 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longcall3 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -9960,7 +9857,7 @@ nds32_elf_relax_longcall3 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGCALL3",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -9969,7 +9866,7 @@ nds32_elf_relax_longcall3 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_24BIT_S1
       || foff >= CONSERVATIVE_24BIT_S1)
-    return FALSE;
+    return false;
 
   insn = bfd_getb32 (contents + laddr);
   if (foff >= -CONSERVATIVE_16BIT_S1 && foff < CONSERVATIVE_16BIT_S1)
@@ -10037,12 +9934,12 @@ nds32_elf_relax_longcall3 (bfd *abfd, as
 	  insn_len += 2;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGJUMP1 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longjump1 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -10093,7 +9990,7 @@ nds32_elf_relax_longjump1 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGJUMP1",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -10102,7 +9999,7 @@ nds32_elf_relax_longjump1 (bfd *abfd, as
   if (foff == 0
       || foff >= CONSERVATIVE_24BIT_S1
       || foff < -CONSERVATIVE_24BIT_S1)
-    return FALSE;
+    return false;
 
   if (insn16_on
       && foff >= -ACCURATE_8BIT_S1
@@ -10145,7 +10042,7 @@ nds32_elf_relax_longjump1 (bfd *abfd, as
       lo_irelfn->r_addend = R_NDS32_INSN16_CONVERT_FLAG;
       *insn_len += 2;
     }
-  return TRUE;
+  return true;
 }
 
 /* Revert condition branch.  This function does not check if the input
@@ -10237,7 +10134,7 @@ nds32_elf_convert_branch (uint16_t insn1
 
 /* Relax LONGJUMP2 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longjump2 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -10301,7 +10198,7 @@ nds32_elf_relax_longjump2 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGJUMP2",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -10309,7 +10206,7 @@ nds32_elf_relax_longjump2 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_16BIT_S1
       || foff >= CONSERVATIVE_16BIT_S1)
-    return FALSE;
+    return false;
 
   /* Get the all corresponding instructions.  */
   if (first_size == 4)
@@ -10367,7 +10264,7 @@ nds32_elf_relax_longjump2 (bfd *abfd, as
       cond_reloc = R_NDS32_NONE;
     }
   else
-    return FALSE;
+    return false;
 
   /* Set all relocations.  */
   irel->r_info = ELF32_R_INFO (ELF32_R_SYM (i2_irelfn->r_info), reloc);
@@ -10390,12 +10287,12 @@ nds32_elf_relax_longjump2 (bfd *abfd, as
   else
     i2_irelfn->r_info = ELF32_R_INFO (ELF32_R_SYM (i2_irelfn->r_info),
 				      R_NDS32_NONE);
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGJUMP3 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longjump3 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -10494,7 +10391,7 @@ nds32_elf_relax_longjump3 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGJUMP3",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -10503,7 +10400,7 @@ nds32_elf_relax_longjump3 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_24BIT_S1
       || foff >= CONSERVATIVE_24BIT_S1)
-    return FALSE;
+    return false;
 
   /* Get the all corresponding instructions.  */
   if (first_size == 4)
@@ -10604,7 +10501,7 @@ nds32_elf_relax_longjump3 (bfd *abfd, as
       cond_reloc = R_NDS32_25_PLTREL;
     }
     else
-      return FALSE;
+      return false;
 
     if (cond_removed == 1)
       {
@@ -10639,12 +10536,12 @@ nds32_elf_relax_longjump3 (bfd *abfd, as
   else
     lo_irelfn->r_info = ELF32_R_INFO (ELF32_R_SYM (lo_irelfn->r_info),
 				      R_NDS32_NONE);
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGCALL4 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longcall4 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -10674,7 +10571,7 @@ nds32_elf_relax_longcall4 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGCALL4",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -10684,7 +10581,7 @@ nds32_elf_relax_longcall4 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_24BIT_S1
       || foff >= CONSERVATIVE_24BIT_S1)
-    return FALSE;
+    return false;
 
   /* Relax to: jal symbol; 25_PCREL.  */
   /* For simplicity of coding, we are going to modify the section
@@ -10704,12 +10601,12 @@ nds32_elf_relax_longcall4 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGCALL4",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
   /* Check these is enough space to insert jal in R_NDS32_EMPTY.  */
   insn = bfd_getb32 (contents + irel->r_addend);
   if (insn & 0x80000000)
-    return FALSE;
+    return false;
 
   /* Replace the long call with a jal.  */
   em_irel->r_info = ELF32_R_INFO (ELF32_R_SYM (em_irel->r_info),
@@ -10739,12 +10636,12 @@ nds32_elf_relax_longcall4 (bfd *abfd, as
     insn_irel->r_info =
       ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_NDS32_NONE);
 
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGCALL5 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longcall5 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -10774,7 +10671,7 @@ nds32_elf_relax_longcall5 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGCALL5",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -10783,7 +10680,7 @@ nds32_elf_relax_longcall5 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_16BIT_S1
       || foff >= CONSERVATIVE_16BIT_S1)
-    return FALSE;
+    return false;
 
   /* Relax to	bgezal   rt, label ; 17_PCREL
      or		bltzal   rt, label ; 17_PCREL.  */
@@ -10815,12 +10712,12 @@ nds32_elf_relax_longcall5 (bfd *abfd, as
   cond_irel->r_info =
     ELF32_R_INFO (ELF32_R_SYM (cond_irel->r_info), R_NDS32_NONE);
 
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGCALL6 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longcall6 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -10851,7 +10748,7 @@ nds32_elf_relax_longcall6 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGCALL6",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -10860,12 +10757,12 @@ nds32_elf_relax_longcall6 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_24BIT_S1
       || foff >= CONSERVATIVE_24BIT_S1)
-    return FALSE;
+    return false;
 
   /* Check these is enough space to insert jal in R_NDS32_EMPTY.  */
   insn = bfd_getb32 (contents + irel->r_addend);
   if (insn & 0x80000000)
-    return FALSE;
+    return false;
 
   insn = bfd_getb32 (contents + laddr);
   if (foff >= -CONSERVATIVE_16BIT_S1 && foff < CONSERVATIVE_16BIT_S1)
@@ -10889,7 +10786,7 @@ nds32_elf_relax_longcall6 (bfd *abfd, as
 	{
 	  _bfd_error_handler (unrecognized_reloc_msg, abfd,
 			      "R_NDS32_LONGCALL6", (uint64_t) irel->r_offset);
-	  return FALSE;
+	  return false;
 	}
       cond_irel->r_addend = 1;
 
@@ -10938,7 +10835,7 @@ nds32_elf_relax_longcall6 (bfd *abfd, as
 	{
 	  _bfd_error_handler (unrecognized_reloc_msg, abfd,
 			      "R_NDS32_LONGCALL6", (uint64_t) irel->r_offset);
-	  return FALSE;
+	  return false;
 	}
       cond_irel->r_addend = 1;
 
@@ -10949,12 +10846,12 @@ nds32_elf_relax_longcall6 (bfd *abfd, as
 	cond_irel->r_info =
 	  ELF32_R_INFO (ELF32_R_SYM (cond_irel->r_info), R_NDS32_NONE);
     }
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGJUMP4 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longjump4 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   bfd_byte *contents, Elf_Internal_Sym *isymbuf,
@@ -10987,7 +10884,7 @@ nds32_elf_relax_longjump4 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGJUMP4",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -10996,7 +10893,7 @@ nds32_elf_relax_longjump4 (bfd *abfd, as
   if (foff == 0
       || foff >= CONSERVATIVE_24BIT_S1
       || foff < -CONSERVATIVE_24BIT_S1)
-    return FALSE;
+    return false;
 
   /* Convert it to "j label", it may be converted to j8 in the final
      pass of relaxation.  Therefore, we do not consider this currently.  */
@@ -11009,7 +10906,7 @@ nds32_elf_relax_longjump4 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGJUMP4",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   em_irel->r_info =
@@ -11033,12 +10930,12 @@ nds32_elf_relax_longjump4 (bfd *abfd, as
 	ELF32_R_INFO (ELF32_R_SYM (hi_irel->r_info), R_NDS32_NONE);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGJUMP5 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longjump5 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   int *seq_len, bfd_byte *contents,
@@ -11082,7 +10979,7 @@ nds32_elf_relax_longjump5 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGJUMP5",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -11091,7 +10988,7 @@ nds32_elf_relax_longjump5 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_16BIT_S1
       || foff >= CONSERVATIVE_16BIT_S1)
-    return FALSE;
+    return false;
 
   /* Get the all corresponding instructions.  */
   insn = bfd_getb32 (contents + laddr);
@@ -11127,7 +11024,7 @@ nds32_elf_relax_longjump5 (bfd *abfd, as
       reloc = R_NDS32_WORD_9_PCREL_RELA;
     }
   else
-    return FALSE;
+    return false;
 
   /* Set all relocations.  */
   cond_irel->r_info = ELF32_R_INFO (ELF32_R_SYM (cond_irel->r_info), reloc);
@@ -11157,12 +11054,12 @@ nds32_elf_relax_longjump5 (bfd *abfd, as
     }
   *insn_len = 0;
 
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGJUMP6 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longjump6 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   int *seq_len, bfd_byte *contents,
@@ -11210,7 +11107,7 @@ nds32_elf_relax_longjump6 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGJUMP6",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -11219,7 +11116,7 @@ nds32_elf_relax_longjump6 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_24BIT_S1
       || foff >= CONSERVATIVE_24BIT_S1)
-    return FALSE;
+    return false;
 
   insn = bfd_getb32 (contents + laddr);
   /* Check instruction size.  */
@@ -11277,7 +11174,7 @@ nds32_elf_relax_longjump6 (bfd *abfd, as
       bfd_putb32 (insn, contents + em_irel->r_offset);
     }
   else
-    return FALSE;
+    return false;
 
   /* Set all relocations.  */
   em_irel->r_info = ELF32_R_INFO (ELF32_R_SYM (em_irel->r_info), reloc);
@@ -11337,12 +11234,12 @@ nds32_elf_relax_longjump6 (bfd *abfd, as
 				   R_NDS32_LONGJUMP5);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relax LONGJUMP7 relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_longjump7 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
 			   int *seq_len, bfd_byte *contents,
@@ -11379,7 +11276,7 @@ nds32_elf_relax_longjump7 (bfd *abfd, as
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LONGJUMP7",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   /* Get the value of the symbol referred to by the reloc.  */
@@ -11388,7 +11285,7 @@ nds32_elf_relax_longjump7 (bfd *abfd, as
   if (foff == 0
       || foff < -CONSERVATIVE_8BIT_S1
       || foff >= CONSERVATIVE_8BIT_S1)
-    return FALSE;
+    return false;
 
   /* Get the first instruction for its size.  */
   insn = bfd_getb32 (contents + laddr);
@@ -11437,7 +11334,7 @@ nds32_elf_relax_longjump7 (bfd *abfd, as
     }
   *insn_len = 0;
 
-  return TRUE;
+  return true;
 }
 
 /* We figure out and reassign the best gp value in nds32_elf_final_sda_base
@@ -11445,16 +11342,16 @@ nds32_elf_relax_longjump7 (bfd *abfd, as
    the truncated to fit errors for the the converted gp instructions.
    Therefore, we must reserve the minimum but safe enough size to prevent it.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_guard (bfd_vma *access_addr, bfd_vma local_sda, asection *sec,
-		       Elf_Internal_Rela *irel, bfd_boolean *again,
-		       bfd_boolean init,
+		       Elf_Internal_Rela *irel, bool *again,
+		       bool init,
 		       struct elf_nds32_link_hash_table *table,
 		       Elf_Internal_Sym *isymbuf, Elf_Internal_Shdr *symtab_hdr)
 
 {
   int offset_to_gp;
-  static bfd_boolean sec_pass = FALSE;
+  static bool sec_pass = false;
   static asection *first_sec = NULL, *sym_sec;
   /* Record the number of instructions which may be removed.  */
   static int count = 0, record_count;
@@ -11468,7 +11365,7 @@ nds32_elf_relax_guard (bfd_vma *access_a
 
   /* Force doing relaxation when hyper-relax is high.  */
   if (table->hyper_relax == 2)
-    return TRUE;
+    return true;
 
   /* Do not relax the load/store patterns for the first
      relax round.  */
@@ -11480,13 +11377,13 @@ nds32_elf_relax_guard (bfd_vma *access_a
 	{
 	  record_count = count;
 	  count = 0;
-	  sec_pass = TRUE;
+	  sec_pass = true;
 	}
 
       if (!sec_pass)
-	*again = TRUE;
+	*again = true;
 
-      return TRUE;
+      return true;
     }
 
   /* Generally, _SDA_BASE_ is fixed or smaller. But the large
@@ -11516,7 +11413,7 @@ nds32_elf_relax_guard (bfd_vma *access_a
 	{
 	  /* Forbid doing relaxation when hyper-relax is low.  */
 	  if (table->hyper_relax == 0)
-	    return FALSE;
+	    return false;
 
 	  offset_to_gp = *access_addr - local_sda;
 	  if (elf32_nds32_hash_entry (h)->offset_to_gp == 0)
@@ -11538,7 +11435,7 @@ nds32_elf_relax_guard (bfd_vma *access_a
     {
       /* Local symbols.  */
       if (!elf32_nds32_allocate_local_sym_info (abfd))
-	return FALSE;
+	return false;
       isym = isymbuf + r_symndx;
 
       sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
@@ -11546,7 +11443,7 @@ nds32_elf_relax_guard (bfd_vma *access_a
 	{
 	  /* Forbid doing relaxation when hyper-relax is low.  */
 	  if (table->hyper_relax == 0)
-	    return FALSE;
+	    return false;
 
 	  offset_to_gp = *access_addr - local_sda;
 	  if (elf32_nds32_local_gp_offset (abfd)[r_symndx] == 0)
@@ -11565,14 +11462,14 @@ nds32_elf_relax_guard (bfd_vma *access_a
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 #define GET_LOADSTORE_RANGE(addend) (((addend) >> 8) & 0x3f)
 
 /* Relax LOADSTORE relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_loadstore (struct bfd_link_info *link_info, bfd *abfd,
 			   asection *sec, Elf_Internal_Rela *irel,
 			   Elf_Internal_Rela *internal_relocs, int *insn_len,
@@ -11617,12 +11514,12 @@ nds32_elf_relax_loadstore (struct bfd_li
       if (i != 0)
 	_bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_LOADSTORE",
 			    (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   range_type = GET_LOADSTORE_RANGE (irel->r_addend);
   nds32_elf_final_sda_base (sec->output_section->owner,
-			    link_info, &local_sda, FALSE);
+			    link_info, &local_sda, false);
 
   switch (ELF32_R_TYPE (hi_irelfn->r_info))
     {
@@ -11652,15 +11549,15 @@ nds32_elf_relax_loadstore (struct bfd_li
 	  break;
 	}
       else if (!nds32_elf_relax_guard (&access_addr, local_sda, sec, hi_irelfn,
-				       NULL, FALSE, table, isymbuf, symtab_hdr))
-	return FALSE;
+				       NULL, false, table, isymbuf, symtab_hdr))
+	return false;
 
       if (!load_store_relax)
-	return FALSE;
+	return false;
 
       /* Case for set gp register.  */
       if (N32_RT5 (insn) == REG_GP)
-	return FALSE;
+	return false;
 
       if (range_type == NDS32_LOADSTORE_FLOAT_S
 	  || range_type == NDS32_LOADSTORE_FLOAT_D)
@@ -11676,7 +11573,7 @@ nds32_elf_relax_loadstore (struct bfd_li
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   /* Delete sethi instruction.  */
@@ -11689,10 +11586,10 @@ nds32_elf_relax_loadstore (struct bfd_li
       irel->r_info =
 	ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_NDS32_NONE);
       *insn_len = 0;
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Relax LO12 relocation for nds32_elf_relax_section.  */
@@ -11715,7 +11612,7 @@ nds32_elf_relax_lo12 (struct bfd_link_in
 
   /* For SDA base relative relaxation.  */
   nds32_elf_final_sda_base (sec->output_section->owner, link_info,
-			    &local_sda, FALSE);
+			    &local_sda, false);
 
   irelend = internal_relocs + sec->reloc_count;
   laddr = irel->r_offset;
@@ -11748,7 +11645,7 @@ nds32_elf_relax_lo12 (struct bfd_link_in
 	  /* Fall through.  */
 	}
       else if (!nds32_elf_relax_guard (&access_addr, local_sda, sec, irel, NULL,
-				       FALSE, table, isymbuf, symtab_hdr))
+				       false, table, isymbuf, symtab_hdr))
 	return;
 
       range_l = sdata_range[1][0];
@@ -11812,7 +11709,7 @@ nds32_elf_relax_lo12 (struct bfd_link_in
 
 /* Relax PTR relocation for nds32_elf_relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_elf_relax_ptr (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 		     Elf_Internal_Rela *internal_relocs, int *insn_len,
 		     int *seq_len, bfd_byte *contents)
@@ -11829,11 +11726,11 @@ nds32_elf_relax_ptr (bfd *abfd, asection
     {
       _bfd_error_handler (unrecognized_reloc_msg, abfd, "R_NDS32_PTR",
 			  (uint64_t) irel->r_offset);
-      return FALSE;
+      return false;
     }
 
   if (re_irel->r_addend != 1)
-    return FALSE;
+    return false;
 
   /* Pointed target is relaxed and no longer needs this void *,
      change the type to NONE.  */
@@ -11849,16 +11746,16 @@ nds32_elf_relax_ptr (bfd *abfd, asection
   if (count_irel != irelend)
     {
       if (--count_irel->r_addend > 0)
-	return FALSE;
+	return false;
     }
 
   if (ptr_irel != irelend)
-    return FALSE;
+    return false;
 
   /* If the PTR_COUNT is already 0, remove current instruction.  */
   *seq_len = nds32_elf_insn_size (abfd, contents, irel->r_offset);
   *insn_len = 0;
-  return TRUE;
+  return true;
 }
 
 /* Relax LWC relocation for nds32_elf_relax_section.  */
@@ -11868,7 +11765,7 @@ nds32_elf_relax_flsi (struct bfd_link_in
 		      asection *sec, Elf_Internal_Rela *irel,
 		      Elf_Internal_Rela *internal_relocs,
 		      bfd_byte *contents, Elf_Internal_Sym *isymbuf,
-		      Elf_Internal_Shdr *symtab_hdr, bfd_boolean *again)
+		      Elf_Internal_Shdr *symtab_hdr, bool *again)
 {
   /* Pattern:
      sethi    ra, hi20(symbol)      ; HI20/LOADSTORE
@@ -11916,7 +11813,7 @@ nds32_elf_relax_flsi (struct bfd_link_in
 
   /* For SDA base relative relaxation.  */
   nds32_elf_final_sda_base (sec->output_section->owner, link_info,
-			    &local_sda, FALSE);
+			    &local_sda, false);
   access_addr = calculate_memory_address (abfd, irel, isymbuf, symtab_hdr);
   flsi_offset = (insn & 0xfff) << 2;
   access_addr += flsi_offset;
@@ -11935,11 +11832,11 @@ nds32_elf_relax_flsi (struct bfd_link_in
       bfd_putb32 (insn, contents + re_irel->r_offset);
 
       re_irel->r_addend |= 1;
-      *again = TRUE;
+      *again = true;
     }
 }
 
-static bfd_boolean
+static bool
 nds32_relax_adjust_label (bfd *abfd, asection *sec,
 			  Elf_Internal_Rela *internal_relocs,
 			  bfd_byte *contents,
@@ -12080,13 +11977,13 @@ nds32_relax_adjust_label (bfd *abfd, ase
 
 		      if (!insert_nds32_elf_blank_recalc_total
 			  (relax_blank_list, insn_rel->r_offset + 2, 2))
-			return FALSE;
+			return false;
 		    }
 		  else if (is_16bit_NOP (abfd, sec, insn_rel))
 		    {
 		      if (!insert_nds32_elf_blank_recalc_total
 			  (relax_blank_list, insn_rel->r_offset, 2))
-			return FALSE;
+			return false;
 		    }
 		  insn_rel->r_info =
 		    ELF32_R_INFO (ELF32_R_SYM (insn_rel->r_info), R_NDS32_NONE);
@@ -12121,7 +12018,7 @@ nds32_relax_adjust_label (bfd *abfd, ase
 	    {
 	      /* Check if there is case which can not be aligned.  */
 	      if (irel->r_addend == 2 && address & 0x2)
-		return FALSE;
+		return false;
 	      continue;
 	    }
 
@@ -12164,13 +12061,13 @@ nds32_relax_adjust_label (bfd *abfd, ase
 
 		  if (!insert_nds32_elf_blank_recalc_total
 		      (relax_blank_list, insn_rel->r_offset + 2, 2))
-		    return FALSE;
+		    return false;
 		}
 	      else if (is_16bit_NOP (abfd, sec, insn_rel))
 		{
 		  if (!insert_nds32_elf_blank_recalc_total
 		      (relax_blank_list, insn_rel->r_offset, 2))
-		    return FALSE;
+		    return false;
 		}
 
 	    }
@@ -12190,7 +12087,7 @@ nds32_relax_adjust_label (bfd *abfd, ase
 			      irelend, insn16);
 	  if (!insert_nds32_elf_blank_recalc_total
 	      (relax_blank_list, insn_rel->r_offset + 2, 2))
-	    return FALSE;
+	    return false;
 	  insn_rel->r_info = ELF32_R_INFO (ELF32_R_SYM (insn_rel->r_info),
 					   R_NDS32_NONE);
 	}
@@ -12198,18 +12095,18 @@ nds32_relax_adjust_label (bfd *abfd, ase
 	{
 	  if (!insert_nds32_elf_blank_recalc_total
 	      (relax_blank_list, insn_rel->r_offset, 2))
-	    return FALSE;
+	    return false;
 	  insn_rel->r_info = ELF32_R_INFO (ELF32_R_SYM (insn_rel->r_info),
 					   R_NDS32_NONE);
 	}
     }
   insn_rel = NULL;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 nds32_elf_relax_section (bfd *abfd, asection *sec,
-			 struct bfd_link_info *link_info, bfd_boolean *again)
+			 struct bfd_link_info *link_info, bool *again)
 {
   nds32_elf_blank_t *relax_blank_list = NULL;
   Elf_Internal_Shdr *symtab_hdr;
@@ -12218,7 +12115,7 @@ nds32_elf_relax_section (bfd *abfd, asec
   Elf_Internal_Rela *irelend;
   Elf_Internal_Sym *isymbuf = NULL;
   bfd_byte *contents = NULL;
-  bfd_boolean result = TRUE;
+  bool result = true;
   int optimize = 0;
   int opt_size = 0;
   uint32_t insn;
@@ -12230,7 +12127,7 @@ nds32_elf_relax_section (bfd *abfd, asec
 
   relax_blank_list = NULL;
 
-  *again = FALSE;
+  *again = false;
 
   /* Nothing to do for
    * relocatable link or
@@ -12244,13 +12141,13 @@ nds32_elf_relax_section (bfd *abfd, asec
       || (sec->flags & SEC_CODE) == 0
       || sec->size == 0
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   /* 09.12.11 Workaround.  */
   /*  We have to adjust align for R_NDS32_LABEL if needed.
       The adjust approach only can fix 2-byte align once.  */
   if (sec->alignment_power > 2)
-    return TRUE;
+    return true;
 
   /* Do TLS model conversion once at first.  */
   nds32_elf_unify_tls_model (abfd, sec, contents, link_info);
@@ -12262,7 +12159,7 @@ nds32_elf_relax_section (bfd *abfd, asec
   /* Save the first section for abs symbol relaxation.
      This is used for checking gp relaxation in the
      nds32_elf_relax_loadstore and nds32_elf_relax_lo12.  */
-  nds32_elf_relax_guard (NULL, 0, sec, NULL, again, TRUE,
+  nds32_elf_relax_guard (NULL, 0, sec, NULL, again, true,
 			 table, NULL, NULL);
 
   /* The begining of general relaxation.  */
@@ -12272,14 +12169,14 @@ nds32_elf_relax_section (bfd *abfd, asec
       bfd_vma gp;
       is_SDA_BASE_set = 1;
       nds32_elf_final_sda_base (sec->output_section->owner, link_info,
-				&gp, FALSE);
-      relax_range_measurement (abfd);
+				&gp, false);
+      relax_range_measurement (abfd, link_info);
     }
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   /* Relocations MUST be kept in memory, because relaxation adjust them.  */
   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
-					       TRUE /* keep_memory */);
+					       true /* keep_memory */);
   if (internal_relocs == NULL)
     goto error_return;
 
@@ -12288,12 +12185,12 @@ nds32_elf_relax_section (bfd *abfd, asec
 				 irelend, R_NDS32_RELAX_ENTRY);
 
   if (irel == irelend)
-    return TRUE;
+    return true;
 
   if (ELF32_R_TYPE (irel->r_info) == R_NDS32_RELAX_ENTRY)
     {
       if (irel->r_addend & R_NDS32_RELAX_ENTRY_DISABLE_RELAX_FLAG)
-	return TRUE;
+	return true;
 
       if (irel->r_addend & R_NDS32_RELAX_ENTRY_OPTIMIZE_FLAG)
 	optimize = 1;
@@ -12305,7 +12202,8 @@ nds32_elf_relax_section (bfd *abfd, asec
   load_store_relax = table->load_store_relax;
 
   /* Get symbol table and section content.  */
-  if (!nds32_get_section_contents (abfd, sec, &contents, TRUE)
+  contents = NULL;
+  if (!nds32_get_section_contents (abfd, sec, &contents, true)
       || !nds32_get_local_syms (abfd, sec, &isymbuf))
     goto error_return;
 
@@ -12315,7 +12213,7 @@ nds32_elf_relax_section (bfd *abfd, asec
     {
       int seq_len;		/* Original length of instruction sequence.  */
       int insn_len = 0;		/* Final length of instruction sequence.  */
-      bfd_boolean removed;
+      bool removed;
 
       insn = 0;
       if (ELF32_R_TYPE (irel->r_info) == R_NDS32_LABEL
@@ -12383,7 +12281,7 @@ nds32_elf_relax_section (bfd *abfd, asec
 	continue;
 
       insn_len = seq_len;
-      removed = FALSE;
+      removed = false;
 
       switch (ELF32_R_TYPE (irel->r_info))
 	{
@@ -12499,7 +12397,7 @@ nds32_elf_relax_section (bfd *abfd, asec
 	      (&relax_blank_list, irel->r_offset + insn_len,
 	       seq_len - insn_len))
 	    goto error_return;
-	  *again = TRUE;
+	  *again = true;
 	}
     }
 
@@ -12567,22 +12465,20 @@ nds32_elf_relax_section (bfd *abfd, asec
       clean_nds32_elf_blank ();
     }
 
-finish:
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+ finish:
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
 
-  if (isymbuf != NULL && symtab_hdr->contents != (bfd_byte *) isymbuf)
+  if (symtab_hdr->contents != (bfd_byte *) isymbuf)
     free (isymbuf);
 
   return result;
 
-error_return:
-  result = FALSE;
+ error_return:
+  result = false;
   goto finish;
 }
 
@@ -12593,14 +12489,26 @@ static struct bfd_elf_special_section co
   {NULL, 0, 0, 0, 0}
 };
 
-static bfd_boolean
+static bool
+nds32_elf_section_flags (const Elf_Internal_Shdr *hdr)
+{
+  const char *name = hdr->bfd_section->name;
+
+  if (startswith (name, ".sbss")
+      || startswith (name, ".sdata"))
+    hdr->bfd_section->flags |= SEC_SMALL_DATA;
+
+  return true;
+}
+
+static bool
 nds32_elf_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED,
 			    struct bfd_link_info *info,
 			    void *finfo ATTRIBUTE_UNUSED,
-			    bfd_boolean (*func) (void *, const char *,
-						 Elf_Internal_Sym *,
-						 asection *,
-						 struct elf_link_hash_entry *)
+			    int (*func) (void *, const char *,
+					 Elf_Internal_Sym *,
+					 asection *,
+					 struct elf_link_hash_entry *)
 			    ATTRIBUTE_UNUSED)
 {
   FILE *sym_ld_script = NULL;
@@ -12612,7 +12520,7 @@ nds32_elf_output_arch_syms (bfd *output_
   if (check_start_export_sym)
     fprintf (sym_ld_script, "}\n");
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -12841,7 +12749,7 @@ nds32_fag_find_base (struct nds32_fag *h
    `best_fag' is the best fp-base.  Only those inside the window
    of best_fag is applied the flag.  */
 
-static bfd_boolean
+static bool
 nds32_fag_mark_relax (struct bfd_link_info *link_info,
 		      asection *sec, struct nds32_fag *best_fag,
 		      Elf_Internal_Rela *internal_relocs,
@@ -12852,12 +12760,12 @@ nds32_fag_mark_relax (struct bfd_link_in
   bfd *output_bfd;
 
   output_bfd = sec->output_section->owner;
-  nds32_elf_final_sda_base (output_bfd, link_info, &gp, FALSE);
+  nds32_elf_final_sda_base (output_bfd, link_info, &gp, false);
   best_fpbase = best_fag->addr;
 
   if (best_fpbase > gp + sdata_range[1][1]
       || best_fpbase < gp - sdata_range[1][0])
-    return FALSE;
+    return false;
 
   /* Mark these inside the window R_NDS32_INSN16_FP7U2_FLAG flag,
      so we know they can be converted to lwi37.fp.   */
@@ -12883,7 +12791,7 @@ nds32_fag_mark_relax (struct bfd_link_in
 	    insn16_rel->r_addend = R_NDS32_INSN16_FP7U2_FLAG;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Reset INSN16 to clean fp as gp.  */
@@ -12917,7 +12825,7 @@ nds32_fag_unmark_relax (struct nds32_fag
 /* This is the main function of fp-as-gp optimization.
    It should be called by relax_section.  */
 
-static bfd_boolean
+static bool
 nds32_relax_fp_as_gp (struct bfd_link_info *link_info,
 		      bfd *abfd, asection *sec,
 		      Elf_Internal_Rela *internal_relocs,
@@ -12929,7 +12837,7 @@ nds32_relax_fp_as_gp (struct bfd_link_in
   struct nds32_fag fag_head;
   Elf_Internal_Shdr *symtab_hdr;
   bfd_byte *contents;
-  bfd_boolean ifc_inside = FALSE;
+  bool ifc_inside = false;
 
   /* FIXME: Can we bfd_elf_link_read_relocs for the relocs?  */
 
@@ -12952,9 +12860,10 @@ nds32_relax_fp_as_gp (struct bfd_link_in
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
-  if (!nds32_get_section_contents (abfd, sec, &contents, TRUE)
+  contents = NULL;
+  if (!nds32_get_section_contents (abfd, sec, &contents, true)
       || !nds32_get_local_syms (abfd, sec, &isymbuf))
-    return FALSE;
+    return false;
 
   /* Check whether it is worth for fp-as-gp optimization,
      i.e., at least 3 gp-load.
@@ -12979,7 +12888,7 @@ nds32_relax_fp_as_gp (struct bfd_link_in
 
 	  begin_rel = irel;
 	  nds32_fag_init (&fag_head);
-	  ifc_inside = FALSE;
+	  ifc_inside = false;
 	}
       else if (ELF32_R_TYPE (irel->r_info) == R_NDS32_RELAX_REGION_END
 	       && (irel->r_addend & R_NDS32_RELAX_REGION_OMIT_FP_FLAG))
@@ -13062,16 +12971,16 @@ nds32_relax_fp_as_gp (struct bfd_link_in
 	       || ELF32_R_TYPE (irel->r_info) == R_NDS32_10IFCU_PCREL_RELA)
 	{
 	  /* Suppress fp as gp when encounter ifc.  */
-	  ifc_inside = TRUE;
+	  ifc_inside = true;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Remove unused `la $fp, _FD_BASE_' instruction.  */
 
-static bfd_boolean
+static bool
 nds32_fag_remove_unused_fpbase (bfd *abfd, asection *sec,
 				Elf_Internal_Rela *internal_relocs,
 				Elf_Internal_Rela *irelend)
@@ -13080,8 +12989,8 @@ nds32_fag_remove_unused_fpbase (bfd *abf
   Elf_Internal_Shdr *symtab_hdr;
   bfd_byte *contents = NULL;
   nds32_elf_blank_t *relax_blank_list = NULL;
-  bfd_boolean result = TRUE;
-  bfd_boolean unused_region = FALSE;
+  bool result = true;
+  bool unused_region = false;
 
   /*
      NOTE: Disable fp-as-gp if we encounter ifcall relocations:
@@ -13089,7 +12998,7 @@ nds32_fag_remove_unused_fpbase (bfd *abf
        R_NDS32_10IFCU_PCREL_RELA.  */
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
-  nds32_get_section_contents (abfd, sec, &contents, TRUE);
+  nds32_get_section_contents (abfd, sec, &contents, true);
 
   for (irel = internal_relocs; irel < irelend; irel++)
     {
@@ -13103,10 +13012,10 @@ nds32_fag_remove_unused_fpbase (bfd *abf
 
       if (ELF32_R_TYPE (irel->r_info) == R_NDS32_RELAX_REGION_BEGIN
 	  && (irel->r_addend & R_NDS32_RELAX_REGION_NOT_OMIT_FP_FLAG))
-	unused_region = TRUE;
+	unused_region = true;
       else if (ELF32_R_TYPE (irel->r_info) == R_NDS32_RELAX_REGION_END
 	       && (irel->r_addend & R_NDS32_RELAX_REGION_NOT_OMIT_FP_FLAG))
-	unused_region = FALSE;
+	unused_region = false;
 
       /* We're not in the region.  */
       if (!unused_region)
@@ -13152,7 +13061,7 @@ nds32_fag_remove_unused_fpbase (bfd *abf
 	goto error_return;
     }
 
-finish:
+ finish:
   if (relax_blank_list)
     {
       nds32_elf_relax_delete_blanks (abfd, sec, relax_blank_list);
@@ -13160,8 +13069,8 @@ finish:
     }
   return result;
 
-error_return:
-  result = FALSE;
+ error_return:
+  result = false;
   goto finish;
 }
 
@@ -13177,7 +13086,7 @@ nds32_elf_get_relocated_section_contents
 					  struct bfd_link_info *link_info,
 					  struct bfd_link_order *link_order,
 					  bfd_byte *data,
-					  bfd_boolean relocatable,
+					  bool relocatable,
 					  asymbol **symbols)
 {
   bfd *input_bfd = link_order->u.indirect.section->owner;
@@ -13191,7 +13100,8 @@ nds32_elf_get_relocated_section_contents
     return NULL;
 
   /* Read in the section.  */
-  if (!nds32_get_section_contents (input_bfd, input_section, &data, FALSE))
+  bfd_byte *orig_data = data;
+  if (!nds32_get_section_contents (input_bfd, input_section, &data, false))
     return NULL;
 
   if (reloc_size == 0)
@@ -13199,7 +13109,7 @@ nds32_elf_get_relocated_section_contents
 
   reloc_vector = (arelent **) bfd_malloc (reloc_size);
   if (reloc_vector == NULL)
-    return NULL;
+    goto error_return;
 
   reloc_count = bfd_canonicalize_reloc (input_bfd, input_section,
 					reloc_vector, symbols);
@@ -13220,8 +13130,8 @@ nds32_elf_get_relocated_section_contents
 	    {
 	      bfd_vma off;
 	      static reloc_howto_type none_howto
-		= HOWTO (0, 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL,
-			 "unused", FALSE, 0, 0, FALSE);
+		= HOWTO (0, 0, 0, 0, false, 0, complain_overflow_dont, NULL,
+			 "unused", false, 0, 0, false);
 
 	      off = (*parent)->address * OCTETS_PER_BYTE (input_bfd,
 							  input_section);
@@ -13254,7 +13164,7 @@ nds32_elf_get_relocated_section_contents
 		case bfd_reloc_undefined:
 		  (*link_info->callbacks->undefined_symbol)
 		    (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
-		     input_bfd, input_section, (*parent)->address, TRUE);
+		     input_bfd, input_section, (*parent)->address, true);
 		  break;
 		case bfd_reloc_dangerous:
 		  BFD_ASSERT (error_message != NULL);
@@ -13291,19 +13201,21 @@ nds32_elf_get_relocated_section_contents
   free (reloc_vector);
   return data;
 
-error_return:
+ error_return:
   free (reloc_vector);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
 /* Check target symbol.  */
 
-static bfd_boolean
+static bool
 nds32_elf_is_target_special_symbol (bfd *abfd ATTRIBUTE_UNUSED, asymbol *sym)
 {
   if (!sym || !sym->name || sym->name[0] != '$')
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 /* nds32 find maybe function sym.  Ignore target special symbol
@@ -13356,7 +13268,7 @@ list_insert (relax_group_list_t *pHead,
   /* Insert node.  */
   relax_group_list_t *pNew = bfd_malloc (sizeof (relax_group_list_t));
   if (!pNew)
-    return FALSE;
+    return false;
 
   relax_group_list_t *tmp = pNext->next;
   pNext->next = pNew;
@@ -13366,7 +13278,7 @@ list_insert (relax_group_list_t *pHead,
   pNew->next = tmp;
   pNew->next_sibling = NULL;
 
-  return TRUE;
+  return true;
 }
 
 int
@@ -13383,7 +13295,7 @@ list_insert_sibling (relax_group_list_t
   /* Insert node.  */
   relax_group_list_t *pNew = bfd_malloc (sizeof (relax_group_list_t));
   if (!pNew)
-    return FALSE;
+    return false;
 
   relax_group_list_t *tmp = pNext->next_sibling;
   pNext->next_sibling = pNew;
@@ -13393,7 +13305,7 @@ list_insert_sibling (relax_group_list_t
   pNew->next = NULL;
   pNew->next_sibling = tmp;
 
-  return TRUE;
+  return true;
 }
 
 void
@@ -13435,7 +13347,7 @@ elf32_nds32_check_relax_group (bfd *abfd
     {
       /* Relocations MUST be kept in memory, because relaxation adjust them.  */
       relocs = _bfd_elf_link_read_relocs (abfd, asec, NULL, NULL,
-					  TRUE /* keep_memory  */);
+					  true /* keep_memory  */);
       if (relocs == NULL)
 	break;
 
@@ -13455,9 +13367,9 @@ elf32_nds32_check_relax_group (bfd *abfd
 	    max_id = id;
 	}
     }
-  while (FALSE);
+  while (false);
 
-  if ((relocs != NULL) && (elf_section_data (asec)->relocs != relocs))
+  if (elf_section_data (asec)->relocs != relocs)
     free (relocs);
 
   if ((min_id != relax_group_ptr->min_id)
@@ -13474,7 +13386,7 @@ elf32_nds32_check_relax_group (bfd *abfd
 }
 
 /* Reorder RELAX_GROUP ID when command line option '-r' is applied.  */
-struct section_id_list_t *relax_group_section_id_list = NULL;
+static struct section_id_list_t *relax_group_section_id_list = NULL;
 
 struct section_id_list_t *
 elf32_nds32_lookup_section_id (int id, struct section_id_list_t **lst_ptr)
@@ -13545,13 +13457,12 @@ elf32_nds32_unify_relax_group (bfd *abfd
   elf32_nds32_relax_group_t *relax_group_ptr =
     elf32_nds32_relax_group_ptr (abfd);
 
-  bfd_boolean result = TRUE;
+  bool result = true;
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
   Elf_Internal_Rela *relocs = NULL;
   enum elf_nds32_reloc_type rtype;
   struct section_id_list_t *node = NULL;
-  int count = 0;
 
   do
     {
@@ -13565,7 +13476,7 @@ elf32_nds32_unify_relax_group (bfd *abfd
 
       /* Relocations MUST be kept in memory, because relaxation adjust them.  */
       relocs = _bfd_elf_link_read_relocs (abfd, asec, NULL, NULL,
-					  TRUE /* keep_memory  */);
+					  true /* keep_memory  */);
       if (relocs == NULL)
 	{
 	  BFD_ASSERT (0); /* feed me */
@@ -13590,13 +13501,11 @@ elf32_nds32_unify_relax_group (bfd *abfd
 
 	  /* Change it.  */
 	  rel->r_addend += relax_group_ptr->bias;
-	  /* Debugging count.  */
-	  count++;
 	}
     }
-  while (FALSE);
+  while (false);
 
-  if (relocs != NULL && elf_section_data (asec)->relocs != relocs)
+  if (elf_section_data (asec)->relocs != relocs)
     free (relocs);
 
   return result;
@@ -13606,7 +13515,7 @@ int
 nds32_elf_unify_tls_model (bfd *inbfd, asection *insec, bfd_byte *incontents,
 			   struct bfd_link_info *lnkinfo)
 {
-  bfd_boolean result = TRUE;
+  bool result = true;
   Elf_Internal_Rela *irel;
   Elf_Internal_Rela *irelend;
   Elf_Internal_Rela *internal_relocs;
@@ -13619,12 +13528,8 @@ nds32_elf_unify_tls_model (bfd *inbfd, a
   relax_group_list_t chain = { .id = -1, .next = NULL, .next_sibling = NULL };
 
   Elf_Internal_Shdr *symtab_hdr = &elf_tdata (inbfd)->symtab_hdr;
-  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
+  struct elf_link_hash_entry **sym_hashes;
   sym_hashes = elf_sym_hashes (inbfd);
-  sym_hashes_end =
-    sym_hashes + symtab_hdr->sh_size / sizeof (Elf32_External_Sym);
-  if (!elf_bad_symtab (inbfd))
-    sym_hashes_end -= symtab_hdr->sh_info;
 
   /* Reorder RELAX_GROUP when command line option '-r' is applied.  */
   if (bfd_link_relocatable (lnkinfo))
@@ -13635,7 +13540,7 @@ nds32_elf_unify_tls_model (bfd *inbfd, a
 
   /* Relocations MUST be kept in memory, because relaxation adjust them.  */
   internal_relocs = _bfd_elf_link_read_relocs (inbfd, insec, NULL, NULL,
-					       TRUE /* keep_memory  */);
+					       true /* keep_memory  */);
   if (internal_relocs == NULL)
     goto error_return;
 
@@ -13707,7 +13612,7 @@ nds32_elf_unify_tls_model (bfd *inbfd, a
   /* Get symbol table and section content.  */
   if (incontents)
     contents = incontents;
-  else if (!nds32_get_section_contents (inbfd, insec, &contents, TRUE)
+  else if (!nds32_get_section_contents (inbfd, insec, &contents, true)
 	   || !nds32_get_local_syms (inbfd, insec, &local_syms))
     goto error_return;
 
@@ -14018,19 +13923,17 @@ nds32_elf_unify_tls_model (bfd *inbfd, a
 #endif
     }
 
-finish:
+ finish:
   if (incontents)
     contents = NULL;
 
-  if (internal_relocs != NULL
-      && elf_section_data (insec)->relocs != internal_relocs)
+  if (elf_section_data (insec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  if (contents != NULL
-      && elf_section_data (insec)->this_hdr.contents != contents)
+  if (elf_section_data (insec)->this_hdr.contents != contents)
     free (contents);
 
-  if (local_syms != NULL && symtab_hdr->contents != (bfd_byte *) local_syms)
+  if (symtab_hdr->contents != (bfd_byte *) local_syms)
     free (local_syms);
 
   if (chain.next)
@@ -14047,8 +13950,8 @@ finish:
 
   return result;
 
-error_return:
-  result = FALSE;
+ error_return:
+  result = false;
   goto finish;
 }
 
@@ -14093,6 +13996,7 @@ error_return:
 #define elf_backend_object_p			nds32_elf_object_p
 #define elf_backend_final_write_processing	nds32_elf_final_write_processing
 #define elf_backend_special_sections		nds32_elf_special_sections
+#define elf_backend_section_flags		nds32_elf_section_flags
 #define bfd_elf32_bfd_get_relocated_section_contents \
 				nds32_elf_get_relocated_section_contents
 #define bfd_elf32_bfd_is_target_special_symbol	nds32_elf_is_target_special_symbol
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-nds32.h ./bfd/elf32-nds32.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-nds32.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-nds32.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* NDS32-specific support for 32-bit ELF.
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
    Contributed by Andes Technology Corporation.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -31,45 +31,45 @@ extern "C" {
 /* Relocation flags for R_NDS32_ERLAX_ENTRY.  */
 
 /* Set if relax on this section is done or disabled.  */
-#define R_NDS32_RELAX_ENTRY_DISABLE_RELAX_FLAG			(1 << 31)
+#define R_NDS32_RELAX_ENTRY_DISABLE_RELAX_FLAG			(1u << 31)
 /* Optimize for performance.  */
-#define R_NDS32_RELAX_ENTRY_OPTIMIZE_FLAG			(1 << 30)
+#define R_NDS32_RELAX_ENTRY_OPTIMIZE_FLAG			(1u << 30)
 /* Optimize for size.  Branch destination 4-byte adjustment
    may be disabled.  */
-#define R_NDS32_RELAX_ENTRY_OPTIMIZE_FOR_SPACE_FLAG		(1 << 29)
+#define R_NDS32_RELAX_ENTRY_OPTIMIZE_FOR_SPACE_FLAG		(1u << 29)
 /* To distinguish the assembly code generated by compiler
    or written manually.  */
-#define R_NDS32_RELAX_ENTRY_VERBATIM_FLAG			(1 << 28)
+#define R_NDS32_RELAX_ENTRY_VERBATIM_FLAG			(1u << 28)
 /* Two bits for ICT to comply with files without directive.  */
 /* ICT small model.  */
-#define R_NDS32_RELAX_ENTRY_ICT_SMALL                           (0x2 << 4)
+#define R_NDS32_RELAX_ENTRY_ICT_SMALL                           (0x2u << 4)
 /* ICT large model.  */
-#define R_NDS32_RELAX_ENTRY_ICT_LARGE                           (0x3 << 4)
+#define R_NDS32_RELAX_ENTRY_ICT_LARGE                           (0x3u << 4)
 /* Mask for get ict bits.  */
-#define R_NDS32_RELAX_ENTRY_ICT_MASK                            (0x3 << 4)
+#define R_NDS32_RELAX_ENTRY_ICT_MASK                            (0x3u << 4)
 
 
 /* Relocation flags for R_NDS32_INSN16.  */
 
 /* Tag the nop16 can be removed.  */
-#define R_NDS32_INSN16_CONVERT_FLAG				(1 << 0)
+#define R_NDS32_INSN16_CONVERT_FLAG				(1u << 0)
 /* Convert a gp-relative access (e.g., lwi.gp)
    to fp-as-gp access (lwi37.fp).
    This value is used by linker internally only.
    It's fine to change the vlaue.  */
-#define R_NDS32_INSN16_FP7U2_FLAG				(1 << 1)
+#define R_NDS32_INSN16_FP7U2_FLAG				(1u << 1)
 
 /* Relocation flags for R_NDS32_RELAX_REGION_OMIT_FP_START/END.  */
 
 /* OMIT_FP_FLAG marks the region for applying fp-as-gp
    optimization.  */
-#define R_NDS32_RELAX_REGION_OMIT_FP_FLAG			(1 << 0)
+#define R_NDS32_RELAX_REGION_OMIT_FP_FLAG			(1u << 0)
 /* NOT_OMIT_FP_FLAG is set if this region is not worth
    for fp-as-gp.  */
-#define R_NDS32_RELAX_REGION_NOT_OMIT_FP_FLAG			(1 << 1)
+#define R_NDS32_RELAX_REGION_NOT_OMIT_FP_FLAG			(1u << 1)
 /* A Innermost loop region.  Some optimizations is suppressed
    in this region due to performance drop.  */
-#define R_NDS32_RELAX_REGION_INNERMOST_LOOP_FLAG		(1 << 4)
+#define R_NDS32_RELAX_REGION_INNERMOST_LOOP_FLAG		(1u << 4)
 
 /* Tag range for LOADSTORE relocation.  */
 enum
@@ -95,8 +95,6 @@ extern int elf32_nds32_check_relax_group
 extern int elf32_nds32_unify_relax_group (bfd *, asection *);
 extern int nds32_elf_unify_tls_model (bfd *, asection *, bfd_byte *,
 				      struct bfd_link_info *);
-extern void nds32_insertion_sort
-(void *, size_t, size_t, int (*) (const void *, const void *));
 
 extern int	   nds32_convert_32_to_16 (bfd *, uint32_t, uint16_t *, int *);
 extern int	   nds32_convert_16_to_32 (bfd *, uint16_t, uint32_t *);
@@ -104,10 +102,10 @@ extern void	   bfd_elf32_nds32_set_targe
 						      int, int, FILE *,
 						      int, int, int);
 
-#define nds32_elf_hash_table(info) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((info)->hash)) \
-   == NDS32_ELF_DATA ? \
-   ((struct elf_nds32_link_hash_table *) ((info)->hash)) : NULL)
+#define nds32_elf_hash_table(p) \
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == NDS32_ELF_DATA)	\
+   ? (struct elf_nds32_link_hash_table *) (p)->hash : NULL)
 
 #define elf32_nds32_compute_jump_table_size(htab) \
   ((htab)->next_tls_desc_index * 4)
@@ -122,32 +120,15 @@ struct elf_nds32_link_hash_table
 {
   struct elf_link_hash_table root;
 
-  /* Short-cuts to get to dynamic linker sections.  */
-  asection *sdynbss;
-  asection *srelbss;
-
-  /* Small local sym to section mapping cache.  */
-  struct sym_cache sym_cache;
-
   /* Target dependent options.  */
   int relax_fp_as_gp;		/* --mrelax-omit-fp.  */
   int eliminate_gc_relocs;	/* --meliminate-gc-relocs.  */
   FILE *sym_ld_script;		/* --mgen-symbol-ld-script=<file>.  */
-  bfd_boolean hyper_relax;	/* Relax for symbol not in RW sections.  */
+  int hyper_relax;		/* Relax for symbol not in RW sections.  */
   int tls_desc_trampoline;	/* --m[no-]tlsdesc-trampoline.  */
   /* Disable if linking a dynamically linked executable.  */
   int load_store_relax;
 
-  /* The offset into splt of the PLT entry for the TLS descriptor
-     resolver.  Special values are 0, if not necessary (or not found
-     to be necessary yet), and -1 if needed but not determined
-     yet.  */
-  bfd_vma dt_tlsdesc_plt;
-
-  /* The offset into sgot of the GOT entry used by the PLT entry
-     above.  */
-  bfd_vma dt_tlsdesc_got;
-
   /* Offset in .plt section of tls_nds32_trampoline.  */
   bfd_vma tls_trampoline;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-nios2.c ./bfd/elf32-nios2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-nios2.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-nios2.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for Nios II.
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
    Contributed by Nigel Gray (ngray@altera.com).
    Contributed by Mentor Graphics, Inc.
 
@@ -82,651 +82,651 @@ static reloc_howto_type elf_nios2_r1_how
   /* No relocation.  */
   HOWTO (R_NIOS2_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_NIOS2_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16-bit signed immediate relocation.  */
   HOWTO (R_NIOS2_S16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_signed,	/* complain on overflow */
 	 bfd_elf_generic_reloc,	/* special function */
 	 "R_NIOS2_S16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x003fffc0,		/* src_mask */
 	 0x003fffc0,		/* dest_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16-bit unsigned immediate relocation.  */
   HOWTO (R_NIOS2_U16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain on overflow */
 	 bfd_elf_generic_reloc,	/* special function */
 	 "R_NIOS2_U16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x003fffc0,		/* src_mask */
 	 0x003fffc0,		/* dest_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_NIOS2_PCREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_signed,	/* complain on overflow */
 	 nios2_elf32_pcrel16_relocate,	/* special function */
 	 "R_NIOS2_PCREL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x003fffc0,		/* src_mask */
 	 0x003fffc0,		/* dest_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_NIOS2_CALL26,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_dont,	/* complain on overflow */
 	 nios2_elf32_call26_relocate,	/* special function */
 	 "R_NIOS2_CALL26",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffc0,		/* src_mask */
 	 0xffffffc0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_NIOS2_IMM5,
 	 0,
-	 2,
+	 4,
 	 5,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_IMM5",
-	 FALSE,
+	 false,
 	 0x000007c0,
 	 0x000007c0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CACHE_OPX,
 	 0,
-	 2,
+	 4,
 	 5,
-	 FALSE,
+	 false,
 	 22,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_CACHE_OPX",
-	 FALSE,
+	 false,
 	 0x07c00000,
 	 0x07c00000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_IMM6,
 	 0,
-	 2,
+	 4,
 	 6,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_IMM6",
-	 FALSE,
+	 false,
 	 0x00000fc0,
 	 0x00000fc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_IMM8,
 	 0,
-	 2,
+	 4,
 	 8,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_IMM8",
-	 FALSE,
+	 false,
 	 0x00003fc0,
 	 0x00003fc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_HI16,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 nios2_elf32_hi16_relocate,
 	 "R_NIOS2_HI16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_LO16,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 nios2_elf32_lo16_relocate,
 	 "R_NIOS2_LO16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_HIADJ16,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 nios2_elf32_hiadj16_relocate,
 	 "R_NIOS2_HIADJ16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_BFD_RELOC_32,
 	 0,
-	 2,			/* long */
+	 4,			/* long */
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_BFD_RELOC32",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_BFD_RELOC_16,
 	 0,
-	 1,			/* short */
+	 2,			/* short */
 	 16,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_BFD_RELOC16",
-	 FALSE,
+	 false,
 	 0x0000ffff,
 	 0x0000ffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_BFD_RELOC_8,
 	 0,
-	 0,			/* byte */
+	 1,			/* byte */
 	 8,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_BFD_RELOC8",
-	 FALSE,
+	 false,
 	 0x000000ff,
 	 0x000000ff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GPREL,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 nios2_elf32_gprel_relocate,
 	 "R_NIOS2_GPREL",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GNU_VTINHERIT,
 	 0,
-	 2,			/* short */
+	 4,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 NULL,
 	 "R_NIOS2_GNU_VTINHERIT",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GNU_VTENTRY,
 	 0,
-	 2,			/* byte */
+	 4,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 _bfd_elf_rel_vtable_reloc_fn,
 	 "R_NIOS2_GNU_VTENTRY",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_UJMP,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 nios2_elf32_ujmp_relocate,
 	 "R_NIOS2_UJMP",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CJMP,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 nios2_elf32_cjmp_relocate,
 	 "R_NIOS2_CJMP",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALLR,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 nios2_elf32_callr_relocate,
 	 "R_NIOS2_CALLR",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_ALIGN,
 	 0,
-	 2,
+	 4,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 nios2_elf32_ignore_reloc,
 	 "R_NIOS2_ALIGN",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 TRUE),
+	 true),
 
 
   HOWTO (R_NIOS2_GOT16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOT16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALL16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_CALL16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GOTOFF_LO,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOTOFF_LO",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GOTOFF_HA,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOTOFF_HA",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_PCREL_LO,
 	 0,
-	 2,
+	 4,
 	 16,
-	 TRUE,
+	 true,
 	 6,
 	 complain_overflow_dont,
 	 nios2_elf32_pcrel_lo16_relocate,
 	 "R_NIOS2_PCREL_LO",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 TRUE),
+	 true),
 
   HOWTO (R_NIOS2_PCREL_HA,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE, /* This is a PC-relative relocation, but we need to subtract
+	 false, /* This is a PC-relative relocation, but we need to subtract
 		   PC ourselves before the HIADJ.  */
 	 6,
 	 complain_overflow_dont,
 	 nios2_elf32_pcrel_hiadj16_relocate,
 	 "R_NIOS2_PCREL_HA",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 TRUE),
+	 true),
 
   HOWTO (R_NIOS2_TLS_GD16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_GD16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_LDM16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_LDM16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_LDO16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_LDO16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_IE16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_IE16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_LE16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_LE16",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_DTPMOD,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_DTPMOD",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_DTPREL,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_DTPREL",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_TPREL,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_TPREL",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_COPY,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_COPY",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GLOB_DAT,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GLOB_DAT",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_JUMP_SLOT,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_JUMP_SLOT",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_RELATIVE,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_RELATIVE",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GOTOFF,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOTOFF",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALL26_NOAT,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_dont,	/* complain on overflow */
 	 nios2_elf32_call26_relocate,	/* special function */
 	 "R_NIOS2_CALL26_NOAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffc0,		/* src_mask */
 	 0xffffffc0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_NIOS2_GOT_LO,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOT_LO",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GOT_HA,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOT_HA",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALL_LO,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_CALL_LO",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALL_HA,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_CALL_HA",
-	 FALSE,
+	 false,
 	 0x003fffc0,
 	 0x003fffc0,
-	 FALSE),
+	 false),
 
 /* Add other relocations here.  */
 };
@@ -735,832 +735,832 @@ static reloc_howto_type elf_nios2_r2_how
   /* No relocation.  */
   HOWTO (R_NIOS2_NONE,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_NIOS2_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16-bit signed immediate relocation.  */
   HOWTO (R_NIOS2_S16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 16,			/* bitpos */
 	 complain_overflow_signed,	/* complain on overflow */
 	 bfd_elf_generic_reloc,	/* special function */
 	 "R_NIOS2_S16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff0000,		/* src_mask */
 	 0xffff0000,		/* dest_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16-bit unsigned immediate relocation.  */
   HOWTO (R_NIOS2_U16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 16,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain on overflow */
 	 bfd_elf_generic_reloc,	/* special function */
 	 "R_NIOS2_U16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff0000,		/* src_mask */
 	 0xffff0000,		/* dest_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_NIOS2_PCREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 16,			/* bitpos */
 	 complain_overflow_signed,	/* complain on overflow */
 	 nios2_elf32_pcrel16_relocate,	/* special function */
 	 "R_NIOS2_PCREL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff0000,		/* src_mask */
 	 0xffff0000,		/* dest_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_NIOS2_CALL26,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_dont,	/* complain on overflow */
 	 nios2_elf32_call26_relocate,	/* special function */
 	 "R_NIOS2_CALL26",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffc0,		/* src_mask */
 	 0xffffffc0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_NIOS2_IMM5,
 	 0,
-	 2,
+	 4,
 	 5,
-	 FALSE,
+	 false,
 	 21,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_IMM5",
-	 FALSE,
+	 false,
 	 0x03e00000,
 	 0x03e00000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CACHE_OPX,
 	 0,
-	 2,
+	 4,
 	 5,
-	 FALSE,
+	 false,
 	 11,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_CACHE_OPX",
-	 FALSE,
+	 false,
 	 0x0000f800,
 	 0x0000f800,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_IMM6,
 	 0,
-	 2,
+	 4,
 	 6,
-	 FALSE,
+	 false,
 	 26,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_IMM6",
-	 FALSE,
+	 false,
 	 0xfc000000,
 	 0xfc000000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_IMM8,
 	 0,
-	 2,
+	 4,
 	 8,
-	 FALSE,
+	 false,
 	 24,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_IMM8",
-	 FALSE,
+	 false,
 	 0xff000000,
 	 0xff000000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_HI16,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 nios2_elf32_hi16_relocate,
 	 "R_NIOS2_HI16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_LO16,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 nios2_elf32_lo16_relocate,
 	 "R_NIOS2_LO16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_HIADJ16,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 nios2_elf32_hiadj16_relocate,
 	 "R_NIOS2_HIADJ16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_BFD_RELOC_32,
 	 0,
-	 2,			/* long */
+	 4,			/* long */
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_BFD_RELOC32",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_BFD_RELOC_16,
 	 0,
-	 1,			/* short */
+	 2,			/* short */
 	 16,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_BFD_RELOC16",
-	 FALSE,
+	 false,
 	 0x0000ffff,
 	 0x0000ffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_BFD_RELOC_8,
 	 0,
-	 0,			/* byte */
+	 1,			/* byte */
 	 8,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_BFD_RELOC8",
-	 FALSE,
+	 false,
 	 0x000000ff,
 	 0x000000ff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GPREL,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 nios2_elf32_gprel_relocate,
 	 "R_NIOS2_GPREL",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GNU_VTINHERIT,
 	 0,
-	 2,			/* short */
+	 4,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 NULL,
 	 "R_NIOS2_GNU_VTINHERIT",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GNU_VTENTRY,
 	 0,
-	 2,			/* byte */
+	 4,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 _bfd_elf_rel_vtable_reloc_fn,
 	 "R_NIOS2_GNU_VTENTRY",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_UJMP,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 nios2_elf32_ujmp_relocate,
 	 "R_NIOS2_UJMP",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CJMP,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 nios2_elf32_cjmp_relocate,
 	 "R_NIOS2_CJMP",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALLR,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 nios2_elf32_callr_relocate,
 	 "R_NIOS2_CALLR",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_ALIGN,
 	 0,
-	 2,
+	 4,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 nios2_elf32_ignore_reloc,
 	 "R_NIOS2_ALIGN",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 TRUE),
+	 true),
 
   HOWTO (R_NIOS2_GOT16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOT16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALL16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_CALL16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GOTOFF_LO,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOTOFF_LO",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GOTOFF_HA,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOTOFF_HA",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_PCREL_LO,
 	 0,
-	 2,
+	 4,
 	 16,
-	 TRUE,
+	 true,
 	 16,
 	 complain_overflow_dont,
 	 nios2_elf32_pcrel_lo16_relocate,
 	 "R_NIOS2_PCREL_LO",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 TRUE),
+	 true),
 
   HOWTO (R_NIOS2_PCREL_HA,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE, /* This is a PC-relative relocation, but we need to subtract
+	 false, /* This is a PC-relative relocation, but we need to subtract
 		   PC ourselves before the HIADJ.  */
 	 16,
 	 complain_overflow_dont,
 	 nios2_elf32_pcrel_hiadj16_relocate,
 	 "R_NIOS2_PCREL_HA",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 TRUE),
+	 true),
 
   HOWTO (R_NIOS2_TLS_GD16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_GD16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_LDM16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_LDM16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_LDO16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_LDO16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_IE16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_IE16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_LE16,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_LE16",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_DTPMOD,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_DTPMOD",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_DTPREL,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_DTPREL",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_TLS_TPREL,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_TLS_TPREL",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_COPY,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_COPY",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GLOB_DAT,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GLOB_DAT",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_JUMP_SLOT,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_JUMP_SLOT",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_RELATIVE,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_RELATIVE",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GOTOFF,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOTOFF",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALL26_NOAT,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_dont,	/* complain on overflow */
 	 nios2_elf32_call26_relocate,	/* special function */
 	 "R_NIOS2_CALL26_NOAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffc0,		/* src_mask */
 	 0xffffffc0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_NIOS2_GOT_LO,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOT_LO",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_GOT_HA,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_GOT_HA",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALL_LO,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_CALL_LO",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_CALL_HA,
 	 0,
-	 2,
+	 4,
 	 16,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_CALL_HA",
-	 FALSE,
+	 false,
 	 0xffff0000,
 	 0xffff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_S12,
 	 0,
-	 2,
+	 4,
 	 12,
-	 FALSE,
+	 false,
 	 16,
 	 complain_overflow_signed,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_S12",
-	 FALSE,
+	 false,
 	 0x0fff0000,
 	 0x0fff0000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_I10_1_PCREL,
 	 1,
-	 1,
+	 2,
 	 10,
-	 TRUE,
+	 true,
 	 6,
 	 complain_overflow_signed,
 	 bfd_elf_generic_reloc,		/* FIXME? */
 	 "R_NIOS2_R2_I10_1_PCREL",
-	 FALSE,
+	 false,
 	 0xffc0,
 	 0xffc0,
-	 TRUE),
+	 true),
 
   HOWTO (R_NIOS2_R2_T1I7_1_PCREL,
 	 1,
-	 1,
+	 2,
 	 7,
-	 TRUE,
+	 true,
 	 9,
 	 complain_overflow_signed,
 	 bfd_elf_generic_reloc,		/* FIXME? */
 	 "R_NIOS2_R2_T1I7_1_PCREL",
-	 FALSE,
+	 false,
 	 0xfe00,
 	 0xfe00,
-	 TRUE),
+	 true),
 
   HOWTO (R_NIOS2_R2_T1I7_2,
 	 2,
-	 1,
+	 2,
 	 7,
-	 FALSE,
+	 false,
 	 9,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_T1I7_2",
-	 FALSE,
+	 false,
 	 0xfe00,
 	 0xfe00,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_T2I4,
 	 0,
-	 1,
+	 2,
 	 4,
-	 FALSE,
+	 false,
 	 12,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_T2I4",
-	 FALSE,
+	 false,
 	 0xf000,
 	 0xf000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_T2I4_1,
 	 1,
-	 1,
+	 2,
 	 4,
-	 FALSE,
+	 false,
 	 12,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_T2I4_1",
-	 FALSE,
+	 false,
 	 0xf000,
 	 0xf000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_T2I4_2,
 	 2,
-	 1,
+	 2,
 	 4,
-	 FALSE,
+	 false,
 	 12,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_T2I4_2",
-	 FALSE,
+	 false,
 	 0xf000,
 	 0xf000,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_X1I7_2,
 	 2,
-	 1,
+	 2,
 	 7,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_X1I7_2",
-	 FALSE,
+	 false,
 	 0x1fc0,
 	 0x1fc0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_X2L5,
 	 0,
-	 1,
+	 2,
 	 5,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_X2L5",
-	 FALSE,
+	 false,
 	 0x07c0,
 	 0x07c0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_F1I5_2,
 	 2,
-	 1,
+	 2,
 	 5,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_F1L5_2",
-	 FALSE,
+	 false,
 	 0x07c0,
 	 0x07c0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_L5I4X1,
 	 2,
-	 1,
+	 2,
 	 4,
-	 FALSE,
+	 false,
 	 6,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_L5I4X1",
-	 FALSE,
+	 false,
 	 0x03c0,
 	 0x03c0,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_T1X1I6,
 	 0,
-	 1,
+	 2,
 	 6,
-	 FALSE,
+	 false,
 	 9,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_T1X1I6",
-	 FALSE,
+	 false,
 	 0x7e00,
 	 0x7e00,
-	 FALSE),
+	 false),
 
   HOWTO (R_NIOS2_R2_T1X1I6_2,
 	 2,
-	 2,
+	 4,
 	 6,
-	 FALSE,
+	 false,
 	 9,
 	 complain_overflow_unsigned,
 	 bfd_elf_generic_reloc,
 	 "R_NIOS2_R2_T1I1X6_2",
-	 FALSE,
+	 false,
 	 0x7e00,
 	 0x7e00,
-	 FALSE),
+	 false),
 
 /* Add other relocations here.  */
 };
@@ -1737,9 +1737,6 @@ struct elf32_nios2_link_hash_entry
      symbol.  */
   struct elf32_nios2_stub_hash_entry *hsh_cache;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
 #define GOT_UNKNOWN	0
 #define GOT_NORMAL	1
 #define GOT_TLS_GD	2
@@ -1779,7 +1776,7 @@ struct elf32_nios2_link_hash_table
     bfd *stub_bfd;
 
     /* Linker call-backs.  */
-    asection * (*add_stub_section) (const char *, asection *, bfd_boolean);
+    asection * (*add_stub_section) (const char *, asection *, bool);
     void (*layout_sections_again) (void);
 
     /* Array to keep track of which stub sections have been created, and
@@ -1811,9 +1808,6 @@ struct elf32_nios2_link_hash_table
       bfd_vma offset;
     } tls_ldm_got;
 
-    /* Small local sym cache.  */
-    struct sym_cache sym_cache;
-
     bfd_vma res_n_size;
   };
 
@@ -1825,7 +1819,7 @@ struct nios2_elf32_obj_tdata
   char *local_got_tls_type;
 
   /* TRUE if TLS GD relocs have been seen for this object.  */
-  bfd_boolean has_tlsgd;
+  bool has_tlsgd;
 };
 
 #define elf32_nios2_tdata(abfd) \
@@ -1917,7 +1911,7 @@ bfd_vma hiadj (bfd_vma symbol_value)
 
 /* Implement elf_backend_grok_prstatus:
    Support for core dump NOTE sections.  */
-static bfd_boolean
+static bool
 nios2_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -1926,7 +1920,7 @@ nios2_grok_prstatus (bfd *abfd, Elf_Inte
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 212:	      /* Linux/Nios II */
       /* pr_cursig */
@@ -1948,13 +1942,13 @@ nios2_grok_prstatus (bfd *abfd, Elf_Inte
 }
 
 /* Implement elf_backend_grok_psinfo.  */
-static bfd_boolean
+static bool
 nios2_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 124:	      /* Linux/Nios II elf_prpsinfo */
       elf_tdata (abfd)->core->program
@@ -1975,7 +1969,7 @@ nios2_grok_psinfo (bfd *abfd, Elf_Intern
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 /* Assorted hash table functions.  */
@@ -2039,7 +2033,6 @@ link_hash_newfunc (struct bfd_hash_entry
 
       eh = (struct elf32_nios2_link_hash_entry *) entry;
       eh->hsh_cache = NULL;
-      eh->dyn_relocs = NULL;
       eh->tls_type = GOT_UNKNOWN;
       eh->got_types_used = 0;
     }
@@ -2133,7 +2126,7 @@ nios2_get_stub_entry (const asection *in
 	return NULL;
 
       hsh = nios2_stub_hash_lookup (&htab->bstab,
-				    stub_name, FALSE, FALSE);
+				    stub_name, false, false);
 
       if (hh != NULL)
 	hh->hsh_cache = hsh;
@@ -2156,21 +2149,21 @@ nios2_add_stub (const char *stub_name,
   asection *stub_sec;
   asection **secptr, **linkptr;
   struct elf32_nios2_stub_hash_entry *hsh;
-  bfd_boolean afterp;
+  bool afterp;
 
   if (stub_type == nios2_stub_call26_before)
     {
       link_sec = htab->stub_group[section->id].first_sec;
       secptr = &(htab->stub_group[section->id].first_stub_sec);
       linkptr = &(htab->stub_group[link_sec->id].first_stub_sec);
-      afterp = FALSE;
+      afterp = false;
     }
   else
     {
       link_sec = htab->stub_group[section->id].last_sec;
       secptr = &(htab->stub_group[section->id].last_stub_sec);
       linkptr = &(htab->stub_group[link_sec->id].last_stub_sec);
-      afterp = TRUE;
+      afterp = true;
     }
   stub_sec = *secptr;
   if (stub_sec == NULL)
@@ -2201,7 +2194,7 @@ nios2_add_stub (const char *stub_name,
 
   /* Enter this entry into the linker stub hash table.  */
   hsh = nios2_stub_hash_lookup (&htab->bstab, stub_name,
-				TRUE, FALSE);
+				true, false);
   if (hsh == NULL)
     {
       /* xgettext:c-format */
@@ -2228,7 +2221,7 @@ nios2_elf32_setup_section_lists (bfd *ou
   unsigned int top_id, top_index;
   asection *section;
   asection **input_list, **list;
-  bfd_size_type amt;
+  size_t amt;
   struct elf32_nios2_link_hash_table *htab = elf32_nios2_hash_table (info);
 
   /* Count the number of input BFDs and find the top input section id.  */
@@ -2483,13 +2476,24 @@ nios2_type_of_stub (asection *input_sec,
     return nios2_stub_none;
 }
 
-static bfd_boolean
+static bool
 nios2_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg ATTRIBUTE_UNUSED)
 {
   struct elf32_nios2_stub_hash_entry *hsh
     = (struct elf32_nios2_stub_hash_entry *) gen_entry;
   asection *stub_sec = hsh->stub_sec;
   bfd_vma sym_value;
+  struct bfd_link_info *info;
+
+  info = (struct bfd_link_info *) in_arg;
+
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (hsh->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without --enable-non-contiguous-regions.\n"),
+			    hsh->target_section);
 
   /* Make a note of the offset within the stubs for this entry.  */
   hsh->stub_offset = stub_sec->size;
@@ -2519,15 +2523,15 @@ nios2_build_one_stub (struct bfd_hash_en
       break;
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* As above, but don't actually build the stub.  Just bump offset so
    we know stub section sizes.  */
-static bfd_boolean
+static bool
 nios2_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg ATTRIBUTE_UNUSED)
 {
   struct elf32_nios2_stub_hash_entry *hsh
@@ -2541,9 +2545,9 @@ nios2_size_one_stub (struct bfd_hash_ent
       break;
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Read in all local syms for all input bfds.
@@ -2560,7 +2564,7 @@ get_local_syms (bfd *output_bfd ATTRIBUT
   /* We want to read in symbol extension records only once.  To do this
      we need to read in the local symbols in parallel and save them for
      later use; so hold pointers to the local symbols in an array.  */
-  bfd_size_type amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count;
+  size_t amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count;
   all_local_syms = bfd_zmalloc (amt);
   htab->all_local_syms = all_local_syms;
   if (all_local_syms == NULL)
@@ -2598,14 +2602,14 @@ get_local_syms (bfd *output_bfd ATTRIBUT
 }
 
 /* Determine and set the size of the stub section for a final link.  */
-bfd_boolean
+bool
 nios2_elf32_size_stubs (bfd *output_bfd, bfd *stub_bfd,
 			struct bfd_link_info *info,
 			asection *(*add_stub_section) (const char *,
-						       asection *, bfd_boolean),
+						       asection *, bool),
 			void (*layout_sections_again) (void))
 {
-  bfd_boolean stub_changed = FALSE;
+  bool stub_changed = false;
   struct elf32_nios2_link_hash_table *htab = elf32_nios2_hash_table (info);
 
   /* Stash our params away.  */
@@ -2623,7 +2627,7 @@ nios2_elf32_size_stubs (bfd *output_bfd,
     {
       if (htab->all_local_syms)
 	goto error_ret_free_local;
-      return FALSE;
+      return false;
     }
 
   while (1)
@@ -2796,7 +2800,7 @@ nios2_elf32_size_stubs (bfd *output_bfd,
 
 		  hsh = nios2_stub_hash_lookup (&htab->bstab,
 						stub_name,
-						FALSE, FALSE);
+						false, false);
 		  if (hsh != NULL)
 		    {
 		      /* The proper stub has already been created.  */
@@ -2815,7 +2819,7 @@ nios2_elf32_size_stubs (bfd *output_bfd,
 		  hsh->stub_type = stub_type;
 		  hsh->hh = hh;
 		  hsh->addend = irela->r_addend;
-		  stub_changed = TRUE;
+		  stub_changed = true;
 		}
 
 	      /* We're done with the internal relocs, free them.  */
@@ -2838,21 +2842,21 @@ nios2_elf32_size_stubs (bfd *output_bfd,
 
       /* Ask the linker to do its stuff.  */
       (*htab->layout_sections_again) ();
-      stub_changed = FALSE;
+      stub_changed = false;
     }
 
   free (htab->all_local_syms);
-  return TRUE;
+  return true;
 
  error_ret_free_local:
   free (htab->all_local_syms);
-  return FALSE;
+  return false;
 }
 
 /* Build all the stubs associated with the current output file.  The
    stubs are kept in a hash table attached to the main linker hash
    table.  This function is called via nios2elf_finish in the linker.  */
-bfd_boolean
+bool
 nios2_elf32_build_stubs (struct bfd_link_info *info)
 {
   asection *stub_sec;
@@ -2876,7 +2880,7 @@ nios2_elf32_build_stubs (struct bfd_link
 	size = stub_sec->size;
 	stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
 	if (stub_sec->contents == NULL && size != 0)
-	  return FALSE;
+	  return false;
 	stub_sec->size = 0;
       }
 
@@ -2884,7 +2888,7 @@ nios2_elf32_build_stubs (struct bfd_link
   table = &htab->bstab;
   bfd_hash_traverse (table, nios2_build_one_stub, info);
 
-  return TRUE;
+  return true;
 }
 
 
@@ -2895,7 +2899,7 @@ nios2_elf32_build_stubs (struct bfd_link
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 nios2_elf32_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -2903,18 +2907,18 @@ nios2_elf32_merge_private_bfd_data (bfd
   flagword new_flags;
 
   if (!is_nios2_elf (ibfd) || !is_nios2_elf (obfd))
-    return TRUE;
+    return true;
 
   /* Check if we have the same endianness.  */
   if (! _bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
   if (!elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
 
       switch (new_flags)
@@ -2929,7 +2933,7 @@ nios2_elf32_merge_private_bfd_data (bfd
 	      _bfd_error_handler
 		(_("error: %pB: big-endian R2 is not supported"), ibfd);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  bfd_default_set_arch_mach (obfd, bfd_arch_nios2, bfd_mach_nios2r2);
 	  break;
@@ -2946,13 +2950,13 @@ nios2_elf32_merge_private_bfd_data (bfd
 	(_("error: %pB: conflicting CPU architectures %d/%d"),
 	 ibfd, new_flags, old_flags);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* Merge Tag_compatibility attributes and any common GNU ones.  */
   _bfd_elf_merge_object_attributes (ibfd, info);
 
-  return TRUE;
+  return true;
 }
 
 /* Implement bfd_elf32_bfd_reloc_type_lookup:
@@ -3002,7 +3006,7 @@ nios2_elf32_bfd_reloc_name_lookup (bfd *
 /* Implement elf_info_to_howto:
    Given a ELF32 relocation, fill in a arelent structure.  */
 
-static bfd_boolean
+static bool
 nios2_elf32_info_to_howto (bfd *abfd, arelent *cache_ptr,
 			   Elf_Internal_Rela *dst)
 {
@@ -3015,9 +3019,9 @@ nios2_elf32_info_to_howto (bfd *abfd, ar
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Return the base VMA address which should be subtracted from real addresses
@@ -3047,22 +3051,22 @@ tpoff (struct bfd_link_info *info, bfd_v
 
 /* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
    dangerous relocation.  */
-static bfd_boolean
+static bool
 nios2_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp, struct bfd_link_info *info)
 {
 
-  bfd_boolean gp_found;
+  bool gp_found;
   struct bfd_hash_entry *h;
   struct bfd_link_hash_entry *lh;
 
   /* If we've already figured out what GP will be, just return it. */
   *pgp = _bfd_get_gp_value (output_bfd);
   if (*pgp)
-    return TRUE;
+    return true;
 
-  h = bfd_hash_lookup (&info->hash->table, "_gp", FALSE, FALSE);
+  h = bfd_hash_lookup (&info->hash->table, "_gp", false, false);
   lh = (struct bfd_link_hash_entry *) h;
-lookup:
+ lookup:
   if (lh)
     {
       switch (lh->type)
@@ -3070,11 +3074,11 @@ lookup:
 	case bfd_link_hash_undefined:
 	case bfd_link_hash_undefweak:
 	case bfd_link_hash_common:
-	  gp_found = FALSE;
+	  gp_found = false;
 	  break;
 	case bfd_link_hash_defined:
 	case bfd_link_hash_defweak:
-	  gp_found = TRUE;
+	  gp_found = true;
 	  {
 	    asection *sym_sec = lh->u.def.section;
 	    bfd_vma sym_value = lh->u.def.value;
@@ -3096,19 +3100,19 @@ lookup:
 	}
     }
   else
-    gp_found = FALSE;
+    gp_found = false;
 
   if (!gp_found)
     {
       /* Only get the error once. */
       *pgp = 4;
       _bfd_set_gp_value (output_bfd, *pgp);
-      return FALSE;
+      return false;
     }
 
   _bfd_set_gp_value (output_bfd, *pgp);
 
-  return TRUE;
+  return true;
 }
 
 /* Retrieve the previously cached _gp pointer, returning bfd_reloc_dangerous
@@ -3117,7 +3121,7 @@ lookup:
    symbol value for an external symbol if we are producing relocatable
    output.  */
 static bfd_reloc_status_type
-nios2_elf_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable,
+nios2_elf_final_gp (bfd *output_bfd, asymbol *symbol, bool relocatable,
 		    char **error_message, bfd_vma *pgp)
 {
   if (bfd_is_und_section (symbol->section) && !relocatable)
@@ -3568,7 +3572,7 @@ nios2_elf32_gprel_relocate (bfd *abfd, a
 		+ symbol->section->output_offset);
 
   /* This assumes we've already cached the _gp symbol.  */
-  r = nios2_elf_final_gp (abfd, symbol, FALSE, msg, &gp);
+  r = nios2_elf_final_gp (abfd, symbol, false, msg, &gp);
   if (r == bfd_reloc_ok)
     {
       relocation = relocation + reloc_entry->addend - gp;
@@ -3671,7 +3675,7 @@ nios2_elf32_callr_relocate (bfd *abfd, a
 
 
 /* Implement elf_backend_relocate_section.  */
-static bfd_boolean
+static int
 nios2_elf32_relocate_section (bfd *output_bfd,
 			      struct bfd_link_info *info,
 			      bfd *input_bfd,
@@ -3720,9 +3724,8 @@ nios2_elf32_relocate_section (bfd *outpu
       const char *name = NULL;
       int r_type;
       const char *format;
-      char *msgbuf = NULL;
       char *msg = NULL;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_vma off;
       int use_plt;
 
@@ -3742,7 +3745,7 @@ nios2_elf32_relocate_section (bfd *outpu
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -3760,7 +3763,7 @@ nios2_elf32_relocate_section (bfd *outpu
 
       if (howto)
 	{
-	  bfd_boolean resolved_to_zero;
+	  bool resolved_to_zero;
 
 	  resolved_to_zero = (h != NULL
 			      && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
@@ -3821,10 +3824,7 @@ nios2_elf32_relocate_section (bfd *outpu
 
 		  format = _("global pointer relative relocation at address "
 			     "%#" PRIx64 " when _gp not defined\n");
-		  if (asprintf (&msgbuf, format,
-				(uint64_t) reloc_address) == -1)
-		    msgbuf = NULL;
-		  msg = msgbuf;
+		  msg = bfd_asprintf (format, (uint64_t) reloc_address);
 		  r = bfd_reloc_dangerous;
 		}
 	      else
@@ -3853,11 +3853,10 @@ nios2_elf32_relocate_section (bfd *outpu
 				 "the global pointer (at %#" PRIx64 ") "
 				 "because the offset (%" PRId64 ") is out of "
 				 "the allowed range, -32678 to 32767\n" );
-		      if (asprintf (&msgbuf, format, name,
-				    (uint64_t) symbol_address, (uint64_t) gp,
-				    (int64_t) relocation) == -1)
-			msgbuf = NULL;
-		      msg = msgbuf;
+		      msg = bfd_asprintf (format, name,
+					  (uint64_t) symbol_address,
+					  (uint64_t) gp,
+					  (int64_t) relocation);
 		      r = bfd_reloc_outofrange;
 		    }
 		  else
@@ -3918,7 +3917,7 @@ nios2_elf32_relocate_section (bfd *outpu
 				+ splt->output_offset
 				+ h->plt.offset);
 
-		  unresolved_reloc = FALSE;
+		  unresolved_reloc = false;
 		}
 	      /* Detect R_NIOS2_CALL26 relocations that would overflow the
 		 256MB segment.  Replace the target with a reference to a
@@ -3994,7 +3993,7 @@ nios2_elf32_relocate_section (bfd *outpu
 
 	      if (h != NULL)
 		{
-		  bfd_boolean dyn;
+		  bool dyn;
 
 		  eh = (struct elf32_nios2_link_hash_entry *)h;
 		  use_plt = (eh->got_types_used == CALL_USED
@@ -4032,7 +4031,7 @@ nios2_elf32_relocate_section (bfd *outpu
 			}
 		    }
 		  else
-		    unresolved_reloc = FALSE;
+		    unresolved_reloc = false;
 		}
 	      else
 		{
@@ -4221,7 +4220,7 @@ nios2_elf32_relocate_section (bfd *outpu
 		indx = 0;
 		if (h != NULL)
 		  {
-		    bfd_boolean dyn;
+		    bool dyn;
 		    dyn = htab->root.dynamic_sections_created;
 		    if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
 							 bfd_link_pic (info),
@@ -4229,7 +4228,7 @@ nios2_elf32_relocate_section (bfd *outpu
 			&& (!bfd_link_pic (info)
 			    || !SYMBOL_REFERENCES_LOCAL (info, h)))
 		      {
-			unresolved_reloc = FALSE;
+			unresolved_reloc = false;
 			indx = h->dynindx;
 		      }
 		    off = h->got.offset;
@@ -4252,7 +4251,7 @@ nios2_elf32_relocate_section (bfd *outpu
 		  off &= ~1;
 		else
 		  {
-		    bfd_boolean need_relocs = FALSE;
+		    bool need_relocs = false;
 		    Elf_Internal_Rela outrel;
 		    bfd_byte *loc = NULL;
 		    int cur_off = off;
@@ -4267,7 +4266,7 @@ nios2_elf32_relocate_section (bfd *outpu
 				&& !resolved_to_zero)
 			    || h->root.type != bfd_link_hash_undefweak))
 		      {
-			need_relocs = TRUE;
+			need_relocs = true;
 			if (htab->root.srelgot == NULL)
 			  abort ();
 			loc = htab->root.srelgot->contents;
@@ -4379,7 +4378,7 @@ nios2_elf32_relocate_section (bfd *outpu
 		       "permitted in shared object"),
 		     input_bfd, input_section,
 		     (uint64_t) rel->r_offset, howto->name);
-		  return FALSE;
+		  return false;
 		}
 	      else
 		relocation = tpoff (info, relocation) - TP_OFFSET;
@@ -4399,22 +4398,22 @@ nios2_elf32_relocate_section (bfd *outpu
 		{
 		  Elf_Internal_Rela outrel;
 		  bfd_byte *loc;
-		  bfd_boolean skip, relocate;
+		  bool skip, relocate;
 
 		  /* When generating a shared object, these relocations
 		     are copied into the output file to be resolved at run
 		     time.  */
 
-		  skip = FALSE;
-		  relocate = FALSE;
+		  skip = false;
+		  relocate = false;
 
 		  outrel.r_offset
 		    = _bfd_elf_section_offset (output_bfd, info,
 					       input_section, rel->r_offset);
 		  if (outrel.r_offset == (bfd_vma) -1)
-		    skip = TRUE;
+		    skip = true;
 		  else if (outrel.r_offset == (bfd_vma) -2)
-		    skip = TRUE, relocate = TRUE;
+		    skip = true, relocate = true;
 		  outrel.r_offset += (input_section->output_section->vma
 				      + input_section->output_offset);
 
@@ -4433,7 +4432,7 @@ nios2_elf32_relocate_section (bfd *outpu
 		    {
 		      /* This symbol is local, or marked to become local.  */
 		      outrel.r_addend = relocation + rel->r_addend;
-		      relocate = TRUE;
+		      relocate = true;
 		      outrel.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE);
 		    }
 
@@ -4499,7 +4498,7 @@ nios2_elf32_relocate_section (bfd *outpu
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol) (info, name, input_bfd,
 						    input_section,
-						    rel->r_offset, TRUE);
+						    rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -4527,30 +4526,28 @@ nios2_elf32_relocate_section (bfd *outpu
 	    {
 	      (*info->callbacks->warning) (info, msg, name, input_bfd,
 					   input_section, rel->r_offset);
-	      if (msgbuf)
-		free (msgbuf);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Implement elf-backend_section_flags:
    Convert NIOS2 specific section flags to bfd internal section flags.  */
-static bfd_boolean
-nios2_elf32_section_flags (flagword *flags, const Elf_Internal_Shdr *hdr)
+static bool
+nios2_elf32_section_flags (const Elf_Internal_Shdr *hdr)
 {
   if (hdr->sh_flags & SHF_NIOS2_GPREL)
-    *flags |= SEC_SMALL_DATA;
+    hdr->bfd_section->flags |= SEC_SMALL_DATA;
 
-  return TRUE;
+  return true;
 }
 
 /* Implement elf_backend_fake_sections:
    Set the correct type for an NIOS2 ELF section.  We do this by the
    section name, which is a hack, but ought to work.  */
-static bfd_boolean
+static bool
 nios2_elf32_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 			   Elf_Internal_Shdr *hdr, asection *sec)
 {
@@ -4562,12 +4559,12 @@ nios2_elf32_fake_sections (bfd *abfd ATT
       || strcmp (name, ".lit4") == 0 || strcmp (name, ".lit8") == 0)
     hdr->sh_flags |= SHF_NIOS2_GPREL;
 
-  return TRUE;
+  return true;
 }
 
 /* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up
    shortcuts to them in our hash table.  */
-static bfd_boolean
+static bool
 create_got_section (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf32_nios2_link_hash_table *htab;
@@ -4576,12 +4573,12 @@ create_got_section (bfd *dynobj, struct
   htab = elf32_nios2_hash_table (info);
 
   if (! _bfd_elf_create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   /* In order for the two loads in .PLTresolve to share the same %hiadj,
      _GLOBAL_OFFSET_TABLE_ must be aligned to a 16-byte boundary.  */
   if (!bfd_set_section_alignment (htab->root.sgotplt, 4))
-    return FALSE;
+    return false;
 
   /* The Nios II ABI specifies that GOT-relative relocations are relative
      to the linker-created symbol _gp_got, rather than using
@@ -4591,26 +4588,26 @@ create_got_section (bfd *dynobj, struct
 				   "_gp_got");
   htab->h_gp_got = h;
   if (h == NULL)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Implement elf_backend_create_dynamic_sections:
    Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and
    .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
    hash table.  */
-static bfd_boolean
+static bool
 nios2_elf32_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf32_nios2_link_hash_table *htab;
 
   htab = elf32_nios2_hash_table (info);
   if (!htab->root.sgot && !create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
-    return FALSE;
+    return false;
 
   /* In order for the two loads in a shared object .PLTresolve to share the
      same %hiadj, the start of the PLT (as well as the GOT) must be aligned
@@ -4631,37 +4628,6 @@ nios2_elf32_copy_indirect_symbol (struct
   edir = (struct elf32_nios2_link_hash_entry *) dir;
   eind = (struct elf32_nios2_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect
       && dir->got.refcount <= 0)
     {
@@ -4676,7 +4642,7 @@ nios2_elf32_copy_indirect_symbol (struct
 
 /* Set the right machine number for a NIOS2 ELF file.  */
 
-static bfd_boolean
+static bool
 nios2_elf32_object_p (bfd *abfd)
 {
   unsigned long mach;
@@ -4694,17 +4660,17 @@ nios2_elf32_object_p (bfd *abfd)
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Implement elf_backend_check_relocs:
    Look through the relocs for a section during the first phase.  */
-static bfd_boolean
+static bool
 nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			  asection *sec, const Elf_Internal_Rela *relocs)
 {
   Elf_Internal_Shdr *symtab_hdr;
-  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
+  struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
   struct elf32_nios2_link_hash_table *htab;
@@ -4712,14 +4678,10 @@ nios2_elf32_check_relocs (bfd *abfd, str
   bfd_signed_vma *local_got_refcounts;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
-  sym_hashes_end = (sym_hashes
-		    + symtab_hdr->sh_size / sizeof (Elf32_External_Sym));
-  if (!elf_bad_symtab (abfd))
-    sym_hashes_end -= symtab_hdr->sh_info;
   local_got_refcounts = elf_local_got_refcounts (abfd);
 
   htab = elf32_nios2_hash_table (info);
@@ -4810,7 +4772,7 @@ nios2_elf32_check_relocs (bfd *abfd, str
 		    local_got_refcounts
 		      = ((bfd_signed_vma *) bfd_zalloc (abfd, size));
 		    if (local_got_refcounts == NULL)
-		      return FALSE;
+		      return false;
 		    elf_local_got_refcounts (abfd) = local_got_refcounts;
 		    elf32_nios2_local_got_tls_type (abfd)
 		      = (char *) (local_got_refcounts + symtab_hdr->sh_info);
@@ -4841,7 +4803,7 @@ nios2_elf32_check_relocs (bfd *abfd, str
 	      if (htab->root.dynobj == NULL)
 		htab->root.dynobj = abfd;
 	      if (!create_got_section (htab->root.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -4853,14 +4815,14 @@ nios2_elf32_check_relocs (bfd *abfd, str
 	     Reconstruct it for later use during GC.  */
 	case R_NIOS2_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_NIOS2_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_NIOS2_BFD_RELOC_32:
@@ -4908,15 +4870,15 @@ nios2_elf32_check_relocs (bfd *abfd, str
 		    htab->root.dynobj = abfd;
 
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->root.dynobj, 2, abfd, TRUE);
+		    (sec, htab->root.dynobj, 2, abfd, true);
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
-		head = &((struct elf32_nios2_link_hash_entry *) h)->dyn_relocs;
+		head = &h->dyn_relocs;
 	      else
 		{
 		  /* Track dynamic relocs needed for local syms too.
@@ -4927,10 +4889,10 @@ nios2_elf32_check_relocs (bfd *abfd, str
 		  void *vpp;
 		  Elf_Internal_Sym *isym;
 
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
@@ -4943,11 +4905,11 @@ nios2_elf32_check_relocs (bfd *abfd, str
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->root.dynobj, amt));
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -4962,7 +4924,7 @@ nios2_elf32_check_relocs (bfd *abfd, str
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -4989,7 +4951,7 @@ nios2_elf32_gc_mark_hook (asection *sec,
 /* Implement elf_backend_finish_dynamic_symbols:
    Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
-static bfd_boolean
+static bool
 nios2_elf32_finish_dynamic_symbol (bfd *output_bfd,
 				   struct bfd_link_info *info,
 				   struct elf_link_hash_entry *h,
@@ -5173,11 +5135,11 @@ nios2_elf32_finish_dynamic_symbol (bfd *
       || h == htab->h_gp_got)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Implement elf_backend_finish_dynamic_sections.  */
-static bfd_boolean
+static bool
 nios2_elf32_finish_dynamic_sections (bfd *output_bfd,
 				     struct bfd_link_info *info)
 {
@@ -5306,7 +5268,7 @@ nios2_elf32_finish_dynamic_sections (bfd
 	elf_section_data (sgotplt->output_section)->this_hdr.sh_entsize = 4;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Implement elf_backend_adjust_dynamic_symbol:
@@ -5315,7 +5277,7 @@ nios2_elf32_finish_dynamic_sections (bfd
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
-static bfd_boolean
+static bool
 nios2_elf32_adjust_dynamic_symbol (struct bfd_link_info *info,
 				   struct elf_link_hash_entry *h)
 {
@@ -5354,7 +5316,7 @@ nios2_elf32_adjust_dynamic_symbol (struc
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
 
   /* Reinitialize the plt offset now that it is not used as a reference
@@ -5370,13 +5332,13 @@ nios2_elf32_adjust_dynamic_symbol (struc
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* If there are no non-GOT references, we do not need a copy
      relocation.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* This is a reference to a symbol defined by a dynamic object which
      is not a function.
@@ -5385,13 +5347,13 @@ nios2_elf32_adjust_dynamic_symbol (struc
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   if (h->size == 0)
     {
       _bfd_error_handler (_("dynamic variable `%s' is zero size"),
 			  h->root.root.string);
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -5431,7 +5393,7 @@ nios2_elf32_adjust_dynamic_symbol (struc
   s->size = BFD_ALIGN (s->size, (bfd_size_type)1 << align2);
   if (align2 > bfd_section_alignment (s)
       && !bfd_set_section_alignment (s, align2))
-    return FALSE;
+    return false;
 
   /* Define the symbol as being at this point in the section.  */
   h->root.u.def.section = s;
@@ -5440,18 +5402,18 @@ nios2_elf32_adjust_dynamic_symbol (struc
   /* Increment the section size to make room for the symbol.  */
   s->size += h->size;
 
-  return TRUE;
+  return true;
 }
 
 /* Worker function for nios2_elf32_size_dynamic_sections.  */
-static bfd_boolean
-adjust_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
+static bool
+adjust_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
   struct elf32_nios2_link_hash_table *htab;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (h->root.type == bfd_link_hash_warning)
     /* When warning symbols are created, they **replace** the "real"
@@ -5467,14 +5429,14 @@ adjust_dynrelocs (struct elf_link_hash_e
   if (htab->root.splt == h->root.u.def.section)
     h->root.u.def.value += htab->res_n_size;
 
-  return TRUE;
+  return true;
 }
 
 /* Another worker function for nios2_elf32_size_dynamic_sections.
    Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
-static bfd_boolean
-allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
+static bool
+allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
   struct elf32_nios2_link_hash_table *htab;
@@ -5483,7 +5445,7 @@ allocate_dynrelocs (struct elf_link_hash
   int use_plt;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (h->root.type == bfd_link_hash_warning)
     /* When warning symbols are created, they **replace** the "real"
@@ -5502,7 +5464,7 @@ allocate_dynrelocs (struct elf_link_hash
       if (h->dynindx == -1
 	  && !h->forced_local
 	  && !bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
 	{
@@ -5559,7 +5521,7 @@ allocate_dynrelocs (struct elf_link_hash
   if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = eh->tls_type;
       int indx;
 
@@ -5568,7 +5530,7 @@ allocate_dynrelocs (struct elf_link_hash
       if (h->dynindx == -1
 	  && !h->forced_local
 	  && !bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
 
       s = htab->root.sgot;
       h->got.offset = s->size;
@@ -5621,8 +5583,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -5637,7 +5599,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -5650,19 +5612,19 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
 	  else if (h->dynindx == -1
 		   && !h->forced_local
 		   && !bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
     }
   else
@@ -5682,7 +5644,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  if (h->dynindx == -1
 	      && !h->forced_local
 	      && !bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 
 	  /* If that succeeded, we know we'll be keeping all the
 	     relocs.  */
@@ -5690,30 +5652,30 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Implement elf_backend_size_dynamic_sections:
    Set the sizes of the dynamic sections.  */
-static bfd_boolean
+static bool
 nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				   struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
   struct elf32_nios2_link_hash_table *htab;
 
@@ -5777,8 +5739,6 @@ nios2_elf32_size_dynamic_sections (bfd *
 		{
 		  srel = elf_section_data (p->sec)->sreloc;
 		  srel->size += p->count * sizeof (Elf32_External_Rela);
-		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
-		    info->flags |= DF_TEXTREL;
 		}
 	    }
 	}
@@ -5843,7 +5803,7 @@ nios2_elf32_size_dynamic_sections (bfd *
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -5855,12 +5815,12 @@ nios2_elf32_size_dynamic_sections (bfd *
 	 of the dynobj section names depend upon the input files.  */
       name = bfd_section_name (s);
 
-      if (CONST_STRNEQ (name, ".rela"))
+      if (startswith (name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
 	      if (s != htab->root.srelplt)
-		relocs = TRUE;
+		relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -5896,7 +5856,7 @@ nios2_elf32_size_dynamic_sections (bfd *
       /* Allocate memory for the section contents.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Adjust dynamic symbols that point to the plt to account for the
@@ -5904,45 +5864,7 @@ nios2_elf32_size_dynamic_sections (bfd *
   if (htab->res_n_size)
     elf_link_hash_traverse (& htab->root, adjust_dynrelocs, info);
 
-  if (htab->root.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf_nios2_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (!bfd_link_pic (info) && !add_dynamic_entry (DT_DEBUG, 0))
-	return FALSE;
-
-      if (htab->root.sgotplt->size != 0
-	  && !add_dynamic_entry (DT_PLTGOT, 0))
-	return FALSE;
-
-      if (htab->root.splt->size != 0
-	  && (!add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0)))
-	return FALSE;
-
-      if (relocs
-	  && (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))))
-	return FALSE;
-
-      if (!bfd_link_pic (info) && !add_dynamic_entry (DT_NIOS2_GP, 0))
-	return FALSE;
-
-      if ((info->flags & DF_TEXTREL) != 0
-	  && !add_dynamic_entry (DT_TEXTREL, 0))
-	return FALSE;
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Free the derived linker hash table.  */
@@ -5961,7 +5883,7 @@ static struct bfd_link_hash_table *
 nios2_elf32_link_hash_table_create (bfd *abfd)
 {
   struct elf32_nios2_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf32_nios2_link_hash_table);
+  size_t amt = sizeof (struct elf32_nios2_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -6009,7 +5931,7 @@ nios2_elf32_reloc_type_class (const stru
 }
 
 /* Return 1 if target is one of ours.  */
-static bfd_boolean
+static bool
 is_nios2_elf_target (const struct bfd_target *targ)
 {
   return (targ == &nios2_elf32_le_vec
@@ -6019,7 +5941,7 @@ is_nios2_elf_target (const struct bfd_ta
 /* Implement elf_backend_add_symbol_hook.
    This hook is called by the linker when adding symbols from an object
    file.  We use it to put .comm items in .sbss, and not .bss.  */
-static bfd_boolean
+static bool
 nios2_elf_add_symbol_hook (bfd *abfd,
 			   struct bfd_link_info *info,
 			   Elf_Internal_Sym *sym,
@@ -6040,7 +5962,7 @@ nios2_elf_add_symbol_hook (bfd *abfd,
       htab = elf32_nios2_hash_table (info);
       if (htab->sbss == NULL)
 	{
-	  flagword flags = SEC_IS_COMMON | SEC_LINKER_CREATED;
+	  flagword flags = SEC_IS_COMMON | SEC_SMALL_DATA | SEC_LINKER_CREATED;
 
 	  if (htab->root.dynobj == NULL)
 	    htab->root.dynobj = abfd;
@@ -6048,20 +5970,20 @@ nios2_elf_add_symbol_hook (bfd *abfd,
 	  htab->sbss = bfd_make_section_anyway_with_flags (htab->root.dynobj,
 							   ".sbss", flags);
 	  if (htab->sbss == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       *secp = htab->sbss;
       *valp = sym->st_size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Implement elf_backend_can_make_relative_eh_frame:
    Decide whether to attempt to turn absptr or lsda encodings in
    shared libraries into pcrel within the given input section.  */
-static bfd_boolean
+static bool
 nios2_elf32_can_make_relative_eh_frame (bfd *input_bfd ATTRIBUTE_UNUSED,
 					struct bfd_link_info *info
 					ATTRIBUTE_UNUSED,
@@ -6069,7 +5991,7 @@ nios2_elf32_can_make_relative_eh_frame (
 					ATTRIBUTE_UNUSED)
 {
   /* We can't use PC-relative encodings in the .eh_frame section.  */
-  return FALSE;
+  return false;
 }
 
 /* Implement elf_backend_special_sections.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-nios2.h ./bfd/elf32-nios2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-nios2.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-nios2.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Nios II support for 32-bit ELF
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2024 Free Software Foundation, Inc.
    Contributed by Mentor Graphics
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -28,11 +28,11 @@ extern int nios2_elf32_setup_section_lis
 extern void nios2_elf32_next_input_section
   (struct bfd_link_info *, asection *);
 
-extern bfd_boolean nios2_elf32_size_stubs
+extern bool nios2_elf32_size_stubs
   (bfd *, bfd *, struct bfd_link_info *,
-   asection * (*) (const char *, asection *, bfd_boolean), void (*) (void));
+   asection * (*) (const char *, asection *, bool), void (*) (void));
 
-extern bfd_boolean nios2_elf32_build_stubs
+extern bool nios2_elf32_build_stubs
   (struct bfd_link_info *);
 
 #endif  /* _ELF32_NIOS2_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-or1k.c ./bfd/elf32-or1k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-or1k.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-or1k.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Or1k-specific support for 32-bit ELF.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Contributed for OR32 by Johan Rydberg, jrydberg@opencores.org
 
    PIC parts added by Stefan Kristiansson, stefan.kristiansson@saunalahti.fi,
@@ -30,10 +30,14 @@
 #define N_ONES(X)	(((bfd_vma)2 << (X)) - 1)
 
 #define PLT_ENTRY_SIZE 16
+#define PLT_ENTRY_SIZE_LARGE (6*4)
+#define PLT_MAX_INSN_COUNT 6
 
 #define OR1K_MOVHI(D)		(0x18000000 | (D << 21))
 #define OR1K_ADRP(D)		(0x08000000 | (D << 21))
 #define OR1K_LWZ(D,A)		(0x84000000 | (D << 21) | (A << 16))
+#define OR1K_ADD(D,A,B)		(0xE0000000 | (D << 21) | (A << 16) | (B << 11))
+#define OR1K_ORI(D,A)		(0xA8000000 | (D << 21) | (A << 16))
 #define OR1K_ORI0(D)		(0xA8000000 | (D << 21))
 #define OR1K_JR(B)		(0x44000000 | (B << 11))
 #define OR1K_NOP		0x15000000
@@ -45,595 +49,595 @@ static reloc_howto_type or1k_elf_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_OR1K_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_32,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_16,
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_8,
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_LO_16_IN_INSN, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_LO_16_IN_INSN", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_HI_16_IN_INSN, /* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_HI_16_IN_INSN", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A PC relative 26 bit relocation, right shifted by 2.  */
   HOWTO (R_OR1K_INSN_REL_26, /* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_INSN_REL_26", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_OR1K_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_OR1K_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_OR1K_GNU_VTENTRY, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_OR1K_GNU_VTENTRY", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_32_PCREL,
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_32_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_OR1K_16_PCREL,
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_OR1K_8_PCREL,
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_8_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
    HOWTO (R_OR1K_GOTPC_HI16,	/* Type.  */
 	 16,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 16,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont, /* Complain on overflow.  */
 	 bfd_elf_generic_reloc, /* Special Function.  */
 	 "R_OR1K_GOTPC_HI16",	/* Name.  */
-	 FALSE,		/* Partial Inplace.  */
+	 false,		/* Partial Inplace.  */
 	 0,			/* Source Mask.  */
 	 0xffff,		/* Dest Mask.  */
-	 TRUE),			/* PC relative offset?  */
+	 true),			/* PC relative offset?  */
 
    HOWTO (R_OR1K_GOTPC_LO16,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 16,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont, /* Complain on overflow.  */
 	 bfd_elf_generic_reloc, /* Special Function.  */
 	 "R_OR1K_GOTPC_LO16",	/* Name.  */
-	 FALSE,		/* Partial Inplace.  */
+	 false,		/* Partial Inplace.  */
 	 0,			/* Source Mask.  */
 	 0xffff,		/* Dest Mask.  */
-	 TRUE),			/* PC relative offset?  */
+	 true),			/* PC relative offset?  */
 
   HOWTO (R_OR1K_GOT16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_GOT16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 26 bit PLT relocation.  Shifted by 2.  */
   HOWTO (R_OR1K_PLT26,		/* Type.  */
 	 2,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 26,			/* Bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain on overflow.  */
 	 bfd_elf_generic_reloc, /* Special Function.  */
 	 "R_OR1K_PLT26",	/* Name.  */
-	 FALSE,			/* Partial Inplace.  */
+	 false,			/* Partial Inplace.  */
 	 0,			/* Source Mask.  */
 	 0x03ffffff,		/* Dest Mask.  */
-	 TRUE),			/* PC relative offset?  */
+	 true),			/* PC relative offset?  */
 
   HOWTO (R_OR1K_GOTOFF_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_GOTOFF_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_GOTOFF_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_GOTOFF_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_COPY,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_JMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_GD_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_GD_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_GD_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_GD_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LDM_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_LDM_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LDM_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_LDM_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LDO_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_LDO_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LDO_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_LDO_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_IE_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_IE_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_IE_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_IE_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LE_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_LE_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LE_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_LE_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_TPOFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_TPOFF",    /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_DTPOFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_DTPOFF",   /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_DTPMOD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_DTPMOD",   /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_AHI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_AHI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_GOTOFF_AHI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_GOTOFF_AHI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_IE_AHI16,   /* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_IE_AHI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LE_AHI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_LE_AHI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_SLO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_SLO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_GOTOFF_SLO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_GOTOFF_SLO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LE_SLO16,   /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_LE_SLO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A page relative 21 bit relocation, right shifted by 13, aligned.
      Note that this is *page* relative, not pc relative.  The idea is
@@ -642,174 +646,205 @@ static reloc_howto_type or1k_elf_howto_t
      pc-relative relocations to local symbols.  */
   HOWTO (R_OR1K_PCREL_PG21,    /* type */
 	 13,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_PCREL_PG21",   /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_OR1K_GOT_PG21,       /* type */
 	 13,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_GOT_PG21",     /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_GD_PG21,    /* type */
 	 13,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_GD_PG21",  /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LDM_PG21,   /* type */
 	 13,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_LDM_PG21", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_IE_PG21,    /* type */
 	 13,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_IE_PG21",  /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_OR1K_LO13,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_LO13",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_GOT_LO13,       /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_GOT_LO13",     /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_GD_LO13,    /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_GD_LO13",  /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_LDM_LO13,   /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLD_LDM_LO13", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_TLS_IE_LO13,    /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_TLS_IE_LO13",  /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_OR1K_SLO13,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_OR1K_SLO13",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 26 bit PLT relocation, using ADRP.  Shifted by 2.  */
   HOWTO (R_OR1K_PLTA26,		/* Type.  */
 	 2,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 26,			/* Bitsize.  */
-	 TRUE,			/* pc_relative.  */
+	 true,			/* pc_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain on overflow.  */
 	 bfd_elf_generic_reloc,	/* Special Function.  */
 	 "R_OR1K_PLTA26",	/* Name.  */
-	 FALSE,			/* Partial Inplace.  */
+	 false,			/* Partial Inplace.  */
 	 0,			/* Source Mask.  */
 	 0x03ffffff,		/* Dest Mask.  */
-	 TRUE),			/* PC relative offset?  */
+	 true),			/* PC relative offset?  */
+
+  HOWTO (R_OR1K_GOT_AHI16,	/* type */
+	 16,			/* rightshift */
+	 4,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_OR1K_GOT_AHI16",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
 };
 
+/* A copy of the R_OR1K_GOT16 used in the presense of R_OR1K_GOT_AHI16
+   relocations when we know we can ignore overflows.  */
+static reloc_howto_type or1k_elf_got16_no_overflow_howto =
+  HOWTO (R_OR1K_GOT16,		/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_OR1K_GOT16",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false);		/* pcrel_offset */
+
 /* Map BFD reloc types to Or1k ELF reloc types.  */
 
 struct or1k_reloc_map
@@ -871,23 +906,30 @@ static const struct or1k_reloc_map or1k_
   { BFD_RELOC_OR1K_TLS_IE_LO13,	R_OR1K_TLS_IE_LO13 },
   { BFD_RELOC_OR1K_SLO13,	R_OR1K_SLO13 },
   { BFD_RELOC_OR1K_PLTA26,	R_OR1K_PLTA26 },
+  { BFD_RELOC_OR1K_GOT_AHI16,	R_OR1K_GOT_AHI16 },
 };
 
+/* tls_type is a mask used to track how each symbol is accessed,
+   it may be accessed via multiple types of TLS access methods.
+   We track this for sizing (allocating got + relocation section space) and
+   for how to process relocations.  */
 #define TLS_UNKNOWN    0
 #define TLS_NONE       1
 #define TLS_GD	       2
-#define TLS_LD	       3
-#define TLS_IE	       4
-#define TLS_LE	       5
+#define TLS_LD	       4
+#define TLS_IE	       8
+#define TLS_LE	      16
+
+/* The size of the TLS thread control block, used to offset LE access.  */
+#define TCB_SIZE      16
 
 /* ELF linker hash entry.  */
 struct elf_or1k_link_hash_entry
 {
   struct elf_link_hash_entry root;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
+  /* For calculating PLT size.  */
+  bfd_vma plt_index;
   /* Track type of TLS access.  */
   unsigned char tls_type;
 };
@@ -912,18 +954,27 @@ struct elf_or1k_link_hash_table
 {
   struct elf_link_hash_table root;
 
-  /* Small local sym to section mapping cache.  */
-  struct sym_cache sym_sec;
-
-  bfd_boolean saw_plta;
+  bfd_vma plt_count;
+  bool saw_plta;
 };
 
+static size_t
+elf_or1k_plt_entry_size (bfd_vma plt_index)
+{
+  bfd_vma plt_reloc;
+
+  plt_reloc = plt_index * sizeof (Elf32_External_Rela);
+
+  return (plt_reloc > 0xffff) ? PLT_ENTRY_SIZE_LARGE : PLT_ENTRY_SIZE;
+}
+
 /* Get the ELF linker hash table from a link_info structure.  */
 #define or1k_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-   == OR1K_ELF_DATA ? ((struct elf_or1k_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == OR1K_ELF_DATA)		\
+   ? (struct elf_or1k_link_hash_table *) (p)->hash : NULL)
 
-static bfd_boolean
+static bool
 elf_or1k_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct elf_or1k_obj_tdata),
@@ -957,7 +1008,6 @@ or1k_elf_link_hash_newfunc (struct bfd_h
       struct elf_or1k_link_hash_entry *eh;
 
       eh = (struct elf_or1k_link_hash_entry *) ret;
-      eh->dyn_relocs = NULL;
       eh->tls_type = TLS_UNKNOWN;
     }
 
@@ -970,7 +1020,7 @@ static struct bfd_link_hash_table *
 or1k_elf_link_hash_table_create (bfd *abfd)
 {
   struct elf_or1k_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_or1k_link_hash_table);
+  size_t amt = sizeof (struct elf_or1k_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -1023,7 +1073,7 @@ or1k_reloc_name_lookup (bfd *abfd ATTRIB
 
 /* Set the howto pointer for an Or1k ELF reloc.  */
 
-static bfd_boolean
+static bool
 or1k_info_to_howto_rela (bfd * abfd,
 			 arelent * cache_ptr,
 			 Elf_Internal_Rela * dst)
@@ -1037,25 +1087,55 @@ or1k_info_to_howto_rela (bfd * abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = & or1k_elf_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
-
 /* Return the relocation value for @tpoff relocations..  */
 static bfd_vma
-tpoff (struct bfd_link_info *info, bfd_vma address)
+tpoff (struct bfd_link_info *info, bfd_vma address, bool dynamic)
 {
+  struct elf_link_hash_table *htab = elf_hash_table (info);
+  bfd_vma base;
+
   /* If tls_sec is NULL, we should have signalled an error already.  */
-  if (elf_hash_table (info)->tls_sec == NULL)
+  if (htab->tls_sec == NULL)
     return 0;
 
-  /* The thread pointer on or1k stores the address after the TCB where
-     the data is, just compute the difference. No need to compensate
-     for the size of TCB.  */
-  return (address - elf_hash_table (info)->tls_sec->vma);
+  if (dynamic)
+    return address - htab->tls_sec->vma;
+  else
+    {
+      /* On or1k, the tp points to just after the tcb, if we have an alignment
+	 greater than the tcb size we need to offset by the alignment difference.  */
+      base = align_power ((bfd_vma) TCB_SIZE, htab->tls_sec->alignment_power)
+	     - TCB_SIZE;
+
+      /* The thread pointer on or1k stores the address after the TCB where
+	 the data is, just compute the difference. No need to compensate
+	 for the size of TCB.  */
+      return address - htab->tls_sec->vma + base;
+    }
+}
+
+/* If we have both IE and GD accesses to a symbol the IE relocations should be
+   offset by 8 bytes because the got contains both GD and IE entries.  */
+static bfd_vma
+or1k_initial_exec_offset (reloc_howto_type *howto, unsigned char tls_type_mask)
+{
+   switch (howto->type)
+     {
+     case R_OR1K_TLS_IE_HI16:
+     case R_OR1K_TLS_IE_LO16:
+     case R_OR1K_TLS_IE_PG21:
+     case R_OR1K_TLS_IE_LO13:
+     case R_OR1K_TLS_IE_AHI16:
+       return (tls_type_mask & TLS_GD) != 0 ? 8 : 0;
+     default:
+       return 0;
+     }
 }
 
 /* Like _bfd_final_link_relocate, but handles non-contiguous fields.  */
@@ -1080,6 +1160,7 @@ or1k_final_link_relocate (reloc_howto_ty
   switch (howto->type)
     {
     case R_OR1K_AHI16:
+    case R_OR1K_GOT_AHI16:
     case R_OR1K_GOTOFF_AHI16:
     case R_OR1K_TLS_IE_AHI16:
     case R_OR1K_TLS_LE_AHI16:
@@ -1211,7 +1292,7 @@ or1k_final_link_relocate (reloc_howto_ty
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 or1k_elf_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -1226,17 +1307,16 @@ or1k_elf_relocate_section (bfd *output_b
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
   struct elf_or1k_link_hash_table *htab = or1k_elf_hash_table (info);
-  bfd *dynobj;
   asection *sreloc;
   bfd_vma *local_got_offsets;
   asection *sgot, *splt;
   bfd_vma plt_base, got_base, got_sym_value;
-  bfd_boolean ret_val = TRUE;
+  bool ret_val = true;
+  bool saw_gotha = false;
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
-  dynobj = htab->root.dynobj;
   local_got_offsets = elf_local_got_offsets (input_bfd);
 
   sreloc = elf_section_data (input_section)->sreloc;
@@ -1254,13 +1334,24 @@ or1k_elf_relocate_section (bfd *output_b
       got_sym_value = (hgot->root.u.def.value
 		       + hgot->root.u.def.section->output_section->vma
 		       + hgot->root.u.def.section->output_offset);
-    got_base = sgot->output_section->vma + sgot->output_offset;
+      got_base = sgot->output_section->vma + sgot->output_offset;
     }
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (input_bfd);
   relend = relocs + input_section->reloc_count;
 
+  /* Make a full scan for R_OR1K_GOT_AHI16, since it could be AFTER R_OR1K_GOT16.  */
+  for (rel = relocs; rel < relend; rel++)
+    {
+      int r_type = ELF32_R_TYPE (rel->r_info);
+      if (r_type==R_OR1K_GOT_AHI16)
+        {
+	  saw_gotha = true;
+	  break;
+        }
+    }
+
   for (rel = relocs; rel < relend; rel++)
     {
       reloc_howto_type *howto;
@@ -1286,7 +1377,7 @@ or1k_elf_relocate_section (bfd *output_b
 	    (_("%pB: unknown relocation type %d"),
 	     input_bfd, (int) r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ret_val = FALSE;
+	  ret_val = false;
 	  continue;
 	}
 
@@ -1307,7 +1398,7 @@ or1k_elf_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1340,10 +1431,11 @@ or1k_elf_relocate_section (bfd *output_b
 		(_("%pB: addend should be zero for plt relocations"),
 		 input_bfd);
 	      bfd_set_error (bfd_error_bad_value);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 	  break;
 
+	case R_OR1K_GOT_AHI16:
 	case R_OR1K_GOT16:
 	case R_OR1K_GOT_PG21:
 	case R_OR1K_GOT_LO13:
@@ -1355,7 +1447,7 @@ or1k_elf_relocate_section (bfd *output_b
 	  BFD_ASSERT (sgot != NULL);
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      BFD_ASSERT (off != (bfd_vma) -1);
@@ -1416,16 +1508,16 @@ or1k_elf_relocate_section (bfd *output_b
 
 		      /* We need to generate a R_OR1K_RELATIVE reloc
 			 for the dynamic linker.  */
-			srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+		      srelgot = htab->root.srelgot;
 		      BFD_ASSERT (srelgot != NULL);
 
 		      outrel.r_offset = got_base + off;
 		      outrel.r_info = ELF32_R_INFO (0, R_OR1K_RELATIVE);
 		      outrel.r_addend = relocation;
 		      loc = srelgot->contents;
-			loc += (srelgot->reloc_count
-				* sizeof (Elf32_External_Rela));
-		      bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc);
+		      loc += (srelgot->reloc_count
+			      * sizeof (Elf32_External_Rela));
+		      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
 		      ++srelgot->reloc_count;
 		    }
 		  local_got_offsets[r_symndx] |= 1;
@@ -1435,9 +1527,16 @@ or1k_elf_relocate_section (bfd *output_b
 	    /* The GOT_PG21 and GOT_LO13 relocs are pc-relative,
 	       while the GOT16 reloc is GOT relative.  */
 	    relocation = got_base + off;
-	    if (r_type == R_OR1K_GOT16)
+	    if (r_type == R_OR1K_GOT16
+		|| r_type == R_OR1K_GOT_AHI16)
 	      relocation -= got_sym_value;
 
+	    /* If we have a R_OR1K_GOT16 following a R_OR1K_GOT_AHI16
+	       relocation we assume the code is doing the right thing to avoid
+	       overflows.  */
+	    if (r_type == R_OR1K_GOT16 && saw_gotha)
+	      howto = &or1k_elf_got16_no_overflow_howto;
+
 	  /* Addend should be zero.  */
 	  if (rel->r_addend != 0)
 	    {
@@ -1445,7 +1544,7 @@ or1k_elf_relocate_section (bfd *output_b
 		(_("%pB: addend should be zero for got relocations"),
 		 input_bfd);
 	      bfd_set_error (bfd_error_bad_value);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 	  }
 	  break;
@@ -1461,13 +1560,25 @@ or1k_elf_relocate_section (bfd *output_b
 	      _bfd_error_handler
 		(_("%pB: gotoff relocation against dynamic symbol %s"),
 		 input_bfd, h->root.root.string);
-	      ret_val = FALSE;
+	      ret_val = false;
 	      bfd_set_error (bfd_error_bad_value);
 	    }
 	  relocation -= got_sym_value;
 	  break;
 
 	case R_OR1K_INSN_REL_26:
+	  /* For a non-shared link, these will reference plt or call the
+	     version of actual object.  */
+	  if (bfd_link_pic (info) && !SYMBOL_CALLS_LOCAL (info, h))
+	    {
+	      _bfd_error_handler
+		(_("%pB: pc-relative relocation against dynamic symbol %s"),
+		 input_bfd, name);
+	      ret_val = false;
+	      bfd_set_error (bfd_error_bad_value);
+	    }
+	  break;
+
 	case R_OR1K_PCREL_PG21:
 	case R_OR1K_LO13:
 	case R_OR1K_SLO13:
@@ -1478,7 +1589,7 @@ or1k_elf_relocate_section (bfd *output_b
 	      _bfd_error_handler
 		(_("%pB: pc-relative relocation against dynamic symbol %s"),
 		 input_bfd, name);
-	      ret_val = FALSE;
+	      ret_val = false;
 	      bfd_set_error (bfd_error_bad_value);
 	    }
 	  break;
@@ -1492,7 +1603,7 @@ or1k_elf_relocate_section (bfd *output_b
 	      _bfd_error_handler
 		(_("%pB: non-pic relocation against symbol %s"),
 		 input_bfd, name);
-	      ret_val = FALSE;
+	      ret_val = false;
 	      bfd_set_error (bfd_error_bad_value);
 	    }
 	  break;
@@ -1523,7 +1634,7 @@ or1k_elf_relocate_section (bfd *output_b
 	      {
 		Elf_Internal_Rela outrel;
 		bfd_byte *loc;
-		bfd_boolean skip;
+		bool skip;
 
 		/* When generating a shared object, these relocations
 		   are copied into the output file to be resolved at run
@@ -1531,15 +1642,15 @@ or1k_elf_relocate_section (bfd *output_b
 
 		BFD_ASSERT (sreloc != NULL);
 
-		skip = FALSE;
+		skip = false;
 
 		outrel.r_offset =
 		  _bfd_elf_section_offset (output_bfd, info, input_section,
 					   rel->r_offset);
 		if (outrel.r_offset == (bfd_vma) -1)
-		  skip = TRUE;
+		  skip = true;
 		else if (outrel.r_offset == (bfd_vma) -2)
-		  skip = TRUE;
+		  skip = true;
 		outrel.r_offset += (input_section->output_section->vma
 				    + input_section->output_offset);
 
@@ -1577,7 +1688,7 @@ or1k_elf_relocate_section (bfd *output_b
 	    (_("%pB: support for local dynamic not implemented"),
 	     input_bfd);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 
 	case R_OR1K_TLS_GD_HI16:
 	case R_OR1K_TLS_GD_LO16:
@@ -1591,54 +1702,80 @@ or1k_elf_relocate_section (bfd *output_b
 	  {
 	    bfd_vma gotoff;
 	    Elf_Internal_Rela rela;
+	    asection *srelgot;
 	    bfd_byte *loc;
-	    int dynamic;
+	    bool dynamic;
+	    int indx = 0;
+	    unsigned char tls_type;
 
-	    sreloc = bfd_get_section_by_name (dynobj, ".rela.got");
+	    srelgot = htab->root.srelgot;
 
 	    /* Mark as TLS related GOT entry by setting
-	       bit 2 as well as bit 1.  */
+	       bit 2 to indcate TLS and bit 1 to indicate GOT.  */
 	    if (h != NULL)
 	      {
 		gotoff = h->got.offset;
+		tls_type = ((struct elf_or1k_link_hash_entry *) h)->tls_type;
 		h->got.offset |= 3;
 	      }
 	    else
 	      {
+		unsigned char *local_tls_type;
+
 		gotoff = local_got_offsets[r_symndx];
+		local_tls_type = (unsigned char *) elf_or1k_local_tls_type (input_bfd);
+		tls_type = local_tls_type == NULL ? TLS_NONE
+						  : local_tls_type[r_symndx];
 		local_got_offsets[r_symndx] |= 3;
 	      }
 
 	    /* Only process the relocation once.  */
-	    if (gotoff & 1)
+	    if ((gotoff & 1) != 0)
 	      {
-		relocation = sgot->output_offset + (gotoff  & ~3);
+		gotoff += or1k_initial_exec_offset (howto, tls_type);
+
+		/* The PG21 and LO13 relocs are pc-relative, while the
+		   rest are GOT relative.  */
+		relocation = got_base + (gotoff & ~3);
+		if (!(r_type == R_OR1K_TLS_GD_PG21
+		    || r_type == R_OR1K_TLS_GD_LO13
+		    || r_type == R_OR1K_TLS_IE_PG21
+		    || r_type == R_OR1K_TLS_IE_LO13))
+		  relocation -= got_sym_value;
 		break;
 	      }
 
 	    BFD_ASSERT (elf_hash_table (info)->hgot == NULL
 			|| elf_hash_table (info)->hgot->root.u.def.value == 0);
 
-	    /* Dynamic entries will require relocations. if we do not need
+	    if (h != NULL)
+	      {
+		bool dyn = htab->root.dynamic_sections_created;
+		bool pic = bfd_link_pic (info);
+
+		if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, pic, h)
+		    && (!pic || !SYMBOL_REFERENCES_LOCAL (info, h)))
+		  indx = h->dynindx;
+	      }
+
+	    /* Dynamic entries will require relocations.  If we do not need
 	       them we will just use the default R_OR1K_NONE and
 	       not set anything.  */
-	    dynamic = bfd_link_pic (info)
-	      || (sec && (sec->flags & SEC_ALLOC) != 0
-		  && h != NULL
-		  && (h->root.type == bfd_link_hash_defweak || !h->def_regular));
+	    dynamic = (bfd_link_pic (info) || indx != 0)
+		       && (h == NULL
+			   || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+			   || h->root.type != bfd_link_hash_undefweak);
 
 	    /* Shared GD.  */
-	    if (dynamic
-		&& (howto->type == R_OR1K_TLS_GD_HI16
-		    || howto->type == R_OR1K_TLS_GD_LO16
-		    || howto->type == R_OR1K_TLS_GD_PG21
-		    || howto->type == R_OR1K_TLS_GD_LO13))
+	    if (dynamic && ((tls_type & TLS_GD) != 0))
 	      {
 		int i;
 
 		/* Add DTPMOD and DTPOFF GOT and rela entries.  */
 		for (i = 0; i < 2; ++i)
 		  {
+		    BFD_ASSERT (srelgot->contents != NULL);
+
 		    rela.r_offset = got_base + gotoff + i*4;
 		    if (h != NULL && h->dynindx != -1)
 		      {
@@ -1650,30 +1787,33 @@ or1k_elf_relocate_section (bfd *output_b
 		      {
 			rela.r_info = ELF32_R_INFO (0,
 			    (i == 0 ? R_OR1K_TLS_DTPMOD : R_OR1K_TLS_DTPOFF));
-			rela.r_addend = tpoff (info, relocation);
+			rela.r_addend =
+			    (i == 0 ? 0 : tpoff (info, relocation, dynamic));
 		      }
 
-		    loc = sreloc->contents;
-		    loc += sreloc->reloc_count++ *
-		      sizeof (Elf32_External_Rela);
+		    loc = srelgot->contents;
+		    loc += (srelgot->reloc_count++
+			    * sizeof (Elf32_External_Rela));
 
 		    bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
 		    bfd_put_32 (output_bfd, 0, sgot->contents + gotoff + i*4);
 		  }
 	      }
 	    /* Static GD.  */
-	    else if (howto->type == R_OR1K_TLS_GD_HI16
-		     || howto->type == R_OR1K_TLS_GD_LO16
-		     || howto->type == R_OR1K_TLS_GD_PG21
-		     || howto->type == R_OR1K_TLS_GD_LO13)
+	    else if ((tls_type & TLS_GD) != 0)
 	      {
 		bfd_put_32 (output_bfd, 1, sgot->contents + gotoff);
-		bfd_put_32 (output_bfd, tpoff (info, relocation),
+		bfd_put_32 (output_bfd, tpoff (info, relocation, dynamic),
 		    sgot->contents + gotoff + 4);
 	      }
+
+	    gotoff += or1k_initial_exec_offset (howto, tls_type);
+
 	    /* Shared IE.  */
-	    else if (dynamic)
+	    if (dynamic && ((tls_type & TLS_IE) != 0))
 	      {
+		BFD_ASSERT (srelgot->contents != NULL);
+
 		/* Add TPOFF GOT and rela entries.  */
 		rela.r_offset = got_base + gotoff;
 		if (h != NULL && h->dynindx != -1)
@@ -1684,21 +1824,19 @@ or1k_elf_relocate_section (bfd *output_b
 		else
 		  {
 		    rela.r_info = ELF32_R_INFO (0, R_OR1K_TLS_TPOFF);
-		    rela.r_addend = tpoff (info, relocation);
+		    rela.r_addend = tpoff (info, relocation, dynamic);
 		  }
 
-		loc = sreloc->contents;
-		loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
+		loc = srelgot->contents;
+		loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
 
 		bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
 		bfd_put_32 (output_bfd, 0, sgot->contents + gotoff);
 	      }
 	    /* Static IE.  */
-	    else
-	      {
-		bfd_put_32 (output_bfd, tpoff (info, relocation),
-			    sgot->contents + gotoff);
-	      }
+	    else if ((tls_type & TLS_IE) != 0)
+	      bfd_put_32 (output_bfd, tpoff (info, relocation, dynamic),
+			  sgot->contents + gotoff);
 
 	    /* The PG21 and LO13 relocs are pc-relative, while the
 	       rest are GOT relative.  */
@@ -1716,7 +1854,7 @@ or1k_elf_relocate_section (bfd *output_b
 	case R_OR1K_TLS_LE_AHI16:
 	case R_OR1K_TLS_LE_SLO16:
 	  /* Relocation is offset from TP.  */
-	  relocation = tpoff (info, relocation);
+	  relocation = tpoff (info, relocation, 0);
 	  break;
 
 	case R_OR1K_TLS_DTPMOD:
@@ -1729,7 +1867,7 @@ or1k_elf_relocate_section (bfd *output_b
 	    (_("%pB: will not resolve runtime TLS relocation"),
 	     input_bfd);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 
 	default:
 	  break;
@@ -1752,7 +1890,7 @@ or1k_elf_relocate_section (bfd *output_b
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -1804,7 +1942,7 @@ or1k_elf_gc_mark_hook (asection *sec,
 
 /* Look through the relocs for a section during the first phase.  */
 
-static bfd_boolean
+static bool
 or1k_elf_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
@@ -1820,23 +1958,14 @@ or1k_elf_check_relocs (bfd *abfd,
   asection *sreloc = NULL;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
 
   htab = or1k_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
 
@@ -1895,7 +2024,7 @@ or1k_elf_check_relocs (bfd *abfd,
 
       /* Record TLS type.  */
       if (h != NULL)
-	  ((struct elf_or1k_link_hash_entry *) h)->tls_type = tls_type;
+	  ((struct elf_or1k_link_hash_entry *) h)->tls_type |= tls_type;
       else
 	{
 	  unsigned char *local_tls_type;
@@ -1909,10 +2038,10 @@ or1k_elf_check_relocs (bfd *abfd,
 	      size = symtab_hdr->sh_info;
 	      local_tls_type = bfd_zalloc (abfd, size);
 	      if (local_tls_type == NULL)
-		return FALSE;
+		return false;
 	      elf_or1k_local_tls_type (abfd) = local_tls_type;
 	    }
-	  local_tls_type[r_symndx] = tls_type;
+	  local_tls_type[r_symndx] |= tls_type;
 	}
 
       switch (r_type)
@@ -1921,19 +2050,19 @@ or1k_elf_check_relocs (bfd *abfd,
 	     Reconstruct it for later use during GC.  */
 	case R_OR1K_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_OR1K_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation requires .plt entry.  */
 	case R_OR1K_PLTA26:
-	  htab->saw_plta = TRUE;
+	  htab->saw_plta = true;
 	  /* FALLTHRU */
 	case R_OR1K_PLT26:
 	  if (h != NULL)
@@ -1943,6 +2072,7 @@ or1k_elf_check_relocs (bfd *abfd,
 	    }
 	  break;
 
+	case R_OR1K_GOT_AHI16:
 	case R_OR1K_GOT16:
 	case R_OR1K_GOT_PG21:
 	case R_OR1K_GOT_LO13:
@@ -1971,7 +2101,7 @@ or1k_elf_check_relocs (bfd *abfd,
 		      size *= sizeof (bfd_signed_vma);
 		      local_got_refcounts = bfd_zalloc (abfd, size);
 		      if (local_got_refcounts == NULL)
-			return FALSE;
+			return false;
 		      elf_local_got_refcounts (abfd) = local_got_refcounts;
 		    }
 		  local_got_refcounts[r_symndx] += 1;
@@ -1987,7 +2117,7 @@ or1k_elf_check_relocs (bfd *abfd,
 	      if (dynobj == NULL)
 		htab->root.dynobj = dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -2047,7 +2177,7 @@ or1k_elf_check_relocs (bfd *abfd,
 		    && (h->root.type == bfd_link_hash_defweak
 			|| !h->def_regular)))
 	      {
-		struct elf_dyn_relocs *p;
+		struct elf_dyn_relocs *sec_relocs;
 		struct elf_dyn_relocs **head;
 
 		/* When creating a shared object, we must copy these
@@ -2061,9 +2191,9 @@ or1k_elf_check_relocs (bfd *abfd,
 
 		    name = bfd_elf_string_from_elf_section (abfd, strndx, shnam);
 		    if (name == NULL)
-		      return FALSE;
+		      return false;
 
-		    if (strncmp (name, ".rela", 5) != 0
+		    if (!startswith (name, ".rela")
 			|| strcmp (bfd_section_name (sec), name + 5) != 0)
 		      {
 			_bfd_error_handler
@@ -2080,10 +2210,10 @@ or1k_elf_check_relocs (bfd *abfd,
 		    if (sreloc == NULL)
 		      {
 			sreloc = _bfd_elf_make_dynamic_reloc_section
-			  (sec, dynobj, 2, abfd, /*rela?*/ TRUE);
+			  (sec, dynobj, 2, abfd, /*rela?*/ true);
 
 			if (sreloc == NULL)
-			  return FALSE;
+			  return false;
 		      }
 		    elf_section_data (sec)->sreloc = sreloc;
 		  }
@@ -2091,7 +2221,7 @@ or1k_elf_check_relocs (bfd *abfd,
 		/* If this is a global symbol, we count the number of
 		   relocations we need for this symbol.  */
 		if (h != NULL)
-		  head = &((struct elf_or1k_link_hash_entry *) h)->dyn_relocs;
+		  head = &h->dyn_relocs;
 		else
 		  {
 		    /* Track dynamic relocs needed for local syms too.
@@ -2102,79 +2232,94 @@ or1k_elf_check_relocs (bfd *abfd,
 		    Elf_Internal_Sym *isym;
 		    void *vpp;
 
-		    isym = bfd_sym_from_r_symndx (&htab->sym_sec,
+		    isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
 						  abfd, r_symndx);
 		    if (isym == NULL)
-		      return FALSE;
+		      return false;
 
 		    s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		    if (s == NULL)
-		      return FALSE;
+		      return false;
 
 		    vpp = &elf_section_data (s)->local_dynrel;
 		    head = (struct elf_dyn_relocs **) vpp;
 		  }
 
-		p = *head;
-		if (p == NULL || p->sec != sec)
+		sec_relocs = *head;
+		/* Allocate this sections dynamic reolcations structure if this
+		   is a new section.  */
+		if (sec_relocs == NULL || sec_relocs->sec != sec)
 		  {
-		    bfd_size_type amt = sizeof *p;
-		    p = ((struct elf_dyn_relocs *)
-			 bfd_alloc (htab->root.dynobj, amt));
-		    if (p == NULL)
-		      return FALSE;
-		    p->next = *head;
-		    *head = p;
-		    p->sec = sec;
-		    p->count = 0;
-		    p->pc_count = 0;
+		    size_t amt = sizeof *sec_relocs;
+		    sec_relocs = ((struct elf_dyn_relocs *)
+				  bfd_alloc (htab->root.dynobj, amt));
+		    if (sec_relocs == NULL)
+		      return false;
+		    sec_relocs->next = *head;
+		    *head = sec_relocs;
+		    sec_relocs->sec = sec;
+		    sec_relocs->count = 0;
+		    sec_relocs->pc_count = 0;
 		  }
 
-		p->count += 1;
+		sec_relocs->count += 1;
 		if (r_type == R_OR1K_INSN_REL_26)
-		  p->pc_count += 1;
+		  sec_relocs->pc_count += 1;
 	      }
 	  }
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
-or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insn1,
-		      unsigned insn2, unsigned insn3, unsigned insnj)
+or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj,
+		      unsigned insns[], size_t insn_count)
 {
   unsigned nodelay = elf_elfheader (output_bfd)->e_flags & EF_OR1K_NODELAY;
-  unsigned insn4;
+  unsigned output_insns[PLT_MAX_INSN_COUNT];
+
+  /* Copy instructions into the output buffer.  */
+  for (size_t i = 0; i < insn_count; i++)
+    output_insns[i] = insns[i];
 
   /* Honor the no-delay-slot setting.  */
-  if (insn3 == OR1K_NOP)
+  if (insns[insn_count-1] == OR1K_NOP)
     {
-      insn4 = insn3;
+      unsigned slot1, slot2;
+
       if (nodelay)
-	insn3 = insnj;
+	slot1 = insns[insn_count-2], slot2 = insnj;
       else
-	insn3 = insn2, insn2 = insnj;
+	slot1 = insnj, slot2 = insns[insn_count-2];
+
+      output_insns[insn_count-2] = slot1;
+      output_insns[insn_count-1] = slot2;
+      output_insns[insn_count]   = OR1K_NOP;
     }
   else
     {
+      unsigned slot1, slot2;
+
       if (nodelay)
-	insn4 = insnj;
+	slot1 = insns[insn_count-1], slot2 = insnj;
       else
-	insn4 = insn3, insn3 = insnj;
+	slot1 = insnj, slot2 = insns[insn_count-1];
+
+      output_insns[insn_count-1] = slot1;
+      output_insns[insn_count]   = slot2;
     }
 
-  bfd_put_32 (output_bfd, insn1, contents);
-  bfd_put_32 (output_bfd, insn2, contents + 4);
-  bfd_put_32 (output_bfd, insn3, contents + 8);
-  bfd_put_32 (output_bfd, insn4, contents + 12);
+  /* Write out the output buffer.  */
+  for (size_t i = 0; i < (insn_count+1); i++)
+    bfd_put_32 (output_bfd, output_insns[i], contents + (i*4));
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 or1k_elf_finish_dynamic_sections (bfd *output_bfd,
 				  struct bfd_link_info *info)
 {
@@ -2184,7 +2329,7 @@ or1k_elf_finish_dynamic_sections (bfd *o
 
   htab = or1k_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
 
@@ -2236,7 +2381,8 @@ or1k_elf_finish_dynamic_sections (bfd *o
       splt = htab->root.splt;
       if (splt && splt->size > 0)
 	{
-	  unsigned plt0, plt1, plt2;
+	  unsigned plt[PLT_MAX_INSN_COUNT];
+	  size_t plt_insn_count = 3;
 	  bfd_vma got_addr = sgot->output_section->vma + sgot->output_offset;
 
 	  /* Note we force 16 byte alignment on the .got, so that
@@ -2247,27 +2393,27 @@ or1k_elf_finish_dynamic_sections (bfd *o
 	      bfd_vma pc = splt->output_section->vma + splt->output_offset;
 	      unsigned pa = ((got_addr >> 13) - (pc >> 13)) & 0x1fffff;
 	      unsigned po = got_addr & 0x1fff;
-	      plt0 = OR1K_ADRP(12) | pa;
-	      plt1 = OR1K_LWZ(15,12) | (po + 8);
-	      plt2 = OR1K_LWZ(12,12) | (po + 4);
+	      plt[0] = OR1K_ADRP(12) | pa;
+	      plt[1] = OR1K_LWZ(15,12) | (po + 8);
+	      plt[2] = OR1K_LWZ(12,12) | (po + 4);
 	    }
 	  else if (bfd_link_pic (info))
 	    {
-	      plt0 = OR1K_LWZ(15, 16) | 8;	/* .got+8 */
-	      plt1 = OR1K_LWZ(12, 16) | 4;	/* .got+4 */
-	      plt2 = OR1K_NOP;
+	      plt[0] = OR1K_LWZ(15, 16) | 8;	/* .got+8 */
+	      plt[1] = OR1K_LWZ(12, 16) | 4;	/* .got+4 */
+	      plt[2] = OR1K_NOP;
 	    }
 	  else
 	    {
 	      unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff;
 	      unsigned lo = got_addr & 0xffff;
-	      plt0 = OR1K_MOVHI(12) | ha;
-	      plt1 = OR1K_LWZ(15,12) | (lo + 8);
-	      plt2 = OR1K_LWZ(12,12) | (lo + 4);
+	      plt[0] = OR1K_MOVHI(12) | ha;
+	      plt[1] = OR1K_LWZ(15,12) | (lo + 8);
+	      plt[2] = OR1K_LWZ(12,12) | (lo + 4);
 	    }
 
-	  or1k_write_plt_entry (output_bfd, splt->contents,
-				plt0, plt1, plt2, OR1K_JR(15));
+	  or1k_write_plt_entry (output_bfd, splt->contents, OR1K_JR(15),
+				plt, plt_insn_count);
 
 	  elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4;
 	}
@@ -2289,13 +2435,13 @@ or1k_elf_finish_dynamic_sections (bfd *o
   if (htab->root.sgot && htab->root.sgot->size > 0)
     elf_section_data (htab->root.sgot->output_section)->this_hdr.sh_entsize = 4;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 or1k_elf_finish_dynamic_symbol (bfd *output_bfd,
 				struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
@@ -2306,11 +2452,12 @@ or1k_elf_finish_dynamic_symbol (bfd *out
 
   htab = or1k_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (h->plt.offset != (bfd_vma) -1)
     {
-      unsigned int plt0, plt1, plt2;
+      unsigned int plt[PLT_MAX_INSN_COUNT];
+      size_t plt_insn_count = 3;
       asection *splt;
       asection *sgot;
       asection *srela;
@@ -2322,6 +2469,7 @@ or1k_elf_finish_dynamic_symbol (bfd *out
       bfd_vma got_offset;
       bfd_vma got_addr;
       Elf_Internal_Rela rela;
+      bool large_plt_entry;
 
       /* This symbol has an entry in the procedure linkage table.  Set
 	 it up.  */
@@ -2339,10 +2487,13 @@ or1k_elf_finish_dynamic_symbol (bfd *out
 	 corresponds to this symbol.  This is the index of this symbol
 	 in all the symbols for which we are making plt entries.  The
 	 first entry in the procedure linkage table is reserved.  */
-      plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
+      plt_index = ((struct elf_or1k_link_hash_entry *) h)->plt_index;
       plt_addr = plt_base_addr + h->plt.offset;
       plt_reloc = plt_index * sizeof (Elf32_External_Rela);
 
+      large_plt_entry = (elf_or1k_plt_entry_size (plt_index)
+			 == PLT_ENTRY_SIZE_LARGE);
+
       /* Get the offset into the .got table of the entry that
 	corresponds to this function.  Each .got entry is 4 bytes.
 	The first three are reserved.  */
@@ -2354,27 +2505,57 @@ or1k_elf_finish_dynamic_symbol (bfd *out
 	{
 	  unsigned pa = ((got_addr >> 13) - (plt_addr >> 13)) & 0x1fffff;
 	  unsigned po = (got_addr & 0x1fff);
-	  plt0 = OR1K_ADRP(12) | pa;
-	  plt1 = OR1K_LWZ(12,12) | po;
-	  plt2 = OR1K_ORI0(11) | plt_reloc;
+	  plt[0] = OR1K_ADRP(12) | pa;
+	  plt[1] = OR1K_LWZ(12,12) | po;
+	  plt[2] = OR1K_ORI0(11) | plt_reloc;
 	}
       else if (bfd_link_pic (info))
 	{
-	  plt0 = OR1K_LWZ(12,16) | got_offset;
-	  plt1 = OR1K_ORI0(11) | plt_reloc;
-	  plt2 = OR1K_NOP;
+	  if (large_plt_entry)
+	    {
+	      unsigned gotha = ((got_offset + 0x8000) >> 16) & 0xffff;
+	      unsigned got = got_offset & 0xffff;
+	      unsigned pltrelhi = (plt_reloc >> 16) & 0xffff;
+	      unsigned pltrello = plt_reloc & 0xffff;
+
+	      plt[0] = OR1K_MOVHI(12) | gotha;
+	      plt[1] = OR1K_ADD(12,12,16);
+	      plt[2] = OR1K_LWZ(12,12) | got;
+	      plt[3] = OR1K_MOVHI(11) | pltrelhi;
+	      plt[4] = OR1K_ORI(11,11) | pltrello;
+	      plt_insn_count = 5;
+	    }
+	  else
+	    {
+	      plt[0] = OR1K_LWZ(12,16) | got_offset;
+	      plt[1] = OR1K_ORI0(11) | plt_reloc;
+	      plt[2] = OR1K_NOP;
+	    }
 	}
       else
 	{
 	  unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff;
 	  unsigned lo = got_addr & 0xffff;
-	  plt0 = OR1K_MOVHI(12) | ha;
-	  plt1 = OR1K_LWZ(12,12) | lo;
-	  plt2 = OR1K_ORI0(11) | plt_reloc;
+	  plt[0] = OR1K_MOVHI(12) | ha;
+	  plt[1] = OR1K_LWZ(12,12) | lo;
+	  plt[2] = OR1K_ORI0(11) | plt_reloc;
+	}
+
+      /* For large code model we fixup the non-PIC PLT relocation instructions
+	 here.  */
+      if (large_plt_entry && !bfd_link_pic (info))
+	{
+	  unsigned pltrelhi = (plt_reloc >> 16) & 0xffff;
+	  unsigned pltrello = plt_reloc & 0xffff;
+
+	  plt[2] = OR1K_MOVHI(11) | pltrelhi;
+	  plt[3] = OR1K_ORI(11,11) | pltrello;
+	  plt[4] = OR1K_NOP;
+	  plt_insn_count = 5;
 	}
 
       or1k_write_plt_entry (output_bfd, splt->contents + h->plt.offset,
-			    plt0, plt1, plt2, OR1K_JR(12));
+			    OR1K_JR(12), plt, plt_insn_count);
 
       /* Fill in the entry in the global offset table.  We initialize it to
 	 point to the top of the plt.  This is done to lazy lookup the actual
@@ -2402,14 +2583,14 @@ or1k_elf_finish_dynamic_symbol (bfd *out
       && (h->got.offset & 2) == 0) /* Homemade TLS check.  */
     {
       asection *sgot;
-      asection *srela;
+      asection *srelgot;
       Elf_Internal_Rela rela;
 
       /* This symbol has an entry in the global offset table.  Set it
 	 up.  */
       sgot = htab->root.sgot;
-      srela = htab->root.srelgot;
-      BFD_ASSERT (sgot != NULL && srela != NULL);
+      srelgot = htab->root.srelgot;
+      BFD_ASSERT (sgot != NULL && srelgot != NULL);
 
       rela.r_offset = (sgot->output_section->vma
 		       + sgot->output_offset
@@ -2435,10 +2616,10 @@ or1k_elf_finish_dynamic_symbol (bfd *out
 	  rela.r_addend = 0;
 	}
 
-      loc = srela->contents;
-      loc += srela->reloc_count * sizeof (Elf32_External_Rela);
+      loc = srelgot->contents;
+      loc += srelgot->reloc_count * sizeof (Elf32_External_Rela);
       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
-      ++srela->reloc_count;
+      ++srelgot->reloc_count;
     }
 
   if (h->needs_copy)
@@ -2470,7 +2651,7 @@ or1k_elf_finish_dynamic_symbol (bfd *out
       || h == htab->root.hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -2487,31 +2668,13 @@ or1k_elf_reloc_type_class (const struct
     }
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-  struct elf_or1k_link_hash_entry *eh = (struct elf_or1k_link_hash_entry *) h;
-
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 or1k_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				struct elf_link_hash_entry *h)
 {
@@ -2535,11 +2698,10 @@ or1k_elf_adjust_dynamic_symbol (struct b
   if (h->type == STT_FUNC
       || h->needs_plt)
     {
-      if (! bfd_link_pic (info)
-	  && !h->def_dynamic
-	  && !h->ref_dynamic
-	  && h->root.type != bfd_link_hash_undefweak
-	  && h->root.type != bfd_link_hash_undefined)
+      if (h->plt.refcount <= 0
+	  || (SYMBOL_CALLS_LOCAL (info, h)
+	  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+	      && h->root.type == bfd_link_hash_undefweak)))
 	{
 	  /* This case can occur if we saw a PLT reloc in an input
 	     file, but the symbol was never referred to by a dynamic
@@ -2550,7 +2712,7 @@ or1k_elf_adjust_dynamic_symbol (struct b
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) -1;
@@ -2564,7 +2726,7 @@ or1k_elf_adjust_dynamic_symbol (struct b
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2575,26 +2737,26 @@ or1k_elf_adjust_dynamic_symbol (struct b
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (!readonly_dynrelocs (h))
+  if (!_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -2609,7 +2771,7 @@ or1k_elf_adjust_dynamic_symbol (struct b
 
   htab = or1k_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* We must generate a R_OR1K_COPY reloc to tell the dynamic linker
      to copy the initial value out of the dynamic object and into the
@@ -2634,26 +2796,73 @@ or1k_elf_adjust_dynamic_symbol (struct b
   return _bfd_elf_adjust_dynamic_copy (info, h, s);
 }
 
+/* Caclulate an update the sizes required for a symbol in the GOT and
+   RELA relocation section based on the TLS_TYPE and whether or not the symbol
+   is DYNAMIC.
+
+   Symbols with TLS_GD access require 8 bytes in the GOT and, if dynamic,
+   require two relocation entries.  Symbols with TLS_IE access require 4 bytes
+   in the GOT and, if dynamic, require one relocation entry.  Symbols may have
+   both TLS_GD and TLS_IE access to be accounted for.
+
+   Other symbols require 4 bytes in the GOT table and, if dynamic, require one
+   relocation entry.  */
+
+static void
+or1k_set_got_and_rela_sizes (const unsigned char tls_type,
+			     const bool dynamic,
+			     bfd_vma *got_size,
+			     bfd_vma *rela_size)
+{
+  bool is_tls_entry = false;
+
+  /* TLS GD requires two GOT entries and two relocs.  */
+  if ((tls_type & TLS_GD) != 0)
+    {
+      *got_size += 8;
+      is_tls_entry = true;
+    }
+
+  if ((tls_type & TLS_IE) != 0)
+    {
+      *got_size += 4;
+      is_tls_entry = true;
+    }
+
+  if (!is_tls_entry)
+    *got_size += 4;
+
+  if (dynamic)
+    {
+      if ((tls_type & TLS_GD) != 0)
+	*rela_size += 2 * sizeof (Elf32_External_Rela);
+
+      if ((tls_type & TLS_IE) != 0)
+	*rela_size += sizeof (Elf32_External_Rela);
+
+      if (!is_tls_entry)
+	*rela_size += sizeof (Elf32_External_Rela);
+    }
+}
+
+
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info;
   struct elf_or1k_link_hash_table *htab;
-  struct elf_or1k_link_hash_entry *eh;
-  struct elf_dyn_relocs *p;
+  struct elf_dyn_relocs *sec_relocs;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = or1k_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
-
-  eh = (struct elf_or1k_link_hash_entry *) h;
+    return false;
 
   if (htab->root.dynamic_sections_created
       && h->plt.refcount > 0)
@@ -2664,19 +2873,24 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
 	{
-	  asection *s = htab->root.splt;
+	  asection *splt = htab->root.splt;
+	  bfd_vma plt_index;
+
+	  /* Track the index of our plt entry for use in calculating size.  */
+	  plt_index = htab->plt_count++;
+	  ((struct elf_or1k_link_hash_entry *) h)->plt_index = plt_index;
 
 	  /* If this is the first .plt entry, make room for the special
 	     first entry.  */
-	  if (s->size == 0)
-	    s->size = PLT_ENTRY_SIZE;
+	  if (splt->size == 0)
+	    splt->size = elf_or1k_plt_entry_size (plt_index);
 
-	  h->plt.offset = s->size;
+	  h->plt.offset = splt->size;
 
 	  /* If this symbol is not defined in a regular file, and we are
 	     not generating a shared library, then set the symbol to this
@@ -2686,12 +2900,12 @@ allocate_dynrelocs (struct elf_link_hash
 	  if (! bfd_link_pic (info)
 	      && !h->def_regular)
 	    {
-	      h->root.u.def.section = s;
+	      h->root.u.def.section = splt;
 	      h->root.u.def.value = h->plt.offset;
 	    }
 
 	  /* Make room for this entry.  */
-	  s->size += PLT_ENTRY_SIZE;
+	  splt->size += elf_or1k_plt_entry_size (plt_index);
 
 	  /* We also need to make an entry in the .got.plt section, which
 	     will be placed in the .got section by the linker script.  */
@@ -2714,8 +2928,8 @@ allocate_dynrelocs (struct elf_link_hash
 
   if (h->got.refcount > 0)
     {
-      asection *s;
-      bfd_boolean dyn;
+      asection *sgot;
+      bool dyn;
       unsigned char tls_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -2724,34 +2938,25 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
-      s = htab->root.sgot;
+      sgot = htab->root.sgot;
 
-      h->got.offset = s->size;
+      h->got.offset = sgot->size;
 
       tls_type = ((struct elf_or1k_link_hash_entry *) h)->tls_type;
 
-      /* TLS GD requires two GOT and two relocs.  */
-      if (tls_type == TLS_GD)
-	s->size += 8;
-      else
-	s->size += 4;
       dyn = htab->root.dynamic_sections_created;
-      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h))
-	{
-	  if (tls_type == TLS_GD)
-	    htab->root.srelgot->size += 2 * sizeof (Elf32_External_Rela);
-	  else
-	    htab->root.srelgot->size += sizeof (Elf32_External_Rela);
-	}
+      dyn = WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h);
+      or1k_set_got_and_rela_sizes (tls_type, dyn,
+				   &sgot->size, &htab->root.srelgot->size);
     }
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -2765,24 +2970,24 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL;)
+	  for (pp = &h->dyn_relocs; (sec_relocs = *pp) != NULL;)
 	    {
-	      p->count -= p->pc_count;
-	      p->pc_count = 0;
-	      if (p->count == 0)
-		*pp = p->next;
+	      sec_relocs->count -= sec_relocs->pc_count;
+	      sec_relocs->pc_count = 0;
+	      if (sec_relocs->count == 0)
+		*pp = sec_relocs->next;
 	      else
-		pp = &p->next;
+		pp = &sec_relocs->next;
 	    }
 	}
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -2790,7 +2995,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -2813,7 +3018,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -2822,63 +3027,38 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (sec_relocs = h->dyn_relocs;
+       sec_relocs != NULL;
+       sec_relocs = sec_relocs->next)
     {
-      asection *sreloc = elf_section_data (p->sec)->sreloc;
-      sreloc->size += p->count * sizeof (Elf32_External_Rela);
+      asection *sreloc = elf_section_data (sec_relocs->sec)->sreloc;
+      sreloc->size += sec_relocs->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 or1k_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info)
 {
   struct elf_or1k_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
   htab = or1k_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -2911,26 +3091,28 @@ or1k_elf_size_dynamic_sections (bfd *out
 
       for (s = ibfd->sections; s != NULL; s = s->next)
 	{
-	  struct elf_dyn_relocs *p;
+	  struct elf_dyn_relocs *sec_relocs;
 
-	  for (p = ((struct elf_dyn_relocs *)
-		    elf_section_data (s)->local_dynrel);
-	       p != NULL;
-	       p = p->next)
+	  for (sec_relocs = ((struct elf_dyn_relocs *)
+			     elf_section_data (s)->local_dynrel);
+	       sec_relocs != NULL;
+	       sec_relocs = sec_relocs->next)
 	    {
-	      if (! bfd_is_abs_section (p->sec)
-		  && bfd_is_abs_section (p->sec->output_section))
+	      if (! bfd_is_abs_section (sec_relocs->sec)
+		  && bfd_is_abs_section (sec_relocs->sec->output_section))
 		{
 		  /* Input section has been discarded, either because
 		     it is a copy of a linkonce section or due to
 		     linker script /DISCARD/, so we'll be discarding
 		     the relocs too.  */
 		}
-	      else if (p->count != 0)
+	      else if (sec_relocs->count != 0)
 		{
-		  srel = elf_section_data (p->sec)->sreloc;
-		  srel->size += p->count * sizeof (Elf32_External_Rela);
-		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
+		  srel = elf_section_data (sec_relocs->sec)->sreloc;
+		  srel->size += sec_relocs->count
+				* sizeof (Elf32_External_Rela);
+		  if ((sec_relocs->sec->output_section->flags & SEC_READONLY)
+		      != 0)
 		    info->flags |= DF_TEXTREL;
 		}
 	    }
@@ -2950,20 +3132,13 @@ or1k_elf_size_dynamic_sections (bfd *out
 	{
 	  if (*local_got > 0)
 	    {
-	      *local_got = s->size;
+	      unsigned char tls_type = (local_tls_type == NULL)
+					? TLS_UNKNOWN
+					: *local_tls_type;
 
-	      /* TLS GD requires two GOT and two relocs.  */
-	      if (local_tls_type != NULL && *local_tls_type == TLS_GD)
-		s->size += 8;
-	      else
-		s->size += 4;
-	      if (bfd_link_pic (info))
-		{
-		  if (local_tls_type != NULL && *local_tls_type == TLS_GD)
-		    srel->size += 2 * sizeof (Elf32_External_Rela);
-		  else
-		    srel->size += sizeof (Elf32_External_Rela);
-		}
+	      *local_got = s->size;
+	      or1k_set_got_and_rela_sizes (tls_type, bfd_link_pic (info),
+					   &s->size, &srel->size);
 	    }
 	  else
 
@@ -2980,7 +3155,7 @@ or1k_elf_size_dynamic_sections (bfd *out
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LINKER_CREATED) == 0)
@@ -2995,10 +3170,10 @@ or1k_elf_size_dynamic_sections (bfd *out
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0 && s != htab->root.srelplt)
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -3034,57 +3209,10 @@ or1k_elf_size_dynamic_sections (bfd *out
       s->contents = bfd_zalloc (dynobj, s->size);
 
       if (s->contents == NULL)
-	return FALSE;
-    }
-
-  if (htab->root.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in or1k_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-     if (bfd_link_executable (info))
-       {
-	 if (! add_dynamic_entry (DT_DEBUG, 0))
-	   return FALSE;
-       }
-
-     if (htab->root.splt->size != 0)
-       {
-	 if (! add_dynamic_entry (DT_PLTGOT, 0)
-	     || ! add_dynamic_entry (DT_PLTRELSZ, 0)
-	     || ! add_dynamic_entry (DT_PLTREL, DT_RELA)
-	     || ! add_dynamic_entry (DT_JMPREL, 0))
-	   return FALSE;
-	}
-
-     if (relocs)
-       {
-	 if (! add_dynamic_entry (DT_RELA, 0)
-	     || ! add_dynamic_entry (DT_RELASZ, 0)
-	     || ! add_dynamic_entry (DT_RELAENT,
-				     sizeof (Elf32_External_Rela)))
-	   return FALSE;
-
-	 /* If any dynamic relocs apply to a read-only section,
-	    then we need a DT_TEXTREL entry.  */
-	 if ((info->flags & DF_TEXTREL) == 0)
-	   elf_link_hash_traverse (&htab->root, maybe_set_textrel, info);
-
-	 if ((info->flags & DF_TEXTREL) != 0)
-	   {
-	     if (! add_dynamic_entry (DT_TEXTREL, 0))
-	       return FALSE;
-	   }
-       }
+	return false;
     }
 
-#undef add_dynamic_entry
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
@@ -3100,37 +3228,6 @@ or1k_elf_copy_indirect_symbol (struct bf
   edir = (struct elf_or1k_link_hash_entry *) dir;
   eind = (struct elf_or1k_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL;)
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect)
     {
       if (dir->got.refcount <= 0)
@@ -3145,7 +3242,7 @@ or1k_elf_copy_indirect_symbol (struct bf
 
 /* Set the right machine number.  */
 
-static bfd_boolean
+static bool
 or1k_elf_object_p (bfd *abfd)
 {
   unsigned long mach = bfd_mach_or1k;
@@ -3158,7 +3255,7 @@ or1k_elf_object_p (bfd *abfd)
 
 /* Store the machine number in the flags field.  */
 
-static bfd_boolean
+static bool
 or1k_elf_final_write_processing (bfd *abfd)
 {
   switch (bfd_get_mach (abfd))
@@ -3173,21 +3270,21 @@ or1k_elf_final_write_processing (bfd *ab
   return _bfd_elf_final_write_processing (abfd);
 }
 
-static bfd_boolean
+static bool
 or1k_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Make sure all input files are consistent with respect to
    EF_OR1K_NODELAY flag setting.  */
 
-static bfd_boolean
+static bool
 elf32_or1k_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -3199,18 +3296,18 @@ elf32_or1k_merge_private_bfd_data (bfd *
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   if (!elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
 
-      return TRUE;
+      return true;
     }
 
   if (in_flags == out_flags)
-    return TRUE;
+    return true;
 
   if ((in_flags & EF_OR1K_NODELAY) != (out_flags & EF_OR1K_NODELAY))
     {
@@ -3219,16 +3316,16 @@ elf32_or1k_merge_private_bfd_data (bfd *
 	 ibfd, "EF_OR1K_NODELAY");
 
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 
 }
 
 /* Implement elf_backend_grok_prstatus:
    Support for core dump NOTE sections.  */
-static bfd_boolean
+static bool
 or1k_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -3237,7 +3334,7 @@ or1k_grok_prstatus (bfd *abfd, Elf_Inter
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 212:	      /* Linux/OpenRISC */
       /* pr_cursig */
@@ -3259,13 +3356,13 @@ or1k_grok_prstatus (bfd *abfd, Elf_Inter
 }
 
 /* Implement elf_backend_grok_psinfo.  */
-static bfd_boolean
+static bool
 or1k_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 128:	      /* Linux/OpenRISC elf_prpsinfo */
       elf_tdata (abfd)->core->program
@@ -3274,7 +3371,7 @@ or1k_grok_psinfo (bfd *abfd, Elf_Interna
 	= _bfd_elfcore_strndup (abfd, note->descdata + 48, 80);
     }
 
-  return TRUE;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-pj.c ./bfd/elf32-pj.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-pj.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-pj.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* picoJava specific support for 32-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by Steve Chamberlan of Transmeta (sac@pobox.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -114,78 +114,78 @@ static reloc_howto_type pj_elf_howto_tab
   /* No relocation.  */
   HOWTO (R_PJ_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 pj_elf_reloc,		/* special_function */
 	 "R_PJ_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit absolute relocation.  Setting partial_inplace to TRUE and
      src_mask to a non-zero value is similar to the COFF toolchain.  */
   HOWTO (R_PJ_DATA_DIR32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 pj_elf_reloc,		/* special_function */
 	 "R_PJ_DIR32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit PC relative relocation.  */
   HOWTO (R_PJ_CODE_REL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 pj_elf_reloc,		/* special_function */
 	 "R_PJ_REL32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
 /* 16 bit PC relative relocation.  */
   HOWTO (R_PJ_CODE_REL16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overf6w */
 	 pj_elf_reloc,		/* special_function */
 	 "R_PJ_REL16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   EMPTY_HOWTO (4),
   EMPTY_HOWTO (5),
   HOWTO (R_PJ_CODE_DIR32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 pj_elf_reloc,		/* special_function */
 	 "R_PJ_CODE_DIR32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (7),
   EMPTY_HOWTO (8),
@@ -196,61 +196,61 @@ static reloc_howto_type pj_elf_howto_tab
 
   HOWTO (R_PJ_CODE_LO16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 pj_elf_reloc,		/* special_function */
 	 "R_PJ_LO16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
     HOWTO (R_PJ_CODE_HI16,	/* type */
 	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 pj_elf_reloc,		/* special_function */
 	 "R_PJ_HI16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_PJ_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_PJ_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_PJ_GNU_VTENTRY,     /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_PJ_GNU_VTENTRY",   /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 /* This structure is used to map BFD reloc codes to PJ ELF relocs.  */
@@ -311,7 +311,7 @@ pj_elf_reloc_name_lookup (bfd *abfd ATTR
 
 /* Given an ELF reloc, fill in the howto field of a relent.  */
 
-static bfd_boolean
+static bool
 pj_elf_info_to_howto (bfd *abfd,
 		      arelent *cache_ptr,
 		      Elf_Internal_Rela *dst)
@@ -326,17 +326,17 @@ pj_elf_info_to_howto (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = &pj_elf_howto_table[r];
-  return TRUE;
+  return true;
 }
 
 /* Take this moment to fill in the special picoJava bits in the
    e_flags field.  */
 
-static bfd_boolean
+static bool
 pj_elf_final_write_processing (bfd *abfd)
 {
   elf_elfheader (abfd)->e_flags |= EF_PICOJAVA_ARCH;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-ppc.c ./bfd/elf32-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-ppc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-ppc.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC-specific support for 32-bit ELF
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -19,11 +19,10 @@
    Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
    Boston, MA 02110-1301, USA.  */
 
-
-/* This file is based on a preliminary PowerPC ELF ABI.  The
-   information may not match the final PowerPC ELF ABI.  It includes
-   suggestions from the in-progress Embedded PowerPC ABI, and that
-   information may also not match.  */
+/* The assembler should generate a full set of section symbols even
+   when they appear unused.  The linux kernel build tool recordmcount
+   needs them.  */
+#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true
 
 #include "sysdep.h"
 #include <stdarg.h>
@@ -201,101 +200,101 @@ static const bfd_vma ppc_elf_vxworks_pic
 	    complain, special_func)				\
   HOWTO (type, rightshift, size, bitsize, pc_relative, 0,	\
 	 complain_overflow_ ## complain, special_func,		\
-	 #type, FALSE, 0, mask, pc_relative)
+	 #type, false, 0, mask, pc_relative)
 
 static reloc_howto_type *ppc_elf_howto_table[R_PPC_max];
 
 static reloc_howto_type ppc_elf_howto_raw[] = {
   /* This reloc does nothing.  */
-  HOW (R_PPC_NONE, 3, 0, 0, 0, FALSE, dont,
+  HOW (R_PPC_NONE, 0, 0, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* A standard 32 bit relocation.  */
-  HOW (R_PPC_ADDR32, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_ADDR32, 4, 32, 0xffffffff, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* An absolute 26 bit branch; the lower two bits must be zero.
      FIXME: we don't check that, we just clear them.  */
-  HOW (R_PPC_ADDR24, 2, 26, 0x3fffffc, 0, FALSE, signed,
+  HOW (R_PPC_ADDR24, 4, 26, 0x3fffffc, 0, false, signed,
        bfd_elf_generic_reloc),
 
   /* A standard 16 bit relocation.  */
-  HOW (R_PPC_ADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
+  HOW (R_PPC_ADDR16, 2, 16, 0xffff, 0, false, bitfield,
        bfd_elf_generic_reloc),
 
   /* A 16 bit relocation without overflow.  */
-  HOW (R_PPC_ADDR16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_ADDR16_LO, 2, 16, 0xffff, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* The high order 16 bits of an address.  */
-  HOW (R_PPC_ADDR16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_ADDR16_HI, 2, 16, 0xffff, 16, false, dont,
        bfd_elf_generic_reloc),
 
   /* The high order 16 bits of an address, plus 1 if the contents of
      the low 16 bits, treated as a signed number, is negative.  */
-  HOW (R_PPC_ADDR16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_ADDR16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_addr16_ha_reloc),
 
   /* An absolute 16 bit branch; the lower two bits must be zero.
      FIXME: we don't check that, we just clear them.  */
-  HOW (R_PPC_ADDR14, 2, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC_ADDR14, 4, 16, 0xfffc, 0, false, signed,
        bfd_elf_generic_reloc),
 
   /* An absolute 16 bit branch, for which bit 10 should be set to
      indicate that the branch is expected to be taken.	The lower two
      bits must be zero.  */
-  HOW (R_PPC_ADDR14_BRTAKEN, 2, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC_ADDR14_BRTAKEN, 4, 16, 0xfffc, 0, false, signed,
        bfd_elf_generic_reloc),
 
   /* An absolute 16 bit branch, for which bit 10 should be set to
      indicate that the branch is not expected to be taken.  The lower
      two bits must be zero.  */
-  HOW (R_PPC_ADDR14_BRNTAKEN, 2, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC_ADDR14_BRNTAKEN, 4, 16, 0xfffc, 0, false, signed,
        bfd_elf_generic_reloc),
 
   /* A relative 26 bit branch; the lower two bits must be zero.  */
-  HOW (R_PPC_REL24, 2, 26, 0x3fffffc, 0, TRUE, signed,
+  HOW (R_PPC_REL24, 4, 26, 0x3fffffc, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* A relative 16 bit branch; the lower two bits must be zero.  */
-  HOW (R_PPC_REL14, 2, 16, 0xfffc, 0, TRUE, signed,
+  HOW (R_PPC_REL14, 4, 16, 0xfffc, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
      the branch is expected to be taken.  The lower two bits must be
      zero.  */
-  HOW (R_PPC_REL14_BRTAKEN, 2, 16, 0xfffc, 0, TRUE, signed,
+  HOW (R_PPC_REL14_BRTAKEN, 4, 16, 0xfffc, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
      the branch is not expected to be taken.  The lower two bits must
      be zero.  */
-  HOW (R_PPC_REL14_BRNTAKEN, 2, 16, 0xfffc, 0, TRUE, signed,
+  HOW (R_PPC_REL14_BRNTAKEN, 4, 16, 0xfffc, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* Like R_PPC_ADDR16, but referring to the GOT table entry for the
      symbol.  */
-  HOW (R_PPC_GOT16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_GOT16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Like R_PPC_ADDR16_LO, but referring to the GOT table entry for
      the symbol.  */
-  HOW (R_PPC_GOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_GOT16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like R_PPC_ADDR16_HI, but referring to the GOT table entry for
      the symbol.  */
-  HOW (R_PPC_GOT16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT16_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like R_PPC_ADDR16_HA, but referring to the GOT table entry for
      the symbol.  */
-  HOW (R_PPC_GOT16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like R_PPC_REL24, but referring to the procedure linkage table
      entry for the symbol.  */
-  HOW (R_PPC_PLTREL24, 2, 26, 0x3fffffc, 0, TRUE, signed,
+  HOW (R_PPC_PLTREL24, 4, 26, 0x3fffffc, 0, true, signed,
        ppc_elf_unhandled_reloc),
 
   /* This is used only by the dynamic linker.  The symbol should exist
@@ -303,269 +302,269 @@ static reloc_howto_type ppc_elf_howto_ra
      dynamic linker copies the data addressed by the symbol from the
      shared library into the object, because the object being
      run has to have the data at some particular address.  */
-  HOW (R_PPC_COPY, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_COPY, 4, 32, 0, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like R_PPC_ADDR32, but used when setting global offset table
      entries.  */
-  HOW (R_PPC_GLOB_DAT, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_GLOB_DAT, 4, 32, 0xffffffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Marks a procedure linkage table entry for a symbol.  */
-  HOW (R_PPC_JMP_SLOT, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_JMP_SLOT, 4, 32, 0, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Used only by the dynamic linker.  When the object is run, this
      longword is set to the load address of the object, plus the
      addend.  */
-  HOW (R_PPC_RELATIVE, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_RELATIVE, 4, 32, 0xffffffff, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Like R_PPC_REL24, but uses the value of the symbol within the
      object rather than the final value.  Normally used for
      _GLOBAL_OFFSET_TABLE_.  */
-  HOW (R_PPC_LOCAL24PC, 2, 26, 0x3fffffc, 0, TRUE, signed,
+  HOW (R_PPC_LOCAL24PC, 4, 26, 0x3fffffc, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* Like R_PPC_ADDR32, but may be unaligned.  */
-  HOW (R_PPC_UADDR32, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_UADDR32, 4, 32, 0xffffffff, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Like R_PPC_ADDR16, but may be unaligned.  */
-  HOW (R_PPC_UADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
+  HOW (R_PPC_UADDR16, 2, 16, 0xffff, 0, false, bitfield,
        bfd_elf_generic_reloc),
 
   /* 32-bit PC relative */
-  HOW (R_PPC_REL32, 2, 32, 0xffffffff, 0, TRUE, dont,
+  HOW (R_PPC_REL32, 4, 32, 0xffffffff, 0, true, dont,
        bfd_elf_generic_reloc),
 
   /* 32-bit relocation to the symbol's procedure linkage table.
      FIXME: not supported.  */
-  HOW (R_PPC_PLT32, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_PLT32, 4, 32, 0, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* 32-bit PC relative relocation to the symbol's procedure linkage table.
      FIXME: not supported.  */
-  HOW (R_PPC_PLTREL32, 2, 32, 0, 0, TRUE, dont,
+  HOW (R_PPC_PLTREL32, 4, 32, 0, 0, true, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like R_PPC_ADDR16_LO, but referring to the PLT table entry for
      the symbol.  */
-  HOW (R_PPC_PLT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_PLT16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like R_PPC_ADDR16_HI, but referring to the PLT table entry for
      the symbol.  */
-  HOW (R_PPC_PLT16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_PLT16_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like R_PPC_ADDR16_HA, but referring to the PLT table entry for
      the symbol.  */
-  HOW (R_PPC_PLT16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_PLT16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* A sign-extended 16 bit value relative to _SDA_BASE_, for use with
      small data items.  */
-  HOW (R_PPC_SDAREL16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_SDAREL16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* 16-bit section relative relocation.  */
-  HOW (R_PPC_SECTOFF, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_SECTOFF, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* 16-bit lower half section relative relocation.  */
-  HOW (R_PPC_SECTOFF_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_SECTOFF_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* 16-bit upper half section relative relocation.  */
-  HOW (R_PPC_SECTOFF_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_SECTOFF_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* 16-bit upper half adjusted section relative relocation.  */
-  HOW (R_PPC_SECTOFF_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_SECTOFF_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Marker relocs for TLS.  */
-  HOW (R_PPC_TLS, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_TLS, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC_TLSGD, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_TLSGD, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC_TLSLD, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_TLSLD, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Marker relocs on inline plt call instructions.  */
-  HOW (R_PPC_PLTSEQ, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_PLTSEQ, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC_PLTCALL, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_PLTCALL, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Computes the load module index of the load module that contains the
      definition of its TLS sym.  */
-  HOW (R_PPC_DTPMOD32, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_DTPMOD32, 4, 32, 0xffffffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Computes a dtv-relative displacement, the difference between the value
      of sym+add and the base address of the thread-local storage block that
      contains the definition of sym, minus 0x8000.  */
-  HOW (R_PPC_DTPREL32, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_DTPREL32, 4, 32, 0xffffffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* A 16 bit dtprel reloc.  */
-  HOW (R_PPC_DTPREL16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_DTPREL16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Like DTPREL16, but no overflow.  */
-  HOW (R_PPC_DTPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_DTPREL16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like DTPREL16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_DTPREL16_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like DTPREL16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_DTPREL16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Computes a tp-relative displacement, the difference between the value of
      sym+add and the value of the thread pointer (r13).  */
-  HOW (R_PPC_TPREL32, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_TPREL32, 4, 32, 0xffffffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* A 16 bit tprel reloc.  */
-  HOW (R_PPC_TPREL16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_TPREL16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Like TPREL16, but no overflow.  */
-  HOW (R_PPC_TPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_TPREL16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like TPREL16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_TPREL16_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like TPREL16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_TPREL16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
      with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
      to the first entry.  */
-  HOW (R_PPC_GOT_TLSGD16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_GOT_TLSGD16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_TLSGD16, but no overflow.  */
-  HOW (R_PPC_GOT_TLSGD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_GOT_TLSGD16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC_GOT_TLSGD16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT_TLSGD16_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC_GOT_TLSGD16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT_TLSGD16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
      with values (sym+add)@dtpmod and zero, and computes the offset to the
      first entry.  */
-  HOW (R_PPC_GOT_TLSLD16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_GOT_TLSLD16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_TLSLD16, but no overflow.  */
-  HOW (R_PPC_GOT_TLSLD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_GOT_TLSLD16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC_GOT_TLSLD16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT_TLSLD16_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC_GOT_TLSLD16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT_TLSLD16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
      the offset to the entry.  */
-  HOW (R_PPC_GOT_DTPREL16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_GOT_DTPREL16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_DTPREL16, but no overflow.  */
-  HOW (R_PPC_GOT_DTPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_GOT_DTPREL16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_DTPREL16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC_GOT_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT_DTPREL16_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC_GOT_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT_DTPREL16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
      offset to the entry.  */
-  HOW (R_PPC_GOT_TPREL16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_GOT_TPREL16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_TPREL16, but no overflow.  */
-  HOW (R_PPC_GOT_TPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_GOT_TPREL16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_TPREL16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC_GOT_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT_TPREL16_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC_GOT_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_GOT_TPREL16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* The remaining relocs are from the Embedded ELF ABI, and are not
      in the SVR4 ELF ABI.  */
 
   /* 32 bit value resulting from the addend minus the symbol.  */
-  HOW (R_PPC_EMB_NADDR32, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_EMB_NADDR32, 4, 32, 0xffffffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* 16 bit value resulting from the addend minus the symbol.  */
-  HOW (R_PPC_EMB_NADDR16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_EMB_NADDR16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* 16 bit value resulting from the addend minus the symbol.  */
-  HOW (R_PPC_EMB_NADDR16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_EMB_NADDR16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* The high order 16 bits of the addend minus the symbol.  */
-  HOW (R_PPC_EMB_NADDR16_HI, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_EMB_NADDR16_HI, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* The high order 16 bits of the result of the addend minus the address,
      plus 1 if the contents of the low 16 bits, treated as a signed number,
      is negative.  */
-  HOW (R_PPC_EMB_NADDR16_HA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC_EMB_NADDR16_HA, 2, 16, 0xffff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* 16 bit value resulting from allocating a 4 byte word to hold an
      address in the .sdata section, and returning the offset from
      _SDA_BASE_ for that relocation.  */
-  HOW (R_PPC_EMB_SDAI16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_EMB_SDAI16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* 16 bit value resulting from allocating a 4 byte word to hold an
      address in the .sdata2 section, and returning the offset from
      _SDA2_BASE_ for that relocation.  */
-  HOW (R_PPC_EMB_SDA2I16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_EMB_SDA2I16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* A sign-extended 16 bit value relative to _SDA2_BASE_, for use with
      small data items.	 */
-  HOW (R_PPC_EMB_SDA2REL, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_EMB_SDA2REL, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Relocate against either _SDA_BASE_ or _SDA2_BASE_, filling in the 16 bit
      signed offset from the appropriate base, and filling in the register
      field with the appropriate register (0, 2, or 13).  */
-  HOW (R_PPC_EMB_SDA21, 2, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_EMB_SDA21, 4, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Relocation not handled: R_PPC_EMB_MRKREF */
@@ -578,121 +577,121 @@ static reloc_howto_type ppc_elf_howto_ra
   /* PC relative relocation against either _SDA_BASE_ or _SDA2_BASE_, filling
      in the 16 bit signed offset from the appropriate base, and filling in the
      register field with the appropriate register (0, 2, or 13).  */
-  HOW (R_PPC_EMB_RELSDA, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_EMB_RELSDA, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* A relative 8 bit branch.  */
-  HOW (R_PPC_VLE_REL8, 1, 8, 0xff, 1, TRUE, signed,
+  HOW (R_PPC_VLE_REL8, 2, 8, 0xff, 1, true, signed,
        bfd_elf_generic_reloc),
 
   /* A relative 15 bit branch.  */
-  HOW (R_PPC_VLE_REL15, 2, 16, 0xfffe, 0, TRUE, signed,
+  HOW (R_PPC_VLE_REL15, 4, 16, 0xfffe, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* A relative 24 bit branch.  */
-  HOW (R_PPC_VLE_REL24, 2, 25, 0x1fffffe, 0, TRUE, signed,
+  HOW (R_PPC_VLE_REL24, 4, 25, 0x1fffffe, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* The 16 LSBS in split16a format.  */
-  HOW (R_PPC_VLE_LO16A, 2, 16, 0x1f07ff, 0, FALSE, dont,
+  HOW (R_PPC_VLE_LO16A, 4, 16, 0x1f07ff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* The 16 LSBS in split16d format.  */
-  HOW (R_PPC_VLE_LO16D, 2, 16, 0x3e007ff, 0, FALSE, dont,
+  HOW (R_PPC_VLE_LO16D, 4, 16, 0x3e007ff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Bits 16-31 split16a format.  */
-  HOW (R_PPC_VLE_HI16A, 2, 16, 0x1f07ff, 16, FALSE, dont,
+  HOW (R_PPC_VLE_HI16A, 4, 16, 0x1f07ff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Bits 16-31 split16d format.  */
-  HOW (R_PPC_VLE_HI16D, 2, 16, 0x3e007ff, 16, FALSE, dont,
+  HOW (R_PPC_VLE_HI16D, 4, 16, 0x3e007ff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Bits 16-31 (High Adjusted) in split16a format.  */
-  HOW (R_PPC_VLE_HA16A, 2, 16, 0x1f07ff, 16, FALSE, dont,
+  HOW (R_PPC_VLE_HA16A, 4, 16, 0x1f07ff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Bits 16-31 (High Adjusted) in split16d format.  */
-  HOW (R_PPC_VLE_HA16D, 2, 16, 0x3e007ff, 16, FALSE, dont,
+  HOW (R_PPC_VLE_HA16D, 4, 16, 0x3e007ff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* This reloc is like R_PPC_EMB_SDA21 but only applies to e_add16i
      instructions.  If the register base is 0 then the linker changes
      the e_add16i to an e_li instruction.  */
-  HOW (R_PPC_VLE_SDA21, 2, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_VLE_SDA21, 4, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Like R_PPC_VLE_SDA21 but ignore overflow.  */
-  HOW (R_PPC_VLE_SDA21_LO, 2, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC_VLE_SDA21_LO, 4, 16, 0xffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* The 16 LSBS relative to _SDA_BASE_ in split16a format.  */
-  HOW (R_PPC_VLE_SDAREL_LO16A, 2, 16, 0x1f07ff, 0, FALSE, dont,
+  HOW (R_PPC_VLE_SDAREL_LO16A, 4, 16, 0x1f07ff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* The 16 LSBS relative to _SDA_BASE_ in split16d format.  */
-  HOW (R_PPC_VLE_SDAREL_LO16D, 2, 16, 0x3e007ff, 0, FALSE, dont,
+  HOW (R_PPC_VLE_SDAREL_LO16D, 4, 16, 0x3e007ff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Bits 16-31 relative to _SDA_BASE_ in split16a format.  */
-  HOW (R_PPC_VLE_SDAREL_HI16A, 2, 16, 0x1f07ff, 16, FALSE, dont,
+  HOW (R_PPC_VLE_SDAREL_HI16A, 4, 16, 0x1f07ff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Bits 16-31 relative to _SDA_BASE_ in split16d format.  */
-  HOW (R_PPC_VLE_SDAREL_HI16D, 2, 16, 0x3e007ff, 16, FALSE, dont,
+  HOW (R_PPC_VLE_SDAREL_HI16D, 4, 16, 0x3e007ff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Bits 16-31 (HA) relative to _SDA_BASE split16a format.  */
-  HOW (R_PPC_VLE_SDAREL_HA16A, 2, 16, 0x1f07ff, 16, FALSE, dont,
+  HOW (R_PPC_VLE_SDAREL_HA16A, 4, 16, 0x1f07ff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* Bits 16-31 (HA) relative to _SDA_BASE split16d format.  */
-  HOW (R_PPC_VLE_SDAREL_HA16D, 2, 16, 0x3e007ff, 16, FALSE, dont,
+  HOW (R_PPC_VLE_SDAREL_HA16D, 4, 16, 0x3e007ff, 16, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* e_li split20 format.  */
-  HOW (R_PPC_VLE_ADDR20, 2, 20, 0x1f7fff, 0, FALSE, dont,
+  HOW (R_PPC_VLE_ADDR20, 4, 20, 0x1f7fff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
-  HOW (R_PPC_IRELATIVE, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_IRELATIVE, 4, 32, 0xffffffff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
   /* A 16 bit relative relocation.  */
-  HOW (R_PPC_REL16, 1, 16, 0xffff, 0, TRUE, signed,
+  HOW (R_PPC_REL16, 2, 16, 0xffff, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* A 16 bit relative relocation without overflow.  */
-  HOW (R_PPC_REL16_LO, 1, 16, 0xffff, 0, TRUE, dont,
+  HOW (R_PPC_REL16_LO, 2, 16, 0xffff, 0, true, dont,
        bfd_elf_generic_reloc),
 
   /* The high order 16 bits of a relative address.  */
-  HOW (R_PPC_REL16_HI, 1, 16, 0xffff, 16, TRUE, dont,
+  HOW (R_PPC_REL16_HI, 2, 16, 0xffff, 16, true, dont,
        bfd_elf_generic_reloc),
 
   /* The high order 16 bits of a relative address, plus 1 if the contents of
      the low 16 bits, treated as a signed number, is negative.  */
-  HOW (R_PPC_REL16_HA, 1, 16, 0xffff, 16, TRUE, dont,
+  HOW (R_PPC_REL16_HA, 2, 16, 0xffff, 16, true, dont,
        ppc_elf_addr16_ha_reloc),
 
   /* Like R_PPC_REL16_HA but for split field in addpcis.  */
-  HOW (R_PPC_REL16DX_HA, 2, 16, 0x1fffc1, 16, TRUE, signed,
+  HOW (R_PPC_REL16DX_HA, 4, 16, 0x1fffc1, 16, true, signed,
        ppc_elf_addr16_ha_reloc),
 
   /* A split-field reloc for addpcis, non-relative (gas internal use only).  */
-  HOW (R_PPC_16DX_HA, 2, 16, 0x1fffc1, 16, FALSE, signed,
+  HOW (R_PPC_16DX_HA, 4, 16, 0x1fffc1, 16, false, signed,
        ppc_elf_addr16_ha_reloc),
 
   /* GNU extension to record C++ vtable hierarchy.  */
-  HOW (R_PPC_GNU_VTINHERIT, 0, 0, 0, 0, FALSE, dont,
+  HOW (R_PPC_GNU_VTINHERIT, 0, 0, 0, 0, false, dont,
        NULL),
 
   /* GNU extension to record C++ vtable member usage.  */
-  HOW (R_PPC_GNU_VTENTRY, 0, 0, 0, 0, FALSE, dont,
+  HOW (R_PPC_GNU_VTENTRY, 0, 0, 0, 0, false, dont,
        NULL),
 
   /* Phony reloc to handle AIX style TOC entries.  */
-  HOW (R_PPC_TOC16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC_TOC16, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 };
 
@@ -883,7 +882,7 @@ ppc_elf_reloc_name_lookup (bfd *abfd ATT
 
 /* Set the howto pointer for a PowerPC ELF reloc.  */
 
-static bfd_boolean
+static bool
 ppc_elf_info_to_howto (bfd *abfd,
 		       arelent *cache_ptr,
 		       Elf_Internal_Rela *dst)
@@ -901,7 +900,7 @@ ppc_elf_info_to_howto (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = ppc_elf_howto_table[r_type];
@@ -915,10 +914,10 @@ ppc_elf_info_to_howto (bfd *abfd,
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
 
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Handle the R_PPC_ADDR16_HA and R_PPC_REL16_HA relocs.  */
@@ -960,6 +959,10 @@ ppc_elf_addr16_ha_reloc (bfd *abfd,
   value >>= 16;
 
   octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, octets))
+    return bfd_reloc_outofrange;
+
   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
   insn &= ~0x1fffc1;
   insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
@@ -984,12 +987,8 @@ ppc_elf_unhandled_reloc (bfd *abfd,
 				  input_section, output_bfd, error_message);
 
   if (error_message != NULL)
-    {
-      static char buf[60];
-      sprintf (buf, _("generic linker can't handle %s"),
-	       reloc_entry->howto->name);
-      *error_message = buf;
-    }
+    *error_message = bfd_asprintf (_("generic linker can't handle %s"),
+				     reloc_entry->howto->name);
   return bfd_reloc_dangerous;
 }
 
@@ -1050,7 +1049,7 @@ struct ppc_elf_obj_tdata
 
 /* Override the generic function because we store some extras.  */
 
-static bfd_boolean
+static bool
 ppc_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct ppc_elf_obj_tdata),
@@ -1059,7 +1058,7 @@ ppc_elf_mkobject (bfd *abfd)
 
 /* When defaulting arch/mach, decode apuinfo to find a better match.  */
 
-bfd_boolean
+bool
 _bfd_elf_ppc_set_arch (bfd *abfd)
 {
   unsigned long mach = 0;
@@ -1082,6 +1081,7 @@ _bfd_elf_ppc_set_arch (bfd *abfd)
       s = bfd_get_section_by_name (abfd, APUINFO_SECTION_NAME);
       if (s != NULL
 	  && s->size >= 24
+	  && (s->flags & SEC_HAS_CONTENTS) != 0
 	  && bfd_malloc_and_get_section (abfd, s, &contents))
 	{
 	  unsigned int apuinfo_size = bfd_get_32 (abfd, contents + 4);
@@ -1134,17 +1134,17 @@ _bfd_elf_ppc_set_arch (bfd *abfd)
 	    break;
 	  }
     }
-  return TRUE;
+  return true;
 }
 
 /* Fix bad default arch selected for a 32 bit input bfd when the
    default is 64 bit.  Also select arch based on apuinfo.  */
 
-static bfd_boolean
+static bool
 ppc_elf_object_p (bfd *abfd)
 {
   if (!abfd->arch_info->the_default)
-    return TRUE;
+    return true;
 
   if (abfd->arch_info->bits_per_word == 64)
     {
@@ -1162,20 +1162,20 @@ ppc_elf_object_p (bfd *abfd)
 
 /* Function to set whether a module needs the -mrelocatable bit set.  */
 
-static bfd_boolean
+static bool
 ppc_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 ppc_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -1184,7 +1184,7 @@ ppc_elf_grok_prstatus (bfd *abfd, Elf_In
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 268:		/* Linux/PPC.  */
       /* pr_cursig */
@@ -1205,13 +1205,13 @@ ppc_elf_grok_prstatus (bfd *abfd, Elf_In
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 ppc_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 128:		/* Linux/PPC elf_prpsinfo.  */
       elf_tdata (abfd)->core->pid
@@ -1234,7 +1234,7 @@ ppc_elf_grok_psinfo (bfd *abfd, Elf_Inte
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 static char *
@@ -1319,7 +1319,7 @@ ppc_elf_plt_sym_val (bfd_vma i ATTRIBUTE
    is called when bfd_section_from_shdr finds a section with an unknown
    type.  */
 
-static bfd_boolean
+static bool
 ppc_elf_section_from_shdr (bfd *abfd,
 			   Elf_Internal_Shdr *hdr,
 			   const char *name,
@@ -1329,23 +1329,29 @@ ppc_elf_section_from_shdr (bfd *abfd,
   flagword flags;
 
   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
 
   newsect = hdr->bfd_section;
-  flags = bfd_section_flags (newsect);
+  flags = 0;
   if (hdr->sh_flags & SHF_EXCLUDE)
     flags |= SEC_EXCLUDE;
 
   if (hdr->sh_type == SHT_ORDERED)
     flags |= SEC_SORT_ENTRIES;
 
-  bfd_set_section_flags (newsect, flags);
-  return TRUE;
+  if (startswith (name, ".PPC.EMB"))
+    name += 8;
+  if (startswith (name, ".sbss")
+      || startswith (name, ".sdata"))
+    flags |= SEC_SMALL_DATA;
+
+  return (flags == 0
+	  || bfd_set_section_flags (newsect, newsect->flags | flags));
 }
 
 /* Set up any other section flags and such that may be necessary.  */
 
-static bfd_boolean
+static bool
 ppc_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 		       Elf_Internal_Shdr *shdr,
 		       asection *asect)
@@ -1353,7 +1359,7 @@ ppc_elf_fake_sections (bfd *abfd ATTRIBU
   if ((asect->flags & SEC_SORT_ENTRIES) != 0)
     shdr->sh_type = SHT_ORDERED;
 
-  return TRUE;
+  return true;
 }
 
 /* If we have .sbss2 or .PPC.EMB.sbss0 output sections, we
@@ -1379,7 +1385,7 @@ ppc_elf_additional_program_headers (bfd
 
 /* Modify the segment map for VLE executables.  */
 
-bfd_boolean
+bool
 ppc_elf_modify_segment_map (bfd *abfd,
 			    struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
@@ -1394,7 +1400,7 @@ ppc_elf_modify_segment_map (bfd *abfd,
   for (m = elf_seg_map (abfd); m != NULL; m = m->next)
     {
       struct elf_segment_map *n;
-      bfd_size_type amt;
+      size_t amt;
       unsigned int j, k;
       unsigned int p_flags;
 
@@ -1450,7 +1456,7 @@ ppc_elf_modify_segment_map (bfd *abfd,
       amt += (m->count - j - 1) * sizeof (asection *);
       n = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
       if (n == NULL)
-	return FALSE;
+	return false;
 
       n->p_type = PT_LOAD;
       n->count = m->count - j;
@@ -1462,7 +1468,7 @@ ppc_elf_modify_segment_map (bfd *abfd,
       m->next = n;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Add extra PPC sections -- Note, for now, make .sbss2 and
@@ -1485,7 +1491,7 @@ static const struct bfd_elf_special_sect
 };
 
 /* This is what we want for new plt/got.  */
-static struct bfd_elf_special_section ppc_alt_plt =
+static const struct bfd_elf_special_section ppc_alt_plt =
   { STRING_COMMA_LEN (".plt"),		   0, SHT_PROGBITS, SHF_ALLOC };
 
 static const struct bfd_elf_special_section *
@@ -1518,13 +1524,13 @@ typedef struct apuinfo_list
 apuinfo_list;
 
 static apuinfo_list *head;
-static bfd_boolean apuinfo_set;
+static bool apuinfo_set;
 
 static void
 apuinfo_list_init (void)
 {
   head = NULL;
-  apuinfo_set = FALSE;
+  apuinfo_set = false;
 }
 
 static void
@@ -1624,11 +1630,10 @@ ppc_elf_begin_write_processing (bfd *abf
       if (length < 20)
 	goto fail;
 
-      apuinfo_set = TRUE;
+      apuinfo_set = true;
       if (largest_input_size < asec->size)
 	{
-	  if (buffer)
-	    free (buffer);
+	  free (buffer);
 	  largest_input_size = asec->size;
 	  buffer = bfd_malloc (largest_input_size);
 	  if (!buffer)
@@ -1636,7 +1641,7 @@ ppc_elf_begin_write_processing (bfd *abf
 	}
 
       if (bfd_seek (ibfd, asec->filepos, SEEK_SET) != 0
-	  || (bfd_bread (buffer, length, ibfd) != length))
+	  || (bfd_read (buffer, length, ibfd) != length))
 	{
 	  /* xgettext:c-format */
 	  error_message = _("unable to read in %s section from %pB");
@@ -1686,8 +1691,7 @@ ppc_elf_begin_write_processing (bfd *abf
     }
 
  fail:
-  if (buffer)
-    free (buffer);
+  free (buffer);
 
   if (error_message)
     _bfd_error_handler (error_message, APUINFO_SECTION_NAME, ibfd);
@@ -1696,7 +1700,7 @@ ppc_elf_begin_write_processing (bfd *abf
 /* Prevent the output section from accumulating the input sections'
    contents.  We have already stored this in our linked list structure.  */
 
-static bfd_boolean
+static bool
 ppc_elf_write_section (bfd *abfd ATTRIBUTE_UNUSED,
 		       struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
 		       asection *asec,
@@ -1760,20 +1764,20 @@ ppc_final_write_processing (bfd *abfd)
   apuinfo_list_finish ();
 }
 
-static bfd_boolean
+static bool
 ppc_elf_final_write_processing (bfd *abfd)
 {
   ppc_final_write_processing (abfd);
   return _bfd_elf_final_write_processing (abfd);
 }
 
-static bfd_boolean
+static bool
 is_nonpic_glink_stub (bfd *abfd, asection *glink, bfd_vma off)
 {
   bfd_byte buf[4 * 4];
 
   if (!bfd_get_section_contents (abfd, glink, buf, off, sizeof buf))
-    return FALSE;
+    return false;
 
   return ((bfd_get_32 (abfd, buf + 0) & 0xffff0000) == LIS_11
 	  && (bfd_get_32 (abfd, buf + 4) & 0xffff0000) == LWZ_11_11
@@ -1781,7 +1785,7 @@ is_nonpic_glink_stub (bfd *abfd, asectio
 	  && bfd_get_32 (abfd, buf + 12) == BCTR);
 }
 
-static bfd_boolean
+static bool
 section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
 {
   bfd_vma vma = *(bfd_vma *) ptr;
@@ -1795,14 +1799,14 @@ ppc_elf_get_synthetic_symtab (bfd *abfd,
 			      long dynsymcount, asymbol **dynsyms,
 			      asymbol **ret)
 {
-  bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
+  bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
   asection *plt, *relplt, *dynamic, *glink;
   bfd_vma glink_vma = 0;
   bfd_vma resolv_vma = 0;
   bfd_vma stub_off;
   asymbol *s;
   arelent *p;
-  long count, i, stub_delta;
+  size_t count, i, stub_delta;
   size_t size;
   char *names;
   bfd_byte buf[4];
@@ -1831,7 +1835,8 @@ ppc_elf_get_synthetic_symtab (bfd *abfd,
   /* If this object was prelinked, the prelinker stored the address
      of .glink at got[1].  If it wasn't prelinked, got[1] will be zero.  */
   dynamic = bfd_get_section_by_name (abfd, ".dynamic");
-  if (dynamic != NULL)
+  if (dynamic != NULL
+      && (dynamic->flags & SEC_HAS_CONTENTS) != 0)
     {
       bfd_byte *dynbuf, *extdyn, *extdynend;
       size_t extdynsize;
@@ -1843,9 +1848,9 @@ ppc_elf_get_synthetic_symtab (bfd *abfd,
       extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
       swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
 
-      extdyn = dynbuf;
-      extdynend = extdyn + dynamic->size;
-      for (; extdyn < extdynend; extdyn += extdynsize)
+      for (extdyn = dynbuf, extdynend = dynbuf + dynamic->size;
+	   (size_t) (extdynend - extdyn) >= extdynsize;
+	   extdyn += extdynsize)
 	{
 	  Elf_Internal_Dyn dyn;
 	  (*swap_dyn_in) (abfd, extdyn, &dyn);
@@ -1909,7 +1914,7 @@ ppc_elf_get_synthetic_symtab (bfd *abfd,
 	    }
     }
 
-  count = relplt->size / sizeof (Elf32_External_Rela);
+  count = NUM_SHDR_ENTRIES (&elf_section_data (relplt)->this_hdr);
   /* If the stubs are those for -shared/-pie then we might have
      multiple stubs for each plt entry.  If that is the case then
      there is no way to associate stubs with their plt entries short
@@ -1924,7 +1929,7 @@ ppc_elf_get_synthetic_symtab (bfd *abfd,
     return 0;
 
   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
-  if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
+  if (! (*slurp_relocs) (abfd, relplt, dynsyms, true))
     return -1;
 
   size = count * sizeof (asymbol);
@@ -2112,9 +2117,6 @@ struct ppc_elf_link_hash_entry
      from the beginning of the section.  */
   elf_linker_section_pointers_t *linker_section_pointer;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   /* Contexts in which symbol is used in the GOT.
      Bits are or'd into the mask as the corresponding relocs are
      encountered during check_relocs, with TLS_TLS being set when any
@@ -2194,9 +2196,6 @@ struct ppc_elf_link_hash_table
   /* The type of PLT we have chosen to use.  */
   enum ppc_elf_plt_type plt_type;
 
-  /* True if the target system is VxWorks.  */
-  unsigned int is_vxworks:1;
-
   /* Whether there exist local gnu indirect function resolvers,
      referenced by dynamic relocations.  */
   unsigned int local_ifunc_resolver:1;
@@ -2214,9 +2213,6 @@ struct ppc_elf_link_hash_table
   int plt_slot_size;
   /* The size of the first PLT entry.  */
   int plt_initial_entry_size;
-
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
 };
 
 /* Rename some of the generic section flags to better document how they
@@ -2235,8 +2231,9 @@ struct ppc_elf_link_hash_table
 /* Get the PPC ELF linker hash table from a link_info structure.  */
 
 #define ppc_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == PPC32_ELF_DATA ? ((struct ppc_elf_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == PPC32_ELF_DATA)	\
+   ? (struct ppc_elf_link_hash_table *) (p)->hash : NULL)
 
 /* Create an entry in a PPC ELF linker hash table.  */
 
@@ -2260,7 +2257,6 @@ ppc_elf_link_hash_newfunc (struct bfd_ha
   if (entry != NULL)
     {
       ppc_elf_hash_entry (entry)->linker_section_pointer = NULL;
-      ppc_elf_hash_entry (entry)->dyn_relocs = NULL;
       ppc_elf_hash_entry (entry)->tls_mask = 0;
       ppc_elf_hash_entry (entry)->has_sda_refs = 0;
     }
@@ -2326,33 +2322,33 @@ ppc_elf_link_params (struct bfd_link_inf
 
 /* Create .got and the related sections.  */
 
-static bfd_boolean
+static bool
 ppc_elf_create_got (bfd *abfd, struct bfd_link_info *info)
 {
   struct ppc_elf_link_hash_table *htab;
 
   if (!_bfd_elf_create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   htab = ppc_elf_hash_table (info);
-  if (!htab->is_vxworks)
+  if (htab->elf.target_os != is_vxworks)
     {
       /* The powerpc .got has a blrl instruction in it.  Mark it
 	 executable.  */
       flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS
 			| SEC_IN_MEMORY | SEC_LINKER_CREATED);
       if (!bfd_set_section_flags (htab->elf.sgot, flags))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create a special linker section, used for R_PPC_EMB_SDAI16 and
    R_PPC_EMB_SDA2I16 pointers.  These sections become part of .sdata
    and .sdata2.  Create _SDA_BASE_ and _SDA2_BASE too.  */
 
-static bfd_boolean
+static bool
 ppc_elf_create_linker_section (bfd *abfd,
 			       struct bfd_link_info *info,
 			       flagword flags,
@@ -2365,7 +2361,7 @@ ppc_elf_create_linker_section (bfd *abfd
 
   s = bfd_make_section_anyway_with_flags (abfd, lsect->name, flags);
   if (s == NULL)
-    return FALSE;
+    return false;
   lsect->section = s;
 
   /* Define the sym on the first section of this name.  */
@@ -2373,12 +2369,12 @@ ppc_elf_create_linker_section (bfd *abfd
 
   lsect->sym = _bfd_elf_define_linkage_sym (abfd, info, s, lsect->sym_name);
   if (lsect->sym == NULL)
-    return FALSE;
+    return false;
   lsect->sym->root.u.def.value = 0x8000;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 ppc_elf_create_glink (bfd *abfd, struct bfd_link_info *info)
 {
   struct ppc_elf_link_hash_table *htab = ppc_elf_hash_table (info);
@@ -2395,7 +2391,7 @@ ppc_elf_create_glink (bfd *abfd, struct
     p2align = htab->params->plt_stub_align;
   if (s == NULL
       || !bfd_set_section_alignment (s, p2align))
-    return FALSE;
+    return false;
 
   if (!info->no_ld_generated_unwind_info)
     {
@@ -2405,7 +2401,7 @@ ppc_elf_create_glink (bfd *abfd, struct
       htab->glink_eh_frame = s;
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
-	return FALSE;
+	return false;
     }
 
   flags = SEC_ALLOC | SEC_LINKER_CREATED;
@@ -2413,7 +2409,7 @@ ppc_elf_create_glink (bfd *abfd, struct
   htab->elf.iplt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, 4))
-    return FALSE;
+    return false;
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
 	   | SEC_IN_MEMORY | SEC_LINKER_CREATED);
@@ -2421,7 +2417,7 @@ ppc_elf_create_glink (bfd *abfd, struct
   htab->elf.irelplt = s;
   if (s == NULL
       || ! bfd_set_section_alignment (s, 2))
-    return FALSE;
+    return false;
 
   /* Local plt entries.  */
   flags = (SEC_ALLOC | SEC_LOAD
@@ -2430,7 +2426,7 @@ ppc_elf_create_glink (bfd *abfd, struct
 						       flags);
   if (htab->pltlocal == NULL
       || !bfd_set_section_alignment (htab->pltlocal, 2))
-    return FALSE;
+    return false;
 
   if (bfd_link_pic (info))
     {
@@ -2440,25 +2436,25 @@ ppc_elf_create_glink (bfd *abfd, struct
 	= bfd_make_section_anyway_with_flags (abfd, ".rela.branch_lt", flags);
       if (htab->relpltlocal == NULL
 	  || !bfd_set_section_alignment (htab->relpltlocal, 2))
-	return FALSE;
+	return false;
     }
 
   if (!ppc_elf_create_linker_section (abfd, info, 0,
 				      &htab->sdata[0]))
-    return FALSE;
+    return false;
 
   if (!ppc_elf_create_linker_section (abfd, info, SEC_READONLY,
 				      &htab->sdata[1]))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* We have to create .dynsbss and .rela.sbss here so that they get mapped
    to output sections (just like _bfd_elf_create_dynamic_sections has
    to create .dynbss and .rela.bss).  */
 
-static bfd_boolean
+static bool
 ppc_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct ppc_elf_link_hash_table *htab;
@@ -2469,20 +2465,20 @@ ppc_elf_create_dynamic_sections (bfd *ab
 
   if (htab->elf.sgot == NULL
       && !ppc_elf_create_got (abfd, info))
-    return FALSE;
+    return false;
 
   if (!_bfd_elf_create_dynamic_sections (abfd, info))
-    return FALSE;
+    return false;
 
   if (htab->glink == NULL
       && !ppc_elf_create_glink (abfd, info))
-    return FALSE;
+    return false;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".dynsbss",
 					  SEC_ALLOC | SEC_LINKER_CREATED);
   htab->dynsbss = s;
   if (s == NULL)
-    return FALSE;
+    return false;
 
   if (! bfd_link_pic (info))
     {
@@ -2492,12 +2488,12 @@ ppc_elf_create_dynamic_sections (bfd *ab
       htab->relsbss = s;
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
-	return FALSE;
+	return false;
     }
 
-  if (htab->is_vxworks
+  if (htab->elf.target_os == is_vxworks
       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
-    return FALSE;
+    return false;
 
   s = htab->elf.splt;
   flags = SEC_ALLOC | SEC_CODE | SEC_LINKER_CREATED;
@@ -2534,20 +2530,20 @@ ppc_elf_copy_indirect_symbol (struct bfd
   if (eind->elf.root.type != bfd_link_hash_indirect)
     return;
 
-  if (eind->dyn_relocs != NULL)
+  if (ind->dyn_relocs != NULL)
     {
-      if (edir->dyn_relocs != NULL)
+      if (dir->dyn_relocs != NULL)
 	{
 	  struct elf_dyn_relocs **pp;
 	  struct elf_dyn_relocs *p;
 
 	  /* Add reloc counts against the indirect sym to the direct sym
 	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &ind->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      struct elf_dyn_relocs *q;
 
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
+	      for (q = dir->dyn_relocs; q != NULL; q = q->next)
 		if (q->sec == p->sec)
 		  {
 		    q->pc_count += p->pc_count;
@@ -2558,11 +2554,11 @@ ppc_elf_copy_indirect_symbol (struct bfd
 	      if (q == NULL)
 		pp = &p->next;
 	    }
-	  *pp = edir->dyn_relocs;
+	  *pp = dir->dyn_relocs;
 	}
 
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
+      dir->dyn_relocs = ind->dyn_relocs;
+      ind->dyn_relocs = NULL;
     }
 
   /* Copy over the GOT refcount entries that we may have already seen to
@@ -2614,7 +2610,7 @@ ppc_elf_copy_indirect_symbol (struct bfd
 /* Hook called by the linker routine which adds symbols from an object
    file.  We use it to put .comm items in .sbss, and not .bss.  */
 
-static bfd_boolean
+static bool
 ppc_elf_add_symbol_hook (bfd *abfd,
 			 struct bfd_link_info *info,
 			 Elf_Internal_Sym *sym,
@@ -2635,7 +2631,7 @@ ppc_elf_add_symbol_hook (bfd *abfd,
       htab = ppc_elf_hash_table (info);
       if (htab->sbss == NULL)
 	{
-	  flagword flags = SEC_IS_COMMON | SEC_LINKER_CREATED;
+	  flagword flags = SEC_IS_COMMON | SEC_SMALL_DATA | SEC_LINKER_CREATED;
 
 	  if (!htab->elf.dynobj)
 	    htab->elf.dynobj = abfd;
@@ -2644,14 +2640,14 @@ ppc_elf_add_symbol_hook (bfd *abfd,
 							   ".sbss",
 							   flags);
 	  if (htab->sbss == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       *secp = htab->sbss;
       *valp = sym->st_size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Find a linker generated pointer with a given addend and type.  */
@@ -2671,7 +2667,7 @@ elf_find_pointer_linker_section
 
 /* Allocate a pointer to live in a linker created section.  */
 
-static bfd_boolean
+static bool
 elf_allocate_pointer_linker_section (bfd *abfd,
 				     elf_linker_section_t *lsect,
 				     struct elf_link_hash_entry *h,
@@ -2694,7 +2690,7 @@ elf_allocate_pointer_linker_section (bfd
       if (elf_find_pointer_linker_section (eh->linker_section_pointer,
 					   rel->r_addend,
 					   lsect))
-	return TRUE;
+	return true;
 
       ptr_linker_section_ptr = &eh->linker_section_pointer;
     }
@@ -2715,7 +2711,7 @@ elf_allocate_pointer_linker_section (bfd
 	  ptr = bfd_zalloc (abfd, amt);
 
 	  if (!ptr)
-	    return FALSE;
+	    return false;
 
 	  elf_local_ptr_offsets (abfd) = ptr;
 	}
@@ -2724,7 +2720,7 @@ elf_allocate_pointer_linker_section (bfd
       if (elf_find_pointer_linker_section (ptr[r_symndx],
 					   rel->r_addend,
 					   lsect))
-	return TRUE;
+	return true;
 
       ptr_linker_section_ptr = &ptr[r_symndx];
     }
@@ -2736,7 +2732,7 @@ elf_allocate_pointer_linker_section (bfd
   linker_section_ptr = bfd_alloc (abfd, amt);
 
   if (!linker_section_ptr)
-    return FALSE;
+    return false;
 
   linker_section_ptr->next = *ptr_linker_section_ptr;
   linker_section_ptr->addend = rel->r_addend;
@@ -2744,7 +2740,7 @@ elf_allocate_pointer_linker_section (bfd
   *ptr_linker_section_ptr = linker_section_ptr;
 
   if (!bfd_set_section_alignment (lsect->section, 2))
-    return FALSE;
+    return false;
   linker_section_ptr->offset = lsect->section->size;
   lsect->section->size += 4;
 
@@ -2755,7 +2751,7 @@ elf_allocate_pointer_linker_section (bfd
 	   (long) lsect->section->size);
 #endif
 
-  return TRUE;
+  return true;
 }
 
 static struct plt_entry **
@@ -2789,7 +2785,7 @@ update_local_sym_info (bfd *abfd,
   return local_plt + r_symndx;
 }
 
-static bfd_boolean
+static bool
 update_plt_info (bfd *abfd, struct plt_entry **plist,
 		 asection *sec, bfd_vma addend)
 {
@@ -2802,10 +2798,10 @@ update_plt_info (bfd *abfd, struct plt_e
       break;
   if (ent == NULL)
     {
-      bfd_size_type amt = sizeof (*ent);
+      size_t amt = sizeof (*ent);
       ent = bfd_alloc (abfd, amt);
       if (ent == NULL)
-	return FALSE;
+	return false;
       ent->next = *plist;
       ent->sec = sec;
       ent->addend = addend;
@@ -2813,7 +2809,7 @@ update_plt_info (bfd *abfd, struct plt_e
       *plist = ent;
     }
   ent->plt.refcount += 1;
-  return TRUE;
+  return true;
 }
 
 static struct plt_entry *
@@ -2829,7 +2825,7 @@ find_plt_ent (struct plt_entry **plist,
   return ent;
 }
 
-static bfd_boolean
+static bool
 is_branch_reloc (enum elf_ppc_reloc_type r_type)
 {
   return (r_type == R_PPC_PLTREL24
@@ -2847,7 +2843,7 @@ is_branch_reloc (enum elf_ppc_reloc_type
 
 /* Relocs on inline plt call sequence insns prior to the call.  */
 
-static bfd_boolean
+static bool
 is_plt_seq_reloc (enum elf_ppc_reloc_type r_type)
 {
   return (r_type == R_PPC_PLT16_HA
@@ -2856,6 +2852,15 @@ is_plt_seq_reloc (enum elf_ppc_reloc_typ
 	  || r_type == R_PPC_PLTSEQ);
 }
 
+/* Like bfd_reloc_offset_in_range but without a howto.  Return true
+   iff a field of SIZE bytes at OFFSET is within SEC limits.  */
+
+static bool
+offset_in_range (asection *sec, bfd_vma offset, size_t size)
+{
+  return offset <= sec->size && size <= sec->size - offset;
+}
+
 static void
 bad_shared_reloc (bfd *abfd, enum elf_ppc_reloc_type r_type)
 {
@@ -2871,7 +2876,7 @@ bad_shared_reloc (bfd *abfd, enum elf_pp
    allocate space in the global offset table or procedure linkage
    table.  */
 
-static bfd_boolean
+static bool
 ppc_elf_check_relocs (bfd *abfd,
 		      struct bfd_link_info *info,
 		      asection *sec,
@@ -2886,16 +2891,7 @@ ppc_elf_check_relocs (bfd *abfd,
   struct elf_link_hash_entry *tga;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+    return true;
 
 #ifdef DEBUG
   _bfd_error_handler ("ppc_elf_check_relocs called for section %pA in %pB",
@@ -2914,10 +2910,10 @@ ppc_elf_check_relocs (bfd *abfd,
       if (htab->elf.dynobj == NULL)
 	htab->elf.dynobj = abfd;
       if (!ppc_elf_create_glink (htab->elf.dynobj, info))
-	return FALSE;
+	return false;
     }
   tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
-			      FALSE, FALSE, TRUE);
+			      false, false, true);
   symtab_hdr = &elf_symtab_hdr (abfd);
   sym_hashes = elf_sym_hashes (abfd);
   got2 = bfd_get_section_by_name (abfd, ".got2");
@@ -2929,6 +2925,7 @@ ppc_elf_check_relocs (bfd *abfd,
       unsigned long r_symndx;
       enum elf_ppc_reloc_type r_type;
       struct elf_link_hash_entry *h;
+      Elf_Internal_Sym *isym;
       int tls_type;
       struct plt_entry **ifunc;
       struct plt_entry **pltent;
@@ -2936,13 +2933,19 @@ ppc_elf_check_relocs (bfd *abfd,
 
       r_symndx = ELF32_R_SYM (rel->r_info);
       if (r_symndx < symtab_hdr->sh_info)
-	h = NULL;
+	{
+	  h = NULL;
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx);
+	  if (isym == NULL)
+	    return false;
+	}
       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;
+	  isym = NULL;
 	}
 
       /* If a relocation refers to _GLOBAL_OFFSET_TABLE_, create the .got.
@@ -2955,27 +2958,30 @@ ppc_elf_check_relocs (bfd *abfd,
 	  if (htab->elf.dynobj == NULL)
 	    htab->elf.dynobj = abfd;
 	  if (!ppc_elf_create_got (htab->elf.dynobj, info))
-	    return FALSE;
+	    return false;
 	  BFD_ASSERT (h == htab->elf.hgot);
 	}
 
       tls_type = 0;
       r_type = ELF32_R_TYPE (rel->r_info);
       ifunc = NULL;
-      if (h == NULL && !htab->is_vxworks)
+      if (h != NULL)
+	{
+	  if (h->type == STT_GNU_IFUNC)
+	    {
+	      h->needs_plt = 1;
+	      ifunc = &h->plt.plist;
+	    }
+	}
+      else if (htab->elf.target_os != is_vxworks)
 	{
-	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-							  abfd, r_symndx);
-	  if (isym == NULL)
-	    return FALSE;
-
 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 	    {
 	      /* Set PLT_IFUNC flag for this sym, no GOT entry yet.  */
 	      ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
 					     NON_GOT | PLT_IFUNC);
 	      if (ifunc == NULL)
-		return FALSE;
+		return false;
 
 	      /* STT_GNU_IFUNC symbols must have a PLT entry;
 		 In a non-pie executable even when there are
@@ -2996,12 +3002,12 @@ ppc_elf_check_relocs (bfd *abfd,
 			  || r_type == R_PPC_PLT16_HA))
 		    addend = rel->r_addend;
 		  if (!update_plt_info (abfd, ifunc, got2, addend))
-		    return FALSE;
+		    return false;
 		}
 	    }
 	}
 
-      if (!htab->is_vxworks
+      if (htab->elf.target_os != is_vxworks
 	  && is_branch_reloc (r_type)
 	  && h != NULL
 	  && h == tga)
@@ -3028,7 +3034,7 @@ ppc_elf_check_relocs (bfd *abfd,
 	  else
 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
 					NON_GOT | TLS_TLS | TLS_MARK))
-	      return FALSE;
+	      return false;
 	  break;
 
 	case R_PPC_PLTSEQ:
@@ -3077,7 +3083,7 @@ ppc_elf_check_relocs (bfd *abfd,
 	      if (htab->elf.dynobj == NULL)
 		htab->elf.dynobj = abfd;
 	      if (!ppc_elf_create_got (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	  if (h != NULL)
 	    {
@@ -3087,14 +3093,14 @@ ppc_elf_check_relocs (bfd *abfd,
 	  else
 	    /* This is a global offset table entry for a local symbol.  */
 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx, tls_type))
-	      return FALSE;
+	      return false;
 
 	  /* We may also need a plt entry if the symbol turns out to be
 	     an ifunc.  */
 	  if (h != NULL && !bfd_link_pic (info))
 	    {
 	      if (!update_plt_info (abfd, &h->plt.plist, NULL, 0))
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -3103,11 +3109,11 @@ ppc_elf_check_relocs (bfd *abfd,
 	  htab->sdata[0].sym->ref_regular = 1;
 	  if (!elf_allocate_pointer_linker_section (abfd, &htab->sdata[0],
 						    h, rel))
-	    return FALSE;
+	    return false;
 	  if (h != NULL)
 	    {
-	      ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
-	      h->non_got_ref = TRUE;
+	      ppc_elf_hash_entry (h)->has_sda_refs = true;
+	      h->non_got_ref = true;
 	    }
 	  break;
 
@@ -3116,16 +3122,16 @@ ppc_elf_check_relocs (bfd *abfd,
 	  if (!bfd_link_executable (info))
 	    {
 	      bad_shared_reloc (abfd, r_type);
-	      return FALSE;
+	      return false;
 	    }
 	  htab->sdata[1].sym->ref_regular = 1;
 	  if (!elf_allocate_pointer_linker_section (abfd, &htab->sdata[1],
 						    h, rel))
-	    return FALSE;
+	    return false;
 	  if (h != NULL)
 	    {
-	      ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
-	      h->non_got_ref = TRUE;
+	      ppc_elf_hash_entry (h)->has_sda_refs = true;
+	      h->non_got_ref = true;
 	    }
 	  break;
 
@@ -3141,8 +3147,8 @@ ppc_elf_check_relocs (bfd *abfd,
 	case R_PPC_VLE_SDAREL_HA16D:
 	  if (h != NULL)
 	    {
-	      ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
-	      h->non_got_ref = TRUE;
+	      ppc_elf_hash_entry (h)->has_sda_refs = true;
+	      h->non_got_ref = true;
 	    }
 	  break;
 
@@ -3162,13 +3168,13 @@ ppc_elf_check_relocs (bfd *abfd,
 	  if (!bfd_link_executable (info))
 	    {
 	      bad_shared_reloc (abfd, r_type);
-	      return FALSE;
+	      return false;
 	    }
 	  htab->sdata[1].sym->ref_regular = 1;
 	  if (h != NULL)
 	    {
-	      ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
-	      h->non_got_ref = TRUE;
+	      ppc_elf_hash_entry (h)->has_sda_refs = true;
+	      h->non_got_ref = true;
 	    }
 	  break;
 
@@ -3178,8 +3184,8 @@ ppc_elf_check_relocs (bfd *abfd,
 	case R_PPC_EMB_RELSDA:
 	  if (h != NULL)
 	    {
-	      ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
-	      h->non_got_ref = TRUE;
+	      ppc_elf_hash_entry (h)->has_sda_refs = true;
+	      h->non_got_ref = true;
 	    }
 	  break;
 
@@ -3189,7 +3195,7 @@ ppc_elf_check_relocs (bfd *abfd,
 	case R_PPC_EMB_NADDR16_HI:
 	case R_PPC_EMB_NADDR16_HA:
 	  if (h != NULL)
-	    h->non_got_ref = TRUE;
+	    h->non_got_ref = true;
 	  break;
 
 	case R_PPC_PLTREL24:
@@ -3217,7 +3223,7 @@ ppc_elf_check_relocs (bfd *abfd,
 	      pltent = update_local_sym_info (abfd, symtab_hdr, r_symndx,
 					      NON_GOT | PLT_KEEP);
 	      if (pltent == NULL)
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
@@ -3234,7 +3240,7 @@ ppc_elf_check_relocs (bfd *abfd,
 		  || r_type == R_PPC_PLT16_HA))
 	    addend = rel->r_addend;
 	  if (!update_plt_info (abfd, pltent, got2, addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* The following relocations don't need to propagate the
@@ -3294,34 +3300,34 @@ ppc_elf_check_relocs (bfd *abfd,
 	      htab->plt_type = PLT_OLD;
 	      htab->old_bfd = abfd;
 	    }
-	  if (h != NULL && h->type == STT_GNU_IFUNC)
-	    {
-	      h->needs_plt = 1;
-	      if (!update_plt_info (abfd, &h->plt.plist, NULL, 0))
-		return FALSE;
-	    }
+	  if (h != NULL
+	      && ifunc != NULL
+	      && !update_plt_info (abfd, ifunc, NULL, 0))
+	    return false;
 	  break;
 
 	  /* This relocation describes the C++ object vtable hierarchy.
 	     Reconstruct it for later use during GC.  */
 	case R_PPC_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_PPC_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
+	case R_PPC_TPREL16_HI:
+	case R_PPC_TPREL16_HA:
+	  sec->has_tls_reloc = 1;
+	  /* Fall through.  */
 	  /* We shouldn't really be seeing TPREL32.  */
 	case R_PPC_TPREL32:
 	case R_PPC_TPREL16:
 	case R_PPC_TPREL16_LO:
-	case R_PPC_TPREL16_HI:
-	case R_PPC_TPREL16_HA:
 	  if (bfd_link_dll (info))
 	    info->flags |= DF_STATIC_TLS;
 	  goto dodyn;
@@ -3345,12 +3351,6 @@ ppc_elf_check_relocs (bfd *abfd,
 		 reliably deduce the GOT pointer value needed for
 		 PLT call stubs.  */
 	      asection *s;
-	      Elf_Internal_Sym *isym;
-
-	      isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-					    abfd, r_symndx);
-	      if (isym == NULL)
-		return FALSE;
 
 	      s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 	      if (s == got2)
@@ -3375,7 +3375,7 @@ ppc_elf_check_relocs (bfd *abfd,
 	      /* We may need a plt entry if the symbol turns out to be
 		 a function defined in a dynamic object.  */
 	      if (!update_plt_info (abfd, &h->plt.plist, NULL, 0))
-		return FALSE;
+		return false;
 
 	      /* We may need a copy reloc too.  */
 	      h->non_got_ref = 1;
@@ -3414,43 +3414,26 @@ ppc_elf_check_relocs (bfd *abfd,
 		 a function defined in a dynamic object.  */
 	      h->needs_plt = 1;
 	      if (!update_plt_info (abfd, &h->plt.plist, NULL, 0))
-		return FALSE;
+		return false;
 	      break;
 	    }
 
 	dodyn:
-	  /* If we are creating a shared library, and this is a reloc
-	     against a global symbol, or a non PC relative reloc
-	     against a local symbol, then we need to copy the reloc
-	     into the shared library.  However, if we are linking with
-	     -Bsymbolic, we do not need to copy a reloc against a
-	     global symbol which is defined in an object we are
-	     including in the link (i.e., DEF_REGULAR is set).  At
-	     this point we have not seen all the input files, so it is
-	     possible that DEF_REGULAR is not set now but will be set
-	     later (it is never cleared).  In case of a weak definition,
-	     DEF_REGULAR may be cleared later by a strong definition in
-	     a shared library.  We account for that possibility below by
-	     storing information in the dyn_relocs field of the hash
-	     table entry.  A similar situation occurs when creating
-	     shared libraries and symbol visibility changes render the
-	     symbol local.
-
-	     If on the other hand, we are creating an executable, we
-	     may need to keep relocations for symbols satisfied by a
-	     dynamic library if we manage to avoid copy relocs for the
-	     symbol.  */
-	  if ((bfd_link_pic (info)
-	       && (must_be_dyn_reloc (info, r_type)
-		   || (h != NULL
-		       && (!SYMBOLIC_BIND (info, h)
-			   || h->root.type == bfd_link_hash_defweak
-			   || !h->def_regular))))
-	      || (ELIMINATE_COPY_RELOCS
-		  && !bfd_link_pic (info)
-		  && h != NULL
-		  && (h->root.type == bfd_link_hash_defweak
-		      || !h->def_regular)))
+	  /* Set up information for symbols that might need dynamic
+	     relocations.  At this point in linking we have read all
+	     the input files and resolved most symbols, but have not
+	     yet decided whether symbols are dynamic or finalized
+	     symbol flags.  In some cases we might be setting dynamic
+	     reloc info for symbols that do not end up needing such.
+	     That's OK, adjust_dynamic_symbol and allocate_dynrelocs
+	     work together with this code.  */
+	  if ((h != NULL
+	       && !SYMBOL_REFERENCES_LOCAL (info, h))
+	      || (bfd_link_pic (info)
+		  && (h != NULL
+		      ? !bfd_is_abs_symbol (&h->root)
+		      : isym->st_shndx != SHN_ABS)
+		  && must_be_dyn_reloc (info, r_type)))
 	    {
 #ifdef DEBUG
 	      fprintf (stderr,
@@ -3465,10 +3448,10 @@ ppc_elf_check_relocs (bfd *abfd,
 		    htab->elf.dynobj = abfd;
 
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ TRUE);
+		    (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
@@ -3478,13 +3461,13 @@ ppc_elf_check_relocs (bfd *abfd,
 		  struct elf_dyn_relocs *p;
 		  struct elf_dyn_relocs **rel_head;
 
-		  rel_head = &ppc_elf_hash_entry (h)->dyn_relocs;
+		  rel_head = &h->dyn_relocs;
 		  p = *rel_head;
 		  if (p == NULL || p->sec != sec)
 		    {
 		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
 		      if (p == NULL)
-			return FALSE;
+			return false;
 		      p->next = *rel_head;
 		      *rel_head = p;
 		      p->sec = sec;
@@ -3502,15 +3485,9 @@ ppc_elf_check_relocs (bfd *abfd,
 		     easily.  Oh well.  */
 		  struct ppc_dyn_relocs *p;
 		  struct ppc_dyn_relocs **rel_head;
-		  bfd_boolean is_ifunc;
+		  bool is_ifunc;
 		  asection *s;
 		  void *vpp;
-		  Elf_Internal_Sym *isym;
-
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-						abfd, r_symndx);
-		  if (isym == NULL)
-		    return FALSE;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
@@ -3518,7 +3495,7 @@ ppc_elf_check_relocs (bfd *abfd,
 
 		  vpp = &elf_section_data (s)->local_dynrel;
 		  rel_head = (struct ppc_dyn_relocs **) vpp;
-		  is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
+		  is_ifunc = ifunc != NULL;
 		  p = *rel_head;
 		  if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
 		    p = p->next;
@@ -3526,7 +3503,7 @@ ppc_elf_check_relocs (bfd *abfd,
 		    {
 		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
 		      if (p == NULL)
-			return FALSE;
+			return false;
 		      p->next = *rel_head;
 		      *rel_head = p;
 		      p->sec = sec;
@@ -3541,18 +3518,29 @@ ppc_elf_check_relocs (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Warn for conflicting Tag_GNU_Power_ABI_FP attributes between IBFD
    and OBFD, and merge non-conflicting ones.  */
-bfd_boolean
+bool
 _bfd_elf_ppc_merge_fp_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   obj_attribute *in_attr, *in_attrs;
   obj_attribute *out_attr, *out_attrs;
-  bfd_boolean ret = TRUE;
+  bool ret = true;
+  bool warn_only;
+
+  /* We only warn about shared library mismatches, because common
+     libraries advertise support for a particular long double variant
+     but actually support more than one variant.  For example, glibc
+     typically supports 128-bit IBM long double in the shared library
+     but has a compatibility static archive for 64-bit long double.
+     The linker doesn't have the smarts to see that an app using
+     object files marked as 64-bit long double call the compatibility
+     layer objects and only from there call into the shared library.  */
+  warn_only = (ibfd->flags & DYNAMIC) != 0;
 
   in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
   out_attrs = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
@@ -3570,9 +3558,12 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	;
       else if (out_fp == 0)
 	{
-	  out_attr->type = ATTR_TYPE_FLAG_INT_VAL;
-	  out_attr->i ^= in_fp;
-	  last_fp = ibfd;
+	  if (!warn_only)
+	    {
+	      out_attr->type = ATTR_TYPE_FLAG_INT_VAL;
+	      out_attr->i ^= in_fp;
+	      last_fp = ibfd;
+	    }
 	}
       else if (out_fp != 2 && in_fp == 2)
 	{
@@ -3580,7 +3571,7 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	    /* xgettext:c-format */
 	    (_("%pB uses hard float, %pB uses soft float"),
 	     last_fp, ibfd);
-	  ret = FALSE;
+	  ret = warn_only;
 	}
       else if (out_fp == 2 && in_fp != 2)
 	{
@@ -3588,7 +3579,7 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	    /* xgettext:c-format */
 	    (_("%pB uses hard float, %pB uses soft float"),
 	     ibfd, last_fp);
-	  ret = FALSE;
+	  ret = warn_only;
 	}
       else if (out_fp == 1 && in_fp == 3)
 	{
@@ -3596,7 +3587,7 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	    /* xgettext:c-format */
 	    (_("%pB uses double-precision hard float, "
 	       "%pB uses single-precision hard float"), last_fp, ibfd);
-	  ret = FALSE;
+	  ret = warn_only;
 	}
       else if (out_fp == 3 && in_fp == 1)
 	{
@@ -3604,7 +3595,7 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	    /* xgettext:c-format */
 	    (_("%pB uses double-precision hard float, "
 	       "%pB uses single-precision hard float"), ibfd, last_fp);
-	  ret = FALSE;
+	  ret = warn_only;
 	}
 
       in_fp = in_attr->i & 0xc;
@@ -3613,9 +3604,12 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	;
       else if (out_fp == 0)
 	{
-	  out_attr->type = ATTR_TYPE_FLAG_INT_VAL;
-	  out_attr->i ^= in_fp;
-	  last_ld = ibfd;
+	  if (!warn_only)
+	    {
+	      out_attr->type = ATTR_TYPE_FLAG_INT_VAL;
+	      out_attr->i ^= in_fp;
+	      last_ld = ibfd;
+	    }
 	}
       else if (out_fp != 2 * 4 && in_fp == 2 * 4)
 	{
@@ -3623,7 +3617,7 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	    /* xgettext:c-format */
 	    (_("%pB uses 64-bit long double, "
 	       "%pB uses 128-bit long double"), ibfd, last_ld);
-	  ret = FALSE;
+	  ret = warn_only;
 	}
       else if (in_fp != 2 * 4 && out_fp == 2 * 4)
 	{
@@ -3631,7 +3625,7 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	    /* xgettext:c-format */
 	    (_("%pB uses 64-bit long double, "
 	       "%pB uses 128-bit long double"), last_ld, ibfd);
-	  ret = FALSE;
+	  ret = warn_only;
 	}
       else if (out_fp == 1 * 4 && in_fp == 3 * 4)
 	{
@@ -3639,7 +3633,7 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	    /* xgettext:c-format */
 	    (_("%pB uses IBM long double, "
 	       "%pB uses IEEE long double"), last_ld, ibfd);
-	  ret = FALSE;
+	  ret = warn_only;
 	}
       else if (out_fp == 3 * 4 && in_fp == 1 * 4)
 	{
@@ -3647,7 +3641,7 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 	    /* xgettext:c-format */
 	    (_("%pB uses IBM long double, "
 	       "%pB uses IEEE long double"), ibfd, last_ld);
-	  ret = FALSE;
+	  ret = warn_only;
 	}
     }
 
@@ -3661,16 +3655,16 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
 
 /* Merge object attributes from IBFD into OBFD.  Warn if
    there are conflicting attributes.  */
-static bfd_boolean
+static bool
 ppc_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd;
   obj_attribute *in_attr, *in_attrs;
   obj_attribute *out_attr, *out_attrs;
-  bfd_boolean ret;
+  bool ret;
 
   if (!_bfd_elf_ppc_merge_fp_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   obfd = info->output_bfd;
   in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
@@ -3680,7 +3674,7 @@ ppc_elf_merge_obj_attributes (bfd *ibfd,
      merge non-conflicting ones.  */
   in_attr = &in_attrs[Tag_GNU_Power_ABI_Vector];
   out_attr = &out_attrs[Tag_GNU_Power_ABI_Vector];
-  ret = TRUE;
+  ret = true;
   if (in_attr->i != out_attr->i)
     {
       int in_vec = in_attr->i & 3;
@@ -3715,7 +3709,7 @@ ppc_elf_merge_obj_attributes (bfd *ibfd,
 	    (_("%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"),
 	     last_vec, ibfd);
 	  out_attr->type = ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_ERROR;
-	  ret = FALSE;
+	  ret = false;
 	}
       else if (out_vec > in_vec)
 	{
@@ -3724,7 +3718,7 @@ ppc_elf_merge_obj_attributes (bfd *ibfd,
 	    (_("%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"),
 	     ibfd, last_vec);
 	  out_attr->type = ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_ERROR;
-	  ret = FALSE;
+	  ret = false;
 	}
     }
 
@@ -3753,7 +3747,7 @@ ppc_elf_merge_obj_attributes (bfd *ibfd,
 	    (_("%pB uses r3/r4 for small structure returns, "
 	       "%pB uses memory"), last_struct, ibfd);
 	  out_attr->type = ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_ERROR;
-	  ret = FALSE;
+	  ret = false;
 	}
       else if (out_struct > in_struct)
 	{
@@ -3762,13 +3756,13 @@ ppc_elf_merge_obj_attributes (bfd *ibfd,
 	    (_("%pB uses r3/r4 for small structure returns, "
 	       "%pB uses memory"), ibfd, last_struct);
 	  out_attr->type = ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_ERROR;
-	  ret = FALSE;
+	  ret = false;
 	}
     }
   if (!ret)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* Merge Tag_compatibility attributes and any common GNU ones.  */
@@ -3778,30 +3772,33 @@ ppc_elf_merge_obj_attributes (bfd *ibfd,
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 ppc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword old_flags;
   flagword new_flags;
-  bfd_boolean error;
+  bool error;
 
   if (!is_ppc_elf (ibfd) || !is_ppc_elf (obfd))
-    return TRUE;
+    return true;
 
   /* Check if we have the same endianness.  */
   if (! _bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   if (!ppc_elf_merge_obj_attributes (ibfd, info))
-    return FALSE;
+    return false;
+
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
   if (!elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
 
@@ -3814,11 +3811,11 @@ ppc_elf_merge_private_bfd_data (bfd *ibf
     {
       /* Warn about -mrelocatable mismatch.  Allow -mrelocatable-lib
 	 to be linked with either.  */
-      error = FALSE;
+      error = false;
       if ((new_flags & EF_PPC_RELOCATABLE) != 0
 	  && (old_flags & (EF_PPC_RELOCATABLE | EF_PPC_RELOCATABLE_LIB)) == 0)
 	{
-	  error = TRUE;
+	  error = true;
 	  _bfd_error_handler
 	    (_("%pB: compiled with -mrelocatable and linked with "
 	       "modules compiled normally"), ibfd);
@@ -3826,7 +3823,7 @@ ppc_elf_merge_private_bfd_data (bfd *ibf
       else if ((new_flags & (EF_PPC_RELOCATABLE | EF_PPC_RELOCATABLE_LIB)) == 0
 	       && (old_flags & EF_PPC_RELOCATABLE) != 0)
 	{
-	  error = TRUE;
+	  error = true;
 	  _bfd_error_handler
 	    (_("%pB: compiled normally and linked with "
 	       "modules compiled with -mrelocatable"), ibfd);
@@ -3853,7 +3850,7 @@ ppc_elf_merge_private_bfd_data (bfd *ibf
       /* Warn about any other mismatches.  */
       if (new_flags != old_flags)
 	{
-	  error = TRUE;
+	  error = true;
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: uses different e_flags (%#x) fields "
@@ -3864,24 +3861,26 @@ ppc_elf_merge_private_bfd_data (bfd *ibf
       if (error)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static void
+static bfd_reloc_status_type
 ppc_elf_vle_split16 (bfd *input_bfd,
 		     asection *input_section,
 		     unsigned long offset,
 		     bfd_byte *loc,
 		     bfd_vma value,
 		     split16_format_type split16_format,
-		     bfd_boolean fixup)
+		     bool fixup)
 {
   unsigned int insn, opcode;
 
+  if (!offset_in_range (input_section, offset, 4))
+    return bfd_reloc_outofrange;
   insn = bfd_get_32 (input_bfd, loc);
   opcode = insn & E_OPCODE_MASK;
   if (opcode == E_OR2I_INSN
@@ -3938,6 +3937,7 @@ ppc_elf_vle_split16 (bfd *input_bfd,
     }
   insn |= value & 0x7ff;
   bfd_put_32 (input_bfd, insn, loc);
+  return bfd_reloc_ok;
 }
 
 static void
@@ -3977,7 +3977,7 @@ ppc_elf_select_plt_layout (bfd *output_b
       else if (bfd_link_pic (info)
 	       && htab->elf.dynamic_sections_created
 	       && (h = elf_link_hash_lookup (&htab->elf, "_mcount",
-					     FALSE, FALSE, TRUE)) != NULL
+					     false, false, true)) != NULL
 	       && (h->type == STT_FUNC
 		   || h->needs_plt)
 	       && h->ref_regular
@@ -4016,12 +4016,19 @@ ppc_elf_select_plt_layout (bfd *output_b
 	  htab->plt_type = plt_type;
 	}
     }
-  if (htab->plt_type == PLT_OLD && htab->params->plt_style == PLT_NEW)
+  if (htab->plt_type == PLT_OLD)
     {
-      if (htab->old_bfd != NULL)
-	_bfd_error_handler (_("bss-plt forced due to %pB"), htab->old_bfd);
-      else
-	_bfd_error_handler (_("bss-plt forced by profiling"));
+      if (!info->user_warn_rwx_segments)
+	info->no_warn_rwx_segments = 1;
+      if (htab->params->plt_style == PLT_NEW
+	  || (htab->params->plt_style != PLT_OLD
+	      && !info->no_warn_rwx_segments))
+	{
+	  if (htab->old_bfd != NULL)
+	    _bfd_error_handler (_("bss-plt forced due to %pB"), htab->old_bfd);
+	  else
+	    _bfd_error_handler (_("bss-plt forced by profiling"));
+	}
     }
 
   BFD_ASSERT (htab->plt_type != PLT_VXWORKS);
@@ -4072,7 +4079,7 @@ ppc_elf_gc_mark_hook (asection *sec,
   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
 }
 
-static bfd_boolean
+static bool
 get_sym_h (struct elf_link_hash_entry **hp,
 	   Elf_Internal_Sym **symp,
 	   asection **symsecp,
@@ -4124,7 +4131,7 @@ get_sym_h (struct elf_link_hash_entry **
 					    symtab_hdr->sh_info,
 					    0, NULL, NULL, NULL);
 	  if (locsyms == NULL)
-	    return FALSE;
+	    return false;
 	  *locsymsp = locsyms;
 	}
       sym = locsyms + r_symndx;
@@ -4156,13 +4163,13 @@ get_sym_h (struct elf_link_hash_entry **
 	  *tls_maskp = tls_mask;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Analyze inline PLT call relocations to see whether calls to locally
    defined functions can be converted to direct calls.  */
 
-bfd_boolean
+bool
 ppc_elf_inline_plt (struct bfd_link_info *info)
 {
   struct ppc_elf_link_hash_table *htab;
@@ -4172,7 +4179,7 @@ ppc_elf_inline_plt (struct bfd_link_info
 
   htab = ppc_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* A bl insn can reach -0x2000000 to 0x1fffffc.  The limit is
      reduced somewhat to cater for possible stubs that might be added
@@ -4195,7 +4202,7 @@ ppc_elf_inline_plt (struct bfd_link_info
   if (high_vma - low_vma < limit)
     {
       htab->can_convert_all_inline_plt = 1;
-      return TRUE;
+      return true;
     }
 
   /* Otherwise, go looking through relocs for cases where a direct
@@ -4232,10 +4239,10 @@ ppc_elf_inline_plt (struct bfd_link_info
 	    relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
 						  info->keep_memory);
 	    if (relstart == NULL)
-	      return FALSE;
+	      return false;
 
 	    relend = relstart + sec->reloc_count;
-	    for (rel = relstart; rel < relend; )
+	    for (rel = relstart; rel < relend; rel++)
 	      {
 		enum elf_ppc_reloc_type r_type;
 		unsigned long r_symndx;
@@ -4254,10 +4261,9 @@ ppc_elf_inline_plt (struct bfd_link_info
 		  {
 		    if (elf_section_data (sec)->relocs != relstart)
 		      free (relstart);
-		    if (local_syms != NULL
-			&& symtab_hdr->contents != (unsigned char *) local_syms)
+		    if (symtab_hdr->contents != (unsigned char *) local_syms)
 		      free (local_syms);
-		    return FALSE;
+		    return false;
 		  }
 
 		if (sym_sec != NULL && sym_sec->output_section != NULL)
@@ -4291,7 +4297,7 @@ ppc_elf_inline_plt (struct bfd_link_info
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set plt output section type, htab->tls_get_addr, and call the
@@ -4304,15 +4310,15 @@ ppc_elf_tls_setup (bfd *obfd, struct bfd
 
   htab = ppc_elf_hash_table (info);
   htab->tls_get_addr = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
-					     FALSE, FALSE, TRUE);
+					     false, false, true);
   if (htab->plt_type != PLT_NEW)
-    htab->params->no_tls_get_addr_opt = TRUE;
+    htab->params->no_tls_get_addr_opt = true;
 
   if (!htab->params->no_tls_get_addr_opt)
     {
       struct elf_link_hash_entry *opt, *tga;
       opt = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
-				  FALSE, FALSE, TRUE);
+				  false, false, true);
       if (opt != NULL
 	  && (opt->root.type == bfd_link_hash_defined
 	      || opt->root.type == bfd_link_hash_defweak))
@@ -4346,14 +4352,14 @@ ppc_elf_tls_setup (bfd *obfd, struct bfd
 		      _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
 					      opt->dynstr_index);
 		      if (!bfd_elf_link_record_dynamic_symbol (info, opt))
-			return FALSE;
+			return false;
 		    }
 		  htab->tls_get_addr = opt;
 		}
 	    }
 	}
       else
-	htab->params->no_tls_get_addr_opt = TRUE;
+	htab->params->no_tls_get_addr_opt = true;
     }
   if (htab->plt_type == PLT_NEW
       && htab->elf.splt != NULL
@@ -4369,7 +4375,7 @@ ppc_elf_tls_setup (bfd *obfd, struct bfd
 /* Return TRUE iff REL is a branch reloc with a global symbol matching
    HASH.  */
 
-static bfd_boolean
+static bool
 branch_reloc_hash_match (const bfd *ibfd,
 			 const Elf_Internal_Rela *rel,
 			 const struct elf_link_hash_entry *hash)
@@ -4388,15 +4394,15 @@ branch_reloc_hash_match (const bfd *ibfd
 	     || h->root.type == bfd_link_hash_warning)
 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
       if (h == hash)
-	return TRUE;
+	return true;
     }
-  return FALSE;
+  return false;
 }
 
 /* Run through all the TLS relocs looking for optimization
    opportunities.  */
 
-bfd_boolean
+bool
 ppc_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED,
 		      struct bfd_link_info *info)
 {
@@ -4406,11 +4412,13 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUT
   int pass;
 
   if (!bfd_link_executable (info))
-    return TRUE;
+    return true;
 
   htab = ppc_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
+
+  htab->do_tls_opt = 1;
 
   /* Make two passes through the relocs.  First time check that tls
      relocs involved in setting up a tls_get_addr call are indeed
@@ -4434,7 +4442,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUT
 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
 						    info->keep_memory);
 	      if (relstart == NULL)
-		return FALSE;
+		return false;
 
 	      relend = relstart + sec->reloc_count;
 	      for (rel = relstart; rel < relend; rel++)
@@ -4444,7 +4452,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUT
 		  struct elf_link_hash_entry *h = NULL;
 		  unsigned char *tls_mask;
 		  unsigned char tls_set, tls_clear;
-		  bfd_boolean is_local;
+		  bool is_local;
 		  bfd_signed_vma *got_count;
 
 		  r_symndx = ELF32_R_SYM (rel->r_info);
@@ -4479,7 +4487,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUT
 					      ibfd, sec, rel->r_offset);
 		      if (elf_section_data (sec)->relocs != relstart)
 			free (relstart);
-		      return TRUE;
+		      return true;
 		    }
 
 		  expecting_tls_get_addr = 0;
@@ -4577,6 +4585,37 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUT
 		      tls_clear = 0;
 		      break;
 
+		    case R_PPC_TPREL16_HA:
+		      if (pass == 0)
+			{
+			  unsigned char buf[4];
+			  unsigned int insn;
+			  bfd_vma off = rel->r_offset & ~3;
+			  if (!bfd_get_section_contents (ibfd, sec, buf,
+							 off, 4))
+			    {
+			      if (elf_section_data (sec)->relocs != relstart)
+				free (relstart);
+			      return false;
+			    }
+			  insn = bfd_get_32 (ibfd, buf);
+			  /* addis rt,2,imm */
+			  if ((insn & ((0x3fu << 26) | 0x1f << 16))
+			      != ((15u << 26) | (2 << 16)))
+			    {
+			      /* xgettext:c-format */
+			      info->callbacks->minfo
+				(_("%H: warning: %s unexpected insn %#x.\n"),
+				 ibfd, sec, off, "R_PPC_TPREL16_HA", insn);
+			      htab->do_tls_opt = 0;
+			    }
+			}
+		      continue;
+
+		    case R_PPC_TPREL16_HI:
+		      htab->do_tls_opt = 0;
+		      continue;
+
 		    default:
 		      continue;
 		    }
@@ -4601,7 +4640,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUT
 					      ibfd, sec, rel->r_offset);
 		      if (elf_section_data (sec)->relocs != relstart)
 			free (relstart);
-		      return TRUE;
+		      return true;
 		    }
 
 		  if (h != NULL)
@@ -4671,56 +4710,38 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUT
 		free (relstart);
 	    }
       }
-  htab->do_tls_opt = 1;
-  return TRUE;
+  return true;
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = ppc_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Return true if we have dynamic relocs against H or any of its weak
    aliases, that apply to read-only sections.  Cannot be used after
    size_dynamic_sections.  */
 
-static bfd_boolean
+static bool
 alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
 {
   struct ppc_elf_link_hash_entry *eh = ppc_elf_hash_entry (h);
   do
     {
-      if (readonly_dynrelocs (&eh->elf))
-	return TRUE;
+      if (_bfd_elf_readonly_dynrelocs (&eh->elf))
+	return true;
       eh = ppc_elf_hash_entry (eh->elf.u.alias);
     } while (eh != NULL && &eh->elf != h);
 
-  return FALSE;
+  return false;
 }
 
 /* Return whether H has pc-relative dynamic relocs.  */
 
-static bfd_boolean
+static bool
 pc_dynrelocs (struct elf_link_hash_entry *h)
 {
   struct elf_dyn_relocs *p;
 
-  for (p = ppc_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     if (p->pc_count != 0)
-      return TRUE;
-  return FALSE;
+      return true;
+  return false;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -4729,7 +4750,7 @@ pc_dynrelocs (struct elf_link_hash_entry
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 			       struct elf_link_hash_entry *h)
 {
@@ -4756,12 +4777,12 @@ ppc_elf_adjust_dynamic_symbol (struct bf
       || h->type == STT_GNU_IFUNC
       || h->needs_plt)
     {
-      bfd_boolean local = (SYMBOL_CALLS_LOCAL (info, h)
+      bool local = (SYMBOL_CALLS_LOCAL (info, h)
 			   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
       /* Discard dyn_relocs when non-pic if we've decided that a
 	 function symbol is local.  */
       if (!bfd_link_pic (info) && local)
-	ppc_elf_hash_entry (h)->dyn_relocs = NULL;
+	h->dyn_relocs = NULL;
 
       /* Clear procedure linkage table information for any symbol that
 	 won't need a .plt entry.  */
@@ -4805,9 +4826,9 @@ ppc_elf_adjust_dynamic_symbol (struct bf
 	       || (h->non_got_ref
 		   && !h->ref_regular_nonweak
 		   && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)))
-	      && !htab->is_vxworks
+	      && htab->elf.target_os != is_vxworks
 	      && !ppc_elf_hash_entry (h)->has_sda_refs
-	      && !readonly_dynrelocs (h))
+	      && !_bfd_elf_readonly_dynrelocs (h))
 	    {
 	      h->pointer_equality_needed = 0;
 	      /* If we haven't seen a branch reloc and the symbol
@@ -4818,11 +4839,11 @@ ppc_elf_adjust_dynamic_symbol (struct bf
 	  else if (!bfd_link_pic (info))
 	    /* We are going to be defining the function symbol on the
 	       plt stub, so no dyn_relocs needed when non-pic.  */
-	    ppc_elf_hash_entry (h)->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 	}
       h->protected_def = 0;
       /* Function symbols can't have copy relocs.  */
-      return TRUE;
+      return true;
     }
   else
     h->plt.plist = NULL;
@@ -4839,8 +4860,8 @@ ppc_elf_adjust_dynamic_symbol (struct bf
       if (def->root.u.def.section == htab->elf.sdynbss
 	  || def->root.u.def.section == htab->elf.sdynrelro
 	  || def->root.u.def.section == htab->dynsbss)
-	ppc_elf_hash_entry (h)->dyn_relocs = NULL;
-      return TRUE;
+	h->dyn_relocs = NULL;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -4853,7 +4874,7 @@ ppc_elf_adjust_dynamic_symbol (struct bf
   if (bfd_link_pic (info))
     {
       h->protected_def = 0;
-      return TRUE;
+      return true;
     }
 
   /* If there are no references to this symbol that do not use the
@@ -4861,7 +4882,7 @@ ppc_elf_adjust_dynamic_symbol (struct bf
   if (!h->non_got_ref)
     {
       h->protected_def = 0;
-      return TRUE;
+      return true;
     }
 
   /* Protected variables do not work with .dynbss.  The copy in
@@ -4876,12 +4897,12 @@ ppc_elf_adjust_dynamic_symbol (struct bf
 	  && htab->params->pic_fixup == 0
 	  && info->disable_target_specific_optimizations <= 1)
 	htab->params->pic_fixup = 1;
-      return TRUE;
+      return true;
     }
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
-    return TRUE;
+    return true;
 
    /* If we don't find any dynamic relocs in read-only sections, then
       we'll be keeping the dynamic relocs and avoiding the copy reloc.
@@ -4891,10 +4912,10 @@ ppc_elf_adjust_dynamic_symbol (struct bf
       executable.  */
   if (ELIMINATE_COPY_RELOCS
       && !ppc_elf_hash_entry (h)->has_sda_refs
-      && !htab->is_vxworks
+      && htab->elf.target_os != is_vxworks
       && !h->def_regular
       && !alias_readonly_dynrelocs (h))
-    return TRUE;
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -4935,7 +4956,7 @@ ppc_elf_adjust_dynamic_symbol (struct bf
     }
 
   /* We no longer want dyn_relocs.  */
-  ppc_elf_hash_entry (h)->dyn_relocs = NULL;
+  h->dyn_relocs = NULL;
   return _bfd_elf_adjust_dynamic_copy (info, h, s);
 }
 
@@ -4945,7 +4966,7 @@ ppc_elf_adjust_dynamic_symbol (struct bf
    is xxxxxxxx.plt_pic32.<callee>, and for -fPIC
    xxxxxxxx.got2.plt_pic32.<callee>.  */
 
-static bfd_boolean
+static bool
 add_stub_sym (struct plt_entry *ent,
 	      struct elf_link_hash_entry *h,
 	      struct bfd_link_info *info)
@@ -4968,15 +4989,15 @@ add_stub_sym (struct plt_entry *ent,
     len3 = strlen (ent->sec->name);
   name = bfd_malloc (len1 + len2 + len3 + 9);
   if (name == NULL)
-    return FALSE;
+    return false;
   sprintf (name, "%08x", (unsigned) ent->addend & 0xffffffff);
   if (ent->sec)
     memcpy (name + 8, ent->sec->name, len3);
   memcpy (name + 8 + len3, stub, len2);
   memcpy (name + 8 + len3 + len2, h->root.root.string, len1 + 1);
-  sh = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
+  sh = elf_link_hash_lookup (&htab->elf, name, true, false, false);
   if (sh == NULL)
-    return FALSE;
+    return false;
   if (sh->root.type == bfd_link_hash_new)
     {
       sh->root.type = bfd_link_hash_defined;
@@ -4989,7 +5010,7 @@ add_stub_sym (struct plt_entry *ent,
       sh->non_elf = 0;
       sh->root.linker_def = 1;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate NEED contiguous space in .got, and return the offset.
@@ -5053,7 +5074,7 @@ got_entries_needed (int tls_mask)
 
 /* If H is undefined, make it dynamic if that makes sense.  */
 
-static bfd_boolean
+static bool
 ensure_undef_dynamic (struct bfd_link_info *info,
 		      struct elf_link_hash_entry *h)
 {
@@ -5067,22 +5088,33 @@ ensure_undef_dynamic (struct bfd_link_in
       && !h->forced_local
       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
     return bfd_elf_link_record_dynamic_symbol (info, h);
-  return TRUE;
+  return true;
+}
+
+/* Choose whether to use htab->iplt or htab->pltlocal rather than the
+   usual htab->elf.splt section for a PLT entry.  */
+
+static inline
+bool use_local_plt (struct bfd_link_info *info,
+			   struct elf_link_hash_entry *h)
+{
+  return (h == NULL
+	  || h->dynindx == -1
+	  || !elf_hash_table (info)->dynamic_sections_created);
 }
 
 /* Allocate space in associated reloc sections for dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info = inf;
   struct ppc_elf_link_hash_entry *eh;
   struct ppc_elf_link_hash_table *htab;
   struct elf_dyn_relocs *p;
-  bfd_boolean dyn;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   htab = ppc_elf_hash_table (info);
   eh = (struct ppc_elf_link_hash_entry *) h;
@@ -5094,13 +5126,12 @@ allocate_dynrelocs (struct elf_link_hash
 	  && eh->has_addr16_lo
 	  && htab->params->pic_fixup > 0))
     {
-      unsigned int need;
-
       /* Make sure this symbol is output as a dynamic symbol.  */
       if (!ensure_undef_dynamic (info, &eh->elf))
-	return FALSE;
+	return false;
 
-      need = 0;
+      unsigned int need = got_entries_needed (eh->tls_mask);
+      unsigned int rel_need = need * sizeof (Elf32_External_Rela) / 4;
       if ((eh->tls_mask & (TLS_TLS | TLS_LD)) == (TLS_TLS | TLS_LD))
 	{
 	  if (SYMBOL_REFERENCES_LOCAL (info, &eh->elf))
@@ -5109,9 +5140,11 @@ allocate_dynrelocs (struct elf_link_hash
 	       a local dynamic reloc against a non-local symbol.  */
 	    htab->tlsld_got.refcount += 1;
 	  else
-	    need += 8;
+	    {
+	      need += 8;
+	      rel_need += sizeof (Elf32_External_Rela);
+	    }
 	}
-      need += got_entries_needed (eh->tls_mask);
       if (need == 0)
 	eh->elf.got.offset = (bfd_vma) -1;
       else
@@ -5120,7 +5153,8 @@ allocate_dynrelocs (struct elf_link_hash
 	  if (((bfd_link_pic (info)
 		&& !((eh->tls_mask & TLS_TLS) != 0
 		     && bfd_link_executable (info)
-		     && SYMBOL_REFERENCES_LOCAL (info, &eh->elf)))
+		     && SYMBOL_REFERENCES_LOCAL (info, &eh->elf))
+		&& !bfd_is_abs_symbol (&h->root))
 	       || (htab->elf.dynamic_sections_created
 		   && eh->elf.dynindx != -1
 		   && !SYMBOL_REFERENCES_LOCAL (info, &eh->elf)))
@@ -5128,13 +5162,10 @@ allocate_dynrelocs (struct elf_link_hash
 	    {
 	      asection *rsec;
 
-	      need *= sizeof (Elf32_External_Rela) / 4;
-	      if ((eh->tls_mask & (TLS_TLS | TLS_LD)) == (TLS_TLS | TLS_LD))
-		need -= sizeof (Elf32_External_Rela);
 	      rsec = htab->elf.srelgot;
 	      if (eh->elf.type == STT_GNU_IFUNC)
 		rsec = htab->elf.irelplt;
-	      rsec->size += need;
+	      rsec->size += rel_need;
 	    }
 	}
     }
@@ -5145,19 +5176,19 @@ allocate_dynrelocs (struct elf_link_hash
      IFUNCs which are handled even in static executables.  */
   if (!htab->elf.dynamic_sections_created
       && h->type != STT_GNU_IFUNC)
-    eh->dyn_relocs = NULL;
+    h->dyn_relocs = NULL;
 
   /* Discard relocs on undefined symbols that must be local.  */
   else if (h->root.type == bfd_link_hash_undefined
 	   && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
-    eh->dyn_relocs = NULL;
+    h->dyn_relocs = NULL;
 
   /* Also discard relocs on undefined weak syms with non-default
      visibility, or when dynamic_undefined_weak says so.  */
   else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-    eh->dyn_relocs = NULL;
+    h->dyn_relocs = NULL;
 
-  if (eh->dyn_relocs == NULL)
+  if (h->dyn_relocs == NULL)
     ;
 
   /* In the shared -Bsymbolic case, discard space allocated for
@@ -5177,7 +5208,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -5188,11 +5219,11 @@ allocate_dynrelocs (struct elf_link_hash
 	    }
 	}
 
-      if (htab->is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      if (strcmp (p->sec->output_section->name, ".tls_vars") == 0)
 		*pp = p->next;
@@ -5201,11 +5232,11 @@ allocate_dynrelocs (struct elf_link_hash
 	    }
 	}
 
-      if (eh->dyn_relocs != NULL)
+      if (h->dyn_relocs != NULL)
 	{
 	  /* Make sure this symbol is output as a dynamic symbol.  */
 	  if (!ensure_undef_dynamic (info, h))
-	    return FALSE;
+	    return false;
 	}
     }
   else if (ELIMINATE_COPY_RELOCS)
@@ -5213,7 +5244,11 @@ allocate_dynrelocs (struct elf_link_hash
       /* For the non-pic case, discard space for relocs against
 	 symbols which turn out to need copy relocs or are not
 	 dynamic.  */
-      if (h->dynamic_adjusted
+      if ((h->dynamic_adjusted
+	   || (h->ref_regular
+	       && h->root.type == bfd_link_hash_undefweak
+	       && (info->dynamic_undefined_weak > 0
+		   || !_bfd_elf_readonly_dynrelocs (h))))
 	  && !h->def_regular
 	  && !ELF_COMMON_DEF_P (h)
 	  && !(h->protected_def
@@ -5223,23 +5258,24 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  /* Make sure this symbol is output as a dynamic symbol.  */
 	  if (!ensure_undef_dynamic (info, h))
-	    return FALSE;
+	    return false;
 
 	  if (h->dynindx == -1)
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 	}
       else
-	eh->dyn_relocs = NULL;
+	h->dyn_relocs = NULL;
     }
 
   /* Allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *sreloc = elf_section_data (p->sec)->sreloc;
-      if (eh->elf.type == STT_GNU_IFUNC)
-	sreloc = htab->elf.irelplt;
-      sreloc->size += p->count * sizeof (Elf32_External_Rela);
-    }
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
+    if (!discarded_section (p->sec))
+      {
+	asection *sreloc = elf_section_data (p->sec)->sreloc;
+	if (eh->elf.type == STT_GNU_IFUNC)
+	  sreloc = htab->elf.irelplt;
+	sreloc->size += p->count * sizeof (Elf32_External_Rela);
+      }
 
   /* Handle PLT relocs.  Done last, after dynindx has settled.
      We might need a PLT entry when the symbol
@@ -5247,8 +5283,7 @@ allocate_dynrelocs (struct elf_link_hash
      b) is an ifunc, or
      c) has plt16 relocs and has been processed by adjust_dynamic_symbol, or
      d) has plt16 relocs and we are linking statically.  */
-  dyn = htab->elf.dynamic_sections_created && h->dynindx != -1;
-  if (dyn
+  if ((htab->elf.dynamic_sections_created && h->dynindx != -1)
       || h->type == STT_GNU_IFUNC
       || (h->needs_plt && h->dynamic_adjusted)
       || (h->needs_plt
@@ -5259,14 +5294,20 @@ allocate_dynrelocs (struct elf_link_hash
 	      & (TLS_TLS | PLT_KEEP)) == PLT_KEEP))
     {
       struct plt_entry *ent;
-      bfd_boolean doneone = FALSE;
+      bool doneone = false;
       bfd_vma plt_offset = 0, glink_offset = (bfd_vma) -1;
 
       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
 	if (ent->plt.refcount > 0)
 	  {
-	    asection *s = htab->elf.splt;
+	    asection *s;
+	    bool dyn;
 
+	    if (!ensure_undef_dynamic (info, h))
+	      return false;
+
+	    dyn = !use_local_plt (info, h);
+	    s = htab->elf.splt;
 	    if (!dyn)
 	      {
 		if (h->type == STT_GNU_IFUNC)
@@ -5306,7 +5347,7 @@ allocate_dynrelocs (struct elf_link_hash
 
 		    if (htab->params->emit_stub_syms
 			&& !add_stub_sym (ent, h, info))
-		      return FALSE;
+		      return false;
 		  }
 	      }
 	    else
@@ -5400,7 +5441,7 @@ allocate_dynrelocs (struct elf_link_hash
 			htab->elf.sgotplt->size += 4;
 		      }
 		  }
-		doneone = TRUE;
+		doneone = true;
 	      }
 	  }
 	else
@@ -5418,34 +5459,7 @@ allocate_dynrelocs (struct elf_link_hash
       h->needs_plt = 0;
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 static const unsigned char glink_eh_frame_cie[] =
@@ -5464,13 +5478,13 @@ static const unsigned char glink_eh_fram
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 ppc_elf_size_dynamic_sections (bfd *output_bfd,
 			       struct bfd_link_info *info)
 {
   struct ppc_elf_link_hash_table *htab;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
 #ifdef DEBUG
@@ -5508,6 +5522,8 @@ ppc_elf_size_dynamic_sections (bfd *outp
       char *lgot_masks;
       bfd_size_type locsymcount;
       Elf_Internal_Shdr *symtab_hdr;
+      Elf_Internal_Sym *local_syms;
+      Elf_Internal_Sym *isym;
 
       if (!is_ppc_elf (ibfd))
 	continue;
@@ -5521,15 +5537,14 @@ ppc_elf_size_dynamic_sections (bfd *outp
 	       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
 		     linker script /DISCARD/, so we'll be discarding
 		     the relocs too.  */
 		}
-	      else if (htab->is_vxworks
+	      else if (htab->elf.target_os == is_vxworks
 		       && strcmp (p->sec->output_section->name,
 				  ".tls_vars") == 0)
 		{
@@ -5564,8 +5579,18 @@ ppc_elf_size_dynamic_sections (bfd *outp
       local_plt = (struct plt_entry **) end_local_got;
       end_local_plt = local_plt + locsymcount;
       lgot_masks = (char *) end_local_plt;
+      local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+      if (local_syms == NULL && locsymcount != 0)
+	{
+	  local_syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, locsymcount,
+					     0, NULL, NULL, NULL);
+	  if (local_syms == NULL)
+	    return false;
+	}
 
-      for (; local_got < end_local_got; ++local_got, ++lgot_masks)
+      for (isym = local_syms;
+	   local_got < end_local_got;
+	   ++local_got, ++lgot_masks, ++isym)
 	if (*local_got > 0)
 	  {
 	    unsigned int need;
@@ -5579,7 +5604,8 @@ ppc_elf_size_dynamic_sections (bfd *outp
 		*local_got = allocate_got (htab, need);
 		if (bfd_link_pic (info)
 		    && !((*lgot_masks & TLS_TLS) != 0
-			 && bfd_link_executable (info)))
+			 && bfd_link_executable (info))
+		    && isym->st_shndx != SHN_ABS)
 		  {
 		    asection *srel;
 
@@ -5594,7 +5620,7 @@ ppc_elf_size_dynamic_sections (bfd *outp
 	else
 	  *local_got = (bfd_vma) -1;
 
-      if (htab->is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
 	continue;
 
       /* Allocate space for calls to local STT_GNU_IFUNC syms in .iplt.  */
@@ -5602,7 +5628,7 @@ ppc_elf_size_dynamic_sections (bfd *outp
       for (; local_plt < end_local_plt; ++local_plt, ++lgot_masks)
 	{
 	  struct plt_entry *ent;
-	  bfd_boolean doneone = FALSE;
+	  bool doneone = false;
 	  bfd_vma plt_offset = 0, glink_offset = (bfd_vma) -1;
 
 	  for (ent = *local_plt; ent != NULL; ent = ent->next)
@@ -5646,12 +5672,21 @@ ppc_elf_size_dynamic_sections (bfd *outp
 			s = htab->relpltlocal;
 			s->size += sizeof (Elf32_External_Rela);
 		      }
-		    doneone = TRUE;
+		    doneone = true;
 		  }
 	      }
 	    else
 	      ent->plt.offset = (bfd_vma) -1;
 	}
+
+      if (local_syms != NULL
+	  && symtab_hdr->contents != (unsigned char *) local_syms)
+	{
+	  if (!info->keep_memory)
+	    free (local_syms);
+	  else
+	    symtab_hdr->contents = (unsigned char *) local_syms;
+	}
     }
 
   /* Allocate space for global sym dynamic relocs.  */
@@ -5719,9 +5754,9 @@ ppc_elf_size_dynamic_sections (bfd *outp
 	{
 	  struct elf_link_hash_entry *sh;
 	  sh = elf_link_hash_lookup (&htab->elf, "__glink",
-				     TRUE, FALSE, FALSE);
+				     true, false, false);
 	  if (sh == NULL)
-	    return FALSE;
+	    return false;
 	  if (sh->root.type == bfd_link_hash_new)
 	    {
 	      sh->root.type = bfd_link_hash_defined;
@@ -5735,9 +5770,9 @@ ppc_elf_size_dynamic_sections (bfd *outp
 	      sh->root.linker_def = 1;
 	    }
 	  sh = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
-				     TRUE, FALSE, FALSE);
+				     true, false, false);
 	  if (sh == NULL)
-	    return FALSE;
+	    return false;
 	  if (sh->root.type == bfd_link_hash_new)
 	    {
 	      sh->root.type = bfd_link_hash_defined;
@@ -5771,10 +5806,10 @@ ppc_elf_size_dynamic_sections (bfd *outp
 
   /* We've now determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = htab->elf.dynobj->sections; s != NULL; s = s->next)
     {
-      bfd_boolean strip_section = TRUE;
+      bool strip_section = true;
 
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
@@ -5786,7 +5821,7 @@ ppc_elf_size_dynamic_sections (bfd *outp
 	     we've exported dynamic symbols from them we must leave them.
 	     It's too late to tell BFD to get rid of the symbols.  */
 	  if (htab->elf.hplt != NULL)
-	    strip_section = FALSE;
+	    strip_section = false;
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
@@ -5807,12 +5842,12 @@ ppc_elf_size_dynamic_sections (bfd *outp
 	{
 	  strip_section = (s->flags & SEC_KEEP) == 0;
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0)
 	    {
 	      /* Remember whether there are any relocation sections.  */
-	      relocs = TRUE;
+	      relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -5846,7 +5881,7 @@ ppc_elf_size_dynamic_sections (bfd *outp
       /* Allocate memory for the section contents.  */
       s->contents = bfd_zalloc (htab->elf.dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (htab->elf.dynamic_sections_created)
@@ -5859,56 +5894,22 @@ ppc_elf_size_dynamic_sections (bfd *outp
 #define add_dynamic_entry(TAG, VAL) \
   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->elf.splt != NULL && htab->elf.splt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
+      if (!_bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info,
+						    relocs))
+	return false;
 
       if (htab->plt_type == PLT_NEW
 	  && htab->glink != NULL
 	  && htab->glink->size != 0)
 	{
 	  if (!add_dynamic_entry (DT_PPC_GOT, 0))
-	    return FALSE;
+	    return false;
 	  if (!htab->params->no_tls_get_addr_opt
 	      && htab->tls_get_addr != NULL
 	      && htab->tls_get_addr->plt.plist != NULL
 	      && !add_dynamic_entry (DT_PPC_OPT, PPC_OPT_TLS))
-	    return FALSE;
+	    return false;
 	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-	}
-
-      /* If any dynamic relocs apply to a read-only section, then we
-	 need a DT_TEXTREL entry.  */
-      if ((info->flags & DF_TEXTREL) == 0)
-	elf_link_hash_traverse (elf_hash_table (info), maybe_set_textrel,
-				info);
-
-      if ((info->flags & DF_TEXTREL) != 0)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
-      if (htab->is_vxworks
-	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
-	return FALSE;
    }
 #undef add_dynamic_entry
 
@@ -5972,7 +5973,7 @@ ppc_elf_size_dynamic_sections (bfd *outp
 		  == htab->glink_eh_frame->size);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Arrange to have _SDA_BASE_ or _SDA2_BASE_ stripped from the output
@@ -6017,14 +6018,14 @@ ppc_elf_maybe_strip_sdata_syms (struct b
 
 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
 
-static bfd_boolean
+static bool
 ppc_elf_hash_symbol (struct elf_link_hash_entry *h)
 {
   if (h->plt.plist != NULL
       && !h->def_regular
       && (!h->pointer_equality_needed
 	  || !h->ref_regular_nonweak))
-    return FALSE;
+    return false;
 
   return _bfd_elf_hash_symbol (h);
 }
@@ -6064,11 +6065,11 @@ struct ppc_elf_relax_info
    space for the workaround has its size extended so that we can
    add trampolines at the end of the section.  */
 
-static bfd_boolean
+static bool
 ppc_elf_relax_section (bfd *abfd,
 		       asection *isec,
 		       struct bfd_link_info *link_info,
-		       bfd_boolean *again)
+		       bool *again)
 {
   struct one_branch_fixup
   {
@@ -6088,30 +6089,31 @@ ppc_elf_relax_section (bfd *abfd,
   struct one_branch_fixup *branch_fixups = NULL;
   struct ppc_elf_relax_info *relax_info = NULL;
   unsigned changes = 0;
-  bfd_boolean workaround_change;
+  bool workaround_change;
   struct ppc_elf_link_hash_table *htab;
   bfd_size_type trampbase, trampoff, newsize, picfixup_size;
   asection *got2;
-  bfd_boolean maybe_pasted;
+  bool maybe_pasted;
 
-  *again = FALSE;
+  *again = false;
 
   /* No need to do anything with non-alloc or non-code sections.  */
   if ((isec->flags & SEC_ALLOC) == 0
       || (isec->flags & SEC_CODE) == 0
+      || (isec->flags & SEC_HAS_CONTENTS) == 0
       || (isec->flags & SEC_LINKER_CREATED) != 0
       || isec->size < 4)
-    return TRUE;
+    return true;
 
   /* We cannot represent the required PIC relocs in the output, so don't
      do anything.  The linker doesn't support mixing -shared and -r
      anyway.  */
   if (bfd_link_relocatable (link_info) && bfd_link_pic (link_info))
-    return TRUE;
+    return true;
 
   htab = ppc_elf_hash_table (link_info);
   if (htab == NULL)
-    return TRUE;
+    return true;
 
   isec->size = (isec->size + 3) & -4;
   if (isec->rawsize == 0)
@@ -6130,7 +6132,7 @@ ppc_elf_relax_section (bfd *abfd,
 	  elf_section_data (isec)->sec_info
 	    = bfd_zalloc (abfd, sizeof (struct ppc_elf_relax_info));
 	  if (elf_section_data (isec)->sec_info == NULL)
-	    return FALSE;
+	    return false;
 	}
       relax_info = elf_section_data (isec)->sec_info;
       trampbase -= relax_info->workaround_size;
@@ -6167,7 +6169,7 @@ ppc_elf_relax_section (bfd *abfd,
 	  asection *tsec;
 	  struct one_branch_fixup *f;
 	  size_t insn_offset = 0;
-	  bfd_vma max_branch_offset = 0, val;
+	  bfd_vma max_branch_offset = 0, val, reladdr;
 	  bfd_byte *hit_addr;
 	  unsigned long t0;
 	  struct elf_link_hash_entry *h;
@@ -6413,6 +6415,7 @@ ppc_elf_relax_section (bfd *abfd,
 	    continue;
 
 	  roff = irel->r_offset;
+	  reladdr = isec->output_section->vma + isec->output_offset + roff;
 
 	  /* Avoid creating a lot of unnecessary fixups when
 	     relocatable if the output section size is such that a
@@ -6431,10 +6434,9 @@ ppc_elf_relax_section (bfd *abfd,
 		     final link, so do not presume they remain in range.  */
 		  || tsec->output_section == isec->output_section))
 	    {
-	      bfd_vma symaddr, reladdr;
+	      bfd_vma symaddr;
 
 	      symaddr = tsec->output_section->vma + tsec->output_offset + toff;
-	      reladdr = isec->output_section->vma + isec->output_offset + roff;
 	      if (symaddr - reladdr + max_branch_offset
 		  < 2 * max_branch_offset)
 		continue;
@@ -6505,6 +6507,12 @@ ppc_elf_relax_section (bfd *abfd,
 	      irel->r_info = ELF32_R_INFO (0, R_PPC_NONE);
 	    }
 
+	  link_info->callbacks->minfo
+	    (_("%pB: Adjusting branch at 0x%V towards \"%s\" in section %s\n"),
+	     abfd, reladdr,
+	     (h && h->root.root.string? h->root.root.string : "<unknown>"),
+	     f->tsec->name);
+
 	  /* Get the section contents.  */
 	  if (contents == NULL)
 	    {
@@ -6548,7 +6556,7 @@ ppc_elf_relax_section (bfd *abfd,
 	}
     }
 
-  workaround_change = FALSE;
+  workaround_change = false;
   newsize = trampoff;
   if (htab->params->ppc476_workaround
       && (!bfd_link_relocatable (link_info)
@@ -6572,7 +6580,7 @@ ppc_elf_relax_section (bfd *abfd,
 	  if (relax_info->workaround_size < newsize)
 	    {
 	      relax_info->workaround_size = newsize;
-	      workaround_change = TRUE;
+	      workaround_change = true;
 	    }
 	  /* Ensure relocate_section is called.  */
 	  isec->flags |= SEC_RELOC;
@@ -6642,12 +6650,11 @@ ppc_elf_relax_section (bfd *abfd,
       rel_hdr = _bfd_elf_single_rel_hdr (isec);
       rel_hdr->sh_size += changes * rel_hdr->sh_entsize;
     }
-  else if (internal_relocs != NULL
-	   && elf_section_data (isec)->relocs != internal_relocs)
+  else if (elf_section_data (isec)->relocs != internal_relocs)
     free (internal_relocs);
 
   *again = changes != 0 || workaround_change;
-  return TRUE;
+  return true;
 
  error_return:
   while (branch_fixups != NULL)
@@ -6656,15 +6663,13 @@ ppc_elf_relax_section (bfd *abfd,
       branch_fixups = branch_fixups->next;
       free (f);
     }
-  if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents)
+  if ((unsigned char *) isymbuf != symtab_hdr->contents)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (isec)->this_hdr.contents != contents)
+  if (elf_section_data (isec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (isec)->relocs != internal_relocs)
+  if (elf_section_data (isec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 
 /* What to do when ld finds relocations against symbols defined in
@@ -6825,7 +6830,7 @@ write_glink_stub (struct elf_link_hash_e
 
 /* Return true if symbol is defined statically.  */
 
-static bfd_boolean
+static bool
 is_static_defined (struct elf_link_hash_entry *h)
 {
   return ((h->root.type == bfd_link_hash_defined
@@ -6843,7 +6848,7 @@ _bfd_elf_ppc_at_tls_transform (unsigned
 {
   unsigned int rtra;
 
-  if ((insn & (0x3f << 26)) != 31 << 26)
+  if ((insn & (0x3fu << 26)) != 31 << 26)
     return 0;
 
   if (reg == 0 || ((insn >> 11) & 0x1f) == reg)
@@ -6861,13 +6866,13 @@ _bfd_elf_ppc_at_tls_transform (unsigned
 	       || ((insn & (0x1f << 6)) >= 16 << 6
 		   && (insn & (0x1f << 6)) < 24 << 6)))
     /* load and store indexed -> dform.  */
-    insn = (32 | ((insn >> 6) & 0x1f)) << 26;
+    insn = (32u | ((insn >> 6) & 0x1f)) << 26;
   else if ((insn & (((0x1a << 5) | 0x1f) << 1)) == 21 << 1)
     /* ldx, ldux, stdx, stdux -> ld, ldu, std, stdu.  */
-    insn = ((58 | ((insn >> 6) & 4)) << 26) | ((insn >> 6) & 1);
+    insn = ((58u | ((insn >> 6) & 4)) << 26) | ((insn >> 6) & 1);
   else if ((insn & (((0x1f << 5) | 0x1f) << 1)) == 341 << 1)
     /* lwax -> lwa.  */
-    insn = (58 << 26) | 2;
+    insn = (58u << 26) | 2;
   else
     return 0;
   insn |= rtra;
@@ -6882,36 +6887,36 @@ unsigned int
 _bfd_elf_ppc_at_tprel_transform (unsigned int insn, unsigned int reg)
 {
   if ((insn & (0x1f << 16)) == reg << 16
-      && ((insn & (0x3f << 26)) == 14u << 26 /* addi */
-	  || (insn & (0x3f << 26)) == 15u << 26 /* addis */
-	  || (insn & (0x3f << 26)) == 32u << 26 /* lwz */
-	  || (insn & (0x3f << 26)) == 34u << 26 /* lbz */
-	  || (insn & (0x3f << 26)) == 36u << 26 /* stw */
-	  || (insn & (0x3f << 26)) == 38u << 26 /* stb */
-	  || (insn & (0x3f << 26)) == 40u << 26 /* lhz */
-	  || (insn & (0x3f << 26)) == 42u << 26 /* lha */
-	  || (insn & (0x3f << 26)) == 44u << 26 /* sth */
-	  || (insn & (0x3f << 26)) == 46u << 26 /* lmw */
-	  || (insn & (0x3f << 26)) == 47u << 26 /* stmw */
-	  || (insn & (0x3f << 26)) == 48u << 26 /* lfs */
-	  || (insn & (0x3f << 26)) == 50u << 26 /* lfd */
-	  || (insn & (0x3f << 26)) == 52u << 26 /* stfs */
-	  || (insn & (0x3f << 26)) == 54u << 26 /* stfd */
-	  || ((insn & (0x3f << 26)) == 58u << 26 /* lwa,ld,lmd */
+      && ((insn & (0x3fu << 26)) == 14u << 26 /* addi */
+	  || (insn & (0x3fu << 26)) == 15u << 26 /* addis */
+	  || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */
+	  || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */
+	  || (insn & (0x3fu << 26)) == 36u << 26 /* stw */
+	  || (insn & (0x3fu << 26)) == 38u << 26 /* stb */
+	  || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */
+	  || (insn & (0x3fu << 26)) == 42u << 26 /* lha */
+	  || (insn & (0x3fu << 26)) == 44u << 26 /* sth */
+	  || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */
+	  || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */
+	  || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */
+	  || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */
+	  || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */
+	  || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */
+	  || ((insn & (0x3fu << 26)) == 58u << 26 /* lwa,ld,lmd */
 	      && (insn & 3) != 1)
-	  || ((insn & (0x3f << 26)) == 62u << 26 /* std, stmd */
+	  || ((insn & (0x3fu << 26)) == 62u << 26 /* std, stmd */
 	      && ((insn & 3) == 0 || (insn & 3) == 3))))
     {
       insn &= ~(0x1f << 16);
     }
   else if ((insn & (0x1f << 21)) == reg << 21
-	   && ((insn & (0x3e << 26)) == 24u << 26 /* ori, oris */
-	       || (insn & (0x3e << 26)) == 26u << 26 /* xori,xoris */
-	       || (insn & (0x3e << 26)) == 28u << 26 /* andi,andis */))
+	   && ((insn & (0x3eu << 26)) == 24u << 26 /* ori, oris */
+	       || (insn & (0x3eu << 26)) == 26u << 26 /* xori,xoris */
+	       || (insn & (0x3eu << 26)) == 28u << 26 /* andi,andis */))
     {
       insn &= ~(0x1f << 21);
       insn |= (insn & (0x1f << 16)) << 5;
-      if ((insn & (0x3e << 26)) == 26 << 26 /* xori,xoris */)
+      if ((insn & (0x3eu << 26)) == 26u << 26 /* xori,xoris */)
 	insn -= 2 >> 26;  /* convert to ori,oris */
     }
   else
@@ -6919,23 +6924,40 @@ _bfd_elf_ppc_at_tprel_transform (unsigne
   return insn;
 }
 
-static bfd_boolean
+static bool
 is_insn_ds_form (unsigned int insn)
 {
-  return ((insn & (0x3f << 26)) == 58u << 26 /* ld,ldu,lwa */
-	  || (insn & (0x3f << 26)) == 62u << 26 /* std,stdu,stq */
-	  || (insn & (0x3f << 26)) == 57u << 26 /* lfdp */
-	  || (insn & (0x3f << 26)) == 61u << 26 /* stfdp */);
+  return ((insn & (0x3fu << 26)) == 58u << 26 /* ld,ldu,lwa */
+	  || (insn & (0x3fu << 26)) == 62u << 26 /* std,stdu,stq */
+	  || (insn & (0x3fu << 26)) == 57u << 26 /* lfdp */
+	  || (insn & (0x3fu << 26)) == 61u << 26 /* stfdp */);
 }
 
-static bfd_boolean
+static bool
 is_insn_dq_form (unsigned int insn)
 {
-  return ((insn & (0x3f << 26)) == 56u << 26 /* lq */
-	  || ((insn & (0x3f << 26)) == (61u << 26) /* lxv, stxv */
+  return ((insn & (0x3fu << 26)) == 56u << 26 /* lq */
+	  || ((insn & (0x3fu << 26)) == (61u << 26) /* lxv, stxv */
 	      && (insn & 3) == 1));
 }
 
+static bool
+swap_reloc_out (bfd *obfd, Elf_Internal_Rela *rel, bfd_byte *loc, asection *s)
+{
+  if ((size_t) (loc - s->contents) >= s->size)
+    return false;
+  bfd_elf32_swap_reloca_out (obfd, rel, loc);
+  return true;
+}
+
+static bool
+count_and_swap_reloc_out (bfd *obfd, Elf_Internal_Rela *rel, asection *s)
+{
+  bfd_byte *loc = s->contents;
+  loc += s->reloc_count++ * sizeof (Elf32_External_Rela);
+  return swap_reloc_out (obfd, rel, loc, s);
+}
+
 /* The RELOCATE_SECTION function is called by the ELF backend linker
    to handle the relocations for a section.
 
@@ -6965,7 +6987,7 @@ is_insn_dq_form (unsigned int insn)
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 ppc_elf_relocate_section (bfd *output_bfd,
 			  struct bfd_link_info *info,
 			  bfd *input_bfd,
@@ -6984,9 +7006,9 @@ ppc_elf_relocate_section (bfd *output_bf
   Elf_Internal_Rela outrel;
   asection *got2;
   bfd_vma *local_got_offsets;
-  bfd_boolean ret = TRUE;
+  bool ret = true;
   bfd_vma d_offset = (bfd_big_endian (input_bfd) ? 2 : 0);
-  bfd_boolean is_vxworks_tls;
+  bool is_vxworks_tls;
   unsigned int picfixup_size = 0;
   struct ppc_elf_relax_info *relax_info = NULL;
 
@@ -7001,7 +7023,7 @@ ppc_elf_relocate_section (bfd *output_bf
   if (!is_ppc_elf (input_bfd))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   got2 = bfd_get_section_by_name (input_bfd, ".got2");
@@ -7016,7 +7038,7 @@ ppc_elf_relocate_section (bfd *output_bf
   sym_hashes = elf_sym_hashes (input_bfd);
   /* We have to handle relocations in vxworks .tls_vars sections
      specially, because the dynamic loader is 'weird'.  */
-  is_vxworks_tls = (htab->is_vxworks && bfd_link_pic (info)
+  is_vxworks_tls = (htab->elf.target_os == is_vxworks && bfd_link_pic (info)
 		    && !strcmp (input_section->output_section->name,
 				".tls_vars"));
   if (input_section->sec_info_type == SEC_INFO_TYPE_TARGET)
@@ -7036,8 +7058,8 @@ ppc_elf_relocate_section (bfd *output_bf
       unsigned long r_symndx;
       bfd_vma relocation;
       bfd_vma branch_bit, from;
-      bfd_boolean unresolved_reloc, save_unresolved_reloc;
-      bfd_boolean warned;
+      bool unresolved_reloc, save_unresolved_reloc;
+      bool warned;
       unsigned int tls_type, tls_mask, tls_gd;
       struct plt_entry **ifunc, **plt_list;
       struct reloc_howto_struct alt_howto;
@@ -7047,8 +7069,8 @@ ppc_elf_relocate_section (bfd *output_bf
       sym = NULL;
       sec = NULL;
       h = NULL;
-      unresolved_reloc = FALSE;
-      warned = FALSE;
+      unresolved_reloc = false;
+      warned = false;
       r_symndx = ELF32_R_SYM (rel->r_info);
 
       if (r_symndx < symtab_hdr->sh_info)
@@ -7061,7 +7083,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	}
       else
 	{
-	  bfd_boolean ignored;
+	  bool ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -7149,7 +7171,8 @@ ppc_elf_relocate_section (bfd *output_bf
 	case R_PPC_GOT_TPREL16:
 	case R_PPC_GOT_TPREL16_LO:
 	  if ((tls_mask & TLS_TLS) != 0
-	      && (tls_mask & TLS_TPREL) == 0)
+	      && (tls_mask & TLS_TPREL) == 0
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    {
 	      bfd_vma insn;
 
@@ -7166,7 +7189,8 @@ ppc_elf_relocate_section (bfd *output_bf
 
 	case R_PPC_TLS:
 	  if ((tls_mask & TLS_TLS) != 0
-	      && (tls_mask & TLS_TPREL) == 0)
+	      && (tls_mask & TLS_TPREL) == 0
+	      && offset_in_range (input_section, rel->r_offset, 4))
 	    {
 	      bfd_vma insn;
 
@@ -7187,13 +7211,15 @@ ppc_elf_relocate_section (bfd *output_bf
 	case R_PPC_GOT_TLSGD16_HI:
 	case R_PPC_GOT_TLSGD16_HA:
 	  tls_gd = TLS_GDIE;
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    goto tls_gdld_hi;
 	  break;
 
 	case R_PPC_GOT_TLSLD16_HI:
 	case R_PPC_GOT_TLSLD16_HA:
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    {
 	    tls_gdld_hi:
 	      if ((tls_mask & tls_gd) != 0)
@@ -7212,13 +7238,15 @@ ppc_elf_relocate_section (bfd *output_bf
 	case R_PPC_GOT_TLSGD16:
 	case R_PPC_GOT_TLSGD16_LO:
 	  tls_gd = TLS_GDIE;
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    goto tls_ldgd_opt;
 	  break;
 
 	case R_PPC_GOT_TLSLD16:
 	case R_PPC_GOT_TLSLD16_LO:
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    {
 	      unsigned int insn1, insn2;
 	      bfd_vma offset;
@@ -7245,8 +7273,9 @@ ppc_elf_relocate_section (bfd *output_bf
 		{
 		  /* IE */
 		  insn1 &= (0x1f << 21) | (0x1f << 16);
-		  insn1 |= 32 << 26;	/* lwz */
-		  if (offset != (bfd_vma) -1)
+		  insn1 |= 32u << 26;	/* lwz */
+		  if (offset != (bfd_vma) -1
+		      && offset_in_range (input_section, offset, 4))
 		    {
 		      rel[1].r_info = ELF32_R_INFO (STN_UNDEF, R_PPC_NONE);
 		      insn2 = 0x7c631214;	/* add 3,3,2 */
@@ -7279,7 +7308,8 @@ ppc_elf_relocate_section (bfd *output_bf
 		    }
 		  r_type = R_PPC_TPREL16_HA;
 		  rel->r_info = ELF32_R_INFO (r_symndx, r_type);
-		  if (offset != (bfd_vma) -1)
+		  if (offset != (bfd_vma) -1
+		      && offset_in_range (input_section, offset, 4))
 		    {
 		      rel[1].r_info = ELF32_R_INFO (r_symndx, R_PPC_TPREL16_LO);
 		      rel[1].r_offset = offset + d_offset;
@@ -7301,7 +7331,8 @@ ppc_elf_relocate_section (bfd *output_bf
 
 	case R_PPC_TLSGD:
 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
-	      && rel + 1 < relend)
+	      && rel + 1 < relend
+	      && offset_in_range (input_section, rel->r_offset, 4))
 	    {
 	      unsigned int insn2;
 	      bfd_vma offset = rel->r_offset;
@@ -7336,7 +7367,8 @@ ppc_elf_relocate_section (bfd *output_bf
 
 	case R_PPC_TLSLD:
 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
-	      && rel + 1 < relend)
+	      && rel + 1 < relend
+	      && offset_in_range (input_section, rel->r_offset, 4))
 	    {
 	      unsigned int insn2;
 
@@ -7389,48 +7421,50 @@ ppc_elf_relocate_section (bfd *output_bf
 	  /* Branch not taken prediction relocations.  */
 	case R_PPC_ADDR14_BRNTAKEN:
 	case R_PPC_REL14_BRNTAKEN:
-	  {
-	    unsigned int insn;
-
-	    insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
-	    insn &= ~BRANCH_PREDICT_BIT;
-	    insn |= branch_bit;
+	  if (offset_in_range (input_section, rel->r_offset, 4))
+	    {
+	      unsigned int insn;
 
-	    from = (rel->r_offset
-		    + input_section->output_offset
-		    + input_section->output_section->vma);
+	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
+	      insn &= ~BRANCH_PREDICT_BIT;
+	      insn |= branch_bit;
 
-	    /* Invert 'y' bit if not the default.  */
-	    if ((bfd_signed_vma) (relocation + rel->r_addend - from) < 0)
-	      insn ^= BRANCH_PREDICT_BIT;
+	      from = (rel->r_offset
+		      + input_section->output_offset
+		      + input_section->output_section->vma);
+
+	      /* Invert 'y' bit if not the default.  */
+	      if ((bfd_signed_vma) (relocation + rel->r_addend - from) < 0)
+		insn ^= BRANCH_PREDICT_BIT;
 
-	    bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
-	  }
+	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
+	    }
 	  break;
 
 	case R_PPC_PLT16_HA:
-	  {
-	    unsigned int insn;
+	  if (offset_in_range (input_section, rel->r_offset - d_offset, 4))
+	    {
+	      unsigned int insn;
 
-	    insn = bfd_get_32 (input_bfd,
-			       contents + rel->r_offset - d_offset);
-	    if ((insn & (0x3f << 26)) == 15u << 26
-		&& (insn & (0x1f << 16)) != 0)
-	      {
-		if (!bfd_link_pic (info))
-		  {
-		    /* Convert addis to lis.  */
-		    insn &= ~(0x1f << 16);
-		    bfd_put_32 (input_bfd, insn,
-				contents + rel->r_offset - d_offset);
-		  }
-	      }
-	    else if (bfd_link_pic (info))
-	      info->callbacks->einfo
-		(_("%P: %H: error: %s with unexpected instruction %x\n"),
-		 input_bfd, input_section, rel->r_offset,
-		 "R_PPC_PLT16_HA", insn);
-	  }
+	      insn = bfd_get_32 (input_bfd,
+				 contents + rel->r_offset - d_offset);
+	      if ((insn & (0x3fu << 26)) == 15u << 26
+		  && (insn & (0x1f << 16)) != 0)
+		{
+		  if (!bfd_link_pic (info))
+		    {
+		      /* Convert addis to lis.  */
+		      insn &= ~(0x1f << 16);
+		      bfd_put_32 (input_bfd, insn,
+				  contents + rel->r_offset - d_offset);
+		    }
+		}
+	      else if (bfd_link_pic (info))
+		info->callbacks->einfo
+		  (_("%P: %H: error: %s with unexpected instruction %x\n"),
+		   input_bfd, input_section, rel->r_offset,
+		   "R_PPC_PLT16_HA", insn);
+	    }
 	  break;
 	}
 
@@ -7446,11 +7480,12 @@ ppc_elf_relocate_section (bfd *output_bf
 	     variable defined in a shared library to PIC.  */
 	  unsigned int insn;
 
-	  if (r_type == R_PPC_ADDR16_HA)
+	  if (r_type == R_PPC_ADDR16_HA
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    {
 	      insn = bfd_get_32 (input_bfd,
 				 contents + rel->r_offset - d_offset);
-	      if ((insn & (0x3f << 26)) == (15u << 26)
+	      if ((insn & (0x3fu << 26)) == (15u << 26)
 		  && (insn & (0x1f << 16)) == 0 /* lis */)
 		{
 		  bfd_byte *p;
@@ -7509,32 +7544,34 @@ ppc_elf_relocate_section (bfd *output_bf
 		   input_bfd, input_section, (uint64_t) rel->r_offset,
 		   "R_PPC_ADDR16_HA", insn);
 	    }
-	  else if (r_type == R_PPC_ADDR16_LO)
+	  else if (r_type == R_PPC_ADDR16_LO
+		   && offset_in_range (input_section,
+				       rel->r_offset - d_offset, 4))
 	    {
 	      insn = bfd_get_32 (input_bfd,
 				 contents + rel->r_offset - d_offset);
-	      if ((insn & (0x3f << 26)) == 14u << 26    /* addi */
-		  || (insn & (0x3f << 26)) == 32u << 26 /* lwz */
-		  || (insn & (0x3f << 26)) == 34u << 26 /* lbz */
-		  || (insn & (0x3f << 26)) == 36u << 26 /* stw */
-		  || (insn & (0x3f << 26)) == 38u << 26 /* stb */
-		  || (insn & (0x3f << 26)) == 40u << 26 /* lhz */
-		  || (insn & (0x3f << 26)) == 42u << 26 /* lha */
-		  || (insn & (0x3f << 26)) == 44u << 26 /* sth */
-		  || (insn & (0x3f << 26)) == 46u << 26 /* lmw */
-		  || (insn & (0x3f << 26)) == 47u << 26 /* stmw */
-		  || (insn & (0x3f << 26)) == 48u << 26 /* lfs */
-		  || (insn & (0x3f << 26)) == 50u << 26 /* lfd */
-		  || (insn & (0x3f << 26)) == 52u << 26 /* stfs */
-		  || (insn & (0x3f << 26)) == 54u << 26 /* stfd */
-		  || ((insn & (0x3f << 26)) == 58u << 26 /* lwa,ld,lmd */
+	      if ((insn & (0x3fu << 26)) == 14u << 26    /* addi */
+		  || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */
+		  || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */
+		  || (insn & (0x3fu << 26)) == 36u << 26 /* stw */
+		  || (insn & (0x3fu << 26)) == 38u << 26 /* stb */
+		  || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */
+		  || (insn & (0x3fu << 26)) == 42u << 26 /* lha */
+		  || (insn & (0x3fu << 26)) == 44u << 26 /* sth */
+		  || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */
+		  || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */
+		  || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */
+		  || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */
+		  || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */
+		  || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */
+		  || ((insn & (0x3fu << 26)) == 58u << 26 /* lwa,ld,lmd */
 		      && (insn & 3) != 1)
-		  || ((insn & (0x3f << 26)) == 62u << 26 /* std, stmd */
+		  || ((insn & (0x3fu << 26)) == 62u << 26 /* std, stmd */
 		      && ((insn & 3) == 0 || (insn & 3) == 3)))
 		{
 		  /* Arrange to apply the reloc addend, if any.  */
 		  relocation = 0;
-		  unresolved_reloc = FALSE;
+		  unresolved_reloc = false;
 		  rel->r_info = ELF32_R_INFO (0, r_type);
 		}
 	      else
@@ -7548,7 +7585,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	}
 
       ifunc = NULL;
-      if (!htab->is_vxworks)
+      if (htab->elf.target_os != is_vxworks)
 	{
 	  struct plt_entry *ent;
 
@@ -7608,7 +7645,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		       input_bfd, input_section, rel->r_offset, sym_name);
 		}
 
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	      if (htab->plt_type == PLT_NEW
 		  || !htab->elf.dynamic_sections_created
 		  || h == NULL
@@ -7629,49 +7666,22 @@ ppc_elf_relocate_section (bfd *output_bf
       if (r_type < R_PPC_max)
 	howto = ppc_elf_howto_table[r_type];
 
-      switch (r_type)
-	{
-	default:
-	  break;
-
-	case R_PPC_TPREL16_HA:
-	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
-	    {
-	      bfd_byte *p = contents + (rel->r_offset & ~3);
-	      unsigned int insn = bfd_get_32 (input_bfd, p);
-	      if ((insn & ((0x3f << 26) | 0x1f << 16))
-		  != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */)
-		/* xgettext:c-format */
-		info->callbacks->minfo
-		  (_("%H: warning: %s unexpected insn %#x.\n"),
-		   input_bfd, input_section, rel->r_offset, howto->name, insn);
-	      else
-		bfd_put_32 (input_bfd, NOP, p);
-	    }
-	  break;
-
-	case R_PPC_TPREL16_LO:
-	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
-	    {
-	      bfd_byte *p = contents + (rel->r_offset & ~3);
-	      unsigned int insn = bfd_get_32 (input_bfd, p);
-	      insn &= ~(0x1f << 16);
-	      insn |= 2 << 16;
-	      bfd_put_32 (input_bfd, insn, p);
-	    }
-	  break;
-	}
-
       tls_type = 0;
       switch (r_type)
 	{
 	default:
-	  /* xgettext:c-format */
-	  _bfd_error_handler (_("%pB: %s unsupported"),
-			      input_bfd, howto->name);
+	de_fault:
+	  if (howto)
+	    /* xgettext:c-format */
+	    _bfd_error_handler (_("%pB: %s unsupported"),
+				input_bfd, howto->name);
+	  else
+	    /* xgettext:c-format */
+	    _bfd_error_handler (_("%pB: reloc %#x unsupported"),
+				input_bfd, r_type);
 
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	  goto copy_reloc;
 
 	case R_PPC_NONE:
@@ -7749,7 +7759,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		else
 		  {
 		    indx = h->dynindx;
-		    unresolved_reloc = FALSE;
+		    unresolved_reloc = false;
 		  }
 		offp = &h->got.offset;
 	      }
@@ -7813,10 +7823,12 @@ ppc_elf_relocate_section (bfd *output_bf
 				|| !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
 			    && !(tls_ty != 0
 				 && bfd_link_executable (info)
-				 && SYMBOL_REFERENCES_LOCAL (info, h))))
+				 && SYMBOL_REFERENCES_LOCAL (info, h))
+			    && (h != NULL
+				? !bfd_is_abs_symbol (&h->root)
+				: sym->st_shndx != SHN_ABS)))
 		      {
 			asection *rsec = htab->elf.srelgot;
-			bfd_byte * loc;
 
 			if (ifunc != NULL)
 			  {
@@ -7835,11 +7847,9 @@ ppc_elf_relocate_section (bfd *output_bf
 			    outrel.r_info = ELF32_R_INFO (indx, R_PPC_DTPMOD32);
 			    if (tls_ty == (TLS_TLS | TLS_GD))
 			      {
-				loc = rsec->contents;
-				loc += (rsec->reloc_count++
-					* sizeof (Elf32_External_Rela));
-				bfd_elf32_swap_reloca_out (output_bfd,
-							   &outrel, loc);
+				BFD_ASSERT (count_and_swap_reloc_out (output_bfd,
+								      &outrel,
+								      rsec));
 				outrel.r_offset += 4;
 				outrel.r_info
 				  = ELF32_R_INFO (indx, R_PPC_DTPREL32);
@@ -7866,10 +7876,8 @@ ppc_elf_relocate_section (bfd *output_bf
 				  outrel.r_addend -= htab->elf.tls_sec->vma;
 			      }
 			  }
-			loc = rsec->contents;
-			loc += (rsec->reloc_count++
-				* sizeof (Elf32_External_Rela));
-			bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
+			BFD_ASSERT (count_and_swap_reloc_out (output_bfd,
+							      &outrel, rsec));
 		      }
 
 		    /* Init the .got section contents if we're not
@@ -7970,7 +7978,7 @@ ppc_elf_relocate_section (bfd *output_bf
 						    input_bfd,
 						    input_section,
 						    rel->r_offset,
-						    TRUE);
+						    true);
 	      goto copy_reloc;
 	    }
 	  if (h != NULL && h->type == STT_GNU_IFUNC && bfd_link_pic (info))
@@ -8006,7 +8014,8 @@ ppc_elf_relocate_section (bfd *output_bf
 	case R_PPC_TPREL16_HA:
 	  if (h != NULL
 	      && h->root.type == bfd_link_hash_undefweak
-	      && h->dynindx == -1)
+	      && h->dynindx == -1
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    {
 	      /* Make this relocation against an undefined weak symbol
 		 resolve to zero.  This is really just a tweak, since
@@ -8091,14 +8100,13 @@ ppc_elf_relocate_section (bfd *output_bf
 
 	  if (bfd_link_pic (info)
 	      ? ((h == NULL
-		  || ppc_elf_hash_entry (h)->dyn_relocs != NULL)
+		  || h->dyn_relocs != NULL)
 		 && ((h != NULL && pc_dynrelocs (h))
 		     || must_be_dyn_reloc (info, r_type)))
 	      : (h != NULL
-		 && ppc_elf_hash_entry (h)->dyn_relocs != NULL))
+		 && h->dyn_relocs != NULL))
 	    {
 	      int skip;
-	      bfd_byte *loc;
 	      asection *sreloc;
 	      long indx = 0;
 
@@ -8136,7 +8144,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		{
 		  indx = h->dynindx;
 		  BFD_ASSERT (indx != -1);
-		  unresolved_reloc = FALSE;
+		  unresolved_reloc = false;
 		  outrel.r_info = ELF32_R_INFO (indx, r_type);
 		  outrel.r_addend = rel->r_addend;
 		}
@@ -8167,14 +8175,14 @@ ppc_elf_relocate_section (bfd *output_bf
 			     input_bfd, input_section, rel->r_offset,
 			     howto->name,
 			     sym_name);
-			  ret = FALSE;
+			  ret = false;
 			}
 		      else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
 			;
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  ret = FALSE;
+			  ret = false;
 			}
 		      else
 			{
@@ -8228,11 +8236,10 @@ ppc_elf_relocate_section (bfd *output_bf
 		    htab->maybe_local_ifunc_resolver = 1;
 		}
 	      if (sreloc == NULL)
-		return FALSE;
+		return false;
 
-	      loc = sreloc->contents;
-	      loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
-	      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
+	      BFD_ASSERT (count_and_swap_reloc_out (output_bfd, &outrel,
+						    sreloc));
 
 	      if (skip == -1)
 		goto copy_reloc;
@@ -8274,66 +8281,73 @@ ppc_elf_relocate_section (bfd *output_bf
 	  /* Fall through.  */
 
 	case R_PPC_RELAX:
-	  {
-	    const int *stub;
-	    size_t size;
-	    size_t insn_offset = rel->r_offset;
-	    unsigned int insn;
-
-	    if (bfd_link_pic (info))
-	      {
-		relocation -= (input_section->output_section->vma
-			       + input_section->output_offset
-			       + rel->r_offset - 4);
-		stub = shared_stub_entry;
-		bfd_put_32 (input_bfd, stub[0], contents + insn_offset - 12);
-		bfd_put_32 (input_bfd, stub[1], contents + insn_offset - 8);
-		bfd_put_32 (input_bfd, stub[2], contents + insn_offset - 4);
-		stub += 3;
-		size = ARRAY_SIZE (shared_stub_entry) - 3;
-	      }
-	    else
-	      {
-		stub = stub_entry;
-		size = ARRAY_SIZE (stub_entry);
-	      }
+	  if (bfd_link_pic (info)
+	      ? offset_in_range (input_section, rel->r_offset - 12,
+				 ARRAY_SIZE (shared_stub_entry) * 4)
+	      : offset_in_range (input_section, rel->r_offset,
+				 ARRAY_SIZE (stub_entry) * 4))
+	    {
+	      const int *stub;
+	      size_t size;
+	      size_t insn_offset = rel->r_offset;
+	      unsigned int insn;
 
-	    relocation += addend;
-	    if (bfd_link_relocatable (info))
-	      relocation = 0;
-
-	    /* First insn is HA, second is LO.  */
-	    insn = *stub++;
-	    insn |= ((relocation + 0x8000) >> 16) & 0xffff;
-	    bfd_put_32 (input_bfd, insn, contents + insn_offset);
-	    insn_offset += 4;
-
-	    insn = *stub++;
-	    insn |= relocation & 0xffff;
-	    bfd_put_32 (input_bfd, insn, contents + insn_offset);
-	    insn_offset += 4;
-	    size -= 2;
+	      if (bfd_link_pic (info))
+		{
+		  relocation -= (input_section->output_section->vma
+				 + input_section->output_offset
+				 + rel->r_offset - 4);
+		  stub = shared_stub_entry;
+		  bfd_put_32 (input_bfd, stub[0], contents + insn_offset - 12);
+		  bfd_put_32 (input_bfd, stub[1], contents + insn_offset - 8);
+		  bfd_put_32 (input_bfd, stub[2], contents + insn_offset - 4);
+		  stub += 3;
+		  size = ARRAY_SIZE (shared_stub_entry) - 3;
+		}
+	      else
+		{
+		  stub = stub_entry;
+		  size = ARRAY_SIZE (stub_entry);
+		}
 
-	    while (size != 0)
-	      {
-		insn = *stub++;
-		--size;
-		bfd_put_32 (input_bfd, insn, contents + insn_offset);
-		insn_offset += 4;
-	      }
+	      relocation += addend;
+	      if (bfd_link_relocatable (info))
+		relocation = 0;
 
-	    /* Rewrite the reloc and convert one of the trailing nop
-	       relocs to describe this relocation.  */
-	    BFD_ASSERT (ELF32_R_TYPE (relend[-1].r_info) == R_PPC_NONE);
-	    /* The relocs are at the bottom 2 bytes */
-	    wrel->r_offset = rel->r_offset + d_offset;
-	    wrel->r_info = ELF32_R_INFO (r_symndx, R_PPC_ADDR16_HA);
-	    wrel->r_addend = rel->r_addend;
-	    memmove (wrel + 1, wrel, (relend - wrel - 1) * sizeof (*wrel));
-	    wrel++, rel++;
-	    wrel->r_offset += 4;
-	    wrel->r_info = ELF32_R_INFO (r_symndx, R_PPC_ADDR16_LO);
-	  }
+	      /* First insn is HA, second is LO.  */
+	      insn = *stub++;
+	      insn |= ((relocation + 0x8000) >> 16) & 0xffff;
+	      bfd_put_32 (input_bfd, insn, contents + insn_offset);
+	      insn_offset += 4;
+
+	      insn = *stub++;
+	      insn |= relocation & 0xffff;
+	      bfd_put_32 (input_bfd, insn, contents + insn_offset);
+	      insn_offset += 4;
+	      size -= 2;
+
+	      while (size != 0)
+		{
+		  insn = *stub++;
+		  --size;
+		  bfd_put_32 (input_bfd, insn, contents + insn_offset);
+		  insn_offset += 4;
+		}
+
+	      /* Rewrite the reloc and convert one of the trailing nop
+		 relocs to describe this relocation.  */
+	      BFD_ASSERT (ELF32_R_TYPE (relend[-1].r_info) == R_PPC_NONE);
+	      /* The relocs are at the bottom 2 bytes */
+	      wrel->r_offset = rel->r_offset + d_offset;
+	      wrel->r_info = ELF32_R_INFO (r_symndx, R_PPC_ADDR16_HA);
+	      wrel->r_addend = rel->r_addend;
+	      memmove (wrel + 1, wrel, (relend - wrel - 1) * sizeof (*wrel));
+	      wrel++, rel++;
+	      wrel->r_offset += 4;
+	      wrel->r_info = ELF32_R_INFO (r_symndx, R_PPC_ADDR16_LO);
+	    }
+	  else
+	    goto de_fault;
 	  continue;
 
 	  /* Indirect .sdata relocation.  */
@@ -8341,7 +8355,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	  BFD_ASSERT (htab->sdata[0].section != NULL);
 	  if (!is_static_defined (htab->sdata[0].sym))
 	    {
-	      unresolved_reloc = TRUE;
+	      unresolved_reloc = true;
 	      break;
 	    }
 	  relocation
@@ -8355,7 +8369,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	  BFD_ASSERT (htab->sdata[1].section != NULL);
 	  if (!is_static_defined (htab->sdata[1].sym))
 	    {
-	      unresolved_reloc = TRUE;
+	      unresolved_reloc = true;
 	      break;
 	    }
 	  relocation
@@ -8371,7 +8385,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	case R_PPC_TOC16:			/* phony GOT16 relocations */
 	  if (sec == NULL || sec->output_section == NULL)
 	    {
-	      unresolved_reloc = TRUE;
+	      unresolved_reloc = true;
 	      break;
 	    }
 	  BFD_ASSERT (strcmp (bfd_section_name (sec), ".got") == 0
@@ -8398,7 +8412,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		{
 		  /* Relocation is to the entry for this symbol in the
 		     procedure linkage table.  */
-		  unresolved_reloc = FALSE;
+		  unresolved_reloc = false;
 		  if (htab->plt_type == PLT_NEW)
 		    relocation = (htab->glink->output_section->vma
 				  + htab->glink->output_offset
@@ -8433,7 +8447,7 @@ ppc_elf_relocate_section (bfd *output_bf
 						 + symtab_hdr->sh_info);
 	      plt_list = local_plt + r_symndx;
 	    }
-	  unresolved_reloc = TRUE;
+	  unresolved_reloc = true;
 	  if (plt_list != NULL)
 	    {
 	      struct plt_entry *ent;
@@ -8444,11 +8458,9 @@ ppc_elf_relocate_section (bfd *output_bf
 		{
 		  asection *plt;
 
-		  unresolved_reloc = FALSE;
+		  unresolved_reloc = false;
 		  plt = htab->elf.splt;
-		  if (!htab->elf.dynamic_sections_created
-		      || h == NULL
-		      || h->dynindx == -1)
+		  if (use_local_plt (info, h))
 		    {
 		      if (ifunc != NULL)
 			plt = htab->elf.iplt;
@@ -8485,7 +8497,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		|| sec->output_section == NULL
 		|| !is_static_defined (sda))
 	      {
-		unresolved_reloc = TRUE;
+		unresolved_reloc = true;
 		break;
 	      }
 	    addend -= SYM_VAL (sda);
@@ -8516,7 +8528,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		|| sec->output_section == NULL
 		|| !is_static_defined (sda))
 	      {
-		unresolved_reloc = TRUE;
+		unresolved_reloc = true;
 		break;
 	      }
 	    addend -= SYM_VAL (sda);
@@ -8539,151 +8551,164 @@ ppc_elf_relocate_section (bfd *output_bf
 
 	case R_PPC_VLE_LO16A:
 	  relocation = relocation + addend;
-	  ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-			       contents + rel->r_offset, relocation,
-			       split16a_type, htab->params->vle_reloc_fixup);
-	  goto copy_reloc;
+	  r = ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
+				   contents + rel->r_offset, relocation,
+				   split16a_type,
+				   htab->params->vle_reloc_fixup);
+	  goto report_reloc;
 
 	case R_PPC_VLE_LO16D:
 	  relocation = relocation + addend;
-	  ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-			       contents + rel->r_offset, relocation,
-			       split16d_type, htab->params->vle_reloc_fixup);
-	  goto copy_reloc;
+	  r = ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
+				   contents + rel->r_offset, relocation,
+				   split16d_type,
+				   htab->params->vle_reloc_fixup);
+	  goto report_reloc;
 
 	case R_PPC_VLE_HI16A:
 	  relocation = (relocation + addend) >> 16;
-	  ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-			       contents + rel->r_offset, relocation,
-			       split16a_type, htab->params->vle_reloc_fixup);
-	  goto copy_reloc;
+	  r = ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
+				   contents + rel->r_offset, relocation,
+				   split16a_type,
+				   htab->params->vle_reloc_fixup);
+	  goto report_reloc;
 
 	case R_PPC_VLE_HI16D:
 	  relocation = (relocation + addend) >> 16;
-	  ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-			       contents + rel->r_offset, relocation,
-			       split16d_type, htab->params->vle_reloc_fixup);
-	  goto copy_reloc;
+	  r = ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
+				   contents + rel->r_offset, relocation,
+				   split16d_type,
+				   htab->params->vle_reloc_fixup);
+	  goto report_reloc;
 
 	case R_PPC_VLE_HA16A:
 	  relocation = (relocation + addend + 0x8000) >> 16;
-	  ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-			       contents + rel->r_offset, relocation,
-			       split16a_type, htab->params->vle_reloc_fixup);
-	  goto copy_reloc;
+	  r = ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
+				   contents + rel->r_offset, relocation,
+				   split16a_type,
+				   htab->params->vle_reloc_fixup);
+	  goto report_reloc;
 
 	case R_PPC_VLE_HA16D:
 	  relocation = (relocation + addend + 0x8000) >> 16;
-	  ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-			       contents + rel->r_offset, relocation,
-			       split16d_type, htab->params->vle_reloc_fixup);
-	  goto copy_reloc;
+	  r = ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
+				   contents + rel->r_offset, relocation,
+				   split16d_type,
+				   htab->params->vle_reloc_fixup);
+	  goto report_reloc;
 
 	  /* Relocate against either _SDA_BASE_, _SDA2_BASE_, or 0.  */
 	case R_PPC_EMB_SDA21:
 	case R_PPC_VLE_SDA21:
 	case R_PPC_EMB_RELSDA:
 	case R_PPC_VLE_SDA21_LO:
-	  {
-	    const char *name;
-	    int reg;
-	    unsigned int insn;
-	    struct elf_link_hash_entry *sda = NULL;
+	  if (!offset_in_range (input_section, rel->r_offset, 4))
+	    {
+	      r = bfd_reloc_outofrange;
+	      goto report_reloc;
+	    }
+	  else
+	    {
+	      const char *name;
+	      int reg;
+	      unsigned int insn;
+	      struct elf_link_hash_entry *sda = NULL;
 
-	    if (sec == NULL || sec->output_section == NULL)
-	      {
-		unresolved_reloc = TRUE;
-		break;
-	      }
+	      if (sec == NULL || sec->output_section == NULL)
+		{
+		  unresolved_reloc = true;
+		  break;
+		}
 
-	    name = bfd_section_name (sec->output_section);
-	    if (strcmp (name, ".sdata") == 0
-		|| strcmp (name, ".sbss") == 0)
-	      {
-		reg = 13;
-		sda = htab->sdata[0].sym;
-	      }
-	    else if (strcmp (name, ".sdata2") == 0
-		     || strcmp (name, ".sbss2") == 0)
-	      {
-		reg = 2;
-		sda = htab->sdata[1].sym;
-	      }
-	    else if (strcmp (name, ".PPC.EMB.sdata0") == 0
-		     || strcmp (name, ".PPC.EMB.sbss0") == 0)
-	      {
-		reg = 0;
-	      }
-	    else
-	      {
-		_bfd_error_handler
-		  /* xgettext:c-format */
-		  (_("%pB: the target (%s) of a %s relocation is "
-		     "in the wrong output section (%s)"),
-		   input_bfd,
-		   sym_name,
-		   howto->name,
-		   name);
+	      name = bfd_section_name (sec->output_section);
+	      if (strcmp (name, ".sdata") == 0
+		  || strcmp (name, ".sbss") == 0)
+		{
+		  reg = 13;
+		  sda = htab->sdata[0].sym;
+		}
+	      else if (strcmp (name, ".sdata2") == 0
+		       || strcmp (name, ".sbss2") == 0)
+		{
+		  reg = 2;
+		  sda = htab->sdata[1].sym;
+		}
+	      else if (strcmp (name, ".PPC.EMB.sdata0") == 0
+		       || strcmp (name, ".PPC.EMB.sbss0") == 0)
+		{
+		  reg = 0;
+		}
+	      else
+		{
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB: the target (%s) of a %s relocation is "
+		       "in the wrong output section (%s)"),
+		     input_bfd,
+		     sym_name,
+		     howto->name,
+		     name);
+
+		  bfd_set_error (bfd_error_bad_value);
+		  ret = false;
+		  goto copy_reloc;
+		}
 
-		bfd_set_error (bfd_error_bad_value);
-		ret = FALSE;
-		goto copy_reloc;
-	      }
+	      if (sda != NULL)
+		{
+		  if (!is_static_defined (sda))
+		    {
+		      unresolved_reloc = true;
+		      break;
+		    }
+		  addend -= SYM_VAL (sda);
+		}
 
-	    if (sda != NULL)
-	      {
-		if (!is_static_defined (sda))
-		  {
-		    unresolved_reloc = TRUE;
-		    break;
-		  }
-		addend -= SYM_VAL (sda);
-	      }
+	      if (r_type == R_PPC_EMB_RELSDA)
+		break;
 
-	    if (r_type == R_PPC_EMB_RELSDA)
-	      break;
+	      /* The PowerPC Embedded Application Binary Interface
+		 version 1.0 insanely chose to specify R_PPC_EMB_SDA21
+		 operating on a 24-bit field at r_offset.  GNU as and
+		 GNU ld have always assumed R_PPC_EMB_SDA21 operates on
+		 a 32-bit bit insn at r_offset.  Cope with object file
+		 producers that possibly comply with the EABI in
+		 generating an odd r_offset for big-endian objects.  */
+	      if (r_type == R_PPC_EMB_SDA21)
+		rel->r_offset &= ~1;
 
-	    /* The PowerPC Embedded Application Binary Interface
-	       version 1.0 insanely chose to specify R_PPC_EMB_SDA21
-	       operating on a 24-bit field at r_offset.  GNU as and
-	       GNU ld have always assumed R_PPC_EMB_SDA21 operates on
-	       a 32-bit bit insn at r_offset.  Cope with object file
-	       producers that possibly comply with the EABI in
-	       generating an odd r_offset for big-endian objects.  */
-	    if (r_type == R_PPC_EMB_SDA21)
-	      rel->r_offset &= ~1;
-
-	    insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
-	    if (reg == 0
-		&& (r_type == R_PPC_VLE_SDA21
-		    || r_type == R_PPC_VLE_SDA21_LO))
-	      {
-		relocation = relocation + addend;
-		addend = 0;
+	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
+	      if (reg == 0
+		  && (r_type == R_PPC_VLE_SDA21
+		      || r_type == R_PPC_VLE_SDA21_LO))
+		{
+		  relocation = relocation + addend;
+		  addend = 0;
 
-		/* Force e_li insn, keeping RT from original insn.  */
-		insn &= 0x1f << 21;
-		insn |= 28u << 26;
-
-		/* We have an li20 field, bits 17..20, 11..15, 21..31.  */
-		/* Top 4 bits of value to 17..20.  */
-		insn |= (relocation & 0xf0000) >> 5;
-		/* Next 5 bits of the value to 11..15.  */
-		insn |= (relocation & 0xf800) << 5;
-		/* And the final 11 bits of the value to bits 21 to 31.  */
-		insn |= relocation & 0x7ff;
-
-		bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
-
-		if (r_type == R_PPC_VLE_SDA21
-		    && ((relocation + 0x80000) & 0xffffffff) > 0x100000)
-		  goto overflow;
-		goto copy_reloc;
-	      }
-	    /* Fill in register field.  */
-	    insn = (insn & ~RA_REGISTER_MASK) | (reg << RA_REGISTER_SHIFT);
-	    bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
-	  }
+		  /* Force e_li insn, keeping RT from original insn.  */
+		  insn &= 0x1f << 21;
+		  insn |= 28u << 26;
+
+		  /* We have an li20 field, bits 17..20, 11..15, 21..31.  */
+		  /* Top 4 bits of value to 17..20.  */
+		  insn |= (relocation & 0xf0000) >> 5;
+		  /* Next 5 bits of the value to 11..15.  */
+		  insn |= (relocation & 0xf800) << 5;
+		  /* And the final 11 bits of the value to bits 21 to 31.  */
+		  insn |= relocation & 0x7ff;
+
+		  bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
+
+		  r = bfd_reloc_ok;
+		  if (r_type == R_PPC_VLE_SDA21
+		      && ((relocation + 0x80000) & 0xffffffff) > 0x100000)
+		    r = bfd_reloc_overflow;
+		  goto report_reloc;
+		}
+	      /* Fill in register field.  */
+	      insn = (insn & ~RA_REGISTER_MASK) | (reg << RA_REGISTER_SHIFT);
+	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
+	    }
 	  break;
 
 	case R_PPC_VLE_SDAREL_LO16A:
@@ -8692,95 +8717,113 @@ ppc_elf_relocate_section (bfd *output_bf
 	case R_PPC_VLE_SDAREL_HI16D:
 	case R_PPC_VLE_SDAREL_HA16A:
 	case R_PPC_VLE_SDAREL_HA16D:
-	  {
-	    bfd_vma value;
-	    const char *name;
-	    struct elf_link_hash_entry *sda = NULL;
-
-	    if (sec == NULL || sec->output_section == NULL)
-	      {
-		unresolved_reloc = TRUE;
-		break;
-	      }
+	  if (!offset_in_range (input_section, rel->r_offset, 4))
+	    r = bfd_reloc_outofrange;
+	  else
+	    {
+	      bfd_vma value;
+	      const char *name;
+	      struct elf_link_hash_entry *sda = NULL;
 
-	    name = bfd_section_name (sec->output_section);
-	    if (strcmp (name, ".sdata") == 0
-		|| strcmp (name, ".sbss") == 0)
-	      sda = htab->sdata[0].sym;
-	    else if (strcmp (name, ".sdata2") == 0
-		     || strcmp (name, ".sbss2") == 0)
-	      sda = htab->sdata[1].sym;
-	    else
-	      {
-		_bfd_error_handler
-		  /* xgettext:c-format */
-		  (_("%pB: the target (%s) of a %s relocation is "
-		     "in the wrong output section (%s)"),
-		   input_bfd,
-		   sym_name,
-		   howto->name,
-		   name);
+	      if (sec == NULL || sec->output_section == NULL)
+		{
+		  unresolved_reloc = true;
+		  break;
+		}
 
-		bfd_set_error (bfd_error_bad_value);
-		ret = FALSE;
-		goto copy_reloc;
-	      }
+	      name = bfd_section_name (sec->output_section);
+	      if (strcmp (name, ".sdata") == 0
+		  || strcmp (name, ".sbss") == 0)
+		sda = htab->sdata[0].sym;
+	      else if (strcmp (name, ".sdata2") == 0
+		       || strcmp (name, ".sbss2") == 0)
+		sda = htab->sdata[1].sym;
+	      else
+		{
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB: the target (%s) of a %s relocation is "
+		       "in the wrong output section (%s)"),
+		     input_bfd,
+		     sym_name,
+		     howto->name,
+		     name);
+
+		  bfd_set_error (bfd_error_bad_value);
+		  ret = false;
+		  goto copy_reloc;
+		}
 
-	    if (sda == NULL || !is_static_defined (sda))
-	      {
-		unresolved_reloc = TRUE;
-		break;
-	      }
-	    value = relocation + addend - SYM_VAL (sda);
+	      if (sda == NULL || !is_static_defined (sda))
+		{
+		  unresolved_reloc = true;
+		  break;
+		}
+	      value = relocation + addend - SYM_VAL (sda);
 
-	    if (r_type == R_PPC_VLE_SDAREL_LO16A)
-	      ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-				   contents + rel->r_offset, value,
-				   split16a_type,
-				   htab->params->vle_reloc_fixup);
-	    else if (r_type == R_PPC_VLE_SDAREL_LO16D)
-	      ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-				   contents + rel->r_offset, value,
-				   split16d_type,
-				   htab->params->vle_reloc_fixup);
-	    else if (r_type == R_PPC_VLE_SDAREL_HI16A)
-	      {
-		value = value >> 16;
-		ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-				     contents + rel->r_offset, value,
-				     split16a_type,
-				     htab->params->vle_reloc_fixup);
-	      }
-	    else if (r_type == R_PPC_VLE_SDAREL_HI16D)
-	      {
-		value = value >> 16;
-		ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-				     contents + rel->r_offset, value,
-				     split16d_type,
-				     htab->params->vle_reloc_fixup);
-	      }
-	    else if (r_type == R_PPC_VLE_SDAREL_HA16A)
-	      {
-		value = (value + 0x8000) >> 16;
-		ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-				     contents + rel->r_offset, value,
-				     split16a_type,
-				     htab->params->vle_reloc_fixup);
-	      }
-	    else if (r_type == R_PPC_VLE_SDAREL_HA16D)
-	      {
-		value = (value + 0x8000) >> 16;
-		ppc_elf_vle_split16 (input_bfd, input_section, rel->r_offset,
-				     contents + rel->r_offset, value,
-				     split16d_type,
-				     htab->params->vle_reloc_fixup);
-	      }
-	  }
-	  goto copy_reloc;
+	      if (r_type == R_PPC_VLE_SDAREL_LO16A)
+		r = ppc_elf_vle_split16 (input_bfd, input_section,
+					 rel->r_offset,
+					 contents + rel->r_offset, value,
+					 split16a_type,
+					 htab->params->vle_reloc_fixup);
+	      else if (r_type == R_PPC_VLE_SDAREL_LO16D)
+		r = ppc_elf_vle_split16 (input_bfd, input_section,
+					 rel->r_offset,
+					 contents + rel->r_offset, value,
+					 split16d_type,
+					 htab->params->vle_reloc_fixup);
+	      else if (r_type == R_PPC_VLE_SDAREL_HI16A)
+		{
+		  value = value >> 16;
+		  r = ppc_elf_vle_split16 (input_bfd, input_section,
+					   rel->r_offset,
+					   contents + rel->r_offset, value,
+					   split16a_type,
+					   htab->params->vle_reloc_fixup);
+		}
+	      else if (r_type == R_PPC_VLE_SDAREL_HI16D)
+		{
+		  value = value >> 16;
+		  r = ppc_elf_vle_split16 (input_bfd, input_section,
+					   rel->r_offset,
+					   contents + rel->r_offset, value,
+					   split16d_type,
+					   htab->params->vle_reloc_fixup);
+		}
+	      else if (r_type == R_PPC_VLE_SDAREL_HA16A)
+		{
+		  value = (value + 0x8000) >> 16;
+		  r = ppc_elf_vle_split16 (input_bfd, input_section,
+					   rel->r_offset,
+					   contents + rel->r_offset, value,
+					   split16a_type,
+					   htab->params->vle_reloc_fixup);
+		}
+	      else if (r_type == R_PPC_VLE_SDAREL_HA16D)
+		{
+		  value = (value + 0x8000) >> 16;
+		  r = ppc_elf_vle_split16 (input_bfd, input_section,
+					   rel->r_offset,
+					   contents + rel->r_offset, value,
+					   split16d_type,
+					   htab->params->vle_reloc_fixup);
+		}
+	      else
+		abort ();
+	    }
+	  goto report_reloc;
 
 	case R_PPC_VLE_ADDR20:
-	  ppc_elf_vle_split20 (output_bfd, contents + rel->r_offset, relocation);
-	  continue;
+	  if (!offset_in_range (input_section, rel->r_offset, 4))
+	    r = bfd_reloc_outofrange;
+	  else
+	    {
+	      ppc_elf_vle_split20 (output_bfd, contents + rel->r_offset,
+				   relocation);
+	      r = bfd_reloc_ok;
+	    }
+	  goto report_reloc;
 
 	  /* Relocate against the beginning of the section.  */
 	case R_PPC_SECTOFF:
@@ -8789,7 +8832,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	case R_PPC_SECTOFF_HA:
 	  if (sec == NULL || sec->output_section == NULL)
 	    {
-	      unresolved_reloc = TRUE;
+	      unresolved_reloc = true;
 	      break;
 	    }
 	  addend -= sec->output_section->vma;
@@ -8822,7 +8865,7 @@ ppc_elf_relocate_section (bfd *output_bf
 			      input_bfd, howto->name);
 
 	  bfd_set_error (bfd_error_invalid_operation);
-	  ret = FALSE;
+	  ret = false;
 	  goto copy_reloc;
 	}
 
@@ -8831,16 +8874,49 @@ ppc_elf_relocate_section (bfd *output_bf
 	default:
 	  break;
 
+	case R_PPC_TPREL16_HA:
+	  if (htab->do_tls_opt
+	      && relocation + addend + 0x8000 < 0x10000
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
+
+	    {
+	      bfd_byte *p = contents + (rel->r_offset & ~3);
+	      bfd_put_32 (input_bfd, NOP, p);
+	    }
+	  break;
+
+	case R_PPC_TPREL16_LO:
+	  if (htab->do_tls_opt
+	      && relocation + addend + 0x8000 < 0x10000
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
+	    {
+	      bfd_byte *p = contents + (rel->r_offset & ~3);
+	      unsigned int insn = bfd_get_32 (input_bfd, p);
+	      insn &= ~(0x1f << 16);
+	      insn |= 2 << 16;
+	      bfd_put_32 (input_bfd, insn, p);
+	    }
+	  break;
+	}
+
+      switch (r_type)
+	{
+	default:
+	  break;
+
 	case R_PPC_PLTCALL:
 	  if (unresolved_reloc)
 	    {
-	      bfd_byte *p = contents + rel->r_offset;
-	      unsigned int insn = bfd_get_32 (input_bfd, p);
-	      insn &= 1;
-	      bfd_put_32 (input_bfd, B | insn, p);
-	      unresolved_reloc = save_unresolved_reloc;
-	      r_type = R_PPC_REL24;
-	      howto = ppc_elf_howto_table[r_type];
+	      if (offset_in_range (input_section, rel->r_offset, 4))
+		{
+		  bfd_byte *p = contents + rel->r_offset;
+		  unsigned int insn = bfd_get_32 (input_bfd, p);
+		  insn &= 1;
+		  bfd_put_32 (input_bfd, B | insn, p);
+		  unresolved_reloc = save_unresolved_reloc;
+		  r_type = R_PPC_REL24;
+		  howto = ppc_elf_howto_table[r_type];
+		}
 	    }
 	  else if (htab->plt_type != PLT_NEW)
 	    info->callbacks->einfo
@@ -8854,11 +8930,14 @@ ppc_elf_relocate_section (bfd *output_bf
 	case R_PPC_PLT16_LO:
 	  if (unresolved_reloc)
 	    {
-	      bfd_byte *p = contents + (rel->r_offset & ~3);
-	      bfd_put_32 (input_bfd, NOP, p);
-	      unresolved_reloc = FALSE;
-	      r_type = R_PPC_NONE;
-	      howto = ppc_elf_howto_table[r_type];
+	      if (offset_in_range (input_section, rel->r_offset & ~3, 4))
+		{
+		  bfd_byte *p = contents + (rel->r_offset & ~3);
+		  bfd_put_32 (input_bfd, NOP, p);
+		  unresolved_reloc = false;
+		  r_type = R_PPC_NONE;
+		  howto = ppc_elf_howto_table[r_type];
+		}
 	    }
 	  else if (htab->plt_type != PLT_NEW)
 	    info->callbacks->einfo
@@ -8920,36 +8999,37 @@ ppc_elf_relocate_section (bfd *output_bf
 	case R_PPC_GOT_DTPREL16_LO:
 	case R_PPC_GOT_TPREL16:
 	case R_PPC_GOT_TPREL16_LO:
-	  {
-	    /* The 32-bit ABI lacks proper relocations to deal with
-	       certain 64-bit instructions.  Prevent damage to bits
-	       that make up part of the insn opcode.  */
-	    unsigned int insn, mask, lobit;
-
-	    insn = bfd_get_32 (input_bfd,
-			       contents + rel->r_offset - d_offset);
-	    mask = 0;
-	    if (is_insn_ds_form (insn))
-	      mask = 3;
-	    else if (is_insn_dq_form (insn))
-	      mask = 15;
-	    else
-	      break;
-	    relocation += addend;
-	    addend = insn & mask;
-	    lobit = mask & relocation;
-	    if (lobit != 0)
-	      {
-		relocation ^= lobit;
-		info->callbacks->einfo
-		  /* xgettext:c-format */
-		  (_("%H: error: %s against `%s' not a multiple of %u\n"),
-		   input_bfd, input_section, rel->r_offset,
-		   howto->name, sym_name, mask + 1);
-		bfd_set_error (bfd_error_bad_value);
-		ret = FALSE;
-	      }
-	  }
+	  if (offset_in_range (input_section, rel->r_offset - d_offset, 4))
+	    {
+	      /* The 32-bit ABI lacks proper relocations to deal with
+		 certain 64-bit instructions.  Prevent damage to bits
+		 that make up part of the insn opcode.  */
+	      unsigned int insn, mask, lobit;
+
+	      insn = bfd_get_32 (input_bfd,
+				 contents + rel->r_offset - d_offset);
+	      mask = 0;
+	      if (is_insn_ds_form (insn))
+		mask = 3;
+	      else if (is_insn_dq_form (insn))
+		mask = 15;
+	      else
+		break;
+	      relocation += addend;
+	      addend = insn & mask;
+	      lobit = mask & relocation;
+	      if (lobit != 0)
+		{
+		  relocation ^= lobit;
+		  info->callbacks->einfo
+		    /* xgettext:c-format */
+		    (_("%H: error: %s against `%s' not a multiple of %u\n"),
+		     input_bfd, input_section, rel->r_offset,
+		     howto->name, sym_name, mask + 1);
+		  bfd_set_error (bfd_error_bad_value);
+		  ret = false;
+		}
+	    }
 	  break;
 	}
 
@@ -8976,7 +9056,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	     input_bfd, input_section, rel->r_offset,
 	     howto->name,
 	     sym_name);
-	  ret = FALSE;
+	  ret = false;
 	}
 
       /* 16-bit fields in insns mostly have signed values, but a
@@ -8984,7 +9064,8 @@ ppc_elf_relocate_section (bfd *output_bf
 	 have different reloc types.  */
       if (howto->complain_on_overflow != complain_overflow_dont
 	  && howto->dst_mask == 0xffff
-	  && (input_section->flags & SEC_CODE) != 0)
+	  && (input_section->flags & SEC_CODE) != 0
+	  && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	{
 	  enum complain_overflow complain = complain_overflow_signed;
 
@@ -8993,11 +9074,11 @@ ppc_elf_relocate_section (bfd *output_bf
 	      unsigned int insn;
 
 	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
-	      if ((insn & (0x3f << 26)) == 10u << 26 /* cmpli */)
+	      if ((insn & (0x3fu << 26)) == 10u << 26 /* cmpli */)
 		complain = complain_overflow_bitfield;
-	      else if ((insn & (0x3f << 26)) == 28u << 26 /* andi */
-		       || (insn & (0x3f << 26)) == 24u << 26 /* ori */
-		       || (insn & (0x3f << 26)) == 26u << 26 /* xori */)
+	      else if ((insn & (0x3fu << 26)) == 28u << 26 /* andi */
+		       || (insn & (0x3fu << 26)) == 24u << 26 /* ori */
+		       || (insn & (0x3fu << 26)) == 26u << 26 /* xori */)
 		complain = complain_overflow_unsigned;
 	    }
 	  if (howto->complain_on_overflow != complain)
@@ -9011,7 +9092,7 @@ ppc_elf_relocate_section (bfd *output_bf
       if (r_type == R_PPC_REL16DX_HA)
 	{
 	  /* Split field reloc isn't handled by _bfd_final_link_relocate.  */
-	  if (rel->r_offset + 4 > input_section->size)
+	  if (offset_in_range (input_section, rel->r_offset, 4))
 	    r = bfd_reloc_outofrange;
 	  else
 	    {
@@ -9033,11 +9114,11 @@ ppc_elf_relocate_section (bfd *output_bf
 	r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents,
 				      rel->r_offset, relocation, addend);
 
+    report_reloc:
       if (r != bfd_reloc_ok)
 	{
 	  if (r == bfd_reloc_overflow)
 	    {
-	    overflow:
 	      /* On code like "if (foo) foo();" don't report overflow
 		 on a branch to zero when foo is undefined.  */
 	      if (!warned
@@ -9056,7 +9137,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		(_("%H: %s reloc against `%s': error %d\n"),
 		 input_bfd, input_section, rel->r_offset,
 		 howto->name, sym_name, (int) r);
-	      ret = FALSE;
+	      ret = false;
 	    }
 	}
     copy_reloc:
@@ -9141,13 +9222,13 @@ ppc_elf_relocate_section (bfd *output_bf
 	{
 	  bfd_vma offset = addr - start_addr;
 	  Elf_Internal_Rela *lo, *hi;
-	  bfd_boolean is_data;
+	  bool is_data;
 	  bfd_vma patch_off, patch_addr;
 	  unsigned int insn;
 
 	  /* Do we have a data reloc at this offset?  If so, leave
 	     the word alone.  */
-	  is_data = FALSE;
+	  is_data = false;
 	  lo = relocs;
 	  hi = relend;
 	  rel = NULL;
@@ -9166,7 +9247,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		    case R_PPC_UADDR32:
 		    case R_PPC_REL32:
 		    case R_PPC_ADDR30:
-		      is_data = TRUE;
+		      is_data = true;
 		      break;
 		    default:
 		      break;
@@ -9221,10 +9302,10 @@ ppc_elf_relocate_section (bfd *output_bf
 	     . new_page:		new_page:
 	     .  */
 	  insn = bfd_get_32 (input_bfd, contents + offset);
-	  if ((insn & (0x3f << 26)) == (18u << 26)	    /* b,bl,ba,bla */
-	      || ((insn & (0x3f << 26)) == (16u << 26)	    /* bc,bcl,bca,bcla*/
+	  if ((insn & (0x3fu << 26)) == (18u << 26)	    /* b,bl,ba,bla */
+	      || ((insn & (0x3fu << 26)) == (16u << 26)	    /* bc,bcl,bca,bcla*/
 		  && (insn & (0x14 << 21)) == (0x14 << 21)) /*	 with BO=0x14 */
-	      || ((insn & (0x3f << 26)) == (19u << 26)
+	      || ((insn & (0x3fu << 26)) == (19u << 26)
 		  && (insn & (0x3ff << 1)) == (16u << 1)    /* bclr,bclrl */
 		  && (insn & (0x14 << 21)) == (0x14 << 21)))/*	 with BO=0x14 */
 	    continue;
@@ -9308,7 +9389,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	  else
 	    rel = NULL;
 
-	  if ((insn & (0x3f << 26)) == (16u << 26) /* bc */
+	  if ((insn & (0x3fu << 26)) == (16u << 26) /* bc */
 	      && (insn & 2) == 0 /* relative */)
 	    {
 	      bfd_vma delta = ((insn & 0xfffc) ^ 0x8000) - 0x8000;
@@ -9387,18 +9468,20 @@ ppc_elf_relocate_section (bfd *output_bf
 
 /* Write out the PLT relocs and entries for H.  */
 
-static bfd_boolean
+static bool
 write_global_sym_plt (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) inf;
   struct ppc_elf_link_hash_table *htab = ppc_elf_hash_table (info);
   struct plt_entry *ent;
-  bfd_boolean doneone;
+  bool doneone;
 
-  doneone = FALSE;
+  doneone = false;
   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
     if (ent->plt.offset != (bfd_vma) -1)
       {
+	bool dyn = !use_local_plt (info, h);
+
 	if (!doneone)
 	  {
 	    Elf_Internal_Rela rela;
@@ -9407,9 +9490,7 @@ write_global_sym_plt (struct elf_link_ha
 	    asection *plt = htab->elf.splt;
 	    asection *relplt = htab->elf.srelplt;
 
-	    if (htab->plt_type == PLT_NEW
-		|| !htab->elf.dynamic_sections_created
-		|| h->dynindx == -1)
+	    if (htab->plt_type == PLT_NEW || !dyn)
 	      reloc_index = ent->plt.offset / 4;
 	    else
 	      {
@@ -9422,9 +9503,7 @@ write_global_sym_plt (struct elf_link_ha
 
 	    /* This symbol has an entry in the procedure linkage table.
 	       Set it up.  */
-	    if (htab->plt_type == PLT_VXWORKS
-		&& htab->elf.dynamic_sections_created
-		&& h->dynindx != -1)
+	    if (htab->plt_type == PLT_VXWORKS && dyn)
 	      {
 		bfd_vma got_offset;
 		const bfd_vma *plt_entry;
@@ -9510,7 +9589,8 @@ write_global_sym_plt (struct elf_link_ha
 		    rela.r_info = ELF32_R_INFO (htab->elf.hgot->indx,
 						R_PPC_ADDR16_HA);
 		    rela.r_addend = got_offset;
-		    bfd_elf32_swap_reloca_out (info->output_bfd, &rela, loc);
+		    BFD_ASSERT (swap_reloc_out (info->output_bfd, &rela, loc,
+						htab->srelplt2));
 		    loc += sizeof (Elf32_External_Rela);
 
 		    /* Provide the @l relocation for the second instruction.  */
@@ -9520,7 +9600,8 @@ write_global_sym_plt (struct elf_link_ha
 		    rela.r_info = ELF32_R_INFO (htab->elf.hgot->indx,
 						R_PPC_ADDR16_LO);
 		    rela.r_addend = got_offset;
-		    bfd_elf32_swap_reloca_out (info->output_bfd, &rela, loc);
+		    BFD_ASSERT (swap_reloc_out (info->output_bfd, &rela, loc,
+						htab->srelplt2));
 		    loc += sizeof (Elf32_External_Rela);
 
 		    /* Provide a relocation for the GOT entry corresponding to this
@@ -9531,7 +9612,8 @@ write_global_sym_plt (struct elf_link_ha
 		    rela.r_info = ELF32_R_INFO (htab->elf.hplt->indx,
 						R_PPC_ADDR32);
 		    rela.r_addend = ent->plt.offset + 16;
-		    bfd_elf32_swap_reloca_out (info->output_bfd, &rela, loc);
+		    BFD_ASSERT (swap_reloc_out (info->output_bfd, &rela, loc,
+						htab->srelplt2));
 		  }
 
 		/* VxWorks uses non-standard semantics for R_PPC_JMP_SLOT.
@@ -9547,8 +9629,7 @@ write_global_sym_plt (struct elf_link_ha
 	    else
 	      {
 		rela.r_addend = 0;
-		if (!htab->elf.dynamic_sections_created
-		    || h->dynindx == -1)
+		if (!dyn)
 		  {
 		    if (h->type == STT_GNU_IFUNC)
 		      {
@@ -9577,9 +9658,7 @@ write_global_sym_plt (struct elf_link_ha
 				     + plt->output_offset
 				     + ent->plt.offset);
 
-		    if (htab->plt_type == PLT_OLD
-			|| !htab->elf.dynamic_sections_created
-			|| h->dynindx == -1)
+		    if (htab->plt_type == PLT_OLD || !dyn)
 		      {
 			/* We don't need to fill in the .plt.  The ppc dynamic
 			   linker will fill it in.  */
@@ -9598,8 +9677,7 @@ write_global_sym_plt (struct elf_link_ha
 	    if (relplt != NULL)
 	      {
 		/* Fill in the entry in the .rela.plt section.  */
-		if (!htab->elf.dynamic_sections_created
-		    || h->dynindx == -1)
+		if (!dyn)
 		  {
 		    if (h->type == STT_GNU_IFUNC)
 		      rela.r_info = ELF32_R_INFO (0, R_PPC_IRELATIVE);
@@ -9617,20 +9695,18 @@ write_global_sym_plt (struct elf_link_ha
 		    if (h->type == STT_GNU_IFUNC && is_static_defined (h))
 		      htab->maybe_local_ifunc_resolver = 1;
 		  }
-		bfd_elf32_swap_reloca_out (info->output_bfd, &rela, loc);
+		BFD_ASSERT (swap_reloc_out (info->output_bfd, &rela,
+					    loc, relplt));
 	      }
-	    doneone = TRUE;
+	    doneone = true;
 	  }
 
-	if (htab->plt_type == PLT_NEW
-	    || !htab->elf.dynamic_sections_created
-	    || h->dynindx == -1)
+	if (htab->plt_type == PLT_NEW || !dyn)
 	  {
 	    unsigned char *p;
 	    asection *plt = htab->elf.splt;
 
-	    if (!htab->elf.dynamic_sections_created
-		|| h->dynindx == -1)
+	    if (!dyn)
 	      {
 		if (h->type == STT_GNU_IFUNC)
 		  plt = htab->elf.iplt;
@@ -9648,19 +9724,19 @@ write_global_sym_plt (struct elf_link_ha
 	else
 	  break;
       }
-  return TRUE;
+  return true;
 }
 
 /* Finish up PLT handling.  */
 
-bfd_boolean
+bool
 ppc_finish_symbols (struct bfd_link_info *info)
 {
   struct ppc_elf_link_hash_table *htab = ppc_elf_hash_table (info);
   bfd *ibfd;
 
   if (!htab)
-    return TRUE;
+    return true;
 
   elf_link_hash_traverse (&htab->elf, write_global_sym_plt, info);
 
@@ -9701,10 +9777,9 @@ ppc_finish_symbols (struct bfd_link_info
 		if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms,
 				lplt - local_plt, ibfd))
 		  {
-		    if (local_syms != NULL
-			&& symtab_hdr->contents != (unsigned char *) local_syms)
+		    if (symtab_hdr->contents != (unsigned char *) local_syms)
 		      free (local_syms);
-		    return FALSE;
+		    return false;
 		  }
 
 		val = sym->st_value;
@@ -9738,9 +9813,8 @@ ppc_finish_symbols (struct bfd_link_info
 				 + plt->output_offset
 				 + plt->output_section->vma);
 		rela.r_addend = val;
-		loc = relplt->contents + (relplt->reloc_count++
-					  * sizeof (Elf32_External_Rela));
-		bfd_elf32_swap_reloca_out (info->output_bfd, &rela, loc);
+		BFD_ASSERT (count_and_swap_reloc_out (info->output_bfd, &rela,
+						      relplt));
 
 		p = (unsigned char *) htab->glink->contents + ent->glink_offset;
 		write_glink_stub (NULL, ent, htab->elf.iplt, p, info);
@@ -9756,13 +9830,13 @@ ppc_finish_symbols (struct bfd_link_info
 	    symtab_hdr->contents = (unsigned char *) local_syms;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 ppc_elf_finish_dynamic_symbol (bfd *output_bfd,
 			       struct bfd_link_info *info,
 			       struct elf_link_hash_entry *h,
@@ -9824,7 +9898,6 @@ ppc_elf_finish_dynamic_symbol (bfd *outp
     {
       asection *s;
       Elf_Internal_Rela rela;
-      bfd_byte *loc;
 
       /* This symbols needs a copy reloc.  Set it up.  */
 
@@ -9845,15 +9918,14 @@ ppc_elf_finish_dynamic_symbol (bfd *outp
       rela.r_offset = SYM_VAL (h);
       rela.r_info = ELF32_R_INFO (h->dynindx, R_PPC_COPY);
       rela.r_addend = 0;
-      loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
-      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+      BFD_ASSERT (count_and_swap_reloc_out (output_bfd, &rela, s));
     }
 
 #ifdef DEBUG
   fprintf (stderr, "\n");
 #endif
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -9881,7 +9953,7 @@ ppc_elf_reloc_type_class (const struct b
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 				 struct bfd_link_info *info)
 {
@@ -9889,7 +9961,7 @@ ppc_elf_finish_dynamic_sections (bfd *ou
   struct ppc_elf_link_hash_table *htab;
   bfd_vma got;
   bfd *dynobj;
-  bfd_boolean ret = TRUE;
+  bool ret = true;
 
 #ifdef DEBUG
   fprintf (stderr, "ppc_elf_finish_dynamic_sections called\n");
@@ -9921,7 +9993,7 @@ ppc_elf_finish_dynamic_sections (bfd *ou
 	  switch (dyn.d_tag)
 	    {
 	    case DT_PLTGOT:
-	      if (htab->is_vxworks)
+	      if (htab->elf.target_os == is_vxworks)
 		s = htab->elf.sgotplt;
 	      else
 		s = htab->elf.splt;
@@ -9953,7 +10025,7 @@ ppc_elf_finish_dynamic_sections (bfd *ou
 	      continue;
 
 	    default:
-	      if (htab->is_vxworks
+	      if (htab->elf.target_os == is_vxworks
 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 		break;
 	      continue;
@@ -9998,14 +10070,14 @@ ppc_elf_finish_dynamic_sections (bfd *ou
 			      (htab->elf.sgotplt != NULL
 			       ? htab->elf.sgotplt : htab->elf.sgot));
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	}
 
       elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = 4;
     }
 
   /* Fill in the first entry in the VxWorks procedure linkage table.  */
-  if (htab->is_vxworks
+  if (htab->elf.target_os == is_vxworks
       && htab->elf.splt != NULL
       && htab->elf.splt->size != 0
       && htab->elf.splt->output_section != bfd_abs_section_ptr)
@@ -10050,7 +10122,7 @@ ppc_elf_finish_dynamic_sections (bfd *ou
 			   + 2);
 	  rela.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_PPC_ADDR16_HA);
 	  rela.r_addend = 0;
-	  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+	  BFD_ASSERT (swap_reloc_out (output_bfd, &rela, loc, htab->srelplt2));
 	  loc += sizeof (Elf32_External_Rela);
 
 	  /* Output the @l relocation for the second instruction.  */
@@ -10059,7 +10131,7 @@ ppc_elf_finish_dynamic_sections (bfd *ou
 			   + 6);
 	  rela.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_PPC_ADDR16_LO);
 	  rela.r_addend = 0;
-	  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+	  BFD_ASSERT (swap_reloc_out (output_bfd, &rela, loc, htab->srelplt2));
 	  loc += sizeof (Elf32_External_Rela);
 
 	  /* Fix up the remaining relocations.  They may have the wrong
@@ -10310,7 +10382,7 @@ ppc_elf_finish_dynamic_sections (bfd *ou
 	  && !_bfd_elf_write_section_eh_frame (output_bfd, info,
 					       htab->glink_eh_frame,
 					       htab->glink_eh_frame->contents))
-	return FALSE;
+	return false;
     }
 
   return ret;
@@ -10325,7 +10397,6 @@ ppc_elf_finish_dynamic_sections (bfd *ou
 #define ELF_MACHINE_CODE	EM_PPC
 #define ELF_MAXPAGESIZE		0x10000
 #define ELF_COMMONPAGESIZE	0x1000
-#define ELF_RELROPAGESIZE	ELF_MAXPAGESIZE
 #define elf_info_to_howto	ppc_elf_info_to_howto
 
 #ifdef  EM_CYGNUS_POWERPC
@@ -10414,6 +10485,9 @@ ppc_elf_finish_dynamic_sections (bfd *ou
 
 #undef  ELF_OSABI
 
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS		is_vxworks
+
 /* VxWorks uses the elf default section flags for .plt.  */
 static const struct bfd_elf_special_section *
 ppc_elf_vxworks_get_sec_type_attr (bfd *abfd, asection *sec)
@@ -10439,7 +10513,6 @@ ppc_elf_vxworks_link_hash_table_create (
     {
       struct ppc_elf_link_hash_table *htab
 	= (struct ppc_elf_link_hash_table *)ret;
-      htab->is_vxworks = 1;
       htab->plt_type = PLT_VXWORKS;
       htab->plt_entry_size = VXWORKS_PLT_ENTRY_SIZE;
       htab->plt_slot_size = VXWORKS_PLT_ENTRY_SIZE;
@@ -10449,7 +10522,7 @@ ppc_elf_vxworks_link_hash_table_create (
 }
 
 /* Tweak magic VxWorks symbols as they are loaded.  */
-static bfd_boolean
+static bool
 ppc_elf_vxworks_add_symbol_hook (bfd *abfd,
 				 struct bfd_link_info *info,
 				 Elf_Internal_Sym *sym,
@@ -10460,12 +10533,12 @@ ppc_elf_vxworks_add_symbol_hook (bfd *ab
 {
   if (!elf_vxworks_add_symbol_hook (abfd, info, sym, namep, flagsp, secp,
 				    valp))
-    return FALSE;
+    return false;
 
   return ppc_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp);
 }
 
-static bfd_boolean
+static bool
 ppc_elf_vxworks_final_write_processing (bfd *abfd)
 {
   ppc_final_write_processing (abfd);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-ppc.h ./bfd/elf32-ppc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-ppc.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-ppc.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC-specific support for 64-bit ELF.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -60,10 +60,10 @@ struct ppc_elf_params
 
 void ppc_elf_link_params (struct bfd_link_info *, struct ppc_elf_params *);
 int ppc_elf_select_plt_layout (bfd *, struct bfd_link_info *);
-bfd_boolean ppc_elf_inline_plt (struct bfd_link_info *);
+bool ppc_elf_inline_plt (struct bfd_link_info *);
 asection *ppc_elf_tls_setup (bfd *, struct bfd_link_info *);
-bfd_boolean ppc_elf_tls_optimize (bfd *, struct bfd_link_info *);
+bool ppc_elf_tls_optimize (bfd *, struct bfd_link_info *);
 void ppc_elf_maybe_strip_sdata_syms (struct bfd_link_info *);
-extern bfd_boolean ppc_elf_modify_segment_map (bfd *, struct bfd_link_info *);
-extern bfd_boolean ppc_elf_section_processing (bfd *, Elf_Internal_Shdr *);
-extern bfd_boolean ppc_finish_symbols (struct bfd_link_info *);
+extern bool ppc_elf_modify_segment_map (bfd *, struct bfd_link_info *);
+extern bool ppc_elf_section_processing (bfd *, Elf_Internal_Shdr *);
+extern bool ppc_finish_symbols (struct bfd_link_info *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-pru.c ./bfd/elf32-pru.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-pru.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-pru.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for TI PRU.
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
    Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
    Based on elf32-nios2.c
 
@@ -43,7 +43,7 @@
   } while (0)
 
 /* Enable debugging printout at stdout with this variable.  */
-static bfd_boolean debug_relax = FALSE;
+static bool debug_relax = false;
 
 /* Forward declarations.  */
 static bfd_reloc_status_type pru_elf32_pmem_relocate
@@ -65,229 +65,229 @@ static reloc_howto_type elf_pru_howto_ta
   /* No relocation.  */
   HOWTO (R_PRU_NONE,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 3,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 0,			/* size */
+	 0,			/* bitsize */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_PRU_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_PRU_16_PMEM,
 	 2,
-	 1,			/* short */
+	 2,			/* short */
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_PRU_16_PMEM",
-	 FALSE,
+	 false,
 	 0,			/* src_mask */
 	 0xffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_PRU_U16_PMEMIMM,
 	 2,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 8,
 	 complain_overflow_unsigned,
 	 pru_elf32_pmem_relocate,
 	 "R_PRU_U16_PMEMIMM",
-	 FALSE,
+	 false,
 	 0,			/* src_mask */
 	 0x00ffff00,
-	 FALSE),
+	 false),
 
   HOWTO (R_PRU_BFD_RELOC_16,
 	 0,
-	 1,			/* short */
+	 2,			/* short */
 	 16,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_PRU_BFD_RELOC16",
-	 FALSE,
+	 false,
 	 0,			/* src_mask */
 	 0x0000ffff,
-	 FALSE),
+	 false),
 
   /* 16-bit unsigned immediate relocation.  */
   HOWTO (R_PRU_U16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain on overflow */
 	 bfd_elf_generic_reloc,	/* special function */
 	 "R_PRU_U16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00ffff00,		/* dest_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_PRU_32_PMEM,
 	 2,
-	 2,			/* long */
+	 4,			/* long */
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 pru_elf32_pmem_relocate,
 	 "R_PRU_32_PMEM",
-	 FALSE,
+	 false,
 	 0,			/* src_mask */
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_PRU_BFD_RELOC_32,
 	 0,
-	 2,			/* long */
+	 4,			/* long */
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_PRU_BFD_RELOC32",
-	 FALSE,
+	 false,
 	 0,			/* src_mask */
 	 0xffffffff,
-	 FALSE),
+	 false),
 
   HOWTO (R_PRU_S10_PCREL,
 	 2,
-	 2,
+	 4,
 	 10,
-	 TRUE,
+	 true,
 	 0,
 	 complain_overflow_bitfield,
 	 pru_elf32_s10_pcrel_relocate,
 	 "R_PRU_S10_PCREL",
-	 FALSE,
+	 false,
 	 0,			/* src_mask */
 	 0x060000ff,
-	 TRUE),
+	 true),
 
   HOWTO (R_PRU_U8_PCREL,
 	 2,
-	 2,
+	 4,
 	 8,
-	 TRUE,
+	 true,
 	 0,
 	 complain_overflow_unsigned,
 	 pru_elf32_u8_pcrel_relocate,
 	 "R_PRU_U8_PCREL",
-	 FALSE,
+	 false,
 	 0,			/* src_mask */
 	 0x000000ff,
-	 TRUE),
+	 true),
 
   HOWTO (R_PRU_LDI32,
 	 0,			/* rightshift */
-	 4,			/* size (4 = 8bytes) */
+	 8,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain on overflow */
 	 pru_elf32_ldi32_relocate, /* special function */
 	 "R_PRU_LDI32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dest_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU-specific relocations.  */
   HOWTO (R_PRU_GNU_BFD_RELOC_8,
 	 0,
-	 0,			/* byte */
+	 1,			/* byte */
 	 8,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_PRU_BFD_RELOC8",
-	 FALSE,
+	 false,
 	 0,			/* src_mask */
 	 0x000000ff,
-	 FALSE),
+	 false),
 
   HOWTO (R_PRU_GNU_DIFF8,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_pru_diff_relocate, /* special_function */
 	 "R_PRU_DIFF8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_PRU_GNU_DIFF16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_pru_diff_relocate,/* special_function */
 	 "R_PRU_DIFF16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_PRU_GNU_DIFF32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_pru_diff_relocate,/* special_function */
 	 "R_PRU_DIFF32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_PRU_GNU_DIFF16_PMEM,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_pru_diff_relocate,/* special_function */
 	 "R_PRU_DIFF16_PMEM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_PRU_GNU_DIFF32_PMEM, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_pru_diff_relocate,/* special_function */
 	 "R_PRU_DIFF32_PMEM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 /* Add other relocations here.  */
 };
@@ -299,14 +299,14 @@ static unsigned char elf_code_to_howto_i
 static reloc_howto_type *
 lookup_howto (unsigned int rtype)
 {
-  static bfd_boolean initialized = FALSE;
+  static bool initialized = false;
   int i;
   int howto_tbl_size = (int) (sizeof (elf_pru_howto_table_rel)
 			      / sizeof (elf_pru_howto_table_rel[0]));
 
   if (! initialized)
     {
-      initialized = TRUE;
+      initialized = true;
       memset (elf_code_to_howto_index, 0xff,
 	      sizeof (elf_code_to_howto_index));
       for (i = 0; i < howto_tbl_size; i++)
@@ -410,7 +410,7 @@ pru_elf32_bfd_reloc_name_lookup (bfd *ab
 /* Implement elf_info_to_howto:
    Given a ELF32 relocation, fill in a arelent structure.  */
 
-static bfd_boolean
+static bool
 pru_elf32_info_to_howto (bfd *abfd, arelent *cache_ptr,
 			 Elf_Internal_Rela *dst)
 {
@@ -422,7 +422,7 @@ pru_elf32_info_to_howto (bfd *abfd, arel
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = lookup_howto (r_type);
@@ -539,7 +539,7 @@ pru_elf32_do_ldi32_relocate (bfd *abfd,
 			     bfd_byte *data, bfd_vma offset,
 			     bfd_vma symbol_value, bfd_vma addend)
 {
-  bfd_signed_vma relocation;
+  bfd_vma relocation;
   bfd_size_type octets = offset * OCTETS_PER_BYTE (abfd, input_section);
   bfd_byte *location;
   unsigned long in1, in2;
@@ -680,7 +680,7 @@ pru_elf32_ldi32_relocate (bfd *abfd, are
 
 
 /* Implement elf_backend_relocate_section.  */
-static bfd_boolean
+static int
 pru_elf32_relocate_section (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    bfd *input_bfd,
@@ -695,7 +695,7 @@ pru_elf32_relocate_section (bfd *output_
   struct elf_link_hash_entry **sym_hashes;
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
-  bfd_boolean is_rel_reloc;
+  bool is_rel_reloc;
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (input_bfd);
@@ -719,7 +719,7 @@ pru_elf32_relocate_section (bfd *output_
       bfd_reloc_status_type r = bfd_reloc_ok;
       const char *name = NULL;
       const char* msg = (const char*) NULL;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_vma addend;
 
       /* If we are using a REL relocation then the addend should be empty.  */
@@ -740,7 +740,7 @@ pru_elf32_relocate_section (bfd *output_
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -923,7 +923,7 @@ pru_elf32_relocate_section (bfd *output_
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol) (info, name, input_bfd,
 						    input_section,
-						    rel->r_offset, TRUE);
+						    rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -951,11 +951,11 @@ pru_elf32_relocate_section (bfd *output_
 	    {
 	      (*info->callbacks->warning) (info, msg, name, input_bfd,
 					   input_section, rel->r_offset);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -977,7 +977,7 @@ bfd_elf_pru_diff_relocate (bfd *abfd ATT
 
 /* Returns whether the relocation type passed is a diff reloc.  */
 
-static bfd_boolean
+static bool
 elf32_pru_is_diff_reloc (Elf_Internal_Rela *irel)
 {
   return (ELF32_R_TYPE (irel->r_info) == R_PRU_GNU_DIFF8
@@ -1116,7 +1116,7 @@ elf32_pru_adjust_diff_reloc_value (bfd *
 
    Idea copied from the AVR port.  */
 
-static bfd_boolean
+static bool
 pru_elf_relax_delete_bytes (bfd *abfd,
 			    asection *sec,
 			    bfd_vma addr,
@@ -1200,7 +1200,7 @@ pru_elf_relax_delete_bytes (bfd *abfd,
        irel = elf_section_data (isec)->relocs;
        /* PR 12161: Read in the relocs for this section if necessary.  */
        if (irel == NULL)
-	 irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, TRUE);
+	 irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, true);
 
        for (irelend = irel + isec->reloc_count;
 	    irel < irelend;
@@ -1216,7 +1216,7 @@ pru_elf_relax_delete_bytes (bfd *abfd,
 						 symtab_hdr->sh_info, 0,
 						 NULL, NULL, NULL);
 	       if (isymbuf == NULL)
-		 return FALSE;
+		 return false;
 	     }
 
 	   /* Get the value of the symbol referred to by the reloc.  */
@@ -1332,13 +1332,13 @@ pru_elf_relax_delete_bytes (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
-pru_elf32_relax_section (bfd * abfd, asection * sec,
-			  struct bfd_link_info * link_info,
-			  bfd_boolean * again)
+static bool
+pru_elf32_relax_section (bfd *abfd, asection *sec,
+			 struct bfd_link_info *link_info,
+			 bool *again)
 {
   Elf_Internal_Shdr * symtab_hdr;
   Elf_Internal_Rela * internal_relocs;
@@ -1348,15 +1348,17 @@ pru_elf32_relax_section (bfd * abfd, ase
   Elf_Internal_Sym *  isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-    || (sec->flags & SEC_RELOC) == 0
-    || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+      || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
+      || (sec->flags & SEC_CODE) == 0)
+    return true;
 
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
 
@@ -1495,7 +1497,7 @@ pru_elf32_relax_section (bfd * abfd, ase
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
     }
@@ -1523,23 +1525,20 @@ pru_elf32_relax_section (bfd * abfd, ase
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
-error_return:
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+ error_return:
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 /* Free the derived linker hash table.  */
@@ -1554,7 +1553,7 @@ static struct bfd_link_hash_table *
 pru_elf32_link_hash_table_create (bfd *abfd)
 {
   struct elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_link_hash_table);
+  size_t amt = sizeof (struct elf_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -1604,6 +1603,9 @@ pru_elf32_link_hash_table_create (bfd *a
 
 #define elf_backend_relocate_section	pru_elf32_relocate_section
 #define bfd_elf32_bfd_relax_section	pru_elf32_relax_section
+#define elf_backend_can_gc_sections	1
+
+#define elf_backend_default_execstack	0
 
 #define TARGET_LITTLE_SYM		pru_elf32_vec
 #define TARGET_LITTLE_NAME		"elf32-pru"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-rl78.c ./bfd/elf32-rl78.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-rl78.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-rl78.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Renesas RL78 specific support for 32-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -27,17 +27,16 @@
 
 #define valid_16bit_address(v) ((v) <= 0x0ffff || (v) >= 0xf0000)
 
-#define RL78REL(n,sz,bit,shift,complain,pcrel)				     \
+#define RL78REL(n,sz,bit,mask,shift,complain,pcrel) \
   HOWTO (R_RL78_##n, shift, sz, bit, pcrel, 0, complain_overflow_ ## complain, \
-	 bfd_elf_generic_reloc, "R_RL78_" #n, FALSE, 0, ~0, FALSE)
+	 bfd_elf_generic_reloc, "R_RL78_" #n, false, 0, mask, false)
 
 static bfd_reloc_status_type rl78_special_reloc (bfd *, arelent *, asymbol *, void *,
 						 asection *, bfd *, char **);
 
-/* FIXME: We could omit the SHIFT parameter, it is always zero.  */
-#define RL78_OP_REL(n,sz,bit,shift,complain,pcrel)			\
+#define RL78_OP_REL(n,sz,bit,mask,shift,complain,pcrel)			\
   HOWTO (R_RL78_##n, shift, sz, bit, pcrel, 0, complain_overflow_ ## complain, \
-	 rl78_special_reloc, "R_RL78_" #n, FALSE, 0, ~0, FALSE)
+	 rl78_special_reloc, "R_RL78_" #n, false, 0, mask, false)
 
 /* Note that the relocations around 0x7f are internal to this file;
    feel free to move them as needed to avoid conflicts with published
@@ -45,25 +44,25 @@ static bfd_reloc_status_type rl78_specia
 
 static reloc_howto_type rl78_elf_howto_table [] =
 {
-  RL78REL (NONE,	 3,  0, 0, dont,     FALSE),
-  RL78REL (DIR32,	 2, 32, 0, signed,   FALSE),
-  RL78REL (DIR24S,	 2, 24, 0, signed,   FALSE),
-  RL78REL (DIR16,	 1, 16, 0, dont,     FALSE),
-  RL78REL (DIR16U,	 1, 16, 0, unsigned, FALSE),
-  RL78REL (DIR16S,	 1, 16, 0, signed,   FALSE),
-  RL78REL (DIR8,	 0,  8, 0, dont,     FALSE),
-  RL78REL (DIR8U,	 0,  8, 0, unsigned, FALSE),
-  RL78REL (DIR8S,	 0,  8, 0, signed,   FALSE),
-  RL78REL (DIR24S_PCREL, 2, 24, 0, signed,   TRUE),
-  RL78REL (DIR16S_PCREL, 1, 16, 0, signed,   TRUE),
-  RL78REL (DIR8S_PCREL,	 0,  8, 0, signed,   TRUE),
-  RL78REL (DIR16UL,	 1, 16, 2, unsigned, FALSE),
-  RL78REL (DIR16UW,	 1, 16, 1, unsigned, FALSE),
-  RL78REL (DIR8UL,	 0,  8, 2, unsigned, FALSE),
-  RL78REL (DIR8UW,	 0,  8, 1, unsigned, FALSE),
-  RL78REL (DIR32_REV,	 1, 16, 0, dont,     FALSE),
-  RL78REL (DIR16_REV,	 1, 16, 0, dont,     FALSE),
-  RL78REL (DIR3U_PCREL,	 0,  3, 0, dont,     TRUE),
+  RL78REL (NONE,	 0,  0, 0,          0, dont,     false),
+  RL78REL (DIR32,	 4, 32, 0xffffffff, 0, dont,     false),
+  RL78REL (DIR24S,	 4, 24, 0xffffff,   0, signed,   false),
+  RL78REL (DIR16,	 2, 16, 0xffff,     0, bitfield, false),
+  RL78REL (DIR16U,	 2, 16, 0xffff,     0, unsigned, false),
+  RL78REL (DIR16S,	 2, 16, 0xffff,     0, bitfield, false),
+  RL78REL (DIR8,	 1,  8, 0xff,       0, dont,     false),
+  RL78REL (DIR8U,	 1,  8, 0xff,       0, unsigned, false),
+  RL78REL (DIR8S,	 1,  8, 0xff,       0, bitfield, false),
+  RL78REL (DIR24S_PCREL, 4, 24, 0xffffff,   0, signed,   true),
+  RL78REL (DIR16S_PCREL, 2, 16, 0xffff,     0, signed,   true),
+  RL78REL (DIR8S_PCREL,	 1,  8, 0xff,       0, signed,   true),
+  RL78REL (DIR16UL,	 2, 16, 0xffff,     2, unsigned, false),
+  RL78REL (DIR16UW,	 2, 16, 0xffff,     1, unsigned, false),
+  RL78REL (DIR8UL,	 1,  8, 0xff,       2, unsigned, false),
+  RL78REL (DIR8UW,	 1,  8, 0xff,       1, unsigned, false),
+  RL78REL (DIR32_REV,	 4, 32, 0xffffffff, 0, dont,     false),
+  RL78REL (DIR16_REV,	 2, 16, 0xffff,     0, bitfield, false),
+  RL78REL (DIR3U_PCREL,	 1,  3, 0x7,        0, unsigned, true),
 
   EMPTY_HOWTO (0x13),
   EMPTY_HOWTO (0x14),
@@ -92,10 +91,11 @@ static reloc_howto_type rl78_elf_howto_t
   EMPTY_HOWTO (0x2a),
   EMPTY_HOWTO (0x2b),
   EMPTY_HOWTO (0x2c),
-  RL78REL (RH_RELAX, 0,	 0, 0, dont,	 FALSE),
 
-  EMPTY_HOWTO (0x2e),
-  RL78REL (RH_SADDR, 0,	 0, 0, dont,	 FALSE),
+  RL78REL (RH_RELAX,	 0,  0, 0,          0, dont,	 false),
+  RL78REL (RH_SFR,	 1,  8, 0xff,       0, unsigned, false),
+  RL78REL (RH_SADDR,	 1,  8, 0xff,       0, unsigned, false),
+
   EMPTY_HOWTO (0x30),
   EMPTY_HOWTO (0x31),
   EMPTY_HOWTO (0x32),
@@ -114,23 +114,23 @@ static reloc_howto_type rl78_elf_howto_t
   EMPTY_HOWTO (0x3f),
   EMPTY_HOWTO (0x40),
 
-  RL78_OP_REL (ABS32,	     2, 32, 0, dont,	 FALSE),
-  RL78_OP_REL (ABS24S,	     2, 24, 0, signed,	 FALSE),
-  RL78_OP_REL (ABS16,	     1, 16, 0, dont,	 FALSE),
-  RL78_OP_REL (ABS16U,	     1, 16, 0, unsigned, FALSE),
-  RL78_OP_REL (ABS16S,	     1, 16, 0, signed,	 FALSE),
-  RL78_OP_REL (ABS8,	     0,	 8, 0, dont,	 FALSE),
-  RL78_OP_REL (ABS8U,	     0,	 8, 0, unsigned, FALSE),
-  RL78_OP_REL (ABS8S,	     0,	 8, 0, signed,	 FALSE),
-  RL78_OP_REL (ABS24S_PCREL, 2, 24, 0, signed,	 TRUE),
-  RL78_OP_REL (ABS16S_PCREL, 1, 16, 0, signed,	 TRUE),
-  RL78_OP_REL (ABS8S_PCREL,  0,	 8, 0, signed,	 TRUE),
-  RL78_OP_REL (ABS16UL,	     1, 16, 0, unsigned, FALSE),
-  RL78_OP_REL (ABS16UW,	     1, 16, 0, unsigned, FALSE),
-  RL78_OP_REL (ABS8UL,	     0,	 8, 0, unsigned, FALSE),
-  RL78_OP_REL (ABS8UW,	     0,	 8, 0, unsigned, FALSE),
-  RL78_OP_REL (ABS32_REV,    2, 32, 0, dont,	 FALSE),
-  RL78_OP_REL (ABS16_REV,    1, 16, 0, dont,	 FALSE),
+  RL78_OP_REL (ABS32,	     4, 32, 0xffffffff, 0, dont,	false),
+  RL78_OP_REL (ABS24S,	     4, 24, 0xffffff,   0, signed,	false),
+  RL78_OP_REL (ABS16,	     2, 16, 0xffff,     0, bitfield,	false),
+  RL78_OP_REL (ABS16U,	     2, 16, 0xffff,     0, unsigned,	false),
+  RL78_OP_REL (ABS16S,	     2, 16, 0xffff,     0, signed,	false),
+  RL78_OP_REL (ABS8,	     1,	 8, 0xff,       0, bitfield,	false),
+  RL78_OP_REL (ABS8U,	     1,	 8, 0xff,       0, unsigned,	false),
+  RL78_OP_REL (ABS8S,	     1,	 8, 0xff,       0, signed,	false),
+  RL78_OP_REL (ABS24S_PCREL, 4, 24, 0xffffff,   0, signed,	true),
+  RL78_OP_REL (ABS16S_PCREL, 2, 16, 0xffff,     0, signed,	true),
+  RL78_OP_REL (ABS8S_PCREL,  1,	 8, 0xff,       0, signed,	true),
+  RL78_OP_REL (ABS16UL,	     2, 16, 0xffff,     0, unsigned,	false),
+  RL78_OP_REL (ABS16UW,	     2, 16, 0xffff,     0, unsigned,	false),
+  RL78_OP_REL (ABS8UL,	     1,	 8, 0xff,       0, unsigned,	false),
+  RL78_OP_REL (ABS8UW,	     1,	 8, 0xff,       0, unsigned,	false),
+  RL78_OP_REL (ABS32_REV,    4, 32, 0xffffffff, 0, dont,	false),
+  RL78_OP_REL (ABS16_REV,    2, 16, 0xffff,     0, bitfield,	false),
 
 #define STACK_REL_P(x) ((x) <= R_RL78_ABS16_REV && (x) >= R_RL78_ABS32)
 
@@ -182,29 +182,29 @@ static reloc_howto_type rl78_elf_howto_t
   EMPTY_HOWTO (0x7e),
   EMPTY_HOWTO (0x7f),
 
-  RL78_OP_REL (SYM,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPneg,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPadd,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPsub,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPmul,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPdiv,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPshla,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPshra,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPsctsize, 2, 32, 0, dont, FALSE),
+  RL78_OP_REL (SYM,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPneg,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPadd,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPsub,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPmul,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPdiv,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPshla,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPshra,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPsctsize, 0, 0, 0, 0, dont, false),
   EMPTY_HOWTO (0x89),
   EMPTY_HOWTO (0x8a),
   EMPTY_HOWTO (0x8b),
   EMPTY_HOWTO (0x8c),
-  RL78_OP_REL (OPscttop,  2, 32, 0, dont, FALSE),
+  RL78_OP_REL (OPscttop,  0, 0, 0, 0, dont, false),
   EMPTY_HOWTO (0x8e),
   EMPTY_HOWTO (0x8f),
-  RL78_OP_REL (OPand,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPor,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPxor,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPnot,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPmod,	  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPromtop,  2, 32, 0, dont, FALSE),
-  RL78_OP_REL (OPramtop,  2, 32, 0, dont, FALSE)
+  RL78_OP_REL (OPand,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPor,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPxor,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPnot,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPmod,	  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPromtop,  0, 0, 0, 0, dont, false),
+  RL78_OP_REL (OPramtop,  0, 0, 0, 0, dont, false)
 };
 
 /* Map BFD reloc types to RL78 ELF reloc types.  */
@@ -277,7 +277,7 @@ rl78_reloc_name_lookup (bfd * abfd ATTRI
 
 /* Set the howto pointer for an RL78 ELF reloc.  */
 
-static bfd_boolean
+static bool
 rl78_info_to_howto_rela (bfd *		     abfd,
 			 arelent *	     cache_ptr,
 			 Elf_Internal_Rela * dst)
@@ -291,10 +291,10 @@ rl78_info_to_howto_rela (bfd *		     abf
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = rl78_elf_howto_table + r_type;
-  return TRUE;
+  return true;
 }
 
 static bfd_vma
@@ -309,14 +309,14 @@ get_symbol_value (const char *		  name,
   if (info == NULL)
     return 0;
 
-  h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, name, false, false, true);
 
   if (h == NULL
       || (h->type != bfd_link_hash_defined
 	  && h->type != bfd_link_hash_defweak))
     {
       (*info->callbacks->undefined_symbol)
-	(info, name, input_bfd, input_section, offset, TRUE);
+	(info, name, input_bfd, input_section, offset, true);
       return 0;
     }
 
@@ -331,13 +331,13 @@ get_romstart (struct bfd_link_info *  in
 	      asection *	      sec,
 	      int		      offset)
 {
-  static bfd_boolean cached = FALSE;
-  static bfd_vma     cached_value = 0;
+  static bool cached = false;
+  static bfd_vma cached_value = 0;
 
   if (!cached)
     {
       cached_value = get_symbol_value ("_start", info, abfd, sec, offset);
-      cached = TRUE;
+      cached = true;
     }
   return cached_value;
 }
@@ -348,13 +348,13 @@ get_ramstart (struct bfd_link_info *  in
 	      asection *	      sec,
 	      int		      offset)
 {
-  static bfd_boolean cached = FALSE;
-  static bfd_vma     cached_value = 0;
+  static bool cached = false;
+  static bfd_vma cached_value = 0;
 
   if (!cached)
     {
       cached_value = get_symbol_value ("__datastart", info, abfd, sec, offset);
-      cached = TRUE;
+      cached = true;
     }
   return cached_value;
 }
@@ -363,28 +363,24 @@ get_ramstart (struct bfd_link_info *  in
 static int32_t rl78_stack [ NUM_STACK_ENTRIES ];
 static unsigned int rl78_stack_top;
 
-#define RL78_STACK_PUSH(val)			\
-  do						\
-    {						\
-      if (rl78_stack_top < NUM_STACK_ENTRIES)	\
-	rl78_stack [rl78_stack_top ++] = (val);	\
-      else					\
-	_bfd_error_handler (_("internal error: RL78 reloc stack overflow")); \
-    }						\
-  while (0)
-
-#define RL78_STACK_POP(dest)			\
-  do						\
-    {						\
-      if (rl78_stack_top > 0)			\
-	(dest) = rl78_stack [-- rl78_stack_top];\
-      else					\
-	{					\
-	  _bfd_error_handler (_("internal error: RL78 reloc stack underflow")); \
-	  (dest) = 0;				\
-	}					\
-    }						\
-  while (0)
+static inline void
+rl78_stack_push (bfd_vma val, bfd_reloc_status_type *r)
+{
+  if (rl78_stack_top < NUM_STACK_ENTRIES)
+    rl78_stack[rl78_stack_top++] = val;
+  else
+    *r = bfd_reloc_dangerous;
+}
+
+static inline bfd_vma
+rl78_stack_pop (bfd_reloc_status_type *r)
+{
+  if (rl78_stack_top > 0)
+    return rl78_stack[-- rl78_stack_top];
+  else
+    *r = bfd_reloc_dangerous;
+  return 0;
+}
 
 /* Special handling for RL78 complex relocs.  Returns the
    value of the reloc, or 0 for relocs which do not generate
@@ -393,23 +389,27 @@ static unsigned int rl78_stack_top;
 
 static bfd_vma
 rl78_compute_complex_reloc (unsigned long  r_type,
-			    bfd_vma	   symval,
-			    asection *	   input_section)
+			    bfd_vma symval,
+			    asection *input_section,
+			    bfd_reloc_status_type *r,
+			    char **error_message)
 {
   int32_t tmp1, tmp2;
-  bfd_vma relocation;
+  bfd_vma relocation = 0;
+  bfd_reloc_status_type status = bfd_reloc_ok;
 
   switch (r_type)
     {
     default:
-      return 0;
+      status = bfd_reloc_notsupported;
+      break;
 
     case R_RL78_ABS24S_PCREL:
     case R_RL78_ABS16S_PCREL:
     case R_RL78_ABS8S_PCREL:
-      RL78_STACK_POP (relocation);
+      relocation = rl78_stack_pop (&status);
       relocation -= input_section->output_section->vma + input_section->output_offset;
-      return relocation;
+      break;
 
     case R_RL78_ABS32:
     case R_RL78_ABS32_REV:
@@ -420,124 +420,175 @@ rl78_compute_complex_reloc (unsigned lon
     case R_RL78_ABS8:
     case R_RL78_ABS8U:
     case R_RL78_ABS8S:
-      RL78_STACK_POP (relocation);
-      return relocation;
+      relocation = rl78_stack_pop (&status);
+      break;
 
     case R_RL78_ABS16UL:
     case R_RL78_ABS8UL:
-      RL78_STACK_POP (relocation);
-      return relocation >> 2;
+      relocation = rl78_stack_pop (&status) >> 2;
+      break;;
 
     case R_RL78_ABS16UW:
     case R_RL78_ABS8UW:
-      RL78_STACK_POP (relocation);
-      return relocation >> 1;
+      relocation = rl78_stack_pop (&status) >> 1;
+      break;
 
       /* The rest of the relocs compute values and then push them onto the stack.  */
     case R_RL78_OPramtop:
     case R_RL78_OPromtop:
     case R_RL78_SYM:
-      RL78_STACK_PUSH (symval);
-      return 0;
+      rl78_stack_push (symval, &status);
+      break;
 
     case R_RL78_OPneg:
-      RL78_STACK_POP (tmp1);
+      tmp1 = rl78_stack_pop (&status);
       tmp1 = - tmp1;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPadd:
-      RL78_STACK_POP (tmp2);
-      RL78_STACK_POP (tmp1);
+      tmp2 = rl78_stack_pop (&status);
+      tmp1 = rl78_stack_pop (&status);
       tmp1 += tmp2;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPsub:
       /* For the expression "A - B", the assembler pushes A,
 	 then B, then OPSUB.  So the first op we pop is B, not A.  */
-      RL78_STACK_POP (tmp2);	/* B */
-      RL78_STACK_POP (tmp1);	/* A */
+      tmp2 = rl78_stack_pop (&status);	/* B */
+      tmp1 = rl78_stack_pop (&status);	/* A */
       tmp1 -= tmp2;		/* A - B */
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPmul:
-      RL78_STACK_POP (tmp2);
-      RL78_STACK_POP (tmp1);
+      tmp2 = rl78_stack_pop (&status);
+      tmp1 = rl78_stack_pop (&status);
       tmp1 *= tmp2;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPdiv:
-      RL78_STACK_POP (tmp2);
-      RL78_STACK_POP (tmp1);
-      tmp1 /= tmp2;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      tmp2 = rl78_stack_pop (&status);
+      tmp1 = rl78_stack_pop (&status);
+      if (tmp2 != 0)
+	tmp1 /= tmp2;
+      else
+	{
+	  tmp1 = 0;
+	  status = bfd_reloc_overflow;
+	}
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPshla:
-      RL78_STACK_POP (tmp2);
-      RL78_STACK_POP (tmp1);
+      tmp2 = rl78_stack_pop (&status);
+      tmp1 = rl78_stack_pop (&status);
       tmp1 <<= tmp2;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPshra:
-      RL78_STACK_POP (tmp2);
-      RL78_STACK_POP (tmp1);
+      tmp2 = rl78_stack_pop (&status);
+      tmp1 = rl78_stack_pop (&status);
       tmp1 >>= tmp2;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPsctsize:
-      RL78_STACK_PUSH (input_section->size);
-      return 0;
+      rl78_stack_push (input_section->size, &status);
+      break;
 
     case R_RL78_OPscttop:
-      RL78_STACK_PUSH (input_section->output_section->vma);
-      return 0;
+      rl78_stack_push (input_section->output_section->vma, &status);
+      break;
 
     case R_RL78_OPand:
-      RL78_STACK_POP (tmp2);
-      RL78_STACK_POP (tmp1);
+      tmp2 = rl78_stack_pop (&status);
+      tmp1 = rl78_stack_pop (&status);
       tmp1 &= tmp2;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPor:
-      RL78_STACK_POP (tmp2);
-      RL78_STACK_POP (tmp1);
+      tmp2 = rl78_stack_pop (&status);
+      tmp1 = rl78_stack_pop (&status);
       tmp1 |= tmp2;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPxor:
-      RL78_STACK_POP (tmp2);
-      RL78_STACK_POP (tmp1);
+      tmp2 = rl78_stack_pop (&status);
+      tmp1 = rl78_stack_pop (&status);
       tmp1 ^= tmp2;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPnot:
-      RL78_STACK_POP (tmp1);
+      tmp1 = rl78_stack_pop (&status);
       tmp1 = ~ tmp1;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      rl78_stack_push (tmp1, &status);
+      break;
 
     case R_RL78_OPmod:
-      RL78_STACK_POP (tmp2);
-      RL78_STACK_POP (tmp1);
-      tmp1 %= tmp2;
-      RL78_STACK_PUSH (tmp1);
-      return 0;
+      tmp2 = rl78_stack_pop (&status);
+      tmp1 = rl78_stack_pop (&status);
+      if (tmp2 != 0)
+	tmp1 %= tmp2;
+      else
+	{
+	  tmp1 = 0;
+	  status = bfd_reloc_overflow;
+	}
+      rl78_stack_push (tmp1, &status);
+      break;
+    }
+
+  if (r)
+    {
+      if (status == bfd_reloc_dangerous)
+	*error_message = (_("RL78 reloc stack overflow/underflow"));
+      else if (status == bfd_reloc_overflow)
+	{
+	  status = bfd_reloc_dangerous;
+	  *error_message = (_("RL78 reloc divide by zero"));
+	}
+      *r = status;
     }
+  return relocation;
 }
 
-#undef RL78_STACK_PUSH
-#undef RL78_STACK_POP
+/* Check whether RELOCATION overflows a relocation field described by
+   HOWTO.  */
+
+static bfd_reloc_status_type
+check_overflow (reloc_howto_type *howto, bfd_vma relocation)
+{
+  switch (howto->complain_on_overflow)
+    {
+    case complain_overflow_dont:
+      break;
+
+    case complain_overflow_bitfield:
+      if ((bfd_signed_vma) relocation < -(1LL << (howto->bitsize - 1))
+	  || (bfd_signed_vma) relocation >= 1LL << howto->bitsize)
+	return bfd_reloc_overflow;
+      break;
 
-#define OP(i)      (contents[reloc->address + (i)])
+    case complain_overflow_signed:
+      if ((bfd_signed_vma) relocation < -(1LL << (howto->bitsize - 1))
+	  || (bfd_signed_vma) relocation >= 1LL << (howto->bitsize - 1))
+	return bfd_reloc_overflow;
+      break;
+
+    case complain_overflow_unsigned:
+      if (relocation >= 1ULL << howto->bitsize)
+	return bfd_reloc_overflow;
+      break;
+    }
+  return bfd_reloc_ok;
+}
 
 static bfd_reloc_status_type
 rl78_special_reloc (bfd *      input_bfd,
@@ -546,7 +597,7 @@ rl78_special_reloc (bfd *      input_bfd
 		    void *     data,
 		    asection * input_section,
 		    bfd *      output_bfd ATTRIBUTE_UNUSED,
-		    char **    error_message ATTRIBUTE_UNUSED)
+		    char **    error_message)
 {
   bfd_reloc_status_type	 r = bfd_reloc_ok;
   bfd_vma		 relocation = 0;
@@ -575,69 +626,45 @@ rl78_special_reloc (bfd *      input_bfd
     }
 
   /* Get the value of the relocation.  */
-  relocation = rl78_compute_complex_reloc (r_type, relocation, input_section);
+  relocation = rl78_compute_complex_reloc (r_type, relocation, input_section,
+					   &r, error_message);
 
-  /* If the relocation alters the contents of the section then apply it now.
-     Note - since this function is called from
-     bfd_generic_get_relocated_section_contents via bfd_perform_relocation,
-     and not from the linker, we do not perform any range checking.  The
-     clients who are calling us are only interested in some relocated section
-     contents, and not any linkage problems that might occur later.  */
-  switch (r_type)
+  if (STACK_REL_P (r_type))
     {
-    case R_RL78_ABS32:
-      OP (0) = relocation;
-      OP (1) = relocation >> 8;
-      OP (2) = relocation >> 16;
-      OP (3) = relocation >> 24;
-      break;
+      bfd_size_type limit;
+      unsigned int nbytes;
 
-    case R_RL78_ABS32_REV:
-      OP (3) = relocation;
-      OP (2) = relocation >> 8;
-      OP (1) = relocation >> 16;
-      OP (0) = relocation >> 24;
-      break;
+      if (r == bfd_reloc_ok)
+	r = check_overflow (reloc->howto, relocation);
 
-    case R_RL78_ABS24S_PCREL:
-    case R_RL78_ABS24S:
-      OP (0) = relocation;
-      OP (1) = relocation >> 8;
-      OP (2) = relocation >> 16;
-      break;
-
-    case R_RL78_ABS16_REV:
-      OP (1) = relocation;
-      OP (0) = relocation >> 8;
-      break;
-
-    case R_RL78_ABS16S_PCREL:
-    case R_RL78_ABS16:
-    case R_RL78_ABS16S:
-    case R_RL78_ABS16U:
-    case R_RL78_ABS16UL:
-    case R_RL78_ABS16UW:
-      OP (0) = relocation;
-      OP (1) = relocation >> 8;
-      break;
+      if (r_type == R_RL78_ABS16_REV)
+	relocation = ((relocation & 0xff) << 8) | ((relocation >> 8) & 0xff);
+      else if (r_type == R_RL78_ABS32_REV)
+	relocation = (((relocation & 0xff) << 24)
+		      | ((relocation & 0xff00) << 8)
+		      | ((relocation >> 8) & 0xff00)
+		      | ((relocation >> 24) & 0xff));
 
-    case R_RL78_ABS8S_PCREL:
-    case R_RL78_ABS8:
-    case R_RL78_ABS8U:
-    case R_RL78_ABS8UL:
-    case R_RL78_ABS8UW:
-    case R_RL78_ABS8S:
-      OP (0) = relocation;
-      break;
+      limit = bfd_get_section_limit_octets (input_bfd, input_section);
+      nbytes = reloc->howto->bitsize / 8;
+      if (reloc->address < limit
+	  && nbytes <= limit - reloc->address)
+	{
+	  unsigned int i;
 
-    default:
-      break;
+	  for (i = 0; i < nbytes; i++)
+	    {
+	      contents[reloc->address + i] = relocation;
+	      relocation >>= 8;
+	    }
+	}
+      else
+	r = bfd_reloc_outofrange;
     }
 
   return r;
 }
 
-#undef  OP
 #define OP(i)      (contents[rel->r_offset + (i)])
 
 /* Relocate an RL78 ELF section.
@@ -673,7 +700,7 @@ rl78_special_reloc (bfd *      input_bfd
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 rl78_elf_relocate_section
     (bfd *		     output_bfd,
      struct bfd_link_info *  info,
@@ -689,25 +716,27 @@ rl78_elf_relocate_section
   Elf_Internal_Rela *		rel;
   Elf_Internal_Rela *		relend;
   asection *splt;
+  bool ret;
 
   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (input_bfd);
   relend     = relocs + input_section->reloc_count;
 
   splt = elf_hash_table (info)->splt;
-
+  ret = true;
   for (rel = relocs; rel < relend; rel ++)
     {
-      reloc_howto_type *	   howto;
-      unsigned long		   r_symndx;
-      Elf_Internal_Sym *	   sym;
-      asection *		   sec;
-      struct elf_link_hash_entry * h;
-      bfd_vma			   relocation;
-      bfd_reloc_status_type	   r;
-      const char *		   name = NULL;
-      bfd_boolean		   unresolved_reloc = TRUE;
-      int			   r_type;
+      reloc_howto_type *howto;
+      unsigned long r_symndx;
+      Elf_Internal_Sym *sym;
+      asection *sec;
+      struct elf_link_hash_entry *h;
+      bfd_vma relocation;
+      bfd_reloc_status_type r;
+      const char *name = NULL;
+      bool unresolved_reloc = true;
+      int r_type;
+      char *error_message;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       r_symndx = ELF32_R_SYM (rel->r_info);
@@ -730,8 +759,8 @@ rl78_elf_relocate_section
 	}
       else
 	{
-	  bfd_boolean warned ATTRIBUTE_UNUSED;
-	  bfd_boolean ignored ATTRIBUTE_UNUSED;
+	  bool warned ATTRIBUTE_UNUSED;
+	  bool ignored ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes, h,
@@ -823,326 +852,312 @@ rl78_elf_relocate_section
 	}
 
       r = bfd_reloc_ok;
+      if (howto->bitsize != 0
+	  && (rel->r_offset >= input_section->size
+	      || ((howto->bitsize + 7u) / 8
+		  > input_section->size - rel->r_offset)))
+	r = bfd_reloc_outofrange;
+      else
+	switch (r_type)
+	  {
+	  case R_RL78_NONE:
+	    break;
 
-#define RANGE(a,b) if (a > (long) relocation || (long) relocation > b) r = bfd_reloc_overflow
-
-      /* Opcode relocs are always big endian.  Data relocs are bi-endian.  */
-      switch (r_type)
-	{
-	case R_RL78_NONE:
-	  break;
-
-	case R_RL78_RH_RELAX:
-	  break;
-
-	case R_RL78_DIR8S_PCREL:
-	  RANGE (-128, 127);
-	  OP (0) = relocation;
-	  break;
-
-	case R_RL78_DIR8S:
-	  RANGE (-128, 255);
-	  OP (0) = relocation;
-	  break;
-
-	case R_RL78_DIR8U:
-	  RANGE (0, 255);
-	  OP (0) = relocation;
-	  break;
-
-	case R_RL78_DIR16S_PCREL:
-	  RANGE (-32768, 32767);
-	  OP (0) = relocation;
-	  OP (1) = relocation >> 8;
-	  break;
-
-	case R_RL78_DIR16S:
-	  if ((relocation & 0xf0000) == 0xf0000)
-	    relocation &= 0xffff;
-	  RANGE (-32768, 65535);
-	  OP (0) = relocation;
-	  OP (1) = relocation >> 8;
-	  break;
-
-	case R_RL78_DIR16U:
-	  RANGE (0, 65536);
-	  OP (0) = relocation;
-	  OP (1) = relocation >> 8;
-	  break;
-
-	case R_RL78_DIR16:
-	  RANGE (-32768, 65536);
-	  OP (0) = relocation;
-	  OP (1) = relocation >> 8;
-	  break;
-
-	case R_RL78_DIR16_REV:
-	  RANGE (-32768, 65536);
-	  OP (1) = relocation;
-	  OP (0) = relocation >> 8;
-	  break;
-
-	case R_RL78_DIR3U_PCREL:
-	  RANGE (3, 10);
-	  OP (0) &= 0xf8;
-	  OP (0) |= relocation & 0x07;
-	  break;
-
-	case R_RL78_DIR24S_PCREL:
-	  RANGE (-0x800000, 0x7fffff);
-	  OP (0) = relocation;
-	  OP (1) = relocation >> 8;
-	  OP (2) = relocation >> 16;
-	  break;
-
-	case R_RL78_DIR24S:
-	  RANGE (-0x800000, 0x7fffff);
-	  OP (0) = relocation;
-	  OP (1) = relocation >> 8;
-	  OP (2) = relocation >> 16;
-	  break;
-
-	case R_RL78_DIR32:
-	  OP (0) = relocation;
-	  OP (1) = relocation >> 8;
-	  OP (2) = relocation >> 16;
-	  OP (3) = relocation >> 24;
-	  break;
-
-	case R_RL78_DIR32_REV:
-	  OP (3) = relocation;
-	  OP (2) = relocation >> 8;
-	  OP (1) = relocation >> 16;
-	  OP (0) = relocation >> 24;
-	  break;
-
-	case R_RL78_RH_SFR:
-	  RANGE (0xfff00, 0xfffff);
-	  OP (0) = relocation & 0xff;
-	  break;
-
-	case R_RL78_RH_SADDR:
-	  RANGE (0xffe20, 0xfff1f);
-	  OP (0) = relocation & 0xff;
-	  break;
-
-	  /* Complex reloc handling:  */
-	case R_RL78_ABS32:
-	case R_RL78_ABS32_REV:
-	case R_RL78_ABS24S_PCREL:
-	case R_RL78_ABS24S:
-	case R_RL78_ABS16:
-	case R_RL78_ABS16_REV:
-	case R_RL78_ABS16S_PCREL:
-	case R_RL78_ABS16S:
-	case R_RL78_ABS16U:
-	case R_RL78_ABS16UL:
-	case R_RL78_ABS16UW:
-	case R_RL78_ABS8:
-	case R_RL78_ABS8U:
-	case R_RL78_ABS8UL:
-	case R_RL78_ABS8UW:
-	case R_RL78_ABS8S_PCREL:
-	case R_RL78_ABS8S:
-	case R_RL78_OPneg:
-	case R_RL78_OPadd:
-	case R_RL78_OPsub:
-	case R_RL78_OPmul:
-	case R_RL78_OPdiv:
-	case R_RL78_OPshla:
-	case R_RL78_OPshra:
-	case R_RL78_OPsctsize:
-	case R_RL78_OPscttop:
-	case R_RL78_OPand:
-	case R_RL78_OPor:
-	case R_RL78_OPxor:
-	case R_RL78_OPnot:
-	case R_RL78_OPmod:
-	  relocation = rl78_compute_complex_reloc (r_type, 0, input_section);
-
-	  switch (r_type)
-	    {
-	    case R_RL78_ABS32:
-	      OP (0) = relocation;
-	      OP (1) = relocation >> 8;
-	      OP (2) = relocation >> 16;
-	      OP (3) = relocation >> 24;
-	      break;
-
-	    case R_RL78_ABS32_REV:
-	      OP (3) = relocation;
-	      OP (2) = relocation >> 8;
-	      OP (1) = relocation >> 16;
-	      OP (0) = relocation >> 24;
-	      break;
-
-	    case R_RL78_ABS24S_PCREL:
-	    case R_RL78_ABS24S:
-	      RANGE (-0x800000, 0x7fffff);
-	      OP (0) = relocation;
-	      OP (1) = relocation >> 8;
-	      OP (2) = relocation >> 16;
-	      break;
-
-	    case R_RL78_ABS16:
-	      RANGE (-32768, 65535);
-	      OP (0) = relocation;
-	      OP (1) = relocation >> 8;
-	      break;
-
-	    case R_RL78_ABS16_REV:
-	      RANGE (-32768, 65535);
-	      OP (1) = relocation;
-	      OP (0) = relocation >> 8;
-	      break;
-
-	    case R_RL78_ABS16S_PCREL:
-	    case R_RL78_ABS16S:
-	      RANGE (-32768, 32767);
-	      OP (0) = relocation;
-	      OP (1) = relocation >> 8;
-	      break;
-
-	    case R_RL78_ABS16U:
-	    case R_RL78_ABS16UL:
-	    case R_RL78_ABS16UW:
-	      RANGE (0, 65536);
-	      OP (0) = relocation;
-	      OP (1) = relocation >> 8;
-	      break;
-
-	    case R_RL78_ABS8:
-	      RANGE (-128, 255);
-	      OP (0) = relocation;
-	      break;
-
-	    case R_RL78_ABS8U:
-	    case R_RL78_ABS8UL:
-	    case R_RL78_ABS8UW:
-	      RANGE (0, 255);
-	      OP (0) = relocation;
-	      break;
-
-	    case R_RL78_ABS8S_PCREL:
-	    case R_RL78_ABS8S:
-	      RANGE (-128, 127);
-	      OP (0) = relocation;
-	      break;
+	  case R_RL78_RH_RELAX:
+	    break;
 
-	    default:
-	      break;
-	    }
-	  break;
+	  case R_RL78_DIR8S_PCREL:
+	    OP (0) = relocation;
+	    break;
+
+	  case R_RL78_DIR8S:
+	    OP (0) = relocation;
+	    break;
+
+	  case R_RL78_DIR8U:
+	    OP (0) = relocation;
+	    break;
+
+	  case R_RL78_DIR16S_PCREL:
+	    OP (0) = relocation;
+	    OP (1) = relocation >> 8;
+	    break;
+
+	  case R_RL78_DIR16S:
+	    if ((relocation & 0xf0000) == 0xf0000)
+	      relocation &= 0xffff;
+	    OP (0) = relocation;
+	    OP (1) = relocation >> 8;
+	    break;
+
+	  case R_RL78_DIR16U:
+	    OP (0) = relocation;
+	    OP (1) = relocation >> 8;
+	    break;
+
+	  case R_RL78_DIR16:
+	    OP (0) = relocation;
+	    OP (1) = relocation >> 8;
+	    break;
+
+	  case R_RL78_DIR16_REV:
+	    OP (1) = relocation;
+	    OP (0) = relocation >> 8;
+	    break;
+
+	  case R_RL78_DIR3U_PCREL:
+	    OP (0) &= 0xf8;
+	    OP (0) |= relocation & 0x07;
+	    /* Map [3, 10] to [0, 7].  The code below using howto
+	       bitsize will check for unsigned overflow.  */
+	    relocation -= 3;
+	    break;
+
+	  case R_RL78_DIR24S_PCREL:
+	    OP (0) = relocation;
+	    OP (1) = relocation >> 8;
+	    OP (2) = relocation >> 16;
+	    break;
+
+	  case R_RL78_DIR24S:
+	    OP (0) = relocation;
+	    OP (1) = relocation >> 8;
+	    OP (2) = relocation >> 16;
+	    break;
+
+	  case R_RL78_DIR32:
+	    OP (0) = relocation;
+	    OP (1) = relocation >> 8;
+	    OP (2) = relocation >> 16;
+	    OP (3) = relocation >> 24;
+	    break;
+
+	  case R_RL78_DIR32_REV:
+	    OP (3) = relocation;
+	    OP (2) = relocation >> 8;
+	    OP (1) = relocation >> 16;
+	    OP (0) = relocation >> 24;
+	    break;
+
+	  case R_RL78_RH_SFR:
+	    relocation -= 0xfff00;
+	    OP (0) = relocation;
+	    break;
+
+	  case R_RL78_RH_SADDR:
+	    relocation -= 0xffe20;
+	    OP (0) = relocation;
+	    break;
+
+	    /* Complex reloc handling:  */
+	  case R_RL78_ABS32:
+	  case R_RL78_ABS32_REV:
+	  case R_RL78_ABS24S_PCREL:
+	  case R_RL78_ABS24S:
+	  case R_RL78_ABS16:
+	  case R_RL78_ABS16_REV:
+	  case R_RL78_ABS16S_PCREL:
+	  case R_RL78_ABS16S:
+	  case R_RL78_ABS16U:
+	  case R_RL78_ABS16UL:
+	  case R_RL78_ABS16UW:
+	  case R_RL78_ABS8:
+	  case R_RL78_ABS8U:
+	  case R_RL78_ABS8UL:
+	  case R_RL78_ABS8UW:
+	  case R_RL78_ABS8S_PCREL:
+	  case R_RL78_ABS8S:
+	  case R_RL78_OPneg:
+	  case R_RL78_OPadd:
+	  case R_RL78_OPsub:
+	  case R_RL78_OPmul:
+	  case R_RL78_OPdiv:
+	  case R_RL78_OPshla:
+	  case R_RL78_OPshra:
+	  case R_RL78_OPsctsize:
+	  case R_RL78_OPscttop:
+	  case R_RL78_OPand:
+	  case R_RL78_OPor:
+	  case R_RL78_OPxor:
+	  case R_RL78_OPnot:
+	  case R_RL78_OPmod:
+	    relocation = rl78_compute_complex_reloc (r_type, 0, input_section,
+						     &r, &error_message);
 
-	case R_RL78_SYM:
-	  if (r_symndx < symtab_hdr->sh_info)
-	    relocation = sec->output_section->vma + sec->output_offset
-	      + sym->st_value + rel->r_addend;
-	  else if (h != NULL
-		   && (h->root.type == bfd_link_hash_defined
-		       || h->root.type == bfd_link_hash_defweak))
-	    relocation = h->root.u.def.value
-	      + sec->output_section->vma
-	      + sec->output_offset
-	      + rel->r_addend;
-	  else
-	    {
-	      relocation = 0;
-	      if (h->root.type != bfd_link_hash_undefweak)
-		_bfd_error_handler
-		  (_("warning: RL78_SYM reloc with an unknown symbol"));
-	    }
-	  (void) rl78_compute_complex_reloc (r_type, relocation, input_section);
-	  break;
+	    switch (r_type)
+	      {
+	      case R_RL78_ABS32:
+		OP (0) = relocation;
+		OP (1) = relocation >> 8;
+		OP (2) = relocation >> 16;
+		OP (3) = relocation >> 24;
+		break;
+
+	      case R_RL78_ABS32_REV:
+		OP (3) = relocation;
+		OP (2) = relocation >> 8;
+		OP (1) = relocation >> 16;
+		OP (0) = relocation >> 24;
+		break;
+
+	      case R_RL78_ABS24S_PCREL:
+	      case R_RL78_ABS24S:
+		OP (0) = relocation;
+		OP (1) = relocation >> 8;
+		OP (2) = relocation >> 16;
+		break;
+
+	      case R_RL78_ABS16:
+		OP (0) = relocation;
+		OP (1) = relocation >> 8;
+		break;
+
+	      case R_RL78_ABS16_REV:
+		OP (1) = relocation;
+		OP (0) = relocation >> 8;
+		break;
+
+	      case R_RL78_ABS16S_PCREL:
+	      case R_RL78_ABS16S:
+		OP (0) = relocation;
+		OP (1) = relocation >> 8;
+		break;
+
+	      case R_RL78_ABS16U:
+	      case R_RL78_ABS16UL:
+	      case R_RL78_ABS16UW:
+		OP (0) = relocation;
+		OP (1) = relocation >> 8;
+		break;
+
+	      case R_RL78_ABS8:
+		OP (0) = relocation;
+		break;
+
+	      case R_RL78_ABS8U:
+	      case R_RL78_ABS8UL:
+	      case R_RL78_ABS8UW:
+		OP (0) = relocation;
+		break;
+
+	      case R_RL78_ABS8S_PCREL:
+	      case R_RL78_ABS8S:
+		OP (0) = relocation;
+		break;
 
-	case R_RL78_OPromtop:
-	  relocation = get_romstart (info, input_bfd, input_section, rel->r_offset);
-	  (void) rl78_compute_complex_reloc (r_type, relocation, input_section);
-	  break;
+	      default:
+		break;
+	      }
+	    break;
 
-	case R_RL78_OPramtop:
-	  relocation = get_ramstart (info, input_bfd, input_section, rel->r_offset);
-	  (void) rl78_compute_complex_reloc (r_type, relocation, input_section);
-	  break;
+	  case R_RL78_SYM:
+	    if (r_symndx < symtab_hdr->sh_info)
+	      relocation = sec->output_section->vma + sec->output_offset
+		+ sym->st_value + rel->r_addend;
+	    else if (h != NULL
+		     && (h->root.type == bfd_link_hash_defined
+			 || h->root.type == bfd_link_hash_defweak))
+	      relocation = h->root.u.def.value
+		+ sec->output_section->vma
+		+ sec->output_offset
+		+ rel->r_addend;
+	    else
+	      {
+		relocation = 0;
+		if (h->root.type != bfd_link_hash_undefweak)
+		  _bfd_error_handler
+		    (_("warning: RL78_SYM reloc with an unknown symbol"));
+	      }
+	    (void) rl78_compute_complex_reloc (r_type, relocation, input_section,
+					       &r, &error_message);
+	    break;
+
+	  case R_RL78_OPromtop:
+	    relocation = get_romstart (info, input_bfd, input_section,
+				       rel->r_offset);
+	    (void) rl78_compute_complex_reloc (r_type, relocation, input_section,
+					       &r, &error_message);
+	    break;
+
+	  case R_RL78_OPramtop:
+	    relocation = get_ramstart (info, input_bfd, input_section,
+				       rel->r_offset);
+	    (void) rl78_compute_complex_reloc (r_type, relocation, input_section,
+					       &r, &error_message);
+	    break;
+
+	  default:
+	    r = bfd_reloc_notsupported;
+	    break;
+	  }
 
-	default:
-	  r = bfd_reloc_notsupported;
-	  break;
-	}
+      if (r == bfd_reloc_ok)
+	r = check_overflow (howto, relocation);
 
       if (r != bfd_reloc_ok)
 	{
-	  const char * msg = NULL;
-
 	  switch (r)
 	    {
 	    case bfd_reloc_overflow:
-	      /* Catch the case of a missing function declaration
-		 and emit a more helpful error message.  */
-	      if (r_type == R_RL78_DIR24S_PCREL)
-		/* xgettext:c-format */
-		msg = _("%pB(%pA): error: call to undefined function '%s'");
-	      else
-		(*info->callbacks->reloc_overflow)
-		  (info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0,
-		   input_bfd, input_section, rel->r_offset);
+	      (*info->callbacks->reloc_overflow)
+		(info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0,
+		 input_bfd, input_section, rel->r_offset);
 	      break;
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
-	      break;
-
-	    case bfd_reloc_other:
-	      /* xgettext:c-format */
-	      msg = _("%pB(%pA): warning: unaligned access to symbol '%s' in the small data area");
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
-	      /* xgettext:c-format */
-	      msg = _("%pB(%pA): internal error: out of range error");
+	       /* xgettext:c-format */
+	      (*info->callbacks->einfo)
+		(_("%H: %s out of range\n"),
+		 input_bfd, input_section, rel->r_offset, howto->name);
 	      break;
 
 	    case bfd_reloc_notsupported:
 	      /* xgettext:c-format */
-	      msg = _("%pB(%pA): internal error: unsupported relocation error");
+	      (*info->callbacks->einfo)
+		(_("%H: relocation type %u is not supported\n"),
+		 input_bfd, input_section, rel->r_offset, r_type);
 	      break;
 
 	    case bfd_reloc_dangerous:
-	      /* xgettext:c-format */
-	      msg = _("%pB(%pA): internal error: dangerous relocation");
+	      (*info->callbacks->reloc_dangerous)
+		(info, error_message, input_bfd, input_section, rel->r_offset);
 	      break;
 
 	    default:
 	      /* xgettext:c-format */
-	      msg = _("%pB(%pA): internal error: unknown error");
+	      (*info->callbacks->einfo)
+		(_("%H: relocation %s returns an unrecognized value %x\n"),
+		 input_bfd, input_section, rel->r_offset, howto->name, r);
 	      break;
 	    }
-
-	  if (msg)
-	    _bfd_error_handler (msg, input_bfd, input_section, name);
+	  ret = false;
 	}
     }
 
-  return TRUE;
+  return ret;
 }
 
 /* Function to set the ELF flag bits.  */
 
-static bfd_boolean
+static bool
 rl78_elf_set_private_flags (bfd * abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
-static bfd_boolean no_warn_mismatch = FALSE;
+static bool no_warn_mismatch = false;
 
-void bfd_elf32_rl78_set_target_flags (bfd_boolean);
+void bfd_elf32_rl78_set_target_flags (bool);
 
 void
-bfd_elf32_rl78_set_target_flags (bfd_boolean user_no_warn_mismatch)
+bfd_elf32_rl78_set_target_flags (bool user_no_warn_mismatch)
 {
   no_warn_mismatch = user_no_warn_mismatch;
 }
@@ -1162,13 +1177,13 @@ rl78_cpu_name (flagword flags)
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 rl78_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword new_flags;
   flagword old_flags;
-  bfd_boolean error = FALSE;
+  bool error = false;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
@@ -1176,7 +1191,7 @@ rl78_elf_merge_private_bfd_data (bfd *ib
   if (!elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
   else if (old_flags != new_flags)
@@ -1198,7 +1213,7 @@ rl78_elf_merge_private_bfd_data (bfd *ib
 		     If the output is set to "any" this means that it is
 		     a G14 file that does not use hardware multiply/divide,
 		     but that is still incompatible with the G10 ABI.  */
-		  error = TRUE;
+		  error = true;
 
 		  _bfd_error_handler
 		    /* xgettext:c-format */
@@ -1215,7 +1230,7 @@ rl78_elf_merge_private_bfd_data (bfd *ib
 	    }
 	  else
 	    {
-	      error = TRUE;
+	      error = true;
 
 	      _bfd_error_handler
 		/* xgettext:c-format */
@@ -1238,14 +1253,14 @@ rl78_elf_merge_private_bfd_data (bfd *ib
 	    /* xgettext:c-format */
 	    _bfd_error_handler (_("- %pB is 64-bit, %pB is not"),
 				ibfd, obfd);
-	  error = TRUE;
+	  error = true;
 	}
     }
 
   return !error;
 }
 
-static bfd_boolean
+static bool
 rl78_elf_print_private_bfd_data (bfd * abfd, void * ptr)
 {
   FILE * file = (FILE *) ptr;
@@ -1266,7 +1281,7 @@ rl78_elf_print_private_bfd_data (bfd * a
     fprintf (file, _(" [64-bit doubles]"));
 
   fputc ('\n', file);
-  return TRUE;
+  return true;
 }
 
 /* Return the MACH for an e_flags value.  */
@@ -1277,12 +1292,12 @@ elf32_rl78_machine (bfd * abfd ATTRIBUTE
   return bfd_mach_rl78;
 }
 
-static bfd_boolean
+static bool
 rl78_elf_object_p (bfd * abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_rl78,
 			     elf32_rl78_machine (abfd));
-  return TRUE;
+  return true;
 }
 
 /* support PLT for 16-bit references to 24-bit functions.  */
@@ -1290,7 +1305,7 @@ rl78_elf_object_p (bfd * abfd)
 /* We support 16-bit pointers to code above 64k by generating a thunk
    below 64k containing a JMP instruction to the final address.  */
 
-static bfd_boolean
+static bool
 rl78_elf_check_relocs
     (bfd *		       abfd,
      struct bfd_link_info *    info,
@@ -1306,7 +1321,7 @@ rl78_elf_check_relocs
   bfd *dynobj;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -1350,7 +1365,7 @@ rl78_elf_check_relocs
 	      elf_hash_table (info)->splt = splt;
 	      if (splt == NULL
 		  || !bfd_set_section_alignment (splt, 1))
-		return FALSE;
+		return false;
 	    }
 
 	  if (h != NULL)
@@ -1365,7 +1380,7 @@ rl78_elf_check_relocs
 		  size = symtab_hdr->sh_info * sizeof (bfd_vma);
 		  local_plt_offsets = (bfd_vma *) bfd_alloc (abfd, size);
 		  if (local_plt_offsets == NULL)
-		    return FALSE;
+		    return false;
 		  elf_local_got_offsets (abfd) = local_plt_offsets;
 
 		  for (i = 0; i < symtab_hdr->sh_info; i++)
@@ -1383,12 +1398,12 @@ rl78_elf_check_relocs
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This must exist if dynobj is ever set.  */
 
-static bfd_boolean
+static bool
 rl78_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
 				  struct bfd_link_info *info)
 {
@@ -1396,7 +1411,7 @@ rl78_elf_finish_dynamic_sections (bfd *a
   asection *splt;
 
   if (!elf_hash_table (info)->dynamic_sections_created)
-    return TRUE;
+    return true;
 
   /* As an extra sanity check, verify that all plt entries have been
      filled in.  However, relaxing might have changed the relocs so
@@ -1405,7 +1420,7 @@ rl78_elf_finish_dynamic_sections (bfd *a
      called before relaxation.  */
 
   if (info->relax_trip > 0)
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   splt = elf_hash_table (info)->splt;
@@ -1421,10 +1436,10 @@ rl78_elf_finish_dynamic_sections (bfd *a
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 rl78_elf_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 			       struct bfd_link_info *info)
 {
@@ -1432,20 +1447,20 @@ rl78_elf_always_size_sections (bfd *outp
   asection *splt;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   if (dynobj == NULL)
-    return TRUE;
+    return true;
 
   splt = elf_hash_table (info)->splt;
   BFD_ASSERT (splt != NULL);
 
   splt->contents = (bfd_byte *) bfd_zalloc (dynobj, splt->size);
   if (splt->contents == NULL)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -1458,10 +1473,10 @@ rl78_elf_always_size_sections (bfd *outp
 struct relax_plt_data
 {
   asection *splt;
-  bfd_boolean *again;
+  bool *again;
 };
 
-static bfd_boolean
+static bool
 rl78_relax_plt_check (struct elf_link_hash_entry *h, void * xdata)
 {
   struct relax_plt_data *data = (struct relax_plt_data *) xdata;
@@ -1482,17 +1497,17 @@ rl78_relax_plt_check (struct elf_link_ha
 	{
 	  h->plt.offset = -1;
 	  data->splt->size -= 4;
-	  *data->again = TRUE;
+	  *data->again = true;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* A subroutine of rl78_elf_relax_section.  If the global symbol H
    previously had a plt entry, give it a new entry offset.  */
 
-static bfd_boolean
+static bool
 rl78_relax_plt_realloc (struct elf_link_hash_entry *h, void * xdata)
 {
   bfd_vma *entry = (bfd_vma *) xdata;
@@ -1503,32 +1518,32 @@ rl78_relax_plt_realloc (struct elf_link_
       *entry += 4;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 rl78_elf_relax_plt_section (bfd *dynobj,
 			    asection *splt,
 			    struct bfd_link_info *info,
-			    bfd_boolean *again)
+			    bool *again)
 {
   struct relax_plt_data relax_plt_data;
   bfd *ibfd;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* We only relax the .plt section at the moment.  */
   if (dynobj != elf_hash_table (info)->dynobj
       || strcmp (splt->name, ".plt") != 0)
-    return TRUE;
+    return true;
 
   /* Quick check for an empty plt.  */
   if (splt->size == 0)
-    return TRUE;
+    return true;
 
   /* Map across all global symbols; see which ones happen to
      fall in the low 64k.  */
@@ -1558,7 +1573,7 @@ rl78_elf_relax_plt_section (bfd *dynobj,
 					    symtab_hdr->sh_info, 0,
 					    NULL, NULL, NULL);
 	  if (isymbuf == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       for (idx = 0; idx < symtab_hdr->sh_info; ++idx)
@@ -1587,7 +1602,7 @@ rl78_elf_relax_plt_section (bfd *dynobj,
 	    {
 	      local_plt_offsets[idx] = -1;
 	      splt->size -= 4;
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -1631,12 +1646,12 @@ rl78_elf_relax_plt_section (bfd *dynobj,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 elf32_rl78_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, int count,
 			       Elf_Internal_Rela *alignment_rel, int force_snip)
 {
@@ -1668,7 +1683,7 @@ elf32_rl78_relax_delete_bytes (bfd *abfd
   irel = elf_section_data (sec)->relocs;
   if (irel == NULL)
     {
-      _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
+      _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, true);
       irel = elf_section_data (sec)->relocs;
     }
 
@@ -1755,7 +1770,7 @@ elf32_rl78_relax_delete_bytes (bfd *abfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Used to sort relocs by address.  If relocs have the same address,
@@ -1766,34 +1781,34 @@ static void
 reloc_bubblesort (Elf_Internal_Rela * r, int count)
 {
   int i;
-  bfd_boolean again;
-  bfd_boolean swappit;
+  bool again;
+  bool swappit;
 
   /* This is almost a classic bubblesort.  It's the slowest sort, but
      we're taking advantage of the fact that the relocations are
      mostly in order already (the assembler emits them that way) and
      we need relocs with the same address to remain in the same
      relative order.  */
-  again = TRUE;
+  again = true;
   while (again)
     {
-      again = FALSE;
+      again = false;
       for (i = 0; i < count - 1; i ++)
 	{
 	  if (r[i].r_offset > r[i + 1].r_offset)
-	    swappit = TRUE;
+	    swappit = true;
 	  else if (r[i].r_offset < r[i + 1].r_offset)
-	    swappit = FALSE;
+	    swappit = false;
 	  else if (ELF32_R_TYPE (r[i + 1].r_info) == R_RL78_RH_RELAX
 		   && (r[i + 1].r_addend & RL78_RELAXA_ALIGN))
-	    swappit = TRUE;
+	    swappit = true;
 	  else if (ELF32_R_TYPE (r[i + 1].r_info) == R_RL78_RH_RELAX
 		   && (r[i + 1].r_addend & RL78_RELAXA_ELIGN)
 		   && !(ELF32_R_TYPE (r[i].r_info) == R_RL78_RH_RELAX
 			&& (r[i].r_addend & RL78_RELAXA_ALIGN)))
-	    swappit = TRUE;
+	    swappit = true;
 	  else
-	    swappit = FALSE;
+	    swappit = false;
 
 	  if (swappit)
 	    {
@@ -1807,7 +1822,7 @@ reloc_bubblesort (Elf_Internal_Rela * r,
 		 most of the O(n^2) behavior for our cases.  */
 	      if (i > 0)
 		i -= 2;
-	      again = TRUE;
+	      again = true;
 	    }
 	}
     }
@@ -1822,7 +1837,7 @@ static bfd_vma
 rl78_offset_for_reloc (bfd *			abfd,
 		       Elf_Internal_Rela *	rel,
 		       Elf_Internal_Shdr *	symtab_hdr,
-		       Elf_External_Sym_Shndx * shndx_buf ATTRIBUTE_UNUSED,
+		       bfd_byte *		shndx_buf ATTRIBUTE_UNUSED,
 		       Elf_Internal_Sym *	intsyms,
 		       Elf_Internal_Rela **	lrel,
 		       bfd *			input_bfd,
@@ -1917,17 +1932,20 @@ rl78_offset_for_reloc (bfd *			abfd,
       switch (r_type)
 	{
 	case R_RL78_SYM:
-	  (void) rl78_compute_complex_reloc (r_type, symval, input_section);
+	  (void) rl78_compute_complex_reloc (r_type, symval, input_section,
+					     NULL, NULL);
 	  break;
 
 	case R_RL78_OPromtop:
 	  symval = get_romstart (info, input_bfd, input_section, rel->r_offset);
-	  (void) rl78_compute_complex_reloc (r_type, symval, input_section);
+	  (void) rl78_compute_complex_reloc (r_type, symval, input_section,
+					     NULL, NULL);
 	  break;
 
 	case R_RL78_OPramtop:
 	  symval = get_ramstart (info, input_bfd, input_section, rel->r_offset);
-	  (void) rl78_compute_complex_reloc (r_type, symval, input_section);
+	  (void) rl78_compute_complex_reloc (r_type, symval, input_section,
+					     NULL, NULL);
 	  break;
 
 	case R_RL78_OPneg:
@@ -1944,7 +1962,8 @@ rl78_offset_for_reloc (bfd *			abfd,
 	case R_RL78_OPxor:
 	case R_RL78_OPnot:
 	case R_RL78_OPmod:
-	  (void) rl78_compute_complex_reloc (r_type, 0, input_section);
+	  (void) rl78_compute_complex_reloc (r_type, 0, input_section,
+					     NULL, NULL);
 	  break;
 
 	case R_RL78_DIR16UL:
@@ -1963,7 +1982,8 @@ rl78_offset_for_reloc (bfd *			abfd,
 
 	default:
 	reloc_computes_value:
-	  symval = rl78_compute_complex_reloc (r_type, symval, input_section);
+	  symval = rl78_compute_complex_reloc (r_type, symval, input_section,
+					       NULL, NULL);
 	  /* Fall through.  */
 	case R_RL78_DIR32:
 	case R_RL78_DIR24S:
@@ -1982,7 +2002,7 @@ rl78_offset_for_reloc (bfd *			abfd,
     }
 }
 
-struct {
+const struct {
   int prefix;		/* or -1 for "no prefix" */
   int insn;		/* or -1 for "end of list" */
   int insn_for_saddr;	/* or -1 for "no alternative" */
@@ -2049,12 +2069,11 @@ struct {
 
 /* Relax one section.  */
 
-static bfd_boolean
-rl78_elf_relax_section
-    (bfd *		    abfd,
-     asection *		    sec,
-     struct bfd_link_info * link_info,
-     bfd_boolean *	    again)
+static bool
+rl78_elf_relax_section (bfd *abfd,
+			asection *sec,
+			struct bfd_link_info *link_info,
+			bool *again)
 {
   Elf_Internal_Shdr * symtab_hdr;
   Elf_Internal_Shdr * shndx_hdr;
@@ -2068,7 +2087,7 @@ rl78_elf_relax_section
   bfd_byte *	      free_contents = NULL;
   Elf_Internal_Sym *  intsyms = NULL;
   Elf_Internal_Sym *  free_intsyms = NULL;
-  Elf_External_Sym_Shndx * shndx_buf = NULL;
+  bfd_byte *	      shndx_buf = NULL;
   bfd_vma pc;
   bfd_vma symval ATTRIBUTE_UNUSED = 0;
   int pcrel ATTRIBUTE_UNUSED = 0;
@@ -2081,16 +2100,17 @@ rl78_elf_relax_section
     return rl78_elf_relax_plt_section (abfd, sec, link_info, again);
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_symtab_hdr (abfd);
   if (elf_symtab_shndx_list (abfd))
@@ -2121,17 +2141,20 @@ rl78_elf_relax_section
 
   if (shndx_hdr && shndx_hdr->sh_size != 0)
     {
-      bfd_size_type amt;
+      size_t amt;
 
-      amt = symtab_hdr->sh_info;
-      amt *= sizeof (Elf_External_Sym_Shndx);
-      shndx_buf = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
-      if (shndx_buf == NULL)
+      if (_bfd_mul_overflow (symtab_hdr->sh_info,
+			     sizeof (Elf_External_Sym_Shndx), &amt))
+	{
+	  bfd_set_error (bfd_error_no_memory);
+	  goto error_return;
+	}
+      if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0)
 	goto error_return;
-      if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0
-	  || bfd_bread (shndx_buf, amt, abfd) != amt)
+      shndx_buf = _bfd_malloc_and_read (abfd, amt, amt);
+      if (shndx_buf == NULL)
 	goto error_return;
-      shndx_hdr->contents = (bfd_byte *) shndx_buf;
+      shndx_hdr->contents = shndx_buf;
     }
 
   /* Get a copy of the native relocations.  */
@@ -2229,7 +2252,7 @@ rl78_elf_relax_section
 
 	  elf32_rl78_relax_delete_bytes (abfd, sec, erel->r_offset - nbytes, nbytes,
 					 next_alignment, erel->r_offset == sec->size);
-	  *again = TRUE;
+	  *again = true;
 
 	  continue;
 	}
@@ -2330,7 +2353,7 @@ rl78_elf_relax_section
 		      SNIPNR (4, 1);
 		      SNIP (1, 2, R_RL78_DIR8S_PCREL);
 		      insn[1] = pcrel;
-		      *again = TRUE;
+		      *again = true;
 		    }
 		}
 	      break;
@@ -2343,7 +2366,7 @@ rl78_elf_relax_section
 		  insn[0] = 0xef;
 		  insn[1] = pcrel;
 		  SNIP (2, 2, R_RL78_DIR8S_PCREL);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      else if (symval < 65536)
 		{
@@ -2351,7 +2374,7 @@ rl78_elf_relax_section
 		  insn[1] = symval & 0xff;
 		  insn[2] = symval >> 8;
 		  SNIP (2, 1, R_RL78_DIR16U);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      else if (pcrel < 32767
 		       && pcrel > -32767)
@@ -2360,7 +2383,7 @@ rl78_elf_relax_section
 		  insn[1] = pcrel & 0xff;
 		  insn[2] = pcrel >> 8;
 		  SNIP (2, 1, R_RL78_DIR16S_PCREL);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2372,7 +2395,7 @@ rl78_elf_relax_section
 		  insn[0] = 0xef;
 		  insn[1] = pcrel;
 		  SNIP (2, 1, R_RL78_DIR8S_PCREL);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2383,7 +2406,7 @@ rl78_elf_relax_section
 		  insn[1] = symval & 0xff;
 		  insn[2] = symval >> 8;
 		  SNIP (2, 1, R_RL78_DIR16U);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      else if (pcrel < 32767
 		       && pcrel > -32767)
@@ -2392,7 +2415,7 @@ rl78_elf_relax_section
 		  insn[1] = pcrel & 0xff;
 		  insn[2] = pcrel >> 8;
 		  SNIP (2, 1, R_RL78_DIR16S_PCREL);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2419,7 +2442,7 @@ rl78_elf_relax_section
 			  SNIPNR (5, 1);
 			  SNIP (2, 2, R_RL78_DIR8S_PCREL);
 			  insn[2] = pcrel;
-			  *again = TRUE;
+			  *again = true;
 			}
 		    }
 		  break;
@@ -2546,14 +2569,11 @@ rl78_elf_relax_section
       /*----------------------------------------------------------------------*/
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (free_relocs != NULL)
-    free (free_relocs);
-
-  if (free_contents != NULL)
-    free (free_contents);
+  free (free_relocs);
+  free (free_contents);
 
   if (shndx_buf != NULL)
     {
@@ -2561,10 +2581,9 @@ rl78_elf_relax_section
       free (shndx_buf);
     }
 
-  if (free_intsyms != NULL)
-    free (free_intsyms);
+  free (free_intsyms);
 
-  return TRUE;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-rx.c ./bfd/elf32-rx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-rx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-rx.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Renesas RX specific support for 32-bit ELF.
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -41,7 +41,7 @@ void rx_dump_symtab (bfd *, void *, void
 
 #define RXREL(n,sz,bit,shift,complain,pcrel)				     \
   HOWTO (R_RX_##n, shift, sz, bit, pcrel, 0, complain_overflow_ ## complain, \
-	 bfd_elf_generic_reloc, "R_RX_" #n, FALSE, 0, ~0, FALSE)
+	 bfd_elf_generic_reloc, "R_RX_" #n, false, 0, ~0, false)
 
 /* Note that the relocations around 0x7f are internal to this file;
    feel free to move them as needed to avoid conflicts with published
@@ -49,25 +49,25 @@ void rx_dump_symtab (bfd *, void *, void
 
 static reloc_howto_type rx_elf_howto_table [] =
 {
-  RXREL (NONE,	       3,  0, 0, dont,	   FALSE),
-  RXREL (DIR32,	       2, 32, 0, signed,   FALSE),
-  RXREL (DIR24S,       2, 24, 0, signed,   FALSE),
-  RXREL (DIR16,	       1, 16, 0, dont,	   FALSE),
-  RXREL (DIR16U,       1, 16, 0, unsigned, FALSE),
-  RXREL (DIR16S,       1, 16, 0, signed,   FALSE),
-  RXREL (DIR8,	       0,  8, 0, dont,	   FALSE),
-  RXREL (DIR8U,	       0,  8, 0, unsigned, FALSE),
-  RXREL (DIR8S,	       0,  8, 0, signed,   FALSE),
-  RXREL (DIR24S_PCREL, 2, 24, 0, signed,   TRUE),
-  RXREL (DIR16S_PCREL, 1, 16, 0, signed,   TRUE),
-  RXREL (DIR8S_PCREL,  0,  8, 0, signed,   TRUE),
-  RXREL (DIR16UL,      1, 16, 2, unsigned, FALSE),
-  RXREL (DIR16UW,      1, 16, 1, unsigned, FALSE),
-  RXREL (DIR8UL,       0,  8, 2, unsigned, FALSE),
-  RXREL (DIR8UW,       0,  8, 1, unsigned, FALSE),
-  RXREL (DIR32_REV,    1, 16, 0, dont,	   FALSE),
-  RXREL (DIR16_REV,    1, 16, 0, dont,	   FALSE),
-  RXREL (DIR3U_PCREL,  0,  3, 0, dont,	   TRUE),
+  RXREL (NONE,	       0,  0, 0, dont,	   false),
+  RXREL (DIR32,	       4, 32, 0, signed,   false),
+  RXREL (DIR24S,       4, 24, 0, signed,   false),
+  RXREL (DIR16,	       2, 16, 0, dont,	   false),
+  RXREL (DIR16U,       2, 16, 0, unsigned, false),
+  RXREL (DIR16S,       2, 16, 0, signed,   false),
+  RXREL (DIR8,	       1,  8, 0, dont,	   false),
+  RXREL (DIR8U,	       1,  8, 0, unsigned, false),
+  RXREL (DIR8S,	       1,  8, 0, signed,   false),
+  RXREL (DIR24S_PCREL, 4, 24, 0, signed,   true),
+  RXREL (DIR16S_PCREL, 2, 16, 0, signed,   true),
+  RXREL (DIR8S_PCREL,  1,  8, 0, signed,   true),
+  RXREL (DIR16UL,      2, 16, 2, unsigned, false),
+  RXREL (DIR16UW,      2, 16, 1, unsigned, false),
+  RXREL (DIR8UL,       1,  8, 2, unsigned, false),
+  RXREL (DIR8UW,       1,  8, 1, unsigned, false),
+  RXREL (DIR32_REV,    2, 16, 0, dont,	   false),
+  RXREL (DIR16_REV,    2, 16, 0, dont,	   false),
+  RXREL (DIR3U_PCREL,  1,  3, 0, dont,	   true),
 
   EMPTY_HOWTO (0x13),
   EMPTY_HOWTO (0x14),
@@ -83,20 +83,20 @@ static reloc_howto_type rx_elf_howto_tab
   EMPTY_HOWTO (0x1e),
   EMPTY_HOWTO (0x1f),
 
-  RXREL (RH_3_PCREL, 0,	 3, 0, signed,	 TRUE),
-  RXREL (RH_16_OP,   1, 16, 0, signed,	 FALSE),
-  RXREL (RH_24_OP,   2, 24, 0, signed,	 FALSE),
-  RXREL (RH_32_OP,   2, 32, 0, signed,	 FALSE),
-  RXREL (RH_24_UNS,  2, 24, 0, unsigned, FALSE),
-  RXREL (RH_8_NEG,   0,	 8, 0, signed,	 FALSE),
-  RXREL (RH_16_NEG,  1, 16, 0, signed,	 FALSE),
-  RXREL (RH_24_NEG,  2, 24, 0, signed,	 FALSE),
-  RXREL (RH_32_NEG,  2, 32, 0, signed,	 FALSE),
-  RXREL (RH_DIFF,    2, 32, 0, signed,	 FALSE),
-  RXREL (RH_GPRELB,  1, 16, 0, unsigned, FALSE),
-  RXREL (RH_GPRELW,  1, 16, 0, unsigned, FALSE),
-  RXREL (RH_GPRELL,  1, 16, 0, unsigned, FALSE),
-  RXREL (RH_RELAX,   0,	 0, 0, dont,	 FALSE),
+  RXREL (RH_3_PCREL, 1,	 3, 0, signed,	 true),
+  RXREL (RH_16_OP,   2, 16, 0, signed,	 false),
+  RXREL (RH_24_OP,   4, 24, 0, signed,	 false),
+  RXREL (RH_32_OP,   4, 32, 0, signed,	 false),
+  RXREL (RH_24_UNS,  4, 24, 0, unsigned, false),
+  RXREL (RH_8_NEG,   1,	 8, 0, signed,	 false),
+  RXREL (RH_16_NEG,  2, 16, 0, signed,	 false),
+  RXREL (RH_24_NEG,  4, 24, 0, signed,	 false),
+  RXREL (RH_32_NEG,  4, 32, 0, signed,	 false),
+  RXREL (RH_DIFF,    4, 32, 0, signed,	 false),
+  RXREL (RH_GPRELB,  2, 16, 0, unsigned, false),
+  RXREL (RH_GPRELW,  2, 16, 0, unsigned, false),
+  RXREL (RH_GPRELL,  2, 16, 0, unsigned, false),
+  RXREL (RH_RELAX,   0,	 0, 0, dont,	 false),
 
   EMPTY_HOWTO (0x2e),
   EMPTY_HOWTO (0x2f),
@@ -118,23 +118,23 @@ static reloc_howto_type rx_elf_howto_tab
   EMPTY_HOWTO (0x3f),
   EMPTY_HOWTO (0x40),
 
-  RXREL (ABS32,	       2, 32, 0, dont,	   FALSE),
-  RXREL (ABS24S,       2, 24, 0, signed,   FALSE),
-  RXREL (ABS16,	       1, 16, 0, dont,	   FALSE),
-  RXREL (ABS16U,       1, 16, 0, unsigned, FALSE),
-  RXREL (ABS16S,       1, 16, 0, signed,   FALSE),
-  RXREL (ABS8,	       0,  8, 0, dont,	   FALSE),
-  RXREL (ABS8U,	       0,  8, 0, unsigned, FALSE),
-  RXREL (ABS8S,	       0,  8, 0, signed,   FALSE),
-  RXREL (ABS24S_PCREL, 2, 24, 0, signed,   TRUE),
-  RXREL (ABS16S_PCREL, 1, 16, 0, signed,   TRUE),
-  RXREL (ABS8S_PCREL,  0,  8, 0, signed,   TRUE),
-  RXREL (ABS16UL,      1, 16, 0, unsigned, FALSE),
-  RXREL (ABS16UW,      1, 16, 0, unsigned, FALSE),
-  RXREL (ABS8UL,       0,  8, 0, unsigned, FALSE),
-  RXREL (ABS8UW,       0,  8, 0, unsigned, FALSE),
-  RXREL (ABS32_REV,    2, 32, 0, dont,	   FALSE),
-  RXREL (ABS16_REV,    1, 16, 0, dont,	   FALSE),
+  RXREL (ABS32,	       4, 32, 0, dont,	   false),
+  RXREL (ABS24S,       4, 24, 0, signed,   false),
+  RXREL (ABS16,	       2, 16, 0, dont,	   false),
+  RXREL (ABS16U,       2, 16, 0, unsigned, false),
+  RXREL (ABS16S,       2, 16, 0, signed,   false),
+  RXREL (ABS8,	       1,  8, 0, dont,	   false),
+  RXREL (ABS8U,	       1,  8, 0, unsigned, false),
+  RXREL (ABS8S,	       1,  8, 0, signed,   false),
+  RXREL (ABS24S_PCREL, 4, 24, 0, signed,   true),
+  RXREL (ABS16S_PCREL, 2, 16, 0, signed,   true),
+  RXREL (ABS8S_PCREL,  1,  8, 0, signed,   true),
+  RXREL (ABS16UL,      2, 16, 0, unsigned, false),
+  RXREL (ABS16UW,      2, 16, 0, unsigned, false),
+  RXREL (ABS8UL,       1,  8, 0, unsigned, false),
+  RXREL (ABS8UW,       1,  8, 0, unsigned, false),
+  RXREL (ABS32_REV,    4, 32, 0, dont,	   false),
+  RXREL (ABS16_REV,    2, 16, 0, dont,	   false),
 
 #define STACK_REL_P(x) ((x) <= R_RX_ABS16_REV && (x) >= R_RX_ABS32)
 
@@ -181,44 +181,54 @@ static reloc_howto_type rx_elf_howto_tab
   /* A 5-bit unsigned displacement to a B/W/L address, at bit position 8/12.  */
   /* ---- ----   4--- 3210.  */
 #define R_RX_RH_ABS5p8B 0x78
-  RXREL (RH_ABS5p8B,   0,  0, 0, dont,	   FALSE),
+  RXREL (RH_ABS5p8B,   0,  0, 0, dont,	   false),
 #define R_RX_RH_ABS5p8W 0x79
-  RXREL (RH_ABS5p8W,   0,  0, 0, dont,	   FALSE),
+  RXREL (RH_ABS5p8W,   0,  0, 0, dont,	   false),
 #define R_RX_RH_ABS5p8L 0x7a
-  RXREL (RH_ABS5p8L,   0,  0, 0, dont,	   FALSE),
+  RXREL (RH_ABS5p8L,   0,  0, 0, dont,	   false),
   /* A 5-bit unsigned displacement to a B/W/L address, at bit position 5/12.  */
   /* ---- -432   1--- 0---.  */
 #define R_RX_RH_ABS5p5B 0x7b
-  RXREL (RH_ABS5p5B,   0,  0, 0, dont,	   FALSE),
+  RXREL (RH_ABS5p5B,   0,  0, 0, dont,	   false),
 #define R_RX_RH_ABS5p5W 0x7c
-  RXREL (RH_ABS5p5W,   0,  0, 0, dont,	   FALSE),
+  RXREL (RH_ABS5p5W,   0,  0, 0, dont,	   false),
 #define R_RX_RH_ABS5p5L 0x7d
-  RXREL (RH_ABS5p5L,   0,  0, 0, dont,	   FALSE),
+  RXREL (RH_ABS5p5L,   0,  0, 0, dont,	   false),
   /* A 4-bit unsigned immediate at bit position 8.  */
 #define R_RX_RH_UIMM4p8 0x7e
-  RXREL (RH_UIMM4p8,   0,  0, 0, dont,	   FALSE),
+  RXREL (RH_UIMM4p8,   0,  0, 0, dont,	   false),
   /* A 4-bit negative unsigned immediate at bit position 8.  */
 #define R_RX_RH_UNEG4p8 0x7f
-  RXREL (RH_UNEG4p8,   0,  0, 0, dont,	   FALSE),
+  RXREL (RH_UNEG4p8,   0,  0, 0, dont,	   false),
   /* End of internal relocs.  */
 
-  RXREL (SYM,	    2, 32, 0, dont, FALSE),
-  RXREL (OPneg,	    2, 32, 0, dont, FALSE),
-  RXREL (OPadd,	    2, 32, 0, dont, FALSE),
-  RXREL (OPsub,	    2, 32, 0, dont, FALSE),
-  RXREL (OPmul,	    2, 32, 0, dont, FALSE),
-  RXREL (OPdiv,	    2, 32, 0, dont, FALSE),
-  RXREL (OPshla,    2, 32, 0, dont, FALSE),
-  RXREL (OPshra,    2, 32, 0, dont, FALSE),
-  RXREL (OPsctsize, 2, 32, 0, dont, FALSE),
-  RXREL (OPscttop,  2, 32, 0, dont, FALSE),
-  RXREL (OPand,	    2, 32, 0, dont, FALSE),
-  RXREL (OPor,	    2, 32, 0, dont, FALSE),
-  RXREL (OPxor,	    2, 32, 0, dont, FALSE),
-  RXREL (OPnot,	    2, 32, 0, dont, FALSE),
-  RXREL (OPmod,	    2, 32, 0, dont, FALSE),
-  RXREL (OPromtop,  2, 32, 0, dont, FALSE),
-  RXREL (OPramtop,  2, 32, 0, dont, FALSE)
+  RXREL (SYM,	    4, 32, 0, dont, false),
+  RXREL (OPneg,	    4, 32, 0, dont, false),
+  RXREL (OPadd,	    4, 32, 0, dont, false),
+  RXREL (OPsub,	    4, 32, 0, dont, false),
+  RXREL (OPmul,	    4, 32, 0, dont, false),
+  RXREL (OPdiv,	    4, 32, 0, dont, false),
+  RXREL (OPshla,    4, 32, 0, dont, false),
+  RXREL (OPshra,    4, 32, 0, dont, false),
+  RXREL (OPsctsize, 4, 32, 0, dont, false),
+
+  EMPTY_HOWTO (0x89),
+  EMPTY_HOWTO (0x8a),
+  EMPTY_HOWTO (0x8b),
+  EMPTY_HOWTO (0x8c),
+
+  RXREL (OPscttop,  4, 32, 0, dont, false),
+
+  EMPTY_HOWTO (0x8e),
+  EMPTY_HOWTO (0x8f),
+
+  RXREL (OPand,	    4, 32, 0, dont, false),
+  RXREL (OPor,	    4, 32, 0, dont, false),
+  RXREL (OPxor,	    4, 32, 0, dont, false),
+  RXREL (OPnot,	    4, 32, 0, dont, false),
+  RXREL (OPmod,	    4, 32, 0, dont, false),
+  RXREL (OPromtop,  4, 32, 0, dont, false),
+  RXREL (OPramtop,  4, 32, 0, dont, false)
 };
 
 /* Map BFD reloc types to RX ELF reloc types.  */
@@ -299,7 +309,7 @@ rx_reloc_name_lookup (bfd * abfd ATTRIBU
 
 /* Set the howto pointer for an RX ELF reloc.  */
 
-static bfd_boolean
+static bool
 rx_info_to_howto_rela (bfd *		   abfd,
 		       arelent *	   cache_ptr,
 		       Elf_Internal_Rela * dst)
@@ -307,13 +317,14 @@ rx_info_to_howto_rela (bfd *		   abfd,
   unsigned int r_type;
 
   r_type = ELF32_R_TYPE (dst->r_info);
-  if (r_type >= (unsigned int) R_RX_max)
+  BFD_ASSERT (R_RX_max == ARRAY_SIZE (rx_elf_howto_table));
+  if (r_type >= ARRAY_SIZE (rx_elf_howto_table))
     {
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = rx_elf_howto_table + r_type;
   if (cache_ptr->howto->name == NULL)
@@ -322,9 +333,9 @@ rx_info_to_howto_rela (bfd *		   abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 static bfd_vma
@@ -337,13 +348,13 @@ get_symbol_value (const char *		  name,
   bfd_vma value = 0;
   struct bfd_link_hash_entry * h;
 
-  h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, name, false, false, true);
 
   if (h == NULL
       || (h->type != bfd_link_hash_defined
 	  && h->type != bfd_link_hash_defweak))
     (*info->callbacks->undefined_symbol)
-      (info, name, input_bfd, input_section, offset, TRUE);
+      (info, name, input_bfd, input_section, offset, true);
   else
     value = (h->u.def.value
 	     + h->u.def.section->output_section->vma
@@ -359,7 +370,7 @@ get_symbol_value_maybe (const char *		na
   bfd_vma value = 0;
   struct bfd_link_hash_entry * h;
 
-  h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, name, false, false, true);
 
   if (h == NULL
       || (h->type != bfd_link_hash_defined
@@ -379,13 +390,13 @@ get_gp (struct bfd_link_info *	info,
 	asection *		sec,
 	int			offset)
 {
-  static bfd_boolean cached = FALSE;
-  static bfd_vma     cached_value = 0;
+  static bool cached = false;
+  static bfd_vma cached_value = 0;
 
   if (!cached)
     {
       cached_value = get_symbol_value ("__gp", info, abfd, sec, offset);
-      cached = TRUE;
+      cached = true;
     }
   return cached_value;
 }
@@ -396,13 +407,13 @@ get_romstart (struct bfd_link_info *  in
 	      asection *	      sec,
 	      int		      offset)
 {
-  static bfd_boolean cached = FALSE;
-  static bfd_vma     cached_value = 0;
+  static bool cached = false;
+  static bfd_vma cached_value = 0;
 
   if (!cached)
     {
       cached_value = get_symbol_value ("_start", info, abfd, sec, offset);
-      cached = TRUE;
+      cached = true;
     }
   return cached_value;
 }
@@ -413,13 +424,13 @@ get_ramstart (struct bfd_link_info *  in
 	      asection *	      sec,
 	      int		      offset)
 {
-  static bfd_boolean cached = FALSE;
-  static bfd_vma     cached_value = 0;
+  static bool cached = false;
+  static bfd_vma cached_value = 0;
 
   if (!cached)
     {
       cached_value = get_symbol_value ("__datastart", info, abfd, sec, offset);
-      cached = TRUE;
+      cached = true;
     }
   return cached_value;
 }
@@ -481,7 +492,7 @@ static unsigned int rx_stack_top;
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 rx_elf_relocate_section
     (bfd *		     output_bfd,
      struct bfd_link_info *  info,
@@ -492,36 +503,36 @@ rx_elf_relocate_section
      Elf_Internal_Sym *	     local_syms,
      asection **	     local_sections)
 {
-  Elf_Internal_Shdr *		symtab_hdr;
-  struct elf_link_hash_entry ** sym_hashes;
-  Elf_Internal_Rela *		rel;
-  Elf_Internal_Rela *		relend;
-  bfd_boolean			pid_mode;
-  bfd_boolean			saw_subtract = FALSE;
-  const char *			table_default_cache = NULL;
-  bfd_vma			table_start_cache = 0;
-  bfd_vma			table_end_cache = 0;
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  Elf_Internal_Rela *rel;
+  Elf_Internal_Rela *relend;
+  bool pid_mode;
+  bool saw_subtract = false;
+  const char *table_default_cache = NULL;
+  bfd_vma table_start_cache = 0;
+  bfd_vma table_end_cache = 0;
 
   if (elf_elfheader (output_bfd)->e_flags & E_FLAG_RX_PID)
-    pid_mode = TRUE;
+    pid_mode = true;
   else
-    pid_mode = FALSE;
+    pid_mode = false;
 
   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (input_bfd);
   relend     = relocs + input_section->reloc_count;
   for (rel = relocs; rel < relend; rel ++)
     {
-      reloc_howto_type *	   howto;
-      unsigned long		   r_symndx;
-      Elf_Internal_Sym *	   sym;
-      asection *		   sec;
-      struct elf_link_hash_entry * h;
-      bfd_vma			   relocation;
-      bfd_reloc_status_type	   r;
-      const char *		   name = NULL;
-      bfd_boolean		   unresolved_reloc = TRUE;
-      int			   r_type;
+      reloc_howto_type *howto;
+      unsigned long r_symndx;
+      Elf_Internal_Sym *sym;
+      asection *sec;
+      struct elf_link_hash_entry *h;
+      bfd_vma relocation;
+      bfd_reloc_status_type r;
+      const char * name = NULL;
+      bool unresolved_reloc = true;
+      int r_type;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       r_symndx = ELF32_R_SYM (rel->r_info);
@@ -533,7 +544,7 @@ rx_elf_relocate_section
       relocation = 0;
 
       if (rx_stack_top == 0)
-	saw_subtract = FALSE;
+	saw_subtract = false;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -547,7 +558,7 @@ rx_elf_relocate_section
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes, h,
@@ -557,7 +568,7 @@ rx_elf_relocate_section
 	  name = h->root.root.string;
 	}
 
-      if (strncmp (name, "$tableentry$default$", 20) == 0)
+      if (startswith (name, "$tableentry$default$"))
 	{
 	  bfd_vma entry_vma;
 	  int idx;
@@ -576,7 +587,9 @@ rx_elf_relocate_section
 
 	      /* We have already done error checking in rx_table_find().  */
 
-	      buf = (char *) malloc (13 + strlen (name + 20));
+	      buf = (char *) bfd_malloc (13 + strlen (name + 20));
+	      if (buf == NULL)
+		return false;
 
 	      sprintf (buf, "$tablestart$%s", name + 20);
 	      table_start_cache = get_symbol_value (buf,
@@ -618,10 +631,13 @@ rx_elf_relocate_section
 	      idx = (int) (entry_vma - table_start_cache) / 4;
 
 	      /* This will look like $tableentry$<N>$<name> */
-	      buf = (char *) malloc (12 + 20 + strlen (name + 20));
+	      buf = (char *) bfd_malloc (12 + 20 + strlen (name + 20));
+	      if (buf == NULL)
+		return false;
+
 	      sprintf (buf, "$tableentry$%d$%s", idx, name + 20);
 
-	      h = (struct elf_link_hash_entry *) bfd_link_hash_lookup (info->hash, buf, FALSE, FALSE, TRUE);
+	      h = (struct elf_link_hash_entry *) bfd_link_hash_lookup (info->hash, buf, false, false, true);
 
 	      if (h)
 		{
@@ -1293,7 +1309,7 @@ rx_elf_relocate_section
 	  {
 	    int32_t tmp;
 
-	    saw_subtract = TRUE;
+	    saw_subtract = true;
 	    RX_STACK_POP (tmp);
 	    tmp = - tmp;
 	    RX_STACK_PUSH (tmp);
@@ -1315,7 +1331,7 @@ rx_elf_relocate_section
 	  {
 	    int32_t tmp1, tmp2;
 
-	    saw_subtract = TRUE;
+	    saw_subtract = true;
 	    RX_STACK_POP (tmp1);
 	    RX_STACK_POP (tmp2);
 	    tmp2 -= tmp1;
@@ -1462,7 +1478,7 @@ rx_elf_relocate_section
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_other:
@@ -1496,7 +1512,7 @@ rx_elf_relocate_section
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relaxation Support.  */
@@ -1554,7 +1570,7 @@ next_smaller_reloc (int r)
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 elf32_rx_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, int count,
 			     Elf_Internal_Rela *alignment_rel, int force_snip,
 			     Elf_Internal_Rela *irelstart)
@@ -1671,7 +1687,7 @@ elf32_rx_relax_delete_bytes (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Used to sort relocs by address.  If relocs have the same address,
@@ -1682,34 +1698,34 @@ static void
 reloc_bubblesort (Elf_Internal_Rela * r, int count)
 {
   int i;
-  bfd_boolean again;
-  bfd_boolean swappit;
+  bool again;
+  bool swappit;
 
   /* This is almost a classic bubblesort.  It's the slowest sort, but
      we're taking advantage of the fact that the relocations are
      mostly in order already (the assembler emits them that way) and
      we need relocs with the same address to remain in the same
      relative order.  */
-  again = TRUE;
+  again = true;
   while (again)
     {
-      again = FALSE;
+      again = false;
       for (i = 0; i < count - 1; i ++)
 	{
 	  if (r[i].r_offset > r[i + 1].r_offset)
-	    swappit = TRUE;
+	    swappit = true;
 	  else if (r[i].r_offset < r[i + 1].r_offset)
-	    swappit = FALSE;
+	    swappit = false;
 	  else if (ELF32_R_TYPE (r[i + 1].r_info) == R_RX_RH_RELAX
 		   && (r[i + 1].r_addend & RX_RELAXA_ALIGN))
-	    swappit = TRUE;
+	    swappit = true;
 	  else if (ELF32_R_TYPE (r[i + 1].r_info) == R_RX_RH_RELAX
 		   && (r[i + 1].r_addend & RX_RELAXA_ELIGN)
 		   && !(ELF32_R_TYPE (r[i].r_info) == R_RX_RH_RELAX
 			&& (r[i].r_addend & RX_RELAXA_ALIGN)))
-	    swappit = TRUE;
+	    swappit = true;
 	  else
-	    swappit = FALSE;
+	    swappit = false;
 
 	  if (swappit)
 	    {
@@ -1723,7 +1739,7 @@ reloc_bubblesort (Elf_Internal_Rela * r,
 		 most of the O(n^2) behavior for our cases.  */
 	      if (i > 0)
 		i -= 2;
-	      again = TRUE;
+	      again = true;
 	    }
 	}
     }
@@ -1738,7 +1754,7 @@ static bfd_vma
 rx_offset_for_reloc (bfd *		      abfd,
 		     Elf_Internal_Rela *      rel,
 		     Elf_Internal_Shdr *      symtab_hdr,
-		     Elf_External_Sym_Shndx * shndx_buf ATTRIBUTE_UNUSED,
+		     bfd_byte *		      shndx_buf ATTRIBUTE_UNUSED,
 		     Elf_Internal_Sym *	      intsyms,
 		     Elf_Internal_Rela **     lrel,
 		     bfd *		      input_bfd,
@@ -1986,26 +2002,26 @@ move_reloc (Elf_Internal_Rela * irel, El
 
 /* Relax one section.  */
 
-static bfd_boolean
-elf32_rx_relax_section (bfd *		       abfd,
-			asection *	       sec,
-			struct bfd_link_info * link_info,
-			bfd_boolean *	       again,
-			bfd_boolean	       allow_pcrel3)
-{
-  Elf_Internal_Shdr * symtab_hdr;
-  Elf_Internal_Shdr * shndx_hdr;
-  Elf_Internal_Rela * internal_relocs;
-  Elf_Internal_Rela * irel;
-  Elf_Internal_Rela * srel;
-  Elf_Internal_Rela * irelend;
-  Elf_Internal_Rela * next_alignment;
-  Elf_Internal_Rela * prev_alignment;
-  bfd_byte *	      contents = NULL;
-  bfd_byte *	      free_contents = NULL;
-  Elf_Internal_Sym *  intsyms = NULL;
-  Elf_Internal_Sym *  free_intsyms = NULL;
-  Elf_External_Sym_Shndx * shndx_buf = NULL;
+static bool
+elf32_rx_relax_section (bfd *abfd,
+			asection *sec,
+			struct bfd_link_info *link_info,
+			bool *again,
+			bool allow_pcrel3)
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  Elf_Internal_Shdr *shndx_hdr;
+  Elf_Internal_Rela *internal_relocs;
+  Elf_Internal_Rela *irel;
+  Elf_Internal_Rela *srel;
+  Elf_Internal_Rela *irelend;
+  Elf_Internal_Rela *next_alignment;
+  Elf_Internal_Rela *prev_alignment;
+  bfd_byte *contents = NULL;
+  bfd_byte *free_contents = NULL;
+  Elf_Internal_Sym *intsyms = NULL;
+  Elf_Internal_Sym *free_intsyms = NULL;
+  bfd_byte *shndx_buf = NULL;
   bfd_vma pc;
   bfd_vma sec_start;
   bfd_vma symval = 0;
@@ -2016,16 +2032,17 @@ elf32_rx_relax_section (bfd *		       ab
   int scale;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_symtab_hdr (abfd);
   if (elf_symtab_shndx_list (abfd))
@@ -2058,17 +2075,20 @@ elf32_rx_relax_section (bfd *		       ab
 
   if (shndx_hdr && shndx_hdr->sh_size != 0)
     {
-      bfd_size_type amt;
+      size_t amt;
 
-      amt = symtab_hdr->sh_info;
-      amt *= sizeof (Elf_External_Sym_Shndx);
-      shndx_buf = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
-      if (shndx_buf == NULL)
+      if (_bfd_mul_overflow (symtab_hdr->sh_info,
+			     sizeof (Elf_External_Sym_Shndx), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  goto error_return;
+	}
+      if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0)
 	goto error_return;
-      if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0
-	  || bfd_bread (shndx_buf, amt, abfd) != amt)
+      shndx_buf = _bfd_malloc_and_read (abfd, amt, amt);
+      if (shndx_buf == NULL)
 	goto error_return;
-      shndx_hdr->contents = (bfd_byte *) shndx_buf;
+      shndx_hdr->contents = shndx_buf;
     }
 
   /* Get a copy of the native relocations.  */
@@ -2078,7 +2098,7 @@ elf32_rx_relax_section (bfd *		       ab
      as bytes are deleted from the section, and with this relaxation
      function itself being called multiple times on the same section...  */
   internal_relocs = _bfd_elf_link_read_relocs
-    (abfd, sec, NULL, (Elf_Internal_Rela *) NULL, TRUE);
+    (abfd, sec, NULL, (Elf_Internal_Rela *) NULL, true);
   if (internal_relocs == NULL)
     goto error_return;
 
@@ -2171,7 +2191,7 @@ elf32_rx_relax_section (bfd *		       ab
 
 	  elf32_rx_relax_delete_bytes (abfd, sec, erel->r_offset-nbytes, nbytes, next_alignment,
 				       erel->r_offset == sec->size, internal_relocs);
-	  *again = TRUE;
+	  *again = true;
 
 	  continue;
 	}
@@ -2241,7 +2261,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      if (newrel != ELF32_R_TYPE (srel->r_info))
 		{
 		  SNIP (3, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 
@@ -2249,7 +2269,7 @@ elf32_rx_relax_section (bfd *		       ab
 	    {
 	      insn[0] &= 0xfc;
 	      SNIP (2, 1, R_RX_NONE);
-	      *again = TRUE;
+	      *again = true;
 	    }
 
 	  /* Special case DSP:5 format: MOV.bwl dsp:5[Rsrc],Rdst.  */
@@ -2346,7 +2366,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      if (newrel != ELF32_R_TYPE (srel->r_info))
 		{
 		  SNIP (offset+1, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 
@@ -2354,7 +2374,7 @@ elf32_rx_relax_section (bfd *		       ab
 	    {
 	      insn[0] &= 0xf3;
 	      SNIP (offset, 1, R_RX_NONE);
-	      *again = TRUE;
+	      *again = true;
 	    }
 	  /* Special case DSP:5 format: MOV.bwl Rsrc,dsp:5[Rdst] */
 	  else if (code == 1 && symval/scale <= 31
@@ -2415,14 +2435,14 @@ elf32_rx_relax_section (bfd *		       ab
 	      if (newrel != ELF32_R_TYPE (srel->r_info))
 		{
 		  SNIP (offset, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 	  else if (code == 1 && symval == 0)
 	    {
 	      insn[1] &= 0xfc;
 	      SNIP (offset, 1, R_RX_NONE);
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -2454,7 +2474,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      if (newrel != ELF32_R_TYPE (srel->r_info))
 		{
 		  SNIP (2, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 
@@ -2468,7 +2488,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      if (newrel != ELF32_R_TYPE (srel->r_info))
 		{
 		  SNIP (2, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 
@@ -2493,7 +2513,7 @@ elf32_rx_relax_section (bfd *		       ab
 		newrel = R_RX_DIR8U;
 
 	      SNIP (2, 1, newrel);
-	      *again = TRUE;
+	      *again = true;
 	    }
 
 	  else if (code == 2 && ssymval <= 127 && ssymval >= -128)
@@ -2506,7 +2526,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      if (newrel != ELF32_R_TYPE (srel->r_info))
 		{
 		  SNIP (2, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 
@@ -2528,7 +2548,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      move_reloc (irel, srel, -1);
 
 	      SNIP (2, 1, R_RX_RH_UIMM4p8);
-	      *again = TRUE;
+	      *again = true;
 	    }
 
 	  /* Special case UIMM4 format: ADD -> ADD/SUB.  */
@@ -2562,7 +2582,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      move_reloc (irel, srel, -1);
 
 	      SNIP (2, 1, newrel);
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -2601,7 +2621,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      if (newrel != ELF32_R_TYPE (srel->r_info))
 		{
 		  SNIP (offset, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 
@@ -2615,7 +2635,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      if (newrel != ELF32_R_TYPE (srel->r_info))
 		{
 		  SNIP (offset, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 
@@ -2640,7 +2660,7 @@ elf32_rx_relax_section (bfd *		       ab
 		newrel = R_RX_DIR8U;
 
 	      SNIP (2, 1, newrel);
-	      *again = TRUE;
+	      *again = true;
 	    }
 
 	  else if (code == 2 && ssymval <= 127 && ssymval >= -128)
@@ -2653,7 +2673,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      if (newrel != ELF32_R_TYPE(srel->r_info))
 		{
 		  SNIP (offset, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 
@@ -2673,7 +2693,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      move_reloc (irel, srel, -1);
 
 	      SNIP (2, 1, R_RX_RH_UIMM4p8);
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -2716,7 +2736,7 @@ elf32_rx_relax_section (bfd *		       ab
 		{
 		  insn[0] = 0x38;
 		  SNIP (3, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2726,7 +2746,7 @@ elf32_rx_relax_section (bfd *		       ab
 		{
 		  insn[0] = 0x2e;
 		  SNIP (2, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2743,7 +2763,7 @@ elf32_rx_relax_section (bfd *		       ab
 		  insn[0] = 0x08;
 		  SNIP (1, 1, newrel);
 		  move_reloc (irel, srel, -1);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2753,7 +2773,7 @@ elf32_rx_relax_section (bfd *		       ab
 		{
 		  insn[0] = 0x39;
 		  SNIP (1, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2764,7 +2784,7 @@ elf32_rx_relax_section (bfd *		       ab
 		{
 		  insn[0] = 0x20 | (insn[0] & 1);
 		  SNIP (1, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2777,7 +2797,7 @@ elf32_rx_relax_section (bfd *		       ab
 		  insn[0] = 0x10 | ((insn[0] & 1) << 3);
 		  SNIP (1, 1, newrel);
 		  move_reloc (irel, srel, -1);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2795,7 +2815,7 @@ elf32_rx_relax_section (bfd *		       ab
 		     will get moved too, and too much.  */
 		  SNIP (3, 2, newrel);
 		  move_reloc (irel, srel, -1);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 	    }
@@ -2812,7 +2832,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      insn[1] = 0x05;
 	      insn[2] = 0x38;
 	      SNIP (5, 1, newrel);
-	      *again = TRUE;
+	      *again = true;
 	    }
 
 	  /* Special case - synthetic conditional branches, pcrel16 */
@@ -2830,7 +2850,7 @@ elf32_rx_relax_section (bfd *		       ab
 		 delete_bytes move it also.  */
 	      move_reloc (irel, srel, -2);
 	      SNIP (2, 3, newrel);
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -2932,9 +2952,9 @@ elf32_rx_relax_section (bfd *		       ab
 		  break;
 		case 0:
 #if RX_OPCODE_BIG_ENDIAN
-		  imm_val = (ip[0] << 24) | (ip[1] << 16) | (ip[2] << 8) | ip[3];
+		  imm_val = ((unsigned) ip[0] << 24) | (ip[1] << 16) | (ip[2] << 8) | ip[3];
 #else
-		  imm_val = (ip[3] << 24) | (ip[2] << 16) | (ip[1] << 8) | ip[0];
+		  imm_val = ((unsigned) ip[3] << 24) | (ip[2] << 16) | (ip[1] << 8) | ip[0];
 #endif
 		  break;
 		}
@@ -3007,7 +3027,7 @@ elf32_rx_relax_section (bfd *		       ab
 		}
 
 	      SNIPNR (3, ilen - 3);
-	      *again = TRUE;
+	      *again = true;
 
 	      /* We can't relax this new opcode.  */
 	      irel->r_addend = 0;
@@ -3021,16 +3041,15 @@ elf32_rx_relax_section (bfd *		       ab
      don't request a pass after that one!  */
   if (!*again && !allow_pcrel3)
     {
-      bfd_boolean ignored;
+      bool ignored;
 
-      elf32_rx_relax_section (abfd, sec, link_info, &ignored, TRUE);
+      elf32_rx_relax_section (abfd, sec, link_info, &ignored, true);
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (free_contents != NULL)
-    free (free_contents);
+  free (free_contents);
 
   if (shndx_buf != NULL)
     {
@@ -3038,39 +3057,38 @@ elf32_rx_relax_section (bfd *		       ab
       free (shndx_buf);
     }
 
-  if (free_intsyms != NULL)
-    free (free_intsyms);
+  free (free_intsyms);
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
-elf32_rx_relax_section_wrapper (bfd *		       abfd,
-				asection *	       sec,
-				struct bfd_link_info * link_info,
-				bfd_boolean *	       again)
+static bool
+elf32_rx_relax_section_wrapper (bfd *abfd,
+				asection *sec,
+				struct bfd_link_info *link_info,
+				bool *again)
 {
-  return elf32_rx_relax_section (abfd, sec, link_info, again, FALSE);
+  return elf32_rx_relax_section (abfd, sec, link_info, again, false);
 }
 
 /* Function to set the ELF flag bits.  */
 
-static bfd_boolean
+static bool
 rx_elf_set_private_flags (bfd * abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
-static bfd_boolean no_warn_mismatch = FALSE;
-static bfd_boolean ignore_lma = TRUE;
+static bool no_warn_mismatch = false;
+static bool ignore_lma = true;
 
-void bfd_elf32_rx_set_target_flags (bfd_boolean, bfd_boolean);
+void bfd_elf32_rx_set_target_flags (bool, bool);
 
 void
-bfd_elf32_rx_set_target_flags (bfd_boolean user_no_warn_mismatch,
-			       bfd_boolean user_ignore_lma)
+bfd_elf32_rx_set_target_flags (bool user_no_warn_mismatch,
+			       bool user_ignore_lma)
 {
   no_warn_mismatch = user_no_warn_mismatch;
   ignore_lma = user_ignore_lma;
@@ -3080,10 +3098,8 @@ bfd_elf32_rx_set_target_flags (bfd_boole
    Returns a static pointer.  */
 
 static const char *
-describe_flags (flagword flags)
+describe_flags (flagword flags, char *buf)
 {
-  static char buf [128];
-
   buf[0] = 0;
 
   if (flags & E_FLAG_RX_64BIT_DOUBLES)
@@ -3115,13 +3131,13 @@ describe_flags (flagword flags)
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 rx_elf_merge_private_bfd_data (bfd * ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword old_flags;
   flagword new_flags;
-  bfd_boolean error = FALSE;
+  bool error = false;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
@@ -3129,7 +3145,7 @@ rx_elf_merge_private_bfd_data (bfd * ibf
   if (!elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
   else if (old_flags != new_flags)
@@ -3164,14 +3180,16 @@ rx_elf_merge_private_bfd_data (bfd * ibf
 	    }
 	  else
 	    {
+	      char buf[128];
+
 	      _bfd_error_handler (_("there is a conflict merging the"
 				    " ELF header flags from %pB"),
 				  ibfd);
 	      _bfd_error_handler (_("  the input  file's flags: %s"),
-				  describe_flags (new_flags));
+				  describe_flags (new_flags, buf));
 	      _bfd_error_handler (_("  the output file's flags: %s"),
-				  describe_flags (old_flags));
-	      error = TRUE;
+				  describe_flags (old_flags, buf));
+	      error = true;
 	    }
 	}
       else
@@ -3184,11 +3202,12 @@ rx_elf_merge_private_bfd_data (bfd * ibf
   return !error;
 }
 
-static bfd_boolean
+static bool
 rx_elf_print_private_bfd_data (bfd * abfd, void * ptr)
 {
   FILE * file = (FILE *) ptr;
   flagword flags;
+  char buf[128];
 
   BFD_ASSERT (abfd != NULL && ptr != NULL);
 
@@ -3198,8 +3217,8 @@ rx_elf_print_private_bfd_data (bfd * abf
   flags = elf_elfheader (abfd)->e_flags;
   fprintf (file, _("private flags = 0x%lx:"), (long) flags);
 
-  fprintf (file, "%s", describe_flags (flags));
-  return TRUE;
+  fprintf (file, "%s", describe_flags (flags, buf));
+  return true;
 }
 
 /* Return the MACH for an e_flags value.  */
@@ -3222,7 +3241,7 @@ elf32_rx_machine (bfd * abfd ATTRIBUTE_U
   return 0;
 }
 
-static bfd_boolean
+static bool
 rx_elf_object_p (bfd * abfd)
 {
   int i;
@@ -3231,7 +3250,7 @@ rx_elf_object_p (bfd * abfd)
   Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
   int nphdrs = ehdr->e_phnum;
   sec_ptr bsec;
-  static int saw_be = FALSE;
+  static int saw_be = false;
   bfd_vma end_phdroff;
 
   /* We never want to automatically choose the non-swapping big-endian
@@ -3239,16 +3258,16 @@ rx_elf_object_p (bfd * abfd)
      and objcopy.  */
   if (abfd->xvec == &rx_elf32_be_ns_vec
       && abfd->target_defaulted)
-    return FALSE;
+    return false;
 
   /* BFD->target_defaulted is not set to TRUE when a target is chosen
      as a fallback, so we check for "scanning" to know when to stop
      using the non-swapping target.  */
   if (abfd->xvec == &rx_elf32_be_ns_vec
       && saw_be)
-    return FALSE;
+    return false;
   if (abfd->xvec == &rx_elf32_be_vec)
-    saw_be = TRUE;
+    saw_be = true;
 
   bfd_default_set_arch_mach (abfd, bfd_arch_rx,
 			     elf32_rx_machine (abfd));
@@ -3312,14 +3331,14 @@ rx_elf_object_p (bfd * abfd)
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 rx_linux_object_p (bfd * abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_rx, elf32_rx_machine (abfd));
-  return TRUE;
+  return true;
 }
  
 
@@ -3332,26 +3351,14 @@ rx_dump_symtab (bfd * abfd, void * inter
   Elf_Internal_Sym * isymend;
   Elf_Internal_Sym * isym;
   Elf_Internal_Shdr * symtab_hdr;
-  bfd_boolean free_internal = FALSE, free_external = FALSE;
   char * st_info_str;
   char * st_info_stb_str;
   char * st_other_str;
   char * st_shndx_str;
 
-  if (! internal_syms)
-    {
-      internal_syms = bfd_malloc (1000);
-      free_internal = 1;
-    }
-  if (! external_syms)
-    {
-      external_syms = bfd_malloc (1000);
-      free_external = 1;
-    }
-
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   locsymcount = symtab_hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
-  if (free_internal)
+  if (!internal_syms)
     isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
 				    symtab_hdr->sh_info, 0,
 				    internal_syms, external_syms, NULL);
@@ -3403,10 +3410,6 @@ rx_dump_symtab (bfd * abfd, void * inter
 	      isym->st_other, st_other_str,
 	      isym->st_shndx, st_shndx_str);
     }
-  if (free_internal)
-    free (internal_syms);
-  if (free_external)
-    free (external_syms);
 }
 
 char *
@@ -3427,7 +3430,7 @@ rx_get_reloc (long reloc)
    have code sections stored with 32-bit words swapped relative to
    what you'd get by default.  */
 
-static bfd_boolean
+static bool
 rx_get_section_contents (bfd *	       abfd,
 			 sec_ptr       section,
 			 void *	       location,
@@ -3436,7 +3439,7 @@ rx_get_section_contents (bfd *	       ab
 {
   int exec = (abfd->flags & EXEC_P) ? 1 : 0;
   int s_code = (section->flags & SEC_CODE) ? 1 : 0;
-  bfd_boolean rv;
+  bool rv;
 
 #ifdef DJDEBUG
   fprintf (stderr, "dj: get %ld %ld from %s  %s e%d sc%d  %08lx:%08lx\n",
@@ -3451,7 +3454,7 @@ rx_get_section_contents (bfd *	       ab
       char * cloc = (char *) location;
       bfd_size_type cnt, end_cnt;
 
-      rv = TRUE;
+      rv = true;
 
       /* Fetch and swap unaligned bytes at the beginning.  */
       if (offset % 4)
@@ -3461,7 +3464,7 @@ rx_get_section_contents (bfd *	       ab
 	  rv = _bfd_generic_get_section_contents (abfd, section, buf,
 						  (offset & -4), 4);
 	  if (!rv)
-	    return FALSE;
+	    return false;
 
 	  bfd_putb32 (bfd_getl32 (buf), buf);
 
@@ -3484,7 +3487,7 @@ rx_get_section_contents (bfd *	       ab
 	  rv = _bfd_generic_get_section_contents (abfd, section, cloc, offset,
 						  count - end_cnt);
 	  if (!rv)
-	    return FALSE;
+	    return false;
 
 	  for (cnt = count; cnt >= 4; cnt -= 4, cloc += 4)
 	    bfd_putb32 (bfd_getl32 (cloc), cloc);
@@ -3499,7 +3502,7 @@ rx_get_section_contents (bfd *	       ab
 	  rv = _bfd_generic_get_section_contents (abfd, section, buf,
 						  offset + count - end_cnt, 4);
 	  if (!rv)
-	    return FALSE;
+	    return false;
 
 	  bfd_putb32 (bfd_getl32 (buf), buf);
 	  memcpy (cloc, buf, end_cnt);
@@ -3512,7 +3515,7 @@ rx_get_section_contents (bfd *	       ab
 }
 
 #ifdef DJDEBUG
-static bfd_boolean
+static bool
 rx2_set_section_contents (bfd *	       abfd,
 			 sec_ptr       section,
 			 const void *  location,
@@ -3543,16 +3546,16 @@ rx2_set_section_contents (bfd *	       a
 #define _bfd_elf_set_section_contents rx2_set_section_contents
 #endif
 
-static bfd_boolean
+static bool
 rx_set_section_contents (bfd *	       abfd,
 			 sec_ptr       section,
 			 const void *  location,
 			 file_ptr      offset,
 			 bfd_size_type count)
 {
-  bfd_boolean exec = (abfd->flags & EXEC_P) ? TRUE : FALSE;
-  bfd_boolean s_code = (section->flags & SEC_CODE) ? TRUE : FALSE;
-  bfd_boolean rv;
+  bool exec = (abfd->flags & EXEC_P) != 0;
+  bool s_code = (section->flags & SEC_CODE) != 0;
+  bool rv;
   char * swapped_data = NULL;
   bfd_size_type i;
   bfd_vma caddr = section->vma + offset;
@@ -3615,6 +3618,8 @@ rx_set_section_contents (bfd *	       ab
       char * cloc = (char *) location;
 
       swapped_data = (char *) bfd_alloc (abfd, count);
+      if (swapped_data == NULL)
+	return false;
 
       for (i = 0; i < count; i += 4)
 	{
@@ -3655,10 +3660,10 @@ rx_set_section_contents (bfd *	       ab
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 rx_final_link (bfd * abfd, struct bfd_link_info * info)
 {
   asection * o;
@@ -3683,7 +3688,7 @@ rx_final_link (bfd * abfd, struct bfd_li
   return bfd_elf_final_link (abfd, info);
 }
 
-static bfd_boolean
+static bool
 elf32_rx_modify_headers (bfd *abfd, struct bfd_link_info *info)
 {
   const struct elf_backend_data * bed;
@@ -3742,7 +3747,7 @@ typedef struct {
   FILE *mapfile;
 } RX_Table_Info;
 
-static bfd_boolean
+static bool
 rx_table_find (struct bfd_hash_entry *vent, void *vinfo)
 {
   RX_Table_Info *info = (RX_Table_Info *)vinfo;
@@ -3760,14 +3765,14 @@ rx_table_find (struct bfd_hash_entry *ve
      $tablestart$<NAME>.  */
   if (ent->type != bfd_link_hash_defined
       && ent->type != bfd_link_hash_defweak)
-    return TRUE;
+    return true;
 
   name = ent->root.string;
   sec = ent->u.def.section;
   abfd = sec->owner;
 
-  if (strncmp (name, "$tablestart$", 12))
-    return TRUE;
+  if (!startswith (name, "$tablestart$"))
+    return true;
 
   sec->flags |= SEC_KEEP;
 
@@ -3779,17 +3784,19 @@ rx_table_find (struct bfd_hash_entry *ve
      find all the related symbols and mark their sections as SEC_KEEP
      so we don't garbage collect them.  */
 
-  buf = (char *) malloc (12 + 10 + strlen (tname));
+  buf = (char *) bfd_malloc (12 + 10 + strlen (tname));
+  if (buf == NULL)
+    return false;
 
   sprintf (buf, "$tableend$%s", tname);
-  h = bfd_link_hash_lookup (info->info->hash, buf, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->info->hash, buf, false, false, true);
   if (!h || (h->type != bfd_link_hash_defined
 	     && h->type != bfd_link_hash_defweak))
     {
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB:%pA: table %s missing corresponding %s"),
 			  abfd, sec, name, buf);
-      return TRUE;
+      return true;
     }
 
   if (h->u.def.section != ent->u.def.section)
@@ -3798,13 +3805,13 @@ rx_table_find (struct bfd_hash_entry *ve
       _bfd_error_handler (_("%pB:%pA: %s and %s must be in the same input section"),
 			  h->u.def.section->owner, h->u.def.section,
 			  name, buf);
-      return TRUE;
+      return true;
     }
 
   end_addr = h->u.def.value;
 
   sprintf (buf, "$tableentry$default$%s", tname);
-  h = bfd_link_hash_lookup (info->info->hash, buf, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->info->hash, buf, false, false, true);
   if (h && (h->type == bfd_link_hash_defined
 	    || h->type == bfd_link_hash_defweak))
     {
@@ -3814,7 +3821,7 @@ rx_table_find (struct bfd_hash_entry *ve
   for (idx = 0; idx < (int) (end_addr - start_addr) / 4; idx ++)
     {
       sprintf (buf, "$tableentry$%d$%s", idx, tname);
-      h = bfd_link_hash_lookup (info->info->hash, buf, FALSE, FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->info->hash, buf, false, false, true);
       if (h && (h->type == bfd_link_hash_defined
 		|| h->type == bfd_link_hash_defweak))
 	{
@@ -3823,13 +3830,13 @@ rx_table_find (struct bfd_hash_entry *ve
     }
 
   /* Return TRUE to keep scanning, FALSE to end the traversal.  */
-  return TRUE;
+  return true;
 }
 
 /* We need to check for table entry symbols and build the tables, and
    we need to do it before the linker does garbage collection.  This function is
    called once per input object file.  */
-static bfd_boolean
+static bool
 rx_check_directives
     (bfd *		       abfd ATTRIBUTE_UNUSED,
      struct bfd_link_info *    info ATTRIBUTE_UNUSED)
@@ -3840,11 +3847,11 @@ rx_check_directives
   stuff.info = info;
   bfd_hash_traverse (&(info->hash->table), rx_table_find, &stuff);
 
-  return TRUE;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 rx_table_map_2 (struct bfd_hash_entry *vent, void *vinfo)
 {
   RX_Table_Info *info = (RX_Table_Info *)vinfo;
@@ -3858,12 +3865,12 @@ rx_table_map_2 (struct bfd_hash_entry *v
 
   if (ent->type != bfd_link_hash_defined
       && ent->type != bfd_link_hash_defweak)
-    return TRUE;
+    return true;
 
   name = ent->root.string;
 
   if (name[0] == '$' || name[0] == '.' || name[0] < ' ')
-    return TRUE;
+    return true;
 
   addr = (ent->u.def.value
 	  + ent->u.def.section->output_section->vma
@@ -3876,10 +3883,10 @@ rx_table_map_2 (struct bfd_hash_entry *v
   if (addr == info->table_default_handler)
     info->table_default_entry = ent;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 rx_table_map (struct bfd_hash_entry *vent, void *vinfo)
 {
   RX_Table_Info *info = (RX_Table_Info *)vinfo;
@@ -3896,25 +3903,27 @@ rx_table_map (struct bfd_hash_entry *ven
      $tablestart$<NAME>.  */
   if (ent->type != bfd_link_hash_defined
       && ent->type != bfd_link_hash_defweak)
-    return TRUE;
+    return true;
 
   name = ent->root.string;
 
-  if (strncmp (name, "$tablestart$", 12))
-    return TRUE;
+  if (!startswith (name, "$tablestart$"))
+    return true;
 
   tname = name + 12;
   start_addr = (ent->u.def.value
 		+ ent->u.def.section->output_section->vma
 		+ ent->u.def.section->output_offset);
 
-  buf = (char *) malloc (12 + 10 + strlen (tname));
+  buf = (char *) bfd_malloc (12 + 10 + strlen (tname));
+  if (buf == NULL)
+    return false;
 
   sprintf (buf, "$tableend$%s", tname);
   end_addr = get_symbol_value_maybe (buf, info->info);
 
   sprintf (buf, "$tableentry$default$%s", tname);
-  h = bfd_link_hash_lookup (info->info->hash, buf, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->info->hash, buf, false, false, true);
   if (h)
     {
       info->table_default_handler = (h->u.def.value
@@ -3928,13 +3937,26 @@ rx_table_map (struct bfd_hash_entry *ven
 
   info->table_start = start_addr;
   info->table_size = (int) (end_addr - start_addr) / 4;
-  info->table_handlers = (bfd_vma *) malloc (info->table_size * sizeof (bfd_vma));
-  info->table_entries = (struct bfd_link_hash_entry **) malloc (info->table_size * sizeof (struct bfd_link_hash_entry));
+  info->table_handlers = (bfd_vma *)
+    bfd_malloc (info->table_size * sizeof (bfd_vma));
+  if (info->table_handlers == NULL)
+    {
+      free (buf);
+      return false;
+    }
+  info->table_entries = (struct bfd_link_hash_entry **)
+    bfd_malloc (info->table_size * sizeof (struct bfd_link_hash_entry));
+  if (info->table_entries == NULL)
+    {
+      free (info->table_handlers);
+      free (buf);
+      return false;
+    }
 
   for (idx = 0; idx < (int) (end_addr - start_addr) / 4; idx ++)
     {
       sprintf (buf, "$tableentry$%d$%s", idx, tname);
-      h = bfd_link_hash_lookup (info->info->hash, buf, FALSE, FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->info->hash, buf, false, false, true);
       if (h && (h->type == bfd_link_hash_defined
 		|| h->type == bfd_link_hash_defweak))
 	{
@@ -3951,16 +3973,17 @@ rx_table_map (struct bfd_hash_entry *ven
 
   bfd_hash_traverse (&(info->info->hash->table), rx_table_map_2, info);
 
-  fprintf (info->mapfile, "\nRX Vector Table: %s has %d entries at 0x%08" BFD_VMA_FMT "x\n\n",
-	   tname, info->table_size, start_addr);
+  fprintf (info->mapfile,
+	   "\nRX Vector Table: %s has %d entries at 0x%08" PRIx64 "\n\n",
+	   tname, info->table_size, (uint64_t) start_addr);
 
   if (info->table_default_entry)
-    fprintf (info->mapfile, "  default handler is: %s at 0x%08" BFD_VMA_FMT "x\n",
+    fprintf (info->mapfile, "  default handler is: %s at 0x%08" PRIx64 "\n",
 	     info->table_default_entry->root.string,
-	     info->table_default_handler);
+	     (uint64_t) info->table_default_handler);
   else if (info->table_default_handler != (bfd_vma)(-1))
-    fprintf (info->mapfile, "  default handler is at 0x%08" BFD_VMA_FMT "x\n",
-	     info->table_default_handler);
+    fprintf (info->mapfile, "  default handler is at 0x%08" PRIx64 "\n",
+	     (uint64_t) info->table_default_handler);
   else
     fprintf (info->mapfile, "  no default handler\n");
 
@@ -3976,7 +3999,8 @@ rx_table_map (struct bfd_hash_entry *ven
 	}
       need_elipses = 1;
 
-      fprintf (info->mapfile, "  0x%08" BFD_VMA_FMT "x [%3d] ", start_addr + 4 * idx, idx);
+      fprintf (info->mapfile,
+	       "  0x%08" PRIx64 " [%3d] ", (uint64_t) start_addr + 4 * idx, idx);
 
       if (info->table_handlers[idx] == (bfd_vma) (-1))
 	fprintf (info->mapfile, "(no handler found)\n");
@@ -3991,18 +4015,21 @@ rx_table_map (struct bfd_hash_entry *ven
 
       else if (info->table_entries[idx])
 	{
-	  fprintf (info->mapfile, "0x%08" BFD_VMA_FMT "x %s\n", info->table_handlers[idx], info->table_entries[idx]->root.string);
+	  fprintf (info->mapfile, "0x%08" PRIx64 " %s\n",
+		   (uint64_t) info->table_handlers[idx],
+		   info->table_entries[idx]->root.string);
 	}
 
       else
 	{
-	  fprintf (info->mapfile, "0x%08" BFD_VMA_FMT "x ???\n", info->table_handlers[idx]);
+	  fprintf (info->mapfile, "0x%08" PRIx64 " ???\n",
+		   (uint64_t) info->table_handlers[idx]);
 	}
     }
   if (need_elipses)
     fprintf (info->mapfile, "  . . .\n");
 
-  return TRUE;
+  return true;
 }
 
 void
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-rx.h ./bfd/elf32-rx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-rx.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-rx.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Renesas RX specific support for 32-bit ELF.
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-s12z.c ./bfd/elf32-s12z.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-s12z.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-s12z.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Freescale S12Z-specific support for 32-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    (Heavily copied from the D10V port by Martin Hunt (hunt@cygnus.com))
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,7 +33,7 @@
 /* Relocation functions.  */
 static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean s12z_info_to_howto_rel
+static bool s12z_info_to_howto_rel
   (bfd *, arelent *, Elf_Internal_Rela *);
 
 static bfd_reloc_status_type
@@ -100,92 +100,92 @@ static reloc_howto_type elf_s12z_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_S12Z_NONE,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_S12Z_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 24 bit absolute relocation emitted by the OPR mode operands  */
   HOWTO (R_S12Z_OPR,        /* type */
 	 0,			/* rightshift */
-	 5,			/* size (0 = byte, 1 = short, 2 = long) */
+	 3,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 shift_addend_reloc,
 	 "R_S12Z_OPR",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00ffffff,            /* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The purpose of this reloc is not known */
   HOWTO (R_S12Z_UKNWN_2,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_S12Z_UKNWN_2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 15 bit PC-rel relocation */
   HOWTO (R_S12Z_PCREL_7_15,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 15,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 shift_addend_reloc,
 	 "R_S12Z_PCREL_7_15",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00,                  /* src_mask */
 	 0x007fff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 24 bit absolute relocation emitted by EXT24 mode operands */
   HOWTO (R_S12Z_EXT24,        /* type */
 	 0,			/* rightshift */
-	 5,			/* size (0 = byte, 1 = short, 2 = long) */
+	 3,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_S12Z_EXT24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,            /* src_mask */
 	 0x00ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 18 bit absolute relocation */
   HOWTO (R_S12Z_EXT18,        /* type */
 	 0,			/* rightshift */
-	 5,			/* size (0 = byte, 1 = short, 2 = long) */
+	 3,			/* size */
 	 18,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 opru18_reloc,	        /* special_function */
 	 "R_S12Z_EXT18",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,            /* src_mask */
 	 0x0005ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.   This kind of relocation is
      schizophrenic - Although they appear in sections named .rela.debug.*
@@ -198,32 +198,32 @@ static reloc_howto_type elf_s12z_howto_t
 
   HOWTO (R_S12Z_CW32,        /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_S12Z_CW32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,            /* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation  */
   HOWTO (R_S12Z_EXT32,        /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_S12Z_EXT32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,            /* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 /* Map BFD reloc types to S12Z ELF reloc types.  */
@@ -284,7 +284,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an S12Z ELF reloc.  */
 
-static bfd_boolean
+static bool
 s12z_info_to_howto_rel (bfd *abfd,
 			  arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
@@ -296,19 +296,19 @@ s12z_info_to_howto_rel (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = &elf_s12z_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 s12z_elf_set_mach_from_flags (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_s12z, 0);
 
-  return TRUE;
+  return true;
 }
 
 #define ELF_ARCH		bfd_arch_s12z
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-s390.c ./bfd/elf32-s390.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-s390.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-s390.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* IBM S/390-specific support for 32-bit ELF
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Contributed by Carl B. Pedersen and Martin Schwidefsky.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -40,142 +40,142 @@ static reloc_howto_type elf_howto_table[
 {
   HOWTO (R_390_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = 2 byte, 2 = 4 byte) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_390_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
-  HOWTO(R_390_8,	 0, 0,	8, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_8",	 FALSE, 0,0x000000ff, FALSE),
-  HOWTO(R_390_12,	 0, 1, 12, FALSE, 0, complain_overflow_dont,
-	bfd_elf_generic_reloc, "R_390_12",	 FALSE, 0,0x00000fff, FALSE),
-  HOWTO(R_390_16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_16",	 FALSE, 0,0x0000ffff, FALSE),
-  HOWTO(R_390_32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_32",	 FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_PC32,	 0, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC32",	 FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_GOT12,	 0, 1, 12, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOT12",	 FALSE, 0,0x00000fff, FALSE),
-  HOWTO(R_390_GOT32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOT32",	 FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_PLT32,	 0, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT32",	 FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_COPY,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_COPY",	 FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_GLOB_DAT,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GLOB_DAT", FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_JMP_SLOT,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_JMP_SLOT", FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_RELATIVE,	 0, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_RELATIVE", FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_GOTOFF32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTOFF32", FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_GOTPC,	 0, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPC",	 FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_GOT16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOT16",	 FALSE, 0,0x0000ffff, FALSE),
-  HOWTO(R_390_PC16,	 0, 1, 16,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC16",	 FALSE, 0,0x0000ffff, TRUE),
-  HOWTO(R_390_PC16DBL,	 1, 1, 16,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC16DBL",	 FALSE, 0,0x0000ffff, TRUE),
-  HOWTO(R_390_PLT16DBL,	 1, 1, 16,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT16DBL", FALSE, 0,0x0000ffff, TRUE),
-  HOWTO(R_390_PC32DBL,	 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC32DBL",	 FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_PLT32DBL,	 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT32DBL", FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_GOTPCDBL,	 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPCDBL", FALSE, 0,0xffffffff, TRUE),
+  HOWTO(R_390_8,	 0, 1,	8, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_8",	 false, 0,0x000000ff, false),
+  HOWTO(R_390_12,	 0, 2, 12, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_390_12",	 false, 0,0x00000fff, false),
+  HOWTO(R_390_16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_16",	 false, 0,0x0000ffff, false),
+  HOWTO(R_390_32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_32",	 false, 0,0xffffffff, false),
+  HOWTO(R_390_PC32,	 0, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC32",	 false, 0,0xffffffff, true),
+  HOWTO(R_390_GOT12,	 0, 2, 12, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOT12",	 false, 0,0x00000fff, false),
+  HOWTO(R_390_GOT32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOT32",	 false, 0,0xffffffff, false),
+  HOWTO(R_390_PLT32,	 0, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT32",	 false, 0,0xffffffff, true),
+  HOWTO(R_390_COPY,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_COPY",	 false, 0,0xffffffff, false),
+  HOWTO(R_390_GLOB_DAT,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GLOB_DAT", false, 0,0xffffffff, false),
+  HOWTO(R_390_JMP_SLOT,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_JMP_SLOT", false, 0,0xffffffff, false),
+  HOWTO(R_390_RELATIVE,	 0, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_RELATIVE", false, 0,0xffffffff, false),
+  HOWTO(R_390_GOTOFF32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTOFF32", false, 0,0xffffffff, false),
+  HOWTO(R_390_GOTPC,	 0, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPC",	 false, 0,0xffffffff, true),
+  HOWTO(R_390_GOT16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOT16",	 false, 0,0x0000ffff, false),
+  HOWTO(R_390_PC16,	 0, 2, 16,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC16",	 false, 0,0x0000ffff, true),
+  HOWTO(R_390_PC16DBL,	 1, 2, 16,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC16DBL",	 false, 0,0x0000ffff, true),
+  HOWTO(R_390_PLT16DBL,	 1, 2, 16,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT16DBL", false, 0,0x0000ffff, true),
+  HOWTO(R_390_PC32DBL,	 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC32DBL",	 false, 0,0xffffffff, true),
+  HOWTO(R_390_PLT32DBL,	 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT32DBL", false, 0,0xffffffff, true),
+  HOWTO(R_390_GOTPCDBL,	 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPCDBL", false, 0,0xffffffff, true),
   EMPTY_HOWTO (R_390_64),	/* Empty entry for R_390_64.  */
   EMPTY_HOWTO (R_390_PC64),	/* Empty entry for R_390_PC64.  */
   EMPTY_HOWTO (R_390_GOT64),	/* Empty entry for R_390_GOT64.  */
   EMPTY_HOWTO (R_390_PLT64),	/* Empty entry for R_390_PLT64.  */
-  HOWTO(R_390_GOTENT,	 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTENT",	 FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_GOTOFF16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTOFF16", FALSE, 0,0x0000ffff, FALSE),
+  HOWTO(R_390_GOTENT,	 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTENT",	 false, 0,0xffffffff, true),
+  HOWTO(R_390_GOTOFF16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTOFF16", false, 0,0x0000ffff, false),
   EMPTY_HOWTO (R_390_GOTOFF64),	/* Empty entry for R_390_GOTOFF64.  */
-  HOWTO(R_390_GOTPLT12,	 0, 1, 12, FALSE, 0, complain_overflow_dont,
-	bfd_elf_generic_reloc, "R_390_GOTPLT12", FALSE, 0,0x00000fff, FALSE),
-  HOWTO(R_390_GOTPLT16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPLT16", FALSE, 0,0x0000ffff, FALSE),
-  HOWTO(R_390_GOTPLT32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPLT32", FALSE, 0,0xffffffff, FALSE),
+  HOWTO(R_390_GOTPLT12,	 0, 2, 12, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_390_GOTPLT12", false, 0,0x00000fff, false),
+  HOWTO(R_390_GOTPLT16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPLT16", false, 0,0x0000ffff, false),
+  HOWTO(R_390_GOTPLT32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPLT32", false, 0,0xffffffff, false),
   EMPTY_HOWTO (R_390_GOTPLT64),	/* Empty entry for R_390_GOTPLT64.  */
-  HOWTO(R_390_GOTPLTENT, 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPLTENT",FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_PLTOFF16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLTOFF16", FALSE, 0,0x0000ffff, FALSE),
-  HOWTO(R_390_PLTOFF32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLTOFF32", FALSE, 0,0xffffffff, FALSE),
+  HOWTO(R_390_GOTPLTENT, 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPLTENT",false, 0,0xffffffff, true),
+  HOWTO(R_390_PLTOFF16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLTOFF16", false, 0,0x0000ffff, false),
+  HOWTO(R_390_PLTOFF32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLTOFF32", false, 0,0xffffffff, false),
   EMPTY_HOWTO (R_390_PLTOFF64),	/* Empty entry for R_390_PLTOFF64.  */
-  HOWTO(R_390_TLS_LOAD, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-	s390_tls_reloc, "R_390_TLS_LOAD", FALSE, 0, 0, FALSE),
-  HOWTO(R_390_TLS_GDCALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-	s390_tls_reloc, "R_390_TLS_GDCALL", FALSE, 0, 0, FALSE),
-  HOWTO(R_390_TLS_LDCALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-	s390_tls_reloc, "R_390_TLS_LDCALL", FALSE, 0, 0, FALSE),
-  HOWTO(R_390_TLS_GD32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_GD32", FALSE, 0, 0xffffffff, FALSE),
+  HOWTO(R_390_TLS_LOAD, 0, 0, 0, false, 0, complain_overflow_dont,
+	s390_tls_reloc, "R_390_TLS_LOAD", false, 0, 0, false),
+  HOWTO(R_390_TLS_GDCALL, 0, 0, 0, false, 0, complain_overflow_dont,
+	s390_tls_reloc, "R_390_TLS_GDCALL", false, 0, 0, false),
+  HOWTO(R_390_TLS_LDCALL, 0, 0, 0, false, 0, complain_overflow_dont,
+	s390_tls_reloc, "R_390_TLS_LDCALL", false, 0, 0, false),
+  HOWTO(R_390_TLS_GD32, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_GD32", false, 0, 0xffffffff, false),
   EMPTY_HOWTO (R_390_TLS_GD64),	/* Empty entry for R_390_TLS_GD64.  */
-  HOWTO(R_390_TLS_GOTIE12, 0, 1, 12, FALSE, 0, complain_overflow_dont,
-	bfd_elf_generic_reloc, "R_390_TLS_GOTIE12", FALSE, 0, 0x00000fff, FALSE),
-  HOWTO(R_390_TLS_GOTIE32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_GOTIE32", FALSE, 0, 0xffffffff, FALSE),
+  HOWTO(R_390_TLS_GOTIE12, 0, 2, 12, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_390_TLS_GOTIE12", false, 0, 0x00000fff, false),
+  HOWTO(R_390_TLS_GOTIE32, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_GOTIE32", false, 0, 0xffffffff, false),
   EMPTY_HOWTO (R_390_TLS_GOTIE64),	/* Empty entry for R_390_TLS_GOTIE64.  */
-  HOWTO(R_390_TLS_LDM32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_LDM32", FALSE, 0, 0xffffffff, FALSE),
+  HOWTO(R_390_TLS_LDM32, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_LDM32", false, 0, 0xffffffff, false),
   EMPTY_HOWTO (R_390_TLS_LDM64),	/* Empty entry for R_390_TLS_LDM64.  */
-  HOWTO(R_390_TLS_IE32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_IE32", FALSE, 0, 0xffffffff, FALSE),
+  HOWTO(R_390_TLS_IE32, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_IE32", false, 0, 0xffffffff, false),
   EMPTY_HOWTO (R_390_TLS_IE64),	/* Empty entry for R_390_TLS_IE64.  */
-  HOWTO(R_390_TLS_IEENT, 1, 2, 32, TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_IEENT", FALSE, 0, 0xffffffff, TRUE),
-  HOWTO(R_390_TLS_LE32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_LE32", FALSE, 0, 0xffffffff, FALSE),
+  HOWTO(R_390_TLS_IEENT, 1, 4, 32, true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_IEENT", false, 0, 0xffffffff, true),
+  HOWTO(R_390_TLS_LE32, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_LE32", false, 0, 0xffffffff, false),
   EMPTY_HOWTO (R_390_TLS_LE64),	/* Empty entry for R_390_TLS_LE64.  */
-  HOWTO(R_390_TLS_LDO32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_LDO32", FALSE, 0, 0xffffffff, FALSE),
+  HOWTO(R_390_TLS_LDO32, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_LDO32", false, 0, 0xffffffff, false),
   EMPTY_HOWTO (R_390_TLS_LDO64),	/* Empty entry for R_390_TLS_LDO64.  */
-  HOWTO(R_390_TLS_DTPMOD, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_DTPMOD", FALSE, 0, 0xffffffff, FALSE),
-  HOWTO(R_390_TLS_DTPOFF, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_DTPOFF", FALSE, 0, 0xffffffff, FALSE),
-  HOWTO(R_390_TLS_TPOFF, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_TPOFF", FALSE, 0, 0xffffffff, FALSE),
-  HOWTO(R_390_20,	 0, 2, 20, FALSE, 8, complain_overflow_dont,
-	s390_elf_ldisp_reloc, "R_390_20",      FALSE, 0,0x0fffff00, FALSE),
-  HOWTO(R_390_GOT20,	 0, 2, 20, FALSE, 8, complain_overflow_dont,
-	s390_elf_ldisp_reloc, "R_390_GOT20",   FALSE, 0,0x0fffff00, FALSE),
-  HOWTO(R_390_GOTPLT20,	 0, 2, 20, FALSE, 8, complain_overflow_dont,
-	s390_elf_ldisp_reloc, "R_390_GOTPLT20", FALSE, 0,0x0fffff00, FALSE),
-  HOWTO(R_390_TLS_GOTIE20, 0, 2, 20, FALSE, 8, complain_overflow_dont,
-	s390_elf_ldisp_reloc, "R_390_TLS_GOTIE20", FALSE, 0,0x0fffff00, FALSE),
-  HOWTO(R_390_IRELATIVE, 0, 2, 32, TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_IRELATIVE", FALSE, 0, 0xffffffff, FALSE),
-  HOWTO(R_390_PC12DBL,	 1, 1, 12,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC12DBL",	 FALSE, 0,0x00000fff, TRUE),
-  HOWTO(R_390_PLT12DBL,	 1, 1, 12,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT12DBL", FALSE, 0,0x00000fff, TRUE),
-  HOWTO(R_390_PC24DBL,	 1, 2, 24,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC24DBL",	 FALSE, 0,0x00ffffff, TRUE),
-  HOWTO(R_390_PLT24DBL,	 1, 2, 24,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT24DBL", FALSE, 0,0x00ffffff, TRUE),
+  HOWTO(R_390_TLS_DTPMOD, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_DTPMOD", false, 0, 0xffffffff, false),
+  HOWTO(R_390_TLS_DTPOFF, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_DTPOFF", false, 0, 0xffffffff, false),
+  HOWTO(R_390_TLS_TPOFF, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_TPOFF", false, 0, 0xffffffff, false),
+  HOWTO(R_390_20,	 0, 4, 20, false, 8, complain_overflow_dont,
+	s390_elf_ldisp_reloc, "R_390_20",      false, 0,0x0fffff00, false),
+  HOWTO(R_390_GOT20,	 0, 4, 20, false, 8, complain_overflow_dont,
+	s390_elf_ldisp_reloc, "R_390_GOT20",   false, 0,0x0fffff00, false),
+  HOWTO(R_390_GOTPLT20,	 0, 4, 20, false, 8, complain_overflow_dont,
+	s390_elf_ldisp_reloc, "R_390_GOTPLT20", false, 0,0x0fffff00, false),
+  HOWTO(R_390_TLS_GOTIE20, 0, 4, 20, false, 8, complain_overflow_dont,
+	s390_elf_ldisp_reloc, "R_390_TLS_GOTIE20", false, 0,0x0fffff00, false),
+  HOWTO(R_390_IRELATIVE, 0, 4, 32, true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_IRELATIVE", false, 0, 0xffffffff, false),
+  HOWTO(R_390_PC12DBL,	 1, 2, 12,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC12DBL",	 false, 0,0x00000fff, true),
+  HOWTO(R_390_PLT12DBL,	 1, 2, 12,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT12DBL", false, 0,0x00000fff, true),
+  HOWTO(R_390_PC24DBL,	 1, 4, 24,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC24DBL",	 false, 0,0x00ffffff, true),
+  HOWTO(R_390_PLT24DBL,	 1, 4, 24,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT24DBL", false, 0,0x00ffffff, true),
 };
 
 /* GNU extension to record C++ vtable hierarchy.  */
 static reloc_howto_type elf32_s390_vtinherit_howto =
-  HOWTO (R_390_GNU_VTINHERIT, 0,2,0,FALSE,0,complain_overflow_dont, NULL, "R_390_GNU_VTINHERIT", FALSE,0, 0, FALSE);
+  HOWTO (R_390_GNU_VTINHERIT, 0,4,0,false,0,complain_overflow_dont, NULL, "R_390_GNU_VTINHERIT", false,0, 0, false);
 static reloc_howto_type elf32_s390_vtentry_howto =
-  HOWTO (R_390_GNU_VTENTRY, 0,2,0,FALSE,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_390_GNU_VTENTRY", FALSE,0,0, FALSE);
+  HOWTO (R_390_GNU_VTENTRY, 0,4,0,false,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_390_GNU_VTENTRY", false,0,0, false);
 
 static reloc_howto_type *
 elf_s390_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
@@ -323,7 +323,7 @@ elf_s390_reloc_name_lookup (bfd *abfd AT
 /* We need to use ELF32_R_TYPE so we have our own copy of this function,
    and elf32-s390.c has its own copy.  */
 
-static bfd_boolean
+static bool
 elf_s390_info_to_howto (bfd *abfd,
 			arelent *cache_ptr,
 			Elf_Internal_Rela *dst)
@@ -347,12 +347,12 @@ elf_s390_info_to_howto (bfd *abfd,
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      abfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       cache_ptr->howto = &elf_howto_table[r_type];
     }
 
-  return TRUE;
+  return true;
 }
 
 /* A relocation function which doesn't do anything.  */
@@ -421,11 +421,11 @@ s390_elf_ldisp_reloc (bfd *abfd ATTRIBUT
     return bfd_reloc_ok;
 }
 
-static bfd_boolean
+static bool
 elf_s390_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == '.' && (name[1] == 'X' || name[1] == 'L'))
-    return TRUE;
+    return true;
 
   return _bfd_elf_is_local_label_name (abfd, name);
 }
@@ -654,9 +654,6 @@ struct elf_s390_link_hash_entry
 {
   struct elf_link_hash_entry elf;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   /* Number of GOTPLT references for a function.  */
   bfd_signed_vma gotplt_refcount;
 
@@ -721,14 +718,14 @@ struct elf_s390_obj_tdata
    && elf_tdata (bfd) != NULL \
    && elf_object_id (bfd) == S390_ELF_DATA)
 
-static bfd_boolean
+static bool
 elf_s390_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct elf_s390_obj_tdata),
 				  S390_ELF_DATA);
 }
 
-static bfd_boolean
+static bool
 elf_s390_object_p (bfd *abfd)
 {
   /* Set the right machine number for an s390 elf32 file.  */
@@ -749,16 +746,14 @@ struct elf_s390_link_hash_table
     bfd_signed_vma refcount;
     bfd_vma offset;
   } tls_ldm_got;
-
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
 };
 
 /* Get the s390 ELF linker hash table from a link_info structure.  */
 
 #define elf_s390_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == S390_ELF_DATA ? ((struct elf_s390_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == S390_ELF_DATA)		\
+   ? (struct elf_s390_link_hash_table *) (p)->hash : NULL)
 
 #undef ELF64
 #include "elf-s390-common.c"
@@ -787,7 +782,6 @@ link_hash_newfunc (struct bfd_hash_entry
       struct elf_s390_link_hash_entry *eh;
 
       eh = (struct elf_s390_link_hash_entry *) entry;
-      eh->dyn_relocs = NULL;
       eh->gotplt_refcount = 0;
       eh->tls_type = GOT_UNKNOWN;
       eh->ifunc_resolver_address = 0;
@@ -803,7 +797,7 @@ static struct bfd_link_hash_table *
 elf_s390_link_hash_table_create (bfd *abfd)
 {
   struct elf_s390_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_s390_link_hash_table);
+  size_t amt = sizeof (struct elf_s390_link_hash_table);
 
   ret = (struct elf_s390_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -832,37 +826,6 @@ elf_s390_copy_indirect_symbol (struct bf
   edir = (struct elf_s390_link_hash_entry *) dir;
   eind = (struct elf_s390_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect
       && dir->got.refcount <= 0)
     {
@@ -917,7 +880,7 @@ elf_s390_tls_transition (struct bfd_link
    allocate space in the global offset table or procedure linkage
    table.  */
 
-static bfd_boolean
+static bool
 elf_s390_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
@@ -934,7 +897,7 @@ elf_s390_check_relocs (bfd *abfd,
   Elf_Internal_Sym *isym;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is_s390_elf (abfd));
 
@@ -959,16 +922,16 @@ elf_s390_check_relocs (bfd *abfd,
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: bad symbol index: %d"),
 			      abfd, r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* A local symbol.  */
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 					abfd, r_symndx);
 	  if (isym == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 	    {
@@ -978,12 +941,12 @@ elf_s390_check_relocs (bfd *abfd,
 		htab->elf.dynobj = abfd;
 
 	      if (!s390_elf_create_ifunc_sections (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 
 	      if (local_got_refcounts == NULL)
 		{
 		  if (!elf_s390_allocate_local_syminfo (abfd, symtab_hdr))
-		    return FALSE;
+		    return false;
 		  local_got_refcounts = elf_local_got_refcounts (abfd);
 		}
 	      plt = elf_s390_local_plt (abfd);
@@ -1027,7 +990,7 @@ elf_s390_check_relocs (bfd *abfd,
 	      && local_got_refcounts == NULL)
 	    {
 	      if (!elf_s390_allocate_local_syminfo (abfd, symtab_hdr))
-		return FALSE;
+		return false;
 	      local_got_refcounts = elf_local_got_refcounts (abfd);
 	    }
 	  /* Fall through.  */
@@ -1040,7 +1003,7 @@ elf_s390_check_relocs (bfd *abfd,
 	      if (htab->elf.dynobj == NULL)
 		htab->elf.dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -1049,7 +1012,7 @@ elf_s390_check_relocs (bfd *abfd,
 	  if (htab->elf.dynobj == NULL)
 	    htab->elf.dynobj = abfd;
 	  if (!s390_elf_create_ifunc_sections (htab->elf.dynobj, info))
-	    return FALSE;
+	    return false;
 
 	  /* Make sure an IFUNC symbol defined in a non-shared object
 	     always gets a PLT slot.  */
@@ -1187,7 +1150,7 @@ elf_s390_check_relocs (bfd *abfd,
 		    /* xgettext:c-format */
 		    (_("%pB: `%s' accessed both as normal and thread local symbol"),
 		     abfd, h->root.root.string);
-		  return FALSE;
+		  return false;
 		}
 	      if (old_tls_type > tls_type)
 		tls_type = old_tls_type;
@@ -1296,17 +1259,17 @@ elf_s390_check_relocs (bfd *abfd,
 		    htab->elf.dynobj = abfd;
 
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ TRUE);
+		    (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
 		{
-		  head = &((struct elf_s390_link_hash_entry *) h)->dyn_relocs;
+		  head = &h->dyn_relocs;
 		}
 	      else
 		{
@@ -1316,10 +1279,10 @@ elf_s390_check_relocs (bfd *abfd,
 		  asection *s;
 		  void *vpp;
 
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
@@ -1332,12 +1295,12 @@ elf_s390_check_relocs (bfd *abfd,
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 
 		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->elf.dynobj, amt));
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -1360,14 +1323,14 @@ elf_s390_check_relocs (bfd *abfd,
 	     Reconstruct it for later use during GC.  */
 	case R_390_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_390_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -1375,7 +1338,7 @@ elf_s390_check_relocs (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -1421,30 +1384,13 @@ elf_s390_adjust_gotplt (struct elf_s390_
   h->gotplt_refcount = -1;
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = elf_s390_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf_s390_adjust_dynamic_symbol (struct bfd_link_info *info,
 				struct elf_link_hash_entry *h)
 {
@@ -1460,11 +1406,9 @@ elf_s390_adjust_dynamic_symbol (struct b
 	{
 	  bfd_size_type pc_count = 0, count = 0;
 	  struct elf_dyn_relocs **pp;
-	  struct elf_s390_link_hash_entry *eh;
 	  struct elf_dyn_relocs *p;
 
-	  eh = (struct elf_s390_link_hash_entry *) h;
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      pc_count += p->pc_count;
 	      p->count -= p->pc_count;
@@ -1492,7 +1436,7 @@ elf_s390_adjust_dynamic_symbol (struct b
 	  h->plt.offset = (bfd_vma) -1;
 	  h->needs_plt = 0;
 	}
-      return TRUE;
+      return true;
     }
 
   /* If this is a function, put it in the procedure linkage table.  We
@@ -1516,7 +1460,7 @@ elf_s390_adjust_dynamic_symbol (struct b
 	  elf_s390_adjust_gotplt((struct elf_s390_link_hash_entry *) h);
 	}
 
-      return TRUE;
+      return true;
     }
   else
     /* It's possible that we incorrectly decided a .plt reloc was
@@ -1537,7 +1481,7 @@ elf_s390_adjust_dynamic_symbol (struct b
       h->root.u.def.value = def->root.u.def.value;
       if (ELIMINATE_COPY_RELOCS || info->nocopyreloc)
 	h->non_got_ref = def->non_got_ref;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -1548,26 +1492,26 @@ elf_s390_adjust_dynamic_symbol (struct b
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h))
+  if (ELIMINATE_COPY_RELOCS && !_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -1607,16 +1551,15 @@ elf_s390_adjust_dynamic_symbol (struct b
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info;
   struct elf_s390_link_hash_table *htab;
-  struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry *)h;
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = elf_s390_hash_table (info);
@@ -1634,7 +1577,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (bfd_link_pic (info)
@@ -1708,7 +1651,7 @@ allocate_dynrelocs (struct elf_link_hash
   else if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = elf_s390_hash_entry(h)->tls_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -1717,7 +1660,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->elf.sgot;
@@ -1743,8 +1686,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -1758,7 +1701,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -1771,12 +1714,12 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -1784,7 +1727,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -1807,7 +1750,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -1816,59 +1759,32 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
 
       sreloc->size += p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info)
 {
   struct elf_s390_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
   htab = elf_s390_hash_table (info);
@@ -1985,7 +1901,7 @@ elf_s390_size_dynamic_sections (bfd *out
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LINKER_CREATED) == 0)
@@ -2003,10 +1919,10 @@ elf_s390_size_dynamic_sections (bfd *out
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0)
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -2044,56 +1960,10 @@ elf_s390_size_dynamic_sections (bfd *out
 	 of garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (htab->elf.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf_s390_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->elf.splt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Return the base VMA address which should be subtracted from real addresses
@@ -2146,7 +2016,7 @@ invalid_tls_insn (bfd *input_bfd,
 
 /* Relocate a 390 ELF section.  */
 
-static bfd_boolean
+static int
 elf_s390_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -2166,7 +2036,7 @@ elf_s390_relocate_section (bfd *output_b
   if (!is_s390_elf (input_bfd))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   htab = elf_s390_hash_table (info);
@@ -2186,11 +2056,11 @@ elf_s390_relocate_section (bfd *output_b
       asection *sec;
       bfd_vma off;
       bfd_vma relocation;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_reloc_status_type r;
       int tls_type;
       asection *base_got = htab->elf.sgot;
-      bfd_boolean resolved_to_zero;
+      bool resolved_to_zero;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       if (r_type == (int) R_390_GNU_VTINHERIT
@@ -2199,7 +2069,7 @@ elf_s390_relocate_section (bfd *output_b
       if (r_type >= (int) R_390_max)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       howto = elf_howto_table + r_type;
@@ -2208,7 +2078,7 @@ elf_s390_relocate_section (bfd *output_b
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  sym = local_syms + r_symndx;
@@ -2217,7 +2087,7 @@ elf_s390_relocate_section (bfd *output_b
 	    {
 	      struct plt_entry *local_plt = elf_s390_local_plt (input_bfd);
 	      if (local_plt == NULL)
-		return FALSE;
+		return false;
 
 	      /* Address of the PLT slot.  */
 	      relocation = (htab->elf.iplt->output_section->vma
@@ -2266,8 +2136,8 @@ elf_s390_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean warned ATTRIBUTE_UNUSED;
-	  bfd_boolean ignored ATTRIBUTE_UNUSED;
+	  bool warned ATTRIBUTE_UNUSED;
+	  bool ignored ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -2326,7 +2196,7 @@ elf_s390_relocate_section (bfd *output_b
 		  if (r_type == R_390_GOTPLTENT)
 		    relocation += htab->elf.sgot->output_section->vma;
 		}
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 
 	    }
 	  /* Fall through.  */
@@ -2343,7 +2213,7 @@ elf_s390_relocate_section (bfd *output_b
 
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      dyn = htab->elf.dynamic_sections_created;
@@ -2426,7 +2296,7 @@ elf_s390_relocate_section (bfd *output_b
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -2513,7 +2383,7 @@ elf_s390_relocate_section (bfd *output_b
 	case R_390_GOTPCDBL:
 	  /* Use global offset table as symbol value.  */
 	  relocation = htab->elf.sgot->output_section->vma;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_PLT12DBL:
@@ -2546,7 +2416,7 @@ elf_s390_relocate_section (bfd *output_b
 	    relocation = (htab->elf.splt->output_section->vma
 			  + htab->elf.splt->output_offset
 			  + h->plt.offset);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_PLTOFF16:
@@ -2574,7 +2444,7 @@ elf_s390_relocate_section (bfd *output_b
 			  + htab->elf.splt->output_offset
 			  + h->plt.offset
 			  - htab->elf.sgot->output_section->vma);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_PC16:
@@ -2694,7 +2564,7 @@ elf_s390_relocate_section (bfd *output_b
 		      || h->root.type == bfd_link_hash_undefined)))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 	      asection *sreloc;
 	      bfd_byte *loc;
 
@@ -2702,16 +2572,16 @@ elf_s390_relocate_section (bfd *output_b
 		 are copied into the output file to be resolved at run
 		 time.  */
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -2738,7 +2608,7 @@ elf_s390_relocate_section (bfd *output_b
 		  outrel.r_addend = relocation + rel->r_addend;
 		  if (r_type == R_390_32)
 		    {
-		      relocate = TRUE;
+		      relocate = true;
 		      outrel.r_info = ELF32_R_INFO (0, R_390_RELATIVE);
 		    }
 		  else
@@ -2750,7 +2620,7 @@ elf_s390_relocate_section (bfd *output_b
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error(bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -2836,7 +2706,7 @@ elf_s390_relocate_section (bfd *output_b
 	      /* This relocation gets optimized away by the local exec
 		 access optimization.  */
 	      BFD_ASSERT (! unresolved_reloc);
-	      bfd_put_32 (output_bfd, -tpoff (info, relocation),
+	      bfd_put_32 (output_bfd, -tpoff (info, relocation) + rel->r_addend,
 			  contents + rel->r_offset);
 	      continue;
 	    }
@@ -2918,7 +2788,7 @@ elf_s390_relocate_section (bfd *output_b
 	      relocation = htab->elf.sgot->output_offset + off;
 	      if (r_type == R_390_TLS_IE32 || r_type == R_390_TLS_IEENT)
 		relocation += htab->elf.sgot->output_section->vma;
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -2958,7 +2828,7 @@ elf_s390_relocate_section (bfd *output_b
 	  relocation = htab->elf.sgot->output_offset + off;
 	  if (r_type == R_390_TLS_IEENT)
 	    relocation += htab->elf.sgot->output_section->vma;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_TLS_LDM32:
@@ -2996,7 +2866,7 @@ elf_s390_relocate_section (bfd *output_b
 	      htab->tls_ldm_got.offset |= 1;
 	    }
 	  relocation = htab->elf.sgot->output_offset + off;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_TLS_LE32:
@@ -3031,7 +2901,7 @@ elf_s390_relocate_section (bfd *output_b
 	  else
 	    {
 	      BFD_ASSERT (! unresolved_reloc);
-	      bfd_put_32 (output_bfd, -tpoff (info, relocation),
+	      bfd_put_32 (output_bfd, -tpoff (info, relocation) + rel->r_addend,
 			  contents + rel->r_offset);
 	    }
 	  continue;
@@ -3084,7 +2954,7 @@ elf_s390_relocate_section (bfd *output_b
 		  else
 		    {
 		      invalid_tls_insn (input_bfd, input_section, rel);
-		      return FALSE;
+		      return false;
 		    }
 		  insn = 0x18000700 | (insn & 0x00f00000) | ry;
 		  bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
@@ -3100,7 +2970,7 @@ elf_s390_relocate_section (bfd *output_b
 		  (insn & 0xff000000) != 0x0d000000)
 		{
 		  invalid_tls_insn (input_bfd, input_section, rel);
-		  return FALSE;
+		  return false;
 		}
 	      if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1))
 		{
@@ -3132,7 +3002,7 @@ elf_s390_relocate_section (bfd *output_b
 		  if ((insn & 0xff000000) == 0x0d000000)
 		    {
 		      invalid_tls_insn (input_bfd, input_section, rel);
-		      return FALSE;
+		      return false;
 		    }
 
 		  if ((insn & 0xff000000) == 0x4d000000)
@@ -3165,7 +3035,7 @@ elf_s390_relocate_section (bfd *output_b
 		      (insn & 0xff000000) != 0x0d000000)
 		    {
 		      invalid_tls_insn (input_bfd, input_section, rel);
-		      return FALSE;
+		      return false;
 		    }
 
 		  if ((insn & 0xff000000) == 0x0d000000)
@@ -3252,7 +3122,7 @@ elf_s390_relocate_section (bfd *output_b
 						      symtab_hdr->sh_link,
 						      sym->st_name);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      if (*name == '\0')
 		name = bfd_section_name (sec);
 	    }
@@ -3268,12 +3138,12 @@ elf_s390_relocate_section (bfd *output_b
 		(_("%pB(%pA+%#" PRIx64 "): reloc against `%s': error %d"),
 		 input_bfd, input_section,
 		 (uint64_t) rel->r_offset, name, (int) r);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Generate the PLT slots together with the dynamic relocations needed
@@ -3425,7 +3295,7 @@ elf_s390_finish_ifunc_symbol (bfd *outpu
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf_s390_finish_dynamic_symbol (bfd *output_bfd,
 				struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
@@ -3623,7 +3493,7 @@ elf_s390_finish_dynamic_symbol (bfd *out
 				       + htab->elf.iplt->output_offset
 				       + h->plt.offset),
 			  htab->elf.sgot->contents + h->got.offset);
-	      return TRUE;
+	      return true;
 	    }
 	}
       else if (bfd_link_pic (info)
@@ -3636,7 +3506,7 @@ elf_s390_finish_dynamic_symbol (bfd *out
 	     will already have been initialized in the
 	     relocate_section function.  */
 	  if (!(h->def_regular || ELF_COMMON_DEF_P (h)))
-	    return FALSE;
+	    return false;
 	  BFD_ASSERT((h->got.offset & 1) != 0);
 	  rela.r_info = ELF32_R_INFO (0, R_390_RELATIVE);
 	  rela.r_addend = (h->root.u.def.value
@@ -3691,7 +3561,7 @@ elf_s390_finish_dynamic_symbol (bfd *out
       || h == htab->elf.hplt)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Used to decide how to sort relocs in an optimal manner for the
@@ -3734,7 +3604,7 @@ elf_s390_reloc_type_class (const struct
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_s390_finish_dynamic_sections (bfd *output_bfd,
 				  struct bfd_link_info *info)
 {
@@ -3850,9 +3720,9 @@ elf_s390_finish_dynamic_sections (bfd *o
 	    if (local_plt[i].plt.offset != (bfd_vma) -1)
 	      {
 		asection *sec = local_plt[i].sec;
-		isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, i);
+		isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd, i);
 		if (isym == NULL)
-		  return FALSE;
+		  return false;
 
 		if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 		  elf_s390_finish_ifunc_symbol (output_bfd, info, NULL, htab,
@@ -3864,12 +3734,12 @@ elf_s390_finish_dynamic_sections (bfd *o
 	      }
 	  }
     }
-  return TRUE;
+  return true;
 }
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf_s390_grok_prstatus (bfd * abfd, Elf_Internal_Note * note)
 {
   int offset;
@@ -3878,7 +3748,7 @@ elf_s390_grok_prstatus (bfd * abfd, Elf_
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 224:			/* S/390 Linux.  */
       /* pr_cursig */
@@ -3898,13 +3768,13 @@ elf_s390_grok_prstatus (bfd * abfd, Elf_
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf_s390_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 124:			/* sizeof(struct elf_prpsinfo) on s390 */
       elf_tdata (abfd)->core->pid
@@ -3928,7 +3798,7 @@ elf_s390_grok_psinfo (bfd *abfd, Elf_Int
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 static char *
@@ -4005,19 +3875,19 @@ elf_s390_plt_sym_val (bfd_vma i, const a
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf32_s390_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
 
   if (!is_s390_elf (ibfd) || !is_s390_elf (obfd))
-    return TRUE;
+    return true;
 
   if (!elf_s390_merge_obj_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   elf_elfheader (obfd)->e_flags |= elf_elfheader (ibfd)->e_flags;
-  return TRUE;
+  return true;
 }
 
 
@@ -4067,6 +3937,6 @@ elf32_s390_merge_private_bfd_data (bfd *
 #define bfd_elf32_mkobject		elf_s390_mkobject
 #define elf_backend_object_p		elf_s390_object_p
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #include "elf32-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-score7.c ./bfd/elf32-score7.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-score7.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-score7.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for S+core.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by
    Brain.lin (brain.lin@sunplusct.com)
    Mei Ligang (ligang@sunnorth.com.cn)
@@ -44,22 +44,22 @@ struct score_elf_link_hash_entry
   unsigned int possibly_dynamic_relocs;
 
   /* If the R_SCORE_ABS32, R_SCORE_REL32 reloc is against a readonly section.  */
-  bfd_boolean readonly_reloc;
+  bool readonly_reloc;
 
   /* We must not create a stub for a symbol that has relocations related to
      taking the function's address, i.e. any but R_SCORE_CALL15 ones.  */
-  bfd_boolean no_fn_stub;
+  bool no_fn_stub;
 
   /* Are we forced local?  This will only be set if we have converted
      the initial global GOT entry to a local GOT entry.  */
-  bfd_boolean forced_local;
+  bool forced_local;
 };
 
 /* Traverse a score ELF linker hash table.  */
 #define score_elf_link_hash_traverse(table, func, info) \
-  (elf_link_hash_traverse \
-   ((table),						     \
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \
+  (elf_link_hash_traverse					\
+   ((table),							\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),	\
     (info)))
 
 /* This structure is used to hold .got entries while estimating got sizes.  */
@@ -197,9 +197,12 @@ static bfd *reldyn_sorting_bfd;
    together, and then referenced via the gp pointer, which yields
    faster assembler code.  This is what we use for the small common
    section.  This approach is copied from ecoff.c.  */
-static asection  score_elf_scom_section;
-static asymbol   score_elf_scom_symbol;
-static asymbol * score_elf_scom_symbol_ptr;
+static asection score_elf_scom_section;
+static const asymbol score_elf_scom_symbol =
+  GLOBAL_SYM_INIT (".scommon", &score_elf_scom_section);
+static asection score_elf_scom_section =
+  BFD_FAKE_SECTION (score_elf_scom_section, &score_elf_scom_symbol,
+		    ".scommon", 0, SEC_IS_COMMON | SEC_SMALL_DATA);
 
 static bfd_reloc_status_type
 score_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
@@ -247,7 +250,7 @@ score_elf_lo16_reloc (bfd *abfd,
 /* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
    dangerous relocation.  */
 
-static bfd_boolean
+static bool
 score_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp)
 {
   unsigned int count;
@@ -257,7 +260,7 @@ score_elf_assign_gp (bfd *output_bfd, bf
   /* If we've already figured out what GP will be, just return it.  */
   *pgp = _bfd_get_gp_value (output_bfd);
   if (*pgp)
-    return TRUE;
+    return true;
 
   count = bfd_get_symcount (output_bfd);
   sym = bfd_get_outsymbols (output_bfd);
@@ -287,10 +290,10 @@ score_elf_assign_gp (bfd *output_bfd, bf
       /* Only get the error once.  */
       *pgp = 4;
       _bfd_set_gp_value (output_bfd, *pgp);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We have to figure out the gp value, so that we can adjust the
@@ -302,7 +305,7 @@ score_elf_assign_gp (bfd *output_bfd, bf
 static bfd_reloc_status_type
 score_elf_final_gp (bfd *output_bfd,
 		    asymbol *symbol,
-		    bfd_boolean relocatable,
+		    bool relocatable,
 		    char **error_message,
 		    bfd_vma *pgp)
 {
@@ -337,23 +340,14 @@ score_elf_final_gp (bfd *output_bfd,
 
 static bfd_reloc_status_type
 score_elf_gprel15_with_gp (bfd *abfd,
-			   asymbol *symbol,
 			   arelent *reloc_entry,
 			   asection *input_section,
-			   bfd_boolean relocateable,
+			   bool relocateable,
 			   void * data,
 			   bfd_vma gp ATTRIBUTE_UNUSED)
 {
-  bfd_vma relocation;
   unsigned long insn;
 
-  if (bfd_is_com_section (symbol->section))
-    relocation = 0;
-  else
-    relocation = symbol->value;
-
-  relocation += symbol->section->output_section->vma;
-  relocation += symbol->section->output_offset;
   if (reloc_entry->address > input_section->size)
     return bfd_reloc_outofrange;
 
@@ -372,7 +366,7 @@ score_elf_gprel15_with_gp (bfd *abfd,
 
 static bfd_reloc_status_type
 gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry,
-		 asection *input_section, bfd_boolean relocatable,
+		 asection *input_section, bool relocatable,
 		 void *data, bfd_vma gp)
 {
   bfd_vma relocation;
@@ -422,7 +416,7 @@ score_elf_gprel15_reloc (bfd *abfd,
 			 bfd *output_bfd,
 			 char **error_message)
 {
-  bfd_boolean relocateable;
+  bool relocateable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
@@ -433,19 +427,21 @@ score_elf_gprel15_reloc (bfd *abfd,
       return bfd_reloc_ok;
     }
   if (output_bfd != NULL)
-    relocateable = TRUE;
+    relocateable = true;
   else
     {
-      relocateable = FALSE;
+      relocateable = false;
       output_bfd = symbol->section->output_section->owner;
+      if (output_bfd == NULL)
+	return bfd_reloc_undefined;
     }
 
   ret = score_elf_final_gp (output_bfd, symbol, relocateable, error_message, &gp);
   if (ret != bfd_reloc_ok)
     return ret;
 
-  return score_elf_gprel15_with_gp (abfd, symbol, reloc_entry,
-					 input_section, relocateable, data, gp);
+  return score_elf_gprel15_with_gp (abfd, reloc_entry,
+				    input_section, relocateable, data, gp);
 }
 
 /* Do a R_SCORE_GPREL32 relocation.  This is a 32 bit value which must
@@ -456,7 +452,7 @@ score_elf_gprel32_reloc (bfd *abfd, arel
 			 void *data, asection *input_section, bfd *output_bfd,
 			 char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
@@ -471,10 +467,10 @@ score_elf_gprel32_reloc (bfd *abfd, arel
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -546,301 +542,301 @@ static reloc_howto_type elf32_score_howt
   /* No relocation.  */
   HOWTO (R_SCORE_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_HI16 */
   HOWTO (R_SCORE_HI16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_hi16_reloc,	/* special_function */
 	 "R_SCORE_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x37fff,		/* src_mask */
 	 0x37fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_LO16 */
   HOWTO (R_SCORE_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_lo16_reloc,	/* special_function */
 	 "R_SCORE_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x37fff,		/* src_mask */
 	 0x37fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /*  R_SCORE_BCMP */
   HOWTO (R_SCORE_BCMP,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_BCMP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SCORE_24,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_24",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x3ff7fff,		/* src_mask */
 	 0x3ff7fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /*R_SCORE_PC19 */
   HOWTO (R_SCORE_PC19,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_PC19",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x3ff03fe,		/* src_mask */
 	 0x3ff03fe,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /*R_SCORE16_11 */
   HOWTO (R_SCORE16_11,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 11,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE16_11",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000000ffe,		/* src_mask */
 	 0x000000ffe,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE16_PC8 */
   HOWTO (R_SCORE16_PC8,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE16_PC8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit absolute */
   HOWTO (R_SCORE_ABS32,		/* type 8 */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_ABS32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit absolute */
   HOWTO (R_SCORE_ABS16,		/* type 11 */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_ABS16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_DUMMY2 */
   HOWTO (R_SCORE_DUMMY2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_DUMMY2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x00007fff,		/* src_mask */
 	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_GP15 */
   HOWTO (R_SCORE_GP15,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_gprel15_reloc,/* special_function */
 	 "R_SCORE_GP15",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x00007fff,		/* src_mask */
 	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_SCORE_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_SCORE_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_SCORE_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_SCORE_GNU_VTENTRY", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_SCORE_GOT15,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 score_elf_got15_reloc, /* special_function */
 	 "R_SCORE_GOT15",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x00007fff,		/* src_mask */
 	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_SCORE_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_got_lo16_reloc, /* special_function */
 	 "R_SCORE_GOT_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x37ffe,		/* src_mask */
 	 0x37ffe,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 15 bit call through global offset table.  */
   HOWTO (R_SCORE_CALL15,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_CALL15",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x00007fff,		/* src_mask */
 	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit GP relative reference.  */
   HOWTO (R_SCORE_GPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_gprel32_reloc, /* special_function */
 	 "R_SCORE_GPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit symbol relative relocation.  */
   HOWTO (R_SCORE_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_REL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_DUMMY_HI16 */
   HOWTO (R_SCORE_DUMMY_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_hi16_reloc,	/* special_function */
 	 "R_SCORE_DUMMY_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x37fff,		/* src_mask */
 	 0x37fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 struct score_reloc_map
@@ -873,7 +869,7 @@ static const struct score_reloc_map elf3
   {BFD_RELOC_SCORE_DUMMY_HI16,	 R_SCORE_DUMMY_HI16},
 };
 
-static INLINE hashval_t
+static inline hashval_t
 score_elf_hash_bfd_vma (bfd_vma addr)
 {
 #ifdef BFD64
@@ -915,14 +911,14 @@ score_elf_got_entry_eq (const void *entr
    index.  Otherwise, assign it the lowest available dynamic
    index.  */
 
-static bfd_boolean
+static bool
 score_elf_sort_hash_table_f (struct score_elf_link_hash_entry *h, void *data)
 {
   struct score_elf_hash_sort_data *hsd = data;
 
   /* Symbols without dynamic symbol table entries aren't interesting at all.  */
   if (h->root.dynindx == -1)
-    return TRUE;
+    return true;
 
   /* Global symbols that need GOT entries that are not explicitly
      referenced are marked with got offset 2.  Those that are
@@ -942,11 +938,11 @@ score_elf_sort_hash_table_f (struct scor
       hsd->low = (struct elf_link_hash_entry *) h;
     }
 
-  return TRUE;
+  return true;
 }
 
 static asection *
-score_elf_got_section (bfd *abfd, bfd_boolean maybe_excluded)
+score_elf_got_section (bfd *abfd, bool maybe_excluded)
 {
   asection *sgot = bfd_get_linker_section (abfd, ".got");
 
@@ -964,7 +960,7 @@ score_elf_got_info (bfd *abfd, asection
   asection *sgot;
   struct score_got_info *g;
 
-  sgot = score_elf_got_section (abfd, TRUE);
+  sgot = score_elf_got_section (abfd, true);
   BFD_ASSERT (sgot != NULL);
   BFD_ASSERT (elf_section_data (sgot) != NULL);
   g = score_elf_section_data (sgot)->u.got_info;
@@ -982,7 +978,7 @@ score_elf_got_info (bfd *abfd, asection
    s7_bfd_score_elf_size_dynamic_sections, this value is 1.  Afterward, the
    section symbols are added and the count is higher.  */
 
-static bfd_boolean
+static bool
 score_elf_sort_hash_table (struct bfd_link_info *info,
 			   unsigned long max_local)
 {
@@ -1020,7 +1016,7 @@ score_elf_sort_hash_table (struct bfd_li
      table index in the GOT.  */
   g->global_gotsym = hsd.low;
 
-  return TRUE;
+  return true;
 }
 
 /* Returns the first relocation of type r_type found, beginning with
@@ -1059,11 +1055,11 @@ score_elf_sort_dynamic_relocs (const voi
 }
 
 /* Return whether a relocation is against a local symbol.  */
-static bfd_boolean
+static bool
 score_elf_local_relocation_p (bfd *input_bfd,
 			      const Elf_Internal_Rela *relocation,
 			      asection **local_sections,
-			      bfd_boolean check_forced)
+			      bool check_forced)
 {
   unsigned long r_symndx;
   Elf_Internal_Shdr *symtab_hdr;
@@ -1075,9 +1071,9 @@ score_elf_local_relocation_p (bfd *input
   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
 
   if (r_symndx < extsymoff)
-    return TRUE;
+    return true;
   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
-    return TRUE;
+    return true;
 
   if (check_forced)
     {
@@ -1089,16 +1085,16 @@ score_elf_local_relocation_p (bfd *input
 	     || h->root.root.type == bfd_link_hash_warning)
 	h = (struct score_elf_link_hash_entry *) h->root.root.u.i.link;
       if (h->root.forced_local)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Returns the dynamic relocation section for DYNOBJ.  */
 
 static asection *
-score_elf_rel_dyn_section (bfd *dynobj, bfd_boolean create_p)
+score_elf_rel_dyn_section (bfd *dynobj, bool create_p)
 {
   static const char dname[] = ".rel.dyn";
   asection *sreloc;
@@ -1126,7 +1122,7 @@ score_elf_allocate_dynamic_relocations (
 {
   asection *s;
 
-  s = score_elf_rel_dyn_section (abfd, FALSE);
+  s = score_elf_rel_dyn_section (abfd, false);
   BFD_ASSERT (s != NULL);
 
   if (s->size == 0)
@@ -1143,7 +1139,7 @@ score_elf_allocate_dynamic_relocations (
    dynamic relocation.  The ADDENDP is adjusted if necessary; the
    caller should store the result in place of the original addend.  */
 
-static bfd_boolean
+static bool
 score_elf_create_dynamic_relocation (bfd *output_bfd,
 				     struct bfd_link_info *info,
 				     const Elf_Internal_Rela *rel,
@@ -1156,11 +1152,11 @@ score_elf_create_dynamic_relocation (bfd
   bfd *dynobj;
   int r_type;
   long indx;
-  bfd_boolean defined_p;
+  bool defined_p;
 
   r_type = ELF32_R_TYPE (rel->r_info);
   dynobj = elf_hash_table (info)->dynobj;
-  sreloc = score_elf_rel_dyn_section (dynobj, FALSE);
+  sreloc = score_elf_rel_dyn_section (dynobj, false);
   BFD_ASSERT (sreloc != NULL);
   BFD_ASSERT (sreloc->contents != NULL);
   BFD_ASSERT (sreloc->reloc_count * SCORE_ELF_REL_SIZE (output_bfd) < sreloc->size);
@@ -1174,7 +1170,7 @@ score_elf_create_dynamic_relocation (bfd
 
   if (outrel[0].r_offset == MINUS_ONE)
     /* The relocation field has been deleted.  */
-    return TRUE;
+    return true;
 
   if (outrel[0].r_offset == MINUS_TWO)
     {
@@ -1182,7 +1178,7 @@ score_elf_create_dynamic_relocation (bfd
 	 some sort.  Functions like _bfd_elf_write_section_eh_frame expect
 	 the field to be fully relocated, so add in the symbol's value.  */
       *addendp += symbol;
-      return TRUE;
+      return true;
     }
 
   /* We must now calculate the dynamic symbol table index to use
@@ -1198,12 +1194,12 @@ score_elf_create_dynamic_relocation (bfd
 	   relocation field.  It therefore treats relocs against
 	   defined symbols in the same way as relocs against
 	   undefined symbols.  */
-      defined_p = FALSE;
+      defined_p = false;
     }
   else
     {
       indx = 0;
-      defined_p = TRUE;
+      defined_p = true;
     }
 
   /* If the relocation was previously an absolute relocation and
@@ -1255,28 +1251,28 @@ score_elf_create_dynamic_relocation (bfd
      will be writing to it.  */
   elf_section_data (input_section->output_section)->this_hdr.sh_flags |= SHF_WRITE;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 score_elf_create_got_section (bfd *abfd,
 			      struct bfd_link_info *info,
-			      bfd_boolean maybe_exclude)
+			      bool maybe_exclude)
 {
   flagword flags;
   asection *s;
   struct elf_link_hash_entry *h;
   struct bfd_link_hash_entry *bh;
   struct score_got_info *g;
-  bfd_size_type amt;
+  size_t amt;
 
   /* This function may be called more than once.  */
-  s = score_elf_got_section (abfd, TRUE);
+  s = score_elf_got_section (abfd, true);
   if (s)
     {
       if (! maybe_exclude)
 	s->flags &= ~SEC_EXCLUDE;
-      return TRUE;
+      return true;
     }
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
@@ -1290,7 +1286,7 @@ score_elf_create_got_section (bfd *abfd,
   elf_hash_table (info)->sgot = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, 4))
-    return FALSE;
+    return false;
 
   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
      linker script because we don't want to define the symbol if we
@@ -1298,8 +1294,8 @@ score_elf_create_got_section (bfd *abfd,
   bh = NULL;
   if (! (_bfd_generic_link_add_one_symbol
 	 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
-	  0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
-    return FALSE;
+	  0, NULL, false, get_elf_backend_data (abfd)->collect, &bh)))
+    return false;
 
   h = (struct elf_link_hash_entry *) bh;
   h->non_elf = 0;
@@ -1309,12 +1305,12 @@ score_elf_create_got_section (bfd *abfd,
 
   if (bfd_link_pic (info)
       && ! bfd_elf_link_record_dynamic_symbol (info, h))
-    return FALSE;
+    return false;
 
   amt = sizeof (struct score_got_info);
   g = bfd_alloc (abfd, amt);
   if (g == NULL)
-    return FALSE;
+    return false;
 
   g->global_gotsym = NULL;
   g->global_gotno = 0;
@@ -1326,11 +1322,11 @@ score_elf_create_got_section (bfd *abfd,
   g->got_entries = htab_try_create (1, score_elf_got_entry_hash,
 				    score_elf_got_entry_eq, NULL);
   if (g->got_entries == NULL)
-    return FALSE;
+    return false;
   score_elf_section_data (s)->u.got_info = g;
   score_elf_section_data (s)->elf.this_hdr.sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_SCORE_GPREL;
 
-  return TRUE;
+  return true;
 }
 
 /* Calculate the %high function.  */
@@ -1394,7 +1390,7 @@ score_elf_create_local_got_entry (bfd *a
 
 static bfd_vma
 score_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
-		       bfd_vma value, bfd_boolean external)
+		       bfd_vma value, bool external)
 {
   asection *sgot;
   struct score_got_info *g;
@@ -1422,7 +1418,7 @@ score_elf_got16_entry (bfd *abfd, bfd *i
 void
 s7_bfd_score_elf_hide_symbol (struct bfd_link_info *info,
 			      struct elf_link_hash_entry *entry,
-			      bfd_boolean force_local)
+			      bool force_local)
 {
   bfd *dynobj;
   asection *got;
@@ -1432,12 +1428,12 @@ s7_bfd_score_elf_hide_symbol (struct bfd
   h = (struct score_elf_link_hash_entry *) entry;
   if (h->forced_local)
     return;
-  h->forced_local = TRUE;
+  h->forced_local = true;
 
   dynobj = elf_hash_table (info)->dynobj;
   if (dynobj != NULL && force_local)
     {
-      got = score_elf_got_section (dynobj, FALSE);
+      got = score_elf_got_section (dynobj, false);
       if (got == NULL)
 	return;
       g = score_elf_section_data (got)->u.got_info;
@@ -1497,7 +1493,7 @@ s7_bfd_score_elf_hide_symbol (struct bfd
    symbol table index lower than any we've seen to date, record it for
    posterity.  */
 
-static bfd_boolean
+static bool
 score_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
 				    bfd *abfd,
 				    struct bfd_link_info *info,
@@ -1512,11 +1508,11 @@ score_elf_record_global_got_symbol (stru
 	{
 	case STV_INTERNAL:
 	case STV_HIDDEN:
-	  s7_bfd_score_elf_hide_symbol (info, h, TRUE);
+	  s7_bfd_score_elf_hide_symbol (info, h, true);
 	  break;
 	}
       if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   entry.abfd = abfd;
@@ -1528,31 +1524,31 @@ score_elf_record_global_got_symbol (stru
   /* If we've already marked this entry as needing GOT space, we don't
      need to do it again.  */
   if (*loc)
-    return TRUE;
+    return true;
 
   *loc = bfd_alloc (abfd, sizeof entry);
   if (! *loc)
-    return FALSE;
+    return false;
 
   entry.gotidx = -1;
 
   memcpy (*loc, &entry, sizeof (entry));
 
   if (h->got.offset != MINUS_ONE)
-    return TRUE;
+    return true;
 
   /* By setting this to a value other than -1, we are indicating that
      there needs to be a GOT entry for H.  Avoid using zero, as the
      generic ELF copy_indirect_symbol tests for <= 0.  */
   h->got.offset = 1;
 
-  return TRUE;
+  return true;
 }
 
 /* Reserve space in G for a GOT entry containing the value of symbol
    SYMNDX in input bfd ABDF, plus ADDEND.  */
 
-static bfd_boolean
+static bool
 score_elf_record_local_got_symbol (bfd *abfd,
 				   long symndx,
 				   bfd_vma addend,
@@ -1566,17 +1562,17 @@ score_elf_record_local_got_symbol (bfd *
   loc = (struct score_got_entry **) htab_find_slot (g->got_entries, &entry, INSERT);
 
   if (*loc)
-    return TRUE;
+    return true;
 
   entry.gotidx = g->local_gotno++;
 
   *loc = bfd_alloc (abfd, sizeof(entry));
   if (! *loc)
-    return FALSE;
+    return false;
 
   memcpy (*loc, &entry, sizeof (entry));
 
-  return TRUE;
+  return true;
 }
 
 /* Returns the GOT offset at which the indicated address can be found.
@@ -1818,7 +1814,7 @@ score_elf_final_link_relocate (reloc_how
 			       struct score_elf_link_hash_entry *h,
 			       Elf_Internal_Sym *local_syms,
 			       asection **local_sections,
-			       bfd_boolean gp_disp_p)
+			       bool gp_disp_p)
 {
   unsigned long r_type;
   unsigned long r_symndx;
@@ -1835,14 +1831,14 @@ score_elf_final_link_relocate (reloc_how
      symbol, adjusted by the addend, resides during execution.  */
   bfd_vma g = MINUS_ONE;
   /* TRUE if the symbol referred to by this relocation is a local symbol.  */
-  bfd_boolean local_p;
+  bool local_p;
   /* The eventual value we will relocate.  */
   bfd_vma value = symbol;
   unsigned long hi16_addend, hi16_offset, hi16_value, uvalue, offset, abs_value = 0;
 
   Elf_Internal_Sym *sym = 0;
   asection *sec = NULL;
-  bfd_boolean merge_p = 0;
+  bool merge_p = 0;
 
 
   if (elf_gp (output_bfd) == 0)
@@ -1883,7 +1879,7 @@ score_elf_final_link_relocate (reloc_how
   rel_addr = (input_section->output_section->vma + input_section->output_offset + rel->r_offset);
 
   /* For hidden symbol.  */
-  local_p = score_elf_local_relocation_p (input_bfd, rel, local_sections, FALSE);
+  local_p = score_elf_local_relocation_p (input_bfd, rel, local_sections, false);
   if (local_p)
     {
       sym = local_syms + r_symndx;
@@ -1954,7 +1950,7 @@ score_elf_final_link_relocate (reloc_how
 	}
     }
 
-  local_p = score_elf_local_relocation_p (input_bfd, rel, local_sections, TRUE);
+  local_p = score_elf_local_relocation_p (input_bfd, rel, local_sections, true);
 
   /* If we haven't already determined the GOT offset, or the GP value,
      and we're going to need it, get it now.  */
@@ -1975,7 +1971,7 @@ score_elf_final_link_relocate (reloc_how
 		 symbol is defined locally, or was forced to be local.
 		 We must initialize this entry in the GOT.  */
 	      bfd *tmpbfd = elf_hash_table (info)->dynobj;
-	      asection *sgot = score_elf_got_section (tmpbfd, FALSE);
+	      asection *sgot = score_elf_got_section (tmpbfd, false);
 	      bfd_put_32 (tmpbfd, value, sgot->contents + g);
 	    }
 	}
@@ -2157,12 +2153,12 @@ score_elf_final_link_relocate (reloc_how
     case R_SCORE_CALL15:
       if (local_p)
 	{
-	  bfd_boolean forced;
+	  bool forced;
 
 	  /* The special case is when the symbol is forced to be local.  We need the
 	     full address in the GOT since no R_SCORE_GOT_LO16 relocation follows.  */
 	  forced = ! score_elf_local_relocation_p (input_bfd, rel,
-						   local_sections, FALSE);
+						   local_sections, false);
 	  value = score_elf_got16_entry (output_bfd, input_bfd, info,
 					 symbol + addend, forced);
 	  if (value == MINUS_ONE)
@@ -2214,8 +2210,8 @@ score_elf_final_link_relocate (reloc_how
 
 /* Score backend functions.  */
 
-bfd_boolean
-s7_bfd_score_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+bool
+s7_bfd_score_info_to_howto (bfd *abfd,
 			    arelent *bfd_reloc,
 			    Elf_Internal_Rela *elf_reloc)
 {
@@ -2223,15 +2219,21 @@ s7_bfd_score_info_to_howto (bfd *abfd AT
 
   r_type = ELF32_R_TYPE (elf_reloc->r_info);
   if (r_type >= ARRAY_SIZE (elf32_score_howto_table))
-    return FALSE;
+    {
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+			  abfd, r_type);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
 
   bfd_reloc->howto = &elf32_score_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 /* Relocate an score ELF section.  */
 
-bfd_boolean
+int
 s7_bfd_score_elf_relocate_section (bfd *output_bfd,
 				   struct bfd_link_info *info,
 				   bfd *input_bfd,
@@ -2248,7 +2250,7 @@ s7_bfd_score_elf_relocate_section (bfd *
   unsigned long offset;
   unsigned long hi16_addend, hi16_offset, hi16_value, uvalue;
   size_t extsymoff;
-  bfd_boolean gp_disp_p = FALSE;
+  bool gp_disp_p = false;
 
   /* Sort dynsym.  */
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -2267,7 +2269,7 @@ s7_bfd_score_elf_relocate_section (bfd *
 	}
 
       if (!score_elf_sort_hash_table (info, dynsecsymcount + 1))
-	return FALSE;
+	return false;
     }
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
@@ -2403,7 +2405,7 @@ s7_bfd_score_elf_relocate_section (bfd *
 	      if (r_type != R_SCORE_HI16 && r_type != R_SCORE_LO16)
 		return bfd_reloc_notsupported;
 
-	      gp_disp_p = TRUE;
+	      gp_disp_p = true;
 	    }
 
 	  /* If this symbol is defined, calculate its address.  Note that
@@ -2443,12 +2445,13 @@ s7_bfd_score_elf_relocate_section (bfd *
 	    }
 	  else if (!bfd_link_relocatable (info))
 	    {
-	      (*info->callbacks->undefined_symbol)
-		(info, h->root.root.root.string, input_bfd,
-		 input_section, rel->r_offset,
-		 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
+              info->callbacks->undefined_symbol
+		(info, h->root.root.root.string, input_bfd, input_section,
+		 rel->r_offset,
+		 (info->unresolved_syms_in_objects == RM_DIAGNOSE
+		  && !info->warn_unresolved_syms)
 		 || ELF_ST_VISIBILITY (h->root.other));
-	      relocation = 0;
+              relocation = 0;
 	    }
 	}
 
@@ -2535,7 +2538,7 @@ s7_bfd_score_elf_relocate_section (bfd *
 	      break;
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -2562,13 +2565,13 @@ s7_bfd_score_elf_relocate_section (bfd *
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase, and
    allocate space in the global offset table.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_check_relocs (bfd *abfd,
 			       struct bfd_link_info *info,
 			       asection *sec,
@@ -2585,7 +2588,7 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
   asection *sreloc;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -2599,7 +2602,7 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
     }
   else
     {
-      sgot = score_elf_got_section (dynobj, FALSE);
+      sgot = score_elf_got_section (dynobj, false);
       if (sgot == NULL)
 	g = NULL;
       else
@@ -2631,7 +2634,7 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 	    /* xgettext:c-format */
 	    (_("%pB: malformed reloc detected for section %pA"), abfd, sec);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       else
 	{
@@ -2654,8 +2657,8 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 	    case R_SCORE_CALL15:
 	      if (dynobj == NULL)
 		elf_hash_table (info)->dynobj = dynobj = abfd;
-	      if (!score_elf_create_got_section (dynobj, info, FALSE))
-		return FALSE;
+	      if (!score_elf_create_got_section (dynobj, info, false))
+		return false;
 	      g = score_elf_got_info (dynobj, &sgot);
 	      break;
 	    case R_SCORE_ABS32:
@@ -2673,7 +2676,7 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
       if (!h && (r_type == R_SCORE_GOT_LO16))
 	{
 	  if (! score_elf_record_local_got_symbol (abfd, r_symndx, rel->r_addend, g))
-	    return FALSE;
+	    return false;
 	}
 
       switch (r_type)
@@ -2686,13 +2689,13 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 		(_("%pB: CALL15 reloc at %#" PRIx64 " not against global symbol"),
 		 abfd, (uint64_t) rel->r_offset);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  else
 	    {
 	      /* This symbol requires a global offset table entry.  */
 	      if (! score_elf_record_global_got_symbol (h, abfd, info, g))
-		return FALSE;
+		return false;
 
 	      /* We need a stub, not a plt entry for the undefined function.  But we record
 		 it as if it needs plt.  See _bfd_elf_adjust_dynamic_symbol.  */
@@ -2702,7 +2705,7 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 	  break;
 	case R_SCORE_GOT15:
 	  if (h && ! score_elf_record_global_got_symbol (h, abfd, info, g))
-	    return FALSE;
+	    return false;
 	  break;
 	case R_SCORE_ABS32:
 	case R_SCORE_REL32:
@@ -2711,9 +2714,9 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 	    {
 	      if (sreloc == NULL)
 		{
-		  sreloc = score_elf_rel_dyn_section (dynobj, TRUE);
+		  sreloc = score_elf_rel_dyn_section (dynobj, true);
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 #define SCORE_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY)
 	      if (bfd_link_pic (info))
@@ -2740,7 +2743,7 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 		      == SCORE_READONLY_SECTION)
 		    /* We need it to tell the dynamic linker if there
 		       are relocations against the text segment.  */
-		    hscore->readonly_reloc = TRUE;
+		    hscore->readonly_reloc = true;
 		}
 
 	      /* Even though we don't directly need a GOT entry for this symbol,
@@ -2750,11 +2753,11 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 		{
 		  if (dynobj == NULL)
 		    elf_hash_table (info)->dynobj = dynobj = abfd;
-		  if (! score_elf_create_got_section (dynobj, info, TRUE))
-		    return FALSE;
+		  if (! score_elf_create_got_section (dynobj, info, true))
+		    return false;
 		  g = score_elf_got_info (dynobj, &sgot);
 		  if (! score_elf_record_global_got_symbol (h, abfd, info, g))
-		    return FALSE;
+		    return false;
 		}
 	    }
 	  break;
@@ -2763,14 +2766,14 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 	     Reconstruct it for later use during GC.  */
 	case R_SCORE_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_SCORE_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 	default:
 	  break;
@@ -2786,7 +2789,7 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 	      struct score_elf_link_hash_entry *sh;
 
 	      sh = (struct score_elf_link_hash_entry *) h;
-	      sh->no_fn_stub = TRUE;
+	      sh->no_fn_stub = true;
 	    }
 	  break;
 	case R_SCORE_CALL15:
@@ -2794,10 +2797,10 @@ s7_bfd_score_elf_check_relocs (bfd *abfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 s7_bfd_score_elf_add_symbol_hook (bfd *abfd,
 				  struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				  Elf_Internal_Sym *sym,
@@ -2814,12 +2817,12 @@ s7_bfd_score_elf_add_symbol_hook (bfd *a
       /* Fall through.  */
     case SHN_SCORE_SCOMMON:
       *secp = bfd_make_section_old_way (abfd, ".scommon");
-      (*secp)->flags |= SEC_IS_COMMON;
+      (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
       *valp = sym->st_size;
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 void
@@ -2835,19 +2838,6 @@ s7_bfd_score_elf_symbol_processing (bfd
 	break;
       /* Fall through.  */
     case SHN_SCORE_SCOMMON:
-      if (score_elf_scom_section.name == NULL)
-	{
-	  /* Initialize the small common section.  */
-	  score_elf_scom_section.name = ".scommon";
-	  score_elf_scom_section.flags = SEC_IS_COMMON;
-	  score_elf_scom_section.output_section = &score_elf_scom_section;
-	  score_elf_scom_section.symbol = &score_elf_scom_symbol;
-	  score_elf_scom_section.symbol_ptr_ptr = &score_elf_scom_symbol_ptr;
-	  score_elf_scom_symbol.name = ".scommon";
-	  score_elf_scom_symbol.flags = BSF_SECTION_SYM;
-	  score_elf_scom_symbol.section = &score_elf_scom_section;
-	  score_elf_scom_symbol_ptr = &score_elf_scom_symbol;
-	}
       asym->section = &score_elf_scom_section;
       asym->value = elfsym->internal_elf_sym.st_size;
       break;
@@ -2870,7 +2860,7 @@ s7_bfd_score_elf_link_output_symbol_hook
   return 1;
 }
 
-bfd_boolean
+bool
 s7_bfd_score_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
 					 asection *sec,
 					 int *retval)
@@ -2878,10 +2868,10 @@ s7_bfd_score_elf_section_from_bfd_sectio
   if (strcmp (bfd_section_name (sec), ".scommon") == 0)
     {
       *retval = SHN_SCORE_SCOMMON;
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -2889,7 +2879,7 @@ s7_bfd_score_elf_section_from_bfd_sectio
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can understand.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 					struct elf_link_hash_entry *h)
 {
@@ -2924,7 +2914,7 @@ s7_bfd_score_elf_adjust_dynamic_symbol (
   if (!hscore->no_fn_stub && h->needs_plt)
     {
       if (!elf_hash_table (info)->dynamic_sections_created)
-	return TRUE;
+	return true;
 
       /* If this symbol is not defined in a regular file, then set
 	 the symbol to the stub location.  This is required to make
@@ -2947,7 +2937,7 @@ s7_bfd_score_elf_adjust_dynamic_symbol (
 
 	  /* The last half word of the stub will be filled with the index
 	     of this symbol in .dynsym section.  */
-	  return TRUE;
+	  return true;
 	}
     }
   else if ((h->type == STT_FUNC) && !h->needs_plt)
@@ -2955,7 +2945,7 @@ s7_bfd_score_elf_adjust_dynamic_symbol (
       /* This will set the entry for this symbol in the GOT to 0, and
 	 the dynamic linker will take care of this.  */
       h->root.u.def.value = 0;
-      return TRUE;
+      return true;
     }
 
   /* If this is a weak symbol, and there is a real definition, the
@@ -2967,18 +2957,18 @@ s7_bfd_score_elf_adjust_dynamic_symbol (
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
      is not a function.  */
-  return TRUE;
+  return true;
 }
 
 /* This function is called after all the input files have been read,
    and the input sections have been assigned to output sections.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_always_size_sections (bfd *output_bfd,
 				       struct bfd_link_info *info)
 {
@@ -2993,11 +2983,11 @@ s7_bfd_score_elf_always_size_sections (b
   dynobj = elf_hash_table (info)->dynobj;
   if (dynobj == NULL)
     /* Relocatable links don't have it.  */
-    return TRUE;
+    return true;
 
   g = score_elf_got_info (dynobj, &s);
   if (s == NULL)
-    return TRUE;
+    return true;
 
   /* Calculate the total loadable size of the output.  That will give us the
      maximum number of GOT_PAGE entries required.  */
@@ -3022,7 +3012,7 @@ s7_bfd_score_elf_always_size_sections (b
      that need GOT entries at the end of the symbol table.  We
      do that here.  */
   if (! score_elf_sort_hash_table (info, 1))
-    return FALSE;
+    return false;
 
   if (g->global_gotsym != NULL)
     i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx;
@@ -3051,17 +3041,17 @@ s7_bfd_score_elf_always_size_sections (b
       /* Fixme. Error message or Warning message should be issued here.  */
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
-  bfd_boolean reltext;
+  bool reltext;
 
   dynobj = elf_hash_table (info)->dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -3081,7 +3071,7 @@ s7_bfd_score_elf_size_dynamic_sections (
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  reltext = FALSE;
+  reltext = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -3093,7 +3083,7 @@ s7_bfd_score_elf_size_dynamic_sections (
 	 of the dynobj section names depend upon the input files.  */
       name = bfd_section_name (s);
 
-      if (CONST_STRNEQ (name, ".rel"))
+      if (startswith (name, ".rel"))
 	{
 	  if (s->size == 0)
 	    {
@@ -3123,7 +3113,7 @@ s7_bfd_score_elf_size_dynamic_sections (
 	      if ((target != NULL
 		   && (target->flags & SEC_READONLY) != 0
 		   && (target->flags & SEC_ALLOC) != 0) || strcmp (outname, ".rel.dyn") == 0)
-		reltext = TRUE;
+		reltext = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -3131,7 +3121,7 @@ s7_bfd_score_elf_size_dynamic_sections (
 		s->reloc_count = 0;
 	    }
 	}
-      else if (CONST_STRNEQ (name, ".got"))
+      else if (startswith (name, ".got"))
 	{
 	  /* s7_bfd_score_elf_always_size_sections() has already done
 	     most of the work, but some symbols may have been mapped
@@ -3144,7 +3134,7 @@ s7_bfd_score_elf_size_dynamic_sections (
 	     of .text section. So put a dummy. XXX  */
 	  s->size += SCORE_FUNCTION_STUB_SIZE;
 	}
-      else if (! CONST_STRNEQ (name, ".init"))
+      else if (! startswith (name, ".init"))
 	{
 	  /* It's not one of our sections, so don't allocate space.  */
 	  continue;
@@ -3155,7 +3145,7 @@ s7_bfd_score_elf_size_dynamic_sections (
       if (s->contents == NULL && s->size != 0)
 	{
 	  bfd_set_error (bfd_error_no_memory);
-	  return FALSE;
+	  return false;
 	}
     }
 
@@ -3168,7 +3158,7 @@ s7_bfd_score_elf_size_dynamic_sections (
 	 dynamic linker and used by the debugger.  */
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
-	return FALSE;
+	return false;
 
       if (reltext)
 	info->flags |= DF_TEXTREL;
@@ -3176,47 +3166,47 @@ s7_bfd_score_elf_size_dynamic_sections (
       if ((info->flags & DF_TEXTREL) != 0)
 	{
 	  if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
-	    return FALSE;
+	    return false;
 	}
 
       if (! SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
-	return FALSE;
+	return false;
 
-      if (score_elf_rel_dyn_section (dynobj, FALSE))
+      if (score_elf_rel_dyn_section (dynobj, false))
 	{
 	  if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
-	    return FALSE;
+	    return false;
 
 	  if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
-	    return FALSE;
+	    return false;
 
 	  if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
-	    return FALSE;
+	    return false;
 	}
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_BASE_ADDRESS, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_LOCAL_GOTNO, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_SYMTABNO, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_UNREFEXTNO, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_GOTSYM, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_HIPAGENO, 0))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 s7_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_entry *h;
@@ -3232,15 +3222,15 @@ s7_bfd_score_elf_create_dynamic_sections
   if (s != NULL)
     {
       if (!bfd_set_section_flags (s, flags))
-	return FALSE;
+	return false;
     }
 
   /* We need to create .got section.  */
-  if (!score_elf_create_got_section (abfd, info, FALSE))
-    return FALSE;
+  if (!score_elf_create_got_section (abfd, info, false))
+    return false;
 
-  if (!score_elf_rel_dyn_section (elf_hash_table (info)->dynobj, TRUE))
-    return FALSE;
+  if (!score_elf_rel_dyn_section (elf_hash_table (info)->dynobj, true))
+    return false;
 
   /* Create .stub section.  */
   if (bfd_get_linker_section (abfd, SCORE_ELF_STUB_SECTION_NAME) == NULL)
@@ -3250,7 +3240,7 @@ s7_bfd_score_elf_create_dynamic_sections
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
 
-	return FALSE;
+	return false;
     }
 
   if (!bfd_link_pic (info))
@@ -3261,8 +3251,8 @@ s7_bfd_score_elf_create_dynamic_sections
       bh = NULL;
       if (!(_bfd_generic_link_add_one_symbol
 	    (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr,
-	     (bfd_vma) 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
-	return FALSE;
+	     (bfd_vma) 0, NULL, false, get_elf_backend_data (abfd)->collect, &bh)))
+	return false;
 
       h = (struct elf_link_hash_entry *) bh;
       h->non_elf = 0;
@@ -3270,17 +3260,17 @@ s7_bfd_score_elf_create_dynamic_sections
       h->type = STT_SECTION;
 
       if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_finish_dynamic_symbol (bfd *output_bfd,
 					struct bfd_link_info *info,
 					struct elf_link_hash_entry *h,
@@ -3306,7 +3296,7 @@ s7_bfd_score_elf_finish_dynamic_symbol (
 
       /* FIXME: Can h->dynindex be more than 64K?  */
       if (h->dynindx & 0xffff0000)
-	return FALSE;
+	return false;
 
       /* Fill the stub.  */
       bfd_put_32 (output_bfd, STUB_LW, stub);
@@ -3329,7 +3319,7 @@ s7_bfd_score_elf_finish_dynamic_symbol (
 
   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
 
-  sgot = score_elf_got_section (dynobj, FALSE);
+  sgot = score_elf_got_section (dynobj, false);
   BFD_ASSERT (sgot != NULL);
   BFD_ASSERT (score_elf_section_data (sgot) != NULL);
   g = score_elf_section_data (sgot)->u.got_info;
@@ -3365,12 +3355,12 @@ s7_bfd_score_elf_finish_dynamic_symbol (
       sym->st_value = elf_gp (output_bfd);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd,
 					  struct bfd_link_info *info)
 {
@@ -3384,7 +3374,7 @@ s7_bfd_score_elf_finish_dynamic_sections
 
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
-  sgot = score_elf_got_section (dynobj, FALSE);
+  sgot = score_elf_got_section (dynobj, false);
   if (sgot == NULL)
     g = NULL;
   else
@@ -3408,13 +3398,13 @@ s7_bfd_score_elf_finish_dynamic_sections
 	  Elf_Internal_Dyn dyn;
 	  const char *name;
 	  size_t elemsize;
-	  bfd_boolean swap_out_p;
+	  bool swap_out_p;
 
 	  /* Read in the current dynamic entry.  */
 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
 
 	  /* Assume that we're going to modify it and write it out.  */
-	  swap_out_p = TRUE;
+	  swap_out_p = true;
 
 	  switch (dyn.d_tag)
 	    {
@@ -3473,7 +3463,7 @@ s7_bfd_score_elf_finish_dynamic_sections
 	      break;
 
 	    default:
-	      swap_out_p = FALSE;
+	      swap_out_p = false;
 	      break;
 	    }
 
@@ -3497,7 +3487,7 @@ s7_bfd_score_elf_finish_dynamic_sections
 
 
   /* We need to sort the entries of the dynamic relocation section.  */
-  s = score_elf_rel_dyn_section (dynobj, FALSE);
+  s = score_elf_rel_dyn_section (dynobj, false);
 
   if (s != NULL && s->size > (bfd_vma)2 * SCORE_ELF_REL_SIZE (output_bfd))
     {
@@ -3506,13 +3496,13 @@ s7_bfd_score_elf_finish_dynamic_sections
 	     sizeof (Elf32_External_Rel), score_elf_sort_dynamic_relocs);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function set up the ELF section header for a BFD section in preparation for writing
    it out.  This is where the flags and type fields are set for unusual sections.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 				Elf_Internal_Shdr *hdr,
 				asection *sec)
@@ -3527,7 +3517,7 @@ s7_bfd_score_elf_fake_sections (bfd *abf
       || strcmp (name, ".sbss") == 0)
     hdr->sh_flags |= SHF_SCORE_GPREL;
 
-  return TRUE;
+  return true;
 }
 
 /* This function do additional processing on the ELF section header before writing
@@ -3538,7 +3528,7 @@ s7_bfd_score_elf_fake_sections (bfd *abf
    assign_file_positions_except_relocs(); backend_section_processing after it.  so, we
    modify section flag there, but not backend_fake_section.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_section_processing (bfd *abfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *hdr)
 {
   if (hdr->bfd_section != NULL)
@@ -3562,20 +3552,20 @@ s7_bfd_score_elf_section_processing (bfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 s7_bfd_score_elf_write_section (bfd *output_bfd, asection *sec, bfd_byte *contents)
 {
   bfd_byte *to, *from, *end;
   int i;
 
   if (strcmp (sec->name, ".pdr") != 0)
-    return FALSE;
+    return false;
 
   if (score_elf_section_data (sec)->u.tdata == NULL)
-    return FALSE;
+    return false;
 
   to = contents;
   end = contents + sec->size;
@@ -3592,7 +3582,7 @@ s7_bfd_score_elf_write_section (bfd *out
   bfd_set_section_contents (output_bfd, sec->output_section, contents,
 			    (file_ptr) sec->output_offset, sec->size);
 
-  return TRUE;
+  return true;
 }
 
 /* Copy data from a SCORE ELF indirect symbol to its direct symbol, hiding the old
@@ -3615,38 +3605,38 @@ s7_bfd_score_elf_copy_indirect_symbol (s
   dirscore->possibly_dynamic_relocs += indscore->possibly_dynamic_relocs;
 
   if (indscore->readonly_reloc)
-    dirscore->readonly_reloc = TRUE;
+    dirscore->readonly_reloc = true;
 
   if (indscore->no_fn_stub)
-    dirscore->no_fn_stub = TRUE;
+    dirscore->no_fn_stub = true;
 }
 
 /* Remove information about discarded functions from other sections which mention them.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_discard_info (bfd *abfd,
 			       struct elf_reloc_cookie *cookie,
 			       struct bfd_link_info *info)
 {
   asection *o;
-  bfd_boolean ret = FALSE;
+  bool ret = false;
   unsigned char *tdata;
   size_t i, skip;
 
   o = bfd_get_section_by_name (abfd, ".pdr");
   if ((!o) || (o->size == 0) || (o->size % PDR_SIZE != 0)
       || (o->output_section != NULL && bfd_is_abs_section (o->output_section)))
-    return FALSE;
+    return false;
 
   tdata = bfd_zmalloc (o->size / PDR_SIZE);
   if (!tdata)
-    return FALSE;
+    return false;
 
   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, info->keep_memory);
   if (!cookie->rels)
     {
       free (tdata);
-      return FALSE;
+      return false;
     }
 
   cookie->rel = cookie->rels;
@@ -3665,7 +3655,7 @@ s7_bfd_score_elf_discard_info (bfd *abfd
     {
       score_elf_section_data (o)->u.tdata = tdata;
       o->size -= skip * PDR_SIZE;
-      ret = TRUE;
+      ret = true;
     }
   else
     free (tdata);
@@ -3678,12 +3668,12 @@ s7_bfd_score_elf_discard_info (bfd *abfd
 
 /* Signal that discard_info() has removed the discarded relocations for this section.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_ignore_discarded_relocs (asection *sec)
 {
   if (strcmp (sec->name, ".pdr") == 0)
-    return TRUE;
-  return FALSE;
+    return true;
+  return false;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -3709,7 +3699,7 @@ s7_bfd_score_elf_gc_mark_hook (asection
 
 /* Support for core dump NOTE sections.  */
 
-bfd_boolean
+bool
 s7_bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -3718,7 +3708,7 @@ s7_bfd_score_elf_grok_prstatus (bfd *abf
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
     case 272:		       /* Linux/Score elf_prstatus */
 
       /* pr_cursig */
@@ -3741,13 +3731,13 @@ s7_bfd_score_elf_grok_prstatus (bfd *abf
 					  note->descpos + offset);
 }
 
-bfd_boolean
+bool
 s7_bfd_score_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 128:		       /* Linux/Score elf_prpsinfo.  */
       /* pr_fname */
@@ -3772,7 +3762,7 @@ s7_bfd_score_elf_grok_psinfo (bfd *abfd,
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3790,7 +3780,7 @@ s7_elf32_score_reloc_type_lookup (bfd *a
   return NULL;
 }
 
-bfd_boolean
+bool
 s7_elf32_score_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -3812,10 +3802,10 @@ s7_elf32_score_print_private_bfd_data (b
     }
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 s7_elf32_score_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -3823,21 +3813,25 @@ s7_elf32_score_merge_private_bfd_data (b
   flagword out_flags;
 
   if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
+
+  /* FIXME: What should be checked when linking shared libraries?  */
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
 
   in_flags  = elf_elfheader (ibfd)->e_flags;
   out_flags = elf_elfheader (obfd)->e_flags;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   in_flags = elf_elfheader (ibfd)->e_flags;
   out_flags = elf_elfheader (obfd)->e_flags;
 
   if (! elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
@@ -3846,7 +3840,7 @@ s7_elf32_score_merge_private_bfd_data (b
 	  return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), bfd_get_mach (ibfd));
 	}
 
-      return TRUE;
+      return true;
     }
 
   if (((in_flags & EF_SCORE_PIC) != 0) != ((out_flags & EF_SCORE_PIC) != 0))
@@ -3855,18 +3849,18 @@ s7_elf32_score_merge_private_bfd_data (b
     }
 
   /* Maybe dependency fix compatibility should be checked here.  */
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 s7_elf32_score_new_section_hook (bfd *abfd, asection *sec)
 {
   struct _score_elf_section_data *sdata;
-  bfd_size_type amt = sizeof (*sdata);
+  size_t amt = sizeof (*sdata);
 
   sdata = bfd_zalloc (abfd, amt);
   if (sdata == NULL)
-    return FALSE;
+    return false;
   sec->used_by_bfd = sdata;
 
   return _bfd_elf_new_section_hook (abfd, sec);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-score.c ./bfd/elf32-score.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-score.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-score.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for S+core.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
    Contributed by
    Brain.lin (brain.lin@sunplusct.com)
    Mei Ligang (ligang@sunnorth.com.cn)
@@ -47,22 +47,22 @@ struct score_elf_link_hash_entry
   unsigned int possibly_dynamic_relocs;
 
   /* If the R_SCORE_ABS32, R_SCORE_REL32 reloc is against a readonly section.  */
-  bfd_boolean readonly_reloc;
+  bool readonly_reloc;
 
   /* We must not create a stub for a symbol that has relocations related to
      taking the function's address, i.e. any but R_SCORE_CALL15 ones.  */
-  bfd_boolean no_fn_stub;
+  bool no_fn_stub;
 
   /* Are we forced local?  This will only be set if we have converted
      the initial global GOT entry to a local GOT entry.  */
-  bfd_boolean forced_local;
+  bool forced_local;
 };
 
 /* Traverse a score ELF linker hash table.  */
 #define score_elf_link_hash_traverse(table, func, info) \
-  (elf_link_hash_traverse \
-   ((table),							     \
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \
+  (elf_link_hash_traverse					\
+   ((table),							\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),	\
     (info)))
 
 /* This structure is used to hold .got entries while estimating got sizes.  */
@@ -201,8 +201,11 @@ static bfd *reldyn_sorting_bfd;
    faster assembler code.  This is what we use for the small common
    section.  This approach is copied from ecoff.c.  */
 static asection score_elf_scom_section;
-static asymbol  score_elf_scom_symbol;
-static asymbol  *score_elf_scom_symbol_ptr;
+static const asymbol score_elf_scom_symbol =
+  GLOBAL_SYM_INIT (".scommon", &score_elf_scom_section);
+static asection score_elf_scom_section =
+  BFD_FAKE_SECTION (score_elf_scom_section, &score_elf_scom_symbol,
+		    ".scommon", 0, SEC_IS_COMMON | SEC_SMALL_DATA);
 
 static bfd_vma
 score_bfd_get_16 (bfd *abfd, const void *data)
@@ -227,14 +230,14 @@ static bfd_vma
 score3_bfd_getl48 (const void *p)
 {
   const bfd_byte *addr = p;
-  bfd_uint64_t v;
+  uint64_t v;
 
-  v = (bfd_uint64_t) addr[4];
-  v |= (bfd_uint64_t) addr[5] << 8;
-  v |= (bfd_uint64_t) addr[2] << 16;
-  v |= (bfd_uint64_t) addr[3] << 24;
-  v |= (bfd_uint64_t) addr[0] << 32;
-  v |= (bfd_uint64_t) addr[1] << 40;
+  v = (uint64_t) addr[4];
+  v |= (uint64_t) addr[5] << 8;
+  v |= (uint64_t) addr[2] << 16;
+  v |= (uint64_t) addr[3] << 24;
+  v |= (uint64_t) addr[0] << 32;
+  v |= (uint64_t) addr[1] << 40;
   return v;
 }
 
@@ -348,7 +351,7 @@ score_elf_lo16_reloc (bfd *abfd,
 /* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
    dangerous relocation.  */
 
-static bfd_boolean
+static bool
 score_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp)
 {
   unsigned int count;
@@ -358,7 +361,7 @@ score_elf_assign_gp (bfd *output_bfd, bf
   /* If we've already figured out what GP will be, just return it.  */
   *pgp = _bfd_get_gp_value (output_bfd);
   if (*pgp)
-    return TRUE;
+    return true;
 
   count = bfd_get_symcount (output_bfd);
   sym = bfd_get_outsymbols (output_bfd);
@@ -388,10 +391,10 @@ score_elf_assign_gp (bfd *output_bfd, bf
       /* Only get the error once.  */
       *pgp = 4;
       _bfd_set_gp_value (output_bfd, *pgp);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We have to figure out the gp value, so that we can adjust the
@@ -402,7 +405,7 @@ score_elf_assign_gp (bfd *output_bfd, bf
 static bfd_reloc_status_type
 score_elf_final_gp (bfd *output_bfd,
 		    asymbol *symbol,
-		    bfd_boolean relocatable,
+		    bool relocatable,
 		     char **error_message,
 		    bfd_vma *pgp)
 {
@@ -437,23 +440,14 @@ score_elf_final_gp (bfd *output_bfd,
 
 static bfd_reloc_status_type
 score_elf_gprel15_with_gp (bfd *abfd,
-			   asymbol *symbol,
 			   arelent *reloc_entry,
 			   asection *input_section,
-			   bfd_boolean relocateable,
+			   bool relocateable,
 			   void * data,
 			   bfd_vma gp ATTRIBUTE_UNUSED)
 {
-  bfd_vma relocation;
   unsigned long insn;
 
-  if (bfd_is_com_section (symbol->section))
-    relocation = 0;
-  else
-    relocation = symbol->value;
-
-  relocation += symbol->section->output_section->vma;
-  relocation += symbol->section->output_offset;
   if (reloc_entry->address > input_section->size)
     return bfd_reloc_outofrange;
 
@@ -472,7 +466,7 @@ score_elf_gprel15_with_gp (bfd *abfd,
 
 static bfd_reloc_status_type
 gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry,
-		 asection *input_section, bfd_boolean relocatable,
+		 asection *input_section, bool relocatable,
 		 void *data, bfd_vma gp)
 {
   bfd_vma relocation;
@@ -522,7 +516,7 @@ score_elf_gprel15_reloc (bfd *abfd,
 			 bfd *output_bfd,
 			 char **error_message)
 {
-  bfd_boolean relocateable;
+  bool relocateable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
@@ -533,10 +527,10 @@ score_elf_gprel15_reloc (bfd *abfd,
       return bfd_reloc_ok;
     }
   if (output_bfd != NULL)
-    relocateable = TRUE;
+    relocateable = true;
   else
     {
-      relocateable = FALSE;
+      relocateable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -544,8 +538,8 @@ score_elf_gprel15_reloc (bfd *abfd,
   if (ret != bfd_reloc_ok)
     return ret;
 
-  return score_elf_gprel15_with_gp (abfd, symbol, reloc_entry,
-					 input_section, relocateable, data, gp);
+  return score_elf_gprel15_with_gp (abfd, reloc_entry,
+				    input_section, relocateable, data, gp);
 }
 
 /* Do a R_SCORE_GPREL32 relocation.  This is a 32 bit value which must
@@ -556,7 +550,7 @@ score_elf_gprel32_reloc (bfd *abfd, arel
 			void *data, asection *input_section, bfd *output_bfd,
 			char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
@@ -571,10 +565,10 @@ score_elf_gprel32_reloc (bfd *abfd, arel
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -645,332 +639,332 @@ static reloc_howto_type elf32_score_howt
   /* No relocation.  */
   HOWTO (R_SCORE_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_HI16 */
   HOWTO (R_SCORE_HI16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_hi16_reloc,	/* special_function */
 	 "R_SCORE_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x37fff,		/* src_mask */
 	 0x37fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_LO16 */
   HOWTO (R_SCORE_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_lo16_reloc,	/* special_function */
 	 "R_SCORE_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x37fff,		/* src_mask */
 	 0x37fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /*  R_SCORE_BCMP */
   HOWTO (R_SCORE_BCMP,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_BCMP",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x03e00381,		/* src_mask */
 	 0x03e00381,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /*R_SCORE_24 */
   HOWTO (R_SCORE_24,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_24",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x3ff7fff,		/* src_mask */
 	 0x3ff7fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /*R_SCORE_PC19 */
   HOWTO (R_SCORE_PC19,		/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_PC19",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x3ff03fe,		/* src_mask */
 	 0x3ff03fe,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /*R_SCORE16_11 */
   HOWTO (R_SCORE16_11,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 11,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE16_11",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000000ffe,		/* src_mask */
 	 0x000000ffe,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE16_PC8 */
   HOWTO (R_SCORE16_PC8,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 9,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE16_PC8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x000001ff,		/* src_mask */
 	 0x000001ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit absolute */
   HOWTO (R_SCORE_ABS32,		/* type	 8 */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_ABS32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit absolute */
   HOWTO (R_SCORE_ABS16,		/* type 11 */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_ABS16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_DUMMY2 */
   HOWTO (R_SCORE_DUMMY2,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_DUMMY2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x00007fff,		/* src_mask */
 	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_GP15 */
   HOWTO (R_SCORE_GP15,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_gprel15_reloc,/* special_function */
 	 "R_SCORE_GP15",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x00007fff,		/* src_mask */
 	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_SCORE_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_SCORE_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_SCORE_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_SCORE_GNU_VTENTRY", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_SCORE_GOT15,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 score_elf_got15_reloc, /* special_function */
 	 "R_SCORE_GOT15",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x00007fff,		/* src_mask */
 	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_SCORE_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_got_lo16_reloc, /* special_function */
 	 "R_SCORE_GOT_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x37ffe,		/* src_mask */
 	 0x37ffe,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 15 bit call through global offset table.  */
   HOWTO (R_SCORE_CALL15,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_CALL15",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit GP relative reference.  */
   HOWTO (R_SCORE_GPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_gprel32_reloc, /* special_function */
 	 "R_SCORE_GPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit symbol relative relocation.  */
   HOWTO (R_SCORE_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_REL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_DUMMY_HI16 */
   HOWTO (R_SCORE_DUMMY_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 score_elf_hi16_reloc,	/* special_function */
 	 "R_SCORE_DUMMY_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x37fff,		/* src_mask */
 	 0x37fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_IMM30 */
   HOWTO (R_SCORE_IMM30,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 30,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_IMM30",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x7f7fff7f80LL,	/* src_mask */
 	 0x7f7fff7f80LL,	/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_SCORE_IMM32 */
   HOWTO (R_SCORE_IMM32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 5,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_SCORE_IMM32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x7f7fff7fe0LL,	/* src_mask */
 	 0x7f7fff7fe0LL,	/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 struct score_reloc_map
@@ -1032,14 +1026,14 @@ score_elf_got_entry_eq (const void *entr
 /* If H needs a GOT entry, assign it the highest available dynamic
    index.  Otherwise, assign it the lowest available dynamic
    index.  */
-static bfd_boolean
+static bool
 score_elf_sort_hash_table_f (struct score_elf_link_hash_entry *h, void *data)
 {
   struct score_elf_hash_sort_data *hsd = data;
 
   /* Symbols without dynamic symbol table entries aren't interesting at all.  */
   if (h->root.dynindx == -1)
-    return TRUE;
+    return true;
 
   /* Global symbols that need GOT entries that are not explicitly
      referenced are marked with got offset 2.  Those that are
@@ -1059,11 +1053,11 @@ score_elf_sort_hash_table_f (struct scor
       hsd->low = (struct elf_link_hash_entry *) h;
     }
 
-  return TRUE;
+  return true;
 }
 
 static asection *
-score_elf_got_section (bfd *abfd, bfd_boolean maybe_excluded)
+score_elf_got_section (bfd *abfd, bool maybe_excluded)
 {
   asection *sgot = bfd_get_linker_section (abfd, ".got");
 
@@ -1080,7 +1074,7 @@ score_elf_got_info (bfd *abfd, asection
   asection *sgot;
   struct score_got_info *g;
 
-  sgot = score_elf_got_section (abfd, TRUE);
+  sgot = score_elf_got_section (abfd, true);
   BFD_ASSERT (sgot != NULL);
   BFD_ASSERT (elf_section_data (sgot) != NULL);
   g = score_elf_section_data (sgot)->u.got_info;
@@ -1097,7 +1091,7 @@ score_elf_got_info (bfd *abfd, asection
    known to be in the dynamic symbol table.  During
    s3_bfd_score_elf_size_dynamic_sections, this value is 1.  Afterward, the
    section symbols are added and the count is higher.  */
-static bfd_boolean
+static bool
 score_elf_sort_hash_table (struct bfd_link_info *info,
 			   unsigned long max_local)
 {
@@ -1135,7 +1129,7 @@ score_elf_sort_hash_table (struct bfd_li
      table index in the GOT.  */
   g->global_gotsym = hsd.low;
 
-  return TRUE;
+  return true;
 }
 
 /* Create an entry in an score ELF linker hash table.  */
@@ -1160,9 +1154,9 @@ score_elf_link_hash_newfunc (struct bfd_
   if (ret != NULL)
     {
       ret->possibly_dynamic_relocs = 0;
-      ret->readonly_reloc = FALSE;
-      ret->no_fn_stub = FALSE;
-      ret->forced_local = FALSE;
+      ret->readonly_reloc = false;
+      ret->no_fn_stub = false;
+      ret->forced_local = false;
     }
 
   return (struct bfd_hash_entry *) ret;
@@ -1203,11 +1197,11 @@ score_elf_sort_dynamic_relocs (const voi
 }
 
 /* Return whether a relocation is against a local symbol.  */
-static bfd_boolean
+static bool
 score_elf_local_relocation_p (bfd *input_bfd,
 			      const Elf_Internal_Rela *relocation,
 			      asection **local_sections,
-			      bfd_boolean check_forced)
+			      bool check_forced)
 {
   unsigned long r_symndx;
   Elf_Internal_Shdr *symtab_hdr;
@@ -1219,9 +1213,9 @@ score_elf_local_relocation_p (bfd *input
   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
 
   if (r_symndx < extsymoff)
-    return TRUE;
+    return true;
   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
-    return TRUE;
+    return true;
 
   if (check_forced)
     {
@@ -1233,15 +1227,15 @@ score_elf_local_relocation_p (bfd *input
 	     || h->root.root.type == bfd_link_hash_warning)
 	h = (struct score_elf_link_hash_entry *) h->root.root.u.i.link;
       if (h->root.forced_local)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Returns the dynamic relocation section for DYNOBJ.  */
 static asection *
-score_elf_rel_dyn_section (bfd *dynobj, bfd_boolean create_p)
+score_elf_rel_dyn_section (bfd *dynobj, bool create_p)
 {
   static const char dname[] = ".rel.dyn";
   asection *sreloc;
@@ -1269,7 +1263,7 @@ score_elf_allocate_dynamic_relocations (
 {
   asection *s;
 
-  s = score_elf_rel_dyn_section (abfd, FALSE);
+  s = score_elf_rel_dyn_section (abfd, false);
   BFD_ASSERT (s != NULL);
 
   if (s->size == 0)
@@ -1285,7 +1279,7 @@ score_elf_allocate_dynamic_relocations (
    is the original relocation, which is now being transformed into a
    dynamic relocation.  The ADDENDP is adjusted if necessary; the
    caller should store the result in place of the original addend.  */
-static bfd_boolean
+static bool
 score_elf_create_dynamic_relocation (bfd *output_bfd,
 				     struct bfd_link_info *info,
 				     const Elf_Internal_Rela *rel,
@@ -1298,11 +1292,11 @@ score_elf_create_dynamic_relocation (bfd
   bfd *dynobj;
   int r_type;
   long indx;
-  bfd_boolean defined_p;
+  bool defined_p;
 
   r_type = ELF32_R_TYPE (rel->r_info);
   dynobj = elf_hash_table (info)->dynobj;
-  sreloc = score_elf_rel_dyn_section (dynobj, FALSE);
+  sreloc = score_elf_rel_dyn_section (dynobj, false);
   BFD_ASSERT (sreloc != NULL);
   BFD_ASSERT (sreloc->contents != NULL);
   BFD_ASSERT (sreloc->reloc_count * SCORE_ELF_REL_SIZE (output_bfd) < sreloc->size);
@@ -1316,7 +1310,7 @@ score_elf_create_dynamic_relocation (bfd
 
   if (outrel[0].r_offset == MINUS_ONE)
     /* The relocation field has been deleted.  */
-    return TRUE;
+    return true;
 
   if (outrel[0].r_offset == MINUS_TWO)
     {
@@ -1324,7 +1318,7 @@ score_elf_create_dynamic_relocation (bfd
 	 some sort.  Functions like _bfd_elf_write_section_eh_frame expect
 	 the field to be fully relocated, so add in the symbol's value.  */
       *addendp += symbol;
-      return TRUE;
+      return true;
     }
 
   /* We must now calculate the dynamic symbol table index to use
@@ -1340,12 +1334,12 @@ score_elf_create_dynamic_relocation (bfd
 	   relocation field.  It therefore treats relocs against
 	   defined symbols in the same way as relocs against
 	   undefined symbols.  */
-      defined_p = FALSE;
+      defined_p = false;
     }
   else
     {
       indx = 0;
-      defined_p = TRUE;
+      defined_p = true;
     }
 
   /* If the relocation was previously an absolute relocation and
@@ -1397,28 +1391,28 @@ score_elf_create_dynamic_relocation (bfd
      will be writing to it.  */
   elf_section_data (input_section->output_section)->this_hdr.sh_flags |= SHF_WRITE;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 score_elf_create_got_section (bfd *abfd,
 			      struct bfd_link_info *info,
-			      bfd_boolean maybe_exclude)
+			      bool maybe_exclude)
 {
   flagword flags;
   asection *s;
   struct elf_link_hash_entry *h;
   struct bfd_link_hash_entry *bh;
   struct score_got_info *g;
-  bfd_size_type amt;
+  size_t amt;
 
   /* This function may be called more than once.  */
-  s = score_elf_got_section (abfd, TRUE);
+  s = score_elf_got_section (abfd, true);
   if (s)
     {
       if (! maybe_exclude)
 	s->flags &= ~SEC_EXCLUDE;
-      return TRUE;
+      return true;
     }
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
@@ -1432,7 +1426,7 @@ score_elf_create_got_section (bfd *abfd,
   elf_hash_table (info)->sgot = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, 4))
-    return FALSE;
+    return false;
 
   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
      linker script because we don't want to define the symbol if we
@@ -1440,8 +1434,8 @@ score_elf_create_got_section (bfd *abfd,
   bh = NULL;
   if (! (_bfd_generic_link_add_one_symbol
 	 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
-	  0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
-    return FALSE;
+	  0, NULL, false, get_elf_backend_data (abfd)->collect, &bh)))
+    return false;
 
   h = (struct elf_link_hash_entry *) bh;
   h->non_elf = 0;
@@ -1450,12 +1444,12 @@ score_elf_create_got_section (bfd *abfd,
   elf_hash_table (info)->hgot = h;
 
   if (bfd_link_pic (info) && ! bfd_elf_link_record_dynamic_symbol (info, h))
-    return FALSE;
+    return false;
 
   amt = sizeof (struct score_got_info);
   g = bfd_alloc (abfd, amt);
   if (g == NULL)
-    return FALSE;
+    return false;
 
   g->global_gotsym = NULL;
   g->global_gotno = 0;
@@ -1467,11 +1461,11 @@ score_elf_create_got_section (bfd *abfd,
   g->got_entries = htab_try_create (1, score_elf_got_entry_hash,
 				    score_elf_got_entry_eq, NULL);
   if (g->got_entries == NULL)
-    return FALSE;
+    return false;
   score_elf_section_data (s)->u.got_info = g;
   score_elf_section_data (s)->elf.this_hdr.sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_SCORE_GPREL;
 
-  return TRUE;
+  return true;
 }
 
 /* Calculate the %high function.  */
@@ -1532,7 +1526,7 @@ score_elf_create_local_got_entry (bfd *a
    for value.  Return the index into the GOT for this entry.  */
 static bfd_vma
 score_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
-		       bfd_vma value, bfd_boolean external)
+		       bfd_vma value, bool external)
 {
   asection *sgot;
   struct score_got_info *g;
@@ -1560,7 +1554,7 @@ score_elf_got16_entry (bfd *abfd, bfd *i
 static void
 s3_bfd_score_elf_hide_symbol (struct bfd_link_info *info,
 			      struct elf_link_hash_entry *entry,
-			      bfd_boolean force_local)
+			      bool force_local)
 {
   bfd *dynobj;
   asection *got;
@@ -1570,12 +1564,12 @@ s3_bfd_score_elf_hide_symbol (struct bfd
   h = (struct score_elf_link_hash_entry *) entry;
   if (h->forced_local)
     return;
-  h->forced_local = TRUE;
+  h->forced_local = true;
 
   dynobj = elf_hash_table (info)->dynobj;
   if (dynobj != NULL && force_local)
     {
-      got = score_elf_got_section (dynobj, FALSE);
+      got = score_elf_got_section (dynobj, false);
       if (got == NULL)
 	return;
       g = score_elf_section_data (got)->u.got_info;
@@ -1634,7 +1628,7 @@ s3_bfd_score_elf_hide_symbol (struct bfd
 /* If H is a symbol that needs a global GOT entry, but has a dynamic
    symbol table index lower than any we've seen to date, record it for
    posterity.  */
-static bfd_boolean
+static bool
 score_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
 				    bfd *abfd,
 				    struct bfd_link_info *info,
@@ -1649,11 +1643,11 @@ score_elf_record_global_got_symbol (stru
 	{
 	case STV_INTERNAL:
 	case STV_HIDDEN:
-	  s3_bfd_score_elf_hide_symbol (info, h, TRUE);
+	  s3_bfd_score_elf_hide_symbol (info, h, true);
 	  break;
 	}
       if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   entry.abfd = abfd;
@@ -1665,30 +1659,30 @@ score_elf_record_global_got_symbol (stru
   /* If we've already marked this entry as needing GOT space, we don't
      need to do it again.  */
   if (*loc)
-    return TRUE;
+    return true;
 
   *loc = bfd_alloc (abfd, sizeof entry);
   if (! *loc)
-    return FALSE;
+    return false;
 
   entry.gotidx = -1;
 
   memcpy (*loc, &entry, sizeof (entry));
 
   if (h->got.offset != MINUS_ONE)
-    return TRUE;
+    return true;
 
   /* By setting this to a value other than -1, we are indicating that
      there needs to be a GOT entry for H.  Avoid using zero, as the
      generic ELF copy_indirect_symbol tests for <= 0.  */
   h->got.offset = 1;
 
-  return TRUE;
+  return true;
 }
 
 /* Reserve space in G for a GOT entry containing the value of symbol
    SYMNDX in input bfd ABDF, plus ADDEND.  */
-static bfd_boolean
+static bool
 score_elf_record_local_got_symbol (bfd *abfd,
 				   long symndx,
 				   bfd_vma addend,
@@ -1702,17 +1696,17 @@ score_elf_record_local_got_symbol (bfd *
   loc = (struct score_got_entry **)htab_find_slot (g->got_entries, &entry, INSERT);
 
   if (*loc)
-    return TRUE;
+    return true;
 
   entry.gotidx = g->local_gotno++;
 
   *loc = bfd_alloc (abfd, sizeof(entry));
   if (! *loc)
-    return FALSE;
+    return false;
 
   memcpy (*loc, &entry, sizeof (entry));
 
-  return TRUE;
+  return true;
 }
 
 /* Returns the GOT offset at which the indicated address can be found.
@@ -1974,7 +1968,7 @@ score_elf_final_link_relocate (reloc_how
 			       int sym_flags ATTRIBUTE_UNUSED,
 			       struct score_elf_link_hash_entry *h,
 			       asection **local_sections,
-			       bfd_boolean gp_disp_p)
+			       bool gp_disp_p)
 {
   unsigned long r_type;
   unsigned long r_symndx;
@@ -1989,7 +1983,7 @@ score_elf_final_link_relocate (reloc_how
      symbol, adjusted by the addend, resides during execution.  */
   bfd_vma g = MINUS_ONE;
   /* TRUE if the symbol referred to by this relocation is a local symbol.  */
-  bfd_boolean local_p;
+  bool local_p;
   /* The eventual value we will relocate.  */
   bfd_vma value = symbol;
   unsigned long hi16_addend, hi16_offset, hi16_value, uvalue, offset, abs_value = 0;
@@ -2028,7 +2022,7 @@ score_elf_final_link_relocate (reloc_how
   r_symndx = ELF32_R_SYM (rel->r_info);
   r_type = ELF32_R_TYPE (rel->r_info);
   rel_addr = (input_section->output_section->vma + input_section->output_offset + rel->r_offset);
-  local_p = score_elf_local_relocation_p (input_bfd, rel, local_sections, TRUE);
+  local_p = score_elf_local_relocation_p (input_bfd, rel, local_sections, true);
 
   if (r_type == R_SCORE_GOT15)
     {
@@ -2075,7 +2069,7 @@ score_elf_final_link_relocate (reloc_how
 		 symbol is defined locally, or was forced to be local.
 		 We must initialize this entry in the GOT.  */
 	      bfd *tmpbfd = elf_hash_table (info)->dynobj;
-	      asection *sgot = score_elf_got_section (tmpbfd, FALSE);
+	      asection *sgot = score_elf_got_section (tmpbfd, false);
 	      score_bfd_put_32 (tmpbfd, value, sgot->contents + g);
 	    }
 	}
@@ -2319,12 +2313,12 @@ score_elf_final_link_relocate (reloc_how
     case R_SCORE_CALL15:
       if (local_p)
 	{
-	  bfd_boolean forced;
+	  bool forced;
 
 	  /* The special case is when the symbol is forced to be local.  We need the
 	     full address in the GOT since no R_SCORE_GOT_LO16 relocation follows.  */
 	  forced = ! score_elf_local_relocation_p (input_bfd, rel,
-						   local_sections, FALSE);
+						   local_sections, false);
 	  value = score_elf_got16_entry (output_bfd, input_bfd, info,
 					 symbol + addend, forced);
 	  if (value == MINUS_ONE)
@@ -2375,8 +2369,8 @@ score_elf_final_link_relocate (reloc_how
 }
 
 /* Score backend functions.  */
-static bfd_boolean
-s3_bfd_score_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+static bool
+s3_bfd_score_info_to_howto (bfd *abfd,
 			    arelent *bfd_reloc,
 			    Elf_Internal_Rela *elf_reloc)
 {
@@ -2384,14 +2378,20 @@ s3_bfd_score_info_to_howto (bfd *abfd AT
 
   r_type = ELF32_R_TYPE (elf_reloc->r_info);
   if (r_type >= ARRAY_SIZE (elf32_score_howto_table))
-    return FALSE;
+    {
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+			  abfd, r_type);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
 
   bfd_reloc->howto = &elf32_score_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 /* Relocate an score ELF section.  */
-static bfd_boolean
+static int
 s3_bfd_score_elf_relocate_section (bfd *output_bfd,
 				   struct bfd_link_info *info,
 				   bfd *input_bfd,
@@ -2408,7 +2408,7 @@ s3_bfd_score_elf_relocate_section (bfd *
   unsigned long offset;
   unsigned long hi16_addend, hi16_offset, hi16_value, uvalue;
   size_t extsymoff;
-  bfd_boolean gp_disp_p = FALSE;
+  bool gp_disp_p = false;
 
   /* Sort dynsym.  */
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -2427,7 +2427,7 @@ s3_bfd_score_elf_relocate_section (bfd *
 	}
 
       if (!score_elf_sort_hash_table (info, dynsecsymcount + 1))
-	return FALSE;
+	return false;
     }
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
@@ -2629,7 +2629,7 @@ s3_bfd_score_elf_relocate_section (bfd *
 	      if (r_type != R_SCORE_HI16 && r_type != R_SCORE_LO16)
 		return bfd_reloc_notsupported;
 
-	      gp_disp_p = TRUE;
+	      gp_disp_p = true;
 	    }
 
 	  /* If this symbol is defined, calculate its address.  Note that
@@ -2669,13 +2669,14 @@ s3_bfd_score_elf_relocate_section (bfd *
 	    }
 	  else if (!bfd_link_relocatable (info))
 	    {
-	      (*info->callbacks->undefined_symbol)
-		(info, h->root.root.root.string, input_bfd,
-		 input_section, rel->r_offset,
-		 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
+              info->callbacks->undefined_symbol
+		(info, h->root.root.root.string, input_bfd, input_section,
+		 rel->r_offset,
+		 (info->unresolved_syms_in_objects == RM_DIAGNOSE
+		  && !info->warn_unresolved_syms)
 		 || ELF_ST_VISIBILITY (h->root.other));
-	      relocation = 0;
-	    }
+              relocation = 0;
+            }
 	}
 
       if (sec != NULL && discarded_section (sec))
@@ -2726,7 +2727,7 @@ s3_bfd_score_elf_relocate_section (bfd *
 	      break;
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -2758,12 +2759,12 @@ s3_bfd_score_elf_relocate_section (bfd *
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase, and
    allocate space in the global offset table.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_check_relocs (bfd *abfd,
 			       struct bfd_link_info *info,
 			       asection *sec,
@@ -2780,7 +2781,7 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
   asection *sreloc;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -2794,7 +2795,7 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
     }
   else
     {
-      sgot = score_elf_got_section (dynobj, FALSE);
+      sgot = score_elf_got_section (dynobj, false);
       if (sgot == NULL)
 	g = NULL;
       else
@@ -2826,7 +2827,7 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 	    /* xgettext:c-format */
 	    (_("%pB: malformed reloc detected for section %pA"), abfd, sec);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       else
 	{
@@ -2849,8 +2850,8 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 	    case R_SCORE_CALL15:
 	      if (dynobj == NULL)
 		elf_hash_table (info)->dynobj = dynobj = abfd;
-	      if (!score_elf_create_got_section (dynobj, info, FALSE))
-		return FALSE;
+	      if (!score_elf_create_got_section (dynobj, info, false))
+		return false;
 	      g = score_elf_got_info (dynobj, &sgot);
 	      break;
 	    case R_SCORE_ABS32:
@@ -2868,7 +2869,7 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
       if (!h && (r_type == R_SCORE_GOT_LO16))
 	{
 	  if (! score_elf_record_local_got_symbol (abfd, r_symndx, rel->r_addend, g))
-	    return FALSE;
+	    return false;
 	}
 
       switch (r_type)
@@ -2881,13 +2882,13 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 		(_("%pB: CALL15 reloc at %#" PRIx64 " not against global symbol"),
 		 abfd, (uint64_t) rel->r_offset);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  else
 	    {
 	      /* This symbol requires a global offset table entry.  */
 	      if (! score_elf_record_global_got_symbol (h, abfd, info, g))
-		return FALSE;
+		return false;
 
 	      /* We need a stub, not a plt entry for the undefined function.  But we record
 		 it as if it needs plt.  See _bfd_elf_adjust_dynamic_symbol.  */
@@ -2897,7 +2898,7 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 	  break;
 	case R_SCORE_GOT15:
 	  if (h && ! score_elf_record_global_got_symbol (h, abfd, info, g))
-	    return FALSE;
+	    return false;
 	  break;
 	case R_SCORE_ABS32:
 	case R_SCORE_REL32:
@@ -2906,9 +2907,9 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 	    {
 	      if (sreloc == NULL)
 		{
-		  sreloc = score_elf_rel_dyn_section (dynobj, TRUE);
+		  sreloc = score_elf_rel_dyn_section (dynobj, true);
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 #define SCORE_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY)
 	      if (bfd_link_pic (info))
@@ -2935,7 +2936,7 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 		      == SCORE_READONLY_SECTION)
 		    /* We need it to tell the dynamic linker if there
 		       are relocations against the text segment.  */
-		    hscore->readonly_reloc = TRUE;
+		    hscore->readonly_reloc = true;
 		}
 
 	      /* Even though we don't directly need a GOT entry for this symbol,
@@ -2945,11 +2946,11 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 		{
 		  if (dynobj == NULL)
 		    elf_hash_table (info)->dynobj = dynobj = abfd;
-		  if (! score_elf_create_got_section (dynobj, info, TRUE))
-		    return FALSE;
+		  if (! score_elf_create_got_section (dynobj, info, true))
+		    return false;
 		  g = score_elf_got_info (dynobj, &sgot);
 		  if (! score_elf_record_global_got_symbol (h, abfd, info, g))
-		    return FALSE;
+		    return false;
 		}
 	    }
 	  break;
@@ -2958,14 +2959,14 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 	     Reconstruct it for later use during GC.  */
 	case R_SCORE_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_SCORE_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 	default:
 	  break;
@@ -2981,7 +2982,7 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 	      struct score_elf_link_hash_entry *sh;
 
 	      sh = (struct score_elf_link_hash_entry *) h;
-	      sh->no_fn_stub = TRUE;
+	      sh->no_fn_stub = true;
 	    }
 	  break;
 	case R_SCORE_CALL15:
@@ -2989,10 +2990,10 @@ s3_bfd_score_elf_check_relocs (bfd *abfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 s3_bfd_score_elf_add_symbol_hook (bfd *abfd,
 				  struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				  Elf_Internal_Sym *sym,
@@ -3009,12 +3010,12 @@ s3_bfd_score_elf_add_symbol_hook (bfd *a
       /* Fall through.  */
     case SHN_SCORE_SCOMMON:
       *secp = bfd_make_section_old_way (abfd, ".scommon");
-      (*secp)->flags |= SEC_IS_COMMON;
+      (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
       *valp = sym->st_size;
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -3030,19 +3031,6 @@ s3_bfd_score_elf_symbol_processing (bfd
 	break;
       /* Fall through.  */
     case SHN_SCORE_SCOMMON:
-      if (score_elf_scom_section.name == NULL)
-	{
-	  /* Initialize the small common section.  */
-	  score_elf_scom_section.name = ".scommon";
-	  score_elf_scom_section.flags = SEC_IS_COMMON;
-	  score_elf_scom_section.output_section = &score_elf_scom_section;
-	  score_elf_scom_section.symbol = &score_elf_scom_symbol;
-	  score_elf_scom_section.symbol_ptr_ptr = &score_elf_scom_symbol_ptr;
-	  score_elf_scom_symbol.name = ".scommon";
-	  score_elf_scom_symbol.flags = BSF_SECTION_SYM;
-	  score_elf_scom_symbol.section = &score_elf_scom_section;
-	  score_elf_scom_symbol_ptr = &score_elf_scom_symbol;
-	}
       asym->section = &score_elf_scom_section;
       asym->value = elfsym->internal_elf_sym.st_size;
       break;
@@ -3065,7 +3053,7 @@ s3_bfd_score_elf_link_output_symbol_hook
   return 1;
 }
 
-static bfd_boolean
+static bool
 s3_bfd_score_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
 					   asection *sec,
 					   int *retval)
@@ -3073,17 +3061,17 @@ s3_bfd_score_elf_section_from_bfd_sectio
   if (strcmp (bfd_section_name (sec), ".scommon") == 0)
     {
       *retval = SHN_SCORE_SCOMMON;
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can understand.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 					struct elf_link_hash_entry *h)
 {
@@ -3118,7 +3106,7 @@ s3_bfd_score_elf_adjust_dynamic_symbol (
   if (!hscore->no_fn_stub && h->needs_plt)
     {
       if (!elf_hash_table (info)->dynamic_sections_created)
-	return TRUE;
+	return true;
 
       /* If this symbol is not defined in a regular file, then set
 	 the symbol to the stub location.  This is required to make
@@ -3141,7 +3129,7 @@ s3_bfd_score_elf_adjust_dynamic_symbol (
 
 	  /* The last half word of the stub will be filled with the index
 	     of this symbol in .dynsym section.  */
-	  return TRUE;
+	  return true;
 	}
     }
   else if ((h->type == STT_FUNC) && !h->needs_plt)
@@ -3149,7 +3137,7 @@ s3_bfd_score_elf_adjust_dynamic_symbol (
       /* This will set the entry for this symbol in the GOT to 0, and
 	 the dynamic linker will take care of this.  */
       h->root.u.def.value = 0;
-      return TRUE;
+      return true;
     }
 
   /* If this is a weak symbol, and there is a real definition, the
@@ -3161,17 +3149,17 @@ s3_bfd_score_elf_adjust_dynamic_symbol (
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
      is not a function.  */
-  return TRUE;
+  return true;
 }
 
 /* This function is called after all the input files have been read,
    and the input sections have been assigned to output sections.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_always_size_sections (bfd *output_bfd,
 				       struct bfd_link_info *info)
 {
@@ -3186,11 +3174,11 @@ s3_bfd_score_elf_always_size_sections (b
   dynobj = elf_hash_table (info)->dynobj;
   if (dynobj == NULL)
     /* Relocatable links don't have it.  */
-    return TRUE;
+    return true;
 
   g = score_elf_got_info (dynobj, &s);
   if (s == NULL)
-    return TRUE;
+    return true;
 
   /* Calculate the total loadable size of the output.  That will give us the
      maximum number of GOT_PAGE entries required.  */
@@ -3215,7 +3203,7 @@ s3_bfd_score_elf_always_size_sections (b
      that need GOT entries at the end of the symbol table.  We
      do that here.  */
   if (! score_elf_sort_hash_table (info, 1))
-    return FALSE;
+    return false;
 
   if (g->global_gotsym != NULL)
     i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx;
@@ -3244,16 +3232,16 @@ s3_bfd_score_elf_always_size_sections (b
       /* Fixme. Error message or Warning message should be issued here.  */
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
-  bfd_boolean reltext;
+  bool reltext;
 
   dynobj = elf_hash_table (info)->dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -3273,7 +3261,7 @@ s3_bfd_score_elf_size_dynamic_sections (
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  reltext = FALSE;
+  reltext = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -3285,7 +3273,7 @@ s3_bfd_score_elf_size_dynamic_sections (
 	 of the dynobj section names depend upon the input files.  */
       name = bfd_section_name (s);
 
-      if (CONST_STRNEQ (name, ".rel"))
+      if (startswith (name, ".rel"))
 	{
 	  if (s->size == 0)
 	    {
@@ -3315,7 +3303,7 @@ s3_bfd_score_elf_size_dynamic_sections (
 	      if ((target != NULL
 		   && (target->flags & SEC_READONLY) != 0
 		   && (target->flags & SEC_ALLOC) != 0) || strcmp (outname, ".rel.dyn") == 0)
-		reltext = TRUE;
+		reltext = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -3323,7 +3311,7 @@ s3_bfd_score_elf_size_dynamic_sections (
 		s->reloc_count = 0;
 	    }
 	}
-      else if (CONST_STRNEQ (name, ".got"))
+      else if (startswith (name, ".got"))
 	{
 	  /* s3_bfd_score_elf_always_size_sections() has already done
 	     most of the work, but some symbols may have been mapped
@@ -3336,7 +3324,7 @@ s3_bfd_score_elf_size_dynamic_sections (
 	     of .text section. So put a dummy. XXX  */
 	  s->size += SCORE_FUNCTION_STUB_SIZE;
 	}
-      else if (! CONST_STRNEQ (name, ".init"))
+      else if (! startswith (name, ".init"))
 	{
 	  /* It's not one of our sections, so don't allocate space.  */
 	  continue;
@@ -3347,7 +3335,7 @@ s3_bfd_score_elf_size_dynamic_sections (
       if (s->contents == NULL && s->size != 0)
 	{
 	  bfd_set_error (bfd_error_no_memory);
-	  return FALSE;
+	  return false;
 	}
     }
 
@@ -3360,7 +3348,7 @@ s3_bfd_score_elf_size_dynamic_sections (
 	 dynamic linker and used by the debugger.  */
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
-	return FALSE;
+	return false;
 
       if (reltext)
 	info->flags |= DF_TEXTREL;
@@ -3368,47 +3356,47 @@ s3_bfd_score_elf_size_dynamic_sections (
       if ((info->flags & DF_TEXTREL) != 0)
 	{
 	  if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
-	    return FALSE;
+	    return false;
 	}
 
       if (! SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
-	return FALSE;
+	return false;
 
-      if (score_elf_rel_dyn_section (dynobj, FALSE))
+      if (score_elf_rel_dyn_section (dynobj, false))
 	{
 	  if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
-	    return FALSE;
+	    return false;
 
 	  if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
-	    return FALSE;
+	    return false;
 
 	  if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
-	    return FALSE;
+	    return false;
 	}
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_BASE_ADDRESS, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_LOCAL_GOTNO, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_SYMTABNO, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_UNREFEXTNO, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_GOTSYM, 0))
-	return FALSE;
+	return false;
 
       if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_HIPAGENO, 0))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 s3_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_entry *h;
@@ -3424,15 +3412,15 @@ s3_bfd_score_elf_create_dynamic_sections
   if (s != NULL)
     {
       if (!bfd_set_section_flags (s, flags))
-	return FALSE;
+	return false;
     }
 
   /* We need to create .got section.  */
-  if (!score_elf_create_got_section (abfd, info, FALSE))
-    return FALSE;
+  if (!score_elf_create_got_section (abfd, info, false))
+    return false;
 
-  if (!score_elf_rel_dyn_section (elf_hash_table (info)->dynobj, TRUE))
-    return FALSE;
+  if (!score_elf_rel_dyn_section (elf_hash_table (info)->dynobj, true))
+    return false;
 
   /* Create .stub section.  */
   if (bfd_get_linker_section (abfd, SCORE_ELF_STUB_SECTION_NAME) == NULL)
@@ -3442,7 +3430,7 @@ s3_bfd_score_elf_create_dynamic_sections
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
 
-	return FALSE;
+	return false;
     }
 
   if (!bfd_link_pic (info))
@@ -3453,8 +3441,8 @@ s3_bfd_score_elf_create_dynamic_sections
       bh = NULL;
       if (!(_bfd_generic_link_add_one_symbol
 	    (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr,
-	     (bfd_vma) 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
-	return FALSE;
+	     (bfd_vma) 0, NULL, false, get_elf_backend_data (abfd)->collect, &bh)))
+	return false;
 
       h = (struct elf_link_hash_entry *)bh;
       h->non_elf = 0;
@@ -3462,16 +3450,16 @@ s3_bfd_score_elf_create_dynamic_sections
       h->type = STT_SECTION;
 
       if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_finish_dynamic_symbol (bfd *output_bfd,
 					struct bfd_link_info *info,
 					struct elf_link_hash_entry *h,
@@ -3497,7 +3485,7 @@ s3_bfd_score_elf_finish_dynamic_symbol (
 
       /* FIXME: Can h->dynindex be more than 64K?  */
       if (h->dynindx & 0xffff0000)
-	return FALSE;
+	return false;
 
       /* Fill the stub.  */
       score_bfd_put_32 (output_bfd, STUB_LW, stub);
@@ -3520,7 +3508,7 @@ s3_bfd_score_elf_finish_dynamic_symbol (
 
   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
 
-  sgot = score_elf_got_section (dynobj, FALSE);
+  sgot = score_elf_got_section (dynobj, false);
   BFD_ASSERT (sgot != NULL);
   BFD_ASSERT (score_elf_section_data (sgot) != NULL);
   g = score_elf_section_data (sgot)->u.got_info;
@@ -3556,11 +3544,11 @@ s3_bfd_score_elf_finish_dynamic_symbol (
       sym->st_value = elf_gp (output_bfd);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd,
 					  struct bfd_link_info *info)
 {
@@ -3574,7 +3562,7 @@ s3_bfd_score_elf_finish_dynamic_sections
 
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
-  sgot = score_elf_got_section (dynobj, FALSE);
+  sgot = score_elf_got_section (dynobj, false);
   if (sgot == NULL)
     g = NULL;
   else
@@ -3598,13 +3586,13 @@ s3_bfd_score_elf_finish_dynamic_sections
 	  Elf_Internal_Dyn dyn;
 	  const char *name;
 	  size_t elemsize;
-	  bfd_boolean swap_out_p;
+	  bool swap_out_p;
 
 	  /* Read in the current dynamic entry.  */
 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
 
 	  /* Assume that we're going to modify it and write it out.  */
-	  swap_out_p = TRUE;
+	  swap_out_p = true;
 
 	  switch (dyn.d_tag)
 	    {
@@ -3663,7 +3651,7 @@ s3_bfd_score_elf_finish_dynamic_sections
 	      break;
 
 	    default:
-	      swap_out_p = FALSE;
+	      swap_out_p = false;
 	      break;
 	    }
 
@@ -3687,7 +3675,7 @@ s3_bfd_score_elf_finish_dynamic_sections
 
 
   /* We need to sort the entries of the dynamic relocation section.  */
-  s = score_elf_rel_dyn_section (dynobj, FALSE);
+  s = score_elf_rel_dyn_section (dynobj, false);
 
   if (s != NULL && s->size > (bfd_vma)2 * SCORE_ELF_REL_SIZE (output_bfd))
     {
@@ -3696,12 +3684,12 @@ s3_bfd_score_elf_finish_dynamic_sections
 	     sizeof (Elf32_External_Rel), score_elf_sort_dynamic_relocs);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function set up the ELF section header for a BFD section in preparation for writing
    it out.  This is where the flags and type fields are set for unusual sections.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 				Elf_Internal_Shdr *hdr,
 				asection *sec)
@@ -3716,7 +3704,7 @@ s3_bfd_score_elf_fake_sections (bfd *abf
       || strcmp (name, ".sbss") == 0)
     hdr->sh_flags |= SHF_SCORE_GPREL;
 
-  return TRUE;
+  return true;
 }
 
 /* This function do additional processing on the ELF section header before writing
@@ -3726,7 +3714,7 @@ s3_bfd_score_elf_fake_sections (bfd *abf
    warning message will be issued.  backend_fake_section is called before
    assign_file_positions_except_relocs(); backend_section_processing after it.  so, we
    modify section flag there, but not backend_fake_section.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_section_processing (bfd *abfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *hdr)
 {
   if (hdr->bfd_section != NULL)
@@ -3750,20 +3738,20 @@ s3_bfd_score_elf_section_processing (bfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 s3_bfd_score_elf_write_section (bfd *output_bfd, asection *sec, bfd_byte *contents)
 {
   bfd_byte *to, *from, *end;
   int i;
 
   if (strcmp (sec->name, ".pdr") != 0)
-    return FALSE;
+    return false;
 
   if (score_elf_section_data (sec)->u.tdata == NULL)
-    return FALSE;
+    return false;
 
   to = contents;
   end = contents + sec->size;
@@ -3780,7 +3768,7 @@ s3_bfd_score_elf_write_section (bfd *out
   bfd_set_section_contents (output_bfd, sec->output_section, contents,
 			    (file_ptr) sec->output_offset, sec->size);
 
-  return TRUE;
+  return true;
 }
 
 /* Copy data from a SCORE ELF indirect symbol to its direct symbol, hiding the old
@@ -3802,36 +3790,36 @@ s3_bfd_score_elf_copy_indirect_symbol (s
   dirscore->possibly_dynamic_relocs += indscore->possibly_dynamic_relocs;
 
   if (indscore->readonly_reloc)
-    dirscore->readonly_reloc = TRUE;
+    dirscore->readonly_reloc = true;
 
   if (indscore->no_fn_stub)
-    dirscore->no_fn_stub = TRUE;
+    dirscore->no_fn_stub = true;
 }
 
 /* Remove information about discarded functions from other sections which mention them.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
 			       struct bfd_link_info *info)
 {
   asection *o;
-  bfd_boolean ret = FALSE;
+  bool ret = false;
   unsigned char *tdata;
   size_t i, skip;
 
   o = bfd_get_section_by_name (abfd, ".pdr");
   if ((!o) || (o->size == 0) || (o->size % PDR_SIZE != 0)
       || (o->output_section != NULL && bfd_is_abs_section (o->output_section)))
-    return FALSE;
+    return false;
 
   tdata = bfd_zmalloc (o->size / PDR_SIZE);
   if (!tdata)
-    return FALSE;
+    return false;
 
   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, info->keep_memory);
   if (!cookie->rels)
     {
       free (tdata);
-      return FALSE;
+      return false;
     }
 
   cookie->rel = cookie->rels;
@@ -3850,7 +3838,7 @@ s3_bfd_score_elf_discard_info (bfd *abfd
     {
       score_elf_section_data (o)->u.tdata = tdata;
       o->size -= skip * PDR_SIZE;
-      ret = TRUE;
+      ret = true;
     }
   else
     free (tdata);
@@ -3862,12 +3850,12 @@ s3_bfd_score_elf_discard_info (bfd *abfd
 }
 
 /* Signal that discard_info() has removed the discarded relocations for this section.  */
-static bfd_boolean
+static bool
 s3_bfd_score_elf_ignore_discarded_relocs (asection *sec)
 {
   if (strcmp (sec->name, ".pdr") == 0)
-    return TRUE;
-  return FALSE;
+    return true;
+  return false;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -3892,7 +3880,7 @@ s3_bfd_score_elf_gc_mark_hook (asection
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 s3_bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -3901,7 +3889,7 @@ s3_bfd_score_elf_grok_prstatus (bfd *abf
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 148:		       /* Linux/Score 32-bit.  */
       /* pr_cursig */
@@ -3924,13 +3912,13 @@ s3_bfd_score_elf_grok_prstatus (bfd *abf
 					  note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 s3_bfd_score_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 124:		       /* Linux/Score elf_prpsinfo.  */
       elf_tdata (abfd)->core->program
@@ -3951,7 +3939,7 @@ s3_bfd_score_elf_grok_psinfo (bfd *abfd,
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3985,7 +3973,7 @@ elf32_score_reloc_name_lookup (bfd *abfd
   return NULL;
 }
 
-static bfd_boolean
+static bool
 s3_elf32_score_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -4007,10 +3995,10 @@ s3_elf32_score_print_private_bfd_data (b
     }
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 s3_elf32_score_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -4018,21 +4006,25 @@ s3_elf32_score_merge_private_bfd_data (b
   flagword out_flags;
 
   if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
+
+  /* FIXME: What should be checked when linking shared libraries?  */
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
 
   in_flags  = elf_elfheader (ibfd)->e_flags;
   out_flags = elf_elfheader (obfd)->e_flags;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   in_flags = elf_elfheader (ibfd)->e_flags;
   out_flags = elf_elfheader (obfd)->e_flags;
 
   if (! elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
@@ -4041,7 +4033,7 @@ s3_elf32_score_merge_private_bfd_data (b
 	  return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), bfd_get_mach (ibfd));
 	}
 
-      return TRUE;
+      return true;
     }
 
   if (((in_flags & EF_SCORE_PIC) != 0) != ((out_flags & EF_SCORE_PIC) != 0))
@@ -4050,18 +4042,18 @@ s3_elf32_score_merge_private_bfd_data (b
 
   /* FIXME: Maybe dependency fix compatibility should be checked here.  */
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 s3_elf32_score_new_section_hook (bfd *abfd, asection *sec)
 {
   struct _score_elf_section_data *sdata;
-  bfd_size_type amt = sizeof (*sdata);
+  size_t amt = sizeof (*sdata);
 
   sdata = bfd_zalloc (abfd, amt);
   if (sdata == NULL)
-    return FALSE;
+    return false;
   sec->used_by_bfd = sdata;
 
   return _bfd_elf_new_section_hook (abfd, sec);
@@ -4070,7 +4062,7 @@ s3_elf32_score_new_section_hook (bfd *ab
 /*****************************************************************************/
 
 /* s3_s7: backend hooks.  */
-static bfd_boolean
+static bool
 _bfd_score_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 			  arelent *bfd_reloc,
 			  Elf_Internal_Rela *elf_reloc)
@@ -4081,7 +4073,7 @@ _bfd_score_info_to_howto (bfd *abfd ATTR
     return s7_bfd_score_info_to_howto (abfd, bfd_reloc, elf_reloc);
 }
 
-static bfd_boolean
+static int
 _bfd_score_elf_relocate_section (bfd *output_bfd,
 				 struct bfd_link_info *info,
 				 bfd *input_bfd,
@@ -4101,7 +4093,7 @@ _bfd_score_elf_relocate_section (bfd *ou
 	     local_syms, local_sections);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_check_relocs (bfd *abfd,
 			     struct bfd_link_info *info,
 			     asection *sec,
@@ -4113,7 +4105,7 @@ _bfd_score_elf_check_relocs (bfd *abfd,
     return s7_bfd_score_elf_check_relocs (abfd, info, sec, relocs);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_add_symbol_hook (bfd *abfd,
 				struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				Elf_Internal_Sym *sym,
@@ -4163,7 +4155,7 @@ _bfd_score_elf_link_output_symbol_hook (
     return s7_bfd_score_elf_link_output_symbol_hook (info, name, sym, input_sec, h);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
 					 asection *sec,
 					 int *retval)
@@ -4174,7 +4166,7 @@ _bfd_score_elf_section_from_bfd_section
     return s7_bfd_score_elf_section_from_bfd_section (abfd, sec, retval);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				      struct elf_link_hash_entry *h)
 {
@@ -4184,7 +4176,7 @@ _bfd_score_elf_adjust_dynamic_symbol (st
     return s7_bfd_score_elf_adjust_dynamic_symbol (info, h);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_always_size_sections (bfd *output_bfd,
 				     struct bfd_link_info *info)
 {
@@ -4194,7 +4186,7 @@ _bfd_score_elf_always_size_sections (bfd
     return s7_bfd_score_elf_always_size_sections (output_bfd, info);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   if (bfd_get_mach (output_bfd) == bfd_mach_score3)
@@ -4203,7 +4195,7 @@ _bfd_score_elf_size_dynamic_sections (bf
     return s7_bfd_score_elf_size_dynamic_sections (output_bfd, info);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   if (bfd_get_mach (abfd) == bfd_mach_score3)
@@ -4212,7 +4204,7 @@ _bfd_score_elf_create_dynamic_sections (
     return s7_bfd_score_elf_create_dynamic_sections (abfd, info);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_finish_dynamic_symbol (bfd *output_bfd,
 				      struct bfd_link_info *info,
 				      struct elf_link_hash_entry *h,
@@ -4224,7 +4216,7 @@ _bfd_score_elf_finish_dynamic_symbol (bf
     return s7_bfd_score_elf_finish_dynamic_symbol (output_bfd, info, h, sym);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_finish_dynamic_sections (bfd *output_bfd,
 					struct bfd_link_info *info)
 {
@@ -4234,7 +4226,7 @@ _bfd_score_elf_finish_dynamic_sections (
     return s7_bfd_score_elf_finish_dynamic_sections (output_bfd, info);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 			      Elf_Internal_Shdr *hdr,
 			      asection *sec)
@@ -4245,7 +4237,7 @@ _bfd_score_elf_fake_sections (bfd *abfd
     return s7_bfd_score_elf_fake_sections (abfd, hdr, sec);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_section_processing (bfd *abfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *hdr)
 {
   if (bfd_get_mach (abfd) == bfd_mach_score3)
@@ -4254,7 +4246,7 @@ _bfd_score_elf_section_processing (bfd *
     return s7_bfd_score_elf_section_processing (abfd, hdr);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_write_section (bfd *output_bfd,
 			      struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
 			      asection *sec, bfd_byte *contents)
@@ -4279,7 +4271,7 @@ _bfd_score_elf_copy_indirect_symbol (str
 static void
 _bfd_score_elf_hide_symbol (struct bfd_link_info *info,
 			    struct elf_link_hash_entry *entry,
-			    bfd_boolean force_local)
+			    bool force_local)
 {
   if (bfd_get_mach (info->input_bfds) == bfd_mach_score3)
     return s3_bfd_score_elf_hide_symbol (info, entry, force_local);
@@ -4287,7 +4279,7 @@ _bfd_score_elf_hide_symbol (struct bfd_l
     return s7_bfd_score_elf_hide_symbol (info, entry, force_local);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
 			 struct bfd_link_info *info)
 {
@@ -4297,7 +4289,7 @@ _bfd_score_elf_discard_info (bfd *abfd,
     return s7_bfd_score_elf_discard_info (abfd, cookie, info);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_ignore_discarded_relocs (asection *sec)
 {
   if (bfd_get_mach (sec->owner) == bfd_mach_score3)
@@ -4319,7 +4311,7 @@ _bfd_score_elf_gc_mark_hook (asection *s
     return s7_bfd_score_elf_gc_mark_hook (sec, info, rel, h, sym);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   if (bfd_get_mach (abfd) == bfd_mach_score3)
@@ -4328,7 +4320,7 @@ _bfd_score_elf_grok_prstatus (bfd *abfd,
     return s7_bfd_score_elf_grok_prstatus (abfd, note);
 }
 
-static bfd_boolean
+static bool
 _bfd_score_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (bfd_get_mach (abfd) == bfd_mach_score3)
@@ -4359,7 +4351,7 @@ static struct bfd_link_hash_table *
 elf32_score_link_hash_table_create (bfd *abfd)
 {
   struct elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_link_hash_table);
+  size_t amt = sizeof (struct elf_link_hash_table);
 
   ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -4376,7 +4368,7 @@ elf32_score_link_hash_table_create (bfd
   return &ret->root;
 }
 
-static bfd_boolean
+static bool
 elf32_score_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   if (bfd_get_mach (abfd) == bfd_mach_score3)
@@ -4385,7 +4377,7 @@ elf32_score_print_private_bfd_data (bfd
     return s7_elf32_score_print_private_bfd_data (abfd, ptr);
 }
 
-static bfd_boolean
+static bool
 elf32_score_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   if (bfd_get_mach (info->output_bfd) == bfd_mach_score3)
@@ -4394,7 +4386,7 @@ elf32_score_merge_private_bfd_data (bfd
     return s7_elf32_score_merge_private_bfd_data (ibfd, info);
 }
 
-static bfd_boolean
+static bool
 elf32_score_new_section_hook (bfd *abfd, asection *sec)
 {
   if (bfd_get_mach (abfd) == bfd_mach_score3)
@@ -4407,7 +4399,7 @@ elf32_score_new_section_hook (bfd *abfd,
 /* s3_s7: don't need to split.  */
 
 /* Set the right machine number.  */
-static bfd_boolean
+static bool
 _bfd_score_elf_score_object_p (bfd * abfd)
 {
   int e_set = bfd_mach_score7;
@@ -4432,7 +4424,7 @@ _bfd_score_elf_score_object_p (bfd * abf
   return bfd_default_set_arch_mach (abfd, bfd_arch_score, e_set);
 }
 
-bfd_boolean
+bool
 _bfd_score_elf_common_definition (Elf_Internal_Sym *sym)
 {
   return (sym->st_shndx == SHN_COMMON || sym->st_shndx == SHN_SCORE_SCOMMON);
@@ -4489,8 +4481,8 @@ _bfd_score_elf_common_definition (Elf_In
 #define elf_backend_want_plt_sym	  0
 #define elf_backend_got_header_size	  (4 * SCORE_RESERVED_GOTNO)
 #define elf_backend_plt_header_size	  0
-#define elf_backend_collect		  TRUE
-#define elf_backend_type_change_ok	  TRUE
+#define elf_backend_collect		  true
+#define elf_backend_type_change_ok	  true
 #define elf_backend_object_p		      _bfd_score_elf_score_object_p
 
 #define bfd_elf32_bfd_reloc_type_lookup	     elf32_score_reloc_type_lookup
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-score.h ./bfd/elf32-score.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-score.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-score.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for S+core.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by
    Brain.lin (brain.lin@sunplusct.com)
    Mei Ligang (ligang@sunnorth.com.cn)
@@ -28,12 +28,12 @@
 extern void
 s7_bfd_score_elf_hide_symbol (struct bfd_link_info *,
 			      struct elf_link_hash_entry *,
-			      bfd_boolean);
+			      bool);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_info_to_howto (bfd *, arelent *, Elf_Internal_Rela *);
 
-extern bfd_boolean
+extern int
 s7_bfd_score_elf_relocate_section (bfd *,
 				   struct bfd_link_info *,
 				   bfd *,
@@ -43,13 +43,13 @@ s7_bfd_score_elf_relocate_section (bfd *
 				   Elf_Internal_Sym *,
 				   asection **);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_check_relocs (bfd *,
 			       struct bfd_link_info *,
 			       asection *,
 			       const Elf_Internal_Rela *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_add_symbol_hook (bfd *,
 				  struct bfd_link_info *,
 				  Elf_Internal_Sym *,
@@ -68,42 +68,42 @@ s7_bfd_score_elf_link_output_symbol_hook
 					  asection *,
 					  struct elf_link_hash_entry *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_section_from_bfd_section (bfd *,
 					   asection *,
 					   int *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *,
 					struct elf_link_hash_entry *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_always_size_sections (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_size_dynamic_sections (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_create_dynamic_sections (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_finish_dynamic_symbol (bfd *,
 					struct bfd_link_info *,
 					struct elf_link_hash_entry *,
 					Elf_Internal_Sym *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_finish_dynamic_sections (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_fake_sections (bfd *,
 				Elf_Internal_Shdr *,
 				asection *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_section_processing (bfd *, Elf_Internal_Shdr *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_write_section (bfd *, asection *, bfd_byte *);
 
 extern void
@@ -111,11 +111,11 @@ s7_bfd_score_elf_copy_indirect_symbol (s
 				       struct elf_link_hash_entry *,
 				       struct elf_link_hash_entry *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_discard_info (bfd *, struct elf_reloc_cookie *,
 			       struct bfd_link_info *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_ignore_discarded_relocs (asection *);
 
 extern asection *
@@ -125,10 +125,10 @@ s7_bfd_score_elf_gc_mark_hook (asection
 			       struct elf_link_hash_entry *,
 			       Elf_Internal_Sym *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_grok_prstatus (bfd *, Elf_Internal_Note *);
 
-extern bfd_boolean
+extern bool
 s7_bfd_score_elf_grok_psinfo (bfd *, Elf_Internal_Note *);
 
 extern reloc_howto_type *
@@ -137,16 +137,16 @@ s7_elf32_score_reloc_type_lookup (bfd *,
 extern struct bfd_link_hash_table *
 s7_elf32_score_link_hash_table_create (bfd *);
 
-extern bfd_boolean
+extern bool
 s7_elf32_score_print_private_bfd_data (bfd *, void *);
 
-extern bfd_boolean
+extern bool
 s7_elf32_score_merge_private_bfd_data (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
+extern bool
 s7_elf32_score_new_section_hook (bfd *, asection *);
 
-extern bfd_boolean
+extern bool
 _bfd_score_elf_common_definition (Elf_Internal_Sym *);
 
 #define elf_backend_common_definition   _bfd_score_elf_common_definition
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-sh.c ./bfd/elf32-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-sh.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-sh.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Renesas / SuperH SH specific support for 32-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Contributed by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -37,11 +37,11 @@ static bfd_reloc_status_type sh_elf_relo
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type sh_elf_ignore_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_boolean sh_elf_relax_delete_bytes
+static bool sh_elf_relax_delete_bytes
   (bfd *, asection *, bfd_vma, int);
-static bfd_boolean sh_elf_align_loads
-  (bfd *, asection *, Elf_Internal_Rela *, bfd_byte *, bfd_boolean *);
-static bfd_boolean sh_elf_swap_insns
+static bool sh_elf_align_loads
+  (bfd *, asection *, Elf_Internal_Rela *, bfd_byte *, bool *);
+static bool sh_elf_swap_insns
   (bfd *, asection *, void *, bfd_byte *, bfd_vma);
 static int sh_elf_optimized_tls_reloc
   (struct bfd_link_info *, int, int);
@@ -67,7 +67,7 @@ static bfd_vma tpoff
   (SYMBOL_REFERENCES_LOCAL (INFO, H) \
    || ! elf_hash_table (INFO)->dynamic_sections_created)
 
-#define SH_PARTIAL32 TRUE
+#define SH_PARTIAL32 true
 #define SH_SRC_MASK32 0xffffffff
 #define SH_ELF_RELOC sh_elf_reloc
 static reloc_howto_type sh_elf_howto_table[] =
@@ -75,7 +75,7 @@ static reloc_howto_type sh_elf_howto_tab
 #include "elf32-sh-relocs.h"
 };
 
-#define SH_PARTIAL32 FALSE
+#define SH_PARTIAL32 false
 #define SH_SRC_MASK32 0
 #define SH_ELF_RELOC bfd_elf_generic_reloc
 static reloc_howto_type sh_vxworks_howto_table[] =
@@ -85,7 +85,7 @@ static reloc_howto_type sh_vxworks_howto
 
 /* Return true if OUTPUT_BFD is a VxWorks object.  */
 
-static bfd_boolean
+static bool
 vxworks_object_p (bfd *abfd ATTRIBUTE_UNUSED)
 {
 #if !defined SH_TARGET_ALREADY_DEFINED
@@ -95,13 +95,13 @@ vxworks_object_p (bfd *abfd ATTRIBUTE_UN
   return (abfd->xvec == &sh_elf32_vxworks_le_vec
 	  || abfd->xvec == &sh_elf32_vxworks_vec);
 #else
-  return FALSE;
+  return false;
 #endif
 }
 
 /* Return true if OUTPUT_BFD is an FDPIC object.  */
 
-static bfd_boolean
+static bool
 fdpic_object_p (bfd *abfd ATTRIBUTE_UNUSED)
 {
 #if !defined SH_TARGET_ALREADY_DEFINED
@@ -111,7 +111,7 @@ fdpic_object_p (bfd *abfd ATTRIBUTE_UNUS
   return (abfd->xvec == &sh_elf32_fdpic_le_vec
 	  || abfd->xvec == &sh_elf32_fdpic_be_vec);
 #else
-  return FALSE;
+  return false;
 #endif
 }
 
@@ -167,8 +167,7 @@ sh_elf_reloc_loop (int r_type ATTRIBUTE_
 	  if (!bfd_malloc_and_get_section (input_bfd, symbol_section,
 					   &contents))
 	    {
-	      if (contents != NULL)
-		free (contents);
+	      free (contents);
 	      return bfd_reloc_outofrange;
 	    }
 	}
@@ -203,8 +202,7 @@ sh_elf_reloc_loop (int r_type ATTRIBUTE_
       end = start0;
     }
 
-  if (contents != NULL
-      && elf_section_data (symbol_section)->this_hdr.contents != contents)
+  if (elf_section_data (symbol_section)->this_hdr.contents != contents)
     free (contents);
 
   insn = bfd_get_16 (input_bfd, contents + addr);
@@ -421,30 +419,29 @@ sh_elf_reloc_name_lookup (bfd *abfd, con
 
 /* Given an ELF reloc, fill in the howto field of a relent.  */
 
-static bfd_boolean
+static bool
 sh_elf_info_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
   unsigned int r;
 
   r = ELF32_R_TYPE (dst->r_info);
 
-  if (r >= R_SH_max
+  if (r >= R_SH_FIRST_INVALID_RELOC_6
       || (r >= R_SH_FIRST_INVALID_RELOC   && r <= R_SH_LAST_INVALID_RELOC)
       || (r >= R_SH_FIRST_INVALID_RELOC_2 && r <= R_SH_LAST_INVALID_RELOC_2)
       || (r >= R_SH_FIRST_INVALID_RELOC_3 && r <= R_SH_LAST_INVALID_RELOC_3)
       || (r >= R_SH_FIRST_INVALID_RELOC_4 && r <= R_SH_LAST_INVALID_RELOC_4)
-      || (r >= R_SH_FIRST_INVALID_RELOC_5 && r <= R_SH_LAST_INVALID_RELOC_5)
-      || (r >= R_SH_FIRST_INVALID_RELOC_6 && r <= R_SH_LAST_INVALID_RELOC_6))
+      || (r >= R_SH_FIRST_INVALID_RELOC_5 && r <= R_SH_LAST_INVALID_RELOC_5))
     {
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = get_howto_table (abfd) + r;
-  return TRUE;
+  return true;
 }
 
 /* This function handles relaxing for SH ELF.  See the corresponding
@@ -457,23 +454,24 @@ sh_elf_info_to_howto (bfd *abfd, arelent
    values; in coff-sh.c they come from include/coff/sh.h, whereas here
    they come from enum elf_sh_reloc_type in include/elf/sh.h.  */
 
-static bfd_boolean
+static bool
 sh_elf_relax_section (bfd *abfd, asection *sec,
-		      struct bfd_link_info *link_info, bfd_boolean *again)
+		      struct bfd_link_info *link_info, bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
-  bfd_boolean have_code;
+  bool have_code;
   Elf_Internal_Rela *irel, *irelend;
   bfd_byte *contents = NULL;
   Elf_Internal_Sym *isymbuf = NULL;
 
-  *again = FALSE;
+  *again = false;
 
   if (bfd_link_relocatable (link_info)
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_symtab_hdr (abfd);
 
@@ -483,7 +481,7 @@ sh_elf_relax_section (bfd *abfd, asectio
   if (internal_relocs == NULL)
     goto error_return;
 
-  have_code = FALSE;
+  have_code = false;
 
   irelend = internal_relocs + sec->reloc_count;
   for (irel = internal_relocs; irel < irelend; irel++)
@@ -494,7 +492,7 @@ sh_elf_relax_section (bfd *abfd, asectio
       bfd_signed_vma foff;
 
       if (ELF32_R_TYPE (irel->r_info) == (int) R_SH_CODE)
-	have_code = TRUE;
+	have_code = true;
 
       if (ELF32_R_TYPE (irel->r_info) != (int) R_SH_USES)
 	continue;
@@ -719,7 +717,7 @@ sh_elf_relax_section (bfd *abfd, asectio
       /* That will change things, so, just in case it permits some
 	 other function call to come within range, we should relax
 	 again.  Note that this is not required, and it may be slow.  */
-      *again = TRUE;
+      *again = true;
 
       /* Now check whether we got a COUNT reloc.  */
       if (irelcount >= irelend)
@@ -761,7 +759,7 @@ sh_elf_relax_section (bfd *abfd, asectio
   if ((elf_elfheader (abfd)->e_flags & EF_SH_MACH_MASK) != EF_SH4
       && have_code)
     {
-      bfd_boolean swapped;
+      bool swapped;
 
       /* Get the section contents.  */
       if (contents == NULL)
@@ -811,31 +809,27 @@ sh_elf_relax_section (bfd *abfd, asectio
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 /* Delete some bytes from a section while relaxing.  FIXME: There is a
    lot of duplication between this function and sh_relax_delete_bytes
    in coff-sh.c.  */
 
-static bfd_boolean
+static bool
 sh_elf_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr,
 			   int count)
 {
@@ -902,7 +896,7 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
       int insn = 0;
       int off, adjust, oinsn;
       bfd_signed_vma voff = 0;
-      bfd_boolean overflow;
+      bool overflow;
 
       /* Get the new reloc address.  */
       nraddr = irel->r_offset;
@@ -1077,7 +1071,7 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
       if (adjust != 0)
 	{
 	  oinsn = insn;
-	  overflow = FALSE;
+	  overflow = false;
 	  switch ((enum elf_sh_reloc_type) ELF32_R_TYPE (irel->r_info))
 	    {
 	    default:
@@ -1088,14 +1082,14 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
 	    case R_SH_DIR8WPZ:
 	      insn += adjust / 2;
 	      if ((oinsn & 0xff00) != (insn & 0xff00))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, contents + nraddr);
 	      break;
 
 	    case R_SH_IND12W:
 	      insn += adjust / 2;
 	      if ((oinsn & 0xf000) != (insn & 0xf000))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, contents + nraddr);
 	      break;
 
@@ -1109,21 +1103,21 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
 		    ++insn;
 		}
 	      if ((oinsn & 0xff00) != (insn & 0xff00))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, contents + nraddr);
 	      break;
 
 	    case R_SH_SWITCH8:
 	      voff += adjust;
 	      if (voff < 0 || voff >= 0xff)
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_8 (abfd, voff, contents + nraddr);
 	      break;
 
 	    case R_SH_SWITCH16:
 	      voff += adjust;
 	      if (voff < - 0x8000 || voff >= 0x8000)
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_signed_16 (abfd, (bfd_vma) voff, contents + nraddr);
 	      break;
 
@@ -1144,7 +1138,7 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
 		(_("%pB: %#" PRIx64 ": fatal: reloc overflow while relaxing"),
 		 abfd, (uint64_t) irel->r_offset);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -1161,6 +1155,7 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
       bfd_byte *ocontents;
 
       if (o == sec
+	  || (o->flags & SEC_HAS_CONTENTS) == 0
 	  || (o->flags & SEC_RELOC) == 0
 	  || o->reloc_count == 0)
 	continue;
@@ -1169,9 +1164,9 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
 	 FALSE, we should free them, if we are permitted to, when we
 	 leave sh_coff_relax_section.  */
       internal_relocs = (_bfd_elf_link_read_relocs
-			 (abfd, o, NULL, (Elf_Internal_Rela *) NULL, TRUE));
+			 (abfd, o, NULL, (Elf_Internal_Rela *) NULL, true));
       if (internal_relocs == NULL)
-	return FALSE;
+	return false;
 
       ocontents = NULL;
       irelscanend = internal_relocs + o->reloc_count;
@@ -1195,9 +1190,8 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
 			 when we leave sh_coff_relax_section.  */
 		      if (!bfd_malloc_and_get_section (abfd, o, &ocontents))
 			{
-			  if (ocontents != NULL)
-			    free (ocontents);
-			  return FALSE;
+			  free (ocontents);
+			  return false;
 			}
 
 		      elf_section_data (o)->this_hdr.contents = ocontents;
@@ -1253,9 +1247,8 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
 			 when we leave sh_coff_relax_section.  */
 		      if (!bfd_malloc_and_get_section (abfd, o, &ocontents))
 			{
-			  if (ocontents != NULL)
-			    free (ocontents);
-			  return FALSE;
+			  free (ocontents);
+			  return false;
 			}
 
 		      elf_section_data (o)->this_hdr.contents = ocontents;
@@ -1316,24 +1309,24 @@ sh_elf_relax_delete_bytes (bfd *abfd, as
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look for loads and stores which we can align to four byte
    boundaries.  This is like sh_align_loads in coff-sh.c.  */
 
-static bfd_boolean
+static bool
 sh_elf_align_loads (bfd *abfd ATTRIBUTE_UNUSED, asection *sec,
 		    Elf_Internal_Rela *internal_relocs,
 		    bfd_byte *contents ATTRIBUTE_UNUSED,
-		    bfd_boolean *pswapped)
+		    bool *pswapped)
 {
   Elf_Internal_Rela *irel, *irelend;
   bfd_vma *labels = NULL;
   bfd_vma *label, *label_end;
   bfd_size_type amt;
 
-  *pswapped = FALSE;
+  *pswapped = false;
 
   irelend = internal_relocs + sec->reloc_count;
 
@@ -1384,17 +1377,16 @@ sh_elf_align_loads (bfd *abfd ATTRIBUTE_
 
   free (labels);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (labels != NULL)
-    free (labels);
-  return FALSE;
+  free (labels);
+  return false;
 }
 
 /* Swap two SH instructions.  This is like sh_swap_insns in coff-sh.c.  */
 
-static bfd_boolean
+static bool
 sh_elf_swap_insns (bfd *abfd, asection *sec, void *relocs,
 		   bfd_byte *contents, bfd_vma addr)
 {
@@ -1459,10 +1451,10 @@ sh_elf_swap_insns (bfd *abfd, asection *
 	{
 	  bfd_byte *loc;
 	  unsigned short insn, oinsn;
-	  bfd_boolean overflow;
+	  bool overflow;
 
 	  loc = contents + irel->r_offset;
-	  overflow = FALSE;
+	  overflow = false;
 	  switch (type)
 	    {
 	    default:
@@ -1474,7 +1466,7 @@ sh_elf_swap_insns (bfd *abfd, asection *
 	      oinsn = insn;
 	      insn += add / 2;
 	      if ((oinsn & 0xff00) != (insn & 0xff00))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, loc);
 	      break;
 
@@ -1483,7 +1475,7 @@ sh_elf_swap_insns (bfd *abfd, asection *
 	      oinsn = insn;
 	      insn += add / 2;
 	      if ((oinsn & 0xf000) != (insn & 0xf000))
-		overflow = TRUE;
+		overflow = true;
 	      bfd_put_16 (abfd, (bfd_vma) insn, loc);
 	      break;
 
@@ -1500,7 +1492,7 @@ sh_elf_swap_insns (bfd *abfd, asection *
 		  oinsn = insn;
 		  insn += add / 2;
 		  if ((oinsn & 0xff00) != (insn & 0xff00))
-		    overflow = TRUE;
+		    overflow = true;
 		  bfd_put_16 (abfd, (bfd_vma) insn, loc);
 		}
 
@@ -1514,12 +1506,12 @@ sh_elf_swap_insns (bfd *abfd, asection *
 		(_("%pB: %#" PRIx64 ": fatal: reloc overflow while relaxing"),
 		 abfd, (uint64_t) irel->r_offset);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Describes one of the various PLT styles.  */
@@ -1551,9 +1543,8 @@ struct elf_sh_plt_info
     bfd_vma got_entry; /* the address of the symbol's .got.plt entry */
     bfd_vma plt; /* .plt (or a branch to .plt on VxWorks) */
     bfd_vma reloc_offset; /* the offset of the symbol's JMP_SLOT reloc */
-    bfd_boolean got20; /* TRUE if got_entry points to a movi20
-			  instruction (instead of a constant pool
-			  entry).  */
+    bool got20; /* TRUE if got_entry points to a movi20 instruction
+		   (instead of a constant pool entry).  */
   } symbol_fields;
 
   /* The offset of the resolver stub from the start of SYMBOL_ENTRY.  */
@@ -1687,7 +1678,7 @@ static const struct elf_sh_plt_info elf_
       { MINUS_ONE, 24, 20 },
       elf_sh_plt_entry_be,
       ELF_PLT_ENTRY_SIZE,
-      { 20, 16, 24, FALSE },
+      { 20, 16, 24, false },
       8,
       NULL
     },
@@ -1698,7 +1689,7 @@ static const struct elf_sh_plt_info elf_
       { MINUS_ONE, 24, 20 },
       elf_sh_plt_entry_le,
       ELF_PLT_ENTRY_SIZE,
-      { 20, 16, 24, FALSE },
+      { 20, 16, 24, false },
       8,
       NULL
     },
@@ -1711,7 +1702,7 @@ static const struct elf_sh_plt_info elf_
       { MINUS_ONE, MINUS_ONE, MINUS_ONE },
       elf_sh_pic_plt_entry_be,
       ELF_PLT_ENTRY_SIZE,
-      { 20, MINUS_ONE, 24, FALSE },
+      { 20, MINUS_ONE, 24, false },
       8,
       NULL
     },
@@ -1722,7 +1713,7 @@ static const struct elf_sh_plt_info elf_
       { MINUS_ONE, MINUS_ONE, MINUS_ONE },
       elf_sh_pic_plt_entry_le,
       ELF_PLT_ENTRY_SIZE,
-      { 20, MINUS_ONE, 24, FALSE },
+      { 20, MINUS_ONE, 24, false },
       8,
       NULL
     },
@@ -1815,7 +1806,7 @@ static const struct elf_sh_plt_info vxwo
       { MINUS_ONE, MINUS_ONE, 8 },
       vxworks_sh_plt_entry_be,
       VXWORKS_PLT_ENTRY_SIZE,
-      { 8, 14, 20, FALSE },
+      { 8, 14, 20, false },
       12,
       NULL
     },
@@ -1826,7 +1817,7 @@ static const struct elf_sh_plt_info vxwo
       { MINUS_ONE, MINUS_ONE, 8 },
       vxworks_sh_plt_entry_le,
       VXWORKS_PLT_ENTRY_SIZE,
-      { 8, 14, 20, FALSE },
+      { 8, 14, 20, false },
       12,
       NULL
     },
@@ -1839,7 +1830,7 @@ static const struct elf_sh_plt_info vxwo
       { MINUS_ONE, MINUS_ONE, MINUS_ONE },
       vxworks_sh_pic_plt_entry_be,
       VXWORKS_PLT_ENTRY_SIZE,
-      { 8, MINUS_ONE, 20, FALSE },
+      { 8, MINUS_ONE, 20, false },
       12,
       NULL
     },
@@ -1850,7 +1841,7 @@ static const struct elf_sh_plt_info vxwo
       { MINUS_ONE, MINUS_ONE, MINUS_ONE },
       vxworks_sh_pic_plt_entry_le,
       VXWORKS_PLT_ENTRY_SIZE,
-      { 8, MINUS_ONE, 20, FALSE },
+      { 8, MINUS_ONE, 20, false },
       12,
       NULL
     },
@@ -1911,7 +1902,7 @@ static const struct elf_sh_plt_info fdpi
     { MINUS_ONE, MINUS_ONE, MINUS_ONE },
     fdpic_sh_plt_entry_be,
     FDPIC_PLT_ENTRY_SIZE,
-    { 12, MINUS_ONE, 16, FALSE },
+    { 12, MINUS_ONE, 16, false },
     FDPIC_PLT_LAZY_OFFSET,
     NULL
   },
@@ -1922,7 +1913,7 @@ static const struct elf_sh_plt_info fdpi
     { MINUS_ONE, MINUS_ONE, MINUS_ONE },
     fdpic_sh_plt_entry_le,
     FDPIC_PLT_ENTRY_SIZE,
-    { 12, MINUS_ONE, 16, FALSE },
+    { 12, MINUS_ONE, 16, false },
     FDPIC_PLT_LAZY_OFFSET,
     NULL
   },
@@ -1971,7 +1962,7 @@ static const struct elf_sh_plt_info fdpi
   { MINUS_ONE, MINUS_ONE, MINUS_ONE },
   fdpic_sh2a_plt_entry_be,
   FDPIC_SH2A_PLT_ENTRY_SIZE,
-  { 0, MINUS_ONE, 12, TRUE },
+  { 0, MINUS_ONE, 12, true },
   FDPIC_SH2A_PLT_LAZY_OFFSET,
   NULL
 };
@@ -1983,7 +1974,7 @@ static const struct elf_sh_plt_info fdpi
   { MINUS_ONE, MINUS_ONE, MINUS_ONE },
   fdpic_sh2a_plt_entry_le,
   FDPIC_SH2A_PLT_ENTRY_SIZE,
-  { 0, MINUS_ONE, 12, TRUE },
+  { 0, MINUS_ONE, 12, true },
   FDPIC_SH2A_PLT_LAZY_OFFSET,
   NULL
 };
@@ -1996,7 +1987,7 @@ static const struct elf_sh_plt_info fdpi
     { MINUS_ONE, MINUS_ONE, MINUS_ONE },
     fdpic_sh_plt_entry_be,
     FDPIC_PLT_ENTRY_SIZE,
-    { 12, MINUS_ONE, 16, FALSE },
+    { 12, MINUS_ONE, 16, false },
     FDPIC_PLT_LAZY_OFFSET,
     &fdpic_sh2a_short_plt_be
   },
@@ -2007,7 +1998,7 @@ static const struct elf_sh_plt_info fdpi
     { MINUS_ONE, MINUS_ONE, MINUS_ONE },
     fdpic_sh_plt_entry_le,
     FDPIC_PLT_ENTRY_SIZE,
-    { 12, MINUS_ONE, 16, FALSE },
+    { 12, MINUS_ONE, 16, false },
     FDPIC_PLT_LAZY_OFFSET,
     &fdpic_sh2a_short_plt_le
   },
@@ -2017,7 +2008,7 @@ static const struct elf_sh_plt_info fdpi
    the object is position-independent.  */
 
 static const struct elf_sh_plt_info *
-get_plt_info (bfd *abfd, bfd_boolean pic_p)
+get_plt_info (bfd *abfd, bool pic_p)
 {
   if (fdpic_object_p (abfd))
     {
@@ -2038,7 +2029,7 @@ get_plt_info (bfd *abfd, bfd_boolean pic
    not data.  */
 
 inline static void
-install_plt_field (bfd *output_bfd, bfd_boolean code_p ATTRIBUTE_UNUSED,
+install_plt_field (bfd *output_bfd, bool code_p ATTRIBUTE_UNUSED,
 		   unsigned long value, bfd_byte *addr)
 {
   bfd_put_32 (output_bfd, value, addr);
@@ -2104,9 +2095,6 @@ struct elf_sh_link_hash_entry
 {
   struct elf_link_hash_entry root;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   bfd_signed_vma gotplt_refcount;
 
   /* A local function descriptor, for FDPIC.  The refcount counts
@@ -2158,7 +2146,7 @@ struct sh_elf_obj_tdata
 /* Override the generic function because we need to store sh_elf_obj_tdata
    as the specific tdata.  */
 
-static bfd_boolean
+static bool
 sh_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct sh_elf_obj_tdata),
@@ -2172,8 +2160,6 @@ struct elf_sh_link_hash_table
   struct elf_link_hash_table root;
 
   /* Short-cuts to get to dynamic linker sections.  */
-  asection *sdynbss;
-  asection *srelbss;
   asection *sfuncdesc;
   asection *srelfuncdesc;
   asection *srofixup;
@@ -2181,9 +2167,6 @@ struct elf_sh_link_hash_table
   /* The (unloaded but important) VxWorks .rela.plt.unloaded section.  */
   asection *srelplt2;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* A counter or offset to track a TLS got entry.  */
   union
     {
@@ -2194,11 +2177,8 @@ struct elf_sh_link_hash_table
   /* The type of PLT to use.  */
   const struct elf_sh_plt_info *plt_info;
 
-  /* True if the target system is VxWorks.  */
-  bfd_boolean vxworks_p;
-
   /* True if the target system uses FDPIC.  */
-  bfd_boolean fdpic_p;
+  bool fdpic_p;
 };
 
 /* Traverse an sh ELF linker hash table.  */
@@ -2206,14 +2186,15 @@ struct elf_sh_link_hash_table
 #define sh_elf_link_hash_traverse(table, func, info)			\
   (elf_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the sh ELF linker hash table from a link_info structure.  */
 
 #define sh_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == SH_ELF_DATA ? ((struct elf_sh_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == SH_ELF_DATA)		\
+   ? (struct elf_sh_link_hash_table *) (p)->hash : NULL)
 
 /* Create an entry in an sh ELF linker hash table.  */
 
@@ -2240,7 +2221,6 @@ sh_elf_link_hash_newfunc (struct bfd_has
 				     table, string));
   if (ret != (struct elf_sh_link_hash_entry *) NULL)
     {
-      ret->dyn_relocs = NULL;
       ret->gotplt_refcount = 0;
       ret->funcdesc.refcount = 0;
       ret->abs_funcdesc_refcount = 0;
@@ -2256,7 +2236,7 @@ static struct bfd_link_hash_table *
 sh_elf_link_hash_table_create (bfd *abfd)
 {
   struct elf_sh_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_sh_link_hash_table);
+  size_t amt = sizeof (struct elf_sh_link_hash_table);
 
   ret = (struct elf_sh_link_hash_table *) bfd_zmalloc (amt);
   if (ret == (struct elf_sh_link_hash_table *) NULL)
@@ -2271,13 +2251,16 @@ sh_elf_link_hash_table_create (bfd *abfd
       return NULL;
     }
 
-  ret->vxworks_p = vxworks_object_p (abfd);
-  ret->fdpic_p = fdpic_object_p (abfd);
+  if (fdpic_object_p (abfd))
+    {
+      ret->root.dt_pltgot_required = true;
+      ret->fdpic_p = true;
+    }
 
   return &ret->root.root;
 }
 
-static bfd_boolean
+static bool
 sh_elf_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
 			    struct bfd_link_info *info, asection *p)
 {
@@ -2285,7 +2268,7 @@ sh_elf_omit_section_dynsym (bfd *output_
 
   /* Non-FDPIC binaries do not need dynamic symbols for sections.  */
   if (!htab->fdpic_p)
-    return TRUE;
+    return true;
 
   /* We need dynamic symbols for every section, since segments can
      relocate independently.  */
@@ -2296,29 +2279,29 @@ sh_elf_omit_section_dynsym (bfd *output_
       /* If sh_type is yet undecided, assume it could be
 	 SHT_PROGBITS/SHT_NOBITS.  */
     case SHT_NULL:
-      return FALSE;
+      return false;
 
       /* There shouldn't be section relative relocations
 	 against any other section.  */
     default:
-      return TRUE;
+      return true;
     }
 }
 
 /* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up
    shortcuts to them in our hash table.  */
 
-static bfd_boolean
+static bool
 create_got_section (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf_sh_link_hash_table *htab;
 
   if (! _bfd_elf_create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   htab = sh_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   htab->sfuncdesc = bfd_make_section_anyway_with_flags (dynobj, ".got.funcdesc",
 							(SEC_ALLOC | SEC_LOAD
@@ -2327,7 +2310,7 @@ create_got_section (bfd *dynobj, struct
 							 | SEC_LINKER_CREATED));
   if (htab->sfuncdesc == NULL
       || !bfd_set_section_alignment (htab->sfuncdesc, 2))
-    return FALSE;
+    return false;
 
   htab->srelfuncdesc = bfd_make_section_anyway_with_flags (dynobj,
 							   ".rela.got.funcdesc",
@@ -2338,7 +2321,7 @@ create_got_section (bfd *dynobj, struct
 							    | SEC_READONLY));
   if (htab->srelfuncdesc == NULL
       || !bfd_set_section_alignment (htab->srelfuncdesc, 2))
-    return FALSE;
+    return false;
 
   /* Also create .rofixup.  */
   htab->srofixup = bfd_make_section_anyway_with_flags (dynobj, ".rofixup",
@@ -2349,14 +2332,14 @@ create_got_section (bfd *dynobj, struct
 							| SEC_READONLY));
   if (htab->srofixup == NULL
       || !bfd_set_section_alignment (htab->srofixup, 2))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Create dynamic sections when linking against a dynamic object.  */
 
-static bfd_boolean
+static bool
 sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_sh_link_hash_table *htab;
@@ -2377,15 +2360,15 @@ sh_elf_create_dynamic_sections (bfd *abf
 
     default:
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   htab = sh_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (htab->root.dynamic_sections_created)
-    return TRUE;
+    return true;
 
   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
      .rel[a].bss sections.  */
@@ -2404,7 +2387,7 @@ sh_elf_create_dynamic_sections (bfd *abf
   htab->root.splt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
 
   if (bed->want_plt_sym)
     {
@@ -2415,9 +2398,9 @@ sh_elf_create_dynamic_sections (bfd *abf
 
       if (! (_bfd_generic_link_add_one_symbol
 	     (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s,
-	      (bfd_vma) 0, (const char *) NULL, FALSE,
+	      (bfd_vma) 0, (const char *) NULL, false,
 	      get_elf_backend_data (abfd)->collect, &bh)))
-	return FALSE;
+	return false;
 
       h = (struct elf_link_hash_entry *) bh;
       h->def_regular = 1;
@@ -2426,7 +2409,7 @@ sh_elf_create_dynamic_sections (bfd *abf
 
       if (bfd_link_pic (info)
 	  && ! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   s = bfd_make_section_anyway_with_flags (abfd,
@@ -2436,11 +2419,11 @@ sh_elf_create_dynamic_sections (bfd *abf
   htab->root.srelplt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
   if (htab->root.sgot == NULL
       && !create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   if (bed->want_dynbss)
     {
@@ -2452,9 +2435,9 @@ sh_elf_create_dynamic_sections (bfd *abf
 	 section into the .bss section of the final image.  */
       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
 					      SEC_ALLOC | SEC_LINKER_CREATED);
-      htab->sdynbss = s;
+      htab->root.sdynbss = s;
       if (s == NULL)
-	return FALSE;
+	return false;
 
       /* The .rel[a].bss section holds copy relocs.  This section is not
 	 normally needed.  We need to create it here, though, so that the
@@ -2473,46 +2456,29 @@ sh_elf_create_dynamic_sections (bfd *abf
 						  (bed->default_use_rela_p
 						   ? ".rela.bss" : ".rel.bss"),
 						  flags | SEC_READONLY);
-	  htab->srelbss = s;
+	  htab->root.srelbss = s;
 	  if (s == NULL
 	      || !bfd_set_section_alignment (s, ptralign))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  if (htab->vxworks_p)
+  if (htab->root.target_os == is_vxworks)
     {
       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = sh_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 sh_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 			      struct elf_link_hash_entry *h)
 {
@@ -2521,7 +2487,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd
 
   htab = sh_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Make sure we know what is going on here.  */
   BFD_ASSERT (htab->root.dynobj != NULL
@@ -2551,7 +2517,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) -1;
@@ -2567,7 +2533,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd
       h->root.u.def.value = def->root.u.def.value;
       if (info->nocopyreloc)
 	h->non_got_ref = def->non_got_ref;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2578,26 +2544,26 @@ sh_elf_adjust_dynamic_symbol (struct bfd
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (0 && info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (0 && !readonly_dynrelocs (h))
+  if (0 && !_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -2610,7 +2576,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd
      both the dynamic object and the regular object will refer to the
      same memory location for the variable.  */
 
-  s = htab->sdynbss;
+  s = htab->root.sdynbss;
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_SH_COPY reloc to tell the dynamic linker to
@@ -2621,7 +2587,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd
     {
       asection *srel;
 
-      srel = htab->srelbss;
+      srel = htab->root.srelbss;
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -2633,7 +2599,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
@@ -2642,12 +2608,12 @@ allocate_dynrelocs (struct elf_link_hash
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = sh_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   eh = (struct elf_sh_link_hash_entry *) h;
   if ((h->got.refcount > 0
@@ -2672,7 +2638,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (bfd_link_pic (info)
@@ -2718,7 +2684,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  /* We also need to make an entry in the .rel.plt section.  */
 	  htab->root.srelplt->size += sizeof (Elf32_External_Rela);
 
-	  if (htab->vxworks_p && !bfd_link_pic (info))
+	  if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
 	    {
 	      /* VxWorks executables have a second set of relocations
 		 for each PLT entry.  They go in a separate relocation
@@ -2750,7 +2716,7 @@ allocate_dynrelocs (struct elf_link_hash
   if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       enum got_type got_type = sh_elf_hash_entry (h)->got_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -2759,7 +2725,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->root.sgot;
@@ -2851,8 +2817,8 @@ allocate_dynrelocs (struct elf_link_hash
 	htab->srelfuncdesc->size += sizeof (Elf32_External_Rela);
     }
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -2866,7 +2832,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -2877,11 +2843,11 @@ allocate_dynrelocs (struct elf_link_hash
 	    }
 	}
 
-      if (htab->vxworks_p)
+      if (htab->root.target_os == is_vxworks)
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      if (strcmp (p->sec->output_section->name, ".tls_vars") == 0)
 		*pp = p->next;
@@ -2892,12 +2858,12 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -2905,7 +2871,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -2928,7 +2894,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -2937,13 +2903,13 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * sizeof (Elf32_External_Rela);
@@ -2953,41 +2919,14 @@ allocate_dynrelocs (struct elf_link_hash
 	htab->srofixup->size -= 4 * (p->count - p->pc_count);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* This function is called after all the input files have been read,
    and the input sections have been assigned to output sections.
    It's a convenient place to determine the PLT style.  */
 
-static bfd_boolean
+static bool
 sh_elf_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   sh_elf_hash_table (info)->plt_info = get_plt_info (output_bfd,
@@ -2996,25 +2935,25 @@ sh_elf_always_size_sections (bfd *output
   if (sh_elf_hash_table (info)->fdpic_p && !bfd_link_relocatable (info)
       && !bfd_elf_stack_segment_size (output_bfd, info,
 				      "__stacksize", DEFAULT_STACK_SIZE))
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 			      struct bfd_link_info *info)
 {
   struct elf_sh_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
   htab = sh_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -3063,7 +3002,7 @@ sh_elf_size_dynamic_sections (bfd *outpu
 		     linker script /DISCARD/, so we'll be discarding
 		     the relocs too.  */
 		}
-	      else if (htab->vxworks_p
+	      else if (htab->root.target_os == is_vxworks
 		       && strcmp (p->sec->output_section->name,
 				  ".tls_vars") == 0)
 		{
@@ -3122,7 +3061,7 @@ sh_elf_size_dynamic_sections (bfd *outpu
 			  local_funcdesc = (union gotref *) bfd_zalloc (ibfd,
 									size);
 			  if (local_funcdesc == NULL)
-			    return FALSE;
+			    return false;
 			  sh_elf_local_funcdesc (ibfd) = local_funcdesc;
 			  local_funcdesc += (local_got
 					     - elf_local_got_refcounts (ibfd));
@@ -3197,7 +3136,7 @@ sh_elf_size_dynamic_sections (bfd *outpu
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LINKER_CREATED) == 0)
@@ -3208,15 +3147,15 @@ sh_elf_size_dynamic_sections (bfd *outpu
 	  || s == htab->root.sgotplt
 	  || s == htab->sfuncdesc
 	  || s == htab->srofixup
-	  || s == htab->sdynbss)
+	  || s == htab->root.sdynbss)
 	{
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0 && s != htab->root.srelplt && s != htab->srelplt2)
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -3254,65 +3193,11 @@ sh_elf_size_dynamic_sections (bfd *outpu
 	 of garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (htab->root.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in sh_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info))
-	{
-	  if (! add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->root.splt->size != 0)
-	{
-	  if (! add_dynamic_entry (DT_PLTGOT, 0)
-	      || ! add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || ! add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || ! add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-      else if ((elf_elfheader (output_bfd)->e_flags & EF_SH_FDPIC))
-	{
-	  if (! add_dynamic_entry (DT_PLTGOT, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (! add_dynamic_entry (DT_RELA, 0)
-	      || ! add_dynamic_entry (DT_RELASZ, 0)
-	      || ! add_dynamic_entry (DT_RELAENT,
-				      sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->root, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (! add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
-      if (htab->vxworks_p
-	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
-	return FALSE;
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info,
+						  relocs);
 }
 
 /* Add a dynamic relocation to the SRELOC section.  */
@@ -3378,7 +3263,7 @@ sh_elf_osec_to_segment (bfd *output_bfd,
   return (p != NULL) ? p - elf_tdata (output_bfd)->phdr : -1;
 }
 
-static bfd_boolean
+static bool
 sh_elf_osec_readonly_p (bfd *output_bfd, asection *osec)
 {
   unsigned seg = sh_elf_osec_to_segment (output_bfd, osec);
@@ -3389,7 +3274,7 @@ sh_elf_osec_readonly_p (bfd *output_bfd,
 
 /* Generate the initial contents of a local function descriptor, along
    with any relocations or fixups required.  */
-static bfd_boolean
+static bool
 sh_elf_initialize_funcdesc (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    struct elf_link_hash_entry *h,
@@ -3457,7 +3342,7 @@ sh_elf_initialize_funcdesc (bfd *output_
   bfd_put_32 (output_bfd, addr, htab->sfuncdesc->contents + offset);
   bfd_put_32 (output_bfd, seg, htab->sfuncdesc->contents + offset + 4);
 
-  return TRUE;
+  return true;
 }
 
 /* Install a 20-bit movi20 field starting at ADDR, which occurs in OUTPUT_BFD.
@@ -3491,7 +3376,7 @@ install_movi20_field (bfd *output_bfd, u
 
 /* Relocate an SH ELF section.  */
 
-static bfd_boolean
+static int
 sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 			 bfd *input_bfd, asection *input_section,
 			 bfd_byte *contents, Elf_Internal_Rela *relocs,
@@ -3508,14 +3393,14 @@ sh_elf_relocate_section (bfd *output_bfd
   asection *splt = NULL;
   asection *sreloc = NULL;
   asection *srelgot = NULL;
-  bfd_boolean is_vxworks_tls;
+  bool is_vxworks_tls;
   unsigned isec_segment, got_segment, plt_segment, check_segment[2];
-  bfd_boolean fdpic_p = FALSE;
+  bool fdpic_p = false;
 
   if (!is_sh_elf (input_bfd))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   htab = sh_elf_hash_table (info);
@@ -3546,7 +3431,7 @@ sh_elf_relocate_section (bfd *output_bfd
 
   /* We have to handle relocations in vxworks .tls_vars sections
      specially, because the dynamic loader is 'weird'.  */
-  is_vxworks_tls = (htab && htab->vxworks_p && bfd_link_pic (info)
+  is_vxworks_tls = (htab && htab->root.target_os == is_vxworks && bfd_link_pic (info)
 		    && !strcmp (input_section->output_section->name,
 				".tls_vars"));
 
@@ -3563,11 +3448,10 @@ sh_elf_relocate_section (bfd *output_bfd
       bfd_vma relocation;
       bfd_vma addend = (bfd_vma) 0;
       bfd_reloc_status_type r;
-      int seen_stt_datalabel = 0;
       bfd_vma off;
       enum got_type got_type;
       const char *symname = NULL;
-      bfd_boolean resolved_to_zero;
+      bool resolved_to_zero;
 
       r_symndx = ELF32_R_SYM (rel->r_info);
 
@@ -3597,7 +3481,7 @@ sh_elf_relocate_section (bfd *output_bfd
 	      && r_type <= (int) R_SH_LAST_INVALID_RELOC_6))
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       howto = get_howto_table (output_bfd) + r_type;
@@ -3607,7 +3491,7 @@ sh_elf_relocate_section (bfd *output_bfd
       if (! howto->partial_inplace)
 	addend = rel->r_addend;
 
-      resolved_to_zero = FALSE;
+      resolved_to_zero = false;
       h = NULL;
       sym = NULL;
       sec = NULL;
@@ -3626,14 +3510,6 @@ sh_elf_relocate_section (bfd *output_bfd
 	  relocation = (sec->output_section->vma
 			+ sec->output_offset
 			+ sym->st_value);
-	  /* A local symbol never has STO_SH5_ISA32, so we don't need
-	     datalabel processing here.  Make sure this does not change
-	     without notice.  */
-	  if ((sym->st_other & STO_SH5_ISA32) != 0)
-	    (*info->callbacks->reloc_dangerous)
-	      (info,
-	       _("unexpected STO_SH5_ISA32 on local symbol is not handled"),
-	       input_bfd, input_section, rel->r_offset);
 
 	  if (sec != NULL && discarded_section (sec))
 	    /* Handled below.  */
@@ -3692,7 +3568,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		       "%s relocation against SEC_MERGE section"),
 		     input_bfd, input_section,
 		     (uint64_t) rel->r_offset, howto->name);
-		  return FALSE;
+		  return false;
 		}
 
 	      addend = bfd_get_32 (input_bfd, contents + rel->r_offset);
@@ -3718,9 +3594,9 @@ sh_elf_relocate_section (bfd *output_bfd
 	  if (h->root.type == bfd_link_hash_defined
 	      || h->root.type == bfd_link_hash_defweak)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
-	      dyn = htab ? htab->root.dynamic_sections_created : FALSE;
+	      dyn = htab ? htab->root.dynamic_sections_created : false;
 	      sec = h->root.u.def.section;
 	      /* In these cases, we don't need the relocation value.
 		 We check specially because in some obscure cases
@@ -3783,14 +3659,9 @@ sh_elf_relocate_section (bfd *output_bfd
 			  || sh_elf_hash_entry (h)->got_type == GOT_TLS_GD)))
 		;
 	      else if (sec->output_section != NULL)
-		relocation = ((h->root.u.def.value
+		relocation = (h->root.u.def.value
 			      + sec->output_section->vma
-			      + sec->output_offset)
-			      /* A STO_SH5_ISA32 causes a "bitor 1" to the
-				 symbol value, unless we've seen
-				 STT_DATALABEL on the way to it.  */
-			      | ((h->other & STO_SH5_ISA32) != 0
-				 && ! seen_stt_datalabel));
+			      + sec->output_offset);
 	      else if (!bfd_link_relocatable (info)
 		       && (_bfd_elf_section_offset (output_bfd, info,
 						    input_section,
@@ -3806,7 +3677,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		     (uint64_t) rel->r_offset,
 		     howto->name,
 		     h->root.root.string);
-		  return FALSE;
+		  return false;
 		}
 	    }
 	  else if (h->root.type == bfd_link_hash_undefweak)
@@ -3815,12 +3686,13 @@ sh_elf_relocate_section (bfd *output_bfd
 		   && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
 	    ;
 	  else if (!bfd_link_relocatable (info))
-	    (*info->callbacks->undefined_symbol)
-	      (info, h->root.root.string, input_bfd,
-	       input_section, rel->r_offset,
-	       (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
-		|| ELF_ST_VISIBILITY (h->other)));
-	}
+            info->callbacks->undefined_symbol
+	      (info, h->root.root.string, input_bfd, input_section,
+	       rel->r_offset,
+	       (info->unresolved_syms_in_objects == RM_DIAGNOSE
+		&& !info->warn_unresolved_syms)
+	       || ELF_ST_VISIBILITY (h->other));
+        }
 
       if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
@@ -3884,7 +3756,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		     input_section->owner,
 		     (uint64_t) rel->r_offset);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	      relocation -= 4;
 	      goto final_link_relocate;
@@ -3894,7 +3766,7 @@ sh_elf_relocate_section (bfd *output_bfd
 
 	default:
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 
 	case R_SH_DIR16:
 	case R_SH_DIR8:
@@ -3914,7 +3786,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		 input_section->owner, (uint64_t) rel->r_offset,
 		 howto->name, (uint64_t) relocation);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  goto final_link_relocate;
 
@@ -3931,7 +3803,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		 (uint64_t) rel->r_offset, howto->name,
 		 (uint64_t) relocation);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  goto final_link_relocate;
 
@@ -3947,7 +3819,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		 (uint64_t) rel->r_offset,
 		 (int64_t) relocation);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  goto final_link_relocate;
 
@@ -3963,7 +3835,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		 (uint64_t) rel->r_offset,
 		 (int64_t) relocation);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  goto final_link_relocate;
 
@@ -3982,7 +3854,7 @@ sh_elf_relocate_section (bfd *output_bfd
 	    {
 	      Elf_Internal_Rela outrel;
 	      bfd_byte *loc;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
@@ -3991,21 +3863,21 @@ sh_elf_relocate_section (bfd *output_bfd
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_get_dynamic_reloc_section
-		    (input_bfd, input_section, /*rela?*/ TRUE);
+		    (input_bfd, input_section, /*rela?*/ true);
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -4093,7 +3965,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		       input_section,
 		       (uint64_t) rel->r_offset,
 		       symname);
-		    return FALSE;
+		    return false;
 		  }
 
 	      offset = _bfd_elf_section_offset (output_bfd, info,
@@ -4154,7 +4026,7 @@ sh_elf_relocate_section (bfd *output_bfd
 
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      BFD_ASSERT (off != (bfd_vma) -1);
@@ -4449,7 +4321,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		      {
 			if (!sh_elf_initialize_funcdesc (output_bfd, info, h,
 							 offset, NULL, 0))
-			  return FALSE;
+			  return false;
 			sh_elf_hash_entry (h)->funcdesc.offset |= 1;
 		      }
 		  }
@@ -4465,7 +4337,7 @@ sh_elf_relocate_section (bfd *output_bfd
 			if (!sh_elf_initialize_funcdesc (output_bfd, info, NULL,
 							 offset, sec,
 							 sym->st_value))
-			  return FALSE;
+			  return false;
 			local_funcdesc[r_symndx].offset |= 1;
 		      }
 		  }
@@ -4488,7 +4360,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		       input_section,
 		       (uint64_t) rel->r_offset,
 		       symname);
-		    return FALSE;
+		    return false;
 		  }
 
 		offset = _bfd_elf_section_offset (output_bfd, info,
@@ -4512,7 +4384,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		      (info,
 		       _("cannot emit dynamic relocations in read-only section"),
 		       symname, input_bfd, reloc_section, reloc_offset);
-		    return FALSE;
+		    return false;
 		  }
 
 		offset = _bfd_elf_section_offset (output_bfd, info,
@@ -4589,7 +4461,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		   "%s relocation against external symbol \"%s\""),
 		 input_bfd, input_section, (uint64_t) rel->r_offset,
 		 howto->name, h->root.root.string);
-	      return FALSE;
+	      return false;
 	    }
 	  else
 	    {
@@ -4605,7 +4477,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		    {
 		      if (!sh_elf_initialize_funcdesc (output_bfd, info, h,
 						       offset, NULL, 0))
-			return FALSE;
+			return false;
 		      sh_elf_hash_entry (h)->funcdesc.offset |= 1;
 		    }
 		}
@@ -4621,7 +4493,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		      if (!sh_elf_initialize_funcdesc (output_bfd, info, NULL,
 						       offset, sec,
 						       sym->st_value))
-			return FALSE;
+			return false;
 		      local_funcdesc[r_symndx].offset |= 1;
 		    }
 		}
@@ -4706,7 +4578,7 @@ sh_elf_relocate_section (bfd *output_bfd
 			/* xgettext:c-format */
 			(_("%pB(%pA): offset in relocation for GD->LE translation is too small: %#" PRIx64),
 			 input_bfd, input_section, (uint64_t) offset);
-		      return FALSE;
+		      return false;
 		    }
 
 		  /* Size of GD instructions is 16 or 18.  */
@@ -4795,7 +4667,7 @@ sh_elf_relocate_section (bfd *output_bfd
 			/* xgettext:c-format */
 			(_("%pB(%pA): offset in relocation for IE->LE translation is too small: %#" PRIx64),
 			 input_bfd, input_section, (uint64_t) offset);
-		      return FALSE;
+		      return false;
 		    }
 
 		  /* Size of IE instructions is 10 or 12.  */
@@ -4944,7 +4816,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		    /* xgettext:c-format */
 		    (_("%pB(%pA): offset in relocation for GD->IE translation is too small: %#" PRIx64),
 		     input_bfd, input_section, (uint64_t) offset);
-		  return FALSE;
+		  return false;
 		}
 
 	      /* Size of GD instructions is 16 or 18.  */
@@ -5012,7 +4884,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		    /* xgettext:c-format */
 		    (_("%pB(%pA): offset in relocation for LD->LE translation is too small: %#" PRIx64),
 		     input_bfd, input_section, (uint64_t) offset);
-		  return FALSE;
+		  return false;
 		}
 
 	      /* Size of LD instructions is 16 or 18.  */
@@ -5101,9 +4973,9 @@ sh_elf_relocate_section (bfd *output_bfd
 	    if (sreloc == NULL)
 	      {
 		sreloc = _bfd_elf_get_dynamic_reloc_section
-		  (input_bfd, input_section, /*rela?*/ TRUE);
+		  (input_bfd, input_section, /*rela?*/ true);
 		if (sreloc == NULL)
-		  return FALSE;
+		  return false;
 	      }
 
 	    if (h == NULL || h->dynindx == -1)
@@ -5138,14 +5010,14 @@ sh_elf_relocate_section (bfd *output_bfd
 		{
 		  info->callbacks->einfo
 		    /* xgettext:c-format */
-		    (_("%X%C: relocation to \"%s\" references a different segment\n"),
+		    (_("%X%H: relocation to \"%s\" references a different segment\n"),
 		     input_bfd, input_section, rel->r_offset, symname);
-		  return FALSE;
+		  return false;
 		}
 	      else
 		info->callbacks->einfo
 		  /* xgettext:c-format */
-		  (_("%C: warning: relocation to \"%s\" references a different segment\n"),
+		  (_("%H: warning: relocation to \"%s\" references a different segment\n"),
 		   input_bfd, input_section, rel->r_offset, symname);
 	    }
 
@@ -5170,7 +5042,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		    name = (bfd_elf_string_from_elf_section
 			    (input_bfd, symtab_hdr->sh_link, sym->st_name));
 		    if (name == NULL)
-		      return FALSE;
+		      return false;
 		    if (*name == '\0')
 		      name = bfd_section_name (sec);
 		  }
@@ -5183,7 +5055,7 @@ sh_elf_relocate_section (bfd *output_bfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This is a version of bfd_generic_get_relocated_section_contents
@@ -5194,7 +5066,7 @@ sh_elf_get_relocated_section_contents (b
 				       struct bfd_link_info *link_info,
 				       struct bfd_link_order *link_order,
 				       bfd_byte *data,
-				       bfd_boolean relocatable,
+				       bool relocatable,
 				       asymbol **symbols)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -5215,6 +5087,13 @@ sh_elf_get_relocated_section_contents (b
 
   symtab_hdr = &elf_symtab_hdr (input_bfd);
 
+  bfd_byte *orig_data = data;
+  if (data == NULL)
+    {
+      data = bfd_malloc (input_section->size);
+      if (data == NULL)
+	return NULL;
+    }
   memcpy (data, elf_section_data (input_section)->this_hdr.contents,
 	  (size_t) input_section->size);
 
@@ -5227,7 +5106,7 @@ sh_elf_get_relocated_section_contents (b
 
       internal_relocs = (_bfd_elf_link_read_relocs
 			 (input_bfd, input_section, NULL,
-			  (Elf_Internal_Rela *) NULL, FALSE));
+			  (Elf_Internal_Rela *) NULL, false));
       if (internal_relocs == NULL)
 	goto error_return;
 
@@ -5270,10 +5149,8 @@ sh_elf_get_relocated_section_contents (b
 				     isymbuf, sections))
 	goto error_return;
 
-      if (sections != NULL)
-	free (sections);
-      if (isymbuf != NULL
-	  && symtab_hdr->contents != (unsigned char *) isymbuf)
+      free (sections);
+      if (symtab_hdr->contents != (unsigned char *) isymbuf)
 	free (isymbuf);
       if (elf_section_data (input_section)->relocs != internal_relocs)
 	free (internal_relocs);
@@ -5282,14 +5159,13 @@ sh_elf_get_relocated_section_contents (b
   return data;
 
  error_return:
-  if (sections != NULL)
-    free (sections);
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  free (sections);
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (input_section)->relocs != internal_relocs)
+  if (elf_section_data (input_section)->relocs != internal_relocs)
     free (internal_relocs);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
@@ -5351,36 +5227,6 @@ sh_elf_copy_indirect_symbol (struct bfd_
   edir = (struct elf_sh_link_hash_entry *) dir;
   eind = (struct elf_sh_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
   edir->gotplt_refcount = eind->gotplt_refcount;
   eind->gotplt_refcount = 0;
   edir->funcdesc.refcount += eind->funcdesc.refcount;
@@ -5436,7 +5282,7 @@ sh_elf_optimized_tls_reloc (struct bfd_l
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
 		     const Elf_Internal_Rela *relocs)
 {
@@ -5452,16 +5298,7 @@ sh_elf_check_relocs (bfd *abfd, struct b
   sreloc = NULL;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is_sh_elf (abfd));
 
@@ -5470,7 +5307,7 @@ sh_elf_check_relocs (bfd *abfd, struct b
 
   htab = sh_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   rel_end = relocs + sec->reloc_count;
   for (rel = relocs; rel < rel_end; rel++)
@@ -5552,7 +5389,7 @@ sh_elf_check_relocs (bfd *abfd, struct b
 	      if (htab->root.dynobj == NULL)
 		htab->root.dynobj = abfd;
 	      if (!create_got_section (htab->root.dynobj, info))
-		return FALSE;
+		return false;
 	      break;
 
 	    default:
@@ -5566,14 +5403,14 @@ sh_elf_check_relocs (bfd *abfd, struct b
 	     Reconstruct it for later use during GC.  */
 	case R_SH_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_SH_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_SH_TLS_IE_32:
@@ -5626,7 +5463,7 @@ sh_elf_check_relocs (bfd *abfd, struct b
 		  local_got_refcounts = ((bfd_signed_vma *)
 					 bfd_zalloc (abfd, size));
 		  if (local_got_refcounts == NULL)
-		    return FALSE;
+		    return false;
 		  elf_local_got_refcounts (abfd) = local_got_refcounts;
 		  sh_elf_local_got_type (abfd)
 		    = (char *) (local_got_refcounts + symtab_hdr->sh_info);
@@ -5661,7 +5498,7 @@ sh_elf_check_relocs (bfd *abfd, struct b
 		      /* xgettext:c-format */
 		      (_("%pB: `%s' accessed both as normal and thread local symbol"),
 		       abfd, h->root.root.string);
-		  return FALSE;
+		  return false;
 		}
 	    }
 
@@ -5687,7 +5524,7 @@ sh_elf_check_relocs (bfd *abfd, struct b
 	      _bfd_error_handler
 		(_("%pB: Function descriptor relocation with non-zero addend"),
 		 abfd);
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (h == NULL)
@@ -5703,7 +5540,7 @@ sh_elf_check_relocs (bfd *abfd, struct b
 		  size = symtab_hdr->sh_info * sizeof (union gotref);
 		  local_funcdesc = (union gotref *) bfd_zalloc (abfd, size);
 		  if (local_funcdesc == NULL)
-		    return FALSE;
+		    return false;
 		  sh_elf_local_funcdesc (abfd) = local_funcdesc;
 		}
 	      local_funcdesc[r_symndx].refcount += 1;
@@ -5830,16 +5667,16 @@ sh_elf_check_relocs (bfd *abfd, struct b
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->root.dynobj, 2, abfd, /*rela?*/ TRUE);
+		    (sec, htab->root.dynobj, 2, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
-		head = &((struct elf_sh_link_hash_entry *) h)->dyn_relocs;
+		head = &h->dyn_relocs;
 	      else
 		{
 		  /* Track dynamic relocs needed for local syms too.  */
@@ -5847,10 +5684,10 @@ sh_elf_check_relocs (bfd *abfd, struct b
 		  void *vpp;
 		  Elf_Internal_Sym *isym;
 
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
@@ -5863,10 +5700,10 @@ sh_elf_check_relocs (bfd *abfd, struct b
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof (*p);
+		  size_t amt = sizeof (*p);
 		  p = bfd_alloc (htab->root.dynobj, amt);
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -5894,7 +5731,7 @@ sh_elf_check_relocs (bfd *abfd, struct b
 	      _bfd_error_handler
 		(_("%pB: TLS local exec code cannot be linked into shared objects"),
 		 abfd);
-	      return FALSE;
+	      return false;
 	    }
 
 	  break;
@@ -5908,26 +5745,26 @@ sh_elf_check_relocs (bfd *abfd, struct b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 #ifndef sh_elf_set_mach_from_flags
 static unsigned int sh_ef_bfd_table[] = { EF_SH_BFD_TABLE };
 
-static bfd_boolean
+static bool
 sh_elf_set_mach_from_flags (bfd *abfd)
 {
   flagword flags = elf_elfheader (abfd)->e_flags & EF_SH_MACH_MASK;
 
   if (flags >= ARRAY_SIZE (sh_ef_bfd_table))
-    return FALSE;
+    return false;
 
   if (sh_ef_bfd_table[flags] == 0)
-    return FALSE;
+    return false;
 
   bfd_default_set_arch_mach (abfd, bfd_arch_sh, sh_ef_bfd_table[flags]);
 
-  return TRUE;
+  return true;
 }
 
 
@@ -5955,14 +5792,14 @@ sh_elf_get_flags_from_mach (unsigned lon
 #ifndef sh_elf_copy_private_data
 /* Copy backend specific data from one object module to another */
 
-static bfd_boolean
+static bool
 sh_elf_copy_private_data (bfd * ibfd, bfd * obfd)
 {
   if (! is_sh_elf (ibfd) || ! is_sh_elf (obfd))
-    return TRUE;
+    return true;
 
   if (! _bfd_elf_copy_private_bfd_data (ibfd, obfd))
-    return FALSE;
+    return false;
 
   return sh_elf_set_mach_from_flags (obfd);
 }
@@ -5989,14 +5826,14 @@ sh_find_elf_flags (unsigned int arch_set
    DSP while the other uses FPU - or there is no known architecture
    that fits the requirements then an error is emitted.  */
 
-static bfd_boolean
+static bool
 sh_merge_bfd_arch (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   unsigned int old_arch, new_arch, merged_arch;
 
   if (! _bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   old_arch = sh_get_arch_up_from_bfd_mach (bfd_get_mach (obfd));
   new_arch = sh_get_arch_up_from_bfd_mach (bfd_get_mach (ibfd));
@@ -6013,7 +5850,7 @@ sh_merge_bfd_arch (bfd *ibfd, struct bfd
 	 SH_ARCH_SET_HAS_DSP (new_arch) ? "dsp" : "floating point",
 	 SH_ARCH_SET_HAS_DSP (new_arch) ? "floating point" : "dsp");
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   else if (!SH_VALID_ARCH_SET (merged_arch))
     {
@@ -6024,30 +5861,34 @@ sh_merge_bfd_arch (bfd *ibfd, struct bfd
 	 bfd_printable_name (obfd),
 	 bfd_printable_name (ibfd));
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   bfd_default_set_arch_mach (obfd, bfd_arch_sh,
 			     sh_get_bfd_mach_from_arch_set (merged_arch));
 
-  return TRUE;
+  return true;
 }
 
 /* This routine initialises the elf flags when required and
    calls sh_merge_bfd_arch() to check dsp/fpu compatibility.  */
 
-static bfd_boolean
+static bool
 sh_elf_merge_private_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
 
+  /* FIXME: What should be checked when linking shared libraries?  */
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
+
   if (! is_sh_elf (ibfd) || ! is_sh_elf (obfd))
-    return TRUE;
+    return true;
 
   if (! elf_flags_init (obfd))
     {
       /* This happens when ld starts out with a 'blank' output file.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
       sh_elf_set_mach_from_flags (obfd);
       if (elf_elfheader (obfd)->e_flags & EF_SH_FDPIC)
@@ -6060,7 +5901,7 @@ sh_elf_merge_private_data (bfd *ibfd, st
 			    "with instructions used in previous modules"),
 			  ibfd);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   elf_elfheader (obfd)->e_flags &= ~EF_SH_MACH_MASK;
@@ -6072,10 +5913,10 @@ sh_elf_merge_private_data (bfd *ibfd, st
       _bfd_error_handler (_("%pB: attempt to mix FDPIC and non-FDPIC objects"),
 			  ibfd);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 #endif /* not sh_elf_merge_private_data */
 
@@ -6083,11 +5924,11 @@ sh_elf_merge_private_data (bfd *ibfd, st
    as the specific tdata.  We set also the machine architecture from flags
    here.  */
 
-static bfd_boolean
+static bool
 sh_elf_object_p (bfd *abfd)
 {
   if (! sh_elf_set_mach_from_flags (abfd))
-    return FALSE;
+    return false;
 
   return (((elf_elfheader (abfd)->e_flags & EF_SH_FDPIC) != 0)
 	  == fdpic_object_p (abfd));
@@ -6096,7 +5937,7 @@ sh_elf_object_p (bfd *abfd)
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
 			      struct elf_link_hash_entry *h,
 			      Elf_Internal_Sym *sym)
@@ -6105,7 +5946,7 @@ sh_elf_finish_dynamic_symbol (bfd *outpu
 
   htab = sh_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (h->plt.offset != (bfd_vma) -1)
     {
@@ -6173,7 +6014,7 @@ sh_elf_finish_dynamic_symbol (bfd *outpu
 	      BFD_ASSERT (r == bfd_reloc_ok);
 	    }
 	  else
-	    install_plt_field (output_bfd, FALSE, got_offset,
+	    install_plt_field (output_bfd, false, got_offset,
 			       (splt->contents
 				+ h->plt.offset
 				+ plt_info->symbol_fields.got_entry));
@@ -6182,14 +6023,14 @@ sh_elf_finish_dynamic_symbol (bfd *outpu
 	{
 	  BFD_ASSERT (!plt_info->symbol_fields.got20);
 
-	  install_plt_field (output_bfd, FALSE,
+	  install_plt_field (output_bfd, false,
 			     (sgotplt->output_section->vma
 			      + sgotplt->output_offset
 			      + got_offset),
 			     (splt->contents
 			      + h->plt.offset
 			      + plt_info->symbol_fields.got_entry));
-	  if (htab->vxworks_p)
+	  if (htab->root.target_os == is_vxworks)
 	    {
 	      unsigned int reachable_plts, plts_per_4k;
 	      int distance;
@@ -6221,7 +6062,7 @@ sh_elf_finish_dynamic_symbol (bfd *outpu
 			   + plt_info->symbol_fields.plt));
 	    }
 	  else
-	    install_plt_field (output_bfd, TRUE,
+	    install_plt_field (output_bfd, true,
 			       splt->output_section->vma + splt->output_offset,
 			       (splt->contents
 				+ h->plt.offset
@@ -6237,7 +6078,7 @@ sh_elf_finish_dynamic_symbol (bfd *outpu
 	got_offset = plt_index * 8;
 
       if (plt_info->symbol_fields.reloc_offset != MINUS_ONE)
-	install_plt_field (output_bfd, FALSE,
+	install_plt_field (output_bfd, false,
 			   plt_index * sizeof (Elf32_External_Rela),
 			   (splt->contents
 			    + h->plt.offset
@@ -6270,7 +6111,7 @@ sh_elf_finish_dynamic_symbol (bfd *outpu
       loc = srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
 
-      if (htab->vxworks_p && !bfd_link_pic (info))
+      if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
 	{
 	  /* Create the .rela.plt.unloaded relocations for this PLT entry.
 	     Begin by pointing LOC to the first such relocation.  */
@@ -6333,6 +6174,8 @@ sh_elf_finish_dynamic_symbol (bfd *outpu
 	 The entry in the global offset table will already have been
 	 initialized in the relocate_section function.  */
       if (bfd_link_pic (info)
+	  && (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
 	  && SYMBOL_REFERENCES_LOCAL (info, h))
 	{
 	  if (htab->fdpic_p)
@@ -6393,15 +6236,15 @@ sh_elf_finish_dynamic_symbol (bfd *outpu
      _GLOBAL_OFFSET_TABLE_ is not absolute: it is relative to the
      ".got" section.  */
   if (h == htab->root.hdynamic
-      || (!htab->vxworks_p && h == htab->root.hgot))
+      || (htab->root.target_os != is_vxworks && h == htab->root.hgot))
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   struct elf_sh_link_hash_table *htab;
@@ -6410,7 +6253,7 @@ sh_elf_finish_dynamic_sections (bfd *out
 
   htab = sh_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   sgotplt = htab->root.sgotplt;
   sdyn = bfd_get_linker_section (htab->root.dynobj, ".dynamic");
@@ -6434,7 +6277,7 @@ sh_elf_finish_dynamic_sections (bfd *out
 	  switch (dyn.d_tag)
 	    {
 	    default:
-	      if (htab->vxworks_p
+	      if (htab->root.target_os == is_vxworks
 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 		bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
@@ -6448,15 +6291,13 @@ sh_elf_finish_dynamic_sections (bfd *out
 	      break;
 
 	    case DT_JMPREL:
-	      s = htab->root.srelplt->output_section;
-	      BFD_ASSERT (s != NULL);
-	      dyn.d_un.d_ptr = s->vma;
+	      s = htab->root.srelplt;
+	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 
 	    case DT_PLTRELSZ:
-	      s = htab->root.srelplt->output_section;
-	      BFD_ASSERT (s != NULL);
+	      s = htab->root.srelplt;
 	      dyn.d_un.d_val = s->size;
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
@@ -6474,14 +6315,14 @@ sh_elf_finish_dynamic_sections (bfd *out
 		  htab->plt_info->plt0_entry_size);
 	  for (i = 0; i < ARRAY_SIZE (htab->plt_info->plt0_got_fields); i++)
 	    if (htab->plt_info->plt0_got_fields[i] != MINUS_ONE)
-	      install_plt_field (output_bfd, FALSE,
+	      install_plt_field (output_bfd, false,
 				 (sgotplt->output_section->vma
 				  + sgotplt->output_offset
 				  + (i * 4)),
 				 (splt->contents
 				  + htab->plt_info->plt0_got_fields[i]));
 
-	  if (htab->vxworks_p)
+	  if (htab->root.target_os == is_vxworks)
 	    {
 	      /* Finalize the .rela.plt.unloaded contents.  */
 	      Elf_Internal_Rela rel;
@@ -6564,7 +6405,7 @@ sh_elf_finish_dynamic_sections (bfd *out
     BFD_ASSERT (htab->root.srelgot->reloc_count * sizeof (Elf32_External_Rela)
 		== htab->root.srelgot->size);
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -6588,7 +6429,7 @@ sh_elf_reloc_type_class (const struct bf
 #if !defined SH_TARGET_ALREADY_DEFINED
 /* Support for Linux core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf32_shlin_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -6597,7 +6438,7 @@ elf32_shlin_grok_prstatus (bfd *abfd, El
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 168:		/* Linux/SH */
 	/* pr_cursig */
@@ -6618,13 +6459,13 @@ elf32_shlin_grok_prstatus (bfd *abfd, El
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf32_shlin_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 124:		/* Linux/SH elf_prpsinfo */
 	elf_tdata (abfd)->core->program
@@ -6645,7 +6486,7 @@ elf32_shlin_grok_psinfo (bfd *abfd, Elf_
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 #endif /* not SH_TARGET_ALREADY_DEFINED */
 
@@ -6666,7 +6507,7 @@ sh_elf_plt_sym_val (bfd_vma i, const ase
 /* Decide whether to attempt to turn absptr or lsda encodings in
    shared libraries into pcrel within the given input section.  */
 
-static bfd_boolean
+static bool
 sh_elf_use_relative_eh_frame (bfd *input_bfd ATTRIBUTE_UNUSED,
 			      struct bfd_link_info *info,
 			      asection *eh_frame_section ATTRIBUTE_UNUSED)
@@ -6675,9 +6516,9 @@ sh_elf_use_relative_eh_frame (bfd *input
 
   /* We can't use PC-relative encodings in FDPIC binaries, in general.  */
   if (htab->fdpic_p)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust the contents of an eh_frame_hdr section before they're output.  */
@@ -6786,7 +6627,7 @@ sh_elf_encode_eh_address (bfd *abfd,
 #define elf_backend_got_header_size	12
 #define elf_backend_dtrel_excludes_plt	1
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #if !defined SH_TARGET_ALREADY_DEFINED
 
@@ -6882,6 +6723,9 @@ sh_elf_encode_eh_address (bfd *abfd,
 #define	ELF_MAXPAGESIZE			0x1000
 #undef	ELF_COMMONPAGESIZE
 
+#undef	ELF_TARGET_OS
+#define	ELF_TARGET_OS			is_vxworks
+
 #include "elf32-target.h"
 
 #endif /* not SH_TARGET_ALREADY_DEFINED */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-sh-relocs.h ./bfd/elf32-sh-relocs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-sh-relocs.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-sh-relocs.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -20,25 +20,25 @@
 /* No relocation.  */
   HOWTO (R_SH_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit absolute relocation.  Setting partial_inplace to TRUE and
      src_mask to a non-zero value is similar to the COFF toolchain.  */
   HOWTO (R_SH_DIR32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 SH_ELF_RELOC,		/* special_function */
@@ -46,14 +46,14 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit PC relative relocation.  */
   HOWTO (R_SH_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
@@ -61,150 +61,150 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 8 bit PC relative branch divided by 2.  */
   HOWTO (R_SH_DIR8WPN,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_DIR8WPN",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 12 bit PC relative branch divided by 2.  */
   /* This cannot be partial_inplace because relaxation can't know the
      eventual value of a symbol.  */
   HOWTO (R_SH_IND12W,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 12,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_SH_IND12W",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 8 bit unsigned PC relative divided by 4.  */
   HOWTO (R_SH_DIR8WPL,		/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_DIR8WPL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 8 bit unsigned PC relative divided by 2.  */
   HOWTO (R_SH_DIR8WPZ,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_DIR8WPZ",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 8 bit GBR relative.  FIXME: This only makes sense if we have some
      special symbol for the GBR relative area, and that is not
      implemented.  */
   HOWTO (R_SH_DIR8BP,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_DIR8BP",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 8 bit GBR relative divided by 2.  FIXME: This only makes sense if
      we have some special symbol for the GBR relative area, and that
      is not implemented.  */
   HOWTO (R_SH_DIR8W,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_DIR8W",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 8 bit GBR relative divided by 4.  FIXME: This only makes sense if
      we have some special symbol for the GBR relative area, and that
      is not implemented.  */
   HOWTO (R_SH_DIR8L,		/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_DIR8L",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 8 bit PC relative divided by 2 - but specified in a very odd way.  */
   HOWTO (R_SH_LOOP_START,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_LOOP_START",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 8 bit PC relative divided by 2 - but specified in a very odd way.  */
   HOWTO (R_SH_LOOP_END,		/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_LOOP_END",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   EMPTY_HOWTO (12),
   EMPTY_HOWTO (13),
@@ -225,83 +225,83 @@
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_SH_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_SH_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_SH_GNU_VTENTRY,     /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_SH_GNU_VTENTRY",   /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit switch table entry.  This is generated for an expression
      such as ``.word L1 - L2''.  The offset holds the difference
      between the reloc address and L2.  */
   HOWTO (R_SH_SWITCH8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_SWITCH8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit switch table entry.  This is generated for an expression
      such as ``.word L1 - L2''.  The offset holds the difference
      between the reloc address and L2.  */
   HOWTO (R_SH_SWITCH16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_SWITCH16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 32 bit switch table entry.  This is generated for an expression
      such as ``.long L1 - L2''.  The offset holds the difference
      between the reloc address and L2.  */
   HOWTO (R_SH_SWITCH32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_SWITCH32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Indicates a .uses pseudo-op.  The compiler will generate .uses
      pseudo-ops when it finds a function call which can be relaxed.
@@ -309,17 +309,17 @@
      which loads the register used in the function call.  */
   HOWTO (R_SH_USES,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_USES",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* The assembler will generate this reloc for addresses referred to
      by the register loads associated with USES relocs.  The offset
@@ -327,253 +327,253 @@
      object file.  */
   HOWTO (R_SH_COUNT,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_COUNT",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Indicates an alignment statement.  The offset field is the power
      of 2 to which subsequent portions of the object file must be
      aligned.  */
   HOWTO (R_SH_ALIGN,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_ALIGN",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* The assembler will generate this reloc before a block of
      instructions.  A section should be processed as assuming it
      contains data, unless this reloc is seen.  */
   HOWTO (R_SH_CODE,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_CODE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* The assembler will generate this reloc after a block of
      instructions when it sees data that is not instructions.  */
   HOWTO (R_SH_DATA,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_DATA",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* The assembler generates this reloc for each label within a block
      of instructions.  This permits the linker to avoid swapping
      instructions which are the targets of branches.  */
   HOWTO (R_SH_LABEL,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
 	 "R_SH_LABEL",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* The next 12 are only supported via linking in SHC-generated objects.  */
   HOWTO (R_SH_DIR16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DIR8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DIR8UL,		/* type */
 	 2,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR8UL",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DIR8UW,		/* type */
 	 1,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR8UW",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DIR8U,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR8U",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DIR8SW,		/* type */
 	 1,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR8SW",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DIR8S,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR8S",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DIR4UL,		/* type */
 	 2,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 4,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR4UL",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0f,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DIR4UW,		/* type */
 	 1,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 4,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR4UW",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0f,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_DIR4U,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 4,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR4U",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0f,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_PSHA,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_PSHA",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0f,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_PSHL,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 4,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_PSHL",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0f,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (45),
   EMPTY_HOWTO (46),
@@ -587,17 +587,17 @@
 
   HOWTO (R_SH_DIR16S,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_DIR16S",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (54),
   EMPTY_HOWTO (55),
@@ -692,9 +692,9 @@
 
   HOWTO (R_SH_TLS_GD_32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* */
@@ -702,13 +702,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_TLS_LD_32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* */
@@ -716,13 +716,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_TLS_LDO_32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* */
@@ -730,13 +730,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_TLS_IE_32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* */
@@ -744,13 +744,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_TLS_LE_32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* */
@@ -758,13 +758,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_TLS_DTPMOD32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* */
@@ -772,13 +772,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_TLS_DTPOFF32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* */
@@ -786,13 +786,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_TLS_TPOFF32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* */
@@ -800,7 +800,7 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (152),
   EMPTY_HOWTO (153),
@@ -813,9 +813,9 @@
 
   HOWTO (R_SH_GOT32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
@@ -823,13 +823,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_PLT32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
@@ -837,13 +837,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_SH_COPY,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
@@ -851,13 +851,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_GLOB_DAT,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
@@ -865,13 +865,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_JMP_SLOT,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
@@ -879,13 +879,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_RELATIVE,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
@@ -893,13 +893,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_GOTOFF,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
@@ -907,13 +907,13 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_SH_GOTPC,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
@@ -921,22 +921,22 @@
 	 SH_PARTIAL32,		/* partial_inplace */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_SH_GOTPLT32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_SH_GOTPLT32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 /* ??? Why not 0?  */
 	 SH_SRC_MASK32,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (169),
   EMPTY_HOWTO (170),
@@ -974,123 +974,123 @@
   /* FDPIC-relative offset to a GOT entry, for movi20.  */
   HOWTO (R_SH_GOT20,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_GOT20",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00f0ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* FDPIC-relative offset to a data object, for movi20.  */
   HOWTO (R_SH_GOTOFF20,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_GOTOFF20",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00f0ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* FDPIC-relative offset to a GOT entry for a function descriptor.  */
   HOWTO (R_SH_GOTFUNCDESC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_GOTFUNCDESC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* FDPIC-relative offset to a GOT entry for a function descriptor,
      for movi20.  */
   HOWTO (R_SH_GOTFUNCDESC20,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_GOTFUNCDESC20",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00f0ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* FDPIC-relative offset to a function descriptor.  */
   HOWTO (R_SH_GOTOFFFUNCDESC,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_GOTOFFFUNCDESC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* FDPIC-relative offset to a function descriptor, for movi20.  */
   HOWTO (R_SH_GOTOFFFUNCDESC20,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_GOTOFFFUNCDESC20", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00f0ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Address of an official function descriptor.  */
   HOWTO (R_SH_FUNCDESC,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_FUNCDESC",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Function descriptor to be filled in by the dynamic linker.  */
   HOWTO (R_SH_FUNCDESC_VALUE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_SH_FUNCDESC_VALUE", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 #undef SH_PARTIAL32
 #undef SH_SRC_MASK32
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-sparc.c ./bfd/elf32-sparc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-sparc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-sparc.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* SPARC-specific support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -30,13 +30,13 @@
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf32_sparc_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 260:			/* Solaris prpsinfo_t.  */
       elf_tdata (abfd)->core->program
@@ -53,7 +53,7 @@ elf32_sparc_grok_psinfo (bfd *abfd, Elf_
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Functions for dealing with the e_flags field.
@@ -66,25 +66,25 @@ elf32_sparc_grok_psinfo (bfd *abfd, Elf_
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf32_sparc_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
-  bfd_boolean error;
+  bool error;
   unsigned long ibfd_mach;
   /* FIXME: This should not be static.  */
   static unsigned long previous_ibfd_e_flags = (unsigned long) -1;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
-  error = FALSE;
+  error = false;
 
   ibfd_mach = bfd_get_mach (ibfd);
   if (bfd_mach_sparc_64bit_p (ibfd_mach))
     {
-      error = TRUE;
+      error = true;
       _bfd_error_handler
 	(_("%pB: compiled for a 64 bit system and target is 32 bit"), ibfd);
     }
@@ -100,14 +100,14 @@ elf32_sparc_merge_private_bfd_data (bfd
     {
       _bfd_error_handler
 	(_("%pB: linking little endian files with big endian files"), ibfd);
-      error = TRUE;
+      error = true;
     }
   previous_ibfd_e_flags = elf_elfheader (ibfd)->e_flags & EF_SPARC_LEDATA;
 
   if (error)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   return _bfd_sparc_elf_merge_private_bfd_data (ibfd, info);
@@ -121,42 +121,46 @@ sparc_final_write_processing (bfd *abfd)
 {
   switch (bfd_get_mach (abfd))
     {
-    case bfd_mach_sparc :
-    case bfd_mach_sparc_sparclet :
-    case bfd_mach_sparc_sparclite :
+    case bfd_mach_sparc:
+    case bfd_mach_sparc_sparclet:
+    case bfd_mach_sparc_sparclite:
       break; /* nothing to do */
-    case bfd_mach_sparc_v8plus :
+    case bfd_mach_sparc_v8plus:
       elf_elfheader (abfd)->e_machine = EM_SPARC32PLUS;
       elf_elfheader (abfd)->e_flags &=~ EF_SPARC_32PLUS_MASK;
       elf_elfheader (abfd)->e_flags |= EF_SPARC_32PLUS;
       break;
-    case bfd_mach_sparc_v8plusa :
+    case bfd_mach_sparc_v8plusa:
       elf_elfheader (abfd)->e_machine = EM_SPARC32PLUS;
       elf_elfheader (abfd)->e_flags &=~ EF_SPARC_32PLUS_MASK;
       elf_elfheader (abfd)->e_flags |= EF_SPARC_32PLUS | EF_SPARC_SUN_US1;
       break;
-    case bfd_mach_sparc_v8plusb :
-    case bfd_mach_sparc_v8plusc :
-    case bfd_mach_sparc_v8plusd :
-    case bfd_mach_sparc_v8pluse :
-    case bfd_mach_sparc_v8plusv :
-    case bfd_mach_sparc_v8plusm :
-    case bfd_mach_sparc_v8plusm8 :
+    case bfd_mach_sparc_v8plusb:
+    case bfd_mach_sparc_v8plusc:
+    case bfd_mach_sparc_v8plusd:
+    case bfd_mach_sparc_v8pluse:
+    case bfd_mach_sparc_v8plusv:
+    case bfd_mach_sparc_v8plusm:
+    case bfd_mach_sparc_v8plusm8:
       elf_elfheader (abfd)->e_machine = EM_SPARC32PLUS;
       elf_elfheader (abfd)->e_flags &=~ EF_SPARC_32PLUS_MASK;
       elf_elfheader (abfd)->e_flags |= EF_SPARC_32PLUS | EF_SPARC_SUN_US1
 				       | EF_SPARC_SUN_US3;
       break;
-    case bfd_mach_sparc_sparclite_le :
+    case bfd_mach_sparc_sparclite_le:
       elf_elfheader (abfd)->e_flags |= EF_SPARC_LEDATA;
       break;
-    default :
-      abort ();
+    case 0: /* A non-sparc architecture - ignore.  */
+      break;
+    default:
+      _bfd_error_handler
+	(_("%pB: unhandled sparc machine value '%lu' detected during write processing"),
+	 abfd, (long) bfd_get_mach (abfd));
       break;
     }
 }
 
-static bfd_boolean
+static bool
 elf32_sparc_final_write_processing (bfd *abfd)
 {
   sparc_final_write_processing (abfd);
@@ -267,7 +271,7 @@ elf32_sparc_reloc_type_class (const stru
 #define elf_backend_want_dynrelro 1
 #define elf_backend_rela_normal 1
 
-#define elf_backend_linux_prpsinfo32_ugid16	TRUE
+#define elf_backend_linux_prpsinfo32_ugid16	true
 
 #include "elf32-target.h"
 
@@ -289,7 +293,7 @@ elf32_sparc_reloc_type_class (const stru
 #undef	elf_backend_strtab_flags
 #define elf_backend_strtab_flags	SHF_STRINGS
 
-static bfd_boolean
+static bool
 elf32_sparc_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
 						 bfd *obfd ATTRIBUTE_UNUSED,
 						 const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED,
@@ -297,7 +301,7 @@ elf32_sparc_copy_solaris_special_section
 {
   /* PR 19938: FIXME: Need to add code for setting the sh_info
      and sh_link fields of Solaris specific section types.  */
-  return FALSE;
+  return false;
 }
 
 #undef  elf_backend_copy_special_section_fields
@@ -305,29 +309,10 @@ elf32_sparc_copy_solaris_special_section
 
 #include "elf32-target.h"
 
-/* A wrapper around _bfd_sparc_elf_link_hash_table_create that identifies
-   the target system as VxWorks.  */
-
-static struct bfd_link_hash_table *
-elf32_sparc_vxworks_link_hash_table_create (bfd *abfd)
-{
-  struct bfd_link_hash_table *ret;
-
-  ret = _bfd_sparc_elf_link_hash_table_create (abfd);
-  if (ret)
-    {
-      struct _bfd_sparc_elf_link_hash_table *htab;
-
-      htab = (struct _bfd_sparc_elf_link_hash_table *) ret;
-      htab->is_vxworks = 1;
-    }
-  return ret;
-}
-
 /* A final_write_processing hook that does both the SPARC- and VxWorks-
    specific handling.  */
 
-static bfd_boolean
+static bool
 elf32_sparc_vxworks_final_write_processing (bfd *abfd)
 {
   sparc_final_write_processing (abfd);
@@ -342,9 +327,8 @@ elf32_sparc_vxworks_final_write_processi
 #undef  ELF_MINPAGESIZE
 #define ELF_MINPAGESIZE	0x1000
 
-#undef bfd_elf32_bfd_link_hash_table_create
-#define bfd_elf32_bfd_link_hash_table_create \
-  elf32_sparc_vxworks_link_hash_table_create
+#undef	ELF_TARGET_OS
+#define	ELF_TARGET_OS	is_vxworks
 
 #undef  elf_backend_want_got_plt
 #define elf_backend_want_got_plt		1
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-spu.c ./bfd/elf32-spu.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-spu.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-spu.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 /* SPU specific support for 32-bit ELF
 
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -40,60 +40,60 @@ static bfd_reloc_status_type spu_elf_rel
    array, so it must be declared in the order of that type.  */
 
 static reloc_howto_type elf_howto_table[] = {
-  HOWTO (R_SPU_NONE,	   0, 3,  0, FALSE,  0, complain_overflow_dont,
+  HOWTO (R_SPU_NONE,	   0, 0,  0, false,  0, complain_overflow_dont,
 	 bfd_elf_generic_reloc, "SPU_NONE",
-	 FALSE, 0, 0x00000000, FALSE),
-  HOWTO (R_SPU_ADDR10,	   4, 2, 10, FALSE, 14, complain_overflow_bitfield,
+	 false, 0, 0x00000000, false),
+  HOWTO (R_SPU_ADDR10,	   4, 4, 10, false, 14, complain_overflow_bitfield,
 	 bfd_elf_generic_reloc, "SPU_ADDR10",
-	 FALSE, 0, 0x00ffc000, FALSE),
-  HOWTO (R_SPU_ADDR16,	   2, 2, 16, FALSE,  7, complain_overflow_bitfield,
+	 false, 0, 0x00ffc000, false),
+  HOWTO (R_SPU_ADDR16,	   2, 4, 16, false,  7, complain_overflow_bitfield,
 	 bfd_elf_generic_reloc, "SPU_ADDR16",
-	 FALSE, 0, 0x007fff80, FALSE),
-  HOWTO (R_SPU_ADDR16_HI, 16, 2, 16, FALSE,  7, complain_overflow_bitfield,
+	 false, 0, 0x007fff80, false),
+  HOWTO (R_SPU_ADDR16_HI, 16, 4, 16, false,  7, complain_overflow_bitfield,
 	 bfd_elf_generic_reloc, "SPU_ADDR16_HI",
-	 FALSE, 0, 0x007fff80, FALSE),
-  HOWTO (R_SPU_ADDR16_LO,  0, 2, 16, FALSE,  7, complain_overflow_dont,
+	 false, 0, 0x007fff80, false),
+  HOWTO (R_SPU_ADDR16_LO,  0, 4, 16, false,  7, complain_overflow_dont,
 	 bfd_elf_generic_reloc, "SPU_ADDR16_LO",
-	 FALSE, 0, 0x007fff80, FALSE),
-  HOWTO (R_SPU_ADDR18,	   0, 2, 18, FALSE,  7, complain_overflow_bitfield,
+	 false, 0, 0x007fff80, false),
+  HOWTO (R_SPU_ADDR18,	   0, 4, 18, false,  7, complain_overflow_bitfield,
 	 bfd_elf_generic_reloc, "SPU_ADDR18",
-	 FALSE, 0, 0x01ffff80, FALSE),
-  HOWTO (R_SPU_ADDR32,	   0, 2, 32, FALSE,  0, complain_overflow_dont,
+	 false, 0, 0x01ffff80, false),
+  HOWTO (R_SPU_ADDR32,	   0, 4, 32, false,  0, complain_overflow_dont,
 	 bfd_elf_generic_reloc, "SPU_ADDR32",
-	 FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (R_SPU_REL16,	   2, 2, 16,  TRUE,  7, complain_overflow_bitfield,
+	 false, 0, 0xffffffff, false),
+  HOWTO (R_SPU_REL16,	   2, 4, 16,  true,  7, complain_overflow_bitfield,
 	 bfd_elf_generic_reloc, "SPU_REL16",
-	 FALSE, 0, 0x007fff80, TRUE),
-  HOWTO (R_SPU_ADDR7,	   0, 2,  7, FALSE, 14, complain_overflow_dont,
+	 false, 0, 0x007fff80, true),
+  HOWTO (R_SPU_ADDR7,	   0, 4,  7, false, 14, complain_overflow_dont,
 	 bfd_elf_generic_reloc, "SPU_ADDR7",
-	 FALSE, 0, 0x001fc000, FALSE),
-  HOWTO (R_SPU_REL9,	   2, 2,  9,  TRUE,  0, complain_overflow_signed,
+	 false, 0, 0x001fc000, false),
+  HOWTO (R_SPU_REL9,	   2, 4,  9,  true,  0, complain_overflow_signed,
 	 spu_elf_rel9,		"SPU_REL9",
-	 FALSE, 0, 0x0180007f, TRUE),
-  HOWTO (R_SPU_REL9I,	   2, 2,  9,  TRUE,  0, complain_overflow_signed,
+	 false, 0, 0x0180007f, true),
+  HOWTO (R_SPU_REL9I,	   2, 4,  9,  true,  0, complain_overflow_signed,
 	 spu_elf_rel9,		"SPU_REL9I",
-	 FALSE, 0, 0x0000c07f, TRUE),
-  HOWTO (R_SPU_ADDR10I,	   0, 2, 10, FALSE, 14, complain_overflow_signed,
+	 false, 0, 0x0000c07f, true),
+  HOWTO (R_SPU_ADDR10I,	   0, 4, 10, false, 14, complain_overflow_signed,
 	 bfd_elf_generic_reloc, "SPU_ADDR10I",
-	 FALSE, 0, 0x00ffc000, FALSE),
-  HOWTO (R_SPU_ADDR16I,	   0, 2, 16, FALSE,  7, complain_overflow_signed,
+	 false, 0, 0x00ffc000, false),
+  HOWTO (R_SPU_ADDR16I,	   0, 4, 16, false,  7, complain_overflow_signed,
 	 bfd_elf_generic_reloc, "SPU_ADDR16I",
-	 FALSE, 0, 0x007fff80, FALSE),
-  HOWTO (R_SPU_REL32,	   0, 2, 32, TRUE,  0, complain_overflow_dont,
+	 false, 0, 0x007fff80, false),
+  HOWTO (R_SPU_REL32,	   0, 4, 32, true,  0, complain_overflow_dont,
 	 bfd_elf_generic_reloc, "SPU_REL32",
-	 FALSE, 0, 0xffffffff, TRUE),
-  HOWTO (R_SPU_ADDR16X,	   0, 2, 16, FALSE,  7, complain_overflow_bitfield,
+	 false, 0, 0xffffffff, true),
+  HOWTO (R_SPU_ADDR16X,	   0, 4, 16, false,  7, complain_overflow_bitfield,
 	 bfd_elf_generic_reloc, "SPU_ADDR16X",
-	 FALSE, 0, 0x007fff80, FALSE),
-  HOWTO (R_SPU_PPU32,	   0, 2, 32, FALSE,  0, complain_overflow_dont,
+	 false, 0, 0x007fff80, false),
+  HOWTO (R_SPU_PPU32,	   0, 4, 32, false,  0, complain_overflow_dont,
 	 bfd_elf_generic_reloc, "SPU_PPU32",
-	 FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (R_SPU_PPU64,	   0, 4, 64, FALSE,  0, complain_overflow_dont,
+	 false, 0, 0xffffffff, false),
+  HOWTO (R_SPU_PPU64,	   0, 8, 64, false,  0, complain_overflow_dont,
 	 bfd_elf_generic_reloc, "SPU_PPU64",
-	 FALSE, 0, -1, FALSE),
-  HOWTO (R_SPU_ADD_PIC,	     0, 0, 0, FALSE,  0, complain_overflow_dont,
+	 false, 0, -1, false),
+  HOWTO (R_SPU_ADD_PIC,	   0, 0,  0, false,  0, complain_overflow_dont,
 	 bfd_elf_generic_reloc, "SPU_ADD_PIC",
-	 FALSE, 0, 0x00000000, FALSE),
+	 false, 0, 0x00000000, false),
 };
 
 static struct bfd_elf_special_section const spu_elf_special_sections[] = {
@@ -148,7 +148,7 @@ spu_elf_bfd_to_reloc_type (bfd_reloc_cod
     }
 }
 
-static bfd_boolean
+static bool
 spu_elf_info_to_howto (bfd *abfd,
 		       arelent *cache_ptr,
 		       Elf_Internal_Rela *dst)
@@ -163,10 +163,10 @@ spu_elf_info_to_howto (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_howto_table[(int) r_type];
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type *
@@ -244,7 +244,7 @@ spu_elf_rel9 (bfd *abfd, arelent *reloc_
   return bfd_reloc_ok;
 }
 
-static bfd_boolean
+static bool
 spu_elf_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
@@ -253,7 +253,7 @@ spu_elf_new_section_hook (bfd *abfd, ase
 
       sdata = bfd_zalloc (abfd, sizeof (*sdata));
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -262,7 +262,7 @@ spu_elf_new_section_hook (bfd *abfd, ase
 
 /* Set up overlay info for executables.  */
 
-static bfd_boolean
+static bool
 spu_elf_object_p (bfd *abfd)
 {
   if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
@@ -286,7 +286,8 @@ spu_elf_object_p (bfd *abfd)
 	      {
 		Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[j];
 
-		if (ELF_SECTION_SIZE (shdr, phdr) != 0
+		if (shdr->bfd_section != NULL
+		    && ELF_SECTION_SIZE (shdr, phdr) != 0
 		    && ELF_SECTION_IN_SEGMENT (shdr, phdr))
 		  {
 		    asection *sec = shdr->bfd_section;
@@ -296,7 +297,7 @@ spu_elf_object_p (bfd *abfd)
 	      }
 	  }
     }
-  return TRUE;
+  return true;
 }
 
 /* Specially mark defined symbols named _EAR_* with BSF_KEEP so that
@@ -307,7 +308,7 @@ spu_elf_backend_symbol_processing (bfd *
 {
   if (sym->name != NULL
       && sym->section != bfd_abs_section_ptr
-      && strncmp (sym->name, "_EAR_", 5) == 0)
+      && startswith (sym->name, "_EAR_"))
     sym->flags |= BSF_KEEP;
 }
 
@@ -371,8 +372,9 @@ struct got_entry
 };
 
 #define spu_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == SPU_ELF_DATA ? ((struct spu_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == SPU_ELF_DATA)		\
+   ? (struct spu_link_hash_table *) (p)->hash : NULL)
 
 struct call_info
 {
@@ -494,7 +496,7 @@ spu_elf_setup (struct bfd_link_info *inf
    to (hash, NULL) for global symbols, and (NULL, sym) for locals.  Set
    *SYMSECP to the symbol's section.  *LOCSYMSP caches local syms.  */
 
-static bfd_boolean
+static bool
 get_sym_h (struct elf_link_hash_entry **hp,
 	   Elf_Internal_Sym **symp,
 	   asection **symsecp,
@@ -542,7 +544,7 @@ get_sym_h (struct elf_link_hash_entry **
 					    symtab_hdr->sh_info,
 					    0, NULL, NULL, NULL);
 	  if (locsyms == NULL)
-	    return FALSE;
+	    return false;
 	  *locsymsp = locsyms;
 	}
       sym = locsyms + r_symndx;
@@ -557,13 +559,13 @@ get_sym_h (struct elf_link_hash_entry **
 	*symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create the note section if not already present.  This is done early so
    that the linker maps the sections to the right place in the output.  */
 
-bfd_boolean
+bool
 spu_elf_create_sections (struct bfd_link_info *info)
 {
   struct spu_link_hash_table *htab = spu_hash_table (info);
@@ -589,7 +591,7 @@ spu_elf_create_sections (struct bfd_link
       s = bfd_make_section_anyway_with_flags (ibfd, SPU_PTNOTE_SPUNAME, flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 4))
-	return FALSE;
+	return false;
       /* Because we didn't set SEC_LINKER_CREATED we need to set the
 	 proper section type.  */
       elf_section_type (s) = SHT_NOTE;
@@ -599,11 +601,11 @@ spu_elf_create_sections (struct bfd_link
       size += (name_len + 3) & -4;
 
       if (!bfd_set_section_size (s, size))
-	return FALSE;
+	return false;
 
       data = bfd_zalloc (ibfd, size);
       if (data == NULL)
-	return FALSE;
+	return false;
 
       bfd_put_32 (ibfd, sizeof (SPU_PLUGIN_NAME), data + 0);
       bfd_put_32 (ibfd, name_len, data + 4);
@@ -626,11 +628,11 @@ spu_elf_create_sections (struct bfd_link
 	       | SEC_IN_MEMORY | SEC_LINKER_CREATED);
       s = bfd_make_section_anyway_with_flags (ibfd, ".fixup", flags);
       if (s == NULL || !bfd_set_section_alignment (s, 2))
-	return FALSE;
+	return false;
       htab->sfixup = s;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* qsort predicate to sort sections by vma.  */
@@ -724,7 +726,7 @@ spu_elf_find_overlays (struct bfd_link_i
 	     an overlay, in the sense that it might be loaded in
 	     by the overlay manager, but rather the initial
 	     section contents for the overlay buffer.  */
-	  if (strncmp (s->name, ".ovl.init", 9) != 0)
+	  if (!startswith (s->name, ".ovl.init"))
 	    {
 	      num_buf = ((s->vma - vma_start) >> htab->line_size_log2) + 1;
 	      set_id = (num_buf == prev_buf)? set_id + 1 : 0;
@@ -784,7 +786,7 @@ spu_elf_find_overlays (struct bfd_link_i
 	      if (spu_elf_section_data (s0)->u.o.ovl_index == 0)
 		{
 		  ++num_buf;
-		  if (strncmp (s0->name, ".ovl.init", 9) != 0)
+		  if (!startswith (s0->name, ".ovl.init"))
 		    {
 		      alloc_sec[ovl_index] = s0;
 		      spu_elf_section_data (s0)->u.o.ovl_index = ++ovl_index;
@@ -793,7 +795,7 @@ spu_elf_find_overlays (struct bfd_link_i
 		  else
 		    ovl_end = s->vma + s->size;
 		}
-	      if (strncmp (s->name, ".ovl.init", 9) != 0)
+	      if (!startswith (s->name, ".ovl.init"))
 		{
 		  alloc_sec[ovl_index] = s;
 		  spu_elf_section_data (s)->u.o.ovl_index = ++ovl_index;
@@ -830,7 +832,7 @@ spu_elf_find_overlays (struct bfd_link_i
       struct elf_link_hash_entry *h;
 
       name = entry_names[i][htab->params->ovly_flavour];
-      h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
+      h = elf_link_hash_lookup (&htab->elf, name, true, false, false);
       if (h == NULL)
 	return 0;
 
@@ -868,7 +870,7 @@ spu_elf_find_overlays (struct bfd_link_i
    brhz  00100010 0..
    brhnz 00100011 0..  */
 
-static bfd_boolean
+static bool
 is_branch (const unsigned char *insn)
 {
   return (insn[0] & 0xec) == 0x20 && (insn[1] & 0x80) == 0;
@@ -884,7 +886,7 @@ is_branch (const unsigned char *insn)
    bihz   00100101 010
    bihnz  00100101 011  */
 
-static bfd_boolean
+static bool
 is_indirect_branch (const unsigned char *insn)
 {
   return (insn[0] & 0xef) == 0x25 && (insn[1] & 0x80) == 0;
@@ -894,7 +896,7 @@ is_indirect_branch (const unsigned char
    hbra  0001000..
    hbrr  0001001..  */
 
-static bfd_boolean
+static bool
 is_hint (const unsigned char *insn)
 {
   return (insn[0] & 0xfc) == 0x10;
@@ -902,22 +904,22 @@ is_hint (const unsigned char *insn)
 
 /* True if INPUT_SECTION might need overlay stubs.  */
 
-static bfd_boolean
+static bool
 maybe_needs_stubs (asection *input_section)
 {
   /* No stubs for debug sections and suchlike.  */
   if ((input_section->flags & SEC_ALLOC) == 0)
-    return FALSE;
+    return false;
 
   /* No stubs for link-once sections that will be discarded.  */
   if (input_section->output_section == bfd_abs_section_ptr)
-    return FALSE;
+    return false;
 
   /* Don't create stubs for .eh_frame references.  */
   if (strcmp (input_section->name, ".eh_frame") == 0)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 enum _stub_type
@@ -951,7 +953,7 @@ needs_ovl_stub (struct elf_link_hash_ent
   struct spu_link_hash_table *htab = spu_hash_table (info);
   enum elf_spu_reloc_type r_type;
   unsigned int sym_type;
-  bfd_boolean branch, hint, call;
+  bool branch, hint, call;
   enum _stub_type ret = no_stub;
   bfd_byte insn[4];
 
@@ -969,7 +971,7 @@ needs_ovl_stub (struct elf_link_hash_ent
       /* setjmp always goes via an overlay stub, because then the return
 	 and hence the longjmp goes via __ovly_return.  That magically
 	 makes setjmp/longjmp between overlays work.  */
-      if (strncmp (h->root.root.string, "setjmp", 6) == 0
+      if (startswith (h->root.root.string, "setjmp")
 	  && (h->root.root.string[6] == '\0' || h->root.root.string[6] == '@'))
 	ret = call_ovl_stub;
     }
@@ -980,9 +982,9 @@ needs_ovl_stub (struct elf_link_hash_ent
     sym_type = ELF_ST_TYPE (sym->st_info);
 
   r_type = ELF32_R_TYPE (irela->r_info);
-  branch = FALSE;
-  hint = FALSE;
-  call = FALSE;
+  branch = false;
+  hint = false;
+  call = false;
   if (r_type == R_SPU_REL16 || r_type == R_SPU_ADDR16)
     {
       if (contents == NULL)
@@ -1071,7 +1073,7 @@ needs_ovl_stub (struct elf_link_hash_ent
   return ret;
 }
 
-static bfd_boolean
+static bool
 count_stub (struct spu_link_hash_table *htab,
 	    bfd *ibfd,
 	    asection *isec,
@@ -1101,7 +1103,7 @@ count_stub (struct spu_link_hash_table *
 			       * sizeof (*elf_local_got_ents (ibfd)));
 	  elf_local_got_ents (ibfd) = bfd_zmalloc (amt);
 	  if (elf_local_got_ents (ibfd) == NULL)
-	    return FALSE;
+	    return false;
 	}
       head = elf_local_got_ents (ibfd) + ELF32_R_SYM (irela->r_info);
     }
@@ -1109,7 +1111,7 @@ count_stub (struct spu_link_hash_table *
   if (htab->params->ovly_flavour == ovly_soft_icache)
     {
       htab->stub_count[ovl] += 1;
-      return TRUE;
+      return true;
     }
 
   addend = 0;
@@ -1149,7 +1151,7 @@ count_stub (struct spu_link_hash_table *
     {
       g = bfd_malloc (sizeof *g);
       if (g == NULL)
-	return FALSE;
+	return false;
       g->ovl = ovl;
       g->addend = addend;
       g->stub_addr = (bfd_vma) -1;
@@ -1159,7 +1161,7 @@ count_stub (struct spu_link_hash_table *
       htab->stub_count[ovl] += 1;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Support two sizes of overlay stubs, a slower more compact stub of two
@@ -1202,7 +1204,7 @@ ovl_stub_size_log2 (struct spu_elf_param
    .quad xor_pattern
 */
 
-static bfd_boolean
+static bool
 build_stub (struct bfd_link_info *info,
 	    bfd *ibfd,
 	    asection *isec,
@@ -1236,7 +1238,7 @@ build_stub (struct bfd_link_info *info,
     {
       g = bfd_malloc (sizeof *g);
       if (g == NULL)
-	return FALSE;
+	return false;
       g->ovl = ovl;
       g->br_addr = 0;
       if (irela != NULL)
@@ -1255,10 +1257,10 @@ build_stub (struct bfd_link_info *info,
 	abort ();
 
       if (g->ovl == 0 && ovl != 0)
-	return TRUE;
+	return true;
 
       if (g->stub_addr != (bfd_vma) -1)
-	return TRUE;
+	return true;
     }
 
   sec = htab->stub_sec[ovl];
@@ -1272,7 +1274,7 @@ build_stub (struct bfd_link_info *info,
   if (((dest | to | from) & 3) != 0)
     {
       htab->stub_err = 1;
-      return FALSE;
+      return false;
     }
   dest_ovl = spu_elf_section_data (dest_sec->output_section)->u.o.ovl_index;
 
@@ -1446,7 +1448,7 @@ build_stub (struct bfd_link_info *info,
 	len += 1 + 8;
       name = bfd_malloc (len + 1);
       if (name == NULL)
-	return FALSE;
+	return false;
 
       sprintf (name, "%08x.ovl_call.", g->ovl);
       if (h != NULL)
@@ -1458,10 +1460,10 @@ build_stub (struct bfd_link_info *info,
       if (add != 0)
 	sprintf (name + len - 9, "+%x", add);
 
-      h = elf_link_hash_lookup (&htab->elf, name, TRUE, TRUE, FALSE);
+      h = elf_link_hash_lookup (&htab->elf, name, true, true, false);
       free (name);
       if (h == NULL)
-	return FALSE;
+	return false;
       if (h->root.type == bfd_link_hash_new)
 	{
 	  h->root.type = bfd_link_hash_defined;
@@ -1477,13 +1479,13 @@ build_stub (struct bfd_link_info *info,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Called via elf_link_hash_traverse to allocate stubs for any _SPUEAR_
    symbols.  */
 
-static bfd_boolean
+static bool
 allocate_spuear_stubs (struct elf_link_hash_entry *h, void *inf)
 {
   /* Symbols starting with _SPUEAR_ need a stub because they may be
@@ -1495,7 +1497,7 @@ allocate_spuear_stubs (struct elf_link_h
   if ((h->root.type == bfd_link_hash_defined
        || h->root.type == bfd_link_hash_defweak)
       && h->def_regular
-      && strncmp (h->root.root.string, "_SPUEAR_", 8) == 0
+      && startswith (h->root.root.string, "_SPUEAR_")
       && (sym_sec = h->root.u.def.section) != NULL
       && sym_sec->output_section != bfd_abs_section_ptr
       && spu_elf_section_data (sym_sec->output_section) != NULL
@@ -1505,10 +1507,10 @@ allocate_spuear_stubs (struct elf_link_h
       return count_stub (htab, NULL, NULL, nonovl_stub, h, NULL);
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 build_spuear_stubs (struct elf_link_hash_entry *h, void *inf)
 {
   /* Symbols starting with _SPUEAR_ need a stub because they may be
@@ -1520,7 +1522,7 @@ build_spuear_stubs (struct elf_link_hash
   if ((h->root.type == bfd_link_hash_defined
        || h->root.type == bfd_link_hash_defweak)
       && h->def_regular
-      && strncmp (h->root.root.string, "_SPUEAR_", 8) == 0
+      && startswith (h->root.root.string, "_SPUEAR_")
       && (sym_sec = h->root.u.def.section) != NULL
       && sym_sec->output_section != bfd_abs_section_ptr
       && spu_elf_section_data (sym_sec->output_section) != NULL
@@ -1531,13 +1533,13 @@ build_spuear_stubs (struct elf_link_hash
 			 h->root.u.def.value, sym_sec);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Size or build stubs.  */
 
-static bfd_boolean
-process_stubs (struct bfd_link_info *info, bfd_boolean build)
+static bool
+process_stubs (struct bfd_link_info *info, bool build)
 {
   struct spu_link_hash_table *htab = spu_hash_table (info);
   bfd *ibfd;
@@ -1598,11 +1600,9 @@ process_stubs (struct bfd_link_info *inf
 		  if (elf_section_data (isec)->relocs != internal_relocs)
 		    free (internal_relocs);
 		error_ret_free_local:
-		  if (local_syms != NULL
-		      && (symtab_hdr->contents
-			  != (unsigned char *) local_syms))
+		  if (symtab_hdr->contents != (unsigned char *) local_syms)
 		    free (local_syms);
-		  return FALSE;
+		  return false;
 		}
 
 	      /* Determine the reloc target section.  */
@@ -1660,7 +1660,7 @@ process_stubs (struct bfd_link_info *inf
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space for overlay call and return stubs.
@@ -1676,7 +1676,7 @@ spu_elf_size_stubs (struct bfd_link_info
   unsigned int i;
   asection *stub;
 
-  if (!process_stubs (info, FALSE))
+  if (!process_stubs (info, false))
     return 0;
 
   htab = spu_hash_table (info);
@@ -1862,7 +1862,7 @@ ovl_mgr_stat (struct bfd *abfd ATTRIBUTE
   return 0;
 }
 
-bfd_boolean
+bool
 spu_elf_open_builtin_lib (bfd **ovl_bfd, const struct _ovl_stream *stream)
 {
   *ovl_bfd = bfd_openr_iovec ("builtin ovl_mgr",
@@ -1891,7 +1891,7 @@ define_ovtab_symbol (struct spu_link_has
 {
   struct elf_link_hash_entry *h;
 
-  h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
+  h = elf_link_hash_lookup (&htab->elf, name, true, false, false);
   if (h == NULL)
     return NULL;
 
@@ -1928,7 +1928,7 @@ define_ovtab_symbol (struct spu_link_has
 
 /* Fill in all stubs and the overlay tables.  */
 
-static bfd_boolean
+static bool
 spu_elf_build_stubs (struct bfd_link_info *info)
 {
   struct spu_link_hash_table *htab = spu_hash_table (info);
@@ -1954,7 +1954,7 @@ spu_elf_build_stubs (struct bfd_link_inf
 		  _bfd_error_handler (_("%s in overlay section"),
 				      h->root.root.string);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	    }
 	}
@@ -1968,13 +1968,13 @@ spu_elf_build_stubs (struct bfd_link_inf
 	    htab->stub_sec[i]->contents = bfd_zalloc (htab->stub_sec[i]->owner,
 						      htab->stub_sec[i]->size);
 	    if (htab->stub_sec[i]->contents == NULL)
-	      return FALSE;
+	      return false;
 	    htab->stub_sec[i]->rawsize = htab->stub_sec[i]->size;
 	    htab->stub_sec[i]->size = 0;
 	  }
 
       /* Fill in all the stubs.  */
-      process_stubs (info, TRUE);
+      process_stubs (info, true);
       if (!htab->stub_err)
 	elf_link_hash_traverse (&htab->elf, build_spuear_stubs, info);
 
@@ -1982,7 +1982,7 @@ spu_elf_build_stubs (struct bfd_link_inf
 	{
 	  _bfd_error_handler (_("overlay stub relocation overflow"));
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       for (i = 0; i <= htab->num_overlays; i++)
@@ -1991,18 +1991,18 @@ spu_elf_build_stubs (struct bfd_link_inf
 	    {
 	      _bfd_error_handler  (_("stubs don't match calculated size"));
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  htab->stub_sec[i]->rawsize = 0;
 	}
     }
 
   if (htab->ovtab == NULL || htab->ovtab->size == 0)
-    return TRUE;
+    return true;
 
   htab->ovtab->contents = bfd_zalloc (htab->ovtab->owner, htab->ovtab->size);
   if (htab->ovtab->contents == NULL)
-    return FALSE;
+    return false;
 
   p = htab->ovtab->contents;
   if (htab->params->ovly_flavour == ovly_soft_icache)
@@ -2011,90 +2011,90 @@ spu_elf_build_stubs (struct bfd_link_inf
 
       h = define_ovtab_symbol (htab, "__icache_tag_array");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = 0;
       h->size = 16 << htab->num_lines_log2;
       off = h->size;
 
       h = define_ovtab_symbol (htab, "__icache_tag_array_size");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = 16 << htab->num_lines_log2;
       h->root.u.def.section = bfd_abs_section_ptr;
 
       h = define_ovtab_symbol (htab, "__icache_rewrite_to");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = off;
       h->size = 16 << htab->num_lines_log2;
       off += h->size;
 
       h = define_ovtab_symbol (htab, "__icache_rewrite_to_size");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = 16 << htab->num_lines_log2;
       h->root.u.def.section = bfd_abs_section_ptr;
 
       h = define_ovtab_symbol (htab, "__icache_rewrite_from");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = off;
       h->size = 16 << (htab->fromelem_size_log2 + htab->num_lines_log2);
       off += h->size;
 
       h = define_ovtab_symbol (htab, "__icache_rewrite_from_size");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = 16 << (htab->fromelem_size_log2
 				   + htab->num_lines_log2);
       h->root.u.def.section = bfd_abs_section_ptr;
 
       h = define_ovtab_symbol (htab, "__icache_log2_fromelemsize");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = htab->fromelem_size_log2;
       h->root.u.def.section = bfd_abs_section_ptr;
 
       h = define_ovtab_symbol (htab, "__icache_base");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = htab->ovl_sec[0]->vma;
       h->root.u.def.section = bfd_abs_section_ptr;
       h->size = htab->num_buf << htab->line_size_log2;
 
       h = define_ovtab_symbol (htab, "__icache_linesize");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = 1 << htab->line_size_log2;
       h->root.u.def.section = bfd_abs_section_ptr;
 
       h = define_ovtab_symbol (htab, "__icache_log2_linesize");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = htab->line_size_log2;
       h->root.u.def.section = bfd_abs_section_ptr;
 
       h = define_ovtab_symbol (htab, "__icache_neg_log2_linesize");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = -htab->line_size_log2;
       h->root.u.def.section = bfd_abs_section_ptr;
 
       h = define_ovtab_symbol (htab, "__icache_cachesize");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = 1 << (htab->num_lines_log2 + htab->line_size_log2);
       h->root.u.def.section = bfd_abs_section_ptr;
 
       h = define_ovtab_symbol (htab, "__icache_log2_cachesize");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = htab->num_lines_log2 + htab->line_size_log2;
       h->root.u.def.section = bfd_abs_section_ptr;
 
       h = define_ovtab_symbol (htab, "__icache_neg_log2_cachesize");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = -(htab->num_lines_log2 + htab->line_size_log2);
       h->root.u.def.section = bfd_abs_section_ptr;
 
@@ -2103,11 +2103,11 @@ spu_elf_build_stubs (struct bfd_link_inf
 	  htab->init->contents = bfd_zalloc (htab->init->owner,
 					     htab->init->size);
 	  if (htab->init->contents == NULL)
-	    return FALSE;
+	    return false;
 
 	  h = define_ovtab_symbol (htab, "__icache_fileoff");
 	  if (h == NULL)
-	    return FALSE;
+	    return false;
 	  h->root.u.def.value = 0;
 	  h->root.u.def.section = htab->init;
 	  h->size = 8;
@@ -2138,37 +2138,37 @@ spu_elf_build_stubs (struct bfd_link_inf
 
       h = define_ovtab_symbol (htab, "_ovly_table");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = 16;
       h->size = htab->num_overlays * 16;
 
       h = define_ovtab_symbol (htab, "_ovly_table_end");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = htab->num_overlays * 16 + 16;
       h->size = 0;
 
       h = define_ovtab_symbol (htab, "_ovly_buf_table");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = htab->num_overlays * 16 + 16;
       h->size = htab->num_buf * 4;
 
       h = define_ovtab_symbol (htab, "_ovly_buf_table_end");
       if (h == NULL)
-	return FALSE;
+	return false;
       h->root.u.def.value = htab->num_overlays * 16 + 16 + htab->num_buf * 4;
       h->size = 0;
     }
 
   h = define_ovtab_symbol (htab, "_EAR_");
   if (h == NULL)
-    return FALSE;
+    return false;
   h->root.u.def.section = htab->toe;
   h->root.u.def.value = 0;
   h->size = 16;
 
-  return TRUE;
+  return true;
 }
 
 /* Check that all loadable section VMAs lie in the range
@@ -2210,14 +2210,14 @@ find_function_stack_adjust (asection *se
 			    bfd_vma *lr_store,
 			    bfd_vma *sp_adjust)
 {
-  int reg[128];
+  int32_t reg[128];
 
   memset (reg, 0, sizeof (reg));
   for ( ; offset + 4 <= sec->size; offset += 4)
     {
       unsigned char buf[4];
       int rt, ra;
-      int imm;
+      uint32_t imm;
 
       /* Assume no relocs on stack adjusing insns.  */
       if (!bfd_get_section_contents (sec->owner, sec, buf, offset, 4))
@@ -2393,8 +2393,8 @@ alloc_stack_info (asection *sec, int max
 static struct function_info *
 maybe_insert_function (asection *sec,
 		       void *sym_h,
-		       bfd_boolean global,
-		       bfd_boolean is_func)
+		       bool global,
+		       bool is_func)
 {
   struct _spu_elf_section_data *sec_data = spu_elf_section_data (sec);
   struct spu_elf_stack_info *sinfo = sec_data->u.i.stack_info;
@@ -2434,11 +2434,11 @@ maybe_insert_function (asection *sec,
 	  /* Prefer globals over local syms.  */
 	  if (global && !sinfo->fun[i].global)
 	    {
-	      sinfo->fun[i].global = TRUE;
+	      sinfo->fun[i].global = true;
 	      sinfo->fun[i].u.h = sym_h;
 	    }
 	  if (is_func)
-	    sinfo->fun[i].is_func = TRUE;
+	    sinfo->fun[i].is_func = true;
 	  return &sinfo->fun[i];
 	}
       /* Ignore a zero-size symbol inside an existing function.  */
@@ -2516,25 +2516,25 @@ func_name (struct function_info *fun)
 /* Read the instruction at OFF in SEC.  Return true iff the instruction
    is a nop, lnop, or stop 0 (all zero insn).  */
 
-static bfd_boolean
+static bool
 is_nop (asection *sec, bfd_vma off)
 {
   unsigned char insn[4];
 
   if (off + 4 > sec->size
       || !bfd_get_section_contents (sec->owner, sec, insn, off, 4))
-    return FALSE;
+    return false;
   if ((insn[0] & 0xbf) == 0 && (insn[1] & 0xe0) == 0x20)
-    return TRUE;
+    return true;
   if (insn[0] == 0 && insn[1] == 0 && insn[2] == 0 && insn[3] == 0)
-    return TRUE;
-  return FALSE;
+    return true;
+  return false;
 }
 
 /* Extend the range of FUN to cover nop padding up to LIMIT.
    Return TRUE iff some instruction other than a NOP was found.  */
 
-static bfd_boolean
+static bool
 insns_at_end (struct function_info *fun, bfd_vma limit)
 {
   bfd_vma off = (fun->hi + 3) & -4;
@@ -2544,25 +2544,25 @@ insns_at_end (struct function_info *fun,
   if (off < limit)
     {
       fun->hi = off;
-      return TRUE;
+      return true;
     }
   fun->hi = limit;
-  return FALSE;
+  return false;
 }
 
 /* Check and fix overlapping function ranges.  Return TRUE iff there
    are gaps in the current info we have about functions in SEC.  */
 
-static bfd_boolean
+static bool
 check_function_ranges (asection *sec, struct bfd_link_info *info)
 {
   struct _spu_elf_section_data *sec_data = spu_elf_section_data (sec);
   struct spu_elf_stack_info *sinfo = sec_data->u.i.stack_info;
   int i;
-  bfd_boolean gaps = FALSE;
+  bool gaps = false;
 
   if (sinfo == NULL)
-    return FALSE;
+    return false;
 
   for (i = 1; i < sinfo->num_fun; i++)
     if (sinfo->fun[i - 1].hi > sinfo->fun[i].lo)
@@ -2576,14 +2576,14 @@ check_function_ranges (asection *sec, st
 	sinfo->fun[i - 1].hi = sinfo->fun[i].lo;
       }
     else if (insns_at_end (&sinfo->fun[i - 1], sinfo->fun[i].lo))
-      gaps = TRUE;
+      gaps = true;
 
   if (sinfo->num_fun == 0)
-    gaps = TRUE;
+    gaps = true;
   else
     {
       if (sinfo->fun[0].lo != 0)
-	gaps = TRUE;
+	gaps = true;
       if (sinfo->fun[sinfo->num_fun - 1].hi > sec->size)
 	{
 	  const char *f1 = func_name (&sinfo->fun[sinfo->num_fun - 1]);
@@ -2592,7 +2592,7 @@ check_function_ranges (asection *sec, st
 	  sinfo->fun[sinfo->num_fun - 1].hi = sec->size;
 	}
       else if (insns_at_end (&sinfo->fun[sinfo->num_fun - 1], sec->size))
-	gaps = TRUE;
+	gaps = true;
     }
   return gaps;
 }
@@ -2630,7 +2630,7 @@ find_function (asection *sec, bfd_vma of
    if CALLEE was new.  If this function return FALSE, CALLEE should
    be freed.  */
 
-static bfd_boolean
+static bool
 insert_callee (struct function_info *caller, struct call_info *callee)
 {
   struct call_info **pp, *p;
@@ -2644,39 +2644,39 @@ insert_callee (struct function_info *cal
 	if (!p->is_tail)
 	  {
 	    p->fun->start = NULL;
-	    p->fun->is_func = TRUE;
+	    p->fun->is_func = true;
 	  }
 	p->count += callee->count;
 	/* Reorder list so most recent call is first.  */
 	*pp = p->next;
 	p->next = caller->call_list;
 	caller->call_list = p;
-	return FALSE;
+	return false;
       }
   callee->next = caller->call_list;
   caller->call_list = callee;
-  return TRUE;
+  return true;
 }
 
 /* Copy CALL and insert the copy into CALLER.  */
 
-static bfd_boolean
+static bool
 copy_callee (struct function_info *caller, const struct call_info *call)
 {
   struct call_info *callee;
   callee = bfd_malloc (sizeof (*callee));
   if (callee == NULL)
-    return FALSE;
+    return false;
   *callee = *call;
   if (!insert_callee (caller, callee))
     free (callee);
-  return TRUE;
+  return true;
 }
 
 /* We're only interested in code sections.  Testing SEC_IN_MEMORY excludes
    overlay stub sections.  */
 
-static bfd_boolean
+static bool
 interesting_section (asection *s)
 {
   return (s->output_section != bfd_abs_section_ptr
@@ -2691,7 +2691,7 @@ interesting_section (asection *s)
    look at branches, which may be tail calls or go to hot/cold
    section part of same function.  */
 
-static bfd_boolean
+static bool
 mark_functions_via_relocs (asection *sec,
 			   struct bfd_link_info *info,
 			   int call_tree)
@@ -2700,16 +2700,16 @@ mark_functions_via_relocs (asection *sec
   Elf_Internal_Shdr *symtab_hdr;
   void *psyms;
   unsigned int priority = 0;
-  static bfd_boolean warned;
+  static bool warned;
 
   if (!interesting_section (sec)
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   internal_relocs = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL,
 					       info->keep_memory);
   if (internal_relocs == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = &elf_tdata (sec->owner)->symtab_hdr;
   psyms = &symtab_hdr->contents;
@@ -2723,7 +2723,7 @@ mark_functions_via_relocs (asection *sec
       Elf_Internal_Sym *sym;
       struct elf_link_hash_entry *h;
       bfd_vma val;
-      bfd_boolean nonbranch, is_call;
+      bool nonbranch, is_call;
       struct function_info *caller;
       struct call_info *callee;
 
@@ -2732,20 +2732,20 @@ mark_functions_via_relocs (asection *sec
 
       r_indx = ELF32_R_SYM (irela->r_info);
       if (!get_sym_h (&h, &sym, &sym_sec, psyms, r_indx, sec->owner))
-	return FALSE;
+	return false;
 
       if (sym_sec == NULL
 	  || sym_sec->output_section == bfd_abs_section_ptr)
 	continue;
 
-      is_call = FALSE;
+      is_call = false;
       if (!nonbranch)
 	{
 	  unsigned char insn[4];
 
 	  if (!bfd_get_section_contents (sec->owner, sec, insn,
 					 irela->r_offset, 4))
-	    return FALSE;
+	    return false;
 	  if (is_branch (insn))
 	    {
 	      is_call = (insn[0] & 0xfd) == 0x31;
@@ -2765,13 +2765,13 @@ mark_functions_via_relocs (asection *sec
 			 " %pB(%pA), analysis incomplete\n"),
 		       sec->owner, sec, irela->r_offset,
 		       sym_sec->owner, sym_sec);
-		  warned = TRUE;
+		  warned = true;
 		  continue;
 		}
 	    }
 	  else
 	    {
-	      nonbranch = TRUE;
+	      nonbranch = true;
 	      if (is_hint (insn))
 		continue;
 	    }
@@ -2817,18 +2817,18 @@ mark_functions_via_relocs (asection *sec
 	    {
 	      Elf_Internal_Sym *fake = bfd_zmalloc (sizeof (*fake));
 	      if (fake == NULL)
-		return FALSE;
+		return false;
 	      fake->st_value = val;
 	      fake->st_shndx
 		= _bfd_elf_section_from_bfd_section (sym_sec->owner, sym_sec);
 	      sym = fake;
 	    }
 	  if (sym)
-	    fun = maybe_insert_function (sym_sec, sym, FALSE, is_call);
+	    fun = maybe_insert_function (sym_sec, sym, false, is_call);
 	  else
-	    fun = maybe_insert_function (sym_sec, h, TRUE, is_call);
+	    fun = maybe_insert_function (sym_sec, h, true, is_call);
 	  if (fun == NULL)
-	    return FALSE;
+	    return false;
 	  if (irela->r_addend != 0
 	      && fun->u.sym != sym)
 	    free (sym);
@@ -2837,17 +2837,17 @@ mark_functions_via_relocs (asection *sec
 
       caller = find_function (sec, irela->r_offset, info);
       if (caller == NULL)
-	return FALSE;
+	return false;
       callee = bfd_malloc (sizeof *callee);
       if (callee == NULL)
-	return FALSE;
+	return false;
 
       callee->fun = find_function (sym_sec, val, info);
       if (callee->fun == NULL)
-	return FALSE;
+	return false;
       callee->is_tail = !is_call;
-      callee->is_pasted = FALSE;
-      callee->broken_cycle = FALSE;
+      callee->is_pasted = false;
+      callee->broken_cycle = false;
       callee->priority = priority;
       callee->count = nonbranch? 0 : 1;
       if (callee->fun->last_caller != sec)
@@ -2869,7 +2869,7 @@ mark_functions_via_relocs (asection *sec
 	  if (sec->owner != sym_sec->owner)
 	    {
 	      callee->fun->start = NULL;
-	      callee->fun->is_func = TRUE;
+	      callee->fun->is_func = true;
 	    }
 	  else if (callee->fun->start == NULL)
 	    {
@@ -2893,19 +2893,19 @@ mark_functions_via_relocs (asection *sec
 	      if (caller_start != callee_start)
 		{
 		  callee->fun->start = NULL;
-		  callee->fun->is_func = TRUE;
+		  callee->fun->is_func = true;
 		}
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Handle something like .init or .fini, which has a piece of a function.
    These sections are pasted together to form a single function.  */
 
-static bfd_boolean
+static bool
 pasted_function (asection *sec)
 {
   struct bfd_link_order *l;
@@ -2916,14 +2916,14 @@ pasted_function (asection *sec)
 
   fake = bfd_zmalloc (sizeof (*fake));
   if (fake == NULL)
-    return FALSE;
+    return false;
   fake->st_value = 0;
   fake->st_size = sec->size;
   fake->st_shndx
     = _bfd_elf_section_from_bfd_section (sec->owner, sec);
-  fun = maybe_insert_function (sec, fake, FALSE, FALSE);
+  fun = maybe_insert_function (sec, fake, false, false);
   if (!fun)
-    return FALSE;
+    return false;
 
   /* Find a function immediately preceding this section.  */
   fun_start = NULL;
@@ -2935,18 +2935,18 @@ pasted_function (asection *sec)
 	    {
 	      struct call_info *callee = bfd_malloc (sizeof *callee);
 	      if (callee == NULL)
-		return FALSE;
+		return false;
 
 	      fun->start = fun_start;
 	      callee->fun = fun;
-	      callee->is_tail = TRUE;
-	      callee->is_pasted = TRUE;
-	      callee->broken_cycle = FALSE;
+	      callee->is_tail = true;
+	      callee->is_pasted = true;
+	      callee->broken_cycle = false;
 	      callee->priority = 0;
 	      callee->count = 1;
 	      if (!insert_callee (fun_start, callee))
 		free (callee);
-	      return TRUE;
+	      return true;
 	    }
 	  break;
 	}
@@ -2959,19 +2959,19 @@ pasted_function (asection *sec)
 
   /* Don't return an error if we did not find a function preceding this
      section.  The section may have incorrect flags.  */
-  return TRUE;
+  return true;
 }
 
 /* Map address ranges in code sections to functions.  */
 
-static bfd_boolean
+static bool
 discover_functions (struct bfd_link_info *info)
 {
   bfd *ibfd;
   int bfd_idx;
   Elf_Internal_Sym ***psym_arr;
   asection ***sec_arr;
-  bfd_boolean gaps = FALSE;
+  bool gaps = false;
 
   bfd_idx = 0;
   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
@@ -2979,10 +2979,10 @@ discover_functions (struct bfd_link_info
 
   psym_arr = bfd_zmalloc (bfd_idx * sizeof (*psym_arr));
   if (psym_arr == NULL)
-    return FALSE;
+    return false;
   sec_arr = bfd_zmalloc (bfd_idx * sizeof (*sec_arr));
   if (sec_arr == NULL)
-    return FALSE;
+    return false;
 
   for (ibfd = info->input_bfds, bfd_idx = 0;
        ibfd != NULL;
@@ -3007,33 +3007,30 @@ discover_functions (struct bfd_link_info
 	    for (sec = ibfd->sections; sec != NULL && !gaps; sec = sec->next)
 	      if (interesting_section (sec))
 		{
-		  gaps = TRUE;
+		  gaps = true;
 		  break;
 		}
 	  continue;
 	}
 
-      if (symtab_hdr->contents != NULL)
-	{
-	  /* Don't use cached symbols since the generic ELF linker
-	     code only reads local symbols, and we need globals too.  */
-	  free (symtab_hdr->contents);
-	  symtab_hdr->contents = NULL;
-	}
+      /* Don't use cached symbols since the generic ELF linker
+	 code only reads local symbols, and we need globals too.  */
+      free (symtab_hdr->contents);
+      symtab_hdr->contents = NULL;
       syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, symcount, 0,
 				   NULL, NULL, NULL);
       symtab_hdr->contents = (void *) syms;
       if (syms == NULL)
-	return FALSE;
+	return false;
 
       /* Select defined function symbols that are going to be output.  */
       psyms = bfd_malloc ((symcount + 1) * sizeof (*psyms));
       if (psyms == NULL)
-	return FALSE;
+	return false;
       psym_arr[bfd_idx] = psyms;
       psecs = bfd_malloc (symcount * sizeof (*psecs));
       if (psecs == NULL)
-	return FALSE;
+	return false;
       sec_arr[bfd_idx] = psecs;
       for (psy = psyms, p = psecs, sy = syms; sy < syms + symcount; ++p, ++sy)
 	if (ELF_ST_TYPE (sy->st_info) == STT_NOTYPE
@@ -3064,7 +3061,7 @@ discover_functions (struct bfd_link_info
 	      break;
 
 	  if (!alloc_stack_info (s, psy2 - psy))
-	    return FALSE;
+	    return false;
 	  psy = psy2;
 	}
 
@@ -3078,8 +3075,8 @@ discover_functions (struct bfd_link_info
 	  if (ELF_ST_TYPE (sy->st_info) == STT_FUNC)
 	    {
 	      asection *s = psecs[sy - syms];
-	      if (!maybe_insert_function (s, sy, FALSE, TRUE))
-		return FALSE;
+	      if (!maybe_insert_function (s, sy, false, true))
+		return false;
 	    }
 	}
 
@@ -3102,8 +3099,8 @@ discover_functions (struct bfd_link_info
 	    continue;
 
 	  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
-	    if (!mark_functions_via_relocs (sec, info, FALSE))
-	      return FALSE;
+	    if (!mark_functions_via_relocs (sec, info, false))
+	      return false;
 	}
 
       for (ibfd = info->input_bfds, bfd_idx = 0;
@@ -3123,7 +3120,7 @@ discover_functions (struct bfd_link_info
 	  symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
 	  syms = (Elf_Internal_Sym *) symtab_hdr->contents;
 
-	  gaps = FALSE;
+	  gaps = false;
 	  for (sec = ibfd->sections; sec != NULL && !gaps; sec = sec->next)
 	    if (interesting_section (sec))
 	      gaps |= check_function_ranges (sec, info);
@@ -3141,8 +3138,8 @@ discover_functions (struct bfd_link_info
 	      if (ELF_ST_TYPE (sy->st_info) != STT_FUNC
 		  && ELF_ST_BIND (sy->st_info) == STB_GLOBAL)
 		{
-		  if (!maybe_insert_function (s, sy, FALSE, FALSE))
-		    return FALSE;
+		  if (!maybe_insert_function (s, sy, false, false))
+		    return false;
 		}
 	    }
 	}
@@ -3183,7 +3180,7 @@ discover_functions (struct bfd_link_info
 		/* No symbols in this section.  Must be .init or .fini
 		   or something similar.  */
 		else if (!pasted_function (sec))
-		  return FALSE;
+		  return false;
 	      }
 	}
     }
@@ -3202,17 +3199,17 @@ discover_functions (struct bfd_link_info
   free (psym_arr);
   free (sec_arr);
 
-  return TRUE;
+  return true;
 }
 
 /* Iterate over all function_info we have collected, calling DOIT on
    each node if ROOT_ONLY is false.  Only call DOIT on root nodes
    if ROOT_ONLY.  */
 
-static bfd_boolean
-for_each_node (bfd_boolean (*doit) (struct function_info *,
-				    struct bfd_link_info *,
-				    void *),
+static bool
+for_each_node (bool (*doit) (struct function_info *,
+			     struct bfd_link_info *,
+			     void *),
 	       struct bfd_link_info *info,
 	       void *param,
 	       int root_only)
@@ -3239,17 +3236,17 @@ for_each_node (bfd_boolean (*doit) (stru
 	      for (i = 0; i < sinfo->num_fun; ++i)
 		if (!root_only || !sinfo->fun[i].non_root)
 		  if (!doit (&sinfo->fun[i], info, param))
-		    return FALSE;
+		    return false;
 	    }
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Transfer call info attached to struct function_info entries for
    all of a given function's sections to the first entry.  */
 
-static bfd_boolean
+static bool
 transfer_calls (struct function_info *fun,
 		struct bfd_link_info *info ATTRIBUTE_UNUSED,
 		void *param ATTRIBUTE_UNUSED)
@@ -3270,12 +3267,12 @@ transfer_calls (struct function_info *fu
 	}
       fun->call_list = NULL;
     }
-  return TRUE;
+  return true;
 }
 
 /* Mark nodes in the call graph that are called by some other node.  */
 
-static bfd_boolean
+static bool
 mark_non_root (struct function_info *fun,
 	       struct bfd_link_info *info ATTRIBUTE_UNUSED,
 	       void *param ATTRIBUTE_UNUSED)
@@ -3283,19 +3280,19 @@ mark_non_root (struct function_info *fun
   struct call_info *call;
 
   if (fun->visit1)
-    return TRUE;
-  fun->visit1 = TRUE;
+    return true;
+  fun->visit1 = true;
   for (call = fun->call_list; call; call = call->next)
     {
-      call->fun->non_root = TRUE;
+      call->fun->non_root = true;
       mark_non_root (call->fun, 0, 0);
     }
-  return TRUE;
+  return true;
 }
 
 /* Remove cycles from the call graph.  Set depth of nodes.  */
 
-static bfd_boolean
+static bool
 remove_cycles (struct function_info *fun,
 	       struct bfd_link_info *info,
 	       void *param)
@@ -3305,8 +3302,8 @@ remove_cycles (struct function_info *fun
   unsigned int max_depth = depth;
 
   fun->depth = depth;
-  fun->visit2 = TRUE;
-  fun->marking = TRUE;
+  fun->visit2 = true;
+  fun->marking = true;
 
   callp = &fun->call_list;
   while ((call = *callp) != NULL)
@@ -3315,7 +3312,7 @@ remove_cycles (struct function_info *fun
       if (!call->fun->visit2)
 	{
 	  if (!remove_cycles (call->fun, info, &call->max_depth))
-	    return FALSE;
+	    return false;
 	  if (max_depth < call->max_depth)
 	    max_depth = call->max_depth;
 	}
@@ -3335,13 +3332,13 @@ remove_cycles (struct function_info *fun
 				     f1, f2);
 	    }
 
-	  call->broken_cycle = TRUE;
+	  call->broken_cycle = true;
 	}
       callp = &call->next;
     }
-  fun->marking = FALSE;
+  fun->marking = false;
   *(unsigned int *) param = max_depth;
-  return TRUE;
+  return true;
 }
 
 /* Check that we actually visited all nodes in remove_cycles.  If we
@@ -3349,21 +3346,21 @@ remove_cycles (struct function_info *fun
    any root node.  Arbitrarily choose a node in the cycle as a new
    root and break the cycle.  */
 
-static bfd_boolean
+static bool
 mark_detached_root (struct function_info *fun,
 		    struct bfd_link_info *info,
 		    void *param)
 {
   if (fun->visit2)
-    return TRUE;
-  fun->non_root = FALSE;
+    return true;
+  fun->non_root = false;
   *(unsigned int *) param = 0;
   return remove_cycles (fun, info, param);
 }
 
 /* Populate call_list for each function.  */
 
-static bfd_boolean
+static bool
 build_call_tree (struct bfd_link_info *info)
 {
   bfd *ibfd;
@@ -3378,27 +3375,27 @@ build_call_tree (struct bfd_link_info *i
 	continue;
 
       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
-	if (!mark_functions_via_relocs (sec, info, TRUE))
-	  return FALSE;
+	if (!mark_functions_via_relocs (sec, info, true))
+	  return false;
     }
 
   /* Transfer call info from hot/cold section part of function
      to main entry.  */
   if (!spu_hash_table (info)->params->auto_overlay
-      && !for_each_node (transfer_calls, info, 0, FALSE))
-    return FALSE;
+      && !for_each_node (transfer_calls, info, 0, false))
+    return false;
 
   /* Find the call graph root(s).  */
-  if (!for_each_node (mark_non_root, info, 0, FALSE))
-    return FALSE;
+  if (!for_each_node (mark_non_root, info, 0, false))
+    return false;
 
   /* Remove cycles from the call graph.  We start from the root node(s)
      so that we break cycles in a reasonable place.  */
   depth = 0;
-  if (!for_each_node (remove_cycles, info, &depth, TRUE))
-    return FALSE;
+  if (!for_each_node (remove_cycles, info, &depth, true))
+    return false;
 
-  return for_each_node (mark_detached_root, info, &depth, FALSE);
+  return for_each_node (mark_detached_root, info, &depth, false);
 }
 
 /* qsort predicate to sort calls by priority, max_depth then count.  */
@@ -3442,7 +3439,7 @@ struct _mos_param {
    Sort the call graph so that the deepest nodes will be visited
    first.  */
 
-static bfd_boolean
+static bool
 mark_overlay_section (struct function_info *fun,
 		      struct bfd_link_info *info,
 		      void *param)
@@ -3453,13 +3450,13 @@ mark_overlay_section (struct function_in
   struct spu_link_hash_table *htab = spu_hash_table (info);
 
   if (fun->visit4)
-    return TRUE;
+    return true;
 
-  fun->visit4 = TRUE;
+  fun->visit4 = true;
   if (!fun->sec->linker_mark
       && (htab->params->ovly_flavour != ovly_soft_icache
 	  || htab->params->non_ia_text
-	  || strncmp (fun->sec->name, ".text.ia.", 9) == 0
+	  || startswith (fun->sec->name, ".text.ia.")
 	  || strcmp (fun->sec->name, ".init") == 0
 	  || strcmp (fun->sec->name, ".fini") == 0))
     {
@@ -3484,24 +3481,24 @@ mark_overlay_section (struct function_in
 	    {
 	      name = bfd_malloc (sizeof (".rodata"));
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      memcpy (name, ".rodata", sizeof (".rodata"));
 	    }
-	  else if (strncmp (fun->sec->name, ".text.", 6) == 0)
+	  else if (startswith (fun->sec->name, ".text."))
 	    {
 	      size_t len = strlen (fun->sec->name);
 	      name = bfd_malloc (len + 3);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      memcpy (name, ".rodata", sizeof (".rodata"));
 	      memcpy (name + 7, fun->sec->name + 5, len - 4);
 	    }
-	  else if (strncmp (fun->sec->name, ".gnu.linkonce.t.", 16) == 0)
+	  else if (startswith (fun->sec->name, ".gnu.linkonce.t."))
 	    {
 	      size_t len = strlen (fun->sec->name) + 1;
 	      name = bfd_malloc (len);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      memcpy (name, fun->sec->name, len);
 	      name[14] = 'r';
 	    }
@@ -3553,7 +3550,7 @@ mark_overlay_section (struct function_in
     {
       struct call_info **calls = bfd_malloc (count * sizeof (*calls));
       if (calls == NULL)
-	return FALSE;
+	return false;
 
       for (count = 0, call = fun->call_list; call != NULL; call = call->next)
 	calls[count++] = call;
@@ -3580,20 +3577,20 @@ mark_overlay_section (struct function_in
 	}
       if (!call->broken_cycle
 	  && !mark_overlay_section (call->fun, info, param))
-	return FALSE;
+	return false;
     }
 
   /* Don't put entry code into an overlay.  The overlay manager needs
      a stack!  Also, don't mark .ovl.init as an overlay.  */
   if (fun->lo + fun->sec->output_offset + fun->sec->output_section->vma
       == info->output_bfd->start_address
-      || strncmp (fun->sec->output_section->name, ".ovl.init", 9) == 0)
+      || startswith (fun->sec->output_section->name, ".ovl.init"))
     {
       fun->sec->linker_mark = 0;
       if (fun->rodata != NULL)
 	fun->rodata->linker_mark = 0;
     }
-  return TRUE;
+  return true;
 }
 
 /* If non-zero then unmark functions called from those within sections
@@ -3609,7 +3606,7 @@ struct _uos_param {
 
 /* Undo some of mark_overlay_section's work.  */
 
-static bfd_boolean
+static bool
 unmark_overlay_section (struct function_info *fun,
 			struct bfd_link_info *info,
 			void *param)
@@ -3619,9 +3616,9 @@ unmark_overlay_section (struct function_
   unsigned int excluded = 0;
 
   if (fun->visit5)
-    return TRUE;
+    return true;
 
-  fun->visit5 = TRUE;
+  fun->visit5 = true;
 
   excluded = 0;
   if (fun->sec == uos_param->exclude_input_section
@@ -3641,11 +3638,11 @@ unmark_overlay_section (struct function_
   for (call = fun->call_list; call != NULL; call = call->next)
     if (!call->broken_cycle
 	&& !unmark_overlay_section (call->fun, info, param))
-      return FALSE;
+      return false;
 
   if (RECURSE_UNMARK)
     uos_param->clearing -= excluded;
-  return TRUE;
+  return true;
 }
 
 struct _cl_param {
@@ -3657,7 +3654,7 @@ struct _cl_param {
    for consideration as non-overlay sections.  The array consist of
    pairs of sections, (text,rodata), for functions in the call graph.  */
 
-static bfd_boolean
+static bool
 collect_lib_sections (struct function_info *fun,
 		      struct bfd_link_info *info,
 		      void *param)
@@ -3667,11 +3664,11 @@ collect_lib_sections (struct function_in
   unsigned int size;
 
   if (fun->visit6)
-    return TRUE;
+    return true;
 
-  fun->visit6 = TRUE;
+  fun->visit6 = true;
   if (!fun->sec->linker_mark || !fun->sec->gc_mark || fun->sec->segment_mark)
-    return TRUE;
+    return true;
 
   size = fun->sec->size;
   if (fun->rodata)
@@ -3694,7 +3691,7 @@ collect_lib_sections (struct function_in
     if (!call->broken_cycle)
       collect_lib_sections (call->fun, info, param);
 
-  return TRUE;
+  return true;
 }
 
 /* qsort predicate to sort sections by call count.  */
@@ -3766,7 +3763,7 @@ auto_ovl_lib_functions (struct bfd_link_
   collect_lib_param.lib_size = lib_size;
   collect_lib_param.lib_sections = lib_sections;
   if (!for_each_node (collect_lib_sections, info, &collect_lib_param,
-		      TRUE))
+		      true))
     return (unsigned int) -1;
   lib_count = (collect_lib_param.lib_sections - lib_sections) / 2;
 
@@ -3872,28 +3869,28 @@ auto_ovl_lib_functions (struct bfd_link_
    from the parent section.  The idea being to group sections to
    minimise calls between different overlays.  */
 
-static bfd_boolean
+static bool
 collect_overlays (struct function_info *fun,
 		  struct bfd_link_info *info,
 		  void *param)
 {
   struct call_info *call;
-  bfd_boolean added_fun;
+  bool added_fun;
   asection ***ovly_sections = param;
 
   if (fun->visit7)
-    return TRUE;
+    return true;
 
-  fun->visit7 = TRUE;
+  fun->visit7 = true;
   for (call = fun->call_list; call != NULL; call = call->next)
     if (!call->is_pasted && !call->broken_cycle)
       {
 	if (!collect_overlays (call->fun, info, ovly_sections))
-	  return FALSE;
+	  return false;
 	break;
       }
 
-  added_fun = FALSE;
+  added_fun = false;
   if (fun->sec->linker_mark && fun->sec->gc_mark)
     {
       fun->sec->gc_mark = 0;
@@ -3905,7 +3902,7 @@ collect_overlays (struct function_info *
 	}
       else
 	*(*ovly_sections)++ = NULL;
-      added_fun = TRUE;
+      added_fun = true;
 
       /* Pasted sections must stay with the first section.  We don't
 	 put pasted sections in the array, just the first section.
@@ -3934,7 +3931,7 @@ collect_overlays (struct function_info *
   for (call = fun->call_list; call != NULL; call = call->next)
     if (!call->broken_cycle
 	&& !collect_overlays (call->fun, info, ovly_sections))
-      return FALSE;
+      return false;
 
   if (added_fun)
     {
@@ -3947,22 +3944,22 @@ collect_overlays (struct function_info *
 	  int i;
 	  for (i = 0; i < sinfo->num_fun; ++i)
 	    if (!collect_overlays (&sinfo->fun[i], info, ovly_sections))
-	      return FALSE;
+	      return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 struct _sum_stack_param {
   size_t cum_stack;
   size_t overall_stack;
-  bfd_boolean emit_stack_syms;
+  bool emit_stack_syms;
 };
 
 /* Descend the call graph for FUN, accumulating total stack required.  */
 
-static bfd_boolean
+static bool
 sum_stack (struct function_info *fun,
 	   struct bfd_link_info *info,
 	   void *param)
@@ -3971,25 +3968,25 @@ sum_stack (struct function_info *fun,
   struct function_info *max;
   size_t stack, cum_stack;
   const char *f1;
-  bfd_boolean has_call;
+  bool has_call;
   struct _sum_stack_param *sum_stack_param = param;
   struct spu_link_hash_table *htab;
 
   cum_stack = fun->stack;
   sum_stack_param->cum_stack = cum_stack;
   if (fun->visit3)
-    return TRUE;
+    return true;
 
-  has_call = FALSE;
+  has_call = false;
   max = NULL;
   for (call = fun->call_list; call; call = call->next)
     {
       if (call->broken_cycle)
 	continue;
       if (!call->is_pasted)
-	has_call = TRUE;
+	has_call = true;
       if (!sum_stack (call->fun, info, sum_stack_param))
-	return FALSE;
+	return false;
       stack = sum_stack_param->cum_stack;
       /* Include caller stack for normal calls, don't do so for
 	 tail calls.  fun->stack here is local stack usage for
@@ -4007,7 +4004,7 @@ sum_stack (struct function_info *fun,
   stack = fun->stack;
   /* Now fun->stack holds cumulative stack.  */
   fun->stack = cum_stack;
-  fun->visit3 = TRUE;
+  fun->visit3 = true;
 
   if (!fun->non_root
       && sum_stack_param->overall_stack < cum_stack)
@@ -4015,7 +4012,7 @@ sum_stack (struct function_info *fun,
 
   htab = spu_hash_table (info);
   if (htab->params->auto_overlay)
-    return TRUE;
+    return true;
 
   f1 = func_name (fun);
   if (htab->params->stack_analysis)
@@ -4046,14 +4043,14 @@ sum_stack (struct function_info *fun,
       struct elf_link_hash_entry *h;
 
       if (name == NULL)
-	return FALSE;
+	return false;
 
       if (fun->global || ELF_ST_BIND (fun->u.sym->st_info) == STB_GLOBAL)
 	sprintf (name, "__stack_%s", f1);
       else
 	sprintf (name, "__stack_%x_%s", fun->sec->id & 0xffffffff, f1);
 
-      h = elf_link_hash_lookup (&htab->elf, name, TRUE, TRUE, FALSE);
+      h = elf_link_hash_lookup (&htab->elf, name, true, true, false);
       free (name);
       if (h != NULL
 	  && (h->root.type == bfd_link_hash_new
@@ -4073,7 +4070,7 @@ sum_stack (struct function_info *fun,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* SEC is part of a pasted function.  Return the call_info for the
@@ -4103,7 +4100,7 @@ sort_bfds (const void *a, const void *b)
   bfd *const *abfd1 = a;
   bfd *const *abfd2 = b;
 
-  return filename_cmp ((*abfd1)->filename, (*abfd2)->filename);
+  return filename_cmp (bfd_get_filename (*abfd1), bfd_get_filename (*abfd2));
 }
 
 static unsigned int
@@ -4123,9 +4120,9 @@ print_one_overlay_section (FILE *script,
 
       if (fprintf (script, "   %s%c%s (%s)\n",
 		   (sec->owner->my_archive != NULL
-		    ? sec->owner->my_archive->filename : ""),
+		    ? bfd_get_filename (sec->owner->my_archive) : ""),
 		   info->path_separator,
-		   sec->owner->filename,
+		   bfd_get_filename (sec->owner),
 		   sec->name) <= 0)
 	return -1;
       if (sec->segment_mark)
@@ -4137,9 +4134,9 @@ print_one_overlay_section (FILE *script,
 	      sec = call_fun->sec;
 	      if (fprintf (script, "   %s%c%s (%s)\n",
 			   (sec->owner->my_archive != NULL
-			    ? sec->owner->my_archive->filename : ""),
+			    ? bfd_get_filename (sec->owner->my_archive) : ""),
 			   info->path_separator,
-			   sec->owner->filename,
+			   bfd_get_filename (sec->owner),
 			   sec->name) <= 0)
 		return -1;
 	      for (call = call_fun->call_list; call; call = call->next)
@@ -4155,9 +4152,9 @@ print_one_overlay_section (FILE *script,
       if (sec != NULL
 	  && fprintf (script, "   %s%c%s (%s)\n",
 		      (sec->owner->my_archive != NULL
-		       ? sec->owner->my_archive->filename : ""),
+		       ? bfd_get_filename (sec->owner->my_archive) : ""),
 		      info->path_separator,
-		      sec->owner->filename,
+		      bfd_get_filename (sec->owner),
 		      sec->name) <= 0)
 	return -1;
 
@@ -4172,9 +4169,9 @@ print_one_overlay_section (FILE *script,
 	      if (sec != NULL
 		  && fprintf (script, "   %s%c%s (%s)\n",
 			      (sec->owner->my_archive != NULL
-			       ? sec->owner->my_archive->filename : ""),
+			       ? bfd_get_filename (sec->owner->my_archive) : ""),
 			      info->path_separator,
-			      sec->owner->filename,
+			      bfd_get_filename (sec->owner),
 			      sec->name) <= 0)
 		return -1;
 	      for (call = call_fun->call_list; call; call = call->next)
@@ -4239,7 +4236,7 @@ spu_elf_auto_overlay (struct bfd_link_in
 
       sum_stack_param.emit_stack_syms = 0;
       sum_stack_param.overall_stack = 0;
-      if (!for_each_node (sum_stack, info, &sum_stack_param, TRUE))
+      if (!for_each_node (sum_stack, info, &sum_stack_param, true))
 	goto err_exit;
       reserved = (sum_stack_param.overall_stack
 		  + htab->params->extra_stack_space);
@@ -4261,7 +4258,7 @@ spu_elf_auto_overlay (struct bfd_link_in
   if (htab->params->ovly_flavour == ovly_soft_icache)
     ovly_mgr_entry = "__icache_br_handler";
   h = elf_link_hash_lookup (&htab->elf, ovly_mgr_entry,
-			    FALSE, FALSE, FALSE);
+			    false, false, false);
   if (h != NULL
       && (h->root.type == bfd_link_hash_defined
 	  || h->root.type == bfd_link_hash_defweak)
@@ -4279,7 +4276,7 @@ spu_elf_auto_overlay (struct bfd_link_in
 
   /* Mark overlay sections, and find max overlay section size.  */
   mos_param.max_overlay_size = 0;
-  if (!for_each_node (mark_overlay_section, info, &mos_param, TRUE))
+  if (!for_each_node (mark_overlay_section, info, &mos_param, true))
     goto err_exit;
 
   /* We can't put the overlay manager or interrupt routines in
@@ -4287,7 +4284,7 @@ spu_elf_auto_overlay (struct bfd_link_in
   uos_param.clearing = 0;
   if ((uos_param.exclude_input_section
        || uos_param.exclude_output_section)
-      && !for_each_node (unmark_overlay_section, info, &uos_param, TRUE))
+      && !for_each_node (unmark_overlay_section, info, &uos_param, true))
     goto err_exit;
 
   bfd_count = 0;
@@ -4321,7 +4318,7 @@ spu_elf_auto_overlay (struct bfd_link_in
 	  }
 	else if ((sec->flags & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)
 		 && sec->output_section->owner == info->output_bfd
-		 && strncmp (sec->output_section->name, ".ovl.init", 9) == 0)
+		 && startswith (sec->output_section->name, ".ovl.init"))
 	  fixed_size -= sec->size;
       if (count != old_count)
 	bfd_arr[bfd_count++] = ibfd;
@@ -4331,23 +4328,24 @@ spu_elf_auto_overlay (struct bfd_link_in
      section name, ensure that file names are unique.  */
   if (bfd_count > 1)
     {
-      bfd_boolean ok = TRUE;
+      bool ok = true;
 
       qsort (bfd_arr, bfd_count, sizeof (*bfd_arr), sort_bfds);
       for (i = 1; i < bfd_count; ++i)
-	if (filename_cmp (bfd_arr[i - 1]->filename, bfd_arr[i]->filename) == 0)
+	if (filename_cmp (bfd_get_filename (bfd_arr[i - 1]),
+			  bfd_get_filename (bfd_arr[i])) == 0)
 	  {
 	    if (bfd_arr[i - 1]->my_archive == bfd_arr[i]->my_archive)
 	      {
 		if (bfd_arr[i - 1]->my_archive && bfd_arr[i]->my_archive)
 		  /* xgettext:c-format */
 		  info->callbacks->einfo (_("%s duplicated in %s\n"),
-					  bfd_arr[i]->filename,
-					  bfd_arr[i]->my_archive->filename);
+					  bfd_get_filename (bfd_arr[i]),
+					  bfd_get_filename (bfd_arr[i]->my_archive));
 		else
 		  info->callbacks->einfo (_("%s duplicated\n"),
-					  bfd_arr[i]->filename);
-		ok = FALSE;
+					  bfd_get_filename (bfd_arr[i]));
+		ok = false;
 	      }
 	  }
       if (!ok)
@@ -4420,7 +4418,7 @@ spu_elf_auto_overlay (struct bfd_link_in
   if (ovly_sections == NULL)
     goto err_exit;
   ovly_p = ovly_sections;
-  if (!for_each_node (collect_overlays, info, &ovly_p, TRUE))
+  if (!for_each_node (collect_overlays, info, &ovly_p, true))
     goto err_exit;
   count = (size_t) (ovly_p - ovly_sections) / 2;
   ovly_map = bfd_malloc (count * sizeof (*ovly_map));
@@ -4697,17 +4695,17 @@ spu_elf_auto_overlay (struct bfd_link_in
 
 /* Provide an estimate of total stack required.  */
 
-static bfd_boolean
+static bool
 spu_elf_stack_analysis (struct bfd_link_info *info)
 {
   struct spu_link_hash_table *htab;
   struct _sum_stack_param sum_stack_param;
 
   if (!discover_functions (info))
-    return FALSE;
+    return false;
 
   if (!build_call_tree (info))
-    return FALSE;
+    return false;
 
   htab = spu_hash_table (info);
   if (htab->params->stack_analysis)
@@ -4719,18 +4717,18 @@ spu_elf_stack_analysis (struct bfd_link_
 
   sum_stack_param.emit_stack_syms = htab->params->emit_stack_syms;
   sum_stack_param.overall_stack = 0;
-  if (!for_each_node (sum_stack, info, &sum_stack_param, TRUE))
-    return FALSE;
+  if (!for_each_node (sum_stack, info, &sum_stack_param, true))
+    return false;
 
   if (htab->params->stack_analysis)
     info->callbacks->info (_("Maximum stack required is 0x%v\n"),
 			   (bfd_vma) sum_stack_param.overall_stack);
-  return TRUE;
+  return true;
 }
 
 /* Perform a final link.  */
 
-static bfd_boolean
+static bool
 spu_elf_final_link (bfd *output_bfd, struct bfd_link_info *info)
 {
   struct spu_link_hash_table *htab = spu_hash_table (info);
@@ -4840,10 +4838,10 @@ spu_elf_relocate_section (bfd *output_bf
   Elf_Internal_Rela *rel, *relend;
   struct spu_link_hash_table *htab;
   asection *ea;
-  int ret = TRUE;
-  bfd_boolean emit_these_relocs = FALSE;
-  bfd_boolean is_ea_sym;
-  bfd_boolean stubs;
+  int ret = true;
+  bool emit_these_relocs = false;
+  bool is_ea_sym;
+  bool stubs;
   unsigned int iovl = 0;
 
   htab = spu_hash_table (info);
@@ -4868,13 +4866,13 @@ spu_elf_relocate_section (bfd *output_bf
       bfd_vma relocation;
       bfd_vma addend;
       bfd_reloc_status_type r;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       enum _stub_type stub_type;
 
       r_symndx = ELF32_R_SYM (rel->r_info);
       r_type = ELF32_R_TYPE (rel->r_info);
       howto = elf_howto_table + r_type;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
       h = NULL;
       sym = NULL;
       sec = NULL;
@@ -4888,7 +4886,7 @@ spu_elf_relocate_section (bfd *output_bf
       else
 	{
 	  if (sym_hashes == NULL)
-	    return FALSE;
+	    return false;
 
 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
 
@@ -4912,7 +4910,7 @@ spu_elf_relocate_section (bfd *output_bf
 		   relocation value for this symbol.  output_section
 		   is typically NULL for symbols satisfied by a shared
 		   library.  */
-		unresolved_reloc = TRUE;
+		unresolved_reloc = true;
 	      else
 		relocation = (h->root.u.def.value
 			      + sec->output_section->vma
@@ -4926,14 +4924,15 @@ spu_elf_relocate_section (bfd *output_bf
 	  else if (!bfd_link_relocatable (info)
 		   && !(r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64))
 	    {
-	      bfd_boolean err;
-	      err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
-		     || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT);
-	      (*info->callbacks->undefined_symbol) (info,
-						    h->root.root.string,
-						    input_bfd,
-						    input_section,
-						    rel->r_offset, err);
+	      bool err;
+
+	      err = (info->unresolved_syms_in_objects == RM_DIAGNOSE
+		     && !info->warn_unresolved_syms)
+		|| ELF_ST_VISIBILITY (h->other) != STV_DEFAULT;
+
+	      info->callbacks->undefined_symbol
+		(info, h->root.root.string, input_bfd,
+		 input_section, rel->r_offset, err);
 	    }
 	  sym_name = h->root.root.string;
 	}
@@ -5037,11 +5036,11 @@ spu_elf_relocate_section (bfd *output_bf
 				+ elf_section_data (ea)->this_hdr.sh_offset);
 	      rel->r_info = ELF32_R_INFO (0, r_type);
 	    }
-	  emit_these_relocs = TRUE;
+	  emit_these_relocs = true;
 	  continue;
 	}
       else if (is_ea_sym)
-	unresolved_reloc = TRUE;
+	unresolved_reloc = true;
 
       if (unresolved_reloc
 	  && _bfd_elf_section_offset (output_bfd, info, input_section,
@@ -5056,7 +5055,7 @@ spu_elf_relocate_section (bfd *output_bf
 	     (uint64_t) rel->r_offset,
 	     howto->name,
 	     sym_name);
-	  ret = FALSE;
+	  ret = false;
 	}
 
       r = _bfd_final_link_relocate (howto,
@@ -5079,7 +5078,7 @@ spu_elf_relocate_section (bfd *output_bf
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, sym_name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, sym_name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -5099,7 +5098,7 @@ spu_elf_relocate_section (bfd *output_bf
 	      /* fall through */
 
 	    common_error:
-	      ret = FALSE;
+	      ret = false;
 	      (*info->callbacks->warning) (info, msg, sym_name, input_bfd,
 					   input_section, rel->r_offset);
 	      break;
@@ -5134,11 +5133,11 @@ spu_elf_relocate_section (bfd *output_bf
   return ret;
 }
 
-static bfd_boolean
+static bool
 spu_elf_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				 struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* Adjust _SPUEAR_ syms to point at their overlay stubs.  */
@@ -5158,7 +5157,7 @@ spu_elf_output_symbol_hook (struct bfd_l
       && (h->root.type == bfd_link_hash_defined
 	  || h->root.type == bfd_link_hash_defweak)
       && h->def_regular
-      && strncmp (h->root.root.string, "_SPUEAR_", 8) == 0)
+      && startswith (h->root.root.string, "_SPUEAR_"))
     {
       struct got_entry *g;
 
@@ -5188,11 +5187,11 @@ spu_elf_plugin (int val)
 
 /* Set ELF header e_type for plugins.  */
 
-static bfd_boolean
+static bool
 spu_elf_init_file_header (bfd *abfd, struct bfd_link_info *info)
 {
   if (!_bfd_elf_init_file_header (abfd, info))
-    return FALSE;
+    return false;
 
   if (spu_plugin)
     {
@@ -5200,7 +5199,7 @@ spu_elf_init_file_header (bfd *abfd, str
 
       i_ehdrp->e_type = ET_DYN;
     }
-  return TRUE;
+  return true;
 }
 
 /* We may add an extra PT_LOAD segment for .toe.  We also need extra
@@ -5231,7 +5230,7 @@ spu_elf_additional_program_headers (bfd
 /* Remove .toe section from other PT_LOAD segments and put it in
    a segment of its own.  Put overlays in separate segments too.  */
 
-static bfd_boolean
+static bool
 spu_elf_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
 {
   asection *toe, *s;
@@ -5240,7 +5239,7 @@ spu_elf_modify_segment_map (bfd *abfd, s
   unsigned int i;
 
   if (info == NULL)
-    return TRUE;
+    return true;
 
   toe = bfd_get_section_by_name (abfd, ".toe");
   for (m = elf_seg_map (abfd); m != NULL; m = m->next)
@@ -5258,7 +5257,7 @@ spu_elf_modify_segment_map (bfd *abfd, s
 		amt += (m->count - (i + 2)) * sizeof (m->sections[0]);
 		m2 = bfd_zalloc (abfd, amt);
 		if (m2 == NULL)
-		  return FALSE;
+		  return false;
 		m2->count = m->count - (i + 1);
 		memcpy (m2->sections, m->sections + i + 1,
 			m2->count * sizeof (m->sections[0]));
@@ -5273,7 +5272,7 @@ spu_elf_modify_segment_map (bfd *abfd, s
 		amt = sizeof (struct elf_segment_map);
 		m2 = bfd_zalloc (abfd, amt);
 		if (m2 == NULL)
-		  return FALSE;
+		  return false;
 		m2->p_type = PT_LOAD;
 		m2->count = 1;
 		m2->sections[0] = s;
@@ -5331,24 +5330,24 @@ spu_elf_modify_segment_map (bfd *abfd, s
       *p = m_overlay;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Tweak the section type of .note.spu_name.  */
 
-static bfd_boolean
+static bool
 spu_elf_fake_sections (bfd *obfd ATTRIBUTE_UNUSED,
 		       Elf_Internal_Shdr *hdr,
 		       asection *sec)
 {
   if (strcmp (sec->name, SPU_PTNOTE_SPUNAME) == 0)
     hdr->sh_type = SHT_NOTE;
-  return TRUE;
+  return true;
 }
 
 /* Tweak phdrs before writing them out.  */
 
-static int
+static bool
 spu_elf_modify_headers (bfd *abfd, struct bfd_link_info *info)
 {
   if (info != NULL)
@@ -5444,7 +5443,7 @@ spu_elf_modify_headers (bfd *abfd, struc
   return _bfd_elf_modify_headers (abfd, info);
 }
 
-bfd_boolean
+bool
 spu_elf_size_sections (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
 {
   struct spu_link_hash_table *htab = spu_hash_table (info);
@@ -5480,7 +5479,7 @@ spu_elf_size_sections (bfd *obfd ATTRIBU
 		_bfd_elf_link_read_relocs (ibfd, isec, NULL, NULL,
 					   info->keep_memory);
 	      if (internal_relocs == NULL)
-		return FALSE;
+		return false;
 
 	      /* 1 quadword can contain up to 4 R_SPU_ADDR32
 		 relocations.  They are stored in a single word by
@@ -5503,12 +5502,12 @@ spu_elf_size_sections (bfd *obfd ATTRIBU
       /* We always have a NULL fixup as a sentinel */
       size = (fixup_count + 1) * FIXUP_RECORD_SIZE;
       if (!bfd_set_section_size (sfixup, size))
-	return FALSE;
+	return false;
       sfixup->contents = (bfd_byte *) bfd_zalloc (info->input_bfds, size);
       if (sfixup->contents == NULL)
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 #define TARGET_BIG_SYM		spu_elf32_vec
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-spu.h ./bfd/elf32-spu.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-spu.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-spu.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 /* SPU specific support for 32-bit ELF.
 
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -115,10 +115,9 @@ struct _ovl_stream
 
 extern void spu_elf_setup (struct bfd_link_info *, struct spu_elf_params *);
 extern void spu_elf_plugin (int);
-extern bfd_boolean spu_elf_open_builtin_lib (bfd **,
-					     const struct _ovl_stream *);
-extern bfd_boolean spu_elf_create_sections (struct bfd_link_info *);
-extern bfd_boolean spu_elf_size_sections (bfd *, struct bfd_link_info *);
+extern bool spu_elf_open_builtin_lib (bfd **, const struct _ovl_stream *);
+extern bool spu_elf_create_sections (struct bfd_link_info *);
+extern bool spu_elf_size_sections (bfd *, struct bfd_link_info *);
 extern int spu_elf_find_overlays (struct bfd_link_info *);
 extern int spu_elf_size_stubs (struct bfd_link_info *);
 extern void spu_elf_place_overlay_data (struct bfd_link_info *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tic6x.c ./bfd/elf32-tic6x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tic6x.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-tic6x.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for TI C6X
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2024 Free Software Foundation, Inc.
    Contributed by Joseph Myers <joseph@codesourcery.com>
 		  Bernd Schmidt  <bernds@codesourcery.com>
 
@@ -46,9 +46,6 @@ struct elf32_tic6x_link_hash_table
   /* C6X specific command line arguments.  */
   struct elf32_tic6x_params params;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* The output BFD, for convenience.  */
   bfd *obfd;
 
@@ -61,16 +58,6 @@ struct elf32_tic6x_link_hash_table
 #define elf32_tic6x_hash_table(p) \
   ((struct elf32_tic6x_link_hash_table *) ((p)->hash))
 
-/* TI C6X ELF linker hash entry.  */
-
-struct elf32_tic6x_link_hash_entry
-{
-  struct elf_link_hash_entry elf;
-
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-};
-
 typedef enum
 {
   DELETE_EXIDX_ENTRY,
@@ -124,7 +111,7 @@ struct elf32_tic6x_obj_tdata
   /* Whether to use RELA relocations when generating relocations.
      This is a per-object flag to allow the assembler to generate REL
      relocations for use in linker testcases.  */
-  bfd_boolean use_rela_p;
+  bool use_rela_p;
 };
 
 #define elf32_tic6x_tdata(abfd) \
@@ -141,414 +128,417 @@ struct elf32_tic6x_obj_tdata
    faster assembler code.  This is what we use for the small common
    section.  This approach is copied from ecoff.c.  */
 static asection tic6x_elf_scom_section;
-static asymbol  tic6x_elf_scom_symbol;
-static asymbol  *tic6x_elf_scom_symbol_ptr;
+static const asymbol tic6x_elf_scom_symbol =
+  GLOBAL_SYM_INIT (".scommon", &tic6x_elf_scom_section);
+static asection tic6x_elf_scom_section =
+  BFD_FAKE_SECTION (tic6x_elf_scom_section, &tic6x_elf_scom_symbol,
+		    ".scommon", 0, SEC_IS_COMMON | SEC_SMALL_DATA);
 
 static reloc_howto_type elf32_tic6x_howto_table[] =
 {
   HOWTO (R_C6000_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_ABS32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_ABS16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_ABS8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_PCR_S21,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_S21",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0fffff80,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_PCR_S12,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 16,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_S12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0fff0000,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_PCR_S10,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 13,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_S10",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fe000,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_PCR_S7,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 16,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_S7",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007f0000,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_ABS_S16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS_S16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_ABS_L16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS_L16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_ABS_H16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS_H16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_U15_B,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_U15_B",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_U15_H,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_U15_H",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_U15_W,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_U15_W",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_S16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_S16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_L16_B,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_L16_B",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_L16_H,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_L16_H",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_L16_W,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_L16_W",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_H16_B,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_H16_B",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_H16_H,	/* type */
 	 17,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_H16_H",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_H16_W,	/* type */
 	 18,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_H16_W",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_GOT_U15_W,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_GOT_U15_W",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_GOT_L16_W,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_GOT_L16_W",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_GOT_H16_W,	/* type */
 	 18,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_GOT_H16_W",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_DSBT_INDEX,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_DSBT_INDEX",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_PREL31,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 31,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PREL31",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x7fffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_COPY,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_COPY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_JUMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_JUMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_EHTYPE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_EHTYPE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_PCR_H16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_H16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_PCR_L16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_L16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   EMPTY_HOWTO (31),
   EMPTY_HOWTO (32),
   EMPTY_HOWTO (33),
@@ -773,364 +763,364 @@ static reloc_howto_type elf32_tic6x_howt
   EMPTY_HOWTO (252),
   HOWTO (R_C6000_ALIGN,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ALIGN",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_FPHEAD,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_FPHEAD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_NOCMP,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_NOCMP",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false)			/* pcrel_offset */
 };
 
 static reloc_howto_type elf32_tic6x_howto_table_rel[] =
 {
   HOWTO (R_C6000_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_NONE",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_ABS32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_ABS16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_ABS8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS8",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_PCR_S21,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_S21",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0fffff80,		/* src_mask */
 	 0x0fffff80,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_PCR_S12,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 16,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_S12",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0fff0000,		/* src_mask */
 	 0x0fff0000,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_PCR_S10,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 13,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_S10",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fe000,		/* src_mask */
 	 0x007fe000,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_PCR_S7,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 16,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PCR_S7",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007f0000,		/* src_mask */
 	 0x007f0000,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_ABS_S16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS_S16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff80,		/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_ABS_L16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ABS_L16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff80,		/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   EMPTY_HOWTO (R_C6000_ABS_H16),
   HOWTO (R_C6000_SBR_U15_B,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_U15_B",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff00,		/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_U15_H,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_U15_H",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff00,		/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_U15_W,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_U15_W",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff00,		/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_S16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_S16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff80,		/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_L16_B,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_L16_B",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff80,		/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_L16_H,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_L16_H",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff80,		/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_L16_W,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_L16_W",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff80,		/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   EMPTY_HOWTO (R_C6000_SBR_H16_B),
   EMPTY_HOWTO (R_C6000_SBR_H16_H),
   EMPTY_HOWTO (R_C6000_SBR_H16_W),
   HOWTO (R_C6000_SBR_GOT_U15_W,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_GOT_U15_W",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff00,		/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_SBR_GOT_L16_W,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 7,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_SBR_GOT_L16_W",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fff80,		/* src_mask */
 	 0x007fff80,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   EMPTY_HOWTO (R_C6000_SBR_GOT_H16_W),
   HOWTO (R_C6000_DSBT_INDEX,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 8,			/* bitpos */
 	 complain_overflow_unsigned,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_DSBT_INDEX",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fff00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_PREL31,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 31,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_PREL31",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x7fffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
   HOWTO (R_C6000_COPY,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_COPY",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_JUMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_JUMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_EHTYPE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_EHTYPE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   EMPTY_HOWTO (R_C6000_PCR_H16),
   EMPTY_HOWTO (R_C6000_PCR_L16),
   EMPTY_HOWTO (31),
@@ -1357,43 +1347,43 @@ static reloc_howto_type elf32_tic6x_howt
   EMPTY_HOWTO (252),
   HOWTO (R_C6000_ALIGN,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_ALIGN",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_FPHEAD,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_FPHEAD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_C6000_NOCMP,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_C6000_NOCMP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false)			/* pcrel_offset */
 };
 
 /* Map BFD relocations to ELF relocations.  */
@@ -1495,7 +1485,7 @@ elf32_tic6x_reloc_name_lookup (bfd *abfd
   return NULL;
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *bfd_reloc,
 			   Elf_Internal_Rela *elf_reloc)
 {
@@ -1508,7 +1498,7 @@ elf32_tic6x_info_to_howto (bfd *abfd ATT
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   bfd_reloc->howto = &elf32_tic6x_howto_table[r_type];
@@ -1518,13 +1508,13 @@ elf32_tic6x_info_to_howto (bfd *abfd ATT
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED, arelent *bfd_reloc,
 			       Elf_Internal_Rela *elf_reloc)
 {
@@ -1537,7 +1527,7 @@ elf32_tic6x_info_to_howto_rel (bfd *abfd
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   bfd_reloc->howto = &elf32_tic6x_howto_table_rel[r_type];
@@ -1547,63 +1537,33 @@ elf32_tic6x_info_to_howto_rel (bfd *abfd
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 void
-elf32_tic6x_set_use_rela_p (bfd *abfd, bfd_boolean use_rela_p)
+elf32_tic6x_set_use_rela_p (bfd *abfd, bool use_rela_p)
 {
   elf32_tic6x_tdata (abfd)->use_rela_p = use_rela_p;
 }
 
-/* Create an entry in a C6X ELF linker hash table.  */
-
-static struct bfd_hash_entry *
-elf32_tic6x_link_hash_newfunc (struct bfd_hash_entry *entry,
-			    struct bfd_hash_table *table,
-			    const char *string)
-{
-  /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
-  if (entry == NULL)
-    {
-      entry = bfd_hash_allocate (table,
-				 sizeof (struct elf32_tic6x_link_hash_entry));
-      if (entry == NULL)
-	return entry;
-    }
-
-  /* Call the allocation method of the superclass.  */
-  entry = _bfd_elf_link_hash_newfunc (entry, table, string);
-  if (entry != NULL)
-    {
-      struct elf32_tic6x_link_hash_entry *eh;
-
-      eh = (struct elf32_tic6x_link_hash_entry *) entry;
-      eh->dyn_relocs = NULL;
-    }
-
-  return entry;
-}
-
 /* Create a C6X ELF linker hash table.  */
 
 static struct bfd_link_hash_table *
 elf32_tic6x_link_hash_table_create (bfd *abfd)
 {
   struct elf32_tic6x_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf32_tic6x_link_hash_table);
+  size_t amt = sizeof (struct elf32_tic6x_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
     return NULL;
 
   if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd,
-				      elf32_tic6x_link_hash_newfunc,
-				      sizeof (struct elf32_tic6x_link_hash_entry),
+				      _bfd_elf_link_hash_newfunc,
+				      sizeof (struct elf_link_hash_entry),
 				      TIC6X_ELF_DATA))
     {
       free (ret);
@@ -1616,7 +1576,7 @@ elf32_tic6x_link_hash_table_create (bfd
   return &ret->elf.root;
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   if (bfd_link_pic (info))
@@ -1636,9 +1596,9 @@ elf32_tic6x_final_link (bfd *abfd, struc
     }
   /* Invoke the regular ELF backend linker to do all the work.  */
   if (!bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Called to pass PARAMS to the backend.  We store them in the hash table
@@ -1654,7 +1614,7 @@ elf32_tic6x_setup (struct bfd_link_info
 
 /* Determine if we're dealing with a DSBT object.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_using_dsbt (bfd *abfd)
 {
   return bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_PROC,
@@ -1665,7 +1625,7 @@ elf32_tic6x_using_dsbt (bfd *abfd)
    sections in DYNOBJ, and set up shortcuts to them in our hash
    table.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf32_tic6x_link_hash_table *htab;
@@ -1673,10 +1633,10 @@ elf32_tic6x_create_dynamic_sections (bfd
 
   htab = elf32_tic6x_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
-    return FALSE;
+    return false;
 
   /* Create .dsbt  */
   flags = (SEC_ALLOC | SEC_LOAD
@@ -1686,20 +1646,20 @@ elf32_tic6x_create_dynamic_sections (bfd
   if (htab->dsbt == NULL
       || !bfd_set_section_alignment (htab->dsbt, 2)
       || !bfd_set_section_alignment (htab->elf.splt, 5))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_mkobject (bfd *abfd)
 {
-  bfd_boolean ret;
+  bool ret;
 
   ret = bfd_elf_allocate_object (abfd, sizeof (struct elf32_tic6x_obj_tdata),
 				 TIC6X_ELF_DATA);
   if (ret)
-    elf32_tic6x_set_use_rela_p (abfd, TRUE);
+    elf32_tic6x_set_use_rela_p (abfd, true);
   return ret;
 }
 
@@ -1749,7 +1709,7 @@ elf32_tic6x_make_got_dynreloc (bfd *outp
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_finish_dynamic_symbol (bfd * output_bfd,
 				   struct bfd_link_info *info,
 				   struct elf_link_hash_entry *h,
@@ -1921,28 +1881,28 @@ elf32_tic6x_finish_dynamic_symbol (bfd *
       || h == elf_hash_table (info)->hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Unwinding tables are not referenced directly.  This pass marks them as
    required if the corresponding code section is marked.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_gc_mark_extra_sections (struct bfd_link_info *info,
 				    elf_gc_mark_hook_fn gc_mark_hook)
 {
   bfd *sub;
   Elf_Internal_Shdr **elf_shdrp;
-  bfd_boolean again;
+  bool again;
 
   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
 
   /* Marking EH data may cause additional code sections to be marked,
      requiring multiple passes.  */
-  again = TRUE;
+  again = true;
   while (again)
     {
-      again = FALSE;
+      again = false;
       for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
 	{
 	  asection *o;
@@ -1962,31 +1922,31 @@ elf32_tic6x_gc_mark_extra_sections (stru
 		  && !o->gc_mark
 		  && elf_shdrp[hdr->sh_link]->bfd_section->gc_mark)
 		{
-		  again = TRUE;
+		  again = true;
 		  if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
-		    return FALSE;
+		    return false;
 		}
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if this is an unwinding table index.  */
 
-static bfd_boolean
+static bool
 is_tic6x_elf_unwind_section_name (const char *name)
 {
-  return (CONST_STRNEQ (name, ELF_STRING_C6000_unwind)
-	  || CONST_STRNEQ (name, ELF_STRING_C6000_unwind_once));
+  return (startswith (name, ELF_STRING_C6000_unwind)
+	  || startswith (name, ELF_STRING_C6000_unwind_once));
 }
 
 
 /* Set the type and flags for an unwinding index table.  We do this by
    the section name, which is a hack, but ought to work.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 			   Elf_Internal_Shdr *hdr, asection *sec)
 {
@@ -2000,26 +1960,7 @@ elf32_tic6x_fake_sections (bfd *abfd ATT
       hdr->sh_flags |= SHF_LINK_ORDER;
     }
 
-  return TRUE;
-}
-
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-  struct elf32_tic6x_link_hash_entry *eh
-    = (struct elf32_tic6x_link_hash_entry *) h;
-
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -2028,7 +1969,7 @@ readonly_dynrelocs (struct elf_link_hash
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_adjust_dynamic_symbol (struct bfd_link_info *info,
 				   struct elf_link_hash_entry *h)
 {
@@ -2064,7 +2005,7 @@ elf32_tic6x_adjust_dynamic_symbol (struc
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
 
   /* If this is a weak symbol, and there is a real definition, the
@@ -2077,7 +2018,7 @@ elf32_tic6x_adjust_dynamic_symbol (struc
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
       h->non_got_ref = def->non_got_ref;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2088,23 +2029,23 @@ elf32_tic6x_adjust_dynamic_symbol (struc
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   htab = elf32_tic6x_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -2138,20 +2079,20 @@ elf32_tic6x_adjust_dynamic_symbol (struc
   return _bfd_elf_adjust_dynamic_copy (info, h, s);
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_new_section_hook (bfd *abfd, asection *sec)
 {
-  bfd_boolean ret;
+  bool ret;
 
   /* Allocate target specific section data.  */
   if (!sec->used_by_bfd)
     {
       _tic6x_elf_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = (_tic6x_elf_section_data *) bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -2165,7 +2106,7 @@ elf32_tic6x_new_section_hook (bfd *abfd,
    than RELA relocation.  RELOCS is the first relocation in the
    section and ABFD is the bfd that contains SEC.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_rel_relocation_p (bfd *abfd, asection *sec,
 			      const Elf_Internal_Rela *relocs,
 			      const Elf_Internal_Rela *rel)
@@ -2177,7 +2118,7 @@ elf32_tic6x_rel_relocation_p (bfd *abfd,
      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
   rel_hdr = elf_section_data (sec)->rel.hdr;
   if (rel_hdr == NULL)
-    return FALSE;
+    return false;
   bed = get_elf_backend_data (abfd);
   return ((size_t) (rel - relocs)
 	  < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
@@ -2185,7 +2126,7 @@ elf32_tic6x_rel_relocation_p (bfd *abfd,
 
 /* We need dynamic symbols for every section, since segments can
    relocate independently.  */
-static bfd_boolean
+static bool
 elf32_tic6x_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
 				      struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				      asection *p)
@@ -2197,16 +2138,16 @@ elf32_tic6x_link_omit_section_dynsym (bf
       /* If sh_type is yet undecided, assume it could be
 	 SHT_PROGBITS/SHT_NOBITS.  */
     case SHT_NULL:
-      return FALSE;
+      return false;
 
       /* There shouldn't be section relative relocations
 	 against any other section.  */
     default:
-      return TRUE;
+      return true;
     }
 }
 
-static bfd_boolean
+static int
 elf32_tic6x_relocate_section (bfd *output_bfd,
 			      struct bfd_link_info *info,
 			      bfd *input_bfd,
@@ -2222,7 +2163,7 @@ elf32_tic6x_relocate_section (bfd *outpu
   bfd_vma *local_got_offsets;
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
 
   htab = elf32_tic6x_hash_table (info);
   symtab_hdr = & elf_symtab_hdr (input_bfd);
@@ -2241,11 +2182,11 @@ elf32_tic6x_relocate_section (bfd *outpu
       asection *sec;
       struct elf_link_hash_entry *h;
       bfd_vma off, off2, relocation;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_reloc_status_type r;
       struct bfd_link_hash_entry *sbh;
-      bfd_boolean is_rel;
-      bfd_boolean res;
+      bool is_rel;
+      bool res;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       r_symndx = ELF32_R_SYM (rel->r_info);
@@ -2261,13 +2202,13 @@ elf32_tic6x_relocate_section (bfd *outpu
       if (!res || (howto = bfd_reloc.howto) == NULL)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -2277,7 +2218,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -2353,7 +2294,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 	  relocation += (input_section->output_section->vma
 			 + input_section->output_offset
 			 + rel->r_offset) & 0x1f;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_C6000_PCR_H16:
@@ -2392,24 +2333,24 @@ elf32_tic6x_relocate_section (bfd *outpu
 		  || h->root.type != bfd_link_hash_undefweak))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 	      asection *sreloc;
 
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 
 	      sreloc = elf_section_data (input_section)->sreloc;
 	      BFD_ASSERT (sreloc != NULL && sreloc->contents != NULL);
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -2435,7 +2376,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 		  else if (sec == NULL || sec->owner == NULL)
 		    {
 		      bfd_set_error (bfd_error_bad_value);
-		      return FALSE;
+		      return false;
 		    }
 		  else
 		    {
@@ -2473,7 +2414,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 	case R_C6000_SBR_H16_H:
 	case R_C6000_SBR_H16_W:
 	  sbh = bfd_link_hash_lookup (info->hash, "__c6xabi_DSBT_BASE",
-				      FALSE, FALSE, TRUE);
+				      false, false, true);
 	  if (sbh != NULL
 	      && (sbh->type == bfd_link_hash_defined
 		  || sbh->type == bfd_link_hash_defweak))
@@ -2493,7 +2434,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 	      _bfd_error_handler (_("%pB: SB-relative relocation but "
 				    "__c6xabi_DSBT_BASE not defined"),
 				  input_bfd);
-	      ok = FALSE;
+	      ok = false;
 	      continue;
 	    }
 	  break;
@@ -2509,7 +2450,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      dyn = htab->elf.dynamic_sections_created;
@@ -2551,7 +2492,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -2619,7 +2560,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 		   : _("[whose name is lost]"));
 
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 
@@ -2642,7 +2583,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      input_bfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ok = FALSE;
+	  ok = false;
 	  continue;
 	}
 
@@ -2681,7 +2622,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 						      symtab_hdr->sh_link,
 						      sym->st_name);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      if (*name == '\0')
 		name = bfd_section_name (sec);
 	    }
@@ -2701,7 +2642,7 @@ elf32_tic6x_relocate_section (bfd *outpu
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol) (info, name, input_bfd,
 						    input_section,
-						    rel->r_offset, TRUE);
+						    rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -2737,7 +2678,7 @@ elf32_tic6x_relocate_section (bfd *outpu
    calculate needed space in the global offset table, procedure linkage
    table, and dynamic reloc sections.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			  asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -2749,7 +2690,7 @@ elf32_tic6x_check_relocs (bfd *abfd, str
   asection *sreloc;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = elf32_tic6x_hash_table (info);
   symtab_hdr = &elf_symtab_hdr (abfd);
@@ -2761,7 +2702,7 @@ elf32_tic6x_check_relocs (bfd *abfd, str
       && ! htab->elf.dynamic_sections_created)
     {
       if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
-	return FALSE;
+	return false;
     }
 
   sreloc = NULL;
@@ -2782,16 +2723,16 @@ elf32_tic6x_check_relocs (bfd *abfd, str
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: bad symbol index: %d"),
 			      abfd, r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* A local symbol.  */
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 					abfd, r_symndx);
 	  if (isym == NULL)
-	    return FALSE;
+	    return false;
 	  h = NULL;
 	}
       else
@@ -2847,7 +2788,7 @@ elf32_tic6x_check_relocs (bfd *abfd, str
 			   + sizeof (bfd_vma) + sizeof(char));
 		  local_got_refcounts = bfd_zalloc (abfd, size);
 		  if (local_got_refcounts == NULL)
-		    return FALSE;
+		    return false;
 		  elf_local_got_refcounts (abfd) = local_got_refcounts;
 		}
 	      local_got_refcounts[r_symndx] += 1;
@@ -2858,7 +2799,7 @@ elf32_tic6x_check_relocs (bfd *abfd, str
 	      if (htab->elf.dynobj == NULL)
 		htab->elf.dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -2914,17 +2855,17 @@ elf32_tic6x_check_relocs (bfd *abfd, str
 		    htab->elf.dynobj = abfd;
 
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 2, abfd, /*rela? */ TRUE);
+		    (sec, htab->elf.dynobj, 2, abfd, /*rela? */ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
 		{
-		  head = &((struct elf32_tic6x_link_hash_entry *) h)->dyn_relocs;
+		  head = &h->dyn_relocs;
 		}
 	      else
 		{
@@ -2945,10 +2886,10 @@ elf32_tic6x_check_relocs (bfd *abfd, str
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 		  p = bfd_alloc (htab->elf.dynobj, amt);
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -2981,8 +2922,8 @@ elf32_tic6x_check_relocs (bfd *abfd, str
 						   "__c6xabi_DSBT_BASE",
 						   BSF_GLOBAL,
 						   bfd_und_section_ptr, 0,
-						   NULL, FALSE, FALSE, &bh))
-	      return FALSE;
+						   NULL, false, false, &bh))
+	      return false;
 	    ((struct elf_link_hash_entry *) bh)->non_elf = 0;
 	  }
 	  if (h != NULL && bfd_link_executable (info))
@@ -2998,10 +2939,10 @@ elf32_tic6x_check_relocs (bfd *abfd, str
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_add_symbol_hook (bfd *abfd,
 			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			     Elf_Internal_Sym *sym,
@@ -3014,13 +2955,13 @@ elf32_tic6x_add_symbol_hook (bfd *abfd,
     {
     case SHN_TIC6X_SCOMMON:
       *secp = bfd_make_section_old_way (abfd, ".scommon");
-      (*secp)->flags |= SEC_IS_COMMON;
+      (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
       *valp = sym->st_size;
       bfd_set_section_alignment (*secp, bfd_log2 (sym->st_value));
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -3032,19 +2973,6 @@ elf32_tic6x_symbol_processing (bfd *abfd
   switch (elfsym->internal_elf_sym.st_shndx)
     {
     case SHN_TIC6X_SCOMMON:
-      if (tic6x_elf_scom_section.name == NULL)
-	{
-	  /* Initialize the small common section.  */
-	  tic6x_elf_scom_section.name = ".scommon";
-	  tic6x_elf_scom_section.flags = SEC_IS_COMMON;
-	  tic6x_elf_scom_section.output_section = &tic6x_elf_scom_section;
-	  tic6x_elf_scom_section.symbol = &tic6x_elf_scom_symbol;
-	  tic6x_elf_scom_section.symbol_ptr_ptr = &tic6x_elf_scom_symbol_ptr;
-	  tic6x_elf_scom_symbol.name = ".scommon";
-	  tic6x_elf_scom_symbol.flags = BSF_SECTION_SYM;
-	  tic6x_elf_scom_symbol.section = &tic6x_elf_scom_section;
-	  tic6x_elf_scom_symbol_ptr = &tic6x_elf_scom_symbol;
-	}
       asym->section = &tic6x_elf_scom_section;
       asym->value = elfsym->internal_elf_sym.st_size;
       break;
@@ -3067,7 +2995,7 @@ elf32_tic6x_link_output_symbol_hook (str
   return 1;
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
 				      asection *sec,
 				      int *retval)
@@ -3075,27 +3003,25 @@ elf32_tic6x_section_from_bfd_section (bf
   if (strcmp (bfd_section_name (sec), ".scommon") == 0)
     {
       *retval = SHN_TIC6X_SCOMMON;
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
   struct elf32_tic6x_link_hash_table *htab;
-  struct elf32_tic6x_link_hash_entry *eh;
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
-  eh = (struct elf32_tic6x_link_hash_entry *) h;
   info = (struct bfd_link_info *) inf;
   htab = elf32_tic6x_hash_table (info);
 
@@ -3106,7 +3032,7 @@ elf32_tic6x_allocate_dynrelocs (struct e
       if (h->dynindx == -1 && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (bfd_link_pic (info)
@@ -3162,7 +3088,7 @@ elf32_tic6x_allocate_dynrelocs (struct e
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->elf.sgot;
@@ -3176,8 +3102,8 @@ elf32_tic6x_allocate_dynrelocs (struct e
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* Discard relocs on undefined weak syms with non-default
      visibility.  */
@@ -3189,7 +3115,7 @@ elf32_tic6x_allocate_dynrelocs (struct e
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -3200,11 +3126,11 @@ elf32_tic6x_allocate_dynrelocs (struct e
 	    }
 	}
 
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -3212,13 +3138,13 @@ elf32_tic6x_allocate_dynrelocs (struct e
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc;
 
@@ -3228,45 +3154,18 @@ elf32_tic6x_allocate_dynrelocs (struct e
       sreloc->size += p->count * sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   struct elf32_tic6x_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
   htab = elf32_tic6x_hash_table (info);
@@ -3356,10 +3255,10 @@ elf32_tic6x_size_dynamic_sections (bfd *
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
-      bfd_boolean strip_section = TRUE;
+      bool strip_section = true;
 
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
@@ -3379,17 +3278,17 @@ elf32_tic6x_size_dynamic_sections (bfd *
 	     It's too late to tell BFD to get rid of the symbols.  */
 
 	  if (htab->elf.hplt != NULL)
-	    strip_section = FALSE;
+	    strip_section = false;
 
 	  /* Round up the size of the PLT section to a multiple of 32.  */
 	  if (s == htab->elf.splt && s->size > 0)
 	    s->size = (s->size + 31) & ~(bfd_vma)31;
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0
 	      && s != htab->elf.srelplt)
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -3427,7 +3326,7 @@ elf32_tic6x_size_dynamic_sections (bfd *
 	 of garbage.  */
       s->contents = bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (htab->elf.dynamic_sections_created)
@@ -3440,66 +3339,36 @@ elf32_tic6x_size_dynamic_sections (bfd *
 #define add_dynamic_entry(TAG, VAL) \
   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
+      if (!_bfd_elf_add_dynamic_tags (output_bfd, info, relocs))
+	return false;
 
       if (!add_dynamic_entry (DT_C6000_DSBT_BASE, 0)
 	  || !add_dynamic_entry (DT_C6000_DSBT_SIZE, htab->params.dsbt_size)
 	  || !add_dynamic_entry (DT_C6000_DSBT_INDEX,
 				 htab->params.dsbt_index))
-	return FALSE;
-
-      if (htab->elf.splt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
+	return false;
 
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
     }
 #undef add_dynamic_entry
 
-  return TRUE;
+  return true;
 }
 
 /* This function is called after all the input files have been read,
    and the input sections have been assigned to output sections.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   if (elf32_tic6x_using_dsbt (output_bfd) && !bfd_link_relocatable (info)
       && !bfd_elf_stack_segment_size (output_bfd, info,
 				      "__stacksize", DEFAULT_STACK_SIZE))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				     struct bfd_link_info *info)
 {
@@ -3585,7 +3454,7 @@ elf32_tic6x_finish_dynamic_sections (bfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return address for Ith PLT stub in section PLT, for relocation REL
@@ -3619,7 +3488,7 @@ elf32_tic6x_obj_attrs_order (int num)
   return num;
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_obj_attrs_handle_unknown (bfd *abfd, int tag)
 {
   if ((tag & 127) < 64)
@@ -3629,7 +3498,7 @@ elf32_tic6x_obj_attrs_handle_unknown (bf
 	(_("%pB: error: unknown mandatory EABI object attribute %d"),
 	 abfd, tag);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   else
     {
@@ -3637,7 +3506,7 @@ elf32_tic6x_obj_attrs_handle_unknown (bf
 	/* xgettext:c-format */
 	(_("%pB: warning: unknown EABI object attribute %d"),
 	 abfd, tag);
-      return TRUE;
+      return true;
     }
 }
 
@@ -3714,16 +3583,20 @@ elf32_tic6x_array_alignment_to_tag (int
 /* Merge attributes from IBFD and OBFD, returning TRUE if the merge
    succeeded, FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
-  bfd_boolean result = TRUE;
+  bool result = true;
   obj_attribute *in_attr;
   obj_attribute *out_attr;
   int i;
   int array_align_in, array_align_out, array_expect_in, array_expect_out;
 
+  /* FIXME: What should be checked when linking shared libraries?  */
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
+
   if (!elf_known_obj_attributes_proc (obfd)[0].i)
     {
       /* This is the first object.  Copy the attributes.  */
@@ -3735,7 +3608,7 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
 	 initialized.  */
       out_attr[0].i = 1;
 
-      return TRUE;
+      return true;
     }
 
   in_attr = elf_known_obj_attributes_proc (ibfd);
@@ -3751,7 +3624,7 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
 	/* xgettext:c-format */
 	(_("error: %pB requires more stack alignment than %pB preserves"),
 	 ibfd, obfd);
-      result = FALSE;
+      result = false;
     }
   if (in_attr[Tag_ABI_stack_align_preserved].i
       < out_attr[Tag_ABI_stack_align_needed].i)
@@ -3760,7 +3633,7 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
 	/* xgettext:c-format */
 	(_("error: %pB requires more stack alignment than %pB preserves"),
 	 obfd, ibfd);
-      result = FALSE;
+      result = false;
     }
 
   array_align_in = elf32_tic6x_tag_to_array_alignment
@@ -3770,7 +3643,7 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
       _bfd_error_handler
 	(_("error: unknown Tag_ABI_array_object_alignment value in %pB"),
 	 ibfd);
-      result = FALSE;
+      result = false;
     }
   array_align_out = elf32_tic6x_tag_to_array_alignment
     (out_attr[Tag_ABI_array_object_alignment].i);
@@ -3779,7 +3652,7 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
       _bfd_error_handler
 	(_("error: unknown Tag_ABI_array_object_alignment value in %pB"),
 	 obfd);
-      result = FALSE;
+      result = false;
     }
   array_expect_in = elf32_tic6x_tag_to_array_alignment
     (in_attr[Tag_ABI_array_object_align_expected].i);
@@ -3788,7 +3661,7 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
       _bfd_error_handler
 	(_("error: unknown Tag_ABI_array_object_align_expected value in %pB"),
 	 ibfd);
-      result = FALSE;
+      result = false;
     }
   array_expect_out = elf32_tic6x_tag_to_array_alignment
     (out_attr[Tag_ABI_array_object_align_expected].i);
@@ -3797,7 +3670,7 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
       _bfd_error_handler
 	(_("error: unknown Tag_ABI_array_object_align_expected value in %pB"),
 	 obfd);
-      result = FALSE;
+      result = false;
     }
 
   if (array_align_out < array_expect_in)
@@ -3806,7 +3679,7 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
 	/* xgettext:c-format */
 	(_("error: %pB requires more array alignment than %pB preserves"),
 	 ibfd, obfd);
-      result = FALSE;
+      result = false;
     }
   if (array_align_in < array_expect_out)
     {
@@ -3814,7 +3687,7 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
 	/* xgettext:c-format */
 	(_("error: %pB requires more array alignment than %pB preserves"),
 	 obfd, ibfd);
-      result = FALSE;
+      result = false;
     }
 
   for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
@@ -3862,6 +3735,9 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
 
 	case Tag_ABI_PIC:
 	case Tag_ABI_PID:
+	  /* Don't transfer these tags from dynamic objects.  */
+	  if ((ibfd->flags & DYNAMIC) != 0)
+	    continue;
 	  if (out_attr[i].i > in_attr[i].i)
 	    out_attr[i].i = in_attr[i].i;
 	  break;
@@ -3909,26 +3785,26 @@ elf32_tic6x_merge_attributes (bfd *ibfd,
 
   /* Merge Tag_ABI_compatibility attributes and any common GNU ones.  */
   if (!_bfd_elf_merge_object_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   result &= _bfd_elf_merge_unknown_attribute_list (ibfd, obfd);
 
   return result;
 }
 
-static bfd_boolean
+static bool
 elf32_tic6x_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   if (! is_tic6x_elf (ibfd) || ! is_tic6x_elf (info->output_bfd))
-    return TRUE;
+    return true;
 
   if (!elf32_tic6x_merge_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Add a new unwind edit to the list described by HEAD, TAIL.  If TINDEX is zero,
@@ -4026,11 +3902,11 @@ elf32_tic6x_insert_cantunwind_after (ase
    (in elf32_tic6x_write_section).
 */
 
-bfd_boolean
+bool
 elf32_tic6x_fix_exidx_coverage (asection **text_section_order,
 				unsigned int num_text_sections,
 				struct bfd_link_info *info,
-				bfd_boolean merge_exidx_entries)
+				bool merge_exidx_entries)
 {
   bfd *inp;
   unsigned int last_second_word = 0, i;
@@ -4185,7 +4061,7 @@ elf32_tic6x_fix_exidx_coverage (asection
   if (last_exidx_sec && last_unwind_type != 0)
     elf32_tic6x_insert_cantunwind_after (last_text_sec, last_exidx_sec);
 
-  return TRUE;
+  return true;
 }
 
 /* Add ADDEND to lower 31 bits of VAL, leaving other bits unmodified.  */
@@ -4223,7 +4099,7 @@ elf32_tic6x_copy_exidx_entry (bfd *outpu
 
 /* Do the actual mangling of exception index tables.  */
 
-static bfd_boolean
+static bool
 elf32_tic6x_write_section (bfd *output_bfd,
 			 struct bfd_link_info *link_info,
 			 asection *sec,
@@ -4235,16 +4111,16 @@ elf32_tic6x_write_section (bfd *output_b
   bfd_vma offset = sec->output_section->vma + sec->output_offset;
 
   if (globals == NULL)
-    return FALSE;
+    return false;
 
   /* If this section has not been allocated an _tic6x_elf_section_data
      structure then we cannot record anything.  */
   tic6x_data = get_tic6x_elf_section_data (sec);
   if (tic6x_data == NULL)
-    return FALSE;
+    return false;
 
   if (tic6x_data->elf.this_hdr.sh_type != SHT_C6000_UNWIND)
-    return FALSE;
+    return false;
 
   tic6x_unwind_table_edit *edit_node
     = tic6x_data->u.exidx.unwind_edit_list;
@@ -4331,9 +4207,11 @@ elf32_tic6x_write_section (bfd *output_b
 			      edited_contents,
 			      (file_ptr) sec->output_offset, sec->size);
 
-  return TRUE;
+  return true;
 }
 
+#define	elf32_bed		elf32_tic6x_bed
+
 #define TARGET_LITTLE_SYM	tic6x_elf32_le_vec
 #define TARGET_LITTLE_NAME	"elf32-tic6x-le"
 #define TARGET_BIG_SYM		tic6x_elf32_be_vec
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tic6x.h ./bfd/elf32-tic6x.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tic6x.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-tic6x.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for TI C6X
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -26,7 +26,7 @@ extern int elf32_tic6x_merge_arch_attrib
 
 /* This function is provided for use from the assembler.  */
 
-extern void elf32_tic6x_set_use_rela_p (bfd *, bfd_boolean);
+extern void elf32_tic6x_set_use_rela_p (bfd *, bool);
 
 struct elf32_tic6x_params
 {
@@ -38,10 +38,10 @@ extern void elf32_tic6x_setup (struct bf
 			       struct elf32_tic6x_params *);
 
 /* C6x unwind section editing support.  */
-extern bfd_boolean elf32_tic6x_fix_exidx_coverage (struct bfd_section **,
-						   unsigned int,
-						   struct bfd_link_info *,
-						   bfd_boolean);
+extern bool elf32_tic6x_fix_exidx_coverage (struct bfd_section **,
+					    unsigned int,
+					    struct bfd_link_info *,
+					    bool);
 #ifdef __cplusplus
 }
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tilegx.c ./bfd/elf32-tilegx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tilegx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-tilegx.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILE-Gx-specific support for 32-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,14 +28,14 @@
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 tilegx_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
   size_t size;
 
   if (note->descsz != TILEGX_PRSTATUS_SIZEOF)
-    return FALSE;
+    return false;
 
   /* pr_cursig */
   elf_tdata (abfd)->core->signal =
@@ -54,11 +54,11 @@ tilegx_elf_grok_prstatus (bfd *abfd, Elf
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 tilegx_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->descsz != TILEGX_PRPSINFO_SIZEOF)
-    return FALSE;
+    return false;
 
   elf_tdata (abfd)->core->program
     = _bfd_elfcore_strndup (abfd, note->descdata + TILEGX_PRPSINFO_OFFSET_PR_FNAME, 16);
@@ -77,7 +77,7 @@ tilegx_elf_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tilegx.h ./bfd/elf32-tilegx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tilegx.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-tilegx.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILE-Gx-specific support for 32-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tilepro.c ./bfd/elf32-tilepro.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tilepro.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-tilepro.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILEPro-specific support for 32-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -34,275 +34,275 @@ static reloc_howto_type tilepro_elf_howt
   /* This reloc does nothing.  */
   HOWTO (R_TILEPRO_NONE,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_TILEPRO_32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_TILEPRO_16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit absolute relocation.  */
   HOWTO (R_TILEPRO_8,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit pc-relative relocation.  */
   HOWTO (R_TILEPRO_32_PCREL,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_32_PCREL", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit pc-relative relocation.  */
   HOWTO (R_TILEPRO_16_PCREL,/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* An 8 bit pc-relative relocation.  */
   HOWTO (R_TILEPRO_8_PCREL,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_8_PCREL",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit relocation without overflow.  */
   HOWTO (R_TILEPRO_LO16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The high order 16 bits of an address.  */
   HOWTO (R_TILEPRO_HI16,	/* type */
 	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The high order 16 bits of an address, plus 1 if the contents of
      the low 16 bits, treated as a signed number, is negative.  */
   HOWTO (R_TILEPRO_HA16,	/* type */
 	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_TILEPRO_HA16",  /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
-  HOWTO (R_TILEPRO_COPY,		/* type */
+  HOWTO (R_TILEPRO_COPY,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEPRO_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEPRO_JMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEPRO_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEPRO_BROFF_X1, /* type */
 	 TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 17,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_TILEPRO_BROFF_X1", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEPRO_JOFFLONG_X1, /* type */
 	 TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 29,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_TILEPRO_JOFFLONG_X1", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEPRO_JOFFLONG_X1_PLT, /* type */
 	 TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 29,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_TILEPRO_JOFFLONG_X1_PLT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
 #define TILEPRO_IMM_HOWTO(name, size, bitsize) \
-  HOWTO (name, 0, size, bitsize, FALSE, 0, \
+  HOWTO (name, 0, size, bitsize, false, 0, \
 	 complain_overflow_signed, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, -1, FALSE)
+	 #name, false, 0, -1, false)
 
 #define TILEPRO_UIMM_HOWTO(name, size, bitsize) \
-  HOWTO (name, 0, size, bitsize, FALSE, 0, \
+  HOWTO (name, 0, size, bitsize, false, 0, \
 	 complain_overflow_unsigned, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, -1, FALSE)
+	 #name, false, 0, -1, false)
 
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0,  0,  8),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0,  0,  8),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X1,  0,  8),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y1,  0,  8),
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_MT_IMM15_X1, 1,  15),
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_MF_IMM15_X1, 1,  15),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM16_X0, 1, 16),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM16_X1, 1, 16),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0,  1,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0,  1,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X1,  1,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y1,  1,  8),
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_MT_IMM15_X1, 2,  15),
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_MF_IMM15_X1, 2,  15),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM16_X0, 2, 16),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM16_X1, 2, 16),
 
 #define TILEPRO_IMM16_HOWTO(name, rshift) \
-  HOWTO (name, rshift, 1, 16, FALSE, 0, \
+  HOWTO (name, rshift, 2, 16, false, 0, \
 	 complain_overflow_dont, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, 0xffff, FALSE)
+	 #name, false, 0, 0xffff, false)
 
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_LO,  0),
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_LO,  0),
@@ -315,36 +315,36 @@ static reloc_howto_type tilepro_elf_howt
 
   HOWTO (R_TILEPRO_IMM16_X0_PCREL,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_IMM16_X0_PCREL",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEPRO_IMM16_X1_PCREL,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_IMM16_X1_PCREL",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
 #define TILEPRO_IMM16_HOWTO_PCREL(name, rshift) \
-  HOWTO (name, rshift, 1, 16, TRUE, 0, \
+  HOWTO (name, rshift, 2, 16, true, 0, \
 	 complain_overflow_dont, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, 0xffff, TRUE)
+	 #name, false, 0, 0xffff, true)
 
   TILEPRO_IMM16_HOWTO_PCREL (R_TILEPRO_IMM16_X0_LO_PCREL,  0),
   TILEPRO_IMM16_HOWTO_PCREL (R_TILEPRO_IMM16_X1_LO_PCREL,  0),
@@ -354,8 +354,8 @@ static reloc_howto_type tilepro_elf_howt
   TILEPRO_IMM16_HOWTO_PCREL (R_TILEPRO_IMM16_X1_HA_PCREL, 16),
 
   /* Byte offset into GOT for a particular symbol. */
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM16_X0_GOT, 1, 16),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM16_X1_GOT, 1, 16),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM16_X0_GOT, 2, 16),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM16_X1_GOT, 2, 16),
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_GOT_LO,  0),
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_GOT_LO,  0),
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_GOT_HI, 16),
@@ -363,17 +363,17 @@ static reloc_howto_type tilepro_elf_howt
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_GOT_HA, 16),
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_GOT_HA, 16),
 
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_MMSTART_X0, 0, 5),
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_MMEND_X0,   0, 5),
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_MMSTART_X1, 0, 5),
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_MMEND_X1,   0, 5),
-
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_X0, 0, 5),
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_X1, 0, 5),
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_Y0, 0, 5),
-  TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_Y1, 0, 5),
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_MMSTART_X0, 1, 5),
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_MMEND_X0,   1, 5),
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_MMSTART_X1, 1, 5),
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_MMEND_X1,   1, 5),
+
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_X0, 1, 5),
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_X1, 1, 5),
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_Y0, 1, 5),
+  TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_Y1, 1, 5),
 
-  TILEPRO_IMM_HOWTO(R_TILEPRO_DEST_IMM8_X1, 0, 8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_DEST_IMM8_X1, 1, 8),
 
   /* These relocs are currently not defined.  */
   EMPTY_HOWTO (56),
@@ -383,53 +383,53 @@ static reloc_howto_type tilepro_elf_howt
 
   HOWTO (R_TILEPRO_TLS_GD_CALL, /* type */
 	 TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 29,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_TILEPRO_TLS_GD_CALL", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0_TLS_GD_ADD,  0,  8),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X1_TLS_GD_ADD,  0,  8),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0_TLS_GD_ADD,  0,  8),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y1_TLS_GD_ADD,  0,  8),
-  TILEPRO_IMM_HOWTO(R_TILEPRO_TLS_IE_LOAD,  0,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0_TLS_GD_ADD,  1,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X1_TLS_GD_ADD,  1,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0_TLS_GD_ADD,  1,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y1_TLS_GD_ADD,  1,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_TLS_IE_LOAD,  1,  8),
 
   /* Offsets into the GOT of TLS Descriptors. */
 
   HOWTO (R_TILEPRO_IMM16_X0_TLS_GD,/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_IMM16_X0_TLS_GD",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_TILEPRO_IMM16_X1_TLS_GD,/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_IMM16_X1_TLS_GD",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_GD_LO,  0),
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_GD_LO,  0),
@@ -442,31 +442,31 @@ static reloc_howto_type tilepro_elf_howt
 
   HOWTO (R_TILEPRO_IMM16_X0_TLS_IE,/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_IMM16_X0_TLS_IE",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEPRO_IMM16_X1_TLS_IE,/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_IMM16_X1_TLS_IE",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_LO,  0),
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_LO,  0),
@@ -476,43 +476,43 @@ static reloc_howto_type tilepro_elf_howt
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16),
 
   /* These are common with the Solaris TLS implementation. */
-  HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+  HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPMOD32",
-	FALSE, 0, 0, TRUE),
-  HOWTO(R_TILEPRO_TLS_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	false, 0, 0, true),
+  HOWTO(R_TILEPRO_TLS_DTPOFF32, 0, 4, 32, false, 0, complain_overflow_bitfield,
 	bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPOFF32",
-	FALSE, 0, 0xFFFFFFFF, TRUE),
-  HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+	false, 0, 0xFFFFFFFF, true),
+  HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32",
-	FALSE, 0, 0, TRUE),
+	false, 0, 0, true),
 
   HOWTO (R_TILEPRO_IMM16_X0_TLS_LE,/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_IMM16_X0_TLS_LE",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEPRO_IMM16_X1_TLS_LE,/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEPRO_IMM16_X1_TLS_LE",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_LO,  0),
   TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_LO,  0),
@@ -527,32 +527,32 @@ static reloc_howto_type tilepro_elf_howt
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_TILEPRO_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_TILEPRO_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_TILEPRO_GNU_VTENTRY,	    /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_TILEPRO_GNU_VTENTRY",   /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 };
 
@@ -685,9 +685,6 @@ struct tilepro_elf_link_hash_entry
 {
   struct elf_link_hash_entry elf;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
 #define GOT_UNKNOWN     0
 #define GOT_NORMAL      1
 #define GOT_TLS_GD      2
@@ -719,7 +716,7 @@ struct _bfd_tilepro_elf_obj_tdata
 
 /* Allocate TILEPro ELF private object data.  */
 
-static bfd_boolean
+static bool
 tilepro_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd,
@@ -730,19 +727,11 @@ tilepro_elf_mkobject (bfd *abfd)
 #include "elf/common.h"
 #include "elf/internal.h"
 
-struct tilepro_elf_link_hash_table
-{
-  struct elf_link_hash_table elf;
-
-  /* Small local sym to section mapping cache.  */
-  struct sym_cache sym_cache;
-};
-
 /* Get the Tilepro ELF linker hash table from a link_info structure.  */
 #define tilepro_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == TILEPRO_ELF_DATA \
-  ? ((struct tilepro_elf_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == TILEPRO_ELF_DATA)	\
+   ? (struct elf_link_hash_table *) (p)->hash : NULL)
 
 static reloc_howto_type *
 tilepro_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
@@ -783,7 +772,7 @@ tilepro_reloc_name_lookup (bfd *abfd ATT
 
 /* Set the howto pointer for an TILEPro ELF reloc.  */
 
-static bfd_boolean
+static bool
 tilepro_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
 			    arelent * cache_ptr,
 			    Elf_Internal_Rela * dst)
@@ -803,9 +792,9 @@ tilepro_info_to_howto_rela (bfd * abfd A
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 typedef tilepro_bundle_bits (*tilepro_create_func)(int);
@@ -918,14 +907,14 @@ static const tilepro_create_func reloc_t
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 tilepro_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
   size_t size;
 
   if (note->descsz != TILEPRO_PRSTATUS_SIZEOF)
-    return FALSE;
+    return false;
 
   /* pr_cursig */
   elf_tdata (abfd)->core->signal =
@@ -944,11 +933,11 @@ tilepro_elf_grok_prstatus (bfd *abfd, El
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 tilepro_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->descsz != TILEPRO_PRPSINFO_SIZEOF)
-    return FALSE;
+    return false;
 
   elf_tdata (abfd)->core->program
     = _bfd_elfcore_strndup (abfd,
@@ -971,7 +960,7 @@ tilepro_elf_grok_psinfo (bfd *abfd, Elf_
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -1116,7 +1105,7 @@ tilepro_plt_entry_build (asection *splt,
   bfd_signed_vma dist_got0 = dist_got_entry - got_offset;
 
   /* Check whether we can use the short plt entry with 16-bit offset.  */
-  bfd_boolean short_plt_entry =
+  bool short_plt_entry =
     (dist_got_entry <= 0x7fff && dist_got0 >= -0x8000);
 
   /* Copy the plt entry template.  */
@@ -1176,7 +1165,6 @@ link_hash_newfunc (struct bfd_hash_entry
       struct tilepro_elf_link_hash_entry *eh;
 
       eh = (struct tilepro_elf_link_hash_entry *) entry;
-      eh->dyn_relocs = NULL;
       eh->tls_type = GOT_UNKNOWN;
     }
 
@@ -1188,14 +1176,14 @@ link_hash_newfunc (struct bfd_hash_entry
 static struct bfd_link_hash_table *
 tilepro_elf_link_hash_table_create (bfd *abfd)
 {
-  struct tilepro_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct tilepro_elf_link_hash_table);
+  struct elf_link_hash_table *ret;
+  size_t amt = sizeof (struct elf_link_hash_table);
 
-  ret = (struct tilepro_elf_link_hash_table *) bfd_zmalloc (amt);
+  ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
     return NULL;
 
-  if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, link_hash_newfunc,
+  if (!_bfd_elf_link_hash_table_init (ret, abfd, link_hash_newfunc,
 				      sizeof (struct tilepro_elf_link_hash_entry),
 				      TILEPRO_ELF_DATA))
     {
@@ -1203,12 +1191,12 @@ tilepro_elf_link_hash_table_create (bfd
       return NULL;
     }
 
-  return &ret->elf.root;
+  return &ret->root;
 }
 
 /* Create the .got section.  */
 
-static bfd_boolean
+static bool
 tilepro_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags;
@@ -1219,7 +1207,7 @@ tilepro_elf_create_got_section (bfd *abf
 
   /* This function may be called more than once.  */
   if (htab->sgot != NULL)
-    return TRUE;
+    return true;
 
   flags = bed->dynamic_sec_flags;
 
@@ -1230,13 +1218,13 @@ tilepro_elf_create_got_section (bfd *abf
 				    | SEC_READONLY));
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->srelgot = s;
 
   s = s_got = bfd_make_section_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->sgot = s;
 
   /* The first bit of the global offset table is the header.  */
@@ -1247,7 +1235,7 @@ tilepro_elf_create_got_section (bfd *abf
       s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->sgotplt = s;
 
       /* Reserve room for the header.  */
@@ -1264,22 +1252,22 @@ tilepro_elf_create_got_section (bfd *abf
 				       "_GLOBAL_OFFSET_TABLE_");
       elf_hash_table (info)->hgot = h;
       if (h == NULL)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and
    .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
    hash table.  */
 
-static bfd_boolean
+static bool
 tilepro_elf_create_dynamic_sections (bfd *dynobj,
 				     struct bfd_link_info *info)
 {
   if (!tilepro_elf_create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   return _bfd_elf_create_dynamic_sections (dynobj, info);
 }
@@ -1296,37 +1284,6 @@ tilepro_elf_copy_indirect_symbol (struct
   edir = (struct tilepro_elf_link_hash_entry *) dir;
   eind = (struct tilepro_elf_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect
       && dir->got.refcount <= 0)
     {
@@ -1433,11 +1390,11 @@ tilepro_elf_tls_transition (struct bfd_l
    allocate space in the global offset table or procedure linkage
    table.  */
 
-static bfd_boolean
+static bool
 tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			  asection *sec, const Elf_Internal_Rela *relocs)
 {
-  struct tilepro_elf_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
@@ -1446,7 +1403,7 @@ tilepro_elf_check_relocs (bfd *abfd, str
   int num_relocs;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = tilepro_elf_hash_table (info);
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -1458,8 +1415,8 @@ tilepro_elf_check_relocs (bfd *abfd, str
 
   BFD_ASSERT (is_tilepro_elf (abfd) || num_relocs == 0);
 
-  if (htab->elf.dynobj == NULL)
-    htab->elf.dynobj = abfd;
+  if (htab->dynobj == NULL)
+    htab->dynobj = abfd;
 
   rel_end = relocs + num_relocs;
   for (rel = relocs; rel < rel_end; rel++)
@@ -1477,7 +1434,7 @@ tilepro_elf_check_relocs (bfd *abfd, str
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: bad symbol index: %d"),
 			      abfd, r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx < symtab_hdr->sh_info)
@@ -1566,7 +1523,7 @@ tilepro_elf_check_relocs (bfd *abfd, str
 		    local_got_refcounts = ((bfd_signed_vma *)
 					   bfd_zalloc (abfd, size));
 		    if (local_got_refcounts == NULL)
-		      return FALSE;
+		      return false;
 		    elf_local_got_refcounts (abfd) = local_got_refcounts;
 		    _bfd_tilepro_elf_local_got_tls_type (abfd)
 		      = (char *) (local_got_refcounts + symtab_hdr->sh_info);
@@ -1590,7 +1547,7 @@ tilepro_elf_check_relocs (bfd *abfd, str
 		      /* xgettext:c-format */
 		      (_("%pB: `%s' accessed both as normal and thread local symbol"),
 		       abfd, h ? h->root.root.string : "<local>");
-		    return FALSE;
+		    return false;
 		  }
 	      }
 
@@ -1604,10 +1561,10 @@ tilepro_elf_check_relocs (bfd *abfd, str
 	      }
 	  }
 
-	  if (htab->elf.sgot == NULL)
+	  if (htab->sgot == NULL)
 	    {
-	      if (!tilepro_elf_create_got_section (htab->elf.dynobj, info))
-		return FALSE;
+	      if (!tilepro_elf_create_got_section (htab->dynobj, info))
+		return false;
 	    }
 	  break;
 
@@ -1620,9 +1577,9 @@ tilepro_elf_check_relocs (bfd *abfd, str
 	      if (! _bfd_generic_link_add_one_symbol (info, abfd,
 						      "__tls_get_addr", 0,
 						      bfd_und_section_ptr, 0,
-						      NULL, FALSE, FALSE,
+						      NULL, false, false,
 						      &bh))
-		return FALSE;
+		return false;
 	      h = (struct elf_link_hash_entry *) bh;
 	    }
 	  else
@@ -1751,17 +1708,16 @@ tilepro_elf_check_relocs (bfd *abfd, str
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ TRUE);
+		    (sec, htab->dynobj, 2, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
-		head =
-		  &((struct tilepro_elf_link_hash_entry *) h)->dyn_relocs;
+		head = &h->dyn_relocs;
 	      else
 		{
 		  /* Track dynamic relocs needed for local syms too.
@@ -1775,7 +1731,7 @@ tilepro_elf_check_relocs (bfd *abfd, str
 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
@@ -1788,11 +1744,11 @@ tilepro_elf_check_relocs (bfd *abfd, str
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 		  p = ((struct elf_dyn_relocs *)
-		       bfd_alloc (htab->elf.dynobj, amt));
+		       bfd_alloc (htab->dynobj, amt));
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -1809,12 +1765,12 @@ tilepro_elf_check_relocs (bfd *abfd, str
 
 	case R_TILEPRO_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_TILEPRO_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -1822,7 +1778,7 @@ tilepro_elf_check_relocs (bfd *abfd, str
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -1861,8 +1817,8 @@ tilepro_elf_gc_mark_hook (asection *sec,
 	  if (! _bfd_generic_link_add_one_symbol (info, sec->owner,
 						  "__tls_get_addr", 0,
 						  bfd_und_section_ptr,
-						  0, NULL, FALSE,
-						  FALSE, &bh))
+						  0, NULL, false,
+						  false, &bh))
 	    return NULL;
 	  h = (struct elf_link_hash_entry *) bh;
 	  BFD_ASSERT (h != NULL);
@@ -1876,41 +1832,24 @@ tilepro_elf_gc_mark_hook (asection *sec,
   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = tilepro_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 tilepro_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				   struct elf_link_hash_entry *h)
 {
-  struct tilepro_elf_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   asection *s, *srel;
 
   htab = tilepro_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
 
   /* Make sure we know what is going on here.  */
-  BFD_ASSERT (htab->elf.dynobj != NULL
+  BFD_ASSERT (htab->dynobj != NULL
 	      && (h->needs_plt
 		  || h->is_weakalias
 		  || (h->def_dynamic
@@ -1937,7 +1876,7 @@ tilepro_elf_adjust_dynamic_symbol (struc
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) -1;
@@ -1951,7 +1890,7 @@ tilepro_elf_adjust_dynamic_symbol (struc
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -1962,26 +1901,26 @@ tilepro_elf_adjust_dynamic_symbol (struc
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (!readonly_dynrelocs (h))
+  if (!_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -2000,13 +1939,13 @@ tilepro_elf_adjust_dynamic_symbol (struc
      .rel.bss section we are going to use.  */
   if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
     {
-      s = htab->elf.sdynrelro;
-      srel = htab->elf.sreldynrelro;
+      s = htab->sdynrelro;
+      srel = htab->sreldynrelro;
     }
   else
     {
-      s = htab->elf.sdynbss;
-      srel = htab->elf.srelbss;
+      s = htab->sdynbss;
+      srel = htab->srelbss;
     }
   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
@@ -2020,22 +1959,21 @@ tilepro_elf_adjust_dynamic_symbol (struc
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
-  struct tilepro_elf_link_hash_table *htab;
-  struct tilepro_elf_link_hash_entry *eh;
+  struct elf_link_hash_table *htab;
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = tilepro_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
 
-  if (htab->elf.dynamic_sections_created
+  if (htab->dynamic_sections_created
       && h->plt.refcount > 0)
     {
       /* Make sure this symbol is output as a dynamic symbol.
@@ -2044,12 +1982,12 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
 	{
-	  asection *s = htab->elf.splt;
+	  asection *s = htab->splt;
 
 	  /* Allocate room for the header.  */
 	  if (s->size == 0)
@@ -2075,10 +2013,10 @@ allocate_dynrelocs (struct elf_link_hash
 	  s->size += PLT_ENTRY_SIZE;
 
 	  /* We also need to make an entry in the .got.plt section.  */
-	  htab->elf.sgotplt->size += GOT_ENTRY_SIZE;
+	  htab->sgotplt->size += GOT_ENTRY_SIZE;
 
 	  /* We also need to make an entry in the .rela.plt section.  */
-	  htab->elf.srelplt->size += TILEPRO_ELF_RELA_BYTES;
+	  htab->srelplt->size += TILEPRO_ELF_RELA_BYTES;
 	}
       else
 	{
@@ -2102,7 +2040,7 @@ allocate_dynrelocs (struct elf_link_hash
   else if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = tilepro_elf_hash_entry(h)->tls_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -2111,32 +2049,31 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
-      s = htab->elf.sgot;
+      s = htab->sgot;
       h->got.offset = s->size;
       s->size += TILEPRO_BYTES_PER_WORD;
       /* R_TILEPRO_IMM16_Xn_TLS_GD entries need 2 consecutive GOT slots. */
       if (tls_type == GOT_TLS_GD)
 	s->size += TILEPRO_BYTES_PER_WORD;
-      dyn = htab->elf.dynamic_sections_created;
+      dyn = htab->dynamic_sections_created;
       /* R_TILEPRO_IMM16_Xn_TLS_IE_xxx needs one dynamic relocation,
 	 R_TILEPRO_IMM16_Xn_TLS_GD_xxx needs two if local symbol and two if
 	 global.  */
       if (tls_type == GOT_TLS_GD || tls_type == GOT_TLS_IE)
-	htab->elf.srelgot->size += 2 * TILEPRO_ELF_RELA_BYTES;
+	htab->srelgot->size += 2 * TILEPRO_ELF_RELA_BYTES;
       else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
 						bfd_link_pic (info),
 						h))
-	htab->elf.srelgot->size += TILEPRO_ELF_RELA_BYTES;
+	htab->srelgot->size += TILEPRO_ELF_RELA_BYTES;
     }
   else
     h->got.offset = (bfd_vma) -1;
 
-  eh = (struct tilepro_elf_link_hash_entry *) h;
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -2150,7 +2087,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -2163,12 +2100,12 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -2176,7 +2113,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -2189,7 +2126,7 @@ allocate_dynrelocs (struct elf_link_hash
       if (!h->non_got_ref
 	  && ((h->def_dynamic
 	       && !h->def_regular)
-	      || (htab->elf.dynamic_sections_created
+	      || (htab->dynamic_sections_created
 		  && (h->root.type == bfd_link_hash_undefweak
 		      || h->root.type == bfd_link_hash_undefined))))
 	{
@@ -2199,7 +2136,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -2208,52 +2145,25 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * TILEPRO_ELF_RELA_BYTES;
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Return true if the dynamic symbol for a given section should be
    omitted when creating a shared library.  */
 
-static bfd_boolean
+static bool
 tilepro_elf_omit_section_dynsym (bfd *output_bfd,
 				    struct bfd_link_info *info,
 				    asection *p)
@@ -2262,7 +2172,7 @@ tilepro_elf_omit_section_dynsym (bfd *ou
      against the _GLOBAL_OFFSET_TABLE_ symbol emitted in PIC mode
      can be turned into relocations against the .got symbol.  */
   if (strcmp (p->name, ".got") == 0)
-    return FALSE;
+    return false;
 
   return _bfd_elf_omit_section_dynsym_default (output_bfd, info, p);
 }
@@ -2271,20 +2181,20 @@ tilepro_elf_omit_section_dynsym (bfd *ou
 
 #define ELF32_DYNAMIC_INTERPRETER "/lib/ld.so.1"
 
-static bfd_boolean
+static bool
 tilepro_elf_size_dynamic_sections (bfd *output_bfd,
 				      struct bfd_link_info *info)
 {
   (void)output_bfd;
 
-  struct tilepro_elf_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
   bfd *ibfd;
 
   htab = tilepro_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
-  dynobj = htab->elf.dynobj;
+  dynobj = htab->dynobj;
   BFD_ASSERT (dynobj != NULL);
 
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -2350,8 +2260,8 @@ tilepro_elf_size_dynamic_sections (bfd *
       locsymcount = symtab_hdr->sh_info;
       end_local_got = local_got + locsymcount;
       local_tls_type = _bfd_tilepro_elf_local_got_tls_type (ibfd);
-      s = htab->elf.sgot;
-      srel = htab->elf.srelgot;
+      s = htab->sgot;
+      srel = htab->srelgot;
       for (; local_got < end_local_got; ++local_got, ++local_tls_type)
 	{
 	  if (*local_got > 0)
@@ -2372,37 +2282,37 @@ tilepro_elf_size_dynamic_sections (bfd *
 
   /* Allocate global sym .plt and .got entries, and space for global
      sym dynamic relocs.  */
-  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
+  elf_link_hash_traverse (htab, allocate_dynrelocs, info);
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       /* If the .got section is more than 0x8000 bytes, we add
 	 0x8000 to the value of _GLOBAL_OFFSET_TABLE_, so that 16
 	 bit relocations have a greater chance of working. */
-      if (htab->elf.sgot->size >= 0x8000
+      if (htab->sgot->size >= 0x8000
 	  && elf_hash_table (info)->hgot->root.u.def.value == 0)
 	elf_hash_table (info)->hgot->root.u.def.value = 0x8000;
     }
 
-  if (htab->elf.sgotplt)
+  if (htab->sgotplt)
     {
       struct elf_link_hash_entry *got;
       got = elf_link_hash_lookup (elf_hash_table (info),
 				  "_GLOBAL_OFFSET_TABLE_",
-				  FALSE, FALSE, FALSE);
+				  false, false, false);
 
       /* Don't allocate .got.plt section if there are no GOT nor PLT
 	 entries and there is no refeence to _GLOBAL_OFFSET_TABLE_.  */
       if ((got == NULL
 	   || !got->ref_regular_nonweak)
-	  && (htab->elf.sgotplt->size
+	  && (htab->sgotplt->size
 	      == GOTPLT_HEADER_SIZE)
-	  && (htab->elf.splt == NULL
-	      || htab->elf.splt->size == 0)
-	  && (htab->elf.sgot == NULL
-	      || (htab->elf.sgot->size
+	  && (htab->splt == NULL
+	      || htab->splt->size == 0)
+	  && (htab->sgot == NULL
+	      || (htab->sgot->size
 		  == get_elf_backend_data (output_bfd)->got_header_size)))
-	htab->elf.sgotplt->size = 0;
+	htab->sgotplt->size = 0;
     }
 
   /* The check_relocs and adjust_dynamic_symbol entry points have
@@ -2413,16 +2323,16 @@ tilepro_elf_size_dynamic_sections (bfd *
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
 
-      if (s == htab->elf.splt
-	  || s == htab->elf.sgot
-	  || s == htab->elf.sgotplt
-	  || s == htab->elf.sdynbss
-	  || s == htab->elf.sdynrelro)
+      if (s == htab->splt
+	  || s == htab->sgot
+	  || s == htab->sgotplt
+	  || s == htab->sdynbss
+	  || s == htab->sdynrelro)
 	{
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (strncmp (s->name, ".rela", 5) == 0)
+      else if (startswith (s->name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
@@ -2460,53 +2370,10 @@ tilepro_elf_size_dynamic_sections (bfd *
 	 at the beginning, and we don't want garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in tilepro_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->elf.srelplt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (!add_dynamic_entry (DT_RELA, 0)
-	  || !add_dynamic_entry (DT_RELASZ, 0)
-	  || !add_dynamic_entry (DT_RELAENT, TILEPRO_ELF_RELA_BYTES))
-	return FALSE;
-
-      /* If any dynamic relocs apply to a read-only section,
-	 then we need a DT_TEXTREL entry.  */
-      if ((info->flags & DF_TEXTREL) == 0)
-	elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
-
-      if (info->flags & DF_TEXTREL)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, true);
 }
 
 /* Return the base VMA address which should be subtracted from real addresses
@@ -2645,14 +2512,14 @@ static const bfd_byte insn_tls_gd_add_Y0
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 			      bfd *input_bfd, asection *input_section,
 			      bfd_byte *contents, Elf_Internal_Rela *relocs,
 			      Elf_Internal_Sym *local_syms,
 			      asection **local_sections)
 {
-  struct tilepro_elf_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
   bfd_vma *local_got_offsets;
@@ -2681,7 +2548,7 @@ tilepro_elf_relocate_section (bfd *outpu
   for (; rel < relend; rel++)
     {
       int r_type, tls_type;
-      bfd_boolean is_tls_iele, is_tls_le;
+      bool is_tls_iele, is_tls_le;
       reloc_howto_type *howto;
       unsigned long r_symndx;
       struct elf_link_hash_entry *h;
@@ -2692,9 +2559,9 @@ tilepro_elf_relocate_section (bfd *outpu
       bfd_reloc_status_type r;
       const char *name;
       bfd_vma off;
-      bfd_boolean is_plt = FALSE;
-      bfd_boolean resolved_to_zero;
-      bfd_boolean unresolved_reloc;
+      bool is_plt = false;
+      bool resolved_to_zero;
+      bool unresolved_reloc;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       if (r_type == R_TILEPRO_GNU_VTINHERIT
@@ -2711,7 +2578,7 @@ tilepro_elf_relocate_section (bfd *outpu
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  sym = local_syms + r_symndx;
@@ -2720,8 +2587,8 @@ tilepro_elf_relocate_section (bfd *outpu
 	}
       else
 	{
-	  bfd_boolean warned ATTRIBUTE_UNUSED;
-	  bfd_boolean ignored ATTRIBUTE_UNUSED;
+	  bool warned ATTRIBUTE_UNUSED;
+	  bool ignored ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -2797,8 +2664,8 @@ tilepro_elf_relocate_section (bfd *outpu
 
 	      /* GD -> GD */
 	      h = (struct elf_link_hash_entry *)
-		bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
-				      FALSE, TRUE);
+		bfd_link_hash_lookup (info->hash, "__tls_get_addr", false,
+				      false, true);
 	      BFD_ASSERT (h != NULL);
 	      r_type = R_TILEPRO_JOFFLONG_X1_PLT;
 	      howto = tilepro_elf_howto_table + r_type;
@@ -2883,12 +2750,12 @@ tilepro_elf_relocate_section (bfd *outpu
 	case R_TILEPRO_IMM16_X1_GOT_HA:
 	  /* Relocation is to the entry for this symbol in the global
 	     offset table.  */
-	  if (htab->elf.sgot == NULL)
+	  if (htab->sgot == NULL)
 	    abort ();
 
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      BFD_ASSERT (off != (bfd_vma) -1);
@@ -2917,12 +2784,12 @@ tilepro_elf_relocate_section (bfd *outpu
 		  else
 		    {
 		      bfd_put_32 (output_bfd, relocation,
-					  htab->elf.sgot->contents + off);
+					  htab->sgot->contents + off);
 		      h->got.offset |= 1;
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -2945,11 +2812,11 @@ tilepro_elf_relocate_section (bfd *outpu
 
 		      /* We need to generate a R_TILEPRO_RELATIVE reloc
 			 for the dynamic linker.  */
-		      s = htab->elf.srelgot;
+		      s = htab->srelgot;
 		      BFD_ASSERT (s != NULL);
 
-		      outrel.r_offset = (htab->elf.sgot->output_section->vma
-					 + htab->elf.sgot->output_offset
+		      outrel.r_offset = (htab->sgot->output_section->vma
+					 + htab->sgot->output_offset
 					 + off);
 		      outrel.r_info = ELF32_R_INFO (0, R_TILEPRO_RELATIVE);
 		      outrel.r_addend = relocation;
@@ -2958,7 +2825,7 @@ tilepro_elf_relocate_section (bfd *outpu
 		    }
 
 		  bfd_put_32 (output_bfd, relocation,
-				      htab->elf.sgot->contents + off);
+				      htab->sgot->contents + off);
 		  local_got_offsets[r_symndx] |= 1;
 		}
 	    }
@@ -2970,7 +2837,7 @@ tilepro_elf_relocate_section (bfd *outpu
 	     procedure linkage table.  */
 	  BFD_ASSERT (h != NULL);
 
-	  if (h->plt.offset == (bfd_vma) -1 || htab->elf.splt == NULL)
+	  if (h->plt.offset == (bfd_vma) -1 || htab->splt == NULL)
 	    {
 	      /* We didn't make a PLT entry for this symbol.  This
 		 happens when statically linking PIC code, or when
@@ -2978,10 +2845,10 @@ tilepro_elf_relocate_section (bfd *outpu
 	      break;
 	    }
 
-	  relocation = (htab->elf.splt->output_section->vma
-			+ htab->elf.splt->output_offset
+	  relocation = (htab->splt->output_section->vma
+			+ htab->splt->output_offset
 			+ h->plt.offset);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_TILEPRO_32_PCREL:
@@ -3054,7 +2921,7 @@ tilepro_elf_relocate_section (bfd *outpu
 		      || h->root.type == bfd_link_hash_undefined)))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate = FALSE;
+	      bool skip, relocate = false;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
@@ -3062,15 +2929,15 @@ tilepro_elf_relocate_section (bfd *outpu
 
 	      BFD_ASSERT (sreloc != NULL);
 
-	      skip = FALSE;
+	      skip = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -3085,7 +2952,7 @@ tilepro_elf_relocate_section (bfd *outpu
 		     FIXME: Add code tracking needed dynamic relocs as
 		     e.g. i386 has.  */
 		  if (h->dynindx == -1)
-		    skip = TRUE, relocate = TRUE;
+		    skip = true, relocate = true;
 		  break;
 		}
 
@@ -3118,14 +2985,14 @@ tilepro_elf_relocate_section (bfd *outpu
 		      outrel.r_addend = relocation + rel->r_addend;
 
 		      if (is_plt)
-			sec = htab->elf.splt;
+			sec = htab->splt;
 
 		      if (bfd_is_abs_section (sec))
 			indx = 0;
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -3141,7 +3008,7 @@ tilepro_elf_relocate_section (bfd *outpu
 
 			  if (indx == 0)
 			    {
-			      osec = htab->elf.text_index_section;
+			      osec = htab->text_index_section;
 			      indx = elf_section_data (osec)->dynindx;
 			    }
 
@@ -3154,7 +3021,7 @@ tilepro_elf_relocate_section (bfd *outpu
 				(_("%pB: probably compiled without -fPIC?"),
 				 input_bfd);
 			      bfd_set_error (bfd_error_bad_value);
-			      return FALSE;
+			      return false;
 			    }
 			}
 
@@ -3182,17 +3049,17 @@ tilepro_elf_relocate_section (bfd *outpu
 	  if (!bfd_link_executable (info))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip;
+	      bool skip;
 
 	      BFD_ASSERT (sreloc != NULL);
-	      skip = FALSE;
+	      skip = false;
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE;
+		skip = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 	      if (skip)
@@ -3267,7 +3134,7 @@ tilepro_elf_relocate_section (bfd *outpu
 	      local_got_offsets[r_symndx] |= 1;
 	    }
 
-	  if (htab->elf.sgot == NULL)
+	  if (htab->sgot == NULL)
 	    abort ();
 
 	  if ((off & 1) != 0)
@@ -3276,15 +3143,15 @@ tilepro_elf_relocate_section (bfd *outpu
 	    {
 	      Elf_Internal_Rela outrel;
 	      int indx = 0;
-	      bfd_boolean need_relocs = FALSE;
+	      bool need_relocs = false;
 
-	      if (htab->elf.srelgot == NULL)
+	      if (htab->srelgot == NULL)
 		abort ();
 
 	      if (h != NULL)
 	      {
-		bfd_boolean dyn;
-		dyn = htab->elf.dynamic_sections_created;
+		bool dyn;
+		dyn = htab->dynamic_sections_created;
 
 		if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
 						     bfd_link_pic (info),
@@ -3302,7 +3169,7 @@ tilepro_elf_relocate_section (bfd *outpu
 		  && (h == NULL
 		      || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 		      || h->root.type != bfd_link_hash_undefweak))
-		    need_relocs = TRUE;
+		    need_relocs = true;
 
 	      switch (r_type)
 		{
@@ -3315,18 +3182,18 @@ tilepro_elf_relocate_section (bfd *outpu
 		  case R_TILEPRO_IMM16_X0_TLS_IE_HA:
 		  case R_TILEPRO_IMM16_X1_TLS_IE_HA:
 		    if (need_relocs) {
-		      bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off);
-		      outrel.r_offset = (htab->elf.sgot->output_section->vma
-				       + htab->elf.sgot->output_offset + off);
+		      bfd_put_32 (output_bfd, 0, htab->sgot->contents + off);
+		      outrel.r_offset = (htab->sgot->output_section->vma
+				       + htab->sgot->output_offset + off);
 		      outrel.r_addend = 0;
 		      if (indx == 0)
 			outrel.r_addend = relocation - dtpoff_base (info);
 		      outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_TPOFF32);
-		      tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot,
+		      tilepro_elf_append_rela_32 (output_bfd, htab->srelgot,
 						  &outrel);
 		    } else {
 		      bfd_put_32 (output_bfd, tpoff (info, relocation),
-				  htab->elf.sgot->contents + off);
+				  htab->sgot->contents + off);
 		    }
 		    break;
 
@@ -3339,31 +3206,31 @@ tilepro_elf_relocate_section (bfd *outpu
 		  case R_TILEPRO_IMM16_X0_TLS_GD_HA:
 		  case R_TILEPRO_IMM16_X1_TLS_GD_HA:
 		    if (need_relocs) {
-		      outrel.r_offset = (htab->elf.sgot->output_section->vma
-				       + htab->elf.sgot->output_offset + off);
+		      outrel.r_offset = (htab->sgot->output_section->vma
+				       + htab->sgot->output_offset + off);
 		      outrel.r_addend = 0;
 		      outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_DTPMOD32);
-		      bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off);
-		      tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot,
+		      bfd_put_32 (output_bfd, 0, htab->sgot->contents + off);
+		      tilepro_elf_append_rela_32 (output_bfd, htab->srelgot,
 						  &outrel);
 		      if (indx == 0)
 			{
 			  BFD_ASSERT (! unresolved_reloc);
 			  bfd_put_32 (output_bfd,
 				      relocation - dtpoff_base (info),
-				      (htab->elf.sgot->contents + off +
+				      (htab->sgot->contents + off +
 				       TILEPRO_BYTES_PER_WORD));
 			}
 		      else
 			{
 			  bfd_put_32 (output_bfd, 0,
-				      (htab->elf.sgot->contents + off +
+				      (htab->sgot->contents + off +
 				       TILEPRO_BYTES_PER_WORD));
 			  outrel.r_info = ELF32_R_INFO (indx,
 							R_TILEPRO_TLS_DTPOFF32);
 			  outrel.r_offset += TILEPRO_BYTES_PER_WORD;
 			  tilepro_elf_append_rela_32 (output_bfd,
-						      htab->elf.srelgot, &outrel);
+						      htab->srelgot, &outrel);
 			}
 		    }
 
@@ -3374,9 +3241,9 @@ tilepro_elf_relocate_section (bfd *outpu
 			 symbol binding locally.  Mark it as belonging
 			 to module 1, the executable.  */
 		      bfd_put_32 (output_bfd, 1,
-				  htab->elf.sgot->contents + off );
+				  htab->sgot->contents + off );
 		      bfd_put_32 (output_bfd, relocation - dtpoff_base (info),
-				  htab->elf.sgot->contents + off +
+				  htab->sgot->contents + off +
 				  TILEPRO_BYTES_PER_WORD);
 		   }
 		   break;
@@ -3387,7 +3254,7 @@ tilepro_elf_relocate_section (bfd *outpu
 	    abort ();
 
 	  relocation = off - got_base;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  howto = tilepro_elf_howto_table + r_type;
 	  break;
 
@@ -3498,7 +3365,7 @@ tilepro_elf_relocate_section (bfd *outpu
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -3524,19 +3391,19 @@ tilepro_elf_relocate_section (bfd *outpu
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 tilepro_elf_finish_dynamic_symbol (bfd *output_bfd,
 				   struct bfd_link_info *info,
 				   struct elf_link_hash_entry *h,
 				   Elf_Internal_Sym *sym)
 {
-  struct tilepro_elf_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
 
   htab = tilepro_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
@@ -3556,9 +3423,9 @@ tilepro_elf_finish_dynamic_symbol (bfd *
 
       BFD_ASSERT (h->dynindx != -1);
 
-      splt = htab->elf.splt;
-      srela = htab->elf.srelplt;
-      sgotplt = htab->elf.sgotplt;
+      splt = htab->splt;
+      srela = htab->srelplt;
+      sgotplt = htab->sgotplt;
 
       if (splt == NULL || srela == NULL)
        abort ();
@@ -3606,8 +3473,8 @@ tilepro_elf_finish_dynamic_symbol (bfd *
 
       /* This symbol has an entry in the GOT.  Set it up.  */
 
-      sgot = htab->elf.sgot;
-      srela = htab->elf.srelgot;
+      sgot = htab->sgot;
+      srela = htab->srelgot;
       BFD_ASSERT (sgot != NULL && srela != NULL);
 
       rela.r_offset = (sgot->output_section->vma
@@ -3653,30 +3520,30 @@ tilepro_elf_finish_dynamic_symbol (bfd *
 		       + h->root.u.def.section->output_offset);
       rela.r_info = ELF32_R_INFO (h->dynindx, R_TILEPRO_COPY);
       rela.r_addend = 0;
-      if (h->root.u.def.section == htab->elf.sdynrelro)
-	s = htab->elf.sreldynrelro;
+      if (h->root.u.def.section == htab->sdynrelro)
+	s = htab->sreldynrelro;
       else
-	s = htab->elf.srelbss;
+	s = htab->srelbss;
       tilepro_elf_append_rela_32 (output_bfd, s, &rela);
     }
 
   /* Mark some specially defined symbols as absolute. */
-  if (h == htab->elf.hdynamic
-      || (h == htab->elf.hgot || h == htab->elf.hplt))
+  if (h == htab->hdynamic
+      || (h == htab->hgot || h == htab->hplt))
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 tilepro_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
 		    bfd *dynobj, asection *sdyn,
 		    asection *splt ATTRIBUTE_UNUSED)
 {
   Elf32_External_Dyn *dyncon, *dynconend;
-  struct tilepro_elf_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
 
   htab = tilepro_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
@@ -3692,15 +3559,15 @@ tilepro_finish_dyn (bfd *output_bfd, str
       switch (dyn.d_tag)
 	{
 	case DT_PLTGOT:
-	  s = htab->elf.sgotplt;
+	  s = htab->sgotplt;
 	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
 	  break;
 	case DT_JMPREL:
-	  s = htab->elf.srelplt;
+	  s = htab->srelplt;
 	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
 	  break;
 	case DT_PLTRELSZ:
-	  s = htab->elf.srelplt;
+	  s = htab->srelplt;
 	  dyn.d_un.d_val = s->size;
 	  break;
 	default:
@@ -3709,29 +3576,29 @@ tilepro_finish_dyn (bfd *output_bfd, str
 
       bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 tilepro_elf_finish_dynamic_sections (bfd *output_bfd,
 				     struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *sdyn;
-  struct tilepro_elf_link_hash_table *htab;
+  struct elf_link_hash_table *htab;
 
   htab = tilepro_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
-  dynobj = htab->elf.dynobj;
+  dynobj = htab->dynobj;
 
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
-      bfd_boolean ret;
+      bool ret;
 
-      splt = htab->elf.splt;
+      splt = htab->splt;
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       ret = tilepro_finish_dyn (output_bfd, info, dynobj, sdyn, splt);
@@ -3752,46 +3619,46 @@ tilepro_elf_finish_dynamic_sections (bfd
 	  = PLT_ENTRY_SIZE;
     }
 
-  if (htab->elf.sgotplt)
+  if (htab->sgotplt)
     {
-      if (bfd_is_abs_section (htab->elf.sgotplt->output_section))
+      if (bfd_is_abs_section (htab->sgotplt->output_section))
 	{
 	  _bfd_error_handler
-	    (_("discarded output section: `%pA'"), htab->elf.sgotplt);
-	  return FALSE;
+	    (_("discarded output section: `%pA'"), htab->sgotplt);
+	  return false;
 	}
 
-      if (htab->elf.sgotplt->size > 0)
+      if (htab->sgotplt->size > 0)
 	{
 	  /* Write the first two entries in .got.plt, needed for the dynamic
 	     linker.  */
 	  bfd_put_32 (output_bfd, (bfd_vma) -1,
-		      htab->elf.sgotplt->contents);
+		      htab->sgotplt->contents);
 	  bfd_put_32 (output_bfd, (bfd_vma) 0,
-		      htab->elf.sgotplt->contents + GOT_ENTRY_SIZE);
+		      htab->sgotplt->contents + GOT_ENTRY_SIZE);
 	}
 
-      elf_section_data (htab->elf.sgotplt->output_section)->this_hdr.sh_entsize
+      elf_section_data (htab->sgotplt->output_section)->this_hdr.sh_entsize
 	= GOT_ENTRY_SIZE;
     }
 
-  if (htab->elf.sgot)
+  if (htab->sgot)
     {
-      if (htab->elf.sgot->size > 0)
+      if (htab->sgot->size > 0)
 	{
 	  /* Set the first entry in the global offset table to the address of
 	     the dynamic section.  */
 	  bfd_vma val = (sdyn ?
 			 sdyn->output_section->vma + sdyn->output_offset :
 			 0);
-	  bfd_put_32 (output_bfd, val, htab->elf.sgot->contents);
+	  bfd_put_32 (output_bfd, val, htab->sgot->contents);
 	}
 
-      elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
+      elf_section_data (htab->sgot->output_section)->this_hdr.sh_entsize
 	= GOT_ENTRY_SIZE;
     }
 
-  return TRUE;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tilepro.h ./bfd/elf32-tilepro.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-tilepro.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-tilepro.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILEPro-specific support for 32-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-v850.c ./bfd/elf32-v850.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-v850.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-v850.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* V850-specific support for 32-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -43,13 +43,13 @@ static reloc_howto_type v850_elf_howto_t
    allocate space in the global offset table or procedure linkage
    table.  */
 
-static bfd_boolean
+static bool
 v850_elf_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
 		       const Elf_Internal_Rela *relocs)
 {
-  bfd_boolean ret = TRUE;
+  bool ret = true;
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
@@ -59,7 +59,7 @@ v850_elf_check_relocs (bfd *abfd,
   const char *common = NULL;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
 #ifdef DEBUG
   _bfd_error_handler ("v850_elf_check_relocs called for section %pA in %pB",
@@ -96,14 +96,14 @@ v850_elf_check_relocs (bfd *abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_V850_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries
 	   are actually used.  Record for later use during GC.  */
 	case R_V850_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_V850_SDA_16_16_SPLIT_OFFSET:
@@ -144,7 +144,7 @@ v850_elf_check_relocs (bfd *abfd,
 		  && (h->other & V850_OTHER_ERROR) == 0)
 		{
 		  const char * msg;
-		  static char  buff[200]; /* XXX */
+		  char *buff;
 
 		  switch (h->other & V850_OTHER_MASK)
 		    {
@@ -165,14 +165,18 @@ v850_elf_check_relocs (bfd *abfd,
 		      break;
 		    }
 
-		  sprintf (buff, msg, h->root.root.string);
-		  info->callbacks->warning (info, buff, h->root.root.string,
+		  if (asprintf (&buff, msg, h->root.root.string) < 0)
+		    buff = NULL;
+		  else
+		    msg = buff;
+		  info->callbacks->warning (info, msg, h->root.root.string,
 					    abfd, h->root.u.def.section,
 					    (bfd_vma) 0);
+		  free (buff);
 
 		  bfd_set_error (bfd_error_bad_value);
 		  h->other |= V850_OTHER_ERROR;
-		  ret = FALSE;
+		  ret = false;
 		}
 	    }
 
@@ -183,7 +187,7 @@ v850_elf_check_relocs (bfd *abfd,
 	      asection * section;
 
 	      section = h->root.u.c.p->section = bfd_make_section_old_way (abfd, common);
-	      section->flags |= SEC_IS_COMMON;
+	      section->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
 	    }
 
 #ifdef DEBUG
@@ -214,11 +218,11 @@ v850_elf_check_relocs (bfd *abfd,
 
 typedef struct hi16s_location
 {
-  bfd_vma		  addend;
-  bfd_byte *		  address;
-  unsigned long		  counter;
-  bfd_boolean		  found;
-  struct hi16s_location * next;
+  bfd_vma addend;
+  bfd_byte *address;
+  unsigned long counter;
+  bool found;
+  struct hi16s_location *next;
 }
 hi16s_location;
 
@@ -230,7 +234,7 @@ static void
 remember_hi16s_reloc (bfd *abfd, bfd_vma addend, bfd_byte *address)
 {
   hi16s_location * entry = NULL;
-  bfd_size_type amt = sizeof (* free_hi16s);
+  size_t amt = sizeof (* free_hi16s);
 
   /* Find a free structure.  */
   if (free_hi16s == NULL)
@@ -242,7 +246,7 @@ remember_hi16s_reloc (bfd *abfd, bfd_vma
   entry->addend  = addend;
   entry->address = address;
   entry->counter = hi16s_counter ++;
-  entry->found   = FALSE;
+  entry->found   = false;
   entry->next    = previous_hi16s;
   previous_hi16s = entry;
 
@@ -258,7 +262,7 @@ remember_hi16s_reloc (bfd *abfd, bfd_vma
 }
 
 static bfd_byte *
-find_remembered_hi16s_reloc (bfd_vma addend, bfd_boolean *already_found)
+find_remembered_hi16s_reloc (bfd_vma addend, bool *already_found)
 {
   hi16s_location *match = NULL;
   hi16s_location *entry;
@@ -285,7 +289,7 @@ find_remembered_hi16s_reloc (bfd_vma add
     * already_found = match->found;
 
   /* Note that this entry has now been used.  */
-  match->found = TRUE;
+  match->found = true;
 
   return addr;
 }
@@ -432,7 +436,7 @@ find_remembered_hi16s_reloc (bfd_vma add
      ------------
        0x00006fff   which is wrong (assuming that fred is at 0xffff).  */
 
-static bfd_boolean
+static bool
 v850_elf_perform_lo16_relocation (bfd *abfd, unsigned long *insn,
 				  unsigned long addend)
 {
@@ -443,7 +447,7 @@ v850_elf_perform_lo16_relocation (bfd *a
       || (OVERFLOWS (addend, *insn)
 	  && ((! BIT15_SET (*insn)) || (BIT15_SET (addend)))))
     {
-      bfd_boolean already_updated;
+      bool already_updated;
       bfd_byte *hi16s_address = find_remembered_hi16s_reloc
 	(addend, & already_updated);
 
@@ -460,7 +464,7 @@ v850_elf_perform_lo16_relocation (bfd *a
       else
 	{
 	  _bfd_error_handler (_("failed to find previous HI16 reloc"));
-	  return FALSE;
+	  return false;
 	}
     }
 #undef OVERFLOWS
@@ -469,7 +473,7 @@ v850_elf_perform_lo16_relocation (bfd *a
   /* Do not complain if value has top bit set, as this has been
      anticipated.  */
   *insn = (*insn + addend) & 0xffff;
-  return TRUE;
+  return true;
 }
 
 /* FIXME:  The code here probably ought to be removed and the code in reloc.c
@@ -891,665 +895,665 @@ static reloc_howto_type v850_elf_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_V850_NONE,			/* Type.  */
 	 0,				/* Rightshift.  */
-	 3,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,				/* Size.  */
 	 0,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* Special_function.  */
 	 "R_V850_NONE",			/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0,				/* Src_mask.  */
 	 0,				/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* A PC relative 9 bit branch.  */
   HOWTO (R_V850_9_PCREL,		/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 9,				/* Bitsize.  */
-	 TRUE,				/* PC_relative.  */
+	 true,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_bitfield,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_9_PCREL",		/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0x00ffffff,			/* Src_mask.  */
 	 0x00ffffff,			/* Dst_mask.  */
-	 TRUE),				/* PCrel_offset.  */
+	 true),				/* PCrel_offset.  */
 
   /* A PC relative 22 bit branch.  */
   HOWTO (R_V850_22_PCREL,		/* Type.  */
 	 0,				/* Rightshift.  */
-	 2,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* Size.  */
 	 22,				/* Bitsize.  */
-	 TRUE,				/* PC_relative.  */
+	 true,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_signed,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_22_PCREL",		/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0x07ffff80,			/* Src_mask.  */
 	 0x07ffff80,			/* Dst_mask.  */
-	 TRUE),				/* PCrel_offset.  */
+	 true),				/* PCrel_offset.  */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_V850_HI16_S,			/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_HI16_S",		/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffff,			/* Src_mask.  */
 	 0xffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_V850_HI16,			/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_HI16",			/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffff,			/* Src_mask.  */
 	 0xffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_V850_LO16,			/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_LO16",			/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffff,			/* Src_mask.  */
 	 0xffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* Simple 32bit reloc.  */
   HOWTO (R_V850_ABS32,			/* Type.  */
 	 0,				/* Rightshift.  */
-	 2,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* Size.  */
 	 32,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_ABS32",		/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffffffff,			/* Src_mask.  */
 	 0xffffffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* Simple 16bit reloc.  */
   HOWTO (R_V850_16,			/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* Special_function.  */
 	 "R_V850_16",			/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffff,			/* Src_mask.  */
 	 0xffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* Simple 8bit reloc.  */
   HOWTO (R_V850_8,			/* Type.  */
 	 0,				/* Rightshift.  */
-	 0,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 1,				/* Size.  */
 	 8,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* Special_function.  */
 	 "R_V850_8",			/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xff,				/* Src_mask.  */
 	 0xff,				/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 16 bit offset from the short data area pointer.  */
   HOWTO (R_V850_SDA_16_16_OFFSET,	/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_SDA_16_16_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffff,			/* Src_mask.  */
 	 0xffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 15 bit offset from the short data area pointer.  */
   HOWTO (R_V850_SDA_15_16_OFFSET,	/* Type.  */
 	 1,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 1,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_SDA_15_16_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xfffe,			/* Src_mask.  */
 	 0xfffe,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 16 bit offset from the zero data area pointer.  */
   HOWTO (R_V850_ZDA_16_16_OFFSET,	/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_ZDA_16_16_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffff,			/* Src_mask.  */
 	 0xffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 15 bit offset from the zero data area pointer.  */
   HOWTO (R_V850_ZDA_15_16_OFFSET,	/* Type.  */
 	 1,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 1,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_ZDA_15_16_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xfffe,			/* Src_mask.  */
 	 0xfffe,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 6 bit offset from the tiny data area pointer.  */
   HOWTO (R_V850_TDA_6_8_OFFSET,		/* Type.  */
 	 2,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 8,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 1,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_TDA_6_8_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0x7e,				/* Src_mask.  */
 	 0x7e,				/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 8 bit offset from the tiny data area pointer.  */
   HOWTO (R_V850_TDA_7_8_OFFSET,		/* Type.  */
 	 1,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 8,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_TDA_7_8_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0x7f,				/* Src_mask.  */
 	 0x7f,				/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 7 bit offset from the tiny data area pointer.  */
   HOWTO (R_V850_TDA_7_7_OFFSET,		/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 7,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_TDA_7_7_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0x7f,				/* Src_mask.  */
 	 0x7f,				/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 16 bit offset from the tiny data area pointer!  */
   HOWTO (R_V850_TDA_16_16_OFFSET,	/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_TDA_16_16_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffff,			/* Src_mask.  */
 	 0xfff,				/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 5 bit offset from the tiny data area pointer.  */
   HOWTO (R_V850_TDA_4_5_OFFSET,		/* Type.  */
 	 1,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 5,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_TDA_4_5_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0x0f,				/* Src_mask.  */
 	 0x0f,				/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 4 bit offset from the tiny data area pointer.  */
   HOWTO (R_V850_TDA_4_4_OFFSET,		/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 4,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_TDA_4_4_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0x0f,				/* Src_mask.  */
 	 0x0f,				/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 16 bit offset from the short data area pointer.  */
   HOWTO (R_V850_SDA_16_16_SPLIT_OFFSET,	/* Type.  */
 	 0,				/* Rightshift.  */
-	 2,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_SDA_16_16_SPLIT_OFFSET",/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xfffe0020,			/* Src_mask.  */
 	 0xfffe0020,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 16 bit offset from the zero data area pointer.  */
   HOWTO (R_V850_ZDA_16_16_SPLIT_OFFSET,	/* Type.  */
 	 0,				/* Rightshift.  */
-	 2,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_ZDA_16_16_SPLIT_OFFSET",/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xfffe0020,			/* Src_mask.  */
 	 0xfffe0020,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 6 bit offset from the call table base pointer.  */
   HOWTO (R_V850_CALLT_6_7_OFFSET,	/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 7,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_CALLT_6_7_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0x3f,				/* Src_mask.  */
 	 0x3f,				/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* 16 bit offset from the call table base pointer.  */
   HOWTO (R_V850_CALLT_16_16_OFFSET,	/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_CALLT_16_16_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffff,			/* Src_mask.  */
 	 0xffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
 
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_V850_GNU_VTINHERIT, /* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont, /* Complain_on_overflow.  */
 	 NULL,			/* Special_function.  */
 	 "R_V850_GNU_VTINHERIT", /* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_V850_GNU_VTENTRY,	 /* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont, /* Complain_on_overflow.  */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* Special_function.  */
 	 "R_V850_GNU_VTENTRY",	 /* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
+	 false),		/* PCrel_offset.  */
 
   /* Indicates a .longcall pseudo-op.  The compiler will generate a .longcall
      pseudo-op when it finds a function call which can be relaxed.  */
   HOWTO (R_V850_LONGCALL,     /* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 v850_elf_ignore_reloc, /* Special_function.  */
 	 "R_V850_LONGCALL",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* Indicates a .longjump pseudo-op.  The compiler will generate a
      .longjump pseudo-op when it finds a branch which can be relaxed.  */
   HOWTO (R_V850_LONGJUMP,     /* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 TRUE,			/* PC_relative.  */
+	 true,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 v850_elf_ignore_reloc, /* Special_function.  */
 	 "R_V850_LONGJUMP",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   HOWTO (R_V850_ALIGN,	      /* Type.  */
 	 0,			/* Rightshift.  */
-	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_unsigned, /* Complain_on_overflow.  */
 	 v850_elf_ignore_reloc, /* Special_function.  */
 	 "R_V850_ALIGN",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 TRUE),			/* PCrel_offset.  */
+	 true),			/* PCrel_offset.  */
 
   /* Simple pc-relative 32bit reloc.  */
   HOWTO (R_V850_REL32,			/* Type.  */
 	 0,				/* Rightshift.  */
-	 2,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* Size.  */
 	 32,				/* Bitsize.  */
-	 TRUE,				/* PC_relative.  */
+	 true,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_REL32",		/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffffffff,			/* Src_mask.  */
 	 0xffffffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* An ld.bu version of R_V850_LO16.  */
   HOWTO (R_V850_LO16_SPLIT_OFFSET,	/* Type.  */
 	 0,				/* Rightshift.  */
-	 2,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_LO16_SPLIT_OFFSET",	/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xfffe0020,			/* Src_mask.  */
 	 0xfffe0020,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* A unsigned PC relative 16 bit loop.  */
   HOWTO (R_V850_16_PCREL,		/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 TRUE,				/* PC_relative.  */
+	 true,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_bitfield,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_16_PCREL",		/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xfffe,			/* Src_mask.  */
 	 0xfffe,			/* Dst_mask.  */
-	 TRUE),				/* PCrel_offset.  */
+	 true),				/* PCrel_offset.  */
 
   /* A PC relative 17 bit branch.  */
   HOWTO (R_V850_17_PCREL,		/* Type.  */
 	 0,				/* Rightshift.  */
-	 2,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* Size.  */
 	 17,				/* Bitsize.  */
-	 TRUE,				/* PC_relative.  */
+	 true,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_bitfield,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_17_PCREL",		/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0x0010fffe,			/* Src_mask.  */
 	 0x0010fffe,			/* Dst_mask.  */
-	 TRUE),				/* PCrel_offset.  */
+	 true),				/* PCrel_offset.  */
 
   /* A 23bit offset ld/st.  */
   HOWTO (R_V850_23,			/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* size.  */
 	 23,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_dont,	/* complain_on_overflow.  */
 	 v850_elf_reloc,		/* special_function.  */
 	 "R_V850_23",			/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffff07f0,			/* src_mask.  */
 	 0xffff07f0,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   /* A PC relative 32 bit branch.  */
   HOWTO (R_V850_32_PCREL,		/* type.  */
 	 1,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* size.  */
 	 32,				/* bitsize.  */
-	 TRUE,				/* pc_relative.  */
+	 true,				/* pc_relative.  */
 	 1,				/* bitpos.  */
 	 complain_overflow_signed,	/* complain_on_overflow.  */
 	 v850_elf_reloc,		/* special_function.  */
 	 "R_V850_32_PCREL",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xfffffffe,			/* src_mask.  */
 	 0xfffffffe,			/* dst_mask.  */
-	 TRUE),				/* pcrel_offset.  */
+	 true),				/* pcrel_offset.  */
 
   /* A absolute 32 bit branch.  */
   HOWTO (R_V850_32_ABS,			/* type.  */
 	 1,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* size.  */
 	 32,				/* bitsize.  */
-	 TRUE,				/* pc_relative.  */
+	 true,				/* pc_relative.  */
 	 1,				/* bitpos.  */
 	 complain_overflow_signed,	/* complain_on_overflow.  */
 	 v850_elf_reloc,		/* special_function.  */
 	 "R_V850_32_ABS",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xfffffffe,			/* src_mask.  */
 	 0xfffffffe,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_V850_HI16,			/* Type.  */
 	 0,				/* Rightshift.  */
-	 1,				/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* Size.  */
 	 16,				/* Bitsize.  */
-	 FALSE,				/* PC_relative.  */
+	 false,				/* PC_relative.  */
 	 0,				/* Bitpos.  */
 	 complain_overflow_dont,	/* Complain_on_overflow.  */
 	 v850_elf_reloc,		/* Special_function.  */
 	 "R_V850_HI16",			/* Name.  */
-	 FALSE,				/* Partial_inplace.  */
+	 false,				/* Partial_inplace.  */
 	 0xffff,			/* Src_mask.  */
 	 0xffff,			/* Dst_mask.  */
-	 FALSE),			/* PCrel_offset.  */
+	 false),			/* PCrel_offset.  */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_V850_16_S1,			/* type.  */
 	 1,				/* rightshift.  */
-	 1,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* size.  */
 	 16,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 1,				/* bitpos.  */
 	 complain_overflow_dont,	/* complain_on_overflow.  */
 	 v850_elf_reloc,		/* special_function.  */
 	 "R_V850_16_S1",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xfffe,			/* src_mask.  */
 	 0xfffe,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_V850_LO16_S1,		/* type.  */
 	 1,				/* rightshift.  */
-	 1,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* size.  */
 	 16,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 1,				/* bitpos.  */
 	 complain_overflow_dont,	/* complain_on_overflow.  */
 	 v850_elf_reloc,		/* special_function.  */
 	 "R_V850_LO16_S1",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xfffe,			/* src_mask.  */
 	 0xfffe,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   /* 16 bit offset from the call table base pointer.  */
   HOWTO (R_V850_CALLT_15_16_OFFSET,	/* type.  */
 	 1,				/* rightshift.  */
-	 1,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 2,				/* size.  */
 	 16,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 1,				/* bitpos.  */
 	 complain_overflow_dont,	/* complain_on_overflow.  */
 	 v850_elf_reloc,		/* special_function.  */
 	 "R_V850_CALLT_15_16_OFFSET",	/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xfffe,			/* src_mask.  */
 	 0xfffe,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   /* Like R_V850_32 PCREL, but referring to the GOT table entry for
      the symbol.  */
   HOWTO (R_V850_32_GOTPCREL,		/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* size.  */
 	 32,				/* bitsize.  */
-	 TRUE,				/* pc_relative.  */
+	 true,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_unsigned,	/* complain_on_overflow.  */
 	 v850_elf_reloc,		/* special_function.  */
 	 "R_V850_32_GOTPCREL",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffffffff,			/* src_mask.  */
 	 0xffffffff,			/* dst_mask.  */
-	 TRUE),				/* pcrel_offset.  */
+	 true),				/* pcrel_offset.  */
 
   /* Like R_V850_SDA_, but referring to the GOT table entry for
      the symbol.  */
   HOWTO (R_V850_16_GOT,			/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* size.  */
 	 16,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_unsigned,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_16_GOT",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffff,			/* src_mask.  */
 	 0xffff,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   HOWTO (R_V850_32_GOT,			/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* size.  */
 	 32,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_unsigned,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_32_GOT",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffffffff,			/* src_mask.  */
 	 0xffffffff,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   /* Like R_V850_22_PCREL, but referring to the procedure linkage table
      entry for the symbol.  */
   HOWTO (R_V850_22_PLT,			/* type.  */
 	 1,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* size.  */
 	 22,				/* bitsize.  */
-	 TRUE,				/* pc_relative.  */
+	 true,				/* pc_relative.  */
 	 7,				/* bitpos.  */
 	 complain_overflow_signed,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_22_PLT",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0x07ffff80,			/* src_mask.  */
 	 0x07ffff80,			/* dst_mask.  */
-	 TRUE),				/* pcrel_offset.  */
+	 true),				/* pcrel_offset.  */
 
   HOWTO (R_V850_32_PLT,			/* type.  */
 	 1,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* size.  */
 	 32,				/* bitsize.  */
-	 TRUE,				/* pc_relative.  */
+	 true,				/* pc_relative.  */
 	 1,				/* bitpos.  */
 	 complain_overflow_signed,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_32_PLT",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffffffff,			/* src_mask.  */
 	 0xffffffff,			/* dst_mask.  */
-	 TRUE),				/* pcrel_offset.  */
+	 true),				/* pcrel_offset.  */
 
   /* This is used only by the dynamic linker.  The symbol should exist
      both in the object being run and in some shared library.  The
@@ -1558,121 +1562,121 @@ static reloc_howto_type v850_elf_howto_t
      run has to have the data at some particular address.  */
   HOWTO (R_V850_COPY,			/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
+	 4,				/* size.  */
 	 32,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_bitfield,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_COPY",			/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffffffff,			/* src_mask.  */
 	 0xffffffff,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   /* Like R_M32R_24, but used when setting global offset table
      entries.  */
   HOWTO (R_V850_GLOB_DAT,		/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
+	 4,				/* size */
 	 32,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_bitfield,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_GLOB_DAT",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffffffff,			/* src_mask.  */
 	 0xffffffff,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   /* Marks a procedure linkage table entry for a symbol.  */
   HOWTO (R_V850_JMP_SLOT,		/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
+	 4,				/* size */
 	 32,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_bitfield,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_JMP_SLOT",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffffffff,			/* src_mask.  */
 	 0xffffffff,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   /* Used only by the dynamic linker.  When the object is run, this
      longword is set to the load address of the object, plus the
      addend.  */
   HOWTO (R_V850_RELATIVE,		/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
+	 4,				/* size */
 	 32,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_bitfield,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_RELATIVE",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffffffff,			/* src_mask.  */
 	 0xffffffff,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   HOWTO (R_V850_16_GOTOFF,		/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
+	 4,				/* size */
 	 16,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_bitfield,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_16_GOTOFF",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffff,			/* src_mask.  */
 	 0xffff,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   HOWTO (R_V850_32_GOTOFF,		/* type.  */
 	 0,				/* rightshift.  */
-	 2,				/* size (0 = byte, 1 = short, 2 = long) */
+	 4,				/* size */
 	 32,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_bitfield,	/* complain_on_overflow.  */
 	 bfd_elf_generic_reloc,		/* special_function.  */
 	 "R_V850_32_GOTOFF",		/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0xffffffff,			/* src_mask.  */
 	 0xffffffff,			/* dst_mask.  */
-	 FALSE),			/* pcrel_offset.  */
+	 false),			/* pcrel_offset.  */
 
   HOWTO (R_V850_CODE,			/* type.  */
 	 0,				/* rightshift.  */
-	 1,				/* size (0 = byte, 1 = short, 2 = long) */
+	 2,				/* size */
 	 0,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_unsigned,	/* complain_on_overflow.  */
 	 v850_elf_ignore_reloc,		/* special_function.  */
 	 "R_V850_CODE",			/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0,				/* src_mask.  */
 	 0,				/* dst_mask.  */
-	 TRUE),				/* pcrel_offset.  */
+	 true),				/* pcrel_offset.  */
 
   HOWTO (R_V850_DATA,			/* type.  */
 	 0,				/* rightshift.  */
-	 1,				/* size (0 = byte, 1 = short, 2 = long) */
+	 2,				/* size */
 	 0,				/* bitsize.  */
-	 FALSE,				/* pc_relative.  */
+	 false,				/* pc_relative.  */
 	 0,				/* bitpos.  */
 	 complain_overflow_unsigned,	/* complain_on_overflow.  */
 	 v850_elf_ignore_reloc,		/* special_function.  */
 	 "R_V850_DATA",			/* name.  */
-	 FALSE,				/* partial_inplace.  */
+	 false,				/* partial_inplace.  */
 	 0,				/* src_mask.  */
 	 0,				/* dst_mask.  */
-	 TRUE),				/* pcrel_offset.  */
+	 true),				/* pcrel_offset.  */
 
 };
 
@@ -1744,7 +1748,7 @@ static const struct v850_elf_reloc_map v
 
 #define V800_RELOC(name,sz,bit,shift,complain,pcrel,resolver)		 \
   HOWTO (name, shift, sz, bit, pcrel, 0, complain_overflow_ ## complain, \
-	 bfd_elf_ ## resolver ## _reloc, #name, FALSE, 0, ~0, FALSE)
+	 bfd_elf_ ## resolver ## _reloc, #name, false, 0, ~0, false)
 
 #define V800_EMPTY(name) EMPTY_HOWTO (name - R_V810_NONE)
 
@@ -1757,92 +1761,92 @@ static const struct v850_elf_reloc_map v
 
 static reloc_howto_type v800_elf_howto_table[] =
 {
-  V800_RELOC (R_V810_NONE,      0,  0, 0, dont,     FALSE, generic),	/* Type = 0x30 */
-  V800_RELOC (R_V810_BYTE,      0,  8, 0, dont,     FALSE, generic),
-  V800_RELOC (R_V810_HWORD,     1, 16, 0, dont,     FALSE, generic),
-  V800_RELOC (R_V810_WORD,      2, 32, 0, dont,     FALSE, generic),
-  V800_RELOC (R_V810_WLO,       1, 16, 0, dont,     FALSE, generic),
-  V800_RELOC (R_V810_WHI,       1, 16, 0, dont,     FALSE, generic),
-  V800_RELOC (R_V810_WHI1,      1, 16, 0, dont,     FALSE, generic),
-  V800_RELOC (R_V810_GPBYTE,    0,  8, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_GPHWORD,   1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_GPWORD,    2, 32, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_GPWLO,     1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_GPWHI,     1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_GPWHI1,    1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V850_HWLO,      1, 16, 0, dont,     FALSE, generic),
+  V800_RELOC (R_V810_NONE,      0,  0, 0, dont,     false, generic),	/* Type = 0x30 */
+  V800_RELOC (R_V810_BYTE,      1,  8, 0, dont,     false, generic),
+  V800_RELOC (R_V810_HWORD,     2, 16, 0, dont,     false, generic),
+  V800_RELOC (R_V810_WORD,      4, 32, 0, dont,     false, generic),
+  V800_RELOC (R_V810_WLO,       2, 16, 0, dont,     false, generic),
+  V800_RELOC (R_V810_WHI,       2, 16, 0, dont,     false, generic),
+  V800_RELOC (R_V810_WHI1,      2, 16, 0, dont,     false, generic),
+  V800_RELOC (R_V810_GPBYTE,    1,  8, 0, dont,     false, v850),
+  V800_RELOC (R_V810_GPHWORD,   2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_GPWORD,    4, 32, 0, dont,     false, v850),
+  V800_RELOC (R_V810_GPWLO,     2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_GPWHI,     2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_GPWHI1,    2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V850_HWLO,      2, 16, 0, dont,     false, generic),
   V800_EMPTY (R_V810_reserved1),
-  V800_RELOC (R_V850_EP7BIT,    0,  7, 0, unsigned, FALSE, v850),
-  V800_RELOC (R_V850_EPHBYTE,   0,  8, 1, unsigned, FALSE, v850),
-  V800_RELOC (R_V850_EPWBYTE,   0,  8, 2, unsigned, FALSE, v850),
-  V800_RELOC (R_V850_REGHWLO,   1, 16, 0, dont,     FALSE, v850),
+  V800_RELOC (R_V850_EP7BIT,    1,  7, 0, unsigned, false, v850),
+  V800_RELOC (R_V850_EPHBYTE,   1,  8, 1, unsigned, false, v850),
+  V800_RELOC (R_V850_EPWBYTE,   1,  8, 2, unsigned, false, v850),
+  V800_RELOC (R_V850_REGHWLO,   2, 16, 0, dont,     false, v850),
   V800_EMPTY (R_V810_reserved2),
-  V800_RELOC (R_V850_GPHWLO,    1, 16, 0, dont,     FALSE, v850),
+  V800_RELOC (R_V850_GPHWLO,    2, 16, 0, dont,     false, v850),
   V800_EMPTY (R_V810_reserved3),
-  V800_RELOC (R_V850_PCR22,     2, 22, 0, signed,   TRUE,  generic),
-  V800_RELOC (R_V850_BLO,       2, 24, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V850_EP4BIT,    0,  4, 0, unsigned, FALSE, v850),
-  V800_RELOC (R_V850_EP5BIT,    0,  5, 0, unsigned, FALSE, v850),
-  V800_RELOC (R_V850_REGBLO,    2, 24, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V850_GPBLO,     2, 24, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_WLO_1,     1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_GPWLO_1,   1, 16, 0, signed,   FALSE, v850),
-  V800_RELOC (R_V850_BLO_1,     2, 16, 0, signed,   FALSE, v850),
-  V800_RELOC (R_V850_HWLO_1,    1, 16, 0, signed,   FALSE, v850),
+  V800_RELOC (R_V850_PCR22,     4, 22, 0, signed,   true,  generic),
+  V800_RELOC (R_V850_BLO,       4, 24, 0, dont,     false, v850),
+  V800_RELOC (R_V850_EP4BIT,    1,  4, 0, unsigned, false, v850),
+  V800_RELOC (R_V850_EP5BIT,    1,  5, 0, unsigned, false, v850),
+  V800_RELOC (R_V850_REGBLO,    4, 24, 0, dont,     false, v850),
+  V800_RELOC (R_V850_GPBLO,     4, 24, 0, dont,     false, v850),
+  V800_RELOC (R_V810_WLO_1,     2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_GPWLO_1,   2, 16, 0, signed,   false, v850),
+  V800_RELOC (R_V850_BLO_1,     4, 16, 0, signed,   false, v850),
+  V800_RELOC (R_V850_HWLO_1,    2, 16, 0, signed,   false, v850),
   V800_EMPTY  (R_V810_reserved4),
-  V800_RELOC (R_V850_GPBLO_1,   2, 16, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_GPHWLO_1,  1, 16, 1, signed,   FALSE, v850),
+  V800_RELOC (R_V850_GPBLO_1,   4, 16, 1, signed,   false, v850),
+  V800_RELOC (R_V850_GPHWLO_1,  2, 16, 1, signed,   false, v850),
   V800_EMPTY (R_V810_reserved5),
-  V800_RELOC (R_V850_EPBLO,     2, 16, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_EPHWLO,    1, 16, 1, signed,   FALSE, v850),
+  V800_RELOC (R_V850_EPBLO,     4, 16, 1, signed,   false, v850),
+  V800_RELOC (R_V850_EPHWLO,    2, 16, 1, signed,   false, v850),
   V800_EMPTY (R_V810_reserved6),
-  V800_RELOC (R_V850_EPWLO_N,   1, 16, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_PC32,      2, 32, 1, signed,   TRUE,  v850),
-  V800_RELOC (R_V850_W23BIT,    2, 23, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_GPW23BIT,  2, 23, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_EPW23BIT,  2, 23, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_B23BIT,    2, 23, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_GPB23BIT,  2, 23, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_EPB23BIT,  2, 23, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_PC16U,     1, 16, 1, unsigned, TRUE,  generic),
-  V800_RELOC (R_V850_PC17,      2, 17, 1, signed,   TRUE,  generic),
-  V800_RELOC (R_V850_DW8,       2,  8, 2, signed,   FALSE, v850),
-  V800_RELOC (R_V850_GPDW8,     2,  8, 2, signed,   FALSE, v850),
-  V800_RELOC (R_V850_EPDW8,     2,  8, 2, signed,   FALSE, v850),
-  V800_RELOC (R_V850_PC9,       1,  9, 3, signed,   TRUE,  v850),
-  V800_RELOC (R_V810_REGBYTE,   0,  8, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_REGHWORD,  1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_REGWORD,   2, 32, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_REGWLO,    1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_REGWHI,    1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_REGWHI1,   1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V850_REGW23BIT, 2, 23, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_REGB23BIT, 2, 23, 1, signed,   FALSE, v850),
-  V800_RELOC (R_V850_REGDW8,    2,  8, 2, signed,   FALSE, v850),
-  V800_RELOC (R_V810_EPBYTE,    0,  8, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_EPHWORD,   1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_EPWORD,    2, 32, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V850_WLO23,     2, 32, 1, dont,     FALSE, v850),
-  V800_RELOC (R_V850_WORD_E,    2, 32, 1, dont,     FALSE, v850),
-  V800_RELOC (R_V850_REGWORD_E, 2, 32, 1, dont,     FALSE, v850),
-  V800_RELOC (R_V850_WORD,      2, 32, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V850_GPWORD,    2, 32, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V850_REGWORD,   2, 32, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V850_EPWORD,    2, 32, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_TPBYTE,    0,  8, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_TPHWORD,   1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_TPWORD,    2, 32, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_TPWLO,     1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_TPWHI,     1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_TPWHI1,    1, 16, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V850_TPHWLO,    1, 16, 1, dont,     FALSE, v850),
-  V800_RELOC (R_V850_TPBLO,     2, 24, 0, dont,     FALSE, v850),
-  V800_RELOC (R_V810_TPWLO_1,   1, 16, 0, signed,   FALSE, v850),
-  V800_RELOC (R_V850_TPBLO_1,   2, 16, 0, signed,   FALSE, v850),
-  V800_RELOC (R_V850_TPHWLO_1,  1, 16, 0, signed,   FALSE, v850),
-  V800_RELOC (R_V850_TP23BIT,   2, 23, 0, signed,   FALSE, v850),
-  V800_RELOC (R_V850_TPW23BIT,  2, 23, 0, signed,   FALSE, v850),
-  V800_RELOC (R_V850_TPDW8,     2,  8, 0, signed,   FALSE, v850)
+  V800_RELOC (R_V850_EPWLO_N,   2, 16, 1, signed,   false, v850),
+  V800_RELOC (R_V850_PC32,      4, 32, 1, signed,   true,  v850),
+  V800_RELOC (R_V850_W23BIT,    4, 23, 1, signed,   false, v850),
+  V800_RELOC (R_V850_GPW23BIT,  4, 23, 1, signed,   false, v850),
+  V800_RELOC (R_V850_EPW23BIT,  4, 23, 1, signed,   false, v850),
+  V800_RELOC (R_V850_B23BIT,    4, 23, 1, signed,   false, v850),
+  V800_RELOC (R_V850_GPB23BIT,  4, 23, 1, signed,   false, v850),
+  V800_RELOC (R_V850_EPB23BIT,  4, 23, 1, signed,   false, v850),
+  V800_RELOC (R_V850_PC16U,     2, 16, 1, unsigned, true,  generic),
+  V800_RELOC (R_V850_PC17,      4, 17, 1, signed,   true,  generic),
+  V800_RELOC (R_V850_DW8,       4,  8, 2, signed,   false, v850),
+  V800_RELOC (R_V850_GPDW8,     4,  8, 2, signed,   false, v850),
+  V800_RELOC (R_V850_EPDW8,     4,  8, 2, signed,   false, v850),
+  V800_RELOC (R_V850_PC9,       2,  9, 3, signed,   true,  v850),
+  V800_RELOC (R_V810_REGBYTE,   1,  8, 0, dont,     false, v850),
+  V800_RELOC (R_V810_REGHWORD,  2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_REGWORD,   4, 32, 0, dont,     false, v850),
+  V800_RELOC (R_V810_REGWLO,    2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_REGWHI,    2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_REGWHI1,   2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V850_REGW23BIT, 4, 23, 1, signed,   false, v850),
+  V800_RELOC (R_V850_REGB23BIT, 4, 23, 1, signed,   false, v850),
+  V800_RELOC (R_V850_REGDW8,    4,  8, 2, signed,   false, v850),
+  V800_RELOC (R_V810_EPBYTE,    1,  8, 0, dont,     false, v850),
+  V800_RELOC (R_V810_EPHWORD,   2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_EPWORD,    4, 32, 0, dont,     false, v850),
+  V800_RELOC (R_V850_WLO23,     4, 32, 1, dont,     false, v850),
+  V800_RELOC (R_V850_WORD_E,    4, 32, 1, dont,     false, v850),
+  V800_RELOC (R_V850_REGWORD_E, 4, 32, 1, dont,     false, v850),
+  V800_RELOC (R_V850_WORD,      4, 32, 0, dont,     false, v850),
+  V800_RELOC (R_V850_GPWORD,    4, 32, 0, dont,     false, v850),
+  V800_RELOC (R_V850_REGWORD,   4, 32, 0, dont,     false, v850),
+  V800_RELOC (R_V850_EPWORD,    4, 32, 0, dont,     false, v850),
+  V800_RELOC (R_V810_TPBYTE,    1,  8, 0, dont,     false, v850),
+  V800_RELOC (R_V810_TPHWORD,   2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_TPWORD,    4, 32, 0, dont,     false, v850),
+  V800_RELOC (R_V810_TPWLO,     2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_TPWHI,     2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V810_TPWHI1,    2, 16, 0, dont,     false, v850),
+  V800_RELOC (R_V850_TPHWLO,    2, 16, 1, dont,     false, v850),
+  V800_RELOC (R_V850_TPBLO,     4, 24, 0, dont,     false, v850),
+  V800_RELOC (R_V810_TPWLO_1,   2, 16, 0, signed,   false, v850),
+  V800_RELOC (R_V850_TPBLO_1,   4, 16, 0, signed,   false, v850),
+  V800_RELOC (R_V850_TPHWLO_1,  2, 16, 0, signed,   false, v850),
+  V800_RELOC (R_V850_TP23BIT,   4, 23, 0, signed,   false, v850),
+  V800_RELOC (R_V850_TPW23BIT,  4, 23, 0, signed,   false, v850),
+  V800_RELOC (R_V850_TPDW8,     4,  8, 0, signed,   false, v850)
 };
 
 /* Map a bfd relocation into the appropriate howto structure.  */
@@ -1884,7 +1888,7 @@ v850_elf_reloc_name_lookup (bfd *abfd AT
 
 /* Set the howto pointer for an V850 ELF reloc.  */
 
-static bfd_boolean
+static bool
 v850_elf_info_to_howto_rel (bfd *abfd,
 			    arelent *cache_ptr,
 			    Elf_Internal_Rela *dst)
@@ -1898,15 +1902,15 @@ v850_elf_info_to_howto_rel (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &v850_elf_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 /* Set the howto pointer for a V850 ELF reloc (type RELA).  */
 
-static bfd_boolean
+static bool
 v850_elf_info_to_howto_rela (bfd *abfd,
 			     arelent * cache_ptr,
 			     Elf_Internal_Rela *dst)
@@ -1920,20 +1924,20 @@ v850_elf_info_to_howto_rela (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &v850_elf_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 v850_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
 {
   return (   (name[0] == '.' && (name[1] == 'L' || name[1] == '.'))
 	  || (name[0] == '_' &&  name[1] == '.' && name[2] == 'L' && name[3] == '_'));
 }
 
-static bfd_boolean
+static bool
 v850_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
 {
   return v850_elf_is_local_label_name (abfd, sym->name);
@@ -2060,7 +2064,7 @@ v850_elf_final_link_relocate (reloc_howt
 	  return bfd_reloc_undefined;
 
 	/* Get the value of __gp.  */
-	h = bfd_link_hash_lookup (info->hash, "__gp", FALSE, FALSE, TRUE);
+	h = bfd_link_hash_lookup (info->hash, "__gp", false, false, true);
 	if (h == NULL
 	    || h->type != bfd_link_hash_defined)
 	  return bfd_reloc_gp_not_found;
@@ -2085,7 +2089,7 @@ v850_elf_final_link_relocate (reloc_howt
 	struct bfd_link_hash_entry * h;
 
 	/* Get the value of __ep.  */
-	h = bfd_link_hash_lookup (info->hash, "__ep", FALSE, FALSE, TRUE);
+	h = bfd_link_hash_lookup (info->hash, "__ep", false, false, true);
 	if (h == NULL
 	    || h->type != bfd_link_hash_defined)
 	  return bfd_reloc_ep_not_found;
@@ -2104,7 +2108,7 @@ v850_elf_final_link_relocate (reloc_howt
 	struct bfd_link_hash_entry * h;
 
 	/* Get the value of __ctbp.  */
-	h = bfd_link_hash_lookup (info->hash, "__ctbp", FALSE, FALSE, TRUE);
+	h = bfd_link_hash_lookup (info->hash, "__ctbp", false, false, true);
 	if (h == NULL
 	    || h->type != bfd_link_hash_defined)
 	  return bfd_reloc_ctbp_not_found;
@@ -2126,7 +2130,7 @@ v850_elf_final_link_relocate (reloc_howt
 	  return bfd_reloc_undefined;
 
 	/* Get the value of __ctbp.  */
-	h = bfd_link_hash_lookup (info->hash, "__ctbp", FALSE, FALSE, TRUE);
+	h = bfd_link_hash_lookup (info->hash, "__ctbp", false, false, true);
 	if (h == NULL
 	    || h->type != bfd_link_hash_defined)
 	  return bfd_reloc_ctbp_not_found;
@@ -2163,7 +2167,7 @@ v850_elf_final_link_relocate (reloc_howt
 
 /* Relocate an V850 ELF section.  */
 
-static bfd_boolean
+static int
 v850_elf_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -2224,7 +2228,7 @@ v850_elf_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  /* Note - this check is delayed until now as it is possible and
 	     valid to have a file without any symbols but with relocs that
@@ -2235,7 +2239,7 @@ v850_elf_relocate_section (bfd *output_b
 		(info, "no hash table available",
 		 NULL, input_bfd, input_section, (bfd_vma) 0);
 
-	      return FALSE;
+	      return false;
 	    }
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
@@ -2283,7 +2287,7 @@ v850_elf_relocate_section (bfd *output_b
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -2322,7 +2326,7 @@ v850_elf_relocate_section (bfd *output_b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static asection *
@@ -2396,7 +2400,7 @@ v850_elf_make_note_section (bfd * abfd)
 /* Create the note section if not already present.  This is done early so
    that the linker maps the sections to the right place in the output.  */
 
-bfd_boolean
+bool
 v850_elf_create_sections (struct bfd_link_info * info)
 {
   bfd * ibfd;
@@ -2404,27 +2408,27 @@ v850_elf_create_sections (struct bfd_lin
   /* If we already have a note section, do not make another.  */
   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
     if (bfd_get_section_by_name (ibfd, V850_NOTE_SECNAME) != NULL)
-      return TRUE;
+      return true;
 
   return v850_elf_make_note_section (info->input_bfds) != NULL;
 }
 
-bfd_boolean
-v850_elf_set_note (bfd * abfd, enum v850_notes note, unsigned int val)
+bool
+v850_elf_set_note (bfd * abfd, unsigned int note, unsigned int val)
 {
   asection * notes = bfd_get_section_by_name (abfd, V850_NOTE_SECNAME);
 
   if (val > 2)
     /* At the moment, no known note has a value over 2.  */
-    return FALSE;
+    return false;
 
   if (notes == NULL)
     notes = v850_elf_make_note_section (abfd);
   if (notes == NULL)
-    return FALSE;
+    return false;
 
   v850_set_note (abfd, notes, note, val);
-  return TRUE;
+  return true;
 }
 
 /* Copy a v850 note section from one object module to another.  */
@@ -2464,7 +2468,7 @@ v850_elf_copy_notes (bfd *ibfd, bfd *obf
 
 /* Copy backend specific data from one object module to another.  */
 
-static bfd_boolean
+static bool
 v850_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   v850_elf_copy_notes (ibfd, obfd);
@@ -2472,18 +2476,18 @@ v850_elf_copy_private_bfd_data (bfd *ibf
 }
 #define bfd_elf32_bfd_copy_private_bfd_data	v850_elf_copy_private_bfd_data
 
-static bfd_boolean
+static bool
 v850_elf_merge_notes (bfd * ibfd, bfd *obfd)
 {
   asection * onotes;
   asection * inotes;
-  bfd_boolean result = TRUE;
+  bool result = true;
 
   /* If the output bfd does not have a note section, then
      skip the merge.  The normal input to output section
      copying will take care of everythng for us.  */
   if ((onotes = bfd_get_section_by_name (obfd, V850_NOTE_SECNAME)) == NULL)
-    return TRUE;
+    return true;
 
   if ((inotes = bfd_get_section_by_name (ibfd, V850_NOTE_SECNAME)) != NULL)
     {
@@ -2530,7 +2534,7 @@ v850_elf_merge_notes (bfd * ibfd, bfd *o
 		    /* xgettext:c-format */
 		    (_("error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"),
 				      ibfd, obfd);
-		  result = FALSE;
+		  result = false;
 		}
 	      else
 		/* ibfd uses 4-byte alignment, obfd uses 8-byte alignment.
@@ -2546,7 +2550,7 @@ v850_elf_merge_notes (bfd * ibfd, bfd *o
 		    /* xgettext:c-format */
 		    (_("error: %pB uses 64-bit doubles but "
 		       "%pB uses 32-bit doubles"), ibfd, obfd);
-		  result = FALSE;
+		  result = false;
 		}
 	      else
 		/* ibfd uses 32-bit doubles, obfd uses 64-bit doubles.
@@ -2561,7 +2565,7 @@ v850_elf_merge_notes (bfd * ibfd, bfd *o
 		    /* xgettext:c-format */
 		    (_("error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"),
 		     ibfd, obfd);
-		  result = FALSE;
+		  result = false;
 		}
 	      else
 		/* ibfd uses FPU-2.0, obfd uses FPU-3.0.  Leave obfd as it is.  */
@@ -2681,7 +2685,7 @@ v850_elf_print_notes (bfd * abfd, FILE *
 
 /* Set the right machine number and architecture.  */
 
-static bfd_boolean
+static bool
 v850_elf_object_p (bfd *abfd)
 {
   enum bfd_architecture arch;
@@ -2711,7 +2715,7 @@ v850_elf_object_p (bfd *abfd)
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   return bfd_default_set_arch_mach (abfd, arch, mach);
@@ -2719,7 +2723,7 @@ v850_elf_object_p (bfd *abfd)
 
 /* Store the machine number in the flags field.  */
 
-static bfd_boolean
+static bool
 v850_elf_final_write_processing (bfd *abfd)
 {
   unsigned long val;
@@ -2755,31 +2759,31 @@ v850_elf_final_write_processing (bfd *ab
 
 /* Function to keep V850 specific file flags.  */
 
-static bfd_boolean
+static bool
 v850_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file
    to the output object file when linking.  */
 
-static bfd_boolean
+static bool
 v850_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword out_flags;
   flagword in_flags;
-  bfd_boolean result = TRUE;
+  bool result = true;
 
   if (   bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   result &= v850_elf_merge_notes (ibfd, obfd);
 
@@ -2795,9 +2799,9 @@ v850_elf_merge_private_bfd_data (bfd *ib
 	 unitialised values, which surprise surprise, correspond
 	 to the default values.  */
       if (bfd_get_arch_info (ibfd)->the_default)
-	return TRUE;
+	return true;
 
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
@@ -2880,7 +2884,7 @@ v850_elf_merge_private_bfd_data (bfd *ib
 
 /* Display the flags field.  */
 
-static bfd_boolean
+static bool
 v850_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE * file = (FILE *) ptr;
@@ -2919,7 +2923,7 @@ v850_elf_print_private_bfd_data (bfd *ab
 
   v850_elf_print_notes (abfd, file);
 
-  return TRUE;
+  return true;
 }
 
 /* V850 ELF uses four common sections.  One is the usual one, and the
@@ -2929,20 +2933,34 @@ v850_elf_print_private_bfd_data (bfd *ab
    respectively, which yields smaller, faster assembler code.  This
    approach is copied from elf32-mips.c.  */
 
-static asection  v850_elf_scom_section;
-static asymbol   v850_elf_scom_symbol;
-static asymbol * v850_elf_scom_symbol_ptr;
-static asection  v850_elf_tcom_section;
-static asymbol   v850_elf_tcom_symbol;
-static asymbol * v850_elf_tcom_symbol_ptr;
-static asection  v850_elf_zcom_section;
-static asymbol   v850_elf_zcom_symbol;
-static asymbol * v850_elf_zcom_symbol_ptr;
+static asection v850_elf_scom_section;
+static const asymbol v850_elf_scom_symbol =
+  GLOBAL_SYM_INIT (".scommon", &v850_elf_scom_section);
+static asection v850_elf_scom_section =
+  BFD_FAKE_SECTION (v850_elf_scom_section, &v850_elf_scom_symbol,
+		    ".scommon", 0,
+		    SEC_IS_COMMON | SEC_SMALL_DATA | SEC_ALLOC | SEC_DATA);
+
+static asection v850_elf_tcom_section;
+static const asymbol v850_elf_tcom_symbol =
+  GLOBAL_SYM_INIT (".tcommon", &v850_elf_tcom_section);
+static asection v850_elf_tcom_section =
+  BFD_FAKE_SECTION (v850_elf_tcom_section, &v850_elf_tcom_symbol,
+		    ".tcommon", 0,
+		    SEC_IS_COMMON | SEC_SMALL_DATA);
+
+static asection v850_elf_zcom_section;
+static const asymbol v850_elf_zcom_symbol =
+  GLOBAL_SYM_INIT (".zcommon", &v850_elf_zcom_section);
+static asection v850_elf_zcom_section =
+  BFD_FAKE_SECTION (v850_elf_zcom_section, &v850_elf_zcom_symbol,
+		    ".zcommon", 0,
+		    SEC_IS_COMMON | SEC_SMALL_DATA);
 
 /* Given a BFD section, try to locate the
    corresponding ELF section index.  */
 
-static bfd_boolean
+static bool
 v850_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
 				   asection *sec,
 				   int *retval)
@@ -2954,9 +2972,9 @@ v850_elf_section_from_bfd_section (bfd *
   else if (strcmp (bfd_section_name (sec), ".zcommon") == 0)
     *retval = SHN_V850_ZCOMMON;
   else
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Handle the special V850 section numbers that a symbol may use.  */
@@ -2997,55 +3015,16 @@ v850_elf_symbol_processing (bfd *abfd, a
   switch (indx)
     {
     case SHN_V850_SCOMMON:
-      if (v850_elf_scom_section.name == NULL)
-	{
-	  /* Initialize the small common section.  */
-	  v850_elf_scom_section.name	       = ".scommon";
-	  v850_elf_scom_section.flags	       = SEC_IS_COMMON | SEC_ALLOC | SEC_DATA;
-	  v850_elf_scom_section.output_section = & v850_elf_scom_section;
-	  v850_elf_scom_section.symbol	       = & v850_elf_scom_symbol;
-	  v850_elf_scom_section.symbol_ptr_ptr = & v850_elf_scom_symbol_ptr;
-	  v850_elf_scom_symbol.name	       = ".scommon";
-	  v850_elf_scom_symbol.flags	       = BSF_SECTION_SYM;
-	  v850_elf_scom_symbol.section	       = & v850_elf_scom_section;
-	  v850_elf_scom_symbol_ptr	       = & v850_elf_scom_symbol;
-	}
       asym->section = & v850_elf_scom_section;
       asym->value = elfsym->internal_elf_sym.st_size;
       break;
 
     case SHN_V850_TCOMMON:
-      if (v850_elf_tcom_section.name == NULL)
-	{
-	  /* Initialize the tcommon section.  */
-	  v850_elf_tcom_section.name	       = ".tcommon";
-	  v850_elf_tcom_section.flags	       = SEC_IS_COMMON;
-	  v850_elf_tcom_section.output_section = & v850_elf_tcom_section;
-	  v850_elf_tcom_section.symbol	       = & v850_elf_tcom_symbol;
-	  v850_elf_tcom_section.symbol_ptr_ptr = & v850_elf_tcom_symbol_ptr;
-	  v850_elf_tcom_symbol.name	       = ".tcommon";
-	  v850_elf_tcom_symbol.flags	       = BSF_SECTION_SYM;
-	  v850_elf_tcom_symbol.section	       = & v850_elf_tcom_section;
-	  v850_elf_tcom_symbol_ptr	       = & v850_elf_tcom_symbol;
-	}
       asym->section = & v850_elf_tcom_section;
       asym->value = elfsym->internal_elf_sym.st_size;
       break;
 
     case SHN_V850_ZCOMMON:
-      if (v850_elf_zcom_section.name == NULL)
-	{
-	  /* Initialize the zcommon section.  */
-	  v850_elf_zcom_section.name	       = ".zcommon";
-	  v850_elf_zcom_section.flags	       = SEC_IS_COMMON;
-	  v850_elf_zcom_section.output_section = & v850_elf_zcom_section;
-	  v850_elf_zcom_section.symbol	       = & v850_elf_zcom_symbol;
-	  v850_elf_zcom_section.symbol_ptr_ptr = & v850_elf_zcom_symbol_ptr;
-	  v850_elf_zcom_symbol.name	       = ".zcommon";
-	  v850_elf_zcom_symbol.flags	       = BSF_SECTION_SYM;
-	  v850_elf_zcom_symbol.section	       = & v850_elf_zcom_section;
-	  v850_elf_zcom_symbol_ptr	       = & v850_elf_zcom_symbol;
-	}
       asym->section = & v850_elf_zcom_section;
       asym->value = elfsym->internal_elf_sym.st_size;
       break;
@@ -3055,7 +3034,7 @@ v850_elf_symbol_processing (bfd *abfd, a
 /* Hook called by the linker routine which adds symbols from an object
    file.  We must handle the special v850 section numbers here.  */
 
-static bfd_boolean
+static bool
 v850_elf_add_symbol_hook (bfd *abfd,
 			  struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			  Elf_Internal_Sym *sym,
@@ -3095,24 +3074,24 @@ v850_elf_add_symbol_hook (bfd *abfd,
     {
     case SHN_V850_SCOMMON:
       *secp = bfd_make_section_old_way (abfd, ".scommon");
-      (*secp)->flags |= SEC_IS_COMMON;
+      (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
       *valp = sym->st_size;
       break;
 
     case SHN_V850_TCOMMON:
       *secp = bfd_make_section_old_way (abfd, ".tcommon");
-      (*secp)->flags |= SEC_IS_COMMON;
+      (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
       *valp = sym->st_size;
       break;
 
     case SHN_V850_ZCOMMON:
       *secp = bfd_make_section_old_way (abfd, ".zcommon");
-      (*secp)->flags |= SEC_IS_COMMON;
+      (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
       *valp = sym->st_size;
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 static int
@@ -3145,37 +3124,42 @@ v850_elf_link_output_symbol_hook (struct
   return 1;
 }
 
-static bfd_boolean
+static bool
 v850_elf_section_from_shdr (bfd *abfd,
 			    Elf_Internal_Shdr *hdr,
 			    const char *name,
 			    int shindex)
 {
+  flagword flags;
+
   /* There ought to be a place to keep ELF backend specific flags, but
      at the moment there isn't one.  We just keep track of the
      sections by their name, instead.  */
 
   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
 
+  flags = 0;
   switch (hdr->sh_type)
     {
     case SHT_V850_SCOMMON:
     case SHT_V850_TCOMMON:
     case SHT_V850_ZCOMMON:
-      if (!bfd_set_section_flags (hdr->bfd_section,
-				  (bfd_section_flags (hdr->bfd_section)
-				   | SEC_IS_COMMON)))
-	return FALSE;
+      flags = SEC_IS_COMMON;
     }
 
-  return TRUE;
+  if ((hdr->sh_flags & SHF_V850_GPREL) != 0)
+    flags |= SEC_SMALL_DATA;
+
+  return (flags == 0
+	  || bfd_set_section_flags (hdr->bfd_section,
+				    hdr->bfd_section->flags | flags));
 }
 
 /* Set the correct type for a V850 ELF section.  We do this
    by the section name, which is a hack, but ought to work.  */
 
-static bfd_boolean
+static bool
 v850_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 			Elf_Internal_Shdr *hdr,
 			asection *sec)
@@ -3197,12 +3181,12 @@ v850_elf_fake_sections (bfd *abfd ATTRIB
       hdr->sh_entsize = SIZEOF_V850_NOTE;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 v850_elf_relax_delete_bytes (bfd *abfd,
 			     asection *sec,
 			     bfd_vma addr,
@@ -3412,7 +3396,7 @@ v850_elf_relax_delete_bytes (bfd *abfd,
 	++ shndx;
     }
 
-  return TRUE;
+  return true;
 }
 
 #define NOP_OPCODE	(0x0000)
@@ -3435,11 +3419,11 @@ v850_elf_relax_delete_bytes (bfd *abfd,
 #define JMP_R_MASK	0xFFE0
 #define JMP_R1(insn)	((insn) & 0x1f)
 
-static bfd_boolean
+static bool
 v850_elf_relax_section (bfd *abfd,
 			asection *sec,
 			struct bfd_link_info *link_info,
-			bfd_boolean *again)
+			bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -3451,14 +3435,15 @@ v850_elf_relax_section (bfd *abfd,
   bfd_vma addr = 0;
   bfd_vma toaddr;
   int align_pad_size = 0;
-  bfd_boolean result = TRUE;
+  bool result = true;
 
-  *again = FALSE;
+  *again = false;
 
   if (bfd_link_relocatable (link_info)
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
 
@@ -3837,7 +3822,7 @@ v850_elf_relax_section (bfd *abfd,
 		  if (no_match < 0
 		      && ((insn[2] & JMP_R_MASK) != JMP_R
 			   || MOVEA_R2 (insn[1]) != JMP_R1 (insn[2])))
-		    no_match = 4;
+		    no_match = 2;
 		}
 	      else
 		{
@@ -4088,22 +4073,19 @@ v850_elf_relax_section (bfd *abfd,
     }
 
  finish:
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != (unsigned char *) contents)
+  if (elf_section_data (sec)->this_hdr.contents != (unsigned char *) contents)
     free (contents);
 
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (bfd_byte *) isymbuf)
+  if (symtab_hdr->contents != (bfd_byte *) isymbuf)
     free (isymbuf);
 
   return result;
 
  error_return:
-  result = FALSE;
+  result = false;
   goto finish;
 }
 
@@ -4249,7 +4231,7 @@ v800_elf_reloc_name_lookup (bfd * abfd,
 
 /* Set the howto pointer in CACHE_PTR for a V800 ELF reloc.  */
 
-static bfd_boolean
+static bool
 v800_elf_info_to_howto (bfd *		    abfd,
 			arelent *	    cache_ptr,
 			Elf_Internal_Rela * dst)
@@ -4268,11 +4250,11 @@ v800_elf_info_to_howto (bfd *		    abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = v800_elf_howto_table + (r_type - R_V810_NONE);
-  return TRUE;
+  return true;
 }
 
 #undef  TARGET_LITTLE_SYM
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-v850.h ./bfd/elf32-v850.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-v850.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-v850.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* V850 Note manipulation routines.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,8 +18,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-extern bfd_boolean v850_elf_create_sections
+extern bool v850_elf_create_sections
   (struct bfd_link_info *);
 
-extern bfd_boolean v850_elf_set_note
+extern bool v850_elf_set_note
   (bfd *, unsigned int, unsigned int);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-vax.c ./bfd/elf32-vax.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-vax.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-vax.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* VAX series support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Contributed by Matt Thomas <matt@3am-software.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -27,143 +27,142 @@
 #include "elf/vax.h"
 
 static reloc_howto_type *reloc_type_lookup (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean rtype_to_howto (bfd *, arelent *, Elf_Internal_Rela *);
+static bool rtype_to_howto (bfd *, arelent *, Elf_Internal_Rela *);
 static struct bfd_hash_entry *elf_vax_link_hash_newfunc (struct bfd_hash_entry *,
 							 struct bfd_hash_table *,
 							 const char *);
 static struct bfd_link_hash_table *elf_vax_link_hash_table_create (bfd *);
-static bfd_boolean elf_vax_check_relocs (bfd *, struct bfd_link_info *,
-					 asection *, const Elf_Internal_Rela *);
-static bfd_boolean elf_vax_adjust_dynamic_symbol (struct bfd_link_info *,
-						  struct elf_link_hash_entry *);
-static bfd_boolean elf_vax_size_dynamic_sections (bfd *, struct bfd_link_info *);
-static bfd_boolean elf_vax_relocate_section (bfd *, struct bfd_link_info *,
-					     bfd *, asection *, bfd_byte *,
-					     Elf_Internal_Rela *,
-					     Elf_Internal_Sym *, asection **);
-static bfd_boolean elf_vax_finish_dynamic_symbol (bfd *, struct bfd_link_info *,
-						  struct elf_link_hash_entry *,
-						  Elf_Internal_Sym *);
-static bfd_boolean elf_vax_finish_dynamic_sections (bfd *,
-						    struct bfd_link_info *);
+static bool elf_vax_check_relocs (bfd *, struct bfd_link_info *,
+				  asection *, const Elf_Internal_Rela *);
+static bool elf_vax_adjust_dynamic_symbol (struct bfd_link_info *,
+					   struct elf_link_hash_entry *);
+static bool elf_vax_size_dynamic_sections (bfd *, struct bfd_link_info *);
+static int elf_vax_relocate_section (bfd *, struct bfd_link_info *,
+				     bfd *, asection *, bfd_byte *,
+				     Elf_Internal_Rela *,
+				     Elf_Internal_Sym *, asection **);
+static bool elf_vax_finish_dynamic_symbol (bfd *, struct bfd_link_info *,
+					   struct elf_link_hash_entry *,
+					   Elf_Internal_Sym *);
+static bool elf_vax_finish_dynamic_sections (bfd *, struct bfd_link_info *);
 static bfd_vma elf_vax_plt_sym_val (bfd_vma, const asection *,
 				    const arelent *);
 
-static bfd_boolean elf32_vax_set_private_flags (bfd *, flagword);
-static bfd_boolean elf32_vax_print_private_bfd_data (bfd *, void *);
+static bool elf32_vax_set_private_flags (bfd *, flagword);
+static bool elf32_vax_print_private_bfd_data (bfd *, void *);
 
 static reloc_howto_type howto_table[] = {
   HOWTO (R_VAX_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_VAX_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_VAX_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_VAX_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_VAX_PC32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_PC32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_VAX_PC16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_PC16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_VAX_PC8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_PC8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000000ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_VAX_GOT32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_GOT32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   EMPTY_HOWTO (-1),
   EMPTY_HOWTO (-1),
@@ -173,17 +172,17 @@ static reloc_howto_type howto_table[] =
 
   HOWTO (R_VAX_PLT32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_PLT32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   EMPTY_HOWTO (-1),
   EMPTY_HOWTO (-1),
@@ -193,92 +192,92 @@ static reloc_howto_type howto_table[] =
 
   HOWTO (R_VAX_COPY,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_VAX_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_VAX_JMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_VAX_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VAX_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_VAX_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_VAX_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_VAX_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_VAX_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
-static bfd_boolean
+static bool
 rtype_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
@@ -290,10 +289,10 @@ rtype_to_howto (bfd *abfd, arelent *cach
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 #define elf_info_to_howto rtype_to_howto
@@ -417,20 +416,20 @@ struct elf_vax_link_hash_entry
 
 /* Declare this now that the above structures are defined.  */
 
-static bfd_boolean elf_vax_discard_copies (struct elf_vax_link_hash_entry *,
-					   void *);
+static bool elf_vax_discard_copies (struct elf_vax_link_hash_entry *,
+				    void *);
 
 /* Declare this now that the above structures are defined.  */
 
-static bfd_boolean elf_vax_instantiate_got_entries (struct elf_link_hash_entry *,
-						    void *);
+static bool elf_vax_instantiate_got_entries (struct elf_link_hash_entry *,
+					     void *);
 
 /* Traverse an VAX ELF linker hash table.  */
 
 #define elf_vax_link_hash_traverse(table, func, info)			\
   (elf_link_hash_traverse						\
    ((table),								\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Create an entry in an VAX ELF linker hash table.  */
@@ -470,7 +469,7 @@ static struct bfd_link_hash_table *
 elf_vax_link_hash_table_create (bfd *abfd)
 {
   struct elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_link_hash_table);
+  size_t amt = sizeof (struct elf_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -489,17 +488,17 @@ elf_vax_link_hash_table_create (bfd *abf
 }
 
 /* Keep vax-specific flags in the ELF header */
-static bfd_boolean
+static bool
 elf32_vax_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
-static bfd_boolean
+static bool
 elf32_vax_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -507,21 +506,21 @@ elf32_vax_merge_private_bfd_data (bfd *i
 
   if (   bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   in_flags  = elf_elfheader (ibfd)->e_flags;
 
   if (!elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Display the flags field */
-static bfd_boolean
+static bool
 elf32_vax_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -547,13 +546,13 @@ elf32_vax_print_private_bfd_data (bfd *a
 
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 /* Look through the relocs for a section during the first phase, and
    allocate space in the global offset table or procedure linkage
    table.  */
 
-static bfd_boolean
+static bool
 elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
 		      const Elf_Internal_Rela *relocs)
 {
@@ -565,7 +564,7 @@ elf_vax_check_relocs (bfd *abfd, struct
   asection *sreloc;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -598,7 +597,7 @@ elf_vax_check_relocs (bfd *abfd, struct
 
 	  /* If this is a local symbol, we resolve it directly without
 	     creating a global offset table entry.  */
-	  if (h->forced_local
+	  if (SYMBOL_REFERENCES_LOCAL (info, h)
 	      || h == elf_hash_table (info)->hgot
 	      || h == elf_hash_table (info)->hplt)
 	    break;
@@ -610,7 +609,7 @@ elf_vax_check_relocs (bfd *abfd, struct
 	      /* Create the .got section.  */
 	      elf_hash_table (info)->dynobj = dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return FALSE;
+		return false;
 	    }
 
 	  if (h != NULL)
@@ -712,6 +711,11 @@ elf_vax_check_relocs (bfd *abfd, struct
 		h->plt.refcount++;
 	    }
 
+	  /* Non-GOT reference may need a copy reloc in executable or
+	     a dynamic reloc in shared library.  */
+	  if (h != NULL)
+	    h->non_got_ref = 1;
+
 	  /* If we are creating a shared library, we need to copy the
 	     reloc into the shared library.  */
 	  if (bfd_link_pic (info)
@@ -723,10 +727,10 @@ elf_vax_check_relocs (bfd *abfd, struct
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, dynobj, 2, abfd, /*rela?*/ TRUE);
+		    (sec, dynobj, 2, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 
 		  if (sec->flags & SEC_READONLY)
 		    info->flags |= DF_TEXTREL;
@@ -760,7 +764,7 @@ elf_vax_check_relocs (bfd *abfd, struct
 		      p = ((struct elf_vax_pcrel_relocs_copied *)
 			   bfd_alloc (dynobj, (bfd_size_type) sizeof *p));
 		      if (p == NULL)
-			return FALSE;
+			return false;
 		      p->next = eh->pcrel_relocs_copied;
 		      eh->pcrel_relocs_copied = p;
 		      p->section = sreloc;
@@ -777,14 +781,14 @@ elf_vax_check_relocs (bfd *abfd, struct
 	     Reconstruct it for later use during GC.  */
 	case R_VAX_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_VAX_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -792,7 +796,7 @@ elf_vax_check_relocs (bfd *abfd, struct
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -822,7 +826,7 @@ elf_vax_gc_mark_hook (asection *sec,
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf_vax_adjust_dynamic_symbol (struct bfd_link_info *info,
 			       struct elf_link_hash_entry *h)
 {
@@ -857,7 +861,7 @@ elf_vax_adjust_dynamic_symbol (struct bf
 	     linkage table, and we can just do a PCxx reloc instead.  */
 	  h->plt.offset = (bfd_vma) -1;
 	  h->needs_plt = 0;
-	  return TRUE;
+	  return true;
 	}
 
       s = elf_hash_table (info)->splt;
@@ -900,7 +904,7 @@ elf_vax_adjust_dynamic_symbol (struct bf
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
-      return TRUE;
+      return true;
     }
 
   /* Reinitialize the plt offset now that it is not used as a reference
@@ -916,7 +920,7 @@ elf_vax_adjust_dynamic_symbol (struct bf
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -927,7 +931,12 @@ elf_vax_adjust_dynamic_symbol (struct bf
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
+
+  /* If there are no references to this symbol that do not use the
+     GOT relocation, we don't need to generate a copy reloc.  */
+  if (!h->non_got_ref)
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -963,19 +972,19 @@ elf_vax_adjust_dynamic_symbol (struct bf
    and PLT (.GOT) reference counts back to -1 so normal PC32 relocation
    will be done.  */
 
-static bfd_boolean
+static bool
 elf_vax_discard_got_entries (struct elf_link_hash_entry *h,
 			     void *infoptr ATTRIBUTE_UNUSED)
 {
   h->got.refcount = -1;
   h->plt.refcount = -1;
 
-  return TRUE;
+  return true;
 }
 
 /* Discard unused dynamic data if this is a static link.  */
 
-static bfd_boolean
+static bool
 elf_vax_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 			      struct bfd_link_info *info)
 {
@@ -1009,19 +1018,17 @@ elf_vax_always_size_sections (bfd *outpu
 			    elf_vax_discard_got_entries,
 			    info);
 
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
-  bfd_boolean plt;
-  bfd_boolean relocs;
-  bfd_boolean reltext;
+  bool relocs;
 
   dynobj = elf_hash_table (info)->dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -1057,9 +1064,7 @@ elf_vax_size_dynamic_sections (bfd *outp
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  plt = FALSE;
-  relocs = FALSE;
-  reltext = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -1074,40 +1079,21 @@ elf_vax_size_dynamic_sections (bfd *outp
       if (strcmp (name, ".plt") == 0)
 	{
 	  /* Remember whether there is a PLT.  */
-	  plt = s->size != 0;
+	  ;
 	}
-      else if (CONST_STRNEQ (name, ".rela"))
+      else if (startswith (name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
-	      asection *target;
-
-	      /* Remember whether there are any reloc sections other
-		 than .rela.plt.  */
 	      if (strcmp (name, ".rela.plt") != 0)
-		{
-		  const char *outname;
-
-		  relocs = TRUE;
-
-		  /* If this relocation section applies to a read only
-		     section, then we probably need a DT_TEXTREL
-		     entry.  .rela.plt is actually associated with
-		     .got.plt, which is never readonly.  */
-		  outname = bfd_section_name (s->output_section);
-		  target = bfd_get_section_by_name (output_bfd, outname + 5);
-		  if (target != NULL
-		      && (target->flags & SEC_READONLY) != 0
-		      && (target->flags & SEC_ALLOC) != 0)
-		    reltext = TRUE;
-		}
+		relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
 	      s->reloc_count = 0;
 	    }
 	}
-      else if (! CONST_STRNEQ (name, ".got")
+      else if (! startswith (name, ".got")
 	       && strcmp (name, ".dynbss") != 0)
 	{
 	  /* It's not one of our sections, so don't allocate space.  */
@@ -1135,51 +1121,10 @@ elf_vax_size_dynamic_sections (bfd *outp
       /* Allocate memory for the section contents.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
-    }
-
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf_vax_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (!bfd_link_pic (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (plt)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-	}
-
-      if (reltext || (info->flags & DF_TEXTREL) != 0)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
+	return false;
     }
-#undef add_dynamic_entry
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* This function is called via elf_vax_link_hash_traverse if we are
@@ -1188,7 +1133,7 @@ elf_vax_size_dynamic_sections (bfd *outp
    in regular objects.  We allocated space for them in the check_relocs
    routine, but we won't fill them in in the relocate_section routine.  */
 
-static bfd_boolean
+static bool
 elf_vax_discard_copies (struct elf_vax_link_hash_entry *h,
 			void * ignore ATTRIBUTE_UNUSED)
 {
@@ -1196,12 +1141,12 @@ elf_vax_discard_copies (struct elf_vax_l
 
   /* We only discard relocs for symbols defined in a regular object.  */
   if (!h->root.def_regular)
-    return TRUE;
+    return true;
 
   for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
     s->section->size -= s->count * sizeof (Elf32_External_Rela);
 
-  return TRUE;
+  return true;
 }
 
 /* This function is called via elf_link_hash_traverse.  It looks for
@@ -1211,7 +1156,7 @@ elf_vax_discard_copies (struct elf_vax_l
    be done.  Otherwise space in the .got and .rela.got will be reserved
    for the symbol.  */
 
-static bfd_boolean
+static bool
 elf_vax_instantiate_got_entries (struct elf_link_hash_entry *h, void * infoptr)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) infoptr;
@@ -1221,7 +1166,7 @@ elf_vax_instantiate_got_entries (struct
 
   /* We don't care about non-GOT (and non-PLT) entries.  */
   if (h->got.refcount <= 0 && h->plt.refcount <= 0)
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -1240,7 +1185,7 @@ elf_vax_instantiate_got_entries (struct
       if (h->dynindx == -1)
 	{
 	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       /* Allocate space in the .got and .rela.got sections.  */
@@ -1248,12 +1193,12 @@ elf_vax_instantiate_got_entries (struct
       srelgot->size += sizeof (Elf32_External_Rela);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relocate an VAX ELF section.  */
 
-static bfd_boolean
+static int
 elf_vax_relocate_section (bfd *output_bfd,
 			  struct bfd_link_info *info,
 			  bfd *input_bfd,
@@ -1299,7 +1244,7 @@ elf_vax_relocate_section (bfd *output_bf
       if (r_type < 0 || r_type >= (int) R_VAX_max)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       howto = howto_table + r_type;
 
@@ -1315,8 +1260,8 @@ elf_vax_relocate_section (bfd *output_bf
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc;
-	  bfd_boolean warned, ignored;
+	  bool unresolved_reloc;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1471,7 +1416,7 @@ elf_vax_relocate_section (bfd *output_bf
 	    {
 	      Elf_Internal_Rela outrel;
 	      bfd_byte *loc;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
@@ -1479,21 +1424,21 @@ elf_vax_relocate_section (bfd *output_bf
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_get_dynamic_reloc_section
-		    (input_bfd, input_section, /*rela?*/ TRUE);
+		    (input_bfd, input_section, /*rela?*/ true);
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -1513,7 +1458,7 @@ elf_vax_relocate_section (bfd *output_bf
 		{
 		  if (r_type == R_VAX_32)
 		    {
-		      relocate = TRUE;
+		      relocate = true;
 		      outrel.r_info = ELF32_R_INFO (0, R_VAX_RELATIVE);
 		      BFD_ASSERT (bfd_get_signed_32 (input_bfd,
 						     &contents[rel->r_offset]) == 0);
@@ -1528,7 +1473,7 @@ elf_vax_relocate_section (bfd *output_bf
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -1630,7 +1575,7 @@ elf_vax_relocate_section (bfd *output_bf
 							    symtab_hdr->sh_link,
 							    sym->st_name);
 		    if (name == NULL)
-		      return FALSE;
+		      return false;
 		    if (*name == '\0')
 		      name = bfd_section_name (sec);
 		  }
@@ -1643,13 +1588,13 @@ elf_vax_relocate_section (bfd *output_bf
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf_vax_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
 			       struct elf_link_hash_entry *h,
 			       Elf_Internal_Sym *sym)
@@ -1781,12 +1726,12 @@ elf_vax_finish_dynamic_symbol (bfd *outp
       || h == elf_hash_table (info)->hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd *dynobj;
@@ -1874,7 +1819,7 @@ elf_vax_finish_dynamic_sections (bfd *ou
   if (elf_section_data (sgot->output_section) != NULL)
     elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-visium.c ./bfd/elf32-visium.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-visium.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-visium.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 /* Visium-specific support for 32-bit ELF.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,220 +28,220 @@
 #include "libiberty.h"
 
 static bfd_reloc_status_type visium_elf_howto_parity_reloc
-  (bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **);
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 
 static reloc_howto_type visium_elf_howto_table[] = {
   /* This reloc does nothing.  */
   HOWTO (R_VISIUM_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VISIUM_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 8 bit absolute relocation.  */
   HOWTO (R_VISIUM_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VISIUM_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_VISIUM_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VISIUM_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_VISIUM_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VISIUM_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 
   /* A 8 bit PC relative relocation.  */
   HOWTO (R_VISIUM_8_PCREL,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VISIUM_8_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit PC relative relocation.  */
   HOWTO (R_VISIUM_16_PCREL,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VISIUM_16_PCREL",	/* name */
-	 FALSE,			/* partial inplace */
+	 false,			/* partial inplace */
 	 0x0000,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 32-bit PC relative relocation.  */
   HOWTO (R_VISIUM_32_PCREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_VISIUM_32_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16-bit PC word relative offset, relative to start of instruction
      and always in the second half of the instruction.  */
   HOWTO (R_VISIUM_PC16,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 visium_elf_howto_parity_reloc,	/* special_function */
 	 "R_VISIUM_PC16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* The high 16 bits of symbol value.  */
   HOWTO (R_VISIUM_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 visium_elf_howto_parity_reloc,	/* special_function */
 	 "R_VISIUM_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The low 16 bits of symbol value.  */
   HOWTO (R_VISIUM_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 visium_elf_howto_parity_reloc,	/* special_function */
 	 "R_VISIUM_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit immediate value.  */
   HOWTO (R_VISIUM_IM16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 visium_elf_howto_parity_reloc,	/* special_function */
 	 "R_VISIUM_IM16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000000,		/* src_mask */
 	 0x000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The high 16 bits of symbol value, pc relative.  */
   HOWTO (R_VISIUM_HI16_PCREL,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 visium_elf_howto_parity_reloc,	/* special_function */
 	 "R_VISIUM_HI16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* The low 16 bits of symbol value, pc relative.  */
   HOWTO (R_VISIUM_LO16_PCREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 visium_elf_howto_parity_reloc,	/* special_function */
 	 "R_VISIUM_LO16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit immediate value, pc relative.  */
   HOWTO (R_VISIUM_IM16_PCREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 visium_elf_howto_parity_reloc,	/* special_function */
 	 "R_VISIUM_IM16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000000,		/* src_mask */
 	 0x000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
 };
 
@@ -249,33 +249,33 @@ static reloc_howto_type visium_elf_howto
 static reloc_howto_type visium_elf_vtinherit_howto =
   HOWTO (R_VISIUM_GNU_VTINHERIT,      /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			   /* size */
 	 0,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_dont,   /* complain_on_overflow */
 	 NULL,			   /* special_function */
 	 "R_VISIUM_GNU_VTINHERIT", /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0,			   /* src_mask */
 	 0,			   /* dst_mask */
-	 FALSE);		   /* pcrel_offset */
+	 false);		   /* pcrel_offset */
 
 /* GNU extension to record C++ vtable member usage.  */
 static reloc_howto_type visium_elf_vtentry_howto =
   HOWTO (R_VISIUM_GNU_VTENTRY,	   /* type */
 	 0,			   /* rightshift */
-	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
+	 4,			   /* size */
 	 0,			   /* bitsize */
-	 FALSE,			   /* pc_relative */
+	 false,			   /* pc_relative */
 	 0,			   /* bitpos */
 	 complain_overflow_dont,   /* complain_on_overflow */
 	 NULL,			   /* special_function */
 	 "R_VISIUM_GNU_VTENTRY",   /* name */
-	 FALSE,			   /* partial_inplace */
+	 false,			   /* partial_inplace */
 	 0,			   /* src_mask */
 	 0,			   /* dst_mask */
-	 FALSE);		   /* pcrel_offset */
+	 false);		   /* pcrel_offset */
 
 /* Return the parity bit for INSN shifted to its final position.  */
 
@@ -304,7 +304,7 @@ visium_parity_bit (bfd_vma insn)
 
 static bfd_reloc_status_type
 visium_elf_howto_parity_reloc (bfd * input_bfd, arelent *reloc_entry,
-			       asymbol *symbol, PTR data,
+			       asymbol *symbol, void *data,
 			       asection *input_section, bfd *output_bfd,
 			       char **error_message ATTRIBUTE_UNUSED)
 {
@@ -458,7 +458,7 @@ visium_reloc_name_lookup (bfd *abfd ATTR
 
 /* Set the howto pointer for a VISIUM ELF reloc.  */
 
-static bfd_boolean
+static bool
 visium_info_to_howto_rela (bfd *abfd, arelent *cache_ptr,
 			   Elf_Internal_Rela *dst)
 {
@@ -481,19 +481,19 @@ visium_info_to_howto_rela (bfd *abfd, ar
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      abfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       cache_ptr->howto = &visium_elf_howto_table[r_type];
       break;
     }
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 visium_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			 asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -503,7 +503,7 @@ visium_elf_check_relocs (bfd *abfd, stru
   const Elf_Internal_Rela *rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -531,24 +531,24 @@ visium_elf_check_relocs (bfd *abfd, stru
 	     Reconstruct it for later use during GC.  */
 	case R_VISIUM_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_VISIUM_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relocate a VISIUM ELF section.  */
 
-static bfd_boolean
+static int
 visium_elf_relocate_section (bfd *output_bfd,
 			     struct bfd_link_info *info, bfd *input_bfd,
 			     asection *input_section, bfd_byte *contents,
@@ -603,8 +603,8 @@ visium_elf_relocate_section (bfd *output
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc;
-	  bfd_boolean warned, ignored;
+	  bool unresolved_reloc;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -673,7 +673,7 @@ visium_elf_relocate_section (bfd *output
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -699,7 +699,7 @@ visium_elf_relocate_section (bfd *output
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function is called during section gc to discover the section a
@@ -722,55 +722,55 @@ visium_elf_gc_mark_hook (asection *sec,
   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
 }
 
-static bfd_boolean
+static bool
 visium_elf_init_file_header (bfd *abfd, struct bfd_link_info *info)
 {
   Elf_Internal_Ehdr *i_ehdrp;
 
   if (!_bfd_elf_init_file_header (abfd, info))
-    return FALSE;
+    return false;
 
   i_ehdrp = elf_elfheader (abfd);
   i_ehdrp->e_ident[EI_ABIVERSION] = 1;
-  return TRUE;
+  return true;
 }
 
 /* Function to set the ELF flag bits.  */
 
-static bfd_boolean
+static bool
 visium_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Copy backend specific data from one object module to another.  */
 
-static bfd_boolean
+static bool
 visium_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (!elf_flags_init (obfd)
 	      || elf_elfheader (obfd)->e_flags ==
 	      elf_elfheader (ibfd)->e_flags);
 
   elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
-  elf_flags_init (obfd) = TRUE;
+  elf_flags_init (obfd) = true;
 
   /* Copy object attributes.  */
   _bfd_elf_copy_obj_attributes (ibfd, obfd);
 
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object
    file to the output object file when linking.  */
 
-static bfd_boolean
+static bool
 visium_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -792,7 +792,7 @@ visium_elf_merge_private_bfd_data (bfd *
   if (!elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
   else
@@ -826,10 +826,10 @@ visium_elf_merge_private_bfd_data (bfd *
 	   ibfd, new_opt_with, opt_arch, old_opt_with, opt_arch);
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 visium_elf_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -851,7 +851,7 @@ visium_elf_print_private_bfd_data (bfd *
     fprintf (file, " -mtune=mcm24");
 
   fputc ('\n', file);
-  return TRUE;
+  return true;
 }
 
 #define ELF_ARCH		bfd_arch_visium
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-wasm32.c ./bfd/elf32-wasm32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-wasm32.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-wasm32.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF for the WebAssembly target
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,32 +29,32 @@ static reloc_howto_type elf32_wasm32_how
 {
   HOWTO (R_WASM32_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_WASM32_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit absolute */
   HOWTO (R_WASM32_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_WASM32_32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 /* Look up the relocation CODE.  */
@@ -116,7 +116,7 @@ elf32_wasm32_rtype_to_howto (bfd *abfd,
 
 /* Translate the ELF-internal relocation RELA into CACHE_PTR.  */
 
-static bfd_boolean
+static bool
 elf32_wasm32_info_to_howto_rela (bfd *abfd,
 				arelent *cache_ptr,
 				Elf_Internal_Rela *dst)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-xc16x.c ./bfd/elf32-xc16x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-xc16x.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-xc16x.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,487 +0,0 @@
-/* Infineon XC16X-specific support for 16-bit ELF.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
-   Contributed by KPIT Cummins Infosystems
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-#include "elf-bfd.h"
-#include "elf/xc16x.h"
-#include "dwarf2.h"
-#include "libiberty.h"
-
-static reloc_howto_type xc16x_elf_howto_table [] =
-{
-  /* This reloc does nothing.  */
-  HOWTO (R_XC16X_NONE,		/* type */
-	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_XC16X_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* An 8 bit absolute relocation.  */
-  HOWTO (R_XC16X_ABS_8,		/* type */
-	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 8,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_XC16X_ABS_8",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000,		/* src_mask */
-	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A 16 bit absolute relocation.  */
-  HOWTO (R_XC16X_ABS_16,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_XC16X_ABS_16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x00000000,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_XC16X_ABS_32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_XC16X_ABS_32",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x00000000,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-
-  /* A PC relative 8 bit relocation.  */
-  HOWTO (R_XC16X_8_PCREL,	/* type */
-	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 8,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_XC16X_8_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0000,		/* src_mask */
-	 0x00ff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
-
-  /* Relocation regarding page number.  */
-    HOWTO (R_XC16X_PAG,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_XC16X_PAG",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x00000000,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-
-  /* Relocation regarding page number.  */
-      HOWTO (R_XC16X_POF,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos  */
-	 complain_overflow_signed, /* complain_on_overflow  */
-	 bfd_elf_generic_reloc, /* special_function  */
-	 "R_XC16X_POF",	/* name  */
-	 TRUE,			/* partial_inplace  */
-	 0x00000000,		/* src_mask  */
-	 0x0000ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
-
-
-  /* Relocation regarding segment number.   */
-      HOWTO (R_XC16X_SEG,	/* type  */
-	 0,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
-	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
-	 0,			/* bitpos  */
-	 complain_overflow_signed, /* complain_on_overflow  */
-	 bfd_elf_generic_reloc, /* special_function  */
-	 "R_XC16X_SEG",	/* name  */
-	 TRUE,			/* partial_inplace  */
-	 0x00000000,		/* src_mask  */
-	 0x0000ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
-
-  /* Relocation regarding segment offset.  */
-      HOWTO (R_XC16X_SOF,	/* type  */
-	 0,			/* rightshift  */
-	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
-	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
-	 0,			/* bitpos  */
-	 complain_overflow_signed, /* complain_on_overflow  */
-	 bfd_elf_generic_reloc, /* special_function  */
-	 "R_XC16X_SOF",	/* name */
-	 TRUE,			/* partial_inplace  */
-	 0x00000000,		/* src_mask  */
-	 0x0000ffff,		/* dst_mask  */
-	 FALSE)			/* pcrel_offset  */
-};
-
-
-/* Map BFD reloc types to XC16X ELF reloc types.  */
-
-struct xc16x_reloc_map
-{
-  bfd_reloc_code_real_type bfd_reloc_val;
-  unsigned int xc16x_reloc_val;
-};
-
-static const struct xc16x_reloc_map xc16x_reloc_map [] =
-{
-  { BFD_RELOC_NONE,	      R_XC16X_NONE },
-  { BFD_RELOC_8,	      R_XC16X_ABS_8 },
-  { BFD_RELOC_16,	      R_XC16X_ABS_16 },
-  { BFD_RELOC_32,	      R_XC16X_ABS_32 },
-  { BFD_RELOC_8_PCREL,	      R_XC16X_8_PCREL },
-  { BFD_RELOC_XC16X_PAG,      R_XC16X_PAG},
-  { BFD_RELOC_XC16X_POF,      R_XC16X_POF},
-  { BFD_RELOC_XC16X_SEG,      R_XC16X_SEG},
-  { BFD_RELOC_XC16X_SOF,      R_XC16X_SOF},
-};
-
-
-/* This function is used to search for correct relocation type from
-   howto structure.  */
-
-static reloc_howto_type *
-xc16x_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			 bfd_reloc_code_real_type code)
-{
-  unsigned int i;
-
-  for (i = ARRAY_SIZE (xc16x_reloc_map); --i;)
-    if (xc16x_reloc_map [i].bfd_reloc_val == code)
-      return & xc16x_elf_howto_table [xc16x_reloc_map[i].xc16x_reloc_val];
-
-  return NULL;
-}
-
-static reloc_howto_type *
-xc16x_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			 const char *r_name)
-{
-  unsigned int i;
-
-  for (i = 0; i < ARRAY_SIZE (xc16x_elf_howto_table); i++)
-    if (xc16x_elf_howto_table[i].name != NULL
-	&& strcasecmp (xc16x_elf_howto_table[i].name, r_name) == 0)
-      return &xc16x_elf_howto_table[i];
-
-  return NULL;
-}
-
-static reloc_howto_type *
-elf32_xc16x_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED, unsigned r_type)
-{
-  if (r_type < ARRAY_SIZE (xc16x_elf_howto_table))
-    return & xc16x_elf_howto_table[r_type];
-
-  return NULL;
-}
-
-/* For a particular operand this function is
-   called to finalise the type of relocation.  */
-
-static bfd_boolean
-elf32_xc16x_info_to_howto (bfd *abfd, arelent *bfd_reloc,
-			   Elf_Internal_Rela *elf_reloc)
-{
-  unsigned int r;
-  unsigned int i;
-
-  r = ELF32_R_TYPE (elf_reloc->r_info);
-  for (i = 0; i < ARRAY_SIZE (xc16x_elf_howto_table); i++)
-    if (xc16x_elf_howto_table[i].type == r)
-      {
-	bfd_reloc->howto = &xc16x_elf_howto_table[i];
-	return TRUE;
-      }
-  /* xgettext:c-format */
-  _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r);
-  bfd_set_error (bfd_error_bad_value);
-  return FALSE;
-}
-
-static bfd_reloc_status_type
-elf32_xc16x_final_link_relocate (unsigned long r_type,
-				 bfd *input_bfd,
-				 bfd *output_bfd ATTRIBUTE_UNUSED,
-				 asection *input_section ATTRIBUTE_UNUSED,
-				 bfd_byte *contents,
-				 bfd_vma offset,
-				 bfd_vma value,
-				 bfd_vma addend,
-				 struct bfd_link_info *info ATTRIBUTE_UNUSED,
-				 asection *sym_sec ATTRIBUTE_UNUSED,
-				 int is_local ATTRIBUTE_UNUSED)
-{
-  bfd_byte *hit_data = contents + offset;
-  bfd_vma val1;
-
-  switch (r_type)
-    {
-    case R_XC16X_NONE:
-      return bfd_reloc_ok;
-
-    case R_XC16X_ABS_16:
-      value += addend;
-      bfd_put_16 (input_bfd, value, hit_data);
-      return bfd_reloc_ok;
-
-    case R_XC16X_8_PCREL:
-      bfd_put_8 (input_bfd, value, hit_data);
-      return bfd_reloc_ok;
-
-      /* Following case is to find page number from actual
-	 address for this divide value by 16k i.e. page size.  */
-
-    case R_XC16X_PAG:
-      value += addend;
-      value /= 0x4000;
-      bfd_put_16 (input_bfd, value, hit_data);
-      return bfd_reloc_ok;
-
-      /* Following case is to find page offset from actual address
-	 for this take modulo of value by 16k i.e. page size.  */
-
-    case R_XC16X_POF:
-      value += addend;
-      value %= 0x4000;
-      bfd_put_16 (input_bfd, value, hit_data);
-      return bfd_reloc_ok;
-
-      /* Following case is to find segment number from actual
-	 address for this divide value by 64k i.e. segment size.  */
-
-    case R_XC16X_SEG:
-      value += addend;
-      value /= 0x10000;
-      bfd_put_16 (input_bfd, value, hit_data);
-      return bfd_reloc_ok;
-
-      /* Following case is to find segment offset from actual address
-	 for this take modulo of value by 64k i.e. segment size.  */
-
-    case R_XC16X_SOF:
-      value += addend;
-      value %= 0x10000;
-      bfd_put_16 (input_bfd, value, hit_data);
-      return bfd_reloc_ok;
-
-    case R_XC16X_ABS_32:
-      if (!strstr (input_section->name,".debug"))
-	{
-	  value += addend;
-	  val1 = value;
-	  value %= 0x4000;
-	  val1 /= 0x4000;
-	  val1 = val1 << 16;
-	  value += val1;
-	  bfd_put_32 (input_bfd, value, hit_data);
-	}
-      else
-	{
-	  value += addend;
-	  bfd_put_32 (input_bfd, value, hit_data);
-	}
-      return bfd_reloc_ok;
-
-    default:
-      return bfd_reloc_notsupported;
-    }
-}
-
-static bfd_boolean
-elf32_xc16x_relocate_section (bfd *output_bfd,
-			      struct bfd_link_info *info,
-			      bfd *input_bfd,
-			      asection *input_section,
-			      bfd_byte *contents,
-			      Elf_Internal_Rela *relocs,
-			      Elf_Internal_Sym *local_syms,
-			      asection **local_sections)
-{
-  Elf_Internal_Shdr *symtab_hdr;
-  struct elf_link_hash_entry **sym_hashes;
-  Elf_Internal_Rela *rel, *relend;
-
-  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
-  sym_hashes = elf_sym_hashes (input_bfd);
-
-  rel = relocs;
-  relend = relocs + input_section->reloc_count;
-  for (; rel < relend; rel++)
-    {
-      unsigned int r_type;
-      unsigned long r_symndx;
-      Elf_Internal_Sym *sym;
-      asection *sec;
-      struct elf_link_hash_entry *h;
-      bfd_vma relocation;
-
-      /* This is a final link.  */
-      r_symndx = ELF32_R_SYM (rel->r_info);
-      r_type = ELF32_R_TYPE (rel->r_info);
-      h = NULL;
-      sym = NULL;
-      sec = NULL;
-      if (r_symndx < symtab_hdr->sh_info)
-	{
-	  sym = local_syms + r_symndx;
-	  sec = local_sections[r_symndx];
-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-	}
-      else
-	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
-
-	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
-				   r_symndx, symtab_hdr, sym_hashes,
-				   h, sec, relocation,
-				   unresolved_reloc, warned, ignored);
-	}
-
-      if (sec != NULL && discarded_section (sec))
-	{
-	  /* For relocs against symbols from removed linkonce sections,
-	     or sections discarded by a linker script, we just want the
-	     section contents cleared.  Avoid any special processing.  */
-	  reloc_howto_type *howto;
-	  howto = elf32_xc16x_rtype_to_howto (input_bfd, r_type);
-	  RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					   rel, 1, relend, howto, 0, contents);
-	}
-
-      if (bfd_link_relocatable (info))
-	continue;
-
-      elf32_xc16x_final_link_relocate (r_type, input_bfd, output_bfd,
-				       input_section,
-				       contents, rel->r_offset,
-				       relocation, rel->r_addend,
-				       info, sec, h == NULL);
-    }
-
-  return TRUE;
-}
-
-
-static bfd_boolean
-elf32_xc16x_final_write_processing (bfd *abfd)
-{
-  unsigned long val;
-
-  switch (bfd_get_mach (abfd))
-    {
-    default:
-    case bfd_mach_xc16x:
-      val = 0x1000;
-      break;
-
-    case bfd_mach_xc16xl:
-      val = 0x1001;
-      break;
-
-    case bfd_mach_xc16xs:
-      val = 0x1002;
-      break;
-    }
-
-  elf_elfheader (abfd)->e_flags |= val;
-  return _bfd_elf_final_write_processing (abfd);
-}
-
-static unsigned long
-elf32_xc16x_mach (flagword flags)
-{
-  switch (flags)
-    {
-    case 0x1000:
-    default:
-      return bfd_mach_xc16x;
-
-    case 0x1001:
-      return bfd_mach_xc16xl;
-
-    case 0x1002:
-      return bfd_mach_xc16xs;
-    }
-}
-
-
-static bfd_boolean
-elf32_xc16x_object_p (bfd *abfd)
-{
-  bfd_default_set_arch_mach (abfd, bfd_arch_xc16x,
-			     elf32_xc16x_mach (elf_elfheader (abfd)->e_flags));
-  return TRUE;
-}
-
-
-#define ELF_ARCH		bfd_arch_xc16x
-#define ELF_MACHINE_CODE	EM_XC16X
-#define ELF_MAXPAGESIZE		0x100
-
-#define TARGET_LITTLE_SYM       xc16x_elf32_vec
-#define TARGET_LITTLE_NAME	"elf32-xc16x"
-#define elf_backend_final_write_processing	elf32_xc16x_final_write_processing
-#define elf_backend_object_p		elf32_xc16x_object_p
-#define elf_backend_can_gc_sections	1
-#define bfd_elf32_bfd_reloc_type_lookup	xc16x_reloc_type_lookup
-#define bfd_elf32_bfd_reloc_name_lookup xc16x_reloc_name_lookup
-#define elf_info_to_howto		elf32_xc16x_info_to_howto
-#define elf_info_to_howto_rel		elf32_xc16x_info_to_howto
-#define elf_backend_relocate_section	elf32_xc16x_relocate_section
-#define elf_backend_rela_normal		1
-
-#include "elf32-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-xgate.c ./bfd/elf32-xgate.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-xgate.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-xgate.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Freescale XGATE-specific support for 32-bit ELF
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2024 Free Software Foundation, Inc.
    Contributed by Sean Keys(skeys@ipdatasys.com)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -42,303 +42,303 @@ static reloc_howto_type elf_xgate_howto_
   /* This reloc does nothing.  */
   HOWTO (R_XGATE_NONE, /* type */
 	 0, /* rightshift */
-	 3, /* size (0 = byte, 1 = short, 2 = long) */
+	 0, /* size */
 	 0, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_NONE", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0, /* src_mask */
 	 0, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 8 bit absolute relocation.  */
   HOWTO (R_XGATE_8, /* type */
 	 0, /* rightshift */
-	 0, /* size (0 = byte, 1 = short, 2 = long) */
+	 1, /* size */
 	 8, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_8", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 8 bit PC-rel relocation.  */
   HOWTO (R_XGATE_PCREL_8, /* type */
 	 0, /* rightshift */
-	 0, /* size (0 = byte, 1 = short, 2 = long) */
+	 1, /* size */
 	 8, /* bitsize */
-	 TRUE, /* pc_relative */
+	 true, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_PCREL_8", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 TRUE), /* pcrel_offset */
+	 true), /* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_XGATE_16, /* type */
 	 0, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 16, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont /*bitfield */, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_16", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0xffff, /* src_mask */
 	 0xffff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 32 bit absolute relocation.  This one is never used for the
      code relocation.  It's used by gas for -gstabs generation.  */
   HOWTO (R_XGATE_32, /* type */
 	 0, /* rightshift */
-	 2, /* size (0 = byte, 1 = short, 2 = long) */
+	 4, /* size */
 	 32, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_32", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0xffffffff, /* src_mask */
 	 0xffffffff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 16 bit PC-rel relocation.  */
   HOWTO (R_XGATE_PCREL_16, /* type */
 	 0, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 16, /* bitsize */
-	 TRUE, /* pc_relative */
+	 true, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_PCREL_16", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0xffff, /* src_mask */
 	 0xffff, /* dst_mask */
-	 TRUE), /* pcrel_offset */
+	 true), /* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_XGATE_GNU_VTINHERIT, /* type */
 	 0, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 0, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL, /* special_function */
 	 "R_XGATE_GNU_VTINHERIT", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0, /* src_mask */
 	 0, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_XGATE_GNU_VTENTRY, /* type */
 	 0, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 0, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_XGATE_GNU_VTENTRY", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0, /* src_mask */
 	 0, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 24 bit relocation.  */
   HOWTO (R_XGATE_24, /* type */
 	 0, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 16, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_IMM8_LO", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 16-bit low relocation.  */
   HOWTO (R_XGATE_LO16, /* type */
 	 8, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 16, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_IMM8_HI", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A page relocation.  */
   HOWTO (R_XGATE_GPAGE, /* type */
 	 0, /* rightshift */
-	 0, /* size (0 = byte, 1 = short, 2 = long) */
+	 1, /* size */
 	 8, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 xgate_elf_special_reloc,/* special_function */
 	 "R_XGATE_GPAGE", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 9 bit absolute relocation.   */
   HOWTO (R_XGATE_PCREL_9, /* type */
 	 0, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 9, /* bitsize */
-	 TRUE, /* pc_relative */
+	 true, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_PCREL_9", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0xffff, /* src_mask */
 	 0xffff, /* dst_mask */
-	 TRUE), /* pcrel_offset */
+	 true), /* pcrel_offset */
 
   /* A 8 bit absolute relocation (upper address).  */
   HOWTO (R_XGATE_PCREL_10, /* type */
 	 8, /* rightshift */
-	 0, /* size (0 = byte, 1 = short, 2 = long) */
+	 1, /* size */
 	 10, /* bitsize */
-	 TRUE, /* pc_relative */
+	 true, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_PCREL_10", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 TRUE), /* pcrel_offset */
+	 true), /* pcrel_offset */
 
   /* A 8 bit absolute relocation.  */
   HOWTO (R_XGATE_IMM8_LO, /* type */
 	 0, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 16, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_IMM8_LO", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0xffff, /* src_mask */
 	 0xffff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 16 bit absolute relocation (upper address).  */
   HOWTO (R_XGATE_IMM8_HI, /* type */
 	 8, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 16, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_IMM8_HI", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 3 bit absolute relocation.  */
   HOWTO (R_XGATE_IMM3, /* type */
 	 8, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 16, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_IMM3", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 4 bit absolute relocation.  */
   HOWTO (R_XGATE_IMM4, /* type */
 	 8, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 16, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_IMM4", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* A 5 bit absolute relocation.  */
   HOWTO (R_XGATE_IMM5, /* type */
 	 8, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 16, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XGATE_IMM5", /* name */
-	 FALSE, /* partial_inplace */
+	 false, /* partial_inplace */
 	 0x00ff, /* src_mask */
 	 0x00ff, /* dst_mask */
-	 FALSE), /* pcrel_offset */
+	 false), /* pcrel_offset */
 
   /* Mark beginning of a jump instruction (any form).  */
   HOWTO (R_XGATE_RL_JUMP, /* type */
 	 0, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 0, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 xgate_elf_ignore_reloc, /* special_function */
 	 "R_XGATE_RL_JUMP", /* name */
-	 TRUE, /* partial_inplace */
+	 true, /* partial_inplace */
 	 0, /* src_mask */
 	 0, /* dst_mask */
-	 TRUE), /* pcrel_offset */
+	 true), /* pcrel_offset */
 
   /* Mark beginning of Gcc relaxation group instruction.  */
   HOWTO (R_XGATE_RL_GROUP, /* type */
 	 0, /* rightshift */
-	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 2, /* size */
 	 0, /* bitsize */
-	 FALSE, /* pc_relative */
+	 false, /* pc_relative */
 	 0, /* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 xgate_elf_ignore_reloc, /* special_function */
 	 "R_XGATE_RL_GROUP", /* name */
-	 TRUE, /* partial_inplace */
+	 true, /* partial_inplace */
 	 0, /* src_mask */
 	 0, /* dst_mask */
-	 TRUE), /* pcrel_offset */
+	 true), /* pcrel_offset */
 };
 
 /* Map BFD reloc types to XGATE ELF reloc types.  */
@@ -404,7 +404,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an XGATE ELF reloc.  */
 
-static bfd_boolean
+static bool
 xgate_info_to_howto_rel (bfd *abfd,
 			 arelent *cache_ptr,
 			 Elf_Internal_Rela *dst)
@@ -418,10 +418,10 @@ xgate_info_to_howto_rel (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_xgate_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 /* Specific sections:
@@ -480,7 +480,7 @@ xgate_elf_special_reloc (bfd *abfd ATTRI
   abort ();
 }
 
-static bfd_boolean
+static bool
 _bfd_xgate_elf_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -508,7 +508,7 @@ _bfd_xgate_elf_print_private_bfd_data (b
     fprintf (file, _("error reading cpu type from elf private data"));
   fputc ('\n', file);
 
-  return TRUE;
+  return true;
 }
 
 #define ELF_ARCH			     bfd_arch_xgate
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-xstormy16.c ./bfd/elf32-xstormy16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-xstormy16.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-xstormy16.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Xstormy16-specific support for 32-bit ELF.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -73,197 +73,197 @@ static reloc_howto_type xstormy16_elf_ho
   /* This reloc does nothing.  */
   HOWTO (R_XSTORMY16_NONE,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_XSTORMY16_32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_XSTORMY16_16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit absolute relocation.  */
   HOWTO (R_XSTORMY16_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit pc-relative relocation.  */
   HOWTO (R_XSTORMY16_PC32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_PC32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit pc-relative relocation.  */
   HOWTO (R_XSTORMY16_PC16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_PC16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* An 8 bit pc-relative relocation.  */
   HOWTO (R_XSTORMY16_PC8,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_PC8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 12-bit pc-relative relocation suitable for the branch instructions.  */
   HOWTO (R_XSTORMY16_REL_12,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 11,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 1,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_REL_12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0ffe,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 24-bit absolute relocation suitable for the jump instructions.  */
   HOWTO (R_XSTORMY16_24,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 xstormy16_elf_24_reloc,	/* special_function */
 	 "R_XSTORMY16_24",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff00ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit absolute relocation to a function pointer.  */
   HOWTO (R_XSTORMY16_FPTR16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_FPTR16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low order 16 bit value of a high memory address.  */
   HOWTO (R_XSTORMY16_LO16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High order 16 bit value of a high memory address.  */
   HOWTO (R_XSTORMY16_HI16,	/* type */
 	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 12 bit absolute relocation.  */
   HOWTO (R_XSTORMY16_12,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XSTORMY16_12",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x0fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 static reloc_howto_type xstormy16_elf_howto_table2 [] =
@@ -271,32 +271,32 @@ static reloc_howto_type xstormy16_elf_ho
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_XSTORMY16_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_XSTORMY16_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_XSTORMY16_GNU_VTENTRY,     /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_XSTORMY16_GNU_VTENTRY",   /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 };
 
@@ -375,7 +375,7 @@ xstormy16_reloc_name_lookup (bfd *abfd A
 
 /* Set the howto pointer for an XSTORMY16 ELF reloc.  */
 
-static bfd_boolean
+static bool
 xstormy16_info_to_howto_rela (bfd * abfd,
 			      arelent * cache_ptr,
 			      Elf_Internal_Rela * dst)
@@ -395,9 +395,9 @@ xstormy16_info_to_howto_rela (bfd * abfd
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* We support 16-bit pointers to code above 64k by generating a thunk
@@ -406,7 +406,7 @@ xstormy16_info_to_howto_rela (bfd * abfd
    -relax switch is given, as otherwise we have no idea where the
    sections will fall in the address space.  */
 
-static bfd_boolean
+static bool
 xstormy16_elf_check_relocs (bfd *abfd,
 			    struct bfd_link_info *info,
 			    asection *sec,
@@ -420,7 +420,7 @@ xstormy16_elf_check_relocs (bfd *abfd,
   bfd *dynobj;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata(abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -472,7 +472,7 @@ xstormy16_elf_check_relocs (bfd *abfd,
 	      elf_hash_table (info)->splt = splt;
 	      if (splt == NULL
 		  || !bfd_set_section_alignment (splt, 1))
-		return FALSE;
+		return false;
 	    }
 
 	  if (h != NULL)
@@ -487,7 +487,7 @@ xstormy16_elf_check_relocs (bfd *abfd,
 		  size = symtab_hdr->sh_info * sizeof (bfd_vma);
 		  local_plt_offsets = bfd_alloc (abfd, size);
 		  if (local_plt_offsets == NULL)
-		    return FALSE;
+		    return false;
 		  elf_local_got_offsets (abfd) = local_plt_offsets;
 
 		  for (i = 0; i < symtab_hdr->sh_info; i++)
@@ -507,19 +507,19 @@ xstormy16_elf_check_relocs (bfd *abfd,
 	     Reconstruct it for later use during GC.  */
 	case R_XSTORMY16_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_XSTORMY16_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* A subroutine of xstormy16_elf_relax_section.  If the global symbol H
@@ -528,10 +528,10 @@ xstormy16_elf_check_relocs (bfd *abfd,
 struct relax_plt_data
 {
   asection *splt;
-  bfd_boolean *again;
+  bool *again;
 };
 
-static bfd_boolean
+static bool
 xstormy16_relax_plt_check (struct elf_link_hash_entry *h, void * xdata)
 {
   struct relax_plt_data *data = (struct relax_plt_data *) xdata;
@@ -552,17 +552,17 @@ xstormy16_relax_plt_check (struct elf_li
 	{
 	  h->plt.offset = -1;
 	  data->splt->size -= 4;
-	  *data->again = TRUE;
+	  *data->again = true;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* A subroutine of xstormy16_elf_relax_section.  If the global symbol H
    previously had a plt entry, give it a new entry offset.  */
 
-static bfd_boolean
+static bool
 xstormy16_relax_plt_realloc (struct elf_link_hash_entry *h, void * xdata)
 {
   bfd_vma *entry = (bfd_vma *) xdata;
@@ -573,32 +573,33 @@ xstormy16_relax_plt_realloc (struct elf_
       *entry += 4;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 xstormy16_elf_relax_section (bfd *dynobj,
 			     asection *splt,
 			     struct bfd_link_info *info,
-			     bfd_boolean *again)
+			     bool *again)
 {
   struct relax_plt_data relax_plt_data;
   bfd *ibfd;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
-  if (bfd_link_relocatable (info))
-    return TRUE;
+  if (bfd_link_relocatable (info)
+      || !is_elf_hash_table (info->hash))
+    return true;
 
   /* We only relax the .plt section at the moment.  */
   if (dynobj != elf_hash_table (info)->dynobj
       || strcmp (splt->name, ".plt") != 0)
-    return TRUE;
+    return true;
 
   /* Quick check for an empty plt.  */
   if (splt->size == 0)
-    return TRUE;
+    return true;
 
   /* Map across all global symbols; see which ones happen to
      fall in the low 64k.  */
@@ -628,7 +629,7 @@ xstormy16_elf_relax_section (bfd *dynobj
 					    symtab_hdr->sh_info, 0,
 					    NULL, NULL, NULL);
 	  if (isymbuf == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       for (idx = 0; idx < symtab_hdr->sh_info; ++idx)
@@ -657,7 +658,7 @@ xstormy16_elf_relax_section (bfd *dynobj
 	    {
 	      local_plt_offsets[idx] = -1;
 	      splt->size -= 4;
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -701,10 +702,10 @@ xstormy16_elf_relax_section (bfd *dynobj
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 xstormy16_elf_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				    struct bfd_link_info *info)
 {
@@ -712,20 +713,20 @@ xstormy16_elf_always_size_sections (bfd
   asection *splt;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   if (dynobj == NULL)
-    return TRUE;
+    return true;
 
   splt = elf_hash_table (info)->splt;
   BFD_ASSERT (splt != NULL);
 
   splt->contents = bfd_zalloc (dynobj, splt->size);
   if (splt->contents == NULL)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Relocate an XSTORMY16 ELF section.
@@ -758,7 +759,7 @@ xstormy16_elf_always_size_sections (bfd
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 xstormy16_elf_relocate_section (bfd *			output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *	info,
 				bfd *			input_bfd,
@@ -812,7 +813,7 @@ xstormy16_elf_relocate_section (bfd *
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -922,7 +923,7 @@ xstormy16_elf_relocate_section (bfd *
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -948,12 +949,12 @@ xstormy16_elf_relocate_section (bfd *
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This must exist if dynobj is ever set.  */
 
-static bfd_boolean
+static bool
 xstormy16_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
 				       struct bfd_link_info *info)
 {
@@ -976,7 +977,7 @@ xstormy16_elf_finish_dynamic_sections (b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-xtensa.c ./bfd/elf32-xtensa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-xtensa.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf32-xtensa.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Xtensa-specific support for 32-bit ELF.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -30,29 +30,33 @@
 #include "elf/xtensa.h"
 #include "splay-tree.h"
 #include "xtensa-isa.h"
-#include "xtensa-config.h"
+#include "xtensa-dynconfig.h"
 
 /* All users of this file have bfd_octets_per_byte (abfd, sec) == 1.  */
 #define OCTETS_PER_BYTE(ABFD, SEC) 1
 
 #define XTENSA_NO_NOP_REMOVAL 0
 
+#ifndef XTHAL_ABI_UNDEFINED
+#define XTHAL_ABI_UNDEFINED -1
+#endif
+
 /* Local helper functions.  */
 
-static bfd_boolean add_extra_plt_sections (struct bfd_link_info *, int);
+static bool add_extra_plt_sections (struct bfd_link_info *, int);
 static char *vsprint_msg (const char *, const char *, int, ...) ATTRIBUTE_PRINTF(2,4);
 static bfd_reloc_status_type bfd_elf_xtensa_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_boolean do_fix_for_relocatable_link
+static bool do_fix_for_relocatable_link
   (Elf_Internal_Rela *, bfd *, asection *, bfd_byte *);
 static void do_fix_for_final_link
   (Elf_Internal_Rela *, bfd *, asection *, bfd_byte *, bfd_vma *);
 
 /* Local functions to handle Xtensa configurability.  */
 
-static bfd_boolean is_indirect_call_opcode (xtensa_opcode);
-static bfd_boolean is_direct_call_opcode (xtensa_opcode);
-static bfd_boolean is_windowed_call_opcode (xtensa_opcode);
+static bool is_indirect_call_opcode (xtensa_opcode);
+static bool is_direct_call_opcode (xtensa_opcode);
+static bool is_windowed_call_opcode (xtensa_opcode);
 static xtensa_opcode get_const16_opcode (void);
 static xtensa_opcode get_l32r_opcode (void);
 static bfd_vma l32r_offset (bfd_vma, bfd_vma);
@@ -60,21 +64,21 @@ static int get_relocation_opnd (xtensa_o
 static int get_relocation_slot (int);
 static xtensa_opcode get_relocation_opcode
   (bfd *, asection *, bfd_byte *, Elf_Internal_Rela *);
-static bfd_boolean is_l32r_relocation
+static bool is_l32r_relocation
   (bfd *, asection *, bfd_byte *, Elf_Internal_Rela *);
-static bfd_boolean is_alt_relocation (int);
-static bfd_boolean is_operand_relocation (int);
+static bool is_alt_relocation (int);
+static bool is_operand_relocation (int);
 static bfd_size_type insn_decode_len
   (bfd_byte *, bfd_size_type, bfd_size_type);
 static int insn_num_slots
   (bfd_byte *, bfd_size_type, bfd_size_type);
 static xtensa_opcode insn_decode_opcode
   (bfd_byte *, bfd_size_type, bfd_size_type, int);
-static bfd_boolean check_branch_target_aligned
+static bool check_branch_target_aligned
   (bfd_byte *, bfd_size_type, bfd_vma, bfd_vma);
-static bfd_boolean check_loop_aligned
+static bool check_loop_aligned
   (bfd_byte *, bfd_size_type, bfd_vma, bfd_vma);
-static bfd_boolean check_branch_target_aligned_address (bfd_vma, int);
+static bool check_branch_target_aligned_address (bfd_vma, int);
 static bfd_size_type get_asm_simplify_size
   (bfd_byte *, bfd_size_type, bfd_size_type);
 
@@ -85,15 +89,15 @@ static bfd_reloc_status_type elf_xtensa_
 static bfd_reloc_status_type contract_asm_expansion
   (bfd_byte *, bfd_vma, Elf_Internal_Rela *, char **);
 static xtensa_opcode swap_callx_for_call_opcode (xtensa_opcode);
-static xtensa_opcode get_expanded_call_opcode (bfd_byte *, int, bfd_boolean *);
+static xtensa_opcode get_expanded_call_opcode (bfd_byte *, int, bool *);
 
 /* Access to internal relocations, section contents and symbols.  */
 
 static Elf_Internal_Rela *retrieve_internal_relocs
-  (bfd *, asection *, bfd_boolean);
+  (bfd *, asection *, bool);
 static void pin_internal_relocs (asection *, Elf_Internal_Rela *);
 static void release_internal_relocs (asection *, Elf_Internal_Rela *);
-static bfd_byte *retrieve_contents (bfd *, asection *, bfd_boolean);
+static bfd_byte *retrieve_contents (bfd *, asection *, bool);
 static void pin_contents (asection *, bfd_byte *);
 static void release_contents (asection *, bfd_byte *);
 static Elf_Internal_Sym *retrieve_local_syms (bfd *);
@@ -106,12 +110,12 @@ static asection *get_elf_r_symndx_sectio
 static struct elf_link_hash_entry *get_elf_r_symndx_hash_entry
   (bfd *, unsigned long);
 static bfd_vma get_elf_r_symndx_offset (bfd *, unsigned long);
-static bfd_boolean is_reloc_sym_weak (bfd *, Elf_Internal_Rela *);
-static bfd_boolean pcrel_reloc_fits (xtensa_opcode, int, bfd_vma, bfd_vma);
-static bfd_boolean xtensa_is_property_section (asection *);
-static bfd_boolean xtensa_is_insntable_section (asection *);
-static bfd_boolean xtensa_is_littable_section (asection *);
-static bfd_boolean xtensa_is_proptable_section (asection *);
+static bool is_reloc_sym_weak (bfd *, Elf_Internal_Rela *);
+static bool pcrel_reloc_fits (xtensa_opcode, int, bfd_vma, bfd_vma);
+static bool xtensa_is_property_section (asection *);
+static bool xtensa_is_insntable_section (asection *);
+static bool xtensa_is_littable_section (asection *);
+static bool xtensa_is_proptable_section (asection *);
 static int internal_reloc_compare (const void *, const void *);
 static int internal_reloc_matches (const void *, const void *);
 static asection *xtensa_get_property_section (asection *, const char *);
@@ -121,7 +125,7 @@ static flagword xtensa_get_property_pred
 
 typedef void (*deps_callback_t)
   (asection *, bfd_vma, asection *, bfd_vma, void *);
-extern bfd_boolean xtensa_callback_required_dependence
+extern bool xtensa_callback_required_dependence
   (bfd *, asection *, struct bfd_link_info *, deps_callback_t, void *);
 
 
@@ -152,7 +156,7 @@ xtensa_isa xtensa_default_isa;
    symbols from other input files.  The per-section list of "fix"
    records needs to be checked when resolving relocations.  */
 
-static bfd_boolean relaxing_section = FALSE;
+static bool relaxing_section = false;
 
 /* When this is true, during final links, literals that cannot be
    coalesced and their relocations may be moved to other sections.  */
@@ -162,7 +166,11 @@ int elf32xtensa_no_literal_movement = 1;
 /* Place property records for a section into individual property section
    with xt.prop. prefix.  */
 
-bfd_boolean elf32xtensa_separate_props = FALSE;
+bool elf32xtensa_separate_props = false;
+
+/* Xtensa ABI.  It affects PLT entry code.  */
+
+int elf32xtensa_abi = XTHAL_ABI_UNDEFINED;
 
 /* Rename one of the generic section flags to better document how it
    is used here.  */
@@ -171,160 +179,174 @@ bfd_boolean elf32xtensa_separate_props =
 
 static reloc_howto_type elf_howto_table[] =
 {
-  HOWTO (R_XTENSA_NONE, 0, 3, 0, FALSE, 0, complain_overflow_dont,
+  HOWTO (R_XTENSA_NONE, 0, 0, 0, false, 0, complain_overflow_dont,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_NONE",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_XTENSA_32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	 false, 0, 0, false),
+  HOWTO (R_XTENSA_32, 0, 4, 32, false, 0, complain_overflow_bitfield,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_32",
-	 TRUE, 0xffffffff, 0xffffffff, FALSE),
+	 true, 0xffffffff, 0xffffffff, false),
 
   /* Replace a 32-bit value with a value from the runtime linker (only
      used by linker-generated stub functions).  The r_addend value is
      special: 1 means to substitute a pointer to the runtime linker's
      dynamic resolver function; 2 means to substitute the link map for
      the shared object.  */
-  HOWTO (R_XTENSA_RTLD, 0, 2, 32, FALSE, 0, complain_overflow_dont,
-	 NULL, "R_XTENSA_RTLD", FALSE, 0, 0, FALSE),
+  HOWTO (R_XTENSA_RTLD, 0, 4, 32, false, 0, complain_overflow_dont,
+	 NULL, "R_XTENSA_RTLD", false, 0, 0, false),
 
-  HOWTO (R_XTENSA_GLOB_DAT, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+  HOWTO (R_XTENSA_GLOB_DAT, 0, 4, 32, false, 0, complain_overflow_bitfield,
 	 bfd_elf_generic_reloc, "R_XTENSA_GLOB_DAT",
-	 FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (R_XTENSA_JMP_SLOT, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	 false, 0, 0xffffffff, false),
+  HOWTO (R_XTENSA_JMP_SLOT, 0, 4, 32, false, 0, complain_overflow_bitfield,
 	 bfd_elf_generic_reloc, "R_XTENSA_JMP_SLOT",
-	 FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (R_XTENSA_RELATIVE, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	 false, 0, 0xffffffff, false),
+  HOWTO (R_XTENSA_RELATIVE, 0, 4, 32, false, 0, complain_overflow_bitfield,
 	 bfd_elf_generic_reloc, "R_XTENSA_RELATIVE",
-	 FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (R_XTENSA_PLT, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+	 false, 0, 0xffffffff, false),
+  HOWTO (R_XTENSA_PLT, 0, 4, 32, false, 0, complain_overflow_bitfield,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_PLT",
-	 FALSE, 0, 0xffffffff, FALSE),
+	 false, 0, 0xffffffff, false),
 
   EMPTY_HOWTO (7),
 
   /* Old relocations for backward compatibility.  */
-  HOWTO (R_XTENSA_OP0, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_OP0", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_OP1, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_OP1", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_OP2, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_OP2", FALSE, 0, 0, TRUE),
+  HOWTO (R_XTENSA_OP0, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_OP0", false, 0, 0, true),
+  HOWTO (R_XTENSA_OP1, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_OP1", false, 0, 0, true),
+  HOWTO (R_XTENSA_OP2, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_OP2", false, 0, 0, true),
 
   /* Assembly auto-expansion.  */
-  HOWTO (R_XTENSA_ASM_EXPAND, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_ASM_EXPAND", FALSE, 0, 0, TRUE),
+  HOWTO (R_XTENSA_ASM_EXPAND, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_ASM_EXPAND", false, 0, 0, true),
   /* Relax assembly auto-expansion.  */
-  HOWTO (R_XTENSA_ASM_SIMPLIFY, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_ASM_SIMPLIFY", FALSE, 0, 0, TRUE),
+  HOWTO (R_XTENSA_ASM_SIMPLIFY, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_ASM_SIMPLIFY", false, 0, 0, true),
 
   EMPTY_HOWTO (13),
 
-  HOWTO (R_XTENSA_32_PCREL, 0, 2, 32, TRUE, 0, complain_overflow_bitfield,
+  HOWTO (R_XTENSA_32_PCREL, 0, 4, 32, true, 0, complain_overflow_bitfield,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_32_PCREL",
-	 FALSE, 0, 0xffffffff, TRUE),
+	 false, 0, 0xffffffff, true),
 
   /* GNU extension to record C++ vtable hierarchy.  */
-  HOWTO (R_XTENSA_GNU_VTINHERIT, 0, 2, 0, FALSE, 0, complain_overflow_dont,
+  HOWTO (R_XTENSA_GNU_VTINHERIT, 0, 4, 0, false, 0, complain_overflow_dont,
 	 NULL, "R_XTENSA_GNU_VTINHERIT",
-	 FALSE, 0, 0, FALSE),
+	 false, 0, 0, false),
   /* GNU extension to record C++ vtable member usage.  */
-  HOWTO (R_XTENSA_GNU_VTENTRY, 0, 2, 0, FALSE, 0, complain_overflow_dont,
+  HOWTO (R_XTENSA_GNU_VTENTRY, 0, 4, 0, false, 0, complain_overflow_dont,
 	 _bfd_elf_rel_vtable_reloc_fn, "R_XTENSA_GNU_VTENTRY",
-	 FALSE, 0, 0, FALSE),
+	 false, 0, 0, false),
 
   /* Relocations for supporting difference of symbols.  */
-  HOWTO (R_XTENSA_DIFF8, 0, 0, 8, FALSE, 0, complain_overflow_signed,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_DIFF8", FALSE, 0, 0xff, FALSE),
-  HOWTO (R_XTENSA_DIFF16, 0, 1, 16, FALSE, 0, complain_overflow_signed,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_DIFF16", FALSE, 0, 0xffff, FALSE),
-  HOWTO (R_XTENSA_DIFF32, 0, 2, 32, FALSE, 0, complain_overflow_signed,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_DIFF32", FALSE, 0, 0xffffffff, FALSE),
+  HOWTO (R_XTENSA_DIFF8, 0, 1, 8, false, 0, complain_overflow_signed,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_DIFF8", false, 0, 0xff, false),
+  HOWTO (R_XTENSA_DIFF16, 0, 2, 16, false, 0, complain_overflow_signed,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_DIFF16", false, 0, 0xffff, false),
+  HOWTO (R_XTENSA_DIFF32, 0, 4, 32, false, 0, complain_overflow_signed,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_DIFF32", false, 0, 0xffffffff, false),
 
   /* General immediate operand relocations.  */
-  HOWTO (R_XTENSA_SLOT0_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT0_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT1_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT1_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT2_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT2_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT3_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT3_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT4_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT4_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT5_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT5_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT6_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT6_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT7_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT7_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT8_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT8_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT9_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT9_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT10_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT10_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT11_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT11_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT12_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT12_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT13_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT13_OP", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT14_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT14_OP", FALSE, 0, 0, TRUE),
+  HOWTO (R_XTENSA_SLOT0_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT0_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT1_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT1_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT2_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT2_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT3_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT3_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT4_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT4_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT5_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT5_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT6_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT6_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT7_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT7_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT8_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT8_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT9_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT9_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT10_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT10_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT11_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT11_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT12_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT12_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT13_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT13_OP", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT14_OP, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT14_OP", false, 0, 0, true),
 
   /* "Alternate" relocations.  The meaning of these is opcode-specific.  */
-  HOWTO (R_XTENSA_SLOT0_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT0_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT1_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT1_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT2_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT2_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT3_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT3_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT4_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT4_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT5_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT5_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT6_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT6_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT7_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT7_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT8_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT8_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT9_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT9_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT10_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT10_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT11_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT11_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT12_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT12_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT13_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT13_ALT", FALSE, 0, 0, TRUE),
-  HOWTO (R_XTENSA_SLOT14_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
-	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT14_ALT", FALSE, 0, 0, TRUE),
+  HOWTO (R_XTENSA_SLOT0_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT0_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT1_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT1_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT2_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT2_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT3_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT3_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT4_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT4_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT5_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT5_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT6_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT6_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT7_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT7_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT8_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT8_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT9_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT9_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT10_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT10_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT11_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT11_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT12_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT12_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT13_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT13_ALT", false, 0, 0, true),
+  HOWTO (R_XTENSA_SLOT14_ALT, 0, 0, 0, true, 0, complain_overflow_dont,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_SLOT14_ALT", false, 0, 0, true),
 
   /* TLS relocations.  */
-  HOWTO (R_XTENSA_TLSDESC_FN, 0, 2, 32, FALSE, 0, complain_overflow_dont,
+  HOWTO (R_XTENSA_TLSDESC_FN, 0, 4, 32, false, 0, complain_overflow_dont,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_TLSDESC_FN",
-	 FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (R_XTENSA_TLSDESC_ARG, 0, 2, 32, FALSE, 0, complain_overflow_dont,
+	 false, 0, 0xffffffff, false),
+  HOWTO (R_XTENSA_TLSDESC_ARG, 0, 4, 32, false, 0, complain_overflow_dont,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_TLSDESC_ARG",
-	 FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (R_XTENSA_TLS_DTPOFF, 0, 2, 32, FALSE, 0, complain_overflow_dont,
+	 false, 0, 0xffffffff, false),
+  HOWTO (R_XTENSA_TLS_DTPOFF, 0, 4, 32, false, 0, complain_overflow_dont,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_TLS_DTPOFF",
-	 FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (R_XTENSA_TLS_TPOFF, 0, 2, 32, FALSE, 0, complain_overflow_dont,
+	 false, 0, 0xffffffff, false),
+  HOWTO (R_XTENSA_TLS_TPOFF, 0, 4, 32, false, 0, complain_overflow_dont,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_TLS_TPOFF",
-	 FALSE, 0, 0xffffffff, FALSE),
-  HOWTO (R_XTENSA_TLS_FUNC, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+	 false, 0, 0xffffffff, false),
+  HOWTO (R_XTENSA_TLS_FUNC, 0, 0, 0, false, 0, complain_overflow_dont,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_TLS_FUNC",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_XTENSA_TLS_ARG, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+	 false, 0, 0, false),
+  HOWTO (R_XTENSA_TLS_ARG, 0, 0, 0, false, 0, complain_overflow_dont,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_TLS_ARG",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_XTENSA_TLS_CALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+	 false, 0, 0, false),
+  HOWTO (R_XTENSA_TLS_CALL, 0, 0, 0, false, 0, complain_overflow_dont,
 	 bfd_elf_xtensa_reloc, "R_XTENSA_TLS_CALL",
-	 FALSE, 0, 0, FALSE),
+	 false, 0, 0, false),
+
+  HOWTO (R_XTENSA_PDIFF8, 0, 1, 8, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF8", false, 0, 0xff, false),
+  HOWTO (R_XTENSA_PDIFF16, 0, 2, 16, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF16", false, 0, 0xffff, false),
+  HOWTO (R_XTENSA_PDIFF32, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF32", false, 0, 0xffffffff, false),
+
+  HOWTO (R_XTENSA_NDIFF8, 0, 1, 8, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF8", false, 0, 0xff, false),
+  HOWTO (R_XTENSA_NDIFF16, 0, 2, 16, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF16", false, 0, 0xffff, false),
+  HOWTO (R_XTENSA_NDIFF32, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF32", false, 0, 0xffffffff, false),
 };
 
 #if DEBUG_GEN_RELOC
@@ -364,6 +386,30 @@ elf_xtensa_reloc_type_lookup (bfd *abfd
       TRACE ("BFD_RELOC_XTENSA_DIFF32");
       return &elf_howto_table[(unsigned) R_XTENSA_DIFF32 ];
 
+    case BFD_RELOC_XTENSA_PDIFF8:
+      TRACE ("BFD_RELOC_XTENSA_PDIFF8");
+      return &elf_howto_table[(unsigned) R_XTENSA_PDIFF8 ];
+
+    case BFD_RELOC_XTENSA_PDIFF16:
+      TRACE ("BFD_RELOC_XTENSA_PDIFF16");
+      return &elf_howto_table[(unsigned) R_XTENSA_PDIFF16 ];
+
+    case BFD_RELOC_XTENSA_PDIFF32:
+      TRACE ("BFD_RELOC_XTENSA_PDIFF32");
+      return &elf_howto_table[(unsigned) R_XTENSA_PDIFF32 ];
+
+    case BFD_RELOC_XTENSA_NDIFF8:
+      TRACE ("BFD_RELOC_XTENSA_NDIFF8");
+      return &elf_howto_table[(unsigned) R_XTENSA_NDIFF8 ];
+
+    case BFD_RELOC_XTENSA_NDIFF16:
+      TRACE ("BFD_RELOC_XTENSA_NDIFF16");
+      return &elf_howto_table[(unsigned) R_XTENSA_NDIFF16 ];
+
+    case BFD_RELOC_XTENSA_NDIFF32:
+      TRACE ("BFD_RELOC_XTENSA_NDIFF32");
+      return &elf_howto_table[(unsigned) R_XTENSA_NDIFF32 ];
+
     case BFD_RELOC_XTENSA_RTLD:
       TRACE ("BFD_RELOC_XTENSA_RTLD");
       return &elf_howto_table[(unsigned) R_XTENSA_RTLD ];
@@ -485,7 +531,7 @@ elf_xtensa_reloc_name_lookup (bfd *abfd
 /* Given an ELF "rela" relocation, find the corresponding howto and record
    it in the BFD internal arelent representation of the relocation.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_info_to_howto_rela (bfd *abfd,
 			       arelent *cache_ptr,
 			       Elf_Internal_Rela *dst)
@@ -498,10 +544,10 @@ elf_xtensa_info_to_howto_rela (bfd *abfd
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 
@@ -616,7 +662,7 @@ struct elf_xtensa_obj_tdata
    && elf_tdata (bfd) != NULL \
    && elf_object_id (bfd) == XTENSA_ELF_DATA)
 
-static bfd_boolean
+static bool
 elf_xtensa_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct elf_xtensa_obj_tdata),
@@ -647,8 +693,9 @@ struct elf_xtensa_link_hash_table
 /* Get the Xtensa ELF linker hash table from a link_info structure.  */
 
 #define elf_xtensa_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == XTENSA_ELF_DATA ? ((struct elf_xtensa_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == XTENSA_ELF_DATA)	\
+   ? (struct elf_xtensa_link_hash_table *) (p)->hash : NULL)
 
 /* Create an entry in an Xtensa ELF linker hash table.  */
 
@@ -686,7 +733,7 @@ elf_xtensa_link_hash_table_create (bfd *
 {
   struct elf_link_hash_entry *tlsbase;
   struct elf_xtensa_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_xtensa_link_hash_table);
+  size_t amt = sizeof (struct elf_xtensa_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -704,10 +751,11 @@ elf_xtensa_link_hash_table_create (bfd *
   /* Create a hash entry for "_TLS_MODULE_BASE_" to speed up checking
      for it later.  */
   tlsbase = elf_link_hash_lookup (&ret->elf, "_TLS_MODULE_BASE_",
-				  TRUE, FALSE, FALSE);
+				  true, false, false);
   tlsbase->root.type = bfd_link_hash_new;
   tlsbase->root.u.undef.abfd = NULL;
   tlsbase->non_elf = 0;
+  ret->elf.dt_pltgot_required = true;
   ret->tlsbase = elf_xtensa_hash_entry (tlsbase);
   ret->tlsbase->tls_type = GOT_UNKNOWN;
 
@@ -741,7 +789,7 @@ elf_xtensa_copy_indirect_symbol (struct
   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
 }
 
-static inline bfd_boolean
+static inline bool
 elf_xtensa_dynamic_symbol_p (struct elf_link_hash_entry *h,
 			     struct bfd_link_info *info)
 {
@@ -812,7 +860,7 @@ xtensa_read_table_entries (bfd *abfd,
 			   asection *section,
 			   property_table_entry **table_p,
 			   const char *sec_name,
-			   bfd_boolean output_addr)
+			   bool output_addr)
 {
   asection *table_section;
   bfd_size_type table_size = 0;
@@ -825,7 +873,8 @@ xtensa_read_table_entries (bfd *abfd,
   flagword predef_flags;
   bfd_size_type table_entry_size, section_limit;
 
-  if (!section
+  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
+      || !section
       || !(section->flags & SEC_ALLOC)
       || (section->flags & SEC_DEBUGGING))
     {
@@ -849,7 +898,14 @@ xtensa_read_table_entries (bfd *abfd,
     table_entry_size -= 4;
 
   num_records = table_size / table_entry_size;
-  table_data = retrieve_contents (abfd, table_section, TRUE);
+
+  table_data = retrieve_contents (abfd, table_section, true);
+  if (table_data == NULL)
+    {
+      *table_p = NULL;
+      return 0;
+    }
+
   blocks = (property_table_entry *)
     bfd_malloc (num_records * sizeof (property_table_entry));
   block_count = 0;
@@ -859,7 +915,7 @@ xtensa_read_table_entries (bfd *abfd,
   else
     section_addr = section->vma;
 
-  internal_relocs = retrieve_internal_relocs (abfd, table_section, TRUE);
+  internal_relocs = retrieve_internal_relocs (abfd, table_section, true);
   if (internal_relocs && !table_section->reloc_done)
     {
       qsort (internal_relocs, table_section->reloc_count,
@@ -974,22 +1030,22 @@ elf_xtensa_find_property_entry (property
 }
 
 
-static bfd_boolean
+static bool
 elf_xtensa_in_literal_pool (property_table_entry *lit_table,
 			    int lit_table_size,
 			    bfd_vma addr)
 {
   if (elf_xtensa_find_property_entry (lit_table, lit_table_size, addr))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 
 /* Look through the relocs for a section during the first phase, and
    calculate needed space in the dynamic reloc sections.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_check_relocs (bfd *abfd,
 			 struct bfd_link_info *info,
 			 asection *sec,
@@ -1001,14 +1057,14 @@ elf_xtensa_check_relocs (bfd *abfd,
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
 
-  if (bfd_link_relocatable (info) || (sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+  if (bfd_link_relocatable (info))
+    return true;
 
   BFD_ASSERT (is_xtensa_elf (abfd));
 
   htab = elf_xtensa_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -1021,9 +1077,9 @@ elf_xtensa_check_relocs (bfd *abfd,
       struct elf_link_hash_entry *h = NULL;
       struct elf_xtensa_link_hash_entry *eh;
       int tls_type, old_tls_type;
-      bfd_boolean is_got = FALSE;
-      bfd_boolean is_plt = FALSE;
-      bfd_boolean is_tlsfunc = FALSE;
+      bool is_got = false;
+      bool is_plt = false;
+      bool is_tlsfunc = false;
 
       r_symndx = ELF32_R_SYM (rel->r_info);
       r_type = ELF32_R_TYPE (rel->r_info);
@@ -1033,7 +1089,7 @@ elf_xtensa_check_relocs (bfd *abfd,
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: bad symbol index: %d"),
 			      abfd, r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx >= symtab_hdr->sh_info)
@@ -1048,32 +1104,33 @@ elf_xtensa_check_relocs (bfd *abfd,
       switch (r_type)
 	{
 	case R_XTENSA_TLSDESC_FN:
-	  if (bfd_link_pic (info))
+	  if (bfd_link_dll (info))
 	    {
 	      tls_type = GOT_TLS_GD;
-	      is_got = TRUE;
-	      is_tlsfunc = TRUE;
+	      is_got = true;
+	      is_tlsfunc = true;
 	    }
 	  else
 	    tls_type = GOT_TLS_IE;
 	  break;
 
 	case R_XTENSA_TLSDESC_ARG:
-	  if (bfd_link_pic (info))
+	  if (bfd_link_dll (info))
 	    {
 	      tls_type = GOT_TLS_GD;
-	      is_got = TRUE;
+	      is_got = true;
 	    }
 	  else
 	    {
 	      tls_type = GOT_TLS_IE;
-	      if (h && elf_xtensa_hash_entry (h) != htab->tlsbase)
-		is_got = TRUE;
+	      if (h && elf_xtensa_hash_entry (h) != htab->tlsbase
+		  && elf_xtensa_dynamic_symbol_p (h, info))
+		is_got = true;
 	    }
 	  break;
 
 	case R_XTENSA_TLS_DTPOFF:
-	  if (bfd_link_pic (info))
+	  if (bfd_link_dll (info))
 	    tls_type = GOT_TLS_GD;
 	  else
 	    tls_type = GOT_TLS_IE;
@@ -1083,32 +1140,32 @@ elf_xtensa_check_relocs (bfd *abfd,
 	  tls_type = GOT_TLS_IE;
 	  if (bfd_link_pic (info))
 	    info->flags |= DF_STATIC_TLS;
-	  if (bfd_link_pic (info) || h)
-	    is_got = TRUE;
+	  if (bfd_link_dll (info) || elf_xtensa_dynamic_symbol_p (h, info))
+	    is_got = true;
 	  break;
 
 	case R_XTENSA_32:
 	  tls_type = GOT_NORMAL;
-	  is_got = TRUE;
+	  is_got = true;
 	  break;
 
 	case R_XTENSA_PLT:
 	  tls_type = GOT_NORMAL;
-	  is_plt = TRUE;
+	  is_plt = true;
 	  break;
 
 	case R_XTENSA_GNU_VTINHERIT:
 	  /* This relocation describes the C++ object vtable hierarchy.
 	     Reconstruct it for later use during GC.  */
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  continue;
 
 	case R_XTENSA_GNU_VTENTRY:
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  continue;
 
 	default:
@@ -1136,7 +1193,7 @@ elf_xtensa_check_relocs (bfd *abfd,
 	      if (elf_hash_table (info)->dynamic_sections_created)
 		{
 		  if (! add_extra_plt_sections (info, htab->plt_reloc_count))
-		    return FALSE;
+		    return false;
 		}
 	    }
 	  else if (is_got)
@@ -1162,17 +1219,17 @@ elf_xtensa_check_relocs (bfd *abfd,
 
 	      mem = bfd_zalloc (abfd, size * sizeof (bfd_signed_vma));
 	      if (mem == NULL)
-		return FALSE;
+		return false;
 	      elf_local_got_refcounts (abfd) = (bfd_signed_vma *) mem;
 
 	      mem = bfd_zalloc (abfd, size);
 	      if (mem == NULL)
-		return FALSE;
+		return false;
 	      elf_xtensa_local_got_tls_type (abfd) = (char *) mem;
 
 	      mem = bfd_zalloc (abfd, size * sizeof (bfd_signed_vma));
 	      if (mem == NULL)
-		return FALSE;
+		return false;
 	      elf_xtensa_local_tlsfunc_refcounts (abfd)
 		= (bfd_signed_vma *) mem;
 	    }
@@ -1206,7 +1263,7 @@ elf_xtensa_check_relocs (bfd *abfd,
 		(_("%pB: `%s' accessed both as normal and thread local symbol"),
 		 abfd,
 		 h ? h->root.root.string : "<local>");
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -1219,7 +1276,7 @@ elf_xtensa_check_relocs (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -1251,7 +1308,7 @@ elf_xtensa_make_sym_local (struct bfd_li
 static void
 elf_xtensa_hide_symbol (struct bfd_link_info *info,
 			struct elf_link_hash_entry *h,
-			bfd_boolean force_local)
+			bool force_local)
 {
   /* For a shared link, move the plt refcount to the got refcount to leave
      space for RELATIVE relocs.  */
@@ -1298,7 +1355,7 @@ elf_xtensa_gc_mark_hook (asection *sec,
 
 /* Create all the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf_xtensa_link_hash_table *htab;
@@ -1306,16 +1363,16 @@ elf_xtensa_create_dynamic_sections (bfd
 
   htab = elf_xtensa_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* First do all the standard stuff.  */
   if (! _bfd_elf_create_dynamic_sections (dynobj, info))
-    return FALSE;
+    return false;
 
   /* Create any extra PLT sections in case check_relocs has already
      been called on all the non-dynamic input files.  */
   if (! add_extra_plt_sections (info, htab->plt_reloc_count))
-    return FALSE;
+    return false;
 
   noalloc_flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
 		   | SEC_LINKER_CREATED | SEC_READONLY);
@@ -1324,27 +1381,27 @@ elf_xtensa_create_dynamic_sections (bfd
   /* Mark the ".got.plt" section READONLY.  */
   if (htab->elf.sgotplt == NULL
       || !bfd_set_section_flags (htab->elf.sgotplt, flags))
-    return FALSE;
+    return false;
 
   /* Create ".got.loc" (literal tables for use by dynamic linker).  */
   htab->sgotloc = bfd_make_section_anyway_with_flags (dynobj, ".got.loc",
 						      flags);
   if (htab->sgotloc == NULL
       || !bfd_set_section_alignment (htab->sgotloc, 2))
-    return FALSE;
+    return false;
 
   /* Create ".xt.lit.plt" (literal table for ".got.plt*").  */
   htab->spltlittbl = bfd_make_section_anyway_with_flags (dynobj, ".xt.lit.plt",
 							 noalloc_flags);
   if (htab->spltlittbl == NULL
       || !bfd_set_section_alignment (htab->spltlittbl, 2))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 add_extra_plt_sections (struct bfd_link_info *info, int count)
 {
   bfd *dynobj = elf_hash_table (info)->dynobj;
@@ -1370,17 +1427,17 @@ add_extra_plt_sections (struct bfd_link_
       s = bfd_make_section_anyway_with_flags (dynobj, sname, flags | SEC_CODE);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
-	return FALSE;
+	return false;
 
       sname = (char *) bfd_malloc (14);
       sprintf (sname, ".got.plt.%u", chunk);
       s = bfd_make_section_anyway_with_flags (dynobj, sname, flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, 2))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -1390,7 +1447,7 @@ add_extra_plt_sections (struct bfd_link_
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				  struct elf_link_hash_entry *h)
 {
@@ -1403,18 +1460,18 @@ elf_xtensa_adjust_dynamic_symbol (struct
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object.  The
      reference must go through the GOT, so there's no need for COPY relocs,
      .dynbss, etc.  */
 
-  return TRUE;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 elf_xtensa_allocate_dynrelocs (struct elf_link_hash_entry *h, void *arg)
 {
   struct bfd_link_info *info;
@@ -1422,12 +1479,12 @@ elf_xtensa_allocate_dynrelocs (struct el
   struct elf_xtensa_link_hash_entry *eh = elf_xtensa_hash_entry (h);
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) arg;
   htab = elf_xtensa_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* If we saw any use of an IE model for this symbol, we can then optimize
      away GOT entries for any TLSDESC_FN relocs.  */
@@ -1442,7 +1499,7 @@ elf_xtensa_allocate_dynrelocs (struct el
 
   if (! elf_xtensa_dynamic_symbol_p (h, info)
       && h->root.type == bfd_link_hash_undefweak)
-    return TRUE;
+    return true;
 
   if (h->plt.refcount > 0)
     htab->elf.srelplt->size += (h->plt.refcount * sizeof (Elf32_External_Rela));
@@ -1450,7 +1507,7 @@ elf_xtensa_allocate_dynrelocs (struct el
   if (h->got.refcount > 0)
     htab->elf.srelgot->size += (h->got.refcount * sizeof (Elf32_External_Rela));
 
-  return TRUE;
+  return true;
 }
 
 
@@ -1499,14 +1556,14 @@ elf_xtensa_allocate_local_got_size (stru
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				  struct bfd_link_info *info)
 {
   struct elf_xtensa_link_hash_table *htab;
   bfd *dynobj, *abfd;
   asection *s, *srelplt, *splt, *sgotplt, *srelgot, *spltlittbl, *sgotloc;
-  bfd_boolean relplt, relgot;
+  bool relplt, relgot;
   int plt_entries, plt_chunks, chunk;
 
   plt_entries = 0;
@@ -1514,7 +1571,7 @@ elf_xtensa_size_dynamic_sections (bfd *o
 
   htab = elf_xtensa_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = elf_hash_table (info)->dynobj;
   if (dynobj == NULL)
@@ -1618,8 +1675,8 @@ elf_xtensa_size_dynamic_sections (bfd *o
     }
 
   /* Allocate memory for dynamic sections.  */
-  relplt = FALSE;
-  relgot = FALSE;
+  relplt = false;
+  relgot = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -1631,22 +1688,22 @@ elf_xtensa_size_dynamic_sections (bfd *o
 	 of the dynobj section names depend upon the input files.  */
       name = bfd_section_name (s);
 
-      if (CONST_STRNEQ (name, ".rela"))
+      if (startswith (name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
 	      if (strcmp (name, ".rela.plt") == 0)
-		relplt = TRUE;
+		relplt = true;
 	      else if (strcmp (name, ".rela.got") == 0)
-		relgot = TRUE;
+		relgot = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
 	      s->reloc_count = 0;
 	    }
 	}
-      else if (! CONST_STRNEQ (name, ".plt.")
-	       && ! CONST_STRNEQ (name, ".got.plt.")
+      else if (! startswith (name, ".plt.")
+	       && ! startswith (name, ".got.plt.")
 	       && strcmp (name, ".got") != 0
 	       && strcmp (name, ".plt") != 0
 	       && strcmp (name, ".got.plt") != 0
@@ -1675,7 +1732,7 @@ elf_xtensa_size_dynamic_sections (bfd *o
 	  /* Allocate memory for the section contents.  */
 	  s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
 	  if (s->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -1709,39 +1766,20 @@ elf_xtensa_size_dynamic_sections (bfd *o
 #define add_dynamic_entry(TAG, VAL) \
   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (relplt)
-	{
-	  if (!add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relgot)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
-	    return FALSE;
-	}
+      if (!_bfd_elf_add_dynamic_tags (output_bfd, info,
+				      relplt || relgot))
+	return false;
 
-      if (!add_dynamic_entry (DT_PLTGOT, 0)
-	  || !add_dynamic_entry (DT_XTENSA_GOT_LOC_OFF, 0)
+      if (!add_dynamic_entry (DT_XTENSA_GOT_LOC_OFF, 0)
 	  || !add_dynamic_entry (DT_XTENSA_GOT_LOC_SZ, 0))
-	return FALSE;
+	return false;
     }
 #undef add_dynamic_entry
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_xtensa_always_size_sections (bfd *output_bfd,
 				 struct bfd_link_info *info)
 {
@@ -1750,7 +1788,7 @@ elf_xtensa_always_size_sections (bfd *ou
 
   htab = elf_xtensa_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   tls_sec = htab->elf.tls_sec;
 
@@ -1763,15 +1801,15 @@ elf_xtensa_always_size_sections (bfd *ou
       tlsbase->type = STT_TLS;
       if (!(_bfd_generic_link_add_one_symbol
 	    (info, output_bfd, "_TLS_MODULE_BASE_", BSF_LOCAL,
-	     tls_sec, 0, NULL, FALSE,
+	     tls_sec, 0, NULL, false,
 	     bed->collect, &bh)))
-	return FALSE;
+	return false;
       tlsbase->def_regular = 1;
       tlsbase->other = STV_HIDDEN;
-      (*bed->elf_backend_hide_symbol) (info, tlsbase, TRUE);
+      (*bed->elf_backend_hide_symbol) (info, tlsbase, true);
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -1819,7 +1857,7 @@ elf_xtensa_do_reloc (reloc_howto_type *h
 		     bfd_vma relocation,
 		     bfd_byte *contents,
 		     bfd_vma address,
-		     bfd_boolean is_weak_undef,
+		     bool is_weak_undef,
 		     char **error_message)
 {
   xtensa_format fmt;
@@ -1851,6 +1889,12 @@ elf_xtensa_do_reloc (reloc_howto_type *h
     case R_XTENSA_DIFF8:
     case R_XTENSA_DIFF16:
     case R_XTENSA_DIFF32:
+    case R_XTENSA_PDIFF8:
+    case R_XTENSA_PDIFF16:
+    case R_XTENSA_PDIFF32:
+    case R_XTENSA_NDIFF8:
+    case R_XTENSA_NDIFF16:
+    case R_XTENSA_NDIFF32:
     case R_XTENSA_TLS_FUNC:
     case R_XTENSA_TLS_ARG:
     case R_XTENSA_TLS_CALL:
@@ -1921,6 +1965,8 @@ elf_xtensa_do_reloc (reloc_howto_type *h
       return bfd_reloc_dangerous;
     }
 
+  if (input_size <= address)
+    return bfd_reloc_outofrange;
   /* Read the instruction into a buffer and decode the opcode.  */
   xtensa_insnbuf_from_chars (isa, ibuff, contents + address,
 			     input_size - address);
@@ -2063,7 +2109,7 @@ vsprint_msg (const char *origmsg, const
   static bfd_size_type alloc_size = 0;
   static char *message = NULL;
   bfd_size_type orig_len, len = 0;
-  bfd_boolean is_append;
+  bool is_append;
   va_list ap;
 
   va_start (ap, arglen);
@@ -2111,7 +2157,7 @@ bfd_elf_xtensa_reloc (bfd *abfd,
   bfd_vma output_base = 0;
   reloc_howto_type *howto = reloc_entry->howto;
   asection *reloc_target_output_section;
-  bfd_boolean is_weak_undef;
+  bool is_weak_undef;
 
   if (!xtensa_default_isa)
     xtensa_default_isa = xtensa_isa_init (0, 0);
@@ -2203,6 +2249,13 @@ bfd_elf_xtensa_reloc (bfd *abfd,
   return flag;
 }
 
+int xtensa_abi_choice (void)
+{
+  if (elf32xtensa_abi == XTHAL_ABI_UNDEFINED)
+    return XSHAL_ABI;
+  else
+    return elf32xtensa_abi;
+}
 
 /* Set up an entry in the procedure linkage table.  */
 
@@ -2215,6 +2268,7 @@ elf_xtensa_create_plt_entry (struct bfd_
   bfd_vma plt_base, got_base;
   bfd_vma code_offset, lit_offset, abi_offset;
   int chunk;
+  int abi = xtensa_abi_choice ();
 
   chunk = reloc_index / PLT_ENTRIES_PER_CHUNK;
   splt = elf_xtensa_get_plt_section (info, chunk);
@@ -2235,10 +2289,10 @@ elf_xtensa_create_plt_entry (struct bfd_
   /* Fill in the entry in the procedure linkage table.  */
   memcpy (splt->contents + code_offset,
 	  (bfd_big_endian (output_bfd)
-	   ? elf_xtensa_be_plt_entry[XSHAL_ABI != XTHAL_ABI_WINDOWED]
-	   : elf_xtensa_le_plt_entry[XSHAL_ABI != XTHAL_ABI_WINDOWED]),
+	   ? elf_xtensa_be_plt_entry[abi != XTHAL_ABI_WINDOWED]
+	   : elf_xtensa_le_plt_entry[abi != XTHAL_ABI_WINDOWED]),
 	  PLT_ENTRY_SIZE);
-  abi_offset = XSHAL_ABI == XTHAL_ABI_WINDOWED ? 3 : 0;
+  abi_offset = abi == XTHAL_ABI_WINDOWED ? 3 : 0;
   bfd_put_16 (output_bfd, l32r_offset (got_base + 0,
 				       plt_base + code_offset + abi_offset),
 	      splt->contents + code_offset + abi_offset + 1);
@@ -2253,14 +2307,14 @@ elf_xtensa_create_plt_entry (struct bfd_
 }
 
 
-static bfd_boolean get_indirect_call_dest_reg (xtensa_opcode, unsigned *);
+static bool get_indirect_call_dest_reg (xtensa_opcode, unsigned *);
 
-static bfd_boolean
+static bool
 replace_tls_insn (Elf_Internal_Rela *rel,
 		  bfd *abfd,
 		  asection *input_section,
 		  bfd_byte *contents,
-		  bfd_boolean is_ld_model,
+		  bool is_ld_model,
 		  char **error_message)
 {
   static xtensa_insnbuf ibuff = NULL;
@@ -2287,7 +2341,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
   if (fmt == XTENSA_UNDEFINED)
     {
       *error_message = "cannot decode instruction format";
-      return FALSE;
+      return false;
     }
 
   BFD_ASSERT (xtensa_format_num_slots (isa, fmt) == 1);
@@ -2297,7 +2351,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
   if (old_op == XTENSA_UNDEFINED)
     {
       *error_message = "cannot decode instruction opcode";
-      return FALSE;
+      return false;
     }
 
   r_type = ELF32_R_TYPE (rel->r_info);
@@ -2310,7 +2364,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
 				       sbuff, &dest_reg) != 0)
 	{
 	  *error_message = "cannot extract L32R destination for TLS access";
-	  return FALSE;
+	  return false;
 	}
       break;
 
@@ -2320,7 +2374,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
 				       sbuff, &src_reg) != 0)
 	{
 	  *error_message = "cannot extract CALLXn operands for TLS access";
-	  return FALSE;
+	  return false;
 	}
       break;
 
@@ -2350,7 +2404,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
 					       sbuff, 1) != 0)
 		{
 		  *error_message = "cannot encode OR for TLS access";
-		  return FALSE;
+		  return false;
 		}
 	    }
 	  else
@@ -2358,7 +2412,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
 	      if (xtensa_opcode_encode (isa, fmt, 0, sbuff, new_op) != 0)
 		{
 		  *error_message = "cannot encode NOP for TLS access";
-		  return FALSE;
+		  return false;
 		}
 	    }
 	  break;
@@ -2372,7 +2426,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
 					   sbuff, dest_reg + 2) != 0)
 	    {
 	      *error_message = "cannot encode RUR.THREADPTR for TLS access";
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 	}
@@ -2389,13 +2443,13 @@ replace_tls_insn (Elf_Internal_Rela *rel
 					   sbuff, dest_reg) != 0)
 	    {
 	      *error_message = "cannot encode RUR.THREADPTR for TLS access";
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 
 	case R_XTENSA_TLS_ARG:
 	  /* Nothing to do.  Keep the original L32R instruction.  */
-	  return TRUE;
+	  return true;
 
 	case R_XTENSA_TLS_CALL:
 	  /* Add the CALLX's src register (holding the THREADPTR value)
@@ -2412,7 +2466,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
 					   sbuff, src_reg) != 0)
 	    {
 	      *error_message = "cannot encode ADD for TLS access";
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 	}
@@ -2422,7 +2476,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
   xtensa_insnbuf_to_chars (isa, ibuff, contents + rel->r_offset,
 			   input_size - rel->r_offset);
 
-  return TRUE;
+  return true;
 }
 
 
@@ -2438,7 +2492,7 @@ replace_tls_insn (Elf_Internal_Rela *rel
 /* Relocate an Xtensa ELF section.  This is invoked by the linker for
    both relocatable and final links.  */
 
-static bfd_boolean
+static int
 elf_xtensa_relocate_section (bfd *output_bfd,
 			     struct bfd_link_info *info,
 			     bfd *input_bfd,
@@ -2466,12 +2520,12 @@ elf_xtensa_relocate_section (bfd *output
   if (!is_xtensa_elf (input_bfd))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   htab = elf_xtensa_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (input_bfd);
@@ -2481,9 +2535,9 @@ elf_xtensa_relocate_section (bfd *output
     {
       ltblsize = xtensa_read_table_entries (input_bfd, input_section,
 					    &lit_table, XTENSA_LIT_SEC_NAME,
-					    TRUE);
+					    true);
       if (ltblsize < 0)
-	return FALSE;
+	return false;
     }
 
   input_size = bfd_get_section_limit (input_bfd, input_section);
@@ -2502,10 +2556,10 @@ elf_xtensa_relocate_section (bfd *output
       asection *sec;
       bfd_vma relocation;
       bfd_reloc_status_type r;
-      bfd_boolean is_weak_undef;
-      bfd_boolean unresolved_reloc;
-      bfd_boolean warned;
-      bfd_boolean dynamic_symbol;
+      bool is_weak_undef;
+      bool unresolved_reloc;
+      bool warned;
+      bool dynamic_symbol;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       if (r_type == (int) R_XTENSA_GNU_VTINHERIT
@@ -2515,7 +2569,7 @@ elf_xtensa_relocate_section (bfd *output
       if (r_type < 0 || r_type >= (int) R_XTENSA_max)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       howto = &elf_howto_table[r_type];
 
@@ -2524,9 +2578,9 @@ elf_xtensa_relocate_section (bfd *output
       h = NULL;
       sym = NULL;
       sec = NULL;
-      is_weak_undef = FALSE;
-      unresolved_reloc = FALSE;
-      warned = FALSE;
+      is_weak_undef = false;
+      unresolved_reloc = false;
+      warned = false;
 
       if (howto->partial_inplace && !bfd_link_relocatable (info))
 	{
@@ -2547,7 +2601,7 @@ elf_xtensa_relocate_section (bfd *output
 	}
       else
 	{
-	  bfd_boolean ignored;
+	  bool ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -2557,7 +2611,7 @@ elf_xtensa_relocate_section (bfd *output
 	  if (relocation == 0
 	      && !unresolved_reloc
 	      && h->root.type == bfd_link_hash_undefweak)
-	    is_weak_undef = TRUE;
+	    is_weak_undef = true;
 
 	  sym_type = h->type;
 	}
@@ -2584,7 +2638,7 @@ elf_xtensa_relocate_section (bfd *output
 	      /* Check if this references a section in another input file.  */
 	      if (!do_fix_for_relocatable_link (rel, input_bfd, input_section,
 						contents))
-		return FALSE;
+		return false;
 	    }
 
 	  dest_addr = sym_sec->output_section->vma + sym_sec->output_offset
@@ -2630,7 +2684,7 @@ elf_xtensa_relocate_section (bfd *output
 	    {
 	      r = elf_xtensa_do_reloc (howto, input_bfd, input_section,
 				       rel->r_addend, contents,
-				       rel->r_offset, FALSE,
+				       rel->r_offset, false,
 				       &error_message);
 	      rel->r_addend = 0;
 	    }
@@ -2648,7 +2702,7 @@ elf_xtensa_relocate_section (bfd *output
 		{
 		  r = elf_xtensa_do_reloc (howto, input_bfd, input_section,
 					   dest_addr, contents,
-					   rel->r_offset, FALSE,
+					   rel->r_offset, false,
 					   &error_message);
 		}
 	    }
@@ -2681,7 +2735,7 @@ elf_xtensa_relocate_section (bfd *output
 	     input_bfd, input_section, (uint64_t) rel->r_offset,
 	     (uint64_t) input_size);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       if (h != NULL)
@@ -2788,7 +2842,7 @@ elf_xtensa_relocate_section (bfd *output
 			    elf_xtensa_create_plt_entry (info, output_bfd,
 							 srel->reloc_count);
 			}
-		      unresolved_reloc = FALSE;
+		      unresolved_reloc = false;
 		    }
 		  else if (!is_weak_undef)
 		    {
@@ -2819,7 +2873,7 @@ elf_xtensa_relocate_section (bfd *output
 
 	case R_XTENSA_TLS_TPOFF:
 	  /* Switch to LE model for local symbols in an executable.  */
-	  if (! bfd_link_pic (info) && ! dynamic_symbol)
+	  if (! bfd_link_dll (info) && ! dynamic_symbol)
 	    {
 	      relocation = tpoff (info, relocation);
 	      break;
@@ -2831,12 +2885,12 @@ elf_xtensa_relocate_section (bfd *output
 	  {
 	    if (r_type == R_XTENSA_TLSDESC_FN)
 	      {
-		if (! bfd_link_pic (info) || (tls_type & GOT_TLS_IE) != 0)
+		if (! bfd_link_dll (info) || (tls_type & GOT_TLS_IE) != 0)
 		  r_type = R_XTENSA_NONE;
 	      }
 	    else if (r_type == R_XTENSA_TLSDESC_ARG)
 	      {
-		if (bfd_link_pic (info))
+		if (bfd_link_dll (info))
 		  {
 		    if ((tls_type & GOT_TLS_IE) != 0)
 		      r_type = R_XTENSA_TLS_TPOFF;
@@ -2897,7 +2951,7 @@ elf_xtensa_relocate_section (bfd *output
 
 		outrel.r_info = ELF32_R_INFO (indx, r_type);
 		relocation = 0;
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 
 		BFD_ASSERT (srel);
 		loc = (srel->contents
@@ -2910,7 +2964,7 @@ elf_xtensa_relocate_section (bfd *output
 	  break;
 
 	case R_XTENSA_TLS_DTPOFF:
-	  if (! bfd_link_pic (info))
+	  if (! bfd_link_dll (info))
 	    /* Switch from LD model to LE model.  */
 	    relocation = tpoff (info, relocation);
 	  else
@@ -2923,7 +2977,7 @@ elf_xtensa_relocate_section (bfd *output
 	  /* Check if optimizing to IE or LE model.  */
 	  if ((tls_type & GOT_TLS_IE) != 0)
 	    {
-	      bfd_boolean is_ld_model =
+	      bool is_ld_model =
 		(h && elf_xtensa_hash_entry (h) == htab->tlsbase);
 	      if (! replace_tls_insn (rel, input_bfd, input_section, contents,
 				      is_ld_model, &error_message))
@@ -2973,7 +3027,7 @@ elf_xtensa_relocate_section (bfd *output
 	     (uint64_t) rel->r_offset,
 	     howto->name,
 	     name);
-	  return FALSE;
+	  return false;
 	}
 
       /* TLS optimizations may have changed r_type; update "howto".  */
@@ -3004,19 +3058,17 @@ elf_xtensa_relocate_section (bfd *output
 	}
     }
 
-  if (lit_table)
-    free (lit_table);
+  free (lit_table);
+  input_section->reloc_done = true;
 
-  input_section->reloc_done = TRUE;
-
-  return TRUE;
+  return true;
 }
 
 
 /* Finish up dynamic symbol handling.  There's not much to do here since
    the PLT and GOT entries are all set up by relocate_section.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_finish_dynamic_symbol (bfd *output_bfd ATTRIBUTE_UNUSED,
 				  struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				  struct elf_link_hash_entry *h,
@@ -3040,7 +3092,7 @@ elf_xtensa_finish_dynamic_symbol (bfd *o
       || h == elf_hash_table (info)->hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3064,6 +3116,9 @@ elf_xtensa_combine_prop_entries (bfd *ou
   int n, m, num;
 
   section_size = sxtlit->size;
+  if (section_size == 0)
+    return 0;
+
   BFD_ASSERT (section_size % 8 == 0);
   num = section_size / 8;
 
@@ -3086,8 +3141,7 @@ elf_xtensa_combine_prop_entries (bfd *ou
 
   if (!bfd_malloc_and_get_section (output_bfd, sxtlit, &contents))
     {
-      if (contents != 0)
-	free (contents);
+      free (contents);
       free (table);
       return -1;
     }
@@ -3107,15 +3161,15 @@ elf_xtensa_combine_prop_entries (bfd *ou
 
   for (n = 0; n < num; n++)
     {
-      bfd_boolean remove_entry = FALSE;
+      bool remove_entry = false;
 
       if (table[n].size == 0)
-	remove_entry = TRUE;
+	remove_entry = true;
       else if (n > 0
 	       && (table[n-1].address + table[n-1].size == table[n].address))
 	{
 	  table[n-1].size += table[n].size;
-	  remove_entry = TRUE;
+	  remove_entry = true;
 	}
 
       if (remove_entry)
@@ -3159,7 +3213,7 @@ elf_xtensa_combine_prop_entries (bfd *ou
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
 				    struct bfd_link_info *info)
 {
@@ -3170,11 +3224,11 @@ elf_xtensa_finish_dynamic_sections (bfd
   int num_xtlit_entries = 0;
 
   if (! elf_hash_table (info)->dynamic_sections_created)
-    return TRUE;
+    return true;
 
   htab = elf_xtensa_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = elf_hash_table (info)->dynobj;
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
@@ -3278,7 +3332,7 @@ elf_xtensa_finish_dynamic_sections (bfd
 				      spltlittbl->contents,
 				      spltlittbl->output_offset,
 				      spltlittbl->size))
-	return FALSE;
+	return false;
       /* Clear SEC_HAS_CONTENTS so the contents won't be output again.  */
       spltlittbl->flags &= ~SEC_HAS_CONTENTS;
     }
@@ -3301,7 +3355,7 @@ elf_xtensa_finish_dynamic_sections (bfd
       num_xtlit_entries =
 	elf_xtensa_combine_prop_entries (output_bfd, sxtlit, sgotloc);
       if (num_xtlit_entries < 0)
-	return FALSE;
+	return false;
     }
 
   dyncon = (Elf32_External_Dyn *) sdyn->contents;
@@ -3344,7 +3398,7 @@ elf_xtensa_finish_dynamic_sections (bfd
       bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3353,7 +3407,7 @@ elf_xtensa_finish_dynamic_sections (bfd
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -3362,12 +3416,12 @@ elf_xtensa_merge_private_bfd_data (bfd *
 
   /* Check if we have the same endianness.  */
   if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   /* Don't even pretend to support mixed-format linking.  */
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return FALSE;
+    return false;
 
   out_flag = elf_elfheader (obfd)->e_flags;
   in_flag = elf_elfheader (ibfd)->e_flags;
@@ -3381,12 +3435,12 @@ elf_xtensa_merge_private_bfd_data (bfd *
 	(_("%pB: incompatible machine type; output is 0x%x; input is 0x%x"),
 	 ibfd, out_mach, in_mach);
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   if (! elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flag;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
@@ -3394,7 +3448,7 @@ elf_xtensa_merge_private_bfd_data (bfd *
 	return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
 				  bfd_get_mach (ibfd));
 
-      return TRUE;
+      return true;
     }
 
   if ((out_flag & EF_XTENSA_XT_INSN) != (in_flag & EF_XTENSA_XT_INSN))
@@ -3403,24 +3457,24 @@ elf_xtensa_merge_private_bfd_data (bfd *
   if ((out_flag & EF_XTENSA_XT_LIT) != (in_flag & EF_XTENSA_XT_LIT))
     elf_elfheader (obfd)->e_flags &= (~ EF_XTENSA_XT_LIT);
 
-  return TRUE;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 elf_xtensa_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags |= flags;
-  elf_flags_init (abfd) = TRUE;
+  elf_flags_init (abfd) = true;
 
-  return TRUE;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 elf_xtensa_print_private_bfd_data (bfd *abfd, void *farg)
 {
   FILE *f = (FILE *) farg;
@@ -3444,7 +3498,7 @@ elf_xtensa_print_private_bfd_data (bfd *
 
 /* Set the right machine number for an Xtensa ELF file.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_object_p (bfd *abfd)
 {
   int mach;
@@ -3456,11 +3510,11 @@ elf_xtensa_object_p (bfd *abfd)
       mach = bfd_mach_xtensa;
       break;
     default:
-      return FALSE;
+      return false;
     }
 
   (void) bfd_default_set_arch_mach (abfd, bfd_arch_xtensa, mach);
-  return TRUE;
+  return true;
 }
 
 
@@ -3468,7 +3522,7 @@ elf_xtensa_object_p (bfd *abfd)
    file.  This gets the Xtensa architecture right based on the machine
    number.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_final_write_processing (bfd *abfd)
 {
   int mach;
@@ -3506,7 +3560,7 @@ elf_xtensa_reloc_type_class (const struc
 }
 
 
-static bfd_boolean
+static bool
 elf_xtensa_discard_info_for_section (bfd *abfd,
 				     struct elf_reloc_cookie *cookie,
 				     struct bfd_link_info *info,
@@ -3519,7 +3573,7 @@ elf_xtensa_discard_info_for_section (bfd
 
   if (sec->output_section
       && bfd_is_abs_section (sec->output_section))
-    return FALSE;
+    return false;
 
   if (xtensa_is_proptable_section (sec))
     entry_size = 12;
@@ -3527,17 +3581,17 @@ elf_xtensa_discard_info_for_section (bfd
     entry_size = 8;
 
   if (sec->size == 0 || sec->size % entry_size != 0)
-    return FALSE;
+    return false;
 
   contents = retrieve_contents (abfd, sec, info->keep_memory);
   if (!contents)
-    return FALSE;
+    return false;
 
   cookie->rels = retrieve_internal_relocs (abfd, sec, info->keep_memory);
   if (!cookie->rels)
     {
       release_contents (sec, contents);
-      return FALSE;
+      return false;
     }
 
   /* Sort the relocations.  They should already be in order when
@@ -3636,20 +3690,20 @@ elf_xtensa_discard_info_for_section (bfd
 }
 
 
-static bfd_boolean
+static bool
 elf_xtensa_discard_info (bfd *abfd,
 			 struct elf_reloc_cookie *cookie,
 			 struct bfd_link_info *info)
 {
   asection *sec;
-  bfd_boolean changed = FALSE;
+  bool changed = false;
 
   for (sec = abfd->sections; sec != NULL; sec = sec->next)
     {
       if (xtensa_is_property_section (sec))
 	{
 	  if (elf_xtensa_discard_info_for_section (abfd, cookie, info, sec))
-	    changed = TRUE;
+	    changed = true;
 	}
     }
 
@@ -3657,7 +3711,7 @@ elf_xtensa_discard_info (bfd *abfd,
 }
 
 
-static bfd_boolean
+static bool
 elf_xtensa_ignore_discarded_relocs (asection *sec)
 {
   return xtensa_is_property_section (sec);
@@ -3679,14 +3733,20 @@ elf_xtensa_action_discarded (asection *s
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf_xtensa_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
   unsigned int size;
 
+  if (elf_tdata (abfd) == NULL
+      || elf_tdata (abfd)->core == NULL)
+    return false;
+
   /* The size for Xtensa is variable, so don't try to recognize the format
      based on the size.  Just assume this is GNU/Linux.  */
+  if (note == NULL || note->descsz < 28)
+    return false;
 
   /* pr_cursig */
   elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
@@ -3703,14 +3763,13 @@ elf_xtensa_grok_prstatus (bfd *abfd, Elf
 					  size, note->descpos + offset);
 }
 
-
-static bfd_boolean
+static bool
 elf_xtensa_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 128:		/* GNU/Linux elf_prpsinfo */
 	elf_tdata (abfd)->core->program
@@ -3731,7 +3790,7 @@ elf_xtensa_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3763,7 +3822,7 @@ init_call_opcodes (void)
 }
 
 
-static bfd_boolean
+static bool
 is_indirect_call_opcode (xtensa_opcode opcode)
 {
   init_call_opcodes ();
@@ -3774,7 +3833,7 @@ is_indirect_call_opcode (xtensa_opcode o
 }
 
 
-static bfd_boolean
+static bool
 is_direct_call_opcode (xtensa_opcode opcode)
 {
   init_call_opcodes ();
@@ -3785,7 +3844,7 @@ is_direct_call_opcode (xtensa_opcode opc
 }
 
 
-static bfd_boolean
+static bool
 is_windowed_call_opcode (xtensa_opcode opcode)
 {
   init_call_opcodes ();
@@ -3798,7 +3857,7 @@ is_windowed_call_opcode (xtensa_opcode o
 }
 
 
-static bfd_boolean
+static bool
 get_indirect_call_dest_reg (xtensa_opcode opcode, unsigned *pdst)
 {
   unsigned dst = (unsigned) -1;
@@ -3814,22 +3873,22 @@ get_indirect_call_dest_reg (xtensa_opcod
     dst = 12;
 
   if (dst == (unsigned) -1)
-    return FALSE;
+    return false;
 
   *pdst = dst;
-  return TRUE;
+  return true;
 }
 
 
 static xtensa_opcode
 get_const16_opcode (void)
 {
-  static bfd_boolean done_lookup = FALSE;
+  static bool done_lookup = false;
   static xtensa_opcode const16_opcode = XTENSA_UNDEFINED;
   if (!done_lookup)
     {
       const16_opcode = xtensa_opcode_lookup (xtensa_default_isa, "const16");
-      done_lookup = TRUE;
+      done_lookup = true;
     }
   return const16_opcode;
 }
@@ -3839,12 +3898,12 @@ static xtensa_opcode
 get_l32r_opcode (void)
 {
   static xtensa_opcode l32r_opcode = XTENSA_UNDEFINED;
-  static bfd_boolean done_lookup = FALSE;
+  static bool done_lookup = false;
 
   if (!done_lookup)
     {
       l32r_opcode = xtensa_opcode_lookup (xtensa_default_isa, "l32r");
-      done_lookup = TRUE;
+      done_lookup = true;
     }
   return l32r_opcode;
 }
@@ -3867,11 +3926,11 @@ static xtensa_opcode
 get_rsr_lend_opcode (void)
 {
   static xtensa_opcode rsr_lend_opcode = XTENSA_UNDEFINED;
-  static bfd_boolean done_lookup = FALSE;
+  static bool done_lookup = false;
   if (!done_lookup)
     {
       rsr_lend_opcode = xtensa_opcode_lookup (xtensa_default_isa, "rsr.lend");
-      done_lookup = TRUE;
+      done_lookup = true;
     }
   return rsr_lend_opcode;
 }
@@ -3880,11 +3939,11 @@ static xtensa_opcode
 get_wsr_lbeg_opcode (void)
 {
   static xtensa_opcode wsr_lbeg_opcode = XTENSA_UNDEFINED;
-  static bfd_boolean done_lookup = FALSE;
+  static bool done_lookup = false;
   if (!done_lookup)
     {
       wsr_lbeg_opcode = xtensa_opcode_lookup (xtensa_default_isa, "wsr.lbeg");
-      done_lookup = TRUE;
+      done_lookup = true;
     }
   return wsr_lbeg_opcode;
 }
@@ -3993,7 +4052,7 @@ get_relocation_opcode (bfd *abfd,
 }
 
 
-bfd_boolean
+bool
 is_l32r_relocation (bfd *abfd,
 		    asection *sec,
 		    bfd_byte *contents,
@@ -4001,7 +4060,7 @@ is_l32r_relocation (bfd *abfd,
 {
   xtensa_opcode opcode;
   if (!is_operand_relocation (ELF32_R_TYPE (irel->r_info)))
-    return FALSE;
+    return false;
   opcode = get_relocation_opcode (abfd, sec, contents, irel);
   return (opcode == get_l32r_opcode ());
 }
@@ -4030,7 +4089,7 @@ get_asm_simplify_size (bfd_byte *content
 }
 
 
-bfd_boolean
+bool
 is_alt_relocation (int r_type)
 {
   return (r_type >= R_XTENSA_SLOT0_ALT
@@ -4038,7 +4097,7 @@ is_alt_relocation (int r_type)
 }
 
 
-bfd_boolean
+bool
 is_operand_relocation (int r_type)
 {
   switch (r_type)
@@ -4046,17 +4105,17 @@ is_operand_relocation (int r_type)
     case R_XTENSA_OP0:
     case R_XTENSA_OP1:
     case R_XTENSA_OP2:
-      return TRUE;
+      return true;
 
     default:
       if (r_type >= R_XTENSA_SLOT0_OP && r_type <= R_XTENSA_SLOT14_OP)
-	return TRUE;
+	return true;
       if (r_type >= R_XTENSA_SLOT0_ALT && r_type <= R_XTENSA_SLOT14_ALT)
-	return TRUE;
+	return true;
       break;
     }
 
-  return FALSE;
+  return false;
 }
 
 
@@ -4153,7 +4212,7 @@ insn_decode_opcode (bfd_byte *contents,
 /* The offset is the offset in the contents.
    The address is the address of that offset.  */
 
-static bfd_boolean
+static bool
 check_branch_target_aligned (bfd_byte *contents,
 			     bfd_size_type content_length,
 			     bfd_vma offset,
@@ -4161,12 +4220,12 @@ check_branch_target_aligned (bfd_byte *c
 {
   bfd_size_type insn_len = insn_decode_len (contents, content_length, offset);
   if (insn_len == 0)
-    return FALSE;
+    return false;
   return check_branch_target_aligned_address (address, insn_len);
 }
 
 
-static bfd_boolean
+static bool
 check_loop_aligned (bfd_byte *contents,
 		    bfd_size_type content_length,
 		    bfd_vma offset,
@@ -4179,16 +4238,16 @@ check_loop_aligned (bfd_byte *contents,
   if (opcode == XTENSA_UNDEFINED
       || xtensa_opcode_is_loop (xtensa_default_isa, opcode) != 1)
     {
-      BFD_ASSERT (FALSE);
-      return FALSE;
+      BFD_ASSERT (false);
+      return false;
     }
 
   loop_len = insn_decode_len (contents, content_length, offset);
   insn_len = insn_decode_len (contents, content_length, offset + loop_len);
   if (loop_len == 0 || insn_len == 0)
     {
-      BFD_ASSERT (FALSE);
-      return FALSE;
+      BFD_ASSERT (false);
+      return false;
     }
 
   /* If this is relaxed loop, analyze first instruction of the actual loop
@@ -4209,7 +4268,7 @@ check_loop_aligned (bfd_byte *contents,
 }
 
 
-static bfd_boolean
+static bool
 check_branch_target_aligned_address (bfd_vma addr, int len)
 {
   if (len == 8)
@@ -4286,7 +4345,7 @@ struct string_pair
   const char *narrow;
 };
 
-struct string_pair narrowable[] =
+const struct string_pair narrowable[] =
 {
   { "add", "add.n" },
   { "addi", "addi.n" },
@@ -4299,7 +4358,7 @@ struct string_pair narrowable[] =
   { "or", "mov.n" } /* special case only when op1 == op2 */
 };
 
-struct string_pair widenable[] =
+const struct string_pair widenable[] =
 {
   { "add", "add.n" },
   { "addi", "addi.n" },
@@ -4341,7 +4400,7 @@ can_narrow_instruction (xtensa_insnbuf s
 
   for (opi = 0; opi < (sizeof (narrowable)/sizeof (struct string_pair)); opi++)
     {
-      bfd_boolean is_or = (strcmp ("or", narrowable[opi].wide) == 0);
+      bool is_or = (strcmp ("or", narrowable[opi].wide) == 0);
 
       if (opcode == xtensa_opcode_lookup (isa, narrowable[opi].wide))
 	{
@@ -4424,7 +4483,7 @@ can_narrow_instruction (xtensa_insnbuf s
    the action in-place directly into the contents and return TRUE.  Otherwise,
    the return value is FALSE and the contents are not modified.  */
 
-static bfd_boolean
+static bool
 narrow_instruction (bfd_byte *contents,
 		    bfd_size_type content_length,
 		    bfd_size_type offset)
@@ -4447,7 +4506,7 @@ narrow_instruction (bfd_byte *contents,
   BFD_ASSERT (offset < content_length);
 
   if (content_length < 2)
-    return FALSE;
+    return false;
 
   /* We will hand-code a few of these for a little while.
      These have all been specified in the assembler aleady.  */
@@ -4455,27 +4514,27 @@ narrow_instruction (bfd_byte *contents,
 			     content_length - offset);
   fmt = xtensa_format_decode (isa, insnbuf);
   if (xtensa_format_num_slots (isa, fmt) != 1)
-    return FALSE;
+    return false;
 
   if (xtensa_format_get_slot (isa, fmt, 0, insnbuf, slotbuf) != 0)
-    return FALSE;
+    return false;
 
   opcode = xtensa_opcode_decode (isa, fmt, 0, slotbuf);
   if (opcode == XTENSA_UNDEFINED)
-    return FALSE;
+    return false;
   insn_len = xtensa_format_length (isa, fmt);
   if (insn_len > content_length)
-    return FALSE;
+    return false;
 
   o_insnbuf = can_narrow_instruction (slotbuf, fmt, opcode);
   if (o_insnbuf)
     {
       xtensa_insnbuf_to_chars (isa, o_insnbuf, contents + offset,
 			       content_length - offset);
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 
@@ -4505,9 +4564,9 @@ can_widen_instruction (xtensa_insnbuf sl
 
   for (opi = 0; opi < (sizeof (widenable)/sizeof (struct string_pair)); opi++)
     {
-      bfd_boolean is_or = (strcmp ("or", widenable[opi].wide) == 0);
-      bfd_boolean is_branch = (strcmp ("beqz", widenable[opi].wide) == 0
-			       || strcmp ("bnez", widenable[opi].wide) == 0);
+      bool is_or = (strcmp ("or", widenable[opi].wide) == 0);
+      bool is_branch = (strcmp ("beqz", widenable[opi].wide) == 0
+			|| strcmp ("bnez", widenable[opi].wide) == 0);
 
       if (opcode == xtensa_opcode_lookup (isa, widenable[opi].narrow))
 	{
@@ -4593,7 +4652,7 @@ can_widen_instruction (xtensa_insnbuf sl
    the action in-place directly into the contents and return TRUE.  Otherwise,
    the return value is FALSE and the contents are not modified.  */
 
-static bfd_boolean
+static bool
 widen_instruction (bfd_byte *contents,
 		   bfd_size_type content_length,
 		   bfd_size_type offset)
@@ -4616,7 +4675,7 @@ widen_instruction (bfd_byte *contents,
   BFD_ASSERT (offset < content_length);
 
   if (content_length < 2)
-    return FALSE;
+    return false;
 
   /* We will hand-code a few of these for a little while.
      These have all been specified in the assembler aleady.  */
@@ -4624,26 +4683,26 @@ widen_instruction (bfd_byte *contents,
 			     content_length - offset);
   fmt = xtensa_format_decode (isa, insnbuf);
   if (xtensa_format_num_slots (isa, fmt) != 1)
-    return FALSE;
+    return false;
 
   if (xtensa_format_get_slot (isa, fmt, 0, insnbuf, slotbuf) != 0)
-    return FALSE;
+    return false;
 
   opcode = xtensa_opcode_decode (isa, fmt, 0, slotbuf);
   if (opcode == XTENSA_UNDEFINED)
-    return FALSE;
+    return false;
   insn_len = xtensa_format_length (isa, fmt);
   if (insn_len > content_length)
-    return FALSE;
+    return false;
 
   o_insnbuf = can_widen_instruction (slotbuf, fmt, opcode);
   if (o_insnbuf)
     {
       xtensa_insnbuf_to_chars (isa, o_insnbuf, contents + offset,
 			       content_length - offset);
-      return TRUE;
+      return true;
     }
-  return FALSE;
+  return false;
 }
 
 
@@ -4757,7 +4816,7 @@ swap_callx_for_call_opcode (xtensa_opcod
 #define CALLN_SOURCE_OPERAND 0
 
 static xtensa_opcode
-get_expanded_call_opcode (bfd_byte *buf, int bufsize, bfd_boolean *p_uses_l32r)
+get_expanded_call_opcode (bfd_byte *buf, int bufsize, bool *p_uses_l32r)
 {
   static xtensa_insnbuf insnbuf = NULL;
   static xtensa_insnbuf slotbuf = NULL;
@@ -4786,7 +4845,7 @@ get_expanded_call_opcode (bfd_byte *buf,
   if (opcode == get_l32r_opcode ())
     {
       if (p_uses_l32r)
-	*p_uses_l32r = TRUE;
+	*p_uses_l32r = true;
       if (xtensa_operand_get_field (isa, opcode, L32R_TARGET_REG_OPERAND,
 				    fmt, 0, slotbuf, &regno)
 	  || xtensa_operand_decode (isa, opcode, L32R_TARGET_REG_OPERAND,
@@ -4796,7 +4855,7 @@ get_expanded_call_opcode (bfd_byte *buf,
   else if (opcode == get_const16_opcode ())
     {
       if (p_uses_l32r)
-	*p_uses_l32r = FALSE;
+	*p_uses_l32r = false;
       if (xtensa_operand_get_field (isa, opcode, CONST16_TARGET_REG_OPERAND,
 				    fmt, 0, slotbuf, &regno)
 	  || xtensa_operand_decode (isa, opcode, CONST16_TARGET_REG_OPERAND,
@@ -4885,7 +4944,7 @@ struct r_reloc_struct
    struct to zero.  The r_reloc_is_const function should be used to
    detect this case.  */
 
-static bfd_boolean
+static bool
 r_reloc_is_const (const r_reloc *r_rel)
 {
   return (r_rel->abfd == NULL);
@@ -4921,19 +4980,19 @@ r_reloc_get_section (const r_reloc *r_re
 }
 
 
-static bfd_boolean
+static bool
 r_reloc_is_defined (const r_reloc *r_rel)
 {
   asection *sec;
   if (r_rel == NULL)
-    return FALSE;
+    return false;
 
   sec = r_reloc_get_section (r_rel);
   if (sec == bfd_abs_section_ptr
       || sec == bfd_com_section_ptr
       || sec == bfd_und_section_ptr)
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 
@@ -4984,12 +5043,9 @@ print_r_reloc (FILE *fp, const r_reloc *
   else
     fprintf (fp, " ?? + ");
 
-  fprintf_vma (fp, r_rel->target_offset);
+  fprintf (fp, "%" PRIx64, (uint64_t) r_rel->target_offset);
   if (r_rel->virtual_offset)
-    {
-      fprintf (fp, " + ");
-      fprintf_vma (fp, r_rel->virtual_offset);
-    }
+    fprintf (fp, " + %" PRIx64, (uint64_t) r_rel->virtual_offset);
 
   fprintf (fp, ")");
 }
@@ -5022,8 +5078,8 @@ struct source_reloc_struct
   r_reloc r_rel;
   xtensa_opcode opcode;
   int opnd;
-  bfd_boolean is_null;
-  bfd_boolean is_abs_literal;
+  bool is_null;
+  bool is_abs_literal;
 };
 
 
@@ -5033,13 +5089,13 @@ init_source_reloc (source_reloc *reloc,
 		   const r_reloc *r_rel,
 		   xtensa_opcode opcode,
 		   int opnd,
-		   bfd_boolean is_abs_literal)
+		   bool is_abs_literal)
 {
   reloc->source_sec = source_sec;
   reloc->r_rel = *r_rel;
   reloc->opcode = opcode;
   reloc->opnd = opnd;
-  reloc->is_null = FALSE;
+  reloc->is_null = false;
   reloc->is_abs_literal = is_abs_literal;
 }
 
@@ -5112,7 +5168,7 @@ struct literal_value_struct
 {
   r_reloc r_rel;
   unsigned long value;
-  bfd_boolean is_abs_literal;
+  bool is_abs_literal;
 };
 
 struct value_map_struct
@@ -5127,7 +5183,7 @@ struct value_map_hash_table_struct
   unsigned bucket_count;
   value_map **buckets;
   unsigned count;
-  bfd_boolean has_last_loc;
+  bool has_last_loc;
   r_reloc last_loc;
 };
 
@@ -5136,7 +5192,7 @@ static void
 init_literal_value (literal_value *lit,
 		    const r_reloc *r_rel,
 		    unsigned long value,
-		    bfd_boolean is_abs_literal)
+		    bool is_abs_literal)
 {
   lit->r_rel = *r_rel;
   lit->value = value;
@@ -5144,36 +5200,43 @@ init_literal_value (literal_value *lit,
 }
 
 
-static bfd_boolean
+static bool
 literal_value_equal (const literal_value *src1,
 		     const literal_value *src2,
-		     bfd_boolean final_static_link)
+		     bool final_static_link)
 {
   struct elf_link_hash_entry *h1, *h2;
 
   if (r_reloc_is_const (&src1->r_rel) != r_reloc_is_const (&src2->r_rel))
-    return FALSE;
+    return false;
 
   if (r_reloc_is_const (&src1->r_rel))
     return (src1->value == src2->value);
 
   if (ELF32_R_TYPE (src1->r_rel.rela.r_info)
       != ELF32_R_TYPE (src2->r_rel.rela.r_info))
-    return FALSE;
+    return false;
 
   if (src1->r_rel.target_offset != src2->r_rel.target_offset)
-    return FALSE;
+    return false;
 
   if (src1->r_rel.virtual_offset != src2->r_rel.virtual_offset)
-    return FALSE;
+    return false;
 
   if (src1->value != src2->value)
-    return FALSE;
+    return false;
 
   /* Now check for the same section (if defined) or the same elf_hash
      (if undefined or weak).  */
   h1 = r_reloc_get_hash_entry (&src1->r_rel);
   h2 = r_reloc_get_hash_entry (&src2->r_rel);
+
+  /* Keep start_stop literals always unique to avoid dropping it due to them
+     having late initialization.
+     Now they are equal because initialized with zeroed values.  */
+  if (h2 && h2->start_stop)
+      return false;
+
   if (r_reloc_is_defined (&src1->r_rel)
       && (final_static_link
 	  || ((!h1 || h1->root.type != bfd_link_hash_defweak)
@@ -5181,19 +5244,19 @@ literal_value_equal (const literal_value
     {
       if (r_reloc_get_section (&src1->r_rel)
 	  != r_reloc_get_section (&src2->r_rel))
-	return FALSE;
+	return false;
     }
   else
     {
       /* Require that the hash entries (i.e., symbols) be identical.  */
       if (h1 != h2 || h1 == 0)
-	return FALSE;
+	return false;
     }
 
   if (src1->is_abs_literal != src2->is_abs_literal)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -5216,7 +5279,7 @@ value_map_hash_table_init (void)
       free (values);
       return NULL;
     }
-  values->has_last_loc = FALSE;
+  values->has_last_loc = false;
 
   return values;
 }
@@ -5267,7 +5330,7 @@ literal_value_hash (const literal_value
 static value_map *
 value_map_get_cached_value (value_map_hash_table *map,
 			    const literal_value *val,
-			    bfd_boolean final_static_link)
+			    bool final_static_link)
 {
   value_map *map_e;
   value_map *bucket;
@@ -5292,7 +5355,7 @@ static value_map *
 add_value_map (value_map_hash_table *map,
 	       const literal_value *val,
 	       const r_reloc *loc,
-	       bfd_boolean final_static_link)
+	       bool final_static_link)
 {
   value_map **bucket_p;
   unsigned idx;
@@ -5597,7 +5660,7 @@ static int
 removed_by_actions (text_action_list *action_list,
 		    text_action **p_start_action,
 		    bfd_vma offset,
-		    bfd_boolean before_fill)
+		    bool before_fill)
 {
   text_action *r;
   int removed = 0;
@@ -5634,7 +5697,7 @@ offset_with_removed_text (text_action_li
 {
   text_action *r = action_first (action_list);
 
-  return offset - removed_by_actions (action_list, &r, offset, FALSE);
+  return offset - removed_by_actions (action_list, &r, offset, false);
 }
 
 
@@ -5649,7 +5712,7 @@ struct map_action_fn_context_struct
 {
   int removed;
   removal_by_action_map map;
-  bfd_boolean eq_complete;
+  bool eq_complete;
 };
 
 static int
@@ -5666,7 +5729,7 @@ map_action_fn (splay_tree_node node, voi
   else
     {
       ++ctx->map.n_entries;
-      ctx->eq_complete = FALSE;
+      ctx->eq_complete = false;
       ientry->offset = r->offset;
       ientry->eq_removed_before_fill = ctx->removed;
     }
@@ -5676,7 +5739,7 @@ map_action_fn (splay_tree_node node, voi
       if (r->action != ta_fill || r->removed_bytes >= 0)
 	{
 	  ientry->eq_removed = ctx->removed;
-	  ctx->eq_complete = TRUE;
+	  ctx->eq_complete = true;
 	}
       else
 	ientry->eq_removed = ctx->removed + r->removed_bytes;
@@ -5696,7 +5759,7 @@ map_removal_by_action (text_action_list
   ctx.map.n_entries = 0;
   ctx.map.entry = bfd_malloc (action_list_count (action_list) *
 			      sizeof (removal_by_action_entry));
-  ctx.eq_complete = FALSE;
+  ctx.eq_complete = false;
 
   splay_tree_foreach (action_list->tree, map_action_fn, &ctx);
   action_list->map = ctx.map;
@@ -5704,7 +5767,7 @@ map_removal_by_action (text_action_list
 
 static int
 removed_by_actions_map (text_action_list *action_list, bfd_vma offset,
-			bfd_boolean before_fill)
+			bool before_fill)
 {
   unsigned a, b;
 
@@ -5746,7 +5809,7 @@ removed_by_actions_map (text_action_list
 static bfd_vma
 offset_with_removed_text_map (text_action_list *action_list, bfd_vma offset)
 {
-  int removed = removed_by_actions_map (action_list, offset, FALSE);
+  int removed = removed_by_actions_map (action_list, offset, false);
   return offset - removed;
 }
 
@@ -5938,13 +6001,13 @@ map_removed_literal (removed_literal_lis
 static int
 removed_literal_compare (const void *a, const void *b)
 {
-  const removed_literal_map_entry *pa = a;
-  const removed_literal_map_entry *pb = b;
+  const bfd_vma *key = a;
+  const removed_literal_map_entry *memb = b;
 
-  if (pa->addr == pb->addr)
+  if (*key == memb->addr)
     return 0;
   else
-    return pa->addr < pb->addr ? -1 : 1;
+    return *key < memb->addr ? -1 : 1;
 }
 
 /* Check if the list of removed literals contains an entry for the
@@ -5959,13 +6022,16 @@ find_removed_literal (removed_literal_li
   if (removed_list->map == NULL)
     map_removed_literal (removed_list);
 
-  p = bsearch (&addr, removed_list->map, removed_list->n_map,
-	       sizeof (*removed_list->map), removed_literal_compare);
-  if (p)
-    {
-      while (p != removed_list->map && (p - 1)->addr == addr)
-	--p;
-      r = p->literal;
+  if (removed_list->map != NULL)
+    {
+      p = bsearch (&addr, removed_list->map, removed_list->n_map,
+		   sizeof (*removed_list->map), removed_literal_compare);
+      if (p)
+	{
+	  while (p != removed_list->map && (p - 1)->addr == addr)
+	    --p;
+	  r = p->literal;
+	}
     }
   return r;
 }
@@ -6001,8 +6067,8 @@ typedef struct reloc_bfd_fix_struct relo
 
 struct xtensa_relax_info_struct
 {
-  bfd_boolean is_relaxable_literal_section;
-  bfd_boolean is_relaxable_asm_section;
+  bool is_relaxable_literal_section;
+  bool is_relaxable_asm_section;
   int visited;				/* Number of times visited.  */
 
   source_reloc *src_relocs;		/* Array[src_count].  */
@@ -6033,17 +6099,17 @@ struct elf_xtensa_section_data
 };
 
 
-static bfd_boolean
+static bool
 elf_xtensa_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
       struct elf_xtensa_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -6070,8 +6136,8 @@ init_xtensa_relax_info (asection *sec)
 {
   xtensa_relax_info *relax_info = get_xtensa_relax_info (sec);
 
-  relax_info->is_relaxable_literal_section = FALSE;
-  relax_info->is_relaxable_asm_section = FALSE;
+  relax_info->is_relaxable_literal_section = false;
+  relax_info->is_relaxable_asm_section = false;
   relax_info->visited = 0;
 
   relax_info->src_relocs = NULL;
@@ -6113,7 +6179,7 @@ struct reloc_bfd_fix_struct
 
   asection *target_sec;
   bfd_vma target_offset;
-  bfd_boolean translated;
+  bool translated;
 
   reloc_bfd_fix *next;
 };
@@ -6125,7 +6191,7 @@ reloc_bfd_fix_init (asection *src_sec,
 		    unsigned src_type,
 		    asection *target_sec,
 		    bfd_vma target_offset,
-		    bfd_boolean translated)
+		    bool translated)
 {
   reloc_bfd_fix *fix;
 
@@ -6251,13 +6317,12 @@ free_section_cache (section_cache_t *sec
     {
       release_contents (sec_cache->sec, sec_cache->contents);
       release_internal_relocs (sec_cache->sec, sec_cache->relocs);
-      if (sec_cache->ptbl)
-	free (sec_cache->ptbl);
+      free (sec_cache->ptbl);
     }
 }
 
 
-static bfd_boolean
+static bool
 section_cache_section (section_cache_t *sec_cache,
 		       asection *sec,
 		       struct bfd_link_info *link_info)
@@ -6270,9 +6335,9 @@ section_cache_section (section_cache_t *
   bfd_size_type sec_size;
 
   if (sec == NULL)
-    return FALSE;
+    return false;
   if (sec == sec_cache->sec)
-    return TRUE;
+    return true;
 
   abfd = sec->owner;
   sec_size = bfd_get_section_limit (abfd, sec);
@@ -6288,7 +6353,7 @@ section_cache_section (section_cache_t *
 
   /* Get the entry table.  */
   ptblsize = xtensa_read_table_entries (abfd, sec, &prop_table,
-					XTENSA_PROP_SEC_NAME, FALSE);
+					XTENSA_PROP_SEC_NAME, false);
   if (ptblsize < 0)
     goto err;
 
@@ -6304,14 +6369,13 @@ section_cache_section (section_cache_t *
   sec_cache->pte_count = ptblsize;
   sec_cache->ptbl = prop_table;
 
-  return TRUE;
+  return true;
 
  err:
   release_contents (sec, contents);
   release_internal_relocs (sec, internal_relocs);
-  if (prop_table)
-    free (prop_table);
-  return FALSE;
+  free (prop_table);
+  return false;
 }
 
 
@@ -6349,7 +6413,7 @@ struct ebb_struct
   unsigned end_ptbl_idx;
   unsigned end_reloc_idx;
 
-  bfd_boolean ends_section;	/* Is this the last ebb in a section?  */
+  bool ends_section;	/* Is this the last ebb in a section?  */
 
   /* The unreachable property table at the end of this set of blocks;
      NULL if the end is not an unreachable block.  */
@@ -6384,7 +6448,7 @@ struct proposed_action_struct
   text_action_t action;
   bfd_vma offset;
   int removed_bytes;
-  bfd_boolean do_action; /* If false, then we will not perform the action.  */
+  bool do_action; /* If false, then we will not perform the action.  */
 };
 
 
@@ -6396,14 +6460,14 @@ typedef struct ebb_constraint_struct ebb
 struct ebb_constraint_struct
 {
   ebb_t ebb;
-  bfd_boolean start_movable;
+  bool start_movable;
 
   /* Bytes of extra space at the beginning if movable.  */
   int start_extra_space;
 
   enum ebb_target_enum start_align;
 
-  bfd_boolean end_movable;
+  bool end_movable;
 
   /* Bytes of extra space at the end if movable.  */
   int end_extra_space;
@@ -6429,8 +6493,7 @@ init_ebb_constraint (ebb_constraint *c)
 static void
 free_ebb_constraint (ebb_constraint *c)
 {
-  if (c->actions)
-    free (c->actions);
+  free (c->actions);
 }
 
 
@@ -6467,23 +6530,23 @@ init_ebb (ebb_t *ebb,
    a block that cannot be transformed.  Then we push it backwards
    searching for similar conditions.  */
 
-static bfd_boolean extend_ebb_bounds_forward (ebb_t *);
-static bfd_boolean extend_ebb_bounds_backward (ebb_t *);
+static bool extend_ebb_bounds_forward (ebb_t *);
+static bool extend_ebb_bounds_backward (ebb_t *);
 static bfd_size_type insn_block_decodable_len
   (bfd_byte *, bfd_size_type, bfd_vma, bfd_size_type);
 
-static bfd_boolean
+static bool
 extend_ebb_bounds (ebb_t *ebb)
 {
   if (!extend_ebb_bounds_forward (ebb))
-    return FALSE;
+    return false;
   if (!extend_ebb_bounds_backward (ebb))
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 extend_ebb_bounds_forward (ebb_t *ebb)
 {
   property_table_entry *the_entry, *new_entry;
@@ -6512,12 +6575,12 @@ extend_ebb_bounds_forward (ebb_t *ebb)
 	       "possible configuration mismatch"),
 	     ebb->sec->owner, ebb->sec,
 	     (uint64_t) (ebb->end_offset + insn_block_len));
-	  return FALSE;
+	  return false;
 	}
       ebb->end_offset += insn_block_len;
 
       if (ebb->end_offset == ebb->sec->size)
-	ebb->ends_section = TRUE;
+	ebb->ends_section = true;
 
       /* Update the reloc counter.  */
       while (ebb->end_reloc_idx + 1 < ebb->reloc_count
@@ -6528,7 +6591,7 @@ extend_ebb_bounds_forward (ebb_t *ebb)
 	}
 
       if (ebb->end_ptbl_idx + 1 == ebb->pte_count)
-	return TRUE;
+	return true;
 
       new_entry = &ebb->ptbl[ebb->end_ptbl_idx + 1];
       if (((new_entry->flags & XTENSA_PROP_INSN) == 0)
@@ -6547,7 +6610,7 @@ extend_ebb_bounds_forward (ebb_t *ebb)
   if (ebb->end_ptbl_idx + 1 == ebb->pte_count)
     {
       if (ebb->end_offset == ebb->content_length)
-	ebb->ends_section = TRUE;
+	ebb->ends_section = true;
     }
   else
     {
@@ -6558,11 +6621,11 @@ extend_ebb_bounds_forward (ebb_t *ebb)
     }
 
   /* Any other ending requires exact alignment.  */
-  return TRUE;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 extend_ebb_bounds_backward (ebb_t *ebb)
 {
   property_table_entry *the_entry, *new_entry;
@@ -6591,7 +6654,7 @@ extend_ebb_bounds_backward (ebb_t *ebb)
 	       "possible configuration mismatch"),
 	     ebb->sec->owner, ebb->sec,
 	     (uint64_t) (ebb->end_offset + insn_block_len));
-	  return FALSE;
+	  return false;
 	}
       ebb->start_offset -= insn_block_len;
 
@@ -6604,20 +6667,20 @@ extend_ebb_bounds_backward (ebb_t *ebb)
 	}
 
       if (ebb->start_ptbl_idx == 0)
-	return TRUE;
+	return true;
 
       new_entry = &ebb->ptbl[ebb->start_ptbl_idx - 1];
       if ((new_entry->flags & XTENSA_PROP_INSN) == 0
 	  || ((new_entry->flags & XTENSA_PROP_NO_TRANSFORM) != 0)
 	  || ((new_entry->flags & XTENSA_PROP_ALIGN) != 0))
-	return TRUE;
+	return true;
       if (new_entry->address + new_entry->size != the_entry->address)
-	return TRUE;
+	return true;
 
       the_entry = new_entry;
       ebb->start_ptbl_idx--;
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -6649,7 +6712,7 @@ ebb_propose_action (ebb_constraint *c,
 		    text_action_t action,
 		    bfd_vma offset,
 		    int removed_bytes,
-		    bfd_boolean do_action)
+		    bool do_action)
 {
   proposed_action *act;
 
@@ -6664,8 +6727,7 @@ ebb_propose_action (ebb_constraint *c,
 
       for (i = 0; i < c->action_count; i++)
 	new_actions[i] = c->actions[i];
-      if (c->actions)
-	free (c->actions);
+      free (c->actions);
       c->actions = new_actions;
       c->action_allocated = new_allocated;
     }
@@ -6692,7 +6754,7 @@ ebb_propose_action (ebb_constraint *c,
    standard BFD functions to take care of this for us.  */
 
 static Elf_Internal_Rela *
-retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory)
+retrieve_internal_relocs (bfd *abfd, asection *sec, bool keep_memory)
 {
   Elf_Internal_Rela *internal_relocs;
 
@@ -6717,14 +6779,13 @@ pin_internal_relocs (asection *sec, Elf_
 static void
 release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs)
 {
-  if (internal_relocs
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 }
 
 
 static bfd_byte *
-retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory)
+retrieve_contents (bfd *abfd, asection *sec, bool keep_memory)
 {
   bfd_byte *contents;
   bfd_size_type sec_size;
@@ -6736,8 +6797,7 @@ retrieve_contents (bfd *abfd, asection *
     {
       if (!bfd_malloc_and_get_section (abfd, sec, &contents))
 	{
-	  if (contents)
-	    free (contents);
+	  free (contents);
 	  return NULL;
 	}
       if (keep_memory)
@@ -6757,7 +6817,7 @@ pin_contents (asection *sec, bfd_byte *c
 static void
 release_contents (asection *sec, bfd_byte *contents)
 {
-  if (contents && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
 }
 
@@ -6788,77 +6848,77 @@ retrieve_local_syms (bfd *input_bfd)
 /* Code for link-time relaxation.  */
 
 /* Initialization for relaxation: */
-static bfd_boolean analyze_relocations (struct bfd_link_info *);
-static bfd_boolean find_relaxable_sections
-  (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
-static bfd_boolean collect_source_relocs
+static bool analyze_relocations (struct bfd_link_info *);
+static bool find_relaxable_sections
+  (bfd *, asection *, struct bfd_link_info *, bool *);
+static bool collect_source_relocs
   (bfd *, asection *, struct bfd_link_info *);
-static bfd_boolean is_resolvable_asm_expansion
+static bool is_resolvable_asm_expansion
   (bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, struct bfd_link_info *,
-   bfd_boolean *);
+   bool *);
 static Elf_Internal_Rela *find_associated_l32r_irel
   (bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, Elf_Internal_Rela *);
-static bfd_boolean compute_text_actions
+static bool compute_text_actions
   (bfd *, asection *, struct bfd_link_info *);
-static bfd_boolean compute_ebb_proposed_actions (ebb_constraint *);
-static bfd_boolean compute_ebb_actions (ebb_constraint *);
+static bool compute_ebb_proposed_actions (ebb_constraint *);
+static bool compute_ebb_actions (ebb_constraint *);
 typedef struct reloc_range_list_struct reloc_range_list;
-static bfd_boolean check_section_ebb_pcrels_fit
+static bool check_section_ebb_pcrels_fit
   (bfd *, asection *, bfd_byte *, Elf_Internal_Rela *,
    reloc_range_list *, const ebb_constraint *,
    const xtensa_opcode *);
-static bfd_boolean check_section_ebb_reduces (const ebb_constraint *);
+static bool check_section_ebb_reduces (const ebb_constraint *);
 static void text_action_add_proposed
   (text_action_list *, const ebb_constraint *, asection *);
 
 /* First pass: */
-static bfd_boolean compute_removed_literals
+static bool compute_removed_literals
   (bfd *, asection *, struct bfd_link_info *, value_map_hash_table *);
 static Elf_Internal_Rela *get_irel_at_offset
   (asection *, Elf_Internal_Rela *, bfd_vma);
-static bfd_boolean is_removable_literal
+static bool is_removable_literal
   (const source_reloc *, int, const source_reloc *, int, asection *,
    property_table_entry *, int);
-static bfd_boolean remove_dead_literal
+static bool remove_dead_literal
   (bfd *, asection *, struct bfd_link_info *, Elf_Internal_Rela *,
    Elf_Internal_Rela *, source_reloc *, property_table_entry *, int);
-static bfd_boolean identify_literal_placement
+static bool identify_literal_placement
   (bfd *, asection *, bfd_byte *, struct bfd_link_info *,
-   value_map_hash_table *, bfd_boolean *, Elf_Internal_Rela *, int,
+   value_map_hash_table *, bool *, Elf_Internal_Rela *, int,
    source_reloc *, property_table_entry *, int, section_cache_t *,
-   bfd_boolean);
-static bfd_boolean relocations_reach (source_reloc *, int, const r_reloc *);
-static bfd_boolean coalesce_shared_literal
+   bool);
+static bool relocations_reach (source_reloc *, int, const r_reloc *);
+static bool coalesce_shared_literal
   (asection *, source_reloc *, property_table_entry *, int, value_map *);
-static bfd_boolean move_shared_literal
+static bool move_shared_literal
   (asection *, struct bfd_link_info *, source_reloc *, property_table_entry *,
    int, const r_reloc *, const literal_value *, section_cache_t *);
 
 /* Second pass: */
-static bfd_boolean relax_section (bfd *, asection *, struct bfd_link_info *);
-static bfd_boolean translate_section_fixes (asection *);
-static bfd_boolean translate_reloc_bfd_fix (reloc_bfd_fix *);
+static bool relax_section (bfd *, asection *, struct bfd_link_info *);
+static bool translate_section_fixes (asection *);
+static bool translate_reloc_bfd_fix (reloc_bfd_fix *);
 static asection *translate_reloc (const r_reloc *, r_reloc *, asection *);
 static void shrink_dynamic_reloc_sections
   (struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *);
-static bfd_boolean move_literal
+static bool move_literal
   (bfd *, struct bfd_link_info *, asection *, bfd_vma, bfd_byte *,
    xtensa_relax_info *, Elf_Internal_Rela **, const literal_value *);
-static bfd_boolean relax_property_section
+static bool relax_property_section
   (bfd *, asection *, struct bfd_link_info *);
 
 /* Third pass: */
-static bfd_boolean relax_section_symbols (bfd *, asection *);
+static bool relax_section_symbols (bfd *, asection *);
 
 
-static bfd_boolean
+static bool
 elf_xtensa_relax_section (bfd *abfd,
 			  asection *sec,
 			  struct bfd_link_info *link_info,
-			  bfd_boolean *again)
+			  bool *again)
 {
   static value_map_hash_table *values = NULL;
-  static bfd_boolean relocations_analyzed = FALSE;
+  static bool relocations_analyzed = false;
   xtensa_relax_info *relax_info;
 
   if (!relocations_analyzed)
@@ -6866,17 +6926,17 @@ elf_xtensa_relax_section (bfd *abfd,
       /* Do some overall initialization for relaxation.  */
       values = value_map_hash_table_init ();
       if (values == NULL)
-	return FALSE;
-      relaxing_section = TRUE;
+	return false;
+      relaxing_section = true;
       if (!analyze_relocations (link_info))
-	return FALSE;
-      relocations_analyzed = TRUE;
+	return false;
+      relocations_analyzed = true;
     }
-  *again = FALSE;
+  *again = false;
 
   /* Don't mess with linker-created sections.  */
   if ((sec->flags & SEC_LINKER_CREATED) != 0)
-    return TRUE;
+    return true;
 
   relax_info = get_xtensa_relax_info (sec);
   BFD_ASSERT (relax_info != NULL);
@@ -6888,8 +6948,8 @@ elf_xtensa_relax_section (bfd *abfd,
 	 analyze_relocations, but it is important for this step that the
 	 sections be examined in link order.  */
       if (!compute_removed_literals (abfd, sec, link_info, values))
-	return FALSE;
-      *again = TRUE;
+	return false;
+      *again = true;
       break;
 
     case 1:
@@ -6897,18 +6957,18 @@ elf_xtensa_relax_section (bfd *abfd,
 	value_map_hash_table_delete (values);
       values = NULL;
       if (!relax_section (abfd, sec, link_info))
-	return FALSE;
-      *again = TRUE;
+	return false;
+      *again = true;
       break;
 
     case 2:
       if (!relax_section_symbols (abfd, sec))
-	return FALSE;
+	return false;
       break;
     }
 
   relax_info->visited++;
-  return TRUE;
+  return true;
 }
 
 
@@ -6926,12 +6986,12 @@ elf_xtensa_relax_section (bfd *abfd,
    the L32R associated with the longcall while optionally preserving
    branch target alignments.  */
 
-static bfd_boolean
+static bool
 analyze_relocations (struct bfd_link_info *link_info)
 {
   bfd *abfd;
   asection *sec;
-  bfd_boolean is_relaxable = FALSE;
+  bool is_relaxable = false;
 
   /* Initialize the per-section relaxation info.  */
   for (abfd = link_info->input_bfds; abfd != NULL; abfd = abfd->link.next)
@@ -6945,12 +7005,12 @@ analyze_relocations (struct bfd_link_inf
     for (sec = abfd->sections; sec != NULL; sec = sec->next)
       {
 	if (!find_relaxable_sections (abfd, sec, link_info, &is_relaxable))
-	  return FALSE;
+	  return false;
       }
 
   /* Bail out if there are no relaxable sections.  */
   if (!is_relaxable)
-    return TRUE;
+    return true;
 
   /* Allocate space for source_relocs.  */
   for (abfd = link_info->input_bfds; abfd != NULL; abfd = abfd->link.next)
@@ -6974,7 +7034,7 @@ analyze_relocations (struct bfd_link_inf
     for (sec = abfd->sections; sec != NULL; sec = sec->next)
       {
 	if (!collect_source_relocs (abfd, sec, link_info))
-	  return FALSE;
+	  return false;
       }
 
   /* Compute the text actions.  */
@@ -6982,10 +7042,10 @@ analyze_relocations (struct bfd_link_inf
     for (sec = abfd->sections; sec != NULL; sec = sec->next)
       {
 	if (!compute_text_actions (abfd, sec, link_info))
-	  return FALSE;
+	  return false;
       }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -6999,18 +7059,18 @@ analyze_relocations (struct bfd_link_inf
    know how much space to allocate for source_relocs against each
    relaxable literal section.  */
 
-static bfd_boolean
+static bool
 find_relaxable_sections (bfd *abfd,
 			 asection *sec,
 			 struct bfd_link_info *link_info,
-			 bfd_boolean *is_relaxable_p)
+			 bool *is_relaxable_p)
 {
   Elf_Internal_Rela *internal_relocs;
   bfd_byte *contents;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
   unsigned i;
   xtensa_relax_info *source_relax_info;
-  bfd_boolean is_l32r_reloc;
+  bool is_l32r_reloc;
 
   internal_relocs = retrieve_internal_relocs (abfd, sec,
 					      link_info->keep_memory);
@@ -7020,7 +7080,7 @@ find_relaxable_sections (bfd *abfd,
   contents = retrieve_contents (abfd, sec, link_info->keep_memory);
   if (contents == NULL && sec->size != 0)
     {
-      ok = FALSE;
+      ok = false;
       goto error_return;
     }
 
@@ -7040,13 +7100,13 @@ find_relaxable_sections (bfd *abfd,
 	  && !source_relax_info->is_relaxable_asm_section
 	  && ELF32_R_TYPE (irel->r_info) == R_XTENSA_ASM_EXPAND)
 	{
-	  bfd_boolean is_reachable = FALSE;
+	  bool is_reachable = false;
 	  if (is_resolvable_asm_expansion (abfd, sec, contents, irel,
 					   link_info, &is_reachable)
 	      && is_reachable)
 	    {
-	      source_relax_info->is_relaxable_asm_section = TRUE;
-	      *is_relaxable_p = TRUE;
+	      source_relax_info->is_relaxable_asm_section = true;
+	      *is_relaxable_p = true;
 	    }
 	}
 
@@ -7061,7 +7121,7 @@ find_relaxable_sections (bfd *abfd,
       /* Count PC-relative operand relocations against the target section.
 	 Note: The conditions tested here must match the conditions under
 	 which init_source_reloc is called in collect_source_relocs().  */
-      is_l32r_reloc = FALSE;
+      is_l32r_reloc = false;
       if (is_operand_relocation (ELF32_R_TYPE (irel->r_info)))
 	{
 	  xtensa_opcode opcode =
@@ -7078,8 +7138,8 @@ find_relaxable_sections (bfd *abfd,
       if (is_l32r_reloc && r_reloc_is_defined (&r_rel))
 	{
 	  /* Mark the target section as relaxable.  */
-	  target_relax_info->is_relaxable_literal_section = TRUE;
-	  *is_relaxable_p = TRUE;
+	  target_relax_info->is_relaxable_literal_section = true;
+	  *is_relaxable_p = true;
 	}
     }
 
@@ -7094,14 +7154,14 @@ find_relaxable_sections (bfd *abfd,
    get rid of ASM_EXPAND relocs by either converting them to
    ASM_SIMPLIFY or by removing them.  */
 
-static bfd_boolean
+static bool
 collect_source_relocs (bfd *abfd,
 		       asection *sec,
 		       struct bfd_link_info *link_info)
 {
   Elf_Internal_Rela *internal_relocs;
   bfd_byte *contents;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
   unsigned i;
   bfd_size_type sec_size;
 
@@ -7114,7 +7174,7 @@ collect_source_relocs (bfd *abfd,
   contents = retrieve_contents (abfd, sec, link_info->keep_memory);
   if (contents == NULL && sec_size != 0)
     {
-      ok = FALSE;
+      ok = false;
       goto error_return;
     }
 
@@ -7137,7 +7197,7 @@ collect_source_relocs (bfd *abfd,
 	{
 	  xtensa_opcode opcode = XTENSA_UNDEFINED;
 	  int opnd = -1;
-	  bfd_boolean is_abs_literal = FALSE;
+	  bool is_abs_literal = false;
 
 	  if (is_alt_relocation (ELF32_R_TYPE (irel->r_info)))
 	    {
@@ -7148,7 +7208,7 @@ collect_source_relocs (bfd *abfd,
 	      opcode = get_relocation_opcode (abfd, sec, contents, irel);
 	      if (opcode == get_l32r_opcode ())
 		{
-		  is_abs_literal = TRUE;
+		  is_abs_literal = true;
 		  opnd = 1;
 		}
 	      else
@@ -7180,7 +7240,7 @@ collect_source_relocs (bfd *abfd,
   for (i = 0; i < sec->reloc_count; i++)
     {
       Elf_Internal_Rela *irel = &internal_relocs[i];
-      bfd_boolean is_reachable;
+      bool is_reachable;
 
       if (!is_resolvable_asm_expansion (abfd, sec, contents, irel, link_info,
 					&is_reachable))
@@ -7220,7 +7280,7 @@ collect_source_relocs (bfd *abfd,
 					   target_relax_info->src_next,
 					   sec, l32r_irel);
 	      BFD_ASSERT (s_reloc);
-	      s_reloc->is_null = TRUE;
+	      s_reloc->is_null = true;
 	    }
 
 	  /* Convert this reloc to ASM_SIMPLIFY.  */
@@ -7253,13 +7313,13 @@ collect_source_relocs (bfd *abfd,
    the call is within the range of a direct call, given the current VMA
    for this section and the target section.  */
 
-bfd_boolean
+bool
 is_resolvable_asm_expansion (bfd *abfd,
 			     asection *sec,
 			     bfd_byte *contents,
 			     Elf_Internal_Rela *irel,
 			     struct bfd_link_info *link_info,
-			     bfd_boolean *is_reachable_p)
+			     bool *is_reachable_p)
 {
   asection *target_sec;
   asection *s;
@@ -7272,32 +7332,32 @@ is_resolvable_asm_expansion (bfd *abfd,
   xtensa_opcode opcode, direct_call_opcode;
   bfd_vma self_address;
   bfd_vma dest_address;
-  bfd_boolean uses_l32r;
+  bool uses_l32r;
   bfd_size_type sec_size;
 
-  *is_reachable_p = FALSE;
+  *is_reachable_p = false;
 
   if (contents == NULL)
-    return FALSE;
+    return false;
 
   if (ELF32_R_TYPE (irel->r_info) != R_XTENSA_ASM_EXPAND)
-    return FALSE;
+    return false;
 
   sec_size = bfd_get_section_limit (abfd, sec);
   opcode = get_expanded_call_opcode (contents + irel->r_offset,
 				     sec_size - irel->r_offset, &uses_l32r);
   /* Optimization of longcalls that use CONST16 is not yet implemented.  */
   if (!uses_l32r)
-    return FALSE;
+    return false;
 
   direct_call_opcode = swap_callx_for_call_opcode (opcode);
   if (direct_call_opcode == XTENSA_UNDEFINED)
-    return FALSE;
+    return false;
 
   /* Check and see that the target resolves.  */
   r_reloc_init (&r_rel, abfd, irel, contents, sec_size);
   if (!r_reloc_is_defined (&r_rel))
-    return FALSE;
+    return false;
 
   target_sec = r_reloc_get_section (&r_rel);
   target_offset = r_rel.target_offset;
@@ -7307,7 +7367,7 @@ is_resolvable_asm_expansion (bfd *abfd,
      non-PIC calls on systems that use shared libraries, but the linker
      shouldn't crash regardless.  */
   if (!target_sec->output_section)
-    return FALSE;
+    return false;
 
   /* For relocatable sections, we can only simplify when the output
      section of the target is the same as the output section of the
@@ -7315,7 +7375,7 @@ is_resolvable_asm_expansion (bfd *abfd,
   if (bfd_link_relocatable (link_info)
       && (target_sec->output_section != sec->output_section
 	  || is_reloc_sym_weak (abfd, irel)))
-    return FALSE;
+    return false;
 
   if (target_sec->output_section != sec->output_section)
     {
@@ -7410,9 +7470,9 @@ is_resolvable_asm_expansion (bfd *abfd,
 
   if ((self_address >> CALL_SEGMENT_BITS) !=
       (dest_address >> CALL_SEGMENT_BITS))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -7461,7 +7521,7 @@ build_reloc_opcodes (bfd *abfd,
 struct reloc_range_struct
 {
   bfd_vma addr;
-  bfd_boolean add; /* TRUE if start of a range, FALSE otherwise.  */
+  bool add; /* TRUE if start of a range, FALSE otherwise.  */
   /* Original irel index in the array of relocations for a section.  */
   unsigned irel_index;
 };
@@ -7480,7 +7540,7 @@ struct reloc_range_list_entry_struct
 struct reloc_range_list_struct
 {
   /* The rest of the structure is only meaningful when ok is TRUE.  */
-  bfd_boolean ok;
+  bool ok;
 
   unsigned n_range; /* Number of range markers.  */
   reloc_range *range; /* Sorted range markers.  */
@@ -7521,7 +7581,7 @@ build_reloc_ranges (bfd *abfd, asection
     bfd_malloc (sec->reloc_count * sizeof (*reloc));
 
   memset (list, 0, sizeof (*list));
-  list->ok = TRUE;
+  list->ok = true;
 
   for (i = 0; i < sec->reloc_count; i++)
     {
@@ -7579,14 +7639,14 @@ build_reloc_ranges (bfd *abfd, asection
 
 	  if (opcode == XTENSA_UNDEFINED)
 	    {
-	      list->ok = FALSE;
+	      list->ok = false;
 	      break;
 	    }
 
 	  opnum = get_relocation_opnd (opcode, ELF32_R_TYPE (irel->r_info));
 	  if (opnum == XTENSA_UNDEFINED)
 	    {
-	      list->ok = FALSE;
+	      list->ok = false;
 	      break;
 	    }
 
@@ -7685,7 +7745,7 @@ static void free_reloc_range_list (reloc
    The actual changes are performed by relax_section() in the second
    pass.  */
 
-bfd_boolean
+bool
 compute_text_actions (bfd *abfd,
 		      asection *sec,
 		      struct bfd_link_info *link_info)
@@ -7694,7 +7754,7 @@ compute_text_actions (bfd *abfd,
   xtensa_relax_info *relax_info;
   bfd_byte *contents;
   Elf_Internal_Rela *internal_relocs;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
   unsigned i;
   property_table_entry *prop_table = 0;
   int ptblsize = 0;
@@ -7720,15 +7780,15 @@ compute_text_actions (bfd *abfd,
   contents = retrieve_contents (abfd, sec, link_info->keep_memory);
   if (contents == NULL && sec_size != 0)
     {
-      ok = FALSE;
+      ok = false;
       goto error_return;
     }
 
   ptblsize = xtensa_read_table_entries (abfd, sec, &prop_table,
-					XTENSA_PROP_SEC_NAME, FALSE);
+					XTENSA_PROP_SEC_NAME, false);
   if (ptblsize < 0)
     {
-      ok = FALSE;
+      ok = false;
       goto error_return;
     }
 
@@ -7839,13 +7899,11 @@ compute_text_actions (bfd *abfd,
     print_action_list (stderr, &relax_info->action_list);
 #endif
 
-error_return:
+ error_return:
   release_contents (sec, contents);
   release_internal_relocs (sec, internal_relocs);
-  if (prop_table)
-    free (prop_table);
-  if (reloc_opcodes)
-    free (reloc_opcodes);
+  free (prop_table);
+  free (reloc_opcodes);
 
   return ok;
 }
@@ -7854,7 +7912,7 @@ error_return:
 /* Do not widen an instruction if it is preceeded by a
    loop opcode.  It might cause misalignment.  */
 
-static bfd_boolean
+static bool
 prev_instr_is_a_loop (bfd_byte *contents,
 		      bfd_size_type content_length,
 		      bfd_size_type offset)
@@ -7862,7 +7920,7 @@ prev_instr_is_a_loop (bfd_byte *contents
   xtensa_opcode prev_opcode;
 
   if (offset < 3)
-    return FALSE;
+    return false;
   prev_opcode = insn_decode_opcode (contents, content_length, offset-3, 0);
   return (xtensa_opcode_is_loop (xtensa_default_isa, prev_opcode) == 1);
 }
@@ -7870,7 +7928,7 @@ prev_instr_is_a_loop (bfd_byte *contents
 
 /* Find all of the possible actions for an extended basic block.  */
 
-bfd_boolean
+bool
 compute_ebb_proposed_actions (ebb_constraint *ebb_table)
 {
   const ebb_t *ebb = &ebb_table->ebb;
@@ -7911,7 +7969,7 @@ compute_ebb_proposed_actions (ebb_constr
 	  enum ebb_target_enum align_type = EBB_DESIRE_TGT_ALIGN;
 	  BFD_ASSERT (offset != end_offset);
 	  if (offset == end_offset)
-	    return FALSE;
+	    return false;
 
 	  insn_len = insn_decode_len (ebb->contents, ebb->content_length,
 				      offset);
@@ -7922,7 +7980,7 @@ compute_ebb_proposed_actions (ebb_constr
 	    align_type = EBB_REQUIRE_TGT_ALIGN;
 
 	  ebb_propose_action (ebb_table, align_type, 0,
-			      ta_none, offset, 0, TRUE);
+			      ta_none, offset, 0, true);
 	}
 
       while (offset != end_offset)
@@ -7951,7 +8009,7 @@ compute_ebb_proposed_actions (ebb_constr
 		goto decode_error;
 
 	      ebb_propose_action (ebb_table, EBB_NO_ALIGN, 0,
-				  ta_convert_longcall, offset, 0, TRUE);
+				  ta_convert_longcall, offset, 0, true);
 
 	      offset += simplify_size;
 	      continue;
@@ -7985,7 +8043,7 @@ compute_ebb_proposed_actions (ebb_constr
 	    {
 	      /* Add an instruction narrow action.  */
 	      ebb_propose_action (ebb_table, EBB_NO_ALIGN, 0,
-				  ta_narrow_insn, offset, 0, FALSE);
+				  ta_narrow_insn, offset, 0, false);
 	    }
 	  else if ((entry->flags & XTENSA_PROP_NO_TRANSFORM) == 0
 		   && can_widen_instruction (slotbuf, fmt, opcode) != 0
@@ -7994,13 +8052,13 @@ compute_ebb_proposed_actions (ebb_constr
 	    {
 	      /* Add an instruction widen action.  */
 	      ebb_propose_action (ebb_table, EBB_NO_ALIGN, 0,
-				  ta_widen_insn, offset, 0, FALSE);
+				  ta_widen_insn, offset, 0, false);
 	    }
 	  else if (xtensa_opcode_is_loop (xtensa_default_isa, opcode) == 1)
 	    {
 	      /* Check for branch targets.  */
 	      ebb_propose_action (ebb_table, EBB_REQUIRE_LOOP_ALIGN, 0,
-				  ta_none, offset, 0, TRUE);
+				  ta_none, offset, 0, true);
 	    }
 
 	  offset += insn_len;
@@ -8010,10 +8068,10 @@ compute_ebb_proposed_actions (ebb_constr
   if (ebb->ends_unreachable)
     {
       ebb_propose_action (ebb_table, EBB_NO_ALIGN, 0,
-			  ta_fill, ebb->end_offset, 0, TRUE);
+			  ta_fill, ebb->end_offset, 0, true);
     }
 
-  return TRUE;
+  return true;
 
  decode_error:
   _bfd_error_handler
@@ -8021,7 +8079,7 @@ compute_ebb_proposed_actions (ebb_constr
     (_("%pB(%pA+%#" PRIx64 "): could not decode instruction; "
        "possible configuration mismatch"),
      ebb->sec->owner, ebb->sec, (uint64_t) offset);
-  return FALSE;
+  return false;
 }
 
 
@@ -8042,7 +8100,7 @@ compute_ebb_proposed_actions (ebb_constr
    narrow all wide instructions, and remove all no-ops unless the end
    of the EBB prevents it.  */
 
-bfd_boolean
+bool
 compute_ebb_actions (ebb_constraint *ebb_table)
 {
   unsigned i = 0;
@@ -8061,7 +8119,7 @@ compute_ebb_actions (ebb_constraint *ebb
      If so, use it.  */
   for (seg_idx_end = 0; seg_idx_end < ebb_table->action_count; seg_idx_end++)
     {
-      bfd_boolean requires_text_end_align = FALSE;
+      bool requires_text_end_align = false;
       unsigned longcall_count = 0;
       unsigned longcall_convert_count = 0;
       unsigned narrowable_count = 0;
@@ -8094,7 +8152,7 @@ compute_ebb_actions (ebb_constraint *ebb
       seg_idx_end = i;
 
       if (seg_idx_end == ebb_table->action_count && !ebb->ends_unreachable)
-	requires_text_end_align = TRUE;
+	requires_text_end_align = true;
 
       if (elf32xtensa_size_opt && !requires_text_end_align
 	  && action->align_type != EBB_REQUIRE_LOOP_ALIGN
@@ -8146,7 +8204,7 @@ compute_ebb_actions (ebb_constraint *ebb
 	      if (longcall_convert_count != 0)
 		{
 		  action->action = ta_remove_longcall;
-		  action->do_action = TRUE;
+		  action->do_action = true;
 		  action->removed_bytes += 3;
 		  longcall_convert_count--;
 		}
@@ -8154,7 +8212,7 @@ compute_ebb_actions (ebb_constraint *ebb
 	    case ta_narrow_insn:
 	      if (narrowable_convert_count != 0)
 		{
-		  action->do_action = TRUE;
+		  action->do_action = true;
 		  action->removed_bytes += 1;
 		  narrowable_convert_count--;
 		}
@@ -8162,7 +8220,7 @@ compute_ebb_actions (ebb_constraint *ebb
 	    case ta_widen_insn:
 	      if (widenable_convert_count != 0)
 		{
-		  action->do_action = TRUE;
+		  action->do_action = true;
 		  action->removed_bytes -= 1;
 		  widenable_convert_count--;
 		}
@@ -8186,7 +8244,7 @@ compute_ebb_actions (ebb_constraint *ebb
 
 	  if (action->do_action && action->action == ta_convert_longcall)
 	    {
-	      bfd_boolean bad_alignment = FALSE;
+	      bool bad_alignment = false;
 	      removed_bytes += 3;
 	      for (j = i + 1; j < ebb_table->action_count; j++)
 		{
@@ -8199,7 +8257,7 @@ compute_ebb_actions (ebb_constraint *ebb
 			   ebb_table->ebb.content_length,
 			   offset, offset - removed_bytes))
 			{
-			  bad_alignment = TRUE;
+			  bad_alignment = true;
 			  break;
 			}
 		    }
@@ -8210,7 +8268,7 @@ compute_ebb_actions (ebb_constraint *ebb
 					       offset,
 					       offset - removed_bytes))
 			{
-			  bad_alignment = TRUE;
+			  bad_alignment = true;
 			  break;
 			}
 		    }
@@ -8219,9 +8277,9 @@ compute_ebb_actions (ebb_constraint *ebb
 		      && ebb_table->ebb.sec->alignment_power == 2)
 		    {
 		      /* Narrow an instruction and we are done.  */
-		      new_action->do_action = TRUE;
+		      new_action->do_action = true;
 		      new_action->removed_bytes += 1;
-		      bad_alignment = FALSE;
+		      bad_alignment = false;
 		      break;
 		    }
 		  if (new_action->action == ta_widen_insn
@@ -8229,9 +8287,9 @@ compute_ebb_actions (ebb_constraint *ebb
 		      && ebb_table->ebb.sec->alignment_power == 2)
 		    {
 		      /* Narrow an instruction and we are done.  */
-		      new_action->do_action = FALSE;
+		      new_action->do_action = false;
 		      new_action->removed_bytes += 1;
-		      bad_alignment = FALSE;
+		      bad_alignment = false;
 		      break;
 		    }
 		  if (new_action->do_action)
@@ -8241,7 +8299,7 @@ compute_ebb_actions (ebb_constraint *ebb
 		{
 		  action->removed_bytes += 3;
 		  action->action = ta_remove_longcall;
-		  action->do_action = TRUE;
+		  action->do_action = true;
 		}
 	    }
 	  removed_bytes = old_removed_bytes;
@@ -8276,7 +8334,7 @@ compute_ebb_actions (ebb_constraint *ebb
 
       action->removed_bytes = extra_space - br;
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -8445,10 +8503,11 @@ build_xlate_map (asection *sec, xtensa_r
 static void
 free_xlate_map (xlate_map_t *map)
 {
-  if (map && map->entry)
-    free (map->entry);
   if (map)
-    free (map);
+    {
+      free (map->entry);
+      free (map);
+    }
 }
 
 
@@ -8456,7 +8515,7 @@ free_xlate_map (xlate_map_t *map)
    relocations in a section will fit if a proposed set of actions
    are performed.  */
 
-static bfd_boolean
+static bool
 check_section_ebb_pcrels_fit (bfd *abfd,
 			      asection *sec,
 			      bfd_byte *contents,
@@ -8469,7 +8528,7 @@ check_section_ebb_pcrels_fit (bfd *abfd,
   unsigned n = sec->reloc_count;
   Elf_Internal_Rela *irel;
   xlate_map_t *xmap = NULL;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
   xtensa_relax_info *relax_info;
   reloc_range_list_entry *entry = NULL;
 
@@ -8486,7 +8545,7 @@ check_section_ebb_pcrels_fit (bfd *abfd,
     {
       if (!relevant_relocs->ok)
 	{
-	  ok = FALSE;
+	  ok = false;
 	  n = 0;
 	}
       else
@@ -8612,34 +8671,33 @@ check_section_ebb_pcrels_fit (bfd *abfd,
 		opcode = get_relocation_opcode (abfd, sec, contents, irel);
 	      if (opcode == XTENSA_UNDEFINED)
 		{
-		  ok = FALSE;
+		  ok = false;
 		  break;
 		}
 
 	      opnum = get_relocation_opnd (opcode, ELF32_R_TYPE (irel->r_info));
 	      if (opnum == XTENSA_UNDEFINED)
 		{
-		  ok = FALSE;
+		  ok = false;
 		  break;
 		}
 	    }
 
 	  if (!pcrel_reloc_fits (opcode, opnum, self_offset, target_offset))
 	    {
-	      ok = FALSE;
+	      ok = false;
 	      break;
 	    }
 	}
     }
 
-  if (xmap)
-    free_xlate_map (xmap);
+  free_xlate_map (xmap);
 
   return ok;
 }
 
 
-static bfd_boolean
+static bool
 check_section_ebb_reduces (const ebb_constraint *constraint)
 {
   int removed = 0;
@@ -8652,9 +8710,9 @@ check_section_ebb_reduces (const ebb_con
 	removed += action->removed_bytes;
     }
   if (removed < 0)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -8727,7 +8785,7 @@ xtensa_compute_fill_extra_space (propert
    add an entry to the per-section list of removed literals.  The
    actual changes are deferred until the next pass.  */
 
-static bfd_boolean
+static bool
 compute_removed_literals (bfd *abfd,
 			  asection *sec,
 			  struct bfd_link_info *link_info,
@@ -8737,11 +8795,11 @@ compute_removed_literals (bfd *abfd,
   bfd_byte *contents;
   Elf_Internal_Rela *internal_relocs;
   source_reloc *src_relocs, *rel;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
   property_table_entry *prop_table = NULL;
   int ptblsize;
   int i, prev_i;
-  bfd_boolean last_loc_is_prev = FALSE;
+  bool last_loc_is_prev = false;
   bfd_vma last_target_offset = 0;
   section_cache_t target_sec_cache;
   bfd_size_type sec_size;
@@ -8761,7 +8819,7 @@ compute_removed_literals (bfd *abfd,
   contents = retrieve_contents (abfd, sec, link_info->keep_memory);
   if (contents == NULL && sec_size != 0)
     {
-      ok = FALSE;
+      ok = false;
       goto error_return;
     }
 
@@ -8773,10 +8831,10 @@ compute_removed_literals (bfd *abfd,
 	 internal_reloc_compare);
 
   ptblsize = xtensa_read_table_entries (abfd, sec, &prop_table,
-					XTENSA_PROP_SEC_NAME, FALSE);
+					XTENSA_PROP_SEC_NAME, false);
   if (ptblsize < 0)
     {
-      ok = FALSE;
+      ok = false;
       goto error_return;
     }
 
@@ -8808,7 +8866,7 @@ compute_removed_literals (bfd *abfd,
 
       if (last_loc_is_prev &&
 	  last_target_offset + 4 != rel->r_rel.target_offset)
-	last_loc_is_prev = FALSE;
+	last_loc_is_prev = false;
 
       /* Check if the relocation was from an L32R that is being removed
 	 because a CALLX was converted to a direct CALL, and check if
@@ -8819,7 +8877,7 @@ compute_removed_literals (bfd *abfd,
 	  if (!remove_dead_literal (abfd, sec, link_info, internal_relocs,
 				    irel, rel, prop_table, ptblsize))
 	    {
-	      ok = FALSE;
+	      ok = false;
 	      goto error_return;
 	    }
 	  last_target_offset = rel->r_rel.target_offset;
@@ -8833,7 +8891,7 @@ compute_removed_literals (bfd *abfd,
 				       prop_table, ptblsize,
 				       &target_sec_cache, rel->is_abs_literal))
 	{
-	  ok = FALSE;
+	  ok = false;
 	  goto error_return;
 	}
       last_target_offset = rel->r_rel.target_offset;
@@ -8844,9 +8902,8 @@ compute_removed_literals (bfd *abfd,
   print_action_list (stderr, &relax_info->action_list);
 #endif /* DEBUG */
 
-error_return:
-  if (prop_table)
-    free (prop_table);
+ error_return:
+  free (prop_table);
   free_section_cache (&target_sec_cache);
 
   release_contents (sec, contents);
@@ -8895,7 +8952,7 @@ get_irel_at_offset (asection *sec,
 }
 
 
-bfd_boolean
+bool
 is_removable_literal (const source_reloc *rel,
 		      int i,
 		      const source_reloc *src_relocs,
@@ -8908,30 +8965,30 @@ is_removable_literal (const source_reloc
   property_table_entry *entry;
 
   if (!rel->is_null)
-    return FALSE;
+    return false;
 
   entry = elf_xtensa_find_property_entry (prop_table, ptblsize,
 					  sec->vma + rel->r_rel.target_offset);
   if (entry && (entry->flags & XTENSA_PROP_NO_TRANSFORM))
-    return FALSE;
+    return false;
 
   for (++i; i < src_count; ++i)
     {
       curr_rel = &src_relocs[i];
       /* If all others have the same target offset....  */
       if (curr_rel->r_rel.target_offset != rel->r_rel.target_offset)
-	return TRUE;
+	return true;
 
       if (!curr_rel->is_null
 	  && !xtensa_is_property_section (curr_rel->source_sec)
 	  && !(curr_rel->source_sec->flags & SEC_DEBUGGING))
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 
-bfd_boolean
+bool
 remove_dead_literal (bfd *abfd,
 		     asection *sec,
 		     struct bfd_link_info *link_info,
@@ -8946,7 +9003,7 @@ remove_dead_literal (bfd *abfd,
 
   relax_info = get_xtensa_relax_info (sec);
   if (!relax_info)
-    return FALSE;
+    return false;
 
   entry = elf_xtensa_find_property_entry (prop_table, ptblsize,
 					  sec->vma + rel->r_rel.target_offset);
@@ -8998,37 +9055,37 @@ remove_dead_literal (bfd *abfd,
     }
 
   /* Do not modify "last_loc_is_prev".  */
-  return TRUE;
+  return true;
 }
 
 
-bfd_boolean
+bool
 identify_literal_placement (bfd *abfd,
 			    asection *sec,
 			    bfd_byte *contents,
 			    struct bfd_link_info *link_info,
 			    value_map_hash_table *values,
-			    bfd_boolean *last_loc_is_prev_p,
+			    bool *last_loc_is_prev_p,
 			    Elf_Internal_Rela *irel,
 			    int remaining_src_rels,
 			    source_reloc *rel,
 			    property_table_entry *prop_table,
 			    int ptblsize,
 			    section_cache_t *target_sec_cache,
-			    bfd_boolean is_abs_literal)
+			    bool is_abs_literal)
 {
   literal_value val;
   value_map *val_map;
   xtensa_relax_info *relax_info;
-  bfd_boolean literal_placed = FALSE;
+  bool literal_placed = false;
   r_reloc r_rel;
   unsigned long value;
-  bfd_boolean final_static_link;
+  bool final_static_link;
   bfd_size_type sec_size;
 
   relax_info = get_xtensa_relax_info (sec);
   if (!relax_info)
-    return FALSE;
+    return false;
 
   sec_size = bfd_get_section_limit (abfd, sec);
 
@@ -9066,7 +9123,7 @@ identify_literal_placement (bfd *abfd,
       && coalesce_shared_literal (sec, rel, prop_table, ptblsize, val_map))
     {
       /* No change to last_loc_is_prev.  */
-      literal_placed = TRUE;
+      literal_placed = true;
     }
 
   /* For relocatable links, do not try to move literals.  To do it
@@ -9089,7 +9146,7 @@ identify_literal_placement (bfd *abfd,
 				      &try_loc, &val, target_sec_cache))
 	    {
 	      values->last_loc.virtual_offset += 4;
-	      literal_placed = TRUE;
+	      literal_placed = true;
 	      if (!val_map)
 		val_map = add_value_map (values, &val, &try_loc,
 					 final_static_link);
@@ -9102,16 +9159,16 @@ identify_literal_placement (bfd *abfd,
   if (!literal_placed)
     {
       /* Nothing worked, leave the literal alone but update the last loc.  */
-      values->has_last_loc = TRUE;
+      values->has_last_loc = true;
       values->last_loc = rel->r_rel;
       if (!val_map)
 	val_map = add_value_map (values, &val, &rel->r_rel, final_static_link);
       else
 	val_map->loc = rel->r_rel;
-      *last_loc_is_prev_p = TRUE;
+      *last_loc_is_prev_p = true;
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -9126,7 +9183,7 @@ identify_literal_placement (bfd *abfd,
    is sorted by target offset so we know all the entries for the same
    literal will be contiguous.  */
 
-static bfd_boolean
+static bool
 relocations_reach (source_reloc *reloc,
 		   int remaining_relocs,
 		   const r_reloc *r_rel)
@@ -9136,7 +9193,7 @@ relocations_reach (source_reloc *reloc,
   int i;
 
   if (!r_reloc_is_defined (r_rel))
-    return FALSE;
+    return false;
 
   sec = r_reloc_get_section (r_rel);
   from_offset = reloc[0].r_rel.target_offset;
@@ -9154,7 +9211,7 @@ relocations_reach (source_reloc *reloc,
 	 in order to coalesce.  */
       if (r_reloc_get_section (&reloc[i].r_rel)->output_section
 	  != sec->output_section)
-	return FALSE;
+	return false;
 
       /* Absolute literals in the same output section can always be
 	 combined.  */
@@ -9174,18 +9231,18 @@ relocations_reach (source_reloc *reloc,
 
 	  if (!pcrel_reloc_fits (reloc[i].opcode, reloc[i].opnd,
 				 source_address, dest_address))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
 /* Move a literal to another literal location because it is
    the same as the other literal value.  */
 
-static bfd_boolean
+static bool
 coalesce_shared_literal (asection *sec,
 			 source_reloc *rel,
 			 property_table_entry *prop_table,
@@ -9200,12 +9257,12 @@ coalesce_shared_literal (asection *sec,
 
   relax_info = get_xtensa_relax_info (sec);
   if (!relax_info)
-    return FALSE;
+    return false;
 
   entry = elf_xtensa_find_property_entry
     (prop_table, ptblsize, sec->vma + rel->r_rel.target_offset);
   if (entry && (entry->flags & XTENSA_PROP_NO_TRANSFORM))
-    return TRUE;
+    return true;
 
   /* Mark that the literal will be coalesced.  */
   add_removed_literal (&relax_info->removed_list, &rel->r_rel, &val_map->loc);
@@ -9242,7 +9299,7 @@ coalesce_shared_literal (asection *sec,
 			 ta_fill, sec, entry_sec_offset, removed_diff);
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -9250,7 +9307,7 @@ coalesce_shared_literal (asection *sec,
    total amount of space used because of alignments so we need to do
    this carefully.  Also, it may make a branch go out of range.  */
 
-static bfd_boolean
+static bool
 move_shared_literal (asection *sec,
 		     struct bfd_link_info *link_info,
 		     source_reloc *rel,
@@ -9267,16 +9324,16 @@ move_shared_literal (asection *sec,
   asection *target_sec;
   ebb_t *ebb;
   ebb_constraint ebb_table;
-  bfd_boolean relocs_fit;
+  bool relocs_fit;
 
   /* If this routine always returns FALSE, the literals that cannot be
      coalesced will not be moved.  */
   if (elf32xtensa_no_literal_movement)
-    return FALSE;
+    return false;
 
   relax_info = get_xtensa_relax_info (sec);
   if (!relax_info)
-    return FALSE;
+    return false;
 
   target_sec = r_reloc_get_section (target_loc);
   target_relax_info = get_xtensa_relax_info (target_sec);
@@ -9284,23 +9341,23 @@ move_shared_literal (asection *sec,
   /* Literals to undefined sections may not be moved because they
      must report an error.  */
   if (bfd_is_und_section (target_sec))
-    return FALSE;
+    return false;
 
   src_entry = elf_xtensa_find_property_entry
     (prop_table, ptblsize, sec->vma + rel->r_rel.target_offset);
 
   if (!section_cache_section (target_sec_cache, target_sec, link_info))
-    return FALSE;
+    return false;
 
   target_entry = elf_xtensa_find_property_entry
     (target_sec_cache->ptbl, target_sec_cache->pte_count,
      target_sec->vma + target_loc->target_offset);
 
   if (!target_entry)
-    return FALSE;
+    return false;
 
   /* Make sure that we have not broken any branches.  */
-  relocs_fit = FALSE;
+  relocs_fit = false;
 
   init_ebb_constraint (&ebb_table);
   ebb = &ebb_table.ebb;
@@ -9313,7 +9370,7 @@ move_shared_literal (asection *sec,
      destination.  */
   ebb_propose_action (&ebb_table, EBB_NO_ALIGN, 0,
 		      ta_fill, target_loc->target_offset,
-		      -4 - (1 << target_sec->alignment_power), TRUE);
+		      -4 - (1 << target_sec->alignment_power), true);
 
   /* Check all of the PC-relative relocations to make sure they still fit.  */
   relocs_fit = check_section_ebb_pcrels_fit (target_sec->owner, target_sec,
@@ -9322,7 +9379,7 @@ move_shared_literal (asection *sec,
 					     &ebb_table, NULL);
 
   if (!relocs_fit)
-    return FALSE;
+    return false;
 
   text_action_add_literal (&target_relax_info->action_list,
 			   ta_add_literal, target_loc, lit_value, -4);
@@ -9394,7 +9451,7 @@ move_shared_literal (asection *sec,
 			 ta_fill, sec, entry_sec_offset, removed_diff);
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -9414,16 +9471,16 @@ action_remove_bytes_fn (splay_tree_node
    is a relaxable section, delete the unwanted literals and fix the
    section size.  */
 
-bfd_boolean
+bool
 relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info)
 {
   Elf_Internal_Rela *internal_relocs;
   xtensa_relax_info *relax_info;
   bfd_byte *contents;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
   unsigned i;
-  bfd_boolean rv = FALSE;
-  bfd_boolean virtual_action;
+  bool rv = false;
+  bool virtual_action;
   bfd_size_type sec_size;
 
   sec_size = bfd_get_section_limit (abfd, sec);
@@ -9443,12 +9500,12 @@ relax_section (bfd *abfd, asection *sec,
   internal_relocs = retrieve_internal_relocs (abfd, sec,
 					      link_info->keep_memory);
   if (!internal_relocs && !action_list_count (&relax_info->action_list))
-    return TRUE;
+    return true;
 
   contents = retrieve_contents (abfd, sec, link_info->keep_memory);
   if (contents == NULL && sec_size != 0)
     {
-      ok = FALSE;
+      ok = false;
       goto error_return;
     }
 
@@ -9604,7 +9661,13 @@ relax_section (bfd *abfd, asection *sec,
 
 	      if (r_type == R_XTENSA_DIFF8
 		  || r_type == R_XTENSA_DIFF16
-		  || r_type == R_XTENSA_DIFF32)
+		  || r_type == R_XTENSA_DIFF32
+		  || r_type == R_XTENSA_PDIFF8
+		  || r_type == R_XTENSA_PDIFF16
+		  || r_type == R_XTENSA_PDIFF32
+		  || r_type == R_XTENSA_NDIFF8
+		  || r_type == R_XTENSA_NDIFF16
+		  || r_type == R_XTENSA_NDIFF32)
 		{
 		  bfd_signed_vma diff_value = 0;
 		  bfd_vma new_end_offset, diff_mask = 0;
@@ -9620,19 +9683,45 @@ relax_section (bfd *abfd, asection *sec,
 		  switch (r_type)
 		    {
 		    case R_XTENSA_DIFF8:
+		      diff_mask = 0x7f;
 		      diff_value =
 			bfd_get_signed_8 (abfd, &contents[old_source_offset]);
 		      break;
 		    case R_XTENSA_DIFF16:
+		      diff_mask = 0x7fff;
 		      diff_value =
 			bfd_get_signed_16 (abfd, &contents[old_source_offset]);
 		      break;
 		    case R_XTENSA_DIFF32:
+		      diff_mask = 0x7fffffff;
 		      diff_value =
 			bfd_get_signed_32 (abfd, &contents[old_source_offset]);
 		      break;
+		    case R_XTENSA_PDIFF8:
+		    case R_XTENSA_NDIFF8:
+		      diff_mask = 0xff;
+		      diff_value =
+			bfd_get_8 (abfd, &contents[old_source_offset]);
+		      break;
+		    case R_XTENSA_PDIFF16:
+		    case R_XTENSA_NDIFF16:
+		      diff_mask = 0xffff;
+		      diff_value =
+			bfd_get_16 (abfd, &contents[old_source_offset]);
+		      break;
+		    case R_XTENSA_PDIFF32:
+		    case R_XTENSA_NDIFF32:
+		      diff_mask = 0xffffffff;
+		      diff_value =
+			bfd_get_32 (abfd, &contents[old_source_offset]);
+		      break;
 		    }
 
+		  if (r_type >= R_XTENSA_NDIFF8
+		      && r_type <= R_XTENSA_NDIFF32
+		      && diff_value)
+		    diff_value |= ~diff_mask;
+
 		  new_end_offset = offset_with_removed_text_map
 		    (&target_relax_info->action_list,
 		     r_rel.target_offset + diff_value);
@@ -9641,25 +9730,40 @@ relax_section (bfd *abfd, asection *sec,
 		  switch (r_type)
 		    {
 		    case R_XTENSA_DIFF8:
-		      diff_mask = 0x7f;
 		      bfd_put_signed_8 (abfd, diff_value,
 				 &contents[old_source_offset]);
 		      break;
 		    case R_XTENSA_DIFF16:
-		      diff_mask = 0x7fff;
 		      bfd_put_signed_16 (abfd, diff_value,
 				  &contents[old_source_offset]);
 		      break;
 		    case R_XTENSA_DIFF32:
-		      diff_mask = 0x7fffffff;
 		      bfd_put_signed_32 (abfd, diff_value,
 				  &contents[old_source_offset]);
 		      break;
+		    case R_XTENSA_PDIFF8:
+		    case R_XTENSA_NDIFF8:
+		      bfd_put_8 (abfd, diff_value,
+				 &contents[old_source_offset]);
+		      break;
+		    case R_XTENSA_PDIFF16:
+		    case R_XTENSA_NDIFF16:
+		      bfd_put_16 (abfd, diff_value,
+				  &contents[old_source_offset]);
+		      break;
+		    case R_XTENSA_PDIFF32:
+		    case R_XTENSA_NDIFF32:
+		      bfd_put_32 (abfd, diff_value,
+				  &contents[old_source_offset]);
+		      break;
 		    }
 
-		  /* Check for overflow. Sign bits must be all zeroes or all ones */
-		  if ((diff_value & ~diff_mask) != 0 &&
-		      (diff_value & ~diff_mask) != (-1 & ~diff_mask))
+		  /* Check for overflow. Sign bits must be all zeroes or
+		     all ones.  When sign bits are all ones diff_value
+		     may not be zero.  */
+		  if (((diff_value & ~diff_mask) != 0
+		       && (diff_value & ~diff_mask) != ~diff_mask)
+		      || (diff_value && (bfd_vma) diff_value == ~diff_mask))
 		    {
 		      (*link_info->callbacks->reloc_dangerous)
 			(link_info, _("overflow after relaxation"),
@@ -9689,7 +9793,7 @@ relax_section (bfd *abfd, asection *sec,
 		    new_reloc.target_offset + new_reloc.virtual_offset;
 		  fix = reloc_bfd_fix_init (sec, source_offset, r_type,
 					    target_sec,
-					    addend_displacement, TRUE);
+					    addend_displacement, true);
 		  add_fix (sec, fix);
 		}
 	    }
@@ -9731,7 +9835,7 @@ relax_section (bfd *abfd, asection *sec,
       for (action = action_first (&relax_info->action_list); action;
 	   action = action_next (&relax_info->action_list, action))
 	{
-	  virtual_action = FALSE;
+	  virtual_action = false;
 	  if (action->offset > orig_dot)
 	    {
 	      orig_dot += orig_dot_copied;
@@ -9773,7 +9877,7 @@ relax_section (bfd *abfd, asection *sec,
 		      orig_dot_copied = copy_size;
 		      dup_dot += copy_size;
 		    }
-		  virtual_action = TRUE;
+		  virtual_action = true;
 		}
 	      else
 		BFD_ASSERT (action->virtual_offset <= orig_dot_vo);
@@ -9909,7 +10013,7 @@ relax_section (bfd *abfd, asection *sec,
 }
 
 
-static bfd_boolean
+static bool
 translate_section_fixes (asection *sec)
 {
   xtensa_relax_info *relax_info;
@@ -9917,20 +10021,20 @@ translate_section_fixes (asection *sec)
 
   relax_info = get_xtensa_relax_info (sec);
   if (!relax_info)
-    return TRUE;
+    return true;
 
   for (r = relax_info->fix_list; r != NULL; r = r->next)
     if (!translate_reloc_bfd_fix (r))
-      return FALSE;
+      return false;
 
-  return TRUE;
+  return true;
 }
 
 
 /* Translate a fix given the mapping in the relax info for the target
    section.  If it has already been translated, no work is required.  */
 
-static bfd_boolean
+static bool
 translate_reloc_bfd_fix (reloc_bfd_fix *fix)
 {
   reloc_bfd_fix new_fix;
@@ -9940,7 +10044,7 @@ translate_reloc_bfd_fix (reloc_bfd_fix *
   bfd_vma new_offset, target_offset;
 
   if (fix->translated)
-    return TRUE;
+    return true;
 
   sec = fix->target_sec;
   target_offset = fix->target_offset;
@@ -9948,8 +10052,8 @@ translate_reloc_bfd_fix (reloc_bfd_fix *
   relax_info = get_xtensa_relax_info (sec);
   if (!relax_info)
     {
-      fix->translated = TRUE;
-      return TRUE;
+      fix->translated = true;
+      return true;
     }
 
   new_fix = *fix;
@@ -9958,8 +10062,8 @@ translate_reloc_bfd_fix (reloc_bfd_fix *
   if (!relax_info->is_relaxable_literal_section
       && !relax_info->is_relaxable_asm_section)
     {
-      fix->translated = TRUE;
-      return TRUE;
+      fix->translated = true;
+      return true;
     }
 
   /* If the literal has been moved and this relocation was on an
@@ -9967,7 +10071,7 @@ translate_reloc_bfd_fix (reloc_bfd_fix *
      location.  Otherwise, the relocation should move within the
      section.  */
 
-  removed = FALSE;
+  removed = false;
   if (is_operand_relocation (fix->src_type))
     {
       /* Check if the original relocation is against a literal being
@@ -9997,9 +10101,9 @@ translate_reloc_bfd_fix (reloc_bfd_fix *
 	      target_offset = removed->to.target_offset;
 	      new_fix.target_sec = new_sec;
 	      new_fix.target_offset = target_offset;
-	      new_fix.translated = TRUE;
+	      new_fix.translated = true;
 	      *fix = new_fix;
-	      return TRUE;
+	      return true;
 	    }
 	}
       target_offset = removed->to.target_offset;
@@ -10012,9 +10116,9 @@ translate_reloc_bfd_fix (reloc_bfd_fix *
 
   new_fix.target_offset = new_offset;
   new_fix.target_offset = new_offset;
-  new_fix.translated = TRUE;
+  new_fix.translated = true;
   *fix = new_fix;
-  return TRUE;
+  return true;
 }
 
 
@@ -10038,7 +10142,7 @@ translate_reloc (const r_reloc *orig_rel
 
   target_offset = orig_rel->target_offset;
 
-  removed = FALSE;
+  removed = false;
   if (is_operand_relocation (ELF32_R_TYPE (orig_rel->rela.r_info)))
     {
       /* Check if the original relocation is against a literal being
@@ -10081,9 +10185,9 @@ translate_reloc (const r_reloc *orig_rel
   if (base_offset <= target_offset)
     {
       int base_removed = removed_by_actions_map (&relax_info->action_list,
-						 base_offset, FALSE);
+						 base_offset, false);
       int addend_removed = removed_by_actions_map (&relax_info->action_list,
-						   target_offset, FALSE) -
+						   target_offset, false) -
 	base_removed;
 
       new_rel->target_offset = target_offset - base_removed - addend_removed;
@@ -10093,9 +10197,9 @@ translate_reloc (const r_reloc *orig_rel
     {
       /* Handle a negative addend.  The base offset comes first.  */
       int tgt_removed = removed_by_actions_map (&relax_info->action_list,
-						target_offset, FALSE);
+						target_offset, false);
       int addend_removed = removed_by_actions_map (&relax_info->action_list,
-						   base_offset, FALSE) -
+						   base_offset, false) -
 	tgt_removed;
 
       new_rel->target_offset = target_offset - tgt_removed;
@@ -10127,7 +10231,7 @@ shrink_dynamic_reloc_sections (struct bf
   unsigned long r_symndx;
   int r_type;
   struct elf_link_hash_entry *h;
-  bfd_boolean dynamic_symbol;
+  bool dynamic_symbol;
 
   htab = elf_xtensa_hash_table (info);
   if (htab == NULL)
@@ -10148,18 +10252,17 @@ shrink_dynamic_reloc_sections (struct bf
 
   if ((r_type == R_XTENSA_32 || r_type == R_XTENSA_PLT)
       && (input_section->flags & SEC_ALLOC) != 0
-      && (dynamic_symbol || bfd_link_pic (info))
-      && (!h || h->root.type != bfd_link_hash_undefweak
-	  || (dynamic_symbol
-	      && (bfd_link_dll (info) || info->export_dynamic))))
+      && (dynamic_symbol
+	  || (bfd_link_pic (info)
+	      && (!h || h->root.type != bfd_link_hash_undefweak))))
     {
       asection *srel;
-      bfd_boolean is_plt = FALSE;
+      bool is_plt = false;
 
       if (dynamic_symbol && r_type == R_XTENSA_PLT)
 	{
 	  srel = htab->elf.srelplt;
-	  is_plt = TRUE;
+	  is_plt = true;
 	}
       else
 	srel = htab->elf.srelgot;
@@ -10220,7 +10323,7 @@ shrink_dynamic_reloc_sections (struct bf
    appropriate address.  Contents and internal relocations for the
    section must be pinned after calling this routine.  */
 
-static bfd_boolean
+static bool
 move_literal (bfd *abfd,
 	      struct bfd_link_info *link_info,
 	      asection *sec,
@@ -10261,7 +10364,7 @@ move_literal (bfd *abfd,
       fix = reloc_bfd_fix_init (sec, offset, r_type,
 				r_reloc_get_section (r_rel),
 				r_rel->target_offset + r_rel->virtual_offset,
-				FALSE);
+				false);
       /* We also need to mark that relocations are needed here.  */
       sec->flags |= SEC_RELOC;
 
@@ -10296,7 +10399,7 @@ move_literal (bfd *abfd,
 	  new_relocs = (Elf_Internal_Rela *)
 	    bfd_zmalloc (sizeof (Elf_Internal_Rela) * (new_relocs_count));
 	  if (!new_relocs)
-	    return FALSE;
+	    return false;
 
 	  /* We could handle this more quickly by finding the split point.  */
 	  if (insert_at != 0)
@@ -10342,7 +10445,7 @@ move_literal (bfd *abfd,
 	    relax_info->relocs_count = sec->reloc_count;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -10351,7 +10454,7 @@ move_literal (bfd *abfd,
    algorithm does NOT allow for relocations into the middle of the
    property sections.  */
 
-static bfd_boolean
+static bool
 relax_property_section (bfd *abfd,
 			asection *sec,
 			struct bfd_link_info *link_info)
@@ -10359,8 +10462,8 @@ relax_property_section (bfd *abfd,
   Elf_Internal_Rela *internal_relocs;
   bfd_byte *contents;
   unsigned i;
-  bfd_boolean ok = TRUE;
-  bfd_boolean is_full_prop_section;
+  bool ok = true;
+  bool is_full_prop_section;
   size_t last_zfill_target_offset = 0;
   asection *last_zfill_target_sec = NULL;
   bfd_size_type sec_size;
@@ -10372,7 +10475,7 @@ relax_property_section (bfd *abfd,
   contents = retrieve_contents (abfd, sec, link_info->keep_memory);
   if (contents == NULL && sec_size != 0)
     {
-      ok = FALSE;
+      ok = false;
       goto error_return;
     }
 
@@ -10425,7 +10528,7 @@ relax_property_section (bfd *abfd,
 	      long old_size, new_size;
 	      int removed_by_old_offset =
 		removed_by_actions_map (&target_relax_info->action_list,
-					old_offset, FALSE);
+					old_offset, false);
 	      new_offset = old_offset - removed_by_old_offset;
 
 	      /* Assert that we are not out of bounds.  */
@@ -10452,7 +10555,7 @@ relax_property_section (bfd *abfd,
 			 include any fill inserted by relaxation.  */
 		      removed_by_old_offset =
 			removed_by_actions_map (&target_relax_info->action_list,
-						old_offset, TRUE);
+						old_offset, true);
 		      new_offset = old_offset - removed_by_old_offset;
 
 		      /* If it is not unreachable and we have not yet
@@ -10472,7 +10575,7 @@ relax_property_section (bfd *abfd,
 		{
 		  int removed_by_old_offset_size =
 		    removed_by_actions_map (&target_relax_info->action_list,
-					    old_offset + old_size, TRUE);
+					    old_offset + old_size, true);
 		  new_size -= removed_by_old_offset_size - removed_by_old_offset;
 		}
 
@@ -10524,7 +10627,7 @@ relax_property_section (bfd *abfd,
 	{
 	  Elf_Internal_Rela *offset_rel, *extra_rel;
 	  bfd_vma bytes_to_remove, size, actual_offset;
-	  bfd_boolean remove_this_rel;
+	  bool remove_this_rel;
 	  flagword flags;
 
 	  /* Find the first relocation for the entry at the current offset.
@@ -10593,7 +10696,7 @@ relax_property_section (bfd *abfd,
 	  else
 	    next_rel = NULL;
 
-	  remove_this_rel = FALSE;
+	  remove_this_rel = false;
 	  bytes_to_remove = 0;
 	  actual_offset = offset - removed_bytes;
 	  size = bfd_get_32 (abfd, &contents[actual_offset + 4]);
@@ -10610,7 +10713,7 @@ relax_property_section (bfd *abfd,
 	      /* Always remove entries with zero size and no alignment.  */
 	      bytes_to_remove = entry_size;
 	      if (offset_rel)
-		remove_this_rel = TRUE;
+		remove_this_rel = true;
 	    }
 	  else if (offset_rel
 		   && ELF32_R_TYPE (offset_rel->r_info) == R_XTENSA_32)
@@ -10643,7 +10746,7 @@ relax_property_section (bfd *abfd,
 		      bfd_put_32 (abfd, old_size + size,
 				  &contents[last_irel->r_offset + 4]);
 		      bytes_to_remove = entry_size;
-		      remove_this_rel = TRUE;
+		      remove_this_rel = true;
 		    }
 		  else
 		    last_irel = offset_rel;
@@ -10701,7 +10804,7 @@ relax_property_section (bfd *abfd,
 
 /* Change symbol values to account for removed literals.  */
 
-bfd_boolean
+bool
 relax_section_symbols (bfd *abfd, asection *sec)
 {
   xtensa_relax_info *relax_info;
@@ -10715,7 +10818,7 @@ relax_section_symbols (bfd *abfd, asecti
 
   if (!relax_info->is_relaxable_literal_section
       && !relax_info->is_relaxable_asm_section)
-    return TRUE;
+    return true;
 
   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
 
@@ -10734,13 +10837,13 @@ relax_section_symbols (bfd *abfd, asecti
 	{
 	  bfd_vma orig_addr = isym->st_value;
 	  int removed = removed_by_actions_map (&relax_info->action_list,
-						orig_addr, FALSE);
+						orig_addr, false);
 
 	  isym->st_value -= removed;
 	  if (ELF32_ST_TYPE (isym->st_info) == STT_FUNC)
 	    isym->st_size -=
 	      removed_by_actions_map (&relax_info->action_list,
-				      orig_addr + isym->st_size, FALSE) -
+				      orig_addr + isym->st_size, false) -
 	      removed;
 	}
     }
@@ -10761,25 +10864,25 @@ relax_section_symbols (bfd *abfd, asecti
 	{
 	  bfd_vma orig_addr = sym_hash->root.u.def.value;
 	  int removed = removed_by_actions_map (&relax_info->action_list,
-						orig_addr, FALSE);
+						orig_addr, false);
 
 	  sym_hash->root.u.def.value -= removed;
 
 	  if (sym_hash->type == STT_FUNC)
 	    sym_hash->size -=
 	      removed_by_actions_map (&relax_info->action_list,
-				      orig_addr + sym_hash->size, FALSE) -
+				      orig_addr + sym_hash->size, false) -
 	      removed;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
 /* "Fix" handling functions, called while performing relocations.  */
 
-static bfd_boolean
+static bool
 do_fix_for_relocatable_link (Elf_Internal_Rela *rel,
 			     bfd *input_bfd,
 			     asection *input_section,
@@ -10792,11 +10895,11 @@ do_fix_for_relocatable_link (Elf_Interna
   reloc_bfd_fix *fix;
 
   if (r_type == R_XTENSA_NONE)
-    return TRUE;
+    return true;
 
   fix = get_bfd_fix (input_section, rel->r_offset, r_type);
   if (!fix)
-    return TRUE;
+    return true;
 
   r_reloc_init (&r_rel, input_bfd, rel, contents,
 		bfd_get_section_limit (input_bfd, input_section));
@@ -10812,7 +10915,7 @@ do_fix_for_relocatable_link (Elf_Interna
 	    (_("%pB(%pA+%#" PRIx64 "): unexpected fix for %s relocation"),
 	     input_bfd, input_section, (uint64_t) rel->r_offset,
 	     elf_howto_table[r_type].name);
-	  return FALSE;
+	  return false;
 	}
       /* Leave it be.  Resolution will happen in a later stage.  */
     }
@@ -10822,7 +10925,7 @@ do_fix_for_relocatable_link (Elf_Interna
       rel->r_addend += ((sec->output_offset + fix->target_offset)
 			- (old_sec->output_offset + old_offset));
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -11006,7 +11109,7 @@ get_elf_r_symndx_offset (bfd *abfd, unsi
 }
 
 
-static bfd_boolean
+static bool
 is_reloc_sym_weak (bfd *abfd, Elf_Internal_Rela *rel)
 {
   unsigned long r_symndx = ELF32_R_SYM (rel->r_info);
@@ -11014,12 +11117,12 @@ is_reloc_sym_weak (bfd *abfd, Elf_Intern
 
   h = get_elf_r_symndx_hash_entry (abfd, r_symndx);
   if (h && h->root.type == bfd_link_hash_defweak)
-    return TRUE;
-  return FALSE;
+    return true;
+  return false;
 }
 
 
-static bfd_boolean
+static bool
 pcrel_reloc_fits (xtensa_opcode opc,
 		  int opnd,
 		  bfd_vma self_address,
@@ -11029,53 +11132,53 @@ pcrel_reloc_fits (xtensa_opcode opc,
   uint32 valp = dest_address;
   if (xtensa_operand_do_reloc (isa, opc, opnd, &valp, self_address)
       || xtensa_operand_encode (isa, opc, opnd, &valp))
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 xtensa_is_property_section (asection *sec)
 {
   if (xtensa_is_insntable_section (sec)
       || xtensa_is_littable_section (sec)
       || xtensa_is_proptable_section (sec))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 
-static bfd_boolean
+static bool
 xtensa_is_insntable_section (asection *sec)
 {
-  if (CONST_STRNEQ (sec->name, XTENSA_INSN_SEC_NAME)
-      || CONST_STRNEQ (sec->name, ".gnu.linkonce.x."))
-    return TRUE;
+  if (startswith (sec->name, XTENSA_INSN_SEC_NAME)
+      || startswith (sec->name, ".gnu.linkonce.x."))
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 
-static bfd_boolean
+static bool
 xtensa_is_littable_section (asection *sec)
 {
-  if (CONST_STRNEQ (sec->name, XTENSA_LIT_SEC_NAME)
-      || CONST_STRNEQ (sec->name, ".gnu.linkonce.p."))
-    return TRUE;
+  if (startswith (sec->name, XTENSA_LIT_SEC_NAME)
+      || startswith (sec->name, ".gnu.linkonce.p."))
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 
-static bfd_boolean
+static bool
 xtensa_is_proptable_section (asection *sec)
 {
-  if (CONST_STRNEQ (sec->name, XTENSA_PROP_SEC_NAME)
-      || CONST_STRNEQ (sec->name, ".gnu.linkonce.prop."))
-    return TRUE;
+  if (startswith (sec->name, XTENSA_PROP_SEC_NAME)
+      || startswith (sec->name, ".gnu.linkonce.prop."))
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 
@@ -11116,7 +11219,7 @@ internal_reloc_matches (const void *ap,
 
 /* Predicate function used to look up a section in a particular group.  */
 
-static bfd_boolean
+static bool
 match_section_group (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf)
 {
   const char *gname = inf;
@@ -11152,7 +11255,7 @@ static int linkonce_len = sizeof (".gnu.
 
 static char *
 xtensa_property_section_name (asection *sec, const char *base_name,
-			      bfd_boolean separate_sections)
+			      bool separate_sections)
 {
   const char *suffix, *group_name;
   char *prop_sec_name;
@@ -11165,7 +11268,7 @@ xtensa_property_section_name (asection *
 	suffix = 0;
       prop_sec_name = xtensa_add_names (base_name, suffix);
     }
-  else if (strncmp (sec->name, ".gnu.linkonce.", linkonce_len) == 0)
+  else if (startswith (sec->name, ".gnu.linkonce."))
     {
       char *linkonce_kind = 0;
 
@@ -11186,7 +11289,7 @@ xtensa_property_section_name (asection *
       suffix = sec->name + linkonce_len;
       /* For backward compatibility, replace "t." instead of inserting
 	 the new linkonce_kind (but not for "prop" sections).  */
-      if (CONST_STRNEQ (suffix, "t.") && linkonce_kind[1] == '.')
+      if (startswith (suffix, "t.") && linkonce_kind[1] == '.')
 	suffix += 2;
       strcat (prop_sec_name + linkonce_len, suffix);
     }
@@ -11202,7 +11305,7 @@ xtensa_property_section_name (asection *
 
 static asection *
 xtensa_get_separate_property_section (asection *sec, const char *base_name,
-				      bfd_boolean separate_section)
+				      bool separate_section)
 {
   char *prop_sec_name;
   asection *prop_sec;
@@ -11222,11 +11325,11 @@ xtensa_get_property_section (asection *s
   asection *prop_sec;
 
   /* Try individual property section first.  */
-  prop_sec = xtensa_get_separate_property_section (sec, base_name, TRUE);
+  prop_sec = xtensa_get_separate_property_section (sec, base_name, true);
 
   /* Refer to a common property section if individual is not present.  */
   if (!prop_sec)
-    prop_sec = xtensa_get_separate_property_section (sec, base_name, FALSE);
+    prop_sec = xtensa_get_separate_property_section (sec, base_name, false);
 
   return prop_sec;
 }
@@ -11283,7 +11386,7 @@ xtensa_get_property_predef_flags (asecti
 
 /* Other functions called directly by the linker.  */
 
-bfd_boolean
+bool
 xtensa_callback_required_dependence (bfd *abfd,
 				     asection *sec,
 				     struct bfd_link_info *link_info,
@@ -11293,7 +11396,7 @@ xtensa_callback_required_dependence (bfd
   Elf_Internal_Rela *internal_relocs;
   bfd_byte *contents;
   unsigned i;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
   bfd_size_type sec_size;
 
   sec_size = bfd_get_section_limit (abfd, sec);
@@ -11301,7 +11404,7 @@ xtensa_callback_required_dependence (bfd
   /* ".plt*" sections have no explicit relocations but they contain L32R
      instructions that reference the corresponding ".got.plt*" sections.  */
   if ((sec->flags & SEC_LINKER_CREATED) != 0
-      && CONST_STRNEQ (sec->name, ".plt"))
+      && startswith (sec->name, ".plt"))
     {
       asection *sgotplt;
 
@@ -11342,7 +11445,7 @@ xtensa_callback_required_dependence (bfd
   contents = retrieve_contents (abfd, sec, link_info->keep_memory);
   if (contents == NULL && sec_size != 0)
     {
-      ok = FALSE;
+      ok = false;
       goto error_return;
     }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-z80.c ./bfd/elf32-z80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf32-z80.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elf32-z80.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,632 @@
+/* Zilog (e)Z80-specific support for 32-bit ELF
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
+   (Heavily copied from the S12Z port by Sergey Belyashov (sergey.belyashov@gmail.com))
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+
+#include "elf/z80.h"
+
+/* All users of this file have bfd_octets_per_byte (abfd, sec) == 1.  */
+#define OCTETS_PER_BYTE(ABFD, SEC) 1
+
+typedef const struct {
+  bfd_reloc_code_real_type r_type;
+  reloc_howto_type howto;
+} bfd_howto_type;
+
+#define BFD_EMPTY_HOWTO(rt,x) {rt, EMPTY_HOWTO(x)}
+#define BFD_HOWTO(rt,a,b,c,d,e,f,g,h,i,j,k,l,m) {rt, HOWTO(a,b,c,d,e,f,g,h,i,j,k,l,m)}
+
+static bfd_reloc_status_type
+z80_elf_16_be_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+		     void *data, asection *input_section, bfd *output_bfd,
+		     char **error_message);
+
+static const
+bfd_howto_type elf_z80_howto_table[] =
+{
+  /* This reloc does nothing.  */
+  BFD_HOWTO (BFD_RELOC_NONE,
+	 R_Z80_NONE,		/* type */
+	 0,			/* rightshift */
+	 0,			/* size */
+	 0,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_NONE",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* A 8 bit relocation */
+  BFD_HOWTO (BFD_RELOC_8,
+	 R_Z80_8,		/* type */
+	 0,			/* rightshift */
+	 1,			/* size */
+	 8,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_imm8",		/* name */
+	 false,			/* partial_inplace */
+	 0x00,			/* src_mask */
+	 0xff,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* A 8 bit index register displacement relocation */
+  BFD_HOWTO (BFD_RELOC_Z80_DISP8,
+	 R_Z80_8_DIS,		/* type */
+	 0,			/* rightshift */
+	 1,			/* size */
+	 8,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_off",		/* name */
+	 false,			/* partial_inplace */
+	 0x00,			/* src_mask */
+	 0xff,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* A 8 bit PC-rel relocation */
+  BFD_HOWTO (BFD_RELOC_8_PCREL,
+	 R_Z80_8_PCREL,		/* type */
+	 0,			/* rightshift */
+	 1,			/* size */
+	 8,			/* bitsize */
+	 true,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_jr",		/* name */
+	 false,			/* partial_inplace */
+	 0x00,			/* src_mask */
+	 0xff,			/* dst_mask */
+	 true),			/* pcrel_offset */
+
+  /* An 16 bit absolute relocation */
+  BFD_HOWTO (BFD_RELOC_16,
+	 R_Z80_16,		/* type */
+	 0,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_imm16",		/* name */
+	 false,			/* partial_inplace */
+	 0x00000000,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* A 24 bit absolute relocation emitted by ADL mode operands */
+  BFD_HOWTO (BFD_RELOC_24,
+	 R_Z80_24,		/* type */
+	 0,			/* rightshift */
+	 3,			/* size */
+	 24,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_imm24",		/* name */
+	 false,			/* partial_inplace */
+	 0x00000000,		/* src_mask */
+	 0x00ffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_32,
+	 R_Z80_32,		/* type */
+	 0,			/* rightshift */
+	 4,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_imm32",		/* name */
+	 false,			/* partial_inplace */
+	 0x00000000,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* First (lowest) 8 bits of multibyte relocation */
+  BFD_HOWTO (BFD_RELOC_Z80_BYTE0,
+	 R_Z80_BYTE0,		/* type */
+	 0,			/* rightshift */
+	 1,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_byte0",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xff,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* Second 8 bits of multibyte relocation */
+  BFD_HOWTO (BFD_RELOC_Z80_BYTE1,
+	 R_Z80_BYTE1,		/* type */
+	 8,			/* rightshift */
+	 1,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_byte1",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xff,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* Third 8 bits of multibyte relocation */
+  BFD_HOWTO (BFD_RELOC_Z80_BYTE2,
+	 R_Z80_BYTE2,		/* type */
+	 16,			/* rightshift */
+	 1,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_byte2",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xff,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* Fourth (highest) 8 bits of multibyte relocation */
+  BFD_HOWTO (BFD_RELOC_Z80_BYTE3,
+	 R_Z80_BYTE3,		/* type */
+	 24,			/* rightshift */
+	 1,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_byte3",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xff,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* An 16 bit absolute relocation of lower word of multibyte value */
+  BFD_HOWTO (BFD_RELOC_Z80_WORD0,
+	 R_Z80_WORD0,		/* type */
+	 0,			/* rightshift */
+	 2,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_word0",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* An 16 bit absolute relocation of higher word of multibyte value */
+  BFD_HOWTO (BFD_RELOC_Z80_WORD1,
+	 R_Z80_WORD1,		/* type */
+	 16,			/* rightshift */
+	 2,			/* size */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "r_word1",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* An 16 bit big endian absolute relocation */
+  BFD_HOWTO (BFD_RELOC_Z80_16_BE,
+	 R_Z80_16_BE,		/* type */
+	 0,			/* rightshift */
+	 2,			/* size */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 z80_elf_16_be_reloc,	/* special_function */
+	 "r_imm16be",		/* name */
+	 false,			/* partial_inplace */
+	 0x00000000,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+};
+
+static reloc_howto_type *
+z80_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+		       bfd_reloc_code_real_type code)
+{
+  enum
+    {
+      table_size = sizeof (elf_z80_howto_table) / sizeof (elf_z80_howto_table[0])
+    };
+  unsigned int i;
+
+  for (i = 0; i < table_size; i++)
+    {
+      if (elf_z80_howto_table[i].r_type == code)
+	  return &elf_z80_howto_table[i].howto;
+    }
+
+  printf ("%s:%d Not found BFD reloc type %d\n", __FILE__, __LINE__, code);
+
+  return NULL;
+}
+
+static reloc_howto_type *
+z80_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+  enum
+    {
+      table_size = sizeof (elf_z80_howto_table) / sizeof (elf_z80_howto_table[0])
+    };
+  unsigned int i;
+
+  for (i = 0; i < table_size; i++)
+    {
+      if (elf_z80_howto_table[i].howto.name != NULL
+	  && strcasecmp (elf_z80_howto_table[i].howto.name, r_name) == 0)
+	return &elf_z80_howto_table[i].howto;
+    }
+
+  printf ("%s:%d Not found ELF reloc name `%s'\n", __FILE__, __LINE__, r_name);
+
+  return NULL;
+}
+
+static reloc_howto_type *
+z80_rtype_to_howto (bfd *abfd, unsigned r_type)
+{
+  enum
+    {
+      table_size = sizeof (elf_z80_howto_table) / sizeof (elf_z80_howto_table[0])
+    };
+  unsigned int i;
+
+  for (i = 0; i < table_size; i++)
+    {
+      if (elf_z80_howto_table[i].howto.type == r_type)
+	  return &elf_z80_howto_table[i].howto;
+    }
+
+  /* xgettext:c-format */
+  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+		      abfd, r_type);
+  return NULL;
+} 
+
+/* Set the howto pointer for an z80 ELF reloc.  */
+
+static bool
+z80_info_to_howto_rela (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
+{
+  unsigned int  r_type = ELF32_R_TYPE (dst->r_info);
+  reloc_howto_type *howto = z80_rtype_to_howto (abfd, r_type);
+  if (howto != NULL)
+    {
+      cache_ptr->howto = howto;
+      return true;
+    }
+  bfd_set_error (bfd_error_bad_value);
+  return false;
+}
+
+static bfd_reloc_status_type
+z80_elf_final_link_relocate (unsigned long r_type,
+			     bfd *input_bfd,
+			     bfd *output_bfd ATTRIBUTE_UNUSED,
+			     asection *input_section ATTRIBUTE_UNUSED,
+			     bfd_byte *contents,
+			     bfd_vma offset,
+			     bfd_vma value,
+			     bfd_vma addend,
+			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			     asection *sym_sec ATTRIBUTE_UNUSED,
+			     int is_local ATTRIBUTE_UNUSED)
+{
+  bool r;
+  reloc_howto_type *howto;
+
+  switch (r_type)
+    {
+    case R_Z80_16_BE:
+      value += addend;
+      bfd_put_8 (input_bfd, value >> 8, contents + offset + 0);
+      bfd_put_8 (input_bfd, value >> 0, contents + offset + 1);
+      return bfd_reloc_ok;
+    }
+
+  howto = z80_rtype_to_howto (input_bfd, r_type);
+  if (howto == NULL)
+    return bfd_reloc_notsupported;
+
+  r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents,
+				offset, value, addend);
+  return r ? bfd_reloc_ok : bfd_reloc_notsupported;
+}
+
+static int
+z80_elf_relocate_section (bfd *output_bfd,
+			  struct bfd_link_info *info,
+			  bfd *input_bfd,
+			  asection *input_section,
+			  bfd_byte *contents,
+			  Elf_Internal_Rela *relocs,
+			  Elf_Internal_Sym *local_syms,
+			  asection **local_sections)
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  Elf_Internal_Rela *rel, *relend;
+
+  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (input_bfd);
+
+  rel = relocs;
+  relend = relocs + input_section->reloc_count;
+  for (; rel < relend; rel++)
+    {
+      unsigned int r_type;
+      unsigned long r_symndx;
+      Elf_Internal_Sym *sym;
+      asection *sec;
+      struct elf_link_hash_entry *h;
+      bfd_vma relocation;
+
+      /* This is a final link.  */
+      r_symndx = ELF32_R_SYM (rel->r_info);
+      r_type = ELF32_R_TYPE (rel->r_info);
+      h = NULL;
+      sym = NULL;
+      sec = NULL;
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  sym = local_syms + r_symndx;
+	  sec = local_sections[r_symndx];
+	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+	}
+      else
+	{
+	  bool unresolved_reloc, warned, ignored;
+
+	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+				   r_symndx, symtab_hdr, sym_hashes,
+				   h, sec, relocation,
+				   unresolved_reloc, warned, ignored);
+	}
+
+      if (sec != NULL && discarded_section (sec))
+	{
+	  /* For relocs against symbols from removed linkonce sections,
+	     or sections discarded by a linker script, we just want the
+	     section contents cleared.  Avoid any special processing.  */
+	  reloc_howto_type *howto;
+	  howto = z80_rtype_to_howto (input_bfd, r_type);
+	  RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+					   rel, 1, relend, howto, 0, contents);
+	}
+
+      if (bfd_link_relocatable (info))
+	continue;
+
+
+      z80_elf_final_link_relocate (r_type, input_bfd, output_bfd,
+				   input_section,
+				   contents, rel->r_offset,
+				   relocation, rel->r_addend,
+				   info, sec, h == NULL);
+    }
+
+  return true;
+}
+
+/* The final processing done just before writing out a Z80 ELF object
+   file.  This gets the Z80 architecture right based on the machine
+   number.  */
+
+static bool
+z80_elf_final_write_processing (bfd *abfd)
+{
+  unsigned long val = bfd_get_mach (abfd);
+
+  switch (val)
+    {
+    default:
+      _bfd_error_handler (_("%pB: unsupported bfd mach %#lx"),
+			  abfd, val);
+      /* fall through */
+    case bfd_mach_z80:
+    case bfd_mach_z80full:
+    case bfd_mach_z80strict:
+      val = EF_Z80_MACH_Z80;
+      break;
+    case bfd_mach_gbz80:
+      val = EF_Z80_MACH_GBZ80;
+      break;
+    case bfd_mach_z80n:
+      val = EF_Z80_MACH_Z80N;
+      break;
+    case bfd_mach_z180:
+      val = EF_Z80_MACH_Z180;
+      break;
+    case bfd_mach_ez80_z80:
+      val = EF_Z80_MACH_EZ80_Z80;
+      break;
+    case bfd_mach_ez80_adl:
+      val = EF_Z80_MACH_EZ80_ADL;
+      break;
+    case bfd_mach_r800:
+      val = EF_Z80_MACH_R800;
+      break;
+    }
+  elf_elfheader (abfd)->e_machine = EM_Z80;
+  elf_elfheader (abfd)->e_flags &= ~EF_Z80_MACH_MSK;
+  elf_elfheader (abfd)->e_flags |= val;
+  return _bfd_elf_final_write_processing (abfd);
+}
+
+/* Set the right machine number.  */
+static bool
+z80_elf_object_p (bfd *abfd)
+{
+  unsigned int mach;
+
+  if (elf_elfheader (abfd)->e_machine == EM_Z80)
+    {
+      int e_mach = elf_elfheader (abfd)->e_flags & EF_Z80_MACH_MSK;
+      switch (e_mach)
+	{
+	default:
+	  _bfd_error_handler (_("%pB: unsupported mach %#x"),
+			      abfd, e_mach);
+	  /* fall through */
+	case EF_Z80_MACH_Z80:
+	  mach = bfd_mach_z80;
+	  break;
+	case EF_Z80_MACH_GBZ80:
+	  mach = bfd_mach_gbz80;
+	  break;
+	case EF_Z80_MACH_Z180:
+	  mach = bfd_mach_z180;
+	  break;
+	case EF_Z80_MACH_EZ80_Z80:
+	  mach = bfd_mach_ez80_z80;
+	  break;
+	case EF_Z80_MACH_EZ80_ADL:
+	  mach = bfd_mach_ez80_adl;
+	  break;
+	case EF_Z80_MACH_R800:
+	  mach = bfd_mach_r800;
+	  break;
+	case EF_Z80_MACH_Z80N:
+	  mach = bfd_mach_z80n;
+	  break;
+	}
+    }
+  else
+    {
+      _bfd_error_handler (_("%pB: unsupported arch %#x"),
+			  abfd, elf_elfheader (abfd)->e_machine);
+      mach = bfd_mach_z80;
+    }
+  return bfd_default_set_arch_mach (abfd, bfd_arch_z80, mach);
+}
+
+static bool
+z80_is_local_label_name (bfd *	abfd ATTRIBUTE_UNUSED,
+			 const char * name)
+{
+  return (name[0] == '.' && name[1] == 'L') ||
+	 _bfd_elf_is_local_label_name (abfd, name);
+}
+
+static bfd_reloc_status_type
+z80_elf_16_be_reloc (bfd *abfd,
+		     arelent *reloc_entry,
+		     asymbol *symbol,
+		     void *data,
+		     asection *input_section,
+		     bfd *output_bfd,
+		     char **error_message)
+{
+  bfd_vma val;
+  long x;
+  bfd_size_type octets = (reloc_entry->address
+			  * OCTETS_PER_BYTE (abfd, input_section));
+
+  /* If this is a relocatable link (output_bfd test tells us), just
+     call the generic function.  Any adjustment will be done at final
+     link time.  */
+  if (output_bfd != NULL)
+    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
+				  input_section, output_bfd, error_message);
+
+  /* Get symbol value.  */
+  val = 0;
+  if (!bfd_is_com_section (symbol->section))
+    val = symbol->value;
+  val += symbol->section->output_offset + input_section->output_offset;
+  if (symbol->section->output_section)
+    val += symbol->section->output_section->vma;
+
+  val += reloc_entry->addend;
+  if (reloc_entry->howto->partial_inplace)
+    {
+      x = bfd_get_8 (abfd, (bfd_byte *) data + octets + 0) * 0x100;
+      x += bfd_get_8 (abfd, (bfd_byte *) data + octets + 1);
+      x &= ~reloc_entry->howto->src_mask;
+    }
+  else
+    x = 0;
+
+  x |= val & reloc_entry->howto->dst_mask;
+  if (x < -0x8000 || x >= 0x10000)
+    return bfd_reloc_outofrange;
+
+  bfd_put_8 (abfd, x >> 8, (bfd_byte *) data + octets + 0);
+  bfd_put_8 (abfd, x >> 0, (bfd_byte *) data + octets + 1);
+  return bfd_reloc_ok;
+}
+
+#define ELF_ARCH		bfd_arch_z80
+#define ELF_MACHINE_CODE	EM_Z80
+#define ELF_MAXPAGESIZE		0x10000
+
+#define TARGET_LITTLE_SYM		z80_elf32_vec
+#define TARGET_LITTLE_NAME		"elf32-z80"
+
+#define elf_backend_can_refcount		1
+#define elf_backend_can_gc_sections		1
+#define elf_backend_stack_align			1
+#define elf_backend_rela_normal			1
+
+#define elf_info_to_howto			z80_info_to_howto_rela
+#define elf_info_to_howto_rel			z80_info_to_howto_rela
+
+#define elf_backend_final_write_processing	z80_elf_final_write_processing
+#define elf_backend_object_p			z80_elf_object_p
+#define elf_backend_relocate_section		z80_elf_relocate_section
+
+#define bfd_elf32_bfd_reloc_type_lookup		z80_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup		z80_reloc_name_lookup
+#define bfd_elf32_bfd_is_local_label_name	z80_is_local_label_name
+
+#include "elf32-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-alpha.c ./bfd/elf64-alpha.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-alpha.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-alpha.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Alpha specific support for 64-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Contributed by Richard Henderson <rth@tamu.edu>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -52,11 +52,11 @@
 
 /* Instruction data for plt generation and relaxation.  */
 
-#define OP_LDA		0x08
-#define OP_LDAH		0x09
-#define OP_LDQ		0x29
-#define OP_BR		0x30
-#define OP_BSR		0x34
+#define OP_LDA		0x08U
+#define OP_LDAH		0x09U
+#define OP_LDQ		0x29U
+#define OP_BR		0x30U
+#define OP_BSR		0x34U
 
 #define INSN_LDA	(OP_LDA << 26)
 #define INSN_LDAH	(OP_LDAH << 26)
@@ -73,20 +73,20 @@
 #define INSN_JMP	0x68000000
 #define INSN_JSR_MASK	0xfc00c000
 
-#define INSN_A(I,A)		(I | (A << 21))
-#define INSN_AB(I,A,B)		(I | (A << 21) | (B << 16))
-#define INSN_ABC(I,A,B,C)	(I | (A << 21) | (B << 16) | C)
-#define INSN_ABO(I,A,B,O)	(I | (A << 21) | (B << 16) | ((O) & 0xffff))
-#define INSN_AD(I,A,D)		(I | (A << 21) | (((D) >> 2) & 0x1fffff))
+#define INSN_A(I,A)		(I | ((unsigned) A << 21))
+#define INSN_AB(I,A,B)		(INSN_A (I, A) | (B << 16))
+#define INSN_ABC(I,A,B,C)	(INSN_A (I, A) | (B << 16) | C)
+#define INSN_ABO(I,A,B,O)	(INSN_A (I, A) | (B << 16) | ((O) & 0xffff))
+#define INSN_AD(I,A,D)		(INSN_A (I, A) | (((D) >> 2) & 0x1fffff))
 
 /* PLT/GOT Stuff */
 
 /* Set by ld emulation.  Putting this into the link_info or hash structure
    is simply working too hard.  */
 #ifdef USE_SECUREPLT
-bfd_boolean elf64_alpha_use_secureplt = TRUE;
+bool elf64_alpha_use_secureplt = true;
 #else
-bfd_boolean elf64_alpha_use_secureplt = FALSE;
+bool elf64_alpha_use_secureplt = false;
 #endif
 
 #define OLD_PLT_HEADER_SIZE	32
@@ -144,14 +144,14 @@ struct alpha_elf_reloc_entry
   /* Which .reloc section? */
   asection *srel;
 
-  /* What kind of relocation? */
-  unsigned int rtype;
-
-  /* Is this against read-only section? */
-  unsigned int reltext : 1;
+  /* Which section this relocation is against? */
+  asection *sec;
 
   /* How many did we find?  */
   unsigned long count;
+
+  /* What kind of relocation? */
+  unsigned int rtype;
 };
 
 struct alpha_elf_link_hash_entry
@@ -210,14 +210,15 @@ struct alpha_elf_link_hash_table
 #define alpha_elf_link_hash_traverse(table, func, info)			\
   (elf_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the Alpha ELF linker hash table from a link_info structure.  */
 
 #define alpha_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == ALPHA_ELF_DATA ? ((struct alpha_elf_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == ALPHA_ELF_DATA)	\
+   ? (struct alpha_elf_link_hash_table *) (p)->hash : NULL)
 
 /* Get the object's symbols as our own entry type.  */
 
@@ -229,7 +230,7 @@ struct alpha_elf_link_hash_table
    equality wrt PLT entries -- we don't create a PLT entry if a symbol's
    address is ever taken.  */
 
-static inline bfd_boolean
+static inline bool
 alpha_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
 			    struct bfd_link_info *info)
 {
@@ -280,7 +281,7 @@ static struct bfd_link_hash_table *
 elf64_alpha_bfd_link_hash_table_create (bfd *abfd)
 {
   struct alpha_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct alpha_elf_link_hash_table);
+  size_t amt = sizeof (struct alpha_elf_link_hash_table);
 
   ret = (struct alpha_elf_link_hash_table *) bfd_zmalloc (amt);
   if (ret == (struct alpha_elf_link_hash_table *) NULL)
@@ -350,14 +351,14 @@ struct alpha_elf_obj_tdata
    && elf_tdata (bfd) != NULL \
    && elf_object_id (bfd) == ALPHA_ELF_DATA)
 
-static bfd_boolean
+static bool
 elf64_alpha_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct alpha_elf_obj_tdata),
 				  ALPHA_ELF_DATA);
 }
 
-static bfd_boolean
+static bool
 elf64_alpha_object_p (bfd *abfd)
 {
   /* Set the right machine number for an Alpha ELF file.  */
@@ -487,79 +488,79 @@ static reloc_howto_type elf64_alpha_howt
 {
   HOWTO (R_ALPHA_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 elf64_alpha_reloc_nil,	/* special_function */
 	 "NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 32 bit reference to a symbol.  */
   HOWTO (R_ALPHA_REFLONG,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "REFLONG",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 64 bit reference to a symbol.  */
   HOWTO (R_ALPHA_REFQUAD,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "REFQUAD",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit GP relative offset.  This is just like REFLONG except
      that when the value is used the value of the gp register will be
      added in.  */
   HOWTO (R_ALPHA_GPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "GPREL32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Used for an instruction that refers to memory off the GP register.  */
   HOWTO (R_ALPHA_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "ELF_LITERAL",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* This reloc only appears immediately following an ELF_LITERAL reloc.
      It identifies a use of the literal.  The symbol index is special:
@@ -570,17 +571,17 @@ static reloc_howto_type elf64_alpha_howt
      This does not actually do any relocation.  */
   HOWTO (R_ALPHA_LITUSE,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 elf64_alpha_reloc_nil,	/* special_function */
 	 "LITUSE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Load the gp register.  This is always used for a ldah instruction
      which loads the upper 16 bits of the gp register.  The symbol
@@ -600,92 +601,92 @@ static reloc_howto_type elf64_alpha_howt
      in the GPDISP_HI16 reloc.  */
   HOWTO (R_ALPHA_GPDISP,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 elf64_alpha_reloc_gpdisp, /* special_function */
 	 "GPDISP",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 21 bit branch.  */
   HOWTO (R_ALPHA_BRADDR,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "BRADDR",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A hint for a jump to a register.  */
   HOWTO (R_ALPHA_HINT,		/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 14,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "HINT",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x3fff,		/* src_mask */
 	 0x3fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit PC relative offset.  */
   HOWTO (R_ALPHA_SREL16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "SREL16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 32 bit PC relative offset.  */
   HOWTO (R_ALPHA_SREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "SREL32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 64 bit PC relative offset.  */
   HOWTO (R_ALPHA_SREL64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "SREL64",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Skip 12 - 16; deprecated ECOFF relocs.  */
   SKIP_HOWTO (12),
@@ -697,47 +698,47 @@ static reloc_howto_type elf64_alpha_howt
   /* The high 16 bits of the displacement from GP to the target.  */
   HOWTO (R_ALPHA_GPRELHIGH,
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "GPRELHIGH",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The low 16 bits of the displacement from GP to the target.  */
   HOWTO (R_ALPHA_GPRELLOW,
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "GPRELLOW",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16-bit displacement from the GP to the target.  */
   HOWTO (R_ALPHA_GPREL16,
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "GPREL16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Skip 20 - 23; deprecated ECOFF relocs.  */
   SKIP_HOWTO (20),
@@ -755,272 +756,272 @@ static reloc_howto_type elf64_alpha_howt
 	 0,
 	 0,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "COPY",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 TRUE),
+	 true),
 
   /* A dynamic relocation for a .got entry.  */
   HOWTO (R_ALPHA_GLOB_DAT,
 	 0,
 	 0,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "GLOB_DAT",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 TRUE),
+	 true),
 
   /* A dynamic relocation for a .plt entry.  */
   HOWTO (R_ALPHA_JMP_SLOT,
 	 0,
 	 0,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "JMP_SLOT",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 TRUE),
+	 true),
 
   /* A dynamic relocation to add the base of the DSO to a 64-bit field.  */
   HOWTO (R_ALPHA_RELATIVE,
 	 0,
 	 0,
 	 0,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "RELATIVE",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 TRUE),
+	 true),
 
   /* A 21 bit branch that adjusts for gp loads.  */
   HOWTO (R_ALPHA_BRSGP,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "BRSGP",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Creates a tls_index for the symbol in the got.  */
   HOWTO (R_ALPHA_TLSGD,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "TLSGD",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Creates a tls_index for the (current) module in the got.  */
   HOWTO (R_ALPHA_TLSLDM,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "TLSLDM",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A dynamic relocation for a DTP module entry.  */
   HOWTO (R_ALPHA_DTPMOD64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "DTPMOD64",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Creates a 64-bit offset in the got for the displacement
      from DTP to the target.  */
   HOWTO (R_ALPHA_GOTDTPREL,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "GOTDTPREL",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A dynamic relocation for a displacement from DTP to the target.  */
   HOWTO (R_ALPHA_DTPREL64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "DTPREL64",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The high 16 bits of the displacement from DTP to the target.  */
   HOWTO (R_ALPHA_DTPRELHI,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "DTPRELHI",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The low 16 bits of the displacement from DTP to the target.  */
   HOWTO (R_ALPHA_DTPRELLO,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "DTPRELLO",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16-bit displacement from DTP to the target.  */
   HOWTO (R_ALPHA_DTPREL16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "DTPREL16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Creates a 64-bit offset in the got for the displacement
      from TP to the target.  */
   HOWTO (R_ALPHA_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "GOTTPREL",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A dynamic relocation for a displacement from TP to the target.  */
   HOWTO (R_ALPHA_TPREL64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "TPREL64",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The high 16 bits of the displacement from TP to the target.  */
   HOWTO (R_ALPHA_TPRELHI,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "TPRELHI",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The low 16 bits of the displacement from TP to the target.  */
   HOWTO (R_ALPHA_TPRELLO,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "TPRELLO",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16-bit displacement from TP to the target.  */
   HOWTO (R_ALPHA_TPREL16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "TPREL16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 };
 
 /* A mapping from BFD reloc types to Alpha ELF reloc types.  */
@@ -1101,7 +1102,7 @@ elf64_alpha_bfd_reloc_name_lookup (bfd *
 
 /* Given an Alpha ELF reloc type, fill in an arelent structure.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_info_to_howto (bfd *abfd, arelent *cache_ptr,
 			   Elf_Internal_Rela *dst)
 {
@@ -1113,10 +1114,10 @@ elf64_alpha_info_to_howto (bfd *abfd, ar
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf64_alpha_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 /* These two relocations create a two-word entry in the got.  */
@@ -1136,11 +1137,9 @@ elf64_alpha_info_to_howto (bfd *abfd, ar
 
 /* Handle an Alpha specific section when reading an object file.  This
    is called when bfd_section_from_shdr finds a section with an unknown
-   type.
-   FIXME: We need to handle the SHF_ALPHA_GPREL flag, but I'm not sure
-   how to.  */
+   type.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_section_from_shdr (bfd *abfd,
 			       Elf_Internal_Shdr *hdr,
 			       const char *name,
@@ -1157,41 +1156,41 @@ elf64_alpha_section_from_shdr (bfd *abfd
     {
     case SHT_ALPHA_DEBUG:
       if (strcmp (name, ".mdebug") != 0)
-	return FALSE;
+	return false;
       break;
     default:
-      return FALSE;
+      return false;
     }
 
   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
   newsect = hdr->bfd_section;
 
   if (hdr->sh_type == SHT_ALPHA_DEBUG)
     {
       if (!bfd_set_section_flags (newsect,
 				  bfd_section_flags (newsect) | SEC_DEBUGGING))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Convert Alpha specific section flags to bfd internal section flags.  */
 
-static bfd_boolean
-elf64_alpha_section_flags (flagword *flags, const Elf_Internal_Shdr *hdr)
+static bool
+elf64_alpha_section_flags (const Elf_Internal_Shdr *hdr)
 {
   if (hdr->sh_flags & SHF_ALPHA_GPREL)
-    *flags |= SEC_SMALL_DATA;
+    hdr->bfd_section->flags |= SEC_SMALL_DATA;
 
-  return TRUE;
+  return true;
 }
 
 /* Set the correct type for an Alpha ELF section.  We do this by the
    section name, which is a hack, but ought to work.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
 {
   register const char *name;
@@ -1215,13 +1214,13 @@ elf64_alpha_fake_sections (bfd *abfd, El
 	   || strcmp (name, ".lit8") == 0)
     hdr->sh_flags |= SHF_ALPHA_GPREL;
 
-  return TRUE;
+  return true;
 }
 
 /* Hook called by the linker routine which adds symbols from an object
    file.  We use it to put .comm items in .sbss, and not .bss.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
 			     Elf_Internal_Sym *sym,
 			     const char **namep ATTRIBUTE_UNUSED,
@@ -1242,21 +1241,22 @@ elf64_alpha_add_symbol_hook (bfd *abfd,
 	  scomm = bfd_make_section_with_flags (abfd, ".scommon",
 					       (SEC_ALLOC
 						| SEC_IS_COMMON
+						| SEC_SMALL_DATA
 						| SEC_LINKER_CREATED));
 	  if (scomm == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       *secp = scomm;
       *valp = sym->st_size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create the .got section.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_create_got_section (bfd *abfd,
 				struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
@@ -1264,14 +1264,14 @@ elf64_alpha_create_got_section (bfd *abf
   asection *s;
 
   if (! is_alpha_elf (abfd))
-    return FALSE;
+    return false;
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
 	   | SEC_LINKER_CREATED);
   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (s, 3))
-    return FALSE;
+    return false;
 
   alpha_elf_tdata (abfd)->got = s;
 
@@ -1280,12 +1280,12 @@ elf64_alpha_create_got_section (bfd *abf
      we've collected each object's info.  */
   alpha_elf_tdata (abfd)->gotobj = abfd;
 
-  return TRUE;
+  return true;
 }
 
 /* Create all the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   asection *s;
@@ -1293,7 +1293,7 @@ elf64_alpha_create_dynamic_sections (bfd
   struct elf_link_hash_entry *h;
 
   if (! is_alpha_elf (abfd))
-    return FALSE;
+    return false;
 
   /* We need to create .plt, .rela.plt, .got, and .rela.got sections.  */
 
@@ -1303,7 +1303,7 @@ elf64_alpha_create_dynamic_sections (bfd
   s = bfd_make_section_anyway_with_flags (abfd, ".plt", flags);
   elf_hash_table (info)->splt = s;
   if (s == NULL || ! bfd_set_section_alignment (s, 4))
-    return FALSE;
+    return false;
 
   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
      .plt section.  */
@@ -1311,14 +1311,14 @@ elf64_alpha_create_dynamic_sections (bfd
 				   "_PROCEDURE_LINKAGE_TABLE_");
   elf_hash_table (info)->hplt = h;
   if (h == NULL)
-    return FALSE;
+    return false;
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
 	   | SEC_LINKER_CREATED | SEC_READONLY);
   s = bfd_make_section_anyway_with_flags (abfd, ".rela.plt", flags);
   elf_hash_table (info)->srelplt = s;
   if (s == NULL || ! bfd_set_section_alignment (s, 3))
-    return FALSE;
+    return false;
 
   if (elf64_alpha_use_secureplt)
     {
@@ -1326,7 +1326,7 @@ elf64_alpha_create_dynamic_sections (bfd
       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       elf_hash_table (info)->sgotplt = s;
       if (s == NULL || ! bfd_set_section_alignment (s, 3))
-	return FALSE;
+	return false;
     }
 
   /* We may or may not have created a .got section for this object, but
@@ -1335,7 +1335,7 @@ elf64_alpha_create_dynamic_sections (bfd
   if (alpha_elf_tdata(abfd)->gotobj == NULL)
     {
       if (!elf64_alpha_create_got_section (abfd, info))
-	return FALSE;
+	return false;
     }
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
@@ -1344,7 +1344,7 @@ elf64_alpha_create_dynamic_sections (bfd
   elf_hash_table (info)->srelgot = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, 3))
-    return FALSE;
+    return false;
 
   /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the
      dynobj's .got section.  We don't do this in the linker script
@@ -1354,15 +1354,15 @@ elf64_alpha_create_dynamic_sections (bfd
 				   "_GLOBAL_OFFSET_TABLE_");
   elf_hash_table (info)->hgot = h;
   if (h == NULL)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Read ECOFF debugging information from a .mdebug section into a
    ecoff_debug_info structure.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_read_ecoff_info (bfd *abfd, asection *section,
 			     struct ecoff_debug_info *debug)
 {
@@ -1387,18 +1387,23 @@ elf64_alpha_read_ecoff_info (bfd *abfd,
   /* The symbolic header contains absolute file offsets and sizes to
      read.  */
 #define READ(ptr, offset, count, size, type)				\
-  if (symhdr->count == 0)						\
-    debug->ptr = NULL;							\
-  else									\
+  do									\
     {									\
-      bfd_size_type amt = (bfd_size_type) size * symhdr->count;		\
-      debug->ptr = (type) bfd_malloc (amt);				\
-      if (debug->ptr == NULL)						\
+      size_t amt;							\
+      debug->ptr = NULL;						\
+      if (symhdr->count == 0)						\
+	break;								\
+      if (_bfd_mul_overflow (size, symhdr->count, &amt))		\
+	{								\
+	  bfd_set_error (bfd_error_file_too_big);			\
+	  goto error_return;						\
+	}								\
+      if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0)		\
 	goto error_return;						\
-      if (bfd_seek (abfd, (file_ptr) symhdr->offset, SEEK_SET) != 0	\
-	  || bfd_bread (debug->ptr, amt, abfd) != amt)			\
+      debug->ptr = (type) _bfd_malloc_and_read (abfd, amt, amt);	\
+      if (debug->ptr == NULL)						\
 	goto error_return;						\
-    }
+    } while (0)
 
   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
@@ -1416,45 +1421,23 @@ elf64_alpha_read_ecoff_info (bfd *abfd,
 
   debug->fdr = NULL;
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (ext_hdr != NULL)
-    free (ext_hdr);
-  if (debug->line != NULL)
-    free (debug->line);
-  if (debug->external_dnr != NULL)
-    free (debug->external_dnr);
-  if (debug->external_pdr != NULL)
-    free (debug->external_pdr);
-  if (debug->external_sym != NULL)
-    free (debug->external_sym);
-  if (debug->external_opt != NULL)
-    free (debug->external_opt);
-  if (debug->external_aux != NULL)
-    free (debug->external_aux);
-  if (debug->ss != NULL)
-    free (debug->ss);
-  if (debug->ssext != NULL)
-    free (debug->ssext);
-  if (debug->external_fdr != NULL)
-    free (debug->external_fdr);
-  if (debug->external_rfd != NULL)
-    free (debug->external_rfd);
-  if (debug->external_ext != NULL)
-    free (debug->external_ext);
-  return FALSE;
+  free (ext_hdr);
+  _bfd_ecoff_free_ecoff_debug_info (debug);
+  return false;
 }
 
 /* Alpha ELF local labels start with '$'.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
 {
   return name[0] == '$';
 }
 
-static bfd_boolean
+static bool
 elf64_alpha_find_nearest_line (bfd *abfd, asymbol **symbols,
 			       asection *section, bfd_vma offset,
 			       const char **filename_ptr,
@@ -1470,7 +1453,7 @@ elf64_alpha_find_nearest_line (bfd *abfd
 				     dwarf_debug_sections,
 				     &elf_tdata (abfd)->dwarf2_find_line_info)
       == 1)
-    return TRUE;
+    return true;
 
   msec = bfd_get_section_by_name (abfd, ".mdebug");
   if (msec != NULL)
@@ -1500,13 +1483,13 @@ elf64_alpha_find_nearest_line (bfd *abfd
 	  if (fi == NULL)
 	    {
 	      msec->flags = origflags;
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (!elf64_alpha_read_ecoff_info (abfd, msec, &fi->d))
 	    {
 	      msec->flags = origflags;
-	      return FALSE;
+	      return false;
 	    }
 
 	  /* Swap in the FDR information.  */
@@ -1515,7 +1498,7 @@ elf64_alpha_find_nearest_line (bfd *abfd
 	  if (fi->d.fdr == NULL)
 	    {
 	      msec->flags = origflags;
-	      return FALSE;
+	      return false;
 	    }
 	  external_fdr_size = swap->external_fdr_size;
 	  fdr_ptr = fi->d.fdr;
@@ -1526,13 +1509,6 @@ elf64_alpha_find_nearest_line (bfd *abfd
 	    (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
 
 	  alpha_elf_tdata (abfd)->find_line_info = fi;
-
-	  /* Note that we don't bother to ever free this information.
-	     find_nearest_line is either called all the time, as in
-	     objdump -l, so the information should be saved, or it is
-	     rarely called, as in ld error messages, so the memory
-	     wasted is unimportant.  Still, it would probably be a
-	     good idea for free_cached_info to throw it away.  */
 	}
 
       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
@@ -1540,7 +1516,7 @@ elf64_alpha_find_nearest_line (bfd *abfd
 				  line_ptr))
 	{
 	  msec->flags = origflags;
-	  return TRUE;
+	  return true;
 	}
 
       msec->flags = origflags;
@@ -1561,35 +1537,36 @@ struct extsym_info
   struct bfd_link_info *info;
   struct ecoff_debug_info *debug;
   const struct ecoff_debug_swap *swap;
-  bfd_boolean failed;
+  bool failed;
 };
 
-static bfd_boolean
-elf64_alpha_output_extsym (struct alpha_elf_link_hash_entry *h, void * data)
+static bool
+elf64_alpha_output_extsym (struct elf_link_hash_entry *x, void * data)
 {
+  struct alpha_elf_link_hash_entry *h = (struct alpha_elf_link_hash_entry *) x;
   struct extsym_info *einfo = (struct extsym_info *) data;
-  bfd_boolean strip;
+  bool strip;
   asection *sec, *output_section;
 
   if (h->root.indx == -2)
-    strip = FALSE;
+    strip = false;
   else if ((h->root.def_dynamic
 	    || h->root.ref_dynamic
 	    || h->root.root.type == bfd_link_hash_new)
 	   && !h->root.def_regular
 	   && !h->root.ref_regular)
-    strip = TRUE;
+    strip = true;
   else if (einfo->info->strip == strip_all
 	   || (einfo->info->strip == strip_some
 	       && bfd_hash_lookup (einfo->info->keep_hash,
 				   h->root.root.root.string,
-				   FALSE, FALSE) == NULL))
-    strip = TRUE;
+				   false, false) == NULL))
+    strip = true;
   else
-    strip = FALSE;
+    strip = false;
 
   if (strip)
-    return TRUE;
+    return true;
 
   if (h->esym.ifd == -2)
     {
@@ -1669,11 +1646,11 @@ elf64_alpha_output_extsym (struct alpha_
 				      h->root.root.root.string,
 				      &h->esym))
     {
-      einfo->failed = TRUE;
-      return FALSE;
+      einfo->failed = true;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Search for and possibly create a got entry.  */
@@ -1724,7 +1701,7 @@ get_got_entry (bfd *abfd, struct alpha_e
   if (!gotent)
     {
       int entry_size;
-      bfd_size_type amt;
+      size_t amt;
 
       amt = sizeof (struct alpha_elf_got_entry);
       gotent = (struct alpha_elf_got_entry *) bfd_alloc (abfd, amt);
@@ -1754,7 +1731,7 @@ get_got_entry (bfd *abfd, struct alpha_e
   return gotent;
 }
 
-static bfd_boolean
+static bool
 elf64_alpha_want_plt (struct alpha_elf_link_hash_entry *ah)
 {
   return ((ah->root.type == STT_FUNC
@@ -1769,7 +1746,7 @@ elf64_alpha_want_plt (struct alpha_elf_l
    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
    relocs to be sorted.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_sort_relocs_p (asection *sec)
 {
   return (sec->flags & SEC_CODE) == 0;
@@ -1778,7 +1755,7 @@ elf64_alpha_sort_relocs_p (asection *sec
 
 /* Handle dynamic relocations when doing an Alpha ELF link.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			  asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -1787,19 +1764,9 @@ elf64_alpha_check_relocs (bfd *abfd, str
   Elf_Internal_Shdr *symtab_hdr;
   struct alpha_elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel, *relend;
-  bfd_size_type amt;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is_alpha_elf (abfd));
 
@@ -1823,7 +1790,7 @@ elf64_alpha_check_relocs (bfd *abfd, str
       unsigned long r_symndx, r_type;
       struct alpha_elf_link_hash_entry *h;
       unsigned int gotent_flags;
-      bfd_boolean maybe_dynamic;
+      bool maybe_dynamic;
       unsigned int need;
       bfd_vma addend;
 
@@ -1847,13 +1814,13 @@ elf64_alpha_check_relocs (bfd *abfd, str
 	 locally or externally defined, as not all of the input files
 	 have yet been processed.  Do something with what we know, as
 	 this may help reduce memory usage and processing time later.  */
-      maybe_dynamic = FALSE;
+      maybe_dynamic = false;
       if (h && ((bfd_link_pic (info)
 		 && (!info->symbolic
 		     || info->unresolved_syms_in_shared_libs == RM_IGNORE))
 		|| !h->root.def_regular
 		|| h->root.root.type == bfd_link_hash_defweak))
-	maybe_dynamic = TRUE;
+	maybe_dynamic = true;
 
       need = 0;
       gotent_flags = 0;
@@ -1898,7 +1865,7 @@ elf64_alpha_check_relocs (bfd *abfd, str
 	     reloc to the STN_UNDEF (0) symbol so that they all match.  */
 	  r_symndx = STN_UNDEF;
 	  h = 0;
-	  maybe_dynamic = FALSE;
+	  maybe_dynamic = false;
 	  /* FALLTHRU */
 
 	case R_ALPHA_TLSGD:
@@ -1929,7 +1896,7 @@ elf64_alpha_check_relocs (bfd *abfd, str
 	  if (alpha_elf_tdata(abfd)->gotobj == NULL)
 	    {
 	      if (!elf64_alpha_create_got_section (abfd, info))
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -1939,7 +1906,7 @@ elf64_alpha_check_relocs (bfd *abfd, str
 
 	  gotent = get_got_entry (abfd, h, r_type, r_symndx, addend);
 	  if (!gotent)
-	    return FALSE;
+	    return false;
 
 	  if (gotent_flags)
 	    {
@@ -1968,10 +1935,10 @@ elf64_alpha_check_relocs (bfd *abfd, str
 	  if (sreloc == NULL)
 	    {
 	      sreloc = _bfd_elf_make_dynamic_reloc_section
-		(sec, dynobj, 3, abfd, /*rela?*/ TRUE);
+		(sec, dynobj, 3, abfd, /*rela?*/ true);
 
 	      if (sreloc == NULL)
-		return FALSE;
+		return false;
 	    }
 
 	  if (h)
@@ -1990,15 +1957,15 @@ elf64_alpha_check_relocs (bfd *abfd, str
 
 	      if (!rent)
 		{
-		  amt = sizeof (struct alpha_elf_reloc_entry);
+		  size_t amt = sizeof (struct alpha_elf_reloc_entry);
 		  rent = (struct alpha_elf_reloc_entry *) bfd_alloc (abfd, amt);
 		  if (!rent)
-		    return FALSE;
+		    return false;
 
 		  rent->srel = sreloc;
+		  rent->sec = sec;
 		  rent->rtype = r_type;
 		  rent->count = 1;
-		  rent->reltext = (sec->flags & SEC_READONLY) != 0;
 
 		  rent->next = h->reloc_entries;
 		  h->reloc_entries = rent;
@@ -2012,12 +1979,18 @@ elf64_alpha_check_relocs (bfd *abfd, str
 		 loaded into memory, we need a RELATIVE reloc.  */
 	      sreloc->size += sizeof (Elf64_External_Rela);
 	      if (sec->flags & SEC_READONLY)
-		info->flags |= DF_TEXTREL;
+		{
+		  info->flags |= DF_TEXTREL;
+		  info->callbacks->minfo
+		    (_("%pB: dynamic relocation against a local symbol in "
+		       "read-only section `%pA'\n"),
+		     sec->owner, sec);
+		}
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -2047,7 +2020,7 @@ elf64_alpha_gc_mark_hook (asection *sec,
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_adjust_dynamic_symbol (struct bfd_link_info *info,
 				   struct elf_link_hash_entry *h)
 {
@@ -2065,20 +2038,20 @@ elf64_alpha_adjust_dynamic_symbol (struc
      of STT_FUNC.  */
   if (alpha_elf_dynamic_symbol_p (h, info) && elf64_alpha_want_plt (ah))
     {
-      h->needs_plt = TRUE;
+      h->needs_plt = true;
 
       s = elf_hash_table(info)->splt;
       if (!s && !elf64_alpha_create_dynamic_sections (dynobj, info))
-	return FALSE;
+	return false;
 
       /* We need one plt entry per got subsection.  Delay allocation of
 	 the actual plt entries until size_plt_section, called from
 	 size_dynamic_sections or during relaxation.  */
 
-      return TRUE;
+      return true;
     }
   else
-    h->needs_plt = FALSE;
+    h->needs_plt = false;
 
   /* If this is a weak symbol, and there is a real definition, the
      processor independent code will have arranged for us to see the
@@ -2089,7 +2062,7 @@ elf64_alpha_adjust_dynamic_symbol (struc
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2097,20 +2070,20 @@ elf64_alpha_adjust_dynamic_symbol (struc
      symbols even in regular objects, does not need the hackery of a
      .dynbss section and COPY dynamic relocations.  */
 
-  return TRUE;
+  return true;
 }
 
 /* Record STO_ALPHA_NOPV and STO_ALPHA_STD_GPLOAD.  */
 
 static void
 elf64_alpha_merge_symbol_attribute (struct elf_link_hash_entry *h,
-				    const Elf_Internal_Sym *isym,
-				    bfd_boolean definition,
-				    bfd_boolean dynamic)
+				    unsigned int st_other,
+				    bool definition,
+				    bool dynamic)
 {
   if (!dynamic && definition)
     h->other = ((h->other & ELF_ST_VISIBILITY (-1))
-		| (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
+		| (st_other & ~ELF_ST_VISIBILITY (-1)));
 }
 
 /* Symbol versioning can create new symbols, and make our old symbols
@@ -2196,7 +2169,7 @@ elf64_alpha_copy_indirect_symbol (struct
 
 /* Is it possible to merge two object file's .got tables?  */
 
-static bfd_boolean
+static bool
 elf64_alpha_can_merge_gots (bfd *a, bfd *b)
 {
   int total = alpha_elf_tdata (a)->total_got_size;
@@ -2204,11 +2177,11 @@ elf64_alpha_can_merge_gots (bfd *a, bfd
 
   /* Trivial quick fallout test.  */
   if (total + alpha_elf_tdata (b)->total_got_size <= MAX_GOT_SIZE)
-    return TRUE;
+    return true;
 
   /* By their nature, local .got entries cannot be merged.  */
   if ((total += alpha_elf_tdata (b)->local_got_size) > MAX_GOT_SIZE)
-    return FALSE;
+    return false;
 
   /* Failing the common trivial comparison, we must effectively
      perform the merge.  Not actually performing the merge means that
@@ -2245,13 +2218,13 @@ elf64_alpha_can_merge_gots (bfd *a, bfd
 
 	      total += alpha_got_entry_size (be->reloc_type);
 	      if (total > MAX_GOT_SIZE)
-		return FALSE;
+		return false;
 	    global_found:;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Actually merge two .got tables.  */
@@ -2354,7 +2327,7 @@ elf64_alpha_merge_gots (bfd *a, bfd *b)
 
 /* Calculate the offsets for the got entries.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_calc_got_offsets_for_symbol (struct alpha_elf_link_hash_entry *h,
 					 void * arg ATTRIBUTE_UNUSED)
 {
@@ -2372,7 +2345,7 @@ elf64_alpha_calc_got_offsets_for_symbol
 	*plge += alpha_got_entry_size (gotent->reloc_type);
       }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -2426,16 +2399,16 @@ elf64_alpha_calc_got_offsets (struct bfd
 
 /* Constructs the gots.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_size_got_sections (struct bfd_link_info *info,
-			       bfd_boolean may_merge)
+			       bool may_merge)
 {
   bfd *i, *got_list, *cur_got_obj = NULL;
   struct alpha_elf_link_hash_table * htab;
 
   htab = alpha_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
   got_list = htab->got_list;
 
   /* On the first time through, pretend we have an existing got list
@@ -2463,7 +2436,7 @@ elf64_alpha_size_got_sections (struct bf
 		/* xgettext:c-format */
 		(_("%pB: .got subsegment exceeds 64K (size %d)"),
 		 i, alpha_elf_tdata (this_got)->total_got_size);
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (got_list == NULL)
@@ -2475,14 +2448,14 @@ elf64_alpha_size_got_sections (struct bf
 
       /* Strange degenerate case of no got references.  */
       if (got_list == NULL)
-	return TRUE;
+	return true;
 
       htab->got_list = got_list;
     }
 
   cur_got_obj = got_list;
   if (cur_got_obj == NULL)
-    return FALSE;
+    return false;
 
   if (may_merge)
     {
@@ -2509,20 +2482,20 @@ elf64_alpha_size_got_sections (struct bf
      everything therein.  */
   elf64_alpha_calc_got_offsets (info);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_alpha_size_plt_section_1 (struct alpha_elf_link_hash_entry *h,
 				void * data)
 {
   asection *splt = (asection *) data;
   struct alpha_elf_got_entry *gotent;
-  bfd_boolean saw_one = FALSE;
+  bool saw_one = false;
 
   /* If we didn't need an entry before, we still don't.  */
   if (!h->root.needs_plt)
-    return TRUE;
+    return true;
 
   /* For each LITERAL got entry still in use, allocate a plt entry.  */
   for (gotent = h->got_entries; gotent ; gotent = gotent->next)
@@ -2533,14 +2506,14 @@ elf64_alpha_size_plt_section_1 (struct a
 	  splt->size = PLT_HEADER_SIZE;
 	gotent->plt_offset = splt->size;
 	splt->size += PLT_ENTRY_SIZE;
-	saw_one = TRUE;
+	saw_one = true;
       }
 
   /* If there weren't any, there's no longer a need for the PLT entry.  */
   if (!saw_one)
-    h->root.needs_plt = FALSE;
+    h->root.needs_plt = false;
 
-  return TRUE;
+  return true;
 }
 
 /* Called from relax_section to rebuild the PLT in light of potential changes
@@ -2588,7 +2561,7 @@ elf64_alpha_size_plt_section (struct bfd
     }
 }
 
-static bfd_boolean
+static bool
 elf64_alpha_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				  struct bfd_link_info *info)
 {
@@ -2596,14 +2569,14 @@ elf64_alpha_always_size_sections (bfd *o
   struct alpha_elf_link_hash_table * htab;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = alpha_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
-  if (!elf64_alpha_size_got_sections (info, TRUE))
-    return FALSE;
+  if (!elf64_alpha_size_got_sections (info, true))
+    return false;
 
   /* Allocate space for all of the .got subsections.  */
   i = htab->got_list;
@@ -2614,11 +2587,11 @@ elf64_alpha_always_size_sections (bfd *o
 	{
 	  s->contents = (bfd_byte *) bfd_zalloc (i, s->size);
 	  if (s->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* The number of dynamic relocations required by a static relocation.  */
@@ -2656,11 +2629,11 @@ alpha_dynamic_entries_for_reloc (int r_t
 
 /* Work out the sizes of the dynamic relocation entries.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_calc_dynrel_sizes (struct alpha_elf_link_hash_entry *h,
 			       struct bfd_link_info *info)
 {
-  bfd_boolean dynamic;
+  bool dynamic;
   struct alpha_elf_reloc_entry *relent;
   unsigned long entries;
 
@@ -2688,7 +2661,7 @@ elf64_alpha_calc_dynrel_sizes (struct al
      relocations.  Avoid the loop which may want to add RELATIVE relocs
      based on bfd_link_pic (info).  */
   if (h->root.root.type == bfd_link_hash_undefweak && !dynamic)
-    return TRUE;
+    return true;
 
   for (relent = h->reloc_entries; relent; relent = relent->next)
     {
@@ -2697,31 +2670,38 @@ elf64_alpha_calc_dynrel_sizes (struct al
 						 bfd_link_pie (info));
       if (entries)
 	{
+	  asection *sec = relent->sec;
 	  relent->srel->size +=
 	    entries * sizeof (Elf64_External_Rela) * relent->count;
-	  if (relent->reltext)
-	    info->flags |= DT_TEXTREL;
+	  if ((sec->flags & SEC_READONLY) != 0)
+	    {
+	      info->flags |= DT_TEXTREL;
+	      info->callbacks->minfo
+		(_("%pB: dynamic relocation against `%pT' in "
+		   "read-only section `%pA'\n"),
+		 sec->owner, h->root.root.root.string, sec);
+	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Subroutine of elf64_alpha_size_rela_got_section for doing the
    global symbols.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_size_rela_got_1 (struct alpha_elf_link_hash_entry *h,
 			     struct bfd_link_info *info)
 {
-  bfd_boolean dynamic;
+  bool dynamic;
   struct alpha_elf_got_entry *gotent;
   unsigned long entries;
 
   /* If we're using a plt for this symbol, then all of its relocations
      for its got entries go into .rela.plt.  */
   if (h->root.needs_plt)
-    return TRUE;
+    return true;
 
   /* If the symbol is dynamic, we'll need all the relocations in their
      natural form.  If this is a shared object, and it has been forced
@@ -2732,7 +2712,7 @@ elf64_alpha_size_rela_got_1 (struct alph
      relocations.  Avoid the loop which may want to add RELATIVE relocs
      based on bfd_link_pic (info).  */
   if (h->root.root.type == bfd_link_hash_undefweak && !dynamic)
-    return TRUE;
+    return true;
 
   entries = 0;
   for (gotent = h->got_entries; gotent ; gotent = gotent->next)
@@ -2748,7 +2728,7 @@ elf64_alpha_size_rela_got_1 (struct alph
       srel->size += sizeof (Elf64_External_Rela) * entries;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic relocation sections.  */
@@ -2808,18 +2788,18 @@ elf64_alpha_size_rela_got_section (struc
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				   struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
-  bfd_boolean relplt, relocs;
+  bool relplt, relocs;
   struct alpha_elf_link_hash_table * htab;
 
   htab = alpha_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = elf_hash_table(info)->dynobj;
   BFD_ASSERT(dynobj != NULL);
@@ -2850,8 +2830,8 @@ elf64_alpha_size_dynamic_sections (bfd *
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  relplt = FALSE;
-  relocs = FALSE;
+  relplt = false;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -2863,21 +2843,21 @@ elf64_alpha_size_dynamic_sections (bfd *
 	 of the dynobj section names depend upon the input files.  */
       name = bfd_section_name (s);
 
-      if (CONST_STRNEQ (name, ".rela"))
+      if (startswith (name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
 	      if (strcmp (name, ".rela.plt") == 0)
-		relplt = TRUE;
+		relplt = true;
 	      else
-		relocs = TRUE;
+		relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
 	      s->reloc_count = 0;
 	    }
 	}
-      else if (! CONST_STRNEQ (name, ".got")
+      else if (! startswith (name, ".got")
 	       && strcmp (name, ".plt") != 0
 	       && strcmp (name, ".dynbss") != 0)
 	{
@@ -2894,7 +2874,7 @@ elf64_alpha_size_dynamic_sections (bfd *
 	     linker does that before adjust_dynamic_symbol is called, and
 	     it is that function which decides whether anything needs to
 	     go into these sections.  */
-	  if (!CONST_STRNEQ (name, ".got"))
+	  if (!startswith (name, ".got"))
 	    s->flags |= SEC_EXCLUDE;
 	}
       else if ((s->flags & SEC_HAS_CONTENTS) != 0)
@@ -2902,7 +2882,7 @@ elf64_alpha_size_dynamic_sections (bfd *
 	  /* Allocate memory for the section contents.  */
 	  s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
 	  if (s->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -2916,42 +2896,18 @@ elf64_alpha_size_dynamic_sections (bfd *
 #define add_dynamic_entry(TAG, VAL) \
   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (relplt)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-
-	  if (elf64_alpha_use_secureplt
-	      && !add_dynamic_entry (DT_ALPHA_PLTRO, 1))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
-	    return FALSE;
-
-	  if (info->flags & DF_TEXTREL)
-	    {
-	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
+      if (!_bfd_elf_add_dynamic_tags (output_bfd, info,
+				      relocs || relplt))
+	return false;
+
+      if (relplt
+	  && elf64_alpha_use_secureplt
+	  && !add_dynamic_entry (DT_ALPHA_PLTRO, 1))
+	return false;
     }
 #undef add_dynamic_entry
 
-  return TRUE;
+  return true;
 }
 
 /* These functions do relaxation for Alpha ELF.
@@ -2981,8 +2937,8 @@ struct alpha_relax_info
   struct alpha_elf_link_hash_entry *h;
   struct alpha_elf_got_entry **first_gotent;
   struct alpha_elf_got_entry *gotent;
-  bfd_boolean changed_contents;
-  bfd_boolean changed_relocs;
+  bool changed_contents;
+  bool changed_relocs;
   unsigned char other;
 };
 
@@ -3001,7 +2957,7 @@ elf64_alpha_find_reloc_at_ofs (Elf_Inter
   return NULL;
 }
 
-static bfd_boolean
+static bool
 elf64_alpha_relax_got_load (struct alpha_relax_info *info, bfd_vma symval,
 			    Elf_Internal_Rela *irel, unsigned long r_type)
 {
@@ -3019,17 +2975,18 @@ elf64_alpha_relax_got_load (struct alpha
 	(_("%pB: %pA+%#" PRIx64 ": warning: "
 	   "%s relocation against unexpected insn"),
 	 info->abfd, info->sec, (uint64_t) irel->r_offset, howto->name);
-      return TRUE;
+      return true;
     }
 
   /* Can't relax dynamic symbols.  */
-  if (alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info))
-    return TRUE;
+  if (info->h != NULL
+      && alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info))
+    return true;
 
   /* Can't use local-exec relocations in shared libraries.  */
   if (r_type == R_ALPHA_GOTTPREL
       && bfd_link_dll (info->link_info))
-    return TRUE;
+    return true;
 
   if (r_type == R_ALPHA_LITERAL)
     {
@@ -3048,7 +3005,7 @@ elf64_alpha_relax_got_load (struct alpha
 	{
 	  /* We may only create GPREL relocs during the second pass.  */
 	  if (info->link_info->relax_pass == 0)
-	    return TRUE;
+	    return true;
 
 	  disp = symval - info->gp;
 	  insn = (OP_LDA << 26) | (insn & 0x03ff0000);
@@ -3076,15 +3033,15 @@ elf64_alpha_relax_got_load (struct alpha
 	  break;
 	default:
 	  BFD_ASSERT (0);
-	  return FALSE;
+	  return false;
 	}
     }
 
   if (disp < -0x8000 || disp >= 0x8000)
-    return TRUE;
+    return true;
 
   bfd_put_32 (info->abfd, (bfd_vma) insn, info->contents + irel->r_offset);
-  info->changed_contents = TRUE;
+  info->changed_contents = true;
 
   /* Reduce the use count on this got entry by one, possibly
      eliminating it.  */
@@ -3098,7 +3055,7 @@ elf64_alpha_relax_got_load (struct alpha
 
   /* Smash the existing GOT relocation for its 16-bit immediate pair.  */
   irel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info), r_type);
-  info->changed_relocs = TRUE;
+  info->changed_relocs = true;
 
   /* ??? Search forward through this basic block looking for insns
      that use the target register.  Stop after an insn modifying the
@@ -3113,7 +3070,7 @@ elf64_alpha_relax_got_load (struct alpha
      This would mean that we'd have to _add_ relocations, the pain of
      which gives one pause.  */
 
-  return TRUE;
+  return true;
 }
 
 static bfd_vma
@@ -3171,12 +3128,10 @@ elf64_alpha_relax_opt_call (struct alpha
 
       if (!gpdisp || gpdisp->r_addend != 4)
 	{
-	  if (tsec_free)
-	    free (tsec_free);
+	  free (tsec_free);
 	  return 0;
 	}
-      if (tsec_free)
-	free (tsec_free);
+      free (tsec_free);
     }
 
   /* We've now determined that we can skip an initial gp load.  Verify
@@ -3188,19 +3143,19 @@ elf64_alpha_relax_opt_call (struct alpha
   return symval + 8;
 }
 
-static bfd_boolean
+static bool
 elf64_alpha_relax_with_lituse (struct alpha_relax_info *info,
 			       bfd_vma symval, Elf_Internal_Rela *irel)
 {
   Elf_Internal_Rela *urel, *erel, *irelend = info->relend;
   int flags;
   bfd_signed_vma disp;
-  bfd_boolean fits16;
-  bfd_boolean fits32;
-  bfd_boolean lit_reused = FALSE;
-  bfd_boolean all_optimized = TRUE;
-  bfd_boolean changed_contents;
-  bfd_boolean changed_relocs;
+  bool fits16;
+  bool fits32;
+  bool lit_reused = false;
+  bool all_optimized = true;
+  bool changed_contents;
+  bool changed_relocs;
   bfd_byte *contents = info->contents;
   bfd *abfd = info->abfd;
   bfd_vma sec_output_vma;
@@ -3215,12 +3170,13 @@ elf64_alpha_relax_with_lituse (struct al
 	(_("%pB: %pA+%#" PRIx64 ": warning: "
 	   "%s relocation against unexpected insn"),
 	 abfd, info->sec, (uint64_t) irel->r_offset, "LITERAL");
-      return TRUE;
+      return true;
     }
 
   /* Can't relax dynamic symbols.  */
-  if (alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info))
-    return TRUE;
+  if (info->h != NULL
+      && alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info))
+    return true;
 
   changed_contents = info->changed_contents;
   changed_relocs = info->changed_relocs;
@@ -3255,14 +3211,14 @@ elf64_alpha_relax_with_lituse (struct al
 	default:
 	  /* This type is really just a placeholder to note that all
 	     uses cannot be optimized, but to still allow some.  */
-	  all_optimized = FALSE;
+	  all_optimized = false;
 	  break;
 
 	case LITUSE_ALPHA_BASE:
 	  /* We may only create GPREL relocs during the second pass.  */
 	  if (relax_pass == 0)
 	    {
-	      all_optimized = FALSE;
+	      all_optimized = false;
 	      break;
 	    }
 
@@ -3284,7 +3240,7 @@ elf64_alpha_relax_with_lituse (struct al
 		 register from the literal insn.  Leave the offset alone.  */
 	      insn = (insn & 0xffe0ffff) | (lit_insn & 0x001f0000);
 	      bfd_put_32 (abfd, (bfd_vma) insn, contents + urel_r_offset);
-	      changed_contents = TRUE;
+	      changed_contents = true;
 
 	      nrel = *urel;
 	      nrel.r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
@@ -3296,7 +3252,7 @@ elf64_alpha_relax_with_lituse (struct al
 	      if (urel < --erel)
 		*urel-- = *erel;
 	      *erel = nrel;
-	      changed_relocs = TRUE;
+	      changed_relocs = true;
 	    }
 
 	  /* If all mem+byte, we can optimize 32-bit mem displacements.  */
@@ -3308,18 +3264,18 @@ elf64_alpha_relax_with_lituse (struct al
 					   R_ALPHA_GPRELHIGH);
 	      lit_insn = (OP_LDAH << 26) | (lit_insn & 0x03ff0000);
 	      bfd_put_32 (abfd, (bfd_vma) lit_insn, contents + irel->r_offset);
-	      lit_reused = TRUE;
-	      changed_contents = TRUE;
+	      lit_reused = true;
+	      changed_contents = true;
 
 	      /* Since all relocs must be optimized, don't bother swapping
 		 this relocation to the end.  */
 	      urel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
 					   R_ALPHA_GPRELLOW);
 	      urel->r_addend = irel->r_addend;
-	      changed_relocs = TRUE;
+	      changed_relocs = true;
 	    }
 	  else
-	    all_optimized = FALSE;
+	    all_optimized = false;
 	  break;
 
 	case LITUSE_ALPHA_BYTOFF:
@@ -3331,7 +3287,7 @@ elf64_alpha_relax_with_lituse (struct al
 	  insn &= ~ (unsigned) 0x001ff000;
 	  insn |= ((symval & 7) << 13) | 0x1000;
 	  bfd_put_32 (abfd, (bfd_vma) insn, contents + urel_r_offset);
-	  changed_contents = TRUE;
+	  changed_contents = true;
 
 	  nrel = *urel;
 	  nrel.r_info = ELF64_R_INFO (0, R_ALPHA_NONE);
@@ -3342,7 +3298,7 @@ elf64_alpha_relax_with_lituse (struct al
 	  if (urel < --erel)
 	    *urel-- = *erel;
 	  *erel = nrel;
-	  changed_relocs = TRUE;
+	  changed_relocs = true;
 	  break;
 
 	case LITUSE_ALPHA_JSR:
@@ -3361,7 +3317,7 @@ elf64_alpha_relax_with_lituse (struct al
 		insn |= 31 << 16;
 		bfd_put_32 (abfd, (bfd_vma) insn, contents + urel_r_offset);
 
-		changed_contents = TRUE;
+		changed_contents = true;
 		break;
 	      }
 
@@ -3380,7 +3336,7 @@ elf64_alpha_relax_with_lituse (struct al
 		else
 		  insn = (OP_BR << 26) | (insn & 0x03e00000);
 		bfd_put_32 (abfd, (bfd_vma) insn, contents + urel_r_offset);
-		changed_contents = TRUE;
+		changed_contents = true;
 
 		nrel = *urel;
 		nrel.r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
@@ -3390,7 +3346,7 @@ elf64_alpha_relax_with_lituse (struct al
 		if (optdest)
 		  nrel.r_addend += optdest - symval;
 		else
-		  all_optimized = FALSE;
+		  all_optimized = false;
 
 		/* Kill any HINT reloc that might exist for this insn.  */
 		xrel = (elf64_alpha_find_reloc_at_ofs
@@ -3405,10 +3361,10 @@ elf64_alpha_relax_with_lituse (struct al
 		  *urel-- = *erel;
 		*erel = nrel;
 
-		info->changed_relocs = TRUE;
+		info->changed_relocs = true;
 	      }
 	    else
-	      all_optimized = FALSE;
+	      all_optimized = false;
 
 	    /* Even if the target is not in range for a direct branch,
 	       if we share a GP, we can eliminate the gp reload.  */
@@ -3436,8 +3392,8 @@ elf64_alpha_relax_with_lituse (struct al
 			bfd_put_32 (abfd, (bfd_vma) INSN_UNOP, p_lda);
 
 			gpdisp->r_info = ELF64_R_INFO (0, R_ALPHA_NONE);
-			changed_contents = TRUE;
-			changed_relocs = TRUE;
+			changed_contents = true;
+			changed_relocs = true;
 		      }
 		  }
 	      }
@@ -3468,10 +3424,10 @@ elf64_alpha_relax_with_lituse (struct al
       if (!lit_reused)
 	{
 	  irel->r_info = ELF64_R_INFO (0, R_ALPHA_NONE);
-	  changed_relocs = TRUE;
+	  changed_relocs = true;
 
 	  bfd_put_32 (abfd, (bfd_vma) INSN_UNOP, contents + irel->r_offset);
-	  changed_contents = TRUE;
+	  changed_contents = true;
 	}
     }
 
@@ -3479,21 +3435,22 @@ elf64_alpha_relax_with_lituse (struct al
   info->changed_relocs = changed_relocs;
 
   if (all_optimized || relax_pass == 0)
-    return TRUE;
+    return true;
   return elf64_alpha_relax_got_load (info, symval, irel, R_ALPHA_LITERAL);
 }
 
-static bfd_boolean
+static bool
 elf64_alpha_relax_tls_get_addr (struct alpha_relax_info *info, bfd_vma symval,
-				Elf_Internal_Rela *irel, bfd_boolean is_gd)
+				Elf_Internal_Rela *irel, bool is_gd)
 {
   bfd_byte *pos[5];
   unsigned int insn, tlsgd_reg;
   Elf_Internal_Rela *gpdisp, *hint;
-  bfd_boolean dynamic, use_gottprel;
+  bool dynamic, use_gottprel;
   unsigned long new_symndx;
 
-  dynamic = alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info);
+  dynamic = (info->h != NULL
+	     && alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info));
 
   /* If a TLS symbol is accessed using IE at least once, there is no point
      to use dynamic model for it.  */
@@ -3508,23 +3465,23 @@ elf64_alpha_relax_tls_get_addr (struct a
 
   /* Otherwise we must be building an executable to do anything.  */
   else if (bfd_link_pic (info->link_info))
-    return TRUE;
+    return true;
 
   /* The TLSGD/TLSLDM relocation must be followed by a LITERAL and
      the matching LITUSE_TLS relocations.  */
   if (irel + 2 >= info->relend)
-    return TRUE;
+    return true;
   if (ELF64_R_TYPE (irel[1].r_info) != R_ALPHA_LITERAL
       || ELF64_R_TYPE (irel[2].r_info) != R_ALPHA_LITUSE
       || irel[2].r_addend != (is_gd ? LITUSE_ALPHA_TLSGD : LITUSE_ALPHA_TLSLDM))
-    return TRUE;
+    return true;
 
   /* There must be a GPDISP relocation positioned immediately after the
      LITUSE relocation.  */
   gpdisp = elf64_alpha_find_reloc_at_ofs (info->relocs, info->relend,
 					  irel[2].r_offset + 4, R_ALPHA_GPDISP);
   if (!gpdisp)
-    return TRUE;
+    return true;
 
   pos[0] = info->contents + irel[0].r_offset;
   pos[1] = info->contents + irel[1].r_offset;
@@ -3549,7 +3506,7 @@ elf64_alpha_relax_tls_get_addr (struct a
       pos[1] = tmp;
     }
   if (pos[1] >= pos[2] || pos[2] >= pos[3])
-    return TRUE;
+    return true;
 
   /* Reduce the use count on the LITERAL relocation.  Do this before we
      smash the symndx when we adjust the relocations below.  */
@@ -3603,7 +3560,7 @@ elf64_alpha_relax_tls_get_addr (struct a
 
      as appropriate.  */
 
-  use_gottprel = FALSE;
+  use_gottprel = false;
   new_symndx = is_gd ? ELF64_R_SYM (irel->r_info) : STN_UNDEF;
 
   /* Some compilers warn about a Boolean-looking expression being
@@ -3649,7 +3606,7 @@ elf64_alpha_relax_tls_get_addr (struct a
       /* FALLTHRU */
 
     default:
-      use_gottprel = TRUE;
+      use_gottprel = true;
 
       insn = (OP_LDQ << 26) | (tlsgd_reg << 21) | (29 << 16);
       bfd_put_32 (info->abfd, (bfd_vma) insn, pos[0]);
@@ -3676,8 +3633,8 @@ elf64_alpha_relax_tls_get_addr (struct a
   if (hint)
     hint->r_info = ELF64_R_INFO (0, R_ALPHA_NONE);
 
-  info->changed_contents = TRUE;
-  info->changed_relocs = TRUE;
+  info->changed_contents = true;
+  info->changed_relocs = true;
 
   /* Reduce the use count on the TLSGD/TLSLDM relocation.  */
   if (--info->gotent->use_count == 0)
@@ -3711,7 +3668,7 @@ elf64_alpha_relax_tls_get_addr (struct a
 	      tprel_gotent = (struct alpha_elf_got_entry *)
 		bfd_alloc (info->abfd, sizeof (struct alpha_elf_got_entry));
 	      if (!tprel_gotent)
-		return FALSE;
+		return false;
 
 	      tprel_gotent->next = *info->first_gotent;
 	      *info->first_gotent = tprel_gotent;
@@ -3728,12 +3685,12 @@ elf64_alpha_relax_tls_get_addr (struct a
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_alpha_relax_section (bfd *abfd, asection *sec,
-			   struct bfd_link_info *link_info, bfd_boolean *again)
+			   struct bfd_link_info *link_info, bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -3746,16 +3703,16 @@ elf64_alpha_relax_section (bfd *abfd, as
 
   htab = alpha_elf_hash_table (link_info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* There's nothing to change, yet.  */
-  *again = FALSE;
+  *again = false;
 
   if (bfd_link_relocatable (link_info)
-      || ((sec->flags & (SEC_CODE | SEC_RELOC | SEC_ALLOC))
-	  != (SEC_CODE | SEC_RELOC | SEC_ALLOC))
+      || ((sec->flags & (SEC_CODE | SEC_RELOC | SEC_ALLOC | SEC_HAS_CONTENTS))
+	  != (SEC_CODE | SEC_RELOC | SEC_ALLOC | SEC_HAS_CONTENTS))
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is_alpha_elf (abfd));
   relax_pass = link_info->relax_pass;
@@ -3787,7 +3744,7 @@ elf64_alpha_relax_section (bfd *abfd, as
 		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
-    return FALSE;
+    return false;
 
   memset(&info, 0, sizeof (info));
   info.abfd = abfd;
@@ -4019,19 +3976,16 @@ elf64_alpha_relax_section (bfd *abfd, as
 
   *again = info.changed_contents || info.changed_relocs;
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (info.contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != info.contents)
+  if (elf_section_data (sec)->this_hdr.contents != info.contents)
     free (info.contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 
 /* Emit a dynamic relocation for (DYNINDX, RTYPE, ADDEND) at (SEC, OFFSET)
@@ -4068,7 +4022,7 @@ elf64_alpha_emit_dynrel (bfd *abfd, stru
    symbol, in which case we have to adjust according to where the section
    symbol winds up in the output section.  */
 
-static bfd_boolean
+static int
 elf64_alpha_relocate_section_r (bfd *output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				bfd *input_bfd, asection *input_section,
@@ -4081,7 +4035,7 @@ elf64_alpha_relocate_section_r (bfd *out
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
   struct elf_link_hash_entry **sym_hashes;
-  bfd_boolean ret_val = TRUE;
+  bool ret_val = true;
 
   symtab_hdr_sh_info = elf_symtab_hdr (input_bfd).sh_info;
   sym_hashes = elf_sym_hashes (input_bfd);
@@ -4102,7 +4056,7 @@ elf64_alpha_relocate_section_r (bfd *out
 	    (_("%pB: unsupported relocation type %#x"),
 	     input_bfd, (int) r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ret_val = FALSE;
+	  ret_val = false;
 	  continue;
 	}
 
@@ -4150,7 +4104,7 @@ elf64_alpha_relocate_section_r (bfd *out
 
 /* Relocate an Alpha ELF section.  */
 
-static bfd_boolean
+static int
 elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 			      bfd *input_bfd, asection *input_section,
 			      bfd_byte *contents, Elf_Internal_Rela *relocs,
@@ -4164,7 +4118,7 @@ elf64_alpha_relocate_section (bfd *outpu
   bfd *dynobj, *gotobj;
   bfd_vma gp, tp_base, dtp_base;
   struct alpha_elf_got_entry **local_got_entries;
-  bfd_boolean ret_val;
+  bool ret_val;
 
   BFD_ASSERT (is_alpha_elf (input_bfd));
 
@@ -4176,7 +4130,7 @@ elf64_alpha_relocate_section (bfd *outpu
 
   /* This is a final link.  */
 
-  ret_val = TRUE;
+  ret_val = true;
 
   symtab_hdr = &elf_symtab_hdr (input_bfd);
 
@@ -4237,9 +4191,9 @@ elf64_alpha_relocate_section (bfd *outpu
       asection *sec = NULL;
       bfd_vma value;
       bfd_vma addend;
-      bfd_boolean dynamic_symbol_p;
-      bfd_boolean unresolved_reloc = FALSE;
-      bfd_boolean undef_weak_ref = FALSE;
+      bool dynamic_symbol_p;
+      bool unresolved_reloc = false;
+      bool undef_weak_ref = false;
       unsigned long r_type;
 
       r_type = ELF64_R_TYPE(rel->r_info);
@@ -4250,7 +4204,7 @@ elf64_alpha_relocate_section (bfd *outpu
 	    (_("%pB: unsupported relocation type %#x"),
 	     input_bfd, (int) r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ret_val = FALSE;
+	  ret_val = false;
 	  continue;
 	}
 
@@ -4316,11 +4270,11 @@ elf64_alpha_relocate_section (bfd *outpu
 		}
 	    }
 
-	  dynamic_symbol_p = FALSE;
+	  dynamic_symbol_p = false;
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 	  struct elf_link_hash_entry *hh;
 	  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
 
@@ -4335,7 +4289,7 @@ elf64_alpha_relocate_section (bfd *outpu
 	  if (value == 0
 	      && ! unresolved_reloc
 	      && hh->root.type == bfd_link_hash_undefweak)
-	    undef_weak_ref = TRUE;
+	    undef_weak_ref = true;
 
 	  h = (struct alpha_elf_link_hash_entry *) hh;
 	  dynamic_symbol_p = alpha_elf_dynamic_symbol_p (&h->root, info);
@@ -4415,7 +4369,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		/* xgettext:c-format */
 		(_("%pB: gp-relative relocation against dynamic symbol %s"),
 		 input_bfd, h->root.root.root.string);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 	  BFD_ASSERT(gp != 0);
 	  value -= gp;
@@ -4428,7 +4382,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		/* xgettext:c-format */
 		(_("%pB: gp-relative relocation against dynamic symbol %s"),
 		 input_bfd, h->root.root.root.string);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 	  BFD_ASSERT(gp != 0);
 	  value -= gp;
@@ -4455,7 +4409,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		/* xgettext:c-format */
 		(_("%pB: pc-relative relocation against dynamic symbol %s"),
 		 input_bfd, h->root.root.root.string);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 	  /* The regular PC-relative stuff measures from the start of
 	     the instruction rather than the end.  */
@@ -4484,7 +4438,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		  /* xgettext:c-format */
 		  (_("%pB: change in gp: BRSGP %s"),
 		   input_bfd, h->root.root.root.string);
-		ret_val = FALSE;
+		ret_val = false;
 	      }
 
 	    /* The symbol should be marked either NOPV or STD_GPLOAD.  */
@@ -4515,7 +4469,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		  /* xgettext:c-format */
 		  (_("%pB: !samegp reloc against symbol without .prologue: %s"),
 		   input_bfd, name);
-		ret_val = FALSE;
+		ret_val = false;
 		break;
 	      }
 
@@ -4574,7 +4528,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		      (_("%pB: unhandled dynamic relocation against %s"),
 		       input_bfd,
 		       h->root.root.root.string);
-		    ret_val = FALSE;
+		    ret_val = false;
 		  }
 		dynindx = 0;
 		dyntype = R_ALPHA_RELATIVE;
@@ -4599,7 +4553,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		/* xgettext:c-format */
 		(_("%pB: pc-relative relocation against dynamic symbol %s"),
 		 input_bfd, h->root.root.root.string);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 	  else if (bfd_link_pic (info)
 		   && undef_weak_ref)
@@ -4608,7 +4562,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		/* xgettext:c-format */
 		(_("%pB: pc-relative relocation against undefined weak symbol %s"),
 		 input_bfd, h->root.root.root.string);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 
 
@@ -4674,7 +4628,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		/* xgettext:c-format */
 		(_("%pB: dtp-relative relocation against dynamic symbol %s"),
 		 input_bfd, h->root.root.root.string);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 	  BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL);
 	  value -= dtp_base;
@@ -4691,7 +4645,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		/* xgettext:c-format */
 		(_("%pB: TLS local exec code cannot be linked into shared objects"),
 		input_bfd);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 	  else if (dynamic_symbol_p)
 	    {
@@ -4699,7 +4653,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		/* xgettext:c-format */
 		(_("%pB: tp-relative relocation against dynamic symbol %s"),
 		 input_bfd, h->root.root.root.string);
-	      ret_val = FALSE;
+	      ret_val = false;
 	    }
 	  BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL);
 	  value -= tp_base;
@@ -4778,7 +4732,7 @@ elf64_alpha_relocate_section (bfd *outpu
 		name = (bfd_elf_string_from_elf_section
 			(input_bfd, symtab_hdr->sh_link, sym->st_name));
 		if (name == NULL)
-		  return FALSE;
+		  return false;
 		if (*name == '\0')
 		  name = bfd_section_name (sec);
 	      }
@@ -4800,7 +4754,7 @@ elf64_alpha_relocate_section (bfd *outpu
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
 				   struct elf_link_hash_entry *h,
 				   Elf_Internal_Sym *sym)
@@ -4943,12 +4897,12 @@ elf64_alpha_finish_dynamic_symbol (bfd *
       || h == elf_hash_table (info)->hplt)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_finish_dynamic_sections (bfd *output_bfd,
 				     struct bfd_link_info *info)
 {
@@ -5065,14 +5019,14 @@ elf64_alpha_finish_dynamic_sections (bfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We need to use a special link routine to handle the .mdebug section.
    We need to merge all instances of these sections together, not write
    them all out sequentially.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   asection *o;
@@ -5087,7 +5041,7 @@ elf64_alpha_final_link (bfd *abfd, struc
 
   htab = alpha_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Go through the sections and collect the mdebug information.  */
   mdebug_sec = NULL;
@@ -5132,7 +5086,7 @@ elf64_alpha_final_link (bfd *abfd, struc
 
 	  mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
 	  if (mdebug_handle == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (1)
 	    {
@@ -5171,7 +5125,7 @@ elf64_alpha_final_link (bfd *abfd, struc
 
 		  if (! bfd_ecoff_debug_one_external (abfd, &debug, swap,
 						      name[i], &esym))
-		    return FALSE;
+		    return false;
 		}
 	    }
 
@@ -5212,12 +5166,12 @@ elf64_alpha_final_link (bfd *abfd, struc
 		 ecoff_debug_info structure, so we do that now.  */
 	      if (!elf64_alpha_read_ecoff_info (input_bfd, input_section,
 						&input_debug))
-		return FALSE;
+		return false;
 
 	      if (! (bfd_ecoff_debug_accumulate
 		     (mdebug_handle, abfd, &debug, swap, input_bfd,
 		      &input_debug, input_swap, info)))
-		return FALSE;
+		return false;
 
 	      /* Loop through the external symbols.  For each one with
 		 interesting information, try to find the symbol in
@@ -5242,7 +5196,7 @@ elf64_alpha_final_link (bfd *abfd, struc
 		    continue;
 
 		  name = input_debug.ssext + ext.asym.iss;
-		  h = alpha_elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
+		  h = alpha_elf_link_hash_lookup (htab, name, false, false, true);
 		  if (h == NULL || h->esym.ifd != -2)
 		    continue;
 
@@ -5279,12 +5233,12 @@ elf64_alpha_final_link (bfd *abfd, struc
 	  einfo.info = info;
 	  einfo.debug = &debug;
 	  einfo.swap = swap;
-	  einfo.failed = FALSE;
+	  einfo.failed = false;
 	  elf_link_hash_traverse (elf_hash_table (info),
 				  elf64_alpha_output_extsym,
 				  &einfo);
 	  if (einfo.failed)
-	    return FALSE;
+	    return false;
 
 	  /* Set the size of the .mdebug section.  */
 	  o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
@@ -5299,7 +5253,7 @@ elf64_alpha_final_link (bfd *abfd, struc
 
   /* Invoke the regular ELF backend linker to do all the work.  */
   if (! bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
   /* Now write out the computed sections.  */
 
@@ -5321,7 +5275,7 @@ elf64_alpha_final_link (bfd *abfd, struc
 					sgot->contents,
 					(file_ptr) sgot->output_offset,
 					sgot->size))
-	  return FALSE;
+	  return false;
       }
   }
 
@@ -5331,12 +5285,12 @@ elf64_alpha_final_link (bfd *abfd, struc
       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
 					       swap, info,
 					       mdebug_sec->filepos))
-	return FALSE;
+	return false;
 
       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
     }
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -5523,6 +5477,9 @@ static const struct elf_size_info alpha_
 #define elf_backend_special_sections \
   elf64_alpha_special_sections
 
+#define elf_backend_strip_zero_sized_dynamic_sections \
+  _bfd_elf_strip_zero_sized_dynamic_sections
+
 /* A few constants that determine how the .plt section is set up.  */
 #define elf_backend_want_got_plt 0
 #define elf_backend_plt_readonly 0
@@ -5545,13 +5502,13 @@ static const struct elf_size_info alpha_
    "FreeBSD" label in the ELF header.  So we put this label on all
    executables and (for simplicity) also all other object files.  */
 
-static bfd_boolean
+static bool
 elf64_alpha_fbsd_init_file_header (bfd *abfd, struct bfd_link_info *info)
 {
   Elf_Internal_Ehdr * i_ehdrp;	/* ELF file header, internal form.  */
 
   if (!_bfd_elf_init_file_header (abfd, info))
-    return FALSE;
+    return false;
 
   i_ehdrp = elf_elfheader (abfd);
 
@@ -5561,7 +5518,7 @@ elf64_alpha_fbsd_init_file_header (bfd *
   /* The ABI label supported by FreeBSD <= 4.0 is quite nonstandard.  */
   memcpy (&i_ehdrp->e_ident[EI_ABIVERSION], "FreeBSD", 8);
 #endif
-  return TRUE;
+  return true;
 }
 
 #undef elf_backend_init_file_header
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-amdgcn.c ./bfd/elf64-amdgcn.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-amdgcn.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elf64-amdgcn.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,80 @@
+/* AMDGCN ELF support for BFD.
+
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* This file handles ELF files that are of the AMDGCN architecture.  The
+   format is documented here:
+
+     https://llvm.org/docs/AMDGPUUsage.html#elf-code-object */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/amdgpu.h"
+
+#include <string.h>
+
+static bool
+elf64_amdgcn_object_p (bfd *abfd)
+{
+  Elf_Internal_Ehdr *hdr = elf_elfheader (abfd);
+  unsigned int mach;
+  unsigned char osabi;
+  unsigned char osabi_version;
+
+  BFD_ASSERT (hdr->e_machine == EM_AMDGPU);
+
+  osabi = hdr->e_ident[EI_OSABI];
+  osabi_version = hdr->e_ident[EI_ABIVERSION];
+
+  /* Objects with OS ABI HSA version 2 encoded the GPU model differently (in a
+     note), but they are deprecated, so we don't need to support them.  Reject
+     them specifically.
+
+     At the time of writing, all AMDGCN objects encode the specific GPU
+     model in the EF_AMDGPU_MACH field of e_flags.  */
+  if (osabi == ELFOSABI_AMDGPU_HSA
+      && osabi_version < ELFABIVERSION_AMDGPU_HSA_V3)
+    return false;
+
+  mach = elf_elfheader (abfd)->e_flags & EF_AMDGPU_MACH;
+
+  /* Avoid matching non-AMDGCN AMDGPU objects (e.g. r600).  */
+  if (mach < EF_AMDGPU_MACH_AMDGCN_MIN)
+    return false;
+
+  bfd_default_set_arch_mach (abfd, bfd_arch_amdgcn, mach);
+  return true;
+}
+
+
+#define TARGET_LITTLE_SYM	amdgcn_elf64_le_vec
+#define TARGET_LITTLE_NAME	"elf64-amdgcn"
+#define ELF_ARCH		bfd_arch_amdgcn
+#define ELF_TARGET_ID		AMDGCN_ELF_DATA
+#define ELF_MACHINE_CODE	EM_AMDGPU
+#define ELF_MAXPAGESIZE		0x10000 /* 64KB */
+#define ELF_COMMONPAGESIZE	0x1000  /* 4KB */
+
+#define bfd_elf64_bfd_reloc_type_lookup bfd_default_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
+
+#define elf_backend_object_p elf64_amdgcn_object_p
+
+#include "elf64-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-bpf.c ./bfd/elf64-bpf.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-bpf.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-bpf.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Linux bpf specific support for 64-bit ELF
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
    Contributed by Oracle Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -31,214 +31,43 @@
 
 #define BASEADDR(SEC)	((SEC)->output_section->vma + (SEC)->output_offset)
 
+static bfd_reloc_status_type bpf_elf_generic_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+
+#undef BPF_HOWTO
+#define BPF_HOWTO(type, right, size, bits, pcrel, left, ovf, func, name,   \
+		  inplace, src_mask, dst_mask, pcrel_off)                  \
+	type##_IDX,
+enum bpf_reloc_index {
+  R_BPF_INVALID_IDX = -1,
+#include "bpf-reloc.def"
+  R_BPF_SIZE
+};
+#undef BPF_HOWTO
+
 /* Relocation tables.  */
+#define BPF_HOWTO(...) HOWTO(__VA_ARGS__),
 static reloc_howto_type bpf_elf_howto_table [] =
 {
-  /* This reloc does nothing.  */
-  HOWTO (R_BPF_NONE,		/* type */
-	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 64-immediate in LDDW instruction.  */
-  HOWTO (R_BPF_INSN_64,		/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_INSN_64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 32-immediate in LDDW instruction.  */
-  HOWTO (R_BPF_INSN_32,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_INSN_32",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 16-bit offsets in instructions.  */
-  HOWTO (R_BPF_INSN_16,		/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_INSN_16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 16-bit PC-relative address in jump instructions.  */
-  HOWTO (R_BPF_INSN_DISP16,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 32,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_INSN_DISP16",   /* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_BPF_DATA_8_PCREL,
-	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_8_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_BPF_DATA_16_PCREL,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_BPF_DATA_32_PCREL,
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_32_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_BPF_DATA_8,
-	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_unsigned, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_DATA_8",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_BPF_DATA_16,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_unsigned, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_DATA_16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32-bit PC-relative address in call instructions.  */
-  HOWTO (R_BPF_INSN_DISP32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_INSN_DISP32",   /* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 32-bit data.  */
-  HOWTO (R_BPF_DATA_32,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_DATA_32",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 64-bit data.  */
-  HOWTO (R_BPF_DATA_64,		/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_DATA_64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_BPF_DATA_64_PCREL,
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_BPF_64_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  #include "bpf-reloc.def"
 };
 #undef AHOW
+#undef BPF_HOWTO
+
+#define BPF_HOWTO(type, right, size, bits, pcrel, left, ovf, func, name,   \
+		  inplace, src_mask, dst_mask, pcrel_off)                  \
+    case type: { return type##_IDX; }
+static enum bpf_reloc_index
+bpf_index_for_rtype(unsigned int r_type)
+{
+  switch(r_type) {
+#include "bpf-reloc.def"
+    default:
+      /* Unreachable code. */
+      BFD_ASSERT(0);
+      return -1;
+  };
+}
 
 /* Map BFD reloc types to bpf ELF reloc types.  */
 
@@ -246,44 +75,23 @@ static reloc_howto_type *
 bpf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
                         bfd_reloc_code_real_type code)
 {
-  /* Note that the bpf_elf_howto_table is indexed by the R_ constants.
-     Thus, the order that the howto records appear in the table *must*
-     match the order of the relocation types defined in
-     include/elf/bpf.h.  */
-
   switch (code)
     {
     case BFD_RELOC_NONE:
-      return &bpf_elf_howto_table[ (int) R_BPF_NONE];
+      return &bpf_elf_howto_table[ (int) R_BPF_NONE_IDX];
 
-    case BFD_RELOC_8_PCREL:
-      return &bpf_elf_howto_table[ (int) R_BPF_DATA_8_PCREL];
-    case BFD_RELOC_16_PCREL:
-      return &bpf_elf_howto_table[ (int) R_BPF_DATA_16_PCREL];
-    case BFD_RELOC_32_PCREL:
-      return &bpf_elf_howto_table[ (int) R_BPF_DATA_32_PCREL];
-    case BFD_RELOC_64_PCREL:
-      return &bpf_elf_howto_table[ (int) R_BPF_DATA_64_PCREL];
-
-    case BFD_RELOC_8:
-      return &bpf_elf_howto_table[ (int) R_BPF_DATA_8];
-    case BFD_RELOC_16:
-      return &bpf_elf_howto_table[ (int) R_BPF_DATA_16];
     case BFD_RELOC_32:
-      return &bpf_elf_howto_table[ (int) R_BPF_DATA_32];
+      return &bpf_elf_howto_table[ (int) R_BPF_64_ABS32_IDX];
     case BFD_RELOC_64:
-      return &bpf_elf_howto_table[ (int) R_BPF_DATA_64];
+      return &bpf_elf_howto_table[ (int) R_BPF_64_ABS64_IDX];
 
     case BFD_RELOC_BPF_64:
-      return &bpf_elf_howto_table[ (int) R_BPF_INSN_64];
-    case BFD_RELOC_BPF_32:
-      return &bpf_elf_howto_table[ (int) R_BPF_INSN_32];
-    case BFD_RELOC_BPF_16:
-      return &bpf_elf_howto_table[ (int) R_BPF_INSN_16];
-    case BFD_RELOC_BPF_DISP16:
-      return &bpf_elf_howto_table[ (int) R_BPF_INSN_DISP16];
+      return &bpf_elf_howto_table[ (int) R_BPF_64_64_IDX];
     case BFD_RELOC_BPF_DISP32:
-      return &bpf_elf_howto_table[ (int) R_BPF_INSN_DISP32];
+    case BFD_RELOC_BPF_DISPCALL32:
+      return &bpf_elf_howto_table[ (int) R_BPF_64_32_IDX];
+    case BFD_RELOC_BPF_DISP16:
+      return &bpf_elf_howto_table[ (int) R_BPF_GNU_64_16_IDX];
 
     default:
       /* Pacify gcc -Wall.  */
@@ -299,7 +107,7 @@ bpf_reloc_name_lookup (bfd *abfd ATTRIBU
 {
   unsigned int i;
 
-  for (i = 0; i < ARRAY_SIZE (bpf_elf_howto_table); i++)
+  for (i = 0; i < R_BPF_SIZE; i++)
     if (bpf_elf_howto_table[i].name != NULL
 	&& strcasecmp (bpf_elf_howto_table[i].name, r_name) == 0)
       return &bpf_elf_howto_table[i];
@@ -309,24 +117,26 @@ bpf_reloc_name_lookup (bfd *abfd ATTRIBU
 
 /* Set the howto pointer for a bpf reloc.  */
 
-static bfd_boolean
+static bool
 bpf_info_to_howto (bfd *abfd, arelent *bfd_reloc,
                     Elf_Internal_Rela *elf_reloc)
 {
   unsigned int r_type;
-
+  unsigned int i;
   r_type = ELF64_R_TYPE (elf_reloc->r_info);
-  if (r_type >= (unsigned int) R_BPF_max)
+
+  i = bpf_index_for_rtype(r_type);
+  if (i == (unsigned int) -1)
     {
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
                           abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  bfd_reloc->howto = &bpf_elf_howto_table [r_type];
-  return TRUE;
+  bfd_reloc->howto = &bpf_elf_howto_table [i];
+  return true;
 }
 
 /* Relocate an eBPF ELF section.
@@ -361,7 +171,7 @@ bpf_info_to_howto (bfd *abfd, arelent *b
 
 #define sec_addr(sec) ((sec)->output_section->vma + (sec)->output_offset)
 
-static bfd_boolean
+static int
 bpf_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
                           struct bfd_link_info *info,
                           bfd *input_bfd,
@@ -383,6 +193,7 @@ bpf_elf_relocate_section (bfd *output_bf
   for (rel = relocs; rel < relend; rel ++)
     {
       reloc_howto_type *	   howto;
+      unsigned int		   howto_index;
       unsigned long		   r_symndx;
       Elf_Internal_Sym *	   sym;
       asection *		   sec;
@@ -391,13 +202,18 @@ bpf_elf_relocate_section (bfd *output_bf
       bfd_reloc_status_type	   r;
       const char *		   name = NULL;
       int			   r_type ATTRIBUTE_UNUSED;
+      bfd_signed_vma               addend;
+      bfd_byte                   * where;
 
       r_type = ELF64_R_TYPE (rel->r_info);
       r_symndx = ELF64_R_SYM (rel->r_info);
-      howto  = bpf_elf_howto_table + ELF64_R_TYPE (rel->r_info);
+
+      howto_index = bpf_index_for_rtype (ELF64_R_TYPE (rel->r_info));
+      howto  = &bpf_elf_howto_table[howto_index];
       h      = NULL;
       sym    = NULL;
       sec    = NULL;
+      where  = contents + rel->r_offset;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -411,9 +227,9 @@ bpf_elf_relocate_section (bfd *output_bf
 	}
       else
 	{
-	  bfd_boolean warned ATTRIBUTE_UNUSED;
-	  bfd_boolean unresolved_reloc ATTRIBUTE_UNUSED;
-	  bfd_boolean ignored ATTRIBUTE_UNUSED;
+	  bool warned ATTRIBUTE_UNUSED;
+	  bool unresolved_reloc ATTRIBUTE_UNUSED;
+	  bool ignored ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -432,16 +248,14 @@ bpf_elf_relocate_section (bfd *output_bf
 
       switch (howto->type)
         {
-        case R_BPF_INSN_DISP16:
-        case R_BPF_INSN_DISP32:
+	case R_BPF_64_32:
           {
-            bfd_signed_vma addend;
-            
             /* Make the relocation PC-relative, and change its unit to
-               64-bit words.  */
-            relocation -= sec_addr (input_section) + rel->r_offset;
-            /* Make it 64-bit words.  */
-            relocation = relocation / 8;
+               64-bit words.  Note we need *signed* arithmetic
+               here.  */
+            relocation = ((bfd_signed_vma) relocation
+			  - (sec_addr (input_section) + rel->r_offset));
+            relocation = (bfd_signed_vma) relocation / 8;
             
             /* Get the addend from the instruction and apply it.  */
             addend = bfd_get (howto->bitsize, input_bfd,
@@ -460,12 +274,50 @@ bpf_elf_relocate_section (bfd *output_bf
             r = bfd_reloc_ok;
             break;
           }
+	case R_BPF_64_ABS64:
+	case R_BPF_64_ABS32:
+	case R_BPF_64_NODYLD32:
+	  {
+	    addend = bfd_get (howto->bitsize, input_bfd, where);
+	    relocation += addend;
+	    bfd_put (howto->bitsize, input_bfd, relocation, where);
+
+	    r = bfd_reloc_ok;
+	    break;
+	  }
+	case R_BPF_64_64:
+          {
+            /*
+                LDDW instructions are 128 bits long, with a 64-bit immediate.
+                The lower 32 bits of the immediate are in the same position
+                as the imm32 field of other instructions.
+                The upper 32 bits of the immediate are stored at the end of
+                the instruction.
+             */
+
+
+            /* Get the addend. The upper and lower 32 bits are split.
+               'where' is the beginning of the 16-byte instruction. */
+            addend = bfd_get_32 (input_bfd, where + 4);
+            addend |= (bfd_get_32 (input_bfd, where + 12) << 32);
+
+            relocation += addend;
+
+            bfd_put_32 (input_bfd, (relocation & 0xFFFFFFFF), where + 4);
+            bfd_put_32 (input_bfd, (relocation >> 32), where + 12);
+            r = bfd_reloc_ok;
+            break;
+          }
         default:
-          r = _bfd_final_link_relocate (howto, input_bfd, input_section,
-                                        contents, rel->r_offset, relocation,
-                                        rel->r_addend);
+	  r = bfd_reloc_notsupported;
         }
 
+      if (r == bfd_reloc_ok)
+	  r = bfd_check_overflow (howto->complain_on_overflow,
+				  howto->bitsize,
+				  howto->rightshift,
+				  64, relocation);
+
       if (r != bfd_reloc_ok)
 	{
 	  const char * msg = NULL;
@@ -480,7 +332,7 @@ bpf_elf_relocate_section (bfd *output_bf
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -507,22 +359,115 @@ bpf_elf_relocate_section (bfd *output_bf
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf64_bpf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   /* Check if we have the same endianness.  */
   if (! _bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
+/* A generic howto special function for installing BPF relocations.
+   This function will be called by the assembler (via bfd_install_relocation),
+   and by various get_relocated_section_contents functions.
+   At link time, bpf_elf_relocate_section will resolve the final relocations.
+
+   BPF instructions are always big endian, and this approach avoids problems in
+   bfd_install_relocation.  */
+
+static bfd_reloc_status_type
+bpf_elf_generic_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+		       void *data, asection *input_section, bfd *output_bfd,
+		       char **error_message ATTRIBUTE_UNUSED)
+{
+
+  bfd_signed_vma relocation;
+  bfd_reloc_status_type status;
+  bfd_byte *where;
+
+  /* From bfd_elf_generic_reloc.  */
+  if (output_bfd != NULL
+      && (symbol->flags & BSF_SECTION_SYM) == 0
+      && (! reloc_entry->howto->partial_inplace
+	  || reloc_entry->addend == 0))
+    {
+      reloc_entry->address += input_section->output_offset;
+      return bfd_reloc_ok;
+    }
+
+  if (output_bfd == NULL
+      && !reloc_entry->howto->pc_relative
+      && (symbol->section->flags & SEC_DEBUGGING) != 0
+      && (input_section->flags & SEC_DEBUGGING) != 0)
+    reloc_entry->addend -= symbol->section->output_section->vma;
+
+  /* Sanity check that the address is in range.  */
+  bfd_size_type end = bfd_get_section_limit_octets (abfd, input_section);
+  bfd_size_type reloc_size;
+  if (reloc_entry->howto->type == R_BPF_64_64)
+    reloc_size = 16;
+  else
+    reloc_size = (reloc_entry->howto->bitsize
+		  + reloc_entry->howto->bitpos) / 8;
+
+  if (reloc_entry->address > end
+      || end - reloc_entry->address < reloc_size)
+    return bfd_reloc_outofrange;
+
+  /* Behave similarly to bfd_install_relocation with install_addend set.
+     That is, just install the addend and do not include the value of
+     the symbol.  */
+  relocation = reloc_entry->addend;
+
+  if (symbol->flags & BSF_SECTION_SYM)
+    /* Relocation against a section symbol: add in the section base address.  */
+    relocation += BASEADDR (symbol->section);
+
+  where = (bfd_byte *) data + reloc_entry->address;
+
+  status = bfd_check_overflow (reloc_entry->howto->complain_on_overflow,
+			       reloc_entry->howto->bitsize,
+			       reloc_entry->howto->rightshift, 64, relocation);
+
+  if (status != bfd_reloc_ok)
+    return status;
+
+  /* Now finally install the relocation.  */
+  if (reloc_entry->howto->type == R_BPF_64_64)
+    {
+      /* lddw is a 128-bit (!) instruction that allows loading a 64-bit
+	 immediate into a register. the immediate is split in half, with the
+	 lower 32 bits in the same position as the imm32 field of other
+	 instructions, and the upper 32 bits placed at the very end of the
+	 instruction. that is, there are 32 unused bits between them. */
+
+      bfd_put_32 (abfd, (relocation & 0xFFFFFFFF), where + 4);
+      bfd_put_32 (abfd, (relocation >> 32), where + 12);
+    }
+  else
+    {
+      /* For other kinds of relocations, the relocated value simply goes
+	 BITPOS bits from the start of the entry. This is always a multiple
+	 of 8, i.e. whole bytes.  */
+      bfd_put (reloc_entry->howto->bitsize, abfd, relocation,
+	       where + reloc_entry->howto->bitpos / 8);
+    }
+
+  if (output_bfd != NULL)
+    reloc_entry->address += input_section->output_offset;
+
+  return bfd_reloc_ok;
+}
+
+
 /* The macros below configure the architecture.  */
 
 #define TARGET_LITTLE_SYM bpf_elf64_le_vec
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64.c ./bfd/elf64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF 64-bit executable support for BFD.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-gen.c ./bfd/elf64-gen.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-gen.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-gen.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic support for 64-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,34 +29,34 @@
 static reloc_howto_type dummy =
   HOWTO (0,			/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "UNKNOWN",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
-static bfd_boolean
+static bool
 elf_generic_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 			   arelent *bfd_reloc,
 			   Elf_Internal_Rela *elf_reloc ATTRIBUTE_UNUSED)
 {
   bfd_reloc->howto = &dummy;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_generic_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
 			       arelent *bfd_reloc,
 			       Elf_Internal_Rela *elf_reloc ATTRIBUTE_UNUSED)
 {
   bfd_reloc->howto = &dummy;
-  return TRUE;
+  return true;
 }
 
 static void
@@ -72,20 +72,20 @@ check_for_relocs (bfd * abfd, asection *
 			  abfd, ehdrp->e_machine);
 
       bfd_set_error (bfd_error_wrong_format);
-      * (bfd_boolean *) failed = TRUE;
+      * (bool *) failed = true;
     }
 }
 
-static bfd_boolean
+static bool
 elf64_generic_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
-  bfd_boolean failed = FALSE;
+  bool failed = false;
 
   /* Check if there are any relocations.  */
   bfd_map_over_sections (abfd, check_for_relocs, & failed);
 
   if (failed)
-    return FALSE;
+    return false;
   return bfd_elf_link_add_symbols (abfd, info);
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-hppa.c ./bfd/elf64-hppa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-hppa.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-hppa.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for HPPA 64-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -19,7 +19,6 @@
    MA 02110-1301, USA.  */
 
 #include "sysdep.h"
-#include "alloca-conf.h"
 #include "bfd.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
@@ -117,8 +116,6 @@ struct elf64_hppa_link_hash_table
   /* Shortcuts to get to the various linker defined sections.  */
   asection *dlt_sec;
   asection *dlt_rel_sec;
-  asection *plt_sec;
-  asection *plt_rel_sec;
   asection *opd_sec;
   asection *opd_rel_sec;
   asection *other_rel_sec;
@@ -147,8 +144,9 @@ struct elf64_hppa_link_hash_table
 };
 
 #define hppa_link_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == HPPA64_ELF_DATA ? ((struct elf64_hppa_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == HPPA64_ELF_DATA)	\
+   ? (struct elf64_hppa_link_hash_table *) (p)->hash : NULL)
 
 #define hppa_elf_hash_entry(ent) \
   ((struct elf64_hppa_link_hash_entry *)(ent))
@@ -166,83 +164,83 @@ static struct bfd_link_hash_table *elf64
    hash tables and shared functions.  */
 #include "elf-hppa.h"
 
-static bfd_boolean elf64_hppa_object_p
+static bool elf64_hppa_object_p
   (bfd *);
 
-static bfd_boolean elf64_hppa_create_dynamic_sections
+static bool elf64_hppa_create_dynamic_sections
   (bfd *, struct bfd_link_info *);
 
-static bfd_boolean elf64_hppa_adjust_dynamic_symbol
+static bool elf64_hppa_adjust_dynamic_symbol
   (struct bfd_link_info *, struct elf_link_hash_entry *);
 
-static bfd_boolean elf64_hppa_mark_milli_and_exported_functions
+static bool elf64_hppa_mark_milli_and_exported_functions
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean elf64_hppa_size_dynamic_sections
+static bool elf64_hppa_size_dynamic_sections
   (bfd *, struct bfd_link_info *);
 
 static int elf64_hppa_link_output_symbol_hook
   (struct bfd_link_info *, const char *, Elf_Internal_Sym *,
    asection *, struct elf_link_hash_entry *);
 
-static bfd_boolean elf64_hppa_finish_dynamic_symbol
+static bool elf64_hppa_finish_dynamic_symbol
   (bfd *, struct bfd_link_info *,
    struct elf_link_hash_entry *, Elf_Internal_Sym *);
 
-static bfd_boolean elf64_hppa_finish_dynamic_sections
+static bool elf64_hppa_finish_dynamic_sections
   (bfd *, struct bfd_link_info *);
 
-static bfd_boolean elf64_hppa_check_relocs
+static bool elf64_hppa_check_relocs
   (bfd *, struct bfd_link_info *,
    asection *, const Elf_Internal_Rela *);
 
-static bfd_boolean elf64_hppa_dynamic_symbol_p
+static bool elf64_hppa_dynamic_symbol_p
   (struct elf_link_hash_entry *, struct bfd_link_info *);
 
-static bfd_boolean elf64_hppa_mark_exported_functions
+static bool elf64_hppa_mark_exported_functions
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean elf64_hppa_finalize_opd
+static bool elf64_hppa_finalize_opd
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean elf64_hppa_finalize_dlt
+static bool elf64_hppa_finalize_dlt
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean allocate_global_data_dlt
+static bool allocate_global_data_dlt
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean allocate_global_data_plt
+static bool allocate_global_data_plt
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean allocate_global_data_stub
+static bool allocate_global_data_stub
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean allocate_global_data_opd
+static bool allocate_global_data_opd
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean get_reloc_section
+static bool get_reloc_section
   (bfd *, struct elf64_hppa_link_hash_table *, asection *);
 
-static bfd_boolean count_dyn_reloc
+static bool count_dyn_reloc
   (bfd *, struct elf64_hppa_link_hash_entry *,
    int, asection *, int, bfd_vma, bfd_vma);
 
-static bfd_boolean allocate_dynrel_entries
+static bool allocate_dynrel_entries
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean elf64_hppa_finalize_dynreloc
+static bool elf64_hppa_finalize_dynreloc
   (struct elf_link_hash_entry *, void *);
 
-static bfd_boolean get_opd
+static bool get_opd
   (bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *);
 
-static bfd_boolean get_plt
+static bool get_plt
   (bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *);
 
-static bfd_boolean get_dlt
+static bool get_dlt
   (bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *);
 
-static bfd_boolean get_stub
+static bool get_stub
   (bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *);
 
 static int elf64_hppa_elf_get_symbol_type
@@ -289,7 +287,7 @@ static struct bfd_link_hash_table*
 elf64_hppa_hash_table_create (bfd *abfd)
 {
   struct elf64_hppa_link_hash_table *htab;
-  bfd_size_type amt = sizeof (*htab);
+  size_t amt = sizeof (*htab);
 
   htab = bfd_zmalloc (amt);
   if (htab == NULL)
@@ -304,6 +302,7 @@ elf64_hppa_hash_table_create (bfd *abfd)
       return NULL;
     }
 
+  htab->root.dt_pltgot_required = true;
   htab->text_segment_base = (bfd_vma) -1;
   htab->data_segment_base = (bfd_vma) -1;
 
@@ -313,7 +312,7 @@ elf64_hppa_hash_table_create (bfd *abfd)
 /* Return nonzero if ABFD represents a PA2.0 ELF64 file.
 
    Additionally we set the default architecture and machine.  */
-static bfd_boolean
+static bool
 elf64_hppa_object_p (bfd *abfd)
 {
   Elf_Internal_Ehdr * i_ehdrp;
@@ -326,7 +325,7 @@ elf64_hppa_object_p (bfd *abfd)
 	 but the kernel produces corefiles with OSABI=SysV.  */
       if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU
 	  && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_NONE) /* aka SYSV */
-	return FALSE;
+	return false;
     }
   else
     {
@@ -334,7 +333,7 @@ elf64_hppa_object_p (bfd *abfd)
 	 but the kernel produces corefiles with OSABI=SysV.  */
       if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_HPUX
 	  && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_NONE) /* aka SYSV */
-	return FALSE;
+	return false;
     }
 
   flags = i_ehdrp->e_flags;
@@ -353,12 +352,12 @@ elf64_hppa_object_p (bfd *abfd)
       return bfd_default_set_arch_mach (abfd, bfd_arch_hppa, 25);
     }
   /* Don't be fussy.  */
-  return TRUE;
+  return true;
 }
 
 /* Given section type (hdr->sh_type), return a boolean indicating
    whether or not the section is an elf64-hppa specific section.  */
-static bfd_boolean
+static bool
 elf64_hppa_section_from_shdr (bfd *abfd,
 			      Elf_Internal_Shdr *hdr,
 			      const char *name,
@@ -368,28 +367,30 @@ elf64_hppa_section_from_shdr (bfd *abfd,
     {
     case SHT_PARISC_EXT:
       if (strcmp (name, ".PARISC.archext") != 0)
-	return FALSE;
+	return false;
       break;
     case SHT_PARISC_UNWIND:
       if (strcmp (name, ".PARISC.unwind") != 0)
-	return FALSE;
+	return false;
       break;
     case SHT_PARISC_DOC:
     case SHT_PARISC_ANNOT:
     default:
-      return FALSE;
+      return false;
     }
 
   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return ((hdr->sh_flags & SHF_PARISC_SHORT) == 0
+	  || bfd_set_section_flags (hdr->bfd_section,
+				    hdr->bfd_section->flags | SEC_SMALL_DATA));
 }
 
 /* SEC is a section containing relocs for an input BFD when linking; return
    a suitable section for holding relocs in the output BFD for a link.  */
 
-static bfd_boolean
+static bool
 get_reloc_section (bfd *abfd,
 		   struct elf64_hppa_link_hash_table *hppa_info,
 		   asection *sec)
@@ -402,7 +403,7 @@ get_reloc_section (bfd *abfd,
 	       (abfd, elf_elfheader(abfd)->e_shstrndx,
 		_bfd_elf_single_rel_hdr(sec)->sh_name));
   if (srel_name == NULL)
-    return FALSE;
+    return false;
 
   dynobj = hppa_info->root.dynobj;
   if (!dynobj)
@@ -420,11 +421,11 @@ get_reloc_section (bfd *abfd,
 						  | SEC_READONLY));
       if (srel == NULL
 	  || !bfd_set_section_alignment (srel, 3))
-	return FALSE;
+	return false;
     }
 
   hppa_info->other_rel_sec = srel;
-  return TRUE;
+  return true;
 }
 
 /* Add a new entry to the list of dynamic relocations against DYN_H.
@@ -433,7 +434,7 @@ get_reloc_section (bfd *abfd,
    particular symbol so that we can create FPTR relocations in the
    output file.  */
 
-static bfd_boolean
+static bool
 count_dyn_reloc (bfd *abfd,
 		 struct elf64_hppa_link_hash_entry *hh,
 		 int type,
@@ -447,7 +448,7 @@ count_dyn_reloc (bfd *abfd,
   rent = (struct elf64_hppa_dyn_reloc_entry *)
   bfd_alloc (abfd, (bfd_size_type) sizeof (*rent));
   if (!rent)
-    return FALSE;
+    return false;
 
   rent->next = hh->reloc_entries;
   rent->type = type;
@@ -457,7 +458,7 @@ count_dyn_reloc (bfd *abfd,
   rent->addend = addend;
   hh->reloc_entries = rent;
 
-  return TRUE;
+  return true;
 }
 
 /* Return a pointer to the local DLT, PLT and OPD reference counts
@@ -488,7 +489,7 @@ hppa64_elf_local_refcounts (bfd *abfd)
 /* Scan the RELOCS and record the type of dynamic entries that each
    referenced symbol needs.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_check_relocs (bfd *abfd,
 			 struct bfd_link_info *info,
 			 asection *sec,
@@ -501,19 +502,19 @@ elf64_hppa_check_relocs (bfd *abfd,
   unsigned int sec_symndx;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* If this is the first dynamic object found in the link, create
      the special sections required for dynamic linking.  */
   if (! elf_hash_table (info)->dynamic_sections_created)
     {
       if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
-	return FALSE;
+	return false;
     }
 
   hppa_info = hppa_link_hash_table (info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
   /* If necessary, build a new table holding section symbols indices
@@ -532,8 +533,7 @@ elf64_hppa_check_relocs (bfd *abfd,
 
 	 ?!? Note we leak the last section_syms array.  Presumably we
 	 could free it in one of the later routines in this file.  */
-      if (hppa_info->section_syms)
-	free (hppa_info->section_syms);
+      free (hppa_info->section_syms);
 
       /* Read this BFD's local symbols.  */
       if (symtab_hdr->sh_info != 0)
@@ -544,7 +544,7 @@ elf64_hppa_check_relocs (bfd *abfd,
 					       symtab_hdr->sh_info, 0,
 					       NULL, NULL, NULL);
 	  if (local_syms == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       /* Record the highest section index referenced by the local symbols.  */
@@ -600,7 +600,7 @@ elf64_hppa_check_relocs (bfd *abfd,
       /* If we did not find a section symbol for this section, then
 	 something went terribly wrong above.  */
       if (sec_symndx == SHN_BAD)
-	return FALSE;
+	return false;
 
       if (sec_symndx < SHN_LORESERVE)
 	sec_symndx = hppa_info->section_syms[sec_symndx];
@@ -625,7 +625,7 @@ elf64_hppa_check_relocs (bfd *abfd,
       unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
       struct elf64_hppa_link_hash_entry *hh;
       int need_entry;
-      bfd_boolean maybe_dynamic;
+      bool maybe_dynamic;
       int dynrel_type = R_PARISC_NONE;
       static reloc_howto_type *howto;
 
@@ -650,13 +650,13 @@ elf64_hppa_check_relocs (bfd *abfd,
 	 locally or externally defined, as not all of the input files
 	 have yet been processed.  Do something with what we know, as
 	 this may help reduce memory usage and processing time later.  */
-      maybe_dynamic = FALSE;
+      maybe_dynamic = false;
       if (hh && ((bfd_link_pic (info)
 		 && (!info->symbolic
 		     || info->unresolved_syms_in_shared_libs == RM_IGNORE))
 		|| !hh->eh.def_regular
 		|| hh->eh.root.type == bfd_link_hash_defweak))
-	maybe_dynamic = TRUE;
+	maybe_dynamic = true;
 
       howto = elf_hppa_howto_table + ELF64_R_TYPE (rel->r_info);
       need_entry = 0;
@@ -794,14 +794,14 @@ elf64_hppa_check_relocs (bfd *abfd,
 	      /* This is a DLT entry for a local symbol.  */
 	      local_dlt_refcounts = hppa64_elf_local_refcounts (abfd);
 	      if (local_dlt_refcounts == NULL)
-		return FALSE;
+		return false;
 	      local_dlt_refcounts[r_symndx] += 1;
 	    }
 	}
 
       if (need_entry & NEED_PLT)
 	{
-	  if (! hppa_info->plt_sec
+	  if (! hppa_info->root.splt
 	      && ! get_plt (abfd, info, hppa_info))
 	    goto err_out;
 
@@ -819,7 +819,7 @@ elf64_hppa_check_relocs (bfd *abfd,
 	      /* This is a PLT entry for a local symbol.  */
 	      local_dlt_refcounts = hppa64_elf_local_refcounts (abfd);
 	      if (local_dlt_refcounts == NULL)
-		return FALSE;
+		return false;
 	      local_plt_refcounts = local_dlt_refcounts + symtab_hdr->sh_info;
 	      local_plt_refcounts[r_symndx] += 1;
 	    }
@@ -853,7 +853,7 @@ elf64_hppa_check_relocs (bfd *abfd,
 	      /* This is a OPD for a local symbol.  */
 	      local_dlt_refcounts = hppa64_elf_local_refcounts (abfd);
 	      if (local_dlt_refcounts == NULL)
-		return FALSE;
+		return false;
 	      local_opd_refcounts = (local_dlt_refcounts
 				     + 2 * symtab_hdr->sh_info);
 	      local_opd_refcounts[r_symndx] += 1;
@@ -881,14 +881,14 @@ elf64_hppa_check_relocs (bfd *abfd,
 	  if (bfd_link_pic (info) && dynrel_type == R_PARISC_FPTR64
 	      && ! (bfd_elf_link_record_local_dynamic_symbol
 		    (info, abfd, sec_symndx)))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 
  err_out:
-  return FALSE;
+  return false;
 }
 
 struct elf64_hppa_allocate_data
@@ -899,7 +899,7 @@ struct elf64_hppa_allocate_data
 
 /* Should we do dynamic things to this symbol?  */
 
-static bfd_boolean
+static bool
 elf64_hppa_dynamic_symbol_p (struct elf_link_hash_entry *eh,
 			     struct bfd_link_info *info)
 {
@@ -910,18 +910,18 @@ elf64_hppa_dynamic_symbol_p (struct elf_
     {
       /* ??? Why is this here and not elsewhere is_local_label_name.  */
       if (eh->root.root.string[0] == '$' && eh->root.root.string[1] == '$')
-	return FALSE;
+	return false;
 
-      return TRUE;
+      return true;
     }
   else
-    return FALSE;
+    return false;
 }
 
 /* Mark all functions exported by this file so that we can later allocate
    entries in .opd for them.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_mark_exported_functions (struct elf_link_hash_entry *eh, void *data)
 {
   struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
@@ -930,7 +930,7 @@ elf64_hppa_mark_exported_functions (stru
 
   hppa_info = hppa_link_hash_table (info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   if (eh
       && (eh->root.type == bfd_link_hash_defined
@@ -940,7 +940,7 @@ elf64_hppa_mark_exported_functions (stru
     {
       if (! hppa_info->opd_sec
 	  && ! get_opd (hppa_info->root.dynobj, info, hppa_info))
-	return FALSE;
+	return false;
 
       hh->want_opd = 1;
 
@@ -949,12 +949,12 @@ elf64_hppa_mark_exported_functions (stru
       eh->needs_plt = 1;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space for a DLT entry.  */
 
-static bfd_boolean
+static bool
 allocate_global_data_dlt (struct elf_link_hash_entry *eh, void *data)
 {
   struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
@@ -973,19 +973,19 @@ allocate_global_data_dlt (struct elf_lin
 
 	      if (! (bfd_elf_link_record_local_dynamic_symbol
 		     (x->info, owner, hh->sym_indx)))
-		return FALSE;
+		return false;
 	    }
 	}
 
       hh->dlt_offset = x->ofs;
       x->ofs += DLT_ENTRY_SIZE;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate space for a DLT.PLT entry.  */
 
-static bfd_boolean
+static bool
 allocate_global_data_plt (struct elf_link_hash_entry *eh, void *data)
 {
   struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
@@ -1005,7 +1005,7 @@ allocate_global_data_plt (struct elf_lin
 
 	  hppa_info = hppa_link_hash_table (x->info);
 	  if (hppa_info == NULL)
-	    return FALSE;
+	    return false;
 
 	  hppa_info->gp_offset = hh->plt_offset;
 	}
@@ -1013,12 +1013,12 @@ allocate_global_data_plt (struct elf_lin
   else
     hh->want_plt = 0;
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space for a STUB entry.  */
 
-static bfd_boolean
+static bool
 allocate_global_data_stub (struct elf_link_hash_entry *eh, void *data)
 {
   struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
@@ -1035,12 +1035,12 @@ allocate_global_data_stub (struct elf_li
     }
   else
     hh->want_stub = 0;
-  return TRUE;
+  return true;
 }
 
 /* Allocate space for a FPTR entry.  */
 
-static bfd_boolean
+static bool
 allocate_global_data_opd (struct elf_link_hash_entry *eh, void *data)
 {
   struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
@@ -1077,7 +1077,7 @@ allocate_global_data_opd (struct elf_lin
 
 	      if (!bfd_elf_link_record_local_dynamic_symbol
 		    (x->info, owner, hh->sym_indx))
-		return FALSE;
+		return false;
 	    }
 
 	  /* This may not be necessary or desirable anymore now that
@@ -1093,7 +1093,7 @@ allocate_global_data_opd (struct elf_lin
 	      new_name = concat (".", eh->root.root.string, NULL);
 
 	      nh = elf_link_hash_lookup (elf_hash_table (x->info),
-					 new_name, TRUE, TRUE, TRUE);
+					 new_name, true, true, true);
 
 	      free (new_name);
 	      nh->root.type = eh->root.type;
@@ -1101,7 +1101,7 @@ allocate_global_data_opd (struct elf_lin
 	      nh->root.u.def.section = eh->root.u.def.section;
 
 	      if (! bfd_elf_link_record_dynamic_symbol (x->info, nh))
-		return FALSE;
+		return false;
 	     }
 	  hh->opd_offset = x->ofs;
 	  x->ofs += OPD_ENTRY_SIZE;
@@ -1111,24 +1111,24 @@ allocate_global_data_opd (struct elf_lin
       else
 	hh->want_opd = 0;
     }
-  return TRUE;
+  return true;
 }
 
 /* HP requires the EI_OSABI field to be filled in.  The assignment to
    EI_ABIVERSION may not be strictly necessary.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_init_file_header (bfd *abfd, struct bfd_link_info *info)
 {
   Elf_Internal_Ehdr *i_ehdrp;
 
   if (!_bfd_elf_init_file_header (abfd, info))
-    return FALSE;
+    return false;
 
   i_ehdrp = elf_elfheader (abfd);
   i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
   i_ehdrp->e_ident[EI_ABIVERSION] = 1;
-  return TRUE;
+  return true;
 }
 
 /* Create function descriptor section (.opd).  This section is called .opd
@@ -1136,7 +1136,7 @@ elf64_hppa_init_file_header (bfd *abfd,
    refers to the fact that these descriptors are used when taking the address
    of a procedure, thus ensuring a unique address for each procedure.  */
 
-static bfd_boolean
+static bool
 get_opd (bfd *abfd,
 	 struct bfd_link_info *info ATTRIBUTE_UNUSED,
 	 struct elf64_hppa_link_hash_table *hppa_info)
@@ -1161,18 +1161,18 @@ get_opd (bfd *abfd,
 	  || !bfd_set_section_alignment (opd, 3))
 	{
 	  BFD_ASSERT (0);
-	  return FALSE;
+	  return false;
 	}
 
       hppa_info->opd_sec = opd;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create the PLT section.  */
 
-static bfd_boolean
+static bool
 get_plt (bfd *abfd,
 	 struct bfd_link_info *info ATTRIBUTE_UNUSED,
 	 struct elf64_hppa_link_hash_table *hppa_info)
@@ -1180,7 +1180,7 @@ get_plt (bfd *abfd,
   asection *plt;
   bfd *dynobj;
 
-  plt = hppa_info->plt_sec;
+  plt = hppa_info->root.splt;
   if (!plt)
     {
       dynobj = hppa_info->root.dynobj;
@@ -1197,18 +1197,18 @@ get_plt (bfd *abfd,
 	  || !bfd_set_section_alignment (plt, 3))
 	{
 	  BFD_ASSERT (0);
-	  return FALSE;
+	  return false;
 	}
 
-      hppa_info->plt_sec = plt;
+      hppa_info->root.splt = plt;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create the DLT section.  */
 
-static bfd_boolean
+static bool
 get_dlt (bfd *abfd,
 	 struct bfd_link_info *info ATTRIBUTE_UNUSED,
 	 struct elf64_hppa_link_hash_table *hppa_info)
@@ -1233,18 +1233,18 @@ get_dlt (bfd *abfd,
 	  || !bfd_set_section_alignment (dlt, 3))
 	{
 	  BFD_ASSERT (0);
-	  return FALSE;
+	  return false;
 	}
 
       hppa_info->dlt_sec = dlt;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create the stubs section.  */
 
-static bfd_boolean
+static bool
 get_stub (bfd *abfd,
 	  struct bfd_link_info *info ATTRIBUTE_UNUSED,
 	  struct elf64_hppa_link_hash_table *hppa_info)
@@ -1269,13 +1269,13 @@ get_stub (bfd *abfd,
 	  || !bfd_set_section_alignment (stub, 3))
 	{
 	  BFD_ASSERT (0);
-	  return FALSE;
+	  return false;
 	}
 
       hppa_info->stub_sec = stub;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create sections necessary for dynamic linking.  This is only a rough
@@ -1316,7 +1316,7 @@ get_stub (bfd *abfd,
    .rela.opd:
 	EPLT relocations for symbols exported from shared libraries.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_create_dynamic_sections (bfd *abfd,
 				    struct bfd_link_info *info)
 {
@@ -1325,19 +1325,19 @@ elf64_hppa_create_dynamic_sections (bfd
 
   hppa_info = hppa_link_hash_table (info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   if (! get_stub (abfd, info, hppa_info))
-    return FALSE;
+    return false;
 
   if (! get_dlt (abfd, info, hppa_info))
-    return FALSE;
+    return false;
 
   if (! get_plt (abfd, info, hppa_info))
-    return FALSE;
+    return false;
 
   if (! get_opd (abfd, info, hppa_info))
-    return FALSE;
+    return false;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".rela.dlt",
 					  (SEC_ALLOC | SEC_LOAD
@@ -1347,7 +1347,7 @@ elf64_hppa_create_dynamic_sections (bfd
 					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (s, 3))
-    return FALSE;
+    return false;
   hppa_info->dlt_rel_sec = s;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".rela.plt",
@@ -1358,8 +1358,8 @@ elf64_hppa_create_dynamic_sections (bfd
 					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (s, 3))
-    return FALSE;
-  hppa_info->plt_rel_sec = s;
+    return false;
+  hppa_info->root.srelplt = s;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".rela.data",
 					  (SEC_ALLOC | SEC_LOAD
@@ -1369,7 +1369,7 @@ elf64_hppa_create_dynamic_sections (bfd
 					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (s, 3))
-    return FALSE;
+    return false;
   hppa_info->other_rel_sec = s;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".rela.opd",
@@ -1380,27 +1380,27 @@ elf64_hppa_create_dynamic_sections (bfd
 					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (s, 3))
-    return FALSE;
+    return false;
   hppa_info->opd_rel_sec = s;
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate dynamic relocations for those symbols that turned out
    to be dynamic.  */
 
-static bfd_boolean
+static bool
 allocate_dynrel_entries (struct elf_link_hash_entry *eh, void *data)
 {
   struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
   struct elf64_hppa_allocate_data *x = (struct elf64_hppa_allocate_data *)data;
   struct elf64_hppa_link_hash_table *hppa_info;
   struct elf64_hppa_dyn_reloc_entry *rent;
-  bfd_boolean dynamic_symbol, shared;
+  bool dynamic_symbol, shared;
 
   hppa_info = hppa_link_hash_table (x->info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   dynamic_symbol = elf64_hppa_dynamic_symbol_p (eh, x->info);
   shared = bfd_link_pic (x->info);
@@ -1408,7 +1408,7 @@ allocate_dynrel_entries (struct elf_link
   /* We may need to allocate relocations for a non-dynamic symbol
      when creating a shared library.  */
   if (!dynamic_symbol && !shared)
-    return TRUE;
+    return true;
 
   /* Take care of the normal data relocations.  */
 
@@ -1427,7 +1427,7 @@ allocate_dynrel_entries (struct elf_link
       if (eh->dynindx == -1 && eh->type != STT_PARISC_MILLI)
 	if (!bfd_elf_link_record_local_dynamic_symbol
 	    (x->info, rent->sec->owner, hh->sym_indx))
-	  return FALSE;
+	  return false;
     }
 
   /* Take care of the GOT and PLT relocations.  */
@@ -1453,16 +1453,16 @@ allocate_dynrel_entries (struct elf_link
       else if (shared)
 	t = 2 * sizeof (Elf64_External_Rela);
 
-      hppa_info->plt_rel_sec->size += t;
+      hppa_info->root.srelplt->size += t;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				  struct elf_link_hash_entry *eh)
 {
@@ -1478,7 +1478,7 @@ elf64_hppa_adjust_dynamic_symbol (struct
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       eh->root.u.def.section = def->root.u.def.section;
       eh->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* If this is a reference to a symbol defined by a dynamic object which
@@ -1488,7 +1488,7 @@ elf64_hppa_adjust_dynamic_symbol (struct
      But PA64 code is canonically PIC, so as a rule we can avoid this sort
      of hackery.  */
 
-  return TRUE;
+  return true;
 }
 
 /* This function is called via elf_link_hash_traverse to mark millicode
@@ -1496,7 +1496,7 @@ elf64_hppa_adjust_dynamic_symbol (struct
    from the dynamic symbol table.  If the symbol is not a millicode symbol,
    elf64_hppa_mark_exported_functions is called.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_mark_milli_and_exported_functions (struct elf_link_hash_entry *eh,
 					      void *data)
 {
@@ -1510,7 +1510,7 @@ elf64_hppa_mark_milli_and_exported_funct
 	  _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
 				  eh->dynstr_index);
 	}
-      return TRUE;
+      return true;
     }
 
   return elf64_hppa_mark_exported_functions (eh, data);
@@ -1519,7 +1519,7 @@ elf64_hppa_mark_milli_and_exported_funct
 /* Set the final sizes of the dynamic sections and allocate memory for
    the contents of our special sections.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   struct elf64_hppa_link_hash_table *hppa_info;
@@ -1527,13 +1527,11 @@ elf64_hppa_size_dynamic_sections (bfd *o
   bfd *dynobj;
   bfd *ibfd;
   asection *sec;
-  bfd_boolean plt;
-  bfd_boolean relocs;
-  bfd_boolean reltext;
+  bool relocs;
 
   hppa_info = hppa_link_hash_table (info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   dynobj = hppa_info->root.dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -1652,8 +1650,8 @@ elf64_hppa_size_dynamic_sections (bfd *o
 	}
       else
 	{
-	  sec = hppa_info->plt_sec;
-	  srel = hppa_info->plt_rel_sec;
+	  sec = hppa_info->root.splt;
+	  srel = hppa_info->root.srelplt;
 	  for (; local_plt < end_local_plt; ++local_plt)
 	    {
 	      if (*local_plt > 0)
@@ -1706,12 +1704,12 @@ elf64_hppa_size_dynamic_sections (bfd *o
       hppa_info->dlt_sec->size = data.ofs;
     }
 
-  if (hppa_info->plt_sec)
+  if (hppa_info->root.splt)
     {
-      data.ofs = hppa_info->plt_sec->size;
+      data.ofs = hppa_info->root.splt->size;
       elf_link_hash_traverse (&hppa_info->root,
 			      allocate_global_data_plt, &data);
-      hppa_info->plt_sec->size = data.ofs;
+      hppa_info->root.splt->size = data.ofs;
     }
 
   if (hppa_info->stub_sec)
@@ -1737,9 +1735,7 @@ elf64_hppa_size_dynamic_sections (bfd *o
 			    allocate_dynrel_entries, &data);
 
   /* The sizes of all the sections are set.  Allocate memory for them.  */
-  plt = FALSE;
-  relocs = FALSE;
-  reltext = FALSE;
+  relocs = false;
   for (sec = dynobj->sections; sec != NULL; sec = sec->next)
     {
       const char *name;
@@ -1754,41 +1750,23 @@ elf64_hppa_size_dynamic_sections (bfd *o
       if (strcmp (name, ".plt") == 0)
 	{
 	  /* Remember whether there is a PLT.  */
-	  plt = sec->size != 0;
+	  ;
 	}
       else if (strcmp (name, ".opd") == 0
-	       || CONST_STRNEQ (name, ".dlt")
+	       || startswith (name, ".dlt")
 	       || strcmp (name, ".stub") == 0
 	       || strcmp (name, ".got") == 0)
 	{
 	  /* Strip this section if we don't need it; see the comment below.  */
 	}
-      else if (CONST_STRNEQ (name, ".rela"))
+      else if (startswith (name, ".rela"))
 	{
 	  if (sec->size != 0)
 	    {
-	      asection *target;
-
 	      /* Remember whether there are any reloc sections other
 		 than .rela.plt.  */
 	      if (strcmp (name, ".rela.plt") != 0)
-		{
-		  const char *outname;
-
-		  relocs = TRUE;
-
-		  /* If this relocation section applies to a read only
-		     section, then we probably need a DT_TEXTREL
-		     entry.  The entries in the .rela.plt section
-		     really apply to the .got section, which we
-		     created ourselves and so know is not readonly.  */
-		  outname = bfd_section_name (sec->output_section);
-		  target = bfd_get_section_by_name (output_bfd, outname + 4);
-		  if (target != NULL
-		      && (target->flags & SEC_READONLY) != 0
-		      && (target->flags & SEC_ALLOC) != 0)
-		    reltext = TRUE;
-		}
+		relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -1829,7 +1807,7 @@ elf64_hppa_size_dynamic_sections (bfd *o
 	{
 	  sec->contents = (bfd_byte *) bfd_zalloc (dynobj, sec->size);
 	  if (sec->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -1841,9 +1819,8 @@ elf64_hppa_size_dynamic_sections (bfd *o
 #define add_dynamic_entry(TAG, VAL) \
   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-      if (!add_dynamic_entry (DT_HP_DLD_FLAGS, 0)
-	  || !add_dynamic_entry (DT_PLTGOT, 0))
-	return FALSE;
+      if (!add_dynamic_entry (DT_HP_DLD_FLAGS, 0))
+	return false;
 
       /* Add some entries to the .dynamic section.  We fill in the
 	 values later, in elf64_hppa_finish_dynamic_sections, but we
@@ -1852,43 +1829,19 @@ elf64_hppa_size_dynamic_sections (bfd *o
 	 dynamic linker and used by the debugger.  */
       if (! bfd_link_pic (info))
 	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0)
-	      || !add_dynamic_entry (DT_HP_DLD_HOOK, 0)
+	  if (!add_dynamic_entry (DT_HP_DLD_HOOK, 0)
 	      || !add_dynamic_entry (DT_HP_LOAD_MAP, 0))
-	    return FALSE;
+	    return false;
 	}
 
       /* Force DT_FLAGS to always be set.
 	 Required by HPUX 11.00 patch PHSS_26559.  */
       if (!add_dynamic_entry (DT_FLAGS, (info)->flags))
-	return FALSE;
-
-      if (plt)
-	{
-	  if (!add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
-	    return FALSE;
-	}
-
-      if (reltext)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	  info->flags |= DF_TEXTREL;
-	}
+	return false;
     }
 #undef add_dynamic_entry
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Called after we have output the symbol into the dynamic symbol
@@ -1934,7 +1887,7 @@ elf64_hppa_link_output_symbol_hook (stru
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_finish_dynamic_symbol (bfd *output_bfd,
 				  struct bfd_link_info *info,
 				  struct elf_link_hash_entry *eh,
@@ -1946,12 +1899,12 @@ elf64_hppa_finish_dynamic_symbol (bfd *o
 
   hppa_info = hppa_link_hash_table (info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   stub = hppa_info->stub_sec;
-  splt = hppa_info->plt_sec;
+  splt = hppa_info->root.splt;
   sopd = hppa_info->opd_sec;
-  spltrel = hppa_info->plt_rel_sec;
+  spltrel = hppa_info->root.srelplt;
 
   /* Incredible.  It is actually necessary to NOT use the symbol's real
      value when building the dynamic symbol table for a shared library.
@@ -2078,7 +2031,7 @@ elf64_hppa_finish_dynamic_symbol (bfd *o
 	    /* xgettext:c-format */
 	    (_("stub entry for %s cannot load .plt, dp offset = %" PRId64),
 	     hh->eh.root.root.string, (int64_t) value);
-	  return FALSE;
+	  return false;
 	}
 
       bfd_put_32 (stub->owner, (bfd_vma) insn,
@@ -2101,13 +2054,13 @@ elf64_hppa_finish_dynamic_symbol (bfd *o
 		  stub->contents + hh->stub_offset + 8);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* The .opd section contains FPTRs for each function this file
    exports.  Initialize the FPTR entries.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_finalize_opd (struct elf_link_hash_entry *eh, void *data)
 {
   struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
@@ -2118,7 +2071,7 @@ elf64_hppa_finalize_opd (struct elf_link
 
   hppa_info = hppa_link_hash_table (info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   sopd = hppa_info->opd_sec;
   sopdrel = hppa_info->opd_rel_sec;
@@ -2204,7 +2157,7 @@ elf64_hppa_finalize_opd (struct elf_link
 	  new_name = concat (".", eh->root.root.string, NULL);
 
 	  nh = elf_link_hash_lookup (elf_hash_table (info),
-				     new_name, TRUE, TRUE, FALSE);
+				     new_name, true, true, false);
 
 	  /* All we really want from the new symbol is its dynamic
 	     symbol index.  */
@@ -2220,14 +2173,14 @@ elf64_hppa_finalize_opd (struct elf_link
       loc += sopdrel->reloc_count++ * sizeof (Elf64_External_Rela);
       bfd_elf64_swap_reloca_out (info->output_bfd, &rel, loc);
     }
-  return TRUE;
+  return true;
 }
 
 /* The .dlt section contains addresses for items referenced through the
    dlt.  Note that we can have a DLTIND relocation for a local symbol, thus
    we can not depend on finish_dynamic_symbol to initialize the .dlt.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_finalize_dlt (struct elf_link_hash_entry *eh, void *data)
 {
   struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
@@ -2237,7 +2190,7 @@ elf64_hppa_finalize_dlt (struct elf_link
 
   hppa_info = hppa_link_hash_table (info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   sdlt = hppa_info->dlt_sec;
   sdltrel = hppa_info->dlt_rel_sec;
@@ -2315,13 +2268,13 @@ elf64_hppa_finalize_dlt (struct elf_link
       loc += sdltrel->reloc_count++ * sizeof (Elf64_External_Rela);
       bfd_elf64_swap_reloca_out (info->output_bfd, &rel, loc);
     }
-  return TRUE;
+  return true;
 }
 
 /* Finalize the dynamic relocations.  Specifically the FPTR relocations
    for dynamic functions used to initialize static data.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_finalize_dynreloc (struct elf_link_hash_entry *eh,
 			      void *data)
 {
@@ -2333,7 +2286,7 @@ elf64_hppa_finalize_dynreloc (struct elf
   dynamic_symbol = elf64_hppa_dynamic_symbol_p (eh, info);
 
   if (!dynamic_symbol && !bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   if (hh->reloc_entries)
     {
@@ -2342,7 +2295,7 @@ elf64_hppa_finalize_dynreloc (struct elf
 
       hppa_info = hppa_link_hash_table (info);
       if (hppa_info == NULL)
-	return FALSE;
+	return false;
 
       /* We may need to do a relocation against a local symbol, in
 	 which case we have to look up it's dynamic symbol index off
@@ -2433,7 +2386,7 @@ elf64_hppa_finalize_dynreloc (struct elf
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Used to decide how to sort relocs in an optimal manner for the
@@ -2460,7 +2413,7 @@ elf64_hppa_reloc_type_class (const struc
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_finish_dynamic_sections (bfd *output_bfd,
 				    struct bfd_link_info *info)
 {
@@ -2470,7 +2423,7 @@ elf64_hppa_finish_dynamic_sections (bfd
 
   hppa_info = hppa_link_hash_table (info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   /* Finalize the contents of the .opd section.  */
   elf_link_hash_traverse (elf_hash_table (info),
@@ -2519,7 +2472,7 @@ elf64_hppa_finish_dynamic_sections (bfd
 		 to is find the start of the .data section.  */
 	      s = bfd_get_section_by_name (output_bfd, ".data");
 	      if (!s)
-		return FALSE;
+		return false;
 	      dyn.d_un.d_ptr = s->vma;
 	      bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
@@ -2531,13 +2484,13 @@ elf64_hppa_finish_dynamic_sections (bfd
 	      break;
 
 	    case DT_JMPREL:
-	      s = hppa_info->plt_rel_sec;
+	      s = hppa_info->root.srelplt;
 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
 	      bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
 
 	    case DT_PLTRELSZ:
-	      s = hppa_info->plt_rel_sec;
+	      s = hppa_info->root.srelplt;
 	      dyn.d_un.d_val = s->size;
 	      bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
@@ -2562,7 +2515,7 @@ elf64_hppa_finish_dynamic_sections (bfd
 	      /* There is some question about whether or not the size of
 		 the PLT relocs should be included here.  HP's tools do
 		 it, so we'll emulate them.  */
-	      s = hppa_info->plt_rel_sec;
+	      s = hppa_info->root.srelplt;
 	      dyn.d_un.d_val += s->size;
 	      bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
 	      break;
@@ -2571,12 +2524,12 @@ elf64_hppa_finish_dynamic_sections (bfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -2585,7 +2538,7 @@ elf64_hppa_grok_prstatus (bfd *abfd, Elf
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 760:		/* Linux/hppa */
 	/* pr_cursig */
@@ -2606,7 +2559,7 @@ elf64_hppa_grok_prstatus (bfd *abfd, Elf
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf64_hppa_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   char * command;
@@ -2615,7 +2568,7 @@ elf64_hppa_grok_psinfo (bfd *abfd, Elf_I
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 136:		/* Linux/hppa elf_prpsinfo.  */
       elf_tdata (abfd)->core->program
@@ -2633,7 +2586,7 @@ elf64_hppa_grok_psinfo (bfd *abfd, Elf_I
   if (0 < n && command[n - 1] == ' ')
     command[n - 1] = '\0';
 
-  return TRUE;
+  return true;
 }
 
 /* Return the number of additional phdrs we will need.
@@ -2662,12 +2615,12 @@ elf64_hppa_additional_program_headers (b
   return 0;
 }
 
-static bfd_boolean
+static bool
 elf64_hppa_allow_non_load_phdr (bfd *abfd ATTRIBUTE_UNUSED,
 				const Elf_Internal_Phdr *phdr ATTRIBUTE_UNUSED,
 				unsigned int count ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* Allocate and initialize any program headers required by this
@@ -2683,7 +2636,7 @@ elf64_hppa_allow_non_load_phdr (bfd *abf
    to guess whether or not we are building a shared library based on the
    existence of a .interp section.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_segment_map *m;
@@ -2694,7 +2647,7 @@ elf64_hppa_modify_segment_map (bfd *abfd
       m = ((struct elf_segment_map *)
 	   bfd_zalloc (abfd, (bfd_size_type) sizeof *m));
       if (m == NULL)
-	return FALSE;
+	return false;
 
       m->p_type = PT_PHDR;
       m->p_flags = PF_R | PF_X;
@@ -2724,7 +2677,7 @@ elf64_hppa_modify_segment_map (bfd *abfd
 	  }
       }
 
-  return TRUE;
+  return true;
 }
 
 /* Called when writing out an object file to decide the type of a
@@ -2741,7 +2694,7 @@ elf64_hppa_elf_get_symbol_type (Elf_Inte
 
 /* Support HP specific sections for core files.  */
 
-static bfd_boolean
+static bool
 elf64_hppa_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int sec_index,
 			      const char *typename)
 {
@@ -2750,15 +2703,15 @@ elf64_hppa_section_from_phdr (bfd *abfd,
       asection *sect;
 
       if (!_bfd_elf_make_section_from_phdr (abfd, hdr, sec_index, typename))
-	return FALSE;
+	return false;
 
       sect = bfd_make_section_anyway (abfd, ".kernel");
       if (sect == NULL)
-	return FALSE;
+	return false;
       sect->size = hdr->p_filesz;
       sect->filepos = hdr->p_offset;
       sect->flags = SEC_HAS_CONTENTS | SEC_READONLY;
-      return TRUE;
+      return true;
     }
 
   if (hdr->p_type == PT_HP_CORE_PROC)
@@ -2766,14 +2719,14 @@ elf64_hppa_section_from_phdr (bfd *abfd,
       int sig;
 
       if (bfd_seek (abfd, hdr->p_offset, SEEK_SET) != 0)
-	return FALSE;
-      if (bfd_bread (&sig, 4, abfd) != 4)
-	return FALSE;
+	return false;
+      if (bfd_read (&sig, 4, abfd) != 4)
+	return false;
 
       elf_tdata (abfd)->core->signal = sig;
 
       if (!_bfd_elf_make_section_from_phdr (abfd, hdr, sec_index, typename))
-	return FALSE;
+	return false;
 
       /* GDB uses the ".reg" section to read register contents.  */
       return _bfd_elfcore_make_pseudosection (abfd, ".reg", hdr->p_filesz,
@@ -2792,7 +2745,7 @@ elf64_hppa_section_from_phdr (bfd *abfd,
    file.  HP's libraries define symbols with HP specific section
    indices, which we have to handle.  */
 
-static bfd_boolean
+static bool
 elf_hppa_add_symbol_hook (bfd *abfd,
 			  struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			  Elf_Internal_Sym *sym,
@@ -2818,10 +2771,10 @@ elf_hppa_add_symbol_hook (bfd *abfd,
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_hppa_unmark_useless_dynamic_symbols (struct elf_link_hash_entry *h,
 					 void *data)
 {
@@ -2849,10 +2802,10 @@ elf_hppa_unmark_useless_dynamic_symbols
       h->pointer_equality_needed = 1;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_hppa_remark_useless_dynamic_symbols (struct elf_link_hash_entry *h,
 					 void *data)
 {
@@ -2881,10 +2834,10 @@ elf_hppa_remark_useless_dynamic_symbols
       h->pointer_equality_needed = 0;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_hppa_is_dynamic_loader_symbol (const char *name)
 {
   return (! strcmp (name, "__CPU_REVISION")
@@ -2936,14 +2889,14 @@ elf_hppa_record_segment_addrs (bfd *abfd
    We use this hook to (possibly) provide a value for __gp, then we
    fall back to the generic ELF final link routine.  */
 
-static bfd_boolean
+static bool
 elf_hppa_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   struct stat buf;
   struct elf64_hppa_link_hash_table *hppa_info = hppa_link_hash_table (info);
 
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   if (! bfd_link_relocatable (info))
     {
@@ -2954,8 +2907,8 @@ elf_hppa_final_link (bfd *abfd, struct b
 	 by one of the objects being linked.  First try to find the symbol
 	 in the hash table.  If that fails, just compute the value __gp
 	 should have had.  */
-      gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE,
-				 FALSE, FALSE);
+      gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", false,
+				 false, false);
 
       if (gp)
 	{
@@ -2980,7 +2933,7 @@ elf_hppa_final_link (bfd *abfd, struct b
 	     that order) and set __gp to the base address of whichever
 	     section is found first.  */
 
-	  sec = hppa_info->plt_sec;
+	  sec = hppa_info->root.splt;
 	  if (sec && ! (sec->flags & SEC_EXCLUDE))
 	    gp_val = (sec->output_offset
 		      + sec->output_section->vma
@@ -3024,7 +2977,7 @@ elf_hppa_final_link (bfd *abfd, struct b
 
   /* Invoke the regular ELF backend linker to do all the work.  */
   if (!bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
   elf_link_hash_traverse (elf_hash_table (info),
 			  elf_hppa_remark_useless_dynamic_symbols,
@@ -3033,14 +2986,14 @@ elf_hppa_final_link (bfd *abfd, struct b
   /* If we're producing a final executable, sort the contents of the
      unwind section. */
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* Do not attempt to sort non-regular files.  This is here
      especially for configure scripts and kernel builds which run
      tests with "ld [...] -o /dev/null".  */
-  if (stat (abfd->filename, &buf) != 0
+  if (stat (bfd_get_filename (abfd), &buf) != 0
       || !S_ISREG(buf.st_mode))
-    return TRUE;
+    return true;
 
   return elf_hppa_sort_unwind (abfd);
 }
@@ -3529,8 +3482,8 @@ elf_hppa_final_link_relocate (Elf_Intern
 	   to the start of the DLT, so we have to compute the absolute
 	   address, then subtract out the value of __gp.  */
 	value = (hh->plt_offset
-		 + hppa_info->plt_sec->output_offset
-		 + hppa_info->plt_sec->output_section->vma);
+		 + hppa_info->root.splt->output_offset
+		 + hppa_info->root.splt->output_section->vma);
 	value -= _bfd_get_gp_value (output_bfd);
 
 	/* All PLTOFF relocations are basically the same at this point,
@@ -3735,7 +3688,7 @@ elf_hppa_final_link_relocate (Elf_Intern
       }
 
     case R_PARISC_SECREL32:
-      if (sym_sec)
+      if (sym_sec && sym_sec->output_section)
 	value -= sym_sec->output_section->vma;
       bfd_put_32 (input_bfd, value + addend, hit_data);
       return bfd_reloc_ok;
@@ -3781,7 +3734,7 @@ elf_hppa_final_link_relocate (Elf_Intern
 
 /* Relocate an HPPA ELF section.  */
 
-static bfd_boolean
+static int
 elf64_hppa_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -3798,7 +3751,7 @@ elf64_hppa_relocate_section (bfd *output
 
   hppa_info = hppa_link_hash_table (info);
   if (hppa_info == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
 
@@ -3819,7 +3772,7 @@ elf64_hppa_relocate_section (bfd *output
       if (r_type < 0 || r_type >= (int) R_PARISC_UNIMPLEMENTED)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       if (r_type == (unsigned int) R_PARISC_GNU_VTENTRY
 	  || r_type == (unsigned int) R_PARISC_GNU_VTINHERIT)
@@ -3845,7 +3798,7 @@ elf64_hppa_relocate_section (bfd *output
 	  /* It seems this can happen with erroneous or unsupported
 	     input (mixing a.out and elf in an archive, for example.)  */
 	  if (sym_hashes == NULL)
-	    return FALSE;
+	    return false;
 
 	  eh = sym_hashes[r_symndx - symtab_hdr->sh_info];
 
@@ -3879,14 +3832,15 @@ elf64_hppa_relocate_section (bfd *output
 	    continue;
 	  else if (!bfd_link_relocatable (info))
 	    {
-	      bfd_boolean err;
-	      err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
-		     || ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT);
-	      (*info->callbacks->undefined_symbol) (info,
-						    eh->root.root.string,
-						    input_bfd,
-						    input_section,
-						    rel->r_offset, err);
+	      bool err;
+
+	      err = (info->unresolved_syms_in_objects == RM_DIAGNOSE
+		     && !info->warn_unresolved_syms)
+		|| ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT;
+
+	      info->callbacks->undefined_symbol
+		(info, eh->root.root.string, input_bfd,
+		 input_section, rel->r_offset, err);
 	    }
 
 	  if (!bfd_link_relocatable (info)
@@ -3898,9 +3852,9 @@ elf64_hppa_relocate_section (bfd *output
 	      if (info->unresolved_syms_in_objects == RM_IGNORE
 		  && ELF_ST_VISIBILITY (eh->other) == STV_DEFAULT
 		  && eh->type == STT_PARISC_MILLI)
-		(*info->callbacks->undefined_symbol)
+		info->callbacks->undefined_symbol
 		  (info, eh_name (eh), input_bfd,
-		   input_section, rel->r_offset, FALSE);
+		   input_section, rel->r_offset, false);
 	    }
 	}
 
@@ -3934,7 +3888,7 @@ elf64_hppa_relocate_section (bfd *output
 								symtab_hdr->sh_link,
 								sym->st_name);
 		    if (sym_name == NULL)
-		      return FALSE;
+		      return false;
 		    if (*sym_name == '\0')
 		      sym_name = bfd_section_name (sym_sec);
 		  }
@@ -3947,7 +3901,7 @@ elf64_hppa_relocate_section (bfd *output
 	    }
 	}
     }
-  return TRUE;
+  return true;
 }
 
 static const struct bfd_elf_special_section elf64_hppa_special_sections[] =
@@ -4066,7 +4020,7 @@ const struct elf_size_info hppa64_elf_si
 #define elf_backend_plt_readonly	0
 #define elf_backend_want_plt_sym	0
 #define elf_backend_got_header_size     0
-#define elf_backend_type_change_ok	TRUE
+#define elf_backend_type_change_ok	true
 #define elf_backend_get_symbol_type	elf64_hppa_elf_get_symbol_type
 #define elf_backend_reloc_type_class	elf64_hppa_reloc_type_class
 #define elf_backend_rela_normal		1
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-hppa.h ./bfd/elf64-hppa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-hppa.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-hppa.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 /* ELF64/HPPA support
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-ia64-vms.c ./bfd/elf64-ia64-vms.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-ia64-vms.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-ia64-vms.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* IA-64 support for OpenVMS
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -170,15 +170,16 @@ struct elf64_ia64_allocate_data
 };
 
 #define elf64_ia64_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == IA64_ELF_DATA ? ((struct elf64_ia64_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == IA64_ELF_DATA)		\
+   ? (struct elf64_ia64_link_hash_table *) (p)->hash : NULL)
 
 struct elf64_ia64_vms_obj_tdata
 {
   struct elf_obj_tdata root;
 
   /* Ident for shared library.  */
-  bfd_uint64_t ident;
+  uint64_t ident;
 
   /* Used only during link: offset in the .fixups section for this bfd.  */
   bfd_vma fixups_off;
@@ -215,22 +216,22 @@ typedef struct
 static struct elf64_ia64_dyn_sym_info * get_dyn_sym_info
   (struct elf64_ia64_link_hash_table *,
    struct elf_link_hash_entry *,
-   bfd *, const Elf_Internal_Rela *, bfd_boolean);
-static bfd_boolean elf64_ia64_dynamic_symbol_p
+   bfd *, const Elf_Internal_Rela *, bool);
+static bool elf64_ia64_dynamic_symbol_p
   (struct elf_link_hash_entry *);
-static bfd_boolean elf64_ia64_choose_gp
-  (bfd *, struct bfd_link_info *, bfd_boolean);
+static bool elf64_ia64_choose_gp
+  (bfd *, struct bfd_link_info *, bool);
 static void elf64_ia64_dyn_sym_traverse
   (struct elf64_ia64_link_hash_table *,
-   bfd_boolean (*) (struct elf64_ia64_dyn_sym_info *, void *),
+   bool (*) (struct elf64_ia64_dyn_sym_info *, void *),
    void *);
-static bfd_boolean allocate_global_data_got
+static bool allocate_global_data_got
   (struct elf64_ia64_dyn_sym_info *, void *);
-static bfd_boolean allocate_global_fptr_got
+static bool allocate_global_fptr_got
   (struct elf64_ia64_dyn_sym_info *, void *);
-static bfd_boolean allocate_local_got
+static bool allocate_local_got
   (struct elf64_ia64_dyn_sym_info *, void *);
-static bfd_boolean allocate_dynrel_entries
+static bool allocate_dynrel_entries
   (struct elf64_ia64_dyn_sym_info *, void *);
 static asection *get_pltoff
   (bfd *, struct elf64_ia64_link_hash_table *);
@@ -240,7 +241,7 @@ static asection *get_got
 
 /* Given a ELF reloc, return the matching HOWTO structure.  */
 
-static bfd_boolean
+static bool
 elf64_ia64_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 			  arelent *bfd_reloc,
 			  Elf_Internal_Rela *elf_reloc)
@@ -254,10 +255,10 @@ elf64_ia64_info_to_howto (bfd *abfd ATTR
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -329,10 +330,10 @@ elf64_ia64_update_short_info (asection *
    the other relaxations are done.
 */
 
-static bfd_boolean
+static bool
 elf64_ia64_relax_section (bfd *abfd, asection *sec,
 			  struct bfd_link_info *link_info,
-			  bfd_boolean *again)
+			  bool *again)
 {
   struct one_fixup
     {
@@ -349,15 +350,15 @@ elf64_ia64_relax_section (bfd *abfd, ase
   Elf_Internal_Sym *isymbuf = NULL;
   struct elf64_ia64_link_hash_table *ia64_info;
   struct one_fixup *fixups = NULL;
-  bfd_boolean changed_contents = FALSE;
-  bfd_boolean changed_relocs = FALSE;
-  bfd_boolean skip_relax_pass_0 = TRUE;
-  bfd_boolean skip_relax_pass_1 = TRUE;
+  bool changed_contents = false;
+  bool changed_relocs = false;
+  bool skip_relax_pass_0 = true;
+  bool skip_relax_pass_1 = true;
   bfd_vma gp = 0;
 
   /* Assume we're not going to change any sizes, and we'll only need
      one pass.  */
-  *again = FALSE;
+  *again = false;
 
   if (bfd_link_relocatable (link_info))
     (*link_info->callbacks->einfo)
@@ -365,19 +366,20 @@ elf64_ia64_relax_section (bfd *abfd, ase
 
   /* Don't even try to relax for non-ELF outputs.  */
   if (!is_elf_hash_table (link_info->hash))
-    return FALSE;
+    return false;
 
   /* Nothing to do if there are no relocations or there is no need for
      the current pass.  */
-  if ((sec->flags & SEC_RELOC) == 0
-      || sec->reloc_count == 0
+  if (sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (link_info->relax_pass == 0 && sec->skip_relax_pass_0)
       || (link_info->relax_pass == 1 && sec->skip_relax_pass_1))
-    return TRUE;
+    return true;
 
   ia64_info = elf64_ia64_hash_table (link_info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -386,7 +388,7 @@ elf64_ia64_relax_section (bfd *abfd, ase
 		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
-    return FALSE;
+    return false;
 
   irelend = internal_relocs + sec->reloc_count;
 
@@ -406,7 +408,7 @@ elf64_ia64_relax_section (bfd *abfd, ase
       asection *tsec;
       struct one_fixup *f;
       bfd_size_type amt;
-      bfd_boolean is_branch;
+      bool is_branch;
       struct elf64_ia64_dyn_sym_info *dyn_i;
 
       switch (r_type)
@@ -418,8 +420,8 @@ elf64_ia64_relax_section (bfd *abfd, ase
 	  /* In pass 1, all br relaxations are done. We can skip it. */
 	  if (link_info->relax_pass == 1)
 	    continue;
-	  skip_relax_pass_0 = FALSE;
-	  is_branch = TRUE;
+	  skip_relax_pass_0 = false;
+	  is_branch = true;
 	  break;
 
 	case R_IA64_PCREL60B:
@@ -427,10 +429,10 @@ elf64_ia64_relax_section (bfd *abfd, ase
 	     will increase the code size. Defer it to pass 1.  */
 	  if (link_info->relax_pass == 0)
 	    {
-	      skip_relax_pass_1 = FALSE;
+	      skip_relax_pass_1 = false;
 	      continue;
 	    }
-	  is_branch = TRUE;
+	  is_branch = true;
 	  break;
 
 	case R_IA64_GPREL22:
@@ -442,10 +444,10 @@ elf64_ia64_relax_section (bfd *abfd, ase
 	     increase the code size. Defer it to pass 1.  */
 	  if (link_info->relax_pass == 0)
 	    {
-	      skip_relax_pass_1 = FALSE;
+	      skip_relax_pass_1 = false;
 	      continue;
 	    }
-	  is_branch = FALSE;
+	  is_branch = false;
 	  break;
 
 	default:
@@ -483,7 +485,7 @@ elf64_ia64_relax_section (bfd *abfd, ase
 	    tsec = bfd_section_from_elf_index (abfd, isym->st_shndx);
 
 	  toff = isym->st_value;
-	  dyn_i = get_dyn_sym_info (ia64_info, NULL, abfd, irel, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, NULL, abfd, irel, false);
 	}
       else
 	{
@@ -498,7 +500,7 @@ elf64_ia64_relax_section (bfd *abfd, ase
 		 || h->root.type == bfd_link_hash_warning)
 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
-	  dyn_i = get_dyn_sym_info (ia64_info, h, abfd, irel, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, h, abfd, irel, false);
 
 	  /* For branches to dynamic symbols, we're interested instead
 	     in a branch to the PLT entry.  */
@@ -685,8 +687,8 @@ elf64_ia64_relax_section (bfd *abfd, ase
 	      != bfd_reloc_ok)
 	    goto error_return;
 
-	  changed_contents = TRUE;
-	  changed_relocs = TRUE;
+	  changed_contents = true;
+	  changed_relocs = true;
 	}
       else
 	{
@@ -697,7 +699,7 @@ elf64_ia64_relax_section (bfd *abfd, ase
 	      gp = _bfd_get_gp_value (obfd);
 	      if (gp == 0)
 		{
-		  if (!elf64_ia64_choose_gp (obfd, link_info, FALSE))
+		  if (!elf64_ia64_choose_gp (obfd, link_info, false))
 		    goto error_return;
 		  gp = _bfd_get_gp_value (obfd);
 		}
@@ -720,7 +722,7 @@ elf64_ia64_relax_section (bfd *abfd, ase
 
 	      irel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
 					   R_IA64_GPREL22);
-	      changed_relocs = TRUE;
+	      changed_relocs = true;
 
 	      elf64_ia64_update_short_info (tsec->output_section,
 					    tsec->output_offset + toff,
@@ -730,8 +732,8 @@ elf64_ia64_relax_section (bfd *abfd, ase
 	    {
 	      ia64_elf_relax_ldxmov (contents, roff);
 	      irel->r_info = ELF64_R_INFO (0, R_IA64_NONE);
-	      changed_contents = TRUE;
-	      changed_relocs = TRUE;
+	      changed_contents = true;
+	      changed_relocs = true;
 	    }
 	}
     }
@@ -789,30 +791,28 @@ elf64_ia64_relax_section (bfd *abfd, ase
     }
 
   *again = changed_contents || changed_relocs;
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents)
+  if ((unsigned char *) isymbuf != symtab_hdr->contents)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 #undef skip_relax_pass_0
 #undef skip_relax_pass_1
 
 /* Return TRUE if NAME is an unwind table section name.  */
 
-static inline bfd_boolean
+static inline bool
 is_unwind_section_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
 {
-  return ((CONST_STRNEQ (name, ELF_STRING_ia64_unwind)
-	   && ! CONST_STRNEQ (name, ELF_STRING_ia64_unwind_info))
-	  || CONST_STRNEQ (name, ELF_STRING_ia64_unwind_once));
+  return ((startswith (name, ELF_STRING_ia64_unwind)
+	   && ! startswith (name, ELF_STRING_ia64_unwind_info))
+	  || startswith (name, ELF_STRING_ia64_unwind_once));
 }
 
 
@@ -821,20 +821,19 @@ is_unwind_section_name (bfd *abfd ATTRIB
 /* ??? There is no bfd internal flag equivalent to the SHF_IA_64_NORECOV
    flag.  */
 
-static bfd_boolean
-elf64_ia64_section_flags (flagword *flags,
-			  const Elf_Internal_Shdr *hdr)
+static bool
+elf64_ia64_section_flags (const Elf_Internal_Shdr *hdr)
 {
   if (hdr->sh_flags & SHF_IA_64_SHORT)
-    *flags |= SEC_SMALL_DATA;
+    hdr->bfd_section->flags |= SEC_SMALL_DATA;
 
-  return TRUE;
+  return true;
 }
 
 /* Set the correct type for an IA-64 ELF section.  We do this by the
    section name, which is a hack, but ought to work.  */
 
-static bfd_boolean
+static bool
 elf64_ia64_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr,
 			  asection *sec)
 {
@@ -855,13 +854,13 @@ elf64_ia64_fake_sections (bfd *abfd, Elf
   if (sec->flags & SEC_SMALL_DATA)
     hdr->sh_flags |= SHF_IA_64_SHORT;
 
-  return TRUE;
+  return true;
 }
 
 /* Hook called by the linker routine which adds symbols from an object
    file.  We use it to put .comm items in .sbss, and not .bss.  */
 
-static bfd_boolean
+static bool
 elf64_ia64_add_symbol_hook (bfd *abfd,
 			    struct bfd_link_info *info,
 			    Elf_Internal_Sym *sym,
@@ -884,22 +883,23 @@ elf64_ia64_add_symbol_hook (bfd *abfd,
 	  scomm = bfd_make_section_with_flags (abfd, ".scommon",
 					       (SEC_ALLOC
 						| SEC_IS_COMMON
+						| SEC_SMALL_DATA
 						| SEC_LINKER_CREATED));
 	  if (scomm == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       *secp = scomm;
       *valp = sym->st_size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* According to the Tahoe assembler spec, all labels starting with a
    '.' are local.  */
 
-static bfd_boolean
+static bool
 elf64_ia64_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 				const char *name)
 {
@@ -908,7 +908,7 @@ elf64_ia64_is_local_label_name (bfd *abf
 
 /* Should we do dynamic things to this symbol?  */
 
-static bfd_boolean
+static bool
 elf64_ia64_dynamic_symbol_p (struct elf_link_hash_entry *h)
 {
   return h != NULL && h->def_dynamic;
@@ -945,7 +945,7 @@ elf64_ia64_new_elf_hash_entry (struct bf
 static void
 elf64_ia64_hash_hide_symbol (struct bfd_link_info *info,
 			     struct elf_link_hash_entry *xh,
-			     bfd_boolean force_local)
+			     bool force_local)
 {
   struct elf64_ia64_link_hash_entry *h;
   struct elf64_ia64_dyn_sym_info *dyn_i;
@@ -990,8 +990,8 @@ elf64_ia64_local_htab_eq (const void *pt
 
 /* Free the global elf64_ia64_dyn_sym_info array.  */
 
-static bfd_boolean
-elf64_ia64_global_dyn_info_free (void **xentry,
+static bool
+elf64_ia64_global_dyn_info_free (struct elf_link_hash_entry *xentry,
 				 void * unused ATTRIBUTE_UNUSED)
 {
   struct elf64_ia64_link_hash_entry *entry
@@ -1000,37 +1000,31 @@ elf64_ia64_global_dyn_info_free (void **
   if (entry->root.root.type == bfd_link_hash_warning)
     entry = (struct elf64_ia64_link_hash_entry *) entry->root.root.u.i.link;
 
-  if (entry->info)
-    {
-      free (entry->info);
-      entry->info = NULL;
-      entry->count = 0;
-      entry->sorted_count = 0;
-      entry->size = 0;
-    }
+  free (entry->info);
+  entry->info = NULL;
+  entry->count = 0;
+  entry->sorted_count = 0;
+  entry->size = 0;
 
-  return TRUE;
+  return true;
 }
 
 /* Free the local elf64_ia64_dyn_sym_info array.  */
 
-static bfd_boolean
+static int
 elf64_ia64_local_dyn_info_free (void **slot,
 				void * unused ATTRIBUTE_UNUSED)
 {
   struct elf64_ia64_local_hash_entry *entry
     = (struct elf64_ia64_local_hash_entry *) *slot;
 
-  if (entry->info)
-    {
-      free (entry->info);
-      entry->info = NULL;
-      entry->count = 0;
-      entry->sorted_count = 0;
-      entry->size = 0;
-    }
+  free (entry->info);
+  entry->info = NULL;
+  entry->count = 0;
+  entry->sorted_count = 0;
+  entry->size = 0;
 
-  return TRUE;
+  return true;
 }
 
 /* Destroy IA-64 linker hash table.  */
@@ -1092,12 +1086,12 @@ elf64_ia64_hash_table_create (bfd *abfd)
 
 struct elf64_ia64_dyn_sym_traverse_data
 {
-  bfd_boolean (*func) (struct elf64_ia64_dyn_sym_info *, void *);
+  bool (*func) (struct elf64_ia64_dyn_sym_info *, void *);
   void * data;
 };
 
-static bfd_boolean
-elf64_ia64_global_dyn_sym_thunk (struct bfd_hash_entry *xentry,
+static bool
+elf64_ia64_global_dyn_sym_thunk (struct elf_link_hash_entry *xentry,
 				 void * xdata)
 {
   struct elf64_ia64_link_hash_entry *entry
@@ -1114,11 +1108,11 @@ elf64_ia64_global_dyn_sym_thunk (struct
        count != 0;
        count--, dyn_i++)
     if (! (*data->func) (dyn_i, data->data))
-      return FALSE;
-  return TRUE;
+      return false;
+  return true;
 }
 
-static bfd_boolean
+static int
 elf64_ia64_local_dyn_sym_thunk (void **slot, void * xdata)
 {
   struct elf64_ia64_local_hash_entry *entry
@@ -1132,13 +1126,13 @@ elf64_ia64_local_dyn_sym_thunk (void **s
        count != 0;
        count--, dyn_i++)
     if (! (*data->func) (dyn_i, data->data))
-      return FALSE;
-  return TRUE;
+      return false;
+  return true;
 }
 
 static void
 elf64_ia64_dyn_sym_traverse (struct elf64_ia64_link_hash_table *ia64_info,
-			     bfd_boolean (*func) (struct elf64_ia64_dyn_sym_info *, void *),
+			     bool (*func) (struct elf64_ia64_dyn_sym_info *, void *),
 			     void * data)
 {
   struct elf64_ia64_dyn_sym_traverse_data xdata;
@@ -1154,7 +1148,7 @@ elf64_ia64_dyn_sym_traverse (struct elf6
 
 #define NOTE_NAME "IPF/VMS"
 
-static bfd_boolean
+static bool
 create_ia64_vms_notes (bfd *abfd, struct bfd_link_info *info,
 		       unsigned int time_hi, unsigned int time_lo)
 {
@@ -1173,7 +1167,7 @@ create_ia64_vms_notes (bfd *abfd, struct
 
   ia64_info = elf64_ia64_hash_table (info);
 
-  module_name = vms_get_module_name (bfd_get_filename (abfd), TRUE);
+  module_name = vms_get_module_name (bfd_get_filename (abfd), true);
   module_name_len = strlen (module_name) + 1;
 
   bfd_putl32 (time_lo, cur_time + 0);
@@ -1209,7 +1203,7 @@ create_ia64_vms_notes (bfd *abfd, struct
   orig_dyn_size = (sizeof (*orig_dyn) + sizeof (IMG_ID) - 1 + 7) & ~7;
   orig_dyn = bfd_zalloc (abfd, orig_dyn_size);
   if (orig_dyn == NULL)
-    return FALSE;
+    return false;
   bfd_putl32 (1, orig_dyn->major_id);
   bfd_putl32 (3, orig_dyn->minor_id);
   memcpy (orig_dyn->manipulation_date, cur_time, sizeof (cur_time));
@@ -1235,7 +1229,7 @@ create_ia64_vms_notes (bfd *abfd, struct
   /* Malloc a temporary buffer large enough for most notes */
   note_contents = (unsigned char *) bfd_zalloc (abfd, note_size);
   if (note_contents == NULL)
-    return FALSE;
+    return false;
   noteptr = note_contents;
 
   /* Fill notes.  */
@@ -1259,10 +1253,10 @@ create_ia64_vms_notes (bfd *abfd, struct
 
   free (module_name);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_ia64_create_dynamic_sections (bfd *abfd,
 				    struct bfd_link_info *info)
 {
@@ -1273,10 +1267,10 @@ elf64_ia64_create_dynamic_sections (bfd
 
   ia64_info = elf64_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   if (elf_hash_table (info)->dynamic_sections_created)
-    return TRUE;
+    return true;
 
   abfd = elf_hash_table (info)->dynobj;
   bed = get_elf_backend_data (abfd);
@@ -1287,19 +1281,19 @@ elf64_ia64_create_dynamic_sections (bfd
 					  flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".plt", flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
   ia64_info->root.splt = s;
 
   if (!get_got (abfd, ia64_info))
-    return FALSE;
+    return false;
 
   if (!get_pltoff (abfd, ia64_info))
-    return FALSE;
+    return false;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".vmsdynstr",
 					  (SEC_ALLOC
@@ -1308,7 +1302,7 @@ elf64_ia64_create_dynamic_sections (bfd
 					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (s, 0))
-    return FALSE;
+    return false;
 
   /* Create a fixup section.  */
   s = bfd_make_section_anyway_with_flags (abfd, ".fixups",
@@ -1318,7 +1312,7 @@ elf64_ia64_create_dynamic_sections (bfd
 					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (s, 3))
-    return FALSE;
+    return false;
   ia64_info->fixups_sec = s;
 
   /* Create the transfer fixup section.  */
@@ -1329,7 +1323,7 @@ elf64_ia64_create_dynamic_sections (bfd
 					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (s, 3))
-    return FALSE;
+    return false;
   s->size = sizeof (struct elf64_vms_transfer);
   ia64_info->transfer_sec = s;
 
@@ -1341,18 +1335,18 @@ elf64_ia64_create_dynamic_sections (bfd
 					   | SEC_READONLY));
   if (s == NULL
       || !bfd_set_section_alignment (s, 3))
-    return FALSE;
+    return false;
   ia64_info->note_sec = s;
 
-  elf_hash_table (info)->dynamic_sections_created = TRUE;
-  return TRUE;
+  elf_hash_table (info)->dynamic_sections_created = true;
+  return true;
 }
 
 /* Find and/or create a hash entry for local symbol.  */
 static struct elf64_ia64_local_hash_entry *
 get_local_sym_hash (struct elf64_ia64_link_hash_table *ia64_info,
 		    bfd *abfd, const Elf_Internal_Rela *rel,
-		    bfd_boolean create)
+		    bool create)
 {
   struct elf64_ia64_local_hash_entry e, *ret;
   asection *sec = abfd->sections;
@@ -1582,7 +1576,7 @@ sort_dyn_sym_info (struct elf64_ia64_dyn
 static struct elf64_ia64_dyn_sym_info *
 get_dyn_sym_info (struct elf64_ia64_link_hash_table *ia64_info,
 		  struct elf_link_hash_entry *h, bfd *abfd,
-		  const Elf_Internal_Rela *rel, bfd_boolean create)
+		  const Elf_Internal_Rela *rel, bool create)
 {
   struct elf64_ia64_dyn_sym_info **info_p, *info, *dyn_i, key;
   unsigned int *count_p, *sorted_count_p, *size_p;
@@ -1674,7 +1668,7 @@ get_dyn_sym_info (struct elf64_ia64_link
       *size_p = size;
       *info_p = info;
 
-has_space:
+    has_space:
       /* Append the new one to the array.  */
       dyn_i = info + count;
       memset (dyn_i, 0, sizeof (*dyn_i));
@@ -1842,7 +1836,7 @@ get_pltoff (bfd *abfd, struct elf64_ia64
 static asection *
 get_reloc_section (bfd *abfd,
 		   struct elf64_ia64_link_hash_table *ia64_info,
-		   asection *sec, bfd_boolean create)
+		   asection *sec, bool create)
 {
   const char *srel_name;
   asection *srel;
@@ -1854,9 +1848,9 @@ get_reloc_section (bfd *abfd,
   if (srel_name == NULL)
     return NULL;
 
-  BFD_ASSERT ((CONST_STRNEQ (srel_name, ".rela")
+  BFD_ASSERT ((startswith (srel_name, ".rela")
 	       && strcmp (bfd_section_name (sec), srel_name+5) == 0)
-	      || (CONST_STRNEQ (srel_name, ".rel")
+	      || (startswith (srel_name, ".rel")
 		  && strcmp (bfd_section_name (sec), srel_name+4) == 0));
 
   dynobj = ia64_info->root.dynobj;
@@ -1880,7 +1874,7 @@ get_reloc_section (bfd *abfd,
   return srel;
 }
 
-static bfd_boolean
+static bool
 count_dyn_reloc (bfd *abfd, struct elf64_ia64_dyn_sym_info *dyn_i,
 		 asection *srel, int type)
 {
@@ -1895,7 +1889,7 @@ count_dyn_reloc (bfd *abfd, struct elf64
       rent = ((struct elf64_ia64_dyn_reloc_entry *)
 	      bfd_alloc (abfd, (bfd_size_type) sizeof (*rent)));
       if (!rent)
-	return FALSE;
+	return false;
 
       rent->next = dyn_i->reloc_entries;
       rent->srel = srel;
@@ -1905,10 +1899,10 @@ count_dyn_reloc (bfd *abfd, struct elf64
     }
   rent->count++;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			 asection *sec,
 			 const Elf_Internal_Rela *relocs)
@@ -1931,15 +1925,15 @@ elf64_ia64_check_relocs (bfd *abfd, stru
   int need_entry;
   struct elf_link_hash_entry *h;
   unsigned long r_symndx;
-  bfd_boolean maybe_dynamic;
+  bool maybe_dynamic;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   ia64_info = elf64_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   got = fptr = srel = pltoff = NULL;
 
@@ -2084,8 +2078,8 @@ elf64_ia64_check_relocs (bfd *abfd, stru
 	     abfd, 0, (bfd_vma) 0);
 	}
 
-      if (get_dyn_sym_info (ia64_info, h, abfd, rel, TRUE) == NULL)
-	return FALSE;
+      if (get_dyn_sym_info (ia64_info, h, abfd, rel, true) == NULL)
+	return false;
     }
 
   /* Now, we only do lookup without insertion, which is very fast
@@ -2224,7 +2218,7 @@ elf64_ia64_check_relocs (bfd *abfd, stru
       if (!need_entry)
 	continue;
 
-      dyn_i = get_dyn_sym_info (ia64_info, h, abfd, rel, FALSE);
+      dyn_i = get_dyn_sym_info (ia64_info, h, abfd, rel, false);
 
       /* Record whether or not this is a local symbol.  */
       dyn_i->h = h;
@@ -2236,7 +2230,7 @@ elf64_ia64_check_relocs (bfd *abfd, stru
 	    {
 	      got = get_got (abfd, ia64_info);
 	      if (!got)
-		return FALSE;
+		return false;
 	    }
 	  if (need_entry & NEED_GOT)
 	    dyn_i->want_got = 1;
@@ -2250,7 +2244,7 @@ elf64_ia64_check_relocs (bfd *abfd, stru
 	    {
 	      fptr = get_fptr (abfd, info, ia64_info);
 	      if (!fptr)
-		return FALSE;
+		return false;
 	    }
 	  dyn_i->want_fptr = 1;
 	}
@@ -2273,7 +2267,7 @@ elf64_ia64_check_relocs (bfd *abfd, stru
 	    {
 	      pltoff = get_pltoff (abfd, ia64_info);
 	      if (!pltoff)
-		return FALSE;
+		return false;
 	    }
 
 	  dyn_i->want_pltoff = 1;
@@ -2282,22 +2276,22 @@ elf64_ia64_check_relocs (bfd *abfd, stru
 	{
 	  if (!srel)
 	    {
-	      srel = get_reloc_section (abfd, ia64_info, sec, TRUE);
+	      srel = get_reloc_section (abfd, ia64_info, sec, true);
 	      if (!srel)
-		return FALSE;
+		return false;
 	    }
 	  if (!count_dyn_reloc (abfd, dyn_i, srel, dynrel_type))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* For cleanliness, and potentially faster dynamic loading, allocate
    external GOT entries first.  */
 
-static bfd_boolean
+static bool
 allocate_global_data_got (struct elf64_ia64_dyn_sym_info *dyn_i,
 			  void * data)
 {
@@ -2311,12 +2305,12 @@ allocate_global_data_got (struct elf64_i
        dyn_i->got_offset = x->ofs;
        x->ofs += 8;
      }
-  return TRUE;
+  return true;
 }
 
 /* Next, allocate all the GOT entries used by LTOFF_FPTR relocs.  */
 
-static bfd_boolean
+static bool
 allocate_global_fptr_got (struct elf64_ia64_dyn_sym_info *dyn_i,
 			  void * data)
 {
@@ -2329,12 +2323,12 @@ allocate_global_fptr_got (struct elf64_i
       dyn_i->got_offset = x->ofs;
       x->ofs += 8;
     }
-  return TRUE;
+  return true;
 }
 
 /* Lastly, allocate all the GOT entries for local data.  */
 
-static bfd_boolean
+static bool
 allocate_local_got (struct elf64_ia64_dyn_sym_info *dyn_i,
 		    void * data)
 {
@@ -2346,13 +2340,13 @@ allocate_local_got (struct elf64_ia64_dy
       dyn_i->got_offset = x->ofs;
       x->ofs += 8;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate function descriptors.  We can do these for every function
    in a main executable that is not exported.  */
 
-static bfd_boolean
+static bool
 allocate_fptr (struct elf64_ia64_dyn_sym_info *dyn_i, void * data)
 {
   struct elf64_ia64_allocate_data *x = (struct elf64_ia64_allocate_data *) data;
@@ -2375,12 +2369,12 @@ allocate_fptr (struct elf64_ia64_dyn_sym
       else
 	dyn_i->want_fptr = 0;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate all the minimal PLT entries.  */
 
-static bfd_boolean
+static bool
 allocate_plt_entries (struct elf64_ia64_dyn_sym_info *dyn_i,
 		      void * data ATTRIBUTE_UNUSED)
 {
@@ -2404,12 +2398,12 @@ allocate_plt_entries (struct elf64_ia64_
 	  dyn_i->want_plt2 = 0;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate all the full PLT entries.  */
 
-static bfd_boolean
+static bool
 allocate_plt2_entries (struct elf64_ia64_dyn_sym_info *dyn_i,
 		       void * data)
 {
@@ -2428,7 +2422,7 @@ allocate_plt2_entries (struct elf64_ia64
 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
       dyn_i->h->plt.offset = ofs;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate all the PLTOFF entries requested by relocations and
@@ -2436,7 +2430,7 @@ allocate_plt2_entries (struct elf64_ia64
    because the latter are not necessarily addressable by the GP.
    ??? Relaxation might be able to determine that they are.  */
 
-static bfd_boolean
+static bool
 allocate_pltoff_entries (struct elf64_ia64_dyn_sym_info *dyn_i,
 			 void * data)
 {
@@ -2447,25 +2441,25 @@ allocate_pltoff_entries (struct elf64_ia
       dyn_i->pltoff_offset = x->ofs;
       x->ofs += 16;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate dynamic relocations for those symbols that turned out
    to be dynamic.  */
 
-static bfd_boolean
+static bool
 allocate_dynrel_entries (struct elf64_ia64_dyn_sym_info *dyn_i,
 			 void * data)
 {
   struct elf64_ia64_allocate_data *x = (struct elf64_ia64_allocate_data *)data;
   struct elf64_ia64_link_hash_table *ia64_info;
   struct elf64_ia64_dyn_reloc_entry *rent;
-  bfd_boolean dynamic_symbol, shared, resolved_zero;
+  bool dynamic_symbol, shared, resolved_zero;
   struct elf64_ia64_link_hash_entry *h_ia64;
 
   ia64_info = elf64_ia64_hash_table (x->info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   /* Note that this can't be used in relation to FPTR relocs below.  */
   dynamic_symbol = elf64_ia64_dynamic_symbol_p (dyn_i->h);
@@ -2519,8 +2513,6 @@ allocate_dynrel_entries (struct elf64_ia
 
   for (rent = dyn_i->reloc_entries; rent; rent = rent->next)
     {
-      int count = rent->count;
-
       switch (rent->type)
 	{
 	case R_IA64_FPTR32LSB:
@@ -2545,10 +2537,6 @@ allocate_dynrel_entries (struct elf64_ia
 	case R_IA64_IPLTLSB:
 	  if (!dynamic_symbol && !shared)
 	    continue;
-	  /* Use two REL relocations for IPLT relocations
-	     against local symbols.  */
-	  if (!dynamic_symbol)
-	    count *= 2;
 	  break;
 	case R_IA64_DTPREL32LSB:
 	case R_IA64_TPREL64LSB:
@@ -2570,10 +2558,10 @@ allocate_dynrel_entries (struct elf64_ia
 	sizeof (Elf64_External_VMS_IMAGE_FIXUP);
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_ia64_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				  struct elf_link_hash_entry *h)
 {
@@ -2589,7 +2577,7 @@ elf64_ia64_adjust_dynamic_symbol (struct
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* If this is a reference to a symbol defined by a dynamic object which
@@ -2599,10 +2587,10 @@ elf64_ia64_adjust_dynamic_symbol (struct
      But IA-64 code is canonically PIC, so as a rule we can avoid this sort
      of hackery.  */
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				  struct bfd_link_info *info)
 {
@@ -2616,7 +2604,7 @@ elf64_ia64_size_dynamic_sections (bfd *o
   dynobj = hash_table->dynobj;
   ia64_info = elf64_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
   BFD_ASSERT(dynobj != NULL);
   data.info = info;
 
@@ -2683,7 +2671,7 @@ elf64_ia64_size_dynamic_sections (bfd *o
      Allocate memory for them.  */
   for (sec = dynobj->sections; sec != NULL; sec = sec->next)
     {
-      bfd_boolean strip;
+      bool strip;
 
       if (!(sec->flags & SEC_LINKER_CREATED))
 	continue;
@@ -2699,7 +2687,7 @@ elf64_ia64_size_dynamic_sections (bfd *o
       strip = (sec->size == 0);
 
       if (sec == ia64_info->root.sgot)
-	strip = FALSE;
+	strip = false;
       else if (sec == ia64_info->root.srelgot)
 	{
 	  if (strip)
@@ -2751,8 +2739,8 @@ elf64_ia64_size_dynamic_sections (bfd *o
 	  name = bfd_section_name (sec);
 
 	  if (strcmp (name, ".got.plt") == 0)
-	    strip = FALSE;
-	  else if (CONST_STRNEQ (name, ".rel"))
+	    strip = false;
+	  else if (startswith (name, ".rel"))
 	    {
 	      if (!strip)
 		{
@@ -2772,7 +2760,7 @@ elf64_ia64_size_dynamic_sections (bfd *o
 	  /* Allocate memory for the section contents.  */
 	  sec->contents = (bfd_byte *) bfd_zalloc (dynobj, sec->size);
 	  if (sec->contents == NULL && sec->size != 0)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -2802,31 +2790,31 @@ elf64_ia64_size_dynamic_sections (bfd *o
       vms_get_time (&time_hi, &time_lo);
 
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_IDENT, 0))
-	return FALSE;
+	return false;
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_LINKTIME,
-				       (((bfd_uint64_t)time_hi) << 32)
+				       ((uint64_t) time_hi << 32)
 				       + time_lo))
-	return FALSE;
+	return false;
 
       /* Strtab.  */
       strdyn_off = dynsec->size;
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_STRTAB_OFFSET, 0))
-	return FALSE;
+	return false;
       if (!_bfd_elf_add_dynamic_entry (info, DT_STRSZ, 0))
-	return FALSE;
+	return false;
 
       /* PLTGOT  */
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_PLTGOT_SEG, 0))
-	return FALSE;
+	return false;
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_PLTGOT_OFFSET, 0))
-	return FALSE;
+	return false;
 
       /* Misc.  */
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_FPMODE, 0x9800000))
-	return FALSE;
+	return false;
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_LNKFLAGS,
 				       VMS_LF_IMGSTA | VMS_LF_MAIN))
-	return FALSE;
+	return false;
 
       /* Add entries for shared libraries.  */
       for (abfd = info->input_bfds; abfd; abfd = abfd->link.next)
@@ -2843,27 +2831,27 @@ elf64_ia64_size_dynamic_sections (bfd *o
 
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_NEEDED_IDENT,
 					   elf_ia64_vms_ident (abfd)))
-	    return FALSE;
+	    return false;
 
-	  soname = vms_get_module_name (abfd->filename, TRUE);
+	  soname = vms_get_module_name (bfd_get_filename (abfd), true);
 	  if (soname == NULL)
-	    return FALSE;
+	    return false;
 	  strindex = dynstrsec->size;
 	  soname_len = strlen (soname) + 1;
 	  newcontents = (bfd_byte *) bfd_realloc (dynstrsec->contents,
 						  strindex + soname_len);
 	  if (newcontents == NULL)
-	    return FALSE;
+	    return false;
 	  memcpy (newcontents + strindex, soname, soname_len);
 	  dynstrsec->size += soname_len;
 	  dynstrsec->contents = newcontents;
 
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
-	    return FALSE;
+	    return false;
 
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_FIXUP_NEEDED,
 					   shl_num))
-	    return FALSE;
+	    return false;
 	  shl_num++;
 
 	  /* The fixups_off was in fact containing the size of the fixup
@@ -2874,27 +2862,27 @@ elf64_ia64_size_dynamic_sections (bfd *o
 	  if (!_bfd_elf_add_dynamic_entry
 	      (info, DT_IA_64_VMS_FIXUP_RELA_CNT,
 	       fixups_shl_off / sizeof (Elf64_External_VMS_IMAGE_FIXUP)))
-	    return FALSE;
+	    return false;
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_FIXUP_RELA_OFF,
 					   fixups_off))
-	    return FALSE;
+	    return false;
 	  fixups_off += fixups_shl_off;
 	}
 
       /* Unwind.  */
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWINDSZ, 0))
-	return FALSE;
+	return false;
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWIND_CODSEG, 0))
-	return FALSE;
+	return false;
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWIND_INFOSEG, 0))
-	return FALSE;
+	return false;
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWIND_OFFSET, 0))
-	return FALSE;
+	return false;
       if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWIND_SEG, 0))
-	return FALSE;
+	return false;
 
       if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0xdead))
-	    return FALSE;
+	    return false;
 
       /* Fix the strtab entries.  */
       bed = get_elf_backend_data (hash_table->dynobj);
@@ -2920,12 +2908,12 @@ elf64_ia64_size_dynamic_sections (bfd *o
 
       /* Note section.  */
       if (!create_ia64_vms_notes (output_bfd, info, time_hi, time_lo))
-	return FALSE;
+	return false;
     }
 
   /* ??? Perhaps force __gp local.  */
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -2977,7 +2965,7 @@ set_got_entry (bfd *abfd, struct bfd_lin
 {
   struct elf64_ia64_link_hash_table *ia64_info;
   asection *got_sec;
-  bfd_boolean done;
+  bool done;
   bfd_vma got_offset;
 
   ia64_info = elf64_ia64_hash_table (info);
@@ -2996,7 +2984,7 @@ set_got_entry (bfd *abfd, struct bfd_lin
       break;
     default:
       done = dyn_i->got_done;
-      dyn_i->got_done = TRUE;
+      dyn_i->got_done = true;
       got_offset = dyn_i->got_offset;
       break;
     }
@@ -3037,7 +3025,7 @@ set_got_entry (bfd *abfd, struct bfd_lin
 	      dyn_r_type = R_IA64_VMS_FIX64;
 	      break;
 	    default:
-	      BFD_ASSERT (FALSE);
+	      BFD_ASSERT (false);
 	      break;
 	    }
 	  elf64_ia64_install_fixup
@@ -3095,7 +3083,7 @@ set_fptr_entry (bfd *abfd, struct bfd_li
 static bfd_vma
 set_pltoff_entry (bfd *abfd, struct bfd_link_info *info,
 		  struct elf64_ia64_dyn_sym_info *dyn_i,
-		  bfd_vma value, bfd_boolean is_plt)
+		  bfd_vma value, bool is_plt)
 {
   struct elf64_ia64_link_hash_table *ia64_info;
   asection *pltoff_sec;
@@ -3157,8 +3145,8 @@ elf64_ia64_unwind_entry_compare (const v
 }
 
 /* Make sure we've got ourselves a nice fat __gp value.  */
-static bfd_boolean
-elf64_ia64_choose_gp (bfd *abfd, struct bfd_link_info *info, bfd_boolean final)
+static bool
+elf64_ia64_choose_gp (bfd *abfd, struct bfd_link_info *info, bool final)
 {
   bfd_vma min_vma = (bfd_vma) -1, max_vma = 0;
   bfd_vma min_short_vma = min_vma, max_short_vma = 0;
@@ -3169,7 +3157,7 @@ elf64_ia64_choose_gp (bfd *abfd, struct
 
   ia64_info = elf64_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   /* Find the min and max vma of all sections marked short.  Also collect
      min and max vma of any type, for use in selecting a nice gp.  */
@@ -3218,8 +3206,8 @@ elf64_ia64_choose_gp (bfd *abfd, struct
     }
 
   /* See if the user wants to force a value.  */
-  gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE,
-			     FALSE, FALSE);
+  gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", false,
+			     false, false);
 
   if (gp
       && (gp->root.type == bfd_link_hash_defined
@@ -3284,12 +3272,12 @@ elf64_ia64_choose_gp (bfd *abfd, struct
     {
       if (max_short_vma - min_short_vma >= 0x400000)
 	{
-overflow:
+	overflow:
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: short data segment overflowed (%#" PRIx64 " >= 0x400000)"),
 	     abfd, (uint64_t) (max_short_vma - min_short_vma));
-	  return FALSE;
+	  return false;
 	}
       else if ((gp_val > min_short_vma
 		&& gp_val - min_short_vma > 0x200000)
@@ -3298,16 +3286,16 @@ overflow:
 	{
 	  _bfd_error_handler
 	    (_("%pB: __gp does not cover short data segment"), abfd);
-	  return FALSE;
+	  return false;
 	}
     }
 
   _bfd_set_gp_value (abfd, gp_val);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_ia64_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf64_ia64_link_hash_table *ia64_info;
@@ -3315,7 +3303,7 @@ elf64_ia64_final_link (bfd *abfd, struct
 
   ia64_info = elf64_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   /* Make sure we've got ourselves a nice fat __gp value.  */
   if (!bfd_link_relocatable (info))
@@ -3326,12 +3314,12 @@ elf64_ia64_final_link (bfd *abfd, struct
       /* We assume after gp is set, section size will only decrease. We
 	 need to adjust gp for it.  */
       _bfd_set_gp_value (abfd, 0);
-      if (! elf64_ia64_choose_gp (abfd, info, TRUE))
-	return FALSE;
+      if (! elf64_ia64_choose_gp (abfd, info, true))
+	return false;
       gp_val = _bfd_get_gp_value (abfd);
 
-      gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE,
-				 FALSE, FALSE);
+      gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", false,
+				 false, false);
       if (gp)
 	{
 	  gp->root.type = bfd_link_hash_defined;
@@ -3353,13 +3341,13 @@ elf64_ia64_final_link (bfd *abfd, struct
 	  unwind_output_sec->contents
 	    = bfd_malloc (unwind_output_sec->size);
 	  if (unwind_output_sec->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
 
   /* Invoke the regular ELF backend linker to do all the work.  */
   if (!bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
   if (unwind_output_sec)
     {
@@ -3372,13 +3360,13 @@ elf64_ia64_final_link (bfd *abfd, struct
       if (! bfd_set_section_contents (abfd, unwind_output_sec,
 				      unwind_output_sec->contents, (bfd_vma) 0,
 				      unwind_output_sec->size))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static int
 elf64_ia64_relocate_section (bfd *output_bfd,
 			     struct bfd_link_info *info,
 			     bfd *input_bfd,
@@ -3392,13 +3380,13 @@ elf64_ia64_relocate_section (bfd *output
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
-  bfd_boolean ret_val = TRUE;	/* for non-fatal errors */
+  bool ret_val = true;	/* for non-fatal errors */
   bfd_vma gp_val;
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   ia64_info = elf64_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   /* Infect various flags from the input section to the output section.  */
   if (bfd_link_relocatable (info))
@@ -3428,8 +3416,8 @@ elf64_ia64_relocate_section (bfd *output
       bfd_vma value;
       asection *sym_sec;
       bfd_byte *hit_addr;
-      bfd_boolean dynamic_symbol_p;
-      bfd_boolean undef_weak_ref;
+      bool dynamic_symbol_p;
+      bool undef_weak_ref;
 
       r_type = ELF64_R_TYPE (rel->r_info);
       if (r_type > R_IA64_MAX_RELOC_CODE)
@@ -3438,21 +3426,21 @@ elf64_ia64_relocate_section (bfd *output
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      input_bfd, (int) r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ret_val = FALSE;
+	  ret_val = false;
 	  continue;
 	}
 
       howto = ia64_elf_lookup_howto (r_type);
       if (howto == NULL)
 	{
-	  ret_val = FALSE;
+	  ret_val = false;
 	  continue;
 	}
       r_symndx = ELF64_R_SYM (rel->r_info);
       h = NULL;
       sym = NULL;
       sym_sec = NULL;
-      undef_weak_ref = FALSE;
+      undef_weak_ref = false;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -3469,7 +3457,7 @@ elf64_ia64_relocate_section (bfd *output
 	    {
 	      struct elf64_ia64_local_hash_entry *loc_h;
 
-	      loc_h = get_local_sym_hash (ia64_info, input_bfd, rel, FALSE);
+	      loc_h = get_local_sym_hash (ia64_info, input_bfd, rel, false);
 	      if (loc_h && ! loc_h->sec_merge_done)
 		{
 		  struct elf64_ia64_dyn_sym_info *dynent;
@@ -3508,8 +3496,8 @@ elf64_ia64_relocate_section (bfd *output
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc;
-	  bfd_boolean warned, ignored;
+	  bool unresolved_reloc;
+	  bool warned, ignored;
 	  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
@@ -3518,7 +3506,7 @@ elf64_ia64_relocate_section (bfd *output
 				   unresolved_reloc, warned, ignored);
 
 	  if (h->root.type == bfd_link_hash_undefweak)
-	    undef_weak_ref = TRUE;
+	    undef_weak_ref = true;
 	  else if (warned)
 	    continue;
 	}
@@ -3573,7 +3561,7 @@ elf64_ia64_relocate_section (bfd *output
 		     h ? h->root.root.string
 		       : bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
 					   sym_sec));
-		  ret_val = FALSE;
+		  ret_val = false;
 		  continue;
 
 		default:
@@ -3603,7 +3591,7 @@ elf64_ia64_relocate_section (bfd *output
 		  dyn_r_type = R_IA64_VMS_FIX64;
 		  break;
 		default:
-		  BFD_ASSERT (FALSE);
+		  BFD_ASSERT (false);
 		  break;
 		}
 	      elf64_ia64_install_fixup
@@ -3636,7 +3624,7 @@ elf64_ia64_relocate_section (bfd *output
 		 h ? h->root.root.string
 		   : bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
 				       sym_sec));
-	      ret_val = FALSE;
+	      ret_val = false;
 	      continue;
 	    }
 	  value -= gp_val;
@@ -3646,7 +3634,7 @@ elf64_ia64_relocate_section (bfd *output
 	case R_IA64_LTOFF22:
 	case R_IA64_LTOFF22X:
 	case R_IA64_LTOFF64I:
-	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, false);
 	  value = set_got_entry (input_bfd, info, dyn_i,
 				 rel->r_addend, value, R_IA64_DIR64LSB);
 	  value -= gp_val;
@@ -3657,8 +3645,8 @@ elf64_ia64_relocate_section (bfd *output
 	case R_IA64_PLTOFF64I:
 	case R_IA64_PLTOFF64MSB:
 	case R_IA64_PLTOFF64LSB:
-	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
-	  value = set_pltoff_entry (output_bfd, info, dyn_i, value, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, false);
+	  value = set_pltoff_entry (output_bfd, info, dyn_i, value, false);
 	  value -= gp_val;
 	  r = ia64_elf_install_value (hit_addr, value, r_type);
 	  break;
@@ -3668,7 +3656,7 @@ elf64_ia64_relocate_section (bfd *output
 	case R_IA64_FPTR32LSB:
 	case R_IA64_FPTR64MSB:
 	case R_IA64_FPTR64LSB:
-	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, false);
 	  if (dyn_i->want_fptr)
 	    {
 	      if (!undef_weak_ref)
@@ -3692,7 +3680,7 @@ elf64_ia64_relocate_section (bfd *output
 		      _bfd_error_handler
 			(_("%pB: linking non-pic code in a position independent executable"),
 			 input_bfd);
-		      ret_val = FALSE;
+		      ret_val = false;
 		      continue;
 		    }
 		}
@@ -3718,7 +3706,7 @@ elf64_ia64_relocate_section (bfd *output
 	case R_IA64_LTOFF_FPTR32LSB:
 	case R_IA64_LTOFF_FPTR64MSB:
 	case R_IA64_LTOFF_FPTR64LSB:
-	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, false);
 	  if (dyn_i->want_fptr)
 	    {
 	      BFD_ASSERT (h == NULL || !h->def_dynamic);
@@ -3751,7 +3739,7 @@ elf64_ia64_relocate_section (bfd *output
 	  /* We should have created a PLT entry for any dynamic symbol.  */
 	  dyn_i = NULL;
 	  if (h)
-	    dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, FALSE);
+	    dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, false);
 
 	  if (dyn_i && dyn_i->want_plt2)
 	    {
@@ -3805,7 +3793,7 @@ elf64_ia64_relocate_section (bfd *output
 						      symtab_hdr,
 						      sym,
 						      sym_sec));
-	      ret_val = FALSE;
+	      ret_val = false;
 	      continue;
 	    }
 	  goto finish_pcrel;
@@ -3911,7 +3899,7 @@ elf64_ia64_relocate_section (bfd *output
 	     don't try to continue.  */
 	  (*info->callbacks->undefined_symbol)
 	    (info, "__gp", input_bfd, input_section, rel->r_offset, 1);
-	  return FALSE;
+	  return false;
 
 	case bfd_reloc_notsupported:
 	  {
@@ -3925,7 +3913,7 @@ elf64_ia64_relocate_section (bfd *output
 	    (*info->callbacks->warning) (info, _("unsupported reloc"),
 					 name, input_bfd,
 					 input_section, rel->r_offset);
-	    ret_val = FALSE;
+	    ret_val = false;
 	  }
 	  break;
 
@@ -3996,7 +3984,7 @@ elf64_ia64_relocate_section (bfd *output
 		break;
 	      }
 
-	    ret_val = FALSE;
+	    ret_val = false;
 	  }
 	  break;
 	}
@@ -4005,7 +3993,7 @@ elf64_ia64_relocate_section (bfd *output
   return ret_val;
 }
 
-static bfd_boolean
+static bool
 elf64_ia64_finish_dynamic_symbol (bfd *output_bfd,
 				  struct bfd_link_info *info,
 				  struct elf_link_hash_entry *h,
@@ -4016,9 +4004,9 @@ elf64_ia64_finish_dynamic_symbol (bfd *o
 
   ia64_info = elf64_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
-  dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, FALSE);
+  dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, false);
 
   /* Fill in the PLT data, if required.  */
   if (dyn_i && dyn_i->want_plt)
@@ -4031,7 +4019,7 @@ elf64_ia64_finish_dynamic_symbol (bfd *o
 
       plt_sec = ia64_info->root.splt;
       plt_addr = 0;  /* Not used as overriden by FIXUPs.  */
-      pltoff_addr = set_pltoff_entry (output_bfd, info, dyn_i, plt_addr, TRUE);
+      pltoff_addr = set_pltoff_entry (output_bfd, info, dyn_i, plt_addr, true);
 
       /* Initialize the FULL PLT entry, if needed.  */
       if (dyn_i->want_plt2)
@@ -4062,10 +4050,10 @@ elf64_ia64_finish_dynamic_symbol (bfd *o
       || h == ia64_info->root.hplt)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_ia64_finish_dynamic_sections (bfd *abfd,
 				    struct bfd_link_info *info)
 {
@@ -4074,7 +4062,7 @@ elf64_ia64_finish_dynamic_sections (bfd
 
   ia64_info = elf64_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   dynobj = ia64_info->root.dynobj;
 
@@ -4185,8 +4173,8 @@ elf64_ia64_finish_dynamic_sections (bfd
 		+ tfr_sec->output_offset
 		+ 6 * 8, tfr->tfradr3);
 
-    tfr3 = elf_link_hash_lookup (elf_hash_table (info), "ELF$TFRADR", FALSE,
-				 FALSE, FALSE);
+    tfr3 = elf_link_hash_lookup (elf_hash_table (info), "ELF$TFRADR", false,
+				 false, false);
 
     if (tfr3
 	&& (tfr3->root.type == bfd_link_hash_defined
@@ -4207,44 +4195,48 @@ elf64_ia64_finish_dynamic_sections (bfd
        handle lib$initialize.  */
   }
 
-  return TRUE;
+  return true;
 }
 
 /* ELF file flag handling:  */
 
 /* Function to keep IA-64 specific file flags.  */
-static bfd_boolean
+static bool
 elf64_ia64_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
-static bfd_boolean
+static bool
 elf64_ia64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword out_flags;
   flagword in_flags;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
+
+  /* FIXME: What should be checked when linking shared libraries?  */
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
 
   /* Don't even pretend to support mixed-format linking.  */
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return FALSE;
+    return false;
 
   in_flags  = elf_elfheader (ibfd)->e_flags;
   out_flags = elf_elfheader (obfd)->e_flags;
 
   if (! elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
@@ -4254,12 +4246,12 @@ elf64_ia64_merge_private_bfd_data (bfd *
 				    bfd_get_mach (ibfd));
 	}
 
-      return TRUE;
+      return true;
     }
 
   /* Check flag compatibility.  */
   if (in_flags == out_flags)
-    return TRUE;
+    return true;
 
   /* Output has EF_IA_64_REDUCEDFP set only if all inputs have it set.  */
   if (!(in_flags & EF_IA_64_REDUCEDFP) && (out_flags & EF_IA_64_REDUCEDFP))
@@ -4272,7 +4264,7 @@ elf64_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
   if ((in_flags & EF_IA_64_BE) != (out_flags & EF_IA_64_BE))
     {
@@ -4281,7 +4273,7 @@ elf64_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
   if ((in_flags & EF_IA_64_ABI64) != (out_flags & EF_IA_64_ABI64))
     {
@@ -4290,7 +4282,7 @@ elf64_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
   if ((in_flags & EF_IA_64_CONS_GP) != (out_flags & EF_IA_64_CONS_GP))
     {
@@ -4299,7 +4291,7 @@ elf64_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
   if ((in_flags & EF_IA_64_NOFUNCDESC_CONS_GP)
       != (out_flags & EF_IA_64_NOFUNCDESC_CONS_GP))
@@ -4309,13 +4301,13 @@ elf64_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
 
   return ok;
 }
 
-static bfd_boolean
+static bool
 elf64_ia64_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -4334,7 +4326,7 @@ elf64_ia64_print_private_bfd_data (bfd *
 	   (flags & EF_IA_64_ABI64) ? "ABI64" : "ABI32");
 
   _bfd_elf_print_private_bfd_data (abfd, ptr);
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -4366,7 +4358,7 @@ static const struct bfd_elf_special_sect
   { NULL,		     0,	  0, 0,		   0 }
 };
 
-static bfd_boolean
+static bool
 elf64_ia64_object_p (bfd *abfd)
 {
   asection *sec;
@@ -4374,10 +4366,10 @@ elf64_ia64_object_p (bfd *abfd)
   flagword flags;
   const char *name;
   char *unwi_name, *unw_name;
-  bfd_size_type amt;
+  size_t amt;
 
   if (abfd->flags & DYNAMIC)
-    return TRUE;
+    return true;
 
   /* Flags for fake group section.  */
   flags = (SEC_LINKER_CREATED | SEC_GROUP | SEC_LINK_ONCE
@@ -4390,14 +4382,14 @@ elf64_ia64_object_p (bfd *abfd)
       if (elf_sec_group (sec) == NULL
 	  && ((sec->flags & (SEC_LINK_ONCE | SEC_CODE | SEC_GROUP))
 	      == (SEC_LINK_ONCE | SEC_CODE))
-	  && CONST_STRNEQ (sec->name, ".gnu.linkonce.t."))
+	  && startswith (sec->name, ".gnu.linkonce.t."))
 	{
 	  name = sec->name + 16;
 
 	  amt = strlen (name) + sizeof (".gnu.linkonce.ia64unwi.");
 	  unwi_name = bfd_alloc (abfd, amt);
 	  if (!unwi_name)
-	    return FALSE;
+	    return false;
 
 	  strcpy (stpcpy (unwi_name, ".gnu.linkonce.ia64unwi."), name);
 	  unwi = bfd_get_section_by_name (abfd, unwi_name);
@@ -4405,7 +4397,7 @@ elf64_ia64_object_p (bfd *abfd)
 	  amt = strlen (name) + sizeof (".gnu.linkonce.ia64unw.");
 	  unw_name = bfd_alloc (abfd, amt);
 	  if (!unw_name)
-	    return FALSE;
+	    return false;
 
 	  strcpy (stpcpy (unw_name, ".gnu.linkonce.ia64unw."), name);
 	  unw = bfd_get_section_by_name (abfd, unw_name);
@@ -4415,7 +4407,7 @@ elf64_ia64_object_p (bfd *abfd)
 	  group = bfd_make_section_anyway_with_flags (abfd, name,
 						      flags);
 	  if (group == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Move the fake group section to the beginning.  */
 	  bfd_section_list_remove (abfd, group);
@@ -4456,14 +4448,14 @@ elf64_ia64_object_p (bfd *abfd)
 	  elf_section_data (group)->this_hdr.sh_type = SHT_GROUP;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Handle an IA-64 specific section when reading an object file.  This
    is called when bfd_section_from_shdr finds a section with an unknown
    type.  */
 
-static bfd_boolean
+static bool
 elf64_vms_section_from_shdr (bfd *abfd,
 			     Elf_Internal_Shdr *hdr,
 			     const char *name,
@@ -4485,15 +4477,15 @@ elf64_vms_section_from_shdr (bfd *abfd,
 
     case SHT_IA_64_EXT:
       if (strcmp (name, ELF_STRING_ia64_archext) != 0)
-	return FALSE;
+	return false;
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
 
   if (secflags != 0)
     {
@@ -4501,13 +4493,13 @@ elf64_vms_section_from_shdr (bfd *abfd,
 
       if (!bfd_set_section_flags (newsect,
 				  bfd_section_flags (newsect) | secflags))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_vms_object_p (bfd *abfd)
 {
   Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
@@ -4519,7 +4511,7 @@ elf64_vms_object_p (bfd *abfd)
   char name[16];
 
   if (!elf64_ia64_object_p (abfd))
-    return FALSE;
+    return false;
 
   /* Many VMS compilers do not generate sections for the corresponding
      segment.  This is boring as binutils tools won't be able to disassemble
@@ -4593,14 +4585,14 @@ elf64_vms_object_p (bfd *abfd)
 	      size_t name_len = strlen (name) + 1;
 	      nname = bfd_alloc (abfd, name_len);
 	      if (nname == NULL)
-		return FALSE;
+		return false;
 	      memcpy (nname, name, name_len);
 	    }
 
 	  /* Create and fill new section.  */
 	  nsec = bfd_make_section_anyway_with_flags (abfd, nname, flags);
 	  if (nsec == NULL)
-	    return FALSE;
+	    return false;
 	  nsec->vma = base_vma;
 	  nsec->size = next_vma - base_vma;
 	  nsec->filepos = i_phdr->p_offset + (base_vma - i_phdr->p_vaddr);
@@ -4608,24 +4600,24 @@ elf64_vms_object_p (bfd *abfd)
 	  base_vma = next_vma;
 	}
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_vms_init_file_header (bfd *abfd, struct bfd_link_info *info)
 {
   Elf_Internal_Ehdr *i_ehdrp;
 
   if (!_bfd_elf_init_file_header (abfd, info))
-    return FALSE;
+    return false;
 
   i_ehdrp = elf_elfheader (abfd);
   i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_OPENVMS;
   i_ehdrp->e_ident[EI_ABIVERSION] = 2;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_vms_section_processing (bfd *abfd ATTRIBUTE_UNUSED,
 			      Elf_Internal_Shdr *hdr)
 {
@@ -4655,13 +4647,13 @@ elf64_vms_section_processing (bfd *abfd
 	hdr->sh_type = SHT_IA_64_VMS_DEBUG_STR;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* The final processing done just before writing out a VMS IA-64 ELF
    object file.  */
 
-static bfd_boolean
+static bool
 elf64_vms_final_write_processing (bfd *abfd)
 {
   Elf_Internal_Shdr *hdr;
@@ -4695,32 +4687,34 @@ elf64_vms_final_write_processing (bfd *a
 	flags |= EF_IA_64_ABI64;
 
       elf_elfheader (abfd)->e_flags = flags;
-      elf_flags_init (abfd) = TRUE;
+      elf_flags_init (abfd) = true;
     }
   return _bfd_elf_final_write_processing (abfd);
 }
 
-static bfd_boolean
+static bool
 elf64_vms_write_shdrs_and_ehdr (bfd *abfd)
 {
   unsigned char needed_count[8];
 
   if (!bfd_elf64_write_shdrs_and_ehdr (abfd))
-    return FALSE;
+    return false;
 
   bfd_putl64 (elf_ia64_vms_tdata (abfd)->needed_count, needed_count);
 
   if (bfd_seek (abfd, sizeof (Elf64_External_Ehdr), SEEK_SET) != 0
-      || bfd_bwrite (needed_count, 8, abfd) != 8)
-    return FALSE;
+      || bfd_write (needed_count, 8, abfd) != 8)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_vms_close_and_cleanup (bfd *abfd)
 {
-  if (bfd_get_format (abfd) == bfd_object)
+  bool ret = true;
+  if (bfd_get_format (abfd) == bfd_object
+      && bfd_write_p (abfd))
     {
       long isize;
 
@@ -4728,20 +4722,21 @@ elf64_vms_close_and_cleanup (bfd *abfd)
       isize = bfd_get_size (abfd);
       if ((isize & 7) != 0)
 	{
-	  int ishort = 8 - (isize & 7);
-	  bfd_uint64_t pad = 0;
+	  unsigned int ishort = 8 - (isize & 7);
+	  uint64_t pad = 0;
 
-	  bfd_seek (abfd, isize, SEEK_SET);
-	  bfd_bwrite (&pad, ishort, abfd);
+	  if (bfd_seek (abfd, isize, SEEK_SET) != 0
+	      || bfd_write (&pad, ishort, abfd) != ishort)
+	    ret = false;
 	}
     }
 
-  return _bfd_elf_close_and_cleanup (abfd);
+  return _bfd_generic_close_and_cleanup (abfd) && ret;
 }
 
 /* Add symbols from an ELF object file to the linker hash table.  */
 
-static bfd_boolean
+static bool
 elf64_vms_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   Elf_Internal_Shdr *hdr;
@@ -4749,7 +4744,7 @@ elf64_vms_link_add_object_symbols (bfd *
   bfd_size_type extsymcount;
   bfd_size_type extsymoff;
   struct elf_link_hash_entry **sym_hash;
-  bfd_boolean dynamic;
+  bool dynamic;
   Elf_Internal_Sym *isymbuf = NULL;
   Elf_Internal_Sym *isym;
   Elf_Internal_Sym *isymend;
@@ -4761,16 +4756,16 @@ elf64_vms_link_add_object_symbols (bfd *
   bed = get_elf_backend_data (abfd);
 
   if ((abfd->flags & DYNAMIC) == 0)
-    dynamic = FALSE;
+    dynamic = false;
   else
     {
-      dynamic = TRUE;
+      dynamic = true;
 
       /* You can't use -r against a dynamic object.  Also, there's no
 	 hope of using a dynamic object which does not exactly match
 	 the format of the output file.  */
       if (bfd_link_relocatable (info)
-	  || !is_elf_hash_table (htab)
+	  || !is_elf_hash_table (&htab->root)
 	  || info->output_bfd->xvec != abfd->xvec)
 	{
 	  if (bfd_link_relocatable (info))
@@ -4789,7 +4784,7 @@ elf64_vms_link_add_object_symbols (bfd *
 	 format.  FIXME: If there are no input BFD's of the same
 	 format as the output, we can't make a shared library.  */
       if (bfd_link_pic (info)
-	  && is_elf_hash_table (htab)
+	  && is_elf_hash_table (&htab->root)
 	  && info->output_bfd->xvec == abfd->xvec
 	  && !htab->dynamic_sections_created)
 	{
@@ -4797,7 +4792,7 @@ elf64_vms_link_add_object_symbols (bfd *
 	    goto error_return;
 	}
     }
-  else if (!is_elf_hash_table (htab))
+  else if (!is_elf_hash_table (&htab->root))
     goto error_return;
   else
     {
@@ -4848,13 +4843,13 @@ elf64_vms_link_add_object_symbols (bfd *
       /* Extract IDENT.  */
       if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
 	{
-error_free_dyn:
+	error_free_dyn:
 	  free (dynbuf);
 	  goto error_return;
 	}
 
       for (extdyn = dynbuf;
-	   extdyn < dynbuf + s->size;
+	   (size_t) (dynbuf + s->size - extdyn) >= bed->s->sizeof_dyn;
 	   extdyn += bed->s->sizeof_dyn)
 	{
 	  Elf_Internal_Dyn dyn;
@@ -4862,7 +4857,7 @@ error_free_dyn:
 	  bed->s->swap_dyn_in (abfd, extdyn, &dyn);
 	  if (dyn.d_tag == DT_IA_64_VMS_IDENT)
 	    {
-	      bfd_uint64_t tagv = dyn.d_un.d_val;
+	      uint64_t tagv = dyn.d_un.d_val;
 	      elf_ia64_vms_ident (abfd) = tagv;
 	      break;
 	    }
@@ -4923,10 +4918,10 @@ error_free_dyn:
       flagword flags;
       const char *name;
       struct elf_link_hash_entry *h;
-      bfd_boolean definition;
-      bfd_boolean size_change_ok;
-      bfd_boolean type_change_ok;
-      bfd_boolean common;
+      bool definition;
+      bool size_change_ok;
+      bool type_change_ok;
+      bool common;
       unsigned int old_alignment;
       bfd *old_bfd;
 
@@ -5017,27 +5012,27 @@ error_free_dyn:
 
       if (bfd_is_und_section (sec)
 	  || bfd_is_com_section (sec))
-	definition = FALSE;
+	definition = false;
       else
-	definition = TRUE;
+	definition = true;
 
-      size_change_ok = FALSE;
+      size_change_ok = false;
       type_change_ok = bed->type_change_ok;
       old_alignment = 0;
       old_bfd = NULL;
       new_sec = sec;
 
       if (! bfd_is_und_section (sec))
-	h = elf_link_hash_lookup (htab, name, TRUE, FALSE, FALSE);
+	h = elf_link_hash_lookup (htab, name, true, false, false);
       else
 	h = ((struct elf_link_hash_entry *) bfd_wrapped_link_hash_lookup
-	     (abfd, info, name, TRUE, FALSE, FALSE));
+	     (abfd, info, name, true, false, false));
       if (h == NULL)
 	goto error_free_sym;
 
       *sym_hash = h;
 
-      if (is_elf_hash_table (htab))
+      if (is_elf_hash_table (&htab->root))
 	{
 	  while (h->root.type == bfd_link_hash_indirect
 		 || h->root.type == bfd_link_hash_warning)
@@ -5070,7 +5065,7 @@ error_free_dyn:
 	}
 
       if (! (_bfd_generic_link_add_one_symbol
-	     (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
+	     (info, abfd, name, flags, sec, value, NULL, false, bed->collect,
 	      (struct bfd_link_hash_entry **) sym_hash)))
 	goto error_free_vers;
 
@@ -5106,7 +5101,7 @@ error_free_dyn:
 	    h->root.u.c.p->alignment_power = old_alignment;
 	}
 
-      if (is_elf_hash_table (htab))
+      if (is_elf_hash_table (&htab->root))
 	{
 	  /* Check the alignment when a common symbol is involved. This
 	     can change when a common symbol is overridden by a normal
@@ -5239,11 +5234,8 @@ error_free_dyn:
 	}
     }
 
-  if (isymbuf != NULL)
-    {
-      free (isymbuf);
-      isymbuf = NULL;
-    }
+  free (isymbuf);
+  isymbuf = NULL;
 
   /* If this object is the same format as the output object, and it is
      not a shared library, then let the backend look through the
@@ -5263,7 +5255,7 @@ error_free_dyn:
      I have no idea how to handle linking PIC code into a file of a
      different format.  It probably can't be done.  */
   if (! dynamic
-      && is_elf_hash_table (htab)
+      && is_elf_hash_table (&htab->root)
       && bed->check_relocs != NULL
       && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
     {
@@ -5272,7 +5264,7 @@ error_free_dyn:
       for (o = abfd->sections; o != NULL; o = o->next)
 	{
 	  Elf_Internal_Rela *internal_relocs;
-	  bfd_boolean ok;
+	  bool ok;
 
 	  if ((o->flags & SEC_RELOC) == 0
 	      || o->reloc_count == 0
@@ -5296,17 +5288,16 @@ error_free_dyn:
 	}
     }
 
-  return TRUE;
+  return true;
 
  error_free_vers:
  error_free_sym:
-  if (isymbuf != NULL)
-    free (isymbuf);
+  free (isymbuf);
  error_return:
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 elf64_vms_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   int pass;
@@ -5317,7 +5308,7 @@ elf64_vms_link_add_archive_symbols (bfd
   if (info->output_bfd->xvec != abfd->xvec)
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   /* The archive_pass field in the archive itself is used to
@@ -5364,7 +5355,7 @@ elf64_vms_link_add_archive_symbols (bfd
 
       element = bfd_get_elt_at_index (abfd, symidx);
       if (element == NULL)
-	return FALSE;
+	return false;
 
       if (element->archive_pass == -1 || element->archive_pass == pass)
 	{
@@ -5379,13 +5370,13 @@ elf64_vms_link_add_archive_symbols (bfd
 	  if (element == NULL || !bfd_check_format (element, bfd_object))
 	    {
 	      orig_element->archive_pass = -1;
-	      return FALSE;
+	      return false;
 	    }
 	}
       else if (! bfd_check_format (element, bfd_object))
 	{
 	  element->archive_pass = -1;
-	  return FALSE;
+	  return false;
 	}
 
       /* Unlike the generic linker, we know that this element provides
@@ -5395,15 +5386,15 @@ elf64_vms_link_add_archive_symbols (bfd
 						     h->root.string, &element))
 	continue;
       if (! elf64_vms_link_add_object_symbols (element, info))
-	return FALSE;
+	return false;
 
       orig_element->archive_pass = pass;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_vms_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   switch (bfd_get_format (abfd))
@@ -5416,11 +5407,11 @@ elf64_vms_bfd_link_add_symbols (bfd *abf
       break;
     default:
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 }
 
-static bfd_boolean
+static bool
 elf64_ia64_vms_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-mips.c ./bfd/elf64-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-mips.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-mips.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS-specific support for 64-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Ian Lance Taylor, Cygnus Support
    Linker support added by Mark Mitchell, CodeSourcery, LLC.
    <mark@codesourcery.com>
@@ -80,15 +80,15 @@ static void mips_elf64_be_swap_reloca_ou
   (bfd *, const Elf_Internal_Rela *, bfd_byte *);
 static reloc_howto_type *bfd_elf64_bfd_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean mips_elf64_info_to_howto_rela
+static bool mips_elf64_info_to_howto_rela
   (bfd *, arelent *, Elf_Internal_Rela *);
 static long mips_elf64_get_dynamic_reloc_upper_bound
   (bfd *);
-static bfd_boolean mips_elf64_slurp_one_reloc_table
+static bool mips_elf64_slurp_one_reloc_table
   (bfd *, asection *, Elf_Internal_Shdr *, bfd_size_type, arelent *,
-   asymbol **, bfd_boolean);
-static bfd_boolean mips_elf64_slurp_reloc_table
-  (bfd *, asection *, asymbol **, bfd_boolean);
+   asymbol **, bool);
+static bool mips_elf64_slurp_reloc_table
+  (bfd *, asection *, asymbol **, bool);
 static void mips_elf64_write_relocs
   (bfd *, asection *, void *);
 static void mips_elf64_write_rel
@@ -105,17 +105,17 @@ static bfd_reloc_status_type mips_elf64_
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type mips16_gprel_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_boolean mips_elf64_assign_gp
+static bool mips_elf64_assign_gp
   (bfd *, bfd_vma *);
 static bfd_reloc_status_type mips_elf64_final_gp
-  (bfd *, asymbol *, bfd_boolean, char **, bfd_vma *);
-static bfd_boolean mips_elf64_object_p
+  (bfd *, asymbol *, bool, char **, bfd_vma *);
+static bool mips_elf64_object_p
   (bfd *);
 static irix_compat_t elf64_mips_irix_compat
   (bfd *);
-static bfd_boolean elf64_mips_grok_prstatus
+static bool elf64_mips_grok_prstatus
   (bfd *, Elf_Internal_Note *);
-static bfd_boolean elf64_mips_grok_psinfo
+static bool elf64_mips_grok_psinfo
   (bfd *, Elf_Internal_Note *);
 
 extern const bfd_target mips_elf64_be_vec;
@@ -135,69 +135,69 @@ static reloc_howto_type mips_elf64_howto
   /* No relocation.  */
   HOWTO (R_MIPS_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit relocation.  */
   HOWTO (R_MIPS_16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation.  */
   HOWTO (R_MIPS_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit symbol relative relocation.  */
   HOWTO (R_MIPS_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_REL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 26 bit jump address.  */
   HOWTO (R_MIPS_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -205,10 +205,10 @@ static reloc_howto_type mips_elf64_howto
 				   bits must match the PC + 4.  */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03ffffff,		/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_MIPS_HI16 and R_MIPS_LO16 are unsupported for NewABI REL.
      However, the native IRIX6 tools use them, so we try our best. */
@@ -216,124 +216,124 @@ static reloc_howto_type mips_elf64_howto
   /* High 16 bits of symbol value.  */
   HOWTO (R_MIPS_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MIPS_HI16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MIPS_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MIPS_LO16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_elf64_gprel16_reloc, /* special_function */
 	 "R_MIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_elf64_literal_reloc, /* special_function */
 	 "R_MIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MIPS_GOT16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit PC relative reference.  Note that the ABI document has a typo
      and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
      We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_PC16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MIPS_CALL16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit GP relative reference.  */
   HOWTO (R_MIPS_GPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 mips_elf64_gprel32_reloc, /* special_function */
 	 "R_MIPS_GPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (13),
   EMPTY_HOWTO (14),
@@ -342,186 +342,186 @@ static reloc_howto_type mips_elf64_howto
   /* A 5 bit shift field.  */
   HOWTO (R_MIPS_SHIFT5,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 5,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_SHIFT5",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000007c0,		/* src_mask */
 	 0x000007c0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 6 bit shift field.  */
   HOWTO (R_MIPS_SHIFT6,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mips_elf64_shift6_reloc, /* special_function */
 	 "R_MIPS_SHIFT6",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000007c4,		/* src_mask */
 	 0x000007c4,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit relocation.  */
   HOWTO (R_MIPS_64,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_64",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement in the global offset table.  */
   HOWTO (R_MIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_DISP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_PAGE",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_OFST",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  */
   HOWTO (R_MIPS_SUB,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_SUB",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Insert the addend as an instruction.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_INSERT_A,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_INSERT_A",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Insert the addend as an instruction, and change all relocations
      to refer to the old instruction at the address.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_INSERT_B,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_INSERT_B",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Delete a 32 bit instruction.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_DELETE,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_DELETE",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The MIPS ELF64 ABI Draft wants us to support these for REL relocations.
      We don't, because
@@ -535,61 +535,61 @@ static reloc_howto_type mips_elf64_howto
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_CALL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_CALL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement, used by an associated event location section.  */
   HOWTO (R_MIPS_SCN_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_SCN_DISP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MIPS_REL16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_REL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* These two are obsolete.  */
   EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),
@@ -599,33 +599,33 @@ static reloc_howto_type mips_elf64_howto
      It must be used for multigot GOT's (and only there).  */
   HOWTO (R_MIPS_RELGOT,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_RELGOT",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Protected jump conversion.  This is an optimization hint.  No
      relocation is required for correctness.  */
   HOWTO (R_MIPS_JALR,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_JALR",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS relocations.  */
   EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
@@ -633,168 +633,168 @@ static reloc_howto_type mips_elf64_howto
 
   HOWTO (R_MIPS_TLS_DTPMOD64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPMOD64",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MIPS_TLS_DTPREL64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL64",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS IE dynamic relocations.  */
   EMPTY_HOWTO (R_MIPS_TLS_TPREL32),
 
   HOWTO (R_MIPS_TLS_TPREL64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL64",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation with no addend.  */
   HOWTO (R_MIPS_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (52),
   EMPTY_HOWTO (53),
@@ -807,87 +807,87 @@ static reloc_howto_type mips_elf64_howto
 
   HOWTO (R_MIPS_PC21_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC21_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x001fffff,		/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC26_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC26_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03ffffff,		/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC18_S3,	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 18,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC18_S3",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0003ffff,		/* src_mask */
 	 0x0003ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC19_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC19_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0007ffff,		/* src_mask */
 	 0x0007ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCHI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCHI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCLO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCLO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
 };
 
@@ -898,69 +898,69 @@ static reloc_howto_type mips_elf64_howto
   /* No relocation.  */
   HOWTO (R_MIPS_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit relocation.  */
   HOWTO (R_MIPS_16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation.  */
   HOWTO (R_MIPS_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit symbol relative relocation.  */
   HOWTO (R_MIPS_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_REL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 26 bit jump address.  */
   HOWTO (R_MIPS_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -968,132 +968,132 @@ static reloc_howto_type mips_elf64_howto
 				   bits must match the PC + 4.  */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_26",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_MIPS_HI16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_HI16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MIPS_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_LO16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_elf64_gprel16_reloc, /* special_function */
 	 "R_MIPS_GPREL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_elf64_literal_reloc, /* special_function */
 	 "R_MIPS_LITERAL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MIPS_GOT16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit PC relative reference.  Note that the ABI document has a typo
      and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
      We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_PC16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MIPS_CALL16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_CALL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit GP relative reference.  */
   HOWTO (R_MIPS_GPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 mips_elf64_gprel32_reloc, /* special_function */
 	 "R_MIPS_GPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (13),
   EMPTY_HOWTO (14),
@@ -1102,275 +1102,275 @@ static reloc_howto_type mips_elf64_howto
   /* A 5 bit shift field.  */
   HOWTO (R_MIPS_SHIFT5,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 5,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_SHIFT5",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000007c0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 6 bit shift field.  */
   HOWTO (R_MIPS_SHIFT6,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mips_elf64_shift6_reloc, /* special_function */
 	 "R_MIPS_SHIFT6",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000007c4,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit relocation.  */
   HOWTO (R_MIPS_64,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_64",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement in the global offset table.  */
   HOWTO (R_MIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_DISP",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_PAGE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_OFST",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GOT_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  */
   HOWTO (R_MIPS_SUB,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_SUB",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Insert the addend as an instruction.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_INSERT_A,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_INSERT_A",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Insert the addend as an instruction, and change all relocations
      to refer to the old instruction at the address.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_INSERT_B,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_INSERT_B",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Delete a 32 bit instruction.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_DELETE,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_DELETE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the higher value of a 64 bit addend.  */
   HOWTO (R_MIPS_HIGHER,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_HIGHER",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the highest value of a 64 bit addend.  */
   HOWTO (R_MIPS_HIGHEST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_HIGHEST",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_CALL_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_CALL_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement, used by an associated event location section.  */
   HOWTO (R_MIPS_SCN_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_SCN_DISP",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MIPS_REL16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_REL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* These two are obsolete.  */
   EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),
@@ -1380,33 +1380,33 @@ static reloc_howto_type mips_elf64_howto
      It must be used for multigot GOT's (and only there).  */
   HOWTO (R_MIPS_RELGOT,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_RELGOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Protected jump conversion.  This is an optimization hint.  No
      relocation is required for correctness.  */
   HOWTO (R_MIPS_JALR,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_JALR",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS relocations.  */
   EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
@@ -1414,168 +1414,168 @@ static reloc_howto_type mips_elf64_howto
 
   HOWTO (R_MIPS_TLS_DTPMOD64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPMOD64", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MIPS_TLS_DTPREL64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL64",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_LDM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GOTTPREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS IE dynamic relocations.  */
   EMPTY_HOWTO (R_MIPS_TLS_TPREL32),
 
   HOWTO (R_MIPS_TLS_TPREL64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL64",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation with no addend.  */
   HOWTO (R_MIPS_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (52),
   EMPTY_HOWTO (53),
@@ -1588,87 +1588,87 @@ static reloc_howto_type mips_elf64_howto
 
   HOWTO (R_MIPS_PC21_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC21_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC26_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC26_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC18_S3,	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 18,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC18_S3",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0003ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC19_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC19_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCHI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCHI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCLO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCLO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
 };
 
@@ -1677,9 +1677,9 @@ static reloc_howto_type mips16_elf64_how
   /* The reloc used for the mips16 jump instruction.  */
   HOWTO (R_MIPS16_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -1687,205 +1687,205 @@ static reloc_howto_type mips16_elf64_how
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x3ffffff,		/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The reloc used for the mips16 gprel instruction.  */
   HOWTO (R_MIPS16_GPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips16_gprel_reloc,	/* special_function */
 	 "R_MIPS16_GPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 reference to the global offset table.  */
   HOWTO (R_MIPS16_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MIPS16_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 call through the global offset table.  */
   HOWTO (R_MIPS16_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 high 16 bits of symbol value.  */
   HOWTO (R_MIPS16_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MIPS16_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 low 16 bits of symbol value.  */
   HOWTO (R_MIPS16_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MIPS16_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS general dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_GD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 16-bit PC-relative branch offset.  */
   HOWTO (R_MIPS16_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 static reloc_howto_type mips16_elf64_howto_table_rela[] =
@@ -1893,9 +1893,9 @@ static reloc_howto_type mips16_elf64_how
   /* The reloc used for the mips16 jump instruction.  */
   HOWTO (R_MIPS16_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -1903,205 +1903,205 @@ static reloc_howto_type mips16_elf64_how
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_26",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The reloc used for the mips16 gprel instruction.  */
   HOWTO (R_MIPS16_GPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips16_gprel_reloc,	/* special_function */
 	 "R_MIPS16_GPREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 reference to the global offset table.  */
   HOWTO (R_MIPS16_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MIPS16_GOT16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 call through the global offset table.  */
   HOWTO (R_MIPS16_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_CALL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 high 16 bits of symbol value.  */
   HOWTO (R_MIPS16_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MIPS16_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 low 16 bits of symbol value.  */
   HOWTO (R_MIPS16_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MIPS16_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS general dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_GD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_LDM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GOTTPREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 16-bit PC-relative branch offset.  */
   HOWTO (R_MIPS16_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_PC16_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 static reloc_howto_type micromips_elf64_howto_table_rel[] =
@@ -2113,9 +2113,9 @@ static reloc_howto_type micromips_elf64_
   /* 26 bit jump address.  */
   HOWTO (R_MICROMIPS_26_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -2123,143 +2123,143 @@ static reloc_howto_type micromips_elf64_
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_26_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x3ffffff,		/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MICROMIPS_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MICROMIPS_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MICROMIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MICROMIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MICROMIPS_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MICROMIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* This is for microMIPS branches.  */
   HOWTO (R_MICROMIPS_PC7_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC7_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000007f,		/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC10_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC10_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000003ff,		/* src_mask */
 	 0x000003ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MICROMIPS_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (143),
   EMPTY_HOWTO (144),
@@ -2267,92 +2267,92 @@ static reloc_howto_type micromips_elf64_
   /* Displacement in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_DISP",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_PAGE",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_OFST",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_HI16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_LO16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  Used in the N32 ABI.  */
   HOWTO (R_MICROMIPS_SUB,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SUB",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* We don't support these for REL relocations, because it means building
      the addend from a R_MICROMIPS_HIGHEST/R_MICROMIPS_HIGHER/
@@ -2364,79 +2364,79 @@ static reloc_howto_type micromips_elf64_
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_HI16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_LO16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement.  */
   HOWTO (R_MICROMIPS_SCN_DISP,  /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SCN_DISP", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Protected jump conversion.  This is an optimization hint.  No
      relocation is required for correctness.  */
   HOWTO (R_MICROMIPS_JALR,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_JALR",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values
      must be zero.  This is used for relaxation.  */
   HOWTO (R_MICROMIPS_HI0_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HI0_LO16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (158),
   EMPTY_HOWTO (159),
@@ -2446,77 +2446,77 @@ static reloc_howto_type micromips_elf64_
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (167),
   EMPTY_HOWTO (168),
@@ -2524,63 +2524,63 @@ static reloc_howto_type micromips_elf64_
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (171),
 
   /* GP- and PC-relative relocations.  */
   HOWTO (R_MICROMIPS_GPREL7_S2,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL7_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000007f,		/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC23_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 23,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC23_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fffff,		/* src_mask */
 	 0x007fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 static reloc_howto_type micromips_elf64_howto_table_rela[] =
@@ -2592,9 +2592,9 @@ static reloc_howto_type micromips_elf64_
   /* 26 bit jump address.  */
   HOWTO (R_MICROMIPS_26_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -2602,143 +2602,143 @@ static reloc_howto_type micromips_elf64_
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_26_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MICROMIPS_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MICROMIPS_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MICROMIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MICROMIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_LITERAL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MICROMIPS_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MICROMIPS_GOT16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* This is for microMIPS branches.  */
   HOWTO (R_MICROMIPS_PC7_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC7_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC10_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC10_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000003ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC16_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MICROMIPS_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (143),
   EMPTY_HOWTO (144),
@@ -2746,199 +2746,199 @@ static reloc_howto_type micromips_elf64_
   /* Displacement in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_DISP",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_PAGE",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_OFST",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_HI16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_LO16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  Used in the N32 ABI.  */
   HOWTO (R_MICROMIPS_SUB,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SUB",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the higher value of a 64 bit addend.  */
   HOWTO (R_MICROMIPS_HIGHER,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HIGHER",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the highest value of a 64 bit addend.  */
   HOWTO (R_MICROMIPS_HIGHEST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HIGHEST",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_HI16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_LO16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement.  */
   HOWTO (R_MICROMIPS_SCN_DISP,  /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SCN_DISP", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Protected jump conversion.  This is an optimization hint.  No
      relocation is required for correctness.  */
   HOWTO (R_MICROMIPS_JALR,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_JALR",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values
      must be zero.  This is used for relaxation.  */
   HOWTO (R_MICROMIPS_HI0_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HI0_LO16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (158),
   EMPTY_HOWTO (159),
@@ -2948,77 +2948,77 @@ static reloc_howto_type micromips_elf64_
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_LDM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GOTTPREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (167),
   EMPTY_HOWTO (168),
@@ -3026,144 +3026,144 @@ static reloc_howto_type micromips_elf64_
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (171),
 
   /* GP- and PC-relative relocations.  */
   HOWTO (R_MICROMIPS_GPREL7_S2,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL7_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC23_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 23,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC23_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 /* GNU extension to record C++ vtable hierarchy */
 static reloc_howto_type elf_mips_gnu_vtinherit_howto =
   HOWTO (R_MIPS_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_MIPS_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* GNU extension to record C++ vtable member usage */
 static reloc_howto_type elf_mips_gnu_vtentry_howto =
   HOWTO (R_MIPS_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_MIPS_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* 16 bit offset for pc-relative branches.  */
 static reloc_howto_type elf_mips_gnu_rel16_s2 =
   HOWTO (R_MIPS_GNU_REL16_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GNU_REL16_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE);			/* pcrel_offset */
+	 true);			/* pcrel_offset */
 
 /* 16 bit offset for pc-relative branches.  */
 static reloc_howto_type elf_mips_gnu_rela16_s2 =
   HOWTO (R_MIPS_GNU_REL16_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_GNU_REL16_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE);			/* pcrel_offset */
+	 true);			/* pcrel_offset */
 
 /* 32 bit pc-relative.  Used for compact EH tables.  */
 static reloc_howto_type elf_mips_gnu_pcrel32 =
   HOWTO (R_MIPS_PC32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE);			/* pcrel_offset */
+	 true);			/* pcrel_offset */
 
 
 /* Originally a VxWorks extension, but now used for other systems too.  */
@@ -3172,47 +3172,47 @@ static reloc_howto_type elf_mips_copy_ho
 	 0,			/* rightshift */
 	 0,			/* this one is variable size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* Originally a VxWorks extension, but now used for other systems too.  */
 static reloc_howto_type elf_mips_jump_slot_howto =
   HOWTO (R_MIPS_JUMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_JUMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* Used in EH tables.  */
 static reloc_howto_type elf_mips_eh_howto =
   HOWTO (R_MIPS_EH,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_EH",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 
 /* Swap in a MIPS 64-bit Rel reloc.  */
@@ -3371,7 +3371,7 @@ mips_elf64_be_swap_reloca_out (bfd *abfd
 /* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
    dangerous relocation.  */
 
-static bfd_boolean
+static bool
 mips_elf64_assign_gp (bfd *output_bfd, bfd_vma *pgp)
 {
   unsigned int count;
@@ -3381,7 +3381,7 @@ mips_elf64_assign_gp (bfd *output_bfd, b
   /* If we've already figured out what GP will be, just return it.  */
   *pgp = _bfd_get_gp_value (output_bfd);
   if (*pgp)
-    return TRUE;
+    return true;
 
   count = bfd_get_symcount (output_bfd);
   sym = bfd_get_outsymbols (output_bfd);
@@ -3411,10 +3411,10 @@ mips_elf64_assign_gp (bfd *output_bfd, b
       /* Only get the error once.  */
       *pgp = 4;
       _bfd_set_gp_value (output_bfd, *pgp);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We have to figure out the gp value, so that we can adjust the
@@ -3424,11 +3424,10 @@ mips_elf64_assign_gp (bfd *output_bfd, b
    external symbol if we are producing relocatable output.  */
 
 static bfd_reloc_status_type
-mips_elf64_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable,
+mips_elf64_final_gp (bfd *output_bfd, asymbol *symbol, bool relocatable,
 		     char **error_message, bfd_vma *pgp)
 {
-  if (bfd_is_und_section (symbol->section)
-      && ! relocatable)
+  if (output_bfd == NULL)
     {
       *pgp = 0;
       return bfd_reloc_undefined;
@@ -3464,7 +3463,7 @@ mips_elf64_gprel16_reloc (bfd *abfd, are
 			  void *data, asection *input_section, bfd *output_bfd,
 			  char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
@@ -3479,11 +3478,11 @@ mips_elf64_gprel16_reloc (bfd *abfd, are
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      output_bfd = input_section->output_section->owner;
     }
 
   ret = mips_elf64_final_gp (output_bfd, symbol, relocatable, error_message,
@@ -3503,7 +3502,7 @@ mips_elf64_literal_reloc (bfd *abfd, are
 			  void *data, asection *input_section, bfd *output_bfd,
 			  char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
@@ -3519,11 +3518,11 @@ mips_elf64_literal_reloc (bfd *abfd, are
 
   /* FIXME: The entries in the .lit8 and .lit4 sections should be merged.  */
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      output_bfd = input_section->output_section->owner;
     }
 
   ret = mips_elf64_final_gp (output_bfd, symbol, relocatable, error_message,
@@ -3544,7 +3543,7 @@ mips_elf64_gprel32_reloc (bfd *abfd, are
 			  void *data, asection *input_section, bfd *output_bfd,
 			  char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
   bfd_vma relocation;
@@ -3561,11 +3560,11 @@ mips_elf64_gprel32_reloc (bfd *abfd, are
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      output_bfd = input_section->output_section->owner;
     }
 
   ret = mips_elf64_final_gp (output_bfd, symbol, relocatable,
@@ -3578,10 +3577,14 @@ mips_elf64_gprel32_reloc (bfd *abfd, are
   else
     relocation = symbol->value;
 
-  relocation += symbol->section->output_section->vma;
-  relocation += symbol->section->output_offset;
+  if (symbol->section->output_section != NULL)
+    {
+      relocation += symbol->section->output_section->vma;
+      relocation += symbol->section->output_offset;
+    }
 
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+  if (!_bfd_mips_reloc_offset_in_range (abfd, input_section, reloc_entry,
+					check_inplace))
     return bfd_reloc_outofrange;
 
   /* Set val to the offset into the section or symbol.  */
@@ -3634,7 +3637,7 @@ mips16_gprel_reloc (bfd *abfd, arelent *
 		    void *data, asection *input_section, bfd *output_bfd,
 		    char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_byte *location;
   bfd_vma gp;
@@ -3650,11 +3653,11 @@ mips16_gprel_reloc (bfd *abfd, arelent *
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      output_bfd = input_section->output_section->owner;
     }
 
   ret = mips_elf64_final_gp (output_bfd, symbol, relocatable, error_message,
@@ -3662,8 +3665,12 @@ mips16_gprel_reloc (bfd *abfd, arelent *
   if (ret != bfd_reloc_ok)
     return ret;
 
+  if (!_bfd_mips_reloc_offset_in_range (abfd, input_section, reloc_entry,
+					check_shuffle))
+    return bfd_reloc_outofrange;
+
   location = (bfd_byte *) data + reloc_entry->address;
-  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
+  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, false,
 				 location);
   ret = _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry,
 				       input_section, relocatable,
@@ -3684,7 +3691,8 @@ struct elf_reloc_map {
 static const struct elf_reloc_map mips_reloc_map[] =
 {
   { BFD_RELOC_NONE, R_MIPS_NONE },
-  { BFD_RELOC_16, R_MIPS_16 },
+  { BFD_RELOC_MIPS_16, R_MIPS_16 },
+  { BFD_RELOC_16, R_MIPS_REL16 },
   { BFD_RELOC_32, R_MIPS_32 },
   /* There is no BFD reloc for R_MIPS_REL32.  */
   { BFD_RELOC_64, R_MIPS_64 },
@@ -3714,7 +3722,6 @@ static const struct elf_reloc_map mips_r
   { BFD_RELOC_MIPS_CALL_HI16, R_MIPS_CALL_HI16 },
   { BFD_RELOC_MIPS_CALL_LO16, R_MIPS_CALL_LO16 },
   { BFD_RELOC_MIPS_SCN_DISP, R_MIPS_SCN_DISP },
-  { BFD_RELOC_MIPS_REL16, R_MIPS_REL16 },
   /* Use of R_MIPS_ADD_IMMEDIATE and R_MIPS_PJUMP is deprecated.  */
   { BFD_RELOC_MIPS_RELGOT, R_MIPS_RELGOT },
   { BFD_RELOC_MIPS_JALR, R_MIPS_JALR },
@@ -3905,7 +3912,7 @@ bfd_elf64_bfd_reloc_name_lookup (bfd *ab
 /* Given a MIPS Elf_Internal_Rel, fill in an arelent structure.  */
 
 static reloc_howto_type *
-mips_elf64_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)
+mips_elf64_rtype_to_howto (bfd *abfd, unsigned int r_type, bool rela_p)
 {
   reloc_howto_type *howto = NULL;
 
@@ -3964,7 +3971,7 @@ mips_elf64_rtype_to_howto (bfd *abfd, un
 
 /* Prevent relocation handling by bfd for MIPS ELF64.  */
 
-static bfd_boolean
+static bool
 mips_elf64_info_to_howto_rela (bfd *abfd,
 			       arelent *cache_ptr ATTRIBUTE_UNUSED,
 			       Elf_Internal_Rela *dst)
@@ -3974,7 +3981,7 @@ mips_elf64_info_to_howto_rela (bfd *abfd
   _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 		      abfd, r_type);
   bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return false;
 }
 
 /* Since each entry in an SHT_REL or SHT_RELA section can represent up
@@ -3995,12 +4002,12 @@ mips_elf64_get_dynamic_reloc_upper_bound
    however that would also remove them from `objdump -r' output,
    breaking a long-established tradition and likely confusing people.  */
 
-static bfd_boolean
+static bool
 mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
 				  Elf_Internal_Shdr *rel_hdr,
 				  bfd_size_type reloc_count,
 				  arelent *relents, asymbol **symbols,
-				  bfd_boolean dynamic)
+				  bool dynamic)
 {
   void *allocated;
   bfd_byte *native_relocs;
@@ -4008,16 +4015,13 @@ mips_elf64_slurp_one_reloc_table (bfd *a
   arelent *relent;
   bfd_vma i;
   int entsize;
-  bfd_boolean rela_p;
+  bool rela_p;
 
-  allocated = bfd_malloc (rel_hdr->sh_size);
+  if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
+    return false;
+  allocated = _bfd_malloc_and_read (abfd, rel_hdr->sh_size, rel_hdr->sh_size);
   if (allocated == NULL)
-    return FALSE;
-
-  if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0
-      || (bfd_bread (allocated, rel_hdr->sh_size, abfd)
-	  != rel_hdr->sh_size))
-    goto error_return;
+    return false;
 
   native_relocs = allocated;
 
@@ -4026,9 +4030,9 @@ mips_elf64_slurp_one_reloc_table (bfd *a
 	      || entsize == sizeof (Elf64_Mips_External_Rela));
 
   if (entsize == sizeof (Elf64_Mips_External_Rel))
-    rela_p = FALSE;
+    rela_p = false;
   else
-    rela_p = TRUE;
+    rela_p = true;
 
   if (dynamic)
     symcount = bfd_get_dynamic_symcount (abfd);
@@ -4040,7 +4044,7 @@ mips_elf64_slurp_one_reloc_table (bfd *a
        i++, native_relocs += entsize)
     {
       Elf64_Mips_Internal_Rela rela;
-      bfd_boolean used_sym, used_ssym;
+      bool used_sym, used_ssym;
       int ir;
 
       if (entsize == sizeof (Elf64_Mips_External_Rela))
@@ -4054,8 +4058,8 @@ mips_elf64_slurp_one_reloc_table (bfd *a
 
       /* Each entry represents exactly three actual relocations.  */
 
-      used_sym = FALSE;
-      used_ssym = FALSE;
+      used_sym = false;
+      used_ssym = false;
       for (ir = 0; ir < 3; ir++)
 	{
 	  enum elf_mips_reloc_type type;
@@ -4076,6 +4080,7 @@ mips_elf64_slurp_one_reloc_table (bfd *a
 	    }
 
 	  /* Some types require symbols, whereas some do not.  */
+	  relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
 	  switch (type)
 	    {
 	    case R_MIPS_NONE:
@@ -4083,14 +4088,13 @@ mips_elf64_slurp_one_reloc_table (bfd *a
 	    case R_MIPS_INSERT_A:
 	    case R_MIPS_INSERT_B:
 	    case R_MIPS_DELETE:
-	      relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
 	      break;
 
 	    default:
 	      if (! used_sym)
 		{
 		  if (rela.r_sym == STN_UNDEF)
-		    relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+		    ;
 		  else if (rela.r_sym > symcount)
 		    {
 		      _bfd_error_handler
@@ -4099,8 +4103,6 @@ mips_elf64_slurp_one_reloc_table (bfd *a
 			   " has invalid symbol index %ld"),
 			 abfd, asect, (uint64_t) i, rela.r_sym);
 		      bfd_set_error (bfd_error_bad_value);
-		      relent->sym_ptr_ptr
-			= bfd_abs_section_ptr->symbol_ptr_ptr;
 		    }
 		  else
 		    {
@@ -4114,15 +4116,13 @@ mips_elf64_slurp_one_reloc_table (bfd *a
 			relent->sym_ptr_ptr = s->section->symbol_ptr_ptr;
 		    }
 
-		  used_sym = TRUE;
+		  used_sym = true;
 		}
 	      else if (! used_ssym)
 		{
 		  switch (rela.r_ssym)
 		    {
 		    case RSS_UNDEF:
-		      relent->sym_ptr_ptr =
-			bfd_abs_section_ptr->symbol_ptr_ptr;
 		      break;
 
 		    case RSS_GP:
@@ -4138,11 +4138,8 @@ mips_elf64_slurp_one_reloc_table (bfd *a
 		      break;
 		    }
 
-		  used_ssym = TRUE;
+		  used_ssym = true;
 		}
-	      else
-		relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
-
 	      break;
 	    }
 
@@ -4165,15 +4162,12 @@ mips_elf64_slurp_one_reloc_table (bfd *a
 	}
     }
 
-  if (allocated != NULL)
-    free (allocated);
-
-  return TRUE;
+  free (allocated);
+  return true;
 
  error_return:
-  if (allocated != NULL)
-    free (allocated);
-  return FALSE;
+  free (allocated);
+  return false;
 }
 
 /* Read the relocations.  On Irix 6, there can be two reloc sections
@@ -4181,9 +4175,9 @@ mips_elf64_slurp_one_reloc_table (bfd *a
    elfcode.h as well, with changes as small as accounting for 3
    internal relocs per external reloc.  */
 
-static bfd_boolean
+static bool
 mips_elf64_slurp_reloc_table (bfd *abfd, asection *asect,
-			      asymbol **symbols, bfd_boolean dynamic)
+			      asymbol **symbols, bool dynamic)
 {
   struct bfd_elf_section_data * const d = elf_section_data (asect);
   Elf_Internal_Shdr *rel_hdr;
@@ -4194,13 +4188,13 @@ mips_elf64_slurp_reloc_table (bfd *abfd,
   bfd_size_type amt;
 
   if (asect->relocation != NULL)
-    return TRUE;
+    return true;
 
   if (! dynamic)
     {
       if ((asect->flags & SEC_RELOC) == 0
 	  || asect->reloc_count == 0)
-	return TRUE;
+	return true;
 
       rel_hdr = d->rel.hdr;
       reloc_count = rel_hdr ? NUM_SHDR_ENTRIES (rel_hdr) : 0;
@@ -4219,7 +4213,7 @@ mips_elf64_slurp_reloc_table (bfd *abfd,
 	 dynamic symbol table, and in that case bfd_section_from_shdr
 	 in elf.c does not update the RELOC_COUNT.  */
       if (asect->size == 0)
-	return TRUE;
+	return true;
 
       rel_hdr = &d->this_hdr;
       reloc_count = NUM_SHDR_ENTRIES (rel_hdr);
@@ -4231,23 +4225,23 @@ mips_elf64_slurp_reloc_table (bfd *abfd,
   amt = (reloc_count + reloc_count2) * 3 * sizeof (arelent);
   relents = bfd_alloc (abfd, amt);
   if (relents == NULL)
-    return FALSE;
+    return false;
 
   if (rel_hdr != NULL
       && ! mips_elf64_slurp_one_reloc_table (abfd, asect,
 					     rel_hdr, reloc_count,
 					     relents,
 					     symbols, dynamic))
-    return FALSE;
+    return false;
   if (rel_hdr2 != NULL
       && ! mips_elf64_slurp_one_reloc_table (abfd, asect,
 					     rel_hdr2, reloc_count2,
 					     relents + reloc_count * 3,
 					     symbols, dynamic))
-    return FALSE;
+    return false;
 
   asect->relocation = relents;
-  return TRUE;
+  return true;
 }
 
 /* Write out the relocations.  */
@@ -4255,7 +4249,7 @@ mips_elf64_slurp_reloc_table (bfd *abfd,
 static void
 mips_elf64_write_relocs (bfd *abfd, asection *sec, void *data)
 {
-  bfd_boolean *failedp = data;
+  bool *failedp = data;
   int count;
   Elf_Internal_Shdr *rel_hdr;
   unsigned int idx;
@@ -4320,7 +4314,7 @@ mips_elf64_write_rel (bfd *abfd, asectio
 		      Elf_Internal_Shdr *rel_hdr,
 		      int *count, void *data)
 {
-  bfd_boolean *failedp = data;
+  bool *failedp = data;
   Elf64_Mips_External_Rel *ext_rel;
   unsigned int idx;
   asymbol *last_sym = 0;
@@ -4330,7 +4324,7 @@ mips_elf64_write_rel (bfd *abfd, asectio
   rel_hdr->contents = bfd_alloc (abfd, rel_hdr->sh_size);
   if (rel_hdr->contents == NULL)
     {
-      *failedp = TRUE;
+      *failedp = true;
       return;
     }
 
@@ -4364,7 +4358,7 @@ mips_elf64_write_rel (bfd *abfd, asectio
 	  n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
 	  if (n < 0)
 	    {
-	      *failedp = TRUE;
+	      *failedp = true;
 	      return;
 	    }
 	  last_sym_idx = n;
@@ -4377,7 +4371,7 @@ mips_elf64_write_rel (bfd *abfd, asectio
 	  && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
 	  && ! _bfd_elf_validate_reloc (abfd, ptr))
 	{
-	  *failedp = TRUE;
+	  *failedp = true;
 	  return;
 	}
 
@@ -4419,7 +4413,7 @@ mips_elf64_write_rela (bfd *abfd, asecti
 		       Elf_Internal_Shdr *rela_hdr,
 		       int *count, void *data)
 {
-  bfd_boolean *failedp = data;
+  bool *failedp = data;
   Elf64_Mips_External_Rela *ext_rela;
   unsigned int idx;
   asymbol *last_sym = 0;
@@ -4429,7 +4423,7 @@ mips_elf64_write_rela (bfd *abfd, asecti
   rela_hdr->contents = bfd_alloc (abfd, rela_hdr->sh_size);
   if (rela_hdr->contents == NULL)
     {
-      *failedp = TRUE;
+      *failedp = true;
       return;
     }
 
@@ -4463,7 +4457,7 @@ mips_elf64_write_rela (bfd *abfd, asecti
 	  n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
 	  if (n < 0)
 	    {
-	      *failedp = TRUE;
+	      *failedp = true;
 	      return;
 	    }
 	  last_sym_idx = n;
@@ -4477,7 +4471,7 @@ mips_elf64_write_rela (bfd *abfd, asecti
 	  && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
 	  && ! _bfd_elf_validate_reloc (abfd, ptr))
 	{
-	  *failedp = TRUE;
+	  *failedp = true;
 	  return;
 	}
 
@@ -4516,7 +4510,7 @@ mips_elf64_write_rela (bfd *abfd, asecti
 
 /* Set the right machine number for a MIPS ELF file.  */
 
-static bfd_boolean
+static bool
 mips_elf64_object_p (bfd *abfd)
 {
   unsigned long mach;
@@ -4525,11 +4519,11 @@ mips_elf64_object_p (bfd *abfd)
      sorted correctly such that local symbols precede global symbols,
      and the sh_info field in the symbol table is not always right.  */
   if (elf64_mips_irix_compat (abfd) != ict_none)
-    elf_bad_symtab (abfd) = TRUE;
+    elf_bad_symtab (abfd) = true;
 
   mach = _bfd_elf_mips_mach (elf_elfheader (abfd)->e_flags);
   bfd_default_set_arch_mach (abfd, bfd_arch_mips, mach);
-  return TRUE;
+  return true;
 }
 
 /* Depending on the target vector we generate some version of Irix
@@ -4545,7 +4539,7 @@ elf64_mips_irix_compat (bfd *abfd)
 }
 
 /* Support for core dump NOTE sections.  */
-static bfd_boolean
+static bool
 elf64_mips_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -4554,7 +4548,7 @@ elf64_mips_grok_prstatus (bfd *abfd, Elf
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 480:		/* Linux/MIPS - N64 kernel */
 	/* pr_cursig */
@@ -4575,13 +4569,13 @@ elf64_mips_grok_prstatus (bfd *abfd, Elf
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf64_mips_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 136:		/* Linux/MIPS - N64 kernel elf_prpsinfo */
 	elf_tdata (abfd)->core->pid
@@ -4604,7 +4598,7 @@ elf64_mips_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 /* Write Linux core PRSTATUS note into core file.  */
@@ -4729,9 +4723,9 @@ const struct elf_size_info mips_elf64_si
 #define ELF_TARGET_ID			MIPS_ELF_DATA
 #define ELF_MACHINE_CODE		EM_MIPS
 
-#define elf_backend_collect		TRUE
-#define elf_backend_type_change_ok	TRUE
-#define elf_backend_can_gc_sections	TRUE
+#define elf_backend_collect		true
+#define elf_backend_type_change_ok	true
+#define elf_backend_can_gc_sections	true
 #define elf_backend_gc_mark_extra_sections \
 					_bfd_mips_elf_gc_mark_extra_sections
 #define elf_info_to_howto		mips_elf64_info_to_howto_rela
@@ -4795,7 +4789,7 @@ const struct elf_size_info mips_elf64_si
 #define elf_backend_plt_readonly	1
 #define elf_backend_plt_sym_val		_bfd_mips_elf_plt_sym_val
 
-#define elf_backend_sign_extend_vma	TRUE
+#define elf_backend_sign_extend_vma	true
 
 #define elf_backend_write_section	_bfd_mips_elf_write_section
 #define elf_backend_sort_relocs_p	_bfd_mips_elf_sort_relocs_p
@@ -4806,6 +4800,8 @@ const struct elf_size_info mips_elf64_si
 #define bfd_elf64_bfd_is_target_special_symbol \
 					_bfd_mips_elf_is_target_special_symbol
 #define bfd_elf64_find_nearest_line	_bfd_mips_elf_find_nearest_line
+#define bfd_elf64_find_nearest_line_with_alt \
+				_bfd_mips_elf_find_nearest_line_with_alt
 #define bfd_elf64_find_inliner_info	_bfd_mips_elf_find_inliner_info
 #define bfd_elf64_new_section_hook	_bfd_mips_elf_new_section_hook
 #define bfd_elf64_set_section_contents	_bfd_mips_elf_set_section_contents
@@ -4822,6 +4818,7 @@ const struct elf_size_info mips_elf64_si
 
 #define bfd_elf64_get_dynamic_reloc_upper_bound mips_elf64_get_dynamic_reloc_upper_bound
 #define bfd_elf64_mkobject		_bfd_mips_elf_mkobject
+#define bfd_elf64_bfd_free_cached_info	_bfd_mips_elf_free_cached_info
 
 /* The SGI style (n)64 NewABI.  */
 #define TARGET_LITTLE_SYM		mips_elf64_le_vec
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-mmix.c ./bfd/elf64-mmix.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-mmix.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-mmix.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* MMIX-specific support for 64-bit ELF.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Contributed by Hans-Peter Nilsson <hp@bitrange.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -79,8 +79,8 @@ struct _mmix_elf_section_data
      linked due to a specific cause.  FIXME: a way to access the
      linker info or output section, then stuff the limiter guard
      there. */
-  bfd_boolean has_warned_bpo;
-  bfd_boolean has_warned_pushj;
+  bool has_warned_bpo;
+  bool has_warned_pushj;
 };
 
 #define mmix_elf_section_data(sec) \
@@ -125,7 +125,7 @@ struct bpo_reloc_request
     /* Set when the value is computed.  Better than coding "guard values"
        into the other members.  Is FALSE only for BPO relocs in a GC:ed
        section.  */
-    bfd_boolean valid;
+    bool valid;
   };
 
 /* We attach this as mmix_elf_section_data (sec)->bpo in the linker-allocated
@@ -166,7 +166,7 @@ struct bpo_greg_section_info
   };
 
 
-extern bfd_boolean mmix_elf_final_link (bfd *, struct bfd_link_info *);
+extern bool mmix_elf_final_link (bfd *, struct bfd_link_info *);
 
 extern void mmix_elf_symbol_processing (bfd *, asymbol *);
 
@@ -192,197 +192,197 @@ static reloc_howto_type elf_mmix_howto_t
   /* This reloc does nothing.  */
   HOWTO (R_MMIX_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit absolute relocation.  */
   HOWTO (R_MMIX_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 16 bit absolute relocation.  */
   HOWTO (R_MMIX_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 24 bit absolute relocation.  */
   HOWTO (R_MMIX_24,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_24",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_MMIX_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit relocation.  */
   HOWTO (R_MMIX_64,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_64",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit PC-relative relocation.  */
   HOWTO (R_MMIX_PC_8,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_PC_8",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* An 16 bit PC-relative relocation.  */
   HOWTO (R_MMIX_PC_16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_PC_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* An 24 bit PC-relative relocation.  */
   HOWTO (R_MMIX_PC_24,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_PC_24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 32 bit absolute PC-relative relocation.  */
   HOWTO (R_MMIX_PC_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_PC_32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 64 bit PC-relative relocation.  */
   HOWTO (R_MMIX_PC_64,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MMIX_PC_64",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_MMIX_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_MMIX_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage.  */
   HOWTO (R_MMIX_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_MMIX_GNU_VTENTRY", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The GETA relocation is supposed to get any address that could
      possibly be reached by the GETA instruction.  It can silently expand
@@ -390,59 +390,59 @@ static reloc_howto_type elf_mmix_howto_t
      significant bits are set.  The howto members reflect a simple GETA.  */
   HOWTO (R_MMIX_GETA,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_GETA",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_GETA_1,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_GETA_1",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_GETA_2,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_GETA_2",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_GETA_3,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_GETA_3",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* The conditional branches are supposed to reach any (code) address.
      It can silently expand to a 64-bit operand, but will emit an error if
@@ -450,73 +450,73 @@ static reloc_howto_type elf_mmix_howto_t
      reflect a simple branch.  */
   HOWTO (R_MMIX_CBRANCH,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_CBRANCH",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_CBRANCH_J,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_CBRANCH_J",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_CBRANCH_1,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_CBRANCH_1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_CBRANCH_2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_CBRANCH_2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_CBRANCH_3,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_CBRANCH_3",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* The PUSHJ instruction can reach any (code) address, as long as it's
      the beginning of a function (no usable restriction).  It can silently
@@ -526,59 +526,59 @@ static reloc_howto_type elf_mmix_howto_t
      PUSHJ.  */
   HOWTO (R_MMIX_PUSHJ,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_PUSHJ",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_PUSHJ_1,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_PUSHJ_1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_PUSHJ_2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_PUSHJ_2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_PUSHJ_3,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_PUSHJ_3",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A JMP is supposed to reach any (code) address.  By itself, it can
      reach +-64M; the expansion can reach all 64 bits.  Note that the 64M
@@ -586,139 +586,139 @@ static reloc_howto_type elf_mmix_howto_t
      memory segments.  The howto members reflect a trivial JMP.  */
   HOWTO (R_MMIX_JMP,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 27,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_JMP",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x1ffffff,		/* src_mask */
 	 0x1ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_JMP_1,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 27,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_JMP_1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x1ffffff,		/* src_mask */
 	 0x1ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_JMP_2,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 27,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_JMP_2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x1ffffff,		/* src_mask */
 	 0x1ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MMIX_JMP_3,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 27,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_JMP_3",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x1ffffff,		/* src_mask */
 	 0x1ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* When we don't emit link-time-relaxable code from the assembler, or
      when relaxation has done all it can do, these relocs are used.  For
      GETA/PUSHJ/branches.  */
   HOWTO (R_MMIX_ADDR19,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_ADDR19",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* For JMP.  */
   HOWTO (R_MMIX_ADDR27,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 27,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_ADDR27",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x1ffffff,		/* src_mask */
 	 0x1ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A general register or the value 0..255.  If a value, then the
      instruction (offset -3) needs adjusting.  */
   HOWTO (R_MMIX_REG_OR_BYTE,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_REG_OR_BYTE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A general register.  */
   HOWTO (R_MMIX_REG,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_REG",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A register plus an index, corresponding to the relocation expression.
      The sizes must correspond to the valid range of the expression, while
      the bitmasks correspond to what we store in the image.  */
   HOWTO (R_MMIX_BASE_PLUS_OFFSET,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_BASE_PLUS_OFFSET", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A "magic" relocation for a LOCAL expression, asserting that the
      expression is less than the number of global registers.  No actual
@@ -727,31 +727,31 @@ static reloc_howto_type elf_mmix_howto_t
      section to discard *after* relocation.  */
   HOWTO (R_MMIX_LOCAL,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_LOCAL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MMIX_PUSHJ_STUBBABLE, /* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mmix_elf_reloc,	/* special_function */
 	 "R_MMIX_PUSHJ_STUBBABLE", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 ~0x0100ffff,		/* src_mask */
 	 0x0100ffff,		/* dst_mask */
-	 TRUE)			/* pcrel_offset */
+	 true)			/* pcrel_offset */
  };
 
 
@@ -825,17 +825,17 @@ bfd_elf64_bfd_reloc_name_lookup (bfd *ab
   return NULL;
 }
 
-static bfd_boolean
+static bool
 mmix_elf_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
       struct _mmix_elf_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -987,7 +987,7 @@ mmix_elf_perform_relocation (asection *i
 			" ELF or mmo,"
 			" or assemble using"
 			" \"-no-expand\" (for gcc, \"-Wa,-no-expand\"");
-		  mmix_elf_section_data (isec)->has_warned_pushj = TRUE;
+		  mmix_elf_section_data (isec)->has_warned_pushj = true;
 		  return bfd_reloc_dangerous;
 		}
 
@@ -1171,7 +1171,7 @@ mmix_elf_perform_relocation (asection *i
 		      " ELF or mmo,"
 		      " or compile using the gcc-option"
 		      " \"-mno-base-addresses\".");
-		mmix_elf_section_data (isec)->has_warned_bpo = TRUE;
+		mmix_elf_section_data (isec)->has_warned_bpo = true;
 		return bfd_reloc_dangerous;
 	      }
 
@@ -1250,7 +1250,7 @@ mmix_elf_perform_relocation (asection *i
 
 /* Set the howto pointer for an MMIX ELF reloc (type RELA).  */
 
-static bfd_boolean
+static bool
 mmix_info_to_howto_rela (bfd *abfd,
 			 arelent *cache_ptr,
 			 Elf_Internal_Rela *dst)
@@ -1264,10 +1264,10 @@ mmix_info_to_howto_rela (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_mmix_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 /* Any MMIX-specific relocation gets here at assembly time or when linking
@@ -1350,7 +1350,7 @@ mmix_elf_reloc (bfd *abfd,
 /* Relocate an MMIX ELF section.  Modified from elf32-fr30.c; look to it
    for guidance if you're thinking of copying this.  */
 
-static bfd_boolean
+static int
 mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -1389,7 +1389,7 @@ mmix_elf_relocate_section (bfd *output_b
       bfd_reloc_status_type r;
       const char *name = NULL;
       int r_type;
-      bfd_boolean undefined_signalled = FALSE;
+      bool undefined_signalled = false;
 
       r_type = ELF64_R_TYPE (rel->r_info);
 
@@ -1418,7 +1418,7 @@ mmix_elf_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, ignored;
+	  bool unresolved_reloc, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1476,7 +1476,7 @@ mmix_elf_relocate_section (bfd *output_b
 						+ mmix_elf_section_data (input_section)
 						->pjs.stub_offset,
 						NULL, NULL, NULL) != bfd_reloc_ok)
-		    return FALSE;
+		    return false;
 
 		  /* Put a JMP insn at the stub; it goes with the
 		     R_MMIX_JMP reloc.  */
@@ -1533,8 +1533,8 @@ mmix_elf_relocate_section (bfd *output_b
 	      /* We may have sent this message above.  */
 	      if (! undefined_signalled)
 		info->callbacks->undefined_symbol
-		  (info, name, input_bfd, input_section, rel->r_offset, TRUE);
-	      undefined_signalled = TRUE;
+		  (info, name, input_bfd, input_section, rel->r_offset, true);
+	      undefined_signalled = true;
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -1560,7 +1560,7 @@ mmix_elf_relocate_section (bfd *output_b
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Perform a single relocation.  By default we use the standard BFD
@@ -1815,7 +1815,7 @@ mmix_elf_sort_relocs (const void * p1, c
 
 /* Subset of mmix_elf_check_relocs, common to ELF and mmo linking.  */
 
-static bfd_boolean
+static bool
 mmix_elf_check_common_relocs  (bfd *abfd,
 			       struct bfd_link_info *info,
 			       asection *sec,
@@ -1875,12 +1875,12 @@ mmix_elf_check_common_relocs  (bfd *abfd
 		 GREG allocations, and that works.  */
 	      if (allocated_gregs_section == NULL
 		  || !bfd_set_section_alignment (allocated_gregs_section, 3))
-		return FALSE;
+		return false;
 
 	      gregdata = (struct bpo_greg_section_info *)
 		bfd_zalloc (bpo_greg_owner, sizeof (struct bpo_greg_section_info));
 	      if (gregdata == NULL)
-		return FALSE;
+		return false;
 	      mmix_elf_section_data (allocated_gregs_section)->bpo.greg
 		= gregdata;
 	    }
@@ -1898,7 +1898,7 @@ mmix_elf_check_common_relocs  (bfd *abfd
 			   sizeof (struct bpo_reloc_section_info)
 			   * (sec->reloc_count + 1));
 	      if (bpodata == NULL)
-		return FALSE;
+		return false;
 	      mmix_elf_section_data (sec)->bpo.reloc = bpodata;
 	      bpodata->first_base_plus_offset_reloc
 		= bpodata->bpo_index
@@ -1934,18 +1934,18 @@ mmix_elf_check_common_relocs  (bfd *abfd
 		     * sizeof (mmix_elf_section_data (sec)
 			       ->pjs.stub_size[0]));
       if (mmix_elf_section_data (sec)->pjs.stub_size == NULL)
-	return FALSE;
+	return false;
 
       for (i = 0; i < mmix_elf_section_data (sec)->pjs.n_pushj_relocs; i++)
 	mmix_elf_section_data (sec)->pjs.stub_size[i] = MAX_PUSHJ_STUB_SIZE;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.  */
 
-static bfd_boolean
+static bool
 mmix_elf_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
@@ -1966,10 +1966,10 @@ mmix_elf_check_relocs (bfd *abfd,
 
   /* Do the common part.  */
   if (!mmix_elf_check_common_relocs (abfd, info, sec, relocs))
-    return FALSE;
+    return false;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   rel_end = relocs + sec->reloc_count;
   for (rel = relocs; rel < rel_end; rel++)
@@ -1994,25 +1994,25 @@ mmix_elf_check_relocs (bfd *abfd,
 	   Reconstruct it for later use during GC.  */
 	case R_MMIX_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	/* This relocation describes which C++ vtable entries are actually
 	   used.  Record for later use during GC.  */
 	case R_MMIX_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Wrapper for mmix_elf_check_common_relocs, called when linking to mmo.
    Copied from elf_link_add_object_symbols.  */
 
-bfd_boolean
+bool
 _bfd_mmix_check_all_relocs (bfd *abfd, struct bfd_link_info *info)
 {
   asection *o;
@@ -2020,7 +2020,7 @@ _bfd_mmix_check_all_relocs (bfd *abfd, s
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       Elf_Internal_Rela *internal_relocs;
-      bfd_boolean ok;
+      bool ok;
 
       if ((o->flags & SEC_RELOC) == 0
 	  || o->reloc_count == 0
@@ -2034,7 +2034,7 @@ _bfd_mmix_check_all_relocs (bfd *abfd, s
 				     (Elf_Internal_Rela *) NULL,
 				     info->keep_memory);
       if (internal_relocs == NULL)
-	return FALSE;
+	return false;
 
       ok = mmix_elf_check_common_relocs (abfd, info, o, internal_relocs);
 
@@ -2042,10 +2042,10 @@ _bfd_mmix_check_all_relocs (bfd *abfd, s
 	free (internal_relocs);
 
       if (! ok)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Change symbols relative to the reg contents section to instead be to
@@ -2076,8 +2076,11 @@ mmix_elf_link_output_symbol_hook (struct
    formats (e.g. mmo) than for example a STT_REGISTER attribute.
    This section faking is based on a construct in elf32-mips.c.  */
 static asection mmix_elf_reg_section;
-static asymbol mmix_elf_reg_section_symbol;
-static asymbol *mmix_elf_reg_section_symbol_ptr;
+static const asymbol mmix_elf_reg_section_symbol =
+  GLOBAL_SYM_INIT (MMIX_REG_SECTION_NAME, &mmix_elf_reg_section);
+static asection mmix_elf_reg_section =
+  BFD_FAKE_SECTION (mmix_elf_reg_section, &mmix_elf_reg_section_symbol,
+		    MMIX_REG_SECTION_NAME, 0, SEC_NO_FLAGS);
 
 /* Handle the special section numbers that a symbol may use.  */
 
@@ -2090,19 +2093,6 @@ mmix_elf_symbol_processing (bfd *abfd AT
   switch (elfsym->internal_elf_sym.st_shndx)
     {
     case SHN_REGISTER:
-      if (mmix_elf_reg_section.name == NULL)
-	{
-	  /* Initialize the register section.  */
-	  mmix_elf_reg_section.name = MMIX_REG_SECTION_NAME;
-	  mmix_elf_reg_section.flags = SEC_NO_FLAGS;
-	  mmix_elf_reg_section.output_section = &mmix_elf_reg_section;
-	  mmix_elf_reg_section.symbol = &mmix_elf_reg_section_symbol;
-	  mmix_elf_reg_section.symbol_ptr_ptr = &mmix_elf_reg_section_symbol_ptr;
-	  mmix_elf_reg_section_symbol.name = MMIX_REG_SECTION_NAME;
-	  mmix_elf_reg_section_symbol.flags = BSF_SECTION_SYM;
-	  mmix_elf_reg_section_symbol.section = &mmix_elf_reg_section;
-	  mmix_elf_reg_section_symbol_ptr = &mmix_elf_reg_section_symbol;
-	}
       asym->section = &mmix_elf_reg_section;
       break;
 
@@ -2114,7 +2104,7 @@ mmix_elf_symbol_processing (bfd *abfd AT
 /* Given a BFD section, try to locate the corresponding ELF section
    index.  */
 
-static bfd_boolean
+static bool
 mmix_elf_section_from_bfd_section (bfd *       abfd ATTRIBUTE_UNUSED,
 				   asection *  sec,
 				   int *       retval)
@@ -2122,9 +2112,9 @@ mmix_elf_section_from_bfd_section (bfd *
   if (strcmp (bfd_section_name (sec), MMIX_REG_SECTION_NAME) == 0)
     *retval = SHN_REGISTER;
   else
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Hook called by the linker routine which adds symbols from an object
@@ -2134,7 +2124,7 @@ mmix_elf_section_from_bfd_section (bfd *
    symbols, since otherwise having two with the same value would cause
    them to be "merged", but with the contents serialized.  */
 
-static bfd_boolean
+static bool
 mmix_elf_add_symbol_hook (bfd *abfd,
 			  struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			  Elf_Internal_Sym *sym,
@@ -2149,14 +2139,14 @@ mmix_elf_add_symbol_hook (bfd *abfd,
       (*secp)->flags |= SEC_LINKER_CREATED;
     }
   else if ((*namep)[0] == '_' && (*namep)[1] == '_' && (*namep)[2] == '.'
-	   && CONST_STRNEQ (*namep, MMIX_LOC_SECTION_START_SYMBOL_PREFIX))
+	   && startswith (*namep, MMIX_LOC_SECTION_START_SYMBOL_PREFIX))
     {
       /* See if we have another one.  */
       struct bfd_link_hash_entry *h = bfd_link_hash_lookup (info->hash,
 							    *namep,
-							    FALSE,
-							    FALSE,
-							    FALSE);
+							    false,
+							    false,
+							    false);
 
       if (h != NULL && h->type != bfd_link_hash_undefined)
 	{
@@ -2169,16 +2159,16 @@ mmix_elf_add_symbol_hook (bfd *abfd,
 	     abfd, *namep,
 	     *namep + strlen (MMIX_LOC_SECTION_START_SYMBOL_PREFIX));
 	   bfd_set_error (bfd_error_bad_value);
-	   return FALSE;
+	   return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We consider symbols matching "L.*:[0-9]+" to be local symbols.  */
 
-static bfd_boolean
+static bool
 mmix_elf_is_local_label_name (bfd *abfd, const char *name)
 {
   const char *colpos;
@@ -2186,19 +2176,19 @@ mmix_elf_is_local_label_name (bfd *abfd,
 
   /* Also include the default local-label definition.  */
   if (_bfd_elf_is_local_label_name (abfd, name))
-    return TRUE;
+    return true;
 
   if (*name != 'L')
-    return FALSE;
+    return false;
 
   /* If there's no ":", or more than one, it's not a local symbol.  */
   colpos = strchr (name, ':');
   if (colpos == NULL || strchr (colpos + 1, ':') != NULL)
-    return FALSE;
+    return false;
 
   /* Check that there are remaining characters and that they are digits.  */
   if (colpos[1] == 0)
-    return FALSE;
+    return false;
 
   digits = strspn (colpos + 1, "0123456789");
   return digits != 0 && colpos[1 + digits] == 0;
@@ -2206,7 +2196,7 @@ mmix_elf_is_local_label_name (bfd *abfd,
 
 /* We get rid of the register section here.  */
 
-bfd_boolean
+bool
 mmix_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   /* We never output a register section, though we create one for
@@ -2230,7 +2220,7 @@ mmix_elf_final_link (bfd *abfd, struct b
     }
 
   if (! bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
   /* Since this section is marked SEC_LINKER_CREATED, it isn't output by
      the regular linker machinery.  We do it here, like other targets with
@@ -2245,9 +2235,9 @@ mmix_elf_final_link (bfd *abfd, struct b
 				     greg_section->contents,
 				     (file_ptr) greg_section->output_offset,
 				     greg_section->size))
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* We need to include the maximum size of PUSHJ-stubs in the initial
@@ -2280,7 +2270,7 @@ mmix_set_relaxable_size (bfd *abfd ATTRI
 /* Initialize stuff for the linker-generated GREGs to match
    R_MMIX_BASE_PLUS_OFFSET relocs seen by the linker.  */
 
-bfd_boolean
+bool
 _bfd_mmix_before_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
 				    struct bfd_link_info *info)
 {
@@ -2302,19 +2292,19 @@ _bfd_mmix_before_linker_allocation (bfd
      If there is no such object, there was no R_MMIX_BASE_PLUS_OFFSET.  */
   bpo_greg_owner = (bfd *) info->base_file;
   if (bpo_greg_owner == NULL)
-    return TRUE;
+    return true;
 
   bpo_gregs_section
     = bfd_get_section_by_name (bpo_greg_owner,
 			       MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME);
 
   if (bpo_gregs_section == NULL)
-    return TRUE;
+    return true;
 
   /* We use the target-data handle in the ELF section data.  */
   gregdata = mmix_elf_section_data (bpo_gregs_section)->bpo.greg;
   if (gregdata == NULL)
-    return FALSE;
+    return false;
 
   n_gregs = gregdata->n_bpo_relocs;
   gregdata->n_allocated_bpo_gregs = n_gregs;
@@ -2327,7 +2317,7 @@ _bfd_mmix_before_linker_allocation (bfd
   gregs_size = n_gregs * 8;
 
   if (!bfd_set_section_size (bpo_gregs_section, gregs_size))
-    return FALSE;
+    return false;
 
   /* Allocate and set up the GREG arrays.  They're filled in at relaxation
      time.  Note that we must use the max number ever noted for the array,
@@ -2343,7 +2333,7 @@ _bfd_mmix_before_linker_allocation (bfd
 		 gregdata->n_max_bpo_relocs
 		 * sizeof (size_t));
   if (bpo_reloc_indexes == NULL)
-    return FALSE;
+    return false;
 
   /* The default order is an identity mapping.  */
   for (i = 0; i < gregdata->n_max_bpo_relocs; i++)
@@ -2352,13 +2342,13 @@ _bfd_mmix_before_linker_allocation (bfd
       gregdata->reloc_request[i].bpo_reloc_no = i;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Fill in contents in the linker allocated gregs.  Everything is
    calculated at this point; we just move the contents into place here.  */
 
-bfd_boolean
+bool
 _bfd_mmix_after_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
 				   struct bfd_link_info *link_info)
 {
@@ -2375,7 +2365,7 @@ _bfd_mmix_after_linker_allocation (bfd *
      object, there was no R_MMIX_BASE_PLUS_OFFSET.  */
   bpo_greg_owner = (bfd *) link_info->base_file;
   if (bpo_greg_owner == NULL)
-    return TRUE;
+    return true;
 
   bpo_gregs_section
     = bfd_get_section_by_name (bpo_greg_owner,
@@ -2385,20 +2375,20 @@ _bfd_mmix_after_linker_allocation (bfd *
      without any R_MMIX_BASE_PLUS_OFFSET seen, there will be no such
      section.  */
   if (bpo_gregs_section == NULL)
-    return TRUE;
+    return true;
 
   /* We use the target-data handle in the ELF section data.  */
 
   gregdata = mmix_elf_section_data (bpo_gregs_section)->bpo.greg;
   if (gregdata == NULL)
-    return FALSE;
+    return false;
 
   n_gregs = gregdata->n_allocated_bpo_gregs;
 
   bpo_gregs_section->contents
     = contents = bfd_alloc (bpo_greg_owner, bpo_gregs_section->size);
   if (contents == NULL)
-    return FALSE;
+    return false;
 
   /* Sanity check: If these numbers mismatch, some relocation has not been
      accounted for and the rest of gregdata is probably inconsistent.
@@ -2413,7 +2403,7 @@ _bfd_mmix_after_linker_allocation (bfd *
 	   " please report this bug"),
 	 (unsigned long) gregdata->n_remaining_bpo_relocs_this_relaxation_round,
 	 (unsigned long) gregdata->n_bpo_relocs);
-      return FALSE;
+      return false;
     }
 
   for (lastreg = 255, i = 0, j = 0; j < n_gregs; i++)
@@ -2425,7 +2415,7 @@ _bfd_mmix_after_linker_allocation (bfd *
 	j++;
       }
 
-  return TRUE;
+  return true;
 }
 
 /* Sort valid relocs to come before non-valid relocs, then on increasing
@@ -2521,11 +2511,11 @@ mmix_dump_bpo_gregs (struct bfd_link_inf
 
    Symbol- and reloc-reading infrastructure copied from elf-m10200.c.  */
 
-static bfd_boolean
+static bool
 mmix_elf_relax_section (bfd *abfd,
 			asection *sec,
 			struct bfd_link_info *link_info,
-			bfd_boolean *again)
+			bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -2538,13 +2528,14 @@ mmix_elf_relax_section (bfd *abfd,
      spot a missing actual initialization.  */
   size_t bpono = (size_t) -1;
   size_t pjsno = 0;
+  size_t pjsno_undefs = 0;
   Elf_Internal_Sym *isymbuf = NULL;
   bfd_size_type size = sec->rawsize ? sec->rawsize : sec->size;
 
   mmix_elf_section_data (sec)->pjs.stubs_size_sum = 0;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything if this section does not have relocs, or
      if this is not a code section.  */
@@ -2556,7 +2547,7 @@ mmix_elf_relax_section (bfd *abfd,
 	 then nothing to do.  */
       || (bpodata == NULL
 	  && mmix_elf_section_data (sec)->pjs.n_pushj_relocs == 0))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -2703,6 +2694,11 @@ mmix_elf_relax_section (bfd *abfd,
 		  gregdata->n_remaining_bpo_relocs_this_relaxation_round--;
 		  bpono++;
 		}
+
+	      /* Similarly, keep accounting consistent for PUSHJ
+		 referring to an undefined symbol.  */
+	      if (ELF64_R_TYPE (irel->r_info) == R_MMIX_PUSHJ_STUBBABLE)
+		pjsno_undefs++;
 	      continue;
 	    }
 	}
@@ -2765,7 +2761,7 @@ mmix_elf_relax_section (bfd *abfd,
 
       gregdata->reloc_request[gregdata->bpo_reloc_indexes[bpono]].value
 	= symval + irel->r_addend;
-      gregdata->reloc_request[gregdata->bpo_reloc_indexes[bpono++]].valid = TRUE;
+      gregdata->reloc_request[gregdata->bpo_reloc_indexes[bpono++]].valid = true;
       gregdata->n_remaining_bpo_relocs_this_relaxation_round--;
     }
 
@@ -2799,7 +2795,7 @@ mmix_elf_relax_section (bfd *abfd,
 	  {
 	    gregdata->bpo_reloc_indexes[gregdata->reloc_request[i].bpo_reloc_no]
 	      = i;
-	    *again = TRUE;
+	    *again = true;
 	  }
 
       /* Allocate register numbers (indexing from 0).  Stop at the first
@@ -2825,7 +2821,7 @@ mmix_elf_relax_section (bfd *abfd,
       if (gregdata->n_allocated_bpo_gregs != regindex + 1)
 	{
 	  gregdata->n_allocated_bpo_gregs = regindex + 1;
-	  *again = TRUE;
+	  *again = true;
 	}
 
       bpo_gregs_section->size = (regindex + 1) * 8;
@@ -2842,10 +2838,10 @@ mmix_elf_relax_section (bfd *abfd,
 	}
     }
 
-  BFD_ASSERT(pjsno == mmix_elf_section_data (sec)->pjs.n_pushj_relocs);
+  BFD_ASSERT(pjsno + pjsno_undefs
+	     == mmix_elf_section_data (sec)->pjs.n_pushj_relocs);
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
   if (sec->size < size + mmix_elf_section_data (sec)->pjs.stubs_size_sum)
@@ -2854,18 +2850,17 @@ mmix_elf_relax_section (bfd *abfd,
   if (sec->size > size + mmix_elf_section_data (sec)->pjs.stubs_size_sum)
     {
       sec->size = size + mmix_elf_section_data (sec)->pjs.stubs_size_sum;
-      *again = TRUE;
+      *again = true;
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents)
+  if ((unsigned char *) isymbuf != symtab_hdr->contents)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 
 #define ELF_ARCH		bfd_arch_mmix
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-nfp.c ./bfd/elf64-nfp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-nfp.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-nfp.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* NFP-specific support for 64-bit ELF
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
    Contributed by Francois H. Theron <francois.theron@netronome.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -40,128 +40,41 @@ elf64_nfp_reloc (bfd * abfd ATTRIBUTE_UN
    names.
    Most of these are mainly used by the NFP toolchain to resolve things
    before the final ELF file is created.  */
+#define NFP_HOWTO(type) \
+  HOWTO (type, 0, 0, 0, false, 0, complain_overflow_dont, elf64_nfp_reloc, \
+	 #type, false, 0, 0, false)
 static reloc_howto_type elf_nfp_howto_table[] =
 {
-  HOWTO (R_NFP_NOTYPE,		/* Type.  */
-	 0,			/* Rightshift.  */
-	 3,			/* Size.  */
-	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
-	 0,			/* Bitpos.  */
-	 complain_overflow_dont,/* Complain_on_overflow.  */
-	 elf64_nfp_reloc,	/* Special_function.  */
-	 "R_NFP_NOTYPE",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
-	 0,			/* Src_mask.  */
-	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
-  HOWTO (R_NFP_W32LE, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W32LE",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_SRC8_A, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_SRC8_A",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_SRC8_B, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_SRC8_B",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_IMMED8_I, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_IMMED8_I",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_SC, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_SC",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_IMMED_LO16_I_A, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_IMMED_LO16_I_A",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_IMMED_LO16_I_B, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_IMMED_LO16_I_B",
-	 TRUE, 0, 0, FALSE),
-  HOWTO (R_NFP_SRC7_B, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_SRC7_B",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_SRC7_A, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_SRC7_A",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_SRC8_I_B, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_SRC8_I_B",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_SRC8_I_A, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_SRC8_I_A",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_IMMED_HI16_I_A, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_IMMED_HI16_I_A",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_IMMED_HI16_I_B, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_IMMED_HI16_I_B",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W64LE, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W64LE",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_SH_INFO, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_SH_INFO",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W32BE, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W32BE",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W64BE, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W64BE",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W32_29_24, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W32_29_24",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W32LE_AND, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W32LE_AND",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W32BE_AND, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W32BE_AND",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W32LE_OR, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W32LE_OR",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W32BE_OR, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W32BE_OR",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W64LE_AND, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W64LE_AND",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W64BE_AND, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W64BE_AND",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W64LE_OR, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W64LE_OR",
-	 FALSE, 0, 0, FALSE),
-  HOWTO (R_NFP_W64BE_OR, 0, 3, 0, FALSE, 0,
-	 complain_overflow_dont, elf64_nfp_reloc,
-	 "R_NFP_W64BE_OR",
-	 FALSE, 0, 0, FALSE)
+  NFP_HOWTO (R_NFP_NOTYPE),
+  NFP_HOWTO (R_NFP_W32LE),
+  NFP_HOWTO (R_NFP_SRC8_A),
+  NFP_HOWTO (R_NFP_SRC8_B),
+  NFP_HOWTO (R_NFP_IMMED8_I),
+  NFP_HOWTO (R_NFP_SC),
+  NFP_HOWTO (R_NFP_IMMED_LO16_I_A),
+  NFP_HOWTO (R_NFP_IMMED_LO16_I_B),
+  NFP_HOWTO (R_NFP_SRC7_B),
+  NFP_HOWTO (R_NFP_SRC7_A),
+  NFP_HOWTO (R_NFP_SRC8_I_B),
+  NFP_HOWTO (R_NFP_SRC8_I_A),
+  NFP_HOWTO (R_NFP_IMMED_HI16_I_A),
+  NFP_HOWTO (R_NFP_IMMED_HI16_I_B),
+  NFP_HOWTO (R_NFP_W64LE),
+  NFP_HOWTO (R_NFP_SH_INFO),
+  NFP_HOWTO (R_NFP_W32BE),
+  NFP_HOWTO (R_NFP_W64BE),
+  NFP_HOWTO (R_NFP_W32_29_24),
+  NFP_HOWTO (R_NFP_W32LE_AND),
+  NFP_HOWTO (R_NFP_W32BE_AND),
+  NFP_HOWTO (R_NFP_W32LE_OR),
+  NFP_HOWTO (R_NFP_W32BE_OR),
+  NFP_HOWTO (R_NFP_W64LE_AND),
+  NFP_HOWTO (R_NFP_W64BE_AND),
+  NFP_HOWTO (R_NFP_W64LE_OR),
+  NFP_HOWTO (R_NFP_W64BE_OR)
 };
 
-static bfd_boolean
+static bool
 elf64_nfp_object_p (bfd * abfd)
 {
   /* If the e_machine value is one of the unofficial ones, we convert
@@ -188,16 +101,16 @@ elf64_nfp_object_p (bfd * abfd)
 	case E_NFP_MACH_3200:
 	case E_NFP_MACH_6000:
 	  if (!bfd_default_set_arch_mach (abfd, bfd_arch_nfp, e_mach))
-	    return FALSE;
+	    return false;
 	default:
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf64_nfp_section_from_shdr (bfd * abfd,
 			     Elf_Internal_Shdr * hdr,
 			     const char *name, int shindex)
@@ -209,7 +122,7 @@ elf64_nfp_section_from_shdr (bfd * abfd,
     case SHT_NFP_UDEBUG:
       return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
     default:
-      return FALSE;
+      return false;
     }
 }
 
@@ -225,7 +138,7 @@ elf64_nfp_reloc (bfd * abfd ATTRIBUTE_UN
   return bfd_reloc_ok;
 }
 
-static bfd_boolean
+static bool
 elf64_nfp_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
 			 arelent * cache_ptr, Elf_Internal_Rela * dst)
 {
@@ -238,10 +151,10 @@ elf64_nfp_info_to_howto (bfd * abfd ATTR
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = &elf_nfp_howto_table[r_type];
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type *
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-ppc.c ./bfd/elf64-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-ppc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-ppc.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC64-specific support for 64-bit ELF.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Written by Linus Nordberg, Swox AB <info@swox.com>,
    based on elf32-ppc.c by Ian Lance Taylor.
    Largely rewritten by Alan Modra.
@@ -25,6 +25,11 @@
    http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi.txt, and
    http://www.linuxbase.org/spec/ELF/ppc64/spec/book1.html  */
 
+/* The assembler should generate a full set of section symbols even
+   when they appear unused.  The linux kernel build tool recordmcount
+   needs them.  */
+#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true
+
 #include "sysdep.h"
 #include <stdarg.h>
 #include "bfd.h"
@@ -59,7 +64,7 @@ static bfd_reloc_status_type ppc64_elf_p
 static bfd_reloc_status_type ppc64_elf_unhandled_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_vma opd_entry_value
-  (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean);
+  (asection *, bfd_vma, asection **, bfd_vma *, bool);
 
 #define TARGET_LITTLE_SYM	powerpc_elf64_le_vec
 #define TARGET_LITTLE_NAME	"elf64-powerpcle"
@@ -70,7 +75,6 @@ static bfd_vma opd_entry_value
 #define ELF_MACHINE_CODE	EM_PPC64
 #define ELF_MAXPAGESIZE		0x10000
 #define ELF_COMMONPAGESIZE	0x1000
-#define ELF_RELROPAGESIZE	ELF_MAXPAGESIZE
 #define elf_info_to_howto	ppc64_elf_info_to_howto
 
 #define elf_backend_want_got_sym 0
@@ -86,6 +90,7 @@ static bfd_vma opd_entry_value
 #define elf_backend_default_execstack 0
 
 #define bfd_elf64_mkobject		      ppc64_elf_mkobject
+#define bfd_elf64_bfd_free_cached_info	      ppc64_elf_free_cached_info
 #define bfd_elf64_bfd_reloc_type_lookup	      ppc64_elf_reloc_type_lookup
 #define bfd_elf64_bfd_reloc_name_lookup	      ppc64_elf_reloc_name_lookup
 #define bfd_elf64_bfd_merge_private_bfd_data  ppc64_elf_merge_private_bfd_data
@@ -114,7 +119,7 @@ static bfd_vma opd_entry_value
 #define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
 #define elf_backend_hide_symbol		      ppc64_elf_hide_symbol
 #define elf_backend_maybe_function_sym	      ppc64_elf_maybe_function_sym
-#define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
+#define elf_backend_always_size_sections      ppc64_elf_edit
 #define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
 #define elf_backend_hash_symbol		      ppc64_elf_hash_symbol
 #define elf_backend_init_index_section	      _bfd_elf_init_2_index_sections
@@ -125,6 +130,7 @@ static bfd_vma opd_entry_value
 #define elf_backend_finish_dynamic_sections   ppc64_elf_finish_dynamic_sections
 #define elf_backend_link_output_symbol_hook   ppc64_elf_output_symbol_hook
 #define elf_backend_special_sections	      ppc64_elf_special_sections
+#define elf_backend_section_flags	      ppc64_elf_section_flags
 #define elf_backend_merge_symbol_attribute    ppc64_elf_merge_symbol_attribute
 #define elf_backend_merge_symbol	      ppc64_elf_merge_symbol
 #define elf_backend_get_reloc_section	      bfd_get_section_by_name
@@ -210,9 +216,10 @@ static bfd_vma opd_entry_value
 #define PLD_R12_PC	0x04100000e5800000ULL
 #define PNOP		0x0700000000000000ULL
 
-/* __glink_PLTresolve stub instructions.  We enter with the index in R0.  */
+/* __glink_PLTresolve stub instructions.  We enter with the index in
+   R0 for ELFv1, and the address of a glink branch in R12 for ELFv2.  */
 #define GLINK_PLTRESOLVE_SIZE(htab)			\
-  (8u + (htab->opd_abi ? 11 * 4 : 14 * 4))
+  (8u + (htab->opd_abi ? 11 * 4 : htab->has_plt_localentry0 ? 14 * 4 : 13 * 4))
 					/* 0:				*/
 					/*  .quad plt0-1f		*/
 					/* __glink:			*/
@@ -228,11 +235,14 @@ static bfd_vma opd_entry_value
 					/*  mtctr %12			*/
 					/*  ld %11,16(%11)		*/
 					/*  bctr			*/
-#define MFLR_R0		0x7c0802a6	/*  mflr %r0			*/
-#define MTLR_R0		0x7c0803a6	/*  mtlr %r0			*/
-#define SUB_R12_R12_R11	0x7d8b6050	/*  subf %r12,%r11,%r12		*/
-#define ADDI_R0_R12	0x380c0000	/*  addi %r0,%r12,0		*/
-#define SRDI_R0_R0_2	0x7800f082	/*  rldicl %r0,%r0,62,2		*/
+
+#define MFLR_R0		0x7c0802a6	/* mflr %r0			*/
+#define MTLR_R0		0x7c0803a6	/* mtlr %r0			*/
+#define SUB_R12_R12_R11	0x7d8b6050	/* subf %r12,%r11,%r12		*/
+#define ADDI_R0_R12	0x380c0000	/* addi %r0,%r12,0		*/
+#define SRDI_R0_R0_2	0x7800f082	/* rldicl %r0,%r0,62,2		*/
+#define LD_R0_0R11	0xe80b0000	/* ld %r0,0(%r11)		*/
+#define ADD_R11_R0_R11	0x7d605a14	/* add %r11,%r0,%r11		*/
 
 /* Pad with this.  */
 #define NOP		0x60000000
@@ -287,6 +297,10 @@ set_abiversion (bfd *abfd, int ver)
   elf_elfheader (abfd)->e_flags &= ~EF_PPC64_ABI;
   elf_elfheader (abfd)->e_flags |= ver & EF_PPC64_ABI;
 }
+
+#define is_ppc64_elf(bfd) \
+  (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
+   && elf_object_id (bfd) == PPC64_ELF_DATA)
 
 /* Relocation HOWTO's.  */
 /* Like other ELF RELA targets that don't apply multiple
@@ -300,101 +314,105 @@ set_abiversion (bfd *abfd, int ver)
 	    complain, special_func)				\
   HOWTO (type, rightshift, size, bitsize, pc_relative, 0,	\
 	 complain_overflow_ ## complain, special_func,		\
-	 #type, FALSE, 0, mask, pc_relative)
+	 #type, false, 0, mask, pc_relative)
 
 static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
 
 static reloc_howto_type ppc64_elf_howto_raw[] =
 {
   /* This reloc does nothing.  */
-  HOW (R_PPC64_NONE, 3, 0, 0, 0, FALSE, dont,
+  HOW (R_PPC64_NONE, 0, 0, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* A standard 32 bit relocation.  */
-  HOW (R_PPC64_ADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
+  HOW (R_PPC64_ADDR32, 4, 32, 0xffffffff, 0, false, bitfield,
        bfd_elf_generic_reloc),
 
   /* An absolute 26 bit branch; the lower two bits must be zero.
      FIXME: we don't check that, we just clear them.  */
-  HOW (R_PPC64_ADDR24, 2, 26, 0x03fffffc, 0, FALSE, bitfield,
+  HOW (R_PPC64_ADDR24, 4, 26, 0x03fffffc, 0, false, bitfield,
        bfd_elf_generic_reloc),
 
   /* A standard 16 bit relocation.  */
-  HOW (R_PPC64_ADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
+  HOW (R_PPC64_ADDR16, 2, 16, 0xffff, 0, false, bitfield,
        bfd_elf_generic_reloc),
 
   /* A 16 bit relocation without overflow.  */
-  HOW (R_PPC64_ADDR16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_ADDR16_LO, 2, 16, 0xffff, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Bits 16-31 of an address.  */
-  HOW (R_PPC64_ADDR16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_ADDR16_HI, 2, 16, 0xffff, 16, false, signed,
        bfd_elf_generic_reloc),
 
   /* Bits 16-31 of an address, plus 1 if the contents of the low 16
      bits, treated as a signed number, is negative.  */
-  HOW (R_PPC64_ADDR16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_ADDR16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_ha_reloc),
 
   /* An absolute 16 bit branch; the lower two bits must be zero.
      FIXME: we don't check that, we just clear them.  */
-  HOW (R_PPC64_ADDR14, 2, 16, 0x0000fffc, 0, FALSE, signed,
+  HOW (R_PPC64_ADDR14, 4, 16, 0x0000fffc, 0, false, signed,
        ppc64_elf_branch_reloc),
 
   /* An absolute 16 bit branch, for which bit 10 should be set to
      indicate that the branch is expected to be taken.  The lower two
      bits must be zero.  */
-  HOW (R_PPC64_ADDR14_BRTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
+  HOW (R_PPC64_ADDR14_BRTAKEN, 4, 16, 0x0000fffc, 0, false, signed,
        ppc64_elf_brtaken_reloc),
 
   /* An absolute 16 bit branch, for which bit 10 should be set to
      indicate that the branch is not expected to be taken.  The lower
      two bits must be zero.  */
-  HOW (R_PPC64_ADDR14_BRNTAKEN, 2, 16, 0x0000fffc, 0, FALSE, signed,
+  HOW (R_PPC64_ADDR14_BRNTAKEN, 4, 16, 0x0000fffc, 0, false, signed,
        ppc64_elf_brtaken_reloc),
 
   /* A relative 26 bit branch; the lower two bits must be zero.  */
-  HOW (R_PPC64_REL24, 2, 26, 0x03fffffc, 0, TRUE, signed,
+  HOW (R_PPC64_REL24, 4, 26, 0x03fffffc, 0, true, signed,
        ppc64_elf_branch_reloc),
 
   /* A variant of R_PPC64_REL24, used when r2 is not the toc pointer.  */
-  HOW (R_PPC64_REL24_NOTOC, 2, 26, 0x03fffffc, 0, TRUE, signed,
+  HOW (R_PPC64_REL24_NOTOC, 4, 26, 0x03fffffc, 0, true, signed,
+       ppc64_elf_branch_reloc),
+
+  /* Another variant, when p10 insns can't be used on stubs.  */
+  HOW (R_PPC64_REL24_P9NOTOC, 4, 26, 0x03fffffc, 0, true, signed,
        ppc64_elf_branch_reloc),
 
   /* A relative 16 bit branch; the lower two bits must be zero.  */
-  HOW (R_PPC64_REL14, 2, 16, 0x0000fffc, 0, TRUE, signed,
+  HOW (R_PPC64_REL14, 4, 16, 0x0000fffc, 0, true, signed,
        ppc64_elf_branch_reloc),
 
   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
      the branch is expected to be taken.  The lower two bits must be
      zero.  */
-  HOW (R_PPC64_REL14_BRTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
+  HOW (R_PPC64_REL14_BRTAKEN, 4, 16, 0x0000fffc, 0, true, signed,
        ppc64_elf_brtaken_reloc),
 
   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
      the branch is not expected to be taken.  The lower two bits must
      be zero.  */
-  HOW (R_PPC64_REL14_BRNTAKEN, 2, 16, 0x0000fffc, 0, TRUE, signed,
+  HOW (R_PPC64_REL14_BRNTAKEN, 4, 16, 0x0000fffc, 0, true, signed,
        ppc64_elf_brtaken_reloc),
 
   /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
      symbol.  */
-  HOW (R_PPC64_GOT16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC64_GOT16, 2, 16, 0xffff, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
      the symbol.  */
-  HOW (R_PPC64_GOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_GOT16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
      the symbol.  */
-  HOW (R_PPC64_GOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
      the symbol.  */
-  HOW (R_PPC64_GOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* This is used only by the dynamic linker.  The symbol should exist
@@ -402,148 +420,148 @@ static reloc_howto_type ppc64_elf_howto_
      dynamic linker copies the data addressed by the symbol from the
      shared library into the object, because the object being
      run has to have the data at some particular address.  */
-  HOW (R_PPC64_COPY, 0, 0, 0, 0, FALSE, dont,
+  HOW (R_PPC64_COPY, 0, 0, 0, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_ADDR64, but used when setting global offset table
      entries.  */
-  HOW (R_PPC64_GLOB_DAT, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_GLOB_DAT, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Created by the link editor.  Marks a procedure linkage table
      entry for a symbol.  */
-  HOW (R_PPC64_JMP_SLOT, 0, 0, 0, 0, FALSE, dont,
+  HOW (R_PPC64_JMP_SLOT, 0, 0, 0, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Used only by the dynamic linker.  When the object is run, this
      doubleword64 is set to the load address of the object, plus the
      addend.  */
-  HOW (R_PPC64_RELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_RELATIVE, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Like R_PPC64_ADDR32, but may be unaligned.  */
-  HOW (R_PPC64_UADDR32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
+  HOW (R_PPC64_UADDR32, 4, 32, 0xffffffff, 0, false, bitfield,
        bfd_elf_generic_reloc),
 
   /* Like R_PPC64_ADDR16, but may be unaligned.  */
-  HOW (R_PPC64_UADDR16, 1, 16, 0xffff, 0, FALSE, bitfield,
+  HOW (R_PPC64_UADDR16, 2, 16, 0xffff, 0, false, bitfield,
        bfd_elf_generic_reloc),
 
   /* 32-bit PC relative.  */
-  HOW (R_PPC64_REL32, 2, 32, 0xffffffff, 0, TRUE, signed,
+  HOW (R_PPC64_REL32, 4, 32, 0xffffffff, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* 32-bit relocation to the symbol's procedure linkage table.  */
-  HOW (R_PPC64_PLT32, 2, 32, 0xffffffff, 0, FALSE, bitfield,
+  HOW (R_PPC64_PLT32, 4, 32, 0xffffffff, 0, false, bitfield,
        ppc64_elf_unhandled_reloc),
 
   /* 32-bit PC relative relocation to the symbol's procedure linkage table.
      FIXME: R_PPC64_PLTREL32 not supported.  */
-  HOW (R_PPC64_PLTREL32, 2, 32, 0xffffffff, 0, TRUE, signed,
+  HOW (R_PPC64_PLTREL32, 4, 32, 0xffffffff, 0, true, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
      the symbol.  */
-  HOW (R_PPC64_PLT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_PLT16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
      the symbol.  */
-  HOW (R_PPC64_PLT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_PLT16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
      the symbol.  */
-  HOW (R_PPC64_PLT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_PLT16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* 16-bit section relative relocation.  */
-  HOW (R_PPC64_SECTOFF, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC64_SECTOFF, 2, 16, 0xffff, 0, false, signed,
        ppc64_elf_sectoff_reloc),
 
   /* Like R_PPC64_SECTOFF, but no overflow warning.  */
-  HOW (R_PPC64_SECTOFF_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_SECTOFF_LO, 2, 16, 0xffff, 0, false, dont,
        ppc64_elf_sectoff_reloc),
 
   /* 16-bit upper half section relative relocation.  */
-  HOW (R_PPC64_SECTOFF_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_SECTOFF_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_sectoff_reloc),
 
   /* 16-bit upper half adjusted section relative relocation.  */
-  HOW (R_PPC64_SECTOFF_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_SECTOFF_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_sectoff_ha_reloc),
 
   /* Like R_PPC64_REL24 without touching the two least significant bits.  */
-  HOW (R_PPC64_REL30, 2, 30, 0xfffffffc, 2, TRUE, dont,
+  HOW (R_PPC64_REL30, 4, 30, 0xfffffffc, 2, true, dont,
        bfd_elf_generic_reloc),
 
   /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
 
   /* A standard 64-bit relocation.  */
-  HOW (R_PPC64_ADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_ADDR64, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* The bits 32-47 of an address.  */
-  HOW (R_PPC64_ADDR16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGHER, 2, 16, 0xffff, 32, false, dont,
        bfd_elf_generic_reloc),
 
   /* The bits 32-47 of an address, plus 1 if the contents of the low
      16 bits, treated as a signed number, is negative.  */
-  HOW (R_PPC64_ADDR16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGHERA, 2, 16, 0xffff, 32, false, dont,
        ppc64_elf_ha_reloc),
 
   /* The bits 48-63 of an address.  */
-  HOW (R_PPC64_ADDR16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGHEST, 2, 16, 0xffff, 48, false, dont,
        bfd_elf_generic_reloc),
 
   /* The bits 48-63 of an address, plus 1 if the contents of the low
      16 bits, treated as a signed number, is negative.  */
-  HOW (R_PPC64_ADDR16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGHESTA, 2, 16, 0xffff, 48, false, dont,
        ppc64_elf_ha_reloc),
 
   /* Like ADDR64, but may be unaligned.  */
-  HOW (R_PPC64_UADDR64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_UADDR64, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* 64-bit relative relocation.  */
-  HOW (R_PPC64_REL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
+  HOW (R_PPC64_REL64, 8, 64, 0xffffffffffffffffULL, 0, true, dont,
        bfd_elf_generic_reloc),
 
   /* 64-bit relocation to the symbol's procedure linkage table.  */
-  HOW (R_PPC64_PLT64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_PLT64, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* 64-bit PC relative relocation to the symbol's procedure linkage
      table.  */
   /* FIXME: R_PPC64_PLTREL64 not supported.  */
-  HOW (R_PPC64_PLTREL64, 4, 64, 0xffffffffffffffffULL, 0, TRUE, dont,
+  HOW (R_PPC64_PLTREL64, 8, 64, 0xffffffffffffffffULL, 0, true, dont,
        ppc64_elf_unhandled_reloc),
 
   /* 16 bit TOC-relative relocation.  */
   /* R_PPC64_TOC16	  47	   half16*	S + A - .TOC.  */
-  HOW (R_PPC64_TOC16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC64_TOC16, 2, 16, 0xffff, 0, false, signed,
        ppc64_elf_toc_reloc),
 
   /* 16 bit TOC-relative relocation without overflow.  */
   /* R_PPC64_TOC16_LO	  48	   half16	 #lo (S + A - .TOC.)  */
-  HOW (R_PPC64_TOC16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_TOC16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc64_elf_toc_reloc),
 
   /* 16 bit TOC-relative relocation, high 16 bits.  */
   /* R_PPC64_TOC16_HI	  49	   half16	 #hi (S + A - .TOC.)  */
-  HOW (R_PPC64_TOC16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_TOC16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_toc_reloc),
 
   /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
      contents of the low 16 bits, treated as a signed number, is
      negative.  */
   /* R_PPC64_TOC16_HA	  50	   half16	 #ha (S + A - .TOC.)  */
-  HOW (R_PPC64_TOC16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_TOC16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_toc_ha_reloc),
 
   /* 64-bit relocation; insert value of TOC base (.TOC.).  */
   /* R_PPC64_TOC		  51	   doubleword64	 .TOC.  */
-  HOW (R_PPC64_TOC, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_TOC, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        ppc64_elf_toc64_reloc),
 
   /* Like R_PPC64_GOT16, but also informs the link editor that the
@@ -555,428 +573,428 @@ static reloc_howto_type ppc64_elf_howto_
      The link editor may also skip all of this and just (c) emit a
      R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
   /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
-    HOW (R_PPC64_PLTGOT16, 1, 16, 0xffff, 0, FALSE,signed,
+    HOW (R_PPC64_PLTGOT16, 2, 16, 0xffff, 0, false,signed,
 	  ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_PLTGOT16, but without overflow.  */
   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
-  HOW (R_PPC64_PLTGOT16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_PLTGOT16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
   /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
-  HOW (R_PPC64_PLTGOT16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_PLTGOT16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
      1 if the contents of the low 16 bits, treated as a signed number,
      is negative.  */
   /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
-  HOW (R_PPC64_PLTGOT16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_PLTGOT16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
-  HOW (R_PPC64_ADDR16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC64_ADDR16_DS, 2, 16, 0xfffc, 0, false, signed,
        bfd_elf_generic_reloc),
 
   /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
-  HOW (R_PPC64_ADDR16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_ADDR16_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
-  HOW (R_PPC64_GOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC64_GOT16_DS, 2, 16, 0xfffc, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
-  HOW (R_PPC64_GOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_GOT16_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
-  HOW (R_PPC64_PLT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_PLT16_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
-  HOW (R_PPC64_SECTOFF_DS, 1, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC64_SECTOFF_DS, 2, 16, 0xfffc, 0, false, signed,
        ppc64_elf_sectoff_reloc),
 
   /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
-  HOW (R_PPC64_SECTOFF_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_SECTOFF_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        ppc64_elf_sectoff_reloc),
 
   /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
-  HOW (R_PPC64_TOC16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC64_TOC16_DS, 2, 16, 0xfffc, 0, false, signed,
        ppc64_elf_toc_reloc),
 
   /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
-  HOW (R_PPC64_TOC16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_TOC16_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        ppc64_elf_toc_reloc),
 
   /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
   /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
-  HOW (R_PPC64_PLTGOT16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC64_PLTGOT16_DS, 2, 16, 0xfffc, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
-  HOW (R_PPC64_PLTGOT16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_PLTGOT16_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Marker relocs for TLS.  */
-  HOW (R_PPC64_TLS, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_TLS, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_TLSGD, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_TLSGD, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_TLSLD, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_TLSLD, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Marker reloc for optimizing r2 save in prologue rather than on
      each plt call stub.  */
-  HOW (R_PPC64_TOCSAVE, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_TOCSAVE, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Marker relocs on inline plt call instructions.  */
-  HOW (R_PPC64_PLTSEQ, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_PLTSEQ, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_PLTCALL, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_PLTCALL, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Computes the load module index of the load module that contains the
      definition of its TLS sym.  */
-  HOW (R_PPC64_DTPMOD64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_DTPMOD64, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Computes a dtv-relative displacement, the difference between the value
      of sym+add and the base address of the thread-local storage block that
      contains the definition of sym, minus 0x8000.  */
-  HOW (R_PPC64_DTPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_DTPREL64, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* A 16 bit dtprel reloc.  */
-  HOW (R_PPC64_DTPREL16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC64_DTPREL16, 2, 16, 0xffff, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like DTPREL16, but no overflow.  */
-  HOW (R_PPC64_DTPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_DTPREL16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like DTPREL16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC64_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_DTPREL16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like DTPREL16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC64_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_DTPREL16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like DTPREL16_HI, but next higher group of 16 bits.  */
-  HOW (R_PPC64_DTPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
+  HOW (R_PPC64_DTPREL16_HIGHER, 2, 16, 0xffff, 32, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
-  HOW (R_PPC64_DTPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
+  HOW (R_PPC64_DTPREL16_HIGHERA, 2, 16, 0xffff, 32, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
-  HOW (R_PPC64_DTPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
+  HOW (R_PPC64_DTPREL16_HIGHEST, 2, 16, 0xffff, 48, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
-  HOW (R_PPC64_DTPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
+  HOW (R_PPC64_DTPREL16_HIGHESTA, 2, 16, 0xffff, 48, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like DTPREL16, but for insns with a DS field.  */
-  HOW (R_PPC64_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC64_DTPREL16_DS, 2, 16, 0xfffc, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like DTPREL16_DS, but no overflow.  */
-  HOW (R_PPC64_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_DTPREL16_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Computes a tp-relative displacement, the difference between the value of
      sym+add and the value of the thread pointer (r13).  */
-  HOW (R_PPC64_TPREL64, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_TPREL64, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* A 16 bit tprel reloc.  */
-  HOW (R_PPC64_TPREL16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC64_TPREL16, 2, 16, 0xffff, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like TPREL16, but no overflow.  */
-  HOW (R_PPC64_TPREL16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_TPREL16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like TPREL16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC64_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_TPREL16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like TPREL16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC64_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_TPREL16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like TPREL16_HI, but next higher group of 16 bits.  */
-  HOW (R_PPC64_TPREL16_HIGHER, 1, 16, 0xffff, 32, FALSE, dont,
+  HOW (R_PPC64_TPREL16_HIGHER, 2, 16, 0xffff, 32, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
-  HOW (R_PPC64_TPREL16_HIGHERA, 1, 16, 0xffff, 32, FALSE, dont,
+  HOW (R_PPC64_TPREL16_HIGHERA, 2, 16, 0xffff, 32, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
-  HOW (R_PPC64_TPREL16_HIGHEST, 1, 16, 0xffff, 48, FALSE, dont,
+  HOW (R_PPC64_TPREL16_HIGHEST, 2, 16, 0xffff, 48, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
-  HOW (R_PPC64_TPREL16_HIGHESTA, 1, 16, 0xffff, 48, FALSE, dont,
+  HOW (R_PPC64_TPREL16_HIGHESTA, 2, 16, 0xffff, 48, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like TPREL16, but for insns with a DS field.  */
-  HOW (R_PPC64_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC64_TPREL16_DS, 2, 16, 0xfffc, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like TPREL16_DS, but no overflow.  */
-  HOW (R_PPC64_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_TPREL16_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
      with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
      to the first entry relative to the TOC base (r2).  */
-  HOW (R_PPC64_GOT_TLSGD16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC64_GOT_TLSGD16, 2, 16, 0xffff, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_TLSGD16, but no overflow.  */
-  HOW (R_PPC64_GOT_TLSGD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_GOT_TLSGD16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC64_GOT_TLSGD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT_TLSGD16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC64_GOT_TLSGD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT_TLSGD16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
      with values (sym+add)@dtpmod and zero, and computes the offset to the
      first entry relative to the TOC base (r2).  */
-  HOW (R_PPC64_GOT_TLSLD16, 1, 16, 0xffff, 0, FALSE, signed,
+  HOW (R_PPC64_GOT_TLSLD16, 2, 16, 0xffff, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_TLSLD16, but no overflow.  */
-  HOW (R_PPC64_GOT_TLSLD16_LO, 1, 16, 0xffff, 0, FALSE, dont,
+  HOW (R_PPC64_GOT_TLSLD16_LO, 2, 16, 0xffff, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
-  HOW (R_PPC64_GOT_TLSLD16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT_TLSLD16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC64_GOT_TLSLD16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT_TLSLD16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
      the offset to the entry relative to the TOC base (r2).  */
-  HOW (R_PPC64_GOT_DTPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC64_GOT_DTPREL16_DS, 2, 16, 0xfffc, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_DTPREL16_DS, but no overflow.  */
-  HOW (R_PPC64_GOT_DTPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_GOT_DTPREL16_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
-  HOW (R_PPC64_GOT_DTPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT_DTPREL16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC64_GOT_DTPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT_DTPREL16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
      offset to the entry relative to the TOC base (r2).  */
-  HOW (R_PPC64_GOT_TPREL16_DS, 1, 16, 0xfffc, 0, FALSE, signed,
+  HOW (R_PPC64_GOT_TPREL16_DS, 2, 16, 0xfffc, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_TPREL16_DS, but no overflow.  */
-  HOW (R_PPC64_GOT_TPREL16_LO_DS, 1, 16, 0xfffc, 0, FALSE, dont,
+  HOW (R_PPC64_GOT_TPREL16_LO_DS, 2, 16, 0xfffc, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
-  HOW (R_PPC64_GOT_TPREL16_HI, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT_TPREL16_HI, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
-  HOW (R_PPC64_GOT_TPREL16_HA, 1, 16, 0xffff, 16, FALSE, signed,
+  HOW (R_PPC64_GOT_TPREL16_HA, 2, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_JMP_IREL, 0, 0, 0, 0, FALSE, dont,
+  HOW (R_PPC64_JMP_IREL, 0, 0, 0, 0, false, dont,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_IRELATIVE, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_IRELATIVE, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* A 16 bit relative relocation.  */
-  HOW (R_PPC64_REL16, 1, 16, 0xffff, 0, TRUE, signed,
+  HOW (R_PPC64_REL16, 2, 16, 0xffff, 0, true, signed,
        bfd_elf_generic_reloc),
 
   /* A 16 bit relative relocation without overflow.  */
-  HOW (R_PPC64_REL16_LO, 1, 16, 0xffff, 0, TRUE, dont,
+  HOW (R_PPC64_REL16_LO, 2, 16, 0xffff, 0, true, dont,
        bfd_elf_generic_reloc),
 
   /* The high order 16 bits of a relative address.  */
-  HOW (R_PPC64_REL16_HI, 1, 16, 0xffff, 16, TRUE, signed,
+  HOW (R_PPC64_REL16_HI, 2, 16, 0xffff, 16, true, signed,
        bfd_elf_generic_reloc),
 
   /* The high order 16 bits of a relative address, plus 1 if the contents of
      the low 16 bits, treated as a signed number, is negative.  */
-  HOW (R_PPC64_REL16_HA, 1, 16, 0xffff, 16, TRUE, signed,
+  HOW (R_PPC64_REL16_HA, 2, 16, 0xffff, 16, true, signed,
        ppc64_elf_ha_reloc),
 
-  HOW (R_PPC64_REL16_HIGH, 1, 16, 0xffff, 16, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGH, 2, 16, 0xffff, 16, true, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_REL16_HIGHA, 1, 16, 0xffff, 16, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGHA, 2, 16, 0xffff, 16, true, dont,
        ppc64_elf_ha_reloc),
 
-  HOW (R_PPC64_REL16_HIGHER, 1, 16, 0xffff, 32, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGHER, 2, 16, 0xffff, 32, true, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_REL16_HIGHERA, 1, 16, 0xffff, 32, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGHERA, 2, 16, 0xffff, 32, true, dont,
        ppc64_elf_ha_reloc),
 
-  HOW (R_PPC64_REL16_HIGHEST, 1, 16, 0xffff, 48, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGHEST, 2, 16, 0xffff, 48, true, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_REL16_HIGHESTA, 1, 16, 0xffff, 48, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGHESTA, 2, 16, 0xffff, 48, true, dont,
        ppc64_elf_ha_reloc),
 
   /* Like R_PPC64_REL16_HA but for split field in addpcis.  */
-  HOW (R_PPC64_REL16DX_HA, 2, 16, 0x1fffc1, 16, TRUE, signed,
+  HOW (R_PPC64_REL16DX_HA, 4, 16, 0x1fffc1, 16, true, signed,
        ppc64_elf_ha_reloc),
 
   /* A split-field reloc for addpcis, non-relative (gas internal use only).  */
-  HOW (R_PPC64_16DX_HA, 2, 16, 0x1fffc1, 16, FALSE, signed,
+  HOW (R_PPC64_16DX_HA, 4, 16, 0x1fffc1, 16, false, signed,
        ppc64_elf_ha_reloc),
 
   /* Like R_PPC64_ADDR16_HI, but no overflow.  */
-  HOW (R_PPC64_ADDR16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGH, 2, 16, 0xffff, 16, false, dont,
        bfd_elf_generic_reloc),
 
   /* Like R_PPC64_ADDR16_HA, but no overflow.  */
-  HOW (R_PPC64_ADDR16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGHA, 2, 16, 0xffff, 16, false, dont,
        ppc64_elf_ha_reloc),
 
   /* Like R_PPC64_DTPREL16_HI, but no overflow.  */
-  HOW (R_PPC64_DTPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC64_DTPREL16_HIGH, 2, 16, 0xffff, 16, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_DTPREL16_HA, but no overflow.  */
-  HOW (R_PPC64_DTPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC64_DTPREL16_HIGHA, 2, 16, 0xffff, 16, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_TPREL16_HI, but no overflow.  */
-  HOW (R_PPC64_TPREL16_HIGH, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC64_TPREL16_HIGH, 2, 16, 0xffff, 16, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Like R_PPC64_TPREL16_HA, but no overflow.  */
-  HOW (R_PPC64_TPREL16_HIGHA, 1, 16, 0xffff, 16, FALSE, dont,
+  HOW (R_PPC64_TPREL16_HIGHA, 2, 16, 0xffff, 16, false, dont,
        ppc64_elf_unhandled_reloc),
 
   /* Marker reloc on ELFv2 large-model function entry.  */
-  HOW (R_PPC64_ENTRY, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_ENTRY, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
   /* Like ADDR64, but use local entry point of function.  */
-  HOW (R_PPC64_ADDR64_LOCAL, 4, 64, 0xffffffffffffffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_ADDR64_LOCAL, 8, 64, 0xffffffffffffffffULL, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_PLTSEQ_NOTOC, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_PLTSEQ_NOTOC, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_PLTCALL_NOTOC, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_PLTCALL_NOTOC, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_PCREL_OPT, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_PCREL_OPT, 4, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_D34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
+  HOW (R_PPC64_D34, 8, 34, 0x3ffff0000ffffULL, 0, false, signed,
        ppc64_elf_prefix_reloc),
 
-  HOW (R_PPC64_D34_LO, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, dont,
+  HOW (R_PPC64_D34_LO, 8, 34, 0x3ffff0000ffffULL, 0, false, dont,
        ppc64_elf_prefix_reloc),
 
-  HOW (R_PPC64_D34_HI30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
+  HOW (R_PPC64_D34_HI30, 8, 34, 0x3ffff0000ffffULL, 34, false, dont,
        ppc64_elf_prefix_reloc),
 
-  HOW (R_PPC64_D34_HA30, 4, 34, 0x3ffff0000ffffULL, 34, FALSE, dont,
+  HOW (R_PPC64_D34_HA30, 8, 34, 0x3ffff0000ffffULL, 34, false, dont,
        ppc64_elf_prefix_reloc),
 
-  HOW (R_PPC64_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_PCREL34, 8, 34, 0x3ffff0000ffffULL, 0, true, signed,
        ppc64_elf_prefix_reloc),
 
-  HOW (R_PPC64_GOT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_GOT_PCREL34, 8, 34, 0x3ffff0000ffffULL, 0, true, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_PLT_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_PLT_PCREL34, 8, 34, 0x3ffff0000ffffULL, 0, true, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_PLT_PCREL34_NOTOC, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_PLT_PCREL34_NOTOC, 8, 34, 0x3ffff0000ffffULL, 0, true, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
+  HOW (R_PPC64_TPREL34, 8, 34, 0x3ffff0000ffffULL, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
+  HOW (R_PPC64_DTPREL34, 8, 34, 0x3ffff0000ffffULL, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_GOT_TLSGD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_GOT_TLSGD_PCREL34, 8, 34, 0x3ffff0000ffffULL, 0, true, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_GOT_TLSLD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_GOT_TLSLD_PCREL34, 8, 34, 0x3ffff0000ffffULL, 0, true, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_GOT_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_GOT_TPREL_PCREL34, 8, 34, 0x3ffff0000ffffULL, 0, true, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_GOT_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_GOT_DTPREL_PCREL34, 8, 34, 0x3ffff0000ffffULL, 0, true, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_ADDR16_HIGHER34, 1, 16, 0xffff, 34, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGHER34, 2, 16, 0xffff, 34, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_ADDR16_HIGHERA34, 1, 16, 0xffff, 34, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGHERA34, 2, 16, 0xffff, 34, false, dont,
        ppc64_elf_ha_reloc),
 
-  HOW (R_PPC64_ADDR16_HIGHEST34, 1, 16, 0xffff, 50, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGHEST34, 2, 16, 0xffff, 50, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_ADDR16_HIGHESTA34, 1, 16, 0xffff, 50, FALSE, dont,
+  HOW (R_PPC64_ADDR16_HIGHESTA34, 2, 16, 0xffff, 50, false, dont,
        ppc64_elf_ha_reloc),
 
-  HOW (R_PPC64_REL16_HIGHER34, 1, 16, 0xffff, 34, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGHER34, 2, 16, 0xffff, 34, true, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_REL16_HIGHERA34, 1, 16, 0xffff, 34, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGHERA34, 2, 16, 0xffff, 34, true, dont,
        ppc64_elf_ha_reloc),
 
-  HOW (R_PPC64_REL16_HIGHEST34, 1, 16, 0xffff, 50, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGHEST34, 2, 16, 0xffff, 50, true, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_REL16_HIGHESTA34, 1, 16, 0xffff, 50, TRUE, dont,
+  HOW (R_PPC64_REL16_HIGHESTA34, 2, 16, 0xffff, 50, true, dont,
        ppc64_elf_ha_reloc),
 
-  HOW (R_PPC64_D28, 4, 28, 0xfff0000ffffULL, 0, FALSE, signed,
+  HOW (R_PPC64_D28, 8, 28, 0xfff0000ffffULL, 0, false, signed,
        ppc64_elf_prefix_reloc),
 
-  HOW (R_PPC64_PCREL28, 4, 28, 0xfff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_PCREL28, 8, 28, 0xfff0000ffffULL, 0, true, signed,
        ppc64_elf_prefix_reloc),
 
   /* GNU extension to record C++ vtable hierarchy.  */
-  HOW (R_PPC64_GNU_VTINHERIT, 0, 0, 0, 0, FALSE, dont,
+  HOW (R_PPC64_GNU_VTINHERIT, 0, 0, 0, 0, false, dont,
        NULL),
 
   /* GNU extension to record C++ vtable member usage.  */
-  HOW (R_PPC64_GNU_VTENTRY, 0, 0, 0, 0, FALSE, dont,
+  HOW (R_PPC64_GNU_VTENTRY, 0, 0, 0, 0, false, dont,
        NULL),
 };
 
@@ -998,8 +1016,7 @@ ppc_howto_init (void)
 }
 
 static reloc_howto_type *
-ppc64_elf_reloc_type_lookup (bfd *abfd,
-			     bfd_reloc_code_real_type code)
+ppc64_elf_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
 {
   enum elf_ppc64_reloc_type r = R_PPC64_NONE;
 
@@ -1044,6 +1061,8 @@ ppc64_elf_reloc_type_lookup (bfd *abfd,
       break;
     case BFD_RELOC_PPC64_REL24_NOTOC:		r = R_PPC64_REL24_NOTOC;
       break;
+    case BFD_RELOC_PPC64_REL24_P9NOTOC:		r = R_PPC64_REL24_P9NOTOC;
+      break;
     case BFD_RELOC_PPC_B16:			r = R_PPC64_REL14;
       break;
     case BFD_RELOC_PPC_B16_BRTAKEN:		r = R_PPC64_REL14_BRTAKEN;
@@ -1279,13 +1298,13 @@ ppc64_elf_reloc_type_lookup (bfd *abfd,
       break;
     case BFD_RELOC_PPC64_DTPREL34:		r = R_PPC64_DTPREL34;
       break;
-    case BFD_RELOC_PPC64_GOT_TLSGD34:		r = R_PPC64_GOT_TLSGD34;
+    case BFD_RELOC_PPC64_GOT_TLSGD_PCREL34:	r = R_PPC64_GOT_TLSGD_PCREL34;
       break;
-    case BFD_RELOC_PPC64_GOT_TLSLD34:		r = R_PPC64_GOT_TLSLD34;
+    case BFD_RELOC_PPC64_GOT_TLSLD_PCREL34:	r = R_PPC64_GOT_TLSLD_PCREL34;
       break;
-    case BFD_RELOC_PPC64_GOT_TPREL34:		r = R_PPC64_GOT_TPREL34;
+    case BFD_RELOC_PPC64_GOT_TPREL_PCREL34:	r = R_PPC64_GOT_TPREL_PCREL34;
       break;
-    case BFD_RELOC_PPC64_GOT_DTPREL34:		r = R_PPC64_GOT_DTPREL34;
+    case BFD_RELOC_PPC64_GOT_DTPREL_PCREL34:	r = R_PPC64_GOT_DTPREL_PCREL34;
       break;
     case BFD_RELOC_PPC64_ADDR16_HIGHER34:	r = R_PPC64_ADDR16_HIGHER34;
       break;
@@ -1317,22 +1336,39 @@ ppc64_elf_reloc_type_lookup (bfd *abfd,
 };
 
 static reloc_howto_type *
-ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			     const char *r_name)
+ppc64_elf_reloc_name_lookup (bfd *abfd, const char *r_name)
 {
   unsigned int i;
+  static char *compat_map[][2] = {
+    { "R_PPC64_GOT_TLSGD34", "R_PPC64_GOT_TLSGD_PCREL34" },
+    { "R_PPC64_GOT_TLSLD34", "R_PPC64_GOT_TLSLD_PCREL34" },
+    { "R_PPC64_GOT_TPREL34", "R_PPC64_GOT_TPREL_PCREL34" },
+    { "R_PPC64_GOT_DTPREL34", "R_PPC64_GOT_DTPREL_PCREL34" }
+  };
 
   for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
     if (ppc64_elf_howto_raw[i].name != NULL
 	&& strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
       return &ppc64_elf_howto_raw[i];
 
+  /* Handle old names of relocations in case they were used by
+     .reloc directives.
+     FIXME: Remove this soon.  Mapping the reloc names is very likely
+     completely unnecessary.  */
+  for (i = 0; i < ARRAY_SIZE (compat_map); i++)
+    if (strcasecmp (compat_map[i][0], r_name) == 0)
+      {
+	_bfd_error_handler (_("warning: %s should be used rather than %s"),
+			    compat_map[i][1], compat_map[i][0]);
+	return ppc64_elf_reloc_name_lookup (abfd, compat_map[i][1]);
+      }
+
   return NULL;
 }
 
 /* Set the howto pointer for a PowerPC ELF reloc.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_info_to_howto (bfd *abfd, arelent *cache_ptr,
 			 Elf_Internal_Rela *dst)
 {
@@ -1349,7 +1385,7 @@ ppc64_elf_info_to_howto (bfd *abfd, arel
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = ppc64_elf_howto_table[type];
   if (cache_ptr->howto == NULL || cache_ptr->howto->name == NULL)
@@ -1358,10 +1394,10 @@ ppc64_elf_info_to_howto (bfd *abfd, arel
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
@@ -1409,6 +1445,10 @@ ppc64_elf_ha_reloc (bfd *abfd, arelent *
   value = (bfd_signed_vma) value >> 16;
 
   octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, octets))
+    return bfd_reloc_outofrange;
+
   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
   insn &= ~0x1fffc1;
   insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
@@ -1427,12 +1467,16 @@ ppc64_elf_branch_reloc (bfd *abfd, arele
     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
 				  input_section, output_bfd, error_message);
 
+  if (symbol->section->owner == NULL
+      || !is_ppc64_elf (symbol->section->owner))
+    return bfd_reloc_continue;
+
   if (strcmp (symbol->section->name, ".opd") == 0
       && (symbol->section->owner->flags & DYNAMIC) == 0)
     {
       bfd_vma dest = opd_entry_value (symbol->section,
 				      symbol->value + reloc_entry->addend,
-				      NULL, NULL, FALSE);
+				      NULL, NULL, false);
       if (dest != (bfd_vma) -1)
 	reloc_entry->addend = dest - (symbol->value
 				      + symbol->section->output_section->vma
@@ -1443,7 +1487,6 @@ ppc64_elf_branch_reloc (bfd *abfd, arele
       elf_symbol_type *elfsym = (elf_symbol_type *) symbol;
 
       if (symbol->section->owner != abfd
-	  && symbol->section->owner != NULL
 	  && abiversion (symbol->section->owner) >= 2)
 	{
 	  unsigned int i;
@@ -1474,7 +1517,7 @@ ppc64_elf_brtaken_reloc (bfd *abfd, arel
   enum elf_ppc64_reloc_type r_type;
   bfd_size_type octets;
   /* Assume 'at' branch hints.  */
-  bfd_boolean is_isa_v2 = TRUE;
+  bool is_isa_v2 = true;
 
   /* If this is a relocatable link (output_bfd test tells us), just
      call the generic function.  Any adjustment will be done at final
@@ -1484,6 +1527,10 @@ ppc64_elf_brtaken_reloc (bfd *abfd, arel
 				  input_section, output_bfd, error_message);
 
   octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, octets))
+    return bfd_reloc_outofrange;
+
   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
   insn &= ~(0x01 << 21);
   r_type = reloc_entry->howto->type;
@@ -1629,11 +1676,15 @@ ppc64_elf_toc64_reloc (bfd *abfd, arelen
     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
 				  input_section, output_bfd, error_message);
 
+  octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, octets))
+    return bfd_reloc_outofrange;
+
   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
   if (TOCstart == 0)
     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
 
-  octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
   bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
   return bfd_reloc_ok;
 }
@@ -1645,14 +1696,20 @@ ppc64_elf_prefix_reloc (bfd *abfd, arele
 {
   uint64_t insn;
   bfd_vma targ;
+  bfd_size_type octets;
 
   if (output_bfd != NULL)
     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
 				  input_section, output_bfd, error_message);
 
-  insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
+  octets = reloc_entry->address * OCTETS_PER_BYTE (abfd, input_section);
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, octets))
+    return bfd_reloc_outofrange;
+
+  insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
   insn <<= 32;
-  insn |= bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address + 4);
+  insn |= bfd_get_32 (abfd, (bfd_byte *) data + octets + 4);
 
   targ = (symbol->section->output_section->vma
 	  + symbol->section->output_offset
@@ -1671,8 +1728,8 @@ ppc64_elf_prefix_reloc (bfd *abfd, arele
   targ >>= reloc_entry->howto->rightshift;
   insn &= ~reloc_entry->howto->dst_mask;
   insn |= ((targ << 16) | (targ & 0xffff)) & reloc_entry->howto->dst_mask;
-  bfd_put_32 (abfd, insn >> 32, (bfd_byte *) data + reloc_entry->address);
-  bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address + 4);
+  bfd_put_32 (abfd, insn >> 32, (bfd_byte *) data + octets);
+  bfd_put_32 (abfd, insn, (bfd_byte *) data + octets + 4);
   if (reloc_entry->howto->complain_on_overflow == complain_overflow_signed
       && (targ + (1ULL << (reloc_entry->howto->bitsize - 1))
 	  >= 1ULL << reloc_entry->howto->bitsize))
@@ -1693,12 +1750,8 @@ ppc64_elf_unhandled_reloc (bfd *abfd, ar
 				  input_section, output_bfd, error_message);
 
   if (error_message != NULL)
-    {
-      static char buf[60];
-      sprintf (buf, "generic linker can't handle %s",
-	       reloc_entry->howto->name);
-      *error_message = buf;
-    }
+    *error_message = bfd_asprintf (_("generic linker can't handle %s"),
+				   reloc_entry->howto->name);
   return bfd_reloc_dangerous;
 }
 
@@ -1766,15 +1819,6 @@ struct ppc64_elf_obj_tdata
      sections means we potentially need one of these for each input bfd.  */
   struct got_entry tlsld_got;
 
-  union
-  {
-    /* A copy of relocs before they are modified for --emit-relocs.  */
-    Elf_Internal_Rela *relocs;
-
-    /* Section contents.  */
-    bfd_byte *contents;
-  } opd;
-
   /* Nonzero if this bfd has small toc/got relocs, ie. that expect
      the reloc to be in the range -32768 to 32767.  */
   unsigned int has_small_toc_reloc : 1;
@@ -1794,13 +1838,9 @@ struct ppc64_elf_obj_tdata
 #define ppc64_tlsld_got(bfd) \
   (&ppc64_elf_tdata (bfd)->tlsld_got)
 
-#define is_ppc64_elf(bfd) \
-  (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
-   && elf_object_id (bfd) == PPC64_ELF_DATA)
-
 /* Override the generic function because we store some extras.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
@@ -1810,11 +1850,11 @@ ppc64_elf_mkobject (bfd *abfd)
 /* Fix bad default arch selected for a 64 bit input bfd when the
    default is 32 bit.  Also select arch based on apuinfo.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_object_p (bfd *abfd)
 {
   if (!abfd->arch_info->the_default)
-    return TRUE;
+    return true;
 
   if (abfd->arch_info->bits_per_word == 32)
     {
@@ -1832,13 +1872,13 @@ ppc64_elf_object_p (bfd *abfd)
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   size_t offset, size;
 
   if (note->descsz != 504)
-    return FALSE;
+    return false;
 
   /* pr_cursig */
   elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
@@ -1855,11 +1895,11 @@ ppc64_elf_grok_prstatus (bfd *abfd, Elf_
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->descsz != 136)
-    return FALSE;
+    return false;
 
   elf_tdata (abfd)->core->pid
     = bfd_get_32 (abfd, note->descdata + 24);
@@ -1868,7 +1908,7 @@ ppc64_elf_grok_psinfo (bfd *abfd, Elf_In
   elf_tdata (abfd)->core->command
     = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
 
-  return TRUE;
+  return true;
 }
 
 static char *
@@ -1945,7 +1985,8 @@ static const struct bfd_elf_special_sect
 enum _ppc64_sec_type {
   sec_normal = 0,
   sec_opd = 1,
-  sec_toc = 2
+  sec_toc = 2,
+  sec_stub = 3
 };
 
 struct _ppc64_elf_section_data
@@ -1964,6 +2005,15 @@ struct _ppc64_elf_section_data
 
       /* After editing .opd, adjust references to opd local syms.  */
       long *adjust;
+
+      union
+      {
+	/* A copy of relocs before they are modified for --emit-relocs.  */
+	Elf_Internal_Rela *relocs;
+
+	/* Section contents.  */
+	bfd_byte *contents;
+      } u;
     } opd;
 
     /* An array for toc sections, indexed by offset/8.  */
@@ -1975,6 +2025,9 @@ struct _ppc64_elf_section_data
       /* And the relocation addend.  */
       bfd_vma *add;
     } toc;
+
+    /* Stub debugging.  */
+    struct ppc_stub_hash_entry *last_ent;
   } u;
 
   enum _ppc64_sec_type sec_type:2;
@@ -1994,23 +2047,35 @@ struct _ppc64_elf_section_data
 #define ppc64_elf_section_data(sec) \
   ((struct _ppc64_elf_section_data *) elf_section_data (sec))
 
-static bfd_boolean
+static bool
 ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
       struct _ppc64_elf_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
   return _bfd_elf_new_section_hook (abfd, sec);
 }
 
+static bool
+ppc64_elf_section_flags (const Elf_Internal_Shdr *hdr)
+{
+  const char *name = hdr->bfd_section->name;
+
+  if (startswith (name, ".sbss")
+      || startswith (name, ".sdata"))
+    hdr->bfd_section->flags |= SEC_SMALL_DATA;
+
+  return true;
+}
+
 static struct _opd_sec_data *
 get_opd_info (asection * sec)
 {
@@ -2022,8 +2087,8 @@ get_opd_info (asection * sec)
 }
 
 /* Parameters for the qsort hook.  */
-static bfd_boolean synthetic_relocatable;
-static asection *synthetic_opd;
+static bool synthetic_relocatable;
+static const asection *synthetic_opd;
 
 /* qsort comparison function for ppc64_elf_get_synthetic_symtab.  */
 
@@ -2120,9 +2185,10 @@ compare_symbols (const void *ap, const v
 /* Search SYMS for a symbol of the given VALUE.  */
 
 static asymbol *
-sym_exists_at (asymbol **syms, long lo, long hi, unsigned int id, bfd_vma value)
+sym_exists_at (asymbol **syms, size_t lo, size_t hi, unsigned int id,
+	       bfd_vma value)
 {
-  long mid;
+  size_t mid;
 
   if (id == (unsigned) -1)
     {
@@ -2157,7 +2223,7 @@ sym_exists_at (asymbol **syms, long lo,
   return NULL;
 }
 
-static bfd_boolean
+static bool
 section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
 {
   bfd_vma vma = *(bfd_vma *) ptr;
@@ -2181,7 +2247,7 @@ ppc64_elf_get_synthetic_symtab (bfd *abf
   char *names;
   size_t symcount, codesecsym, codesecsymend, secsymend, opdsymend;
   asection *opd = NULL;
-  bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
+  bool relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
   asymbol **syms;
   int abi = abiversion (abfd);
 
@@ -2263,7 +2329,8 @@ ppc64_elf_get_synthetic_symtab (bfd *abf
 	 sym->section directly.  With separate debug info files, the
 	 symbols will be extracted from the debug file while abfd passed
 	 to this function is the real binary.  */
-      if (strcmp (syms[i]->section->name, ".opd") == 0)
+      if ((syms[i]->flags & BSF_SECTION_SYM) != 0
+	  && strcmp (syms[i]->section->name, ".opd") == 0)
 	++i;
       codesecsym = i;
 
@@ -2296,7 +2363,7 @@ ppc64_elf_get_synthetic_symtab (bfd *abf
 
   if (relocatable)
     {
-      bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
+      bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
       arelent *r;
       size_t size;
       size_t relcount;
@@ -2309,7 +2376,7 @@ ppc64_elf_get_synthetic_symtab (bfd *abf
       if (relcount == 0)
 	goto done;
 
-      if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
+      if (!(*slurp_relocs) (abfd, opd, static_syms, false))
 	{
 	  count = -1;
 	  goto done;
@@ -2395,7 +2462,7 @@ ppc64_elf_get_synthetic_symtab (bfd *abf
     }
   else
     {
-      bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
+      bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
       bfd_byte *contents = NULL;
       size_t size;
       size_t plt_count = 0;
@@ -2403,13 +2470,14 @@ ppc64_elf_get_synthetic_symtab (bfd *abf
       asection *dynamic, *glink = NULL, *relplt = NULL;
       arelent *p;
 
-      if (opd != NULL && !bfd_malloc_and_get_section (abfd, opd, &contents))
+      if (opd != NULL
+	  && ((opd->flags & SEC_HAS_CONTENTS) == 0
+	      || !bfd_malloc_and_get_section (abfd, opd, &contents)))
 	{
 	free_contents_and_exit_err:
 	  count = -1;
 	free_contents_and_exit:
-	  if (contents)
-	    free (contents);
+	  free (contents);
 	  goto done;
 	}
 
@@ -2439,15 +2507,16 @@ ppc64_elf_get_synthetic_symtab (bfd *abf
 	  size_t extdynsize;
 	  void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
 
-	  if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
+	  if ((dynamic->flags & SEC_HAS_CONTENTS) == 0
+	      || !bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
 	    goto free_contents_and_exit_err;
 
 	  extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
 	  swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
 
-	  extdyn = dynbuf;
-	  extdynend = extdyn + dynamic->size;
-	  for (; extdyn < extdynend; extdyn += extdynsize)
+	  for (extdyn = dynbuf, extdynend = dynbuf + dynamic->size;
+	       (size_t) (extdynend - extdyn) >= extdynsize;
+	       extdyn += extdynsize)
 	    {
 	      Elf_Internal_Dyn dyn;
 	      (*swap_dyn_in) (abfd, extdyn, &dyn);
@@ -2502,10 +2571,10 @@ ppc64_elf_get_synthetic_symtab (bfd *abf
 	  if (relplt != NULL)
 	    {
 	      slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
-	      if (!(*slurp_relocs) (abfd, relplt, dyn_syms, TRUE))
+	      if (!(*slurp_relocs) (abfd, relplt, dyn_syms, true))
 		goto free_contents_and_exit_err;
 
-	      plt_count = relplt->size / sizeof (Elf64_External_Rela);
+	      plt_count = NUM_SHDR_ENTRIES (&elf_section_data (relplt)->this_hdr);
 	      size += plt_count * sizeof (asymbol);
 
 	      p = relplt->relocation;
@@ -2787,20 +2856,20 @@ must_be_dyn_reloc (struct bfd_link_info
 }
 
 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
-   copying dynamic variables from a shared lib into an app's dynbss
+   copying dynamic variables from a shared lib into an app's .dynbss
    section, and instead use a dynamic relocation to point into the
-   shared lib.  With code that gcc generates, it's vital that this be
-   enabled;  In the PowerPC64 ABI, the address of a function is actually
-   the address of a function descriptor, which resides in the .opd
-   section.  gcc uses the descriptor directly rather than going via the
-   GOT as some other ABI's do, which means that initialized function
-   pointers must reference the descriptor.  Thus, a function pointer
-   initialized to the address of a function in a shared library will
-   either require a copy reloc, or a dynamic reloc.  Using a copy reloc
-   redefines the function descriptor symbol to point to the copy.  This
-   presents a problem as a plt entry for that function is also
-   initialized from the function descriptor symbol and the copy reloc
-   may not be initialized first.  */
+   shared lib.  With code that gcc generates it is vital that this be
+   enabled;  In the PowerPC64 ELFv1 ABI the address of a function is
+   actually the address of a function descriptor which resides in the
+   .opd section.  gcc uses the descriptor directly rather than going
+   via the GOT as some other ABIs do, which means that initialized
+   function pointers reference the descriptor.  Thus, a function
+   pointer initialized to the address of a function in a shared
+   library will either require a .dynbss copy and a copy reloc, or a
+   dynamic reloc.  Using a .dynbss copy redefines the function
+   descriptor symbol to point to the copy.  This presents a problem as
+   a PLT entry for that function is also initialized from the function
+   descriptor symbol and the copy may not be initialized first.  */
 #define ELIMINATE_COPY_RELOCS 1
 
 /* Section name for stubs is the associated section name plus this
@@ -2816,8 +2885,8 @@ must_be_dyn_reloc (struct bfd_link_info
    ppc_stub_plt_branch:
    Similar to the above, but a 24 bit branch in the stub section won't
    reach its destination.
-   .	addis	%r11,%r2,xxx@toc@ha
-   .	ld	%r12,xxx@toc@l(%r11)
+   .	addis	%r12,%r2,xxx@toc@ha
+   .	ld	%r12,xxx@toc@l(%r12)
    .	mtctr	%r12
    .	bctr
 
@@ -2825,7 +2894,7 @@ must_be_dyn_reloc (struct bfd_link_info
    Used to call a function in a shared library.  If it so happens that
    the plt entry referenced crosses a 64k boundary, then an extra
    "addi %r11,%r11,xxx@toc@l" will be inserted before the "mtctr".
-   ppc_stub_plt_call_r2save starts with "std %r2,40(%r1)".
+   An r2save variant starts with "std %r2,40(%r1)".
    .	addis	%r11,%r2,xxx@toc@ha
    .	ld	%r12,xxx+0@toc@l(%r11)
    .	mtctr	%r12
@@ -2843,8 +2912,8 @@ must_be_dyn_reloc (struct bfd_link_info
 
    A ppc_stub_plt_branch with an r2 offset looks like:
    .	std	%r2,40(%r1)
-   .	addis	%r11,%r2,xxx@toc@ha
-   .	ld	%r12,xxx@toc@l(%r11)
+   .	addis	%r12,%r2,xxx@toc@ha
+   .	ld	%r12,xxx@toc@l(%r12)
    .	addis	%r2,%r2,off@ha
    .	addi	%r2,%r2,off@l
    .	mtctr	%r12
@@ -2854,13 +2923,8 @@ must_be_dyn_reloc (struct bfd_link_info
    variants exist too, simpler for plt calls since a new toc pointer
    and static chain are not loaded by the stub.  In addition, ELFv2
    has some more complex stubs to handle calls marked with NOTOC
-   relocs from functions where r2 is not a valid toc pointer.  These
-   come in two flavours, the ones shown below, and _both variants that
-   start with "std %r2,24(%r1)" to save r2 in the unlikely event that
-   one call is from a function where r2 is used as the toc pointer but
-   needs a toc adjusting stub for small-model multi-toc, and another
-   call is from a function where r2 is not valid.
-   ppc_stub_long_branch_notoc:
+   relocs from functions where r2 is not a valid toc pointer.
+   ppc_stub_long_branch_p9notoc:
    .	mflr	%r12
    .	bcl	20,31,1f
    .  1:
@@ -2870,7 +2934,7 @@ must_be_dyn_reloc (struct bfd_link_info
    .	addi	%r12,%r12,dest-1b@l
    .	b	dest
 
-   ppc_stub_plt_branch_notoc:
+   ppc_stub_plt_branch_p9notoc:
    .	mflr	%r12
    .	bcl	20,31,1f
    .  1:
@@ -2885,7 +2949,7 @@ must_be_dyn_reloc (struct bfd_link_info
    .	mtctr	%r12
    .	bctr
 
-   ppc_stub_plt_call_notoc:
+   ppc_stub_plt_call_p9notoc:
    .	mflr	%r12
    .	bcl	20,31,1f
    .  1:
@@ -2900,7 +2964,7 @@ must_be_dyn_reloc (struct bfd_link_info
    .	mtctr	%r12
    .	bctr
 
-   There are also ELFv1 powerxx variants of these stubs.
+   There are also ELFv1 power10 variants of these stubs.
    ppc_stub_long_branch_notoc:
    .	pla	%r12,dest@pcrel
    .	b	dest
@@ -2923,15 +2987,13 @@ must_be_dyn_reloc (struct bfd_link_info
 
    In cases where the high instructions would add zero, they are
    omitted and following instructions modified in some cases.
-   For example, a powerxx ppc_stub_plt_call_notoc might simplify down
+   For example, a power10 ppc_stub_plt_call_notoc might simplify down
    to
    .	pld	%r12,xxx@pcrel
    .	mtctr	%r12
    .	bctr
 
-   For a given stub group (a set of sections all using the same toc
-   pointer value) there will be just one stub type used for any
-   particular function symbol.  For example, if printf is called from
+   Stub variants may be merged.  For example, if printf is called from
    code with the tocsave optimization (ie. r2 saved in function
    prologue) and therefore calls use a ppc_stub_plt_call linkage stub,
    and from other code without the tocsave optimization requiring a
@@ -2942,33 +3004,36 @@ must_be_dyn_reloc (struct bfd_link_info
    relocations.  These require a ppc_stub_plt_call_notoc linkage stub
    to call an external function like printf.  If other calls to printf
    require a ppc_stub_plt_call linkage stub then a single
-   ppc_stub_plt_call_notoc linkage stub will be used for both types of
-   call.  If other calls to printf require a ppc_stub_plt_call_r2save
-   linkage stub then a single ppc_stub_plt_call_both linkage stub will
-   be created and calls not requiring r2 to be saved will enter the
-   stub after the r2 save instruction.  There is an analogous
-   hierarchy of long branch and plt branch stubs for local call
-   linkage.  */
+   ppc_stub_plt_call_notoc linkage stub may be used for both types of
+   call.  */
 
-enum ppc_stub_type
+enum ppc_stub_main_type
 {
   ppc_stub_none,
   ppc_stub_long_branch,
-  ppc_stub_long_branch_r2off,
-  ppc_stub_long_branch_notoc,
-  ppc_stub_long_branch_both, /* r2off and notoc variants both needed.  */
   ppc_stub_plt_branch,
-  ppc_stub_plt_branch_r2off,
-  ppc_stub_plt_branch_notoc,
-  ppc_stub_plt_branch_both,
   ppc_stub_plt_call,
-  ppc_stub_plt_call_r2save,
-  ppc_stub_plt_call_notoc,
-  ppc_stub_plt_call_both,
   ppc_stub_global_entry,
   ppc_stub_save_res
 };
 
+/* ppc_stub_long_branch, ppc_stub_plt_branch and ppc_stub_plt_call have
+   these variations.  */
+
+enum ppc_stub_sub_type
+{
+  ppc_stub_toc,
+  ppc_stub_notoc,
+  ppc_stub_p9notoc
+};
+
+struct ppc_stub_type
+{
+  ENUM_BITFIELD (ppc_stub_main_type) main : 3;
+  ENUM_BITFIELD (ppc_stub_sub_type) sub : 2;
+  unsigned int r2save : 1;
+};
+
 /* Information on stub grouping.  */
 struct map_stub
 {
@@ -2997,7 +3062,7 @@ struct ppc_stub_hash_entry
   /* Base hash table entry structure.  */
   struct bfd_hash_entry root;
 
-  enum ppc_stub_type stub_type;
+  struct ppc_stub_type type;
 
   /* Group information.  */
   struct map_stub *group;
@@ -3019,6 +3084,9 @@ struct ppc_stub_hash_entry
 
   /* Symbol st_other.  */
   unsigned char other;
+
+  /* Debug: Track hash table traversal.  */
+  unsigned int id;
 };
 
 struct ppc_branch_hash_entry
@@ -3033,7 +3101,7 @@ struct ppc_branch_hash_entry
   unsigned int iter;
 };
 
-/* Used to track dynamic relocations for local symbols.  */
+/* Used to track dynamic relocations.  */
 struct ppc_dyn_relocs
 {
   struct ppc_dyn_relocs *next;
@@ -3042,7 +3110,27 @@ struct ppc_dyn_relocs
   asection *sec;
 
   /* Total number of relocs copied for the input section.  */
-  unsigned int count : 31;
+  unsigned int count;
+
+  /* Number of pc-relative relocs copied for the input section.  */
+  unsigned int pc_count;
+
+  /* Number of relocs that might become R_PPC64_RELATIVE.  */
+  unsigned int rel_count;
+};
+
+struct ppc_local_dyn_relocs
+{
+  struct ppc_local_dyn_relocs *next;
+
+  /* The input section of the reloc.  */
+  asection *sec;
+
+  /* Total number of relocs copied for the input section.  */
+  unsigned int count;
+
+  /* Number of relocs that might become R_PPC64_RELATIVE.  */
+  unsigned int rel_count : 31;
 
   /* Whether this entry is for STT_GNU_IFUNC symbols.  */
   unsigned int ifunc : 1;
@@ -3062,9 +3150,6 @@ struct ppc_link_hash_entry
     struct ppc_link_hash_entry *next_dot_sym;
   } u;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   /* Link between function code and descriptor symbols.  */
   struct ppc_link_hash_entry *oh;
 
@@ -3111,6 +3196,18 @@ struct ppc_link_hash_entry
 #define NON_GOT        256	/* local symbol plt, not stored.  */
 };
 
+static inline struct ppc_link_hash_entry *
+ppc_elf_hash_entry (struct elf_link_hash_entry *ent)
+{
+  return (struct ppc_link_hash_entry *) ent;
+}
+
+static inline struct elf_link_hash_entry *
+elf_hash_entry (struct ppc_link_hash_entry *ent)
+{
+  return (struct elf_link_hash_entry *) ent;
+}
+
 /* ppc64 ELF linker hash table.  */
 
 struct ppc_link_hash_table
@@ -3173,12 +3270,24 @@ struct ppc_link_hash_table
   /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
   struct ppc_link_hash_entry *tls_get_addr;
   struct ppc_link_hash_entry *tls_get_addr_fd;
+  struct ppc_link_hash_entry *tga_desc;
+  struct ppc_link_hash_entry *tga_desc_fd;
+  struct map_stub *tga_group;
 
   /* The size of reliplt used by got entry relocs.  */
   bfd_size_type got_reli_size;
 
+  /* DT_RELR array of section/r_offset.  */
+  size_t relr_alloc;
+  size_t relr_count;
+  struct
+  {
+    asection *sec;
+    bfd_vma off;
+  } *relr;
+
   /* Statistics.  */
-  unsigned long stub_count[ppc_stub_global_entry];
+  unsigned long stub_count[ppc_stub_save_res];
 
   /* Number of stubs against global syms.  */
   unsigned long stub_globals;
@@ -3198,31 +3307,36 @@ struct ppc_link_hash_table
   /* Set if inline plt calls should be converted to direct calls.  */
   unsigned int can_convert_all_inline_plt:1;
 
+  /* Set if a stub_offset changed.  */
+  unsigned int stub_changed:1;
+
   /* Set on error.  */
   unsigned int stub_error:1;
 
   /* Whether func_desc_adjust needs to be run over symbols.  */
   unsigned int need_func_desc_adj:1;
 
-  /* Whether there exist local gnu indirect function resolvers,
-     referenced by dynamic relocations.  */
-  unsigned int local_ifunc_resolver:1;
-  unsigned int maybe_local_ifunc_resolver:1;
-
   /* Whether plt calls for ELFv2 localentry:0 funcs have been optimized.  */
   unsigned int has_plt_localentry0:1;
 
   /* Whether calls are made via the PLT from NOTOC functions.  */
   unsigned int notoc_plt:1;
 
-  /* Whether to use powerxx instructions in linkage stubs.  */
-  unsigned int powerxx_stubs:1;
+  /* Whether any code linked seems to be Power10.  */
+  unsigned int has_power10_relocs:1;
+
+  /* Incremented once for each stub sized.  */
+  unsigned int stub_id;
 
   /* Incremented every time we size stubs.  */
   unsigned int stub_iteration;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
+/* After 20 iterations of stub sizing we no longer allow stubs to
+   shrink.  This is to break out of a pathological case where adding
+   stubs or increasing their size on one iteration decreases section
+   gaps (perhaps due to alignment), which then results in smaller
+   stubs on the next iteration.  */
+#define STUB_SHRINK_ITER 20
 };
 
 /* Rename some of the generic section flags to better document how they
@@ -3249,8 +3363,9 @@ struct ppc_link_hash_table
 /* Get the ppc64 ELF linker hash table from a link_info structure.  */
 
 #define ppc_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == PPC64_ELF_DATA)	\
+   ? (struct ppc_link_hash_table *) (p)->hash : NULL)
 
 #define ppc_stub_hash_lookup(table, string, create, copy) \
   ((struct ppc_stub_hash_entry *) \
@@ -3284,14 +3399,18 @@ stub_hash_newfunc (struct bfd_hash_entry
 
       /* Initialize the local fields.  */
       eh = (struct ppc_stub_hash_entry *) entry;
-      eh->stub_type = ppc_stub_none;
+      eh->type.main = ppc_stub_none;
+      eh->type.sub = ppc_stub_toc;
+      eh->type.r2save = 0;
       eh->group = NULL;
       eh->stub_offset = 0;
       eh->target_value = 0;
       eh->target_section = NULL;
       eh->h = NULL;
       eh->plt_ent = NULL;
+      eh->symtype = 0;
       eh->other = 0;
+      eh->id = 0;
     }
 
   return entry;
@@ -3425,7 +3544,7 @@ static struct bfd_link_hash_table *
 ppc64_elf_link_hash_table_create (bfd *abfd)
 {
   struct ppc_link_hash_table *htab;
-  bfd_size_type amt = sizeof (struct ppc_link_hash_table);
+  size_t amt = sizeof (struct ppc_link_hash_table);
 
   htab = bfd_zmalloc (amt);
   if (htab == NULL)
@@ -3485,7 +3604,7 @@ ppc64_elf_link_hash_table_create (bfd *a
 
 /* Create sections for linker generated code.  */
 
-static bfd_boolean
+static bool
 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab;
@@ -3502,18 +3621,18 @@ create_linkage_sections (bfd *dynobj, st
 						       flags);
       if (htab->sfpr == NULL
 	  || !bfd_set_section_alignment (htab->sfpr, 2))
-	return FALSE;
+	return false;
     }
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   /* Create .glink for lazy dynamic linking support.  */
   htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
 						    flags);
   if (htab->glink == NULL
       || !bfd_set_section_alignment (htab->glink, 3))
-    return FALSE;
+    return false;
 
   /* The part of .glink used by global entry stubs, separate so that
      it can be aligned appropriately without affecting htab->glink.  */
@@ -3521,7 +3640,7 @@ create_linkage_sections (bfd *dynobj, st
 							   flags);
   if (htab->global_entry == NULL
       || !bfd_set_section_alignment (htab->global_entry, 2))
-    return FALSE;
+    return false;
 
   if (!info->no_ld_generated_unwind_info)
     {
@@ -3532,14 +3651,14 @@ create_linkage_sections (bfd *dynobj, st
 								 flags);
       if (htab->glink_eh_frame == NULL
 	  || !bfd_set_section_alignment (htab->glink_eh_frame, 2))
-	return FALSE;
+	return false;
     }
 
   flags = SEC_ALLOC | SEC_LINKER_CREATED;
   htab->elf.iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
   if (htab->elf.iplt == NULL
       || !bfd_set_section_alignment (htab->elf.iplt, 3))
-    return FALSE;
+    return false;
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
@@ -3547,7 +3666,7 @@ create_linkage_sections (bfd *dynobj, st
     = bfd_make_section_anyway_with_flags (dynobj, ".rela.iplt", flags);
   if (htab->elf.irelplt == NULL
       || !bfd_set_section_alignment (htab->elf.irelplt, 3))
-    return FALSE;
+    return false;
 
   /* Create branch lookup table for plt_branch stubs.  */
   flags = (SEC_ALLOC | SEC_LOAD
@@ -3556,7 +3675,7 @@ create_linkage_sections (bfd *dynobj, st
 						   flags);
   if (htab->brlt == NULL
       || !bfd_set_section_alignment (htab->brlt, 3))
-    return FALSE;
+    return false;
 
   /* Local plt entries, put in .branch_lt but a separate section for
      convenience.  */
@@ -3564,10 +3683,10 @@ create_linkage_sections (bfd *dynobj, st
 						       flags);
   if (htab->pltlocal == NULL
       || !bfd_set_section_alignment (htab->pltlocal, 3))
-    return FALSE;
+    return false;
 
   if (!bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
@@ -3575,20 +3694,20 @@ create_linkage_sections (bfd *dynobj, st
     = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
   if (htab->relbrlt == NULL
       || !bfd_set_section_alignment (htab->relbrlt, 3))
-    return FALSE;
+    return false;
 
   htab->relpltlocal
     = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags);
   if (htab->relpltlocal == NULL
       || !bfd_set_section_alignment (htab->relpltlocal, 3))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
 
-bfd_boolean
+bool
 ppc64_elf_init_stub_bfd (struct bfd_link_info *info,
 			 struct ppc64_elf_params *params)
 {
@@ -3652,6 +3771,46 @@ ppc_stub_name (const asection *input_sec
   return stub_name;
 }
 
+/* If mixing power10 with non-power10 code and --power10-stubs is not
+   specified (or is auto) then there may be multiple stub types for any
+   given symbol.  Up to three classes of stubs are stored in separate
+   stub_hash_table entries having the same key string.  The entries
+   will always be adjacent on entry->root.next chain, even if hash
+   table resizing occurs.  This function selects the correct entry to
+   use.  */
+
+static struct ppc_stub_hash_entry *
+select_alt_stub (struct ppc_stub_hash_entry *entry,
+		 enum elf_ppc64_reloc_type r_type)
+{
+  enum ppc_stub_sub_type subt;
+
+  switch (r_type)
+    {
+    case R_PPC64_REL24_NOTOC:
+      subt = ppc_stub_notoc;
+      break;
+    case R_PPC64_REL24_P9NOTOC:
+      subt = ppc_stub_p9notoc;
+      break;
+    default:
+      subt = ppc_stub_toc;
+      break;
+    }
+
+  while (entry != NULL && entry->type.sub != subt)
+    {
+      const char *stub_name = entry->root.string;
+
+      entry = (struct ppc_stub_hash_entry *) entry->root.next;
+      if (entry != NULL
+	  && entry->root.string != stub_name)
+	entry = NULL;
+    }
+
+  return entry;
+}
+
 /* Look up an entry in the stub hash.  Stub entries are cached because
    creating the stub name takes a bit of time.  */
 
@@ -3689,13 +3848,16 @@ ppc_get_stub_entry (const asection *inpu
 	return NULL;
 
       stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
-					 stub_name, FALSE, FALSE);
+					 stub_name, false, false);
       if (h != NULL)
 	h->u.stub_cache = stub_entry;
 
       free (stub_name);
     }
 
+  if (stub_entry != NULL && htab->params->power10_stubs == -1)
+    stub_entry = select_alt_stub (stub_entry, ELF64_R_TYPE (rel->r_info));
+
   return stub_entry;
 }
 
@@ -3738,7 +3900,7 @@ ppc_add_stub (const char *stub_name,
 
   /* Enter this entry into the linker stub hash table.  */
   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
-				     TRUE, FALSE);
+				     true, false);
   if (stub_entry == NULL)
     {
       /* xgettext:c-format */
@@ -3752,10 +3914,79 @@ ppc_add_stub (const char *stub_name,
   return stub_entry;
 }
 
+/* A stub has already been created, but it may not be the required
+   type.  We shouldn't be transitioning from plt_call to long_branch
+   stubs or vice versa, but we might be upgrading from plt_call to
+   plt_call with r2save for example.  */
+
+static bool
+ppc_merge_stub (struct ppc_link_hash_table *htab,
+		struct ppc_stub_hash_entry *stub_entry,
+		struct ppc_stub_type stub_type,
+		enum elf_ppc64_reloc_type r_type)
+{
+  struct ppc_stub_type old_type = stub_entry->type;
+
+  if (old_type.main == ppc_stub_save_res)
+    return true;
+
+  if (htab->params->power10_stubs == -1)
+    {
+      /* For --power10-stubs=auto, don't merge _notoc and other
+	 varieties of stubs.  */
+      struct ppc_stub_hash_entry *alt_stub;
+
+      alt_stub = select_alt_stub (stub_entry, r_type);
+      if (alt_stub == NULL)
+	{
+	  alt_stub = ((struct ppc_stub_hash_entry *)
+		      stub_hash_newfunc (NULL,
+					 &htab->stub_hash_table,
+					 stub_entry->root.string));
+	  if (alt_stub == NULL)
+	    return false;
+
+	  *alt_stub = *stub_entry;
+	  stub_entry->root.next = &alt_stub->root;
+
+	  /* Sort notoc stubs first, then toc stubs, then p9notoc.
+	     Not that it matters, this just puts smaller stubs first.  */
+	  if (stub_type.sub == ppc_stub_notoc)
+	    alt_stub = stub_entry;
+	  else if (stub_type.sub == ppc_stub_p9notoc
+		   && alt_stub->root.next
+		   && alt_stub->root.next->string == alt_stub->root.string)
+	    {
+	      struct ppc_stub_hash_entry *next
+		= (struct ppc_stub_hash_entry *) alt_stub->root.next;
+	      alt_stub->type = next->type;
+	      alt_stub = next;
+	    }
+	  alt_stub->type = stub_type;
+	  return true;
+	}
+      stub_entry = alt_stub;
+    }
+
+  old_type = stub_entry->type;
+  if (old_type.main == ppc_stub_plt_branch)
+    old_type.main = ppc_stub_long_branch;
+
+  if (old_type.main != stub_type.main
+      || (old_type.sub != stub_type.sub
+	  && old_type.sub != ppc_stub_toc
+	  && stub_type.sub != ppc_stub_toc))
+    abort ();
+
+  stub_entry->type.sub |= stub_type.sub;
+  stub_entry->type.r2save |= stub_type.r2save;
+  return true;
+}
+
 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
    not already done.  */
 
-static bfd_boolean
+static bool
 create_got_section (bfd *abfd, struct bfd_link_info *info)
 {
   asection *got, *relgot;
@@ -3763,13 +3994,13 @@ create_got_section (bfd *abfd, struct bf
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
 
   if (!is_ppc64_elf (abfd))
-    return FALSE;
+    return false;
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (!htab->elf.sgot
       && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
-    return FALSE;
+    return false;
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
 	   | SEC_LINKER_CREATED);
@@ -3777,17 +4008,17 @@ create_got_section (bfd *abfd, struct bf
   got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (!got
       || !bfd_set_section_alignment (got, 3))
-    return FALSE;
+    return false;
 
   relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
 					       flags | SEC_READONLY);
   if (!relgot
       || !bfd_set_section_alignment (relgot, 3))
-    return FALSE;
+    return false;
 
   ppc64_elf_tdata (abfd)->got = got;
   ppc64_elf_tdata (abfd)->relgot = relgot;
-  return TRUE;
+  return true;
 }
 
 /* Follow indirect and warning symbol links.  */
@@ -3810,7 +4041,7 @@ elf_follow_link (struct elf_link_hash_en
 static inline struct ppc_link_hash_entry *
 ppc_follow_link (struct ppc_link_hash_entry *h)
 {
-  return (struct ppc_link_hash_entry *) follow_link (&h->elf.root);
+  return ppc_elf_hash_entry (elf_follow_link (&h->elf));
 }
 
 /* Merge PLT info on FROM with that on TO.  */
@@ -3857,8 +4088,8 @@ ppc64_elf_copy_indirect_symbol (struct b
 {
   struct ppc_link_hash_entry *edir, *eind;
 
-  edir = (struct ppc_link_hash_entry *) dir;
-  eind = (struct ppc_link_hash_entry *) ind;
+  edir = ppc_elf_hash_entry (dir);
+  eind = ppc_elf_hash_entry (ind);
 
   edir->is_func |= eind->is_func;
   edir->is_func_descriptor |= eind->is_func_descriptor;
@@ -3884,35 +4115,40 @@ ppc64_elf_copy_indirect_symbol (struct b
     return;
 
   /* Copy over any dynamic relocs we may have on the indirect sym.  */
-  if (eind->dyn_relocs != NULL)
+  if (ind->dyn_relocs != NULL)
     {
-      if (edir->dyn_relocs != NULL)
+      if (dir->dyn_relocs != NULL)
 	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
+	  struct ppc_dyn_relocs **pp;
+	  struct ppc_dyn_relocs *p;
 
 	  /* Add reloc counts against the indirect sym to the direct sym
 	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
+	  for (pp = (struct ppc_dyn_relocs **) &ind->dyn_relocs;
+	       (p = *pp) != NULL;
+	       )
+	    {
+	      struct ppc_dyn_relocs *q;
+
+	      for (q = (struct ppc_dyn_relocs *) dir->dyn_relocs;
+		   q != NULL;
+		   q = q->next)
 		if (q->sec == p->sec)
 		  {
-		    q->pc_count += p->pc_count;
 		    q->count += p->count;
+		    q->pc_count += p->pc_count;
+		    q->rel_count += p->rel_count;
 		    *pp = p->next;
 		    break;
 		  }
 	      if (q == NULL)
 		pp = &p->next;
 	    }
-	  *pp = edir->dyn_relocs;
+	  *pp = (struct ppc_dyn_relocs *) dir->dyn_relocs;
 	}
 
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
+      dir->dyn_relocs = ind->dyn_relocs;
+      ind->dyn_relocs = NULL;
     }
 
   /* Copy over got entries that we may have already seen to the
@@ -3974,8 +4210,8 @@ lookup_fdh (struct ppc_link_hash_entry *
     {
       const char *fd_name = fh->elf.root.root.string + 1;
 
-      fdh = (struct ppc_link_hash_entry *)
-	elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
+      fdh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, fd_name,
+						      false, false, false));
       if (fdh == NULL)
 	return fdh;
 
@@ -4007,7 +4243,7 @@ make_fdh (struct bfd_link_info *info,
   if (!_bfd_generic_link_add_one_symbol (info, abfd,
 					 fh->elf.root.root.string + 1,
 					 flags, bfd_und_section_ptr, 0,
-					 NULL, FALSE, FALSE, &bh))
+					 NULL, false, false, &bh))
     return NULL;
 
   fdh = (struct ppc_link_hash_entry *) bh;
@@ -4023,7 +4259,7 @@ make_fdh (struct bfd_link_info *info,
 /* Fix function descriptor symbols defined in .opd sections to be
    function type.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_add_symbol_hook (bfd *ibfd,
 			   struct bfd_link_info *info,
 			   Elf_Internal_Sym *isym,
@@ -4046,7 +4282,7 @@ ppc64_elf_add_symbol_hook (bfd *ibfd,
       if (!bfd_link_relocatable (info)
 	  && (*sec)->reloc_count != 0
 	  && opd_entry_value (*sec, *value, &code_sec, NULL,
-			      FALSE) != (bfd_vma) -1
+			      false) != (bfd_vma) -1
 	  && discarded_section (code_sec))
 	{
 	  *sec = bfd_und_section_ptr;
@@ -4071,42 +4307,42 @@ ppc64_elf_add_symbol_hook (bfd *ibfd,
 	  _bfd_error_handler (_("symbol '%s' has invalid st_other"
 				" for ABI version 1"), *name);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Merge non-visibility st_other attributes: local entry point.  */
 
 static void
 ppc64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
-				  const Elf_Internal_Sym *isym,
-				  bfd_boolean definition,
-				  bfd_boolean dynamic)
+				  unsigned int st_other,
+				  bool definition,
+				  bool dynamic)
 {
   if (definition && (!dynamic || !h->def_regular))
-    h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
+    h->other = ((st_other & ~ELF_ST_VISIBILITY (-1))
 		| ELF_ST_VISIBILITY (h->other));
 }
 
 /* Hook called on merging a symbol.  We use this to clear "fake" since
    we now have a real symbol.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_merge_symbol (struct elf_link_hash_entry *h,
 			const Elf_Internal_Sym *isym,
 			asection **psec ATTRIBUTE_UNUSED,
-			bfd_boolean newdef ATTRIBUTE_UNUSED,
-			bfd_boolean olddef ATTRIBUTE_UNUSED,
+			bool newdef ATTRIBUTE_UNUSED,
+			bool olddef ATTRIBUTE_UNUSED,
 			bfd *oldbfd ATTRIBUTE_UNUSED,
 			const asection *oldsec ATTRIBUTE_UNUSED)
 {
-  ((struct ppc_link_hash_entry *) h)->fake = 0;
+  ppc_elf_hash_entry (h)->fake = 0;
   if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
-    ((struct ppc_link_hash_entry *) h)->non_zero_localentry = 1;
-  return TRUE;
+    ppc_elf_hash_entry (h)->non_zero_localentry = 1;
+  return true;
 }
 
 /* This function makes an old ABI object reference to ".bar" cause the
@@ -4114,17 +4350,18 @@ ppc64_elf_merge_symbol (struct elf_link_
    NAME is a symbol defined in an archive.  Return a symbol in the hash
    table that might be satisfied by the archive symbols.  */
 
-static struct elf_link_hash_entry *
+static struct bfd_link_hash_entry *
 ppc64_elf_archive_symbol_lookup (bfd *abfd,
 				 struct bfd_link_info *info,
 				 const char *name)
 {
-  struct elf_link_hash_entry *h;
+  struct bfd_link_hash_entry *h;
   char *dot_name;
   size_t len;
 
   h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
   if (h != NULL
+      && ppc_hash_table (info) != NULL
       /* Don't return this sym if it is a fake function descriptor
 	 created by add_symbol_adjust.  */
       && !((struct ppc_link_hash_entry *) h)->fake)
@@ -4136,11 +4373,16 @@ ppc64_elf_archive_symbol_lookup (bfd *ab
   len = strlen (name);
   dot_name = bfd_alloc (abfd, len + 2);
   if (dot_name == NULL)
-    return (struct elf_link_hash_entry *) -1;
+    return (struct bfd_link_hash_entry *) -1;
   dot_name[0] = '.';
   memcpy (dot_name + 1, name, len + 1);
   h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
   bfd_release (abfd, dot_name);
+  if (h != NULL)
+    return h;
+
+  if (strcmp (name, "__tls_get_addr_opt") == 0)
+    h = _bfd_elf_archive_symbol_lookup (abfd, info, "__tls_get_addr_desc");
   return h;
 }
 
@@ -4153,7 +4395,7 @@ ppc64_elf_archive_symbol_lookup (bfd *ab
    most restrictive visibility of the function descriptor and the
    function entry symbol is used.  */
 
-static bfd_boolean
+static bool
 add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab;
@@ -4163,14 +4405,14 @@ add_symbol_adjust (struct ppc_link_hash_
     eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
 
   if (eh->elf.root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (eh->elf.root.root.string[0] != '.')
     abort ();
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   fdh = lookup_fdh (eh, htab);
   if (fdh == NULL
@@ -4184,7 +4426,7 @@ add_symbol_adjust (struct ppc_link_hash_
 	 elsewhere.  */
       fdh = make_fdh (info, eh);
       if (fdh == NULL)
-	return FALSE;
+	return false;
     }
 
   if (fdh != NULL)
@@ -4216,17 +4458,17 @@ add_symbol_adjust (struct ppc_link_hash_
 	      || eh->elf.def_regular))
 	{
 	  if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set up opd section info and abiversion for IBFD, and process list
    of dot-symbols we made in link_hash_newfunc.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab;
@@ -4235,8 +4477,10 @@ ppc64_elf_before_check_relocs (bfd *ibfd
 
   if (opd != NULL && opd->size != 0)
     {
-      BFD_ASSERT (ppc64_elf_section_data (opd)->sec_type == sec_normal);
-      ppc64_elf_section_data (opd)->sec_type = sec_opd;
+      if (ppc64_elf_section_data (opd)->sec_type == sec_normal)
+	ppc64_elf_section_data (opd)->sec_type = sec_opd;
+      else if (ppc64_elf_section_data (opd)->sec_type != sec_opd)
+	BFD_FAIL ();
 
       if (abiversion (ibfd) == 0)
 	set_abiversion (ibfd, 1);
@@ -4246,7 +4490,7 @@ ppc64_elf_before_check_relocs (bfd *ibfd
 	  _bfd_error_handler (_("%pB .opd not allowed in ABI version %d"),
 			      ibfd, abiversion (ibfd));
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
     }
 
@@ -4254,7 +4498,7 @@ ppc64_elf_before_check_relocs (bfd *ibfd
     {
       /* For input files without an explicit abiversion in e_flags
 	 we should have flagged any with symbol st_other bits set
-	 as ELFv1 and above flagged those with .opd as ELFv2.
+	 as ELFv2 and above flagged those with .opd as ELFv1.
 	 Set the output abiversion if not yet set, and for any input
 	 still ambiguous, take its abiversion from the output.
 	 Differences in ABI are reported later.  */
@@ -4266,7 +4510,7 @@ ppc64_elf_before_check_relocs (bfd *ibfd
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return TRUE;
+    return true;
 
   if (opd != NULL && opd->size != 0
       && (ibfd->flags & DYNAMIC) == 0
@@ -4290,12 +4534,12 @@ ppc64_elf_before_check_relocs (bfd *ibfd
       amt = OPD_NDX (opd->size) * sizeof (*opd_sym_map);
       opd_sym_map = bfd_zalloc (ibfd, amt);
       if (opd_sym_map == NULL)
-	return FALSE;
+	return false;
       ppc64_elf_section_data (opd)->u.opd.func_sec = opd_sym_map;
       relocs = _bfd_elf_link_read_relocs (ibfd, opd, NULL, NULL,
 					  info->keep_memory);
       if (relocs == NULL)
-	return FALSE;
+	return false;
       symtab_hdr = &elf_symtab_hdr (ibfd);
       rel_end = relocs + opd->reloc_count - 1;
       for (rel = relocs; rel < rel_end; rel++)
@@ -4310,12 +4554,13 @@ ppc64_elf_before_check_relocs (bfd *ibfd
 	      Elf_Internal_Sym *isym;
 	      asection *s;
 
-	      isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, r_symndx);
+	      isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd,
+					    r_symndx);
 	      if (isym == NULL)
 		{
 		  if (elf_section_data (opd)->relocs != relocs)
 		    free (relocs);
-		  return FALSE;
+		  return false;
 		}
 
 	      s = bfd_section_from_elf_index (ibfd, isym->st_shndx);
@@ -4340,17 +4585,17 @@ ppc64_elf_before_check_relocs (bfd *ibfd
 	{
 	  htab->need_func_desc_adj = 1;
 	  if (!add_symbol_adjust (eh, info))
-	    return FALSE;
+	    return false;
 	}
       p = &eh->u.next_dot_sym;
     }
-  return TRUE;
+  return true;
 }
 
 /* Undo hash table changes when an --as-needed input file is determined
    not to be needed.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_notice_as_needed (bfd *ibfd,
 			    struct bfd_link_info *info,
 			    enum notice_asneeded_action act)
@@ -4360,7 +4605,7 @@ ppc64_elf_notice_as_needed (bfd *ibfd,
       struct ppc_link_hash_table *htab = ppc_hash_table (info);
 
       if (htab == NULL)
-	return FALSE;
+	return false;
 
       htab->dot_syms = NULL;
     }
@@ -4416,15 +4661,15 @@ update_local_sym_info (bfd *abfd, Elf_In
 	  break;
       if (ent == NULL)
 	{
-	  bfd_size_type amt = sizeof (*ent);
+	  size_t amt = sizeof (*ent);
 	  ent = bfd_alloc (abfd, amt);
 	  if (ent == NULL)
-	    return FALSE;
+	    return false;
 	  ent->next = local_got_ents[r_symndx];
 	  ent->addend = r_addend;
 	  ent->owner = abfd;
 	  ent->tls_type = tls_type;
-	  ent->is_indirect = FALSE;
+	  ent->is_indirect = false;
 	  ent->got.refcount = 0;
 	  local_got_ents[r_symndx] = ent;
 	}
@@ -4438,7 +4683,7 @@ update_local_sym_info (bfd *abfd, Elf_In
   return local_plt + r_symndx;
 }
 
-static bfd_boolean
+static bool
 update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
 {
   struct plt_entry *ent;
@@ -4448,24 +4693,25 @@ update_plt_info (bfd *abfd, struct plt_e
       break;
   if (ent == NULL)
     {
-      bfd_size_type amt = sizeof (*ent);
+      size_t amt = sizeof (*ent);
       ent = bfd_alloc (abfd, amt);
       if (ent == NULL)
-	return FALSE;
+	return false;
       ent->next = *plist;
       ent->addend = addend;
       ent->plt.refcount = 0;
       *plist = ent;
     }
   ent->plt.refcount += 1;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 is_branch_reloc (enum elf_ppc64_reloc_type r_type)
 {
   return (r_type == R_PPC64_REL24
 	  || r_type == R_PPC64_REL24_NOTOC
+	  || r_type == R_PPC64_REL24_P9NOTOC
 	  || r_type == R_PPC64_REL14
 	  || r_type == R_PPC64_REL14_BRTAKEN
 	  || r_type == R_PPC64_REL14_BRNTAKEN
@@ -4479,7 +4725,7 @@ is_branch_reloc (enum elf_ppc64_reloc_ty
 
 /* Relocs on inline plt call sequence insns prior to the call.  */
 
-static bfd_boolean
+static bool
 is_plt_seq_reloc (enum elf_ppc64_reloc_type r_type)
 {
   return (r_type == R_PPC64_PLT16_HA
@@ -4492,11 +4738,49 @@ is_plt_seq_reloc (enum elf_ppc64_reloc_t
 	  || r_type == R_PPC64_PLTSEQ_NOTOC);
 }
 
+/* Of relocs which might appear paired with TLSGD and TLSLD marker
+   relocs, return true for those that operate on a dword.  */
+
+static bool
+is_8byte_reloc (enum elf_ppc64_reloc_type r_type)
+{
+  return (r_type == R_PPC64_PLT_PCREL34
+	  || r_type == R_PPC64_PLT_PCREL34_NOTOC
+	  || r_type == R_PPC64_PLTCALL);
+}
+
+/* The RELR encoding doesn't allow odd addresses, so RELR_ALIGN must
+   be at least 1.  R_PPC64_RELATIVE relocs require alignment of 2**3.
+   We use 3 here to avoid complexity in relocate_section, where for a
+   value of 1 we'd need to test for not just an output RELATIVE reloc
+   near the call to maybe_relr but also UADDR64 and some conditions on
+   the symbol.  See PR30824.  */
+#define RELR_ALIGN 3
+
+static bool
+maybe_relr (enum elf_ppc64_reloc_type r_type,
+	    const Elf_Internal_Rela *rel,
+	    const asection *sec)
+{
+  return ((r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
+	  && (rel->r_offset & ((1 << RELR_ALIGN) - 1)) == 0
+	  && sec->alignment_power >= RELR_ALIGN);
+}
+
+/* Like bfd_reloc_offset_in_range but without a howto.  Return true
+   iff a field of SIZE bytes at OFFSET is within SEC limits.  */
+
+static bool
+offset_in_range (asection *sec, bfd_vma offset, size_t size)
+{
+  return offset <= sec->size && size <= sec->size - offset;
+}
+
 /* Look through the relocs for a section during the first phase, and
    calculate needed space in the global offset table, procedure
    linkage table, and dynamic reloc sections.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -4507,30 +4791,21 @@ ppc64_elf_check_relocs (bfd *abfd, struc
   const Elf_Internal_Rela *rel_end;
   asection *sreloc;
   struct elf_link_hash_entry *tga, *dottga;
-  bfd_boolean is_opd;
+  bool is_opd;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is_ppc64_elf (abfd));
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
-			      FALSE, FALSE, TRUE);
+			      false, false, true);
   dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
-				 FALSE, FALSE, TRUE);
+				 false, false, true);
   symtab_hdr = &elf_symtab_hdr (abfd);
   sym_hashes = elf_sym_hashes (abfd);
   sreloc = NULL;
@@ -4540,6 +4815,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
     {
       unsigned long r_symndx;
       struct elf_link_hash_entry *h;
+      Elf_Internal_Sym *isym;
       enum elf_ppc64_reloc_type r_type;
       int tls_type;
       struct _ppc64_elf_section_data *ppc64_sec;
@@ -4547,9 +4823,15 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 
       r_symndx = ELF64_R_SYM (rel->r_info);
       if (r_symndx < symtab_hdr->sh_info)
-	h = NULL;
+	{
+	  h = NULL;
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx);
+	  if (isym == NULL)
+	    return false;
+	}
       else
 	{
+	  isym = NULL;
 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
 	  h = elf_follow_link (h);
 
@@ -4569,14 +4851,14 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	case R_PPC64_DTPREL34:
 	case R_PPC64_PCREL34:
 	case R_PPC64_GOT_PCREL34:
-	case R_PPC64_GOT_TLSGD34:
-	case R_PPC64_GOT_TLSLD34:
-	case R_PPC64_GOT_TPREL34:
-	case R_PPC64_GOT_DTPREL34:
+	case R_PPC64_GOT_TLSGD_PCREL34:
+	case R_PPC64_GOT_TLSLD_PCREL34:
+	case R_PPC64_GOT_TPREL_PCREL34:
+	case R_PPC64_GOT_DTPREL_PCREL34:
 	case R_PPC64_PLT_PCREL34:
 	case R_PPC64_PLT_PCREL34_NOTOC:
 	case R_PPC64_PCREL28:
-	  htab->powerxx_stubs = 1;
+	  htab->has_power10_relocs = 1;
 	  break;
 	default:
 	  break;
@@ -4620,18 +4902,13 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	}
       else
 	{
-	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-							  abfd, r_symndx);
-	  if (isym == NULL)
-	    return FALSE;
-
 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 	    {
 	      ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
 					     rel->r_addend,
 					     NON_GOT | PLT_IFUNC);
 	      if (ifunc == NULL)
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -4643,12 +4920,12 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	  /* These special tls relocs tie a call to __tls_get_addr with
 	     its parameter symbol.  */
 	  if (h != NULL)
-	    ((struct ppc_link_hash_entry *) h)->tls_mask |= TLS_TLS | TLS_MARK;
+	    ppc_elf_hash_entry (h)->tls_mask |= TLS_TLS | TLS_MARK;
 	  else
 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
 					rel->r_addend,
 					NON_GOT | TLS_TLS | TLS_MARK))
-	      return FALSE;
+	      return false;
 	  sec->has_tls_reloc = 1;
 	  break;
 
@@ -4656,7 +4933,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	case R_PPC64_GOT_TLSLD16_LO:
 	case R_PPC64_GOT_TLSLD16_HI:
 	case R_PPC64_GOT_TLSLD16_HA:
-	case R_PPC64_GOT_TLSLD34:
+	case R_PPC64_GOT_TLSLD_PCREL34:
 	  tls_type = TLS_TLS | TLS_LD;
 	  goto dogottls;
 
@@ -4664,7 +4941,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	case R_PPC64_GOT_TLSGD16_LO:
 	case R_PPC64_GOT_TLSGD16_HI:
 	case R_PPC64_GOT_TLSGD16_HA:
-	case R_PPC64_GOT_TLSGD34:
+	case R_PPC64_GOT_TLSGD_PCREL34:
 	  tls_type = TLS_TLS | TLS_GD;
 	  goto dogottls;
 
@@ -4672,7 +4949,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	case R_PPC64_GOT_TPREL16_LO_DS:
 	case R_PPC64_GOT_TPREL16_HI:
 	case R_PPC64_GOT_TPREL16_HA:
-	case R_PPC64_GOT_TPREL34:
+	case R_PPC64_GOT_TPREL_PCREL34:
 	  if (bfd_link_dll (info))
 	    info->flags |= DF_STATIC_TLS;
 	  tls_type = TLS_TLS | TLS_TPREL;
@@ -4682,7 +4959,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	case R_PPC64_GOT_DTPREL16_LO_DS:
 	case R_PPC64_GOT_DTPREL16_HI:
 	case R_PPC64_GOT_DTPREL16_HA:
-	case R_PPC64_GOT_DTPREL34:
+	case R_PPC64_GOT_DTPREL_PCREL34:
 	  tls_type = TLS_TLS | TLS_DTPREL;
 	dogottls:
 	  sec->has_tls_reloc = 1;
@@ -4711,14 +4988,14 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 
 	  if (ppc64_elf_tdata (abfd)->got == NULL
 	      && !create_got_section (abfd, info))
-	    return FALSE;
+	    return false;
 
 	  if (h != NULL)
 	    {
 	      struct ppc_link_hash_entry *eh;
 	      struct got_entry *ent;
 
-	      eh = (struct ppc_link_hash_entry *) h;
+	      eh = ppc_elf_hash_entry (h);
 	      for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
 		if (ent->addend == rel->r_addend
 		    && ent->owner == abfd
@@ -4726,15 +5003,15 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 		  break;
 	      if (ent == NULL)
 		{
-		  bfd_size_type amt = sizeof (*ent);
+		  size_t amt = sizeof (*ent);
 		  ent = bfd_alloc (abfd, amt);
 		  if (ent == NULL)
-		    return FALSE;
+		    return false;
 		  ent->next = eh->elf.got.glist;
 		  ent->addend = rel->r_addend;
 		  ent->owner = abfd;
 		  ent->tls_type = tls_type;
-		  ent->is_indirect = FALSE;
+		  ent->is_indirect = false;
 		  ent->got.refcount = 0;
 		  eh->elf.got.glist = ent;
 		}
@@ -4745,15 +5022,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	    /* This is a global offset table entry for a local symbol.  */
 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
 					rel->r_addend, tls_type))
-	      return FALSE;
-
-	  /* We may also need a plt entry if the symbol turns out to be
-	     an ifunc.  */
-	  if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1)
-	    {
-	      if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
-		return FALSE;
-	    }
+	      return false;
 	  break;
 
 	case R_PPC64_PLT16_HA:
@@ -4771,8 +5040,8 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	      h->needs_plt = 1;
 	      if (h->root.root.string[0] == '.'
 		  && h->root.root.string[1] != '\0')
-		((struct ppc_link_hash_entry *) h)->is_func = 1;
-	      ((struct ppc_link_hash_entry *) h)->tls_mask |= PLT_KEEP;
+		ppc_elf_hash_entry (h)->is_func = 1;
+	      ppc_elf_hash_entry (h)->tls_mask |= PLT_KEEP;
 	      plt_list = &h->plt.plist;
 	    }
 	  if (plt_list == NULL)
@@ -4780,7 +5049,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 					      rel->r_addend,
 					      NON_GOT | PLT_KEEP);
 	  if (!update_plt_info (abfd, plt_list, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* The following relocations don't need to propagate the
@@ -4836,7 +5105,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 				      abfd, sec, rel->r_offset,
 				      ppc64_elf_howto_table[r_type]->name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 
@@ -4870,14 +5139,14 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	     Reconstruct it for later use during GC.  */
 	case R_PPC64_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_PPC64_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_PPC64_REL14:
@@ -4896,16 +5165,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 		  dest = h->root.u.def.section;
 	      }
 	    else
-	      {
-		Elf_Internal_Sym *isym;
-
-		isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-					      abfd, r_symndx);
-		if (isym == NULL)
-		  return FALSE;
-
-		dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
-	      }
+	      dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
 
 	    if (dest != sec)
 	      ppc64_elf_section_data (sec)->has_14bit_branch = 1;
@@ -4919,6 +5179,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 
 	case R_PPC64_REL24:
 	case R_PPC64_REL24_NOTOC:
+	case R_PPC64_REL24_P9NOTOC:
 	rel24:
 	  plt_list = ifunc;
 	  if (h != NULL)
@@ -4926,7 +5187,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	      h->needs_plt = 1;
 	      if (h->root.root.string[0] == '.'
 		  && h->root.root.string[1] != '\0')
-		((struct ppc_link_hash_entry *) h)->is_func = 1;
+		ppc_elf_hash_entry (h)->is_func = 1;
 
 	      if (h == tga || h == dottga)
 		{
@@ -4948,7 +5209,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	     refers to is in a shared lib.  */
 	  if (plt_list
 	      && !update_plt_info (abfd, plt_list, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_PPC64_ADDR14:
@@ -4984,18 +5245,14 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	dotlstoc:
 	  sec->has_tls_reloc = 1;
 	  if (h != NULL)
-	    {
-	      struct ppc_link_hash_entry *eh;
-	      eh = (struct ppc_link_hash_entry *) h;
-	      eh->tls_mask |= tls_type & 0xff;
-	    }
+	    ppc_elf_hash_entry (h)->tls_mask |= tls_type & 0xff;
 	  else
 	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
 					rel->r_addend, tls_type))
-	      return FALSE;
+	      return false;
 
 	  ppc64_sec = ppc64_elf_section_data (sec);
-	  if (ppc64_sec->sec_type != sec_toc)
+	  if (ppc64_sec->sec_type == sec_normal)
 	    {
 	      bfd_size_type amt;
 
@@ -5003,15 +5260,22 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	      amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
 	      ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
 	      if (ppc64_sec->u.toc.symndx == NULL)
-		return FALSE;
+		return false;
 	      amt = sec->size * sizeof (bfd_vma) / 8;
 	      ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
 	      if (ppc64_sec->u.toc.add == NULL)
-		return FALSE;
-	      BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
+		return false;
 	      ppc64_sec->sec_type = sec_toc;
 	    }
-	  BFD_ASSERT (rel->r_offset % 8 == 0);
+	  if (ppc64_sec->sec_type != sec_toc
+	      || rel->r_offset % 8 != 0)
+	    {
+	      info->callbacks->einfo (_("%H: %s reloc unsupported here\n"),
+				      abfd, sec, rel->r_offset,
+				      ppc64_elf_howto_table[r_type]->name);
+	      bfd_set_error (bfd_error_bad_value);
+	      return false;
+	    }
 	  ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
 	  ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
 
@@ -5023,19 +5287,21 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
 	  goto dodyn;
 
-	case R_PPC64_TPREL16:
-	case R_PPC64_TPREL16_LO:
 	case R_PPC64_TPREL16_HI:
 	case R_PPC64_TPREL16_HA:
-	case R_PPC64_TPREL16_DS:
-	case R_PPC64_TPREL16_LO_DS:
 	case R_PPC64_TPREL16_HIGH:
 	case R_PPC64_TPREL16_HIGHA:
 	case R_PPC64_TPREL16_HIGHER:
 	case R_PPC64_TPREL16_HIGHERA:
 	case R_PPC64_TPREL16_HIGHEST:
 	case R_PPC64_TPREL16_HIGHESTA:
+	  sec->has_tls_reloc = 1;
+	  /* Fall through.  */
 	case R_PPC64_TPREL34:
+	case R_PPC64_TPREL16:
+	case R_PPC64_TPREL16_DS:
+	case R_PPC64_TPREL16_LO:
+	case R_PPC64_TPREL16_LO_DS:
 	  if (bfd_link_dll (info))
 	    info->flags |= DF_STATIC_TLS;
 	  goto dodyn;
@@ -5046,7 +5312,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	      && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
 	    {
 	      if (h != NULL)
-		((struct ppc_link_hash_entry *) h)->is_func = 1;
+		ppc_elf_hash_entry (h)->is_func = 1;
 	    }
 	  /* Fall through.  */
 
@@ -5077,7 +5343,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	      /* We may need a .plt entry if this reloc refers to a
 		 function in a shared lib.  */
 	      if (!update_plt_info (abfd, &h->plt.plist, 0))
-		return FALSE;
+		return false;
 	      h->pointer_equality_needed = 1;
 	    }
 	  /* Fall through.  */
@@ -5098,35 +5364,21 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	  if (NO_OPD_RELOCS && is_opd)
 	    break;
 
-	  /* If we are creating a shared library, and this is a reloc
-	     against a global symbol, or a non PC relative reloc
-	     against a local symbol, then we need to copy the reloc
-	     into the shared library.  However, if we are linking with
-	     -Bsymbolic, we do not need to copy a reloc against a
-	     global symbol which is defined in an object we are
-	     including in the link (i.e., DEF_REGULAR is set).  At
-	     this point we have not seen all the input files, so it is
-	     possible that DEF_REGULAR is not set now but will be set
-	     later (it is never cleared).  In case of a weak definition,
-	     DEF_REGULAR may be cleared later by a strong definition in
-	     a shared library.  We account for that possibility below by
-	     storing information in the dyn_relocs field of the hash
-	     table entry.  A similar situation occurs when creating
-	     shared libraries and symbol visibility changes render the
-	     symbol local.
-
-	     If on the other hand, we are creating an executable, we
-	     may need to keep relocations for symbols satisfied by a
-	     dynamic library if we manage to avoid copy relocs for the
-	     symbol.  */
+	  /* Set up information for symbols that might need dynamic
+	     relocations.  At this point in linking we have read all
+	     the input files and resolved most symbols, but have not
+	     yet decided whether symbols are dynamic or finalized
+	     symbol flags.  In some cases we might be setting dynamic
+	     reloc info for symbols that do not end up needing such.
+	     That's OK, adjust_dynamic_symbol and allocate_dynrelocs
+	     work together with this code.  */
 	dodyn:
 	  if ((h != NULL
-	       && (h->root.type == bfd_link_hash_defweak
-		   || !h->def_regular))
-	      || (h != NULL
-		  && !bfd_link_executable (info)
-		  && !SYMBOLIC_BIND (info, h))
+	       && !SYMBOL_REFERENCES_LOCAL (info, h))
 	      || (bfd_link_pic (info)
+		  && (h != NULL
+		      ? !bfd_is_abs_symbol (&h->root)
+		      : isym->st_shndx != SHN_ABS)
 		  && must_be_dyn_reloc (info, r_type))
 	      || (!bfd_link_pic (info)
 		  && ifunc != NULL))
@@ -5137,59 +5389,54 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
+		    (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
 		{
-		  struct elf_dyn_relocs *p;
-		  struct elf_dyn_relocs **head;
+		  struct ppc_dyn_relocs *p;
+		  struct ppc_dyn_relocs **head;
 
-		  head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
+		  head = (struct ppc_dyn_relocs **) &h->dyn_relocs;
 		  p = *head;
 		  if (p == NULL || p->sec != sec)
 		    {
 		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
 		      if (p == NULL)
-			return FALSE;
+			return false;
 		      p->next = *head;
 		      *head = p;
 		      p->sec = sec;
 		      p->count = 0;
 		      p->pc_count = 0;
+		      p->rel_count = 0;
 		    }
 		  p->count += 1;
 		  if (!must_be_dyn_reloc (info, r_type))
 		    p->pc_count += 1;
+		  if (maybe_relr (r_type, rel, sec))
+		    p->rel_count += 1;
 		}
 	      else
 		{
-		  /* Track dynamic relocs needed for local syms too.
-		     We really need local syms available to do this
-		     easily.  Oh well.  */
-		  struct ppc_dyn_relocs *p;
-		  struct ppc_dyn_relocs **head;
-		  bfd_boolean is_ifunc;
+		  /* Track dynamic relocs needed for local syms too.  */
+		  struct ppc_local_dyn_relocs *p;
+		  struct ppc_local_dyn_relocs **head;
+		  bool is_ifunc;
 		  asection *s;
 		  void *vpp;
-		  Elf_Internal_Sym *isym;
-
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-						abfd, r_symndx);
-		  if (isym == NULL)
-		    return FALSE;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
 		    s = sec;
 
 		  vpp = &elf_section_data (s)->local_dynrel;
-		  head = (struct ppc_dyn_relocs **) vpp;
+		  head = (struct ppc_local_dyn_relocs **) vpp;
 		  is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
 		  p = *head;
 		  if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
@@ -5198,14 +5445,17 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 		    {
 		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
 		      if (p == NULL)
-			return FALSE;
+			return false;
 		      p->next = *head;
 		      *head = p;
 		      p->sec = sec;
-		      p->ifunc = is_ifunc;
 		      p->count = 0;
+		      p->rel_count = 0;
+		      p->ifunc = is_ifunc;
 		    }
 		  p->count += 1;
+		  if (maybe_relr (r_type, rel, sec))
+		    p->rel_count += 1;
 		}
 	    }
 	  break;
@@ -5215,26 +5465,26 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   unsigned long iflags, oflags;
 
   if ((ibfd->flags & BFD_LINKER_CREATED) != 0)
-    return TRUE;
+    return true;
 
   if (!is_ppc64_elf (ibfd) || !is_ppc64_elf (obfd))
-    return TRUE;
+    return true;
 
   if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   iflags = elf_elfheader (ibfd)->e_flags;
   oflags = elf_elfheader (obfd)->e_flags;
@@ -5245,7 +5495,7 @@ ppc64_elf_merge_private_bfd_data (bfd *i
 	/* xgettext:c-format */
 	(_("%pB uses unknown e_flags 0x%lx"), ibfd, iflags);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   else if (iflags != oflags && iflags != 0)
     {
@@ -5254,17 +5504,17 @@ ppc64_elf_merge_private_bfd_data (bfd *i
 	(_("%pB: ABI version %ld is not compatible with ABI version %ld output"),
 	 ibfd, iflags, oflags);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   if (!_bfd_elf_ppc_merge_fp_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   /* Merge Tag_compatibility attributes and any common GNU ones.  */
   return _bfd_elf_merge_object_attributes (ibfd, info);
 }
 
-static bfd_boolean
+static bool
 ppc64_elf_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   /* Print normal ELF private data.  */
@@ -5283,7 +5533,7 @@ ppc64_elf_print_private_bfd_data (bfd *a
       fputc ('\n', file);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
@@ -5295,24 +5545,33 @@ opd_entry_value (asection *opd_sec,
 		 bfd_vma offset,
 		 asection **code_sec,
 		 bfd_vma *code_off,
-		 bfd_boolean in_code_sec)
+		 bool in_code_sec)
 {
   bfd *opd_bfd = opd_sec->owner;
   Elf_Internal_Rela *relocs;
   Elf_Internal_Rela *lo, *hi, *look;
   bfd_vma val;
 
+  if (!is_ppc64_elf (opd_bfd))
+    return (bfd_vma) -1;
+
+  if (ppc64_elf_section_data (opd_sec)->sec_type == sec_normal)
+    ppc64_elf_section_data (opd_sec)->sec_type = sec_opd;
+  else if (ppc64_elf_section_data (opd_sec)->sec_type != sec_opd)
+    return (bfd_vma) -1;
+
   /* No relocs implies we are linking a --just-symbols object, or looking
      at a final linked executable with addr2line or somesuch.  */
   if (opd_sec->reloc_count == 0)
     {
-      bfd_byte *contents = ppc64_elf_tdata (opd_bfd)->opd.contents;
+      bfd_byte *contents = ppc64_elf_section_data (opd_sec)->u.opd.u.contents;
 
       if (contents == NULL)
 	{
-	  if (!bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
+	  if ((opd_sec->flags & SEC_HAS_CONTENTS) == 0
+	      || !bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
 	    return (bfd_vma) -1;
-	  ppc64_elf_tdata (opd_bfd)->opd.contents = contents;
+	  ppc64_elf_section_data (opd_sec)->u.opd.u.contents = contents;
 	}
 
       /* PR 17512: file: 64b9dfbb.  */
@@ -5349,11 +5608,9 @@ opd_entry_value (asection *opd_sec,
       return val;
     }
 
-  BFD_ASSERT (is_ppc64_elf (opd_bfd));
-
-  relocs = ppc64_elf_tdata (opd_bfd)->opd.relocs;
+  relocs = ppc64_elf_section_data (opd_sec)->u.opd.u.relocs;
   if (relocs == NULL)
-    relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
+    relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, true);
   /* PR 17512: file: df8e1fd6.  */
   if (relocs == NULL)
     return (bfd_vma) -1;
@@ -5464,14 +5721,25 @@ ppc64_elf_maybe_function_sym (const asym
 			      bfd_vma *code_off)
 {
   bfd_size_type size;
+  elf_symbol_type * elf_sym = (elf_symbol_type *) sym;
 
   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
 		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
     return 0;
 
-  size = 0;
-  if (!(sym->flags & BSF_SYNTHETIC))
-    size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
+  size = (sym->flags & BSF_SYNTHETIC) ? 0 : elf_sym->internal_elf_sym.st_size;
+
+  /* In theory we should check that the symbol's type satisfies
+     _bfd_elf_is_function_type(), but there are some function-like
+     symbols which would fail this test.  (eg _start).  Instead
+     we check for hidden, local, notype symbols with zero size.
+     This type of symbol is generated by the annobin plugin for gcc
+     and clang, and should not be considered to be a function symbol.  */
+  if (size == 0
+      && ((sym->flags & (BSF_SYNTHETIC | BSF_LOCAL)) == BSF_LOCAL)
+      && ELF_ST_TYPE (elf_sym->internal_elf_sym.st_info) == STT_NOTYPE
+      && ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other) == STV_HIDDEN)
+    return 0;
 
   if (strcmp (sym->section->name, ".opd") == 0)
     {
@@ -5492,7 +5760,7 @@ ppc64_elf_maybe_function_sym (const asym
 	}
 
       if (opd_entry_value (sym->section, symval,
-			   &sec, code_off, TRUE) == (bfd_vma) -1)
+			   &sec, code_off, true) == (bfd_vma) -1)
 	return 0;
       /* An old ABI binary with dot-syms has a size of 24 on the .opd
 	 symbol.  This size has nothing to do with the code size of the
@@ -5515,30 +5783,30 @@ ppc64_elf_maybe_function_sym (const asym
 	return 0;
       *code_off = sym->value;
     }
-  if (size == 0)
-    size = 1;
-  return size;
+
+  /* Do not return 0 for the function's size.  */
+  return size ? size : 1;
 }
 
 /* Return true if symbol is a strong function defined in an ELFv2
    object with st_other localentry bits of zero, ie. its local entry
    point coincides with its global entry point.  */
 
-static bfd_boolean
+static bool
 is_elfv2_localentry0 (struct elf_link_hash_entry *h)
 {
   return (h != NULL
 	  && h->type == STT_FUNC
 	  && h->root.type == bfd_link_hash_defined
 	  && (STO_PPC64_LOCAL_MASK & h->other) == 0
-	  && !((struct ppc_link_hash_entry *) h)->non_zero_localentry
+	  && !ppc_elf_hash_entry (h)->non_zero_localentry
 	  && is_ppc64_elf (h->root.u.def.section->owner)
 	  && abiversion (h->root.u.def.section->owner) >= 2);
 }
 
 /* Return true if symbol is defined in a regular object file.  */
 
-static bfd_boolean
+static bool
 is_static_defined (struct elf_link_hash_entry *h)
 {
   return ((h->root.type == bfd_link_hash_defined
@@ -5580,11 +5848,34 @@ defined_func_desc (struct ppc_link_hash_
   return NULL;
 }
 
-static bfd_boolean func_desc_adjust (struct elf_link_hash_entry *, void *);
+/* Given H is a symbol that satisfies is_static_defined, return the
+   value in the output file.  */
+
+static bfd_vma
+defined_sym_val (struct elf_link_hash_entry *h)
+{
+  return (h->root.u.def.section->output_section->vma
+	  + h->root.u.def.section->output_offset
+	  + h->root.u.def.value);
+}
+
+/* Return true if H matches __tls_get_addr or one of its variants.  */
+
+static bool
+is_tls_get_addr (struct elf_link_hash_entry *h,
+		 struct ppc_link_hash_table *htab)
+{
+  return (h == elf_hash_entry (htab->tls_get_addr_fd)
+	  || h == elf_hash_entry (htab->tga_desc_fd)
+	  || h == elf_hash_entry (htab->tls_get_addr)
+	  || h == elf_hash_entry (htab->tga_desc));
+}
+
+static bool func_desc_adjust (struct elf_link_hash_entry *, void *);
 
 /* Garbage collect sections, after first dealing with dot-symbols.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
@@ -5613,8 +5904,8 @@ ppc64_elf_gc_keep (struct bfd_link_info
       struct ppc_link_hash_entry *eh, *fh;
       asection *sec;
 
-      eh = (struct ppc_link_hash_entry *)
-	elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE);
+      eh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym->name,
+						     false, false, true));
       if (eh == NULL)
 	continue;
       if (eh->elf.root.type != bfd_link_hash_defined
@@ -5630,7 +5921,7 @@ ppc64_elf_gc_keep (struct bfd_link_info
       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
 	       && opd_entry_value (eh->elf.root.u.def.section,
 				   eh->elf.root.u.def.value,
-				   &sec, NULL, FALSE) != (bfd_vma) -1)
+				   &sec, NULL, false) != (bfd_vma) -1)
 	sec->flags |= SEC_KEEP;
 
       sec = eh->elf.root.u.def.section;
@@ -5642,11 +5933,11 @@ ppc64_elf_gc_keep (struct bfd_link_info
    building shared libraries, we must assume that any visible symbol is
    referenced.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) inf;
-  struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
+  struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
   struct ppc_link_hash_entry *fdh;
   struct bfd_elf_dynamic_list *d = info->dynamic_list;
 
@@ -5657,6 +5948,9 @@ ppc64_elf_gc_mark_dynamic_ref (struct el
 
   if ((eh->elf.root.type == bfd_link_hash_defined
        || eh->elf.root.type == bfd_link_hash_defweak)
+      && (!eh->elf.start_stop
+	  || eh->elf.root.ldscript_def
+	  || !info->start_stop_gc)
       && ((eh->elf.ref_dynamic && !eh->elf.forced_local)
 	  || ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf))
 	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
@@ -5688,11 +5982,11 @@ ppc64_elf_gc_mark_dynamic_ref (struct el
       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
 	       && opd_entry_value (eh->elf.root.u.def.section,
 				   eh->elf.root.u.def.value,
-				   &code_sec, NULL, FALSE) != (bfd_vma) -1)
+				   &code_sec, NULL, false) != (bfd_vma) -1)
 	code_sec->flags |= SEC_KEEP;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -5730,7 +6024,7 @@ ppc64_elf_gc_mark_hook (asection *sec,
 	    {
 	    case bfd_link_hash_defined:
 	    case bfd_link_hash_defweak:
-	      eh = (struct ppc_link_hash_entry *) h;
+	      eh = ppc_elf_hash_entry (h);
 	      fdh = defined_func_desc (eh);
 	      if (fdh != NULL)
 		{
@@ -5756,7 +6050,7 @@ ppc64_elf_gc_mark_hook (asection *sec,
 	      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
 		       && opd_entry_value (eh->elf.root.u.def.section,
 					   eh->elf.root.u.def.value,
-					   &rsec, NULL, FALSE) != (bfd_vma) -1)
+					   &rsec, NULL, false) != (bfd_vma) -1)
 		eh->elf.root.u.def.section->gc_mark = 1;
 	      else
 		rsec = h->root.u.def.section;
@@ -5803,7 +6097,7 @@ struct sfpr_def_parms
    If STUB_SEC is non-null, define alias symbols in STUB_SEC
    instead.  */
 
-static bfd_boolean
+static bool
 sfpr_define (struct bfd_link_info *info,
 	     const struct sfpr_def_parms *parm,
 	     asection *stub_sec)
@@ -5811,11 +6105,11 @@ sfpr_define (struct bfd_link_info *info,
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
   unsigned int i;
   size_t len = strlen (parm->name);
-  bfd_boolean writing = FALSE;
+  bool writing = false;
   char sym[16];
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   memcpy (sym, parm->name, len);
   sym[len + 2] = 0;
@@ -5826,8 +6120,8 @@ sfpr_define (struct bfd_link_info *info,
 
       sym[len + 0] = i / 10 + '0';
       sym[len + 1] = i % 10 + '0';
-      h = (struct ppc_link_hash_entry *)
-	elf_link_hash_lookup (&htab->elf, sym, writing, TRUE, TRUE);
+      h = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym,
+						    writing, true, true));
       if (stub_sec != NULL)
 	{
 	  if (h != NULL
@@ -5837,9 +6131,9 @@ sfpr_define (struct bfd_link_info *info,
 	      struct elf_link_hash_entry *s;
 	      char buf[32];
 	      sprintf (buf, "%08x.%s", stub_sec->id & 0xffffffff, sym);
-	      s = elf_link_hash_lookup (&htab->elf, buf, TRUE, TRUE, FALSE);
+	      s = elf_link_hash_lookup (&htab->elf, buf, true, true, false);
 	      if (s == NULL)
-		return FALSE;
+		return false;
 	      if (s->root.type == bfd_link_hash_new)
 		{
 		  s->root.type = bfd_link_hash_defined;
@@ -5867,14 +6161,14 @@ sfpr_define (struct bfd_link_info *info,
 	      h->elf.type = STT_FUNC;
 	      h->elf.def_regular = 1;
 	      h->elf.non_elf = 0;
-	      _bfd_elf_link_hash_hide_symbol (info, &h->elf, TRUE);
-	      writing = TRUE;
+	      _bfd_elf_link_hash_hide_symbol (info, &h->elf, true);
+	      writing = true;
 	      if (htab->sfpr->contents == NULL)
 		{
 		  htab->sfpr->contents
 		    = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
 		  if (htab->sfpr->contents == NULL)
-		    return FALSE;
+		    return false;
 		}
 	    }
 	}
@@ -5889,7 +6183,7 @@ sfpr_define (struct bfd_link_info *info,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static bfd_byte *
@@ -6054,34 +6348,113 @@ restvr_tail (bfd *abfd, bfd_byte *p, int
   return p + 4;
 }
 
+#define STDU_R1_0R1	0xf8210001
+#define ADDI_R1_R1	0x38210000
+
+/* Emit prologue of wrapper preserving regs around a call to
+   __tls_get_addr_opt.  */
+
+static bfd_byte *
+tls_get_addr_prologue (bfd *obfd, bfd_byte *p, struct ppc_link_hash_table *htab)
+{
+  unsigned int i;
+
+  bfd_put_32 (obfd, MFLR_R0, p);
+  p += 4;
+  bfd_put_32 (obfd, STD_R0_0R1 + 16, p);
+  p += 4;
+
+  if (htab->opd_abi)
+    {
+      for (i = 4; i < 12; i++)
+	{
+	  bfd_put_32 (obfd,
+		      STD_R0_0R1 | i << 21 | (-(13 - i) * 8 & 0xffff), p);
+	  p += 4;
+	}
+      bfd_put_32 (obfd, STDU_R1_0R1 | (-128 & 0xffff), p);
+      p += 4;
+    }
+  else
+    {
+      for (i = 4; i < 12; i++)
+	{
+	  bfd_put_32 (obfd,
+		      STD_R0_0R1 | i << 21 | (-(12 - i) * 8 & 0xffff), p);
+	  p += 4;
+	}
+      bfd_put_32 (obfd, STDU_R1_0R1 | (-96 & 0xffff), p);
+      p += 4;
+    }
+  return p;
+}
+
+/* Emit epilogue of wrapper preserving regs around a call to
+   __tls_get_addr_opt.  */
+
+static bfd_byte *
+tls_get_addr_epilogue (bfd *obfd, bfd_byte *p, struct ppc_link_hash_table *htab)
+{
+  unsigned int i;
+
+  if (htab->opd_abi)
+    {
+      for (i = 4; i < 12; i++)
+	{
+	  bfd_put_32 (obfd, LD_R0_0R1 | i << 21 | (128 - (13 - i) * 8), p);
+	  p += 4;
+	}
+      bfd_put_32 (obfd, ADDI_R1_R1 | 128, p);
+      p += 4;
+    }
+  else
+    {
+      for (i = 4; i < 12; i++)
+	{
+	  bfd_put_32 (obfd, LD_R0_0R1 | i << 21 | (96 - (12 - i) * 8), p);
+	  p += 4;
+	}
+      bfd_put_32 (obfd, ADDI_R1_R1 | 96, p);
+      p += 4;
+    }
+  bfd_put_32 (obfd, LD_R0_0R1 | 16, p);
+  p += 4;
+  bfd_put_32 (obfd, MTLR_R0, p);
+  p += 4;
+  bfd_put_32 (obfd, BLR, p);
+  p += 4;
+  return p;
+}
+
 /* Called via elf_link_hash_traverse to transfer dynamic linking
    information on function code symbol entries to their corresponding
-   function descriptor symbol entries.  */
+   function descriptor symbol entries.  Must not be called twice for
+   any given code symbol.  */
 
-static bfd_boolean
+static bool
 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
   struct ppc_link_hash_table *htab;
   struct ppc_link_hash_entry *fh;
   struct ppc_link_hash_entry *fdh;
-  bfd_boolean force_local;
+  bool force_local;
 
-  fh = (struct ppc_link_hash_entry *) h;
+  fh = ppc_elf_hash_entry (h);
   if (fh->elf.root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (!fh->is_func)
-    return TRUE;
+    return true;
 
   if (fh->elf.root.root.string[0] != '.'
       || fh->elf.root.root.string[1] == '\0')
-    return TRUE;
+    return true;
 
   info = inf;
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Find the corresponding function descriptor symbol.  */
   fdh = lookup_fdh (fh, htab);
@@ -6098,7 +6471,7 @@ func_desc_adjust (struct elf_link_hash_e
       && opd_entry_value (fdh->elf.root.u.def.section,
 			  fdh->elf.root.u.def.value,
 			  &fh->elf.root.u.def.section,
-			  &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
+			  &fh->elf.root.u.def.value, false) != (bfd_vma) -1)
     {
       fh->elf.root.type = fdh->elf.root.type;
       fh->elf.forced_local = 1;
@@ -6114,7 +6487,11 @@ func_desc_adjust (struct elf_link_hash_e
 	if (ent->plt.refcount > 0)
 	  break;
       if (ent == NULL)
-	return TRUE;
+	{
+	  if (fdh != NULL && fdh->fake)
+	    _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, true);
+	  return true;
+	}
     }
 
   /* Create a descriptor as undefined if necessary.  */
@@ -6125,7 +6502,7 @@ func_desc_adjust (struct elf_link_hash_e
     {
       fdh = make_fdh (info, fh);
       if (fdh == NULL)
-	return FALSE;
+	return false;
     }
 
   /* We can't support overriding of symbols on a fake descriptor.  */
@@ -6133,7 +6510,7 @@ func_desc_adjust (struct elf_link_hash_e
       && fdh->fake
       && (fh->elf.root.type == bfd_link_hash_defined
 	  || fh->elf.root.type == bfd_link_hash_defweak))
-    _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
+    _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, true);
 
   /* Transfer dynamic linking information to the function descriptor.  */
   if (fdh != NULL)
@@ -6151,7 +6528,7 @@ func_desc_adjust (struct elf_link_hash_e
       if (!fdh->elf.forced_local
 	  && fh->elf.dynindx != -1)
 	if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
-	  return FALSE;
+	  return false;
     }
 
   /* Now that the info is on the function descriptor, clear the
@@ -6167,7 +6544,7 @@ func_desc_adjust (struct elf_link_hash_e
 		 || fdh->elf.forced_local);
   _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
 
-  return TRUE;
+  return true;
 }
 
 static const struct sfpr_def_parms save_res_funcs[] =
@@ -6187,19 +6564,22 @@ static const struct sfpr_def_parms save_
   };
 
 /* Called near the start of bfd_elf_size_dynamic_sections.  We use
-   this hook to a) provide some gcc support functions, and b) transfer
-   dynamic linking information gathered so far on function code symbol
-   entries, to their corresponding function descriptor symbol entries.  */
-
-static bfd_boolean
-ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
-			    struct bfd_link_info *info)
+   this hook to a) run the edit functions in this file, b) provide
+   some gcc support functions, and c) transfer dynamic linking
+   information gathered so far on function code symbol entries, to
+   their corresponding function descriptor symbol entries.  */
+
+static bool
+ppc64_elf_edit (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab;
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
+
+  /* Call back into the linker, which then runs the edit functions.  */
+  htab->params->edit ();
 
   /* Provide any missing _save* and _rest* functions.  */
   if (htab->sfpr != NULL)
@@ -6209,17 +6589,17 @@ ppc64_elf_func_desc_adjust (bfd *obfd AT
       htab->sfpr->size = 0;
       for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
 	if (!sfpr_define (info, &save_res_funcs[i], NULL))
-	  return FALSE;
+	  return false;
       if (htab->sfpr->size == 0)
 	htab->sfpr->flags |= SEC_EXCLUDE;
     }
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   if (htab->elf.hgot != NULL)
     {
-      _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE);
+      _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, true);
       /* Make .TOC. defined so as to prevent it being made dynamic.
 	 The wrong value here is fixed later in ppc64_elf_set_toc.  */
       if (!htab->elf.hgot->def_regular
@@ -6236,86 +6616,59 @@ ppc64_elf_func_desc_adjust (bfd *obfd AT
 	= (htab->elf.hgot->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
     }
 
-  if (htab->need_func_desc_adj)
-    {
-      elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
-      htab->need_func_desc_adj = 0;
-    }
-
-  return TRUE;
-}
-
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct ppc_link_hash_entry *eh;
-  struct elf_dyn_relocs *p;
-
-  eh = (struct ppc_link_hash_entry *) h;
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
+  return true;
 }
 
 /* Return true if we have dynamic relocs against H or any of its weak
    aliases, that apply to read-only sections.  Cannot be used after
    size_dynamic_sections.  */
 
-static bfd_boolean
+static bool
 alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
 {
-  struct ppc_link_hash_entry *eh;
-
-  eh = (struct ppc_link_hash_entry *) h;
+  struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
   do
     {
-      if (readonly_dynrelocs (&eh->elf))
-	return TRUE;
-      eh = (struct ppc_link_hash_entry *) eh->elf.u.alias;
+      if (_bfd_elf_readonly_dynrelocs (&eh->elf))
+	return true;
+      eh = ppc_elf_hash_entry (eh->elf.u.alias);
     }
   while (eh != NULL && &eh->elf != h);
 
-  return FALSE;
+  return false;
 }
 
 /* Return whether EH has pc-relative dynamic relocs.  */
 
-static bfd_boolean
+static bool
 pc_dynrelocs (struct ppc_link_hash_entry *eh)
 {
-  struct elf_dyn_relocs *p;
+  struct ppc_dyn_relocs *p;
 
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = (struct ppc_dyn_relocs *) eh->elf.dyn_relocs; p != NULL; p = p->next)
     if (p->pc_count != 0)
-      return TRUE;
-  return FALSE;
+      return true;
+  return false;
 }
 
 /* Return true if a global entry stub will be created for H.  Valid
    for ELFv2 before plt entries have been allocated.  */
 
-static bfd_boolean
+static bool
 global_entry_stub (struct elf_link_hash_entry *h)
 {
   struct plt_entry *pent;
 
   if (!h->pointer_equality_needed
       || h->def_regular)
-    return FALSE;
+    return false;
 
   for (pent = h->plt.plist; pent != NULL; pent = pent->next)
     if (pent->plt.refcount > 0
 	&& pent->addend == 0)
-      return TRUE;
+      return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -6324,7 +6677,7 @@ global_entry_stub (struct elf_link_hash_
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				 struct elf_link_hash_entry *h)
 {
@@ -6333,16 +6686,16 @@ ppc64_elf_adjust_dynamic_symbol (struct
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Deal with function syms.  */
   if (h->type == STT_FUNC
       || h->type == STT_GNU_IFUNC
       || h->needs_plt)
     {
-      bfd_boolean local = (((struct ppc_link_hash_entry *) h)->save_res
-			   || SYMBOL_CALLS_LOCAL (info, h)
-			   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
+      bool local = (ppc_elf_hash_entry (h)->save_res
+		    || SYMBOL_CALLS_LOCAL (info, h)
+		    || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
       /* Discard dyn_relocs when non-pic if we've decided that a
 	 function symbol is local and not an ifunc.  We keep dynamic
 	 relocs for ifuncs when local rather than always emitting a
@@ -6355,7 +6708,7 @@ ppc64_elf_adjust_dynamic_symbol (struct
       if (!bfd_link_pic (info)
 	  && h->type != STT_GNU_IFUNC
 	  && local)
-	((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
+	h->dyn_relocs = NULL;
 
       /* Clear procedure linkage table information for any symbol that
 	 won't need a .plt entry.  */
@@ -6367,7 +6720,7 @@ ppc64_elf_adjust_dynamic_symbol (struct
 	  || (h->type != STT_GNU_IFUNC
 	      && local
 	      && (htab->can_convert_all_inline_plt
-		  || (((struct ppc_link_hash_entry *) h)->tls_mask
+		  || (ppc_elf_hash_entry (h)->tls_mask
 		      & (TLS_TLS | PLT_KEEP)) != PLT_KEEP)))
 	{
 	  h->plt.plist = NULL;
@@ -6385,7 +6738,7 @@ ppc64_elf_adjust_dynamic_symbol (struct
 	     extra work in ld.so when resolving these symbols.  */
 	  if (global_entry_stub (h))
 	    {
-	      if (!readonly_dynrelocs (h))
+	      if (!_bfd_elf_readonly_dynrelocs (h))
 		{
 		  h->pointer_equality_needed = 0;
 		  /* If we haven't seen a branch reloc and the symbol
@@ -6396,20 +6749,20 @@ ppc64_elf_adjust_dynamic_symbol (struct
 	      else if (!bfd_link_pic (info))
 		/* We are going to be defining the function symbol on the
 		   plt stub, so no dyn_relocs needed when non-pic.  */
-		((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
+		h->dyn_relocs = NULL;
 	    }
 
 	  /* ELFv2 function symbols can't have copy relocs.  */
-	  return TRUE;
+	  return true;
 	}
       else if (!h->needs_plt
-	       && !readonly_dynrelocs (h))
+	       && !_bfd_elf_readonly_dynrelocs (h))
 	{
 	  /* If we haven't seen a branch reloc and the symbol isn't an
 	     ifunc then we don't need a plt entry.  */
 	  h->plt.plist = NULL;
 	  h->pointer_equality_needed = 0;
-	  return TRUE;
+	  return true;
 	}
     }
   else
@@ -6426,8 +6779,8 @@ ppc64_elf_adjust_dynamic_symbol (struct
       h->root.u.def.value = def->root.u.def.value;
       if (def->root.u.def.section == htab->elf.sdynbss
 	  || def->root.u.def.section == htab->elf.sdynrelro)
-	((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
-      return TRUE;
+	h->dyn_relocs = NULL;
+      return true;
     }
 
   /* If we are creating a shared library, we must presume that the
@@ -6435,12 +6788,12 @@ ppc64_elf_adjust_dynamic_symbol (struct
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (!bfd_link_executable (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* Don't generate a copy reloc for symbols defined in the executable.  */
   if (!h->def_dynamic || !h->ref_regular || h->def_regular
@@ -6459,15 +6812,25 @@ ppc64_elf_adjust_dynamic_symbol (struct
 	 definition for the variable.  Text relocations are preferable
 	 to an incorrect program.  */
       || h->protected_def)
-    return TRUE;
+    return true;
 
-  if (h->plt.plist != NULL)
+  if (h->type == STT_FUNC
+      || h->type == STT_GNU_IFUNC)
     {
-      /* We should never get here, but unfortunately there are versions
-	 of gcc out there that improperly (for this ABI) put initialized
-	 function pointers, vtable refs and suchlike in read-only
-	 sections.  Allow them to proceed, but warn that this might
-	 break at runtime.  */
+      /* .dynbss copies of function symbols only work if we have
+	 ELFv1 dot-symbols.  ELFv1 compilers since 2004 default to not
+	 use dot-symbols and set the function symbol size to the text
+	 size of the function rather than the size of the descriptor.
+	 That's wrong for copying a descriptor.  */
+      if (ppc_elf_hash_entry (h)->oh == NULL
+	  || !(h->size == 24 || h->size == 16))
+	return true;
+
+      /* We should never get here, but unfortunately there are old
+	 versions of gcc (circa gcc-3.2) that improperly for the
+	 ELFv1 ABI put initialized function pointers, vtable refs and
+	 suchlike in read-only sections.  Allow them to proceed, but
+	 warn that this might break at runtime.  */
       info->callbacks->einfo
 	(_("%P: copy reloc against `%pT' requires lazy plt linking; "
 	   "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
@@ -6506,7 +6869,7 @@ ppc64_elf_adjust_dynamic_symbol (struct
     }
 
   /* We no longer want dyn_relocs.  */
-  ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL;
+  h->dyn_relocs = NULL;
   return _bfd_elf_adjust_dynamic_copy (info, h, s);
 }
 
@@ -6515,7 +6878,7 @@ ppc64_elf_adjust_dynamic_symbol (struct
 static void
 ppc64_elf_hide_symbol (struct bfd_link_info *info,
 		       struct elf_link_hash_entry *h,
-		       bfd_boolean force_local)
+		       bool force_local)
 {
   struct ppc_link_hash_entry *eh;
   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
@@ -6523,7 +6886,7 @@ ppc64_elf_hide_symbol (struct bfd_link_i
   if (ppc_hash_table (info) == NULL)
     return;
 
-  eh = (struct ppc_link_hash_entry *) h;
+  eh = ppc_elf_hash_entry (h);
   if (eh->is_func_descriptor)
     {
       struct ppc_link_hash_entry *fh = eh->oh;
@@ -6546,8 +6909,8 @@ ppc64_elf_hide_symbol (struct bfd_link_i
 	  p = eh->elf.root.root.string - 1;
 	  save = *p;
 	  *(char *) p = '.';
-	  fh = (struct ppc_link_hash_entry *)
-	    elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
+	  fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, false,
+							 false, false));
 	  *(char *) p = save;
 
 	  /* Unfortunately, if it so happens that the string we were
@@ -6560,8 +6923,8 @@ ppc64_elf_hide_symbol (struct bfd_link_i
 	      while (q >= eh->elf.root.root.string && *q == *p)
 		--q, --p;
 	      if (q < eh->elf.root.root.string && *p == '.')
-		fh = (struct ppc_link_hash_entry *)
-		  elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
+		fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, false,
+							       false, false));
 	    }
 	  if (fh != NULL)
 	    {
@@ -6574,7 +6937,7 @@ ppc64_elf_hide_symbol (struct bfd_link_i
     }
 }
 
-static bfd_boolean
+static bool
 get_sym_h (struct elf_link_hash_entry **hp,
 	   Elf_Internal_Sym **symp,
 	   asection **symsecp,
@@ -6609,12 +6972,7 @@ get_sym_h (struct elf_link_hash_entry **
 	}
 
       if (tls_maskp != NULL)
-	{
-	  struct ppc_link_hash_entry *eh;
-
-	  eh = (struct ppc_link_hash_entry *) h;
-	  *tls_maskp = &eh->tls_mask;
-	}
+	*tls_maskp = &ppc_elf_hash_entry (h)->tls_mask;
     }
   else
     {
@@ -6629,7 +6987,7 @@ get_sym_h (struct elf_link_hash_entry **
 					    symtab_hdr->sh_info,
 					    0, NULL, NULL, NULL);
 	  if (locsyms == NULL)
-	    return FALSE;
+	    return false;
 	  *locsymsp = locsyms;
 	}
       sym = locsyms + r_symndx;
@@ -6661,7 +7019,7 @@ get_sym_h (struct elf_link_hash_entry **
 	  *tls_maskp = tls_mask;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
@@ -6771,7 +7129,7 @@ tocsave_find (struct ppc_link_hash_table
 /* Adjust all global syms defined in opd sections.  In gcc generated
    code for the old ABI, these will already have been done.  */
 
-static bfd_boolean
+static bool
 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
 {
   struct ppc_link_hash_entry *eh;
@@ -6779,15 +7137,15 @@ adjust_opd_syms (struct elf_link_hash_en
   struct _opd_sec_data *opd;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (h->root.type != bfd_link_hash_defined
       && h->root.type != bfd_link_hash_defweak)
-    return TRUE;
+    return true;
 
-  eh = (struct ppc_link_hash_entry *) h;
+  eh = ppc_elf_hash_entry (h);
   if (eh->adjust_done)
-    return TRUE;
+    return true;
 
   sym_sec = eh->elf.root.u.def.section;
   opd = get_opd_info (sym_sec);
@@ -6814,15 +7172,15 @@ adjust_opd_syms (struct elf_link_hash_en
 	eh->elf.root.u.def.value += adjust;
       eh->adjust_done = 1;
     }
-  return TRUE;
+  return true;
 }
 
 /* Handles decrementing dynamic reloc counts for the reloc specified by
    R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM
    have already been determined.  */
 
-static bfd_boolean
-dec_dynrel_count (bfd_vma r_info,
+static bool
+dec_dynrel_count (const Elf_Internal_Rela *rel,
 		  asection *sec,
 		  struct bfd_link_info *info,
 		  Elf_Internal_Sym **local_syms,
@@ -6834,11 +7192,11 @@ dec_dynrel_count (bfd_vma r_info,
 
   /* Can this reloc be dynamic?  This switch, and later tests here
      should be kept in sync with the code in check_relocs.  */
-  r_type = ELF64_R_TYPE (r_info);
+  r_type = ELF64_R_TYPE (rel->r_info);
   switch (r_type)
     {
     default:
-      return TRUE;
+      return true;
 
     case R_PPC64_TOC16:
     case R_PPC64_TOC16_DS:
@@ -6847,7 +7205,7 @@ dec_dynrel_count (bfd_vma r_info,
     case R_PPC64_TOC16_HA:
     case R_PPC64_TOC16_LO_DS:
       if (h == NULL)
-	return TRUE;
+	return true;
       break;
 
     case R_PPC64_TPREL16:
@@ -6908,18 +7266,17 @@ dec_dynrel_count (bfd_vma r_info,
       unsigned long r_symndx;
       bfd *ibfd = sec->owner;
 
-      r_symndx = ELF64_R_SYM (r_info);
+      r_symndx = ELF64_R_SYM (rel->r_info);
       if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
-	return FALSE;
+	return false;
     }
 
   if ((h != NULL
-       && (h->root.type == bfd_link_hash_defweak
-	   || !h->def_regular))
-      || (h != NULL
-	  && !bfd_link_executable (info)
-	  && !SYMBOLIC_BIND (info, h))
+       && !SYMBOL_REFERENCES_LOCAL (info, h))
       || (bfd_link_pic (info)
+	  && (h != NULL
+	      ? !bfd_is_abs_symbol (&h->root)
+	      : sym_sec != bfd_abs_section_ptr)
 	  && must_be_dyn_reloc (info, r_type))
       || (!bfd_link_pic (info)
 	  && (h != NULL
@@ -6927,20 +7284,20 @@ dec_dynrel_count (bfd_vma r_info,
 	      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)))
     ;
   else
-    return TRUE;
+    return true;
 
   if (h != NULL)
     {
-      struct elf_dyn_relocs *p;
-      struct elf_dyn_relocs **pp;
-      pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
+      struct ppc_dyn_relocs *p;
+      struct ppc_dyn_relocs **pp;
+      pp = (struct ppc_dyn_relocs **) &h->dyn_relocs;
 
       /* elf_gc_sweep may have already removed all dyn relocs associated
 	 with local syms for a given section.  Also, symbol flags are
 	 changed by elf_gc_sweep_symbol, confusing the test above.  Don't
 	 report a dynreloc miscount.  */
       if (*pp == NULL && info->gc_sections)
-	return TRUE;
+	return true;
 
       while ((p = *pp) != NULL)
 	{
@@ -6948,20 +7305,22 @@ dec_dynrel_count (bfd_vma r_info,
 	    {
 	      if (!must_be_dyn_reloc (info, r_type))
 		p->pc_count -= 1;
+	      if (maybe_relr (r_type, rel, sec))
+		p->rel_count -= 1;
 	      p->count -= 1;
 	      if (p->count == 0)
 		*pp = p->next;
-	      return TRUE;
+	      return true;
 	    }
 	  pp = &p->next;
 	}
     }
   else
     {
-      struct ppc_dyn_relocs *p;
-      struct ppc_dyn_relocs **pp;
+      struct ppc_local_dyn_relocs *p;
+      struct ppc_local_dyn_relocs **pp;
       void *vpp;
-      bfd_boolean is_ifunc;
+      bool is_ifunc;
 
       if (local_syms == NULL)
 	sym_sec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
@@ -6969,20 +7328,22 @@ dec_dynrel_count (bfd_vma r_info,
 	sym_sec = sec;
 
       vpp = &elf_section_data (sym_sec)->local_dynrel;
-      pp = (struct ppc_dyn_relocs **) vpp;
+      pp = (struct ppc_local_dyn_relocs **) vpp;
 
       if (*pp == NULL && info->gc_sections)
-	return TRUE;
+	return true;
 
       is_ifunc = ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC;
       while ((p = *pp) != NULL)
 	{
 	  if (p->sec == sec && p->ifunc == is_ifunc)
 	    {
+	      if (maybe_relr (r_type, rel, sec))
+		p->rel_count -= 1;
 	      p->count -= 1;
 	      if (p->count == 0)
 		*pp = p->next;
-	      return TRUE;
+	      return true;
 	    }
 	  pp = &p->next;
 	}
@@ -6992,7 +7353,7 @@ dec_dynrel_count (bfd_vma r_info,
   _bfd_error_handler (_("dynreloc miscount for %pB, section %pA"),
 		      sec->owner, sec);
   bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return false;
 }
 
 /* Remove unused Official Procedure Descriptor entries.  Currently we
@@ -7001,17 +7362,17 @@ dec_dynrel_count (bfd_vma r_info,
    would be possible to remove many more entries for statically linked
    applications.  */
 
-bfd_boolean
+bool
 ppc64_elf_edit_opd (struct bfd_link_info *info)
 {
   bfd *ibfd;
-  bfd_boolean some_edited = FALSE;
+  bool some_edited = false;
   asection *need_pad = NULL;
   struct ppc_link_hash_table *htab;
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
     {
@@ -7020,14 +7381,16 @@ ppc64_elf_edit_opd (struct bfd_link_info
       Elf_Internal_Shdr *symtab_hdr;
       Elf_Internal_Sym *local_syms;
       struct _opd_sec_data *opd;
-      bfd_boolean need_edit, add_aux_fields, broken;
+      bool need_edit, add_aux_fields, broken;
       bfd_size_type cnt_16b = 0;
 
       if (!is_ppc64_elf (ibfd))
 	continue;
 
       sec = bfd_get_section_by_name (ibfd, ".opd");
-      if (sec == NULL || sec->size == 0)
+      if (sec == NULL
+	  || sec->size == 0
+	  || (sec->flags & SEC_HAS_CONTENTS) == 0)
 	continue;
 
       if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
@@ -7047,12 +7410,12 @@ ppc64_elf_edit_opd (struct bfd_link_info
       relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
 					    info->keep_memory);
       if (relstart == NULL)
-	return FALSE;
+	return false;
 
       /* First run through the relocs to check they are sane, and to
 	 determine whether we need to edit this opd section.  */
-      need_edit = FALSE;
-      broken = FALSE;
+      need_edit = false;
+      broken = false;
       need_pad = sec;
       relend = relstart + sec->reloc_count;
       for (rel = relstart; rel < relend; )
@@ -7079,7 +7442,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 	    broken_opd:
 	      _bfd_error_handler
 		(_("%pB: .opd is not a regular array of opd entries"), ibfd);
-	      broken = TRUE;
+	      broken = true;
 	      break;
 	    }
 
@@ -7090,7 +7453,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 		/* xgettext:c-format */
 		(_("%pB: unexpected reloc type %u in .opd section"),
 		 ibfd, r_type);
-	      broken = TRUE;
+	      broken = true;
 	      break;
 	    }
 
@@ -7112,7 +7475,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 		/* xgettext:c-format */
 		(_("%pB: undefined sym `%s' in .opd section"),
 		 ibfd, sym_name);
-	      broken = TRUE;
+	      broken = true;
 	      break;
 	    }
 
@@ -7125,7 +7488,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 	     which we test for via the output_section.  */
 	  if (sym_sec->owner != ibfd
 	      || sym_sec->output_section == bfd_abs_section_ptr)
-	    need_edit = TRUE;
+	    need_edit = true;
 
 	  rel += 2;
 	  if (rel + 1 == relend
@@ -7175,7 +7538,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 	  opd = &ppc64_elf_section_data (sec)->u.opd;
 	  opd->adjust = bfd_zalloc (sec->owner, amt);
 	  if (opd->adjust == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* This seems a waste of time as input .opd sections are all
 	     zeros as generated by gcc, but I suppose there's no reason
@@ -7186,15 +7549,13 @@ ppc64_elf_edit_opd (struct bfd_link_info
 	      bfd_byte *loc;
 	      if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
 		{
-		  if (loc != NULL)
-		    free (loc);
+		  free (loc);
 		error_ret:
-		  if (local_syms != NULL
-		      && symtab_hdr->contents != (unsigned char *) local_syms)
+		  if (symtab_hdr->contents != (unsigned char *) local_syms)
 		    free (local_syms);
 		  if (elf_section_data (sec)->relocs != relstart)
 		    free (relstart);
-		  return FALSE;
+		  return false;
 		}
 	      sec->contents = loc;
 	      sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
@@ -7207,7 +7568,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 	    {
 	      new_contents = bfd_malloc (sec->size + cnt_16b * 8);
 	      if (new_contents == NULL)
-		return FALSE;
+		return false;
 	      need_pad = NULL;
 	    }
 	  wptr = new_contents;
@@ -7222,7 +7583,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 	      Elf_Internal_Sym *sym;
 	      long opd_ent_size;
 	      Elf_Internal_Rela *next_rel;
-	      bfd_boolean skip;
+	      bool skip;
 
 	      r_symndx = ELF64_R_SYM (rel->r_info);
 	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
@@ -7250,7 +7611,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 	      if (h != NULL
 		  && h->root.root.string[0] == '.')
 		{
-		  fdh = ((struct ppc_link_hash_entry *) h)->oh;
+		  fdh = ppc_elf_hash_entry (h)->oh;
 		  if (fdh != NULL)
 		    {
 		      fdh = ppc_follow_link (fdh);
@@ -7278,7 +7639,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 		  else
 		    while (1)
 		      {
-			if (!dec_dynrel_count (rel->r_info, sec, info,
+			if (!dec_dynrel_count (rel, sec, info,
 					       NULL, h, sym))
 			  goto error_ret;
 
@@ -7353,7 +7714,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 	     elf_bfd_final_link if we are emitting relocs.  */
 	  rel_hdr = _bfd_elf_single_rel_hdr (sec);
 	  rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
-	  some_edited = TRUE;
+	  some_edited = true;
 	}
       else if (elf_section_data (sec)->relocs != relstart)
 	free (relstart);
@@ -7383,11 +7744,11 @@ ppc64_elf_edit_opd (struct bfd_link_info
 
 	  p = bfd_malloc (need_pad->size + 8);
 	  if (p == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (!bfd_get_section_contents (need_pad->owner, need_pad,
 					 p, 0, need_pad->size))
-	    return FALSE;
+	    return false;
 
 	  need_pad->contents = p;
 	  need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
@@ -7396,7 +7757,7 @@ ppc64_elf_edit_opd (struct bfd_link_info
 	{
 	  p = bfd_realloc (need_pad->contents, need_pad->size + 8);
 	  if (p == NULL)
-	    return FALSE;
+	    return false;
 
 	  need_pad->contents = p;
 	}
@@ -7405,13 +7766,13 @@ ppc64_elf_edit_opd (struct bfd_link_info
       need_pad->size += 8;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Analyze inline PLT call relocations to see whether calls to locally
    defined functions can be converted to direct calls.  */
 
-bfd_boolean
+bool
 ppc64_elf_inline_plt (struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab;
@@ -7421,7 +7782,7 @@ ppc64_elf_inline_plt (struct bfd_link_in
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* A bl insn can reach -0x2000000 to 0x1fffffc.  The limit is
      reduced somewhat to cater for possible stubs that might be added
@@ -7456,7 +7817,7 @@ ppc64_elf_inline_plt (struct bfd_link_in
   if (high_vma - low_vma < limit)
     {
       htab->can_convert_all_inline_plt = 1;
-      return TRUE;
+      return true;
     }
 
   /* Otherwise, go looking through relocs for cases where a direct
@@ -7493,10 +7854,10 @@ ppc64_elf_inline_plt (struct bfd_link_in
 	    relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
 						  info->keep_memory);
 	    if (relstart == NULL)
-	      return FALSE;
+	      return false;
 
 	    relend = relstart + sec->reloc_count;
-	    for (rel = relstart; rel < relend; )
+	    for (rel = relstart; rel < relend; rel++)
 	      {
 		enum elf_ppc64_reloc_type r_type;
 		unsigned long r_symndx;
@@ -7516,10 +7877,9 @@ ppc64_elf_inline_plt (struct bfd_link_in
 		  {
 		    if (elf_section_data (sec)->relocs != relstart)
 		      free (relstart);
-		    if (local_syms != NULL
-			&& symtab_hdr->contents != (bfd_byte *) local_syms)
+		    if (symtab_hdr->contents != (bfd_byte *) local_syms)
 		      free (local_syms);
-		    return FALSE;
+		    return false;
 		  }
 
 		if (sym_sec != NULL && sym_sec->output_section != NULL)
@@ -7557,19 +7917,29 @@ ppc64_elf_inline_plt (struct bfd_link_in
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-/* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
+/* Set htab->tls_get_addr and various other info specific to TLS.
+   This needs to run before dynamic symbols are processed in
+   bfd_elf_size_dynamic_sections.  */
 
-asection *
+bool
 ppc64_elf_tls_setup (struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab;
+  struct elf_link_hash_entry *tga, *tga_fd, *desc, *desc_fd;
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return NULL;
+    return false;
+
+  /* Move dynamic linking info to the function descriptor sym.  */
+  if (htab->need_func_desc_adj)
+    {
+      elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
+      htab->need_func_desc_adj = 0;
+    }
 
   if (abiversion (info->output_bfd) == 1)
     htab->opd_abi = 1;
@@ -7595,32 +7965,48 @@ ppc64_elf_tls_setup (struct bfd_link_inf
      --plt-localentry can cause trouble.  */
   if (htab->params->plt_localentry0 < 0)
     htab->params->plt_localentry0 = 0;
+  if (htab->params->plt_localentry0 && htab->has_power10_relocs)
+    {
+      /* The issue is that __glink_PLTresolve saves r2, which is done
+	 because glibc ld.so _dl_runtime_resolve restores r2 to support
+	 a glibc plt call optimisation where global entry code is
+	 skipped on calls that resolve to the same binary.  The
+	 __glink_PLTresolve save of r2 is incompatible with code
+	 making tail calls, because the tail call might go via the
+	 resolver and thus overwrite the proper saved r2.  */
+      _bfd_error_handler (_("warning: --plt-localentry is incompatible with "
+			    "power10 pc-relative code"));
+      htab->params->plt_localentry0 = 0;
+    }
   if (htab->params->plt_localentry0
       && elf_link_hash_lookup (&htab->elf, "GLIBC_2.26",
-			       FALSE, FALSE, FALSE) == NULL)
+			       false, false, false) == NULL)
     _bfd_error_handler
       (_("warning: --plt-localentry is especially dangerous without "
 	 "ld.so support to detect ABI violations"));
 
-  htab->tls_get_addr = ((struct ppc_link_hash_entry *)
-			elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
-					      FALSE, FALSE, TRUE));
-  /* Move dynamic linking info to the function descriptor sym.  */
-  if (htab->tls_get_addr != NULL)
-    func_desc_adjust (&htab->tls_get_addr->elf, info);
-  htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *)
-			   elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
-						 FALSE, FALSE, TRUE));
+  tga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
+			      false, false, true);
+  htab->tls_get_addr = ppc_elf_hash_entry (tga);
+  tga_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
+				 false, false, true);
+  htab->tls_get_addr_fd = ppc_elf_hash_entry (tga_fd);
+
+  desc = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_desc",
+			       false, false, true);
+  htab->tga_desc = ppc_elf_hash_entry (desc);
+  desc_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_desc",
+				  false, false, true);
+  htab->tga_desc_fd = ppc_elf_hash_entry (desc_fd);
+
   if (htab->params->tls_get_addr_opt)
     {
-      struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd;
+      struct elf_link_hash_entry *opt, *opt_fd;
 
       opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
-				  FALSE, FALSE, TRUE);
-      if (opt != NULL)
-	func_desc_adjust (opt, info);
+				  false, false, true);
       opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
-				     FALSE, FALSE, TRUE);
+				     false, false, true);
       if (opt_fd != NULL
 	  && (opt_fd->root.type == bfd_link_hash_defined
 	      || opt_fd->root.type == bfd_link_hash_defweak))
@@ -7629,24 +8015,49 @@ ppc64_elf_tls_setup (struct bfd_link_inf
 	     signalled by the presence of __tls_get_addr_opt, and we'll
 	     be calling __tls_get_addr via a plt call stub, then
 	     make __tls_get_addr point to __tls_get_addr_opt.  */
-	  tga_fd = &htab->tls_get_addr_fd->elf;
-	  if (htab->elf.dynamic_sections_created
-	      && tga_fd != NULL
-	      && (tga_fd->type == STT_FUNC
-		  || tga_fd->needs_plt)
-	      && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
-		   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd)))
-	    {
-	      struct plt_entry *ent;
-
-	      for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
-		if (ent->plt.refcount > 0)
-		  break;
+	  if (!(htab->elf.dynamic_sections_created
+		&& tga_fd != NULL
+		&& (tga_fd->type == STT_FUNC
+		    || tga_fd->needs_plt)
+		&& !(SYMBOL_CALLS_LOCAL (info, tga_fd)
+		     || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd))))
+	    tga_fd = NULL;
+	  if (!(htab->elf.dynamic_sections_created
+		&& desc_fd != NULL
+		&& (desc_fd->type == STT_FUNC
+		    || desc_fd->needs_plt)
+		&& !(SYMBOL_CALLS_LOCAL (info, desc_fd)
+		     || UNDEFWEAK_NO_DYNAMIC_RELOC (info, desc_fd))))
+	    desc_fd = NULL;
+
+	  if (tga_fd != NULL || desc_fd != NULL)
+	    {
+	      struct plt_entry *ent = NULL;
+
+	      if (tga_fd != NULL)
+		for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
+		  if (ent->plt.refcount > 0)
+		    break;
+	      if (ent == NULL && desc_fd != NULL)
+		for (ent = desc_fd->plt.plist; ent != NULL; ent = ent->next)
+		  if (ent->plt.refcount > 0)
+		    break;
 	      if (ent != NULL)
 		{
-		  tga_fd->root.type = bfd_link_hash_indirect;
-		  tga_fd->root.u.i.link = &opt_fd->root;
-		  ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
+		  if (tga_fd != NULL)
+		    {
+		      tga_fd->root.type = bfd_link_hash_indirect;
+		      tga_fd->root.u.i.link = &opt_fd->root;
+		      tga_fd->root.u.i.warning = NULL;
+		      ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
+		    }
+		  if (desc_fd != NULL)
+		    {
+		      desc_fd->root.type = bfd_link_hash_indirect;
+		      desc_fd->root.u.i.link = &opt_fd->root;
+		      desc_fd->root.u.i.warning = NULL;
+		      ppc64_elf_copy_indirect_symbol (info, opt_fd, desc_fd);
+		    }
 		  opt_fd->mark = 1;
 		  if (opt_fd->dynindx != -1)
 		    {
@@ -7655,27 +8066,52 @@ ppc64_elf_tls_setup (struct bfd_link_inf
 		      _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
 					      opt_fd->dynstr_index);
 		      if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
-			return NULL;
+			return false;
 		    }
-		  htab->tls_get_addr_fd
-		    = (struct ppc_link_hash_entry *) opt_fd;
-		  tga = &htab->tls_get_addr->elf;
-		  if (opt != NULL && tga != NULL)
+		  if (tga_fd != NULL)
 		    {
-		      tga->root.type = bfd_link_hash_indirect;
-		      tga->root.u.i.link = &opt->root;
-		      ppc64_elf_copy_indirect_symbol (info, opt, tga);
-		      opt->mark = 1;
-		      _bfd_elf_link_hash_hide_symbol (info, opt,
-						      tga->forced_local);
-		      htab->tls_get_addr = (struct ppc_link_hash_entry *) opt;
+		      htab->tls_get_addr_fd = ppc_elf_hash_entry (opt_fd);
+		      tga = elf_hash_entry (htab->tls_get_addr);
+		      if (opt != NULL && tga != NULL)
+			{
+			  tga->root.type = bfd_link_hash_indirect;
+			  tga->root.u.i.link = &opt->root;
+			  tga->root.u.i.warning = NULL;
+			  ppc64_elf_copy_indirect_symbol (info, opt, tga);
+			  opt->mark = 1;
+			  _bfd_elf_link_hash_hide_symbol (info, opt,
+							  tga->forced_local);
+			  htab->tls_get_addr = ppc_elf_hash_entry (opt);
+			}
+		      htab->tls_get_addr_fd->oh = htab->tls_get_addr;
+		      htab->tls_get_addr_fd->is_func_descriptor = 1;
+		      if (htab->tls_get_addr != NULL)
+			{
+			  htab->tls_get_addr->oh = htab->tls_get_addr_fd;
+			  htab->tls_get_addr->is_func = 1;
+			}
 		    }
-		  htab->tls_get_addr_fd->oh = htab->tls_get_addr;
-		  htab->tls_get_addr_fd->is_func_descriptor = 1;
-		  if (htab->tls_get_addr != NULL)
+		  if (desc_fd != NULL)
 		    {
-		      htab->tls_get_addr->oh = htab->tls_get_addr_fd;
-		      htab->tls_get_addr->is_func = 1;
+		      htab->tga_desc_fd = ppc_elf_hash_entry (opt_fd);
+		      if (opt != NULL && desc != NULL)
+			{
+			  desc->root.type = bfd_link_hash_indirect;
+			  desc->root.u.i.link = &opt->root;
+			  desc->root.u.i.warning = NULL;
+			  ppc64_elf_copy_indirect_symbol (info, opt, desc);
+			  opt->mark = 1;
+			  _bfd_elf_link_hash_hide_symbol (info, opt,
+							  desc->forced_local);
+			  htab->tga_desc = ppc_elf_hash_entry (opt);
+			}
+		      htab->tga_desc_fd->oh = htab->tga_desc;
+		      htab->tga_desc_fd->is_func_descriptor = 1;
+		      if (htab->tga_desc != NULL)
+			{
+			  htab->tga_desc->oh = htab->tga_desc_fd;
+			  htab->tga_desc->is_func = 1;
+			}
 		    }
 		}
 	    }
@@ -7683,17 +8119,25 @@ ppc64_elf_tls_setup (struct bfd_link_inf
       else if (htab->params->tls_get_addr_opt < 0)
 	htab->params->tls_get_addr_opt = 0;
     }
-  return _bfd_elf_tls_setup (info->output_bfd, info);
+
+  if (htab->tga_desc_fd != NULL
+      && htab->params->tls_get_addr_opt
+      && htab->params->no_tls_get_addr_regsave == -1)
+    htab->params->no_tls_get_addr_regsave = 0;
+
+  return true;
 }
 
 /* Return TRUE iff REL is a branch reloc with a global symbol matching
-   HASH1 or HASH2.  */
+   any of HASH1, HASH2, HASH3, or HASH4.  */
 
-static bfd_boolean
-branch_reloc_hash_match (const bfd *ibfd,
-			 const Elf_Internal_Rela *rel,
-			 const struct ppc_link_hash_entry *hash1,
-			 const struct ppc_link_hash_entry *hash2)
+static bool
+branch_reloc_hash_match (bfd *ibfd,
+			 Elf_Internal_Rela *rel,
+			 struct ppc_link_hash_entry *hash1,
+			 struct ppc_link_hash_entry *hash2,
+			 struct ppc_link_hash_entry *hash3,
+			 struct ppc_link_hash_entry *hash4)
 {
   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
   enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
@@ -7706,10 +8150,13 @@ branch_reloc_hash_match (const bfd *ibfd
 
       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
       h = elf_follow_link (h);
-      if (h == &hash1->elf || h == &hash2->elf)
-	return TRUE;
+      if (h == elf_hash_entry (hash1)
+	  || h == elf_hash_entry (hash2)
+	  || h == elf_hash_entry (hash3)
+	  || h == elf_hash_entry (hash4))
+	return true;
     }
-  return FALSE;
+  return false;
 }
 
 /* Run through all the TLS relocs looking for optimization
@@ -7719,7 +8166,7 @@ branch_reloc_hash_match (const bfd *ibfd
    to know the tp offset, and we need to optimize before allocating
    dynamic relocations.  */
 
-bfd_boolean
+bool
 ppc64_elf_tls_optimize (struct bfd_link_info *info)
 {
   bfd *ibfd;
@@ -7729,11 +8176,13 @@ ppc64_elf_tls_optimize (struct bfd_link_
   int pass;
 
   if (!bfd_link_executable (info))
-    return TRUE;
+    return true;
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
+
+  htab->do_tls_opt = 1;
 
   /* Make two passes over the relocs.  On the first pass, mark toc
      entries involved with tls relocs, and check that tls relocs
@@ -7753,7 +8202,7 @@ ppc64_elf_tls_optimize (struct bfd_link_
 	  if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
 	    {
 	      Elf_Internal_Rela *relstart, *rel, *relend;
-	      bfd_boolean found_tls_get_addr_arg = 0;
+	      bool found_tls_get_addr_arg = 0;
 
 	      /* Read the relocations.  */
 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
@@ -7761,7 +8210,7 @@ ppc64_elf_tls_optimize (struct bfd_link_
 	      if (relstart == NULL)
 		{
 		  free (toc_ref);
-		  return FALSE;
+		  return false;
 		}
 
 	      relend = relstart + sec->reloc_count;
@@ -7775,10 +8224,10 @@ ppc64_elf_tls_optimize (struct bfd_link_
 		  unsigned char *tls_mask;
 		  unsigned int tls_set, tls_clear, tls_type = 0;
 		  bfd_vma value;
-		  bfd_boolean ok_tprel, is_local;
+		  bool ok_tprel, is_local;
 		  long toc_ref_index = 0;
 		  int expecting_tls_get_addr = 0;
-		  bfd_boolean ret = FALSE;
+		  bool ret = false;
 
 		  r_symndx = ELF64_R_SYM (rel->r_info);
 		  if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
@@ -7787,11 +8236,9 @@ ppc64_elf_tls_optimize (struct bfd_link_
 		    err_free_rel:
 		      if (elf_section_data (sec)->relocs != relstart)
 			free (relstart);
-		      if (toc_ref != NULL)
-			free (toc_ref);
-		      if (locsyms != NULL
-			  && (elf_symtab_hdr (ibfd).contents
-			      != (unsigned char *) locsyms))
+		      free (toc_ref);
+		      if (elf_symtab_hdr (ibfd).contents
+			  != (unsigned char *) locsyms)
 			free (locsyms);
 		      return ret;
 		    }
@@ -7814,13 +8261,13 @@ ppc64_elf_tls_optimize (struct bfd_link_
 		       STT_TLS.  So no need for .opd local sym adjust.  */
 		    value = sym->st_value;
 
-		  ok_tprel = FALSE;
+		  ok_tprel = false;
 		  is_local = SYMBOL_REFERENCES_LOCAL (info, h);
 		  if (is_local)
 		    {
 		      if (h != NULL
 			  && h->root.type == bfd_link_hash_undefweak)
-			ok_tprel = TRUE;
+			ok_tprel = true;
 		      else if (sym_sec != NULL
 			       && sym_sec->output_section != NULL)
 			{
@@ -7847,15 +8294,14 @@ ppc64_elf_tls_optimize (struct bfd_link_
 		  if (pass == 0
 		      && sec->nomark_tls_get_addr
 		      && h != NULL
-		      && (h == &htab->tls_get_addr->elf
-			  || h == &htab->tls_get_addr_fd->elf)
+		      && is_tls_get_addr (h, htab)
 		      && !found_tls_get_addr_arg
 		      && is_branch_reloc (r_type))
 		    {
 		      info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
 						"TLS optimization disabled\n"),
 					      ibfd, sec, rel->r_offset);
-		      ret = TRUE;
+		      ret = true;
 		      goto err_free_rel;
 		    }
 
@@ -7864,7 +8310,7 @@ ppc64_elf_tls_optimize (struct bfd_link_
 		    {
 		    case R_PPC64_GOT_TLSLD16:
 		    case R_PPC64_GOT_TLSLD16_LO:
-		    case R_PPC64_GOT_TLSLD34:
+		    case R_PPC64_GOT_TLSLD_PCREL34:
 		      expecting_tls_get_addr = 1;
 		      found_tls_get_addr_arg = 1;
 		      /* Fall through.  */
@@ -7885,7 +8331,7 @@ ppc64_elf_tls_optimize (struct bfd_link_
 
 		    case R_PPC64_GOT_TLSGD16:
 		    case R_PPC64_GOT_TLSGD16_LO:
-		    case R_PPC64_GOT_TLSGD34:
+		    case R_PPC64_GOT_TLSGD_PCREL34:
 		      expecting_tls_get_addr = 1;
 		      found_tls_get_addr_arg = 1;
 		      /* Fall through. */
@@ -7902,7 +8348,7 @@ ppc64_elf_tls_optimize (struct bfd_link_
 		      tls_type = TLS_TLS | TLS_GD;
 		      break;
 
-		    case R_PPC64_GOT_TPREL34:
+		    case R_PPC64_GOT_TPREL_PCREL34:
 		    case R_PPC64_GOT_TPREL16_DS:
 		    case R_PPC64_GOT_TPREL16_LO_DS:
 		    case R_PPC64_GOT_TPREL16_HI:
@@ -8042,6 +8488,42 @@ ppc64_elf_tls_optimize (struct bfd_link_
 			}
 		      break;
 
+		    case R_PPC64_TPREL16_HA:
+		      if (pass == 0)
+			{
+			  unsigned char buf[4];
+			  unsigned int insn;
+			  bfd_vma off = rel->r_offset & ~3;
+			  if (!bfd_get_section_contents (ibfd, sec, buf,
+							 off, 4))
+			    goto err_free_rel;
+			  insn = bfd_get_32 (ibfd, buf);
+			  /* addis rt,13,imm */
+			  if ((insn & ((0x3fu << 26) | 0x1f << 16))
+			      != ((15u << 26) | (13 << 16)))
+			    {
+			      /* xgettext:c-format */
+			      info->callbacks->minfo
+				(_("%H: warning: %s unexpected insn %#x.\n"),
+				 ibfd, sec, off, "R_PPC64_TPREL16_HA", insn);
+			      htab->do_tls_opt = 0;
+			    }
+			}
+		      continue;
+
+		    case R_PPC64_TPREL16_HI:
+		    case R_PPC64_TPREL16_HIGH:
+		    case R_PPC64_TPREL16_HIGHA:
+		    case R_PPC64_TPREL16_HIGHER:
+		    case R_PPC64_TPREL16_HIGHERA:
+		    case R_PPC64_TPREL16_HIGHEST:
+		    case R_PPC64_TPREL16_HIGHESTA:
+		      /* These can all be used in sequences along with
+			 TPREL16_LO or TPREL16_LO_DS in ways we aren't
+			 able to verify easily.  */
+		      htab->do_tls_opt = 0;
+		      continue;
+
 		    default:
 		      continue;
 		    }
@@ -8054,8 +8536,10 @@ ppc64_elf_tls_optimize (struct bfd_link_
 
 		      if (rel + 1 < relend
 			  && branch_reloc_hash_match (ibfd, rel + 1,
+						      htab->tls_get_addr_fd,
+						      htab->tga_desc_fd,
 						      htab->tls_get_addr,
-						      htab->tls_get_addr_fd))
+						      htab->tga_desc))
 			{
 			  if (expecting_tls_get_addr == 2)
 			    {
@@ -8088,7 +8572,7 @@ ppc64_elf_tls_optimize (struct bfd_link_
 		      info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
 						"TLS optimization disabled\n"),
 					      ibfd, sec, rel->r_offset);
-		      ret = TRUE;
+		      ret = true;
 		      goto err_free_rel;
 		    }
 
@@ -8110,15 +8594,29 @@ ppc64_elf_tls_optimize (struct bfd_link_
 		    {
 		      struct plt_entry *ent = NULL;
 
-		      if (htab->tls_get_addr != NULL)
+		      if (htab->tls_get_addr_fd != NULL)
+			for (ent = htab->tls_get_addr_fd->elf.plt.plist;
+			     ent != NULL;
+			     ent = ent->next)
+			  if (ent->addend == 0)
+			    break;
+
+		      if (ent == NULL && htab->tga_desc_fd != NULL)
+			for (ent = htab->tga_desc_fd->elf.plt.plist;
+			     ent != NULL;
+			     ent = ent->next)
+			  if (ent->addend == 0)
+			    break;
+
+		      if (ent == NULL && htab->tls_get_addr != NULL)
 			for (ent = htab->tls_get_addr->elf.plt.plist;
 			     ent != NULL;
 			     ent = ent->next)
 			  if (ent->addend == 0)
 			    break;
 
-		      if (ent == NULL && htab->tls_get_addr_fd != NULL)
-			for (ent = htab->tls_get_addr_fd->elf.plt.plist;
+		      if (ent == NULL && htab->tga_desc != NULL)
+			for (ent = htab->tga_desc->elf.plt.plist;
 			     ent != NULL;
 			     ent = ent->next)
 			  if (ent->addend == 0)
@@ -8161,15 +8659,15 @@ ppc64_elf_tls_optimize (struct bfd_link_
 		    {
 		      /* If we got rid of a DTPMOD/DTPREL reloc pair then
 			 we'll lose one or two dyn relocs.  */
-		      if (!dec_dynrel_count (rel->r_info, sec, info,
+		      if (!dec_dynrel_count (rel, sec, info,
 					     NULL, h, sym))
-			return FALSE;
+			return false;
 
 		      if (tls_set == (TLS_EXPLICIT | TLS_GD))
 			{
-			  if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
+			  if (!dec_dynrel_count (rel + 1, sec, info,
 						 NULL, h, sym))
-			    return FALSE;
+			    return false;
 			}
 		    }
 
@@ -8191,10 +8689,8 @@ ppc64_elf_tls_optimize (struct bfd_link_
 	  }
       }
 
-  if (toc_ref != NULL)
-    free (toc_ref);
-  htab->do_tls_opt = 1;
-  return TRUE;
+  free (toc_ref);
+  return true;
 }
 
 /* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
@@ -8207,12 +8703,12 @@ struct adjust_toc_info
 {
   asection *toc;
   unsigned long *skip;
-  bfd_boolean global_toc_syms;
+  bool global_toc_syms;
 };
 
 enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
 
-static bfd_boolean
+static bool
 adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
 {
   struct ppc_link_hash_entry *eh;
@@ -8221,11 +8717,11 @@ adjust_toc_syms (struct elf_link_hash_en
 
   if (h->root.type != bfd_link_hash_defined
       && h->root.type != bfd_link_hash_defweak)
-    return TRUE;
+    return true;
 
-  eh = (struct ppc_link_hash_entry *) h;
+  eh = ppc_elf_hash_entry (h);
   if (eh->adjust_done)
-    return TRUE;
+    return true;
 
   if (eh->elf.root.u.def.section == toc_inf->toc)
     {
@@ -8248,45 +8744,45 @@ adjust_toc_syms (struct elf_link_hash_en
       eh->adjust_done = 1;
     }
   else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
-    toc_inf->global_toc_syms = TRUE;
+    toc_inf->global_toc_syms = true;
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE iff INSN with a relocation of R_TYPE is one we expect
    on a _LO variety toc/got reloc.  */
 
-static bfd_boolean
+static bool
 ok_lo_toc_insn (unsigned int insn, enum elf_ppc64_reloc_type r_type)
 {
-  return ((insn & (0x3f << 26)) == 12u << 26 /* addic */
-	  || (insn & (0x3f << 26)) == 14u << 26 /* addi */
-	  || (insn & (0x3f << 26)) == 32u << 26 /* lwz */
-	  || (insn & (0x3f << 26)) == 34u << 26 /* lbz */
-	  || (insn & (0x3f << 26)) == 36u << 26 /* stw */
-	  || (insn & (0x3f << 26)) == 38u << 26 /* stb */
-	  || (insn & (0x3f << 26)) == 40u << 26 /* lhz */
-	  || (insn & (0x3f << 26)) == 42u << 26 /* lha */
-	  || (insn & (0x3f << 26)) == 44u << 26 /* sth */
-	  || (insn & (0x3f << 26)) == 46u << 26 /* lmw */
-	  || (insn & (0x3f << 26)) == 47u << 26 /* stmw */
-	  || (insn & (0x3f << 26)) == 48u << 26 /* lfs */
-	  || (insn & (0x3f << 26)) == 50u << 26 /* lfd */
-	  || (insn & (0x3f << 26)) == 52u << 26 /* stfs */
-	  || (insn & (0x3f << 26)) == 54u << 26 /* stfd */
-	  || (insn & (0x3f << 26)) == 56u << 26 /* lq,lfq */
-	  || ((insn & (0x3f << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */
+  return ((insn & (0x3fu << 26)) == 12u << 26 /* addic */
+	  || (insn & (0x3fu << 26)) == 14u << 26 /* addi */
+	  || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */
+	  || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */
+	  || (insn & (0x3fu << 26)) == 36u << 26 /* stw */
+	  || (insn & (0x3fu << 26)) == 38u << 26 /* stb */
+	  || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */
+	  || (insn & (0x3fu << 26)) == 42u << 26 /* lha */
+	  || (insn & (0x3fu << 26)) == 44u << 26 /* sth */
+	  || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */
+	  || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */
+	  || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */
+	  || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */
+	  || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */
+	  || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */
+	  || (insn & (0x3fu << 26)) == 56u << 26 /* lq,lfq */
+	  || ((insn & (0x3fu << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */
 	      /* Exclude lfqu by testing reloc.  If relocs are ever
 		 defined for the reduced D field in psq_lu then those
 		 will need testing too.  */
 	      && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
-	  || ((insn & (0x3f << 26)) == 58u << 26 /* ld,lwa */
+	  || ((insn & (0x3fu << 26)) == 58u << 26 /* ld,lwa */
 	      && (insn & 1) == 0)
-	  || (insn & (0x3f << 26)) == 60u << 26 /* stfq */
-	  || ((insn & (0x3f << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */
+	  || (insn & (0x3fu << 26)) == 60u << 26 /* stfq */
+	  || ((insn & (0x3fu << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */
 	      /* Exclude stfqu.  psq_stu as above for psq_lu.  */
 	      && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
-	  || ((insn & (0x3f << 26)) == 62u << 26 /* std,stq */
+	  || ((insn & (0x3fu << 26)) == 62u << 26 /* std,stq */
 	      && (insn & 1) == 0));
 }
 
@@ -8306,7 +8802,7 @@ ok_lo_toc_insn (unsigned int insn, enum
    the pld can be replaced with pla: *PINSN1 is that pla insn,
    while *PINSN2 is the second instruction.  */
 
-static bfd_boolean
+static bool
 xlate_pcrel_opt (uint64_t *pinsn1, uint64_t *pinsn2, bfd_signed_vma *poff)
 {
   uint64_t insn1 = *pinsn1;
@@ -8317,29 +8813,29 @@ xlate_pcrel_opt (uint64_t *pinsn1, uint6
     {
       /* Check that regs match.  */
       if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
-	return FALSE;
+	return false;
 
       /* P8LS or PMLS form, non-pcrel.  */
       if ((insn2 & (-1ULL << 50) & ~(1ULL << 56)) != (1ULL << 58))
-	return FALSE;
+	return false;
 
       *pinsn1 = (insn2 & ~(31 << 16) & ~0x3ffff0000ffffULL) | (1ULL << 52);
       *pinsn2 = PNOP;
       off = ((insn2 >> 16) & 0x3ffff0000ULL) | (insn2 & 0xffff);
       *poff = (off ^ 0x200000000ULL) - 0x200000000ULL;
-      return TRUE;
+      return true;
     }
 
   insn2 >>= 32;
 
   /* Check that regs match.  */
   if (((insn2 >> 16) & 31) != ((insn1 >> 21) & 31))
-    return FALSE;
+    return false;
 
   switch ((insn2 >> 26) & 63)
     {
     default:
-      return FALSE;
+      return false;
 
     case 32: /* lwz */
     case 34: /* lbz */
@@ -8361,7 +8857,7 @@ xlate_pcrel_opt (uint64_t *pinsn1, uint6
 
     case 58: /* lwa, ld */
       if ((insn2 & 1) != 0)
-	return FALSE;
+	return false;
       insn1 = ((1ULL << 58) | (1ULL << 52)
 	       | (insn2 & 2 ? 41ULL << 26 : 57ULL << 26)
 	       | (insn2 & (31ULL << 21)));
@@ -8370,7 +8866,7 @@ xlate_pcrel_opt (uint64_t *pinsn1, uint6
 
     case 57: /* lxsd, lxssp */
       if ((insn2 & 3) < 2)
-	return FALSE;
+	return false;
       insn1 = ((1ULL << 58) | (1ULL << 52)
 	       | ((40ULL | (insn2 & 3)) << 26)
 	       | (insn2 & (31ULL << 21)));
@@ -8379,7 +8875,7 @@ xlate_pcrel_opt (uint64_t *pinsn1, uint6
 
     case 61: /* stxsd, stxssp, lxv, stxv  */
       if ((insn2 & 3) == 0)
-	return FALSE;
+	return false;
       else if ((insn2 & 3) >= 2)
 	{
 	  insn1 = ((1ULL << 58) | (1ULL << 52)
@@ -8402,9 +8898,18 @@ xlate_pcrel_opt (uint64_t *pinsn1, uint6
       off = insn2 & 0xffff;
       break;
 
+    case 6: /* lxvp, stxvp */
+      if ((insn2 & 0xe) != 0)
+	return false;
+      insn1 = ((1ULL << 58) | (1ULL << 52)
+	       | ((insn2 & 1) == 0 ? 58ULL << 26 : 62ULL << 26)
+	       | (insn2 & (31ULL << 21)));
+      off = insn2 & 0xfff0;
+      break;
+
     case 62: /* std, stq */
       if ((insn2 & 1) != 0)
-	return FALSE;
+	return false;
       insn1 = ((1ULL << 58) | (1ULL << 52)
 	       | ((insn2 & 2) == 0 ? 61ULL << 26 : 60ULL << 26)
 	       | (insn2 & (31ULL << 21)));
@@ -8415,13 +8920,13 @@ xlate_pcrel_opt (uint64_t *pinsn1, uint6
   *pinsn1 = insn1;
   *pinsn2 = (uint64_t) NOP << 32;
   *poff = (off ^ 0x8000) - 0x8000;
-  return TRUE;
+  return true;
 }
 
 /* Examine all relocs referencing .toc sections in order to remove
    unused .toc entries.  */
 
-bfd_boolean
+bool
 ppc64_elf_edit_toc (struct bfd_link_info *info)
 {
   bfd *ibfd;
@@ -8429,7 +8934,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
 
   htab->do_toc_opt = 1;
-  toc_inf.global_toc_syms = TRUE;
+  toc_inf.global_toc_syms = true;
   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
     {
       asection *toc, *sec;
@@ -8446,6 +8951,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
       toc = bfd_get_section_by_name (ibfd, ".toc");
       if (toc == NULL
 	  || toc->size == 0
+	  || (toc->flags & SEC_HAS_CONTENTS) == 0
 	  || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
 	  || discarded_section (toc))
 	continue;
@@ -8466,7 +8972,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 	      || (sec->flags & SEC_DEBUGGING) != 0)
 	    continue;
 
-	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
+	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, false);
 	  if (relstart == NULL)
 	    goto error_ret;
 
@@ -8574,7 +9080,9 @@ ppc64_elf_edit_toc (struct bfd_link_info
 		  || discarded_section (sym_sec))
 		continue;
 
-	      if (!SYMBOL_REFERENCES_LOCAL (info, h))
+	      if (!SYMBOL_REFERENCES_LOCAL (info, h)
+		  || (bfd_link_pic (info)
+		      && sym_sec == bfd_abs_section_ptr))
 		continue;
 
 	      if (h != NULL)
@@ -8623,19 +9131,15 @@ ppc64_elf_edit_toc (struct bfd_link_info
       if (used == NULL)
 	{
 	error_ret:
-	  if (local_syms != NULL
-	      && symtab_hdr->contents != (unsigned char *) local_syms)
+	  if (symtab_hdr->contents != (unsigned char *) local_syms)
 	    free (local_syms);
 	  if (sec != NULL
-	      && relstart != NULL
 	      && elf_section_data (sec)->relocs != relstart)
 	    free (relstart);
-	  if (toc_relocs != NULL
-	      && elf_section_data (toc)->relocs != toc_relocs)
+	  if (elf_section_data (toc)->relocs != toc_relocs)
 	    free (toc_relocs);
-	  if (skip != NULL)
-	    free (skip);
-	  return FALSE;
+	  free (skip);
+	  return false;
 	}
 
       /* Now check all kept sections that might reference the toc.
@@ -8796,7 +9300,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 	  bfd_byte *contents, *src;
 	  unsigned long off;
 	  Elf_Internal_Sym *sym;
-	  bfd_boolean local_toc_syms = FALSE;
+	  bool local_toc_syms = false;
 
 	  /* Shuffle the toc contents, and at the same time convert the
 	     skip array from booleans into offsets.  */
@@ -8872,7 +9376,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 		    {
 		      val = sym->st_value;
 		      if (val != 0)
-			local_toc_syms = TRUE;
+			local_toc_syms = true;
 		    }
 
 		  val += rel->r_addend;
@@ -8962,7 +9466,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 	    {
 	      toc_inf.toc = toc;
 	      toc_inf.skip = skip;
-	      toc_inf.global_toc_syms = FALSE;
+	      toc_inf.global_toc_syms = false;
 	      elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
 				      &toc_inf);
 	    }
@@ -8990,7 +9494,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 		    wrel->r_addend = rel->r_addend;
 		    ++wrel;
 		  }
-		else if (!dec_dynrel_count (rel->r_info, toc, info,
+		else if (!dec_dynrel_count (rel, toc, info,
 					    &local_syms, NULL, NULL))
 		  goto error_ret;
 
@@ -9001,8 +9505,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 	      rel_hdr->sh_size = toc->reloc_count * sz;
 	    }
 	}
-      else if (toc_relocs != NULL
-	       && elf_section_data (toc)->relocs != toc_relocs)
+      else if (elf_section_data (toc)->relocs != toc_relocs)
 	free (toc_relocs);
 
       if (local_syms != NULL
@@ -9053,14 +9556,12 @@ ppc64_elf_edit_toc (struct bfd_link_info
 	  if (relstart == NULL)
 	    {
 	    got_error_ret:
-	      if (local_syms != NULL
-		  && symtab_hdr->contents != (unsigned char *) local_syms)
+	      if (symtab_hdr->contents != (unsigned char *) local_syms)
 		free (local_syms);
 	      if (sec != NULL
-		  && relstart != NULL
 		  && elf_section_data (sec)->relocs != relstart)
 		free (relstart);
-	      return FALSE;
+	      return false;
 	    }
 
 	  for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
@@ -9117,7 +9618,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 		  insn = bfd_get_32 (ibfd, buf);
 		  if (insn_check == check_lo
 		      ? !ok_lo_toc_insn (insn, r_type)
-		      : ((insn & ((0x3f << 26) | 0x1f << 16))
+		      : ((insn & ((0x3fu << 26) | 0x1f << 16))
 			 != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
 		    {
 		      char str[12];
@@ -9160,7 +9661,12 @@ ppc64_elf_edit_toc (struct bfd_link_info
 		  || discarded_section (sym_sec))
 		continue;
 
-	      if (!SYMBOL_REFERENCES_LOCAL (info, h))
+	      if ((h ? h->type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC)
+		continue;
+
+	      if (!SYMBOL_REFERENCES_LOCAL (info, h)
+		  || (bfd_link_pic (info)
+		      && sym_sec == bfd_abs_section_ptr))
 		continue;
 
 	      if (h != NULL)
@@ -9188,7 +9694,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 						 rel->r_offset & ~3, 4))
 		    goto got_error_ret;
 		  insn = bfd_get_32 (ibfd, buf);
-		  if (((insn & ((0x3f << 26) | 0x1f << 16))
+		  if (((insn & ((0x3fu << 26) | 0x1f << 16))
 		       != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
 		    continue;
 		  break;
@@ -9201,7 +9707,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 						 rel->r_offset & ~3, 4))
 		    goto got_error_ret;
 		  insn = bfd_get_32 (ibfd, buf);
-		  if ((insn & (0x3f << 26 | 0x3)) != 58u << 26 /* ld */)
+		  if ((insn & (0x3fu << 26 | 0x3)) != 58u << 26 /* ld */)
 		    continue;
 		  break;
 
@@ -9218,7 +9724,7 @@ ppc64_elf_edit_toc (struct bfd_link_info
 		  if ((insn & (-1u << 18)) != ((1u << 26) | (1u << 20)))
 		    continue;
 		  insn = bfd_get_32 (ibfd, buf + 4);
-		  if ((insn & (0x3f << 26)) != 57u << 26)
+		  if ((insn & (0x3fu << 26)) != 57u << 26)
 		    continue;
 		  break;
 		}
@@ -9254,13 +9760,13 @@ ppc64_elf_edit_toc (struct bfd_link_info
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return true iff input section I references the TOC using
    instructions limited to +/-32k offsets.  */
 
-bfd_boolean
+bool
 ppc64_elf_has_small_toc_reloc (asection *i)
 {
   return (is_ppc64_elf (i->owner)
@@ -9275,7 +9781,7 @@ allocate_got (struct elf_link_hash_entry
 	      struct got_entry *gent)
 {
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
-  struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
+  struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h);
   int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
 		 ? 16 : 8);
   int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
@@ -9291,9 +9797,11 @@ allocate_got (struct elf_link_hash_entry
       htab->got_reli_size += rentsize;
     }
   else if (((bfd_link_pic (info)
-	     && !(gent->tls_type != 0
-		  && bfd_link_executable (info)
-		  && SYMBOL_REFERENCES_LOCAL (info, h)))
+	     && (gent->tls_type == 0
+		 ? !info->enable_dt_relr
+		 : !(bfd_link_executable (info)
+		     && SYMBOL_REFERENCES_LOCAL (info, h)))
+	     && !bfd_is_abs_symbol (&h->root))
 	    || (htab->elf.dynamic_sections_created
 		&& h->dynindx != -1
 		&& !SYMBOL_REFERENCES_LOCAL (info, h)))
@@ -9319,14 +9827,14 @@ merge_got_entries (struct got_entry **pe
 	    && ent2->tls_type == ent->tls_type
 	    && elf_gp (ent2->owner) == elf_gp (ent->owner))
 	  {
-	    ent2->is_indirect = TRUE;
+	    ent2->is_indirect = true;
 	    ent2->got.ent = ent;
 	  }
 }
 
 /* If H is undefined, make it dynamic if that makes sense.  */
 
-static bfd_boolean
+static bool
 ensure_undef_dynamic (struct bfd_link_info *info,
 		      struct elf_link_hash_entry *h)
 {
@@ -9340,13 +9848,25 @@ ensure_undef_dynamic (struct bfd_link_in
       && !h->forced_local
       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
     return bfd_elf_link_record_dynamic_symbol (info, h);
-  return TRUE;
+  return true;
+}
+
+/* Choose whether to use htab->iplt or htab->pltlocal rather than the
+   usual htab->elf.splt section for a PLT entry.  */
+
+static inline
+bool use_local_plt (struct bfd_link_info *info,
+			   struct elf_link_hash_entry *h)
+{
+  return (h == NULL
+	  || h->dynindx == -1
+	  || !elf_hash_table (info)->dynamic_sections_created);
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
@@ -9356,14 +9876,14 @@ allocate_dynrelocs (struct elf_link_hash
   struct got_entry **pgent, *gent;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
-  eh = (struct ppc_link_hash_entry *) h;
+  eh = ppc_elf_hash_entry (h);
   /* Run through the TLS GD got entries first if we're changing them
      to TPREL.  */
   if ((eh->tls_mask & (TLS_TLS | TLS_GDIE)) == (TLS_TLS | TLS_GDIE))
@@ -9417,7 +9937,7 @@ allocate_dynrelocs (struct elf_link_hash
 	/* Ensure we catch all the cases where this symbol should
 	   be made dynamic.  */
 	if (!ensure_undef_dynamic (info, h))
-	  return FALSE;
+	  return false;
 
 	if (!is_ppc64_elf (gent->owner))
 	  abort ();
@@ -9429,21 +9949,21 @@ allocate_dynrelocs (struct elf_link_hash
      IFUNCs which are handled even in static executables.  */
   if (!htab->elf.dynamic_sections_created
       && h->type != STT_GNU_IFUNC)
-    eh->dyn_relocs = NULL;
+    h->dyn_relocs = NULL;
 
   /* Discard relocs on undefined symbols that must be local.  */
   else if (h->root.type == bfd_link_hash_undefined
 	   && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
-    eh->dyn_relocs = NULL;
+    h->dyn_relocs = NULL;
 
   /* Also discard relocs on undefined weak syms with non-default
      visibility, or when dynamic_undefined_weak says so.  */
   else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-    eh->dyn_relocs = NULL;
+    h->dyn_relocs = NULL;
 
-  if (eh->dyn_relocs != NULL)
+  if (h->dyn_relocs != NULL)
     {
-      struct elf_dyn_relocs *p, **pp;
+      struct ppc_dyn_relocs *p, **pp;
 
       /* In the shared -Bsymbolic case, discard space allocated for
 	 dynamic pc-relative relocs against symbols which turn out to
@@ -9461,7 +9981,9 @@ allocate_dynrelocs (struct elf_link_hash
 	     avoid writing weird assembly.  */
 	  if (SYMBOL_CALLS_LOCAL (info, h))
 	    {
-	      for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	      for (pp = (struct ppc_dyn_relocs **) &h->dyn_relocs;
+		   (p = *pp) != NULL;
+		   )
 		{
 		  p->count -= p->pc_count;
 		  p->pc_count = 0;
@@ -9472,12 +9994,12 @@ allocate_dynrelocs (struct elf_link_hash
 		}
 	    }
 
-	  if (eh->dyn_relocs != NULL)
+	  if (h->dyn_relocs != NULL)
 	    {
 	      /* Ensure we catch all the cases where this symbol
 		 should be made dynamic.  */
 	      if (!ensure_undef_dynamic (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -9485,31 +10007,44 @@ allocate_dynrelocs (struct elf_link_hash
 	 relocs against symbols which are not dynamic.  */
       else if (h->type != STT_GNU_IFUNC)
 	{
-	  if (h->dynamic_adjusted
+	  if ((h->dynamic_adjusted
+	       || (h->ref_regular
+		   && h->root.type == bfd_link_hash_undefweak
+		   && (info->dynamic_undefined_weak > 0
+		       || !_bfd_elf_readonly_dynrelocs (h))))
 	      && !h->def_regular
 	      && !ELF_COMMON_DEF_P (h))
 	    {
 	      /* Ensure we catch all the cases where this symbol
 		 should be made dynamic.  */
 	      if (!ensure_undef_dynamic (info, h))
-		return FALSE;
+		return false;
 
 	      /* But if that didn't work out, discard dynamic relocs.  */
 	      if (h->dynindx == -1)
-		eh->dyn_relocs = NULL;
+		h->dyn_relocs = NULL;
 	    }
 	  else
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 	}
 
       /* Finally, allocate space.  */
-      for (p = eh->dyn_relocs; p != NULL; p = p->next)
-	{
-	  asection *sreloc = elf_section_data (p->sec)->sreloc;
-	  if (eh->elf.type == STT_GNU_IFUNC)
-	    sreloc = htab->elf.irelplt;
-	  sreloc->size += p->count * sizeof (Elf64_External_Rela);
-	}
+      for (p = (struct ppc_dyn_relocs *) h->dyn_relocs; p != NULL; p = p->next)
+	if (!discarded_section (p->sec))
+	  {
+	    unsigned int count;
+	    asection *sreloc = elf_section_data (p->sec)->sreloc;
+	    if (eh->elf.type == STT_GNU_IFUNC)
+	      sreloc = htab->elf.irelplt;
+	    count = p->count;
+	    if (info->enable_dt_relr
+		&& ((!NO_OPD_RELOCS
+		     && ppc64_elf_section_data (p->sec)->sec_type == sec_opd)
+		    || (eh->elf.type != STT_GNU_IFUNC
+			&& SYMBOL_REFERENCES_LOCAL (info, h))))
+	      count -= p->rel_count;
+	    sreloc->size += count * sizeof (Elf64_External_Rela);
+	  }
     }
 
   /* We might need a PLT entry when the symbol
@@ -9524,16 +10059,18 @@ allocate_dynrelocs (struct elf_link_hash
 	  && h->def_regular
 	  && !htab->elf.dynamic_sections_created
 	  && !htab->can_convert_all_inline_plt
-	  && (((struct ppc_link_hash_entry *) h)->tls_mask
+	  && (ppc_elf_hash_entry (h)->tls_mask
 	      & (TLS_TLS | PLT_KEEP)) == PLT_KEEP))
     {
       struct plt_entry *pent;
-      bfd_boolean doneone = FALSE;
+      bool doneone = false;
       for (pent = h->plt.plist; pent != NULL; pent = pent->next)
 	if (pent->plt.refcount > 0)
 	  {
-	    if (!htab->elf.dynamic_sections_created
-		|| h->dynindx == -1)
+	    if (!ensure_undef_dynamic (info, h))
+	      return false;
+
+	    if (use_local_plt (info, h))
 	      {
 		if (h->type == STT_GNU_IFUNC)
 		  {
@@ -9547,7 +10084,10 @@ allocate_dynrelocs (struct elf_link_hash
 		    s = htab->pltlocal;
 		    pent->plt.offset = s->size;
 		    s->size += LOCAL_PLT_ENTRY_SIZE (htab);
-		    s = bfd_link_pic (info) ? htab->relpltlocal : NULL;
+		    s = NULL;
+		    if (bfd_link_pic (info)
+			&& !(info->enable_dt_relr && !htab->opd_abi))
+		      s = htab->relpltlocal;
 		  }
 	      }
 	    else
@@ -9582,7 +10122,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      }
 	    if (s != NULL)
 	      s->size += sizeof (Elf64_External_Rela);
-	    doneone = TRUE;
+	    doneone = true;
 	  }
 	else
 	  pent->plt.offset = (bfd_vma) -1;
@@ -9598,7 +10138,7 @@ allocate_dynrelocs (struct elf_link_hash
       h->needs_plt = 0;
     }
 
-  return TRUE;
+  return true;
 }
 
 #define PPC_LO(v) ((v) & 0xffff)
@@ -9612,7 +10152,7 @@ allocate_dynrelocs (struct elf_link_hash
    to set up space for global entry stubs.  These are put in glink,
    after the branch table.  */
 
-static bfd_boolean
+static bool
 size_global_entry_stubs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
@@ -9621,18 +10161,18 @@ size_global_entry_stubs (struct elf_link
   asection *s, *plt;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (!h->pointer_equality_needed)
-    return TRUE;
+    return true;
 
   if (h->def_regular)
-    return TRUE;
+    return true;
 
   info = inf;
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   s = htab->global_entry;
   plt = htab->elf.splt;
@@ -9679,52 +10219,25 @@ size_global_entry_stubs (struct elf_link
 	s->size = stub_off + stub_size;
 	break;
       }
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *inf)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) inf;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo (_("%pB: dynamic relocation against `%pT'"
-				" in read-only section `%pA'\n"),
-			      sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_size_dynamic_sections (bfd *output_bfd,
 				 struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
   struct got_entry *first_tlsld;
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->elf.dynobj;
   if (dynobj == NULL)
@@ -9754,18 +10267,19 @@ ppc64_elf_size_dynamic_sections (bfd *ou
       unsigned char *lgot_masks;
       bfd_size_type locsymcount;
       Elf_Internal_Shdr *symtab_hdr;
+      Elf_Internal_Sym *local_syms;
+      Elf_Internal_Sym *isym;
 
       if (!is_ppc64_elf (ibfd))
 	continue;
 
       for (s = ibfd->sections; s != NULL; s = s->next)
 	{
-	  struct ppc_dyn_relocs *p;
+	  struct ppc_local_dyn_relocs *p;
 
 	  for (p = 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
@@ -9774,10 +10288,20 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 		}
 	      else if (p->count != 0)
 		{
-		  asection *srel = elf_section_data (p->sec)->sreloc;
+		  unsigned int count;
+		  asection *srel;
+
+		  count = p->count;
+		  if (info->enable_dt_relr
+		      && ((!NO_OPD_RELOCS
+			   && (ppc64_elf_section_data (p->sec)->sec_type
+			       == sec_opd))
+			  || !p->ifunc))
+		    count -= p->rel_count;
+		  srel = elf_section_data (p->sec)->sreloc;
 		  if (p->ifunc)
 		    srel = htab->elf.irelplt;
-		  srel->size += p->count * sizeof (Elf64_External_Rela);
+		  srel->size += count * sizeof (Elf64_External_Rela);
 		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
 		    info->flags |= DF_TEXTREL;
 		}
@@ -9794,8 +10318,18 @@ ppc64_elf_size_dynamic_sections (bfd *ou
       local_plt = (struct plt_entry **) end_lgot_ents;
       end_local_plt = local_plt + locsymcount;
       lgot_masks = (unsigned char *) end_local_plt;
+      local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+      if (local_syms == NULL && locsymcount != 0)
+	{
+	  local_syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, locsymcount,
+					     0, NULL, NULL, NULL);
+	  if (local_syms == NULL)
+	    return false;
+	}
       s = ppc64_elf_tdata (ibfd)->got;
-      for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
+      for (isym = local_syms;
+	   lgot_ents < end_lgot_ents;
+	   ++lgot_ents, ++lgot_masks, isym++)
 	{
 	  struct got_entry **pent, *ent;
 
@@ -9826,8 +10360,10 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 			htab->got_reli_size += rel_size;
 		      }
 		    else if (bfd_link_pic (info)
-			     && !(ent->tls_type != 0
-				  && bfd_link_executable (info)))
+			     && (ent->tls_type == 0
+				 ? !info->enable_dt_relr
+				 : !bfd_link_executable (info))
+			     && isym->st_shndx != SHN_ABS)
 		      {
 			asection *srel = ppc64_elf_tdata (ibfd)->relgot;
 			srel->size += rel_size;
@@ -9838,6 +10374,14 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 	    else
 	      *pent = ent->next;
 	}
+      if (local_syms != NULL
+	  && symtab_hdr->contents != (unsigned char *) local_syms)
+	{
+	  if (!info->keep_memory)
+	    free (local_syms);
+	  else
+	    symtab_hdr->contents = (unsigned char *) local_syms;
+	}
 
       /* Allocate space for plt calls to local syms.  */
       lgot_masks = (unsigned char *) end_local_plt;
@@ -9863,7 +10407,8 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 		    s = htab->pltlocal;
 		    ent->plt.offset = s->size;
 		    s->size += LOCAL_PLT_ENTRY_SIZE (htab);
-		    if (bfd_link_pic (info))
+		    if (bfd_link_pic (info)
+			&& !(info->enable_dt_relr && !htab->opd_abi))
 		      htab->relpltlocal->size += sizeof (Elf64_External_Rela);
 		  }
 	      }
@@ -9892,7 +10437,7 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 	{
 	  if (!htab->do_multi_toc && first_tlsld != NULL)
 	    {
-	      ent->is_indirect = TRUE;
+	      ent->is_indirect = true;
 	      ent->got.ent = first_tlsld;
 	    }
 	  else
@@ -9916,13 +10461,13 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
 
-      if (s == htab->brlt || s == htab->relbrlt)
+      if (s == htab->brlt || s == htab->relbrlt || s == htab->elf.srelrdyn)
 	/* These haven't been allocated yet;  don't strip.  */
 	continue;
       else if (s == htab->elf.sgot
@@ -9943,12 +10488,12 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 	    /* Not sized yet.  */
 	    continue;
 	}
-      else if (CONST_STRNEQ (s->name, ".rela"))
+      else if (startswith (s->name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
 	      if (s != htab->elf.srelplt)
-		relocs = TRUE;
+		relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -9992,7 +10537,7 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 	 the GOT and .dynrelro.  */
       s->contents = bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
@@ -10009,7 +10554,7 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 	    {
 	      s->contents = bfd_zalloc (ibfd, s->size);
 	      if (s->contents == NULL)
-		return FALSE;
+		return false;
 	    }
 	}
       s = ppc64_elf_tdata (ibfd)->relgot;
@@ -10021,8 +10566,8 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 	    {
 	      s->contents = bfd_zalloc (ibfd, s->size);
 	      if (s->contents == NULL)
-		return FALSE;
-	      relocs = TRUE;
+		return false;
+	      relocs = true;
 	      s->reloc_count = 0;
 	    }
 	}
@@ -10030,7 +10575,7 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 
   if (htab->elf.dynamic_sections_created)
     {
-      bfd_boolean tls_opt;
+      bool tls_opt;
 
       /* Add some entries to the .dynamic section.  We fill in the
 	 values later, in ppc64_elf_finish_dynamic_sections, but we
@@ -10043,7 +10588,7 @@ ppc64_elf_size_dynamic_sections (bfd *ou
       if (bfd_link_executable (info))
 	{
 	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
+	    return false;
 	}
 
       if (htab->elf.splt != NULL && htab->elf.splt->size != 0)
@@ -10053,23 +10598,25 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
 	      || !add_dynamic_entry (DT_JMPREL, 0)
 	      || !add_dynamic_entry (DT_PPC64_GLINK, 0))
-	    return FALSE;
+	    return false;
 	}
 
       if (NO_OPD_RELOCS && abiversion (output_bfd) <= 1)
 	{
 	  if (!add_dynamic_entry (DT_PPC64_OPD, 0)
 	      || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
-	    return FALSE;
+	    return false;
 	}
 
       tls_opt = (htab->params->tls_get_addr_opt
-		 && htab->tls_get_addr_fd != NULL
-		 && htab->tls_get_addr_fd->elf.plt.plist != NULL);
+		 && ((htab->tls_get_addr_fd != NULL
+		      && htab->tls_get_addr_fd->elf.plt.plist != NULL)
+		     || (htab->tga_desc_fd != NULL
+			 && htab->tga_desc_fd->elf.plt.plist != NULL)));
       if (tls_opt || !htab->opd_abi)
 	{
 	  if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
-	    return FALSE;
+	    return false;
 	}
 
       if (relocs)
@@ -10077,41 +10624,42 @@ ppc64_elf_size_dynamic_sections (bfd *ou
 	  if (!add_dynamic_entry (DT_RELA, 0)
 	      || !add_dynamic_entry (DT_RELASZ, 0)
 	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
-	    return FALSE;
+	    return false;
 
 	  /* If any dynamic relocs apply to a read-only section,
 	     then we need a DT_TEXTREL entry.  */
 	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
+	    elf_link_hash_traverse (&htab->elf,
+				    _bfd_elf_maybe_set_textrel, info);
 
 	  if ((info->flags & DF_TEXTREL) != 0)
 	    {
 	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
+		return false;
 	    }
 	}
     }
 #undef add_dynamic_entry
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_hash_symbol (struct elf_link_hash_entry *h)
 {
   if (h->plt.plist != NULL
       && !h->def_regular
       && !h->pointer_equality_needed)
-    return FALSE;
+    return false;
 
   return _bfd_elf_hash_symbol (h);
 }
 
 /* Determine the type of stub needed, if any, for a call.  */
 
-static inline enum ppc_stub_type
+static inline enum ppc_stub_main_type
 ppc_type_of_stub (asection *input_sec,
 		  const Elf_Internal_Rela *rel,
 		  struct ppc_link_hash_entry **hash,
@@ -10210,7 +10758,7 @@ ppc_type_of_stub (asection *input_sec,
    .	add/ldx	%r12,%r11,%r12  */
 
 static bfd_byte *
-build_offset (bfd *abfd, bfd_byte *p, bfd_vma off, bfd_boolean load)
+build_offset (bfd *abfd, bfd_byte *p, bfd_vma off, bool load)
 {
   bfd_put_32 (abfd, MFLR_R12, p);
   p += 4;
@@ -10389,8 +10937,8 @@ emit_relocs_for_offset (struct bfd_link_
 }
 
 static bfd_byte *
-build_powerxx_offset (bfd *abfd, bfd_byte *p, bfd_vma off, int odd,
-		      bfd_boolean load)
+build_power10_offset (bfd *abfd, bfd_byte *p, bfd_vma off, int odd,
+		      bool load)
 {
   uint64_t insn;
   if (off - odd + (1ULL << 33) < 1ULL << 34)
@@ -10471,7 +11019,7 @@ build_powerxx_offset (bfd *abfd, bfd_byt
 }
 
 static unsigned int
-size_powerxx_offset (bfd_vma off, int odd)
+size_power10_offset (bfd_vma off, int odd)
 {
   if (off - odd + (1ULL << 33) < 1ULL << 34)
     return odd + 8;
@@ -10482,7 +11030,7 @@ size_powerxx_offset (bfd_vma off, int od
 }
 
 static unsigned int
-num_relocs_for_powerxx_offset (bfd_vma off, int odd)
+num_relocs_for_power10_offset (bfd_vma off, int odd)
 {
   if (off - odd + (1ULL << 33) < 1ULL << 34)
     return 1;
@@ -10493,7 +11041,7 @@ num_relocs_for_powerxx_offset (bfd_vma o
 }
 
 static Elf_Internal_Rela *
-emit_relocs_for_powerxx_offset (struct bfd_link_info *info,
+emit_relocs_for_power10_offset (struct bfd_link_info *info,
 				Elf_Internal_Rela *r, bfd_vma roff,
 				bfd_vma targ, bfd_vma off, int odd)
 {
@@ -10599,55 +11147,61 @@ eh_advance_size (unsigned int delta)
 static inline unsigned int
 plt_stub_size (struct ppc_link_hash_table *htab,
 	       struct ppc_stub_hash_entry *stub_entry,
-	       bfd_vma off)
+	       bfd_vma off,
+	       unsigned int odd)
 {
   unsigned size;
 
-  if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
+  if (stub_entry->type.sub == ppc_stub_notoc)
     {
-      if (htab->powerxx_stubs)
-	{
-	  bfd_vma start = (stub_entry->stub_offset
-			   + stub_entry->group->stub_sec->output_offset
-			   + stub_entry->group->stub_sec->output_section->vma);
-	  if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
-	    start += 4;
-	  size = 8 + size_powerxx_offset (off, start & 4);
-	}
-      else
-	size = 8 + size_offset (off - 8);
-      if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
+      size = 8 + size_power10_offset (off, odd);
+      if (stub_entry->type.r2save)
 	size += 4;
-      return size;
     }
-
-  size = 12;
-  if (ALWAYS_EMIT_R2SAVE
-      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
-    size += 4;
-  if (PPC_HA (off) != 0)
-    size += 4;
-  if (htab->opd_abi)
+  else if (stub_entry->type.sub == ppc_stub_p9notoc)
     {
-      size += 4;
-      if (htab->params->plt_static_chain)
+      size = 8 + size_offset (off - 8);
+      if (stub_entry->type.r2save)
+	size += 4;
+    }
+  else
+    {
+      size = 12;
+      if (ALWAYS_EMIT_R2SAVE || stub_entry->type.r2save)
 	size += 4;
-      if (htab->params->plt_thread_safe
-	  && htab->elf.dynamic_sections_created
-	  && stub_entry->h != NULL
-	  && stub_entry->h->elf.dynindx != -1)
-	size += 8;
-      if (PPC_HA (off + 8 + 8 * htab->params->plt_static_chain) != PPC_HA (off))
+      if (PPC_HA (off) != 0)
 	size += 4;
+      if (htab->opd_abi)
+	{
+	  size += 4;
+	  if (htab->params->plt_static_chain)
+	    size += 4;
+	  if (htab->params->plt_thread_safe
+	      && htab->elf.dynamic_sections_created
+	      && stub_entry->h != NULL
+	      && stub_entry->h->elf.dynindx != -1)
+	    size += 8;
+	  if (PPC_HA (off + 8 + 8 * htab->params->plt_static_chain)
+	      != PPC_HA (off))
+	    size += 4;
+	}
     }
   if (stub_entry->h != NULL
-      && (stub_entry->h == htab->tls_get_addr_fd
-	  || stub_entry->h == htab->tls_get_addr)
+      && is_tls_get_addr (&stub_entry->h->elf, htab)
       && htab->params->tls_get_addr_opt)
     {
-      size += 7 * 4;
-      if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
-	size += 6 * 4;
+      if (!htab->params->no_tls_get_addr_regsave)
+	{
+	  size += 30 * 4;
+	  if (stub_entry->type.r2save)
+	    size += 4;
+	}
+      else
+	{
+	  size += 7 * 4;
+	  if (stub_entry->type.r2save)
+	    size += 6 * 4;
+	}
     }
   return size;
 }
@@ -10659,31 +11213,25 @@ plt_stub_size (struct ppc_link_hash_tabl
    boundaries if we align, then return the padding needed to do so.  */
 
 static inline unsigned int
-plt_stub_pad (struct ppc_link_hash_table *htab,
-	      struct ppc_stub_hash_entry *stub_entry,
-	      bfd_vma plt_off)
-{
-  int stub_align;
-  unsigned stub_size;
-  bfd_vma stub_off = stub_entry->group->stub_sec->size;
-
-  if (htab->params->plt_stub_align >= 0)
-    {
-      stub_align = 1 << htab->params->plt_stub_align;
-      if ((stub_off & (stub_align - 1)) != 0)
-	return stub_align - (stub_off & (stub_align - 1));
-      return 0;
-    }
+plt_stub_pad (int plt_stub_align,
+	      bfd_vma stub_off,
+	      unsigned int stub_size)
+{
+  unsigned int stub_align;
 
-  stub_align = 1 << -htab->params->plt_stub_align;
-  stub_size = plt_stub_size (htab, stub_entry, plt_off);
-  if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
-      > ((stub_size - 1) & -stub_align))
-    return stub_align - (stub_off & (stub_align - 1));
-  return 0;
+  if (plt_stub_align >= 0)
+    stub_align = 1u << plt_stub_align;
+  else
+    {
+      stub_align = 1u << -plt_stub_align;
+      if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
+	  <= ((stub_size - 1) & -stub_align))
+	return 0;
+    }
+  return stub_align - 1 - ((stub_off - 1) & (stub_align - 1));
 }
 
-/* Build a .plt call stub.  */
+/* Build a toc using .plt call stub.  */
 
 static inline bfd_byte *
 build_plt_stub (struct ppc_link_hash_table *htab,
@@ -10691,20 +11239,20 @@ build_plt_stub (struct ppc_link_hash_tab
 		bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
 {
   bfd *obfd = htab->params->stub_bfd;
-  bfd_boolean plt_load_toc = htab->opd_abi;
-  bfd_boolean plt_static_chain = htab->params->plt_static_chain;
-  bfd_boolean plt_thread_safe = (htab->params->plt_thread_safe
-				 && htab->elf.dynamic_sections_created
-				 && stub_entry->h != NULL
-				 && stub_entry->h->elf.dynindx != -1);
-  bfd_boolean use_fake_dep = plt_thread_safe;
+  bool plt_load_toc = htab->opd_abi;
+  bool plt_static_chain = htab->params->plt_static_chain;
+  bool plt_thread_safe = (htab->params->plt_thread_safe
+			  && htab->elf.dynamic_sections_created
+			  && stub_entry->h != NULL
+			  && stub_entry->h->elf.dynindx != -1);
+  bool use_fake_dep = plt_thread_safe;
   bfd_vma cmp_branch_off = 0;
 
   if (!ALWAYS_USE_FAKE_DEP
       && plt_load_toc
       && plt_thread_safe
-      && !((stub_entry->h == htab->tls_get_addr_fd
-	    || stub_entry->h == htab->tls_get_addr)
+      && !(stub_entry->h != NULL
+	   && is_tls_get_addr (&stub_entry->h->elf, htab)
 	   && htab->params->tls_get_addr_opt))
     {
       bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
@@ -10719,8 +11267,7 @@ build_plt_stub (struct ppc_link_hash_tab
 	    + htab->glink->output_offset
 	    + htab->glink->output_section->vma);
       from = (p - stub_entry->group->stub_sec->contents
-	      + 4 * (ALWAYS_EMIT_R2SAVE
-		     || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+	      + 4 * (ALWAYS_EMIT_R2SAVE || stub_entry->type.r2save)
 	      + 4 * (PPC_HA (offset) != 0)
 	      + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
 		     != PPC_HA (offset))
@@ -10736,8 +11283,7 @@ build_plt_stub (struct ppc_link_hash_tab
     {
       if (r != NULL)
 	{
-	  if (ALWAYS_EMIT_R2SAVE
-	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+	  if (ALWAYS_EMIT_R2SAVE || stub_entry->type.r2save)
 	    r[0].r_offset += 4;
 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
 	  r[1].r_offset = r[0].r_offset + 4;
@@ -10765,8 +11311,7 @@ build_plt_stub (struct ppc_link_hash_tab
 		}
 	    }
 	}
-      if (ALWAYS_EMIT_R2SAVE
-	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+      if (ALWAYS_EMIT_R2SAVE || stub_entry->type.r2save)
 	bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),	p += 4;
       if (plt_load_toc)
 	{
@@ -10801,8 +11346,7 @@ build_plt_stub (struct ppc_link_hash_tab
     {
       if (r != NULL)
 	{
-	  if (ALWAYS_EMIT_R2SAVE
-	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+	  if (ALWAYS_EMIT_R2SAVE || stub_entry->type.r2save)
 	    r[0].r_offset += 4;
 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
 	  if (plt_load_toc)
@@ -10827,8 +11371,7 @@ build_plt_stub (struct ppc_link_hash_tab
 		}
 	    }
 	}
-      if (ALWAYS_EMIT_R2SAVE
-	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+      if (ALWAYS_EMIT_R2SAVE || stub_entry->type.r2save)
 	bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p),	p += 4;
       bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (offset), p),	p += 4;
       if (plt_load_toc
@@ -10863,70 +11406,145 @@ build_plt_stub (struct ppc_link_hash_tab
 
 /* Build a special .plt call stub for __tls_get_addr.  */
 
-#define LD_R11_0R3	0xe9630000
+#define LD_R0_0R3	0xe8030000
 #define LD_R12_0R3	0xe9830000
 #define MR_R0_R3	0x7c601b78
-#define CMPDI_R11_0	0x2c2b0000
+#define CMPDI_R0_0	0x2c200000
 #define ADD_R3_R12_R13	0x7c6c6a14
 #define BEQLR		0x4d820020
 #define MR_R3_R0	0x7c030378
-#define STD_R11_0R1	0xf9610000
 #define BCTRL		0x4e800421
-#define LD_R11_0R1	0xe9610000
-#define MTLR_R11	0x7d6803a6
 
-static inline bfd_byte *
-build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
+static bfd_byte *
+build_tls_get_addr_head (struct ppc_link_hash_table *htab,
 			 struct ppc_stub_hash_entry *stub_entry,
-			 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
+			 bfd_byte *p)
 {
   bfd *obfd = htab->params->stub_bfd;
-  bfd_byte *loc = p;
 
-  bfd_put_32 (obfd, LD_R11_0R3 + 0, p),		p += 4;
+  bfd_put_32 (obfd, LD_R0_0R3 + 0, p),		p += 4;
   bfd_put_32 (obfd, LD_R12_0R3 + 8, p),		p += 4;
+  bfd_put_32 (obfd, CMPDI_R0_0, p),		p += 4;
   bfd_put_32 (obfd, MR_R0_R3, p),		p += 4;
-  bfd_put_32 (obfd, CMPDI_R11_0, p),		p += 4;
   bfd_put_32 (obfd, ADD_R3_R12_R13, p),		p += 4;
   bfd_put_32 (obfd, BEQLR, p),			p += 4;
   bfd_put_32 (obfd, MR_R3_R0, p),		p += 4;
-  if (r != NULL)
-    r[0].r_offset += 7 * 4;
-  if (stub_entry->stub_type != ppc_stub_plt_call_r2save)
-    return build_plt_stub (htab, stub_entry, p, offset, r);
-
-  bfd_put_32 (obfd, MFLR_R11, p),		p += 4;
-  bfd_put_32 (obfd, STD_R11_0R1 + STK_LINKER (htab), p), p += 4;
-
-  if (r != NULL)
-    r[0].r_offset += 2 * 4;
-  p = build_plt_stub (htab, stub_entry, p, offset, r);
-  bfd_put_32 (obfd, BCTRL, p - 4);
-
-  bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p),	p += 4;
-  bfd_put_32 (obfd, LD_R11_0R1 + STK_LINKER (htab), p),	p += 4;
-  bfd_put_32 (obfd, MTLR_R11, p),		p += 4;
-  bfd_put_32 (obfd, BLR, p),			p += 4;
+
+  if (!htab->params->no_tls_get_addr_regsave)
+    p = tls_get_addr_prologue (obfd, p, htab);
+  else if (stub_entry->type.r2save)
+    {
+      bfd_put_32 (obfd, MFLR_R0, p);
+      p += 4;
+      bfd_put_32 (obfd, STD_R0_0R1 + STK_LINKER (htab), p);
+      p += 4;
+    }
+  return p;
+}
+
+static bfd_byte *
+build_tls_get_addr_tail (struct ppc_link_hash_table *htab,
+			 struct ppc_stub_hash_entry *stub_entry,
+			 bfd_byte *p,
+			 bfd_byte *loc)
+{
+  bfd *obfd = htab->params->stub_bfd;
+
+  if (!htab->params->no_tls_get_addr_regsave)
+    {
+      bfd_put_32 (obfd, BCTRL, p - 4);
+
+      if (stub_entry->type.r2save)
+	{
+	  bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p);
+	  p += 4;
+	}
+      p = tls_get_addr_epilogue (obfd, p, htab);
+    }
+  else if (stub_entry->type.r2save)
+    {
+      bfd_put_32 (obfd, BCTRL, p - 4);
+
+      bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p);
+      p += 4;
+      bfd_put_32 (obfd, LD_R0_0R1 + STK_LINKER (htab), p);
+      p += 4;
+      bfd_put_32 (obfd, MTLR_R0, p);
+      p += 4;
+      bfd_put_32 (obfd, BLR, p);
+      p += 4;
+    }
 
   if (htab->glink_eh_frame != NULL
       && htab->glink_eh_frame->size != 0)
     {
       bfd_byte *base, *eh;
-      unsigned int lr_used, delta;
 
       base = htab->glink_eh_frame->contents + stub_entry->group->eh_base + 17;
       eh = base + stub_entry->group->eh_size;
-      lr_used = stub_entry->stub_offset + (p - 20 - loc);
-      delta = lr_used - stub_entry->group->lr_restore;
-      stub_entry->group->lr_restore = lr_used + 16;
-      eh = eh_advance (htab->elf.dynobj, eh, delta);
-      *eh++ = DW_CFA_offset_extended_sf;
-      *eh++ = 65;
-      *eh++ = -(STK_LINKER (htab) / 8) & 0x7f;
-      *eh++ = DW_CFA_advance_loc + 4;
-      *eh++ = DW_CFA_restore_extended;
-      *eh++ = 65;
-      stub_entry->group->eh_size = eh - base;
+
+      if (!htab->params->no_tls_get_addr_regsave)
+	{
+	  unsigned int cfa_updt, delta, i;
+
+	  /* After the bctrl, lr has been modified so we need to emit
+	     .eh_frame info saying the return address is on the stack.  In
+	     fact we must put the EH info at or before the call rather
+	     than after it, because the EH info for a call needs to be
+	     specified by that point.
+	     See libgcc/unwind-dw2.c execute_cfa_program.
+	     Any stack pointer update must be described immediately after
+	     the instruction making the change, and since the stdu occurs
+	     after saving regs we put all the reg saves and the cfa
+	     change there.  */
+	  cfa_updt = stub_entry->stub_offset + 18 * 4;
+	  delta = cfa_updt - stub_entry->group->lr_restore;
+	  stub_entry->group->lr_restore
+	    = stub_entry->stub_offset + (p - loc) - 4;
+	  eh = eh_advance (htab->elf.dynobj, eh, delta);
+	  *eh++ = DW_CFA_def_cfa_offset;
+	  if (htab->opd_abi)
+	    {
+	      *eh++ = 128;
+	      *eh++ = 1;
+	    }
+	  else
+	    *eh++ = 96;
+	  *eh++ = DW_CFA_offset_extended_sf;
+	  *eh++ = 65;
+	  *eh++ = (-16 / 8) & 0x7f;
+	  for (i = 4; i < 12; i++)
+	    {
+	      *eh++ = DW_CFA_offset + i;
+	      *eh++ = (htab->opd_abi ? 13 : 12) - i;
+	    }
+	  *eh++ = (DW_CFA_advance_loc
+		   + (stub_entry->group->lr_restore - 8 - cfa_updt) / 4);
+	  *eh++ = DW_CFA_def_cfa_offset;
+	  *eh++ = 0;
+	  for (i = 4; i < 12; i++)
+	    *eh++ = DW_CFA_restore + i;
+	  *eh++ = DW_CFA_advance_loc + 2;
+	  *eh++ = DW_CFA_restore_extended;
+	  *eh++ = 65;
+	  stub_entry->group->eh_size = eh - base;
+	}
+      else if (stub_entry->type.r2save)
+	{
+	  unsigned int lr_used, delta;
+
+	  lr_used = stub_entry->stub_offset + (p - 20 - loc);
+	  delta = lr_used - stub_entry->group->lr_restore;
+	  stub_entry->group->lr_restore = lr_used + 16;
+	  eh = eh_advance (htab->elf.dynobj, eh, delta);
+	  *eh++ = DW_CFA_offset_extended_sf;
+	  *eh++ = 65;
+	  *eh++ = -(STK_LINKER (htab) / 8) & 0x7f;
+	  *eh++ = DW_CFA_advance_loc + 4;
+	  *eh++ = DW_CFA_restore_extended;
+	  *eh++ = 65;
+	  stub_entry->group->eh_size = eh - base;
+	}
     }
   return p;
 }
@@ -10961,11 +11579,29 @@ get_relocs (asection *sec, int count)
   return relocs;
 }
 
+static bool
+swap_reloc_out (bfd *obfd, Elf_Internal_Rela *rel, bfd_byte *loc, asection *s)
+{
+  if ((size_t) (loc - s->contents) >= s->size)
+    return false;
+  bfd_elf64_swap_reloca_out (obfd, rel, loc);
+  return true;
+}
+
+static bool
+count_and_swap_reloc_out (bfd *obfd, Elf_Internal_Rela *rel, asection *s)
+{
+  bfd_byte *loc = s->contents;
+  loc += s->reloc_count++ * sizeof (Elf64_External_Rela);
+  return swap_reloc_out (obfd, rel, loc, s);
+}
+
+
 /* Convert the relocs R[0] thru R[-NUM_REL+1], which are all no-symbol
    forms, to the equivalent relocs against the global symbol given by
    STUB_ENTRY->H.  */
 
-static bfd_boolean
+static bool
 use_global_in_relocs (struct ppc_link_hash_table *htab,
 		      struct ppc_stub_hash_entry *stub_entry,
 		      Elf_Internal_Rela *r, unsigned int num_rel)
@@ -10989,7 +11625,7 @@ use_global_in_relocs (struct ppc_link_ha
       hsize = (htab->stub_globals + 1) * sizeof (*hashes);
       hashes = bfd_zalloc (htab->params->stub_bfd, hsize);
       if (hashes == NULL)
-	return FALSE;
+	return false;
       elf_sym_hashes (htab->params->stub_bfd) = hashes;
       htab->stub_globals = 1;
     }
@@ -11000,9 +11636,7 @@ use_global_in_relocs (struct ppc_link_ha
     h = ppc_follow_link (h->oh);
   BFD_ASSERT (h->elf.root.type == bfd_link_hash_defined
 	      || h->elf.root.type == bfd_link_hash_defweak);
-  symval = (h->elf.root.u.def.value
-	    + h->elf.root.u.def.section->output_offset
-	    + h->elf.root.u.def.section->output_section->vma);
+  symval = defined_sym_val (&h->elf);
   while (num_rel-- != 0)
     {
       r->r_info = ELF64_R_INFO (symndx, ELF64_R_TYPE (r->r_info));
@@ -11017,7 +11651,7 @@ use_global_in_relocs (struct ppc_link_ha
 	r->r_addend -= symval;
       --r;
     }
-  return TRUE;
+  return true;
 }
 
 static bfd_vma
@@ -11055,13 +11689,53 @@ get_r2off (struct bfd_link_info *info,
   return r2off;
 }
 
-static bfd_boolean
+/* Debug dump.  */
+
+static void
+dump_stub (const char *header,
+	   struct ppc_stub_hash_entry *stub_entry,
+	   size_t end_offset)
+{
+  const char *t1, *t2, *t3;
+  switch (stub_entry->type.main)
+    {
+    case ppc_stub_none:		t1 = "none";		break;
+    case ppc_stub_long_branch:	t1 = "long_branch";	break;
+    case ppc_stub_plt_branch:	t1 = "plt_branch";	break;
+    case ppc_stub_plt_call:	t1 = "plt_call";	break;
+    case ppc_stub_global_entry:	t1 = "global_entry";	break;
+    case ppc_stub_save_res:	t1 = "save_res";	break;
+    default:			t1 = "???";		break;
+    }
+  switch (stub_entry->type.sub)
+    {
+    case ppc_stub_toc:		t2 = "toc";		break;
+    case ppc_stub_notoc:	t2 = "notoc";		break;
+    case ppc_stub_p9notoc:	t2 = "p9notoc";		break;
+    default:			t2 = "???";		break;
+    }
+  t3 = stub_entry->type.r2save ? "r2save" : "";
+  fprintf (stderr, "%s id = %u type = %s:%s:%s\n",
+	   header, stub_entry->id, t1, t2, t3);
+  fprintf (stderr, "name = %s\n", stub_entry->root.string);
+  fprintf (stderr, "offset = 0x%" PRIx64 ":", stub_entry->stub_offset);
+  for (size_t i = stub_entry->stub_offset; i < end_offset; i += 4)
+    {
+      asection *stub_sec = stub_entry->group->stub_sec;
+      uint32_t *p = (uint32_t *) (stub_sec->contents + i);
+      fprintf (stderr, " %08x", (uint32_t) bfd_get_32 (stub_sec->owner, p));
+    }
+  fprintf (stderr, "\n");
+}
+
+static bool
 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 {
   struct ppc_stub_hash_entry *stub_entry;
   struct ppc_branch_hash_entry *br_entry;
   struct bfd_link_info *info;
   struct ppc_link_hash_table *htab;
+  bfd *obfd;
   bfd_byte *loc;
   bfd_byte *p, *relp;
   bfd_vma targ, off;
@@ -11069,6 +11743,7 @@ ppc_build_one_stub (struct bfd_hash_entr
   asection *plt;
   int num_rel;
   int odd;
+  bool is_tga;
 
   /* Massage our args to the form they really have.  */
   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
@@ -11076,16 +11751,37 @@ ppc_build_one_stub (struct bfd_hash_entr
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
-  BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
+  struct _ppc64_elf_section_data *esd
+    = ppc64_elf_section_data (stub_entry->group->stub_sec);
+  ++htab->stub_id;
+  if (stub_entry->id != htab->stub_id
+      || (stub_entry->type.main != ppc_stub_save_res
+	  && stub_entry->stub_offset < stub_entry->group->stub_sec->size))
+    {
+      BFD_ASSERT (0);
+      if (stub_entry->id != htab->stub_id)
+	fprintf (stderr, "Expected id %u, got %u\n",
+		 htab->stub_id, stub_entry->id);
+      if (stub_entry->stub_offset < stub_entry->group->stub_sec->size)
+	fprintf (stderr, "Expected offset >= %" PRIx64 ", got %"
+		 PRIx64 "\n", stub_entry->group->stub_sec->size,
+		 stub_entry->stub_offset);
+      if (esd->sec_type == sec_stub)
+	dump_stub ("Previous:", esd->u.last_ent, stub_entry->stub_offset);
+      dump_stub ("Current:", stub_entry, 0);
+    }
+  if (esd->sec_type == sec_normal)
+    esd->sec_type = sec_stub;
+  if (esd->sec_type == sec_stub)
+    esd->u.last_ent = stub_entry;
   loc = stub_entry->group->stub_sec->contents + stub_entry->stub_offset;
 
-  htab->stub_count[stub_entry->stub_type - 1] += 1;
-  switch (stub_entry->stub_type)
+  htab->stub_count[stub_entry->type.main - 1] += 1;
+  if (stub_entry->type.main == ppc_stub_long_branch
+      && stub_entry->type.sub == ppc_stub_toc)
     {
-    case ppc_stub_long_branch:
-    case ppc_stub_long_branch_r2off:
       /* Branches are relative.  This is where we are going to.  */
       targ = (stub_entry->target_value
 	      + stub_entry->target_section->output_offset
@@ -11099,32 +11795,31 @@ ppc_build_one_stub (struct bfd_hash_entr
       off = targ - off;
 
       p = loc;
-      if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
+      obfd = htab->params->stub_bfd;
+      if (stub_entry->type.r2save)
 	{
 	  bfd_vma r2off = get_r2off (info, stub_entry);
 
 	  if (r2off == (bfd_vma) -1)
 	    {
-	      htab->stub_error = TRUE;
-	      return FALSE;
+	      htab->stub_error = true;
+	      return false;
 	    }
-	  bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
+	  bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p);
 	  p += 4;
 	  if (PPC_HA (r2off) != 0)
 	    {
-	      bfd_put_32 (htab->params->stub_bfd,
-			  ADDIS_R2_R2 | PPC_HA (r2off), p);
+	      bfd_put_32 (obfd, ADDIS_R2_R2 | PPC_HA (r2off), p);
 	      p += 4;
 	    }
 	  if (PPC_LO (r2off) != 0)
 	    {
-	      bfd_put_32 (htab->params->stub_bfd,
-			  ADDI_R2_R2 | PPC_LO (r2off), p);
+	      bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (r2off), p);
 	      p += 4;
 	    }
 	  off -= p - loc;
 	}
-      bfd_put_32 (htab->params->stub_bfd, B_DOT | (off & 0x3fffffc), p);
+      bfd_put_32 (obfd, B_DOT | (off & 0x3fffffc), p);
       p += 4;
 
       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
@@ -11132,41 +11827,41 @@ ppc_build_one_stub (struct bfd_hash_entr
 	  _bfd_error_handler
 	    (_("long branch stub `%s' offset overflow"),
 	     stub_entry->root.string);
-	  htab->stub_error = TRUE;
-	  return FALSE;
+	  htab->stub_error = true;
+	  return false;
 	}
 
       if (info->emitrelocations)
 	{
 	  r = get_relocs (stub_entry->group->stub_sec, 1);
 	  if (r == NULL)
-	    return FALSE;
+	    return false;
 	  r->r_offset = p - 4 - stub_entry->group->stub_sec->contents;
 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
 	  r->r_addend = targ;
 	  if (stub_entry->h != NULL
 	      && !use_global_in_relocs (htab, stub_entry, r, 1))
-	    return FALSE;
+	    return false;
 	}
-      break;
-
-    case ppc_stub_plt_branch:
-    case ppc_stub_plt_branch_r2off:
+    }
+  else if (stub_entry->type.main == ppc_stub_plt_branch
+	   && stub_entry->type.sub == ppc_stub_toc)
+    {
       br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
 					 stub_entry->root.string + 9,
-					 FALSE, FALSE);
+					 false, false);
       if (br_entry == NULL)
 	{
 	  _bfd_error_handler (_("can't find branch stub `%s'"),
 			      stub_entry->root.string);
-	  htab->stub_error = TRUE;
-	  return FALSE;
+	  htab->stub_error = true;
+	  return false;
 	}
 
       targ = (stub_entry->target_value
 	      + stub_entry->target_section->output_offset
 	      + stub_entry->target_section->output_section->vma);
-      if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
+      if (!stub_entry->type.r2save)
 	targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
 
       bfd_put_64 (htab->brlt->owner, targ,
@@ -11176,11 +11871,10 @@ ppc_build_one_stub (struct bfd_hash_entr
 	{
 	  br_entry->iter = 0;
 
-	  if (htab->relbrlt != NULL)
+	  if (htab->relbrlt != NULL && !info->enable_dt_relr)
 	    {
 	      /* Create a reloc for the branch lookup table entry.  */
 	      Elf_Internal_Rela rela;
-	      bfd_byte *rl;
 
 	      rela.r_offset = (br_entry->offset
 			       + htab->brlt->output_offset
@@ -11188,16 +11882,14 @@ ppc_build_one_stub (struct bfd_hash_entr
 	      rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
 	      rela.r_addend = targ;
 
-	      rl = htab->relbrlt->contents;
-	      rl += (htab->relbrlt->reloc_count++
-		     * sizeof (Elf64_External_Rela));
-	      bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
+	      BFD_ASSERT (count_and_swap_reloc_out (htab->relbrlt->owner, &rela,
+						    htab->relbrlt));
 	    }
 	  else if (info->emitrelocations)
 	    {
 	      r = get_relocs (htab->brlt, 1);
 	      if (r == NULL)
-		return FALSE;
+		return false;
 	      /* brlt, being SEC_LINKER_CREATED does not go through the
 		 normal reloc processing.  Symbols and offsets are not
 		 translated from input file to output file form, so
@@ -11224,19 +11916,19 @@ ppc_build_one_stub (struct bfd_hash_entr
 	    (_("%P: linkage table error against `%pT'\n"),
 	     stub_entry->root.string);
 	  bfd_set_error (bfd_error_bad_value);
-	  htab->stub_error = TRUE;
-	  return FALSE;
+	  htab->stub_error = true;
+	  return false;
 	}
 
       if (info->emitrelocations)
 	{
 	  r = get_relocs (stub_entry->group->stub_sec, 1 + (PPC_HA (off) != 0));
 	  if (r == NULL)
-	    return FALSE;
+	    return false;
 	  r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
 	  if (bfd_big_endian (info->output_bfd))
 	    r[0].r_offset += 2;
-	  if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
+	  if (stub_entry->type.r2save)
 	    r[0].r_offset += 4;
 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
 	  r[0].r_addend = targ;
@@ -11250,19 +11942,17 @@ ppc_build_one_stub (struct bfd_hash_entr
 	}
 
       p = loc;
-      if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
+      obfd = htab->params->stub_bfd;
+      if (!stub_entry->type.r2save)
 	{
 	  if (PPC_HA (off) != 0)
 	    {
-	      bfd_put_32 (htab->params->stub_bfd,
-			  ADDIS_R12_R2 | PPC_HA (off), p);
+	      bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (off), p);
 	      p += 4;
-	      bfd_put_32 (htab->params->stub_bfd,
-			  LD_R12_0R12 | PPC_LO (off), p);
+	      bfd_put_32 (obfd, LD_R12_0R12 | PPC_LO (off), p);
 	    }
 	  else
-	    bfd_put_32 (htab->params->stub_bfd,
-			LD_R12_0R2 | PPC_LO (off), p);
+	    bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (off), p);
 	}
       else
 	{
@@ -11270,71 +11960,69 @@ ppc_build_one_stub (struct bfd_hash_entr
 
 	  if (r2off == (bfd_vma) -1)
 	    {
-	      htab->stub_error = TRUE;
-	      return FALSE;
+	      htab->stub_error = true;
+	      return false;
 	    }
 
-	  bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
+	  bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p);
 	  p += 4;
 	  if (PPC_HA (off) != 0)
 	    {
-	      bfd_put_32 (htab->params->stub_bfd,
-			  ADDIS_R12_R2 | PPC_HA (off), p);
+	      bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (off), p);
 	      p += 4;
-	      bfd_put_32 (htab->params->stub_bfd,
-			  LD_R12_0R12 | PPC_LO (off), p);
+	      bfd_put_32 (obfd, LD_R12_0R12 | PPC_LO (off), p);
 	    }
 	  else
-	    bfd_put_32 (htab->params->stub_bfd, LD_R12_0R2 | PPC_LO (off), p);
+	    bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (off), p);
 
 	  if (PPC_HA (r2off) != 0)
 	    {
 	      p += 4;
-	      bfd_put_32 (htab->params->stub_bfd,
-			  ADDIS_R2_R2 | PPC_HA (r2off), p);
+	      bfd_put_32 (obfd, ADDIS_R2_R2 | PPC_HA (r2off), p);
 	    }
 	  if (PPC_LO (r2off) != 0)
 	    {
 	      p += 4;
-	      bfd_put_32 (htab->params->stub_bfd,
-			  ADDI_R2_R2 | PPC_LO (r2off), p);
+	      bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (r2off), p);
 	    }
 	}
       p += 4;
-      bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
+      bfd_put_32 (obfd, MTCTR_R12, p);
       p += 4;
-      bfd_put_32 (htab->params->stub_bfd, BCTR, p);
+      bfd_put_32 (obfd, BCTR, p);
       p += 4;
-      break;
-
-    case ppc_stub_long_branch_notoc:
-    case ppc_stub_long_branch_both:
-    case ppc_stub_plt_branch_notoc:
-    case ppc_stub_plt_branch_both:
-    case ppc_stub_plt_call_notoc:
-    case ppc_stub_plt_call_both:
+    }
+  else if (stub_entry->type.sub >= ppc_stub_notoc)
+    {
+      bool is_plt = stub_entry->type.main == ppc_stub_plt_call;
       p = loc;
       off = (stub_entry->stub_offset
 	     + stub_entry->group->stub_sec->output_offset
 	     + stub_entry->group->stub_sec->output_section->vma);
-      if (stub_entry->stub_type == ppc_stub_long_branch_both
-	  || stub_entry->stub_type == ppc_stub_plt_branch_both
-	  || stub_entry->stub_type == ppc_stub_plt_call_both)
+      obfd = htab->params->stub_bfd;
+      is_tga = (is_plt
+		&& stub_entry->h != NULL
+		&& is_tls_get_addr (&stub_entry->h->elf, htab)
+		&& htab->params->tls_get_addr_opt);
+      if (is_tga)
+	{
+	  p = build_tls_get_addr_head (htab, stub_entry, p);
+	  off += p - loc;
+	}
+      if (stub_entry->type.r2save)
 	{
 	  off += 4;
-	  bfd_put_32 (htab->params->stub_bfd, STD_R2_0R1 + STK_TOC (htab), p);
+	  bfd_put_32 (obfd, STD_R2_0R1 + STK_TOC (htab), p);
 	  p += 4;
 	}
-      if (stub_entry->stub_type >= ppc_stub_plt_call_notoc)
+      if (is_plt)
 	{
 	  targ = stub_entry->plt_ent->plt.offset & ~1;
 	  if (targ >= (bfd_vma) -2)
 	    abort ();
 
 	  plt = htab->elf.splt;
-	  if (!htab->elf.dynamic_sections_created
-	      || stub_entry->h == NULL
-	      || stub_entry->h->elf.dynindx == -1)
+	  if (use_local_plt (info, elf_hash_entry (stub_entry->h)))
 	    {
 	      if (stub_entry->symtype == STT_GNU_IFUNC)
 		plt = htab->elf.iplt;
@@ -11352,24 +12040,42 @@ ppc_build_one_stub (struct bfd_hash_entr
 
       relp = p;
       num_rel = 0;
-      if (htab->powerxx_stubs)
-	{
-	  bfd_boolean load = stub_entry->stub_type >= ppc_stub_plt_call_notoc;
-	  p = build_powerxx_offset (htab->params->stub_bfd, p, off, odd, load);
-	}
+      if (stub_entry->type.sub == ppc_stub_notoc)
+	p = build_power10_offset (obfd, p, off, odd, is_plt);
       else
 	{
+	  if (htab->glink_eh_frame != NULL
+	      && htab->glink_eh_frame->size != 0)
+	    {
+	      bfd_byte *base, *eh;
+	      unsigned int lr_used, delta;
+
+	      base = (htab->glink_eh_frame->contents
+		      + stub_entry->group->eh_base + 17);
+	      eh = base + stub_entry->group->eh_size;
+	      lr_used = stub_entry->stub_offset + (p - loc) + 8;
+	      delta = lr_used - stub_entry->group->lr_restore;
+	      stub_entry->group->lr_restore = lr_used + 8;
+	      eh = eh_advance (htab->elf.dynobj, eh, delta);
+	      *eh++ = DW_CFA_register;
+	      *eh++ = 65;
+	      *eh++ = 12;
+	      *eh++ = DW_CFA_advance_loc + 2;
+	      *eh++ = DW_CFA_restore_extended;
+	      *eh++ = 65;
+	      stub_entry->group->eh_size = eh - base;
+	    }
+
 	  /* The notoc stubs calculate their target (either a PLT entry or
 	     the global entry point of a function) relative to the PC
 	     returned by the "bcl" two instructions past the start of the
 	     sequence emitted by build_offset.  The offset is therefore 8
 	     less than calculated from the start of the sequence.  */
 	  off -= 8;
-	  p = build_offset (htab->params->stub_bfd, p, off,
-			    stub_entry->stub_type >= ppc_stub_plt_call_notoc);
+	  p = build_offset (obfd, p, off, is_plt);
 	}
 
-      if (stub_entry->stub_type <= ppc_stub_long_branch_both)
+      if (stub_entry->type.main == ppc_stub_long_branch)
 	{
 	  bfd_vma from;
 	  num_rel = 1;
@@ -11377,22 +12083,24 @@ ppc_build_one_stub (struct bfd_hash_entr
 		  + stub_entry->group->stub_sec->output_offset
 		  + stub_entry->group->stub_sec->output_section->vma
 		  + (p - loc));
-	  bfd_put_32 (htab->params->stub_bfd,
-		      B_DOT | ((targ - from) & 0x3fffffc), p);
+	  bfd_put_32 (obfd, B_DOT | ((targ - from) & 0x3fffffc), p);
 	}
       else
 	{
-	  bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
+	  bfd_put_32 (obfd, MTCTR_R12, p);
 	  p += 4;
-	  bfd_put_32 (htab->params->stub_bfd, BCTR, p);
+	  bfd_put_32 (obfd, BCTR, p);
 	}
       p += 4;
 
+      if (is_tga)
+	p = build_tls_get_addr_tail (htab, stub_entry, p, loc);
+
       if (info->emitrelocations)
 	{
 	  bfd_vma roff = relp - stub_entry->group->stub_sec->contents;
-	  if (htab->powerxx_stubs)
-	    num_rel += num_relocs_for_powerxx_offset (off, odd);
+	  if (stub_entry->type.sub == ppc_stub_notoc)
+	    num_rel += num_relocs_for_power10_offset (off, odd);
 	  else
 	    {
 	      num_rel += num_relocs_for_offset (off);
@@ -11400,13 +12108,12 @@ ppc_build_one_stub (struct bfd_hash_entr
 	    }
 	  r = get_relocs (stub_entry->group->stub_sec, num_rel);
 	  if (r == NULL)
-	    return FALSE;
-	  if (htab->powerxx_stubs)
-	    r = emit_relocs_for_powerxx_offset (info, r, roff, targ, off, odd);
+	    return false;
+	  if (stub_entry->type.sub == ppc_stub_notoc)
+	    r = emit_relocs_for_power10_offset (info, r, roff, targ, off, odd);
 	  else
 	    r = emit_relocs_for_offset (info, r, roff, targ, off);
-	  if (stub_entry->stub_type == ppc_stub_long_branch_notoc
-	      || stub_entry->stub_type == ppc_stub_long_branch_both)
+	  if (stub_entry->type.main == ppc_stub_long_branch)
 	    {
 	      ++r;
 	      roff = p - 4 - stub_entry->group->stub_sec->contents;
@@ -11415,40 +12122,12 @@ ppc_build_one_stub (struct bfd_hash_entr
 	      r->r_addend = targ;
 	      if (stub_entry->h != NULL
 		  && !use_global_in_relocs (htab, stub_entry, r, num_rel))
-		return FALSE;
+		return false;
 	    }
 	}
-
-      if (!htab->powerxx_stubs
-	  && htab->glink_eh_frame != NULL
-	  && htab->glink_eh_frame->size != 0)
-	{
-	  bfd_byte *base, *eh;
-	  unsigned int lr_used, delta;
-
-	  base = (htab->glink_eh_frame->contents
-		  + stub_entry->group->eh_base + 17);
-	  eh = base + stub_entry->group->eh_size;
-	  lr_used = stub_entry->stub_offset + 8;
-	  if (stub_entry->stub_type == ppc_stub_long_branch_both
-	      || stub_entry->stub_type == ppc_stub_plt_branch_both
-	      || stub_entry->stub_type == ppc_stub_plt_call_both)
-	    lr_used += 4;
-	  delta = lr_used - stub_entry->group->lr_restore;
-	  stub_entry->group->lr_restore = lr_used + 8;
-	  eh = eh_advance (htab->elf.dynobj, eh, delta);
-	  *eh++ = DW_CFA_register;
-	  *eh++ = 65;
-	  *eh++ = 12;
-	  *eh++ = DW_CFA_advance_loc + 2;
-	  *eh++ = DW_CFA_restore_extended;
-	  *eh++ = 65;
-	  stub_entry->group->eh_size = eh - base;
-	}
-      break;
-
-    case ppc_stub_plt_call:
-    case ppc_stub_plt_call_r2save:
+    }
+  else if (stub_entry->type.main == ppc_stub_plt_call)
+    {
       if (stub_entry->h != NULL
 	  && stub_entry->h->is_func_descriptor
 	  && stub_entry->h->oh != NULL)
@@ -11469,9 +12148,7 @@ ppc_build_one_stub (struct bfd_hash_entr
 	abort ();
 
       plt = htab->elf.splt;
-      if (!htab->elf.dynamic_sections_created
-	  || stub_entry->h == NULL
-	  || stub_entry->h->elf.dynindx == -1)
+      if (use_local_plt (info, elf_hash_entry (stub_entry->h)))
 	{
 	  if (stub_entry->symtype == STT_GNU_IFUNC)
 	    plt = htab->elf.iplt;
@@ -11493,8 +12170,8 @@ ppc_build_one_stub (struct bfd_hash_entr
 	     ? stub_entry->h->elf.root.root.string
 	     : "<local sym>");
 	  bfd_set_error (bfd_error_bad_value);
-	  htab->stub_error = TRUE;
-	  return FALSE;
+	  htab->stub_error = true;
+	  return false;
 	}
 
       r = NULL;
@@ -11507,27 +12184,33 @@ ppc_build_one_stub (struct bfd_hash_entr
 				     && PPC_HA (off + 16) == PPC_HA (off))
 			      : 1)));
 	  if (r == NULL)
-	    return FALSE;
+	    return false;
 	  r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
 	  if (bfd_big_endian (info->output_bfd))
 	    r[0].r_offset += 2;
 	  r[0].r_addend = targ;
 	}
-      if (stub_entry->h != NULL
-	  && (stub_entry->h == htab->tls_get_addr_fd
-	      || stub_entry->h == htab->tls_get_addr)
-	  && htab->params->tls_get_addr_opt)
-	p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
-      else
-	p = build_plt_stub (htab, stub_entry, loc, off, r);
-      break;
-
-    case ppc_stub_save_res:
-      return TRUE;
-
-    default:
+      p = loc;
+      obfd = htab->params->stub_bfd;
+      is_tga = (stub_entry->h != NULL
+		&& is_tls_get_addr (&stub_entry->h->elf, htab)
+		&& htab->params->tls_get_addr_opt);
+      if (is_tga)
+	{
+	  p = build_tls_get_addr_head (htab, stub_entry, p);
+	  if (r != NULL)
+	    r[0].r_offset += p - loc;
+	}
+      p = build_plt_stub (htab, stub_entry, p, off, r);
+      if (is_tga)
+	p = build_tls_get_addr_tail (htab, stub_entry, p, loc);
+    }
+  else if (stub_entry->type.main == ppc_stub_save_res)
+    return true;
+  else
+    {
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
   stub_entry->group->stub_sec->size = stub_entry->stub_offset + (p - loc);
@@ -11538,29 +12221,20 @@ ppc_build_one_stub (struct bfd_hash_entr
       size_t len1, len2;
       char *name;
       const char *const stub_str[] = { "long_branch",
-				       "long_branch",
-				       "long_branch",
-				       "long_branch",
-				       "plt_branch",
-				       "plt_branch",
-				       "plt_branch",
 				       "plt_branch",
-				       "plt_call",
-				       "plt_call",
-				       "plt_call",
 				       "plt_call" };
 
-      len1 = strlen (stub_str[stub_entry->stub_type - 1]);
+      len1 = strlen (stub_str[stub_entry->type.main - 1]);
       len2 = strlen (stub_entry->root.string);
       name = bfd_malloc (len1 + len2 + 2);
       if (name == NULL)
-	return FALSE;
+	return false;
       memcpy (name, stub_entry->root.string, 9);
-      memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
+      memcpy (name + 9, stub_str[stub_entry->type.main - 1], len1);
       memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
-      h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
+      h = elf_link_hash_lookup (&htab->elf, name, true, false, false);
       if (h == NULL)
-	return FALSE;
+	return false;
       if (h->root.type == bfd_link_hash_new)
 	{
 	  h->root.type = bfd_link_hash_defined;
@@ -11575,14 +12249,14 @@ ppc_build_one_stub (struct bfd_hash_entr
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* As above, but don't actually build the stub.  Just bump offset so
    we know stub section sizes, and select plt_branch stubs where
    long_branch stubs won't do.  */
 
-static bfd_boolean
+static bool
 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 {
   struct ppc_stub_hash_entry *stub_entry;
@@ -11590,7 +12264,8 @@ ppc_size_one_stub (struct bfd_hash_entry
   struct ppc_link_hash_table *htab;
   asection *plt;
   bfd_vma targ, off, r2off;
-  unsigned int size, extra, lr_used, delta, odd;
+  unsigned int size, pad, extra, lr_used, delta, odd;
+  bfd_vma stub_offset;
 
   /* Massage our args to the form they really have.  */
   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
@@ -11598,10 +12273,31 @@ ppc_size_one_stub (struct bfd_hash_entry
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
+
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (stub_entry->target_section != NULL
+      && stub_entry->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without --enable-non-contiguous-regions.\n"),
+			    stub_entry->target_section);
+
+  /* Same for the group.  */
+  if (stub_entry->group->stub_sec != NULL
+      && stub_entry->group->stub_sec->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without --enable-non-contiguous-regions.\n"),
+			    stub_entry->group->stub_sec);
 
   /* Make a note of the offset within the stubs for this entry.  */
-  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
+  stub_offset = stub_entry->group->stub_sec->size;
+  if (htab->stub_iteration > STUB_SHRINK_ITER
+      && stub_entry->stub_offset > stub_offset)
+    stub_offset = stub_entry->stub_offset;
+  stub_entry->id = ++htab->stub_id;
 
   if (stub_entry->h != NULL
       && stub_entry->h->save_res
@@ -11611,37 +12307,39 @@ ppc_size_one_stub (struct bfd_hash_entry
       /* Don't make stubs to out-of-line register save/restore
 	 functions.  Instead, emit copies of the functions.  */
       stub_entry->group->needs_save_res = 1;
-      stub_entry->stub_type = ppc_stub_save_res;
-      return TRUE;
+      stub_entry->type.main = ppc_stub_save_res;
+      stub_entry->type.sub = ppc_stub_toc;
+      stub_entry->type.r2save = 0;
+      return true;
     }
 
-  switch (stub_entry->stub_type)
+  if (stub_entry->type.main == ppc_stub_plt_branch)
     {
-    case ppc_stub_plt_branch:
-    case ppc_stub_plt_branch_r2off:
       /* Reset the stub type from the plt branch variant in case we now
 	 can reach with a shorter stub.  */
-      stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
-      /* Fall through.  */
-    case ppc_stub_long_branch:
-    case ppc_stub_long_branch_r2off:
+      stub_entry->type.main = ppc_stub_long_branch;
+    }
+
+  if (stub_entry->type.main == ppc_stub_long_branch
+      && stub_entry->type.sub == ppc_stub_toc)
+    {
       targ = (stub_entry->target_value
 	      + stub_entry->target_section->output_offset
 	      + stub_entry->target_section->output_section->vma);
       targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
-      off = (stub_entry->stub_offset
+      off = (stub_offset
 	     + stub_entry->group->stub_sec->output_offset
 	     + stub_entry->group->stub_sec->output_section->vma);
 
       size = 4;
       r2off = 0;
-      if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
+      if (stub_entry->type.r2save)
 	{
 	  r2off = get_r2off (info, stub_entry);
 	  if (r2off == (bfd_vma) -1)
 	    {
-	      htab->stub_error = TRUE;
-	      return FALSE;
+	      htab->stub_error = true;
+	      return false;
 	    }
 	  size = 8;
 	  if (PPC_HA (r2off) != 0)
@@ -11654,7 +12352,7 @@ ppc_size_one_stub (struct bfd_hash_entry
 
       /* If the branch offset is too big, use a ppc_stub_plt_branch.
 	 Do the same for -R objects without function descriptors.  */
-      if ((stub_entry->stub_type == ppc_stub_long_branch_r2off
+      if ((stub_entry->type.r2save
 	   && r2off == 0
 	   && htab->sec_info[stub_entry->target_section->id].toc_off == 0)
 	  || off + (1 << 25) >= (bfd_vma) (1 << 26))
@@ -11663,13 +12361,13 @@ ppc_size_one_stub (struct bfd_hash_entry
 
 	  br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
 					     stub_entry->root.string + 9,
-					     TRUE, FALSE);
+					     true, false);
 	  if (br_entry == NULL)
 	    {
 	      _bfd_error_handler (_("can't build branch stub `%s'"),
 				  stub_entry->root.string);
-	      htab->stub_error = TRUE;
-	      return FALSE;
+	      htab->stub_error = true;
+	      return false;
 	    }
 
 	  if (br_entry->iter != htab->stub_iteration)
@@ -11678,7 +12376,7 @@ ppc_size_one_stub (struct bfd_hash_entry
 	      br_entry->offset = htab->brlt->size;
 	      htab->brlt->size += 8;
 
-	      if (htab->relbrlt != NULL)
+	      if (htab->relbrlt != NULL && !info->enable_dt_relr)
 		htab->relbrlt->size += sizeof (Elf64_External_Rela);
 	      else if (info->emitrelocations)
 		{
@@ -11701,8 +12399,8 @@ ppc_size_one_stub (struct bfd_hash_entry
 	      stub_entry->group->stub_sec->flags |= SEC_RELOC;
 	    }
 
-	  stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
-	  if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
+	  stub_entry->type.main = ppc_stub_plt_branch;
+	  if (!stub_entry->type.r2save)
 	    {
 	      size = 12;
 	      if (PPC_HA (off) != 0)
@@ -11719,25 +12417,22 @@ ppc_size_one_stub (struct bfd_hash_entry
 	      if (PPC_LO (r2off) != 0)
 		size += 4;
 	    }
+	  pad = plt_stub_pad (htab->params->plt_stub_align, stub_offset, size);
+	  stub_offset += pad;
 	}
       else if (info->emitrelocations)
 	{
 	  stub_entry->group->stub_sec->reloc_count += 1;
 	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
 	}
-      break;
-
-    case ppc_stub_plt_branch_notoc:
-    case ppc_stub_plt_branch_both:
-      stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
-      /* Fall through.  */
-    case ppc_stub_long_branch_notoc:
-    case ppc_stub_long_branch_both:
-      off = (stub_entry->stub_offset
+    }
+  else if (stub_entry->type.main == ppc_stub_long_branch)
+    {
+      off = (stub_offset
 	     + stub_entry->group->stub_sec->output_offset
 	     + stub_entry->group->stub_sec->output_section->vma);
       size = 0;
-      if (stub_entry->stub_type == ppc_stub_long_branch_both)
+      if (stub_entry->type.r2save)
 	size = 4;
       off += size;
       targ = (stub_entry->target_value
@@ -11746,34 +12441,55 @@ ppc_size_one_stub (struct bfd_hash_entry
       odd = off & 4;
       off = targ - off;
 
+      if (stub_entry->type.sub == ppc_stub_notoc)
+	extra = size_power10_offset (off, odd);
+      else
+	extra = size_offset (off - 8);
+      /* Include branch insn plus those in the offset sequence.  */
+      size += 4 + extra;
+
+      /* If the branch can't reach, use a plt_branch.
+	 The branch insn is at the end, or "extra" bytes along.  So
+	 its offset will be "extra" bytes less that that already
+	 calculated.  */
+      if (off - extra + (1 << 25) >= (bfd_vma) (1 << 26))
+	{
+	  stub_entry->type.main = ppc_stub_plt_branch;
+	  size += 4;
+	  pad = plt_stub_pad (htab->params->plt_stub_align, stub_offset, size);
+	  if (pad != 0)
+	    {
+	      stub_offset += pad;
+	      off -= pad;
+	      odd ^= pad & 4;
+	      size -= extra;
+	      if (stub_entry->type.sub == ppc_stub_notoc)
+		extra = size_power10_offset (off, odd);
+	      else
+		extra = size_offset (off - 8);
+	      size += extra;
+	    }
+	}
+      else if (info->emitrelocations)
+	stub_entry->group->stub_sec->reloc_count +=1;
+
       if (info->emitrelocations)
 	{
 	  unsigned int num_rel;
-	  if (htab->powerxx_stubs)
-	    num_rel = num_relocs_for_powerxx_offset (off, odd);
+	  if (stub_entry->type.sub == ppc_stub_notoc)
+	    num_rel = num_relocs_for_power10_offset (off, odd);
 	  else
 	    num_rel = num_relocs_for_offset (off - 8);
 	  stub_entry->group->stub_sec->reloc_count += num_rel;
 	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
 	}
 
-      if (htab->powerxx_stubs)
-	extra = size_powerxx_offset (off, odd);
-      else
-	extra = size_offset (off - 8);
-      /* Include branch insn plus those in the offset sequence.  */
-      size += 4 + extra;
-      /* The branch insn is at the end, or "extra" bytes along.  So
-	 its offset will be "extra" bytes less that that already
-	 calculated.  */
-      off -= extra;
-
-      if (!htab->powerxx_stubs)
+      if (stub_entry->type.sub != ppc_stub_notoc)
 	{
 	  /* After the bcl, lr has been modified so we need to emit
 	     .eh_frame info saying the return address is in r12.  */
-	  lr_used = stub_entry->stub_offset + 8;
-	  if (stub_entry->stub_type == ppc_stub_long_branch_both)
+	  lr_used = stub_offset + 8;
+	  if (stub_entry->type.r2save)
 	    lr_used += 4;
 	  /* The eh_frame info will consist of a DW_CFA_advance_loc or
 	     variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
@@ -11782,33 +12498,29 @@ ppc_size_one_stub (struct bfd_hash_entry
 	  stub_entry->group->eh_size += eh_advance_size (delta) + 6;
 	  stub_entry->group->lr_restore = lr_used + 8;
 	}
-
-      /* If the branch can't reach, use a plt_branch.  */
-      if (off + (1 << 25) >= (bfd_vma) (1 << 26))
+    }
+  else if (stub_entry->type.sub >= ppc_stub_notoc)
+    {
+      BFD_ASSERT (stub_entry->type.main == ppc_stub_plt_call);
+      lr_used = 0;
+      if (stub_entry->h != NULL
+	  && is_tls_get_addr (&stub_entry->h->elf, htab)
+	  && htab->params->tls_get_addr_opt)
 	{
-	  stub_entry->stub_type += (ppc_stub_plt_branch_notoc
-				    - ppc_stub_long_branch_notoc);
-	  size += 4;
+	  lr_used += 7 * 4;
+	  if (!htab->params->no_tls_get_addr_regsave)
+	    lr_used += 11 * 4;
+	  else if (stub_entry->type.r2save)
+	    lr_used += 2 * 4;
 	}
-      else if (info->emitrelocations)
-	stub_entry->group->stub_sec->reloc_count +=1;
-      break;
-
-    case ppc_stub_plt_call_notoc:
-    case ppc_stub_plt_call_both:
-      off = (stub_entry->stub_offset
-	     + stub_entry->group->stub_sec->output_offset
-	     + stub_entry->group->stub_sec->output_section->vma);
-      if (stub_entry->stub_type == ppc_stub_plt_call_both)
-	off += 4;
+      if (stub_entry->type.r2save)
+	lr_used += 4;
       targ = stub_entry->plt_ent->plt.offset & ~1;
       if (targ >= (bfd_vma) -2)
 	abort ();
 
       plt = htab->elf.splt;
-      if (!htab->elf.dynamic_sections_created
-	  || stub_entry->h == NULL
-	  || stub_entry->h->elf.dynindx == -1)
+      if (use_local_plt (info, elf_hash_entry (stub_entry->h)))
 	{
 	  if (stub_entry->symtype == STT_GNU_IFUNC)
 	    plt = htab->elf.iplt;
@@ -11816,38 +12528,39 @@ ppc_size_one_stub (struct bfd_hash_entry
 	    plt = htab->pltlocal;
 	}
       targ += plt->output_offset + plt->output_section->vma;
+      off = (stub_offset
+	     + stub_entry->group->stub_sec->output_offset
+	     + stub_entry->group->stub_sec->output_section->vma
+	     + lr_used);
       odd = off & 4;
       off = targ - off;
 
-      if (htab->params->plt_stub_align != 0)
+      size = plt_stub_size (htab, stub_entry, off, odd);
+      pad = plt_stub_pad (htab->params->plt_stub_align, stub_offset, size);
+      if (pad != 0)
 	{
-	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
-
-	  stub_entry->group->stub_sec->size += pad;
-	  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
+	  stub_offset += pad;
 	  off -= pad;
+	  odd ^= pad & 4;
+	  size = plt_stub_size (htab, stub_entry, off, odd);
 	}
 
       if (info->emitrelocations)
 	{
 	  unsigned int num_rel;
-	  if (htab->powerxx_stubs)
-	    num_rel = num_relocs_for_powerxx_offset (off, odd);
+	  if (stub_entry->type.sub == ppc_stub_notoc)
+	    num_rel = num_relocs_for_power10_offset (off, odd);
 	  else
 	    num_rel = num_relocs_for_offset (off - 8);
 	  stub_entry->group->stub_sec->reloc_count += num_rel;
 	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
 	}
 
-      size = plt_stub_size (htab, stub_entry, off);
-
-      if (!htab->powerxx_stubs)
+      if (stub_entry->type.sub != ppc_stub_notoc)
 	{
 	  /* After the bcl, lr has been modified so we need to emit
 	     .eh_frame info saying the return address is in r12.  */
-	  lr_used = stub_entry->stub_offset + 8;
-	  if (stub_entry->stub_type == ppc_stub_plt_call_both)
-	    lr_used += 4;
+	  lr_used += stub_offset + 8;
 	  /* The eh_frame info will consist of a DW_CFA_advance_loc or
 	     variant, DW_CFA_register, 65, 12, DW_CFA_advance_loc+2,
 	     DW_CFA_restore_extended 65.  */
@@ -11855,17 +12568,34 @@ ppc_size_one_stub (struct bfd_hash_entry
 	  stub_entry->group->eh_size += eh_advance_size (delta) + 6;
 	  stub_entry->group->lr_restore = lr_used + 8;
 	}
-      break;
-
-    case ppc_stub_plt_call:
-    case ppc_stub_plt_call_r2save:
+      if (stub_entry->h != NULL
+	  && is_tls_get_addr (&stub_entry->h->elf, htab)
+	  && htab->params->tls_get_addr_opt)
+	{
+	  if (!htab->params->no_tls_get_addr_regsave)
+	    {
+	      unsigned int cfa_updt = stub_offset + 18 * 4;
+	      delta = cfa_updt - stub_entry->group->lr_restore;
+	      stub_entry->group->eh_size += eh_advance_size (delta);
+	      stub_entry->group->eh_size += htab->opd_abi ? 36 : 35;
+	      stub_entry->group->lr_restore = stub_offset + size - 4;
+	    }
+	  else if (stub_entry->type.r2save)
+	    {
+	      lr_used = stub_offset + size - 20;
+	      delta = lr_used - stub_entry->group->lr_restore;
+	      stub_entry->group->eh_size += eh_advance_size (delta) + 6;
+	      stub_entry->group->lr_restore = stub_offset + size - 4;
+	    }
+	}
+    }
+  else if (stub_entry->type.main == ppc_stub_plt_call)
+    {
       targ = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
       if (targ >= (bfd_vma) -2)
 	abort ();
       plt = htab->elf.splt;
-      if (!htab->elf.dynamic_sections_created
-	  || stub_entry->h == NULL
-	  || stub_entry->h->elf.dynindx == -1)
+      if (use_local_plt (info, elf_hash_entry (stub_entry->h)))
 	{
 	  if (stub_entry->symtype == STT_GNU_IFUNC)
 	    plt = htab->elf.iplt;
@@ -11878,13 +12608,9 @@ ppc_size_one_stub (struct bfd_hash_entry
 	     + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
       off = targ - off;
 
-      if (htab->params->plt_stub_align != 0)
-	{
-	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
-
-	  stub_entry->group->stub_sec->size += pad;
-	  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
-	}
+      size = plt_stub_size (htab, stub_entry, off, 0);
+      pad = plt_stub_pad (htab->params->plt_stub_align, stub_offset, size);
+      stub_offset += pad;
 
       if (info->emitrelocations)
 	{
@@ -11897,38 +12623,42 @@ ppc_size_one_stub (struct bfd_hash_entry
 	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
 	}
 
-      size = plt_stub_size (htab, stub_entry, off);
-
       if (stub_entry->h != NULL
-	  && (stub_entry->h == htab->tls_get_addr_fd
-	      || stub_entry->h == htab->tls_get_addr)
+	  && is_tls_get_addr (&stub_entry->h->elf, htab)
 	  && htab->params->tls_get_addr_opt
-	  && stub_entry->stub_type == ppc_stub_plt_call_r2save)
+	  && stub_entry->type.r2save)
 	{
-	  /* After the bctrl, lr has been modified so we need to
-	     emit .eh_frame info saying the return address is
-	     on the stack.  In fact we put the EH info specifying
-	     that the return address is on the stack *at* the
-	     call rather than after it, because the EH info for a
-	     call needs to be specified by that point.
-	     See libgcc/unwind-dw2.c execute_cfa_program.  */
-	  lr_used = stub_entry->stub_offset + size - 20;
-	  /* The eh_frame info will consist of a DW_CFA_advance_loc
-	     or variant, DW_CFA_offset_externed_sf, 65, -stackoff,
-	     DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65.  */
-	  delta = lr_used - stub_entry->group->lr_restore;
-	  stub_entry->group->eh_size += eh_advance_size (delta) + 6;
-	  stub_entry->group->lr_restore = size - 4;
+	  if (!htab->params->no_tls_get_addr_regsave)
+	    {
+	      /* Adjustments to r1 need to be described.  */
+	      unsigned int cfa_updt = stub_offset + 18 * 4;
+	      delta = cfa_updt - stub_entry->group->lr_restore;
+	      stub_entry->group->eh_size += eh_advance_size (delta);
+	      stub_entry->group->eh_size += htab->opd_abi ? 36 : 35;
+	    }
+	  else
+	    {
+	      lr_used = stub_offset + size - 20;
+	      /* The eh_frame info will consist of a DW_CFA_advance_loc
+		 or variant, DW_CFA_offset_externed_sf, 65, -stackoff,
+		 DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65.  */
+	      delta = lr_used - stub_entry->group->lr_restore;
+	      stub_entry->group->eh_size += eh_advance_size (delta) + 6;
+	    }
+	  stub_entry->group->lr_restore = stub_offset + size - 4;
 	}
-      break;
-
-    default:
+    }
+  else
+    {
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
-  stub_entry->group->stub_sec->size += size;
-  return TRUE;
+  if (stub_entry->stub_offset != stub_offset)
+    htab->stub_changed = true;
+  stub_entry->stub_offset = stub_offset;
+  stub_entry->group->stub_sec->size = stub_offset + size;
+  return true;
 }
 
 /* Set up various things so that we can make a list of input sections
@@ -11939,7 +12669,7 @@ int
 ppc64_elf_setup_section_lists (struct bfd_link_info *info)
 {
   unsigned int id;
-  bfd_size_type amt;
+  size_t amt;
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
 
   if (htab == NULL)
@@ -11974,19 +12704,19 @@ ppc64_elf_start_multitoc_partition (stru
    and linker generated GOT section.  Group input bfds such that the toc
    within a group is less than 64k in size.  */
 
-bfd_boolean
+bool
 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
 {
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
   bfd_vma addr, off, limit;
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (!htab->second_toc_pass)
     {
       /* Keep track of the first .toc or .got section for this input bfd.  */
-      bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
+      bool new_bfd = htab->toc_bfd != isec->owner;
 
       if (new_bfd)
 	{
@@ -12020,17 +12750,17 @@ ppc64_elf_next_toc_section (struct bfd_l
       if (new_bfd
 	  && elf_gp (isec->owner) != 0
 	  && elf_gp (isec->owner) != off)
-	return FALSE;
+	return false;
 
       elf_gp (isec->owner) = off;
-      return TRUE;
+      return true;
     }
 
   /* During the second pass toc_first_sec points to the start of
      a toc group, and toc_curr is used to track the old elf_gp.
      We use toc_bfd to ensure we only look at each bfd once.  */
   if (htab->toc_bfd == isec->owner)
-    return TRUE;
+    return true;
   htab->toc_bfd = isec->owner;
 
   if (htab->toc_first_sec == NULL
@@ -12044,55 +12774,55 @@ ppc64_elf_next_toc_section (struct bfd_l
   off = addr - elf_gp (info->output_bfd) + TOC_BASE_OFF;
   elf_gp (isec->owner) = off;
 
-  return TRUE;
+  return true;
 }
 
 /* Called via elf_link_hash_traverse to merge GOT entries for global
    symbol H.  */
 
-static bfd_boolean
+static bool
 merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
 {
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   merge_got_entries (&h->got.glist);
 
-  return TRUE;
+  return true;
 }
 
 /* Called via elf_link_hash_traverse to allocate GOT entries for global
    symbol H.  */
 
-static bfd_boolean
+static bool
 reallocate_got (struct elf_link_hash_entry *h, void *inf)
 {
   struct got_entry *gent;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   for (gent = h->got.glist; gent != NULL; gent = gent->next)
     if (!gent->is_indirect)
       allocate_got (h, (struct bfd_link_info *) inf, gent);
-  return TRUE;
+  return true;
 }
 
 /* Called on the first multitoc pass after the last call to
    ppc64_elf_next_toc_section.  This function removes duplicate GOT
    entries.  */
 
-bfd_boolean
+bool
 ppc64_elf_layout_multitoc (struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
   struct bfd *ibfd, *ibfd2;
-  bfd_boolean done_something;
+  bool done_something;
 
   htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
 
   if (!htab->do_multi_toc)
-    return FALSE;
+    return false;
 
   /* Merge global sym got entries within a toc group.  */
   elf_link_hash_traverse (&htab->elf, merge_global_got, info);
@@ -12119,7 +12849,7 @@ ppc64_elf_layout_multitoc (struct bfd_li
 		  && ent2->got.offset != (bfd_vma) -1
 		  && elf_gp (ibfd2) == elf_gp (ibfd))
 		{
-		  ent2->is_indirect = TRUE;
+		  ent2->is_indirect = true;
 		  ent2->got.ent = ent;
 		}
 	    }
@@ -12161,6 +12891,8 @@ ppc64_elf_layout_multitoc (struct bfd_li
       bfd_size_type locsymcount;
       Elf_Internal_Shdr *symtab_hdr;
       asection *s;
+      Elf_Internal_Sym *local_syms;
+      Elf_Internal_Sym *isym;
 
       if (!is_ppc64_elf (ibfd))
 	continue;
@@ -12175,8 +12907,18 @@ ppc64_elf_layout_multitoc (struct bfd_li
       local_plt = (struct plt_entry **) end_lgot_ents;
       end_local_plt = local_plt + locsymcount;
       lgot_masks = (unsigned char *) end_local_plt;
+      local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+      if (local_syms == NULL && locsymcount != 0)
+	{
+	  local_syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, locsymcount,
+					     0, NULL, NULL, NULL);
+	  if (local_syms == NULL)
+	    return false;
+	}
       s = ppc64_elf_tdata (ibfd)->got;
-      for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
+      for (isym = local_syms;
+	   lgot_ents < end_lgot_ents;
+	   ++lgot_ents, ++lgot_masks, isym++)
 	{
 	  struct got_entry *ent;
 
@@ -12198,8 +12940,10 @@ ppc64_elf_layout_multitoc (struct bfd_li
 		  htab->got_reli_size += rel_size;
 		}
 	      else if (bfd_link_pic (info)
-		       && !(ent->tls_type != 0
-			    && bfd_link_executable (info)))
+		       && (ent->tls_type == 0
+			   ? !info->enable_dt_relr
+			   : !bfd_link_executable (info))
+		       && isym->st_shndx != SHN_ABS)
 		{
 		  asection *srel = ppc64_elf_tdata (ibfd)->relgot;
 		  srel->size += rel_size;
@@ -12257,7 +13001,7 @@ ppc64_elf_layout_multitoc (struct bfd_li
      on input sections.  */
   htab->toc_bfd = NULL;
   htab->toc_first_sec = NULL;
-  htab->second_toc_pass = TRUE;
+  htab->second_toc_pass = true;
   return done_something;
 }
 
@@ -12332,6 +13076,7 @@ toc_adjusting_stub_needed (struct bfd_li
 	  r_type = ELF64_R_TYPE (rel->r_info);
 	  if (r_type != R_PPC64_REL24
 	      && r_type != R_PPC64_REL24_NOTOC
+	      && r_type != R_PPC64_REL24_P9NOTOC
 	      && r_type != R_PPC64_REL14
 	      && r_type != R_PPC64_REL14_BRTAKEN
 	      && r_type != R_PPC64_REL14_BRNTAKEN
@@ -12349,7 +13094,7 @@ toc_adjusting_stub_needed (struct bfd_li
 
 	  /* Calls to dynamic lib functions go through a plt call stub
 	     that uses r2.  */
-	  eh = (struct ppc_link_hash_entry *) h;
+	  eh = ppc_elf_hash_entry (h);
 	  if (eh != NULL
 	      && (eh->elf.plt.plist != NULL
 		  || (eh->oh != NULL
@@ -12398,7 +13143,7 @@ toc_adjusting_stub_needed (struct bfd_li
 		}
 
 	      dest = opd_entry_value (sym_sec, sym_value,
-				      &sym_sec, NULL, FALSE);
+				      &sym_sec, NULL, false);
 	      if (dest == (bfd_vma) -1)
 		continue;
 	    }
@@ -12460,9 +13205,8 @@ toc_adjusting_stub_needed (struct bfd_li
 	    }
 	}
 
-      if (local_syms != NULL
-	  && (elf_symtab_hdr (isec->owner).contents
-	      != (unsigned char *) local_syms))
+      if (elf_symtab_hdr (isec->owner).contents
+	  != (unsigned char *) local_syms)
 	free (local_syms);
       if (elf_section_data (isec)->relocs != relstart)
 	free (relstart);
@@ -12498,13 +13242,13 @@ toc_adjusting_stub_needed (struct bfd_li
    Build lists of input sections to determine groupings between which
    we may insert linker stubs.  */
 
-bfd_boolean
+bool
 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
 {
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if ((isec->output_section->flags & SEC_CODE) != 0
       && isec->output_section->id < htab->sec_info_arr_size)
@@ -12528,7 +13272,7 @@ ppc64_elf_next_input_section (struct bfd
 	    || isec->call_check_done))
 	{
 	  if (toc_adjusting_stub_needed (info, isec) < 0)
-	    return FALSE;
+	    return false;
 	}
       /* Make all sections use the TOC assigned for this object file.
 	 This will be wrong for pasted sections;  We fix that in
@@ -12538,13 +13282,13 @@ ppc64_elf_next_input_section (struct bfd
     }
 
   htab->sec_info[isec->id].toc_off = htab->toc_curr;
-  return TRUE;
+  return true;
 }
 
 /* Check that all .init and .fini sections use the same toc, if they
    have toc relocs.  */
 
-static bfd_boolean
+static bool
 check_pasted_section (struct bfd_link_info *info, const char *name)
 {
   asection *o = bfd_get_section_by_name (info->output_bfd, name);
@@ -12561,7 +13305,7 @@ check_pasted_section (struct bfd_link_in
 	    if (toc_off == 0)
 	      toc_off = htab->sec_info[i->id].toc_off;
 	    else if (toc_off != htab->sec_info[i->id].toc_off)
-	      return FALSE;
+	      return false;
 	  }
 
       if (toc_off == 0)
@@ -12577,14 +13321,16 @@ check_pasted_section (struct bfd_link_in
 	for (i = o->map_head.s; i != NULL; i = i->map_head.s)
 	  htab->sec_info[i->id].toc_off = toc_off;
     }
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 ppc64_elf_check_init_fini (struct bfd_link_info *info)
 {
-  return (check_pasted_section (info, ".init")
-	  & check_pasted_section (info, ".fini"));
+  bool ret1 = check_pasted_section (info, ".init");
+  bool ret2 = check_pasted_section (info, ".fini");
+
+  return ret1 && ret2;
 }
 
 /* See whether we can group stub sections together.  Grouping stub
@@ -12594,20 +13340,20 @@ ppc64_elf_check_init_fini (struct bfd_li
    _init and _fini functions into multiple parts.  Putting a stub in
    the middle of a function is not a good idea.  */
 
-static bfd_boolean
+static bool
 group_sections (struct bfd_link_info *info,
 		bfd_size_type stub_group_size,
-		bfd_boolean stubs_always_before_branch)
+		bool stubs_always_before_branch)
 {
   struct ppc_link_hash_table *htab;
   asection *osec;
-  bfd_boolean suppress_size_errors;
+  bool suppress_size_errors;
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
-  suppress_size_errors = FALSE;
+  suppress_size_errors = false;
   if (stub_group_size == 1)
     {
       /* Default values.  */
@@ -12615,7 +13361,7 @@ group_sections (struct bfd_link_info *in
 	stub_group_size = 0x1e00000;
       else
 	stub_group_size = 0x1c00000;
-      suppress_size_errors = TRUE;
+      suppress_size_errors = true;
     }
 
   for (osec = info->output_bfd->sections; osec != NULL; osec = osec->next)
@@ -12631,7 +13377,7 @@ group_sections (struct bfd_link_info *in
 	  asection *curr;
 	  asection *prev;
 	  bfd_size_type total;
-	  bfd_boolean big_sec;
+	  bool big_sec;
 	  bfd_vma curr_toc;
 	  struct map_stub *group;
 	  bfd_size_type group_size;
@@ -12669,7 +13415,7 @@ group_sections (struct bfd_link_info *in
 	     than 2097152 bytes, or nearly 75000 plt call stubs.  */
 	  group = bfd_alloc (curr->owner, sizeof (*group));
 	  if (group == NULL)
-	    return FALSE;
+	    return false;
 	  group->link_sec = curr;
 	  group->stub_sec = NULL;
 	  group->needs_save_res = 0;
@@ -12710,7 +13456,7 @@ group_sections (struct bfd_link_info *in
 	  tail = prev;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 static const unsigned char glink_eh_frame_cie[] =
@@ -12748,21 +13494,219 @@ maybe_strip_output (struct bfd_link_info
     }
 }
 
+/* Stash R_PPC64_RELATIVE reloc at input section SEC, r_offset OFF to
+   the array of such relocs.  */
+
+static bool
+append_relr_off (struct ppc_link_hash_table *htab, asection *sec, bfd_vma off)
+{
+  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;
+}
+
+/* qsort comparator for bfd_vma args.  */
+
+static int
+compare_relr_address (const void *arg1, const void *arg2)
+{
+  bfd_vma a = *(bfd_vma *) arg1;
+  bfd_vma b = *(bfd_vma *) arg2;
+  return a < b ? -1 : a > b ? 1 : 0;
+}
+
+/* Produce a malloc'd sorted array of reloc addresses from the info
+   stored by append_relr_off.  */
+
+static bfd_vma *
+sort_relr (struct ppc_link_hash_table *htab)
+{
+  bfd_vma *addr = bfd_malloc (htab->relr_count * sizeof (*addr));
+  if (addr == NULL)
+    return NULL;
+
+  for (size_t i = 0; i < htab->relr_count; i++)
+    addr[i] = (htab->relr[i].sec->output_section->vma
+	       + htab->relr[i].sec->output_offset
+	       + htab->relr[i].off);
+
+  if (htab->relr_count > 1)
+    qsort (addr, htab->relr_count, sizeof (*addr), compare_relr_address);
+
+  return addr;
+}
+
+/* Look over GOT and PLT entries saved on elf_local_got_ents for all
+   input files, stashing info about needed relative relocs.  */
+
+static bool
+got_and_plt_relr_for_local_syms (struct bfd_link_info *info)
+{
+  struct ppc_link_hash_table *htab = ppc_hash_table (info);
+  bfd *ibfd;
+
+  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
+    {
+      struct got_entry **lgot_ents, **lgot, **end_lgot_ents;
+      struct plt_entry **local_plt, **lplt, **end_local_plt;
+      Elf_Internal_Shdr *symtab_hdr;
+      bfd_size_type locsymcount;
+      Elf_Internal_Sym *local_syms;
+      Elf_Internal_Sym *isym;
+      struct plt_entry *pent;
+      struct got_entry *gent;
+
+      if (!is_ppc64_elf (ibfd))
+	continue;
+
+      lgot_ents = elf_local_got_ents (ibfd);
+      if (!lgot_ents)
+	continue;
+
+      symtab_hdr = &elf_symtab_hdr (ibfd);
+      locsymcount = symtab_hdr->sh_info;
+      local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+      if (local_syms == NULL && locsymcount != 0)
+	{
+	  local_syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, locsymcount,
+					     0, NULL, NULL, NULL);
+	  if (local_syms == NULL)
+	    return false;
+	}
+      end_lgot_ents = lgot_ents + locsymcount;
+      local_plt = (struct plt_entry **) end_lgot_ents;
+      end_local_plt = local_plt + locsymcount;
+      for (lgot = lgot_ents, isym = local_syms;
+	   lgot < end_lgot_ents;
+	   ++lgot, ++isym)
+	for (gent = *lgot; gent != NULL; gent = gent->next)
+	  if (!gent->is_indirect
+	      && gent->tls_type == 0
+	      && gent->got.offset != (bfd_vma) -1
+	      && isym->st_shndx != SHN_ABS)
+	    {
+	      asection *got = ppc64_elf_tdata (gent->owner)->got;
+	      if (!append_relr_off (htab, got, gent->got.offset))
+		{
+		  htab->stub_error = true;
+		  return false;
+		}
+	    }
+
+      if (!htab->opd_abi)
+	for (lplt = local_plt, isym = local_syms;
+	     lplt < end_local_plt;
+	     ++lplt, ++isym)
+	  for (pent = *lplt; pent != NULL; pent = pent->next)
+	    if (pent->plt.offset != (bfd_vma) -1
+		&& ELF_ST_TYPE (isym->st_info) != STT_GNU_IFUNC)
+	      {
+		if (!append_relr_off (htab, htab->pltlocal, pent->plt.offset))
+		  {
+		    if (symtab_hdr->contents != (unsigned char *) local_syms)
+		      free (local_syms);
+		    return false;
+		  }
+	      }
+
+      if (local_syms != NULL
+	  && symtab_hdr->contents != (unsigned char *) local_syms)
+	{
+	  if (!info->keep_memory)
+	    free (local_syms);
+	  else
+	    symtab_hdr->contents = (unsigned char *) local_syms;
+	}
+    }
+  return true;
+}
+
+/* Stash info about needed GOT and PLT entry relative relocs for
+   global symbol H.  */
+
+static bool
+got_and_plt_relr (struct elf_link_hash_entry *h, void *inf)
+{
+  struct bfd_link_info *info;
+  struct ppc_link_hash_table *htab;
+  struct plt_entry *pent;
+  struct got_entry *gent;
+
+  if (h->root.type == bfd_link_hash_indirect)
+    return true;
+
+  info = (struct bfd_link_info *) inf;
+  htab = ppc_hash_table (info);
+  if (htab == NULL)
+    return false;
+
+  if (h->type != STT_GNU_IFUNC
+      && h->def_regular
+      && (h->root.type == bfd_link_hash_defined
+	  || h->root.type == bfd_link_hash_defweak))
+    {
+      if ((!htab->elf.dynamic_sections_created
+	   || h->dynindx == -1
+	   || SYMBOL_REFERENCES_LOCAL (info, h))
+	  && !bfd_is_abs_symbol (&h->root))
+	for (gent = h->got.glist; gent != NULL; gent = gent->next)
+	  if (!gent->is_indirect
+	      && gent->tls_type == 0
+	      && gent->got.offset != (bfd_vma) -1)
+	    {
+	      asection *got = ppc64_elf_tdata (gent->owner)->got;
+	      if (!append_relr_off (htab, got, gent->got.offset))
+		{
+		  htab->stub_error = true;
+		  return false;
+		}
+	    }
+
+      if (!htab->opd_abi
+	  && use_local_plt (info, h))
+	for (pent = h->plt.plist; pent != NULL; pent = pent->next)
+	  if (pent->plt.offset != (bfd_vma) -1)
+	    {
+	      if (!append_relr_off (htab, htab->pltlocal, pent->plt.offset))
+		{
+		  htab->stub_error = true;
+		  return false;
+		}
+	    }
+    }
+  return true;
+}
+
 /* Determine and set the size of the stub section for a final link.
 
    The basic idea here is to examine all the relocations looking for
    PC-relative calls to a target that is unreachable with a "bl"
    instruction.  */
 
-bfd_boolean
+bool
 ppc64_elf_size_stubs (struct bfd_link_info *info)
 {
   bfd_size_type stub_group_size;
-  bfd_boolean stubs_always_before_branch;
+  bool stubs_always_before_branch;
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
 
   if (htab == NULL)
-    return FALSE;
+    return false;
+
+  if (htab->params->power10_stubs == -1 && !htab->has_power10_relocs)
+    htab->params->power10_stubs = 0;
 
   if (htab->params->plt_thread_safe == -1 && !bfd_link_executable (info))
     htab->params->plt_thread_safe = 1;
@@ -12802,7 +13746,7 @@ ppc64_elf_size_stubs (struct bfd_link_in
 	{
 	  struct elf_link_hash_entry *h;
 	  h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
-				    FALSE, FALSE, TRUE);
+				    false, false, true);
 	  htab->params->plt_thread_safe = h != NULL && h->ref_regular;
 	  if (htab->params->plt_thread_safe)
 	    break;
@@ -12815,14 +13759,44 @@ ppc64_elf_size_stubs (struct bfd_link_in
     stub_group_size = htab->params->group_size;
 
   if (!group_sections (info, stub_group_size, stubs_always_before_branch))
-    return FALSE;
+    return false;
+
+  htab->tga_group = NULL;
+  if (!htab->params->no_tls_get_addr_regsave
+      && htab->tga_desc_fd != NULL
+      && (htab->tga_desc_fd->elf.root.type == bfd_link_hash_undefined
+	  || htab->tga_desc_fd->elf.root.type == bfd_link_hash_undefweak)
+      && htab->tls_get_addr_fd != NULL
+      && is_static_defined (&htab->tls_get_addr_fd->elf))
+    {
+      asection *sym_sec, *code_sec, *stub_sec;
+      bfd_vma sym_value;
+      struct _opd_sec_data *opd;
+
+      sym_sec = htab->tls_get_addr_fd->elf.root.u.def.section;
+      sym_value = defined_sym_val (&htab->tls_get_addr_fd->elf);
+      code_sec = sym_sec;
+      opd = get_opd_info (sym_sec);
+      if (opd != NULL)
+	opd_entry_value (sym_sec, sym_value, &code_sec, NULL, false);
+      htab->tga_group = htab->sec_info[code_sec->id].u.group;
+      stub_sec = (*htab->params->add_stub_section) (".tga_desc.stub",
+						    htab->tga_group->link_sec);
+      if (stub_sec == NULL)
+	return false;
+      htab->tga_group->stub_sec = stub_sec;
+
+      htab->tga_desc_fd->elf.root.type = bfd_link_hash_defined;
+      htab->tga_desc_fd->elf.root.u.def.section = stub_sec;
+      htab->tga_desc_fd->elf.root.u.def.value = 0;
+      htab->tga_desc_fd->elf.type = STT_FUNC;
+      htab->tga_desc_fd->elf.def_regular = 1;
+      htab->tga_desc_fd->elf.non_elf = 0;
+      _bfd_elf_link_hash_hide_symbol (info, &htab->tga_desc_fd->elf, true);
+    }
 
-#define STUB_SHRINK_ITER 20
   /* Loop until no stubs added.  After iteration 20 of this loop we may
-     exit on a stub section shrinking.  This is to break out of a
-     pathological case where adding stubs on one iteration decreases
-     section gaps (perhaps due to alignment), which then requires
-     fewer or smaller stubs on the next iteration.  */
+     exit on a stub section shrinking.  */
 
   while (1)
     {
@@ -12831,6 +13805,7 @@ ppc64_elf_size_stubs (struct bfd_link_in
       struct map_stub *group;
 
       htab->stub_iteration += 1;
+      htab->relr_count = 0;
 
       for (input_bfd = info->input_bfds, bfd_indx = 0;
 	   input_bfd != NULL;
@@ -12854,16 +13829,20 @@ ppc64_elf_size_stubs (struct bfd_link_in
 	       section = section->next)
 	    {
 	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
+	      bool is_opd;
 
 	      /* If there aren't any relocs, then there's nothing more
 		 to do.  */
 	      if ((section->flags & SEC_RELOC) == 0
 		  || (section->flags & SEC_ALLOC) == 0
 		  || (section->flags & SEC_LOAD) == 0
-		  || (section->flags & SEC_CODE) == 0
 		  || section->reloc_count == 0)
 		continue;
 
+	      if (!info->enable_dt_relr
+		  && (section->flags & SEC_CODE) == 0)
+		continue;
+
 	      /* If this section is a link-once section that will be
 		 discarded, then don't create any stubs.  */
 	      if (section->output_section == NULL
@@ -12877,6 +13856,8 @@ ppc64_elf_size_stubs (struct bfd_link_in
 	      if (internal_relocs == NULL)
 		goto error_ret_free_local;
 
+	      is_opd = ppc64_elf_section_data (section)->sec_type == sec_opd;
+
 	      /* Now examine each relocation.  */
 	      irela = internal_relocs;
 	      irelaend = irela + section->reloc_count;
@@ -12884,13 +13865,13 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		{
 		  enum elf_ppc64_reloc_type r_type;
 		  unsigned int r_indx;
-		  enum ppc_stub_type stub_type;
+		  struct ppc_stub_type stub_type;
 		  struct ppc_stub_hash_entry *stub_entry;
 		  asection *sym_sec, *code_sec;
 		  bfd_vma sym_value, code_value;
 		  bfd_vma destination;
 		  unsigned long local_off;
-		  bfd_boolean ok_dest;
+		  bool ok_dest;
 		  struct ppc_link_hash_entry *hash;
 		  struct ppc_link_hash_entry *fdh;
 		  struct elf_link_hash_entry *h;
@@ -12910,21 +13891,74 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		    }
 
 		  /* Only look for stubs on branch instructions.  */
-		  if (r_type != R_PPC64_REL24
-		      && r_type != R_PPC64_REL24_NOTOC
-		      && r_type != R_PPC64_REL14
-		      && r_type != R_PPC64_REL14_BRTAKEN
-		      && r_type != R_PPC64_REL14_BRNTAKEN)
-		    continue;
+		  switch (r_type)
+		    {
+		    default:
+		      if (info->enable_dt_relr
+			  && maybe_relr (r_type, irela, section))
+			break;
+		      continue;
+
+		    case R_PPC64_REL24:
+		    case R_PPC64_REL24_NOTOC:
+		    case R_PPC64_REL24_P9NOTOC:
+		    case R_PPC64_REL14:
+		    case R_PPC64_REL14_BRTAKEN:
+		    case R_PPC64_REL14_BRNTAKEN:
+		      if ((section->flags & SEC_CODE) != 0)
+			break;
+		      continue;
+		    }
 
 		  /* Now determine the call target, its name, value,
 		     section.  */
 		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
 				  r_indx, input_bfd))
 		    goto error_ret_free_internal;
-		  hash = (struct ppc_link_hash_entry *) h;
 
-		  ok_dest = FALSE;
+		  if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
+		    {
+		      /* Only locally defined symbols can possibly use
+			 relative relocations.  */
+		      bfd_vma r_offset;
+		      if ((sym_sec == NULL
+			   || sym_sec->output_section == NULL)
+			  /* No symbol is OK too.  */
+			  && !(sym != NULL && sym->st_shndx == 0)
+			  /* Hack for __ehdr_start, which is undefined
+			     at this point.  */
+			  && !(h != NULL && h->root.linker_def))
+			continue;
+		      if (NO_OPD_RELOCS && is_opd)
+			continue;
+		      if (!is_opd
+			  && r_type == R_PPC64_ADDR64)
+			{
+			  if (h != NULL
+			      ? h->type == STT_GNU_IFUNC
+			      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+			    continue;
+			  if (h != NULL
+			      ? bfd_is_abs_symbol (&h->root)
+			      : sym->st_shndx == SHN_ABS)
+			    continue;
+			  if (h != NULL
+			      && !SYMBOL_REFERENCES_LOCAL (info, h))
+			    continue;
+			}
+		      r_offset = _bfd_elf_section_offset (info->output_bfd,
+							  info,
+							  section,
+							  irela->r_offset);
+		      if (r_offset >= (bfd_vma) -2)
+			continue;
+		      if (!append_relr_off (htab, section, r_offset))
+			goto error_ret_free_internal;
+		      continue;
+		    }
+
+		  hash = ppc_elf_hash_entry (h);
+		  ok_dest = false;
 		  fdh = NULL;
 		  sym_value = 0;
 		  if (hash == NULL)
@@ -12932,14 +13966,14 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		      sym_value = sym->st_value;
 		      if (sym_sec != NULL
 			  && sym_sec->output_section != NULL)
-			ok_dest = TRUE;
+			ok_dest = true;
 		    }
 		  else if (hash->elf.root.type == bfd_link_hash_defined
 			   || hash->elf.root.type == bfd_link_hash_defweak)
 		    {
 		      sym_value = hash->elf.root.u.def.value;
 		      if (sym_sec->output_section != NULL)
-			ok_dest = TRUE;
+			ok_dest = true;
 		    }
 		  else if (hash->elf.root.type == bfd_link_hash_undefweak
 			   || hash->elf.root.type == bfd_link_hash_undefined)
@@ -12957,7 +13991,7 @@ ppc64_elf_size_stubs (struct bfd_link_in
 			      sym_sec = fdh->elf.root.u.def.section;
 			      sym_value = fdh->elf.root.u.def.value;
 			      if (sym_sec->output_section != NULL)
-				ok_dest = TRUE;
+				ok_dest = true;
 			    }
 			  else
 			    fdh = NULL;
@@ -12998,7 +14032,7 @@ ppc64_elf_size_stubs (struct bfd_link_in
 			  sym_value += adjust;
 			}
 		      dest = opd_entry_value (sym_sec, sym_value,
-					      &code_sec, &code_value, FALSE);
+					      &code_sec, &code_value, false);
 		      if (dest != (bfd_vma) -1)
 			{
 			  destination = dest;
@@ -13015,23 +14049,35 @@ ppc64_elf_size_stubs (struct bfd_link_in
 
 		  /* Determine what (if any) linker stub is needed.  */
 		  plt_ent = NULL;
-		  stub_type = ppc_type_of_stub (section, irela, &hash,
-						&plt_ent, destination,
-						local_off);
+		  stub_type.main = ppc_type_of_stub (section, irela, &hash,
+						     &plt_ent, destination,
+						     local_off);
+		  stub_type.sub = ppc_stub_toc;
+		  stub_type.r2save = 0;
 
-		  if (r_type == R_PPC64_REL24_NOTOC)
+		  if (r_type == R_PPC64_REL24_NOTOC
+		      || r_type == R_PPC64_REL24_P9NOTOC)
 		    {
-		      if (stub_type == ppc_stub_plt_call)
-			stub_type = ppc_stub_plt_call_notoc;
-		      else if (stub_type == ppc_stub_long_branch
+		      enum ppc_stub_sub_type notoc = ppc_stub_notoc;
+		      if (htab->params->power10_stubs == 0
+			  || (r_type == R_PPC64_REL24_P9NOTOC
+			      && htab->params->power10_stubs != 1))
+			notoc = ppc_stub_p9notoc;
+		      if (stub_type.main == ppc_stub_plt_call)
+			stub_type.sub = notoc;
+		      else if (stub_type.main == ppc_stub_long_branch
 			       || (code_sec != NULL
 				   && code_sec->output_section != NULL
 				   && (((hash ? hash->elf.other : sym->st_other)
 					& STO_PPC64_LOCAL_MASK)
 				       > 1 << STO_PPC64_LOCAL_BIT)))
-			stub_type = ppc_stub_long_branch_notoc;
+			{
+			  stub_type.main = ppc_stub_long_branch;
+			  stub_type.sub = notoc;
+			  stub_type.r2save = 0;
+			}
 		    }
-		  else if (stub_type != ppc_stub_plt_call)
+		  else if (stub_type.main != ppc_stub_plt_call)
 		    {
 		      /* Check whether we need a TOC adjusting stub.
 			 Since the linker pastes together pieces from
@@ -13041,25 +14087,27 @@ ppc64_elf_size_stubs (struct bfd_link_in
 			 fact a call needing a TOC adjustment.  */
 		      if ((code_sec != NULL
 			   && code_sec->output_section != NULL
-			   && (htab->sec_info[code_sec->id].toc_off
-			       != htab->sec_info[section->id].toc_off)
 			   && (code_sec->has_toc_reloc
-			       || code_sec->makes_toc_func_call))
+			       || code_sec->makes_toc_func_call)
+			   && (htab->sec_info[code_sec->id].toc_off
+			       != htab->sec_info[section->id].toc_off))
 			  || (((hash ? hash->elf.other : sym->st_other)
 			       & STO_PPC64_LOCAL_MASK)
 			      == 1 << STO_PPC64_LOCAL_BIT))
-			stub_type = ppc_stub_long_branch_r2off;
+			{
+			  stub_type.main = ppc_stub_long_branch;
+			  stub_type.sub = ppc_stub_toc;
+			  stub_type.r2save = 1;
+			}
 		    }
 
-		  if (stub_type == ppc_stub_none)
+		  if (stub_type.main == ppc_stub_none)
 		    continue;
 
 		  /* __tls_get_addr calls might be eliminated.  */
-		  if (stub_type != ppc_stub_plt_call
-		      && stub_type != ppc_stub_plt_call_notoc
+		  if (stub_type.main != ppc_stub_plt_call
 		      && hash != NULL
-		      && (hash == htab->tls_get_addr
-			  || hash == htab->tls_get_addr_fd)
+		      && is_tls_get_addr (&hash->elf, htab)
 		      && section->has_tls_reloc
 		      && irela != internal_relocs)
 		    {
@@ -13069,11 +14117,13 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		      if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
 					 irela - 1, input_bfd))
 			goto error_ret_free_internal;
-		      if ((*tls_mask & TLS_TLS) != 0)
+		      if ((*tls_mask & TLS_TLS) != 0
+			  && (*tls_mask & (TLS_GD | TLS_LD)) == 0)
 			continue;
 		    }
 
-		  if (stub_type == ppc_stub_plt_call)
+		  if (stub_type.main == ppc_stub_plt_call
+		      && stub_type.sub == ppc_stub_toc)
 		    {
 		      if (!htab->opd_abi
 			  && htab->params->plt_localentry0 != 0
@@ -13089,7 +14139,7 @@ ppc64_elf_size_stubs (struct bfd_link_in
 			    goto error_ret_free_internal;
 			}
 		      else
-			stub_type = ppc_stub_plt_call_r2save;
+			stub_type.r2save = 1;
 		    }
 
 		  /* Support for grouping stub sections.  */
@@ -13101,75 +14151,18 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		    goto error_ret_free_internal;
 
 		  stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
-						     stub_name, FALSE, FALSE);
+						     stub_name, false, false);
 		  if (stub_entry != NULL)
 		    {
-		      enum ppc_stub_type old_type;
-		      /* A stub has already been created, but it may
-			 not be the required type.  We shouldn't be
-			 transitioning from plt_call to long_branch
-			 stubs or vice versa, but we might be
-			 upgrading from plt_call to plt_call_r2save or
-			 from long_branch to long_branch_r2off.  */
 		      free (stub_name);
-		      old_type = stub_entry->stub_type;
-		      switch (old_type)
+		      if (!ppc_merge_stub (htab, stub_entry, stub_type, r_type))
 			{
-			default:
-			  abort ();
-
-			case ppc_stub_save_res:
-			  continue;
-
-			case ppc_stub_plt_call:
-			case ppc_stub_plt_call_r2save:
-			case ppc_stub_plt_call_notoc:
-			case ppc_stub_plt_call_both:
-			  if (stub_type == ppc_stub_plt_call)
-			    continue;
-			  else if (stub_type == ppc_stub_plt_call_r2save)
-			    {
-			      if (old_type == ppc_stub_plt_call_notoc)
-				stub_type = ppc_stub_plt_call_both;
-			    }
-			  else if (stub_type == ppc_stub_plt_call_notoc)
-			    {
-			      if (old_type == ppc_stub_plt_call_r2save)
-				stub_type = ppc_stub_plt_call_both;
-			    }
-			  else
-			    abort ();
-			  break;
-
-			case ppc_stub_plt_branch:
-			case ppc_stub_plt_branch_r2off:
-			case ppc_stub_plt_branch_notoc:
-			case ppc_stub_plt_branch_both:
-			  old_type += (ppc_stub_long_branch
-				       - ppc_stub_plt_branch);
-			  /* Fall through.  */
-			case ppc_stub_long_branch:
-			case ppc_stub_long_branch_r2off:
-			case ppc_stub_long_branch_notoc:
-			case ppc_stub_long_branch_both:
-			  if (stub_type == ppc_stub_long_branch)
-			    continue;
-			  else if (stub_type == ppc_stub_long_branch_r2off)
-			    {
-			      if (old_type == ppc_stub_long_branch_notoc)
-				stub_type = ppc_stub_long_branch_both;
-			    }
-			  else if (stub_type == ppc_stub_long_branch_notoc)
-			    {
-			      if (old_type == ppc_stub_long_branch_r2off)
-				stub_type = ppc_stub_long_branch_both;
-			    }
-			  else
-			    abort ();
-			  break;
+			  /* xgettext:c-format */
+			  _bfd_error_handler
+			    (_("%pB: cannot create stub entry %s"),
+			     section->owner, stub_entry->root.string);
+			  goto error_ret_free_internal;
 			}
-		      if (old_type < stub_type)
-			stub_entry->stub_type = stub_type;
 		      continue;
 		    }
 
@@ -13181,16 +14174,14 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		      if (elf_section_data (section)->relocs == NULL)
 			free (internal_relocs);
 		    error_ret_free_local:
-		      if (local_syms != NULL
-			  && (symtab_hdr->contents
-			      != (unsigned char *) local_syms))
+		      if (symtab_hdr->contents
+			  != (unsigned char *) local_syms)
 			free (local_syms);
-		      return FALSE;
+		      return false;
 		    }
 
-		  stub_entry->stub_type = stub_type;
-		  if (stub_type >= ppc_stub_plt_call
-		      && stub_type <= ppc_stub_plt_call_both)
+		  stub_entry->type = stub_type;
+		  if (stub_type.main == ppc_stub_plt_call)
 		    {
 		      stub_entry->target_value = sym_value;
 		      stub_entry->target_section = sym_sec;
@@ -13237,25 +14228,36 @@ ppc64_elf_size_stubs (struct bfd_link_in
 	    {
 	      asection *stub_sec = group->stub_sec;
 
-	      if (htab->stub_iteration <= STUB_SHRINK_ITER
-		  || stub_sec->rawsize < stub_sec->size)
-		/* Past STUB_SHRINK_ITER, rawsize is the max size seen.  */
-		stub_sec->rawsize = stub_sec->size;
+	      stub_sec->rawsize = stub_sec->size;
 	      stub_sec->size = 0;
 	      stub_sec->reloc_count = 0;
 	      stub_sec->flags &= ~SEC_RELOC;
 	    }
 	}
+      if (htab->tga_group != NULL)
+	{
+	  /* See emit_tga_desc and emit_tga_desc_eh_frame.  */
+	  htab->tga_group->eh_size
+	    = 1 + 2 + (htab->opd_abi != 0) + 3 + 8 * 2 + 3 + 8 + 3;
+	  htab->tga_group->lr_restore = 23 * 4;
+	  htab->tga_group->stub_sec->size = 24 * 4;
+	}
 
-      if (htab->stub_iteration <= STUB_SHRINK_ITER
-	  || htab->brlt->rawsize < htab->brlt->size)
-	htab->brlt->rawsize = htab->brlt->size;
+      htab->brlt->rawsize = htab->brlt->size;
       htab->brlt->size = 0;
       htab->brlt->reloc_count = 0;
       htab->brlt->flags &= ~SEC_RELOC;
       if (htab->relbrlt != NULL)
 	htab->relbrlt->size = 0;
 
+      if (htab->elf.srelrdyn != NULL)
+	{
+	  htab->elf.srelrdyn->rawsize = htab->elf.srelrdyn->size;
+	  htab->elf.srelrdyn->size = 0;
+	}
+
+      htab->stub_changed = false;
+      htab->stub_id = 0;
       bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
 
       for (group = htab->group; group != NULL; group = group->next)
@@ -13297,6 +14299,52 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		= (group->stub_sec->size + (1 << align) - 1) & -(1 << align);
 	    }
 
+      if (htab->elf.srelrdyn != NULL)
+	{
+	  bfd_vma r_offset;
+
+	  for (r_offset = 0; r_offset < htab->brlt->size; r_offset += 8)
+	    if (!append_relr_off (htab, htab->brlt, r_offset))
+	      return false;
+
+	  if (!got_and_plt_relr_for_local_syms (info))
+	    return false;
+	  elf_link_hash_traverse (&htab->elf, got_and_plt_relr, info);
+	  if (htab->stub_error)
+	    return false;
+
+	  bfd_vma *relr_addr = sort_relr (htab);
+	  if (htab->relr_count != 0 && relr_addr == NULL)
+	    return false;
+
+	  size_t i = 0;
+	  while (i < htab->relr_count)
+	    {
+	      bfd_vma base = relr_addr[i];
+	      htab->elf.srelrdyn->size += 8;
+	      i++;
+	      /* Handle possible duplicate address.  This can happen
+		 as sections increase in size when adding stubs.  */
+	      while (i < htab->relr_count
+		     && relr_addr[i] == base)
+		i++;
+	      base += 8;
+	      while (1)
+		{
+		  size_t start_i = i;
+		  while (i < htab->relr_count
+			 && relr_addr[i] - base < 63 * 8
+			 && (relr_addr[i] - base) % 8 == 0)
+		    i++;
+		  if (i == start_i)
+		    break;
+		  htab->elf.srelrdyn->size += 8;
+		  base += 63 * 8;
+		}
+	    }
+	  free (relr_addr);
+	}
+
       for (group = htab->group; group != NULL; group = group->next)
 	if (group->stub_sec != NULL
 	    && group->stub_sec->rawsize != group->stub_sec->size
@@ -13305,13 +14353,36 @@ ppc64_elf_size_stubs (struct bfd_link_in
 	  break;
 
       if (group == NULL
+	  && (!htab->stub_changed
+	      || htab->stub_iteration > STUB_SHRINK_ITER)
 	  && (htab->brlt->rawsize == htab->brlt->size
 	      || (htab->stub_iteration > STUB_SHRINK_ITER
 		  && htab->brlt->rawsize > htab->brlt->size))
+	  && (htab->elf.srelrdyn == NULL
+	      || htab->elf.srelrdyn->rawsize == htab->elf.srelrdyn->size
+	      || (htab->stub_iteration > STUB_SHRINK_ITER
+		  && htab->elf.srelrdyn->rawsize > htab->elf.srelrdyn->size))
 	  && (htab->glink_eh_frame == NULL
-	      || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size))
+	      || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size)
+	  && (htab->tga_group == NULL
+	      || htab->stub_iteration > 1))
 	break;
 
+      if (htab->stub_iteration > STUB_SHRINK_ITER)
+	{
+	  for (group = htab->group; group != NULL; group = group->next)
+	    if (group->stub_sec != NULL
+		&& group->stub_sec->size < group->stub_sec->rawsize)
+	      group->stub_sec->size = group->stub_sec->rawsize;
+
+	  if (htab->brlt->size < htab->brlt->rawsize)
+	    htab->brlt->size = htab->brlt->rawsize;
+
+	  if (htab->elf.srelrdyn != NULL
+	      && htab->elf.srelrdyn->size < htab->elf.srelrdyn->rawsize)
+	    htab->elf.srelrdyn->size = htab->elf.srelrdyn->rawsize;
+	}
+
       /* Ask the linker to do its stuff.  */
       (*htab->params->layout_sections_again) ();
     }
@@ -13330,7 +14401,7 @@ ppc64_elf_size_stubs (struct bfd_link_in
 	 indexed in .eh_frame_hdr.  */
       p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
       if (p == NULL)
-	return FALSE;
+	return false;
       htab->glink_eh_frame->contents = p;
       last_fde = p;
       align = 4;
@@ -13385,11 +14456,11 @@ ppc64_elf_size_stubs (struct bfd_link_in
 	  /* Augmentation.  */
 	  p += 1;
 
-	  *p++ = DW_CFA_advance_loc + 1;
+	  *p++ = DW_CFA_advance_loc + (htab->has_plt_localentry0 ? 3 : 2);
 	  *p++ = DW_CFA_register;
 	  *p++ = 65;
 	  *p++ = htab->opd_abi ? 12 : 0;
-	  *p++ = DW_CFA_advance_loc + (htab->opd_abi ? 5 : 7);
+	  *p++ = DW_CFA_advance_loc + (htab->opd_abi ? 4 : 2);
 	  *p++ = DW_CFA_restore_extended;
 	  *p++ = 65;
 	  p += ((24 + align - 1) & -align) - 24;
@@ -13405,10 +14476,14 @@ ppc64_elf_size_stubs (struct bfd_link_in
     }
 
   maybe_strip_output (info, htab->brlt);
+  if (htab->relbrlt != NULL)
+    maybe_strip_output (info, htab->relbrlt);
   if (htab->glink_eh_frame != NULL)
     maybe_strip_output (info, htab->glink_eh_frame);
+  if (htab->elf.srelrdyn != NULL)
+    maybe_strip_output (info, htab->elf.srelrdyn);
 
-  return TRUE;
+  return true;
 }
 
 /* Called after we have determined section placement.  If sections
@@ -13425,24 +14500,23 @@ ppc64_elf_set_toc (struct bfd_link_info
       struct elf_link_hash_entry *h;
       struct elf_link_hash_table *htab = elf_hash_table (info);
 
-      if (is_elf_hash_table (htab)
+      if (is_elf_hash_table (&htab->root)
 	  && htab->hgot != NULL)
 	h = htab->hgot;
       else
 	{
-	  h = elf_link_hash_lookup (htab, ".TOC.", FALSE, FALSE, TRUE);
-	  if (is_elf_hash_table (htab))
+	  h = (struct elf_link_hash_entry *)
+	    bfd_link_hash_lookup (&htab->root, ".TOC.", false, false, true);
+	  if (is_elf_hash_table (&htab->root))
 	    htab->hgot = h;
 	}
       if (h != NULL
 	  && h->root.type == bfd_link_hash_defined
 	  && !h->root.linker_def
-	  && (!is_elf_hash_table (htab)
+	  && (!is_elf_hash_table (&htab->root)
 	      || h->def_regular))
 	{
-	  TOCstart = (h->root.u.def.value - TOC_BASE_OFF
-		      + h->root.u.def.section->output_offset
-		      + h->root.u.def.section->output_section->vma);
+	  TOCstart = defined_sym_val (h) - TOC_BASE_OFF;
 	  _bfd_set_gp_value (obfd, TOCstart);
 	  return TOCstart;
 	}
@@ -13516,7 +14590,7 @@ ppc64_elf_set_toc (struct bfd_link_info
 	  struct bfd_link_hash_entry *bh = NULL;
 	  _bfd_generic_link_add_one_symbol (info, obfd, ".TOC.", BSF_GLOBAL,
 					    s, TOC_BASE_OFF - adjust,
-					    NULL, FALSE, FALSE, &bh);
+					    NULL, false, false, &bh);
 	}
     }
   return TOCstart;
@@ -13525,7 +14599,7 @@ ppc64_elf_set_toc (struct bfd_link_info
 /* Called via elf_link_hash_traverse from ppc64_elf_build_stubs to
    write out any global entry stubs, and PLT relocations.  */
 
-static bfd_boolean
+static bool
 build_global_entry_stubs_and_plt (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
@@ -13534,12 +14608,12 @@ build_global_entry_stubs_and_plt (struct
   asection *s;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = inf;
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
     if (ent->plt.offset != (bfd_vma) -1)
@@ -13550,8 +14624,7 @@ build_global_entry_stubs_and_plt (struct
 	asection *plt, *relplt;
 	bfd_byte *loc;
 
-	if (!htab->elf.dynamic_sections_created
-	    || h->dynindx == -1)
+	if (use_local_plt (info, h))
 	  {
 	    if (!(h->def_regular
 		  && (h->root.type == bfd_link_hash_defined
@@ -13561,7 +14634,7 @@ build_global_entry_stubs_and_plt (struct
 	      {
 		plt = htab->elf.iplt;
 		relplt = htab->elf.irelplt;
-		htab->local_ifunc_resolver = 1;
+		htab->elf.ifunc_resolvers = true;
 		if (htab->opd_abi)
 		  rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
 		else
@@ -13570,7 +14643,9 @@ build_global_entry_stubs_and_plt (struct
 	    else
 	      {
 		plt = htab->pltlocal;
-		if (bfd_link_pic (info))
+		relplt = NULL;
+		if (bfd_link_pic (info)
+		    && !(info->enable_dt_relr && !htab->opd_abi))
 		  {
 		    relplt = htab->relpltlocal;
 		    if (htab->opd_abi)
@@ -13578,13 +14653,8 @@ build_global_entry_stubs_and_plt (struct
 		    else
 		      rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
 		  }
-		else
-		  relplt = NULL;
 	      }
-	    rela.r_addend = (h->root.u.def.value
-			     + h->root.u.def.section->output_offset
-			     + h->root.u.def.section->output_section->vma
-			     + ent->addend);
+	    rela.r_addend = defined_sym_val (h) + ent->addend;
 
 	    if (relplt == NULL)
 	      {
@@ -13602,9 +14672,8 @@ build_global_entry_stubs_and_plt (struct
 		rela.r_offset = (plt->output_section->vma
 				 + plt->output_offset
 				 + ent->plt.offset);
-		loc = relplt->contents + (relplt->reloc_count++
-					  * sizeof (Elf64_External_Rela));
-		bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
+		BFD_ASSERT (count_and_swap_reloc_out (info->output_bfd, &rela,
+						      relplt));
 	      }
 	  }
 	else
@@ -13618,20 +14687,21 @@ build_global_entry_stubs_and_plt (struct
 		   + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE (htab))
 		      / PLT_ENTRY_SIZE (htab) * sizeof (Elf64_External_Rela)));
 	    if (h->type == STT_GNU_IFUNC && is_static_defined (h))
-	      htab->maybe_local_ifunc_resolver = 1;
-	    bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
+	      htab->elf.ifunc_resolvers = true;
+	    BFD_ASSERT (swap_reloc_out (info->output_bfd, &rela,
+					loc, htab->elf.srelplt));
 	  }
       }
 
   if (!h->pointer_equality_needed)
-    return TRUE;
+    return true;
 
   if (h->def_regular)
-    return TRUE;
+    return true;
 
   s = htab->global_entry;
   if (s == NULL || s->size == 0)
-    return TRUE;
+    return true;
 
   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
     if (ent->plt.offset != (bfd_vma) -1
@@ -13643,8 +14713,7 @@ build_global_entry_stubs_and_plt (struct
 
 	p = s->contents + h->root.u.def.value;
 	plt = htab->elf.splt;
-	if (!htab->elf.dynamic_sections_created
-	    || h->dynindx == -1)
+	if (use_local_plt (info, h))
 	  {
 	    if (h->type == STT_GNU_IFUNC)
 	      plt = htab->elf.iplt;
@@ -13660,7 +14729,7 @@ build_global_entry_stubs_and_plt (struct
 	      (_("%P: linkage table error against `%pT'\n"),
 	       h->root.root.string);
 	    bfd_set_error (bfd_error_bad_value);
-	    htab->stub_error = TRUE;
+	    htab->stub_error = true;
 	  }
 
 	htab->stub_count[ppc_stub_global_entry - 1] += 1;
@@ -13670,12 +14739,12 @@ build_global_entry_stubs_and_plt (struct
 	    char *name = bfd_malloc (sizeof "12345678.global_entry." + len);
 
 	    if (name == NULL)
-	      return FALSE;
+	      return false;
 
 	    sprintf (name, "%08x.global_entry.%s", s->id, h->root.root.string);
-	    h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
+	    h = elf_link_hash_lookup (&htab->elf, name, true, false, false);
 	    if (h == NULL)
-	      return FALSE;
+	      return false;
 	    if (h->root.type == bfd_link_hash_new)
 	      {
 		h->root.type = bfd_link_hash_defined;
@@ -13702,12 +14771,12 @@ build_global_entry_stubs_and_plt (struct
 	bfd_put_32 (s->owner, BCTR, p);
 	break;
       }
-  return TRUE;
+  return true;
 }
 
 /* Write PLT relocs for locals.  */
 
-static bfd_boolean
+static bool
 write_plt_relocs_for_local_syms (struct bfd_link_info *info)
 {
   struct ppc_link_hash_table *htab = ppc_hash_table (info);
@@ -13741,39 +14810,38 @@ write_plt_relocs_for_local_syms (struct
 	      Elf_Internal_Sym *sym;
 	      asection *sym_sec;
 	      asection *plt, *relplt;
-	      bfd_byte *loc;
 	      bfd_vma val;
 
 	      if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms,
 			      lplt - local_plt, ibfd))
 		{
-		  if (local_syms != NULL
-		      && symtab_hdr->contents != (unsigned char *) local_syms)
+		  if (symtab_hdr->contents != (unsigned char *) local_syms)
 		    free (local_syms);
-		  return FALSE;
+		  return false;
 		}
 
 	      val = sym->st_value + ent->addend;
-	      if (ELF_ST_TYPE (sym->st_info) != STT_GNU_IFUNC)
-		val += PPC64_LOCAL_ENTRY_OFFSET (sym->st_other);
 	      if (sym_sec != NULL && sym_sec->output_section != NULL)
 		val += sym_sec->output_offset + sym_sec->output_section->vma;
 
 	      if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
 		{
-		  htab->local_ifunc_resolver = 1;
+		  htab->elf.ifunc_resolvers = true;
 		  plt = htab->elf.iplt;
 		  relplt = htab->elf.irelplt;
 		}
 	      else
 		{
 		  plt = htab->pltlocal;
-		  relplt = bfd_link_pic (info) ? htab->relpltlocal : NULL;
+		  relplt = NULL;
+		  if (bfd_link_pic (info)
+		      && !(info->enable_dt_relr && !htab->opd_abi))
+		    relplt = htab->relpltlocal;
 		}
 
 	      if (relplt == NULL)
 		{
-		  loc = plt->contents + ent->plt.offset;
+		  bfd_byte *loc = plt->contents + ent->plt.offset;
 		  bfd_put_64 (info->output_bfd, val, loc);
 		  if (htab->opd_abi)
 		    {
@@ -13802,9 +14870,8 @@ write_plt_relocs_for_local_syms (struct
 			rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
 		    }
 		  rela.r_addend = val;
-		  loc = relplt->contents + (relplt->reloc_count++
-					    * sizeof (Elf64_External_Rela));
-		  bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
+		  BFD_ASSERT (count_and_swap_reloc_out (info->output_bfd,
+							 &rela, relplt));
 		}
 	    }
 
@@ -13817,14 +14884,82 @@ write_plt_relocs_for_local_syms (struct
 	    symtab_hdr->contents = (unsigned char *) local_syms;
 	}
     }
-  return TRUE;
+  return true;
+}
+
+/* Emit the static wrapper function preserving registers around a
+   __tls_get_addr_opt call.  */
+
+static bool
+emit_tga_desc (struct ppc_link_hash_table *htab)
+{
+  asection *stub_sec = htab->tga_group->stub_sec;
+  unsigned int cfa_updt = 11 * 4;
+  bfd_byte *p;
+  bfd_vma to, from, delta;
+
+  BFD_ASSERT (htab->tga_desc_fd->elf.root.type == bfd_link_hash_defined
+	      && htab->tga_desc_fd->elf.root.u.def.section == stub_sec
+	      && htab->tga_desc_fd->elf.root.u.def.value == 0);
+  to = defined_sym_val (&htab->tls_get_addr_fd->elf);
+  from = defined_sym_val (&htab->tga_desc_fd->elf) + cfa_updt;
+  delta = to - from;
+  if (delta + (1 << 25) >= 1 << 26)
+    {
+      _bfd_error_handler (_("__tls_get_addr call offset overflow"));
+      htab->stub_error = true;
+      return false;
+    }
+
+  p = stub_sec->contents;
+  p = tls_get_addr_prologue (htab->elf.dynobj, p, htab);
+  bfd_put_32 (stub_sec->owner, B_DOT | 1 | (delta & 0x3fffffc), p);
+  p += 4;
+  p = tls_get_addr_epilogue (htab->elf.dynobj, p, htab);
+  return stub_sec->size == (bfd_size_type) (p - stub_sec->contents);
+}
+
+/* Emit eh_frame describing the static wrapper function.  */
+
+static bfd_byte *
+emit_tga_desc_eh_frame (struct ppc_link_hash_table *htab, bfd_byte *p)
+{
+  unsigned int cfa_updt = 11 * 4;
+  unsigned int i;
+
+  *p++ = DW_CFA_advance_loc + cfa_updt / 4;
+  *p++ = DW_CFA_def_cfa_offset;
+  if (htab->opd_abi)
+    {
+      *p++ = 128;
+      *p++ = 1;
+    }
+  else
+    *p++ = 96;
+  *p++ = DW_CFA_offset_extended_sf;
+  *p++ = 65;
+  *p++ = (-16 / 8) & 0x7f;
+  for (i = 4; i < 12; i++)
+    {
+      *p++ = DW_CFA_offset + i;
+      *p++ = (htab->opd_abi ? 13 : 12) - i;
+    }
+  *p++ = DW_CFA_advance_loc + 10;
+  *p++ = DW_CFA_def_cfa_offset;
+  *p++ = 0;
+  for (i = 4; i < 12; i++)
+    *p++ = DW_CFA_restore + i;
+  *p++ = DW_CFA_advance_loc + 2;
+  *p++ = DW_CFA_restore_extended;
+  *p++ = 65;
+  return p;
 }
 
 /* Build all the stubs associated with the current output file.
    The stubs are kept in a hash table attached to the main linker
    hash table.  This function is called via gldelf64ppc_finish.  */
 
-bfd_boolean
+bool
 ppc64_elf_build_stubs (struct bfd_link_info *info,
 		       char **stats)
 {
@@ -13835,7 +14970,7 @@ ppc64_elf_build_stubs (struct bfd_link_i
   int stub_sec_count = 0;
 
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Allocate memory to hold the linker stubs.  */
   for (group = htab->group; group != NULL; group = group->next)
@@ -13848,7 +14983,7 @@ ppc64_elf_build_stubs (struct bfd_link_i
 	  stub_sec->contents = bfd_zalloc (htab->params->stub_bfd,
 					   stub_sec->size);
 	  if (stub_sec->contents == NULL)
-	    return FALSE;
+	    return false;
 	  stub_sec->size = 0;
 	}
     }
@@ -13863,9 +14998,9 @@ ppc64_elf_build_stubs (struct bfd_link_i
 	{
 	  struct elf_link_hash_entry *h;
 	  h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
-				    TRUE, FALSE, FALSE);
+				    true, false, false);
 	  if (h == NULL)
-	    return FALSE;
+	    return false;
 	  if (h->root.type == bfd_link_hash_new)
 	    {
 	      h->root.type = bfd_link_hash_defined;
@@ -13886,7 +15021,7 @@ ppc64_elf_build_stubs (struct bfd_link_i
 	{
 	  Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
 	  if (r == NULL)
-	    return FALSE;
+	    return false;
 	  r->r_offset = (htab->glink->output_offset
 			 + htab->glink->output_section->vma);
 	  r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
@@ -13921,23 +15056,60 @@ ppc64_elf_build_stubs (struct bfd_link_i
 	}
       else
 	{
+	  unsigned int insn;
+
+	  /* 0:
+	     .	.quad plt0-1f		# plt0 entry relative to 1:
+	     #
+	     # We get here with r12 initially @ a glink branch
+	     # Load the address of _dl_runtime_resolve from plt0 and
+	     # jump to it, with r0 set to the index of the PLT entry
+	     # to be resolved and r11 the link map.
+	     __glink_PLTresolve:
+	     .	std %r2,24(%r1)		# optional
+	     .	mflr %r0
+	     .	bcl 20,31,1f
+	     1:
+	     .	mflr %r11
+	     .	mtlr %r0
+	     .	ld %r0,(0b-1b)(%r11)
+	     .	sub %r12,%r12,%r11
+	     .	add %r11,%r0,%r11
+	     .	addi %r0,%r12,1b-2f
+	     .	ld %r12,0(%r11)
+	     .	srdi %r0,%r0,2
+	     .	mtctr %r12
+	     .	ld %r11,8(%r11)
+	     .	bctr
+	     2:
+	     .	b __glink_PLTresolve
+	     .	...
+	     .	b __glink_PLTresolve  */
+
+	  if (htab->has_plt_localentry0)
+	    {
+	      bfd_put_32 (htab->glink->owner, STD_R2_0R1 + 24, p);
+	      p += 4;
+	    }
 	  bfd_put_32 (htab->glink->owner, MFLR_R0, p);
 	  p += 4;
 	  bfd_put_32 (htab->glink->owner, BCL_20_31, p);
 	  p += 4;
 	  bfd_put_32 (htab->glink->owner, MFLR_R11, p);
 	  p += 4;
-	  bfd_put_32 (htab->glink->owner, STD_R2_0R1 + 24, p);
-	  p += 4;
-	  bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
-	  p += 4;
 	  bfd_put_32 (htab->glink->owner, MTLR_R0, p);
 	  p += 4;
+	  if (htab->has_plt_localentry0)
+	    insn = LD_R0_0R11 | (-20 & 0xfffc);
+	  else
+	    insn = LD_R0_0R11 | (-16 & 0xfffc);
+	  bfd_put_32 (htab->glink->owner, insn, p);
+	  p += 4;
 	  bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
 	  p += 4;
-	  bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
+	  bfd_put_32 (htab->glink->owner, ADD_R11_R0_R11, p);
 	  p += 4;
-	  bfd_put_32 (htab->glink->owner, ADDI_R0_R12 | (-48 & 0xffff), p);
+	  bfd_put_32 (htab->glink->owner, ADDI_R0_R12 | (-44 & 0xffff), p);
 	  p += 4;
 	  bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
 	  p += 4;
@@ -13979,28 +15151,47 @@ ppc64_elf_build_stubs (struct bfd_link_i
 	}
     }
 
+  if (htab->tga_group != NULL)
+    {
+      htab->tga_group->lr_restore = 23 * 4;
+      htab->tga_group->stub_sec->size = 24 * 4;
+      if (!emit_tga_desc (htab))
+	return false;
+      if (htab->glink_eh_frame != NULL
+	  && htab->glink_eh_frame->size != 0)
+	{
+	  size_t align = 4;
+
+	  p = htab->glink_eh_frame->contents;
+	  p += (sizeof (glink_eh_frame_cie) + align - 1) & -align;
+	  p += 17;
+	  htab->tga_group->eh_size = emit_tga_desc_eh_frame (htab, p) - p;
+	}
+    }
+
   /* Build .glink global entry stubs, and PLT relocs for globals.  */
   elf_link_hash_traverse (&htab->elf, build_global_entry_stubs_and_plt, info);
 
   if (!write_plt_relocs_for_local_syms (info))
-    return FALSE;
+    return false;
 
   if (htab->brlt != NULL && htab->brlt->size != 0)
     {
       htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
 					 htab->brlt->size);
       if (htab->brlt->contents == NULL)
-	return FALSE;
+	return false;
     }
   if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
     {
       htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
 					    htab->relbrlt->size);
       if (htab->relbrlt->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Build the stubs as directed by the stub hash table.  */
+  htab->stub_id = 0;
   bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
 
   for (group = htab->group; group != NULL; group = group->next)
@@ -14030,7 +15221,7 @@ ppc64_elf_build_stubs (struct bfd_link_i
 
 	    for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
 	      if (!sfpr_define (info, &save_res_funcs[i], stub_sec))
-		return FALSE;
+		return false;
 	  }
       }
 
@@ -14057,7 +15248,7 @@ ppc64_elf_build_stubs (struct bfd_link_i
 		_bfd_error_handler
 		  (_("%s offset too large for .eh_frame sdata4 encoding"),
 		   group->stub_sec->name);
-		return FALSE;
+		return false;
 	      }
 	    bfd_put_32 (htab->elf.dynobj, val, p + 8);
 	    p += (group->eh_size + 17 + 3) & -4;
@@ -14076,13 +15267,67 @@ ppc64_elf_build_stubs (struct bfd_link_i
 	      _bfd_error_handler
 		(_("%s offset too large for .eh_frame sdata4 encoding"),
 		 htab->glink->name);
-	      return FALSE;
+	      return false;
 	    }
 	  bfd_put_32 (htab->elf.dynobj, val, p + 8);
 	  p += (24 + align - 1) & -align;
 	}
     }
 
+  if (htab->elf.srelrdyn != NULL && htab->elf.srelrdyn->size != 0)
+    {
+      htab->elf.srelrdyn->contents
+	= bfd_alloc (htab->elf.dynobj, htab->elf.srelrdyn->size);
+      if (htab->elf.srelrdyn->contents == NULL)
+	return false;
+
+      bfd_vma *relr_addr = sort_relr (htab);
+      if (htab->relr_count != 0 && relr_addr == NULL)
+	return false;
+
+      size_t i = 0;
+      bfd_byte *loc = htab->elf.srelrdyn->contents;
+      while (i < htab->relr_count)
+	{
+	  bfd_vma base = relr_addr[i];
+	  BFD_ASSERT ((base & ((1 << RELR_ALIGN) - 1)) == 0);
+	  bfd_put_64 (htab->elf.dynobj, base, loc);
+	  loc += 8;
+	  i++;
+	  while (i < htab->relr_count
+		 && relr_addr[i] == base)
+	    {
+	      htab->stub_error = true;
+	      i++;
+	    }
+	  base += 8;
+	  while (1)
+	    {
+	      bfd_vma bits = 0;
+	      while (i < htab->relr_count
+		     && relr_addr[i] - base < 63 * 8
+		     && (relr_addr[i] - base) % 8 == 0)
+		{
+		  bits |= (bfd_vma) 1 << ((relr_addr[i] - base) / 8);
+		  i++;
+		}
+	      if (bits == 0)
+		break;
+	      bfd_put_64 (htab->elf.dynobj, (bits << 1) | 1, loc);
+	      loc += 8;
+	      base += 63 * 8;
+	    }
+	}
+      free (relr_addr);
+      /* Pad any excess with 1's, a do-nothing encoding.  */
+      while ((size_t) (loc - htab->elf.srelrdyn->contents)
+	     < htab->elf.srelrdyn->size)
+	{
+	  bfd_put_64 (htab->elf.dynobj, 1, loc);
+	  loc += 8;
+	}
+    }
+
   for (group = htab->group; group != NULL; group = group->next)
     if ((stub_sec = group->stub_sec) != NULL)
       {
@@ -14094,54 +15339,40 @@ ppc64_elf_build_stubs (struct bfd_link_i
       }
 
   if (group != NULL)
+    htab->stub_error = true;
+
+  if (htab->stub_error)
     {
-      htab->stub_error = TRUE;
       _bfd_error_handler (_("stubs don't match calculated size"));
+      return false;
     }
 
-  if (htab->stub_error)
-    return FALSE;
-
   if (stats != NULL)
     {
-      size_t len;
-      *stats = bfd_malloc (500);
-      if (*stats == NULL)
-	return FALSE;
-
-      len = sprintf (*stats,
-		     ngettext ("linker stubs in %u group\n",
-			       "linker stubs in %u groups\n",
-			       stub_sec_count),
-		     stub_sec_count);
-      sprintf (*stats + len, _("  branch         %lu\n"
-			       "  branch toc adj %lu\n"
-			       "  branch notoc   %lu\n"
-			       "  branch both    %lu\n"
-			       "  long branch    %lu\n"
-			       "  long toc adj   %lu\n"
-			       "  long notoc     %lu\n"
-			       "  long both      %lu\n"
-			       "  plt call       %lu\n"
-			       "  plt call save  %lu\n"
-			       "  plt call notoc %lu\n"
-			       "  plt call both  %lu\n"
-			       "  global entry   %lu"),
-	       htab->stub_count[ppc_stub_long_branch - 1],
-	       htab->stub_count[ppc_stub_long_branch_r2off - 1],
-	       htab->stub_count[ppc_stub_long_branch_notoc - 1],
-	       htab->stub_count[ppc_stub_long_branch_both - 1],
-	       htab->stub_count[ppc_stub_plt_branch - 1],
-	       htab->stub_count[ppc_stub_plt_branch_r2off - 1],
-	       htab->stub_count[ppc_stub_plt_branch_notoc - 1],
-	       htab->stub_count[ppc_stub_plt_branch_both - 1],
-	       htab->stub_count[ppc_stub_plt_call - 1],
-	       htab->stub_count[ppc_stub_plt_call_r2save - 1],
-	       htab->stub_count[ppc_stub_plt_call_notoc - 1],
-	       htab->stub_count[ppc_stub_plt_call_both - 1],
-	       htab->stub_count[ppc_stub_global_entry - 1]);
+      char *groupmsg;
+      if (asprintf (&groupmsg,
+		    ngettext ("linker stubs in %u group",
+			      "linker stubs in %u groups",
+			      stub_sec_count),
+		    stub_sec_count) < 0)
+	*stats = NULL;
+      else
+	{
+	  if (asprintf (stats, _("%s, iter %u\n"
+				 "  branch         %lu\n"
+				 "  long branch    %lu\n"
+				 "  plt call       %lu\n"
+				 "  global entry   %lu"),
+			groupmsg, htab->stub_iteration,
+			htab->stub_count[ppc_stub_long_branch - 1],
+			htab->stub_count[ppc_stub_plt_branch - 1],
+			htab->stub_count[ppc_stub_plt_call - 1],
+			htab->stub_count[ppc_stub_global_entry - 1]) < 0)
+	    *stats = NULL;
+	  free (groupmsg);
+	}
     }
-  return TRUE;
+  return true;
 }
 
 /* What to do when ld finds relocations against symbols defined in
@@ -14164,7 +15395,7 @@ ppc64_elf_action_discarded (asection *se
 
 /* These are the dynamic relocations supported by glibc.  */
 
-static bfd_boolean
+static bool
 ppc64_glibc_dynamic_reloc (enum elf_ppc64_reloc_type r_type)
 {
   switch (r_type)
@@ -14215,10 +15446,10 @@ ppc64_glibc_dynamic_reloc (enum elf_ppc6
     case R_PPC64_ADDR14_BRNTAKEN:
     case R_PPC64_REL32:
     case R_PPC64_REL64:
-      return TRUE;
+      return true;
 
     default:
-      return FALSE;
+      return false;
     }
 }
 
@@ -14251,7 +15482,7 @@ ppc64_glibc_dynamic_reloc (enum elf_ppc6
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 ppc64_elf_relocate_section (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    bfd *input_bfd,
@@ -14271,11 +15502,11 @@ ppc64_elf_relocate_section (bfd *output_
   bfd_byte *loc;
   struct got_entry **local_got_ents;
   bfd_vma TOCstart;
-  bfd_boolean ret = TRUE;
-  bfd_boolean is_opd;
+  bool ret = true;
+  bool is_opd;
   /* Assume 'at' branch hints.  */
-  bfd_boolean is_isa_v2 = TRUE;
-  bfd_boolean warned_dynamic = FALSE;
+  bool is_isa_v2 = true;
+  bool warned_dynamic = false;
   bfd_vma d_offset = (bfd_big_endian (input_bfd) ? 2 : 0);
 
   /* Initialize howto table if needed.  */
@@ -14284,16 +15515,16 @@ ppc64_elf_relocate_section (bfd *output_
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Don't relocate stub sections.  */
   if (input_section->owner == htab->params->stub_bfd)
-    return TRUE;
+    return true;
 
   if (!is_ppc64_elf (input_bfd))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   local_got_ents = elf_local_got_ents (input_bfd);
@@ -14320,8 +15551,8 @@ ppc64_elf_relocate_section (bfd *output_
       unsigned char tls_mask, tls_gd, tls_type;
       unsigned char sym_type;
       bfd_vma relocation;
-      bfd_boolean unresolved_reloc, save_unresolved_reloc;
-      bfd_boolean warned;
+      bool unresolved_reloc, save_unresolved_reloc;
+      bool warned;
       enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
       unsigned int insn;
       unsigned int mask;
@@ -14353,8 +15584,8 @@ ppc64_elf_relocate_section (bfd *output_
       sec = NULL;
       h_elf = NULL;
       sym_name = NULL;
-      unresolved_reloc = FALSE;
-      warned = FALSE;
+      unresolved_reloc = false;
+      warned = false;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -14389,7 +15620,7 @@ ppc64_elf_relocate_section (bfd *output_
 	}
       else
 	{
-	  bfd_boolean ignored;
+	  bool ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -14425,7 +15656,7 @@ ppc64_elf_relocate_section (bfd *output_
 		  }
 	    }
 	}
-      h = (struct ppc_link_hash_entry *) h_elf;
+      h = ppc_elf_hash_entry (h_elf);
 
       if (sec != NULL && discarded_section (sec))
 	{
@@ -14454,7 +15685,7 @@ ppc64_elf_relocate_section (bfd *output_
 	{
 	  relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
 	  sec = bfd_abs_section_ptr;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	}
 
       /* TLS optimizations.  Replace instruction sequences and relocs
@@ -14484,7 +15715,7 @@ ppc64_elf_relocate_section (bfd *output_
 
 	  if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
 			     &local_syms, rel, input_bfd))
-	    return FALSE;
+	    return false;
 
 	  if (toc_tls)
 	    tls_mask = *toc_tls;
@@ -14536,13 +15767,18 @@ ppc64_elf_relocate_section (bfd *output_
 	  break;
 
 	case R_PPC64_LO_DS_OPT:
-	  insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset);
-	  if ((insn & (0x3f << 26)) != 58u << 26)
-	    abort ();
-	  insn += (14u << 26) - (58u << 26);
-	  bfd_put_32 (input_bfd, insn, contents + rel->r_offset - d_offset);
-	  r_type = R_PPC64_TOC16_LO;
-	  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
+	  if (offset_in_range (input_section, rel->r_offset - d_offset, 4))
+	    {
+	      insn = bfd_get_32 (input_bfd,
+				 contents + rel->r_offset - d_offset);
+	      if ((insn & (0x3fu << 26)) != 58u << 26)
+		abort ();
+	      insn += (14u << 26) - (58u << 26);
+	      bfd_put_32 (input_bfd, insn,
+			  contents + rel->r_offset - d_offset);
+	      r_type = R_PPC64_TOC16_LO;
+	      rel->r_info = ELF64_R_INFO (r_symndx, r_type);
+	    }
 	  break;
 
 	case R_PPC64_TOC16:
@@ -14557,7 +15793,7 @@ ppc64_elf_relocate_section (bfd *output_
 	    retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
 				   &local_syms, rel, input_bfd);
 	    if (retval == 0)
-	      return FALSE;
+	      return false;
 
 	    if (toc_tls)
 	      {
@@ -14594,7 +15830,8 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT_TPREL16_HI:
 	case R_PPC64_GOT_TPREL16_HA:
 	  if ((tls_mask & TLS_TLS) != 0
-	      && (tls_mask & TLS_TPREL) == 0)
+	      && (tls_mask & TLS_TPREL) == 0
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    {
 	      rel->r_offset -= d_offset;
 	      bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
@@ -14606,7 +15843,8 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT_TPREL16_DS:
 	case R_PPC64_GOT_TPREL16_LO_DS:
 	  if ((tls_mask & TLS_TLS) != 0
-	      && (tls_mask & TLS_TPREL) == 0)
+	      && (tls_mask & TLS_TPREL) == 0
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    {
 	    toctprel:
 	      insn = bfd_get_32 (input_bfd,
@@ -14629,9 +15867,10 @@ ppc64_elf_relocate_section (bfd *output_
 	    }
 	  break;
 
-	case R_PPC64_GOT_TPREL34:
+	case R_PPC64_GOT_TPREL_PCREL34:
 	  if ((tls_mask & TLS_TLS) != 0
-	      && (tls_mask & TLS_TPREL) == 0)
+	      && (tls_mask & TLS_TPREL) == 0
+	      && offset_in_range (input_section, rel->r_offset, 8))
 	    {
 	      /* pld ra,sym@got@tprel@pcrel -> paddi ra,r13,sym@tprel  */
 	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
@@ -14650,7 +15889,8 @@ ppc64_elf_relocate_section (bfd *output_
 
 	case R_PPC64_TLS:
 	  if ((tls_mask & TLS_TLS) != 0
-	      && (tls_mask & TLS_TPREL) == 0)
+	      && (tls_mask & TLS_TPREL) == 0
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    {
 	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
 	      insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
@@ -14679,7 +15919,7 @@ ppc64_elf_relocate_section (bfd *output_
 		  /* For pcrel IE to LE we already have the full
 		     offset and thus don't need an addi here.  A nop
 		     or mr will do.  */
-		  if ((insn & (0x3f << 26)) == 14 << 26)
+		  if ((insn & (0x3fu << 26)) == 14 << 26)
 		    {
 		      /* Extract regs from addi rt,ra,si.  */
 		      unsigned int rt = (insn >> 21) & 0x1f;
@@ -14701,13 +15941,15 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT_TLSGD16_HI:
 	case R_PPC64_GOT_TLSGD16_HA:
 	  tls_gd = TLS_GDIE;
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    goto tls_gdld_hi;
 	  break;
 
 	case R_PPC64_GOT_TLSLD16_HI:
 	case R_PPC64_GOT_TLSLD16_HA:
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    {
 	    tls_gdld_hi:
 	      if ((tls_mask & tls_gd) != 0)
@@ -14726,13 +15968,15 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT_TLSGD16:
 	case R_PPC64_GOT_TLSGD16_LO:
 	  tls_gd = TLS_GDIE;
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    goto tls_ldgd_opt;
 	  break;
 
 	case R_PPC64_GOT_TLSLD16:
 	case R_PPC64_GOT_TLSLD16_LO:
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    {
 	      unsigned int insn1, insn2;
 
@@ -14746,8 +15990,10 @@ ppc64_elf_relocate_section (bfd *output_
 	      if (input_section->nomark_tls_get_addr
 		  && rel + 1 < relend
 		  && branch_reloc_hash_match (input_bfd, rel + 1,
+					      htab->tls_get_addr_fd,
+					      htab->tga_desc_fd,
 					      htab->tls_get_addr,
-					      htab->tls_get_addr_fd))
+					      htab->tga_desc))
 		offset = rel[1].r_offset;
 	      /* We read the low GOT_TLS (or TOC16) insn because we
 		 need to keep the destination reg.  It may be
@@ -14759,7 +16005,7 @@ ppc64_elf_relocate_section (bfd *output_
 		{
 		  /* IE */
 		  insn1 &= (0x1f << 21) | (0x1f << 16);
-		  insn1 |= 58 << 26;	/* ld */
+		  insn1 |= 58u << 26;	/* ld */
 		  insn2 = 0x7c636a14;	/* add 3,3,13 */
 		  if (offset != (bfd_vma) -1)
 		    rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
@@ -14800,10 +16046,11 @@ ppc64_elf_relocate_section (bfd *output_
 		}
 	      bfd_put_32 (input_bfd, insn1,
 			  contents + rel->r_offset - d_offset);
-	      if (offset != (bfd_vma) -1)
+	      if (offset != (bfd_vma) -1
+		  && offset_in_range (input_section, offset, 4))
 		{
 		  bfd_put_32 (input_bfd, insn2, contents + offset);
-		  if (offset + 8 <= input_section->size)
+		  if (offset_in_range (input_section, offset + 4, 4))
 		    {
 		      insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
 		      if (insn2 == LD_R2_0R1 + STK_TOC (htab))
@@ -14820,8 +16067,9 @@ ppc64_elf_relocate_section (bfd *output_
 	    }
 	  break;
 
-	case R_PPC64_GOT_TLSGD34:
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
+	case R_PPC64_GOT_TLSGD_PCREL34:
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
+	      && offset_in_range (input_section, rel->r_offset, 8))
 	    {
 	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
 	      pinsn <<= 32;
@@ -14830,7 +16078,7 @@ ppc64_elf_relocate_section (bfd *output_
 		{
 		  /* IE, pla -> pld  */
 		  pinsn += (-2ULL << 56) + (57ULL << 26) - (14ULL << 26);
-		  r_type = R_PPC64_GOT_TPREL34;
+		  r_type = R_PPC64_GOT_TPREL_PCREL34;
 		}
 	      else
 		{
@@ -14846,8 +16094,9 @@ ppc64_elf_relocate_section (bfd *output_
 	    }
 	  break;
 
-	case R_PPC64_GOT_TLSLD34:
-	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
+	case R_PPC64_GOT_TLSLD_PCREL34:
+	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
+	      && offset_in_range (input_section, rel->r_offset, 8))
 	    {
 	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
 	      pinsn <<= 32;
@@ -14867,7 +16116,10 @@ ppc64_elf_relocate_section (bfd *output_
 
 	case R_PPC64_TLSGD:
 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
-	      && rel + 1 < relend)
+	      && rel + 1 < relend
+	      && offset_in_range (input_section, rel->r_offset,
+				  is_8byte_reloc (ELF64_R_TYPE (rel[1].r_info))
+				  ? 8 : 4))
 	    {
 	      unsigned int insn2;
 	      enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
@@ -14883,7 +16135,7 @@ ppc64_elf_relocate_section (bfd *output_
 		  break;
 		}
 
-	      if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
+	      if (r_type1 == R_PPC64_PLTCALL)
 		bfd_put_32 (output_bfd, NOP, contents + offset + 4);
 
 	      if ((tls_mask & TLS_GDIE) != 0)
@@ -14901,6 +16153,7 @@ ppc64_elf_relocate_section (bfd *output_
 		      rel->r_addend = toc_addend;
 		    }
 		  if (r_type1 == R_PPC64_REL24_NOTOC
+		      || r_type1 == R_PPC64_REL24_P9NOTOC
 		      || r_type1 == R_PPC64_PLTCALL_NOTOC)
 		    {
 		      r_type = R_PPC64_NONE;
@@ -14927,7 +16180,10 @@ ppc64_elf_relocate_section (bfd *output_
 
 	case R_PPC64_TLSLD:
 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
-	      && rel + 1 < relend)
+	      && rel + 1 < relend
+	      && offset_in_range (input_section, rel->r_offset,
+				  is_8byte_reloc (ELF64_R_TYPE (rel[1].r_info))
+				  ? 8 : 4))
 	    {
 	      unsigned int insn2;
 	      enum elf_ppc64_reloc_type r_type1 = ELF64_R_TYPE (rel[1].r_info);
@@ -14943,10 +16199,11 @@ ppc64_elf_relocate_section (bfd *output_
 		  break;
 		}
 
-	      if (ELF64_R_TYPE (rel[1].r_info) == R_PPC64_PLTCALL)
+	      if (r_type1 == R_PPC64_PLTCALL)
 		bfd_put_32 (output_bfd, NOP, contents + offset + 4);
 
 	      if (r_type1 == R_PPC64_REL24_NOTOC
+		  || r_type1 == R_PPC64_REL24_P9NOTOC
 		  || r_type1 == R_PPC64_PLTCALL_NOTOC)
 		{
 		  r_type = R_PPC64_NONE;
@@ -14975,7 +16232,8 @@ ppc64_elf_relocate_section (bfd *output_
 	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
 	      && rel[1].r_offset == rel->r_offset + 8)
 	    {
-	      if ((tls_mask & TLS_GD) == 0)
+	      if ((tls_mask & TLS_GD) == 0
+		  && offset_in_range (input_section, rel->r_offset, 8))
 		{
 		  rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
 		  if ((tls_mask & TLS_GDIE) != 0)
@@ -14990,7 +16248,8 @@ ppc64_elf_relocate_section (bfd *output_
 	    }
 	  else
 	    {
-	      if ((tls_mask & TLS_LD) == 0)
+	      if ((tls_mask & TLS_LD) == 0
+		  && offset_in_range (input_section, rel->r_offset, 8))
 		{
 		  bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
 		  r_type = R_PPC64_NONE;
@@ -15011,7 +16270,8 @@ ppc64_elf_relocate_section (bfd *output_
 	  relocation = TOCstart + htab->sec_info[input_section->id].toc_off;
 	  if (!bfd_link_pic (info)
 	      && !info->traditional_format
-	      && relocation + 0x80008000 <= 0xffffffff)
+	      && relocation + 0x80008000 <= 0xffffffff
+	      && offset_in_range (input_section, rel->r_offset, 8))
 	    {
 	      unsigned int insn1, insn2;
 
@@ -15033,7 +16293,8 @@ ppc64_elf_relocate_section (bfd *output_
 	      relocation -= (rel->r_offset
 			     + input_section->output_offset
 			     + input_section->output_section->vma);
-	      if (relocation + 0x80008000 <= 0xffffffff)
+	      if (relocation + 0x80008000 <= 0xffffffff
+		  && offset_in_range (input_section, rel->r_offset, 8))
 		{
 		  unsigned int insn1, insn2;
 
@@ -15070,7 +16331,8 @@ ppc64_elf_relocate_section (bfd *output_
 	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_REL16_LO)
 	      && rel[1].r_offset == rel->r_offset + 4
 	      && rel[1].r_addend == rel->r_addend + 4
-	      && relocation + 0x80008000 <= 0xffffffff)
+	      && relocation + 0x80008000 <= 0xffffffff
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 8))
 	    {
 	      unsigned int insn1, insn2;
 	      offset = rel->r_offset - d_offset;
@@ -15105,7 +16367,8 @@ ppc64_elf_relocate_section (bfd *output_
 				      + input_section->output_offset
 				      + input_section->output_section->vma)
 	      && tocsave_find (htab, NO_INSERT,
-			       &local_syms, rel, input_bfd))
+			       &local_syms, rel, input_bfd)
+	      && offset_in_range (input_section, rel->r_offset, 4))
 	    {
 	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
 	      if (insn == NOP
@@ -15125,6 +16388,8 @@ ppc64_elf_relocate_section (bfd *output_
 	  /* Branch not taken prediction relocations.  */
 	case R_PPC64_ADDR14_BRNTAKEN:
 	case R_PPC64_REL14_BRNTAKEN:
+	  if (!offset_in_range (input_section, rel->r_offset, 4))
+	    break;
 	  insn |= bfd_get_32 (input_bfd,
 			      contents + rel->r_offset) & ~(0x01 << 21);
 	  /* Fall through.  */
@@ -15135,6 +16400,7 @@ ppc64_elf_relocate_section (bfd *output_
 
 	case R_PPC64_REL24:
 	case R_PPC64_REL24_NOTOC:
+	case R_PPC64_REL24_P9NOTOC:
 	case R_PPC64_PLTCALL:
 	case R_PPC64_PLTCALL_NOTOC:
 	  /* Calls to functions with a different TOC, such as calls to
@@ -15153,38 +16419,35 @@ ppc64_elf_relocate_section (bfd *output_
 	  if ((r_type == R_PPC64_PLTCALL
 	       || r_type == R_PPC64_PLTCALL_NOTOC)
 	      && stub_entry != NULL
-	      && stub_entry->stub_type >= ppc_stub_plt_call
-	      && stub_entry->stub_type <= ppc_stub_plt_call_both)
+	      && stub_entry->type.main == ppc_stub_plt_call)
 	    stub_entry = NULL;
 
 	  if (stub_entry != NULL
-	      && ((stub_entry->stub_type >= ppc_stub_plt_call
-		   && stub_entry->stub_type <= ppc_stub_plt_call_both)
-		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
-		  || stub_entry->stub_type == ppc_stub_plt_branch_both
-		  || stub_entry->stub_type == ppc_stub_long_branch_r2off
-		  || stub_entry->stub_type == ppc_stub_long_branch_both))
-	    {
-	      bfd_boolean can_plt_call = FALSE;
-
-	      if (stub_entry->stub_type == ppc_stub_plt_call
-		  && !htab->opd_abi
-		  && htab->params->plt_localentry0 != 0
-		  && is_elfv2_localentry0 (&h->elf))
+	      && (stub_entry->type.main == ppc_stub_plt_call
+		  || stub_entry->type.r2save))
+	    {
+	      bool can_plt_call = false;
+
+	      if (r_type == R_PPC64_REL24_NOTOC
+		  || r_type == R_PPC64_REL24_P9NOTOC)
 		{
-		  /* The function doesn't use or change r2.  */
-		  can_plt_call = TRUE;
+		  /* NOTOC calls don't need to restore r2.  */
+		  can_plt_call = true;
 		}
-	      else if (r_type == R_PPC64_REL24_NOTOC)
+	      else if (stub_entry->type.main == ppc_stub_plt_call
+		       && !htab->opd_abi
+		       && htab->params->plt_localentry0 != 0
+		       && h != NULL
+		       && is_elfv2_localentry0 (&h->elf))
 		{
-		  /* NOTOC calls don't need to restore r2.  */
-		  can_plt_call = TRUE;
+		  /* The function doesn't use or change r2.  */
+		  can_plt_call = true;
 		}
 
 	      /* All of these stubs may modify r2, so there must be a
 		 branch and link followed by a nop.  The nop is
 		 replaced by an insn to restore r2.  */
-	      else if (rel->r_offset + 8 <= input_section->size)
+	      else if (offset_in_range (input_section, rel->r_offset, 8))
 		{
 		  unsigned long br;
 
@@ -15197,14 +16460,13 @@ ppc64_elf_relocate_section (bfd *output_
 		      nop = bfd_get_32 (input_bfd,
 					contents + rel->r_offset + 4);
 		      if (nop == LD_R2_0R1 + STK_TOC (htab))
-			can_plt_call = TRUE;
+			can_plt_call = true;
 		      else if (nop == NOP
 			       || nop == CROR_151515
 			       || nop == CROR_313131)
 			{
 			  if (h != NULL
-			      && (h == htab->tls_get_addr_fd
-				  || h == htab->tls_get_addr)
+			      && is_tls_get_addr (&h->elf, htab)
 			      && htab->params->tls_get_addr_opt)
 			    {
 			      /* Special stub used, leave nop alone.  */
@@ -15213,7 +16475,7 @@ ppc64_elf_relocate_section (bfd *output_
 			    bfd_put_32 (input_bfd,
 					LD_R2_0R1 + STK_TOC (htab),
 					contents + rel->r_offset + 4);
-			  can_plt_call = TRUE;
+			  can_plt_call = true;
 			}
 		    }
 		}
@@ -15225,13 +16487,13 @@ ppc64_elf_relocate_section (bfd *output_
 		  if (*name == '.')
 		    ++name;
 
-		  if (strncmp (name, "__libc_start_main", 17) == 0
+		  if (startswith (name, "__libc_start_main")
 		      && (name[17] == 0 || name[17] == '@'))
 		    {
 		      /* Allow crt1 branch to go via a toc adjusting
 			 stub.  Other calls that never return could do
 			 the same, if we could detect such.  */
-		      can_plt_call = TRUE;
+		      can_plt_call = true;
 		    }
 		}
 
@@ -15253,16 +16515,15 @@ ppc64_elf_relocate_section (bfd *output_
 				     - sec->output_section->vma
 				     - sec->output_offset);
 
-		      opd_entry_value (sec, off, &code_sec, NULL, FALSE);
+		      opd_entry_value (sec, off, &code_sec, NULL, false);
 		    }
 		  if (code_sec == input_section)
-		    can_plt_call = TRUE;
+		    can_plt_call = true;
 		}
 
 	      if (!can_plt_call)
 		{
-		  if (stub_entry->stub_type >= ppc_stub_plt_call
-		      && stub_entry->stub_type <= ppc_stub_plt_call_both)
+		  if (stub_entry->type.main == ppc_stub_plt_call)
 		    info->callbacks->einfo
 		      /* xgettext:c-format */
 		      (_("%H: call to `%pT' lacks nop, can't restore toc; "
@@ -15276,25 +16537,24 @@ ppc64_elf_relocate_section (bfd *output_
 		       input_bfd, input_section, rel->r_offset, sym_name);
 
 		  bfd_set_error (bfd_error_bad_value);
-		  ret = FALSE;
+		  ret = false;
 		}
 
 	      if (can_plt_call
-		  && stub_entry->stub_type >= ppc_stub_plt_call
-		  && stub_entry->stub_type <= ppc_stub_plt_call_both)
-		unresolved_reloc = FALSE;
+		  && stub_entry->type.main == ppc_stub_plt_call)
+		unresolved_reloc = false;
 	    }
 
 	  if ((stub_entry == NULL
-	       || stub_entry->stub_type == ppc_stub_long_branch
-	       || stub_entry->stub_type == ppc_stub_plt_branch)
+	       || stub_entry->type.main == ppc_stub_long_branch
+	       || stub_entry->type.main == ppc_stub_plt_branch)
 	      && get_opd_info (sec) != NULL)
 	    {
 	      /* The branch destination is the value of the opd entry. */
 	      bfd_vma off = (relocation + addend
 			     - sec->output_section->vma
 			     - sec->output_offset);
-	      bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
+	      bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, false);
 	      if (dest != (bfd_vma) -1)
 		{
 		  relocation = dest;
@@ -15314,36 +16574,36 @@ ppc64_elf_relocate_section (bfd *output_
 						  : sym->st_other);
 
 	  if (stub_entry != NULL
-	      && (stub_entry->stub_type == ppc_stub_long_branch
-		  || stub_entry->stub_type == ppc_stub_plt_branch)
-	      && (r_type == R_PPC64_ADDR14_BRTAKEN
-		  || r_type == R_PPC64_ADDR14_BRNTAKEN
-		  || (relocation + addend - from + max_br_offset
-		      < 2 * max_br_offset)))
-	    /* Don't use the stub if this branch is in range.  */
-	    stub_entry = NULL;
-
-	  if (stub_entry != NULL
-	      && (stub_entry->stub_type == ppc_stub_long_branch_notoc
-		  || stub_entry->stub_type == ppc_stub_long_branch_both
-		  || stub_entry->stub_type == ppc_stub_plt_branch_notoc
-		  || stub_entry->stub_type == ppc_stub_plt_branch_both)
-	      && (r_type != R_PPC64_REL24_NOTOC
-		  || ((fdh ? fdh->elf.other : sym->st_other)
-		      & STO_PPC64_LOCAL_MASK) <= 1 << STO_PPC64_LOCAL_BIT)
-	      && (relocation + addend - from + max_br_offset
-		  < 2 * max_br_offset))
-	    stub_entry = NULL;
-
-	  if (stub_entry != NULL
-	      && (stub_entry->stub_type == ppc_stub_long_branch_r2off
-		  || stub_entry->stub_type == ppc_stub_long_branch_both
-		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
-		  || stub_entry->stub_type == ppc_stub_plt_branch_both)
-	      && r_type == R_PPC64_REL24_NOTOC
-	      && (relocation + addend - from + max_br_offset
-		  < 2 * max_br_offset))
-	    stub_entry = NULL;
+	      && (stub_entry->type.main == ppc_stub_long_branch
+		  || stub_entry->type.main == ppc_stub_plt_branch))
+	    {
+	      if (stub_entry->type.sub == ppc_stub_toc
+		  && !stub_entry->type.r2save
+		  && (r_type == R_PPC64_ADDR14_BRTAKEN
+		      || r_type == R_PPC64_ADDR14_BRNTAKEN
+		      || (relocation + addend - from + max_br_offset
+			  < 2 * max_br_offset)))
+		/* Don't use the stub if this branch is in range.  */
+		stub_entry = NULL;
+
+	      if (stub_entry != NULL
+		  && stub_entry->type.sub >= ppc_stub_notoc
+		  && ((r_type != R_PPC64_REL24_NOTOC
+		       && r_type != R_PPC64_REL24_P9NOTOC)
+		      || ((fdh ? fdh->elf.other : sym->st_other)
+			  & STO_PPC64_LOCAL_MASK) <= 1 << STO_PPC64_LOCAL_BIT)
+		  && (relocation + addend - from + max_br_offset
+		      < 2 * max_br_offset))
+		stub_entry = NULL;
+
+	      if (stub_entry != NULL
+		  && stub_entry->type.r2save
+		  && (r_type == R_PPC64_REL24_NOTOC
+		      || r_type == R_PPC64_REL24_P9NOTOC)
+		  && (relocation + addend - from + max_br_offset
+		      < 2 * max_br_offset))
+		stub_entry = NULL;
+	    }
 
 	  if (stub_entry != NULL)
 	    {
@@ -15351,7 +16611,7 @@ ppc64_elf_relocate_section (bfd *output_
 		 rather than the procedure directly.  */
 	      asection *stub_sec = stub_entry->group->stub_sec;
 
-	      if (stub_entry->stub_type == ppc_stub_save_res)
+	      if (stub_entry->type.main == ppc_stub_save_res)
 		relocation += (stub_sec->output_offset
 			       + stub_sec->output_section->vma
 			       + stub_sec->size - htab->sfpr->size
@@ -15364,27 +16624,27 @@ ppc64_elf_relocate_section (bfd *output_
 	      addend = 0;
 	      reloc_dest = DEST_STUB;
 
-	      if (((stub_entry->stub_type == ppc_stub_plt_call
-		    && ALWAYS_EMIT_R2SAVE)
-		   || stub_entry->stub_type == ppc_stub_plt_call_r2save
-		   || stub_entry->stub_type == ppc_stub_plt_call_both)
-		  && !(h != NULL
-		       && (h == htab->tls_get_addr_fd
-			   || h == htab->tls_get_addr)
-		       && htab->params->tls_get_addr_opt)
-		  && rel + 1 < relend
-		  && rel[1].r_offset == rel->r_offset + 4
-		  && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
-		relocation += 4;
-	      else if ((stub_entry->stub_type == ppc_stub_long_branch_both
-			|| stub_entry->stub_type == ppc_stub_plt_branch_both
-			|| stub_entry->stub_type == ppc_stub_plt_call_both)
-		       && r_type == R_PPC64_REL24_NOTOC)
-		relocation += 4;
-
-	      if (r_type == R_PPC64_REL24_NOTOC
-		  && (stub_entry->stub_type == ppc_stub_plt_call_notoc
-		      || stub_entry->stub_type == ppc_stub_plt_call_both))
+	      if (((stub_entry->type.r2save
+		    && (r_type == R_PPC64_REL24_NOTOC
+			|| r_type == R_PPC64_REL24_P9NOTOC))
+		   || ((stub_entry->type.main == ppc_stub_plt_call
+			&& (ALWAYS_EMIT_R2SAVE || stub_entry->type.r2save))
+		       && rel + 1 < relend
+		       && rel[1].r_offset == rel->r_offset + 4
+		       && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE))
+		  && !(stub_entry->type.main == ppc_stub_plt_call
+		       && htab->params->tls_get_addr_opt
+		       && h != NULL
+		       && is_tls_get_addr (&h->elf, htab)))
+		{
+		  /* Skip over the r2 store at the start of the stub.  */
+		  relocation += 4;
+		}
+
+	      if ((r_type == R_PPC64_REL24_NOTOC
+		   || r_type == R_PPC64_REL24_P9NOTOC)
+		  && stub_entry->type.main == ppc_stub_plt_call
+		  && stub_entry->type.sub >= ppc_stub_notoc)
 		htab->notoc_plt = 1;
 	    }
 
@@ -15419,9 +16679,11 @@ ppc64_elf_relocate_section (bfd *output_
 		   && h->elf.root.type == bfd_link_hash_undefweak
 		   && h->elf.dynindx == -1
 		   && (r_type == R_PPC64_REL24
-		       || r_type == R_PPC64_REL24_NOTOC)
+		       || r_type == R_PPC64_REL24_NOTOC
+		       || r_type == R_PPC64_REL24_P9NOTOC)
 		   && relocation == 0
-		   && addend == 0)
+		   && addend == 0
+		   && offset_in_range (input_section, rel->r_offset, 4))
 	    {
 	      bfd_put_32 (input_bfd, NOP, contents + rel->r_offset);
 	      goto copy_reloc;
@@ -15429,12 +16691,21 @@ ppc64_elf_relocate_section (bfd *output_
 	  break;
 
 	case R_PPC64_GOT16_DS:
+	  if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC
+	      || (bfd_link_pic (info)
+		  && sec == bfd_abs_section_ptr)
+	      || !htab->do_toc_opt)
+	    break;
 	  from = TOCstart + htab->sec_info[input_section->id].toc_off;
 	  if (relocation + addend - from + 0x8000 < 0x10000
-	      && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
+	      && sec != NULL
+	      && sec->output_section != NULL
+	      && !discarded_section (sec)
+	      && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf))
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    {
 	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
-	      if ((insn & (0x3f << 26 | 0x3)) == 58u << 26 /* ld */)
+	      if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
 		{
 		  insn += (14u << 26) - (58u << 26);
 		  bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
@@ -15446,19 +16717,30 @@ ppc64_elf_relocate_section (bfd *output_
 
 	case R_PPC64_GOT16_LO_DS:
 	case R_PPC64_GOT16_HA:
+	  if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC
+	      || (bfd_link_pic (info)
+		  && sec == bfd_abs_section_ptr)
+	      || !htab->do_toc_opt)
+	    break;
 	  from = TOCstart + htab->sec_info[input_section->id].toc_off;
 	  if (relocation + addend - from + 0x80008000ULL < 0x100000000ULL
-	      && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
+	      && sec != NULL
+	      && sec->output_section != NULL
+	      && !discarded_section (sec)
+	      && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf))
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    {
 	      insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
-	      if ((insn & (0x3f << 26 | 0x3)) == 58u << 26 /* ld */)
+	      if (r_type == R_PPC64_GOT16_LO_DS
+		  && (insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */)
 		{
 		  insn += (14u << 26) - (58u << 26);
 		  bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3));
 		  r_type = R_PPC64_TOC16_LO;
 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
 		}
-	      else if ((insn & (0x3f << 26)) == 15u << 26 /* addis */)
+	      else if (r_type == R_PPC64_GOT16_HA
+		       && (insn & (0x3fu << 26)) == 15u << 26 /* addis */)
 		{
 		  r_type = R_PPC64_TOC16_HA;
 		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
@@ -15467,32 +16749,45 @@ ppc64_elf_relocate_section (bfd *output_
 	  break;
 
 	case R_PPC64_GOT_PCREL34:
+	  if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC
+	      || (bfd_link_pic (info)
+		  && sec == bfd_abs_section_ptr)
+	      || !htab->do_toc_opt)
+	    break;
 	  from = (rel->r_offset
 		  + input_section->output_section->vma
 		  + input_section->output_offset);
-	  if (relocation - from + (1ULL << 33) < 1ULL << 34
-	      && SYMBOL_REFERENCES_LOCAL (info, &h->elf))
-	    {
-	      offset = rel->r_offset;
-	      pinsn = bfd_get_32 (input_bfd, contents + offset);
-	      pinsn <<= 32;
-	      pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
-	      if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
-		   == ((1ULL << 58) | (1ULL << 52) | (57ULL << 26) /* pld */))
-		{
-		  /* Replace with paddi.  */
-		  pinsn += (2ULL << 56) + (14ULL << 26) - (57ULL << 26);
-		  r_type = R_PPC64_PCREL34;
-		  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
-		  bfd_put_32 (input_bfd, pinsn >> 32, contents + offset);
-		  bfd_put_32 (input_bfd, pinsn, contents + offset + 4);
-		  goto pcrelopt;
-		}
-	    }
-	  break;
+	  if (!(relocation - from + (1ULL << 33) < 1ULL << 34
+		&& sec != NULL
+		&& sec->output_section != NULL
+		&& !discarded_section (sec)
+		&& (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf))
+		&& offset_in_range (input_section, rel->r_offset, 8)))
+	    break;
+
+	  offset = rel->r_offset;
+	  pinsn = bfd_get_32 (input_bfd, contents + offset);
+	  pinsn <<= 32;
+	  pinsn |= bfd_get_32 (input_bfd, contents + offset + 4);
+	  if ((pinsn & ((-1ULL << 50) | (63ULL << 26)))
+	      != ((1ULL << 58) | (1ULL << 52) | (57ULL << 26) /* pld */))
+	    break;
+
+	  /* Replace with paddi.  */
+	  pinsn += (2ULL << 56) + (14ULL << 26) - (57ULL << 26);
+	  r_type = R_PPC64_PCREL34;
+	  rel->r_info = ELF64_R_INFO (r_symndx, r_type);
+	  bfd_put_32 (input_bfd, pinsn >> 32, contents + offset);
+	  bfd_put_32 (input_bfd, pinsn, contents + offset + 4);
+	  /* Fall through.  */
 
 	case R_PPC64_PCREL34:
-	  if (SYMBOL_REFERENCES_LOCAL (info, &h->elf))
+	  if (!htab->params->no_pcrel_opt
+	      && rel + 1 < relend
+	      && rel[1].r_offset == rel->r_offset
+	      && rel[1].r_info == ELF64_R_INFO (0, R_PPC64_PCREL_OPT)
+	      && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf))
+	      && offset_in_range (input_section, rel->r_offset, 8))
 	    {
 	      offset = rel->r_offset;
 	      pinsn = bfd_get_32 (input_bfd, contents + offset);
@@ -15502,43 +16797,37 @@ ppc64_elf_relocate_section (bfd *output_
 		   == ((1ULL << 58) | (2ULL << 56) | (1ULL << 52)
 		       | (14ULL << 26) /* paddi */))
 		{
-		pcrelopt:
-		  if (rel + 1 < relend
-		      && rel[1].r_offset == offset
-		      && rel[1].r_info == ELF64_R_INFO (0, R_PPC64_PCREL_OPT))
+		  bfd_vma off2 = rel[1].r_addend;
+		  if (off2 == 0)
+		    /* zero means next insn.  */
+		    off2 = 8;
+		  off2 += offset;
+		  if (offset_in_range (input_section, off2, 4))
 		    {
-		      bfd_vma off2 = rel[1].r_addend;
-		      if (off2 == 0)
-			/* zero means next insn.  */
-			off2 = 8;
-		      off2 += offset;
-		      if (off2 + 4 <= input_section->size)
+		      uint64_t pinsn2;
+		      bfd_signed_vma addend_off;
+		      pinsn2 = bfd_get_32 (input_bfd, contents + off2);
+		      pinsn2 <<= 32;
+		      if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
+			{
+			  if (!offset_in_range (input_section, off2, 8))
+			    break;
+			  pinsn2 |= bfd_get_32 (input_bfd,
+						contents + off2 + 4);
+			}
+		      if (xlate_pcrel_opt (&pinsn, &pinsn2, &addend_off))
 			{
-			  uint64_t pinsn2;
-			  bfd_signed_vma addend_off;
-			  pinsn2 = bfd_get_32 (input_bfd, contents + off2);
-			  pinsn2 <<= 32;
+			  addend += addend_off;
+			  rel->r_addend = addend;
+			  bfd_put_32 (input_bfd, pinsn >> 32,
+				      contents + offset);
+			  bfd_put_32 (input_bfd, pinsn,
+				      contents + offset + 4);
+			  bfd_put_32 (input_bfd, pinsn2 >> 32,
+				      contents + off2);
 			  if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
-			    {
-			      if (off2 + 8 > input_section->size)
-				break;
-			      pinsn2 |= bfd_get_32 (input_bfd,
-						    contents + off2 + 4);
-			    }
-			  if (xlate_pcrel_opt (&pinsn, &pinsn2, &addend_off))
-			    {
-			      addend += addend_off;
-			      rel->r_addend = addend;
-			      bfd_put_32 (input_bfd, pinsn >> 32,
-					  contents + offset);
-			      bfd_put_32 (input_bfd, pinsn,
-					  contents + offset + 4);
-			      bfd_put_32 (input_bfd, pinsn2 >> 32,
-					  contents + off2);
-			      if ((pinsn2 & (63ULL << 58)) == 1ULL << 58)
-				bfd_put_32 (input_bfd, pinsn2,
-					    contents + off2 + 4);
-			    }
+			    bfd_put_32 (input_bfd, pinsn2,
+					contents + off2 + 4);
 			}
 		    }
 		}
@@ -15556,7 +16845,7 @@ ppc64_elf_relocate_section (bfd *output_
 			      input_bfd, ppc64_elf_howto_table[r_type]->name);
 
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	  goto copy_reloc;
 
 	case R_PPC64_NONE:
@@ -15578,7 +16867,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT_TLSGD16_LO:
 	case R_PPC64_GOT_TLSGD16_HI:
 	case R_PPC64_GOT_TLSGD16_HA:
-	case R_PPC64_GOT_TLSGD34:
+	case R_PPC64_GOT_TLSGD_PCREL34:
 	  tls_type = TLS_TLS | TLS_GD;
 	  goto dogot;
 
@@ -15586,7 +16875,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT_TLSLD16_LO:
 	case R_PPC64_GOT_TLSLD16_HI:
 	case R_PPC64_GOT_TLSLD16_HA:
-	case R_PPC64_GOT_TLSLD34:
+	case R_PPC64_GOT_TLSLD_PCREL34:
 	  tls_type = TLS_TLS | TLS_LD;
 	  goto dogot;
 
@@ -15594,7 +16883,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT_TPREL16_LO_DS:
 	case R_PPC64_GOT_TPREL16_HI:
 	case R_PPC64_GOT_TPREL16_HA:
-	case R_PPC64_GOT_TPREL34:
+	case R_PPC64_GOT_TPREL_PCREL34:
 	  tls_type = TLS_TLS | TLS_TPREL;
 	  goto dogot;
 
@@ -15602,7 +16891,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT_DTPREL16_LO_DS:
 	case R_PPC64_GOT_DTPREL16_HI:
 	case R_PPC64_GOT_DTPREL16_HA:
-	case R_PPC64_GOT_DTPREL34:
+	case R_PPC64_GOT_DTPREL_PCREL34:
 	  tls_type = TLS_TLS | TLS_DTPREL;
 	  goto dogot;
 
@@ -15624,7 +16913,7 @@ ppc64_elf_relocate_section (bfd *output_
 	    struct got_entry *ent;
 
 	    if (tls_type == (TLS_TLS | TLS_LD)
-		&& SYMBOL_REFERENCES_LOCAL (info, &h->elf))
+		&& (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf)))
 	      ent = ppc64_tlsld_got (input_bfd);
 	    else
 	      {
@@ -15642,7 +16931,7 @@ ppc64_elf_relocate_section (bfd *output_
 		    else
 		      {
 			indx = h->elf.dynindx;
-			unresolved_reloc = FALSE;
+			unresolved_reloc = false;
 		      }
 		    ent = h->elf.got.glist;
 		  }
@@ -15681,7 +16970,7 @@ ppc64_elf_relocate_section (bfd *output_
 		   the case of TLSLD where we'll use one entry per
 		   module.  */
 		asection *relgot;
-		bfd_boolean ifunc;
+		bool ifunc;
 
 		*offp = off | 1;
 		relgot = NULL;
@@ -15691,10 +16980,8 @@ ppc64_elf_relocate_section (bfd *output_
 		if (ifunc)
 		  {
 		    relgot = htab->elf.irelplt;
-		    if (indx == 0)
-		      htab->local_ifunc_resolver = 1;
-		    else if (is_static_defined (&h->elf))
-		      htab->maybe_local_ifunc_resolver = 1;
+		    if (indx == 0 || is_static_defined (&h->elf))
+		      htab->elf.ifunc_resolvers = true;
 		  }
 		else if (indx != 0
 			 || (bfd_link_pic (info)
@@ -15702,7 +16989,13 @@ ppc64_elf_relocate_section (bfd *output_
 				 || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf))
 			     && !(tls_type != 0
 				  && bfd_link_executable (info)
-				  && SYMBOL_REFERENCES_LOCAL (info, &h->elf))))
+				  && (h == NULL
+				      || SYMBOL_REFERENCES_LOCAL (info,
+								  &h->elf)))
+			     && (h != NULL
+				 ? !bfd_is_abs_symbol (&h->elf.root)
+				 : sym->st_shndx != SHN_ABS)))
+
 		  relgot = ppc64_elf_tdata (ent->owner)->relgot;
 		if (relgot != NULL)
 		  {
@@ -15716,11 +17009,9 @@ ppc64_elf_relocate_section (bfd *output_
 			outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
 			if (tls_type == (TLS_TLS | TLS_GD))
 			  {
-			    loc = relgot->contents;
-			    loc += (relgot->reloc_count++
-				    * sizeof (Elf64_External_Rela));
-			    bfd_elf64_swap_reloca_out (output_bfd,
-						       &outrel, loc);
+			    BFD_ASSERT (count_and_swap_reloc_out (output_bfd,
+								  &outrel,
+								  relgot));
 			    outrel.r_offset += 8;
 			    outrel.r_addend = orig_rel.r_addend;
 			    outrel.r_info
@@ -15758,10 +17049,10 @@ ppc64_elf_relocate_section (bfd *output_
 			      outrel.r_addend -= htab->elf.tls_sec->vma;
 			  }
 		      }
-		    loc = relgot->contents;
-		    loc += (relgot->reloc_count++
-			    * sizeof (Elf64_External_Rela));
-		    bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
+		    if (!(info->enable_dt_relr
+			  && ELF64_R_TYPE (outrel.r_info) == R_PPC64_RELATIVE))
+		      BFD_ASSERT (count_and_swap_reloc_out (output_bfd,
+							    &outrel, relgot));
 		  }
 
 		/* Init the .got section contents here if we're not
@@ -15801,10 +17092,10 @@ ppc64_elf_relocate_section (bfd *output_
 	    relocation = got->output_section->vma + got->output_offset + off;
 	    addend = 0;
 	    if (!(r_type == R_PPC64_GOT_PCREL34
-		  || r_type == R_PPC64_GOT_TLSGD34
-		  || r_type == R_PPC64_GOT_TLSLD34
-		  || r_type == R_PPC64_GOT_TPREL34
-		  || r_type == R_PPC64_GOT_DTPREL34))
+		  || r_type == R_PPC64_GOT_TLSGD_PCREL34
+		  || r_type == R_PPC64_GOT_TLSLD_PCREL34
+		  || r_type == R_PPC64_GOT_TPREL_PCREL34
+		  || r_type == R_PPC64_GOT_DTPREL_PCREL34))
 	      addend = -(TOCstart + htab->sec_info[input_section->id].toc_off);
 	  }
 	  break;
@@ -15823,7 +17114,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_PLTCALL_NOTOC:
 	  /* Relocation is to the entry for this symbol in the
 	     procedure linkage table.  */
-	  unresolved_reloc = TRUE;
+	  unresolved_reloc = true;
 	  {
 	    struct plt_entry **plt_list = NULL;
 	    if (h != NULL)
@@ -15846,9 +17137,7 @@ ppc64_elf_relocate_section (bfd *output_
 		      bfd_vma got;
 
 		      plt = htab->elf.splt;
-		      if (!htab->elf.dynamic_sections_created
-			  || h == NULL
-			  || h->elf.dynindx == -1)
+		      if (use_local_plt (info, elf_hash_entry (h)))
 			{
 			  if (h != NULL
 			      ? h->elf.type == STT_GNU_IFUNC
@@ -15870,7 +17159,7 @@ ppc64_elf_relocate_section (bfd *output_
 			  relocation -= got;
 			}
 		      addend = 0;
-		      unresolved_reloc = FALSE;
+		      unresolved_reloc = false;
 		      break;
 		    }
 	      }
@@ -15887,7 +17176,16 @@ ppc64_elf_relocate_section (bfd *output_
 	  else if (sec != NULL && sec->id < htab->sec_info_arr_size)
 	    relocation += htab->sec_info[sec->id].toc_off;
 	  else
-	    unresolved_reloc = TRUE;
+	    unresolved_reloc = true;
+	  if (unresolved_reloc
+	      || (!is_opd
+		  && h != NULL
+		  && !SYMBOL_REFERENCES_LOCAL (info, &h->elf)))
+	    info->callbacks->einfo
+	      /* xgettext:c-format */
+	      (_("%H: %s against %pT is not supported\n"),
+	       input_bfd, input_section, rel->r_offset,
+	       ppc64_elf_howto_table[r_type]->name, sym_name);
 	  goto dodyn;
 
 	  /* TOC16 relocs.  We want the offset relative to the TOC base,
@@ -15936,6 +17234,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_REL14_BRTAKEN:
 	case R_PPC64_REL24:
 	case R_PPC64_REL24_NOTOC:
+	case R_PPC64_REL24_P9NOTOC:
 	case R_PPC64_PCREL34:
 	case R_PPC64_PCREL28:
 	  break;
@@ -15952,10 +17251,10 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_TPREL16_HIGHERA:
 	case R_PPC64_TPREL16_HIGHEST:
 	case R_PPC64_TPREL16_HIGHESTA:
-	case R_PPC64_TPREL34:
 	  if (h != NULL
 	      && h->elf.root.type == bfd_link_hash_undefweak
-	      && h->elf.dynindx == -1)
+	      && h->elf.dynindx == -1
+	      && offset_in_range (input_section, rel->r_offset - d_offset, 4))
 	    {
 	      /* Make this relocation against an undefined weak symbol
 		 resolve to zero.  This is really just a tweak, since
@@ -15969,6 +17268,9 @@ ppc64_elf_relocate_section (bfd *output_
 		bfd_put_32 (input_bfd, insn, p);
 	      break;
 	    }
+	  /* Fall through.  */
+
+	case R_PPC64_TPREL34:
 	  if (htab->elf.tls_sec != NULL)
 	    addend -= htab->elf.tls_sec->vma + TP_OFFSET;
 	  /* The TPREL16 relocs shouldn't really be used in shared
@@ -16058,14 +17360,14 @@ ppc64_elf_relocate_section (bfd *output_
 
 	  if (bfd_link_pic (info)
 	      ? ((h == NULL
-		  || h->dyn_relocs != NULL)
+		  || h->elf.dyn_relocs != NULL)
 		 && ((h != NULL && pc_dynrelocs (h))
 		     || must_be_dyn_reloc (info, r_type)))
 	      : (h != NULL
-		 ? h->dyn_relocs != NULL
+		 ? h->elf.dyn_relocs != NULL
 		 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
 	    {
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 	      asection *sreloc;
 	      bfd_vma out_off;
 	      long indx = 0;
@@ -16074,15 +17376,15 @@ ppc64_elf_relocate_section (bfd *output_
 		 are copied into the output file to be resolved at run
 		 time.  */
 
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      out_off = _bfd_elf_section_offset (output_bfd, info,
 						 input_section, rel->r_offset);
 	      if (out_off == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (out_off == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      out_off += (input_section->output_section->vma
 			  + input_section->output_offset);
 	      outrel.r_offset = out_off;
@@ -16101,7 +17403,8 @@ ppc64_elf_relocate_section (bfd *output_
 
 	      if (skip)
 		memset (&outrel, 0, sizeof outrel);
-	      else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
+	      else if (h != NULL
+		       && !SYMBOL_REFERENCES_LOCAL (info, &h->elf)
 		       && !is_opd
 		       && r_type != R_PPC64_TOC)
 		{
@@ -16129,7 +17432,7 @@ ppc64_elf_relocate_section (bfd *output_
 			     bug in binutils handling of weak syms.)
 			     In these cases we won't use the opd
 			     entry in this lib.  */
-			  unresolved_reloc = FALSE;
+			  unresolved_reloc = false;
 			}
 		      if (!is_opd
 			  && r_type == R_PPC64_ADDR64
@@ -16145,7 +17448,7 @@ ppc64_elf_relocate_section (bfd *output_
 			     Prelink also wants simple and consistent rules
 			     for relocs.  This make all RELATIVE relocs have
 			     *r_offset equal to r_addend.  */
-			  relocate = TRUE;
+			  relocate = true;
 			}
 		    }
 		  else
@@ -16161,14 +17464,14 @@ ppc64_elf_relocate_section (bfd *output_
 			     input_bfd, input_section, rel->r_offset,
 			     ppc64_elf_howto_table[r_type]->name,
 			     sym_name);
-			  ret = FALSE;
+			  ret = false;
 			}
 		      else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
 			;
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -16217,26 +17520,26 @@ ppc64_elf_relocate_section (bfd *output_
 		    }
 		}
 
-	      sreloc = elf_section_data (input_section)->sreloc;
-	      if (h != NULL
-		  ? h->elf.type == STT_GNU_IFUNC
-		  : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
-		{
-		  sreloc = htab->elf.irelplt;
-		  if (indx == 0)
-		    htab->local_ifunc_resolver = 1;
-		  else if (is_static_defined (&h->elf))
-		    htab->maybe_local_ifunc_resolver = 1;
-		}
-	      if (sreloc == NULL)
-		abort ();
+	      if (!(info->enable_dt_relr
+		    && ELF64_R_TYPE (outrel.r_info) == R_PPC64_RELATIVE
+		    && maybe_relr (ELF64_R_TYPE (orig_rel.r_info),
+				   rel, input_section)))
+		{
+		  sreloc = elf_section_data (input_section)->sreloc;
+		  if (h != NULL
+		      ? h->elf.type == STT_GNU_IFUNC
+		      : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+		    {
+		      sreloc = htab->elf.irelplt;
+		      if (indx == 0 || is_static_defined (&h->elf))
+			htab->elf.ifunc_resolvers = true;
+		    }
+		  if (sreloc == NULL)
+		    abort ();
 
-	      if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
-		  >= sreloc->size)
-		abort ();
-	      loc = sreloc->contents;
-	      loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
-	      bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
+		  BFD_ASSERT (count_and_swap_reloc_out (output_bfd, &outrel,
+							sreloc));
+		}
 
 	      if (!warned_dynamic
 		  && !ppc64_glibc_dynamic_reloc (ELF64_R_TYPE (outrel.r_info)))
@@ -16248,7 +17551,7 @@ ppc64_elf_relocate_section (bfd *output_
 		     input_bfd,
 		     ppc64_elf_howto_table[ELF64_R_TYPE (outrel.r_info)]->name,
 		     sym_name);
-		  warned_dynamic = TRUE;
+		  warned_dynamic = true;
 		}
 
 	      /* If this reloc is against an external symbol, it will
@@ -16257,7 +17560,7 @@ ppc64_elf_relocate_section (bfd *output_
 		 that the section contents are a known value.  */
 	      if (!relocate)
 		{
-		  unresolved_reloc = FALSE;
+		  unresolved_reloc = false;
 		  /* The value chosen here is quite arbitrary as ld.so
 		     ignores section contents except for the special
 		     case of .opd where the contents might be accessed
@@ -16303,7 +17606,7 @@ ppc64_elf_relocate_section (bfd *output_
 	     ppc64_elf_howto_table[r_type]->name, sym_name);
 
 	  bfd_set_error (bfd_error_invalid_operation);
-	  ret = FALSE;
+	  ret = false;
 	  goto copy_reloc;
 	}
 
@@ -16335,7 +17638,9 @@ ppc64_elf_relocate_section (bfd *output_
 	    htab->notoc_plt = 1;
 	  /* Fall through.  */
 	case R_PPC64_PLTCALL:
-	  if (unresolved_reloc)
+	  if (unresolved_reloc
+	      && offset_in_range (input_section, rel->r_offset,
+				  r_type == R_PPC64_PLTCALL ? 8 : 4))
 	    {
 	      /* No plt entry.  Make this into a direct call.  */
 	      bfd_byte *p = contents + rel->r_offset;
@@ -16353,7 +17658,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_PLTSEQ:
 	  if (unresolved_reloc)
 	    {
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	      goto nop_it;
 	    }
 	  break;
@@ -16363,12 +17668,13 @@ ppc64_elf_relocate_section (bfd *output_
 	    htab->notoc_plt = 1;
 	  /* Fall through.  */
 	case R_PPC64_PLT_PCREL34:
-	  if (unresolved_reloc)
+	  if (unresolved_reloc
+	      && offset_in_range (input_section, rel->r_offset, 8))
 	    {
 	      bfd_byte *p = contents + rel->r_offset;
 	      bfd_put_32 (input_bfd, PNOP >> 32, p);
 	      bfd_put_32 (input_bfd, PNOP, p + 4);
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	      goto copy_reloc;
 	    }
 	  break;
@@ -16376,7 +17682,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_PLT16_HA:
 	  if (unresolved_reloc)
 	    {
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	      goto nop_it;
 	    }
 	  /* Fall through.  */
@@ -16387,13 +17693,20 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT16_HA:
 	case R_PPC64_TOC16_HA:
 	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
-	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
+	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn
+	      && !(bfd_link_pic (info)
+		   && (h != NULL
+		       ? bfd_is_abs_symbol (&h->elf.root)
+		       : sec == bfd_abs_section_ptr)))
 	    {
 	      bfd_byte *p;
 	    nop_it:
-	      p = contents + (rel->r_offset & ~3);
-	      bfd_put_32 (input_bfd, NOP, p);
-	      goto copy_reloc;
+	      if (offset_in_range (input_section, rel->r_offset & ~3, 4))
+		{
+		  p = contents + (rel->r_offset & ~3);
+		  bfd_put_32 (input_bfd, NOP, p);
+		  goto copy_reloc;
+		}
 	    }
 	  break;
 
@@ -16401,7 +17714,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_PLT16_LO_DS:
 	  if (unresolved_reloc)
 	    {
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	      goto nop_it;
 	    }
 	  /* Fall through.  */
@@ -16414,14 +17727,19 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_TOC16_LO:
 	case R_PPC64_TOC16_LO_DS:
 	  if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
-	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
+	      && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn
+	      && !(bfd_link_pic (info)
+		   && (h != NULL
+		       ? bfd_is_abs_symbol (&h->elf.root)
+		       : sec == bfd_abs_section_ptr))
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    {
 	      bfd_byte *p = contents + (rel->r_offset & ~3);
 	      insn = bfd_get_32 (input_bfd, p);
-	      if ((insn & (0x3f << 26)) == 12u << 26 /* addic */)
+	      if ((insn & (0x3fu << 26)) == 12u << 26 /* addic */)
 		{
 		  /* Transform addic to addi when we change reg.  */
-		  insn &= ~((0x3f << 26) | (0x1f << 16));
+		  insn &= ~((0x3fu << 26) | (0x1f << 16));
 		  insn |= (14u << 26) | (2 << 16);
 		}
 	      else
@@ -16434,28 +17752,21 @@ ppc64_elf_relocate_section (bfd *output_
 	  break;
 
 	case R_PPC64_TPREL16_HA:
-	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
+	  if (htab->do_tls_opt
+	      && relocation + addend + 0x8000 < 0x10000
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    {
 	      bfd_byte *p = contents + (rel->r_offset & ~3);
-	      insn = bfd_get_32 (input_bfd, p);
-	      if ((insn & ((0x3f << 26) | 0x1f << 16))
-		  != ((15u << 26) | (13 << 16)) /* addis rt,13,imm */)
-		/* xgettext:c-format */
-		info->callbacks->minfo
-		  (_("%H: warning: %s unexpected insn %#x.\n"),
-		   input_bfd, input_section, rel->r_offset,
-		   ppc64_elf_howto_table[r_type]->name, insn);
-	      else
-		{
-		  bfd_put_32 (input_bfd, NOP, p);
-		  goto copy_reloc;
-		}
+	      bfd_put_32 (input_bfd, NOP, p);
+	      goto copy_reloc;
 	    }
 	  break;
 
 	case R_PPC64_TPREL16_LO:
 	case R_PPC64_TPREL16_LO_DS:
-	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
+	  if (htab->do_tls_opt
+	      && relocation + addend + 0x8000 < 0x10000
+	      && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	    {
 	      bfd_byte *p = contents + (rel->r_offset & ~3);
 	      insn = bfd_get_32 (input_bfd, p);
@@ -16539,6 +17850,8 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_TPREL16_LO_DS:
 	case R_PPC64_DTPREL16_DS:
 	case R_PPC64_DTPREL16_LO_DS:
+	  if (!offset_in_range (input_section, rel->r_offset & ~3, 4))
+	    break;
 	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
 	  mask = 3;
 	  /* If this reloc is against an lq, lxv, or stxv insn, then
@@ -16547,8 +17860,8 @@ ppc64_elf_relocate_section (bfd *output_
 	     forms of all the _DS relocs bloats all reloc switches in
 	     this file.  It doesn't make much sense to use these
 	     relocs in data, so testing the insn should be safe.  */
-	  if ((insn & (0x3f << 26)) == (56u << 26)
-	      || ((insn & (0x3f << 26)) == (61u << 26) && (insn & 3) == 1))
+	  if ((insn & (0x3fu << 26)) == (56u << 26)
+	      || ((insn & (0x3fu << 26)) == (61u << 26) && (insn & 3) == 1))
 	    mask = 15;
 	  relocation += addend;
 	  addend = insn & (mask ^ 3);
@@ -16562,7 +17875,7 @@ ppc64_elf_relocate_section (bfd *output_
 		 ppc64_elf_howto_table[r_type]->name,
 		 mask + 1);
 	      bfd_set_error (bfd_error_bad_value);
-	      ret = FALSE;
+	      ret = false;
 	      goto copy_reloc;
 	    }
 	  break;
@@ -16584,7 +17897,7 @@ ppc64_elf_relocate_section (bfd *output_
 	     input_bfd, input_section, rel->r_offset,
 	     howto->name,
 	     h->elf.root.root.string);
-	  ret = FALSE;
+	  ret = false;
 	}
 
       /* 16-bit fields in insns mostly have signed values, but a
@@ -16592,20 +17905,21 @@ ppc64_elf_relocate_section (bfd *output_
 	 have different reloc types.  */
       if (howto->complain_on_overflow != complain_overflow_dont
 	  && howto->dst_mask == 0xffff
-	  && (input_section->flags & SEC_CODE) != 0)
+	  && (input_section->flags & SEC_CODE) != 0
+	  && offset_in_range (input_section, rel->r_offset & ~3, 4))
 	{
 	  enum complain_overflow complain = complain_overflow_signed;
 
 	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
-	  if ((insn & (0x3f << 26)) == 10u << 26 /* cmpli */)
+	  if ((insn & (0x3fu << 26)) == 10u << 26 /* cmpli */)
 	    complain = complain_overflow_bitfield;
 	  else if (howto->rightshift == 0
-		   ? ((insn & (0x3f << 26)) == 28u << 26 /* andi */
-		      || (insn & (0x3f << 26)) == 24u << 26 /* ori */
-		      || (insn & (0x3f << 26)) == 26u << 26 /* xori */)
-		   : ((insn & (0x3f << 26)) == 29u << 26 /* andis */
-		      || (insn & (0x3f << 26)) == 25u << 26 /* oris */
-		      || (insn & (0x3f << 26)) == 27u << 26 /* xoris */))
+		   ? ((insn & (0x3fu << 26)) == 28u << 26 /* andi */
+		      || (insn & (0x3fu << 26)) == 24u << 26 /* ori */
+		      || (insn & (0x3fu << 26)) == 26u << 26 /* xori */)
+		   : ((insn & (0x3fu << 26)) == 29u << 26 /* andis */
+		      || (insn & (0x3fu << 26)) == 25u << 26 /* oris */
+		      || (insn & (0x3fu << 26)) == 27u << 26 /* xoris */))
 	    complain = complain_overflow_unsigned;
 	  if (howto->complain_on_overflow != complain)
 	    {
@@ -16626,15 +17940,15 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_GOT_PCREL34:
 	case R_PPC64_TPREL34:
 	case R_PPC64_DTPREL34:
-	case R_PPC64_GOT_TLSGD34:
-	case R_PPC64_GOT_TLSLD34:
-	case R_PPC64_GOT_TPREL34:
-	case R_PPC64_GOT_DTPREL34:
+	case R_PPC64_GOT_TLSGD_PCREL34:
+	case R_PPC64_GOT_TLSLD_PCREL34:
+	case R_PPC64_GOT_TPREL_PCREL34:
+	case R_PPC64_GOT_DTPREL_PCREL34:
 	case R_PPC64_PLT_PCREL34:
 	case R_PPC64_PLT_PCREL34_NOTOC:
 	case R_PPC64_D28:
 	case R_PPC64_PCREL28:
-	  if (rel->r_offset + 8 > input_section->size)
+	  if (!offset_in_range (input_section, rel->r_offset, 8))
 	    r = bfd_reloc_outofrange;
 	  else
 	    {
@@ -16663,7 +17977,7 @@ ppc64_elf_relocate_section (bfd *output_
 	  break;
 
 	case R_PPC64_REL16DX_HA:
-	  if (rel->r_offset + 4 > input_section->size)
+	  if (!offset_in_range (input_section, rel->r_offset, 4))
 	    r = bfd_reloc_outofrange;
 	  else
 	    {
@@ -16715,11 +18029,10 @@ ppc64_elf_relocate_section (bfd *output_
 			   && (h->elf.root.type == bfd_link_hash_undefweak
 			       || h->elf.root.type == bfd_link_hash_undefined)
 			   && is_branch_reloc (r_type))))
-		info->callbacks->reloc_overflow (info, &h->elf.root,
-						 sym_name, reloc_name,
-						 orig_rel.r_addend,
-						 input_bfd, input_section,
-						 rel->r_offset);
+		info->callbacks->reloc_overflow
+		  (info, (struct bfd_link_hash_entry *) h, sym_name,
+		   reloc_name, orig_rel.r_addend, input_bfd, input_section,
+		   rel->r_offset);
 	    }
 	  else
 	    {
@@ -16728,10 +18041,9 @@ ppc64_elf_relocate_section (bfd *output_
 		(_("%H: %s against `%pT': error %d\n"),
 		 input_bfd, input_section, rel->r_offset,
 		 reloc_name, sym_name, (int) r);
-	      ret = FALSE;
+	      ret = false;
 	    }
-	  if (more_info != NULL)
-	    free (more_info);
+	  free (more_info);
 	}
     copy_reloc:
       if (wrel != rel)
@@ -16763,15 +18075,16 @@ ppc64_elf_relocate_section (bfd *output_
      adjusted.  Worse, reloc symbol indices will be for the output
      file rather than the input.  Save a copy of the relocs for
      opd_entry_value.  */
-  if (is_opd && (info->emitrelocations || bfd_link_relocatable (info)))
+  if (is_opd
+      && (info->emitrelocations || bfd_link_relocatable (info))
+      && input_section->reloc_count != 0)
     {
       bfd_size_type amt;
       amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
       rel = bfd_alloc (input_bfd, amt);
-      BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd.relocs == NULL);
-      ppc64_elf_tdata (input_bfd)->opd.relocs = rel;
+      ppc64_elf_section_data (input_section)->u.opd.u.relocs = rel;
       if (rel == NULL)
-	return FALSE;
+	return false;
       memcpy (rel, relocs, amt);
     }
   return ret;
@@ -16812,7 +18125,7 @@ ppc64_elf_output_symbol_hook (struct bfd
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
 				 struct bfd_link_info *info,
 				 struct elf_link_hash_entry *h,
@@ -16823,7 +18136,7 @@ ppc64_elf_finish_dynamic_symbol (bfd *ou
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (!htab->opd_abi && !h->def_regular)
     for (ent = h->plt.plist; ent != NULL; ent = ent->next)
@@ -16858,26 +18171,21 @@ ppc64_elf_finish_dynamic_symbol (bfd *ou
       /* This symbol needs a copy reloc.  Set it up.  */
       Elf_Internal_Rela rela;
       asection *srel;
-      bfd_byte *loc;
 
       if (h->dynindx == -1)
 	abort ();
 
-      rela.r_offset = (h->root.u.def.value
-		       + h->root.u.def.section->output_section->vma
-		       + h->root.u.def.section->output_offset);
+      rela.r_offset = defined_sym_val (h);
       rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
       rela.r_addend = 0;
       if (h->root.u.def.section == htab->elf.sdynrelro)
 	srel = htab->elf.sreldynrelro;
       else
 	srel = htab->elf.srelbss;
-      loc = srel->contents;
-      loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
-      bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
+      BFD_ASSERT (count_and_swap_reloc_out (output_bfd, &rela, srel));
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Used to decide how to sort relocs in an optimal manner for the
@@ -16910,7 +18218,7 @@ ppc64_elf_reloc_type_class (const struct
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
 				   struct bfd_link_info *info)
 {
@@ -16920,7 +18228,7 @@ ppc64_elf_finish_dynamic_sections (bfd *
 
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->elf.dynobj;
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
@@ -16993,11 +18301,7 @@ ppc64_elf_finish_dynamic_sections (bfd *
 	      break;
 
 	    case DT_TEXTREL:
-	      if (htab->local_ifunc_resolver)
-		info->callbacks->einfo
-		  (_("%X%P: text relocations and GNU indirect "
-		     "functions will result in a segfault at runtime\n"));
-	      else if (htab->maybe_local_ifunc_resolver)
+	      if (htab->elf.ifunc_resolvers)
 		info->callbacks->einfo
 		  (_("%P: warning: text relocations and GNU indirect "
 		     "functions may result in a segfault at runtime\n"));
@@ -17039,7 +18343,7 @@ ppc64_elf_finish_dynamic_sections (bfd *
 				       elf_section_data (htab->brlt)->rela.hdr,
 				       elf_section_data (htab->brlt)->relocs,
 				       NULL))
-    return FALSE;
+    return false;
 
   if (htab->glink != NULL
       && htab->glink->reloc_count != 0
@@ -17048,7 +18352,7 @@ ppc64_elf_finish_dynamic_sections (bfd *
 				       elf_section_data (htab->glink)->rela.hdr,
 				       elf_section_data (htab->glink)->relocs,
 				       NULL))
-    return FALSE;
+    return false;
 
 
   if (htab->glink_eh_frame != NULL
@@ -17057,7 +18361,7 @@ ppc64_elf_finish_dynamic_sections (bfd *
       && !_bfd_elf_write_section_eh_frame (output_bfd, info,
 					   htab->glink_eh_frame,
 					   htab->glink_eh_frame->contents))
-    return FALSE;
+    return false;
 
   /* We need to handle writing out multiple GOT sections ourselves,
      since we didn't add them to DYNOBJ.  We know dynobj is the first
@@ -17076,7 +18380,7 @@ ppc64_elf_finish_dynamic_sections (bfd *
 	  && !bfd_set_section_contents (output_bfd, s->output_section,
 					s->contents, s->output_offset,
 					s->size))
-	return FALSE;
+	return false;
       s = ppc64_elf_tdata (dynobj)->relgot;
       if (s != NULL
 	  && s->size != 0
@@ -17084,10 +18388,23 @@ ppc64_elf_finish_dynamic_sections (bfd *
 	  && !bfd_set_section_contents (output_bfd, s->output_section,
 					s->contents, s->output_offset,
 					s->size))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
+}
+
+static bool
+ppc64_elf_free_cached_info (bfd *abfd)
+{
+  if (abfd->sections)
+    for (asection *opd = bfd_get_section_by_name (abfd, ".opd");
+	 opd != NULL;
+	 opd = bfd_get_next_section_by_name (NULL, opd))
+      if (opd->reloc_count == 0)
+	free (ppc64_elf_section_data (opd)->u.opd.u.contents);
+
+  return _bfd_elf_free_cached_info (abfd);
 }
 
 #include "elf64-target.h"
@@ -17095,7 +18412,9 @@ ppc64_elf_finish_dynamic_sections (bfd *
 /* FreeBSD support */
 
 #undef  TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM powerpc_elf64_fbsd_le_vec
 #undef  TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME "elf64-powerpcle-freebsd"
 
 #undef  TARGET_BIG_SYM
 #define TARGET_BIG_SYM	powerpc_elf64_fbsd_vec
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-ppc.h ./bfd/elf64-ppc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-ppc.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-ppc.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC64-specific support for 64-bit ELF.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -27,6 +27,7 @@ struct ppc64_elf_params
   /* Linker call-backs.  */
   asection * (*add_stub_section) (const char *, asection *);
   void (*layout_sections_again) (void);
+  void (*edit) (void);
 
   /* Maximum size of a group of input sections that can be handled by
      one stub section.  A value of +/-1 indicates the bfd back-end
@@ -36,6 +37,9 @@ struct ppc64_elf_params
   /* Whether to use a special call stub for __tls_get_addr.  */
   int tls_get_addr_opt;
 
+  /* Whether the special call stub should save r4..r12.  */
+  int no_tls_get_addr_regsave;
+
   /* Whether to allow multiple toc sections.  */
   int no_multi_toc;
 
@@ -51,6 +55,12 @@ struct ppc64_elf_params
   /* Set if PLT call stubs for localentry:0 functions should omit r2 save.  */
   int plt_localentry0;
 
+  /* Whether to use power10 instructions in linkage stubs.  */
+  int power10_stubs;
+
+  /* Whether R_PPC64_PCREL_OPT should be ignored.  */
+  int no_pcrel_opt;
+
   /* Whether to canonicalize .opd so that there are no overlapping
      .opd entries.  */
   int non_overlapping_opd;
@@ -65,19 +75,19 @@ struct ppc64_elf_params
   int object_in_toc;
 };
 
-bfd_boolean ppc64_elf_init_stub_bfd
+bool ppc64_elf_init_stub_bfd
   (struct bfd_link_info *, struct ppc64_elf_params *);
-bfd_boolean ppc64_elf_edit_opd
+bool ppc64_elf_edit_opd
   (struct bfd_link_info *);
-bfd_boolean ppc64_elf_inline_plt
+bool ppc64_elf_inline_plt
   (struct bfd_link_info *);
-asection *ppc64_elf_tls_setup
+bool ppc64_elf_tls_setup
   (struct bfd_link_info *);
-bfd_boolean ppc64_elf_tls_optimize
+bool ppc64_elf_tls_optimize
   (struct bfd_link_info *);
-bfd_boolean ppc64_elf_edit_toc
+bool ppc64_elf_edit_toc
   (struct bfd_link_info *);
-bfd_boolean ppc64_elf_has_small_toc_reloc
+bool ppc64_elf_has_small_toc_reloc
   (asection *);
 bfd_vma ppc64_elf_set_toc
   (struct bfd_link_info *, bfd *);
@@ -85,17 +95,17 @@ int ppc64_elf_setup_section_lists
   (struct bfd_link_info *);
 void ppc64_elf_start_multitoc_partition
   (struct bfd_link_info *);
-bfd_boolean ppc64_elf_next_toc_section
+bool ppc64_elf_next_toc_section
   (struct bfd_link_info *, asection *);
-bfd_boolean ppc64_elf_layout_multitoc
+bool ppc64_elf_layout_multitoc
   (struct bfd_link_info *);
 void ppc64_elf_finish_multitoc_partition
   (struct bfd_link_info *);
-bfd_boolean ppc64_elf_check_init_fini
+bool ppc64_elf_check_init_fini
   (struct bfd_link_info *);
-bfd_boolean ppc64_elf_next_input_section
+bool ppc64_elf_next_input_section
   (struct bfd_link_info *, asection *);
-bfd_boolean ppc64_elf_size_stubs
+bool ppc64_elf_size_stubs
 (struct bfd_link_info *);
-bfd_boolean ppc64_elf_build_stubs
+bool ppc64_elf_build_stubs
   (struct bfd_link_info *, char **);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-s390.c ./bfd/elf64-s390.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-s390.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-s390.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* IBM S/390-specific support for 64-bit ELF
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Contributed Martin Schwidefsky (schwidefsky@de.ibm.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -44,149 +44,149 @@ static reloc_howto_type elf_howto_table[
 {
   HOWTO (R_390_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = 2 byte, 2 = 4 byte) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_390_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
-  HOWTO(R_390_8,	 0, 0,	8, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_8",	 FALSE, 0,0x000000ff, FALSE),
-  HOWTO(R_390_12,	 0, 1, 12, FALSE, 0, complain_overflow_dont,
-	bfd_elf_generic_reloc, "R_390_12",	 FALSE, 0,0x00000fff, FALSE),
-  HOWTO(R_390_16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_16",	 FALSE, 0,0x0000ffff, FALSE),
-  HOWTO(R_390_32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_32",	 FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_PC32,	 0, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC32",	 FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_GOT12,	 0, 1, 12, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOT12",	 FALSE, 0,0x00000fff, FALSE),
-  HOWTO(R_390_GOT32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOT32",	 FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_PLT32,	 0, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT32",	 FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_COPY,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_COPY",	 FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_GLOB_DAT,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GLOB_DAT", FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_JMP_SLOT,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_JMP_SLOT", FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_RELATIVE,	 0, 4, 64,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_RELATIVE", FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_GOTOFF32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTOFF32", FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_GOTPC,	 0, 4, 64,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPC",	 FALSE, 0,MINUS_ONE,  TRUE),
-  HOWTO(R_390_GOT16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOT16",	 FALSE, 0,0x0000ffff, FALSE),
-  HOWTO(R_390_PC16,	 0, 1, 16,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC16",	 FALSE, 0,0x0000ffff, TRUE),
-  HOWTO(R_390_PC16DBL,	 1, 1, 16,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC16DBL",	 FALSE, 0,0x0000ffff, TRUE),
-  HOWTO(R_390_PLT16DBL,	 1, 1, 16,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT16DBL", FALSE, 0,0x0000ffff, TRUE),
-  HOWTO(R_390_PC32DBL,	 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC32DBL",	 FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_PLT32DBL,	 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT32DBL", FALSE, 0,0xffffffff, TRUE),
-  HOWTO(R_390_GOTPCDBL,	 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPCDBL", FALSE, 0,MINUS_ONE,  TRUE),
-  HOWTO(R_390_64,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_64",	 FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_PC64,	 0, 4, 64,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC64",	 FALSE, 0,MINUS_ONE,  TRUE),
-  HOWTO(R_390_GOT64,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOT64",	 FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_PLT64,	 0, 4, 64,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT64",	 FALSE, 0,MINUS_ONE,  TRUE),
-  HOWTO(R_390_GOTENT,	 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTENT",	 FALSE, 0,MINUS_ONE,  TRUE),
-  HOWTO(R_390_GOTOFF16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTOFF16", FALSE, 0,0x0000ffff, FALSE),
-  HOWTO(R_390_GOTOFF64,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTOFF64", FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_GOTPLT12,	 0, 1, 12, FALSE, 0, complain_overflow_dont,
-	bfd_elf_generic_reloc, "R_390_GOTPLT12", FALSE, 0,0x00000fff, FALSE),
-  HOWTO(R_390_GOTPLT16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPLT16", FALSE, 0,0x0000ffff, FALSE),
-  HOWTO(R_390_GOTPLT32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPLT32", FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_GOTPLT64,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPLT64", FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_GOTPLTENT, 1, 2, 32,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_GOTPLTENT",FALSE, 0,MINUS_ONE,  TRUE),
-  HOWTO(R_390_PLTOFF16,	 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLTOFF16", FALSE, 0,0x0000ffff, FALSE),
-  HOWTO(R_390_PLTOFF32,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLTOFF32", FALSE, 0,0xffffffff, FALSE),
-  HOWTO(R_390_PLTOFF64,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLTOFF64", FALSE, 0,MINUS_ONE,  FALSE),
-  HOWTO(R_390_TLS_LOAD, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-	s390_tls_reloc, "R_390_TLS_LOAD", FALSE, 0, 0, FALSE),
-  HOWTO(R_390_TLS_GDCALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-	s390_tls_reloc, "R_390_TLS_GDCALL", FALSE, 0, 0, FALSE),
-  HOWTO(R_390_TLS_LDCALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-	s390_tls_reloc, "R_390_TLS_LDCALL", FALSE, 0, 0, FALSE),
+  HOWTO(R_390_8,	 0, 1,	8, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_8",	 false, 0,0x000000ff, false),
+  HOWTO(R_390_12,	 0, 2, 12, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_390_12",	 false, 0,0x00000fff, false),
+  HOWTO(R_390_16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_16",	 false, 0,0x0000ffff, false),
+  HOWTO(R_390_32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_32",	 false, 0,0xffffffff, false),
+  HOWTO(R_390_PC32,	 0, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC32",	 false, 0,0xffffffff, true),
+  HOWTO(R_390_GOT12,	 0, 2, 12, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOT12",	 false, 0,0x00000fff, false),
+  HOWTO(R_390_GOT32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOT32",	 false, 0,0xffffffff, false),
+  HOWTO(R_390_PLT32,	 0, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT32",	 false, 0,0xffffffff, true),
+  HOWTO(R_390_COPY,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_COPY",	 false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_GLOB_DAT,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GLOB_DAT", false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_JMP_SLOT,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_JMP_SLOT", false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_RELATIVE,	 0, 8, 64,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_RELATIVE", false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_GOTOFF32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTOFF32", false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_GOTPC,	 0, 8, 64,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPC",	 false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_GOT16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOT16",	 false, 0,0x0000ffff, false),
+  HOWTO(R_390_PC16,	 0, 2, 16,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC16",	 false, 0,0x0000ffff, true),
+  HOWTO(R_390_PC16DBL,	 1, 2, 16,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC16DBL",	 false, 0,0x0000ffff, true),
+  HOWTO(R_390_PLT16DBL,	 1, 2, 16,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT16DBL", false, 0,0x0000ffff, true),
+  HOWTO(R_390_PC32DBL,	 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC32DBL",	 false, 0,0xffffffff, true),
+  HOWTO(R_390_PLT32DBL,	 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT32DBL", false, 0,0xffffffff, true),
+  HOWTO(R_390_GOTPCDBL,	 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPCDBL", false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_64,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_64",	 false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_PC64,	 0, 8, 64,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC64",	 false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_GOT64,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOT64",	 false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_PLT64,	 0, 8, 64,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT64",	 false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_GOTENT,	 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTENT",	 false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_GOTOFF16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTOFF16", false, 0,0x0000ffff, false),
+  HOWTO(R_390_GOTOFF64,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTOFF64", false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_GOTPLT12,	 0, 2, 12, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_390_GOTPLT12", false, 0,0x00000fff, false),
+  HOWTO(R_390_GOTPLT16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPLT16", false, 0,0x0000ffff, false),
+  HOWTO(R_390_GOTPLT32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPLT32", false, 0,0xffffffff, false),
+  HOWTO(R_390_GOTPLT64,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPLT64", false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_GOTPLTENT, 1, 4, 32,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_GOTPLTENT",false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_PLTOFF16,	 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLTOFF16", false, 0,0x0000ffff, false),
+  HOWTO(R_390_PLTOFF32,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLTOFF32", false, 0,0xffffffff, false),
+  HOWTO(R_390_PLTOFF64,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLTOFF64", false, 0,MINUS_ONE,  false),
+  HOWTO(R_390_TLS_LOAD, 0, 0, 0, false, 0, complain_overflow_dont,
+	s390_tls_reloc, "R_390_TLS_LOAD", false, 0, 0, false),
+  HOWTO(R_390_TLS_GDCALL, 0, 0, 0, false, 0, complain_overflow_dont,
+	s390_tls_reloc, "R_390_TLS_GDCALL", false, 0, 0, false),
+  HOWTO(R_390_TLS_LDCALL, 0, 0, 0, false, 0, complain_overflow_dont,
+	s390_tls_reloc, "R_390_TLS_LDCALL", false, 0, 0, false),
   EMPTY_HOWTO (R_390_TLS_GD32),	/* Empty entry for R_390_TLS_GD32.  */
-  HOWTO(R_390_TLS_GD64,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_GD64", FALSE, 0, MINUS_ONE, FALSE),
-  HOWTO(R_390_TLS_GOTIE12, 0, 1, 12, FALSE, 0, complain_overflow_dont,
-	bfd_elf_generic_reloc, "R_390_TLS_GOTIE12", FALSE, 0, 0x00000fff, FALSE),
+  HOWTO(R_390_TLS_GD64,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_GD64", false, 0, MINUS_ONE, false),
+  HOWTO(R_390_TLS_GOTIE12, 0, 2, 12, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_390_TLS_GOTIE12", false, 0, 0x00000fff, false),
   EMPTY_HOWTO (R_390_TLS_GOTIE32),	/* Empty entry for R_390_TLS_GOTIE32.  */
-  HOWTO(R_390_TLS_GOTIE64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_GOTIE64", FALSE, 0, MINUS_ONE, FALSE),
+  HOWTO(R_390_TLS_GOTIE64, 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_GOTIE64", false, 0, MINUS_ONE, false),
   EMPTY_HOWTO (R_390_TLS_LDM32),	/* Empty entry for R_390_TLS_LDM32.  */
-  HOWTO(R_390_TLS_LDM64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_LDM64", FALSE, 0, MINUS_ONE, FALSE),
+  HOWTO(R_390_TLS_LDM64, 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_LDM64", false, 0, MINUS_ONE, false),
   EMPTY_HOWTO (R_390_TLS_IE32),	/* Empty entry for R_390_TLS_IE32.  */
-  HOWTO(R_390_TLS_IE64,	 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_IE64", FALSE, 0, MINUS_ONE, FALSE),
-  HOWTO(R_390_TLS_IEENT, 1, 2, 32, TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_IEENT", FALSE, 0, MINUS_ONE, TRUE),
+  HOWTO(R_390_TLS_IE64,	 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_IE64", false, 0, MINUS_ONE, false),
+  HOWTO(R_390_TLS_IEENT, 1, 4, 32, true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_IEENT", false, 0, MINUS_ONE, true),
   EMPTY_HOWTO (R_390_TLS_LE32),	/* Empty entry for R_390_TLS_LE32.  */
-  HOWTO(R_390_TLS_LE64,	 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_LE64", FALSE, 0, MINUS_ONE, FALSE),
+  HOWTO(R_390_TLS_LE64,	 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_LE64", false, 0, MINUS_ONE, false),
   EMPTY_HOWTO (R_390_TLS_LDO32),	/* Empty entry for R_390_TLS_LDO32.  */
-  HOWTO(R_390_TLS_LDO64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_LDO64", FALSE, 0, MINUS_ONE, FALSE),
-  HOWTO(R_390_TLS_DTPMOD, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_DTPMOD", FALSE, 0, MINUS_ONE, FALSE),
-  HOWTO(R_390_TLS_DTPOFF, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_DTPOFF", FALSE, 0, MINUS_ONE, FALSE),
-  HOWTO(R_390_TLS_TPOFF, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_TLS_TPOFF", FALSE, 0, MINUS_ONE, FALSE),
-  HOWTO(R_390_20,	 0, 2, 20, FALSE, 8, complain_overflow_dont,
-	s390_elf_ldisp_reloc, "R_390_20",      FALSE, 0,0x0fffff00, FALSE),
-  HOWTO(R_390_GOT20,	 0, 2, 20, FALSE, 8, complain_overflow_dont,
-	s390_elf_ldisp_reloc, "R_390_GOT20",   FALSE, 0,0x0fffff00, FALSE),
-  HOWTO(R_390_GOTPLT20,	 0, 2, 20, FALSE, 8, complain_overflow_dont,
-	s390_elf_ldisp_reloc, "R_390_GOTPLT20", FALSE, 0,0x0fffff00, FALSE),
-  HOWTO(R_390_TLS_GOTIE20, 0, 2, 20, FALSE, 8, complain_overflow_dont,
-	s390_elf_ldisp_reloc, "R_390_TLS_GOTIE20", FALSE, 0,0x0fffff00, FALSE),
-  HOWTO(R_390_IRELATIVE, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_IRELATIVE", FALSE, 0, MINUS_ONE, FALSE),
-  HOWTO(R_390_PC12DBL,	 1, 1, 12,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC12DBL",	 FALSE, 0,0x00000fff, TRUE),
-  HOWTO(R_390_PLT12DBL,	 1, 1, 12,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT12DBL", FALSE, 0,0x00000fff, TRUE),
-  HOWTO(R_390_PC24DBL,	 1, 2, 24,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PC24DBL",	 FALSE, 0,0x00ffffff, TRUE),
-  HOWTO(R_390_PLT24DBL,	 1, 2, 24,  TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_390_PLT24DBL", FALSE, 0,0x00ffffff, TRUE),
+  HOWTO(R_390_TLS_LDO64, 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_LDO64", false, 0, MINUS_ONE, false),
+  HOWTO(R_390_TLS_DTPMOD, 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_DTPMOD", false, 0, MINUS_ONE, false),
+  HOWTO(R_390_TLS_DTPOFF, 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_DTPOFF", false, 0, MINUS_ONE, false),
+  HOWTO(R_390_TLS_TPOFF, 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_TLS_TPOFF", false, 0, MINUS_ONE, false),
+  HOWTO(R_390_20,	 0, 4, 20, false, 8, complain_overflow_dont,
+	s390_elf_ldisp_reloc, "R_390_20",      false, 0,0x0fffff00, false),
+  HOWTO(R_390_GOT20,	 0, 4, 20, false, 8, complain_overflow_dont,
+	s390_elf_ldisp_reloc, "R_390_GOT20",   false, 0,0x0fffff00, false),
+  HOWTO(R_390_GOTPLT20,	 0, 4, 20, false, 8, complain_overflow_dont,
+	s390_elf_ldisp_reloc, "R_390_GOTPLT20", false, 0,0x0fffff00, false),
+  HOWTO(R_390_TLS_GOTIE20, 0, 4, 20, false, 8, complain_overflow_dont,
+	s390_elf_ldisp_reloc, "R_390_TLS_GOTIE20", false, 0,0x0fffff00, false),
+  HOWTO(R_390_IRELATIVE, 0, 8, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_IRELATIVE", false, 0, MINUS_ONE, false),
+  HOWTO(R_390_PC12DBL,	 1, 2, 12,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC12DBL",	 false, 0,0x00000fff, true),
+  HOWTO(R_390_PLT12DBL,	 1, 2, 12,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT12DBL", false, 0,0x00000fff, true),
+  HOWTO(R_390_PC24DBL,	 1, 4, 24,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PC24DBL",	 false, 0,0x00ffffff, true),
+  HOWTO(R_390_PLT24DBL,	 1, 4, 24,  true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_PLT24DBL", false, 0,0x00ffffff, true),
 };
 
 /* GNU extension to record C++ vtable hierarchy.  */
 static reloc_howto_type elf64_s390_vtinherit_howto =
-  HOWTO (R_390_GNU_VTINHERIT, 0,4,0,FALSE,0,complain_overflow_dont, NULL, "R_390_GNU_VTINHERIT", FALSE,0, 0, FALSE);
+  HOWTO (R_390_GNU_VTINHERIT, 0,8,0,false,0,complain_overflow_dont, NULL, "R_390_GNU_VTINHERIT", false,0, 0, false);
 static reloc_howto_type elf64_s390_vtentry_howto =
-  HOWTO (R_390_GNU_VTENTRY, 0,4,0,FALSE,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_390_GNU_VTENTRY", FALSE,0,0, FALSE);
+  HOWTO (R_390_GNU_VTENTRY, 0,8,0,false,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_390_GNU_VTENTRY", false,0,0, false);
 
 static reloc_howto_type *
 elf_s390_reloc_type_lookup (bfd *abfd,
@@ -354,7 +354,7 @@ elf_s390_reloc_name_lookup (bfd *abfd AT
 /* We need to use ELF64_R_TYPE so we have our own copy of this function,
    and elf64-s390.c has its own copy.  */
 
-static bfd_boolean
+static bool
 elf_s390_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 			arelent *cache_ptr,
 			Elf_Internal_Rela *dst)
@@ -378,11 +378,11 @@ elf_s390_info_to_howto (bfd *abfd ATTRIB
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      abfd, r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       cache_ptr->howto = &elf_howto_table[r_type];
     }
-  return TRUE;
+  return true;
 }
 
 /* A relocation function which doesn't do anything.  */
@@ -450,11 +450,11 @@ s390_elf_ldisp_reloc (bfd *abfd,
     return bfd_reloc_ok;
 }
 
-static bfd_boolean
+static bool
 elf_s390_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == '.' && (name[1] == 'X' || name[1] == 'L'))
-    return TRUE;
+    return true;
 
   return _bfd_elf_is_local_label_name (abfd, name);
 }
@@ -571,9 +571,6 @@ struct elf_s390_link_hash_entry
 {
   struct elf_link_hash_entry elf;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   /* Number of GOTPLT references for a function.  */
   bfd_signed_vma gotplt_refcount;
 
@@ -638,14 +635,14 @@ struct elf_s390_obj_tdata
    && elf_tdata (bfd) != NULL				\
    && elf_object_id (bfd) == S390_ELF_DATA)
 
-static bfd_boolean
+static bool
 elf_s390_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct elf_s390_obj_tdata),
 				  S390_ELF_DATA);
 }
 
-static bfd_boolean
+static bool
 elf_s390_object_p (bfd *abfd)
 {
   /* Set the right machine number for an s390 elf32 file.  */
@@ -666,9 +663,6 @@ struct elf_s390_link_hash_table
     bfd_vma offset;
   } tls_ldm_got;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* Options passed from the linker.  */
   struct s390_elf_params *params;
 };
@@ -676,8 +670,9 @@ struct elf_s390_link_hash_table
 /* Get the s390 ELF linker hash table from a link_info structure.  */
 
 #define elf_s390_hash_table(p)						\
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash))	\
-   == S390_ELF_DATA ? ((struct elf_s390_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == S390_ELF_DATA)		\
+   ? (struct elf_s390_link_hash_table *) (p)->hash : NULL)
 
 #define ELF64 1
 #include "elf-s390-common.c"
@@ -706,7 +701,6 @@ link_hash_newfunc (struct bfd_hash_entry
       struct elf_s390_link_hash_entry *eh;
 
       eh = (struct elf_s390_link_hash_entry *) entry;
-      eh->dyn_relocs = NULL;
       eh->gotplt_refcount = 0;
       eh->tls_type = GOT_UNKNOWN;
       eh->ifunc_resolver_address = 0;
@@ -722,7 +716,7 @@ static struct bfd_link_hash_table *
 elf_s390_link_hash_table_create (bfd *abfd)
 {
   struct elf_s390_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_s390_link_hash_table);
+  size_t amt = sizeof (struct elf_s390_link_hash_table);
 
   ret = (struct elf_s390_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -751,37 +745,6 @@ elf_s390_copy_indirect_symbol (struct bf
   edir = (struct elf_s390_link_hash_entry *) dir;
   eind = (struct elf_s390_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect
       && dir->got.refcount <= 0)
     {
@@ -811,7 +774,7 @@ elf_s390_tls_transition (struct bfd_link
 			 int r_type,
 			 int is_local)
 {
-  if (bfd_link_pic (info))
+  if (bfd_link_dll (info))
     return r_type;
 
   switch (r_type)
@@ -836,7 +799,7 @@ elf_s390_tls_transition (struct bfd_link
    allocate space in the global offset table or procedure linkage
    table.  */
 
-static bfd_boolean
+static bool
 elf_s390_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
@@ -852,13 +815,13 @@ elf_s390_check_relocs (bfd *abfd,
   int tls_type, old_tls_type;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is_s390_elf (abfd));
 
   htab = elf_s390_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = &elf_symtab_hdr (abfd);
   sym_hashes = elf_sym_hashes (abfd);
@@ -881,16 +844,16 @@ elf_s390_check_relocs (bfd *abfd,
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: bad symbol index: %d"),
 			      abfd, r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* A local symbol.  */
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 					abfd, r_symndx);
 	  if (isym == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 	    {
@@ -900,12 +863,12 @@ elf_s390_check_relocs (bfd *abfd,
 		htab->elf.dynobj = abfd;
 
 	      if (!s390_elf_create_ifunc_sections (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 
 	      if (local_got_refcounts == NULL)
 		{
 		  if (!elf_s390_allocate_local_syminfo (abfd, symtab_hdr))
-		    return FALSE;
+		    return false;
 		  local_got_refcounts = elf_local_got_refcounts (abfd);
 		}
 	      plt = elf_s390_local_plt (abfd);
@@ -951,7 +914,7 @@ elf_s390_check_relocs (bfd *abfd,
 	      && local_got_refcounts == NULL)
 	    {
 	      if (!elf_s390_allocate_local_syminfo (abfd, symtab_hdr))
-		return FALSE;
+		return false;
 	      local_got_refcounts = elf_local_got_refcounts (abfd);
 	    }
 
@@ -966,7 +929,7 @@ elf_s390_check_relocs (bfd *abfd,
 	      if (htab->elf.dynobj == NULL)
 		htab->elf.dynobj = abfd;
 	      if (!_bfd_elf_create_got_section (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -975,7 +938,7 @@ elf_s390_check_relocs (bfd *abfd,
 	  if (htab->elf.dynobj == NULL)
 	    htab->elf.dynobj = abfd;
 	  if (!s390_elf_create_ifunc_sections (htab->elf.dynobj, info))
-	    return FALSE;
+	    return false;
 
 	  /* Make sure an IFUNC symbol defined in a non-shared object
 	     always gets a PLT slot.  */
@@ -1063,7 +1026,7 @@ elf_s390_check_relocs (bfd *abfd,
 	case R_390_TLS_GOTIE20:
 	case R_390_TLS_GOTIE64:
 	case R_390_TLS_IEENT:
-	  if (bfd_link_pic (info))
+	  if (bfd_link_dll (info))
 	    info->flags |= DF_STATIC_TLS;
 	  /* Fall through */
 
@@ -1119,7 +1082,7 @@ elf_s390_check_relocs (bfd *abfd,
 		    /* xgettext:c-format */
 		    (_("%pB: `%s' accessed both as normal and thread local symbol"),
 		     abfd, h->root.root.string);
-		  return FALSE;
+		  return false;
 		}
 	      if (old_tls_type > tls_type)
 		tls_type = old_tls_type;
@@ -1144,7 +1107,7 @@ elf_s390_check_relocs (bfd *abfd,
 	  if (r_type == R_390_TLS_LE64 && bfd_link_pie (info))
 	    break;
 
-	  if (!bfd_link_pic (info))
+	  if (!bfd_link_dll (info))
 	    break;
 	  info->flags |= DF_STATIC_TLS;
 	  /* Fall through */
@@ -1231,17 +1194,17 @@ elf_s390_check_relocs (bfd *abfd,
 		    htab->elf.dynobj = abfd;
 
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
+		    (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
 		{
-		  head = &((struct elf_s390_link_hash_entry *) h)->dyn_relocs;
+		  head = &h->dyn_relocs;
 		}
 	      else
 		{
@@ -1251,10 +1214,10 @@ elf_s390_check_relocs (bfd *abfd,
 		  asection *s;
 		  void *vpp;
 
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
@@ -1267,11 +1230,11 @@ elf_s390_check_relocs (bfd *abfd,
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->elf.dynobj, amt));
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -1295,14 +1258,14 @@ elf_s390_check_relocs (bfd *abfd,
 	     Reconstruct it for later use during GC.  */
 	case R_390_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_390_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -1310,7 +1273,7 @@ elf_s390_check_relocs (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -1356,30 +1319,13 @@ elf_s390_adjust_gotplt (struct elf_s390_
   h->gotplt_refcount = -1;
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = elf_s390_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 elf_s390_adjust_dynamic_symbol (struct bfd_link_info *info,
 				struct elf_link_hash_entry *h)
 {
@@ -1395,11 +1341,9 @@ elf_s390_adjust_dynamic_symbol (struct b
 	{
 	  bfd_size_type pc_count = 0, count = 0;
 	  struct elf_dyn_relocs **pp;
-	  struct elf_s390_link_hash_entry *eh;
 	  struct elf_dyn_relocs *p;
 
-	  eh = (struct elf_s390_link_hash_entry *) h;
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      pc_count += p->pc_count;
 	      p->count -= p->pc_count;
@@ -1427,7 +1371,7 @@ elf_s390_adjust_dynamic_symbol (struct b
 	  h->plt.offset = (bfd_vma) -1;
 	  h->needs_plt = 0;
 	}
-      return TRUE;
+      return true;
     }
 
   /* If this is a function, put it in the procedure linkage table.  We
@@ -1450,7 +1394,7 @@ elf_s390_adjust_dynamic_symbol (struct b
 	  elf_s390_adjust_gotplt((struct elf_s390_link_hash_entry *) h);
 	}
 
-      return TRUE;
+      return true;
     }
   else
     /* It's possible that we incorrectly decided a .plt reloc was
@@ -1471,7 +1415,7 @@ elf_s390_adjust_dynamic_symbol (struct b
       h->root.u.def.value = def->root.u.def.value;
       if (ELIMINATE_COPY_RELOCS || info->nocopyreloc)
 	h->non_got_ref = def->non_got_ref;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -1482,26 +1426,26 @@ elf_s390_adjust_dynamic_symbol (struct b
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h))
+  if (ELIMINATE_COPY_RELOCS && !_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -1516,7 +1460,7 @@ elf_s390_adjust_dynamic_symbol (struct b
 
   htab = elf_s390_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* We must generate a R_390_COPY reloc to tell the dynamic linker to
      copy the initial value out of the dynamic object and into the
@@ -1543,22 +1487,21 @@ elf_s390_adjust_dynamic_symbol (struct b
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h,
 		    void * inf)
 {
   struct bfd_link_info *info;
   struct elf_s390_link_hash_table *htab;
-  struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry *)h;
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = elf_s390_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
      here if it is defined and referenced in a non-shared object.  */
@@ -1573,7 +1516,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (bfd_link_pic (info)
@@ -1628,7 +1571,7 @@ allocate_dynrelocs (struct elf_link_hash
      to R_390_TLS_LE64 requiring no TLS entry. For GOTIE12 and IEENT
      we can save the dynamic TLS relocation.  */
   if (h->got.refcount > 0
-      && !bfd_link_pic (info)
+      && !bfd_link_dll (info)
       && h->dynindx == -1
       && elf_s390_hash_entry(h)->tls_type >= GOT_TLS_IE)
     {
@@ -1646,7 +1589,7 @@ allocate_dynrelocs (struct elf_link_hash
   else if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = elf_s390_hash_entry(h)->tls_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -1655,7 +1598,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->elf.sgot;
@@ -1680,8 +1623,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -1695,7 +1638,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -1708,12 +1651,12 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -1721,7 +1664,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -1744,7 +1687,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -1753,63 +1696,36 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * sizeof (Elf64_External_Rela);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info)
 {
   struct elf_s390_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
   htab = elf_s390_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->elf.dynobj;
   if (dynobj == NULL)
@@ -1939,7 +1855,7 @@ elf_s390_size_dynamic_sections (bfd *out
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LINKER_CREATED) == 0)
@@ -1957,10 +1873,23 @@ elf_s390_size_dynamic_sections (bfd *out
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0 && s != htab->elf.srelplt)
-	    relocs = TRUE;
+	    {
+	      relocs = true;
+	      if (s == htab->elf.irelplt)
+		{
+		  /* In static-pie case, there are IRELATIVE-relocs in
+		     .rela.iplt (htab->irelplt), which will later be grouped
+		     to .rela.plt.  On s390, the IRELATIVE relocations are
+		     always located in .rela.iplt - even for non-static case.
+		     Ensure that DT_JMPREL, DT_PLTRELA, DT_PLTRELASZ is added
+		     to the dynamic section even if htab->srelplt->size == 0.
+		     See _bfd_elf_add_dynamic_tags in bfd/elflink.c.  */
+		  htab->elf.dt_jmprel_required = true;
+		}
+	    }
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -1998,56 +1927,10 @@ elf_s390_size_dynamic_sections (bfd *out
 	 of garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
-    }
-
-  if (htab->elf.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf_s390_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->elf.splt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
+	return false;
     }
-#undef add_dynamic_entry
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Return the base VMA address which should be subtracted from real addresses
@@ -2100,7 +1983,7 @@ invalid_tls_insn (bfd *input_bfd,
 
 /* Relocate a 390 ELF section.  */
 
-static bfd_boolean
+static int
 elf_s390_relocate_section (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   bfd *input_bfd,
@@ -2120,12 +2003,12 @@ elf_s390_relocate_section (bfd *output_b
   if (!is_s390_elf (input_bfd))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   htab = elf_s390_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = &elf_symtab_hdr (input_bfd);
   sym_hashes = elf_sym_hashes (input_bfd);
@@ -2143,10 +2026,10 @@ elf_s390_relocate_section (bfd *output_b
       asection *sec;
       bfd_vma off;
       bfd_vma relocation;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_reloc_status_type r;
       int tls_type;
-      bfd_boolean resolved_to_zero;
+      bool resolved_to_zero;
 
       r_type = ELF64_R_TYPE (rel->r_info);
       if (r_type == (int) R_390_GNU_VTINHERIT
@@ -2155,7 +2038,7 @@ elf_s390_relocate_section (bfd *output_b
       if (r_type >= (int) R_390_max)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       howto = elf_howto_table + r_type;
@@ -2164,7 +2047,7 @@ elf_s390_relocate_section (bfd *output_b
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  sym = local_syms + r_symndx;
@@ -2174,7 +2057,7 @@ elf_s390_relocate_section (bfd *output_b
 	    {
 	      struct plt_entry *local_plt = elf_s390_local_plt (input_bfd);
 	      if (local_plt == NULL)
-		return FALSE;
+		return false;
 
 	      /* Address of the PLT slot.  */
 	      relocation = (htab->elf.iplt->output_section->vma
@@ -2226,8 +2109,8 @@ elf_s390_relocate_section (bfd *output_b
 	}
       else
 	{
-	  bfd_boolean warned ATTRIBUTE_UNUSED;
-	  bfd_boolean ignored ATTRIBUTE_UNUSED;
+	  bool warned ATTRIBUTE_UNUSED;
+	  bool ignored ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -2285,7 +2168,7 @@ elf_s390_relocate_section (bfd *output_b
 		}
 	      if (r_type == R_390_GOTPLTENT)
 		relocation += s390_got_pointer (info);
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	      break;
 	    }
 	  /* Fall through.  */
@@ -2303,7 +2186,7 @@ elf_s390_relocate_section (bfd *output_b
 
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      dyn = htab->elf.dynamic_sections_created;
@@ -2386,7 +2269,7 @@ elf_s390_relocate_section (bfd *output_b
 				  & 0xff00f000) == 0xe300c000
 			      && bfd_get_8 (input_bfd,
 					    contents + rel->r_offset + 3) == 0x04))
-		      && (isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		      && (isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 							input_bfd, r_symndx))
 		      && isym->st_shndx != SHN_ABS
 		      && h != htab->elf.hdynamic
@@ -2412,7 +2295,7 @@ elf_s390_relocate_section (bfd *output_b
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -2495,7 +2378,7 @@ elf_s390_relocate_section (bfd *output_b
 	case R_390_GOTPCDBL:
 	  /* Use global offset table as symbol value.  */
 	  relocation = s390_got_pointer (info);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_PLT12DBL:
@@ -2528,7 +2411,7 @@ elf_s390_relocate_section (bfd *output_b
 	    relocation = (htab->elf.splt->output_section->vma
 			  + htab->elf.splt->output_offset
 			  + h->plt.offset);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_PLTOFF16:
@@ -2557,7 +2440,7 @@ elf_s390_relocate_section (bfd *output_b
 			  + htab->elf.splt->output_offset
 			  + h->plt.offset
 			  - s390_got_pointer (info));
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_PC16:
@@ -2577,7 +2460,7 @@ elf_s390_relocate_section (bfd *output_b
 				    "(rebuild file with -fPIC ?)"),
 				  input_bfd, h->root.root.string);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  /* The target of these relocs are instruction operands
 	     residing in read-only sections.  We cannot emit a runtime
@@ -2688,23 +2571,23 @@ elf_s390_relocate_section (bfd *output_b
 		      || h->root.type == bfd_link_hash_undefined)))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
 	      asection *sreloc;
 	      bfd_byte *loc;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
 		 time.  */
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
@@ -2733,7 +2616,7 @@ elf_s390_relocate_section (bfd *output_b
 		  outrel.r_addend = relocation + rel->r_addend;
 		  if (r_type == R_390_64)
 		    {
-		      relocate = TRUE;
+		      relocate = true;
 		      outrel.r_info = ELF64_R_INFO (0, R_390_RELATIVE);
 		    }
 		  else
@@ -2745,7 +2628,7 @@ elf_s390_relocate_section (bfd *output_b
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error(bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -2792,7 +2675,7 @@ elf_s390_relocate_section (bfd *output_b
 
 	  /* Relocations for tls literal pool entries.  */
 	case R_390_TLS_IE64:
-	  if (bfd_link_pic (info))
+	  if (bfd_link_dll (info))
 	    {
 	      Elf_Internal_Rela outrel;
 	      asection *sreloc;
@@ -2820,7 +2703,7 @@ elf_s390_relocate_section (bfd *output_b
 	  else if (h != NULL)
 	    {
 	      tls_type = elf_s390_hash_entry(h)->tls_type;
-	      if (!bfd_link_pic (info) && h->dynindx == -1 && tls_type >= GOT_TLS_IE)
+	      if (!bfd_link_dll (info) && h->dynindx == -1 && tls_type >= GOT_TLS_IE)
 		r_type = R_390_TLS_LE64;
 	    }
 	  if (r_type == R_390_TLS_GD64 && tls_type >= GOT_TLS_IE)
@@ -2831,7 +2714,7 @@ elf_s390_relocate_section (bfd *output_b
 	      /* This relocation gets optimized away by the local exec
 		 access optimization.  */
 	      BFD_ASSERT (! unresolved_reloc);
-	      bfd_put_64 (output_bfd, -tpoff (info, relocation),
+	      bfd_put_64 (output_bfd, -tpoff (info, relocation) + rel->r_addend,
 			  contents + rel->r_offset);
 	      continue;
 	    }
@@ -2913,7 +2796,7 @@ elf_s390_relocate_section (bfd *output_b
 	      relocation = htab->elf.sgot->output_offset + off;
 	      if (r_type == R_390_TLS_IE64 || r_type == R_390_TLS_IEENT)
 		relocation += htab->elf.sgot->output_section->vma;
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -2931,14 +2814,14 @@ elf_s390_relocate_section (bfd *output_b
 	      if (local_got_offsets == NULL)
 		abort();
 	      off = local_got_offsets[r_symndx];
-	      if (bfd_link_pic (info))
+	      if (bfd_link_dll (info))
 		goto emit_tls_relocs;
 	    }
 	  else
 	    {
 	      off = h->got.offset;
 	      tls_type = elf_s390_hash_entry(h)->tls_type;
-	      if (bfd_link_pic (info) || h->dynindx != -1 || tls_type < GOT_TLS_IE)
+	      if (bfd_link_dll (info) || h->dynindx != -1 || tls_type < GOT_TLS_IE)
 		goto emit_tls_relocs;
 	    }
 
@@ -2951,11 +2834,11 @@ elf_s390_relocate_section (bfd *output_b
 	  relocation = htab->elf.sgot->output_offset + off;
 	  if (r_type == R_390_TLS_IEENT)
 	    relocation += htab->elf.sgot->output_section->vma;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_TLS_LDM64:
-	  if (! bfd_link_pic (info))
+	  if (! bfd_link_dll (info))
 	    /* The literal pool entry this relocation refers to gets ignored
 	       by the optimized code of the local exec model. Do nothing
 	       and the value will turn out zero.  */
@@ -2989,7 +2872,7 @@ elf_s390_relocate_section (bfd *output_b
 	      htab->tls_ldm_got.offset |= 1;
 	    }
 	  relocation = htab->elf.sgot->output_offset + off;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_390_TLS_LE64:
@@ -3024,13 +2907,13 @@ elf_s390_relocate_section (bfd *output_b
 	  else
 	    {
 	      BFD_ASSERT (! unresolved_reloc);
-	      bfd_put_64 (output_bfd, -tpoff (info, relocation),
+	      bfd_put_64 (output_bfd, -tpoff (info, relocation) + rel->r_addend,
 			  contents + rel->r_offset);
 	    }
 	  continue;
 
 	case R_390_TLS_LDO64:
-	  if (bfd_link_pic (info) || (input_section->flags & SEC_DEBUGGING))
+	  if (bfd_link_dll (info) || (input_section->flags & SEC_DEBUGGING))
 	    relocation -= dtpoff_base (info);
 	  else
 	    /* When converting LDO to LE, we must negate.  */
@@ -3052,7 +2935,7 @@ elf_s390_relocate_section (bfd *output_b
 
 	  if (r_type == R_390_TLS_LOAD)
 	    {
-	      if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1))
+	      if (!bfd_link_dll (info) && (h == NULL || h->dynindx == -1))
 		{
 		  /* IE->LE transition. Four valid cases:
 		     lg %rx,(0,%ry)    -> sllg %rx,%ry,0
@@ -3066,7 +2949,7 @@ elf_s390_relocate_section (bfd *output_b
 		  if (insn1 != 0x0004)
 		    {
 		      invalid_tls_insn (input_bfd, input_section, rel);
-		      return FALSE;
+		      return false;
 		    }
 		  if ((insn0 & 0xff00f000) == 0xe3000000)
 		    /* lg %rx,0(%ry,0) -> sllg %rx,%ry,0  */
@@ -3083,7 +2966,7 @@ elf_s390_relocate_section (bfd *output_b
 		  else
 		    {
 		      invalid_tls_insn (input_bfd, input_section, rel);
-		      return FALSE;
+		      return false;
 		    }
 		  insn0 = 0xeb000000 | (insn0 & 0x00f00000) | ry;
 		  insn1 = 0x000d;
@@ -3100,9 +2983,9 @@ elf_s390_relocate_section (bfd *output_b
 	      if ((insn0 & 0xffff0000) != 0xc0e50000)
 		{
 		  invalid_tls_insn (input_bfd, input_section, rel);
-		  return FALSE;
+		  return false;
 		}
-	      if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1))
+	      if (!bfd_link_dll (info) && (h == NULL || h->dynindx == -1))
 		{
 		  /* GD->LE transition.
 		     brasl %r14,__tls_get_addr@plt -> brcl 0,. */
@@ -3121,7 +3004,7 @@ elf_s390_relocate_section (bfd *output_b
 	    }
 	  else if (r_type == R_390_TLS_LDCALL)
 	    {
-	      if (!bfd_link_pic (info))
+	      if (!bfd_link_dll (info))
 		{
 		  unsigned int insn0, insn1;
 
@@ -3130,7 +3013,7 @@ elf_s390_relocate_section (bfd *output_b
 		  if ((insn0 & 0xffff0000) != 0xc0e50000)
 		    {
 		      invalid_tls_insn (input_bfd, input_section, rel);
-		      return FALSE;
+		      return false;
 		    }
 		  /* LD->LE transition.
 		     brasl %r14,__tls_get_addr@plt -> brcl 0,. */
@@ -3173,6 +3056,24 @@ elf_s390_relocate_section (bfd *output_b
 	  || r_type == R_390_PLT24DBL)
 	rel->r_offset--;
 
+      /* Issue an error if the right shift implied by the relocation
+	 would drop bits from the symbol value.  */
+      if (howto->rightshift
+	  && (relocation & (((bfd_vma)1 << howto->rightshift) - 1)))
+	{
+	  _bfd_error_handler
+	    /* xgettext:c-format */
+	    (_("%pB(%pA+%#" PRIx64 "): "
+	       "misaligned symbol `%s' (%#" PRIx64 ") for relocation %s"),
+	     input_bfd,
+	     input_section,
+	     (uint64_t) rel->r_offset,
+	     h->root.root.string,
+	     (uint64_t)relocation,
+	     howto->name);
+	  return false;
+	}
+
       if (r_type == R_390_20
 	  || r_type == R_390_GOT20
 	  || r_type == R_390_GOTPLT20
@@ -3201,7 +3102,7 @@ elf_s390_relocate_section (bfd *output_b
 						      symtab_hdr->sh_link,
 						      sym->st_name);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      if (*name == '\0')
 		name = bfd_section_name (sec);
 	    }
@@ -3217,12 +3118,12 @@ elf_s390_relocate_section (bfd *output_b
 		(_("%pB(%pA+%#" PRIx64 "): reloc against `%s': error %d"),
 		 input_bfd, input_section,
 		 (uint64_t) rel->r_offset, name, (int) r);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Generate the PLT slots together with the dynamic relocations needed
@@ -3314,7 +3215,7 @@ elf_s390_finish_ifunc_symbol (bfd *outpu
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf_s390_finish_dynamic_symbol (bfd *output_bfd,
 				struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
@@ -3325,7 +3226,7 @@ elf_s390_finish_dynamic_symbol (bfd *out
 
   htab = elf_s390_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (h->plt.offset != (bfd_vma) -1)
     {
@@ -3457,14 +3358,14 @@ elf_s390_finish_dynamic_symbol (bfd *out
 				       + htab->elf.iplt->output_offset
 				       + h->plt.offset),
 			  htab->elf.sgot->contents + h->got.offset);
-	      return TRUE;
+	      return true;
 	    }
 	}
       else if (bfd_link_pic (info)
 	       && SYMBOL_REFERENCES_LOCAL (info, h))
 	{
 	  if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    return TRUE;
+	    return true;
 
 	  /* If this is a static link, or it is a -Bsymbolic link and
 	     the symbol is defined locally or was forced to be local
@@ -3473,7 +3374,7 @@ elf_s390_finish_dynamic_symbol (bfd *out
 	     will already have been initialized in the
 	     relocate_section function.  */
 	  if (!(h->def_regular || ELF_COMMON_DEF_P (h)))
-	    return FALSE;
+	    return false;
 	  BFD_ASSERT((h->got.offset & 1) != 0);
 	  rela.r_info = ELF64_R_INFO (0, R_390_RELATIVE);
 	  rela.r_addend = (h->root.u.def.value
@@ -3527,7 +3428,7 @@ elf_s390_finish_dynamic_symbol (bfd *out
       || h == htab->elf.hplt)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Used to decide how to sort relocs in an optimal manner for the
@@ -3570,7 +3471,7 @@ elf_s390_reloc_type_class (const struct
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_s390_finish_dynamic_sections (bfd *output_bfd,
 				  struct bfd_link_info *info)
 {
@@ -3582,7 +3483,7 @@ elf_s390_finish_dynamic_sections (bfd *o
 
   htab = elf_s390_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->elf.dynobj;
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
@@ -3677,8 +3578,9 @@ elf_s390_finish_dynamic_sections (bfd *o
 	  bfd_put_64 (output_bfd, (bfd_vma) 0,
 		      htab->elf.hgot->root.u.def.section->contents + 16);
 	}
-      elf_section_data (htab->elf.sgot->output_section)
-	->this_hdr.sh_entsize = 8;
+      if (htab->elf.sgot != NULL && htab->elf.sgot->size > 0)
+	elf_section_data (htab->elf.sgot->output_section)
+	  ->this_hdr.sh_entsize = 8;
     }
 
   /* Finish dynamic symbol for local IFUNC symbols.  */
@@ -3700,9 +3602,9 @@ elf_s390_finish_dynamic_sections (bfd *o
 	    if (local_plt[i].plt.offset != (bfd_vma) -1)
 	      {
 		asection *sec = local_plt[i].sec;
-		isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, i);
+		isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd, i);
 		if (isym == NULL)
-		  return FALSE;
+		  return false;
 
 		if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 		  elf_s390_finish_ifunc_symbol (output_bfd, info, NULL, htab,
@@ -3715,12 +3617,12 @@ elf_s390_finish_dynamic_sections (bfd *o
 	  }
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 elf_s390_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -3729,7 +3631,7 @@ elf_s390_grok_prstatus (bfd *abfd, Elf_I
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 336:			/* sizeof(struct elf_prstatus) on s390x */
       /* pr_cursig */
@@ -3749,13 +3651,13 @@ elf_s390_grok_prstatus (bfd *abfd, Elf_I
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf_s390_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 136:			/* sizeof(struct elf_prpsinfo) on s390x */
       elf_tdata (abfd)->core->pid
@@ -3778,7 +3680,7 @@ elf_s390_grok_psinfo (bfd *abfd, Elf_Int
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 static char *
@@ -3855,11 +3757,11 @@ elf_s390_plt_sym_val (bfd_vma i, const a
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf64_s390_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   if (!is_s390_elf (ibfd) || !is_s390_elf (info->output_bfd))
-    return TRUE;
+    return true;
 
   return elf_s390_merge_obj_attributes (ibfd, info);
 }
@@ -3884,18 +3786,18 @@ elf_s390_additional_program_headers (bfd
 
 /* Add the PT_S390_PGSTE program header.  */
 
-static bfd_boolean
+static bool
 elf_s390_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_s390_link_hash_table *htab;
   struct elf_segment_map *m, *pm = NULL;
 
   if (!abfd || !info)
-    return TRUE;
+    return true;
 
   htab = elf_s390_hash_table (info);
   if (!htab || !htab->params->pgste)
-    return TRUE;
+    return true;
 
   /* If there is already a PT_S390_PGSTE header, avoid adding
      another.  */
@@ -3907,22 +3809,22 @@ elf_s390_modify_segment_map (bfd *abfd,
     }
 
   if (m)
-    return TRUE;
+    return true;
 
   m = (struct elf_segment_map *)
     bfd_zalloc (abfd, sizeof (struct elf_segment_map));
   if (m == NULL)
-    return FALSE;
+    return false;
   m->p_type = PT_S390_PGSTE;
   m->count = 0;
   m->next = NULL;
   if (pm)
     pm->next = m;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 bfd_elf_s390_set_options (struct bfd_link_info *info,
 			  struct s390_elf_params *params)
 {
@@ -3935,7 +3837,7 @@ bfd_elf_s390_set_options (struct bfd_lin
 	htab->params = params;
     }
 
-  return TRUE;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-sparc.c ./bfd/elf64-sparc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-sparc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-sparc.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* SPARC-specific support for 64-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -37,14 +37,25 @@
 static long
 elf64_sparc_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
 {
-#if SIZEOF_LONG == SIZEOF_INT
-  if (sec->reloc_count >= LONG_MAX / 2 / sizeof (arelent *))
+  size_t count, raw;
+
+  count = sec->reloc_count;
+  if (count >= LONG_MAX / 2 / sizeof (arelent *)
+      || _bfd_mul_overflow (count, sizeof (Elf64_External_Rela), &raw))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
-#endif
-  return (sec->reloc_count * 2 + 1) * sizeof (arelent *);
+  if (!bfd_write_p (abfd))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && raw > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
+    }
+  return (count * 2 + 1) * sizeof (arelent *);
 }
 
 static long
@@ -66,10 +77,10 @@ elf64_sparc_get_dynamic_reloc_upper_boun
    has secondary addend in ELF64_R_TYPE_DATA.  We handle it as two relocations
    for the same location,  R_SPARC_LO10 and R_SPARC_13.  */
 
-static bfd_boolean
+static bool
 elf64_sparc_slurp_one_reloc_table (bfd *abfd, asection *asect,
 				   Elf_Internal_Shdr *rel_hdr,
-				   asymbol **symbols, bfd_boolean dynamic)
+				   asymbol **symbols, bool dynamic)
 {
   void * allocated = NULL;
   bfd_byte *native_relocs;
@@ -79,13 +90,11 @@ elf64_sparc_slurp_one_reloc_table (bfd *
   bfd_size_type count;
   arelent *relents;
 
-  allocated = bfd_malloc (rel_hdr->sh_size);
+  if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
+    return false;
+  allocated = _bfd_malloc_and_read (abfd, rel_hdr->sh_size, rel_hdr->sh_size);
   if (allocated == NULL)
-    goto error_return;
-
-  if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0
-      || bfd_bread (allocated, rel_hdr->sh_size, abfd) != rel_hdr->sh_size)
-    goto error_return;
+    return false;
 
   native_relocs = (bfd_byte *) allocated;
 
@@ -163,22 +172,19 @@ elf64_sparc_slurp_one_reloc_table (bfd *
 
   canon_reloc_count (asect) += relent - relents;
 
-  if (allocated != NULL)
-    free (allocated);
-
-  return TRUE;
+  free (allocated);
+  return true;
 
  error_return:
-  if (allocated != NULL)
-    free (allocated);
-  return FALSE;
+  free (allocated);
+  return false;
 }
 
 /* Read in and swap the external relocs.  */
 
-static bfd_boolean
+static bool
 elf64_sparc_slurp_reloc_table (bfd *abfd, asection *asect,
-			       asymbol **symbols, bfd_boolean dynamic)
+			       asymbol **symbols, bool dynamic)
 {
   struct bfd_elf_section_data * const d = elf_section_data (asect);
   Elf_Internal_Shdr *rel_hdr;
@@ -186,13 +192,13 @@ elf64_sparc_slurp_reloc_table (bfd *abfd
   bfd_size_type amt;
 
   if (asect->relocation != NULL)
-    return TRUE;
+    return true;
 
   if (! dynamic)
     {
       if ((asect->flags & SEC_RELOC) == 0
 	  || asect->reloc_count == 0)
-	return TRUE;
+	return true;
 
       rel_hdr = d->rel.hdr;
       rel_hdr2 = d->rela.hdr;
@@ -207,7 +213,7 @@ elf64_sparc_slurp_reloc_table (bfd *abfd
 	 dynamic symbol table, and in that case bfd_section_from_shdr
 	 in elf.c does not update the RELOC_COUNT.  */
       if (asect->size == 0)
-	return TRUE;
+	return true;
 
       rel_hdr = &d->this_hdr;
       asect->reloc_count = NUM_SHDR_ENTRIES (rel_hdr);
@@ -218,7 +224,7 @@ elf64_sparc_slurp_reloc_table (bfd *abfd
   amt *= 2 * sizeof (arelent);
   asect->relocation = (arelent *) bfd_alloc (abfd, amt);
   if (asect->relocation == NULL)
-    return FALSE;
+    return false;
 
   /* The elf64_sparc_slurp_one_reloc_table routine increments
      canon_reloc_count.  */
@@ -227,14 +233,14 @@ elf64_sparc_slurp_reloc_table (bfd *abfd
   if (rel_hdr
       && !elf64_sparc_slurp_one_reloc_table (abfd, asect, rel_hdr, symbols,
 					     dynamic))
-    return FALSE;
+    return false;
 
   if (rel_hdr2
       && !elf64_sparc_slurp_one_reloc_table (abfd, asect, rel_hdr2, symbols,
 					     dynamic))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Canonicalize the relocs.  */
@@ -247,7 +253,7 @@ elf64_sparc_canonicalize_reloc (bfd *abf
   unsigned int i;
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
 
-  if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
+  if (! bed->s->slurp_reloc_table (abfd, section, symbols, false))
     return -1;
 
   tblptr = section->relocation;
@@ -291,7 +297,7 @@ elf64_sparc_canonicalize_dynamic_reloc (
 	  arelent *p;
 	  long count, i;
 
-	  if (! elf64_sparc_slurp_reloc_table (abfd, s, syms, TRUE))
+	  if (! elf64_sparc_slurp_reloc_table (abfd, s, syms, true))
 	    return -1;
 	  count = canon_reloc_count (s);
 	  p = s->relocation;
@@ -316,6 +322,10 @@ elf64_sparc_set_reloc (bfd *abfd ATTRIBU
 {
   asect->orelocation = location;
   canon_reloc_count (asect) = count;
+  if (count != 0)
+    asect->flags |= SEC_RELOC;
+  else
+    asect->flags &= ~SEC_RELOC;
 }
 
 /* Write out the relocs.  */
@@ -323,7 +333,7 @@ elf64_sparc_set_reloc (bfd *abfd ATTRIBU
 static void
 elf64_sparc_write_relocs (bfd *abfd, asection *sec, void * data)
 {
-  bfd_boolean *failedp = (bfd_boolean *) data;
+  bool *failedp = (bool *) data;
   Elf_Internal_Shdr *rela_hdr;
   bfd_vma addr_offset;
   Elf64_External_Rela *outbound_relocas, *src_rela;
@@ -375,7 +385,7 @@ elf64_sparc_write_relocs (bfd *abfd, ase
   rela_hdr->contents = bfd_alloc (abfd, rela_hdr->sh_size);
   if (rela_hdr->contents == NULL)
     {
-      *failedp = TRUE;
+      *failedp = true;
       return;
     }
 
@@ -413,7 +423,7 @@ elf64_sparc_write_relocs (bfd *abfd, ase
 	  n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
 	  if (n < 0)
 	    {
-	      *failedp = TRUE;
+	      *failedp = true;
 	      return;
 	    }
 	  last_sym_idx = n;
@@ -423,7 +433,7 @@ elf64_sparc_write_relocs (bfd *abfd, ase
 	  && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
 	  && ! _bfd_elf_validate_reloc (abfd, ptr))
 	{
-	  *failedp = TRUE;
+	  *failedp = true;
 	  return;
 	}
 
@@ -459,7 +469,7 @@ elf64_sparc_write_relocs (bfd *abfd, ase
 /* Hook called by the linker routine which adds symbols from an object
    file.  We use it for STT_REGISTER symbols.  */
 
-static bfd_boolean
+static bool
 elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
 			     Elf_Internal_Sym *sym, const char **namep,
 			     flagword *flagsp ATTRIBUTE_UNUSED,
@@ -482,7 +492,7 @@ elf64_sparc_add_symbol_hook (bfd *abfd,
 	  _bfd_error_handler
 	    (_("%pB: only registers %%g[2367] can be declared using STT_REGISTER"),
 	     abfd);
-	  return FALSE;
+	  return false;
 	}
 
       if (info->output_bfd->xvec != abfd->xvec
@@ -492,7 +502,7 @@ elf64_sparc_add_symbol_hook (bfd *abfd,
 	     If STT_REGISTER comes from a dynamic object, don't put it into
 	     the output bfd.  The dynamic linker will recheck it.  */
 	  *namep = NULL;
-	  return TRUE;
+	  return true;
 	}
 
       p = _bfd_sparc_elf_hash_table(info)->app_regs + reg;
@@ -505,7 +515,7 @@ elf64_sparc_add_symbol_hook (bfd *abfd,
 	       " previously %s in %pB"),
 	     (int) sym->st_value, **namep ? *namep : "#scratch", abfd,
 	     *p->name ? p->name : "#scratch", p->abfd);
-	  return FALSE;
+	  return false;
 	}
 
       if (p->name == NULL)
@@ -515,7 +525,7 @@ elf64_sparc_add_symbol_hook (bfd *abfd,
 	      struct elf_link_hash_entry *h;
 
 	      h = (struct elf_link_hash_entry *)
-		bfd_link_hash_lookup (info->hash, *namep, FALSE, FALSE, FALSE);
+		bfd_link_hash_lookup (info->hash, *namep, false, false, false);
 
 	      if (h != NULL)
 		{
@@ -528,13 +538,13 @@ elf64_sparc_add_symbol_hook (bfd *abfd,
 		    (_("symbol `%s' has differing types: REGISTER in %pB,"
 		       " previously %s in %pB"),
 		     *namep, abfd, stt_types[type], p->abfd);
-		  return FALSE;
+		  return false;
 		}
 
 	      p->name = bfd_hash_allocate (&info->hash->table,
 					   strlen (*namep) + 1);
 	      if (!p->name)
-		return FALSE;
+		return false;
 
 	      strcpy (p->name, *namep);
 	    }
@@ -554,7 +564,7 @@ elf64_sparc_add_symbol_hook (bfd *abfd,
 	    }
 	}
       *namep = NULL;
-      return TRUE;
+      return true;
     }
   else if (*namep && **namep
 	   && info->output_bfd->xvec == abfd->xvec)
@@ -575,16 +585,16 @@ elf64_sparc_add_symbol_hook (bfd *abfd,
 	      (_("Symbol `%s' has differing types: %s in %pB,"
 		 " previously REGISTER in %pB"),
 	       *namep, stt_types[type], abfd, p->abfd);
-	    return FALSE;
+	    return false;
 	  }
     }
-  return TRUE;
+  return true;
 }
 
 /* This function takes care of emitting STT_REGISTER symbols
    which we cannot easily keep in the symbol hash table.  */
 
-static bfd_boolean
+static bool
 elf64_sparc_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED,
 			      struct bfd_link_info *info,
 			      void * flaginfo,
@@ -604,7 +614,7 @@ elf64_sparc_output_arch_syms (bfd *outpu
 	if (info->strip == strip_some
 	    && bfd_hash_lookup (info->keep_hash,
 				app_regs [reg].name,
-				FALSE, FALSE) == NULL)
+				false, false) == NULL)
 	  continue;
 
 	sym.st_value = reg < 2 ? reg + 2 : reg + 4;
@@ -617,10 +627,10 @@ elf64_sparc_output_arch_syms (bfd *outpu
 		     sym.st_shndx == SHN_ABS
 		     ? bfd_abs_section_ptr : bfd_und_section_ptr,
 		     NULL) != 1)
-	  return FALSE;
+	  return false;
       }
 
-  return TRUE;
+  return true;
 }
 
 static int
@@ -654,24 +664,24 @@ elf64_sparc_symbol_processing (bfd *abfd
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elf64_sparc_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
-  bfd_boolean error;
+  bool error;
   flagword new_flags, old_flags;
   int new_mm, old_mm;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   old_flags = elf_elfheader (obfd)->e_flags;
 
   if (!elf_flags_init (obfd))   /* First call, no flags set */
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
 
@@ -680,7 +690,7 @@ elf64_sparc_merge_private_bfd_data (bfd
 
   else					/* Incompatible flags */
     {
-      error = FALSE;
+      error = false;
 
 #define EF_SPARC_ISA_EXTENSIONS \
   (EF_SPARC_SUN_US1 | EF_SPARC_SUN_US3 | EF_SPARC_HAL_R1)
@@ -702,7 +712,7 @@ elf64_sparc_merge_private_bfd_data (bfd
 	  if ((old_flags & (EF_SPARC_SUN_US1 | EF_SPARC_SUN_US3))
 	      && (old_flags & EF_SPARC_HAL_R1))
 	    {
-	      error = TRUE;
+	      error = true;
 	      _bfd_error_handler
 		(_("%pB: linking UltraSPARC specific with HAL specific code"),
 		 ibfd);
@@ -721,7 +731,7 @@ elf64_sparc_merge_private_bfd_data (bfd
       /* Warn about any other mismatches */
       if (new_flags != old_flags)
 	{
-	  error = TRUE;
+	  error = true;
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: uses different e_flags (%#x) fields than previous modules (%#x)"),
@@ -733,7 +743,7 @@ elf64_sparc_merge_private_bfd_data (bfd
       if (error)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
     }
   return _bfd_sparc_elf_merge_private_bfd_data (ibfd, info);
@@ -741,7 +751,7 @@ elf64_sparc_merge_private_bfd_data (bfd
 
 /* MARCO: Set the correct entry size for the .stab section.  */
 
-static bfd_boolean
+static bool
 elf64_sparc_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 			   Elf_Internal_Shdr *hdr ATTRIBUTE_UNUSED,
 			   asection *sec)
@@ -756,7 +766,7 @@ elf64_sparc_fake_sections (bfd *abfd ATT
       elf_section_data (sec)->this_hdr.sh_entsize = 12;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Print a STT_REGISTER symbol to file FILE.  */
@@ -1009,4 +1019,24 @@ const struct elf_size_info elf64_sparc_s
 #undef elf_backend_static_tls_alignment
 #define elf_backend_static_tls_alignment	16
 
+#undef  elf_backend_strtab_flags
+#define elf_backend_strtab_flags       SHF_STRINGS
+
+static bool
+elf64_sparc_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
+                                  bfd *obfd ATTRIBUTE_UNUSED,
+                                  const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED,
+                                  Elf_Internal_Shdr *osection ATTRIBUTE_UNUSED)
+{
+  /* PR 19938: FIXME: Need to add code for setting the sh_info
+     and sh_link fields of Solaris specific section types.  */
+  return false;
+}
+
+#undef  elf_backend_copy_special_section_fields
+#define elf_backend_copy_special_section_fields elf64_sparc_copy_solaris_special_section_fields
+
 #include "elf64-target.h"
+
+#undef  elf_backend_strtab_flags
+#undef  elf_backend_copy_special_section_fields
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-tilegx.c ./bfd/elf64-tilegx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-tilegx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-tilegx.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILE-Gx-specific support for 64-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,14 +28,14 @@
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 tilegx_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
   size_t size;
 
   if (note->descsz != TILEGX_PRSTATUS_SIZEOF)
-    return FALSE;
+    return false;
 
   /* pr_cursig */
   elf_tdata (abfd)->core->signal =
@@ -54,11 +54,11 @@ tilegx_elf_grok_prstatus (bfd *abfd, Elf
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 tilegx_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->descsz != TILEGX_PRPSINFO_SIZEOF)
-    return FALSE;
+    return false;
 
   elf_tdata (abfd)->core->program
     = _bfd_elfcore_strndup (abfd, note->descdata + TILEGX_PRPSINFO_OFFSET_PR_FNAME, 16);
@@ -77,7 +77,7 @@ tilegx_elf_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-tilegx.h ./bfd/elf64-tilegx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-tilegx.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-tilegx.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILE-Gx-specific support for 64-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-x86-64.c ./bfd/elf64-x86-64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf64-x86-64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf64-x86-64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* X86-64 specific support for ELF
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Contributed by Jan Hubicka <jh@suse.cz>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -20,12 +20,11 @@
    MA 02110-1301, USA.  */
 
 #include "elfxx-x86.h"
-#include "elf-nacl.h"
 #include "dwarf2.h"
 #include "libiberty.h"
+#include "sframe.h"
 
 #include "opcode/i386.h"
-#include "elf/x86-64.h"
 
 #ifdef CORE_HEADER
 #include <stdarg.h>
@@ -45,170 +44,164 @@
    special_function, name, partial_inplace, src_mask, dst_mask, pcrel_offset.  */
 static reloc_howto_type x86_64_elf_howto_table[] =
 {
-  HOWTO(R_X86_64_NONE, 0, 3, 0, FALSE, 0, complain_overflow_dont,
-	bfd_elf_generic_reloc, "R_X86_64_NONE",	FALSE, 0x00000000, 0x00000000,
-	FALSE),
-  HOWTO(R_X86_64_64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_64", FALSE, MINUS_ONE, MINUS_ONE,
-	FALSE),
-  HOWTO(R_X86_64_PC32, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_PC32", FALSE, 0xffffffff, 0xffffffff,
-	TRUE),
-  HOWTO(R_X86_64_GOT32, 0, 2, 32, FALSE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_GOT32", FALSE, 0xffffffff, 0xffffffff,
-	FALSE),
-  HOWTO(R_X86_64_PLT32, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_PLT32", FALSE, 0xffffffff, 0xffffffff,
-	TRUE),
-  HOWTO(R_X86_64_COPY, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_COPY", FALSE, 0xffffffff, 0xffffffff,
-	FALSE),
-  HOWTO(R_X86_64_GLOB_DAT, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_GLOB_DAT", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_JUMP_SLOT, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_JUMP_SLOT", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_RELATIVE, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_RELATIVE", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_GOTPCREL, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_GOTPCREL", FALSE, 0xffffffff,
-	0xffffffff, TRUE),
-  HOWTO(R_X86_64_32, 0, 2, 32, FALSE, 0, complain_overflow_unsigned,
-	bfd_elf_generic_reloc, "R_X86_64_32", FALSE, 0xffffffff, 0xffffffff,
-	FALSE),
-  HOWTO(R_X86_64_32S, 0, 2, 32, FALSE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_32S", FALSE, 0xffffffff, 0xffffffff,
-	FALSE),
-  HOWTO(R_X86_64_16, 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_16", FALSE, 0xffff, 0xffff, FALSE),
-  HOWTO(R_X86_64_PC16,0, 1, 16, TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_PC16", FALSE, 0xffff, 0xffff, TRUE),
-  HOWTO(R_X86_64_8, 0, 0, 8, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_8", FALSE, 0xff, 0xff, FALSE),
-  HOWTO(R_X86_64_PC8, 0, 0, 8, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_PC8", FALSE, 0xff, 0xff, TRUE),
-  HOWTO(R_X86_64_DTPMOD64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_DTPMOD64", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_DTPOFF64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_DTPOFF64", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_TPOFF64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_TPOFF64", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_TLSGD, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_TLSGD", FALSE, 0xffffffff,
-	0xffffffff, TRUE),
-  HOWTO(R_X86_64_TLSLD, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_TLSLD", FALSE, 0xffffffff,
-	0xffffffff, TRUE),
-  HOWTO(R_X86_64_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_DTPOFF32", FALSE, 0xffffffff,
-	0xffffffff, FALSE),
-  HOWTO(R_X86_64_GOTTPOFF, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_GOTTPOFF", FALSE, 0xffffffff,
-	0xffffffff, TRUE),
-  HOWTO(R_X86_64_TPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_TPOFF32", FALSE, 0xffffffff,
-	0xffffffff, FALSE),
-  HOWTO(R_X86_64_PC64, 0, 4, 64, TRUE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_PC64", FALSE, MINUS_ONE, MINUS_ONE,
-	TRUE),
-  HOWTO(R_X86_64_GOTOFF64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_GOTOFF64",
-	FALSE, MINUS_ONE, MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_GOTPC32, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_GOTPC32",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO(R_X86_64_GOT64, 0, 4, 64, FALSE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_GOT64", FALSE, MINUS_ONE, MINUS_ONE,
-	FALSE),
-  HOWTO(R_X86_64_GOTPCREL64, 0, 4, 64, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_GOTPCREL64", FALSE, MINUS_ONE,
-	MINUS_ONE, TRUE),
-  HOWTO(R_X86_64_GOTPC64, 0, 4, 64, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_GOTPC64",
-	FALSE, MINUS_ONE, MINUS_ONE, TRUE),
-  HOWTO(R_X86_64_GOTPLT64, 0, 4, 64, FALSE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_GOTPLT64", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_PLTOFF64, 0, 4, 64, FALSE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_PLTOFF64", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_SIZE32, 0, 2, 32, FALSE, 0, complain_overflow_unsigned,
-	bfd_elf_generic_reloc, "R_X86_64_SIZE32", FALSE, 0xffffffff, 0xffffffff,
-	FALSE),
-  HOWTO(R_X86_64_SIZE64, 0, 4, 64, FALSE, 0, complain_overflow_unsigned,
-	bfd_elf_generic_reloc, "R_X86_64_SIZE64", FALSE, MINUS_ONE, MINUS_ONE,
-	FALSE),
-  HOWTO(R_X86_64_GOTPC32_TLSDESC, 0, 2, 32, TRUE, 0,
+  HOWTO(R_X86_64_NONE, 0, 0, 0, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_NONE",	false, 0, 0x00000000,
+	false),
+  HOWTO(R_X86_64_64, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_PC32, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PC32", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_GOT32, 0, 4, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOT32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_PLT32, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PLT32", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_COPY, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_COPY", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_GLOB_DAT, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_GLOB_DAT", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_JUMP_SLOT, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_JUMP_SLOT", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_RELATIVE, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_RELATIVE", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_GOTPCREL, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTPCREL", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_32, 0, 4, 32, false, 0, complain_overflow_unsigned,
+	bfd_elf_generic_reloc, "R_X86_64_32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_32S, 0, 4, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_32S", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_16, 0, 2, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_16", false, 0, 0xffff, false),
+  HOWTO(R_X86_64_PC16, 0, 2, 16, true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_PC16", false, 0, 0xffff, true),
+  HOWTO(R_X86_64_8, 0, 1, 8, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_8", false, 0, 0xff, false),
+  HOWTO(R_X86_64_PC8, 0, 1, 8, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PC8", false, 0, 0xff, true),
+  HOWTO(R_X86_64_DTPMOD64, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_DTPMOD64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_DTPOFF64, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_DTPOFF64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_TPOFF64, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_TPOFF64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_TLSGD, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_TLSGD", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_TLSLD, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_TLSLD", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_DTPOFF32, 0, 4, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_DTPOFF32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_GOTTPOFF, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTTPOFF", false, 0, 	0xffffffff,
+	true),
+  HOWTO(R_X86_64_TPOFF32, 0, 4, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_TPOFF32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_PC64, 0, 8, 64, true, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_PC64", false, 0, MINUS_ONE,
+	true),
+  HOWTO(R_X86_64_GOTOFF64, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_GOTOFF64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_GOTPC32, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTPC32", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_GOT64, 0, 8, 64, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOT64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_GOTPCREL64, 0, 8, 64, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTPCREL64", false, 0, MINUS_ONE,
+	true),
+  HOWTO(R_X86_64_GOTPC64, 0, 8, 64, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTPC64", false, 0, MINUS_ONE,
+	true),
+  HOWTO(R_X86_64_GOTPLT64, 0, 8, 64, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTPLT64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_PLTOFF64, 0, 8, 64, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PLTOFF64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_SIZE32, 0, 4, 32, false, 0, complain_overflow_unsigned,
+	bfd_elf_generic_reloc, "R_X86_64_SIZE32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_SIZE64, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_SIZE64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_GOTPC32_TLSDESC, 0, 4, 32, true, 0,
 	complain_overflow_bitfield, bfd_elf_generic_reloc,
-	"R_X86_64_GOTPC32_TLSDESC",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO(R_X86_64_TLSDESC_CALL, 0, 0, 0, FALSE, 0,
+	"R_X86_64_GOTPC32_TLSDESC", false, 0, 0xffffffff, true),
+  HOWTO(R_X86_64_TLSDESC_CALL, 0, 0, 0, false, 0,
 	complain_overflow_dont, bfd_elf_generic_reloc,
 	"R_X86_64_TLSDESC_CALL",
-	FALSE, 0, 0, FALSE),
-  HOWTO(R_X86_64_TLSDESC, 0, 4, 64, FALSE, 0,
+	false, 0, 0, false),
+  HOWTO(R_X86_64_TLSDESC, 0, 8, 64, false, 0,
+	complain_overflow_dont, bfd_elf_generic_reloc,
+	"R_X86_64_TLSDESC", false, 0, MINUS_ONE, false),
+  HOWTO(R_X86_64_IRELATIVE, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_IRELATIVE", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_RELATIVE64, 0, 8, 64, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_RELATIVE64", false, 0, MINUS_ONE,
+	false),
+  HOWTO(R_X86_64_PC32_BND, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PC32_BND", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_PLT32_BND, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PLT32_BND", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_GOTPCRELX, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTPCRELX", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_REX_GOTPCRELX, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_REX_GOTPCRELX", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_CODE_4_GOTPCRELX, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_CODE_4_GOTPCRELX", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_CODE_4_GOTTPOFF, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_CODE_4_GOTTPOFF", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_CODE_4_GOTPC32_TLSDESC, 0, 4, 32, true, 0,
 	complain_overflow_bitfield, bfd_elf_generic_reloc,
-	"R_X86_64_TLSDESC",
-	FALSE, MINUS_ONE, MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_IRELATIVE, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_IRELATIVE", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_RELATIVE64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_RELATIVE64", FALSE, MINUS_ONE,
-	MINUS_ONE, FALSE),
-  HOWTO(R_X86_64_PC32_BND, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_PC32_BND", FALSE, 0xffffffff, 0xffffffff,
-	TRUE),
-  HOWTO(R_X86_64_PLT32_BND, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_PLT32_BND", FALSE, 0xffffffff, 0xffffffff,
-	TRUE),
-  HOWTO(R_X86_64_GOTPCRELX, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_GOTPCRELX", FALSE, 0xffffffff,
-	0xffffffff, TRUE),
-  HOWTO(R_X86_64_REX_GOTPCRELX, 0, 2, 32, TRUE, 0, complain_overflow_signed,
-	bfd_elf_generic_reloc, "R_X86_64_REX_GOTPCRELX", FALSE, 0xffffffff,
-	0xffffffff, TRUE),
+	"R_X86_64_CODE_4_GOTPC32_TLSDESC", false, 0, 0xffffffff, true),
 
   /* We have a gap in the reloc numbers here.
      R_X86_64_standard counts the number up to this point, and
      R_X86_64_vt_offset is the value to subtract from a reloc type of
      R_X86_64_GNU_VT* to form an index into this table.  */
-#define R_X86_64_standard (R_X86_64_REX_GOTPCRELX + 1)
+#define R_X86_64_standard (R_X86_64_CODE_4_GOTPC32_TLSDESC + 1)
 #define R_X86_64_vt_offset (R_X86_64_GNU_VTINHERIT - R_X86_64_standard)
 
 /* GNU extension to record C++ vtable hierarchy.  */
-  HOWTO (R_X86_64_GNU_VTINHERIT, 0, 4, 0, FALSE, 0, complain_overflow_dont,
-	 NULL, "R_X86_64_GNU_VTINHERIT", FALSE, 0, 0, FALSE),
+  HOWTO (R_X86_64_GNU_VTINHERIT, 0, 8, 0, false, 0, complain_overflow_dont,
+	 NULL, "R_X86_64_GNU_VTINHERIT", false, 0, 0, false),
 
 /* GNU extension to record C++ vtable member usage.  */
-  HOWTO (R_X86_64_GNU_VTENTRY, 0, 4, 0, FALSE, 0, complain_overflow_dont,
-	 _bfd_elf_rel_vtable_reloc_fn, "R_X86_64_GNU_VTENTRY", FALSE, 0, 0,
-	 FALSE),
+  HOWTO (R_X86_64_GNU_VTENTRY, 0, 8, 0, false, 0, complain_overflow_dont,
+	 _bfd_elf_rel_vtable_reloc_fn, "R_X86_64_GNU_VTENTRY", false, 0, 0,
+	 false),
 
 /* Use complain_overflow_bitfield on R_X86_64_32 for x32.  */
-  HOWTO(R_X86_64_32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-	bfd_elf_generic_reloc, "R_X86_64_32", FALSE, 0xffffffff, 0xffffffff,
-	FALSE)
+  HOWTO(R_X86_64_32, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_32", false, 0, 0xffffffff,
+	false)
 };
 
-/* Set if a relocation is converted from a GOTPCREL relocation.  */
-#define R_X86_64_converted_reloc_bit (1 << 7)
-
-#define X86_PCREL_TYPE_P(TYPE)		\
-  (   ((TYPE) == R_X86_64_PC8)		\
-   || ((TYPE) == R_X86_64_PC16)		\
-   || ((TYPE) == R_X86_64_PC32)		\
-   || ((TYPE) == R_X86_64_PC32_BND)	\
-   || ((TYPE) == R_X86_64_PC64))
-
-#define X86_SIZE_TYPE_P(TYPE)		\
-  ((TYPE) == R_X86_64_SIZE32 || (TYPE) == R_X86_64_SIZE64)
-
 /* Map BFD relocs to the x86_64 elf relocs.  */
 struct elf_reloc_map
 {
@@ -260,6 +253,9 @@ static const struct elf_reloc_map x86_64
   { BFD_RELOC_X86_64_PLT32_BND,	R_X86_64_PLT32_BND, },
   { BFD_RELOC_X86_64_GOTPCRELX, R_X86_64_GOTPCRELX, },
   { BFD_RELOC_X86_64_REX_GOTPCRELX, R_X86_64_REX_GOTPCRELX, },
+  { BFD_RELOC_X86_64_CODE_4_GOTPCRELX, R_X86_64_CODE_4_GOTPCRELX, },
+  { BFD_RELOC_X86_64_CODE_4_GOTTPOFF, R_X86_64_CODE_4_GOTTPOFF, },
+  { BFD_RELOC_X86_64_CODE_4_GOTPC32_TLSDESC, R_X86_64_CODE_4_GOTPC32_TLSDESC, },
   { BFD_RELOC_VTABLE_INHERIT,	R_X86_64_GNU_VTINHERIT, },
   { BFD_RELOC_VTABLE_ENTRY,	R_X86_64_GNU_VTENTRY, },
 };
@@ -337,7 +333,7 @@ elf_x86_64_reloc_name_lookup (bfd *abfd,
 
 /* Given an x86_64 ELF reloc type, fill in an arelent structure.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_info_to_howto (bfd *abfd, arelent *cache_ptr,
 			  Elf_Internal_Rela *dst)
 {
@@ -346,13 +342,13 @@ elf_x86_64_info_to_howto (bfd *abfd, are
   r_type = ELF32_R_TYPE (dst->r_info);
   cache_ptr->howto = elf_x86_64_rtype_to_howto (abfd, r_type);
   if (cache_ptr->howto == NULL)
-    return FALSE;
+    return false;
   BFD_ASSERT (r_type == cache_ptr->howto->type || cache_ptr->howto->type == R_X86_64_NONE);
-  return TRUE;
+  return true;
 }
 
 /* Support for core dump NOTE sections.  */
-static bfd_boolean
+static bool
 elf_x86_64_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -361,7 +357,7 @@ elf_x86_64_grok_prstatus (bfd *abfd, Elf
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 296:		/* sizeof(istruct elf_prstatus) on Linux/x32 */
 	/* pr_cursig */
@@ -397,15 +393,16 @@ elf_x86_64_grok_prstatus (bfd *abfd, Elf
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf_x86_64_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
-      case 124:		/* sizeof(struct elf_prpsinfo) on Linux/x32 */
+      case 124:
+	/* sizeof (struct elf_external_linux_prpsinfo32_ugid16).  */
 	elf_tdata (abfd)->core->pid
 	  = bfd_get_32 (abfd, note->descdata + 12);
 	elf_tdata (abfd)->core->program
@@ -414,7 +411,18 @@ elf_x86_64_grok_psinfo (bfd *abfd, Elf_I
 	  = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
 	break;
 
-      case 136:		/* sizeof(struct elf_prpsinfo) on Linux/x86_64 */
+    case 128:
+	/* sizeof (struct elf_external_linux_prpsinfo32_ugid32).  */
+	elf_tdata (abfd)->core->pid
+	  = bfd_get_32 (abfd, note->descdata + 12);
+	elf_tdata (abfd)->core->program
+	  = _bfd_elfcore_strndup (abfd, note->descdata + 32, 16);
+	elf_tdata (abfd)->core->command
+	  = _bfd_elfcore_strndup (abfd, note->descdata + 48, 80);
+	break;
+
+      case 136:
+	/* sizeof (struct elf_prpsinfo) on Linux/x86_64.  */
 	elf_tdata (abfd)->core->pid
 	  = bfd_get_32 (abfd, note->descdata + 24);
 	elf_tdata (abfd)->core->program
@@ -435,7 +443,7 @@ elf_x86_64_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 #ifdef CORE_HEADER
@@ -835,6 +843,87 @@ static const bfd_byte elf_x86_64_eh_fram
   DW_CFA_nop, DW_CFA_nop, DW_CFA_nop
 };
 
+static const sframe_frame_row_entry elf_x86_64_sframe_null_fre =
+{
+  0,
+  {16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 12 bytes.  */
+  SFRAME_V1_FRE_INFO (SFRAME_BASE_REG_SP, 1, SFRAME_FRE_OFFSET_1B) /* FRE info.  */
+};
+
+/* .sframe FRE covering the .plt section entry.  */
+static const sframe_frame_row_entry elf_x86_64_sframe_plt0_fre1 =
+{
+  0, /* SFrame FRE start address.  */
+  {16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 12 bytes.  */
+  SFRAME_V1_FRE_INFO (SFRAME_BASE_REG_SP, 1, SFRAME_FRE_OFFSET_1B) /* FRE info.  */
+};
+
+/* .sframe FRE covering the .plt section entry.  */
+static const sframe_frame_row_entry elf_x86_64_sframe_plt0_fre2 =
+{
+  6, /* SFrame FRE start address.  */
+  {24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 12 bytes.  */
+  SFRAME_V1_FRE_INFO (SFRAME_BASE_REG_SP, 1, SFRAME_FRE_OFFSET_1B) /* FRE info.  */
+};
+
+/* .sframe FRE covering the .plt section entry.  */
+static const sframe_frame_row_entry elf_x86_64_sframe_pltn_fre1 =
+{
+  0, /* SFrame FRE start address.  */
+  {8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 12 bytes.  */
+  SFRAME_V1_FRE_INFO (SFRAME_BASE_REG_SP, 1, SFRAME_FRE_OFFSET_1B) /* FRE info.  */
+};
+
+/* .sframe FRE covering the .plt section entry.  */
+static const sframe_frame_row_entry elf_x86_64_sframe_pltn_fre2 =
+{
+  11, /* SFrame FRE start address.  */
+  {16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 12 bytes.  */
+  SFRAME_V1_FRE_INFO (SFRAME_BASE_REG_SP, 1, SFRAME_FRE_OFFSET_1B) /* FRE info.  */
+};
+
+/* .sframe FRE covering the second .plt section entry.  */
+static const sframe_frame_row_entry elf_x86_64_sframe_sec_pltn_fre1 =
+{
+  0, /* SFrame FRE start address.  */
+  {8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 12 bytes.  */
+  SFRAME_V1_FRE_INFO (SFRAME_BASE_REG_SP, 1, SFRAME_FRE_OFFSET_1B) /* FRE info.  */
+};
+
+/* SFrame helper object for non-lazy PLT.  Also used for IBT enabled PLT.  */
+static const struct elf_x86_sframe_plt elf_x86_64_sframe_non_lazy_plt =
+{
+  LAZY_PLT_ENTRY_SIZE,
+  2, /* Number of FREs for PLT0.  */
+  /* Array of SFrame FREs for plt0.  */
+  { &elf_x86_64_sframe_plt0_fre1, &elf_x86_64_sframe_plt0_fre2 },
+  LAZY_PLT_ENTRY_SIZE,
+  1, /* Number of FREs for PLTn.  */
+  /* Array of SFrame FREs for plt.  */
+  { &elf_x86_64_sframe_sec_pltn_fre1, &elf_x86_64_sframe_null_fre },
+  0,
+  0, /* There is no second PLT necessary.  */
+  { &elf_x86_64_sframe_null_fre }
+};
+
+/* SFrame helper object for lazy PLT.  Also used for IBT enabled PLT.  */
+static const struct elf_x86_sframe_plt elf_x86_64_sframe_plt =
+{
+  LAZY_PLT_ENTRY_SIZE,
+  2, /* Number of FREs for PLT0.  */
+  /* Array of SFrame FREs for plt0.  */
+  { &elf_x86_64_sframe_plt0_fre1, &elf_x86_64_sframe_plt0_fre2 },
+  LAZY_PLT_ENTRY_SIZE,
+  2, /* Number of FREs for PLTn.  */
+  /* Array of SFrame FREs for plt.  */
+  { &elf_x86_64_sframe_pltn_fre1, &elf_x86_64_sframe_pltn_fre2 },
+  NON_LAZY_PLT_ENTRY_SIZE,
+  1, /* Number of FREs for PLTn for second PLT.  */
+  /* FREs for second plt (stack trace info for .plt.got is
+     identical).  Used when IBT or non-lazy PLT is in effect.  */
+  { &elf_x86_64_sframe_sec_pltn_fre1 }
+};
+
 /* These are the standard parameters.  */
 static const struct elf_x86_lazy_plt_layout elf_x86_64_lazy_plt =
   {
@@ -988,33 +1077,26 @@ static const struct elf_x86_non_lazy_plt
     sizeof (elf_x86_64_eh_frame_non_lazy_plt) /* eh_frame_plt_size */
   };
 
-static const struct elf_x86_backend_data elf_x86_64_arch_bed =
-  {
-    is_normal				 /* os */
-  };
-
-#define	elf_backend_arch_data	&elf_x86_64_arch_bed
-
-static bfd_boolean
+static bool
 elf64_x86_64_elf_object_p (bfd *abfd)
 {
   /* Set the right machine number for an x86-64 elf64 file.  */
   bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x86_64);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf32_x86_64_elf_object_p (bfd *abfd)
 {
   /* Set the right machine number for an x86-64 elf32 file.  */
   bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x64_32);
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if the TLS access code sequence support transition
    from R_TYPE.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_check_tls_transition (bfd *abfd,
 				 struct bfd_link_info *info,
 				 asection *sec,
@@ -1027,12 +1109,12 @@ elf_x86_64_check_tls_transition (bfd *ab
 {
   unsigned int val;
   unsigned long r_symndx;
-  bfd_boolean largepic = FALSE;
+  bool largepic = false;
   struct elf_link_hash_entry *h;
   bfd_vma offset;
   struct elf_x86_link_hash_table *htab;
   bfd_byte *call;
-  bfd_boolean indirect_call;
+  bool indirect_call;
 
   htab = elf_x86_hash_table (info, X86_64_ELF_DATA);
   offset = rel->r_offset;
@@ -1041,7 +1123,7 @@ elf_x86_64_check_tls_transition (bfd *ab
     case R_X86_64_TLSGD:
     case R_X86_64_TLSLD:
       if ((rel + 1) >= relend)
-	return FALSE;
+	return false;
 
       if (r_type == R_X86_64_TLSGD)
 	{
@@ -1078,7 +1160,7 @@ elf_x86_64_check_tls_transition (bfd *ab
 	  static const unsigned char leaq[] = { 0x66, 0x48, 0x8d, 0x3d };
 
 	  if ((offset + 12) > sec->size)
-	    return FALSE;
+	    return false;
 
 	  call = contents + offset + 4;
 	  if (call[0] != 0x66
@@ -1102,20 +1184,20 @@ elf_x86_64_check_tls_transition (bfd *ab
 		  || call[14] != 0xd0
 		  || !((call[10] == 0x48 && call[12] == 0xd8)
 		       || (call[10] == 0x4c && call[12] == 0xf8)))
-		return FALSE;
-	      largepic = TRUE;
+		return false;
+	      largepic = true;
 	    }
 	  else if (ABI_64_P (abfd))
 	    {
 	      if (offset < 4
 		  || memcmp (contents + offset - 4, leaq, 4) != 0)
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
 	      if (offset < 3
 		  || memcmp (contents + offset - 3, leaq + 1, 3) != 0)
-		return FALSE;
+		return false;
 	    }
 	  indirect_call = call[2] == 0xff;
 	}
@@ -1144,10 +1226,10 @@ elf_x86_64_check_tls_transition (bfd *ab
 	  static const unsigned char lea[] = { 0x48, 0x8d, 0x3d };
 
 	  if (offset < 3 || (offset + 9) > sec->size)
-	    return FALSE;
+	    return false;
 
 	  if (memcmp (contents + offset - 3, lea, 3) != 0)
-	    return FALSE;
+	    return false;
 
 	  call = contents + offset + 4;
 	  if (!(call[0] == 0xe8
@@ -1162,20 +1244,20 @@ elf_x86_64_check_tls_transition (bfd *ab
 		  || call[14] != 0xd0
 		  || !((call[10] == 0x48 && call[12] == 0xd8)
 		       || (call[10] == 0x4c && call[12] == 0xf8)))
-		return FALSE;
-	      largepic = TRUE;
+		return false;
+	      largepic = true;
 	    }
 	  indirect_call = call[0] == 0xff;
 	}
 
       r_symndx = htab->r_sym (rel[1].r_info);
       if (r_symndx < symtab_hdr->sh_info)
-	return FALSE;
+	return false;
 
       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
       if (h == NULL
 	  || !((struct elf_x86_link_hash_entry *) h)->tls_get_addr)
-	return FALSE;
+	return false;
       else
 	{
 	  r_type = (ELF32_R_TYPE (rel[1].r_info)
@@ -1183,11 +1265,24 @@ elf_x86_64_check_tls_transition (bfd *ab
 	  if (largepic)
 	    return r_type == R_X86_64_PLTOFF64;
 	  else if (indirect_call)
-	    return r_type == R_X86_64_GOTPCRELX;
+	    return (r_type == R_X86_64_GOTPCRELX || r_type == R_X86_64_GOTPCREL);
 	  else
 	    return (r_type == R_X86_64_PC32 || r_type == R_X86_64_PLT32);
 	}
 
+    case R_X86_64_CODE_4_GOTTPOFF:
+      /* Check transition from IE access model:
+		mov foo@gottpoff(%rip), %reg
+		add foo@gottpoff(%rip), %reg
+		where reg is one of r16 to r31.  */
+
+      if (offset < 4
+	  || (offset + 4) > sec->size
+	  || contents[offset - 4] != 0xd5)
+	return false;
+
+      goto check_gottpoff;
+
     case R_X86_64_GOTTPOFF:
       /* Check transition from IE access model:
 		mov foo@gottpoff(%rip), %reg
@@ -1202,58 +1297,87 @@ elf_x86_64_check_tls_transition (bfd *ab
 	    {
 	      /* X32 may have 0x44 REX prefix or no REX prefix.  */
 	      if (ABI_64_P (abfd))
-		return FALSE;
+		return false;
 	    }
 	}
       else
 	{
 	  /* X32 may not have any REX prefix.  */
 	  if (ABI_64_P (abfd))
-	    return FALSE;
+	    return false;
 	  if (offset < 2 || (offset + 3) > sec->size)
-	    return FALSE;
+	    return false;
 	}
 
+ check_gottpoff:
       val = bfd_get_8 (abfd, contents + offset - 2);
       if (val != 0x8b && val != 0x03)
-	return FALSE;
+	return false;
 
       val = bfd_get_8 (abfd, contents + offset - 1);
       return (val & 0xc7) == 5;
 
+    case R_X86_64_CODE_4_GOTPC32_TLSDESC:
+      /* Check transition from GDesc access model:
+		lea x@tlsdesc(%rip), %reg
+	 where reg is one of r16 to r31.  */
+
+      if (offset < 4
+	  || (offset + 4) > sec->size
+	  || contents[offset - 4] != 0xd5)
+	return false;
+
+      goto check_tlsdesc;
+
     case R_X86_64_GOTPC32_TLSDESC:
       /* Check transition from GDesc access model:
-		leaq x@tlsdesc(%rip), %rax
+		leaq x@tlsdesc(%rip), %rax <--- LP64 mode.
+		rex leal x@tlsdesc(%rip), %eax <--- X32 mode.
 
 	 Make sure it's a leaq adding rip to a 32-bit offset
 	 into any register, although it's probably almost always
 	 going to be rax.  */
 
       if (offset < 3 || (offset + 4) > sec->size)
-	return FALSE;
+	return false;
 
       val = bfd_get_8 (abfd, contents + offset - 3);
-      if ((val & 0xfb) != 0x48)
-	return FALSE;
+      val &= 0xfb;
+      if (val != 0x48 && (ABI_64_P (abfd) || val != 0x40))
+	return false;
 
+ check_tlsdesc:
       if (bfd_get_8 (abfd, contents + offset - 2) != 0x8d)
-	return FALSE;
+	return false;
 
       val = bfd_get_8 (abfd, contents + offset - 1);
       return (val & 0xc7) == 0x05;
 
     case R_X86_64_TLSDESC_CALL:
       /* Check transition from GDesc access model:
-		call *x@tlsdesc(%rax)
+		call *x@tlsdesc(%rax) <--- LP64 mode.
+		call *x@tlsdesc(%eax) <--- X32 mode.
        */
       if (offset + 2 <= sec->size)
 	{
-	  /* Make sure that it's a call *x@tlsdesc(%rax).  */
+	  unsigned int prefix;
 	  call = contents + offset;
-	  return call[0] == 0xff && call[1] == 0x10;
+	  prefix = 0;
+	  if (!ABI_64_P (abfd))
+	    {
+	      /* Check for call *x@tlsdesc(%eax).  */
+	      if (call[0] == 0x67)
+		{
+		  prefix = 1;
+		  if (offset + 3 > sec->size)
+		    return false;
+		}
+	    }
+	  /* Make sure that it's a call *x@tlsdesc(%rax).  */
+	  return call[prefix] == 0xff && call[1 + prefix] == 0x10;
 	}
 
-      return FALSE;
+      return false;
 
     default:
       abort ();
@@ -1263,7 +1387,7 @@ elf_x86_64_check_tls_transition (bfd *ab
 /* Return TRUE if the TLS access transition is OK or no transition
    will be performed.  Update R_TYPE if there is a transition.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd,
 			   asection *sec, bfd_byte *contents,
 			   Elf_Internal_Shdr *symtab_hdr,
@@ -1273,24 +1397,26 @@ elf_x86_64_tls_transition (struct bfd_li
 			   const Elf_Internal_Rela *relend,
 			   struct elf_link_hash_entry *h,
 			   unsigned long r_symndx,
-			   bfd_boolean from_relocate_section)
+			   bool from_relocate_section)
 {
   unsigned int from_type = *r_type;
   unsigned int to_type = from_type;
-  bfd_boolean check = TRUE;
+  bool check = true;
 
   /* Skip TLS transition for functions.  */
   if (h != NULL
       && (h->type == STT_FUNC
 	  || h->type == STT_GNU_IFUNC))
-    return TRUE;
+    return true;
 
   switch (from_type)
     {
     case R_X86_64_TLSGD:
     case R_X86_64_GOTPC32_TLSDESC:
+    case R_X86_64_CODE_4_GOTPC32_TLSDESC:
     case R_X86_64_TLSDESC_CALL:
     case R_X86_64_GOTTPOFF:
+    case R_X86_64_CODE_4_GOTTPOFF:
       if (bfd_link_executable (info))
 	{
 	  if (h == NULL)
@@ -1310,6 +1436,7 @@ elf_x86_64_tls_transition (struct bfd_li
 
 	  if (to_type == R_X86_64_TLSGD
 	      || to_type == R_X86_64_GOTPC32_TLSDESC
+	      || to_type == R_X86_64_CODE_4_GOTPC32_TLSDESC
 	      || to_type == R_X86_64_TLSDESC_CALL)
 	    {
 	      if (tls_type == GOT_TLS_IE)
@@ -1317,7 +1444,7 @@ elf_x86_64_tls_transition (struct bfd_li
 	    }
 
 	  /* We checked the transition before when we were called from
-	     elf_x86_64_check_relocs.  We only want to check the new
+	     elf_x86_64_scan_relocs.  We only want to check the new
 	     transition which hasn't been checked before.  */
 	  check = new_to_type != to_type && from_type == to_type;
 	  to_type = new_to_type;
@@ -1331,12 +1458,14 @@ elf_x86_64_tls_transition (struct bfd_li
       break;
 
     default:
-      return TRUE;
+      return true;
     }
 
   /* Return TRUE if there is no transition.  */
-  if (from_type == to_type)
-    return TRUE;
+  if (from_type == to_type
+      || (from_type == R_X86_64_CODE_4_GOTTPOFF
+	  && to_type == R_X86_64_GOTTPOFF))
+    return true;
 
   /* Check if the transition can be performed.  */
   if (check
@@ -1351,7 +1480,7 @@ elf_x86_64_tls_transition (struct bfd_li
       to = elf_x86_64_rtype_to_howto (abfd, to_type);
 
       if (from == NULL || to == NULL)
-	return FALSE;
+	return false;
 
       if (h)
 	name = h->root.root.string;
@@ -1366,7 +1495,7 @@ elf_x86_64_tls_transition (struct bfd_li
 	    {
 	      Elf_Internal_Sym *isym;
 
-	      isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	      isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 					    abfd, r_symndx);
 	      name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);
 	    }
@@ -1378,18 +1507,14 @@ elf_x86_64_tls_transition (struct bfd_li
 	   " in section `%pA' failed"),
 	 abfd, from->name, to->name, name, (uint64_t) rel->r_offset, sec);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   *r_type = to_type;
-  return TRUE;
+  return true;
 }
 
-/* Rename some of the generic section flags to better document how they
-   are used here.  */
-#define check_relocs_failed	sec_flg0
-
-static bfd_boolean
+static bool
 elf_x86_64_need_pic (struct bfd_link_info *info,
 		     bfd *input_bfd, asection *sec,
 		     struct elf_link_hash_entry *h,
@@ -1458,7 +1583,7 @@ elf_x86_64_need_pic (struct bfd_link_inf
 		      object, pic);
   bfd_set_error (bfd_error_bad_value);
   sec->check_relocs_failed = 1;
-  return FALSE;
+  return false;
 }
 
 /* With the local symbol, foo, we convert
@@ -1480,20 +1605,22 @@ elf_x86_64_need_pic (struct bfd_link_inf
    where binop is one of adc, add, and, cmp, or, sbb, sub, xor
    instructions.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_convert_load_reloc (bfd *abfd,
 			       bfd_byte *contents,
 			       unsigned int *r_type_p,
 			       Elf_Internal_Rela *irel,
 			       struct elf_link_hash_entry *h,
-			       bfd_boolean *converted,
+			       bool *converted,
 			       struct bfd_link_info *link_info)
 {
   struct elf_x86_link_hash_table *htab;
-  bfd_boolean is_pic;
-  bfd_boolean no_overflow;
-  bfd_boolean relocx;
-  bfd_boolean to_reloc_pc32;
+  bool is_pic;
+  bool no_overflow;
+  bool relocx;
+  bool to_reloc_pc32;
+  bool abs_symbol;
+  bool local_ref;
   asection *tsec;
   bfd_signed_vma raddend;
   unsigned int opcode;
@@ -1501,20 +1628,32 @@ elf_x86_64_convert_load_reloc (bfd *abfd
   unsigned int r_type = *r_type_p;
   unsigned int r_symndx;
   bfd_vma roff = irel->r_offset;
+  bfd_vma abs_relocation;
 
-  if (roff < (r_type == R_X86_64_REX_GOTPCRELX ? 3 : 2))
-    return TRUE;
+  if (roff < (r_type == R_X86_64_CODE_4_GOTPCRELX
+	      ? 4 : (r_type == R_X86_64_REX_GOTPCRELX ? 3 : 2)))
+    return true;
 
   raddend = irel->r_addend;
   /* Addend for 32-bit PC-relative relocation must be -4.  */
   if (raddend != -4)
-    return TRUE;
+    return true;
 
   htab = elf_x86_hash_table (link_info, X86_64_ELF_DATA);
   is_pic = bfd_link_pic (link_info);
 
-  relocx = (r_type == R_X86_64_GOTPCRELX
-	    || r_type == R_X86_64_REX_GOTPCRELX);
+  if (r_type == R_X86_64_CODE_4_GOTPCRELX)
+    {
+      /* Skip if this isn't a REX2 instruction.  */
+      opcode = bfd_get_8 (abfd, contents + roff - 4);
+      if (opcode != 0xd5)
+	return true;
+
+      relocx = true;
+    }
+  else
+    relocx = (r_type == R_X86_64_GOTPCRELX
+	      || r_type == R_X86_64_REX_GOTPCRELX);
 
   /* TRUE if --no-relax is used.  */
   no_overflow = link_info->disable_target_specific_optimizations > 1;
@@ -1526,11 +1665,11 @@ elf_x86_64_convert_load_reloc (bfd *abfd
   /* Convert mov to lea since it has been done for a while.  */
   if (opcode != 0x8b)
     {
-      /* Only convert R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX
-	 for call, jmp or one of adc, add, and, cmp, or, sbb, sub,
-	 test, xor instructions.  */
+      /* Only convert R_X86_64_GOTPCRELX, R_X86_64_REX_GOTPCRELX
+	 and R_X86_64_CODE_4_GOTPCRELX for call, jmp or one of adc,
+	 add, and, cmp, or, sbb, sub, test, xor instructions.  */
       if (!relocx)
-	return TRUE;
+	return true;
     }
 
   /* We convert only to R_X86_64_PC32:
@@ -1544,18 +1683,26 @@ elf_x86_64_convert_load_reloc (bfd *abfd
 		   || no_overflow
 		   || is_pic);
 
+  abs_symbol = false;
+  abs_relocation = 0;
+
   /* Get the symbol referred to by the reloc.  */
   if (h == NULL)
     {
       Elf_Internal_Sym *isym
-	= bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx);
+	= bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx);
 
       /* Skip relocation against undefined symbols.  */
       if (isym->st_shndx == SHN_UNDEF)
-	return TRUE;
+	return true;
 
+      local_ref = true;
       if (isym->st_shndx == SHN_ABS)
-	tsec = bfd_abs_section_ptr;
+	{
+	  tsec = bfd_abs_section_ptr;
+	  abs_symbol = true;
+	  abs_relocation = isym->st_value;
+	}
       else if (isym->st_shndx == SHN_COMMON)
 	tsec = bfd_com_section_ptr;
       else if (isym->st_shndx == SHN_X86_64_LCOMMON)
@@ -1571,9 +1718,11 @@ elf_x86_64_convert_load_reloc (bfd *abfd
 	 GOTPCRELX relocations since we need to modify REX byte.
 	 It is OK convert mov with R_X86_64_GOTPCREL to
 	 R_X86_64_PC32.  */
-      bfd_boolean local_ref;
       struct elf_x86_link_hash_entry *eh = elf_x86_hash_entry (h);
 
+      abs_symbol = ABS_SYMBOL_P (h);
+      abs_relocation = h->root.u.def.value;
+
       /* NB: Also set linker_def via SYMBOL_REFERENCES_LOCAL_P.  */
       local_ref = SYMBOL_REFERENCES_LOCAL_P (link_info, h);
       if ((relocx || opcode == 0x8b)
@@ -1586,20 +1735,20 @@ elf_x86_64_convert_load_reloc (bfd *abfd
 	      /* Skip for branch instructions since R_X86_64_PC32
 		 may overflow.  */
 	      if (no_overflow)
-		return TRUE;
+		return true;
 	    }
 	  else if (relocx)
 	    {
 	      /* For non-branch instructions, we can convert to
 		 R_X86_64_32/R_X86_64_32S since we know if there
 		 is a REX byte.  */
-	      to_reloc_pc32 = FALSE;
+	      to_reloc_pc32 = false;
 	    }
 
 	  /* Since we don't know the current PC when PIC is true,
 	     we can't convert to R_X86_64_PC32.  */
 	  if (to_reloc_pc32 && is_pic)
-	    return TRUE;
+	    return true;
 
 	  goto convert;
 	}
@@ -1629,25 +1778,25 @@ elf_x86_64_convert_load_reloc (bfd *abfd
 	    {
 	      /* Skip since R_X86_64_32/R_X86_64_32S may overflow.  */
 	      if (no_overflow)
-		return TRUE;
+		return true;
 	      goto convert;
 	    }
 	  tsec = h->root.u.def.section;
 	}
       else
-	return TRUE;
+	return true;
     }
 
   /* Don't convert GOTPCREL relocation against large section.  */
   if (elf_section_data (tsec) !=  NULL
       && (elf_section_flags (tsec) & SHF_X86_64_LARGE) != 0)
-    return TRUE;
+    return true;
 
   /* Skip since R_X86_64_PC32/R_X86_64_32/R_X86_64_32S may overflow.  */
   if (no_overflow)
-    return TRUE;
+    return true;
 
-convert:
+ convert:
   if (opcode == 0xff)
     {
       /* We have "call/jmp *foo@GOTPCREL(%rip)".  */
@@ -1703,16 +1852,28 @@ convert:
     }
   else
     {
-      unsigned int rex;
+      unsigned int rex = 0;
       unsigned int rex_mask = REX_R;
+      unsigned int rex2 = 0;
+      unsigned int rex2_mask = REX_R | REX_R << 4;
+      bool rex_w = false;
 
-      if (r_type == R_X86_64_REX_GOTPCRELX)
-	rex = bfd_get_8 (abfd, contents + roff - 3);
-      else
-	rex = 0;
+      if (r_type == R_X86_64_CODE_4_GOTPCRELX)
+	{
+	  rex2 = bfd_get_8 (abfd, contents + roff - 3);
+	  rex_w = (rex2 & REX_W) != 0;
+	}
+      else if (r_type == R_X86_64_REX_GOTPCRELX)
+	{
+	  rex = bfd_get_8 (abfd, contents + roff - 3);
+	  rex_w = (rex & REX_W) != 0;
+	}
 
       if (opcode == 0x8b)
 	{
+	  if (abs_symbol && local_ref && relocx)
+	    to_reloc_pc32 = false;
+
 	  if (to_reloc_pc32)
 	    {
 	      /* Convert "mov foo@GOTPCREL(%rip), %reg" to
@@ -1727,8 +1888,7 @@ convert:
 	      opcode = 0xc7;
 	      modrm = bfd_get_8 (abfd, contents + roff - 1);
 	      modrm = 0xc0 | (modrm & 0x38) >> 3;
-	      if ((rex & REX_W) != 0
-		  && ABI_64_P (link_info->output_bfd))
+	      if (rex_w && ABI_64_P (link_info->output_bfd))
 		{
 		  /* Keep the REX_W bit in REX byte for LP64.  */
 		  r_type = R_X86_64_32S;
@@ -1740,8 +1900,9 @@ convert:
 		     use R_X86_64_32 and clear the W bit to avoid
 		     sign-extend imm32 to imm64.  */
 		  r_type = R_X86_64_32;
-		  /* Clear the W bit in REX byte.  */
+		  /* Clear the W bit in REX byte and REX2 payload.  */
 		  rex_mask |= REX_W;
+		  rex2_mask |= REX_W;
 		  goto rewrite_modrm_rex;
 		}
 	    }
@@ -1750,7 +1911,7 @@ convert:
 	{
 	  /* R_X86_64_PC32 isn't supported.  */
 	  if (to_reloc_pc32)
-	    return TRUE;
+	    return true;
 
 	  modrm = bfd_get_8 (abfd, contents + roff - 1);
 	  if (opcode == 0x85)
@@ -1770,9 +1931,24 @@ convert:
 
 	  /* Use R_X86_64_32 with 32-bit operand to avoid relocation
 	     overflow when sign-extending imm32 to imm64.  */
-	  r_type = (rex & REX_W) != 0 ? R_X86_64_32S : R_X86_64_32;
+	  r_type = rex_w ? R_X86_64_32S : R_X86_64_32;
+
+	rewrite_modrm_rex:
+	  if (abs_relocation)
+	    {
+	      /* Check if R_X86_64_32S/R_X86_64_32 fits.  */
+	      if (r_type == R_X86_64_32S)
+		{
+		  if ((abs_relocation + 0x80000000) > 0xffffffff)
+		    return true;
+		}
+	      else
+		{
+		  if (abs_relocation > 0xffffffff)
+		    return true;
+		}
+	    }
 
-rewrite_modrm_rex:
 	  bfd_put_8 (abfd, modrm, contents + roff - 1);
 
 	  if (rex)
@@ -1781,6 +1957,13 @@ rewrite_modrm_rex:
 	      rex = (rex & ~rex_mask) | (rex & REX_R) >> 2;
 	      bfd_put_8 (abfd, rex, contents + roff - 3);
 	    }
+	  else if (rex2)
+	    {
+	      /* Move the R bits to the B bits in REX2 payload byte.  */
+	      rex2 = ((rex2 & ~rex2_mask)
+		      | (rex2 & (REX_R | REX_R << 4)) >> 2);
+	      bfd_put_8 (abfd, rex2, contents + roff - 3);
+	    }
 
 	  /* No addend for R_X86_64_32/R_X86_64_32S relocations.  */
 	  irel->r_addend = 0;
@@ -1793,46 +1976,36 @@ rewrite_modrm_rex:
   irel->r_info = htab->r_info (r_symndx,
 			       r_type | R_X86_64_converted_reloc_bit);
 
-  *converted = TRUE;
+  *converted = true;
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase, and
-   calculate needed space in the global offset table, procedure
-   linkage table, and dynamic reloc sections.  */
+   calculate needed space in the global offset table, and procedure
+   linkage table.  */
 
-static bfd_boolean
-elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
-			 asection *sec,
-			 const Elf_Internal_Rela *relocs)
+static bool
+elf_x86_64_scan_relocs (bfd *abfd, struct bfd_link_info *info,
+			asection *sec,
+			const Elf_Internal_Rela *relocs)
 {
   struct elf_x86_link_hash_table *htab;
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
-  asection *sreloc;
   bfd_byte *contents;
-  bfd_boolean converted;
+  bool converted;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
+    return true;
 
   htab = elf_x86_hash_table (info, X86_64_ELF_DATA);
   if (htab == NULL)
     {
       sec->check_relocs_failed = 1;
-      return FALSE;
+      return false;
     }
 
   BFD_ASSERT (is_x86_elf (abfd, htab));
@@ -1843,15 +2016,13 @@ elf_x86_64_check_relocs (bfd *abfd, stru
   else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
     {
       sec->check_relocs_failed = 1;
-      return FALSE;
+      return false;
     }
 
   symtab_hdr = &elf_symtab_hdr (abfd);
   sym_hashes = elf_sym_hashes (abfd);
 
-  converted = FALSE;
-
-  sreloc = NULL;
+  converted = false;
 
   rel_end = relocs + sec->reloc_count;
   for (rel = relocs; rel < rel_end; rel++)
@@ -1862,12 +2033,17 @@ elf_x86_64_check_relocs (bfd *abfd, stru
       struct elf_x86_link_hash_entry *eh;
       Elf_Internal_Sym *isym;
       const char *name;
-      bfd_boolean size_reloc;
-      bfd_boolean converted_reloc;
+      bool size_reloc;
+      bool converted_reloc;
+      bool no_dynreloc;
 
       r_symndx = htab->r_sym (rel->r_info);
       r_type = ELF32_R_TYPE (rel->r_info);
 
+      /* Don't check R_X86_64_NONE.  */
+      if (r_type == R_X86_64_NONE)
+	continue;
+
       if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
 	{
 	  /* xgettext:c-format */
@@ -1879,7 +2055,7 @@ elf_x86_64_check_relocs (bfd *abfd, stru
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* A local symbol.  */
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 					abfd, r_symndx);
 	  if (isym == NULL)
 	    goto error_return;
@@ -1888,7 +2064,7 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 	    {
 	      h = _bfd_elf_x86_get_local_sym_hash (htab, abfd, rel,
-						   TRUE);
+						   true);
 	      if (h == NULL)
 		goto error_return;
 
@@ -1946,16 +2122,19 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	    break;
 	  }
 
+      eh = (struct elf_x86_link_hash_entry *) h;
+
       if (h != NULL)
 	{
 	  /* It is referenced by a non-shared object. */
 	  h->ref_regular = 1;
 	}
 
-      converted_reloc = FALSE;
+      converted_reloc = false;
       if ((r_type == R_X86_64_GOTPCREL
 	   || r_type == R_X86_64_GOTPCRELX
-	   || r_type == R_X86_64_REX_GOTPCRELX)
+	   || r_type == R_X86_64_REX_GOTPCRELX
+	   || r_type == R_X86_64_CODE_4_GOTPCRELX)
 	  && (h == NULL || h->type != STT_GNU_IFUNC))
 	{
 	  Elf_Internal_Rela *irel = (Elf_Internal_Rela *) rel;
@@ -1965,20 +2144,23 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	    goto error_return;
 
 	  if (converted_reloc)
-	    converted = TRUE;
+	    converted = true;
 	}
 
+      if (!_bfd_elf_x86_valid_reloc_p (sec, info, htab, rel, h, isym,
+				       symtab_hdr, &no_dynreloc))
+	return false;
+
       if (! elf_x86_64_tls_transition (info, abfd, sec, contents,
 				       symtab_hdr, sym_hashes,
 				       &r_type, GOT_UNKNOWN,
-				       rel, rel_end, h, r_symndx, FALSE))
+				       rel, rel_end, h, r_symndx, false))
 	goto error_return;
 
       /* Check if _GLOBAL_OFFSET_TABLE_ is referenced.  */
       if (h == htab->elf.hgot)
-	htab->got_referenced = TRUE;
+	htab->got_referenced = true;
 
-      eh = (struct elf_x86_link_hash_entry *) h;
       switch (r_type)
 	{
 	case R_X86_64_TLSLD:
@@ -1994,6 +2176,7 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	  break;
 
 	case R_X86_64_GOTTPOFF:
+	case R_X86_64_CODE_4_GOTTPOFF:
 	  if (!bfd_link_executable (info))
 	    info->flags |= DF_STATIC_TLS;
 	  /* Fall through */
@@ -2002,11 +2185,13 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	case R_X86_64_GOTPCREL:
 	case R_X86_64_GOTPCRELX:
 	case R_X86_64_REX_GOTPCRELX:
+	case R_X86_64_CODE_4_GOTPCRELX:
 	case R_X86_64_TLSGD:
 	case R_X86_64_GOT64:
 	case R_X86_64_GOTPCREL64:
 	case R_X86_64_GOTPLT64:
 	case R_X86_64_GOTPC32_TLSDESC:
+	case R_X86_64_CODE_4_GOTPC32_TLSDESC:
 	case R_X86_64_TLSDESC_CALL:
 	  /* This symbol requires a global offset table entry.	*/
 	  {
@@ -2014,12 +2199,28 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 
 	    switch (r_type)
 	      {
-	      default: tls_type = GOT_NORMAL; break;
-	      case R_X86_64_TLSGD: tls_type = GOT_TLS_GD; break;
-	      case R_X86_64_GOTTPOFF: tls_type = GOT_TLS_IE; break;
+	      default:
+		tls_type = GOT_NORMAL;
+		if (h)
+		  {
+		    if (ABS_SYMBOL_P (h))
+		      tls_type = GOT_ABS;
+		  }
+		else if (isym->st_shndx == SHN_ABS)
+		  tls_type = GOT_ABS;
+		break;
+	      case R_X86_64_TLSGD:
+		tls_type = GOT_TLS_GD;
+		break;
+	      case R_X86_64_GOTTPOFF:
+	      case R_X86_64_CODE_4_GOTTPOFF:
+		tls_type = GOT_TLS_IE;
+		break;
 	      case R_X86_64_GOTPC32_TLSDESC:
+	      case R_X86_64_CODE_4_GOTPC32_TLSDESC:
 	      case R_X86_64_TLSDESC_CALL:
-		tls_type = GOT_TLS_GDESC; break;
+		tls_type = GOT_TLS_GDESC;
+		break;
 	      }
 
 	    if (h != NULL)
@@ -2031,25 +2232,12 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	      {
 		bfd_signed_vma *local_got_refcounts;
 
+		if (!elf_x86_allocate_local_got_info (abfd,
+						      symtab_hdr->sh_info))
+		      goto error_return;
+
 		/* This is a global offset table entry for a local symbol.  */
 		local_got_refcounts = elf_local_got_refcounts (abfd);
-		if (local_got_refcounts == NULL)
-		  {
-		    bfd_size_type size;
-
-		    size = symtab_hdr->sh_info;
-		    size *= sizeof (bfd_signed_vma)
-		      + sizeof (bfd_vma) + sizeof (char);
-		    local_got_refcounts = ((bfd_signed_vma *)
-					   bfd_zalloc (abfd, size));
-		    if (local_got_refcounts == NULL)
-		      goto error_return;
-		    elf_local_got_refcounts (abfd) = local_got_refcounts;
-		    elf_x86_local_tlsdesc_gotent (abfd)
-		      = (bfd_vma *) (local_got_refcounts + symtab_hdr->sh_info);
-		    elf_x86_local_got_tls_type (abfd)
-		      = (char *) (local_got_refcounts + 2 * symtab_hdr->sh_info);
-		  }
 		local_got_refcounts[r_symndx] = 1;
 		old_tls_type
 		  = elf_x86_local_got_tls_type (abfd) [r_symndx];
@@ -2102,7 +2290,6 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	  break;
 
 	case R_X86_64_PLT32:
-	case R_X86_64_PLT32_BND:
 	  /* This symbol requires a procedure linkage table entry.  We
 	     actually build the entry in adjust_dynamic_symbol,
 	     because this might be a case of linking PIC code which is
@@ -2132,7 +2319,7 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 
 	case R_X86_64_SIZE32:
 	case R_X86_64_SIZE64:
-	  size_reloc = TRUE;
+	  size_reloc = true;
 	  goto do_size;
 
 	case R_X86_64_32:
@@ -2161,10 +2348,9 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	case R_X86_64_PC8:
 	case R_X86_64_PC16:
 	case R_X86_64_PC32:
-	case R_X86_64_PC32_BND:
 	case R_X86_64_PC64:
 	case R_X86_64_64:
-pointer:
+	pointer:
 	  if (eh != NULL && (sec->flags & SEC_CODE) != 0)
 	    eh->zero_undefweak |= 0x2;
 	  /* We are called after all symbols have been resolved.  Only
@@ -2174,7 +2360,7 @@ pointer:
 	      && (bfd_link_executable (info)
 		  || h->type == STT_GNU_IFUNC))
 	    {
-	      bfd_boolean func_pointer_ref = FALSE;
+	      bool func_pointer_ref = false;
 
 	      if (r_type == R_X86_64_PC32)
 		{
@@ -2194,19 +2380,26 @@ pointer:
 			}
 		    }
 		}
-	      else if (r_type != R_X86_64_PC32_BND
-		       && r_type != R_X86_64_PC64)
+	      else if (r_type != R_X86_64_PC64)
 		{
-		  h->pointer_equality_needed = 1;
 		  /* At run-time, R_X86_64_64 can be resolved for both
 		     x86-64 and x32. But R_X86_64_32 and R_X86_64_32S
-		     can only be resolved for x32.  */
+		     can only be resolved for x32.  Function pointer
+		     reference doesn't need PLT for pointer equality.  */
 		  if ((sec->flags & SEC_READONLY) == 0
 		      && (r_type == R_X86_64_64
 			  || (!ABI_64_P (abfd)
 			      && (r_type == R_X86_64_32
 				  || r_type == R_X86_64_32S))))
-		    func_pointer_ref = TRUE;
+		    func_pointer_ref = true;
+
+		  /* IFUNC symbol needs pointer equality in PDE so that
+		     function pointer reference will be resolved to its
+		     PLT entry directly.  */
+		  if (!func_pointer_ref
+		      || (bfd_link_pde (info)
+			  && h->type == STT_GNU_IFUNC))
+		    h->pointer_equality_needed = 1;
 		}
 
 	      if (!func_pointer_ref)
@@ -2219,40 +2412,51 @@ pointer:
 		     adjust_dynamic_symbol.  */
 		  h->non_got_ref = 1;
 
+		  if (!elf_has_indirect_extern_access (sec->owner))
+		    eh->non_got_ref_without_indirect_extern_access = 1;
+
 		  /* We may need a .plt entry if the symbol is a function
 		     defined in a shared lib or is a function referenced
 		     from the code or read-only section.  */
 		  if (!h->def_regular
 		      || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0)
 		    h->plt.refcount = 1;
+
+		  if (htab->elf.target_os != is_solaris
+		      && h->pointer_equality_needed
+		      && h->type == STT_FUNC
+		      && eh->def_protected
+		      && !SYMBOL_DEFINED_NON_SHARED_P (h)
+		      && h->def_dynamic)
+		    {
+		      /* Disallow non-canonical reference to canonical
+			 protected function.  */
+		      _bfd_error_handler
+			/* xgettext:c-format */
+			(_("%pB: non-canonical reference to canonical "
+			   "protected function `%s' in %pB"),
+			 abfd, h->root.root.string,
+			 h->root.u.def.section->owner);
+		      bfd_set_error (bfd_error_bad_value);
+		      goto error_return;
+		    }
 		}
 	    }
 
-	  size_reloc = FALSE;
-do_size:
-	  if (NEED_DYNAMIC_RELOCATION_P (info, TRUE, h, sec, r_type,
-					 htab->pointer_r_type))
+	  size_reloc = false;
+	do_size:
+	  if (!no_dynreloc
+	      && NEED_DYNAMIC_RELOCATION_P (true, info, true, h, sec,
+					    r_type,
+					    htab->pointer_r_type))
 	    {
 	      struct elf_dyn_relocs *p;
 	      struct elf_dyn_relocs **head;
 
-	      /* We must copy these reloc types into the output file.
-		 Create a reloc section in dynobj and make room for
-		 this reloc.  */
-	      if (sreloc == NULL)
-		{
-		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, ABI_64_P (abfd) ? 3 : 2,
-		     abfd, /*rela?*/ TRUE);
-
-		  if (sreloc == NULL)
-		    goto error_return;
-		}
-
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
-		head = &eh->dyn_relocs;
+		head = &h->dyn_relocs;
 	      else
 		{
 		  /* Track dynamic relocs needed for local syms too.
@@ -2261,7 +2465,7 @@ do_size:
 		  asection *s;
 		  void **vpp;
 
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
 		    goto error_return;
@@ -2279,7 +2483,7 @@ do_size:
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 
 		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->elf.dynobj, amt));
@@ -2294,7 +2498,7 @@ do_size:
 
 	      p->count += 1;
 	      /* Count size relocation as PC-relative relocation.  */
-	      if (X86_PCREL_TYPE_P (r_type) || size_reloc)
+	      if (X86_PCREL_TYPE_P (true, r_type) || size_reloc)
 		p->pc_count += 1;
 	    }
 	  break;
@@ -2320,13 +2524,14 @@ do_size:
 
   if (elf_section_data (sec)->this_hdr.contents != contents)
     {
-      if (!converted && !info->keep_memory)
+      if (!converted && !_bfd_link_keep_memory (info))
 	free (contents);
       else
 	{
 	  /* Cache the section contents for elf_link_input_bfd if any
 	     load is converted or --no-keep-memory isn't used.  */
 	  elf_section_data (sec)->this_hdr.contents = contents;
+	  info->cache_size += sec->size;
 	}
     }
 
@@ -2334,13 +2539,31 @@ do_size:
   if (elf_section_data (sec)->relocs != relocs && converted)
     elf_section_data (sec)->relocs = (Elf_Internal_Rela *) relocs;
 
-  return TRUE;
+  return true;
 
-error_return:
+ error_return:
   if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
   sec->check_relocs_failed = 1;
-  return FALSE;
+  return false;
+}
+
+static bool
+elf_x86_64_always_size_sections (bfd *output_bfd,
+				 struct bfd_link_info *info)
+{
+  bfd *abfd;
+
+  /* Scan relocations after rel_from_abs has been set on __ehdr_start.  */
+  for (abfd = info->input_bfds;
+       abfd != (bfd *) NULL;
+       abfd = abfd->link.next)
+    if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+	&& !_bfd_elf_link_iterate_on_relocs (abfd, info,
+					     elf_x86_64_scan_relocs))
+      return false;
+
+  return _bfd_x86_elf_always_size_sections (output_bfd, info);
 }
 
 /* Return the relocation value for @tpoff relocation
@@ -2364,7 +2587,7 @@ elf_x86_64_tpoff (struct bfd_link_info *
 
 /* Relocate an x86_64 ELF section.  */
 
-static bfd_boolean
+static int
 elf_x86_64_relocate_section (bfd *output_bfd,
 			     struct bfd_link_info *info,
 			     bfd *input_bfd,
@@ -2383,19 +2606,20 @@ elf_x86_64_relocate_section (bfd *output
   Elf_Internal_Rela *wrel;
   Elf_Internal_Rela *relend;
   unsigned int plt_entry_size;
+  bool status;
 
-  /* Skip if check_relocs failed.  */
+  /* Skip if check_relocs or scan_relocs failed.  */
   if (input_section->check_relocs_failed)
-    return FALSE;
+    return false;
 
   htab = elf_x86_hash_table (info, X86_64_ELF_DATA);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (!is_x86_elf (input_bfd, htab))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   plt_entry_size = htab->plt.plt_entry_size;
@@ -2406,6 +2630,7 @@ elf_x86_64_relocate_section (bfd *output
 
   _bfd_x86_elf_set_tls_module_base (info);
 
+  status = true;
   rel = wrel = relocs;
   relend = relocs + input_section->reloc_count;
   for (; rel < relend; wrel++, rel++)
@@ -2419,16 +2644,16 @@ elf_x86_64_relocate_section (bfd *output
       asection *sec;
       bfd_vma off, offplt, plt_offset;
       bfd_vma relocation;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_reloc_status_type r;
       int tls_type;
       asection *base_got, *resolved_plt;
       bfd_vma st_size;
-      bfd_boolean resolved_to_zero;
-      bfd_boolean relative_reloc;
-      bfd_boolean converted_reloc;
-      bfd_boolean need_copy_reloc_in_pie;
-      bfd_boolean no_copyreloc_p;
+      bool resolved_to_zero;
+      bool relative_reloc;
+      bool converted_reloc;
+      bool need_copy_reloc_in_pie;
+      bool no_copyreloc_p;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       if (r_type == (int) R_X86_64_GNU_VTINHERIT
@@ -2454,7 +2679,7 @@ elf_x86_64_relocate_section (bfd *output
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  sym = local_syms + r_symndx;
@@ -2469,7 +2694,7 @@ elf_x86_64_relocate_section (bfd *output
 	      && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
 	    {
 	      h = _bfd_elf_x86_get_local_sym_hash (htab, input_bfd,
-						   rel, FALSE);
+						   rel, false);
 	      if (h == NULL)
 		abort ();
 
@@ -2480,8 +2705,8 @@ elf_x86_64_relocate_section (bfd *output
 	}
       else
 	{
-	  bfd_boolean warned ATTRIBUTE_UNUSED;
-	  bfd_boolean ignored ATTRIBUTE_UNUSED;
+	  bool warned ATTRIBUTE_UNUSED;
+	  bool ignored ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -2566,6 +2791,7 @@ elf_x86_64_relocate_section (bfd *output
 	    case R_X86_64_GOTPCREL:
 	    case R_X86_64_GOTPCRELX:
 	    case R_X86_64_REX_GOTPCRELX:
+	    case R_X86_64_CODE_4_GOTPCRELX:
 	    case R_X86_64_GOTPCREL64:
 	      base_got = htab->elf.sgot;
 	      off = h->got.offset;
@@ -2663,7 +2889,7 @@ elf_x86_64_relocate_section (bfd *output
 	  switch (r_type)
 	    {
 	    default:
-bad_ifunc_reloc:
+	    bad_ifunc_reloc:
 	      if (h->root.root.string)
 		name = h->root.root.string;
 	      else
@@ -2675,7 +2901,7 @@ bad_ifunc_reloc:
 		   "symbol `%s' isn't supported"), input_bfd,
 		 howto->name, name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 
 	    case R_X86_64_32S:
 	      if (bfd_link_pic (info))
@@ -2687,7 +2913,7 @@ bad_ifunc_reloc:
 		goto do_relocation;
 	      /* FALLTHROUGH */
 	    case R_X86_64_64:
-do_ifunc_pointer:
+	    do_ifunc_pointer:
 	      if (rel->r_addend != 0)
 		{
 		  if (h->root.root.string)
@@ -2701,7 +2927,7 @@ do_ifunc_pointer:
 		       "symbol `%s' has non-zero addend: %" PRId64),
 		     input_bfd, howto->name, name, (int64_t) rel->r_addend);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 
 	      /* Generate dynamic relcoation only when there is a
@@ -2737,6 +2963,11 @@ do_ifunc_pointer:
 		      outrel.r_addend = (h->root.u.def.value
 					 + h->root.u.def.section->output_section->vma
 					 + h->root.u.def.section->output_offset);
+
+		      if (htab->params->report_relative_reloc)
+			_bfd_x86_elf_link_report_relative_reloc
+			  (info, input_section, h, sym,
+			   "R_X86_64_IRELATIVE", &outrel);
 		    }
 		  else
 		    {
@@ -2765,15 +2996,13 @@ do_ifunc_pointer:
 		}
 	      /* FALLTHROUGH */
 	    case R_X86_64_PC32:
-	    case R_X86_64_PC32_BND:
 	    case R_X86_64_PC64:
 	    case R_X86_64_PLT32:
-	    case R_X86_64_PLT32_BND:
 	      goto do_relocation;
 	    }
 	}
 
-skip_ifunc:
+    skip_ifunc:
       resolved_to_zero = (eh != NULL
 			  && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
 
@@ -2788,6 +3017,7 @@ skip_ifunc:
 	case R_X86_64_GOTPCREL:
 	case R_X86_64_GOTPCRELX:
 	case R_X86_64_REX_GOTPCRELX:
+	case R_X86_64_CODE_4_GOTPCRELX:
 	case R_X86_64_GOTPCREL64:
 	  /* Use global offset table entry as symbol value.  */
 	case R_X86_64_GOTPLT64:
@@ -2797,7 +3027,7 @@ skip_ifunc:
 	  if (htab->elf.sgot == NULL)
 	    abort ();
 
-	  relative_reloc = FALSE;
+	  relative_reloc = false;
 	  if (h != NULL)
 	    {
 	      off = h->got.offset;
@@ -2835,17 +3065,20 @@ skip_ifunc:
 			 as -1 | 1 still is -1.  */
 		      h->got.offset |= 1;
 
-		      if (GENERATE_RELATIVE_RELOC_P (info, h))
+		      /* NB: Don't generate relative relocation here if
+			 it has been generated by DT_RELR.  */
+		      if (!info->enable_dt_relr
+			  && GENERATE_RELATIVE_RELOC_P (info, h))
 			{
 			  /* If this symbol isn't dynamic in PIC,
 			     generate R_X86_64_RELATIVE here.  */
 			  eh->no_finish_dynamic_symbol = 1;
-			  relative_reloc = TRUE;
+			  relative_reloc = true;
 			}
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -2865,8 +3098,19 @@ skip_ifunc:
 			      base_got->contents + off);
 		  local_got_offsets[r_symndx] |= 1;
 
-		  if (bfd_link_pic (info))
-		    relative_reloc = TRUE;
+		  /* NB: GOTPCREL relocations against local absolute
+		     symbol store relocation value in the GOT slot
+		     without relative relocation.  Don't generate
+		     relative relocation here if it has been generated
+		     by DT_RELR.  */
+		  if (!info->enable_dt_relr
+		      && bfd_link_pic (info)
+		      && !(sym->st_shndx == SHN_ABS
+			   && (r_type == R_X86_64_GOTPCREL
+			       || r_type == R_X86_64_GOTPCRELX
+			       || r_type == R_X86_64_REX_GOTPCRELX
+			       || r_type == R_X86_64_CODE_4_GOTPCRELX)))
+		    relative_reloc = true;
 		}
 	    }
 
@@ -2886,6 +3130,12 @@ skip_ifunc:
 				 + off);
 	      outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE);
 	      outrel.r_addend = relocation;
+
+	      if (htab->params->report_relative_reloc)
+		_bfd_x86_elf_link_report_relative_reloc
+		  (info, input_section, h, sym, "R_X86_64_RELATIVE",
+		   &outrel);
+
 	      elf_append_rela (output_bfd, s, &outrel);
 	    }
 
@@ -2897,6 +3147,7 @@ skip_ifunc:
 	  if (r_type != R_X86_64_GOTPCREL
 	      && r_type != R_X86_64_GOTPCRELX
 	      && r_type != R_X86_64_REX_GOTPCRELX
+	      && r_type != R_X86_64_CODE_4_GOTPCRELX
 	      && r_type != R_X86_64_GOTPCREL64)
 	    relocation -= htab->elf.sgotplt->output_section->vma
 			  - htab->elf.sgotplt->output_offset;
@@ -2939,7 +3190,7 @@ skip_ifunc:
 		       " `%s' can not be used when making a shared object"),
 		     input_bfd, v, h->root.root.string);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	      else if (!bfd_link_executable (info)
 		       && !SYMBOL_REFERENCES_LOCAL_P (info, h)
@@ -2955,7 +3206,7 @@ skip_ifunc:
 		     h->type == STT_FUNC ? "function" : "data",
 		     h->root.root.string);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	    }
 
@@ -2973,7 +3224,7 @@ skip_ifunc:
 	  /* Use global offset table as symbol value.  */
 	  relocation = htab->elf.sgotplt->output_section->vma
 		       + htab->elf.sgotplt->output_offset;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_X86_64_PLTOFF64:
@@ -3005,7 +3256,7 @@ skip_ifunc:
 	      relocation = (resolved_plt->output_section->vma
 			    + resolved_plt->output_offset
 			    + plt_offset);
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	    }
 
 	  relocation -= htab->elf.sgotplt->output_section->vma
@@ -3013,7 +3264,6 @@ skip_ifunc:
 	  break;
 
 	case R_X86_64_PLT32:
-	case R_X86_64_PLT32_BND:
 	  /* Relocation is to the entry for this symbol in the
 	     procedure linkage table.  */
 
@@ -3032,7 +3282,7 @@ skip_ifunc:
 	      break;
 	    }
 
-use_plt:
+	use_plt:
 	  if (h->plt.offset != (bfd_vma) -1)
 	    {
 	      if (htab->plt_second != NULL)
@@ -3056,7 +3306,7 @@ use_plt:
 	  relocation = (resolved_plt->output_section->vma
 			+ resolved_plt->output_offset
 			+ plt_offset);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_X86_64_SIZE32:
@@ -3068,7 +3318,6 @@ use_plt:
 	case R_X86_64_PC8:
 	case R_X86_64_PC16:
 	case R_X86_64_PC32:
-	case R_X86_64_PC32_BND:
 	  /* Don't complain about -fPIC if the symbol is undefined when
 	     building executable unless it is unresolved weak symbol,
 	     references a dynamic definition in PIE or -z nocopyreloc
@@ -3078,8 +3327,7 @@ use_plt:
 	       || (h != NULL
 		   && !h->root.linker_def
 		   && !h->root.ldscript_def
-		   && eh->def_protected
-		   && elf_has_no_copy_on_protected (h->root.u.def.section->owner)));
+		   && eh->def_protected));
 
 	  if ((input_section->flags & SEC_ALLOC) != 0
 	      && (input_section->flags & SEC_READONLY) != 0
@@ -3095,9 +3343,11 @@ use_plt:
 		       || (no_copyreloc_p
 			   && h->def_dynamic
 			   && !(h->root.u.def.section->flags & SEC_CODE))))
+		  || (bfd_link_pie (info)
+		      && h->root.type == bfd_link_hash_undefweak)
 		  || bfd_link_dll (info)))
 	    {
-	      bfd_boolean fail = FALSE;
+	      bool fail = false;
 	      if (SYMBOL_REFERENCES_LOCAL_P (info, h))
 		{
 		  /* Symbol is referenced locally.  Make sure it is
@@ -3108,9 +3358,10 @@ use_plt:
 		{
 		  /* We can only use PC-relative relocations in PIE
 		     from non-code sections.  */
-		  if (h->type == STT_FUNC
-		      && (sec->flags & SEC_CODE) != 0)
-		    fail = TRUE;
+		  if (h->root.type == bfd_link_hash_undefweak
+		      || (h->type == STT_FUNC
+			  && (sec->flags & SEC_CODE) != 0))
+		    fail = true;
 		}
 	      else if (no_copyreloc_p || bfd_link_dll (info))
 		{
@@ -3147,7 +3398,7 @@ use_plt:
 	  /* FIXME: The ABI says the linker should make sure the value is
 	     the same when it's zeroextended to 64 bit.	 */
 
-direct:
+	direct:
 	  if ((input_section->flags & SEC_ALLOC) == 0)
 	    break;
 
@@ -3157,30 +3408,33 @@ direct:
 					|| eh->needs_copy
 					|| (h->root.type
 					    == bfd_link_hash_undefined))
-				    && (X86_PCREL_TYPE_P (r_type)
-					|| X86_SIZE_TYPE_P (r_type)));
+				    && (X86_PCREL_TYPE_P (true, r_type)
+					|| X86_SIZE_TYPE_P (true,
+							    r_type)));
 
-	  if (GENERATE_DYNAMIC_RELOCATION_P (info, eh, r_type,
+	  if (GENERATE_DYNAMIC_RELOCATION_P (true, info, eh, r_type, sec,
 					     need_copy_reloc_in_pie,
-					     resolved_to_zero, FALSE))
+					     resolved_to_zero, false))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate;
+	      bool skip, relocate;
+	      bool generate_dynamic_reloc = true;
 	      asection *sreloc;
+	      const char *relative_reloc_name = NULL;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
 		 time.	*/
-	      skip = FALSE;
-	      relocate = FALSE;
+	      skip = false;
+	      relocate = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
@@ -3188,7 +3442,7 @@ direct:
 	      if (skip)
 		memset (&outrel, 0, sizeof outrel);
 
-	      else if (COPY_INPUT_RELOC_P (info, h, r_type))
+	      else if (COPY_INPUT_RELOC_P (true, info, h, r_type))
 		{
 		  outrel.r_info = htab->r_info (h->dynindx, r_type);
 		  outrel.r_addend = rel->r_addend;
@@ -3202,17 +3456,27 @@ direct:
 		      || (r_type == R_X86_64_32
 			  && htab->params->no_reloc_overflow_check))
 		    {
-		      relocate = TRUE;
-		      outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE);
-		      outrel.r_addend = relocation + rel->r_addend;
+		      relocate = true;
+		      /* NB: Don't generate relative relocation here if
+			 it has been generated by DT_RELR.  */
+		      if (info->enable_dt_relr)
+			generate_dynamic_reloc = false;
+		      else
+			{
+			  outrel.r_info =
+			    htab->r_info (0, R_X86_64_RELATIVE);
+			  outrel.r_addend = relocation + rel->r_addend;
+			  relative_reloc_name = "R_X86_64_RELATIVE";
+			}
 		    }
 		  else if (r_type == R_X86_64_64
 			   && !ABI_64_P (output_bfd))
 		    {
-		      relocate = TRUE;
+		      relocate = true;
 		      outrel.r_info = htab->r_info (0,
 						    R_X86_64_RELATIVE64);
 		      outrel.r_addend = relocation + rel->r_addend;
+		      relative_reloc_name = "R_X86_64_RELATIVE64";
 		      /* Check addend overflow.  */
 		      if ((outrel.r_addend & 0x80000000)
 			  != (rel->r_addend & 0x80000000))
@@ -3233,7 +3497,7 @@ direct:
 			     howto->name, name, (uint64_t) rel->r_offset,
 			     input_section);
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		    }
 		  else
@@ -3245,7 +3509,7 @@ direct:
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -3271,15 +3535,24 @@ direct:
 		    }
 		}
 
-	      sreloc = elf_section_data (input_section)->sreloc;
-
-	      if (sreloc == NULL || sreloc->contents == NULL)
+	      if (generate_dynamic_reloc)
 		{
-		  r = bfd_reloc_notsupported;
-		  goto check_relocation_error;
-		}
+		  sreloc = elf_section_data (input_section)->sreloc;
 
-	      elf_append_rela (output_bfd, sreloc, &outrel);
+		  if (sreloc == NULL || sreloc->contents == NULL)
+		    {
+		      r = bfd_reloc_notsupported;
+		      goto check_relocation_error;
+		    }
+
+		  if (relative_reloc_name
+		      && htab->params->report_relative_reloc)
+		    _bfd_x86_elf_link_report_relative_reloc
+		      (info, input_section, h, sym,
+		       relative_reloc_name, &outrel);
+
+		  elf_append_rela (output_bfd, sreloc, &outrel);
+		}
 
 	      /* If this reloc is against an external symbol, we do
 		 not want to fiddle with the addend.  Otherwise, we
@@ -3293,8 +3566,10 @@ direct:
 
 	case R_X86_64_TLSGD:
 	case R_X86_64_GOTPC32_TLSDESC:
+	case R_X86_64_CODE_4_GOTPC32_TLSDESC:
 	case R_X86_64_TLSDESC_CALL:
 	case R_X86_64_GOTTPOFF:
+	case R_X86_64_CODE_4_GOTTPOFF:
 	  tls_type = GOT_UNKNOWN;
 	  if (h == NULL && local_got_offsets)
 	    tls_type = elf_x86_local_got_tls_type (input_bfd) [r_symndx];
@@ -3306,13 +3581,16 @@ direct:
 					   input_section, contents,
 					   symtab_hdr, sym_hashes,
 					   &r_type_tls, tls_type, rel,
-					   relend, h, r_symndx, TRUE))
-	    return FALSE;
+					   relend, h, r_symndx, true))
+	    return false;
 
 	  if (r_type_tls == R_X86_64_TPOFF32)
 	    {
 	      bfd_vma roff = rel->r_offset;
 
+	      if (roff >= input_section->size)
+		goto corrupt_input;
+
 	      BFD_ASSERT (! unresolved_reloc);
 
 	      if (r_type == R_X86_64_TLSGD)
@@ -3353,16 +3631,18 @@ direct:
 		  int largepic = 0;
 		  if (ABI_64_P (output_bfd))
 		    {
+		      if (roff + 5 >= input_section->size)
+			goto corrupt_input;
 		      if (contents[roff + 5] == 0xb8)
 			{
 			  if (roff < 3
 			      || (roff - 3 + 22) > input_section->size)
 			    {
-corrupt_input:
+			    corrupt_input:
 			      info->callbacks->einfo
 				(_("%F%P: corrupt input: %pB\n"),
 				 input_bfd);
-			      return FALSE;
+			      return false;
 			    }
 			  memcpy (contents + roff - 3,
 				  "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x8d\x80"
@@ -3388,6 +3668,10 @@ corrupt_input:
 			      "\x64\x8b\x04\x25\0\0\0\0\x48\x8d\x80\0\0\0",
 			      15);
 		    }
+
+		  if (roff + 8 + largepic >= input_section->size)
+		    goto corrupt_input;
+
 		  bfd_put_32 (output_bfd,
 			      elf_x86_64_tpoff (info, relocation),
 			      contents + roff + 8 + largepic);
@@ -3401,10 +3685,13 @@ corrupt_input:
 		{
 		  /* GDesc -> LE transition.
 		     It's originally something like:
-		     leaq x@tlsdesc(%rip), %rax
+		     leaq x@tlsdesc(%rip), %rax <--- LP64 mode.
+		     rex leal x@tlsdesc(%rip), %eax <--- X32 mode.
 
 		     Change it to:
-		     movl $x@tpoff, %rax.  */
+		     movq $x@tpoff, %rax <--- LP64 mode.
+		     rex movl $x@tpoff, %eax <--- X32 mode.
+		   */
 
 		  unsigned int val, type;
 
@@ -3412,7 +3699,39 @@ corrupt_input:
 		    goto corrupt_input;
 		  type = bfd_get_8 (input_bfd, contents + roff - 3);
 		  val = bfd_get_8 (input_bfd, contents + roff - 1);
-		  bfd_put_8 (output_bfd, 0x48 | ((type >> 2) & 1),
+		  bfd_put_8 (output_bfd,
+			     (type & 0x48) | ((type >> 2) & 1),
+			     contents + roff - 3);
+		  bfd_put_8 (output_bfd, 0xc7, contents + roff - 2);
+		  bfd_put_8 (output_bfd, 0xc0 | ((val >> 3) & 7),
+			     contents + roff - 1);
+		  bfd_put_32 (output_bfd,
+			      elf_x86_64_tpoff (info, relocation),
+			      contents + roff);
+		  continue;
+		}
+	      else if (r_type == R_X86_64_CODE_4_GOTPC32_TLSDESC)
+		{
+		  /* GDesc -> LE transition.
+		     It's originally something like:
+		     lea x@tlsdesc(%rip), %reg
+
+		     Change it to:
+		     mov $x@tpoff, %reg
+		     where reg is one of r16 to r31.  */
+
+		  unsigned int val, rex2;
+		  unsigned int rex2_mask = REX_R | REX_R << 4;
+
+		  if (roff < 4)
+		    goto corrupt_input;
+		  rex2 = bfd_get_8 (input_bfd, contents + roff - 3);
+		  val = bfd_get_8 (input_bfd, contents + roff - 1);
+		  /* Move the R bits to the B bits in REX2 payload
+		     byte.  */
+		  bfd_put_8 (output_bfd,
+			     ((rex2 & ~rex2_mask)
+			      | (rex2 & rex2_mask) >> 2),
 			     contents + roff - 3);
 		  bfd_put_8 (output_bfd, 0xc7, contents + roff - 2);
 		  bfd_put_8 (output_bfd, 0xc0 | ((val >> 3) & 7),
@@ -3426,11 +3745,36 @@ corrupt_input:
 		{
 		  /* GDesc -> LE transition.
 		     It's originally:
-		     call *(%rax)
+		     call *(%rax) <--- LP64 mode.
+		     call *(%eax) <--- X32 mode.
 		     Turn it into:
-		     xchg %ax,%ax.  */
-		  bfd_put_8 (output_bfd, 0x66, contents + roff);
-		  bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
+		     xchg %ax,%ax <-- LP64 mode.
+		     nopl (%rax)  <-- X32 mode.
+		   */
+		  unsigned int prefix = 0;
+		  if (!ABI_64_P (input_bfd))
+		    {
+		      /* Check for call *x@tlsdesc(%eax).  */
+		      if (contents[roff] == 0x67)
+			prefix = 1;
+		    }
+		  if (prefix)
+		    {
+		      if (roff + 2 >= input_section->size)
+			goto corrupt_input;
+
+		      bfd_put_8 (output_bfd, 0x0f, contents + roff);
+		      bfd_put_8 (output_bfd, 0x1f, contents + roff + 1);
+		      bfd_put_8 (output_bfd, 0x00, contents + roff + 2);
+		    }
+		  else
+		    {
+		      if (roff + 1 >= input_section->size)
+			goto corrupt_input;
+
+		      bfd_put_8 (output_bfd, 0x66, contents + roff);
+		      bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
+		    }
 		  continue;
 		}
 	      else if (r_type == R_X86_64_GOTTPOFF)
@@ -3536,8 +3880,48 @@ corrupt_input:
 			      contents + roff);
 		  continue;
 		}
+	      else if (r_type == R_X86_64_CODE_4_GOTTPOFF)
+		{
+		  /* IE->LE transition:
+		     Originally it can be one of:
+		     mov foo@gottpoff(%rip), %reg
+		     add foo@gottpoff(%rip), %reg
+		     We change it into:
+		     mov $foo@tpoff, %reg
+		     add $foo@tpoff, %reg
+		     where reg is one of r16 to r31.  */
+
+		  unsigned int rex2, type, reg;
+		  unsigned int rex2_mask = REX_R | REX_R << 4;
+
+		  if (roff < 4)
+		    goto corrupt_input;
+
+		  rex2 = bfd_get_8 (input_bfd, contents + roff - 3);
+		  type = bfd_get_8 (input_bfd, contents + roff - 2);
+		  reg = bfd_get_8 (input_bfd, contents + roff - 1);
+		  reg >>= 3;
+		  /* Move the R bits to the B bits in REX2 payload
+		     byte.  */
+		  if (type == 0x8b)
+		    type = 0xc7;
+		  else
+		    type = 0x81;
+		  bfd_put_8 (output_bfd,
+			     ((rex2 & ~rex2_mask)
+			      | (rex2 & rex2_mask) >> 2),
+			     contents + roff - 3);
+		  bfd_put_8 (output_bfd, type,
+			     contents + roff - 2);
+		  bfd_put_8 (output_bfd, 0xc0 | reg,
+			     contents + roff - 1);
+		  bfd_put_32 (output_bfd,
+			      elf_x86_64_tpoff (info, relocation),
+			      contents + roff);
+		  continue;
+		}
 	      else
-		BFD_ASSERT (FALSE);
+		BFD_ASSERT (false);
 	    }
 
 	  if (htab->elf.sgot == NULL)
@@ -3642,6 +4026,7 @@ corrupt_input:
 	  if (r_type_tls == r_type)
 	    {
 	      if (r_type == R_X86_64_GOTPC32_TLSDESC
+		  || r_type == R_X86_64_CODE_4_GOTPC32_TLSDESC
 		  || r_type == R_X86_64_TLSDESC_CALL)
 		relocation = htab->elf.sgotplt->output_section->vma
 		  + htab->elf.sgotplt->output_offset
@@ -3649,7 +4034,7 @@ corrupt_input:
 	      else
 		relocation = htab->elf.sgot->output_section->vma
 		  + htab->elf.sgot->output_offset + off;
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -3737,17 +4122,23 @@ corrupt_input:
 		  wrel++;
 		  continue;
 		}
-	      else if (r_type == R_X86_64_GOTPC32_TLSDESC)
+	      else if (r_type == R_X86_64_GOTPC32_TLSDESC
+		       || r_type == R_X86_64_CODE_4_GOTPC32_TLSDESC)
 		{
 		  /* GDesc -> IE transition.
 		     It's originally something like:
-		     leaq x@tlsdesc(%rip), %rax
+		     leaq x@tlsdesc(%rip), %rax <--- LP64 mode.
+		     rex leal x@tlsdesc(%rip), %eax <--- X32 mode.
 
 		     Change it to:
-		     movq x@gottpoff(%rip), %rax # before xchg %ax,%ax.  */
+		     # before xchg %ax,%ax in LP64 mode.
+		     movq x@gottpoff(%rip), %rax
+		     # before nopl (%rax) in X32 mode.
+		     rex movl x@gottpoff(%rip), %eax
+		  */
 
 		  /* Now modify the instruction as appropriate. To
-		     turn a leaq into a movq in the form we use it, it
+		     turn a lea into a mov in the form we use it, it
 		     suffices to change the second byte from 0x8d to
 		     0x8b.  */
 		  if (roff < 2)
@@ -3768,17 +4159,36 @@ corrupt_input:
 		{
 		  /* GDesc -> IE transition.
 		     It's originally:
-		     call *(%rax)
+		     call *(%rax) <--- LP64 mode.
+		     call *(%eax) <--- X32 mode.
 
 		     Change it to:
-		     xchg %ax, %ax.  */
+		     xchg %ax, %ax <-- LP64 mode.
+		     nopl (%rax)  <-- X32 mode.
+		   */
 
-		  bfd_put_8 (output_bfd, 0x66, contents + roff);
-		  bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
+		  unsigned int prefix = 0;
+		  if (!ABI_64_P (input_bfd))
+		    {
+		      /* Check for call *x@tlsdesc(%eax).  */
+		      if (contents[roff] == 0x67)
+			prefix = 1;
+		    }
+		  if (prefix)
+		    {
+		      bfd_put_8 (output_bfd, 0x0f, contents + roff);
+		      bfd_put_8 (output_bfd, 0x1f, contents + roff + 1);
+		      bfd_put_8 (output_bfd, 0x00, contents + roff + 2);
+		    }
+		  else
+		    {
+		      bfd_put_8 (output_bfd, 0x66, contents + roff);
+		      bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
+		    }
 		  continue;
 		}
 	      else
-		BFD_ASSERT (FALSE);
+		BFD_ASSERT (false);
 	    }
 	  break;
 
@@ -3787,8 +4197,8 @@ corrupt_input:
 					   input_section, contents,
 					   symtab_hdr, sym_hashes,
 					   &r_type, GOT_UNKNOWN, rel,
-					   relend, h, r_symndx, TRUE))
-	    return FALSE;
+					   relend, h, r_symndx, true))
+	    return false;
 
 	  if (r_type != R_X86_64_TLSLD)
 	    {
@@ -3908,7 +4318,7 @@ corrupt_input:
 	    }
 	  relocation = htab->elf.sgot->output_section->vma
 		       + htab->elf.sgot->output_offset + off;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_X86_64_DTPOFF32:
@@ -3947,9 +4357,7 @@ corrupt_input:
 	    {
 	    case R_X86_64_32S:
 	      sec = h->root.u.def.section;
-	      if ((info->nocopyreloc
-		   || (eh->def_protected
-		       && elf_has_no_copy_on_protected (h->root.u.def.section->owner)))
+	      if ((info->nocopyreloc || eh->def_protected)
 		  && !(h->root.u.def.section->flags & SEC_CODE))
 		return elf_x86_64_need_pic (info, input_bfd, input_section,
 					    h, NULL, NULL, howto);
@@ -3965,16 +4373,16 @@ corrupt_input:
 		 (uint64_t) rel->r_offset,
 		 howto->name,
 		 h->root.root.string);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
-do_relocation:
+    do_relocation:
       r = _bfd_final_link_relocate (howto, input_bfd, input_section,
 				    contents, rel->r_offset,
 				    relocation, rel->r_addend);
 
-check_relocation_error:
+    check_relocation_error:
       if (r != bfd_reloc_ok)
 	{
 	  const char *name;
@@ -3987,7 +4395,7 @@ check_relocation_error:
 						      symtab_hdr->sh_link,
 						      sym->st_name);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      if (*name == '\0')
 		name = bfd_section_name (sec);
 	    }
@@ -3997,8 +4405,13 @@ check_relocation_error:
 	      if (converted_reloc)
 		{
 		  info->callbacks->einfo
-		    (_("%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"));
-		  return FALSE;
+		    ("%X%H:", input_bfd, input_section, rel->r_offset);
+		  info->callbacks->einfo
+		    (_(" failed to convert GOTPCREL relocation against "
+		       "'%s'; relink with --no-relax\n"),
+		     name);
+		  status = false;
+		  continue;
 		}
 	      (*info->callbacks->reloc_overflow)
 		(info, (h ? &h->root : NULL), name, howto->name,
@@ -4011,7 +4424,7 @@ check_relocation_error:
 		(_("%pB(%pA+%#" PRIx64 "): reloc against `%s': error %d"),
 		 input_bfd, input_section,
 		 (uint64_t) rel->r_offset, name, (int) r);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -4039,26 +4452,26 @@ check_relocation_error:
       input_section->reloc_count -= deleted;
     }
 
-  return TRUE;
+  return status;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
 				  struct bfd_link_info *info,
 				  struct elf_link_hash_entry *h,
 				  Elf_Internal_Sym *sym)
 {
   struct elf_x86_link_hash_table *htab;
-  bfd_boolean use_plt_second;
+  bool use_plt_second;
   struct elf_x86_link_hash_entry *eh;
-  bfd_boolean local_undefweak;
+  bool local_undefweak;
 
   htab = elf_x86_hash_table (info, X86_64_ELF_DATA);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Use the second PLT section only if there is .plt section.  */
   use_plt_second = htab->elf.splt != NULL && htab->plt_second != NULL;
@@ -4191,13 +4604,23 @@ elf_x86_64_finish_dynamic_symbol (bfd *o
 	      rela.r_addend = (h->root.u.def.value
 			       + h->root.u.def.section->output_section->vma
 			       + h->root.u.def.section->output_offset);
+
+	      if (htab->params->report_relative_reloc)
+		_bfd_x86_elf_link_report_relative_reloc
+		  (info, relplt, h, sym, "R_X86_64_IRELATIVE", &rela);
+
 	      /* R_X86_64_IRELATIVE comes last.  */
 	      plt_index = htab->next_irelative_index--;
 	    }
 	  else
 	    {
 	      rela.r_info = htab->r_info (h->dynindx, R_X86_64_JUMP_SLOT);
-	      rela.r_addend = 0;
+	      if (htab->params->mark_plt)
+		rela.r_addend = (resolved_plt->output_section->vma
+				 + plt_offset
+				 + htab->plt.plt_indirect_branch_offset);
+	      else
+		rela.r_addend = 0;
 	      plt_index = htab->next_jump_slot_index++;
 	    }
 
@@ -4234,7 +4657,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *o
     {
       bfd_vma got_offset, plt_offset;
       asection *plt, *got;
-      bfd_boolean got_after_plt;
+      bool got_after_plt;
       int32_t got_pcrel_offset;
 
       /* Set the entry in the GOT procedure linkage table.  */
@@ -4308,6 +4731,8 @@ elf_x86_64_finish_dynamic_symbol (bfd *o
     {
       Elf_Internal_Rela rela;
       asection *relgot = htab->elf.srelgot;
+      const char *relative_reloc_name = NULL;
+      bool generate_dynamic_reloc = true;
 
       /* This symbol has an entry in the global offset table.  Set it
 	 up.  */
@@ -4346,6 +4771,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *o
 		  rela.r_addend = (h->root.u.def.value
 				   + h->root.u.def.section->output_section->vma
 				   + h->root.u.def.section->output_offset);
+		  relative_reloc_name = "R_X86_64_IRELATIVE";
 		}
 	      else
 		goto do_glob_dat;
@@ -4380,31 +4806,45 @@ elf_x86_64_finish_dynamic_symbol (bfd *o
 				       + plt->output_offset
 				       + plt_offset),
 			  htab->elf.sgot->contents + h->got.offset);
-	      return TRUE;
+	      return true;
 	    }
 	}
       else if (bfd_link_pic (info)
 	       && SYMBOL_REFERENCES_LOCAL_P (info, h))
 	{
 	  if (!SYMBOL_DEFINED_NON_SHARED_P (h))
-	    return FALSE;
+	    return false;
 	  BFD_ASSERT((h->got.offset & 1) != 0);
-	  rela.r_info = htab->r_info (0, R_X86_64_RELATIVE);
-	  rela.r_addend = (h->root.u.def.value
-			   + h->root.u.def.section->output_section->vma
-			   + h->root.u.def.section->output_offset);
+	  if (info->enable_dt_relr)
+	    generate_dynamic_reloc = false;
+	  else
+	    {
+	      rela.r_info = htab->r_info (0, R_X86_64_RELATIVE);
+	      rela.r_addend = (h->root.u.def.value
+			       + h->root.u.def.section->output_section->vma
+			       + h->root.u.def.section->output_offset);
+	      relative_reloc_name = "R_X86_64_RELATIVE";
+	    }
 	}
       else
 	{
 	  BFD_ASSERT((h->got.offset & 1) == 0);
-do_glob_dat:
+	do_glob_dat:
 	  bfd_put_64 (output_bfd, (bfd_vma) 0,
 		      htab->elf.sgot->contents + h->got.offset);
 	  rela.r_info = htab->r_info (h->dynindx, R_X86_64_GLOB_DAT);
 	  rela.r_addend = 0;
 	}
 
-      elf_append_rela (output_bfd, relgot, &rela);
+      if (generate_dynamic_reloc)
+	{
+	  if (relative_reloc_name != NULL
+	      && htab->params->report_relative_reloc)
+	    _bfd_x86_elf_link_report_relative_reloc
+	      (info, relgot, h, sym, relative_reloc_name, &rela);
+
+	  elf_append_rela (output_bfd, relgot, &rela);
+	}
     }
 
   if (h->needs_copy)
@@ -4427,13 +4867,13 @@ do_glob_dat:
       elf_append_rela (output_bfd, s, &rela);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up local dynamic symbol handling.  We set the contents of
    various dynamic sections here.  */
 
-static bfd_boolean
+static int
 elf_x86_64_finish_local_dynamic_symbol (void **slot, void *inf)
 {
   struct elf_link_hash_entry *h
@@ -4449,7 +4889,7 @@ elf_x86_64_finish_local_dynamic_symbol (
    here since undefined weak symbol may not be dynamic and may not be
    called for elf_x86_64_finish_dynamic_symbol.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_pie_finish_undefweak_symbol (struct bfd_hash_entry *bh,
 					void *inf)
 {
@@ -4458,7 +4898,7 @@ elf_x86_64_pie_finish_undefweak_symbol (
 
   if (h->root.type != bfd_link_hash_undefweak
       || h->dynindx != -1)
-    return TRUE;
+    return true;
 
   return elf_x86_64_finish_dynamic_symbol (info->output_bfd,
 					   info, h, NULL);
@@ -4515,7 +4955,7 @@ elf_x86_64_reloc_type_class (const struc
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
 				    struct bfd_link_info *info)
 {
@@ -4523,13 +4963,21 @@ elf_x86_64_finish_dynamic_sections (bfd
 
   htab = _bfd_x86_elf_finish_dynamic_sections (output_bfd, info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   if (! htab->elf.dynamic_sections_created)
-    return TRUE;
+    return true;
 
   if (htab->elf.splt && htab->elf.splt->size > 0)
     {
+      if (bfd_is_abs_section (htab->elf.splt->output_section))
+	{
+	  info->callbacks->einfo
+	    (_("%F%P: discarded output section: `%pA'\n"),
+	     htab->elf.splt);
+	  return false;
+	}
+
       elf_section_data (htab->elf.splt->output_section)
 	->this_hdr.sh_entsize = htab->plt.plt_entry_size;
 
@@ -4565,12 +5013,12 @@ elf_x86_64_finish_dynamic_sections (bfd
 		       + htab->lazy_plt->plt0_got2_offset));
 	}
 
-      if (htab->tlsdesc_plt)
+      if (htab->elf.tlsdesc_plt)
 	{
 	  bfd_put_64 (output_bfd, (bfd_vma) 0,
-		      htab->elf.sgot->contents + htab->tlsdesc_got);
+		      htab->elf.sgot->contents + htab->elf.tlsdesc_got);
 
-	  memcpy (htab->elf.splt->contents + htab->tlsdesc_plt,
+	  memcpy (htab->elf.splt->contents + htab->elf.tlsdesc_plt,
 		  htab->lazy_plt->plt_tlsdesc_entry,
 		  htab->lazy_plt->plt_tlsdesc_entry_size);
 
@@ -4583,10 +5031,10 @@ elf_x86_64_finish_dynamic_sections (bfd
 		       + 8
 		       - htab->elf.splt->output_section->vma
 		       - htab->elf.splt->output_offset
-		       - htab->tlsdesc_plt
+		       - htab->elf.tlsdesc_plt
 		       - htab->lazy_plt->plt_tlsdesc_got1_insn_end),
 		      (htab->elf.splt->contents
-		       + htab->tlsdesc_plt
+		       + htab->elf.tlsdesc_plt
 		       + htab->lazy_plt->plt_tlsdesc_got1_offset));
 	  /* Add offset for indirect branch via GOT+TDG, where TDG
 	     stands for htab->tlsdesc_got, subtracting the offset
@@ -4594,13 +5042,13 @@ elf_x86_64_finish_dynamic_sections (bfd
 	  bfd_put_32 (output_bfd,
 		      (htab->elf.sgot->output_section->vma
 		       + htab->elf.sgot->output_offset
-		       + htab->tlsdesc_got
+		       + htab->elf.tlsdesc_got
 		       - htab->elf.splt->output_section->vma
 		       - htab->elf.splt->output_offset
-		       - htab->tlsdesc_plt
+		       - htab->elf.tlsdesc_plt
 		       - htab->lazy_plt->plt_tlsdesc_got2_insn_end),
 		      (htab->elf.splt->contents
-		       + htab->tlsdesc_plt
+		       + htab->elf.tlsdesc_plt
 		       + htab->lazy_plt->plt_tlsdesc_got2_offset));
 	}
     }
@@ -4611,7 +5059,7 @@ elf_x86_64_finish_dynamic_sections (bfd
 		       elf_x86_64_pie_finish_undefweak_symbol,
 		       info);
 
-  return TRUE;
+  return true;
 }
 
 /* Fill PLT/GOT entries and allocate dynamic relocations for local
@@ -4619,7 +5067,7 @@ elf_x86_64_finish_dynamic_sections (bfd
    It has to be done before elf_link_sort_relocs is called so that
    dynamic relocations are properly sorted.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_output_arch_local_syms
   (bfd *output_bfd ATTRIBUTE_UNUSED,
    struct bfd_link_info *info,
@@ -4632,19 +5080,16 @@ elf_x86_64_output_arch_local_syms
   struct elf_x86_link_hash_table *htab
     = elf_x86_hash_table (info, X86_64_ELF_DATA);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols.  */
   htab_traverse (htab->loc_hash_table,
 		 elf_x86_64_finish_local_dynamic_symbol,
 		 info);
 
-  return TRUE;
+  return true;
 }
 
-/* Forward declaration.  */
-static const struct elf_x86_lazy_plt_layout elf_x86_64_nacl_plt;
-
 /* Similar to _bfd_elf_get_synthetic_symtab.  Support PLTs with all
    dynamic relocations.   */
 
@@ -4666,6 +5111,8 @@ elf_x86_64_get_synthetic_symtab (bfd *ab
   const struct elf_x86_non_lazy_plt_layout *non_lazy_bnd_plt;
   const struct elf_x86_lazy_plt_layout *lazy_ibt_plt;
   const struct elf_x86_non_lazy_plt_layout *non_lazy_ibt_plt;
+  const struct elf_x86_lazy_plt_layout *x32_lazy_ibt_plt;
+  const struct elf_x86_non_lazy_plt_layout *x32_non_lazy_ibt_plt;
   asection *plt;
   enum elf_x86_plt_type plt_type;
   struct elf_x86_plt plts[] =
@@ -4689,50 +5136,37 @@ elf_x86_64_get_synthetic_symtab (bfd *ab
   if (relsize <= 0)
     return -1;
 
-  if (get_elf_x86_backend_data (abfd)->target_os != is_nacl)
-    {
-      lazy_plt = &elf_x86_64_lazy_plt;
-      non_lazy_plt = &elf_x86_64_non_lazy_plt;
-      lazy_bnd_plt = &elf_x86_64_lazy_bnd_plt;
-      non_lazy_bnd_plt = &elf_x86_64_non_lazy_bnd_plt;
-      if (ABI_64_P (abfd))
-	{
-	  lazy_ibt_plt = &elf_x86_64_lazy_ibt_plt;
-	  non_lazy_ibt_plt = &elf_x86_64_non_lazy_ibt_plt;
-	}
-      else
-	{
-	  lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
-	  non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
-	}
+  lazy_plt = &elf_x86_64_lazy_plt;
+  non_lazy_plt = &elf_x86_64_non_lazy_plt;
+  lazy_bnd_plt = &elf_x86_64_lazy_bnd_plt;
+  non_lazy_bnd_plt = &elf_x86_64_non_lazy_bnd_plt;
+  if (ABI_64_P (abfd))
+    {
+      lazy_ibt_plt = &elf_x86_64_lazy_ibt_plt;
+      non_lazy_ibt_plt = &elf_x86_64_non_lazy_ibt_plt;
+      x32_lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
+      x32_non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
     }
   else
     {
-      lazy_plt = &elf_x86_64_nacl_plt;
-      non_lazy_plt = NULL;
-      lazy_bnd_plt = NULL;
-      non_lazy_bnd_plt = NULL;
-      lazy_ibt_plt = NULL;
-      non_lazy_ibt_plt = NULL;
+      lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
+      non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
+      x32_lazy_ibt_plt = NULL;
+      x32_non_lazy_ibt_plt = NULL;
     }
 
   count = 0;
   for (j = 0; plts[j].name != NULL; j++)
     {
       plt = bfd_get_section_by_name (abfd, plts[j].name);
-      if (plt == NULL || plt->size == 0)
+      if (plt == NULL
+	  || plt->size == 0
+	  || (plt->flags & SEC_HAS_CONTENTS) == 0)
 	continue;
 
       /* Get the PLT section contents.  */
-      plt_contents = (bfd_byte *) bfd_malloc (plt->size);
-      if (plt_contents == NULL)
+      if (!bfd_malloc_and_get_section (abfd, plt, &plt_contents))
 	break;
-      if (!bfd_get_section_contents (abfd, (asection *) plt,
-				     plt_contents, 0, plt->size))
-	{
-	  free (plt_contents);
-	  break;
-	}
 
       /* Check what kind of PLT it is.  */
       plt_type = plt_unknown;
@@ -4746,7 +5180,21 @@ elf_x86_64_get_synthetic_symtab (bfd *ab
 		       lazy_plt->plt0_got1_offset) == 0)
 	      && (memcmp (plt_contents + 6, lazy_plt->plt0_entry + 6,
 			  2) == 0))
-	    plt_type = plt_lazy;
+	    {
+	      if (x32_lazy_ibt_plt != NULL
+		  && (memcmp (plt_contents
+			      + x32_lazy_ibt_plt->plt_entry_size,
+			      x32_lazy_ibt_plt->plt_entry,
+			      x32_lazy_ibt_plt->plt_got_offset) == 0))
+		{
+		  /* The fist entry in the x32 lazy IBT PLT is the same
+		     as the lazy PLT.  */
+		  plt_type = plt_lazy | plt_second;
+		  lazy_plt = x32_lazy_ibt_plt;
+		}
+	      else
+		plt_type = plt_lazy;
+	    }
 	  else if (lazy_bnd_plt != NULL
 		   && (memcmp (plt_contents, lazy_bnd_plt->plt0_entry,
 			       lazy_bnd_plt->plt0_got1_offset) == 0)
@@ -4796,6 +5244,16 @@ elf_x86_64_get_synthetic_symtab (bfd *ab
 	      plt_type = plt_second;
 	      non_lazy_plt = non_lazy_ibt_plt;
 	    }
+	  else if (x32_non_lazy_ibt_plt != NULL
+		   && plt->size >= x32_non_lazy_ibt_plt->plt_entry_size
+		   && (memcmp (plt_contents,
+			       x32_non_lazy_ibt_plt->plt_entry,
+			       x32_non_lazy_ibt_plt->plt_got_offset) == 0))
+	    {
+	      /* Match x32 IBT PLT.  */
+	      plt_type = plt_second;
+	      non_lazy_plt = x32_non_lazy_ibt_plt;
+	    }
 	}
 
       if (plt_type == plt_unknown)
@@ -4844,24 +5302,24 @@ elf_x86_64_get_synthetic_symtab (bfd *ab
 /* Handle an x86-64 specific section when reading an object file.  This
    is called when elfcode.h finds a section with an unknown type.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr,
 			      const char *name, int shindex)
 {
   if (hdr->sh_type != SHT_X86_64_UNWIND)
-    return FALSE;
+    return false;
 
   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Hook called by the linker routine which adds symbols from an object
    file.  We use it to put SHN_X86_64_LCOMMON items in .lbss, instead
    of .bss.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_add_symbol_hook (bfd *abfd,
 			    struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			    Elf_Internal_Sym *sym,
@@ -4884,31 +5342,31 @@ elf_x86_64_add_symbol_hook (bfd *abfd,
 						| SEC_IS_COMMON
 						| SEC_LINKER_CREATED));
 	  if (lcomm == NULL)
-	    return FALSE;
+	    return false;
 	  elf_section_flags (lcomm) |= SHF_X86_64_LARGE;
 	}
       *secp = lcomm;
       *valp = sym->st_size;
-      return TRUE;
+      return true;
     }
 
-  return TRUE;
+  return true;
 }
 
 
 /* Given a BFD section, try to locate the corresponding ELF section
    index.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
 					 asection *sec, int *index_return)
 {
   if (sec == &_bfd_elf_large_com_section)
     {
       *index_return = SHN_X86_64_LCOMMON;
-      return TRUE;
+      return true;
     }
-  return FALSE;
+  return false;
 }
 
 /* Process a symbol.  */
@@ -4930,7 +5388,7 @@ elf_x86_64_symbol_processing (bfd *abfd
     }
 }
 
-static bfd_boolean
+static bool
 elf_x86_64_common_definition (Elf_Internal_Sym *sym)
 {
   return (sym->st_shndx == SHN_COMMON
@@ -4955,12 +5413,12 @@ elf_x86_64_common_section (asection *sec
     return &_bfd_elf_large_com_section;
 }
 
-static bfd_boolean
+static bool
 elf_x86_64_merge_symbol (struct elf_link_hash_entry *h,
 			 const Elf_Internal_Sym *sym,
 			 asection **psec,
-			 bfd_boolean newdef,
-			 bfd_boolean olddef,
+			 bool newdef,
+			 bool olddef,
 			 bfd *oldbfd,
 			 const asection *oldsec)
 {
@@ -4985,7 +5443,40 @@ elf_x86_64_merge_symbol (struct elf_link
 	*psec = bfd_com_section_ptr;
     }
 
-  return TRUE;
+  return true;
+}
+
+static bool
+elf_x86_64_section_flags (const Elf_Internal_Shdr *hdr)
+{
+  if ((hdr->sh_flags & SHF_X86_64_LARGE) != 0)
+    hdr->bfd_section->flags |= SEC_ELF_LARGE;
+
+  return true;
+}
+
+static bool
+elf_x86_64_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
+			  Elf_Internal_Shdr *hdr, asection *sec)
+{
+  if (sec->flags & SEC_ELF_LARGE)
+    hdr->sh_flags |= SHF_X86_64_LARGE;
+
+  return true;
+}
+
+static bool
+elf_x86_64_copy_private_section_data (bfd *ibfd, asection *isec,
+				      bfd *obfd, asection *osec)
+{
+  if (!_bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec))
+    return false;
+
+  /* objcopy --set-section-flags without "large" drops SHF_X86_64_LARGE.  */
+  if (ibfd != obfd)
+    elf_section_flags (osec) &= ~SHF_X86_64_LARGE;
+
+  return true;
 }
 
 static int
@@ -5012,7 +5503,7 @@ elf_x86_64_additional_program_headers (b
 
 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT. */
 
-static bfd_boolean
+static bool
 elf_x86_64_relocs_compatible (const bfd_target *input,
 			      const bfd_target *output)
 {
@@ -5028,6 +5519,8 @@ static bfd *
 elf_x86_64_link_setup_gnu_properties (struct bfd_link_info *info)
 {
   struct elf_x86_init_table init_table;
+  const struct elf_backend_data *bed;
+  struct elf_x86_link_hash_table *htab;
 
   if ((int) R_X86_64_standard >= (int) R_X86_64_converted_reloc_bit
       || (int) R_X86_64_max <= (int) R_X86_64_converted_reloc_bit
@@ -5040,42 +5533,29 @@ elf_x86_64_link_setup_gnu_properties (st
   /* This is unused for x86-64.  */
   init_table.plt0_pad_byte = 0x90;
 
-  if (get_elf_x86_backend_data (info->output_bfd)->target_os != is_nacl)
-    {
-      const struct elf_backend_data *bed
-	= get_elf_backend_data (info->output_bfd);
-      struct elf_x86_link_hash_table *htab
-	= elf_x86_hash_table (info, bed->target_id);
-      if (!htab)
-	abort ();
-      if (htab->params->bndplt)
-	{
-	  init_table.lazy_plt = &elf_x86_64_lazy_bnd_plt;
-	  init_table.non_lazy_plt = &elf_x86_64_non_lazy_bnd_plt;
-	}
-      else
-	{
-	  init_table.lazy_plt = &elf_x86_64_lazy_plt;
-	  init_table.non_lazy_plt = &elf_x86_64_non_lazy_plt;
-	}
+  bed = get_elf_backend_data (info->output_bfd);
+  htab = elf_x86_hash_table (info, bed->target_id);
+  if (!htab)
+    abort ();
 
-      if (ABI_64_P (info->output_bfd))
-	{
-	  init_table.lazy_ibt_plt = &elf_x86_64_lazy_ibt_plt;
-	  init_table.non_lazy_ibt_plt = &elf_x86_64_non_lazy_ibt_plt;
-	}
-      else
-	{
-	  init_table.lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
-	  init_table.non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
-	}
+  init_table.lazy_plt = &elf_x86_64_lazy_plt;
+  init_table.non_lazy_plt = &elf_x86_64_non_lazy_plt;
+
+  init_table.lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
+  init_table.non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
+
+  if (ABI_64_P (info->output_bfd))
+    {
+      init_table.sframe_lazy_plt = &elf_x86_64_sframe_plt;
+      init_table.sframe_non_lazy_plt = &elf_x86_64_sframe_non_lazy_plt;
+      init_table.sframe_lazy_ibt_plt = &elf_x86_64_sframe_plt;
+      init_table.sframe_non_lazy_ibt_plt = &elf_x86_64_sframe_non_lazy_plt;
     }
   else
     {
-      init_table.lazy_plt = &elf_x86_64_nacl_plt;
-      init_table.non_lazy_plt = NULL;
-      init_table.lazy_ibt_plt = NULL;
-      init_table.non_lazy_ibt_plt = NULL;
+      /* SFrame is not supported for non AMD64.  */
+      init_table.sframe_lazy_plt = NULL;
+      init_table.sframe_non_lazy_plt = NULL;
     }
 
   if (ABI_64_P (info->output_bfd))
@@ -5092,6 +5572,31 @@ elf_x86_64_link_setup_gnu_properties (st
   return _bfd_x86_elf_link_setup_gnu_properties (info, &init_table);
 }
 
+static void
+elf_x86_64_add_glibc_version_dependency
+  (struct elf_find_verdep_info *rinfo)
+{
+  unsigned int i = 0;
+  const char *version[3] = { NULL, NULL, NULL };
+  struct elf_x86_link_hash_table *htab;
+
+  if (rinfo->info->enable_dt_relr)
+    {
+      version[i] = "GLIBC_ABI_DT_RELR";
+      i++;
+    }
+
+  htab = elf_x86_hash_table (rinfo->info, X86_64_ELF_DATA);
+  if (htab != NULL && htab->params->mark_plt)
+    {
+      version[i] = "GLIBC_2.36";
+      i++;
+    }
+
+  if (i != 0)
+    _bfd_elf_link_add_glibc_version_dependency (rinfo, version);
+}
+
 static const struct bfd_elf_special_section
 elf_x86_64_special_sections[]=
 {
@@ -5109,12 +5614,7 @@ elf_x86_64_special_sections[]=
 #define ELF_ARCH			    bfd_arch_i386
 #define ELF_TARGET_ID			    X86_64_ELF_DATA
 #define ELF_MACHINE_CODE		    EM_X86_64
-#if DEFAULT_LD_Z_SEPARATE_CODE
-# define ELF_MAXPAGESIZE		    0x1000
-#else
-# define ELF_MAXPAGESIZE		    0x200000
-#endif
-#define ELF_MINPAGESIZE			    0x1000
+#define ELF_MAXPAGESIZE			    0x1000
 #define ELF_COMMONPAGESIZE		    0x1000
 
 #define elf_backend_can_gc_sections	    1
@@ -5125,19 +5625,20 @@ elf_x86_64_special_sections[]=
 #define elf_backend_got_header_size	    (GOT_ENTRY_SIZE*3)
 #define elf_backend_rela_normal		    1
 #define elf_backend_plt_alignment	    4
-#define elf_backend_extern_protected_data   1
 #define elf_backend_caches_rawsize	    1
 #define elf_backend_dtrel_excludes_plt	    1
 #define elf_backend_want_dynrelro	    1
 
 #define elf_info_to_howto		    elf_x86_64_info_to_howto
 
+#define bfd_elf64_bfd_copy_private_section_data \
+  elf_x86_64_copy_private_section_data
 #define bfd_elf64_bfd_reloc_type_lookup	    elf_x86_64_reloc_type_lookup
 #define bfd_elf64_bfd_reloc_name_lookup \
   elf_x86_64_reloc_name_lookup
 
 #define elf_backend_relocs_compatible	    elf_x86_64_relocs_compatible
-#define elf_backend_check_relocs	    elf_x86_64_check_relocs
+#define elf_backend_always_size_sections    elf_x86_64_always_size_sections
 #define elf_backend_create_dynamic_sections _bfd_elf_create_dynamic_sections
 #define elf_backend_finish_dynamic_sections elf_x86_64_finish_dynamic_sections
 #define elf_backend_finish_dynamic_symbol   elf_x86_64_finish_dynamic_symbol
@@ -5172,12 +5673,16 @@ elf_x86_64_special_sections[]=
   elf_x86_64_merge_symbol
 #define elf_backend_special_sections \
   elf_x86_64_special_sections
+#define elf_backend_section_flags	    elf_x86_64_section_flags
+#define elf_backend_fake_sections	    elf_x86_64_fake_sections
 #define elf_backend_additional_program_headers \
   elf_x86_64_additional_program_headers
 #define elf_backend_setup_gnu_properties \
   elf_x86_64_link_setup_gnu_properties
 #define elf_backend_hide_symbol \
   _bfd_x86_elf_hide_symbol
+#define elf_backend_add_glibc_version_dependency \
+  elf_x86_64_add_glibc_version_dependency
 
 #undef	elf64_bed
 #define elf64_bed elf64_x86_64_bed
@@ -5221,13 +5726,8 @@ elf_x86_64_special_sections[]=
 #undef  TARGET_LITTLE_NAME
 #define TARGET_LITTLE_NAME		    "elf64-x86-64-sol2"
 
-static const struct elf_x86_backend_data elf_x86_64_solaris_arch_bed =
-  {
-    is_solaris				    /* os */
-  };
-
-#undef	elf_backend_arch_data
-#define	elf_backend_arch_data		    &elf_x86_64_solaris_arch_bed
+#undef ELF_TARGET_OS
+#define	ELF_TARGET_OS			    is_solaris
 
 /* Restore default: we cannot use ELFOSABI_SOLARIS, otherwise ELFOSABI_NONE
    objects won't be recognized.  */
@@ -5251,7 +5751,7 @@ static const struct elf_x86_backend_data
 #undef  elf_backend_strtab_flags
 #define elf_backend_strtab_flags	SHF_STRINGS
 
-static bfd_boolean
+static bool
 elf64_x86_64_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
 						  bfd *obfd ATTRIBUTE_UNUSED,
 						  const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED,
@@ -5259,7 +5759,7 @@ elf64_x86_64_copy_solaris_special_sectio
 {
   /* PR 19938: FIXME: Need to add code for setting the sh_info
      and sh_link fields of Solaris specific section types.  */
-  return FALSE;
+  return false;
 }
 
 #undef  elf_backend_copy_special_section_fields
@@ -5267,30 +5767,6 @@ elf64_x86_64_copy_solaris_special_sectio
 
 #include "elf64-target.h"
 
-/* Native Client support.  */
-
-static bfd_boolean
-elf64_x86_64_nacl_elf_object_p (bfd *abfd)
-{
-  /* Set the right machine number for a NaCl x86-64 ELF64 file.  */
-  bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x86_64_nacl);
-  return TRUE;
-}
-
-#undef	TARGET_LITTLE_SYM
-#define	TARGET_LITTLE_SYM		x86_64_elf64_nacl_vec
-#undef	TARGET_LITTLE_NAME
-#define	TARGET_LITTLE_NAME		"elf64-x86-64-nacl"
-#undef	elf64_bed
-#define	elf64_bed			elf64_x86_64_nacl_bed
-
-#undef	ELF_MAXPAGESIZE
-#undef	ELF_MINPAGESIZE
-#undef	ELF_COMMONPAGESIZE
-#define ELF_MAXPAGESIZE			0x10000
-#define ELF_MINPAGESIZE			0x10000
-#define ELF_COMMONPAGESIZE		0x10000
-
 /* Restore defaults.  */
 #undef	ELF_OSABI
 #undef	elf_backend_static_tls_alignment
@@ -5299,304 +5775,6 @@ elf64_x86_64_nacl_elf_object_p (bfd *abf
 #undef  elf_backend_strtab_flags
 #undef  elf_backend_copy_special_section_fields
 
-/* NaCl uses substantially different PLT entries for the same effects.  */
-
-#undef	elf_backend_plt_alignment
-#define elf_backend_plt_alignment	5
-#define NACL_PLT_ENTRY_SIZE		64
-#define	NACLMASK			0xe0 /* 32-byte alignment mask.  */
-
-static const bfd_byte elf_x86_64_nacl_plt0_entry[NACL_PLT_ENTRY_SIZE] =
-  {
-    0xff, 0x35, 8, 0, 0, 0,		/* pushq GOT+8(%rip)		*/
-    0x4c, 0x8b, 0x1d, 16, 0, 0, 0,	/* mov GOT+16(%rip), %r11	*/
-    0x41, 0x83, 0xe3, NACLMASK,		/* and $-32, %r11d		*/
-    0x4d, 0x01, 0xfb,			/* add %r15, %r11		*/
-    0x41, 0xff, 0xe3,			/* jmpq *%r11			*/
-
-    /* 9-byte nop sequence to pad out to the next 32-byte boundary.  */
-    0x66, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw 0x0(%rax,%rax,1)	*/
-
-    /* 32 bytes of nop to pad out to the standard size.  */
-    0x66, 0x66, 0x66, 0x66, 0x66, 0x66,    /* excess data16 prefixes	*/
-    0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1)	*/
-    0x66, 0x66, 0x66, 0x66, 0x66, 0x66,    /* excess data16 prefixes	*/
-    0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1)	*/
-    0x66,				   /* excess data16 prefix	*/
-    0x90				   /* nop */
-  };
-
-static const bfd_byte elf_x86_64_nacl_plt_entry[NACL_PLT_ENTRY_SIZE] =
-  {
-    0x4c, 0x8b, 0x1d, 0, 0, 0, 0,	/* mov name@GOTPCREL(%rip),%r11	*/
-    0x41, 0x83, 0xe3, NACLMASK,		/* and $-32, %r11d		*/
-    0x4d, 0x01, 0xfb,			/* add %r15, %r11		*/
-    0x41, 0xff, 0xe3,			/* jmpq *%r11			*/
-
-    /* 15-byte nop sequence to pad out to the next 32-byte boundary.  */
-    0x66, 0x66, 0x66, 0x66, 0x66, 0x66,    /* excess data16 prefixes	*/
-    0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1)	*/
-
-    /* Lazy GOT entries point here (32-byte aligned).  */
-    0x68,		  /* pushq immediate */
-    0, 0, 0, 0,		  /* replaced with index into relocation table.	 */
-    0xe9,		  /* jmp relative */
-    0, 0, 0, 0,		  /* replaced with offset to start of .plt0.  */
-
-    /* 22 bytes of nop to pad out to the standard size.	 */
-    0x66, 0x66, 0x66, 0x66, 0x66, 0x66,    /* excess data16 prefixes	*/
-    0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1)	*/
-    0x0f, 0x1f, 0x80, 0, 0, 0, 0,	   /* nopl 0x0(%rax)		*/
-  };
-
-/* .eh_frame covering the .plt section.  */
-
-static const bfd_byte elf_x86_64_nacl_eh_frame_plt[] =
-  {
-#if (PLT_CIE_LENGTH != 20				\
-     || PLT_FDE_LENGTH != 36				\
-     || PLT_FDE_START_OFFSET != 4 + PLT_CIE_LENGTH + 8	\
-     || PLT_FDE_LEN_OFFSET != 4 + PLT_CIE_LENGTH + 12)
-# error "Need elf_x86_backend_data parameters for eh_frame_plt offsets!"
-#endif
-    PLT_CIE_LENGTH, 0, 0, 0,	/* CIE length */
-    0, 0, 0, 0,			/* CIE ID */
-    1,				/* CIE version */
-    'z', 'R', 0,		/* Augmentation string */
-    1,				/* Code alignment factor */
-    0x78,			/* Data alignment factor */
-    16,				/* Return address column */
-    1,				/* Augmentation size */
-    DW_EH_PE_pcrel | DW_EH_PE_sdata4, /* FDE encoding */
-    DW_CFA_def_cfa, 7, 8,	/* DW_CFA_def_cfa: r7 (rsp) ofs 8 */
-    DW_CFA_offset + 16, 1,	/* DW_CFA_offset: r16 (rip) at cfa-8 */
-    DW_CFA_nop, DW_CFA_nop,
-
-    PLT_FDE_LENGTH, 0, 0, 0,	/* FDE length */
-    PLT_CIE_LENGTH + 8, 0, 0, 0,/* CIE pointer */
-    0, 0, 0, 0,			/* R_X86_64_PC32 .plt goes here */
-    0, 0, 0, 0,			/* .plt size goes here */
-    0,				/* Augmentation size */
-    DW_CFA_def_cfa_offset, 16,	/* DW_CFA_def_cfa_offset: 16 */
-    DW_CFA_advance_loc + 6,	/* DW_CFA_advance_loc: 6 to __PLT__+6 */
-    DW_CFA_def_cfa_offset, 24,	/* DW_CFA_def_cfa_offset: 24 */
-    DW_CFA_advance_loc + 58,	/* DW_CFA_advance_loc: 58 to __PLT__+64 */
-    DW_CFA_def_cfa_expression,	/* DW_CFA_def_cfa_expression */
-    13,				/* Block length */
-    DW_OP_breg7, 8,		/* DW_OP_breg7 (rsp): 8 */
-    DW_OP_breg16, 0,		/* DW_OP_breg16 (rip): 0 */
-    DW_OP_const1u, 63, DW_OP_and, DW_OP_const1u, 37, DW_OP_ge,
-    DW_OP_lit3, DW_OP_shl, DW_OP_plus,
-    DW_CFA_nop, DW_CFA_nop
-  };
-
-static const struct elf_x86_lazy_plt_layout elf_x86_64_nacl_plt =
-  {
-    elf_x86_64_nacl_plt0_entry,		     /* plt0_entry */
-    NACL_PLT_ENTRY_SIZE,		     /* plt0_entry_size */
-    elf_x86_64_nacl_plt_entry,		     /* plt_entry */
-    NACL_PLT_ENTRY_SIZE,		     /* plt_entry_size */
-    elf_x86_64_nacl_plt0_entry,		     /* plt_tlsdesc_entry */
-    NACL_PLT_ENTRY_SIZE,		     /* plt_tlsdesc_entry_size */
-    2,					     /* plt_tlsdesc_got1_offset */
-    9,					     /* plt_tlsdesc_got2_offset */
-    6,					     /* plt_tlsdesc_got1_insn_end */
-    13,					     /* plt_tlsdesc_got2_insn_end */
-    2,					     /* plt0_got1_offset */
-    9,					     /* plt0_got2_offset */
-    13,					     /* plt0_got2_insn_end */
-    3,					     /* plt_got_offset */
-    33,					     /* plt_reloc_offset */
-    38,					     /* plt_plt_offset */
-    7,					     /* plt_got_insn_size */
-    42,					     /* plt_plt_insn_end */
-    32,					     /* plt_lazy_offset */
-    elf_x86_64_nacl_plt0_entry,		     /* pic_plt0_entry */
-    elf_x86_64_nacl_plt_entry,		     /* pic_plt_entry */
-    elf_x86_64_nacl_eh_frame_plt,	     /* eh_frame_plt */
-    sizeof (elf_x86_64_nacl_eh_frame_plt)    /* eh_frame_plt_size */
-  };
-
-static const struct elf_x86_backend_data elf_x86_64_nacl_arch_bed =
-  {
-    is_nacl				     /* os */
-  };
-
-#undef	elf_backend_arch_data
-#define	elf_backend_arch_data	&elf_x86_64_nacl_arch_bed
-
-#undef	elf_backend_object_p
-#define elf_backend_object_p			elf64_x86_64_nacl_elf_object_p
-#undef	elf_backend_modify_segment_map
-#define	elf_backend_modify_segment_map		nacl_modify_segment_map
-#undef	elf_backend_modify_headers
-#define	elf_backend_modify_headers		nacl_modify_headers
-#undef	elf_backend_final_write_processing
-#define elf_backend_final_write_processing	nacl_final_write_processing
-
-#include "elf64-target.h"
-
-/* Native Client x32 support.  */
-
-static bfd_boolean
-elf32_x86_64_nacl_elf_object_p (bfd *abfd)
-{
-  /* Set the right machine number for a NaCl x86-64 ELF32 file.  */
-  bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x64_32_nacl);
-  return TRUE;
-}
-
-#undef	TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM		x86_64_elf32_nacl_vec
-#undef	TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME		"elf32-x86-64-nacl"
-#undef	elf32_bed
-#define	elf32_bed			elf32_x86_64_nacl_bed
-
-#define bfd_elf32_bfd_reloc_type_lookup	\
-  elf_x86_64_reloc_type_lookup
-#define bfd_elf32_bfd_reloc_name_lookup \
-  elf_x86_64_reloc_name_lookup
-#define bfd_elf32_get_synthetic_symtab \
-  elf_x86_64_get_synthetic_symtab
-
-#undef elf_backend_object_p
-#define elf_backend_object_p \
-  elf32_x86_64_nacl_elf_object_p
-
-#undef elf_backend_bfd_from_remote_memory
-#define elf_backend_bfd_from_remote_memory \
-  _bfd_elf32_bfd_from_remote_memory
-
-#undef elf_backend_size_info
-#define elf_backend_size_info \
-  _bfd_elf32_size_info
-
-#undef	elf32_bed
-#define	elf32_bed			elf32_x86_64_bed
-
-#include "elf32-target.h"
-
-/* Restore defaults.  */
-#undef	elf_backend_object_p
-#define elf_backend_object_p		    elf64_x86_64_elf_object_p
-#undef	elf_backend_bfd_from_remote_memory
-#undef	elf_backend_size_info
-#undef	elf_backend_modify_segment_map
-#undef	elf_backend_modify_headers
-#undef	elf_backend_final_write_processing
-
-/* Intel L1OM support.  */
-
-static bfd_boolean
-elf64_l1om_elf_object_p (bfd *abfd)
-{
-  /* Set the right machine number for an L1OM elf64 file.  */
-  bfd_default_set_arch_mach (abfd, bfd_arch_l1om, bfd_mach_l1om);
-  return TRUE;
-}
-
-#undef  TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM		    l1om_elf64_vec
-#undef  TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME		    "elf64-l1om"
-#undef ELF_ARCH
-#define ELF_ARCH			    bfd_arch_l1om
-
-#undef	ELF_MACHINE_CODE
-#define ELF_MACHINE_CODE		    EM_L1OM
-
-#undef	ELF_OSABI
-
-#undef  elf64_bed
-#define elf64_bed elf64_l1om_bed
-
-#undef elf_backend_object_p
-#define elf_backend_object_p		    elf64_l1om_elf_object_p
-
-/* Restore defaults.  */
-#undef	ELF_MAXPAGESIZE
-#undef	ELF_MINPAGESIZE
-#undef	ELF_COMMONPAGESIZE
-#if DEFAULT_LD_Z_SEPARATE_CODE
-# define ELF_MAXPAGESIZE		0x1000
-#else
-# define ELF_MAXPAGESIZE		0x200000
-#endif
-#define ELF_MINPAGESIZE			0x1000
-#define ELF_COMMONPAGESIZE		0x1000
-#undef	elf_backend_plt_alignment
-#define elf_backend_plt_alignment	4
-#undef	elf_backend_arch_data
-#define	elf_backend_arch_data	&elf_x86_64_arch_bed
-
-#include "elf64-target.h"
-
-/* FreeBSD L1OM support.  */
-
-#undef  TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM		    l1om_elf64_fbsd_vec
-#undef  TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME		    "elf64-l1om-freebsd"
-
-#undef	ELF_OSABI
-#define	ELF_OSABI			    ELFOSABI_FREEBSD
-
-#undef  elf64_bed
-#define elf64_bed elf64_l1om_fbsd_bed
-
-#include "elf64-target.h"
-
-/* Intel K1OM support.  */
-
-static bfd_boolean
-elf64_k1om_elf_object_p (bfd *abfd)
-{
-  /* Set the right machine number for an K1OM elf64 file.  */
-  bfd_default_set_arch_mach (abfd, bfd_arch_k1om, bfd_mach_k1om);
-  return TRUE;
-}
-
-#undef  TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM		    k1om_elf64_vec
-#undef  TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME		    "elf64-k1om"
-#undef ELF_ARCH
-#define ELF_ARCH			    bfd_arch_k1om
-
-#undef	ELF_MACHINE_CODE
-#define ELF_MACHINE_CODE		    EM_K1OM
-
-#undef	ELF_OSABI
-
-#undef  elf64_bed
-#define elf64_bed elf64_k1om_bed
-
-#undef elf_backend_object_p
-#define elf_backend_object_p		    elf64_k1om_elf_object_p
-
-#undef  elf_backend_static_tls_alignment
-
-#undef elf_backend_want_plt_sym
-#define elf_backend_want_plt_sym	    0
-
-#include "elf64-target.h"
-
-/* FreeBSD K1OM support.  */
-
-#undef  TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM		    k1om_elf64_fbsd_vec
-#undef  TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME		    "elf64-k1om-freebsd"
-
-#undef	ELF_OSABI
-#define	ELF_OSABI			    ELFOSABI_FREEBSD
-
-#undef  elf64_bed
-#define elf64_bed elf64_k1om_fbsd_bed
-
-#include "elf64-target.h"
-
 /* 32bit x86-64 support.  */
 
 #undef  TARGET_LITTLE_SYM
@@ -5604,6 +5782,7 @@ elf64_k1om_elf_object_p (bfd *abfd)
 #undef  TARGET_LITTLE_NAME
 #define TARGET_LITTLE_NAME		    "elf32-x86-64"
 #undef	elf32_bed
+#define	elf32_bed			    elf32_x86_64_bed
 
 #undef ELF_ARCH
 #define ELF_ARCH			    bfd_arch_i386
@@ -5611,8 +5790,18 @@ elf64_k1om_elf_object_p (bfd *abfd)
 #undef	ELF_MACHINE_CODE
 #define ELF_MACHINE_CODE		    EM_X86_64
 
+#undef	ELF_TARGET_OS
 #undef	ELF_OSABI
 
+#define bfd_elf32_bfd_copy_private_section_data \
+  elf_x86_64_copy_private_section_data
+#define bfd_elf32_bfd_reloc_type_lookup	\
+  elf_x86_64_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+  elf_x86_64_reloc_name_lookup
+#define bfd_elf32_get_synthetic_symtab \
+  elf_x86_64_get_synthetic_symtab
+
 #undef elf_backend_object_p
 #define elf_backend_object_p \
   elf32_x86_64_elf_object_p
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-attrs.c ./bfd/elf-attrs.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-attrs.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-attrs.c	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF attributes support (based on ARM EABI attributes).
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -39,19 +39,19 @@ uleb128_size (unsigned int i)
 }
 
 /* Return TRUE if the attribute has the default value (0/"").  */
-static bfd_boolean
+static bool
 is_default_attr (obj_attribute *attr)
 {
   if (ATTR_TYPE_HAS_ERROR (attr->type))
-    return TRUE;
+    return true;
   if (ATTR_TYPE_HAS_INT_VAL (attr->type) && attr->i != 0)
-    return FALSE;
+    return false;
   if (ATTR_TYPE_HAS_STR_VAL (attr->type) && attr->s && *attr->s)
-    return FALSE;
+    return false;
   if (ATTR_TYPE_HAS_NO_DEFAULT (attr->type))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Return the size of a single attribute.  */
@@ -247,6 +247,8 @@ elf_new_obj_attr (bfd *abfd, int vendor,
       /* Create a new tag.  */
       list = (obj_attribute_list *)
 	bfd_alloc (abfd, sizeof (obj_attribute_list));
+      if (list == NULL)
+	return NULL;
       memset (list, 0, sizeof (obj_attribute_list));
       list->tag = tag;
       /* Keep the tag list in order.  */
@@ -292,51 +294,96 @@ bfd_elf_get_obj_attr_int (bfd *abfd, int
 }
 
 /* Add an integer object attribute.  */
-void
+obj_attribute *
 bfd_elf_add_obj_attr_int (bfd *abfd, int vendor, unsigned int tag, unsigned int i)
 {
   obj_attribute *attr;
 
   attr = elf_new_obj_attr (abfd, vendor, tag);
-  attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
-  attr->i = i;
+  if (attr != NULL)
+    {
+      attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
+      attr->i = i;
+    }
+  return attr;
 }
 
 /* Duplicate an object attribute string value.  */
-char *
-_bfd_elf_attr_strdup (bfd *abfd, const char * s)
+static char *
+elf_attr_strdup (bfd *abfd, const char *s, const char *end)
 {
-  char * p;
-  int len;
+  char *p;
+  size_t len;
+
+  if (end)
+    len = strnlen (s, end - s);
+  else
+    len = strlen (s);
 
-  len = strlen (s) + 1;
-  p = (char *) bfd_alloc (abfd, len);
-  return (char *) memcpy (p, s, len);
+  p = (char *) bfd_alloc (abfd, len + 1);
+  if (p != NULL)
+    {
+      memcpy (p, s, len);
+      p[len] = 0;
+    }
+  return p;
+}
+
+char *
+_bfd_elf_attr_strdup (bfd *abfd, const char *s)
+{
+  return elf_attr_strdup (abfd, s, NULL);
 }
 
 /* Add a string object attribute.  */
-void
-bfd_elf_add_obj_attr_string (bfd *abfd, int vendor, unsigned int tag, const char *s)
+static obj_attribute *
+elf_add_obj_attr_string (bfd *abfd, int vendor, unsigned int tag,
+			 const char *s, const char *end)
 {
   obj_attribute *attr;
 
   attr = elf_new_obj_attr (abfd, vendor, tag);
-  attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
-  attr->s = _bfd_elf_attr_strdup (abfd, s);
+  if (attr != NULL)
+    {
+      attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
+      attr->s = elf_attr_strdup (abfd, s, end);
+      if (attr->s == NULL)
+	return NULL;
+    }
+  return attr;
+}
+
+obj_attribute *
+bfd_elf_add_obj_attr_string (bfd *abfd, int vendor, unsigned int tag,
+			     const char *s)
+{
+  return elf_add_obj_attr_string (abfd, vendor, tag, s, NULL);
 }
 
 /* Add a int+string object attribute.  */
-void
-bfd_elf_add_obj_attr_int_string (bfd *abfd, int vendor,
-				 unsigned int tag,
-				 unsigned int i, const char *s)
+static obj_attribute *
+elf_add_obj_attr_int_string (bfd *abfd, int vendor, unsigned int tag,
+			     unsigned int i, const char *s, const char *end)
 {
   obj_attribute *attr;
 
   attr = elf_new_obj_attr (abfd, vendor, tag);
-  attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
-  attr->i = i;
-  attr->s = _bfd_elf_attr_strdup (abfd, s);
+  if (attr != NULL)
+    {
+      attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
+      attr->i = i;
+      attr->s = elf_attr_strdup (abfd, s, end);
+      if (attr->s == NULL)
+	return NULL;
+    }
+  return attr;
+}
+
+obj_attribute *
+bfd_elf_add_obj_attr_int_string (bfd *abfd, int vendor, unsigned int tag,
+				 unsigned int i, const char *s)
+{
+  return elf_add_obj_attr_int_string (abfd, vendor, tag, i, s, NULL);
 }
 
 /* Copy the object attributes from IBFD to OBFD.  */
@@ -364,7 +411,11 @@ _bfd_elf_copy_obj_attributes (bfd *ibfd,
 	  out_attr->type = in_attr->type;
 	  out_attr->i = in_attr->i;
 	  if (in_attr->s && *in_attr->s)
-	    out_attr->s = _bfd_elf_attr_strdup (obfd, in_attr->s);
+	    {
+	      out_attr->s = _bfd_elf_attr_strdup (obfd, in_attr->s);
+	      if (out_attr->s == NULL)
+		bfd_perror (_("error adding attribute"));
+	    }
 	  in_attr++;
 	  out_attr++;
 	}
@@ -373,23 +424,27 @@ _bfd_elf_copy_obj_attributes (bfd *ibfd,
 	   list;
 	   list = list->next)
 	{
+	  bool ok = false;
 	  in_attr = &list->attr;
 	  switch (in_attr->type & (ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL))
 	    {
 	    case ATTR_TYPE_FLAG_INT_VAL:
-	      bfd_elf_add_obj_attr_int (obfd, vendor, list->tag, in_attr->i);
+	      ok = bfd_elf_add_obj_attr_int (obfd, vendor,
+					     list->tag, in_attr->i);
 	      break;
 	    case ATTR_TYPE_FLAG_STR_VAL:
-	      bfd_elf_add_obj_attr_string (obfd, vendor, list->tag,
-					   in_attr->s);
+	      ok = bfd_elf_add_obj_attr_string (obfd, vendor, list->tag,
+						in_attr->s);
 	      break;
 	    case ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL:
-	      bfd_elf_add_obj_attr_int_string (obfd, vendor, list->tag,
-					       in_attr->i, in_attr->s);
+	      ok = bfd_elf_add_obj_attr_int_string (obfd, vendor, list->tag,
+						    in_attr->i, in_attr->s);
 	      break;
 	    default:
 	      abort ();
 	    }
+	  if (!ok)
+	    bfd_perror (_("error adding attribute"));
 	}
     }
 }
@@ -434,13 +489,15 @@ _bfd_elf_parse_attributes (bfd *abfd, El
   bfd_byte *contents;
   bfd_byte *p;
   bfd_byte *p_end;
-  bfd_vma len;
   const char *std_sec;
+  ufile_ptr filesize;
 
   /* PR 17512: file: 2844a11d.  */
   if (hdr->sh_size == 0)
     return;
-  if (hdr->sh_size > bfd_get_file_size (abfd))
+
+  filesize = bfd_get_file_size (abfd);
+  if (filesize != 0 && hdr->sh_size > filesize)
     {
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: error: attribute section '%pA' too big: %#llx"),
@@ -449,7 +506,7 @@ _bfd_elf_parse_attributes (bfd *abfd, El
       return;
     }
 
-  contents = (bfd_byte *) bfd_malloc (hdr->sh_size + 1);
+  contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
   if (!contents)
     return;
   if (!bfd_get_section_contents (abfd, hdr->bfd_section, contents, 0,
@@ -458,20 +515,17 @@ _bfd_elf_parse_attributes (bfd *abfd, El
       free (contents);
       return;
     }
-  /* Ensure that the buffer is NUL terminated.  */
-  contents[hdr->sh_size] = 0;
   p = contents;
   p_end = p + hdr->sh_size;
   std_sec = get_elf_backend_data (abfd)->obj_attrs_vendor;
 
-  if (*(p++) == 'A')
+  if (*p++ == 'A')
     {
-      len = hdr->sh_size - 1;
-
-      while (len > 0 && p < p_end - 4)
+      while (p_end - p >= 4)
 	{
-	  unsigned namelen;
-	  bfd_vma section_len;
+	  size_t len = p_end - p;
+	  size_t namelen;
+	  size_t section_len;
 	  int vendor;
 
 	  section_len = bfd_get_32 (abfd, p);
@@ -480,19 +534,17 @@ _bfd_elf_parse_attributes (bfd *abfd, El
 	    break;
 	  if (section_len > len)
 	    section_len = len;
-	  len -= section_len;
 	  if (section_len <= 4)
 	    {
 	      _bfd_error_handler
-		(_("%pB: error: attribute section length too small: %" PRId64),
-		 abfd, (int64_t) section_len);
+		(_("%pB: error: attribute section length too small: %ld"),
+		 abfd, (long) section_len);
 	      break;
 	    }
 	  section_len -= 4;
 	  namelen = strnlen ((char *) p, section_len) + 1;
-	  if (namelen == 0 || namelen >= section_len)
+	  if (namelen >= section_len)
 	    break;
-	  section_len -= namelen;
 	  if (std_sec && strcmp ((char *) p, std_sec) == 0)
 	    vendor = OBJ_ATTR_PROC;
 	  else if (strcmp ((char *) p, "gnu") == 0)
@@ -500,68 +552,75 @@ _bfd_elf_parse_attributes (bfd *abfd, El
 	  else
 	    {
 	      /* Other vendor section.  Ignore it.  */
-	      p += namelen + section_len;
+	      p += section_len;
 	      continue;
 	    }
 
 	  p += namelen;
-	  while (section_len > 0 && p < p_end)
+	  section_len -= namelen;
+	  while (section_len > 0)
 	    {
 	      unsigned int tag;
-	      unsigned int n;
 	      unsigned int val;
-	      bfd_vma subsection_len;
-	      bfd_byte *end;
+	      size_t subsection_len;
+	      bfd_byte *end, *orig_p;
 
-	      tag = _bfd_safe_read_leb128 (abfd, p, &n, FALSE, p_end);
-	      p += n;
-	      if (p < p_end - 4)
-		subsection_len = bfd_get_32 (abfd, p);
+	      orig_p = p;
+	      tag = _bfd_safe_read_leb128 (abfd, &p, false, p_end);
+	      if (p_end - p >= 4)
+		{
+		  subsection_len = bfd_get_32 (abfd, p);
+		  p += 4;
+		}
 	      else
-		subsection_len = 0;
-	      p += 4;
-	      if (subsection_len == 0)
-		break;
+		{
+		  p = p_end;
+		  break;
+		}
 	      if (subsection_len > section_len)
 		subsection_len = section_len;
 	      section_len -= subsection_len;
-	      subsection_len -= n + 4;
-	      end = p + subsection_len;
-	      /* PR 17512: file: 0e8c0c90.  */
-	      if (end > p_end)
-		end = p_end;
+	      end = orig_p + subsection_len;
+	      if (end < p)
+		break;
 	      switch (tag)
 		{
 		case Tag_File:
 		  while (p < end)
 		    {
 		      int type;
+		      bool ok = false;
 
-		      tag = _bfd_safe_read_leb128 (abfd, p, &n, FALSE, end);
-		      p += n;
+		      tag = _bfd_safe_read_leb128 (abfd, &p, false, end);
 		      type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
 		      switch (type & (ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL))
 			{
 			case ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL:
-			  val = _bfd_safe_read_leb128 (abfd, p, &n, FALSE, end);
-			  p += n;
-			  bfd_elf_add_obj_attr_int_string (abfd, vendor, tag,
-							   val, (char *) p);
-			  p += strlen ((char *)p) + 1;
+			  val = _bfd_safe_read_leb128 (abfd, &p, false, end);
+			  ok = elf_add_obj_attr_int_string (abfd, vendor, tag,
+							    val, (char *) p,
+							    (char *) end);
+			  p += strnlen ((char *) p, end - p);
+			  if (p < end)
+			    p++;
 			  break;
 			case ATTR_TYPE_FLAG_STR_VAL:
-			  bfd_elf_add_obj_attr_string (abfd, vendor, tag,
-						       (char *) p);
-			  p += strlen ((char *)p) + 1;
+			  ok = elf_add_obj_attr_string (abfd, vendor, tag,
+							(char *) p,
+							(char *) end);
+			  p += strnlen ((char *) p, end - p);
+			  if (p < end)
+			    p++;
 			  break;
 			case ATTR_TYPE_FLAG_INT_VAL:
-			  val = _bfd_safe_read_leb128 (abfd, p, &n, FALSE, end);
-			  p += n;
-			  bfd_elf_add_obj_attr_int (abfd, vendor, tag, val);
+			  val = _bfd_safe_read_leb128 (abfd, &p, false, end);
+			  ok = bfd_elf_add_obj_attr_int (abfd, vendor, tag, val);
 			  break;
 			default:
 			  abort ();
 			}
+		      if (!ok)
+			bfd_perror (_("error adding attribute"));
 		    }
 		  break;
 		case Tag_Section:
@@ -569,9 +628,8 @@ _bfd_elf_parse_attributes (bfd *abfd, El
 		  /* Don't have anywhere convenient to attach these.
 		     Fall through for now.  */
 		default:
-		  /* Ignore things we don't kow about.  */
-		  p += subsection_len;
-		  subsection_len = 0;
+		  /* Ignore things we don't know about.  */
+		  p = end;
 		  break;
 		}
 	    }
@@ -590,7 +648,7 @@ _bfd_elf_parse_attributes (bfd *abfd, El
    is not presently called for targets without their own
    attributes.  */
 
-bfd_boolean
+bool
 _bfd_elf_merge_object_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -615,7 +673,7 @@ _bfd_elf_merge_object_attributes (bfd *i
 		(_("error: %pB: object has vendor-specific contents that "
 		   "must be processed by the '%s' toolchain"),
 		 ibfd, in_attr->s);
-	  return FALSE;
+	  return false;
 	}
 
       if (in_attr->i != out_attr->i
@@ -627,24 +685,24 @@ _bfd_elf_merge_object_attributes (bfd *i
 			      ibfd,
 			      in_attr->i, in_attr->s ? in_attr->s : "",
 			      out_attr->i, out_attr->s ? out_attr->s : "");
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Merge an unknown processor-specific attribute TAG, within the range
    of known attributes, from IBFD into OBFD; return TRUE if the link
    is OK, FALSE if it must fail.  */
 
-bfd_boolean
+bool
 _bfd_elf_merge_unknown_attribute_low (bfd *ibfd, bfd *obfd, int tag)
 {
   obj_attribute *in_attr;
   obj_attribute *out_attr;
   bfd *err_bfd = NULL;
-  bfd_boolean result = TRUE;
+  bool result = true;
 
   in_attr = elf_known_obj_attributes_proc (ibfd);
   out_attr = elf_known_obj_attributes_proc (obfd);
@@ -675,13 +733,13 @@ _bfd_elf_merge_unknown_attribute_low (bf
    the known range, from IBFD into OBFD; return TRUE if the link is
    OK, FALSE if it must fail.  */
 
-bfd_boolean
+bool
 _bfd_elf_merge_unknown_attribute_list (bfd *ibfd, bfd *obfd)
 {
   obj_attribute_list *in_list;
   obj_attribute_list *out_list;
   obj_attribute_list **out_listp;
-  bfd_boolean result = TRUE;
+  bool result = true;
 
   in_list = elf_other_obj_attributes_proc (ibfd);
   out_listp = &elf_other_obj_attributes_proc (obfd);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-bfd.h ./bfd/elf-bfd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-bfd.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-bfd.h	2024-02-01 01:47:13.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end data structures for ELF files.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -22,11 +22,17 @@
 #ifndef _LIBELF_H_
 #define _LIBELF_H_ 1
 
+#include <stdlib.h>
+
 #include "elf/common.h"
 #include "elf/external.h"
 #include "elf/internal.h"
 #include "bfdlink.h"
 
+#ifndef ENABLE_CHECKING
+#define ENABLE_CHECKING 0
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -102,7 +108,7 @@ struct elf_link_virtual_table_entry
        and track a size while the symbol is still undefined.  It is indexed
        via offset/sizeof(target_void_pointer).  */
     size_t size;
-    bfd_boolean *used;
+    bool *used;
 
     /* Virtual table derivation info.  */
     struct elf_link_hash_entry *parent;
@@ -156,9 +162,13 @@ struct elf_link_hash_entry
   /* Same, but tracks a procedure linkage table entry.  */
   union gotplt_union plt;
 
-  /* Symbol size.  */
+  /* Symbol size.  NB: All fields starting from here are cleared by
+    _bfd_elf_link_hash_newfunc.  */
   bfd_size_type size;
 
+  /* Track dynamic relocs copied for this symbol.  */
+  struct elf_dyn_relocs *dyn_relocs;
+
   /* Symbol type (STT_NOTYPE, STT_OBJECT, etc.).  */
   unsigned int type : 8;
 
@@ -180,6 +190,8 @@ struct elf_link_hash_entry
   /* Symbol has a non-weak reference from a non-shared object (other than
      the object in which it is defined).  */
   unsigned int ref_regular_nonweak : 1;
+  /* Symbol has a non-weak reference from a LTO IR object file.  */
+  unsigned int ref_ir_nonweak : 1;
   /* Dynamic symbol has been adjustd.  */
   unsigned int dynamic_adjusted : 1;
   /* Symbol needs a copy reloc.  */
@@ -279,9 +291,12 @@ weakdef (struct elf_link_hash_entry *h)
   _bfd_elf_symbol_refs_local_p (H, INFO, 1)
 
 /* Whether an undefined weak symbol should resolve to its link-time
-   value, even in PIC or PIE objects.  */
+   value, even in PIC or PIE objects.  The linker_def test is to
+   handle symbols like __ehdr_start that may be undefweak in early
+   stages of linking but are guaranteed to be defined later.  */
 #define UNDEFWEAK_NO_DYNAMIC_RELOC(INFO, H)		\
   ((H)->root.type == bfd_link_hash_undefweak		\
+   && !(H)->root.linker_def				\
    && (ELF_ST_VISIBILITY ((H)->other) != STV_DEFAULT	\
        || (INFO)->dynamic_undefined_weak == 0))
 
@@ -451,7 +466,7 @@ struct dwarf_eh_frame_hdr_info
   /* TRUE if .eh_frame_hdr should contain the sorted search table.
      We build it if we successfully read all .eh_frame input sections
      and recognize them.  */
-  bfd_boolean table;
+  bool table;
   struct eh_frame_array_ent *array;
 };
 
@@ -466,7 +481,7 @@ struct eh_frame_hdr_info
 {
   asection *hdr_sec;
   unsigned int array_count;
-  bfd_boolean frame_hdr_is_compact;
+  bool frame_hdr_is_compact;
   union
     {
       struct dwarf_eh_frame_hdr_info dwarf;
@@ -475,6 +490,40 @@ struct eh_frame_hdr_info
   u;
 };
 
+/* Additional information for each function (used at link time).  */
+struct sframe_func_bfdinfo
+{
+  /* Whether the function has been discarded from the final output.  */
+  bool func_deleted_p;
+  /* Relocation offset.  */
+  unsigned int func_r_offset;
+  /* Relocation index.  */
+  unsigned int func_reloc_index;
+};
+
+/* SFrame decoder info.
+   Contains all information for a decoded .sframe section.  */
+struct sframe_dec_info
+{
+  /* Decoder context.  */
+  struct sframe_decoder_ctx *sfd_ctx;
+  /* Number of function descriptor entries in this .sframe.  */
+  unsigned int sfd_fde_count;
+  /* Additional information for linking.  */
+  struct sframe_func_bfdinfo *sfd_func_bfdinfo;
+};
+
+/* SFrame encoder info.
+   Contains all information for an encoded .sframe section to be
+   written out.  */
+struct sframe_enc_info
+{
+  /* Encoder context.  */
+  struct sframe_encoder_ctx *sfe_ctx;
+  /* Output section.  */
+  asection *sframe_section;
+};
+
 /* Enum used to identify target specific extensions to the elf_obj_tdata
    and elf_link_hash_table structures.  Note the enums deliberately start
    from 1 so that we can detect an uninitialized field.  The generic value
@@ -484,6 +533,7 @@ enum elf_target_id
 {
   AARCH64_ELF_DATA = 1,
   ALPHA_ELF_DATA,
+  AMDGCN_ELF_DATA,
   ARC_ELF_DATA,
   ARM_ELF_DATA,
   AVR_ELF_DATA,
@@ -495,7 +545,9 @@ enum elf_target_id
   HPPA64_ELF_DATA,
   I386_ELF_DATA,
   IA64_ELF_DATA,
+  KVX_ELF_DATA,
   LM32_ELF_DATA,
+  LARCH_ELF_DATA,
   M32R_ELF_DATA,
   M68HC11_ELF_DATA,
   M68K_ELF_DATA,
@@ -526,7 +578,6 @@ struct elf_sym_strtab
 {
   Elf_Internal_Sym sym;
   unsigned long dest_index;
-  unsigned long destshndx_index;
 };
 
 struct bfd_link_needed_list
@@ -536,6 +587,24 @@ struct bfd_link_needed_list
   const char *name;
 };
 
+enum elf_target_os
+{
+  is_normal,
+  is_solaris,	/* Solaris.  */
+  is_vxworks,	/* VxWorks.  */
+  is_nacl	/* Native Client.  */
+};
+
+/* Used by bfd_sym_from_r_symndx to cache a small number of local
+   symbols.  */
+#define LOCAL_SYM_CACHE_SIZE 32
+struct sym_cache
+{
+  bfd *abfd;
+  unsigned long indx[LOCAL_SYM_CACHE_SIZE];
+  Elf_Internal_Sym sym[LOCAL_SYM_CACHE_SIZE];
+};
+
 /* ELF linker hash table.  */
 
 struct elf_link_hash_table
@@ -548,14 +617,26 @@ struct elf_link_hash_table
 
   /* Whether we have created the special dynamic sections required
      when linking against or generating a shared object.  */
-  bfd_boolean dynamic_sections_created;
+  bool dynamic_sections_created;
 
   /* Whether dynamic relocations are present.  */
-  bfd_boolean dynamic_relocs;
+  bool dynamic_relocs;
 
   /* True if this target has relocatable executables, so needs dynamic
      section symbols.  */
-  bfd_boolean is_relocatable_executable;
+  bool is_relocatable_executable;
+
+  /* TRUE if there are IFUNC resolvers.  */
+  bool ifunc_resolvers;
+
+  /* TRUE if DT_PLTGOT is a required dynamic tag.  */
+  bool dt_pltgot_required;
+
+  /* TRUE if DT_JMPREL is a required dynamic tag.  */
+  bool dt_jmprel_required;
+
+  /* TRUE when we are handling DT_NEEDED entries.  */
+  bool handling_dt_needed;
 
   /* The BFD used to hold special sections created by the linker.
      This will be the first BFD found which requires these sections to
@@ -583,10 +664,6 @@ struct elf_link_hash_table
      section.  */
   struct elf_strtab_hash *dynstr;
 
-  /* The number of symbol strings found in the link which must be put
-     into the .strtab section.  */
-  bfd_size_type strtabcount;
-
   /* The array size of the symbol string table, which becomes the
      .strtab section.  */
   bfd_size_type strtabsize;
@@ -626,6 +703,9 @@ struct elf_link_hash_table
   /* Used by eh_frame code when editing .eh_frame.  */
   struct eh_frame_hdr_info eh_info;
 
+  /* Used to link stack trace info in .sframe sections.  */
+  struct sframe_enc_info sfe_info;
+
   /* A linked list of local symbols to be added to .dynsym.  */
   struct elf_link_local_dynamic_entry *dynlocal;
 
@@ -635,10 +715,27 @@ struct elf_link_hash_table
 
   /* Cached first output tls section and size of PT_TLS segment.  */
   asection *tls_sec;
-  bfd_size_type tls_size;
+  bfd_size_type tls_size;  /* Bytes.  */
+
+  /* The offset into splt of the PLT entry for the TLS descriptor
+     resolver.  Special values are 0, if not necessary (or not found
+     to be necessary yet), and -1 if needed but not determined
+     yet.  */
+  bfd_vma tlsdesc_plt;
+
+  /* The GOT offset for the lazy trampoline.  Communicated to the
+     loader via DT_TLSDESC_GOT.  The magic value (bfd_vma) -1
+     indicates an offset is not allocated.  */
+  bfd_vma tlsdesc_got;
 
-  /* A linked list of BFD's loaded in the link.  */
-  struct elf_link_loaded_list *loaded;
+  /* Target OS for linker output.  */
+  enum elf_target_os target_os;
+
+  /* A linked list of dynamic BFD's loaded in the link.  */
+  struct elf_link_loaded_list *dyn_loaded;
+
+  /* Small local sym cache.  */
+  struct sym_cache sym_cache;
 
   /* Short-cuts to get to dynamic linker sections.  */
   asection *sgot;
@@ -655,42 +752,56 @@ struct elf_link_hash_table
   asection *irelplt;
   asection *irelifunc;
   asection *dynsym;
+  asection *srelrdyn;
 };
 
+/* Returns TRUE if the hash table is a struct elf_link_hash_table.  */
+
+static inline bool
+is_elf_hash_table (const struct bfd_link_hash_table *htab)
+{
+  return htab->type == bfd_link_elf_hash_table;
+}
+
 /* Look up an entry in an ELF linker hash table.  */
 
-#define elf_link_hash_lookup(table, string, create, copy, follow)	\
-  ((struct elf_link_hash_entry *)					\
-   bfd_link_hash_lookup (&(table)->root, (string), (create),		\
-			 (copy), (follow)))
+static inline struct elf_link_hash_entry *
+elf_link_hash_lookup (struct elf_link_hash_table *table, const char *string,
+		      bool create, bool copy, bool follow)
+{
+  if (ENABLE_CHECKING && !is_elf_hash_table (&table->root))
+    abort ();
+  return (struct elf_link_hash_entry *)
+    bfd_link_hash_lookup (&table->root, string, create, copy, follow);
+}
 
 /* Traverse an ELF linker hash table.  */
 
-#define elf_link_hash_traverse(table, func, info)			\
-  (bfd_link_hash_traverse						\
-   (&(table)->root,							\
-    (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func),	\
-    (info)))
+static inline void
+elf_link_hash_traverse (struct elf_link_hash_table *table,
+			bool (*f) (struct elf_link_hash_entry *, void *),
+			void *info)
+{
+  if (ENABLE_CHECKING && !is_elf_hash_table (&table->root))
+    abort ();
+  bfd_link_hash_traverse (&table->root,
+			  (bool (*) (struct bfd_link_hash_entry *, void *)) f,
+			  info);
+}
 
 /* Get the ELF linker hash table from a link_info structure.  */
 
-#define elf_hash_table(p) ((struct elf_link_hash_table *) ((p)->hash))
-
-#define elf_hash_table_id(table)	((table) -> hash_table_id)
-
-/* Returns TRUE if the hash table is a struct elf_link_hash_table.  */
-#define is_elf_hash_table(htab)						\
-  (((struct bfd_link_hash_table *) (htab))->type == bfd_link_elf_hash_table)
+static inline struct elf_link_hash_table *
+elf_hash_table (const struct bfd_link_info *info)
+{
+  return (struct elf_link_hash_table *) info->hash;
+}
 
-/* Used by bfd_sym_from_r_symndx to cache a small number of local
-   symbols.  */
-#define LOCAL_SYM_CACHE_SIZE 32
-struct sym_cache
+static inline enum elf_target_id
+elf_hash_table_id (const struct elf_link_hash_table *table)
 {
-  bfd *abfd;
-  unsigned long indx[LOCAL_SYM_CACHE_SIZE];
-  Elf_Internal_Sym sym[LOCAL_SYM_CACHE_SIZE];
-};
+  return table->hash_table_id;
+}
 
 /* Constant information held for an ELF backend.  */
 
@@ -712,20 +823,19 @@ struct elf_size_info {
   unsigned char elfclass, ev_current;
   int (*write_out_phdrs)
     (bfd *, const Elf_Internal_Phdr *, unsigned int);
-  bfd_boolean
-    (*write_shdrs_and_ehdr) (bfd *);
-  bfd_boolean (*checksum_contents)
+  bool (*write_shdrs_and_ehdr) (bfd *);
+  bool (*checksum_contents)
     (bfd * , void (*) (const void *, size_t, void *), void *);
   void (*write_relocs)
     (bfd *, asection *, void *);
-  bfd_boolean (*swap_symbol_in)
+  bool (*swap_symbol_in)
     (bfd *, const void *, const void *, Elf_Internal_Sym *);
   void (*swap_symbol_out)
     (bfd *, const Elf_Internal_Sym *, void *, void *);
-  bfd_boolean (*slurp_reloc_table)
-    (bfd *, asection *, asymbol **, bfd_boolean);
+  bool (*slurp_reloc_table)
+    (bfd *, asection *, asymbol **, bool);
   long (*slurp_symbol_table)
-    (bfd *, asymbol **, bfd_boolean);
+    (bfd *, asymbol **, bool);
   void (*swap_dyn_in)
     (bfd *, const void *, Elf_Internal_Dyn *);
   void (*swap_dyn_out)
@@ -752,8 +862,9 @@ struct elf_size_info {
     (bfd *, const Elf_Internal_Rela *, bfd_byte *);
 };
 
-#define elf_symbol_from(ABFD,S) \
-  (((S)->the_bfd != NULL					\
+#define elf_symbol_from(S) \
+  ((((S)->flags & BSF_SYNTHETIC) == 0				\
+    && (S)->the_bfd != NULL					\
     && (S)->the_bfd->xvec->flavour == bfd_target_elf_flavour	\
     && (S)->the_bfd->tdata.elf_obj_data != 0)			\
    ? (elf_symbol_type *) (S)					\
@@ -776,7 +887,7 @@ struct elf_reloc_cookie
   size_t extsymoff;
   struct elf_link_hash_entry **sym_hashes;
   int r_sym_shift;
-  bfd_boolean bad_symtab;
+  bool bad_symtab;
 };
 
 /* The level of IRIX compatibility we're striving for.  */
@@ -846,6 +957,19 @@ typedef struct elf_property_list
   struct elf_property property;
 } elf_property_list;
 
+/* This structure is used to pass information to
+   elf_backend_add_glibc_version_dependency.  */
+
+struct elf_find_verdep_info
+{
+  /* General link information.  */
+  struct bfd_link_info *info;
+  /* The number of dependencies.  */
+  unsigned int vers;
+  /* Whether we had a failure.  */
+  bool failed;
+};
+
 struct bfd_elf_section_reloc_data;
 
 struct elf_backend_data
@@ -857,6 +981,9 @@ struct elf_backend_data
      extensions to elf_obj_tdata and elf_link_hash_table structures.  */
   enum elf_target_id target_id;
 
+  /* Target OS.  */
+  enum elf_target_os target_os;
+
   /* The ELF machine code (EM_xxxx) for this backend.  */
   int elf_machine_code;
 
@@ -874,8 +1001,9 @@ struct elf_backend_data
   /* The common page size for this backend.  */
   bfd_vma commonpagesize;
 
-  /* The value of commonpagesize to use when -z relro for this backend.  */
-  bfd_vma relropagesize;
+  /* The p_align value for this backend.  If it is set, p_align of
+      PT_LOAD alignment will be to p_align by default.  */
+  bfd_vma p_align;
 
   /* The BFD flags applied to sections created for dynamic linking.  */
   flagword dynamic_sec_flags;
@@ -886,12 +1014,12 @@ struct elf_backend_data
 
   /* A function to translate an ELF RELA relocation to a BFD arelent
      structure.  Returns TRUE upon success, FALSE otherwise.  */
-  bfd_boolean (*elf_info_to_howto)
+  bool (*elf_info_to_howto)
     (bfd *, arelent *, Elf_Internal_Rela *);
 
   /* A function to translate an ELF REL relocation to a BFD arelent
      structure.  Returns TRUE upon success, FALSE otherwise.  */
-  bfd_boolean (*elf_info_to_howto_rel)
+  bool (*elf_info_to_howto_rel)
     (bfd *, arelent *, Elf_Internal_Rela *);
 
   /* A function to determine whether a symbol is global when
@@ -899,7 +1027,7 @@ struct elf_backend_data
      This should be NULL for most targets, in which case the correct
      thing will be done.  MIPS ELF, at least on the Irix 5, has
      special requirements.  */
-  bfd_boolean (*elf_backend_sym_is_global)
+  bool (*elf_backend_sym_is_global)
     (bfd *, asymbol *);
 
   /* The remaining functions are hooks which are called only if they
@@ -911,7 +1039,7 @@ struct elf_backend_data
      this is called elf_elfheader is set, but anything else should be
      used with caution.  If this returns FALSE, the check_format
      routine will return a bfd_error_wrong_format error.  */
-  bfd_boolean (*elf_backend_object_p)
+  bool (*elf_backend_object_p)
     (bfd *);
 
   /* A function to do additional symbol processing when reading the
@@ -922,7 +1050,7 @@ struct elf_backend_data
 
   /* A function to do additional symbol processing after reading the
      entire ELF symbol table.  */
-  bfd_boolean (*elf_backend_symbol_table_processing)
+  bool (*elf_backend_symbol_table_processing)
     (bfd *, elf_symbol_type *, unsigned int);
 
   /* A function to set the type of the info field.  Processor-specific
@@ -932,30 +1060,30 @@ struct elf_backend_data
 
   /* A function to return the linker hash table entry of a symbol that
      might be satisfied by an archive symbol.  */
-  struct elf_link_hash_entry * (*elf_backend_archive_symbol_lookup)
+  struct bfd_link_hash_entry * (*elf_backend_archive_symbol_lookup)
     (bfd *, struct bfd_link_info *, const char *);
 
   /* Return true if local section symbols should have a non-null st_name.
      NULL implies false.  */
-  bfd_boolean (*elf_backend_name_local_section_symbols)
+  bool (*elf_backend_name_local_section_symbols)
     (bfd *);
 
   /* A function to do additional processing on the ELF section header
      just before writing it out.  This is used to set the flags and
      type fields for some sections, or to actually write out data for
      unusual sections.  */
-  bfd_boolean (*elf_backend_section_processing)
+  bool (*elf_backend_section_processing)
     (bfd *, Elf_Internal_Shdr *);
 
   /* A function to handle unusual section types when creating BFD
      sections from ELF sections.  */
-  bfd_boolean (*elf_backend_section_from_shdr)
+  bool (*elf_backend_section_from_shdr)
     (bfd *, Elf_Internal_Shdr *, const char *, int);
 
   /* A function to convert machine dependent ELF section header flags to
      BFD internal section header flags.  */
-  bfd_boolean (*elf_backend_section_flags)
-    (flagword *, const Elf_Internal_Shdr *);
+  bool (*elf_backend_section_flags)
+    (const Elf_Internal_Shdr *);
 
   /* A function that returns a struct containing ELF section flags and
      type for the given BFD section.   */
@@ -964,20 +1092,20 @@ struct elf_backend_data
 
   /* A function to handle unusual program segment types when creating BFD
      sections from ELF program segments.  */
-  bfd_boolean (*elf_backend_section_from_phdr)
+  bool (*elf_backend_section_from_phdr)
     (bfd *, Elf_Internal_Phdr *, int, const char *);
 
   /* A function to set up the ELF section header for a BFD section in
      preparation for writing it out.  This is where the flags and type
      fields are set for unusual sections.  */
-  bfd_boolean (*elf_backend_fake_sections)
+  bool (*elf_backend_fake_sections)
     (bfd *, Elf_Internal_Shdr *, asection *);
 
   /* A function to get the ELF section index for a BFD section.  If
      this returns TRUE, the section was found.  If it is a normal ELF
      section, *RETVAL should be left unchanged.  If it is not a normal
      ELF section *RETVAL should be set to the SHN_xxxx index.  */
-  bfd_boolean (*elf_backend_section_from_bfd_section)
+  bool (*elf_backend_section_from_bfd_section)
     (bfd *, asection *, int *retval);
 
   /* If this field is not NULL, it is called by the add_symbols phase
@@ -988,7 +1116,7 @@ struct elf_backend_data
      handling all processor dependent symbol bindings and section
      indices, and must set at least *FLAGS and *SEC for each processor
      dependent case; failure to do so will cause a link error.  */
-  bfd_boolean (*elf_add_symbol_hook)
+  bool (*elf_add_symbol_hook)
     (bfd *abfd, struct bfd_link_info *info, Elf_Internal_Sym *,
      const char **name, flagword *flags, asection **sec, bfd_vma *value);
 
@@ -1008,44 +1136,52 @@ struct elf_backend_data
      created, and this function may modify the section flags if
      desired.  This function will normally create the .got and .plt
      sections, but different backends have different requirements.  */
-  bfd_boolean (*elf_backend_create_dynamic_sections)
+  bool (*elf_backend_create_dynamic_sections)
     (bfd *abfd, struct bfd_link_info *info);
 
   /* When creating a shared library, determine whether to omit the
      dynamic symbol for the section.  */
-  bfd_boolean (*elf_backend_omit_section_dynsym)
+  bool (*elf_backend_omit_section_dynsym)
     (bfd *output_bfd, struct bfd_link_info *info, asection *osec);
 
   /* Return TRUE if relocations of targets are compatible to the extent
      that CHECK_RELOCS will properly process them.  PR 4424.  */
-  bfd_boolean (*relocs_compatible) (const bfd_target *, const bfd_target *);
+  bool (*relocs_compatible) (const bfd_target *, const bfd_target *);
 
-  /* The CHECK_RELOCS function is called by the add_symbols phase of
-     the ELF backend linker.  It is called once for each section with
-     relocs of an object file, just after the symbols for the object
-     file have been added to the global linker hash table.  The
-     function must look through the relocs and do any special handling
-     required.  This generally means allocating space in the global
-     offset table, and perhaps allocating space for a reloc.  The
+  /* The CHECK_RELOCS function is called after all input files have been
+     opened.  It is called once for each section with relocs of an object
+     file.  The function must look through the relocs and do any special
+     handling required.  This generally means allocating space in the
+     global offset table, and perhaps allocating space for a reloc.  The
      relocs are always passed as Rela structures; if the section
      actually uses Rel structures, the r_addend field will always be
      zero.  */
-  bfd_boolean (*check_relocs)
+  bool (*check_relocs)
     (bfd *abfd, struct bfd_link_info *info, asection *o,
      const Elf_Internal_Rela *relocs);
 
+  /* The SIZE_RELATIVE_RELOCS function is called to size relative
+     relocations when mappig sections to segments.  */
+  bool (*size_relative_relocs)
+    (struct bfd_link_info *info, bool *need_layout);
+
+  /* The FINISH_RELATIVE_RELOCS function is called to finish relative
+     relocations in bfd_elf_final_link.  */
+  bool (*finish_relative_relocs)
+    (struct bfd_link_info *info);
+
   /* The CHECK_DIRECTIVES function is called once per input file by
      the add_symbols phase of the ELF backend linker.  The function
      must inspect the bfd and create any additional symbols according
      to any custom directives in the bfd.  */
-  bfd_boolean (*check_directives)
+  bool (*check_directives)
     (bfd *abfd, struct bfd_link_info *info);
 
   /* The NOTICE_AS_NEEDED function is called as the linker is about to
      handle an as-needed lib (ACT = notice_as_needed), and after the
      linker has decided to keep the lib (ACT = notice_needed) or when
      the lib is not needed (ACT = notice_not_needed).  */
-  bfd_boolean (*notice_as_needed)
+  bool (*notice_as_needed)
     (bfd *abfd, struct bfd_link_info *info, enum notice_asneeded_action act);
 
   /* The ADJUST_DYNAMIC_SYMBOL function is called by the ELF backend
@@ -1060,14 +1196,14 @@ struct elf_backend_data
      the link can deal with.  This will normally involve adding an
      entry to the .plt or .got or some such section, and setting the
      symbol to point to that.  */
-  bfd_boolean (*elf_backend_adjust_dynamic_symbol)
+  bool (*elf_backend_adjust_dynamic_symbol)
     (struct bfd_link_info *info, struct elf_link_hash_entry *h);
 
   /* The ALWAYS_SIZE_SECTIONS function is called by the backend linker
      after all the linker input files have been seen but before the
      section sizes have been set.  This is called after
      ADJUST_DYNAMIC_SYMBOL, but before SIZE_DYNAMIC_SECTIONS.  */
-  bfd_boolean (*elf_backend_always_size_sections)
+  bool (*elf_backend_always_size_sections)
     (bfd *output_bfd, struct bfd_link_info *info);
 
   /* The SIZE_DYNAMIC_SECTIONS function is called by the ELF backend
@@ -1080,9 +1216,15 @@ struct elf_backend_data
      .dynstr and .hash sections.  This function must handle the
      .interp section and any sections created by the
      CREATE_DYNAMIC_SECTIONS entry point.  */
-  bfd_boolean (*elf_backend_size_dynamic_sections)
+  bool (*elf_backend_size_dynamic_sections)
     (bfd *output_bfd, struct bfd_link_info *info);
 
+  /* The STRIP_ZERO_SIZED_DYNAMIC_SECTIONS function is called by the
+     ELF backend linker to strip zero-sized dynamic sections after
+     the section sizes have been set.  */
+  bool (*elf_backend_strip_zero_sized_dynamic_sections)
+    (struct bfd_link_info *info);
+
   /* Set TEXT_INDEX_SECTION and DATA_INDEX_SECTION, the output sections
      we keep to use as a base for relocs and symbols.  */
   void (*elf_backend_init_index_section)
@@ -1131,7 +1273,7 @@ struct elf_backend_data
      dynamic sections.  Note that FINISH_DYNAMIC_SYMBOL is called on
      all .dynsym symbols, while ADJUST_DYNAMIC_SYMBOL is only called
      on those symbols which are defined by a dynamic object.  */
-  bfd_boolean (*elf_backend_finish_dynamic_symbol)
+  bool (*elf_backend_finish_dynamic_symbol)
     (bfd *output_bfd, struct bfd_link_info *info,
      struct elf_link_hash_entry *h, Elf_Internal_Sym *sym);
 
@@ -1139,7 +1281,7 @@ struct elf_backend_data
      linker just before it writes all the dynamic sections out to the
      output file.  The FINISH_DYNAMIC_SYMBOL will have been called on
      all dynamic symbols.  */
-  bfd_boolean (*elf_backend_finish_dynamic_sections)
+  bool (*elf_backend_finish_dynamic_sections)
     (bfd *output_bfd, struct bfd_link_info *info);
 
   /* A function to do any beginning processing needed for the ELF file
@@ -1149,7 +1291,7 @@ struct elf_backend_data
 
   /* A function to do any final processing needed for the ELF file
      before writing it out.  */
-  bfd_boolean (*elf_backend_final_write_processing)
+  bool (*elf_backend_final_write_processing)
     (bfd *);
 
   /* This function is called by get_program_header_size.  It should
@@ -1160,17 +1302,17 @@ struct elf_backend_data
 
   /* This function is called to modify an existing segment map in a
      backend specific fashion.  */
-  bfd_boolean (*elf_backend_modify_segment_map)
+  bool (*elf_backend_modify_segment_map)
     (bfd *, struct bfd_link_info *);
 
   /* This function is called to modify program headers just before
      they are written.  */
-  bfd_boolean (*elf_backend_modify_headers)
+  bool (*elf_backend_modify_headers)
     (bfd *, struct bfd_link_info *);
 
   /* This function is called to see if the PHDR header should be
      checked for validity.  */
-  bfd_boolean (*elf_backend_allow_non_load_phdr)
+  bool (*elf_backend_allow_non_load_phdr)
     (bfd *,  const Elf_Internal_Phdr *, unsigned);
 
   /* This function is called before section garbage collection to
@@ -1180,7 +1322,7 @@ struct elf_backend_data
 
   /* This function is called during section garbage collection to
      mark sections that define global symbols.  */
-  bfd_boolean (*gc_mark_dynamic_ref)
+  bool (*gc_mark_dynamic_ref)
     (struct elf_link_hash_entry *, void *);
 
   /* This function is called during section gc to discover the section a
@@ -1189,12 +1331,12 @@ struct elf_backend_data
 
   /* This function, if defined, is called after the first gc marking pass
      to allow the backend to mark additional sections.  */
-  bfd_boolean (*gc_mark_extra_sections)
+  bool (*gc_mark_extra_sections)
     (struct bfd_link_info *, elf_gc_mark_hook_fn);
 
   /* This function is called to initialise ELF file header info.
      Customised versions can modify things like the OS and ABI version.  */
-  bfd_boolean (*elf_backend_init_file_header)
+  bool (*elf_backend_init_file_header)
     (bfd *, struct bfd_link_info *);
 
   /* This function, if defined, prints a symbol to file and returns the
@@ -1207,18 +1349,18 @@ struct elf_backend_data
      global symbols converted to locals are emitted into the symtab
      section.  It allows the backend to emit special local symbols
      not handled in the hash table.  */
-  bfd_boolean (*elf_backend_output_arch_local_syms)
+  bool (*elf_backend_output_arch_local_syms)
     (bfd *, struct bfd_link_info *, void *,
-     bfd_boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *,
-		      struct elf_link_hash_entry *));
+     int (*) (void *, const char *, Elf_Internal_Sym *, asection *,
+	      struct elf_link_hash_entry *));
 
   /* This function, if defined, is called after all symbols are emitted
      into the symtab section.  It allows the backend to emit special
      global symbols not handled in the hash table.  */
-  bfd_boolean (*elf_backend_output_arch_syms)
+  bool (*elf_backend_output_arch_syms)
     (bfd *, struct bfd_link_info *, void *,
-     bfd_boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *,
-		      struct elf_link_hash_entry *));
+     int (*) (void *, const char *, Elf_Internal_Sym *, asection *,
+	      struct elf_link_hash_entry *));
 
   /* Filter what symbols of the output file to include in the import
      library if one is created.  */
@@ -1237,17 +1379,16 @@ struct elf_backend_data
   /* Modify any information related to dynamic linking such that the
      symbol is not exported.  */
   void (*elf_backend_hide_symbol)
-    (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean);
+    (struct bfd_link_info *, struct elf_link_hash_entry *, bool);
 
   /* A function to do additional symbol fixup, called by
      _bfd_elf_fix_symbol_flags.  */
-  bfd_boolean (*elf_backend_fixup_symbol)
+  bool (*elf_backend_fixup_symbol)
     (struct bfd_link_info *, struct elf_link_hash_entry *);
 
   /* Merge the backend specific symbol attribute.  */
   void (*elf_backend_merge_symbol_attribute)
-    (struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean,
-     bfd_boolean);
+    (struct elf_link_hash_entry *, unsigned int, bool, bool);
 
   /* This function, if defined, will return a string containing the
      name of a target-specific dynamic tag.  */
@@ -1256,12 +1397,12 @@ struct elf_backend_data
 
   /* Decide whether an undefined symbol is special and can be ignored.
      This is the case for OPTIONAL symbols on IRIX.  */
-  bfd_boolean (*elf_backend_ignore_undef_symbol)
+  bool (*elf_backend_ignore_undef_symbol)
     (struct elf_link_hash_entry *);
 
   /* Emit relocations.  Overrides default routine for emitting relocs,
      except during a relocatable link, or if all relocs are being emitted.  */
-  bfd_boolean (*elf_backend_emit_relocs)
+  bool (*elf_backend_emit_relocs)
     (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *,
      struct elf_link_hash_entry **);
 
@@ -1282,22 +1423,22 @@ struct elf_backend_data
 
   /* Say whether to sort relocs output by ld -r and ld --emit-relocs,
      by r_offset.  If NULL, default to true.  */
-  bfd_boolean (*sort_relocs_p)
+  bool (*sort_relocs_p)
     (asection *);
 
   /* This function, if defined, is called when an NT_PRSTATUS note is found
      in a core file.  */
-  bfd_boolean (*elf_backend_grok_prstatus)
+  bool (*elf_backend_grok_prstatus)
     (bfd *, Elf_Internal_Note *);
 
   /* This function, if defined, is called when an NT_PSINFO or NT_PRPSINFO
      note is found in a core file.  */
-  bfd_boolean (*elf_backend_grok_psinfo)
+  bool (*elf_backend_grok_psinfo)
     (bfd *, Elf_Internal_Note *);
 
   /* This function, if defined, is called when a "FreeBSD" NT_PRSTATUS
      note is found in a core file.  */
-  bfd_boolean (*elf_backend_grok_freebsd_prstatus)
+  bool (*elf_backend_grok_freebsd_prstatus)
     (bfd *, Elf_Internal_Note *);
 
   /* This function, if defined, is called to write a note to a corefile.  */
@@ -1315,12 +1456,12 @@ struct elf_backend_data
 
   /* This function, if defined, removes information about discarded functions
      from other sections which mention them.  */
-  bfd_boolean (*elf_backend_discard_info)
+  bool (*elf_backend_discard_info)
     (bfd *, struct elf_reloc_cookie *, struct bfd_link_info *);
 
   /* This function, if defined, signals that the function above has removed
      the discarded relocations for this section.  */
-  bfd_boolean (*elf_backend_ignore_discarded_relocs)
+  bool (*elf_backend_ignore_discarded_relocs)
     (asection *);
 
   /* What to do when ld finds relocations against symbols defined in
@@ -1337,11 +1478,14 @@ struct elf_backend_data
   /* These functions tell elf-eh-frame whether to attempt to turn
      absolute or lsda encodings into pc-relative ones.  The default
      definition enables these transformations.  */
-  bfd_boolean (*elf_backend_can_make_relative_eh_frame)
+  bool (*elf_backend_can_make_relative_eh_frame)
      (bfd *, struct bfd_link_info *, asection *);
-  bfd_boolean (*elf_backend_can_make_lsda_relative_eh_frame)
+  bool (*elf_backend_can_make_lsda_relative_eh_frame)
      (bfd *, struct bfd_link_info *, asection *);
 
+  /* Tell linker to support multiple eh_frame sections.  */
+  bool elf_backend_can_make_multiple_eh_frame;
+
   /* This function returns an encoding after computing the encoded
      value (and storing it in ENCODED) for the given OFFSET into OSEC,
      to be stored in at LOC_OFFSET into the LOC_SEC input section.
@@ -1354,16 +1498,28 @@ struct elf_backend_data
 
   /* This function, if defined, may write out the given section.
      Returns TRUE if it did so and FALSE if the caller should.  */
-  bfd_boolean (*elf_backend_write_section)
+  bool (*elf_backend_write_section)
     (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
 
+  /* This function adds glibc version dependency.  */
+  void (*elf_backend_add_glibc_version_dependency)
+    (struct elf_find_verdep_info *);
+
+  /* This function, if defined, returns TRUE if it is section symbols
+     only that are considered local for the purpose of partitioning the
+     symbol table into local and global symbols.  This should be NULL
+     for most targets, in which case the correct thing will be done.
+     MIPS ELF, at least on the Irix 5, has special requirements.  */
+  bool (*elf_backend_elfsym_local_is_section)
+    (bfd *);
+
   /* The level of IRIX compatibility we're striving for.
      MIPS ELF specific function.  */
   irix_compat_t (*elf_backend_mips_irix_compat)
     (bfd *);
 
   reloc_howto_type *(*elf_backend_mips_rtype_to_howto)
-    (bfd *, unsigned int, bfd_boolean);
+    (bfd *, unsigned int, bool);
 
   /* The swapping table to use when dealing with ECOFF information.
      Used for the MIPS ELF .mdebug section.  */
@@ -1376,14 +1532,14 @@ struct elf_backend_data
      int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
 				bfd_size_type len));
 
-  bfd_boolean (*elf_backend_core_find_build_id) (bfd *, bfd_vma);
+  bool (*elf_backend_core_find_build_id) (bfd *, bfd_vma);
 
   /* This function is used by `_bfd_elf_get_synthetic_symtab';
      see elf.c.  */
   bfd_vma (*plt_sym_val) (bfd_vma, const asection *, const arelent *);
 
   /* Is symbol defined in common section?  */
-  bfd_boolean (*common_definition) (Elf_Internal_Sym *);
+  bool (*common_definition) (Elf_Internal_Sym *);
 
   /* Return a common section index for section.  */
   unsigned int (*common_section_index) (asection *);
@@ -1392,13 +1548,13 @@ struct elf_backend_data
   asection *(*common_section) (asection *);
 
   /* Return TRUE if we can merge 2 definitions.  */
-  bfd_boolean (*merge_symbol) (struct elf_link_hash_entry *,
+  bool (*merge_symbol) (struct elf_link_hash_entry *,
 			       const Elf_Internal_Sym *, asection **,
-			       bfd_boolean, bfd_boolean,
+			       bool, bool,
 			       bfd *, const asection *);
 
   /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
-  bfd_boolean (*elf_hash_symbol) (struct elf_link_hash_entry *);
+  bool (*elf_hash_symbol) (struct elf_link_hash_entry *);
 
   /* If non-NULL, called to register the location of XLAT_LOC within
      .MIPS.xhash at which real final dynindx for H will be written.
@@ -1408,7 +1564,7 @@ struct elf_backend_data
     (struct elf_link_hash_entry *h, bfd_vma xlat_loc);
 
   /* Return TRUE if type is a function symbol type.  */
-  bfd_boolean (*is_function_type) (unsigned int type);
+  bool (*is_function_type) (unsigned int type);
 
   /* If the ELF symbol SYM might be a function in SEC, return the
      function size and set *CODE_OFF to the function's entry point,
@@ -1427,7 +1583,7 @@ struct elf_backend_data
      until it returns TRUE.  Most of the times it is called ISECTION will be
      set to an input section that might be associated with the output section.
      The last time that it is called, ISECTION will be set to NULL.  */
-  bfd_boolean (*elf_backend_copy_special_section_fields)
+  bool (*elf_backend_copy_special_section_fields)
     (const bfd *ibfd, bfd *obfd, const Elf_Internal_Shdr *isection,
      Elf_Internal_Shdr *osection);
 
@@ -1478,7 +1634,7 @@ struct elf_backend_data
 
   /* Handle merging unknown attributes; either warn and return TRUE,
      or give an error and return FALSE.  */
-  bfd_boolean (*obj_attrs_handle_unknown) (bfd *, int);
+  bool (*obj_attrs_handle_unknown) (bfd *, int);
 
   /* Parse GNU properties.  Return the property kind.  If the property
      is corrupt, issue an error message and return property_corrupt.  */
@@ -1487,7 +1643,7 @@ struct elf_backend_data
 						  unsigned int);
 
   /* Merge GNU properties.  Return TRUE if property is updated.  */
-  bfd_boolean (*merge_gnu_properties) (struct bfd_link_info *, bfd *, bfd *,
+  bool (*merge_gnu_properties) (struct bfd_link_info *, bfd *, bfd *,
 				       elf_property *, elf_property *);
 
   /* Set up GNU properties.  */
@@ -1503,6 +1659,22 @@ struct elf_backend_data
   /* Opcode representing no unwind.  */
   int (*cant_unwind_opcode) (struct bfd_link_info *);
 
+  /* Called when emitting an ELF symbol whoes input version had an
+     ST_SHNDX field set to a value in the range SHN_LOPROC..SHN_HIOS.
+     Returns the value to be installed in the ST_SHNDX field of the
+     emitted symbol.  If not defined, the value is left unchanged.  */
+  unsigned int (*symbol_section_index) (bfd *, elf_symbol_type *);
+  
+  /* Called when a section has extra reloc sections.  */
+  bool (*init_secondary_reloc_section) (bfd *, Elf_Internal_Shdr *,
+					const char *, unsigned int);
+
+  /* Called when after loading the normal relocs for a section.  */
+  bool (*slurp_secondary_relocs) (bfd *, asection *, asymbol **, bool);
+
+  /* Called after writing the normal relocs for a section.  */
+  bool (*write_secondary_relocs) (bfd *, asection *);
+
   /* This is non-zero if static TLS segments require a special alignment.  */
   unsigned static_tls_alignment;
 
@@ -1684,6 +1856,11 @@ struct bfd_elf_section_data
   /* Link from a text section to its .eh_frame_entry section.  */
   asection *eh_frame_entry;
 
+  /* TRUE if the section has secondary reloc sections associated with it.
+     FIXME: In the future it might be better to change this into a list
+     of secondary reloc sections, making lookup easier and faster.  */
+  bool has_secondary_relocs;
+
   /* A pointer used for various section optimizations.  */
   void *sec_info;
 };
@@ -1713,7 +1890,7 @@ struct bfd_elf_section_data
 #define LEAST_KNOWN_OBJ_ATTRIBUTE 2
 
 /* The maximum number of known object attributes for any target.  */
-#define NUM_KNOWN_OBJ_ATTRIBUTES 71
+#define NUM_KNOWN_OBJ_ATTRIBUTES 77
 
 /* The value of an object attribute.  The type indicates whether the attribute
    holds and integer, a string, or both.  It can also indicate that there can
@@ -1791,42 +1968,54 @@ struct output_elf_obj_tdata
   /* STT_SECTION symbols for each section */
   asymbol **section_syms;
 
-  /* Used to determine if PT_GNU_EH_FRAME segment header should be
-     created.  */
-  asection *eh_frame_hdr;
-
   /* NT_GNU_BUILD_ID note type info.  */
   struct
   {
-    bfd_boolean (*after_write_object_contents) (bfd *);
+    bool (*after_write_object_contents) (bfd *);
     const char *style;
     asection *sec;
   } build_id;
 
+  /* FDO_PACKAGING_METADATA note type info.  */
+  struct
+  {
+    bool (*after_write_object_contents) (bfd *);
+    const char *json;
+    asection *sec;
+  } package_metadata;
+
   /* Records the result of `get_program_header_size'.  */
   bfd_size_type program_header_size;
 
   /* Used when laying out sections.  */
   file_ptr next_file_pos;
 
-  int num_section_syms;
+  /* Linker information.  */
+  struct bfd_link_info *link_info;
+
+  unsigned int num_section_syms;
   unsigned int shstrtab_section, strtab_section;
 
   /* Segment flags for the PT_GNU_STACK segment.  */
   unsigned int stack_flags;
 
+  /* Used to determine if PT_GNU_SFRAME segment header should be
+     created.  */
+  asection *sframe;
+
   /* Used to determine if the e_flags field has been initialized */
-  bfd_boolean flags_init;
+  bool flags_init;
 };
 
-/* Indicate if the bfd contains SHF_GNU_MBIND sections or symbols that
-   have the STT_GNU_IFUNC symbol type or STB_GNU_UNIQUE binding.  Used
-   to set the osabi field in the ELF header structure.  */
+/* Indicate if the bfd contains SHF_GNU_MBIND/SHF_GNU_RETAIN sections or
+   symbols that have the STT_GNU_IFUNC symbol type or STB_GNU_UNIQUE
+   binding.  Used to set the osabi field in the ELF header structure.  */
 enum elf_gnu_osabi
 {
   elf_gnu_osabi_mbind = 1 << 0,
   elf_gnu_osabi_ifunc = 1 << 1,
   elf_gnu_osabi_unique = 1 << 2,
+  elf_gnu_osabi_retain = 1 << 3,
 };
 
 typedef struct elf_section_list
@@ -1860,10 +2049,20 @@ struct elf_obj_tdata
   Elf_Internal_Shdr dynversym_hdr;
   Elf_Internal_Shdr dynverref_hdr;
   Elf_Internal_Shdr dynverdef_hdr;
+  Elf_Internal_Sym *dt_symtab;
+  bfd_byte *dt_versym;
+  bfd_byte *dt_verdef;
+  bfd_byte *dt_verneed;
+  size_t dt_symtab_count;
+  size_t dt_verdef_count;
+  size_t dt_verneed_count;
+  char * dt_strtab;
+  size_t dt_strsz;
   elf_section_list * symtab_shndx_list;
   bfd_vma gp;				/* The gp value */
   unsigned int gp_size;			/* The gp size */
   unsigned int num_elf_sections;	/* elf_sect_ptr size */
+  unsigned char *being_created;
 
   /* A mapping from external symbols to entries in the linker hash
      table, used when linking.  This is indexed by the symbol index
@@ -1898,7 +2097,7 @@ struct elf_obj_tdata
   void *line_info;
 
   /* A place to stash dwarf1 info for this bfd.  */
-  struct dwarf1_debug *dwarf1_find_line_info;
+  void *dwarf1_find_line_info;
 
   /* A place to stash dwarf2 info for this bfd.  */
   void *dwarf2_find_line_info;
@@ -1937,7 +2136,7 @@ struct elf_obj_tdata
   struct sdt_note *sdt_note_head;
 
   Elf_Internal_Shdr **group_sect_ptr;
-  int num_group;
+  unsigned int num_group;
 
   /* Index into group_sect_ptr, updated by setup_group when finding a
      section's group.  Used to optimize subsequent group searches.  */
@@ -1956,12 +2155,16 @@ struct elf_obj_tdata
   ENUM_BITFIELD (dynamic_lib_link_class) dyn_lib_class : 4;
 
   /* Whether the bfd uses OS specific bits that require ELFOSABI_GNU.  */
-  ENUM_BITFIELD (elf_gnu_osabi) has_gnu_osabi : 3;
+  ENUM_BITFIELD (elf_gnu_osabi) has_gnu_osabi : 4;
 
   /* Whether if the bfd contains the GNU_PROPERTY_NO_COPY_ON_PROTECTED
      property.  */
   unsigned int has_no_copy_on_protected : 1;
 
+  /* Whether if the bfd contains the
+     GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS property.  */
+  unsigned int has_indirect_extern_access : 1;
+
   /* Irix 5 often screws up the symbol table, sorting local symbols
      after global symbols.  This flag is set if the symbol table in
      this BFD appears to be screwed up.  If it is, we ignore the
@@ -1969,6 +2172,9 @@ struct elf_obj_tdata
      symbols.  */
   unsigned int bad_symtab : 1;
 
+  /* Set if DT_FLAGS_1 has DF_1_PIE set.  */
+  unsigned int is_pie : 1;
+
   /* Information grabbed from an elf core file.  */
   struct core_elf_obj_tdata *core;
 
@@ -1984,9 +2190,10 @@ struct elf_obj_tdata
 #define elf_elfsections(bfd)	(elf_tdata(bfd) -> elf_sect_ptr)
 #define elf_numsections(bfd)	(elf_tdata(bfd) -> num_elf_sections)
 #define elf_seg_map(bfd)	(elf_tdata(bfd) -> o->seg_map)
+#define elf_link_info(bfd)	(elf_tdata(bfd) -> o->link_info)
 #define elf_next_file_pos(bfd)	(elf_tdata(bfd) -> o->next_file_pos)
-#define elf_eh_frame_hdr(bfd)	(elf_tdata(bfd) -> o->eh_frame_hdr)
 #define elf_stack_flags(bfd)	(elf_tdata(bfd) -> o->stack_flags)
+#define elf_sframe(bfd)		(elf_tdata(bfd) -> o->sframe)
 #define elf_shstrtab(bfd)	(elf_tdata(bfd) -> o->strtab_ptr)
 #define elf_onesymtab(bfd)	(elf_tdata(bfd) -> symtab_section)
 #define elf_symtab_shndx_list(bfd)	(elf_tdata(bfd) -> symtab_shndx_list)
@@ -2014,6 +2221,7 @@ struct elf_obj_tdata
 #define elf_dyn_lib_class(bfd)	(elf_tdata(bfd) -> dyn_lib_class)
 #define elf_bad_symtab(bfd)	(elf_tdata(bfd) -> bad_symtab)
 #define elf_flags_init(bfd)	(elf_tdata(bfd) -> o->flags_init)
+#define elf_use_dt_symtab_p(bfd) (elf_tdata(bfd) -> dt_symtab_count != 0)
 #define elf_known_obj_attributes(bfd) (elf_tdata (bfd) -> known_obj_attributes)
 #define elf_other_obj_attributes(bfd) (elf_tdata (bfd) -> other_obj_attributes)
 #define elf_known_obj_attributes_proc(bfd) \
@@ -2023,6 +2231,8 @@ struct elf_obj_tdata
 #define elf_properties(bfd) (elf_tdata (bfd) -> properties)
 #define elf_has_no_copy_on_protected(bfd) \
   (elf_tdata(bfd) -> has_no_copy_on_protected)
+#define elf_has_indirect_extern_access(bfd) \
+  (elf_tdata(bfd) -> has_indirect_extern_access)
 
 extern void _bfd_elf_swap_verdef_in
   (bfd *, const Elf_External_Verdef *, Elf_Internal_Verdef *);
@@ -2056,12 +2266,12 @@ extern char * bfd_elf_get_str_section (b
 extern const char *bfd_elf_sym_name
   (bfd *, Elf_Internal_Shdr *, Elf_Internal_Sym *, asection *);
 
-extern bfd_boolean _bfd_elf_copy_private_bfd_data
+extern bool _bfd_elf_copy_private_bfd_data
   (bfd *, bfd *);
-extern bfd_boolean _bfd_elf_print_private_bfd_data
+extern bool _bfd_elf_print_private_bfd_data
   (bfd *, void *);
 const char * _bfd_elf_get_symbol_version_string
-  (bfd *, asymbol *, bfd_boolean *);
+  (bfd *, asymbol *, bool, bool *);
 extern void bfd_elf_print_symbol
   (bfd *, void *, asymbol *, bfd_print_symbol_type);
 
@@ -2070,7 +2280,7 @@ extern unsigned int _bfd_elf_eh_frame_ad
 extern bfd_byte _bfd_elf_encode_eh_address
   (bfd *abfd, struct bfd_link_info *info, asection *osec, bfd_vma offset,
    asection *loc_sec, bfd_vma loc_offset, bfd_vma *encoded);
-extern bfd_boolean _bfd_elf_can_make_relative
+extern bool _bfd_elf_can_make_relative
   (bfd *input_bfd, struct bfd_link_info *info, asection *eh_frame_section);
 
 extern enum elf_reloc_type_class _bfd_elf_reloc_type_class
@@ -2090,15 +2300,15 @@ extern unsigned long bfd_elf_gnu_hash
 
 extern bfd_reloc_status_type bfd_elf_generic_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-extern bfd_boolean bfd_elf_allocate_object
+extern bool bfd_elf_allocate_object
   (bfd *, size_t, enum elf_target_id);
-extern bfd_boolean bfd_elf_make_object
+extern bool bfd_elf_make_object
   (bfd *);
-extern bfd_boolean bfd_elf_mkcorefile
+extern bool bfd_elf_mkcorefile
   (bfd *);
-extern bfd_boolean _bfd_elf_make_section_from_shdr
+extern bool _bfd_elf_make_section_from_shdr
   (bfd *, Elf_Internal_Shdr *, const char *, int);
-extern bfd_boolean _bfd_elf_make_section_from_phdr
+extern bool _bfd_elf_make_section_from_phdr
   (bfd *, Elf_Internal_Phdr *, int, const char *);
 extern struct bfd_hash_entry *_bfd_elf_link_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
@@ -2110,27 +2320,27 @@ extern void _bfd_elf_link_hash_copy_indi
   (struct bfd_link_info *, struct elf_link_hash_entry *,
    struct elf_link_hash_entry *);
 extern void _bfd_elf_link_hash_hide_symbol
-  (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean);
+  (struct bfd_link_info *, struct elf_link_hash_entry *, bool);
 extern void _bfd_elf_link_hide_symbol
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
-extern bfd_boolean _bfd_elf_link_hash_fixup_symbol
+extern bool _bfd_elf_link_hash_fixup_symbol
   (struct bfd_link_info *, struct elf_link_hash_entry *);
-extern bfd_boolean _bfd_elf_link_hash_table_init
+extern bool _bfd_elf_link_hash_table_init
   (struct elf_link_hash_table *, bfd *,
    struct bfd_hash_entry *(*)
      (struct bfd_hash_entry *, struct bfd_hash_table *, const char *),
    unsigned int, enum elf_target_id);
-extern bfd_boolean _bfd_elf_slurp_version_tables
-  (bfd *, bfd_boolean);
-extern bfd_boolean _bfd_elf_merge_sections
+extern bool _bfd_elf_slurp_version_tables
+  (bfd *, bool);
+extern bool _bfd_elf_merge_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_match_sections_by_type
+extern bool _bfd_elf_match_sections_by_type
   (bfd *, const asection *, bfd *, const asection *);
-extern bfd_boolean bfd_elf_is_group_section
+extern bool bfd_elf_is_group_section
   (bfd *, const struct bfd_section *);
 extern const char *bfd_elf_group_name
   (bfd *, const struct bfd_section *);
-extern bfd_boolean _bfd_elf_section_already_linked
+extern bool _bfd_elf_section_already_linked
   (bfd *, asection *, struct bfd_link_info *);
 extern void bfd_elf_set_group_contents
   (bfd *, asection *, void *);
@@ -2141,25 +2351,25 @@ extern asection *_bfd_elf_check_kept_sec
 #define _bfd_elf_link_just_syms _bfd_generic_link_just_syms
 extern void _bfd_elf_copy_link_hash_symbol_type
   (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
-extern bfd_boolean _bfd_elf_size_group_sections
+extern bool _bfd_elf_size_group_sections
   (struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_fixup_group_sections
+extern bool _bfd_elf_fixup_group_sections
 (bfd *, asection *);
-extern bfd_boolean _bfd_elf_copy_private_header_data
+extern bool _bfd_elf_copy_private_header_data
   (bfd *, bfd *);
-extern bfd_boolean _bfd_elf_copy_private_symbol_data
+extern bool _bfd_elf_copy_private_symbol_data
   (bfd *, asymbol *, bfd *, asymbol *);
 #define _bfd_generic_init_private_section_data \
   _bfd_elf_init_private_section_data
-extern bfd_boolean _bfd_elf_init_private_section_data
+extern bool _bfd_elf_init_private_section_data
   (bfd *, asection *, bfd *, asection *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_copy_private_section_data
+extern bool _bfd_elf_copy_private_section_data
   (bfd *, asection *, bfd *, asection *);
-extern bfd_boolean _bfd_elf_write_object_contents
+extern bool _bfd_elf_write_object_contents
   (bfd *);
-extern bfd_boolean _bfd_elf_write_corefile_contents
+extern bool _bfd_elf_write_corefile_contents
   (bfd *);
-extern bfd_boolean _bfd_elf_set_section_contents
+extern bool _bfd_elf_set_section_contents
   (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);
 extern long _bfd_elf_get_symtab_upper_bound
   (bfd *);
@@ -2176,9 +2386,9 @@ extern long _bfd_elf_get_reloc_upper_bou
 extern long _bfd_elf_canonicalize_reloc
   (bfd *, sec_ptr, arelent **, asymbol **);
 extern asection * _bfd_elf_get_dynamic_reloc_section
-  (bfd *, asection *, bfd_boolean);
+  (bfd *, asection *, bool);
 extern asection * _bfd_elf_make_dynamic_reloc_section
-  (asection *, bfd *, unsigned int, bfd *, bfd_boolean);
+  (asection *, bfd *, unsigned int, bfd *, bool);
 extern long _bfd_elf_get_dynamic_reloc_upper_bound
   (bfd *);
 extern long _bfd_elf_canonicalize_dynamic_reloc
@@ -2187,18 +2397,21 @@ extern asymbol *_bfd_elf_make_empty_symb
   (bfd *);
 extern void _bfd_elf_get_symbol_info
   (bfd *, asymbol *, symbol_info *);
-extern bfd_boolean _bfd_elf_is_local_label_name
+extern bool _bfd_elf_is_local_label_name
   (bfd *, const char *);
 extern alent *_bfd_elf_get_lineno
   (bfd *, asymbol *);
-extern bfd_boolean _bfd_elf_set_arch_mach
+extern bool _bfd_elf_set_arch_mach
   (bfd *, enum bfd_architecture, unsigned long);
-extern bfd_boolean _bfd_elf_find_nearest_line
+extern bool _bfd_elf_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *);
-extern bfd_boolean _bfd_elf_find_line
+extern bool _bfd_elf_find_nearest_line_with_alt
+  (bfd *, const char *, asymbol **, asection *, bfd_vma,
+   const char **, const char **, unsigned int *, unsigned int *);
+extern bool _bfd_elf_find_line
   (bfd *, asymbol **, asymbol *, const char **, unsigned int *);
-extern bfd_boolean _bfd_elf_find_inliner_info
+extern bool _bfd_elf_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *);
 extern asymbol *_bfd_elf_find_function
   (bfd *, asymbol **, asection *, bfd_vma, const char **, const char **);
@@ -2206,23 +2419,23 @@ extern asymbol *_bfd_elf_find_function
 #define _bfd_elf_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
 extern int _bfd_elf_sizeof_headers
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_new_section_hook
+extern bool _bfd_elf_new_section_hook
   (bfd *, asection *);
 extern const struct bfd_elf_special_section *_bfd_elf_get_special_section
   (const char *, const struct bfd_elf_special_section *, unsigned int);
 extern const struct bfd_elf_special_section *_bfd_elf_get_sec_type_attr
   (bfd *, asection *);
 
-extern bfd_boolean _bfd_elf_link_hide_sym_by_version
+extern bool _bfd_elf_link_hide_sym_by_version
   (struct bfd_link_info *, struct elf_link_hash_entry *);
 
 /* If the target doesn't have reloc handling written yet:  */
-extern bfd_boolean _bfd_elf_no_info_to_howto
+extern bool _bfd_elf_no_info_to_howto
   (bfd *, arelent *, Elf_Internal_Rela *);
 
-extern bfd_boolean bfd_section_from_shdr
+extern bool bfd_section_from_shdr
   (bfd *, unsigned int shindex);
-extern bfd_boolean bfd_section_from_phdr
+extern bool bfd_section_from_phdr
   (bfd *, Elf_Internal_Phdr *, int);
 
 extern int _bfd_elf_symbol_from_bfd_symbol
@@ -2238,7 +2451,7 @@ extern struct elf_strtab_hash * _bfd_elf
 extern void _bfd_elf_strtab_free
   (struct elf_strtab_hash *);
 extern size_t _bfd_elf_strtab_add
-  (struct elf_strtab_hash *, const char *, bfd_boolean);
+  (struct elf_strtab_hash *, const char *, bool);
 extern void _bfd_elf_strtab_addref
   (struct elf_strtab_hash *, size_t);
 extern void _bfd_elf_strtab_delref
@@ -2259,68 +2472,80 @@ extern bfd_size_type _bfd_elf_strtab_off
   (struct elf_strtab_hash *, size_t);
 extern const char * _bfd_elf_strtab_str
   (struct elf_strtab_hash *, size_t idx, bfd_size_type *offset);
-extern bfd_boolean _bfd_elf_strtab_emit
+extern bool _bfd_elf_strtab_emit
   (bfd *, struct elf_strtab_hash *);
 extern void _bfd_elf_strtab_finalize
   (struct elf_strtab_hash *);
 
-extern bfd_boolean bfd_elf_parse_eh_frame_entries
+extern bool bfd_elf_parse_eh_frame_entries
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_parse_eh_frame_entry
+extern bool _bfd_elf_parse_eh_frame_entry
   (struct bfd_link_info *, asection *, struct elf_reloc_cookie *);
 extern void _bfd_elf_parse_eh_frame
   (bfd *, struct bfd_link_info *, asection *, struct elf_reloc_cookie *);
-extern bfd_boolean _bfd_elf_end_eh_frame_parsing
+extern bool _bfd_elf_end_eh_frame_parsing
   (struct bfd_link_info *info);
 
-extern bfd_boolean _bfd_elf_discard_section_eh_frame
+extern bool _bfd_elf_discard_section_eh_frame
   (bfd *, struct bfd_link_info *, asection *,
-   bfd_boolean (*) (bfd_vma, void *), struct elf_reloc_cookie *);
-extern bfd_boolean _bfd_elf_adjust_eh_frame_global_symbol
+   bool (*) (bfd_vma, void *), struct elf_reloc_cookie *);
+extern bool _bfd_elf_adjust_eh_frame_global_symbol
   (struct elf_link_hash_entry *, void *);
-extern bfd_boolean _bfd_elf_discard_section_eh_frame_hdr
-  (bfd *, struct bfd_link_info *);
+extern bool _bfd_elf_discard_section_eh_frame_hdr
+  (struct bfd_link_info *);
 extern bfd_vma _bfd_elf_eh_frame_section_offset
   (bfd *, struct bfd_link_info *, asection *, bfd_vma);
-extern bfd_boolean _bfd_elf_write_section_eh_frame
+extern bool _bfd_elf_write_section_eh_frame
   (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
-bfd_boolean _bfd_elf_write_section_eh_frame_entry
+bool _bfd_elf_write_section_eh_frame_entry
   (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
-extern bfd_boolean _bfd_elf_fixup_eh_frame_hdr (struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_write_section_eh_frame_hdr
+extern bool _bfd_elf_fixup_eh_frame_hdr (struct bfd_link_info *);
+extern bool _bfd_elf_write_section_eh_frame_hdr
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_eh_frame_present
+extern bool _bfd_elf_eh_frame_present
   (struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_eh_frame_entry_present
+extern bool _bfd_elf_eh_frame_entry_present
   (struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_maybe_strip_eh_frame_hdr
+extern bool _bfd_elf_maybe_strip_eh_frame_hdr
   (struct bfd_link_info *);
 
-extern bfd_boolean _bfd_elf_hash_symbol (struct elf_link_hash_entry *);
+extern bool _bfd_elf_sframe_present
+  (struct bfd_link_info *);
+extern bool _bfd_elf_parse_sframe
+  (bfd *, struct bfd_link_info *, asection *, struct elf_reloc_cookie *);
+extern bool _bfd_elf_discard_section_sframe
+  (asection *, bool (*) (bfd_vma, void *), struct elf_reloc_cookie *);
+extern bool _bfd_elf_merge_section_sframe
+  (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
+extern bool _bfd_elf_write_section_sframe
+  (bfd *, struct bfd_link_info *);
+extern bool _bfd_elf_set_section_sframe (bfd *, struct bfd_link_info *);
+
+extern bool _bfd_elf_hash_symbol (struct elf_link_hash_entry *);
 
 extern long _bfd_elf_link_lookup_local_dynindx
   (struct bfd_link_info *, bfd *, long);
-extern bfd_boolean _bfd_elf_compute_section_file_positions
+extern bool _bfd_elf_compute_section_file_positions
   (bfd *, struct bfd_link_info *);
 extern file_ptr _bfd_elf_assign_file_position_for_section
-  (Elf_Internal_Shdr *, file_ptr, bfd_boolean);
-extern bfd_boolean _bfd_elf_modify_headers
+  (Elf_Internal_Shdr *, file_ptr, bool);
+extern bool _bfd_elf_modify_headers
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean _bfd_elf_validate_reloc
+extern bool _bfd_elf_validate_reloc
   (bfd *, arelent *);
 
-extern bfd_boolean bfd_elf_record_link_assignment
-  (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
-   bfd_boolean);
-extern bfd_boolean bfd_elf_stack_segment_size (bfd *, struct bfd_link_info *,
-					       const char *, bfd_vma);
-extern bfd_boolean bfd_elf_size_dynamic_sections
+extern bool bfd_elf_record_link_assignment
+  (bfd *, struct bfd_link_info *, const char *, bool,
+   bool);
+extern bool bfd_elf_stack_segment_size (bfd *, struct bfd_link_info *,
+					const char *, bfd_vma);
+extern bool bfd_elf_size_dynamic_sections
   (bfd *, const char *, const char *, const char *, const char *, const char *,
    const char * const *, struct bfd_link_info *, struct bfd_section **);
-extern bfd_boolean bfd_elf_size_dynsym_hash_dynstr
+extern bool bfd_elf_size_dynsym_hash_dynstr
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_elf_get_bfd_needed_list
+extern bool bfd_elf_get_bfd_needed_list
   (bfd *, struct bfd_link_needed_list **);
 extern struct bfd_link_needed_list *bfd_elf_get_needed_list
   (bfd *, struct bfd_link_info *);
@@ -2341,18 +2566,18 @@ extern unsigned int _bfd_elf_default_act
 extern struct bfd_section *_bfd_elf_tls_setup
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean _bfd_elf_link_create_dynamic_sections
+extern bool _bfd_elf_link_create_dynamic_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_omit_section_dynsym_default
+extern bool _bfd_elf_omit_section_dynsym_default
   (bfd *, struct bfd_link_info *, asection *);
-extern bfd_boolean _bfd_elf_omit_section_dynsym_all
+extern bool _bfd_elf_omit_section_dynsym_all
   (bfd *, struct bfd_link_info *, asection *);
-extern bfd_boolean _bfd_elf_create_dynamic_sections
+extern bool _bfd_elf_create_dynamic_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_create_got_section
+extern bool _bfd_elf_create_got_section
   (bfd *, struct bfd_link_info *);
 extern asection *_bfd_elf_section_for_symbol
-  (struct elf_reloc_cookie *, unsigned long, bfd_boolean);
+  (struct elf_reloc_cookie *, unsigned long, bool);
 extern struct elf_link_hash_entry *_bfd_elf_define_linkage_sym
   (bfd *, struct bfd_link_info *, asection *, const char *);
 extern void _bfd_elf_init_1_index_section
@@ -2360,56 +2585,71 @@ extern void _bfd_elf_init_1_index_sectio
 extern void _bfd_elf_init_2_index_sections
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean _bfd_elfcore_make_pseudosection
+extern bool _bfd_elfcore_make_pseudosection
   (bfd *, char *, size_t, ufile_ptr);
 extern char *_bfd_elfcore_strndup
   (bfd *, char *, size_t);
 
 extern Elf_Internal_Rela *_bfd_elf_link_read_relocs
-  (bfd *, asection *, void *, Elf_Internal_Rela *, bfd_boolean);
+  (bfd *, asection *, void *, Elf_Internal_Rela *, bool);
+extern Elf_Internal_Rela *_bfd_elf_link_info_read_relocs
+  (bfd *, struct bfd_link_info *, asection *, void *, Elf_Internal_Rela *,
+   bool);
 
-extern bfd_boolean _bfd_elf_link_output_relocs
+extern bool _bfd_elf_link_output_relocs
   (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *,
    struct elf_link_hash_entry **);
 
-extern bfd_boolean _bfd_elf_adjust_dynamic_copy
+extern void _bfd_elf_link_add_glibc_version_dependency
+  (struct elf_find_verdep_info *, const char *[]);
+
+extern void _bfd_elf_link_add_dt_relr_dependency
+  (struct elf_find_verdep_info *);
+
+extern bool _bfd_elf_adjust_dynamic_copy
   (struct bfd_link_info *, struct elf_link_hash_entry *, asection *);
 
-extern bfd_boolean _bfd_elf_dynamic_symbol_p
-  (struct elf_link_hash_entry *, struct bfd_link_info *, bfd_boolean);
+extern bool _bfd_elf_dynamic_symbol_p
+  (struct elf_link_hash_entry *, struct bfd_link_info *, bool);
 
-extern bfd_boolean _bfd_elf_symbol_refs_local_p
-  (struct elf_link_hash_entry *, struct bfd_link_info *, bfd_boolean);
+extern bool _bfd_elf_symbol_refs_local_p
+  (struct elf_link_hash_entry *, struct bfd_link_info *, bool);
 
 extern bfd_reloc_status_type bfd_elf_perform_complex_relocation
   (bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, bfd_vma);
 
-extern bfd_boolean _bfd_elf_setup_sections
+extern bool _bfd_elf_setup_sections
   (bfd *);
 
+extern bool _bfd_elf_get_dynamic_symbols
+  (bfd *, Elf_Internal_Phdr *, Elf_Internal_Phdr *, size_t,
+   bfd_size_type);
+extern asection *_bfd_elf_get_section_from_dynamic_symbol
+  (bfd *, Elf_Internal_Sym *);
+
 extern struct bfd_link_hash_entry *bfd_elf_define_start_stop
   (struct bfd_link_info *, const char *, asection *);
 
-extern bfd_boolean _bfd_elf_init_file_header (bfd *, struct bfd_link_info *);
+extern bool _bfd_elf_init_file_header (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean _bfd_elf_final_write_processing (bfd *);
+extern bool _bfd_elf_final_write_processing (bfd *);
 
-extern const bfd_target *bfd_elf32_object_p
+extern bfd_cleanup bfd_elf32_object_p
   (bfd *);
-extern const bfd_target *bfd_elf32_core_file_p
+extern bfd_cleanup bfd_elf32_core_file_p
   (bfd *);
 extern char *bfd_elf32_core_file_failing_command
   (bfd *);
 extern int bfd_elf32_core_file_failing_signal
   (bfd *);
-extern bfd_boolean bfd_elf32_core_file_matches_executable_p
+extern bool bfd_elf32_core_file_matches_executable_p
   (bfd *, bfd *);
 extern int bfd_elf32_core_file_pid
   (bfd *);
-extern bfd_boolean _bfd_elf32_core_find_build_id
+extern bool _bfd_elf32_core_find_build_id
   (bfd *, bfd_vma);
 
-extern bfd_boolean bfd_elf32_swap_symbol_in
+extern bool bfd_elf32_swap_symbol_in
   (bfd *, const void *, const void *, Elf_Internal_Sym *);
 extern void bfd_elf32_swap_symbol_out
   (bfd *, const Elf_Internal_Sym *, void *, void *);
@@ -2430,34 +2670,34 @@ extern void bfd_elf32_swap_dyn_in
 extern void bfd_elf32_swap_dyn_out
   (bfd *, const Elf_Internal_Dyn *, void *);
 extern long bfd_elf32_slurp_symbol_table
-  (bfd *, asymbol **, bfd_boolean);
-extern bfd_boolean bfd_elf32_write_shdrs_and_ehdr
+  (bfd *, asymbol **, bool);
+extern bool bfd_elf32_write_shdrs_and_ehdr
   (bfd *);
 extern int bfd_elf32_write_out_phdrs
   (bfd *, const Elf_Internal_Phdr *, unsigned int);
-extern bfd_boolean bfd_elf32_checksum_contents
+extern bool bfd_elf32_checksum_contents
   (bfd * , void (*) (const void *, size_t, void *), void *);
 extern void bfd_elf32_write_relocs
   (bfd *, asection *, void *);
-extern bfd_boolean bfd_elf32_slurp_reloc_table
-  (bfd *, asection *, asymbol **, bfd_boolean);
+extern bool bfd_elf32_slurp_reloc_table
+  (bfd *, asection *, asymbol **, bool);
 
-extern const bfd_target *bfd_elf64_object_p
+extern bfd_cleanup bfd_elf64_object_p
   (bfd *);
-extern const bfd_target *bfd_elf64_core_file_p
+extern bfd_cleanup bfd_elf64_core_file_p
   (bfd *);
 extern char *bfd_elf64_core_file_failing_command
   (bfd *);
 extern int bfd_elf64_core_file_failing_signal
   (bfd *);
-extern bfd_boolean bfd_elf64_core_file_matches_executable_p
+extern bool bfd_elf64_core_file_matches_executable_p
   (bfd *, bfd *);
 extern int bfd_elf64_core_file_pid
   (bfd *);
-extern bfd_boolean _bfd_elf64_core_find_build_id
+extern bool _bfd_elf64_core_find_build_id
   (bfd *, bfd_vma);
 
-extern bfd_boolean bfd_elf64_swap_symbol_in
+extern bool bfd_elf64_swap_symbol_in
   (bfd *, const void *, const void *, Elf_Internal_Sym *);
 extern void bfd_elf64_swap_symbol_out
   (bfd *, const Elf_Internal_Sym *, void *, void *);
@@ -2478,45 +2718,53 @@ extern void bfd_elf64_swap_dyn_in
 extern void bfd_elf64_swap_dyn_out
   (bfd *, const Elf_Internal_Dyn *, void *);
 extern long bfd_elf64_slurp_symbol_table
-  (bfd *, asymbol **, bfd_boolean);
-extern bfd_boolean bfd_elf64_write_shdrs_and_ehdr
+  (bfd *, asymbol **, bool);
+extern bool bfd_elf64_write_shdrs_and_ehdr
   (bfd *);
 extern int bfd_elf64_write_out_phdrs
   (bfd *, const Elf_Internal_Phdr *, unsigned int);
-extern bfd_boolean bfd_elf64_checksum_contents
+extern bool bfd_elf64_checksum_contents
   (bfd * , void (*) (const void *, size_t, void *), void *);
 extern void bfd_elf64_write_relocs
   (bfd *, asection *, void *);
-extern bfd_boolean bfd_elf64_slurp_reloc_table
-  (bfd *, asection *, asymbol **, bfd_boolean);
+extern bool bfd_elf64_slurp_reloc_table
+  (bfd *, asection *, asymbol **, bool);
 
-extern bfd_boolean _bfd_elf_default_relocs_compatible
+extern bool _bfd_elf_default_relocs_compatible
   (const bfd_target *, const bfd_target *);
 
-extern bfd_boolean _bfd_elf_relocs_compatible
+extern bool _bfd_elf_relocs_compatible
   (const bfd_target *, const bfd_target *);
-extern bfd_boolean _bfd_elf_notice_as_needed
+extern bool _bfd_elf_notice_as_needed
   (bfd *, struct bfd_link_info *, enum notice_asneeded_action);
 
-extern struct elf_link_hash_entry *_bfd_elf_archive_symbol_lookup
+extern struct bfd_link_hash_entry *_bfd_elf_archive_symbol_lookup
   (bfd *, struct bfd_link_info *, const char *);
-extern bfd_boolean bfd_elf_link_add_symbols
+extern bool bfd_elf_link_add_symbols
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_add_dynamic_entry
+extern bool _bfd_elf_add_dynamic_entry
   (struct bfd_link_info *, bfd_vma, bfd_vma);
-extern bfd_boolean _bfd_elf_link_check_relocs
+extern bool _bfd_elf_strip_zero_sized_dynamic_sections
+  (struct bfd_link_info *);
+extern int bfd_elf_add_dt_needed_tag
   (bfd *, struct bfd_link_info *);
+extern bool _bfd_elf_link_check_relocs
+  (bfd *, struct bfd_link_info *);
+extern bool _bfd_elf_link_iterate_on_relocs
+ (bfd *, struct bfd_link_info *,
+  bool (*) (bfd *, struct bfd_link_info *, asection *,
+	    const Elf_Internal_Rela *));
 
-extern bfd_boolean bfd_elf_link_record_dynamic_symbol
+extern bool bfd_elf_link_record_dynamic_symbol
   (struct bfd_link_info *, struct elf_link_hash_entry *);
 
 extern int bfd_elf_link_record_local_dynamic_symbol
   (struct bfd_link_info *, bfd *, long);
 
-extern bfd_boolean _bfd_elf_close_and_cleanup
+extern bool _bfd_elf_free_cached_info
   (bfd *);
 
-extern bfd_boolean _bfd_elf_common_definition
+extern bool _bfd_elf_common_definition
   (Elf_Internal_Sym *);
 
 extern unsigned int _bfd_elf_common_section_index
@@ -2533,22 +2781,22 @@ extern bfd_reloc_status_type _bfd_elf_re
   (bfd *, arelent *, struct bfd_symbol *, void *,
    asection *, bfd *, char **);
 
-extern bfd_boolean bfd_elf_final_link
+extern bool bfd_elf_final_link
   (bfd *, struct bfd_link_info *);
 
 extern void _bfd_elf_gc_keep
   (struct bfd_link_info *info);
 
-extern bfd_boolean bfd_elf_gc_mark_dynamic_ref_symbol
+extern bool bfd_elf_gc_mark_dynamic_ref_symbol
   (struct elf_link_hash_entry *h, void *inf);
 
-extern bfd_boolean bfd_elf_gc_sections
+extern bool bfd_elf_gc_sections
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean bfd_elf_gc_record_vtinherit
+extern bool bfd_elf_gc_record_vtinherit
   (bfd *, asection *, struct elf_link_hash_entry *, bfd_vma);
 
-extern bfd_boolean bfd_elf_gc_record_vtentry
+extern bool bfd_elf_gc_record_vtentry
   (bfd *, asection *, struct elf_link_hash_entry *, bfd_vma);
 
 extern asection *_bfd_elf_gc_mark_hook
@@ -2557,38 +2805,38 @@ extern asection *_bfd_elf_gc_mark_hook
 
 extern asection *_bfd_elf_gc_mark_rsec
   (struct bfd_link_info *, asection *, elf_gc_mark_hook_fn,
-   struct elf_reloc_cookie *, bfd_boolean *);
+   struct elf_reloc_cookie *, bool *);
 
-extern bfd_boolean _bfd_elf_gc_mark_reloc
+extern bool _bfd_elf_gc_mark_reloc
   (struct bfd_link_info *, asection *, elf_gc_mark_hook_fn,
    struct elf_reloc_cookie *);
 
-extern bfd_boolean _bfd_elf_gc_mark_fdes
+extern bool _bfd_elf_gc_mark_fdes
   (struct bfd_link_info *, asection *, asection *, elf_gc_mark_hook_fn,
    struct elf_reloc_cookie *);
 
-extern bfd_boolean _bfd_elf_gc_mark
+extern bool _bfd_elf_gc_mark
   (struct bfd_link_info *, asection *, elf_gc_mark_hook_fn);
 
-extern bfd_boolean _bfd_elf_gc_mark_extra_sections
+extern bool _bfd_elf_gc_mark_extra_sections
   (struct bfd_link_info *, elf_gc_mark_hook_fn);
 
-extern bfd_boolean bfd_elf_gc_common_finalize_got_offsets
+extern bool bfd_elf_gc_common_finalize_got_offsets
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean bfd_elf_gc_common_final_link
+extern bool bfd_elf_gc_common_final_link
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean bfd_elf_reloc_symbol_deleted_p
+extern bool bfd_elf_reloc_symbol_deleted_p
   (bfd_vma, void *);
 
 extern struct elf_segment_map * _bfd_elf_make_dynamic_segment
   (bfd *, asection *);
 
-extern bfd_boolean _bfd_elf_map_sections_to_segments
-  (bfd *, struct bfd_link_info *);
+extern bool _bfd_elf_map_sections_to_segments
+  (bfd *, struct bfd_link_info *, bool *);
 
-extern bfd_boolean _bfd_elf_is_function_type (unsigned int);
+extern bool _bfd_elf_is_function_type (unsigned int);
 
 extern bfd_size_type _bfd_elf_maybe_function_sym (const asymbol *, asection *,
 						  bfd_vma *);
@@ -2597,7 +2845,7 @@ extern asection *_bfd_elf_plt_get_reloc_
 
 extern int bfd_elf_get_default_section_type (flagword);
 
-extern bfd_boolean bfd_elf_lookup_section_flags
+extern bool bfd_elf_lookup_section_flags
   (struct bfd_link_info *, struct flag_info *, asection *);
 
 extern Elf_Internal_Phdr * _bfd_elf_find_segment_containing_section
@@ -2610,9 +2858,9 @@ extern unsigned int _bfd_elf_ppc_at_tls_
 extern unsigned int _bfd_elf_ppc_at_tprel_transform
   (unsigned int, unsigned int);
 /* PowerPC elf_object_p tweak.  */
-extern bfd_boolean _bfd_elf_ppc_set_arch (bfd *);
+extern bool _bfd_elf_ppc_set_arch (bfd *);
 /* PowerPC .gnu.attributes handling common to both 32-bit and 64-bit.  */
-extern bfd_boolean _bfd_elf_ppc_merge_fp_attributes
+extern bool _bfd_elf_ppc_merge_fp_attributes
   (bfd *, struct bfd_link_info *);
 
 /* Return an upper bound on the number of bytes required to store a
@@ -2646,6 +2894,8 @@ extern char *elfcore_write_prxfpreg
   (bfd *, char *, int *, const void *, int);
 extern char *elfcore_write_xstatereg
   (bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_x86_segbases
+  (bfd *, char *, int *, const void *, int);
 extern char *elfcore_write_ppc_vmx
   (bfd *, char *, int *, const void *, int);
 extern char *elfcore_write_ppc_vsx
@@ -2712,10 +2962,34 @@ extern char *elfcore_write_aarch_sve
   (bfd *, char *, int *, const void *, int);
 extern char *elfcore_write_aarch_pauth
   (bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_aarch_mte
+  (bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_aarch_ssve
+  (bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_aarch_za
+  (bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_aarch_zt
+  (bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_arc_v2
+  (bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_riscv_csr
+  (bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_gdb_tdesc
+  (bfd *, char *, int *, const void *, int);
 extern char *elfcore_write_lwpstatus
   (bfd *, char *, int *, long, int, const void *);
 extern char *elfcore_write_register_note
   (bfd *, char *, int *, const char *, const void *, int);
+extern char *elfcore_write_file_note
+  (bfd *, char *, int *, const void*, int);
+extern char *elfcore_write_loongarch_cpucfg
+  (bfd *, char *, int *, const void*, int);
+extern char *elfcore_write_loongarch_lbt
+  (bfd *, char *, int *, const void*, int);
+extern char *elfcore_write_loongarch_lsx
+  (bfd *, char *, int *, const void*, int);
+extern char *elfcore_write_loongarch_lasx
+  (bfd *, char *, int *, const void*, int);
 
 /* Internal structure which holds information to be included in the
    PRPSINFO section of Linux core files.
@@ -2759,14 +3033,16 @@ extern bfd *_bfd_elf64_bfd_from_remote_m
 extern bfd_vma bfd_elf_obj_attr_size (bfd *);
 extern void bfd_elf_set_obj_attr_contents (bfd *, bfd_byte *, bfd_vma);
 extern int bfd_elf_get_obj_attr_int (bfd *, int, unsigned int);
-extern void bfd_elf_add_obj_attr_int (bfd *, int, unsigned int, unsigned int);
+extern obj_attribute *bfd_elf_add_obj_attr_int
+  (bfd *, int, unsigned int, unsigned int);
 #define bfd_elf_add_proc_attr_int(BFD, TAG, VALUE) \
   bfd_elf_add_obj_attr_int ((BFD), OBJ_ATTR_PROC, (TAG), (VALUE))
-extern void bfd_elf_add_obj_attr_string (bfd *, int, unsigned int, const char *);
+extern obj_attribute *bfd_elf_add_obj_attr_string
+  (bfd *, int, unsigned int, const char *);
 #define bfd_elf_add_proc_attr_string(BFD, TAG, VALUE) \
   bfd_elf_add_obj_attr_string ((BFD), OBJ_ATTR_PROC, (TAG), (VALUE))
-extern void bfd_elf_add_obj_attr_int_string (bfd *, int, unsigned int,
-					     unsigned int, const char *);
+extern obj_attribute *bfd_elf_add_obj_attr_int_string
+  (bfd *, int, unsigned int, unsigned int, const char *);
 #define bfd_elf_add_proc_attr_int_string(BFD, TAG, INTVAL, STRVAL) \
   bfd_elf_add_obj_attr_int_string ((BFD), OBJ_ATTR_PROC, (TAG), \
 				   (INTVAL), (STRVAL))
@@ -2775,14 +3051,14 @@ extern char *_bfd_elf_attr_strdup (bfd *
 extern void _bfd_elf_copy_obj_attributes (bfd *, bfd *);
 extern int _bfd_elf_obj_attrs_arg_type (bfd *, int, unsigned int);
 extern void _bfd_elf_parse_attributes (bfd *, Elf_Internal_Shdr *);
-extern bfd_boolean _bfd_elf_merge_object_attributes
+extern bool _bfd_elf_merge_object_attributes
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_merge_unknown_attribute_low (bfd *, bfd *, int);
-extern bfd_boolean _bfd_elf_merge_unknown_attribute_list (bfd *, bfd *);
+extern bool _bfd_elf_merge_unknown_attribute_low (bfd *, bfd *, int);
+extern bool _bfd_elf_merge_unknown_attribute_list (bfd *, bfd *);
 extern Elf_Internal_Shdr *_bfd_elf_single_rel_hdr (asection *sec);
-extern bfd_boolean elf_read_notes (bfd *, file_ptr, bfd_size_type, size_t);
+extern bool elf_read_notes (bfd *, file_ptr, bfd_size_type, size_t);
 
-extern bfd_boolean _bfd_elf_parse_gnu_properties
+extern bool _bfd_elf_parse_gnu_properties
   (bfd *, Elf_Internal_Note *);
 extern elf_property * _bfd_elf_get_property
   (bfd *, unsigned int, unsigned int);
@@ -2790,7 +3066,7 @@ extern bfd *_bfd_elf_link_setup_gnu_prop
   (struct bfd_link_info *);
 extern bfd_size_type _bfd_elf_convert_gnu_property_size
   (bfd *, bfd *);
-extern bfd_boolean _bfd_elf_convert_gnu_properties
+extern bool _bfd_elf_convert_gnu_properties
   (bfd *, asection *, bfd *, bfd_byte **, bfd_size_type *);
 
 /* The linker may need to keep track of the number of relocs that it
@@ -2813,12 +3089,12 @@ struct elf_dyn_relocs
   bfd_size_type pc_count;
 };
 
-extern bfd_boolean _bfd_elf_create_ifunc_sections
+extern bool _bfd_elf_create_ifunc_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_elf_allocate_ifunc_dyn_relocs
+extern bool _bfd_elf_allocate_ifunc_dyn_relocs
   (struct bfd_link_info *, struct elf_link_hash_entry *,
-   struct elf_dyn_relocs **, bfd_boolean *, unsigned int,
-   unsigned int, unsigned int, bfd_boolean);
+   struct elf_dyn_relocs **, unsigned int, unsigned int,
+   unsigned int, bool);
 
 extern void elf_append_rela (bfd *, asection *, Elf_Internal_Rela *);
 extern void elf_append_rel (bfd *, asection *, Elf_Internal_Rela *);
@@ -2828,7 +3104,27 @@ extern bfd_vma elf64_r_sym (bfd_vma);
 extern bfd_vma elf32_r_info (bfd_vma, bfd_vma);
 extern bfd_vma elf32_r_sym (bfd_vma);
 
-extern bfd_boolean is_debuginfo_file (bfd *);
+extern bool is_debuginfo_file (bfd *);
+
+
+extern bool _bfd_elf_init_secondary_reloc_section
+  (bfd *, Elf_Internal_Shdr *, const char *, unsigned int);
+extern bool _bfd_elf_slurp_secondary_reloc_section
+  (bfd *, asection *, asymbol **, bool);
+extern bool _bfd_elf_copy_special_section_fields
+  (const bfd *, bfd *, const Elf_Internal_Shdr *, Elf_Internal_Shdr *);
+extern bool _bfd_elf_write_secondary_reloc_section
+  (bfd *, asection *);
+extern unsigned int _bfd_elf_symbol_section_index
+  (bfd *, elf_symbol_type *);
+
+extern asection *_bfd_elf_readonly_dynrelocs
+  (struct elf_link_hash_entry *);
+extern bool _bfd_elf_maybe_set_textrel
+  (struct elf_link_hash_entry *, void *);
+
+extern bool _bfd_elf_add_dynamic_tags
+  (bfd *, struct bfd_link_info *, bool);
 
 /* Large common section.  */
 extern asection _bfd_elf_large_com_section;
@@ -2836,8 +3132,8 @@ extern asection _bfd_elf_large_com_secti
 /* Hash for local symbol with the first section id, ID, in the input
    file and the local symbol index, SYM.  */
 #define ELF_LOCAL_SYMBOL_HASH(ID, SYM) \
-  (((((ID) & 0xff) << 24) | (((ID) & 0xff00) << 8)) \
-   ^ (SYM) ^ ((ID) >> 16))
+  (((((ID) & 0xffU) << 24) | (((ID) & 0xff00) << 8)) \
+   ^ (SYM) ^ (((ID) & 0xffff0000U) >> 16))
 
 /* This is the condition under which finish_dynamic_symbol will be called.
    If our finish_dynamic_symbol isn't called, we'll need to do something
@@ -2858,7 +3154,7 @@ extern asection _bfd_elf_large_com_secti
       /* It seems this can happen with erroneous or unsupported		\
 	 input (mixing a.out and elf in an archive, for example.)  */	\
       if (sym_hashes == NULL)						\
-	return FALSE;							\
+	return false;							\
 									\
       h = sym_hashes[r_symndx - symtab_hdr->sh_info];			\
 									\
@@ -2871,9 +3167,9 @@ extern asection _bfd_elf_large_com_secti
 	     || h->root.type == bfd_link_hash_warning)			\
 	h = (struct elf_link_hash_entry *) h->root.u.i.link;		\
 									\
-      warned = FALSE;							\
-      ignored = FALSE;							\
-      unresolved_reloc = FALSE;						\
+      warned = false;							\
+      ignored = false;							\
+      unresolved_reloc = false;						\
       relocation = 0;							\
       if (h->root.type == bfd_link_hash_defined				\
 	  || h->root.type == bfd_link_hash_defweak)			\
@@ -2885,7 +3181,7 @@ extern asection _bfd_elf_large_com_secti
 	       relocation value for this symbol.  output_section	\
 	       is typically NULL for symbols satisfied by a shared	\
 	       library.  */						\
-	    unresolved_reloc = TRUE;					\
+	    unresolved_reloc = true;					\
 	  else								\
 	    relocation = (h->root.u.def.value				\
 			  + sec->output_section->vma			\
@@ -2895,18 +3191,18 @@ extern asection _bfd_elf_large_com_secti
 	;								\
       else if (info->unresolved_syms_in_objects == RM_IGNORE		\
 	       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)		\
-	ignored = TRUE;							\
+	ignored = true;							\
       else if (!bfd_link_relocatable (info))				\
 	{								\
-	  bfd_boolean err;						\
-	  err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR	\
-		 || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT);	\
+	  bool err = ((info->unresolved_syms_in_objects == RM_DIAGNOSE	\
+		       && !info->warn_unresolved_syms)			\
+		      || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT);	\
 	  (*info->callbacks->undefined_symbol) (info,			\
 						h->root.root.string,	\
 						input_bfd,		\
 						input_section,		\
 						rel->r_offset, err);	\
-	  warned = TRUE;						\
+	  warned = true;						\
 	}								\
       (void) unresolved_reloc;						\
       (void) warned;							\
@@ -2974,11 +3270,11 @@ extern asection _bfd_elf_large_com_secti
 	 || ((INFO)->dynamic && !(H)->dynamic)))
 
 /* Determine if a section contains CTF data, using its name.  */
-static inline bfd_boolean
+static inline bool
 bfd_section_is_ctf (const asection *sec)
 {
   const char *name = bfd_section_name (sec);
-  return strncmp (name, ".ctf", 4) == 0 && (name[4] == 0 || name[4] == '.');
+  return startswith (name, ".ctf") && (name[4] == 0 || name[4] == '.');
 }
 
 #ifdef __cplusplus
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf.c ./bfd/elf.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 /* ELF executable support for BFD.
 
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -50,10 +50,11 @@ SECTION
 #endif
 
 static int elf_sort_sections (const void *, const void *);
-static bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
-static bfd_boolean swap_out_syms (bfd *, struct elf_strtab_hash **, int) ;
-static bfd_boolean elf_parse_notes (bfd *abfd, char *buf, size_t size,
-				    file_ptr offset, size_t align);
+static bool assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
+static bool swap_out_syms (bfd *, struct elf_strtab_hash **, int,
+			   struct bfd_link_info *);
+static bool elf_parse_notes (bfd *abfd, char *buf, size_t size,
+			     file_ptr offset, size_t align);
 
 /* Swap version information in and out.  The version information is
    currently size independent.  If that ever changes, this code will
@@ -195,23 +196,15 @@ _bfd_elf_swap_versym_out (bfd *abfd,
 unsigned long
 bfd_elf_hash (const char *namearg)
 {
-  const unsigned char *name = (const unsigned char *) namearg;
-  unsigned long h = 0;
-  unsigned long g;
-  int ch;
+  uint32_t h = 0;
 
-  while ((ch = *name++) != '\0')
+  for (const unsigned char *name = (const unsigned char *) namearg;
+       *name; name++)
     {
-      h = (h << 4) + ch;
-      if ((g = (h & 0xf0000000)) != 0)
-	{
-	  h ^= g >> 24;
-	  /* The ELF ABI says `h &= ~g', but this is equivalent in
-	     this case and on some machines one insn instead of two.  */
-	  h ^= g;
-	}
+      h = (h << 4) + *name;
+      h ^= (h >> 24) & 0xf0;
     }
-  return h & 0xffffffff;
+  return h & 0x0fffffff;
 }
 
 /* DT_GNU_HASH hash function.  Do not change this function; you will
@@ -220,18 +213,17 @@ bfd_elf_hash (const char *namearg)
 unsigned long
 bfd_elf_gnu_hash (const char *namearg)
 {
-  const unsigned char *name = (const unsigned char *) namearg;
-  unsigned long h = 5381;
-  unsigned char ch;
-
-  while ((ch = *name++) != '\0')
-    h = (h << 5) + h + ch;
-  return h & 0xffffffff;
+  uint32_t h = 5381;
+
+  for (const unsigned char *name = (const unsigned char *) namearg;
+       *name; name++)
+    h = (h << 5) + h + *name;
+  return h;
 }
 
 /* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with
    the object_id field of an elf_obj_tdata field set to OBJECT_ID.  */
-bfd_boolean
+bool
 bfd_elf_allocate_object (bfd *abfd,
 			 size_t object_size,
 			 enum elf_target_id object_id)
@@ -239,22 +231,22 @@ bfd_elf_allocate_object (bfd *abfd,
   BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
   abfd->tdata.any = bfd_zalloc (abfd, object_size);
   if (abfd->tdata.any == NULL)
-    return FALSE;
+    return false;
 
   elf_object_id (abfd) = object_id;
   if (abfd->direction != read_direction)
     {
       struct output_elf_obj_tdata *o = bfd_zalloc (abfd, sizeof *o);
       if (o == NULL)
-	return FALSE;
+	return false;
       elf_tdata (abfd)->o = o;
       elf_program_header_size (abfd) = (bfd_size_type) -1;
     }
-  return TRUE;
+  return true;
 }
 
 
-bfd_boolean
+bool
 bfd_elf_make_object (bfd *abfd)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -262,12 +254,12 @@ bfd_elf_make_object (bfd *abfd)
 				  bed->target_id);
 }
 
-bfd_boolean
+bool
 bfd_elf_mkcorefile (bfd *abfd)
 {
   /* I think this can be done just like an object file.  */
   if (!abfd->xvec->_bfd_set_format[(int) bfd_object] (abfd))
-    return FALSE;
+    return false;
   elf_tdata (abfd)->core = bfd_zalloc (abfd, sizeof (*elf_tdata (abfd)->core));
   return elf_tdata (abfd)->core != NULL;
 }
@@ -296,16 +288,10 @@ bfd_elf_get_str_section (bfd *abfd, unsi
       /* Allocate and clear an extra byte at the end, to prevent crashes
 	 in case the string table is not terminated.  */
       if (shstrtabsize + 1 <= 1
-	  || shstrtabsize > bfd_get_file_size (abfd)
 	  || bfd_seek (abfd, offset, SEEK_SET) != 0
-	  || (shstrtab = (bfd_byte *) bfd_alloc (abfd, shstrtabsize + 1)) == NULL)
-	shstrtab = NULL;
-      else if (bfd_bread (shstrtab, shstrtabsize, abfd) != shstrtabsize)
+	  || (shstrtab = _bfd_alloc_and_read (abfd, shstrtabsize + 1,
+					      shstrtabsize)) == NULL)
 	{
-	  if (bfd_get_error () != bfd_error_system_call)
-	    bfd_set_error (bfd_error_file_truncated);
-	  bfd_release (abfd, shstrtab);
-	  shstrtab = NULL;
 	  /* Once we've failed to read it, make sure we don't keep
 	     trying.  Otherwise, we'll keep allocating space for
 	     the string table over and over.  */
@@ -402,7 +388,7 @@ bfd_elf_get_elf_syms (bfd *ibfd,
   Elf_Internal_Sym *isymend;
   const struct elf_backend_data *bed;
   size_t extsym_size;
-  bfd_size_type amt;
+  size_t amt;
   file_ptr pos;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
@@ -411,6 +397,17 @@ bfd_elf_get_elf_syms (bfd *ibfd,
   if (symcount == 0)
     return intsym_buf;
 
+  if (elf_use_dt_symtab_p (ibfd))
+    {
+      /* Use dynamic symbol table.  */
+      if (elf_tdata (ibfd)->dt_symtab_count != symcount + symoffset)
+	{
+	  bfd_set_error (bfd_error_invalid_operation);
+	  return NULL;
+	}
+      return elf_tdata (ibfd)->dt_symtab + symoffset;
+    }
+
   /* Normal syms might have section extension entries.  */
   shndx_hdr = NULL;
   if (elf_symtab_shndx_list (ibfd) != NULL)
@@ -434,9 +431,10 @@ bfd_elf_get_elf_syms (bfd *ibfd,
 
       if (shndx_hdr == NULL)
 	{
-	  if (symtab_hdr == & elf_symtab_hdr (ibfd))
-	    /* Not really accurate, but this was how the old code used to work.  */
-	    shndx_hdr = & elf_symtab_shndx_list (ibfd)->hdr;
+	  if (symtab_hdr == &elf_symtab_hdr (ibfd))
+	    /* Not really accurate, but this was how the old code used
+	       to work.  */
+	    shndx_hdr = &elf_symtab_shndx_list (ibfd)->hdr;
 	  /* Otherwise we do nothing.  The assumption is that
 	     the index table will not be needed.  */
 	}
@@ -448,16 +446,21 @@ bfd_elf_get_elf_syms (bfd *ibfd,
   alloc_intsym = NULL;
   bed = get_elf_backend_data (ibfd);
   extsym_size = bed->s->sizeof_sym;
-  amt = (bfd_size_type) symcount * extsym_size;
+  if (_bfd_mul_overflow (symcount, extsym_size, &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      intsym_buf = NULL;
+      goto out;
+    }
   pos = symtab_hdr->sh_offset + symoffset * extsym_size;
   if (extsym_buf == NULL)
     {
-      alloc_ext = bfd_malloc2 (symcount, extsym_size);
+      alloc_ext = bfd_malloc (amt);
       extsym_buf = alloc_ext;
     }
   if (extsym_buf == NULL
       || bfd_seek (ibfd, pos, SEEK_SET) != 0
-      || bfd_bread (extsym_buf, amt, ibfd) != amt)
+      || bfd_read (extsym_buf, amt, ibfd) != amt)
     {
       intsym_buf = NULL;
       goto out;
@@ -467,17 +470,21 @@ bfd_elf_get_elf_syms (bfd *ibfd,
     extshndx_buf = NULL;
   else
     {
-      amt = (bfd_size_type) symcount * sizeof (Elf_External_Sym_Shndx);
+      if (_bfd_mul_overflow (symcount, sizeof (Elf_External_Sym_Shndx), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  intsym_buf = NULL;
+	  goto out;
+	}
       pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
       if (extshndx_buf == NULL)
 	{
-	  alloc_extshndx = (Elf_External_Sym_Shndx *)
-	      bfd_malloc2 (symcount, sizeof (Elf_External_Sym_Shndx));
+	  alloc_extshndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
 	  extshndx_buf = alloc_extshndx;
 	}
       if (extshndx_buf == NULL
 	  || bfd_seek (ibfd, pos, SEEK_SET) != 0
-	  || bfd_bread (extshndx_buf, amt, ibfd) != amt)
+	  || bfd_read (extshndx_buf, amt, ibfd) != amt)
 	{
 	  intsym_buf = NULL;
 	  goto out;
@@ -486,8 +493,12 @@ bfd_elf_get_elf_syms (bfd *ibfd,
 
   if (intsym_buf == NULL)
     {
-      alloc_intsym = (Elf_Internal_Sym *)
-	  bfd_malloc2 (symcount, sizeof (Elf_Internal_Sym));
+      if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  goto out;
+	}
+      alloc_intsym = (Elf_Internal_Sym *) bfd_malloc (amt);
       intsym_buf = alloc_intsym;
       if (intsym_buf == NULL)
 	goto out;
@@ -506,17 +517,14 @@ bfd_elf_get_elf_syms (bfd *ibfd,
 	_bfd_error_handler (_("%pB symbol number %lu references"
 			      " nonexistent SHT_SYMTAB_SHNDX section"),
 			    ibfd, (unsigned long) symoffset);
-	if (alloc_intsym != NULL)
-	  free (alloc_intsym);
+	free (alloc_intsym);
 	intsym_buf = NULL;
 	goto out;
       }
 
  out:
-  if (alloc_ext != NULL)
-    free (alloc_ext);
-  if (alloc_extshndx != NULL)
-    free (alloc_extshndx);
+  free (alloc_ext);
+  free (alloc_extshndx);
 
   return intsym_buf;
 }
@@ -589,7 +597,7 @@ group_signature (bfd *abfd, Elf_Internal
 
 /* Set next_in_group list pointer, and group name for NEWSECT.  */
 
-static bfd_boolean
+static bool
 setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
 {
   unsigned int num_group = elf_tdata (abfd)->num_group;
@@ -629,15 +637,14 @@ setup_group (bfd *abfd, Elf_Internal_Shd
 	{
 	  /* We keep a list of elf section headers for group sections,
 	     so we can find them quickly.  */
-	  bfd_size_type amt;
+	  size_t amt;
 
 	  elf_tdata (abfd)->num_group = num_group;
-	  elf_tdata (abfd)->group_sect_ptr = (Elf_Internal_Shdr **)
-	      bfd_alloc2 (abfd, num_group, sizeof (Elf_Internal_Shdr *));
+	  amt = num_group * sizeof (Elf_Internal_Shdr *);
+	  elf_tdata (abfd)->group_sect_ptr
+	    = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
 	  if (elf_tdata (abfd)->group_sect_ptr == NULL)
-	    return FALSE;
-	  memset (elf_tdata (abfd)->group_sect_ptr, 0,
-		  num_group * sizeof (Elf_Internal_Shdr *));
+	    return false;
 	  num_group = 0;
 
 	  for (i = 0; i < shnum; i++)
@@ -652,35 +659,20 @@ setup_group (bfd *abfd, Elf_Internal_Shd
 		  /* Make sure the group section has a BFD section
 		     attached to it.  */
 		  if (!bfd_section_from_shdr (abfd, i))
-		    return FALSE;
+		    return false;
 
 		  /* Add to list of sections.  */
 		  elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
 		  num_group += 1;
 
 		  /* Read the raw contents.  */
-		  BFD_ASSERT (sizeof (*dest) >= 4);
-		  amt = shdr->sh_size * sizeof (*dest) / 4;
-		  shdr->contents = (unsigned char *)
-		    bfd_alloc2 (abfd, shdr->sh_size, sizeof (*dest) / 4);
-		  /* PR binutils/4110: Handle corrupt group headers.  */
-		  if (shdr->contents == NULL)
-		    {
-		      _bfd_error_handler
-			/* xgettext:c-format */
-			(_("%pB: corrupt size field in group section"
-			   " header: %#" PRIx64),
-			 abfd, (uint64_t) shdr->sh_size);
-		      bfd_set_error (bfd_error_bad_value);
-		      -- num_group;
-		      continue;
-		    }
-
-		  memset (shdr->contents, 0, amt);
-
-		  if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
-		      || (bfd_bread (shdr->contents, shdr->sh_size, abfd)
-			  != shdr->sh_size))
+		  BFD_ASSERT (sizeof (*dest) >= 4 && sizeof (*dest) % 4 == 0);
+		  shdr->contents = NULL;
+		  if (_bfd_mul_overflow (shdr->sh_size,
+					 sizeof (*dest) / 4, &amt)
+		      || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
+		      || !(shdr->contents
+			   = _bfd_alloc_and_read (abfd, amt, shdr->sh_size)))
 		    {
 		      _bfd_error_handler
 			/* xgettext:c-format */
@@ -689,10 +681,6 @@ setup_group (bfd *abfd, Elf_Internal_Shd
 			 abfd, (uint64_t) shdr->sh_size);
 		      bfd_set_error (bfd_error_bad_value);
 		      -- num_group;
-		      /* PR 17510: If the group contents are even
-			 partially corrupt, do not allow any of the
-			 contents to be used.  */
-		      memset (shdr->contents, 0, amt);
 		      continue;
 		    }
 
@@ -712,6 +700,7 @@ setup_group (bfd *abfd, Elf_Internal_Shd
 		      idx = H_GET_32 (abfd, src);
 		      if (src == shdr->contents)
 			{
+			  dest->shdr = NULL;
 			  dest->flags = idx;
 			  if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
 			    shdr->bfd_section->flags
@@ -784,7 +773,7 @@ setup_group (bfd *abfd, Elf_Internal_Shd
 				  abfd, shdr->bfd_section);
 	      elf_tdata (abfd)->group_sect_ptr[i] = NULL;
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  n_elt = shdr->sh_size / 4;
 
@@ -819,7 +808,7 @@ setup_group (bfd *abfd, Elf_Internal_Shd
 
 		    gname = group_signature (abfd, shdr);
 		    if (gname == NULL)
-		      return FALSE;
+		      return false;
 		    elf_group_name (newsect) = gname;
 
 		    /* Start a circular list with one element.  */
@@ -843,17 +832,21 @@ setup_group (bfd *abfd, Elf_Internal_Shd
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: no group info for section '%pA'"),
 			  abfd, newsect);
-      return FALSE;
+      /* PR 29532: Return true here, even though the group info has not been
+	 read.  Separate debug info files can have empty group sections, but
+	 we do not want this to prevent them from being loaded as otherwise
+	 GDB will not be able to use them.  */
+      return true;
     }
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_elf_setup_sections (bfd *abfd)
 {
   unsigned int i;
   unsigned int num_group = elf_tdata (abfd)->num_group;
-  bfd_boolean result = TRUE;
+  bool result = true;
   asection *s;
 
   /* Process SHF_LINK_ORDER.  */
@@ -863,17 +856,14 @@ _bfd_elf_setup_sections (bfd *abfd)
       if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
 	{
 	  unsigned int elfsec = this_hdr->sh_link;
-	  /* FIXME: The old Intel compiler and old strip/objcopy may
-	     not set the sh_link or sh_info fields.  Hence we could
-	     get the situation where elfsec is 0.  */
+	  /* An sh_link value of 0 is now allowed.  It indicates that linked
+	     to section has already been discarded, but that the current
+	     section has been retained for some other reason.  This linking
+	     section is still a candidate for later garbage collection
+	     however.  */
 	  if (elfsec == 0)
 	    {
-	      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
-	      if (bed->link_order_error_handler)
-		bed->link_order_error_handler
-		  /* xgettext:c-format */
-		  (_("%pB: warning: sh_link not set for section `%pA'"),
-		   abfd, s);
+	      elf_linked_to_section (s) = NULL;
 	    }
 	  else
 	    {
@@ -894,7 +884,7 @@ _bfd_elf_setup_sections (bfd *abfd)
 		    /* xgettext:c-format */
 		    (_("%pB: sh_link [%d] in section `%pA' is incorrect"),
 		     s->owner, elfsec, s);
-		  result = FALSE;
+		  result = false;
 		}
 
 	      elf_linked_to_section (s) = linksec;
@@ -907,7 +897,7 @@ _bfd_elf_setup_sections (bfd *abfd)
 	    /* xgettext:c-format */
 	    (_("%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"),
 	     abfd, elf_section_data (s)->this_idx);
-	  result = FALSE;
+	  result = false;
 	}
     }
 
@@ -921,14 +911,15 @@ _bfd_elf_setup_sections (bfd *abfd)
       Elf_Internal_Group *idx;
       unsigned int n_elt;
 
-      /* PR binutils/18758: Beware of corrupt binaries with invalid group data.  */
+      /* PR binutils/18758: Beware of corrupt binaries with invalid
+	 group data.  */
       if (shdr == NULL || shdr->bfd_section == NULL || shdr->contents == NULL)
 	{
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: section group entry number %u is corrupt"),
 	     abfd, i);
-	  result = FALSE;
+	  result = false;
 	  continue;
 	}
 
@@ -957,7 +948,7 @@ _bfd_elf_setup_sections (bfd *abfd)
 						   ->e_shstrndx),
 						  idx->shdr->sh_name),
 		 shdr->bfd_section);
-	      result = FALSE;
+	      result = false;
 	    }
 	}
     }
@@ -965,7 +956,7 @@ _bfd_elf_setup_sections (bfd *abfd)
   return result;
 }
 
-bfd_boolean
+bool
 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
 {
   return elf_next_in_group (sec) != NULL;
@@ -979,31 +970,6 @@ bfd_elf_group_name (bfd *abfd ATTRIBUTE_
   return NULL;
 }
 
-static char *
-convert_debug_to_zdebug (bfd *abfd, const char *name)
-{
-  unsigned int len = strlen (name);
-  char *new_name = bfd_alloc (abfd, len + 2);
-  if (new_name == NULL)
-    return NULL;
-  new_name[0] = '.';
-  new_name[1] = 'z';
-  memcpy (new_name + 2, name + 1, len);
-  return new_name;
-}
-
-static char *
-convert_zdebug_to_debug (bfd *abfd, const char *name)
-{
-  unsigned int len = strlen (name);
-  char *new_name = bfd_alloc (abfd, len);
-  if (new_name == NULL)
-    return NULL;
-  new_name[0] = '.';
-  memcpy (new_name + 1, name + 2, len - 1);
-  return new_name;
-}
-
 /* This a copy of lto_section defined in GCC (lto-streamer.h).  */
 
 struct lto_section
@@ -1019,7 +985,7 @@ struct lto_section
 /* Make a BFD section from an ELF section.  We store a pointer to the
    BFD section in the bfd_section field of the header.  */
 
-bfd_boolean
+bool
 _bfd_elf_make_section_from_shdr (bfd *abfd,
 				 Elf_Internal_Shdr *hdr,
 				 const char *name,
@@ -1028,13 +994,14 @@ _bfd_elf_make_section_from_shdr (bfd *ab
   asection *newsect;
   flagword flags;
   const struct elf_backend_data *bed;
+  unsigned int opb = bfd_octets_per_byte (abfd, NULL);
 
   if (hdr->bfd_section != NULL)
-    return TRUE;
+    return true;
 
   newsect = bfd_make_section_anyway (abfd, name);
   if (newsect == NULL)
-    return FALSE;
+    return false;
 
   hdr->bfd_section = newsect;
   elf_section_data (newsect)->this_hdr = *hdr;
@@ -1046,11 +1013,6 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 
   newsect->filepos = hdr->sh_offset;
 
-  if (!bfd_set_section_vma (newsect, hdr->sh_addr)
-      || !bfd_set_section_size (newsect, hdr->sh_size)
-      || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign)))
-    return FALSE;
-
   flags = SEC_NO_FLAGS;
   if (hdr->sh_type != SHT_NOBITS)
     flags |= SEC_HAS_CONTENTS;
@@ -1077,7 +1039,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
     flags |= SEC_STRINGS;
   if (hdr->sh_flags & SHF_GROUP)
     if (!setup_group (abfd, hdr, newsect))
-      return FALSE;
+      return false;
   if ((hdr->sh_flags & SHF_TLS) != 0)
     flags |= SEC_THREAD_LOCAL;
   if ((hdr->sh_flags & SHF_EXCLUDE) != 0)
@@ -1088,9 +1050,12 @@ _bfd_elf_make_section_from_shdr (bfd *ab
       /* FIXME: We should not recognize SHF_GNU_MBIND for ELFOSABI_NONE,
 	 but binutils as of 2019-07-23 did not set the EI_OSABI header
 	 byte.  */
-    case ELFOSABI_NONE:
     case ELFOSABI_GNU:
     case ELFOSABI_FREEBSD:
+      if ((hdr->sh_flags & SHF_GNU_RETAIN) != 0)
+	elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_retain;
+      /* Fall through */
+    case ELFOSABI_NONE:
       if ((hdr->sh_flags & SHF_GNU_MBIND) != 0)
 	elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_mbind;
       break;
@@ -1102,54 +1067,64 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 	 not any sort of flag.  Their SEC_ALLOC bits are cleared.  */
       if (name [0] == '.')
 	{
-	  if (strncmp (name, ".debug", 6) == 0
-	      || strncmp (name, ".gnu.linkonce.wi.", 17) == 0
-	      || strncmp (name, ".zdebug", 7) == 0)
+	  if (startswith (name, ".debug")
+	      || startswith (name, ".gnu.debuglto_.debug_")
+	      || startswith (name, ".gnu.linkonce.wi.")
+	      || startswith (name, ".zdebug"))
 	    flags |= SEC_DEBUGGING | SEC_ELF_OCTETS;
-	  else if (strncmp (name, GNU_BUILD_ATTRS_SECTION_NAME, 21) == 0
-		   || strncmp (name, ".note.gnu", 9) == 0)
-	    flags |= SEC_ELF_OCTETS;
-	  else if (strncmp (name, ".line", 5) == 0
-		   || strncmp (name, ".stab", 5) == 0
+	  else if (startswith (name, GNU_BUILD_ATTRS_SECTION_NAME)
+		   || startswith (name, ".note.gnu"))
+	    {
+	      flags |= SEC_ELF_OCTETS;
+	      opb = 1;
+	    }
+	  else if (startswith (name, ".line")
+		   || startswith (name, ".stab")
 		   || strcmp (name, ".gdb_index") == 0)
 	    flags |= SEC_DEBUGGING;
 	}
     }
 
+  if (!bfd_set_section_vma (newsect, hdr->sh_addr / opb)
+      || !bfd_set_section_size (newsect, hdr->sh_size)
+      || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign
+							& -hdr->sh_addralign)))
+    return false;
+
   /* As a GNU extension, if the name begins with .gnu.linkonce, we
      only link a single copy of the section.  This is used to support
      g++.  g++ will emit each template expansion in its own section.
      The symbols will be defined as weak, so that multiple definitions
      are permitted.  The GNU linker extension is to actually discard
      all but one of the sections.  */
-  if (CONST_STRNEQ (name, ".gnu.linkonce")
+  if (startswith (name, ".gnu.linkonce")
       && elf_next_in_group (newsect) == NULL)
     flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
 
+  if (!bfd_set_section_flags (newsect, flags))
+    return false;
+
   bed = get_elf_backend_data (abfd);
   if (bed->elf_backend_section_flags)
-    if (! bed->elf_backend_section_flags (&flags, hdr))
-      return FALSE;
-
-  if (!bfd_set_section_flags (newsect, flags))
-    return FALSE;
+    if (!bed->elf_backend_section_flags (hdr))
+      return false;
 
   /* We do not parse the PT_NOTE segments as we are interested even in the
      separate debug info files which may have the segments offsets corrupted.
      PT_NOTEs from the core files are currently not parsed using BFD.  */
-  if (hdr->sh_type == SHT_NOTE)
+  if (hdr->sh_type == SHT_NOTE && hdr->sh_size != 0)
     {
       bfd_byte *contents;
 
       if (!bfd_malloc_and_get_section (abfd, newsect, &contents))
-	return FALSE;
+	return false;
 
       elf_parse_notes (abfd, (char *) contents, hdr->sh_size,
 		       hdr->sh_offset, hdr->sh_addralign);
       free (contents);
     }
 
-  if ((flags & SEC_ALLOC) != 0)
+  if ((newsect->flags & SEC_ALLOC) != 0)
     {
       Elf_Internal_Phdr *phdr;
       unsigned int i, nload;
@@ -1165,7 +1140,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 	else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
 	  ++nload;
       if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
-	return TRUE;
+	return true;
 
       phdr = elf_tdata (abfd)->phdr;
       for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
@@ -1175,9 +1150,9 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 	       || phdr->p_type == PT_TLS)
 	      && ELF_SECTION_IN_SEGMENT (hdr, phdr))
 	    {
-	      if ((flags & SEC_LOAD) == 0)
+	      if ((newsect->flags & SEC_LOAD) == 0)
 		newsect->lma = (phdr->p_paddr
-				+ hdr->sh_addr - phdr->p_vaddr);
+				+ hdr->sh_addr - phdr->p_vaddr) / opb;
 	      else
 		/* We used to use the same adjustment for SEC_LOAD
 		   sections, but that doesn't work if the segment
@@ -1187,7 +1162,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 		   segment will contain sections with contiguous
 		   LMAs, even if the VMAs are not.  */
 		newsect->lma = (phdr->p_paddr
-				+ hdr->sh_offset - phdr->p_offset);
+				+ hdr->sh_offset - phdr->p_offset) / opb;
 
 	      /* With contiguous segments, we can't tell from file
 		 offsets whether a section with zero size should
@@ -1201,42 +1176,45 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 	}
     }
 
-  /* Compress/decompress DWARF debug sections with names: .debug_* and
-     .zdebug_*, after the section flags is set.  */
-  if ((flags & SEC_DEBUGGING)
-      && ((name[1] == 'd' && name[6] == '_')
-	  || (name[1] == 'z' && name[7] == '_')))
+  /* Compress/decompress DWARF debug sections with names: .debug_*,
+     .zdebug_*, .gnu.debuglto_.debug_, after the section flags is set.  */
+  if ((newsect->flags & SEC_DEBUGGING) != 0
+      && (newsect->flags & SEC_HAS_CONTENTS) != 0
+      && (newsect->flags & SEC_ELF_OCTETS) != 0)
     {
       enum { nothing, compress, decompress } action = nothing;
       int compression_header_size;
       bfd_size_type uncompressed_size;
       unsigned int uncompressed_align_power;
-      bfd_boolean compressed
-	= bfd_is_section_compressed_with_header (abfd, newsect,
-						 &compression_header_size,
-						 &uncompressed_size,
-						 &uncompressed_align_power);
-      if (compressed)
-	{
-	  /* Compressed section.  Check if we should decompress.  */
-	  if ((abfd->flags & BFD_DECOMPRESS))
-	    action = decompress;
-	}
-
-      /* Compress the uncompressed section or convert from/to .zdebug*
-	 section.  Check if we should compress.  */
-      if (action == nothing)
-	{
-	  if (newsect->size != 0
-	      && (abfd->flags & BFD_COMPRESS)
-	      && compression_header_size >= 0
-	      && uncompressed_size > 0
-	      && (!compressed
-		  || ((compression_header_size > 0)
-		      != ((abfd->flags & BFD_COMPRESS_GABI) != 0))))
+      enum compression_type ch_type = ch_none;
+      bool compressed
+	= bfd_is_section_compressed_info (abfd, newsect,
+					  &compression_header_size,
+					  &uncompressed_size,
+					  &uncompressed_align_power,
+					  &ch_type);
+
+      /* Should we decompress?  */
+      if ((abfd->flags & BFD_DECOMPRESS) != 0 && compressed)
+	action = decompress;
+
+      /* Should we compress?  Or convert to a different compression?  */
+      else if ((abfd->flags & BFD_COMPRESS) != 0
+	       && newsect->size != 0
+	       && compression_header_size >= 0
+	       && uncompressed_size > 0)
+	{
+	  if (!compressed)
 	    action = compress;
 	  else
-	    return TRUE;
+	    {
+	      enum compression_type new_ch_type = ch_none;
+	      if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
+		new_ch_type = ((abfd->flags & BFD_COMPRESS_ZSTD) != 0
+			       ? ch_compress_zstd : ch_compress_zlib);
+	      if (new_ch_type != ch_type)
+		action = compress;
+	    }
 	}
 
       if (action == compress)
@@ -1245,49 +1223,47 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 	    {
 	      _bfd_error_handler
 		/* xgettext:c-format */
-		(_("%pB: unable to initialize compress status for section %s"),
-		 abfd, name);
-	      return FALSE;
+		(_("%pB: unable to compress section %s"), abfd, name);
+	      return false;
 	    }
 	}
-      else
+      else if (action == decompress)
 	{
 	  if (!bfd_init_section_decompress_status (abfd, newsect))
 	    {
 	      _bfd_error_handler
 		/* xgettext:c-format */
-		(_("%pB: unable to initialize decompress status for section %s"),
-		 abfd, name);
-	      return FALSE;
+		(_("%pB: unable to decompress section %s"), abfd, name);
+	      return false;
 	    }
-	}
-
-      if (abfd->is_linker_input)
-	{
-	  if (name[1] == 'z'
-	      && (action == decompress
-		  || (action == compress
-		      && (abfd->flags & BFD_COMPRESS_GABI) != 0)))
+#ifndef HAVE_ZSTD
+	  if (newsect->compress_status == DECOMPRESS_SECTION_ZSTD)
+	    {
+	      _bfd_error_handler
+		  /* xgettext:c-format */
+		  (_ ("%pB: section %s is compressed with zstd, but BFD "
+		      "is not built with zstd support"),
+		   abfd, name);
+	      newsect->compress_status = COMPRESS_SECTION_NONE;
+	      return false;
+	    }
+#endif
+	  if (abfd->is_linker_input
+	      && name[1] == 'z')
 	    {
-	      /* Convert section name from .zdebug_* to .debug_* so
-		 that linker will consider this section as a debug
-		 section.  */
-	      char *new_name = convert_zdebug_to_debug (abfd, name);
+	      /* Rename section from .zdebug_* to .debug_* so that ld
+		 scripts will see this section as a debug section.  */
+	      char *new_name = bfd_zdebug_name_to_debug (abfd, name);
 	      if (new_name == NULL)
-		return FALSE;
+		return false;
 	      bfd_rename_section (newsect, new_name);
 	    }
 	}
-      else
-	/* For objdump, don't rename the section.  For objcopy, delay
-	   section rename to elf_fake_sections.  */
-	newsect->flags |= SEC_ELF_RENAME;
     }
 
   /* GCC uses .gnu.lto_.lto.<some_hash> as a LTO bytecode information
      section.  */
-  const char *lto_section_name = ".gnu.lto_.lto.";
-  if (strncmp (name, lto_section_name, strlen (lto_section_name)) == 0)
+  if (startswith (name, ".gnu.lto_.lto."))
     {
       struct lto_section lsection;
       if (bfd_get_section_contents (abfd, newsect, &lsection, 0,
@@ -1295,7 +1271,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 	abfd->lto_slim_object = lsection.slim_object;
     }
 
-  return TRUE;
+  return true;
 }
 
 const char *const bfd_elf_section_type_names[] =
@@ -1312,8 +1288,7 @@ const char *const bfd_elf_section_type_n
    change anything about the way the reloc is handled, since it will
    all be done at final link time.  Rather than put special case code
    into bfd_perform_relocation, all the reloc types use this howto
-   function.  It just short circuits the reloc if producing
-   relocatable output against an external symbol.  */
+   function, or should call this function for relocatable output.  */
 
 bfd_reloc_status_type
 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
@@ -1333,6 +1308,20 @@ bfd_elf_generic_reloc (bfd *abfd ATTRIBU
       return bfd_reloc_ok;
     }
 
+  /* In some cases the relocation should be treated as output section
+     relative, as when linking ELF DWARF into PE COFF.  Many ELF
+     targets lack section relative relocations and instead use
+     ordinary absolute relocations for references between DWARF
+     sections.  That is arguably a bug in those targets but it happens
+     to work for the usual case of linking to non-loaded ELF debug
+     sections with VMAs forced to zero.  PE COFF on the other hand
+     doesn't allow a section VMA of zero.  */
+  if (output_bfd == NULL
+      && !reloc_entry->howto->pc_relative
+      && (symbol->section->flags & SEC_DEBUGGING) != 0
+      && (input_section->flags & SEC_DEBUGGING) != 0)
+    reloc_entry->addend -= symbol->section->output_section->vma;
+
   return bfd_reloc_continue;
 }
 
@@ -1340,7 +1329,7 @@ bfd_elf_generic_reloc (bfd *abfd ATTRIBU
    Names, addresses and links may be different, but everything else
    should be the same.  */
 
-static bfd_boolean
+static bool
 section_match (const Elf_Internal_Shdr * a,
 	       const Elf_Internal_Shdr * b)
 {
@@ -1348,10 +1337,10 @@ section_match (const Elf_Internal_Shdr *
       || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
       || a->sh_addralign != b->sh_addralign
       || a->sh_entsize != b->sh_entsize)
-    return FALSE;
+    return false;
   if (a->sh_type == SHT_SYMTAB
       || a->sh_type == SHT_STRTAB)
-    return TRUE;
+    return true;
   return a->sh_size == b->sh_size;
 }
 
@@ -1394,7 +1383,7 @@ find_link (const bfd *obfd, const Elf_In
    Processor specific section, based upon a matching input section.
    Returns TRUE upon success, FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 copy_special_section_fields (const bfd *ibfd,
 			     bfd *obfd,
 			     const Elf_Internal_Shdr *iheader,
@@ -1402,8 +1391,9 @@ copy_special_section_fields (const bfd *
 			     const unsigned int secnum)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
-  const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
-  bfd_boolean changed = FALSE;
+  const Elf_Internal_Shdr **iheaders
+    = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
+  bool changed = false;
   unsigned int sh_link;
 
   if (oheader->sh_type == SHT_NOBITS)
@@ -1428,14 +1418,13 @@ copy_special_section_fields (const bfd *
 	oheader->sh_link = iheader->sh_link;
       if (oheader->sh_info == 0)
 	oheader->sh_info = iheader->sh_info;
-      return TRUE;
+      return true;
     }
 
   /* Allow the target a chance to decide how these fields should be set.  */
-  if (bed->elf_backend_copy_special_section_fields != NULL
-      && bed->elf_backend_copy_special_section_fields
-      (ibfd, obfd, iheader, oheader))
-    return TRUE;
+  if (bed->elf_backend_copy_special_section_fields (ibfd, obfd,
+						    iheader, oheader))
+    return true;
 
   /* We have an iheader which might match oheader, and which has non-zero
      sh_info and/or sh_link fields.  Attempt to follow those links and find
@@ -1450,14 +1439,14 @@ copy_special_section_fields (const bfd *
 	    /* xgettext:c-format */
 	    (_("%pB: invalid sh_link field (%d) in section number %d"),
 	     ibfd, iheader->sh_link, secnum);
-	  return FALSE;
+	  return false;
 	}
 
       sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link);
       if (sh_link != SHN_UNDEF)
 	{
 	  oheader->sh_link = sh_link;
-	  changed = TRUE;
+	  changed = true;
 	}
       else
 	/* FIXME: Should we install iheader->sh_link
@@ -1486,7 +1475,7 @@ copy_special_section_fields (const bfd *
       if (sh_link != SHN_UNDEF)
 	{
 	  oheader->sh_info = sh_link;
-	  changed = TRUE;
+	  changed = true;
 	}
       else
 	_bfd_error_handler
@@ -1500,22 +1489,23 @@ copy_special_section_fields (const bfd *
 /* Copy the program header and other data from one object module to
    another.  */
 
-bfd_boolean
+bool
 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
-  const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
+  const Elf_Internal_Shdr **iheaders
+    = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
   Elf_Internal_Shdr **oheaders = elf_elfsections (obfd);
   const struct elf_backend_data *bed;
   unsigned int i;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
     || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   if (!elf_flags_init (obfd))
     {
       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
     }
 
   elf_gp (obfd) = elf_gp (ibfd);
@@ -1533,7 +1523,7 @@ _bfd_elf_copy_private_bfd_data (bfd *ibf
   _bfd_elf_copy_obj_attributes (ibfd, obfd);
 
   if (iheaders == NULL || oheaders == NULL)
-    return TRUE;
+    return true;
 
   bed = get_elf_backend_data (obfd);
 
@@ -1558,7 +1548,8 @@ _bfd_elf_copy_private_bfd_data (bfd *ibf
 	continue;
 
       /* Scan for the matching section in the input bfd.
-	 First we try for a direct mapping between the input and output sections.  */
+	 First we try for a direct mapping between the input and
+	 output sections.  */
       for (j = 1; j < elf_numsections (ibfd); j++)
 	{
 	  const Elf_Internal_Shdr * iheader = iheaders[j];
@@ -1571,11 +1562,13 @@ _bfd_elf_copy_private_bfd_data (bfd *ibf
 	      && iheader->bfd_section->output_section != NULL
 	      && iheader->bfd_section->output_section == oheader->bfd_section)
 	    {
-	      /* We have found a connection from the input section to the
-		 output section.  Attempt to copy the header fields.  If
-		 this fails then do not try any further sections - there
-		 should only be a one-to-one mapping between input and output. */
-	      if (! copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
+	      /* We have found a connection from the input section to
+		 the output section.  Attempt to copy the header fields.
+		 If this fails then do not try any further sections -
+		 there should only be a one-to-one mapping between
+		 input and output.  */
+	      if (!copy_special_section_fields (ibfd, obfd,
+						iheader, oheader, i))
 		j = elf_numsections (ibfd);
 	      break;
 	    }
@@ -1618,12 +1611,12 @@ _bfd_elf_copy_private_bfd_data (bfd *ibf
 	{
 	  /* Final attempt.  Call the backend copy function
 	     with a NULL input section.  */
-	  if (bed->elf_backend_copy_special_section_fields != NULL)
-	    bed->elf_backend_copy_special_section_fields (ibfd, obfd, NULL, oheader);
+	  (void) bed->elf_backend_copy_special_section_fields (ibfd, obfd,
+							       NULL, oheader);
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static const char *
@@ -1643,6 +1636,7 @@ get_segment_type (unsigned int p_type)
     case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
     case PT_GNU_STACK: pt = "STACK"; break;
     case PT_GNU_RELRO: pt = "RELRO"; break;
+    case PT_GNU_SFRAME: pt = "SFRAME"; break;
     default: pt = NULL; break;
     }
   return pt;
@@ -1650,7 +1644,7 @@ get_segment_type (unsigned int p_type)
 
 /* Print out the program headers.  */
 
-bfd_boolean
+bool
 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
 {
   FILE *f = (FILE *) farg;
@@ -1697,7 +1691,7 @@ _bfd_elf_print_private_bfd_data (bfd *ab
     }
 
   s = bfd_get_section_by_name (abfd, ".dynamic");
-  if (s != NULL)
+  if (s != NULL && (s->flags & SEC_HAS_CONTENTS) != 0)
     {
       unsigned int elfsec;
       unsigned long shlink;
@@ -1718,19 +1712,14 @@ _bfd_elf_print_private_bfd_data (bfd *ab
       extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
       swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
 
-      extdyn = dynbuf;
-      /* PR 17512: file: 6f427532.  */
-      if (s->size < extdynsize)
-	goto error_return;
-      extdynend = extdyn + s->size;
-      /* PR 17512: file: id:000006,sig:06,src:000000,op:flip4,pos:5664.
-	 Fix range check.  */
-      for (; extdyn <= (extdynend - extdynsize); extdyn += extdynsize)
+      for (extdyn = dynbuf, extdynend = dynbuf + s->size;
+	   (size_t) (extdynend - extdyn) >= extdynsize;
+	   extdyn += extdynsize)
 	{
 	  Elf_Internal_Dyn dyn;
 	  const char *name = "";
 	  char ab[20];
-	  bfd_boolean stringp;
+	  bool stringp;
 	  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
 
 	  (*swap_dyn_in) (abfd, extdyn, &dyn);
@@ -1738,7 +1727,7 @@ _bfd_elf_print_private_bfd_data (bfd *ab
 	  if (dyn.d_tag == DT_NULL)
 	    break;
 
-	  stringp = FALSE;
+	  stringp = false;
 	  switch (dyn.d_tag)
 	    {
 	    default:
@@ -1747,12 +1736,12 @@ _bfd_elf_print_private_bfd_data (bfd *ab
 
 	      if (!strcmp (name, ""))
 		{
-		  sprintf (ab, "%#" BFD_VMA_FMT "x", dyn.d_tag);
+		  sprintf (ab, "%#" PRIx64, (uint64_t) dyn.d_tag);
 		  name = ab;
 		}
 	      break;
 
-	    case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break;
+	    case DT_NEEDED: name = "NEEDED"; stringp = true; break;
 	    case DT_PLTRELSZ: name = "PLTRELSZ"; break;
 	    case DT_PLTGOT: name = "PLTGOT"; break;
 	    case DT_HASH: name = "HASH"; break;
@@ -1765,12 +1754,15 @@ _bfd_elf_print_private_bfd_data (bfd *ab
 	    case DT_SYMENT: name = "SYMENT"; break;
 	    case DT_INIT: name = "INIT"; break;
 	    case DT_FINI: name = "FINI"; break;
-	    case DT_SONAME: name = "SONAME"; stringp = TRUE; break;
-	    case DT_RPATH: name = "RPATH"; stringp = TRUE; break;
+	    case DT_SONAME: name = "SONAME"; stringp = true; break;
+	    case DT_RPATH: name = "RPATH"; stringp = true; break;
 	    case DT_SYMBOLIC: name = "SYMBOLIC"; break;
 	    case DT_REL: name = "REL"; break;
 	    case DT_RELSZ: name = "RELSZ"; break;
 	    case DT_RELENT: name = "RELENT"; break;
+	    case DT_RELR: name = "RELR"; break;
+	    case DT_RELRSZ: name = "RELRSZ"; break;
+	    case DT_RELRENT: name = "RELRENT"; break;
 	    case DT_PLTREL: name = "PLTREL"; break;
 	    case DT_DEBUG: name = "DEBUG"; break;
 	    case DT_TEXTREL: name = "TEXTREL"; break;
@@ -1780,7 +1772,7 @@ _bfd_elf_print_private_bfd_data (bfd *ab
 	    case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
 	    case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
 	    case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
-	    case DT_RUNPATH: name = "RUNPATH"; stringp = TRUE; break;
+	    case DT_RUNPATH: name = "RUNPATH"; stringp = true; break;
 	    case DT_FLAGS: name = "FLAGS"; break;
 	    case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
 	    case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
@@ -1792,9 +1784,9 @@ _bfd_elf_print_private_bfd_data (bfd *ab
 	    case DT_POSFLAG_1: name = "POSFLAG_1"; break;
 	    case DT_SYMINSZ: name = "SYMINSZ"; break;
 	    case DT_SYMINENT: name = "SYMINENT"; break;
-	    case DT_CONFIG: name = "CONFIG"; stringp = TRUE; break;
-	    case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = TRUE; break;
-	    case DT_AUDIT: name = "AUDIT"; stringp = TRUE; break;
+	    case DT_CONFIG: name = "CONFIG"; stringp = true; break;
+	    case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = true; break;
+	    case DT_AUDIT: name = "AUDIT"; stringp = true; break;
 	    case DT_PLTPAD: name = "PLTPAD"; break;
 	    case DT_MOVETAB: name = "MOVETAB"; break;
 	    case DT_SYMINFO: name = "SYMINFO"; break;
@@ -1806,9 +1798,9 @@ _bfd_elf_print_private_bfd_data (bfd *ab
 	    case DT_VERDEFNUM: name = "VERDEFNUM"; break;
 	    case DT_VERNEED: name = "VERNEED"; break;
 	    case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
-	    case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break;
+	    case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
 	    case DT_USED: name = "USED"; break;
-	    case DT_FILTER: name = "FILTER"; stringp = TRUE; break;
+	    case DT_FILTER: name = "FILTER"; stringp = true; break;
 	    case DT_GNU_HASH: name = "GNU_HASH"; break;
 	    }
 
@@ -1838,8 +1830,8 @@ _bfd_elf_print_private_bfd_data (bfd *ab
   if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
       || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
     {
-      if (! _bfd_elf_slurp_version_tables (abfd, FALSE))
-	return FALSE;
+      if (! _bfd_elf_slurp_version_tables (abfd, false))
+	return false;
     }
 
   if (elf_dynverdef (abfd) != 0)
@@ -1885,23 +1877,576 @@ _bfd_elf_print_private_bfd_data (bfd *ab
 	}
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (dynbuf != NULL)
-    free (dynbuf);
-  return FALSE;
+  free (dynbuf);
+  return false;
+}
+
+/* Find the file offset corresponding to VMA by using the program
+   headers.  */
+
+static file_ptr
+offset_from_vma (Elf_Internal_Phdr *phdrs, size_t phnum, bfd_vma vma,
+		 size_t size, size_t *max_size_p)
+{
+  Elf_Internal_Phdr *seg;
+  size_t i;
+
+  for (seg = phdrs, i = 0; i < phnum; ++seg, ++i)
+    if (seg->p_type == PT_LOAD
+	&& vma >= (seg->p_vaddr & -seg->p_align)
+	&& vma + size <= seg->p_vaddr + seg->p_filesz)
+      {
+	if (max_size_p)
+	  *max_size_p = seg->p_vaddr + seg->p_filesz - vma;
+	return vma - seg->p_vaddr + seg->p_offset;
+      }
+
+  if (max_size_p)
+    *max_size_p = 0;
+  bfd_set_error (bfd_error_invalid_operation);
+  return (file_ptr) -1;
+}
+
+/* Convert hash table to internal form.  */
+
+static bfd_vma *
+get_hash_table_data (bfd *abfd, bfd_size_type number,
+		     unsigned int ent_size, bfd_size_type filesize)
+{
+  unsigned char *e_data = NULL;
+  bfd_vma *i_data = NULL;
+  bfd_size_type size;
+
+  if (ent_size != 4 && ent_size != 8)
+    return NULL;
+
+  if ((size_t) number != number)
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return NULL;
+    }
+
+  size = ent_size * number;
+  /* Be kind to memory checkers (eg valgrind, address sanitizer) by not
+     attempting to allocate memory when the read is bound to fail.  */
+  if (size > filesize
+      || number >= ~(size_t) 0 / ent_size
+      || number >= ~(size_t) 0 / sizeof (*i_data))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return NULL;
+    }
+
+  e_data = _bfd_malloc_and_read (abfd, size, size);
+  if (e_data == NULL)
+    return NULL;
+
+  i_data = (bfd_vma *) bfd_malloc (number * sizeof (*i_data));
+  if (i_data == NULL)
+    {
+      free (e_data);
+      return NULL;
+    }
+
+  if (ent_size == 4)
+    while (number--)
+      i_data[number] = bfd_get_32 (abfd, e_data + number * ent_size);
+  else
+    while (number--)
+      i_data[number] = bfd_get_64 (abfd, e_data + number * ent_size);
+
+  free (e_data);
+  return i_data;
 }
 
-/* Get version string.  */
+/* Address of .MIPS.xhash section.  FIXME: What is the best way to
+   support DT_MIPS_XHASH?  */
+#define DT_MIPS_XHASH	       0x70000036
+
+/* Reconstruct dynamic symbol table from PT_DYNAMIC segment.  */
+
+bool
+_bfd_elf_get_dynamic_symbols (bfd *abfd, Elf_Internal_Phdr *phdr,
+			      Elf_Internal_Phdr *phdrs, size_t phnum,
+			      bfd_size_type filesize)
+{
+  bfd_byte *extdyn, *extdynend;
+  size_t extdynsize;
+  void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
+  bool (*swap_symbol_in) (bfd *, const void *, const void *,
+			  Elf_Internal_Sym *);
+  Elf_Internal_Dyn dyn;
+  bfd_vma dt_hash = 0;
+  bfd_vma dt_gnu_hash = 0;
+  bfd_vma dt_mips_xhash = 0;
+  bfd_vma dt_strtab = 0;
+  bfd_vma dt_symtab = 0;
+  size_t dt_strsz = 0;
+  bfd_vma dt_versym = 0;
+  bfd_vma dt_verdef = 0;
+  bfd_vma dt_verneed = 0;
+  bfd_byte *dynbuf = NULL;
+  char *strbuf = NULL;
+  bfd_vma *gnubuckets = NULL;
+  bfd_vma *gnuchains = NULL;
+  bfd_vma *mipsxlat = NULL;
+  file_ptr saved_filepos, filepos;
+  bool res = false;
+  size_t amt;
+  bfd_byte *esymbuf = NULL, *esym;
+  bfd_size_type symcount;
+  Elf_Internal_Sym *isymbuf = NULL;
+  Elf_Internal_Sym *isym, *isymend;
+  bfd_byte *versym = NULL;
+  bfd_byte *verdef = NULL;
+  bfd_byte *verneed = NULL;
+  size_t verdef_size = 0;
+  size_t verneed_size = 0;
+  size_t extsym_size;
+  const struct elf_backend_data *bed;
+
+  /* Return TRUE if symbol table is bad.  */
+  if (elf_bad_symtab (abfd))
+    return true;
+
+  /* Return TRUE if DT_HASH/DT_GNU_HASH have bee processed before.  */
+  if (elf_tdata (abfd)->dt_strtab != NULL)
+    return true;
+
+  bed = get_elf_backend_data (abfd);
+
+  /* Save file position for elf_object_p.  */
+  saved_filepos = bfd_tell (abfd);
+
+  if (bfd_seek (abfd, phdr->p_offset, SEEK_SET) != 0)
+    goto error_return;
+
+  dynbuf = _bfd_malloc_and_read (abfd, phdr->p_filesz, phdr->p_filesz);
+  if (dynbuf == NULL)
+    goto error_return;
+
+  extsym_size = bed->s->sizeof_sym;
+  extdynsize = bed->s->sizeof_dyn;
+  swap_dyn_in = bed->s->swap_dyn_in;
+
+  extdyn = dynbuf;
+  if (phdr->p_filesz < extdynsize)
+    goto error_return;
+  extdynend = extdyn + phdr->p_filesz;
+  for (; extdyn <= (extdynend - extdynsize); extdyn += extdynsize)
+    {
+      swap_dyn_in (abfd, extdyn, &dyn);
+
+      if (dyn.d_tag == DT_NULL)
+	break;
+
+      switch (dyn.d_tag)
+	{
+	case DT_HASH:
+	  dt_hash = dyn.d_un.d_val;
+	  break;
+	case DT_GNU_HASH:
+	  if (bed->elf_machine_code != EM_MIPS
+	      && bed->elf_machine_code != EM_MIPS_RS3_LE)
+	    dt_gnu_hash = dyn.d_un.d_val;
+	  break;
+	case DT_STRTAB:
+	  dt_strtab = dyn.d_un.d_val;
+	  break;
+	case DT_SYMTAB:
+	  dt_symtab = dyn.d_un.d_val;
+	  break;
+	case DT_STRSZ:
+	  dt_strsz = dyn.d_un.d_val;
+	  break;
+	case DT_SYMENT:
+	  if (dyn.d_un.d_val != extsym_size)
+	    goto error_return;
+	  break;
+	case DT_VERSYM:
+	  dt_versym = dyn.d_un.d_val;
+	  break;
+	case DT_VERDEF:
+	  dt_verdef = dyn.d_un.d_val;
+	  break;
+	case DT_VERNEED:
+	  dt_verneed = dyn.d_un.d_val;
+	  break;
+	default:
+	  if (dyn.d_tag == DT_MIPS_XHASH
+	      && (bed->elf_machine_code == EM_MIPS
+		  || bed->elf_machine_code == EM_MIPS_RS3_LE))
+	    {
+	      dt_gnu_hash = dyn.d_un.d_val;
+	      dt_mips_xhash = dyn.d_un.d_val;
+	    }
+	  break;
+	}
+    }
+
+  /* Check if we can reconstruct dynamic symbol table from PT_DYNAMIC
+     segment.  */
+  if ((!dt_hash && !dt_gnu_hash)
+      || !dt_strtab
+      || !dt_symtab
+      || !dt_strsz)
+    goto error_return;
+
+  /* Get dynamic string table.  */
+  filepos = offset_from_vma (phdrs, phnum, dt_strtab, dt_strsz, NULL);
+  if (filepos == (file_ptr) -1
+      || bfd_seek (abfd, filepos, SEEK_SET) != 0)
+    goto error_return;
+
+  /* Dynamic string table must be valid until ABFD is closed.  */
+  strbuf = (char *) _bfd_alloc_and_read (abfd, dt_strsz + 1, dt_strsz);
+  if (strbuf == NULL)
+    goto error_return;
+  /* Since this is a string table, make sure that it is terminated.  */
+  strbuf[dt_strsz] = 0;
+
+  /* Get the real symbol count from DT_HASH or DT_GNU_HASH.  Prefer
+     DT_HASH since it is simpler than DT_GNU_HASH.  */
+  if (dt_hash)
+    {
+      unsigned char nb[16];
+      unsigned int hash_ent_size;
+
+      switch (bed->elf_machine_code)
+	{
+	case EM_ALPHA:
+	case EM_S390:
+	case EM_S390_OLD:
+	  if (bed->s->elfclass == ELFCLASS64)
+	    {
+	      hash_ent_size = 8;
+	      break;
+	    }
+	  /* FALLTHROUGH */
+	default:
+	  hash_ent_size = 4;
+	  break;
+	}
+
+      filepos = offset_from_vma (phdrs, phnum, dt_hash, sizeof (nb),
+				 NULL);
+      if (filepos == (file_ptr) -1
+	  || bfd_seek (abfd, filepos, SEEK_SET) != 0
+	  || bfd_read (nb, 2 * hash_ent_size, abfd) != 2 * hash_ent_size)
+	goto error_return;
+
+      /* The number of dynamic symbol table entries equals the number
+	 of chains.  */
+      if (hash_ent_size == 8)
+	symcount = bfd_get_64 (abfd, nb + hash_ent_size);
+      else
+	symcount = bfd_get_32 (abfd, nb + hash_ent_size);
+    }
+  else
+    {
+      /* For DT_GNU_HASH, only defined symbols with non-STB_LOCAL
+	 bindings are in hash table.  Since in dynamic symbol table,
+	 all symbols with STB_LOCAL binding are placed before symbols
+	 with other bindings and all undefined symbols are placed
+	 before defined ones, the highest symbol index in DT_GNU_HASH
+	 is the highest dynamic symbol table index.  */
+      unsigned char nb[16];
+      bfd_vma ngnubuckets;
+      bfd_vma gnusymidx;
+      size_t i, ngnuchains;
+      bfd_vma maxchain = 0xffffffff, bitmaskwords;
+      bfd_vma buckets_vma;
+
+      filepos = offset_from_vma (phdrs, phnum, dt_gnu_hash,
+				 sizeof (nb), NULL);
+      if (filepos == (file_ptr) -1
+	  || bfd_seek (abfd, filepos, SEEK_SET) != 0
+	  || bfd_read (nb, sizeof (nb), abfd) != sizeof (nb))
+	goto error_return;
+
+      ngnubuckets = bfd_get_32 (abfd, nb);
+      gnusymidx = bfd_get_32 (abfd, nb + 4);
+      bitmaskwords = bfd_get_32 (abfd, nb + 8);
+      buckets_vma = dt_gnu_hash + 16;
+      if (bed->s->elfclass == ELFCLASS32)
+	buckets_vma += bitmaskwords * 4;
+      else
+	buckets_vma += bitmaskwords * 8;
+      filepos = offset_from_vma (phdrs, phnum, buckets_vma, 4, NULL);
+      if (filepos == (file_ptr) -1
+	  || bfd_seek (abfd, filepos, SEEK_SET) != 0)
+	goto error_return;
+
+      gnubuckets = get_hash_table_data (abfd, ngnubuckets, 4, filesize);
+      if (gnubuckets == NULL)
+	goto error_return;
+
+      for (i = 0; i < ngnubuckets; i++)
+	if (gnubuckets[i] != 0)
+	  {
+	    if (gnubuckets[i] < gnusymidx)
+	      goto error_return;
+
+	    if (maxchain == 0xffffffff || gnubuckets[i] > maxchain)
+	      maxchain = gnubuckets[i];
+	  }
+
+      if (maxchain == 0xffffffff)
+	{
+	  symcount = 0;
+	  goto empty_gnu_hash;
+	}
+
+      maxchain -= gnusymidx;
+      filepos = offset_from_vma (phdrs, phnum,
+				 (buckets_vma +
+				  4 * (ngnubuckets + maxchain)),
+				 4, NULL);
+      if (filepos == (file_ptr) -1
+	  || bfd_seek (abfd, filepos, SEEK_SET) != 0)
+	goto error_return;
+
+      do
+	{
+	  if (bfd_read (nb, 4, abfd) != 4)
+	    goto error_return;
+	  ++maxchain;
+	  if (maxchain == 0)
+	    goto error_return;
+	}
+      while ((bfd_get_32 (abfd, nb) & 1) == 0);
+
+      filepos = offset_from_vma (phdrs, phnum,
+				 (buckets_vma + 4 * ngnubuckets),
+				 4, NULL);
+      if (filepos == (file_ptr) -1
+	  || bfd_seek (abfd, filepos, SEEK_SET) != 0)
+	goto error_return;
+
+      gnuchains = get_hash_table_data (abfd, maxchain, 4, filesize);
+      if (gnuchains == NULL)
+	goto error_return;
+      ngnuchains = maxchain;
+
+      if (dt_mips_xhash)
+	{
+	  filepos = offset_from_vma (phdrs, phnum,
+				     (buckets_vma
+				      + 4 * (ngnubuckets + maxchain)),
+				     4, NULL);
+	  if (filepos == (file_ptr) -1
+	      || bfd_seek (abfd, filepos, SEEK_SET) != 0)
+	    goto error_return;
+
+	  mipsxlat = get_hash_table_data (abfd, maxchain, 4, filesize);
+	  if (mipsxlat == NULL)
+	    goto error_return;
+	}
+
+      symcount = 0;
+      for (i = 0; i < ngnubuckets; ++i)
+	if (gnubuckets[i] != 0)
+	  {
+	    bfd_vma si = gnubuckets[i];
+	    bfd_vma off = si - gnusymidx;
+	    do
+	      {
+		if (mipsxlat)
+		  {
+		    if (mipsxlat[off] >= symcount)
+		      symcount = mipsxlat[off] + 1;
+		  }
+		else
+		  {
+		    if (si >= symcount)
+		      symcount = si + 1;
+		  }
+		si++;
+	      }
+	    while (off < ngnuchains && (gnuchains[off++] & 1) == 0);
+	  }
+    }
+
+  /* Swap in dynamic symbol table.  */
+  if (_bfd_mul_overflow (symcount, extsym_size, &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      goto error_return;
+    }
+
+  filepos = offset_from_vma (phdrs, phnum, dt_symtab, amt, NULL);
+  if (filepos == (file_ptr) -1
+      || bfd_seek (abfd, filepos, SEEK_SET) != 0)
+    goto error_return;
+  esymbuf = _bfd_malloc_and_read (abfd, amt, amt);
+  if (esymbuf == NULL)
+    goto error_return;
+
+  if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      goto error_return;
+    }
+
+  /* Dynamic symbol table must be valid until ABFD is closed.  */
+  isymbuf = (Elf_Internal_Sym *) bfd_alloc (abfd, amt);
+  if (isymbuf == NULL)
+    goto error_return;
+
+  swap_symbol_in = bed->s->swap_symbol_in;
+
+  /* Convert the symbols to internal form.  */
+  isymend = isymbuf + symcount;
+  for (esym = esymbuf, isym = isymbuf;
+       isym < isymend;
+       esym += extsym_size, isym++)
+    if (!swap_symbol_in (abfd, esym, NULL, isym)
+	|| isym->st_name >= dt_strsz)
+      {
+	bfd_set_error (bfd_error_invalid_operation);
+	goto error_return;
+      }
+
+  if (dt_versym)
+    {
+      /* Swap in DT_VERSYM.  */
+      if (_bfd_mul_overflow (symcount, 2, &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  goto error_return;
+	}
+
+      filepos = offset_from_vma (phdrs, phnum, dt_versym, amt, NULL);
+      if (filepos == (file_ptr) -1
+	  || bfd_seek (abfd, filepos, SEEK_SET) != 0)
+	goto error_return;
+
+      /* DT_VERSYM info must be valid until ABFD is closed.  */
+      versym = _bfd_alloc_and_read (abfd, amt, amt);
+
+      if (dt_verdef)
+	{
+	  /* Read in DT_VERDEF.  */
+	  filepos = offset_from_vma (phdrs, phnum, dt_verdef,
+				     0, &verdef_size);
+	  if (filepos == (file_ptr) -1
+	      || bfd_seek (abfd, filepos, SEEK_SET) != 0)
+	    goto error_return;
+
+	  /* DT_VERDEF info must be valid until ABFD is closed.  */
+	  verdef = _bfd_alloc_and_read (abfd, verdef_size,
+					verdef_size);
+	}
+
+      if (dt_verneed)
+	{
+	  /* Read in DT_VERNEED.  */
+	  filepos = offset_from_vma (phdrs, phnum, dt_verneed,
+				     0, &verneed_size);
+	  if (filepos == (file_ptr) -1
+	      || bfd_seek (abfd, filepos, SEEK_SET) != 0)
+	    goto error_return;
+
+	  /* DT_VERNEED info must be valid until ABFD is closed.  */
+	  verneed = _bfd_alloc_and_read (abfd, verneed_size,
+					 verneed_size);
+	}
+    }
+
+ empty_gnu_hash:
+  elf_tdata (abfd)->dt_strtab = strbuf;
+  elf_tdata (abfd)->dt_strsz = dt_strsz;
+  elf_tdata (abfd)->dt_symtab = isymbuf;
+  elf_tdata (abfd)->dt_symtab_count = symcount;
+  elf_tdata (abfd)->dt_versym = versym;
+  elf_tdata (abfd)->dt_verdef = verdef;
+  elf_tdata (abfd)->dt_verneed = verneed;
+  elf_tdata (abfd)->dt_verdef_count
+    = verdef_size / sizeof (Elf_External_Verdef);
+  elf_tdata (abfd)->dt_verneed_count
+    = verneed_size / sizeof (Elf_External_Verneed);
+
+  res = true;
+
+ error_return:
+  /* Restore file position for elf_object_p.  */
+  if (bfd_seek (abfd, saved_filepos, SEEK_SET) != 0)
+    res = false;
+  free (dynbuf);
+  free (esymbuf);
+  free (gnubuckets);
+  free (gnuchains);
+  free (mipsxlat);
+  return res;
+}
+
+/* Reconstruct section from dynamic symbol.  */
+
+asection *
+_bfd_elf_get_section_from_dynamic_symbol (bfd *abfd,
+					  Elf_Internal_Sym *isym)
+{
+  asection *sec;
+  flagword flags;
+
+  if (!elf_use_dt_symtab_p (abfd))
+    return NULL;
+
+  flags = SEC_ALLOC | SEC_LOAD;
+  switch (ELF_ST_TYPE (isym->st_info))
+    {
+    case STT_FUNC:
+    case STT_GNU_IFUNC:
+      sec = bfd_get_section_by_name (abfd, ".text");
+      if (sec == NULL)
+	sec = bfd_make_section_with_flags (abfd,
+					   ".text",
+					   flags | SEC_CODE);
+      break;
+    case STT_COMMON:
+      sec = bfd_com_section_ptr;
+      break;
+    case STT_OBJECT:
+      sec = bfd_get_section_by_name (abfd, ".data");
+      if (sec == NULL)
+	sec = bfd_make_section_with_flags (abfd,
+					   ".data",
+					   flags | SEC_DATA);
+      break;
+    case STT_TLS:
+      sec = bfd_get_section_by_name (abfd, ".tdata");
+      if (sec == NULL)
+	sec = bfd_make_section_with_flags (abfd,
+					   ".tdata",
+					   (flags
+					    | SEC_DATA
+					    | SEC_THREAD_LOCAL));
+      break;
+    default:
+      sec = bfd_abs_section_ptr;
+      break;
+    }
+
+  return sec;
+}
+
+/* Get version name.  If BASE_P is TRUE, return "Base" for VER_FLG_BASE
+   and return symbol version for symbol version itself.   */
 
 const char *
 _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
-				    bfd_boolean *hidden)
+				    bool base_p,
+				    bool *hidden)
 {
   const char *version_string = NULL;
-  if (elf_dynversym (abfd) != 0
-      && (elf_dynverdef (abfd) != 0 || elf_dynverref (abfd) != 0))
+  if ((elf_dynversym (abfd) != 0
+       && (elf_dynverdef (abfd) != 0 || elf_dynverref (abfd) != 0))
+      || (elf_tdata (abfd)->dt_versym != NULL
+	  && (elf_tdata (abfd)->dt_verdef != NULL
+	      || elf_tdata (abfd)->dt_verneed != NULL)))
     {
       unsigned int vernum = ((elf_symbol_type *) symbol)->version;
 
@@ -1914,10 +2459,18 @@ _bfd_elf_get_symbol_version_string (bfd
 	       && (vernum > elf_tdata (abfd)->cverdefs
 		   || (elf_tdata (abfd)->verdef[0].vd_flags
 		       == VER_FLG_BASE)))
-	version_string = "Base";
+	version_string = base_p ? "Base" : "";
       else if (vernum <= elf_tdata (abfd)->cverdefs)
-	version_string =
-	  elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
+	{
+	  const char *nodename
+	    = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
+	  version_string = "";
+	  if (base_p
+	      || nodename == NULL
+	      || symbol->name == NULL
+	      || strcmp (symbol->name, nodename) != 0)
+	    version_string = nodename;
+	}
       else
 	{
 	  Elf_Internal_Verneed *t;
@@ -1933,6 +2486,7 @@ _bfd_elf_get_symbol_version_string (bfd
 		{
 		  if (a->vna_other == vernum)
 		    {
+		      *hidden = true;
 		      version_string = a->vna_nodename;
 		      break;
 		    }
@@ -1970,7 +2524,7 @@ bfd_elf_print_symbol (bfd *abfd,
 	unsigned char st_other;
 	bfd_vma val;
 	const char *version_string;
-	bfd_boolean hidden;
+	bool hidden;
 
 	section_name = symbol->section ? symbol->section->name : "(*none*)";
 
@@ -1998,6 +2552,7 @@ bfd_elf_print_symbol (bfd *abfd,
 	/* If we have version information, print it.  */
 	version_string = _bfd_elf_get_symbol_version_string (abfd,
 							     symbol,
+							     true,
 							     &hidden);
 	if (version_string)
 	  {
@@ -2038,49 +2593,28 @@ bfd_elf_print_symbol (bfd *abfd,
 
 /* Create a new bfd section from an ELF section header.  */
 
-bfd_boolean
+bool
 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
 {
   Elf_Internal_Shdr *hdr;
   Elf_Internal_Ehdr *ehdr;
   const struct elf_backend_data *bed;
   const char *name;
-  bfd_boolean ret = TRUE;
-  static bfd_boolean * sections_being_created = NULL;
-  static bfd * sections_being_created_abfd = NULL;
-  static unsigned int nesting = 0;
+  bool ret = true;
 
   if (shindex >= elf_numsections (abfd))
-    return FALSE;
+    return false;
 
-  if (++ nesting > 3)
+  /* PR17512: A corrupt ELF binary might contain a loop of sections via
+     sh_link or sh_info.  Detect this here, by refusing to load a
+     section that we are already in the process of loading.  */
+  if (elf_tdata (abfd)->being_created[shindex])
     {
-      /* PR17512: A corrupt ELF binary might contain a recursive group of
-	 sections, with each the string indices pointing to the next in the
-	 loop.  Detect this here, by refusing to load a section that we are
-	 already in the process of loading.  We only trigger this test if
-	 we have nested at least three sections deep as normal ELF binaries
-	 can expect to recurse at least once.
-
-	 FIXME: It would be better if this array was attached to the bfd,
-	 rather than being held in a static pointer.  */
-
-      if (sections_being_created_abfd != abfd)
-	sections_being_created = NULL;
-      if (sections_being_created == NULL)
-	{
-	  sections_being_created = (bfd_boolean *)
-	    bfd_zalloc2 (abfd, elf_numsections (abfd), sizeof (bfd_boolean));
-	  sections_being_created_abfd = abfd;
-	}
-      if (sections_being_created [shindex])
-	{
-	  _bfd_error_handler
-	    (_("%pB: warning: loop in section dependencies detected"), abfd);
-	  return FALSE;
-	}
-      sections_being_created [shindex] = TRUE;
+      _bfd_error_handler
+	(_("%pB: warning: loop in section dependencies detected"), abfd);
+      return false;
     }
+  elf_tdata (abfd)->being_created[shindex] = true;
 
   hdr = elf_elfsections (abfd)[shindex];
   ehdr = elf_elfheader (abfd);
@@ -2114,14 +2648,14 @@ bfd_section_from_shdr (bfd *abfd, unsign
 
       if (hdr->sh_link > elf_numsections (abfd))
 	{
-	  /* PR 10478: Accept Solaris binaries with a sh_link
-	     field set to SHN_BEFORE or SHN_AFTER.  */
+	  /* PR 10478: Accept Solaris binaries with a sh_link field
+	     set to SHN_BEFORE (LORESERVE) or SHN_AFTER (LORESERVE+1).  */
 	  switch (bfd_get_arch (abfd))
 	    {
 	    case bfd_arch_i386:
 	    case bfd_arch_sparc:
-	      if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */
-		  || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */)
+	      if (hdr->sh_link == (SHN_LORESERVE & 0xffff)
+		  || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff))
 		break;
 	      /* Otherwise fall through.  */
 	    default:
@@ -2213,7 +2747,7 @@ bfd_section_from_shdr (bfd *abfd, unsign
 	elf_section_list * entry;
 	unsigned int i, num_sec;
 
-	for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
+	for (entry = elf_symtab_shndx_list (abfd); entry; entry = entry->next)
 	  if (entry->hdr.sh_link == shindex)
 	    goto success;
 
@@ -2239,7 +2773,8 @@ bfd_section_from_shdr (bfd *abfd, unsign
 
 	if (i != shindex)
 	  ret = bfd_section_from_shdr (abfd, i);
-	/* else FIXME: we have failed to find the symbol table - should we issue an error ? */
+	/* else FIXME: we have failed to find the symbol table.
+	   Should we issue an error?  */
 	goto success;
       }
 
@@ -2283,11 +2818,11 @@ bfd_section_from_shdr (bfd *abfd, unsign
       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
       goto success;
 
-    case SHT_SYMTAB_SHNDX:	/* Symbol section indices when >64k sections.  */
+    case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections.  */
       {
 	elf_section_list * entry;
 
-	for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
+	for (entry = elf_symtab_shndx_list (abfd); entry; entry = entry->next)
 	  if (entry->ndx == shindex)
 	    goto success;
 
@@ -2364,16 +2899,22 @@ bfd_section_from_shdr (bfd *abfd, unsign
 
     case SHT_REL:
     case SHT_RELA:
+    case SHT_RELR:
       /* *These* do a lot of work -- but build no sections!  */
       {
 	asection *target_sect;
 	Elf_Internal_Shdr *hdr2, **p_hdr;
 	unsigned int num_sec = elf_numsections (abfd);
 	struct bfd_elf_section_data *esdt;
+	bfd_size_type size;
 
-	if (hdr->sh_entsize
-	    != (bfd_size_type) (hdr->sh_type == SHT_REL
-				? bed->s->sizeof_rel : bed->s->sizeof_rela))
+	if (hdr->sh_type == SHT_REL)
+	  size = bed->s->sizeof_rel;
+	else if (hdr->sh_type == SHT_RELA)
+	  size = bed->s->sizeof_rela;
+	else
+	  size = bed->s->arch_size / 8;
+	if (hdr->sh_entsize != size)
 	  goto fail;
 
 	/* Check for a bogus link to avoid crashing.  */
@@ -2383,45 +2924,10 @@ bfd_section_from_shdr (bfd *abfd, unsign
 	      /* xgettext:c-format */
 	      (_("%pB: invalid link %u for reloc section %s (index %u)"),
 	       abfd, hdr->sh_link, name, shindex);
-	    ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
-						   shindex);
+	    ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
 	    goto success;
 	  }
 
-	/* For some incomprehensible reason Oracle distributes
-	   libraries for Solaris in which some of the objects have
-	   bogus sh_link fields.  It would be nice if we could just
-	   reject them, but, unfortunately, some people need to use
-	   them.  We scan through the section headers; if we find only
-	   one suitable symbol table, we clobber the sh_link to point
-	   to it.  I hope this doesn't break anything.
-
-	   Don't do it on executable nor shared library.  */
-	if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0
-	    && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
-	    && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
-	  {
-	    unsigned int scan;
-	    int found;
-
-	    found = 0;
-	    for (scan = 1; scan < num_sec; scan++)
-	      {
-		if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
-		    || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
-		  {
-		    if (found != 0)
-		      {
-			found = 0;
-			break;
-		      }
-		    found = scan;
-		  }
-	      }
-	    if (found != 0)
-	      hdr->sh_link = found;
-	  }
-
 	/* Get the symbol table.  */
 	if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
 	     || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
@@ -2438,6 +2944,8 @@ bfd_section_from_shdr (bfd *abfd, unsign
 	   its sh_link points to the null section.  */
 	if (((abfd->flags & (DYNAMIC | EXEC_P)) != 0
 	     && (hdr->sh_flags & SHF_ALLOC) != 0)
+	    || (hdr->sh_flags & SHF_COMPRESSED) != 0
+	    || hdr->sh_type == SHT_RELR
 	    || hdr->sh_link == SHN_UNDEF
 	    || hdr->sh_link != elf_onesymtab (abfd)
 	    || hdr->sh_info == SHN_UNDEF
@@ -2445,8 +2953,7 @@ bfd_section_from_shdr (bfd *abfd, unsign
 	    || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
 	    || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
 	  {
-	    ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
-						   shindex);
+	    ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
 	    goto success;
 	  }
 
@@ -2468,13 +2975,19 @@ bfd_section_from_shdr (bfd *abfd, unsign
 	   sections.  */
 	if (*p_hdr != NULL)
 	  {
-	    _bfd_error_handler
-	      /* xgettext:c-format */
-	      (_("%pB: warning: multiple relocation sections for section %pA \
-found - ignoring all but the first"),
-	       abfd, target_sect);
+	    if (!bed->init_secondary_reloc_section (abfd, hdr, name, shindex))
+	      {
+		_bfd_error_handler
+		  /* xgettext:c-format */
+		  (_("%pB: warning: secondary relocation section '%s' "
+		     "for section %pA found - ignoring"),
+		   abfd, name, target_sect);
+	      }
+	    else
+	      esdt->has_secondary_relocs = true;
 	    goto success;
 	  }
+
 	hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
 	if (hdr2 == NULL)
 	  goto fail;
@@ -2498,7 +3011,8 @@ found - ignoring all but the first"),
       }
 
     case SHT_GNU_verdef:
-      elf_dynverdef (abfd) = shindex;
+      if (hdr->sh_info != 0)
+	elf_dynverdef (abfd) = shindex;
       elf_tdata (abfd)->dynverdef_hdr = *hdr;
       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
       goto success;
@@ -2513,7 +3027,8 @@ found - ignoring all but the first"),
       goto success;
 
     case SHT_GNU_verneed:
-      elf_dynverref (abfd) = shindex;
+      if (hdr->sh_info != 0)
+	elf_dynverref (abfd) = shindex;
       elf_tdata (abfd)->dynverref_hdr = *hdr;
       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
       goto success;
@@ -2557,8 +3072,7 @@ found - ignoring all but the first"),
 	  else
 	    {
 	      /* Allow sections reserved for applications.  */
-	      ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
-						     shindex);
+	      ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
 	      goto success;
 	    }
 	}
@@ -2598,15 +3112,9 @@ found - ignoring all but the first"),
     }
 
  fail:
-  ret = FALSE;
+  ret = false;
  success:
-  if (sections_being_created && sections_being_created_abfd == abfd)
-    sections_being_created [shindex] = FALSE;
-  if (-- nesting == 0)
-    {
-      sections_being_created = NULL;
-      sections_being_created_abfd = abfd;
-    }
+  elf_tdata (abfd)->being_created[shindex] = false;
   return ret;
 }
 
@@ -2693,6 +3201,8 @@ static const struct bfd_elf_special_sect
 static const struct bfd_elf_special_section special_sections_g[] =
 {
   { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS,      SHF_ALLOC + SHF_WRITE },
+  { STRING_COMMA_LEN (".gnu.linkonce.n"), -2, SHT_NOBITS,      SHF_ALLOC + SHF_WRITE },
+  { STRING_COMMA_LEN (".gnu.linkonce.p"), -2, SHT_PROGBITS,    SHF_ALLOC + SHF_WRITE },
   { STRING_COMMA_LEN (".gnu.lto_"),	  -1, SHT_PROGBITS,    SHF_EXCLUDE },
   { STRING_COMMA_LEN (".got"),		   0, SHT_PROGBITS,    SHF_ALLOC + SHF_WRITE },
   { STRING_COMMA_LEN (".gnu.version"),	   0, SHT_GNU_versym,  0 },
@@ -2726,6 +3236,7 @@ static const struct bfd_elf_special_sect
 
 static const struct bfd_elf_special_section special_sections_n[] =
 {
+  { STRING_COMMA_LEN (".noinit"),	 -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
   { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
   { STRING_COMMA_LEN (".note"),		 -1, SHT_NOTE,	   0 },
   { NULL,		     0,		  0, 0,		   0 }
@@ -2733,6 +3244,8 @@ static const struct bfd_elf_special_sect
 
 static const struct bfd_elf_special_section special_sections_p[] =
 {
+  { STRING_COMMA_LEN (".persistent.bss"), 0, SHT_NOBITS,	SHF_ALLOC + SHF_WRITE },
+  { STRING_COMMA_LEN (".persistent"),	 -2, SHT_PROGBITS,	SHF_ALLOC + SHF_WRITE },
   { STRING_COMMA_LEN (".preinit_array"), -2, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
   { STRING_COMMA_LEN (".plt"),		  0, SHT_PROGBITS,	SHF_ALLOC + SHF_EXECINSTR },
   { NULL,		    0,		  0, 0,			0 }
@@ -2742,6 +3255,7 @@ static const struct bfd_elf_special_sect
 {
   { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
   { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
+  { STRING_COMMA_LEN (".relr.dyn"), 0, SHT_RELR, SHF_ALLOC },
   { STRING_COMMA_LEN (".rela"),	  -1, SHT_RELA,	    0 },
   { STRING_COMMA_LEN (".rel"),	  -1, SHT_REL,	    0 },
   { NULL,		    0,	   0, 0,	    0 }
@@ -2889,7 +3403,7 @@ _bfd_elf_get_sec_type_attr (bfd *abfd, a
   return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
 }
 
-bfd_boolean
+bool
 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
 {
   struct bfd_elf_section_data *sdata;
@@ -2902,7 +3416,7 @@ _bfd_elf_new_section_hook (bfd *abfd, as
       sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd,
 							  sizeof (*sdata));
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -2910,28 +3424,13 @@ _bfd_elf_new_section_hook (bfd *abfd, as
   bed = get_elf_backend_data (abfd);
   sec->use_rela_p = bed->default_use_rela_p;
 
-  /* When we read a file, we don't need to set ELF section type and
-     flags.  They will be overridden in _bfd_elf_make_section_from_shdr
-     anyway.  We will set ELF section type and flags for all linker
-     created sections.  If user specifies BFD section flags, we will
-     set ELF section type and flags based on BFD section flags in
-     elf_fake_sections.  Special handling for .init_array/.fini_array
-     output sections since they may contain .ctors/.dtors input
-     sections.  We don't want _bfd_elf_init_private_section_data to
-     copy ELF section type from .ctors/.dtors input sections.  */
-  if (abfd->direction != read_direction
-      || (sec->flags & SEC_LINKER_CREATED) != 0)
-    {
-      ssect = (*bed->get_sec_type_attr) (abfd, sec);
-      if (ssect != NULL
-	  && (!sec->flags
-	      || (sec->flags & SEC_LINKER_CREATED) != 0
-	      || ssect->type == SHT_INIT_ARRAY
-	      || ssect->type == SHT_FINI_ARRAY))
-	{
-	  elf_section_type (sec) = ssect->type;
-	  elf_section_flags (sec) = ssect->attr;
-	}
+  /* Set up ELF section type and flags for newly created sections, if
+     there is an ABI mandated section.  */
+  ssect = (*bed->get_sec_type_attr) (abfd, sec);
+  if (ssect != NULL)
+    {
+      elf_section_type (sec) = ssect->type;
+      elf_section_flags (sec) = ssect->attr;
     }
 
   return _bfd_generic_new_section_hook (abfd, sec);
@@ -2955,11 +3454,9 @@ _bfd_elf_new_section_hook (bfd *abfd, as
    for the single program segment.  The first has the length specified by
    the file size of the segment, and the second has the length specified
    by the difference between the two sizes.  In effect, the segment is split
-   into its initialized and uninitialized parts.
-
- */
+   into its initialized and uninitialized parts.  */
 
-bfd_boolean
+bool
 _bfd_elf_make_section_from_phdr (bfd *abfd,
 				 Elf_Internal_Phdr *hdr,
 				 int hdr_index,
@@ -2970,6 +3467,7 @@ _bfd_elf_make_section_from_phdr (bfd *ab
   char namebuf[64];
   size_t len;
   int split;
+  unsigned int opb = bfd_octets_per_byte (abfd, NULL);
 
   split = ((hdr->p_memsz > 0)
 	    && (hdr->p_filesz > 0)
@@ -2981,13 +3479,13 @@ _bfd_elf_make_section_from_phdr (bfd *ab
       len = strlen (namebuf) + 1;
       name = (char *) bfd_alloc (abfd, len);
       if (!name)
-	return FALSE;
+	return false;
       memcpy (name, namebuf, len);
       newsect = bfd_make_section (abfd, name);
       if (newsect == NULL)
-	return FALSE;
-      newsect->vma = hdr->p_vaddr;
-      newsect->lma = hdr->p_paddr;
+	return false;
+      newsect->vma = hdr->p_vaddr / opb;
+      newsect->lma = hdr->p_paddr / opb;
       newsect->size = hdr->p_filesz;
       newsect->filepos = hdr->p_offset;
       newsect->flags |= SEC_HAS_CONTENTS;
@@ -3017,13 +3515,13 @@ _bfd_elf_make_section_from_phdr (bfd *ab
       len = strlen (namebuf) + 1;
       name = (char *) bfd_alloc (abfd, len);
       if (!name)
-	return FALSE;
+	return false;
       memcpy (name, namebuf, len);
       newsect = bfd_make_section (abfd, name);
       if (newsect == NULL)
-	return FALSE;
-      newsect->vma = hdr->p_vaddr + hdr->p_filesz;
-      newsect->lma = hdr->p_paddr + hdr->p_filesz;
+	return false;
+      newsect->vma = (hdr->p_vaddr + hdr->p_filesz) / opb;
+      newsect->lma = (hdr->p_paddr + hdr->p_filesz) / opb;
       newsect->size = hdr->p_memsz - hdr->p_filesz;
       newsect->filepos = hdr->p_offset + hdr->p_filesz;
       align = newsect->vma & -newsect->vma;
@@ -3032,14 +3530,6 @@ _bfd_elf_make_section_from_phdr (bfd *ab
       newsect->alignment_power = bfd_log2 (align);
       if (hdr->p_type == PT_LOAD)
 	{
-	  /* Hack for gdb.  Segments that have not been modified do
-	     not have their contents written to a core file, on the
-	     assumption that a debugger can find the contents in the
-	     executable.  We flag this case by setting the fake
-	     section size to zero.  Note that "real" bss sections will
-	     always have their contents dumped to the core file.  */
-	  if (bfd_get_format (abfd) == bfd_core)
-	    newsect->size = 0;
 	  newsect->flags |= SEC_ALLOC;
 	  if (hdr->p_flags & PF_X)
 	    newsect->flags |= SEC_CODE;
@@ -3048,20 +3538,20 @@ _bfd_elf_make_section_from_phdr (bfd *ab
 	newsect->flags |= SEC_READONLY;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 _bfd_elf_core_find_build_id (bfd *templ, bfd_vma offset)
 {
   /* The return value is ignored.  Build-ids are considered optional.  */
   if (templ->xvec->flavour == bfd_target_elf_flavour)
     return (*get_elf_backend_data (templ)->elf_backend_core_find_build_id)
       (templ, offset);
-  return FALSE;
+  return false;
 }
 
-bfd_boolean
+bool
 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
 {
   const struct elf_backend_data *bed;
@@ -3073,10 +3563,10 @@ bfd_section_from_phdr (bfd *abfd, Elf_In
 
     case PT_LOAD:
       if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load"))
-	return FALSE;
+	return false;
       if (bfd_get_format (abfd) == bfd_core && abfd->build_id == NULL)
 	_bfd_elf_core_find_build_id (abfd, hdr->p_offset);
-      return TRUE;
+      return true;
 
     case PT_DYNAMIC:
       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic");
@@ -3086,11 +3576,11 @@ bfd_section_from_phdr (bfd *abfd, Elf_In
 
     case PT_NOTE:
       if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note"))
-	return FALSE;
+	return false;
       if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz,
 			    hdr->p_align))
-	return FALSE;
-      return TRUE;
+	return false;
+      return true;
 
     case PT_SHLIB:
       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib");
@@ -3108,6 +3598,10 @@ bfd_section_from_phdr (bfd *abfd, Elf_In
     case PT_GNU_RELRO:
       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
 
+    case PT_GNU_SFRAME:
+      return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
+					      "sframe");
+
     default:
       /* Check for any processor-specific program segment types.  */
       bed = get_elf_backend_data (abfd);
@@ -3130,25 +3624,25 @@ _bfd_elf_single_rel_hdr (asection *sec)
     return elf_section_data (sec)->rela.hdr;
 }
 
-static bfd_boolean
+static bool
 _bfd_elf_set_reloc_sh_name (bfd *abfd,
 			    Elf_Internal_Shdr *rel_hdr,
 			    const char *sec_name,
-			    bfd_boolean use_rela_p)
+			    bool use_rela_p)
 {
   char *name = (char *) bfd_alloc (abfd,
 				   sizeof ".rela" + strlen (sec_name));
   if (name == NULL)
-    return FALSE;
+    return false;
 
   sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", sec_name);
   rel_hdr->sh_name =
     (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
-					FALSE);
+					false);
   if (rel_hdr->sh_name == (unsigned int) -1)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate and initialize a section-header for a new reloc section,
@@ -3156,25 +3650,27 @@ _bfd_elf_set_reloc_sh_name (bfd *abfd,
    USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL
    relocations.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_init_reloc_shdr (bfd *abfd,
 			  struct bfd_elf_section_reloc_data *reldata,
 			  const char *sec_name,
-			  bfd_boolean use_rela_p,
-			  bfd_boolean delay_st_name_p)
+			  bool use_rela_p,
+			  bool delay_st_name_p)
 {
   Elf_Internal_Shdr *rel_hdr;
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
 
   BFD_ASSERT (reldata->hdr == NULL);
   rel_hdr = bfd_zalloc (abfd, sizeof (*rel_hdr));
+  if (rel_hdr == NULL)
+    return false;
   reldata->hdr = rel_hdr;
 
   if (delay_st_name_p)
     rel_hdr->sh_name = (unsigned int) -1;
   else if (!_bfd_elf_set_reloc_sh_name (abfd, rel_hdr, sec_name,
 					use_rela_p))
-    return FALSE;
+    return false;
   rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
   rel_hdr->sh_entsize = (use_rela_p
 			 ? bed->s->sizeof_rela
@@ -3185,7 +3681,7 @@ _bfd_elf_init_reloc_shdr (bfd *abfd,
   rel_hdr->sh_size = 0;
   rel_hdr->sh_offset = 0;
 
-  return TRUE;
+  return true;
 }
 
 /* Return the default section type based on the passed in section flags.  */
@@ -3202,7 +3698,7 @@ bfd_elf_get_default_section_type (flagwo
 struct fake_section_arg
 {
   struct bfd_link_info *link_info;
-  bfd_boolean failed;
+  bool failed;
 };
 
 /* Set up an ELF internal section header for a section.  */
@@ -3216,7 +3712,8 @@ elf_fake_sections (bfd *abfd, asection *
   Elf_Internal_Shdr *this_hdr;
   unsigned int sh_type;
   const char *name = asect->name;
-  bfd_boolean delay_st_name_p = FALSE;
+  bool delay_st_name_p = false;
+  bfd_vma mask;
 
   if (arg->failed)
     {
@@ -3227,58 +3724,17 @@ elf_fake_sections (bfd *abfd, asection *
 
   this_hdr = &esd->this_hdr;
 
-  if (arg->link_info)
-    {
-      /* ld: compress DWARF debug sections with names: .debug_*.  */
-      if ((arg->link_info->compress_debug & COMPRESS_DEBUG)
-	  && (asect->flags & SEC_DEBUGGING)
-	  && name[1] == 'd'
-	  && name[6] == '_')
-	{
-	  /* Set SEC_ELF_COMPRESS to indicate this section should be
-	     compressed.  */
-	  asect->flags |= SEC_ELF_COMPRESS;
-
-	  /* If this section will be compressed, delay adding section
-	     name to section name section after it is compressed in
-	     _bfd_elf_assign_file_positions_for_non_load.  */
-	  delay_st_name_p = TRUE;
-	}
-    }
-  else if ((asect->flags & SEC_ELF_RENAME))
-    {
-      /* objcopy: rename output DWARF debug section.  */
-      if ((abfd->flags & (BFD_DECOMPRESS | BFD_COMPRESS_GABI)))
-	{
-	  /* When we decompress or compress with SHF_COMPRESSED,
-	     convert section name from .zdebug_* to .debug_* if
-	     needed.  */
-	  if (name[1] == 'z')
-	    {
-	      char *new_name = convert_zdebug_to_debug (abfd, name);
-	      if (new_name == NULL)
-		{
-		  arg->failed = TRUE;
-		  return;
-		}
-	      name = new_name;
-	    }
-	}
-      else if (asect->compress_status == COMPRESS_SECTION_DONE)
-	{
-	  /* PR binutils/18087: Compression does not always make a
-	     section smaller.  So only rename the section when
-	     compression has actually taken place.  If input section
-	     name is .zdebug_*, we should never compress it again.  */
-	  char *new_name = convert_debug_to_zdebug (abfd, name);
-	  if (new_name == NULL)
-	    {
-	      arg->failed = TRUE;
-	      return;
-	    }
-	  BFD_ASSERT (name[1] != 'z');
-	  name = new_name;
-	}
+  /* ld: compress DWARF debug sections with names: .debug_*.  */
+  if (arg->link_info
+      && (abfd->flags & BFD_COMPRESS) != 0
+      && (asect->flags & SEC_DEBUGGING) != 0
+      && name[1] == 'd'
+      && name[6] == '_')
+    {
+      /* If this section will be compressed, delay adding section
+	 name to section name section after it is compressed in
+	 _bfd_elf_assign_file_positions_for_non_load.  */
+      delay_st_name_p = true;
     }
 
   if (delay_st_name_p)
@@ -3287,10 +3743,10 @@ elf_fake_sections (bfd *abfd, asection *
     {
       this_hdr->sh_name
 	= (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
-					      name, FALSE);
+					      name, false);
       if (this_hdr->sh_name == (unsigned int) -1)
 	{
-	  arg->failed = TRUE;
+	  arg->failed = true;
 	  return;
 	}
     }
@@ -3299,7 +3755,7 @@ elf_fake_sections (bfd *abfd, asection *
 
   if ((asect->flags & SEC_ALLOC) != 0
       || asect->user_set_vma)
-    this_hdr->sh_addr = asect->vma;
+    this_hdr->sh_addr = asect->vma * bfd_octets_per_byte (abfd, asect);
   else
     this_hdr->sh_addr = 0;
 
@@ -3313,10 +3769,13 @@ elf_fake_sections (bfd *abfd, asection *
 	/* xgettext:c-format */
 	(_("%pB: error: alignment power %d of section `%pA' is too big"),
 	 abfd, asect->alignment_power, asect);
-      arg->failed = TRUE;
+      arg->failed = true;
       return;
     }
-  this_hdr->sh_addralign = (bfd_vma) 1 << asect->alignment_power;
+  /* Set sh_addralign to the highest power of two given by alignment
+     consistent with the section VMA.  Linker scripts can force VMA.  */
+  mask = ((bfd_vma) 1 << asect->alignment_power) | this_hdr->sh_addr;
+  this_hdr->sh_addralign = mask & -mask;
   /* The sh_entsize and sh_info fields may have been set already by
      copy_private_section_data.  */
 
@@ -3325,7 +3784,9 @@ elf_fake_sections (bfd *abfd, asection *
 
   /* If the section type is unspecified, we set it based on
      asect->flags.  */
-  if ((asect->flags & SEC_GROUP) != 0)
+  if (asect->type != 0)
+    sh_type = asect->type;
+  else if ((asect->flags & SEC_GROUP) != 0)
     sh_type = SHT_GROUP;
   else
     sh_type = bfd_elf_get_default_section_type (asect->flags);
@@ -3472,16 +3933,16 @@ elf_fake_sections (bfd *abfd, asection *
 	{
 	  if (esd->rel.count && esd->rel.hdr == NULL
 	      && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name,
-					    FALSE, delay_st_name_p))
+					    false, delay_st_name_p))
 	    {
-	      arg->failed = TRUE;
+	      arg->failed = true;
 	      return;
 	    }
 	  if (esd->rela.count && esd->rela.hdr == NULL
 	      && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name,
-					    TRUE, delay_st_name_p))
+					    true, delay_st_name_p))
 	    {
-	      arg->failed = TRUE;
+	      arg->failed = true;
 	      return;
 	    }
 	}
@@ -3492,7 +3953,7 @@ elf_fake_sections (bfd *abfd, asection *
 					  asect->use_rela_p,
 					  delay_st_name_p))
 	{
-	  arg->failed = TRUE;
+	  arg->failed = true;
 	  return;
 	}
     }
@@ -3502,7 +3963,7 @@ elf_fake_sections (bfd *abfd, asection *
   if (bed->elf_backend_fake_sections
       && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
     {
-      arg->failed = TRUE;
+      arg->failed = true;
       return;
     }
 
@@ -3522,10 +3983,10 @@ elf_fake_sections (bfd *abfd, asection *
 void
 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
 {
-  bfd_boolean *failedptr = (bfd_boolean *) failedptrarg;
+  bool *failedptr = (bool *) failedptrarg;
   asection *elt, *first;
   unsigned char *loc;
-  bfd_boolean gas;
+  bool gas;
 
   /* Ignore linker created group section.  See elfNN_ia64_object_p in
      elfxx-ia64.c.  */
@@ -3546,8 +4007,14 @@ bfd_elf_set_group_contents (bfd *abfd, a
       if (symindx == 0)
 	{
 	  /* If called from the assembler, swap_out_syms will have set up
-	     elf_section_syms.  */
-	  BFD_ASSERT (elf_section_syms (abfd) != NULL);
+	     elf_section_syms.
+	     PR 25699: A corrupt input file could contain bogus group info.  */
+	  if (sec->index >= elf_num_section_syms (abfd)
+	      || elf_section_syms (abfd)[sec->index] == NULL)
+	    {
+	      *failedptr = true;
+	      return;
+	    }
 	  symindx = elf_section_syms (abfd)[sec->index]->udata.i;
 	}
       elf_section_data (sec)->this_hdr.sh_info = symindx;
@@ -3586,17 +4053,17 @@ bfd_elf_set_group_contents (bfd *abfd, a
     }
 
   /* The contents won't be allocated for "ld -r" or objcopy.  */
-  gas = TRUE;
+  gas = true;
   if (sec->contents == NULL)
     {
-      gas = FALSE;
+      gas = false;
       sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size);
 
       /* Arrange for the section to be written out.  */
       elf_section_data (sec)->this_hdr.contents = sec->contents;
       if (sec->contents == NULL)
 	{
-	  *failedptr = TRUE;
+	  *failedptr = true;
 	  return;
 	}
     }
@@ -3632,6 +4099,8 @@ bfd_elf_set_group_contents (bfd *abfd, a
 	    {
 	      elf_sec->rel.hdr->sh_flags |= SHF_GROUP;
 	      loc -= 4;
+	      if (loc == sec->contents)
+		break;
 	      H_PUT_32 (abfd, elf_sec->rel.idx, loc);
 	    }
 	  if (elf_sec->rela.hdr != NULL
@@ -3641,9 +4110,13 @@ bfd_elf_set_group_contents (bfd *abfd, a
 	    {
 	      elf_sec->rela.hdr->sh_flags |= SHF_GROUP;
 	      loc -= 4;
+	      if (loc == sec->contents)
+		break;
 	      H_PUT_32 (abfd, elf_sec->rela.idx, loc);
 	    }
 	  loc -= 4;
+	  if (loc == sec->contents)
+	    break;
 	  H_PUT_32 (abfd, elf_sec->this_idx, loc);
 	}
       elt = elf_next_in_group (elt);
@@ -3651,8 +4124,21 @@ bfd_elf_set_group_contents (bfd *abfd, a
 	break;
     }
 
-  loc -= 4;
-  BFD_ASSERT (loc == sec->contents);
+  /* We should always get here with loc == sec->contents + 4, but it is
+     possible to craft bogus SHT_GROUP sections that will cause segfaults
+     in objcopy without checking loc here and in the loop above.  */
+  if (loc == sec->contents)
+    BFD_ASSERT (0);
+  else
+    {
+      loc -= 4;
+      if (loc != sec->contents)
+	{
+	  BFD_ASSERT (0);
+	  memset (sec->contents + 4, 0, loc - sec->contents);
+	  loc = sec->contents;
+	}
+    }
 
   H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
 }
@@ -3697,7 +4183,7 @@ elf_get_reloc_section (asection *reloc_s
 
   /* We look up the section the relocs apply to by name.  */
   name = reloc_sec->name;
-  if (strncmp (name, ".rel", 4) != 0)
+  if (!startswith (name, ".rel"))
     return NULL;
   name += 4;
   if (type == SHT_RELA && *name++ != 'a')
@@ -3710,9 +4196,10 @@ elf_get_reloc_section (asection *reloc_s
 
 /* Assign all ELF section numbers.  The dummy first section is handled here
    too.  The link/info pointers for the standard section types are filled
-   in here too, while we're at it.  */
+   in here too, while we're at it.  LINK_INFO will be 0 when arriving
+   here for gas, objcopy, and when using the generic ELF linker.  */
 
-static bfd_boolean
+static bool
 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
 {
   struct elf_obj_tdata *t = elf_tdata (abfd);
@@ -3720,7 +4207,8 @@ assign_section_numbers (bfd *abfd, struc
   unsigned int section_number;
   Elf_Internal_Shdr **i_shdrp;
   struct bfd_elf_section_data *d;
-  bfd_boolean need_symtab;
+  bool need_symtab;
+  size_t amt;
 
   section_number = 1;
 
@@ -3752,9 +4240,11 @@ assign_section_numbers (bfd *abfd, struc
 	  reloc_count += sec->reloc_count;
 	}
 
-      /* Clear HAS_RELOC if there are no relocations.  */
+      /* Set/clear HAS_RELOC depending on whether there are relocations.  */
       if (reloc_count == 0)
 	abfd->flags &= ~HAS_RELOC;
+      else
+	abfd->flags |= HAS_RELOC;
     }
 
   for (sec = abfd->sections; sec; sec = sec->next)
@@ -3785,9 +4275,9 @@ assign_section_numbers (bfd *abfd, struc
     }
 
   need_symtab = (bfd_get_symcount (abfd) > 0
-		|| (link_info == NULL
-		    && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
-			== HAS_RELOC)));
+		 || (link_info == NULL
+		     && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
+			 == HAS_RELOC)));
   if (need_symtab)
     {
       elf_onesymtab (abfd) = section_number++;
@@ -3803,9 +4293,9 @@ assign_section_numbers (bfd *abfd, struc
 	  elf_symtab_shndx_list (abfd) = entry;
 	  entry->hdr.sh_name
 	    = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
-						  ".symtab_shndx", FALSE);
+						  ".symtab_shndx", false);
 	  if (entry->hdr.sh_name == (unsigned int) -1)
-	    return FALSE;
+	    return false;
 	}
       elf_strtab_sec (abfd) = section_number++;
       _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
@@ -3820,7 +4310,7 @@ assign_section_numbers (bfd *abfd, struc
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: too many sections: %u"),
 			  abfd, section_number);
-      return FALSE;
+      return false;
     }
 
   elf_numsections (abfd) = section_number;
@@ -3828,17 +4318,17 @@ assign_section_numbers (bfd *abfd, struc
 
   /* Set up the list of section header pointers, in agreement with the
      indices.  */
-  i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc2 (abfd, section_number,
-						sizeof (Elf_Internal_Shdr *));
+  amt = section_number * sizeof (Elf_Internal_Shdr *);
+  i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
   if (i_shdrp == NULL)
-    return FALSE;
+    return false;
 
   i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
 						 sizeof (Elf_Internal_Shdr));
   if (i_shdrp[0] == NULL)
     {
       bfd_release (abfd, i_shdrp);
-      return FALSE;
+      return false;
     }
 
   elf_elfsections (abfd) = i_shdrp;
@@ -3892,82 +4382,68 @@ assign_section_numbers (bfd *abfd, struc
       if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
 	{
 	  s = elf_linked_to_section (sec);
+	  /* We can now have a NULL linked section pointer.
+	     This happens when the sh_link field is 0, which is done
+	     when a linked to section is discarded but the linking
+	     section has been retained for some reason.  */
 	  if (s)
 	    {
-	      /* elf_linked_to_section points to the input section.  */
-	      if (link_info != NULL)
+	      /* Check discarded linkonce section.  */
+	      if (discarded_section (s))
 		{
-		  /* Check discarded linkonce section.  */
-		  if (discarded_section (s))
+		  asection *kept;
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB: sh_link of section `%pA' points to"
+		       " discarded section `%pA' of `%pB'"),
+		     abfd, d->this_hdr.bfd_section, s, s->owner);
+		  /* Point to the kept section if it has the same
+		     size as the discarded one.  */
+		  kept = _bfd_elf_check_kept_section (s, link_info);
+		  if (kept == NULL)
 		    {
-		      asection *kept;
-		      _bfd_error_handler
-			/* xgettext:c-format */
-			(_("%pB: sh_link of section `%pA' points to"
-			   " discarded section `%pA' of `%pB'"),
-			 abfd, d->this_hdr.bfd_section,
-			 s, s->owner);
-		      /* Point to the kept section if it has the same
-			 size as the discarded one.  */
-		      kept = _bfd_elf_check_kept_section (s, link_info);
-		      if (kept == NULL)
-			{
-			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
-			}
-		      s = kept;
+		      bfd_set_error (bfd_error_bad_value);
+		      return false;
 		    }
-
-		  s = s->output_section;
-		  BFD_ASSERT (s != NULL);
+		  s = kept;
 		}
-	      else
+	      /* Handle objcopy. */
+	      else if (s->output_section == NULL)
 		{
-		  /* Handle objcopy. */
-		  if (s->output_section == NULL)
-		    {
-		      _bfd_error_handler
-			/* xgettext:c-format */
-			(_("%pB: sh_link of section `%pA' points to"
-			   " removed section `%pA' of `%pB'"),
-			 abfd, d->this_hdr.bfd_section, s, s->owner);
-		      bfd_set_error (bfd_error_bad_value);
-		      return FALSE;
-		    }
-		  s = s->output_section;
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB: sh_link of section `%pA' points to"
+		       " removed section `%pA' of `%pB'"),
+		     abfd, d->this_hdr.bfd_section, s, s->owner);
+		  bfd_set_error (bfd_error_bad_value);
+		  return false;
 		}
+	      s = s->output_section;
 	      d->this_hdr.sh_link = elf_section_data (s)->this_idx;
 	    }
-	  else
-	    {
-	      /* PR 290:
-		 The Intel C compiler generates SHT_IA_64_UNWIND with
-		 SHF_LINK_ORDER.  But it doesn't set the sh_link or
-		 sh_info fields.  Hence we could get the situation
-		 where s is NULL.  */
-	      const struct elf_backend_data *bed
-		= get_elf_backend_data (abfd);
-	      if (bed->link_order_error_handler)
-		bed->link_order_error_handler
-		  /* xgettext:c-format */
-		  (_("%pB: warning: sh_link not set for section `%pA'"),
-		   abfd, sec);
-	    }
 	}
 
       switch (d->this_hdr.sh_type)
 	{
 	case SHT_REL:
 	case SHT_RELA:
-	  /* A reloc section which we are treating as a normal BFD
-	     section.  sh_link is the section index of the symbol
-	     table.  sh_info is the section index of the section to
-	     which the relocation entries apply.  We assume that an
-	     allocated reloc section uses the dynamic symbol table.
-	     FIXME: How can we be sure?  */
-	  s = bfd_get_section_by_name (abfd, ".dynsym");
-	  if (s != NULL)
-	    d->this_hdr.sh_link = elf_section_data (s)->this_idx;
+	  /* sh_link is the section index of the symbol table.
+	     sh_info is the section index of the section to which the
+	     relocation entries apply.  */
+	  if (d->this_hdr.sh_link == 0)
+	    {
+	      /* FIXME maybe: If this is a reloc section which we are
+		 treating as a normal section then we likely should
+		 not be assuming its sh_link is .dynsym or .symtab.  */
+	      if ((sec->flags & SEC_ALLOC) != 0)
+		{
+		  s = bfd_get_section_by_name (abfd, ".dynsym");
+		  if (s != NULL)
+		    d->this_hdr.sh_link = elf_section_data (s)->this_idx;
+		}
+	      else
+		d->this_hdr.sh_link = elf_onesymtab (abfd);
+	    }
 
 	  s = elf_get_reloc_section (sec);
 	  if (s != NULL)
@@ -3982,7 +4458,7 @@ assign_section_numbers (bfd *abfd, struc
 	     string section.  We look for a section with the same name
 	     but without the trailing ``str'', and set its sh_link
 	     field to point to this section.  */
-	  if (CONST_STRNEQ (sec->name, ".stab")
+	  if (startswith (sec->name, ".stab")
 	      && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
 	    {
 	      size_t len;
@@ -3991,7 +4467,7 @@ assign_section_numbers (bfd *abfd, struc
 	      len = strlen (sec->name);
 	      alc = (char *) bfd_malloc (len - 2);
 	      if (alc == NULL)
-		return FALSE;
+		return false;
 	      memcpy (alc, sec->name, len - 3);
 	      alc[len - 3] = '\0';
 	      s = bfd_get_section_by_name (abfd, alc);
@@ -4001,9 +4477,7 @@ assign_section_numbers (bfd *abfd, struc
 		  elf_section_data (s)->this_hdr.sh_link = d->this_idx;
 
 		  /* This is a .stab section.  */
-		  if (elf_section_data (s)->this_hdr.sh_entsize == 0)
-		    elf_section_data (s)->this_hdr.sh_entsize
-		      = 4 + 2 * bfd_get_arch_size (abfd) / 8;
+		  elf_section_data (s)->this_hdr.sh_entsize = 12;
 		}
 	    }
 	  break;
@@ -4024,8 +4498,8 @@ assign_section_numbers (bfd *abfd, struc
 	  /* sh_link is the section header index of the prelink library
 	     list used for the dynamic entries, or the symbol table, or
 	     the version strings.  */
-	  s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
-					     ? ".dynstr" : ".gnu.libstr");
+	  s = bfd_get_section_by_name (abfd, ((sec->flags & SEC_ALLOC)
+					      ? ".dynstr" : ".gnu.libstr"));
 	  if (s != NULL)
 	    d->this_hdr.sh_link = elf_section_data (s)->this_idx;
 	  break;
@@ -4049,10 +4523,10 @@ assign_section_numbers (bfd *abfd, struc
      _bfd_elf_assign_file_positions_for_non_load can convert DWARF
      debug section name from .debug_* to .zdebug_* if needed.  */
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 sym_is_global (bfd *abfd, asymbol *sym)
 {
   /* If the backend has a special mapping, use it.  */
@@ -4087,7 +4561,7 @@ _bfd_elf_filter_global_symbols (bfd *abf
       if (!sym_is_global (abfd, sym))
 	continue;
 
-      h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, FALSE);
+      h = bfd_link_hash_lookup (info->hash, name, false, false, false);
       if (h == NULL)
 	continue;
       if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)
@@ -4106,21 +4580,25 @@ _bfd_elf_filter_global_symbols (bfd *abf
 /* Don't output section symbols for sections that are not going to be
    output, that are duplicates or there is no BFD section.  */
 
-static bfd_boolean
+static bool
 ignore_section_sym (bfd *abfd, asymbol *sym)
 {
   elf_symbol_type *type_ptr;
 
   if (sym == NULL)
-    return FALSE;
+    return false;
 
   if ((sym->flags & BSF_SECTION_SYM) == 0)
-    return FALSE;
+    return false;
+
+  /* Ignore the section symbol if it isn't used.  */
+  if ((sym->flags & BSF_SECTION_SYM_USED) == 0)
+    return true;
 
   if (sym->section == NULL)
-    return TRUE;
+    return true;
 
-  type_ptr = elf_symbol_from (abfd, sym);
+  type_ptr = elf_symbol_from (sym);
   return ((type_ptr != NULL
 	   && type_ptr->internal_elf_sym.st_shndx != 0
 	   && bfd_is_abs_section (sym->section))
@@ -4134,7 +4612,7 @@ ignore_section_sym (bfd *abfd, asymbol *
 /* Map symbol from it's internal number to the external number, moving
    all local symbols to be at the head of the list.  */
 
-static bfd_boolean
+static bool
 elf_map_symbols (bfd *abfd, unsigned int *pnum_locals)
 {
   unsigned int symcount = bfd_get_symcount (abfd);
@@ -4148,6 +4626,7 @@ elf_map_symbols (bfd *abfd, unsigned int
   unsigned int idx;
   asection *asect;
   asymbol **new_syms;
+  size_t amt;
 
 #ifdef DEBUG
   fprintf (stderr, "elf_map_symbols\n");
@@ -4161,9 +4640,10 @@ elf_map_symbols (bfd *abfd, unsigned int
     }
 
   max_index++;
-  sect_syms = (asymbol **) bfd_zalloc2 (abfd, max_index, sizeof (asymbol *));
+  amt = max_index * sizeof (asymbol *);
+  sect_syms = (asymbol **) bfd_zalloc (abfd, amt);
   if (sect_syms == NULL)
-    return FALSE;
+    return false;
   elf_section_syms (abfd) = sect_syms;
   elf_num_section_syms (abfd) = max_index;
 
@@ -4202,7 +4682,10 @@ elf_map_symbols (bfd *abfd, unsigned int
      at least in that case.  */
   for (asect = abfd->sections; asect; asect = asect->next)
     {
-      if (sect_syms[asect->index] == NULL)
+      asymbol *sym = asect->symbol;
+      /* Don't include ignored section symbols.  */
+      if (!ignore_section_sym (abfd, sym)
+	  && sect_syms[asect->index] == NULL)
 	{
 	  if (!sym_is_global (abfd, asect->symbol))
 	    num_locals++;
@@ -4212,11 +4695,10 @@ elf_map_symbols (bfd *abfd, unsigned int
     }
 
   /* Now sort the symbols so the local symbols are first.  */
-  new_syms = (asymbol **) bfd_alloc2 (abfd, num_locals + num_globals,
-				      sizeof (asymbol *));
-
+  amt = (num_locals + num_globals) * sizeof (asymbol *);
+  new_syms = (asymbol **) bfd_alloc (abfd, amt);
   if (new_syms == NULL)
-    return FALSE;
+    return false;
 
   for (idx = 0; idx < symcount; idx++)
     {
@@ -4225,6 +4707,7 @@ elf_map_symbols (bfd *abfd, unsigned int
 
       if (sym_is_global (abfd, sym))
 	i = num_locals + num_globals2++;
+      /* Don't include ignored section symbols.  */
       else if (!ignore_section_sym (abfd, sym))
 	i = num_locals2++;
       else
@@ -4234,9 +4717,10 @@ elf_map_symbols (bfd *abfd, unsigned int
     }
   for (asect = abfd->sections; asect; asect = asect->next)
     {
-      if (sect_syms[asect->index] == NULL)
+      asymbol *sym = asect->symbol;
+      if (!ignore_section_sym (abfd, sym)
+	  && sect_syms[asect->index] == NULL)
 	{
-	  asymbol *sym = asect->symbol;
 	  unsigned int i;
 
 	  sect_syms[asect->index] = sym;
@@ -4252,7 +4736,7 @@ elf_map_symbols (bfd *abfd, unsigned int
   bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
 
   *pnum_locals = num_locals;
-  return TRUE;
+  return true;
 }
 
 /* Align to the maximum file alignment that could be required for any
@@ -4270,10 +4754,10 @@ align_file_position (file_ptr off, int a
 file_ptr
 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
 					   file_ptr offset,
-					   bfd_boolean align)
+					   bool align)
 {
   if (align && i_shdrp->sh_addralign > 1)
-    offset = BFD_ALIGN (offset, i_shdrp->sh_addralign);
+    offset = BFD_ALIGN (offset, i_shdrp->sh_addralign & -i_shdrp->sh_addralign);
   i_shdrp->sh_offset = offset;
   if (i_shdrp->bfd_section != NULL)
     i_shdrp->bfd_section->filepos = offset;
@@ -4286,35 +4770,35 @@ _bfd_elf_assign_file_position_for_sectio
    otherwise prepare to begin writing out the ELF file.  If LINK_INFO
    is not NULL, this is being called by the ELF backend linker.  */
 
-bfd_boolean
+bool
 _bfd_elf_compute_section_file_positions (bfd *abfd,
 					 struct bfd_link_info *link_info)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
   struct fake_section_arg fsargs;
-  bfd_boolean failed;
+  bool failed;
   struct elf_strtab_hash *strtab = NULL;
   Elf_Internal_Shdr *shstrtab_hdr;
-  bfd_boolean need_symtab;
+  bool need_symtab;
 
   if (abfd->output_has_begun)
-    return TRUE;
+    return true;
 
   /* Do any elf backend specific processing first.  */
   if (bed->elf_backend_begin_write_processing)
     (*bed->elf_backend_begin_write_processing) (abfd, link_info);
 
   if (!(*bed->elf_backend_init_file_header) (abfd, link_info))
-    return FALSE;
+    return false;
 
-  fsargs.failed = FALSE;
+  fsargs.failed = false;
   fsargs.link_info = link_info;
   bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
   if (fsargs.failed)
-    return FALSE;
+    return false;
 
   if (!assign_section_numbers (abfd, link_info))
-    return FALSE;
+    return false;
 
   /* The backend linker builds symbol table information itself.  */
   need_symtab = (link_info == NULL
@@ -4326,16 +4810,16 @@ _bfd_elf_compute_section_file_positions
       /* Non-zero if doing a relocatable link.  */
       int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
 
-      if (! swap_out_syms (abfd, &strtab, relocatable_p))
-	return FALSE;
+      if (! swap_out_syms (abfd, &strtab, relocatable_p, link_info))
+	return false;
     }
 
-  failed = FALSE;
+  failed = false;
   if (link_info == NULL)
     {
       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
       if (failed)
-	return FALSE;
+	goto err_free_strtab;
     }
 
   shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
@@ -4351,9 +4835,9 @@ _bfd_elf_compute_section_file_positions
   shstrtab_hdr->sh_addralign = 1;
 
   if (!assign_file_positions_except_relocs (abfd, link_info))
-    return FALSE;
+    goto err_free_strtab;
 
-  if (need_symtab)
+  if (strtab != NULL)
     {
       file_ptr off;
       Elf_Internal_Shdr *hdr;
@@ -4361,18 +4845,18 @@ _bfd_elf_compute_section_file_positions
       off = elf_next_file_pos (abfd);
 
       hdr = & elf_symtab_hdr (abfd);
-      off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
+      off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
 
       if (elf_symtab_shndx_list (abfd) != NULL)
 	{
 	  hdr = & elf_symtab_shndx_list (abfd)->hdr;
 	  if (hdr->sh_size != 0)
-	    off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
+	    off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
 	  /* FIXME: What about other symtab_shndx sections in the list ?  */
 	}
 
       hdr = &elf_tdata (abfd)->strtab_hdr;
-      off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
+      off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
 
       elf_next_file_pos (abfd) = off;
 
@@ -4380,13 +4864,31 @@ _bfd_elf_compute_section_file_positions
 	 out.  */
       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
 	  || ! _bfd_elf_strtab_emit (abfd, strtab))
-	return FALSE;
+	goto err_free_strtab;
       _bfd_elf_strtab_free (strtab);
     }
 
-  abfd->output_has_begun = TRUE;
+  abfd->output_has_begun = true;
+  return true;
 
-  return TRUE;
+ err_free_strtab:
+  if (strtab != NULL)
+    _bfd_elf_strtab_free (strtab);
+  return false;
+}
+
+/* Retrieve .eh_frame_hdr.  Prior to size_dynamic_sections the
+   function effectively returns whether --eh-frame-hdr is given on the
+   command line.  After size_dynamic_sections the result reflects
+   whether .eh_frame_hdr will actually be output (sizing isn't done
+   until ldemul_after_allocation).  */
+
+static asection *
+elf_eh_frame_hdr (const struct bfd_link_info *info)
+{
+  if (info != NULL && is_elf_hash_table (info->hash))
+    return elf_hash_table (info)->eh_info.hdr_sec;
+  return NULL;
 }
 
 /* Make an initial estimate of the size of the program header.  If we
@@ -4425,7 +4927,7 @@ get_program_header_size (bfd *abfd, stru
       ++segs;
     }
 
-  if (elf_eh_frame_hdr (abfd))
+  if (elf_eh_frame_hdr (info))
     {
       /* We need a PT_GNU_EH_FRAME segment.  */
       ++segs;
@@ -4437,6 +4939,12 @@ get_program_header_size (bfd *abfd, stru
       ++segs;
     }
 
+  if (elf_sframe (abfd))
+    {
+      /* We need a PT_GNU_SFRAME segment.  */
+      ++segs;
+    }
+
   s = bfd_get_section_by_name (abfd,
 			       NOTE_GNU_PROPERTY_SECTION_NAME);
   if (s != NULL && s->size != 0)
@@ -4483,7 +4991,14 @@ get_program_header_size (bfd *abfd, stru
       && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
     {
       /* Add a PT_GNU_MBIND segment for each mbind section.  */
-      unsigned int page_align_power = bfd_log2 (bed->commonpagesize);
+      bfd_vma commonpagesize;
+      unsigned int page_align_power;
+
+      if (info != NULL)
+	commonpagesize = info->commonpagesize;
+      else
+	commonpagesize = bed->commonpagesize;
+      page_align_power = bfd_log2 (commonpagesize);
       for (s = abfd->sections; s != NULL; s = s->next)
 	if (elf_section_flags (s) & SHF_GNU_MBIND)
 	  {
@@ -4546,12 +5061,12 @@ make_mapping (bfd *abfd,
 	      asection **sections,
 	      unsigned int from,
 	      unsigned int to,
-	      bfd_boolean phdr)
+	      bool phdr)
 {
   struct elf_segment_map *m;
   unsigned int i;
   asection **hdrpp;
-  bfd_size_type amt;
+  size_t amt;
 
   amt = sizeof (struct elf_segment_map) - sizeof (asection *);
   amt += (to - from) * sizeof (asection *);
@@ -4596,10 +5111,10 @@ _bfd_elf_make_dynamic_segment (bfd *abfd
 
 /* Possibly add or remove segments from the segment map.  */
 
-static bfd_boolean
+static bool
 elf_modify_segment_map (bfd *abfd,
 			struct bfd_link_info *info,
-			bfd_boolean remove_empty_load)
+			bool remove_empty_load)
 {
   struct elf_segment_map **m;
   const struct elf_backend_data *bed;
@@ -4639,30 +5154,43 @@ elf_modify_segment_map (bfd *abfd,
   if (bed->elf_backend_modify_segment_map != NULL)
     {
       if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 #define IS_TBSS(s) \
   ((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
 
-/* Set up a mapping from BFD sections to program segments.  */
+/* Set up a mapping from BFD sections to program segments.  Update
+   NEED_LAYOUT if the section layout is changed.  */
 
-bfd_boolean
-_bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
+bool
+_bfd_elf_map_sections_to_segments (bfd *abfd,
+				   struct bfd_link_info *info,
+				   bool *need_layout)
 {
   unsigned int count;
   struct elf_segment_map *m;
   asection **sections = NULL;
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
-  bfd_boolean no_user_phdrs;
+  bool no_user_phdrs;
 
   no_user_phdrs = elf_seg_map (abfd) == NULL;
 
   if (info != NULL)
-    info->user_phdrs = !no_user_phdrs;
+    {
+      info->user_phdrs = !no_user_phdrs;
+
+      /* Size the relative relocations if DT_RELR is enabled.  */
+      if (info->enable_dt_relr
+	  && need_layout != NULL
+	  && bed->size_relative_relocs
+	  && !bed->size_relative_relocs (info, need_layout))
+	info->callbacks->einfo
+	  (_("%F%P: failed to size relative relocations\n"));
+    }
 
   if (no_user_phdrs && bfd_count_sections (abfd) != 0)
     {
@@ -4675,21 +5203,23 @@ _bfd_elf_map_sections_to_segments (bfd *
       unsigned int hdr_index;
       bfd_vma maxpagesize;
       asection **hdrpp;
-      bfd_boolean phdr_in_segment;
-      bfd_boolean writable;
-      bfd_boolean executable;
-      int tls_count = 0;
+      bool phdr_in_segment;
+      bool writable;
+      bool executable;
+      unsigned int tls_count = 0;
       asection *first_tls = NULL;
       asection *first_mbind = NULL;
       asection *dynsec, *eh_frame_hdr;
-      bfd_size_type amt;
-      bfd_vma addr_mask, wrap_to = 0;
-      bfd_size_type phdr_size;
+      asection *sframe;
+      size_t amt;
+      bfd_vma addr_mask, wrap_to = 0;  /* Bytes.  */
+      bfd_size_type phdr_size;  /* Octets/bytes.  */
+      unsigned int opb = bfd_octets_per_byte (abfd, NULL);
 
       /* Select the allocated sections, and sort them.  */
 
-      sections = (asection **) bfd_malloc2 (bfd_count_sections (abfd),
-					    sizeof (asection *));
+      amt = bfd_count_sections (abfd) * sizeof (asection *);
+      sections = (asection **) bfd_malloc (amt);
       if (sections == NULL)
 	goto error_return;
 
@@ -4711,8 +5241,8 @@ _bfd_elf_map_sections_to_segments (bfd *
 	      sections[i] = s;
 	      ++i;
 	      /* A wrapping section potentially clashes with header.  */
-	      if (((s->lma + s->size) & addr_mask) < (s->lma & addr_mask))
-		wrap_to = (s->lma + s->size) & addr_mask;
+	      if (((s->lma + s->size / opb) & addr_mask) < (s->lma & addr_mask))
+		wrap_to = (s->lma + s->size / opb) & addr_mask;
 	    }
 	}
       BFD_ASSERT (i <= bfd_count_sections (abfd));
@@ -4724,7 +5254,12 @@ _bfd_elf_map_sections_to_segments (bfd *
       if (phdr_size == (bfd_size_type) -1)
 	phdr_size = get_program_header_size (abfd, info);
       phdr_size += bed->s->sizeof_ehdr;
-      maxpagesize = bed->maxpagesize;
+      /* phdr_size is compared to LMA values which are in bytes.  */
+      phdr_size /= opb;
+      if (info != NULL)
+	maxpagesize = info->maxpagesize;
+      else
+	maxpagesize = bed->maxpagesize;
       if (maxpagesize == 0)
 	maxpagesize = 1;
       phdr_in_segment = info != NULL && info->load_phdrs;
@@ -4734,7 +5269,7 @@ _bfd_elf_map_sections_to_segments (bfd *
 	/* For compatibility with old scripts that may not be using
 	   SIZEOF_HEADERS, add headers when it looks like space has
 	   been left for them.  */
-	phdr_in_segment = TRUE;
+	phdr_in_segment = true;
 
       /* Build the mapping.  */
       mfirst = NULL;
@@ -4755,7 +5290,7 @@ _bfd_elf_map_sections_to_segments (bfd *
 	  m->p_flags = PF_R;
 	  m->p_flags_valid = 1;
 	  m->includes_phdrs = 1;
-	  phdr_in_segment = TRUE;
+	  phdr_in_segment = true;
 	  *pm = m;
 	  pm = &m->next;
 
@@ -4778,15 +5313,15 @@ _bfd_elf_map_sections_to_segments (bfd *
       last_hdr = NULL;
       last_size = 0;
       hdr_index = 0;
-      writable = FALSE;
-      executable = FALSE;
+      writable = false;
+      executable = false;
       dynsec = bfd_get_section_by_name (abfd, ".dynamic");
       if (dynsec != NULL
 	  && (dynsec->flags & SEC_LOAD) == 0)
 	dynsec = NULL;
 
       if ((abfd->flags & D_PAGED) == 0)
-	phdr_in_segment = FALSE;
+	phdr_in_segment = false;
 
       /* Deal with -Ttext or something similar such that the first section
 	 is not adjacent to the program headers.  This is an
@@ -4794,8 +5329,8 @@ _bfd_elf_map_sections_to_segments (bfd *
 	 program headers we will need.  */
       if (phdr_in_segment && count > 0)
 	{
-	  bfd_vma phdr_lma;
-	  bfd_boolean separate_phdr = FALSE;
+	  bfd_vma phdr_lma;  /* Bytes.  */
+	  bool separate_phdr = false;
 
 	  phdr_lma = (sections[0]->lma - phdr_size) & addr_mask & -maxpagesize;
 	  if (info != NULL
@@ -4806,7 +5341,7 @@ _bfd_elf_map_sections_to_segments (bfd *
 		 thus not executable, and the first section is
 		 executable then put the file and program headers in
 		 their own PT_LOAD.  */
-	      separate_phdr = TRUE;
+	      separate_phdr = true;
 	      if ((((phdr_lma + phdr_size - 1) & addr_mask & -maxpagesize)
 		   == (sections[0]->lma & addr_mask & -maxpagesize)))
 		{
@@ -4816,38 +5351,38 @@ _bfd_elf_map_sections_to_segments (bfd *
 		  if (phdr_lma >= maxpagesize)
 		    phdr_lma -= maxpagesize;
 		  else
-		    separate_phdr = FALSE;
+		    separate_phdr = false;
 		}
 	    }
 	  if ((sections[0]->lma & addr_mask) < phdr_lma
 	      || (sections[0]->lma & addr_mask) < phdr_size)
 	    /* If file and program headers would be placed at the end
 	       of memory then it's probably better to omit them.  */
-	    phdr_in_segment = FALSE;
+	    phdr_in_segment = false;
 	  else if (phdr_lma < wrap_to)
 	    /* If a section wraps around to where we'll be placing
 	       file and program headers, then the headers will be
 	       overwritten.  */
-	    phdr_in_segment = FALSE;
+	    phdr_in_segment = false;
 	  else if (separate_phdr)
 	    {
 	      m = make_mapping (abfd, sections, 0, 0, phdr_in_segment);
 	      if (m == NULL)
 		goto error_return;
-	      m->p_paddr = phdr_lma;
+	      m->p_paddr = phdr_lma * opb;
 	      m->p_vaddr_offset
 		= (sections[0]->vma - phdr_size) & addr_mask & -maxpagesize;
 	      m->p_paddr_valid = 1;
 	      *pm = m;
 	      pm = &m->next;
-	      phdr_in_segment = FALSE;
+	      phdr_in_segment = false;
 	    }
 	}
 
       for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
 	{
 	  asection *hdr;
-	  bfd_boolean new_segment;
+	  bool new_segment;
 
 	  hdr = *hdrpp;
 
@@ -4858,21 +5393,21 @@ _bfd_elf_map_sections_to_segments (bfd *
 	    {
 	      /* If we don't have a segment yet, then we don't need a new
 		 one (we build the last one after this loop).  */
-	      new_segment = FALSE;
+	      new_segment = false;
 	    }
 	  else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
 	    {
 	      /* If this section has a different relation between the
 		 virtual address and the load address, then we need a new
 		 segment.  */
-	      new_segment = TRUE;
+	      new_segment = true;
 	    }
 	  else if (hdr->lma < last_hdr->lma + last_size
 		   || last_hdr->lma + last_size < last_hdr->lma)
 	    {
 	      /* If this section has a load address that makes it overlap
 		 the previous section, then we need a new segment.  */
-	      new_segment = TRUE;
+	      new_segment = true;
 	    }
 	  else if ((abfd->flags & D_PAGED) != 0
 		   && (((last_hdr->lma + last_size - 1) & -maxpagesize)
@@ -4880,7 +5415,7 @@ _bfd_elf_map_sections_to_segments (bfd *
 	    {
 	      /* If we are demand paged then we can't map two disk
 		 pages onto the same memory page.  */
-	      new_segment = FALSE;
+	      new_segment = false;
 	    }
 	  /* In the next test we have to be careful when last_hdr->lma is close
 	     to the end of the address space.  If the aligned address wraps
@@ -4894,7 +5429,7 @@ _bfd_elf_map_sections_to_segments (bfd *
 	    {
 	      /* If putting this section in this segment would force us to
 		 skip a page in the segment, then we need a new segment.  */
-	      new_segment = TRUE;
+	      new_segment = true;
 	    }
 	  else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
 		   && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
@@ -4903,32 +5438,32 @@ _bfd_elf_map_sections_to_segments (bfd *
 		 nonloaded (ie. bss style) section in the same segment
 		 as that will force the non-loaded section to be loaded.
 		 Consider .tbss sections as loaded for this purpose.  */
-	      new_segment = TRUE;
+	      new_segment = true;
 	    }
 	  else if ((abfd->flags & D_PAGED) == 0)
 	    {
 	      /* If the file is not demand paged, which means that we
 		 don't require the sections to be correctly aligned in the
 		 file, then there is no other reason for a new segment.  */
-	      new_segment = FALSE;
+	      new_segment = false;
 	    }
 	  else if (info != NULL
 		   && info->separate_code
 		   && executable != ((hdr->flags & SEC_CODE) != 0))
 	    {
-	      new_segment = TRUE;
+	      new_segment = true;
 	    }
 	  else if (! writable
 		   && (hdr->flags & SEC_READONLY) == 0)
 	    {
 	      /* We don't want to put a writable section in a read only
 		 segment.  */
-	      new_segment = TRUE;
+	      new_segment = true;
 	    }
 	  else
 	    {
 	      /* Otherwise, we can use the same segment.  */
-	      new_segment = FALSE;
+	      new_segment = false;
 	    }
 
 	  /* Allow interested parties a chance to override our decision.  */
@@ -4943,12 +5478,12 @@ _bfd_elf_map_sections_to_segments (bfd *
 	  if (! new_segment)
 	    {
 	      if ((hdr->flags & SEC_READONLY) == 0)
-		writable = TRUE;
+		writable = true;
 	      if ((hdr->flags & SEC_CODE) != 0)
-		executable = TRUE;
+		executable = true;
 	      last_hdr = hdr;
 	      /* .tbss sections effectively have zero size.  */
-	      last_size = !IS_TBSS (hdr) ? hdr->size : 0;
+	      last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
 	      continue;
 	    }
 
@@ -4963,20 +5498,20 @@ _bfd_elf_map_sections_to_segments (bfd *
 	  pm = &m->next;
 
 	  if ((hdr->flags & SEC_READONLY) == 0)
-	    writable = TRUE;
+	    writable = true;
 	  else
-	    writable = FALSE;
+	    writable = false;
 
 	  if ((hdr->flags & SEC_CODE) == 0)
-	    executable = FALSE;
+	    executable = false;
 	  else
-	    executable = TRUE;
+	    executable = true;
 
 	  last_hdr = hdr;
 	  /* .tbss sections effectively have zero size.  */
-	  last_size = !IS_TBSS (hdr) ? hdr->size : 0;
+	  last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
 	  hdr_index = i;
-	  phdr_in_segment = FALSE;
+	  phdr_in_segment = false;
 	}
 
       /* Create a final PT_LOAD program segment, but not if it's just
@@ -5022,7 +5557,7 @@ _bfd_elf_map_sections_to_segments (bfd *
 		  if (s2->next->alignment_power == alignment_power
 		      && (s2->next->flags & SEC_LOAD) != 0
 		      && elf_section_type (s2->next) == SHT_NOTE
-		      && align_power (s2->lma + s2->size,
+		      && align_power (s2->lma + s2->size / opb,
 				      alignment_power)
 		      == s2->next->lma)
 		    count++;
@@ -5074,7 +5609,7 @@ _bfd_elf_map_sections_to_segments (bfd *
 	  m->p_flags = PF_R;
 	  m->p_flags_valid = 1;
 	  s = first_tls;
-	  for (i = 0; i < (unsigned int) tls_count; ++i)
+	  for (i = 0; i < tls_count; ++i)
 	    {
 	      if ((s->flags & SEC_THREAD_LOCAL) == 0)
 		{
@@ -5082,7 +5617,7 @@ _bfd_elf_map_sections_to_segments (bfd *
 		    (_("%pB: TLS sections are not adjacent:"), abfd);
 		  s = first_tls;
 		  i = 0;
-		  while (i < (unsigned int) tls_count)
+		  while (i < tls_count)
 		    {
 		      if ((s->flags & SEC_THREAD_LOCAL) != 0)
 			{
@@ -5154,7 +5689,7 @@ _bfd_elf_map_sections_to_segments (bfd *
 
       /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
 	 segment.  */
-      eh_frame_hdr = elf_eh_frame_hdr (abfd);
+      eh_frame_hdr = elf_eh_frame_hdr (info);
       if (eh_frame_hdr != NULL
 	  && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
 	{
@@ -5171,6 +5706,26 @@ _bfd_elf_map_sections_to_segments (bfd *
 	  pm = &m->next;
 	}
 
+      /* If there is a .sframe section, throw in a PT_GNU_SFRAME
+	 segment.  */
+      sframe = elf_sframe (abfd);
+      if (sframe != NULL
+	  && (sframe->output_section->flags & SEC_LOAD) != 0
+	  && sframe->size != 0)
+	{
+	  amt = sizeof (struct elf_segment_map);
+	  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
+	  if (m == NULL)
+	    goto error_return;
+	  m->next = NULL;
+	  m->p_type = PT_GNU_SFRAME;
+	  m->count = 1;
+	  m->sections[0] = sframe->output_section;
+
+	  *pm = m;
+	  pm = &m->next;
+	}
+
       if (elf_stack_flags (abfd))
 	{
 	  amt = sizeof (struct elf_segment_map);
@@ -5204,9 +5759,12 @@ _bfd_elf_map_sections_to_segments (bfd *
 		{
 		  i = m->count;
 		  while (--i != (unsigned) -1)
-		    if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS))
-			== (SEC_LOAD | SEC_HAS_CONTENTS))
-		      break;
+		    {
+		      if (m->sections[i]->size > 0
+			  && (m->sections[i]->flags & SEC_LOAD) != 0
+			  && (m->sections[i]->flags & SEC_HAS_CONTENTS) != 0)
+			break;
+		    }
 
 		  if (i != (unsigned) -1)
 		    break;
@@ -5232,18 +5790,17 @@ _bfd_elf_map_sections_to_segments (bfd *
     }
 
   if (!elf_modify_segment_map (abfd, info, no_user_phdrs))
-    return FALSE;
+    return false;
 
   for (count = 0, m = elf_seg_map (abfd); m != NULL; m = m->next)
     ++count;
   elf_program_header_size (abfd) = count * bed->s->sizeof_phdr;
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (sections != NULL)
-    free (sections);
-  return FALSE;
+  free (sections);
+  return false;
 }
 
 /* Sort sections by address.  */
@@ -5271,7 +5828,8 @@ elf_sort_sections (const void *arg1, con
 
   /* Put !SEC_LOAD sections after SEC_LOAD ones.  */
 
-#define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0)
+#define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0 \
+		  && (x)->size != 0)
 
   if (TOEND (sec1))
     {
@@ -5320,17 +5878,25 @@ elf_sort_segments (const void *arg1, con
     return m1->no_sort_lma ? -1 : 1;
   if (m1->p_type == PT_LOAD && !m1->no_sort_lma)
     {
-      bfd_vma lma1, lma2;
+      bfd_vma lma1, lma2;  /* Octets.  */
       lma1 = 0;
       if (m1->p_paddr_valid)
 	lma1 = m1->p_paddr;
       else if (m1->count != 0)
-	lma1 = m1->sections[0]->lma + m1->p_vaddr_offset;
+	{
+	  unsigned int opb = bfd_octets_per_byte (m1->sections[0]->owner,
+						  m1->sections[0]);
+	  lma1 = (m1->sections[0]->lma + m1->p_vaddr_offset) * opb;
+	}
       lma2 = 0;
       if (m2->p_paddr_valid)
 	lma2 = m2->p_paddr;
       else if (m2->count != 0)
-	lma2 = m2->sections[0]->lma + m2->p_vaddr_offset;
+	{
+	  unsigned int opb = bfd_octets_per_byte (m2->sections[0]->owner,
+						  m2->sections[0]);
+	  lma2 = (m2->sections[0]->lma + m2->p_vaddr_offset) * opb;
+	}
       if (lma1 != lma2)
 	return lma1 < lma2 ? -1 : 1;
     }
@@ -5399,27 +5965,11 @@ print_segment_map (const struct elf_segm
   fflush (stderr);
 }
 
-static bfd_boolean
-write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
-{
-  void *buf;
-  bfd_boolean ret;
-
-  if (bfd_seek (abfd, pos, SEEK_SET) != 0)
-    return FALSE;
-  buf = bfd_zmalloc (len);
-  if (buf == NULL)
-    return FALSE;
-  ret = bfd_bwrite (buf, len, abfd) == len;
-  free (buf);
-  return ret;
-}
-
 /* Assign file positions to the sections based on the mapping from
    sections to segments.  This function also sets up some fields in
    the file header.  */
 
-static bfd_boolean
+static bool
 assign_file_positions_for_load_sections (bfd *abfd,
 					 struct bfd_link_info *link_info)
 {
@@ -5428,15 +5978,16 @@ assign_file_positions_for_load_sections
   struct elf_segment_map *phdr_load_seg;
   Elf_Internal_Phdr *phdrs;
   Elf_Internal_Phdr *p;
-  file_ptr off;
+  file_ptr off;  /* Octets.  */
   bfd_size_type maxpagesize;
   unsigned int alloc, actual;
   unsigned int i, j;
   struct elf_segment_map **sorted_seg_map;
+  unsigned int opb = bfd_octets_per_byte (abfd, NULL);
 
   if (link_info == NULL
-      && !_bfd_elf_map_sections_to_segments (abfd, link_info))
-    return FALSE;
+      && !_bfd_elf_map_sections_to_segments (abfd, link_info, NULL))
+    return false;
 
   alloc = 0;
   for (m = elf_seg_map (abfd); m != NULL; m = m->next)
@@ -5472,7 +6023,7 @@ assign_file_positions_for_load_sections
   if (alloc == 0)
     {
       elf_next_file_pos (abfd) = bed->s->sizeof_ehdr;
-      return TRUE;
+      return true;
     }
 
   /* We're writing the size in elf_program_header_size (abfd),
@@ -5489,7 +6040,7 @@ assign_file_positions_for_load_sections
   sorted_seg_map = (struct elf_segment_map **) (phdrs + actual);
   elf_tdata (abfd)->phdr = phdrs;
   if (phdrs == NULL)
-    return FALSE;
+    return false;
 
   for (m = elf_seg_map (abfd), j = 0; m != NULL; m = m->next, j++)
     {
@@ -5515,7 +6066,12 @@ assign_file_positions_for_load_sections
 
   maxpagesize = 1;
   if ((abfd->flags & D_PAGED) != 0)
-    maxpagesize = bed->maxpagesize;
+    {
+      if (link_info != NULL)
+	maxpagesize = link_info->maxpagesize;
+      else
+	maxpagesize = bed->maxpagesize;
+    }
 
   /* Sections must map to file offsets past the ELF file header.  */
   off = bed->s->sizeof_ehdr;
@@ -5540,8 +6096,10 @@ assign_file_positions_for_load_sections
   for (j = 0; j < alloc; j++)
     {
       asection **secpp;
-      bfd_vma off_adjust;
-      bfd_boolean no_contents;
+      bfd_vma off_adjust;  /* Octets.  */
+      bool no_contents;
+      bfd_size_type p_align;
+      bool p_align_p;
 
       /* An ELF segment (described by Elf_Internal_Phdr) may contain a
 	 number of sections with contents contributing to both p_filesz
@@ -5552,18 +6110,20 @@ assign_file_positions_for_load_sections
       p = phdrs + m->idx;
       p->p_type = m->p_type;
       p->p_flags = m->p_flags;
+      p_align = bed->p_align;
+      p_align_p = false;
 
       if (m->count == 0)
-	p->p_vaddr = m->p_vaddr_offset;
+	p->p_vaddr = m->p_vaddr_offset * opb;
       else
-	p->p_vaddr = m->sections[0]->vma + m->p_vaddr_offset;
+	p->p_vaddr = (m->sections[0]->vma + m->p_vaddr_offset) * opb;
 
       if (m->p_paddr_valid)
 	p->p_paddr = m->p_paddr;
       else if (m->count == 0)
 	p->p_paddr = 0;
       else
-	p->p_paddr = m->sections[0]->lma + m->p_vaddr_offset;
+	p->p_paddr = (m->sections[0]->lma + m->p_vaddr_offset) * opb;
 
       if (p->p_type == PT_LOAD
 	  && (abfd->flags & D_PAGED) != 0)
@@ -5578,6 +6138,15 @@ assign_file_positions_for_load_sections
 	     segment.  */
 	  if (m->p_align_valid)
 	    maxpagesize = m->p_align;
+	  else if (p_align != 0
+		   && (link_info == NULL
+		       || !link_info->maxpagesize_is_set))
+	    /* Set p_align to the default p_align value while laying
+	       out segments aligning to the maximum page size or the
+	       largest section alignment.  The run-time loader can
+	       align segments to the default p_align value or the
+	       maximum page size, depending on system page size.  */
+	    p_align_p = true;
 
 	  p->p_align = maxpagesize;
 	}
@@ -5593,12 +6162,12 @@ assign_file_positions_for_load_sections
 	  off += actual * bed->s->sizeof_phdr;
 	}
 
-      no_contents = FALSE;
+      no_contents = false;
       off_adjust = 0;
       if (p->p_type == PT_LOAD
 	  && m->count > 0)
 	{
-	  bfd_size_type align;
+	  bfd_size_type align;  /* Bytes.  */
 	  unsigned int align_power = 0;
 
 	  if (m->p_align_valid)
@@ -5615,7 +6184,22 @@ assign_file_positions_for_load_sections
 		}
 	      align = (bfd_size_type) 1 << align_power;
 	      if (align < maxpagesize)
-		align = maxpagesize;
+		{
+		  /* If a section requires alignment higher than the
+		     default p_align value, don't set p_align to the
+		     default p_align value.  */
+		  if (align > p_align)
+		    p_align_p = false;
+		  align = maxpagesize;
+		}
+	      else
+		{
+		  /* If a section requires alignment higher than the
+		     maximum page size, set p_align to the section
+		     alignment.  */
+		  p_align_p = true;
+		  p_align = align;
+		}
 	    }
 
 	  for (i = 0; i < m->count; i++)
@@ -5627,15 +6211,15 @@ assign_file_positions_for_load_sections
 
 	  /* Find out whether this segment contains any loadable
 	     sections.  */
-	  no_contents = TRUE;
+	  no_contents = true;
 	  for (i = 0; i < m->count; i++)
 	    if (elf_section_type (m->sections[i]) != SHT_NOBITS)
 	      {
-		no_contents = FALSE;
+		no_contents = false;
 		break;
 	      }
 
-	  off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align);
+	  off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align * opb);
 
 	  /* Broken hardware and/or kernel require that files do not
 	     map the same page with different permissions on some hppa
@@ -5644,7 +6228,8 @@ assign_file_positions_for_load_sections
 	      && (abfd->flags & D_PAGED) != 0
 	      && bed->no_page_alias
 	      && (off & (maxpagesize - 1)) != 0
-	      && (off & -maxpagesize) == ((off + off_adjust) & -maxpagesize))
+	      && ((off & -maxpagesize)
+		  == ((off + off_adjust) & -maxpagesize)))
 	    off_adjust += maxpagesize;
 	  off += off_adjust;
 	  if (no_contents)
@@ -5672,7 +6257,7 @@ assign_file_positions_for_load_sections
 	       " is not the .dynamic section"),
 	     abfd);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       /* Set the note section type to SHT_NOTE.  */
       else if (p->p_type == PT_NOTE)
@@ -5698,7 +6283,7 @@ assign_file_positions_for_load_sections
 			   " try linking with -N"),
 			 abfd);
 		      bfd_set_error (bfd_error_bad_value);
-		      return FALSE;
+		      return false;
 		    }
 		  p->p_vaddr -= off;
 		  if (!m->p_paddr_valid)
@@ -5735,7 +6320,7 @@ assign_file_positions_for_load_sections
 	      else if (phdr_load_seg != NULL)
 		{
 		  Elf_Internal_Phdr *phdr = phdrs + phdr_load_seg->idx;
-		  bfd_vma phdr_off = 0;
+		  bfd_vma phdr_off = 0;  /* Octets.  */
 		  if (phdr_load_seg->includes_filehdr)
 		    phdr_off = bed->s->sizeof_ehdr;
 		  p->p_vaddr = phdr->p_vaddr + phdr_off;
@@ -5752,10 +6337,24 @@ assign_file_positions_for_load_sections
 	  || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
 	{
 	  if (!m->includes_filehdr && !m->includes_phdrs)
-	    p->p_offset = off;
+	    {
+	      p->p_offset = off;
+	      if (no_contents)
+		{
+		  /* Put meaningless p_offset for PT_LOAD segments
+		     without file contents somewhere within the first
+		     page, in an attempt to not point past EOF.  */
+		  bfd_size_type align = maxpagesize;
+		  if (align < p->p_align)
+		    align = p->p_align;
+		  if (align < 1)
+		    align = 1;
+		  p->p_offset = off % align;
+		}
+	    }
 	  else
 	    {
-	      file_ptr adjust;
+	      file_ptr adjust;  /* Octets.  */
 
 	      adjust = off - (p->p_offset + p->p_filesz);
 	      if (!no_contents)
@@ -5786,10 +6385,10 @@ assign_file_positions_for_load_sections
 		      && ((this_hdr->sh_flags & SHF_TLS) == 0
 			  || p->p_type == PT_TLS))))
 	    {
-	      bfd_vma p_start = p->p_paddr;
-	      bfd_vma p_end = p_start + p->p_memsz;
-	      bfd_vma s_start = sec->lma;
-	      bfd_vma adjust = s_start - p_end;
+	      bfd_vma p_start = p->p_paddr;		/* Octets.  */
+	      bfd_vma p_end = p_start + p->p_memsz;	/* Octets.  */
+	      bfd_vma s_start = sec->lma * opb;		/* Octets.  */
+	      bfd_vma adjust = s_start - p_end;		/* Octets.  */
 
 	      if (adjust != 0
 		  && (s_start < p_end
@@ -5797,30 +6396,50 @@ assign_file_positions_for_load_sections
 		{
 		  _bfd_error_handler
 		    /* xgettext:c-format */
-		    (_("%pB: section %pA lma %#" PRIx64 " adjusted to %#" PRIx64),
-		     abfd, sec, (uint64_t) s_start, (uint64_t) p_end);
+		    (_("%pB: section %pA lma %#" PRIx64
+		       " adjusted to %#" PRIx64),
+		     abfd, sec, (uint64_t) s_start / opb,
+		     (uint64_t) p_end / opb);
 		  adjust = 0;
-		  sec->lma = p_end;
+		  sec->lma = p_end / opb;
 		}
 	      p->p_memsz += adjust;
 
-	      if (this_hdr->sh_type != SHT_NOBITS)
+	      if (p->p_type == PT_LOAD)
 		{
-		  if (p->p_type == PT_LOAD)
+		  if (this_hdr->sh_type != SHT_NOBITS)
 		    {
+		      off_adjust = 0;
 		      if (p->p_filesz + adjust < p->p_memsz)
 			{
 			  /* We have a PROGBITS section following NOBITS ones.
-			     Allocate file space for the NOBITS section(s) and
-			     zero it.  */
+			     Allocate file space for the NOBITS section(s).
+			     We don't need to write out the zeros, posix
+			     fseek past the end of data already written
+			     followed by a write at that location is
+			     guaranteed to result in zeros being read
+			     from the gap.  */
 			  adjust = p->p_memsz - p->p_filesz;
-			  if (!write_zeros (abfd, off, adjust))
-			    return FALSE;
 			}
+		    }
+		  /* We only adjust sh_offset in SHT_NOBITS sections
+		     as would seem proper for their address when the
+		     section is first in the segment.  sh_offset
+		     doesn't really have any significance for
+		     SHT_NOBITS anyway, apart from a notional position
+		     relative to other sections.  Historically we
+		     didn't bother with adjusting sh_offset and some
+		     programs depend on it not being adjusted.  See
+		     pr12921 and pr25662.  */
+		  if (this_hdr->sh_type != SHT_NOBITS || i == 0)
+		    {
 		      off += adjust;
+		      if (this_hdr->sh_type == SHT_NOBITS)
+			off_adjust += adjust;
 		    }
-		  p->p_filesz += adjust;
 		}
+	      if (this_hdr->sh_type != SHT_NOBITS)
+		p->p_filesz += adjust;
 	    }
 
 	  if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
@@ -5920,14 +6539,18 @@ assign_file_positions_for_load_sections
 	  _bfd_error_handler (_("%pB: error: PHDR segment not covered"
 				" by LOAD segment"),
 			      abfd);
-	  return FALSE;
+	  if (link_info == NULL)
+	    return false;
+	  /* Arrange for the linker to exit with an error, deleting
+	     the output file unless --noinhibit-exec is given.  */
+	  link_info->callbacks->info ("%X");
 	}
 
       /* Check that all sections are in a PT_LOAD segment.
 	 Don't check funky gdb generated core files.  */
       if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
 	{
-	  bfd_boolean check_vma = TRUE;
+	  bool check_vma = true;
 
 	  for (i = 1; i < m->count; i++)
 	    if (m->sections[i]->vma == m->sections[i - 1]->vma
@@ -5937,7 +6560,7 @@ assign_file_positions_for_load_sections
 				       ->this_hdr), p) != 0)
 	      {
 		/* Looks like we have overlays packed into the segment.  */
-		check_vma = FALSE;
+		check_vma = false;
 		break;
 	      }
 
@@ -5958,6 +6581,9 @@ assign_file_positions_for_load_sections
 		  print_segment_map (m);
 		}
 	    }
+
+	  if (p_align_p)
+	    p->p_align = p_align;
 	}
     }
 
@@ -5973,7 +6599,7 @@ assign_file_positions_for_load_sections
 
       struct elf_link_hash_entry *hash
 	= elf_link_hash_lookup (elf_hash_table (link_info), "__ehdr_start",
-				FALSE, FALSE, TRUE);
+				false, false, true);
       /* If the symbol was referenced and not defined, define it.  */
       if (hash != NULL
 	  && (hash->root.type == bfd_link_hash_new
@@ -5982,7 +6608,7 @@ assign_file_positions_for_load_sections
 	      || hash->root.type == bfd_link_hash_common))
 	{
 	  asection *s = NULL;
-	  bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr;
+	  bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr / opb;
 
 	  if (phdr_load_seg->count != 0)
 	    /* The segment contains sections, so use the first one.  */
@@ -6013,18 +6639,18 @@ assign_file_positions_for_load_sections
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Determine if a bfd is a debuginfo file.  Unfortunately there
    is no defined method for detecting such files, so we have to
    use heuristics instead.  */
 
-bfd_boolean
+bool
 is_debuginfo_file (bfd *abfd)
 {
   if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_elf_flavour)
-    return FALSE;
+    return false;
 
   Elf_Internal_Shdr **start_headers = elf_elfsections (abfd);
   Elf_Internal_Shdr **end_headers = start_headers + elf_numsections (abfd);
@@ -6039,16 +6665,16 @@ is_debuginfo_file (bfd *abfd)
       if ((header->sh_flags & SHF_ALLOC) == SHF_ALLOC
 	  && header->sh_type != SHT_NOBITS
 	  && header->sh_type != SHT_NOTE)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-/* Assign file positions for the other sections, except for compressed debugging
-   and other sections assigned in _bfd_elf_assign_file_positions_for_non_load().  */
+/* Assign file positions for other sections, except for compressed debug
+   and sections assigned in _bfd_elf_assign_file_positions_for_non_load.  */
 
-static bfd_boolean
+static bool
 assign_file_positions_for_non_load_sections (bfd *abfd,
 					     struct bfd_link_info *link_info)
 {
@@ -6059,13 +6685,20 @@ assign_file_positions_for_non_load_secti
   Elf_Internal_Phdr *p;
   struct elf_segment_map *m;
   file_ptr off;
+  unsigned int opb = bfd_octets_per_byte (abfd, NULL);
+  bfd_vma maxpagesize;
 
+  if (link_info != NULL)
+    maxpagesize = link_info->maxpagesize;
+  else
+    maxpagesize = bed->maxpagesize;
   i_shdrpp = elf_elfsections (abfd);
   end_hdrpp = i_shdrpp + elf_numsections (abfd);
   off = elf_next_file_pos (abfd);
   for (hdrpp = i_shdrpp + 1; hdrpp < end_hdrpp; hdrpp++)
     {
       Elf_Internal_Shdr *hdr;
+      bfd_vma align;
 
       hdr = *hdrpp;
       if (hdr->bfd_section != NULL
@@ -6091,22 +6724,21 @@ assign_file_positions_for_non_load_secti
 		: hdr->bfd_section->name));
 	  /* We don't need to page align empty sections.  */
 	  if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
-	    off += vma_page_aligned_bias (hdr->sh_addr, off,
-					  bed->maxpagesize);
+	    align = maxpagesize;
 	  else
-	    off += vma_page_aligned_bias (hdr->sh_addr, off,
-					  hdr->sh_addralign);
+	    align = hdr->sh_addralign & -hdr->sh_addralign;
+	  off += vma_page_aligned_bias (hdr->sh_addr, off, align);
 	  off = _bfd_elf_assign_file_position_for_section (hdr, off,
-							   FALSE);
+							   false);
 	}
       else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
 		&& hdr->bfd_section == NULL)
-	       /* We don't know the offset of these sections yet: their size has
-		  not been decided.  */
-	       || (hdr->bfd_section != NULL
-		   && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
-		       || (bfd_section_is_ctf (hdr->bfd_section)
-			   && abfd->is_linker_output)))
+	       /* We don't know the offset of these sections yet:
+		  their size has not been decided.  */
+	       || (abfd->is_linker_output
+		   && hdr->bfd_section != NULL
+		   && (hdr->sh_name == -1u
+		       || bfd_section_is_ctf (hdr->bfd_section)))
 	       || hdr == i_shdrpp[elf_onesymtab (abfd)]
 	       || (elf_symtab_shndx_list (abfd) != NULL
 		   && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
@@ -6114,7 +6746,7 @@ assign_file_positions_for_non_load_secti
 	       || hdr == i_shdrpp[elf_shstrtab_sec (abfd)])
 	hdr->sh_offset = -1;
       else
-	off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
+	off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
     }
   elf_next_file_pos (abfd) = off;
 
@@ -6125,8 +6757,8 @@ assign_file_positions_for_non_load_secti
     {
       if (p->p_type == PT_GNU_RELRO)
 	{
-	  bfd_vma start, end;
-	  bfd_boolean ok;
+	  bfd_vma start, end;  /* Bytes.  */
+	  bool ok;
 
 	  if (link_info != NULL)
 	    {
@@ -6141,7 +6773,7 @@ assign_file_positions_for_non_load_secti
 	      if (!m->p_size_valid)
 		abort ();
 	      start = m->sections[0]->vma;
-	      end = start + m->p_size;
+	      end = start + m->p_size / opb;
 	    }
 	  else
 	    {
@@ -6149,7 +6781,7 @@ assign_file_positions_for_non_load_secti
 	      end = 0;
 	    }
 
-	  ok = FALSE;
+	  ok = false;
 	  if (start < end)
 	    {
 	      struct elf_segment_map *lm;
@@ -6166,7 +6798,7 @@ assign_file_positions_for_non_load_secti
 		      && lm->count != 0
 		      && (lm->sections[lm->count - 1]->vma
 			  + (!IS_TBSS (lm->sections[lm->count - 1])
-			     ? lm->sections[lm->count - 1]->size
+			     ? lm->sections[lm->count - 1]->size / opb
 			     : 0)) > start
 		      && lm->sections[0]->vma < end)
 		    break;
@@ -6186,10 +6818,10 @@ assign_file_positions_for_non_load_secti
 
 		  if (i < lm->count)
 		    {
-		      p->p_vaddr = lm->sections[i]->vma;
-		      p->p_paddr = lm->sections[i]->lma;
+		      p->p_vaddr = lm->sections[i]->vma * opb;
+		      p->p_paddr = lm->sections[i]->lma * opb;
 		      p->p_offset = lm->sections[i]->filepos;
-		      p->p_memsz = end - p->p_vaddr;
+		      p->p_memsz = end * opb - p->p_vaddr;
 		      p->p_filesz = p->p_memsz;
 
 		      /* The RELRO segment typically ends a few bytes
@@ -6211,14 +6843,20 @@ assign_file_positions_for_non_load_secti
 			p->p_align = 1;
 		      if (!m->p_flags_valid)
 			p->p_flags = PF_R;
-		      ok = TRUE;
+		      ok = true;
 		    }
 		}
 	    }
-	  if (link_info != NULL)
-	    BFD_ASSERT (ok);
+
 	  if (!ok)
-	    memset (p, 0, sizeof *p);
+	    {
+	      if (link_info != NULL)
+		_bfd_error_handler
+		  (_("%pB: warning: unable to allocate any sections"
+		     " to PT_GNU_RELRO segment"),
+		   abfd);
+	      memset (p, 0, sizeof *p);
+	    }
 	}
       else if (p->p_type == PT_GNU_STACK)
 	{
@@ -6248,7 +6886,7 @@ assign_file_positions_for_non_load_secti
 		    (_("%pB: error: non-load segment %d includes file header "
 		       "and/or program header"),
 		     abfd, (int) (p - phdrs));
-		  return FALSE;
+		  return false;
 		}
 
 	      p->p_filesz = 0;
@@ -6259,8 +6897,12 @@ assign_file_positions_for_non_load_secti
 		  Elf_Internal_Shdr *hdr = &elf_section_data (sect)->this_hdr;
 		  if (hdr->sh_type != SHT_NOBITS)
 		    {
-		      p->p_filesz = (sect->filepos - m->sections[0]->filepos
-				     + hdr->sh_size);
+		      p->p_filesz = sect->filepos - p->p_offset + hdr->sh_size;
+		      /* NB: p_memsz of the loadable PT_NOTE segment
+			 should be the same as p_filesz.  */
+		      if (p->p_type == PT_NOTE
+			  && (hdr->sh_flags & SHF_ALLOC) != 0)
+			p->p_memsz = p->p_filesz;
 		      break;
 		    }
 		}
@@ -6268,7 +6910,7 @@ assign_file_positions_for_non_load_secti
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static elf_section_list *
@@ -6285,17 +6927,17 @@ find_section_in_list (unsigned int i, el
    VMAs must be known before this is called.
 
    Reloc sections come in two flavours: Those processed specially as
-   "side-channel" data attached to a section to which they apply, and those that
-   bfd doesn't process as relocations.  The latter sort are stored in a normal
-   bfd section by bfd_section_from_shdr.  We don't consider the former sort
-   here, unless they form part of the loadable image.  Reloc sections not
-   assigned here (and compressed debugging sections and CTF sections which
-   nothing else in the file can rely upon) will be handled later by
-   assign_file_positions_for_relocs.
+   "side-channel" data attached to a section to which they apply, and
+   those that bfd doesn't process as relocations.  The latter sort are
+   stored in a normal bfd section by bfd_section_from_shdr.  We don't
+   consider the former sort here, unless they form part of the loadable
+   image.  Reloc sections not assigned here (and compressed debugging
+   sections and CTF sections which nothing else in the file can rely
+   upon) will be handled later by assign_file_positions_for_relocs.
 
    We also don't set the positions of the .symtab and .strtab here.  */
 
-static bfd_boolean
+static bool
 assign_file_positions_except_relocs (bfd *abfd,
 				     struct bfd_link_info *link_info)
 {
@@ -6328,10 +6970,10 @@ assign_file_positions_except_relocs (bfd
 	       && hdr->bfd_section == NULL)
 	      /* Do not assign offsets for these sections yet: we don't know
 		 their sizes.  */
-	      || (hdr->bfd_section != NULL
-		  && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
-		      || (bfd_section_is_ctf (hdr->bfd_section)
-			  && abfd->is_linker_output)))
+	      || (abfd->is_linker_output
+		  && hdr->bfd_section != NULL
+		  && (hdr->sh_name == -1u
+		      || bfd_section_is_ctf (hdr->bfd_section)))
 	      || i == elf_onesymtab (abfd)
 	      || (elf_symtab_shndx_list (abfd) != NULL
 		  && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
@@ -6341,7 +6983,7 @@ assign_file_positions_except_relocs (bfd
 	      hdr->sh_offset = -1;
 	    }
 	  else
-	    off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
+	    off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
 	}
 
       elf_next_file_pos (abfd) = off;
@@ -6352,29 +6994,90 @@ assign_file_positions_except_relocs (bfd
       /* Assign file positions for the loaded sections based on the
 	 assignment of sections to segments.  */
       if (!assign_file_positions_for_load_sections (abfd, link_info))
-	return FALSE;
+	return false;
 
       /* And for non-load sections.  */
       if (!assign_file_positions_for_non_load_sections (abfd, link_info))
-	return FALSE;
+	return false;
     }
 
   if (!(*bed->elf_backend_modify_headers) (abfd, link_info))
-    return FALSE;
+    return false;
 
   /* Write out the program headers.  */
   alloc = i_ehdrp->e_phnum;
   if (alloc != 0)
     {
+      if (link_info != NULL && ! link_info->no_warn_rwx_segments)
+	{
+	  bool warned_tls = false;
+	  bool warned_rwx = false;
+
+	  /* Memory resident segments with non-zero size and RWX
+	     permissions are a security risk, so we generate a warning
+	     here if we are creating any.  */
+	  unsigned int i;
+
+	  for (i = 0; i < alloc; i++)
+	    {
+	      const Elf_Internal_Phdr * phdr = tdata->phdr + i;
+
+	      if (phdr->p_memsz == 0)
+		continue;
+
+	      if (! warned_tls
+		  && phdr->p_type == PT_TLS
+		  && (phdr->p_flags & PF_X))
+		{
+		  if (link_info->warn_is_error_for_rwx_segments)
+		    {
+		      _bfd_error_handler (_("\
+error: %pB has a TLS segment with execute permission"),
+					  abfd);
+		      return false;
+		    }
+
+		  _bfd_error_handler (_("\
+warning: %pB has a TLS segment with execute permission"),
+				      abfd);
+		  if (warned_rwx)
+		    break;
+
+		  warned_tls = true;
+		}
+	      else if (! warned_rwx
+		       && phdr->p_type == PT_LOAD
+		       && ((phdr->p_flags & (PF_R | PF_W | PF_X))
+			   == (PF_R | PF_W | PF_X)))
+		{
+		  if (link_info->warn_is_error_for_rwx_segments)
+		    {
+		      _bfd_error_handler (_("\
+error: %pB has a LOAD segment with RWX permissions"),
+					  abfd);
+		      return false;
+		    }
+
+		  _bfd_error_handler (_("\
+warning: %pB has a LOAD segment with RWX permissions"),
+				      abfd);
+		  if (warned_tls)
+		    break;
+
+		  warned_rwx = true;
+		}
+	    }
+	}
+
       if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0
 	  || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_elf_init_file_header (bfd *abfd,
 			   struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
@@ -6386,7 +7089,7 @@ _bfd_elf_init_file_header (bfd *abfd,
 
   shstrtab = _bfd_elf_strtab_init ();
   if (shstrtab == NULL)
-    return FALSE;
+    return false;
 
   elf_shstrtab (abfd) = shstrtab;
 
@@ -6440,17 +7143,17 @@ _bfd_elf_init_file_header (bfd *abfd,
   i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
 
   elf_tdata (abfd)->symtab_hdr.sh_name =
-    (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", FALSE);
+    (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", false);
   elf_tdata (abfd)->strtab_hdr.sh_name =
-    (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", FALSE);
+    (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", false);
   elf_tdata (abfd)->shstrtab_hdr.sh_name =
-    (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", FALSE);
+    (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", false);
   if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
       || elf_tdata (abfd)->strtab_hdr.sh_name == (unsigned int) -1
       || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Set e_type in ELF header to ET_EXEC for -pie -Ttext-segment=.
@@ -6460,7 +7163,7 @@ _bfd_elf_init_file_header (bfd *abfd,
    including the Linux kernel.  But really either the spec should be
    changed or the programs updated.  */
 
-bfd_boolean
+bool
 _bfd_elf_modify_headers (bfd *obfd, struct bfd_link_info *link_info)
 {
   if (link_info != NULL && bfd_link_pie (link_info))
@@ -6482,13 +7185,13 @@ _bfd_elf_modify_headers (bfd *obfd, stru
       if (p_vaddr)
 	i_ehdrp->e_type = ET_EXEC;
     }
-  return TRUE;
+  return true;
 }
 
 /* Assign file positions for all the reloc sections which are not part
    of the loadable file image, and the file position of section headers.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_assign_file_positions_for_non_load (bfd *abfd)
 {
   file_ptr off;
@@ -6497,6 +7200,10 @@ _bfd_elf_assign_file_positions_for_non_l
   Elf_Internal_Ehdr *i_ehdrp;
   const struct elf_backend_data *bed;
 
+  /* Skip non-load sections without section header.  */
+  if ((abfd->flags & BFD_NO_SECTION_HEADER) != 0)
+    return true;
+
   off = elf_next_file_pos (abfd);
 
   shdrpp = elf_elfsections (abfd);
@@ -6507,70 +7214,59 @@ _bfd_elf_assign_file_positions_for_non_l
       if (shdrp->sh_offset == -1)
 	{
 	  asection *sec = shdrp->bfd_section;
-	  bfd_boolean is_rel = (shdrp->sh_type == SHT_REL
-				|| shdrp->sh_type == SHT_RELA);
-	  bfd_boolean is_ctf = sec && bfd_section_is_ctf (sec);
-	  if (is_rel
-	      || is_ctf
-	      || (sec != NULL && (sec->flags & SEC_ELF_COMPRESS)))
-	    {
-	      if (!is_rel && !is_ctf)
-		{
-		  const char *name = sec->name;
-		  struct bfd_elf_section_data *d;
-
-		  /* Compress DWARF debug sections.  */
-		  if (!bfd_compress_section (abfd, sec,
-					     shdrp->contents))
-		    return FALSE;
-
-		  if (sec->compress_status == COMPRESS_SECTION_DONE
-		      && (abfd->flags & BFD_COMPRESS_GABI) == 0)
-		    {
-		      /* If section is compressed with zlib-gnu, convert
-			 section name from .debug_* to .zdebug_*.  */
-		      char *new_name
-			= convert_debug_to_zdebug (abfd, name);
-		      if (new_name == NULL)
-			return FALSE;
-		      name = new_name;
-		    }
-		  /* Add section name to section name section.  */
-		  if (shdrp->sh_name != (unsigned int) -1)
-		    abort ();
-		  shdrp->sh_name
-		    = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
-							  name, FALSE);
-		  d = elf_section_data (sec);
-
-		  /* Add reloc section name to section name section.  */
-		  if (d->rel.hdr
-		      && !_bfd_elf_set_reloc_sh_name (abfd,
-						      d->rel.hdr,
-						      name, FALSE))
-		    return FALSE;
-		  if (d->rela.hdr
-		      && !_bfd_elf_set_reloc_sh_name (abfd,
-						      d->rela.hdr,
-						      name, TRUE))
-		    return FALSE;
-
-		  /* Update section size and contents.  */
-		  shdrp->sh_size = sec->size;
-		  shdrp->contents = sec->contents;
-		  shdrp->bfd_section->contents = NULL;
-		}
-	      else if (is_ctf)
-		{
-		  /* Update section size and contents.	*/
-		  shdrp->sh_size = sec->size;
-		  shdrp->contents = sec->contents;
-		}
-
-	      off = _bfd_elf_assign_file_position_for_section (shdrp,
-							       off,
-							       TRUE);
+	  if (sec == NULL
+	      || shdrp->sh_type == SHT_REL
+	      || shdrp->sh_type == SHT_RELA)
+	    ;
+	  else if (bfd_section_is_ctf (sec))
+	    {
+	      /* Update section size and contents.	*/
+	      shdrp->sh_size = sec->size;
+	      shdrp->contents = sec->contents;
+	    }
+	  else if (shdrp->sh_name == -1u)
+	    {
+	      const char *name = sec->name;
+	      struct bfd_elf_section_data *d;
+
+	      /* Compress DWARF debug sections.  */
+	      if (!bfd_compress_section (abfd, sec, shdrp->contents))
+		return false;
+
+	      if (sec->compress_status == COMPRESS_SECTION_DONE
+		  && (abfd->flags & BFD_COMPRESS_GABI) == 0
+		  && name[1] == 'd')
+		{
+		  /* If section is compressed with zlib-gnu, convert
+		     section name from .debug_* to .zdebug_*.  */
+		  char *new_name = bfd_debug_name_to_zdebug (abfd, name);
+		  if (new_name == NULL)
+		    return false;
+		  name = new_name;
+		}
+	      /* Add section name to section name section.  */
+	      shdrp->sh_name
+		= (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
+						      name, false);
+	      d = elf_section_data (sec);
+
+	      /* Add reloc section name to section name section.  */
+	      if (d->rel.hdr
+		  && !_bfd_elf_set_reloc_sh_name (abfd, d->rel.hdr,
+						  name, false))
+		return false;
+	      if (d->rela.hdr
+		  && !_bfd_elf_set_reloc_sh_name (abfd, d->rela.hdr,
+						  name, true))
+		return false;
+
+	      /* Update section size and contents.  */
+	      shdrp->sh_size = sec->size;
+	      shdrp->contents = sec->contents;
+	      sec->contents = NULL;
 	    }
+
+	  off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
 	}
     }
 
@@ -6579,7 +7275,7 @@ _bfd_elf_assign_file_positions_for_non_l
   _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
   shdrp = &elf_tdata (abfd)->shstrtab_hdr;
   shdrp->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
-  off = _bfd_elf_assign_file_position_for_section (shdrp, off, TRUE);
+  off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
 
   /* Place the section headers.  */
   i_ehdrp = elf_elfheader (abfd);
@@ -6589,85 +7285,92 @@ _bfd_elf_assign_file_positions_for_non_l
   off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
   elf_next_file_pos (abfd) = off;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_elf_write_object_contents (bfd *abfd)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
   Elf_Internal_Shdr **i_shdrp;
-  bfd_boolean failed;
+  bool failed;
   unsigned int count, num_sec;
   struct elf_obj_tdata *t;
 
   if (! abfd->output_has_begun
       && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
-    return FALSE;
+    return false;
   /* Do not rewrite ELF data when the BFD has been opened for update.
-     abfd->output_has_begun was set to TRUE on opening, so creation of new
-     sections, and modification of existing section sizes was restricted.
-     This means the ELF header, program headers and section headers can't have
-     changed.
-     If the contents of any sections has been modified, then those changes have
-     already been written to the BFD.  */
+     abfd->output_has_begun was set to TRUE on opening, so creation of
+     new sections, and modification of existing section sizes was
+     restricted.  This means the ELF header, program headers and
+     section headers can't have changed.  If the contents of any
+     sections has been modified, then those changes have already been
+     written to the BFD.  */
   else if (abfd->direction == both_direction)
     {
       BFD_ASSERT (abfd->output_has_begun);
-      return TRUE;
+      return true;
     }
 
   i_shdrp = elf_elfsections (abfd);
 
-  failed = FALSE;
+  failed = false;
   bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
   if (failed)
-    return FALSE;
+    return false;
 
   if (!_bfd_elf_assign_file_positions_for_non_load (abfd))
-    return FALSE;
+    return false;
 
   /* After writing the headers, we need to write the sections too...  */
   num_sec = elf_numsections (abfd);
   for (count = 1; count < num_sec; count++)
     {
-      i_shdrp[count]->sh_name
-	= _bfd_elf_strtab_offset (elf_shstrtab (abfd),
-				  i_shdrp[count]->sh_name);
+      /* Don't set the sh_name field without section header.  */
+      if ((abfd->flags & BFD_NO_SECTION_HEADER) == 0)
+	i_shdrp[count]->sh_name
+	  = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
+				    i_shdrp[count]->sh_name);
       if (bed->elf_backend_section_processing)
 	if (!(*bed->elf_backend_section_processing) (abfd, i_shdrp[count]))
-	  return FALSE;
+	  return false;
       if (i_shdrp[count]->contents)
 	{
 	  bfd_size_type amt = i_shdrp[count]->sh_size;
 
 	  if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
-	      || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
-	    return FALSE;
+	      || bfd_write (i_shdrp[count]->contents, amt, abfd) != amt)
+	    return false;
 	}
     }
 
   /* Write out the section header names.  */
   t = elf_tdata (abfd);
   if (elf_shstrtab (abfd) != NULL
+      && t->shstrtab_hdr.sh_offset != -1
       && (bfd_seek (abfd, t->shstrtab_hdr.sh_offset, SEEK_SET) != 0
 	  || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
-    return FALSE;
+    return false;
 
   if (!(*bed->elf_backend_final_write_processing) (abfd))
-    return FALSE;
+    return false;
 
   if (!bed->s->write_shdrs_and_ehdr (abfd))
-    return FALSE;
+    return false;
 
   /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0].  */
-  if (t->o->build_id.after_write_object_contents != NULL)
-    return (*t->o->build_id.after_write_object_contents) (abfd);
+  if (t->o->build_id.after_write_object_contents != NULL
+      && !(*t->o->build_id.after_write_object_contents) (abfd))
+    return false;
+  if (t->o->package_metadata.after_write_object_contents != NULL
+      && !(*t->o->package_metadata.after_write_object_contents) (abfd))
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_elf_write_corefile_contents (bfd *abfd)
 {
   /* Hopefully this can be done just like an object file.  */
@@ -6730,15 +7433,14 @@ _bfd_elf_symbol_from_bfd_symbol (bfd *ab
       && asym_ptr->section)
     {
       asection *sec;
-      int indx;
 
       sec = asym_ptr->section;
       if (sec->owner != abfd && sec->output_section != NULL)
 	sec = sec->output_section;
       if (sec->owner == abfd
-	  && (indx = sec->index) < elf_num_section_syms (abfd)
-	  && elf_section_syms (abfd)[indx] != NULL)
-	asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
+	  && sec->index < elf_num_section_syms (abfd)
+	  && elf_section_syms (abfd)[sec->index] != NULL)
+	asym_ptr->udata.i = elf_section_syms (abfd)[sec->index]->udata.i;
     }
 
   idx = asym_ptr->udata.i;
@@ -6758,7 +7460,8 @@ _bfd_elf_symbol_from_bfd_symbol (bfd *ab
 #if DEBUG & 4
   {
     fprintf (stderr,
-	     "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8x\n",
+	     "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d,"
+	     " flags = 0x%.8x\n",
 	     (long) asym_ptr, asym_ptr->name, idx, flags);
     fflush (stderr);
   }
@@ -6767,10 +7470,69 @@ _bfd_elf_symbol_from_bfd_symbol (bfd *ab
   return idx;
 }
 
+static inline bfd_vma
+segment_size (Elf_Internal_Phdr *segment)
+{
+  return (segment->p_memsz > segment->p_filesz
+	  ? segment->p_memsz : segment->p_filesz);
+}
+
+
+/* Returns the end address of the segment + 1.  */
+static inline bfd_vma
+segment_end (Elf_Internal_Phdr *segment, bfd_vma start)
+{
+  return start + segment_size (segment);
+}
+
+static inline bfd_size_type
+section_size (asection *section, Elf_Internal_Phdr *segment)
+{
+  if ((section->flags & SEC_HAS_CONTENTS) != 0
+      || (section->flags & SEC_THREAD_LOCAL) == 0
+      || segment->p_type == PT_TLS)
+    return section->size;
+  return 0;
+}
+
+/* Returns TRUE if the given section is contained within the given
+   segment.  LMA addresses are compared against PADDR when
+   USE_VADDR is false, VMA against VADDR when true.  */
+static bool
+is_contained_by (asection *section, Elf_Internal_Phdr *segment,
+		 bfd_vma paddr, bfd_vma vaddr, unsigned int opb,
+		 bool use_vaddr)
+{
+  bfd_vma seg_addr = !use_vaddr ? paddr : vaddr;
+  bfd_vma addr = !use_vaddr ? section->lma : section->vma;
+  bfd_vma octet;
+  if (_bfd_mul_overflow (addr, opb, &octet))
+    return false;
+  /* The third and fourth lines below are testing that the section end
+     address is within the segment.  It's written this way to avoid
+     overflow.  Add seg_addr + section_size to both sides of the
+     inequality to make it obvious.  */
+  return (octet >= seg_addr
+	  && segment_size (segment) >= section_size (section, segment)
+	  && (octet - seg_addr
+	      <= segment_size (segment) - section_size (section, segment)));
+}
+
+/* Handle PT_NOTE segment.  */
+static bool
+is_note (asection *s, Elf_Internal_Phdr *p)
+{
+  return (p->p_type == PT_NOTE
+	  && elf_section_type (s) == SHT_NOTE
+	  && (ufile_ptr) s->filepos >= p->p_offset
+	  && p->p_filesz >= s->size
+	  && (ufile_ptr) s->filepos - p->p_offset <= p->p_filesz - s->size);
+}
+
 /* Rewrite program header information.  */
 
-static bfd_boolean
-rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
+static bool
+rewrite_elf_program_header (bfd *ibfd, bfd *obfd, bfd_vma maxpagesize)
 {
   Elf_Internal_Ehdr *iehdr;
   struct elf_segment_map *map;
@@ -6780,12 +7542,12 @@ rewrite_elf_program_header (bfd *ibfd, b
   asection *section;
   unsigned int i;
   unsigned int num_segments;
-  bfd_boolean phdr_included = FALSE;
-  bfd_boolean p_paddr_valid;
-  bfd_vma maxpagesize;
+  bool phdr_included = false;
+  bool p_paddr_valid;
   struct elf_segment_map *phdr_adjust_seg = NULL;
   unsigned int phdr_adjust_num = 0;
   const struct elf_backend_data *bed;
+  unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
 
   bed = get_elf_backend_data (ibfd);
   iehdr = elf_elfheader (ibfd);
@@ -6794,48 +7556,6 @@ rewrite_elf_program_header (bfd *ibfd, b
   pointer_to_map = &map_first;
 
   num_segments = elf_elfheader (ibfd)->e_phnum;
-  maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
-
-  /* Returns the end address of the segment + 1.  */
-#define SEGMENT_END(segment, start)					\
-  (start + (segment->p_memsz > segment->p_filesz			\
-	    ? segment->p_memsz : segment->p_filesz))
-
-#define SECTION_SIZE(section, segment)					\
-  (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL))		\
-    != SEC_THREAD_LOCAL || segment->p_type == PT_TLS)			\
-   ? section->size : 0)
-
-  /* Returns TRUE if the given section is contained within
-     the given segment.  VMA addresses are compared.  */
-#define IS_CONTAINED_BY_VMA(section, segment)				\
-  (section->vma >= segment->p_vaddr					\
-   && (section->vma + SECTION_SIZE (section, segment)			\
-       <= (SEGMENT_END (segment, segment->p_vaddr))))
-
-  /* Returns TRUE if the given section is contained within
-     the given segment.  LMA addresses are compared.  */
-#define IS_CONTAINED_BY_LMA(section, segment, base)			\
-  (section->lma >= base							\
-   && (section->lma + SECTION_SIZE (section, segment) >= section->lma)	\
-   && (section->lma + SECTION_SIZE (section, segment)			\
-       <= SEGMENT_END (segment, base)))
-
-  /* Handle PT_NOTE segment.  */
-#define IS_NOTE(p, s)							\
-  (p->p_type == PT_NOTE							\
-   && elf_section_type (s) == SHT_NOTE					\
-   && (bfd_vma) s->filepos >= p->p_offset				\
-   && ((bfd_vma) s->filepos + s->size					\
-       <= p->p_offset + p->p_filesz))
-
-  /* Special case: corefile "NOTE" section containing regs, prpsinfo
-     etc.  */
-#define IS_COREFILE_NOTE(p, s)						\
-  (IS_NOTE (p, s)							\
-   && bfd_get_format (ibfd) == bfd_core					\
-   && s->vma == 0							\
-   && s->lma == 0)
 
   /* The complicated case when p_vaddr is 0 is to handle the Solaris
      linker, which generates a PT_INTERP section with p_vaddr and
@@ -6864,12 +7584,12 @@ rewrite_elf_program_header (bfd *ibfd, b
        7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
        8. PT_DYNAMIC should not contain empty sections at the beginning
 	  (with the possible exception of .dynamic).  */
-#define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed)		\
-  ((((segment->p_paddr							\
-      ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr)	\
-      : IS_CONTAINED_BY_VMA (section, segment))				\
+#define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed, opb)		\
+  (((is_contained_by (section, segment, segment->p_paddr,		\
+		      segment->p_vaddr, opb,				\
+		      bed->want_p_paddr_set_to_zero)			\
      && (section->flags & SEC_ALLOC) != 0)				\
-    || IS_NOTE (segment, section))					\
+    || is_note (section, segment))					\
    && segment->p_type != PT_GNU_STACK					\
    && (segment->p_type != PT_TLS					\
        || (section->flags & SEC_THREAD_LOCAL))				\
@@ -6877,22 +7597,22 @@ rewrite_elf_program_header (bfd *ibfd, b
        || segment->p_type == PT_TLS					\
        || (section->flags & SEC_THREAD_LOCAL) == 0)			\
    && (segment->p_type != PT_DYNAMIC					\
-       || SECTION_SIZE (section, segment) > 0				\
+       || section_size (section, segment) > 0				\
        || (segment->p_paddr						\
-	   ? segment->p_paddr != section->lma				\
-	   : segment->p_vaddr != section->vma)				\
+	   ? segment->p_paddr != section->lma * (opb)			\
+	   : segment->p_vaddr != section->vma * (opb))			\
        || (strcmp (bfd_section_name (section), ".dynamic") == 0))	\
    && (segment->p_type != PT_LOAD || !section->segment_mark))
 
 /* If the output section of a section in the input segment is NULL,
    it is removed from the corresponding output segment.   */
-#define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed)		\
-  (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed)		\
+#define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed, opb)		\
+  (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb)		\
    && section->output_section != NULL)
 
   /* Returns TRUE iff seg1 starts after the end of seg2.  */
 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field)			\
-  (seg1->field >= SEGMENT_END (seg2, seg2->field))
+  (seg1->field >= segment_end (seg2, seg2->field))
 
   /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
      their VMA address ranges and their LMA address ranges overlap.
@@ -6906,21 +7626,26 @@ rewrite_elf_program_header (bfd *ibfd, b
    && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr)			\
 	|| SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
 
-  /* Initialise the segment mark field.  */
+  /* Initialise the segment mark field, and discard stupid alignment.  */
   for (section = ibfd->sections; section != NULL; section = section->next)
-    section->segment_mark = FALSE;
+    {
+      asection *o = section->output_section;
+      if (o != NULL && o->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
+	o->alignment_power = 0;
+      section->segment_mark = false;
+    }
 
   /* The Solaris linker creates program headers in which all the
      p_paddr fields are zero.  When we try to objcopy or strip such a
      file, we get confused.  Check for this case, and if we find it
      don't set the p_paddr_valid fields.  */
-  p_paddr_valid = FALSE;
+  p_paddr_valid = false;
   for (i = 0, segment = elf_tdata (ibfd)->phdr;
        i < num_segments;
        i++, segment++)
     if (segment->p_paddr != 0)
       {
-	p_paddr_valid = TRUE;
+	p_paddr_valid = true;
 	break;
       }
 
@@ -6941,7 +7666,7 @@ rewrite_elf_program_header (bfd *ibfd, b
 	    {
 	      /* Mininal change so that the normal section to segment
 		 assignment code will work.  */
-	      segment->p_vaddr = section->vma;
+	      segment->p_vaddr = section->vma * opb;
 	      break;
 	    }
 
@@ -6967,8 +7692,8 @@ rewrite_elf_program_header (bfd *ibfd, b
 	    {
 	      /* Extend SEGMENT2 to include SEGMENT and then delete
 		 SEGMENT.  */
-	      extra_length = (SEGMENT_END (segment, segment->p_vaddr)
-			      - SEGMENT_END (segment2, segment2->p_vaddr));
+	      extra_length = (segment_end (segment, segment->p_vaddr)
+			      - segment_end (segment2, segment2->p_vaddr));
 
 	      if (extra_length > 0)
 		{
@@ -6987,8 +7712,8 @@ rewrite_elf_program_header (bfd *ibfd, b
 	    {
 	      /* Extend SEGMENT to include SEGMENT2 and then delete
 		 SEGMENT2.  */
-	      extra_length = (SEGMENT_END (segment2, segment2->p_vaddr)
-			      - SEGMENT_END (segment, segment->p_vaddr));
+	      extra_length = (segment_end (segment2, segment2->p_vaddr)
+			      - segment_end (segment, segment->p_vaddr));
 
 	      if (extra_length > 0)
 		{
@@ -7013,7 +7738,7 @@ rewrite_elf_program_header (bfd *ibfd, b
       asection *matching_lma;
       asection *suggested_lma;
       unsigned int j;
-      bfd_size_type amt;
+      size_t amt;
       asection *first_section;
 
       if (segment->p_type == PT_NULL)
@@ -7027,7 +7752,7 @@ rewrite_elf_program_header (bfd *ibfd, b
 	{
 	  /* Find the first section in the input segment, which may be
 	     removed from the corresponding output segment.   */
-	  if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed))
+	  if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb))
 	    {
 	      if (first_section == NULL)
 		first_section = section;
@@ -7039,10 +7764,10 @@ rewrite_elf_program_header (bfd *ibfd, b
       /* Allocate a segment map big enough to contain
 	 all of the sections we have selected.  */
       amt = sizeof (struct elf_segment_map) - sizeof (asection *);
-      amt += (bfd_size_type) section_count * sizeof (asection *);
+      amt += section_count * sizeof (asection *);
       map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
       if (map == NULL)
-	return FALSE;
+	return false;
 
       /* Initialise the fields of the segment map.  Default to
 	 using the physical address of the segment in the input BFD.  */
@@ -7051,6 +7776,17 @@ rewrite_elf_program_header (bfd *ibfd, b
       map->p_flags = segment->p_flags;
       map->p_flags_valid = 1;
 
+      if (map->p_type == PT_LOAD
+	  && (ibfd->flags & D_PAGED) != 0
+	  && maxpagesize > 1
+	  && segment->p_align > 1)
+	{
+	  map->p_align = segment->p_align;
+	  if (segment->p_align > maxpagesize)
+	    map->p_align = maxpagesize;
+	  map->p_align_valid = 1;
+	}
+
       /* If the first section in the input segment is removed, there is
 	 no need to preserve segment physical address in the corresponding
 	 output segment.  */
@@ -7075,7 +7811,7 @@ rewrite_elf_program_header (bfd *ibfd, b
 		     + iehdr->e_phnum * iehdr->e_phentsize)));
 
 	  if (segment->p_type == PT_LOAD && map->includes_phdrs)
-	    phdr_included = TRUE;
+	    phdr_included = true;
 	}
 
       if (section_count == 0)
@@ -7084,10 +7820,12 @@ rewrite_elf_program_header (bfd *ibfd, b
 	     no sections, but ordinary, loadable segments should contain
 	     something.  They are allowed by the ELF spec however, so only
 	     a warning is produced.
+	     Don't warn if an empty PT_LOAD contains the program headers.
 	     There is however the valid use case of embedded systems which
 	     have segments with p_filesz of 0 and a p_memsz > 0 to initialize
 	     flash memory with zeros.  No warning is shown for that case.  */
 	  if (segment->p_type == PT_LOAD
+	      && !map->includes_phdrs
 	      && (segment->p_filesz > 0 || segment->p_memsz == 0))
 	    /* xgettext:c-format */
 	    _bfd_error_handler
@@ -7095,7 +7833,7 @@ rewrite_elf_program_header (bfd *ibfd, b
 		 " at vaddr=%#" PRIx64 ", is this intentional?"),
 	       ibfd, (uint64_t) segment->p_vaddr);
 
-	  map->p_vaddr_offset = segment->p_vaddr;
+	  map->p_vaddr_offset = segment->p_vaddr / opb;
 	  map->count = 0;
 	  *pointer_to_map = map;
 	  pointer_to_map = &map->next;
@@ -7131,9 +7869,10 @@ rewrite_elf_program_header (bfd *ibfd, b
 	 pointers that we are interested in.  As these sections get assigned
 	 to a segment, they are removed from this array.  */
 
-      sections = (asection **) bfd_malloc2 (section_count, sizeof (asection *));
+      amt = section_count * sizeof (asection *);
+      sections = (asection **) bfd_malloc (amt);
       if (sections == NULL)
-	return FALSE;
+	return false;
 
       /* Step One: Scan for segment vs section LMA conflicts.
 	 Also add the sections to the section array allocated above.
@@ -7149,7 +7888,7 @@ rewrite_elf_program_header (bfd *ibfd, b
 	   section != NULL;
 	   section = section->next)
 	{
-	  if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
+	  if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed, opb))
 	    {
 	      output_section = section->output_section;
 
@@ -7170,16 +7909,15 @@ rewrite_elf_program_header (bfd *ibfd, b
 				   + (map->includes_phdrs
 				      ? iehdr->e_phnum * iehdr->e_phentsize
 				      : 0),
-				   output_section->alignment_power)
-		      == output_section->vma))
+				   output_section->alignment_power * opb)
+		      == (output_section->vma * opb)))
 		map->p_paddr = segment->p_vaddr;
 
 	      /* Match up the physical address of the segment with the
 		 LMA address of the output section.  */
-	      if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
-		  || IS_COREFILE_NOTE (segment, section)
-		  || (bed->want_p_paddr_set_to_zero
-		      && IS_CONTAINED_BY_VMA (output_section, segment)))
+	      if (is_contained_by (output_section, segment, map->p_paddr,
+				   0, opb, false)
+		  || is_note (section, segment))
 		{
 		  if (matching_lma == NULL
 		      || output_section->lma < matching_lma->lma)
@@ -7223,7 +7961,8 @@ rewrite_elf_program_header (bfd *ibfd, b
 
 	      /* Account for padding before the first section in the
 		 segment.  */
-	      map->p_vaddr_offset = map->p_paddr + hdr_size - matching_lma->lma;
+	      map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
+				     - matching_lma->lma);
 	    }
 
 	  free (sections);
@@ -7237,7 +7976,7 @@ rewrite_elf_program_header (bfd *ibfd, b
 	  if (matching_lma == NULL)
 	    matching_lma = suggested_lma;
 
-	  map->p_paddr = matching_lma->lma;
+	  map->p_paddr = matching_lma->lma * opb;
 
 	  /* Offset the segment physical address from the lma
 	     to allow for space taken up by elf headers.  */
@@ -7265,7 +8004,7 @@ rewrite_elf_program_header (bfd *ibfd, b
 		 the same alignment.  */
 	      if (segment->p_align != 0 && segment->p_align < align)
 		align = segment->p_align;
-	      map->p_paddr &= -align;
+	      map->p_paddr &= -(align * opb);
 	    }
 	}
 
@@ -7294,8 +8033,9 @@ rewrite_elf_program_header (bfd *ibfd, b
 
 	      BFD_ASSERT (output_section != NULL);
 
-	      if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
-		  || IS_COREFILE_NOTE (segment, section))
+	      if (is_contained_by (output_section, segment, map->p_paddr,
+				   0, opb, false)
+		  || is_note (section, segment))
 		{
 		  if (map->count == 0)
 		    {
@@ -7308,8 +8048,8 @@ rewrite_elf_program_header (bfd *ibfd, b
 				       + (map->includes_phdrs
 					  ? iehdr->e_phnum * iehdr->e_phentsize
 					  : 0),
-				       output_section->alignment_power)
-			  != output_section->lma)
+				       output_section->alignment_power * opb)
+			  != output_section->lma * opb)
 			goto sorry;
 		    }
 		  else
@@ -7338,7 +8078,7 @@ rewrite_elf_program_header (bfd *ibfd, b
 		  ++isec;
 		  sections[j] = NULL;
 		  if (segment->p_type == PT_LOAD)
-		    section->segment_mark = TRUE;
+		    section->segment_mark = true;
 		}
 	      else if (suggested_lma == NULL)
 		suggested_lma = output_section;
@@ -7346,14 +8086,9 @@ rewrite_elf_program_header (bfd *ibfd, b
 
 	  /* PR 23932.  A corrupt input file may contain sections that cannot
 	     be assigned to any segment - because for example they have a
-	     negative size - or segments that do not contain any sections.  */
-	  if (map->count == 0)
-	    {
-	    sorry:
-	      bfd_set_error (bfd_error_sorry);
-	      free (sections);
-	      return FALSE;
-	    }
+	     negative size - or segments that do not contain any sections.
+	     But there are also valid reasons why a segment can be empty.
+	     So allow a count of zero.  */
 
 	  /* Add the current segment to the list of built segments.  */
 	  *pointer_to_map = map;
@@ -7365,12 +8100,12 @@ rewrite_elf_program_header (bfd *ibfd, b
 		 segments.  Create a new segment here, initialise it
 		 and carry on looping.  */
 	      amt = sizeof (struct elf_segment_map) - sizeof (asection *);
-	      amt += (bfd_size_type) section_count * sizeof (asection *);
+	      amt += section_count * sizeof (asection *);
 	      map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
 	      if (map == NULL)
 		{
 		  free (sections);
-		  return FALSE;
+		  return false;
 		}
 
 	      /* Initialise the fields of the segment map.  Set the physical
@@ -7380,11 +8115,17 @@ rewrite_elf_program_header (bfd *ibfd, b
 	      map->p_type = segment->p_type;
 	      map->p_flags = segment->p_flags;
 	      map->p_flags_valid = 1;
-	      map->p_paddr = suggested_lma->lma;
+	      map->p_paddr = suggested_lma->lma * opb;
 	      map->p_paddr_valid = p_paddr_valid;
 	      map->includes_filehdr = 0;
 	      map->includes_phdrs = 0;
 	    }
+
+	  continue;
+	sorry:
+	  bfd_set_error (bfd_error_sorry);
+	  free (sections);
+	  return false;
 	}
       while (isec < section_count);
 
@@ -7417,23 +8158,51 @@ rewrite_elf_program_header (bfd *ibfd, b
 	  }
     }
 
-#undef SEGMENT_END
-#undef SECTION_SIZE
-#undef IS_CONTAINED_BY_VMA
-#undef IS_CONTAINED_BY_LMA
-#undef IS_NOTE
-#undef IS_COREFILE_NOTE
 #undef IS_SOLARIS_PT_INTERP
 #undef IS_SECTION_IN_INPUT_SEGMENT
 #undef INCLUDE_SECTION_IN_SEGMENT
 #undef SEGMENT_AFTER_SEGMENT
 #undef SEGMENT_OVERLAPS
-  return TRUE;
+  return true;
+}
+
+/* Return true if p_align in the ELF program header in ABFD is valid.  */
+
+static bool
+elf_is_p_align_valid (bfd *abfd)
+{
+  unsigned int i;
+  Elf_Internal_Phdr *segment;
+  unsigned int num_segments;
+  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+  bfd_size_type maxpagesize = bed->maxpagesize;
+  bfd_size_type p_align = bed->p_align;
+
+  /* Return true if the default p_align value isn't set or the maximum
+     page size is the same as the minimum page size.  */
+  if (p_align == 0 || maxpagesize == bed->minpagesize)
+    return true;
+
+  /* When the default p_align value is set, p_align may be set to the
+     default p_align value while segments are aligned to the maximum
+     page size.  In this case, the input p_align will be ignored and
+     the maximum page size will be used to align the output segments.  */
+  segment = elf_tdata (abfd)->phdr;
+  num_segments = elf_elfheader (abfd)->e_phnum;
+  for (i = 0; i < num_segments; i++, segment++)
+    if (segment->p_type == PT_LOAD
+	&& (segment->p_align != p_align
+	    || vma_page_aligned_bias (segment->p_vaddr,
+				      segment->p_offset,
+				      maxpagesize) != 0))
+      return true;
+
+  return false;
 }
 
 /* Copy ELF program header information.  */
 
-static bfd_boolean
+static bool
 copy_elf_program_header (bfd *ibfd, bfd *obfd)
 {
   Elf_Internal_Ehdr *iehdr;
@@ -7443,8 +8212,10 @@ copy_elf_program_header (bfd *ibfd, bfd
   Elf_Internal_Phdr *segment;
   unsigned int i;
   unsigned int num_segments;
-  bfd_boolean phdr_included = FALSE;
-  bfd_boolean p_paddr_valid;
+  bool phdr_included = false;
+  bool p_paddr_valid;
+  bool p_palign_valid;
+  unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
 
   iehdr = elf_elfheader (ibfd);
 
@@ -7453,24 +8224,26 @@ copy_elf_program_header (bfd *ibfd, bfd
 
   /* If all the segment p_paddr fields are zero, don't set
      map->p_paddr_valid.  */
-  p_paddr_valid = FALSE;
+  p_paddr_valid = false;
   num_segments = elf_elfheader (ibfd)->e_phnum;
   for (i = 0, segment = elf_tdata (ibfd)->phdr;
        i < num_segments;
        i++, segment++)
     if (segment->p_paddr != 0)
       {
-	p_paddr_valid = TRUE;
+	p_paddr_valid = true;
 	break;
       }
 
+  p_palign_valid = elf_is_p_align_valid (ibfd);
+
   for (i = 0, segment = elf_tdata (ibfd)->phdr;
        i < num_segments;
        i++, segment++)
     {
       asection *section;
       unsigned int section_count;
-      bfd_size_type amt;
+      size_t amt;
       Elf_Internal_Shdr *this_hdr;
       asection *first_section = NULL;
       asection *lowest_section;
@@ -7492,10 +8265,10 @@ copy_elf_program_header (bfd *ibfd, bfd
       /* Allocate a segment map big enough to contain
 	 all of the sections we have selected.  */
       amt = sizeof (struct elf_segment_map) - sizeof (asection *);
-      amt += (bfd_size_type) section_count * sizeof (asection *);
+      amt += section_count * sizeof (asection *);
       map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
       if (map == NULL)
-	return FALSE;
+	return false;
 
       /* Initialize the fields of the output segment map with the
 	 input segment.  */
@@ -7506,7 +8279,9 @@ copy_elf_program_header (bfd *ibfd, bfd
       map->p_paddr = segment->p_paddr;
       map->p_paddr_valid = p_paddr_valid;
       map->p_align = segment->p_align;
-      map->p_align_valid = 1;
+      /* Keep p_align of PT_GNU_STACK for stack alignment.  */
+      map->p_align_valid = (map->p_type == PT_GNU_STACK
+			    || p_palign_valid);
       map->p_vaddr_offset = 0;
 
       if (map->p_type == PT_GNU_RELRO
@@ -7537,7 +8312,7 @@ copy_elf_program_header (bfd *ibfd, bfd
 		     + iehdr->e_phnum * iehdr->e_phentsize)));
 
 	  if (segment->p_type == PT_LOAD && map->includes_phdrs)
-	    phdr_included = TRUE;
+	    phdr_included = true;
 	}
 
       lowest_section = NULL;
@@ -7570,8 +8345,8 @@ copy_elf_program_header (bfd *ibfd, bfd
 			seg_off = this_hdr->sh_offset - segment->p_offset;
 		      else
 			seg_off = this_hdr->sh_addr - segment->p_vaddr;
-		      if (section->lma - segment->p_paddr != seg_off)
-			map->p_paddr_valid = FALSE;
+		      if (section->lma * opb - segment->p_paddr != seg_off)
+			map->p_paddr_valid = false;
 		    }
 		  if (isec == section_count)
 		    break;
@@ -7580,7 +8355,7 @@ copy_elf_program_header (bfd *ibfd, bfd
 	}
 
       if (section_count == 0)
-	map->p_vaddr_offset = segment->p_vaddr;
+	map->p_vaddr_offset = segment->p_vaddr / opb;
       else if (map->p_paddr_valid)
 	{
 	  /* Account for padding before the first section in the segment.  */
@@ -7590,7 +8365,7 @@ copy_elf_program_header (bfd *ibfd, bfd
 	  if (map->includes_phdrs)
 	    hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
 
-	  map->p_vaddr_offset = (map->p_paddr + hdr_size
+	  map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
 				 - (lowest_section ? lowest_section->lma : 0));
 	}
 
@@ -7600,21 +8375,23 @@ copy_elf_program_header (bfd *ibfd, bfd
     }
 
   elf_seg_map (obfd) = map_first;
-  return TRUE;
+  return true;
 }
 
 /* Copy private BFD data.  This copies or rewrites ELF program header
    information.  */
 
-static bfd_boolean
+static bool
 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
+  bfd_vma maxpagesize;
+
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   if (elf_tdata (ibfd)->phdr == NULL)
-    return TRUE;
+    return true;
 
   if (ibfd->xvec == obfd->xvec)
     {
@@ -7635,7 +8412,7 @@ copy_private_bfd_data (bfd *ibfd, bfd *o
       /* Initialize the segment mark field.  */
       for (section = obfd->sections; section != NULL;
 	   section = section->next)
-	section->segment_mark = FALSE;
+	section->segment_mark = false;
 
       num_segments = elf_elfheader (ibfd)->e_phnum;
       for (i = 0, segment = elf_tdata (ibfd)->phdr;
@@ -7648,7 +8425,8 @@ copy_private_bfd_data (bfd *ibfd, bfd *o
 	     map in this case.  */
 	  if (segment->p_paddr == 0
 	      && segment->p_memsz == 0
-	      && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC))
+	      && (segment->p_type == PT_INTERP
+		  || segment->p_type == PT_DYNAMIC))
 	    goto rewrite;
 
 	  for (section = ibfd->sections;
@@ -7658,7 +8436,7 @@ copy_private_bfd_data (bfd *ibfd, bfd *o
 		 from the input BFD.  */
 	      osec = section->output_section;
 	      if (osec)
-		osec->segment_mark = TRUE;
+		osec->segment_mark = true;
 
 	      /* Check if this section is covered by the segment.  */
 	      this_hdr = &(elf_section_data(section)->this_hdr);
@@ -7686,13 +8464,14 @@ copy_private_bfd_data (bfd *ibfd, bfd *o
 	  if (!section->segment_mark)
 	    goto rewrite;
 	  else
-	    section->segment_mark = FALSE;
+	    section->segment_mark = false;
 	}
 
       return copy_elf_program_header (ibfd, obfd);
     }
 
-rewrite:
+ rewrite:
+  maxpagesize = 0;
   if (ibfd->xvec == obfd->xvec)
     {
       /* When rewriting program header, set the output maxpagesize to
@@ -7700,7 +8479,6 @@ rewrite:
       Elf_Internal_Phdr *segment;
       unsigned int i;
       unsigned int num_segments = elf_elfheader (ibfd)->e_phnum;
-      bfd_vma maxpagesize = 0;
 
       for (i = 0, segment = elf_tdata (ibfd)->phdr;
 	   i < num_segments;
@@ -7717,17 +8495,16 @@ rewrite:
 	    else
 	      maxpagesize = segment->p_align;
 	  }
-
-      if (maxpagesize != get_elf_backend_data (obfd)->maxpagesize)
-	bfd_emul_set_maxpagesize (bfd_get_target (obfd), maxpagesize);
     }
+  if (maxpagesize == 0)
+    maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
 
-  return rewrite_elf_program_header (ibfd, obfd);
+  return rewrite_elf_program_header (ibfd, obfd, maxpagesize);
 }
 
 /* Initialize private output section information from input section.  */
 
-bfd_boolean
+bool
 _bfd_elf_init_private_section_data (bfd *ibfd,
 				    asection *isec,
 				    bfd *obfd,
@@ -7736,19 +8513,28 @@ _bfd_elf_init_private_section_data (bfd
 
 {
   Elf_Internal_Shdr *ihdr, *ohdr;
-  bfd_boolean final_link = (link_info != NULL
-			    && !bfd_link_relocatable (link_info));
+  bool final_link = (link_info != NULL
+		     && !bfd_link_relocatable (link_info));
 
   if (ibfd->xvec->flavour != bfd_target_elf_flavour
       || obfd->xvec->flavour != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (elf_section_data (osec) != NULL);
 
-  /* For objcopy and relocatable link, don't copy the output ELF
-     section type from input if the output BFD section flags have been
-     set to something different.  For a final link allow some flags
-     that the linker clears to differ.  */
+  /* If this is a known ABI section, ELF section type and flags may
+     have been set up when OSEC was created.  For normal sections we
+     allow the user to override the type and flags other than
+     SHF_MASKOS and SHF_MASKPROC.  */
+  if (elf_section_type (osec) == SHT_PROGBITS
+      || elf_section_type (osec) == SHT_NOTE
+      || elf_section_type (osec) == SHT_NOBITS)
+    elf_section_type (osec) = SHT_NULL;
+  /* For objcopy and relocatable link, copy the ELF section type from
+     the input file if the BFD section flags are the same.  (If they
+     are different the user may be doing something like
+     "objcopy --set-section-flags .text=alloc,data".)  For a final
+     link allow some flags that the linker clears to differ.  */
   if (elf_section_type (osec) == SHT_NULL
       && (osec->flags == isec->flags
 	  || (final_link
@@ -7757,8 +8543,8 @@ _bfd_elf_init_private_section_data (bfd
     elf_section_type (osec) = elf_section_type (isec);
 
   /* FIXME: Is this correct for all OS/PROC specific flags?  */
-  elf_section_flags (osec) |= (elf_section_flags (isec)
-			       & (SHF_MASKOS | SHF_MASKPROC));
+  elf_section_flags (osec) = (elf_section_flags (isec)
+			      & (SHF_MASKOS | SHF_MASKPROC));
 
   /* Copy sh_info from input for mbind section.  */
   if ((elf_tdata (ibfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0
@@ -7800,13 +8586,13 @@ _bfd_elf_init_private_section_data (bfd
 
   osec->use_rela_p = isec->use_rela_p;
 
-  return TRUE;
+  return true;
 }
 
 /* Copy private section information.  This copies over the entsize
    field, and sometimes the info field.  */
 
-bfd_boolean
+bool
 _bfd_elf_copy_private_section_data (bfd *ibfd,
 				    asection *isec,
 				    bfd *obfd,
@@ -7816,7 +8602,7 @@ _bfd_elf_copy_private_section_data (bfd
 
   if (ibfd->xvec->flavour != bfd_target_elf_flavour
       || obfd->xvec->flavour != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   ihdr = &elf_section_data (isec)->this_hdr;
   ohdr = &elf_section_data (osec)->this_hdr;
@@ -7840,7 +8626,7 @@ _bfd_elf_copy_private_section_data (bfd
    function is called from objcopy, bfd_abs_section_ptr when called
    from the linker.  */
 
-bfd_boolean
+bool
 _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
 {
   asection *isec;
@@ -7863,19 +8649,34 @@ _bfd_elf_fixup_group_sections (bfd *ibfd
 		elf_section_flags (s->output_section) &= ~SHF_GROUP;
 		elf_group_name (s->output_section) = NULL;
 	      }
-	    /* Conversely, if the member section is not being output
-	       but the SHT_GROUP section is, then adjust its size.  */
-	    else if (s->output_section == discarded
-		     && isec->output_section != discarded)
+	    else
 	      {
 		struct bfd_elf_section_data *elf_sec = elf_section_data (s);
-		removed += 4;
-		if (elf_sec->rel.hdr != NULL
-		    && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
-		  removed += 4;
-		if (elf_sec->rela.hdr != NULL
-		    && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
-		  removed += 4;
+		if (s->output_section == discarded
+		    && isec->output_section != discarded)
+		  {
+		    /* Conversely, if the member section is not being
+		       output but the SHT_GROUP section is, then adjust
+		       its size.  */
+		    removed += 4;
+		    if (elf_sec->rel.hdr != NULL
+			&& (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
+		      removed += 4;
+		    if (elf_sec->rela.hdr != NULL
+			&& (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
+		      removed += 4;
+		  }
+		else
+		  {
+		    /* Also adjust for zero-sized relocation member
+		       section.  */
+		    if (elf_sec->rel.hdr != NULL
+			&& elf_sec->rel.hdr->sh_size == 0)
+		      removed += 4;
+		    if (elf_sec->rela.hdr != NULL
+			&& elf_sec->rela.hdr->sh_size == 0)
+		      removed += 4;
+		  }
 	      }
 	    s = elf_next_in_group (s);
 	    if (s == first)
@@ -7896,7 +8697,7 @@ _bfd_elf_fixup_group_sections (bfd *ibfd
 		    isec->flags |= SEC_EXCLUDE;
 		  }
 	      }
-	    else
+	    else if (isec->output_section != NULL)
 	      {
 		/* Adjust the output section size when called from
 		   objcopy. */
@@ -7910,17 +8711,17 @@ _bfd_elf_fixup_group_sections (bfd *ibfd
 	  }
       }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy private header information.  */
 
-bfd_boolean
+bool
 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
 {
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   /* Copy over private BFD data if it has not already been copied.
      This must be done here, rather than in the copy_private_bfd_data
@@ -7930,7 +8731,7 @@ _bfd_elf_copy_private_header_data (bfd *
   if (elf_seg_map (obfd) == NULL && elf_tdata (ibfd)->phdr != NULL)
     {
       if (! copy_private_bfd_data (ibfd, obfd))
-	return FALSE;
+	return false;
     }
 
   return _bfd_elf_fixup_group_sections (ibfd, NULL);
@@ -7948,7 +8749,7 @@ _bfd_elf_copy_private_header_data (bfd *
 #define MAP_SHSTRTAB  (SHN_HIOS + 4)
 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
 
-bfd_boolean
+bool
 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
 				   asymbol *isymarg,
 				   bfd *obfd,
@@ -7958,10 +8759,10 @@ _bfd_elf_copy_private_symbol_data (bfd *
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
-  isym = elf_symbol_from (ibfd, isymarg);
-  osym = elf_symbol_from (obfd, osymarg);
+  isym = elf_symbol_from (isymarg);
+  osym = elf_symbol_from (osymarg);
 
   if (isym != NULL
       && isym->internal_elf_sym.st_shndx != 0
@@ -7984,18 +8785,19 @@ _bfd_elf_copy_private_symbol_data (bfd *
       osym->internal_elf_sym.st_shndx = shndx;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Swap out the symbols.  */
 
-static bfd_boolean
+static bool
 swap_out_syms (bfd *abfd,
 	       struct elf_strtab_hash **sttp,
-	       int relocatable_p)
+	       int relocatable_p,
+	       struct bfd_link_info *info)
 {
   const struct elf_backend_data *bed;
-  int symcount;
+  unsigned int symcount;
   asymbol **syms;
   struct elf_strtab_hash *stt;
   Elf_Internal_Shdr *symtab_hdr;
@@ -8005,19 +8807,18 @@ swap_out_syms (bfd *abfd,
   bfd_byte *outbound_syms;
   bfd_byte *outbound_shndx;
   unsigned long outbound_syms_index;
-  unsigned long outbound_shndx_index;
-  int idx;
+  unsigned int idx;
   unsigned int num_locals;
-  bfd_size_type amt;
-  bfd_boolean name_local_sections;
+  size_t amt;
+  bool name_local_sections;
 
   if (!elf_map_symbols (abfd, &num_locals))
-    return FALSE;
+    return false;
 
   /* Dump out the symtabs.  */
   stt = _bfd_elf_strtab_init ();
   if (stt == NULL)
-    return FALSE;
+    return false;
 
   bed = get_elf_backend_data (abfd);
   symcount = bfd_get_symcount (abfd);
@@ -8032,37 +8833,38 @@ swap_out_syms (bfd *abfd,
   symstrtab_hdr->sh_type = SHT_STRTAB;
 
   /* Allocate buffer to swap out the .strtab section.  */
-  symstrtab = (struct elf_sym_strtab *) bfd_malloc2 (symcount + 1,
-						     sizeof (*symstrtab));
-  if (symstrtab == NULL)
+  if (_bfd_mul_overflow (symcount + 1, sizeof (*symstrtab), &amt)
+      || (symstrtab = (struct elf_sym_strtab *) bfd_malloc (amt)) == NULL)
     {
+      bfd_set_error (bfd_error_no_memory);
       _bfd_elf_strtab_free (stt);
-      return FALSE;
+      return false;
     }
 
-  outbound_syms = (bfd_byte *) bfd_alloc2 (abfd, 1 + symcount,
-					   bed->s->sizeof_sym);
-  if (outbound_syms == NULL)
+  if (_bfd_mul_overflow (symcount + 1, bed->s->sizeof_sym, &amt)
+      || (outbound_syms = (bfd_byte *) bfd_alloc (abfd, amt)) == NULL)
     {
-error_return:
-      _bfd_elf_strtab_free (stt);
+    error_no_mem:
+      bfd_set_error (bfd_error_no_memory);
+    error_return:
       free (symstrtab);
-      return FALSE;
+      _bfd_elf_strtab_free (stt);
+      return false;
     }
   symtab_hdr->contents = outbound_syms;
   outbound_syms_index = 0;
 
   outbound_shndx = NULL;
-  outbound_shndx_index = 0;
 
   if (elf_symtab_shndx_list (abfd))
     {
       symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
       if (symtab_shndx_hdr->sh_name != 0)
 	{
-	  amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx);
-	  outbound_shndx =  (bfd_byte *)
-	    bfd_zalloc2 (abfd, 1 + symcount, sizeof (Elf_External_Sym_Shndx));
+	  if (_bfd_mul_overflow (symcount + 1,
+				 sizeof (Elf_External_Sym_Shndx), &amt))
+	    goto error_no_mem;
+	  outbound_shndx =  (bfd_byte *) bfd_zalloc (abfd, amt);
 	  if (outbound_shndx == NULL)
 	    goto error_return;
 
@@ -8088,10 +8890,7 @@ error_return:
     sym.st_target_internal = 0;
     symstrtab[0].sym = sym;
     symstrtab[0].dest_index = outbound_syms_index;
-    symstrtab[0].destshndx_index = outbound_shndx_index;
     outbound_syms_index++;
-    if (outbound_shndx != NULL)
-      outbound_shndx_index++;
   }
 
   name_local_sections
@@ -8119,12 +8918,12 @@ error_return:
 	     to get the final offset for st_name.  */
 	  sym.st_name
 	    = (unsigned long) _bfd_elf_strtab_add (stt, syms[idx]->name,
-						   FALSE);
+						   false);
 	  if (sym.st_name == (unsigned long) -1)
 	    goto error_return;
 	}
 
-      type_ptr = elf_symbol_from (abfd, syms[idx]);
+      type_ptr = elf_symbol_from (syms[idx]);
 
       if ((flags & BSF_SECTION_SYM) == 0
 	  && bfd_is_com_section (syms[idx]->section))
@@ -8184,9 +8983,26 @@ error_return:
 		  if (elf_symtab_shndx_list (abfd))
 		    shndx = elf_symtab_shndx_list (abfd)->ndx;
 		  break;
-		default:
+		case SHN_COMMON:
+		case SHN_ABS:
 		  shndx = SHN_ABS;
 		  break;
+		default:
+		  if (shndx >= SHN_LOPROC && shndx <= SHN_HIOS)
+		    {
+		      if (bed->symbol_section_index)
+			shndx = bed->symbol_section_index (abfd, type_ptr);
+		      /* Otherwise just leave the index alone.  */
+		    }
+		  else
+		    {
+		      if (shndx > SHN_HIOS && shndx < SHN_HIRESERVE)
+			_bfd_error_handler (_("%pB: \
+Unable to handle section index %x in ELF symbol.  Using ABS instead."),
+					  abfd, shndx);
+		      shndx = SHN_ABS;
+		    }
+		  break;
 		}
 	    }
 	  else
@@ -8306,11 +9122,8 @@ error_return:
       idx++;
       symstrtab[idx].sym = sym;
       symstrtab[idx].dest_index = outbound_syms_index;
-      symstrtab[idx].destshndx_index = outbound_shndx_index;
 
       outbound_syms_index++;
-      if (outbound_shndx != NULL)
-	outbound_shndx_index++;
     }
 
   /* Finalize the .strtab section.  */
@@ -8325,13 +9138,19 @@ error_return:
       else
 	elfsym->sym.st_name = _bfd_elf_strtab_offset (stt,
 						      elfsym->sym.st_name);
+      if (info && info->callbacks->ctf_new_symbol)
+	info->callbacks->ctf_new_symbol (elfsym->dest_index,
+					 &elfsym->sym);
+
+      /* Inform the linker of the addition of this symbol.  */
+
       bed->s->swap_symbol_out (abfd, &elfsym->sym,
 			       (outbound_syms
 				+ (elfsym->dest_index
 				   * bed->s->sizeof_sym)),
-			       (outbound_shndx
-				+ (elfsym->destshndx_index
-				   * sizeof (Elf_External_Sym_Shndx))));
+			       NPTR_ADD (outbound_shndx,
+					 (elfsym->dest_index
+					  * sizeof (Elf_External_Sym_Shndx))));
     }
   free (symstrtab);
 
@@ -8345,7 +9164,7 @@ error_return:
   symstrtab_hdr->sh_info = 0;
   symstrtab_hdr->sh_addralign = 1;
 
-  return TRUE;
+  return true;
 }
 
 /* Return the number of bytes required to hold the symtab vector.
@@ -8362,14 +9181,24 @@ _bfd_elf_get_symtab_upper_bound (bfd *ab
   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
 
   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
-  if (symcount >= LONG_MAX / sizeof (asymbol *))
+  if (symcount > LONG_MAX / sizeof (asymbol *))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
-  symtab_size = (symcount + 1) * (sizeof (asymbol *));
-  if (symcount > 0)
-    symtab_size -= sizeof (asymbol *);
+  symtab_size = symcount * (sizeof (asymbol *));
+  if (symcount == 0)
+    symtab_size = sizeof (asymbol *);
+  else if (!bfd_write_p (abfd))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+
+      if (filesize != 0 && (unsigned long) symtab_size > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
+    }
 
   return symtab_size;
 }
@@ -8383,27 +9212,63 @@ _bfd_elf_get_dynamic_symtab_upper_bound
 
   if (elf_dynsymtab (abfd) == 0)
     {
+      /* Check if there is dynamic symbol table.  */
+      symcount = elf_tdata (abfd)->dt_symtab_count;
+      if (symcount)
+	goto compute_symtab_size;
+
       bfd_set_error (bfd_error_invalid_operation);
       return -1;
     }
 
   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
-  if (symcount >= LONG_MAX / sizeof (asymbol *))
+  if (symcount > LONG_MAX / sizeof (asymbol *))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
-  symtab_size = (symcount + 1) * (sizeof (asymbol *));
-  if (symcount > 0)
-    symtab_size -= sizeof (asymbol *);
+
+ compute_symtab_size:
+  symtab_size = symcount * (sizeof (asymbol *));
+  if (symcount == 0)
+    symtab_size = sizeof (asymbol *);
+  else if (!bfd_write_p (abfd))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+
+      if (filesize != 0 && (unsigned long) symtab_size > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
+    }
 
   return symtab_size;
 }
 
 long
-_bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
-				sec_ptr asect)
+_bfd_elf_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
 {
+  if (asect->reloc_count != 0 && !bfd_write_p (abfd))
+    {
+      /* Sanity check reloc section size.  */
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+
+      if (filesize != 0)
+	{
+	  struct bfd_elf_section_data *d = elf_section_data (asect);
+	  bfd_size_type rel_size = d->rel.hdr ? d->rel.hdr->sh_size : 0;
+	  bfd_size_type rela_size = d->rela.hdr ? d->rela.hdr->sh_size : 0;
+
+	  if (rel_size + rela_size > filesize
+	      || rel_size + rela_size < rel_size)
+	    {
+	      bfd_set_error (bfd_error_file_truncated);
+	      return -1;
+	    }
+	}
+    }
+
 #if SIZEOF_LONG == SIZEOF_INT
   if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
     {
@@ -8411,7 +9276,7 @@ _bfd_elf_get_reloc_upper_bound (bfd *abf
       return -1;
     }
 #endif
-  return (asect->reloc_count + 1) * sizeof (arelent *);
+  return (asect->reloc_count + 1L) * sizeof (arelent *);
 }
 
 /* Canonicalize the relocs.  */
@@ -8426,7 +9291,7 @@ _bfd_elf_canonicalize_reloc (bfd *abfd,
   unsigned int i;
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
 
-  if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
+  if (! bed->s->slurp_reloc_table (abfd, section, symbols, false))
     return -1;
 
   tblptr = section->relocation;
@@ -8442,7 +9307,7 @@ long
 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
-  long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE);
+  long symcount = bed->s->slurp_symbol_table (abfd, allocation, false);
 
   if (symcount >= 0)
     abfd->symcount = symcount;
@@ -8454,7 +9319,7 @@ _bfd_elf_canonicalize_dynamic_symtab (bf
 				      asymbol **allocation)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
-  long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE);
+  long symcount = bed->s->slurp_symbol_table (abfd, allocation, true);
 
   if (symcount >= 0)
     abfd->dynsymcount = symcount;
@@ -8469,7 +9334,7 @@ _bfd_elf_canonicalize_dynamic_symtab (bf
 long
 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
 {
-  bfd_size_type count;
+  bfd_size_type count, ext_rel_size;
   asection *s;
 
   if (elf_dynsymtab (abfd) == 0)
@@ -8479,18 +9344,36 @@ _bfd_elf_get_dynamic_reloc_upper_bound (
     }
 
   count = 1;
+  ext_rel_size = 0;
   for (s = abfd->sections; s != NULL; s = s->next)
     if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
 	&& (elf_section_data (s)->this_hdr.sh_type == SHT_REL
-	    || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
+	    || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)
+	&& (elf_section_data (s)->this_hdr.sh_flags & SHF_COMPRESSED) == 0)
       {
-	count += s->size / elf_section_data (s)->this_hdr.sh_entsize;
+	ext_rel_size += elf_section_data (s)->this_hdr.sh_size;
+	if (ext_rel_size < elf_section_data (s)->this_hdr.sh_size)
+	  {
+	    bfd_set_error (bfd_error_file_truncated);
+	    return -1;
+	  }
+	count += NUM_SHDR_ENTRIES (&elf_section_data (s)->this_hdr);
 	if (count > LONG_MAX / sizeof (arelent *))
 	  {
 	    bfd_set_error (bfd_error_file_too_big);
 	    return -1;
 	  }
       }
+  if (count > 1 && !bfd_write_p (abfd))
+    {
+      /* Sanity check reloc section sizes.  */
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && ext_rel_size > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
+    }
   return count * sizeof (arelent *);
 }
 
@@ -8507,7 +9390,7 @@ _bfd_elf_canonicalize_dynamic_reloc (bfd
 				     arelent **storage,
 				     asymbol **syms)
 {
-  bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
+  bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
   asection *s;
   long ret;
 
@@ -8523,14 +9406,15 @@ _bfd_elf_canonicalize_dynamic_reloc (bfd
     {
       if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
 	  && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
-	      || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
+	      || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)
+	  && (elf_section_data (s)->this_hdr.sh_flags & SHF_COMPRESSED) == 0)
 	{
 	  arelent *p;
 	  long count, i;
 
-	  if (! (*slurp_relocs) (abfd, s, syms, TRUE))
+	  if (! (*slurp_relocs) (abfd, s, syms, true))
 	    return -1;
-	  count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
+	  count = NUM_SHDR_ENTRIES (&elf_section_data (s)->this_hdr);
 	  p = s->relocation;
 	  for (i = 0; i < count; i++)
 	    *storage++ = p++;
@@ -8545,67 +9429,75 @@ _bfd_elf_canonicalize_dynamic_reloc (bfd
 
 /* Read in the version information.  */
 
-bfd_boolean
-_bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver)
+bool
+_bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
 {
   bfd_byte *contents = NULL;
   unsigned int freeidx = 0;
+  size_t amt;
 
-  if (elf_dynverref (abfd) != 0)
+  if (elf_dynverref (abfd) != 0 || elf_tdata (abfd)->dt_verneed != NULL)
     {
       Elf_Internal_Shdr *hdr;
       Elf_External_Verneed *everneed;
       Elf_Internal_Verneed *iverneed;
       unsigned int i;
       bfd_byte *contents_end;
+      size_t verneed_count;
+      size_t verneed_size;
 
-      hdr = &elf_tdata (abfd)->dynverref_hdr;
-
-      if (hdr->sh_info == 0
-	  || hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
+      if (elf_tdata (abfd)->dt_verneed != NULL)
 	{
-error_return_bad_verref:
-	  _bfd_error_handler
-	    (_("%pB: .gnu.version_r invalid entry"), abfd);
-	  bfd_set_error (bfd_error_bad_value);
-error_return_verref:
-	  elf_tdata (abfd)->verref = NULL;
-	  elf_tdata (abfd)->cverrefs = 0;
-	  goto error_return;
+	  hdr = NULL;
+	  contents = elf_tdata (abfd)->dt_verneed;
+	  verneed_count = elf_tdata (abfd)->dt_verneed_count;
+	  verneed_size = verneed_count * sizeof (Elf_External_Verneed);
 	}
+      else
+	{
+	  hdr = &elf_tdata (abfd)->dynverref_hdr;
 
-      ufile_ptr filesize = bfd_get_file_size (abfd);
-      if (filesize > 0 && filesize < hdr->sh_size)
+	  if (hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
+	    {
+	    error_return_bad_verref:
+	      _bfd_error_handler
+		(_("%pB: .gnu.version_r invalid entry"), abfd);
+	      bfd_set_error (bfd_error_bad_value);
+	    error_return_verref:
+	      elf_tdata (abfd)->verref = NULL;
+	      elf_tdata (abfd)->cverrefs = 0;
+	      goto error_return;
+	    }
+
+	  if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
+	    goto error_return_verref;
+	  contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
+	  if (contents == NULL)
+	    goto error_return_verref;
+
+	  verneed_size = hdr->sh_size;
+	  verneed_count = hdr->sh_info;
+	}
+
+      if (_bfd_mul_overflow (verneed_count,
+			     sizeof (Elf_Internal_Verneed), &amt))
 	{
-	  /* PR 24708: Avoid attempts to allocate a ridiculous amount
-	     of memory.  */
-	  bfd_set_error (bfd_error_no_memory);
-	  _bfd_error_handler
-	    /* xgettext:c-format */
-	    (_("error: %pB version reference section is too large (%#" PRIx64 " bytes)"),
-	     abfd, (uint64_t) hdr->sh_size);
+	  bfd_set_error (bfd_error_file_too_big);
 	  goto error_return_verref;
 	}
-      contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
-      if (contents == NULL)
+      if (amt == 0)
 	goto error_return_verref;
-
-      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
-	  || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
-	goto error_return_verref;
-
-      elf_tdata (abfd)->verref = (Elf_Internal_Verneed *)
-	bfd_alloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed));
-
+      elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) bfd_zalloc (abfd, amt);
       if (elf_tdata (abfd)->verref == NULL)
 	goto error_return_verref;
 
       BFD_ASSERT (sizeof (Elf_External_Verneed)
 		  == sizeof (Elf_External_Vernaux));
-      contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
+      contents_end = (contents + verneed_size
+		      - sizeof (Elf_External_Verneed));
       everneed = (Elf_External_Verneed *) contents;
       iverneed = elf_tdata (abfd)->verref;
-      for (i = 0; i < hdr->sh_info; i++, iverneed++)
+      for (i = 0; i < verneed_count; i++, iverneed++)
 	{
 	  Elf_External_Vernaux *evernaux;
 	  Elf_Internal_Vernaux *ivernaux;
@@ -8615,9 +9507,20 @@ error_return_verref:
 
 	  iverneed->vn_bfd = abfd;
 
-	  iverneed->vn_filename =
-	    bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
-					     iverneed->vn_file);
+	  if (elf_use_dt_symtab_p (abfd))
+	    {
+	      if (iverneed->vn_file < elf_tdata (abfd)->dt_strsz)
+		iverneed->vn_filename
+		  = elf_tdata (abfd)->dt_strtab + iverneed->vn_file;
+	      else
+		iverneed->vn_filename = NULL;
+	    }
+	  else if (hdr == NULL)
+	    goto error_return_bad_verref;
+	  else
+	    iverneed->vn_filename
+	      = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
+						 iverneed->vn_file);
 	  if (iverneed->vn_filename == NULL)
 	    goto error_return_bad_verref;
 
@@ -8625,9 +9528,14 @@ error_return_verref:
 	    iverneed->vn_auxptr = NULL;
 	  else
 	    {
+	      if (_bfd_mul_overflow (iverneed->vn_cnt,
+				     sizeof (Elf_Internal_Vernaux), &amt))
+		{
+		  bfd_set_error (bfd_error_file_too_big);
+		  goto error_return_verref;
+		}
 	      iverneed->vn_auxptr = (struct elf_internal_vernaux *)
-		  bfd_alloc2 (abfd, iverneed->vn_cnt,
-			      sizeof (Elf_Internal_Vernaux));
+		bfd_alloc (abfd, amt);
 	      if (iverneed->vn_auxptr == NULL)
 		goto error_return_verref;
 	    }
@@ -8643,9 +9551,20 @@ error_return_verref:
 	    {
 	      _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
 
-	      ivernaux->vna_nodename =
-		bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
-						 ivernaux->vna_name);
+	      if (elf_use_dt_symtab_p (abfd))
+		{
+		  if (ivernaux->vna_name < elf_tdata (abfd)->dt_strsz)
+		    ivernaux->vna_nodename
+		      = elf_tdata (abfd)->dt_strtab + ivernaux->vna_name;
+		  else
+		    ivernaux->vna_nodename = NULL;
+		}
+	      else if (hdr == NULL)
+		goto error_return_bad_verref;
+	      else
+		ivernaux->vna_nodename
+		  = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
+						     ivernaux->vna_name);
 	      if (ivernaux->vna_nodename == NULL)
 		goto error_return_bad_verref;
 
@@ -8672,7 +9591,7 @@ error_return_verref:
 	  iverneed->vn_nextref = NULL;
 	  if (iverneed->vn_next == 0)
 	    break;
-	  if (i + 1 < hdr->sh_info)
+	  if (hdr != NULL && (i + 1 < hdr->sh_info))
 	    iverneed->vn_nextref = iverneed + 1;
 
 	  if (iverneed->vn_next
@@ -8684,11 +9603,12 @@ error_return_verref:
 	}
       elf_tdata (abfd)->cverrefs = i;
 
-      free (contents);
+      if (contents != elf_tdata (abfd)->dt_verneed)
+	free (contents);
       contents = NULL;
     }
 
-  if (elf_dynverdef (abfd) != 0)
+  if (elf_dynverdef (abfd) != 0 || elf_tdata (abfd)->dt_verdef != NULL)
     {
       Elf_Internal_Shdr *hdr;
       Elf_External_Verdef *everdef;
@@ -8698,41 +9618,56 @@ error_return_verref:
       unsigned int i;
       unsigned int maxidx;
       bfd_byte *contents_end_def, *contents_end_aux;
+      size_t verdef_count;
+      size_t verdef_size;
 
-      hdr = &elf_tdata (abfd)->dynverdef_hdr;
-
-      if (hdr->sh_info == 0 || hdr->sh_size < sizeof (Elf_External_Verdef))
+      if (elf_tdata (abfd)->dt_verdef != NULL)
 	{
-	error_return_bad_verdef:
-	  _bfd_error_handler
-	    (_("%pB: .gnu.version_d invalid entry"), abfd);
-	  bfd_set_error (bfd_error_bad_value);
-	error_return_verdef:
-	  elf_tdata (abfd)->verdef = NULL;
-	  elf_tdata (abfd)->cverdefs = 0;
-	  goto error_return;
+	  hdr = NULL;
+	  contents = elf_tdata (abfd)->dt_verdef;
+	  verdef_count = elf_tdata (abfd)->dt_verdef_count;
+	  verdef_size = verdef_count * sizeof (Elf_External_Verdef);
 	}
+      else
+	{
+	  hdr = &elf_tdata (abfd)->dynverdef_hdr;
 
-      contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
-      if (contents == NULL)
-	goto error_return_verdef;
-      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
-	  || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
-	goto error_return_verdef;
+	  if (hdr->sh_size < sizeof (Elf_External_Verdef))
+	    {
+	    error_return_bad_verdef:
+	      _bfd_error_handler
+		(_("%pB: .gnu.version_d invalid entry"), abfd);
+	      bfd_set_error (bfd_error_bad_value);
+	    error_return_verdef:
+	      elf_tdata (abfd)->verdef = NULL;
+	      elf_tdata (abfd)->cverdefs = 0;
+	      goto error_return;
+	    }
+
+	  if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
+	    goto error_return_verdef;
+	  contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
+	  if (contents == NULL)
+	    goto error_return_verdef;
 
-      BFD_ASSERT (sizeof (Elf_External_Verdef)
-		  >= sizeof (Elf_External_Verdaux));
-      contents_end_def = contents + hdr->sh_size
-			 - sizeof (Elf_External_Verdef);
-      contents_end_aux = contents + hdr->sh_size
-			 - sizeof (Elf_External_Verdaux);
+	  BFD_ASSERT (sizeof (Elf_External_Verdef)
+		      >= sizeof (Elf_External_Verdaux));
+
+	  verdef_count = hdr->sh_info;
+	  verdef_size = hdr->sh_size;
+	}
+
+      contents_end_def = (contents + verdef_size
+			  - sizeof (Elf_External_Verdef));
+      contents_end_aux = (contents + verdef_size
+			  - sizeof (Elf_External_Verdaux));
 
       /* We know the number of entries in the section but not the maximum
 	 index.  Therefore we have to run through all entries and find
 	 the maximum.  */
       everdef = (Elf_External_Verdef *) contents;
       maxidx = 0;
-      for (i = 0; i < hdr->sh_info; ++i)
+      for (i = 0; i < verdef_count; ++i)
 	{
 	  _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
 
@@ -8759,9 +9694,15 @@ error_return_verref:
 	  else
 	    freeidx = ++maxidx;
 	}
+      if (_bfd_mul_overflow (maxidx, sizeof (Elf_Internal_Verdef), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  goto error_return_verdef;
+	}
 
-      elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
-	bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef));
+      if (amt == 0)
+	goto error_return_verdef;
+      elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
       if (elf_tdata (abfd)->verdef == NULL)
 	goto error_return_verdef;
 
@@ -8769,7 +9710,7 @@ error_return_verref:
 
       everdef = (Elf_External_Verdef *) contents;
       iverdefarr = elf_tdata (abfd)->verdef;
-      for (i = 0; i < hdr->sh_info; i++)
+      for (i = 0; i < verdef_count; ++i)
 	{
 	  Elf_External_Verdaux *everdaux;
 	  Elf_Internal_Verdaux *iverdaux;
@@ -8789,9 +9730,14 @@ error_return_verref:
 	    iverdef->vd_auxptr = NULL;
 	  else
 	    {
+	      if (_bfd_mul_overflow (iverdef->vd_cnt,
+				     sizeof (Elf_Internal_Verdaux), &amt))
+		{
+		  bfd_set_error (bfd_error_file_too_big);
+		  goto error_return_verdef;
+		}
 	      iverdef->vd_auxptr = (struct elf_internal_verdaux *)
-		  bfd_alloc2 (abfd, iverdef->vd_cnt,
-			      sizeof (Elf_Internal_Verdaux));
+		bfd_alloc (abfd, amt);
 	      if (iverdef->vd_auxptr == NULL)
 		goto error_return_verdef;
 	    }
@@ -8807,9 +9753,18 @@ error_return_verref:
 	    {
 	      _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
 
-	      iverdaux->vda_nodename =
-		bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
-						 iverdaux->vda_name);
+	      if (elf_use_dt_symtab_p (abfd))
+		{
+		  if (iverdaux->vda_name < elf_tdata (abfd)->dt_strsz)
+		    iverdaux->vda_nodename
+		      = elf_tdata (abfd)->dt_strtab + iverdaux->vda_name;
+		  else
+		    iverdaux->vda_nodename = NULL;
+		}
+	      else
+		iverdaux->vda_nodename
+		  = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
+						     iverdaux->vda_name);
 	      if (iverdaux->vda_nodename == NULL)
 		goto error_return_bad_verdef;
 
@@ -8844,7 +9799,8 @@ error_return_verref:
 		     ((bfd_byte *) everdef + iverdef->vd_next));
 	}
 
-      free (contents);
+      if (contents != elf_tdata (abfd)->dt_verdef)
+	free (contents);
       contents = NULL;
     }
   else if (default_imported_symver)
@@ -8854,8 +9810,14 @@ error_return_verref:
       else
 	freeidx++;
 
-      elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
-	  bfd_zalloc2 (abfd, freeidx, sizeof (Elf_Internal_Verdef));
+      if (_bfd_mul_overflow (freeidx, sizeof (Elf_Internal_Verdef), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  goto error_return;
+	}
+      if (amt == 0)
+	goto error_return;
+      elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
       if (elf_tdata (abfd)->verdef == NULL)
 	goto error_return;
 
@@ -8890,12 +9852,13 @@ error_return_verref:
       iverdaux->vda_nodename = iverdef->vd_nodename;
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (contents != NULL)
+  if (contents != elf_tdata (abfd)->dt_verneed
+      && contents != elf_tdata (abfd)->dt_verdef)
     free (contents);
-  return FALSE;
+  return false;
 }
 
 asymbol *
@@ -8922,18 +9885,18 @@ _bfd_elf_get_symbol_info (bfd *abfd ATTR
    use this function for the is_local_label_name entry point, but some
    override it.  */
 
-bfd_boolean
+bool
 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 			      const char *name)
 {
   /* Normal local symbols start with ``.L''.  */
   if (name[0] == '.' && name[1] == 'L')
-    return TRUE;
+    return true;
 
   /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
      DWARF debugging symbols starting with ``..''.  */
   if (name[0] == '.' && name[1] == '.')
-    return TRUE;
+    return true;
 
   /* gcc will sometimes generate symbols beginning with ``_.L_'' when
      emitting DWARF debugging output.  I suspect this is actually a
@@ -8942,7 +9905,7 @@ _bfd_elf_is_local_label_name (bfd *abfd
      underscore to be emitted on some ELF targets).  For ease of use,
      we treat such symbols as local.  */
   if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
-    return TRUE;
+    return true;
 
   /* Treat assembler generated fake symbols, dollar local labels and
      forward-backward labels (aka local labels) as locals.
@@ -8956,7 +9919,7 @@ _bfd_elf_is_local_label_name (bfd *abfd
      so we only need to match the rest.  */
   if (name[0] == 'L' && ISDIGIT (name[1]))
     {
-      bfd_boolean ret = FALSE;
+      bool ret = false;
       const char * p;
       char c;
 
@@ -8966,26 +9929,26 @@ _bfd_elf_is_local_label_name (bfd *abfd
 	    {
 	      if (c == 1 && p == name + 2)
 		/* A fake symbol.  */
-		return TRUE;
+		return true;
 
 	      /* FIXME: We are being paranoid here and treating symbols like
 		 L0^Bfoo as if there were non-local, on the grounds that the
 		 assembler will never generate them.  But can any symbol
 		 containing an ASCII value in the range 1-31 ever be anything
 		 other than some kind of local ?  */
-	      ret = TRUE;
+	      ret = true;
 	    }
 
 	  if (! ISDIGIT (c))
 	    {
-	      ret = FALSE;
+	      ret = false;
 	      break;
 	    }
 	}
       return ret;
     }
 
-  return FALSE;
+  return false;
 }
 
 alent *
@@ -8996,7 +9959,7 @@ _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE
   return NULL;
 }
 
-bfd_boolean
+bool
 _bfd_elf_set_arch_mach (bfd *abfd,
 			enum bfd_architecture arch,
 			unsigned long machine)
@@ -9006,7 +9969,7 @@ _bfd_elf_set_arch_mach (bfd *abfd,
   if (arch != get_elf_backend_data (abfd)->arch
       && arch != bfd_arch_unknown
       && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
-    return FALSE;
+    return false;
 
   return bfd_default_set_arch_mach (abfd, arch, machine);
 }
@@ -9014,7 +9977,7 @@ _bfd_elf_set_arch_mach (bfd *abfd,
 /* Find the nearest line to a particular section and offset,
    for error reporting.  */
 
-bfd_boolean
+bool
 _bfd_elf_find_nearest_line (bfd *abfd,
 			    asymbol **symbols,
 			    asection *section,
@@ -9024,14 +9987,36 @@ _bfd_elf_find_nearest_line (bfd *abfd,
 			    unsigned int *line_ptr,
 			    unsigned int *discriminator_ptr)
 {
-  bfd_boolean found;
+  return _bfd_elf_find_nearest_line_with_alt (abfd, NULL, symbols, section,
+					      offset, filename_ptr,
+					      functionname_ptr, line_ptr,
+					      discriminator_ptr);
+}
+
+/* Find the nearest line to a particular section and offset,
+   for error reporting.  ALT_BFD representing a .gnu_debugaltlink file
+   can be optionally specified.  */
 
-  if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
-				     filename_ptr, functionname_ptr,
-				     line_ptr, discriminator_ptr,
-				     dwarf_debug_sections,
-				     &elf_tdata (abfd)->dwarf2_find_line_info))
-    return TRUE;
+bool
+_bfd_elf_find_nearest_line_with_alt (bfd *abfd,
+				     const char *alt_filename,
+				     asymbol **symbols,
+				     asection *section,
+				     bfd_vma offset,
+				     const char **filename_ptr,
+				     const char **functionname_ptr,
+				     unsigned int *line_ptr,
+				     unsigned int *discriminator_ptr)
+{
+  bool found;
+
+  if (_bfd_dwarf2_find_nearest_line_with_alt (abfd, alt_filename, symbols, NULL,
+					      section, offset, filename_ptr,
+					      functionname_ptr, line_ptr,
+					      discriminator_ptr,
+					      dwarf_debug_sections,
+					      &elf_tdata (abfd)->dwarf2_find_line_info))
+    return true;
 
   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
 				     filename_ptr, functionname_ptr, line_ptr))
@@ -9040,38 +10025,39 @@ _bfd_elf_find_nearest_line (bfd *abfd,
 	_bfd_elf_find_function (abfd, symbols, section, offset,
 				*filename_ptr ? NULL : filename_ptr,
 				functionname_ptr);
-      return TRUE;
+      return true;
     }
 
   if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
 					     &found, filename_ptr,
 					     functionname_ptr, line_ptr,
 					     &elf_tdata (abfd)->line_info))
-    return FALSE;
+    return false;
   if (found && (*functionname_ptr || *line_ptr))
-    return TRUE;
+    return true;
 
   if (symbols == NULL)
-    return FALSE;
+    return false;
 
   if (! _bfd_elf_find_function (abfd, symbols, section, offset,
 				filename_ptr, functionname_ptr))
-    return FALSE;
+    return false;
 
   *line_ptr = 0;
-  return TRUE;
+  return true;
 }
 
 /* Find the line for a symbol.  */
 
-bfd_boolean
+bool
 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
 		    const char **filename_ptr, unsigned int *line_ptr)
 {
+  struct elf_obj_tdata *tdata = elf_tdata (abfd);
   return _bfd_dwarf2_find_nearest_line (abfd, symbols, symbol, NULL, 0,
 					filename_ptr, NULL, line_ptr, NULL,
 					dwarf_debug_sections,
-					&elf_tdata (abfd)->dwarf2_find_line_info);
+					&tdata->dwarf2_find_line_info);
 }
 
 /* After a call to bfd_find_nearest_line, successive calls to
@@ -9080,17 +10066,16 @@ _bfd_elf_find_line (bfd *abfd, asymbol *
    passed to bfd_find_nearest_line.  Currently this is only supported
    for DWARF2 with appropriate DWARF3 extensions. */
 
-bfd_boolean
+bool
 _bfd_elf_find_inliner_info (bfd *abfd,
 			    const char **filename_ptr,
 			    const char **functionname_ptr,
 			    unsigned int *line_ptr)
 {
-  bfd_boolean found;
-  found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
-					 functionname_ptr, line_ptr,
-					 & elf_tdata (abfd)->dwarf2_find_line_info);
-  return found;
+  struct elf_obj_tdata *tdata = elf_tdata (abfd);
+  return _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
+					functionname_ptr, line_ptr,
+					&tdata->dwarf2_find_line_info);
 }
 
 int
@@ -9122,7 +10107,7 @@ _bfd_elf_sizeof_headers (bfd *abfd, stru
   return ret;
 }
 
-bfd_boolean
+bool
 _bfd_elf_set_section_contents (bfd *abfd,
 			       sec_ptr section,
 			       const void *location,
@@ -9130,52 +10115,67 @@ _bfd_elf_set_section_contents (bfd *abfd
 			       bfd_size_type count)
 {
   Elf_Internal_Shdr *hdr;
-  file_ptr pos;
 
   if (! abfd->output_has_begun
       && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
-    return FALSE;
+    return false;
 
   if (!count)
-    return TRUE;
+    return true;
 
   hdr = &elf_section_data (section)->this_hdr;
   if (hdr->sh_offset == (file_ptr) -1)
     {
+      unsigned char *contents;
+
       if (bfd_section_is_ctf (section))
 	/* Nothing to do with this section: the contents are generated
 	   later.  */
-	return TRUE;
+	return true;
+
+      if ((offset + count) > hdr->sh_size)
+	{
+	  _bfd_error_handler
+	    (_("%pB:%pA: error: attempting to write"
+	       " over the end of the section"),
+	     abfd, section);
+
+	  bfd_set_error (bfd_error_invalid_operation);
+	  return false;
+	}
+
+      contents = hdr->contents;
+      if (contents == NULL)
+	{
+	  _bfd_error_handler
+	    (_("%pB:%pA: error: attempting to write"
+	       " section into an empty buffer"),
+	     abfd, section);
+
+	  bfd_set_error (bfd_error_invalid_operation);
+	  return false;
+	}
 
-      /* We must compress this section.  Write output to the buffer.  */
-      unsigned char *contents = hdr->contents;
-      if ((offset + count) > hdr->sh_size
-	  || (section->flags & SEC_ELF_COMPRESS) == 0
-	  || contents == NULL)
-	abort ();
       memcpy (contents + offset, location, count);
-      return TRUE;
+      return true;
     }
-  pos = hdr->sh_offset + offset;
-  if (bfd_seek (abfd, pos, SEEK_SET) != 0
-      || bfd_bwrite (location, count, abfd) != count)
-    return FALSE;
 
-  return TRUE;
+  return _bfd_generic_set_section_contents (abfd, section,
+					    location, offset, count);
 }
 
-bfd_boolean
+bool
 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 			   arelent *cache_ptr ATTRIBUTE_UNUSED,
 			   Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
 {
   abort ();
-  return FALSE;
+  return false;
 }
 
 /* Try to convert a non-ELF reloc into an ELF one.  */
 
-bfd_boolean
+bool
 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
 {
   /* Check whether we really have an ELF howto.  */
@@ -9259,28 +10259,33 @@ _bfd_elf_validate_reloc (bfd *abfd, arel
 	goto fail;
     }
 
-  return TRUE;
+  return true;
 
  fail:
   /* xgettext:c-format */
   _bfd_error_handler (_("%pB: %s unsupported"),
 		      abfd, areloc->howto->name);
   bfd_set_error (bfd_error_sorry);
-  return FALSE;
+  return false;
 }
 
-bfd_boolean
-_bfd_elf_close_and_cleanup (bfd *abfd)
+bool
+_bfd_elf_free_cached_info (bfd *abfd)
 {
-  struct elf_obj_tdata *tdata = elf_tdata (abfd);
-  if (bfd_get_format (abfd) == bfd_object && tdata != NULL)
+  struct elf_obj_tdata *tdata;
+
+  if ((bfd_get_format (abfd) == bfd_object
+       || bfd_get_format (abfd) == bfd_core)
+      && (tdata = elf_tdata (abfd)) != NULL)
     {
-      if (elf_tdata (abfd)->o != NULL && elf_shstrtab (abfd) != NULL)
+      if (tdata->o != NULL && elf_shstrtab (abfd) != NULL)
 	_bfd_elf_strtab_free (elf_shstrtab (abfd));
       _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
+      _bfd_dwarf1_cleanup_debug_info (abfd, &tdata->dwarf1_find_line_info);
+      _bfd_stab_cleanup (abfd, &tdata->line_info);
     }
 
-  return _bfd_generic_close_and_cleanup (abfd);
+  return _bfd_generic_bfd_free_cached_info (abfd);
 }
 
 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
@@ -9304,8 +10309,6 @@ _bfd_elf_rel_vtable_reloc_fn
    out details about the corefile.  */
 
 #ifdef HAVE_SYS_PROCFS_H
-/* Needed for new procfs interface on sparc-solaris.  */
-# define _STRUCTURED_PROC 1
 # include <sys/procfs.h>
 #endif
 
@@ -9324,27 +10327,26 @@ elfcore_make_pid (bfd *abfd)
   return pid;
 }
 
-/* If there isn't a section called NAME, make one, using
-   data from SECT.  Note, this function will generate a
-   reference to NAME, so you shouldn't deallocate or
-   overwrite it.  */
+/* If there isn't a section called NAME, make one, using data from
+   SECT.  Note, this function will generate a reference to NAME, so
+   you shouldn't deallocate or overwrite it.  */
 
-static bfd_boolean
+static bool
 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
 {
   asection *sect2;
 
   if (bfd_get_section_by_name (abfd, name) != NULL)
-    return TRUE;
+    return true;
 
   sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
   if (sect2 == NULL)
-    return FALSE;
+    return false;
 
   sect2->size = sect->size;
   sect2->filepos = sect->filepos;
   sect2->alignment_power = sect->alignment_power;
-  return TRUE;
+  return true;
 }
 
 /* Create a pseudosection containing SIZE bytes at FILEPOS.  This
@@ -9354,7 +10356,7 @@ elfcore_maybe_make_sect (bfd *abfd, char
    - For the multi-threaded case, a section named "NAME/PID", where
      PID is elfcore_make_pid (abfd).
    Both pseudosections have identical contents.  */
-bfd_boolean
+bool
 _bfd_elfcore_make_pseudosection (bfd *abfd,
 				 char *name,
 				 size_t size,
@@ -9371,13 +10373,13 @@ _bfd_elfcore_make_pseudosection (bfd *ab
   len = strlen (buf) + 1;
   threaded_name = (char *) bfd_alloc (abfd, len);
   if (threaded_name == NULL)
-    return FALSE;
+    return false;
   memcpy (threaded_name, buf, len);
 
   sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
 					     SEC_HAS_CONTENTS);
   if (sect == NULL)
-    return FALSE;
+    return false;
   sect->size = size;
   sect->filepos = filepos;
   sect->alignment_power = 2;
@@ -9385,7 +10387,7 @@ _bfd_elfcore_make_pseudosection (bfd *ab
   return elfcore_maybe_make_sect (abfd, name, sect);
 }
 
-static bfd_boolean
+static bool
 elfcore_make_auxv_note_section (bfd *abfd, Elf_Internal_Note *note,
 				size_t offs)
 {
@@ -9393,13 +10395,13 @@ elfcore_make_auxv_note_section (bfd *abf
 						       SEC_HAS_CONTENTS);
 
   if (sect == NULL)
-    return FALSE;
+    return false;
 
   sect->size = note->descsz - offs;
   sect->filepos = note->descpos + offs;
   sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
 
-  return TRUE;
+  return true;
 }
 
 /* prstatus_t exists on:
@@ -9410,7 +10412,7 @@ elfcore_make_auxv_note_section (bfd *abf
 
 #if defined (HAVE_PRSTATUS_T)
 
-static bfd_boolean
+static bool
 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   size_t size;
@@ -9477,7 +10479,7 @@ elfcore_grok_prstatus (bfd *abfd, Elf_In
     {
       /* Fail - we don't know how to handle any other
 	 note size (ie. data object type).  */
-      return TRUE;
+      return true;
     }
 
   /* Make a ".reg/999" section and a ".reg" section.  */
@@ -9487,7 +10489,7 @@ elfcore_grok_prstatus (bfd *abfd, Elf_In
 #endif /* defined (HAVE_PRSTATUS_T) */
 
 /* Create a pseudosection containing the exact contents of NOTE.  */
-static bfd_boolean
+static bool
 elfcore_make_note_pseudosection (bfd *abfd,
 				 char *name,
 				 Elf_Internal_Note *note)
@@ -9500,7 +10502,7 @@ elfcore_make_note_pseudosection (bfd *ab
    but it doesn't matter, because we don't have to pick this
    data structure apart.  */
 
-static bfd_boolean
+static bool
 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg2", note);
@@ -9510,7 +10512,7 @@ elfcore_grok_prfpreg (bfd *abfd, Elf_Int
    type of NT_PRXFPREG.  Just include the whole note's contents
    literally.  */
 
-static bfd_boolean
+static bool
 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
@@ -9520,216 +10522,292 @@ elfcore_grok_prxfpreg (bfd *abfd, Elf_In
    with a note type of NT_X86_XSTATE.  Just include the whole note's
    contents literally.  */
 
-static bfd_boolean
+static bool
 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_tar (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tar", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_ppr (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ppr", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_dscr (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-dscr", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_ebb (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ebb", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_pmu (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-pmu", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_tm_cgpr (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cgpr", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_tm_cfpr (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cfpr", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_tm_cvmx (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvmx", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_tm_cvsx (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvsx", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_tm_spr (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-spr", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_tm_ctar (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-ctar", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_tm_cppr (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cppr", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_ppc_tm_cdscr (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cdscr", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_last_break (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-last-break", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_system_call (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-system-call", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_tdb (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-tdb", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_vxrs_low (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-low", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_vxrs_high (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-high", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_gs_cb (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-cb", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_s390_gs_bc (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-bc", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-arm-vfp", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_aarch_tls (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-tls", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_aarch_hw_break (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-break", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_aarch_hw_watch (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-watch", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_aarch_sve (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-sve", note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note)
 {
   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note);
 }
 
+static bool
+elfcore_grok_aarch_mte (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-aarch-mte",
+					  note);
+}
+
+static bool
+elfcore_grok_aarch_ssve (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-aarch-ssve", note);
+}
+
+static bool
+elfcore_grok_aarch_za (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-aarch-za", note);
+}
+
+/* Convert NOTE into a bfd_section called ".reg-aarch-zt".  Return TRUE if
+   successful, otherwise return FALSE.  */
+
+static bool
+elfcore_grok_aarch_zt (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-aarch-zt", note);
+}
+
+static bool
+elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-arc-v2", note);
+}
+
+/* Convert NOTE into a bfd_section called ".reg-riscv-csr".  Return TRUE if
+   successful otherwise, return FALSE.  */
+
+static bool
+elfcore_grok_riscv_csr (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-riscv-csr", note);
+}
+
+/* Convert NOTE into a bfd_section called ".gdb-tdesc".  Return TRUE if
+   successful otherwise, return FALSE.  */
+
+static bool
+elfcore_grok_gdb_tdesc (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".gdb-tdesc", note);
+}
+
+static bool
+elfcore_grok_loongarch_cpucfg (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-cpucfg", note);
+}
+
+static bool
+elfcore_grok_loongarch_lbt (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lbt", note);
+}
+
+static bool
+elfcore_grok_loongarch_lsx (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lsx", note);
+}
+
+static bool
+elfcore_grok_loongarch_lasx (bfd *abfd, Elf_Internal_Note *note)
+{
+  return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lasx", note);
+}
+
 #if defined (HAVE_PRPSINFO_T)
 typedef prpsinfo_t   elfcore_psinfo_t;
 #if defined (HAVE_PRPSINFO32_T)		/* Sparc64 cross Sparc32 */
@@ -9771,7 +10849,7 @@ _bfd_elfcore_strndup (bfd *abfd, char *s
 }
 
 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
-static bfd_boolean
+static bool
 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->descsz == sizeof (elfcore_psinfo_t))
@@ -9816,7 +10894,7 @@ elfcore_grok_psinfo (bfd *abfd, Elf_Inte
     {
       /* Fail - we don't know how to handle any other
 	 note size (ie. data object type).  */
-      return TRUE;
+      return true;
     }
 
   /* Note that for some reason, a spurious space is tacked
@@ -9831,12 +10909,12 @@ elfcore_grok_psinfo (bfd *abfd, Elf_Inte
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
 
 #if defined (HAVE_PSTATUS_T)
-static bfd_boolean
+static bool
 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->descsz == sizeof (pstatus_t)
@@ -9866,12 +10944,12 @@ elfcore_grok_pstatus (bfd *abfd, Elf_Int
      lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
      NT_LWPSTATUS note, presumably.  */
 
-  return TRUE;
+  return true;
 }
 #endif /* defined (HAVE_PSTATUS_T) */
 
 #if defined (HAVE_LWPSTATUS_T)
-static bfd_boolean
+static bool
 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   lwpstatus_t lwpstat;
@@ -9885,7 +10963,7 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_I
       && note->descsz != sizeof (lwpxstatus_t)
 #endif
       )
-    return TRUE;
+    return true;
 
   memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
 
@@ -9901,12 +10979,12 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_I
   len = strlen (buf) + 1;
   name = bfd_alloc (abfd, len);
   if (name == NULL)
-    return FALSE;
+    return false;
   memcpy (name, buf, len);
 
   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
   if (sect == NULL)
-    return FALSE;
+    return false;
 
 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
@@ -9922,7 +11000,7 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_I
   sect->alignment_power = 2;
 
   if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
-    return FALSE;
+    return false;
 
   /* Make a ".reg2/999" section */
 
@@ -9930,12 +11008,12 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_I
   len = strlen (buf) + 1;
   name = bfd_alloc (abfd, len);
   if (name == NULL)
-    return FALSE;
+    return false;
   memcpy (name, buf, len);
 
   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
   if (sect == NULL)
-    return FALSE;
+    return false;
 
 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
@@ -9954,53 +11032,83 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_I
 }
 #endif /* defined (HAVE_LWPSTATUS_T) */
 
-static bfd_boolean
+/* These constants, and the structure offsets used below, are defined by
+   Cygwin's core_dump.h */
+#define NOTE_INFO_PROCESS  1
+#define NOTE_INFO_THREAD   2
+#define NOTE_INFO_MODULE   3
+#define NOTE_INFO_MODULE64 4
+
+static bool
 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   char buf[30];
   char *name;
   size_t len;
+  unsigned int name_size;
   asection *sect;
-  int type;
+  unsigned int type;
   int is_active_thread;
   bfd_vma base_addr;
 
-  if (note->descsz < 728)
-    return TRUE;
+  if (note->descsz < 4)
+    return true;
 
-  if (! CONST_STRNEQ (note->namedata, "win32"))
-    return TRUE;
+  if (! startswith (note->namedata, "win32"))
+    return true;
 
   type = bfd_get_32 (abfd, note->descdata);
 
+  struct
+  {
+    const char *type_name;
+    unsigned long min_size;
+  } size_check[] =
+      {
+       { "NOTE_INFO_PROCESS", 12 },
+       { "NOTE_INFO_THREAD", 12 },
+       { "NOTE_INFO_MODULE", 12 },
+       { "NOTE_INFO_MODULE64", 16 },
+      };
+
+  if (type == 0 || type > (sizeof(size_check)/sizeof(size_check[0])))
+      return true;
+
+  if (note->descsz < size_check[type - 1].min_size)
+    {
+      _bfd_error_handler (_("%pB: warning: win32pstatus %s of size %lu bytes"
+			    " is too small"),
+			  abfd, size_check[type - 1].type_name, note->descsz);
+      return true;
+    }
+
   switch (type)
     {
-    case 1 /* NOTE_INFO_PROCESS */:
+    case NOTE_INFO_PROCESS:
       /* FIXME: need to add ->core->command.  */
-      /* process_info.pid */
-      elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 8);
-      /* process_info.signal */
-      elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 12);
+      elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 4);
+      elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 8);
       break;
 
-    case 2 /* NOTE_INFO_THREAD */:
-      /* Make a ".reg/999" section.  */
+    case NOTE_INFO_THREAD:
+      /* Make a ".reg/<tid>" section containing the Win32 API thread CONTEXT
+	 structure. */
       /* thread_info.tid */
-      sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8));
+      sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 4));
 
       len = strlen (buf) + 1;
       name = (char *) bfd_alloc (abfd, len);
       if (name == NULL)
-	return FALSE;
+	return false;
 
       memcpy (name, buf, len);
 
       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
       if (sect == NULL)
-	return FALSE;
+	return false;
 
       /* sizeof (thread_info.thread_context) */
-      sect->size = 716;
+      sect->size = note->descsz - 12;
       /* offsetof (thread_info.thread_context) */
       sect->filepos = note->descpos + 12;
       sect->alignment_power = 2;
@@ -10010,26 +11118,48 @@ elfcore_grok_win32pstatus (bfd *abfd, El
 
       if (is_active_thread)
 	if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
-	  return FALSE;
+	  return false;
       break;
 
-    case 3 /* NOTE_INFO_MODULE */:
+    case NOTE_INFO_MODULE:
+    case NOTE_INFO_MODULE64:
       /* Make a ".module/xxxxxxxx" section.  */
-      /* module_info.base_address */
-      base_addr = bfd_get_32 (abfd, note->descdata + 4);
-      sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
+      if (type == NOTE_INFO_MODULE)
+	{
+	  /* module_info.base_address */
+	  base_addr = bfd_get_32 (abfd, note->descdata + 4);
+	  sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
+	  /* module_info.module_name_size */
+	  name_size = bfd_get_32 (abfd, note->descdata + 8);
+	}
+      else /* NOTE_INFO_MODULE64 */
+	{
+	  /* module_info.base_address */
+	  base_addr = bfd_get_64 (abfd, note->descdata + 4);
+	  sprintf (buf, ".module/%016lx", (unsigned long) base_addr);
+	  /* module_info.module_name_size */
+	  name_size = bfd_get_32 (abfd, note->descdata + 12);
+	}
 
       len = strlen (buf) + 1;
       name = (char *) bfd_alloc (abfd, len);
       if (name == NULL)
-	return FALSE;
+	return false;
 
       memcpy (name, buf, len);
 
       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
 
       if (sect == NULL)
-	return FALSE;
+	return false;
+
+      if (note->descsz < 12 + name_size)
+	{
+	  _bfd_error_handler (_("%pB: win32pstatus NOTE_INFO_MODULE of size %lu"
+				" is too small to contain a name of size %u"),
+			      abfd, note->descsz, name_size);
+	  return true;
+	}
 
       sect->size = note->descsz;
       sect->filepos = note->descpos;
@@ -10037,13 +11167,13 @@ elfcore_grok_win32pstatus (bfd *abfd, El
       break;
 
     default:
-      return TRUE;
+      return true;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -10051,16 +11181,16 @@ elfcore_grok_note (bfd *abfd, Elf_Intern
   switch (note->type)
     {
     default:
-      return TRUE;
+      return true;
 
     case NT_PRSTATUS:
       if (bed->elf_backend_grok_prstatus)
 	if ((*bed->elf_backend_grok_prstatus) (abfd, note))
-	  return TRUE;
+	  return true;
 #if defined (HAVE_PRSTATUS_T)
       return elfcore_grok_prstatus (abfd, note);
 #else
-      return TRUE;
+      return true;
 #endif
 
 #if defined (HAVE_PSTATUS_T)
@@ -10084,262 +11214,339 @@ elfcore_grok_note (bfd *abfd, Elf_Intern
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_prxfpreg (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_X86_XSTATE:		/* Linux XSAVE extension */
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_xstatereg (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_VMX:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_vmx (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_VSX:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_vsx (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_TAR:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_tar (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_PPR:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_ppr (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_DSCR:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_dscr (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_EBB:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_ebb (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_PMU:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_pmu (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_TM_CGPR:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_tm_cgpr (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_TM_CFPR:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_tm_cfpr (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_TM_CVMX:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_tm_cvmx (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_TM_CVSX:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_tm_cvsx (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_TM_SPR:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_tm_spr (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_TM_CTAR:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_tm_ctar (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_TM_CPPR:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_tm_cppr (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_PPC_TM_CDSCR:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_ppc_tm_cdscr (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_HIGH_GPRS:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_high_gprs (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_TIMER:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_timer (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_TODCMP:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_todcmp (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_TODPREG:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_todpreg (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_CTRS:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_ctrs (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_PREFIX:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_prefix (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_LAST_BREAK:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_last_break (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_SYSTEM_CALL:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_system_call (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_TDB:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_tdb (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_VXRS_LOW:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_vxrs_low (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_VXRS_HIGH:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_vxrs_high (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_GS_CB:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_gs_cb (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_S390_GS_BC:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_s390_gs_bc (abfd, note);
       else
-	return TRUE;
+	return true;
+
+    case NT_ARC_V2:
+      if (note->namesz == 6
+	  && strcmp (note->namedata, "LINUX") == 0)
+	return elfcore_grok_arc_v2 (abfd, note);
+      else
+	return true;
 
     case NT_ARM_VFP:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_arm_vfp (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_ARM_TLS:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_aarch_tls (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_ARM_HW_BREAK:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_aarch_hw_break (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_ARM_HW_WATCH:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_aarch_hw_watch (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_ARM_SVE:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_aarch_sve (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_ARM_PAC_MASK:
       if (note->namesz == 6
 	  && strcmp (note->namedata, "LINUX") == 0)
 	return elfcore_grok_aarch_pauth (abfd, note);
       else
-	return TRUE;
+	return true;
+
+    case NT_ARM_TAGGED_ADDR_CTRL:
+      if (note->namesz == 6
+	  && strcmp (note->namedata, "LINUX") == 0)
+	return elfcore_grok_aarch_mte (abfd, note);
+      else
+	return true;
+
+    case NT_ARM_SSVE:
+      if (note->namesz == 6
+	  && strcmp (note->namedata, "LINUX") == 0)
+	return elfcore_grok_aarch_ssve (abfd, note);
+      else
+	return true;
+
+    case NT_ARM_ZA:
+      if (note->namesz == 6
+	  && strcmp (note->namedata, "LINUX") == 0)
+	return elfcore_grok_aarch_za (abfd, note);
+      else
+	return true;
+
+    case NT_ARM_ZT:
+      if (note->namesz == 6
+	  && strcmp (note->namedata, "LINUX") == 0)
+	return elfcore_grok_aarch_zt (abfd, note);
+      else
+	return true;
+
+    case NT_GDB_TDESC:
+      if (note->namesz == 4
+	  && strcmp (note->namedata, "GDB") == 0)
+	return elfcore_grok_gdb_tdesc (abfd, note);
+      else
+	return true;
+
+    case NT_RISCV_CSR:
+      if (note->namesz == 4
+	  && strcmp (note->namedata, "GDB") == 0)
+	return elfcore_grok_riscv_csr (abfd, note);
+      else
+	return true;
+
+    case NT_LARCH_CPUCFG:
+      if (note->namesz == 6
+	  && strcmp (note->namedata, "LINUX") == 0)
+	return elfcore_grok_loongarch_cpucfg (abfd, note);
+      else
+	return true;
+
+    case NT_LARCH_LBT:
+      if (note->namesz == 6
+	  && strcmp (note->namedata, "LINUX") == 0)
+	return elfcore_grok_loongarch_lbt (abfd, note);
+      else
+	return true;
+
+    case NT_LARCH_LSX:
+      if (note->namesz == 6
+	  && strcmp (note->namedata, "LINUX") == 0)
+	return elfcore_grok_loongarch_lsx (abfd, note);
+      else
+	return true;
+
+    case NT_LARCH_LASX:
+      if (note->namesz == 6
+	  && strcmp (note->namedata, "LINUX") == 0)
+	return elfcore_grok_loongarch_lasx (abfd, note);
+      else
+	return true;
 
     case NT_PRPSINFO:
     case NT_PSINFO:
       if (bed->elf_backend_grok_psinfo)
 	if ((*bed->elf_backend_grok_psinfo) (abfd, note))
-	  return TRUE;
+	  return true;
 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
       return elfcore_grok_psinfo (abfd, note);
 #else
-      return TRUE;
+      return true;
 #endif
 
     case NT_AUXV:
@@ -10356,32 +11563,32 @@ elfcore_grok_note (bfd *abfd, Elf_Intern
     }
 }
 
-static bfd_boolean
+static bool
 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
 {
   struct bfd_build_id* build_id;
 
   if (note->descsz == 0)
-    return FALSE;
+    return false;
 
   build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) - 1 + note->descsz);
   if (build_id == NULL)
-    return FALSE;
+    return false;
 
   build_id->size = note->descsz;
   memcpy (build_id->data, note->descdata, note->descsz);
   abfd->build_id = build_id;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->type)
     {
     default:
-      return TRUE;
+      return true;
 
     case NT_GNU_PROPERTY_TYPE_0:
       return _bfd_elf_parse_gnu_properties (abfd, note);
@@ -10391,7 +11598,7 @@ elfobj_grok_gnu_note (bfd *abfd, Elf_Int
     }
 }
 
-static bfd_boolean
+static bool
 elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
 {
   struct sdt_note *cur =
@@ -10404,10 +11611,10 @@ elfobj_grok_stapsdt_note_1 (bfd *abfd, E
 
   elf_tdata (abfd)->sdt_note_head = cur;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->type)
@@ -10416,11 +11623,11 @@ elfobj_grok_stapsdt_note (bfd *abfd, Elf
       return elfobj_grok_stapsdt_note_1 (abfd, note);
 
     default:
-      return TRUE;
+      return true;
     }
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   size_t offset;
@@ -10429,21 +11636,21 @@ elfcore_grok_freebsd_psinfo (bfd *abfd,
     {
     case ELFCLASS32:
       if (note->descsz < 108)
-	return FALSE;
+	return false;
       break;
 
     case ELFCLASS64:
       if (note->descsz < 120)
-	return FALSE;
+	return false;
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   /* Check for version 1 in pr_version.  */
   if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
-    return FALSE;
+    return false;
 
   offset = 4;
 
@@ -10471,15 +11678,15 @@ elfcore_grok_freebsd_psinfo (bfd *abfd,
 
   /* The pr_pid field was added in version "1a".  */
   if (note->descsz < offset + 4)
-    return TRUE;
+    return true;
 
   elf_tdata (abfd)->core->pid
     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   size_t offset;
@@ -10501,15 +11708,15 @@ elfcore_grok_freebsd_prstatus (bfd *abfd
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   if (note->descsz < min_size)
-    return FALSE;
+    return false;
 
   /* Check for version 1 in pr_version.  */
   if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
-    return FALSE;
+    return false;
 
   /* Extract size of pr_reg from pr_gregsetsz.  */
   /* Skip over pr_gregsetsz and pr_fpregsetsz.  */
@@ -10544,14 +11751,14 @@ elfcore_grok_freebsd_prstatus (bfd *abfd
 
   /* Make sure that there is enough data remaining in the note.  */
   if ((note->descsz - offset) < size)
-    return FALSE;
+    return false;
 
   /* Make a ".reg/999" section and a ".reg" section.  */
   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
 					  size, note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -10561,7 +11768,7 @@ elfcore_grok_freebsd_note (bfd *abfd, El
     case NT_PRSTATUS:
       if (bed->elf_backend_grok_freebsd_prstatus)
 	if ((*bed->elf_backend_grok_freebsd_prstatus) (abfd, note))
-	  return TRUE;
+	  return true;
       return elfcore_grok_freebsd_prstatus (abfd, note);
 
     case NT_FPREGSET:
@@ -10571,10 +11778,7 @@ elfcore_grok_freebsd_note (bfd *abfd, El
       return elfcore_grok_freebsd_psinfo (abfd, note);
 
     case NT_FREEBSD_THRMISC:
-      if (note->namesz == 8)
-	return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
-      else
-	return TRUE;
+      return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
 
     case NT_FREEBSD_PROCSTAT_PROC:
       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
@@ -10591,25 +11795,28 @@ elfcore_grok_freebsd_note (bfd *abfd, El
     case NT_FREEBSD_PROCSTAT_AUXV:
       return elfcore_make_auxv_note_section (abfd, note, 4);
 
+    case NT_FREEBSD_X86_SEGBASES:
+      return elfcore_make_note_pseudosection (abfd, ".reg-x86-segbases", note);
+
     case NT_X86_XSTATE:
-      if (note->namesz == 8)
-	return elfcore_grok_xstatereg (abfd, note);
-      else
-	return TRUE;
+      return elfcore_grok_xstatereg (abfd, note);
 
     case NT_FREEBSD_PTLWPINFO:
       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
 					      note);
 
+    case NT_ARM_TLS:
+      return elfcore_grok_aarch_tls (abfd, note);
+
     case NT_ARM_VFP:
       return elfcore_grok_arm_vfp (abfd, note);
 
     default:
-      return TRUE;
+      return true;
     }
 }
 
-static bfd_boolean
+static bool
 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
 {
   char *cp;
@@ -10618,16 +11825,16 @@ elfcore_netbsd_get_lwpid (Elf_Internal_N
   if (cp != NULL)
     {
       *lwpidp = atoi(cp + 1);
-      return TRUE;
+      return true;
     }
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->descsz <= 0x7c + 31)
-    return FALSE;
+    return false;
 
   /* Signal number at offset 0x08. */
   elf_tdata (abfd)->core->signal
@@ -10645,7 +11852,7 @@ elfcore_grok_netbsd_procinfo (bfd *abfd,
 					  note);
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
 {
   int lwp;
@@ -10661,22 +11868,24 @@ elfcore_grok_netbsd_note (bfd *abfd, Elf
 	 since the kernel writes this note out first when it
 	 creates a core file.  */
       return elfcore_grok_netbsd_procinfo (abfd, note);
-#ifdef NT_NETBSDCORE_AUXV
     case NT_NETBSDCORE_AUXV:
       /* NetBSD-specific Elf Auxiliary Vector data. */
       return elfcore_make_auxv_note_section (abfd, note, 4);
-#endif
+    case NT_NETBSDCORE_LWPSTATUS:
+      return elfcore_make_note_pseudosection (abfd,
+					      ".note.netbsdcore.lwpstatus",
+					      note);
     default:
       break;
     }
 
-  /* As of March 2017 there are no other machine-independent notes
+  /* As of March 2020 there are no other machine-independent notes
      defined for NetBSD core files.  If the note type is less
      than the start of the machine-dependent note types, we don't
      understand it.  */
 
   if (note->type < NT_NETBSDCORE_FIRSTMACH)
-    return TRUE;
+    return true;
 
 
   switch (bfd_get_arch (abfd))
@@ -10684,6 +11893,7 @@ elfcore_grok_netbsd_note (bfd *abfd, Elf
       /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
 	 PT_GETFPREGS == mach+2.  */
 
+    case bfd_arch_aarch64:
     case bfd_arch_alpha:
     case bfd_arch_sparc:
       switch (note->type)
@@ -10695,7 +11905,7 @@ elfcore_grok_netbsd_note (bfd *abfd, Elf
 	  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
 
 	default:
-	  return TRUE;
+	  return true;
 	}
 
       /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
@@ -10712,7 +11922,7 @@ elfcore_grok_netbsd_note (bfd *abfd, Elf
 	  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
 
 	default:
-	  return TRUE;
+	  return true;
 	}
 
       /* On all other arch's, PT_GETREGS == mach+1 and
@@ -10728,17 +11938,17 @@ elfcore_grok_netbsd_note (bfd *abfd, Elf
 	  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
 
 	default:
-	  return TRUE;
+	  return true;
 	}
     }
     /* NOTREACHED */
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->descsz <= 0x48 + 31)
-    return FALSE;
+    return false;
 
   /* Signal number at offset 0x08. */
   elf_tdata (abfd)->core->signal
@@ -10752,10 +11962,199 @@ elfcore_grok_openbsd_procinfo (bfd *abfd
   elf_tdata (abfd)->core->command
     = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
 
-  return TRUE;
+  return true;
+}
+
+/* Processes Solaris's process status note.
+   sig_off ~ offsetof(prstatus_t, pr_cursig)
+   pid_off ~ offsetof(prstatus_t, pr_pid)
+   lwpid_off ~ offsetof(prstatus_t, pr_who)
+   gregset_size ~ sizeof(gregset_t)
+   gregset_offset ~ offsetof(prstatus_t, pr_reg)  */
+
+static bool
+elfcore_grok_solaris_prstatus (bfd *abfd, Elf_Internal_Note* note, int sig_off,
+			       int pid_off, int lwpid_off, size_t gregset_size,
+			       size_t gregset_offset)
+{
+  asection *sect = NULL;
+  elf_tdata (abfd)->core->signal
+    = bfd_get_16 (abfd, note->descdata + sig_off);
+  elf_tdata (abfd)->core->pid
+    = bfd_get_32 (abfd, note->descdata + pid_off);
+  elf_tdata (abfd)->core->lwpid
+    = bfd_get_32 (abfd, note->descdata + lwpid_off);
+
+  sect = bfd_get_section_by_name (abfd, ".reg");
+  if (sect != NULL)
+    sect->size = gregset_size;
+
+  return _bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
+					  note->descpos + gregset_offset);
+}
+
+/* Gets program and arguments from a core.
+   prog_off ~ offsetof(prpsinfo | psinfo_t, pr_fname)
+   comm_off ~ offsetof(prpsinfo | psinfo_t, pr_psargs)  */
+
+static bool
+elfcore_grok_solaris_info(bfd *abfd, Elf_Internal_Note* note,
+			  int prog_off, int comm_off)
+{
+  elf_tdata (abfd)->core->program
+    = _bfd_elfcore_strndup (abfd, note->descdata + prog_off, 16);
+  elf_tdata (abfd)->core->command
+    = _bfd_elfcore_strndup (abfd, note->descdata + comm_off, 80);
+
+  return true;
 }
 
-static bfd_boolean
+/* Processes Solaris's LWP status note.
+   gregset_size ~ sizeof(gregset_t)
+   gregset_off ~ offsetof(lwpstatus_t, pr_reg)
+   fpregset_size ~ sizeof(fpregset_t)
+   fpregset_off ~ offsetof(lwpstatus_t, pr_fpreg)  */
+
+static bool
+elfcore_grok_solaris_lwpstatus (bfd *abfd, Elf_Internal_Note* note,
+				size_t gregset_size, int gregset_off,
+				size_t fpregset_size, int fpregset_off)
+{
+  asection *sect = NULL;
+  char reg2_section_name[16] = { 0 };
+
+  (void) snprintf (reg2_section_name, 16, "%s/%i", ".reg2",
+		   elf_tdata (abfd)->core->lwpid);
+
+  /* offsetof(lwpstatus_t, pr_lwpid) */
+  elf_tdata (abfd)->core->lwpid
+    = bfd_get_32 (abfd, note->descdata + 4);
+  /* offsetof(lwpstatus_t, pr_cursig) */
+  elf_tdata (abfd)->core->signal
+    = bfd_get_16 (abfd, note->descdata + 12);
+
+  sect = bfd_get_section_by_name (abfd, ".reg");
+  if (sect != NULL)
+    sect->size = gregset_size;
+  else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
+					     note->descpos + gregset_off))
+    return false;
+
+  sect = bfd_get_section_by_name (abfd, reg2_section_name);
+  if (sect != NULL)
+    {
+      sect->size = fpregset_size;
+      sect->filepos = note->descpos + fpregset_off;
+      sect->alignment_power = 2;
+    }
+  else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg2", fpregset_size,
+					     note->descpos + fpregset_off))
+    return false;
+
+  return true;
+}
+
+static bool
+elfcore_grok_solaris_note_impl (bfd *abfd, Elf_Internal_Note *note)
+{
+  if (note == NULL)
+    return false;
+
+  /* core files are identified as 32- or 64-bit, SPARC or x86,
+     by the size of the descsz which matches the sizeof()
+     the type appropriate for that note type (e.g., prstatus_t for
+     SOLARIS_NT_PRSTATUS) for the corresponding architecture
+     on Solaris. The core file bitness may differ from the bitness of
+     gdb itself, so fixed values are used instead of sizeof().
+     Appropriate fixed offsets are also used to obtain data from
+     the note.  */
+
+  switch ((int) note->type)
+    {
+    case SOLARIS_NT_PRSTATUS:
+      switch (note->descsz)
+	{
+	case 508: /* sizeof(prstatus_t) SPARC 32-bit */
+	  return elfcore_grok_solaris_prstatus(abfd, note,
+					       136, 216, 308, 152, 356);
+	case 904: /* sizeof(prstatus_t) SPARC 64-bit */
+	  return elfcore_grok_solaris_prstatus(abfd, note,
+					       264, 360, 520, 304, 600);
+	case 432: /* sizeof(prstatus_t) Intel 32-bit */
+	  return elfcore_grok_solaris_prstatus(abfd, note,
+					       136, 216, 308, 76, 356);
+	case 824: /* sizeof(prstatus_t) Intel 64-bit */
+	  return elfcore_grok_solaris_prstatus(abfd, note,
+					       264, 360, 520, 224, 600);
+	default:
+	  return true;
+	}
+
+    case SOLARIS_NT_PSINFO:
+    case SOLARIS_NT_PRPSINFO:
+      switch (note->descsz)
+	{
+	case 260: /* sizeof(prpsinfo_t) SPARC and Intel 32-bit */
+	  return elfcore_grok_solaris_info(abfd, note, 84, 100);
+	case 328: /* sizeof(prpsinfo_t) SPARC and Intel 64-bit */
+	  return elfcore_grok_solaris_info(abfd, note, 120, 136);
+	case 360: /* sizeof(psinfo_t) SPARC and Intel 32-bit */
+	  return elfcore_grok_solaris_info(abfd, note, 88, 104);
+	case 440: /* sizeof(psinfo_t) SPARC and Intel 64-bit */
+	  return elfcore_grok_solaris_info(abfd, note, 136, 152);
+	default:
+	  return true;
+	}
+
+    case SOLARIS_NT_LWPSTATUS:
+      switch (note->descsz)
+	{
+	case 896: /* sizeof(lwpstatus_t) SPARC 32-bit */
+	  return elfcore_grok_solaris_lwpstatus(abfd, note,
+						152, 344, 400, 496);
+	case 1392: /* sizeof(lwpstatus_t) SPARC 64-bit */
+	  return elfcore_grok_solaris_lwpstatus(abfd, note,
+						304, 544, 544, 848);
+	case 800: /* sizeof(lwpstatus_t) Intel 32-bit */
+	  return elfcore_grok_solaris_lwpstatus(abfd, note,
+						76, 344, 380, 420);
+	case 1296: /* sizeof(lwpstatus_t) Intel 64-bit */
+	  return elfcore_grok_solaris_lwpstatus(abfd, note,
+						224, 544, 528, 768);
+	default:
+	  return true;
+	}
+
+    case SOLARIS_NT_LWPSINFO:
+      /* sizeof(lwpsinfo_t) on 32- and 64-bit, respectively */
+      if (note->descsz == 128 || note->descsz == 152)
+	elf_tdata (abfd)->core->lwpid =
+	  bfd_get_32 (abfd, note->descdata + 4);
+      break;
+
+    default:
+      break;
+    }
+
+  return true;
+}
+
+/* For name starting with "CORE" this may be either a Solaris
+   core file or a gdb-generated core file.  Do Solaris-specific
+   processing on selected note types first with
+   elfcore_grok_solaris_note(), then process the note
+   in elfcore_grok_note().  */
+
+static bool
+elfcore_grok_solaris_note (bfd *abfd, Elf_Internal_Note *note)
+{
+  if (!elfcore_grok_solaris_note_impl (abfd, note))
+    return false;
+
+  return elfcore_grok_note (abfd, note);
+}
+
+static bool
 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->type == NT_OPENBSD_PROCINFO)
@@ -10779,18 +12178,18 @@ elfcore_grok_openbsd_note (bfd *abfd, El
 							   SEC_HAS_CONTENTS);
 
       if (sect == NULL)
-	return FALSE;
+	return false;
       sect->size = note->descsz;
       sect->filepos = note->descpos;
       sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
 
-      return TRUE;
+      return true;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
 {
   void *ddata = note->descdata;
@@ -10801,7 +12200,7 @@ elfcore_grok_nto_status (bfd *abfd, Elf_
   unsigned flags;
 
   if (note->descsz < 16)
-    return FALSE;
+    return false;
 
   /* nto_procfs_status 'pid' field is at offset 0.  */
   elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
@@ -10830,12 +12229,12 @@ elfcore_grok_nto_status (bfd *abfd, Elf_
 
   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
   if (name == NULL)
-    return FALSE;
+    return false;
   strcpy (name, buf);
 
   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
   if (sect == NULL)
-    return FALSE;
+    return false;
 
   sect->size		= note->descsz;
   sect->filepos		= note->descpos;
@@ -10844,7 +12243,7 @@ elfcore_grok_nto_status (bfd *abfd, Elf_
   return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_nto_regs (bfd *abfd,
 		       Elf_Internal_Note *note,
 		       long tid,
@@ -10859,12 +12258,12 @@ elfcore_grok_nto_regs (bfd *abfd,
 
   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
   if (name == NULL)
-    return FALSE;
+    return false;
   strcpy (name, buf);
 
   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
   if (sect == NULL)
-    return FALSE;
+    return false;
 
   sect->size		= note->descsz;
   sect->filepos		= note->descpos;
@@ -10874,15 +12273,10 @@ elfcore_grok_nto_regs (bfd *abfd,
   if (elf_tdata (abfd)->core->lwpid == tid)
     return elfcore_maybe_make_sect (abfd, base, sect);
 
-  return TRUE;
+  return true;
 }
 
-#define BFD_QNT_CORE_INFO	7
-#define BFD_QNT_CORE_STATUS	8
-#define BFD_QNT_CORE_GREG	9
-#define BFD_QNT_CORE_FPREG	10
-
-static bfd_boolean
+static bool
 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
 {
   /* Every GREG section has a STATUS section before it.  Store the
@@ -10892,20 +12286,20 @@ elfcore_grok_nto_note (bfd *abfd, Elf_In
 
   switch (note->type)
     {
-    case BFD_QNT_CORE_INFO:
+    case QNT_CORE_INFO:
       return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
-    case BFD_QNT_CORE_STATUS:
+    case QNT_CORE_STATUS:
       return elfcore_grok_nto_status (abfd, note, &tid);
-    case BFD_QNT_CORE_GREG:
+    case QNT_CORE_GREG:
       return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
-    case BFD_QNT_CORE_FPREG:
+    case QNT_CORE_FPREG:
       return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
     default:
-      return TRUE;
+      return true;
     }
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
 {
   char *name;
@@ -10916,19 +12310,19 @@ elfcore_grok_spu_note (bfd *abfd, Elf_In
   len = note->namesz;
   name = (char *) bfd_alloc (abfd, len);
   if (name == NULL)
-    return FALSE;
+    return false;
   memcpy (name, note->namedata, len);
   name[len - 1] = '\0';
 
   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
   if (sect == NULL)
-    return FALSE;
+    return false;
 
   sect->size		= note->descsz;
   sect->filepos		= note->descpos;
   sect->alignment_power = 1;
 
-  return TRUE;
+  return true;
 }
 
 /* Function: elfcore_write_note
@@ -11280,6 +12674,15 @@ elfcore_write_xstatereg (bfd *abfd, char
 }
 
 char *
+elfcore_write_x86_segbases (bfd *abfd, char *buf, int *bufsiz,
+			    const void *regs, int size)
+{
+  char *note_name = "FreeBSD";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_FREEBSD_X86_SEGBASES, regs, size);
+}
+
+char *
 elfcore_write_ppc_vmx (bfd *abfd,
 		       char *buf,
 		       int *bufsiz,
@@ -11694,6 +13097,162 @@ elfcore_write_aarch_pauth (bfd *abfd,
 }
 
 char *
+elfcore_write_aarch_mte (bfd *abfd,
+				      char *buf,
+				      int *bufsiz,
+				      const void *aarch_mte,
+				      int size)
+{
+  char *note_name = "LINUX";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_ARM_TAGGED_ADDR_CTRL,
+			     aarch_mte,
+			     size);
+}
+
+char *
+elfcore_write_aarch_ssve (bfd *abfd,
+			  char *buf,
+			  int *bufsiz,
+			  const void *aarch_ssve,
+			  int size)
+{
+  char *note_name = "LINUX";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_ARM_SSVE,
+			     aarch_ssve,
+			     size);
+}
+
+char *
+elfcore_write_aarch_za (bfd *abfd,
+			char *buf,
+			int *bufsiz,
+			const void *aarch_za,
+			int size)
+{
+  char *note_name = "LINUX";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_ARM_ZA,
+			     aarch_za,
+			     size);
+}
+
+/* Write the buffer of zt register values in aarch_zt (length SIZE) into
+   the note buffer BUF and update *BUFSIZ.  ABFD is the bfd the note is being
+   written into.  Return a pointer to the new start of the note buffer, to
+   replace BUF which may no longer be valid.  */
+
+char *
+elfcore_write_aarch_zt (bfd *abfd,
+			char *buf,
+			int *bufsiz,
+			const void *aarch_zt,
+			int size)
+{
+  char *note_name = "LINUX";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_ARM_ZT,
+			     aarch_zt,
+			     size);
+}
+
+char *
+elfcore_write_arc_v2 (bfd *abfd,
+		      char *buf,
+		      int *bufsiz,
+		      const void *arc_v2,
+		      int size)
+{
+  char *note_name = "LINUX";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_ARC_V2, arc_v2, size);
+}
+
+char *
+elfcore_write_loongarch_cpucfg (bfd *abfd,
+				char *buf,
+				int *bufsiz,
+				const void *loongarch_cpucfg,
+				int size)
+{
+  char *note_name = "LINUX";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_LARCH_CPUCFG,
+			     loongarch_cpucfg, size);
+}
+
+char *
+elfcore_write_loongarch_lbt (bfd *abfd,
+			     char *buf,
+			     int *bufsiz,
+			     const void *loongarch_lbt,
+			     int size)
+{
+  char *note_name = "LINUX";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_LARCH_LBT, loongarch_lbt, size);
+}
+
+char *
+elfcore_write_loongarch_lsx (bfd *abfd,
+			     char *buf,
+			     int *bufsiz,
+			     const void *loongarch_lsx,
+			     int size)
+{
+  char *note_name = "LINUX";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_LARCH_LSX, loongarch_lsx, size);
+}
+
+char *
+elfcore_write_loongarch_lasx (bfd *abfd,
+			      char *buf,
+			      int *bufsiz,
+			      const void *loongarch_lasx,
+			      int size)
+{
+  char *note_name = "LINUX";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_LARCH_LASX, loongarch_lasx, size);
+}
+
+/* Write the buffer of csr values in CSRS (length SIZE) into the note
+   buffer BUF and update *BUFSIZ.  ABFD is the bfd the note is being
+   written into.  Return a pointer to the new start of the note buffer, to
+   replace BUF which may no longer be valid.  */
+
+char *
+elfcore_write_riscv_csr (bfd *abfd,
+			 char *buf,
+			 int *bufsiz,
+			 const void *csrs,
+			 int size)
+{
+  const char *note_name = "GDB";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_RISCV_CSR, csrs, size);
+}
+
+/* Write the target description (a string) pointed to by TDESC, length
+   SIZE, into the note buffer BUF, and update *BUFSIZ.  ABFD is the bfd the
+   note is being written into.  Return a pointer to the new start of the
+   note buffer, to replace BUF which may no longer be valid.  */
+
+char *
+elfcore_write_gdb_tdesc (bfd *abfd,
+			 char *buf,
+			 int *bufsiz,
+			 const void *tdesc,
+			 int size)
+{
+  const char *note_name = "GDB";
+  return elfcore_write_note (abfd, buf, bufsiz,
+			     note_name, NT_GDB_TDESC, tdesc, size);
+}
+
+char *
 elfcore_write_register_note (bfd *abfd,
 			     char *buf,
 			     int *bufsiz,
@@ -11707,6 +13266,8 @@ elfcore_write_register_note (bfd *abfd,
     return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
   if (strcmp (section, ".reg-xstate") == 0)
     return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-x86-segbases") == 0)
+    return elfcore_write_x86_segbases (abfd, buf, bufsiz, data, size);
   if (strcmp (section, ".reg-ppc-vmx") == 0)
     return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
   if (strcmp (section, ".reg-ppc-vsx") == 0)
@@ -11775,10 +13336,40 @@ elfcore_write_register_note (bfd *abfd,
     return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size);
   if (strcmp (section, ".reg-aarch-pauth") == 0)
     return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-aarch-mte") == 0)
+    return elfcore_write_aarch_mte (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-aarch-ssve") == 0)
+    return elfcore_write_aarch_ssve (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-aarch-za") == 0)
+    return elfcore_write_aarch_za (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-aarch-zt") == 0)
+    return elfcore_write_aarch_zt (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-arc-v2") == 0)
+    return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".gdb-tdesc") == 0)
+    return elfcore_write_gdb_tdesc (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-riscv-csr") == 0)
+    return elfcore_write_riscv_csr (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-loongarch-cpucfg") == 0)
+    return elfcore_write_loongarch_cpucfg (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-loongarch-lbt") == 0)
+    return elfcore_write_loongarch_lbt (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-loongarch-lsx") == 0)
+    return elfcore_write_loongarch_lsx (abfd, buf, bufsiz, data, size);
+  if (strcmp (section, ".reg-loongarch-lasx") == 0)
+    return elfcore_write_loongarch_lasx (abfd, buf, bufsiz, data, size);
   return NULL;
 }
 
-static bfd_boolean
+char *
+elfcore_write_file_note (bfd *obfd, char *note_data, int *note_size,
+			 const void *buf, int bufsiz)
+{
+  return elfcore_write_note (obfd, note_data, note_size,
+			     "CORE", NT_FILE, buf, bufsiz);
+}
+
+static bool
 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset,
 		 size_t align)
 {
@@ -11791,7 +13382,7 @@ elf_parse_notes (bfd *abfd, char *buf, s
   if (align < 4)
     align = 4;
   if (align != 4 && align != 8)
-    return FALSE;
+    return false;
 
   p = buf;
   while (p < buf + size)
@@ -11800,14 +13391,14 @@ elf_parse_notes (bfd *abfd, char *buf, s
       Elf_Internal_Note in;
 
       if (offsetof (Elf_External_Note, name) > buf - p + size)
-	return FALSE;
+	return false;
 
       in.type = H_GET_32 (abfd, xnp->type);
 
       in.namesz = H_GET_32 (abfd, xnp->namesz);
       in.namedata = xnp->name;
       if (in.namesz > buf - in.namedata + size)
-	return FALSE;
+	return false;
 
       in.descsz = H_GET_32 (abfd, xnp->descsz);
       in.descdata = p + ELF_NOTE_DESC_OFFSET (in.namesz, align);
@@ -11815,12 +13406,12 @@ elf_parse_notes (bfd *abfd, char *buf, s
       if (in.descsz != 0
 	  && (in.descdata >= buf + size
 	      || in.descsz > buf - in.descdata + size))
-	return FALSE;
+	return false;
 
       switch (bfd_get_format (abfd))
 	{
 	default:
-	  return TRUE;
+	  return true;
 
 	case bfd_core:
 	  {
@@ -11829,17 +13420,18 @@ elf_parse_notes (bfd *abfd, char *buf, s
 	    {
 	      const char * string;
 	      size_t len;
-	      bfd_boolean (* func)(bfd *, Elf_Internal_Note *);
+	      bool (*func) (bfd *, Elf_Internal_Note *);
 	    }
 	    grokers[] =
 	    {
 	      GROKER_ELEMENT ("", elfcore_grok_note),
 	      GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note),
 	      GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),
-	      GROKER_ELEMENT ( "OpenBSD", elfcore_grok_openbsd_note),
+	      GROKER_ELEMENT ("OpenBSD", elfcore_grok_openbsd_note),
 	      GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),
 	      GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),
-	      GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note)
+	      GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note),
+	      GROKER_ELEMENT ("CORE", elfcore_grok_solaris_note)
 	    };
 #undef GROKER_ELEMENT
 	    int i;
@@ -11851,7 +13443,7 @@ elf_parse_notes (bfd *abfd, char *buf, s
 				grokers[i].len) == 0)
 		  {
 		    if (! grokers[i].func (abfd, & in))
-		      return FALSE;
+		      return false;
 		    break;
 		  }
 	      }
@@ -11862,13 +13454,13 @@ elf_parse_notes (bfd *abfd, char *buf, s
 	  if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
 	    {
 	      if (! elfobj_grok_gnu_note (abfd, &in))
-		return FALSE;
+		return false;
 	    }
 	  else if (in.namesz == sizeof "stapsdt"
 		   && strcmp (in.namedata, "stapsdt") == 0)
 	    {
 	      if (! elfobj_grok_stapsdt_note (abfd, &in))
-		return FALSE;
+		return false;
 	    }
 	  break;
 	}
@@ -11876,38 +13468,37 @@ elf_parse_notes (bfd *abfd, char *buf, s
       p += ELF_NOTE_NEXT_OFFSET (in.namesz, in.descsz, align);
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size,
 		size_t align)
 {
   char *buf;
 
   if (size == 0 || (size + 1) == 0)
-    return TRUE;
+    return true;
 
   if (bfd_seek (abfd, offset, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
-  buf = (char *) bfd_malloc (size + 1);
+  buf = (char *) _bfd_malloc_and_read (abfd, size + 1, size);
   if (buf == NULL)
-    return FALSE;
+    return false;
 
   /* PR 17512: file: ec08f814
      0-termintate the buffer so that string searches will not overflow.  */
   buf[size] = 0;
 
-  if (bfd_bread (buf, size, abfd) != size
-      || !elf_parse_notes (abfd, buf, size, offset, align))
+  if (!elf_parse_notes (abfd, buf, size, offset, align))
     {
       free (buf);
-      return FALSE;
+      return false;
     }
 
   free (buf);
-  return TRUE;
+  return true;
 }
 
 /* Providing external access to the ELF program header table.  */
@@ -12055,31 +13646,6 @@ _bfd_elf_section_offset (bfd *abfd,
     }
 }
 
-/* Create a new BFD as if by bfd_openr.  Rather than opening a file,
-   reconstruct an ELF file by reading the segments out of remote memory
-   based on the ELF file header at EHDR_VMA and the ELF program headers it
-   points to.  If not null, *LOADBASEP is filled in with the difference
-   between the VMAs from which the segments were read, and the VMAs the
-   file headers (and hence BFD's idea of each section's VMA) put them at.
-
-   The function TARGET_READ_MEMORY is called to copy LEN bytes from the
-   remote memory at target address VMA into the local buffer at MYADDR; it
-   should return zero on success or an `errno' code on failure.  TEMPL must
-   be a BFD for an ELF target with the word size and byte order found in
-   the remote memory.  */
-
-bfd *
-bfd_elf_bfd_from_remote_memory
-  (bfd *templ,
-   bfd_vma ehdr_vma,
-   bfd_size_type size,
-   bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
-{
-  return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
-    (templ, ehdr_vma, size, loadbasep, target_read_memory);
-}
-
 long
 _bfd_elf_get_synthetic_symtab (bfd *abfd,
 			       long symcount ATTRIBUTE_UNUSED,
@@ -12092,7 +13658,7 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd
   asection *relplt;
   asymbol *s;
   const char *relplt_name;
-  bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
+  bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
   arelent *p;
   long count, i, n;
   size_t size;
@@ -12128,10 +13694,10 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd
     return 0;
 
   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
-  if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
+  if (! (*slurp_relocs) (abfd, relplt, dynsyms, true))
     return -1;
 
-  count = relplt->size / hdr->sh_entsize;
+  count = NUM_SHDR_ENTRIES (hdr);
   size = count * sizeof (asymbol);
   p = relplt->relocation;
   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
@@ -12206,7 +13772,7 @@ asection _bfd_elf_large_com_section
   = BFD_FAKE_SECTION (_bfd_elf_large_com_section, &lcomm_sym,
 		      "LARGE_COMMON", 0, SEC_IS_COMMON);
 
-bfd_boolean
+bool
 _bfd_elf_final_write_processing (bfd *abfd)
 {
   Elf_Internal_Ehdr *i_ehdrp;	/* ELF file header, internal form.  */
@@ -12217,8 +13783,8 @@ _bfd_elf_final_write_processing (bfd *ab
     i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
 
   /* Set the osabi field to ELFOSABI_GNU if the binary contains
-     SHF_GNU_MBIND sections or symbols of STT_GNU_IFUNC type or
-     STB_GNU_UNIQUE binding.  */
+     SHF_GNU_MBIND or SHF_GNU_RETAIN sections or symbols of STT_GNU_IFUNC type
+     or STB_GNU_UNIQUE binding.  */
   if (elf_tdata (abfd)->has_gnu_osabi != 0)
     {
       if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
@@ -12227,16 +13793,22 @@ _bfd_elf_final_write_processing (bfd *ab
 	       && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
 	{
 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind)
-	    _bfd_error_handler (_("GNU_MBIND section is unsupported"));
+	    _bfd_error_handler (_("GNU_MBIND section is supported only by GNU "
+				  "and FreeBSD targets"));
 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_ifunc)
-	    _bfd_error_handler (_("symbol type STT_GNU_IFUNC is unsupported"));
+	    _bfd_error_handler (_("symbol type STT_GNU_IFUNC is supported "
+				  "only by GNU and FreeBSD targets"));
 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_unique)
-	    _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is unsupported"));
+	    _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is supported "
+				  "only by GNU and FreeBSD targets"));
+	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_retain)
+	    _bfd_error_handler (_("GNU_RETAIN section is supported "
+				  "only by GNU and FreeBSD targets"));
 	  bfd_set_error (bfd_error_sorry);
-	  return FALSE;
+	  return false;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -12244,7 +13816,7 @@ _bfd_elf_final_write_processing (bfd *ab
    This is the default version of this function, which is sufficient for
    most targets.  It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC.  */
 
-bfd_boolean
+bool
 _bfd_elf_is_function_type (unsigned int type)
 {
   return (type == STT_FUNC
@@ -12260,17 +13832,530 @@ _bfd_elf_maybe_function_sym (const asymb
 			     bfd_vma *code_off)
 {
   bfd_size_type size;
+  elf_symbol_type * elf_sym = (elf_symbol_type *) sym;
 
   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
 		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
       || sym->section != sec)
     return 0;
 
+  size = (sym->flags & BSF_SYNTHETIC) ? 0 : elf_sym->internal_elf_sym.st_size;
+
+  /* In theory we should check that the symbol's type satisfies
+     _bfd_elf_is_function_type(), but there are some function-like
+     symbols which would fail this test.  (eg _start).  Instead
+     we check for hidden, local, notype symbols with zero size.
+     This type of symbol is generated by the annobin plugin for gcc
+     and clang, and should not be considered to be a function symbol.  */
+  if (size == 0
+      && ((sym->flags & (BSF_SYNTHETIC | BSF_LOCAL)) == BSF_LOCAL)
+      && ELF_ST_TYPE (elf_sym->internal_elf_sym.st_info) == STT_NOTYPE
+      && ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other) == STV_HIDDEN)
+    return 0;
+
   *code_off = sym->value;
-  size = 0;
-  if (!(sym->flags & BSF_SYNTHETIC))
-    size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
-  if (size == 0)
-    size = 1;
-  return size;
+  /* Do not return 0 for the function's size.  */
+  return size ? size : 1;
+}
+
+/* Set to non-zero to enable some debug messages.  */
+#define DEBUG_SECONDARY_RELOCS	 0
+
+/* An internal-to-the-bfd-library only section type
+   used to indicate a cached secondary reloc section.  */
+#define SHT_SECONDARY_RELOC	 (SHT_LOOS + SHT_RELA)
+
+/* Create a BFD section to hold a secondary reloc section.  */
+
+bool
+_bfd_elf_init_secondary_reloc_section (bfd * abfd,
+				       Elf_Internal_Shdr *hdr,
+				       const char * name,
+				       unsigned int shindex)
+{
+  /* We only support RELA secondary relocs.  */
+  if (hdr->sh_type != SHT_RELA)
+    return false;
+
+#if DEBUG_SECONDARY_RELOCS
+  fprintf (stderr, "secondary reloc section %s encountered\n", name);
+#endif
+  hdr->sh_type = SHT_SECONDARY_RELOC;
+  return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
+}
+
+/* Read in any secondary relocs associated with SEC.  */
+
+bool
+_bfd_elf_slurp_secondary_reloc_section (bfd *       abfd,
+					asection *  sec,
+					asymbol **  symbols,
+					bool dynamic)
+{
+  const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
+  asection * relsec;
+  bool result = true;
+  bfd_vma (*r_sym) (bfd_vma);
+  ufile_ptr filesize;
+
+#if BFD_DEFAULT_TARGET_SIZE > 32
+  if (bfd_arch_bits_per_address (abfd) != 32)
+    r_sym = elf64_r_sym;
+  else
+#endif
+    r_sym = elf32_r_sym;
+
+  if (!elf_section_data (sec)->has_secondary_relocs)
+    return true;
+
+  /* Discover if there are any secondary reloc sections
+     associated with SEC.  */
+  filesize = bfd_get_file_size (abfd);
+  for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
+    {
+      Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr;
+
+      if (hdr->sh_type == SHT_SECONDARY_RELOC
+	  && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx
+	  && (hdr->sh_entsize == ebd->s->sizeof_rel
+	      || hdr->sh_entsize == ebd->s->sizeof_rela))
+	{
+	  bfd_byte * native_relocs;
+	  bfd_byte * native_reloc;
+	  arelent * internal_relocs;
+	  arelent * internal_reloc;
+	  size_t i;
+	  unsigned int entsize;
+	  unsigned int symcount;
+	  bfd_size_type reloc_count;
+	  size_t amt;
+
+	  if (ebd->elf_info_to_howto == NULL)
+	    return false;
+
+#if DEBUG_SECONDARY_RELOCS
+	  fprintf (stderr, "read secondary relocs for %s from %s\n",
+		   sec->name, relsec->name);
+#endif
+	  entsize = hdr->sh_entsize;
+
+	  if (filesize != 0
+	      && ((ufile_ptr) hdr->sh_offset > filesize
+		  || hdr->sh_size > filesize - hdr->sh_offset))
+	    {
+	      bfd_set_error (bfd_error_file_truncated);
+	      result = false;
+	      continue;
+	    }
+
+	  native_relocs = bfd_malloc (hdr->sh_size);
+	  if (native_relocs == NULL)
+	    {
+	      result = false;
+	      continue;
+	    }
+
+	  reloc_count = NUM_SHDR_ENTRIES (hdr);
+	  if (_bfd_mul_overflow (reloc_count, sizeof (arelent), & amt))
+	    {
+	      free (native_relocs);
+	      bfd_set_error (bfd_error_file_too_big);
+	      result = false;
+	      continue;
+	    }
+
+	  internal_relocs = (arelent *) bfd_alloc (abfd, amt);
+	  if (internal_relocs == NULL)
+	    {
+	      free (native_relocs);
+	      result = false;
+	      continue;
+	    }
+
+	  if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
+	      || bfd_read (native_relocs, hdr->sh_size, abfd) != hdr->sh_size)
+	    {
+	      free (native_relocs);
+	      /* The internal_relocs will be freed when
+		 the memory for the bfd is released.  */
+	      result = false;
+	      continue;
+	    }
+
+	  if (dynamic)
+	    symcount = bfd_get_dynamic_symcount (abfd);
+	  else
+	    symcount = bfd_get_symcount (abfd);
+
+	  for (i = 0, internal_reloc = internal_relocs,
+		 native_reloc = native_relocs;
+	       i < reloc_count;
+	       i++, internal_reloc++, native_reloc += entsize)
+	    {
+	      bool res;
+	      Elf_Internal_Rela rela;
+
+	      if (entsize == ebd->s->sizeof_rel)
+		ebd->s->swap_reloc_in (abfd, native_reloc, & rela);
+	      else /* entsize == ebd->s->sizeof_rela */
+		ebd->s->swap_reloca_in (abfd, native_reloc, & rela);
+
+	      /* The address of an ELF reloc is section relative for an object
+		 file, and absolute for an executable file or shared library.
+		 The address of a normal BFD reloc is always section relative,
+		 and the address of a dynamic reloc is absolute..  */
+	      if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
+		internal_reloc->address = rela.r_offset;
+	      else
+		internal_reloc->address = rela.r_offset - sec->vma;
+
+	      if (r_sym (rela.r_info) == STN_UNDEF)
+		{
+		  /* FIXME: This and the error case below mean that we
+		     have a symbol on relocs that is not elf_symbol_type.  */
+		  internal_reloc->sym_ptr_ptr =
+		    bfd_abs_section_ptr->symbol_ptr_ptr;
+		}
+	      else if (r_sym (rela.r_info) > symcount)
+		{
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB(%pA): relocation %zu has invalid symbol index %lu"),
+		     abfd, sec, i, (long) r_sym (rela.r_info));
+		  bfd_set_error (bfd_error_bad_value);
+		  internal_reloc->sym_ptr_ptr =
+		    bfd_abs_section_ptr->symbol_ptr_ptr;
+		  result = false;
+		}
+	      else
+		{
+		  asymbol **ps;
+
+		  ps = symbols + r_sym (rela.r_info) - 1;
+		  internal_reloc->sym_ptr_ptr = ps;
+		  /* Make sure that this symbol is not removed by strip.  */
+		  (*ps)->flags |= BSF_KEEP;
+		}
+
+	      internal_reloc->addend = rela.r_addend;
+
+	      res = ebd->elf_info_to_howto (abfd, internal_reloc, & rela);
+	      if (! res || internal_reloc->howto == NULL)
+		{
+#if DEBUG_SECONDARY_RELOCS
+		  fprintf (stderr,
+			   "there is no howto associated with reloc %lx\n",
+			   rela.r_info);
+#endif
+		  result = false;
+		}
+	    }
+
+	  free (native_relocs);
+	  /* Store the internal relocs.  */
+	  elf_section_data (relsec)->sec_info = internal_relocs;
+	}
+    }
+
+  return result;
+}
+
+/* Set the ELF section header fields of an output secondary reloc section.  */
+
+bool
+_bfd_elf_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
+				      bfd *obfd ATTRIBUTE_UNUSED,
+				      const Elf_Internal_Shdr *isection,
+				      Elf_Internal_Shdr *osection)
+{
+  asection * isec;
+  asection * osec;
+  struct bfd_elf_section_data * esd;
+
+  if (isection == NULL)
+    return false;
+
+  if (isection->sh_type != SHT_SECONDARY_RELOC)
+    return true;
+
+  isec = isection->bfd_section;
+  if (isec == NULL)
+    return false;
+
+  osec = osection->bfd_section;
+  if (osec == NULL)
+    return false;
+
+  esd = elf_section_data (osec);
+  BFD_ASSERT (esd->sec_info == NULL);
+  esd->sec_info = elf_section_data (isec)->sec_info;
+  osection->sh_type = SHT_RELA;
+  osection->sh_link = elf_onesymtab (obfd);
+  if (osection->sh_link == 0)
+    {
+      /* There is no symbol table - we are hosed...  */
+      _bfd_error_handler
+	/* xgettext:c-format */
+	(_("%pB(%pA): link section cannot be set"
+	   " because the output file does not have a symbol table"),
+	obfd, osec);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+
+  /* Find the output section that corresponds to the isection's
+     sh_info link.  */
+  if (isection->sh_info == 0
+      || isection->sh_info >= elf_numsections (ibfd))
+    {
+      _bfd_error_handler
+	/* xgettext:c-format */
+	(_("%pB(%pA): info section index is invalid"),
+	obfd, osec);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+
+  isection = elf_elfsections (ibfd)[isection->sh_info];
+
+  if (isection == NULL
+      || isection->bfd_section == NULL
+      || isection->bfd_section->output_section == NULL)
+    {
+      _bfd_error_handler
+	/* xgettext:c-format */
+	(_("%pB(%pA): info section index cannot be set"
+	   " because the section is not in the output"),
+	obfd, osec);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+
+  esd = elf_section_data (isection->bfd_section->output_section);
+  BFD_ASSERT (esd != NULL);
+  osection->sh_info = esd->this_idx;
+  esd->has_secondary_relocs = true;
+#if DEBUG_SECONDARY_RELOCS
+  fprintf (stderr, "update header of %s, sh_link = %u, sh_info = %u\n",
+	   osec->name, osection->sh_link, osection->sh_info);
+  fprintf (stderr, "mark section %s as having secondary relocs\n",
+	   bfd_section_name (isection->bfd_section->output_section));
+#endif
+
+  return true;
+}
+
+/* Write out a secondary reloc section.
+
+   FIXME: Currently this function can result in a serious performance penalty
+   for files with secondary relocs and lots of sections.  The proper way to
+   fix this is for _bfd_elf_copy_special_section_fields() to chain secondary
+   relocs together and then to have this function just walk that chain.  */
+
+bool
+_bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
+{
+  const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
+  bfd_vma addr_offset;
+  asection * relsec;
+  bfd_vma (*r_info) (bfd_vma, bfd_vma);
+  bool result = true;
+
+  if (sec == NULL)
+    return false;
+
+#if BFD_DEFAULT_TARGET_SIZE > 32
+  if (bfd_arch_bits_per_address (abfd) != 32)
+    r_info = elf64_r_info;
+  else
+#endif
+    r_info = elf32_r_info;
+
+  /* The address of an ELF reloc is section relative for an object
+     file, and absolute for an executable file or shared library.
+     The address of a BFD reloc is always section relative.  */
+  addr_offset = 0;
+  if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
+    addr_offset = sec->vma;
+
+  /* Discover if there are any secondary reloc sections
+     associated with SEC.  */
+  for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
+    {
+      const struct bfd_elf_section_data * const esd = elf_section_data (relsec);
+      Elf_Internal_Shdr * const hdr = (Elf_Internal_Shdr *) & esd->this_hdr;
+
+      if (hdr->sh_type == SHT_RELA
+	  && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
+	{
+	  asymbol *    last_sym;
+	  int          last_sym_idx;
+	  size_t       reloc_count;
+	  size_t       idx;
+	  bfd_size_type entsize;
+	  arelent *    src_irel;
+	  bfd_byte *   dst_rela;
+
+	  if (hdr->contents != NULL)
+	    {
+	      _bfd_error_handler
+		/* xgettext:c-format */
+		(_("%pB(%pA): error: secondary reloc section processed twice"),
+		 abfd, relsec);
+	      bfd_set_error (bfd_error_bad_value);
+	      result = false;
+	      continue;
+	    }
+
+	  entsize = hdr->sh_entsize;
+	  if (entsize == 0)
+	    {
+	      _bfd_error_handler
+		/* xgettext:c-format */
+		(_("%pB(%pA): error: secondary reloc section"
+		   " has zero sized entries"),
+		 abfd, relsec);
+	      bfd_set_error (bfd_error_bad_value);
+	      result = false;
+	      continue;
+	    }
+	  else if (entsize != ebd->s->sizeof_rel
+		   && entsize != ebd->s->sizeof_rela)
+	    {
+	      _bfd_error_handler
+		/* xgettext:c-format */
+		(_("%pB(%pA): error: secondary reloc section"
+		   " has non-standard sized entries"),
+		 abfd, relsec);
+	      bfd_set_error (bfd_error_bad_value);
+	      result = false;
+	      continue;
+	    }
+
+	  reloc_count = hdr->sh_size / entsize;
+	  hdr->sh_size = entsize * reloc_count;
+	  if (reloc_count == 0)
+	    {
+	      _bfd_error_handler
+		/* xgettext:c-format */
+		(_("%pB(%pA): error: secondary reloc section is empty!"),
+		 abfd, relsec);
+	      bfd_set_error (bfd_error_bad_value);
+	      result = false;
+	      continue;
+	    }
+
+	  hdr->contents = bfd_alloc (abfd, hdr->sh_size);
+	  if (hdr->contents == NULL)
+	    continue;
+
+#if DEBUG_SECONDARY_RELOCS
+	  fprintf (stderr, "write %u secondary relocs for %s from %s\n",
+		   reloc_count, sec->name, relsec->name);
+#endif
+	  last_sym = NULL;
+	  last_sym_idx = 0;
+	  dst_rela = hdr->contents;
+	  src_irel = (arelent *) esd->sec_info;
+	  if (src_irel == NULL)
+	    {
+	      _bfd_error_handler
+		/* xgettext:c-format */
+		(_("%pB(%pA): error: internal relocs missing"
+		   " for secondary reloc section"),
+		 abfd, relsec);
+	      bfd_set_error (bfd_error_bad_value);
+	      result = false;
+	      continue;
+	    }
+
+	  for (idx = 0; idx < reloc_count; idx++, dst_rela += entsize)
+	    {
+	      Elf_Internal_Rela src_rela;
+	      arelent *ptr;
+	      asymbol *sym;
+	      int n;
+
+	      ptr = src_irel + idx;
+	      if (ptr == NULL)
+		{
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB(%pA): error: reloc table entry %zu is empty"),
+		     abfd, relsec, idx);
+		  bfd_set_error (bfd_error_bad_value);
+		  result = false;
+		  break;
+		}
+
+	      if (ptr->sym_ptr_ptr == NULL)
+		{
+		  /* FIXME: Is this an error ? */
+		  n = 0;
+		}
+	      else
+		{
+		  sym = *ptr->sym_ptr_ptr;
+
+		  if (sym == last_sym)
+		    n = last_sym_idx;
+		  else
+		    {
+		      n = _bfd_elf_symbol_from_bfd_symbol (abfd, & sym);
+		      if (n < 0)
+			{
+			  _bfd_error_handler
+			    /* xgettext:c-format */
+			    (_("%pB(%pA): error: secondary reloc %zu"
+			       " references a missing symbol"),
+			     abfd, relsec, idx);
+			  bfd_set_error (bfd_error_bad_value);
+			  result = false;
+			  n = 0;
+			}
+
+		      last_sym = sym;
+		      last_sym_idx = n;
+		    }
+
+		  if (sym->the_bfd != NULL
+		      && sym->the_bfd->xvec != abfd->xvec
+		      && ! _bfd_elf_validate_reloc (abfd, ptr))
+		    {
+		      _bfd_error_handler
+			/* xgettext:c-format */
+			(_("%pB(%pA): error: secondary reloc %zu"
+			   " references a deleted symbol"),
+			 abfd, relsec, idx);
+		      bfd_set_error (bfd_error_bad_value);
+		      result = false;
+		      n = 0;
+		    }
+		}
+
+	      src_rela.r_offset = ptr->address + addr_offset;
+	      if (ptr->howto == NULL)
+		{
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB(%pA): error: secondary reloc %zu"
+		       " is of an unknown type"),
+		     abfd, relsec, idx);
+		  bfd_set_error (bfd_error_bad_value);
+		  result = false;
+		  src_rela.r_info = r_info (0, 0);
+		}
+	      else
+		src_rela.r_info = r_info (n, ptr->howto->type);
+	      src_rela.r_addend = ptr->addend;
+
+	      if (entsize == ebd->s->sizeof_rel)
+		ebd->s->swap_reloc_out (abfd, &src_rela, dst_rela);
+	      else /* entsize == ebd->s->sizeof_rela */
+		ebd->s->swap_reloca_out (abfd, &src_rela, dst_rela);
+	    }
+	}
+    }
+
+  return result;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfcode.h ./bfd/elfcode.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfcode.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfcode.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF executable support for BFD.
-   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+   Copyright (C) 1991-2024 Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support, from information published
    in "UNIX System V Release 4, Programmers Guide: ANSI C and
@@ -170,7 +170,7 @@ static void elf_debug_file (Elf_Internal
 /* Translate an ELF symbol in external format into an ELF symbol in internal
    format.  */
 
-bfd_boolean
+bool
 elf_swap_symbol_in (bfd *abfd,
 		    const void *psrc,
 		    const void *pshn,
@@ -192,13 +192,13 @@ elf_swap_symbol_in (bfd *abfd,
   if (dst->st_shndx == (SHN_XINDEX & 0xffff))
     {
       if (shndx == NULL)
-	return FALSE;
+	return false;
       dst->st_shndx = H_GET_32 (abfd, shndx->est_shndx);
     }
   else if (dst->st_shndx >= (SHN_LORESERVE & 0xffff))
     dst->st_shndx += SHN_LORESERVE - (SHN_LORESERVE & 0xffff);
   dst->st_target_internal = 0;
-  return TRUE;
+  return true;
 }
 
 /* Translate an ELF symbol in internal format into an ELF symbol in external
@@ -266,6 +266,7 @@ elf_swap_ehdr_out (bfd *abfd,
 {
   unsigned int tmp;
   int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma;
+  bool no_section_header = (abfd->flags & BFD_NO_SECTION_HEADER) != 0;
   memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
   /* note that all elements of dst are *arrays of unsigned char* already...  */
   H_PUT_16 (abfd, src->e_type, dst->e_type);
@@ -276,7 +277,10 @@ elf_swap_ehdr_out (bfd *abfd,
   else
     H_PUT_WORD (abfd, src->e_entry, dst->e_entry);
   H_PUT_WORD (abfd, src->e_phoff, dst->e_phoff);
-  H_PUT_WORD (abfd, src->e_shoff, dst->e_shoff);
+  if (no_section_header)
+    H_PUT_WORD (abfd, 0, dst->e_shoff);
+  else
+    H_PUT_WORD (abfd, src->e_shoff, dst->e_shoff);
   H_PUT_32 (abfd, src->e_flags, dst->e_flags);
   H_PUT_16 (abfd, src->e_ehsize, dst->e_ehsize);
   H_PUT_16 (abfd, src->e_phentsize, dst->e_phentsize);
@@ -284,15 +288,24 @@ elf_swap_ehdr_out (bfd *abfd,
   if (tmp > PN_XNUM)
     tmp = PN_XNUM;
   H_PUT_16 (abfd, tmp, dst->e_phnum);
-  H_PUT_16 (abfd, src->e_shentsize, dst->e_shentsize);
-  tmp = src->e_shnum;
-  if (tmp >= (SHN_LORESERVE & 0xffff))
-    tmp = SHN_UNDEF;
-  H_PUT_16 (abfd, tmp, dst->e_shnum);
-  tmp = src->e_shstrndx;
-  if (tmp >= (SHN_LORESERVE & 0xffff))
-    tmp = SHN_XINDEX & 0xffff;
-  H_PUT_16 (abfd, tmp, dst->e_shstrndx);
+  if (no_section_header)
+    {
+      H_PUT_16 (abfd, 0, dst->e_shentsize);
+      H_PUT_16 (abfd, 0, dst->e_shnum);
+      H_PUT_16 (abfd, 0, dst->e_shstrndx);
+    }
+  else
+    {
+      H_PUT_16 (abfd, src->e_shentsize, dst->e_shentsize);
+      tmp = src->e_shnum;
+      if (tmp >= (SHN_LORESERVE & 0xffff))
+	tmp = SHN_UNDEF;
+      H_PUT_16 (abfd, tmp, dst->e_shnum);
+      tmp = src->e_shstrndx;
+      if (tmp >= (SHN_LORESERVE & 0xffff))
+	tmp = SHN_XINDEX & 0xffff;
+      H_PUT_16 (abfd, tmp, dst->e_shstrndx);
+    }
 }
 
 /* Translate an ELF section header table entry in external format into an
@@ -317,11 +330,20 @@ elf_swap_shdr_in (bfd *abfd,
   /* PR 23657.  Check for invalid section size, in sections with contents.
      Note - we do not set an error value here because the contents
      of this particular section might not be needed by the consumer.  */
-  if (dst->sh_type != SHT_NOBITS
-      && dst->sh_size > bfd_get_file_size (abfd))
-    _bfd_error_handler
-      (_("warning: %pB has a corrupt section with a size (%" BFD_VMA_FMT "x) larger than the file size"),
-       abfd, dst->sh_size);
+  if (dst->sh_type != SHT_NOBITS)
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+
+      if (filesize != 0
+	  && ((ufile_ptr) dst->sh_offset > filesize
+	      || dst->sh_size > filesize - dst->sh_offset)
+	  && !abfd->read_only)
+	{
+	  _bfd_error_handler (_("warning: %pB has a section "
+				"extending past end of file"), abfd);
+	  abfd->read_only = 1;
+	}
+    }
   dst->sh_link = H_GET_32 (abfd, src->sh_link);
   dst->sh_info = H_GET_32 (abfd, src->sh_info);
   dst->sh_addralign = H_GET_WORD (abfd, src->sh_addralign);
@@ -475,7 +497,7 @@ elf_swap_dyn_out (bfd *abfd,
    First we validate the file by reading in the ELF header and checking
    the magic number.  */
 
-static inline bfd_boolean
+static inline bool
 elf_file_p (Elf_External_Ehdr *x_ehdrp)
 {
   return ((x_ehdrp->e_ident[EI_MAG0] == ELFMAG0)
@@ -492,7 +514,7 @@ elf_file_p (Elf_External_Ehdr *x_ehdrp)
    any side effects in ABFD, or any data it points to (like tdata), if the
    file does not match the target vector.  */
 
-const bfd_target *
+bfd_cleanup
 elf_object_p (bfd *abfd)
 {
   Elf_External_Ehdr x_ehdr;	/* Elf file header, external form */
@@ -507,7 +529,7 @@ elf_object_p (bfd *abfd)
 
   /* Read in the ELF header in external format.  */
 
-  if (bfd_bread (&x_ehdr, sizeof (x_ehdr), abfd) != sizeof (x_ehdr))
+  if (bfd_read (&x_ehdr, sizeof (x_ehdr), abfd) != sizeof (x_ehdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	goto got_wrong_format_error;
@@ -563,7 +585,7 @@ elf_object_p (bfd *abfd)
 
   /* If this is a relocatable file and there is no section header
      table, then we're hosed.  */
-  if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_type == ET_REL)
+  if (i_ehdrp->e_shoff < sizeof (x_ehdr) && i_ehdrp->e_type == ET_REL)
     goto got_wrong_format_error;
 
   /* As a simple sanity check, verify that what BFD thinks is the
@@ -573,7 +595,7 @@ elf_object_p (bfd *abfd)
     goto got_wrong_format_error;
 
   /* Further sanity check.  */
-  if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_shnum != 0)
+  if (i_ehdrp->e_shoff < sizeof (x_ehdr) && i_ehdrp->e_shnum != 0)
     goto got_wrong_format_error;
 
   ebd = get_elf_backend_data (abfd);
@@ -610,7 +632,7 @@ elf_object_p (bfd *abfd)
       && ebd->elf_osabi != ELFOSABI_NONE)
     goto got_wrong_format_error;
 
-  if (i_ehdrp->e_shoff != 0)
+  if (i_ehdrp->e_shoff >= sizeof (x_ehdr))
     {
       file_ptr where = (file_ptr) i_ehdrp->e_shoff;
 
@@ -620,7 +642,7 @@ elf_object_p (bfd *abfd)
 
       /* Read the first section header at index 0, and convert to internal
 	 form.  */
-      if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
+      if (bfd_read (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
 	goto got_no_match;
       elf_swap_shdr_in (abfd, &x_shdr, &i_shdr);
 
@@ -666,7 +688,7 @@ elf_object_p (bfd *abfd)
 
 	  if (bfd_seek (abfd, where, SEEK_SET) != 0)
 	    goto got_no_match;
-	  if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
+	  if (bfd_read (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
 	    goto got_no_match;
 
 	  /* Back to where we were.  */
@@ -682,21 +704,23 @@ elf_object_p (bfd *abfd)
     {
       Elf_Internal_Shdr *shdrp;
       unsigned int num_sec;
+      size_t amt;
 
-#ifndef BFD64
-      if (i_ehdrp->e_shnum > ((bfd_size_type) -1) / sizeof (*i_shdrp))
+      if (_bfd_mul_overflow (i_ehdrp->e_shnum, sizeof (*i_shdrp), &amt))
 	goto got_wrong_format_error;
-#endif
-      i_shdrp = (Elf_Internal_Shdr *) bfd_alloc2 (abfd, i_ehdrp->e_shnum,
-						  sizeof (*i_shdrp));
+      i_shdrp = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt);
       if (!i_shdrp)
 	goto got_no_match;
       num_sec = i_ehdrp->e_shnum;
       elf_numsections (abfd) = num_sec;
-      elf_elfsections (abfd)
-	= (Elf_Internal_Shdr **) bfd_alloc2 (abfd, num_sec, sizeof (i_shdrp));
+      if (_bfd_mul_overflow (num_sec, sizeof (i_shdrp), &amt))
+	goto got_wrong_format_error;
+      elf_elfsections (abfd) = (Elf_Internal_Shdr **) bfd_alloc (abfd, amt);
       if (!elf_elfsections (abfd))
 	goto got_no_match;
+      elf_tdata (abfd)->being_created = bfd_zalloc (abfd, num_sec);
+      if (!elf_tdata (abfd)->being_created)
+	goto got_no_match;
 
       memcpy (i_shdrp, &i_shdr, sizeof (*i_shdrp));
       for (shdrp = i_shdrp, shindex = 0; shindex < num_sec; shindex++)
@@ -706,7 +730,7 @@ elf_object_p (bfd *abfd)
 	 to internal form.  */
       for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++)
 	{
-	  if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
+	  if (bfd_read (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
 	    goto got_no_match;
 	  elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
 
@@ -760,9 +784,12 @@ elf_object_p (bfd *abfd)
 	     So we are kind, and reset the string index value to 0
 	     so that at least some processing can be done.  */
 	  i_ehdrp->e_shstrndx = SHN_UNDEF;
-	  _bfd_error_handler
-	    (_("warning: %pB has a corrupt string table index - ignoring"),
-	     abfd);
+	  if (!abfd->read_only)
+	    {
+	      _bfd_error_handler
+		(_("warning: %pB has a corrupt string table index"), abfd);
+	      abfd->read_only = 1;
+	    }
 	}
     }
   else if (i_ehdrp->e_shstrndx != SHN_UNDEF)
@@ -775,35 +802,73 @@ elf_object_p (bfd *abfd)
     {
       Elf_Internal_Phdr *i_phdr;
       unsigned int i;
+      ufile_ptr filesize;
+      size_t amt;
 
-#ifndef BFD64
-      if (i_ehdrp->e_phnum > ((bfd_size_type) -1) / sizeof (*i_phdr))
-	goto got_wrong_format_error;
-#endif
       /* Check for a corrupt input file with an impossibly large number
 	 of program headers.  */
-      if (bfd_get_file_size (abfd) > 0
-	  && i_ehdrp->e_phnum > bfd_get_file_size (abfd))
-	goto got_no_match;
+      filesize = bfd_get_file_size (abfd);
+      if (filesize != 0
+	  && i_ehdrp->e_phnum > filesize / sizeof (Elf_External_Phdr))
+	goto got_wrong_format_error;
+      if (_bfd_mul_overflow (i_ehdrp->e_phnum, sizeof (*i_phdr), &amt))
+	goto got_wrong_format_error;
       elf_tdata (abfd)->phdr
-	= (Elf_Internal_Phdr *) bfd_alloc2 (abfd, i_ehdrp->e_phnum,
-					    sizeof (*i_phdr));
+	= (Elf_Internal_Phdr *) bfd_alloc (abfd, amt);
       if (elf_tdata (abfd)->phdr == NULL)
 	goto got_no_match;
-      if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_phoff, SEEK_SET) != 0)
+      if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0)
 	goto got_no_match;
+      bool eu_strip_broken_phdrs = false;
       i_phdr = elf_tdata (abfd)->phdr;
       for (i = 0; i < i_ehdrp->e_phnum; i++, i_phdr++)
 	{
 	  Elf_External_Phdr x_phdr;
 
-	  if (bfd_bread (&x_phdr, sizeof x_phdr, abfd) != sizeof x_phdr)
+	  if (bfd_read (&x_phdr, sizeof x_phdr, abfd) != sizeof x_phdr)
 	    goto got_no_match;
 	  elf_swap_phdr_in (abfd, &x_phdr, i_phdr);
+	  /* Too much code in BFD relies on alignment being a power of
+	     two, as required by the ELF spec.  */
+	  if (i_phdr->p_align != (i_phdr->p_align & -i_phdr->p_align))
+	    {
+	      i_phdr->p_align &= -i_phdr->p_align;
+	      if (!abfd->read_only)
+		{
+		  _bfd_error_handler (_("warning: %pB has a program header "
+					"with invalid alignment"), abfd);
+		  abfd->read_only = 1;
+		}
+	    }
+	  /* Detect eu-strip -f debug files, which have program
+	     headers that describe the original file.  */
+	  if (i_phdr->p_filesz != 0
+	      && (i_phdr->p_filesz > filesize
+		  || i_phdr->p_offset > filesize - i_phdr->p_filesz))
+	    eu_strip_broken_phdrs = true;
+	}
+      if (!eu_strip_broken_phdrs
+	  && i_ehdrp->e_shoff == 0
+	  && i_ehdrp->e_shstrndx == 0)
+	{
+	  /* Try to reconstruct dynamic symbol table from PT_DYNAMIC
+	     segment if there is no section header.  */
+	  i_phdr = elf_tdata (abfd)->phdr;
+	  for (i = 0; i < i_ehdrp->e_phnum; i++, i_phdr++)
+	    if (i_phdr->p_type == PT_DYNAMIC)
+	      {
+		if (i_phdr->p_filesz != 0
+		    && !_bfd_elf_get_dynamic_symbols (abfd, i_phdr,
+						      elf_tdata (abfd)->phdr,
+						      i_ehdrp->e_phnum,
+						      filesize))
+		  goto got_no_match;
+		break;
+	      }
 	}
     }
 
-  if (i_ehdrp->e_shstrndx != 0 && i_ehdrp->e_shoff != 0)
+  if (i_ehdrp->e_shstrndx != 0 && i_ehdrp->e_shoff >= sizeof (x_ehdr))
     {
       unsigned int num_sec;
 
@@ -849,7 +914,7 @@ elf_object_p (bfd *abfd)
 	    s->flags |= SEC_DEBUGGING;
 	}
     }
-  return target;
+  return _bfd_no_cleanup;
 
  got_wrong_format_error:
   bfd_set_error (bfd_error_wrong_format);
@@ -865,7 +930,8 @@ elf_object_p (bfd *abfd)
 void
 elf_write_relocs (bfd *abfd, asection *sec, void *data)
 {
-  bfd_boolean *failedp = (bfd_boolean *) data;
+  const struct elf_backend_data * const bed = get_elf_backend_data (abfd);
+  bool *failedp = (bool *) data;
   Elf_Internal_Shdr *rela_hdr;
   bfd_vma addr_offset;
   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
@@ -874,6 +940,7 @@ elf_write_relocs (bfd *abfd, asection *s
   unsigned int idx;
   asymbol *last_sym;
   int last_sym_idx;
+  size_t amt;
 
   /* If we have already failed, don't do anything.  */
   if (*failedp)
@@ -900,11 +967,11 @@ elf_write_relocs (bfd *abfd, asection *s
     rela_hdr = elf_section_data (sec)->rel.hdr;
 
   rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count;
-  rela_hdr->contents = (unsigned char *) bfd_alloc2 (abfd, sec->reloc_count,
-						     rela_hdr->sh_entsize);
-  if (rela_hdr->contents == NULL)
+  if (_bfd_mul_overflow (sec->reloc_count, rela_hdr->sh_entsize, &amt)
+      || (rela_hdr->contents = bfd_alloc (abfd, amt)) == NULL)
     {
-      *failedp = TRUE;
+      bfd_set_error (bfd_error_no_memory);
+      *failedp = true;
       return;
     }
 
@@ -947,7 +1014,13 @@ elf_write_relocs (bfd *abfd, asection *s
       sym = *ptr->sym_ptr_ptr;
       if (sym == last_sym)
 	n = last_sym_idx;
-      else if (bfd_is_abs_section (sym->section) && sym->value == 0)
+      /* If the relocation is against an absolute symbol whoes value is
+	 zero, then the symbol can be dropped, simplifying the reloc.
+	 PR 31106: Except for complex relocations where the symbols
+	 itself might be significant.  */
+      else if (bfd_is_abs_section (sym->section)
+	       && sym->value == 0
+	       && (sym->flags & BSF_RELC) == 0)
 	n = STN_UNDEF;
       else
 	{
@@ -955,7 +1028,7 @@ elf_write_relocs (bfd *abfd, asection *s
 	  n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
 	  if (n < 0)
 	    {
-	      *failedp = TRUE;
+	      *failedp = true;
 	      return;
 	    }
 	  last_sym_idx = n;
@@ -965,21 +1038,42 @@ elf_write_relocs (bfd *abfd, asection *s
 	  && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
 	  && ! _bfd_elf_validate_reloc (abfd, ptr))
 	{
-	  *failedp = TRUE;
+	  *failedp = true;
 	  return;
 	}
 
       if (ptr->howto == NULL)
 	{
-	  *failedp = TRUE;
+	  *failedp = true;
 	  return;
 	}
 
+#if defined(BFD64) && ARCH_SIZE == 32
+      if (rela_hdr->sh_type == SHT_RELA
+	  && ptr->howto->bitsize > 32
+	  && ptr->addend - INT32_MIN > UINT32_MAX)
+	{
+	  _bfd_error_handler (_("%pB: %pA+%" PRIx64 ": "
+				"relocation addend %" PRIx64 " too large"),
+			      abfd, sec, (uint64_t) ptr->address,
+			      (uint64_t) ptr->addend);
+	  *failedp = true;
+	  bfd_set_error (bfd_error_bad_value);
+	}
+#endif
+
       src_rela.r_offset = ptr->address + addr_offset;
       src_rela.r_info = ELF_R_INFO (n, ptr->howto->type);
       src_rela.r_addend = ptr->addend;
       (*swap_out) (abfd, &src_rela, dst_rela);
     }
+
+  if (elf_section_data (sec)->has_secondary_relocs
+      && !bed->write_secondary_relocs (abfd, sec))
+    {
+      *failedp = true;
+      return;
+    }
 }
 
 /* Write out the program headers.  */
@@ -994,7 +1088,7 @@ elf_write_out_phdrs (bfd *abfd,
       Elf_External_Phdr extphdr;
 
       elf_swap_phdr_out (abfd, phdr, &extphdr);
-      if (bfd_bwrite (&extphdr, sizeof (Elf_External_Phdr), abfd)
+      if (bfd_write (&extphdr, sizeof (Elf_External_Phdr), abfd)
 	  != sizeof (Elf_External_Phdr))
 	return -1;
       phdr++;
@@ -1004,7 +1098,7 @@ elf_write_out_phdrs (bfd *abfd,
 
 /* Write out the section headers and the ELF file header.  */
 
-bfd_boolean
+bool
 elf_write_shdrs_and_ehdr (bfd *abfd)
 {
   Elf_External_Ehdr x_ehdr;	/* Elf file header, external form */
@@ -1012,7 +1106,7 @@ elf_write_shdrs_and_ehdr (bfd *abfd)
   Elf_External_Shdr *x_shdrp;	/* Section header table, external form */
   Elf_Internal_Shdr **i_shdrp;	/* Section header table, internal form */
   unsigned int count;
-  bfd_size_type amt;
+  size_t amt;
 
   i_ehdrp = elf_elfheader (abfd);
   i_shdrp = elf_elfsections (abfd);
@@ -1024,9 +1118,12 @@ elf_write_shdrs_and_ehdr (bfd *abfd)
 #endif
   elf_swap_ehdr_out (abfd, i_ehdrp, &x_ehdr);
   amt = sizeof (x_ehdr);
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_bwrite (&x_ehdr, amt, abfd) != amt)
-    return FALSE;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_write (&x_ehdr, amt, abfd) != amt)
+    return false;
+
+  if ((abfd->flags & BFD_NO_SECTION_HEADER) != 0)
+    return true;
 
   /* Some fields in the first section header handle overflow of ehdr
      fields.  */
@@ -1038,10 +1135,14 @@ elf_write_shdrs_and_ehdr (bfd *abfd)
     i_shdrp[0]->sh_link = i_ehdrp->e_shstrndx;
 
   /* at this point we've concocted all the ELF sections...  */
-  x_shdrp = (Elf_External_Shdr *) bfd_alloc2 (abfd, i_ehdrp->e_shnum,
-					      sizeof (*x_shdrp));
+  if (_bfd_mul_overflow (i_ehdrp->e_shnum, sizeof (*x_shdrp), &amt))
+    {
+      bfd_set_error (bfd_error_no_memory);
+      return false;
+    }
+  x_shdrp = (Elf_External_Shdr *) bfd_alloc (abfd, amt);
   if (!x_shdrp)
-    return FALSE;
+    return false;
 
   for (count = 0; count < i_ehdrp->e_shnum; i_shdrp++, count++)
     {
@@ -1051,16 +1152,16 @@ elf_write_shdrs_and_ehdr (bfd *abfd)
       elf_swap_shdr_out (abfd, *i_shdrp, x_shdrp + count);
     }
   amt = (bfd_size_type) i_ehdrp->e_shnum * sizeof (*x_shdrp);
-  if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, SEEK_SET) != 0
-      || bfd_bwrite (x_shdrp, amt, abfd) != amt)
-    return FALSE;
+  if (bfd_seek (abfd, i_ehdrp->e_shoff, SEEK_SET) != 0
+      || bfd_write (x_shdrp, amt, abfd) != amt)
+    return false;
 
   /* need to dump the string table too...  */
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 elf_checksum_contents (bfd *abfd,
 		       void (*process) (const void *, size_t, void *),
 		       void *arg)
@@ -1128,16 +1229,15 @@ elf_checksum_contents (bfd *abfd,
       if (contents != NULL)
 	{
 	  (*process) (contents, i_shdr.sh_size, arg);
-	  if (free_contents != NULL)
-	    free (free_contents);
+	  free (free_contents);
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 long
-elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic)
+elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bool dynamic)
 {
   Elf_Internal_Shdr *hdr;
   Elf_Internal_Shdr *verhdr;
@@ -1150,6 +1250,7 @@ elf_slurp_symbol_table (bfd *abfd, asymb
   Elf_External_Versym *xver;
   Elf_External_Versym *xverbuf = NULL;
   const struct elf_backend_data *ebd;
+  size_t amt;
 
   /* Read each raw ELF symbol, converting from external ELF form to
      internal ELF form, and then using the information to create a
@@ -1160,11 +1261,13 @@ elf_slurp_symbol_table (bfd *abfd, asymb
      symbols.  We actually use all the ELF symbols, so there will be no
      space left over at the end.  When we have all the symbols, we
      build the caller's pointer vector.  */
+  ebd = get_elf_backend_data (abfd);
 
   if (! dynamic)
     {
       hdr = &elf_tdata (abfd)->symtab_hdr;
       verhdr = NULL;
+      symcount = hdr->sh_size / ebd->s->sizeof_sym;
     }
   else
     {
@@ -1176,26 +1279,37 @@ elf_slurp_symbol_table (bfd *abfd, asymb
       if ((elf_dynverdef (abfd) != 0
 	   && elf_tdata (abfd)->verdef == NULL)
 	  || (elf_dynverref (abfd) != 0
-	      && elf_tdata (abfd)->verref == NULL))
+	      && elf_tdata (abfd)->verref == NULL)
+	  || elf_tdata (abfd)->dt_verdef != NULL
+	  || elf_tdata (abfd)->dt_verneed != NULL)
 	{
-	  if (!_bfd_elf_slurp_version_tables (abfd, FALSE))
+	  if (!_bfd_elf_slurp_version_tables (abfd, false))
 	    return -1;
 	}
+
+      symcount = elf_tdata (abfd)->dt_symtab_count;
     }
 
-  ebd = get_elf_backend_data (abfd);
-  symcount = hdr->sh_size / sizeof (Elf_External_Sym);
+  if (symcount == 0)
+    symcount = hdr->sh_size / sizeof (Elf_External_Sym);
+
   if (symcount == 0)
     sym = symbase = NULL;
   else
     {
+      size_t i;
+
       isymbuf = bfd_elf_get_elf_syms (abfd, hdr, symcount, 0,
 				      NULL, NULL, NULL);
       if (isymbuf == NULL)
 	return -1;
 
-      symbase = (elf_symbol_type *) bfd_zalloc2 (abfd, symcount,
-						 sizeof (elf_symbol_type));
+      if (_bfd_mul_overflow (symcount, sizeof (elf_symbol_type), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  goto error_return;
+	}
+      symbase = (elf_symbol_type *) bfd_zalloc (abfd, amt);
       if (symbase == (elf_symbol_type *) NULL)
 	goto error_return;
 
@@ -1220,13 +1334,10 @@ elf_slurp_symbol_table (bfd *abfd, asymb
 	{
 	  if (bfd_seek (abfd, verhdr->sh_offset, SEEK_SET) != 0)
 	    goto error_return;
-
-	  xverbuf = (Elf_External_Versym *) bfd_malloc (verhdr->sh_size);
+	  xverbuf = (Elf_External_Versym *)
+	    _bfd_malloc_and_read (abfd, verhdr->sh_size, verhdr->sh_size);
 	  if (xverbuf == NULL && verhdr->sh_size != 0)
 	    goto error_return;
-
-	  if (bfd_bread (xverbuf, verhdr->sh_size, abfd) != verhdr->sh_size)
-	    goto error_return;
 	}
 
       /* Skip first symbol, which is a null dummy.  */
@@ -1234,12 +1345,18 @@ elf_slurp_symbol_table (bfd *abfd, asymb
       if (xver != NULL)
 	++xver;
       isymend = isymbuf + symcount;
-      for (isym = isymbuf + 1, sym = symbase; isym < isymend; isym++, sym++)
+      for (isym = isymbuf + 1, sym = symbase, i = 1;
+	   isym < isymend;
+	   isym++, sym++, i++)
 	{
 	  memcpy (&sym->internal_elf_sym, isym, sizeof (Elf_Internal_Sym));
 
 	  sym->symbol.the_bfd = abfd;
-	  sym->symbol.name = bfd_elf_sym_name (abfd, hdr, isym, NULL);
+	  if (elf_use_dt_symtab_p (abfd))
+	    sym->symbol.name = (elf_tdata (abfd)->dt_strtab
+				+ isym->st_name);
+	  else
+	    sym->symbol.name = bfd_elf_sym_name (abfd, hdr, isym, NULL);
 	  sym->symbol.value = isym->st_value;
 
 	  if (isym->st_shndx == SHN_UNDEF)
@@ -1273,6 +1390,15 @@ elf_slurp_symbol_table (bfd *abfd, asymb
 		 moment) about the alignment.  */
 	      sym->symbol.value = isym->st_size;
 	    }
+	  else if (elf_use_dt_symtab_p (abfd))
+	    {
+	      asection *sec;
+	      sec = _bfd_elf_get_section_from_dynamic_symbol (abfd,
+							      isym);
+	      if (sec == NULL)
+		goto error_return;
+	      sym->symbol.section = sec;
+	    }
 	  else
 	    {
 	      sym->symbol.section
@@ -1281,7 +1407,10 @@ elf_slurp_symbol_table (bfd *abfd, asymb
 		{
 		  /* This symbol is in a section for which we did not
 		     create a BFD section.  Just use bfd_abs_section,
-		     although it is wrong.  FIXME.  */
+		     although it is wrong.  FIXME.  Note - there is
+		     code in elf.c:swap_out_syms that calls
+		     symbol_section_index() in the elf backend for
+		     cases like this.  */
 		  sym->symbol.section = bfd_abs_section_ptr;
 		}
 	    }
@@ -1311,7 +1440,13 @@ elf_slurp_symbol_table (bfd *abfd, asymb
 	  switch (ELF_ST_TYPE (isym->st_info))
 	    {
 	    case STT_SECTION:
-	      sym->symbol.flags |= BSF_SECTION_SYM | BSF_DEBUGGING;
+	      /* Mark the input section symbol as used since it may be
+	         used for relocation and section group.
+		 NB: BSF_SECTION_SYM_USED is ignored by linker and may
+		 be cleared by objcopy for non-relocatable inputs.  */
+	      sym->symbol.flags |= (BSF_SECTION_SYM
+				    | BSF_DEBUGGING
+				    | BSF_SECTION_SYM_USED);
 	      break;
 	    case STT_FILE:
 	      sym->symbol.flags |= BSF_FILE | BSF_DEBUGGING;
@@ -1344,7 +1479,10 @@ elf_slurp_symbol_table (bfd *abfd, asymb
 	  if (dynamic)
 	    sym->symbol.flags |= BSF_DYNAMIC;
 
-	  if (xver != NULL)
+	  if (elf_tdata (abfd)->dt_versym)
+	    sym->version = bfd_get_16 (abfd,
+				       elf_tdata (abfd)->dt_versym + 2 * i);
+	  else if (xver != NULL)
 	    {
 	      Elf_Internal_Versym iversym;
 
@@ -1381,16 +1519,16 @@ elf_slurp_symbol_table (bfd *abfd, asymb
       *symptrs = 0;		/* Final null pointer */
     }
 
-  if (xverbuf != NULL)
-    free (xverbuf);
-  if (isymbuf != NULL && hdr->contents != (unsigned char *) isymbuf)
+  free (xverbuf);
+  if (hdr->contents != (unsigned char *) isymbuf
+      && !elf_use_dt_symtab_p (abfd))
     free (isymbuf);
   return symcount;
 
-error_return:
-  if (xverbuf != NULL)
-    free (xverbuf);
-  if (isymbuf != NULL && hdr->contents != (unsigned char *) isymbuf)
+ error_return:
+  free (xverbuf);
+  if (hdr->contents != (unsigned char *) isymbuf
+      && !elf_use_dt_symtab_p (abfd))
     free (isymbuf);
   return -1;
 }
@@ -1398,14 +1536,14 @@ error_return:
 /* Read relocations for ASECT from REL_HDR.  There are RELOC_COUNT of
    them.  */
 
-static bfd_boolean
+static bool
 elf_slurp_reloc_table_from_section (bfd *abfd,
 				    asection *asect,
 				    Elf_Internal_Shdr *rel_hdr,
 				    bfd_size_type reloc_count,
 				    arelent *relents,
 				    asymbol **symbols,
-				    bfd_boolean dynamic)
+				    bool dynamic)
 {
   const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
   void *allocated = NULL;
@@ -1415,14 +1553,11 @@ elf_slurp_reloc_table_from_section (bfd
   int entsize;
   unsigned int symcount;
 
-  allocated = bfd_malloc (rel_hdr->sh_size);
+  if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
+    return false;
+  allocated = _bfd_malloc_and_read (abfd, rel_hdr->sh_size, rel_hdr->sh_size);
   if (allocated == NULL)
-    goto error_return;
-
-  if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0
-      || (bfd_bread (allocated, rel_hdr->sh_size, abfd)
-	  != rel_hdr->sh_size))
-    goto error_return;
+    return false;
 
   native_relocs = (bfd_byte *) allocated;
 
@@ -1439,7 +1574,7 @@ elf_slurp_reloc_table_from_section (bfd
        i < reloc_count;
        i++, relent++, native_relocs += entsize)
     {
-      bfd_boolean res;
+      bool res;
       Elf_Internal_Rela rela;
 
       if (entsize == sizeof (Elf_External_Rela))
@@ -1491,39 +1626,39 @@ elf_slurp_reloc_table_from_section (bfd
 	goto error_return;
     }
 
-  if (allocated != NULL)
-    free (allocated);
-  return TRUE;
+  free (allocated);
+  return true;
 
  error_return:
-  if (allocated != NULL)
-    free (allocated);
-  return FALSE;
+  free (allocated);
+  return false;
 }
 
 /* Read in and swap the external relocs.  */
 
-bfd_boolean
+bool
 elf_slurp_reloc_table (bfd *abfd,
 		       asection *asect,
 		       asymbol **symbols,
-		       bfd_boolean dynamic)
+		       bool dynamic)
 {
+  const struct elf_backend_data * const bed = get_elf_backend_data (abfd);
   struct bfd_elf_section_data * const d = elf_section_data (asect);
   Elf_Internal_Shdr *rel_hdr;
   Elf_Internal_Shdr *rel_hdr2;
   bfd_size_type reloc_count;
   bfd_size_type reloc_count2;
   arelent *relents;
+  size_t amt;
 
   if (asect->relocation != NULL)
-    return TRUE;
+    return true;
 
   if (! dynamic)
     {
       if ((asect->flags & SEC_RELOC) == 0
 	  || asect->reloc_count == 0)
-	return TRUE;
+	return true;
 
       rel_hdr = d->rel.hdr;
       reloc_count = rel_hdr ? NUM_SHDR_ENTRIES (rel_hdr) : 0;
@@ -1532,7 +1667,7 @@ elf_slurp_reloc_table (bfd *abfd,
 
       /* PR 17512: file: 0b4f81b7.  */
       if (asect->reloc_count != reloc_count + reloc_count2)
-	return FALSE;
+	return false;
       BFD_ASSERT ((rel_hdr && asect->rel_filepos == rel_hdr->sh_offset)
 		  || (rel_hdr2 && asect->rel_filepos == rel_hdr2->sh_offset));
 
@@ -1544,7 +1679,7 @@ elf_slurp_reloc_table (bfd *abfd,
 	 dynamic symbol table, and in that case bfd_section_from_shdr
 	 in elf.c does not update the RELOC_COUNT.  */
       if (asect->size == 0)
-	return TRUE;
+	return true;
 
       rel_hdr = &d->this_hdr;
       reloc_count = NUM_SHDR_ENTRIES (rel_hdr);
@@ -1552,27 +1687,34 @@ elf_slurp_reloc_table (bfd *abfd,
       reloc_count2 = 0;
     }
 
-  relents = (arelent *) bfd_alloc2 (abfd, reloc_count + reloc_count2,
-				    sizeof (arelent));
+  if (_bfd_mul_overflow (reloc_count + reloc_count2, sizeof (arelent), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  relents = (arelent *) bfd_alloc (abfd, amt);
   if (relents == NULL)
-    return FALSE;
+    return false;
 
   if (rel_hdr
       && !elf_slurp_reloc_table_from_section (abfd, asect,
 					      rel_hdr, reloc_count,
 					      relents,
 					      symbols, dynamic))
-    return FALSE;
+    return false;
 
   if (rel_hdr2
       && !elf_slurp_reloc_table_from_section (abfd, asect,
 					      rel_hdr2, reloc_count2,
 					      relents + reloc_count,
 					      symbols, dynamic))
-    return FALSE;
+    return false;
+
+  if (!bed->slurp_secondary_relocs (abfd, asect, symbols, dynamic))
+    return false;
 
   asect->relocation = relents;
-  return TRUE;
+  return true;
 }
 
 #if DEBUG & 2
@@ -1635,10 +1777,11 @@ elf_debug_file (Elf_Internal_Ehdr *ehdrp
 bfd *
 NAME(_bfd_elf,bfd_from_remote_memory)
   (bfd *templ,
-   bfd_vma ehdr_vma,
-   bfd_size_type size,
-   bfd_vma *loadbasep,
+   bfd_vma ehdr_vma    /* Bytes.  */,
+   bfd_size_type size  /* Octets.  */,
+   bfd_vma *loadbasep  /* Bytes.  */,
    int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
+                          /* (Bytes  ,           , octets       ).  */
 {
   Elf_External_Ehdr x_ehdr;	/* Elf file header, external form */
   Elf_Internal_Ehdr i_ehdr;	/* Elf file header, internal form */
@@ -1651,8 +1794,9 @@ NAME(_bfd_elf,bfd_from_remote_memory)
   unsigned int i;
   bfd_vma high_offset;
   bfd_vma shdr_end;
-  bfd_vma loadbase;
-  char *filename;
+  bfd_vma loadbase;  /* Bytes.  */
+  size_t amt;
+  unsigned int opb = bfd_octets_per_byte (templ, NULL);
 
   /* Read in the ELF header in external format.  */
   err = target_read_memory (ehdr_vma, (bfd_byte *) &x_ehdr, sizeof x_ehdr);
@@ -1709,9 +1853,13 @@ NAME(_bfd_elf,bfd_from_remote_memory)
       return NULL;
     }
 
-  x_phdrs
-    = (Elf_External_Phdr *) bfd_malloc2 (i_ehdr.e_phnum,
-					 sizeof (*x_phdrs) + sizeof (*i_phdrs));
+  if (_bfd_mul_overflow (i_ehdr.e_phnum,
+			 sizeof (*x_phdrs) + sizeof (*i_phdrs), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return NULL;
+    }
+  x_phdrs = (Elf_External_Phdr *) bfd_malloc (amt);
   if (x_phdrs == NULL)
     return NULL;
   err = target_read_memory (ehdr_vma + i_ehdr.e_phoff, (bfd_byte *) x_phdrs,
@@ -1746,17 +1894,17 @@ NAME(_bfd_elf,bfd_from_remote_memory)
 	     header sits, then we can figure out the loadbase.  */
 	  if (first_phdr == NULL)
 	    {
-	      bfd_vma p_offset = i_phdrs[i].p_offset;
-	      bfd_vma p_vaddr = i_phdrs[i].p_vaddr;
+	      bfd_vma p_offset = i_phdrs[i].p_offset;  /* Octets.  */
+	      bfd_vma p_vaddr = i_phdrs[i].p_vaddr;    /* Octets.  */
 
 	      if (i_phdrs[i].p_align > 1)
 		{
-		  p_offset &= -i_phdrs[i].p_align;
-		  p_vaddr &= -i_phdrs[i].p_align;
+		  p_offset &= -(i_phdrs[i].p_align * opb);
+		  p_vaddr &= -(i_phdrs[i].p_align * opb);
 		}
 	      if (p_offset == 0)
 		{
-		  loadbase = ehdr_vma - p_vaddr;
+		  loadbase = ehdr_vma - p_vaddr / opb;
 		  first_phdr = &i_phdrs[i];
 		}
 	    }
@@ -1812,9 +1960,9 @@ NAME(_bfd_elf,bfd_from_remote_memory)
   for (i = 0; i < i_ehdr.e_phnum; ++i)
     if (i_phdrs[i].p_type == PT_LOAD)
       {
-	bfd_vma start = i_phdrs[i].p_offset;
-	bfd_vma end = start + i_phdrs[i].p_filesz;
-	bfd_vma vaddr = i_phdrs[i].p_vaddr;
+	bfd_vma start = i_phdrs[i].p_offset;         /* Octets.  */
+	bfd_vma end = start + i_phdrs[i].p_filesz;   /* Octets.  */
+	bfd_vma vaddr = i_phdrs[i].p_vaddr;          /* Octets.  */
 
 	/* Extend the beginning of the first pt_load to cover file
 	   header and program headers, if we proved earlier that its
@@ -1827,7 +1975,7 @@ NAME(_bfd_elf,bfd_from_remote_memory)
 	/* Extend the end of the last pt_load to cover section headers.  */
 	if (last_phdr == &i_phdrs[i])
 	  end = high_offset;
-	err = target_read_memory (loadbase + vaddr,
+	err = target_read_memory (loadbase + vaddr / opb,
 				  contents + start, end - start);
 	if (err)
 	  {
@@ -1860,22 +2008,14 @@ NAME(_bfd_elf,bfd_from_remote_memory)
       free (contents);
       return NULL;
     }
-  filename = bfd_strdup ("<in-memory>");
-  if (filename == NULL)
-    {
-      free (bim);
-      free (contents);
-      return NULL;
-    }
   nbfd = _bfd_new_bfd ();
-  if (nbfd == NULL)
+  if (nbfd == NULL
+      || !bfd_set_filename (nbfd, "<in-memory>"))
     {
-      free (filename);
       free (bim);
       free (contents);
       return NULL;
     }
-  nbfd->filename = filename;
   nbfd->xvec = templ->xvec;
   bim->size = high_offset;
   bim->buffer = contents;
@@ -1885,7 +2025,7 @@ NAME(_bfd_elf,bfd_from_remote_memory)
   nbfd->origin = 0;
   nbfd->direction = read_direction;
   nbfd->mtime = time (NULL);
-  nbfd->mtime_set = TRUE;
+  nbfd->mtime_set = true;
 
   if (loadbasep)
     *loadbasep = loadbase;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfcore.h ./bfd/elfcore.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfcore.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfcore.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF core file support for BFD.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -36,7 +36,7 @@ elf_core_file_pid (bfd *abfd)
   return elf_tdata (abfd)->core->pid;
 }
 
-bfd_boolean
+bool
 elf_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
 {
   char* corename;
@@ -46,7 +46,7 @@ elf_core_file_matches_executable_p (bfd
   if (core_bfd->xvec != exec_bfd->xvec)
     {
       bfd_set_error (bfd_error_system_call);
-      return FALSE;
+      return false;
     }
 
   /* If both BFDs have identical build-ids, then they match.  */
@@ -55,21 +55,21 @@ elf_core_file_matches_executable_p (bfd
       && core_bfd->build_id->size == exec_bfd->build_id->size
       && memcmp (core_bfd->build_id->data, exec_bfd->build_id->data,
 		 core_bfd->build_id->size) == 0)
-    return TRUE;
+    return true;
 
   /* See if the name in the corefile matches the executable name.  */
   corename = elf_tdata (core_bfd)->core->program;
   if (corename != NULL)
     {
-      const char* execname = strrchr (exec_bfd->filename, '/');
+      const char* execname = strrchr (bfd_get_filename (exec_bfd), '/');
 
-      execname = execname ? execname + 1 : exec_bfd->filename;
+      execname = execname ? execname + 1 : bfd_get_filename (exec_bfd);
 
       if (strcmp (execname, corename) != 0)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /*  Core files are simply standard ELF formatted files that partition
@@ -83,7 +83,7 @@ elf_core_file_matches_executable_p (bfd
     that allow standard bfd access to the general registers (.reg) and the
     floating point registers (.reg2).  */
 
-const bfd_target *
+bfd_cleanup
 elf_core_file_p (bfd *abfd)
 {
   Elf_External_Ehdr x_ehdr;	/* Elf file header, external form.  */
@@ -92,9 +92,10 @@ elf_core_file_p (bfd *abfd)
   unsigned int phindex;
   const struct elf_backend_data *ebd;
   bfd_size_type amt;
+  ufile_ptr filesize;
 
   /* Read in the ELF header in external format.  */
-  if (bfd_bread (&x_ehdr, sizeof (x_ehdr), abfd) != sizeof (x_ehdr))
+  if (bfd_read (&x_ehdr, sizeof (x_ehdr), abfd) != sizeof (x_ehdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	goto wrong;
@@ -148,37 +149,14 @@ elf_core_file_p (bfd *abfd)
       && (ebd->elf_machine_alt1 == 0
 	  || i_ehdrp->e_machine != ebd->elf_machine_alt1)
       && (ebd->elf_machine_alt2 == 0
-	  || i_ehdrp->e_machine != ebd->elf_machine_alt2))
-    {
-      const bfd_target * const *target_ptr;
-
-      if (ebd->elf_machine_code != EM_NONE)
-	goto wrong;
-
-      /* This is the generic ELF target.  Let it match any ELF target
-	 for which we do not have a specific backend.  */
-
-      for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++)
-	{
-	  const struct elf_backend_data *back;
+	  || i_ehdrp->e_machine != ebd->elf_machine_alt2)
+      && ebd->elf_machine_code != EM_NONE)
+    goto wrong;
 
-	  if ((*target_ptr)->flavour != bfd_target_elf_flavour)
-	    continue;
-	  back = xvec_get_elf_backend_data (*target_ptr);
-	  if (back->s->arch_size != ARCH_SIZE)
-	    continue;
-	  if (back->elf_machine_code == i_ehdrp->e_machine
-	      || (back->elf_machine_alt1 != 0
-		  && i_ehdrp->e_machine == back->elf_machine_alt1)
-	      || (back->elf_machine_alt2 != 0
-		  && i_ehdrp->e_machine == back->elf_machine_alt2))
-	    {
-	      /* target_ptr is an ELF backend which matches this
-		 object file, so reject the generic ELF target.  */
-	      goto wrong;
-	    }
-	}
-    }
+  if (ebd->elf_machine_code != EM_NONE
+      && i_ehdrp->e_ident[EI_OSABI] != ebd->elf_osabi
+      && ebd->elf_osabi != ELFOSABI_NONE)
+    goto wrong;
 
   /* If there is no program header, or the type is not a core file, then
      we are hosed.  */
@@ -198,13 +176,16 @@ elf_core_file_p (bfd *abfd)
       Elf_Internal_Shdr i_shdr;
       file_ptr where = (file_ptr) i_ehdrp->e_shoff;
 
+      if (i_ehdrp->e_shoff < sizeof (x_ehdr))
+	goto wrong;
+
       /* Seek to the section header table in the file.  */
       if (bfd_seek (abfd, where, SEEK_SET) != 0)
 	goto fail;
 
       /* Read the first section header at index 0, and convert to internal
 	 form.  */
-      if (bfd_bread (&x_shdr, sizeof (x_shdr), abfd) != sizeof (x_shdr))
+      if (bfd_read (&x_shdr, sizeof (x_shdr), abfd) != sizeof (x_shdr))
 	goto fail;
       elf_swap_shdr_in (abfd, &x_shdr, &i_shdr);
 
@@ -236,12 +217,12 @@ elf_core_file_p (bfd *abfd)
 
       if (bfd_seek (abfd, where, SEEK_SET) != 0)
 	goto fail;
-      if (bfd_bread (&x_phdr, sizeof (x_phdr), abfd) != sizeof (x_phdr))
+      if (bfd_read (&x_phdr, sizeof (x_phdr), abfd) != sizeof (x_phdr))
 	goto fail;
     }
 
   /* Move to the start of the program headers.  */
-  if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_phoff, SEEK_SET) != 0)
+  if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0)
     goto wrong;
 
   /* Allocate space for the program headers.  */
@@ -257,7 +238,7 @@ elf_core_file_p (bfd *abfd)
     {
       Elf_External_Phdr x_phdr;
 
-      if (bfd_bread (&x_phdr, sizeof (x_phdr), abfd) != sizeof (x_phdr))
+      if (bfd_read (&x_phdr, sizeof (x_phdr), abfd) != sizeof (x_phdr))
 	goto fail;
 
       elf_swap_phdr_in (abfd, &x_phdr, i_phdrp + phindex);
@@ -286,39 +267,31 @@ elf_core_file_p (bfd *abfd)
       goto fail;
 
   /* Check for core truncation.  */
-  {
-    bfd_size_type high = 0;
-    struct stat statbuf;
-    for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
-      {
-	Elf_Internal_Phdr *p = i_phdrp + phindex;
-	if (p->p_filesz)
-	  {
-	    bfd_size_type current = p->p_offset + p->p_filesz;
-	    if (high < current)
-	      high = current;
-	  }
-      }
-    if (bfd_stat (abfd, &statbuf) == 0)
-      {
-	if ((bfd_size_type) statbuf.st_size < high)
-	  {
-	    _bfd_error_handler
-	      /* xgettext:c-format */
-	      (_("warning: %pB is truncated: expected core file "
-		 "size >= %" PRIu64 ", found: %" PRIu64),
-	       abfd, (uint64_t) high, (uint64_t) statbuf.st_size);
-	  }
+  filesize = bfd_get_file_size (abfd);
+  if (filesize != 0)
+    {
+      for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
+	{
+	  Elf_Internal_Phdr *p = i_phdrp + phindex;
+	  if (p->p_filesz
+	      && (p->p_offset >= filesize
+		  || p->p_filesz > filesize - p->p_offset))
+	    {
+	      _bfd_error_handler (_("warning: %pB has a segment "
+				    "extending past end of file"), abfd);
+	      abfd->read_only = 1;
+	      break;
+	    }
       }
   }
 
   /* Save the entry point from the ELF header.  */
   abfd->start_address = i_ehdrp->e_entry;
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
-wrong:
+ wrong:
   bfd_set_error (bfd_error_wrong_format);
-fail:
+ fail:
   return NULL;
 }
 
@@ -326,7 +299,7 @@ fail:
    OFFSET is the file offset to a PT_LOAD segment that may contain
    the build-id note.  Returns TRUE upon success, FALSE otherwise.  */
 
-bfd_boolean
+bool
 NAME(_bfd_elf, core_find_build_id)
   (bfd *abfd,
    bfd_vma offset)
@@ -335,13 +308,14 @@ NAME(_bfd_elf, core_find_build_id)
   Elf_Internal_Ehdr i_ehdr;	/* Elf file header, internal form.   */
   Elf_Internal_Phdr *i_phdr;
   unsigned int i;
+  size_t amt;
 
   /* Seek to the position of the segment at OFFSET.  */
   if (bfd_seek (abfd, offset, SEEK_SET) != 0)
     goto fail;
 
   /* Read in the ELF header in external format.  */
-  if (bfd_bread (&x_ehdr, sizeof (x_ehdr), abfd) != sizeof (x_ehdr))
+  if (bfd_read (&x_ehdr, sizeof (x_ehdr), abfd) != sizeof (x_ehdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	goto wrong;
@@ -384,12 +358,16 @@ NAME(_bfd_elf, core_find_build_id)
     goto fail;
 
   /* Read in program headers.  */
-  i_phdr = (Elf_Internal_Phdr *) bfd_alloc2 (abfd, i_ehdr.e_phnum,
-					     sizeof (*i_phdr));
+  if (_bfd_mul_overflow (i_ehdr.e_phnum, sizeof (*i_phdr), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      goto fail;
+    }
+  i_phdr = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt);
   if (i_phdr == NULL)
     goto fail;
 
-  if (bfd_seek (abfd, (file_ptr) (offset + i_ehdr.e_phoff), SEEK_SET) != 0)
+  if (bfd_seek (abfd, offset + i_ehdr.e_phoff, SEEK_SET) != 0)
     goto fail;
 
   /* Read in program headers and parse notes.  */
@@ -397,7 +375,7 @@ NAME(_bfd_elf, core_find_build_id)
     {
       Elf_External_Phdr x_phdr;
 
-      if (bfd_bread (&x_phdr, sizeof (x_phdr), abfd) != sizeof (x_phdr))
+      if (bfd_read (&x_phdr, sizeof (x_phdr), abfd) != sizeof (x_phdr))
 	goto fail;
       elf_swap_phdr_in (abfd, &x_phdr, i_phdr);
 
@@ -405,8 +383,15 @@ NAME(_bfd_elf, core_find_build_id)
 	{
 	  elf_read_notes (abfd, offset + i_phdr->p_offset,
 			  i_phdr->p_filesz, i_phdr->p_align);
+
+	  /* Make sure ABFD returns to processing the program headers.  */
+	  if (bfd_seek (abfd,
+			offset + i_ehdr.e_phoff + (i + 1) * sizeof (x_phdr),
+			SEEK_SET) != 0)
+	    goto fail;
+
 	  if (abfd->build_id != NULL)
-	    return TRUE;
+	    return true;
 	}
     }
 
@@ -414,8 +399,8 @@ NAME(_bfd_elf, core_find_build_id)
      build-id was found.  */
   goto fail;
 
-wrong:
+ wrong:
   bfd_set_error (bfd_error_wrong_format);
-fail:
-  return FALSE;
+ fail:
+  return false;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-eh-frame.c ./bfd/elf-eh-frame.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-eh-frame.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-eh-frame.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* .eh_frame section optimization.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Written by Jakub Jelinek <jakub@redhat.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -60,81 +60,81 @@ struct cie
 /* If *ITER hasn't reached END yet, read the next byte into *RESULT and
    move onto the next byte.  Return true on success.  */
 
-static inline bfd_boolean
+static inline bool
 read_byte (bfd_byte **iter, bfd_byte *end, unsigned char *result)
 {
   if (*iter >= end)
-    return FALSE;
+    return false;
   *result = *((*iter)++);
-  return TRUE;
+  return true;
 }
 
 /* Move *ITER over LENGTH bytes, or up to END, whichever is closer.
    Return true it was possible to move LENGTH bytes.  */
 
-static inline bfd_boolean
+static inline bool
 skip_bytes (bfd_byte **iter, bfd_byte *end, bfd_size_type length)
 {
   if ((bfd_size_type) (end - *iter) < length)
     {
       *iter = end;
-      return FALSE;
+      return false;
     }
   *iter += length;
-  return TRUE;
+  return true;
 }
 
 /* Move *ITER over an leb128, stopping at END.  Return true if the end
    of the leb128 was found.  */
 
-static bfd_boolean
+static bool
 skip_leb128 (bfd_byte **iter, bfd_byte *end)
 {
   unsigned char byte;
   do
     if (!read_byte (iter, end, &byte))
-      return FALSE;
+      return false;
   while (byte & 0x80);
-  return TRUE;
+  return true;
 }
 
 /* Like skip_leb128, but treat the leb128 as an unsigned value and
    store it in *VALUE.  */
 
-static bfd_boolean
+static bool
 read_uleb128 (bfd_byte **iter, bfd_byte *end, bfd_vma *value)
 {
   bfd_byte *start, *p;
 
   start = *iter;
   if (!skip_leb128 (iter, end))
-    return FALSE;
+    return false;
 
   p = *iter;
   *value = *--p;
   while (p > start)
     *value = (*value << 7) | (*--p & 0x7f);
 
-  return TRUE;
+  return true;
 }
 
 /* Like read_uleb128, but for signed values.  */
 
-static bfd_boolean
+static bool
 read_sleb128 (bfd_byte **iter, bfd_byte *end, bfd_signed_vma *value)
 {
   bfd_byte *start, *p;
 
   start = *iter;
   if (!skip_leb128 (iter, end))
-    return FALSE;
+    return false;
 
   p = *iter;
   *value = ((*--p & 0x7f) ^ 0x40) - 0x40;
   while (p > start)
     *value = (*value << 7) | (*--p & 0x7f);
 
-  return TRUE;
+  return true;
 }
 
 /* Return 0 if either encoding is variable width, or not yet known to bfd.  */
@@ -282,7 +282,7 @@ cie_compute_hash (struct cie *c)
 /* Return the number of extra bytes that we'll be inserting into
    ENTRY's augmentation string.  */
 
-static INLINE unsigned int
+static inline unsigned int
 extra_augmentation_string_bytes (struct eh_cie_fde *entry)
 {
   unsigned int size = 0;
@@ -298,7 +298,7 @@ extra_augmentation_string_bytes (struct
 
 /* Likewise ENTRY's augmentation data.  */
 
-static INLINE unsigned int
+static inline unsigned int
 extra_augmentation_data_bytes (struct eh_cie_fde *entry)
 {
   unsigned int size = 0;
@@ -342,14 +342,14 @@ next_cie_fde_offset (const struct eh_cie
    Try to move *ITER past the first instruction and return true on
    success.  ENCODED_PTR_WIDTH gives the width of pointer entries.  */
 
-static bfd_boolean
+static bool
 skip_cfa_op (bfd_byte **iter, bfd_byte *end, unsigned int encoded_ptr_width)
 {
   bfd_byte op;
   bfd_vma length;
 
   if (!read_byte (iter, end, &op))
-    return FALSE;
+    return false;
 
   switch (op & 0xc0 ? op & 0xc0 : op)
     {
@@ -360,7 +360,7 @@ skip_cfa_op (bfd_byte **iter, bfd_byte *
     case DW_CFA_restore_state:
     case DW_CFA_GNU_window_save:
       /* No arguments.  */
-      return TRUE;
+      return true;
 
     case DW_CFA_offset:
     case DW_CFA_restore_extended:
@@ -413,7 +413,7 @@ skip_cfa_op (bfd_byte **iter, bfd_byte *
       return skip_bytes (iter, end, 8);
 
     default:
-      return FALSE;
+      return false;
     }
 }
 
@@ -497,7 +497,7 @@ bfd_elf_record_eh_frame_entry (struct eh
     {
       if (hdr_info->u.compact.allocated_entries == 0)
 	{
-	  hdr_info->frame_hdr_is_compact = TRUE;
+	  hdr_info->frame_hdr_is_compact = true;
 	  hdr_info->u.compact.allocated_entries = 2;
 	  hdr_info->u.compact.entries =
 	    bfd_malloc (hdr_info->u.compact.allocated_entries
@@ -521,7 +521,7 @@ bfd_elf_record_eh_frame_entry (struct eh
 /* Parse a .eh_frame_entry section.  Figure out which text section it
    references.  */
 
-bfd_boolean
+bool
 _bfd_elf_parse_eh_frame_entry (struct bfd_link_info *info,
 			       asection *sec, struct elf_reloc_cookie *cookie)
 {
@@ -536,28 +536,28 @@ _bfd_elf_parse_eh_frame_entry (struct bf
   if (sec->size == 0
       || sec->sec_info_type != SEC_INFO_TYPE_NONE)
     {
-      return TRUE;
+      return true;
     }
 
   if (sec->output_section && bfd_is_abs_section (sec->output_section))
     {
       /* At least one of the sections is being discarded from the
 	 link, so we should just ignore them.  */
-      return TRUE;
+      return true;
     }
 
   if (cookie->rel == cookie->relend)
-    return FALSE;
+    return false;
 
   /* The first relocation is the function start.  */
   r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
   if (r_symndx == STN_UNDEF)
-    return FALSE;
+    return false;
 
-  text_sec = _bfd_elf_section_for_symbol (cookie, r_symndx, FALSE);
+  text_sec = _bfd_elf_section_for_symbol (cookie, r_symndx, false);
 
   if (text_sec == NULL)
-    return FALSE;
+    return false;
 
   elf_section_eh_frame_entry (text_sec) = sec;
   if (text_sec->output_section
@@ -567,7 +567,7 @@ _bfd_elf_parse_eh_frame_entry (struct bf
   sec->sec_info_type = SEC_INFO_TYPE_EH_FRAME_ENTRY;
   elf_section_data (sec)->sec_info = text_sec;
   bfd_elf_record_eh_frame_entry (hdr_info, sec);
-  return TRUE;
+  return true;
 }
 
 /* Try to parse .eh_frame section SEC, which belongs to ABFD.  Store the
@@ -602,6 +602,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, stru
   hdr_info = &htab->eh_info;
 
   if (sec->size == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || sec->sec_info_type != SEC_INFO_TYPE_NONE)
     {
       /* This file does not contain .eh_frame information.  */
@@ -937,7 +938,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, stru
 
 	  SKIP_RELOCS (buf - length);
 	  if (!GET_RELOC (buf - length)
-	      && read_value (abfd, buf - length, length, FALSE) == 0)
+	      && read_value (abfd, buf - length, length, false) == 0)
 	    {
 	      (*info->callbacks->minfo)
 		/* xgettext:c-format */
@@ -1048,14 +1049,11 @@ _bfd_elf_parse_eh_frame (bfd *abfd, stru
     /* xgettext:c-format */
     (_("error in %pB(%pA); no .eh_frame_hdr table will be created"),
      abfd, sec);
-  hdr_info->u.dwarf.table = FALSE;
-  if (sec_info)
-    free (sec_info);
+  hdr_info->u.dwarf.table = false;
+  free (sec_info);
  success:
-  if (ehbuf)
-    free (ehbuf);
-  if (local_cies)
-    free (local_cies);
+  free (ehbuf);
+  free (local_cies);
 #undef REQUIRE
 }
 
@@ -1114,7 +1112,7 @@ add_eh_frame_hdr_terminator (asection *s
 
 /* Finish a pass over all .eh_frame_entry sections.  */
 
-bfd_boolean
+bool
 _bfd_elf_end_eh_frame_parsing (struct bfd_link_info *info)
 {
   struct eh_frame_hdr_info *hdr_info;
@@ -1124,7 +1122,7 @@ _bfd_elf_end_eh_frame_parsing (struct bf
 
   if (info->eh_frame_hdr_type != COMPACT_EH_HDR
       || hdr_info->array_count == 0)
-    return FALSE;
+    return false;
 
   bfd_elf_discard_eh_frame_entry (hdr_info);
 
@@ -1139,14 +1137,14 @@ _bfd_elf_end_eh_frame_parsing (struct bf
 
   /* Add a CANTUNWIND terminator after the last entry.  */
   add_eh_frame_hdr_terminator (hdr_info->u.compact.entries[i], NULL);
-  return TRUE;
+  return true;
 }
 
 /* Mark all relocations against CIE or FDE ENT, which occurs in
    .eh_frame section SEC.  COOKIE describes the relocations in SEC;
    its "rel" field can be changed freely.  */
 
-static bfd_boolean
+static bool
 mark_entry (struct bfd_link_info *info, asection *sec,
 	    struct eh_cie_fde *ent, elf_gc_mark_hook_fn gc_mark_hook,
 	    struct elf_reloc_cookie *cookie)
@@ -1157,16 +1155,16 @@ mark_entry (struct bfd_link_info *info,
 	 && cookie->rel->r_offset < ent->offset + ent->size;
        cookie->rel++)
     if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, cookie))
-      return FALSE;
+      return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Mark all the relocations against FDEs that relate to code in input
    section SEC.  The FDEs belong to .eh_frame section EH_FRAME, whose
    relocations are described by COOKIE.  */
 
-bfd_boolean
+bool
 _bfd_elf_gc_mark_fdes (struct bfd_link_info *info, asection *sec,
 		       asection *eh_frame, elf_gc_mark_hook_fn gc_mark_hook,
 		       struct elf_reloc_cookie *cookie)
@@ -1176,7 +1174,7 @@ _bfd_elf_gc_mark_fdes (struct bfd_link_i
   for (fde = elf_fde_list (sec); fde; fde = fde->u.fde.next_for_section)
     {
       if (!mark_entry (info, eh_frame, fde, gc_mark_hook, cookie))
-	return FALSE;
+	return false;
 
       /* At this stage, all cie_inf fields point to local CIEs, so we
 	 can use the same cookie to refer to them.  */
@@ -1185,10 +1183,10 @@ _bfd_elf_gc_mark_fdes (struct bfd_link_i
 	{
 	  cie->u.cie.gc_mark = 1;
 	  if (!mark_entry (info, eh_frame, cie, gc_mark_hook, cookie))
-	    return FALSE;
+	    return false;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Input section SEC of ABFD is an .eh_frame section that contains the
@@ -1229,7 +1227,7 @@ find_merged_cie (bfd *abfd, struct bfd_l
 
   if (cie->per_encoding != DW_EH_PE_omit)
     {
-      bfd_boolean per_binds_local;
+      bool per_binds_local;
 
       /* Work out the address of personality routine, or at least
 	 enough info that we could calculate the address had we made a
@@ -1278,7 +1276,7 @@ find_merged_cie (bfd *abfd, struct bfd_l
 	  cie->local_personality = 1;
 	  cie->personality.sym.bfd_id = abfd->id;
 	  cie->personality.sym.index = r_symndx;
-	  per_binds_local = TRUE;
+	  per_binds_local = true;
 	}
 
       if (per_binds_local
@@ -1414,7 +1412,7 @@ offset_adjust (bfd_vma offset, const ase
    when a CIE is merged with a previous CIE, since the symbol is
    moved to the merged CIE.  */
 
-bfd_boolean
+bool
 _bfd_elf_adjust_eh_frame_global_symbol (struct elf_link_hash_entry *h,
 					void *arg ATTRIBUTE_UNUSED)
 {
@@ -1423,17 +1421,17 @@ _bfd_elf_adjust_eh_frame_global_symbol (
 
   if (h->root.type != bfd_link_hash_defined
       && h->root.type != bfd_link_hash_defweak)
-    return TRUE;
+    return true;
 
   sym_sec = h->root.u.def.section;
   if (sym_sec->sec_info_type != SEC_INFO_TYPE_EH_FRAME
       || elf_section_data (sym_sec)->sec_info == NULL)
-    return TRUE;
+    return true;
 
   delta = offset_adjust (h->root.u.def.value, sym_sec);
   h->root.u.def.value += delta;
 
-  return TRUE;
+  return true;
 }
 
 /* The same for all local symbols defined in .eh_frame.  Returns true
@@ -1443,25 +1441,27 @@ static int
 adjust_eh_frame_local_symbols (const asection *sec,
 			       struct elf_reloc_cookie *cookie)
 {
-  unsigned int shndx;
-  Elf_Internal_Sym *sym;
-  Elf_Internal_Sym *end_sym;
   int adjusted = 0;
 
-  shndx = elf_section_data (sec)->this_idx;
-  end_sym = cookie->locsyms + cookie->locsymcount;
-  for (sym = cookie->locsyms + 1; sym < end_sym; ++sym)
-    if (sym->st_info <= ELF_ST_INFO (STB_LOCAL, STT_OBJECT)
-	&& sym->st_shndx == shndx)
-      {
-	bfd_signed_vma delta = offset_adjust (sym->st_value, sec);
-
-	if (delta != 0)
+  if (cookie->locsymcount > 1)
+    {
+      unsigned int shndx = elf_section_data (sec)->this_idx;
+      Elf_Internal_Sym *end_sym = cookie->locsyms + cookie->locsymcount;
+      Elf_Internal_Sym *sym;
+
+      for (sym = cookie->locsyms + 1; sym < end_sym; ++sym)
+	if (sym->st_info <= ELF_ST_INFO (STB_LOCAL, STT_OBJECT)
+	    && sym->st_shndx == shndx)
 	  {
-	    adjusted = 1;
-	    sym->st_value += delta;
+	    bfd_signed_vma delta = offset_adjust (sym->st_value, sec);
+
+	    if (delta != 0)
+	      {
+		adjusted = 1;
+		sym->st_value += delta;
+	      }
 	  }
-      }
+    }
   return adjusted;
 }
 
@@ -1470,10 +1470,10 @@ adjust_eh_frame_local_symbols (const ase
    functions.  The function returns TRUE iff any entries have been
    deleted.  */
 
-bfd_boolean
+bool
 _bfd_elf_discard_section_eh_frame
    (bfd *abfd, struct bfd_link_info *info, asection *sec,
-    bfd_boolean (*reloc_symbol_deleted_p) (bfd_vma, void *),
+    bool (*reloc_symbol_deleted_p) (bfd_vma, void *),
     struct elf_reloc_cookie *cookie)
 {
   struct eh_cie_fde *ent;
@@ -1483,11 +1483,11 @@ _bfd_elf_discard_section_eh_frame
   int changed;
 
   if (sec->sec_info_type != SEC_INFO_TYPE_EH_FRAME)
-    return FALSE;
+    return false;
 
   sec_info = (struct eh_frame_sec_info *) elf_section_data (sec)->sec_info;
   if (sec_info == NULL)
-    return FALSE;
+    return false;
 
   ptr_size = (get_elf_backend_data (sec->owner)
 	      ->elf_backend_eh_frame_address_size (sec->owner, sec));
@@ -1500,7 +1500,7 @@ _bfd_elf_discard_section_eh_frame
       ent->removed = sec->map_head.s != NULL;
     else if (!ent->cie && ent->u.fde.cie_inf != NULL)
       {
-	bfd_boolean keep;
+	bool keep;
 	if ((sec->flags & SEC_LINKER_CREATED) != 0 && cookie->rels == NULL)
 	  {
 	    unsigned int width
@@ -1531,7 +1531,7 @@ _bfd_elf_discard_section_eh_frame
 		   which we cannot turn into PC relative,
 		   don't create the binary search table,
 		   since it is affected by runtime relocations.  */
-		hdr_info->u.dwarf.table = FALSE;
+		hdr_info->u.dwarf.table = false;
 		/* Only warn if --eh-frame-hdr was specified.  */
 		if (info->eh_frame_hdr_type != 0)
 		  {
@@ -1558,11 +1558,8 @@ _bfd_elf_discard_section_eh_frame
 	  }
       }
 
-  if (sec_info->cies)
-    {
-      free (sec_info->cies);
-      sec_info->cies = NULL;
-    }
+  free (sec_info->cies);
+  sec_info->cies = NULL;
 
   /* It may be that some .eh_frame input section has greater alignment
      than other .eh_frame sections.  In that case we run the risk of
@@ -1615,8 +1612,8 @@ _bfd_elf_discard_section_eh_frame
    _bfd_elf_discard_section_eh_frame has been called on all .eh_frame
    input sections.  It finalizes the size of .eh_frame_hdr section.  */
 
-bfd_boolean
-_bfd_elf_discard_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
+bool
+_bfd_elf_discard_section_eh_frame_hdr (struct bfd_link_info *info)
 {
   struct elf_link_hash_table *htab;
   struct eh_frame_hdr_info *hdr_info;
@@ -1633,7 +1630,7 @@ _bfd_elf_discard_section_eh_frame_hdr (b
 
   sec = hdr_info->hdr_sec;
   if (sec == NULL)
-    return FALSE;
+    return false;
 
   if (info->eh_frame_hdr_type == COMPACT_EH_HDR)
     {
@@ -1648,35 +1645,34 @@ _bfd_elf_discard_section_eh_frame_hdr (b
 	sec->size += 4 + hdr_info->u.dwarf.fde_count * 8;
     }
 
-  elf_eh_frame_hdr (abfd) = sec;
-  return TRUE;
+  return true;
 }
 
 /* Return true if there is at least one non-empty .eh_frame section in
    input files.  Can only be called after ld has mapped input to
    output sections, and before sections are stripped.  */
 
-bfd_boolean
+bool
 _bfd_elf_eh_frame_present (struct bfd_link_info *info)
 {
   asection *eh = bfd_get_section_by_name (info->output_bfd, ".eh_frame");
 
   if (eh == NULL)
-    return FALSE;
+    return false;
 
   /* Count only sections which have at least a single CIE or FDE.
      There cannot be any CIE or FDE <= 8 bytes.  */
   for (eh = eh->map_head.s; eh != NULL; eh = eh->map_head.s)
     if (eh->size > 8)
-      return TRUE;
+      return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Return true if there is at least one .eh_frame_entry section in
    input files.  */
 
-bfd_boolean
+bool
 _bfd_elf_eh_frame_entry_present (struct bfd_link_info *info)
 {
   asection *o;
@@ -1690,10 +1686,10 @@ _bfd_elf_eh_frame_entry_present (struct
 
 	  if (strcmp (name, ".eh_frame_entry")
 	      && !bfd_is_abs_section (o->output_section))
-	    return TRUE;
+	    return true;
 	}
     }
-  return FALSE;
+  return false;
 }
 
 /* This function is called from size_dynamic_sections.
@@ -1701,7 +1697,7 @@ _bfd_elf_eh_frame_entry_present (struct
    because when the dynamic symbol table has been sized it is too late
    to strip sections.  */
 
-bfd_boolean
+bool
 _bfd_elf_maybe_strip_eh_frame_hdr (struct bfd_link_info *info)
 {
   struct elf_link_hash_table *htab;
@@ -1712,7 +1708,7 @@ _bfd_elf_maybe_strip_eh_frame_hdr (struc
   htab = elf_hash_table (info);
   hdr_info = &htab->eh_info;
   if (hdr_info->hdr_sec == NULL)
-    return TRUE;
+    return true;
 
   if (bfd_is_abs_section (hdr_info->hdr_sec->output_section)
       || info->eh_frame_hdr_type == 0
@@ -1723,25 +1719,25 @@ _bfd_elf_maybe_strip_eh_frame_hdr (struc
     {
       hdr_info->hdr_sec->flags |= SEC_EXCLUDE;
       hdr_info->hdr_sec = NULL;
-      return TRUE;
+      return true;
     }
 
   /* Add a hidden symbol so that systems without access to PHDRs can
      find the table.  */
   if (! (_bfd_generic_link_add_one_symbol
 	 (info, info->output_bfd, "__GNU_EH_FRAME_HDR", BSF_LOCAL,
-	  hdr_info->hdr_sec, 0, NULL, FALSE, FALSE, &bh)))
-    return FALSE;
+	  hdr_info->hdr_sec, 0, NULL, false, false, &bh)))
+    return false;
 
   h = (struct elf_link_hash_entry *) bh;
   h->def_regular = 1;
   h->other = STV_HIDDEN;
   get_elf_backend_data
-    (info->output_bfd)->elf_backend_hide_symbol (info, h, TRUE);
+    (info->output_bfd)->elf_backend_hide_symbol (info, h, true);
 
   if (!hdr_info->frame_hdr_is_compact)
-    hdr_info->u.dwarf.table = TRUE;
-  return TRUE;
+    hdr_info->u.dwarf.table = true;
+  return true;
 }
 
 /* Adjust an address in the .eh_frame section.  Given OFFSET within
@@ -1834,7 +1830,7 @@ _bfd_elf_eh_frame_section_offset (bfd *o
 /* Write out .eh_frame_entry section.  Add CANTUNWIND terminator if needed.
    Also check that the contents look sane.  */
 
-bfd_boolean
+bool
 _bfd_elf_write_section_eh_frame_entry (bfd *abfd, struct bfd_link_info *info,
 				       asection *sec, bfd_byte *contents)
 {
@@ -1855,11 +1851,11 @@ _bfd_elf_write_section_eh_frame_entry (b
      excluded outside of the normal process.  */
   if (sec->flags & SEC_EXCLUDE
       || text_sec->flags & SEC_EXCLUDE)
-    return TRUE;
+    return true;
 
   if (!bfd_set_section_contents (abfd, sec->output_section, contents,
 				 sec->output_offset, sec->rawsize))
-      return FALSE;
+      return false;
 
   last_addr = bfd_get_signed_32 (abfd, contents);
   /* Check that all the entries are in order.  */
@@ -1870,7 +1866,7 @@ _bfd_elf_write_section_eh_frame_entry (b
 	{
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: %pA not in order"), sec->owner, sec);
-	  return FALSE;
+	  return false;
 	}
 
       last_addr = addr;
@@ -1886,7 +1882,7 @@ _bfd_elf_write_section_eh_frame_entry (b
       _bfd_error_handler (_("%pB: %pA invalid input section size"),
 			  sec->owner, sec);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   if (last_addr >= addr + sec->rawsize)
     {
@@ -1894,11 +1890,11 @@ _bfd_elf_write_section_eh_frame_entry (b
       _bfd_error_handler (_("%pB: %pA points past end of text section"),
 			  sec->owner, sec);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   if (sec->size == sec->rawsize)
-    return TRUE;
+    return true;
 
   bed = get_elf_backend_data (abfd);
   BFD_ASSERT (sec->size == sec->rawsize + 8);
@@ -1914,7 +1910,7 @@ _bfd_elf_write_section_eh_frame_entry (b
 /* Write out .eh_frame section.  This is called with the relocated
    contents.  */
 
-bfd_boolean
+bool
 _bfd_elf_write_section_eh_frame (bfd *abfd,
 				 struct bfd_link_info *info,
 				 asection *sec,
@@ -1941,7 +1937,7 @@ _bfd_elf_write_section_eh_frame (bfd *ab
 
   if (hdr_info->u.dwarf.table && hdr_info->u.dwarf.array == NULL)
     {
-      hdr_info->frame_hdr_is_compact = FALSE;
+      hdr_info->frame_hdr_is_compact = false;
       hdr_info->u.dwarf.array = (struct eh_frame_array_ent *)
 	bfd_malloc (hdr_info->u.dwarf.fde_count
 		    * sizeof (*hdr_info->u.dwarf.array));
@@ -2149,6 +2145,7 @@ _bfd_elf_write_section_eh_frame (bfd *ab
 			/* Fall thru */
 		      case bfd_arch_frv:
 		      case bfd_arch_i386:
+		      case bfd_arch_nios2:
 			BFD_ASSERT (htab->hgot != NULL
 				    && ((htab->hgot->root.type
 					 == bfd_link_hash_defined)
@@ -2189,7 +2186,7 @@ _bfd_elf_write_section_eh_frame (bfd *ab
 	      hdr_info->u.dwarf.array[hdr_info->array_count].initial_loc
 		= address;
 	      hdr_info->u.dwarf.array[hdr_info->array_count].range
-		= read_value (abfd, buf + width, width, FALSE);
+		= read_value (abfd, buf + width, width, false);
 	      hdr_info->u.dwarf.array[hdr_info->array_count++].fde
 		= (sec->output_section->vma
 		   + sec->output_offset
@@ -2288,7 +2285,7 @@ vma_compare (const void *a, const void *
    invalid for a linker script to try to force a particular order of
    .eh_frame_entry sections.  */
 
-bfd_boolean
+bool
 _bfd_elf_fixup_eh_frame_hdr (struct bfd_link_info *info)
 {
   asection *sec = NULL;
@@ -2303,7 +2300,7 @@ _bfd_elf_fixup_eh_frame_hdr (struct bfd_
   if (hdr_info->hdr_sec == NULL
       || info->eh_frame_hdr_type != COMPACT_EH_HDR
       || hdr_info->array_count == 0)
-    return TRUE;
+    return true;
 
   /* Change section output offsets to be in text section order.  */
   offset = 8;
@@ -2316,7 +2313,7 @@ _bfd_elf_fixup_eh_frame_hdr (struct bfd_
 	  _bfd_error_handler
 	    (_("invalid output section for .eh_frame_entry: %pA"),
 	     sec->output_section);
-	  return FALSE;
+	  return false;
 	}
       sec->output_offset = offset;
       offset += sec->size;
@@ -2338,10 +2335,10 @@ _bfd_elf_fixup_eh_frame_hdr (struct bfd_
     {
       _bfd_error_handler
 	(_("invalid contents in %pA section"), osec);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* The .eh_frame_hdr format for Compact EH frames:
@@ -2350,7 +2347,7 @@ _bfd_elf_fixup_eh_frame_hdr (struct bfd_
    uint32_t count		(Number of entries in table)
    [array from .eh_frame_entry sections]  */
 
-static bfd_boolean
+static bool
 write_compact_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_table *htab;
@@ -2403,13 +2400,13 @@ write_compact_eh_frame_hdr (bfd *abfd, s
 				 FDE initial_location field and FDE address,
 				 sorted by increasing initial_loc).  */
 
-static bfd_boolean
+static bool
 write_dwarf_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_table *htab;
   struct eh_frame_hdr_info *hdr_info;
   asection *sec;
-  bfd_boolean retval = TRUE;
+  bool retval = true;
 
   htab = elf_hash_table (info);
   hdr_info = &htab->eh_info;
@@ -2425,13 +2422,13 @@ write_dwarf_eh_frame_hdr (bfd *abfd, str
     size += 4 + hdr_info->u.dwarf.fde_count * 8;
   contents = (bfd_byte *) bfd_malloc (size);
   if (contents == NULL)
-    return FALSE;
+    return false;
 
   eh_frame_sec = bfd_get_section_by_name (abfd, ".eh_frame");
   if (eh_frame_sec == NULL)
     {
       free (contents);
-      return FALSE;
+      return false;
     }
 
   memset (contents, 0, EH_FRAME_HDR_SIZE);
@@ -2459,14 +2456,14 @@ write_dwarf_eh_frame_hdr (bfd *abfd, str
   if (contents[2] != DW_EH_PE_omit)
     {
       unsigned int i;
-      bfd_boolean overlap, overflow;
+      bool overlap, overflow;
 
       bfd_put_32 (abfd, hdr_info->u.dwarf.fde_count,
 		  contents + EH_FRAME_HDR_SIZE);
       qsort (hdr_info->u.dwarf.array, hdr_info->u.dwarf.fde_count,
 	     sizeof (*hdr_info->u.dwarf.array), vma_compare);
-      overlap = FALSE;
-      overflow = FALSE;
+      overlap = false;
+      overflow = false;
       for (i = 0; i < hdr_info->u.dwarf.fde_count; i++)
 	{
 	  bfd_vma val;
@@ -2477,20 +2474,20 @@ write_dwarf_eh_frame_hdr (bfd *abfd, str
 	  if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64
 	      && (hdr_info->u.dwarf.array[i].initial_loc
 		  != sec->output_section->vma + val))
-	    overflow = TRUE;
+	    overflow = true;
 	  bfd_put_32 (abfd, val, contents + EH_FRAME_HDR_SIZE + i * 8 + 4);
 	  val = hdr_info->u.dwarf.array[i].fde - sec->output_section->vma;
 	  val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000;
 	  if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64
 	      && (hdr_info->u.dwarf.array[i].fde
 		  != sec->output_section->vma + val))
-	    overflow = TRUE;
+	    overflow = true;
 	  bfd_put_32 (abfd, val, contents + EH_FRAME_HDR_SIZE + i * 8 + 8);
 	  if (i != 0
 	      && (hdr_info->u.dwarf.array[i].initial_loc
 		  < (hdr_info->u.dwarf.array[i - 1].initial_loc
 		     + hdr_info->u.dwarf.array[i - 1].range)))
-	    overlap = TRUE;
+	    overlap = true;
 	}
       if (overflow)
 	_bfd_error_handler (_(".eh_frame_hdr entry overflow"));
@@ -2499,7 +2496,7 @@ write_dwarf_eh_frame_hdr (bfd *abfd, str
       if (overflow || overlap)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  retval = FALSE;
+	  retval = false;
 	}
     }
 
@@ -2507,11 +2504,10 @@ write_dwarf_eh_frame_hdr (bfd *abfd, str
   if (!bfd_set_section_contents (abfd, sec->output_section, contents,
 				 (file_ptr) sec->output_offset,
 				 sec->size))
-    retval = FALSE;
+    retval = false;
   free (contents);
 
-  if (hdr_info->u.dwarf.array != NULL)
-    free (hdr_info->u.dwarf.array);
+  free (hdr_info->u.dwarf.array);
   return retval;
 }
 
@@ -2519,7 +2515,7 @@ write_dwarf_eh_frame_hdr (bfd *abfd, str
    _bfd_elf_write_section_eh_frame has been called on all input
    .eh_frame sections.  */
 
-bfd_boolean
+bool
 _bfd_elf_write_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_table *htab;
@@ -2531,7 +2527,7 @@ _bfd_elf_write_section_eh_frame_hdr (bfd
   sec = hdr_info->hdr_sec;
 
   if (info->eh_frame_hdr_type == 0 || sec == NULL)
-    return TRUE;
+    return true;
 
   if (info->eh_frame_hdr_type == COMPACT_EH_HDR)
     return write_compact_eh_frame_hdr (abfd, info);
@@ -2550,12 +2546,12 @@ _bfd_elf_eh_frame_address_size (bfd *abf
 /* Decide whether we can use a PC-relative encoding within the given
    EH frame section.  This is the default implementation.  */
 
-bfd_boolean
+bool
 _bfd_elf_can_make_relative (bfd *input_bfd ATTRIBUTE_UNUSED,
 			    struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			    asection *eh_frame_section ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* Select an encoding for the given address.  Preference is given to
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-hppa.h ./bfd/elf-hppa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-hppa.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-hppa.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common code for PA ELF implementations.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -49,286 +49,286 @@ static reloc_howto_type elf_hppa_howto_t
 {
 #define HOW(type, size, bitsize, pc_rel, complain, mask) \
   HOWTO (type, 0, size, bitsize, pc_rel, 0, complain_overflow_ ## complain, \
-	 bfd_elf_generic_reloc, #type, FALSE, 0, mask, FALSE)
+	 bfd_elf_generic_reloc, #type, false, 0, mask, false)
 
   /* The values in DIR32 are to placate the check in
      _bfd_stab_section_find_nearest_line.  */
-  HOW (R_PARISC_NONE,		3,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_DIR32,		2, 32, FALSE, bitfield, 0xffffffff),
-  HOW (R_PARISC_DIR21L,		2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_DIR17R,		2, 17, FALSE, bitfield, 0),
-  HOW (R_PARISC_DIR17F,		2, 17, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DIR14R,		2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_DIR14F,		2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_NONE,		0,  0, false,     dont, 0),
+  HOW (R_PARISC_DIR32,		4, 32, false, bitfield, 0xffffffff),
+  HOW (R_PARISC_DIR21L,		4, 21, false, bitfield, 0),
+  HOW (R_PARISC_DIR17R,		4, 17, false, bitfield, 0),
+  HOW (R_PARISC_DIR17F,		4, 17, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DIR14R,		4, 14, false, bitfield, 0),
+  HOW (R_PARISC_DIR14F,		4, 14, false, bitfield, 0),
   /* 8 */
-  HOW (R_PARISC_PCREL12F,	2, 12,  TRUE, bitfield, 0),
-  HOW (R_PARISC_PCREL32,	2, 32,  TRUE, bitfield, 0),
-  HOW (R_PARISC_PCREL21L,	2, 21,  TRUE, bitfield, 0),
-  HOW (R_PARISC_PCREL17R,	2, 17,  TRUE, bitfield, 0),
-  HOW (R_PARISC_PCREL17F,	2, 17,  TRUE, bitfield, 0),
-  HOW (R_PARISC_PCREL17C,	2, 17,  TRUE, bitfield, 0),
-  HOW (R_PARISC_PCREL14R,	2, 14,  TRUE, bitfield, 0),
-  HOW (R_PARISC_PCREL14F,	2, 14,  TRUE, bitfield, 0),
+  HOW (R_PARISC_PCREL12F,	4, 12,  true, bitfield, 0),
+  HOW (R_PARISC_PCREL32,	4, 32,  true, bitfield, 0),
+  HOW (R_PARISC_PCREL21L,	4, 21,  true, bitfield, 0),
+  HOW (R_PARISC_PCREL17R,	4, 17,  true, bitfield, 0),
+  HOW (R_PARISC_PCREL17F,	4, 17,  true, bitfield, 0),
+  HOW (R_PARISC_PCREL17C,	4, 17,  true, bitfield, 0),
+  HOW (R_PARISC_PCREL14R,	4, 14,  true, bitfield, 0),
+  HOW (R_PARISC_PCREL14F,	4, 14,  true, bitfield, 0),
   /* 16 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DPREL21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_DPREL14WR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_DPREL14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DPREL14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_DPREL14F,	2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DPREL21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_DPREL14WR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_DPREL14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DPREL14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_DPREL14F,	4, 14, false, bitfield, 0),
   /* 24 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTREL21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTREL14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTREL14F,	2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DLTREL21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DLTREL14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_DLTREL14F,	4, 14, false, bitfield, 0),
   /* 32 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTIND21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTIND14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTIND14F,	2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DLTIND21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DLTIND14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_DLTIND14F,	4, 14, false, bitfield, 0),
   /* 40 */
-  HOW (R_PARISC_SETBASE,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_SECREL32,	2, 32, FALSE, bitfield, 0xffffffff),
-  HOW (R_PARISC_BASEREL21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_BASEREL17R,	2, 17, FALSE, bitfield, 0),
-  HOW (R_PARISC_BASEREL17F,	2, 17, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_BASEREL14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_BASEREL14F,	2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_SETBASE,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_SECREL32,	4, 32, false, bitfield, 0xffffffff),
+  HOW (R_PARISC_BASEREL21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_BASEREL17R,	4, 17, false, bitfield, 0),
+  HOW (R_PARISC_BASEREL17F,	4, 17, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_BASEREL14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_BASEREL14F,	4, 14, false, bitfield, 0),
   /* 48 */
-  HOW (R_PARISC_SEGBASE,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_SEGREL32,	2, 32, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLTOFF21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLTOFF14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLTOFF14F,	2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_SEGBASE,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_SEGREL32,	4, 32, false, bitfield, 0),
+  HOW (R_PARISC_PLTOFF21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_PLTOFF14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_PLTOFF14F,	4, 14, false, bitfield, 0),
   /* 56 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_FPTR32,	2, 32, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_FPTR21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_FPTR14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR32,	4, 32, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 64 */
-  HOW (R_PARISC_FPTR64,		4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLABEL32,	2, 32, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLABEL21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLABEL14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_FPTR64,		8, 64, false, bitfield, 0),
+  HOW (R_PARISC_PLABEL32,	4, 32, false, bitfield, 0),
+  HOW (R_PARISC_PLABEL21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_PLABEL14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 72 */
-  HOW (R_PARISC_PCREL64,	4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_PCREL22C,	2, 22, FALSE, bitfield, 0),
-  HOW (R_PARISC_PCREL22F,	2, 22, FALSE, bitfield, 0),
-  HOW (R_PARISC_PCREL14WR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_PCREL14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_PCREL16F,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_PCREL16WF,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_PCREL16DF,	2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_PCREL64,	8, 64, false, bitfield, 0),
+  HOW (R_PARISC_PCREL22C,	4, 22, false, bitfield, 0),
+  HOW (R_PARISC_PCREL22F,	4, 22, false, bitfield, 0),
+  HOW (R_PARISC_PCREL14WR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_PCREL14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_PCREL16F,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_PCREL16WF,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_PCREL16DF,	4, 16, false, bitfield, 0),
   /* 80 */
-  HOW (R_PARISC_DIR64,		4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DIR14WR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_DIR14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_DIR16F,		2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_DIR16WF,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_DIR16DF,	2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR64,		8, 64, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DIR14WR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_DIR14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_DIR16F,		4, 16, false, bitfield, 0),
+  HOW (R_PARISC_DIR16WF,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_DIR16DF,	4, 16, false, bitfield, 0),
   /* 88 */
-  HOW (R_PARISC_GPREL64,	4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTREL14WR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTREL14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_GPREL16F,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_GPREL16WF,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_GPREL16DF,	2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_GPREL64,	8, 64, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DLTREL14WR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_DLTREL14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_GPREL16F,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_GPREL16WF,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_GPREL16DF,	4, 16, false, bitfield, 0),
   /* 96 */
-  HOW (R_PARISC_LTOFF64,	4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTIND14WR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_DLTIND14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF16F,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF16WF,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF16DF,	2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF64,	8, 64, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_DLTIND14WR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_DLTIND14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF16F,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF16WF,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF16DF,	4, 16, false, bitfield, 0),
   /* 104 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_BASEREL14WR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_BASEREL14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_BASEREL14WR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_BASEREL14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 112 */
-  HOW (R_PARISC_SEGREL64,	4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLTOFF14WR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLTOFF14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLTOFF16F,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLTOFF16WF,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_PLTOFF16DF,	2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_SEGREL64,	8, 64, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_PLTOFF14WR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_PLTOFF14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_PLTOFF16F,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_PLTOFF16WF,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_PLTOFF16DF,	4, 16, false, bitfield, 0),
   /* 120 */
-  HOW (R_PARISC_LTOFF_FPTR64,	4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_FPTR14WR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_FPTR14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_FPTR16F,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_FPTR16WF,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_FPTR16DF,	2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR64,	8, 64, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR14WR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR16F,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR16WF,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR16DF,	4, 16, false, bitfield, 0),
   /* 128 */
-  HOW (R_PARISC_COPY,		0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_IPLT,		0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_EPLT,		0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_COPY,		0,  0, false, bitfield, 0),
+  HOW (R_PARISC_IPLT,		0,  0, false, bitfield, 0),
+  HOW (R_PARISC_EPLT,		0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 136 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 144 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
   /* 152 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_TPREL32,	2, 32, FALSE,     dont, 0),
-  HOW (R_PARISC_TPREL21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_TPREL14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_TPREL32,	4, 32, false,     dont, 0),
+  HOW (R_PARISC_TPREL21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_TPREL14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
   /* 160 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_LTOFF_TP21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_TP14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_TP14F,	2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_LTOFF_TP21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP14F,	4, 14, false, bitfield, 0),
   /* 168 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 176 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 184 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
   /* 192 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 200 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 208 */
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
   /* 216 */
-  HOW (R_PARISC_TPREL64,	4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_TPREL14WR,	2, 14, FALSE,     dont, 0),
-  HOW (R_PARISC_TPREL14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_TPREL16F,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_TPREL16WF,	2, 16, FALSE,     dont, 0),
-  HOW (R_PARISC_TPREL16DF,	2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_TPREL64,	8, 64, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_TPREL14WR,	4, 14, false,     dont, 0),
+  HOW (R_PARISC_TPREL14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_TPREL16F,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_TPREL16WF,	4, 16, false,     dont, 0),
+  HOW (R_PARISC_TPREL16DF,	4, 16, false, bitfield, 0),
   /* 224 */
-  HOW (R_PARISC_LTOFF_TP64,	4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_TP14WR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_TP14DR,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_TP16F,	2, 16, FALSE,     dont, 0),
-  HOW (R_PARISC_LTOFF_TP16WF,	2, 16, FALSE, bitfield, 0),
-  HOW (R_PARISC_LTOFF_TP16DF,	2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP64,	8, 64, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED,	0,  0, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP14WR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP14DR,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP16F,	4, 16, false,     dont, 0),
+  HOW (R_PARISC_LTOFF_TP16WF,	4, 16, false, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP16DF,	4, 16, false, bitfield, 0),
   /* 232 */
-  HOW (R_PARISC_GNU_VTENTRY,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_GNU_VTINHERIT,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_TLS_GD21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_TLS_GD14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_TLS_GDCALL,	0,  0, FALSE,     dont, 0),
-  HOW (R_PARISC_TLS_LDM21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_TLS_LDM14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_TLS_LDMCALL,	0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_GNU_VTENTRY,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_GNU_VTINHERIT,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_TLS_GD21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_TLS_GD14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_TLS_GDCALL,	0,  0, false,     dont, 0),
+  HOW (R_PARISC_TLS_LDM21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_TLS_LDM14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_TLS_LDMCALL,	0,  0, false,     dont, 0),
   /* 240 */
-  HOW (R_PARISC_TLS_LDO21L,	2, 21, FALSE, bitfield, 0),
-  HOW (R_PARISC_TLS_LDO14R,	2, 14, FALSE, bitfield, 0),
-  HOW (R_PARISC_TLS_DTPMOD32,	2, 32, FALSE, bitfield, 0),
-  HOW (R_PARISC_TLS_DTPMOD64,	4, 64, FALSE, bitfield, 0),
-  HOW (R_PARISC_TLS_DTPOFF32,	2, 32, FALSE, bitfield, 0),
-  HOW (R_PARISC_TLS_DTPOFF64,	4, 64, FALSE, bitfield, 0)
+  HOW (R_PARISC_TLS_LDO21L,	4, 21, false, bitfield, 0),
+  HOW (R_PARISC_TLS_LDO14R,	4, 14, false, bitfield, 0),
+  HOW (R_PARISC_TLS_DTPMOD32,	4, 32, false, bitfield, 0),
+  HOW (R_PARISC_TLS_DTPMOD64,	8, 64, false, bitfield, 0),
+  HOW (R_PARISC_TLS_DTPOFF32,	4, 32, false, bitfield, 0),
+  HOW (R_PARISC_TLS_DTPOFF64,	8, 64, false, bitfield, 0)
 #undef HOW
 };
 
@@ -754,7 +754,7 @@ _bfd_elf_hppa_gen_reloc_type (bfd *abfd,
 {
   elf_hppa_reloc_type *finaltype;
   elf_hppa_reloc_type **final_types;
-  bfd_size_type amt = sizeof (elf_hppa_reloc_type *) * 2;
+  size_t amt = sizeof (elf_hppa_reloc_type *) * 2;
 
   /* Allocate slots for the BFD relocation.  */
   final_types = bfd_alloc (abfd, amt);
@@ -778,7 +778,7 @@ _bfd_elf_hppa_gen_reloc_type (bfd *abfd,
 
 /* Translate from an elf into field into a howto relocation pointer.  */
 
-static bfd_boolean
+static bool
 elf_hppa_info_to_howto (bfd *abfd,
 			arelent *bfd_reloc,
 			Elf_Internal_Rela *elf_reloc)
@@ -798,15 +798,15 @@ elf_hppa_info_to_howto (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   bfd_reloc->howto = howto;
-  return TRUE;
+  return true;
 }
 
 /* Translate from an elf into field into a howto relocation pointer.  */
 
-static bfd_boolean
+static bool
 elf_hppa_info_to_howto_rel (bfd *abfd,
 			    arelent *bfd_reloc,
 			    Elf_Internal_Rela *elf_reloc)
@@ -826,10 +826,10 @@ elf_hppa_info_to_howto_rel (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   bfd_reloc->howto = howto;
-  return TRUE;
+  return true;
 }
 
 /* Return the address of the howto table entry to perform the CODE
@@ -865,18 +865,18 @@ elf_hppa_reloc_name_lookup (bfd *abfd AT
 
 /* Return TRUE if SYM represents a local label symbol.  */
 
-static bfd_boolean
+static bool
 elf_hppa_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
 {
   if (name[0] == 'L' && name[1] == '$')
-    return TRUE;
+    return true;
   return _bfd_elf_is_local_label_name (abfd, name);
 }
 
 /* Set the correct type for an ELF section.  We do this by the
    section name, which is a hack, but ought to work.  */
 
-static bfd_boolean
+static bool
 elf_hppa_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
 {
   const char *name;
@@ -920,10 +920,10 @@ elf_hppa_fake_sections (bfd *abfd, Elf_I
 	 so it is allowed to change the rules).  Leave as it is for now.  */
       hdr->sh_entsize = 4;
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_hppa_final_write_processing (bfd *abfd)
 {
   int mach = bfd_get_mach (abfd);
@@ -974,7 +974,7 @@ hppa_unwind_entry_compare (const void *a
   return av < bv ? -1 : av > bv ? 1 : 0;
 }
 
-static bfd_boolean
+static bool
 elf_hppa_sort_unwind (bfd *abfd)
 {
   asection *s;
@@ -984,22 +984,23 @@ elf_hppa_sort_unwind (bfd *abfd)
      Consider what happens if someone inept creates a linker script
      that puts unwind information in .text.  */
   s = bfd_get_section_by_name (abfd, ".PARISC.unwind");
-  if (s != NULL)
+  if (s != NULL && (s->flags & SEC_HAS_CONTENTS) != 0)
+
     {
       bfd_size_type size;
       bfd_byte *contents;
 
       if (!bfd_malloc_and_get_section (abfd, s, &contents))
-	return FALSE;
+	return false;
 
       size = s->size;
       qsort (contents, (size_t) (size / 16), 16, hppa_unwind_entry_compare);
 
       if (! bfd_set_section_contents (abfd, s, contents, (file_ptr) 0, size))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* What to do when ld finds relocations against symbols defined in
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-ifunc.c ./bfd/elf-ifunc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-ifunc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-ifunc.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF STT_GNU_IFUNC support.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -30,7 +30,7 @@
 
 /* Create sections needed by STT_GNU_IFUNC symbol.  */
 
-bfd_boolean
+bool
 _bfd_elf_create_ifunc_sections (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags, pltflags;
@@ -39,7 +39,7 @@ _bfd_elf_create_ifunc_sections (bfd *abf
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
   if (htab->irelifunc != NULL || htab->iplt != NULL)
-    return TRUE;
+    return true;
 
   flags = bed->dynamic_sec_flags;
   pltflags = flags;
@@ -63,7 +63,7 @@ _bfd_elf_create_ifunc_sections (bfd *abf
 				       flags | SEC_READONLY);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->irelifunc = s;
     }
   else
@@ -73,7 +73,7 @@ _bfd_elf_create_ifunc_sections (bfd *abf
       s = bfd_make_section_with_flags (abfd, ".iplt", pltflags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->plt_alignment))
-	return FALSE;
+	return false;
       htab->iplt = s;
 
       s = bfd_make_section_with_flags (abfd,
@@ -82,7 +82,7 @@ _bfd_elf_create_ifunc_sections (bfd *abf
 				       flags | SEC_READONLY);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->irelplt = s;
 
       /* We don't need the .igot section if we have the .igot.plt
@@ -93,35 +93,33 @@ _bfd_elf_create_ifunc_sections (bfd *abf
 	s = bfd_make_section_with_flags (abfd, ".igot", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->igotplt = s;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs against a STT_GNU_IFUNC symbol definition.  */
 
-bfd_boolean
+bool
 _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info,
 				    struct elf_link_hash_entry *h,
 				    struct elf_dyn_relocs **head,
-				    bfd_boolean *readonly_dynrelocs_against_ifunc_p,
 				    unsigned int plt_entry_size,
 				    unsigned int plt_header_size,
 				    unsigned int got_entry_size,
-				    bfd_boolean avoid_plt)
+				    bool avoid_plt)
 {
   asection *plt, *gotplt, *relplt;
   struct elf_dyn_relocs *p;
   unsigned int sizeof_reloc;
   const struct elf_backend_data *bed;
   struct elf_link_hash_table *htab;
-  bfd_boolean readonly_dynrelocs_against_ifunc;
   /* If AVOID_PLT is TRUE, don't use PLT if possible.  */
-  bfd_boolean use_plt = !avoid_plt || h->plt.refcount > 0;
-  bfd_boolean need_dynreloc = !use_plt || bfd_link_pic (info);
+  bool use_plt = !avoid_plt || h->plt.refcount > 0;
+  bool need_dynreloc = !use_plt || bfd_link_pic (info);
 
   /* When a PIC object references a STT_GNU_IFUNC symbol defined
      in executable or it isn't referenced via PLT, the address of
@@ -149,7 +147,7 @@ _bfd_elf_allocate_ifunc_dyn_relocs (stru
 	 h->root.root.string,
 	 h->root.u.def.section->owner);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   htab = elf_hash_table (info);
@@ -160,17 +158,17 @@ _bfd_elf_allocate_ifunc_dyn_relocs (stru
      reference.  */
   if (need_dynreloc && h->ref_regular)
     {
-      bfd_boolean keep = FALSE;
+      bool keep = false;
       for (p = *head; p != NULL; p = p->next)
 	if (p->count)
 	  {
 	    h->non_got_ref = 1;
 	    /* Need dynamic relocations for non-GOT reference.  */
-	    keep = TRUE;
+	    keep = true;
 	    if (p->pc_count)
 	      {
 		/* Must use PLT for PC-relative reference.  */
-		use_plt = TRUE;
+		use_plt = true;
 		need_dynreloc = bfd_link_pic (info);
 		break;
 	      }
@@ -185,7 +183,7 @@ _bfd_elf_allocate_ifunc_dyn_relocs (stru
       h->got = htab->init_got_offset;
       h->plt = htab->init_plt_offset;
       *head = NULL;
-      return TRUE;
+      return true;
     }
 
   /* Return and discard space for dynamic relocations against it if
@@ -198,10 +196,10 @@ _bfd_elf_allocate_ifunc_dyn_relocs (stru
       h->got = htab->init_got_offset;
       h->plt = htab->init_plt_offset;
       *head = NULL;
-      return TRUE;
+      return true;
     }
 
-keep:
+ keep:
   bed = get_elf_backend_data (info->output_bfd);
   if (bed->rela_plts_and_copies_p)
     sizeof_reloc = bed->s->sizeof_rela;
@@ -255,8 +253,6 @@ keep:
   if (!need_dynreloc || !h->non_got_ref)
     *head = NULL;
 
-  readonly_dynrelocs_against_ifunc = FALSE;
-
   /* Finally, allocate space.  */
   p = *head;
   if (p != NULL)
@@ -264,17 +260,13 @@ keep:
       bfd_size_type count = 0;
       do
 	{
-	  if (!readonly_dynrelocs_against_ifunc)
-	    {
-	      asection *s = p->sec->output_section;
-	      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-		readonly_dynrelocs_against_ifunc = TRUE;
-	    }
 	  count += p->count;
 	  p = p->next;
 	}
       while (p != NULL);
 
+      htab->ifunc_resolvers = count != 0;
+
       /* Dynamic relocations are stored in
 	 1. .rel[a].ifunc section in PIC object.
 	 2. .rel[a].got section in dynamic executable.
@@ -290,9 +282,6 @@ keep:
 	}
     }
 
-  if (readonly_dynrelocs_against_ifunc_p)
-    *readonly_dynrelocs_against_ifunc_p = readonly_dynrelocs_against_ifunc;
-
   /* For STT_GNU_IFUNC symbol, .got.plt has the real function address
      and .got has the PLT entry adddress.  We will load the GOT entry
      with the PLT entry in finish_dynamic_symbol if it is used.  For
@@ -357,5 +346,5 @@ keep:
 	}
     }
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elflink.c ./bfd/elflink.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elflink.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elflink.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF linking support for BFD.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,35 +32,27 @@
 #include "plugin.h"
 #endif
 
+#include <limits.h>
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
+
 /* This struct is used to pass information to routines called via
    elf_link_hash_traverse which must return failure.  */
 
 struct elf_info_failed
 {
   struct bfd_link_info *info;
-  bfd_boolean failed;
-};
-
-/* This structure is used to pass information to
-   _bfd_elf_link_find_version_dependencies.  */
-
-struct elf_find_verdep_info
-{
-  /* General link information.  */
-  struct bfd_link_info *info;
-  /* The number of dependencies.  */
-  unsigned int vers;
-  /* Whether we had a failure.  */
-  bfd_boolean failed;
+  bool failed;
 };
 
-static bfd_boolean _bfd_elf_fix_symbol_flags
+static bool _bfd_elf_fix_symbol_flags
   (struct elf_link_hash_entry *, struct elf_info_failed *);
 
 asection *
 _bfd_elf_section_for_symbol (struct elf_reloc_cookie *cookie,
 			     unsigned long r_symndx,
-			     bfd_boolean discard)
+			     bool discard)
 {
   if (r_symndx >= cookie->locsymcount
       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
@@ -110,7 +102,7 @@ _bfd_elf_define_linkage_sym (bfd *abfd,
   struct bfd_link_hash_entry *bh;
   const struct elf_backend_data *bed;
 
-  h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
+  h = elf_link_hash_lookup (elf_hash_table (info), name, false, false, false);
   if (h != NULL)
     {
       /* Zap symbol defined in an as-needed lib that wasn't linked.
@@ -125,7 +117,7 @@ _bfd_elf_define_linkage_sym (bfd *abfd,
 
   bed = get_elf_backend_data (abfd);
   if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL,
-					 sec, 0, NULL, FALSE, bed->collect,
+					 sec, 0, NULL, false, bed->collect,
 					 &bh))
     return NULL;
   h = (struct elf_link_hash_entry *) bh;
@@ -137,11 +129,11 @@ _bfd_elf_define_linkage_sym (bfd *abfd,
   if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
     h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
 
-  (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+  (*bed->elf_backend_hide_symbol) (info, h, true);
   return h;
 }
 
-bfd_boolean
+bool
 _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags;
@@ -152,7 +144,7 @@ _bfd_elf_create_got_section (bfd *abfd,
 
   /* This function may be called more than once.  */
   if (htab->sgot != NULL)
-    return TRUE;
+    return true;
 
   flags = bed->dynamic_sec_flags;
 
@@ -163,13 +155,13 @@ _bfd_elf_create_got_section (bfd *abfd,
 					   | SEC_READONLY));
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->srelgot = s;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->sgot = s;
 
   if (bed->want_got_plt)
@@ -177,7 +169,7 @@ _bfd_elf_create_got_section (bfd *abfd,
       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->sgotplt = s;
     }
 
@@ -194,14 +186,14 @@ _bfd_elf_create_got_section (bfd *abfd,
 				       "_GLOBAL_OFFSET_TABLE_");
       elf_hash_table (info)->hgot = h;
       if (h == NULL)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create a strtab to hold the dynamic symbol names.  */
-static bfd_boolean
+static bool
 _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_table *hash_table;
@@ -236,9 +228,9 @@ _bfd_elf_link_create_dynstrtab (bfd *abf
     {
       hash_table->dynstr = _bfd_elf_strtab_init ();
       if (hash_table->dynstr == NULL)
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Create some sections which will be filled in with dynamic linking
@@ -248,7 +240,7 @@ _bfd_elf_link_create_dynstrtab (bfd *abf
    addresses are assigned to the output sections.  We work out the
    actual contents and size of these sections later.  */
 
-bfd_boolean
+bool
 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags;
@@ -257,13 +249,13 @@ _bfd_elf_link_create_dynamic_sections (b
   struct elf_link_hash_entry *h;
 
   if (! is_elf_hash_table (info->hash))
-    return FALSE;
+    return false;
 
   if (elf_hash_table (info)->dynamic_sections_created)
-    return TRUE;
+    return true;
 
   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
-    return FALSE;
+    return false;
 
   abfd = elf_hash_table (info)->dynobj;
   bed = get_elf_backend_data (abfd);
@@ -277,7 +269,7 @@ _bfd_elf_link_create_dynamic_sections (b
       s = bfd_make_section_anyway_with_flags (abfd, ".interp",
 					      flags | SEC_READONLY);
       if (s == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Create sections to hold version informations.  These are removed
@@ -286,36 +278,36 @@ _bfd_elf_link_create_dynamic_sections (b
 					  flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version",
 					  flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, 1))
-    return FALSE;
+    return false;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_r",
 					  flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".dynsym",
 					  flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   elf_hash_table (info)->dynsym = s;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".dynstr",
 					  flags | SEC_READONLY);
   if (s == NULL)
-    return FALSE;
+    return false;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".dynamic", flags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
 
   /* The special symbol _DYNAMIC is always set to the start of the
      .dynamic section.  We could set _DYNAMIC in a linker script, but we
@@ -326,7 +318,7 @@ _bfd_elf_link_create_dynamic_sections (b
   h = _bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC");
   elf_hash_table (info)->hdynamic = h;
   if (h == NULL)
-    return FALSE;
+    return false;
 
   if (info->emit_hash)
     {
@@ -334,7 +326,7 @@ _bfd_elf_link_create_dynamic_sections (b
 					      flags | SEC_READONLY);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
     }
 
@@ -344,7 +336,7 @@ _bfd_elf_link_create_dynamic_sections (b
 					      flags | SEC_READONLY);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section:
 	 4 32-bit words followed by variable count of 64-bit words, then
 	 variable count of 32-bit words.  */
@@ -354,21 +346,32 @@ _bfd_elf_link_create_dynamic_sections (b
 	elf_section_data (s)->this_hdr.sh_entsize = 4;
     }
 
+  if (info->enable_dt_relr)
+    {
+      s = bfd_make_section_anyway_with_flags (abfd, ".relr.dyn",
+					      (bed->dynamic_sec_flags
+					       | SEC_READONLY));
+      if (s == NULL
+	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
+	return false;
+      elf_hash_table (info)->srelrdyn = s;
+    }
+
   /* Let the backend create the rest of the sections.  This lets the
      backend set the right flags.  The backend will normally create
      the .got and .plt sections.  */
   if (bed->elf_backend_create_dynamic_sections == NULL
       || ! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
-    return FALSE;
+    return false;
 
-  elf_hash_table (info)->dynamic_sections_created = TRUE;
+  elf_hash_table (info)->dynamic_sections_created = true;
 
-  return TRUE;
+  return true;
 }
 
 /* Create dynamic sections when linking against a dynamic object.  */
 
-bfd_boolean
+bool
 _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags, pltflags;
@@ -395,7 +398,7 @@ _bfd_elf_create_dynamic_sections (bfd *a
   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
   htab->splt = s;
 
   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
@@ -406,7 +409,7 @@ _bfd_elf_create_dynamic_sections (bfd *a
 				       "_PROCEDURE_LINKAGE_TABLE_");
       elf_hash_table (info)->hplt = h;
       if (h == NULL)
-	return FALSE;
+	return false;
     }
 
   s = bfd_make_section_anyway_with_flags (abfd,
@@ -415,11 +418,11 @@ _bfd_elf_create_dynamic_sections (bfd *a
 					  flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->srelplt = s;
 
   if (! _bfd_elf_create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   if (bed->want_dynbss)
     {
@@ -432,7 +435,7 @@ _bfd_elf_create_dynamic_sections (bfd *a
       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
 					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
-	return FALSE;
+	return false;
       htab->sdynbss = s;
 
       if (bed->want_dynrelro)
@@ -443,7 +446,7 @@ _bfd_elf_create_dynamic_sections (bfd *a
 	  s = bfd_make_section_anyway_with_flags (abfd, ".data.rel.ro",
 						  flags);
 	  if (s == NULL)
-	    return FALSE;
+	    return false;
 	  htab->sdynrelro = s;
 	}
 
@@ -466,7 +469,7 @@ _bfd_elf_create_dynamic_sections (bfd *a
 						  flags | SEC_READONLY);
 	  if (s == NULL
 	      || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	    return FALSE;
+	    return false;
 	  htab->srelbss = s;
 
 	  if (bed->want_dynrelro)
@@ -477,13 +480,13 @@ _bfd_elf_create_dynamic_sections (bfd *a
 		    flags | SEC_READONLY));
 	      if (s == NULL
 		  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-		return FALSE;
+		return false;
 	      htab->sreldynrelro = s;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Record a new dynamic symbol.  We record the dynamic symbols as we
@@ -494,7 +497,7 @@ _bfd_elf_create_dynamic_sections (bfd *a
    symbol should be in the dynamic symbol table, but only if there is
    one.  */
 
-bfd_boolean
+bool
 bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
 				    struct elf_link_hash_entry *h)
 {
@@ -505,6 +508,16 @@ bfd_elf_link_record_dynamic_symbol (stru
       const char *name;
       size_t indx;
 
+      if (h->root.type == bfd_link_hash_defined
+	  || h->root.type == bfd_link_hash_defweak)
+	{
+	  /* An IR symbol should not be made dynamic.  */
+	  if (h->root.u.def.section != NULL
+	      && h->root.u.def.section->owner != NULL
+	      && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)
+	    return true;
+	}
+
       /* XXX: The ABI draft says the linker must turn hidden and
 	 internal symbols into STB_LOCAL symbols when producing the
 	 DSO. However, if ld.so honors st_other in the dynamic table,
@@ -517,8 +530,15 @@ bfd_elf_link_record_dynamic_symbol (stru
 	      && h->root.type != bfd_link_hash_undefweak)
 	    {
 	      h->forced_local = 1;
-	      if (!elf_hash_table (info)->is_relocatable_executable)
-		return TRUE;
+	      if (!elf_hash_table (info)->is_relocatable_executable
+		  || ((h->root.type == bfd_link_hash_defined
+		       || h->root.type == bfd_link_hash_defweak)
+		      && h->root.u.def.section->owner != NULL
+		      && h->root.u.def.section->owner->no_export)
+		  || (h->root.type == bfd_link_hash_common
+		      && h->root.u.c.p->section->owner != NULL
+		      && h->root.u.c.p->section->owner->no_export))
+		return true;
 	    }
 
 	default:
@@ -534,7 +554,7 @@ bfd_elf_link_record_dynamic_symbol (stru
 	  /* Create a strtab to hold the dynamic symbol names.  */
 	  elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
 	  if (dynstr == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       /* We don't put any version information in the dynamic string
@@ -555,11 +575,11 @@ bfd_elf_link_record_dynamic_symbol (stru
 	*p = ELF_VER_CHR;
 
       if (indx == (size_t) -1)
-	return FALSE;
+	return false;
       h->dynstr_index = indx;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Mark a symbol dynamic.  */
@@ -595,22 +615,22 @@ bfd_elf_link_mark_dynamic_symbol (struct
 /* Record an assignment to a symbol made by a linker script.  We need
    this in case some dynamic object refers to this symbol.  */
 
-bfd_boolean
+bool
 bfd_elf_record_link_assignment (bfd *output_bfd,
 				struct bfd_link_info *info,
 				const char *name,
-				bfd_boolean provide,
-				bfd_boolean hidden)
+				bool provide,
+				bool hidden)
 {
   struct elf_link_hash_entry *h, *hv;
   struct elf_link_hash_table *htab;
   const struct elf_backend_data *bed;
 
   if (!is_elf_hash_table (info->hash))
-    return TRUE;
+    return true;
 
   htab = elf_hash_table (info);
-  h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE);
+  h = elf_link_hash_lookup (htab, name, !provide, true, false);
   if (h == NULL)
     return provide;
 
@@ -672,7 +692,7 @@ bfd_elf_record_link_assignment (bfd *out
       break;
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
   /* If this symbol is being provided by the linker script, and it is
@@ -701,7 +721,7 @@ bfd_elf_record_link_assignment (bfd *out
       bed = get_elf_backend_data (output_bfd);
       if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
 	h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
-      (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+      (*bed->elf_backend_hide_symbol) (info, h, true);
     }
 
   /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects
@@ -720,7 +740,7 @@ bfd_elf_record_link_assignment (bfd *out
       && h->dynindx == -1)
     {
       if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
 
       /* If this is a weak defined symbol, and we know a corresponding
 	 real symbol from the same dynamic object, make sure the real
@@ -731,11 +751,11 @@ bfd_elf_record_link_assignment (bfd *out
 
 	  if (def->dynindx == -1
 	      && !bfd_elf_link_record_dynamic_symbol (info, def))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Record a new local dynamic symbol.  Returns 0 on failure, 1 on
@@ -747,7 +767,7 @@ bfd_elf_link_record_local_dynamic_symbol
 					  bfd *input_bfd,
 					  long input_indx)
 {
-  bfd_size_type amt;
+  size_t amt;
   struct elf_link_local_dynamic_entry *entry;
   struct elf_link_hash_table *eht;
   struct elf_strtab_hash *dynstr;
@@ -805,7 +825,7 @@ bfd_elf_link_record_local_dynamic_symbol
 	return 0;
     }
 
-  dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE);
+  dynstr_index = _bfd_elf_strtab_add (dynstr, name, false);
   if (dynstr_index == (size_t) -1)
     return 0;
   entry->isym.st_name = dynstr_index;
@@ -846,43 +866,43 @@ _bfd_elf_link_lookup_local_dynindx (stru
    them are removed because they are marked as local.  This is called
    via elf_link_hash_traverse.  */
 
-static bfd_boolean
+static bool
 elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h,
 				      void *data)
 {
   size_t *count = (size_t *) data;
 
   if (h->forced_local)
-    return TRUE;
+    return true;
 
   if (h->dynindx != -1)
     h->dynindx = ++(*count);
 
-  return TRUE;
+  return true;
 }
 
 
 /* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with
    STB_LOCAL binding.  */
 
-static bfd_boolean
+static bool
 elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h,
 					    void *data)
 {
   size_t *count = (size_t *) data;
 
   if (!h->forced_local)
-    return TRUE;
+    return true;
 
   if (h->dynindx != -1)
     h->dynindx = ++(*count);
 
-  return TRUE;
+  return true;
 }
 
 /* Return true if the dynamic symbol for a given section should be
    omitted when creating a shared library.  */
-bfd_boolean
+bool
 _bfd_elf_omit_section_dynsym_default (bfd *output_bfd ATTRIBUTE_UNUSED,
 				      struct bfd_link_info *info,
 				      asection *p)
@@ -908,17 +928,17 @@ _bfd_elf_omit_section_dynsym_default (bf
       /* There shouldn't be section relative relocations
 	 against any other section.  */
     default:
-      return TRUE;
+      return true;
     }
 }
 
-bfd_boolean
+bool
 _bfd_elf_omit_section_dynsym_all
     (bfd *output_bfd ATTRIBUTE_UNUSED,
      struct bfd_link_info *info ATTRIBUTE_UNUSED,
      asection *p ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* Assign dynsym indices.  In a shared library we generate a section
@@ -936,7 +956,7 @@ _bfd_elf_link_renumber_dynsyms (bfd *out
 				unsigned long *section_sym_count)
 {
   unsigned long dynsymcount = 0;
-  bfd_boolean do_sec = section_sym_count != NULL;
+  bool do_sec = section_sym_count != NULL;
 
   if (bfd_link_pic (info)
       || elf_hash_table (info)->is_relocatable_executable)
@@ -989,20 +1009,20 @@ _bfd_elf_link_renumber_dynsyms (bfd *out
 
 static void
 elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h,
-		    const Elf_Internal_Sym *isym, asection *sec,
-		    bfd_boolean definition, bfd_boolean dynamic)
+		    unsigned int st_other, asection *sec,
+		    bool definition, bool dynamic)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
 
   /* If st_other has a processor-specific meaning, specific
      code might be needed here.  */
   if (bed->elf_backend_merge_symbol_attribute)
-    (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
+    (*bed->elf_backend_merge_symbol_attribute) (h, st_other, definition,
 						dynamic);
 
   if (!dynamic)
     {
-      unsigned symvis = ELF_ST_VISIBILITY (isym->st_other);
+      unsigned symvis = ELF_ST_VISIBILITY (st_other);
       unsigned hvis = ELF_ST_VISIBILITY (h->other);
 
       /* Keep the most constraining visibility.  Leave the remainder
@@ -1011,7 +1031,7 @@ elf_merge_st_other (bfd *abfd, struct el
 	h->other = symvis | (h->other & ~ELF_ST_VISIBILITY (-1));
     }
   else if (definition
-	   && ELF_ST_VISIBILITY (isym->st_other) != STV_DEFAULT
+	   && ELF_ST_VISIBILITY (st_other) != STV_DEFAULT
 	   && (sec->flags & SEC_READONLY) == 0)
     h->protected_def = 1;
 }
@@ -1029,7 +1049,7 @@ elf_merge_st_other (bfd *abfd, struct el
    to change.  By OK to change, we mean that we shouldn't warn if the
    type or size does change.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_merge_symbol (bfd *abfd,
 		       struct bfd_link_info *info,
 		       const char *name,
@@ -1038,13 +1058,13 @@ _bfd_elf_merge_symbol (bfd *abfd,
 		       bfd_vma *pvalue,
 		       struct elf_link_hash_entry **sym_hash,
 		       bfd **poldbfd,
-		       bfd_boolean *pold_weak,
+		       bool *pold_weak,
 		       unsigned int *pold_alignment,
-		       bfd_boolean *skip,
-		       bfd_boolean *override,
-		       bfd_boolean *type_change_ok,
-		       bfd_boolean *size_change_ok,
-		       bfd_boolean *matched)
+		       bool *skip,
+		       bfd **override,
+		       bool *type_change_ok,
+		       bool *size_change_ok,
+		       bool *matched)
 {
   asection *sec, *oldsec;
   struct elf_link_hash_entry *h;
@@ -1052,25 +1072,26 @@ _bfd_elf_merge_symbol (bfd *abfd,
   struct elf_link_hash_entry *flip;
   int bind;
   bfd *oldbfd;
-  bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
-  bfd_boolean newweak, oldweak, newfunc, oldfunc;
+  bool newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
+  bool newweak, oldweak, newfunc, oldfunc;
   const struct elf_backend_data *bed;
   char *new_version;
-  bfd_boolean default_sym = *matched;
+  bool default_sym = *matched;
+  struct elf_link_hash_table *htab;
 
-  *skip = FALSE;
-  *override = FALSE;
+  *skip = false;
+  *override = NULL;
 
   sec = *psec;
   bind = ELF_ST_BIND (sym->st_info);
 
   if (! bfd_is_und_section (sec))
-    h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
+    h = elf_link_hash_lookup (elf_hash_table (info), name, true, false, false);
   else
     h = ((struct elf_link_hash_entry *)
-	 bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
+	 bfd_wrapped_link_hash_lookup (abfd, info, name, true, false, false));
   if (h == NULL)
-    return FALSE;
+    return false;
   *sym_hash = h;
 
   bed = get_elf_backend_data (abfd);
@@ -1109,19 +1130,19 @@ _bfd_elf_merge_symbol (bfd *abfd,
   if (!*matched)
     {
       if (hi == h || h->root.type == bfd_link_hash_new)
-	*matched = TRUE;
+	*matched = true;
       else
 	{
 	  /* OLD_HIDDEN is true if the existing symbol is only visible
 	     to the symbol with the same symbol version.  NEW_HIDDEN is
 	     true if the new symbol is only visible to the symbol with
 	     the same symbol version.  */
-	  bfd_boolean old_hidden = h->versioned == versioned_hidden;
-	  bfd_boolean new_hidden = hi->versioned == versioned_hidden;
+	  bool old_hidden = h->versioned == versioned_hidden;
+	  bool new_hidden = hi->versioned == versioned_hidden;
 	  if (!old_hidden && !new_hidden)
 	    /* The new symbol matches the existing symbol if both
 	       aren't hidden.  */
-	    *matched = TRUE;
+	    *matched = true;
 	  else
 	    {
 	      /* OLD_VERSION is the symbol version of the existing
@@ -1187,6 +1208,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
      symbols.  */
   bfd_elf_link_mark_dynamic_symbol (info, h, sym);
 
+  htab = elf_hash_table (info);
+
   /* NEWDYN and OLDDYN indicate whether the new or old symbol,
      respectively, is from a dynamic object.  */
 
@@ -1225,7 +1248,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
   if (h->root.type == bfd_link_hash_new)
     {
       h->non_elf = 0;
-      return TRUE;
+      return true;
     }
 
   /* In cases involving weak versioned symbols, we may wind up trying
@@ -1238,9 +1261,9 @@ _bfd_elf_merge_symbol (bfd *abfd,
       && (newweak || oldweak)
       && ((abfd->flags & DYNAMIC) == 0
 	  || !h->def_regular))
-    return TRUE;
+    return true;
 
-  olddyn = FALSE;
+  olddyn = false;
   if (oldbfd != NULL)
     olddyn = (oldbfd->flags & DYNAMIC) != 0;
   else if (oldsec != NULL)
@@ -1250,14 +1273,26 @@ _bfd_elf_merge_symbol (bfd *abfd,
       olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
     }
 
-  /* Handle a case where plugin_notice won't be called and thus won't
-     set the non_ir_ref flags on the first pass over symbols.  */
-  if (oldbfd != NULL
-      && (oldbfd->flags & BFD_PLUGIN) != (abfd->flags & BFD_PLUGIN)
-      && newdyn != olddyn)
+  /* Set non_ir_ref_dynamic only when not handling DT_NEEDED entries.  */
+  if (!htab->handling_dt_needed
+      && oldbfd != NULL
+      && (oldbfd->flags & BFD_PLUGIN) != (abfd->flags & BFD_PLUGIN))
     {
-      h->root.non_ir_ref_dynamic = TRUE;
-      hi->root.non_ir_ref_dynamic = TRUE;
+      if (newdyn != olddyn)
+	{
+	  /* Handle a case where plugin_notice won't be called and thus
+	     won't set the non_ir_ref flags on the first pass over
+	     symbols.  */
+	  h->root.non_ir_ref_dynamic = true;
+	  hi->root.non_ir_ref_dynamic = true;
+	}
+      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;
+	  hi->root.u.undef.abfd = oldbfd;
+	}
     }
 
   /* NEWDEF and OLDDEF indicate whether the new or old symbol,
@@ -1293,8 +1328,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
       if (newdyn
 	  && !olddyn)
 	{
-	  *skip = TRUE;
-	  return TRUE;
+	  *skip = true;
+	  return true;
 	}
 
       /* When adding a symbol from a regular object file after we have
@@ -1305,7 +1340,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	  && olddyn)
 	{
 	  h = hi;
-	  (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+	  (*bed->elf_backend_hide_symbol) (info, h, true);
 	  h->forced_local = 0;
 	  h->ref_dynamic = 0;
 	  h->def_dynamic = 0;
@@ -1320,7 +1355,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	      h->root.type = bfd_link_hash_new;
 	      h->root.u.undef.abfd = NULL;
 	    }
-	  return TRUE;
+	  return true;
 	}
     }
 
@@ -1334,7 +1369,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
       && (ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS))
     {
       bfd *ntbfd, *tbfd;
-      bfd_boolean ntdef, tdef;
+      bool ntdef, tdef;
       asection *ntsec, *tsec;
 
       if (h->type == STT_TLS)
@@ -1382,7 +1417,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	   h->root.root.string, tbfd, ntbfd, ntsec);
 
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* If the old symbol has non-default visibility, we ignore the new
@@ -1391,7 +1426,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
       && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
       && !bfd_is_und_section (sec))
     {
-      *skip = TRUE;
+      *skip = true;
       /* Make sure this symbol is dynamic.  */
       h->ref_dynamic = 1;
       hi->ref_dynamic = 1;
@@ -1402,7 +1437,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
       if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
 	return bfd_elf_link_record_dynamic_symbol (info, h);
       else
-	return TRUE;
+	return true;
     }
   else if (!newdyn
 	   && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
@@ -1428,7 +1463,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 		{
 		  /* If the new symbol is hidden or internal, completely undo
 		     any dynamic link state.  */
-		  (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+		  (*bed->elf_backend_hide_symbol) (info, h, true);
 		  h->forced_local = 0;
 		  h->ref_dynamic = 0;
 		}
@@ -1468,7 +1503,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	{
 	  /* If the new symbol is hidden or internal, completely undo
 	     any dynamic link state.  */
-	  (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+	  (*bed->elf_backend_hide_symbol) (info, h, true);
 	  h->forced_local = 0;
 	  h->ref_dynamic = 0;
 	}
@@ -1478,7 +1513,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
       /* FIXME: Should we check type and size for protected symbol?  */
       h->size = 0;
       h->type = 0;
-      return TRUE;
+      return true;
     }
 
   /* If a new weak symbol definition comes from a regular file and the
@@ -1498,13 +1533,13 @@ _bfd_elf_merge_symbol (bfd *abfd,
      we warn properly when dynamic library symbols are overridden.  */
 
   if (newdef && !newdyn && (olddyn || h->root.ldscript_def))
-    newweak = FALSE;
+    newweak = false;
   if (olddef && newdyn)
-    oldweak = FALSE;
+    oldweak = false;
 
   /* Allow changes between different types of function symbol.  */
   if (newfunc && oldfunc)
-    *type_change_ok = TRUE;
+    *type_change_ok = true;
 
   /* It's OK to change the type if either the existing symbol or the
      new symbol is weak.  A type change is also OK if the old symbol
@@ -1514,14 +1549,14 @@ _bfd_elf_merge_symbol (bfd *abfd,
       || newweak
       || (newdef
 	  && h->root.type == bfd_link_hash_undefined))
-    *type_change_ok = TRUE;
+    *type_change_ok = true;
 
   /* It's OK to change the size if either the existing symbol or the
      new symbol is weak, or if the old symbol is undefined.  */
 
   if (*type_change_ok
       || h->root.type == bfd_link_hash_undefined)
-    *size_change_ok = TRUE;
+    *size_change_ok = true;
 
   /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
      symbol, respectively, appears to be a common symbol in a dynamic
@@ -1553,9 +1588,9 @@ _bfd_elf_merge_symbol (bfd *abfd,
       && (sec->flags & SEC_LOAD) == 0
       && sym->st_size > 0
       && !newfunc)
-    newdyncommon = TRUE;
+    newdyncommon = true;
   else
-    newdyncommon = FALSE;
+    newdyncommon = false;
 
   if (olddyn
       && olddef
@@ -1565,16 +1600,16 @@ _bfd_elf_merge_symbol (bfd *abfd,
       && (h->root.u.def.section->flags & SEC_LOAD) == 0
       && h->size > 0
       && !oldfunc)
-    olddyncommon = TRUE;
+    olddyncommon = true;
   else
-    olddyncommon = FALSE;
+    olddyncommon = false;
 
   /* We now know everything about the old and new symbols.  We ask the
      backend to check if we can merge them.  */
   if (bed->merge_symbol != NULL)
     {
       if (!bed->merge_symbol (h, sym, psec, newdef, olddef, oldbfd, oldsec))
-	return FALSE;
+	return false;
       sec = *psec;
     }
 
@@ -1589,8 +1624,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
       /* Handle a multiple definition.  */
       (*info->callbacks->multiple_definition) (info, &h->root,
 					       abfd, sec, *pvalue);
-      *skip = TRUE;
-      return TRUE;
+      *skip = true;
+      return true;
     }
 
   /* If both the old and the new symbols look like common symbols in a
@@ -1612,7 +1647,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
       if (sym->st_size > h->size)
 	h->size = sym->st_size;
 
-      *size_change_ok = TRUE;
+      *size_change_ok = true;
     }
 
   /* If we are looking at a dynamic object, and we have found a
@@ -1635,12 +1670,12 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	  || (h->root.type == bfd_link_hash_common
 	      && (newweak || newfunc))))
     {
-      *override = TRUE;
-      newdef = FALSE;
-      newdyncommon = FALSE;
+      *override = abfd;
+      newdef = false;
+      newdyncommon = false;
 
       *psec = sec = bfd_und_section_ptr;
-      *size_change_ok = TRUE;
+      *size_change_ok = true;
 
       /* If we get here when the old symbol is a common symbol, then
 	 we are explicitly letting it override a weak symbol or
@@ -1649,7 +1684,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	 change warning may still be appropriate.  */
 
       if (h->root.type == bfd_link_hash_common)
-	*type_change_ok = TRUE;
+	*type_change_ok = true;
     }
 
   /* Handle the special case of an old common symbol merging with a
@@ -1661,12 +1696,12 @@ _bfd_elf_merge_symbol (bfd *abfd,
   if (newdyncommon
       && h->root.type == bfd_link_hash_common)
     {
-      *override = TRUE;
-      newdef = FALSE;
-      newdyncommon = FALSE;
+      *override = oldbfd;
+      newdef = false;
+      newdyncommon = false;
       *pvalue = sym->st_size;
       *psec = sec = bed->common_section (oldsec);
-      *size_change_ok = TRUE;
+      *size_change_ok = true;
     }
 
   /* Skip weak definitions of symbols that are already defined.  */
@@ -1677,20 +1712,20 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	    && (oldbfd->flags & BFD_PLUGIN) != 0
 	    && (abfd->flags & BFD_PLUGIN) == 0))
 	{
-	  newdef = FALSE;
-	  *skip = TRUE;
+	  newdef = false;
+	  *skip = true;
 	}
 
       /* Merge st_other.  If the symbol already has a dynamic index,
 	 but visibility says it should not be visible, turn it into a
 	 local symbol.  */
-      elf_merge_st_other (abfd, h, sym, sec, newdef, newdyn);
+      elf_merge_st_other (abfd, h, sym->st_other, sec, newdef, newdyn);
       if (h->dynindx != -1)
 	switch (ELF_ST_VISIBILITY (h->other))
 	  {
 	  case STV_INTERNAL:
 	  case STV_HIDDEN:
-	    (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+	    (*bed->elf_backend_hide_symbol) (info, h, true);
 	    break;
 	  }
     }
@@ -1720,10 +1755,10 @@ _bfd_elf_merge_symbol (bfd *abfd,
 
       h->root.type = bfd_link_hash_undefined;
       h->root.u.undef.abfd = h->root.u.def.section->owner;
-      *size_change_ok = TRUE;
+      *size_change_ok = true;
 
-      olddef = FALSE;
-      olddyncommon = FALSE;
+      olddef = false;
+      olddyncommon = false;
 
       /* We again permit a type change when a common symbol may be
 	 overriding a function.  */
@@ -1738,7 +1773,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	      h->def_dynamic = 0;
 	      h->type = STT_NOTYPE;
 	    }
-	  *type_change_ok = TRUE;
+	  *type_change_ok = true;
 	}
 
       if (hi->root.type == bfd_link_hash_indirect)
@@ -1777,14 +1812,14 @@ _bfd_elf_merge_symbol (bfd *abfd,
       BFD_ASSERT (pold_alignment);
       *pold_alignment = h->root.u.def.section->alignment_power;
 
-      olddef = FALSE;
-      olddyncommon = FALSE;
+      olddef = false;
+      olddyncommon = false;
 
       h->root.type = bfd_link_hash_undefined;
       h->root.u.undef.abfd = h->root.u.def.section->owner;
 
-      *size_change_ok = TRUE;
-      *type_change_ok = TRUE;
+      *size_change_ok = true;
+      *type_change_ok = true;
 
       if (hi->root.type == bfd_link_hash_indirect)
 	flip = hi;
@@ -1809,7 +1844,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function is called to create an indirect symbol from the
@@ -1817,7 +1852,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
    symbol is described by H, NAME, SYM, SEC, and VALUE.  We
    set DYNSYM if the new indirect symbol is dynamic.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_add_default_symbol (bfd *abfd,
 			     struct bfd_link_info *info,
 			     struct elf_link_hash_entry *h,
@@ -1826,25 +1861,25 @@ _bfd_elf_add_default_symbol (bfd *abfd,
 			     asection *sec,
 			     bfd_vma value,
 			     bfd **poldbfd,
-			     bfd_boolean *dynsym)
+			     bool *dynsym)
 {
-  bfd_boolean type_change_ok;
-  bfd_boolean size_change_ok;
-  bfd_boolean skip;
+  bool type_change_ok;
+  bool size_change_ok;
+  bool skip;
   char *shortname;
   struct elf_link_hash_entry *hi;
   struct bfd_link_hash_entry *bh;
   const struct elf_backend_data *bed;
-  bfd_boolean collect;
-  bfd_boolean dynamic;
-  bfd_boolean override;
+  bool collect;
+  bool dynamic;
+  bfd *override;
   char *p;
   size_t len, shortlen;
   asection *tmp_sec;
-  bfd_boolean matched;
+  bool matched;
 
   if (h->versioned == unversioned || h->versioned == versioned_hidden)
-    return TRUE;
+    return true;
 
   /* If this symbol has a version, and it is the default version, we
      create an indirect symbol from the default name to the fully
@@ -1856,14 +1891,14 @@ _bfd_elf_add_default_symbol (bfd *abfd,
       if (p == NULL)
 	{
 	  h->versioned = unversioned;
-	  return TRUE;
+	  return true;
 	}
       else
 	{
 	  if (p[1] != ELF_VER_CHR)
 	    {
 	      h->versioned = versioned_hidden;
-	      return TRUE;
+	      return true;
 	    }
 	  else
 	    h->versioned = versioned;
@@ -1874,7 +1909,7 @@ _bfd_elf_add_default_symbol (bfd *abfd,
       /* PR ld/19073: We may see an unversioned definition after the
 	 default version.  */
       if (p == NULL)
-	return TRUE;
+	return true;
     }
 
   bed = get_elf_backend_data (abfd);
@@ -1884,7 +1919,7 @@ _bfd_elf_add_default_symbol (bfd *abfd,
   shortlen = p - name;
   shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1);
   if (shortname == NULL)
-    return FALSE;
+    return false;
   memcpy (shortname, name, shortlen);
   shortname[shortlen] = '\0';
 
@@ -1892,14 +1927,14 @@ _bfd_elf_add_default_symbol (bfd *abfd,
      symbol with this name.  For the purposes of the merge, act as
      though we were defining the symbol we just defined, although we
      actually going to define an indirect symbol.  */
-  type_change_ok = FALSE;
-  size_change_ok = FALSE;
-  matched = TRUE;
+  type_change_ok = false;
+  size_change_ok = false;
+  matched = true;
   tmp_sec = sec;
   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
 			      &hi, poldbfd, NULL, NULL, &skip, &override,
 			      &type_change_ok, &size_change_ok, &matched))
-    return FALSE;
+    return false;
 
   if (skip)
     goto nondefault;
@@ -1913,14 +1948,14 @@ _bfd_elf_add_default_symbol (bfd *abfd,
 	 command line rather than via --version-script.  */
       if (hi->verinfo.vertree == NULL && info->version_info != NULL)
 	{
-	  bfd_boolean hide;
+	  bool hide;
 
 	  hi->verinfo.vertree
 	    = bfd_find_version_for_sym (info->version_info,
 					hi->root.root.string, &hide);
 	  if (hi->verinfo.vertree != NULL && hide)
 	    {
-	      (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
+	      (*bed->elf_backend_hide_symbol) (info, hi, true);
 	      goto nondefault;
 	    }
 	}
@@ -1948,8 +1983,8 @@ _bfd_elf_add_default_symbol (bfd *abfd,
 	  if (! (_bfd_generic_link_add_one_symbol
 		 (info, abfd, shortname, BSF_INDIRECT,
 		  bfd_ind_section_ptr,
-		  0, name, FALSE, collect, &bh)))
-	    return FALSE;
+		  0, name, false, collect, &bh)))
+	    return false;
 	  hi = (struct elf_link_hash_entry *) bh;
 	}
     }
@@ -1987,7 +2022,7 @@ _bfd_elf_add_default_symbol (bfd *abfd,
 	      || hi->def_regular)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, hi))
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -2011,6 +2046,10 @@ _bfd_elf_add_default_symbol (bfd *abfd,
       ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
       (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi);
 
+      /* If we first saw a reference to SHORTNAME with non-default
+	 visibility, merge that visibility to the @@VER symbol.  */
+      elf_merge_st_other (abfd, ht, hi->other, sec, true, dynamic);
+
       /* A reference to the SHORTNAME symbol from a dynamic library
 	 will be satisfied by the versioned symbol at runtime.  In
 	 effect, we have a reference to the versioned symbol.  */
@@ -2026,12 +2065,12 @@ _bfd_elf_add_default_symbol (bfd *abfd,
 	      if (! bfd_link_executable (info)
 		  || hi->def_dynamic
 		  || hi->ref_dynamic)
-		*dynsym = TRUE;
+		*dynsym = true;
 	    }
 	  else
 	    {
 	      if (hi->ref_regular)
-		*dynsym = TRUE;
+		*dynsym = true;
 	    }
 	}
     }
@@ -2039,27 +2078,44 @@ _bfd_elf_add_default_symbol (bfd *abfd,
   /* We also need to define an indirection from the nondefault version
      of the symbol.  */
 
-nondefault:
+ nondefault:
   len = strlen (name);
   shortname = (char *) bfd_hash_allocate (&info->hash->table, len);
   if (shortname == NULL)
-    return FALSE;
+    return false;
   memcpy (shortname, name, shortlen);
   memcpy (shortname + shortlen, p + 1, len - shortlen);
 
   /* Once again, merge with any existing symbol.  */
-  type_change_ok = FALSE;
-  size_change_ok = FALSE;
+  type_change_ok = false;
+  size_change_ok = false;
   tmp_sec = sec;
   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
 			      &hi, poldbfd, NULL, NULL, &skip, &override,
 			      &type_change_ok, &size_change_ok, &matched))
-    return FALSE;
+    return false;
 
   if (skip)
-    return TRUE;
-
-  if (override)
+    {
+      if (!dynamic
+	  && h->root.type == bfd_link_hash_defweak
+	  && hi->root.type == bfd_link_hash_defined)
+	{
+	  /* We are handling a weak sym@@ver and attempting to define
+	     a weak sym@ver, but _bfd_elf_merge_symbol said to skip the
+	     new weak sym@ver because there is already a strong sym@ver.
+	     However, sym@ver and sym@@ver are really the same symbol.
+	     The existing strong sym@ver ought to override sym@@ver.  */
+	  h->root.type = bfd_link_hash_defined;
+	  h->root.u.def.section = hi->root.u.def.section;
+	  h->root.u.def.value = hi->root.u.def.value;
+	  hi->root.type = bfd_link_hash_indirect;
+	  hi->root.u.i.link = &h->root;
+	}
+      else
+	return true;
+    }
+  else if (override)
     {
       /* Here SHORTNAME is a versioned name, so we don't expect to see
 	 the type of override we do in the case above unless it is
@@ -2070,63 +2126,68 @@ nondefault:
 	  /* xgettext:c-format */
 	  (_("%pB: unexpected redefinition of indirect versioned symbol `%s'"),
 	   abfd, shortname);
+      return true;
     }
   else
     {
       bh = &hi->root;
       if (! (_bfd_generic_link_add_one_symbol
 	     (info, abfd, shortname, BSF_INDIRECT,
-	      bfd_ind_section_ptr, 0, name, FALSE, collect, &bh)))
-	return FALSE;
+	      bfd_ind_section_ptr, 0, name, false, collect, &bh)))
+	return false;
       hi = (struct elf_link_hash_entry *) bh;
+    }
 
-      /* If there is a duplicate definition somewhere, then HI may not
-	 point to an indirect symbol.  We will have reported an error
-	 to the user in that case.  */
+  /* If there is a duplicate definition somewhere, then HI may not
+     point to an indirect symbol.  We will have reported an error
+     to the user in that case.  */
+  if (hi->root.type == bfd_link_hash_indirect)
+    {
+      (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
+      h->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
+      hi->dynamic_def |= h->dynamic_def;
+
+      /* If we first saw a reference to @VER symbol with
+	 non-default visibility, merge that visibility to the
+	 @@VER symbol.  */
+      elf_merge_st_other (abfd, h, hi->other, sec, true, dynamic);
 
-      if (hi->root.type == bfd_link_hash_indirect)
+      /* See if the new flags lead us to realize that the symbol
+	 must be dynamic.  */
+      if (! *dynsym)
 	{
-	  (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
-	  h->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
-	  hi->dynamic_def |= h->dynamic_def;
-
-	  /* See if the new flags lead us to realize that the symbol
-	     must be dynamic.  */
-	  if (! *dynsym)
-	    {
-	      if (! dynamic)
-		{
-		  if (! bfd_link_executable (info)
-		      || hi->ref_dynamic)
-		    *dynsym = TRUE;
-		}
-	      else
-		{
-		  if (hi->ref_regular)
-		    *dynsym = TRUE;
-		}
+	  if (! dynamic)
+	    {
+	      if (! bfd_link_executable (info)
+		  || hi->ref_dynamic)
+		*dynsym = true;
+	    }
+	  else
+	    {
+	      if (hi->ref_regular)
+		*dynsym = true;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This routine is used to export all defined symbols into the dynamic
    symbol table.  It is called via elf_link_hash_traverse.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
 {
   struct elf_info_failed *eif = (struct elf_info_failed *) data;
 
   /* Ignore indirect symbols.  These are added by the versioning code.  */
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   /* Ignore this if we won't export it.  */
   if (!eif->info->export_dynamic && !h->dynamic)
-    return TRUE;
+    return true;
 
   if (h->dynindx == -1
       && (h->def_regular || h->ref_regular)
@@ -2135,27 +2196,144 @@ _bfd_elf_export_symbol (struct elf_link_
     {
       if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
 	{
-	  eif->failed = TRUE;
-	  return FALSE;
+	  eif->failed = true;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
+/* Return the glibc version reference if VERSION_DEP is added to the
+   list of glibc version dependencies successfully.  VERSION_DEP will
+   be put into the .gnu.version_r section.  */
+
+static Elf_Internal_Verneed *
+elf_link_add_glibc_verneed (struct elf_find_verdep_info *rinfo,
+			    Elf_Internal_Verneed *glibc_verref,
+			    const char *version_dep)
+{
+  Elf_Internal_Verneed *t;
+  Elf_Internal_Vernaux *a;
+  size_t amt;
+
+  if (glibc_verref != NULL)
+    {
+      t = glibc_verref;
+
+      for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
+	{
+	  /* Return if VERSION_DEP dependency has been added.  */
+	  if (a->vna_nodename == version_dep
+	      || strcmp (a->vna_nodename, version_dep) == 0)
+	    return t;
+	}
+    }
+  else
+    {
+      bool is_glibc;
+
+      for (t = elf_tdata (rinfo->info->output_bfd)->verref;
+	   t != NULL;
+	   t = t->vn_nextref)
+	{
+	  const char *soname = bfd_elf_get_dt_soname (t->vn_bfd);
+	  if (soname != NULL && startswith (soname, "libc.so."))
+	    break;
+	}
+
+      /* Skip the shared library if it isn't libc.so.  */
+      if (t == NULL)
+	return t;
+
+      is_glibc = false;
+      for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
+	{
+	  /* Return if VERSION_DEP dependency has been added.  */
+	  if (a->vna_nodename == version_dep
+	      || strcmp (a->vna_nodename, version_dep) == 0)
+	    return t;
+
+	  /* Check if libc.so provides GLIBC_2.XX version.  */
+	  if (!is_glibc && startswith (a->vna_nodename, "GLIBC_2."))
+	    is_glibc = true;
+	}
+
+      /* Skip if it isn't linked against glibc.  */
+      if (!is_glibc)
+	return NULL;
+    }
+
+  amt = sizeof *a;
+  a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
+  if (a == NULL)
+    {
+      rinfo->failed = true;
+      return NULL;
+    }
+
+  a->vna_nodename = version_dep;
+  a->vna_flags = 0;
+  a->vna_nextptr = t->vn_auxptr;
+  a->vna_other = rinfo->vers + 1;
+  ++rinfo->vers;
+
+  t->vn_auxptr = a;
+
+  return t;
+}
+
+/* Add VERSION_DEP to the list of version dependencies when linked
+   against glibc.  */
+
+void
+_bfd_elf_link_add_glibc_version_dependency
+  (struct elf_find_verdep_info *rinfo,
+   const char *version_dep[])
+{
+  Elf_Internal_Verneed *t = NULL;
+
+  do
+    {
+      t = elf_link_add_glibc_verneed (rinfo, t, *version_dep);
+      /* Return if there is no glibc version reference.  */
+      if (t == NULL)
+	return;
+      version_dep++;
+    }
+  while (*version_dep != NULL);
+}
+
+/* Add GLIBC_ABI_DT_RELR to the list of version dependencies when
+   linked against glibc.  */
+
+void
+_bfd_elf_link_add_dt_relr_dependency (struct elf_find_verdep_info *rinfo)
+{
+  if (rinfo->info->enable_dt_relr)
+    {
+      const char *version[] =
+	{
+	  "GLIBC_ABI_DT_RELR",
+	  NULL
+	};
+      _bfd_elf_link_add_glibc_version_dependency (rinfo, version);
+    }
+}
+
 /* Look through the symbols which are defined in other shared
    libraries and referenced here.  Update the list of version
    dependencies.  This will be put into the .gnu.version_r section.
    This function is called via elf_link_hash_traverse.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h,
 					 void *data)
 {
   struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
   Elf_Internal_Verneed *t;
   Elf_Internal_Vernaux *a;
-  bfd_size_type amt;
+  size_t amt;
 
   /* We only care about symbols defined in shared objects with version
      information.  */
@@ -2165,7 +2343,7 @@ _bfd_elf_link_find_version_dependencies
       || h->verinfo.verdef == NULL
       || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
 	  & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
-    return TRUE;
+    return true;
 
   /* See if we already know about this version.  */
   for (t = elf_tdata (rinfo->info->output_bfd)->verref;
@@ -2177,7 +2355,7 @@ _bfd_elf_link_find_version_dependencies
 
       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
 	if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
-	  return TRUE;
+	  return true;
 
       break;
     }
@@ -2190,8 +2368,8 @@ _bfd_elf_link_find_version_dependencies
       t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt);
       if (t == NULL)
 	{
-	  rinfo->failed = TRUE;
-	  return FALSE;
+	  rinfo->failed = true;
+	  return false;
 	}
 
       t->vn_bfd = h->verinfo.verdef->vd_bfd;
@@ -2203,8 +2381,8 @@ _bfd_elf_link_find_version_dependencies
   a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
   if (a == NULL)
     {
-      rinfo->failed = TRUE;
-      return FALSE;
+      rinfo->failed = true;
+      return false;
     }
 
   /* Note that we are copying a string pointer here, and testing it
@@ -2223,18 +2401,18 @@ _bfd_elf_link_find_version_dependencies
 
   t->vn_auxptr = a;
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE and set *HIDE to TRUE if the versioned symbol is
    hidden.  Set *T_P to NULL if there is no match.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_link_hide_versioned_symbol (struct bfd_link_info *info,
 				     struct elf_link_hash_entry *h,
 				     const char *version_p,
 				     struct bfd_elf_version_tree **t_p,
-				     bfd_boolean *hide)
+				     bool *hide)
 {
   struct bfd_elf_version_tree *t;
 
@@ -2250,14 +2428,14 @@ _bfd_elf_link_hide_versioned_symbol (str
 	  len = version_p - h->root.root.string;
 	  alc = (char *) bfd_malloc (len);
 	  if (alc == NULL)
-	    return FALSE;
+	    return false;
 	  memcpy (alc, h->root.root.string, len - 1);
 	  alc[len - 1] = '\0';
 	  if (alc[len - 2] == ELF_VER_CHR)
 	    alc[len - 2] = '\0';
 
 	  h->verinfo.vertree = t;
-	  t->used = TRUE;
+	  t->used = true;
 	  d = NULL;
 
 	  if (t->globals.list != NULL)
@@ -2271,7 +2449,7 @@ _bfd_elf_link_hide_versioned_symbol (str
 	      if (d != NULL
 		  && h->dynindx != -1
 		  && ! info->export_dynamic)
-		*hide = TRUE;
+		*hide = true;
 	    }
 
 	  free (alc);
@@ -2281,23 +2459,23 @@ _bfd_elf_link_hide_versioned_symbol (str
 
   *t_p = t;
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if the symbol H is hidden by version script.  */
 
-bfd_boolean
+bool
 _bfd_elf_link_hide_sym_by_version (struct bfd_link_info *info,
 				   struct elf_link_hash_entry *h)
 {
   const char *p;
-  bfd_boolean hide = FALSE;
+  bool hide = false;
   const struct elf_backend_data *bed
     = get_elf_backend_data (info->output_bfd);
 
   /* Version script only hides symbols defined in regular objects.  */
   if (!h->def_regular && !ELF_COMMON_DEF_P (h))
-    return TRUE;
+    return true;
 
   p = strchr (h->root.root.string, ELF_VER_CHR);
   if (p != NULL && h->verinfo.vertree == NULL)
@@ -2313,8 +2491,8 @@ _bfd_elf_link_hide_sym_by_version (struc
 	  && hide)
 	{
 	  if (hide)
-	    (*bed->elf_backend_hide_symbol) (info, h, TRUE);
-	  return TRUE;
+	    (*bed->elf_backend_hide_symbol) (info, h, true);
+	  return true;
 	}
     }
 
@@ -2327,12 +2505,12 @@ _bfd_elf_link_hide_sym_by_version (struc
 				    h->root.root.string, &hide);
       if (h->verinfo.vertree != NULL && hide)
 	{
-	  (*bed->elf_backend_hide_symbol) (info, h, TRUE);
-	  return TRUE;
+	  (*bed->elf_backend_hide_symbol) (info, h, true);
+	  return true;
 	}
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Figure out appropriate versions for all the symbols.  We may not
@@ -2340,7 +2518,7 @@ _bfd_elf_link_hide_sym_by_version (struc
    files, so until that point we don't know which symbols should be
    local.  This function is called via elf_link_hash_traverse.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
 {
   struct elf_info_failed *sinfo;
@@ -2348,19 +2526,19 @@ _bfd_elf_link_assign_sym_version (struct
   const struct elf_backend_data *bed;
   struct elf_info_failed eif;
   char *p;
-  bfd_boolean hide;
+  bool hide;
 
   sinfo = (struct elf_info_failed *) data;
   info = sinfo->info;
 
   /* Fix the symbol flags.  */
-  eif.failed = FALSE;
+  eif.failed = false;
   eif.info = info;
   if (! _bfd_elf_fix_symbol_flags (h, &eif))
     {
       if (eif.failed)
-	sinfo->failed = TRUE;
-      return FALSE;
+	sinfo->failed = true;
+      return false;
     }
 
   bed = get_elf_backend_data (info->output_bfd);
@@ -2373,11 +2551,11 @@ _bfd_elf_link_assign_sym_version (struct
       if ((h->root.type == bfd_link_hash_defined
 	   || h->root.type == bfd_link_hash_defweak)
 	  && discarded_section (h->root.u.def.section))
-	(*bed->elf_backend_hide_symbol) (info, h, TRUE);
-      return TRUE;
+	(*bed->elf_backend_hide_symbol) (info, h, true);
+      return true;
     }
 
-  hide = FALSE;
+  hide = false;
   p = strchr (h->root.root.string, ELF_VER_CHR);
   if (p != NULL && h->verinfo.vertree == NULL)
     {
@@ -2389,16 +2567,16 @@ _bfd_elf_link_assign_sym_version (struct
 
       /* If there is no version string, we can just return out.  */
       if (*p == '\0')
-	return TRUE;
+	return true;
 
       if (!_bfd_elf_link_hide_versioned_symbol (info, h, p, &t, &hide))
 	{
-	  sinfo->failed = TRUE;
-	  return FALSE;
+	  sinfo->failed = true;
+	  return false;
 	}
 
       if (hide)
-	(*bed->elf_backend_hide_symbol) (info, h, TRUE);
+	(*bed->elf_backend_hide_symbol) (info, h, true);
 
       /* If we are building an application, we need to create a
 	 version node for this version.  */
@@ -2410,19 +2588,19 @@ _bfd_elf_link_assign_sym_version (struct
 	  /* If we aren't going to export this symbol, we don't need
 	     to worry about it.  */
 	  if (h->dynindx == -1)
-	    return TRUE;
+	    return true;
 
 	  t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd,
 							  sizeof *t);
 	  if (t == NULL)
 	    {
-	      sinfo->failed = TRUE;
-	      return FALSE;
+	      sinfo->failed = true;
+	      return false;
 	    }
 
 	  t->name = p;
 	  t->name_indx = (unsigned int) -1;
-	  t->used = TRUE;
+	  t->used = true;
 
 	  version_index = 1;
 	  /* Don't count anonymous version tag.  */
@@ -2448,8 +2626,8 @@ _bfd_elf_link_assign_sym_version (struct
 	    (_("%pB: version node not found for symbol %s"),
 	     info->output_bfd, h->root.root.string);
 	  bfd_set_error (bfd_error_bad_value);
-	  sinfo->failed = TRUE;
-	  return FALSE;
+	  sinfo->failed = true;
+	  return false;
 	}
     }
 
@@ -2463,10 +2641,10 @@ _bfd_elf_link_assign_sym_version (struct
 	= bfd_find_version_for_sym (sinfo->info->version_info,
 				    h->root.root.string, &hide);
       if (h->verinfo.vertree != NULL && hide)
-	(*bed->elf_backend_hide_symbol) (info, h, TRUE);
+	(*bed->elf_backend_hide_symbol) (info, h, true);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read and swap the relocs from the section indicated by SHDR.  This
@@ -2478,7 +2656,7 @@ _bfd_elf_link_assign_sym_version (struct
 
    Returns FALSE if something goes wrong.  */
 
-static bfd_boolean
+static bool
 elf_link_read_relocs_from_section (bfd *abfd,
 				   asection *sec,
 				   Elf_Internal_Shdr *shdr,
@@ -2495,11 +2673,11 @@ elf_link_read_relocs_from_section (bfd *
 
   /* Position ourselves at the start of the section.  */
   if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   /* Read the relocations.  */
-  if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
-    return FALSE;
+  if (bfd_read (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
+    return false;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
@@ -2514,7 +2692,7 @@ elf_link_read_relocs_from_section (bfd *
   else
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   erela = (const bfd_byte *) external_relocs;
@@ -2541,7 +2719,7 @@ elf_link_read_relocs_from_section (bfd *
 		 abfd, (uint64_t) r_symndx, (unsigned long) nsyms,
 		 (uint64_t) irela->r_offset, sec);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
       else if (r_symndx != STN_UNDEF)
@@ -2554,13 +2732,13 @@ elf_link_read_relocs_from_section (bfd *
 	     abfd, (uint64_t) r_symndx,
 	     (uint64_t) irela->r_offset, sec);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       irela += bed->s->int_rels_per_ext_rel;
       erela += shdr->sh_entsize;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read and swap the relocs for a section O.  They may have been
@@ -2571,14 +2749,16 @@ elf_link_read_relocs_from_section (bfd *
    according to the KEEP_MEMORY argument.  If O has two relocation
    sections (both REL and RELA relocations), then the REL_HDR
    relocations will appear first in INTERNAL_RELOCS, followed by the
-   RELA_HDR relocations.  */
+   RELA_HDR relocations.  If INFO isn't NULL and KEEP_MEMORY is true,
+   update cache_size.  */
 
 Elf_Internal_Rela *
-_bfd_elf_link_read_relocs (bfd *abfd,
-			   asection *o,
-			   void *external_relocs,
-			   Elf_Internal_Rela *internal_relocs,
-			   bfd_boolean keep_memory)
+_bfd_elf_link_info_read_relocs (bfd *abfd,
+				struct bfd_link_info *info,
+				asection *o,
+				void *external_relocs,
+				Elf_Internal_Rela *internal_relocs,
+				bool keep_memory)
 {
   void *alloc1 = NULL;
   Elf_Internal_Rela *alloc2 = NULL;
@@ -2598,7 +2778,11 @@ _bfd_elf_link_read_relocs (bfd *abfd,
 
       size = (bfd_size_type) o->reloc_count * sizeof (Elf_Internal_Rela);
       if (keep_memory)
-	internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
+	{
+	  internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
+	  if (info)
+	    info->cache_size += size;
+	}
       else
 	internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
       if (internal_relocs == NULL)
@@ -2643,8 +2827,7 @@ _bfd_elf_link_read_relocs (bfd *abfd,
   if (keep_memory)
     esdo->relocs = internal_relocs;
 
-  if (alloc1 != NULL)
-    free (alloc1);
+  free (alloc1);
 
   /* Don't free alloc2, since if it was allocated we are passing it
      back (under the name of internal_relocs).  */
@@ -2652,8 +2835,7 @@ _bfd_elf_link_read_relocs (bfd *abfd,
   return internal_relocs;
 
  error_return:
-  if (alloc1 != NULL)
-    free (alloc1);
+  free (alloc1);
   if (alloc2 != NULL)
     {
       if (keep_memory)
@@ -2664,10 +2846,26 @@ _bfd_elf_link_read_relocs (bfd *abfd,
   return NULL;
 }
 
+/* This is similar to _bfd_elf_link_info_read_relocs, except for that
+   NULL is passed to _bfd_elf_link_info_read_relocs for pointer to
+   struct bfd_link_info.  */
+
+Elf_Internal_Rela *
+_bfd_elf_link_read_relocs (bfd *abfd,
+			   asection *o,
+			   void *external_relocs,
+			   Elf_Internal_Rela *internal_relocs,
+			   bool keep_memory)
+{
+  return _bfd_elf_link_info_read_relocs (abfd, NULL, o, external_relocs,
+					 internal_relocs, keep_memory);
+
+}
+
 /* Compute the size of, and allocate space for, REL_HDR which is the
    section header for a section containing relocations for O.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_link_size_reloc_section (bfd *abfd,
 				  struct bfd_elf_section_reloc_data *reldata)
 {
@@ -2682,7 +2880,7 @@ _bfd_elf_link_size_reloc_section (bfd *a
      we zero the allocated space.  */
   rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size);
   if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
-    return FALSE;
+    return false;
 
   if (reldata->hashes == NULL && reldata->count)
     {
@@ -2691,19 +2889,19 @@ _bfd_elf_link_size_reloc_section (bfd *a
       p = ((struct elf_link_hash_entry **)
 	   bfd_zmalloc (reldata->count * sizeof (*p)));
       if (p == NULL)
-	return FALSE;
+	return false;
 
       reldata->hashes = p;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy the relocations indicated by the INTERNAL_RELOCS (which
    originated from the section given by INPUT_REL_HDR) to the
    OUTPUT_BFD.  */
 
-bfd_boolean
+bool
 _bfd_elf_link_output_relocs (bfd *output_bfd,
 			     asection *input_section,
 			     Elf_Internal_Shdr *input_rel_hdr,
@@ -2742,7 +2940,7 @@ _bfd_elf_link_output_relocs (bfd *output
 	(_("%pB: relocation size mismatch in %pB section %pA"),
 	 output_bfd, input_section->owner, input_section);
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   erel = output_reldata->hdr->contents;
@@ -2761,12 +2959,12 @@ _bfd_elf_link_output_relocs (bfd *output
      relocations.  */
   output_reldata->count += NUM_SHDR_ENTRIES (input_rel_hdr);
 
-  return TRUE;
+  return true;
 }
 
 /* Make weak undefined symbols in PIE dynamic.  */
 
-bfd_boolean
+bool
 _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info,
 				 struct elf_link_hash_entry *h)
 {
@@ -2775,7 +2973,7 @@ _bfd_elf_link_hash_fixup_symbol (struct
       && h->root.type == bfd_link_hash_undefweak)
     return bfd_elf_link_record_dynamic_symbol (info, h);
 
-  return TRUE;
+  return true;
 }
 
 /* Fix up the flags for a symbol.  This handles various cases which
@@ -2784,7 +2982,7 @@ _bfd_elf_link_hash_fixup_symbol (struct
    assign_sym_version, which is unnecessary but perhaps more robust in
    the face of future changes.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
 			   struct elf_info_failed *eif)
 {
@@ -2824,8 +3022,8 @@ _bfd_elf_fix_symbol_flags (struct elf_li
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
 	    {
-	      eif->failed = TRUE;
-	      return FALSE;
+	      eif->failed = true;
+	      return false;
 	    }
 	}
     }
@@ -2852,7 +3050,7 @@ _bfd_elf_fix_symbol_flags (struct elf_li
   bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
   if (bed->elf_backend_fixup_symbol
       && !(*bed->elf_backend_fixup_symbol) (eif->info, h))
-    return FALSE;
+    return false;
 
   /* If this is a final link, and the symbol was defined as a common
      symbol in a regular object file, and there was no definition in
@@ -2868,13 +3066,13 @@ _bfd_elf_fix_symbol_flags (struct elf_li
 
   /* Symbols defined in discarded sections shouldn't be dynamic.  */
   if (h->root.type == bfd_link_hash_undefined && h->indx == -3)
-    (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
+    (*bed->elf_backend_hide_symbol) (eif->info, h, true);
 
   /* If a weak undefined symbol has non-default visibility, we also
      hide it from the dynamic linker.  */
   else if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	   && h->root.type == bfd_link_hash_undefweak)
-    (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
+    (*bed->elf_backend_hide_symbol) (eif->info, h, true);
 
   /* A hidden versioned symbol in executable should be forced local if
      it is is locally defined, not referenced by shared library and not
@@ -2885,7 +3083,7 @@ _bfd_elf_fix_symbol_flags (struct elf_li
 	   && !h->dynamic
 	   && !h->ref_dynamic
 	   && h->def_regular)
-    (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
+    (*bed->elf_backend_hide_symbol) (eif->info, h, true);
 
   /* If -Bsymbolic was used (which means to bind references to global
      symbols to the definition within the shared object), and this
@@ -2900,7 +3098,7 @@ _bfd_elf_fix_symbol_flags (struct elf_li
 	       || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
 	   && h->def_regular)
     {
-      bfd_boolean force_local;
+      bool force_local;
 
       force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
 		     || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
@@ -2942,14 +3140,14 @@ _bfd_elf_fix_symbol_flags (struct elf_li
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Make the backend pick a good value for a dynamic symbol.  This is
    called via elf_link_hash_traverse, and also calls itself
    recursively.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
 {
   struct elf_info_failed *eif = (struct elf_info_failed *) data;
@@ -2957,15 +3155,15 @@ _bfd_elf_adjust_dynamic_symbol (struct e
   const struct elf_backend_data *bed;
 
   if (! is_elf_hash_table (eif->info->hash))
-    return FALSE;
+    return false;
 
   /* Ignore indirect symbols.  These are added by the versioning code.  */
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   /* Fix the symbol flags.  */
   if (! _bfd_elf_fix_symbol_flags (h, eif))
-    return FALSE;
+    return false;
 
   htab = elf_hash_table (eif->info);
   bed = get_elf_backend_data (htab->dynobj);
@@ -2973,7 +3171,7 @@ _bfd_elf_adjust_dynamic_symbol (struct e
   if (h->root.type == bfd_link_hash_undefweak)
     {
       if (eif->info->dynamic_undefined_weak == 0)
-	(*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
+	(*bed->elf_backend_hide_symbol) (eif->info, h, true);
       else if (eif->info->dynamic_undefined_weak > 0
 	       && h->ref_regular
 	       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
@@ -2982,8 +3180,8 @@ _bfd_elf_adjust_dynamic_symbol (struct e
 	{
 	  if (!bfd_elf_link_record_dynamic_symbol (eif->info, h))
 	    {
-	      eif->failed = TRUE;
-	      return FALSE;
+	      eif->failed = true;
+	      return false;
 	    }
 	}
     }
@@ -3003,13 +3201,13 @@ _bfd_elf_adjust_dynamic_symbol (struct e
 	      && (!h->is_weakalias || weakdef (h)->dynindx == -1))))
     {
       h->plt = elf_hash_table (eif->info)->init_plt_offset;
-      return TRUE;
+      return true;
     }
 
   /* If we've already adjusted this symbol, don't do it again.  This
      can happen via a recursive call.  */
   if (h->dynamic_adjusted)
-    return TRUE;
+    return true;
 
   /* Don't look at this symbol again.  Note that we must set this
      after checking the above conditions, because we may look at a
@@ -3056,7 +3254,7 @@ _bfd_elf_adjust_dynamic_symbol (struct e
       /* Ensure that the backend adjust_dynamic_symbol function sees
 	 the strong alias before H by recursively calling ourselves.  */
       if (!_bfd_elf_adjust_dynamic_symbol (def, eif))
-	return FALSE;
+	return false;
     }
 
   /* If a symbol has no type and no size and does not require a PLT
@@ -3073,17 +3271,17 @@ _bfd_elf_adjust_dynamic_symbol (struct e
 
   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
     {
-      eif->failed = TRUE;
-      return FALSE;
+      eif->failed = true;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust the dynamic symbol, H, for copy in the dynamic bss section,
    DYNBSS.  */
 
-bfd_boolean
+bool
 _bfd_elf_adjust_dynamic_copy (struct bfd_link_info *info,
 			      struct elf_link_hash_entry *h,
 			      asection *dynbss)
@@ -3109,7 +3307,7 @@ _bfd_elf_adjust_dynamic_copy (struct bfd
     {
       /* Adjust the section alignment if needed.  */
       if (!bfd_set_section_alignment (dynbss, power_of_two))
-	return FALSE;
+	return false;
     }
 
   /* We make sure that the symbol will be aligned properly.  */
@@ -3131,13 +3329,13 @@ _bfd_elf_adjust_dynamic_copy (struct bfd
       (_("%P: copy reloc against protected `%pT' is dangerous\n"),
        h->root.root.string);
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust all external symbols pointing into SEC_MERGE sections
    to reflect the object merging within the sections.  */
 
-static bfd_boolean
+static bool
 _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
 {
   asection *sec;
@@ -3156,24 +3354,24 @@ _bfd_elf_link_sec_merge_syms (struct elf
 				    h->root.u.def.value);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Returns false if the symbol referred to by H should be considered
    to resolve local to the current module, and true if it should be
    considered to bind dynamically.  */
 
-bfd_boolean
+bool
 _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
 			   struct bfd_link_info *info,
-			   bfd_boolean not_local_protected)
+			   bool not_local_protected)
 {
-  bfd_boolean binding_stays_local_p;
+  bool binding_stays_local_p;
   const struct elf_backend_data *bed;
   struct elf_link_hash_table *hash_table;
 
   if (h == NULL)
-    return FALSE;
+    return false;
 
   while (h->root.type == bfd_link_hash_indirect
 	 || h->root.type == bfd_link_hash_warning)
@@ -3181,9 +3379,9 @@ _bfd_elf_dynamic_symbol_p (struct elf_li
 
   /* If it was forced local, then clearly it's not dynamic.  */
   if (h->dynindx == -1)
-    return FALSE;
+    return false;
   if (h->forced_local)
-    return FALSE;
+    return false;
 
   /* Identify the cases where name binding rules say that a
      visible symbol resolves locally.  */
@@ -3194,12 +3392,12 @@ _bfd_elf_dynamic_symbol_p (struct elf_li
     {
     case STV_INTERNAL:
     case STV_HIDDEN:
-      return FALSE;
+      return false;
 
     case STV_PROTECTED:
       hash_table = elf_hash_table (info);
-      if (!is_elf_hash_table (hash_table))
-	return FALSE;
+      if (!is_elf_hash_table (&hash_table->root))
+	return false;
 
       bed = get_elf_backend_data (hash_table->dynobj);
 
@@ -3207,7 +3405,7 @@ _bfd_elf_dynamic_symbol_p (struct elf_li
 	 that these symbols perhaps be resolved dynamically, even though
 	 we should be resolving them to the current module.  */
       if (!not_local_protected || !bed->is_function_type (h->type))
-	binding_stays_local_p = TRUE;
+	binding_stays_local_p = true;
       break;
 
     default:
@@ -3216,7 +3414,7 @@ _bfd_elf_dynamic_symbol_p (struct elf_li
 
   /* If it isn't defined locally, then clearly it's dynamic.  */
   if (!h->def_regular && !ELF_COMMON_DEF_P (h))
-    return TRUE;
+    return true;
 
   /* Otherwise, the symbol is dynamic if binding rules don't tell
      us that it remains local.  */
@@ -3236,26 +3434,26 @@ _bfd_elf_dynamic_symbol_p (struct elf_li
    treatment of undefined weak symbols.  For those that do not make
    undefined weak symbols dynamic, both functions may return false.  */
 
-bfd_boolean
+bool
 _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
 			      struct bfd_link_info *info,
-			      bfd_boolean local_protected)
+			      bool local_protected)
 {
   const struct elf_backend_data *bed;
   struct elf_link_hash_table *hash_table;
 
   /* If it's a local sym, of course we resolve locally.  */
   if (h == NULL)
-    return TRUE;
+    return true;
 
   /* STV_HIDDEN or STV_INTERNAL ones must be local.  */
   if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
       || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
-    return TRUE;
+    return true;
 
   /* Forced local symbols resolve locally.  */
   if (h->forced_local)
-    return TRUE;
+    return true;
 
   /* Common symbols that become definitions don't get the DEF_REGULAR
      flag set, so test it first, and don't bail out.  */
@@ -3264,26 +3462,30 @@ _bfd_elf_symbol_refs_local_p (struct elf
   /* If we don't have a definition in a regular file, then we can't
      resolve locally.  The sym is either undefined or dynamic.  */
   else if (!h->def_regular)
-    return FALSE;
+    return false;
 
   /* Non-dynamic symbols resolve locally.  */
   if (h->dynindx == -1)
-    return TRUE;
+    return true;
 
   /* At this point, we know the symbol is defined and dynamic.  In an
      executable it must resolve locally, likewise when building symbolic
      shared libraries.  */
   if (bfd_link_executable (info) || SYMBOLIC_BIND (info, h))
-    return TRUE;
+    return true;
 
   /* Now deal with defined dynamic symbols in shared libraries.  Ones
      with default visibility might not resolve locally.  */
   if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
-    return FALSE;
+    return false;
 
   hash_table = elf_hash_table (info);
-  if (!is_elf_hash_table (hash_table))
-    return TRUE;
+  if (!is_elf_hash_table (&hash_table->root))
+    return true;
+
+  /* STV_PROTECTED symbols with indirect external access are local. */
+  if (info->indirect_extern_access > 0)
+    return true;
 
   bed = get_elf_backend_data (hash_table->dynobj);
 
@@ -3293,7 +3495,7 @@ _bfd_elf_symbol_refs_local_p (struct elf
        || (info->extern_protected_data < 0
 	   && !bed->extern_protected_data))
       && !bed->is_function_type (h->type))
-    return TRUE;
+    return true;
 
   /* Function pointer equality tests may require that STV_PROTECTED
      symbols be treated as dynamic symbols.  If the address of a
@@ -3323,8 +3525,8 @@ _bfd_elf_tls_setup (bfd *obfd, struct bf
 
   elf_hash_table (info)->tls_sec = tls;
 
-  /* Ensure the alignment of the first section is the largest alignment,
-     so that the tls segment starts aligned.  */
+  /* Ensure the alignment of the first section (usually .tdata) is the largest
+     alignment, so that the tls segment starts aligned.  */
   if (tls != NULL)
     tls->alignment_power = align;
 
@@ -3332,7 +3534,7 @@ _bfd_elf_tls_setup (bfd *obfd, struct bf
 }
 
 /* Return TRUE iff this is a non-common, definition of a non-function symbol.  */
-static bfd_boolean
+static bool
 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
 				  Elf_Internal_Sym *sym)
 {
@@ -3341,21 +3543,21 @@ is_global_data_symbol_definition (bfd *a
   /* Local symbols do not count, but target specific ones might.  */
   if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
       && ELF_ST_BIND (sym->st_info) < STB_LOOS)
-    return FALSE;
+    return false;
 
   bed = get_elf_backend_data (abfd);
   /* Function symbols do not count.  */
   if (bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
-    return FALSE;
+    return false;
 
   /* If the section is undefined, then so is the symbol.  */
   if (sym->st_shndx == SHN_UNDEF)
-    return FALSE;
+    return false;
 
   /* If the symbol is defined in the common section, then
      it is a common definition and so does not count.  */
   if (bed->common_definition (sym))
-    return FALSE;
+    return false;
 
   /* If the symbol is in a target specific section then we
      must rely upon the backend to tell us what it is.  */
@@ -3367,15 +3569,15 @@ is_global_data_symbol_definition (bfd *a
        Instead for now assume that the definition is not global,
        Even if this is wrong, at least the linker will behave
        in the same way that it used to do.  */
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Search the symbol table of the archive element of the archive ABFD
    whose archive map contains a mention of SYMDEF, and determine if
    the symbol is defined in this element.  */
-static bfd_boolean
+static bool
 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
 {
   Elf_Internal_Shdr * hdr;
@@ -3385,14 +3587,14 @@ elf_link_is_defined_archive_symbol (bfd
   Elf_Internal_Sym *isymbuf;
   Elf_Internal_Sym *isym;
   Elf_Internal_Sym *isymend;
-  bfd_boolean result;
+  bool result;
 
-  abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
+  abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset, NULL);
   if (abfd == NULL)
-    return FALSE;
+    return false;
 
   if (! bfd_check_format (abfd, bfd_object))
-    return FALSE;
+    return false;
 
   /* Select the appropriate symbol table.  If we don't know if the
      object file is an IR object, give linker LTO plugin a chance to
@@ -3409,10 +3611,19 @@ elf_link_is_defined_archive_symbol (bfd
       abfd = abfd->plugin_dummy_bfd;
       hdr = &elf_tdata (abfd)->symtab_hdr;
     }
-  else if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
-    hdr = &elf_tdata (abfd)->symtab_hdr;
   else
-    hdr = &elf_tdata (abfd)->dynsymtab_hdr;
+    {
+      if (elf_use_dt_symtab_p (abfd))
+	{
+	  bfd_set_error (bfd_error_wrong_format);
+	  return false;
+	}
+
+      if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
+	hdr = &elf_tdata (abfd)->symtab_hdr;
+      else
+	hdr = &elf_tdata (abfd)->dynsymtab_hdr;
+    }
 
   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
 
@@ -3430,16 +3641,16 @@ elf_link_is_defined_archive_symbol (bfd
     }
 
   if (extsymcount == 0)
-    return FALSE;
+    return false;
 
   /* Read in the symbol table.  */
   isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
 				  NULL, NULL, NULL);
   if (isymbuf == NULL)
-    return FALSE;
+    return false;
 
   /* Scan the symbol table looking for SYMDEF.  */
-  result = FALSE;
+  result = false;
   for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
     {
       const char *name;
@@ -3463,7 +3674,7 @@ elf_link_is_defined_archive_symbol (bfd
 
 /* Add an entry to the .dynamic table.  */
 
-bfd_boolean
+bool
 _bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
 			    bfd_vma tag,
 			    bfd_vma val)
@@ -3476,11 +3687,11 @@ _bfd_elf_add_dynamic_entry (struct bfd_l
   Elf_Internal_Dyn dyn;
 
   hash_table = elf_hash_table (info);
-  if (! is_elf_hash_table (hash_table))
-    return FALSE;
+  if (! is_elf_hash_table (&hash_table->root))
+    return false;
 
   if (tag == DT_RELA || tag == DT_REL)
-    hash_table->dynamic_relocs = TRUE;
+    hash_table->dynamic_relocs = true;
 
   bed = get_elf_backend_data (hash_table->dynobj);
   s = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
@@ -3489,7 +3700,7 @@ _bfd_elf_add_dynamic_entry (struct bfd_l
   newsize = s->size + bed->s->sizeof_dyn;
   newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
   if (newcontents == NULL)
-    return FALSE;
+    return false;
 
   dyn.d_tag = tag;
   dyn.d_un.d_val = val;
@@ -3498,27 +3709,124 @@ _bfd_elf_add_dynamic_entry (struct bfd_l
   s->size = newsize;
   s->contents = newcontents;
 
-  return TRUE;
+  return true;
+}
+
+/* Strip zero-sized dynamic sections.  */
+
+bool
+_bfd_elf_strip_zero_sized_dynamic_sections (struct bfd_link_info *info)
+{
+  struct elf_link_hash_table *hash_table;
+  const struct elf_backend_data *bed;
+  asection *s, *sdynamic, **pp;
+  asection *rela_dyn, *rel_dyn;
+  Elf_Internal_Dyn dyn;
+  bfd_byte *extdyn, *next;
+  void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
+  bool strip_zero_sized;
+  bool strip_zero_sized_plt;
+
+  if (bfd_link_relocatable (info))
+    return true;
+
+  hash_table = elf_hash_table (info);
+  if (!is_elf_hash_table (&hash_table->root))
+    return false;
+
+  if (!hash_table->dynobj)
+    return true;
+
+  sdynamic= bfd_get_linker_section (hash_table->dynobj, ".dynamic");
+  if (!sdynamic)
+    return true;
+
+  bed = get_elf_backend_data (hash_table->dynobj);
+  swap_dyn_in = bed->s->swap_dyn_in;
+
+  strip_zero_sized = false;
+  strip_zero_sized_plt = false;
+
+  /* Strip zero-sized dynamic sections.  */
+  rela_dyn = bfd_get_section_by_name (info->output_bfd, ".rela.dyn");
+  rel_dyn = bfd_get_section_by_name (info->output_bfd, ".rel.dyn");
+  for (pp = &info->output_bfd->sections; (s = *pp) != NULL;)
+    if (s->size == 0
+	&& (s == rela_dyn
+	    || s == rel_dyn
+	    || s == hash_table->srelplt->output_section
+	    || s == hash_table->splt->output_section))
+      {
+	*pp = s->next;
+	info->output_bfd->section_count--;
+	strip_zero_sized = true;
+	if (s == rela_dyn)
+	  s = rela_dyn;
+	if (s == rel_dyn)
+	  s = rel_dyn;
+	else if (s == hash_table->splt->output_section)
+	  {
+	    s = hash_table->splt;
+	    strip_zero_sized_plt = true;
+	  }
+	else
+	  s = hash_table->srelplt;
+	s->flags |= SEC_EXCLUDE;
+	s->output_section = bfd_abs_section_ptr;
+      }
+    else
+      pp = &s->next;
+
+  if (strip_zero_sized_plt && sdynamic->size != 0)
+    for (extdyn = sdynamic->contents;
+	 extdyn < sdynamic->contents + sdynamic->size;
+	 extdyn = next)
+      {
+	next = extdyn + bed->s->sizeof_dyn;
+	swap_dyn_in (hash_table->dynobj, extdyn, &dyn);
+	switch (dyn.d_tag)
+	  {
+	  default:
+	    break;
+	  case DT_JMPREL:
+	  case DT_PLTRELSZ:
+	  case DT_PLTREL:
+	    /* Strip DT_PLTRELSZ, DT_JMPREL and DT_PLTREL entries if
+	       the procedure linkage table (the .plt section) has been
+	       removed.  */
+	    memmove (extdyn, next,
+		     sdynamic->size - (next - sdynamic->contents));
+	    next = extdyn;
+	  }
+      }
+
+  if (strip_zero_sized)
+    {
+      /* Regenerate program headers.  */
+      elf_seg_map (info->output_bfd) = NULL;
+      return _bfd_elf_map_sections_to_segments (info->output_bfd, info,
+						NULL);
+    }
+
+  return true;
 }
 
-/* Add a DT_NEEDED entry for this dynamic object if DO_IT is true,
-   otherwise just check whether one already exists.  Returns -1 on error,
+/* Add a DT_NEEDED entry for this dynamic object.  Returns -1 on error,
    1 if a DT_NEEDED tag already exists, and 0 on success.  */
 
-static int
-elf_add_dt_needed_tag (bfd *abfd,
-		       struct bfd_link_info *info,
-		       const char *soname,
-		       bfd_boolean do_it)
+int
+bfd_elf_add_dt_needed_tag (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_table *hash_table;
   size_t strindex;
+  const char *soname;
 
   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
     return -1;
 
   hash_table = elf_hash_table (info);
-  strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE);
+  soname = elf_dt_name (abfd);
+  strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, false);
   if (strindex == (size_t) -1)
     return -1;
 
@@ -3530,7 +3838,7 @@ elf_add_dt_needed_tag (bfd *abfd,
 
       bed = get_elf_backend_data (hash_table->dynobj);
       sdyn = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
-      if (sdyn != NULL)
+      if (sdyn != NULL && sdyn->size != 0)
 	for (extdyn = sdyn->contents;
 	     extdyn < sdyn->contents + sdyn->size;
 	     extdyn += bed->s->sizeof_dyn)
@@ -3547,17 +3855,11 @@ elf_add_dt_needed_tag (bfd *abfd,
 	  }
     }
 
-  if (do_it)
-    {
-      if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
-	return -1;
+  if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
+    return -1;
 
-      if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
-	return -1;
-    }
-  else
-    /* We were just checking for existence of the tag.  */
-    _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
+  if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
+    return -1;
 
   return 0;
 }
@@ -3566,7 +3868,7 @@ elf_add_dt_needed_tag (bfd *abfd,
    (or the end of list if STOP is NULL), and needed by a library that
    will be loaded.  */
 
-static bfd_boolean
+static bool
 on_needed_list (const char *soname,
 		struct bfd_link_needed_list *needed,
 		struct bfd_link_needed_list *stop)
@@ -3582,9 +3884,9 @@ on_needed_list (const char *soname,
 	       the library.  Therefore search prior to the current
 	       LOOK, preventing possible infinite recursion.  */
 	    || on_needed_list (elf_dt_name (look->by), needed, look)))
-      return TRUE;
+      return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Sort symbol by value, section, size, and type.  */
@@ -3646,20 +3948,20 @@ elf_sort_symbol (const void *arg1, const
 /* This function is used to adjust offsets into .dynstr for
    dynamic symbols.  This is called via elf_link_hash_traverse.  */
 
-static bfd_boolean
+static bool
 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
 {
   struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;
 
   if (h->dynindx != -1)
     h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
-  return TRUE;
+  return true;
 }
 
 /* Assign string offsets in .dynstr, update all structures referencing
    them.  */
 
-static bfd_boolean
+static bool
 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_table *hash_table = elf_hash_table (info);
@@ -3674,13 +3976,18 @@ elf_finalize_dynstr (bfd *output_bfd, st
   _bfd_elf_strtab_finalize (dynstr);
   size = _bfd_elf_strtab_size (dynstr);
 
+  /* Allow the linker to examine the dynsymtab now it's fully populated.  */
+
+  if (info->callbacks->examine_strtab)
+    info->callbacks->examine_strtab (dynstr);
+
   bed = get_elf_backend_data (dynobj);
   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   BFD_ASSERT (sdyn != NULL);
 
   /* Update all .dynamic entries referencing .dynstr strings.  */
   for (extdyn = sdyn->contents;
-       extdyn < sdyn->contents + sdyn->size;
+       extdyn < PTR_ADD (sdyn->contents, sdyn->size);
        extdyn += bed->s->sizeof_dyn)
     {
       Elf_Internal_Dyn dyn;
@@ -3781,14 +4088,14 @@ elf_finalize_dynstr (bfd *output_bfd, st
       while (need.vn_next);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
    The default is to only match when the INPUT and OUTPUT are exactly
    the same target.  */
 
-bfd_boolean
+bool
 _bfd_elf_default_relocs_compatible (const bfd_target *input,
 				    const bfd_target *output)
 {
@@ -3799,20 +4106,20 @@ _bfd_elf_default_relocs_compatible (cons
    This version is used when different targets for the same architecture
    are virtually identical.  */
 
-bfd_boolean
+bool
 _bfd_elf_relocs_compatible (const bfd_target *input,
 			    const bfd_target *output)
 {
   const struct elf_backend_data *obed, *ibed;
 
   if (input == output)
-    return TRUE;
+    return true;
 
   ibed = xvec_get_elf_backend_data (input);
   obed = xvec_get_elf_backend_data (output);
 
   if (ibed->arch != obed->arch)
-    return FALSE;
+    return false;
 
   /* If both backends are using this function, deem them compatible.  */
   return ibed->relocs_compatible == obed->relocs_compatible;
@@ -3822,7 +4129,7 @@ _bfd_elf_relocs_compatible (const bfd_ta
    we are about to handle an as-needed lib, or have finished
    processing the lib.  */
 
-bfd_boolean
+bool
 _bfd_elf_notice_as_needed (bfd *ibfd,
 			   struct bfd_link_info *info,
 			   enum notice_asneeded_action act)
@@ -3830,10 +4137,13 @@ _bfd_elf_notice_as_needed (bfd *ibfd,
   return (*info->callbacks->notice) (info, NULL, NULL, ibfd, NULL, act, 0);
 }
 
-/* Check relocations an ELF object file.  */
+/* Call ACTION on each relocation in an ELF object file.  */
 
-bfd_boolean
-_bfd_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
+bool
+_bfd_elf_link_iterate_on_relocs
+  (bfd *abfd, struct bfd_link_info *info,
+   bool (*action) (bfd *, struct bfd_link_info *, asection *,
+		   const Elf_Internal_Rela *))
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
   struct elf_link_hash_table *htab = elf_hash_table (info);
@@ -3856,8 +4166,7 @@ _bfd_elf_link_check_relocs (bfd *abfd, s
      I have no idea how to handle linking PIC code into a file of a
      different format.  It probably can't be done.  */
   if ((abfd->flags & DYNAMIC) == 0
-      && is_elf_hash_table (htab)
-      && bed->check_relocs != NULL
+      && is_elf_hash_table (&htab->root)
       && elf_object_id (abfd) == elf_hash_table_id (htab)
       && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
     {
@@ -3866,10 +4175,18 @@ _bfd_elf_link_check_relocs (bfd *abfd, s
       for (o = abfd->sections; o != NULL; o = o->next)
 	{
 	  Elf_Internal_Rela *internal_relocs;
-	  bfd_boolean ok;
+	  bool ok;
 
-	  /* Don't check relocations in excluded sections.  */
-	  if ((o->flags & SEC_RELOC) == 0
+	  /* Don't check relocations in excluded sections.  Don't do
+	     anything special with non-loaded, non-alloced sections.
+	     In particular, any relocs in such sections should not
+	     affect GOT and PLT reference counting (ie.  we don't
+	     allow them to create GOT or PLT entries), there's no
+	     possibility or desire to optimize TLS relocs, and
+	     there's not much point in propagating relocs to shared
+	     libs that the dynamic linker won't relocate.  */
+	  if ((o->flags & SEC_ALLOC) == 0
+	      || (o->flags & SEC_RELOC) == 0
 	      || (o->flags & SEC_EXCLUDE) != 0
 	      || o->reloc_count == 0
 	      || ((info->strip == strip_all || info->strip == strip_debugger)
@@ -3877,27 +4194,42 @@ _bfd_elf_link_check_relocs (bfd *abfd, s
 	      || bfd_is_abs_section (o->output_section))
 	    continue;
 
-	  internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
-						       info->keep_memory);
+	  internal_relocs = _bfd_elf_link_info_read_relocs (abfd, info,
+							    o, NULL,
+							    NULL,
+							    _bfd_link_keep_memory (info));
 	  if (internal_relocs == NULL)
-	    return FALSE;
+	    return false;
 
-	  ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
+	  ok = action (abfd, info, o, internal_relocs);
 
 	  if (elf_section_data (o)->relocs != internal_relocs)
 	    free (internal_relocs);
 
 	  if (! ok)
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
+}
+
+/* Check relocations in an ELF object file.  This is called after
+   all input files have been opened.  */
+
+bool
+_bfd_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
+{
+  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+  if (bed->check_relocs != NULL)
+    return _bfd_elf_link_iterate_on_relocs (abfd, info,
+					    bed->check_relocs);
+  return true;
 }
 
 /* Add symbols from an ELF object file to the linker hash table.  */
 
-static bfd_boolean
+static bool
 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   Elf_Internal_Ehdr *ehdr;
@@ -3906,7 +4238,7 @@ elf_link_add_object_symbols (bfd *abfd,
   size_t extsymcount;
   size_t extsymoff;
   struct elf_link_hash_entry **sym_hash;
-  bfd_boolean dynamic;
+  bool dynamic;
   Elf_External_Versym *extversym = NULL;
   Elf_External_Versym *extversym_end = NULL;
   Elf_External_Versym *ever;
@@ -3917,9 +4249,8 @@ elf_link_add_object_symbols (bfd *abfd,
   Elf_Internal_Sym *isym;
   Elf_Internal_Sym *isymend;
   const struct elf_backend_data *bed;
-  bfd_boolean add_needed;
+  bool add_needed;
   struct elf_link_hash_table *htab;
-  bfd_size_type amt;
   void *alloc_mark = NULL;
   struct bfd_hash_entry **old_table = NULL;
   unsigned int old_size = 0;
@@ -3931,22 +4262,28 @@ elf_link_add_object_symbols (bfd *abfd,
   void *old_strtab = NULL;
   size_t tabsize = 0;
   asection *s;
-  bfd_boolean just_syms;
+  bool just_syms;
 
   htab = elf_hash_table (info);
   bed = get_elf_backend_data (abfd);
 
+  if (elf_use_dt_symtab_p (abfd))
+    {
+      bfd_set_error (bfd_error_wrong_format);
+      return false;
+    }
+
   if ((abfd->flags & DYNAMIC) == 0)
-    dynamic = FALSE;
+    dynamic = false;
   else
     {
-      dynamic = TRUE;
+      dynamic = true;
 
       /* You can't use -r against a dynamic object.  Also, there's no
 	 hope of using a dynamic object which does not exactly match
 	 the format of the output file.  */
       if (bfd_link_relocatable (info)
-	  || !is_elf_hash_table (htab)
+	  || !is_elf_hash_table (&htab->root)
 	  || info->output_bfd->xvec != abfd->xvec)
 	{
 	  if (bfd_link_relocatable (info))
@@ -3979,7 +4316,7 @@ elf_link_add_object_symbols (bfd *abfd,
       const char *name;
 
       name = bfd_section_name (s);
-      if (CONST_STRNEQ (name, ".gnu.warning."))
+      if (startswith (name, ".gnu.warning."))
 	{
 	  char *msg;
 	  bfd_size_type sz;
@@ -3999,7 +4336,7 @@ elf_link_add_object_symbols (bfd *abfd,
 	    {
 	      struct elf_link_hash_entry *h;
 
-	      h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
+	      h = elf_link_hash_lookup (htab, name, false, false, true);
 
 	      /* FIXME: What about bfd_link_hash_common?  */
 	      if (h != NULL
@@ -4020,7 +4357,7 @@ elf_link_add_object_symbols (bfd *abfd,
 
 	  if (! (_bfd_generic_link_add_one_symbol
 		 (info, abfd, name, BSF_WARNING, s, 0, msg,
-		  FALSE, bed->collect, NULL)))
+		  false, bed->collect, NULL)))
 	    goto error_return;
 
 	  if (bfd_link_executable (info))
@@ -4039,7 +4376,7 @@ elf_link_add_object_symbols (bfd *abfd,
   just_syms = ((s = abfd->sections) != NULL
 	       && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS);
 
-  add_needed = TRUE;
+  add_needed = true;
   if (! dynamic)
     {
       /* If we are creating a shared library, create all the dynamic
@@ -4054,7 +4391,7 @@ elf_link_add_object_symbols (bfd *abfd,
 	      || (!bfd_link_relocatable (info)
 		  && info->nointerp
 		  && (info->export_dynamic || info->dynamic)))
-	  && is_elf_hash_table (htab)
+	  && is_elf_hash_table (&htab->root)
 	  && info->output_bfd->xvec == abfd->xvec
 	  && !htab->dynamic_sections_created)
 	{
@@ -4062,7 +4399,7 @@ elf_link_add_object_symbols (bfd *abfd,
 	    goto error_return;
 	}
     }
-  else if (!is_elf_hash_table (htab))
+  else if (!is_elf_hash_table (&htab->root))
     goto error_return;
   else
     {
@@ -4070,7 +4407,7 @@ elf_link_add_object_symbols (bfd *abfd,
       char *audit = NULL;
       struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
       const Elf_Internal_Phdr *phdr;
-      int ret;
+      struct elf_link_loaded_list *loaded_lib;
 
       /* ld --just-symbols and dynamic objects don't mix very well.
 	 ld shouldn't allow it.  */
@@ -4089,7 +4426,7 @@ elf_link_add_object_symbols (bfd *abfd,
 		       | DYN_NO_NEEDED)) == 0;
 
       s = bfd_get_section_by_name (abfd, ".dynamic");
-      if (s != NULL)
+      if (s != NULL && s->size != 0 && (s->flags & SEC_HAS_CONTENTS) != 0)
 	{
 	  bfd_byte *dynbuf;
 	  bfd_byte *extdyn;
@@ -4098,7 +4435,7 @@ elf_link_add_object_symbols (bfd *abfd,
 
 	  if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
 	    {
-error_free_dyn:
+	    error_free_dyn:
 	      free (dynbuf);
 	      goto error_return;
 	    }
@@ -4109,7 +4446,7 @@ error_free_dyn:
 	  shlink = elf_elfsections (abfd)[elfsec]->sh_link;
 
 	  for (extdyn = dynbuf;
-	       extdyn <= dynbuf + s->size - bed->s->sizeof_dyn;
+	       (size_t) (dynbuf + s->size - extdyn) >= bed->s->sizeof_dyn;
 	       extdyn += bed->s->sizeof_dyn)
 	    {
 	      Elf_Internal_Dyn dyn;
@@ -4127,8 +4464,8 @@ error_free_dyn:
 		  struct bfd_link_needed_list *n, **pn;
 		  char *fnm, *anm;
 		  unsigned int tagv = dyn.d_un.d_val;
+		  size_t amt = sizeof (struct bfd_link_needed_list);
 
-		  amt = sizeof (struct bfd_link_needed_list);
 		  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
 		  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
 		  if (n == NULL || fnm == NULL)
@@ -4150,8 +4487,8 @@ error_free_dyn:
 		  struct bfd_link_needed_list *n, **pn;
 		  char *fnm, *anm;
 		  unsigned int tagv = dyn.d_un.d_val;
+		  size_t amt = sizeof (struct bfd_link_needed_list);
 
-		  amt = sizeof (struct bfd_link_needed_list);
 		  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
 		  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
 		  if (n == NULL || fnm == NULL)
@@ -4176,8 +4513,8 @@ error_free_dyn:
 		  struct bfd_link_needed_list *n, **pn;
 		  char *fnm, *anm;
 		  unsigned int tagv = dyn.d_un.d_val;
+		  size_t amt = sizeof (struct bfd_link_needed_list);
 
-		  amt = sizeof (struct bfd_link_needed_list);
 		  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
 		  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
 		  if (n == NULL || fnm == NULL)
@@ -4201,6 +4538,8 @@ error_free_dyn:
 		  unsigned int tagv = dyn.d_un.d_val;
 		  audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
 		}
+	      if (dyn.d_tag == DT_FLAGS_1)
+		elf_tdata (abfd)->is_pie = (dyn.d_un.d_val & DF_1_PIE) != 0;
 	    }
 
 	  free (dynbuf);
@@ -4227,10 +4566,14 @@ error_free_dyn:
 	if (phdr->p_type == PT_GNU_RELRO)
 	  {
 	    for (s = abfd->sections; s != NULL; s = s->next)
-	      if ((s->flags & SEC_ALLOC) != 0
-		  && s->vma >= phdr->p_vaddr
-		  && s->vma + s->size <= phdr->p_vaddr + phdr->p_memsz)
-		s->flags |= SEC_READONLY;
+	      {
+		unsigned int opb = bfd_octets_per_byte (abfd, s);
+
+		if ((s->flags & SEC_ALLOC) != 0
+		    && s->vma * opb >= phdr->p_vaddr
+		    && s->vma * opb + s->size <= phdr->p_vaddr + phdr->p_memsz)
+		  s->flags |= SEC_READONLY;
+	      }
 	    break;
 	  }
 
@@ -4259,15 +4602,22 @@ error_free_dyn:
 	 will need to know it.  */
       elf_dt_name (abfd) = soname;
 
-      ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
-      if (ret < 0)
-	goto error_return;
-
       /* If we have already included this dynamic object in the
 	 link, just ignore it.  There is no reason to include a
 	 particular dynamic object more than once.  */
-      if (ret > 0)
-	return TRUE;
+      for (loaded_lib = htab->dyn_loaded;
+	   loaded_lib != NULL;
+	   loaded_lib = loaded_lib->next)
+	{
+	  if (strcmp (elf_dt_name (loaded_lib->abfd), soname) == 0)
+	    return true;
+	}
+
+      /* Create dynamic sections for backends that require that be done
+	 before setup_gnu_properties.  */
+      if (add_needed
+	  && !_bfd_elf_link_create_dynamic_sections (abfd, info))
+	return false;
 
       /* Save the DT_AUDIT entry for the linker emulation code. */
       elf_dt_audit (abfd) = audit;
@@ -4311,8 +4661,7 @@ error_free_dyn:
 	{
 	  /* We store a pointer to the hash table entry for each
 	     external symbol.  */
-	  amt = extsymcount;
-	  amt *= sizeof (struct elf_link_hash_entry *);
+	  size_t amt = extsymcount * sizeof (struct elf_link_hash_entry *);
 	  sym_hash = (struct elf_link_hash_entry **) bfd_zalloc (abfd, amt);
 	  if (sym_hash == NULL)
 	    goto error_free_sym;
@@ -4331,17 +4680,16 @@ error_free_dyn:
 	 to internal format.  */
       if (elf_dynversym (abfd) != 0)
 	{
-	  Elf_Internal_Shdr *versymhdr;
+	  Elf_Internal_Shdr *versymhdr = &elf_tdata (abfd)->dynversym_hdr;
+	  bfd_size_type amt = versymhdr->sh_size;
 
-	  versymhdr = &elf_tdata (abfd)->dynversym_hdr;
-	  amt = versymhdr->sh_size;
-	  extversym = (Elf_External_Versym *) bfd_malloc (amt);
+	  if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0)
+	    goto error_free_sym;
+	  extversym = (Elf_External_Versym *)
+	    _bfd_malloc_and_read (abfd, amt, amt);
 	  if (extversym == NULL)
 	    goto error_free_sym;
-	  if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
-	      || bfd_bread (extversym, amt, abfd) != amt)
-	    goto error_free_vers;
-	  extversym_end = extversym + (amt / sizeof (* extversym));
+	  extversym_end = extversym + amt / sizeof (*extversym);
 	}
     }
 
@@ -4363,7 +4711,12 @@ error_free_dyn:
 	      h = (struct elf_link_hash_entry *) p;
 	      entsize += htab->root.table.entsize;
 	      if (h->root.type == bfd_link_hash_warning)
-		entsize += htab->root.table.entsize;
+		{
+		  entsize += htab->root.table.entsize;
+		  h = (struct elf_link_hash_entry *) h->root.u.i.link;
+		}
+	      if (h->root.type == bfd_link_hash_common)
+		entsize += sizeof (*h->root.u.c.p);
 	    }
 	}
 
@@ -4392,9 +4745,13 @@ error_free_dyn:
       old_table = htab->root.table.table;
       old_size = htab->root.table.size;
       old_count = htab->root.table.count;
-      old_strtab = _bfd_elf_strtab_save (htab->dynstr);
-      if (old_strtab == NULL)
-	goto error_free_vers;
+      old_strtab = NULL;
+      if (htab->dynstr != NULL)
+	{
+	  old_strtab = _bfd_elf_strtab_save (htab->dynstr);
+	  if (old_strtab == NULL)
+	    goto error_free_vers;
+	}
 
       for (i = 0; i < htab->root.table.size; i++)
 	{
@@ -4403,14 +4760,20 @@ error_free_dyn:
 
 	  for (p = htab->root.table.table[i]; p != NULL; p = p->next)
 	    {
-	      memcpy (old_ent, p, htab->root.table.entsize);
-	      old_ent = (char *) old_ent + htab->root.table.entsize;
 	      h = (struct elf_link_hash_entry *) p;
+	      memcpy (old_ent, h, htab->root.table.entsize);
+	      old_ent = (char *) old_ent + htab->root.table.entsize;
 	      if (h->root.type == bfd_link_hash_warning)
 		{
-		  memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
+		  h = (struct elf_link_hash_entry *) h->root.u.i.link;
+		  memcpy (old_ent, h, htab->root.table.entsize);
 		  old_ent = (char *) old_ent + htab->root.table.entsize;
 		}
+	      if (h->root.type == bfd_link_hash_common)
+		{
+		  memcpy (old_ent, h->root.u.c.p, sizeof (*h->root.u.c.p));
+		  old_ent = (char *) old_ent + sizeof (*h->root.u.c.p);
+		}
 	    }
 	}
     }
@@ -4437,7 +4800,7 @@ error_free_dyn:
 	(_("%pB: plugin needed to handle lto object"), abfd);
     }
 
-  for (isym = isymbuf, isymend = isymbuf + extsymcount;
+  for (isym = isymbuf, isymend = PTR_ADD (isymbuf, extsymcount);
        isym < isymend;
        isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
     {
@@ -4448,20 +4811,20 @@ error_free_dyn:
       const char *name;
       struct elf_link_hash_entry *h;
       struct elf_link_hash_entry *hi;
-      bfd_boolean definition;
-      bfd_boolean size_change_ok;
-      bfd_boolean type_change_ok;
-      bfd_boolean new_weak;
-      bfd_boolean old_weak;
-      bfd_boolean override;
-      bfd_boolean common;
-      bfd_boolean discarded;
+      bool definition;
+      bool size_change_ok;
+      bool type_change_ok;
+      bool new_weak;
+      bool old_weak;
+      bfd *override;
+      bool common;
+      bool discarded;
       unsigned int old_alignment;
       unsigned int shindex;
       bfd *old_bfd;
-      bfd_boolean matched;
+      bool matched;
 
-      override = FALSE;
+      override = NULL;
 
       flags = BSF_NO_FLAGS;
       sec = NULL;
@@ -4471,9 +4834,9 @@ error_free_dyn:
 	{
 	  /* Treat common symbol as undefined for --no-define-common.  */
 	  isym->st_shndx = SHN_UNDEF;
-	  common = FALSE;
+	  common = false;
 	}
-      discarded = FALSE;
+      discarded = false;
 
       bind = ELF_ST_BIND (isym->st_info);
       switch (bind)
@@ -4542,7 +4905,7 @@ error_free_dyn:
 	      /* Symbols from discarded section are undefined.  We keep
 		 its visibility.  */
 	      sec = bfd_und_section_ptr;
-	      discarded = TRUE;
+	      discarded = true;
 	      isym->st_shndx = SHN_UNDEF;
 	    }
 	  else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
@@ -4610,23 +4973,23 @@ error_free_dyn:
 
       if (bfd_is_und_section (sec)
 	  || bfd_is_com_section (sec))
-	definition = FALSE;
+	definition = false;
       else
-	definition = TRUE;
+	definition = true;
 
-      size_change_ok = FALSE;
+      size_change_ok = false;
       type_change_ok = bed->type_change_ok;
-      old_weak = FALSE;
-      matched = FALSE;
+      old_weak = false;
+      matched = false;
       old_alignment = 0;
       old_bfd = NULL;
       new_sec = sec;
 
-      if (is_elf_hash_table (htab))
+      if (is_elf_hash_table (&htab->root))
 	{
 	  Elf_Internal_Versym iver;
 	  unsigned int vernum = 0;
-	  bfd_boolean skip;
+	  bool skip;
 
 	  if (ever == NULL)
 	    {
@@ -4767,21 +5130,23 @@ error_free_dyn:
 	  /* Override a definition only if the new symbol matches the
 	     existing one.  */
 	  if (override && matched)
-	    definition = FALSE;
+	    definition = false;
 
 	  h = *sym_hash;
 	  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;
 
-	  if (elf_tdata (abfd)->verdef != NULL
+	  if (h->versioned != unversioned
+	      && elf_tdata (abfd)->verdef != NULL
 	      && vernum > 1
 	      && definition)
 	    h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
 	}
 
       if (! (_bfd_generic_link_add_one_symbol
-	     (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
+	     (info, override ? override : abfd, name, flags, sec, value,
+	      NULL, false, bed->collect,
 	      (struct bfd_link_hash_entry **) sym_hash)))
 	goto error_free_vers;
 
@@ -4793,19 +5158,19 @@ error_free_dyn:
 	     || h->root.type == bfd_link_hash_warning)
 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
+      *sym_hash = h;
+
       /* Setting the index to -3 tells elf_link_output_extsym that
 	 this symbol is defined in a discarded section.  */
-      if (discarded)
+      if (discarded && is_elf_hash_table (&htab->root))
 	h->indx = -3;
 
-      *sym_hash = h;
-
       new_weak = (flags & BSF_WEAK) != 0;
       if (dynamic
 	  && definition
 	  && new_weak
 	  && !bed->is_function_type (ELF_ST_TYPE (isym->st_info))
-	  && is_elf_hash_table (htab)
+	  && is_elf_hash_table (&htab->root)
 	  && h->u.alias == NULL)
 	{
 	  /* Keep a list of all weak defined non function symbols from
@@ -4844,19 +5209,23 @@ error_free_dyn:
 	    h->root.u.c.p->alignment_power = old_alignment;
 	}
 
-      if (is_elf_hash_table (htab))
+      if (is_elf_hash_table (&htab->root))
 	{
 	  /* Set a flag in the hash table entry indicating the type of
 	     reference or definition we just found.  A dynamic symbol
 	     is one which is referenced or defined by both a regular
 	     object and a shared object.  */
-	  bfd_boolean dynsym = FALSE;
+	  bool dynsym = false;
 
-	  /* Plugin symbols aren't normal.  Don't set def_regular or
-	     ref_regular for them, or make them dynamic.  */
+	  /* Plugin symbols aren't normal.  Don't set def/ref flags.  */
 	  if ((abfd->flags & BFD_PLUGIN) != 0)
-	    ;
-	  else if (! dynamic)
+	    {
+	      /* Except for this flag to track nonweak references.  */
+	      if (!definition
+		  && bind != STB_WEAK)
+		h->ref_ir_nonweak = 1;
+	    }
+	  else if (!dynamic)
 	    {
 	      if (! definition)
 		{
@@ -4873,14 +5242,6 @@ error_free_dyn:
 		      h->ref_dynamic = 1;
 		    }
 		}
-
-	      /* If the indirect symbol has been forced local, don't
-		 make the real symbol dynamic.  */
-	      if ((h == hi || !hi->forced_local)
-		  && (bfd_link_dll (info)
-		      || h->def_dynamic
-		      || h->ref_dynamic))
-		dynsym = TRUE;
 	    }
 	  else
 	    {
@@ -4894,21 +5255,34 @@ error_free_dyn:
 		  h->def_dynamic = 1;
 		  hi->def_dynamic = 1;
 		}
+	    }
 
-	      /* If the indirect symbol has been forced local, don't
-		 make the real symbol dynamic.  */
-	      if ((h == hi || !hi->forced_local)
-		  && (h->def_regular
-		      || h->ref_regular
-		      || (h->is_weakalias
-			  && weakdef (h)->dynindx != -1)))
-		dynsym = TRUE;
+	  /* If an indirect symbol has been forced local, don't
+	     make the real symbol dynamic.  */
+	  if (h != hi && hi->forced_local)
+	    ;
+	  else if (!dynamic)
+	    {
+	      if (bfd_link_dll (info)
+		  || h->def_dynamic
+		  || h->ref_dynamic)
+		dynsym = true;
+	    }
+	  else
+	    {
+	      if (h->def_regular
+		  || h->ref_regular
+		  || (h->is_weakalias
+		      && weakdef (h)->dynindx != -1))
+		dynsym = true;
 	    }
 
 	  /* Check to see if we need to add an indirect symbol for
 	     the default name.  */
-	  if (definition
-	      || (!override && h->root.type == bfd_link_hash_common))
+	  if ((definition
+	       || (!override && h->root.type == bfd_link_hash_common))
+	      && !(hi != h
+		   && hi->versioned == versioned_hidden))
 	    if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
 					      sec, value, &old_bfd, &dynsym))
 	      goto error_free_vers;
@@ -4968,10 +5342,14 @@ error_free_dyn:
 		  else
 		    _bfd_error_handler
 		      /* xgettext:c-format */
-		      (_("warning: alignment %u of symbol `%s' in %pB"
-			 " is smaller than %u in %pB"),
+		      (_("warning: alignment %u of normal symbol `%s' in %pB"
+			 " is smaller than %u used by the common definition in %pB"),
 		       1 << normal_align, name, normal_bfd,
 		       1 << common_align, common_bfd);
+
+		  /* PR 30499: make sure that users understand that this warning is serious.  */
+		  _bfd_error_handler
+		    (_("warning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised."));
 		}
 	    }
 
@@ -4983,12 +5361,18 @@ error_free_dyn:
 	      if (h->size != 0
 		  && h->size != isym->st_size
 		  && ! size_change_ok)
-		_bfd_error_handler
-		  /* xgettext:c-format */
-		  (_("warning: size of symbol `%s' changed"
-		     " from %" PRIu64 " in %pB to %" PRIu64 " in %pB"),
-		   name, (uint64_t) h->size, old_bfd,
-		   (uint64_t) isym->st_size, abfd);
+		{
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("warning: size of symbol `%s' changed"
+		       " from %" PRIu64 " in %pB to %" PRIu64 " in %pB"),
+		     name, (uint64_t) h->size, old_bfd,
+		     (uint64_t) isym->st_size, abfd);
+
+		  /* PR 30499: make sure that users understand that this warning is serious.  */
+		  _bfd_error_handler
+		    (_("warning: NOTE: size discrepancies can cause real problems.  Investigation is advised."));
+		}
 
 	      h->size = isym->st_size;
 	    }
@@ -5029,17 +5413,18 @@ error_free_dyn:
 	    }
 
 	  /* Merge st_other field.  */
-	  elf_merge_st_other (abfd, h, isym, sec, definition, dynamic);
+	  elf_merge_st_other (abfd, h, isym->st_other, sec,
+			      definition, dynamic);
 
 	  /* We don't want to make debug symbol dynamic.  */
 	  if (definition
 	      && (sec->flags & SEC_DEBUGGING)
 	      && !bfd_link_relocatable (info))
-	    dynsym = FALSE;
+	    dynsym = false;
 
 	  /* Nor should we make plugin symbols dynamic.  */
 	  if ((abfd->flags & BFD_PLUGIN) != 0)
-	    dynsym = FALSE;
+	    dynsym = false;
 
 	  if (definition)
 	    {
@@ -5047,7 +5432,14 @@ error_free_dyn:
 	      h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
 	    }
 
-	  if (definition && !dynamic)
+	  /* Don't add indirect symbols for .symver x, x@FOO aliases
+	     in IR.  Since all data or text symbols in IR have the
+	     same type, value and section, we can't tell if a symbol
+	     is an alias of another symbol by their types, values and
+	     sections.  */
+	  if (definition
+	      && !dynamic
+	      && (abfd->flags & BFD_PLUGIN) == 0)
 	    {
 	      char *p = strchr (name, ELF_VER_CHR);
 	      if (p != NULL && p[1] != ELF_VER_CHR)
@@ -5056,8 +5448,8 @@ error_free_dyn:
 		     aliases can be checked.  */
 		  if (!nondeflt_vers)
 		    {
-		      amt = ((isymend - isym + 1)
-			     * sizeof (struct elf_link_hash_entry *));
+		      size_t amt = ((isymend - isym + 1)
+				    * sizeof (struct elf_link_hash_entry *));
 		      nondeflt_vers
 			= (struct elf_link_hash_entry **) bfd_malloc (amt);
 		      if (!nondeflt_vers)
@@ -5086,26 +5478,26 @@ error_free_dyn:
 	      {
 	      case STV_INTERNAL:
 	      case STV_HIDDEN:
-		(*bed->elf_backend_hide_symbol) (info, h, TRUE);
-		dynsym = FALSE;
+		(*bed->elf_backend_hide_symbol) (info, h, true);
+		dynsym = false;
 		break;
 	      }
 
-	  /* Don't add DT_NEEDED for references from the dummy bfd nor
-	     for unmatched symbol.  */
 	  if (!add_needed
 	      && matched
 	      && definition
+	      && h->root.type != bfd_link_hash_indirect
 	      && ((dynsym
-		   && h->ref_regular_nonweak
-		   && (old_bfd == NULL
-		       || (old_bfd->flags & BFD_PLUGIN) == 0))
+		   && h->ref_regular_nonweak)
+		  || (old_bfd != NULL
+		      && (old_bfd->flags & BFD_PLUGIN) != 0
+		      && h->ref_ir_nonweak
+		      && !info->lto_all_symbols_read)
 		  || (h->ref_dynamic_nonweak
 		      && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
 		      && !on_needed_list (elf_dt_name (abfd),
 					  htab->needed, NULL))))
 	    {
-	      int ret;
 	      const char *soname = elf_dt_name (abfd);
 
 	      info->callbacks->minfo ("%!", soname, old_bfd,
@@ -5130,12 +5522,11 @@ error_free_dyn:
 	      elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class)
 		(elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED);
 
-	      add_needed = TRUE;
-	      ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
-	      if (ret < 0)
-		goto error_free_vers;
-
-	      BFD_ASSERT (ret == 0);
+	      /* Create dynamic sections for backends that require
+		 that be done before setup_gnu_properties.  */
+	      if (!_bfd_elf_link_create_dynamic_sections (abfd, info))
+		return false;
+	      add_needed = true;
 	    }
 	}
     }
@@ -5172,9 +5563,10 @@ error_free_dyn:
 		  && (s->flags & SEC_DEBUGGING) != 0))
 	    continue;
 
-	  internal_relocs = _bfd_elf_link_read_relocs (abfd, s, NULL,
-						       NULL,
-						       info->keep_memory);
+	  internal_relocs = _bfd_elf_link_info_read_relocs (abfd, info,
+							    s, NULL,
+							    NULL,
+							    _bfd_link_keep_memory (info));
 	  if (internal_relocs == NULL)
 	    goto error_free_vers;
 
@@ -5199,17 +5591,10 @@ error_free_dyn:
 	}
     }
 
-  if (extversym != NULL)
-    {
-      free (extversym);
-      extversym = NULL;
-    }
-
-  if (isymbuf != NULL)
-    {
-      free (isymbuf);
-      isymbuf = NULL;
-    }
+  free (extversym);
+  extversym = NULL;
+  free (isymbuf);
+  isymbuf = NULL;
 
   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
     {
@@ -5225,56 +5610,39 @@ error_free_dyn:
       memcpy (htab->root.table.table, old_tab, tabsize);
       htab->root.undefs = old_undefs;
       htab->root.undefs_tail = old_undefs_tail;
-      _bfd_elf_strtab_restore (htab->dynstr, old_strtab);
+      if (htab->dynstr != NULL)
+	_bfd_elf_strtab_restore (htab->dynstr, old_strtab);
       free (old_strtab);
       old_strtab = NULL;
       for (i = 0; i < htab->root.table.size; i++)
 	{
 	  struct bfd_hash_entry *p;
 	  struct elf_link_hash_entry *h;
-	  bfd_size_type size;
-	  unsigned int alignment_power;
 	  unsigned int non_ir_ref_dynamic;
 
 	  for (p = htab->root.table.table[i]; p != NULL; p = p->next)
 	    {
-	      h = (struct elf_link_hash_entry *) p;
-	      if (h->root.type == bfd_link_hash_warning)
-		h = (struct elf_link_hash_entry *) h->root.u.i.link;
-
-	      /* Preserve the maximum alignment and size for common
-		 symbols even if this dynamic lib isn't on DT_NEEDED
-		 since it can still be loaded at run time by another
-		 dynamic lib.  */
-	      if (h->root.type == bfd_link_hash_common)
-		{
-		  size = h->root.u.c.size;
-		  alignment_power = h->root.u.c.p->alignment_power;
-		}
-	      else
-		{
-		  size = 0;
-		  alignment_power = 0;
-		}
 	      /* Preserve non_ir_ref_dynamic so that this symbol
 		 will be exported when the dynamic lib becomes needed
 		 in the second pass.  */
+	      h = (struct elf_link_hash_entry *) p;
+	      if (h->root.type == bfd_link_hash_warning)
+		h = (struct elf_link_hash_entry *) h->root.u.i.link;
 	      non_ir_ref_dynamic = h->root.non_ir_ref_dynamic;
-	      memcpy (p, old_ent, htab->root.table.entsize);
-	      old_ent = (char *) old_ent + htab->root.table.entsize;
+
 	      h = (struct elf_link_hash_entry *) p;
+	      memcpy (h, old_ent, htab->root.table.entsize);
+	      old_ent = (char *) old_ent + htab->root.table.entsize;
 	      if (h->root.type == bfd_link_hash_warning)
 		{
-		  memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
-		  old_ent = (char *) old_ent + htab->root.table.entsize;
 		  h = (struct elf_link_hash_entry *) h->root.u.i.link;
+		  memcpy (h, old_ent, htab->root.table.entsize);
+		  old_ent = (char *) old_ent + htab->root.table.entsize;
 		}
 	      if (h->root.type == bfd_link_hash_common)
 		{
-		  if (size > h->root.u.c.size)
-		    h->root.u.c.size = size;
-		  if (alignment_power > h->root.u.c.p->alignment_power)
-		    h->root.u.c.p->alignment_power = alignment_power;
+		  memcpy (h->root.u.c.p, old_ent, sizeof (*h->root.u.c.p));
+		  old_ent = (char *) old_ent + sizeof (*h->root.u.c.p);
 		}
 	      h->root.non_ir_ref_dynamic = non_ir_ref_dynamic;
 	    }
@@ -5288,9 +5656,8 @@ error_free_dyn:
       free (old_tab);
       objalloc_free_block ((struct objalloc *) htab->root.table.memory,
 			   alloc_mark);
-      if (nondeflt_vers != NULL)
-	free (nondeflt_vers);
-      return TRUE;
+      free (nondeflt_vers);
+      return true;
     }
 
   if (old_tab != NULL)
@@ -5312,6 +5679,7 @@ error_free_dyn:
 	{
 	  struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
 	  char *shortname, *p;
+	  size_t amt;
 
 	  p = strchr (h->root.root.string, ELF_VER_CHR);
 	  if (p == NULL
@@ -5328,13 +5696,13 @@ error_free_dyn:
 
 	  hi = (struct elf_link_hash_entry *)
 	       bfd_link_hash_lookup (&htab->root, shortname,
-				     FALSE, FALSE, FALSE);
+				     false, false, false);
 	  if (hi != NULL
 	      && hi->root.type == h->root.type
 	      && hi->root.u.def.value == h->root.u.def.value
 	      && hi->root.u.def.section == h->root.u.def.section)
 	    {
-	      (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
+	      (*bed->elf_backend_hide_symbol) (info, hi, true);
 	      hi->root.type = bfd_link_hash_indirect;
 	      hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
 	      (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
@@ -5372,13 +5740,12 @@ error_free_dyn:
       struct elf_link_hash_entry **hppend;
       struct elf_link_hash_entry **sorted_sym_hash;
       struct elf_link_hash_entry *h;
-      size_t sym_count;
+      size_t sym_count, amt;
 
       /* Since we have to search the whole symbol list for each weak
 	 defined symbol, search time for N weak defined symbols will be
 	 O(N^2). Binary search will cut it down to O(NlogN).  */
-      amt = extsymcount;
-      amt *= sizeof (*sorted_sym_hash);
+      amt = extsymcount * sizeof (*sorted_sym_hash);
       sorted_sym_hash = bfd_malloc (amt);
       if (sorted_sym_hash == NULL)
 	goto error_return;
@@ -5516,13 +5883,13 @@ error_free_dyn:
 
   if (bed->check_directives
       && !(*bed->check_directives) (abfd, info))
-    return FALSE;
+    return false;
 
   /* If this is a non-traditional link, try to optimize the handling
      of the .stab/.stabstr sections.  */
   if (! dynamic
       && ! info->traditional_format
-      && is_elf_hash_table (htab)
+      && is_elf_hash_table (&htab->root)
       && (info->strip != strip_all && info->strip != strip_debugger))
     {
       asection *stabstr;
@@ -5534,7 +5901,7 @@ error_free_dyn:
 	  asection *stab;
 
 	  for (stab = abfd->sections; stab; stab = stab->next)
-	    if (CONST_STRNEQ (stab->name, ".stab")
+	    if (startswith (stab->name, ".stab")
 		&& (!stab->name[5] ||
 		    (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
 		&& (stab->flags & SEC_MERGE) == 0
@@ -5553,7 +5920,7 @@ error_free_dyn:
 	}
     }
 
-  if (is_elf_hash_table (htab) && add_needed)
+  if (dynamic && add_needed)
     {
       /* Add this bfd to the loaded list.  */
       struct elf_link_loaded_list *n;
@@ -5562,41 +5929,39 @@ error_free_dyn:
       if (n == NULL)
 	goto error_return;
       n->abfd = abfd;
-      n->next = htab->loaded;
-      htab->loaded = n;
+      n->next = htab->dyn_loaded;
+      htab->dyn_loaded = n;
     }
+  if (dynamic && !add_needed
+      && (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) != 0)
+    elf_dyn_lib_class (abfd) |= DYN_NO_NEEDED;
 
-  return TRUE;
+  return true;
 
  error_free_vers:
-  if (old_tab != NULL)
-    free (old_tab);
-  if (old_strtab != NULL)
-    free (old_strtab);
-  if (nondeflt_vers != NULL)
-    free (nondeflt_vers);
-  if (extversym != NULL)
-    free (extversym);
+  free (old_tab);
+  free (old_strtab);
+  free (nondeflt_vers);
+  free (extversym);
  error_free_sym:
-  if (isymbuf != NULL)
-    free (isymbuf);
+  free (isymbuf);
  error_return:
-  return FALSE;
+  return false;
 }
 
 /* Return the linker hash table entry of a symbol that might be
    satisfied by an archive symbol.  Return -1 on error.  */
 
-struct elf_link_hash_entry *
+struct bfd_link_hash_entry *
 _bfd_elf_archive_symbol_lookup (bfd *abfd,
 				struct bfd_link_info *info,
 				const char *name)
 {
-  struct elf_link_hash_entry *h;
+  struct bfd_link_hash_entry *h;
   char *p, *copy;
   size_t len, first;
 
-  h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, name, false, false, true);
   if (h != NULL)
     return h;
 
@@ -5613,20 +5978,19 @@ _bfd_elf_archive_symbol_lookup (bfd *abf
   len = strlen (name);
   copy = (char *) bfd_alloc (abfd, len);
   if (copy == NULL)
-    return (struct elf_link_hash_entry *) -1;
+    return (struct bfd_link_hash_entry *) -1;
 
   first = p - name + 1;
   memcpy (copy, name, first);
   memcpy (copy + first, name + first + 1, len - first);
 
-  h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, copy, false, false, true);
   if (h == NULL)
     {
       /* We also need to check references to the symbol without the
 	 version.  */
       copy[first - 1] = '\0';
-      h = elf_link_hash_lookup (elf_hash_table (info), copy,
-				FALSE, FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->hash, copy, false, false, true);
     }
 
   bfd_release (abfd, copy);
@@ -5646,25 +6010,25 @@ _bfd_elf_archive_symbol_lookup (bfd *abf
    Unfortunately, we do have to make multiple passes over the symbol
    table until nothing further is resolved.  */
 
-static bfd_boolean
+static bool
 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   symindex c;
   unsigned char *included = NULL;
   carsym *symdefs;
-  bfd_boolean loop;
-  bfd_size_type amt;
+  bool loop;
+  size_t amt;
   const struct elf_backend_data *bed;
-  struct elf_link_hash_entry * (*archive_symbol_lookup)
+  struct bfd_link_hash_entry * (*archive_symbol_lookup)
     (bfd *, struct bfd_link_info *, const char *);
 
   if (! bfd_has_map (abfd))
     {
       /* An empty archive is a special case.  */
       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
-	return TRUE;
+	return true;
       bfd_set_error (bfd_error_no_armap);
-      return FALSE;
+      return false;
     }
 
   /* Keep track of all symbols we know to be already defined, and all
@@ -5672,12 +6036,11 @@ elf_link_add_archive_symbols (bfd *abfd,
      second and subsequent passes.  */
   c = bfd_ardata (abfd)->symdef_count;
   if (c == 0)
-    return TRUE;
-  amt = c;
-  amt *= sizeof (*included);
+    return true;
+  amt = c * sizeof (*included);
   included = (unsigned char *) bfd_zmalloc (amt);
   if (included == NULL)
-    return FALSE;
+    return false;
 
   symdefs = bfd_ardata (abfd)->symdefs;
   bed = get_elf_backend_data (abfd);
@@ -5690,14 +6053,14 @@ elf_link_add_archive_symbols (bfd *abfd,
       carsym *symdef;
       carsym *symdefend;
 
-      loop = FALSE;
+      loop = false;
       last = -1;
 
       symdef = symdefs;
       symdefend = symdef + c;
       for (i = 0; symdef < symdefend; symdef++, i++)
 	{
-	  struct elf_link_hash_entry *h;
+	  struct bfd_link_hash_entry *h;
 	  bfd *element;
 	  struct bfd_link_hash_entry *undefs_tail;
 	  symindex mark;
@@ -5706,18 +6069,27 @@ elf_link_add_archive_symbols (bfd *abfd,
 	    continue;
 	  if (symdef->file_offset == last)
 	    {
-	      included[i] = TRUE;
+	      included[i] = true;
 	      continue;
 	    }
 
 	  h = archive_symbol_lookup (abfd, info, symdef->name);
-	  if (h == (struct elf_link_hash_entry *) -1)
+	  if (h == (struct bfd_link_hash_entry *) -1)
 	    goto error_return;
 
 	  if (h == NULL)
 	    continue;
 
-	  if (h->root.type == bfd_link_hash_common)
+	  if (h->type == bfd_link_hash_undefined)
+	    {
+	      /* If the archive element has already been loaded then one
+		 of the symbols defined by that element might have been
+		 made undefined due to being in a discarded section.  */
+	      if (is_elf_hash_table (info->hash)
+		  && ((struct elf_link_hash_entry *) h)->indx == -3)
+		continue;
+	    }
+	  else if (h->type == bfd_link_hash_common)
 	    {
 	      /* We currently have a common symbol.  The archive map contains
 		 a reference to this symbol, so we may want to include it.  We
@@ -5734,16 +6106,17 @@ elf_link_add_archive_symbols (bfd *abfd,
 	      if (! elf_link_is_defined_archive_symbol (abfd, symdef))
 		continue;
 	    }
-	  else if (h->root.type != bfd_link_hash_undefined)
+	  else
 	    {
-	      if (h->root.type != bfd_link_hash_undefweak)
+	      if (h->type != bfd_link_hash_undefweak)
 		/* Symbol must be defined.  Don't check it again.  */
-		included[i] = TRUE;
+		included[i] = true;
 	      continue;
 	    }
 
 	  /* We need to include this archive member.  */
-	  element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
+	  element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset,
+					     info);
 	  if (element == NULL)
 	    goto error_return;
 
@@ -5766,14 +6139,14 @@ elf_link_add_archive_symbols (bfd *abfd,
 	     does not require another pass.  This isn't a bug, but it
 	     does make the code less efficient than it could be.  */
 	  if (undefs_tail != info->hash->undefs_tail)
-	    loop = TRUE;
+	    loop = true;
 
 	  /* Look backward to mark all symbols from this object file
 	     which we have already seen in this pass.  */
 	  mark = i;
 	  do
 	    {
-	      included[mark] = TRUE;
+	      included[mark] = true;
 	      if (mark == 0)
 		break;
 	      --mark;
@@ -5788,19 +6161,17 @@ elf_link_add_archive_symbols (bfd *abfd,
   while (loop);
 
   free (included);
-
-  return TRUE;
+  return true;
 
  error_return:
-  if (included != NULL)
-    free (included);
-  return FALSE;
+  free (included);
+  return false;
 }
 
 /* Given an ELF BFD, add symbols to the global hash table as
    appropriate.  */
 
-bfd_boolean
+bool
 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   switch (bfd_get_format (abfd))
@@ -5811,20 +6182,20 @@ bfd_elf_link_add_symbols (bfd *abfd, str
       return elf_link_add_archive_symbols (abfd, info);
     default:
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 }
 
 struct hash_codes_info
 {
   unsigned long *hashcodes;
-  bfd_boolean error;
+  bool error;
 };
 
 /* This function will be called though elf_link_hash_traverse to store
    all hash value of the exported symbols in an array.  */
 
-static bfd_boolean
+static bool
 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
 {
   struct hash_codes_info *inf = (struct hash_codes_info *) data;
@@ -5834,7 +6205,7 @@ elf_collect_hash_codes (struct elf_link_
 
   /* Ignore indirect symbols.  These are added by the versioning code.  */
   if (h->dynindx == -1)
-    return TRUE;
+    return true;
 
   name = h->root.root.string;
   if (h->versioned >= versioned)
@@ -5845,8 +6216,8 @@ elf_collect_hash_codes (struct elf_link_
 	  alc = (char *) bfd_malloc (p - name + 1);
 	  if (alc == NULL)
 	    {
-	      inf->error = TRUE;
-	      return FALSE;
+	      inf->error = true;
+	      return false;
 	    }
 	  memcpy (alc, name, p - name);
 	  alc[p - name] = '\0';
@@ -5864,10 +6235,8 @@ elf_collect_hash_codes (struct elf_link_
      later.  */
   h->u.elf_hash_value = ha;
 
-  if (alc != NULL)
-    free (alc);
-
-  return TRUE;
+  free (alc);
+  return true;
 }
 
 struct collect_gnu_hash_codes
@@ -5889,13 +6258,13 @@ struct collect_gnu_hash_codes
   long int local_indx;
   long int shift1, shift2;
   unsigned long int mask;
-  bfd_boolean error;
+  bool error;
 };
 
 /* This function will be called though elf_link_hash_traverse to store
    all hash value of the exported symbols in an array.  */
 
-static bfd_boolean
+static bool
 elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data)
 {
   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
@@ -5905,11 +6274,11 @@ elf_collect_gnu_hash_codes (struct elf_l
 
   /* Ignore indirect symbols.  These are added by the versioning code.  */
   if (h->dynindx == -1)
-    return TRUE;
+    return true;
 
   /* Ignore also local symbols and undefined symbols.  */
   if (! (*s->bed->elf_hash_symbol) (h))
-    return TRUE;
+    return true;
 
   name = h->root.root.string;
   if (h->versioned >= versioned)
@@ -5920,8 +6289,8 @@ elf_collect_gnu_hash_codes (struct elf_l
 	  alc = (char *) bfd_malloc (p - name + 1);
 	  if (alc == NULL)
 	    {
-	      s->error = TRUE;
-	      return FALSE;
+	      s->error = true;
+	      return false;
 	    }
 	  memcpy (alc, name, p - name);
 	  alc[p - name] = '\0';
@@ -5940,10 +6309,8 @@ elf_collect_gnu_hash_codes (struct elf_l
   if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx)
     s->min_dynindx = h->dynindx;
 
-  if (alc != NULL)
-    free (alc);
-
-  return TRUE;
+  free (alc);
+  return true;
 }
 
 /* This function will be called though elf_link_hash_traverse to do
@@ -5951,7 +6318,7 @@ elf_collect_gnu_hash_codes (struct elf_l
    If using .MIPS.xhash, invoke record_xhash_symbol to add symbol index
    to the translation table.  */
 
-static bfd_boolean
+static bool
 elf_gnu_hash_process_symidx (struct elf_link_hash_entry *h, void *data)
 {
   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
@@ -5960,7 +6327,7 @@ elf_gnu_hash_process_symidx (struct elf_
 
   /* Ignore indirect symbols.  */
   if (h->dynindx == -1)
-    return TRUE;
+    return true;
 
   /* Ignore also local symbols and undefined symbols.  */
   if (! (*s->bed->elf_hash_symbol) (h))
@@ -5975,7 +6342,7 @@ elf_gnu_hash_process_symidx (struct elf_
 	  else
 	    h->dynindx = s->local_indx++;
 	}
-      return TRUE;
+      return true;
     }
 
   bucket = s->hashval[h->dynindx] % s->bucketcount;
@@ -5999,12 +6366,12 @@ elf_gnu_hash_process_symidx (struct elf_
     }
   else
     h->dynindx = s->indx[bucket]++;
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
 
-bfd_boolean
+bool
 _bfd_elf_hash_symbol (struct elf_link_hash_entry *h)
 {
   return !(h->forced_local
@@ -6044,15 +6411,11 @@ compute_bucket_count (struct bfd_link_in
   size_t best_size = 0;
   unsigned long int i;
 
-  /* We have a problem here.  The following code to optimize the table
-     size requires an integer type with more the 32 bits.  If
-     BFD_HOST_U_64_BIT is set we know about such a type.  */
-#ifdef BFD_HOST_U_64_BIT
   if (info->optimize)
     {
       size_t minsize;
       size_t maxsize;
-      BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
+      uint64_t best_chlen = ~((uint64_t) 0);
       bfd *dynobj = elf_hash_table (info)->dynobj;
       size_t dynsymcount = elf_hash_table (info)->dynsymcount;
       const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
@@ -6089,7 +6452,7 @@ compute_bucket_count (struct bfd_link_in
       for (i = minsize; i < maxsize; ++i)
 	{
 	  /* Walk through the array of hashcodes and count the collisions.  */
-	  BFD_HOST_U_64_BIT max;
+	  uint64_t max;
 	  unsigned long int j;
 	  unsigned long int fact;
 
@@ -6154,11 +6517,7 @@ compute_bucket_count (struct bfd_link_in
       free (counts);
     }
   else
-#endif /* defined (BFD_HOST_U_64_BIT) */
     {
-      /* This is the fallback solution if no 64bit type is available or if we
-	 are not supposed to spend much time on optimizations.  We select the
-	 bucket count using a fixed set of numbers.  */
       for (i = 0; elf_buckets[i] != 0; i++)
 	{
 	  best_size = elf_buckets[i];
@@ -6174,7 +6533,7 @@ compute_bucket_count (struct bfd_link_in
 
 /* Size any SHT_GROUP section for ld -r.  */
 
-bfd_boolean
+bool
 _bfd_elf_size_group_sections (struct bfd_link_info *info)
 {
   bfd *ibfd;
@@ -6185,15 +6544,15 @@ _bfd_elf_size_group_sections (struct bfd
 	&& (s = ibfd->sections) != NULL
 	&& s->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
 	&& !_bfd_elf_fixup_group_sections (ibfd, bfd_abs_section_ptr))
-      return FALSE;
-  return TRUE;
+      return false;
+  return true;
 }
 
 /* Set a default stack segment size.  The value in INFO wins.  If it
    is unset, LEGACY_SYMBOL's value is used, and if that symbol is
    undefined it is initialized.  */
 
-bfd_boolean
+bool
 bfd_elf_stack_segment_size (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    const char *legacy_symbol,
@@ -6204,7 +6563,7 @@ bfd_elf_stack_segment_size (bfd *output_
   /* Look for legacy symbol.  */
   if (legacy_symbol)
     h = elf_link_hash_lookup (elf_hash_table (info), legacy_symbol,
-			      FALSE, FALSE, FALSE);
+			      false, false, false);
   if (h && (h->root.type == bfd_link_hash_defined
 	    || h->root.type == bfd_link_hash_defweak)
       && h->def_regular
@@ -6239,15 +6598,15 @@ bfd_elf_stack_segment_size (bfd *output_
 	    (info, output_bfd, legacy_symbol,
 	     BSF_GLOBAL, bfd_abs_section_ptr,
 	     info->stacksize >= 0 ? info->stacksize : 0,
-	     NULL, FALSE, get_elf_backend_data (output_bfd)->collect, &bh)))
-	return FALSE;
+	     NULL, false, get_elf_backend_data (output_bfd)->collect, &bh)))
+	return false;
 
       h = (struct elf_link_hash_entry *) bh;
       h->def_regular = 1;
       h->type = STT_OBJECT;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
@@ -6256,10 +6615,10 @@ struct elf_gc_sweep_symbol_info
 {
   struct bfd_link_info *info;
   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
-		       bfd_boolean);
+		       bool);
 };
 
-static bfd_boolean
+static bool
 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
 {
   if (!h->mark
@@ -6273,13 +6632,13 @@ elf_gc_sweep_symbol (struct elf_link_has
       struct elf_gc_sweep_symbol_info *inf;
 
       inf = (struct elf_gc_sweep_symbol_info *) data;
-      (*inf->hide_symbol) (inf->info, h, TRUE);
+      (*inf->hide_symbol) (inf->info, h, true);
       h->def_regular = 0;
       h->ref_regular = 0;
       h->ref_regular_nonweak = 0;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set up the sizes and contents of the ELF dynamic sections.  This is
@@ -6287,7 +6646,7 @@ elf_gc_sweep_symbol (struct elf_link_has
    must set the sizes of the sections before the linker sets the
    addresses of the various sections.  */
 
-bfd_boolean
+bool
 bfd_elf_size_dynamic_sections (bfd *output_bfd,
 			       const char *soname,
 			       const char *rpath,
@@ -6304,7 +6663,22 @@ bfd_elf_size_dynamic_sections (bfd *outp
   *sinterpptr = NULL;
 
   if (!is_elf_hash_table (info->hash))
-    return TRUE;
+    return true;
+
+  /* Any syms created from now on start with -1 in
+     got.refcount/offset and plt.refcount/offset.  */
+  elf_hash_table (info)->init_got_refcount
+    = elf_hash_table (info)->init_got_offset;
+  elf_hash_table (info)->init_plt_refcount
+    = elf_hash_table (info)->init_plt_offset;
+
+  bed = get_elf_backend_data (output_bfd);
+
+  /* The backend may have to create some sections regardless of whether
+     we're dynamic or not.  */
+  if (bed->elf_backend_always_size_sections
+      && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
+    return false;
 
   dynobj = elf_hash_table (info)->dynobj;
 
@@ -6325,21 +6699,21 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  struct elf_info_failed eif;
 
 	  eif.info = info;
-	  eif.failed = FALSE;
+	  eif.failed = false;
 	  elf_link_hash_traverse (elf_hash_table (info),
 				  _bfd_elf_export_symbol,
 				  &eif);
 	  if (eif.failed)
-	    return FALSE;
+	    return false;
 	}
 
       if (soname != NULL)
 	{
 	  soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
-					     soname, TRUE);
+					     soname, true);
 	  if (soname_indx == (size_t) -1
 	      || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
-	    return FALSE;
+	    return false;
 	}
       else
 	soname_indx = (size_t) -1;
@@ -6363,7 +6737,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
 
 	      newname = (char *) bfd_malloc (newlen);
 	      if (newname == NULL)
-		return FALSE;
+		return false;
 	      newname[0] = leading_char;
 	      memcpy (newname + (leading_char != '\0'), name, namelen);
 
@@ -6372,8 +6746,8 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	      *p++ = ELF_VER_CHR;
 	      memcpy (p, verstr, verlen + 1);
 	      newh = elf_link_hash_lookup (elf_hash_table (info),
-					   newname, FALSE, FALSE,
-					   FALSE);
+					   newname, false, false,
+					   false);
 	      if (newh == NULL
 		  || (newh->root.type != bfd_link_hash_defined
 		      && newh->root.type != bfd_link_hash_defweak))
@@ -6382,8 +6756,8 @@ bfd_elf_size_dynamic_sections (bfd *outp
 		  *p++ = ELF_VER_CHR;
 		  memcpy (p, verstr, verlen + 1);
 		  newh = elf_link_hash_lookup (elf_hash_table (info),
-					       newname, FALSE, FALSE,
-					       FALSE);
+					       newname, false, false,
+					       false);
 		}
 	      free (newname);
 
@@ -6398,18 +6772,18 @@ bfd_elf_size_dynamic_sections (bfd *outp
 
       /* Attach all the symbols to their version information.  */
       asvinfo.info = info;
-      asvinfo.failed = FALSE;
+      asvinfo.failed = false;
 
       elf_link_hash_traverse (elf_hash_table (info),
 			      _bfd_elf_link_assign_sym_version,
 			      &asvinfo);
       if (asvinfo.failed)
-	return FALSE;
+	return false;
 
       if (!info->allow_undefined_version)
 	{
 	  /* Check if all global versions have a definition.  */
-	  bfd_boolean all_defined = TRUE;
+	  bool all_defined = true;
 	  for (t = info->version_info; t != NULL; t = t->next)
 	    for (d = t->globals.list; d != NULL; d = d->next)
 	      if (d->literal && !d->symver && !d->script)
@@ -6417,13 +6791,13 @@ bfd_elf_size_dynamic_sections (bfd *outp
 		  _bfd_error_handler
 		    (_("%s: undefined version: %s"),
 		     d->pattern, t->name);
-		  all_defined = FALSE;
+		  all_defined = false;
 		}
 
 	  if (!all_defined)
 	    {
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -6486,7 +6860,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  s->size = size;
 	  s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
 	  if (s->contents == NULL && s->size != 0)
-	    return FALSE;
+	    return false;
 
 	  /* Fill in the version definition section.  */
 
@@ -6520,12 +6894,12 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	    {
 	      size_t indx;
 
-	      name = lbasename (output_bfd->filename);
+	      name = lbasename (bfd_get_filename (output_bfd));
 	      def.vd_hash = bfd_elf_hash (name);
 	      indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
-					  name, FALSE);
+					  name, false);
 	      if (indx == (size_t) -1)
-		return FALSE;
+		return false;
 	      defaux.vda_name = indx;
 	    }
 	  defaux.vda_next = 0;
@@ -6539,9 +6913,9 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	      bh = NULL;
 	      if (! (_bfd_generic_link_add_one_symbol
 		     (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
-		      0, NULL, FALSE,
+		      0, NULL, false,
 		      get_elf_backend_data (dynobj)->collect, &bh)))
-		return FALSE;
+		return false;
 	      h = (struct elf_link_hash_entry *) bh;
 	      h->non_elf = 0;
 	      h->def_regular = 1;
@@ -6549,7 +6923,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	      h->verinfo.vertree = NULL;
 
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 
 	      /* Create a duplicate of the base version with the same
 		 aux block, but different flags.  */
@@ -6586,9 +6960,9 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	      bh = NULL;
 	      if (! (_bfd_generic_link_add_one_symbol
 		     (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
-		      0, NULL, FALSE,
+		      0, NULL, false,
 		      get_elf_backend_data (dynobj)->collect, &bh)))
-		return FALSE;
+		return false;
 	      h = (struct elf_link_hash_entry *) bh;
 	      h->non_elf = 0;
 	      h->def_regular = 1;
@@ -6596,7 +6970,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	      h->verinfo.vertree = t;
 
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 
 	      def.vd_version = VER_DEF_CURRENT;
 	      def.vd_flags = 0;
@@ -6664,8 +7038,6 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	}
     }
 
-  bed = get_elf_backend_data (output_bfd);
-
   if (info->gc_sections && bed->can_gc_sections)
     {
       struct elf_gc_sweep_symbol_info sweep_info;
@@ -6692,13 +7064,17 @@ bfd_elf_size_dynamic_sections (bfd *outp
       sinfo.vers = elf_tdata (output_bfd)->cverdefs;
       if (sinfo.vers == 0)
 	sinfo.vers = 1;
-      sinfo.failed = FALSE;
+      sinfo.failed = false;
 
       elf_link_hash_traverse (elf_hash_table (info),
 			      _bfd_elf_link_find_version_dependencies,
 			      &sinfo);
       if (sinfo.failed)
-	return FALSE;
+	return false;
+
+      bed->elf_backend_add_glibc_version_dependency (&sinfo);
+      if (sinfo.failed)
+	return false;
 
       if (elf_tdata (output_bfd)->verref == NULL)
 	s->flags |= SEC_EXCLUDE;
@@ -6727,7 +7103,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  s->size = size;
 	  s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
 	  if (s->contents == NULL)
-	    return FALSE;
+	    return false;
 
 	  p = s->contents;
 	  for (vn = elf_tdata (output_bfd)->verref;
@@ -6747,10 +7123,11 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	      indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
 					  elf_dt_name (vn->vn_bfd) != NULL
 					  ? elf_dt_name (vn->vn_bfd)
-					  : lbasename (vn->vn_bfd->filename),
-					  FALSE);
+					  : lbasename (bfd_get_filename
+						       (vn->vn_bfd)),
+					  false);
 	      if (indx == (size_t) -1)
-		return FALSE;
+		return false;
 	      vn->vn_file = indx;
 	      vn->vn_aux = sizeof (Elf_External_Verneed);
 	      if (vn->vn_nextref == NULL)
@@ -6767,9 +7144,9 @@ bfd_elf_size_dynamic_sections (bfd *outp
 		{
 		  a->vna_hash = bfd_elf_hash (a->vna_nodename);
 		  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
-					      a->vna_nodename, FALSE);
+					      a->vna_nodename, false);
 		  if (indx == (size_t) -1)
-		    return FALSE;
+		    return false;
 		  a->vna_name = indx;
 		  if (a->vna_nextptr == NULL)
 		    a->vna_next = 0;
@@ -6786,33 +7163,41 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	}
     }
 
-  /* Any syms created from now on start with -1 in
-     got.refcount/offset and plt.refcount/offset.  */
-  elf_hash_table (info)->init_got_refcount
-    = elf_hash_table (info)->init_got_offset;
-  elf_hash_table (info)->init_plt_refcount
-    = elf_hash_table (info)->init_plt_offset;
-
   if (bfd_link_relocatable (info)
       && !_bfd_elf_size_group_sections (info))
-    return FALSE;
-
-  /* The backend may have to create some sections regardless of whether
-     we're dynamic or not.  */
-  if (bed->elf_backend_always_size_sections
-      && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
-    return FALSE;
+    return false;
 
   /* Determine any GNU_STACK segment requirements, after the backend
      has had a chance to set a default segment size.  */
   if (info->execstack)
-    elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
+    {
+      /* If the user has explicitly requested warnings, then generate one even
+	 though the choice is the result of another command line option.  */
+      if (info->warn_execstack == 1)
+	{
+	  if (info->error_execstack)
+	    {
+	      _bfd_error_handler
+		(_("\
+error: creating an executable stack because of -z execstack command line option"));
+	      return false;
+	    }
+
+	  _bfd_error_handler
+	    (_("\
+warning: enabling an executable stack because of -z execstack command line option"));
+	}
+
+      elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
+    }
   else if (info->noexecstack)
     elf_stack_flags (output_bfd) = PF_R | PF_W;
   else
     {
       bfd *inputobj;
       asection *notesec = NULL;
+      bfd *noteobj = NULL;
+      bfd *emptyobj = NULL;
       int exec = 0;
 
       for (inputobj = info->input_bfds;
@@ -6831,15 +7216,67 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
 	  if (s)
 	    {
-	      if (s->flags & SEC_CODE)
-		exec = PF_X;
 	      notesec = s;
+	      if (s->flags & SEC_CODE)
+		{
+		  noteobj = inputobj;
+		  exec = PF_X;
+		  /* There is no point in scanning the remaining bfds.  */
+		  break;
+		}
+	    }
+	  else if (bed->default_execstack && info->default_execstack)
+	    {
+	      exec = PF_X;
+	      emptyobj = inputobj;
 	    }
-	  else if (bed->default_execstack)
-	    exec = PF_X;
 	}
+
       if (notesec || info->stacksize > 0)
-	elf_stack_flags (output_bfd) = PF_R | PF_W | exec;
+	{
+	  if (exec)
+	    {
+	      if (info->warn_execstack != 0)
+		{
+		  /* PR 29072: Because an executable stack is a serious
+		     security risk, make sure that the user knows that it is
+		     being enabled despite the fact that it was not requested
+		     on the command line.  */
+		  if (noteobj)
+		    {
+		      if (info->error_execstack)
+			{
+			  _bfd_error_handler (_("\
+error: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)"),
+					      bfd_get_filename (noteobj));
+			  return false;
+			}
+
+		      _bfd_error_handler (_("\
+warning: %s: requires executable stack (because the .note.GNU-stack section is executable)"),
+		       bfd_get_filename (noteobj));
+		    }
+		  else if (emptyobj)
+		    {
+		      if (info->error_execstack)
+			{
+			  _bfd_error_handler (_("\
+error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack section"),
+					      bfd_get_filename (emptyobj));
+			  return false;
+			}
+
+		      _bfd_error_handler (_("\
+warning: %s: missing .note.GNU-stack section implies executable stack"),
+					  bfd_get_filename (emptyobj));
+		      _bfd_error_handler (_("\
+NOTE: This behaviour is deprecated and will be removed in a future version of the linker"));
+		    }
+		}
+	    }
+	  elf_stack_flags (output_bfd) = PF_R | PF_W | exec;
+	}
+
       if (notesec && exec && bfd_link_relocatable (info)
 	  && notesec->output_section != bfd_abs_section_ptr)
 	notesec->output_section->flags |= SEC_CODE;
@@ -6858,7 +7295,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
       if (info->symbolic)
 	{
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
-	    return FALSE;
+	    return false;
 	  info->flags |= DF_SYMBOLIC;
 	}
 
@@ -6868,13 +7305,13 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  bfd_vma tag;
 
 	  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
-				      TRUE);
+				      true);
 	  if (indx == (size_t) -1)
-	    return FALSE;
+	    return false;
 
 	  tag = info->new_dtags ? DT_RUNPATH : DT_RPATH;
 	  if (!_bfd_elf_add_dynamic_entry (info, tag, indx))
-	    return FALSE;
+	    return false;
 	}
 
       if (filter_shlib != NULL)
@@ -6882,10 +7319,10 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  size_t indx;
 
 	  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
-				      filter_shlib, TRUE);
+				      filter_shlib, true);
 	  if (indx == (size_t) -1
 	      || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
-	    return FALSE;
+	    return false;
 	}
 
       if (auxiliary_filters != NULL)
@@ -6897,10 +7334,10 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	      size_t indx;
 
 	      indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
-					  *p, TRUE);
+					  *p, true);
 	      if (indx == (size_t) -1
 		  || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -6909,10 +7346,10 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  size_t indx;
 
 	  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit,
-				      TRUE);
+				      true);
 	  if (indx == (size_t) -1
 	      || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx))
-	    return FALSE;
+	    return false;
 	}
 
       if (depaudit != NULL)
@@ -6920,14 +7357,14 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  size_t indx;
 
 	  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit,
-				      TRUE);
+				      true);
 	  if (indx == (size_t) -1
 	      || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx))
-	    return FALSE;
+	    return false;
 	}
 
       eif.info = info;
-      eif.failed = FALSE;
+      eif.failed = false;
 
       /* Find all symbols which were defined in a dynamic object and make
 	 the backend pick a reasonable value for them.  */
@@ -6935,7 +7372,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
 			      _bfd_elf_adjust_dynamic_symbol,
 			      &eif);
       if (eif.failed)
-	return FALSE;
+	return false;
 
       /* Add some entries to the .dynamic section.  We fill in some of the
 	 values later, in bfd_elf_final_link, but we must add the entries
@@ -6945,27 +7382,27 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	 call then add the corresponding DT_INIT/DT_FINI entries.  */
       h = (info->init_function
 	   ? elf_link_hash_lookup (elf_hash_table (info),
-				   info->init_function, FALSE,
-				   FALSE, FALSE)
+				   info->init_function, false,
+				   false, false)
 	   : NULL);
       if (h != NULL
 	  && (h->ref_regular
 	      || h->def_regular))
 	{
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
-	    return FALSE;
+	    return false;
 	}
       h = (info->fini_function
 	   ? elf_link_hash_lookup (elf_hash_table (info),
-				   info->fini_function, FALSE,
-				   FALSE, FALSE)
+				   info->fini_function, false,
+				   false, false)
 	   : NULL);
       if (h != NULL
 	  && (h->ref_regular
 	      || h->def_regular))
 	{
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
-	    return FALSE;
+	    return false;
 	}
 
       s = bfd_get_section_by_name (output_bfd, ".preinit_array");
@@ -6992,26 +7429,26 @@ bfd_elf_size_dynamic_sections (bfd *outp
 		      }
 
 	      bfd_set_error (bfd_error_nonrepresentable_section);
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
 	      || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
-	    return FALSE;
+	    return false;
 	}
       s = bfd_get_section_by_name (output_bfd, ".init_array");
       if (s != NULL && s->linker_has_input)
 	{
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
 	      || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
-	    return FALSE;
+	    return false;
 	}
       s = bfd_get_section_by_name (output_bfd, ".fini_array");
       if (s != NULL && s->linker_has_input)
 	{
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
 	      || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
-	    return FALSE;
+	    return false;
 	}
 
       dynstr = bfd_get_linker_section (dynobj, ".dynstr");
@@ -7033,20 +7470,23 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	      || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
 	      || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
 	      || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
-					      bed->s->sizeof_sym))
-	    return FALSE;
+					      bed->s->sizeof_sym)
+	      || (info->gnu_flags_1
+		  && !_bfd_elf_add_dynamic_entry (info, DT_GNU_FLAGS_1,
+						  info->gnu_flags_1)))
+	    return false;
 	}
     }
 
   if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
-    return FALSE;
+    return false;
 
   /* The backend must work out the sizes of all the other dynamic
      sections.  */
   if (dynobj != NULL
       && bed->elf_backend_size_dynamic_sections != NULL
       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
-    return FALSE;
+    return false;
 
   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
     {
@@ -7056,18 +7496,18 @@ bfd_elf_size_dynamic_sections (bfd *outp
 
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
 	      || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, crefs))
-	    return FALSE;
+	    return false;
 	}
 
       if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
 	{
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
-	    return FALSE;
+	    return false;
 	}
       else if (info->flags & DF_BIND_NOW)
 	{
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
-	    return FALSE;
+	    return false;
 	}
 
       if (info->flags_1)
@@ -7077,7 +7517,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
 				| DF_1_NODELETE
 				| DF_1_NOOPEN);
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
-	    return FALSE;
+	    return false;
 	}
 
       if (elf_tdata (output_bfd)->cverrefs)
@@ -7086,7 +7526,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
 
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
 	      || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
-	    return FALSE;
+	    return false;
 	}
 
       if ((elf_tdata (output_bfd)->cverrefs == 0
@@ -7099,7 +7539,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  s->flags |= SEC_EXCLUDE;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Find the first non-excluded output section.  We'll use its
@@ -7156,7 +7596,7 @@ _bfd_elf_init_2_index_sections (bfd *out
 #define GNU_HASH_SECTION_NAME(bed)			    \
   (bed)->record_xhash_symbol != NULL ? ".MIPS.xhash" : ".gnu.hash"
 
-bfd_boolean
+bool
 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
 {
   const struct elf_backend_data *bed;
@@ -7164,7 +7604,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
   bfd_size_type dynsymcount = 0;
 
   if (!is_elf_hash_table (info->hash))
-    return TRUE;
+    return true;
 
   bed = get_elf_backend_data (output_bfd);
   (*bed->elf_backend_init_index_section) (output_bfd, info);
@@ -7201,10 +7641,10 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  s->size = dynsymcount * sizeof (Elf_External_Versym);
 	  s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
 	  if (s->contents == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
-	    return FALSE;
+	    return false;
 	}
 
       /* Set the size of the .dynsym and .hash sections.  We counted
@@ -7219,7 +7659,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 
       s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
 
       /* The first entry in .dynsym is a dummy symbol.  Clear all the
 	 section syms, in case we don't output them all.  */
@@ -7245,9 +7685,9 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  amt = dynsymcount * sizeof (unsigned long int);
 	  hashcodes = (unsigned long int *) bfd_malloc (amt);
 	  if (hashcodes == NULL)
-	    return FALSE;
+	    return false;
 	  hashinf.hashcodes = hashcodes;
-	  hashinf.error = FALSE;
+	  hashinf.error = false;
 
 	  /* Put all hash values in HASHCODES.  */
 	  elf_link_hash_traverse (elf_hash_table (info),
@@ -7255,7 +7695,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  if (hashinf.error)
 	    {
 	      free (hashcodes);
-	      return FALSE;
+	      return false;
 	    }
 
 	  nsyms = hashinf.hashcodes - hashcodes;
@@ -7264,7 +7704,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  free (hashcodes);
 
 	  if (bucketcount == 0 && nsyms > 0)
-	    return FALSE;
+	    return false;
 
 	  elf_hash_table (info)->bucketcount = bucketcount;
 
@@ -7274,7 +7714,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
 	  s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
 	  if (s->contents == NULL)
-	    return FALSE;
+	    return false;
 
 	  bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
 	  bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
@@ -7297,7 +7737,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  amt = dynsymcount * 2 * sizeof (unsigned long int);
 	  cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt);
 	  if (cinfo.hashcodes == NULL)
-	    return FALSE;
+	    return false;
 
 	  cinfo.hashval = cinfo.hashcodes + dynsymcount;
 	  cinfo.min_dynindx = -1;
@@ -7310,7 +7750,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  if (cinfo.error)
 	    {
 	      free (cinfo.hashcodes);
-	      return FALSE;
+	      return false;
 	    }
 
 	  bucketcount
@@ -7319,7 +7759,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  if (bucketcount == 0)
 	    {
 	      free (cinfo.hashcodes);
-	      return FALSE;
+	      return false;
 	    }
 
 	  s = bfd_get_linker_section (dynobj, GNU_HASH_SECTION_NAME (bed));
@@ -7333,7 +7773,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	      s->size = 5 * 4 + bed->s->arch_size / 8;
 	      contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
 	      if (contents == NULL)
-		return FALSE;
+		return false;
 	      s->contents = contents;
 	      /* 1 empty bucket.  */
 	      bfd_put_32 (output_bfd, 1, contents);
@@ -7382,7 +7822,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	      if (cinfo.bitmask == NULL)
 		{
 		  free (cinfo.hashcodes);
-		  return FALSE;
+		  return false;
 		}
 
 	      cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords);
@@ -7414,7 +7854,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 		{
 		  free (cinfo.bitmask);
 		  free (cinfo.hashcodes);
-		  return FALSE;
+		  return false;
 		}
 
 	      s->contents = contents;
@@ -7463,10 +7903,10 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 
       for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
 	if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
-	  return FALSE;
+	  return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Make sure sec_info_type is cleared if sec_info is cleared too.  */
@@ -7481,14 +7921,14 @@ merge_sections_remove_hook (bfd *abfd AT
 
 /* Finish SHF_MERGE section merging.  */
 
-bfd_boolean
+bool
 _bfd_elf_merge_sections (bfd *obfd, struct bfd_link_info *info)
 {
   bfd *ibfd;
   asection *sec;
 
   if (!is_elf_hash_table (info->hash))
-    return FALSE;
+    return false;
 
   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
     if ((ibfd->flags & DYNAMIC) == 0
@@ -7505,7 +7945,7 @@ _bfd_elf_merge_sections (bfd *obfd, stru
 	    if (! _bfd_add_merge_section (obfd,
 					  &elf_hash_table (info)->merge_info,
 					  sec, &secdata->sec_info))
-	      return FALSE;
+	      return false;
 	    else if (secdata->sec_info)
 	      sec->sec_info_type = SEC_INFO_TYPE_MERGE;
 	  }
@@ -7513,7 +7953,7 @@ _bfd_elf_merge_sections (bfd *obfd, stru
   if (elf_hash_table (info)->merge_info != NULL)
     _bfd_merge_sections (obfd, info, elf_hash_table (info)->merge_info,
 			 merge_sections_remove_hook);
-  return TRUE;
+  return true;
 }
 
 /* Create an entry in an ELF linker hash table.  */
@@ -7567,6 +8007,37 @@ _bfd_elf_link_hash_copy_indirect (struct
 {
   struct elf_link_hash_table *htab;
 
+  if (ind->dyn_relocs != NULL)
+    {
+      if (dir->dyn_relocs != NULL)
+	{
+	  struct elf_dyn_relocs **pp;
+	  struct elf_dyn_relocs *p;
+
+	  /* Add reloc counts against the indirect sym to the direct sym
+	     list.  Merge any entries against the same section.  */
+	  for (pp = &ind->dyn_relocs; (p = *pp) != NULL; )
+	    {
+	      struct elf_dyn_relocs *q;
+
+	      for (q = dir->dyn_relocs; q != NULL; q = q->next)
+		if (q->sec == p->sec)
+		  {
+		    q->pc_count += p->pc_count;
+		    q->count += p->count;
+		    *pp = p->next;
+		    break;
+		  }
+	      if (q == NULL)
+		pp = &p->next;
+	    }
+	  *pp = dir->dyn_relocs;
+	}
+
+      dir->dyn_relocs = ind->dyn_relocs;
+      ind->dyn_relocs = NULL;
+    }
+
   /* Copy down any references that we may have already seen to the
      symbol which just became indirect.  */
 
@@ -7614,7 +8085,7 @@ _bfd_elf_link_hash_copy_indirect (struct
 void
 _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info,
 				struct elf_link_hash_entry *h,
-				bfd_boolean force_local)
+				bool force_local)
 {
   /* STT_GNU_IFUNC symbol must go through PLT.  */
   if (h->type != STT_GNU_IFUNC)
@@ -7648,7 +8119,7 @@ _bfd_elf_link_hide_symbol (bfd *output_b
 	= get_elf_backend_data (output_bfd);
       struct elf_link_hash_entry *eh
 	= (struct elf_link_hash_entry *) h;
-      bed->elf_backend_hide_symbol (info, eh, TRUE);
+      bed->elf_backend_hide_symbol (info, eh, true);
       eh->def_dynamic = 0;
       eh->ref_dynamic = 0;
       eh->dynamic_def = 0;
@@ -7658,7 +8129,7 @@ _bfd_elf_link_hide_symbol (bfd *output_b
 /* Initialize an ELF linker hash table.  *TABLE has been zeroed by our
    caller.  */
 
-bfd_boolean
+bool
 _bfd_elf_link_hash_table_init
   (struct elf_link_hash_table *table,
    bfd *abfd,
@@ -7668,7 +8139,7 @@ _bfd_elf_link_hash_table_init
    unsigned int entsize,
    enum elf_target_id target_id)
 {
-  bfd_boolean ret;
+  bool ret;
   int can_refcount = get_elf_backend_data (abfd)->can_refcount;
 
   table->init_got_refcount.refcount = can_refcount - 1;
@@ -7682,6 +8153,7 @@ _bfd_elf_link_hash_table_init
 
   table->root.type = bfd_link_elf_hash_table;
   table->hash_table_id = target_id;
+  table->target_os = get_elf_backend_data (abfd)->target_os;
 
   return ret;
 }
@@ -7692,7 +8164,7 @@ struct bfd_link_hash_table *
 _bfd_elf_link_hash_table_create (bfd *abfd)
 {
   struct elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_link_hash_table);
+  size_t amt = sizeof (struct elf_link_hash_table);
 
   ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -7796,7 +8268,7 @@ bfd_elf_get_dt_soname (bfd *abfd)
 /* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
    the ELF linker emulation code.  */
 
-bfd_boolean
+bool
 bfd_elf_get_bfd_needed_list (bfd *abfd,
 			     struct bfd_link_needed_list **pneeded)
 {
@@ -7812,11 +8284,11 @@ bfd_elf_get_bfd_needed_list (bfd *abfd,
 
   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
       || bfd_get_format (abfd) != bfd_object)
-    return TRUE;
+    return true;
 
   s = bfd_get_section_by_name (abfd, ".dynamic");
-  if (s == NULL || s->size == 0)
-    return TRUE;
+  if (s == NULL || s->size == 0 || (s->flags & SEC_HAS_CONTENTS) == 0)
+    return true;
 
   if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
     goto error_return;
@@ -7830,9 +8302,9 @@ bfd_elf_get_bfd_needed_list (bfd *abfd,
   extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
   swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
 
-  extdyn = dynbuf;
-  extdynend = extdyn + s->size;
-  for (; extdyn < extdynend; extdyn += extdynsize)
+  for (extdyn = dynbuf, extdynend = dynbuf + s->size;
+       (size_t) (extdynend - extdyn) >= extdynsize;
+       extdyn += extdynsize)
     {
       Elf_Internal_Dyn dyn;
 
@@ -7846,7 +8318,7 @@ bfd_elf_get_bfd_needed_list (bfd *abfd,
 	  const char *string;
 	  struct bfd_link_needed_list *l;
 	  unsigned int tagv = dyn.d_un.d_val;
-	  bfd_size_type amt;
+	  size_t amt;
 
 	  string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
 	  if (string == NULL)
@@ -7866,12 +8338,11 @@ bfd_elf_get_bfd_needed_list (bfd *abfd,
 
   free (dynbuf);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (dynbuf != NULL)
-    free (dynbuf);
-  return FALSE;
+  free (dynbuf);
+  return false;
 }
 
 struct elf_symbuf_symbol
@@ -7935,9 +8406,10 @@ elf_create_symbuf (size_t symcount, Elf_
   Elf_Internal_Sym **ind, **indbufend, **indbuf;
   struct elf_symbuf_symbol *ssym;
   struct elf_symbuf_head *ssymbuf, *ssymhead;
-  size_t i, shndx_count, total_size;
+  size_t i, shndx_count, total_size, amt;
 
-  indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf));
+  amt = symcount * sizeof (*indbuf);
+  indbuf = (Elf_Internal_Sym **) bfd_malloc (amt);
   if (indbuf == NULL)
     return NULL;
 
@@ -7983,8 +8455,7 @@ elf_create_symbuf (size_t symcount, Elf_
       ssymhead->count++;
     }
   BFD_ASSERT ((size_t) (ssymhead - ssymbuf) == shndx_count
-	      && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf)
-		  == total_size));
+	      && (uintptr_t) ssym - (uintptr_t) ssymbuf == total_size);
 
   free (indbuf);
   return ssymbuf;
@@ -7993,7 +8464,7 @@ elf_create_symbuf (size_t symcount, Elf_
 /* Check if 2 sections define the same set of local and global
    symbols.  */
 
-static bfd_boolean
+static bool
 bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
 				   struct bfd_link_info *info)
 {
@@ -8005,9 +8476,10 @@ bfd_elf_match_symbols_in_sections (asect
   struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
   Elf_Internal_Sym *isym, *isymend;
   struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
-  size_t count1, count2, i;
+  size_t count1, count2, sec_count1, sec_count2, i;
   unsigned int shndx1, shndx2;
-  bfd_boolean result;
+  bool result;
+  bool ignore_section_symbol_p;
 
   bfd1 = sec1->owner;
   bfd2 = sec2->owner;
@@ -8015,15 +8487,15 @@ bfd_elf_match_symbols_in_sections (asect
   /* Both sections have to be in ELF.  */
   if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
       || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
-    return FALSE;
+    return false;
 
   if (elf_section_type (sec1) != elf_section_type (sec2))
-    return FALSE;
+    return false;
 
   shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
   shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
   if (shndx1 == SHN_BAD || shndx2 == SHN_BAD)
-    return FALSE;
+    return false;
 
   bed1 = get_elf_backend_data (bfd1);
   bed2 = get_elf_backend_data (bfd2);
@@ -8033,14 +8505,21 @@ bfd_elf_match_symbols_in_sections (asect
   symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
 
   if (symcount1 == 0 || symcount2 == 0)
-    return FALSE;
+    return false;
 
-  result = FALSE;
+  result = false;
   isymbuf1 = NULL;
   isymbuf2 = NULL;
   ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf;
   ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf;
 
+  /* Ignore section symbols only when matching non-debugging sections
+     or linkonce section with comdat section.  */
+  ignore_section_symbol_p
+    = ((sec1->flags & SEC_DEBUGGING) == 0
+       || ((elf_section_flags (sec1) & SHF_GROUP)
+	   != (elf_section_flags (sec2) & SHF_GROUP)));
+
   if (ssymbuf1 == NULL)
     {
       isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
@@ -8048,7 +8527,7 @@ bfd_elf_match_symbols_in_sections (asect
       if (isymbuf1 == NULL)
 	goto done;
 
-      if (!info->reduce_memory_overheads)
+      if (info != NULL && !info->reduce_memory_overheads)
 	{
 	  ssymbuf1 = elf_create_symbuf (symcount1, isymbuf1);
 	  elf_tdata (bfd1)->symbuf = ssymbuf1;
@@ -8062,7 +8541,7 @@ bfd_elf_match_symbols_in_sections (asect
       if (isymbuf2 == NULL)
 	goto done;
 
-      if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
+      if (ssymbuf1 != NULL && info != NULL && !info->reduce_memory_overheads)
 	{
 	  ssymbuf2 = elf_create_symbuf (symcount2, isymbuf2);
 	  elf_tdata (bfd2)->symbuf = ssymbuf2;
@@ -8080,6 +8559,7 @@ bfd_elf_match_symbols_in_sections (asect
       hi = ssymbuf1->count;
       ssymbuf1++;
       count1 = 0;
+      sec_count1 = 0;
       while (lo < hi)
 	{
 	  mid = (lo + hi) / 2;
@@ -8094,11 +8574,19 @@ bfd_elf_match_symbols_in_sections (asect
 	      break;
 	    }
 	}
+      if (ignore_section_symbol_p)
+	{
+	  for (i = 0; i < count1; i++)
+	    if (ELF_ST_TYPE (ssymbuf1->ssym[i].st_info) == STT_SECTION)
+	      sec_count1++;
+	  count1 -= sec_count1;
+	}
 
       lo = 0;
       hi = ssymbuf2->count;
       ssymbuf2++;
       count2 = 0;
+      sec_count2 = 0;
       while (lo < hi)
 	{
 	  mid = (lo + hi) / 2;
@@ -8113,6 +8601,13 @@ bfd_elf_match_symbols_in_sections (asect
 	      break;
 	    }
 	}
+      if (ignore_section_symbol_p)
+	{
+	  for (i = 0; i < count2; i++)
+	    if (ELF_ST_TYPE (ssymbuf2->ssym[i].st_info) == STT_SECTION)
+	      sec_count2++;
+	  count2 -= sec_count2;
+	}
 
       if (count1 == 0 || count2 == 0 || count1 != count2)
 	goto done;
@@ -8125,24 +8620,30 @@ bfd_elf_match_symbols_in_sections (asect
 	goto done;
 
       symp = symtable1;
-      for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
-	   ssym < ssymend; ssym++, symp++)
-	{
-	  symp->u.ssym = ssym;
-	  symp->name = bfd_elf_string_from_elf_section (bfd1,
-							hdr1->sh_link,
-							ssym->st_name);
-	}
+      for (ssym = ssymbuf1->ssym, ssymend = ssym + count1 + sec_count1;
+	   ssym < ssymend; ssym++)
+	if (sec_count1 == 0
+	    || ELF_ST_TYPE (ssym->st_info) != STT_SECTION)
+	  {
+	    symp->u.ssym = ssym;
+	    symp->name = bfd_elf_string_from_elf_section (bfd1,
+							  hdr1->sh_link,
+							  ssym->st_name);
+	    symp++;
+	  }
 
       symp = symtable2;
-      for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
-	   ssym < ssymend; ssym++, symp++)
-	{
-	  symp->u.ssym = ssym;
-	  symp->name = bfd_elf_string_from_elf_section (bfd2,
-							hdr2->sh_link,
-							ssym->st_name);
-	}
+      for (ssym = ssymbuf2->ssym, ssymend = ssym + count2 + sec_count2;
+	   ssym < ssymend; ssym++)
+	if (sec_count2 == 0
+	    || ELF_ST_TYPE (ssym->st_info) != STT_SECTION)
+	  {
+	    symp->u.ssym = ssym;
+	    symp->name = bfd_elf_string_from_elf_section (bfd2,
+							  hdr2->sh_link,
+							  ssym->st_name);
+	    symp++;
+	  }
 
       /* Sort symbol by name.  */
       qsort (symtable1, count1, sizeof (struct elf_symbol),
@@ -8157,7 +8658,7 @@ bfd_elf_match_symbols_in_sections (asect
 	    || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
 	  goto done;
 
-      result = TRUE;
+      result = true;
       goto done;
     }
 
@@ -8171,12 +8672,16 @@ bfd_elf_match_symbols_in_sections (asect
   /* Count definitions in the section.  */
   count1 = 0;
   for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
-    if (isym->st_shndx == shndx1)
+    if (isym->st_shndx == shndx1
+	&& (!ignore_section_symbol_p
+	    || ELF_ST_TYPE (isym->st_info) != STT_SECTION))
       symtable1[count1++].u.isym = isym;
 
   count2 = 0;
   for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
-    if (isym->st_shndx == shndx2)
+    if (isym->st_shndx == shndx2
+	&& (!ignore_section_symbol_p
+	    || ELF_ST_TYPE (isym->st_info) != STT_SECTION))
       symtable2[count2++].u.isym = isym;
 
   if (count1 == 0 || count2 == 0 || count1 != count2)
@@ -8205,24 +8710,20 @@ bfd_elf_match_symbols_in_sections (asect
 	|| strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
       goto done;
 
-  result = TRUE;
+  result = true;
 
-done:
-  if (symtable1)
-    free (symtable1);
-  if (symtable2)
-    free (symtable2);
-  if (isymbuf1)
-    free (isymbuf1);
-  if (isymbuf2)
-    free (isymbuf2);
+ done:
+  free (symtable1);
+  free (symtable2);
+  free (isymbuf1);
+  free (isymbuf2);
 
   return result;
 }
 
 /* Return TRUE if 2 section types are compatible.  */
 
-bfd_boolean
+bool
 _bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
 				 bfd *bbfd, const asection *bsec)
 {
@@ -8230,7 +8731,7 @@ _bfd_elf_match_sections_by_type (bfd *ab
       || bsec == NULL
       || abfd->xvec->flavour != bfd_target_elf_flavour
       || bbfd->xvec->flavour != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   return elf_section_type (asec) == elf_section_type (bsec);
 }
@@ -8275,15 +8776,56 @@ struct elf_final_link_info
   Elf_External_Sym_Shndx *symshndxbuf;
   /* Number of STT_FILE syms seen.  */
   size_t filesym_count;
+  /* Local symbol hash table.  */
+  struct bfd_hash_table local_hash_table;
 };
 
+struct local_hash_entry
+{
+  /* Base hash table entry structure.  */
+  struct bfd_hash_entry root;
+  /* Size of the local symbol name.  */
+  size_t size;
+  /* Number of the duplicated local symbol names.  */
+  long count;
+};
+
+/* Create an entry in the local symbol hash table.  */
+
+static struct bfd_hash_entry *
+local_hash_newfunc (struct bfd_hash_entry *entry,
+		    struct bfd_hash_table *table,
+		    const char *string)
+{
+
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (entry == NULL)
+    {
+      entry = bfd_hash_allocate (table,
+				 sizeof (struct local_hash_entry));
+      if (entry == NULL)
+        return entry;
+    }
+
+  /* Call the allocation method of the superclass.  */
+  entry = bfd_hash_newfunc (entry, table, string);
+  if (entry != NULL)
+    {
+      ((struct local_hash_entry *) entry)->count = 0;
+      ((struct local_hash_entry *) entry)->size = 0;
+    }
+
+  return entry;
+}
+
 /* This struct is used to pass information to elf_link_output_extsym.  */
 
 struct elf_outext_info
 {
-  bfd_boolean failed;
-  bfd_boolean localsyms;
-  bfd_boolean file_sym_done;
+  bool failed;
+  bool localsyms;
+  bool file_sym_done;
   struct elf_final_link_info *flinfo;
 };
 
@@ -8294,12 +8836,12 @@ struct elf_outext_info
    implementation of them consists of two parts: complex symbols, and the
    relocations themselves.
 
-   The relocations are use a reserved elf-wide relocation type code (R_RELC
+   The relocations use a reserved elf-wide relocation type code (R_RELC
    external / BFD_RELOC_RELC internal) and an encoding of relocation field
    information (start bit, end bit, word width, etc) into the addend.  This
    information is extracted from CGEN-generated operand tables within gas.
 
-   Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
+   Complex symbols are mangled symbols (STT_RELC external / BSF_RELC
    internal) representing prefix-notation expressions, including but not
    limited to those sorts of expressions normally encoded as addends in the
    addend field.  The symbol mangling format is:
@@ -8358,7 +8900,7 @@ set_symbol_value (bfd *bfd_with_globals,
   h->root.u.def.section = bfd_abs_section_ptr;
 }
 
-static bfd_boolean
+static bool
 resolve_symbol (const char *name,
 		bfd *input_bfd,
 		struct elf_final_link_info *flinfo,
@@ -8398,15 +8940,15 @@ resolve_symbol (const char *name,
 	  printf ("Found symbol with value %8.8lx\n",
 		  (unsigned long) *result);
 #endif
-	  return TRUE;
+	  return true;
 	}
     }
 
   /* Hmm, haven't found it yet. perhaps it is a global.  */
   global_entry = bfd_link_hash_lookup (flinfo->info->hash, name,
-				       FALSE, FALSE, TRUE);
+				       false, false, true);
   if (!global_entry)
-    return FALSE;
+    return false;
 
   if (global_entry->type == bfd_link_hash_defined
       || global_entry->type == bfd_link_hash_defweak)
@@ -8418,17 +8960,17 @@ resolve_symbol (const char *name,
       printf ("Found GLOBAL symbol '%s' with value %8.8lx\n",
 	      global_entry->root.string, (unsigned long) *result);
 #endif
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Looks up NAME in SECTIONS.  If found sets RESULT to NAME's address (in
    bytes) and returns TRUE, otherwise returns FALSE.  Accepts pseudo-section
    names like "foo.end" which is the end address of section "foo".  */
 
-static bfd_boolean
+static bool
 resolve_section (const char *name,
 		 asection *sections,
 		 bfd_vma *result,
@@ -8441,7 +8983,7 @@ resolve_section (const char *name,
     if (strcmp (curr->name, name) == 0)
       {
 	*result = curr->vma;
-	return TRUE;
+	return true;
       }
 
   /* Hmm. still haven't found it. try pseudo-section names.  */
@@ -8454,18 +8996,18 @@ resolve_section (const char *name,
 
       if (strncmp (curr->name, name, len) == 0)
 	{
-	  if (strncmp (".end", name + len, 4) == 0)
+	  if (startswith (name + len, ".end"))
 	    {
 	      *result = (curr->vma
 			 + curr->size / bfd_octets_per_byte (abfd, curr));
-	      return TRUE;
+	      return true;
 	    }
 
 	  /* Insert more pseudo-section names here, if you like.  */
 	}
     }
 
-  return FALSE;
+  return false;
 }
 
 static void
@@ -8474,9 +9016,10 @@ undefined_reference (const char *reftype
   /* xgettext:c-format */
   _bfd_error_handler (_("undefined %s reference in complex symbol: %s"),
 		      reftype, name);
+  bfd_set_error (bfd_error_bad_value);
 }
 
-static bfd_boolean
+static bool
 eval_symbol (bfd_vma *result,
 	     const char **symp,
 	     bfd *input_bfd,
@@ -8493,7 +9036,7 @@ eval_symbol (bfd_vma *result,
   char symbuf[4096];
   const char *sym = *symp;
   const char *symend;
-  bfd_boolean symbol_is_section = FALSE;
+  bool symbol_is_section = false;
 
   len = strlen (sym);
   symend = sym + len;
@@ -8501,7 +9044,7 @@ eval_symbol (bfd_vma *result,
   if (len < 1 || len > sizeof (symbuf))
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   switch (* sym)
@@ -8509,15 +9052,15 @@ eval_symbol (bfd_vma *result,
     case '.':
       *result = dot;
       *symp = sym + 1;
-      return TRUE;
+      return true;
 
     case '#':
       ++sym;
       *result = strtoul (sym, (char **) symp, 16);
-      return TRUE;
+      return true;
 
     case 'S':
-      symbol_is_section = TRUE;
+      symbol_is_section = true;
       /* Fall through.  */
     case 's':
       ++sym;
@@ -8527,7 +9070,7 @@ eval_symbol (bfd_vma *result,
       if (symend < sym || symlen + 1 > sizeof (symbuf))
 	{
 	  bfd_set_error (bfd_error_invalid_operation);
-	  return FALSE;
+	  return false;
 	}
 
       memcpy (symbuf, sym, symlen);
@@ -8546,7 +9089,7 @@ eval_symbol (bfd_vma *result,
 				  isymbuf, locsymcount))
 	    {
 	      undefined_reference ("section", symbuf);
-	      return FALSE;
+	      return false;
 	    }
 	}
       else
@@ -8557,16 +9100,16 @@ eval_symbol (bfd_vma *result,
 				   result, input_bfd))
 	    {
 	      undefined_reference ("symbol", symbuf);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
-      return TRUE;
+      return true;
 
       /* All that remains are operators.  */
 
 #define UNARY_OP(op)						\
-  if (strncmp (sym, #op, strlen (#op)) == 0)			\
+  if (startswith (sym, #op))					\
     {								\
       sym += strlen (#op);					\
       if (*sym == ':')						\
@@ -8574,16 +9117,16 @@ eval_symbol (bfd_vma *result,
       *symp = sym;						\
       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,	\
 			isymbuf, locsymcount, signed_p))	\
-	return FALSE;						\
+	return false;						\
       if (signed_p)						\
 	*result = op ((bfd_signed_vma) a);			\
       else							\
 	*result = op a;						\
-      return TRUE;						\
+      return true;						\
     }
 
-#define BINARY_OP(op)						\
-  if (strncmp (sym, #op, strlen (#op)) == 0)			\
+#define BINARY_OP_HEAD(op)					\
+  if (startswith (sym, #op))					\
     {								\
       sym += strlen (#op);					\
       if (*sym == ':')						\
@@ -8591,22 +9134,37 @@ eval_symbol (bfd_vma *result,
       *symp = sym;						\
       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,	\
 			isymbuf, locsymcount, signed_p))	\
-	return FALSE;						\
+	return false;						\
       ++*symp;							\
       if (!eval_symbol (&b, symp, input_bfd, flinfo, dot,	\
 			isymbuf, locsymcount, signed_p))	\
-	return FALSE;						\
+	return false;
+#define BINARY_OP_TAIL(op)					\
       if (signed_p)						\
 	*result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b);	\
       else							\
 	*result = a op b;					\
-      return TRUE;						\
+      return true;						\
     }
+#define BINARY_OP(op) BINARY_OP_HEAD(op) BINARY_OP_TAIL(op)
 
     default:
       UNARY_OP  (0-);
-      BINARY_OP (<<);
-      BINARY_OP (>>);
+      BINARY_OP_HEAD (<<);
+      if (b >= sizeof (a) * CHAR_BIT)
+	{
+	  *result = 0;
+	  return true;
+	}
+      signed_p = 0;
+      BINARY_OP_TAIL (<<);
+      BINARY_OP_HEAD (>>);
+      if (b >= sizeof (a) * CHAR_BIT)
+	{
+	  *result = signed_p && (bfd_signed_vma) a < 0 ? -1 : 0;
+	  return true;
+	}
+      BINARY_OP_TAIL (>>);
       BINARY_OP (==);
       BINARY_OP (!=);
       BINARY_OP (<=);
@@ -8616,8 +9174,22 @@ eval_symbol (bfd_vma *result,
       UNARY_OP  (~);
       UNARY_OP  (!);
       BINARY_OP (*);
-      BINARY_OP (/);
-      BINARY_OP (%);
+      BINARY_OP_HEAD (/);
+      if (b == 0)
+	{
+	  _bfd_error_handler (_("division by zero"));
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+      BINARY_OP_TAIL (/);
+      BINARY_OP_HEAD (%);
+      if (b == 0)
+	{
+	  _bfd_error_handler (_("division by zero"));
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+      BINARY_OP_TAIL (%);
       BINARY_OP (^);
       BINARY_OP (|);
       BINARY_OP (&);
@@ -8629,7 +9201,7 @@ eval_symbol (bfd_vma *result,
 #undef BINARY_OP
       _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 }
 
@@ -8856,7 +9428,6 @@ ext32b_r_offset (const void *p)
   return aval;
 }
 
-#ifdef BFD_HOST_64_BIT
 static bfd_vma
 ext64l_r_offset (const void *p)
 {
@@ -8900,18 +9471,17 @@ ext64b_r_offset (const void *p)
 		   | (uint64_t) a->c[7]);
   return aval;
 }
-#endif
 
 /* When performing a relocatable link, the input relocations are
    preserved.  But, if they reference global symbols, the indices
    referenced must be updated.  Update all the relocations found in
    RELDATA.  */
 
-static bfd_boolean
+static bool
 elf_link_adjust_relocs (bfd *abfd,
 			asection *sec,
 			struct bfd_elf_section_reloc_data *reldata,
-			bfd_boolean sort,
+			bool sort,
 			struct bfd_link_info *info)
 {
   unsigned int i;
@@ -8971,7 +9541,7 @@ elf_link_adjust_relocs (bfd *abfd,
 	  _bfd_error_handler (_("%pB:%pA: error: try relinking with --gc-keep-exported enabled"),
 			      abfd, sec);
 	  bfd_set_error (bfd_error_invalid_operation);
-	  return FALSE;
+	  return false;
 	}
       BFD_ASSERT ((*rel_hash)->indx >= 0);
 
@@ -9004,13 +9574,11 @@ elf_link_adjust_relocs (bfd *abfd,
 	}
       else
 	{
-#ifdef BFD_HOST_64_BIT
 	  if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
 	    ext_r_off = ext64l_r_offset;
 	  else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
 	    ext_r_off = ext64b_r_offset;
 	  else
-#endif
 	    abort ();
 	}
 
@@ -9063,17 +9631,25 @@ elf_link_adjust_relocs (bfd *abfd,
 	      size_t sortlen = p - loc;
 	      bfd_vma r_off2 = (*ext_r_off) (loc);
 	      size_t runlen = elt_size;
+	      bfd_vma r_off_runend = r_off;
+	      bfd_vma r_off_runend_next;
 	      size_t buf_size = 96 * 1024;
 	      while (p + runlen < end
 		     && (sortlen <= buf_size
 			 || runlen + elt_size <= buf_size)
-		     && r_off2 > (*ext_r_off) (p + runlen))
-		runlen += elt_size;
+		     /* run must not break the ordering of base..loc+1 */
+		     && r_off2 > (r_off_runend_next = (*ext_r_off) (p + runlen))
+		     /* run must be already sorted */
+		     && r_off_runend_next >= r_off_runend)
+		{
+		  runlen += elt_size;
+		  r_off_runend = r_off_runend_next;
+		}
 	      if (buf == NULL)
 		{
 		  buf = bfd_malloc (buf_size);
 		  if (buf == NULL)
-		    return FALSE;
+		    return false;
 		}
 	      if (runlen < sortlen)
 		{
@@ -9095,7 +9671,7 @@ elf_link_adjust_relocs (bfd *abfd,
       reldata->hashes = NULL;
       free (buf);
     }
-  return TRUE;
+  return true;
 }
 
 struct elf_link_sort_rela
@@ -9181,7 +9757,7 @@ elf_link_sort_relocs (bfd *abfd, struct
   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
   struct bfd_link_order *lo;
   bfd_vma r_sym_mask;
-  bfd_boolean use_rela;
+  bool use_rela;
 
   /* Find a dynamic reloc section.  */
   rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
@@ -9189,11 +9765,11 @@ elf_link_sort_relocs (bfd *abfd, struct
   if (rela_dyn != NULL && rela_dyn->size > 0
       && rel_dyn != NULL && rel_dyn->size > 0)
     {
-      bfd_boolean use_rela_initialised = FALSE;
+      bool use_rela_initialised = false;
 
       /* This is just here to stop gcc from complaining.
 	 Its initialization checking code is not perfect.  */
-      use_rela = TRUE;
+      use_rela = true;
 
       /* Both sections are present.  Examine the sizes
 	 of the indirect sections to help us choose.  */
@@ -9221,8 +9797,8 @@ elf_link_sort_relocs (bfd *abfd, struct
 		      }
 		    else
 		      {
-			use_rela = TRUE;
-			use_rela_initialised = TRUE;
+			use_rela = true;
+			use_rela_initialised = true;
 		      }
 		  }
 	      }
@@ -9239,8 +9815,8 @@ elf_link_sort_relocs (bfd *abfd, struct
 		  }
 		else
 		  {
-		    use_rela = FALSE;
-		    use_rela_initialised = TRUE;
+		    use_rela = false;
+		    use_rela_initialised = true;
 		  }
 	      }
 	    else
@@ -9278,8 +9854,8 @@ elf_link_sort_relocs (bfd *abfd, struct
 		      }
 		    else
 		      {
-			use_rela = TRUE;
-			use_rela_initialised = TRUE;
+			use_rela = true;
+			use_rela_initialised = true;
 		      }
 		  }
 	      }
@@ -9296,8 +9872,8 @@ elf_link_sort_relocs (bfd *abfd, struct
 		  }
 		else
 		  {
-		    use_rela = FALSE;
-		    use_rela_initialised = TRUE;
+		    use_rela = false;
+		    use_rela_initialised = true;
 		  }
 	      }
 	    else
@@ -9313,12 +9889,12 @@ elf_link_sort_relocs (bfd *abfd, struct
 
       if (! use_rela_initialised)
 	/* Make a guess.  */
-	use_rela = TRUE;
+	use_rela = true;
     }
   else if (rela_dyn != NULL && rela_dyn->size > 0)
-    use_rela = TRUE;
+    use_rela = true;
   else if (rel_dyn != NULL && rel_dyn->size > 0)
-    use_rela = FALSE;
+    use_rela = false;
   else
     return 0;
 
@@ -9472,12 +10048,13 @@ elf_link_sort_relocs (bfd *abfd, struct
 /* Add a symbol to the output symbol string table.  */
 
 static int
-elf_link_output_symstrtab (struct elf_final_link_info *flinfo,
+elf_link_output_symstrtab (void *finf,
 			   const char *name,
 			   Elf_Internal_Sym *elfsym,
 			   asection *input_sec,
 			   struct elf_link_hash_entry *h)
 {
+  struct elf_final_link_info *flinfo = finf;
   int (*output_symbol_hook)
     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
      struct elf_link_hash_entry *);
@@ -9501,24 +10078,84 @@ elf_link_output_symstrtab (struct elf_fi
   if (ELF_ST_BIND (elfsym->st_info) == STB_GNU_UNIQUE)
     elf_tdata (flinfo->output_bfd)->has_gnu_osabi |= elf_gnu_osabi_unique;
 
-  if (name == NULL
-      || *name == '\0'
-      || (input_sec->flags & SEC_EXCLUDE))
+  if (name == NULL || *name == '\0')
     elfsym->st_name = (unsigned long) -1;
   else
     {
       /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
 	 to get the final offset for st_name.  */
+      char *versioned_name = (char *) name;
+      if (h != NULL)
+	{
+	  if (h->versioned == versioned && h->def_dynamic)
+	    {
+	      /* Keep only one '@' for versioned symbols defined in
+	         shared objects.  */
+	      char *version = strrchr (name, ELF_VER_CHR);
+	      char *base_end = strchr (name, ELF_VER_CHR);
+	      if (version != base_end)
+		{
+		  size_t base_len;
+		  size_t len = strlen (name);
+		  versioned_name = bfd_alloc (flinfo->output_bfd, len);
+		  if (versioned_name == NULL)
+		    return 0;
+		  base_len = base_end - name;
+		  memcpy (versioned_name, name, base_len);
+		  memcpy (versioned_name + base_len, version,
+			  len - base_len);
+		}
+	    }
+	}
+      else if (flinfo->info->unique_symbol
+	       && ELF_ST_BIND (elfsym->st_info) == STB_LOCAL)
+	{
+	  struct local_hash_entry *lh;
+	  size_t count_len;
+	  size_t base_len;
+	  char buf[30];
+	  switch (ELF_ST_TYPE (elfsym->st_info))
+	    {
+	    case STT_FILE:
+	    case STT_SECTION:
+	      break;
+	    default:
+	      lh = (struct local_hash_entry *) bfd_hash_lookup
+		     (&flinfo->local_hash_table, name, true, false);
+	      if (lh == NULL)
+		return 0;
+	      /* Always append ".COUNT" to local symbols to avoid
+		 potential conflicts with local symbol "XXX.COUNT".  */
+	      sprintf (buf, "%lx", lh->count);
+	      base_len = lh->size;
+	      if (!base_len)
+		{
+		  base_len = strlen (name);
+		  lh->size = base_len;
+		}
+	      count_len = strlen (buf);
+	      versioned_name = bfd_alloc (flinfo->output_bfd,
+					  base_len + count_len + 2);
+	      if (versioned_name == NULL)
+		return 0;
+	      memcpy (versioned_name, name, base_len);
+	      versioned_name[base_len] = '.';
+	      memcpy (versioned_name + base_len + 1, buf,
+		      count_len + 1);
+	      lh->count++;
+	      break;
+	    }
+	}
       elfsym->st_name
 	= (unsigned long) _bfd_elf_strtab_add (flinfo->symstrtab,
-					       name, FALSE);
+					       versioned_name, false);
       if (elfsym->st_name == (unsigned long) -1)
 	return 0;
     }
 
   hash_table = elf_hash_table (flinfo->info);
   strtabsize = hash_table->strtabsize;
-  if (strtabsize <= hash_table->strtabcount)
+  if (strtabsize <= flinfo->output_bfd->symcount)
     {
       strtabsize += strtabsize;
       hash_table->strtabsize = strtabsize;
@@ -9529,14 +10166,10 @@ elf_link_output_symstrtab (struct elf_fi
       if (hash_table->strtab == NULL)
 	return 0;
     }
-  hash_table->strtab[hash_table->strtabcount].sym = *elfsym;
-  hash_table->strtab[hash_table->strtabcount].dest_index
-    = hash_table->strtabcount;
-  hash_table->strtab[hash_table->strtabcount].destshndx_index
-    = flinfo->symshndxbuf ? bfd_get_symcount (flinfo->output_bfd) : 0;
-
+  hash_table->strtab[flinfo->output_bfd->symcount].sym = *elfsym;
+  hash_table->strtab[flinfo->output_bfd->symcount].dest_index
+    = flinfo->output_bfd->symcount;
   flinfo->output_bfd->symcount += 1;
-  hash_table->strtabcount += 1;
 
   return 1;
 }
@@ -9544,29 +10177,29 @@ elf_link_output_symstrtab (struct elf_fi
 /* Swap symbols out to the symbol table and flush the output symbols to
    the file.  */
 
-static bfd_boolean
+static bool
 elf_link_swap_symbols_out (struct elf_final_link_info *flinfo)
 {
   struct elf_link_hash_table *hash_table = elf_hash_table (flinfo->info);
-  bfd_size_type amt;
+  size_t amt;
   size_t i;
   const struct elf_backend_data *bed;
   bfd_byte *symbuf;
   Elf_Internal_Shdr *hdr;
   file_ptr pos;
-  bfd_boolean ret;
+  bool ret;
 
-  if (!hash_table->strtabcount)
-    return TRUE;
+  if (flinfo->output_bfd->symcount == 0)
+    return true;
 
   BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
 
   bed = get_elf_backend_data (flinfo->output_bfd);
 
-  amt = bed->s->sizeof_sym * hash_table->strtabcount;
+  amt = bed->s->sizeof_sym * flinfo->output_bfd->symcount;
   symbuf = (bfd_byte *) bfd_malloc (amt);
   if (symbuf == NULL)
-    return FALSE;
+    return false;
 
   if (flinfo->symshndxbuf)
     {
@@ -9576,11 +10209,12 @@ elf_link_swap_symbols_out (struct elf_fi
       if (flinfo->symshndxbuf == NULL)
 	{
 	  free (symbuf);
-	  return FALSE;
+	  return false;
 	}
     }
 
-  for (i = 0; i < hash_table->strtabcount; i++)
+  /* Now swap out the symbols.  */
+  for (i = 0; i < flinfo->output_bfd->symcount; i++)
     {
       struct elf_sym_strtab *elfsym = &hash_table->strtab[i];
       if (elfsym->sym.st_name == (unsigned long) -1)
@@ -9589,33 +10223,32 @@ elf_link_swap_symbols_out (struct elf_fi
 	elfsym->sym.st_name
 	  = (unsigned long) _bfd_elf_strtab_offset (flinfo->symstrtab,
 						    elfsym->sym.st_name);
+
+      /* Inform the linker of the addition of this symbol.  */
+
+      if (flinfo->info->callbacks->ctf_new_symbol)
+	flinfo->info->callbacks->ctf_new_symbol (elfsym->dest_index,
+						 &elfsym->sym);
+
       bed->s->swap_symbol_out (flinfo->output_bfd, &elfsym->sym,
 			       ((bfd_byte *) symbuf
 				+ (elfsym->dest_index
 				   * bed->s->sizeof_sym)),
-			       (flinfo->symshndxbuf
-				+ elfsym->destshndx_index));
+			       NPTR_ADD (flinfo->symshndxbuf,
+					 elfsym->dest_index));
     }
 
-  /* Allow the linker to examine the strtab and symtab now they are
-     populated.  */
-
-  if (flinfo->info->callbacks->examine_strtab)
-    flinfo->info->callbacks->examine_strtab (hash_table->strtab,
-					     hash_table->strtabcount,
-					     flinfo->symstrtab);
-
   hdr = &elf_tdata (flinfo->output_bfd)->symtab_hdr;
   pos = hdr->sh_offset + hdr->sh_size;
-  amt = hash_table->strtabcount * bed->s->sizeof_sym;
+  amt = bed->s->sizeof_sym * flinfo->output_bfd->symcount;
   if (bfd_seek (flinfo->output_bfd, pos, SEEK_SET) == 0
-      && bfd_bwrite (symbuf, amt, flinfo->output_bfd) == amt)
+      && bfd_write (symbuf, amt, flinfo->output_bfd) == amt)
     {
       hdr->sh_size += amt;
-      ret = TRUE;
+      ret = true;
     }
   else
-    ret = FALSE;
+    ret = false;
 
   free (symbuf);
 
@@ -9627,7 +10260,7 @@ elf_link_swap_symbols_out (struct elf_fi
 
 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
 
-static bfd_boolean
+static bool
 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
 {
   if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
@@ -9640,9 +10273,9 @@ check_dynsym (bfd *abfd, Elf_Internal_Sy
 	(_("%pB: too many sections: %d (>= %d)"),
 	 abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
       bfd_set_error (bfd_error_nonrepresentable_section);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
@@ -9651,7 +10284,7 @@ check_dynsym (bfd *abfd, Elf_Internal_Sy
    We also handle the case that a DSO references a hidden symbol
    which may be satisfied by a versioned symbol in another DSO.  */
 
-static bfd_boolean
+static bool
 elf_link_check_versioned_symbol (struct bfd_link_info *info,
 				 const struct elf_backend_data *bed,
 				 struct elf_link_hash_entry *h)
@@ -9660,7 +10293,7 @@ elf_link_check_versioned_symbol (struct
   struct elf_link_loaded_list *loaded;
 
   if (!is_elf_hash_table (info->hash))
-    return FALSE;
+    return false;
 
   /* Check indirect symbol.  */
   while (h->root.type == bfd_link_hash_indirect)
@@ -9678,7 +10311,7 @@ elf_link_check_versioned_symbol (struct
       if (abfd == NULL
 	  || (abfd->flags & DYNAMIC) == 0
 	  || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
-	return FALSE;
+	return false;
       break;
 
     case bfd_link_hash_defined:
@@ -9692,7 +10325,7 @@ elf_link_check_versioned_symbol (struct
     }
   BFD_ASSERT (abfd != NULL);
 
-  for (loaded = elf_hash_table (info)->loaded;
+  for (loaded = elf_hash_table (info)->dyn_loaded;
        loaded != NULL;
        loaded = loaded->next)
     {
@@ -9712,7 +10345,6 @@ elf_link_check_versioned_symbol (struct
 
       /* We check each DSO for a possible hidden versioned definition.  */
       if (input == abfd
-	  || (input->flags & DYNAMIC) == 0
 	  || elf_dynversym (input) == 0)
 	continue;
 
@@ -9736,22 +10368,17 @@ elf_link_check_versioned_symbol (struct
       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
 				      NULL, NULL, NULL);
       if (isymbuf == NULL)
-	return FALSE;
+	return false;
 
       /* Read in any version definitions.  */
       versymhdr = &elf_tdata (input)->dynversym_hdr;
-      extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
-      if (extversym == NULL)
-	goto error_ret;
-
       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
-	  || (bfd_bread (extversym, versymhdr->sh_size, input)
-	      != versymhdr->sh_size))
+	  || (extversym = (Elf_External_Versym *)
+	      _bfd_malloc_and_read (input, versymhdr->sh_size,
+				    versymhdr->sh_size)) == NULL)
 	{
-	  free (extversym);
-	error_ret:
 	  free (isymbuf);
-	  return FALSE;
+	  return false;
 	}
 
       ever = extversym + extsymoff;
@@ -9791,7 +10418,7 @@ elf_link_check_versioned_symbol (struct
 	      /* This is the base or first version.  We can use it.  */
 	      free (extversym);
 	      free (isymbuf);
-	      return TRUE;
+	      return true;
 	    }
 	}
 
@@ -9799,7 +10426,7 @@ elf_link_check_versioned_symbol (struct
       free (isymbuf);
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Convert ELF common symbol TYPE.  */
@@ -9831,13 +10458,13 @@ elf_link_convert_common_type (struct bfd
    script.  The second time we output the symbols that are still
    global symbols.  */
 
-static bfd_boolean
+static bool
 elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 {
   struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh;
   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
   struct elf_final_link_info *flinfo = eoinfo->flinfo;
-  bfd_boolean strip;
+  bool strip;
   Elf_Internal_Sym sym;
   asection *input_sec;
   const struct elf_backend_data *bed;
@@ -9849,19 +10476,19 @@ elf_link_output_extsym (struct bfd_hash_
     {
       h = (struct elf_link_hash_entry *) h->root.u.i.link;
       if (h->root.type == bfd_link_hash_new)
-	return TRUE;
+	return true;
     }
 
   /* Decide whether to output this symbol in this pass.  */
   if (eoinfo->localsyms)
     {
       if (!h->forced_local)
-	return TRUE;
+	return true;
     }
   else
     {
       if (h->forced_local)
-	return TRUE;
+	return true;
     }
 
   bed = get_elf_backend_data (flinfo->output_bfd);
@@ -9873,7 +10500,7 @@ elf_link_output_extsym (struct bfd_hash_
 	 references in regular files have already been handled unless
 	 they are in unreferenced sections which are removed by garbage
 	 collection).  */
-      bfd_boolean ignore_undef = FALSE;
+      bool ignore_undef = false;
 
       /* Some symbols may be special in that the fact that they're
 	 undefined can be safely ignored - let backend determine that.  */
@@ -9886,15 +10513,17 @@ elf_link_output_extsym (struct bfd_hash_
 	  && (!h->ref_regular || flinfo->info->gc_sections)
 	  && !elf_link_check_versioned_symbol (flinfo->info, bed, h)
 	  && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
-	(*flinfo->info->callbacks->undefined_symbol)
-	  (flinfo->info, h->root.root.string,
-	   h->ref_regular ? NULL : h->root.u.undef.abfd,
-	   NULL, 0,
-	   flinfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR);
+	{
+	  flinfo->info->callbacks->undefined_symbol
+	    (flinfo->info, h->root.root.string,
+	     h->ref_regular ? NULL : h->root.u.undef.abfd, NULL, 0,
+	     flinfo->info->unresolved_syms_in_shared_libs == RM_DIAGNOSE
+	     && !flinfo->info->warn_unresolved_syms);
+	}
 
       /* Strip a global symbol defined in a discarded section.  */
       if (h->indx == -3)
-	return TRUE;
+	return true;
     }
 
   /* We should also warn if a forced local symbol is referenced from
@@ -9930,15 +10559,15 @@ elf_link_output_extsym (struct bfd_hash_
       _bfd_error_handler (msg, flinfo->output_bfd,
 			  h->root.root.string, def_bfd);
       bfd_set_error (bfd_error_bad_value);
-      eoinfo->failed = TRUE;
-      return FALSE;
+      eoinfo->failed = true;
+      return false;
     }
 
   /* We don't want to output symbols that have never been mentioned by
      a regular file, or that we have been told to strip.  However, if
      h->indx is set to -2, the symbol is used by a reloc and we must
      output it.  */
-  strip = FALSE;
+  strip = false;
   if (h->indx == -2)
     ;
   else if ((h->def_dynamic
@@ -9946,13 +10575,13 @@ elf_link_output_extsym (struct bfd_hash_
 	    || h->root.type == bfd_link_hash_new)
 	   && !h->def_regular
 	   && !h->ref_regular)
-    strip = TRUE;
+    strip = true;
   else if (flinfo->info->strip == strip_all)
-    strip = TRUE;
+    strip = true;
   else if (flinfo->info->strip == strip_some
 	   && bfd_hash_lookup (flinfo->info->keep_hash,
-			       h->root.root.string, FALSE, FALSE) == NULL)
-    strip = TRUE;
+			       h->root.root.string, false, false) == NULL)
+    strip = true;
   else if ((h->root.type == bfd_link_hash_defined
 	    || h->root.type == bfd_link_hash_defweak)
 	   && ((flinfo->info->strip_discarded
@@ -9960,12 +10589,12 @@ elf_link_output_extsym (struct bfd_hash_
 	       || ((h->root.u.def.section->flags & SEC_LINKER_CREATED) == 0
 		   && h->root.u.def.section->owner != NULL
 		   && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)))
-    strip = TRUE;
+    strip = true;
   else if ((h->root.type == bfd_link_hash_undefined
 	    || h->root.type == bfd_link_hash_undefweak)
 	   && h->root.u.undef.abfd != NULL
 	   && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0)
-    strip = TRUE;
+    strip = true;
 
   type = h->type;
 
@@ -9977,7 +10606,7 @@ elf_link_output_extsym (struct bfd_hash_
       && h->dynindx == -1
       && type != STT_GNU_IFUNC
       && !h->forced_local)
-    return TRUE;
+    return true;
 
   sym.st_value = 0;
   sym.st_size = h->size;
@@ -9988,7 +10617,7 @@ elf_link_output_extsym (struct bfd_hash_
     case bfd_link_hash_new:
     case bfd_link_hash_warning:
       abort ();
-      return FALSE;
+      return false;
 
     case bfd_link_hash_undefined:
     case bfd_link_hash_undefweak:
@@ -10012,8 +10641,8 @@ elf_link_output_extsym (struct bfd_hash_
 		  (_("%pB: could not find output section %pA for input section %pA"),
 		   flinfo->output_bfd, input_sec->output_section, input_sec);
 		bfd_set_error (bfd_error_nonrepresentable_section);
-		eoinfo->failed = TRUE;
-		return FALSE;
+		eoinfo->failed = true;
+		return false;
 	      }
 
 	    /* ELF symbols in relocatable files are section relative,
@@ -10054,7 +10683,7 @@ elf_link_output_extsym (struct bfd_hash_
 	 foo is used with no version, then we add an indirect symbol
 	 foo which points to foo@@GNU_1.2.  We ignore these symbols,
 	 since the indirected symbol is already in the hash table.  */
-      return TRUE;
+      return true;
     }
 
   if (type == STT_COMMON || type == STT_OBJECT)
@@ -10112,8 +10741,8 @@ elf_link_output_extsym (struct bfd_hash_
       if (! ((*bed->elf_backend_finish_dynamic_symbol)
 	     (flinfo->output_bfd, flinfo->info, h, &sym)))
 	{
-	  eoinfo->failed = TRUE;
-	  return FALSE;
+	  eoinfo->failed = true;
+	  return false;
 	}
     }
 
@@ -10172,8 +10801,8 @@ elf_link_output_extsym (struct bfd_hash_
 	msg = _("%pB: hidden symbol `%s' isn't defined");
       _bfd_error_handler (msg, flinfo->output_bfd, h->root.root.string);
       bfd_set_error (bfd_error_bad_value);
-      eoinfo->failed = TRUE;
-      return FALSE;
+      eoinfo->failed = true;
+      return false;
     }
 
   /* If this symbol should be put in the .dynsym section, then put it
@@ -10203,8 +10832,8 @@ elf_link_output_extsym (struct bfd_hash_
 		/* xgettext:c-format */
 		(_("%pB: no symbol version section for versioned symbol `%s'"),
 		 flinfo->output_bfd, h->root.root.string);
-	      eoinfo->failed = TRUE;
-	      return FALSE;
+	      eoinfo->failed = true;
+	      return false;
 	    }
 	}
 
@@ -10213,9 +10842,15 @@ elf_link_output_extsym (struct bfd_hash_
 	      + h->dynindx * bed->s->sizeof_sym);
       if (!check_dynsym (flinfo->output_bfd, &sym))
 	{
-	  eoinfo->failed = TRUE;
-	  return FALSE;
+	  eoinfo->failed = true;
+	  return false;
 	}
+
+      /* Inform the linker of the addition of this symbol.  */
+
+      if (flinfo->info->callbacks->ctf_new_dynsym)
+	flinfo->info->callbacks->ctf_new_dynsym (h->dynindx, &sym);
+
       bed->s->swap_symbol_out (flinfo->output_bfd, &sym, esym, 0);
 
       if (flinfo->hash_sec != NULL)
@@ -10251,7 +10886,7 @@ elf_link_output_extsym (struct bfd_hash_
 	      if (h->verinfo.verdef == NULL
 		  || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
 		      & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
-		iversym.vs_vers = 0;
+		iversym.vs_vers = 1;
 	      else
 		iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
 	    }
@@ -10284,14 +10919,14 @@ elf_link_output_extsym (struct bfd_hash_
 	   /* PR 22319 Do not strip global undefined symbols marked as being needed.  */
 	   && (h->mark != 1 || ELF_ST_BIND (sym.st_info) != STB_GLOBAL)
 	   && !bfd_link_relocatable (flinfo->info))
-    return TRUE;
+    return true;
 
   /* Also strip others that we couldn't earlier due to dynamic symbol
      processing.  */
   if (strip)
-    return TRUE;
+    return true;
   if ((input_sec->flags & SEC_EXCLUDE) != 0)
-    return TRUE;
+    return true;
 
   /* Output a FILE symbol so that following locals are not associated
      with the wrong input file.  We need one for forced local symbols
@@ -10311,9 +10946,9 @@ elf_link_output_extsym (struct bfd_hash_
       fsym.st_shndx = SHN_ABS;
       if (!elf_link_output_symstrtab (eoinfo->flinfo, NULL, &fsym,
 				      bfd_und_section_ptr, NULL))
-	return FALSE;
+	return false;
 
-      eoinfo->file_sym_done = TRUE;
+      eoinfo->file_sym_done = true;
     }
 
   indx = bfd_get_symcount (flinfo->output_bfd);
@@ -10321,21 +10956,21 @@ elf_link_output_extsym (struct bfd_hash_
 				   input_sec, h);
   if (ret == 0)
     {
-      eoinfo->failed = TRUE;
-      return FALSE;
+      eoinfo->failed = true;
+      return false;
     }
   else if (ret == 1)
     h->indx = indx;
   else if (h->indx == -2)
     abort();
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if special handling is done for relocs in SEC against
    symbols defined in discarded sections.  */
 
-static bfd_boolean
+static bool
 elf_section_ignore_discarded_relocs (asection *sec)
 {
   const struct elf_backend_data *bed;
@@ -10345,7 +10980,8 @@ elf_section_ignore_discarded_relocs (ase
     case SEC_INFO_TYPE_STABS:
     case SEC_INFO_TYPE_EH_FRAME:
     case SEC_INFO_TYPE_EH_FRAME_ENTRY:
-      return TRUE;
+    case SEC_INFO_TYPE_SFRAME:
+      return true;
     default:
       break;
     }
@@ -10353,9 +10989,9 @@ elf_section_ignore_discarded_relocs (ase
   bed = get_elf_backend_data (sec->owner);
   if (bed->elf_backend_ignore_discarded_relocs != NULL
       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Return a mask saying how ld should treat relocations in SEC against
@@ -10370,12 +11006,22 @@ elf_section_ignore_discarded_relocs (ase
 unsigned int
 _bfd_elf_default_action_discarded (asection *sec)
 {
+  const struct elf_backend_data *bed;
+  bed = get_elf_backend_data (sec->owner);
+
   if (sec->flags & SEC_DEBUGGING)
     return PRETEND;
 
   if (strcmp (".eh_frame", sec->name) == 0)
     return 0;
 
+  if (bed->elf_backend_can_make_multiple_eh_frame
+      && strncmp (sec->name, ".eh_frame.", 10) == 0)
+    return 0;
+
+  if (strcmp (".sframe", sec->name) == 0)
+    return 0;
+
   if (strcmp (".gcc_except_table", sec->name) == 0)
     return 0;
 
@@ -10418,10 +11064,21 @@ _bfd_elf_check_kept_section (asection *s
     {
       if ((kept->flags & SEC_GROUP) != 0)
 	kept = match_group_member (sec, kept, info);
-      if (kept != NULL
-	  && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
-	      != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
-	kept = NULL;
+      if (kept != NULL)
+	{
+	  if ((sec->rawsize != 0 ? sec->rawsize : sec->size)
+	      != (kept->rawsize != 0 ? kept->rawsize : kept->size))
+	    kept = NULL;
+	  else
+	    {
+	      /* Get the real kept section.  */
+	      asection *next;
+	      for (next = kept->kept_section;
+		   next != NULL;
+		   next = next->kept_section)
+		kept = next;
+	    }
+	}
       sec->kept_section = kept;
     }
   return kept;
@@ -10432,7 +11089,7 @@ _bfd_elf_check_kept_section (asection *s
    This is so that we only have to read the local symbols once, and
    don't have to keep them in memory.  */
 
-static bfd_boolean
+static bool
 elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
 {
   int (*relocate_section)
@@ -10453,7 +11110,7 @@ elf_link_input_bfd (struct elf_final_lin
   bfd_size_type address_size;
   bfd_vma r_type_mask;
   int r_sym_shift;
-  bfd_boolean have_file_sym = FALSE;
+  bool have_file_sym = false;
 
   output_bfd = flinfo->output_bfd;
   bed = get_elf_backend_data (output_bfd);
@@ -10463,7 +11120,7 @@ elf_link_input_bfd (struct elf_final_lin
      we don't want the local symbols, and we don't want the section
      contents.  */
   if ((input_bfd->flags & DYNAMIC) != 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   if (elf_bad_symtab (input_bfd))
@@ -10477,6 +11134,16 @@ elf_link_input_bfd (struct elf_final_lin
       extsymoff = symtab_hdr->sh_info;
     }
 
+  /* Enable GNU OSABI features in the output BFD that are used in the input
+     BFD.  */
+  if (bed->elf_osabi == ELFOSABI_NONE
+      || bed->elf_osabi == ELFOSABI_GNU
+      || bed->elf_osabi == ELFOSABI_FREEBSD)
+    elf_tdata (output_bfd)->has_gnu_osabi
+      |= (elf_tdata (input_bfd)->has_gnu_osabi
+	  & (bfd_link_relocatable (flinfo->info)
+	     ? -1 : ~elf_gnu_osabi_retain));
+
   /* Read the local symbols.  */
   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
   if (isymbuf == NULL && locsymcount != 0)
@@ -10486,13 +11153,13 @@ elf_link_input_bfd (struct elf_final_lin
 				      flinfo->external_syms,
 				      flinfo->locsym_shndx);
       if (isymbuf == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Find local symbol sections and adjust values of symbols in
      SEC_MERGE sections.  Write out those local symbols we know are
      going into the output file.  */
-  isymend = isymbuf + locsymcount;
+  isymend = PTR_ADD (isymbuf, locsymcount);
   for (isym = isymbuf, pindex = flinfo->indices, ppsection = flinfo->sections;
        isym < isymend;
        isym++, pindex++, ppsection++)
@@ -10567,21 +11234,21 @@ elf_link_input_bfd (struct elf_final_lin
 
       /* If this symbol is defined in a section which we are
 	 discarding, we don't need to keep it.  */
-      if (isym->st_shndx != SHN_UNDEF
-	  && isym->st_shndx < SHN_LORESERVE
-	  && bfd_section_removed_from_list (output_bfd,
-					    isec->output_section))
+      if (isym->st_shndx < SHN_LORESERVE
+	  && (isec->output_section == NULL
+	      || bfd_section_removed_from_list (output_bfd,
+						isec->output_section)))
 	continue;
 
       /* Get the name of the symbol.  */
       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
 					      isym->st_name);
       if (name == NULL)
-	return FALSE;
+	return false;
 
       /* See if we are discarding symbols with this name.  */
       if ((flinfo->info->strip == strip_some
-	   && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE)
+	   && (bfd_hash_lookup (flinfo->info->keep_hash, name, false, false)
 	       == NULL))
 	  || (((flinfo->info->discard == discard_sec_merge
 		&& (isec->flags & SEC_MERGE)
@@ -10596,7 +11263,7 @@ elf_link_input_bfd (struct elf_final_lin
 	    /* -flto puts a temp file name here.  This means builds
 	       are not reproducible.  Discard the symbol.  */
 	    continue;
-	  have_file_sym = TRUE;
+	  have_file_sym = true;
 	  flinfo->filesym_count += 1;
 	}
       if (!have_file_sym)
@@ -10607,17 +11274,19 @@ elf_link_input_bfd (struct elf_final_lin
 	     files lack such, so that their symbols won't be
 	     associated with a previous input file.  It's not the
 	     source file, but the best we can do.  */
-	  have_file_sym = TRUE;
+	  const char *filename;
+	  have_file_sym = true;
 	  flinfo->filesym_count += 1;
 	  memset (&osym, 0, sizeof (osym));
 	  osym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
 	  osym.st_shndx = SHN_ABS;
-	  if (!elf_link_output_symstrtab (flinfo,
-					  (input_bfd->lto_output ? NULL
-					   : input_bfd->filename),
-					  &osym, bfd_abs_section_ptr,
-					  NULL))
-	    return FALSE;
+	  if (input_bfd->lto_output)
+	    filename = NULL;
+	  else
+	    filename = lbasename (bfd_get_filename (input_bfd));
+	  if (!elf_link_output_symstrtab (flinfo, filename, &osym,
+					  bfd_abs_section_ptr, NULL))
+	    return false;
 	}
 
       osym = *isym;
@@ -10626,7 +11295,7 @@ elf_link_input_bfd (struct elf_final_lin
       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
 							 isec->output_section);
       if (osym.st_shndx == SHN_BAD)
-	return FALSE;
+	return false;
 
       /* ELF symbols in relocatable files are section relative, but
 	 in executable files they are virtual addresses.  Note that
@@ -10653,7 +11322,7 @@ elf_link_input_bfd (struct elf_final_lin
       indx = bfd_get_symcount (output_bfd);
       ret = elf_link_output_symstrtab (flinfo, name, &osym, isec, NULL);
       if (ret == 0)
-	return FALSE;
+	return false;
       else if (ret == 1)
 	*pindex = indx;
     }
@@ -10725,12 +11394,12 @@ elf_link_input_bfd (struct elf_final_lin
 							  symtab_hdr->sh_link,
 							  sym.st_name);
 		  if (name == NULL)
-		    return FALSE;
+		    return false;
 
 		  sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
 								    sec);
 		  if (sym.st_shndx == SHN_BAD)
-		    return FALSE;
+		    return false;
 
 		  sym.st_value += o->output_offset;
 
@@ -10738,7 +11407,7 @@ elf_link_input_bfd (struct elf_final_lin
 		  ret = elf_link_output_symstrtab (flinfo, name, &sym, o,
 						   NULL);
 		  if (ret == 0)
-		    return FALSE;
+		    return false;
 		  else if (ret == 1)
 		    flinfo->indices[symndx] = indx;
 		  else
@@ -10775,11 +11444,18 @@ elf_link_input_bfd (struct elf_final_lin
 	      contents = flinfo->contents;
 	    }
 	}
+      else if (!(o->flags & SEC_RELOC)
+	       && !bed->elf_backend_write_section
+	       && o->sec_info_type == SEC_INFO_TYPE_MERGE)
+	/* A MERGE section that has no relocations doesn't need the
+	   contents anymore, they have been recorded earlier.  Except
+	   if the backend has special provisions for writing sections.  */
+	contents = NULL;
       else
 	{
 	  contents = flinfo->contents;
 	  if (! bfd_get_full_section_contents (input_bfd, o, &contents))
-	    return FALSE;
+	    return false;
 	}
 
       if ((o->flags & SEC_RELOC) != 0)
@@ -10791,36 +11467,13 @@ elf_link_input_bfd (struct elf_final_lin
 
 	  /* Get the swapped relocs.  */
 	  internal_relocs
-	    = _bfd_elf_link_read_relocs (input_bfd, o, flinfo->external_relocs,
-					 flinfo->internal_relocs, FALSE);
+	    = _bfd_elf_link_info_read_relocs (input_bfd, flinfo->info, o,
+					      flinfo->external_relocs,
+					      flinfo->internal_relocs,
+					      false);
 	  if (internal_relocs == NULL
 	      && o->reloc_count > 0)
-	    return FALSE;
-
-	  /* We need to reverse-copy input .ctors/.dtors sections if
-	     they are placed in .init_array/.finit_array for output.  */
-	  if (o->size > address_size
-	      && ((strncmp (o->name, ".ctors", 6) == 0
-		   && strcmp (o->output_section->name,
-			      ".init_array") == 0)
-		  || (strncmp (o->name, ".dtors", 6) == 0
-		      && strcmp (o->output_section->name,
-				 ".fini_array") == 0))
-	      && (o->name[6] == 0 || o->name[6] == '.'))
-	    {
-	      if (o->size * bed->s->int_rels_per_ext_rel
-		  != o->reloc_count * address_size)
-		{
-		  _bfd_error_handler
-		    /* xgettext:c-format */
-		    (_("error: %pB: size of section %pA is not "
-		       "multiple of address size"),
-		     input_bfd, o);
-		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
-		}
-	      o->flags |= SEC_ELF_REVERSE_COPY;
-	    }
+	    return false;
 
 	  action_discarded = -1;
 	  if (!elf_section_ignore_discarded_relocs (o))
@@ -10862,7 +11515,7 @@ elf_link_input_bfd (struct elf_final_lin
 			   "that references a non-existent global symbol"),
 			 input_bfd, (uint64_t) rel->r_info, o);
 		      bfd_set_error (bfd_error_bad_value);
-		      return FALSE;
+		      return false;
 		    }
 
 		  while (h->root.type == bfd_link_hash_indirect
@@ -10916,7 +11569,7 @@ elf_link_input_bfd (struct elf_final_lin
 #ifdef DEBUG
 		  printf ("Encountered a complex symbol!");
 		  printf (" (input_bfd %s, section %s, reloc %ld\n",
-			  input_bfd->filename, o->name,
+			  bfd_get_filename (input_bfd), o->name,
 			  (long) (rel - internal_relocs));
 		  printf (" symbol: idx  %8.8lx, name %s\n",
 			  r_symndx, sym_name);
@@ -10926,7 +11579,7 @@ elf_link_input_bfd (struct elf_final_lin
 #endif
 		  if (!eval_symbol (&val, &sym_name, input_bfd, flinfo, dot,
 				    isymbuf, locsymcount, s_type == STT_SRELC))
-		    return FALSE;
+		    return false;
 
 		  /* Symbol evaluated OK.  Update to absolute value.  */
 		  set_symbol_value (input_bfd, isymbuf, locsymcount,
@@ -10996,7 +11649,7 @@ elf_link_input_bfd (struct elf_final_lin
 				     isymbuf,
 				     flinfo->sections);
 	  if (!ret)
-	    return FALSE;
+	    return false;
 
 	  if (ret == 2
 	      || bfd_link_relocatable (flinfo->info)
@@ -11009,18 +11662,18 @@ elf_link_input_bfd (struct elf_final_lin
 	      struct elf_link_hash_entry **rel_hash_list, **rela_hash_list;
 	      Elf_Internal_Shdr *input_rel_hdr, *input_rela_hdr;
 	      unsigned int next_erel;
-	      bfd_boolean rela_normal;
+	      bool rela_normal;
 	      struct bfd_elf_section_data *esdi, *esdo;
 
 	      esdi = elf_section_data (o);
 	      esdo = elf_section_data (o->output_section);
-	      rela_normal = FALSE;
+	      rela_normal = false;
 
 	      /* Adjust the reloc addresses and symbol indices.  */
 
 	      irela = internal_relocs;
 	      irelaend = irela + o->reloc_count;
-	      rel_hash = esdo->rel.hashes + esdo->rel.count;
+	      rel_hash = PTR_ADD (esdo->rel.hashes, esdo->rel.count);
 	      /* We start processing the REL relocs, if any.  When we reach
 		 IRELAMID in the loop, we switch to the RELA relocs.  */
 	      irelamid = irela;
@@ -11046,7 +11699,7 @@ elf_link_input_bfd (struct elf_final_lin
 
 		  if (irela == irelamid)
 		    {
-		      rel_hash = esdo->rela.hashes + esdo->rela.count;
+		      rel_hash = PTR_ADD (esdo->rela.hashes, esdo->rela.count);
 		      rela_hash_list = rel_hash;
 		      rela_normal = bed->rela_normal;
 		    }
@@ -11125,7 +11778,7 @@ elf_link_input_bfd (struct elf_final_lin
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -11177,7 +11830,7 @@ elf_link_input_bfd (struct elf_final_lin
 			    {
 			      /* You can't do ld -r -s.  */
 			      bfd_set_error (bfd_error_invalid_operation);
-			      return FALSE;
+			      return false;
 			    }
 
 			  /* This symbol was skipped earlier, but
@@ -11187,14 +11840,14 @@ elf_link_input_bfd (struct elf_final_lin
 			  name = (bfd_elf_string_from_elf_section
 				  (input_bfd, shlink, sym.st_name));
 			  if (name == NULL)
-			    return FALSE;
+			    return false;
 
 			  osec = sec->output_section;
 			  sym.st_shndx =
 			    _bfd_elf_section_from_bfd_section (output_bfd,
 							       osec);
 			  if (sym.st_shndx == SHN_BAD)
-			    return FALSE;
+			    return false;
 
 			  sym.st_value += sec->output_offset;
 			  if (!bfd_link_relocatable (flinfo->info))
@@ -11221,7 +11874,7 @@ elf_link_input_bfd (struct elf_final_lin
 							   &sym, sec,
 							   NULL);
 			  if (ret == 0)
-			    return FALSE;
+			    return false;
 			  else if (ret == 1)
 			    flinfo->indices[r_symndx] = indx;
 			  else
@@ -11243,7 +11896,7 @@ elf_link_input_bfd (struct elf_final_lin
 						     input_rel_hdr,
 						     internal_relocs,
 						     rel_hash_list))
-		    return FALSE;
+		    return false;
 		  internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
 				      * bed->s->int_rels_per_ext_rel);
 		  rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
@@ -11256,7 +11909,7 @@ elf_link_input_bfd (struct elf_final_lin
 						     input_rela_hdr,
 						     internal_relocs,
 						     rela_hash_list))
-		    return FALSE;
+		    return false;
 		}
 	    }
 	}
@@ -11275,18 +11928,18 @@ elf_link_input_bfd (struct elf_final_lin
 		 (output_bfd,
 		  &elf_hash_table (flinfo->info)->stab_info,
 		  o, &elf_section_data (o)->sec_info, contents)))
-	    return FALSE;
+	    return false;
 	  break;
 	case SEC_INFO_TYPE_MERGE:
 	  if (! _bfd_write_merged_section (output_bfd, o,
 					   elf_section_data (o)->sec_info))
-	    return FALSE;
+	    return false;
 	  break;
 	case SEC_INFO_TYPE_EH_FRAME:
 	  {
 	    if (! _bfd_elf_write_section_eh_frame (output_bfd, flinfo->info,
 						   o, contents))
-	      return FALSE;
+	      return false;
 	  }
 	  break;
 	case SEC_INFO_TYPE_EH_FRAME_ENTRY:
@@ -11294,9 +11947,19 @@ elf_link_input_bfd (struct elf_final_lin
 	    if (! _bfd_elf_write_section_eh_frame_entry (output_bfd,
 							 flinfo->info,
 							 o, contents))
-	      return FALSE;
+	      return false;
 	  }
 	  break;
+	case SEC_INFO_TYPE_SFRAME:
+	    {
+	      /* Merge .sframe sections into the ctf frame encoder
+		 context of the output_bfd's section.  The final .sframe
+		 output section will be written out later.  */
+	      if (!_bfd_elf_merge_section_sframe (output_bfd, flinfo->info,
+						  o, contents))
+		return false;
+	    }
+	    break;
 	default:
 	  {
 	    if (! (o->flags & SEC_EXCLUDE))
@@ -11306,9 +11969,25 @@ elf_link_input_bfd (struct elf_final_lin
 
 		offset *= bfd_octets_per_byte (output_bfd, o);
 
-		if ((o->flags & SEC_ELF_REVERSE_COPY))
+		if ((o->flags & SEC_ELF_REVERSE_COPY)
+		    && o->size > address_size)
 		  {
 		    /* Reverse-copy input section to output.  */
+
+		    if ((o->size & (address_size - 1)) != 0
+			|| (o->reloc_count != 0
+			    && (o->size * bed->s->int_rels_per_ext_rel
+				!= o->reloc_count * address_size)))
+		      {
+			_bfd_error_handler
+			  /* xgettext:c-format */
+			  (_("error: %pB: size of section %pA is not "
+			     "multiple of address size"),
+			   input_bfd, o);
+			bfd_set_error (bfd_error_bad_value);
+			return false;
+		      }
+
 		    do
 		      {
 			todo -= address_size;
@@ -11317,7 +11996,7 @@ elf_link_input_bfd (struct elf_final_lin
 							contents + todo,
 							offset,
 							address_size))
-			  return FALSE;
+			  return false;
 			if (todo == 0)
 			  break;
 			offset += address_size;
@@ -11328,14 +12007,14 @@ elf_link_input_bfd (struct elf_final_lin
 						     o->output_section,
 						     contents,
 						     offset, todo))
-		  return FALSE;
+		  return false;
 	      }
 	  }
 	  break;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Generate a reloc when linking an ELF file.  This is a reloc
@@ -11343,7 +12022,7 @@ elf_link_input_bfd (struct elf_final_lin
    is used to build constructor and destructor tables when linking
    with -Ur.  */
 
-static bfd_boolean
+static bool
 elf_reloc_link_order (bfd *output_bfd,
 		      struct bfd_link_info *info,
 		      asection *output_section,
@@ -11366,7 +12045,7 @@ elf_reloc_link_order (bfd *output_bfd,
   if (howto == NULL)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   addend = link_order->u.reloc.p->addend;
@@ -11398,7 +12077,7 @@ elf_reloc_link_order (bfd *output_bfd,
       h = ((struct elf_link_hash_entry *)
 	   bfd_wrapped_link_hash_lookup (output_bfd, info,
 					 link_order->u.reloc.p->u.name,
-					 FALSE, FALSE, TRUE));
+					 false, false, true));
       if (h != NULL
 	  && (h->root.type == bfd_link_hash_defined
 	      || h->root.type == bfd_link_hash_defweak))
@@ -11436,14 +12115,14 @@ elf_reloc_link_order (bfd *output_bfd,
       bfd_size_type size;
       bfd_reloc_status_type rstat;
       bfd_byte *buf;
-      bfd_boolean ok;
+      bool ok;
       const char *sym_name;
       bfd_size_type octets;
 
       size = (bfd_size_type) bfd_get_reloc_size (howto);
       buf = (bfd_byte *) bfd_zmalloc (size);
       if (buf == NULL && size != 0)
-	return FALSE;
+	return false;
       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
       switch (rstat)
 	{
@@ -11471,7 +12150,7 @@ elf_reloc_link_order (bfd *output_bfd,
 				     octets, size);
       free (buf);
       if (! ok)
-	return FALSE;
+	return false;
     }
 
   /* The address of a reloc is relative to the section in a
@@ -11508,149 +12187,16 @@ elf_reloc_link_order (bfd *output_bfd,
 
   ++reldata->count;
 
-  return TRUE;
-}
-
-
-/* Compare two sections based on the locations of the sections they are
-   linked to.  Used by elf_fixup_link_order.  */
-
-static int
-compare_link_order (const void *a, const void *b)
-{
-  const struct bfd_link_order *alo = *(const struct bfd_link_order **) a;
-  const struct bfd_link_order *blo = *(const struct bfd_link_order **) b;
-  asection *asec = elf_linked_to_section (alo->u.indirect.section);
-  asection *bsec = elf_linked_to_section (blo->u.indirect.section);
-  bfd_vma apos = asec->output_section->lma + asec->output_offset;
-  bfd_vma bpos = bsec->output_section->lma + bsec->output_offset;
-
-  if (apos < bpos)
-    return -1;
-  if (apos > bpos)
-    return 1;
-
-  /* The only way we should get matching LMAs is when the first of two
-     sections has zero size.  */
-  if (asec->size < bsec->size)
-    return -1;
-  if (asec->size > bsec->size)
-    return 1;
-
-  /* If they are both zero size then they almost certainly have the same
-     VMA and thus are not ordered with respect to each other.  Test VMA
-     anyway, and fall back to id to make the result reproducible across
-     qsort implementations.  */
-  apos = asec->output_section->vma + asec->output_offset;
-  bpos = bsec->output_section->vma + bsec->output_offset;
-  if (apos < bpos)
-    return -1;
-  if (apos > bpos)
-    return 1;
-
-  return asec->id - bsec->id;
-}
-
-
-/* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
-   order as their linked sections.  Returns false if this could not be done
-   because an output section includes both ordered and unordered
-   sections.  Ideally we'd do this in the linker proper.  */
-
-static bfd_boolean
-elf_fixup_link_order (bfd *abfd, asection *o)
-{
-  size_t seen_linkorder;
-  size_t seen_other;
-  size_t n;
-  struct bfd_link_order *p;
-  bfd *sub;
-  struct bfd_link_order **sections;
-  asection *s, *other_sec, *linkorder_sec;
-  bfd_vma offset;
-
-  other_sec = NULL;
-  linkorder_sec = NULL;
-  seen_other = 0;
-  seen_linkorder = 0;
-  for (p = o->map_head.link_order; p != NULL; p = p->next)
-    {
-      if (p->type == bfd_indirect_link_order)
-	{
-	  s = p->u.indirect.section;
-	  sub = s->owner;
-	  if ((s->flags & SEC_LINKER_CREATED) == 0
-	      && bfd_get_flavour (sub) == bfd_target_elf_flavour
-	      && elf_section_data (s) != NULL
-	      && elf_linked_to_section (s) != NULL)
-	    {
-	      seen_linkorder++;
-	      linkorder_sec = s;
-	    }
-	  else
-	    {
-	      seen_other++;
-	      other_sec = s;
-	    }
-	}
-      else
-	seen_other++;
-
-      if (seen_other && seen_linkorder)
-	{
-	  if (other_sec && linkorder_sec)
-	    _bfd_error_handler
-	      /* xgettext:c-format */
-	      (_("%pA has both ordered [`%pA' in %pB] "
-		 "and unordered [`%pA' in %pB] sections"),
-	       o, linkorder_sec, linkorder_sec->owner,
-	       other_sec, other_sec->owner);
-	  else
-	    _bfd_error_handler
-	      (_("%pA has both ordered and unordered sections"), o);
-	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
-	}
-    }
-
-  if (!seen_linkorder)
-    return TRUE;
-
-  sections = bfd_malloc (seen_linkorder * sizeof (*sections));
-  if (sections == NULL)
-    return FALSE;
-
-  seen_linkorder = 0;
-  for (p = o->map_head.link_order; p != NULL; p = p->next)
-    sections[seen_linkorder++] = p;
-
-  /* Sort the input sections in the order of their linked section.  */
-  qsort (sections, seen_linkorder, sizeof (*sections), compare_link_order);
-
-  /* Change the offsets of the sections.  */
-  offset = 0;
-  for (n = 0; n < seen_linkorder; n++)
-    {
-      bfd_vma mask;
-      s = sections[n]->u.indirect.section;
-      mask = ~(bfd_vma) 0 << s->alignment_power;
-      offset = (offset + ~mask) & mask;
-      s->output_offset = offset / bfd_octets_per_byte (abfd, s);
-      sections[n]->offset = offset;
-      offset += sections[n]->size;
-    }
-
-  free (sections);
-  return TRUE;
+  return true;
 }
 
 /* Generate an import library in INFO->implib_bfd from symbols in ABFD.
    Returns TRUE upon success, FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 elf_output_implib (bfd *abfd, struct bfd_link_info *info)
 {
-  bfd_boolean ret = FALSE;
+  bool ret = false;
   bfd *implib_bfd;
   const struct elf_backend_data *bed;
   flagword flags;
@@ -11661,19 +12207,20 @@ elf_output_implib (bfd *abfd, struct bfd
   long symcount;
   long src_count;
   elf_symbol_type *osymbuf;
+  size_t amt;
 
   implib_bfd = info->out_implib_bfd;
   bed = get_elf_backend_data (abfd);
 
   if (!bfd_set_format (implib_bfd, bfd_object))
-    return FALSE;
+    return false;
 
   /* Use flag from executable but make it a relocatable object.  */
   flags = bfd_get_file_flags (abfd);
   flags &= ~HAS_RELOC;
   if (!bfd_set_start_address (implib_bfd, 0)
       || !bfd_set_file_flags (implib_bfd, flags & ~EXEC_P))
-    return FALSE;
+    return false;
 
   /* Copy architecture of output file to import library file.  */
   arch = bfd_get_arch (abfd);
@@ -11681,17 +12228,17 @@ elf_output_implib (bfd *abfd, struct bfd
   if (!bfd_set_arch_mach (implib_bfd, arch, mach)
       && (abfd->target_defaulted
 	  || bfd_get_arch (abfd) != bfd_get_arch (implib_bfd)))
-    return FALSE;
+    return false;
 
   /* Get symbol table size.  */
   symsize = bfd_get_symtab_upper_bound (abfd);
   if (symsize < 0)
-    return FALSE;
+    return false;
 
   /* Read in the symbol table.  */
   sympp = (asymbol **) bfd_malloc (symsize);
   if (sympp == NULL)
-    return FALSE;
+    return false;
 
   symcount = bfd_canonicalize_symtab (abfd, sympp);
   if (symcount < 0)
@@ -11718,8 +12265,8 @@ elf_output_implib (bfd *abfd, struct bfd
 
 
   /* Make symbols absolute.  */
-  osymbuf = (elf_symbol_type *) bfd_alloc2 (implib_bfd, symcount,
-					    sizeof (*osymbuf));
+  amt = symcount * sizeof (*osymbuf);
+  osymbuf = (elf_symbol_type *) bfd_alloc (implib_bfd, amt);
   if (osymbuf == NULL)
     goto free_sym_buf;
 
@@ -11746,9 +12293,9 @@ elf_output_implib (bfd *abfd, struct bfd
   if (!bfd_close (implib_bfd))
     goto free_sym_buf;
 
-  ret = TRUE;
+  ret = true;
 
-free_sym_buf:
+ free_sym_buf:
   free (sympp);
   return ret;
 }
@@ -11760,42 +12307,31 @@ elf_final_link_free (bfd *obfd, struct e
 
   if (flinfo->symstrtab != NULL)
     _bfd_elf_strtab_free (flinfo->symstrtab);
-  if (flinfo->contents != NULL)
-    free (flinfo->contents);
-  if (flinfo->external_relocs != NULL)
-    free (flinfo->external_relocs);
-  if (flinfo->internal_relocs != NULL)
-    free (flinfo->internal_relocs);
-  if (flinfo->external_syms != NULL)
-    free (flinfo->external_syms);
-  if (flinfo->locsym_shndx != NULL)
-    free (flinfo->locsym_shndx);
-  if (flinfo->internal_syms != NULL)
-    free (flinfo->internal_syms);
-  if (flinfo->indices != NULL)
-    free (flinfo->indices);
-  if (flinfo->sections != NULL)
-    free (flinfo->sections);
-  if (flinfo->symshndxbuf != NULL
-      && flinfo->symshndxbuf != (Elf_External_Sym_Shndx *) -1)
+  free (flinfo->contents);
+  free (flinfo->external_relocs);
+  free (flinfo->internal_relocs);
+  free (flinfo->external_syms);
+  free (flinfo->locsym_shndx);
+  free (flinfo->internal_syms);
+  free (flinfo->indices);
+  free (flinfo->sections);
+  if (flinfo->symshndxbuf != (Elf_External_Sym_Shndx *) -1)
     free (flinfo->symshndxbuf);
   for (o = obfd->sections; o != NULL; o = o->next)
     {
       struct bfd_elf_section_data *esdo = elf_section_data (o);
-      if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL)
-	free (esdo->rel.hashes);
-      if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL)
-	free (esdo->rela.hashes);
+      free (esdo->rel.hashes);
+      free (esdo->rela.hashes);
     }
 }
 
 /* Do the final step of an ELF link.  */
 
-bfd_boolean
+bool
 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 {
-  bfd_boolean dynamic;
-  bfd_boolean emit_relocs;
+  bool dynamic;
+  bool emit_relocs;
   bfd *dynobj;
   struct elf_final_link_info flinfo;
   asection *o;
@@ -11812,17 +12348,20 @@ bfd_elf_final_link (bfd *abfd, struct bf
   Elf_Internal_Shdr *symtab_shndx_hdr;
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
   struct elf_outext_info eoinfo;
-  bfd_boolean merged;
-  size_t relativecount = 0;
+  bool merged;
+  size_t relativecount;
+  size_t relr_entsize;
   asection *reldyn = 0;
   bfd_size_type amt;
   asection *attr_section = NULL;
   bfd_vma attr_size = 0;
   const char *std_attrs_section;
   struct elf_link_hash_table *htab = elf_hash_table (info);
+  bool sections_removed;
+  bool ret;
 
-  if (!is_elf_hash_table (htab))
-    return FALSE;
+  if (!is_elf_hash_table (&htab->root))
+    return false;
 
   if (bfd_link_pic (info))
     abfd->flags |= DYNAMIC;
@@ -11833,11 +12372,12 @@ bfd_elf_final_link (bfd *abfd, struct bf
   emit_relocs = (bfd_link_relocatable (info)
 		 || info->emitrelocations);
 
+  memset (&flinfo, 0, sizeof (flinfo));
   flinfo.info = info;
   flinfo.output_bfd = abfd;
   flinfo.symstrtab = _bfd_elf_strtab_init ();
   if (flinfo.symstrtab == NULL)
-    return FALSE;
+    return false;
 
   if (! dynamic)
     {
@@ -11852,24 +12392,20 @@ bfd_elf_final_link (bfd *abfd, struct bf
       /* Note that it is OK if symver_sec is NULL.  */
     }
 
-  flinfo.contents = NULL;
-  flinfo.external_relocs = NULL;
-  flinfo.internal_relocs = NULL;
-  flinfo.external_syms = NULL;
-  flinfo.locsym_shndx = NULL;
-  flinfo.internal_syms = NULL;
-  flinfo.indices = NULL;
-  flinfo.sections = NULL;
-  flinfo.symshndxbuf = NULL;
-  flinfo.filesym_count = 0;
+  if (info->unique_symbol
+      && !bfd_hash_table_init (&flinfo.local_hash_table,
+			       local_hash_newfunc,
+			       sizeof (struct local_hash_entry)))
+    return false;
 
   /* The object attributes have been merged.  Remove the input
      sections from the link, and set the contents of the output
      section.  */
+  sections_removed = false;
   std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
   for (o = abfd->sections; o != NULL; o = o->next)
     {
-      bfd_boolean remove_section = FALSE;
+      bool remove_section = false;
 
       if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
 	  || strcmp (o->name, ".gnu.attributes") == 0)
@@ -11893,20 +12429,23 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	  if (attr_size)
 	    attr_section = o;
 	  else
-	    remove_section = TRUE;
+	    remove_section = true;
 	}
       else if ((o->flags & SEC_GROUP) != 0 && o->size == 0)
 	{
 	  /* Remove empty group section from linker output.  */
-	  remove_section = TRUE;
+	  remove_section = true;
 	}
       if (remove_section)
 	{
 	  o->flags |= SEC_EXCLUDE;
 	  bfd_section_list_remove (abfd, o);
 	  abfd->section_count--;
+	  sections_removed = true;
 	}
     }
+  if (sections_removed)
+    _bfd_fix_excluded_sec_syms (abfd, info);
 
   /* Count up the number of relocations we will output for each output
      section, so that we know the sizes of the reloc sections.  We
@@ -11916,7 +12455,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
   max_internal_reloc_count = 0;
   max_sym_count = 0;
   max_sym_shndx_count = 0;
-  merged = FALSE;
+  merged = false;
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       struct bfd_elf_section_data *esdo = elf_section_data (o);
@@ -11941,10 +12480,10 @@ bfd_elf_final_link (bfd *abfd, struct bf
 		 link.  This will normally be every section.  We need
 		 to do this so that we can identify any sections which
 		 the linker has decided to not include.  */
-	      sec->linker_mark = TRUE;
+	      sec->linker_mark = true;
 
 	      if (sec->flags & SEC_MERGE)
-		merged = TRUE;
+		merged = true;
 
 	      if (sec->rawsize > max_contents_size)
 		max_contents_size = sec->rawsize;
@@ -11971,8 +12510,10 @@ bfd_elf_final_link (bfd *abfd, struct bf
 		      && elf_symtab_shndx_list (sec->owner) != NULL)
 		    max_sym_shndx_count = sym_count;
 
-		  if (esdo->this_hdr.sh_type == SHT_REL
-		      || esdo->this_hdr.sh_type == SHT_RELA)
+		  esdi = elf_section_data (sec);
+
+		  if (esdi->this_hdr.sh_type == SHT_REL
+		      || esdi->this_hdr.sh_type == SHT_RELA)
 		    /* Some backends use reloc_count in relocation sections
 		       to count particular types of relocs.  Of course,
 		       reloc sections themselves can't have relocations.  */
@@ -11990,8 +12531,6 @@ bfd_elf_final_link (bfd *abfd, struct bf
 		  else if (bed->elf_backend_count_relocs)
 		    reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
 
-		  esdi = elf_section_data (sec);
-
 		  if ((sec->flags & SEC_RELOC) != 0)
 		    {
 		      size_t ext_size = 0;
@@ -12098,7 +12637,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	     later.  Use bfd_malloc since it will be freed by
 	     bfd_compress_section_contents.  */
 	  unsigned char *contents = esdo->this_hdr.contents;
-	  if ((o->flags & SEC_ELF_COMPRESS) == 0 || contents != NULL)
+	  if (contents != NULL)
 	    abort ();
 	  contents
 	    = (unsigned char *) bfd_malloc (esdo->this_hdr.sh_size);
@@ -12139,7 +12678,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
     {
       file_ptr off = elf_next_file_pos (abfd);
 
-      _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
+      _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
 
       /* Note that at this point elf_next_file_pos (abfd) is
 	 incorrect.  We do not yet know the size of the .symtab section.
@@ -12157,33 +12696,49 @@ bfd_elf_final_link (bfd *abfd, struct bf
 				     bfd_und_section_ptr, NULL) != 1)
 	goto error_return;
 
-      /* Output a symbol for each section.  We output these even if we are
-	 discarding local symbols, since they are used for relocs.  These
-	 symbols have no names.  We store the index of each one in the
-	 index field of the section, so that we can find it again when
-	 outputting relocs.  */
-
-      elfsym.st_size = 0;
-      elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
-      elfsym.st_other = 0;
-      elfsym.st_value = 0;
-      elfsym.st_target_internal = 0;
-      for (i = 1; i < elf_numsections (abfd); i++)
-	{
-	  o = bfd_section_from_elf_index (abfd, i);
-	  if (o != NULL)
-	    {
-	      o->target_index = bfd_get_symcount (abfd);
-	      elfsym.st_shndx = i;
-	      if (!bfd_link_relocatable (info))
-		elfsym.st_value = o->vma;
-	      if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym, o,
-					     NULL) != 1)
-		goto error_return;
+      /* Output a symbol for each section if asked or they are used for
+	 relocs.  These symbols usually have no names.  We store the
+	 index of each one in the index field of the section, so that
+	 we can find it again when outputting relocs.  */
+
+      if (bfd_keep_unused_section_symbols (abfd) || emit_relocs)
+	{
+	  bool name_local_sections
+	    = (bed->elf_backend_name_local_section_symbols
+	       && bed->elf_backend_name_local_section_symbols (abfd));
+	  const char *name = NULL;
+
+	  elfsym.st_size = 0;
+	  elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
+	  elfsym.st_other = 0;
+	  elfsym.st_value = 0;
+	  elfsym.st_target_internal = 0;
+	  for (i = 1; i < elf_numsections (abfd); i++)
+	    {
+	      o = bfd_section_from_elf_index (abfd, i);
+	      if (o != NULL)
+		{
+		  o->target_index = bfd_get_symcount (abfd);
+		  elfsym.st_shndx = i;
+		  if (!bfd_link_relocatable (info))
+		    elfsym.st_value = o->vma;
+		  if (name_local_sections)
+		    name = o->name;
+		  if (elf_link_output_symstrtab (&flinfo, name, &elfsym, o,
+						 NULL) != 1)
+		    goto error_return;
+		}
 	    }
 	}
     }
 
+  /* On some targets like Irix 5 the symbol split between local and global
+     ones recorded in the sh_info field needs to be done between section
+     and all other symbols.  */
+  if (bed->elf_backend_elfsym_local_is_section
+      && bed->elf_backend_elfsym_local_is_section (abfd))
+    symtab_hdr->sh_info = bfd_get_symcount (abfd);
+
   /* Allocate some memory to hold information read in from the input
      files.  */
   if (max_contents_size != 0)
@@ -12241,7 +12796,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
 
   if (htab->tls_sec)
     {
-      bfd_vma base, end = 0;
+      bfd_vma base, end = 0;  /* Both bytes.  */
       asection *sec;
 
       for (sec = htab->tls_sec;
@@ -12249,6 +12804,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	   sec = sec->next)
 	{
 	  bfd_size_type size = sec->size;
+	  unsigned int opb = bfd_octets_per_byte (abfd, sec);
 
 	  if (size == 0
 	      && (sec->flags & SEC_HAS_CONTENTS) == 0)
@@ -12256,9 +12812,9 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	      struct bfd_link_order *ord = sec->map_tail.link_order;
 
 	      if (ord != NULL)
-		size = ord->offset + ord->size;
+		size = ord->offset * opb + ord->size;
 	    }
-	  end = sec->vma + size;
+	  end = sec->vma + size / opb;
 	}
       base = htab->tls_sec->vma;
       /* Only align end of TLS section if static TLS doesn't have special
@@ -12268,15 +12824,16 @@ bfd_elf_final_link (bfd *abfd, struct bf
       htab->tls_size = end - base;
     }
 
-  /* Reorder SHF_LINK_ORDER sections.  */
-  for (o = abfd->sections; o != NULL; o = o->next)
-    {
-      if (!elf_fixup_link_order (abfd, o))
-	return FALSE;
-    }
-
   if (!_bfd_elf_fixup_eh_frame_hdr (info))
-    return FALSE;
+    return false;
+
+  /* Finish relative relocations here after regular symbol processing
+     is finished if DT_RELR is enabled.  */
+  if (info->enable_dt_relr
+      && bed->finish_relative_relocs
+      && !bed->finish_relative_relocs (info))
+    info->callbacks->einfo
+      (_("%F%P: %pB: failed to finish relative relocations\n"), abfd);
 
   /* Since ELF permits relocations to be against local symbols, we
      must have the local symbols available when we do the relocations.
@@ -12299,7 +12856,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
      know how bad the memory loss will be.  */
 
   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
-    sub->output_has_begun = FALSE;
+    sub->output_has_begun = false;
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       for (p = o->map_head.link_order; p != NULL; p = p->next)
@@ -12313,7 +12870,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
 		{
 		  if (! elf_link_input_bfd (&flinfo, sub))
 		    goto error_return;
-		  sub->output_has_begun = TRUE;
+		  sub->output_has_begun = true;
 		}
 	    }
 	  else if (p->type == bfd_section_reloc_link_order
@@ -12367,41 +12924,42 @@ bfd_elf_final_link (bfd *abfd, struct bf
   if (!info->reduce_memory_overheads)
     {
       for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
-	if (bfd_get_flavour (sub) == bfd_target_elf_flavour
-	    && elf_tdata (sub)->symbuf)
+	if (bfd_get_flavour (sub) == bfd_target_elf_flavour)
 	  {
 	    free (elf_tdata (sub)->symbuf);
 	    elf_tdata (sub)->symbuf = NULL;
 	  }
     }
 
+  ret = true;
+
   /* Output any global symbols that got converted to local in a
      version script or due to symbol visibility.  We do this in a
      separate step since ELF requires all local symbols to appear
      prior to any global symbols.  FIXME: We should only do this if
      some global symbols were, in fact, converted to become local.
      FIXME: Will this work correctly with the Irix 5 linker?  */
-  eoinfo.failed = FALSE;
+  eoinfo.failed = false;
   eoinfo.flinfo = &flinfo;
-  eoinfo.localsyms = TRUE;
-  eoinfo.file_sym_done = FALSE;
+  eoinfo.localsyms = true;
+  eoinfo.file_sym_done = false;
   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
   if (eoinfo.failed)
-    return FALSE;
+    {
+      ret = false;
+      goto return_local_hash_table;
+    }
 
   /* If backend needs to output some local symbols not present in the hash
      table, do it now.  */
-  if (bed->elf_backend_output_arch_local_syms
-      && (info->strip != strip_all || emit_relocs))
+  if (bed->elf_backend_output_arch_local_syms)
     {
-      typedef int (*out_sym_func)
-	(void *, const char *, Elf_Internal_Sym *, asection *,
-	 struct elf_link_hash_entry *);
-
       if (! ((*bed->elf_backend_output_arch_local_syms)
-	     (abfd, info, &flinfo,
-	      (out_sym_func) elf_link_output_symstrtab)))
-	return FALSE;
+	     (abfd, info, &flinfo, elf_link_output_symstrtab)))
+	{
+	  ret = false;
+	  goto return_local_hash_table;
+	}
     }
 
   /* That wrote out all the local symbols.  Finish up the symbol table
@@ -12410,7 +12968,8 @@ bfd_elf_final_link (bfd *abfd, struct bf
      converted to local in a version script.  */
 
   /* The sh_info field records the index of the first non local symbol.  */
-  symtab_hdr->sh_info = bfd_get_symcount (abfd);
+  if (!symtab_hdr->sh_info)
+    symtab_hdr->sh_info = bfd_get_symcount (abfd);
 
   if (dynamic
       && htab->dynsym != NULL
@@ -12447,9 +13006,18 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	      BFD_ASSERT (indx > 0);
 	      sym.st_shndx = indx;
 	      if (! check_dynsym (abfd, &sym))
-		return FALSE;
+		{
+		  ret = false;
+		  goto return_local_hash_table;
+		}
 	      sym.st_value = s->vma;
 	      dest = dynsym + dynindx * bed->s->sizeof_sym;
+
+	      /* Inform the linker of the addition of this symbol.  */
+
+	      if (info->callbacks->ctf_new_dynsym)
+		info->callbacks->ctf_new_dynsym (dynindx, &sym);
+
 	      bed->s->swap_symbol_out (abfd, &sym, dest, 0);
 	    }
 	}
@@ -12468,20 +13036,31 @@ bfd_elf_final_link (bfd *abfd, struct bf
 		 the original st_name with the dynstr_index.  */
 	      sym = e->isym;
 	      sym.st_other &= ~ELF_ST_VISIBILITY (-1);
+	      sym.st_shndx = SHN_UNDEF;
 
 	      s = bfd_section_from_elf_index (e->input_bfd,
 					      e->isym.st_shndx);
-	      if (s != NULL)
+	      if (s != NULL
+		  && s->output_section != NULL
+		  && elf_section_data (s->output_section) != NULL)
 		{
 		  sym.st_shndx =
 		    elf_section_data (s->output_section)->this_idx;
 		  if (! check_dynsym (abfd, &sym))
-		    return FALSE;
+		    {
+		      ret = false;
+		      goto return_local_hash_table;
+		    }
 		  sym.st_value = (s->output_section->vma
 				  + s->output_offset
 				  + e->isym.st_value);
 		}
 
+	      /* Inform the linker of the addition of this symbol.  */
+
+	      if (info->callbacks->ctf_new_dynsym)
+		info->callbacks->ctf_new_dynsym (e->dynindx, &sym);
+
 	      dest = dynsym + e->dynindx * bed->s->sizeof_sym;
 	      bed->s->swap_symbol_out (abfd, &sym, dest, 0);
 	    }
@@ -12489,26 +13068,27 @@ bfd_elf_final_link (bfd *abfd, struct bf
     }
 
   /* We get the global symbols from the hash table.  */
-  eoinfo.failed = FALSE;
-  eoinfo.localsyms = FALSE;
+  eoinfo.failed = false;
+  eoinfo.localsyms = false;
   eoinfo.flinfo = &flinfo;
   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
   if (eoinfo.failed)
-    return FALSE;
+    {
+      ret = false;
+      goto return_local_hash_table;
+    }
 
   /* If backend needs to output some symbols not present in the hash
      table, do it now.  */
   if (bed->elf_backend_output_arch_syms
       && (info->strip != strip_all || emit_relocs))
     {
-      typedef int (*out_sym_func)
-	(void *, const char *, Elf_Internal_Sym *, asection *,
-	 struct elf_link_hash_entry *);
-
       if (! ((*bed->elf_backend_output_arch_syms)
-	     (abfd, info, &flinfo,
-	      (out_sym_func) elf_link_output_symstrtab)))
-	return FALSE;
+	     (abfd, info, &flinfo, elf_link_output_symstrtab)))
+	{
+	  ret = false;
+	  goto return_local_hash_table;
+	}
     }
 
   /* Finalize the .strtab section.  */
@@ -12516,7 +13096,10 @@ bfd_elf_final_link (bfd *abfd, struct bf
 
   /* Swap out the .strtab section. */
   if (!elf_link_swap_symbols_out (&flinfo))
-    return FALSE;
+    {
+      ret = false;
+      goto return_local_hash_table;
+    }
 
   /* Now we know the size of the symtab section.  */
   if (bfd_get_symcount (abfd) > 0)
@@ -12539,11 +13122,14 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	      symtab_shndx_hdr->sh_size = amt;
 
 	      off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
-							       off, TRUE);
+							       off, true);
 
 	      if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
-		  || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
-		return FALSE;
+		  || (bfd_write (flinfo.symshndxbuf, amt, abfd) != amt))
+		{
+		  ret = false;
+		  goto return_local_hash_table;
+		}
 	    }
 	}
 
@@ -12560,26 +13146,30 @@ bfd_elf_final_link (bfd *abfd, struct bf
       symstrtab_hdr->sh_addralign = 1;
 
       off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr,
-						       off, TRUE);
+						       off, true);
       elf_next_file_pos (abfd) = off;
 
       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
 	  || ! _bfd_elf_strtab_emit (abfd, flinfo.symstrtab))
-	return FALSE;
+	{
+	  ret = false;
+	  goto return_local_hash_table;
+	}
     }
 
   if (info->out_implib_bfd && !elf_output_implib (abfd, info))
     {
       _bfd_error_handler (_("%pB: failed to generate import library"),
 			  info->out_implib_bfd);
-      return FALSE;
+      ret = false;
+      goto return_local_hash_table;
     }
 
   /* Adjust the relocs to have the correct symbol indices.  */
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       struct bfd_elf_section_data *esdo = elf_section_data (o);
-      bfd_boolean sort;
+      bool sort;
 
       if ((o->flags & SEC_RELOC) == 0)
 	continue;
@@ -12587,19 +13177,40 @@ bfd_elf_final_link (bfd *abfd, struct bf
       sort = bed->sort_relocs_p == NULL || (*bed->sort_relocs_p) (o);
       if (esdo->rel.hdr != NULL
 	  && !elf_link_adjust_relocs (abfd, o, &esdo->rel, sort, info))
-	return FALSE;
+	{
+	  ret = false;
+	  goto return_local_hash_table;
+	}
       if (esdo->rela.hdr != NULL
 	  && !elf_link_adjust_relocs (abfd, o, &esdo->rela, sort, info))
-	return FALSE;
+	{
+	  ret = false;
+	  goto return_local_hash_table;
+	}
 
       /* Set the reloc_count field to 0 to prevent write_relocs from
 	 trying to swap the relocs out itself.  */
       o->reloc_count = 0;
     }
 
+  relativecount = 0;
   if (dynamic && info->combreloc && dynobj != NULL)
     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
 
+  relr_entsize = 0;
+  if (htab->srelrdyn != NULL
+      && htab->srelrdyn->output_section != NULL
+      && htab->srelrdyn->size != 0)
+    {
+      asection *s = htab->srelrdyn->output_section;
+      relr_entsize = elf_section_data (s)->this_hdr.sh_entsize;
+      if (relr_entsize == 0)
+	{
+	  relr_entsize = bed->s->arch_size / 8;
+	  elf_section_data (s)->this_hdr.sh_entsize = relr_entsize;
+	}
+    }
+
   /* If we are linking against a dynamic object, or generating a
      shared library, finish up the dynamic linking information.  */
   if (dynamic)
@@ -12611,7 +13222,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
       BFD_ASSERT (o != NULL);
 
       dyncon = o->contents;
-      dynconend = o->contents + o->size;
+      dynconend = PTR_ADD (o->contents, o->size);
       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
 	{
 	  Elf_Internal_Dyn dyn;
@@ -12627,17 +13238,44 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	    default:
 	      continue;
 	    case DT_NULL:
-	      if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
+	      if (relativecount != 0)
 		{
 		  switch (elf_section_data (reldyn)->this_hdr.sh_type)
 		    {
 		    case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
 		    case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
-		    default: continue;
 		    }
-		  dyn.d_un.d_val = relativecount;
+		  if (dyn.d_tag != DT_NULL
+		      && dynconend - dyncon >= bed->s->sizeof_dyn)
+		    {
+		      dyn.d_un.d_val = relativecount;
+		      relativecount = 0;
+		      break;
+		    }
 		  relativecount = 0;
-		  break;
+		}
+	      if (relr_entsize != 0)
+		{
+		  if (dynconend - dyncon >= 3 * bed->s->sizeof_dyn)
+		    {
+		      asection *s = htab->srelrdyn;
+		      dyn.d_tag = DT_RELR;
+		      dyn.d_un.d_ptr
+			= s->output_section->vma + s->output_offset;
+		      bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
+		      dyncon += bed->s->sizeof_dyn;
+
+		      dyn.d_tag = DT_RELRSZ;
+		      dyn.d_un.d_val = s->size;
+		      bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
+		      dyncon += bed->s->sizeof_dyn;
+
+		      dyn.d_tag = DT_RELRENT;
+		      dyn.d_un.d_val = relr_entsize;
+		      relr_entsize = 0;
+		      break;
+		    }
+		  relr_entsize = 0;
 		}
 	      continue;
 
@@ -12650,7 +13288,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	      {
 		struct elf_link_hash_entry *h;
 
-		h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
+		h = elf_link_hash_lookup (htab, name, false, false, true);
 		if (h != NULL
 		    && (h->root.type == bfd_link_hash_defined
 			|| h->root.type == bfd_link_hash_defweak))
@@ -12771,6 +13409,8 @@ bfd_elf_final_link (bfd *abfd, struct bf
 
 	      if (bed->dtrel_excludes_plt && htab->srelplt != NULL)
 		{
+		  unsigned int opb = bfd_octets_per_byte (abfd, o);
+
 		  /* Don't count procedure linkage table relocs in the
 		     overall reloc count.  */
 		  sh_size -= htab->srelplt->size;
@@ -12790,7 +13430,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
 		  /* If .rela.plt is the first .rela section, exclude
 		     it from DT_RELA.  */
 		  else if (sh_addr == (htab->srelplt->output_section->vma
-				       + htab->srelplt->output_offset))
+				       + htab->srelplt->output_offset) * opb)
 		    sh_addr += htab->srelplt->size;
 		}
 
@@ -12811,9 +13451,9 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	goto error_return;
 
       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
-      if (((info->warn_shared_textrel && bfd_link_pic (info))
-	   || info->error_textrel)
-	  && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL)
+      if (bfd_link_textrel_check (info)
+	  && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL
+	  && o->size != 0)
 	{
 	  bfd_byte *dyncon, *dynconend;
 
@@ -12827,12 +13467,18 @@ bfd_elf_final_link (bfd *abfd, struct bf
 
 	      if (dyn.d_tag == DT_TEXTREL)
 		{
-		  if (info->error_textrel)
+		  if (info->textrel_check == textrel_check_error)
 		    info->callbacks->einfo
 		      (_("%P%X: read-only segment has dynamic relocations\n"));
+		  else if (bfd_link_dll (info))
+		    info->callbacks->einfo
+		      (_("%P: warning: creating DT_TEXTREL in a shared object\n"));
+		  else if (bfd_link_pde (info))
+		    info->callbacks->einfo
+		      (_("%P: warning: creating DT_TEXTREL in a PDE\n"));
 		  else
 		    info->callbacks->einfo
-		      (_("%P: warning: creating a DT_TEXTREL in a shared object\n"));
+		      (_("%P: warning: creating DT_TEXTREL in a PIE\n"));
 		  break;
 		}
 	    }
@@ -12878,7 +13524,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
 
   if (!info->resolve_section_groups)
     {
-      bfd_boolean failed = FALSE;
+      bool failed = false;
 
       BFD_ASSERT (bfd_link_relocatable (info));
       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
@@ -12896,6 +13542,9 @@ bfd_elf_final_link (bfd *abfd, struct bf
   if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
     goto error_return;
 
+  if (! _bfd_elf_write_section_sframe (abfd, info))
+    goto error_return;
+
   if (info->callbacks->emit_ctf)
       info->callbacks->emit_ctf ();
 
@@ -12905,22 +13554,30 @@ bfd_elf_final_link (bfd *abfd, struct bf
     {
       bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
       if (contents == NULL)
-	return FALSE;	/* Bail out and fail.  */
+	{
+	  /* Bail out and fail.  */
+	  ret = false;
+	  goto return_local_hash_table;
+	}
       bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
       bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
       free (contents);
     }
 
-  return TRUE;
+ return_local_hash_table:
+  if (info->unique_symbol)
+    bfd_hash_table_free (&flinfo.local_hash_table);
+  return ret;
 
  error_return:
   elf_final_link_free (abfd, &flinfo);
-  return FALSE;
+  ret = false;
+  goto return_local_hash_table;
 }
 
 /* Initialize COOKIE for input bfd ABFD.  */
 
-static bfd_boolean
+static bool
 init_reloc_cookie (struct elf_reloc_cookie *cookie,
 		   struct bfd_link_info *info, bfd *abfd)
 {
@@ -12958,12 +13615,16 @@ init_reloc_cookie (struct elf_reloc_cook
       if (cookie->locsyms == NULL)
 	{
 	  info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
-	  return FALSE;
+	  return false;
+	}
+      if (_bfd_link_keep_memory (info) )
+	{
+	  symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
+	  info->cache_size += (cookie->locsymcount
+			       * sizeof (Elf_External_Sym_Shndx));
 	}
-      if (info->keep_memory)
-	symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
     }
-  return TRUE;
+  return true;
 }
 
 /* Free the memory allocated by init_reloc_cookie, if appropriate.  */
@@ -12974,15 +13635,14 @@ fini_reloc_cookie (struct elf_reloc_cook
   Elf_Internal_Shdr *symtab_hdr;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
-  if (cookie->locsyms != NULL
-      && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
+  if (symtab_hdr->contents != (unsigned char *) cookie->locsyms)
     free (cookie->locsyms);
 }
 
 /* Initialize the relocation information in COOKIE for input section SEC
    of input bfd ABFD.  */
 
-static bfd_boolean
+static bool
 init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
 			struct bfd_link_info *info, bfd *abfd,
 			asection *sec)
@@ -12994,15 +13654,16 @@ init_reloc_cookie_rels (struct elf_reloc
     }
   else
     {
-      cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
-						info->keep_memory);
+      cookie->rels = _bfd_elf_link_info_read_relocs (abfd, info, sec,
+						     NULL, NULL,
+						     _bfd_link_keep_memory (info));
       if (cookie->rels == NULL)
-	return FALSE;
+	return false;
       cookie->rel = cookie->rels;
       cookie->relend = cookie->rels + sec->reloc_count;
     }
   cookie->rel = cookie->rels;
-  return TRUE;
+  return true;
 }
 
 /* Free the memory allocated by init_reloc_cookie_rels,
@@ -13012,13 +13673,13 @@ static void
 fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
 			asection *sec)
 {
-  if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
+  if (elf_section_data (sec)->relocs != cookie->rels)
     free (cookie->rels);
 }
 
 /* Initialize the whole of COOKIE for input section SEC.  */
 
-static bfd_boolean
+static bool
 init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
 			       struct bfd_link_info *info,
 			       asection *sec)
@@ -13027,12 +13688,12 @@ init_reloc_cookie_for_section (struct el
     goto error1;
   if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
     goto error2;
-  return TRUE;
+  return true;
 
  error2:
   fini_reloc_cookie (cookie, sec->owner);
  error1:
-  return FALSE;
+  return false;
 }
 
 /* Free the memory allocated by init_reloc_cookie_for_section,
@@ -13100,7 +13761,7 @@ elf_gc_mark_debug_section (asection *sec
       /* Return the local debug definition section.  */
       asection *isec = bfd_section_from_elf_index (sec->owner,
 						   sym->st_shndx);
-      if ((isec->flags & SEC_DEBUGGING) != 0)
+      if (isec != NULL && (isec->flags & SEC_DEBUGGING) != 0)
 	return isec;
     }
 
@@ -13115,10 +13776,10 @@ asection *
 _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
 		       elf_gc_mark_hook_fn gc_mark_hook,
 		       struct elf_reloc_cookie *cookie,
-		       bfd_boolean *start_stop)
+		       bool *start_stop)
 {
   unsigned long r_symndx;
-  struct elf_link_hash_entry *h;
+  struct elf_link_hash_entry *h, *hw;
 
   r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
   if (r_symndx == STN_UNDEF)
@@ -13127,6 +13788,8 @@ _bfd_elf_gc_mark_rsec (struct bfd_link_i
   if (r_symndx >= cookie->locsymcount
       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
     {
+      bool was_marked;
+
       h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
       if (h == NULL)
 	{
@@ -13137,23 +13800,32 @@ _bfd_elf_gc_mark_rsec (struct bfd_link_i
       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;
+
+      was_marked = h->mark;
       h->mark = 1;
-      /* If this symbol is weak and there is a non-weak definition, we
-	 keep the non-weak definition because many backends put
-	 dynamic reloc info on the non-weak definition for code
-	 handling copy relocs.  */
-      if (h->is_weakalias)
-	weakdef (h)->mark = 1;
+      /* Keep all aliases of the symbol too.  If an object symbol
+	 needs to be copied into .dynbss then all of its aliases
+	 should be present as dynamic symbols, not just the one used
+	 on the copy relocation.  */
+      hw = h;
+      while (hw->is_weakalias)
+	{
+	  hw = hw->u.alias;
+	  hw->mark = 1;
+	}
 
-      if (start_stop != NULL)
+      if (!was_marked && h->start_stop && !h->root.ldscript_def)
 	{
+	  if (info->start_stop_gc)
+	    return NULL;
+
 	  /* To work around a glibc bug, mark XXX input sections
 	     when there is a reference to __start_XXX or __stop_XXX
 	     symbols.  */
-	  if (h->start_stop)
+	  else if (start_stop != NULL)
 	    {
 	      asection *s = h->u2.start_stop_section;
-	      *start_stop = !s->gc_mark;
+	      *start_stop = true;
 	      return s;
 	    }
 	}
@@ -13169,14 +13841,14 @@ _bfd_elf_gc_mark_rsec (struct bfd_link_i
    a section we've decided to keep.  Mark the section that contains
    the relocation symbol.  */
 
-bfd_boolean
+bool
 _bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
 			asection *sec,
 			elf_gc_mark_hook_fn gc_mark_hook,
 			struct elf_reloc_cookie *cookie)
 {
   asection *rsec;
-  bfd_boolean start_stop = FALSE;
+  bool start_stop = false;
 
   rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie, &start_stop);
   while (rsec != NULL)
@@ -13187,25 +13859,25 @@ _bfd_elf_gc_mark_reloc (struct bfd_link_
 	      || (rsec->owner->flags & DYNAMIC) != 0)
 	    rsec->gc_mark = 1;
 	  else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
-	    return FALSE;
+	    return false;
 	}
       if (!start_stop)
 	break;
       rsec = bfd_get_next_section_by_name (rsec->owner, rsec);
     }
-  return TRUE;
+  return true;
 }
 
 /* The mark phase of garbage collection.  For a given section, mark
    it and any sections in this section's group, and all the sections
    which define symbols to which it refers.  */
 
-bfd_boolean
+bool
 _bfd_elf_gc_mark (struct bfd_link_info *info,
 		  asection *sec,
 		  elf_gc_mark_hook_fn gc_mark_hook)
 {
-  bfd_boolean ret;
+  bool ret;
   asection *group_sec, *eh_frame;
 
   sec->gc_mark = 1;
@@ -13214,10 +13886,10 @@ _bfd_elf_gc_mark (struct bfd_link_info *
   group_sec = elf_section_data (sec)->next_in_group;
   if (group_sec && !group_sec->gc_mark)
     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
-      return FALSE;
+      return false;
 
   /* Look through the section relocs.  */
-  ret = TRUE;
+  ret = true;
   eh_frame = elf_eh_frame_section (sec->owner);
   if ((sec->flags & SEC_RELOC) != 0
       && sec->reloc_count > 0
@@ -13226,13 +13898,13 @@ _bfd_elf_gc_mark (struct bfd_link_info *
       struct elf_reloc_cookie cookie;
 
       if (!init_reloc_cookie_for_section (&cookie, info, sec))
-	ret = FALSE;
+	ret = false;
       else
 	{
 	  for (; cookie.rel < cookie.relend; cookie.rel++)
 	    if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
 	      {
-		ret = FALSE;
+		ret = false;
 		break;
 	      }
 	  fini_reloc_cookie_for_section (&cookie, sec);
@@ -13244,12 +13916,12 @@ _bfd_elf_gc_mark (struct bfd_link_info *
       struct elf_reloc_cookie cookie;
 
       if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
-	ret = FALSE;
+	ret = false;
       else
 	{
 	  if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
 				      gc_mark_hook, &cookie))
-	    ret = FALSE;
+	    ret = false;
 	  fini_reloc_cookie_for_section (&cookie, eh_frame);
 	}
     }
@@ -13257,7 +13929,7 @@ _bfd_elf_gc_mark (struct bfd_link_info *
   eh_frame = elf_section_eh_frame_entry (sec);
   if (ret && eh_frame && !eh_frame->gc_mark)
     if (!_bfd_elf_gc_mark (info, eh_frame, gc_mark_hook))
-      ret = FALSE;
+      ret = false;
 
   return ret;
 }
@@ -13272,8 +13944,8 @@ _bfd_elf_gc_mark_debug_special_section_g
   /* Used to iterate the section group.  */
   asection *msec;
 
-  bfd_boolean is_special_grp = TRUE;
-  bfd_boolean is_debug_grp = TRUE;
+  bool is_special_grp = true;
+  bool is_debug_grp = true;
 
   /* First scan to see if group contains any section other than debug
      and special section.  */
@@ -13281,10 +13953,10 @@ _bfd_elf_gc_mark_debug_special_section_g
   do
     {
       if ((msec->flags & SEC_DEBUGGING) == 0)
-	is_debug_grp = FALSE;
+	is_debug_grp = false;
 
       if ((msec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) != 0)
-	is_special_grp = FALSE;
+	is_special_grp = false;
 
       msec = elf_next_in_group (msec);
     }
@@ -13305,18 +13977,18 @@ _bfd_elf_gc_mark_debug_special_section_g
 
 /* Keep debug and special sections.  */
 
-bfd_boolean
+bool
 _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
-				 elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED)
+				 elf_gc_mark_hook_fn mark_hook)
 {
   bfd *ibfd;
 
   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
     {
       asection *isec;
-      bfd_boolean some_kept;
-      bfd_boolean debug_frag_seen;
-      bfd_boolean has_kept_debug_info;
+      bool some_kept;
+      bool debug_frag_seen;
+      bool has_kept_debug_info;
 
       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
 	continue;
@@ -13327,7 +13999,7 @@ _bfd_elf_gc_mark_extra_sections (struct
       /* Ensure all linker created sections are kept,
 	 see if any other section is already marked,
 	 and note if we have any fragmented debug sections.  */
-      debug_frag_seen = some_kept = has_kept_debug_info = FALSE;
+      debug_frag_seen = some_kept = has_kept_debug_info = false;
       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
 	{
 	  if ((isec->flags & SEC_LINKER_CREATED) != 0)
@@ -13335,12 +14007,42 @@ _bfd_elf_gc_mark_extra_sections (struct
 	  else if (isec->gc_mark
 		   && (isec->flags & SEC_ALLOC) != 0
 		   && elf_section_type (isec) != SHT_NOTE)
-	    some_kept = TRUE;
+	    some_kept = true;
+	  else
+	    {
+	      /* Since all sections, except for backend specific ones,
+		 have been garbage collected, call mark_hook on this
+		 section if any of its linked-to sections is marked.  */
+	      asection *linked_to_sec;
+	      for (linked_to_sec = elf_linked_to_section (isec);
+		   linked_to_sec != NULL && !linked_to_sec->linker_mark;
+		   linked_to_sec = elf_linked_to_section (linked_to_sec))
+		{
+		  if (linked_to_sec->gc_mark)
+		    {
+		      if (!_bfd_elf_gc_mark (info, isec, mark_hook))
+			return false;
+		      break;
+		    }
+		  linked_to_sec->linker_mark = 1;
+		}
+	      for (linked_to_sec = elf_linked_to_section (isec);
+		   linked_to_sec != NULL && linked_to_sec->linker_mark;
+		   linked_to_sec = elf_linked_to_section (linked_to_sec))
+		linked_to_sec->linker_mark = 0;
+	    }
 
 	  if (!debug_frag_seen
 	      && (isec->flags & SEC_DEBUGGING)
-	      && CONST_STRNEQ (isec->name, ".debug_line."))
-	    debug_frag_seen = TRUE;
+	      && startswith (isec->name, ".debug_line."))
+	    debug_frag_seen = true;
+	  else if (strcmp (bfd_section_name (isec),
+			   "__patchable_function_entries") == 0
+		   && elf_linked_to_section (isec) == NULL)
+	      info->callbacks->einfo (_("%F%P: %pB(%pA): error: "
+					"need linked-to section "
+					"for --gc-sections\n"),
+				      isec->owner, isec);
 	}
 
       /* If no non-note alloc section in this file will be kept, then
@@ -13350,17 +14052,19 @@ _bfd_elf_gc_mark_extra_sections (struct
 
       /* Keep debug and special sections like .comment when they are
 	 not part of a group.  Also keep section groups that contain
-	 just debug sections or special sections.  */
+	 just debug sections or special sections.  NB: Sections with
+	 linked-to section has been handled above.  */
       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
 	{
 	  if ((isec->flags & SEC_GROUP) != 0)
 	    _bfd_elf_gc_mark_debug_special_section_group (isec);
 	  else if (((isec->flags & SEC_DEBUGGING) != 0
 		    || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
-		   && elf_next_in_group (isec) == NULL)
+		   && elf_next_in_group (isec) == NULL
+		   && elf_linked_to_section (isec) == NULL)
 	    isec->gc_mark = 1;
 	  if (isec->gc_mark && (isec->flags & SEC_DEBUGGING) != 0)
-	    has_kept_debug_info = TRUE;
+	    has_kept_debug_info = true;
 	}
 
       /* Look for CODE sections which are going to be discarded,
@@ -13404,12 +14108,12 @@ _bfd_elf_gc_mark_extra_sections (struct
 	      && (isec->flags & SEC_DEBUGGING) != 0)
 	    if (!_bfd_elf_gc_mark (info, isec,
 				   elf_gc_mark_debug_section))
-	      return FALSE;
+	      return false;
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
 {
   bfd *sub;
@@ -13457,28 +14161,28 @@ elf_gc_sweep (bfd *abfd, struct bfd_link
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Propagate collected vtable information.  This is called through
    elf_link_hash_traverse.  */
 
-static bfd_boolean
+static bool
 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
 {
   /* Those that are not vtables.  */
   if (h->start_stop
       || h->u2.vtable == NULL
       || h->u2.vtable->parent == NULL)
-    return TRUE;
+    return true;
 
   /* Those vtables that do not have parents, we cannot merge.  */
   if (h->u2.vtable->parent == (struct elf_link_hash_entry *) -1)
-    return TRUE;
+    return true;
 
   /* If we've already been done, exit.  */
   if (h->u2.vtable->used && h->u2.vtable->used[-1])
-    return TRUE;
+    return true;
 
   /* Make sure the parent's table is up to date.  */
   elf_gc_propagate_vtable_entries_used (h->u2.vtable->parent, okp);
@@ -13493,11 +14197,11 @@ elf_gc_propagate_vtable_entries_used (st
   else
     {
       size_t n;
-      bfd_boolean *cu, *pu;
+      bool *cu, *pu;
 
       /* Or the parent's entries into ours.  */
       cu = h->u2.vtable->used;
-      cu[-1] = TRUE;
+      cu[-1] = true;
       pu = h->u2.vtable->parent->u2.vtable->used;
       if (pu != NULL)
 	{
@@ -13510,31 +14214,39 @@ elf_gc_propagate_vtable_entries_used (st
 	  while (n--)
 	    {
 	      if (*pu)
-		*cu = TRUE;
+		*cu = true;
 	      pu++;
 	      cu++;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
-elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
+struct link_info_ok
+{
+  struct bfd_link_info *info;
+  bool ok;
+};
+
+static bool
+elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h,
+				    void *ptr)
 {
   asection *sec;
   bfd_vma hstart, hend;
   Elf_Internal_Rela *relstart, *relend, *rel;
   const struct elf_backend_data *bed;
   unsigned int log_file_align;
+  struct link_info_ok *info = (struct link_info_ok *) ptr;
 
   /* Take care of both those symbols that do not describe vtables as
      well as those that are not loaded.  */
   if (h->start_stop
       || h->u2.vtable == NULL
       || h->u2.vtable->parent == NULL)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (h->root.type == bfd_link_hash_defined
 	      || h->root.type == bfd_link_hash_defweak);
@@ -13543,9 +14255,10 @@ elf_gc_smash_unused_vtentry_relocs (stru
   hstart = h->root.u.def.value;
   hend = hstart + h->size;
 
-  relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
+  relstart = _bfd_elf_link_info_read_relocs (sec->owner, info->info,
+					     sec, NULL, NULL, true);
   if (!relstart)
-    return *(bfd_boolean *) okp = FALSE;
+    return info->ok = false;
   bed = get_elf_backend_data (sec->owner);
   log_file_align = bed->s->log_file_align;
 
@@ -13566,14 +14279,14 @@ elf_gc_smash_unused_vtentry_relocs (stru
 	rel->r_offset = rel->r_info = rel->r_addend = 0;
       }
 
-  return TRUE;
+  return true;
 }
 
 /* Mark sections containing dynamically referenced symbols.  When
    building shared libraries, we must assume that any visible symbol is
    referenced.  */
 
-bfd_boolean
+bool
 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) inf;
@@ -13581,6 +14294,9 @@ bfd_elf_gc_mark_dynamic_ref_symbol (stru
 
   if ((h->root.type == bfd_link_hash_defined
        || h->root.type == bfd_link_hash_defweak)
+      && (!h->start_stop
+	  || h->root.ldscript_def
+	  || !info->start_stop_gc)
       && ((h->ref_dynamic && !h->forced_local)
 	  || ((h->def_regular || ELF_COMMON_DEF_P (h))
 	      && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
@@ -13596,7 +14312,7 @@ bfd_elf_gc_mark_dynamic_ref_symbol (stru
 					       h->root.root.string)))))
     h->root.u.def.section->flags |= SEC_KEEP;
 
-  return TRUE;
+  return true;
 }
 
 /* Keep all sections containing symbols undefined on the command-line,
@@ -13612,18 +14328,17 @@ _bfd_elf_gc_keep (struct bfd_link_info *
       struct elf_link_hash_entry *h;
 
       h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
-				FALSE, FALSE, FALSE);
+				false, false, false);
 
       if (h != NULL
 	  && (h->root.type == bfd_link_hash_defined
 	      || h->root.type == bfd_link_hash_defweak)
-	  && !bfd_is_abs_section (h->root.u.def.section)
-	  && !bfd_is_und_section (h->root.u.def.section))
+	  && !bfd_is_const_section (h->root.u.def.section))
 	h->root.u.def.section->flags |= SEC_KEEP;
     }
 }
 
-bfd_boolean
+bool
 bfd_elf_parse_eh_frame_entries (bfd *abfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info)
 {
@@ -13641,11 +14356,11 @@ bfd_elf_parse_eh_frame_entries (bfd *abf
 	continue;
 
       if (!init_reloc_cookie (&cookie, info, ibfd))
-	return FALSE;
+	return false;
 
       for (sec = ibfd->sections; sec; sec = sec->next)
 	{
-	  if (CONST_STRNEQ (bfd_section_name (sec), ".eh_frame_entry")
+	  if (startswith (bfd_section_name (sec), ".eh_frame_entry")
 	      && init_reloc_cookie_rels (&cookie, info, ibfd, sec))
 	    {
 	      _bfd_elf_parse_eh_frame_entry (info, sec, &cookie);
@@ -13653,25 +14368,26 @@ bfd_elf_parse_eh_frame_entries (bfd *abf
 	    }
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Do mark and sweep of unused sections.  */
 
-bfd_boolean
+bool
 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
 {
-  bfd_boolean ok = TRUE;
+  bool ok = true;
   bfd *sub;
   elf_gc_mark_hook_fn gc_mark_hook;
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
   struct elf_link_hash_table *htab;
+  struct link_info_ok info_ok;
 
   if (!bed->can_gc_sections
       || !is_elf_hash_table (info->hash))
     {
       _bfd_error_handler(_("warning: gc-sections option ignored"));
-      return TRUE;
+      return true;
     }
 
   bed->gc_keep (info);
@@ -13704,12 +14420,14 @@ bfd_elf_gc_sections (bfd *abfd, struct b
   /* Apply transitive closure to the vtable entry usage info.  */
   elf_link_hash_traverse (htab, elf_gc_propagate_vtable_entries_used, &ok);
   if (!ok)
-    return FALSE;
+    return false;
 
   /* Kill the vtable relocations that were not used.  */
-  elf_link_hash_traverse (htab, elf_gc_smash_unused_vtentry_relocs, &ok);
-  if (!ok)
-    return FALSE;
+  info_ok.info = info;
+  info_ok.ok = true;
+  elf_link_hash_traverse (htab, elf_gc_smash_unused_vtentry_relocs, &info_ok);
+  if (!info_ok.ok)
+    return false;
 
   /* Mark dynamically referenced symbols.  */
   if (htab->dynamic_sections_created || info->gc_keep_exported)
@@ -13746,10 +14464,13 @@ bfd_elf_gc_sections (bfd *abfd, struct b
 			|| (elf_section_data (o)->this_hdr.sh_type
 			    == SHT_FINI_ARRAY)))
 		|| (elf_section_data (o)->this_hdr.sh_type == SHT_NOTE
-		    && elf_next_in_group (o) == NULL )))
+		    && elf_next_in_group (o) == NULL
+		    && elf_linked_to_section (o) == NULL)
+		|| ((elf_tdata (sub)->has_gnu_osabi & elf_gnu_osabi_retain)
+		    && (elf_section_flags (o) & SHF_GNU_RETAIN))))
 	  {
 	    if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
-	      return FALSE;
+	      return false;
 	  }
     }
 
@@ -13762,7 +14483,7 @@ bfd_elf_gc_sections (bfd *abfd, struct b
 
 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
 
-bfd_boolean
+bool
 bfd_elf_gc_record_vtinherit (bfd *abfd,
 			     asection *sec,
 			     struct elf_link_hash_entry *h,
@@ -13781,7 +14502,7 @@ bfd_elf_gc_record_vtinherit (bfd *abfd,
     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
 
   sym_hashes = elf_sym_hashes (abfd);
-  sym_hashes_end = sym_hashes + extsymcount;
+  sym_hashes_end = PTR_ADD (sym_hashes, extsymcount);
 
   /* Hunt down the child symbol, which is in this section at the same
      offset as the relocation.  */
@@ -13799,7 +14520,7 @@ bfd_elf_gc_record_vtinherit (bfd *abfd,
   _bfd_error_handler (_("%pB: %pA+%#" PRIx64 ": no symbol found for INHERIT"),
 		      abfd, sec, (uint64_t) offset);
   bfd_set_error (bfd_error_invalid_operation);
-  return FALSE;
+  return false;
 
  win:
   if (!child->u2.vtable)
@@ -13807,7 +14528,7 @@ bfd_elf_gc_record_vtinherit (bfd *abfd,
       child->u2.vtable = ((struct elf_link_virtual_table_entry *)
 			  bfd_zalloc (abfd, sizeof (*child->u2.vtable)));
       if (!child->u2.vtable)
-	return FALSE;
+	return false;
     }
   if (!h)
     {
@@ -13821,12 +14542,12 @@ bfd_elf_gc_record_vtinherit (bfd *abfd,
   else
     child->u2.vtable->parent = h;
 
-  return TRUE;
+  return true;
 }
 
 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
 
-bfd_boolean
+bool
 bfd_elf_gc_record_vtentry (bfd *abfd, asection *sec,
 			   struct elf_link_hash_entry *h,
 			   bfd_vma addend)
@@ -13840,7 +14561,7 @@ bfd_elf_gc_record_vtentry (bfd *abfd, as
       _bfd_error_handler (_("%pB: section '%pA': corrupt VTENTRY entry"),
 			  abfd, sec);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   if (!h->u2.vtable)
@@ -13848,13 +14569,13 @@ bfd_elf_gc_record_vtentry (bfd *abfd, as
       h->u2.vtable = ((struct elf_link_virtual_table_entry *)
 		      bfd_zalloc (abfd, sizeof (*h->u2.vtable)));
       if (!h->u2.vtable)
-	return FALSE;
+	return false;
     }
 
   if (addend >= h->u2.vtable->size)
     {
       size_t size, bytes, file_align;
-      bfd_boolean *ptr = h->u2.vtable->used;
+      bool *ptr = h->u2.vtable->used;
 
       /* While the symbol is undefined, we have to be prepared to handle
 	 a zero size.  */
@@ -13875,35 +14596,35 @@ bfd_elf_gc_record_vtentry (bfd *abfd, as
 
       /* Allocate one extra entry for use as a "done" flag for the
 	 consolidation pass.  */
-      bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
+      bytes = ((size >> log_file_align) + 1) * sizeof (bool);
 
       if (ptr)
 	{
-	  ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
+	  ptr = (bool *) bfd_realloc (ptr - 1, bytes);
 
 	  if (ptr != NULL)
 	    {
 	      size_t oldbytes;
 
 	      oldbytes = (((h->u2.vtable->size >> log_file_align) + 1)
-			  * sizeof (bfd_boolean));
+			  * sizeof (bool));
 	      memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
 	    }
 	}
       else
-	ptr = (bfd_boolean *) bfd_zmalloc (bytes);
+	ptr = (bool *) bfd_zmalloc (bytes);
 
       if (ptr == NULL)
-	return FALSE;
+	return false;
 
       /* And arrange for that done flag to be at index -1.  */
       h->u2.vtable->used = ptr + 1;
       h->u2.vtable->size = size;
     }
 
-  h->u2.vtable->used[addend >> log_file_align] = TRUE;
+  h->u2.vtable->used[addend >> log_file_align] = true;
 
-  return TRUE;
+  return true;
 }
 
 /* Map an ELF section header flag to its corresponding string.  */
@@ -13913,7 +14634,7 @@ typedef struct
   flagword flag_value;
 } elf_flags_to_name_table;
 
-static elf_flags_to_name_table elf_flags_to_names [] =
+static const elf_flags_to_name_table elf_flags_to_names [] =
 {
   { "SHF_WRITE", SHF_WRITE },
   { "SHF_ALLOC", SHF_ALLOC },
@@ -13930,7 +14651,7 @@ static elf_flags_to_name_table elf_flags
 };
 
 /* Returns TRUE if the section is to be included, otherwise FALSE.  */
-bfd_boolean
+bool
 bfd_elf_lookup_section_flags (struct bfd_link_info *info,
 			      struct flag_info *flaginfo,
 			      asection *section)
@@ -13961,7 +14682,7 @@ bfd_elf_lookup_section_flags (struct bfd
 		    with_hex |= hexval;
 		  else if (tf->with == without_flags)
 		    without_hex |= hexval;
-		  tf->valid = TRUE;
+		  tf->valid = true;
 		  continue;
 		}
 	    }
@@ -13973,7 +14694,7 @@ bfd_elf_lookup_section_flags (struct bfd
 		    with_hex |= elf_flags_to_names[i].flag_value;
 		  else if (tf->with == without_flags)
 		    without_hex |= elf_flags_to_names[i].flag_value;
-		  tf->valid = TRUE;
+		  tf->valid = true;
 		  break;
 		}
 	    }
@@ -13981,21 +14702,21 @@ bfd_elf_lookup_section_flags (struct bfd
 	    {
 	      info->callbacks->einfo
 		(_("unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
-	      return FALSE;
+	      return false;
 	    }
 	}
-      flaginfo->flags_initialized = TRUE;
+      flaginfo->flags_initialized = true;
       flaginfo->only_with_flags |= with_hex;
       flaginfo->not_with_flags |= without_hex;
     }
 
   if ((flaginfo->only_with_flags & sh_flags) != flaginfo->only_with_flags)
-    return FALSE;
+    return false;
 
   if ((flaginfo->not_with_flags & sh_flags) != 0)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 struct alloc_got_off_arg {
@@ -14006,7 +14727,7 @@ struct alloc_got_off_arg {
 /* We need a special top-level link routine to convert got reference counts
    to real got offsets.  */
 
-static bfd_boolean
+static bool
 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
 {
   struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
@@ -14021,13 +14742,13 @@ elf_gc_allocate_got_offsets (struct elf_
   else
     h->got.offset = (bfd_vma) -1;
 
-  return TRUE;
+  return true;
 }
 
 /* And an accompanying bit to work out final got entry offsets once
    we're done.  Should be called from final_link.  */
 
-bfd_boolean
+bool
 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
 					struct bfd_link_info *info)
 {
@@ -14039,7 +14760,7 @@ bfd_elf_gc_common_finalize_got_offsets (
   BFD_ASSERT (abfd == info->output_bfd);
 
   if (! is_elf_hash_table (info->hash))
-    return FALSE;
+    return false;
 
   /* The GOT offset is relative to the .got section, but the GOT header is
      put into the .got.plt section, if the backend uses it.  */
@@ -14087,23 +14808,23 @@ bfd_elf_gc_common_finalize_got_offsets (
   elf_link_hash_traverse (elf_hash_table (info),
 			  elf_gc_allocate_got_offsets,
 			  &gofarg);
-  return TRUE;
+  return true;
 }
 
 /* Many folk need no more in the way of final link than this, once
    got entry reference counting is enabled.  */
 
-bfd_boolean
+bool
 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
-    return FALSE;
+    return false;
 
   /* Invoke the regular ELF backend linker to do all the work.  */
   return bfd_elf_final_link (abfd, info);
 }
 
-bfd_boolean
+bool
 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
 {
   struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
@@ -14117,13 +14838,13 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma
 
       if (! rcookie->bad_symtab)
 	if (rcookie->rel->r_offset > offset)
-	  return FALSE;
+	  return false;
       if (rcookie->rel->r_offset != offset)
 	continue;
 
       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
       if (r_symndx == STN_UNDEF)
-	return TRUE;
+	return true;
 
       if (r_symndx >= rcookie->locsymcount
 	  || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
@@ -14141,7 +14862,7 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma
 	      && (h->root.u.def.section->owner != rcookie->abfd
 		  || h->root.u.def.section->kept_section != NULL
 		  || discarded_section (h->root.u.def.section)))
-	    return TRUE;
+	    return true;
 	}
       else
 	{
@@ -14157,11 +14878,11 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma
 	  if (isec != NULL
 	      && (isec->kept_section != NULL
 		  || discarded_section (isec)))
-	    return TRUE;
+	    return true;
 	}
-      return FALSE;
+      return false;
     }
-  return FALSE;
+  return false;
 }
 
 /* Discard unneeded references to discarded sections.
@@ -14217,7 +14938,7 @@ bfd_elf_discard_info (bfd *output_bfd, s
     {
       asection *i;
       int eh_changed = 0;
-      unsigned int eh_alignment;
+      unsigned int eh_alignment;  /* Octets.  */
 
       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
 	{
@@ -14244,7 +14965,8 @@ bfd_elf_discard_info (bfd *output_bfd, s
 	  fini_reloc_cookie_for_section (&cookie, i);
 	}
 
-      eh_alignment = 1 << o->alignment_power;
+      eh_alignment = ((1 << o->alignment_power)
+		      * bfd_octets_per_byte (output_bfd, o));
       /* Skip over zero terminator, and prevent empty sections from
 	 adding alignment padding at the end.  */
       for (i = o->map_tail.s; i != NULL; i = i->map_tail.s)
@@ -14278,6 +15000,41 @@ bfd_elf_discard_info (bfd *output_bfd, s
 				_bfd_elf_adjust_eh_frame_global_symbol, NULL);
     }
 
+  o = bfd_get_section_by_name (output_bfd, ".sframe");
+  if (o != NULL)
+    {
+      asection *i;
+
+      for (i = o->map_head.s; i != NULL; i = i->map_head.s)
+	{
+	  if (i->size == 0)
+	    continue;
+
+	  abfd = i->owner;
+	  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+	    continue;
+
+	  if (!init_reloc_cookie_for_section (&cookie, info, i))
+	    return -1;
+
+	  if (_bfd_elf_parse_sframe (abfd, info, i, &cookie))
+	    {
+	      if (_bfd_elf_discard_section_sframe (i,
+						   bfd_elf_reloc_symbol_deleted_p,
+						   &cookie))
+		{
+		  if (i->size != i->rawsize)
+		    changed = 1;
+		}
+	    }
+	  fini_reloc_cookie_for_section (&cookie, i);
+	}
+      /* Update the reference to the output .sframe section.  Used to
+	 determine later if PT_GNU_SFRAME segment is to be generated.  */
+      if (!_bfd_elf_set_section_sframe (output_bfd, info))
+	return -1;
+    }
+
   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
     {
       const struct elf_backend_data *bed;
@@ -14308,13 +15065,13 @@ bfd_elf_discard_info (bfd *output_bfd, s
 
   if (info->eh_frame_hdr_type
       && !bfd_link_relocatable (info)
-      && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
+      && _bfd_elf_discard_section_eh_frame_hdr (info))
     changed = 1;
 
   return changed;
 }
 
-bfd_boolean
+bool
 _bfd_elf_section_already_linked (bfd *abfd,
 				 asection *sec,
 				 struct bfd_link_info *info)
@@ -14325,19 +15082,19 @@ _bfd_elf_section_already_linked (bfd *ab
   struct bfd_section_already_linked_hash_entry *already_linked_list;
 
   if (sec->output_section == bfd_abs_section_ptr)
-    return FALSE;
+    return false;
 
   flags = sec->flags;
 
   /* Return if it isn't a linkonce section.  A comdat group section
      also has SEC_LINK_ONCE set.  */
   if ((flags & SEC_LINK_ONCE) == 0)
-    return FALSE;
+    return false;
 
   /* Don't put group member sections on our list of already linked
      sections.  They are handled as a group via their group section.  */
   if (elf_sec_group (sec) != NULL)
-    return FALSE;
+    return false;
 
   /* For a SHT_GROUP section, use the group signature as the key.  */
   name = sec->name;
@@ -14348,7 +15105,7 @@ _bfd_elf_section_already_linked (bfd *ab
   else
     {
       /* Otherwise we should have a .gnu.linkonce.<type>.<key> section.  */
-      if (CONST_STRNEQ (name, ".gnu.linkonce.")
+      if (startswith (name, ".gnu.linkonce.")
 	  && (key = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
 	key++;
       else
@@ -14371,12 +15128,13 @@ _bfd_elf_section_already_linked (bfd *ab
       if (((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
 	   && ((flags & SEC_GROUP) != 0
 	       || strcmp (name, l->sec->name) == 0))
-	  || (l->sec->owner->flags & BFD_PLUGIN) != 0)
+	  || (l->sec->owner->flags & BFD_PLUGIN) != 0
+	  || (sec->owner->flags & BFD_PLUGIN) != 0)
 	{
 	  /* The section has already been linked.  See if we should
 	     issue a warning.  */
 	  if (!_bfd_handle_already_linked (sec, l, info))
-	    return FALSE;
+	    return false;
 
 	  if (flags & SEC_GROUP)
 	    {
@@ -14395,7 +15153,7 @@ _bfd_elf_section_already_linked (bfd *ab
 		}
 	    }
 
-	  return TRUE;
+	  return true;
 	}
     }
 
@@ -14446,10 +15204,10 @@ _bfd_elf_section_already_linked (bfd *ab
      `.gnu.linkonce.r.F' section.  The order of sections in a bfd does not
      matter as here were are looking only for cross-bfd sections.  */
 
-  if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
+  if ((flags & SEC_GROUP) == 0 && startswith (name, ".gnu.linkonce.r."))
     for (l = already_linked_list->entry; l != NULL; l = l->next)
       if ((l->sec->flags & SEC_GROUP) == 0
-	  && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
+	  && startswith (l->sec->name, ".gnu.linkonce.t."))
 	{
 	  if (abfd != l->sec->owner)
 	    sec->output_section = bfd_abs_section_ptr;
@@ -14462,7 +15220,7 @@ _bfd_elf_section_already_linked (bfd *ab
   return sec->output_section == bfd_abs_section_ptr;
 }
 
-bfd_boolean
+bool
 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
 {
   return sym->st_shndx == SHN_COMMON;
@@ -14498,7 +15256,7 @@ _bfd_elf_default_got_elt_size (bfd *abfd
 static const char *
 get_dynamic_reloc_section_name (bfd *       abfd,
 				asection *  sec,
-				bfd_boolean is_rela)
+				bool is_rela)
 {
   char *name;
   const char *old_name = bfd_section_name (sec);
@@ -14519,15 +15277,15 @@ get_dynamic_reloc_section_name (bfd *
    of IS_RELA.  */
 
 asection *
-_bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
-				    asection *  sec,
-				    bfd_boolean is_rela)
+_bfd_elf_get_dynamic_reloc_section (bfd *abfd,
+				    asection *sec,
+				    bool is_rela)
 {
-  asection * reloc_sec = elf_section_data (sec)->sreloc;
+  asection *reloc_sec = elf_section_data (sec)->sreloc;
 
   if (reloc_sec == NULL)
     {
-      const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
+      const char *name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
 
       if (name != NULL)
 	{
@@ -14556,7 +15314,7 @@ _bfd_elf_make_dynamic_reloc_section (ase
 				     bfd *dynobj,
 				     unsigned int alignment,
 				     bfd *abfd,
-				     bfd_boolean is_rela)
+				     bool is_rela)
 {
   asection * reloc_sec = elf_section_data (sec)->sreloc;
 
@@ -14612,7 +15370,7 @@ _bfd_elf_copy_link_hash_symbol_type (bfd
   ehdest->target_internal = ehsrc->target_internal;
 
   isym.st_other = ehsrc->other;
-  elf_merge_st_other (abfd, ehdest, &isym, NULL, TRUE, FALSE);
+  elf_merge_st_other (abfd, ehdest, isym.st_other, NULL, true, false);
 }
 
 /* Append a RELA relocation REL to section S in BFD.  */
@@ -14646,13 +15404,18 @@ bfd_elf_define_start_stop (struct bfd_li
   struct elf_link_hash_entry *h;
 
   h = elf_link_hash_lookup (elf_hash_table (info), symbol,
-			    FALSE, FALSE, TRUE);
+			    false, false, true);
+  /* NB: Common symbols will be turned into definition later.  */
   if (h != NULL
+      && !h->root.ldscript_def
       && (h->root.type == bfd_link_hash_undefined
 	  || h->root.type == bfd_link_hash_undefweak
-	  || ((h->ref_regular || h->def_dynamic) && !h->def_regular)))
+	  || ((h->ref_regular || h->def_dynamic)
+	      && !h->def_regular
+	      && h->root.type != bfd_link_hash_common)))
     {
-      bfd_boolean was_dynamic = h->ref_dynamic || h->def_dynamic;
+      bool was_dynamic = h->ref_dynamic || h->def_dynamic;
+      h->verinfo.verdef = NULL;
       h->root.type = bfd_link_hash_defined;
       h->root.u.def.section = sec;
       h->root.u.def.value = 0;
@@ -14665,12 +15428,13 @@ bfd_elf_define_start_stop (struct bfd_li
 	  /* .startof. and .sizeof. symbols are local.  */
 	  const struct elf_backend_data *bed;
 	  bed = get_elf_backend_data (info->output_bfd);
-	  (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+	  (*bed->elf_backend_hide_symbol) (info, h, true);
 	}
       else
 	{
 	  if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
-	    h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_PROTECTED;
+	    h->other = ((h->other & ~ELF_ST_VISIBILITY (-1))
+			| info->start_stop_visibility);
 	  if (was_dynamic)
 	    bfd_elf_link_record_dynamic_symbol (info, h);
 	}
@@ -14678,3 +15442,147 @@ bfd_elf_define_start_stop (struct bfd_li
     }
   return NULL;
 }
+
+/* Find dynamic relocs for H that apply to read-only sections.  */
+
+asection *
+_bfd_elf_readonly_dynrelocs (struct elf_link_hash_entry *h)
+{
+  struct elf_dyn_relocs *p;
+
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
+    {
+      asection *s = p->sec->output_section;
+
+      if (s != NULL && (s->flags & SEC_READONLY) != 0)
+	return p->sec;
+    }
+  return NULL;
+}
+
+/* Set DF_TEXTREL if we find any dynamic relocs that apply to
+   read-only sections.  */
+
+bool
+_bfd_elf_maybe_set_textrel (struct elf_link_hash_entry *h, void *inf)
+{
+  asection *sec;
+
+  if (h->root.type == bfd_link_hash_indirect)
+    return true;
+
+  sec = _bfd_elf_readonly_dynrelocs (h);
+  if (sec != NULL)
+    {
+      struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+      info->flags |= DF_TEXTREL;
+      /* xgettext:c-format */
+      info->callbacks->minfo (_("%pB: dynamic relocation against `%pT' "
+				"in read-only section `%pA'\n"),
+			      sec->owner, h->root.root.string, sec);
+
+      if (bfd_link_textrel_check (info))
+	/* xgettext:c-format */
+	info->callbacks->einfo (_("%P: %pB: warning: relocation against `%s' "
+				  "in read-only section `%pA'\n"),
+				sec->owner, h->root.root.string, sec);
+
+      /* Not an error, just cut short the traversal.  */
+      return false;
+    }
+  return true;
+}
+
+/* Add dynamic tags.  */
+
+bool
+_bfd_elf_add_dynamic_tags (bfd *output_bfd, struct bfd_link_info *info,
+			   bool need_dynamic_reloc)
+{
+  struct elf_link_hash_table *htab = elf_hash_table (info);
+
+  if (htab->dynamic_sections_created)
+    {
+      /* Add some entries to the .dynamic section.  We fill in the
+	 values later, in finish_dynamic_sections, but we must add
+	 the entries now so that we get the correct size for the
+	 .dynamic section.  The DT_DEBUG entry is filled in by the
+	 dynamic linker and used by the debugger.  */
+#define add_dynamic_entry(TAG, VAL) \
+  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
+
+      const struct elf_backend_data *bed
+	= get_elf_backend_data (output_bfd);
+
+      if (bfd_link_executable (info))
+	{
+	  if (!add_dynamic_entry (DT_DEBUG, 0))
+	    return false;
+	}
+
+      if (htab->dt_pltgot_required || htab->splt->size != 0)
+	{
+	  /* DT_PLTGOT is used by prelink even if there is no PLT
+	     relocation.  */
+	  if (!add_dynamic_entry (DT_PLTGOT, 0))
+	    return false;
+	}
+
+      if (htab->dt_jmprel_required || htab->srelplt->size != 0)
+	{
+	  if (!add_dynamic_entry (DT_PLTRELSZ, 0)
+	      || !add_dynamic_entry (DT_PLTREL,
+				     (bed->rela_plts_and_copies_p
+				      ? DT_RELA : DT_REL))
+	      || !add_dynamic_entry (DT_JMPREL, 0))
+	    return false;
+	}
+
+      if (htab->tlsdesc_plt
+	  && (!add_dynamic_entry (DT_TLSDESC_PLT, 0)
+	      || !add_dynamic_entry (DT_TLSDESC_GOT, 0)))
+	return false;
+
+      if (need_dynamic_reloc)
+	{
+	  if (bed->rela_plts_and_copies_p)
+	    {
+	      if (!add_dynamic_entry (DT_RELA, 0)
+		  || !add_dynamic_entry (DT_RELASZ, 0)
+		  || !add_dynamic_entry (DT_RELAENT,
+					 bed->s->sizeof_rela))
+		return false;
+	    }
+	  else
+	    {
+	      if (!add_dynamic_entry (DT_REL, 0)
+		  || !add_dynamic_entry (DT_RELSZ, 0)
+		  || !add_dynamic_entry (DT_RELENT,
+					 bed->s->sizeof_rel))
+		return false;
+	    }
+
+	  /* If any dynamic relocs apply to a read-only section,
+	     then we need a DT_TEXTREL entry.  */
+	  if ((info->flags & DF_TEXTREL) == 0)
+	    elf_link_hash_traverse (htab, _bfd_elf_maybe_set_textrel,
+				    info);
+
+	  if ((info->flags & DF_TEXTREL) != 0)
+	    {
+	      if (htab->ifunc_resolvers)
+		info->callbacks->einfo
+		  (_("%P: warning: GNU indirect functions with DT_TEXTREL "
+		     "may result in a segfault at runtime; recompile with %s\n"),
+		   bfd_link_dll (info) ? "-fPIC" : "-fPIE");
+
+	      if (!add_dynamic_entry (DT_TEXTREL, 0))
+		return false;
+	    }
+	}
+    }
+#undef add_dynamic_entry
+
+  return true;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-linker-x86.h ./bfd/elf-linker-x86.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-linker-x86.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-linker-x86.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* x86-specific ELF linker support between ld and bfd.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,22 +18,19 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-/* Missing IBT and SHSTK property report control.  */
-enum elf_x86_cet_report
+/* Missing IBT, SHSTK and LAM property report control.  */
+enum elf_x86_prop_report
 {
-  cet_report_none	= 0,	    /* Do nothing.  */
-  cet_report_warning	= 1 << 0,   /* Issue a warning.  */
-  cet_report_error	= 1 << 1,   /* Issue an error.  */
-  cet_report_ibt	= 1 << 2,   /* Report missing IBT property.  */
-  cet_report_shstk	= 1 << 3    /* Report missing SHSTK property.  */
+  prop_report_none	= 0,	    /* Do nothing.  */
+  prop_report_warning	= 1 << 0,   /* Issue a warning.  */
+  prop_report_error	= 1 << 1,   /* Issue an error.  */
+  prop_report_ibt	= 1 << 2,   /* Report missing IBT property.  */
+  prop_report_shstk	= 1 << 3    /* Report missing SHSTK property.  */
 };
 
 /* Used to pass x86-specific linker options from ld to bfd.  */
 struct elf_linker_x86_params
 {
-  /* TRUE if BND prefix in PLT entries is always generated.  */
-  unsigned int bndplt: 1;
-
   /* TRUE if IBT-enabled PLT entries should be generated.  */
   unsigned int ibtplt: 1;
 
@@ -43,14 +40,41 @@ struct elf_linker_x86_params
   /* TRUE if GNU_PROPERTY_X86_FEATURE_1_SHSTK should be generated.  */
   unsigned int shstk: 1;
 
+  /* TRUE if GNU_PROPERTY_X86_FEATURE_1_LAM_U48 should be generated.  */
+  unsigned int lam_u48: 1;
+
+  /* TRUE if GNU_PROPERTY_X86_FEATURE_1_LAM_U57 should be generated.  */
+  unsigned int lam_u57: 1;
+
   /* TRUE if we shouldn't check relocation overflow.  */
   unsigned int no_reloc_overflow_check: 1;
 
   /* TRUE if generate a 1-byte NOP as suffix for x86 call instruction.  */
   unsigned int call_nop_as_suffix : 1;
 
+  /* TRUE if -static is passed at command-line before all input files.  */
+  unsigned int static_before_all_inputs : 1;
+
+  /* TRUE if --dynamic-linker is passed at command-line.  */
+  unsigned int has_dynamic_linker : 1;
+
+  /* Report relative relocations.  */
+  unsigned int report_relative_reloc : 1;
+
+  /* Mark PLT with dynamic tags.  */
+  unsigned int mark_plt : 1;
+
+  /* X86-64 ISA level needed.  */
+  unsigned int isa_level;
+
   /* Report missing IBT and SHSTK properties.  */
-  enum elf_x86_cet_report cet_report;
+  enum elf_x86_prop_report cet_report;
+
+  /* Report missing LAM_U48 property.  */
+  enum elf_x86_prop_report lam_u48_report;
+
+  /* Report missing LAM_U57 property.  */
+  enum elf_x86_prop_report lam_u57_report;
 
   /* The 1-byte NOP for x86 call instruction.  */
   char call_nop_byte;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-linux-core.h ./bfd/elf-linux-core.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-linux-core.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-linux-core.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Definitions for PRPSINFO structures under ELF on GNU/Linux.
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-m10200.c ./bfd/elf-m10200.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-m10200.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-m10200.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Matsushita 10200 specific support for 32-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -23,9 +23,9 @@
 #include "libbfd.h"
 #include "elf-bfd.h"
 
-static bfd_boolean
+static bool
 mn10200_elf_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
-static bfd_boolean
+static bool
 mn10200_elf_symbol_address_p (bfd *, asection *, Elf_Internal_Sym *, bfd_vma);
 
 enum reloc_type
@@ -46,116 +46,116 @@ static reloc_howto_type elf_mn10200_howt
   /* Dummy relocation.  Does nothing.  */
   HOWTO (R_MN10200_NONE,
 	 0,
-	 3,
 	 0,
-	 FALSE,
+	 0,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_MN10200_NONE",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 FALSE),
+	 false),
   /* Standard 32 bit reloc.  */
   HOWTO (R_MN10200_32,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10200_32",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
   /* Standard 16 bit reloc.  */
   HOWTO (R_MN10200_16,
 	 0,
-	 1,
+	 2,
 	 16,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10200_16",
-	 FALSE,
+	 false,
 	 0xffff,
 	 0xffff,
-	 FALSE),
+	 false),
   /* Standard 8 bit reloc.  */
   HOWTO (R_MN10200_8,
 	 0,
-	 0,
+	 1,
 	 8,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10200_8",
-	 FALSE,
+	 false,
 	 0xff,
 	 0xff,
-	 FALSE),
+	 false),
   /* Standard 24 bit reloc.  */
   HOWTO (R_MN10200_24,
 	 0,
-	 2,
+	 4,
 	 24,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10200_24",
-	 FALSE,
+	 false,
 	 0xffffff,
 	 0xffffff,
-	 FALSE),
+	 false),
   /* Simple 8 pc-relative reloc.  */
   HOWTO (R_MN10200_PCREL8,
 	 0,
-	 0,
+	 1,
 	 8,
-	 TRUE,
+	 true,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10200_PCREL8",
-	 FALSE,
+	 false,
 	 0xff,
 	 0xff,
-	 TRUE),
+	 true),
   /* Simple 16 pc-relative reloc.  */
   HOWTO (R_MN10200_PCREL16,
 	 0,
-	 1,
+	 2,
 	 16,
-	 TRUE,
+	 true,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10200_PCREL16",
-	 FALSE,
+	 false,
 	 0xffff,
 	 0xffff,
-	 TRUE),
+	 true),
   /* Simple 32bit pc-relative reloc with a 1 byte adjustment
      to get the pc-relative offset correct.  */
   HOWTO (R_MN10200_PCREL24,
 	 0,
-	 2,
+	 4,
 	 24,
-	 TRUE,
+	 true,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10200_PCREL24",
-	 FALSE,
+	 false,
 	 0xffffff,
 	 0xffffff,
-	 TRUE),
+	 true),
 };
 
 struct mn10200_reloc_map
@@ -212,7 +212,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an MN10200 ELF reloc.  */
 
-static bfd_boolean
+static bool
 mn10200_info_to_howto (bfd *abfd,
 		       arelent *cache_ptr,
 		       Elf_Internal_Rela *dst)
@@ -226,7 +226,7 @@ mn10200_info_to_howto (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   cache_ptr->howto = &elf_mn10200_howto_table[r_type];
@@ -335,7 +335,7 @@ mn10200_elf_final_link_relocate (reloc_h
 }
 
 /* Relocate an MN10200 ELF section.  */
-static bfd_boolean
+static int
 mn10200_elf_relocate_section (bfd *output_bfd,
 			      struct bfd_link_info *info,
 			      bfd *input_bfd,
@@ -380,7 +380,7 @@ mn10200_elf_relocate_section (bfd *outpu
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc, warned, ignored;
+	  bool unresolved_reloc, warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -427,7 +427,7 @@ mn10200_elf_relocate_section (bfd *outpu
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol) (info, name, input_bfd,
 						    input_section,
-						    rel->r_offset, TRUE);
+						    rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -454,12 +454,12 @@ mn10200_elf_relocate_section (bfd *outpu
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 mn10200_elf_relax_delete_bytes (bfd *abfd, asection *sec,
 				bfd_vma addr, int count)
 {
@@ -526,7 +526,7 @@ mn10200_elf_relax_delete_bytes (bfd *abf
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function handles relaxing for the mn10200.
@@ -558,11 +558,11 @@ mn10200_elf_relax_delete_bytes (bfd *abf
 	We don't handle imm16->imm8 or d16->d8 as they're very rare
 	and somewhat more difficult to support.  */
 
-static bfd_boolean
+static bool
 mn10200_elf_relax_section (bfd *abfd,
 			   asection *sec,
 			   struct bfd_link_info *link_info,
-			   bfd_boolean *again)
+			   bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -571,16 +571,17 @@ mn10200_elf_relax_section (bfd *abfd,
   Elf_Internal_Sym *isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -730,7 +731,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -777,7 +778,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -795,14 +796,8 @@ mn10200_elf_relax_section (bfd *abfd,
       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10200_PCREL8)
 	{
 	  Elf_Internal_Rela *nrel;
-	  bfd_vma value = symval;
 	  unsigned char code;
 
-	  /* Deal with pc-relative gunk.  */
-	  value -= (sec->output_section->vma + sec->output_offset);
-	  value -= (irel->r_offset + 1);
-	  value += irel->r_addend;
-
 	  /* Do nothing if this reloc is the last byte in the section.  */
 	  if (irel->r_offset == sec->size)
 	    continue;
@@ -930,7 +925,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
 	  /* That will change things, so, we should relax again.
 	     Note that this is not required, and it may be slow.  */
-	  *again = TRUE;
+	  *again = true;
 	}
 
       /* Try to turn a 24bit immediate, displacement or absolute address
@@ -993,7 +988,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
 		  /* That will change things, so, we should relax again.
 		     Note that this is not required, and it may be slow.  */
-		  *again = TRUE;
+		  *again = true;
 		  break;
 
 		/* mov imm24,an -> mov imm16,an
@@ -1044,7 +1039,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
 		  /* That will change things, so, we should relax again.
 		     Note that this is not required, and it may be slow.  */
-		  *again = TRUE;
+		  *again = true;
 		  break;
 
 		/* cmp imm24,dn -> cmp imm16,dn
@@ -1145,7 +1140,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
 		  /* That will change things, so, we should relax again.
 		     Note that this is not required, and it may be slow.  */
-		  *again = TRUE;
+		  *again = true;
 		  break;
 
 		/* movb (abs24),dn ->movbu (abs16),dn extxb bn */
@@ -1176,7 +1171,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
 		  /* That will change things, so, we should relax again.
 		     Note that this is not required, and it may be slow.  */
-		  *again = TRUE;
+		  *again = true;
 		  break;
 		}
 	    }
@@ -1207,29 +1202,25 @@ mn10200_elf_relax_section (bfd *abfd,
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 /* Return TRUE if a symbol exists at the given address, else return
    FALSE.  */
-static bfd_boolean
+static bool
 mn10200_elf_symbol_address_p (bfd *abfd,
 			      asection *sec,
 			      Elf_Internal_Sym *isym,
@@ -1250,7 +1241,7 @@ mn10200_elf_symbol_address_p (bfd *abfd,
     {
       if (isym->st_shndx == sec_shndx
 	  && isym->st_value == addr)
-	return TRUE;
+	return true;
     }
 
   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
@@ -1264,10 +1255,10 @@ mn10200_elf_symbol_address_p (bfd *abfd,
 	   || sym_hash->root.type == bfd_link_hash_defweak)
 	  && sym_hash->root.u.def.section == sec
 	  && sym_hash->root.u.def.value == addr)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* This is a version of bfd_generic_get_relocated_section_contents
@@ -1278,7 +1269,7 @@ mn10200_elf_get_relocated_section_conten
 					    struct bfd_link_info *link_info,
 					    struct bfd_link_order *link_order,
 					    bfd_byte *data,
-					    bfd_boolean relocatable,
+					    bool relocatable,
 					    asymbol **symbols)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -1299,6 +1290,13 @@ mn10200_elf_get_relocated_section_conten
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
 
+  bfd_byte *orig_data = data;
+  if (data == NULL)
+    {
+      data = bfd_malloc (input_section->size);
+      if (data == NULL)
+	return NULL;
+    }
   memcpy (data, elf_section_data (input_section)->this_hdr.contents,
 	  (size_t) input_section->size);
 
@@ -1312,7 +1310,7 @@ mn10200_elf_get_relocated_section_conten
 
       internal_relocs = (_bfd_elf_link_read_relocs
 			 (input_bfd, input_section, NULL,
-			  (Elf_Internal_Rela *) NULL, FALSE));
+			  (Elf_Internal_Rela *) NULL, false));
       if (internal_relocs == NULL)
 	goto error_return;
 
@@ -1355,10 +1353,8 @@ mn10200_elf_get_relocated_section_conten
 				     isymbuf, sections))
 	goto error_return;
 
-      if (sections != NULL)
-	free (sections);
-      if (isymbuf != NULL
-	  && symtab_hdr->contents != (unsigned char *) isymbuf)
+      free (sections);
+      if (symtab_hdr->contents != (unsigned char *) isymbuf)
 	free (isymbuf);
       if (elf_section_data (input_section)->relocs != internal_relocs)
 	free (internal_relocs);
@@ -1367,14 +1363,13 @@ mn10200_elf_get_relocated_section_conten
   return data;
 
  error_return:
-  if (sections != NULL)
-    free (sections);
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  free (sections);
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (input_section)->relocs != internal_relocs)
+  if (elf_section_data (input_section)->relocs != internal_relocs)
     free (internal_relocs);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-m10300.c ./bfd/elf-m10300.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-m10300.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-m10300.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Matsushita 10300 specific support for 32-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -128,13 +128,14 @@ struct elf_mn10300_obj_tdata
 /* Get the MN10300 ELF linker hash table from a link_info structure.  */
 
 #define elf32_mn10300_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == MN10300_ELF_DATA ? ((struct elf32_mn10300_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == MN10300_ELF_DATA)	\
+   ? (struct elf32_mn10300_link_hash_table *) (p)->hash : NULL)
 
 #define elf32_mn10300_link_hash_traverse(table, func, info)		\
   (elf_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
     (info)))
 
 static reloc_howto_type elf_mn10300_howto_table[] =
@@ -142,495 +143,495 @@ static reloc_howto_type elf_mn10300_howt
   /* Dummy relocation.  Does nothing.  */
   HOWTO (R_MN10300_NONE,
 	 0,
-	 3,
 	 0,
-	 FALSE,
+	 0,
+	 false,
 	 0,
 	 complain_overflow_dont,
 	 bfd_elf_generic_reloc,
 	 "R_MN10300_NONE",
-	 FALSE,
+	 false,
 	 0,
 	 0,
-	 FALSE),
+	 false),
   /* Standard 32 bit reloc.  */
   HOWTO (R_MN10300_32,
 	 0,
-	 2,
+	 4,
 	 32,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10300_32",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 FALSE),
+	 false),
   /* Standard 16 bit reloc.  */
   HOWTO (R_MN10300_16,
 	 0,
-	 1,
+	 2,
 	 16,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10300_16",
-	 FALSE,
+	 false,
 	 0xffff,
 	 0xffff,
-	 FALSE),
+	 false),
   /* Standard 8 bit reloc.  */
   HOWTO (R_MN10300_8,
 	 0,
-	 0,
+	 1,
 	 8,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10300_8",
-	 FALSE,
+	 false,
 	 0xff,
 	 0xff,
-	 FALSE),
+	 false),
   /* Standard 32bit pc-relative reloc.  */
   HOWTO (R_MN10300_PCREL32,
 	 0,
-	 2,
+	 4,
 	 32,
-	 TRUE,
+	 true,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10300_PCREL32",
-	 FALSE,
+	 false,
 	 0xffffffff,
 	 0xffffffff,
-	 TRUE),
+	 true),
   /* Standard 16bit pc-relative reloc.  */
   HOWTO (R_MN10300_PCREL16,
 	 0,
-	 1,
+	 2,
 	 16,
-	 TRUE,
+	 true,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10300_PCREL16",
-	 FALSE,
+	 false,
 	 0xffff,
 	 0xffff,
-	 TRUE),
+	 true),
   /* Standard 8 pc-relative reloc.  */
   HOWTO (R_MN10300_PCREL8,
 	 0,
-	 0,
+	 1,
 	 8,
-	 TRUE,
+	 true,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10300_PCREL8",
-	 FALSE,
+	 false,
 	 0xff,
 	 0xff,
-	 TRUE),
+	 true),
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_MN10300_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_MN10300_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_MN10300_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_MN10300_GNU_VTENTRY", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Standard 24 bit reloc.  */
   HOWTO (R_MN10300_24,
 	 0,
-	 2,
+	 4,
 	 24,
-	 FALSE,
+	 false,
 	 0,
 	 complain_overflow_bitfield,
 	 bfd_elf_generic_reloc,
 	 "R_MN10300_24",
-	 FALSE,
+	 false,
 	 0xffffff,
 	 0xffffff,
-	 FALSE),
+	 false),
   HOWTO (R_MN10300_GOTPC32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_GOTPC32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MN10300_GOTPC16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_GOTPC16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MN10300_GOTOFF32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_GOTOFF32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_GOTOFF24,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_GOTOFF24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffff,		/* src_mask */
 	 0xffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_GOTOFF16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_GOTOFF16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_PLT32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_PLT32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MN10300_PLT16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_PLT16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MN10300_GOT32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_GOT32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_GOT24,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 24,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_GOT24",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_GOT16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_GOT16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_COPY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_JMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_TLS_GD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_TLS_GD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_TLS_LD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_TLS_LD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_TLS_LDO,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_TLS_LDO",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_TLS_GOTIE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_TLS_GOTIE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_TLS_IE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_TLS_IE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_TLS_LE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_TLS_LE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_TLS_DTPMOD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_TLS_DTPMOD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_TLS_DTPOFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_TLS_DTPOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_TLS_TPOFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* */
 	 "R_MN10300_TLS_TPOFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_SYM_DIFF,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 NULL,			/* special handler.  */
 	 "R_MN10300_SYM_DIFF",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MN10300_ALIGN,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 NULL,			/* special handler.  */
 	 "R_MN10300_ALIGN",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE)			/* pcrel_offset */
+	 false)			/* pcrel_offset */
 };
 
 struct mn10300_reloc_map
@@ -680,7 +681,7 @@ static const struct mn10300_reloc_map mn
 
 /* Create the GOT section.  */
 
-static bfd_boolean
+static bool
 _bfd_mn10300_elf_create_got_section (bfd * abfd,
 				     struct bfd_link_info * info)
 {
@@ -695,7 +696,7 @@ _bfd_mn10300_elf_create_got_section (bfd
   /* This function may be called more than once.  */
   htab = elf_hash_table (info);
   if (htab->sgot != NULL)
-    return TRUE;
+    return true;
 
   switch (bed->s->arch_size)
     {
@@ -709,7 +710,7 @@ _bfd_mn10300_elf_create_got_section (bfd
 
     default:
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
@@ -726,7 +727,7 @@ _bfd_mn10300_elf_create_got_section (bfd
   htab->splt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
 
   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
      .plt section.  */
@@ -736,14 +737,14 @@ _bfd_mn10300_elf_create_got_section (bfd
 				       "_PROCEDURE_LINKAGE_TABLE_");
       htab->hplt = h;
       if (h == NULL)
-	return FALSE;
+	return false;
     }
 
   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   htab->sgot = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
   if (bed->want_got_plt)
     {
@@ -751,7 +752,7 @@ _bfd_mn10300_elf_create_got_section (bfd
       htab->sgotplt = s;
       if (s == NULL
 	  || !bfd_set_section_alignment (s, ptralign))
-	return FALSE;
+	return false;
     }
 
   /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
@@ -761,12 +762,12 @@ _bfd_mn10300_elf_create_got_section (bfd
   h = _bfd_elf_define_linkage_sym (abfd, info, s, "_GLOBAL_OFFSET_TABLE_");
   htab->hgot = h;
   if (h == NULL)
-    return FALSE;
+    return false;
 
   /* The first bit of the global offset table is the header.  */
   s->size += bed->got_header_size;
 
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type *
@@ -798,7 +799,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 
 /* Set the howto pointer for an MN10300 ELF reloc.  */
 
-static bfd_boolean
+static bool
 mn10300_info_to_howto (bfd *abfd,
 		       arelent *cache_ptr,
 		       Elf_Internal_Rela *dst)
@@ -812,10 +813,10 @@ mn10300_info_to_howto (bfd *abfd,
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
   cache_ptr->howto = elf_mn10300_howto_table + r_type;
-  return TRUE;
+  return true;
 }
 
 static int
@@ -823,9 +824,9 @@ elf_mn10300_tls_transition (struct bfd_l
 			    int				  r_type,
 			    struct elf_link_hash_entry *  h,
 			    asection *			  sec,
-			    bfd_boolean			  counting)
+			    bool			  counting)
 {
-  bfd_boolean is_local;
+  bool is_local;
 
   if (r_type == R_MN10300_TLS_GD
       && h != NULL
@@ -839,7 +840,7 @@ elf_mn10300_tls_transition (struct bfd_l
     return r_type;
 
   if (! counting && h != NULL && ! elf_hash_table (info)->dynamic_sections_created)
-    is_local = TRUE;
+    is_local = true;
   else
     is_local = SYMBOL_CALLS_LOCAL (info, h);
 
@@ -1040,14 +1041,14 @@ mn10300_do_tls_transition (bfd *	 input_
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 mn10300_elf_check_relocs (bfd *abfd,
 			  struct bfd_link_info *info,
 			  asection *sec,
 			  const Elf_Internal_Rela *relocs)
 {
   struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
-  bfd_boolean sym_diff_reloc_seen;
+  bool sym_diff_reloc_seen;
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Sym * isymbuf = NULL;
   struct elf_link_hash_entry **sym_hashes;
@@ -1058,14 +1059,14 @@ mn10300_elf_check_relocs (bfd *abfd,
   asection * sgot;
   asection * srelgot;
   asection * sreloc;
-  bfd_boolean result = FALSE;
+  bool result = false;
 
   sgot    = NULL;
   srelgot = NULL;
   sreloc  = NULL;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
@@ -1074,7 +1075,7 @@ mn10300_elf_check_relocs (bfd *abfd,
   dynobj = elf_hash_table (info)->dynobj;
   local_got_offsets = elf_local_got_offsets (abfd);
   rel_end = relocs + sec->reloc_count;
-  sym_diff_reloc_seen = FALSE;
+  sym_diff_reloc_seen = false;
 
   for (rel = relocs; rel < rel_end; rel++)
     {
@@ -1095,7 +1096,7 @@ mn10300_elf_check_relocs (bfd *abfd,
 	}
 
       r_type = ELF32_R_TYPE (rel->r_info);
-      r_type = elf_mn10300_tls_transition (info, r_type, h, sec, TRUE);
+      r_type = elf_mn10300_tls_transition (info, r_type, h, sec, true);
 
       /* Some relocs require a global offset table.  */
       if (dynobj == NULL)
@@ -1300,7 +1301,7 @@ mn10300_elf_check_relocs (bfd *abfd,
 	  break;
 
 	case R_MN10300_SYM_DIFF:
-	  sym_diff_reloc_seen = TRUE;
+	  sym_diff_reloc_seen = true;
 	  break;
 
 	case R_MN10300_32:
@@ -1354,7 +1355,7 @@ mn10300_elf_check_relocs (bfd *abfd,
 		  if (sreloc == NULL)
 		    {
 		      sreloc = _bfd_elf_make_dynamic_reloc_section
-			(sec, dynobj, 2, abfd, /*rela?*/ TRUE);
+			(sec, dynobj, 2, abfd, /*rela?*/ true);
 		      if (sreloc == NULL)
 			goto fail;
 		    }
@@ -1367,12 +1368,12 @@ mn10300_elf_check_relocs (bfd *abfd,
 	}
 
       if (ELF32_R_TYPE (rel->r_info) != R_MN10300_SYM_DIFF)
-	sym_diff_reloc_seen = FALSE;
+	sym_diff_reloc_seen = false;
     }
 
-  result = TRUE;
+  result = true;
  fail:
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
 
   return result;
@@ -1419,7 +1420,7 @@ mn10300_elf_final_link_relocate (reloc_h
   struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
   static asection *  sym_diff_section;
   static bfd_vma     sym_diff_value;
-  bfd_boolean is_sym_diff_reloc;
+  bool is_sym_diff_reloc;
   unsigned long r_type = howto->type;
   bfd_byte * hit_data = contents + offset;
   bfd *      dynobj;
@@ -1462,7 +1463,7 @@ mn10300_elf_final_link_relocate (reloc_h
 	return bfd_reloc_dangerous;
     }
 
-  is_sym_diff_reloc = FALSE;
+  is_sym_diff_reloc = false;
   if (sym_diff_section != NULL)
     {
       BFD_ASSERT (sym_diff_section == input_section);
@@ -1486,7 +1487,7 @@ mn10300_elf_final_link_relocate (reloc_h
 	      && strcmp (input_section->name, ".debug_loc") == 0)
 	    value = 1;
 	  sym_diff_section = NULL;
-	  is_sym_diff_reloc = TRUE;
+	  is_sym_diff_reloc = true;
 	  break;
 
 	default:
@@ -1525,7 +1526,7 @@ mn10300_elf_final_link_relocate (reloc_h
 	  && (input_section->flags & SEC_ALLOC) != 0)
 	{
 	  Elf_Internal_Rela outrel;
-	  bfd_boolean skip, relocate;
+	  bool skip, relocate;
 
 	  /* When generating a shared object, these relocations are
 	     copied into the output file to be resolved at run
@@ -1533,17 +1534,17 @@ mn10300_elf_final_link_relocate (reloc_h
 	  if (sreloc == NULL)
 	    {
 	      sreloc = _bfd_elf_get_dynamic_reloc_section
-		(input_bfd, input_section, /*rela?*/ TRUE);
+		(input_bfd, input_section, /*rela?*/ true);
 	      if (sreloc == NULL)
-		return FALSE;
+		return false;
 	    }
 
-	  skip = FALSE;
+	  skip = false;
 
 	  outrel.r_offset = _bfd_elf_section_offset (input_bfd, info,
 						     input_section, offset);
 	  if (outrel.r_offset == (bfd_vma) -1)
-	    skip = TRUE;
+	    skip = true;
 
 	  outrel.r_offset += (input_section->output_section->vma
 			      + input_section->output_offset);
@@ -1551,7 +1552,7 @@ mn10300_elf_final_link_relocate (reloc_h
 	  if (skip)
 	    {
 	      memset (&outrel, 0, sizeof outrel);
-	      relocate = FALSE;
+	      relocate = false;
 	    }
 	  else
 	    {
@@ -1560,14 +1561,14 @@ mn10300_elf_final_link_relocate (reloc_h
 	      if (h == NULL
 		  || SYMBOL_REFERENCES_LOCAL (info, h))
 		{
-		  relocate = TRUE;
+		  relocate = true;
 		  outrel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
 		  outrel.r_addend = value + addend;
 		}
 	      else
 		{
 		  BFD_ASSERT (h->dynindx != -1);
-		  relocate = FALSE;
+		  relocate = false;
 		  outrel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_32);
 		  outrel.r_addend = value + addend;
 		}
@@ -1962,7 +1963,7 @@ mn10300_elf_final_link_relocate (reloc_h
 
 /* Relocate an MN10300 ELF section.  */
 
-static bfd_boolean
+static int
 mn10300_elf_relocate_section (bfd *output_bfd,
 			      struct bfd_link_info *info,
 			      bfd *input_bfd,
@@ -1993,8 +1994,8 @@ mn10300_elf_relocate_section (bfd *outpu
       bfd_vma relocation;
       bfd_reloc_status_type r;
       int tls_r_type;
-      bfd_boolean unresolved_reloc = FALSE;
-      bfd_boolean warned, ignored;
+      bool unresolved_reloc = false;
+      bool warned, ignored;
       struct elf_link_hash_entry * hh;
 
       relocation = 0;
@@ -2024,7 +2025,7 @@ mn10300_elf_relocate_section (bfd *outpu
       tls_r_type = elf_mn10300_tls_transition (info, r_type, hh, input_section, 0);
       if (tls_r_type != r_type)
 	{
-	  bfd_boolean had_plt;
+	  bool had_plt;
 
 	  had_plt = mn10300_do_tls_transition (input_bfd, r_type, tls_r_type,
 					       contents, rel->r_offset);
@@ -2066,12 +2067,12 @@ mn10300_elf_relocate_section (bfd *outpu
 		      && elf_hash_table (info)->dynamic_sections_created
 		      && !SYMBOL_REFERENCES_LOCAL (info, hh))
 		  || (r_type == R_MN10300_32
+		      && !SYMBOL_REFERENCES_LOCAL (info, hh)
 		      /* _32 relocs in executables force _COPY relocs,
 			 such that the address of the symbol ends up
 			 being local.  */
-		      && !bfd_link_executable (info)
-		      && !SYMBOL_REFERENCES_LOCAL (info, hh)
-		      && ((input_section->flags & SEC_ALLOC) != 0
+		      && (((input_section->flags & SEC_ALLOC) != 0
+			   && !bfd_link_executable (info))
 			  /* DWARF will emit R_MN10300_32 relocations
 			     in its sections against symbols defined
 			     externally in shared libraries.  We can't
@@ -2138,7 +2139,7 @@ mn10300_elf_relocate_section (bfd *outpu
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -2169,17 +2170,17 @@ mn10300_elf_relocate_section (bfd *outpu
 	    common_error:
 	      _bfd_error_handler (msg, input_bfd, name);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish initializing one hash table entry.  */
 
-static bfd_boolean
+static bool
 elf32_mn10300_finish_hash_table_entry (struct bfd_hash_entry *gen_entry,
 				       void * in_args)
 {
@@ -2192,7 +2193,7 @@ elf32_mn10300_finish_hash_table_entry (s
   /* If we already know we want to convert "call" to "calls" for calls
      to this symbol, then return now.  */
   if (entry->flags == MN10300_CONVERT_CALL_TO_CALLS)
-    return TRUE;
+    return true;
 
   /* If there are no named calls to this symbol, or there's nothing we
      can move from the function itself into the "call" instruction,
@@ -2209,7 +2210,7 @@ elf32_mn10300_finish_hash_table_entry (s
       /* Make a note that we should convert "call" instructions to "calls"
 	 instructions for calls to this symbol.  */
       entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
-      return TRUE;
+      return true;
     }
 
   /* We may be able to move some instructions from the function itself into
@@ -2235,24 +2236,24 @@ elf32_mn10300_finish_hash_table_entry (s
     entry->flags |= MN10300_CONVERT_CALL_TO_CALLS;
 
   /* This routine never fails.  */
-  return TRUE;
+  return true;
 }
 
 /* Used to count hash table entries.  */
 
-static bfd_boolean
+static bool
 elf32_mn10300_count_hash_table_entries (struct bfd_hash_entry *gen_entry ATTRIBUTE_UNUSED,
 					void * in_args)
 {
   int *count = (int *) in_args;
 
   (*count) ++;
-  return TRUE;
+  return true;
 }
 
 /* Used to enumerate hash table entries into a linear array.  */
 
-static bfd_boolean
+static bool
 elf32_mn10300_list_hash_table_entries (struct bfd_hash_entry *gen_entry,
 				       void * in_args)
 {
@@ -2260,7 +2261,7 @@ elf32_mn10300_list_hash_table_entries (s
 
   **ptr = gen_entry;
   (*ptr) ++;
-  return TRUE;
+  return true;
 }
 
 /* Used to sort the array created by the above.  */
@@ -2377,7 +2378,7 @@ compute_function_info (bfd *abfd,
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 mn10300_elf_relax_delete_bytes (bfd *abfd,
 				asection *sec,
 				bfd_vma addr,
@@ -2417,17 +2418,19 @@ mn10300_elf_relax_delete_bytes (bfd *abf
 	 are deleting.  */
       for (; irel < irelend; irel++)
 	{
-	  int alignment = 1 << irel->r_addend;
-
 	  if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN
 	      && irel->r_offset > addr
-	      && irel->r_offset < toaddr
-	      && (count < alignment
-		  || alignment % count != 0))
+	      && irel->r_offset < toaddr)
 	    {
-	      irelalign = irel;
-	      toaddr = irel->r_offset;
-	      break;
+	      int alignment = 1 << irel->r_addend;
+
+	      if (count < alignment
+		  || alignment % count != 0)
+		{
+		  irelalign = irel;
+		  toaddr = irel->r_offset;
+		  break;
+		}
 	    }
 	}
     }
@@ -2542,13 +2545,13 @@ mn10300_elf_relax_delete_bytes (bfd *abf
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if a symbol exists at the given address, else return
    FALSE.  */
 
-static bfd_boolean
+static bool
 mn10300_elf_symbol_address_p (bfd *abfd,
 			      asection *sec,
 			      Elf_Internal_Sym *isym,
@@ -2568,7 +2571,7 @@ mn10300_elf_symbol_address_p (bfd *abfd,
   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
     if (isym->st_shndx == sec_shndx
 	&& isym->st_value == addr)
-      return TRUE;
+      return true;
 
   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
 	      - symtab_hdr->sh_info);
@@ -2582,10 +2585,10 @@ mn10300_elf_symbol_address_p (bfd *abfd,
 	   || sym_hash->root.type == bfd_link_hash_defweak)
 	  && sym_hash->root.u.def.section == sec
 	  && sym_hash->root.u.def.value == addr)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* This function handles relaxing for the mn10300.
@@ -2627,11 +2630,11 @@ mn10300_elf_symbol_address_p (bfd *abfd,
 	We don't handle imm16->imm8 or d16->d8 as they're very rare
 	and somewhat more difficult to support.  */
 
-static bfd_boolean
+static bool
 mn10300_elf_relax_section (bfd *abfd,
 			   asection *sec,
 			   struct bfd_link_info *link_info,
-			   bfd_boolean *again)
+			   bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs = NULL;
@@ -2647,12 +2650,12 @@ mn10300_elf_relax_section (bfd *abfd,
       (_("%P%F: --relax and -r may not be used together\n"));
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We need a pointer to the mn10300 specific hash table.  */
   hash_table = elf32_mn10300_hash_table (link_info);
   if (hash_table == NULL)
-    return FALSE;
+    return false;
 
   /* Initialize fields in each hash table entry the first time through.  */
   if ((hash_table->flags & MN10300_HASH_ENTRIES_INITIALIZED) == 0)
@@ -2691,7 +2694,8 @@ mn10300_elf_relax_section (bfd *abfd,
 	      if (! ((section->flags & SEC_RELOC) != 0
 		     && section->reloc_count != 0))
 		continue;
-	      if ((section->flags & SEC_ALLOC) == 0)
+	      if ((section->flags & SEC_ALLOC) == 0
+		  || (section->flags & SEC_HAS_CONTENTS) == 0)
 		continue;
 
 	      /* Get cached copy of section contents if it exists.  */
@@ -2743,7 +2747,7 @@ mn10300_elf_relax_section (bfd *abfd,
 			  /* A local symbol.  */
 			  Elf_Internal_Sym *isym;
 			  struct elf_link_hash_table *elftab;
-			  bfd_size_type amt;
+			  size_t amt;
 
 			  isym = isymbuf + r_index;
 			  if (isym->st_shndx == SHN_UNDEF)
@@ -2781,7 +2785,7 @@ mn10300_elf_relax_section (bfd *abfd,
 			  elftab = &hash_table->static_hash_table->root;
 			  hash = ((struct elf32_mn10300_link_hash_entry *)
 				  elf_link_hash_lookup (elftab, sym_name,
-							TRUE, TRUE, FALSE));
+							true, true, false));
 			  free (new_name);
 			}
 		      else
@@ -2844,7 +2848,7 @@ mn10300_elf_relax_section (bfd *abfd,
 			  && ELF_ST_TYPE (isym->st_info) == STT_FUNC)
 			{
 			  struct elf_link_hash_table *elftab;
-			  bfd_size_type amt;
+			  size_t amt;
 			  struct elf_link_hash_entry **lhashes = hashes;
 
 			  /* Skip a local symbol if it aliases a
@@ -2890,7 +2894,7 @@ mn10300_elf_relax_section (bfd *abfd,
 			  elftab = &hash_table->static_hash_table->root;
 			  hash = ((struct elf32_mn10300_link_hash_entry *)
 				  elf_link_hash_lookup (elftab, sym_name,
-							TRUE, TRUE, FALSE));
+							true, true, false));
 			  free (new_name);
 			  compute_function_info (input_bfd, hash,
 						 isym->st_value, contents);
@@ -2912,8 +2916,7 @@ mn10300_elf_relax_section (bfd *abfd,
 		}
 
 	      /* Cache or free any memory we allocated for the relocs.  */
-	      if (internal_relocs != NULL
-		  && elf_section_data (section)->relocs != internal_relocs)
+	      if (elf_section_data (section)->relocs != internal_relocs)
 		free (internal_relocs);
 	      internal_relocs = NULL;
 
@@ -3032,7 +3035,9 @@ mn10300_elf_relax_section (bfd *abfd,
 	      unsigned int symcount;
 
 	      /* Skip non-code sections and empty sections.  */
-	      if ((section->flags & SEC_CODE) == 0 || section->size == 0)
+	      if ((section->flags & SEC_CODE) == 0
+		  || (section->flags & SEC_HAS_CONTENTS) == 0
+		  || section->size == 0)
 		continue;
 
 	      if (section->reloc_count != 0)
@@ -3069,7 +3074,7 @@ mn10300_elf_relax_section (bfd *abfd,
 		  const char *sym_name;
 		  char *new_name;
 		  struct elf_link_hash_table *elftab;
-		  bfd_size_type amt;
+		  size_t amt;
 
 		  if (isym->st_shndx != sec_shndx)
 		    continue;
@@ -3101,7 +3106,7 @@ mn10300_elf_relax_section (bfd *abfd,
 		  elftab = & hash_table->static_hash_table->root;
 		  sym_hash = (struct elf32_mn10300_link_hash_entry *)
 		    elf_link_hash_lookup (elftab, sym_name,
-					  FALSE, FALSE, FALSE);
+					  false, false, false);
 
 		  free (new_name);
 		  if (sym_hash == NULL)
@@ -3142,7 +3147,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		      /* Something changed.  Not strictly necessary, but
 			 may lead to more relaxing opportunities.  */
-		      *again = TRUE;
+		      *again = true;
 		    }
 		}
 
@@ -3217,13 +3222,12 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		      /* Something changed.  Not strictly necessary, but
 			 may lead to more relaxing opportunities.  */
-		      *again = TRUE;
+		      *again = true;
 		    }
 		}
 
 	      /* Cache or free any memory we allocated for the relocs.  */
-	      if (internal_relocs != NULL
-		  && elf_section_data (section)->relocs != internal_relocs)
+	      if (elf_section_data (section)->relocs != internal_relocs)
 		free (internal_relocs);
 	      internal_relocs = NULL;
 
@@ -3268,7 +3272,7 @@ mn10300_elf_relax_section (bfd *abfd,
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -3412,7 +3416,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 	  h = (struct elf32_mn10300_link_hash_entry *)
 		elf_link_hash_lookup (&hash_table->static_hash_table->root,
-				      sym_name, FALSE, FALSE, FALSE);
+				      sym_name, false, false, false);
 	  free (new_name);
 	}
       else
@@ -3508,7 +3512,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		  /* That will change things, so, we should relax again.
 		     Note that this is not required, and it may be slow.  */
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 	  else if (h)
@@ -3583,7 +3587,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -3626,7 +3630,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		  /* That will change things, so, we should relax again.
 		     Note that this is not required, and it may be slow.  */
-		  *again = TRUE;
+		  *again = true;
 		}
 	    }
 	  else if (h)
@@ -3683,7 +3687,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 	      /* That will change things, so, we should relax again.
 		 Note that this is not required, and it may be slow.  */
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -3701,14 +3705,8 @@ mn10300_elf_relax_section (bfd *abfd,
       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_PCREL8)
 	{
 	  Elf_Internal_Rela *nrel;
-	  bfd_vma value = symval;
 	  unsigned char code;
 
-	  /* Deal with pc-relative gunk.  */
-	  value -= (sec->output_section->vma + sec->output_offset);
-	  value -= irel->r_offset;
-	  value += irel->r_addend;
-
 	  /* Do nothing if this reloc is the last byte in the section.  */
 	  if (irel->r_offset == sec->size)
 	    continue;
@@ -3823,7 +3821,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 	  /* That will change things, so, we should relax again.
 	     Note that this is not required, and it may be slow.  */
-	  *again = TRUE;
+	  *again = true;
 	}
 
       /* Try to turn a 24 immediate, displacement or absolute address
@@ -3886,7 +3884,7 @@ mn10300_elf_relax_section (bfd *abfd,
 			  /* That will change things, so, we should relax
 			     again.  Note that this is not required, and it
 			     may be slow.  */
-			  *again = TRUE;
+			  *again = true;
 			  break;
 			}
 		    }
@@ -3933,7 +3931,7 @@ mn10300_elf_relax_section (bfd *abfd,
 	  /* See if the value will fit in 24 bits.
 	     We allow any 16bit match here.  We prune those we can't
 	     handle below.  */
-	  if ((long) value < 0x7fffff && (long) value > -0x800000)
+	  if (value + 0x800000 < 0x1000000 && irel->r_offset >= 3)
 	    {
 	      unsigned char code;
 
@@ -3994,7 +3992,7 @@ mn10300_elf_relax_section (bfd *abfd,
 			  /* That will change things, so, we should relax
 			     again.  Note that this is not required, and it
 			     may be slow.  */
-			  *again = TRUE;
+			  *again = true;
 			  break;
 			}
 		    }
@@ -4004,7 +4002,7 @@ mn10300_elf_relax_section (bfd *abfd,
 	  /* See if the value will fit in 16 bits.
 	     We allow any 16bit match here.  We prune those we can't
 	     handle below.  */
-	  if ((long) value < 0x7fff && (long) value > -0x8000)
+	  if (value + 0x8000 < 0x10000 && irel->r_offset >= 2)
 	    {
 	      unsigned char code;
 
@@ -4080,7 +4078,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		    /* That will change things, so, we should relax again.
 		       Note that this is not required, and it may be slow.  */
-		    *again = TRUE;
+		    *again = true;
 		    break;
 		  }
 	      else if ((code & 0xf0) == 0x80
@@ -4134,7 +4132,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		    /* That will change things, so, we should relax again.
 		       Note that this is not required, and it may be slow.  */
-		    *again = TRUE;
+		    *again = true;
 		    break;
 
 		  /* mov am,(abs32)    -> mov am,(abs16)
@@ -4181,7 +4179,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		    /* That will change things, so, we should relax again.
 		       Note that this is not required, and it may be slow.  */
-		    *again = TRUE;
+		    *again = true;
 		    break;
 		  }
 	      else if ((code & 0xf0) < 0xf0)
@@ -4254,7 +4252,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		    /* That will change things, so, we should relax again.
 		       Note that this is not required, and it may be slow.  */
-		    *again = TRUE;
+		    *again = true;
 		    break;
 
 		  /* mov (abs32),an    -> mov (abs16),an
@@ -4324,7 +4322,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		    /* That will change things, so, we should relax again.
 		       Note that this is not required, and it may be slow.  */
-		    *again = TRUE;
+		    *again = true;
 		    break;
 		  }
 	      else if (code == 0xfe)
@@ -4360,7 +4358,7 @@ mn10300_elf_relax_section (bfd *abfd,
 
 		  /* That will change things, so, we should relax again.
 		     Note that this is not required, and it may be slow.  */
-		  *again = TRUE;
+		  *again = true;
 		  break;
 		}
 	    }
@@ -4391,24 +4389,20 @@ mn10300_elf_relax_section (bfd *abfd,
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (section)->this_hdr.contents != contents)
+  if (elf_section_data (section)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (section)->relocs != internal_relocs)
+  if (elf_section_data (section)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 /* This is a version of bfd_generic_get_relocated_section_contents
@@ -4419,7 +4413,7 @@ mn10300_elf_get_relocated_section_conten
 					    struct bfd_link_info *link_info,
 					    struct bfd_link_order *link_order,
 					    bfd_byte *data,
-					    bfd_boolean relocatable,
+					    bool relocatable,
 					    asymbol **symbols)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -4440,6 +4434,13 @@ mn10300_elf_get_relocated_section_conten
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
 
+  bfd_byte *orig_data = data;
+  if (data == NULL)
+    {
+      data = bfd_malloc (input_section->size);
+      if (data == NULL)
+	return NULL;
+    }
   memcpy (data, elf_section_data (input_section)->this_hdr.contents,
 	  (size_t) input_section->size);
 
@@ -4451,7 +4452,7 @@ mn10300_elf_get_relocated_section_conten
       bfd_size_type amt;
 
       internal_relocs = _bfd_elf_link_read_relocs (input_bfd, input_section,
-						   NULL, NULL, FALSE);
+						   NULL, NULL, false);
       if (internal_relocs == NULL)
 	goto error_return;
 
@@ -4494,9 +4495,8 @@ mn10300_elf_get_relocated_section_conten
 					  isymbuf, sections))
 	goto error_return;
 
-      if (sections != NULL)
-	free (sections);
-      if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+      free (sections);
+      if (symtab_hdr->contents != (unsigned char *) isymbuf)
 	free (isymbuf);
       if (internal_relocs != elf_section_data (input_section)->relocs)
 	free (internal_relocs);
@@ -4505,13 +4505,13 @@ mn10300_elf_get_relocated_section_conten
   return data;
 
  error_return:
-  if (sections != NULL)
-    free (sections);
-  if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
+  free (sections);
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && internal_relocs != elf_section_data (input_section)->relocs)
+  if (internal_relocs != elf_section_data (input_section)->relocs)
     free (internal_relocs);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
@@ -4591,7 +4591,7 @@ elf32_mn10300_link_hash_table_free (bfd
 
   obfd->link.hash = &ret->static_hash_table->root.root;
   _bfd_elf_link_hash_table_free (obfd);
-  obfd->is_linker_output = TRUE;
+  obfd->is_linker_output = true;
   obfd->link.hash = &ret->root.root;
   _bfd_elf_link_hash_table_free (obfd);
 }
@@ -4602,7 +4602,7 @@ static struct bfd_link_hash_table *
 elf32_mn10300_link_hash_table_create (bfd *abfd)
 {
   struct elf32_mn10300_link_hash_table *ret;
-  bfd_size_type amt = sizeof (* ret);
+  size_t amt = sizeof (* ret);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -4626,14 +4626,14 @@ elf32_mn10300_link_hash_table_create (bf
       return NULL;
     }
 
-  abfd->is_linker_output = FALSE;
+  abfd->is_linker_output = false;
   abfd->link.hash = NULL;
   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
 				      elf32_mn10300_link_hash_newfunc,
 				      sizeof (struct elf32_mn10300_link_hash_entry),
 				      MN10300_ELF_DATA))
     {
-      abfd->is_linker_output = TRUE;
+      abfd->is_linker_output = true;
       abfd->link.hash = &ret->static_hash_table->root.root;
       _bfd_elf_link_hash_table_free (abfd);
       free (ret);
@@ -4667,7 +4667,7 @@ elf_mn10300_mach (flagword flags)
    file.  This gets the MN10300 architecture right based on the machine
    number.  */
 
-static bfd_boolean
+static bool
 _bfd_mn10300_elf_final_write_processing (bfd *abfd)
 {
   unsigned long val;
@@ -4693,35 +4693,35 @@ _bfd_mn10300_elf_final_write_processing
   return _bfd_elf_final_write_processing (abfd);
 }
 
-static bfd_boolean
+static bool
 _bfd_mn10300_elf_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
 			     elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 _bfd_mn10300_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
 
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
+    return true;
 
   if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
       && bfd_get_mach (obfd) < bfd_get_mach (ibfd))
     {
       if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
 			       bfd_get_mach (ibfd)))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 #define PLT0_ENTRY_SIZE     15
@@ -4786,7 +4786,7 @@ static const bfd_byte elf_mn10300_pic_pl
 
 /* Create dynamic sections when linking against a dynamic object.  */
 
-static bfd_boolean
+static bool
 _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   flagword   flags;
@@ -4807,7 +4807,7 @@ _bfd_mn10300_elf_create_dynamic_sections
 
     default:
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
@@ -4822,10 +4822,10 @@ _bfd_mn10300_elf_create_dynamic_sections
   htab->root.srelplt = s;
   if (s == NULL
       || !bfd_set_section_alignment (s, ptralign))
-    return FALSE;
+    return false;
 
   if (! _bfd_mn10300_elf_create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
   if (bed->want_dynbss)
     {
@@ -4838,7 +4838,7 @@ _bfd_mn10300_elf_create_dynamic_sections
       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
 					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
-	return FALSE;
+	return false;
 
       /* The .rel[a].bss section holds copy relocs.  This section is not
 	 normally needed.  We need to create it here, though, so that the
@@ -4859,11 +4859,11 @@ _bfd_mn10300_elf_create_dynamic_sections
 						  flags | SEC_READONLY);
 	  if (s == NULL
 	      || !bfd_set_section_alignment (s, ptralign))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -4872,7 +4872,7 @@ _bfd_mn10300_elf_create_dynamic_sections
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
 					struct elf_link_hash_entry * h)
 {
@@ -4906,14 +4906,14 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (
 	     a procedure linkage table, and we can just do a REL32
 	     reloc instead.  */
 	  BFD_ASSERT (h->needs_plt);
-	  return TRUE;
+	  return true;
 	}
 
       /* Make sure this symbol is output as a dynamic symbol.  */
       if (h->dynindx == -1)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->root.splt;
@@ -4952,7 +4952,7 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
-      return TRUE;
+      return true;
     }
 
   /* If this is a weak symbol, and there is a real definition, the
@@ -4964,7 +4964,7 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -4975,12 +4975,12 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -5014,16 +5014,14 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (
 
 /* Set the sizes of the dynamic sections.  */
 
-static bfd_boolean
+static bool
 _bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd,
 					struct bfd_link_info * info)
 {
   struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   bfd * dynobj;
   asection * s;
-  bfd_boolean plt;
-  bfd_boolean relocs;
-  bfd_boolean reltext;
+  bool relocs;
 
   dynobj = htab->root.dynobj;
   BFD_ASSERT (dynobj != NULL);
@@ -5061,9 +5059,7 @@ _bfd_mn10300_elf_size_dynamic_sections (
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  plt = FALSE;
-  relocs = FALSE;
-  reltext = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char * name;
@@ -5078,41 +5074,23 @@ _bfd_mn10300_elf_size_dynamic_sections (
       if (streq (name, ".plt"))
 	{
 	  /* Remember whether there is a PLT.  */
-	  plt = s->size != 0;
+	  ;
 	}
-      else if (CONST_STRNEQ (name, ".rela"))
+      else if (startswith (name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
-	      asection * target;
-
 	      /* Remember whether there are any reloc sections other
 		 than .rela.plt.  */
 	      if (! streq (name, ".rela.plt"))
-		{
-		  const char * outname;
-
-		  relocs = TRUE;
-
-		  /* If this relocation section applies to a read only
-		     section, then we probably need a DT_TEXTREL
-		     entry.  The entries in the .rela.plt section
-		     really apply to the .got section, which we
-		     created ourselves and so know is not readonly.  */
-		  outname = bfd_section_name (s->output_section);
-		  target = bfd_get_section_by_name (output_bfd, outname + 5);
-		  if (target != NULL
-		      && (target->flags & SEC_READONLY) != 0
-		      && (target->flags & SEC_ALLOC) != 0)
-		    reltext = TRUE;
-		}
+		relocs = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
 	      s->reloc_count = 0;
 	    }
 	}
-      else if (! CONST_STRNEQ (name, ".got")
+      else if (! startswith (name, ".got")
 	       && ! streq (name, ".dynbss"))
 	/* It's not one of our sections, so don't allocate space.  */
 	continue;
@@ -5142,54 +5120,16 @@ _bfd_mn10300_elf_size_dynamic_sections (
 	 instead of garbage.  */
       s->contents = bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
-    }
-
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in _bfd_mn10300_elf_finish_dynamic_sections,
-	 but we must add the entries now so that we get the correct
-	 size for the .dynamic section.  The DT_DEBUG entry is filled
-	 in by the dynamic linker and used by the debugger.  */
-      if (! bfd_link_pic (info))
-	{
-	  if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (plt)
-	{
-	  if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0)
-	      || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT,
-					      sizeof (Elf32_External_Rela)))
-	    return FALSE;
-	}
-
-      if (reltext)
-	{
-	  if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0))
-	    return FALSE;
-	}
+	return false;
     }
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
 					struct bfd_link_info * info,
 					struct elf_link_hash_entry * h,
@@ -5390,12 +5330,12 @@ _bfd_mn10300_elf_finish_dynamic_symbol (
       || h == elf_hash_table (info)->hgot)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd,
 					  struct bfd_link_info * info)
 {
@@ -5500,7 +5440,7 @@ _bfd_mn10300_elf_finish_dynamic_sections
 
   elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
 
-  return TRUE;
+  return true;
 }
 
 /* Classify relocation types, such that combreloc can sort them
@@ -5522,7 +5462,7 @@ _bfd_mn10300_elf_reloc_type_class (const
 
 /* Allocate space for an MN10300 extension to the bfd elf data structure.  */
 
-static bfd_boolean
+static bool
 mn10300_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct elf_mn10300_obj_tdata),
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfn32-mips.c ./bfd/elfn32-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfn32-mips.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfn32-mips.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS-specific support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    Most of the information added by Ian Lance Taylor, Cygnus Support,
    <ian@cygnus.com>.
@@ -48,10 +48,10 @@
 #define ECOFF_SIGNED_32
 #include "ecoffswap.h"
 
-static bfd_boolean mips_elf_assign_gp
+static bool mips_elf_assign_gp
   (bfd *, bfd_vma *);
 static bfd_reloc_status_type mips_elf_final_gp
-  (bfd *, asymbol *, bfd_boolean, char **, bfd_vma *);
+  (bfd *, asymbol *, bool, char **, bfd_vma *);
 static bfd_reloc_status_type mips_elf_gprel16_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type mips_elf_literal_reloc
@@ -59,30 +59,32 @@ static bfd_reloc_status_type mips_elf_li
 static bfd_reloc_status_type mips_elf_gprel32_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type gprel32_with_gp
-  (bfd *, asymbol *, arelent *, asection *, bfd_boolean, void *, bfd_vma);
+  (bfd *, asymbol *, arelent *, asection *, bool, void *, bfd_vma);
 static bfd_reloc_status_type mips_elf_shift6_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type mips16_gprel_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean mips_info_to_howto_rel
+static bool mips_info_to_howto_rel
   (bfd *, arelent *, Elf_Internal_Rela *);
-static bfd_boolean mips_info_to_howto_rela
+static bool mips_info_to_howto_rela
   (bfd *, arelent *, Elf_Internal_Rela *);
-static bfd_boolean mips_elf_sym_is_global
+static bool mips_elf_sym_is_global
   (bfd *, asymbol *);
-static bfd_boolean mips_elf_n32_object_p
+static bool mips_elf_n32_elfsym_local_is_section
   (bfd *);
-static bfd_boolean elf32_mips_grok_prstatus
+static bool mips_elf_n32_object_p
+  (bfd *);
+static bool elf32_mips_grok_prstatus
   (bfd *, Elf_Internal_Note *);
-static bfd_boolean elf32_mips_grok_psinfo
+static bool elf32_mips_grok_psinfo
   (bfd *, Elf_Internal_Note *);
-static bfd_boolean elf_n32_mips_grok_freebsd_prstatus
+static bool elf_n32_mips_grok_freebsd_prstatus
   (bfd *, Elf_Internal_Note *);
 static irix_compat_t elf_n32_mips_irix_compat
   (bfd *);
-static bfd_boolean mips_elf_n32_mkobject
+static bool mips_elf_n32_mkobject
   (bfd *);
 
 extern const bfd_target mips_elf32_n_be_vec;
@@ -110,69 +112,69 @@ static reloc_howto_type elf_mips_howto_t
   /* No relocation.  */
   HOWTO (R_MIPS_NONE,		/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit relocation.  */
   HOWTO (R_MIPS_16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation.  */
   HOWTO (R_MIPS_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit symbol relative relocation.  */
   HOWTO (R_MIPS_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_REL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 26 bit jump address.  */
   HOWTO (R_MIPS_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -180,10 +182,10 @@ static reloc_howto_type elf_mips_howto_t
 				   bits must match the PC + 4.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03ffffff,		/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* R_MIPS_HI16 and R_MIPS_LO16 are unsupported for NewABI REL.
      However, the native IRIX6 tools use them, so we try our best. */
@@ -191,124 +193,124 @@ static reloc_howto_type elf_mips_howto_t
   /* High 16 bits of symbol value.  */
   HOWTO (R_MIPS_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MIPS_HI16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MIPS_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MIPS_LO16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_elf_gprel16_reloc, /* special_function */
 	 "R_MIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_elf_literal_reloc, /* special_function */
 	 "R_MIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MIPS_GOT16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit PC relative reference.  Note that the ABI document has a typo
      and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
      We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC16",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MIPS_CALL16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit GP relative reference.  */
   HOWTO (R_MIPS_GPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 mips_elf_gprel32_reloc, /* special_function */
 	 "R_MIPS_GPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The remaining relocs are defined on Irix 5, although they are
      not defined by the ABI.  */
@@ -319,186 +321,186 @@ static reloc_howto_type elf_mips_howto_t
   /* A 5 bit shift field.  */
   HOWTO (R_MIPS_SHIFT5,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 5,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SHIFT5",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000007c0,		/* src_mask */
 	 0x000007c0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 6 bit shift field.  */
   HOWTO (R_MIPS_SHIFT6,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mips_elf_shift6_reloc,	/* special_function */
 	 "R_MIPS_SHIFT6",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000007c4,		/* src_mask */
 	 0x000007c4,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 64 bit relocation.  */
   HOWTO (R_MIPS_64,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_64",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement in the global offset table.  */
   HOWTO (R_MIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_DISP",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_PAGE",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_OFST",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  */
   HOWTO (R_MIPS_SUB,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SUB",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Insert the addend as an instruction.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_INSERT_A,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_INSERT_A",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Insert the addend as an instruction, and change all relocations
      to refer to the old instruction at the address.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_INSERT_B,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_INSERT_B",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Delete a 32 bit instruction.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_DELETE,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_DELETE",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The MIPS ELF64 ABI Draft wants us to support these for REL relocations.
      We don't, because
@@ -512,61 +514,61 @@ static reloc_howto_type elf_mips_howto_t
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_CALL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_CALL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement.  */
   HOWTO (R_MIPS_SCN_DISP,       /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SCN_DISP",     /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MIPS_REL16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_REL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* These two are obsolete.  */
   EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),
@@ -576,62 +578,62 @@ static reloc_howto_type elf_mips_howto_t
      It must be used for multigot GOT's (and only there).  */
   HOWTO (R_MIPS_RELGOT,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_RELGOT",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Protected jump conversion.  This is an optimization hint.  No
      relocation is required for correctness.  */
   HOWTO (R_MIPS_JALR,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_JALR",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS GD/LD dynamic relocations.  */
   HOWTO (R_MIPS_TLS_DTPMOD32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPMOD32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MIPS_TLS_DTPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
   EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
@@ -639,139 +641,139 @@ static reloc_howto_type elf_mips_howto_t
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS IE dynamic relocations.  */
   HOWTO (R_MIPS_TLS_TPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (R_MIPS_TLS_TPREL64),
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation with no addend.  */
   HOWTO (R_MIPS_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (52),
   EMPTY_HOWTO (53),
@@ -784,87 +786,87 @@ static reloc_howto_type elf_mips_howto_t
 
   HOWTO (R_MIPS_PC21_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC21_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x001fffff,		/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC26_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC26_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x03ffffff,		/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC18_S3,	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 18,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC18_S3",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0003ffff,		/* src_mask */
 	 0x0003ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC19_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC19_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0007ffff,		/* src_mask */
 	 0x0007ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCHI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCHI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCLO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCLO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
 };
 
@@ -875,69 +877,69 @@ static reloc_howto_type elf_mips_howto_t
   /* No relocation.  */
   HOWTO (R_MIPS_NONE,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit relocation.  */
   HOWTO (R_MIPS_16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
-	 0x0000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 0x0000ffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation.  */
   HOWTO (R_MIPS_32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_32",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit symbol relative relocation.  */
   HOWTO (R_MIPS_REL32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_REL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 26 bit jump address.  */
   HOWTO (R_MIPS_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -945,132 +947,132 @@ static reloc_howto_type elf_mips_howto_t
 				   bits must match the PC + 4.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_26",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_MIPS_HI16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_HI16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MIPS_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_LO16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_elf_gprel16_reloc, /* special_function */
 	 "R_MIPS_GPREL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips_elf_literal_reloc, /* special_function */
 	 "R_MIPS_LITERAL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MIPS_GOT16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit PC relative reference.  Note that the ABI document has a typo
      and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
      We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC16",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MIPS_CALL16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_CALL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit GP relative reference.  */
   HOWTO (R_MIPS_GPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 mips_elf_gprel32_reloc, /* special_function */
 	 "R_MIPS_GPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (13),
   EMPTY_HOWTO (14),
@@ -1079,276 +1081,276 @@ static reloc_howto_type elf_mips_howto_t
   /* A 5 bit shift field.  */
   HOWTO (R_MIPS_SHIFT5,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 5,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SHIFT5",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000007c0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 6 bit shift field.  */
   HOWTO (R_MIPS_SHIFT6,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 6,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 mips_elf_shift6_reloc,	/* special_function */
 	 "R_MIPS_SHIFT6",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000007c4,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit relocation.  */
   HOWTO (R_MIPS_64,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_64",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement in the global offset table.  */
   HOWTO (R_MIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_DISP",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_PAGE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_OFST",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GOT_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  */
   HOWTO (R_MIPS_SUB,		/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SUB",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Insert the addend as an instruction.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_INSERT_A,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_INSERT_A",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Insert the addend as an instruction, and change all relocations
      to refer to the old instruction at the address.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_INSERT_B,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_INSERT_B",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Delete a 32 bit instruction.  */
   /* FIXME: Not handled correctly.  */
   HOWTO (R_MIPS_DELETE,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_DELETE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the higher value of a 64 bit addend.  */
   HOWTO (R_MIPS_HIGHER,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_HIGHER",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the highest value of a 64 bit addend.  */
   HOWTO (R_MIPS_HIGHEST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_HIGHEST",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_CALL_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_CALL_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement, used by an associated event location section.  */
   HOWTO (R_MIPS_SCN_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_SCN_DISP",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 16 bit relocation.  */
   HOWTO (R_MIPS_REL16,		/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_REL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* These two are obsolete.  */
   EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),
@@ -1358,62 +1360,62 @@ static reloc_howto_type elf_mips_howto_t
      It must be used for multigot GOT's (and only there).  */
   HOWTO (R_MIPS_RELGOT,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_RELGOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Protected jump conversion.  This is an optimization hint.  No
      relocation is required for correctness.  */
   HOWTO (R_MIPS_JALR,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_JALR",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS GD/LD dynamic relocations.  */
   HOWTO (R_MIPS_TLS_DTPMOD32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPMOD32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MIPS_TLS_DTPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
   EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
@@ -1421,139 +1423,139 @@ static reloc_howto_type elf_mips_howto_t
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_LDM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_DTPREL_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_GOTTPREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS IE dynamic relocations.  */
   HOWTO (R_MIPS_TLS_TPREL32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (R_MIPS_TLS_TPREL64),
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_TLS_TPREL_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation with no addend.  */
   HOWTO (R_MIPS_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (52),
   EMPTY_HOWTO (53),
@@ -1566,87 +1568,87 @@ static reloc_howto_type elf_mips_howto_t
 
   HOWTO (R_MIPS_PC21_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC21_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC26_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC26_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x03ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC18_S3,	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 18,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC18_S3",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0003ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PC19_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PC19_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0007ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCHI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCHI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MIPS_PCLO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc,   /* special_function */
 	 "R_MIPS_PCLO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
 };
 
@@ -1655,9 +1657,9 @@ static reloc_howto_type elf_mips16_howto
   /* The reloc used for the mips16 jump instruction.  */
   HOWTO (R_MIPS16_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -1665,205 +1667,205 @@ static reloc_howto_type elf_mips16_howto
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_26",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x3ffffff,		/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The reloc used for the mips16 gprel instruction.  */
   HOWTO (R_MIPS16_GPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips16_gprel_reloc,	/* special_function */
 	 "R_MIPS16_GPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 reference to the global offset table.  */
   HOWTO (R_MIPS16_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MIPS16_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 call through the global offset table.  */
   HOWTO (R_MIPS16_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 high 16 bits of symbol value.  */
   HOWTO (R_MIPS16_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MIPS16_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 low 16 bits of symbol value.  */
   HOWTO (R_MIPS16_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MIPS16_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS general dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_GD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 16-bit PC-relative branch offset.  */
   HOWTO (R_MIPS16_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 static reloc_howto_type elf_mips16_howto_table_rela[] =
@@ -1871,9 +1873,9 @@ static reloc_howto_type elf_mips16_howto
   /* The reloc used for the mips16 jump instruction.  */
   HOWTO (R_MIPS16_26,		/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -1881,205 +1883,205 @@ static reloc_howto_type elf_mips16_howto
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_26",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* The reloc used for the mips16 gprel instruction.  */
   HOWTO (R_MIPS16_GPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 mips16_gprel_reloc,	/* special_function */
 	 "R_MIPS16_GPREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 reference to the global offset table.  */
   HOWTO (R_MIPS16_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MIPS16_GOT16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A MIPS16 call through the global offset table.  */
   HOWTO (R_MIPS16_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_CALL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 high 16 bits of symbol value.  */
   HOWTO (R_MIPS16_HI16,		/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MIPS16_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 low 16 bits of symbol value.  */
   HOWTO (R_MIPS16_LO16,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MIPS16_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS general dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_GD,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic variable reference.  */
   HOWTO (R_MIPS16_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_LDM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS local dynamic offset.  */
   HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_GOTTPREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 TLS thread pointer offset.  */
   HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_TLS_TPREL_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MIPS16 16-bit PC-relative branch offset.  */
   HOWTO (R_MIPS16_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS16_PC16_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 static reloc_howto_type elf_micromips_howto_table_rel[] =
@@ -2091,9 +2093,9 @@ static reloc_howto_type elf_micromips_ho
   /* 26 bit jump address.  */
   HOWTO (R_MICROMIPS_26_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -2101,143 +2103,143 @@ static reloc_howto_type elf_micromips_ho
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_26_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x3ffffff,		/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MICROMIPS_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MICROMIPS_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MICROMIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MICROMIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MICROMIPS_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MICROMIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* This is for microMIPS branches.  */
   HOWTO (R_MICROMIPS_PC7_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC7_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000007f,		/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC10_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC10_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x000003ff,		/* src_mask */
 	 0x000003ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MICROMIPS_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (143),
   EMPTY_HOWTO (144),
@@ -2245,92 +2247,92 @@ static reloc_howto_type elf_micromips_ho
   /* Displacement in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_DISP",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_PAGE",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_OFST",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_HI16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_LO16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  Used in the N32 ABI.  */
   HOWTO (R_MICROMIPS_SUB,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SUB",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* We don't support these for REL relocations, because it means building
      the addend from a R_MICROMIPS_HIGHEST/R_MICROMIPS_HIGHER/
@@ -2342,79 +2344,79 @@ static reloc_howto_type elf_micromips_ho
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_HI16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_LO16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement.  */
   HOWTO (R_MICROMIPS_SCN_DISP,  /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SCN_DISP", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Protected jump conversion.  This is an optimization hint.  No
      relocation is required for correctness.  */
   HOWTO (R_MICROMIPS_JALR,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_JALR",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values
      must be zero.  This is used for relaxation.  */
   HOWTO (R_MICROMIPS_HI0_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HI0_LO16",/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (158),
   EMPTY_HOWTO (159),
@@ -2424,77 +2426,77 @@ static reloc_howto_type elf_micromips_ho
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (167),
   EMPTY_HOWTO (168),
@@ -2502,63 +2504,63 @@ static reloc_howto_type elf_micromips_ho
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (171),
 
   /* GP- and PC-relative relocations.  */
   HOWTO (R_MICROMIPS_GPREL7_S2,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL7_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000007f,		/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC23_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 23,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC23_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x007fffff,		/* src_mask */
 	 0x007fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 static reloc_howto_type elf_micromips_howto_table_rela[] =
@@ -2570,9 +2572,9 @@ static reloc_howto_type elf_micromips_ho
   /* 26 bit jump address.  */
   HOWTO (R_MICROMIPS_26_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -2580,143 +2582,143 @@ static reloc_howto_type elf_micromips_ho
 				   bits must match the PC.  */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_26_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_HI16,	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_hi16_reloc, /* special_function */
 	 "R_MICROMIPS_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_MICROMIPS_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_lo16_reloc, /* special_function */
 	 "R_MICROMIPS_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GP relative reference.  */
   HOWTO (R_MICROMIPS_GPREL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to literal section.  */
   HOWTO (R_MICROMIPS_LITERAL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_LITERAL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Reference to global offset table.  */
   HOWTO (R_MICROMIPS_GOT16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_got16_reloc, /* special_function */
 	 "R_MICROMIPS_GOT16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* This is for microMIPS branches.  */
   HOWTO (R_MICROMIPS_PC7_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC7_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC10_S1,	/* type */
 	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC10_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x000003ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC16_S1,	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC16_S1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* 16 bit call through global offset table.  */
   HOWTO (R_MICROMIPS_CALL16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (143),
   EMPTY_HOWTO (144),
@@ -2724,199 +2726,199 @@ static reloc_howto_type elf_micromips_ho
   /* Displacement in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_DISP,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_DISP",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Displacement to page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_PAGE,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_PAGE",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Offset from page pointer in the global offset table.  */
   HOWTO (R_MICROMIPS_GOT_OFST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_OFST",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_HI16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_GOT_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_GOT_LO16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* 64 bit subtraction.  Used in the N32 ABI.  */
   HOWTO (R_MICROMIPS_SUB,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SUB",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the higher value of a 64 bit addend.  */
   HOWTO (R_MICROMIPS_HIGHER,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HIGHER",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get the highest value of a 64 bit addend.  */
   HOWTO (R_MICROMIPS_HIGHEST,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HIGHEST",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* High 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_HI16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of displacement in global offset table.  */
   HOWTO (R_MICROMIPS_CALL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_CALL_LO16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Section displacement.  */
   HOWTO (R_MICROMIPS_SCN_DISP,  /* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_SCN_DISP", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Protected jump conversion.  This is an optimization hint.  No
      relocation is required for correctness.  */
   HOWTO (R_MICROMIPS_JALR,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_JALR",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values
      must be zero.  This is used for relaxation.  */
   HOWTO (R_MICROMIPS_HI0_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_HI0_LO16",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (158),
   EMPTY_HOWTO (159),
@@ -2926,77 +2928,77 @@ static reloc_howto_type elf_micromips_ho
   /* TLS general dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_GD,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GD",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic variable reference.  */
   HOWTO (R_MICROMIPS_TLS_LDM,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_LDM",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_HI16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS local dynamic offset.  */
   HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_DTPREL_LO16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_GOTTPREL,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_GOTTPREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (167),
   EMPTY_HOWTO (168),
@@ -3004,144 +3006,144 @@ static reloc_howto_type elf_micromips_ho
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_HI16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_HI16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* TLS thread pointer offset.  */
   HOWTO (R_MICROMIPS_TLS_TPREL_LO16,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_TLS_TPREL_LO16", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (171),
 
   /* GP- and PC-relative relocations.  */
   HOWTO (R_MICROMIPS_GPREL7_S2,	/* type */
 	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
 	 "R_MICROMIPS_GPREL7_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000007f,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_MICROMIPS_PC23_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 23,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MICROMIPS_PC23_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x007fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 
 /* GNU extension to record C++ vtable hierarchy */
 static reloc_howto_type elf_mips_gnu_vtinherit_howto =
   HOWTO (R_MIPS_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_MIPS_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* GNU extension to record C++ vtable member usage */
 static reloc_howto_type elf_mips_gnu_vtentry_howto =
   HOWTO (R_MIPS_GNU_VTENTRY,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
 	 "R_MIPS_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* 16 bit offset for pc-relative branches.  */
 static reloc_howto_type elf_mips_gnu_rel16_s2 =
   HOWTO (R_MIPS_GNU_REL16_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GNU_REL16_S2",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE);			/* pcrel_offset */
+	 true);			/* pcrel_offset */
 
 /* 16 bit offset for pc-relative branches.  */
 static reloc_howto_type elf_mips_gnu_rela16_s2 =
   HOWTO (R_MIPS_GNU_REL16_S2,	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_GNU_REL16_S2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE);			/* pcrel_offset */
+	 true);			/* pcrel_offset */
 
 /* 32 bit pc-relative.  Used for compact EH tables.  */
 static reloc_howto_type elf_mips_gnu_pcrel32 =
   HOWTO (R_MIPS_PC32,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_PC32",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE);			/* pcrel_offset */
+	 true);			/* pcrel_offset */
 
 
 /* Originally a VxWorks extension, but now used for other systems too.  */
@@ -3150,53 +3152,53 @@ static reloc_howto_type elf_mips_copy_ho
 	 0,			/* rightshift */
 	 0,			/* this one is variable size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* Originally a VxWorks extension, but now used for other systems too.  */
 static reloc_howto_type elf_mips_jump_slot_howto =
   HOWTO (R_MIPS_JUMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_JUMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* Used in EH tables.  */
 static reloc_howto_type elf_mips_eh_howto =
   HOWTO (R_MIPS_EH,		/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 _bfd_mips_elf_generic_reloc, /* special_function */
 	 "R_MIPS_EH",		/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 
 /* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
    dangerous relocation.  */
 
-static bfd_boolean
+static bool
 mips_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp)
 {
   unsigned int count;
@@ -3206,7 +3208,7 @@ mips_elf_assign_gp (bfd *output_bfd, bfd
   /* If we've already figured out what GP will be, just return it.  */
   *pgp = _bfd_get_gp_value (output_bfd);
   if (*pgp)
-    return TRUE;
+    return true;
 
   count = bfd_get_symcount (output_bfd);
   sym = bfd_get_outsymbols (output_bfd);
@@ -3236,10 +3238,10 @@ mips_elf_assign_gp (bfd *output_bfd, bfd
       /* Only get the error once.  */
       *pgp = 4;
       _bfd_set_gp_value (output_bfd, *pgp);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We have to figure out the gp value, so that we can adjust the
@@ -3249,11 +3251,10 @@ mips_elf_assign_gp (bfd *output_bfd, bfd
    external symbol if we are producing relocatable output.  */
 
 static bfd_reloc_status_type
-mips_elf_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable,
+mips_elf_final_gp (bfd *output_bfd, asymbol *symbol, bool relocatable,
 		   char **error_message, bfd_vma *pgp)
 {
-  if (bfd_is_und_section (symbol->section)
-      && ! relocatable)
+  if (output_bfd == NULL)
     {
       *pgp = 0;
       return bfd_reloc_undefined;
@@ -3290,16 +3291,17 @@ mips_elf_gprel16_reloc (bfd *abfd ATTRIB
 			asection *input_section, bfd *output_bfd,
 			char **error_message ATTRIBUTE_UNUSED)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      if (symbol->section->output_section != NULL)
+	output_bfd = symbol->section->output_section->owner;
     }
 
   ret = mips_elf_final_gp (output_bfd, symbol, relocatable, error_message,
@@ -3319,7 +3321,7 @@ mips_elf_literal_reloc (bfd *abfd, arele
 			void *data, asection *input_section, bfd *output_bfd,
 			char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
@@ -3335,11 +3337,12 @@ mips_elf_literal_reloc (bfd *abfd, arele
 
   /* FIXME: The entries in the .lit8 and .lit4 sections should be merged.  */
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      if (symbol->section->output_section != NULL)
+	output_bfd = symbol->section->output_section->owner;
     }
 
   ret = mips_elf_final_gp (output_bfd, symbol, relocatable, error_message,
@@ -3360,7 +3363,7 @@ mips_elf_gprel32_reloc (bfd *abfd, arele
 			void *data, asection *input_section, bfd *output_bfd,
 			char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_vma gp;
 
@@ -3376,13 +3379,14 @@ mips_elf_gprel32_reloc (bfd *abfd, arele
 
   if (output_bfd != NULL)
     {
-      relocatable = TRUE;
+      relocatable = true;
       gp = _bfd_get_gp_value (output_bfd);
     }
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+      if (symbol->section->output_section != NULL)
+	output_bfd = symbol->section->output_section->owner;
 
       ret = mips_elf_final_gp (output_bfd, symbol, relocatable,
 			       error_message, &gp);
@@ -3396,7 +3400,7 @@ mips_elf_gprel32_reloc (bfd *abfd, arele
 
 static bfd_reloc_status_type
 gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry,
-		 asection *input_section, bfd_boolean relocatable,
+		 asection *input_section, bool relocatable,
 		 void *data, bfd_vma gp)
 {
   bfd_vma relocation;
@@ -3407,10 +3411,14 @@ gprel32_with_gp (bfd *abfd, asymbol *sym
   else
     relocation = symbol->value;
 
-  relocation += symbol->section->output_section->vma;
-  relocation += symbol->section->output_offset;
+  if (symbol->section->output_section != NULL)
+    {
+      relocation += symbol->section->output_section->vma;
+      relocation += symbol->section->output_offset;
+    }
 
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd, input_section,
+				  reloc_entry->address))
     return bfd_reloc_outofrange;
 
   if (reloc_entry->howto->src_mask == 0)
@@ -3462,7 +3470,7 @@ mips16_gprel_reloc (bfd *abfd, arelent *
 		    void *data, asection *input_section, bfd *output_bfd,
 		    char **error_message)
 {
-  bfd_boolean relocatable;
+  bool relocatable;
   bfd_reloc_status_type ret;
   bfd_byte *location;
   bfd_vma gp;
@@ -3478,11 +3486,12 @@ mips16_gprel_reloc (bfd *abfd, arelent *
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
-      output_bfd = symbol->section->output_section->owner;
+      relocatable = false;
+       if (symbol->section->output_section != NULL)
+	 output_bfd = symbol->section->output_section->owner;
     }
 
   ret = mips_elf_final_gp (output_bfd, symbol, relocatable, error_message,
@@ -3490,8 +3499,12 @@ mips16_gprel_reloc (bfd *abfd, arelent *
   if (ret != bfd_reloc_ok)
     return ret;
 
+  if (!_bfd_mips_reloc_offset_in_range (abfd, input_section, reloc_entry,
+					check_shuffle))
+    return bfd_reloc_outofrange;
+
   location = (bfd_byte *) data + reloc_entry->address;
-  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
+  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, false,
 				 location);
   ret = _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry,
 				       input_section, relocatable,
@@ -3512,7 +3525,8 @@ struct elf_reloc_map {
 static const struct elf_reloc_map mips_reloc_map[] =
 {
   { BFD_RELOC_NONE, R_MIPS_NONE },
-  { BFD_RELOC_16, R_MIPS_16 },
+  { BFD_RELOC_MIPS_16, R_MIPS_16 },
+  { BFD_RELOC_16, R_MIPS_REL16 },
   { BFD_RELOC_32, R_MIPS_32 },
   /* There is no BFD reloc for R_MIPS_REL32.  */
   { BFD_RELOC_CTOR, R_MIPS_32 },
@@ -3542,7 +3556,6 @@ static const struct elf_reloc_map mips_r
   { BFD_RELOC_MIPS_CALL_HI16, R_MIPS_CALL_HI16 },
   { BFD_RELOC_MIPS_CALL_LO16, R_MIPS_CALL_LO16 },
   { BFD_RELOC_MIPS_SCN_DISP, R_MIPS_SCN_DISP },
-  { BFD_RELOC_MIPS_REL16, R_MIPS_REL16 },
   /* Use of R_MIPS_ADD_IMMEDIATE and R_MIPS_PJUMP is deprecated.  */
   { BFD_RELOC_MIPS_RELGOT, R_MIPS_RELGOT },
   { BFD_RELOC_MIPS_JALR, R_MIPS_JALR },
@@ -3735,7 +3748,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *ab
 /* Given a MIPS Elf_Internal_Rel, fill in an arelent structure.  */
 
 static reloc_howto_type *
-mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)
+mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bool rela_p)
 {
   reloc_howto_type *howto = NULL;
 
@@ -3792,16 +3805,16 @@ mips_elf_n32_rtype_to_howto (bfd *abfd,
 
 /* Given a MIPS Elf_Internal_Rel, fill in an arelent structure.  */
 
-static bfd_boolean
+static bool
 mips_info_to_howto_rel (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
   r_type = ELF32_R_TYPE (dst->r_info);
-  cache_ptr->howto = mips_elf_n32_rtype_to_howto (abfd, r_type, FALSE);
+  cache_ptr->howto = mips_elf_n32_rtype_to_howto (abfd, r_type, false);
 
   if (cache_ptr->howto == NULL)
-    return FALSE;
+    return false;
 
   /* The addend for a GPREL16 or LITERAL relocation comes from the GP
      value for the object file.  We get the addend now, rather than
@@ -3811,19 +3824,19 @@ mips_info_to_howto_rel (bfd *abfd, arele
       && (gprel16_reloc_p (r_type) || r_type == (unsigned int) R_MIPS_LITERAL))
     cache_ptr->addend = elf_gp (abfd);
 
-  return TRUE;
+  return true;
 }
 
 /* Given a MIPS Elf_Internal_Rela, fill in an arelent structure.  */
 
-static bfd_boolean
+static bool
 mips_info_to_howto_rela (bfd *abfd,
 			 arelent *cache_ptr, Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
   r_type = ELF32_R_TYPE (dst->r_info);
-  cache_ptr->howto = mips_elf_n32_rtype_to_howto (abfd, r_type, TRUE);
+  cache_ptr->howto = mips_elf_n32_rtype_to_howto (abfd, r_type, true);
   cache_ptr->addend = dst->r_addend;
   return cache_ptr->howto != NULL;
 }
@@ -3834,7 +3847,7 @@ mips_info_to_howto_rela (bfd *abfd,
    symbols.  On most ELF targets the split is between static symbols
    and externally visible symbols.  */
 
-static bfd_boolean
+static bool
 mips_elf_sym_is_global (bfd *abfd ATTRIBUTE_UNUSED, asymbol *sym)
 {
   if (SGI_COMPAT (abfd))
@@ -3844,30 +3857,38 @@ mips_elf_sym_is_global (bfd *abfd ATTRIB
 	    || bfd_is_und_section (bfd_asymbol_section (sym))
 	    || bfd_is_com_section (bfd_asymbol_section (sym)));
 }
+
+/* Likewise, return TRUE if the symbol table split overall must be
+   between section symbols and all other symbols.  */
+static bool
+mips_elf_n32_elfsym_local_is_section (bfd *abfd)
+{
+  return SGI_COMPAT (abfd);
+}
 
 /* Set the right machine number for a MIPS ELF file.  */
 
-static bfd_boolean
+static bool
 mips_elf_n32_object_p (bfd *abfd)
 {
   unsigned long mach;
 
   if (!ABI_N32_P (abfd))
-    return FALSE;
+    return false;
 
   /* Irix 5 and 6 are broken.  Object file symbol tables are not always
      sorted correctly such that local symbols precede global symbols,
      and the sh_info field in the symbol table is not always right.  */
   if (SGI_COMPAT (abfd))
-    elf_bad_symtab (abfd) = TRUE;
+    elf_bad_symtab (abfd) = true;
 
   mach = _bfd_elf_mips_mach (elf_elfheader (abfd)->e_flags);
   bfd_default_set_arch_mach (abfd, bfd_arch_mips, mach);
-  return TRUE;
+  return true;
 }
 
 /* Support for core dump NOTE sections.  */
-static bfd_boolean
+static bool
 elf32_mips_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -3876,7 +3897,7 @@ elf32_mips_grok_prstatus (bfd *abfd, Elf
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 440:		/* Linux/MIPS N32 */
 	/* pr_cursig */
@@ -3897,13 +3918,13 @@ elf32_mips_grok_prstatus (bfd *abfd, Elf
 					  note->descpos + offset);
 }
 
-static bfd_boolean
+static bool
 elf32_mips_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 128:		/* Linux/MIPS elf_prpsinfo */
 	elf_tdata (abfd)->core->pid
@@ -3926,10 +3947,10 @@ elf32_mips_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_n32_mips_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   size_t offset;
@@ -3942,11 +3963,11 @@ elf_n32_mips_grok_freebsd_prstatus (bfd
   min_size = offset + 4 * 2 + 4 + 4 + 4;
 
   if (note->descsz < min_size)
-    return FALSE;
+    return false;
 
   /* Check for version 1 in pr_version.  */
   if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
-    return FALSE;
+    return false;
 
   /* Extract size of pr_reg from pr_gregsetsz.  */
   /* Skip over pr_gregsetsz and pr_fpregsetsz.  */
@@ -3972,7 +3993,7 @@ elf_n32_mips_grok_freebsd_prstatus (bfd
 
   /* Make sure that there is enough data remaining in the note.  */
   if (note->descsz - offset < size)
-    return FALSE;
+    return false;
 
   /* Make a ".reg/999" section and a ".reg" section.  */
   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
@@ -4033,10 +4054,10 @@ elf_n32_mips_irix_compat (bfd *abfd)
 /* Make an n32 MIPS object.  We need to set the n32 ABI flag in
    `e_flags' to tell the object apart from an o32 object.  */
 
-static bfd_boolean
+static bool
 mips_elf_n32_mkobject (bfd *abfd)
 {
-  bfd_boolean ret;
+  bool ret;
 
   ret = _bfd_mips_elf_mkobject (abfd);
   if (ret)
@@ -4091,9 +4112,9 @@ static const struct ecoff_debug_swap mip
 #define ELF_TARGET_ID			MIPS_ELF_DATA
 #define ELF_MACHINE_CODE		EM_MIPS
 
-#define elf_backend_collect		TRUE
-#define elf_backend_type_change_ok	TRUE
-#define elf_backend_can_gc_sections	TRUE
+#define elf_backend_collect		true
+#define elf_backend_type_change_ok	true
+#define elf_backend_can_gc_sections	true
 #define elf_backend_gc_mark_extra_sections \
 					_bfd_mips_elf_gc_mark_extra_sections
 #define elf_info_to_howto		mips_info_to_howto_rela
@@ -4152,7 +4173,7 @@ static const struct ecoff_debug_swap mip
 #define elf_backend_may_use_rela_p	1
 #define elf_backend_default_use_rela_p	1
 #define elf_backend_rela_plts_and_copies_p 0
-#define elf_backend_sign_extend_vma	TRUE
+#define elf_backend_sign_extend_vma	true
 #define elf_backend_plt_readonly	1
 #define elf_backend_plt_sym_val		_bfd_mips_elf_plt_sym_val
 
@@ -4160,11 +4181,15 @@ static const struct ecoff_debug_swap mip
 #define elf_backend_ignore_discarded_relocs \
 					_bfd_mips_elf_ignore_discarded_relocs
 #define elf_backend_write_section	_bfd_mips_elf_write_section
+#define elf_backend_elfsym_local_is_section \
+					mips_elf_n32_elfsym_local_is_section
 #define elf_backend_mips_irix_compat	elf_n32_mips_irix_compat
 #define elf_backend_mips_rtype_to_howto	mips_elf_n32_rtype_to_howto
 #define bfd_elf32_bfd_is_target_special_symbol \
 					_bfd_mips_elf_is_target_special_symbol
 #define bfd_elf32_find_nearest_line	_bfd_mips_elf_find_nearest_line
+#define bfd_elf32_find_nearest_line_with_alt \
+				_bfd_mips_elf_find_nearest_line_with_alt
 #define bfd_elf32_find_inliner_info	_bfd_mips_elf_find_inliner_info
 #define bfd_elf32_new_section_hook	_bfd_mips_elf_new_section_hook
 #define bfd_elf32_set_section_contents	_bfd_mips_elf_set_section_contents
@@ -4179,6 +4204,7 @@ static const struct ecoff_debug_swap mip
 #define bfd_elf32_bfd_print_private_bfd_data \
 					_bfd_mips_elf_print_private_bfd_data
 #define bfd_elf32_mkobject		mips_elf_n32_mkobject
+#define bfd_elf32_bfd_free_cached_info	_bfd_mips_elf_free_cached_info
 
 /* Support for SGI-ish mips targets using n32 ABI.  */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-nacl.c ./bfd/elf-nacl.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-nacl.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-nacl.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Native Client support for ELF
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -24,7 +24,7 @@
 #include "elf/common.h"
 #include "elf/internal.h"
 
-static bfd_boolean
+static bool
 segment_executable (struct elf_segment_map *seg)
 {
   if (seg->p_flags_valid)
@@ -36,35 +36,35 @@ segment_executable (struct elf_segment_m
       unsigned int i;
       for (i = 0; i < seg->count; ++i)
 	if (seg->sections[i]->flags & SEC_CODE)
-	  return TRUE;
+	  return true;
     }
-  return FALSE;
+  return false;
 }
 
 /* Determine if this segment is eligible to receive the file and program
    headers.  It must be read-only and non-executable.
    Its first section must start far enough past the page boundary to
    allow space for the headers.  */
-static bfd_boolean
+static bool
 segment_eligible_for_headers (struct elf_segment_map *seg,
 			      bfd_vma minpagesize, bfd_vma sizeof_headers)
 {
   unsigned int i;
   if (seg->count == 0 || seg->sections[0]->lma % minpagesize < sizeof_headers)
-    return FALSE;
+    return false;
   for (i = 0; i < seg->count; ++i)
     {
       if ((seg->sections[i]->flags & (SEC_CODE|SEC_READONLY)) != SEC_READONLY)
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 
 /* We permute the segment_map to get BFD to do the file layout we want:
    The first non-executable PT_LOAD segment appears first in the file
    and contains the ELF file header and phdrs.  */
-bfd_boolean
+bool
 nacl_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
 {
   const struct elf_backend_data *const bed = get_elf_backend_data (abfd);
@@ -76,7 +76,7 @@ nacl_modify_segment_map (bfd *abfd, stru
   if (info != NULL && info->user_phdrs)
     /* The linker script used PHDRS explicitly, so don't change what the
        user asked for.  */
-    return TRUE;
+    return true;
 
   if (info != NULL)
     /* We're doing linking, so evalute SIZEOF_HEADERS as in a linker script.  */
@@ -97,7 +97,7 @@ nacl_modify_segment_map (bfd *abfd, stru
 
       if (seg->p_type == PT_LOAD)
 	{
-	  bfd_boolean executable = segment_executable (seg);
+	  bool executable = segment_executable (seg);
 
 	  if (executable
 	      && seg->count > 0
@@ -136,11 +136,11 @@ nacl_modify_segment_map (bfd *abfd, stru
 
 		  secdata = bfd_zalloc (abfd, sizeof *secdata);
 		  if (secdata == NULL)
-		    return FALSE;
+		    return false;
 
 		  sec = bfd_zalloc (abfd, sizeof *sec);
 		  if (sec == NULL)
-		    return FALSE;
+		    return false;
 
 		  /* Fill in only the fields that actually affect the logic
 		     in assign_file_positions_for_load_sections.  */
@@ -156,13 +156,13 @@ nacl_modify_segment_map (bfd *abfd, stru
 		  secdata->this_hdr.sh_addr = sec->vma;
 		  secdata->this_hdr.sh_size = sec->size;
 
-		  newseg = bfd_alloc (abfd,
-				      sizeof *newseg + ((seg->count + 1)
-							* sizeof (asection *)));
+		  newseg
+		    = bfd_alloc (abfd, (sizeof (*newseg)
+					+ seg->count * sizeof (asection *)));
 		  if (newseg == NULL)
-		    return FALSE;
-		  memcpy (newseg, seg,
-			  sizeof *newseg + (seg->count * sizeof (asection *)));
+		    return false;
+		  memcpy (newseg, seg, (sizeof (*newseg) - sizeof (asection *)
+					+ seg->count * sizeof (asection *)));
 		  newseg->sections[newseg->count++] = sec;
 		  *m = seg = newseg;
 		}
@@ -227,14 +227,14 @@ nacl_modify_segment_map (bfd *abfd, stru
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* After nacl_modify_segment_map has done its work, the file layout has
    been done as we wanted.  But the PT_LOAD phdrs are no longer in the
    proper order for the ELF rule that they must appear in ascending address
    order.  So find the two segments we swapped before, and swap them back.  */
-bfd_boolean
+bool
 nacl_modify_headers (bfd *abfd, struct bfd_link_info *info)
 {
   if (info != NULL && info->user_phdrs)
@@ -324,7 +324,7 @@ nacl_modify_headers (bfd *abfd, struct b
   return _bfd_elf_modify_headers (abfd, info);
 }
 
-bfd_boolean
+bool
 nacl_final_write_processing (bfd *abfd)
 {
   struct elf_segment_map *seg;
@@ -344,11 +344,11 @@ nacl_final_write_processing (bfd *abfd)
 	BFD_ASSERT (sec->flags & SEC_CODE);
 	BFD_ASSERT (sec->size > 0);
 
-	fill = abfd->arch_info->fill (sec->size, bfd_big_endian (abfd), TRUE);
+	fill = abfd->arch_info->fill (sec->size, bfd_big_endian (abfd), true);
 
 	if (fill == NULL
 	    || bfd_seek (abfd, sec->filepos, SEEK_SET) != 0
-	    || bfd_bwrite (fill, sec->size, abfd) != sec->size)
+	    || bfd_write (fill, sec->size, abfd) != sec->size)
 	  {
 	    /* We don't have a proper way to report an error here.  So
 	       instead fudge things so that elf_write_shdrs_and_ehdr will
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-nacl.h ./bfd/elf-nacl.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-nacl.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-nacl.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Native Client support for ELF
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -16,6 +16,6 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-bfd_boolean nacl_modify_segment_map (bfd *, struct bfd_link_info *);
-bfd_boolean nacl_modify_headers (bfd *, struct bfd_link_info *);
-bfd_boolean nacl_final_write_processing (bfd *);
+bool nacl_modify_segment_map (bfd *, struct bfd_link_info *);
+bool nacl_modify_headers (bfd *, struct bfd_link_info *);
+bool nacl_final_write_processing (bfd *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-aarch64.c ./bfd/elfnn-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-aarch64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfnn-aarch64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* AArch64-specific support for NN-bit ELF.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -442,120 +442,120 @@ static reloc_howto_type elfNN_aarch64_ho
   /* Deprecated, but retained for backwards compatibility.  */
   HOWTO64 (R_AARCH64_NULL,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AARCH64_NULL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
   HOWTO (R_AARCH64_NONE,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AARCH64_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* .xword: (S+A) */
   HOWTO64 (AARCH64_R (ABS64),	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (4 = long long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (ABS64),	/* name */
-	 FALSE,			/* partial_inplace */
-	 ALL_ONES,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 ALL_ONES,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* .word: (S+A) */
   HOWTO (AARCH64_R (ABS32),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (ABS32),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* .half:  (S+A) */
   HOWTO (AARCH64_R (ABS16),	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (ABS16),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* .xword: (S+A-P) */
   HOWTO64 (AARCH64_R (PREL64),	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (4 = long long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (PREL64),	/* name */
-	 FALSE,			/* partial_inplace */
-	 ALL_ONES,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 ALL_ONES,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* .word: (S+A-P) */
   HOWTO (AARCH64_R (PREL32),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (PREL32),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* .half: (S+A-P) */
   HOWTO (AARCH64_R (PREL16),	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (PREL16),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Group relocations to create a 16, 32, 48 or 64 bit
      unsigned data or abs address inline.  */
@@ -563,107 +563,107 @@ static reloc_howto_type elfNN_aarch64_ho
   /* MOVZ:   ((S+A) >>  0) & 0xffff */
   HOWTO (AARCH64_R (MOVW_UABS_G0),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_UABS_G0),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOVK:   ((S+A) >>  0) & 0xffff [no overflow check] */
   HOWTO (AARCH64_R (MOVW_UABS_G0_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_UABS_G0_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOVZ:   ((S+A) >> 16) & 0xffff */
   HOWTO (AARCH64_R (MOVW_UABS_G1),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_UABS_G1),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOVK:   ((S+A) >> 16) & 0xffff [no overflow check] */
   HOWTO64 (AARCH64_R (MOVW_UABS_G1_NC),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_UABS_G1_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOVZ:   ((S+A) >> 32) & 0xffff */
   HOWTO64 (AARCH64_R (MOVW_UABS_G2),	/* type */
 	 32,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_UABS_G2),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOVK:   ((S+A) >> 32) & 0xffff [no overflow check] */
   HOWTO64 (AARCH64_R (MOVW_UABS_G2_NC),	/* type */
 	 32,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_UABS_G2_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOVZ:   ((S+A) >> 48) & 0xffff */
   HOWTO64 (AARCH64_R (MOVW_UABS_G3),	/* type */
 	 48,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_UABS_G3),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Group relocations to create high part of a 16, 32, 48 or 64 bit
      signed data or abs address inline. Will change instruction
@@ -672,47 +672,47 @@ static reloc_howto_type elfNN_aarch64_ho
   /* MOV[ZN]:   ((S+A) >>  0) & 0xffff */
   HOWTO (AARCH64_R (MOVW_SABS_G0),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 17,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_SABS_G0),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOV[ZN]:   ((S+A) >> 16) & 0xffff */
   HOWTO64 (AARCH64_R (MOVW_SABS_G1),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 17,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_SABS_G1),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOV[ZN]:   ((S+A) >> 32) & 0xffff */
   HOWTO64 (AARCH64_R (MOVW_SABS_G2),	/* type */
 	 32,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 17,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_SABS_G2),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Group relocations to create a 16, 32, 48 or 64 bit
      PC relative address inline.  */
@@ -720,107 +720,107 @@ static reloc_howto_type elfNN_aarch64_ho
   /* MOV[NZ]:   ((S+A-P) >>  0) & 0xffff */
   HOWTO (AARCH64_R (MOVW_PREL_G0),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 17,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_PREL_G0),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
+	 true),		/* pcrel_offset */
 
   /* MOVK:   ((S+A-P) >>  0) & 0xffff [no overflow check] */
   HOWTO (AARCH64_R (MOVW_PREL_G0_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_PREL_G0_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
+	 true),		/* pcrel_offset */
 
   /* MOV[NZ]:   ((S+A-P) >> 16) & 0xffff */
   HOWTO (AARCH64_R (MOVW_PREL_G1),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 17,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_PREL_G1),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
+	 true),		/* pcrel_offset */
 
   /* MOVK:   ((S+A-P) >> 16) & 0xffff [no overflow check] */
   HOWTO64 (AARCH64_R (MOVW_PREL_G1_NC),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_PREL_G1_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
+	 true),		/* pcrel_offset */
 
   /* MOV[NZ]:   ((S+A-P) >> 32) & 0xffff */
   HOWTO64 (AARCH64_R (MOVW_PREL_G2),	/* type */
 	 32,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 17,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_PREL_G2),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
+	 true),		/* pcrel_offset */
 
   /* MOVK:   ((S+A-P) >> 32) & 0xffff [no overflow check] */
   HOWTO64 (AARCH64_R (MOVW_PREL_G2_NC),	/* type */
 	 32,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_PREL_G2_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
+	 true),		/* pcrel_offset */
 
   /* MOV[NZ]:   ((S+A-P) >> 48) & 0xffff */
   HOWTO64 (AARCH64_R (MOVW_PREL_G3),	/* type */
 	 48,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_PREL_G3),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
+	 true),		/* pcrel_offset */
 
 /* Relocations to generate 19, 21 and 33 bit PC-relative load/store
    addresses: PG(x) is (x & ~0xfff).  */
@@ -828,1250 +828,1250 @@ static reloc_howto_type elfNN_aarch64_ho
   /* LD-lit: ((S+A-P) >> 2) & 0x7ffff */
   HOWTO (AARCH64_R (LD_PREL_LO19),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LD_PREL_LO19),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x7ffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x7ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* ADR:    (S+A-P) & 0x1fffff */
   HOWTO (AARCH64_R (ADR_PREL_LO21),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (ADR_PREL_LO21),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* ADRP:   ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */
   HOWTO (AARCH64_R (ADR_PREL_PG_HI21),	/* type */
 	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (ADR_PREL_PG_HI21),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* ADRP:   ((PG(S+A)-PG(P)) >> 12) & 0x1fffff [no overflow check] */
   HOWTO64 (AARCH64_R (ADR_PREL_PG_HI21_NC),	/* type */
 	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (ADR_PREL_PG_HI21_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* ADD:    (S+A) & 0xfff [no overflow check] */
   HOWTO (AARCH64_R (ADD_ABS_LO12_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (ADD_ABS_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST8:  (S+A) & 0xfff */
   HOWTO (AARCH64_R (LDST8_ABS_LO12_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LDST8_ABS_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,				/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Relocations for control-flow instructions.  */
 
   /* TBZ/NZ: ((S+A-P) >> 2) & 0x3fff */
   HOWTO (AARCH64_R (TSTBR14),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 14,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TSTBR14),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3fff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* B.cond: ((S+A-P) >> 2) & 0x7ffff */
   HOWTO (AARCH64_R (CONDBR19),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (CONDBR19),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x7ffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x7ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* B:      ((S+A-P) >> 2) & 0x3ffffff */
   HOWTO (AARCH64_R (JUMP26),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (JUMP26),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3ffffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* BL:     ((S+A-P) >> 2) & 0x3ffffff */
   HOWTO (AARCH64_R (CALL26),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (CALL26),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3ffffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* LD/ST16:  (S+A) & 0xffe */
   HOWTO (AARCH64_R (LDST16_ABS_LO12_NC),	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LDST16_ABS_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffe,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffe,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST32:  (S+A) & 0xffc */
   HOWTO (AARCH64_R (LDST32_ABS_LO12_NC),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LDST32_ABS_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffc,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffc,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST64:  (S+A) & 0xff8 */
   HOWTO (AARCH64_R (LDST64_ABS_LO12_NC),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LDST64_ABS_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xff8,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xff8,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST128:  (S+A) & 0xff0 */
   HOWTO (AARCH64_R (LDST128_ABS_LO12_NC),	/* type */
 	 4,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LDST128_ABS_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xff0,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xff0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Set a load-literal immediate field to bits
      0x1FFFFC of G(S)-P */
   HOWTO (AARCH64_R (GOT_LD_PREL19),	/* type */
 	 2,				/* rightshift */
-	 2,				/* size (0 = byte,1 = short,2 = long) */
+	 4,				/* size */
 	 19,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 AARCH64_R_STR (GOT_LD_PREL19),	/* name */
-	 FALSE,				/* partial_inplace */
-	 0xffffe0,			/* src_mask */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
 	 0xffffe0,			/* dst_mask */
-	 TRUE),				/* pcrel_offset */
+	 true),				/* pcrel_offset */
 
   /* Get to the page for the GOT entry for the symbol
      (G(S) - P) using an ADRP instruction.  */
   HOWTO (AARCH64_R (ADR_GOT_PAGE),	/* type */
 	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (ADR_GOT_PAGE),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* LD64: GOT offset G(S) & 0xff8  */
   HOWTO64 (AARCH64_R (LD64_GOT_LO12_NC),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LD64_GOT_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xff8,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xff8,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD32: GOT offset G(S) & 0xffc  */
   HOWTO32 (AARCH64_R (LD32_GOT_LO12_NC),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LD32_GOT_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffc,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffc,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Lower 16 bits of GOT offset for the symbol.  */
   HOWTO64 (AARCH64_R (MOVW_GOTOFF_G0_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_GOTOFF_G0_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Higher 16 bits of GOT offset for the symbol.  */
   HOWTO64 (AARCH64_R (MOVW_GOTOFF_G1),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (MOVW_GOTOFF_G1),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD64: GOT offset for the symbol.  */
   HOWTO64 (AARCH64_R (LD64_GOTOFF_LO15),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LD64_GOTOFF_LO15),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x7ff8,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,				/* src_mask */
 	 0x7ff8,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD32: GOT offset to the page address of GOT table.
      (G(S) - PAGE (_GLOBAL_OFFSET_TABLE_)) & 0x5ffc.  */
   HOWTO32 (AARCH64_R (LD32_GOTPAGE_LO14),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LD32_GOTPAGE_LO14),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x5ffc,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x5ffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD64: GOT offset to the page address of GOT table.
      (G(S) - PAGE (_GLOBAL_OFFSET_TABLE_)) & 0x7ff8.  */
   HOWTO64 (AARCH64_R (LD64_GOTPAGE_LO15),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (LD64_GOTPAGE_LO15),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x7ff8,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x7ff8,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get to the page for the GOT entry for the symbol
      (G(S) - P) using an ADRP instruction.  */
   HOWTO (AARCH64_R (TLSGD_ADR_PAGE21),	/* type */
 	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSGD_ADR_PAGE21),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSGD_ADR_PREL21),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSGD_ADR_PREL21),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* ADD: GOT offset G(S) & 0xff8 [no overflow check] */
   HOWTO (AARCH64_R (TLSGD_ADD_LO12_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSGD_ADD_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Lower 16 bits of GOT offset to tls_index.  */
   HOWTO64 (AARCH64_R (TLSGD_MOVW_G0_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSGD_MOVW_G0_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Higher 16 bits of GOT offset to tls_index.  */
   HOWTO64 (AARCH64_R (TLSGD_MOVW_G1),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSGD_MOVW_G1),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSIE_ADR_GOTTPREL_PAGE21),	/* type */
 	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSIE_ADR_GOTTPREL_PAGE21),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO64 (AARCH64_R (TLSIE_LD64_GOTTPREL_LO12_NC),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSIE_LD64_GOTTPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xff8,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xff8,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO32 (AARCH64_R (TLSIE_LD32_GOTTPREL_LO12_NC),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSIE_LD32_GOTTPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffc,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffc,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSIE_LD_GOTTPREL_PREL19),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSIE_LD_GOTTPREL_PREL19),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1ffffc,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1ffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO64 (AARCH64_R (TLSIE_MOVW_GOTTPREL_G0_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSIE_MOVW_GOTTPREL_G0_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO64 (AARCH64_R (TLSIE_MOVW_GOTTPREL_G1),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSIE_MOVW_GOTTPREL_G1),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* ADD: bit[23:12] of byte offset to module TLS base address.  */
   HOWTO (AARCH64_R (TLSLD_ADD_DTPREL_HI12),	/* type */
 	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_ADD_DTPREL_HI12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Unsigned 12 bit byte offset to module TLS base address.  */
   HOWTO (AARCH64_R (TLSLD_ADD_DTPREL_LO12),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_ADD_DTPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* No overflow check version of BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12.  */
   HOWTO (AARCH64_R (TLSLD_ADD_DTPREL_LO12_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_ADD_DTPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* ADD: GOT offset G(S) & 0xff8 [no overflow check] */
   HOWTO (AARCH64_R (TLSLD_ADD_LO12_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_ADD_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Get to the page for the GOT entry for the symbol
      (G(S) - P) using an ADRP instruction.  */
   HOWTO (AARCH64_R (TLSLD_ADR_PAGE21),	/* type */
 	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_ADR_PAGE21),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSLD_ADR_PREL21),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_ADR_PREL21),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* LD/ST16: bit[11:1] of byte offset to module TLS base address.  */
   HOWTO64 (AARCH64_R (TLSLD_LDST16_DTPREL_LO12),	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 11,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_LDST16_DTPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Same as BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no overflow check.  */
   HOWTO64 (AARCH64_R (TLSLD_LDST16_DTPREL_LO12_NC),	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 11,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_LDST16_DTPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST32: bit[11:2] of byte offset to module TLS base address.  */
   HOWTO64 (AARCH64_R (TLSLD_LDST32_DTPREL_LO12),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_LDST32_DTPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Same as BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no overflow check.  */
   HOWTO64 (AARCH64_R (TLSLD_LDST32_DTPREL_LO12_NC),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_LDST32_DTPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST64: bit[11:3] of byte offset to module TLS base address.  */
   HOWTO64 (AARCH64_R (TLSLD_LDST64_DTPREL_LO12),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 9,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_LDST64_DTPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Same as BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no overflow check.  */
   HOWTO64 (AARCH64_R (TLSLD_LDST64_DTPREL_LO12_NC),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 9,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_LDST64_DTPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x7fc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x7fc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST8: bit[11:0] of byte offset to module TLS base address.  */
   HOWTO64 (AARCH64_R (TLSLD_LDST8_DTPREL_LO12),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_LDST8_DTPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Same as BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no overflow check.  */
   HOWTO64 (AARCH64_R (TLSLD_LDST8_DTPREL_LO12_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_LDST8_DTPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOVZ: bit[15:0] of byte offset to module TLS base address.  */
   HOWTO (AARCH64_R (TLSLD_MOVW_DTPREL_G0),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_MOVW_DTPREL_G0),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0.  */
   HOWTO (AARCH64_R (TLSLD_MOVW_DTPREL_G0_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_MOVW_DTPREL_G0_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOVZ: bit[31:16] of byte offset to module TLS base address.  */
   HOWTO (AARCH64_R (TLSLD_MOVW_DTPREL_G1),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_MOVW_DTPREL_G1),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1.  */
   HOWTO64 (AARCH64_R (TLSLD_MOVW_DTPREL_G1_NC),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_MOVW_DTPREL_G1_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* MOVZ: bit[47:32] of byte offset to module TLS base address.  */
   HOWTO64 (AARCH64_R (TLSLD_MOVW_DTPREL_G2),	/* type */
 	 32,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLD_MOVW_DTPREL_G2),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO64 (AARCH64_R (TLSLE_MOVW_TPREL_G2),	/* type */
 	 32,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_MOVW_TPREL_G2),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSLE_MOVW_TPREL_G1),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_MOVW_TPREL_G1),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO64 (AARCH64_R (TLSLE_MOVW_TPREL_G1_NC),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_MOVW_TPREL_G1_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSLE_MOVW_TPREL_G0),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_MOVW_TPREL_G0),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSLE_MOVW_TPREL_G0_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_MOVW_TPREL_G0_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSLE_ADD_TPREL_HI12),	/* type */
 	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_ADD_TPREL_HI12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSLE_ADD_TPREL_LO12),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_ADD_TPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSLE_ADD_TPREL_LO12_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_ADD_TPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST16: bit[11:1] of byte offset to module TLS base address.  */
   HOWTO (AARCH64_R (TLSLE_LDST16_TPREL_LO12),	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 11,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_LDST16_TPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Same as BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no overflow check.  */
   HOWTO (AARCH64_R (TLSLE_LDST16_TPREL_LO12_NC),	/* type */
 	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 11,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_LDST16_TPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST32: bit[11:2] of byte offset to module TLS base address.  */
   HOWTO (AARCH64_R (TLSLE_LDST32_TPREL_LO12),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_LDST32_TPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Same as BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no overflow check.  */
   HOWTO (AARCH64_R (TLSLE_LDST32_TPREL_LO12_NC),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_LDST32_TPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST64: bit[11:3] of byte offset to module TLS base address.  */
   HOWTO (AARCH64_R (TLSLE_LDST64_TPREL_LO12),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 9,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_LDST64_TPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x7fc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x7fc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Same as BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no overflow check.  */
   HOWTO (AARCH64_R (TLSLE_LDST64_TPREL_LO12_NC),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 9,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_LDST64_TPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x7fc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x7fc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD/ST8: bit[11:0] of byte offset to module TLS base address.  */
   HOWTO (AARCH64_R (TLSLE_LDST8_TPREL_LO12),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_LDST8_TPREL_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Same as BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no overflow check.  */
   HOWTO (AARCH64_R (TLSLE_LDST8_TPREL_LO12_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 10,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSLE_LDST8_TPREL_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3ffc00,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x3ffc00,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSDESC_LD_PREL19),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_LD_PREL19),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0ffffe0,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x0ffffe0,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSDESC_ADR_PREL21),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_ADR_PREL21),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* Get to the page for the GOT entry for the symbol
      (G(S) - P) using an ADRP instruction.  */
   HOWTO (AARCH64_R (TLSDESC_ADR_PAGE21),	/* type */
 	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_ADR_PAGE21),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x1fffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0x1fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* LD64: GOT offset G(S) & 0xff8.  */
   HOWTO64 (AARCH64_R (TLSDESC_LD64_LO12),	/* type */
 	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_LD64_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xff8,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xff8,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* LD32: GOT offset G(S) & 0xffc.  */
   HOWTO32 (AARCH64_R (TLSDESC_LD32_LO12_NC),	/* type */
 	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_LD32_LO12_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffc,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffc,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* ADD: GOT offset G(S) & 0xfff.  */
   HOWTO (AARCH64_R (TLSDESC_ADD_LO12),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_ADD_LO12),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfff,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO64 (AARCH64_R (TLSDESC_OFF_G1),	/* type */
 	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_OFF_G1),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO64 (AARCH64_R (TLSDESC_OFF_G0_NC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_OFF_G0_NC),	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO64 (AARCH64_R (TLSDESC_LDR),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_LDR),	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO64 (AARCH64_R (TLSDESC_ADD),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_ADD),	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSDESC_CALL),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC_CALL),	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0x0,			/* src_mask */
 	 0x0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (COPY),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (COPY),	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (GLOB_DAT),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (GLOB_DAT),	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (JUMP_SLOT),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (JUMP_SLOT),	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (RELATIVE),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (RELATIVE),	/* name */
-	 TRUE,			/* partial_inplace */
-	 ALL_ONES,		/* src_mask */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
 	 ALL_ONES,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLS_DTPMOD),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
@@ -2080,16 +2080,16 @@ static reloc_howto_type elfNN_aarch64_ho
 #else
 	 AARCH64_R_STR (TLS_DTPMOD),	/* name */
 #endif
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 ALL_ONES,		/* dst_mask */
-	 FALSE),		/* pc_reloffset */
+	 false),		/* pc_reloffset */
 
   HOWTO (AARCH64_R (TLS_DTPREL),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
@@ -2098,16 +2098,16 @@ static reloc_howto_type elfNN_aarch64_ho
 #else
 	 AARCH64_R_STR (TLS_DTPREL),	/* name */
 #endif
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 ALL_ONES,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLS_TPREL),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
@@ -2116,38 +2116,38 @@ static reloc_howto_type elfNN_aarch64_ho
 #else
 	 AARCH64_R_STR (TLS_TPREL),	/* name */
 #endif
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 ALL_ONES,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (TLSDESC),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (TLSDESC),	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 ALL_ONES,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (AARCH64_R (IRELATIVE),	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 AARCH64_R_STR (IRELATIVE),	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 ALL_ONES,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   EMPTY_HOWTO (0),
 };
@@ -2155,17 +2155,17 @@ static reloc_howto_type elfNN_aarch64_ho
 static reloc_howto_type elfNN_aarch64_howto_none =
   HOWTO (R_AARCH64_NONE,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_AARCH64_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE);		/* pcrel_offset */
+	 false);		/* pcrel_offset */
 
 /* Given HOWTO, return the bfd internal relocation enumerator.  */
 
@@ -2191,7 +2191,7 @@ elfNN_aarch64_bfd_reloc_from_howto (relo
 static bfd_reloc_code_real_type
 elfNN_aarch64_bfd_reloc_from_type (bfd *abfd, unsigned int r_type)
 {
-  static bfd_boolean initialized_p = FALSE;
+  static bool initialized_p = false;
   /* Indexed by R_TYPE, values are offsets in the howto_table.  */
   static unsigned int offsets[R_AARCH64_end];
 
@@ -2203,7 +2203,7 @@ elfNN_aarch64_bfd_reloc_from_type (bfd *
 	if (elfNN_aarch64_howto_table[i].type != 0)
 	  offsets[elfNN_aarch64_howto_table[i].type] = i;
 
-      initialized_p = TRUE;
+      initialized_p = true;
     }
 
   if (r_type == R_AARCH64_NONE || r_type == R_AARCH64_NULL)
@@ -2298,7 +2298,7 @@ elfNN_aarch64_howto_from_type (bfd *abfd
   return NULL;
 }
 
-static bfd_boolean
+static bool
 elfNN_aarch64_info_to_howto (bfd *abfd, arelent *bfd_reloc,
 			     Elf_Internal_Rela *elf_reloc)
 {
@@ -2311,9 +2311,9 @@ elfNN_aarch64_info_to_howto (bfd *abfd,
     {
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r_type);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type *
@@ -2354,6 +2354,9 @@ elfNN_aarch64_reloc_name_lookup (bfd *ab
    name can be changed. The only requirement is the %s be present.  */
 #define STUB_ENTRY_NAME   "__%s_veneer"
 
+/* Stub name for a BTI landing stub.  */
+#define BTI_STUB_ENTRY_NAME   "__%s_bti_veneer"
+
 /* The name of the dynamic interpreter.  This is put in the .interp
    section.  */
 #define ELF_DYNAMIC_INTERPRETER     "/lib/ld.so.1"
@@ -2406,6 +2409,12 @@ static const uint32_t aarch64_long_branc
   0x00000000,
 };
 
+static const uint32_t aarch64_bti_direct_branch_stub[] =
+{
+  0xd503245f,			/*	bti	c */
+  0x14000000,			/*	b	<label> */
+};
+
 static const uint32_t aarch64_erratum_835769_stub[] =
 {
   0x00000000,    /* Placeholder for multiply accumulate.  */
@@ -2427,6 +2436,7 @@ enum elf_aarch64_stub_type
   aarch64_stub_none,
   aarch64_stub_adrp_branch,
   aarch64_stub_long_branch,
+  aarch64_stub_bti_direct_branch,
   aarch64_stub_erratum_835769_veneer,
   aarch64_stub_erratum_843419_veneer,
 };
@@ -2455,6 +2465,9 @@ struct elf_aarch64_stub_hash_entry
   /* Destination symbol type */
   unsigned char st_type;
 
+  /* The target is also a stub.  */
+  bool double_stub;
+
   /* Where this stub is being called from, or, in the case of combined
      stub sections, the first input section in the group.  */
   asection *id_sec;
@@ -2547,7 +2560,7 @@ struct elf_aarch64_obj_tdata
    && elf_tdata (bfd) != NULL				\
    && elf_object_id (bfd) == AARCH64_ELF_DATA)
 
-static bfd_boolean
+static bool
 elfNN_aarch64_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct elf_aarch64_obj_tdata),
@@ -2570,9 +2583,6 @@ struct elf_aarch64_link_hash_entry
 {
   struct elf_link_hash_entry root;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   /* Since PLT entries have variable size, we need to record the
      index into .got.plt instead of recomputing it from the PLT
      offset.  */
@@ -2582,6 +2592,9 @@ struct elf_aarch64_link_hash_entry
      this symbol.  */
   unsigned int got_type;
 
+  /* TRUE if symbol is defined as a protected symbol.  */
+  unsigned int def_protected : 1;
+
   /* A pointer to the most recently used stub hash entry against this
      symbol.  */
   struct elf_aarch64_stub_hash_entry *stub_cache;
@@ -2646,9 +2659,6 @@ struct elf_aarch64_link_hash_table
   /* The bytes of the subsequent PLT entry.  */
   const bfd_byte *plt_entry;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* For convenience in allocate_dynrelocs.  */
   bfd *obfd;
 
@@ -2682,23 +2692,17 @@ struct elf_aarch64_link_hash_table
   unsigned int top_index;
   asection **input_list;
 
+  /* True when two stubs are added where one targets the other, happens
+     when BTI stubs are inserted and then the stub layout must not change
+     during elfNN_aarch64_build_stubs.  */
+  bool has_double_stub;
+
   /* JUMP_SLOT relocs for variant PCS symbols may be present.  */
   int variant_pcs;
 
-  /* The offset into splt of the PLT entry for the TLS descriptor
-     resolver.  Special values are 0, if not necessary (or not found
-     to be necessary yet), and -1 if needed but not determined
-     yet.  */
-  bfd_vma tlsdesc_plt;
-
   /* The number of bytes in the PLT enty for the TLS descriptor.  */
   bfd_size_type tlsdesc_plt_entry_size;
 
-  /* The GOT offset for the lazy trampoline.  Communicated to the
-     loader via DT_TLSDESC_GOT.  The magic value (bfd_vma) -1
-     indicates an offset is not allocated.  */
-  bfd_vma dt_tlsdesc_got;
-
   /* Used by local STT_GNU_IFUNC symbols.  */
   htab_t loc_hash_table;
   void * loc_hash_memory;
@@ -2728,8 +2732,8 @@ elfNN_aarch64_link_hash_newfunc (struct
 				     table, string));
   if (ret != NULL)
     {
-      ret->dyn_relocs = NULL;
       ret->got_type = GOT_UNKNOWN;
+      ret->def_protected = 0;
       ret->plt_got_offset = (bfd_vma) - 1;
       ret->stub_cache = NULL;
       ret->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
@@ -2763,14 +2767,9 @@ stub_hash_newfunc (struct bfd_hash_entry
 
       /* Initialize the local fields.  */
       eh = (struct elf_aarch64_stub_hash_entry *) entry;
-      eh->adrp_offset = 0;
-      eh->stub_sec = NULL;
-      eh->stub_offset = 0;
-      eh->target_value = 0;
-      eh->target_section = NULL;
-      eh->stub_type = aarch64_stub_none;
-      eh->h = NULL;
-      eh->id_sec = NULL;
+      memset (&eh->stub_sec, 0,
+	      (sizeof (struct elf_aarch64_stub_hash_entry)
+	       - offsetof (struct elf_aarch64_stub_hash_entry, stub_sec)));
     }
 
   return entry;
@@ -2807,7 +2806,7 @@ elfNN_aarch64_local_htab_eq (const void
 static struct elf_link_hash_entry *
 elfNN_aarch64_get_local_sym_hash (struct elf_aarch64_link_hash_table *htab,
 				  bfd *abfd, const Elf_Internal_Rela *rel,
-				  bfd_boolean create)
+				  bool create)
 {
   struct elf_aarch64_link_hash_entry e, *ret;
   asection *sec = abfd->sections;
@@ -2855,37 +2854,6 @@ elfNN_aarch64_copy_indirect_symbol (stru
   edir = (struct elf_aarch64_link_hash_entry *) dir;
   eind = (struct elf_aarch64_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL;)
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect)
     {
       /* Copy over PLT info.  */
@@ -2903,11 +2871,18 @@ elfNN_aarch64_copy_indirect_symbol (stru
 
 static void
 elfNN_aarch64_merge_symbol_attribute (struct elf_link_hash_entry *h,
-				      const Elf_Internal_Sym *isym,
-				      bfd_boolean definition ATTRIBUTE_UNUSED,
-				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
+				      unsigned int st_other,
+				      bool definition,
+				      bool dynamic ATTRIBUTE_UNUSED)
 {
-  unsigned int isym_sto = isym->st_other & ~ELF_ST_VISIBILITY (-1);
+  if (definition)
+    {
+      struct elf_aarch64_link_hash_entry *eh
+	  = (struct elf_aarch64_link_hash_entry *)h;
+      eh->def_protected = ELF_ST_VISIBILITY (st_other) == STV_PROTECTED;
+    }
+
+  unsigned int isym_sto = st_other & ~ELF_ST_VISIBILITY (-1);
   unsigned int h_sto = h->other & ~ELF_ST_VISIBILITY (-1);
 
   if (isym_sto == h_sto)
@@ -2947,7 +2922,7 @@ static struct bfd_link_hash_table *
 elfNN_aarch64_link_hash_table_create (bfd *abfd)
 {
   struct elf_aarch64_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct elf_aarch64_link_hash_table);
+  size_t amt = sizeof (struct elf_aarch64_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -2967,7 +2942,7 @@ elfNN_aarch64_link_hash_table_create (bf
   ret->plt_entry = elfNN_aarch64_small_plt_entry;
   ret->tlsdesc_plt_entry_size = PLT_TLSDESC_ENTRY_SIZE;
   ret->obfd = abfd;
-  ret->dt_tlsdesc_got = (bfd_vma) - 1;
+  ret->root.tlsdesc_got = (bfd_vma) - 1;
 
   if (!bfd_hash_table_init (&ret->stub_hash_table, stub_hash_newfunc,
 			    sizeof (struct elf_aarch64_stub_hash_entry)))
@@ -2993,7 +2968,7 @@ elfNN_aarch64_link_hash_table_create (bf
 
 /* Perform relocation R_TYPE.  Returns TRUE upon success, FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 aarch64_relocate (unsigned int r_type, bfd *input_bfd, asection *input_section,
 		  bfd_vma offset, bfd_vma value)
 {
@@ -3006,20 +2981,12 @@ aarch64_relocate (unsigned int r_type, b
 
   r_type = elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type);
   value = _bfd_aarch64_elf_resolve_relocation (input_bfd, r_type, place,
-					       value, 0, FALSE);
+					       value, 0, false);
   return _bfd_aarch64_elf_put_addend (input_bfd,
 				      input_section->contents + offset, r_type,
 				      howto, value) == bfd_reloc_ok;
 }
 
-static enum elf_aarch64_stub_type
-aarch64_select_branch_stub (bfd_vma value, bfd_vma place)
-{
-  if (aarch64_valid_for_adrp_p (value, place))
-    return aarch64_stub_adrp_branch;
-  return aarch64_stub_long_branch;
-}
-
 /* Determine the type of stub needed, if any, for a call.  */
 
 static enum elf_aarch64_stub_type
@@ -3075,21 +3042,21 @@ elfNN_aarch64_stub_name (const asection
       len = 8 + 1 + strlen (hash->root.root.root.string) + 1 + 16 + 1;
       stub_name = bfd_malloc (len);
       if (stub_name != NULL)
-	snprintf (stub_name, len, "%08x_%s+%" BFD_VMA_FMT "x",
+	snprintf (stub_name, len, "%08x_%s+%" PRIx64,
 		  (unsigned int) input_section->id,
 		  hash->root.root.root.string,
-		  rel->r_addend);
+		  (uint64_t) rel->r_addend);
     }
   else
     {
       len = 8 + 1 + 8 + 1 + 8 + 1 + 16 + 1;
       stub_name = bfd_malloc (len);
       if (stub_name != NULL)
-	snprintf (stub_name, len, "%08x_%x:%x+%" BFD_VMA_FMT "x",
+	snprintf (stub_name, len, "%08x_%x:%x+%" PRIx64,
 		  (unsigned int) input_section->id,
 		  (unsigned int) sym_sec->id,
 		  (unsigned int) ELFNN_R_SYM (rel->r_info),
-		  rel->r_addend);
+		  (uint64_t) rel->r_addend);
     }
 
   return stub_name;
@@ -3099,13 +3066,13 @@ elfNN_aarch64_stub_name (const asection
    executable PLT slots where the executable never takes the address of those
    functions, the function symbols are not added to the hash table.  */
 
-static bfd_boolean
+static bool
 elf_aarch64_hash_symbol (struct elf_link_hash_entry *h)
 {
   if (h->plt.offset != (bfd_vma) -1
       && !h->def_regular
       && !h->pointer_equality_needed)
-    return FALSE;
+    return false;
 
   return _bfd_elf_hash_symbol (h);
 }
@@ -3150,7 +3117,7 @@ elfNN_aarch64_get_stub_entry (const asec
 	return NULL;
 
       stub_entry = aarch64_stub_hash_lookup (&htab->stub_hash_table,
-					     stub_name, FALSE, FALSE);
+					     stub_name, false, false);
       if (h != NULL)
 	h->stub_cache = stub_entry;
 
@@ -3229,7 +3196,7 @@ _bfd_aarch64_add_stub_entry_in_group (co
 
   /* Enter this entry into the linker stub hash table.  */
   stub_entry = aarch64_stub_hash_lookup (&htab->stub_hash_table, stub_name,
-					 TRUE, FALSE);
+					 true, false);
   if (stub_entry == NULL)
     {
       /* xgettext:c-format */
@@ -3261,7 +3228,7 @@ _bfd_aarch64_add_stub_entry_after (const
   if (htab->fix_erratum_843419 & ERRAT_ADRP)
     stub_sec = _bfd_aarch64_get_stub_for_link_section (link_section, htab);
   stub_entry = aarch64_stub_hash_lookup (&htab->stub_hash_table, stub_name,
-					 TRUE, FALSE);
+					 true, false);
   if (stub_entry == NULL)
     {
       _bfd_error_handler (_("cannot create stub entry %s"), stub_name);
@@ -3276,9 +3243,9 @@ _bfd_aarch64_add_stub_entry_after (const
 }
 
 
-static bfd_boolean
+static bool
 aarch64_build_one_stub (struct bfd_hash_entry *gen_entry,
-			void *in_arg ATTRIBUTE_UNUSED)
+			void *in_arg)
 {
   struct elf_aarch64_stub_hash_entry *stub_entry;
   asection *stub_sec;
@@ -3289,14 +3256,33 @@ aarch64_build_one_stub (struct bfd_hash_
   bfd_vma veneer_entry_loc;
   bfd_signed_vma branch_offset = 0;
   unsigned int template_size;
+  unsigned int pad_size = 0;
   const uint32_t *template;
   unsigned int i;
+  struct bfd_link_info *info;
+  struct elf_aarch64_link_hash_table *htab;
 
   /* Massage our args to the form they really have.  */
   stub_entry = (struct elf_aarch64_stub_hash_entry *) gen_entry;
 
+  info = (struct bfd_link_info *) in_arg;
+  htab = elf_aarch64_hash_table (info);
+
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (stub_entry->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without "
+			      "--enable-non-contiguous-regions.\n"),
+			    stub_entry->target_section);
+
   stub_sec = stub_entry->stub_sec;
 
+  /* The layout must not change when a stub may be the target of another.  */
+  if (htab->has_double_stub)
+    BFD_ASSERT (stub_entry->stub_offset == stub_sec->size);
+
   /* Make a note of the offset within the stubs for this entry.  */
   stub_entry->stub_offset = stub_sec->size;
   loc = stub_sec->contents + stub_entry->stub_offset;
@@ -3315,7 +3301,14 @@ aarch64_build_one_stub (struct bfd_hash_
 
       /* See if we can relax the stub.  */
       if (aarch64_valid_for_adrp_p (sym_value, place))
-	stub_entry->stub_type = aarch64_select_branch_stub (sym_value, place);
+	{
+	  stub_entry->stub_type = aarch64_stub_adrp_branch;
+
+	  /* Avoid the relaxation changing the layout.  */
+	  if (htab->has_double_stub)
+	    pad_size = sizeof (aarch64_long_branch_stub)
+		       - sizeof (aarch64_adrp_branch_stub);
+	}
     }
 
   switch (stub_entry->stub_type)
@@ -3328,6 +3321,10 @@ aarch64_build_one_stub (struct bfd_hash_
       template = aarch64_long_branch_stub;
       template_size = sizeof (aarch64_long_branch_stub);
       break;
+    case aarch64_stub_bti_direct_branch:
+      template = aarch64_bti_direct_branch_stub;
+      template_size = sizeof (aarch64_bti_direct_branch_stub);
+      break;
     case aarch64_stub_erratum_835769_veneer:
       template = aarch64_erratum_835769_stub;
       template_size = sizeof (aarch64_erratum_835769_stub);
@@ -3346,6 +3343,7 @@ aarch64_build_one_stub (struct bfd_hash_
       loc += 4;
     }
 
+  template_size += pad_size;
   template_size = (template_size + 7) & ~7;
   stub_sec->size += template_size;
 
@@ -3371,6 +3369,12 @@ aarch64_build_one_stub (struct bfd_hash_
 	BFD_FAIL ();
       break;
 
+    case aarch64_stub_bti_direct_branch:
+      if (!aarch64_relocate (AARCH64_R (JUMP26), stub_bfd, stub_sec,
+			     stub_entry->stub_offset + 4, sym_value))
+	BFD_FAIL ();
+      break;
+
     case aarch64_stub_erratum_835769_veneer:
       veneered_insn_loc = stub_entry->target_section->output_section->vma
 			  + stub_entry->target_section->output_offset
@@ -3397,13 +3401,14 @@ aarch64_build_one_stub (struct bfd_hash_
       abort ();
     }
 
-  return TRUE;
+  return true;
 }
 
 /* As above, but don't actually build the stub.  Just bump offset so
-   we know stub section sizes.  */
+   we know stub section sizes and record the offset for each stub so
+   a stub can target another stub (needed for BTI direct branch stub).  */
 
-static bfd_boolean
+static bool
 aarch64_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 {
   struct elf_aarch64_stub_hash_entry *stub_entry;
@@ -3422,13 +3427,16 @@ aarch64_size_one_stub (struct bfd_hash_e
     case aarch64_stub_long_branch:
       size = sizeof (aarch64_long_branch_stub);
       break;
+    case aarch64_stub_bti_direct_branch:
+      size = sizeof (aarch64_bti_direct_branch_stub);
+      break;
     case aarch64_stub_erratum_835769_veneer:
       size = sizeof (aarch64_erratum_835769_stub);
       break;
     case aarch64_stub_erratum_843419_veneer:
       {
 	if (htab->fix_erratum_843419 == ERRAT_ADR)
-	  return TRUE;
+	  return true;
 	size = sizeof (aarch64_erratum_843419_stub);
       }
       break;
@@ -3437,8 +3445,18 @@ aarch64_size_one_stub (struct bfd_hash_e
     }
 
   size = (size + 7) & ~7;
+  stub_entry->stub_offset = stub_entry->stub_sec->size;
   stub_entry->stub_sec->size += size;
-  return TRUE;
+  return true;
+}
+
+/* Output is BTI compatible.  */
+
+static bool
+elf_aarch64_bti_p (bfd *output_bfd)
+{
+  uint32_t prop = elf_aarch64_tdata (output_bfd)->gnu_and_prop;
+  return prop & GNU_PROPERTY_AARCH64_FEATURE_1_BTI;
 }
 
 /* External entry points for sizing and building linker stubs.  */
@@ -3456,11 +3474,11 @@ elfNN_aarch64_setup_section_lists (bfd *
   unsigned int top_id, top_index;
   asection *section;
   asection **input_list, **list;
-  bfd_size_type amt;
+  size_t amt;
   struct elf_aarch64_link_hash_table *htab =
     elf_aarch64_hash_table (info);
 
-  if (!is_elf_hash_table (htab))
+  if (!is_elf_hash_table (&htab->root.root))
     return 0;
 
   /* Count the number of input BFDs and find the top input section id.  */
@@ -3534,7 +3552,7 @@ elfNN_aarch64_next_input_section (struct
     {
       asection **list = htab->input_list + isec->output_section->index;
 
-      if (*list != bfd_abs_section_ptr)
+      if (*list != bfd_abs_section_ptr && (isec->flags & SEC_CODE) != 0)
 	{
 	  /* Steal the link_sec pointer for our list.  */
 	  /* This happens to make the list in reverse order,
@@ -3555,68 +3573,145 @@ elfNN_aarch64_next_input_section (struct
 static void
 group_sections (struct elf_aarch64_link_hash_table *htab,
 		bfd_size_type stub_group_size,
-		bfd_boolean stubs_always_before_branch)
+		bool stubs_always_after_branch)
 {
-  asection **list = htab->input_list + htab->top_index;
+  asection **list = htab->input_list;
 
   do
     {
       asection *tail = *list;
+      asection *head;
 
       if (tail == bfd_abs_section_ptr)
 	continue;
 
+      /* Reverse the list: we must avoid placing stubs at the
+	 beginning of the section because the beginning of the text
+	 section may be required for an interrupt vector in bare metal
+	 code.  */
+#define NEXT_SEC PREV_SEC
+      head = NULL;
       while (tail != NULL)
 	{
-	  asection *curr;
-	  asection *prev;
-	  bfd_size_type total;
+	  /* Pop from tail.  */
+	  asection *item = tail;
+	  tail = PREV_SEC (item);
 
-	  curr = tail;
-	  total = tail->size;
-	  while ((prev = PREV_SEC (curr)) != NULL
-		 && ((total += curr->output_offset - prev->output_offset)
-		     < stub_group_size))
-	    curr = prev;
+	  /* Push on head.  */
+	  NEXT_SEC (item) = head;
+	  head = item;
+	}
 
-	  /* OK, the size from the start of CURR to the end is less
+      while (head != NULL)
+	{
+	  asection *curr;
+	  asection *next;
+	  bfd_vma stub_group_start = head->output_offset;
+	  bfd_vma end_of_next;
+
+	  curr = head;
+	  while (NEXT_SEC (curr) != NULL)
+	    {
+	      next = NEXT_SEC (curr);
+	      end_of_next = next->output_offset + next->size;
+	      if (end_of_next - stub_group_start >= stub_group_size)
+		/* End of NEXT is too far from start, so stop.  */
+		break;
+	      /* Add NEXT to the group.  */
+	      curr = next;
+	    }
+
+	  /* OK, the size from the start to the start of CURR is less
 	     than stub_group_size and thus can be handled by one stub
-	     section.  (Or the tail section is itself larger than
+	     section.  (Or the head section is itself larger than
 	     stub_group_size, in which case we may be toast.)
 	     We should really be keeping track of the total size of
 	     stubs added here, as stubs contribute to the final output
 	     section size.  */
 	  do
 	    {
-	      prev = PREV_SEC (tail);
+	      next = NEXT_SEC (head);
 	      /* Set up this stub group.  */
-	      htab->stub_group[tail->id].link_sec = curr;
+	      htab->stub_group[head->id].link_sec = curr;
 	    }
-	  while (tail != curr && (tail = prev) != NULL);
+	  while (head != curr && (head = next) != NULL);
 
 	  /* But wait, there's more!  Input sections up to stub_group_size
-	     bytes before the stub section can be handled by it too.  */
-	  if (!stubs_always_before_branch)
+	     bytes after the stub section can be handled by it too.  */
+	  if (!stubs_always_after_branch)
 	    {
-	      total = 0;
-	      while (prev != NULL
-		     && ((total += tail->output_offset - prev->output_offset)
-			 < stub_group_size))
+	      stub_group_start = curr->output_offset + curr->size;
+
+	      while (next != NULL)
 		{
-		  tail = prev;
-		  prev = PREV_SEC (tail);
-		  htab->stub_group[tail->id].link_sec = curr;
+		  end_of_next = next->output_offset + next->size;
+		  if (end_of_next - stub_group_start >= stub_group_size)
+		    /* End of NEXT is too far from stubs, so stop.  */
+		    break;
+		  /* Add NEXT to the stub group.  */
+		  head = next;
+		  next = NEXT_SEC (head);
+		  htab->stub_group[head->id].link_sec = curr;
 		}
 	    }
-	  tail = prev;
+	  head = next;
 	}
     }
-  while (list-- != htab->input_list);
+  while (list++ != htab->input_list + htab->top_index);
 
   free (htab->input_list);
 }
 
 #undef PREV_SEC
+#undef PREV_SEC
+
+#define AARCH64_HINT(insn) (((insn) & 0xfffff01f) == 0xd503201f)
+#define AARCH64_PACIASP 0xd503233f
+#define AARCH64_PACIBSP 0xd503237f
+#define AARCH64_BTI_C   0xd503245f
+#define AARCH64_BTI_J   0xd503249f
+#define AARCH64_BTI_JC  0xd50324df
+
+/* True if the inserted stub does not break BTI compatibility.  */
+
+static bool
+aarch64_bti_stub_p (struct bfd_link_info *info,
+		    struct elf_aarch64_stub_hash_entry *stub_entry)
+{
+  /* Stubs without indirect branch are BTI compatible.  */
+  if (stub_entry->stub_type != aarch64_stub_adrp_branch
+      && stub_entry->stub_type != aarch64_stub_long_branch)
+    return true;
+
+  /* Return true if the target instruction is compatible with BR x16.  */
+
+  struct elf_aarch64_link_hash_table *globals = elf_aarch64_hash_table (info);
+  asection *section = stub_entry->target_section;
+  bfd_byte loc[4];
+  file_ptr off = stub_entry->target_value;
+  bfd_size_type count = sizeof (loc);
+
+  /* PLT code is not generated yet, so treat it specially.
+     Note: Checking elf_aarch64_obj_tdata.plt_type & PLT_BTI is not
+     enough because it only implies BTI in the PLT0 and tlsdesc PLT
+     entries. Normal PLT entries don't have BTI in a shared library
+     (because such PLT is normally not called indirectly and adding
+     the BTI when a stub targets a PLT would change the PLT layout
+     and it's too late for that here).  */
+  if (section == globals->root.splt)
+    memcpy (loc, globals->plt_entry, count);
+  else if (!bfd_get_section_contents (section->owner, section, loc, off, count))
+    return false;
+
+  uint32_t insn = bfd_getl32 (loc);
+  if (!AARCH64_HINT (insn))
+    return false;
+  return insn == AARCH64_BTI_C
+	 || insn == AARCH64_PACIASP
+	 || insn == AARCH64_BTI_JC
+	 || insn == AARCH64_BTI_J
+	 || insn == AARCH64_PACIBSP;
+}
 
 #define AARCH64_BITS(x, pos, n) (((x) >> (pos)) & ((1 << (n)) - 1))
 
@@ -3663,9 +3758,9 @@ group_sections (struct elf_aarch64_link_
 
    For LD/ST pair instructions PAIR is TRUE, RT and RT2 are returned.  */
 
-static bfd_boolean
+static bool
 aarch64_mem_op_p (uint32_t insn, unsigned int *rt, unsigned int *rt2,
-		  bfd_boolean *pair, bfd_boolean *load)
+		  bool *pair, bool *load)
 {
   uint32_t opcode;
   unsigned int r;
@@ -3676,32 +3771,32 @@ aarch64_mem_op_p (uint32_t insn, unsigne
   /* Bail out quickly if INSN doesn't fall into the load-store
      encoding space.  */
   if (!AARCH64_LDST (insn))
-    return FALSE;
+    return false;
 
-  *pair = FALSE;
-  *load = FALSE;
+  *pair = false;
+  *load = false;
   if (AARCH64_LDST_EX (insn))
     {
       *rt = AARCH64_RT (insn);
       *rt2 = *rt;
       if (AARCH64_BIT (insn, 21) == 1)
 	{
-	  *pair = TRUE;
+	  *pair = true;
 	  *rt2 = AARCH64_RT2 (insn);
 	}
       *load = AARCH64_LD (insn);
-      return TRUE;
+      return true;
     }
   else if (AARCH64_LDST_NAP (insn)
 	   || AARCH64_LDSTP_PI (insn)
 	   || AARCH64_LDSTP_O (insn)
 	   || AARCH64_LDSTP_PRE (insn))
     {
-      *pair = TRUE;
+      *pair = true;
       *rt = AARCH64_RT (insn);
       *rt2 = AARCH64_RT2 (insn);
       *load = AARCH64_LD (insn);
-      return TRUE;
+      return true;
     }
   else if (AARCH64_LDST_PCREL (insn)
 	   || AARCH64_LDST_UI (insn)
@@ -3714,13 +3809,13 @@ aarch64_mem_op_p (uint32_t insn, unsigne
       *rt = AARCH64_RT (insn);
       *rt2 = *rt;
       if (AARCH64_LDST_PCREL (insn))
-	*load = TRUE;
+	*load = true;
       opc = AARCH64_BITS (insn, 22, 2);
       v = AARCH64_BIT (insn, 26);
       opc_v = opc | (v << 2);
       *load =  (opc_v == 1 || opc_v == 2 || opc_v == 3
 		|| opc_v == 5 || opc_v == 7);
-      return TRUE;
+      return true;
    }
   else if (AARCH64_LDST_SIMD_M (insn)
 	   || AARCH64_LDST_SIMD_M_PI (insn))
@@ -3750,9 +3845,9 @@ aarch64_mem_op_p (uint32_t insn, unsigne
 	  break;
 
 	default:
-	  return FALSE;
+	  return false;
 	}
-      return TRUE;
+      return true;
     }
   else if (AARCH64_LDST_SIMD_S (insn)
 	   || AARCH64_LDST_SIMD_S_PI (insn))
@@ -3784,17 +3879,17 @@ aarch64_mem_op_p (uint32_t insn, unsigne
 	  break;
 
 	default:
-	  return FALSE;
+	  return false;
 	}
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Return TRUE if INSN is multiply-accumulate.  */
 
-static bfd_boolean
+static bool
 aarch64_mlxl_p (uint32_t insn)
 {
   uint32_t op31 = AARCH64_OP31 (insn);
@@ -3804,9 +3899,9 @@ aarch64_mlxl_p (uint32_t insn)
       /* Exclude MUL instructions which are encoded as a multiple accumulate
 	 with RA = XZR.  */
       && AARCH64_RA (insn) != AARCH64_ZR)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Some early revisions of the Cortex-A53 have an erratum (835769) whereby
@@ -3822,7 +3917,7 @@ aarch64_mlxl_p (uint32_t insn)
    operation (INSN_2).  Return TRUE if an erratum sequence is found, FALSE
    if INSN_1 and INSN_2 are safe.  */
 
-static bfd_boolean
+static bool
 aarch64_erratum_sequence (uint32_t insn_1, uint32_t insn_2)
 {
   uint32_t rt;
@@ -3830,8 +3925,8 @@ aarch64_erratum_sequence (uint32_t insn_
   uint32_t rn;
   uint32_t rm;
   uint32_t ra;
-  bfd_boolean pair;
-  bfd_boolean load;
+  bool pair;
+  bool load;
 
   if (aarch64_mlxl_p (insn_2)
       && aarch64_mem_op_p (insn_1, &rt, &rt2, &pair, &load))
@@ -3839,7 +3934,7 @@ aarch64_erratum_sequence (uint32_t insn_
       /* Any SIMD memory op is independent of the subsequent MLA
 	 by definition of the erratum.  */
       if (AARCH64_BIT (insn_1, 26))
-	return TRUE;
+	return true;
 
       /* If not SIMD, check for integer memory ops and MLA relationship.  */
       rn = AARCH64_RN (insn_2);
@@ -3851,14 +3946,14 @@ aarch64_erratum_sequence (uint32_t insn_
       if (load &&
 	  (rt == rn || rt == rm || rt == ra
 	   || (pair && (rt2 == rn || rt2 == rm || rt2 == ra))))
-	return FALSE;
+	return false;
 
       /* We conservatively put out stubs for all other cases (including
 	 writebacks).  */
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Used to order a list of mapping symbols by address.  */
@@ -3899,7 +3994,7 @@ _bfd_aarch64_erratum_835769_stub_name (u
 
    Return TRUE else FALSE on abnormal termination.  */
 
-static bfd_boolean
+static bool
 _bfd_aarch64_erratum_835769_scan (bfd *input_bfd,
 				  struct bfd_link_info *info,
 				  unsigned int *num_fixes_p)
@@ -3909,7 +4004,7 @@ _bfd_aarch64_erratum_835769_scan (bfd *i
   unsigned int num_fixes = *num_fixes_p;
 
   if (htab == NULL)
-    return TRUE;
+    return true;
 
   for (section = input_bfd->sections;
        section != NULL;
@@ -3929,12 +4024,13 @@ _bfd_aarch64_erratum_835769_scan (bfd *i
       if (elf_section_data (section)->this_hdr.contents != NULL)
 	contents = elf_section_data (section)->this_hdr.contents;
       else if (! bfd_malloc_and_get_section (input_bfd, section, &contents))
-	return FALSE;
+	return false;
 
       sec_data = elf_aarch64_section_data (section);
 
-      qsort (sec_data->map, sec_data->mapcount,
-	     sizeof (elf_aarch64_section_map), elf_aarch64_compare_mapping);
+      if (sec_data->mapcount)
+	qsort (sec_data->map, sec_data->mapcount,
+	       sizeof (elf_aarch64_section_map), elf_aarch64_compare_mapping);
 
       for (span = 0; span < sec_data->mapcount; span++)
 	{
@@ -3958,13 +4054,13 @@ _bfd_aarch64_erratum_835769_scan (bfd *i
 		  struct elf_aarch64_stub_hash_entry *stub_entry;
 		  char *stub_name = _bfd_aarch64_erratum_835769_stub_name (num_fixes);
 		  if (! stub_name)
-		    return FALSE;
+		    return false;
 
 		  stub_entry = _bfd_aarch64_add_stub_entry_in_group (stub_name,
 								     section,
 								     htab);
 		  if (! stub_entry)
-		    return FALSE;
+		    return false;
 
 		  stub_entry->stub_type = aarch64_stub_erratum_835769_veneer;
 		  stub_entry->target_section = section;
@@ -3981,13 +4077,13 @@ _bfd_aarch64_erratum_835769_scan (bfd *i
 
   *num_fixes_p = num_fixes;
 
-  return TRUE;
+  return true;
 }
 
 
 /* Test if instruction INSN is ADRP.  */
 
-static bfd_boolean
+static bool
 _bfd_aarch64_adrp_p (uint32_t insn)
 {
   return ((insn & AARCH64_ADRP_OP_MASK) == AARCH64_ADRP_OP);
@@ -3996,14 +4092,14 @@ _bfd_aarch64_adrp_p (uint32_t insn)
 
 /* Helper predicate to look for cortex-a53 erratum 843419 sequence 1.  */
 
-static bfd_boolean
+static bool
 _bfd_aarch64_erratum_843419_sequence_p (uint32_t insn_1, uint32_t insn_2,
 					uint32_t insn_3)
 {
   uint32_t rt;
   uint32_t rt2;
-  bfd_boolean pair;
-  bfd_boolean load;
+  bool pair;
+  bool load;
 
   return (aarch64_mem_op_p (insn_2, &rt, &rt2, &pair, &load)
 	  && (!pair
@@ -4021,7 +4117,7 @@ _bfd_aarch64_erratum_843419_sequence_p (
    instruction in the sequence.
  */
 
-static bfd_boolean
+static bool
 _bfd_aarch64_erratum_843419_p (bfd_byte *contents, bfd_vma vma,
 			       bfd_vma i, bfd_vma span_end,
 			       bfd_vma *p_veneer_i)
@@ -4029,35 +4125,35 @@ _bfd_aarch64_erratum_843419_p (bfd_byte
   uint32_t insn_1 = bfd_getl32 (contents + i);
 
   if (!_bfd_aarch64_adrp_p (insn_1))
-    return FALSE;
+    return false;
 
   if (span_end < i + 12)
-    return FALSE;
+    return false;
 
   uint32_t insn_2 = bfd_getl32 (contents + i + 4);
   uint32_t insn_3 = bfd_getl32 (contents + i + 8);
 
   if ((vma & 0xfff) != 0xff8 && (vma & 0xfff) != 0xffc)
-    return FALSE;
+    return false;
 
   if (_bfd_aarch64_erratum_843419_sequence_p (insn_1, insn_2, insn_3))
     {
       *p_veneer_i = i + 8;
-      return TRUE;
+      return true;
     }
 
   if (span_end < i + 16)
-    return FALSE;
+    return false;
 
   uint32_t insn_4 = bfd_getl32 (contents + i + 12);
 
   if (_bfd_aarch64_erratum_843419_sequence_p (insn_1, insn_2, insn_4))
     {
       *p_veneer_i = i + 12;
-      return TRUE;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 
@@ -4076,7 +4172,10 @@ _bfd_aarch64_resize_stubs (struct elf_aa
       /* Ignore non-stub sections.  */
       if (!strstr (section->name, STUB_SUFFIX))
 	continue;
-      section->size = 0;
+
+      /* Add space for a branch.  Add 8 bytes to keep section 8 byte aligned,
+	 as long branch stubs contain a 64-bit address.  */
+      section->size = 8;
     }
 
   bfd_hash_traverse (&htab->stub_hash_table, aarch64_size_one_stub, htab);
@@ -4087,10 +4186,9 @@ _bfd_aarch64_resize_stubs (struct elf_aa
       if (!strstr (section->name, STUB_SUFFIX))
 	continue;
 
-      /* Add space for a branch.  Add 8 bytes to keep section 8 byte aligned,
-	 as long branch stubs contain a 64-bit address.  */
-      if (section->size)
-	section->size += 8;
+      /* Empty stub section.  */
+      if (section->size == 8)
+	section->size = 0;
 
       /* Ensure all stub sections have a size which is a multiple of
 	 4096.  This is important in order to ensure that the insertion
@@ -4114,10 +4212,10 @@ _bfd_aarch64_erratum_843419_stub_name (a
   char *stub_name = bfd_malloc (len);
 
   if (stub_name != NULL)
-    snprintf (stub_name, len, "e843419@%04x_%08x_%" BFD_VMA_FMT "x",
+    snprintf (stub_name, len, "e843419@%04x_%08x_%" PRIx64,
 	      input_section->owner->id,
 	      input_section->id,
-	      offset);
+	      (uint64_t) offset);
   return stub_name;
 }
 
@@ -4128,7 +4226,7 @@ _bfd_aarch64_erratum_843419_stub_name (a
 
     Returns TRUE on success.  */
 
-static bfd_boolean
+static bool
 _bfd_aarch64_erratum_843419_fixup (uint32_t insn,
 				   bfd_vma adrp_offset,
 				   bfd_vma ldst_offset,
@@ -4141,13 +4239,13 @@ _bfd_aarch64_erratum_843419_fixup (uint3
 
   stub_name = _bfd_aarch64_erratum_843419_stub_name (section, ldst_offset);
   if (stub_name == NULL)
-    return FALSE;
+    return false;
   stub_entry = aarch64_stub_hash_lookup (&htab->stub_hash_table, stub_name,
-					 FALSE, FALSE);
+					 false, false);
   if (stub_entry)
     {
       free (stub_name);
-      return TRUE;
+      return true;
     }
 
   /* We always place an 843419 workaround veneer in the stub section
@@ -4165,7 +4263,7 @@ _bfd_aarch64_erratum_843419_fixup (uint3
   if (stub_entry == NULL)
     {
       free (stub_name);
-      return FALSE;
+      return false;
     }
 
   stub_entry->adrp_offset = adrp_offset;
@@ -4175,7 +4273,7 @@ _bfd_aarch64_erratum_843419_fixup (uint3
   stub_entry->veneered_insn = insn;
   stub_entry->output_name = stub_name;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -4188,21 +4286,21 @@ _bfd_aarch64_erratum_843419_fixup (uint3
    Return TRUE on successful scan, FALSE on failure to scan.
  */
 
-static bfd_boolean
+static bool
 _bfd_aarch64_erratum_843419_scan (bfd *input_bfd, asection *section,
 				  struct bfd_link_info *info)
 {
   struct elf_aarch64_link_hash_table *htab = elf_aarch64_hash_table (info);
 
   if (htab == NULL)
-    return TRUE;
+    return true;
 
   if (elf_section_type (section) != SHT_PROGBITS
       || (elf_section_flags (section) & SHF_EXECINSTR) == 0
       || (section->flags & SEC_EXCLUDE) != 0
       || (section->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
       || (section->output_section == bfd_abs_section_ptr))
-    return TRUE;
+    return true;
 
   do
     {
@@ -4213,12 +4311,13 @@ _bfd_aarch64_erratum_843419_scan (bfd *i
       if (elf_section_data (section)->this_hdr.contents != NULL)
 	contents = elf_section_data (section)->this_hdr.contents;
       else if (! bfd_malloc_and_get_section (input_bfd, section, &contents))
-	return FALSE;
+	return false;
 
       sec_data = elf_aarch64_section_data (section);
 
-      qsort (sec_data->map, sec_data->mapcount,
-	     sizeof (elf_aarch64_section_map), elf_aarch64_compare_mapping);
+      if (sec_data->mapcount)
+	qsort (sec_data->map, sec_data->mapcount,
+	       sizeof (elf_aarch64_section_map), elf_aarch64_compare_mapping);
 
       for (span = 0; span < sec_data->mapcount; span++)
 	{
@@ -4246,7 +4345,7 @@ _bfd_aarch64_erratum_843419_scan (bfd *i
 
 		  if (!_bfd_aarch64_erratum_843419_fixup (insn, i, veneer_i,
 							  section, info))
-		    return FALSE;
+		    return false;
 		}
 	    }
 	}
@@ -4256,17 +4355,388 @@ _bfd_aarch64_erratum_843419_scan (bfd *i
     }
   while (0);
 
-  return TRUE;
+  return true;
 }
 
 
-/* Determine and set the size of the stub section for a final link.
+/* Add stub entries for calls.
 
    The basic idea here is to examine all the relocations looking for
    PC-relative calls to a target that is unreachable with a "bl"
    instruction.  */
 
-bfd_boolean
+static bool
+_bfd_aarch64_add_call_stub_entries (bool *stub_changed, bfd *output_bfd,
+				    struct bfd_link_info *info)
+{
+  struct elf_aarch64_link_hash_table *htab = elf_aarch64_hash_table (info);
+  bool need_bti = elf_aarch64_bti_p (output_bfd);
+  bfd *input_bfd;
+
+  for (input_bfd = info->input_bfds; input_bfd != NULL;
+       input_bfd = input_bfd->link.next)
+    {
+      Elf_Internal_Shdr *symtab_hdr;
+      asection *section;
+      Elf_Internal_Sym *local_syms = NULL;
+
+      if (!is_aarch64_elf (input_bfd)
+	  || (input_bfd->flags & BFD_LINKER_CREATED) != 0)
+	continue;
+
+      /* We'll need the symbol table in a second.  */
+      symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+      if (symtab_hdr->sh_info == 0)
+	continue;
+
+      /* Walk over each section attached to the input bfd.  */
+      for (section = input_bfd->sections;
+	   section != NULL; section = section->next)
+	{
+	  Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
+
+	  /* If there aren't any relocs, then there's nothing more to do.  */
+	  if ((section->flags & SEC_RELOC) == 0
+	      || section->reloc_count == 0
+	      || (section->flags & SEC_CODE) == 0)
+	    continue;
+
+	  /* If this section is a link-once section that will be
+	     discarded, then don't create any stubs.  */
+	  if (section->output_section == NULL
+	      || section->output_section->owner != output_bfd)
+	    continue;
+
+	  /* Get the relocs.  */
+	  internal_relocs
+	    = _bfd_elf_link_read_relocs (input_bfd, section, NULL,
+					 NULL, info->keep_memory);
+	  if (internal_relocs == NULL)
+	    goto error_ret_free_local;
+
+	  /* Now examine each relocation.  */
+	  irela = internal_relocs;
+	  irelaend = irela + section->reloc_count;
+	  for (; irela < irelaend; irela++)
+	    {
+	      unsigned int r_type, r_indx;
+	      enum elf_aarch64_stub_type stub_type;
+	      struct elf_aarch64_stub_hash_entry *stub_entry;
+	      struct elf_aarch64_stub_hash_entry *stub_entry_bti;
+	      asection *sym_sec;
+	      bfd_vma sym_value;
+	      bfd_vma destination;
+	      struct elf_aarch64_link_hash_entry *hash;
+	      const char *sym_name;
+	      char *stub_name;
+	      char *stub_name_bti;
+	      const asection *id_sec;
+	      const asection *id_sec_bti;
+	      unsigned char st_type;
+	      bfd_size_type len;
+
+	      r_type = ELFNN_R_TYPE (irela->r_info);
+	      r_indx = ELFNN_R_SYM (irela->r_info);
+
+	      if (r_type >= (unsigned int) R_AARCH64_end)
+		{
+		  bfd_set_error (bfd_error_bad_value);
+		error_ret_free_internal:
+		  if (elf_section_data (section)->relocs == NULL)
+		    free (internal_relocs);
+		  goto error_ret_free_local;
+		}
+
+	      /* Only look for stubs on unconditional branch and
+		 branch and link instructions.  */
+	      if (r_type != (unsigned int) AARCH64_R (CALL26)
+		  && r_type != (unsigned int) AARCH64_R (JUMP26))
+		continue;
+
+	      /* Now determine the call target, its name, value,
+		 section.  */
+	      sym_sec = NULL;
+	      sym_value = 0;
+	      destination = 0;
+	      hash = NULL;
+	      sym_name = NULL;
+	      if (r_indx < symtab_hdr->sh_info)
+		{
+		  /* It's a local symbol.  */
+		  Elf_Internal_Sym *sym;
+		  Elf_Internal_Shdr *hdr;
+
+		  if (local_syms == NULL)
+		    {
+		      local_syms
+			= (Elf_Internal_Sym *) symtab_hdr->contents;
+		      if (local_syms == NULL)
+			local_syms
+			  = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
+						  symtab_hdr->sh_info, 0,
+						  NULL, NULL, NULL);
+		      if (local_syms == NULL)
+			goto error_ret_free_internal;
+		    }
+
+		  sym = local_syms + r_indx;
+		  hdr = elf_elfsections (input_bfd)[sym->st_shndx];
+		  sym_sec = hdr->bfd_section;
+		  if (!sym_sec)
+		    /* This is an undefined symbol.  It can never
+		       be resolved.  */
+		    continue;
+
+		  if (ELF_ST_TYPE (sym->st_info) != STT_SECTION)
+		    sym_value = sym->st_value;
+		  destination = (sym_value + irela->r_addend
+				 + sym_sec->output_offset
+				 + sym_sec->output_section->vma);
+		  st_type = ELF_ST_TYPE (sym->st_info);
+		  sym_name
+		    = bfd_elf_string_from_elf_section (input_bfd,
+						       symtab_hdr->sh_link,
+						       sym->st_name);
+		}
+	      else
+		{
+		  int e_indx;
+
+		  e_indx = r_indx - symtab_hdr->sh_info;
+		  hash = ((struct elf_aarch64_link_hash_entry *)
+			  elf_sym_hashes (input_bfd)[e_indx]);
+
+		  while (hash->root.root.type == bfd_link_hash_indirect
+			 || hash->root.root.type == bfd_link_hash_warning)
+		    hash = ((struct elf_aarch64_link_hash_entry *)
+			    hash->root.root.u.i.link);
+
+		  if (hash->root.root.type == bfd_link_hash_defined
+		      || hash->root.root.type == bfd_link_hash_defweak)
+		    {
+		      struct elf_aarch64_link_hash_table *globals =
+			elf_aarch64_hash_table (info);
+		      sym_sec = hash->root.root.u.def.section;
+		      sym_value = hash->root.root.u.def.value;
+		      /* For a destination in a shared library,
+			 use the PLT stub as target address to
+			 decide whether a branch stub is
+			 needed.  */
+		      if (globals->root.splt != NULL && hash != NULL
+			  && hash->root.plt.offset != (bfd_vma) - 1)
+			{
+			  sym_sec = globals->root.splt;
+			  sym_value = hash->root.plt.offset;
+			  if (sym_sec->output_section != NULL)
+			    destination = (sym_value
+					   + sym_sec->output_offset
+					   + sym_sec->output_section->vma);
+			}
+		      else if (sym_sec->output_section != NULL)
+			destination = (sym_value + irela->r_addend
+				       + sym_sec->output_offset
+				       + sym_sec->output_section->vma);
+		    }
+		  else if (hash->root.root.type == bfd_link_hash_undefined
+			   || (hash->root.root.type
+			       == bfd_link_hash_undefweak))
+		    {
+		      /* For a shared library, use the PLT stub as
+			 target address to decide whether a long
+			 branch stub is needed.
+			 For absolute code, they cannot be handled.  */
+		      struct elf_aarch64_link_hash_table *globals =
+			elf_aarch64_hash_table (info);
+
+		      if (globals->root.splt != NULL && hash != NULL
+			  && hash->root.plt.offset != (bfd_vma) - 1)
+			{
+			  sym_sec = globals->root.splt;
+			  sym_value = hash->root.plt.offset;
+			  if (sym_sec->output_section != NULL)
+			    destination = (sym_value
+					   + sym_sec->output_offset
+					   + sym_sec->output_section->vma);
+			}
+		      else
+			continue;
+		    }
+		  else
+		    {
+		      bfd_set_error (bfd_error_bad_value);
+		      goto error_ret_free_internal;
+		    }
+		  st_type = ELF_ST_TYPE (hash->root.type);
+		  sym_name = hash->root.root.root.string;
+		}
+
+	      /* Determine what (if any) linker stub is needed.  */
+	      stub_type = aarch64_type_of_stub (section, irela, sym_sec,
+						st_type, destination);
+	      if (stub_type == aarch64_stub_none)
+		continue;
+
+	      /* Support for grouping stub sections.  */
+	      id_sec = htab->stub_group[section->id].link_sec;
+
+	      /* Get the name of this stub.  */
+	      stub_name = elfNN_aarch64_stub_name (id_sec, sym_sec, hash,
+						   irela);
+	      if (!stub_name)
+		goto error_ret_free_internal;
+
+	      stub_entry =
+		aarch64_stub_hash_lookup (&htab->stub_hash_table,
+					  stub_name, false, false);
+	      if (stub_entry != NULL)
+		{
+		  /* The proper stub has already been created.  */
+		  free (stub_name);
+
+		  /* Always update this stub's target since it may have
+		     changed after layout.  */
+		  stub_entry->target_value = sym_value + irela->r_addend;
+
+		  if (stub_entry->double_stub)
+		    {
+		      /* Update the target of both stubs.  */
+
+		      id_sec_bti = htab->stub_group[sym_sec->id].link_sec;
+		      stub_name_bti =
+			elfNN_aarch64_stub_name (id_sec_bti, sym_sec, hash,
+						 irela);
+		      if (!stub_name_bti)
+			goto error_ret_free_internal;
+		      stub_entry_bti =
+			aarch64_stub_hash_lookup (&htab->stub_hash_table,
+						  stub_name_bti, false, false);
+		      BFD_ASSERT (stub_entry_bti != NULL);
+		      free (stub_name_bti);
+		      stub_entry_bti->target_value = stub_entry->target_value;
+		      stub_entry->target_value = stub_entry_bti->stub_offset;
+		    }
+		  continue;
+		}
+
+	      stub_entry = _bfd_aarch64_add_stub_entry_in_group
+		(stub_name, section, htab);
+	      if (stub_entry == NULL)
+		{
+		  free (stub_name);
+		  goto error_ret_free_internal;
+		}
+
+	      stub_entry->target_value = sym_value + irela->r_addend;
+	      stub_entry->target_section = sym_sec;
+	      stub_entry->stub_type = stub_type;
+	      stub_entry->h = hash;
+	      stub_entry->st_type = st_type;
+
+	      if (sym_name == NULL)
+		sym_name = "unnamed";
+	      len = sizeof (STUB_ENTRY_NAME) + strlen (sym_name);
+	      stub_entry->output_name = bfd_alloc (htab->stub_bfd, len);
+	      if (stub_entry->output_name == NULL)
+		{
+		  free (stub_name);
+		  goto error_ret_free_internal;
+		}
+
+	      snprintf (stub_entry->output_name, len, STUB_ENTRY_NAME,
+			sym_name);
+
+	      /* A stub with indirect jump may break BTI compatibility, so
+		 insert another stub with direct jump near the target then.  */
+	      if (need_bti && !aarch64_bti_stub_p (info, stub_entry))
+		{
+		  id_sec_bti = htab->stub_group[sym_sec->id].link_sec;
+
+		  /* If the stub with indirect jump and the BTI stub are in
+		     the same stub group: change the indirect jump stub into
+		     a BTI stub since a direct branch can reach the target.
+		     The BTI landing pad is still needed in case another
+		     stub indirectly jumps to it.  */
+		  if (id_sec_bti == id_sec)
+		    {
+		      stub_entry->stub_type = aarch64_stub_bti_direct_branch;
+		      goto skip_double_stub;
+		    }
+
+		  stub_entry->double_stub = true;
+		  htab->has_double_stub = true;
+
+		  stub_name_bti =
+		    elfNN_aarch64_stub_name (id_sec_bti, sym_sec, hash, irela);
+		  if (!stub_name_bti)
+		    {
+		      free (stub_name);
+		      goto error_ret_free_internal;
+		    }
+
+		  stub_entry_bti =
+		    aarch64_stub_hash_lookup (&htab->stub_hash_table,
+					      stub_name_bti, false, false);
+		  if (stub_entry_bti != NULL)
+		    BFD_ASSERT (stub_entry_bti->stub_type
+				== aarch64_stub_bti_direct_branch);
+		  else
+		    {
+		      stub_entry_bti =
+			_bfd_aarch64_add_stub_entry_in_group (stub_name_bti,
+							      sym_sec, htab);
+		      if (stub_entry_bti == NULL)
+			{
+			  free (stub_name);
+			  free (stub_name_bti);
+			  goto error_ret_free_internal;
+			}
+
+		      stub_entry_bti->target_value =
+			sym_value + irela->r_addend;
+		      stub_entry_bti->target_section = sym_sec;
+		      stub_entry_bti->stub_type =
+			aarch64_stub_bti_direct_branch;
+		      stub_entry_bti->h = hash;
+		      stub_entry_bti->st_type = st_type;
+
+		      len = sizeof (BTI_STUB_ENTRY_NAME) + strlen (sym_name);
+		      stub_entry_bti->output_name = bfd_alloc (htab->stub_bfd,
+							       len);
+		      if (stub_entry_bti->output_name == NULL)
+			{
+			  free (stub_name);
+			  free (stub_name_bti);
+			  goto error_ret_free_internal;
+			}
+		      snprintf (stub_entry_bti->output_name, len,
+				BTI_STUB_ENTRY_NAME, sym_name);
+		    }
+
+		  /* Update the indirect call stub to target the BTI stub.  */
+		  stub_entry->target_value = 0;
+		  stub_entry->target_section = stub_entry_bti->stub_sec;
+		  stub_entry->stub_type = stub_type;
+		  stub_entry->h = NULL;
+		  stub_entry->st_type = STT_FUNC;
+		}
+skip_double_stub:
+	      *stub_changed = true;
+	    }
+
+	  /* We're done with the internal relocs, free them.  */
+	  if (elf_section_data (section)->relocs == NULL)
+	    free (internal_relocs);
+	}
+    }
+  return true;
+ error_ret_free_local:
+  return false;
+}
+
+
+/* Determine and set the size of the stub section for a final link.  */
+
+bool
 elfNN_aarch64_size_stubs (bfd *output_bfd,
 			  bfd *stub_bfd,
 			  struct bfd_link_info *info,
@@ -4276,8 +4746,7 @@ elfNN_aarch64_size_stubs (bfd *output_bf
 			  void (*layout_sections_again) (void))
 {
   bfd_size_type stub_group_size;
-  bfd_boolean stubs_always_before_branch;
-  bfd_boolean stub_changed = FALSE;
+  bool stubs_always_before_branch;
   struct elf_aarch64_link_hash_table *htab = elf_aarch64_hash_table (info);
   unsigned int num_erratum_835769_fixes = 0;
 
@@ -4313,9 +4782,15 @@ elfNN_aarch64_size_stubs (bfd *output_bf
 
       for (input_bfd = info->input_bfds;
 	   input_bfd != NULL; input_bfd = input_bfd->link.next)
-	if (!_bfd_aarch64_erratum_835769_scan (input_bfd, info,
-					       &num_erratum_835769_fixes))
-	  return FALSE;
+	{
+	  if (!is_aarch64_elf (input_bfd)
+	      || (input_bfd->flags & BFD_LINKER_CREATED) != 0)
+	    continue;
+
+	  if (!_bfd_aarch64_erratum_835769_scan (input_bfd, info,
+						 &num_erratum_835769_fixes))
+	    return false;
+	}
 
       _bfd_aarch64_resize_stubs (htab);
       (*htab->layout_sections_again) ();
@@ -4331,292 +4806,34 @@ elfNN_aarch64_size_stubs (bfd *output_bf
 	{
 	  asection *section;
 
+	  if (!is_aarch64_elf (input_bfd)
+	      || (input_bfd->flags & BFD_LINKER_CREATED) != 0)
+	    continue;
+
 	  for (section = input_bfd->sections;
 	       section != NULL;
 	       section = section->next)
 	    if (!_bfd_aarch64_erratum_843419_scan (input_bfd, section, info))
-	      return FALSE;
+	      return false;
 	}
 
       _bfd_aarch64_resize_stubs (htab);
       (*htab->layout_sections_again) ();
     }
 
-  while (1)
+  for (;;)
     {
-      bfd *input_bfd;
-
-      for (input_bfd = info->input_bfds;
-	   input_bfd != NULL; input_bfd = input_bfd->link.next)
-	{
-	  Elf_Internal_Shdr *symtab_hdr;
-	  asection *section;
-	  Elf_Internal_Sym *local_syms = NULL;
-
-	  /* We'll need the symbol table in a second.  */
-	  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
-	  if (symtab_hdr->sh_info == 0)
-	    continue;
-
-	  /* Walk over each section attached to the input bfd.  */
-	  for (section = input_bfd->sections;
-	       section != NULL; section = section->next)
-	    {
-	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
-
-	      /* If there aren't any relocs, then there's nothing more
-		 to do.  */
-	      if ((section->flags & SEC_RELOC) == 0
-		  || section->reloc_count == 0
-		  || (section->flags & SEC_CODE) == 0)
-		continue;
-
-	      /* If this section is a link-once section that will be
-		 discarded, then don't create any stubs.  */
-	      if (section->output_section == NULL
-		  || section->output_section->owner != output_bfd)
-		continue;
-
-	      /* Get the relocs.  */
-	      internal_relocs
-		= _bfd_elf_link_read_relocs (input_bfd, section, NULL,
-					     NULL, info->keep_memory);
-	      if (internal_relocs == NULL)
-		goto error_ret_free_local;
-
-	      /* Now examine each relocation.  */
-	      irela = internal_relocs;
-	      irelaend = irela + section->reloc_count;
-	      for (; irela < irelaend; irela++)
-		{
-		  unsigned int r_type, r_indx;
-		  enum elf_aarch64_stub_type stub_type;
-		  struct elf_aarch64_stub_hash_entry *stub_entry;
-		  asection *sym_sec;
-		  bfd_vma sym_value;
-		  bfd_vma destination;
-		  struct elf_aarch64_link_hash_entry *hash;
-		  const char *sym_name;
-		  char *stub_name;
-		  const asection *id_sec;
-		  unsigned char st_type;
-		  bfd_size_type len;
-
-		  r_type = ELFNN_R_TYPE (irela->r_info);
-		  r_indx = ELFNN_R_SYM (irela->r_info);
-
-		  if (r_type >= (unsigned int) R_AARCH64_end)
-		    {
-		      bfd_set_error (bfd_error_bad_value);
-		    error_ret_free_internal:
-		      if (elf_section_data (section)->relocs == NULL)
-			free (internal_relocs);
-		      goto error_ret_free_local;
-		    }
-
-		  /* Only look for stubs on unconditional branch and
-		     branch and link instructions.  */
-		  if (r_type != (unsigned int) AARCH64_R (CALL26)
-		      && r_type != (unsigned int) AARCH64_R (JUMP26))
-		    continue;
-
-		  /* Now determine the call target, its name, value,
-		     section.  */
-		  sym_sec = NULL;
-		  sym_value = 0;
-		  destination = 0;
-		  hash = NULL;
-		  sym_name = NULL;
-		  if (r_indx < symtab_hdr->sh_info)
-		    {
-		      /* It's a local symbol.  */
-		      Elf_Internal_Sym *sym;
-		      Elf_Internal_Shdr *hdr;
-
-		      if (local_syms == NULL)
-			{
-			  local_syms
-			    = (Elf_Internal_Sym *) symtab_hdr->contents;
-			  if (local_syms == NULL)
-			    local_syms
-			      = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
-						      symtab_hdr->sh_info, 0,
-						      NULL, NULL, NULL);
-			  if (local_syms == NULL)
-			    goto error_ret_free_internal;
-			}
-
-		      sym = local_syms + r_indx;
-		      hdr = elf_elfsections (input_bfd)[sym->st_shndx];
-		      sym_sec = hdr->bfd_section;
-		      if (!sym_sec)
-			/* This is an undefined symbol.  It can never
-			   be resolved.  */
-			continue;
-
-		      if (ELF_ST_TYPE (sym->st_info) != STT_SECTION)
-			sym_value = sym->st_value;
-		      destination = (sym_value + irela->r_addend
-				     + sym_sec->output_offset
-				     + sym_sec->output_section->vma);
-		      st_type = ELF_ST_TYPE (sym->st_info);
-		      sym_name
-			= bfd_elf_string_from_elf_section (input_bfd,
-							   symtab_hdr->sh_link,
-							   sym->st_name);
-		    }
-		  else
-		    {
-		      int e_indx;
-
-		      e_indx = r_indx - symtab_hdr->sh_info;
-		      hash = ((struct elf_aarch64_link_hash_entry *)
-			      elf_sym_hashes (input_bfd)[e_indx]);
-
-		      while (hash->root.root.type == bfd_link_hash_indirect
-			     || hash->root.root.type == bfd_link_hash_warning)
-			hash = ((struct elf_aarch64_link_hash_entry *)
-				hash->root.root.u.i.link);
-
-		      if (hash->root.root.type == bfd_link_hash_defined
-			  || hash->root.root.type == bfd_link_hash_defweak)
-			{
-			  struct elf_aarch64_link_hash_table *globals =
-			    elf_aarch64_hash_table (info);
-			  sym_sec = hash->root.root.u.def.section;
-			  sym_value = hash->root.root.u.def.value;
-			  /* For a destination in a shared library,
-			     use the PLT stub as target address to
-			     decide whether a branch stub is
-			     needed.  */
-			  if (globals->root.splt != NULL && hash != NULL
-			      && hash->root.plt.offset != (bfd_vma) - 1)
-			    {
-			      sym_sec = globals->root.splt;
-			      sym_value = hash->root.plt.offset;
-			      if (sym_sec->output_section != NULL)
-				destination = (sym_value
-					       + sym_sec->output_offset
-					       +
-					       sym_sec->output_section->vma);
-			    }
-			  else if (sym_sec->output_section != NULL)
-			    destination = (sym_value + irela->r_addend
-					   + sym_sec->output_offset
-					   + sym_sec->output_section->vma);
-			}
-		      else if (hash->root.root.type == bfd_link_hash_undefined
-			       || (hash->root.root.type
-				   == bfd_link_hash_undefweak))
-			{
-			  /* For a shared library, use the PLT stub as
-			     target address to decide whether a long
-			     branch stub is needed.
-			     For absolute code, they cannot be handled.  */
-			  struct elf_aarch64_link_hash_table *globals =
-			    elf_aarch64_hash_table (info);
-
-			  if (globals->root.splt != NULL && hash != NULL
-			      && hash->root.plt.offset != (bfd_vma) - 1)
-			    {
-			      sym_sec = globals->root.splt;
-			      sym_value = hash->root.plt.offset;
-			      if (sym_sec->output_section != NULL)
-				destination = (sym_value
-					       + sym_sec->output_offset
-					       +
-					       sym_sec->output_section->vma);
-			    }
-			  else
-			    continue;
-			}
-		      else
-			{
-			  bfd_set_error (bfd_error_bad_value);
-			  goto error_ret_free_internal;
-			}
-		      st_type = ELF_ST_TYPE (hash->root.type);
-		      sym_name = hash->root.root.root.string;
-		    }
-
-		  /* Determine what (if any) linker stub is needed.  */
-		  stub_type = aarch64_type_of_stub (section, irela, sym_sec,
-						    st_type, destination);
-		  if (stub_type == aarch64_stub_none)
-		    continue;
-
-		  /* Support for grouping stub sections.  */
-		  id_sec = htab->stub_group[section->id].link_sec;
-
-		  /* Get the name of this stub.  */
-		  stub_name = elfNN_aarch64_stub_name (id_sec, sym_sec, hash,
-						       irela);
-		  if (!stub_name)
-		    goto error_ret_free_internal;
-
-		  stub_entry =
-		    aarch64_stub_hash_lookup (&htab->stub_hash_table,
-					      stub_name, FALSE, FALSE);
-		  if (stub_entry != NULL)
-		    {
-		      /* The proper stub has already been created.  */
-		      free (stub_name);
-		      /* Always update this stub's target since it may have
-			 changed after layout.  */
-		      stub_entry->target_value = sym_value + irela->r_addend;
-		      continue;
-		    }
-
-		  stub_entry = _bfd_aarch64_add_stub_entry_in_group
-		    (stub_name, section, htab);
-		  if (stub_entry == NULL)
-		    {
-		      free (stub_name);
-		      goto error_ret_free_internal;
-		    }
-
-		  stub_entry->target_value = sym_value + irela->r_addend;
-		  stub_entry->target_section = sym_sec;
-		  stub_entry->stub_type = stub_type;
-		  stub_entry->h = hash;
-		  stub_entry->st_type = st_type;
-
-		  if (sym_name == NULL)
-		    sym_name = "unnamed";
-		  len = sizeof (STUB_ENTRY_NAME) + strlen (sym_name);
-		  stub_entry->output_name = bfd_alloc (htab->stub_bfd, len);
-		  if (stub_entry->output_name == NULL)
-		    {
-		      free (stub_name);
-		      goto error_ret_free_internal;
-		    }
-
-		  snprintf (stub_entry->output_name, len, STUB_ENTRY_NAME,
-			    sym_name);
-
-		  stub_changed = TRUE;
-		}
+      bool stub_changed = false;
 
-	      /* We're done with the internal relocs, free them.  */
-	      if (elf_section_data (section)->relocs == NULL)
-		free (internal_relocs);
-	    }
-	}
+      if (!_bfd_aarch64_add_call_stub_entries (&stub_changed, output_bfd, info))
+	return false;
 
       if (!stub_changed)
-	break;
+	return true;
 
       _bfd_aarch64_resize_stubs (htab);
-
-      /* Ask the linker to do its stuff.  */
       (*htab->layout_sections_again) ();
-      stub_changed = FALSE;
     }
-
-  return TRUE;
-
-error_ret_free_local:
-  return FALSE;
 }
 
 /* Build all the stubs associated with the current output file.  The
@@ -4625,7 +4842,7 @@ error_ret_free_local:
    functions here.  This function is called via aarch64_elf_finish in the
    linker.  */
 
-bfd_boolean
+bool
 elfNN_aarch64_build_stubs (struct bfd_link_info *info)
 {
   asection *stub_sec;
@@ -4647,7 +4864,7 @@ elfNN_aarch64_build_stubs (struct bfd_li
       size = stub_sec->size;
       stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
       if (stub_sec->contents == NULL && size != 0)
-	return FALSE;
+	return false;
       stub_sec->size = 0;
 
       /* Add a branch around the stub section, and a nop, to keep it 8 byte
@@ -4661,7 +4878,7 @@ elfNN_aarch64_build_stubs (struct bfd_li
   table = &htab->stub_hash_table;
   bfd_hash_traverse (table, aarch64_build_one_stub, info);
 
-  return TRUE;
+  return true;
 }
 
 
@@ -4831,11 +5048,11 @@ aarch64_calculate_got_entry_vma (struct
 				 struct elf_aarch64_link_hash_table
 				 *globals, struct bfd_link_info *info,
 				 bfd_vma value, bfd *output_bfd,
-				 bfd_boolean *unresolved_reloc_p)
+				 bool *unresolved_reloc_p)
 {
   bfd_vma off = (bfd_vma) - 1;
   asection *basegot = globals->root.sgot;
-  bfd_boolean dyn = globals->root.dynamic_sections_created;
+  bool dyn = globals->root.dynamic_sections_created;
 
   if (h != NULL)
     {
@@ -4866,7 +5083,7 @@ aarch64_calculate_got_entry_vma (struct
 	    }
 	}
       else
-	*unresolved_reloc_p = FALSE;
+	*unresolved_reloc_p = false;
 
       off = off + basegot->output_section->vma + basegot->output_offset;
     }
@@ -4879,60 +5096,62 @@ aarch64_calculate_got_entry_vma (struct
 
 static bfd_reloc_code_real_type
 aarch64_tls_transition_without_check (bfd_reloc_code_real_type r_type,
-				      struct elf_link_hash_entry *h)
+				      struct elf_link_hash_entry *h,
+				      struct bfd_link_info *info)
 {
-  bfd_boolean is_local = h == NULL;
+  bool local_exec = bfd_link_executable (info)
+    && SYMBOL_REFERENCES_LOCAL (info, h);
 
   switch (r_type)
     {
     case BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21:
     case BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21:
-      return (is_local
+      return (local_exec
 	      ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1
 	      : BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21);
 
     case BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21:
-      return (is_local
+      return (local_exec
 	      ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC
 	      : r_type);
 
     case BFD_RELOC_AARCH64_TLSDESC_LD_PREL19:
-      return (is_local
+      return (local_exec
 	      ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1
 	      : BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19);
 
     case BFD_RELOC_AARCH64_TLSDESC_LDR:
-      return (is_local
+      return (local_exec
 	      ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC
 	      : BFD_RELOC_AARCH64_NONE);
 
     case BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC:
-      return (is_local
+      return (local_exec
 	      ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC
 	      : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC);
 
     case BFD_RELOC_AARCH64_TLSDESC_OFF_G1:
-      return (is_local
+      return (local_exec
 	      ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2
 	      : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1);
 
     case BFD_RELOC_AARCH64_TLSDESC_LDNN_LO12_NC:
     case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
-      return (is_local
+      return (local_exec
 	      ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC
 	      : BFD_RELOC_AARCH64_TLSIE_LDNN_GOTTPREL_LO12_NC);
 
     case BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21:
-      return is_local ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1 : r_type;
+      return local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1 : r_type;
 
     case BFD_RELOC_AARCH64_TLSIE_LDNN_GOTTPREL_LO12_NC:
-      return is_local ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC : r_type;
+      return local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC : r_type;
 
     case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19:
       return r_type;
 
     case BFD_RELOC_AARCH64_TLSGD_ADR_PREL21:
-      return (is_local
+      return (local_exec
 	      ? BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12
 	      : BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19);
 
@@ -4945,16 +5164,16 @@ aarch64_tls_transition_without_check (bf
     case BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC:
     case BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21:
     case BFD_RELOC_AARCH64_TLSLD_ADR_PREL21:
-      return is_local ? BFD_RELOC_AARCH64_NONE : r_type;
+      return local_exec ? BFD_RELOC_AARCH64_NONE : r_type;
 
 #if ARCH_SIZE == 64
     case BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC:
-      return is_local
+      return local_exec
 	? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC
 	: BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC;
 
     case BFD_RELOC_AARCH64_TLSGD_MOVW_G1:
-      return is_local
+      return local_exec
 	? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2
 	: BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1;
 #endif
@@ -5019,7 +5238,7 @@ aarch64_reloc_got_type (bfd_reloc_code_r
   return GOT_UNKNOWN;
 }
 
-static bfd_boolean
+static bool
 aarch64_can_relax_tls (bfd *input_bfd,
 		       struct bfd_link_info *info,
 		       bfd_reloc_code_real_type r_type,
@@ -5030,21 +5249,21 @@ aarch64_can_relax_tls (bfd *input_bfd,
   unsigned int reloc_got_type;
 
   if (! IS_AARCH64_TLS_RELAX_RELOC (r_type))
-    return FALSE;
+    return false;
 
   symbol_got_type = elfNN_aarch64_symbol_got_type (h, input_bfd, r_symndx);
   reloc_got_type = aarch64_reloc_got_type (r_type);
 
   if (symbol_got_type == GOT_TLS_IE && GOT_TLS_GD_ANY_P (reloc_got_type))
-    return TRUE;
+    return true;
 
   if (!bfd_link_executable (info))
-    return FALSE;
+    return false;
 
   if  (h && h->root.type == bfd_link_hash_undefweak)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Given the relocation code R_TYPE, return the relaxed bfd reloc
@@ -5063,7 +5282,7 @@ aarch64_tls_transition (bfd *input_bfd,
   if (! aarch64_can_relax_tls (input_bfd, info, bfd_r_type, h, r_symndx))
     return bfd_r_type;
 
-  return aarch64_tls_transition_without_check (bfd_r_type, h);
+  return aarch64_tls_transition_without_check (bfd_r_type, h, info);
 }
 
 /* Return the base VMA address which should be subtracted from real addresses
@@ -5202,7 +5421,7 @@ struct erratum_835769_branch_to_stub_dat
 /* Helper to insert branches to erratum 835769 stubs in the right
    places for a particular section.  */
 
-static bfd_boolean
+static bool
 make_branch_to_erratum_835769_stub (struct bfd_hash_entry *gen_entry,
 				    void *in_arg)
 {
@@ -5220,7 +5439,7 @@ make_branch_to_erratum_835769_stub (stru
 
   if (stub_entry->target_section != data->output_section
       || stub_entry->stub_type != aarch64_stub_erratum_835769_veneer)
-    return TRUE;
+    return true;
 
   contents = data->contents;
   veneered_insn_loc = stub_entry->target_section->output_section->vma
@@ -5244,11 +5463,11 @@ make_branch_to_erratum_835769_stub (stru
   branch_insn |= branch_offset;
   bfd_putl32 (branch_insn, &contents[target]);
 
-  return TRUE;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 _bfd_aarch64_erratum_843419_branch_to_stub (struct bfd_hash_entry *gen_entry,
 					    void *in_arg)
 {
@@ -5272,7 +5491,7 @@ _bfd_aarch64_erratum_843419_branch_to_st
 
   if (stub_entry->target_section != section
       || stub_entry->stub_type != aarch64_stub_erratum_843419_veneer)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (((htab->fix_erratum_843419 & ERRAT_ADRP) && stub_entry->stub_sec)
 	      || (htab->fix_erratum_843419 & ERRAT_ADR));
@@ -5339,10 +5558,11 @@ _bfd_aarch64_erratum_843419_branch_to_st
     {
       abfd = stub_entry->target_section->owner;
       _bfd_error_handler
-	(_("%pB: error: erratum 843419 immediate 0x%" BFD_VMA_FMT "x "
-	   "out of range for ADR (input file too large) and "
+	(_("%pB: error: erratum 843419 immediate 0x%" PRIx64
+	   " out of range for ADR (input file too large) and "
 	   "--fix-cortex-a53-843419=adr used.  Run the linker with "
-	   "--fix-cortex-a53-843419=full instead"), abfd, imm);
+	   "--fix-cortex-a53-843419=full instead"),
+	 abfd, (uint64_t) (bfd_vma) imm);
       bfd_set_error (bfd_error_bad_value);
       /* This function is called inside a hashtable traversal and the error
 	 handlers called above turn into non-fatal errors.  Which means this
@@ -5350,11 +5570,11 @@ _bfd_aarch64_erratum_843419_branch_to_st
 	 To prevent this, issue a hard abort.  */
       BFD_FAIL ();
     }
-  return TRUE;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 elfNN_aarch64_write_section (bfd *output_bfd  ATTRIBUTE_UNUSED,
 			     struct bfd_link_info *link_info,
 			     asection *sec,
@@ -5365,7 +5585,7 @@ elfNN_aarch64_write_section (bfd *output
     elf_aarch64_hash_table (link_info);
 
   if (globals == NULL)
-    return FALSE;
+    return false;
 
   /* Fix code to point to erratum 835769 stubs.  */
   if (globals->fix_erratum_835769)
@@ -5390,12 +5610,12 @@ elfNN_aarch64_write_section (bfd *output
 			 _bfd_aarch64_erratum_843419_branch_to_stub, &data);
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Return TRUE if RELOC is a relocation against the base of GOT table.  */
 
-static bfd_boolean
+static bool
 aarch64_relocation_aginst_gp_p (bfd_reloc_code_real_type reloc)
 {
   return (reloc == BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14
@@ -5419,8 +5639,8 @@ elfNN_aarch64_final_link_relocate (reloc
 				   struct bfd_link_info *info,
 				   asection *sym_sec,
 				   struct elf_link_hash_entry *h,
-				   bfd_boolean *unresolved_reloc_p,
-				   bfd_boolean save_addend,
+				   bool *unresolved_reloc_p,
+				   bool save_addend,
 				   bfd_vma *saved_addend,
 				   Elf_Internal_Sym *sym)
 {
@@ -5433,12 +5653,12 @@ elfNN_aarch64_final_link_relocate (reloc
   bfd_vma place, off, got_entry_addr = 0;
   bfd_signed_vma signed_addend;
   struct elf_aarch64_link_hash_table *globals;
-  bfd_boolean weak_undef_p;
-  bfd_boolean relative_reloc;
+  bool weak_undef_p;
+  bool relative_reloc;
   asection *base_got;
   bfd_vma orig_value = value;
-  bfd_boolean resolved_to_zero;
-  bfd_boolean abs_symbol_p;
+  bool resolved_to_zero;
+  bool abs_symbol_p;
 
   globals = elf_aarch64_hash_table (info);
 
@@ -5507,7 +5727,7 @@ elfNN_aarch64_final_link_relocate (reloc
       switch (bfd_r_type)
 	{
 	default:
-bad_ifunc_reloc:
+	bad_ifunc_reloc:
 	  if (h->root.root.string)
 	    name = h->root.root.string;
 	  else
@@ -5517,7 +5737,7 @@ bad_ifunc_reloc:
 	    /* xgettext:c-format */
 	    (_("%pB: relocation %s against STT_GNU_IFUNC "
 	       "symbol `%s' isn't handled by %s"), input_bfd,
-	     howto->name, name, __FUNCTION__);
+	     howto->name, name, __func__);
 	  bfd_set_error (bfd_error_bad_value);
 	  return bfd_reloc_notsupported;
 
@@ -5685,7 +5905,7 @@ bad_ifunc_reloc:
     case BFD_RELOC_AARCH64_TLSDESC_ADD:
     case BFD_RELOC_AARCH64_TLSDESC_CALL:
     case BFD_RELOC_AARCH64_TLSDESC_LDR:
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       return bfd_reloc_ok;
 
     case BFD_RELOC_AARCH64_NN:
@@ -5716,24 +5936,24 @@ bad_ifunc_reloc:
 	{
 	  Elf_Internal_Rela outrel;
 	  bfd_byte *loc;
-	  bfd_boolean skip, relocate;
+	  bool skip, relocate;
 	  asection *sreloc;
 
-	  *unresolved_reloc_p = FALSE;
+	  *unresolved_reloc_p = false;
 
-	  skip = FALSE;
-	  relocate = FALSE;
+	  skip = false;
+	  relocate = false;
 
 	  outrel.r_addend = signed_addend;
 	  outrel.r_offset =
 	    _bfd_elf_section_offset (output_bfd, info, input_section,
 				     rel->r_offset);
 	  if (outrel.r_offset == (bfd_vma) - 1)
-	    skip = TRUE;
+	    skip = true;
 	  else if (outrel.r_offset == (bfd_vma) - 2)
 	    {
-	      skip = TRUE;
-	      relocate = TRUE;
+	      skip = true;
+	      relocate = true;
 	    }
 	  else if (abs_symbol_p)
 	    {
@@ -5761,7 +5981,7 @@ bad_ifunc_reloc:
 		 relocate the text and data segments independently,
 		 so the symbol does not matter.  */
 	      symbol = 0;
-	      relocate = globals->no_apply_dynamic_relocs ? FALSE : TRUE;
+	      relocate = !globals->no_apply_dynamic_relocs;
 	      outrel.r_info = ELFNN_R_INFO (symbol, AARCH64_R (RELATIVE));
 	      outrel.r_addend += value;
 	    }
@@ -5799,7 +6019,7 @@ bad_ifunc_reloc:
     case BFD_RELOC_AARCH64_JUMP26:
       {
 	asection *splt = globals->root.splt;
-	bfd_boolean via_plt_p =
+	bool via_plt_p =
 	  splt != NULL && h != NULL && h->plt.offset != (bfd_vma) - 1;
 
 	/* A call to an undefined weak symbol is converted to a jump to
@@ -5847,7 +6067,7 @@ bad_ifunc_reloc:
       value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type,
 						   place, value,
 						   signed_addend, weak_undef_p);
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       break;
 
     case BFD_RELOC_AARCH64_16_PCREL:
@@ -5867,7 +6087,7 @@ bad_ifunc_reloc:
       if (bfd_link_pic (info)
 	  && (input_section->flags & SEC_ALLOC) != 0
 	  && (input_section->flags & SEC_READONLY) != 0
-	  && !SYMBOL_REFERENCES_LOCAL (info, h))
+	  && !_bfd_elf_symbol_refs_local_p (h, info, 1))
 	{
 	  int howto_index = bfd_r_type - BFD_RELOC_AARCH64_RELOC_START;
 
@@ -5881,6 +6101,23 @@ bad_ifunc_reloc:
 	  bfd_set_error (bfd_error_bad_value);
 	  return bfd_reloc_notsupported;
 	}
+      value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type,
+						   place, value,
+						   signed_addend,
+						   weak_undef_p);
+      break;
+
+    case BFD_RELOC_AARCH64_BRANCH19:
+    case BFD_RELOC_AARCH64_TSTBR14:
+      if (h && h->root.type == bfd_link_hash_undefined)
+	{
+	  _bfd_error_handler
+	    /* xgettext:c-format */
+	    (_("%pB: conditional branch to undefined symbol `%s' "
+	       "not allowed"), input_bfd, h->root.root.string);
+	  bfd_set_error (bfd_error_bad_value);
+	  return bfd_reloc_notsupported;
+	}
       /* Fall through.  */
 
     case BFD_RELOC_AARCH64_16:
@@ -5888,7 +6125,6 @@ bad_ifunc_reloc:
     case BFD_RELOC_AARCH64_32:
 #endif
     case BFD_RELOC_AARCH64_ADD_LO12:
-    case BFD_RELOC_AARCH64_BRANCH19:
     case BFD_RELOC_AARCH64_LDST128_LO12:
     case BFD_RELOC_AARCH64_LDST16_LO12:
     case BFD_RELOC_AARCH64_LDST32_LO12:
@@ -5904,7 +6140,6 @@ bad_ifunc_reloc:
     case BFD_RELOC_AARCH64_MOVW_G2_NC:
     case BFD_RELOC_AARCH64_MOVW_G2_S:
     case BFD_RELOC_AARCH64_MOVW_G3:
-    case BFD_RELOC_AARCH64_TSTBR14:
       value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type,
 						   place, value,
 						   signed_addend, weak_undef_p);
@@ -5922,7 +6157,7 @@ bad_ifunc_reloc:
       if (globals->root.sgot == NULL)
 	BFD_ASSERT (h != NULL);
 
-      relative_reloc = FALSE;
+      relative_reloc = false;
       if (h != NULL)
 	{
 	  bfd_vma addend = 0;
@@ -5938,7 +6173,7 @@ bad_ifunc_reloc:
 	      && h->root.type != bfd_link_hash_undefweak
 	      && bfd_link_pic (info)
 	      && !symbol_got_offset_mark_p (input_bfd, h, r_symndx))
-	    relative_reloc = TRUE;
+	    relative_reloc = true;
 
 	  value = aarch64_calculate_got_entry_vma (h, globals, info, value,
 						   output_bfd,
@@ -5987,7 +6222,7 @@ bad_ifunc_reloc:
 	       base address.  So, we need to generate a R_AARCH64_RELATIVE reloc
 	       for dynamic linker.  */
 	    if (bfd_link_pic (info))
-	      relative_reloc = TRUE;
+	      relative_reloc = true;
 
 	    symbol_got_offset_mark (input_bfd, h, r_symndx);
 	  }
@@ -6040,7 +6275,7 @@ bad_ifunc_reloc:
       value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type,
 						   place, value,
 						   0, weak_undef_p);
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       break;
 
     case BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC:
@@ -6054,7 +6289,7 @@ bad_ifunc_reloc:
       value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type,
 						   place, value,
 						   0, weak_undef_p);
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       break;
 
     case BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12:
@@ -6128,7 +6363,7 @@ bad_ifunc_reloc:
 	value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type,
 						     place, value,
 						     def_value, weak_undef_p);
-        *unresolved_reloc_p = FALSE;
+        *unresolved_reloc_p = false;
 	break;
       }
 
@@ -6148,7 +6383,7 @@ bad_ifunc_reloc:
       value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type,
 						   place, value,
 						   0, weak_undef_p);
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       break;
 
     case BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC:
@@ -6167,7 +6402,7 @@ bad_ifunc_reloc:
       value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type,
 						   place, value,
 						   0, weak_undef_p);
-      *unresolved_reloc_p = FALSE;
+      *unresolved_reloc_p = false;
       break;
 
     default:
@@ -6227,7 +6462,7 @@ struct erratum_843419_branch_to_stub_cle
    section inside IN_ARG matches.  The clearing is done by setting the
    stub_type to none.  */
 
-static bfd_boolean
+static bool
 _bfd_aarch64_erratum_843419_clear_stub (struct bfd_hash_entry *gen_entry,
 					void *in_arg)
 {
@@ -6239,7 +6474,7 @@ _bfd_aarch64_erratum_843419_clear_stub (
   if (stub_entry->target_section != data->output_section
       || stub_entry->stub_type != aarch64_stub_erratum_843419_veneer
       || stub_entry->adrp_offset != data->adrp_offset)
-    return TRUE;
+    return true;
 
   /* Change the stub type instead of removing the entry, removing from the hash
      table would be slower and we have already reserved the memory for the entry
@@ -6249,7 +6484,7 @@ _bfd_aarch64_erratum_843419_clear_stub (
 
   /* We're done and there could have been only one matching stub at that
      particular offset, so abort further traversal.  */
-  return FALSE;
+  return false;
 }
 
 /* TLS Relaxations may relax an adrp sequence that matches the erratum 843419
@@ -6284,9 +6519,11 @@ static bfd_reloc_status_type
 elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals,
 			 bfd *input_bfd, asection *input_section,
 			 bfd_byte *contents, Elf_Internal_Rela *rel,
-			 struct elf_link_hash_entry *h)
+			 struct elf_link_hash_entry *h,
+			 struct bfd_link_info *info)
 {
-  bfd_boolean is_local = h == NULL;
+  bool local_exec = bfd_link_executable (info)
+    && SYMBOL_REFERENCES_LOCAL (info, h);
   unsigned int r_type = ELFNN_R_TYPE (rel->r_info);
   unsigned long insn;
 
@@ -6296,7 +6533,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
     {
     case BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21:
     case BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21:
-      if (is_local)
+      if (local_exec)
 	{
 	  /* GD->LE relaxation:
 	     adrp x0, :tlsgd:var     =>   movz R0, :tprel_g1:var
@@ -6325,7 +6562,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
       break;
 
     case BFD_RELOC_AARCH64_TLSDESC_LD_PREL19:
-      if (is_local)
+      if (local_exec)
 	{
 	  /* Tiny TLSDESC->LE relaxation:
 	     ldr   x1, :tlsdesc:var	 =>  movz  R0, #:tprel_g1:var
@@ -6367,7 +6604,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
 	}
 
     case BFD_RELOC_AARCH64_TLSGD_ADR_PREL21:
-      if (is_local)
+      if (local_exec)
 	{
 	  /* Tiny GD->LE relaxation:
 	     adr x0, :tlsgd:var	     =>	  mrs  x1, tpidr_el0
@@ -6419,7 +6656,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
       BFD_ASSERT (rel->r_offset + 12 == rel[2].r_offset);
       BFD_ASSERT (ELFNN_R_TYPE (rel[2].r_info) == AARCH64_R (CALL26));
 
-      if (is_local)
+      if (local_exec)
 	{
 	  /* Large GD->LE relaxation:
 	     movz x0, #:tlsgd_g1:var	=> movz x0, #:tprel_g2:var, lsl #32
@@ -6463,7 +6700,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
       return bfd_reloc_continue;
 
     case BFD_RELOC_AARCH64_TLSDESC_LDNN_LO12_NC:
-      if (is_local)
+      if (local_exec)
 	{
 	  /* GD->LE relaxation:
 	     ldr xd, [x0, #:tlsdesc_lo12:var]   =>   movk x0, :tprel_g0_nc:var
@@ -6484,7 +6721,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
 	}
 
     case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
-      if (is_local)
+      if (local_exec)
 	{
 	  /* GD->LE relaxation
 	     add  x0, #:tlsgd_lo12:var	=> movk R0, :tprel_g0_nc:var
@@ -6537,7 +6774,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
       return bfd_reloc_ok;
 
     case BFD_RELOC_AARCH64_TLSDESC_LDR:
-      if (is_local)
+      if (local_exec)
 	{
 	  /* GD->LE relaxation:
 	     ldr xd, [gp, xn]   =>   movk R0, #:tprel_g0_nc:var
@@ -6564,12 +6801,12 @@ elfNN_aarch64_tls_relax (struct elf_aarc
 	 movk xd, #:tlsdesc_off_g0_nc:var => movk Rd, #:gottprel_g0_nc:var
 
 	 Where R is x for lp64 mode, and w for ILP32 mode.  */
-      if (is_local)
+      if (local_exec)
 	bfd_putl32 (ldr_hw_R0, contents + rel->r_offset);
       return bfd_reloc_continue;
 
     case BFD_RELOC_AARCH64_TLSDESC_OFF_G1:
-      if (is_local)
+      if (local_exec)
 	{
 	  /* GD->LE relaxation:
 	     movz xd, #:tlsdesc_off_g1:var => movz R0, #:tprel_g2:var, lsl #32
@@ -6594,7 +6831,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
 	 adrp xd, :gottprel:var   =>   movz Rd, :tprel_g1:var
 
 	 Where R is x for lp64 mode, and w for ILP32 mode.  */
-      if (is_local)
+      if (local_exec)
 	{
 	  insn = bfd_getl32 (contents + rel->r_offset);
 	  bfd_putl32 (movz_R0 | (insn & 0x1f), contents + rel->r_offset);
@@ -6609,7 +6846,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
 	 ldr  xd, [xm, #:gottprel_lo12:var]   =>   movk Rd, :tprel_g0_nc:var
 
 	 Where R is x for lp64 mode, and w for ILP32 mode.  */
-      if (is_local)
+      if (local_exec)
 	{
 	  insn = bfd_getl32 (contents + rel->r_offset);
 	  bfd_putl32 (movk_R0 | (insn & 0x1f), contents + rel->r_offset);
@@ -6622,7 +6859,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
 	 bl   __tls_get_addr => add R0, R0, TCB_SIZE
 
 	 Where R is x for lp64 mode, and w for ilp32 mode.  */
-      if (is_local)
+      if (local_exec)
 	{
 	  BFD_ASSERT (rel->r_offset + 4 == rel[1].r_offset);
 	  BFD_ASSERT (ELFNN_R_TYPE (rel[1].r_info) == AARCH64_R (CALL26));
@@ -6639,7 +6876,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
       /* LD->LE relaxation (small):
 	 adrp  x0, :tlsldm:x       => mrs x0, tpidr_el0
        */
-      if (is_local)
+      if (local_exec)
 	{
 	  bfd_putl32 (0xd53bd040, contents + rel->r_offset);
 	  return bfd_reloc_ok;
@@ -6652,7 +6889,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
 	 bl   __tls_get_addr       => nop
 
 	 Where R is x for lp64 mode, and w for ilp32 mode.  */
-      if (is_local)
+      if (local_exec)
 	{
 	  BFD_ASSERT (rel->r_offset + 4 == rel[1].r_offset);
 	  BFD_ASSERT (ELFNN_R_TYPE (rel[1].r_info) == AARCH64_R (CALL26));
@@ -6674,7 +6911,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
 
 /* Relocate an AArch64 ELF section.  */
 
-static bfd_boolean
+static int
 elfNN_aarch64_relocate_section (bfd *output_bfd,
 				struct bfd_link_info *info,
 				bfd *input_bfd,
@@ -6690,7 +6927,7 @@ elfNN_aarch64_relocate_section (bfd *out
   Elf_Internal_Rela *relend;
   const char *name;
   struct elf_aarch64_link_hash_table *globals;
-  bfd_boolean save_addend = FALSE;
+  bool save_addend = false;
   bfd_vma addend = 0;
 
   globals = elf_aarch64_hash_table (info);
@@ -6714,7 +6951,7 @@ elfNN_aarch64_relocate_section (bfd *out
       bfd_reloc_status_type r;
       arelent bfd_reloc;
       char sym_type;
-      bfd_boolean unresolved_reloc = FALSE;
+      bool unresolved_reloc = false;
       char *error_message = NULL;
 
       r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -6740,14 +6977,18 @@ elfNN_aarch64_relocate_section (bfd *out
 
 	  /* An object file might have a reference to a local
 	     undefined symbol.  This is a daft object file, but we
-	     should at least do something about it.  */
+	     should at least do something about it.  NONE and NULL
+	     relocations do not use the symbol and are explicitly
+	     allowed to use an undefined one, so allow those.
+	     Likewise for relocations against STN_UNDEF.  */
 	  if (r_type != R_AARCH64_NONE && r_type != R_AARCH64_NULL
+	      && r_symndx != STN_UNDEF
 	      && bfd_is_und_section (sec)
 	      && ELF_ST_BIND (sym->st_info) != STB_WEAK)
 	    (*info->callbacks->undefined_symbol)
 	      (info, bfd_elf_string_from_elf_section
 	       (input_bfd, symtab_hdr->sh_link, sym->st_name),
-	       input_bfd, input_section, rel->r_offset, TRUE);
+	       input_bfd, input_section, rel->r_offset, true);
 
 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
 
@@ -6756,7 +6997,7 @@ elfNN_aarch64_relocate_section (bfd *out
 	      && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
 	    {
 	      h = elfNN_aarch64_get_local_sym_hash (globals, input_bfd,
-						    rel, FALSE);
+						    rel, false);
 	      if (h == NULL)
 		abort ();
 
@@ -6767,7 +7008,7 @@ elfNN_aarch64_relocate_section (bfd *out
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -6826,7 +7067,7 @@ elfNN_aarch64_relocate_section (bfd *out
 	  BFD_ASSERT (howto != NULL);
 	  r_type = howto->type;
 	  r = elfNN_aarch64_tls_relax (globals, input_bfd, input_section,
-				       contents, rel, h);
+				       contents, rel, h, info);
 	  unresolved_reloc = 0;
 	}
       else
@@ -6839,9 +7080,9 @@ elfNN_aarch64_relocate_section (bfd *out
 	  && rel->r_offset == rel[1].r_offset
 	  && ELFNN_R_TYPE (rel[1].r_info) != R_AARCH64_NONE
 	  && ELFNN_R_TYPE (rel[1].r_info) != R_AARCH64_NULL)
-	save_addend = TRUE;
+	save_addend = true;
       else
-	save_addend = FALSE;
+	save_addend = false;
 
       if (r == bfd_reloc_continue)
 	r = elfNN_aarch64_final_link_relocate (howto, input_bfd, output_bfd,
@@ -6862,7 +7103,7 @@ elfNN_aarch64_relocate_section (bfd *out
 	case BFD_RELOC_AARCH64_TLSLD_ADR_PREL21:
 	  if (! symbol_got_offset_mark_p (input_bfd, h, r_symndx))
 	    {
-	      bfd_boolean need_relocs = FALSE;
+	      bool need_relocs = false;
 	      bfd_byte *loc;
 	      int indx;
 	      bfd_vma off;
@@ -6956,7 +7197,7 @@ elfNN_aarch64_relocate_section (bfd *out
 	case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1:
 	  if (! symbol_got_offset_mark_p (input_bfd, h, r_symndx))
 	    {
-	      bfd_boolean need_relocs = FALSE;
+	      bool need_relocs = false;
 	      bfd_byte *loc;
 	      int indx;
 	      bfd_vma off;
@@ -7012,7 +7253,7 @@ elfNN_aarch64_relocate_section (bfd *out
 	case BFD_RELOC_AARCH64_TLSDESC_OFF_G1:
 	  if (! symbol_tlsdesc_got_offset_mark_p (input_bfd, h, r_symndx))
 	    {
-	      bfd_boolean need_relocs = FALSE;
+	      bool need_relocs = false;
 	      int indx = h && h->dynindx != -1 ? h->dynindx : 0;
 	      bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
 
@@ -7082,7 +7323,7 @@ elfNN_aarch64_relocate_section (bfd *out
 	       "unresolvable %s relocation against symbol `%s'"),
 	     input_bfd, input_section, (uint64_t) rel->r_offset, howto->name,
 	     h->root.root.string);
-	  return FALSE;
+	  return false;
 	}
 
       if (r != bfd_reloc_ok && r != bfd_reloc_continue)
@@ -7104,7 +7345,7 @@ elfNN_aarch64_relocate_section (bfd *out
 		     _("too many GOT entries for -fpic, "
 		       "please recompile with -fPIC"),
 		     name, input_bfd, input_section, rel->r_offset);
-		  return FALSE;
+		  return false;
 		}
 	      /* Overflow can occur when a variable is referenced with a type
 		 that has a larger alignment than the type with which it was
@@ -7119,7 +7360,7 @@ elfNN_aarch64_relocate_section (bfd *out
 
 		 Try to catch this situation here and provide a more helpful
 		 error message to the user.  */
-	      if (addend & ((1 << howto->rightshift) - 1)
+	      if (addend & (((bfd_vma) 1 << howto->rightshift) - 1)
 		  /* FIXME: Are we testing all of the appropriate reloc
 		     types here ?  */
 		  && (real_r_type == BFD_RELOC_AARCH64_LD_LO19_PCREL
@@ -7138,7 +7379,7 @@ alignment than was declared where it was
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -7169,12 +7410,12 @@ alignment than was declared where it was
 	addend = 0;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the right machine number.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_object_p (bfd *abfd)
 {
 #if ARCH_SIZE == 32
@@ -7182,12 +7423,12 @@ elfNN_aarch64_object_p (bfd *abfd)
 #else
   bfd_default_set_arch_mach (abfd, bfd_arch_aarch64, bfd_mach_aarch64);
 #endif
-  return TRUE;
+  return true;
 }
 
 /* Function to keep AArch64 specific flags in the ELF header.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_set_private_flags (bfd *abfd, flagword flags)
 {
   if (elf_flags_init (abfd) && elf_elfheader (abfd)->e_flags != flags)
@@ -7196,30 +7437,30 @@ elfNN_aarch64_set_private_flags (bfd *ab
   else
     {
       elf_elfheader (abfd)->e_flags = flags;
-      elf_flags_init (abfd) = TRUE;
+      elf_flags_init (abfd) = true;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword out_flags;
   flagword in_flags;
-  bfd_boolean flags_compatible = TRUE;
+  bool flags_compatible = true;
   asection *sec;
 
   /* Check if we have the same endianess.  */
   if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
+    return false;
 
   if (!is_aarch64_elf (ibfd) || !is_aarch64_elf (obfd))
-    return TRUE;
+    return true;
 
   /* The input BFD must have had its flags initialised.  */
   /* The following seems bogus to me -- The flags are initialized in
@@ -7240,9 +7481,9 @@ elfNN_aarch64_merge_private_bfd_data (bf
 	 to the default values.  */
       if (bfd_get_arch_info (ibfd)->the_default
 	  && elf_elfheader (ibfd)->e_flags == 0)
-	return TRUE;
+	return true;
 
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
@@ -7250,12 +7491,12 @@ elfNN_aarch64_merge_private_bfd_data (bf
 	return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
 				  bfd_get_mach (ibfd));
 
-      return TRUE;
+      return true;
     }
 
   /* Identical flags must be compatible.  */
   if (in_flags == out_flags)
-    return TRUE;
+    return true;
 
   /* Check to see if the input BFD actually contains any sections.  If
      not, its flags may not have been initialised either, but it
@@ -7269,22 +7510,22 @@ elfNN_aarch64_merge_private_bfd_data (bf
      in data sections ?  */
   if (!(ibfd->flags & DYNAMIC))
     {
-      bfd_boolean null_input_bfd = TRUE;
-      bfd_boolean only_data_sections = TRUE;
+      bool null_input_bfd = true;
+      bool only_data_sections = true;
 
       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
 	{
 	  if ((bfd_section_flags (sec)
 	       & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
 	      == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
-	    only_data_sections = FALSE;
+	    only_data_sections = false;
 
-	  null_input_bfd = FALSE;
+	  null_input_bfd = false;
 	  break;
 	}
 
       if (null_input_bfd || only_data_sections)
-	return TRUE;
+	return true;
     }
 
   return flags_compatible;
@@ -7292,7 +7533,7 @@ elfNN_aarch64_merge_private_bfd_data (bf
 
 /* Display the flags field.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -7308,56 +7549,39 @@ elfNN_aarch64_print_private_bfd_data (bf
      containing valid data.  */
 
   /* xgettext:c-format */
-  fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
+  fprintf (file, _("private flags = 0x%lx:"), elf_elfheader (abfd)->e_flags);
 
   if (flags)
-    fprintf (file, _("<Unrecognised flag bits set>"));
+    fprintf (file, _(" <Unrecognised flag bits set>"));
 
   fputc ('\n', file);
 
-  return TRUE;
-}
-
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = elf_aarch64_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
+  return true;
 }
 
 /* Return true if we need copy relocation against EH.  */
 
-static bfd_boolean
+static bool
 need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh)
 {
   struct elf_dyn_relocs *p;
   asection *s;
 
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = eh->root.dyn_relocs; p != NULL; p = p->next)
     {
       /* If there is any pc-relative reference, we need to keep copy relocation
 	 to avoid propagating the relocation into runtime that current glibc
 	 does not support.  */
       if (p->pc_count)
-	return TRUE;
+	return true;
 
       s = p->sec->output_section;
       /* Need copy relocation if it's against read-only section.  */
       if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return TRUE;
+	return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -7366,7 +7590,7 @@ need_copy_relocation_p (struct elf_aarch
    change the definition to something the rest of the link can
    understand.	*/
 
-static bfd_boolean
+static bool
 elfNN_aarch64_adjust_dynamic_symbol (struct bfd_link_info *info,
 				     struct elf_link_hash_entry *h)
 {
@@ -7393,7 +7617,7 @@ elfNN_aarch64_adjust_dynamic_symbol (str
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     /* Otherwise, reset to -1.  */
@@ -7411,7 +7635,7 @@ elfNN_aarch64_adjust_dynamic_symbol (str
       h->root.u.def.value = def->root.u.def.value;
       if (ELIMINATE_COPY_RELOCS || info->nocopyreloc)
 	h->non_got_ref = def->non_got_ref;
-      return TRUE;
+      return true;
     }
 
   /* If we are creating a shared library, we must presume that the
@@ -7419,18 +7643,18 @@ elfNN_aarch64_adjust_dynamic_symbol (str
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   if (ELIMINATE_COPY_RELOCS)
@@ -7442,7 +7666,7 @@ elfNN_aarch64_adjust_dynamic_symbol (str
       if (!need_copy_relocation_p (eh))
 	{
 	  h->non_got_ref = 0;
-	  return TRUE;
+	  return true;
 	}
     }
 
@@ -7481,7 +7705,7 @@ elfNN_aarch64_adjust_dynamic_symbol (str
 
 }
 
-static bfd_boolean
+static bool
 elfNN_aarch64_allocate_local_symbols (bfd *abfd, unsigned number)
 {
   struct elf_aarch64_local_symbol *locals;
@@ -7491,15 +7715,15 @@ elfNN_aarch64_allocate_local_symbols (bf
       locals = (struct elf_aarch64_local_symbol *)
 	bfd_zalloc (abfd, number * sizeof (struct elf_aarch64_local_symbol));
       if (locals == NULL)
-	return FALSE;
+	return false;
       elf_aarch64_locals (abfd) = locals;
     }
-  return TRUE;
+  return true;
 }
 
 /* Create the .got section to hold the global offset table.  */
 
-static bfd_boolean
+static bool
 aarch64_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -7510,7 +7734,7 @@ aarch64_elf_create_got_section (bfd *abf
 
   /* This function may be called more than once.  */
   if (htab->sgot != NULL)
-    return TRUE;
+    return true;
 
   flags = bed->dynamic_sec_flags;
 
@@ -7521,13 +7745,13 @@ aarch64_elf_create_got_section (bfd *abf
 					   | SEC_READONLY));
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->srelgot = s;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->sgot = s;
   htab->sgot->size += GOT_ENTRY_SIZE;
 
@@ -7541,7 +7765,7 @@ aarch64_elf_create_got_section (bfd *abf
 				       "_GLOBAL_OFFSET_TABLE_");
       elf_hash_table (info)->hgot = h;
       if (h == NULL)
-	return FALSE;
+	return false;
     }
 
   if (bed->want_got_plt)
@@ -7549,19 +7773,19 @@ aarch64_elf_create_got_section (bfd *abf
       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->sgotplt = s;
     }
 
   /* The first bit of the global offset table is the header.  */
   s->size += bed->got_header_size;
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			    asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -7574,7 +7798,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
   struct elf_aarch64_link_hash_table *htab;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is_aarch64_elf (abfd));
 
@@ -7600,24 +7824,24 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 	{
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: bad symbol index: %d"), abfd, r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* A local symbol.  */
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
 					abfd, r_symndx);
 	  if (isym == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Check relocation against local STT_GNU_IFUNC symbol.  */
 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 	    {
 	      h = elfNN_aarch64_get_local_sym_hash (htab, abfd, rel,
-						    TRUE);
+						    true);
 	      if (h == NULL)
-		return FALSE;
+		return false;
 
 	      /* Fake a STT_GNU_IFUNC symbol.  */
 	      h->type = STT_GNU_IFUNC;
@@ -7653,7 +7877,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 		htab->root.dynobj = abfd;
 
 	      if (! aarch64_elf_create_got_section (htab->root.dynobj, info))
-		return FALSE;
+		return false;
 
 	      BFD_ASSERT (h == htab->root.hgot);
 	    }
@@ -7684,7 +7908,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 	      if (htab->root.dynobj == NULL)
 		htab->root.dynobj = abfd;
 	      if (!_bfd_elf_create_ifunc_sections (htab->root.dynobj, info))
-		return FALSE;
+		return false;
 	      break;
 	    }
 
@@ -7718,7 +7942,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 		 abfd, elfNN_aarch64_howto_table[howto_index].name,
 		 (h) ? h->root.root.string : "a local symbol");
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  else
 	    break;
@@ -7737,7 +7961,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 		 abfd, elfNN_aarch64_howto_table[howto_index].name,
 		 (h) ? h->root.root.string : "a local symbol");
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  /* Fall through.  */
 
@@ -7812,19 +8036,17 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 		  htab->root.dynobj = abfd;
 
 		sreloc = _bfd_elf_make_dynamic_reloc_section
-		  (sec, htab->root.dynobj, LOG_FILE_ALIGN, abfd, /*rela? */ TRUE);
+		  (sec, htab->root.dynobj, LOG_FILE_ALIGN, abfd, /*rela? */ true);
 
 		if (sreloc == NULL)
-		  return FALSE;
+		  return false;
 	      }
 
 	    /* If this is a global symbol, we count the number of
 	       relocations we need for this symbol.  */
 	    if (h != NULL)
 	      {
-		struct elf_aarch64_link_hash_entry *eh;
-		eh = (struct elf_aarch64_link_hash_entry *) h;
-		head = &eh->dyn_relocs;
+		head = &h->dyn_relocs;
 	      }
 	    else
 	      {
@@ -7835,10 +8057,10 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 		asection *s;
 		void **vpp;
 
-		isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
 					      abfd, r_symndx);
 		if (isym == NULL)
-		  return FALSE;
+		  return false;
 
 		s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		if (s == NULL)
@@ -7853,11 +8075,11 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 	    p = *head;
 	    if (p == NULL || p->sec != sec)
 	      {
-		bfd_size_type amt = sizeof *p;
+		size_t amt = sizeof *p;
 		p = ((struct elf_dyn_relocs *)
 		     bfd_zalloc (htab->root.dynobj, amt));
 		if (p == NULL)
-		  return FALSE;
+		  return false;
 		p->next = *head;
 		*head = p;
 		p->sec = sec;
@@ -7920,7 +8142,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 
 		if (!elfNN_aarch64_allocate_local_symbols
 		    (abfd, symtab_hdr->sh_info))
-		  return FALSE;
+		  return false;
 
 		locals = elf_aarch64_locals (abfd);
 		BFD_ASSERT (r_symndx < symtab_hdr->sh_info);
@@ -7963,7 +8185,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 	    if (htab->root.dynobj == NULL)
 	      htab->root.dynobj = abfd;
 	    if (! aarch64_elf_create_got_section (htab->root.dynobj, info))
-	      return FALSE;
+	      return false;
 	    break;
 	  }
 
@@ -7986,12 +8208,12 @@ elfNN_aarch64_check_relocs (bfd *abfd, s
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Treat mapping symbols as special target symbols.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_is_target_special_symbol (bfd *abfd ATTRIBUTE_UNUSED,
 					asymbol *sym)
 {
@@ -8008,43 +8230,51 @@ elfNN_aarch64_maybe_function_sym (const
 				  bfd_vma *code_off)
 {
   bfd_size_type size;
+  elf_symbol_type * elf_sym = (elf_symbol_type *) sym;
 
   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
 		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
       || sym->section != sec)
     return 0;
 
+  size = (sym->flags & BSF_SYNTHETIC) ? 0 : elf_sym->internal_elf_sym.st_size;
+  
   if (!(sym->flags & BSF_SYNTHETIC))
-    switch (ELF_ST_TYPE (((elf_symbol_type *) sym)->internal_elf_sym.st_info))
+    switch (ELF_ST_TYPE (elf_sym->internal_elf_sym.st_info))
       {
-	case STT_FUNC:
 	case STT_NOTYPE:
+	  /* Ignore symbols created by the annobin plugin for gcc and clang.
+	     These symbols are hidden, local, notype and have a size of 0.  */
+	  if (size == 0
+	      && sym->flags & BSF_LOCAL
+	      && ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other) == STV_HIDDEN)
+	    return 0;
+	  /* Fall through.  */
+	case STT_FUNC:
+	  /* FIXME: Allow STT_GNU_IFUNC as well ?  */
 	  break;
 	default:
 	  return 0;
       }
-
+  
   if ((sym->flags & BSF_LOCAL)
       && bfd_is_aarch64_special_symbol_name (sym->name,
 					     BFD_AARCH64_SPECIAL_SYM_TYPE_ANY))
     return 0;
 
   *code_off = sym->value;
-  size = 0;
-  if (!(sym->flags & BSF_SYNTHETIC))
-    size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
-  if (size == 0)
-    size = 1;
-  return size;
+
+  /* Do not return 0 for the function's size.  */
+  return size ? size : 1;
 }
 
-static bfd_boolean
+static bool
 elfNN_aarch64_find_inliner_info (bfd *abfd,
 				 const char **filename_ptr,
 				 const char **functionname_ptr,
 				 unsigned int *line_ptr)
 {
-  bfd_boolean found;
+  bool found;
   found = _bfd_dwarf2_find_inliner_info
     (abfd, filename_ptr,
      functionname_ptr, line_ptr, &elf_tdata (abfd)->dwarf2_find_line_info);
@@ -8052,17 +8282,17 @@ elfNN_aarch64_find_inliner_info (bfd *ab
 }
 
 
-static bfd_boolean
+static bool
 elfNN_aarch64_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
 {
   Elf_Internal_Ehdr *i_ehdrp;	/* ELF file header, internal form.  */
 
   if (!_bfd_elf_init_file_header (abfd, link_info))
-    return FALSE;
+    return false;
 
   i_ehdrp = elf_elfheader (abfd);
   i_ehdrp->e_ident[EI_ABIVERSION] = AARCH64_ELF_ABI_VERSION;
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -8118,7 +8348,7 @@ elfNN_aarch64_reloc_type_class (const st
    called when bfd_section_from_shdr finds a section with an unknown
    type.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_section_from_shdr (bfd *abfd,
 				 Elf_Internal_Shdr *hdr,
 				 const char *name, int shindex)
@@ -8134,13 +8364,96 @@ elfNN_aarch64_section_from_shdr (bfd *ab
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
+
+  return true;
+}
 
-  return TRUE;
+/* Process any AArch64-specific program segment types.  */
+
+static bool
+elfNN_aarch64_section_from_phdr (bfd *abfd ATTRIBUTE_UNUSED,
+				 Elf_Internal_Phdr *hdr,
+				 int hdr_index ATTRIBUTE_UNUSED,
+				 const char *name ATTRIBUTE_UNUSED)
+{
+  /* Right now we only handle the PT_AARCH64_MEMTAG_MTE segment type.  */
+  if (hdr == NULL || hdr->p_type != PT_AARCH64_MEMTAG_MTE)
+    return false;
+
+  if (hdr->p_filesz > 0)
+    {
+      /* Sections created from memory tag p_type's are always named
+	 "memtag".  This makes it easier for tools (for example, GDB)
+	 to find them.  */
+      asection *newsect = bfd_make_section_anyway (abfd, "memtag");
+
+      if (newsect == NULL)
+	return false;
+
+      unsigned int opb = bfd_octets_per_byte (abfd, NULL);
+
+      /* p_vaddr holds the original start address of the tagged memory
+	 range.  */
+      newsect->vma = hdr->p_vaddr / opb;
+
+      /* p_filesz holds the storage size of the packed tags.  */
+      newsect->size = hdr->p_filesz;
+      newsect->filepos = hdr->p_offset;
+
+      /* p_memsz holds the size of the memory range that contains tags.  The
+	 section's rawsize field is reused for this purpose.  */
+      newsect->rawsize = hdr->p_memsz;
+
+      /* Make sure the section's flags has SEC_HAS_CONTENTS set, otherwise
+	 BFD will return all zeroes when attempting to get contents from this
+	 section.  */
+      newsect->flags |= SEC_HAS_CONTENTS;
+    }
+
+  return true;
+}
+
+/* Implements the bfd_elf_modify_headers hook for aarch64.  */
+
+static bool
+elfNN_aarch64_modify_headers (bfd *abfd,
+			      struct bfd_link_info *info)
+{
+  struct elf_segment_map *m;
+  unsigned int segment_count = 0;
+  Elf_Internal_Phdr *p;
+
+  for (m = elf_seg_map (abfd); m != NULL; m = m->next, segment_count++)
+    {
+      /* We are only interested in the memory tag segment that will be dumped
+	 to a core file.  If we have no memory tags or this isn't a core file we
+	 are dealing with, just skip this segment.  */
+      if (m->p_type != PT_AARCH64_MEMTAG_MTE
+	  || bfd_get_format (abfd) != bfd_core)
+	continue;
+
+      /* For memory tag segments in core files, the size of the file contents
+	 is smaller than the size of the memory range.  Adjust the memory size
+	 accordingly.  The real memory size is held in the section's rawsize
+	 field.  */
+      if (m->count > 0)
+	{
+	  p = elf_tdata (abfd)->phdr;
+	  p += m->idx;
+	  p->p_memsz = m->sections[0]->rawsize;
+	  p->p_flags = 0;
+	  p->p_paddr = 0;
+	  p->p_align = 0;
+	}
+    }
+
+  /* Give the generic code a chance to handle the headers.  */
+  return _bfd_elf_modify_headers (abfd, info);
 }
 
 /* A structure used to record a list of sections, independently
@@ -8251,7 +8564,7 @@ enum map_symbol_type
 
 /* Output a single mapping symbol.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_output_map_sym (output_arch_syminfo *osi,
 			      enum map_symbol_type type, bfd_vma offset)
 {
@@ -8269,7 +8582,7 @@ elfNN_aarch64_output_map_sym (output_arc
 
 /* Output a single local symbol for a generated stub.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_output_stub_sym (output_arch_syminfo *osi, const char *name,
 			       bfd_vma offset, bfd_vma size)
 {
@@ -8284,7 +8597,7 @@ elfNN_aarch64_output_stub_sym (output_ar
   return osi->func (osi->finfo, name, &sym, osi->sec, NULL) == 1;
 }
 
-static bfd_boolean
+static bool
 aarch64_map_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 {
   struct elf_aarch64_stub_hash_entry *stub_entry;
@@ -8302,7 +8615,7 @@ aarch64_map_one_stub (struct bfd_hash_en
   /* Ensure this stub is attached to the current section being
      processed.  */
   if (stub_sec != osi->sec)
-    return TRUE;
+    return true;
 
   addr = (bfd_vma) stub_entry->stub_offset;
 
@@ -8313,32 +8626,39 @@ aarch64_map_one_stub (struct bfd_hash_en
     case aarch64_stub_adrp_branch:
       if (!elfNN_aarch64_output_stub_sym (osi, stub_name, addr,
 					  sizeof (aarch64_adrp_branch_stub)))
-	return FALSE;
+	return false;
       if (!elfNN_aarch64_output_map_sym (osi, AARCH64_MAP_INSN, addr))
-	return FALSE;
+	return false;
       break;
     case aarch64_stub_long_branch:
       if (!elfNN_aarch64_output_stub_sym
 	  (osi, stub_name, addr, sizeof (aarch64_long_branch_stub)))
-	return FALSE;
+	return false;
       if (!elfNN_aarch64_output_map_sym (osi, AARCH64_MAP_INSN, addr))
-	return FALSE;
+	return false;
       if (!elfNN_aarch64_output_map_sym (osi, AARCH64_MAP_DATA, addr + 16))
-	return FALSE;
+	return false;
+      break;
+    case aarch64_stub_bti_direct_branch:
+      if (!elfNN_aarch64_output_stub_sym (osi, stub_name, addr,
+	  sizeof (aarch64_bti_direct_branch_stub)))
+	return false;
+      if (!elfNN_aarch64_output_map_sym (osi, AARCH64_MAP_INSN, addr))
+	return false;
       break;
     case aarch64_stub_erratum_835769_veneer:
       if (!elfNN_aarch64_output_stub_sym (osi, stub_name, addr,
 					  sizeof (aarch64_erratum_835769_stub)))
-	return FALSE;
+	return false;
       if (!elfNN_aarch64_output_map_sym (osi, AARCH64_MAP_INSN, addr))
-	return FALSE;
+	return false;
       break;
     case aarch64_stub_erratum_843419_veneer:
       if (!elfNN_aarch64_output_stub_sym (osi, stub_name, addr,
 					  sizeof (aarch64_erratum_843419_stub)))
-	return FALSE;
+	return false;
       if (!elfNN_aarch64_output_map_sym (osi, AARCH64_MAP_INSN, addr))
-	return FALSE;
+	return false;
       break;
     case aarch64_stub_none:
       break;
@@ -8347,12 +8667,12 @@ aarch64_map_one_stub (struct bfd_hash_en
       abort ();
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Output mapping symbols for linker generated sections.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_output_arch_local_syms (bfd *output_bfd,
 				      struct bfd_link_info *info,
 				      void *finfo,
@@ -8365,6 +8685,11 @@ elfNN_aarch64_output_arch_local_syms (bf
   output_arch_syminfo osi;
   struct elf_aarch64_link_hash_table *htab;
 
+  if (info->strip == strip_all
+      && !info->emitrelocations
+      && !bfd_link_relocatable (info))
+    return true;
+
   htab = elf_aarch64_hash_table (info);
 
   osi.finfo = finfo;
@@ -8390,7 +8715,7 @@ elfNN_aarch64_output_arch_local_syms (bf
 
 	  /* The first instruction in a stub is always a branch.  */
 	  if (!elfNN_aarch64_output_map_sym (&osi, AARCH64_MAP_INSN, 0))
-	    return FALSE;
+	    return false;
 
 	  bfd_hash_traverse (&htab->stub_hash_table, aarch64_map_one_stub,
 			     &osi);
@@ -8399,7 +8724,7 @@ elfNN_aarch64_output_arch_local_syms (bf
 
   /* Finally, output mapping symbols for the PLT.  */
   if (!htab->root.splt || htab->root.splt->size == 0)
-    return TRUE;
+    return true;
 
   osi.sec_shndx = _bfd_elf_section_from_bfd_section
     (output_bfd, htab->root.splt->output_section);
@@ -8407,23 +8732,23 @@ elfNN_aarch64_output_arch_local_syms (bf
 
   elfNN_aarch64_output_map_sym (&osi, AARCH64_MAP_INSN, 0);
 
-  return TRUE;
+  return true;
 
 }
 
 /* Allocate target specific section data.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
       _aarch64_elf_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -8441,37 +8766,27 @@ unrecord_section_via_map_over_sections (
   unrecord_section_with_aarch64_elf_section_data (sec);
 }
 
-static bfd_boolean
-elfNN_aarch64_close_and_cleanup (bfd *abfd)
-{
-  if (abfd->sections)
-    bfd_map_over_sections (abfd,
-			   unrecord_section_via_map_over_sections, NULL);
-
-  return _bfd_elf_close_and_cleanup (abfd);
-}
-
-static bfd_boolean
+static bool
 elfNN_aarch64_bfd_free_cached_info (bfd *abfd)
 {
   if (abfd->sections)
     bfd_map_over_sections (abfd,
 			   unrecord_section_via_map_over_sections, NULL);
 
-  return _bfd_free_cached_info (abfd);
+  return _bfd_elf_free_cached_info (abfd);
 }
 
 /* Create dynamic sections. This is different from the ARM backend in that
    the got, plt, gotplt and their relocation sections are all created in the
    standard part of the bfd elf backend.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_create_dynamic_sections (bfd *dynobj,
 				       struct bfd_link_info *info)
 {
   /* We need to create .got section.  */
   if (!aarch64_elf_create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   return _bfd_elf_create_dynamic_sections (dynobj, info);
 }
@@ -8480,7 +8795,7 @@ elfNN_aarch64_create_dynamic_sections (b
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
@@ -8498,7 +8813,7 @@ elfNN_aarch64_allocate_dynrelocs (struct
      called to copy all relevant data from the generic to the concrete
      symbol instance.  */
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (h->root.type == bfd_link_hash_warning)
     h = (struct elf_link_hash_entry *) h->root.u.i.link;
@@ -8510,7 +8825,7 @@ elfNN_aarch64_allocate_dynrelocs (struct
      here if it is defined and referenced in a non-shared object.  */
   if (h->type == STT_GNU_IFUNC
       && h->def_regular)
-    return TRUE;
+    return true;
   else if (htab->root.dynamic_sections_created && h->plt.refcount > 0)
     {
       /* Make sure this symbol is output as a dynamic symbol.
@@ -8519,7 +8834,7 @@ elfNN_aarch64_allocate_dynrelocs (struct
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
@@ -8594,7 +8909,7 @@ elfNN_aarch64_allocate_dynrelocs (struct
 
   if (h->got.refcount > 0)
     {
-      bfd_boolean dyn;
+      bool dyn;
       unsigned got_type = elf_aarch64_hash_entry (h)->got_type;
 
       h->got.offset = (bfd_vma) - 1;
@@ -8607,7 +8922,7 @@ elfNN_aarch64_allocate_dynrelocs (struct
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (got_type == GOT_UNKNOWN)
@@ -8667,7 +8982,7 @@ elfNN_aarch64_allocate_dynrelocs (struct
 		     type.  */
 
 		  /* TLSDESC PLT is now needed, but not yet determined.  */
-		  htab->tlsdesc_plt = (bfd_vma) - 1;
+		  htab->root.tlsdesc_plt = (bfd_vma) - 1;
 		}
 
 	      if (got_type & GOT_TLS_GD)
@@ -8683,8 +8998,24 @@ elfNN_aarch64_allocate_dynrelocs (struct
       h->got.offset = (bfd_vma) - 1;
     }
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
+
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
+    if (eh->def_protected)
+      {
+	/* Disallow copy relocations against protected symbol.  */
+	asection *s = p->sec->output_section;
+	if (s != NULL && (s->flags & SEC_READONLY) != 0)
+	  {
+	    info->callbacks->einfo
+		/* xgettext:c-format */
+		(_ ("%F%P: %pB: copy relocation against non-copyable "
+		    "protected symbol `%s'\n"),
+		 p->sec->owner, h->root.root.string);
+	    return false;
+	  }
+      }
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -8704,7 +9035,7 @@ elfNN_aarch64_allocate_dynrelocs (struct
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL;)
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -8717,11 +9048,11 @@ elfNN_aarch64_allocate_dynrelocs (struct
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
+      if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -8729,7 +9060,7 @@ elfNN_aarch64_allocate_dynrelocs (struct
 		   && !h->forced_local
 		   && h->root.type == bfd_link_hash_undefweak
 		   && !bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
     }
@@ -8752,7 +9083,7 @@ elfNN_aarch64_allocate_dynrelocs (struct
 	      && !h->forced_local
 	      && h->root.type == bfd_link_hash_undefweak
 	      && !bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 
 	  /* If that succeeded, we know we'll be keeping all the
 	     relocs.  */
@@ -8760,13 +9091,13 @@ elfNN_aarch64_allocate_dynrelocs (struct
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep:;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc;
 
@@ -8777,19 +9108,18 @@ elfNN_aarch64_allocate_dynrelocs (struct
       sreloc->size += p->count * RELOC_SIZE (htab);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    ifunc dynamic relocs.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_allocate_ifunc_dynrelocs (struct elf_link_hash_entry *h,
 					void *inf)
 {
   struct bfd_link_info *info;
   struct elf_aarch64_link_hash_table *htab;
-  struct elf_aarch64_link_hash_entry *eh;
 
   /* An example of a bfd_link_hash_indirect symbol is versioned
      symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
@@ -8801,7 +9131,7 @@ elfNN_aarch64_allocate_ifunc_dynrelocs (
      called to copy all relevant data from the generic to the concrete
      symbol instance.  */
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   if (h->root.type == bfd_link_hash_warning)
     h = (struct elf_link_hash_entry *) h->root.u.i.link;
@@ -8809,26 +9139,23 @@ elfNN_aarch64_allocate_ifunc_dynrelocs (
   info = (struct bfd_link_info *) inf;
   htab = elf_aarch64_hash_table (info);
 
-  eh = (struct elf_aarch64_link_hash_entry *) h;
-
   /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
      here if it is defined and referenced in a non-shared object.  */
   if (h->type == STT_GNU_IFUNC
       && h->def_regular)
     return _bfd_elf_allocate_ifunc_dyn_relocs (info, h,
-					       &eh->dyn_relocs,
-					       NULL,
+					       &h->dyn_relocs,
 					       htab->plt_entry_size,
 					       htab->plt_header_size,
 					       GOT_ENTRY_SIZE,
-					       FALSE);
-  return TRUE;
+					       false);
+  return true;
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    local ifunc dynamic relocs.  */
 
-static bfd_boolean
+static int
 elfNN_aarch64_allocate_local_ifunc_dynrelocs (void **slot, void *inf)
 {
   struct elf_link_hash_entry *h
@@ -8844,44 +9171,17 @@ elfNN_aarch64_allocate_local_ifunc_dynre
   return elfNN_aarch64_allocate_ifunc_dynrelocs (h, inf);
 }
 
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
-}
-
 /* This is the most important function of all . Innocuosly named
    though !  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				     struct bfd_link_info *info)
 {
   struct elf_aarch64_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
 
   htab = elf_aarch64_hash_table ((info));
@@ -8983,7 +9283,7 @@ elfNN_aarch64_size_dynamic_sections (bfd
 		    {
 		      htab->root.srelplt->size += RELOC_SIZE (htab);
 		      /* Note RELOC_COUNT not incremented here! */
-		      htab->tlsdesc_plt = (bfd_vma) - 1;
+		      htab->root.tlsdesc_plt = (bfd_vma) - 1;
 		    }
 
 		  if (got_type & GOT_TLS_GD)
@@ -9026,19 +9326,21 @@ elfNN_aarch64_size_dynamic_sections (bfd
   if (htab->root.srelplt)
     htab->sgotplt_jump_table_size = aarch64_compute_jump_table_size (htab);
 
-  if (htab->tlsdesc_plt)
+  if (htab->root.tlsdesc_plt)
     {
       if (htab->root.splt->size == 0)
 	htab->root.splt->size += htab->plt_header_size;
 
       /* If we're not using lazy TLS relocations, don't generate the
 	 GOT and PLT entry required.  */
-      if (!(info->flags & DF_BIND_NOW))
+      if ((info->flags & DF_BIND_NOW))
+	htab->root.tlsdesc_plt = 0;
+      else
 	{
-	  htab->tlsdesc_plt = htab->root.splt->size;
+	  htab->root.tlsdesc_plt = htab->root.splt->size;
 	  htab->root.splt->size += htab->tlsdesc_plt_entry_size;
 
-	  htab->dt_tlsdesc_got = htab->root.sgot->size;
+	  htab->root.tlsdesc_got = htab->root.sgot->size;
 	  htab->root.sgot->size += GOT_ENTRY_SIZE;
 	}
     }
@@ -9055,7 +9357,7 @@ elfNN_aarch64_size_dynamic_sections (bfd
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LINKER_CREATED) == 0)
@@ -9072,10 +9374,10 @@ elfNN_aarch64_size_dynamic_sections (bfd
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
+      else if (startswith (bfd_section_name (s), ".rela"))
 	{
 	  if (s->size != 0 && s != htab->root.srelplt)
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -9113,7 +9415,7 @@ elfNN_aarch64_size_dynamic_sections (bfd
 	 of garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (htab->root.dynamic_sections_created)
@@ -9126,66 +9428,32 @@ elfNN_aarch64_size_dynamic_sections (bfd
 #define add_dynamic_entry(TAG, VAL)			\
       _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
+      if (!_bfd_elf_add_dynamic_tags (output_bfd, info, relocs))
+	return false;
 
       if (htab->root.splt->size != 0)
 	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-
 	  if (htab->variant_pcs
 	      && !add_dynamic_entry (DT_AARCH64_VARIANT_PCS, 0))
-	    return FALSE;
-
-	  if (htab->tlsdesc_plt
-	      && !(info->flags & DF_BIND_NOW)
-	      && (!add_dynamic_entry (DT_TLSDESC_PLT, 0)
-		  || !add_dynamic_entry (DT_TLSDESC_GOT, 0)))
-	    return FALSE;
+	    return false;
 
 	  if ((elf_aarch64_tdata (output_bfd)->plt_type == PLT_BTI_PAC)
 	      && (!add_dynamic_entry (DT_AARCH64_BTI_PLT, 0)
 		  || !add_dynamic_entry (DT_AARCH64_PAC_PLT, 0)))
-	    return FALSE;
+	    return false;
 
 	  else if ((elf_aarch64_tdata (output_bfd)->plt_type == PLT_BTI)
 		   && !add_dynamic_entry (DT_AARCH64_BTI_PLT, 0))
-	    return FALSE;
+	    return false;
 
 	  else if ((elf_aarch64_tdata (output_bfd)->plt_type == PLT_PAC)
 		   && !add_dynamic_entry (DT_AARCH64_PAC_PLT, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT, RELOC_SIZE (htab)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->root, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
+	    return false;
 	}
     }
 #undef add_dynamic_entry
 
-  return TRUE;
+  return true;
 }
 
 static inline void
@@ -9320,14 +9588,14 @@ elfNN_aarch64_create_small_pltn_entry (s
 /* Size sections even though they're not dynamic.  We use it to setup
    _TLS_MODULE_BASE_, if needed.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_always_size_sections (bfd *output_bfd,
 				    struct bfd_link_info *info)
 {
   asection *tls_sec;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   tls_sec = elf_hash_table (info)->tls_sec;
 
@@ -9336,7 +9604,7 @@ elfNN_aarch64_always_size_sections (bfd
       struct elf_link_hash_entry *tlsbase;
 
       tlsbase = elf_link_hash_lookup (elf_hash_table (info),
-				      "_TLS_MODULE_BASE_", TRUE, TRUE, FALSE);
+				      "_TLS_MODULE_BASE_", true, true, false);
 
       if (tlsbase)
 	{
@@ -9346,24 +9614,24 @@ elfNN_aarch64_always_size_sections (bfd
 
 	  if (!(_bfd_generic_link_add_one_symbol
 		(info, output_bfd, "_TLS_MODULE_BASE_", BSF_LOCAL,
-		 tls_sec, 0, NULL, FALSE, bed->collect, &h)))
-	    return FALSE;
+		 tls_sec, 0, NULL, false, bed->collect, &h)))
+	    return false;
 
 	  tlsbase->type = STT_TLS;
 	  tlsbase = (struct elf_link_hash_entry *) h;
 	  tlsbase->def_regular = 1;
 	  tlsbase->other = STV_HIDDEN;
-	  (*bed->elf_backend_hide_symbol) (info, tlsbase, TRUE);
+	  (*bed->elf_backend_hide_symbol) (info, tlsbase, true);
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
 				     struct bfd_link_info *info,
 				     struct elf_link_hash_entry *h,
@@ -9403,7 +9671,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd
 	  || plt == NULL
 	  || gotplt == NULL
 	  || relplt == NULL)
-	return FALSE;
+	return false;
 
       elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
       if (!h->def_regular)
@@ -9466,13 +9734,13 @@ elfNN_aarch64_finish_dynamic_symbol (bfd
 				       + h->plt.offset),
 			  htab->root.sgot->contents
 			  + (h->got.offset & ~(bfd_vma) 1));
-	      return TRUE;
+	      return true;
 	    }
 	}
       else if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))
 	{
 	  if (!(h->def_regular || ELF_COMMON_DEF_P (h)))
-	    return FALSE;
+	    return false;
 
 	  BFD_ASSERT ((h->got.offset & 1) != 0);
 	  rela.r_info = ELFNN_R_INFO (0, AARCH64_R (RELATIVE));
@@ -9482,7 +9750,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd
 	}
       else
 	{
-do_glob_dat:
+	do_glob_dat:
 	  BFD_ASSERT ((h->got.offset & 1) == 0);
 	  bfd_put_NN (output_bfd, (bfd_vma) 0,
 		      htab->root.sgot->contents + h->got.offset);
@@ -9528,13 +9796,13 @@ do_glob_dat:
 	  || h == elf_hash_table (info)->hgot))
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up local dynamic symbol handling.  We set the contents of
    various dynamic sections here.  */
 
-static bfd_boolean
+static int
 elfNN_aarch64_finish_local_dynamic_symbol (void **slot, void *inf)
 {
   struct elf_link_hash_entry *h
@@ -9571,8 +9839,11 @@ elfNN_aarch64_init_small_plt0_entry (bfd
 
   memcpy (htab->root.splt->contents, htab->plt0_entry,
 	  htab->plt_header_size);
-  elf_section_data (htab->root.splt->output_section)->this_hdr.sh_entsize =
-    htab->plt_header_size;
+
+  /* PR 26312: Explicitly set the sh_entsize to 0 so that
+     consumers do not think that the section contains fixed
+     sized objects.  */
+  elf_section_data (htab->root.splt->output_section)->this_hdr.sh_entsize = 0;
 
   plt_got_2nd_ent = (htab->root.sgotplt->output_section->vma
 		  + htab->root.sgotplt->output_offset
@@ -9602,7 +9873,7 @@ elfNN_aarch64_init_small_plt0_entry (bfd
 				PG_OFFSET (plt_got_2nd_ent));
 }
 
-static bfd_boolean
+static bool
 elfNN_aarch64_finish_dynamic_sections (bfd *output_bfd,
 				       struct bfd_link_info *info)
 {
@@ -9653,14 +9924,14 @@ elfNN_aarch64_finish_dynamic_sections (b
 	    case DT_TLSDESC_PLT:
 	      s = htab->root.splt;
 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset
-		+ htab->tlsdesc_plt;
+		+ htab->root.tlsdesc_plt;
 	      break;
 
 	    case DT_TLSDESC_GOT:
 	      s = htab->root.sgot;
-	      BFD_ASSERT (htab->dt_tlsdesc_got != (bfd_vma)-1);
+	      BFD_ASSERT (htab->root.tlsdesc_got != (bfd_vma)-1);
 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset
-		+ htab->dt_tlsdesc_got;
+		+ htab->root.tlsdesc_got;
 	      break;
 	    }
 
@@ -9674,15 +9945,11 @@ elfNN_aarch64_finish_dynamic_sections (b
     {
       elfNN_aarch64_init_small_plt0_entry (output_bfd, htab);
 
-      elf_section_data (htab->root.splt->output_section)->
-	this_hdr.sh_entsize = htab->plt_entry_size;
-
-
-      if (htab->tlsdesc_plt && !(info->flags & DF_BIND_NOW))
+      if (htab->root.tlsdesc_plt && !(info->flags & DF_BIND_NOW))
 	{
-	  BFD_ASSERT (htab->dt_tlsdesc_got != (bfd_vma)-1);
+	  BFD_ASSERT (htab->root.tlsdesc_got != (bfd_vma)-1);
 	  bfd_put_NN (output_bfd, (bfd_vma) 0,
-		      htab->root.sgot->contents + htab->dt_tlsdesc_got);
+		      htab->root.sgot->contents + htab->root.tlsdesc_got);
 
 	  const bfd_byte *entry = elfNN_aarch64_tlsdesc_small_plt_entry;
 	  htab->tlsdesc_plt_entry_size = PLT_TLSDESC_ENTRY_SIZE;
@@ -9693,13 +9960,14 @@ elfNN_aarch64_finish_dynamic_sections (b
 	      entry = elfNN_aarch64_tlsdesc_small_plt_bti_entry;
 	    }
 
-	  memcpy (htab->root.splt->contents + htab->tlsdesc_plt,
+	  memcpy (htab->root.splt->contents + htab->root.tlsdesc_plt,
 		  entry, htab->tlsdesc_plt_entry_size);
 
 	  {
 	    bfd_vma adrp1_addr =
 	      htab->root.splt->output_section->vma
-	      + htab->root.splt->output_offset + htab->tlsdesc_plt + 4;
+	      + htab->root.splt->output_offset
+	      + htab->root.tlsdesc_plt + 4;
 
 	    bfd_vma adrp2_addr = adrp1_addr + 4;
 
@@ -9711,10 +9979,10 @@ elfNN_aarch64_finish_dynamic_sections (b
 	      htab->root.sgotplt->output_section->vma
 	      + htab->root.sgotplt->output_offset;
 
-	    bfd_vma dt_tlsdesc_got = got_addr + htab->dt_tlsdesc_got;
+	    bfd_vma dt_tlsdesc_got = got_addr + htab->root.tlsdesc_got;
 
 	    bfd_byte *plt_entry =
-	      htab->root.splt->contents + htab->tlsdesc_plt;
+	      htab->root.splt->contents + htab->root.tlsdesc_plt;
 
 	   /* First instruction in BTI enabled PLT stub is a BTI
 	      instruction so skip it.  */
@@ -9760,7 +10028,7 @@ elfNN_aarch64_finish_dynamic_sections (b
 	{
 	  _bfd_error_handler
 	    (_("discarded output section: `%pA'"), htab->root.sgotplt);
-	  return FALSE;
+	  return false;
 	}
 
       /* Fill in the first three entries in the global offset table.  */
@@ -9800,7 +10068,7 @@ elfNN_aarch64_finish_dynamic_sections (b
 		 elfNN_aarch64_finish_local_dynamic_symbol,
 		 info);
 
-  return TRUE;
+  return true;
 }
 
 /* Check if BTI enabled PLTs are needed.  Returns the type needed.  */
@@ -9810,11 +10078,14 @@ get_plt_type (bfd *abfd)
   aarch64_plt_type ret = PLT_NORMAL;
   bfd_byte *contents, *extdyn, *extdynend;
   asection *sec = bfd_get_section_by_name (abfd, ".dynamic");
-  if (!sec || !bfd_malloc_and_get_section (abfd, sec, &contents))
+  if (!sec
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
+      || sec->size < sizeof (ElfNN_External_Dyn)
+      || !bfd_malloc_and_get_section (abfd, sec, &contents))
     return ret;
   extdyn = contents;
-  extdynend = contents + sec->size;
-  for (; extdyn < extdynend; extdyn += sizeof (ElfNN_External_Dyn))
+  extdynend = contents + sec->size - sizeof (ElfNN_External_Dyn);
+  for (; extdyn <= extdynend; extdyn += sizeof (ElfNN_External_Dyn))
     {
       Elf_Internal_Dyn dyn;
       bfd_elfNN_swap_dyn_in (abfd, extdyn, &dyn);
@@ -9889,7 +10160,7 @@ elfNN_aarch64_plt_sym_val (bfd_vma i, co
    It also allows a period initiated suffix to be added to the symbol, ie:
    "$[adtx]\.[:sym_char]+".  */
 
-static bfd_boolean
+static bool
 is_aarch64_mapping_symbol (const char * name)
 {
   return name != NULL /* Paranoia.  */
@@ -9936,7 +10207,7 @@ elfNN_aarch64_link_setup_gnu_properties
 /* Implement elf_backend_merge_gnu_properties for AArch64.  It serves as a
    wrapper function for _bfd_aarch64_elf_merge_gnu_properties to account
    for the effect of GNU properties of the output_bfd.  */
-static bfd_boolean
+static bool
 elfNN_aarch64_merge_gnu_properties (struct bfd_link_info *info,
 				       bfd *abfd, bfd *bbfd,
 				       elf_property *aprop,
@@ -10011,12 +10282,8 @@ const struct elf_size_info elfNN_aarch64
 #define ELF_ARCH			bfd_arch_aarch64
 #define ELF_MACHINE_CODE		EM_AARCH64
 #define ELF_MAXPAGESIZE			0x10000
-#define ELF_MINPAGESIZE			0x1000
 #define ELF_COMMONPAGESIZE		0x1000
 
-#define bfd_elfNN_close_and_cleanup		\
-  elfNN_aarch64_close_and_cleanup
-
 #define bfd_elfNN_bfd_free_cached_info		\
   elfNN_aarch64_bfd_free_cached_info
 
@@ -10106,6 +10373,12 @@ const struct elf_size_info elfNN_aarch64
 #define elf_backend_section_from_shdr		\
   elfNN_aarch64_section_from_shdr
 
+#define elf_backend_section_from_phdr		\
+  elfNN_aarch64_section_from_phdr
+
+#define elf_backend_modify_headers		\
+  elfNN_aarch64_modify_headers
+
 #define elf_backend_size_dynamic_sections	\
   elfNN_aarch64_size_dynamic_sections
 
@@ -10137,7 +10410,7 @@ const struct elf_size_info elfNN_aarch64
 #define elf_backend_dtrel_excludes_plt 1
 #define elf_backend_got_header_size (GOT_ENTRY_SIZE * 3)
 #define elf_backend_default_execstack  0
-#define elf_backend_extern_protected_data 1
+#define elf_backend_extern_protected_data 0
 #define elf_backend_hash_symbol elf_aarch64_hash_symbol
 
 #undef	elf_backend_obj_attrs_section
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-ia64.c ./bfd/elfnn-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-ia64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfnn-ia64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* IA-64 support for 64-bit ELF
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -39,6 +39,10 @@
 #define	LOG_SECTION_ALIGN	2
 #endif
 
+#define is_ia64_elf(bfd)			   \
+  (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
+   && elf_object_id (bfd) == IA64_ELF_DATA)
+
 typedef struct bfd_hash_entry *(*new_hash_entry_func)
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
 
@@ -73,7 +77,7 @@ struct elfNN_ia64_dyn_sym_info
     int count;
 
     /* Is this reloc against readonly section? */
-    bfd_boolean reltext;
+    bool reltext;
   } *reloc_entries;
 
   /* TRUE when the section contents have been updated.  */
@@ -139,7 +143,6 @@ struct elfNN_ia64_link_hash_table
   asection *rel_pltoff_sec;	/* Dynamic relocation section for same.  */
 
   bfd_size_type minplt_entries;	/* Number of minplt entries.  */
-  unsigned reltext : 1;		/* Are there relocs against readonly sections?  */
   unsigned self_dtpmod_done : 1;/* Has self DTPMOD entry been finished?  */
   bfd_vma self_dtpmod_offset;	/* .got offset to self DTPMOD entry.  */
   /* There are maybe R_IA64_GPREL22 relocations, including those
@@ -159,34 +162,35 @@ struct elfNN_ia64_allocate_data
 {
   struct bfd_link_info *info;
   bfd_size_type ofs;
-  bfd_boolean only_got;
+  bool only_got;
 };
 
 #define elfNN_ia64_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == IA64_ELF_DATA ? ((struct elfNN_ia64_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == IA64_ELF_DATA)		\
+   ? (struct elfNN_ia64_link_hash_table *) (p)->hash : NULL)
 
 static struct elfNN_ia64_dyn_sym_info * get_dyn_sym_info
   (struct elfNN_ia64_link_hash_table *ia64_info,
    struct elf_link_hash_entry *h,
-   bfd *abfd, const Elf_Internal_Rela *rel, bfd_boolean create);
-static bfd_boolean elfNN_ia64_dynamic_symbol_p
+   bfd *abfd, const Elf_Internal_Rela *rel, bool create);
+static bool elfNN_ia64_dynamic_symbol_p
   (struct elf_link_hash_entry *h, struct bfd_link_info *info, int);
-static bfd_boolean elfNN_ia64_choose_gp
-  (bfd *abfd, struct bfd_link_info *info, bfd_boolean final);
+static bool elfNN_ia64_choose_gp
+  (bfd *abfd, struct bfd_link_info *info, bool final);
 static void elfNN_ia64_dyn_sym_traverse
   (struct elfNN_ia64_link_hash_table *ia64_info,
-   bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, void *),
+   bool (*func) (struct elfNN_ia64_dyn_sym_info *, void *),
    void * info);
-static bfd_boolean allocate_global_data_got
+static bool allocate_global_data_got
   (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
-static bfd_boolean allocate_global_fptr_got
+static bool allocate_global_fptr_got
   (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
-static bfd_boolean allocate_local_got
+static bool allocate_local_got
   (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
-static bfd_boolean elfNN_ia64_hpux_vec
+static bool elfNN_ia64_hpux_vec
   (const bfd_target *vec);
-static bfd_boolean allocate_dynrel_entries
+static bool allocate_dynrel_entries
   (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
 static asection *get_pltoff
   (bfd *abfd, struct bfd_link_info *info,
@@ -196,7 +200,7 @@ static asection *get_pltoff
 
 /* Given a ELF reloc, return the matching HOWTO structure.  */
 
-static bfd_boolean
+static bool
 elfNN_ia64_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 			  arelent *bfd_reloc,
 			  Elf_Internal_Rela *elf_reloc)
@@ -210,10 +214,10 @@ elfNN_ia64_info_to_howto (bfd *abfd ATTR
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 #define PLT_HEADER_SIZE		(3 * 16)
@@ -325,10 +329,10 @@ elfNN_ia64_update_short_info (asection *
     }
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_relax_section (bfd *abfd, asection *sec,
 			  struct bfd_link_info *link_info,
-			  bfd_boolean *again)
+			  bool *again)
 {
   struct one_fixup
     {
@@ -345,16 +349,16 @@ elfNN_ia64_relax_section (bfd *abfd, ase
   Elf_Internal_Sym *isymbuf = NULL;
   struct elfNN_ia64_link_hash_table *ia64_info;
   struct one_fixup *fixups = NULL;
-  bfd_boolean changed_contents = FALSE;
-  bfd_boolean changed_relocs = FALSE;
-  bfd_boolean changed_got = FALSE;
-  bfd_boolean skip_relax_pass_0 = TRUE;
-  bfd_boolean skip_relax_pass_1 = TRUE;
+  bool changed_contents = false;
+  bool changed_relocs = false;
+  bool changed_got = false;
+  bool skip_relax_pass_0 = true;
+  bool skip_relax_pass_1 = true;
   bfd_vma gp = 0;
 
   /* Assume we're not going to change any sizes, and we'll only need
      one pass.  */
-  *again = FALSE;
+  *again = false;
 
   if (bfd_link_relocatable (link_info))
     (*link_info->callbacks->einfo)
@@ -362,19 +366,20 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 
   /* Don't even try to relax for non-ELF outputs.  */
   if (!is_elf_hash_table (link_info->hash))
-    return FALSE;
+    return false;
 
   /* Nothing to do if there are no relocations or there is no need for
      the current pass.  */
-  if ((sec->flags & SEC_RELOC) == 0
-      || sec->reloc_count == 0
+  if (sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (link_info->relax_pass == 0 && sec->skip_relax_pass_0)
       || (link_info->relax_pass == 1 && sec->skip_relax_pass_1))
-    return TRUE;
+    return true;
 
   ia64_info = elfNN_ia64_hash_table (link_info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -383,7 +388,7 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
-    return FALSE;
+    return false;
 
   irelend = internal_relocs + sec->reloc_count;
 
@@ -403,7 +408,7 @@ elfNN_ia64_relax_section (bfd *abfd, ase
       asection *tsec;
       struct one_fixup *f;
       bfd_size_type amt;
-      bfd_boolean is_branch;
+      bool is_branch;
       struct elfNN_ia64_dyn_sym_info *dyn_i;
       char symtype;
 
@@ -416,8 +421,8 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	  /* In pass 1, all br relaxations are done. We can skip it. */
 	  if (link_info->relax_pass == 1)
 	    continue;
-	  skip_relax_pass_0 = FALSE;
-	  is_branch = TRUE;
+	  skip_relax_pass_0 = false;
+	  is_branch = true;
 	  break;
 
 	case R_IA64_PCREL60B:
@@ -425,10 +430,10 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	     will increase the code size. Defer it to pass 1.  */
 	  if (link_info->relax_pass == 0)
 	    {
-	      skip_relax_pass_1 = FALSE;
+	      skip_relax_pass_1 = false;
 	      continue;
 	    }
-	  is_branch = TRUE;
+	  is_branch = true;
 	  break;
 
 	case R_IA64_GPREL22:
@@ -440,10 +445,10 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	     increase the code size. Defer it to pass 1.  */
 	  if (link_info->relax_pass == 0)
 	    {
-	      skip_relax_pass_1 = FALSE;
+	      skip_relax_pass_1 = false;
 	      continue;
 	    }
-	  is_branch = FALSE;
+	  is_branch = false;
 	  break;
 
 	default:
@@ -481,7 +486,7 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	    tsec = bfd_section_from_elf_index (abfd, isym->st_shndx);
 
 	  toff = isym->st_value;
-	  dyn_i = get_dyn_sym_info (ia64_info, NULL, abfd, irel, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, NULL, abfd, irel, false);
 	  symtype = ELF_ST_TYPE (isym->st_info);
 	}
       else
@@ -497,7 +502,7 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 		 || h->root.type == bfd_link_hash_warning)
 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
-	  dyn_i = get_dyn_sym_info (ia64_info, h, abfd, irel, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, h, abfd, irel, false);
 
 	  /* For branches to dynamic symbols, we're interested instead
 	     in a branch to the PLT entry.  */
@@ -604,8 +609,8 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 		  if ((irel->r_offset & 3) == 1)
 		    irel->r_offset += 1;
 
-		  changed_contents = TRUE;
-		  changed_relocs = TRUE;
+		  changed_contents = true;
+		  changed_relocs = true;
 		}
 
 	      continue;
@@ -621,8 +626,8 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	      /* Make the relocation offset point to slot 1.  */
 	      irel->r_offset = (irel->r_offset & ~((bfd_vma) 0x3)) + 1;
 
-	      changed_contents = TRUE;
-	      changed_relocs = TRUE;
+	      changed_contents = true;
+	      changed_relocs = true;
 	      continue;
 	    }
 
@@ -735,8 +740,8 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	      != bfd_reloc_ok)
 	    goto error_return;
 
-	  changed_contents = TRUE;
-	  changed_relocs = TRUE;
+	  changed_contents = true;
+	  changed_relocs = true;
 	}
       else
 	{
@@ -747,7 +752,7 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	      gp = _bfd_get_gp_value (obfd);
 	      if (gp == 0)
 		{
-		  if (!elfNN_ia64_choose_gp (obfd, link_info, FALSE))
+		  if (!elfNN_ia64_choose_gp (obfd, link_info, false))
 		    goto error_return;
 		  gp = _bfd_get_gp_value (obfd);
 		}
@@ -766,7 +771,7 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	    {
 	      irel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (irel->r_info),
 					   R_IA64_GPREL22);
-	      changed_relocs = TRUE;
+	      changed_relocs = true;
 	      if (dyn_i->want_gotx)
 		{
 		  dyn_i->want_gotx = 0;
@@ -781,8 +786,8 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	    {
 	      ia64_elf_relax_ldxmov (contents, roff);
 	      irel->r_info = ELFNN_R_INFO (0, R_IA64_NONE);
-	      changed_contents = TRUE;
-	      changed_relocs = TRUE;
+	      changed_contents = true;
+	      changed_relocs = true;
 	    }
 	}
     }
@@ -852,7 +857,7 @@ elfNN_ia64_relax_section (bfd *abfd, ase
 	  if (bfd_link_pic (link_info)
 	      && ia64_info->self_dtpmod_offset != (bfd_vma) -1)
 	    ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela);
-	  data.only_got = TRUE;
+	  data.only_got = true;
 	  elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_dynrel_entries,
 				       &data);
 	}
@@ -866,41 +871,39 @@ elfNN_ia64_relax_section (bfd *abfd, ase
     }
 
   *again = changed_contents || changed_relocs;
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents)
+  if ((unsigned char *) isymbuf != symtab_hdr->contents)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
-  return FALSE;
+  return false;
 }
 #undef skip_relax_pass_0
 #undef skip_relax_pass_1
 
 /* Return TRUE if NAME is an unwind table section name.  */
 
-static inline bfd_boolean
+static inline bool
 is_unwind_section_name (bfd *abfd, const char *name)
 {
   if (elfNN_ia64_hpux_vec (abfd->xvec)
       && !strcmp (name, ELF_STRING_ia64_unwind_hdr))
-    return FALSE;
+    return false;
 
-  return ((CONST_STRNEQ (name, ELF_STRING_ia64_unwind)
-	   && ! CONST_STRNEQ (name, ELF_STRING_ia64_unwind_info))
-	  || CONST_STRNEQ (name, ELF_STRING_ia64_unwind_once));
+  return ((startswith (name, ELF_STRING_ia64_unwind)
+	   && ! startswith (name, ELF_STRING_ia64_unwind_info))
+	  || startswith (name, ELF_STRING_ia64_unwind_once));
 }
 
 /* Handle an IA-64 specific section when reading an object file.  This
    is called when bfd_section_from_shdr finds a section with an unknown
    type.  */
 
-static bfd_boolean
+static bool
 elfNN_ia64_section_from_shdr (bfd *abfd,
 			      Elf_Internal_Shdr *hdr,
 			      const char *name,
@@ -919,17 +922,17 @@ elfNN_ia64_section_from_shdr (bfd *abfd,
 
     case SHT_IA_64_EXT:
       if (strcmp (name, ELF_STRING_ia64_archext) != 0)
-	return FALSE;
+	return false;
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Convert IA-64 specific section flags to bfd internal section flags.  */
@@ -937,20 +940,19 @@ elfNN_ia64_section_from_shdr (bfd *abfd,
 /* ??? There is no bfd internal flag equivalent to the SHF_IA_64_NORECOV
    flag.  */
 
-static bfd_boolean
-elfNN_ia64_section_flags (flagword *flags,
-			  const Elf_Internal_Shdr *hdr)
+static bool
+elfNN_ia64_section_flags (const Elf_Internal_Shdr *hdr)
 {
   if (hdr->sh_flags & SHF_IA_64_SHORT)
-    *flags |= SEC_SMALL_DATA;
+    hdr->bfd_section->flags |= SEC_SMALL_DATA;
 
-  return TRUE;
+  return true;
 }
 
 /* Set the correct type for an IA-64 ELF section.  We do this by the
    section name, which is a hack, but ought to work.  */
 
-static bfd_boolean
+static bool
 elfNN_ia64_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr,
 			  asection *sec)
 {
@@ -996,13 +998,13 @@ elfNN_ia64_fake_sections (bfd *abfd, Elf
   if (elfNN_ia64_hpux_vec (abfd->xvec) && (sec->flags & SHF_TLS))
     hdr->sh_flags |= SHF_IA_64_HP_TLS;
 
-  return TRUE;
+  return true;
 }
 
 /* The final processing done just before writing out an IA-64 ELF
    object file.  */
 
-static bfd_boolean
+static bool
 elfNN_ia64_final_write_processing (bfd *abfd)
 {
   Elf_Internal_Shdr *hdr;
@@ -1033,7 +1035,7 @@ elfNN_ia64_final_write_processing (bfd *
 	flags |= EF_IA_64_ABI64;
 
       elf_elfheader(abfd)->e_flags = flags;
-      elf_flags_init (abfd) = TRUE;
+      elf_flags_init (abfd) = true;
     }
   return _bfd_elf_final_write_processing (abfd);
 }
@@ -1041,7 +1043,7 @@ elfNN_ia64_final_write_processing (bfd *
 /* Hook called by the linker routine which adds symbols from an object
    file.  We use it to put .comm items in .sbss, and not .bss.  */
 
-static bfd_boolean
+static bool
 elfNN_ia64_add_symbol_hook (bfd *abfd,
 			    struct bfd_link_info *info,
 			    Elf_Internal_Sym *sym,
@@ -1064,16 +1066,17 @@ elfNN_ia64_add_symbol_hook (bfd *abfd,
 	  scomm = bfd_make_section_with_flags (abfd, ".scommon",
 					       (SEC_ALLOC
 						| SEC_IS_COMMON
+						| SEC_SMALL_DATA
 						| SEC_LINKER_CREATED));
 	  if (scomm == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       *secp = scomm;
       *valp = sym->st_size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the number of additional phdrs we will need.  */
@@ -1098,7 +1101,7 @@ elfNN_ia64_additional_program_headers (b
   return ret;
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_modify_segment_map (bfd *abfd,
 			       struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
@@ -1119,7 +1122,7 @@ elfNN_ia64_modify_segment_map (bfd *abfd
 	  m = ((struct elf_segment_map *)
 	       bfd_zalloc (abfd, (bfd_size_type) sizeof *m));
 	  if (m == NULL)
-	    return FALSE;
+	    return false;
 
 	  m->p_type = PT_IA_64_ARCHEXT;
 	  m->count = 1;
@@ -1167,7 +1170,7 @@ elfNN_ia64_modify_segment_map (bfd *abfd
 	      m = ((struct elf_segment_map *)
 		   bfd_zalloc (abfd, (bfd_size_type) sizeof *m));
 	      if (m == NULL)
-		return FALSE;
+		return false;
 
 	      m->p_type = PT_IA_64_UNWIND;
 	      m->count = 1;
@@ -1183,14 +1186,14 @@ elfNN_ia64_modify_segment_map (bfd *abfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Turn on PF_IA_64_NORECOV if needed.  This involves traversing all of
    the input sections for each output section in the segment and testing
    for SHF_IA_64_NORECOV on each.  */
 
-static bfd_boolean
+static bool
 elfNN_ia64_modify_headers (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_obj_tdata *tdata = elf_tdata (abfd);
@@ -1229,7 +1232,7 @@ elfNN_ia64_modify_headers (bfd *abfd, st
 /* According to the Tahoe assembler spec, all labels starting with a
    '.' are local.  */
 
-static bfd_boolean
+static bool
 elfNN_ia64_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 				const char *name)
 {
@@ -1238,11 +1241,11 @@ elfNN_ia64_is_local_label_name (bfd *abf
 
 /* Should we do dynamic things to this symbol?  */
 
-static bfd_boolean
+static bool
 elfNN_ia64_dynamic_symbol_p (struct elf_link_hash_entry *h,
 			     struct bfd_link_info *info, int r_type)
 {
-  bfd_boolean ignore_protected
+  bool ignore_protected
     = ((r_type & 0xf8) == 0x40		/* FPTR relocs */
        || (r_type & 0xf8) == 0x50);	/* LTOFF_FPTR relocs */
 
@@ -1307,8 +1310,7 @@ elfNN_ia64_hash_copy_indirect (struct bf
       struct elfNN_ia64_dyn_sym_info *dyn_i;
       unsigned int count;
 
-      if (dir->info)
-	free (dir->info);
+      free (dir->info);
 
       dir->info = ind->info;
       dir->count = ind->count;
@@ -1344,7 +1346,7 @@ elfNN_ia64_hash_copy_indirect (struct bf
 static void
 elfNN_ia64_hash_hide_symbol (struct bfd_link_info *info,
 			     struct elf_link_hash_entry *xh,
-			     bfd_boolean force_local)
+			     bool force_local)
 {
   struct elfNN_ia64_link_hash_entry *h;
   struct elfNN_ia64_dyn_sym_info *dyn_i;
@@ -1389,44 +1391,38 @@ elfNN_ia64_local_htab_eq (const void *pt
 
 /* Free the global elfNN_ia64_dyn_sym_info array.  */
 
-static bfd_boolean
-elfNN_ia64_global_dyn_info_free (void **xentry,
-				 void * unused ATTRIBUTE_UNUSED)
+static bool
+elfNN_ia64_global_dyn_info_free (struct elf_link_hash_entry *xentry,
+				 void *unused ATTRIBUTE_UNUSED)
 {
   struct elfNN_ia64_link_hash_entry *entry
     = (struct elfNN_ia64_link_hash_entry *) xentry;
 
-  if (entry->info)
-    {
-      free (entry->info);
-      entry->info = NULL;
-      entry->count = 0;
-      entry->sorted_count = 0;
-      entry->size = 0;
-    }
+  free (entry->info);
+  entry->info = NULL;
+  entry->count = 0;
+  entry->sorted_count = 0;
+  entry->size = 0;
 
-  return TRUE;
+  return true;
 }
 
 /* Free the local elfNN_ia64_dyn_sym_info array.  */
 
-static bfd_boolean
+static int
 elfNN_ia64_local_dyn_info_free (void **slot,
 				void * unused ATTRIBUTE_UNUSED)
 {
   struct elfNN_ia64_local_hash_entry *entry
     = (struct elfNN_ia64_local_hash_entry *) *slot;
 
-  if (entry->info)
-    {
-      free (entry->info);
-      entry->info = NULL;
-      entry->count = 0;
-      entry->sorted_count = 0;
-      entry->size = 0;
-    }
+  free (entry->info);
+  entry->info = NULL;
+  entry->count = 0;
+  entry->sorted_count = 0;
+  entry->size = 0;
 
-  return TRUE;
+  return true;
 }
 
 /* Destroy IA-64 linker hash table.  */
@@ -1480,6 +1476,7 @@ elfNN_ia64_hash_table_create (bfd *abfd)
       return NULL;
     }
   ret->root.root.hash_table_free = elfNN_ia64_link_hash_table_free;
+  ret->root.dt_pltgot_required = true;
 
   return &ret->root.root;
 }
@@ -1488,12 +1485,12 @@ elfNN_ia64_hash_table_create (bfd *abfd)
 
 struct elfNN_ia64_dyn_sym_traverse_data
 {
-  bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, void *);
+  bool (*func) (struct elfNN_ia64_dyn_sym_info *, void *);
   void * data;
 };
 
-static bfd_boolean
-elfNN_ia64_global_dyn_sym_thunk (struct bfd_hash_entry *xentry,
+static bool
+elfNN_ia64_global_dyn_sym_thunk (struct elf_link_hash_entry *xentry,
 				 void * xdata)
 {
   struct elfNN_ia64_link_hash_entry *entry
@@ -1507,11 +1504,11 @@ elfNN_ia64_global_dyn_sym_thunk (struct
        count != 0;
        count--, dyn_i++)
     if (! (*data->func) (dyn_i, data->data))
-      return FALSE;
-  return TRUE;
+      return false;
+  return true;
 }
 
-static bfd_boolean
+static int
 elfNN_ia64_local_dyn_sym_thunk (void **slot, void * xdata)
 {
   struct elfNN_ia64_local_hash_entry *entry
@@ -1525,13 +1522,14 @@ elfNN_ia64_local_dyn_sym_thunk (void **s
        count != 0;
        count--, dyn_i++)
     if (! (*data->func) (dyn_i, data->data))
-      return FALSE;
-  return TRUE;
+      return false;
+  return true;
 }
 
 static void
 elfNN_ia64_dyn_sym_traverse (struct elfNN_ia64_link_hash_table *ia64_info,
-			     bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, void *),
+			     bool (*func) (struct elfNN_ia64_dyn_sym_info *,
+					   void *),
 			     void * data)
 {
   struct elfNN_ia64_dyn_sym_traverse_data xdata;
@@ -1545,7 +1543,7 @@ elfNN_ia64_dyn_sym_traverse (struct elfN
 		 elfNN_ia64_local_dyn_sym_thunk, &xdata);
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_create_dynamic_sections (bfd *abfd,
 				    struct bfd_link_info *info)
 {
@@ -1553,22 +1551,22 @@ elfNN_ia64_create_dynamic_sections (bfd
   asection *s;
 
   if (! _bfd_elf_create_dynamic_sections (abfd, info))
-    return FALSE;
+    return false;
 
   ia64_info = elfNN_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   {
     flagword flags = bfd_section_flags (ia64_info->root.sgot);
     bfd_set_section_flags (ia64_info->root.sgot, SEC_SMALL_DATA | flags);
     /* The .got section is always aligned at 8 bytes.  */
     if (!bfd_set_section_alignment (ia64_info->root.sgot, 3))
-      return FALSE;
+      return false;
   }
 
   if (!get_pltoff (abfd, info, ia64_info))
-    return FALSE;
+    return false;
 
   s = bfd_make_section_anyway_with_flags (abfd, ".rela.IA_64.pltoff",
 					  (SEC_ALLOC | SEC_LOAD
@@ -1578,17 +1576,17 @@ elfNN_ia64_create_dynamic_sections (bfd
 					   | SEC_READONLY));
   if (s == NULL
       || !bfd_set_section_alignment (s, LOG_SECTION_ALIGN))
-    return FALSE;
+    return false;
   ia64_info->rel_pltoff_sec = s;
 
-  return TRUE;
+  return true;
 }
 
 /* Find and/or create a hash entry for local symbol.  */
 static struct elfNN_ia64_local_hash_entry *
 get_local_sym_hash (struct elfNN_ia64_link_hash_table *ia64_info,
 		    bfd *abfd, const Elf_Internal_Rela *rel,
-		    bfd_boolean create)
+		    bool create)
 {
   struct elfNN_ia64_local_hash_entry e, *ret;
   asection *sec = abfd->sections;
@@ -1818,7 +1816,7 @@ sort_dyn_sym_info (struct elfNN_ia64_dyn
 static struct elfNN_ia64_dyn_sym_info *
 get_dyn_sym_info (struct elfNN_ia64_link_hash_table *ia64_info,
 		  struct elf_link_hash_entry *h, bfd *abfd,
-		  const Elf_Internal_Rela *rel, bfd_boolean create)
+		  const Elf_Internal_Rela *rel, bool create)
 {
   struct elfNN_ia64_dyn_sym_info **info_p, *info, *dyn_i, key;
   unsigned int *count_p, *sorted_count_p, *size_p;
@@ -1871,18 +1869,16 @@ get_dyn_sym_info (struct elfNN_ia64_link
 	      key.addend = addend;
 	      dyn_i = bsearch (&key, info, sorted_count,
 			       sizeof (*info), addend_compare);
-
 	      if (dyn_i)
-		{
-		  return dyn_i;
-		}
+		return dyn_i;
 	    }
 
-	  /* Do a quick check for the last inserted entry.  */
-	  dyn_i = info + count - 1;
-	  if (dyn_i->addend == addend)
+	  if (count != 0)
 	    {
-	      return dyn_i;
+	      /* Do a quick check for the last inserted entry.  */
+	      dyn_i = info + count - 1;
+	      if (dyn_i->addend == addend)
+		return dyn_i;
 	    }
 	}
 
@@ -1910,7 +1906,7 @@ get_dyn_sym_info (struct elfNN_ia64_link
       *size_p = size;
       *info_p = info;
 
-has_space:
+    has_space:
       /* Append the new one to the array.  */
       dyn_i = info + count;
       memset (dyn_i, 0, sizeof (*dyn_i));
@@ -1936,19 +1932,23 @@ has_space:
       if (size != count)
 	{
 	  amt = count * sizeof (*info);
-	  info = bfd_malloc (amt);
-	  if (info != NULL)
-	    {
-	      memcpy (info, *info_p, amt);
-	      free (*info_p);
-	      *size_p = count;
-	      *info_p = info;
-	    }
+	  info = bfd_realloc (info, amt);
+	  *size_p = count;
+	  if (info == NULL && count != 0)
+	    /* realloc should never fail since we are reducing size here,
+	       but if it does use the old array.  */
+	    info = *info_p;
+	  else
+	    *info_p = info;
 	}
 
-      key.addend = addend;
-      dyn_i = bsearch (&key, info, count,
-		       sizeof (*info), addend_compare);
+      if (count == 0)
+	dyn_i = NULL;
+      else
+	{
+	  key.addend = addend;
+	  dyn_i = bsearch (&key, info, count, sizeof (*info), addend_compare);
+	}
     }
 
   return dyn_i;
@@ -2083,7 +2083,7 @@ get_pltoff (bfd *abfd, struct bfd_link_i
 static asection *
 get_reloc_section (bfd *abfd,
 		   struct elfNN_ia64_link_hash_table *ia64_info,
-		   asection *sec, bfd_boolean create)
+		   asection *sec, bool create)
 {
   const char *srel_name;
   asection *srel;
@@ -2116,9 +2116,9 @@ get_reloc_section (bfd *abfd,
   return srel;
 }
 
-static bfd_boolean
+static bool
 count_dyn_reloc (bfd *abfd, struct elfNN_ia64_dyn_sym_info *dyn_i,
-		 asection *srel, int type, bfd_boolean reltext)
+		 asection *srel, int type, bool reltext)
 {
   struct elfNN_ia64_dyn_reloc_entry *rent;
 
@@ -2131,7 +2131,7 @@ count_dyn_reloc (bfd *abfd, struct elfNN
       rent = ((struct elfNN_ia64_dyn_reloc_entry *)
 	      bfd_alloc (abfd, (bfd_size_type) sizeof (*rent)));
       if (!rent)
-	return FALSE;
+	return false;
 
       rent->next = dyn_i->reloc_entries;
       rent->srel = srel;
@@ -2142,10 +2142,10 @@ count_dyn_reloc (bfd *abfd, struct elfNN
   rent->reltext = reltext;
   rent->count++;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			 asection *sec,
 			 const Elf_Internal_Rela *relocs)
@@ -2171,15 +2171,15 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
   int need_entry;
   struct elf_link_hash_entry *h;
   unsigned long r_symndx;
-  bfd_boolean maybe_dynamic;
+  bool maybe_dynamic;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   ia64_info = elfNN_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   got = fptr = srel = pltoff = NULL;
 
@@ -2202,9 +2202,6 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
       else
 	h = NULL;
 
-      if (h && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	continue;
-
       /* We can only get preliminary data on whether a symbol is
 	 locally or externally defined, as not all of the input files
 	 have yet been processed.  Do something with what we know, as
@@ -2350,8 +2347,8 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
 	     abfd, 0, (bfd_vma) 0);
 	}
 
-      if (get_dyn_sym_info (ia64_info, h, abfd, rel, TRUE) == NULL)
-	return FALSE;
+      if (get_dyn_sym_info (ia64_info, h, abfd, rel, true) == NULL)
+	return false;
     }
 
   /* Now, we only do lookup without insertion, which is very fast
@@ -2379,9 +2376,6 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
       else
 	h = NULL;
 
-      if (h && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	continue;
-
       /* We can only get preliminary data on whether a symbol is
 	 locally or externally defined, as not all of the input files
 	 have yet been processed.  Do something with what we know, as
@@ -2522,7 +2516,7 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
       if (!need_entry)
 	continue;
 
-      dyn_i = get_dyn_sym_info (ia64_info, h, abfd, rel, FALSE);
+      dyn_i = get_dyn_sym_info (ia64_info, h, abfd, rel, false);
 
       /* Record whether or not this is a local symbol.  */
       dyn_i->h = h;
@@ -2535,7 +2529,7 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
 	    {
 	      got = get_got (abfd, info, ia64_info);
 	      if (!got)
-		return FALSE;
+		return false;
 	    }
 	  if (need_entry & NEED_GOT)
 	    dyn_i->want_got = 1;
@@ -2554,7 +2548,7 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
 	    {
 	      fptr = get_fptr (abfd, info, ia64_info);
 	      if (!fptr)
-		return FALSE;
+		return false;
 	    }
 
 	  /* FPTRs for shared libraries are allocated by the dynamic
@@ -2564,7 +2558,7 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
 	    {
 	      if (! (bfd_elf_link_record_local_dynamic_symbol
 		     (info, abfd, (long) r_symndx)))
-		return FALSE;
+		return false;
 	    }
 
 	  dyn_i->want_fptr = 1;
@@ -2588,7 +2582,7 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
 	    {
 	      pltoff = get_pltoff (abfd, info, ia64_info);
 	      if (!pltoff)
-		return FALSE;
+		return false;
 	    }
 
 	  dyn_i->want_pltoff = 1;
@@ -2597,23 +2591,23 @@ elfNN_ia64_check_relocs (bfd *abfd, stru
 	{
 	  if (!srel)
 	    {
-	      srel = get_reloc_section (abfd, ia64_info, sec, TRUE);
+	      srel = get_reloc_section (abfd, ia64_info, sec, true);
 	      if (!srel)
-		return FALSE;
+		return false;
 	    }
 	  if (!count_dyn_reloc (abfd, dyn_i, srel, dynrel_type,
 				(sec->flags & SEC_READONLY) != 0))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* For cleanliness, and potentially faster dynamic loading, allocate
    external GOT entries first.  */
 
-static bfd_boolean
+static bool
 allocate_global_data_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
 			  void * data)
 {
@@ -2644,7 +2638,7 @@ allocate_global_data_got (struct elfNN_i
 
 	  ia64_info = elfNN_ia64_hash_table (x->info);
 	  if (ia64_info == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (ia64_info->self_dtpmod_offset == (bfd_vma) -1)
 	    {
@@ -2659,12 +2653,12 @@ allocate_global_data_got (struct elfNN_i
       dyn_i->dtprel_offset = x->ofs;
       x->ofs += 8;
     }
-  return TRUE;
+  return true;
 }
 
 /* Next, allocate all the GOT entries used by LTOFF_FPTR relocs.  */
 
-static bfd_boolean
+static bool
 allocate_global_fptr_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
 			  void * data)
 {
@@ -2677,12 +2671,12 @@ allocate_global_fptr_got (struct elfNN_i
       dyn_i->got_offset = x->ofs;
       x->ofs += 8;
     }
-  return TRUE;
+  return true;
 }
 
 /* Lastly, allocate all the GOT entries for local data.  */
 
-static bfd_boolean
+static bool
 allocate_local_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
 		    void * data)
 {
@@ -2694,7 +2688,7 @@ allocate_local_got (struct elfNN_ia64_dy
       dyn_i->got_offset = x->ofs;
       x->ofs += 8;
     }
-  return TRUE;
+  return true;
 }
 
 /* Search for the index of a global symbol in it's defining object file.  */
@@ -2718,7 +2712,7 @@ global_sym_index (struct elf_link_hash_e
 /* Allocate function descriptors.  We can do these for every function
    in a main executable that is not exported.  */
 
-static bfd_boolean
+static bool
 allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data)
 {
   struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
@@ -2734,8 +2728,7 @@ allocate_fptr (struct elfNN_ia64_dyn_sym
 
       if (!bfd_link_executable (x->info)
 	  && (!h
-	      || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-		  && !UNDEFWEAK_NO_DYNAMIC_RELOC (x->info, h))
+	      || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 	      || (h->root.type != bfd_link_hash_undefweak
 		  && h->root.type != bfd_link_hash_undefined)))
 	{
@@ -2747,7 +2740,7 @@ allocate_fptr (struct elfNN_ia64_dyn_sym
 	      if (!bfd_elf_link_record_local_dynamic_symbol
 		    (x->info, h->root.u.def.section->owner,
 		     global_sym_index (h)))
-		return FALSE;
+		return false;
 	    }
 
 	  dyn_i->want_fptr = 0;
@@ -2760,12 +2753,12 @@ allocate_fptr (struct elfNN_ia64_dyn_sym
       else
 	dyn_i->want_fptr = 0;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate all the minimal PLT entries.  */
 
-static bfd_boolean
+static bool
 allocate_plt_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
 		      void * data)
 {
@@ -2797,12 +2790,12 @@ allocate_plt_entries (struct elfNN_ia64_
 	  dyn_i->want_plt2 = 0;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate all the full PLT entries.  */
 
-static bfd_boolean
+static bool
 allocate_plt2_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
 		       void * data)
 {
@@ -2821,7 +2814,7 @@ allocate_plt2_entries (struct elfNN_ia64
 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
       dyn_i->h->plt.offset = ofs;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate all the PLTOFF entries requested by relocations and
@@ -2829,7 +2822,7 @@ allocate_plt2_entries (struct elfNN_ia64
    because the latter are not necessarily addressable by the GP.
    ??? Relaxation might be able to determine that they are.  */
 
-static bfd_boolean
+static bool
 allocate_pltoff_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
 			 void * data)
 {
@@ -2840,32 +2833,32 @@ allocate_pltoff_entries (struct elfNN_ia
       dyn_i->pltoff_offset = x->ofs;
       x->ofs += 16;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate dynamic relocations for those symbols that turned out
    to be dynamic.  */
 
-static bfd_boolean
+static bool
 allocate_dynrel_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
 			 void * data)
 {
   struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
   struct elfNN_ia64_link_hash_table *ia64_info;
   struct elfNN_ia64_dyn_reloc_entry *rent;
-  bfd_boolean dynamic_symbol, shared, resolved_zero;
+  bool dynamic_symbol, shared, resolved_zero;
 
   ia64_info = elfNN_ia64_hash_table (x->info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   /* Note that this can't be used in relation to FPTR relocs below.  */
   dynamic_symbol = elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info, 0);
 
   shared = bfd_link_pic (x->info);
   resolved_zero = (dyn_i->h
-		   && UNDEFWEAK_NO_DYNAMIC_RELOC (x->info,
-						       dyn_i->h));
+		   && ELF_ST_VISIBILITY (dyn_i->h->other)
+		   && dyn_i->h->root.type == bfd_link_hash_undefweak);
 
   /* Take care of the GOT and PLT relocations.  */
 
@@ -2890,7 +2883,7 @@ allocate_dynrel_entries (struct elfNN_ia
     ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela);
 
   if (x->only_got)
-    return TRUE;
+    return true;
 
   if (ia64_info->rel_fptr_sec && dyn_i->want_fptr)
     {
@@ -2957,14 +2950,14 @@ allocate_dynrel_entries (struct elfNN_ia
 	  abort ();
 	}
       if (rent->reltext)
-	ia64_info->reltext = 1;
+	x->info->flags |= DF_TEXTREL;
       rent->srel->size += sizeof (ElfNN_External_Rela) * count;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				  struct elf_link_hash_entry *h)
 {
@@ -2980,7 +2973,7 @@ elfNN_ia64_adjust_dynamic_symbol (struct
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* If this is a reference to a symbol defined by a dynamic object which
@@ -2990,10 +2983,10 @@ elfNN_ia64_adjust_dynamic_symbol (struct
      But IA-64 code is canonically PIC, so as a rule we can avoid this sort
      of hackery.  */
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				  struct bfd_link_info *info)
 {
@@ -3001,11 +2994,10 @@ elfNN_ia64_size_dynamic_sections (bfd *o
   struct elfNN_ia64_link_hash_table *ia64_info;
   asection *sec;
   bfd *dynobj;
-  bfd_boolean relplt = FALSE;
 
   ia64_info = elfNN_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
   dynobj = ia64_info->root.dynobj;
   ia64_info->self_dtpmod_offset = (bfd_vma) -1;
   BFD_ASSERT(dynobj != NULL);
@@ -3091,7 +3083,7 @@ elfNN_ia64_size_dynamic_sections (bfd *o
 
       if (bfd_link_pic (info) && ia64_info->self_dtpmod_offset != (bfd_vma) -1)
 	ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela);
-      data.only_got = FALSE;
+      data.only_got = false;
       elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_dynrel_entries, &data);
     }
 
@@ -3099,7 +3091,7 @@ elfNN_ia64_size_dynamic_sections (bfd *o
      Allocate memory for them.  */
   for (sec = dynobj->sections; sec != NULL; sec = sec->next)
     {
-      bfd_boolean strip;
+      bool strip;
 
       if (!(sec->flags & SEC_LINKER_CREATED))
 	continue;
@@ -3115,7 +3107,7 @@ elfNN_ia64_size_dynamic_sections (bfd *o
       strip = (sec->size == 0);
 
       if (sec == ia64_info->root.sgot)
-	strip = FALSE;
+	strip = false;
       else if (sec == ia64_info->root.srelgot)
 	{
 	  if (strip)
@@ -3155,7 +3147,7 @@ elfNN_ia64_size_dynamic_sections (bfd *o
 	    ia64_info->rel_pltoff_sec = NULL;
 	  else
 	    {
-	      relplt = TRUE;
+	      ia64_info->root.dt_jmprel_required = true;
 	      /* We use the reloc_count field as a counter if we need to
 		 copy relocs into the output file.  */
 	      sec->reloc_count = 0;
@@ -3170,8 +3162,8 @@ elfNN_ia64_size_dynamic_sections (bfd *o
 	  name = bfd_section_name (sec);
 
 	  if (strcmp (name, ".got.plt") == 0)
-	    strip = FALSE;
-	  else if (CONST_STRNEQ (name, ".rel"))
+	    strip = false;
+	  else if (startswith (name, ".rel"))
 	    {
 	      if (!strip)
 		{
@@ -3191,7 +3183,7 @@ elfNN_ia64_size_dynamic_sections (bfd *o
 	  /* Allocate memory for the section contents.  */
 	  sec->contents = (bfd_byte *) bfd_zalloc (dynobj, sec->size);
 	  if (sec->contents == NULL && sec->size != 0)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -3201,46 +3193,19 @@ elfNN_ia64_size_dynamic_sections (bfd *o
 	 later (in finish_dynamic_sections) but we must add the entries now
 	 so that we get the correct size for the .dynamic section.  */
 
-      if (bfd_link_executable (info))
-	{
-	  /* The DT_DEBUG entry is filled in by the dynamic linker and used
-	     by the debugger.  */
 #define add_dynamic_entry(TAG, VAL) \
   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
+      if (!_bfd_elf_add_dynamic_tags (output_bfd, info, true))
+	return false;
 
       if (!add_dynamic_entry (DT_IA_64_PLT_RESERVE, 0))
-	return FALSE;
-      if (!add_dynamic_entry (DT_PLTGOT, 0))
-	return FALSE;
-
-      if (relplt)
-	{
-	  if (!add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (!add_dynamic_entry (DT_RELA, 0)
-	  || !add_dynamic_entry (DT_RELASZ, 0)
-	  || !add_dynamic_entry (DT_RELAENT, sizeof (ElfNN_External_Rela)))
-	return FALSE;
-
-      if (ia64_info->reltext)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	  info->flags |= DF_TEXTREL;
-	}
+	return false;
     }
 
   /* ??? Perhaps force __gp local.  */
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -3284,7 +3249,7 @@ set_got_entry (bfd *abfd, struct bfd_lin
 {
   struct elfNN_ia64_link_hash_table *ia64_info;
   asection *got_sec;
-  bfd_boolean done;
+  bool done;
   bfd_vma got_offset;
 
   ia64_info = elfNN_ia64_hash_table (info);
@@ -3297,19 +3262,19 @@ set_got_entry (bfd *abfd, struct bfd_lin
     {
     case R_IA64_TPREL64LSB:
       done = dyn_i->tprel_done;
-      dyn_i->tprel_done = TRUE;
+      dyn_i->tprel_done = true;
       got_offset = dyn_i->tprel_offset;
       break;
     case R_IA64_DTPMOD64LSB:
       if (dyn_i->dtpmod_offset != ia64_info->self_dtpmod_offset)
 	{
 	  done = dyn_i->dtpmod_done;
-	  dyn_i->dtpmod_done = TRUE;
+	  dyn_i->dtpmod_done = true;
 	}
       else
 	{
 	  done = ia64_info->self_dtpmod_done;
-	  ia64_info->self_dtpmod_done = TRUE;
+	  ia64_info->self_dtpmod_done = true;
 	  dynindx = 0;
 	}
       got_offset = dyn_i->dtpmod_offset;
@@ -3317,12 +3282,12 @@ set_got_entry (bfd *abfd, struct bfd_lin
     case R_IA64_DTPREL32LSB:
     case R_IA64_DTPREL64LSB:
       done = dyn_i->dtprel_done;
-      dyn_i->dtprel_done = TRUE;
+      dyn_i->dtprel_done = true;
       got_offset = dyn_i->dtprel_offset;
       break;
     default:
       done = dyn_i->got_done;
-      dyn_i->got_done = TRUE;
+      dyn_i->got_done = true;
       got_offset = dyn_i->got_offset;
       break;
     }
@@ -3337,8 +3302,7 @@ set_got_entry (bfd *abfd, struct bfd_lin
       /* Install a dynamic relocation if needed.  */
       if (((bfd_link_pic (info)
 	    && (!dyn_i->h
-		|| (ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT
-		    && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, dyn_i->h))
+		|| ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT
 		|| dyn_i->h->root.type != bfd_link_hash_undefweak)
 	    && dyn_r_type != R_IA64_DTPREL32LSB
 	    && dyn_r_type != R_IA64_DTPREL64LSB)
@@ -3397,7 +3361,7 @@ set_got_entry (bfd *abfd, struct bfd_lin
 		  dyn_r_type = R_IA64_DTPREL64MSB;
 		  break;
 		default:
-		  BFD_ASSERT (FALSE);
+		  BFD_ASSERT (false);
 		  break;
 		}
 	    }
@@ -3476,7 +3440,7 @@ set_fptr_entry (bfd *abfd, struct bfd_li
 static bfd_vma
 set_pltoff_entry (bfd *abfd, struct bfd_link_info *info,
 		  struct elfNN_ia64_dyn_sym_info *dyn_i,
-		  bfd_vma value, bfd_boolean is_plt)
+		  bfd_vma value, bool is_plt)
 {
   struct elfNN_ia64_link_hash_table *ia64_info;
   asection *pltoff_sec;
@@ -3502,8 +3466,7 @@ set_pltoff_entry (bfd *abfd, struct bfd_
       if (!is_plt
 	  && bfd_link_pic (info)
 	  && (!dyn_i->h
-	      || (ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT
-		  && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, dyn_i->h))
+	      || ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT
 	      || dyn_i->h->root.type != bfd_link_hash_undefweak))
 	{
 	  unsigned int dyn_r_type;
@@ -3575,8 +3538,8 @@ elfNN_ia64_unwind_entry_compare (const v
 }
 
 /* Make sure we've got ourselves a nice fat __gp value.  */
-static bfd_boolean
-elfNN_ia64_choose_gp (bfd *abfd, struct bfd_link_info *info, bfd_boolean final)
+static bool
+elfNN_ia64_choose_gp (bfd *abfd, struct bfd_link_info *info, bool final)
 {
   bfd_vma min_vma = (bfd_vma) -1, max_vma = 0;
   bfd_vma min_short_vma = min_vma, max_short_vma = 0;
@@ -3587,7 +3550,7 @@ elfNN_ia64_choose_gp (bfd *abfd, struct
 
   ia64_info = elfNN_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   /* Find the min and max vma of all sections marked short.  Also collect
      min and max vma of any type, for use in selecting a nice gp.  */
@@ -3636,8 +3599,8 @@ elfNN_ia64_choose_gp (bfd *abfd, struct
     }
 
   /* See if the user wants to force a value.  */
-  gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE,
-			     FALSE, FALSE);
+  gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", false,
+			     false, false);
 
   if (gp
       && (gp->root.type == bfd_link_hash_defined
@@ -3702,12 +3665,12 @@ elfNN_ia64_choose_gp (bfd *abfd, struct
     {
       if (max_short_vma - min_short_vma >= 0x400000)
 	{
-overflow:
+	overflow:
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: short data segment overflowed (%#" PRIx64 " >= 0x400000)"),
 	     abfd, (uint64_t) (max_short_vma - min_short_vma));
-	  return FALSE;
+	  return false;
 	}
       else if ((gp_val > min_short_vma
 		&& gp_val - min_short_vma > 0x200000)
@@ -3716,16 +3679,16 @@ overflow:
 	{
 	  _bfd_error_handler
 	    (_("%pB: __gp does not cover short data segment"), abfd);
-	  return FALSE;
+	  return false;
 	}
     }
 
   _bfd_set_gp_value (abfd, gp_val);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   struct elfNN_ia64_link_hash_table *ia64_info;
@@ -3733,7 +3696,7 @@ elfNN_ia64_final_link (bfd *abfd, struct
 
   ia64_info = elfNN_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   /* Make sure we've got ourselves a nice fat __gp value.  */
   if (!bfd_link_relocatable (info))
@@ -3744,12 +3707,12 @@ elfNN_ia64_final_link (bfd *abfd, struct
       /* We assume after gp is set, section size will only decrease. We
 	 need to adjust gp for it.  */
       _bfd_set_gp_value (abfd, 0);
-      if (! elfNN_ia64_choose_gp (abfd, info, TRUE))
-	return FALSE;
+      if (! elfNN_ia64_choose_gp (abfd, info, true))
+	return false;
       gp_val = _bfd_get_gp_value (abfd);
 
-      gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE,
-				 FALSE, FALSE);
+      gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", false,
+				 false, false);
       if (gp)
 	{
 	  gp->root.type = bfd_link_hash_defined;
@@ -3771,13 +3734,13 @@ elfNN_ia64_final_link (bfd *abfd, struct
 	  unwind_output_sec->contents
 	    = bfd_malloc (unwind_output_sec->size);
 	  if (unwind_output_sec->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
 
   /* Invoke the regular ELF backend linker to do all the work.  */
   if (!bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
   if (unwind_output_sec)
     {
@@ -3790,13 +3753,13 @@ elfNN_ia64_final_link (bfd *abfd, struct
       if (! bfd_set_section_contents (abfd, unwind_output_sec,
 				      unwind_output_sec->contents, (bfd_vma) 0,
 				      unwind_output_sec->size))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static int
 elfNN_ia64_relocate_section (bfd *output_bfd,
 			     struct bfd_link_info *info,
 			     bfd *input_bfd,
@@ -3811,13 +3774,13 @@ elfNN_ia64_relocate_section (bfd *output
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
   asection *srel;
-  bfd_boolean ret_val = TRUE;	/* for non-fatal errors */
+  bool ret_val = true;	/* for non-fatal errors */
   bfd_vma gp_val;
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   ia64_info = elfNN_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   /* Infect various flags from the input section to the output section.  */
   if (bfd_link_relocatable (info))
@@ -3832,7 +3795,7 @@ elfNN_ia64_relocate_section (bfd *output
     }
 
   gp_val = _bfd_get_gp_value (output_bfd);
-  srel = get_reloc_section (input_bfd, ia64_info, input_section, FALSE);
+  srel = get_reloc_section (input_bfd, ia64_info, input_section, false);
 
   rel = relocs;
   relend = relocs + input_section->reloc_count;
@@ -3848,8 +3811,8 @@ elfNN_ia64_relocate_section (bfd *output
       bfd_vma value;
       asection *sym_sec;
       bfd_byte *hit_addr;
-      bfd_boolean dynamic_symbol_p;
-      bfd_boolean undef_weak_ref;
+      bool dynamic_symbol_p;
+      bool undef_weak_ref;
 
       r_type = ELFNN_R_TYPE (rel->r_info);
       if (r_type > R_IA64_MAX_RELOC_CODE)
@@ -3858,14 +3821,14 @@ elfNN_ia64_relocate_section (bfd *output
 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			      input_bfd, (int) r_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  ret_val = FALSE;
+	  ret_val = false;
 	  continue;
 	}
 
       howto = ia64_elf_lookup_howto (r_type);
       if (howto == NULL)
 	{
-	  ret_val = FALSE;
+	  ret_val = false;
 	  continue;
 	}
 
@@ -3873,7 +3836,7 @@ elfNN_ia64_relocate_section (bfd *output
       h = NULL;
       sym = NULL;
       sym_sec = NULL;
-      undef_weak_ref = FALSE;
+      undef_weak_ref = false;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -3890,7 +3853,7 @@ elfNN_ia64_relocate_section (bfd *output
 	    {
 	      struct elfNN_ia64_local_hash_entry *loc_h;
 
-	      loc_h = get_local_sym_hash (ia64_info, input_bfd, rel, FALSE);
+	      loc_h = get_local_sym_hash (ia64_info, input_bfd, rel, false);
 	      if (loc_h && ! loc_h->sec_merge_done)
 		{
 		  struct elfNN_ia64_dyn_sym_info *dynent;
@@ -3929,8 +3892,8 @@ elfNN_ia64_relocate_section (bfd *output
 	}
       else
 	{
-	  bfd_boolean unresolved_reloc;
-	  bfd_boolean warned, ignored;
+	  bool unresolved_reloc;
+	  bool warned, ignored;
 	  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
@@ -3939,7 +3902,7 @@ elfNN_ia64_relocate_section (bfd *output
 				   unresolved_reloc, warned, ignored);
 
 	  if (h->root.type == bfd_link_hash_undefweak)
-	    undef_weak_ref = TRUE;
+	    undef_weak_ref = true;
 	  else if (warned || (ignored && bfd_link_executable (info)))
 	    continue;
 	}
@@ -3970,7 +3933,6 @@ elfNN_ia64_relocate_section (bfd *output
 	case R_IA64_DIR64LSB:
 	  /* Install a dynamic relocation for this reloc.  */
 	  if ((dynamic_symbol_p || bfd_link_pic (info))
-	      && !(h && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
 	      && r_symndx != STN_UNDEF
 	      && (input_section->flags & SEC_ALLOC) != 0)
 	    {
@@ -3994,7 +3956,7 @@ elfNN_ia64_relocate_section (bfd *output
 		     h ? h->root.root.string
 		       : bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
 					   sym_sec));
-		  ret_val = FALSE;
+		  ret_val = false;
 		  continue;
 
 		default:
@@ -4062,7 +4024,7 @@ elfNN_ia64_relocate_section (bfd *output
 		 h ? h->root.root.string
 		   : bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
 				       sym_sec));
-	      ret_val = FALSE;
+	      ret_val = false;
 	      continue;
 	    }
 	  value -= gp_val;
@@ -4072,7 +4034,7 @@ elfNN_ia64_relocate_section (bfd *output
 	case R_IA64_LTOFF22:
 	case R_IA64_LTOFF22X:
 	case R_IA64_LTOFF64I:
-	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, false);
 	  value = set_got_entry (input_bfd, info, dyn_i, (h ? h->dynindx : -1),
 				 rel->r_addend, value, R_IA64_DIRNNLSB);
 	  value -= gp_val;
@@ -4083,8 +4045,8 @@ elfNN_ia64_relocate_section (bfd *output
 	case R_IA64_PLTOFF64I:
 	case R_IA64_PLTOFF64MSB:
 	case R_IA64_PLTOFF64LSB:
-	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
-	  value = set_pltoff_entry (output_bfd, info, dyn_i, value, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, false);
+	  value = set_pltoff_entry (output_bfd, info, dyn_i, value, false);
 	  value -= gp_val;
 	  r = ia64_elf_install_value (hit_addr, value, r_type);
 	  break;
@@ -4094,7 +4056,7 @@ elfNN_ia64_relocate_section (bfd *output
 	case R_IA64_FPTR32LSB:
 	case R_IA64_FPTR64MSB:
 	case R_IA64_FPTR64LSB:
-	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	  dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, false);
 	  if (dyn_i->want_fptr)
 	    {
 	      if (!undef_weak_ref)
@@ -4122,7 +4084,7 @@ elfNN_ia64_relocate_section (bfd *output
 		      _bfd_error_handler
 			(_("%pB: linking non-pic code in a position independent executable"),
 			 input_bfd);
-		      ret_val = FALSE;
+		      ret_val = false;
 		      continue;
 		    }
 		  dynindx = 0;
@@ -4163,7 +4125,7 @@ elfNN_ia64_relocate_section (bfd *output
 	  {
 	    long dynindx;
 
-	    dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	    dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, false);
 	    if (dyn_i->want_fptr)
 	      {
 		BFD_ASSERT (h == NULL || h->dynindx == -1);
@@ -4217,7 +4179,7 @@ elfNN_ia64_relocate_section (bfd *output
 	  /* We should have created a PLT entry for any dynamic symbol.  */
 	  dyn_i = NULL;
 	  if (h)
-	    dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, FALSE);
+	    dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, false);
 
 	  if (dyn_i && dyn_i->want_plt2)
 	    {
@@ -4271,7 +4233,7 @@ elfNN_ia64_relocate_section (bfd *output
 						      symtab_hdr,
 						      sym,
 						      sym_sec));
-	      ret_val = FALSE;
+	      ret_val = false;
 	      continue;
 	    }
 	  goto finish_pcrel;
@@ -4426,7 +4388,7 @@ elfNN_ia64_relocate_section (bfd *output
 		got_r_type = R_IA64_DTPRELNNLSB;
 		break;
 	      }
-	    dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	    dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, false);
 	    value = set_got_entry (input_bfd, info, dyn_i, dynindx, r_addend,
 				   value, got_r_type);
 	    value -= gp_val;
@@ -4450,7 +4412,7 @@ elfNN_ia64_relocate_section (bfd *output
 	     don't try to continue.  */
 	  (*info->callbacks->undefined_symbol)
 	    (info, "__gp", input_bfd, input_section, rel->r_offset, 1);
-	  return FALSE;
+	  return false;
 
 	case bfd_reloc_notsupported:
 	  {
@@ -4464,7 +4426,7 @@ elfNN_ia64_relocate_section (bfd *output
 	    (*info->callbacks->warning) (info, _("unsupported reloc"),
 					 name, input_bfd,
 					 input_section, rel->r_offset);
-	    ret_val = FALSE;
+	    ret_val = false;
 	  }
 	  break;
 
@@ -4472,7 +4434,7 @@ elfNN_ia64_relocate_section (bfd *output
 	case bfd_reloc_outofrange:
 	case bfd_reloc_overflow:
 	default:
-missing_tls_sec:
+	missing_tls_sec:
 	  {
 	    const char *name;
 
@@ -4536,7 +4498,7 @@ missing_tls_sec:
 		break;
 	      }
 
-	    ret_val = FALSE;
+	    ret_val = false;
 	  }
 	  break;
 	}
@@ -4545,7 +4507,7 @@ missing_tls_sec:
   return ret_val;
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_finish_dynamic_symbol (bfd *output_bfd,
 				  struct bfd_link_info *info,
 				  struct elf_link_hash_entry *h,
@@ -4556,9 +4518,9 @@ elfNN_ia64_finish_dynamic_symbol (bfd *o
 
   ia64_info = elfNN_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
-  dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, FALSE);
+  dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, false);
 
   /* Fill in the PLT data, if required.  */
   if (dyn_i && dyn_i->want_plt)
@@ -4583,7 +4545,7 @@ elfNN_ia64_finish_dynamic_symbol (bfd *o
       plt_addr = (plt_sec->output_section->vma
 		  + plt_sec->output_offset
 		  + dyn_i->plt_offset);
-      pltoff_addr = set_pltoff_entry (output_bfd, info, dyn_i, plt_addr, TRUE);
+      pltoff_addr = set_pltoff_entry (output_bfd, info, dyn_i, plt_addr, true);
 
       /* Initialize the FULL PLT entry, if needed.  */
       if (dyn_i->want_plt2)
@@ -4633,10 +4595,10 @@ elfNN_ia64_finish_dynamic_symbol (bfd *o
       || h == ia64_info->root.hplt)
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_finish_dynamic_sections (bfd *abfd,
 				    struct bfd_link_info *info)
 {
@@ -4645,7 +4607,7 @@ elfNN_ia64_finish_dynamic_sections (bfd
 
   ia64_info = elfNN_ia64_hash_table (info);
   if (ia64_info == NULL)
-    return FALSE;
+    return false;
 
   dynobj = ia64_info->root.dynobj;
 
@@ -4713,44 +4675,47 @@ elfNN_ia64_finish_dynamic_sections (bfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* ELF file flag handling:  */
 
 /* Function to keep IA-64 specific file flags.  */
-static bfd_boolean
+static bool
 elfNN_ia64_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
-static bfd_boolean
+
+static bool
 elfNN_ia64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword out_flags;
   flagword in_flags;
-  bfd_boolean ok = TRUE;
+  bool ok = true;
+
+  /* FIXME: What should be checked when linking shared libraries?  */
+  if ((ibfd->flags & DYNAMIC) != 0)
+    return true;
 
-  /* Don't even pretend to support mixed-format linking.  */
-  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return FALSE;
+  if (!is_ia64_elf (ibfd) || !is_ia64_elf (obfd))
+    return true;
 
   in_flags  = elf_elfheader (ibfd)->e_flags;
   out_flags = elf_elfheader (obfd)->e_flags;
 
   if (! elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = in_flags;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
@@ -4760,12 +4725,12 @@ elfNN_ia64_merge_private_bfd_data (bfd *
 				    bfd_get_mach (ibfd));
 	}
 
-      return TRUE;
+      return true;
     }
 
   /* Check flag compatibility.  */
   if (in_flags == out_flags)
-    return TRUE;
+    return true;
 
   /* Output has EF_IA_64_REDUCEDFP set only if all inputs have it set.  */
   if (!(in_flags & EF_IA_64_REDUCEDFP) && (out_flags & EF_IA_64_REDUCEDFP))
@@ -4778,7 +4743,7 @@ elfNN_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
   if ((in_flags & EF_IA_64_BE) != (out_flags & EF_IA_64_BE))
     {
@@ -4787,7 +4752,7 @@ elfNN_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
   if ((in_flags & EF_IA_64_ABI64) != (out_flags & EF_IA_64_ABI64))
     {
@@ -4796,7 +4761,7 @@ elfNN_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
   if ((in_flags & EF_IA_64_CONS_GP) != (out_flags & EF_IA_64_CONS_GP))
     {
@@ -4805,7 +4770,7 @@ elfNN_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
   if ((in_flags & EF_IA_64_NOFUNCDESC_CONS_GP)
       != (out_flags & EF_IA_64_NOFUNCDESC_CONS_GP))
@@ -4815,13 +4780,13 @@ elfNN_ia64_merge_private_bfd_data (bfd *
 	 ibfd);
 
       bfd_set_error (bfd_error_bad_value);
-      ok = FALSE;
+      ok = false;
     }
 
   return ok;
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -4840,7 +4805,7 @@ elfNN_ia64_print_private_bfd_data (bfd *
 	   (flags & EF_IA_64_ABI64) ? "ABI64" : "ABI32");
 
   _bfd_elf_print_private_bfd_data (abfd, ptr);
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -4872,7 +4837,7 @@ static const struct bfd_elf_special_sect
   { NULL,		     0,	  0, 0,		   0 }
 };
 
-static bfd_boolean
+static bool
 elfNN_ia64_object_p (bfd *abfd)
 {
   asection *sec;
@@ -4880,10 +4845,10 @@ elfNN_ia64_object_p (bfd *abfd)
   flagword flags;
   const char *name;
   char *unwi_name, *unw_name;
-  bfd_size_type amt;
+  size_t amt;
 
   if (abfd->flags & DYNAMIC)
-    return TRUE;
+    return true;
 
   /* Flags for fake group section.  */
   flags = (SEC_LINKER_CREATED | SEC_GROUP | SEC_LINK_ONCE
@@ -4896,14 +4861,14 @@ elfNN_ia64_object_p (bfd *abfd)
       if (elf_sec_group (sec) == NULL
 	  && ((sec->flags & (SEC_LINK_ONCE | SEC_CODE | SEC_GROUP))
 	      == (SEC_LINK_ONCE | SEC_CODE))
-	  && CONST_STRNEQ (sec->name, ".gnu.linkonce.t."))
+	  && startswith (sec->name, ".gnu.linkonce.t."))
 	{
 	  name = sec->name + 16;
 
 	  amt = strlen (name) + sizeof (".gnu.linkonce.ia64unwi.");
 	  unwi_name = bfd_alloc (abfd, amt);
 	  if (!unwi_name)
-	    return FALSE;
+	    return false;
 
 	  strcpy (stpcpy (unwi_name, ".gnu.linkonce.ia64unwi."), name);
 	  unwi = bfd_get_section_by_name (abfd, unwi_name);
@@ -4911,7 +4876,7 @@ elfNN_ia64_object_p (bfd *abfd)
 	  amt = strlen (name) + sizeof (".gnu.linkonce.ia64unw.");
 	  unw_name = bfd_alloc (abfd, amt);
 	  if (!unw_name)
-	    return FALSE;
+	    return false;
 
 	  strcpy (stpcpy (unw_name, ".gnu.linkonce.ia64unw."), name);
 	  unw = bfd_get_section_by_name (abfd, unw_name);
@@ -4921,7 +4886,7 @@ elfNN_ia64_object_p (bfd *abfd)
 	  group = bfd_make_section_anyway_with_flags (abfd, name,
 						      flags);
 	  if (group == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Move the fake group section to the beginning.  */
 	  bfd_section_list_remove (abfd, group);
@@ -4962,40 +4927,40 @@ elfNN_ia64_object_p (bfd *abfd)
 	  elf_section_data (group)->this_hdr.sh_type = SHT_GROUP;
 	}
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfNN_ia64_hpux_vec (const bfd_target *vec)
 {
   extern const bfd_target ia64_elfNN_hpux_be_vec;
   return (vec == &ia64_elfNN_hpux_be_vec);
 }
 
-static bfd_boolean
+static bool
 elfNN_hpux_init_file_header (bfd *abfd, struct bfd_link_info *info)
 {
   Elf_Internal_Ehdr *i_ehdrp;
 
   if (!_bfd_elf_init_file_header (abfd, info))
-    return FALSE;
+    return false;
 
   i_ehdrp = elf_elfheader (abfd);
   i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
   i_ehdrp->e_ident[EI_ABIVERSION] = 1;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfNN_hpux_backend_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
 					     asection *sec, int *retval)
 {
   if (bfd_is_com_section (sec))
     {
       *retval = SHN_IA_64_ANSI_COMMON;
-      return TRUE;
+      return true;
     }
-  return FALSE;
+  return false;
 }
 
 static void
@@ -5013,6 +4978,11 @@ elfNN_hpux_backend_symbol_processing (bf
       break;
     }
 }
+
+static void
+ignore_errors (const char *fmt ATTRIBUTE_UNUSED, ...)
+{
+}
 
 #define TARGET_LITTLE_SYM		ia64_elfNN_le_vec
 #define TARGET_LITTLE_NAME		"elfNN-ia64-little"
@@ -5110,7 +5080,7 @@ elfNN_hpux_backend_symbol_processing (bf
    We don't want to flood users with so many error messages. We turn
    off the warning for now. It will be turned on later when the Intel
    compiler is fixed.   */
-#define elf_backend_link_order_error_handler NULL
+#define elf_backend_link_order_error_handler ignore_errors
 
 #include "elfNN-target.h"
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-kvx.c ./bfd/elfnn-kvx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-kvx.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elfnn-kvx.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,4779 @@
+/* KVX-specific support for NN-bit ELF.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
+   Contributed by Kalray SA.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3. If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libiberty.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "bfdlink.h"
+#include "objalloc.h"
+#include "elf/kvx.h"
+#include "elfxx-kvx.h"
+
+#define ARCH_SIZE	NN
+
+#if ARCH_SIZE == 64
+#define LOG_FILE_ALIGN	3
+#endif
+
+#if ARCH_SIZE == 32
+#define LOG_FILE_ALIGN	2
+#endif
+
+#define IS_KVX_TLS_RELOC(R_TYPE)			\
+  ((R_TYPE) == BFD_RELOC_KVX_S37_TLS_LE_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S37_TLS_LE_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_LE_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_LE_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_LE_EX6	\
+   || (R_TYPE) == BFD_RELOC_KVX_S37_TLS_DTPOFF_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S37_TLS_DTPOFF_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_DTPOFF_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_DTPOFF_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_DTPOFF_EX6	\
+   || (R_TYPE) == BFD_RELOC_KVX_S37_TLS_IE_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S37_TLS_IE_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_IE_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_IE_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_IE_EX6	\
+   || (R_TYPE) == BFD_RELOC_KVX_S37_TLS_GD_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S37_TLS_GD_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_GD_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_GD_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_GD_EX6	\
+   || (R_TYPE) == BFD_RELOC_KVX_S37_TLS_LD_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S37_TLS_LD_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_LD_LO10	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_LD_UP27	\
+   || (R_TYPE) == BFD_RELOC_KVX_S43_TLS_LD_EX6	\
+   )
+
+#define IS_KVX_TLS_RELAX_RELOC(R_TYPE) 0
+
+#define ELIMINATE_COPY_RELOCS 0
+
+/* Return size of a relocation entry.  HTAB is the bfd's
+   elf_kvx_link_hash_entry.  */
+#define RELOC_SIZE(HTAB) (sizeof (ElfNN_External_Rela))
+
+/* GOT Entry size - 8 bytes in ELF64 and 4 bytes in ELF32.  */
+#define GOT_ENTRY_SIZE                  (ARCH_SIZE / 8)
+#define PLT_ENTRY_SIZE                  (32)
+
+#define PLT_SMALL_ENTRY_SIZE            (4*4)
+
+/* Encoding of the nop instruction */
+#define INSN_NOP 0x00f0037f
+
+#define kvx_compute_jump_table_size(htab)		\
+  (((htab)->root.srelplt == NULL) ? 0			\
+   : (htab)->root.srelplt->reloc_count * GOT_ENTRY_SIZE)
+
+static const bfd_byte elfNN_kvx_small_plt0_entry[PLT_ENTRY_SIZE] =
+{
+ /* FIXME KVX: no first entry, not used yet */
+  0
+};
+
+/* Per function entry in a procedure linkage table looks like this
+   if the distance between the PLTGOT and the PLT is < 4GB use
+   these PLT entries.  */
+static const bfd_byte elfNN_kvx_small_plt_entry[PLT_SMALL_ENTRY_SIZE] =
+{
+  0x10, 0x00, 0xc4, 0x0f,       /* get $r16 = $pc     ;; */
+#if ARCH_SIZE == 32
+  0x10, 0x00, 0x40, 0xb0,       /* lwz $r16 = 0[$r16]   ;; */
+#else
+  0x10, 0x00, 0x40, 0xb8,       /* ld $r16 = 0[$r16] ;; */
+#endif
+  0x00, 0x00, 0x00, 0x18,       /* upper 27 bits for LSU */
+  0x10, 0x00, 0xd8, 0x0f,	/* igoto $r16          ;; */
+};
+
+/* Long stub use 43bits format of make. */
+static const uint32_t elfNN_kvx_long_branch_stub[] =
+{
+  0xe0400000,      /* make $r16 = LO10<emm43> EX6<imm43> */
+  0x00000000,      /* UP27<imm43> ;; */
+  0x0fd80010,      /* igoto "r16  ;; */
+};
+
+#define elf_info_to_howto               elfNN_kvx_info_to_howto
+#define elf_info_to_howto_rel           elfNN_kvx_info_to_howto
+
+#define KVX_ELF_ABI_VERSION		0
+
+/* In case we're on a 32-bit machine, construct a 64-bit "-1" value.  */
+#define ALL_ONES (~ (bfd_vma) 0)
+
+/* Indexed by the bfd interal reloc enumerators.
+   Therefore, the table needs to be synced with BFD_RELOC_KVX_*
+   in reloc.c.   */
+
+#define KVX_KV3_V1_KV3_V2_KV4_V1
+#include "elfxx-kvx-relocs.h"
+#undef KVX_KV3_V1_KV3_V2_KV4_V1
+
+/* Given HOWTO, return the bfd internal relocation enumerator.  */
+
+static bfd_reloc_code_real_type
+elfNN_kvx_bfd_reloc_from_howto (reloc_howto_type *howto)
+{
+  const int size = (int) ARRAY_SIZE (elf_kvx_howto_table);
+  const ptrdiff_t offset = howto - elf_kvx_howto_table;
+
+  if (offset >= 0 && offset < size)
+    return BFD_RELOC_KVX_RELOC_START + offset + 1;
+
+  return BFD_RELOC_KVX_RELOC_START + 1;
+}
+
+/* Given R_TYPE, return the bfd internal relocation enumerator.  */
+
+static bfd_reloc_code_real_type
+elfNN_kvx_bfd_reloc_from_type (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type)
+{
+  static bool initialized_p = false;
+  /* Indexed by R_TYPE, values are offsets in the howto_table.  */
+  static unsigned int offsets[R_KVX_end];
+
+  if (!initialized_p)
+    {
+      unsigned int i;
+
+      for (i = 0; i < ARRAY_SIZE (elf_kvx_howto_table); ++i)
+	offsets[elf_kvx_howto_table[i].type] = i;
+
+      initialized_p = true;
+    }
+
+  /* PR 17512: file: b371e70a.  */
+  if (r_type >= R_KVX_end)
+    {
+      bfd_set_error (bfd_error_bad_value);
+      return BFD_RELOC_KVX_RELOC_END;
+    }
+
+  return (BFD_RELOC_KVX_RELOC_START + 1) + offsets[r_type];
+}
+
+struct elf_kvx_reloc_map
+{
+  bfd_reloc_code_real_type from;
+  bfd_reloc_code_real_type to;
+};
+
+/* Map bfd generic reloc to KVX-specific reloc.  */
+static const struct elf_kvx_reloc_map elf_kvx_reloc_map[] =
+{
+  {BFD_RELOC_NONE, BFD_RELOC_KVX_NONE},
+
+  /* Basic data relocations.  */
+  {BFD_RELOC_CTOR, BFD_RELOC_KVX_NN},
+  {BFD_RELOC_64, BFD_RELOC_KVX_64},
+  {BFD_RELOC_32, BFD_RELOC_KVX_32},
+  {BFD_RELOC_16, BFD_RELOC_KVX_16},
+  {BFD_RELOC_8,  BFD_RELOC_KVX_8},
+
+  {BFD_RELOC_64_PCREL, BFD_RELOC_KVX_64_PCREL},
+  {BFD_RELOC_32_PCREL, BFD_RELOC_KVX_32_PCREL},
+};
+
+/* Given the bfd internal relocation enumerator in CODE, return the
+   corresponding howto entry.  */
+
+static reloc_howto_type *
+elfNN_kvx_howto_from_bfd_reloc (bfd_reloc_code_real_type code)
+{
+  unsigned int i;
+
+  /* Convert bfd generic reloc to KVX-specific reloc.  */
+  if (code < BFD_RELOC_KVX_RELOC_START || code > BFD_RELOC_KVX_RELOC_END)
+    for (i = 0; i < ARRAY_SIZE (elf_kvx_reloc_map) ; i++)
+      if (elf_kvx_reloc_map[i].from == code)
+	{
+	  code = elf_kvx_reloc_map[i].to;
+	  break;
+	}
+
+  if (code > BFD_RELOC_KVX_RELOC_START && code < BFD_RELOC_KVX_RELOC_END)
+      return &elf_kvx_howto_table[code - (BFD_RELOC_KVX_RELOC_START + 1)];
+
+  return NULL;
+}
+
+static reloc_howto_type *
+elfNN_kvx_howto_from_type (bfd *abfd, unsigned int r_type)
+{
+  bfd_reloc_code_real_type val;
+  reloc_howto_type *howto;
+
+#if ARCH_SIZE == 32
+  if (r_type > 256)
+    {
+      bfd_set_error (bfd_error_bad_value);
+      return NULL;
+    }
+#endif
+
+  val = elfNN_kvx_bfd_reloc_from_type (abfd, r_type);
+  howto = elfNN_kvx_howto_from_bfd_reloc (val);
+
+  if (howto != NULL)
+    return howto;
+
+  bfd_set_error (bfd_error_bad_value);
+  return NULL;
+}
+
+static bool
+elfNN_kvx_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *bfd_reloc,
+			 Elf_Internal_Rela *elf_reloc)
+{
+  unsigned int r_type;
+
+  r_type = ELFNN_R_TYPE (elf_reloc->r_info);
+  bfd_reloc->howto = elfNN_kvx_howto_from_type (abfd, r_type);
+
+  if (bfd_reloc->howto == NULL)
+    {
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+			  abfd, r_type);
+      return false;
+    }
+  return true;
+}
+
+static reloc_howto_type *
+elfNN_kvx_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			     bfd_reloc_code_real_type code)
+{
+  reloc_howto_type *howto = elfNN_kvx_howto_from_bfd_reloc (code);
+
+  if (howto != NULL)
+    return howto;
+
+  bfd_set_error (bfd_error_bad_value);
+  return NULL;
+}
+
+static reloc_howto_type *
+elfNN_kvx_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			     const char *r_name)
+{
+  unsigned int i;
+
+  for (i = 0; i < ARRAY_SIZE (elf_kvx_howto_table); ++i)
+    if (elf_kvx_howto_table[i].name != NULL
+	&& strcasecmp (elf_kvx_howto_table[i].name, r_name) == 0)
+      return &elf_kvx_howto_table[i];
+
+  return NULL;
+}
+
+#define TARGET_LITTLE_SYM               kvx_elfNN_vec
+#define TARGET_LITTLE_NAME              "elfNN-kvx"
+
+/* The linker script knows the section names for placement.
+   The entry_names are used to do simple name mangling on the stubs.
+   Given a function name, and its type, the stub can be found. The
+   name can be changed. The only requirement is the %s be present.  */
+#define STUB_ENTRY_NAME   "__%s_veneer"
+
+/* The name of the dynamic interpreter.  This is put in the .interp
+   section.  */
+#define ELF_DYNAMIC_INTERPRETER     "/lib/ld.so.1"
+
+
+/* PCREL 27 is signed-extended and scaled by 4 */
+#define KVX_MAX_FWD_CALL_OFFSET \
+  (((1 << 26) - 1) << 2)
+#define KVX_MAX_BWD_CALL_OFFSET \
+  (-((1 << 26) << 2))
+
+/* Check that the destination of the call is within the PCREL27
+   range. */
+static int
+kvx_valid_call_p (bfd_vma value, bfd_vma place)
+{
+  bfd_signed_vma offset = (bfd_signed_vma) (value - place);
+  return (offset <= KVX_MAX_FWD_CALL_OFFSET
+	  && offset >= KVX_MAX_BWD_CALL_OFFSET);
+}
+
+/* Section name for stubs is the associated section name plus this
+   string.  */
+#define STUB_SUFFIX ".stub"
+
+enum elf_kvx_stub_type
+{
+  kvx_stub_none,
+  kvx_stub_long_branch,
+};
+
+struct elf_kvx_stub_hash_entry
+{
+  /* Base hash table entry structure.  */
+  struct bfd_hash_entry root;
+
+  /* The stub section.  */
+  asection *stub_sec;
+
+  /* Offset within stub_sec of the beginning of this stub.  */
+  bfd_vma stub_offset;
+
+  /* Given the symbol's value and its section we can determine its final
+     value when building the stubs (so the stub knows where to jump).  */
+  bfd_vma target_value;
+  asection *target_section;
+
+  enum elf_kvx_stub_type stub_type;
+
+  /* The symbol table entry, if any, that this was derived from.  */
+  struct elf_kvx_link_hash_entry *h;
+
+  /* Destination symbol type */
+  unsigned char st_type;
+
+  /* Where this stub is being called from, or, in the case of combined
+     stub sections, the first input section in the group.  */
+  asection *id_sec;
+
+  /* The name for the local symbol at the start of this stub.  The
+     stub name in the hash table has to be unique; this does not, so
+     it can be friendlier.  */
+  char *output_name;
+};
+
+/* Used to build a map of a section.  This is required for mixed-endian
+   code/data.  */
+
+typedef struct elf_elf_section_map
+{
+  bfd_vma vma;
+  char type;
+}
+elf_kvx_section_map;
+
+
+typedef struct _kvx_elf_section_data
+{
+  struct bfd_elf_section_data elf;
+  unsigned int mapcount;
+  unsigned int mapsize;
+  elf_kvx_section_map *map;
+}
+_kvx_elf_section_data;
+
+#define elf_kvx_section_data(sec) \
+  ((_kvx_elf_section_data *) elf_section_data (sec))
+
+struct elf_kvx_local_symbol
+{
+  unsigned int got_type;
+  bfd_signed_vma got_refcount;
+  bfd_vma got_offset;
+};
+
+struct elf_kvx_obj_tdata
+{
+  struct elf_obj_tdata root;
+
+  /* local symbol descriptors */
+  struct elf_kvx_local_symbol *locals;
+
+  /* Zero to warn when linking objects with incompatible enum sizes.  */
+  int no_enum_size_warning;
+
+  /* Zero to warn when linking objects with incompatible wchar_t sizes.  */
+  int no_wchar_size_warning;
+};
+
+#define elf_kvx_tdata(bfd)				\
+  ((struct elf_kvx_obj_tdata *) (bfd)->tdata.any)
+
+#define elf_kvx_locals(bfd) (elf_kvx_tdata (bfd)->locals)
+
+#define is_kvx_elf(bfd)				\
+  (bfd_get_flavour (bfd) == bfd_target_elf_flavour	\
+   && elf_tdata (bfd) != NULL				\
+   && elf_object_id (bfd) == KVX_ELF_DATA)
+
+static bool
+elfNN_kvx_mkobject (bfd *abfd)
+{
+  return bfd_elf_allocate_object (abfd, sizeof (struct elf_kvx_obj_tdata),
+				  KVX_ELF_DATA);
+}
+
+#define elf_kvx_hash_entry(ent) \
+  ((struct elf_kvx_link_hash_entry *)(ent))
+
+#define GOT_UNKNOWN    0
+#define GOT_NORMAL     1
+
+#define GOT_TLS_GD     2
+#define GOT_TLS_IE     4
+#define GOT_TLS_LD     8
+
+/* KVX ELF linker hash entry.  */
+struct elf_kvx_link_hash_entry
+{
+  struct elf_link_hash_entry root;
+
+  /* Since PLT entries have variable size, we need to record the
+     index into .got.plt instead of recomputing it from the PLT
+     offset.  */
+  bfd_signed_vma plt_got_offset;
+
+  /* Bit mask representing the type of GOT entry(s) if any required by
+     this symbol.  */
+  unsigned int got_type;
+
+  /* A pointer to the most recently used stub hash entry against this
+     symbol.  */
+  struct elf_kvx_stub_hash_entry *stub_cache;
+};
+
+/* Get the KVX elf linker hash table from a link_info structure.  */
+#define elf_kvx_hash_table(info)					\
+  ((struct elf_kvx_link_hash_table *) ((info)->hash))
+
+#define kvx_stub_hash_lookup(table, string, create, copy)		\
+  ((struct elf_kvx_stub_hash_entry *)				\
+   bfd_hash_lookup ((table), (string), (create), (copy)))
+
+/* KVX ELF linker hash table.  */
+struct elf_kvx_link_hash_table
+{
+  /* The main hash table.  */
+  struct elf_link_hash_table root;
+
+  /* Nonzero to force PIC branch veneers.  */
+  int pic_veneer;
+
+  /* The number of bytes in the initial entry in the PLT.  */
+  bfd_size_type plt_header_size;
+
+  /* The number of bytes in the subsequent PLT etries.  */
+  bfd_size_type plt_entry_size;
+
+  /* The bytes of the subsequent PLT entry.  */
+  const bfd_byte *plt_entry;
+
+  /* Short-cuts to get to dynamic linker sections.  */
+  asection *sdynbss;
+  asection *srelbss;
+
+  /* Small local sym cache.  */
+  struct sym_cache sym_cache;
+
+  /* For convenience in allocate_dynrelocs.  */
+  bfd *obfd;
+
+  /* The amount of space used by the reserved portion of the sgotplt
+     section, plus whatever space is used by the jump slots.  */
+  bfd_vma sgotplt_jump_table_size;
+
+  /* The stub hash table.  */
+  struct bfd_hash_table stub_hash_table;
+
+  /* Linker stub bfd.  */
+  bfd *stub_bfd;
+
+  /* Linker call-backs.  */
+  asection *(*add_stub_section) (const char *, asection *);
+  void (*layout_sections_again) (void);
+
+  /* Array to keep track of which stub sections have been created, and
+     information on stub grouping.  */
+  struct map_stub
+  {
+    /* This is the section to which stubs in the group will be
+       attached.  */
+    asection *link_sec;
+    /* The stub section.  */
+    asection *stub_sec;
+  } *stub_group;
+
+  /* Assorted information used by elfNN_kvx_size_stubs.  */
+  unsigned int bfd_count;
+  unsigned int top_index;
+  asection **input_list;
+};
+
+/* Create an entry in an KVX ELF linker hash table.  */
+
+static struct bfd_hash_entry *
+elfNN_kvx_link_hash_newfunc (struct bfd_hash_entry *entry,
+			     struct bfd_hash_table *table,
+			     const char *string)
+{
+  struct elf_kvx_link_hash_entry *ret =
+    (struct elf_kvx_link_hash_entry *) entry;
+
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (ret == NULL)
+    ret = bfd_hash_allocate (table,
+			     sizeof (struct elf_kvx_link_hash_entry));
+  if (ret == NULL)
+    return (struct bfd_hash_entry *) ret;
+
+  /* Call the allocation method of the superclass.  */
+  ret = ((struct elf_kvx_link_hash_entry *)
+	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
+				     table, string));
+  if (ret != NULL)
+    {
+      ret->got_type = GOT_UNKNOWN;
+      ret->plt_got_offset = (bfd_vma) - 1;
+      ret->stub_cache = NULL;
+    }
+
+  return (struct bfd_hash_entry *) ret;
+}
+
+/* Initialize an entry in the stub hash table.  */
+
+static struct bfd_hash_entry *
+stub_hash_newfunc (struct bfd_hash_entry *entry,
+		   struct bfd_hash_table *table, const char *string)
+{
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (entry == NULL)
+    {
+      entry = bfd_hash_allocate (table,
+				 sizeof (struct
+					 elf_kvx_stub_hash_entry));
+      if (entry == NULL)
+	return entry;
+    }
+
+  /* Call the allocation method of the superclass.  */
+  entry = bfd_hash_newfunc (entry, table, string);
+  if (entry != NULL)
+    {
+      struct elf_kvx_stub_hash_entry *eh;
+
+      /* Initialize the local fields.  */
+      eh = (struct elf_kvx_stub_hash_entry *) entry;
+      eh->stub_sec = NULL;
+      eh->stub_offset = 0;
+      eh->target_value = 0;
+      eh->target_section = NULL;
+      eh->stub_type = kvx_stub_none;
+      eh->h = NULL;
+      eh->id_sec = NULL;
+    }
+
+  return entry;
+}
+
+/* Copy the extra info we tack onto an elf_link_hash_entry.  */
+
+static void
+elfNN_kvx_copy_indirect_symbol (struct bfd_link_info *info,
+				struct elf_link_hash_entry *dir,
+				struct elf_link_hash_entry *ind)
+{
+  struct elf_kvx_link_hash_entry *edir, *eind;
+
+  edir = (struct elf_kvx_link_hash_entry *) dir;
+  eind = (struct elf_kvx_link_hash_entry *) ind;
+
+  if (ind->root.type == bfd_link_hash_indirect)
+    {
+      /* Copy over PLT info.  */
+      if (dir->got.refcount <= 0)
+	{
+	  edir->got_type = eind->got_type;
+	  eind->got_type = GOT_UNKNOWN;
+	}
+    }
+
+  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
+}
+
+/* Destroy a KVX elf linker hash table.  */
+
+static void
+elfNN_kvx_link_hash_table_free (bfd *obfd)
+{
+  struct elf_kvx_link_hash_table *ret
+    = (struct elf_kvx_link_hash_table *) obfd->link.hash;
+
+  bfd_hash_table_free (&ret->stub_hash_table);
+  _bfd_elf_link_hash_table_free (obfd);
+}
+
+/* Create a KVX elf linker hash table.  */
+
+static struct bfd_link_hash_table *
+elfNN_kvx_link_hash_table_create (bfd *abfd)
+{
+  struct elf_kvx_link_hash_table *ret;
+  bfd_size_type amt = sizeof (struct elf_kvx_link_hash_table);
+
+  ret = bfd_zmalloc (amt);
+  if (ret == NULL)
+    return NULL;
+
+  if (!_bfd_elf_link_hash_table_init
+      (&ret->root, abfd, elfNN_kvx_link_hash_newfunc,
+       sizeof (struct elf_kvx_link_hash_entry), KVX_ELF_DATA))
+    {
+      free (ret);
+      return NULL;
+    }
+
+  ret->plt_header_size = PLT_ENTRY_SIZE;
+  ret->plt_entry_size = PLT_SMALL_ENTRY_SIZE;
+  ret->plt_entry = elfNN_kvx_small_plt_entry;
+
+  ret->obfd = abfd;
+
+  if (!bfd_hash_table_init (&ret->stub_hash_table, stub_hash_newfunc,
+			    sizeof (struct elf_kvx_stub_hash_entry)))
+    {
+      _bfd_elf_link_hash_table_free (abfd);
+      return NULL;
+    }
+
+  ret->root.root.hash_table_free = elfNN_kvx_link_hash_table_free;
+
+  return &ret->root.root;
+}
+
+static bfd_reloc_status_type
+kvx_relocate (unsigned int r_type, bfd *input_bfd, asection *input_section,
+	      bfd_vma offset, bfd_vma value)
+{
+  reloc_howto_type *howto;
+
+  howto = elfNN_kvx_howto_from_type (input_bfd, r_type);
+  r_type = elfNN_kvx_bfd_reloc_from_type (input_bfd, r_type);
+  return _bfd_kvx_elf_put_addend (input_bfd,
+				  input_section->contents + offset, r_type,
+				  howto, value);
+}
+
+/* Determine the type of stub needed, if any, for a call.  */
+
+static enum elf_kvx_stub_type
+kvx_type_of_stub (asection *input_sec,
+		  const Elf_Internal_Rela *rel,
+		  asection *sym_sec,
+		  unsigned char st_type,
+		  bfd_vma destination)
+{
+  bfd_vma location;
+  bfd_signed_vma branch_offset;
+  unsigned int r_type;
+  enum elf_kvx_stub_type stub_type = kvx_stub_none;
+
+  if (st_type != STT_FUNC
+      && (sym_sec == input_sec))
+    return stub_type;
+
+  /* Determine where the call point is.  */
+  location = (input_sec->output_offset
+	      + input_sec->output_section->vma + rel->r_offset);
+
+  branch_offset = (bfd_signed_vma) (destination - location);
+
+  r_type = ELFNN_R_TYPE (rel->r_info);
+
+  /* We don't want to redirect any old unconditional jump in this way,
+     only one which is being used for a sibcall, where it is
+     acceptable for the R16 and R17 registers to be clobbered.  */
+  if (r_type == R_KVX_PCREL27
+      && (branch_offset > KVX_MAX_FWD_CALL_OFFSET
+	  || branch_offset < KVX_MAX_BWD_CALL_OFFSET))
+    {
+      stub_type = kvx_stub_long_branch;
+    }
+
+  return stub_type;
+}
+
+/* Build a name for an entry in the stub hash table.  */
+
+static char *
+elfNN_kvx_stub_name (const asection *input_section,
+		     const asection *sym_sec,
+		     const struct elf_kvx_link_hash_entry *hash,
+		     const Elf_Internal_Rela *rel)
+{
+  char *stub_name;
+  bfd_size_type len;
+
+  if (hash)
+    {
+      len = 8 + 1 + strlen (hash->root.root.root.string) + 1 + 16 + 1;
+      stub_name = bfd_malloc (len);
+      if (stub_name != NULL)
+	snprintf (stub_name, len, "%08x_%s+%" PRIx64 "x",
+		  (unsigned int) input_section->id,
+		  hash->root.root.root.string,
+		  (uint64_t) rel->r_addend);
+    }
+  else
+    {
+      len = 8 + 1 + 8 + 1 + 8 + 1 + 16 + 1;
+      stub_name = bfd_malloc (len);
+      if (stub_name != NULL)
+	snprintf (stub_name, len, "%08x_%x:%x+%" PRIx64 "x",
+		  (unsigned int) input_section->id,
+		  (unsigned int) sym_sec->id,
+		  (unsigned int) ELFNN_R_SYM (rel->r_info),
+		  (uint64_t) rel->r_addend);
+    }
+
+  return stub_name;
+}
+
+/* Return true if symbol H should be hashed in the `.gnu.hash' section.  For
+   executable PLT slots where the executable never takes the address of those
+   functions, the function symbols are not added to the hash table.  */
+
+static bool
+elf_kvx_hash_symbol (struct elf_link_hash_entry *h)
+{
+  if (h->plt.offset != (bfd_vma) -1
+      && !h->def_regular
+      && !h->pointer_equality_needed)
+    return false;
+
+  return _bfd_elf_hash_symbol (h);
+}
+
+
+/* Look up an entry in the stub hash.  Stub entries are cached because
+   creating the stub name takes a bit of time.  */
+
+static struct elf_kvx_stub_hash_entry *
+elfNN_kvx_get_stub_entry (const asection *input_section,
+			  const asection *sym_sec,
+			  struct elf_link_hash_entry *hash,
+			  const Elf_Internal_Rela *rel,
+			  struct elf_kvx_link_hash_table *htab)
+{
+  struct elf_kvx_stub_hash_entry *stub_entry;
+  struct elf_kvx_link_hash_entry *h =
+    (struct elf_kvx_link_hash_entry *) hash;
+  const asection *id_sec;
+
+  if ((input_section->flags & SEC_CODE) == 0)
+    return NULL;
+
+  /* If this input section is part of a group of sections sharing one
+     stub section, then use the id of the first section in the group.
+     Stub names need to include a section id, as there may well be
+     more than one stub used to reach say, printf, and we need to
+     distinguish between them.  */
+  id_sec = htab->stub_group[input_section->id].link_sec;
+
+  if (h != NULL && h->stub_cache != NULL
+      && h->stub_cache->h == h && h->stub_cache->id_sec == id_sec)
+    {
+      stub_entry = h->stub_cache;
+    }
+  else
+    {
+      char *stub_name;
+
+      stub_name = elfNN_kvx_stub_name (id_sec, sym_sec, h, rel);
+      if (stub_name == NULL)
+	return NULL;
+
+      stub_entry = kvx_stub_hash_lookup (&htab->stub_hash_table,
+					 stub_name, false, false);
+      if (h != NULL)
+	h->stub_cache = stub_entry;
+
+      free (stub_name);
+    }
+
+  return stub_entry;
+}
+
+
+/* Create a stub section.  */
+
+static asection *
+_bfd_kvx_create_stub_section (asection *section,
+			      struct elf_kvx_link_hash_table *htab)
+
+{
+  size_t namelen;
+  bfd_size_type len;
+  char *s_name;
+
+  namelen = strlen (section->name);
+  len = namelen + sizeof (STUB_SUFFIX);
+  s_name = bfd_alloc (htab->stub_bfd, len);
+  if (s_name == NULL)
+    return NULL;
+
+  memcpy (s_name, section->name, namelen);
+  memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
+  return (*htab->add_stub_section) (s_name, section);
+}
+
+
+/* Find or create a stub section for a link section.
+
+   Fix or create the stub section used to collect stubs attached to
+   the specified link section.  */
+
+static asection *
+_bfd_kvx_get_stub_for_link_section (asection *link_section,
+				    struct elf_kvx_link_hash_table *htab)
+{
+  if (htab->stub_group[link_section->id].stub_sec == NULL)
+    htab->stub_group[link_section->id].stub_sec
+      = _bfd_kvx_create_stub_section (link_section, htab);
+  return htab->stub_group[link_section->id].stub_sec;
+}
+
+
+/* Find or create a stub section in the stub group for an input
+   section.  */
+
+static asection *
+_bfd_kvx_create_or_find_stub_sec (asection *section,
+				  struct elf_kvx_link_hash_table *htab)
+{
+  asection *link_sec = htab->stub_group[section->id].link_sec;
+  return _bfd_kvx_get_stub_for_link_section (link_sec, htab);
+}
+
+
+/* Add a new stub entry in the stub group associated with an input
+   section to the stub hash.  Not all fields of the new stub entry are
+   initialised.  */
+
+static struct elf_kvx_stub_hash_entry *
+_bfd_kvx_add_stub_entry_in_group (const char *stub_name,
+				  asection *section,
+				  struct elf_kvx_link_hash_table *htab)
+{
+  asection *link_sec;
+  asection *stub_sec;
+  struct elf_kvx_stub_hash_entry *stub_entry;
+
+  link_sec = htab->stub_group[section->id].link_sec;
+  stub_sec = _bfd_kvx_create_or_find_stub_sec (section, htab);
+
+  /* Enter this entry into the linker stub hash table.  */
+  stub_entry = kvx_stub_hash_lookup (&htab->stub_hash_table, stub_name,
+				     true, false);
+  if (stub_entry == NULL)
+    {
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: cannot create stub entry %s"),
+			  section->owner, stub_name);
+      return NULL;
+    }
+
+  stub_entry->stub_sec = stub_sec;
+  stub_entry->stub_offset = 0;
+  stub_entry->id_sec = link_sec;
+
+  return stub_entry;
+}
+
+static bool
+kvx_build_one_stub (struct bfd_hash_entry *gen_entry,
+		    void *in_arg)
+{
+  struct elf_kvx_stub_hash_entry *stub_entry;
+  asection *stub_sec;
+  bfd *stub_bfd;
+  bfd_byte *loc;
+  bfd_vma sym_value;
+  unsigned int template_size;
+  const uint32_t *template;
+  unsigned int i;
+  struct bfd_link_info *info;
+
+  /* Massage our args to the form they really have.  */
+  stub_entry = (struct elf_kvx_stub_hash_entry *) gen_entry;
+
+  info = (struct bfd_link_info *) in_arg;
+
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (stub_entry->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
+			      "Retry without "
+			      "--enable-non-contiguous-regions.\n"),
+			    stub_entry->target_section);
+
+  stub_sec = stub_entry->stub_sec;
+
+  /* Make a note of the offset within the stubs for this entry.  */
+  stub_entry->stub_offset = stub_sec->size;
+  loc = stub_sec->contents + stub_entry->stub_offset;
+
+  stub_bfd = stub_sec->owner;
+
+  /* This is the address of the stub destination.  */
+  sym_value = (stub_entry->target_value
+	       + stub_entry->target_section->output_offset
+	       + stub_entry->target_section->output_section->vma);
+
+  switch (stub_entry->stub_type)
+    {
+    case kvx_stub_long_branch:
+      template = elfNN_kvx_long_branch_stub;
+      template_size = sizeof (elfNN_kvx_long_branch_stub);
+      break;
+    default:
+      abort ();
+    }
+
+  for (i = 0; i < (template_size / sizeof template[0]); i++)
+    {
+      bfd_putl32 (template[i], loc);
+      loc += 4;
+    }
+
+  stub_sec->size += template_size;
+
+  switch (stub_entry->stub_type)
+    {
+    case kvx_stub_long_branch:
+      /* The stub uses a make insn with 43bits immediate.
+	 We need to apply 3 relocations:
+	 BFD_RELOC_KVX_S43_LO10,
+	 BFD_RELOC_KVX_S43_UP27,
+	 BFD_RELOC_KVX_S43_EX6.  */
+      if (kvx_relocate (R_KVX_S43_LO10, stub_bfd, stub_sec,
+			stub_entry->stub_offset, sym_value) != bfd_reloc_ok)
+	BFD_FAIL ();
+      if (kvx_relocate (R_KVX_S43_EX6, stub_bfd, stub_sec,
+			stub_entry->stub_offset, sym_value) != bfd_reloc_ok)
+	BFD_FAIL ();
+      if (kvx_relocate (R_KVX_S43_UP27, stub_bfd, stub_sec,
+			stub_entry->stub_offset + 4, sym_value) != bfd_reloc_ok)
+	BFD_FAIL ();
+      break;
+    default:
+      abort ();
+    }
+
+  return true;
+}
+
+/* As above, but don't actually build the stub.  Just bump offset so
+   we know stub section sizes.  */
+
+static bool
+kvx_size_one_stub (struct bfd_hash_entry *gen_entry,
+		   void *in_arg ATTRIBUTE_UNUSED)
+{
+  struct elf_kvx_stub_hash_entry *stub_entry;
+  int size;
+
+  /* Massage our args to the form they really have.  */
+  stub_entry = (struct elf_kvx_stub_hash_entry *) gen_entry;
+
+  switch (stub_entry->stub_type)
+    {
+    case kvx_stub_long_branch:
+      size = sizeof (elfNN_kvx_long_branch_stub);
+      break;
+    default:
+      abort ();
+    }
+
+  stub_entry->stub_sec->size += size;
+  return true;
+}
+
+/* External entry points for sizing and building linker stubs.  */
+
+/* Set up various things so that we can make a list of input sections
+   for each output section included in the link.  Returns -1 on error,
+   0 when no stubs will be needed, and 1 on success.  */
+
+int
+elfNN_kvx_setup_section_lists (bfd *output_bfd,
+			       struct bfd_link_info *info)
+{
+  bfd *input_bfd;
+  unsigned int bfd_count;
+  unsigned int top_id, top_index;
+  asection *section;
+  asection **input_list, **list;
+  bfd_size_type amt;
+  struct elf_kvx_link_hash_table *htab =
+    elf_kvx_hash_table (info);
+
+  if (!is_elf_hash_table ((const struct bfd_link_hash_table *)htab))
+    return 0;
+
+  /* Count the number of input BFDs and find the top input section id.  */
+  for (input_bfd = info->input_bfds, bfd_count = 0, top_id = 0;
+       input_bfd != NULL; input_bfd = input_bfd->link.next)
+    {
+      bfd_count += 1;
+      for (section = input_bfd->sections;
+	   section != NULL; section = section->next)
+	{
+	  if (top_id < section->id)
+	    top_id = section->id;
+	}
+    }
+  htab->bfd_count = bfd_count;
+
+  amt = sizeof (struct map_stub) * (top_id + 1);
+  htab->stub_group = bfd_zmalloc (amt);
+  if (htab->stub_group == NULL)
+    return -1;
+
+  /* We can't use output_bfd->section_count here to find the top output
+     section index as some sections may have been removed, and
+     _bfd_strip_section_from_output doesn't renumber the indices.  */
+  for (section = output_bfd->sections, top_index = 0;
+       section != NULL; section = section->next)
+    {
+      if (top_index < section->index)
+	top_index = section->index;
+    }
+
+  htab->top_index = top_index;
+  amt = sizeof (asection *) * (top_index + 1);
+  input_list = bfd_malloc (amt);
+  htab->input_list = input_list;
+  if (input_list == NULL)
+    return -1;
+
+  /* For sections we aren't interested in, mark their entries with a
+     value we can check later.  */
+  list = input_list + top_index;
+  do
+    *list = bfd_abs_section_ptr;
+  while (list-- != input_list);
+
+  for (section = output_bfd->sections;
+       section != NULL; section = section->next)
+    {
+      if ((section->flags & SEC_CODE) != 0)
+	input_list[section->index] = NULL;
+    }
+
+  return 1;
+}
+
+/* Used by elfNN_kvx_next_input_section and group_sections.  */
+#define PREV_SEC(sec) (htab->stub_group[(sec)->id].link_sec)
+
+/* The linker repeatedly calls this function for each input section,
+   in the order that input sections are linked into output sections.
+   Build lists of input sections to determine groupings between which
+   we may insert linker stubs.  */
+
+void
+elfNN_kvx_next_input_section (struct bfd_link_info *info, asection *isec)
+{
+  struct elf_kvx_link_hash_table *htab =
+    elf_kvx_hash_table (info);
+
+  if (isec->output_section->index <= htab->top_index)
+    {
+      asection **list = htab->input_list + isec->output_section->index;
+
+      if (*list != bfd_abs_section_ptr)
+	{
+	  /* Steal the link_sec pointer for our list.  */
+	  /* This happens to make the list in reverse order,
+	     which is what we want.  */
+	  PREV_SEC (isec) = *list;
+	  *list = isec;
+	}
+    }
+}
+
+/* See whether we can group stub sections together.  Grouping stub
+   sections may result in fewer stubs.  More importantly, we need to
+   put all .init* and .fini* stubs at the beginning of the .init or
+   .fini output sections respectively, because glibc splits the
+   _init and _fini functions into multiple parts.  Putting a stub in
+   the middle of a function is not a good idea.  */
+
+static void
+group_sections (struct elf_kvx_link_hash_table *htab,
+		bfd_size_type stub_group_size,
+		bool stubs_always_after_branch)
+{
+  asection **list = htab->input_list;
+
+  do
+    {
+      asection *tail = *list;
+      asection *head;
+
+      if (tail == bfd_abs_section_ptr)
+	continue;
+
+      /* Reverse the list: we must avoid placing stubs at the
+	 beginning of the section because the beginning of the text
+	 section may be required for an interrupt vector in bare metal
+	 code.  */
+#define NEXT_SEC PREV_SEC
+      head = NULL;
+      while (tail != NULL)
+	{
+	  /* Pop from tail.  */
+	  asection *item = tail;
+	  tail = PREV_SEC (item);
+
+	  /* Push on head.  */
+	  NEXT_SEC (item) = head;
+	  head = item;
+	}
+
+      while (head != NULL)
+	{
+	  asection *curr;
+	  asection *next;
+	  bfd_vma stub_group_start = head->output_offset;
+	  bfd_vma end_of_next;
+
+	  curr = head;
+	  while (NEXT_SEC (curr) != NULL)
+	    {
+	      next = NEXT_SEC (curr);
+	      end_of_next = next->output_offset + next->size;
+	      if (end_of_next - stub_group_start >= stub_group_size)
+		/* End of NEXT is too far from start, so stop.  */
+		break;
+	      /* Add NEXT to the group.  */
+	      curr = next;
+	    }
+
+	  /* OK, the size from the start to the start of CURR is less
+	     than stub_group_size and thus can be handled by one stub
+	     section.  (Or the head section is itself larger than
+	     stub_group_size, in which case we may be toast.)
+	     We should really be keeping track of the total size of
+	     stubs added here, as stubs contribute to the final output
+	     section size.  */
+	  do
+	    {
+	      next = NEXT_SEC (head);
+	      /* Set up this stub group.  */
+	      htab->stub_group[head->id].link_sec = curr;
+	    }
+	  while (head != curr && (head = next) != NULL);
+
+	  /* But wait, there's more!  Input sections up to stub_group_size
+	     bytes after the stub section can be handled by it too.  */
+	  if (!stubs_always_after_branch)
+	    {
+	      stub_group_start = curr->output_offset + curr->size;
+
+	      while (next != NULL)
+		{
+		  end_of_next = next->output_offset + next->size;
+		  if (end_of_next - stub_group_start >= stub_group_size)
+		    /* End of NEXT is too far from stubs, so stop.  */
+		    break;
+		  /* Add NEXT to the stub group.  */
+		  head = next;
+		  next = NEXT_SEC (head);
+		  htab->stub_group[head->id].link_sec = curr;
+		}
+	    }
+	  head = next;
+	}
+    }
+  while (list++ != htab->input_list + htab->top_index);
+
+  free (htab->input_list);
+}
+
+static void
+_bfd_kvx_resize_stubs (struct elf_kvx_link_hash_table *htab)
+{
+  asection *section;
+
+  /* OK, we've added some stubs.  Find out the new size of the
+     stub sections.  */
+  for (section = htab->stub_bfd->sections;
+       section != NULL; section = section->next)
+    {
+      /* Ignore non-stub sections.  */
+      if (!strstr (section->name, STUB_SUFFIX))
+	continue;
+      section->size = 0;
+    }
+
+  bfd_hash_traverse (&htab->stub_hash_table, kvx_size_one_stub, htab);
+}
+
+/* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
+
+bool
+kvx_elfNN_init_stub_bfd (struct bfd_link_info *info,
+			bfd *stub_bfd)
+{
+  struct elf_kvx_link_hash_table *htab;
+
+  elf_elfheader (stub_bfd)->e_ident[EI_CLASS] = ELFCLASSNN;
+
+/* Always hook our dynamic sections into the first bfd, which is the
+   linker created stub bfd.  This ensures that the GOT header is at
+   the start of the output TOC section.  */
+  htab = elf_kvx_hash_table (info);
+  if (htab == NULL)
+    return false;
+
+  return true;
+}
+
+/* Determine and set the size of the stub section for a final link.
+
+   The basic idea here is to examine all the relocations looking for
+   PC-relative calls to a target that is unreachable with a 27bits
+   immediate (found in call and goto).  */
+
+bool
+elfNN_kvx_size_stubs (bfd *output_bfd,
+		     bfd *stub_bfd,
+		     struct bfd_link_info *info,
+		     bfd_signed_vma group_size,
+		     asection * (*add_stub_section) (const char *,
+						     asection *),
+		     void (*layout_sections_again) (void))
+{
+  bfd_size_type stub_group_size;
+  bool stubs_always_before_branch;
+  bool stub_changed = false;
+  struct elf_kvx_link_hash_table *htab = elf_kvx_hash_table (info);
+
+  /* Propagate mach to stub bfd, because it may not have been
+     finalized when we created stub_bfd.  */
+  bfd_set_arch_mach (stub_bfd, bfd_get_arch (output_bfd),
+		     bfd_get_mach (output_bfd));
+
+  /* Stash our params away.  */
+  htab->stub_bfd = stub_bfd;
+  htab->add_stub_section = add_stub_section;
+  htab->layout_sections_again = layout_sections_again;
+  stubs_always_before_branch = group_size < 0;
+  if (group_size < 0)
+    stub_group_size = -group_size;
+  else
+    stub_group_size = group_size;
+
+  if (stub_group_size == 1)
+    {
+      /* Default values.  */
+      /* KVX branch range is +-256MB. The value used is 1MB less.  */
+      stub_group_size = 255 * 1024 * 1024;
+    }
+
+  group_sections (htab, stub_group_size, stubs_always_before_branch);
+
+  (*htab->layout_sections_again) ();
+
+  while (1)
+    {
+      bfd *input_bfd;
+
+      for (input_bfd = info->input_bfds;
+	   input_bfd != NULL; input_bfd = input_bfd->link.next)
+	{
+	  Elf_Internal_Shdr *symtab_hdr;
+	  asection *section;
+	  Elf_Internal_Sym *local_syms = NULL;
+
+	  if (!is_kvx_elf (input_bfd)
+	      || (input_bfd->flags & BFD_LINKER_CREATED) != 0)
+	    continue;
+
+	  /* We'll need the symbol table in a second.  */
+	  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+	  if (symtab_hdr->sh_info == 0)
+	    continue;
+
+	  /* Walk over each section attached to the input bfd.  */
+	  for (section = input_bfd->sections;
+	       section != NULL; section = section->next)
+	    {
+	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
+
+	      /* If there aren't any relocs, then there's nothing more
+		 to do.  */
+	      if ((section->flags & SEC_RELOC) == 0
+		  || section->reloc_count == 0
+		  || (section->flags & SEC_CODE) == 0)
+		continue;
+
+	      /* If this section is a link-once section that will be
+		 discarded, then don't create any stubs.  */
+	      if (section->output_section == NULL
+		  || section->output_section->owner != output_bfd)
+		continue;
+
+	      /* Get the relocs.  */
+	      internal_relocs
+		= _bfd_elf_link_read_relocs (input_bfd, section, NULL,
+					     NULL, info->keep_memory);
+	      if (internal_relocs == NULL)
+		goto error_ret_free_local;
+
+	      /* Now examine each relocation.  */
+	      irela = internal_relocs;
+	      irelaend = irela + section->reloc_count;
+	      for (; irela < irelaend; irela++)
+		{
+		  unsigned int r_type, r_indx;
+		  enum elf_kvx_stub_type stub_type;
+		  struct elf_kvx_stub_hash_entry *stub_entry;
+		  asection *sym_sec;
+		  bfd_vma sym_value;
+		  bfd_vma destination;
+		  struct elf_kvx_link_hash_entry *hash;
+		  const char *sym_name;
+		  char *stub_name;
+		  const asection *id_sec;
+		  unsigned char st_type;
+		  bfd_size_type len;
+
+		  r_type = ELFNN_R_TYPE (irela->r_info);
+		  r_indx = ELFNN_R_SYM (irela->r_info);
+
+		  if (r_type >= (unsigned int) R_KVX_end)
+		    {
+		      bfd_set_error (bfd_error_bad_value);
+		    error_ret_free_internal:
+		      if (elf_section_data (section)->relocs == NULL)
+			free (internal_relocs);
+		      goto error_ret_free_local;
+		    }
+
+		  /* Only look for stubs on unconditional branch and
+		     branch and link instructions.  */
+		  /* This catches CALL and GOTO insn */
+		  if (r_type != (unsigned int) R_KVX_PCREL27)
+		    continue;
+
+		  /* Now determine the call target, its name, value,
+		     section.  */
+		  sym_sec = NULL;
+		  sym_value = 0;
+		  destination = 0;
+		  hash = NULL;
+		  sym_name = NULL;
+		  if (r_indx < symtab_hdr->sh_info)
+		    {
+		      /* It's a local symbol.  */
+		      Elf_Internal_Sym *sym;
+		      Elf_Internal_Shdr *hdr;
+
+		      if (local_syms == NULL)
+			{
+			  local_syms
+			    = (Elf_Internal_Sym *) symtab_hdr->contents;
+			  if (local_syms == NULL)
+			    local_syms
+			      = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
+						      symtab_hdr->sh_info, 0,
+						      NULL, NULL, NULL);
+			  if (local_syms == NULL)
+			    goto error_ret_free_internal;
+			}
+
+		      sym = local_syms + r_indx;
+		      hdr = elf_elfsections (input_bfd)[sym->st_shndx];
+		      sym_sec = hdr->bfd_section;
+		      if (!sym_sec)
+			/* This is an undefined symbol.  It can never
+			   be resolved.  */
+			continue;
+
+		      if (ELF_ST_TYPE (sym->st_info) != STT_SECTION)
+			sym_value = sym->st_value;
+		      destination = (sym_value + irela->r_addend
+				     + sym_sec->output_offset
+				     + sym_sec->output_section->vma);
+		      st_type = ELF_ST_TYPE (sym->st_info);
+		      sym_name
+			= bfd_elf_string_from_elf_section (input_bfd,
+							   symtab_hdr->sh_link,
+							   sym->st_name);
+		    }
+		  else
+		    {
+		      int e_indx;
+
+		      e_indx = r_indx - symtab_hdr->sh_info;
+		      hash = ((struct elf_kvx_link_hash_entry *)
+			      elf_sym_hashes (input_bfd)[e_indx]);
+
+		      while (hash->root.root.type == bfd_link_hash_indirect
+			     || hash->root.root.type == bfd_link_hash_warning)
+			hash = ((struct elf_kvx_link_hash_entry *)
+				hash->root.root.u.i.link);
+
+		      if (hash->root.root.type == bfd_link_hash_defined
+			  || hash->root.root.type == bfd_link_hash_defweak)
+			{
+			  struct elf_kvx_link_hash_table *globals =
+			    elf_kvx_hash_table (info);
+			  sym_sec = hash->root.root.u.def.section;
+			  sym_value = hash->root.root.u.def.value;
+			  /* For a destination in a shared library,
+			     use the PLT stub as target address to
+			     decide whether a branch stub is
+			     needed.  */
+			  if (globals->root.splt != NULL && hash != NULL
+			      && hash->root.plt.offset != (bfd_vma) - 1)
+			    {
+			      sym_sec = globals->root.splt;
+			      sym_value = hash->root.plt.offset;
+			      if (sym_sec->output_section != NULL)
+				destination = (sym_value
+					       + sym_sec->output_offset
+					       + sym_sec->output_section->vma);
+			    }
+			  else if (sym_sec->output_section != NULL)
+			    destination = (sym_value + irela->r_addend
+					   + sym_sec->output_offset
+					   + sym_sec->output_section->vma);
+			}
+		      else if (hash->root.root.type == bfd_link_hash_undefined
+			       || (hash->root.root.type
+				   == bfd_link_hash_undefweak))
+			{
+			  /* For a shared library, use the PLT stub as
+			     target address to decide whether a long
+			     branch stub is needed.
+			     For absolute code, they cannot be handled.  */
+			  struct elf_kvx_link_hash_table *globals =
+			    elf_kvx_hash_table (info);
+
+			  if (globals->root.splt != NULL && hash != NULL
+			      && hash->root.plt.offset != (bfd_vma) - 1)
+			    {
+			      sym_sec = globals->root.splt;
+			      sym_value = hash->root.plt.offset;
+			      if (sym_sec->output_section != NULL)
+				destination = (sym_value
+					       + sym_sec->output_offset
+					       + sym_sec->output_section->vma);
+			    }
+			  else
+			    continue;
+			}
+		      else
+			{
+			  bfd_set_error (bfd_error_bad_value);
+			  goto error_ret_free_internal;
+			}
+		      st_type = ELF_ST_TYPE (hash->root.type);
+		      sym_name = hash->root.root.root.string;
+		    }
+
+		  /* Determine what (if any) linker stub is needed.  */
+		  stub_type = kvx_type_of_stub (section, irela, sym_sec,
+						st_type, destination);
+		  if (stub_type == kvx_stub_none)
+		    continue;
+
+		  /* Support for grouping stub sections.  */
+		  id_sec = htab->stub_group[section->id].link_sec;
+
+		  /* Get the name of this stub.  */
+		  stub_name = elfNN_kvx_stub_name (id_sec, sym_sec, hash,
+						  irela);
+		  if (!stub_name)
+		    goto error_ret_free_internal;
+
+		  stub_entry =
+		    kvx_stub_hash_lookup (&htab->stub_hash_table,
+					 stub_name, false, false);
+		  if (stub_entry != NULL)
+		    {
+		      /* The proper stub has already been created.  */
+		      free (stub_name);
+		      /* Always update this stub's target since it may have
+			 changed after layout.  */
+		      stub_entry->target_value = sym_value + irela->r_addend;
+		      continue;
+		    }
+
+		  stub_entry = _bfd_kvx_add_stub_entry_in_group
+		    (stub_name, section, htab);
+		  if (stub_entry == NULL)
+		    {
+		      free (stub_name);
+		      goto error_ret_free_internal;
+		    }
+
+		  stub_entry->target_value = sym_value + irela->r_addend;
+		  stub_entry->target_section = sym_sec;
+		  stub_entry->stub_type = stub_type;
+		  stub_entry->h = hash;
+		  stub_entry->st_type = st_type;
+
+		  if (sym_name == NULL)
+		    sym_name = "unnamed";
+		  len = sizeof (STUB_ENTRY_NAME) + strlen (sym_name);
+		  stub_entry->output_name = bfd_alloc (htab->stub_bfd, len);
+		  if (stub_entry->output_name == NULL)
+		    {
+		      free (stub_name);
+		      goto error_ret_free_internal;
+		    }
+
+		  snprintf (stub_entry->output_name, len, STUB_ENTRY_NAME,
+			    sym_name);
+
+		  stub_changed = true;
+		}
+
+	      /* We're done with the internal relocs, free them.  */
+	      if (elf_section_data (section)->relocs == NULL)
+		free (internal_relocs);
+	    }
+	}
+
+      if (!stub_changed)
+	break;
+
+      _bfd_kvx_resize_stubs (htab);
+
+      /* Ask the linker to do its stuff.  */
+      (*htab->layout_sections_again) ();
+      stub_changed = false;
+    }
+
+  return true;
+
+error_ret_free_local:
+  return false;
+
+}
+
+/* Build all the stubs associated with the current output file.  The
+   stubs are kept in a hash table attached to the main linker hash
+   table.  We also set up the .plt entries for statically linked PIC
+   functions here.  This function is called via kvx_elf_finish in the
+   linker.  */
+
+bool
+elfNN_kvx_build_stubs (struct bfd_link_info *info)
+{
+  asection *stub_sec;
+  struct bfd_hash_table *table;
+  struct elf_kvx_link_hash_table *htab;
+
+  htab = elf_kvx_hash_table (info);
+
+  for (stub_sec = htab->stub_bfd->sections;
+       stub_sec != NULL; stub_sec = stub_sec->next)
+    {
+      bfd_size_type size;
+
+      /* Ignore non-stub sections.  */
+      if (!strstr (stub_sec->name, STUB_SUFFIX))
+	continue;
+
+      /* Allocate memory to hold the linker stubs.  */
+      size = stub_sec->size;
+      stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
+      if (stub_sec->contents == NULL && size != 0)
+	return false;
+      stub_sec->size = 0;
+    }
+
+  /* Build the stubs as directed by the stub hash table.  */
+  table = &htab->stub_hash_table;
+  bfd_hash_traverse (table, kvx_build_one_stub, info);
+
+  return true;
+}
+
+static bfd_vma
+kvx_calculate_got_entry_vma (struct elf_link_hash_entry *h,
+				 struct elf_kvx_link_hash_table
+				 *globals, struct bfd_link_info *info,
+				 bfd_vma value, bfd *output_bfd,
+				 bool *unresolved_reloc_p)
+{
+  bfd_vma off = (bfd_vma) - 1;
+  asection *basegot = globals->root.sgot;
+  bool dyn = globals->root.dynamic_sections_created;
+
+  if (h != NULL)
+    {
+      BFD_ASSERT (basegot != NULL);
+      off = h->got.offset;
+      BFD_ASSERT (off != (bfd_vma) - 1);
+      if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
+	  || (bfd_link_pic (info)
+	      && SYMBOL_REFERENCES_LOCAL (info, h))
+	  || (ELF_ST_VISIBILITY (h->other)
+	      && h->root.type == bfd_link_hash_undefweak))
+	{
+	  /* This is actually a static link, or it is a -Bsymbolic link
+	     and the symbol is defined locally.  We must initialize this
+	     entry in the global offset table.  Since the offset must
+	     always be a multiple of 8 (4 in the case of ILP32), we use
+	     the least significant bit to record whether we have
+	     initialized it already.
+	     When doing a dynamic link, we create a .rel(a).got relocation
+	     entry to initialize the value.  This is done in the
+	     finish_dynamic_symbol routine.  */
+	  if ((off & 1) != 0)
+	    off &= ~1;
+	  else
+	    {
+	      bfd_put_NN (output_bfd, value, basegot->contents + off);
+	      h->got.offset |= 1;
+	    }
+	}
+      else
+	*unresolved_reloc_p = false;
+    }
+
+  return off;
+}
+
+static unsigned int
+kvx_reloc_got_type (bfd_reloc_code_real_type r_type)
+{
+  switch (r_type)
+    {
+      /* Extracted with:
+	 awk 'match ($0, /HOWTO.*R_(KVX.*_GOT(OFF)?(64)?_.*),/,ary) \
+	 {print "case BFD_RELOC_" ary[1] ":";}' elfxx-kvxc.def  */
+    case BFD_RELOC_KVX_S37_GOTOFF_LO10:
+    case BFD_RELOC_KVX_S37_GOTOFF_UP27:
+
+    case BFD_RELOC_KVX_S37_GOT_LO10:
+    case BFD_RELOC_KVX_S37_GOT_UP27:
+
+    case BFD_RELOC_KVX_S43_GOTOFF_LO10:
+    case BFD_RELOC_KVX_S43_GOTOFF_UP27:
+    case BFD_RELOC_KVX_S43_GOTOFF_EX6:
+
+    case BFD_RELOC_KVX_S43_GOT_LO10:
+    case BFD_RELOC_KVX_S43_GOT_UP27:
+    case BFD_RELOC_KVX_S43_GOT_EX6:
+      return GOT_NORMAL;
+
+    case BFD_RELOC_KVX_S37_TLS_GD_LO10:
+    case BFD_RELOC_KVX_S37_TLS_GD_UP27:
+    case BFD_RELOC_KVX_S43_TLS_GD_LO10:
+    case BFD_RELOC_KVX_S43_TLS_GD_UP27:
+    case BFD_RELOC_KVX_S43_TLS_GD_EX6:
+      return GOT_TLS_GD;
+
+    case BFD_RELOC_KVX_S37_TLS_LD_LO10:
+    case BFD_RELOC_KVX_S37_TLS_LD_UP27:
+    case BFD_RELOC_KVX_S43_TLS_LD_LO10:
+    case BFD_RELOC_KVX_S43_TLS_LD_UP27:
+    case BFD_RELOC_KVX_S43_TLS_LD_EX6:
+      return GOT_TLS_LD;
+
+    case BFD_RELOC_KVX_S37_TLS_IE_LO10:
+    case BFD_RELOC_KVX_S37_TLS_IE_UP27:
+    case BFD_RELOC_KVX_S43_TLS_IE_LO10:
+    case BFD_RELOC_KVX_S43_TLS_IE_UP27:
+    case BFD_RELOC_KVX_S43_TLS_IE_EX6:
+      return GOT_TLS_IE;
+
+    default:
+      break;
+    }
+  return GOT_UNKNOWN;
+}
+
+static bool
+kvx_can_relax_tls (bfd *input_bfd ATTRIBUTE_UNUSED,
+		       struct bfd_link_info *info ATTRIBUTE_UNUSED,
+		       bfd_reloc_code_real_type r_type ATTRIBUTE_UNUSED,
+		       struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
+		       unsigned long r_symndx ATTRIBUTE_UNUSED)
+{
+  if (! IS_KVX_TLS_RELAX_RELOC (r_type))
+    return false;
+
+  /* Relaxing hook. Disabled on KVX. */
+  /* See elfnn-aarch64.c */
+  return true;
+}
+
+/* Given the relocation code R_TYPE, return the relaxed bfd reloc
+   enumerator.  */
+
+static bfd_reloc_code_real_type
+kvx_tls_transition (bfd *input_bfd,
+			struct bfd_link_info *info,
+			unsigned int r_type,
+			struct elf_link_hash_entry *h,
+			unsigned long r_symndx)
+{
+  bfd_reloc_code_real_type bfd_r_type
+    = elfNN_kvx_bfd_reloc_from_type (input_bfd, r_type);
+
+  if (! kvx_can_relax_tls (input_bfd, info, bfd_r_type, h, r_symndx))
+    return bfd_r_type;
+
+  return bfd_r_type;
+}
+
+/* Return the base VMA address which should be subtracted from real addresses
+   when resolving R_KVX_*_TLS_GD_* and R_KVX_*_TLS_LD_* relocation.  */
+
+static bfd_vma
+dtpoff_base (struct bfd_link_info *info)
+{
+  /* If tls_sec is NULL, we should have signalled an error already.  */
+  BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL);
+  return elf_hash_table (info)->tls_sec->vma;
+}
+
+/* Return the base VMA address which should be subtracted from real addresses
+   when resolving R_KVX_*_TLS_IE_* and R_KVX_*_TLS_LE_* relocations.  */
+
+static bfd_vma
+tpoff_base (struct bfd_link_info *info)
+{
+  struct elf_link_hash_table *htab = elf_hash_table (info);
+
+  /* If tls_sec is NULL, we should have signalled an error already.  */
+  BFD_ASSERT (htab->tls_sec != NULL);
+
+  bfd_vma base = align_power ((bfd_vma) 0,
+			      htab->tls_sec->alignment_power);
+  return htab->tls_sec->vma - base;
+}
+
+static bfd_vma *
+symbol_got_offset_ref (bfd *input_bfd, struct elf_link_hash_entry *h,
+		       unsigned long r_symndx)
+{
+  /* Calculate the address of the GOT entry for symbol
+     referred to in h.  */
+  if (h != NULL)
+    return &h->got.offset;
+  else
+    {
+      /* local symbol */
+      struct elf_kvx_local_symbol *l;
+
+      l = elf_kvx_locals (input_bfd);
+      return &l[r_symndx].got_offset;
+    }
+}
+
+static void
+symbol_got_offset_mark (bfd *input_bfd, struct elf_link_hash_entry *h,
+			unsigned long r_symndx)
+{
+  bfd_vma *p;
+  p = symbol_got_offset_ref (input_bfd, h, r_symndx);
+  *p |= 1;
+}
+
+static int
+symbol_got_offset_mark_p (bfd *input_bfd, struct elf_link_hash_entry *h,
+			  unsigned long r_symndx)
+{
+  bfd_vma value;
+  value = * symbol_got_offset_ref (input_bfd, h, r_symndx);
+  return value & 1;
+}
+
+static bfd_vma
+symbol_got_offset (bfd *input_bfd, struct elf_link_hash_entry *h,
+		   unsigned long r_symndx)
+{
+  bfd_vma value;
+  value = * symbol_got_offset_ref (input_bfd, h, r_symndx);
+  value &= ~1;
+  return value;
+}
+
+/* N_ONES produces N one bits, without overflowing machine arithmetic.  */
+#define N_ONES(n) (((((bfd_vma) 1 << ((n) -1)) - 1) << 1) | 1)
+
+/* This is a copy/paste + modification from
+   reloc.c:_bfd_relocate_contents. Relocations are applied to 32bits
+   words, so all overflow checks will overflow for values above
+   32bits.  */
+static bfd_reloc_status_type
+check_signed_overflow (enum complain_overflow complain_on_overflow,
+		       bfd_reloc_code_real_type bfd_r_type, bfd *input_bfd,
+		       bfd_vma relocation)
+{
+  bfd_reloc_status_type flag = bfd_reloc_ok;
+  bfd_vma addrmask, fieldmask, signmask, ss;
+  bfd_vma a, b, sum;
+  bfd_vma x = 0;
+
+  /* These usually come from howto struct. As we don't check for
+     values fitting in bitfields or in subpart of words, we set all
+     these to values to check as if the field is starting from first
+     bit.  */
+  unsigned int rightshift = 0;
+  unsigned int bitpos = 0;
+  unsigned int bitsize = 0;
+  bfd_vma src_mask = -1;
+
+  /* Only regular symbol relocations are checked here. Others
+     relocations (GOT, TLS) could be checked if the need is
+     confirmed. At the moment, we keep previous behavior
+     (ie. unchecked) for those. */
+  switch (bfd_r_type)
+    {
+    case BFD_RELOC_KVX_S37_LO10:
+    case BFD_RELOC_KVX_S37_UP27:
+      bitsize = 37;
+      break;
+
+    case BFD_RELOC_KVX_S32_LO5:
+    case BFD_RELOC_KVX_S32_UP27:
+      bitsize = 32;
+      break;
+
+    case BFD_RELOC_KVX_S43_LO10:
+    case BFD_RELOC_KVX_S43_UP27:
+    case BFD_RELOC_KVX_S43_EX6:
+      bitsize = 43;
+      break;
+
+    case BFD_RELOC_KVX_S64_LO10:
+    case BFD_RELOC_KVX_S64_UP27:
+    case BFD_RELOC_KVX_S64_EX27:
+      bitsize = 64;
+      break;
+
+    default:
+      return bfd_reloc_ok;
+    }
+
+  /* direct copy/paste from reloc.c below */
+
+  /* Get the values to be added together.  For signed and unsigned
+     relocations, we assume that all values should be truncated to
+     the size of an address.  For bitfields, all the bits matter.
+     See also bfd_check_overflow.  */
+  fieldmask = N_ONES (bitsize);
+  signmask = ~fieldmask;
+  addrmask = (N_ONES (bfd_arch_bits_per_address (input_bfd))
+	      | (fieldmask << rightshift));
+  a = (relocation & addrmask) >> rightshift;
+  b = (x & src_mask & addrmask) >> bitpos;
+  addrmask >>= rightshift;
+
+  switch (complain_on_overflow)
+    {
+    case complain_overflow_signed:
+      /* If any sign bits are set, all sign bits must be set.
+	 That is, A must be a valid negative address after
+	 shifting.  */
+      signmask = ~(fieldmask >> 1);
+      /* Fall thru */
+
+    case complain_overflow_bitfield:
+      /* Much like the signed check, but for a field one bit
+	 wider.  We allow a bitfield to represent numbers in the
+	 range -2**n to 2**n-1, where n is the number of bits in the
+	 field.  Note that when bfd_vma is 32 bits, a 32-bit reloc
+	 can't overflow, which is exactly what we want.  */
+      ss = a & signmask;
+      if (ss != 0 && ss != (addrmask & signmask))
+	flag = bfd_reloc_overflow;
+
+      /* We only need this next bit of code if the sign bit of B
+	 is below the sign bit of A.  This would only happen if
+	 SRC_MASK had fewer bits than BITSIZE.  Note that if
+	 SRC_MASK has more bits than BITSIZE, we can get into
+	 trouble; we would need to verify that B is in range, as
+	 we do for A above.  */
+      ss = ((~src_mask) >> 1) & src_mask;
+      ss >>= bitpos;
+
+      /* Set all the bits above the sign bit.  */
+      b = (b ^ ss) - ss;
+
+      /* Now we can do the addition.  */
+      sum = a + b;
+
+      /* See if the result has the correct sign.  Bits above the
+	 sign bit are junk now; ignore them.  If the sum is
+	 positive, make sure we did not have all negative inputs;
+	 if the sum is negative, make sure we did not have all
+	 positive inputs.  The test below looks only at the sign
+	 bits, and it really just
+	 SIGN (A) == SIGN (B) && SIGN (A) != SIGN (SUM)
+
+	 We mask with addrmask here to explicitly allow an address
+	 wrap-around.  The Linux kernel relies on it, and it is
+	 the only way to write assembler code which can run when
+	 loaded at a location 0x80000000 away from the location at
+	 which it is linked.  */
+      if (((~(a ^ b)) & (a ^ sum)) & signmask & addrmask)
+	flag = bfd_reloc_overflow;
+      break;
+
+    case complain_overflow_unsigned:
+      /* Checking for an unsigned overflow is relatively easy:
+	 trim the addresses and add, and trim the result as well.
+	 Overflow is normally indicated when the result does not
+	 fit in the field.  However, we also need to consider the
+	 case when, e.g., fieldmask is 0x7fffffff or smaller, an
+	 input is 0x80000000, and bfd_vma is only 32 bits; then we
+	 will get sum == 0, but there is an overflow, since the
+	 inputs did not fit in the field.  Instead of doing a
+	 separate test, we can check for this by or-ing in the
+	 operands when testing for the sum overflowing its final
+	 field.  */
+      sum = (a + b) & addrmask;
+      if ((a | b | sum) & signmask)
+	flag = bfd_reloc_overflow;
+      break;
+
+    default:
+      abort ();
+    }
+  return flag;
+}
+
+/* Perform a relocation as part of a final link.  */
+static bfd_reloc_status_type
+elfNN_kvx_final_link_relocate (reloc_howto_type *howto,
+			       bfd *input_bfd,
+			       bfd *output_bfd,
+			       asection *input_section,
+			       bfd_byte *contents,
+			       Elf_Internal_Rela *rel,
+			       bfd_vma value,
+			       struct bfd_link_info *info,
+			       asection *sym_sec,
+			       struct elf_link_hash_entry *h,
+			       bool *unresolved_reloc_p,
+			       bool save_addend,
+			       bfd_vma *saved_addend,
+			       Elf_Internal_Sym *sym)
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  unsigned int r_type = howto->type;
+  bfd_reloc_code_real_type bfd_r_type
+    = elfNN_kvx_bfd_reloc_from_howto (howto);
+  bfd_reloc_code_real_type new_bfd_r_type;
+  unsigned long r_symndx;
+  bfd_byte *hit_data = contents + rel->r_offset;
+  bfd_vma place, off;
+  bfd_vma addend;
+  struct elf_kvx_link_hash_table *globals;
+  bool weak_undef_p;
+  asection *base_got;
+  bfd_reloc_status_type rret = bfd_reloc_ok;
+  bool resolved_to_zero;
+  globals = elf_kvx_hash_table (info);
+
+  symtab_hdr = &elf_symtab_hdr (input_bfd);
+
+  BFD_ASSERT (is_kvx_elf (input_bfd));
+
+  r_symndx = ELFNN_R_SYM (rel->r_info);
+
+  /* It is possible to have linker relaxations on some TLS access
+     models.  Update our information here.  */
+  new_bfd_r_type = kvx_tls_transition (input_bfd, info, r_type, h, r_symndx);
+  if (new_bfd_r_type != bfd_r_type)
+    {
+      bfd_r_type = new_bfd_r_type;
+      howto = elfNN_kvx_howto_from_bfd_reloc (bfd_r_type);
+      BFD_ASSERT (howto != NULL);
+      r_type = howto->type;
+    }
+
+  place = input_section->output_section->vma
+    + input_section->output_offset + rel->r_offset;
+
+  /* Get addend, accumulating the addend for consecutive relocs
+     which refer to the same offset.  */
+  addend = saved_addend ? *saved_addend : 0;
+  addend += rel->r_addend;
+
+  weak_undef_p = (h ? h->root.type == bfd_link_hash_undefweak
+		  : bfd_is_und_section (sym_sec));
+  resolved_to_zero = (h != NULL
+		      && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
+
+  switch (bfd_r_type)
+    {
+    case BFD_RELOC_KVX_NN:
+#if ARCH_SIZE == 64
+    case BFD_RELOC_KVX_32:
+#endif
+    case BFD_RELOC_KVX_S37_LO10:
+    case BFD_RELOC_KVX_S37_UP27:
+
+    case BFD_RELOC_KVX_S32_LO5:
+    case BFD_RELOC_KVX_S32_UP27:
+
+    case BFD_RELOC_KVX_S43_LO10:
+    case BFD_RELOC_KVX_S43_UP27:
+    case BFD_RELOC_KVX_S43_EX6:
+
+    case BFD_RELOC_KVX_S64_LO10:
+    case BFD_RELOC_KVX_S64_UP27:
+    case BFD_RELOC_KVX_S64_EX27:
+      /* When generating a shared object or relocatable executable, these
+	 relocations are copied into the output file to be resolved at
+	 run time.  */
+      if (((bfd_link_pic (info) == true)
+	   || globals->root.is_relocatable_executable)
+	  && (input_section->flags & SEC_ALLOC)
+	  && (h == NULL
+	      || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+		  && !resolved_to_zero)
+	      || h->root.type != bfd_link_hash_undefweak))
+	{
+	  Elf_Internal_Rela outrel;
+	  bfd_byte *loc;
+	  bool skip, relocate;
+	  asection *sreloc;
+
+	  *unresolved_reloc_p = false;
+
+	  skip = false;
+	  relocate = false;
+
+	  outrel.r_addend = addend;
+	  outrel.r_offset =
+	    _bfd_elf_section_offset (output_bfd, info, input_section,
+				     rel->r_offset);
+	  if (outrel.r_offset == (bfd_vma) - 1)
+	    skip = true;
+	  else if (outrel.r_offset == (bfd_vma) - 2)
+	    {
+	      skip = true;
+	      relocate = true;
+	    }
+
+	  outrel.r_offset += (input_section->output_section->vma
+			      + input_section->output_offset);
+
+	  if (skip)
+	    memset (&outrel, 0, sizeof outrel);
+	  else if (h != NULL
+		   && h->dynindx != -1
+		   && (!bfd_link_pic (info) || !info->symbolic
+		       || !h->def_regular))
+	    outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type);
+	  else if (bfd_r_type == BFD_RELOC_KVX_32
+		   || bfd_r_type == BFD_RELOC_KVX_64)
+	    {
+	      int symbol;
+
+	      /* On SVR4-ish systems, the dynamic loader cannot
+		 relocate the text and data segments independently,
+		 so the symbol does not matter.  */
+	      symbol = 0;
+	      outrel.r_info = ELFNN_R_INFO (symbol, R_KVX_RELATIVE);
+	      outrel.r_addend += value;
+	    }
+	  else if (bfd_link_pic (info) && info->symbolic)
+	    {
+	      goto skip_because_pic;
+	    }
+	  else
+	    {
+	      /* We may endup here from bad input code trying to
+		 insert relocation on symbols within code.  We do not
+		 want that currently, and such code should use GOT +
+		 KVX_32/64 reloc that translate in KVX_RELATIVE.  */
+	      const char *name;
+	      if (h && h->root.root.string)
+		name = h->root.root.string;
+	      else
+		name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
+					 NULL);
+
+	      (*_bfd_error_handler)
+		/* xgettext:c-format */
+		(_("%pB(%pA+%#" PRIx64 "): "
+		   "unresolvable %s relocation in section `%s'"),
+		 input_bfd, input_section, (uint64_t) rel->r_offset, howto->name,
+		 name);
+	      return bfd_reloc_notsupported;
+	    }
+
+	  sreloc = elf_section_data (input_section)->sreloc;
+	  if (sreloc == NULL || sreloc->contents == NULL)
+	    return bfd_reloc_notsupported;
+
+	  loc = sreloc->contents + sreloc->reloc_count++ * RELOC_SIZE (globals);
+	  bfd_elfNN_swap_reloca_out (output_bfd, &outrel, loc);
+
+	  if (sreloc->reloc_count * RELOC_SIZE (globals) > sreloc->size)
+	    {
+	      /* Sanity to check that we have previously allocated
+		 sufficient space in the relocation section for the
+		 number of relocations we actually want to emit.  */
+	      abort ();
+	    }
+
+	  /* If this reloc is against an external symbol, we do not want to
+	     fiddle with the addend.  Otherwise, we need to include the symbol
+	     value so that it becomes an addend for the dynamic reloc.  */
+	  if (!relocate)
+	    return bfd_reloc_ok;
+
+	  rret = check_signed_overflow (complain_overflow_signed, bfd_r_type,
+					input_bfd, value + addend);
+	  if (rret != bfd_reloc_ok)
+	    return rret;
+
+	  return _bfd_final_link_relocate (howto, input_bfd, input_section,
+					   contents, rel->r_offset, value,
+					   addend);
+	}
+
+    skip_because_pic:
+      rret = check_signed_overflow (complain_overflow_signed, bfd_r_type,
+				    input_bfd, value + addend);
+      if (rret != bfd_reloc_ok)
+	return rret;
+
+      return _bfd_final_link_relocate (howto, input_bfd, input_section,
+				       contents, rel->r_offset, value,
+				       addend);
+      break;
+
+    case BFD_RELOC_KVX_PCREL17:
+    case BFD_RELOC_KVX_PCREL27:
+      {
+	/* BCU insn are always first in a bundle, so there is no need
+	   to correct the address using offset within bundle.  */
+
+	asection *splt = globals->root.splt;
+	bool via_plt_p =
+	  splt != NULL && h != NULL && h->plt.offset != (bfd_vma) - 1;
+
+	/* A call to an undefined weak symbol is converted to a jump to
+	   the next instruction unless a PLT entry will be created.
+	   The jump to the next instruction is optimized as a NOP.
+	   Do the same for local undefined symbols.  */
+	if (weak_undef_p && ! via_plt_p)
+	  {
+	    bfd_putl32 (INSN_NOP, hit_data);
+	    return bfd_reloc_ok;
+	  }
+
+	/* If the call goes through a PLT entry, make sure to
+	   check distance to the right destination address.  */
+	if (via_plt_p)
+	  value = (splt->output_section->vma
+		   + splt->output_offset + h->plt.offset);
+
+	/* Check if a stub has to be inserted because the destination
+	   is too far away.  */
+	struct elf_kvx_stub_hash_entry *stub_entry = NULL;
+
+	/* If the target symbol is global and marked as a function the
+	   relocation applies a function call or a tail call.  In this
+	   situation we can veneer out of range branches.  The veneers
+	   use R16 and R17 hence cannot be used arbitrary out of range
+	   branches that occur within the body of a function.  */
+
+	/* Check if a stub has to be inserted because the destination
+	   is too far away.  */
+	if (! kvx_valid_call_p (value, place))
+	  {
+	    /* The target is out of reach, so redirect the branch to
+	       the local stub for this function.  */
+	    stub_entry = elfNN_kvx_get_stub_entry (input_section,
+						   sym_sec, h,
+						   rel, globals);
+	    if (stub_entry != NULL)
+	      value = (stub_entry->stub_offset
+		       + stub_entry->stub_sec->output_offset
+		       + stub_entry->stub_sec->output_section->vma);
+	    /* We have redirected the destination to stub entry address,
+	       so ignore any addend record in the original rela entry.  */
+	    addend = 0;
+	  }
+      }
+      *unresolved_reloc_p = false;
+
+      /* FALLTHROUGH */
+
+      /* PCREL 32 are used in dwarf2 table for exception handling */
+    case BFD_RELOC_KVX_32_PCREL:
+    case BFD_RELOC_KVX_S64_PCREL_LO10:
+    case BFD_RELOC_KVX_S64_PCREL_UP27:
+    case BFD_RELOC_KVX_S64_PCREL_EX27:
+    case BFD_RELOC_KVX_S37_PCREL_LO10:
+    case BFD_RELOC_KVX_S37_PCREL_UP27:
+    case BFD_RELOC_KVX_S43_PCREL_LO10:
+    case BFD_RELOC_KVX_S43_PCREL_UP27:
+    case BFD_RELOC_KVX_S43_PCREL_EX6:
+      return _bfd_final_link_relocate (howto, input_bfd, input_section,
+				       contents, rel->r_offset, value,
+				       addend);
+      break;
+
+    case BFD_RELOC_KVX_S37_TLS_LE_LO10:
+    case BFD_RELOC_KVX_S37_TLS_LE_UP27:
+
+    case BFD_RELOC_KVX_S43_TLS_LE_LO10:
+    case BFD_RELOC_KVX_S43_TLS_LE_UP27:
+    case BFD_RELOC_KVX_S43_TLS_LE_EX6:
+      return _bfd_final_link_relocate (howto, input_bfd, input_section,
+				       contents, rel->r_offset,
+				       value - tpoff_base (info), addend);
+      break;
+
+    case BFD_RELOC_KVX_S37_TLS_DTPOFF_LO10:
+    case BFD_RELOC_KVX_S37_TLS_DTPOFF_UP27:
+
+    case BFD_RELOC_KVX_S43_TLS_DTPOFF_LO10:
+    case BFD_RELOC_KVX_S43_TLS_DTPOFF_UP27:
+    case BFD_RELOC_KVX_S43_TLS_DTPOFF_EX6:
+      return _bfd_final_link_relocate (howto, input_bfd, input_section,
+				       contents, rel->r_offset,
+				       value - dtpoff_base (info), addend);
+
+    case BFD_RELOC_KVX_S37_TLS_GD_UP27:
+    case BFD_RELOC_KVX_S37_TLS_GD_LO10:
+
+    case BFD_RELOC_KVX_S43_TLS_GD_UP27:
+    case BFD_RELOC_KVX_S43_TLS_GD_EX6:
+    case BFD_RELOC_KVX_S43_TLS_GD_LO10:
+
+    case BFD_RELOC_KVX_S37_TLS_IE_UP27:
+    case BFD_RELOC_KVX_S37_TLS_IE_LO10:
+
+    case BFD_RELOC_KVX_S43_TLS_IE_UP27:
+    case BFD_RELOC_KVX_S43_TLS_IE_EX6:
+    case BFD_RELOC_KVX_S43_TLS_IE_LO10:
+
+    case BFD_RELOC_KVX_S37_TLS_LD_UP27:
+    case BFD_RELOC_KVX_S37_TLS_LD_LO10:
+
+    case BFD_RELOC_KVX_S43_TLS_LD_UP27:
+    case BFD_RELOC_KVX_S43_TLS_LD_EX6:
+    case BFD_RELOC_KVX_S43_TLS_LD_LO10:
+
+      if (globals->root.sgot == NULL)
+	return bfd_reloc_notsupported;
+      value = symbol_got_offset (input_bfd, h, r_symndx);
+
+      _bfd_final_link_relocate (howto, input_bfd, input_section,
+				contents, rel->r_offset, value, addend);
+      *unresolved_reloc_p = false;
+      break;
+
+    case BFD_RELOC_KVX_S37_GOTADDR_UP27:
+    case BFD_RELOC_KVX_S37_GOTADDR_LO10:
+
+    case BFD_RELOC_KVX_S43_GOTADDR_UP27:
+    case BFD_RELOC_KVX_S43_GOTADDR_EX6:
+    case BFD_RELOC_KVX_S43_GOTADDR_LO10:
+
+    case BFD_RELOC_KVX_S64_GOTADDR_UP27:
+    case BFD_RELOC_KVX_S64_GOTADDR_EX27:
+    case BFD_RELOC_KVX_S64_GOTADDR_LO10:
+      {
+	if (globals->root.sgot == NULL)
+	  BFD_ASSERT (h != NULL);
+
+	value = globals->root.sgot->output_section->vma
+	  + globals->root.sgot->output_offset;
+
+	return _bfd_final_link_relocate (howto, input_bfd, input_section,
+					 contents, rel->r_offset, value,
+					 addend);
+      }
+      break;
+
+    case BFD_RELOC_KVX_S37_GOTOFF_LO10:
+    case BFD_RELOC_KVX_S37_GOTOFF_UP27:
+
+    case BFD_RELOC_KVX_32_GOTOFF:
+    case BFD_RELOC_KVX_64_GOTOFF:
+
+    case BFD_RELOC_KVX_S43_GOTOFF_LO10:
+    case BFD_RELOC_KVX_S43_GOTOFF_UP27:
+    case BFD_RELOC_KVX_S43_GOTOFF_EX6:
+
+      {
+	asection *basegot = globals->root.sgot;
+	/* BFD_ASSERT(h == NULL); */
+	BFD_ASSERT(globals->root.sgot != NULL);
+	value -= basegot->output_section->vma + basegot->output_offset;
+	return _bfd_final_link_relocate (howto, input_bfd, input_section,
+					 contents, rel->r_offset, value,
+					 addend);
+      }
+      break;
+
+    case BFD_RELOC_KVX_S37_GOT_LO10:
+    case BFD_RELOC_KVX_S37_GOT_UP27:
+
+    case BFD_RELOC_KVX_32_GOT:
+    case BFD_RELOC_KVX_64_GOT:
+
+    case BFD_RELOC_KVX_S43_GOT_LO10:
+    case BFD_RELOC_KVX_S43_GOT_UP27:
+    case BFD_RELOC_KVX_S43_GOT_EX6:
+
+      if (globals->root.sgot == NULL)
+	BFD_ASSERT (h != NULL);
+
+      if (h != NULL)
+	{
+	  value = kvx_calculate_got_entry_vma (h, globals, info, value,
+					       output_bfd,
+					       unresolved_reloc_p);
+#ifdef UGLY_DEBUG
+	  printf("GOT_LO/HI for %s, value %x\n", h->root.root.string, value);
+#endif
+
+	  return _bfd_final_link_relocate (howto, input_bfd, input_section,
+					   contents, rel->r_offset, value,
+					   addend);
+	}
+      else
+	{
+#ifdef UGLY_DEBUG
+	  printf("GOT_LO/HI with h NULL, initial value %x\n", value);
+#endif
+	  struct elf_kvx_local_symbol *locals = elf_kvx_locals (input_bfd);
+
+	  if (locals == NULL)
+	    {
+	      int howto_index = bfd_r_type - BFD_RELOC_KVX_RELOC_START;
+	      _bfd_error_handler
+		/* xgettext:c-format */
+		(_("%pB: local symbol descriptor table be NULL when applying "
+		   "relocation %s against local symbol"),
+		 input_bfd, elf_kvx_howto_table[howto_index].name);
+	      abort ();
+	    }
+
+	  off = symbol_got_offset (input_bfd, h, r_symndx);
+	  base_got = globals->root.sgot;
+	  bfd_vma got_entry_addr = (base_got->output_section->vma
+				    + base_got->output_offset + off);
+
+	  if (!symbol_got_offset_mark_p (input_bfd, h, r_symndx))
+	    {
+	      bfd_put_64 (output_bfd, value, base_got->contents + off);
+
+	      if (bfd_link_pic (info))
+		{
+		  asection *s;
+		  Elf_Internal_Rela outrel;
+
+		  /* For PIC executables and shared libraries we need
+		     to relocate the GOT entry at run time.  */
+		  s = globals->root.srelgot;
+		  if (s == NULL)
+		    abort ();
+
+		  outrel.r_offset = got_entry_addr;
+		  outrel.r_info = ELFNN_R_INFO (0, R_KVX_RELATIVE);
+		  outrel.r_addend = value;
+		  elf_append_rela (output_bfd, s, &outrel);
+		}
+
+	      symbol_got_offset_mark (input_bfd, h, r_symndx);
+	    }
+
+	  /* Update the relocation value to GOT entry addr as we have
+	     transformed the direct data access into an indirect data
+	     access through GOT.  */
+	  value = got_entry_addr;
+
+	  return _bfd_final_link_relocate (howto, input_bfd, input_section,
+					   contents, rel->r_offset, off, 0);
+	}
+      break;
+
+    default:
+      return bfd_reloc_notsupported;
+    }
+
+  if (saved_addend)
+    *saved_addend = value;
+
+  /* Only apply the final relocation in a sequence.  */
+  if (save_addend)
+    return bfd_reloc_continue;
+
+  return _bfd_kvx_elf_put_addend (input_bfd, hit_data, bfd_r_type,
+				  howto, value);
+}
+
+
+
+/* Relocate a KVX ELF section.  */
+
+static int
+elfNN_kvx_relocate_section (bfd *output_bfd,
+			    struct bfd_link_info *info,
+			    bfd *input_bfd,
+			    asection *input_section,
+			    bfd_byte *contents,
+			    Elf_Internal_Rela *relocs,
+			    Elf_Internal_Sym *local_syms,
+			    asection **local_sections)
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  Elf_Internal_Rela *rel;
+  Elf_Internal_Rela *relend;
+  const char *name;
+  struct elf_kvx_link_hash_table *globals;
+  bool save_addend = false;
+  bfd_vma addend = 0;
+
+  globals = elf_kvx_hash_table (info);
+
+  symtab_hdr = &elf_symtab_hdr (input_bfd);
+  sym_hashes = elf_sym_hashes (input_bfd);
+
+  rel = relocs;
+  relend = relocs + input_section->reloc_count;
+  for (; rel < relend; rel++)
+    {
+      unsigned int r_type;
+      bfd_reloc_code_real_type bfd_r_type;
+      reloc_howto_type *howto;
+      unsigned long r_symndx;
+      Elf_Internal_Sym *sym;
+      asection *sec;
+      struct elf_link_hash_entry *h;
+      bfd_vma relocation;
+      bfd_reloc_status_type r;
+      arelent bfd_reloc;
+      char sym_type;
+      bool unresolved_reloc = false;
+      char *error_message = NULL;
+
+      r_symndx = ELFNN_R_SYM (rel->r_info);
+      r_type = ELFNN_R_TYPE (rel->r_info);
+
+      bfd_reloc.howto = elfNN_kvx_howto_from_type (input_bfd, r_type);
+      howto = bfd_reloc.howto;
+
+      if (howto == NULL)
+	return _bfd_unrecognized_reloc (input_bfd, input_section, r_type);
+
+      bfd_r_type = elfNN_kvx_bfd_reloc_from_howto (howto);
+
+      h = NULL;
+      sym = NULL;
+      sec = NULL;
+
+      if (r_symndx < symtab_hdr->sh_info) /* A local symbol. */
+	{
+	  sym = local_syms + r_symndx;
+	  sym_type = ELFNN_ST_TYPE (sym->st_info);
+	  sec = local_sections[r_symndx];
+
+	  /* An object file might have a reference to a local
+	     undefined symbol.  This is a draft object file, but we
+	     should at least do something about it.  */
+	  if (r_type != R_KVX_NONE
+	      && r_type != R_KVX_S37_GOTADDR_LO10
+	      && r_type != R_KVX_S37_GOTADDR_UP27
+	      && r_type != R_KVX_S64_GOTADDR_LO10
+	      && r_type != R_KVX_S64_GOTADDR_UP27
+	      && r_type != R_KVX_S64_GOTADDR_EX27
+	      && r_type != R_KVX_S43_GOTADDR_LO10
+	      && r_type != R_KVX_S43_GOTADDR_UP27
+	      && r_type != R_KVX_S43_GOTADDR_EX6
+	      && bfd_is_und_section (sec)
+	      && ELF_ST_BIND (sym->st_info) != STB_WEAK)
+	    (*info->callbacks->undefined_symbol)
+	      (info, bfd_elf_string_from_elf_section
+	       (input_bfd, symtab_hdr->sh_link, sym->st_name),
+	       input_bfd, input_section, rel->r_offset, true);
+
+	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+	}
+      else
+	{
+	  bool warned, ignored;
+
+	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+				   r_symndx, symtab_hdr, sym_hashes,
+				   h, sec, relocation,
+				   unresolved_reloc, warned, ignored);
+
+	  sym_type = h->type;
+	}
+
+      if (sec != NULL && discarded_section (sec))
+	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+					 rel, 1, relend, howto, 0, contents);
+
+      if (bfd_link_relocatable (info))
+	continue;
+
+      if (h != NULL)
+	name = h->root.root.string;
+      else
+	{
+	  name = (bfd_elf_string_from_elf_section
+		  (input_bfd, symtab_hdr->sh_link, sym->st_name));
+	  if (name == NULL || *name == '\0')
+	    name = bfd_section_name (sec);
+	}
+
+      if (r_symndx != 0
+	  && r_type != R_KVX_NONE
+	  && (h == NULL
+	      || h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
+	  && IS_KVX_TLS_RELOC (bfd_r_type) != (sym_type == STT_TLS))
+	{
+	  (*_bfd_error_handler)
+	    ((sym_type == STT_TLS
+	      /* xgettext:c-format */
+	      ? _("%pB(%pA+%#" PRIx64 "): %s used with TLS symbol %s")
+	      /* xgettext:c-format */
+	      : _("%pB(%pA+%#" PRIx64 "): %s used with non-TLS symbol %s")),
+	     input_bfd,
+	     input_section, (uint64_t) rel->r_offset, howto->name, name);
+	}
+
+      /* Original aarch64 has relaxation handling for TLS here. */
+      r = bfd_reloc_continue;
+
+      /* There may be multiple consecutive relocations for the
+	 same offset.  In that case we are supposed to treat the
+	 output of each relocation as the addend for the next.  */
+      if (rel + 1 < relend
+	  && rel->r_offset == rel[1].r_offset
+	  && ELFNN_R_TYPE (rel[1].r_info) != R_KVX_NONE)
+
+	save_addend = true;
+      else
+	save_addend = false;
+
+      if (r == bfd_reloc_continue)
+	r = elfNN_kvx_final_link_relocate (howto, input_bfd, output_bfd,
+					   input_section, contents, rel,
+					   relocation, info, sec,
+					   h, &unresolved_reloc,
+					   save_addend, &addend, sym);
+
+      switch (elfNN_kvx_bfd_reloc_from_type (input_bfd, r_type))
+	{
+	case BFD_RELOC_KVX_S37_TLS_GD_LO10:
+	case BFD_RELOC_KVX_S37_TLS_GD_UP27:
+
+	case BFD_RELOC_KVX_S43_TLS_GD_LO10:
+	case BFD_RELOC_KVX_S43_TLS_GD_UP27:
+	case BFD_RELOC_KVX_S43_TLS_GD_EX6:
+
+	case BFD_RELOC_KVX_S37_TLS_LD_LO10:
+	case BFD_RELOC_KVX_S37_TLS_LD_UP27:
+
+	case BFD_RELOC_KVX_S43_TLS_LD_LO10:
+	case BFD_RELOC_KVX_S43_TLS_LD_UP27:
+	case BFD_RELOC_KVX_S43_TLS_LD_EX6:
+
+	  if (! symbol_got_offset_mark_p (input_bfd, h, r_symndx))
+	    {
+	      bool need_relocs = false;
+	      bfd_byte *loc;
+	      int indx;
+	      bfd_vma off;
+
+	      off = symbol_got_offset (input_bfd, h, r_symndx);
+	      indx = h && h->dynindx != -1 ? h->dynindx : 0;
+
+	      need_relocs =
+		(bfd_link_pic (info) || indx != 0) &&
+		(h == NULL
+		 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+		 || h->root.type != bfd_link_hash_undefweak);
+
+	      BFD_ASSERT (globals->root.srelgot != NULL);
+
+	      if (need_relocs)
+		{
+		  Elf_Internal_Rela rela;
+		  rela.r_info = ELFNN_R_INFO (indx, R_KVX_64_DTPMOD);
+		  rela.r_addend = 0;
+		  rela.r_offset = globals->root.sgot->output_section->vma +
+		    globals->root.sgot->output_offset + off;
+
+		  loc = globals->root.srelgot->contents;
+		  loc += globals->root.srelgot->reloc_count++
+		    * RELOC_SIZE (htab);
+		  bfd_elfNN_swap_reloca_out (output_bfd, &rela, loc);
+
+		  bfd_reloc_code_real_type real_type =
+		    elfNN_kvx_bfd_reloc_from_type (input_bfd, r_type);
+
+		  if (real_type == BFD_RELOC_KVX_S37_TLS_LD_LO10
+		      || real_type == BFD_RELOC_KVX_S37_TLS_LD_UP27
+		      || real_type == BFD_RELOC_KVX_S43_TLS_LD_LO10
+		      || real_type == BFD_RELOC_KVX_S43_TLS_LD_UP27
+		      || real_type == BFD_RELOC_KVX_S43_TLS_LD_EX6)
+		    {
+		      /* For local dynamic, don't generate DTPOFF in any case.
+			 Initialize the DTPOFF slot into zero, so we get module
+			 base address when invoke runtime TLS resolver.  */
+		      bfd_put_NN (output_bfd, 0,
+				  globals->root.sgot->contents + off
+				  + GOT_ENTRY_SIZE);
+		    }
+		  else if (indx == 0)
+		    {
+		      bfd_put_NN (output_bfd,
+				  relocation - dtpoff_base (info),
+				  globals->root.sgot->contents + off
+				  + GOT_ENTRY_SIZE);
+		    }
+		  else
+		    {
+		      /* This TLS symbol is global. We emit a
+			 relocation to fixup the tls offset at load
+			 time.  */
+		      rela.r_info =
+			ELFNN_R_INFO (indx, R_KVX_64_DTPOFF);
+		      rela.r_addend = 0;
+		      rela.r_offset =
+			(globals->root.sgot->output_section->vma
+			 + globals->root.sgot->output_offset + off
+			 + GOT_ENTRY_SIZE);
+
+		      loc = globals->root.srelgot->contents;
+		      loc += globals->root.srelgot->reloc_count++
+			* RELOC_SIZE (globals);
+		      bfd_elfNN_swap_reloca_out (output_bfd, &rela, loc);
+		      bfd_put_NN (output_bfd, (bfd_vma) 0,
+				  globals->root.sgot->contents + off
+				  + GOT_ENTRY_SIZE);
+		    }
+		}
+	      else
+		{
+		  bfd_put_NN (output_bfd, (bfd_vma) 1,
+			      globals->root.sgot->contents + off);
+		  bfd_put_NN (output_bfd,
+			      relocation - dtpoff_base (info),
+			      globals->root.sgot->contents + off
+			      + GOT_ENTRY_SIZE);
+		}
+
+	      symbol_got_offset_mark (input_bfd, h, r_symndx);
+	    }
+	  break;
+
+	case BFD_RELOC_KVX_S37_TLS_IE_LO10:
+	case BFD_RELOC_KVX_S37_TLS_IE_UP27:
+
+	case BFD_RELOC_KVX_S43_TLS_IE_LO10:
+	case BFD_RELOC_KVX_S43_TLS_IE_UP27:
+	case BFD_RELOC_KVX_S43_TLS_IE_EX6:
+	  if (! symbol_got_offset_mark_p (input_bfd, h, r_symndx))
+	    {
+	      bool need_relocs = false;
+	      bfd_byte *loc;
+	      int indx;
+	      bfd_vma off;
+
+	      off = symbol_got_offset (input_bfd, h, r_symndx);
+
+	      indx = h && h->dynindx != -1 ? h->dynindx : 0;
+
+	      need_relocs =
+		(bfd_link_pic (info) || indx != 0) &&
+		(h == NULL
+		 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+		 || h->root.type != bfd_link_hash_undefweak);
+
+	      BFD_ASSERT (globals->root.srelgot != NULL);
+
+	      if (need_relocs)
+		{
+		  Elf_Internal_Rela rela;
+
+		  if (indx == 0)
+		    rela.r_addend = relocation - dtpoff_base (info);
+		  else
+		    rela.r_addend = 0;
+
+		  rela.r_info = ELFNN_R_INFO (indx, R_KVX_64_TPOFF);
+		  rela.r_offset = globals->root.sgot->output_section->vma +
+		    globals->root.sgot->output_offset + off;
+
+		  loc = globals->root.srelgot->contents;
+		  loc += globals->root.srelgot->reloc_count++
+		    * RELOC_SIZE (htab);
+
+		  bfd_elfNN_swap_reloca_out (output_bfd, &rela, loc);
+
+		  bfd_put_NN (output_bfd, rela.r_addend,
+			      globals->root.sgot->contents + off);
+		}
+	      else
+		bfd_put_NN (output_bfd, relocation - tpoff_base (info),
+			    globals->root.sgot->contents + off);
+
+	      symbol_got_offset_mark (input_bfd, h, r_symndx);
+	    }
+	  break;
+
+	default:
+	  break;
+	}
+
+      /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
+	 because such sections are not SEC_ALLOC and thus ld.so will
+	 not process them.  */
+      if (unresolved_reloc
+	  && !((input_section->flags & SEC_DEBUGGING) != 0
+	       && h->def_dynamic)
+	  && _bfd_elf_section_offset (output_bfd, info, input_section,
+				      +rel->r_offset) != (bfd_vma) - 1)
+	{
+	  (*_bfd_error_handler)
+	    /* xgettext:c-format */
+	    (_("%pB(%pA+%#" PRIx64 "): "
+	       "unresolvable %s relocation against symbol `%s'"),
+	     input_bfd, input_section, (uint64_t) rel->r_offset, howto->name,
+	     h->root.root.string);
+	  return false;
+	}
+
+      if (r != bfd_reloc_ok && r != bfd_reloc_continue)
+	{
+	  switch (r)
+	    {
+	    case bfd_reloc_overflow:
+	      (*info->callbacks->reloc_overflow)
+		(info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0,
+		 input_bfd, input_section, rel->r_offset);
+
+	      /* Original aarch64 code had a check for alignement correctness */
+	      break;
+
+	    case bfd_reloc_undefined:
+	      (*info->callbacks->undefined_symbol)
+		(info, name, input_bfd, input_section, rel->r_offset, true);
+	      break;
+
+	    case bfd_reloc_outofrange:
+	      error_message = _("out of range");
+	      goto common_error;
+
+	    case bfd_reloc_notsupported:
+	      error_message = _("unsupported relocation");
+	      goto common_error;
+
+	    case bfd_reloc_dangerous:
+	      /* error_message should already be set.  */
+	      goto common_error;
+
+	    default:
+	      error_message = _("unknown error");
+	      /* Fall through.  */
+
+	    common_error:
+	      BFD_ASSERT (error_message != NULL);
+	      (*info->callbacks->reloc_dangerous)
+		(info, error_message, input_bfd, input_section, rel->r_offset);
+	      break;
+	    }
+	}
+
+      if (!save_addend)
+	addend = 0;
+    }
+
+  return true;
+}
+
+/* Set the right machine number.  */
+
+static bool
+elfNN_kvx_object_p (bfd *abfd)
+{
+  /* must be coherent with default arch in cpu-kvx.c */
+  int e_set = bfd_mach_kv3_1;
+
+  if (elf_elfheader (abfd)->e_machine == EM_KVX)
+    {
+      int e_core = elf_elfheader (abfd)->e_flags & ELF_KVX_CORE_MASK;
+      switch(e_core)
+	{
+#if ARCH_SIZE == 64
+	case ELF_KVX_CORE_KV3_1 : e_set = bfd_mach_kv3_1_64; break;
+	case ELF_KVX_CORE_KV3_2 : e_set = bfd_mach_kv3_2_64; break;
+	case ELF_KVX_CORE_KV4_1 : e_set = bfd_mach_kv4_1_64; break;
+#else
+	case ELF_KVX_CORE_KV3_1 : e_set = bfd_mach_kv3_1; break;
+	case ELF_KVX_CORE_KV3_2 : e_set = bfd_mach_kv3_2; break;
+	case ELF_KVX_CORE_KV4_1 : e_set = bfd_mach_kv4_1; break;
+#endif
+	default:
+	  (*_bfd_error_handler)(_("%s: Bad ELF id: `%d'"),
+				abfd->filename, e_core);
+	}
+    }
+  return bfd_default_set_arch_mach (abfd, bfd_arch_kvx, e_set);
+}
+
+/* Function to keep KVX specific flags in the ELF header.  */
+
+static bool
+elfNN_kvx_set_private_flags (bfd *abfd, flagword flags)
+{
+  if (elf_flags_init (abfd) && elf_elfheader (abfd)->e_flags != flags)
+    {
+    }
+  else
+    {
+      elf_elfheader (abfd)->e_flags = flags;
+      elf_flags_init (abfd) = true;
+    }
+
+  return true;
+}
+
+/* Merge backend specific data from an object file to the output
+   object file when linking.  */
+
+static bool
+elfNN_kvx_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
+{
+  bfd *obfd = info->output_bfd;
+  flagword out_flags;
+  flagword in_flags;
+  bool flags_compatible = true;
+  asection *sec;
+
+  /* Check if we have the same endianess.  */
+  if (!_bfd_generic_verify_endian_match (ibfd, info))
+    return false;
+
+  if (!is_kvx_elf (ibfd) || !is_kvx_elf (obfd))
+    return true;
+
+  /* The input BFD must have had its flags initialised.  */
+  /* The following seems bogus to me -- The flags are initialized in
+     the assembler but I don't think an elf_flags_init field is
+     written into the object.  */
+  /* BFD_ASSERT (elf_flags_init (ibfd)); */
+
+  if (bfd_get_arch_size (ibfd) != bfd_get_arch_size (obfd))
+    {
+      const char *msg;
+
+      if (bfd_get_arch_size (ibfd) == 32
+	  && bfd_get_arch_size (obfd) == 64)
+	msg = _("%s: compiled as 32-bit object and %s is 64-bit");
+      else if (bfd_get_arch_size (ibfd) == 64
+	       && bfd_get_arch_size (obfd) == 32)
+	msg = _("%s: compiled as 64-bit object and %s is 32-bit");
+      else
+	msg = _("%s: object size does not match that of target %s");
+
+      (*_bfd_error_handler) (msg, bfd_get_filename (ibfd),
+			     bfd_get_filename (obfd));
+      bfd_set_error (bfd_error_wrong_format);
+      return false;
+    }
+
+  in_flags = elf_elfheader (ibfd)->e_flags;
+  out_flags = elf_elfheader (obfd)->e_flags;
+
+  if (!elf_flags_init (obfd))
+    {
+      /* If the input is the default architecture and had the default
+	 flags then do not bother setting the flags for the output
+	 architecture, instead allow future merges to do this.  If no
+	 future merges ever set these flags then they will retain their
+	 uninitialised values, which surprise surprise, correspond
+	 to the default values.  */
+      if (bfd_get_arch_info (ibfd)->the_default
+	  && elf_elfheader (ibfd)->e_flags == 0)
+	return true;
+
+      elf_flags_init (obfd) = true;
+      elf_elfheader (obfd)->e_flags = in_flags;
+
+      if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
+	  && bfd_get_arch_info (obfd)->the_default)
+	return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
+				  bfd_get_mach (ibfd));
+
+      return true;
+    }
+
+  /* Identical flags must be compatible.  */
+  if (in_flags == out_flags)
+    return true;
+
+  /* Check to see if the input BFD actually contains any sections.  If
+     not, its flags may not have been initialised either, but it
+     cannot actually cause any incompatiblity.  Do not short-circuit
+     dynamic objects; their section list may be emptied by
+     elf_link_add_object_symbols.
+
+     Also check to see if there are no code sections in the input.
+     In this case there is no need to check for code specific flags.
+     XXX - do we need to worry about floating-point format compatability
+     in data sections ?  */
+  if (!(ibfd->flags & DYNAMIC))
+    {
+      bool null_input_bfd = true;
+      bool only_data_sections = true;
+
+      for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+	{
+	  if ((bfd_section_flags (sec)
+	       & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
+	      == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
+	    only_data_sections = false;
+
+	  null_input_bfd = false;
+	  break;
+	}
+
+      if (null_input_bfd || only_data_sections)
+	return true;
+    }
+  return flags_compatible;
+}
+
+/* Display the flags field.  */
+
+static bool
+elfNN_kvx_print_private_bfd_data (bfd *abfd, void *ptr)
+{
+  FILE *file = (FILE *) ptr;
+  unsigned long flags;
+
+  BFD_ASSERT (abfd != NULL && ptr != NULL);
+
+  /* Print normal ELF private data.  */
+  _bfd_elf_print_private_bfd_data (abfd, ptr);
+
+  flags = elf_elfheader (abfd)->e_flags;
+  /* Ignore init flag - it may not be set, despite the flags field
+     containing valid data.  */
+
+  /* xgettext:c-format */
+  fprintf (file, _("Private flags = 0x%lx : "), elf_elfheader (abfd)->e_flags);
+  if((flags & ELF_KVX_ABI_64B_ADDR_BIT) == ELF_KVX_ABI_64B_ADDR_BIT)
+    {
+      if (ELF_KVX_CHECK_CORE(flags,ELF_KVX_CORE_KV3_1))
+	fprintf (file, _("Coolidge (kv3) V1 64 bits"));
+      else if (ELF_KVX_CHECK_CORE(flags,ELF_KVX_CORE_KV3_2))
+	fprintf (file, _("Coolidge (kv3) V2 64 bits"));
+      else if (ELF_KVX_CHECK_CORE(flags,ELF_KVX_CORE_KV4_1))
+	fprintf (file, _("Coolidge (kv4) V1 64 bits"));
+    }
+  else
+    {
+      if (ELF_KVX_CHECK_CORE(flags,ELF_KVX_CORE_KV3_1))
+	fprintf (file, _("Coolidge (kv3) V1 32 bits"));
+      else if (ELF_KVX_CHECK_CORE(flags,ELF_KVX_CORE_KV3_2))
+	fprintf (file, _("Coolidge (kv3) V2 32 bits"));
+      else if (ELF_KVX_CHECK_CORE(flags,ELF_KVX_CORE_KV4_1))
+	fprintf (file, _("Coolidge (kv4) V1 32 bits"));
+    }
+
+  fputc ('\n', file);
+
+  return true;
+}
+
+/* Adjust a symbol defined by a dynamic object and referenced by a
+   regular object.  The current definition is in some section of the
+   dynamic object, but we're not including those sections.  We have to
+   change the definition to something the rest of the link can
+   understand.	*/
+
+static bool
+elfNN_kvx_adjust_dynamic_symbol (struct bfd_link_info *info,
+				 struct elf_link_hash_entry *h)
+{
+  struct elf_kvx_link_hash_table *htab;
+  asection *s;
+
+  /* If this is a function, put it in the procedure linkage table.  We
+     will fill in the contents of the procedure linkage table later,
+     when we know the address of the .got section.  */
+  if (h->type == STT_FUNC || h->needs_plt)
+    {
+      if (h->plt.refcount <= 0
+	  || ((SYMBOL_CALLS_LOCAL (info, h)
+	       || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+		   && h->root.type == bfd_link_hash_undefweak))))
+	{
+	  /* This case can occur if we saw a CALL26 reloc in
+	     an input file, but the symbol wasn't referred to
+	     by a dynamic object or all references were
+	     garbage collected. In which case we can end up
+	     resolving.  */
+	  h->plt.offset = (bfd_vma) - 1;
+	  h->needs_plt = 0;
+	}
+
+      return true;
+    }
+  else
+    /* Otherwise, reset to -1.  */
+    h->plt.offset = (bfd_vma) - 1;
+
+
+  /* If this is a weak symbol, and there is a real definition, the
+     processor independent code will have arranged for us to see the
+     real definition first, and we can just use the same value.  */
+  if (h->is_weakalias)
+    {
+      struct elf_link_hash_entry *def = weakdef (h);
+      BFD_ASSERT (def->root.type == bfd_link_hash_defined);
+      h->root.u.def.section = def->root.u.def.section;
+      h->root.u.def.value = def->root.u.def.value;
+      if (ELIMINATE_COPY_RELOCS || info->nocopyreloc)
+	h->non_got_ref = def->non_got_ref;
+      return true;
+    }
+
+  /* If we are creating a shared library, we must presume that the
+     only references to the symbol are via the global offset table.
+     For such cases we need not do anything here; the relocations will
+     be handled correctly by relocate_section.  */
+  if (bfd_link_pic (info))
+    return true;
+
+  /* If there are no references to this symbol that do not use the
+     GOT, we don't need to generate a copy reloc.  */
+  if (!h->non_got_ref)
+    return true;
+
+  /* If -z nocopyreloc was given, we won't generate them either.  */
+  if (info->nocopyreloc)
+    {
+      h->non_got_ref = 0;
+      return true;
+    }
+
+  /* We must allocate the symbol in our .dynbss section, which will
+     become part of the .bss section of the executable.  There will be
+     an entry for this symbol in the .dynsym section.  The dynamic
+     object will contain position independent code, so all references
+     from the dynamic object to this symbol will go through the global
+     offset table.  The dynamic linker will use the .dynsym entry to
+     determine the address it must put in the global offset table, so
+     both the dynamic object and the regular object will refer to the
+     same memory location for the variable.  */
+
+  htab = elf_kvx_hash_table (info);
+
+  /* We must generate a R_KVX_COPY reloc to tell the dynamic linker
+     to copy the initial value out of the dynamic object and into the
+     runtime process image.  */
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
+    {
+      htab->srelbss->size += RELOC_SIZE (htab);
+      h->needs_copy = 1;
+    }
+
+  s = htab->sdynbss;
+
+  return _bfd_elf_adjust_dynamic_copy (info, h, s);
+}
+
+static bool
+elfNN_kvx_allocate_local_symbols (bfd *abfd, unsigned number)
+{
+  struct elf_kvx_local_symbol *locals;
+  locals = elf_kvx_locals (abfd);
+  if (locals == NULL)
+    {
+      locals = (struct elf_kvx_local_symbol *)
+	bfd_zalloc (abfd, number * sizeof (struct elf_kvx_local_symbol));
+      if (locals == NULL)
+	return false;
+      elf_kvx_locals (abfd) = locals;
+    }
+  return true;
+}
+
+/* Create the .got section to hold the global offset table.  */
+
+static bool
+kvx_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
+{
+  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+  flagword flags;
+  asection *s;
+  struct elf_link_hash_entry *h;
+  struct elf_link_hash_table *htab = elf_hash_table (info);
+
+  /* This function may be called more than once.  */
+  s = bfd_get_linker_section (abfd, ".got");
+  if (s != NULL)
+    return true;
+
+  flags = bed->dynamic_sec_flags;
+
+  s = bfd_make_section_anyway_with_flags (abfd,
+					  (bed->rela_plts_and_copies_p
+					   ? ".rela.got" : ".rel.got"),
+					  (bed->dynamic_sec_flags
+					   | SEC_READONLY));
+  if (s == NULL
+      || !bfd_set_section_alignment (s, bed->s->log_file_align))
+
+    return false;
+  htab->srelgot = s;
+
+  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
+  if (s == NULL
+      || !bfd_set_section_alignment (s, bed->s->log_file_align))
+    return false;
+  htab->sgot = s;
+  htab->sgot->size += GOT_ENTRY_SIZE;
+
+  if (bed->want_got_sym)
+    {
+      /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
+	 (or .got.plt) section.  We don't do this in the linker script
+	 because we don't want to define the symbol if we are not creating
+	 a global offset table.  */
+      h = _bfd_elf_define_linkage_sym (abfd, info, s,
+				       "_GLOBAL_OFFSET_TABLE_");
+      elf_hash_table (info)->hgot = h;
+      if (h == NULL)
+	return false;
+    }
+
+  if (bed->want_got_plt)
+    {
+      s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
+      if (s == NULL
+	  || !bfd_set_section_alignment (s,
+					 bed->s->log_file_align))
+	return false;
+      htab->sgotplt = s;
+    }
+
+  /* The first bit of the global offset table is the header.  */
+  s->size += bed->got_header_size;
+
+  /* we still need to handle got content when doing static link with PIC */
+  if (bfd_link_executable (info) && !bfd_link_pic (info)) {
+    htab->dynobj = abfd;
+  }
+
+  return true;
+}
+
+/* Look through the relocs for a section during the first phase.  */
+
+static bool
+elfNN_kvx_check_relocs (bfd *abfd, struct bfd_link_info *info,
+			    asection *sec, const Elf_Internal_Rela *relocs)
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  const Elf_Internal_Rela *rel;
+  const Elf_Internal_Rela *rel_end;
+  asection *sreloc;
+
+  struct elf_kvx_link_hash_table *htab;
+
+  if (bfd_link_relocatable (info))
+    return true;
+
+  BFD_ASSERT (is_kvx_elf (abfd));
+
+  htab = elf_kvx_hash_table (info);
+  sreloc = NULL;
+
+  symtab_hdr = &elf_symtab_hdr (abfd);
+  sym_hashes = elf_sym_hashes (abfd);
+
+  rel_end = relocs + sec->reloc_count;
+  for (rel = relocs; rel < rel_end; rel++)
+    {
+      struct elf_link_hash_entry *h;
+      unsigned int r_symndx;
+      unsigned int r_type;
+      bfd_reloc_code_real_type bfd_r_type;
+      Elf_Internal_Sym *isym;
+
+      r_symndx = ELFNN_R_SYM (rel->r_info);
+      r_type = ELFNN_R_TYPE (rel->r_info);
+
+      if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
+	{
+	  /* xgettext:c-format */
+	  _bfd_error_handler (_("%pB: bad symbol index: %d"), abfd, r_symndx);
+	  return false;
+	}
+
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  /* A local symbol.  */
+	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+					abfd, r_symndx);
+	  if (isym == NULL)
+	    return false;
+
+	  h = NULL;
+	}
+      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;
+	}
+
+      /* Could be done earlier, if h were already available.  */
+      bfd_r_type = kvx_tls_transition (abfd, info, r_type, h, r_symndx);
+
+      if (h != NULL)
+	{
+	  /* Create the ifunc sections for static executables.  If we
+	     never see an indirect function symbol nor we are building
+	     a static executable, those sections will be empty and
+	     won't appear in output.  */
+	  switch (bfd_r_type)
+	    {
+	    default:
+	      break;
+	    }
+
+	  /* It is referenced by a non-shared object. */
+	  h->ref_regular = 1;
+	}
+
+      switch (bfd_r_type)
+	{
+
+	case BFD_RELOC_KVX_S43_LO10:
+	case BFD_RELOC_KVX_S43_UP27:
+	case BFD_RELOC_KVX_S43_EX6:
+
+	case BFD_RELOC_KVX_S37_LO10:
+	case BFD_RELOC_KVX_S37_UP27:
+
+	case BFD_RELOC_KVX_S64_LO10:
+	case BFD_RELOC_KVX_S64_UP27:
+	case BFD_RELOC_KVX_S64_EX27:
+
+	case BFD_RELOC_KVX_32:
+	case BFD_RELOC_KVX_64:
+
+	  /* We don't need to handle relocs into sections not going into
+	     the "real" output.  */
+	  if ((sec->flags & SEC_ALLOC) == 0)
+	    break;
+
+	  if (h != NULL)
+	    {
+	      if (!bfd_link_pic (info))
+		h->non_got_ref = 1;
+
+	      h->plt.refcount += 1;
+	      h->pointer_equality_needed = 1;
+	    }
+
+	  /* No need to do anything if we're not creating a shared
+	     object.  */
+	  if (! bfd_link_pic (info))
+	    break;
+
+	  {
+	    struct elf_dyn_relocs *p;
+	    struct elf_dyn_relocs **head;
+
+	    /* We must copy these reloc types into the output file.
+	       Create a reloc section in dynobj and make room for
+	       this reloc.  */
+	    if (sreloc == NULL)
+	      {
+		if (htab->root.dynobj == NULL)
+		  htab->root.dynobj = abfd;
+
+		sreloc = _bfd_elf_make_dynamic_reloc_section
+		  (sec, htab->root.dynobj, LOG_FILE_ALIGN, abfd, /*rela? */ true);
+
+		if (sreloc == NULL)
+		  return false;
+	      }
+
+	    /* If this is a global symbol, we count the number of
+	       relocations we need for this symbol.  */
+	    if (h != NULL)
+	      {
+		head = &h->dyn_relocs;
+	      }
+	    else
+	      {
+		/* Track dynamic relocs needed for local syms too.
+		   We really need local syms available to do this
+		   easily.  Oh well.  */
+
+		asection *s;
+		void **vpp;
+
+		isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+					      abfd, r_symndx);
+		if (isym == NULL)
+		  return false;
+
+		s = bfd_section_from_elf_index (abfd, isym->st_shndx);
+		if (s == NULL)
+		  s = sec;
+
+		/* Beware of type punned pointers vs strict aliasing
+		   rules.  */
+		vpp = &(elf_section_data (s)->local_dynrel);
+		head = (struct elf_dyn_relocs **) vpp;
+	      }
+
+	    p = *head;
+	    if (p == NULL || p->sec != sec)
+	      {
+		bfd_size_type amt = sizeof *p;
+		p = ((struct elf_dyn_relocs *)
+		     bfd_zalloc (htab->root.dynobj, amt));
+		if (p == NULL)
+		  return false;
+		p->next = *head;
+		*head = p;
+		p->sec = sec;
+	      }
+
+	    p->count += 1;
+
+	  }
+	  break;
+
+	case BFD_RELOC_KVX_S37_GOT_LO10:
+	case BFD_RELOC_KVX_S37_GOT_UP27:
+
+	case BFD_RELOC_KVX_S37_GOTOFF_LO10:
+	case BFD_RELOC_KVX_S37_GOTOFF_UP27:
+
+	case BFD_RELOC_KVX_S43_GOT_LO10:
+	case BFD_RELOC_KVX_S43_GOT_UP27:
+	case BFD_RELOC_KVX_S43_GOT_EX6:
+
+	case BFD_RELOC_KVX_S43_GOTOFF_LO10:
+	case BFD_RELOC_KVX_S43_GOTOFF_UP27:
+	case BFD_RELOC_KVX_S43_GOTOFF_EX6:
+
+	case BFD_RELOC_KVX_S37_TLS_GD_LO10:
+	case BFD_RELOC_KVX_S37_TLS_GD_UP27:
+
+	case BFD_RELOC_KVX_S43_TLS_GD_LO10:
+	case BFD_RELOC_KVX_S43_TLS_GD_UP27:
+	case BFD_RELOC_KVX_S43_TLS_GD_EX6:
+
+	case BFD_RELOC_KVX_S37_TLS_IE_LO10:
+	case BFD_RELOC_KVX_S37_TLS_IE_UP27:
+
+	case BFD_RELOC_KVX_S43_TLS_IE_LO10:
+	case BFD_RELOC_KVX_S43_TLS_IE_UP27:
+	case BFD_RELOC_KVX_S43_TLS_IE_EX6:
+
+	case BFD_RELOC_KVX_S37_TLS_LD_LO10:
+	case BFD_RELOC_KVX_S37_TLS_LD_UP27:
+
+	case BFD_RELOC_KVX_S43_TLS_LD_LO10:
+	case BFD_RELOC_KVX_S43_TLS_LD_UP27:
+	case BFD_RELOC_KVX_S43_TLS_LD_EX6:
+	  {
+	    unsigned got_type;
+	    unsigned old_got_type;
+
+	    got_type = kvx_reloc_got_type (bfd_r_type);
+
+	    if (h)
+	      {
+		h->got.refcount += 1;
+		old_got_type = elf_kvx_hash_entry (h)->got_type;
+	      }
+	    else
+	      {
+		struct elf_kvx_local_symbol *locals;
+
+		if (!elfNN_kvx_allocate_local_symbols
+		    (abfd, symtab_hdr->sh_info))
+		  return false;
+
+		locals = elf_kvx_locals (abfd);
+		BFD_ASSERT (r_symndx < symtab_hdr->sh_info);
+		locals[r_symndx].got_refcount += 1;
+		old_got_type = locals[r_symndx].got_type;
+	      }
+
+	    /* We will already have issued an error message if there
+	       is a TLS/non-TLS mismatch, based on the symbol type.
+	       So just combine any TLS types needed.  */
+	    if (old_got_type != GOT_UNKNOWN && old_got_type != GOT_NORMAL
+		&& got_type != GOT_NORMAL)
+	      got_type |= old_got_type;
+
+	    /* If the symbol is accessed by both IE and GD methods, we
+	       are able to relax.  Turn off the GD flag, without
+	       messing up with any other kind of TLS types that may be
+	       involved.  */
+	    /* Disabled untested and unused TLS */
+	    /* if ((got_type & GOT_TLS_IE) && GOT_TLS_GD_ANY_P (got_type)) */
+	    /*   got_type &= ~ (GOT_TLSDESC_GD | GOT_TLS_GD); */
+
+	    if (old_got_type != got_type)
+	      {
+		if (h != NULL)
+		  elf_kvx_hash_entry (h)->got_type = got_type;
+		else
+		  {
+		    struct elf_kvx_local_symbol *locals;
+		    locals = elf_kvx_locals (abfd);
+		    BFD_ASSERT (r_symndx < symtab_hdr->sh_info);
+		    locals[r_symndx].got_type = got_type;
+		  }
+	      }
+
+	    if (htab->root.dynobj == NULL)
+	      htab->root.dynobj = abfd;
+	    if (! kvx_elf_create_got_section (htab->root.dynobj, info))
+	      return false;
+	    break;
+	  }
+
+	case BFD_RELOC_KVX_S64_GOTADDR_LO10:
+	case BFD_RELOC_KVX_S64_GOTADDR_UP27:
+	case BFD_RELOC_KVX_S64_GOTADDR_EX27:
+
+	case BFD_RELOC_KVX_S43_GOTADDR_LO10:
+	case BFD_RELOC_KVX_S43_GOTADDR_UP27:
+	case BFD_RELOC_KVX_S43_GOTADDR_EX6:
+
+	case BFD_RELOC_KVX_S37_GOTADDR_LO10:
+	case BFD_RELOC_KVX_S37_GOTADDR_UP27:
+
+	  if (htab->root.dynobj == NULL)
+	    htab->root.dynobj = abfd;
+	  if (! kvx_elf_create_got_section (htab->root.dynobj, info))
+	    return false;
+	  break;
+
+	case BFD_RELOC_KVX_PCREL27:
+	case BFD_RELOC_KVX_PCREL17:
+	  /* If this is a local symbol then we resolve it
+	     directly without creating a PLT entry.  */
+	  if (h == NULL)
+	    continue;
+
+	  h->needs_plt = 1;
+	  if (h->plt.refcount <= 0)
+	    h->plt.refcount = 1;
+	  else
+	    h->plt.refcount += 1;
+	  break;
+
+	default:
+	  break;
+	}
+    }
+
+  return true;
+}
+
+static bool
+elfNN_kvx_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
+{
+  Elf_Internal_Ehdr *i_ehdrp;	/* ELF file header, internal form.  */
+
+  if (!_bfd_elf_init_file_header (abfd, link_info))
+    return false;
+
+  i_ehdrp = elf_elfheader (abfd);
+  i_ehdrp->e_ident[EI_ABIVERSION] = KVX_ELF_ABI_VERSION;
+  return true;
+}
+
+static enum elf_reloc_type_class
+elfNN_kvx_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
+				const asection *rel_sec ATTRIBUTE_UNUSED,
+				const Elf_Internal_Rela *rela)
+{
+  switch ((int) ELFNN_R_TYPE (rela->r_info))
+    {
+    case R_KVX_RELATIVE:
+      return reloc_class_relative;
+    case R_KVX_JMP_SLOT:
+      return reloc_class_plt;
+    case R_KVX_COPY:
+      return reloc_class_copy;
+    default:
+      return reloc_class_normal;
+    }
+}
+
+/* A structure used to record a list of sections, independently
+   of the next and prev fields in the asection structure.  */
+typedef struct section_list
+{
+  asection *sec;
+  struct section_list *next;
+  struct section_list *prev;
+}
+section_list;
+
+typedef struct
+{
+  void *finfo;
+  struct bfd_link_info *info;
+  asection *sec;
+  int sec_shndx;
+  int (*func) (void *, const char *, Elf_Internal_Sym *,
+	       asection *, struct elf_link_hash_entry *);
+} output_arch_syminfo;
+
+/* Output a single local symbol for a generated stub.  */
+
+static bool
+elfNN_kvx_output_stub_sym (output_arch_syminfo *osi, const char *name,
+			       bfd_vma offset, bfd_vma size)
+{
+  Elf_Internal_Sym sym;
+
+  sym.st_value = (osi->sec->output_section->vma
+		  + osi->sec->output_offset + offset);
+  sym.st_size = size;
+  sym.st_other = 0;
+  sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
+  sym.st_shndx = osi->sec_shndx;
+  return osi->func (osi->finfo, name, &sym, osi->sec, NULL) == 1;
+}
+
+static bool
+kvx_map_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
+{
+  struct elf_kvx_stub_hash_entry *stub_entry;
+  asection *stub_sec;
+  bfd_vma addr;
+  char *stub_name;
+  output_arch_syminfo *osi;
+
+  /* Massage our args to the form they really have.  */
+  stub_entry = (struct elf_kvx_stub_hash_entry *) gen_entry;
+  osi = (output_arch_syminfo *) in_arg;
+
+  stub_sec = stub_entry->stub_sec;
+
+  /* Ensure this stub is attached to the current section being
+     processed.  */
+  if (stub_sec != osi->sec)
+    return true;
+
+  addr = (bfd_vma) stub_entry->stub_offset;
+
+  stub_name = stub_entry->output_name;
+
+  switch (stub_entry->stub_type)
+    {
+    case kvx_stub_long_branch:
+      if (!elfNN_kvx_output_stub_sym
+	  (osi, stub_name, addr, sizeof (elfNN_kvx_long_branch_stub)))
+	return false;
+      break;
+
+    default:
+      abort ();
+    }
+
+  return true;
+}
+
+/* Output mapping symbols for linker generated sections.  */
+
+static bool
+elfNN_kvx_output_arch_local_syms (bfd *output_bfd,
+				  struct bfd_link_info *info,
+				  void *finfo,
+				  int (*func) (void *, const char *,
+					       Elf_Internal_Sym *,
+					       asection *,
+					       struct elf_link_hash_entry *))
+{
+  output_arch_syminfo osi;
+  struct elf_kvx_link_hash_table *htab;
+
+  htab = elf_kvx_hash_table (info);
+
+  osi.finfo = finfo;
+  osi.info = info;
+  osi.func = func;
+
+  /* Long calls stubs.  */
+  if (htab->stub_bfd && htab->stub_bfd->sections)
+    {
+      asection *stub_sec;
+
+      for (stub_sec = htab->stub_bfd->sections;
+	   stub_sec != NULL; stub_sec = stub_sec->next)
+	{
+	  /* Ignore non-stub sections.  */
+	  if (!strstr (stub_sec->name, STUB_SUFFIX))
+	    continue;
+
+	  osi.sec = stub_sec;
+
+	  osi.sec_shndx = _bfd_elf_section_from_bfd_section
+	    (output_bfd, osi.sec->output_section);
+
+	  bfd_hash_traverse (&htab->stub_hash_table, kvx_map_one_stub,
+			     &osi);
+	}
+    }
+
+  /* Finally, output mapping symbols for the PLT.  */
+  if (!htab->root.splt || htab->root.splt->size == 0)
+    return true;
+
+  osi.sec_shndx = _bfd_elf_section_from_bfd_section
+    (output_bfd, htab->root.splt->output_section);
+  osi.sec = htab->root.splt;
+
+  return true;
+
+}
+
+/* Allocate target specific section data.  */
+
+static bool
+elfNN_kvx_new_section_hook (bfd *abfd, asection *sec)
+{
+  if (!sec->used_by_bfd)
+    {
+      _kvx_elf_section_data *sdata;
+      bfd_size_type amt = sizeof (*sdata);
+
+      sdata = bfd_zalloc (abfd, amt);
+      if (sdata == NULL)
+	return false;
+      sec->used_by_bfd = sdata;
+    }
+
+  return _bfd_elf_new_section_hook (abfd, sec);
+}
+
+/* Create dynamic sections. This is different from the ARM backend in that
+   the got, plt, gotplt and their relocation sections are all created in the
+   standard part of the bfd elf backend.  */
+
+static bool
+elfNN_kvx_create_dynamic_sections (bfd *dynobj,
+				   struct bfd_link_info *info)
+{
+  struct elf_kvx_link_hash_table *htab;
+
+  /* We need to create .got section.  */
+  if (!kvx_elf_create_got_section (dynobj, info))
+    return false;
+
+  if (!_bfd_elf_create_dynamic_sections (dynobj, info))
+    return false;
+
+  htab = elf_kvx_hash_table (info);
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
+  if (!bfd_link_pic (info))
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
+
+  if (!htab->sdynbss || (!bfd_link_pic (info) && !htab->srelbss))
+    abort ();
+
+  return true;
+}
+
+
+/* Allocate space in .plt, .got and associated reloc sections for
+   dynamic relocs.  */
+
+static bool
+elfNN_kvx_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
+{
+  struct bfd_link_info *info;
+  struct elf_kvx_link_hash_table *htab;
+  struct elf_dyn_relocs *p;
+
+  /* An example of a bfd_link_hash_indirect symbol is versioned
+     symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
+     -> __gxx_personality_v0(bfd_link_hash_defined)
+
+     There is no need to process bfd_link_hash_indirect symbols here
+     because we will also be presented with the concrete instance of
+     the symbol and elfNN_kvx_copy_indirect_symbol () will have been
+     called to copy all relevant data from the generic to the concrete
+     symbol instance.  */
+  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;
+
+  info = (struct bfd_link_info *) inf;
+  htab = elf_kvx_hash_table (info);
+
+  if (htab->root.dynamic_sections_created && h->plt.refcount > 0)
+    {
+      /* Make sure this symbol is output as a dynamic symbol.
+	 Undefined weak syms won't yet be marked as dynamic.  */
+      if (h->dynindx == -1 && !h->forced_local)
+	{
+	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
+	    return false;
+	}
+
+      if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
+	{
+	  asection *s = htab->root.splt;
+
+	  /* If this is the first .plt entry, make room for the special
+	     first entry.  */
+	  if (s->size == 0)
+	    s->size += htab->plt_header_size;
+
+	  h->plt.offset = s->size;
+
+	  /* If this symbol is not defined in a regular file, and we are
+	     not generating a shared library, then set the symbol to this
+	     location in the .plt.  This is required to make function
+	     pointers compare as equal between the normal executable and
+	     the shared library.  */
+	  if (!bfd_link_pic (info) && !h->def_regular)
+	    {
+	      h->root.u.def.section = s;
+	      h->root.u.def.value = h->plt.offset;
+	    }
+
+	  /* Make room for this entry. For now we only create the
+	     small model PLT entries. We later need to find a way
+	     of relaxing into these from the large model PLT entries.  */
+	  s->size += PLT_SMALL_ENTRY_SIZE;
+
+	  /* We also need to make an entry in the .got.plt section, which
+	     will be placed in the .got section by the linker script.  */
+	  htab->root.sgotplt->size += GOT_ENTRY_SIZE;
+
+	  /* We also need to make an entry in the .rela.plt section.  */
+	  htab->root.srelplt->size += RELOC_SIZE (htab);
+
+	  /* We need to ensure that all GOT entries that serve the PLT
+	     are consecutive with the special GOT slots [0] [1] and
+	     [2]. Any addtional relocations must be placed after the
+	     PLT related entries.  We abuse the reloc_count such that
+	     during sizing we adjust reloc_count to indicate the
+	     number of PLT related reserved entries.  In subsequent
+	     phases when filling in the contents of the reloc entries,
+	     PLT related entries are placed by computing their PLT
+	     index (0 .. reloc_count). While other none PLT relocs are
+	     placed at the slot indicated by reloc_count and
+	     reloc_count is updated.  */
+
+	  htab->root.srelplt->reloc_count++;
+	}
+      else
+	{
+	  h->plt.offset = (bfd_vma) - 1;
+	  h->needs_plt = 0;
+	}
+    }
+  else
+    {
+      h->plt.offset = (bfd_vma) - 1;
+      h->needs_plt = 0;
+    }
+
+  if (h->got.refcount > 0)
+    {
+      bool dyn;
+      unsigned got_type = elf_kvx_hash_entry (h)->got_type;
+
+      h->got.offset = (bfd_vma) - 1;
+
+      dyn = htab->root.dynamic_sections_created;
+
+      /* Make sure this symbol is output as a dynamic symbol.
+	 Undefined weak syms won't yet be marked as dynamic.  */
+      if (dyn && h->dynindx == -1 && !h->forced_local)
+	{
+	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
+	    return false;
+	}
+
+      if (got_type == GOT_UNKNOWN)
+	{
+	  (*_bfd_error_handler)
+	    (_("relocation against `%s' has faulty GOT type "),
+	     (h) ? h->root.root.string : "a local symbol");
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+      else if (got_type == GOT_NORMAL)
+	{
+	  h->got.offset = htab->root.sgot->size;
+	  htab->root.sgot->size += GOT_ENTRY_SIZE;
+	  if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+	       || h->root.type != bfd_link_hash_undefweak)
+	      && (bfd_link_pic (info)
+		  || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
+	    {
+	      htab->root.srelgot->size += RELOC_SIZE (htab);
+	    }
+	}
+      else
+	{
+	  int indx;
+
+	  /* Any of these will require 2 GOT slots because
+	   * they use __tls_get_addr() */
+	  if (got_type & (GOT_TLS_GD | GOT_TLS_LD))
+	    {
+	      h->got.offset = htab->root.sgot->size;
+	      htab->root.sgot->size += GOT_ENTRY_SIZE * 2;
+	    }
+
+	  if (got_type & GOT_TLS_IE)
+	    {
+	      h->got.offset = htab->root.sgot->size;
+	      htab->root.sgot->size += GOT_ENTRY_SIZE;
+	    }
+
+	  indx = h && h->dynindx != -1 ? h->dynindx : 0;
+	  if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+	       || h->root.type != bfd_link_hash_undefweak)
+	      && (bfd_link_pic (info)
+		  || indx != 0
+		  || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
+	    {
+	      /* Only the GD case requires 2 relocations. */
+	      if (got_type & GOT_TLS_GD)
+		htab->root.srelgot->size += RELOC_SIZE (htab) * 2;
+
+	      /* LD needs a DTPMOD reloc, IE needs a DTPOFF. */
+	      if (got_type & (GOT_TLS_LD | GOT_TLS_IE))
+		htab->root.srelgot->size += RELOC_SIZE (htab);
+	    }
+	}
+    }
+  else
+    {
+      h->got.offset = (bfd_vma) - 1;
+    }
+
+  if (h->dyn_relocs == NULL)
+    return true;
+
+  /* In the shared -Bsymbolic case, discard space allocated for
+     dynamic pc-relative relocs against symbols which turn out to be
+     defined in regular objects.  For the normal shared case, discard
+     space for pc-relative relocs that have become local due to symbol
+     visibility changes.  */
+
+  if (bfd_link_pic (info))
+    {
+      /* Relocs that use pc_count are those that appear on a call
+	 insn, or certain REL relocs that can generated via assembly.
+	 We want calls to protected symbols to resolve directly to the
+	 function rather than going via the plt.  If people want
+	 function pointer comparisons to work as expected then they
+	 should avoid writing weird assembly.  */
+      if (SYMBOL_CALLS_LOCAL (info, h))
+	{
+	  struct elf_dyn_relocs **pp;
+
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
+	    {
+	      p->count -= p->pc_count;
+	      p->pc_count = 0;
+	      if (p->count == 0)
+		*pp = p->next;
+	      else
+		pp = &p->next;
+	    }
+	}
+
+      /* Also discard relocs on undefined weak syms with non-default
+	 visibility.  */
+      if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
+	{
+	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+	    h->dyn_relocs = NULL;
+
+	  /* Make sure undefined weak symbols are output as a dynamic
+	     symbol in PIEs.  */
+	  else if (h->dynindx == -1
+		   && !h->forced_local
+		   && !bfd_elf_link_record_dynamic_symbol (info, h))
+	    return false;
+	}
+
+    }
+  else if (ELIMINATE_COPY_RELOCS)
+    {
+      /* For the non-shared case, discard space for relocs against
+	 symbols which turn out to need copy relocs or are not
+	 dynamic.  */
+
+      if (!h->non_got_ref
+	  && ((h->def_dynamic
+	       && !h->def_regular)
+	      || (htab->root.dynamic_sections_created
+		  && (h->root.type == bfd_link_hash_undefweak
+		      || h->root.type == bfd_link_hash_undefined))))
+	{
+	  /* Make sure this symbol is output as a dynamic symbol.
+	     Undefined weak syms won't yet be marked as dynamic.  */
+	  if (h->dynindx == -1
+	      && !h->forced_local
+	      && !bfd_elf_link_record_dynamic_symbol (info, h))
+	    return false;
+
+	  /* If that succeeded, we know we'll be keeping all the
+	     relocs.  */
+	  if (h->dynindx != -1)
+	    goto keep;
+	}
+
+      h->dyn_relocs = NULL;
+
+    keep:;
+    }
+
+  /* Finally, allocate space.  */
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
+    {
+      asection *sreloc;
+
+      sreloc = elf_section_data (p->sec)->sreloc;
+
+      BFD_ASSERT (sreloc != NULL);
+
+      sreloc->size += p->count * RELOC_SIZE (htab);
+    }
+
+  return true;
+}
+
+/* Find any dynamic relocs that apply to read-only sections.  */
+
+static bool
+kvx_readonly_dynrelocs (struct elf_link_hash_entry * h, void * inf)
+{
+  struct elf_dyn_relocs * p;
+
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
+    {
+      asection *s = p->sec;
+
+      if (s != NULL && (s->flags & SEC_READONLY) != 0)
+	{
+	  struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+	  info->flags |= DF_TEXTREL;
+	  info->callbacks->minfo (_("%pB: dynamic relocation against `%pT' in "
+				    "read-only section `%pA'\n"),
+				  s->owner, h->root.root.string, s);
+
+	  /* Not an error, just cut short the traversal.  */
+	  return false;
+	}
+    }
+  return true;
+}
+
+/* This is the most important function of all . Innocuosly named
+   though !  */
+static bool
+elfNN_kvx_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
+				 struct bfd_link_info *info)
+{
+  struct elf_kvx_link_hash_table *htab;
+  bfd *dynobj;
+  asection *s;
+  bool relocs;
+  bfd *ibfd;
+
+  htab = elf_kvx_hash_table ((info));
+  dynobj = htab->root.dynobj;
+
+  BFD_ASSERT (dynobj != NULL);
+
+  if (htab->root.dynamic_sections_created)
+    {
+      if (bfd_link_executable (info) && !info->nointerp)
+	{
+	  s = bfd_get_linker_section (dynobj, ".interp");
+	  if (s == NULL)
+	    abort ();
+	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
+	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
+	}
+    }
+
+  /* Set up .got offsets for local syms, and space for local dynamic
+     relocs.  */
+  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
+    {
+      struct elf_kvx_local_symbol *locals = NULL;
+      Elf_Internal_Shdr *symtab_hdr;
+      asection *srel;
+      unsigned int i;
+
+      if (!is_kvx_elf (ibfd))
+	continue;
+
+      for (s = ibfd->sections; s != NULL; s = s->next)
+	{
+	  struct elf_dyn_relocs *p;
+
+	  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))
+		{
+		  /* Input section has been discarded, either because
+		     it is a copy of a linkonce section or due to
+		     linker script /DISCARD/, so we'll be discarding
+		     the relocs too.  */
+		}
+	      else if (p->count != 0)
+		{
+		  srel = elf_section_data (p->sec)->sreloc;
+		  srel->size += p->count * RELOC_SIZE (htab);
+		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
+		    info->flags |= DF_TEXTREL;
+		}
+	    }
+	}
+
+      locals = elf_kvx_locals (ibfd);
+      if (!locals)
+	continue;
+
+      symtab_hdr = &elf_symtab_hdr (ibfd);
+      srel = htab->root.srelgot;
+      for (i = 0; i < symtab_hdr->sh_info; i++)
+	{
+	  locals[i].got_offset = (bfd_vma) - 1;
+	  if (locals[i].got_refcount > 0)
+	    {
+	      unsigned got_type = locals[i].got_type;
+	      if (got_type & (GOT_TLS_GD | GOT_TLS_LD))
+		{
+		  locals[i].got_offset = htab->root.sgot->size;
+		  htab->root.sgot->size += GOT_ENTRY_SIZE * 2;
+		}
+
+	      if (got_type & (GOT_NORMAL | GOT_TLS_IE ))
+		{
+		  locals[i].got_offset = htab->root.sgot->size;
+		  htab->root.sgot->size += GOT_ENTRY_SIZE;
+		}
+
+	      if (got_type == GOT_UNKNOWN)
+		{
+		}
+
+	      if (bfd_link_pic (info))
+		{
+		  if (got_type & GOT_TLS_GD)
+		    htab->root.srelgot->size += RELOC_SIZE (htab) * 2;
+
+		  if (got_type & GOT_TLS_IE
+		      || got_type & GOT_TLS_LD
+		      || got_type & GOT_NORMAL)
+		    htab->root.srelgot->size += RELOC_SIZE (htab);
+		}
+	    }
+	  else
+	    {
+	      locals[i].got_refcount = (bfd_vma) - 1;
+	    }
+	}
+    }
+
+
+  /* Allocate global sym .plt and .got entries, and space for global
+     sym dynamic relocs.  */
+  elf_link_hash_traverse (&htab->root, elfNN_kvx_allocate_dynrelocs,
+			  info);
+
+  /* For every jump slot reserved in the sgotplt, reloc_count is
+     incremented.  However, when we reserve space for TLS descriptors,
+     it's not incremented, so in order to compute the space reserved
+     for them, it suffices to multiply the reloc count by the jump
+     slot size.  */
+
+  if (htab->root.srelplt)
+    htab->sgotplt_jump_table_size = kvx_compute_jump_table_size (htab);
+
+  /* We now have determined the sizes of the various dynamic sections.
+     Allocate memory for them.  */
+  relocs = false;
+  for (s = dynobj->sections; s != NULL; s = s->next)
+    {
+      if ((s->flags & SEC_LINKER_CREATED) == 0)
+	continue;
+
+      if (s == htab->root.splt
+	  || s == htab->root.sgot
+	  || s == htab->root.sgotplt
+	  || s == htab->root.iplt
+	  || s == htab->root.igotplt || s == htab->sdynbss)
+	{
+	  /* Strip this section if we don't need it; see the
+	     comment below.  */
+	}
+      else if (startswith (bfd_section_name (s), ".rela"))
+	{
+	  if (s->size != 0 && s != htab->root.srelplt)
+	    relocs = true;
+
+	  /* We use the reloc_count field as a counter if we need
+	     to copy relocs into the output file.  */
+	  if (s != htab->root.srelplt)
+	    s->reloc_count = 0;
+	}
+      else
+	{
+	  /* It's not one of our sections, so don't allocate space.  */
+	  continue;
+	}
+
+      if (s->size == 0)
+	{
+	  /* If we don't need this section, strip it from the
+	     output file.  This is mostly to handle .rela.bss and
+	     .rela.plt.  We must create both sections in
+	     create_dynamic_sections, because they must be created
+	     before the linker maps input sections to output
+	     sections.  The linker does that before
+	     adjust_dynamic_symbol is called, and it is that
+	     function which decides whether anything needs to go
+	     into these sections.  */
+
+	  s->flags |= SEC_EXCLUDE;
+	  continue;
+	}
+
+      if ((s->flags & SEC_HAS_CONTENTS) == 0)
+	continue;
+
+      /* Allocate memory for the section contents.  We use bfd_zalloc
+	 here in case unused entries are not reclaimed before the
+	 section's contents are written out.  This should not happen,
+	 but this way if it does, we get a R_KVX_NONE reloc instead
+	 of garbage.  */
+      s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
+      if (s->contents == NULL)
+	return false;
+    }
+
+  if (htab->root.dynamic_sections_created)
+    {
+      /* Add some entries to the .dynamic section.  We fill in the
+	 values later, in elfNN_kvx_finish_dynamic_sections, but we
+	 must add the entries now so that we get the correct size for
+	 the .dynamic section.  The DT_DEBUG entry is filled in by the
+	 dynamic linker and used by the debugger.  */
+#define add_dynamic_entry(TAG, VAL)			\
+      _bfd_elf_add_dynamic_entry (info, TAG, VAL)
+
+      if (bfd_link_executable (info))
+	{
+	  if (!add_dynamic_entry (DT_DEBUG, 0))
+	    return false;
+	}
+
+      if (htab->root.splt->size != 0)
+	{
+	  if (!add_dynamic_entry (DT_PLTGOT, 0)
+	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
+	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
+	      || !add_dynamic_entry (DT_JMPREL, 0))
+	    return false;
+	}
+
+      if (relocs)
+	{
+	  if (!add_dynamic_entry (DT_RELA, 0)
+	      || !add_dynamic_entry (DT_RELASZ, 0)
+	      || !add_dynamic_entry (DT_RELAENT, RELOC_SIZE (htab)))
+	    return false;
+
+	  /* If any dynamic relocs apply to a read-only section,
+	     then we need a DT_TEXTREL entry.  */
+	  if ((info->flags & DF_TEXTREL) == 0)
+	    elf_link_hash_traverse (&htab->root, kvx_readonly_dynrelocs,
+				    info);
+
+	  if ((info->flags & DF_TEXTREL) != 0)
+	    {
+	      if (!add_dynamic_entry (DT_TEXTREL, 0))
+		return false;
+	    }
+	}
+    }
+#undef add_dynamic_entry
+
+  return true;
+}
+
+static inline void
+elf_kvx_update_plt_entry (bfd *output_bfd,
+			  bfd_reloc_code_real_type r_type,
+			  bfd_byte *plt_entry, bfd_vma value)
+{
+  reloc_howto_type *howto = elfNN_kvx_howto_from_bfd_reloc (r_type);
+  BFD_ASSERT(howto != NULL);
+  _bfd_kvx_elf_put_addend (output_bfd, plt_entry, r_type, howto, value);
+}
+
+static void
+elfNN_kvx_create_small_pltn_entry (struct elf_link_hash_entry *h,
+				   struct elf_kvx_link_hash_table *htab,
+				   bfd *output_bfd)
+{
+  bfd_byte *plt_entry;
+  bfd_vma plt_index;
+  bfd_vma got_offset;
+  bfd_vma gotplt_entry_address;
+  bfd_vma plt_entry_address;
+  Elf_Internal_Rela rela;
+  bfd_byte *loc;
+  asection *plt, *gotplt, *relplt;
+
+  plt = htab->root.splt;
+  gotplt = htab->root.sgotplt;
+  relplt = htab->root.srelplt;
+
+  /* Get the index in the procedure linkage table which
+     corresponds to this symbol.  This is the index of this symbol
+     in all the symbols for which we are making plt entries.  The
+     first entry in the procedure linkage table is reserved.
+
+     Get the offset into the .got table of the entry that
+     corresponds to this function.	Each .got entry is GOT_ENTRY_SIZE
+     bytes. The first three are reserved for the dynamic linker.
+
+     For static executables, we don't reserve anything.  */
+
+  if (plt == htab->root.splt)
+    {
+      plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
+      got_offset = (plt_index + 3) * GOT_ENTRY_SIZE;
+    }
+  else
+    {
+      plt_index = h->plt.offset / htab->plt_entry_size;
+      got_offset = plt_index * GOT_ENTRY_SIZE;
+    }
+
+  plt_entry = plt->contents + h->plt.offset;
+  plt_entry_address = plt->output_section->vma
+    + plt->output_offset + h->plt.offset;
+  gotplt_entry_address = gotplt->output_section->vma +
+    gotplt->output_offset + got_offset;
+
+  /* Copy in the boiler-plate for the PLTn entry.  */
+  memcpy (plt_entry, elfNN_kvx_small_plt_entry, PLT_SMALL_ENTRY_SIZE);
+
+  /* Patch the loading of the GOT entry, relative to the PLT entry
+     address. */
+
+  /* Use 37bits offset for both 32 and 64bits mode.
+     Fill the LO10 of of lw $r9 = 0[$r14].  */
+  elf_kvx_update_plt_entry(output_bfd, BFD_RELOC_KVX_S37_LO10,
+			   plt_entry+4,
+			   gotplt_entry_address - plt_entry_address);
+
+  /* Fill the UP27 of of lw $r9 = 0[$r14].  */
+  elf_kvx_update_plt_entry(output_bfd, BFD_RELOC_KVX_S37_UP27,
+			   plt_entry+8,
+			   gotplt_entry_address - plt_entry_address);
+
+  rela.r_offset = gotplt_entry_address;
+
+  /* Fill in the entry in the .rela.plt section.  */
+  rela.r_info = ELFNN_R_INFO (h->dynindx, R_KVX_JMP_SLOT);
+  rela.r_addend = 0;
+
+  /* Compute the relocation entry to used based on PLT index and do
+     not adjust reloc_count. The reloc_count has already been adjusted
+     to account for this entry.  */
+  loc = relplt->contents + plt_index * RELOC_SIZE (htab);
+  bfd_elfNN_swap_reloca_out (output_bfd, &rela, loc);
+}
+
+/* Size sections even though they're not dynamic.  We use it to setup
+   _TLS_MODULE_BASE_, if needed.  */
+
+static bool
+elfNN_kvx_always_size_sections (bfd *output_bfd,
+				struct bfd_link_info *info)
+{
+  asection *tls_sec;
+
+  if (bfd_link_relocatable (info))
+    return true;
+
+  tls_sec = elf_hash_table (info)->tls_sec;
+
+  if (tls_sec)
+    {
+      struct elf_link_hash_entry *tlsbase;
+
+      tlsbase = elf_link_hash_lookup (elf_hash_table (info),
+				      "_TLS_MODULE_BASE_", true, true, false);
+
+      if (tlsbase)
+	{
+	  struct bfd_link_hash_entry *h = NULL;
+	  const struct elf_backend_data *bed =
+	    get_elf_backend_data (output_bfd);
+
+	  if (!(_bfd_generic_link_add_one_symbol
+		(info, output_bfd, "_TLS_MODULE_BASE_", BSF_LOCAL,
+		 tls_sec, 0, NULL, false, bed->collect, &h)))
+	    return false;
+
+	  tlsbase->type = STT_TLS;
+	  tlsbase = (struct elf_link_hash_entry *) h;
+	  tlsbase->def_regular = 1;
+	  tlsbase->other = STV_HIDDEN;
+	  (*bed->elf_backend_hide_symbol) (info, tlsbase, true);
+	}
+    }
+
+  return true;
+}
+
+/* Finish up dynamic symbol handling.  We set the contents of various
+   dynamic sections here.  */
+static bool
+elfNN_kvx_finish_dynamic_symbol (bfd *output_bfd,
+				 struct bfd_link_info *info,
+				 struct elf_link_hash_entry *h,
+				 Elf_Internal_Sym *sym)
+{
+  struct elf_kvx_link_hash_table *htab;
+  htab = elf_kvx_hash_table (info);
+
+  if (h->plt.offset != (bfd_vma) - 1)
+    {
+      asection *plt = NULL, *gotplt = NULL, *relplt = NULL;
+
+      /* This symbol has an entry in the procedure linkage table.  Set
+	 it up.  */
+
+      if (htab->root.splt != NULL)
+	{
+	  plt = htab->root.splt;
+	  gotplt = htab->root.sgotplt;
+	  relplt = htab->root.srelplt;
+	}
+
+      /* This symbol has an entry in the procedure linkage table.  Set
+	 it up.	 */
+      if ((h->dynindx == -1
+	   && !((h->forced_local || bfd_link_executable (info))
+		&& h->def_regular
+		&& h->type == STT_GNU_IFUNC))
+	  || plt == NULL
+	  || gotplt == NULL
+	  || relplt == NULL)
+	abort ();
+
+      elfNN_kvx_create_small_pltn_entry (h, htab, output_bfd);
+      if (!h->def_regular)
+	{
+	  /* Mark the symbol as undefined, rather than as defined in
+	     the .plt section.  */
+	  sym->st_shndx = SHN_UNDEF;
+	  /* If the symbol is weak we need to clear the value.
+	     Otherwise, the PLT entry would provide a definition for
+	     the symbol even if the symbol wasn't defined anywhere,
+	     and so the symbol would never be NULL.  Leave the value if
+	     there were any relocations where pointer equality matters
+	     (this is a clue for the dynamic linker, to make function
+	     pointer comparisons work between an application and shared
+	     library).  */
+	  if (!h->ref_regular_nonweak || !h->pointer_equality_needed)
+	    sym->st_value = 0;
+	}
+    }
+
+  if (h->got.offset != (bfd_vma) - 1
+      && elf_kvx_hash_entry (h)->got_type == GOT_NORMAL)
+    {
+      Elf_Internal_Rela rela;
+      bfd_byte *loc;
+
+      /* This symbol has an entry in the global offset table.  Set it
+	 up.  */
+      if (htab->root.sgot == NULL || htab->root.srelgot == NULL)
+	abort ();
+
+      rela.r_offset = (htab->root.sgot->output_section->vma
+		       + htab->root.sgot->output_offset
+		       + (h->got.offset & ~(bfd_vma) 1));
+
+#ifdef UGLY_DEBUG
+      printf("setting rela at offset 0x%x(0x%x + 0x%x + 0x%x) for %s\n",
+	     rela.r_offset,
+	     htab->root.sgot->output_section->vma,
+	     htab->root.sgot->output_offset,
+	     h->got.offset,
+	     h->root.root.string);
+#endif
+
+      if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))
+	{
+	  if (!h->def_regular)
+	    return false;
+
+	  /* in case of PLT related GOT entry, it is not clear who is
+	     supposed to set the LSB of GOT entry...
+	     kvx_calculate_got_entry_vma() would be a good candidate,
+	     but it is not called currently
+	     So we are commenting it ATM.  */
+	  // BFD_ASSERT ((h->got.offset & 1) != 0);
+	  rela.r_info = ELFNN_R_INFO (0, R_KVX_RELATIVE);
+	  rela.r_addend = (h->root.u.def.value
+			   + h->root.u.def.section->output_section->vma
+			   + h->root.u.def.section->output_offset);
+	}
+      else
+	{
+	  BFD_ASSERT ((h->got.offset & 1) == 0);
+	  bfd_put_NN (output_bfd, (bfd_vma) 0,
+		      htab->root.sgot->contents + h->got.offset);
+	  rela.r_info = ELFNN_R_INFO (h->dynindx, R_KVX_GLOB_DAT);
+	  rela.r_addend = 0;
+	}
+
+      loc = htab->root.srelgot->contents;
+      loc += htab->root.srelgot->reloc_count++ * RELOC_SIZE (htab);
+      bfd_elfNN_swap_reloca_out (output_bfd, &rela, loc);
+    }
+
+  if (h->needs_copy)
+    {
+      Elf_Internal_Rela rela;
+      bfd_byte *loc;
+
+      /* This symbol needs a copy reloc.  Set it up.  */
+
+      if (h->dynindx == -1
+	  || (h->root.type != bfd_link_hash_defined
+	      && h->root.type != bfd_link_hash_defweak)
+	  || htab->srelbss == NULL)
+	abort ();
+
+      rela.r_offset = (h->root.u.def.value
+		       + h->root.u.def.section->output_section->vma
+		       + h->root.u.def.section->output_offset);
+      rela.r_info = ELFNN_R_INFO (h->dynindx, R_KVX_COPY);
+      rela.r_addend = 0;
+      loc = htab->srelbss->contents;
+      loc += htab->srelbss->reloc_count++ * RELOC_SIZE (htab);
+      bfd_elfNN_swap_reloca_out (output_bfd, &rela, loc);
+    }
+
+  /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  SYM may
+     be NULL for local symbols.  */
+  if (sym != NULL
+      && (h == elf_hash_table (info)->hdynamic
+	  || h == elf_hash_table (info)->hgot))
+    sym->st_shndx = SHN_ABS;
+
+  return true;
+}
+
+static void
+elfNN_kvx_init_small_plt0_entry (bfd *output_bfd ATTRIBUTE_UNUSED,
+				 struct elf_kvx_link_hash_table *htab)
+{
+  memcpy (htab->root.splt->contents, elfNN_kvx_small_plt0_entry,
+	  PLT_ENTRY_SIZE);
+  elf_section_data (htab->root.splt->output_section)->this_hdr.sh_entsize =
+    PLT_ENTRY_SIZE;
+}
+
+static bool
+elfNN_kvx_finish_dynamic_sections (bfd *output_bfd,
+				   struct bfd_link_info *info)
+{
+  struct elf_kvx_link_hash_table *htab;
+  bfd *dynobj;
+  asection *sdyn;
+
+  htab = elf_kvx_hash_table (info);
+  dynobj = htab->root.dynobj;
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
+
+  if (htab->root.dynamic_sections_created)
+    {
+      ElfNN_External_Dyn *dyncon, *dynconend;
+
+      if (sdyn == NULL || htab->root.sgot == NULL)
+	abort ();
+
+      dyncon = (ElfNN_External_Dyn *) sdyn->contents;
+      dynconend = (ElfNN_External_Dyn *) (sdyn->contents + sdyn->size);
+      for (; dyncon < dynconend; dyncon++)
+	{
+	  Elf_Internal_Dyn dyn;
+	  asection *s;
+
+	  bfd_elfNN_swap_dyn_in (dynobj, dyncon, &dyn);
+
+	  switch (dyn.d_tag)
+	    {
+	    default:
+	      continue;
+
+	    case DT_PLTGOT:
+	      s = htab->root.sgotplt;
+	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
+	      break;
+
+	    case DT_JMPREL:
+	      s = htab->root.srelplt;
+	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
+	      break;
+
+	    case DT_PLTRELSZ:
+	      s = htab->root.srelplt;
+	      dyn.d_un.d_val = s->size;
+	      break;
+
+	    case DT_RELASZ:
+	      /* The procedure linkage table relocs (DT_JMPREL) should
+		 not be included in the overall relocs (DT_RELA).
+		 Therefore, we override the DT_RELASZ entry here to
+		 make it not include the JMPREL relocs.  Since the
+		 linker script arranges for .rela.plt to follow all
+		 other relocation sections, we don't have to worry
+		 about changing the DT_RELA entry.  */
+	      if (htab->root.srelplt != NULL)
+		{
+		  s = htab->root.srelplt;
+		  dyn.d_un.d_val -= s->size;
+		}
+	      break;
+	    }
+
+	  bfd_elfNN_swap_dyn_out (output_bfd, &dyn, dyncon);
+	}
+
+    }
+
+  /* Fill in the special first entry in the procedure linkage table.  */
+  if (htab->root.splt && htab->root.splt->size > 0)
+    {
+      elfNN_kvx_init_small_plt0_entry (output_bfd, htab);
+
+      elf_section_data (htab->root.splt->output_section)->
+	this_hdr.sh_entsize = htab->plt_entry_size;
+    }
+
+  if (htab->root.sgotplt)
+    {
+      if (bfd_is_abs_section (htab->root.sgotplt->output_section))
+	{
+	  (*_bfd_error_handler)
+	    (_("discarded output section: `%pA'"), htab->root.sgotplt);
+	  return false;
+	}
+
+      /* Fill in the first three entries in the global offset table.  */
+      if (htab->root.sgotplt->size > 0)
+	{
+	  bfd_put_NN (output_bfd, (bfd_vma) 0, htab->root.sgotplt->contents);
+
+	  /* Write GOT[1] and GOT[2], needed for the dynamic linker.  */
+	  bfd_put_NN (output_bfd,
+		      (bfd_vma) 0,
+		      htab->root.sgotplt->contents + GOT_ENTRY_SIZE);
+	  bfd_put_NN (output_bfd,
+		      (bfd_vma) 0,
+		      htab->root.sgotplt->contents + GOT_ENTRY_SIZE * 2);
+	}
+
+      if (htab->root.sgot)
+	{
+	  if (htab->root.sgot->size > 0)
+	    {
+	      bfd_vma addr =
+		sdyn ? sdyn->output_section->vma + sdyn->output_offset : 0;
+	      bfd_put_NN (output_bfd, addr, htab->root.sgot->contents);
+	    }
+	}
+
+      elf_section_data (htab->root.sgotplt->output_section)->
+	this_hdr.sh_entsize = GOT_ENTRY_SIZE;
+    }
+
+  if (htab->root.sgot && htab->root.sgot->size > 0)
+    elf_section_data (htab->root.sgot->output_section)->this_hdr.sh_entsize
+      = GOT_ENTRY_SIZE;
+
+  return true;
+}
+
+/* Return address for Ith PLT stub in section PLT, for relocation REL
+   or (bfd_vma) -1 if it should not be included.  */
+
+static bfd_vma
+elfNN_kvx_plt_sym_val (bfd_vma i, const asection *plt,
+		       const arelent *rel ATTRIBUTE_UNUSED)
+{
+  return plt->vma + PLT_ENTRY_SIZE + i * PLT_SMALL_ENTRY_SIZE;
+}
+
+#define ELF_ARCH			bfd_arch_kvx
+#define ELF_MACHINE_CODE		EM_KVX
+#define ELF_MAXPAGESIZE			0x10000
+#define ELF_MINPAGESIZE			0x1000
+#define ELF_COMMONPAGESIZE		0x1000
+
+#define bfd_elfNN_bfd_link_hash_table_create    \
+  elfNN_kvx_link_hash_table_create
+
+#define bfd_elfNN_bfd_merge_private_bfd_data	\
+  elfNN_kvx_merge_private_bfd_data
+
+#define bfd_elfNN_bfd_print_private_bfd_data	\
+  elfNN_kvx_print_private_bfd_data
+
+#define bfd_elfNN_bfd_reloc_type_lookup		\
+  elfNN_kvx_reloc_type_lookup
+
+#define bfd_elfNN_bfd_reloc_name_lookup		\
+  elfNN_kvx_reloc_name_lookup
+
+#define bfd_elfNN_bfd_set_private_flags		\
+  elfNN_kvx_set_private_flags
+
+#define bfd_elfNN_mkobject			\
+  elfNN_kvx_mkobject
+
+#define bfd_elfNN_new_section_hook		\
+  elfNN_kvx_new_section_hook
+
+#define elf_backend_adjust_dynamic_symbol	\
+  elfNN_kvx_adjust_dynamic_symbol
+
+#define elf_backend_always_size_sections	\
+  elfNN_kvx_always_size_sections
+
+#define elf_backend_check_relocs		\
+  elfNN_kvx_check_relocs
+
+#define elf_backend_copy_indirect_symbol	\
+  elfNN_kvx_copy_indirect_symbol
+
+/* Create .dynbss, and .rela.bss sections in DYNOBJ, and set up shortcuts
+   to them in our hash.  */
+#define elf_backend_create_dynamic_sections	\
+  elfNN_kvx_create_dynamic_sections
+
+#define elf_backend_init_index_section		\
+  _bfd_elf_init_2_index_sections
+
+#define elf_backend_finish_dynamic_sections	\
+  elfNN_kvx_finish_dynamic_sections
+
+#define elf_backend_finish_dynamic_symbol	\
+  elfNN_kvx_finish_dynamic_symbol
+
+#define elf_backend_object_p			\
+  elfNN_kvx_object_p
+
+#define elf_backend_output_arch_local_syms      \
+  elfNN_kvx_output_arch_local_syms
+
+#define elf_backend_plt_sym_val			\
+  elfNN_kvx_plt_sym_val
+
+#define elf_backend_init_file_header		\
+  elfNN_kvx_init_file_header
+
+#define elf_backend_init_process_headers	\
+  elfNN_kvx_init_process_headers
+
+#define elf_backend_relocate_section		\
+  elfNN_kvx_relocate_section
+
+#define elf_backend_reloc_type_class		\
+  elfNN_kvx_reloc_type_class
+
+#define elf_backend_size_dynamic_sections	\
+  elfNN_kvx_size_dynamic_sections
+
+#define elf_backend_can_refcount       1
+#define elf_backend_can_gc_sections    1
+#define elf_backend_plt_readonly       1
+#define elf_backend_want_got_plt       1
+#define elf_backend_want_plt_sym       0
+#define elf_backend_may_use_rel_p      0
+#define elf_backend_may_use_rela_p     1
+#define elf_backend_default_use_rela_p 1
+#define elf_backend_rela_normal        1
+#define elf_backend_got_header_size (GOT_ENTRY_SIZE * 3)
+#define elf_backend_default_execstack  0
+#define elf_backend_extern_protected_data 1
+#define elf_backend_hash_symbol elf_kvx_hash_symbol
+
+#include "elfNN-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-loongarch.c ./bfd/elfnn-loongarch.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-loongarch.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elfnn-loongarch.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,5345 @@
+/* LoongArch-specific support for NN-bit ELF.
+   Copyright (C) 2021-2024 Free Software Foundation, Inc.
+   Contributed by Loongson Ltd.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+#include "ansidecl.h"
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#define ARCH_SIZE NN
+#include "elf-bfd.h"
+#include "objalloc.h"
+#include "elf/loongarch.h"
+#include "elfxx-loongarch.h"
+#include "opcode/loongarch.h"
+
+static bool
+loongarch_info_to_howto_rela (bfd *abfd, arelent *cache_ptr,
+			      Elf_Internal_Rela *dst)
+{
+  cache_ptr->howto = loongarch_elf_rtype_to_howto (abfd,
+						   ELFNN_R_TYPE (dst->r_info));
+  return cache_ptr->howto != NULL;
+}
+
+/* LoongArch ELF linker hash entry.  */
+struct loongarch_elf_link_hash_entry
+{
+  struct elf_link_hash_entry elf;
+
+#define GOT_UNKNOWN 0
+#define GOT_NORMAL  1
+#define GOT_TLS_GD  2
+#define GOT_TLS_IE  4
+#define GOT_TLS_LE  8
+#define GOT_TLS_GDESC 16
+
+#define GOT_TLS_GD_BOTH_P(tls_type) \
+  ((tls_type & GOT_TLS_GD) && (tls_type & GOT_TLS_GDESC))
+#define GOT_TLS_GD_ANY_P(tls_type) \
+  ((tls_type & GOT_TLS_GD) || (tls_type & GOT_TLS_GDESC))
+  char tls_type;
+};
+
+#define loongarch_elf_hash_entry(ent)	\
+  ((struct loongarch_elf_link_hash_entry *) (ent))
+
+struct _bfd_loongarch_elf_obj_tdata
+{
+  struct elf_obj_tdata root;
+
+  /* The tls_type for each local got entry.  */
+  char *local_got_tls_type;
+};
+
+#define _bfd_loongarch_elf_tdata(abfd)	\
+  ((struct _bfd_loongarch_elf_obj_tdata *) (abfd)->tdata.any)
+
+#define _bfd_loongarch_elf_local_got_tls_type(abfd)	\
+  (_bfd_loongarch_elf_tdata (abfd)->local_got_tls_type)
+
+#define _bfd_loongarch_elf_tls_type(abfd, h, symndx)			\
+  (*((h) != NULL							\
+     ? &loongarch_elf_hash_entry (h)->tls_type				\
+     : &_bfd_loongarch_elf_local_got_tls_type (abfd)[symndx]))
+
+#define is_loongarch_elf(bfd)						\
+  (bfd_get_flavour (bfd) == bfd_target_elf_flavour			\
+   && elf_tdata (bfd) != NULL						\
+   && elf_object_id (bfd) == LARCH_ELF_DATA)
+
+struct loongarch_elf_link_hash_table
+{
+  struct elf_link_hash_table elf;
+
+  /* Short-cuts to get to dynamic linker sections.  */
+  asection *sdyntdata;
+
+  /* Small local sym to section mapping cache.  */
+  struct sym_cache sym_cache;
+
+  /* Used by local STT_GNU_IFUNC symbols.  */
+  htab_t loc_hash_table;
+  void *loc_hash_memory;
+
+  /* The max alignment of output sections.  */
+  bfd_vma max_alignment;
+
+  /* The data segment phase, don't relax the section
+     when it is exp_seg_relro_adjust.  */
+  int *data_segment_phase;
+};
+
+/* Get the LoongArch ELF linker hash table from a link_info structure.  */
+#define loongarch_elf_hash_table(p)					\
+  (elf_hash_table_id (elf_hash_table (p)) == LARCH_ELF_DATA		\
+   ? ((struct loongarch_elf_link_hash_table *) ((p)->hash))		\
+   : NULL)
+
+#define MINUS_ONE ((bfd_vma) 0 - 1)
+
+#define sec_addr(sec) ((sec)->output_section->vma + (sec)->output_offset)
+
+#define LARCH_ELF_LOG_WORD_BYTES (ARCH_SIZE == 32 ? 2 : 3)
+#define LARCH_ELF_WORD_BYTES (1 << LARCH_ELF_LOG_WORD_BYTES)
+
+#define PLT_HEADER_INSNS 8
+#define PLT_HEADER_SIZE (PLT_HEADER_INSNS * 4)
+
+#define PLT_ENTRY_INSNS 4
+#define PLT_ENTRY_SIZE (PLT_ENTRY_INSNS * 4)
+
+#define GOT_ENTRY_SIZE (LARCH_ELF_WORD_BYTES)
+
+#define GOTPLT_HEADER_SIZE (GOT_ENTRY_SIZE * 2)
+
+#define elf_backend_want_got_plt 1
+
+#define elf_backend_plt_readonly 1
+
+#define elf_backend_want_plt_sym 1
+#define elf_backend_plt_alignment 4
+#define elf_backend_can_gc_sections 1
+#define elf_backend_can_refcount 1
+#define elf_backend_want_got_sym 1
+
+#define elf_backend_got_header_size (GOT_ENTRY_SIZE * 1)
+
+#define elf_backend_want_dynrelro 1
+#define elf_backend_rela_normal 1
+#define elf_backend_default_execstack 0
+
+#define IS_LOONGARCH_TLS_DESC_RELOC(R_TYPE)    \
+  ((R_TYPE) == R_LARCH_TLS_DESC_PC_HI20	\
+   || (R_TYPE) == R_LARCH_TLS_DESC_PC_LO12  \
+   || (R_TYPE) == R_LARCH_TLS_DESC_LD \
+   || (R_TYPE) == R_LARCH_TLS_DESC_CALL)
+
+#define IS_LOONGARCH_TLS_IE_RELOC(R_TYPE) \
+  ((R_TYPE) == R_LARCH_TLS_IE_PC_HI20 \
+   || (R_TYPE) == R_LARCH_TLS_IE_PC_LO12)
+
+/* Generate a PLT header.  */
+
+static bool
+loongarch_make_plt_header (bfd_vma got_plt_addr, bfd_vma plt_header_addr,
+			   uint32_t *entry)
+{
+  bfd_vma pcrel = got_plt_addr - plt_header_addr;
+  bfd_vma hi, lo;
+
+  if (pcrel + 0x80000800 > 0xffffffff)
+    {
+      _bfd_error_handler (_("%#" PRIx64 " invaild imm"), (uint64_t) pcrel);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+  hi = ((pcrel + 0x800) >> 12) & 0xfffff;
+  lo = pcrel & 0xfff;
+
+  /* pcaddu12i  $t2, %hi(%pcrel(.got.plt))
+     sub.[wd]   $t1, $t1, $t3
+     ld.[wd]    $t3, $t2, %lo(%pcrel(.got.plt)) # _dl_runtime_resolve
+     addi.[wd]  $t1, $t1, -(PLT_HEADER_SIZE + 12)
+     addi.[wd]  $t0, $t2, %lo(%pcrel(.got.plt))
+     srli.[wd]  $t1, $t1, log2(16 / GOT_ENTRY_SIZE)
+     ld.[wd]    $t0, $t0, GOT_ENTRY_SIZE
+     jirl   $r0, $t3, 0 */
+
+  if (GOT_ENTRY_SIZE == 8)
+    {
+      entry[0] = 0x1c00000e | (hi & 0xfffff) << 5;
+      entry[1] = 0x0011bdad;
+      entry[2] = 0x28c001cf | (lo & 0xfff) << 10;
+      entry[3] = 0x02c001ad | ((-(PLT_HEADER_SIZE + 12)) & 0xfff) << 10;
+      entry[4] = 0x02c001cc | (lo & 0xfff) << 10;
+      entry[5] = 0x004501ad | (4 - LARCH_ELF_LOG_WORD_BYTES) << 10;
+      entry[6] = 0x28c0018c | GOT_ENTRY_SIZE << 10;
+      entry[7] = 0x4c0001e0;
+    }
+  else
+    {
+      entry[0] = 0x1c00000e | (hi & 0xfffff) << 5;
+      entry[1] = 0x00113dad;
+      entry[2] = 0x288001cf | (lo & 0xfff) << 10;
+      entry[3] = 0x028001ad | ((-(PLT_HEADER_SIZE + 12)) & 0xfff) << 10;
+      entry[4] = 0x028001cc | (lo & 0xfff) << 10;
+      entry[5] = 0x004481ad | (4 - LARCH_ELF_LOG_WORD_BYTES) << 10;
+      entry[6] = 0x2880018c | GOT_ENTRY_SIZE << 10;
+      entry[7] = 0x4c0001e0;
+    }
+  return true;
+}
+
+/* Generate a PLT entry.  */
+
+static bool
+loongarch_make_plt_entry (bfd_vma got_plt_entry_addr, bfd_vma plt_entry_addr,
+			  uint32_t *entry)
+{
+  bfd_vma pcrel = got_plt_entry_addr - plt_entry_addr;
+  bfd_vma hi, lo;
+
+  if (pcrel + 0x80000800 > 0xffffffff)
+    {
+      _bfd_error_handler (_("%#" PRIx64 " invaild imm"), (uint64_t) pcrel);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+  hi = ((pcrel + 0x800) >> 12) & 0xfffff;
+  lo = pcrel & 0xfff;
+
+  entry[0] = 0x1c00000f | (hi & 0xfffff) << 5;
+  entry[1] = ((GOT_ENTRY_SIZE == 8 ? 0x28c001ef : 0x288001ef)
+	      | (lo & 0xfff) << 10);
+  entry[2] = 0x4c0001ed;	/* jirl $r13, $15, 0 */
+  entry[3] = 0x03400000;	/* nop */
+
+  return true;
+}
+
+/* Create an entry in an LoongArch ELF linker hash table.  */
+
+static struct bfd_hash_entry *
+link_hash_newfunc (struct bfd_hash_entry *entry, struct bfd_hash_table *table,
+		   const char *string)
+{
+  struct loongarch_elf_link_hash_entry *eh;
+
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (entry == NULL)
+    {
+      entry = bfd_hash_allocate (table, sizeof (*eh));
+      if (entry == NULL)
+	return entry;
+    }
+
+  /* Call the allocation method of the superclass.  */
+  entry = _bfd_elf_link_hash_newfunc (entry, table, string);
+  if (entry != NULL)
+    {
+      eh = (struct loongarch_elf_link_hash_entry *) entry;
+      eh->tls_type = GOT_UNKNOWN;
+    }
+
+  return entry;
+}
+
+/* Compute a hash of a local hash entry.  We use elf_link_hash_entry
+  for local symbol so that we can handle local STT_GNU_IFUNC symbols
+  as global symbol.  We reuse indx and dynstr_index for local symbol
+  hash since they aren't used by global symbols in this backend.  */
+
+static hashval_t
+elfNN_loongarch_local_htab_hash (const void *ptr)
+{
+  struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) ptr;
+  return ELF_LOCAL_SYMBOL_HASH (h->indx, h->dynstr_index);
+}
+
+/* Compare local hash entries.  */
+
+static int
+elfNN_loongarch_local_htab_eq (const void *ptr1, const void *ptr2)
+{
+  struct elf_link_hash_entry *h1 = (struct elf_link_hash_entry *) ptr1;
+  struct elf_link_hash_entry *h2 = (struct elf_link_hash_entry *) ptr2;
+
+  return h1->indx == h2->indx && h1->dynstr_index == h2->dynstr_index;
+}
+
+/* Find and/or create a hash entry for local symbol.  */
+static struct elf_link_hash_entry *
+elfNN_loongarch_get_local_sym_hash (struct loongarch_elf_link_hash_table *htab,
+				    bfd *abfd, const Elf_Internal_Rela *rel,
+				    bool create)
+{
+  struct loongarch_elf_link_hash_entry e, *ret;
+  asection *sec = abfd->sections;
+  hashval_t h = ELF_LOCAL_SYMBOL_HASH (sec->id, ELFNN_R_SYM (rel->r_info));
+  void **slot;
+
+  e.elf.indx = sec->id;
+  e.elf.dynstr_index = ELFNN_R_SYM (rel->r_info);
+  slot = htab_find_slot_with_hash (htab->loc_hash_table, &e, h,
+				   create ? INSERT : NO_INSERT);
+
+  if (!slot)
+    return NULL;
+
+  if (*slot)
+    {
+      ret = (struct loongarch_elf_link_hash_entry *) *slot;
+      return &ret->elf;
+    }
+
+  ret = ((struct loongarch_elf_link_hash_entry *)
+	 objalloc_alloc ((struct objalloc *) htab->loc_hash_memory,
+			 sizeof (struct loongarch_elf_link_hash_entry)));
+  if (ret)
+    {
+      memset (ret, 0, sizeof (*ret));
+      ret->elf.indx = sec->id;
+      ret->elf.pointer_equality_needed = 0;
+      ret->elf.dynstr_index = ELFNN_R_SYM (rel->r_info);
+      ret->elf.dynindx = -1;
+      ret->elf.needs_plt = 0;
+      ret->elf.plt.refcount = -1;
+      ret->elf.got.refcount = -1;
+      ret->elf.def_dynamic = 0;
+      ret->elf.def_regular = 1;
+      ret->elf.ref_dynamic = 0; /* This should be always 0 for local.  */
+      ret->elf.ref_regular = 0;
+      ret->elf.forced_local = 1;
+      ret->elf.root.type = bfd_link_hash_defined;
+      *slot = ret;
+    }
+  return &ret->elf;
+}
+
+/* Destroy an LoongArch elf linker hash table.  */
+
+static void
+elfNN_loongarch_link_hash_table_free (bfd *obfd)
+{
+  struct loongarch_elf_link_hash_table *ret;
+  ret = (struct loongarch_elf_link_hash_table *) obfd->link.hash;
+
+  if (ret->loc_hash_table)
+    htab_delete (ret->loc_hash_table);
+  if (ret->loc_hash_memory)
+    objalloc_free ((struct objalloc *) ret->loc_hash_memory);
+
+  _bfd_elf_link_hash_table_free (obfd);
+}
+
+/* Create a LoongArch ELF linker hash table.  */
+
+static struct bfd_link_hash_table *
+loongarch_elf_link_hash_table_create (bfd *abfd)
+{
+  struct loongarch_elf_link_hash_table *ret;
+  bfd_size_type amt = sizeof (struct loongarch_elf_link_hash_table);
+
+  ret = (struct loongarch_elf_link_hash_table *) bfd_zmalloc (amt);
+  if (ret == NULL)
+    return NULL;
+
+  if (!_bfd_elf_link_hash_table_init
+      (&ret->elf, abfd, link_hash_newfunc,
+       sizeof (struct loongarch_elf_link_hash_entry), LARCH_ELF_DATA))
+    {
+      free (ret);
+      return NULL;
+    }
+
+  ret->max_alignment = MINUS_ONE;
+
+  ret->loc_hash_table = htab_try_create (1024, elfNN_loongarch_local_htab_hash,
+					 elfNN_loongarch_local_htab_eq, NULL);
+  ret->loc_hash_memory = objalloc_create ();
+  if (!ret->loc_hash_table || !ret->loc_hash_memory)
+    {
+      elfNN_loongarch_link_hash_table_free (abfd);
+      return NULL;
+    }
+  ret->elf.root.hash_table_free = elfNN_loongarch_link_hash_table_free;
+
+  return &ret->elf.root;
+}
+
+/* Merge backend specific data from an object file to the output
+   object file when linking.  */
+
+static bool
+elfNN_loongarch_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
+{
+  bfd *obfd = info->output_bfd;
+  flagword in_flags = elf_elfheader (ibfd)->e_flags;
+  flagword out_flags = elf_elfheader (obfd)->e_flags;
+
+  if (!is_loongarch_elf (ibfd) || !is_loongarch_elf (obfd))
+    return true;
+
+  if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
+    {
+      _bfd_error_handler (_("%pB: ABI is incompatible with that of "
+			    "the selected emulation:\n"
+			    "  target emulation `%s' does not match `%s'"),
+			  ibfd, bfd_get_target (ibfd), bfd_get_target (obfd));
+      return false;
+    }
+
+  if (!_bfd_elf_merge_object_attributes (ibfd, info))
+    return false;
+
+  /* If the input BFD is not a dynamic object and it does not contain any
+     non-data sections, do not account its ABI.  For example, various
+     packages produces such data-only relocatable objects with
+     `ld -r -b binary` or `objcopy`, and these objects have zero e_flags.
+     But they are compatible with all ABIs.  */
+  if (!(ibfd->flags & DYNAMIC))
+    {
+      asection *sec;
+      bool have_code_sections = false;
+      for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+	if ((bfd_section_flags (sec)
+	     & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
+	    == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
+	  {
+	    have_code_sections = true;
+	    break;
+	  }
+      if (!have_code_sections)
+	return true;
+    }
+
+  if (!elf_flags_init (obfd))
+    {
+      elf_flags_init (obfd) = true;
+      elf_elfheader (obfd)->e_flags = in_flags;
+      return true;
+    }
+  else if (out_flags != in_flags)
+    {
+      if ((EF_LOONGARCH_IS_OBJ_V0 (out_flags)
+	   && EF_LOONGARCH_IS_OBJ_V1 (in_flags))
+	  || (EF_LOONGARCH_IS_OBJ_V0 (in_flags)
+	      && EF_LOONGARCH_IS_OBJ_V1 (out_flags)))
+	{
+	  elf_elfheader (obfd)->e_flags |= EF_LOONGARCH_OBJABI_V1;
+	  out_flags = elf_elfheader (obfd)->e_flags;
+	  in_flags = out_flags;
+	}
+    }
+
+  /* Disallow linking different ABIs.  */
+  /* Only check relocation version.
+     The obj_v0 is compatible with obj_v1.  */
+  if (EF_LOONGARCH_ABI(out_flags ^ in_flags) & EF_LOONGARCH_ABI_MASK)
+    {
+      _bfd_error_handler (_("%pB: can't link different ABI object."), ibfd);
+      goto fail;
+    }
+
+  return true;
+
+ fail:
+  bfd_set_error (bfd_error_bad_value);
+  return false;
+}
+
+/* Create the .got section.  */
+
+static bool
+loongarch_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
+{
+  flagword flags;
+  char *name;
+  asection *s, *s_got;
+  struct elf_link_hash_entry *h;
+  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+  struct elf_link_hash_table *htab = elf_hash_table (info);
+
+  /* This function may be called more than once.  */
+  if (htab->sgot != NULL)
+    return true;
+
+  flags = bed->dynamic_sec_flags;
+  name = bed->rela_plts_and_copies_p ? ".rela.got" : ".rel.got";
+  s = bfd_make_section_anyway_with_flags (abfd, name, flags | SEC_READONLY);
+
+  if (s == NULL || !bfd_set_section_alignment (s, bed->s->log_file_align))
+    return false;
+  htab->srelgot = s;
+
+  s = s_got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
+  if (s == NULL || !bfd_set_section_alignment (s, bed->s->log_file_align))
+    return false;
+  htab->sgot = s;
+
+  /* The first bit of the global offset table is the header.  */
+  s->size += bed->got_header_size;
+
+  if (bed->want_got_plt)
+    {
+      s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
+      if (s == NULL || !bfd_set_section_alignment (s, bed->s->log_file_align))
+	return false;
+      htab->sgotplt = s;
+
+      /* Reserve room for the header.  */
+      s->size = GOTPLT_HEADER_SIZE;
+    }
+
+  if (bed->want_got_sym)
+    {
+      /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
+	 section.  We don't do this in the linker script because we don't want
+	 to define the symbol if we are not creating a global offset table.  */
+      h = _bfd_elf_define_linkage_sym (abfd, info, s_got,
+				       "_GLOBAL_OFFSET_TABLE_");
+      elf_hash_table (info)->hgot = h;
+      if (h == NULL)
+	return false;
+    }
+  return true;
+}
+
+/* Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and
+   .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
+   hash table.  */
+
+static bool
+loongarch_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
+{
+  struct loongarch_elf_link_hash_table *htab;
+
+  htab = loongarch_elf_hash_table (info);
+  BFD_ASSERT (htab != NULL);
+
+  if (!loongarch_elf_create_got_section (dynobj, info))
+    return false;
+
+  if (!_bfd_elf_create_dynamic_sections (dynobj, info))
+    return false;
+
+  if (!bfd_link_pic (info))
+    htab->sdyntdata
+      = bfd_make_section_anyway_with_flags (dynobj, ".tdata.dyn",
+					    SEC_ALLOC | SEC_THREAD_LOCAL);
+
+  if (!htab->elf.splt || !htab->elf.srelplt || !htab->elf.sdynbss
+      || (!bfd_link_pic (info) && (!htab->elf.srelbss || !htab->sdyntdata)))
+    abort ();
+
+  return true;
+}
+
+static bool
+loongarch_elf_record_tls_and_got_reference (bfd *abfd,
+					    struct bfd_link_info *info,
+					    struct elf_link_hash_entry *h,
+					    unsigned long symndx,
+					    char tls_type)
+{
+  struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info);
+  Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+
+  /* This is a global offset table entry for a local symbol.  */
+  if (elf_local_got_refcounts (abfd) == NULL)
+    {
+      bfd_size_type size =
+	symtab_hdr->sh_info * (sizeof (bfd_vma) + sizeof (tls_type));
+      if (!(elf_local_got_refcounts (abfd) = bfd_zalloc (abfd, size)))
+	return false;
+      _bfd_loongarch_elf_local_got_tls_type (abfd) =
+	(char *) (elf_local_got_refcounts (abfd) + symtab_hdr->sh_info);
+    }
+
+  switch (tls_type)
+    {
+    case GOT_NORMAL:
+    case GOT_TLS_GD:
+    case GOT_TLS_IE:
+    case GOT_TLS_GDESC:
+      /* Need GOT.  */
+      if (htab->elf.sgot == NULL
+	  && !loongarch_elf_create_got_section (htab->elf.dynobj, info))
+	return false;
+      if (h)
+	{
+	  if (h->got.refcount < 0)
+	    h->got.refcount = 0;
+	  h->got.refcount++;
+	}
+      else
+	elf_local_got_refcounts (abfd)[symndx]++;
+      break;
+    case GOT_TLS_LE:
+      /* No need for GOT.  */
+      break;
+    default:
+      _bfd_error_handler (_("Internal error: unreachable."));
+      return false;
+    }
+
+  char *new_tls_type = &_bfd_loongarch_elf_tls_type (abfd, h, symndx);
+  *new_tls_type |= tls_type;
+
+  /* If a symbol is accessed by both IE and DESC, relax DESC to IE.  */
+  if ((*new_tls_type & GOT_TLS_IE) && (*new_tls_type & GOT_TLS_GDESC))
+    *new_tls_type &= ~ (GOT_TLS_GDESC);
+  if ((*new_tls_type & GOT_NORMAL) && (*new_tls_type & ~GOT_NORMAL))
+    {
+      _bfd_error_handler (_("%pB: `%s' accessed both as normal and "
+			    "thread local symbol"),
+			  abfd,
+			  h ? h->root.root.string : "<local>");
+      return false;
+    }
+
+  return true;
+}
+
+static unsigned int
+loongarch_reloc_got_type (unsigned int r_type)
+{
+  switch (r_type)
+    {
+      case R_LARCH_TLS_DESC_PC_HI20:
+      case R_LARCH_TLS_DESC_PC_LO12:
+      case R_LARCH_TLS_DESC_LD:
+      case R_LARCH_TLS_DESC_CALL:
+	return GOT_TLS_GDESC;
+
+      case R_LARCH_TLS_IE_PC_HI20:
+      case R_LARCH_TLS_IE_PC_LO12:
+	return GOT_TLS_IE;
+
+      default:
+	break;
+    }
+  return GOT_UNKNOWN;
+}
+
+/* Return true if tls type transition can be performed.  */
+static bool
+loongarch_can_relax_tls (struct bfd_link_info *info, unsigned int r_type,
+			 struct elf_link_hash_entry *h, bfd *input_bfd,
+			 unsigned long r_symndx)
+{
+  char symbol_tls_type;
+  unsigned int reloc_got_type;
+
+  if (! (IS_LOONGARCH_TLS_DESC_RELOC (r_type)
+	 || IS_LOONGARCH_TLS_IE_RELOC (r_type)))
+    return false;
+
+  symbol_tls_type = _bfd_loongarch_elf_tls_type (input_bfd, h, r_symndx);
+  reloc_got_type = loongarch_reloc_got_type (r_type);
+
+  if (symbol_tls_type == GOT_TLS_IE && GOT_TLS_GD_ANY_P (reloc_got_type))
+    return true;
+
+  if (! bfd_link_executable (info))
+      return false;
+
+  if (h && h->root.type == bfd_link_hash_undefweak)
+    return false;
+
+  return true;
+}
+
+/* The type of relocation that can be transitioned.  */
+static unsigned int
+loongarch_tls_transition_without_check (struct bfd_link_info *info,
+					unsigned int r_type,
+					struct elf_link_hash_entry *h)
+{
+  bool local_exec = bfd_link_executable (info)
+		    && SYMBOL_REFERENCES_LOCAL (info, h);
+
+  switch (r_type)
+    {
+      case R_LARCH_TLS_DESC_PC_HI20:
+	return (local_exec
+		? R_LARCH_TLS_LE_HI20
+		: R_LARCH_TLS_IE_PC_HI20);
+
+      case R_LARCH_TLS_DESC_PC_LO12:
+	return (local_exec
+		? R_LARCH_TLS_LE_LO12
+		: R_LARCH_TLS_IE_PC_LO12);
+
+      case R_LARCH_TLS_DESC_LD:
+      case R_LARCH_TLS_DESC_CALL:
+	return R_LARCH_NONE;
+
+      case R_LARCH_TLS_IE_PC_HI20:
+	return local_exec ? R_LARCH_TLS_LE_HI20 : r_type;
+
+      case R_LARCH_TLS_IE_PC_LO12:
+	return local_exec ? R_LARCH_TLS_LE_LO12 : r_type;
+
+      default:
+	break;
+    }
+
+  return r_type;
+}
+
+static unsigned int
+loongarch_tls_transition (struct bfd_link_info *info, unsigned int r_type,
+			  struct elf_link_hash_entry *h, bfd *input_bfd,
+			  unsigned long r_symndx)
+{
+  if (! loongarch_can_relax_tls (info, r_type, h, input_bfd,r_symndx))
+    return r_type;
+
+  return loongarch_tls_transition_without_check (info, r_type, h);
+}
+
+/* Look through the relocs for a section during the first phase, and
+   allocate space in the global offset table or procedure linkage
+   table.  */
+
+static bool
+loongarch_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
+			    asection *sec, const Elf_Internal_Rela *relocs)
+{
+  struct loongarch_elf_link_hash_table *htab;
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  const Elf_Internal_Rela *rel;
+  asection *sreloc = NULL;
+
+  if (bfd_link_relocatable (info))
+    return true;
+
+  htab = loongarch_elf_hash_table (info);
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (abfd);
+
+  if (htab->elf.dynobj == NULL)
+    htab->elf.dynobj = abfd;
+
+  for (rel = relocs; rel < relocs + sec->reloc_count; rel++)
+    {
+      unsigned int r_type;
+      unsigned int r_symndx;
+      struct elf_link_hash_entry *h;
+      Elf_Internal_Sym *isym = NULL;
+
+      r_symndx = ELFNN_R_SYM (rel->r_info);
+      r_type = ELFNN_R_TYPE (rel->r_info);
+
+      if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
+	{
+	  _bfd_error_handler (_("%pB: bad symbol index: %d"), abfd, r_symndx);
+	  return false;
+	}
+
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  /* A local symbol.  */
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx);
+	  if (isym == NULL)
+	    return false;
+
+	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+	    {
+	      h = elfNN_loongarch_get_local_sym_hash (htab, abfd, rel, true);
+	      if (h == NULL)
+		return false;
+
+	      h->type = STT_GNU_IFUNC;
+	      h->ref_regular = 1;
+	    }
+	  else
+	    h = NULL;
+	}
+      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;
+	}
+
+      /* It is referenced by a non-shared object.  */
+      if (h != NULL)
+	h->ref_regular = 1;
+
+      if (h && h->type == STT_GNU_IFUNC)
+	{
+	  if (htab->elf.dynobj == NULL)
+	    htab->elf.dynobj = abfd;
+
+	  /* Create 'irelifunc' in PIC object.  */
+	  if (bfd_link_pic (info)
+	      && !_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info))
+	    return false;
+	  /* If '.plt' not represent, create '.iplt' to deal with ifunc.  */
+	  else if (!htab->elf.splt
+		   && !_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info))
+	    return false;
+	  /* Create the ifunc sections, iplt and ipltgot, for static
+	     executables.  */
+	  if ((r_type == R_LARCH_64 || r_type == R_LARCH_32)
+	      && !_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info))
+	    return false;
+
+	  if (h->plt.refcount < 0)
+	    h->plt.refcount = 0;
+	  h->plt.refcount++;
+	  h->needs_plt = 1;
+
+	  elf_tdata (info->output_bfd)->has_gnu_osabi |= elf_gnu_osabi_ifunc;
+	}
+
+      int need_dynreloc = 0;
+      int only_need_pcrel = 0;
+
+      r_type = loongarch_tls_transition (info, r_type, h, abfd, r_symndx);
+      switch (r_type)
+	{
+	case R_LARCH_GOT_PC_HI20:
+	case R_LARCH_GOT_HI20:
+	case R_LARCH_SOP_PUSH_GPREL:
+	  /* For la.global.  */
+	  if (h)
+	    h->pointer_equality_needed = 1;
+	  if (!loongarch_elf_record_tls_and_got_reference (abfd, info, h,
+							   r_symndx,
+							   GOT_NORMAL))
+	    return false;
+	  break;
+
+	case R_LARCH_TLS_LD_PC_HI20:
+	case R_LARCH_TLS_LD_HI20:
+	case R_LARCH_TLS_GD_PC_HI20:
+	case R_LARCH_TLS_GD_HI20:
+	case R_LARCH_SOP_PUSH_TLS_GD:
+	  if (!loongarch_elf_record_tls_and_got_reference (abfd, info, h,
+							   r_symndx,
+							   GOT_TLS_GD))
+	    return false;
+	  break;
+
+	case R_LARCH_TLS_IE_PC_HI20:
+	case R_LARCH_TLS_IE_HI20:
+	case R_LARCH_SOP_PUSH_TLS_GOT:
+	  if (bfd_link_pic (info))
+	    /* May fail for lazy-bind.  */
+	    info->flags |= DF_STATIC_TLS;
+
+	  if (!loongarch_elf_record_tls_and_got_reference (abfd, info, h,
+							   r_symndx,
+							   GOT_TLS_IE))
+	    return false;
+	  break;
+
+	case R_LARCH_TLS_LE_HI20:
+	case R_LARCH_TLS_LE_HI20_R:
+	case R_LARCH_SOP_PUSH_TLS_TPREL:
+	  if (!bfd_link_executable (info))
+	    return false;
+
+	  if (!loongarch_elf_record_tls_and_got_reference (abfd, info, h,
+							   r_symndx,
+							   GOT_TLS_LE))
+	    return false;
+	  break;
+
+	case R_LARCH_TLS_DESC_PC_HI20:
+	case R_LARCH_TLS_DESC_HI20:
+	  if (!loongarch_elf_record_tls_and_got_reference (abfd, info, h,
+							   r_symndx,
+							   GOT_TLS_GDESC))
+	    return false;
+	  break;
+
+	case R_LARCH_ABS_HI20:
+	case R_LARCH_SOP_PUSH_ABSOLUTE:
+	  if (h != NULL)
+	    /* If this reloc is in a read-only section, we might
+	       need a copy reloc.  We can't check reliably at this
+	       stage whether the section is read-only, as input
+	       sections have not yet been mapped to output sections.
+	       Tentatively set the flag for now, and correct in
+	       adjust_dynamic_symbol.  */
+	    h->non_got_ref = 1;
+	  break;
+
+	/* For normal cmodel, pcalau12i + addi.d/w used to data.
+	   For first version medium cmodel, pcalau12i + jirl are used to
+	   function call, it need to creat PLT entry for STT_FUNC and
+	   STT_GNU_IFUNC type symbol.  */
+	case R_LARCH_PCALA_HI20:
+	  if (h != NULL && (STT_FUNC == h->type || STT_GNU_IFUNC == h->type))
+	    {
+	      /* For pcalau12i + jirl.  */
+	      h->needs_plt = 1;
+	      if (h->plt.refcount < 0)
+		h->plt.refcount = 0;
+	      h->plt.refcount++;
+
+	      h->non_got_ref = 1;
+	      h->pointer_equality_needed = 1;
+	    }
+
+	  break;
+
+	case R_LARCH_B16:
+	case R_LARCH_B21:
+	case R_LARCH_B26:
+	case R_LARCH_CALL36:
+	  if (h != NULL)
+	    {
+	      h->needs_plt = 1;
+	      if (!bfd_link_pic (info))
+		h->non_got_ref = 1;
+
+	      /* We try to create PLT stub for all non-local function.  */
+	      if (h->plt.refcount < 0)
+		h->plt.refcount = 0;
+	      h->plt.refcount++;
+	    }
+
+	  break;
+
+	case R_LARCH_SOP_PUSH_PCREL:
+	  if (h != NULL)
+	    {
+	      if (!bfd_link_pic (info))
+		h->non_got_ref = 1;
+
+	      /* We try to create PLT stub for all non-local function.  */
+	      if (h->plt.refcount < 0)
+		h->plt.refcount = 0;
+	      h->plt.refcount++;
+	      h->pointer_equality_needed = 1;
+	    }
+
+	  break;
+
+	case R_LARCH_SOP_PUSH_PLT_PCREL:
+	  /* This symbol requires a procedure linkage table entry.  We
+	     actually build the entry in adjust_dynamic_symbol,
+	     because this might be a case of linking PIC code without
+	     linking in any dynamic objects, in which case we don't
+	     need to generate a procedure linkage table after all.  */
+	  if (h != NULL)
+	    {
+	      h->needs_plt = 1;
+	      if (h->plt.refcount < 0)
+		h->plt.refcount = 0;
+	      h->plt.refcount++;
+	    }
+	  break;
+
+	case R_LARCH_TLS_DTPREL32:
+	case R_LARCH_TLS_DTPREL64:
+	  need_dynreloc = 1;
+	  only_need_pcrel = 1;
+	  break;
+
+	case R_LARCH_JUMP_SLOT:
+	case R_LARCH_32:
+	case R_LARCH_64:
+
+	  need_dynreloc = 1;
+
+	  /* If resolved symbol is defined in this object,
+	     1. Under pie, the symbol is known.  We convert it
+	     into R_LARCH_RELATIVE and need load-addr still.
+	     2. Under pde, the symbol is known and we can discard R_LARCH_NN.
+	     3. Under dll, R_LARCH_NN can't be changed normally, since
+	     its defination could be covered by the one in executable.
+	     For symbolic, we convert it into R_LARCH_RELATIVE.
+	     Thus, only under pde, it needs pcrel only.  We discard it.  */
+	  only_need_pcrel = bfd_link_pde (info);
+
+	  if (h != NULL
+	      && (!bfd_link_pic (info)
+		  || h->type == STT_GNU_IFUNC))
+	    {
+	      /* This reloc might not bind locally.  */
+	      h->non_got_ref = 1;
+	      h->pointer_equality_needed = 1;
+
+	      if (!h->def_regular
+		  || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0)
+		{
+		  /* We may need a .plt entry if the symbol is a function
+		     defined in a shared lib or is a function referenced
+		     from the code or read-only section.  */
+		  h->plt.refcount += 1;
+		}
+	    }
+	  break;
+
+	case R_LARCH_GNU_VTINHERIT:
+	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
+	    return false;
+	  break;
+
+	case R_LARCH_GNU_VTENTRY:
+	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+	    return false;
+	  break;
+
+	default:
+	  break;
+	}
+
+      /* Record some info for sizing and allocating dynamic entry.  */
+      if (need_dynreloc && (sec->flags & SEC_ALLOC))
+	{
+	  /* When creating a shared object, we must copy these
+	     relocs into the output file.  We create a reloc
+	     section in dynobj and make room for the reloc.  */
+	  struct elf_dyn_relocs *p;
+	  struct elf_dyn_relocs **head;
+
+	  if (sreloc == NULL)
+	    {
+	      sreloc
+		= _bfd_elf_make_dynamic_reloc_section (sec, htab->elf.dynobj,
+						       LARCH_ELF_LOG_WORD_BYTES,
+						       abfd, /*rela?*/ true);
+	      if (sreloc == NULL)
+		return false;
+	    }
+
+	  /* If this is a global symbol, we count the number of
+	     relocations we need for this symbol.  */
+	  if (h != NULL)
+	    head = &h->dyn_relocs;
+	  else
+	    {
+	      /* Track dynamic relocs needed for local syms too.
+		 We really need local syms available to do this
+		 easily.  Oh well.  */
+
+	      asection *s;
+	      void *vpp;
+
+	      s = bfd_section_from_elf_index (abfd, isym->st_shndx);
+	      if (s == NULL)
+		s = sec;
+
+	      vpp = &elf_section_data (s)->local_dynrel;
+	      head = (struct elf_dyn_relocs **) vpp;
+	    }
+
+	  p = *head;
+	  if (p == NULL || p->sec != sec)
+	    {
+	      bfd_size_type amt = sizeof *p;
+	      p = (struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt);
+	      if (p == NULL)
+		return false;
+	      p->next = *head;
+	      *head = p;
+	      p->sec = sec;
+	      p->count = 0;
+	      p->pc_count = 0;
+	    }
+
+	  p->count++;
+	  p->pc_count += only_need_pcrel;
+	}
+    }
+
+  return true;
+}
+
+/* Find dynamic relocs for H that apply to read-only sections.  */
+
+static asection *
+readonly_dynrelocs (struct elf_link_hash_entry *h)
+{
+  struct elf_dyn_relocs *p;
+
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
+    {
+      asection *s = p->sec->output_section;
+
+      if (s != NULL && (s->flags & SEC_READONLY) != 0)
+	return p->sec;
+    }
+  return NULL;
+}
+
+/* Adjust a symbol defined by a dynamic object and referenced by a
+   regular object.  The current definition is in some section of the
+   dynamic object, but we're not including those sections.  We have to
+   change the definition to something the rest of the link can
+   understand.  */
+static bool
+loongarch_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
+				     struct elf_link_hash_entry *h)
+{
+  struct loongarch_elf_link_hash_table *htab;
+  bfd *dynobj;
+
+  htab = loongarch_elf_hash_table (info);
+  BFD_ASSERT (htab != NULL);
+
+  dynobj = htab->elf.dynobj;
+
+  /* Make sure we know what is going on here.  */
+  BFD_ASSERT (dynobj != NULL
+	      && (h->needs_plt
+		  || h->type == STT_GNU_IFUNC
+		  || h->is_weakalias
+		  || (h->def_dynamic
+		      && h->ref_regular
+		      && !h->def_regular)));
+
+  /* If this is a function, put it in the procedure linkage table.  We
+     will fill in the contents of the procedure linkage table later
+     (although we could actually do it here).  */
+  if (h->type == STT_FUNC || h->type == STT_GNU_IFUNC || h->needs_plt)
+    {
+      if (h->plt.refcount <= 0
+	  || (h->type != STT_GNU_IFUNC
+	      && (SYMBOL_REFERENCES_LOCAL (info, h)
+		  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+		      && h->root.type == bfd_link_hash_undefweak))))
+	{
+	  /* This case can occur if we saw a R_LARCH_SOP_PUSH_PLT_PCREL reloc
+	     in an input file, but the symbol was never referred to by a
+	     dynamic object, or if all references were garbage collected.
+	     In such a case, we don't actually need to build a PLT entry.  */
+	  h->plt.offset = MINUS_ONE;
+	  h->needs_plt = 0;
+	}
+
+      return true;
+    }
+  else
+    h->plt.offset = MINUS_ONE;
+
+  /* If this is a weak symbol, and there is a real definition, the
+     processor independent code will have arranged for us to see the
+     real definition first, and we can just use the same value.  */
+  if (h->is_weakalias)
+    {
+      struct elf_link_hash_entry *def = weakdef (h);
+      BFD_ASSERT (def->root.type == bfd_link_hash_defined);
+      h->root.u.def.section = def->root.u.def.section;
+      h->root.u.def.value = def->root.u.def.value;
+      return true;
+    }
+
+  /* R_LARCH_COPY is not adept glibc, not to generate.  */
+  /* Can not print anything, because make check ld.  */
+  return true;
+}
+
+/* Allocate space in .plt, .got and associated reloc sections for
+   dynamic relocs.  */
+
+static bool
+allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
+{
+  struct bfd_link_info *info;
+  struct loongarch_elf_link_hash_table *htab;
+  struct elf_dyn_relocs *p;
+
+  if (h->root.type == bfd_link_hash_indirect)
+    return true;
+
+  if (h->type == STT_GNU_IFUNC
+      && h->def_regular)
+    return true;
+
+  info = (struct bfd_link_info *) inf;
+  htab = loongarch_elf_hash_table (info);
+  bool dyn = htab->elf.dynamic_sections_created;
+  BFD_ASSERT (htab != NULL);
+
+  do
+    {
+      asection *plt, *gotplt, *relplt;
+
+      if (!h->needs_plt)
+	break;
+
+      h->needs_plt = 0;
+
+      if (htab->elf.splt)
+	{
+	  if (h->dynindx == -1 && !h->forced_local && dyn
+	      && h->root.type == bfd_link_hash_undefweak)
+	    {
+	      if (!bfd_elf_link_record_dynamic_symbol (info, h))
+		return false;
+	    }
+
+	  if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)
+	      && h->type != STT_GNU_IFUNC)
+	    break;
+
+	  plt = htab->elf.splt;
+	  gotplt = htab->elf.sgotplt;
+	  relplt = htab->elf.srelplt;
+	}
+      else if (htab->elf.iplt)
+	{
+	  /* .iplt only for IFUNC.  */
+	  if (h->type != STT_GNU_IFUNC)
+	    break;
+
+	  plt = htab->elf.iplt;
+	  gotplt = htab->elf.igotplt;
+	  relplt = htab->elf.irelplt;
+	}
+      else
+	break;
+
+      if (plt->size == 0)
+	plt->size = PLT_HEADER_SIZE;
+
+      h->plt.offset = plt->size;
+      plt->size += PLT_ENTRY_SIZE;
+      gotplt->size += GOT_ENTRY_SIZE;
+      relplt->size += sizeof (ElfNN_External_Rela);
+
+      /* If this symbol is not defined in a regular file, and we are
+	 not generating a shared library, then set the symbol to this
+	 location in the .plt.  This is required to make function
+	 pointers compare as equal between the normal executable and
+	 the shared library.  */
+      if (!bfd_link_pic (info)
+	  && !h->def_regular)
+	{
+	  h->root.u.def.section = plt;
+	  h->root.u.def.value = h->plt.offset;
+	}
+
+      h->needs_plt = 1;
+    }
+  while (0);
+
+  if (!h->needs_plt)
+    h->plt.offset = MINUS_ONE;
+
+  if (0 < h->got.refcount)
+    {
+      asection *s;
+      int tls_type = loongarch_elf_hash_entry (h)->tls_type;
+
+      /* Make sure this symbol is output as a dynamic symbol.
+	 Undefined weak syms won't yet be marked as dynamic.  */
+      if (h->dynindx == -1 && !h->forced_local && dyn
+	  && h->root.type == bfd_link_hash_undefweak)
+	{
+	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
+	    return false;
+	}
+
+      s = htab->elf.sgot;
+      h->got.offset = s->size;
+      if (tls_type & (GOT_TLS_GD | GOT_TLS_IE | GOT_TLS_GDESC))
+	{
+	  /* TLS_GD needs two dynamic relocs and two GOT slots.  */
+	  if (tls_type & GOT_TLS_GD)
+	    {
+	      s->size += 2 * GOT_ENTRY_SIZE;
+	      if (bfd_link_executable (info))
+		{
+		  /* Link exe and not defined local.  */
+		  if (!SYMBOL_REFERENCES_LOCAL (info, h))
+		    htab->elf.srelgot->size += 2 * sizeof (ElfNN_External_Rela);
+		}
+	      else
+		{
+		  if (SYMBOL_REFERENCES_LOCAL (info, h))
+		    htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
+		  else
+		    htab->elf.srelgot->size += 2 * sizeof (ElfNN_External_Rela);
+		}
+	    }
+
+	  /* TLS_IE needs one dynamic reloc and one GOT slot.  */
+	  if (tls_type & GOT_TLS_IE)
+	    {
+	      s->size += GOT_ENTRY_SIZE;
+
+	      if (bfd_link_executable (info))
+		{
+		  /* Link exe and not defined local.  */
+		  if (!SYMBOL_REFERENCES_LOCAL (info, h))
+		    htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
+		}
+	      else
+		{
+		  htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
+		}
+	    }
+
+	  /* TLS_DESC needs one dynamic reloc and two GOT slot.  */
+	  if (tls_type & GOT_TLS_GDESC)
+	    {
+	      s->size += GOT_ENTRY_SIZE * 2;
+	      htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
+	    }
+	}
+
+      else
+	{
+	  s->size += GOT_ENTRY_SIZE;
+	  if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+	       || h->root.type != bfd_link_hash_undefweak)
+	      && (bfd_link_pic (info)
+		  || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info),
+						      h))
+	      && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+	      /* Undefined weak symbol in static PIE resolves to 0 without
+		 any dynamic relocations.  */
+	    htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
+	}
+    }
+  else
+    h->got.offset = MINUS_ONE;
+
+  if (h->dyn_relocs == NULL)
+    return true;
+
+  /* Extra dynamic relocate,
+   * R_LARCH_64
+   * R_LARCH_TLS_DTPRELNN
+   * R_LARCH_JUMP_SLOT
+   * R_LARCH_NN.  */
+
+  if (SYMBOL_CALLS_LOCAL (info, h))
+    {
+      struct elf_dyn_relocs **pp;
+
+      for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
+	{
+	  p->count -= p->pc_count;
+	  p->pc_count = 0;
+	  if (p->count == 0)
+	    *pp = p->next;
+	  else
+	    pp = &p->next;
+	}
+    }
+
+  if (h->root.type == bfd_link_hash_undefweak)
+    {
+      if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)
+	  || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+	  || (!bfd_link_pic (info) && h->non_got_ref))
+	h->dyn_relocs = NULL;
+      else if (h->dynindx == -1 && !h->forced_local)
+	{
+	  /* Make sure this symbol is output as a dynamic symbol.
+	     Undefined weak syms won't yet be marked as dynamic.  */
+	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
+	    return false;
+
+	  if (h->dynindx == -1)
+	    h->dyn_relocs = NULL;
+	}
+    }
+
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
+    {
+      asection *sreloc = elf_section_data (p->sec)->sreloc;
+      sreloc->size += p->count * sizeof (ElfNN_External_Rela);
+    }
+
+  return true;
+}
+
+/* A modified version of _bfd_elf_allocate_ifunc_dyn_relocs.
+   For local def and ref ifunc,
+   dynamic relocations are stored in
+   1.  rela.srelgot section in dynamic object (dll or exec).
+   2.  rela.irelplt section in static executable.
+   Unlike _bfd_elf_allocate_ifunc_dyn_relocs, rela.srelgot is used
+   instead of rela.srelplt.  Glibc ELF loader will not support
+   R_LARCH_IRELATIVE relocation in rela.plt.  */
+
+static bool
+local_allocate_ifunc_dyn_relocs (struct bfd_link_info *info,
+				    struct elf_link_hash_entry *h,
+				    struct elf_dyn_relocs **head,
+				    unsigned int plt_entry_size,
+				    unsigned int plt_header_size,
+				    unsigned int got_entry_size,
+				    bool avoid_plt)
+{
+  asection *plt, *gotplt, *relplt;
+  struct elf_dyn_relocs *p;
+  unsigned int sizeof_reloc;
+  const struct elf_backend_data *bed;
+  struct elf_link_hash_table *htab;
+  /* If AVOID_PLT is TRUE, don't use PLT if possible.  */
+  bool use_plt = !avoid_plt || h->plt.refcount > 0;
+  bool need_dynreloc = !use_plt || bfd_link_pic (info);
+
+  /* When a PIC object references a STT_GNU_IFUNC symbol defined
+     in executable or it isn't referenced via PLT, the address of
+     the resolved function may be used.  But in non-PIC executable,
+     the address of its plt slot may be used.  Pointer equality may
+     not work correctly.  PIE or non-PLT reference should be used if
+     pointer equality is required here.
+
+     If STT_GNU_IFUNC symbol is defined in position-dependent executable,
+     backend should change it to the normal function and set its address
+     to its PLT entry which should be resolved by R_*_IRELATIVE at
+     run-time.  All external references should be resolved to its PLT in
+     executable.  */
+  if (!need_dynreloc
+      && !(bfd_link_pde (info) && h->def_regular)
+      && (h->dynindx != -1
+	  || info->export_dynamic)
+      && h->pointer_equality_needed)
+    {
+      info->callbacks->einfo
+	/* xgettext:c-format.  */
+	(_("%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer "
+	   "equality in `%pB' can not be used when making an "
+	   "executable; recompile with -fPIE and relink with -pie\n"),
+	 h->root.root.string,
+	 h->root.u.def.section->owner);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+
+  htab = elf_hash_table (info);
+
+  /* When the symbol is marked with regular reference, if PLT isn't used
+     or we are building a PIC object, we must keep dynamic relocation
+     if there is non-GOT reference and use PLT if there is PC-relative
+     reference.  */
+  if (need_dynreloc && h->ref_regular)
+    {
+      bool keep = false;
+      for (p = *head; p != NULL; p = p->next)
+	if (p->count)
+	  {
+	    h->non_got_ref = 1;
+	    /* Need dynamic relocations for non-GOT reference.  */
+	    keep = true;
+	    if (p->pc_count)
+	      {
+		/* Must use PLT for PC-relative reference.  */
+		use_plt = true;
+		need_dynreloc = bfd_link_pic (info);
+		break;
+	      }
+	  }
+      if (keep)
+	goto keep;
+    }
+
+  /* Support garbage collection against STT_GNU_IFUNC symbols.  */
+  if (h->plt.refcount <= 0 && h->got.refcount <= 0)
+    {
+      h->got = htab->init_got_offset;
+      h->plt = htab->init_plt_offset;
+      *head = NULL;
+      return true;
+    }
+
+  /* Return and discard space for dynamic relocations against it if
+     it is never referenced.  */
+  if (!h->ref_regular)
+    {
+      if (h->plt.refcount > 0
+	  || h->got.refcount > 0)
+	abort ();
+      h->got = htab->init_got_offset;
+      h->plt = htab->init_plt_offset;
+      *head = NULL;
+      return true;
+    }
+
+ keep:
+  bed = get_elf_backend_data (info->output_bfd);
+  if (bed->rela_plts_and_copies_p)
+    sizeof_reloc = bed->s->sizeof_rela;
+  else
+    sizeof_reloc = bed->s->sizeof_rel;
+
+  /* When building a static executable, use iplt, igot.plt and
+     rela.iplt sections for STT_GNU_IFUNC symbols.  */
+  if (htab->splt != NULL)
+    {
+      plt = htab->splt;
+      gotplt = htab->sgotplt;
+      /* Change dynamic info of ifunc gotplt from srelplt to srelgot.  */
+      relplt = htab->srelgot;
+
+      /* If this is the first plt entry and PLT is used, make room for
+	 the special first entry.  */
+      if (plt->size == 0 && use_plt)
+	plt->size += plt_header_size;
+    }
+  else
+    {
+      plt = htab->iplt;
+      gotplt = htab->igotplt;
+      relplt = htab->irelplt;
+    }
+
+  if (use_plt)
+    {
+      /* Don't update value of STT_GNU_IFUNC symbol to PLT.  We need
+	 the original value for R_*_IRELATIVE.  */
+      h->plt.offset = plt->size;
+
+      /* Make room for this entry in the plt/iplt section.  */
+      plt->size += plt_entry_size;
+
+      /* We also need to make an entry in the got.plt/got.iplt section,
+	 which will be placed in the got section by the linker script.  */
+      gotplt->size += got_entry_size;
+    }
+
+  /* We also need to make an entry in the rela.plt/.rela.iplt
+     section for GOTPLT relocation if PLT is used.  */
+  if (use_plt)
+    {
+      relplt->size += sizeof_reloc;
+      relplt->reloc_count++;
+    }
+
+  /* We need dynamic relocation for STT_GNU_IFUNC symbol only when
+     there is a non-GOT reference in a PIC object or PLT isn't used.  */
+  if (!need_dynreloc || !h->non_got_ref)
+    *head = NULL;
+
+  /* Finally, allocate space.  */
+  p = *head;
+  if (p != NULL)
+    {
+      bfd_size_type count = 0;
+      do
+	{
+	  count += p->count;
+	  p = p->next;
+	}
+      while (p != NULL);
+
+      htab->ifunc_resolvers = count != 0;
+
+      /* Dynamic relocations are stored in
+	 1.  rela.srelgot section in PIC object.
+	 2.  rela.srelgot section in dynamic executable.
+	 3.  rela.irelplt section in static executable.  */
+      if (htab->splt != NULL)
+	htab->srelgot->size += count * sizeof_reloc;
+      else
+	{
+	  relplt->size += count * sizeof_reloc;
+	  relplt->reloc_count += count;
+	}
+    }
+
+  /* For STT_GNU_IFUNC symbol, got.plt has the real function address
+     and got has the PLT entry adddress.  We will load the GOT entry
+     with the PLT entry in finish_dynamic_symbol if it is used.  For
+     branch, it uses got.plt.  For symbol value, if PLT is used,
+     1.  Use got.plt in a PIC object if it is forced local or not
+     dynamic.
+     2.  Use got.plt in a non-PIC object if pointer equality isn't
+     needed.
+     3.  Use got.plt in PIE.
+     4.  Use got.plt if got isn't used.
+     5.  Otherwise use got so that it can be shared among different
+     objects at run-time.
+     If PLT isn't used, always use got for symbol value.
+     We only need to relocate got entry in PIC object or in dynamic
+     executable without PLT.  */
+  if (use_plt
+      && (h->got.refcount <= 0
+	  || (bfd_link_pic (info)
+	      && (h->dynindx == -1
+		  || h->forced_local))
+	  || (
+	      !h->pointer_equality_needed)
+	  || htab->sgot == NULL))
+    {
+      /* Use got.plt.  */
+      h->got.offset = (bfd_vma) -1;
+    }
+  else
+    {
+      if (!use_plt)
+	{
+	  /* PLT isn't used.  */
+	  h->plt.offset = (bfd_vma) -1;
+	}
+      if (h->got.refcount <= 0)
+	{
+	  /* GOT isn't need when there are only relocations for static
+	     pointers.  */
+	  h->got.offset = (bfd_vma) -1;
+	}
+      else
+	{
+	  h->got.offset = htab->sgot->size;
+	  htab->sgot->size += got_entry_size;
+	  /* Need to relocate the GOT entry in a PIC object or PLT isn't
+	     used.  Otherwise, the GOT entry will be filled with the PLT
+	     entry and dynamic GOT relocation isn't needed.  */
+	  if (need_dynreloc)
+	    {
+	      /* For non-static executable, dynamic GOT relocation is in
+		 rela.got section, but for static executable, it is
+		 in rela.iplt section.  */
+	      if (htab->splt != NULL)
+		htab->srelgot->size += sizeof_reloc;
+	      else
+		{
+		  relplt->size += sizeof_reloc;
+		  relplt->reloc_count++;
+		}
+	    }
+	}
+    }
+
+  return true;
+}
+
+/* Allocate space in .plt, .got and associated reloc sections for
+   ifunc dynamic relocs.  */
+
+static bool
+elfNN_allocate_ifunc_dynrelocs (struct elf_link_hash_entry *h, void *inf)
+{
+  struct bfd_link_info *info;
+  /* An example of a bfd_link_hash_indirect symbol is versioned
+     symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
+     -> __gxx_personality_v0(bfd_link_hash_defined)
+
+     There is no need to process bfd_link_hash_indirect symbols here
+     because we will also be presented with the concrete instance of
+     the symbol and loongarch_elf_copy_indirect_symbol () will have been
+     called to copy all relevant data from the generic to the concrete
+     symbol instance.  */
+  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;
+
+  info = (struct bfd_link_info *) inf;
+
+  /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
+     here if it is defined and referenced in a non-shared object.  */
+  if (h->type == STT_GNU_IFUNC && h->def_regular)
+    {
+      if (SYMBOL_REFERENCES_LOCAL (info, h))
+	return local_allocate_ifunc_dyn_relocs (info, h,
+						&h->dyn_relocs,
+						PLT_ENTRY_SIZE,
+						PLT_HEADER_SIZE,
+						GOT_ENTRY_SIZE,
+						false);
+      else
+	return _bfd_elf_allocate_ifunc_dyn_relocs (info, h,
+						   &h->dyn_relocs,
+						   PLT_ENTRY_SIZE,
+						   PLT_HEADER_SIZE,
+						   GOT_ENTRY_SIZE,
+						   false);
+    }
+
+  return true;
+}
+
+/* Allocate space in .plt, .got and associated reloc sections for
+   ifunc dynamic relocs.  */
+
+static int
+elfNN_allocate_local_ifunc_dynrelocs (void **slot, void *inf)
+{
+  struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) *slot;
+
+  if (h->type != STT_GNU_IFUNC
+      || !h->def_regular
+      || !h->ref_regular
+      || !h->forced_local
+      || h->root.type != bfd_link_hash_defined)
+    abort ();
+
+  return elfNN_allocate_ifunc_dynrelocs (h, inf);
+}
+
+/* Set DF_TEXTREL if we find any dynamic relocs that apply to
+   read-only sections.  */
+
+static bool
+maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
+{
+  asection *sec;
+
+  if (h->root.type == bfd_link_hash_indirect)
+    return true;
+
+  sec = readonly_dynrelocs (h);
+  if (sec != NULL)
+    {
+      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
+
+      info->flags |= DF_TEXTREL;
+      info->callbacks->minfo (_("%pB: dynamic relocation against `%pT' in "
+				"read-only section `%pA'\n"),
+			      sec->owner, h->root.root.string, sec);
+
+      /* Not an error, just cut short the traversal.  */
+      return false;
+    }
+  return true;
+}
+
+static bool
+loongarch_elf_size_dynamic_sections (bfd *output_bfd,
+				     struct bfd_link_info *info)
+{
+  struct loongarch_elf_link_hash_table *htab;
+  bfd *dynobj;
+  asection *s;
+  bfd *ibfd;
+
+  htab = loongarch_elf_hash_table (info);
+  BFD_ASSERT (htab != NULL);
+  dynobj = htab->elf.dynobj;
+  BFD_ASSERT (dynobj != NULL);
+
+  if (htab->elf.dynamic_sections_created)
+    {
+      /* Set the contents of the .interp section to the interpreter.  */
+      if (bfd_link_executable (info) && !info->nointerp)
+	{
+	  const char *interpreter;
+	  s = bfd_get_linker_section (dynobj, ".interp");
+	  BFD_ASSERT (s != NULL);
+
+	  if (elf_elfheader (output_bfd)->e_ident[EI_CLASS] == ELFCLASS32)
+	    interpreter = "/lib32/ld.so.1";
+	  else if (elf_elfheader (output_bfd)->e_ident[EI_CLASS] == ELFCLASS64)
+	    interpreter = "/lib64/ld.so.1";
+	  else
+	    interpreter = "/lib/ld.so.1";
+
+	  s->contents = (unsigned char *) interpreter;
+	  s->size = strlen (interpreter) + 1;
+	}
+    }
+
+  /* Set up .got offsets for local syms, and space for local dynamic
+     relocs.  */
+  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
+    {
+      bfd_signed_vma *local_got;
+      bfd_signed_vma *end_local_got;
+      char *local_tls_type;
+      bfd_size_type locsymcount;
+      Elf_Internal_Shdr *symtab_hdr;
+      asection *srel;
+
+      if (!is_loongarch_elf (ibfd))
+	continue;
+
+      for (s = ibfd->sections; s != NULL; s = s->next)
+	{
+	  struct elf_dyn_relocs *p;
+
+	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
+	    {
+	      p->count -= p->pc_count;
+	      if (!bfd_is_abs_section (p->sec)
+		  && bfd_is_abs_section (p->sec->output_section))
+		{
+		  /* Input section has been discarded, either because
+		     it is a copy of a linkonce section or due to
+		     linker script /DISCARD/, so we'll be discarding
+		     the relocs too.  */
+		}
+	      else if (0 < p->count)
+		{
+		  srel = elf_section_data (p->sec)->sreloc;
+		  srel->size += p->count * sizeof (ElfNN_External_Rela);
+		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
+		    info->flags |= DF_TEXTREL;
+		}
+	    }
+	}
+
+      local_got = elf_local_got_refcounts (ibfd);
+      if (!local_got)
+	continue;
+
+      symtab_hdr = &elf_symtab_hdr (ibfd);
+      locsymcount = symtab_hdr->sh_info;
+      end_local_got = local_got + locsymcount;
+      local_tls_type = _bfd_loongarch_elf_local_got_tls_type (ibfd);
+      s = htab->elf.sgot;
+      srel = htab->elf.srelgot;
+      for (; local_got < end_local_got; ++local_got, ++local_tls_type)
+	{
+	  if (0 < *local_got)
+	    {
+	      *local_got = s->size;
+	      if (*local_tls_type & (GOT_TLS_GD | GOT_TLS_IE | GOT_TLS_GDESC))
+		{
+		  /* TLS gd use two got.  */
+		  if (*local_tls_type & GOT_TLS_GD)
+		    {
+		      s->size += 2 * GOT_ENTRY_SIZE;
+		      if (!bfd_link_executable (info))
+			srel->size += sizeof (ElfNN_External_Rela);
+		    }
+
+		  /* TLS_DESC use two got.  */
+		  if (*local_tls_type & GOT_TLS_GDESC)
+		    {
+		      s->size += 2 * GOT_ENTRY_SIZE;
+		      srel->size += sizeof (ElfNN_External_Rela);
+		    }
+
+		  /* TLS ie and use one got.  */
+		  if (*local_tls_type & GOT_TLS_IE)
+		    {
+		      s->size += GOT_ENTRY_SIZE;
+		      if (!bfd_link_executable (info))
+			srel->size += sizeof (ElfNN_External_Rela);
+		    }
+		}
+	      else
+		{
+		  s->size += GOT_ENTRY_SIZE;
+		  srel->size += sizeof (ElfNN_External_Rela);
+		}
+	    }
+	  else
+	    *local_got = MINUS_ONE;
+	}
+    }
+
+  /* Allocate global sym .plt and .got entries, and space for global
+     sym dynamic relocs.  */
+  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
+
+  /* Allocate global ifunc sym .plt and .got entries, and space for global
+     ifunc sym dynamic relocs.  */
+  elf_link_hash_traverse (&htab->elf, elfNN_allocate_ifunc_dynrelocs, info);
+
+  /* Allocate .plt and .got entries, and space for local ifunc symbols.  */
+  htab_traverse (htab->loc_hash_table,
+		 elfNN_allocate_local_ifunc_dynrelocs, info);
+
+  /* Don't allocate .got.plt section if there are no PLT.  */
+  if (htab->elf.sgotplt && htab->elf.sgotplt->size == GOTPLT_HEADER_SIZE
+      && (htab->elf.splt == NULL || htab->elf.splt->size == 0))
+    htab->elf.sgotplt->size = 0;
+
+  /* The check_relocs and adjust_dynamic_symbol entry points have
+     determined the sizes of the various dynamic sections.  Allocate
+     memory for them.  */
+  for (s = dynobj->sections; s != NULL; s = s->next)
+    {
+      if ((s->flags & SEC_LINKER_CREATED) == 0)
+	continue;
+
+      if (s == htab->elf.splt || s == htab->elf.iplt || s == htab->elf.sgot
+	  || s == htab->elf.sgotplt || s == htab->elf.igotplt
+	  || s == htab->elf.sdynbss || s == htab->elf.sdynrelro)
+	{
+	  /* Strip this section if we don't need it; see the
+	     comment below.  */
+	}
+      else if (strncmp (s->name, ".rela", 5) == 0)
+	{
+	  if (s->size != 0)
+	    {
+	      /* We use the reloc_count field as a counter if we need
+		 to copy relocs into the output file.  */
+	      s->reloc_count = 0;
+	    }
+	}
+      else
+	{
+	  /* It's not one of our sections.  */
+	  continue;
+	}
+
+      if (s->size == 0)
+	{
+	  /* If we don't need this section, strip it from the
+	     output file.  This is mostly to handle .rela.bss and
+	     .rela.plt.  We must create both sections in
+	     create_dynamic_sections, because they must be created
+	     before the linker maps input sections to output
+	     sections.  The linker does that before
+	     adjust_dynamic_symbol is called, and it is that
+	     function which decides whether anything needs to go
+	     into these sections.  */
+	  s->flags |= SEC_EXCLUDE;
+	  continue;
+	}
+
+      if ((s->flags & SEC_HAS_CONTENTS) == 0)
+	continue;
+
+      /* Allocate memory for the section contents.  Zero the memory
+	 for the benefit of .rela.plt, which has 4 unused entries
+	 at the beginning, and we don't want garbage.  */
+      s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
+      if (s->contents == NULL)
+	return false;
+    }
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      /* Add some entries to the .dynamic section.  We fill in the
+	 values later, in loongarch_elf_finish_dynamic_sections, but we
+	 must add the entries now so that we get the correct size for
+	 the .dynamic section.  The DT_DEBUG entry is filled in by the
+	 dynamic linker and used by the debugger.  */
+#define add_dynamic_entry(TAG, VAL) _bfd_elf_add_dynamic_entry (info, TAG, VAL)
+
+      if (bfd_link_executable (info))
+	{
+	  if (!add_dynamic_entry (DT_DEBUG, 0))
+	    return false;
+	}
+
+      if (htab->elf.srelplt->size != 0)
+	{
+	  if (!add_dynamic_entry (DT_PLTGOT, 0)
+	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
+	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
+	      || !add_dynamic_entry (DT_JMPREL, 0))
+	    return false;
+	}
+
+      if (!add_dynamic_entry (DT_RELA, 0)
+	  || !add_dynamic_entry (DT_RELASZ, 0)
+	  || !add_dynamic_entry (DT_RELAENT, sizeof (ElfNN_External_Rela)))
+	return false;
+
+      /* If any dynamic relocs apply to a read-only section,
+	 then we need a DT_TEXTREL entry.  */
+      if ((info->flags & DF_TEXTREL) == 0)
+	elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
+
+      if (info->flags & DF_TEXTREL)
+	{
+	  if (!add_dynamic_entry (DT_TEXTREL, 0))
+	    return false;
+	  /* Clear the DF_TEXTREL flag.  It will be set again if we
+	     write out an actual text relocation; we may not, because
+	     at this point we do not know whether e.g.  any .eh_frame
+	     absolute relocations have been converted to PC-relative.  */
+	  info->flags &= ~DF_TEXTREL;
+	}
+    }
+#undef add_dynamic_entry
+
+  return true;
+}
+
+#define LARCH_LD_STACK_DEPTH 16
+static int64_t larch_opc_stack[LARCH_LD_STACK_DEPTH];
+static size_t larch_stack_top = 0;
+
+static bfd_reloc_status_type
+loongarch_push (int64_t val)
+{
+  if (LARCH_LD_STACK_DEPTH <= larch_stack_top)
+    return bfd_reloc_outofrange;
+  larch_opc_stack[larch_stack_top++] = val;
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+loongarch_pop (int64_t *val)
+{
+  if (larch_stack_top == 0)
+    return bfd_reloc_outofrange;
+  BFD_ASSERT (val);
+  *val = larch_opc_stack[--larch_stack_top];
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+loongarch_top (int64_t *val)
+{
+  if (larch_stack_top == 0)
+    return bfd_reloc_outofrange;
+  BFD_ASSERT (val);
+  *val = larch_opc_stack[larch_stack_top - 1];
+  return bfd_reloc_ok;
+}
+
+static void
+loongarch_elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
+{
+  BFD_ASSERT (s && s->contents);
+  const struct elf_backend_data *bed;
+  bfd_byte *loc;
+
+  bed = get_elf_backend_data (abfd);
+  if (!(s->size > s->reloc_count * bed->s->sizeof_rela))
+    BFD_ASSERT (s->size > s->reloc_count * bed->s->sizeof_rela);
+  loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
+  bed->s->swap_reloca_out (abfd, rel, loc);
+}
+
+/* Check rel->r_offset in range of contents.  */
+static bfd_reloc_status_type
+loongarch_check_offset (const Elf_Internal_Rela *rel,
+			const asection *input_section)
+{
+  if (0 == strcmp(input_section->name, ".text")
+      && rel->r_offset > input_section->size)
+    return bfd_reloc_overflow;
+
+  return bfd_reloc_ok;
+}
+
+#define LARCH_RELOC_PERFORM_3OP(op1, op2, op3)	      \
+  ({						      \
+    bfd_reloc_status_type ret = loongarch_pop (&op2); \
+    if (ret == bfd_reloc_ok)			      \
+      {						      \
+	ret = loongarch_pop (&op1);		      \
+	if (ret == bfd_reloc_ok)		      \
+	  ret = loongarch_push (op3);		      \
+      }						      \
+    ret;					      \
+   })
+
+/* Write immediate to instructions.  */
+
+static bfd_reloc_status_type
+loongarch_reloc_rewrite_imm_insn (const Elf_Internal_Rela *rel,
+				  const asection *input_section ATTRIBUTE_UNUSED,
+				  reloc_howto_type *howto, bfd *input_bfd,
+				  bfd_byte *contents, bfd_vma reloc_val)
+{
+  /* Adjust the immediate based on alignment and
+     its position in the instruction.  */
+  if (!loongarch_adjust_reloc_bitsfield (input_bfd, howto, &reloc_val))
+    return bfd_reloc_overflow;
+
+  int bits = bfd_get_reloc_size (howto) * 8;
+  uint64_t insn = bfd_get (bits, input_bfd, contents + rel->r_offset);
+
+  /* Write immediate to instruction.  */
+  insn = (insn & ~howto->dst_mask) | (reloc_val & howto->dst_mask);
+
+  bfd_put (bits, input_bfd, insn, contents + rel->r_offset);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+perform_relocation (const Elf_Internal_Rela *rel, asection *input_section,
+		    reloc_howto_type *howto, bfd_vma value,
+		    bfd *input_bfd, bfd_byte *contents)
+{
+  int64_t opr1, opr2, opr3;
+  bfd_reloc_status_type r = bfd_reloc_ok;
+  int bits = bfd_get_reloc_size (howto) * 8;
+
+  switch (ELFNN_R_TYPE (rel->r_info))
+    {
+    case R_LARCH_SOP_PUSH_PCREL:
+    case R_LARCH_SOP_PUSH_ABSOLUTE:
+    case R_LARCH_SOP_PUSH_GPREL:
+    case R_LARCH_SOP_PUSH_TLS_TPREL:
+    case R_LARCH_SOP_PUSH_TLS_GOT:
+    case R_LARCH_SOP_PUSH_TLS_GD:
+    case R_LARCH_SOP_PUSH_PLT_PCREL:
+      r = loongarch_push (value);
+      break;
+
+    case R_LARCH_SOP_PUSH_DUP:
+      r = loongarch_pop (&opr1);
+      if (r == bfd_reloc_ok)
+	{
+	  r = loongarch_push (opr1);
+	  if (r == bfd_reloc_ok)
+	    r = loongarch_push (opr1);
+	}
+      break;
+
+    case R_LARCH_SOP_ASSERT:
+      r = loongarch_pop (&opr1);
+      if (r != bfd_reloc_ok || !opr1)
+	r = bfd_reloc_notsupported;
+      break;
+
+    case R_LARCH_SOP_NOT:
+      r = loongarch_pop (&opr1);
+      if (r == bfd_reloc_ok)
+	r = loongarch_push (!opr1);
+      break;
+
+    case R_LARCH_SOP_SUB:
+      r = LARCH_RELOC_PERFORM_3OP (opr1, opr2, opr1 - opr2);
+      break;
+
+    case R_LARCH_SOP_SL:
+      r = LARCH_RELOC_PERFORM_3OP (opr1, opr2, opr1 << opr2);
+      break;
+
+    case R_LARCH_SOP_SR:
+      r = LARCH_RELOC_PERFORM_3OP (opr1, opr2, opr1 >> opr2);
+      break;
+
+    case R_LARCH_SOP_AND:
+      r = LARCH_RELOC_PERFORM_3OP (opr1, opr2, opr1 & opr2);
+      break;
+
+    case R_LARCH_SOP_ADD:
+      r = LARCH_RELOC_PERFORM_3OP (opr1, opr2, opr1 + opr2);
+      break;
+
+    case R_LARCH_SOP_IF_ELSE:
+      r = loongarch_pop (&opr3);
+      if (r == bfd_reloc_ok)
+	{
+	  r = loongarch_pop (&opr2);
+	  if (r == bfd_reloc_ok)
+	    {
+	      r = loongarch_pop (&opr1);
+	      if (r == bfd_reloc_ok)
+		r = loongarch_push (opr1 ? opr2 : opr3);
+	    }
+	}
+      break;
+
+    case R_LARCH_SOP_POP_32_S_10_5:
+    case R_LARCH_SOP_POP_32_S_10_12:
+    case R_LARCH_SOP_POP_32_S_10_16:
+    case R_LARCH_SOP_POP_32_S_10_16_S2:
+    case R_LARCH_SOP_POP_32_S_0_5_10_16_S2:
+    case R_LARCH_SOP_POP_32_S_0_10_10_16_S2:
+    case R_LARCH_SOP_POP_32_S_5_20:
+    case R_LARCH_SOP_POP_32_U_10_12:
+    case R_LARCH_SOP_POP_32_U:
+      r = loongarch_pop (&opr1);
+      if (r != bfd_reloc_ok)
+	break;
+      r = loongarch_check_offset (rel, input_section);
+      if (r != bfd_reloc_ok)
+	break;
+
+      r = loongarch_reloc_rewrite_imm_insn (rel, input_section,
+					    howto, input_bfd,
+					    contents, (bfd_vma)opr1);
+      break;
+
+    case R_LARCH_TLS_DTPREL32:
+    case R_LARCH_32:
+    case R_LARCH_TLS_DTPREL64:
+    case R_LARCH_64:
+      r = loongarch_check_offset (rel, input_section);
+      if (r != bfd_reloc_ok)
+	break;
+
+      bfd_put (bits, input_bfd, value, contents + rel->r_offset);
+      break;
+
+    /* LoongArch only has add/sub reloc pair, not has set/sub reloc pair.
+       Because set/sub reloc pair not support multi-thread. While add/sub
+       reloc pair process order not affect the final result.
+
+       For add/sub reloc, the original value will be involved in the
+       calculation. In order not to add/sub extra value, we write 0 to symbol
+       address at assembly time.
+
+       add/sub reloc bits determined by the value after symbol subtraction,
+       not symbol value.
+
+       add/sub reloc save part of the symbol value, so we only need to
+       save howto->dst_mask bits.  */
+    case R_LARCH_ADD6:
+    case R_LARCH_SUB6:
+      {
+	bfd_vma word = bfd_get (howto->bitsize, input_bfd,
+				contents + rel->r_offset);
+	word = (word & ~howto->dst_mask) | (value & howto->dst_mask);
+	bfd_put (howto->bitsize, input_bfd, word, contents + rel->r_offset);
+	r = bfd_reloc_ok;
+	break;
+      }
+
+    /* Not need to read the original value, just write the new value.  */
+    case R_LARCH_ADD8:
+    case R_LARCH_ADD16:
+    case R_LARCH_ADD24:
+    case R_LARCH_ADD32:
+    case R_LARCH_ADD64:
+    case R_LARCH_SUB8:
+    case R_LARCH_SUB16:
+    case R_LARCH_SUB24:
+    case R_LARCH_SUB32:
+    case R_LARCH_SUB64:
+      {
+	/* Because add/sub reloc is processed separately,
+	   so the high bits is invalid.  */
+	bfd_vma word = value & howto->dst_mask;
+	bfd_put (howto->bitsize, input_bfd, word, contents + rel->r_offset);
+	r = bfd_reloc_ok;
+	break;
+      }
+
+    case R_LARCH_ADD_ULEB128:
+    case R_LARCH_SUB_ULEB128:
+      {
+	unsigned int len = 0;
+	/* Before write uleb128, first read it to get it's length.  */
+	_bfd_read_unsigned_leb128 (input_bfd, contents + rel->r_offset, &len);
+	loongarch_write_unsigned_leb128 (contents + rel->r_offset, len, value);
+	r = bfd_reloc_ok;
+	break;
+      }
+
+    /* For eh_frame and debug info.  */
+    case R_LARCH_32_PCREL:
+    case R_LARCH_64_PCREL:
+      {
+	value -= sec_addr (input_section) + rel->r_offset;
+	value += rel->r_addend;
+	bfd_vma word = bfd_get (howto->bitsize, input_bfd,
+				contents + rel->r_offset);
+	word = (word & ~howto->dst_mask) | (value & howto->dst_mask);
+	bfd_put (howto->bitsize, input_bfd, word, contents + rel->r_offset);
+	r = bfd_reloc_ok;
+	break;
+      }
+
+    /* New reloc type.
+       R_LARCH_B16 ~ R_LARCH_TLS_GD_HI20.  */
+    case R_LARCH_B16:
+    case R_LARCH_B21:
+    case R_LARCH_B26:
+    case R_LARCH_ABS_HI20:
+    case R_LARCH_ABS_LO12:
+    case R_LARCH_ABS64_LO20:
+    case R_LARCH_ABS64_HI12:
+    case R_LARCH_PCALA_HI20:
+    case R_LARCH_PCALA_LO12:
+    case R_LARCH_PCALA64_LO20:
+    case R_LARCH_PCALA64_HI12:
+    case R_LARCH_GOT_PC_HI20:
+    case R_LARCH_GOT_PC_LO12:
+    case R_LARCH_GOT64_PC_LO20:
+    case R_LARCH_GOT64_PC_HI12:
+    case R_LARCH_GOT_HI20:
+    case R_LARCH_GOT_LO12:
+    case R_LARCH_GOT64_LO20:
+    case R_LARCH_GOT64_HI12:
+    case R_LARCH_TLS_LE_HI20:
+    case R_LARCH_TLS_LE_LO12:
+    case R_LARCH_TLS_LE_HI20_R:
+    case R_LARCH_TLS_LE_LO12_R:
+    case R_LARCH_TLS_LE64_LO20:
+    case R_LARCH_TLS_LE64_HI12:
+    case R_LARCH_TLS_IE_PC_HI20:
+    case R_LARCH_TLS_IE_PC_LO12:
+    case R_LARCH_TLS_IE64_PC_LO20:
+    case R_LARCH_TLS_IE64_PC_HI12:
+    case R_LARCH_TLS_IE_HI20:
+    case R_LARCH_TLS_IE_LO12:
+    case R_LARCH_TLS_IE64_LO20:
+    case R_LARCH_TLS_IE64_HI12:
+    case R_LARCH_TLS_LD_PC_HI20:
+    case R_LARCH_TLS_LD_HI20:
+    case R_LARCH_TLS_GD_PC_HI20:
+    case R_LARCH_TLS_GD_HI20:
+    case R_LARCH_PCREL20_S2:
+    case R_LARCH_CALL36:
+    case R_LARCH_TLS_DESC_PC_HI20:
+    case R_LARCH_TLS_DESC_PC_LO12:
+    case R_LARCH_TLS_DESC64_PC_LO20:
+    case R_LARCH_TLS_DESC64_PC_HI12:
+    case R_LARCH_TLS_DESC_HI20:
+    case R_LARCH_TLS_DESC_LO12:
+    case R_LARCH_TLS_DESC64_LO20:
+    case R_LARCH_TLS_DESC64_HI12:
+    case R_LARCH_TLS_LD_PCREL20_S2:
+    case R_LARCH_TLS_GD_PCREL20_S2:
+    case R_LARCH_TLS_DESC_PCREL20_S2:
+      r = loongarch_check_offset (rel, input_section);
+      if (r != bfd_reloc_ok)
+	break;
+
+      r = loongarch_reloc_rewrite_imm_insn (rel, input_section,
+					    howto, input_bfd,
+					    contents, value);
+      break;
+
+    case R_LARCH_TLS_DESC_LD:
+    case R_LARCH_TLS_DESC_CALL:
+      r = bfd_reloc_ok;
+      break;
+
+    case R_LARCH_RELAX:
+    case R_LARCH_TLS_LE_ADD_R:
+      break;
+
+    default:
+      r = bfd_reloc_notsupported;
+    }
+  return r;
+}
+
+#define LARCH_RECENT_RELOC_QUEUE_LENGTH 72
+static struct
+{
+  bfd *bfd;
+  asection *section;
+  bfd_vma r_offset;
+  int r_type;
+  bfd_vma relocation;
+  Elf_Internal_Sym *sym;
+  struct elf_link_hash_entry *h;
+  bfd_vma addend;
+  int64_t top_then;
+} larch_reloc_queue[LARCH_RECENT_RELOC_QUEUE_LENGTH];
+static size_t larch_reloc_queue_head = 0;
+static size_t larch_reloc_queue_tail = 0;
+
+static const char *
+loongarch_sym_name (bfd *input_bfd, struct elf_link_hash_entry *h,
+		    Elf_Internal_Sym *sym)
+{
+  const char *ret = NULL;
+  if (sym)
+    ret = bfd_elf_string_from_elf_section (input_bfd,
+					   elf_symtab_hdr (input_bfd).sh_link,
+					   sym->st_name);
+  else if (h)
+    ret = h->root.root.string;
+
+  if (ret == NULL || *ret == '\0')
+    ret = "<nameless>";
+  return ret;
+}
+
+static void
+loongarch_record_one_reloc (bfd *abfd, asection *section, int r_type,
+			    bfd_vma r_offset, Elf_Internal_Sym *sym,
+			    struct elf_link_hash_entry *h, bfd_vma addend)
+{
+  if ((larch_reloc_queue_head == 0
+       && larch_reloc_queue_tail == LARCH_RECENT_RELOC_QUEUE_LENGTH - 1)
+      || larch_reloc_queue_head == larch_reloc_queue_tail + 1)
+    larch_reloc_queue_head =
+      (larch_reloc_queue_head + 1) % LARCH_RECENT_RELOC_QUEUE_LENGTH;
+  larch_reloc_queue[larch_reloc_queue_tail].bfd = abfd;
+  larch_reloc_queue[larch_reloc_queue_tail].section = section;
+  larch_reloc_queue[larch_reloc_queue_tail].r_offset = r_offset;
+  larch_reloc_queue[larch_reloc_queue_tail].r_type = r_type;
+  larch_reloc_queue[larch_reloc_queue_tail].sym = sym;
+  larch_reloc_queue[larch_reloc_queue_tail].h = h;
+  larch_reloc_queue[larch_reloc_queue_tail].addend = addend;
+  loongarch_top (&larch_reloc_queue[larch_reloc_queue_tail].top_then);
+  larch_reloc_queue_tail =
+    (larch_reloc_queue_tail + 1) % LARCH_RECENT_RELOC_QUEUE_LENGTH;
+}
+
+static void
+loongarch_dump_reloc_record (void (*p) (const char *fmt, ...))
+{
+  size_t i = larch_reloc_queue_head;
+  bfd *a_bfd = NULL;
+  asection *section = NULL;
+  bfd_vma r_offset = 0;
+  int inited = 0;
+  p ("Dump relocate record:\n");
+  p ("stack top\t\trelocation name\t\tsymbol");
+  while (i != larch_reloc_queue_tail)
+    {
+      if (a_bfd != larch_reloc_queue[i].bfd
+	  || section != larch_reloc_queue[i].section
+	  || r_offset != larch_reloc_queue[i].r_offset)
+	{
+	  a_bfd = larch_reloc_queue[i].bfd;
+	  section = larch_reloc_queue[i].section;
+	  r_offset = larch_reloc_queue[i].r_offset;
+	  p ("\nat %pB(%pA+0x%v):\n", larch_reloc_queue[i].bfd,
+	     larch_reloc_queue[i].section, larch_reloc_queue[i].r_offset);
+	}
+
+      if (!inited)
+	inited = 1, p ("...\n");
+
+      reloc_howto_type *howto =
+	loongarch_elf_rtype_to_howto (larch_reloc_queue[i].bfd,
+				      larch_reloc_queue[i].r_type);
+      p ("0x%V %s\t`%s'", (bfd_vma) larch_reloc_queue[i].top_then,
+	 howto ? howto->name : "<unknown reloc>",
+	 loongarch_sym_name (larch_reloc_queue[i].bfd, larch_reloc_queue[i].h,
+			     larch_reloc_queue[i].sym));
+
+      long addend = larch_reloc_queue[i].addend;
+      if (addend < 0)
+	p (" - %ld", -addend);
+      else if (0 < addend)
+	p (" + %ld(0x%v)", addend, larch_reloc_queue[i].addend);
+
+      p ("\n");
+      i = (i + 1) % LARCH_RECENT_RELOC_QUEUE_LENGTH;
+    }
+  p ("\n"
+     "-- Record dump end --\n\n");
+}
+
+static bool
+loongarch_reloc_is_fatal (struct bfd_link_info *info,
+			  bfd *input_bfd,
+			  asection *input_section,
+			  Elf_Internal_Rela *rel,
+			  reloc_howto_type *howto,
+			  bfd_reloc_status_type rtype,
+			  bool is_undefweak,
+			  const char *name,
+			  const char *msg)
+{
+  bool fatal = true;
+  switch (rtype)
+    {
+      /* 'dangerous' means we do it but can't promise it's ok
+	 'unsupport' means out of ability of relocation type
+	 'undefined' means we can't deal with the undefined symbol.  */
+    case bfd_reloc_undefined:
+      info->callbacks->undefined_symbol (info, name, input_bfd, input_section,
+					 rel->r_offset, true);
+      info->callbacks->info ("%X%pB(%pA+0x%v): error: %s against %s`%s':\n%s\n",
+			     input_bfd, input_section, rel->r_offset,
+			     howto->name,
+			     is_undefweak ? "[undefweak] " : "", name, msg);
+      break;
+    case bfd_reloc_dangerous:
+      info->callbacks->info ("%pB(%pA+0x%v): warning: %s against %s`%s':\n%s\n",
+			     input_bfd, input_section, rel->r_offset,
+			     howto->name,
+			     is_undefweak ? "[undefweak] " : "", name, msg);
+      fatal = false;
+      break;
+    case bfd_reloc_notsupported:
+      info->callbacks->info ("%X%pB(%pA+0x%v): error: %s against %s`%s':\n%s\n",
+			     input_bfd, input_section, rel->r_offset,
+			     howto->name,
+			     is_undefweak ? "[undefweak] " : "", name, msg);
+      break;
+    default:
+      break;
+    }
+  return fatal;
+}
+
+/* If lo12 immediate > 0x7ff, because sign-extend caused by addi.d/ld.d,
+   hi20 immediate need to add 0x1.
+   For example: pc 0x120000000, symbol 0x120000812
+   lo12 immediate is 0x812, 0x120000812 & 0xfff = 0x812
+   hi20 immediate is 1, because lo12 imm > 0x7ff, symbol need to add 0x1000
+   (((0x120000812 + 0x1000) & ~0xfff) - (0x120000000 & ~0xfff)) >> 12 = 0x1
+
+   At run:
+   pcalau12i $t0, hi20 (0x1)
+      $t0 = 0x120000000 + (0x1 << 12) = 0x120001000
+   addi.d $t0, $t0, lo12 (0x812)
+      $t0 = 0x120001000 + 0xfffffffffffff812 (-(0x1000 - 0x812) = -0x7ee)
+	  = 0x120001000 - 0x7ee (0x1000 - 0x7ee = 0x812)
+	  = 0x120000812
+    Without hi20 add 0x1000, the result 0x120000000 - 0x7ee = 0x11ffff812 is
+    error.
+    0x1000 + sign-extend-to64(0x8xx) = 0x8xx.  */
+#define RELOCATE_CALC_PC32_HI20(relocation, pc) 	\
+  ({							\
+    bfd_vma __lo = (relocation) & ((bfd_vma)0xfff);	\
+    relocation = (relocation & ~(bfd_vma)0xfff)		\
+		  - (pc & ~(bfd_vma)0xfff);		\
+    if (__lo > 0x7ff)					\
+	relocation += 0x1000;				\
+  })
+
+/* Handle problems caused by symbol extensions in TLS LE, The processing
+   is similar to the macro RELOCATE_CALC_PC32_HI20 method.  */
+#define RELOCATE_TLS_TP32_HI20(relocation)		\
+  ({							\
+    bfd_vma __lo = (relocation) & ((bfd_vma)0xfff);	\
+    if (__lo > 0x7ff)					\
+	relocation += 0x800;				\
+    relocation = relocation & ~(bfd_vma)0xfff;		\
+  })
+
+/* For example: pc is 0x11000010000100, symbol is 0x1812348ffff812
+   offset = (0x1812348ffff812 & ~0xfff) - (0x11000010000100 & ~0xfff)
+	  = 0x712347ffff000
+   lo12: 0x1812348ffff812 & 0xfff = 0x812
+   hi20: 0x7ffff + 0x1(lo12 > 0x7ff) = 0x80000
+   lo20: 0x71234 - 0x1(lo12 > 0x7ff) + 0x1(hi20 > 0x7ffff)
+   hi12: 0x0
+
+   pcalau12i $t1, hi20 (0x80000)
+      $t1 = 0x11000010000100 + sign-extend(0x80000 << 12)
+	  = 0x11000010000100 + 0xffffffff80000000
+	  = 0x10ffff90000000
+   addi.d $t0, $zero, lo12 (0x812)
+      $t0 = 0xfffffffffffff812 (if lo12 > 0x7ff, because sign-extend,
+      lo20 need to sub 0x1)
+   lu32i.d $t0, lo20 (0x71234)
+      $t0 = {0x71234, 0xfffff812}
+	  = 0x71234fffff812
+   lu52i.d $t0, hi12 (0x0)
+      $t0 = {0x0, 0x71234fffff812}
+	  = 0x71234fffff812
+   add.d $t1, $t1, $t0
+      $t1 = 0x10ffff90000000 + 0x71234fffff812
+	  = 0x1812348ffff812.  */
+#define RELOCATE_CALC_PC64_HI32(relocation, pc)  	\
+  ({							\
+    bfd_vma __lo = (relocation & (bfd_vma)0xfff);	\
+    relocation = (relocation & ~(bfd_vma)0xfff)		\
+		  - ((pc) & ~(bfd_vma)0xfff);		\
+    if (__lo > 0x7ff)					\
+	relocation += (0x1000 - 0x100000000);		\
+    if (relocation & 0x80000000)			\
+      relocation += 0x100000000;			\
+  })
+
+/* Transition instruction sequence to relax instruction sequence.  */
+static bool
+loongarch_tls_relax (bfd *abfd, asection *sec, Elf_Internal_Rela *rel,
+		    int r_type, struct elf_link_hash_entry *h,
+		    struct bfd_link_info *info)
+{
+  bool local_exec = bfd_link_executable (info)
+		    && SYMBOL_REFERENCES_LOCAL (info, h);
+  bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
+  unsigned long insn;
+
+  switch (r_type)
+    {
+      case R_LARCH_TLS_DESC_PC_HI20:
+	if (local_exec)
+	    /* DESC -> LE relaxation:
+	       pcalalau12i $a0,%desc_pc_hi20(var) =>
+	       lu12i.w $a0,%le_hi20(var)
+	    */
+	    bfd_put (32, abfd, LARCH_LU12I_W | LARCH_RD_A0,
+		     contents + rel->r_offset);
+
+	/* DESC -> IE relaxation:
+	   pcalalau12i $a0,%desc_pc_hi20(var) =>
+	   pcalalau12i $a0,%ie_pc_hi20(var)
+	*/
+	return true;
+
+      case R_LARCH_TLS_DESC_PC_LO12:
+	if (local_exec)
+	  {
+	    /* DESC -> LE relaxation:
+	       addi.d $a0,$a0,%desc_pc_lo12(var) =>
+	       ori  $a0,$a0,le_lo12(var)
+	    */
+	    insn = LARCH_ORI | LARCH_RD_RJ_A0;
+	    bfd_put (32, abfd, LARCH_ORI | LARCH_RD_RJ_A0,
+		     contents + rel->r_offset);
+	  }
+	else
+	  {
+	    /* DESC -> IE relaxation:
+	       addi.d $a0,$a0,%desc_pc_lo12(var) =>
+	       ld.d $a0,$a0,%%ie_pc_lo12
+	    */
+	    bfd_put (32, abfd, LARCH_LD_D | LARCH_RD_RJ_A0,
+		     contents + rel->r_offset);
+	  }
+	return true;
+
+      case R_LARCH_TLS_DESC_LD:
+      case R_LARCH_TLS_DESC_CALL:
+	/* DESC -> LE/IE relaxation:
+	   ld.d $ra,$a0,%desc_ld(var) => NOP
+	   jirl $ra,$ra,%desc_call(var) => NOP
+	*/
+	bfd_put (32, abfd, LARCH_NOP, contents + rel->r_offset);
+	return true;
+
+      case R_LARCH_TLS_IE_PC_HI20:
+	if (local_exec)
+	  {
+	    /* IE -> LE relaxation:
+	       pcalalau12i $rd,%ie_pc_hi20(var) =>
+	       lu12i.w $rd,%le_hi20(var)
+	    */
+	    insn = bfd_getl32 (contents + rel->r_offset);
+	    bfd_put (32, abfd, LARCH_LU12I_W | (insn & 0x1f),
+		     contents + rel->r_offset);
+	  }
+	return true;
+
+      case R_LARCH_TLS_IE_PC_LO12:
+	if (local_exec)
+	  {
+	    /* IE -> LE relaxation:
+	       ld.d $rd,$rj,%%ie_pc_lo12 =>
+	       ori  $rd,$rj,le_lo12(var)
+	    */
+	    insn = bfd_getl32 (contents + rel->r_offset);
+	    bfd_put (32, abfd, LARCH_ORI | (insn & 0x3ff),
+		     contents + rel->r_offset);
+	  }
+	return true;
+    }
+
+  return false;
+}
+
+
+static int
+loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+				bfd *input_bfd, asection *input_section,
+				bfd_byte *contents, Elf_Internal_Rela *relocs,
+				Elf_Internal_Sym *local_syms,
+				asection **local_sections)
+{
+  Elf_Internal_Rela *rel;
+  Elf_Internal_Rela *relend;
+  bool fatal = false;
+  asection *sreloc = elf_section_data (input_section)->sreloc;
+  struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info);
+  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_bfd);
+  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
+  bfd_vma *local_got_offsets = elf_local_got_offsets (input_bfd);
+  bool is_pic = bfd_link_pic (info);
+  bool is_dyn = elf_hash_table (info)->dynamic_sections_created;
+  asection *plt = htab->elf.splt ? htab->elf.splt : htab->elf.iplt;
+  asection *got = htab->elf.sgot;
+
+  relend = relocs + input_section->reloc_count;
+  for (rel = relocs; rel < relend; rel++)
+    {
+      unsigned int r_type = ELFNN_R_TYPE (rel->r_info);
+      unsigned long r_symndx = ELFNN_R_SYM (rel->r_info);
+      bfd_vma pc = sec_addr (input_section) + rel->r_offset;
+      reloc_howto_type *howto = NULL;
+      asection *sec = NULL;
+      Elf_Internal_Sym *sym = NULL;
+      struct elf_link_hash_entry *h = NULL;
+      const char *name;
+      bfd_reloc_status_type r = bfd_reloc_ok;
+      bool is_ie, is_desc, is_undefweak, unresolved_reloc, defined_local;
+      unsigned int relaxed_r_type;
+      bool resolved_local, resolved_dynly, resolved_to_const;
+      char tls_type;
+      bfd_vma relocation, off, ie_off, desc_off;
+      int i, j;
+
+      howto = loongarch_elf_rtype_to_howto (input_bfd, r_type);
+      if (howto == NULL || r_type == R_LARCH_GNU_VTINHERIT
+	  || r_type == R_LARCH_GNU_VTENTRY)
+	continue;
+
+      /* This is a final link.  */
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  is_undefweak = false;
+	  unresolved_reloc = false;
+	  sym = local_syms + r_symndx;
+	  sec = local_sections[r_symndx];
+	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+
+	  /* Relocate against local STT_GNU_IFUNC symbol.  */
+	  if (!bfd_link_relocatable (info)
+	      && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+	    {
+	      h = elfNN_loongarch_get_local_sym_hash (htab, input_bfd, rel,
+						      false);
+	      if (h == NULL)
+		abort ();
+
+	      /* Set STT_GNU_IFUNC symbol value.  */
+	      h->root.u.def.value = sym->st_value;
+	      h->root.u.def.section = sec;
+	    }
+	  defined_local = true;
+	  resolved_local = true;
+	  resolved_dynly = false;
+	  resolved_to_const = false;
+
+	  /* Calc in funtion elf_link_input_bfd,
+	   * if #define elf_backend_rela_normal to 1.  */
+	  if (bfd_link_relocatable (info)
+	      && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+	    continue;
+	}
+      else
+	{
+	  bool warned, ignored;
+
+	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+				   r_symndx, symtab_hdr, sym_hashes,
+				   h, sec, relocation,
+				   unresolved_reloc, warned, ignored);
+	  /* Here means symbol isn't local symbol only and 'h != NULL'.  */
+
+	  /* The 'unresolved_syms_in_objects' specify how to deal with undefined
+	     symbol.  And 'dynamic_undefined_weak' specify what to do when
+	     meeting undefweak.  */
+
+	  if ((is_undefweak = h->root.type == bfd_link_hash_undefweak))
+	    {
+	      defined_local = false;
+	      resolved_local = false;
+	      resolved_to_const = (!is_dyn || h->dynindx == -1
+				   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
+	      resolved_dynly = !resolved_local && !resolved_to_const;
+	    }
+	  else if (warned)
+	    {
+	      /* Symbol undefined offen means failed already.  I don't know why
+		 'warned' here but I guess it want to continue relocating as if
+		 no error occures to find other errors as more as possible.  */
+
+	      /* To avoid generating warning messages about truncated
+		 relocations, set the relocation's address to be the same as
+		 the start of this section.  */
+	      relocation = (input_section->output_section
+			    ? input_section->output_section->vma
+			    : 0);
+
+	      defined_local = relocation != 0;
+	      resolved_local = defined_local;
+	      resolved_to_const = !resolved_local;
+	      resolved_dynly = false;
+	    }
+	  else
+	    {
+	      defined_local = !unresolved_reloc && !ignored;
+	      resolved_local =
+		defined_local && SYMBOL_REFERENCES_LOCAL (info, h);
+	      resolved_dynly = !resolved_local;
+	      resolved_to_const = !resolved_local && !resolved_dynly;
+	    }
+	}
+
+      name = loongarch_sym_name (input_bfd, h, sym);
+
+      if (sec != NULL && discarded_section (sec))
+	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel,
+					 1, relend, howto, 0, contents);
+
+      if (bfd_link_relocatable (info))
+	continue;
+
+      /* The r_symndx will be STN_UNDEF (zero) only for relocs against symbols
+	 from removed linkonce sections, or sections discarded by a linker
+	 script.  Also for R_*_SOP_PUSH_ABSOLUTE and PCREL to specify const.  */
+      if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
+	{
+	  defined_local = false;
+	  resolved_local = false;
+	  resolved_dynly = false;
+	  resolved_to_const = true;
+	}
+
+      /* The ifunc reference generate plt.  */
+      if (h && h->type == STT_GNU_IFUNC && h->plt.offset != MINUS_ONE)
+	{
+	  defined_local = true;
+	  resolved_local = true;
+	  resolved_dynly = false;
+	  resolved_to_const = false;
+	  relocation = sec_addr (plt) + h->plt.offset;
+	}
+
+      unresolved_reloc = resolved_dynly;
+
+      BFD_ASSERT (resolved_local + resolved_dynly + resolved_to_const == 1);
+
+      /* BFD_ASSERT (!resolved_dynly || (h && h->dynindx != -1));.  */
+
+      BFD_ASSERT (!resolved_local || defined_local);
+
+      relaxed_r_type = loongarch_tls_transition (info, r_type, h, input_bfd, r_symndx);
+      if (relaxed_r_type != r_type)
+      {
+	howto = loongarch_elf_rtype_to_howto (input_bfd, relaxed_r_type);
+	BFD_ASSERT (howto != NULL);
+
+	if (loongarch_tls_relax (input_bfd, input_section, rel, r_type, h, info))
+	  r_type = relaxed_r_type;
+      }
+
+      is_desc = false;
+      is_ie = false;
+      switch (r_type)
+	{
+	case R_LARCH_MARK_PCREL:
+	case R_LARCH_MARK_LA:
+	case R_LARCH_NONE:
+	  r = bfd_reloc_continue;
+	  unresolved_reloc = false;
+	  break;
+
+	case R_LARCH_32:
+	case R_LARCH_64:
+	  if (resolved_dynly || (is_pic && resolved_local))
+	    {
+	      Elf_Internal_Rela outrel;
+
+	      /* When generating a shared object, these relocations are copied
+		 into the output file to be resolved at run time.  */
+
+	      outrel.r_offset = _bfd_elf_section_offset (output_bfd, info,
+							 input_section,
+							 rel->r_offset);
+
+	      unresolved_reloc = (!((bfd_vma) -2 <= outrel.r_offset)
+				  && (input_section->flags & SEC_ALLOC));
+
+	      outrel.r_offset += sec_addr (input_section);
+
+	      /* A pointer point to a ifunc symbol.  */
+	      if (h && h->type == STT_GNU_IFUNC)
+		{
+		  if (h->dynindx == -1)
+		    {
+		      outrel.r_info = ELFNN_R_INFO (0, R_LARCH_IRELATIVE);
+		      outrel.r_addend = (h->root.u.def.value
+				  + h->root.u.def.section->output_section->vma
+				  + h->root.u.def.section->output_offset);
+		    }
+		  else
+		    {
+		      outrel.r_info = ELFNN_R_INFO (h->dynindx, R_LARCH_NN);
+		      outrel.r_addend = 0;
+		    }
+
+		  if (SYMBOL_REFERENCES_LOCAL (info, h))
+		    {
+
+		      if (htab->elf.splt != NULL)
+			sreloc = htab->elf.srelgot;
+		      else
+			sreloc = htab->elf.irelplt;
+		    }
+		  else
+		    {
+
+		      if (bfd_link_pic (info))
+			sreloc = htab->elf.irelifunc;
+		      else if (htab->elf.splt != NULL)
+			sreloc = htab->elf.srelgot;
+		      else
+			sreloc = htab->elf.irelplt;
+		    }
+		}
+	      else if (resolved_dynly)
+		{
+		  if (h->dynindx == -1)
+		    {
+		      if (h->root.type == bfd_link_hash_undefined)
+			(*info->callbacks->undefined_symbol)
+			  (info, name, input_bfd, input_section,
+			   rel->r_offset, true);
+
+		      outrel.r_info = ELFNN_R_INFO (0, r_type);
+		    }
+		  else
+		    outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type);
+
+		  outrel.r_addend = rel->r_addend;
+		}
+	      else
+		{
+		  outrel.r_info = ELFNN_R_INFO (0, R_LARCH_RELATIVE);
+		  outrel.r_addend = relocation + rel->r_addend;
+		}
+
+	      /* No alloc space of func allocate_dynrelocs.  */
+	      if (unresolved_reloc
+		  && !(h && (h->is_weakalias || !h->dyn_relocs)))
+		loongarch_elf_append_rela (output_bfd, sreloc, &outrel);
+	    }
+
+	  relocation += rel->r_addend;
+	  break;
+
+	case R_LARCH_ADD6:
+	case R_LARCH_ADD8:
+	case R_LARCH_ADD16:
+	case R_LARCH_ADD24:
+	case R_LARCH_ADD32:
+	case R_LARCH_ADD64:
+	  {
+	    bfd_vma old_value = bfd_get (howto->bitsize, input_bfd,
+					 contents + rel->r_offset);
+	    relocation = old_value + relocation + rel->r_addend;
+	    break;
+	  }
+
+	case R_LARCH_SUB6:
+	case R_LARCH_SUB8:
+	case R_LARCH_SUB16:
+	case R_LARCH_SUB24:
+	case R_LARCH_SUB32:
+	case R_LARCH_SUB64:
+	  {
+	    bfd_vma old_value = bfd_get (howto->bitsize, input_bfd,
+					  contents + rel->r_offset);
+	    relocation = old_value - relocation - rel->r_addend;
+	    break;
+	  }
+
+	case R_LARCH_ADD_ULEB128:
+	case R_LARCH_SUB_ULEB128:
+	  {
+	    /* Get the value and length of the uleb128 data.  */
+	    unsigned int len = 0;
+	    bfd_vma old_value = _bfd_read_unsigned_leb128 (input_bfd,
+				    contents + rel->r_offset, &len);
+
+	    if (R_LARCH_ADD_ULEB128 == ELFNN_R_TYPE (rel->r_info))
+	      relocation = old_value + relocation + rel->r_addend;
+	    else if (R_LARCH_SUB_ULEB128 == ELFNN_R_TYPE (rel->r_info))
+	      relocation = old_value - relocation - rel->r_addend;
+
+	    bfd_vma mask = (1 << (7 * len)) - 1;
+	    relocation &= mask;
+	    break;
+	  }
+
+	case R_LARCH_TLS_DTPREL32:
+	case R_LARCH_TLS_DTPREL64:
+	  if (resolved_dynly)
+	    {
+	      Elf_Internal_Rela outrel;
+
+	      outrel.r_offset = _bfd_elf_section_offset (output_bfd, info,
+							 input_section,
+							 rel->r_offset);
+	      unresolved_reloc = (!((bfd_vma) -2 <= outrel.r_offset)
+				  && (input_section->flags & SEC_ALLOC));
+	      outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type);
+	      outrel.r_offset += sec_addr (input_section);
+	      outrel.r_addend = rel->r_addend;
+	      if (unresolved_reloc)
+		loongarch_elf_append_rela (output_bfd, sreloc, &outrel);
+	      break;
+	    }
+
+	  if (resolved_to_const)
+	    fatal = loongarch_reloc_is_fatal (info, input_bfd, input_section,
+					      rel, howto,
+					      bfd_reloc_notsupported,
+					      is_undefweak, name,
+					      "Internal:");
+	  if (resolved_local)
+	    {
+	      if (!elf_hash_table (info)->tls_sec)
+		{
+		fatal = loongarch_reloc_is_fatal (info, input_bfd,
+			  input_section, rel, howto, bfd_reloc_notsupported,
+			  is_undefweak, name, "TLS section not be created");
+		}
+	      else
+		relocation -= elf_hash_table (info)->tls_sec->vma;
+	    }
+	  else
+	    {
+	    fatal = loongarch_reloc_is_fatal (info, input_bfd,
+		      input_section, rel, howto, bfd_reloc_undefined,
+		      is_undefweak, name,
+		      "TLS LE just can be resolved local only.");
+	    }
+
+	  break;
+
+	case R_LARCH_SOP_PUSH_TLS_TPREL:
+	  if (resolved_local)
+	    {
+	      if (!elf_hash_table (info)->tls_sec)
+		fatal = (loongarch_reloc_is_fatal
+			 (info, input_bfd, input_section, rel, howto,
+			  bfd_reloc_notsupported, is_undefweak, name,
+			  "TLS section not be created"));
+	      else
+		relocation -= elf_hash_table (info)->tls_sec->vma;
+	    }
+	  else
+	    fatal = (loongarch_reloc_is_fatal
+		     (info, input_bfd, input_section, rel, howto,
+		      bfd_reloc_undefined, is_undefweak, name,
+		      "TLS LE just can be resolved local only."));
+	  break;
+
+	case R_LARCH_SOP_PUSH_ABSOLUTE:
+	  if (is_undefweak)
+	    {
+	      if (resolved_dynly)
+		fatal = (loongarch_reloc_is_fatal
+			 (info, input_bfd, input_section, rel, howto,
+			  bfd_reloc_dangerous, is_undefweak, name,
+			  "Someone require us to resolve undefweak "
+			  "symbol dynamically.  \n"
+			  "But this reloc can't be done.  "
+			  "I think I can't throw error "
+			  "for this\n"
+			  "so I resolved it to 0.  "
+			  "I suggest to re-compile with '-fpic'."));
+
+	      relocation = 0;
+	      unresolved_reloc = false;
+	      break;
+	    }
+
+	  if (resolved_to_const)
+	    {
+	      relocation += rel->r_addend;
+	      break;
+	    }
+
+	  if (is_pic)
+	    {
+	      fatal = (loongarch_reloc_is_fatal
+		       (info, input_bfd, input_section, rel, howto,
+			bfd_reloc_notsupported, is_undefweak, name,
+			"Under PIC we don't know load address.  Re-compile "
+			"with '-fpic'?"));
+	      break;
+	    }
+
+	  if (resolved_dynly)
+	    {
+	      if (!(plt && h && h->plt.offset != MINUS_ONE))
+		{
+		  fatal = (loongarch_reloc_is_fatal
+			   (info, input_bfd, input_section, rel, howto,
+			    bfd_reloc_undefined, is_undefweak, name,
+			    "Can't be resolved dynamically.  Try to re-compile "
+			    "with '-fpic'?"));
+		  break;
+		}
+
+	      if (rel->r_addend != 0)
+		{
+		  fatal = (loongarch_reloc_is_fatal
+			   (info, input_bfd, input_section, rel, howto,
+			    bfd_reloc_notsupported, is_undefweak, name,
+			    "Shouldn't be with r_addend."));
+		  break;
+		}
+
+	      relocation = sec_addr (plt) + h->plt.offset;
+	      unresolved_reloc = false;
+	      break;
+	    }
+
+	  if (resolved_local)
+	    {
+	      relocation += rel->r_addend;
+	      break;
+	    }
+
+	  break;
+
+	case R_LARCH_SOP_PUSH_PCREL:
+	case R_LARCH_SOP_PUSH_PLT_PCREL:
+	  unresolved_reloc = false;
+
+	  if (is_undefweak)
+	    {
+	      i = 0, j = 0;
+	      relocation = 0;
+	      if (resolved_dynly)
+		{
+		  if (h && h->plt.offset != MINUS_ONE)
+		    i = 1, j = 2;
+		  else
+		    fatal = (loongarch_reloc_is_fatal
+			     (info, input_bfd, input_section, rel, howto,
+			      bfd_reloc_dangerous, is_undefweak, name,
+			      "Undefweak need to be resolved dynamically, "
+			      "but PLT stub doesn't represent."));
+		}
+	    }
+	  else
+	    {
+	      if (!(defined_local || (h && h->plt.offset != MINUS_ONE)))
+		{
+		  fatal = (loongarch_reloc_is_fatal
+			   (info, input_bfd, input_section, rel, howto,
+			    bfd_reloc_undefined, is_undefweak, name,
+			    "PLT stub does not represent and "
+			    "symbol not defined."));
+		  break;
+		}
+
+	      if (resolved_local)
+		i = 0, j = 2;
+	      else /* if (resolved_dynly) */
+		{
+		  if (!(h && h->plt.offset != MINUS_ONE))
+		    fatal = (loongarch_reloc_is_fatal
+			     (info, input_bfd, input_section, rel, howto,
+			      bfd_reloc_dangerous, is_undefweak, name,
+			      "Internal: PLT stub doesn't represent.  "
+			      "Resolve it with pcrel"));
+		  i = 1, j = 3;
+		}
+	    }
+
+	  for (; i < j; i++)
+	    {
+	      if ((i & 1) == 0 && defined_local)
+		{
+		  relocation -= pc;
+		  relocation += rel->r_addend;
+		  break;
+		}
+
+	      if ((i & 1) && h && h->plt.offset != MINUS_ONE)
+		{
+		  if (rel->r_addend != 0)
+		    {
+		      fatal = (loongarch_reloc_is_fatal
+			       (info, input_bfd, input_section, rel, howto,
+				bfd_reloc_notsupported, is_undefweak, name,
+				"PLT shouldn't be with r_addend."));
+		      break;
+		    }
+		  relocation = sec_addr (plt) + h->plt.offset - pc;
+		  break;
+		}
+	    }
+	  break;
+
+	case R_LARCH_SOP_PUSH_GPREL:
+	  unresolved_reloc = false;
+
+	  if (rel->r_addend != 0)
+	    {
+	      fatal = (loongarch_reloc_is_fatal
+		       (info, input_bfd, input_section, rel, howto,
+			bfd_reloc_notsupported, is_undefweak, name,
+			"Shouldn't be with r_addend."));
+	      break;
+	    }
+
+	  if (h != NULL)
+	    {
+	      off = h->got.offset & (~1);
+
+	      if (h->got.offset == MINUS_ONE && h->type != STT_GNU_IFUNC)
+		{
+		  fatal = (loongarch_reloc_is_fatal
+			   (info, input_bfd, input_section, rel, howto,
+			    bfd_reloc_notsupported, is_undefweak, name,
+			    "Internal: GOT entry doesn't represent."));
+		  break;
+		}
+
+	      /* Hidden symbol not has .got entry, only .got.plt entry
+		 so gprel is (plt - got).  */
+	      if (h->got.offset == MINUS_ONE && h->type == STT_GNU_IFUNC)
+		{
+		  if (h->plt.offset == (bfd_vma) -1)
+		    {
+		      abort();
+		    }
+
+		  bfd_vma plt_index = h->plt.offset / PLT_ENTRY_SIZE;
+		  off = plt_index * GOT_ENTRY_SIZE;
+
+		  if (htab->elf.splt != NULL)
+		    {
+		      /* Section .plt header is 2 times of plt entry.  */
+		      off = sec_addr (htab->elf.sgotplt) + off
+			- sec_addr (htab->elf.sgot);
+		    }
+		  else
+		    {
+		      /* Section iplt not has plt header.  */
+		      off = sec_addr (htab->elf.igotplt) + off
+			- sec_addr (htab->elf.sgot);
+		    }
+		}
+
+	      if ((h->got.offset & 1) == 0)
+		{
+		  if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (is_dyn,
+							bfd_link_pic (info), h)
+		      && ((bfd_link_pic (info)
+			   && SYMBOL_REFERENCES_LOCAL (info, h))))
+		    {
+		      /* This is actually a static link, or it is a
+			 -Bsymbolic link and the symbol is defined
+			 locally, or the symbol was forced to be local
+			 because of a version file.  We must initialize
+			 this entry in the global offset table.  Since the
+			 offset must always be a multiple of the word size,
+			 we use the least significant bit to record whether
+			 we have initialized it already.
+
+			 When doing a dynamic link, we create a rela.got
+			 relocation entry to initialize the value.  This
+			 is done in the finish_dynamic_symbol routine.  */
+
+		      if (resolved_dynly)
+			{
+			  fatal = (loongarch_reloc_is_fatal
+				   (info, input_bfd, input_section, rel, howto,
+				    bfd_reloc_dangerous, is_undefweak, name,
+				    "Internal: here shouldn't dynamic."));
+			}
+
+		      if (!(defined_local || resolved_to_const))
+			{
+			  fatal = (loongarch_reloc_is_fatal
+				   (info, input_bfd, input_section, rel, howto,
+				    bfd_reloc_undefined, is_undefweak, name,
+				    "Internal: "));
+			  break;
+			}
+
+		      asection *s;
+		      Elf_Internal_Rela outrel;
+		      /* We need to generate a R_LARCH_RELATIVE reloc
+			 for the dynamic linker.  */
+		      s = htab->elf.srelgot;
+		      if (!s)
+			{
+			  fatal = loongarch_reloc_is_fatal
+			    (info, input_bfd,
+			     input_section, rel, howto,
+			     bfd_reloc_notsupported, is_undefweak, name,
+			     "Internal: '.rel.got' not represent");
+			  break;
+			}
+
+		      outrel.r_offset = sec_addr (got) + off;
+		      outrel.r_info = ELFNN_R_INFO (0, R_LARCH_RELATIVE);
+		      outrel.r_addend = relocation; /* Link-time addr.  */
+		      loongarch_elf_append_rela (output_bfd, s, &outrel);
+		    }
+		  bfd_put_NN (output_bfd, relocation, got->contents + off);
+		  h->got.offset |= 1;
+		}
+	    }
+	  else
+	    {
+	      if (!local_got_offsets)
+		{
+		  fatal = (loongarch_reloc_is_fatal
+			   (info, input_bfd, input_section, rel, howto,
+			    bfd_reloc_notsupported, is_undefweak, name,
+			    "Internal: local got offsets not reporesent."));
+		  break;
+		}
+
+	      off = local_got_offsets[r_symndx] & (~1);
+
+	      if (local_got_offsets[r_symndx] == MINUS_ONE)
+		{
+		  fatal = (loongarch_reloc_is_fatal
+			   (info, input_bfd, input_section, rel, howto,
+			    bfd_reloc_notsupported, is_undefweak, name,
+			    "Internal: GOT entry doesn't represent."));
+		  break;
+		}
+
+	      /* The offset must always be a multiple of the word size.
+		 So, we can use the least significant bit to record
+		 whether we have already processed this entry.  */
+	      if ((local_got_offsets[r_symndx] & 1) == 0)
+		{
+		  if (is_pic)
+		    {
+		      asection *s;
+		      Elf_Internal_Rela outrel;
+		      /* We need to generate a R_LARCH_RELATIVE reloc
+			 for the dynamic linker.  */
+		      s = htab->elf.srelgot;
+		      if (!s)
+			{
+			  fatal = (loongarch_reloc_is_fatal
+				   (info, input_bfd, input_section, rel, howto,
+				    bfd_reloc_notsupported, is_undefweak, name,
+				    "Internal: '.rel.got' not represent"));
+			  break;
+			}
+
+		      outrel.r_offset = sec_addr (got) + off;
+		      outrel.r_info = ELFNN_R_INFO (0, R_LARCH_RELATIVE);
+		      outrel.r_addend = relocation; /* Link-time addr.  */
+		      loongarch_elf_append_rela (output_bfd, s, &outrel);
+		    }
+
+		  bfd_put_NN (output_bfd, relocation, got->contents + off);
+		  local_got_offsets[r_symndx] |= 1;
+		}
+	    }
+	  relocation = off;
+
+	  break;
+
+	case R_LARCH_SOP_PUSH_TLS_GOT:
+	case R_LARCH_SOP_PUSH_TLS_GD:
+	  {
+	    unresolved_reloc = false;
+	    if (r_type == R_LARCH_SOP_PUSH_TLS_GOT)
+	      is_ie = true;
+
+	    bfd_vma got_off = 0;
+	    if (h != NULL)
+	      {
+		got_off = h->got.offset;
+		h->got.offset |= 1;
+	      }
+	    else
+	      {
+		got_off = local_got_offsets[r_symndx];
+		local_got_offsets[r_symndx] |= 1;
+	      }
+
+	    BFD_ASSERT (got_off != MINUS_ONE);
+
+	    ie_off = 0;
+	    tls_type = _bfd_loongarch_elf_tls_type (input_bfd, h, r_symndx);
+	    if ((tls_type & GOT_TLS_GD) && (tls_type & GOT_TLS_IE))
+	      ie_off = 2 * GOT_ENTRY_SIZE;
+
+	    if ((got_off & 1) == 0)
+	      {
+		Elf_Internal_Rela rela;
+		asection *srel = htab->elf.srelgot;
+		bfd_vma tls_block_off = 0;
+
+		if (SYMBOL_REFERENCES_LOCAL (info, h))
+		  {
+		    BFD_ASSERT (elf_hash_table (info)->tls_sec);
+		    tls_block_off = relocation
+			- elf_hash_table (info)->tls_sec->vma;
+		  }
+
+		if (tls_type & GOT_TLS_GD)
+		  {
+		    rela.r_offset = sec_addr (got) + got_off;
+		    rela.r_addend = 0;
+		    if (SYMBOL_REFERENCES_LOCAL (info, h))
+		      {
+			/* Local sym, used in exec, set module id 1.  */
+			if (bfd_link_executable (info))
+			  bfd_put_NN (output_bfd, 1, got->contents + got_off);
+			else
+			  {
+			    rela.r_info = ELFNN_R_INFO (0,
+							R_LARCH_TLS_DTPMODNN);
+			    loongarch_elf_append_rela (output_bfd, srel, &rela);
+			  }
+
+			bfd_put_NN (output_bfd, tls_block_off,
+				    got->contents + got_off + GOT_ENTRY_SIZE);
+		      }
+		    /* Dynamic resolved.  */
+		    else
+		      {
+			/* Dynamic relocate module id.  */
+			rela.r_info = ELFNN_R_INFO (h->dynindx,
+						    R_LARCH_TLS_DTPMODNN);
+			loongarch_elf_append_rela (output_bfd, srel, &rela);
+
+			/* Dynamic relocate offset of block.  */
+			rela.r_offset += GOT_ENTRY_SIZE;
+			rela.r_info = ELFNN_R_INFO (h->dynindx,
+						    R_LARCH_TLS_DTPRELNN);
+			loongarch_elf_append_rela (output_bfd, srel, &rela);
+		      }
+		  }
+		if (tls_type & GOT_TLS_IE)
+		  {
+		    rela.r_offset = sec_addr (got) + got_off + ie_off;
+		    if (SYMBOL_REFERENCES_LOCAL (info, h))
+		      {
+			/* Local sym, used in exec, set module id 1.  */
+			if (!bfd_link_executable (info))
+			  {
+			    rela.r_info = ELFNN_R_INFO (0, R_LARCH_TLS_TPRELNN);
+			    rela.r_addend = tls_block_off;
+			    loongarch_elf_append_rela (output_bfd, srel, &rela);
+			  }
+
+			bfd_put_NN (output_bfd, tls_block_off,
+				    got->contents + got_off + ie_off);
+		      }
+		    /* Dynamic resolved.  */
+		    else
+		      {
+			/* Dynamic relocate offset of block.  */
+			rela.r_info = ELFNN_R_INFO (h->dynindx,
+						    R_LARCH_TLS_TPRELNN);
+			rela.r_addend = 0;
+			loongarch_elf_append_rela (output_bfd, srel, &rela);
+		      }
+		  }
+	      }
+
+	    relocation = (got_off & (~(bfd_vma)1)) + (is_ie ? ie_off : 0);
+	  }
+	  break;
+
+	/* New reloc types.  */
+	case R_LARCH_B16:
+	case R_LARCH_B21:
+	case R_LARCH_B26:
+	case R_LARCH_CALL36:
+	  unresolved_reloc = false;
+	  if (is_undefweak)
+	    {
+	      relocation = 0;
+	    }
+
+	  if (resolved_local)
+	    {
+	      relocation -= pc;
+	      relocation += rel->r_addend;
+	    }
+	  else if (resolved_dynly)
+	    {
+	      BFD_ASSERT (h
+			  && (h->plt.offset != MINUS_ONE
+			      || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+			  && rel->r_addend == 0);
+	      if (h && h->plt.offset == MINUS_ONE
+		  && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+		{
+		  relocation -= pc;
+		  relocation += rel->r_addend;
+		}
+	      else
+		relocation = sec_addr (plt) + h->plt.offset - pc;
+	    }
+
+	  break;
+
+	case R_LARCH_ABS_HI20:
+	case R_LARCH_ABS_LO12:
+	case R_LARCH_ABS64_LO20:
+	case R_LARCH_ABS64_HI12:
+	  BFD_ASSERT (!is_pic);
+
+	  if (is_undefweak)
+	    {
+	      BFD_ASSERT (resolved_dynly);
+	      relocation = 0;
+	      break;
+	    }
+	  else if (resolved_to_const || resolved_local)
+	    {
+	      relocation += rel->r_addend;
+	    }
+	  else if (resolved_dynly)
+	    {
+	      unresolved_reloc = false;
+	      BFD_ASSERT ((plt && h && h->plt.offset != MINUS_ONE)
+			  && rel->r_addend == 0);
+	      relocation = sec_addr (plt) + h->plt.offset;
+	    }
+
+	  break;
+
+	case R_LARCH_PCREL20_S2:
+	  unresolved_reloc = false;
+	  if (h && h->plt.offset != MINUS_ONE)
+	    relocation = sec_addr (plt) + h->plt.offset;
+	  else
+	    relocation += rel->r_addend;
+	  relocation -= pc;
+	  break;
+
+	case R_LARCH_PCALA_HI20:
+	  unresolved_reloc = false;
+	  if (h && h->plt.offset != MINUS_ONE)
+	    relocation = sec_addr (plt) + h->plt.offset;
+	  else
+	    relocation += rel->r_addend;
+
+	  RELOCATE_CALC_PC32_HI20 (relocation, pc);
+	  break;
+
+	case R_LARCH_TLS_LE_HI20_R:
+	  relocation += rel->r_addend;
+	  relocation -= elf_hash_table (info)->tls_sec->vma;
+	  RELOCATE_TLS_TP32_HI20 (relocation);
+	  break;
+
+	case R_LARCH_PCALA_LO12:
+	  /* Not support if sym_addr in 2k page edge.
+	     pcalau12i pc_hi20 (sym_addr)
+	     ld.w/d pc_lo12 (sym_addr)
+	     ld.w/d pc_lo12 (sym_addr + x)
+	     ...
+	     can not calc correct address
+	     if sym_addr < 0x800 && sym_addr + x >= 0x800.  */
+
+	  if (h && h->plt.offset != MINUS_ONE)
+	    relocation = sec_addr (plt) + h->plt.offset;
+	  else
+	    relocation += rel->r_addend;
+
+	  /* For 2G jump, generate pcalau12i, jirl.  */
+	  /* If use jirl, turns to R_LARCH_B16.  */
+	  uint32_t insn = bfd_get (32, input_bfd, contents + rel->r_offset);
+	  if ((insn & 0x4c000000) == 0x4c000000)
+	    {
+	      relocation &= 0xfff;
+	      /* Signed extend.  */
+	      relocation = (relocation ^ 0x800) - 0x800;
+
+	      rel->r_info = ELFNN_R_INFO (r_symndx, R_LARCH_B16);
+	      howto = loongarch_elf_rtype_to_howto (input_bfd, R_LARCH_B16);
+	    }
+	  break;
+
+	case R_LARCH_PCALA64_HI12:
+	  pc -= 4;
+	  /* Fall through.  */
+	case R_LARCH_PCALA64_LO20:
+	  if (h && h->plt.offset != MINUS_ONE)
+	    relocation = sec_addr (plt) + h->plt.offset;
+	  else
+	    relocation += rel->r_addend;
+
+	  RELOCATE_CALC_PC64_HI32 (relocation, pc - 8);
+
+	  break;
+
+	case R_LARCH_GOT_PC_HI20:
+	case R_LARCH_GOT_HI20:
+	  /* Calc got offset.  */
+	    {
+	      unresolved_reloc = false;
+	      BFD_ASSERT (rel->r_addend == 0);
+
+	      bfd_vma got_off = 0;
+	      if (h != NULL)
+		{
+		  /* GOT ref or ifunc.  */
+		  BFD_ASSERT (h->got.offset != MINUS_ONE
+			      || h->type == STT_GNU_IFUNC);
+
+		  got_off = h->got.offset  & (~(bfd_vma)1);
+		  /* Hidden symbol not has got entry,
+		   * only got.plt entry so it is (plt - got).  */
+		  if (h->got.offset == MINUS_ONE && h->type == STT_GNU_IFUNC)
+		    {
+		      bfd_vma idx;
+		      if (htab->elf.splt != NULL)
+			{
+			  idx = (h->plt.offset - PLT_HEADER_SIZE)
+			    / PLT_ENTRY_SIZE;
+			  got_off = sec_addr (htab->elf.sgotplt)
+			    + GOTPLT_HEADER_SIZE
+			    + (idx * GOT_ENTRY_SIZE)
+			    - sec_addr (htab->elf.sgot);
+			}
+		      else
+			{
+			  idx = h->plt.offset / PLT_ENTRY_SIZE;
+			  got_off = sec_addr (htab->elf.sgotplt)
+			    + (idx * GOT_ENTRY_SIZE)
+			    - sec_addr (htab->elf.sgot);
+			}
+		    }
+
+		  if ((h->got.offset & 1) == 0)
+		    {
+		      /* We need to generate a R_LARCH_RELATIVE reloc once
+		       * in loongarch_elf_finish_dynamic_symbol or now,
+		       * call finish_dyn && nopic
+		       * or !call finish_dyn && pic.  */
+		      if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (is_dyn,
+							    bfd_link_pic (info),
+							    h)
+			  && bfd_link_pic (info)
+			  && SYMBOL_REFERENCES_LOCAL (info, h))
+			{
+			  Elf_Internal_Rela rela;
+			  rela.r_offset = sec_addr (got) + got_off;
+			  rela.r_info = ELFNN_R_INFO (0, R_LARCH_RELATIVE);
+			  rela.r_addend = relocation;
+			  loongarch_elf_append_rela (output_bfd,
+						     htab->elf.srelgot, &rela);
+			}
+		      h->got.offset |= 1;
+		      bfd_put_NN (output_bfd, relocation,
+				  got->contents + got_off);
+		    }
+		}
+	      else
+		{
+		  BFD_ASSERT (local_got_offsets
+			      && local_got_offsets[r_symndx] != MINUS_ONE);
+
+		  got_off = local_got_offsets[r_symndx] & (~(bfd_vma)1);
+		  if ((local_got_offsets[r_symndx] & 1) == 0)
+		    {
+		      if (bfd_link_pic (info))
+			{
+			  Elf_Internal_Rela rela;
+			  rela.r_offset = sec_addr (got) + got_off;
+			  rela.r_info = ELFNN_R_INFO (0, R_LARCH_RELATIVE);
+			  rela.r_addend = relocation;
+			  loongarch_elf_append_rela (output_bfd,
+						     htab->elf.srelgot, &rela);
+			}
+		      local_got_offsets[r_symndx] |= 1;
+		    }
+		  bfd_put_NN (output_bfd, relocation, got->contents + got_off);
+		}
+
+	      relocation = got_off + sec_addr (got);
+	    }
+
+	  if (r_type == R_LARCH_GOT_PC_HI20)
+	    RELOCATE_CALC_PC32_HI20 (relocation, pc);
+
+	  break;
+
+	case R_LARCH_GOT_PC_LO12:
+	case R_LARCH_GOT64_PC_LO20:
+	case R_LARCH_GOT64_PC_HI12:
+	case R_LARCH_GOT_LO12:
+	case R_LARCH_GOT64_LO20:
+	case R_LARCH_GOT64_HI12:
+	    {
+	      unresolved_reloc = false;
+	      bfd_vma got_off;
+	      if (h)
+		got_off = h->got.offset & (~(bfd_vma)1);
+	      else
+		got_off = local_got_offsets[r_symndx] & (~(bfd_vma)1);
+
+	      if (h && h->got.offset == MINUS_ONE && h->type == STT_GNU_IFUNC)
+		{
+		  bfd_vma idx;
+		  if (htab->elf.splt != NULL)
+		    idx = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
+		  else
+		    idx = h->plt.offset / PLT_ENTRY_SIZE;
+
+		  got_off = sec_addr (htab->elf.sgotplt)
+		    + GOTPLT_HEADER_SIZE
+		    + (idx * GOT_ENTRY_SIZE)
+		    - sec_addr (htab->elf.sgot);
+		}
+
+	      relocation = got_off + sec_addr (got);
+	    }
+
+	  if (r_type == R_LARCH_GOT64_PC_HI12)
+	    RELOCATE_CALC_PC64_HI32 (relocation, pc - 12);
+	  else if (r_type == R_LARCH_GOT64_PC_LO20)
+	    RELOCATE_CALC_PC64_HI32 (relocation, pc - 8);
+
+	  break;
+
+	case R_LARCH_TLS_LE_HI20:
+	case R_LARCH_TLS_LE_LO12:
+	case R_LARCH_TLS_LE_LO12_R:
+	case R_LARCH_TLS_LE64_LO20:
+	case R_LARCH_TLS_LE64_HI12:
+	  BFD_ASSERT (resolved_local && elf_hash_table (info)->tls_sec);
+
+	  relocation += rel->r_addend;
+	  relocation -= elf_hash_table (info)->tls_sec->vma;
+	  break;
+
+	/* TLS IE LD/GD process separately is troublesome.
+	   When a symbol is both ie and LD/GD, h->got.off |= 1
+	   make only one type be relocated.  We must use
+	   h->got.offset |= 1 and h->got.offset |= 2
+	   diff IE and LD/GD.  And all (got_off & (~(bfd_vma)1))
+	   (IE LD/GD and reusable GOT reloc) must change to
+	   (got_off & (~(bfd_vma)3)), beause we use lowest 2 bits
+	   as a tag.
+	   Now, LD and GD is both GOT_TLS_GD type, LD seems to
+	   can be omitted.  */
+	case R_LARCH_TLS_IE_PC_HI20:
+	case R_LARCH_TLS_IE_HI20:
+	case R_LARCH_TLS_LD_PC_HI20:
+	case R_LARCH_TLS_LD_HI20:
+	case R_LARCH_TLS_GD_PC_HI20:
+	case R_LARCH_TLS_GD_HI20:
+	case R_LARCH_TLS_DESC_PC_HI20:
+	case R_LARCH_TLS_DESC_HI20:
+	case R_LARCH_TLS_LD_PCREL20_S2:
+	case R_LARCH_TLS_GD_PCREL20_S2:
+	case R_LARCH_TLS_DESC_PCREL20_S2:
+	  BFD_ASSERT (rel->r_addend == 0);
+	  unresolved_reloc = false;
+
+	  if (r_type == R_LARCH_TLS_IE_PC_HI20
+	      || r_type == R_LARCH_TLS_IE_HI20)
+	    is_ie = true;
+
+	  if (r_type == R_LARCH_TLS_DESC_PC_HI20
+	      || r_type == R_LARCH_TLS_DESC_HI20
+	      || r_type == R_LARCH_TLS_DESC_PCREL20_S2)
+	    is_desc = true;
+
+	  bfd_vma got_off = 0;
+	  if (h != NULL)
+	    {
+	      got_off = h->got.offset;
+	      h->got.offset |= 1;
+	    }
+	  else
+	    {
+	      got_off = local_got_offsets[r_symndx];
+	      local_got_offsets[r_symndx] |= 1;
+	    }
+
+	  BFD_ASSERT (got_off != MINUS_ONE);
+
+	  tls_type = _bfd_loongarch_elf_tls_type (input_bfd, h, r_symndx);
+
+	  /* If a tls variable is accessed in multiple ways, GD uses
+	     the first two slots of GOT, desc follows with two slots,
+	     and IE uses one slot at the end.  */
+	  desc_off = 0;
+	  if (GOT_TLS_GD_BOTH_P (tls_type))
+	    desc_off = 2 * GOT_ENTRY_SIZE;
+
+	  ie_off = 0;
+	  if (GOT_TLS_GD_BOTH_P (tls_type) && (tls_type & GOT_TLS_IE))
+	    ie_off = 4 * GOT_ENTRY_SIZE;
+	  else if (GOT_TLS_GD_ANY_P (tls_type) && (tls_type & GOT_TLS_IE))
+	    ie_off = 2 * GOT_ENTRY_SIZE;
+
+	  if ((got_off & 1) == 0)
+	    {
+	      Elf_Internal_Rela rela;
+	      asection *relgot = htab->elf.srelgot;
+	      bfd_vma tls_block_off = 0;
+
+	      if (SYMBOL_REFERENCES_LOCAL (info, h))
+		{
+		  BFD_ASSERT (elf_hash_table (info)->tls_sec);
+		  tls_block_off = relocation
+		      - elf_hash_table (info)->tls_sec->vma;
+		}
+
+	      if (tls_type & GOT_TLS_GD)
+		{
+		  rela.r_offset = sec_addr (got) + got_off;
+		  rela.r_addend = 0;
+		  if (SYMBOL_REFERENCES_LOCAL (info, h))
+		    {
+		      /* Local sym, used in exec, set module id 1.  */
+		      if (bfd_link_executable (info))
+			bfd_put_NN (output_bfd, 1, got->contents + got_off);
+		      else
+			{
+			  rela.r_info = ELFNN_R_INFO (0, R_LARCH_TLS_DTPMODNN);
+			  loongarch_elf_append_rela (output_bfd, relgot, &rela);
+			}
+
+		      bfd_put_NN (output_bfd, tls_block_off,
+				  got->contents + got_off + GOT_ENTRY_SIZE);
+		    }
+		  /* Dynamic resolved.  */
+		  else
+		    {
+		      /* Dynamic relocate module id.  */
+		      rela.r_info = ELFNN_R_INFO (h->dynindx,
+						  R_LARCH_TLS_DTPMODNN);
+		      loongarch_elf_append_rela (output_bfd, relgot, &rela);
+
+		      /* Dynamic relocate offset of block.  */
+		      rela.r_offset += GOT_ENTRY_SIZE;
+		      rela.r_info = ELFNN_R_INFO (h->dynindx,
+						  R_LARCH_TLS_DTPRELNN);
+		      loongarch_elf_append_rela (output_bfd, relgot, &rela);
+		    }
+		}
+	      if (tls_type & GOT_TLS_GDESC)
+		{
+		  /* Unless it is a static link, DESC always emits a
+		     dynamic relocation.  */
+		  int indx = h && h->dynindx != -1 ? h->dynindx : 0;
+		  rela.r_offset = sec_addr (got) + got_off + desc_off;
+		  rela.r_addend = 0;
+		  if (indx == 0)
+		    rela.r_addend = relocation - elf_hash_table (info)->tls_sec->vma;
+
+		  rela.r_info = ELFNN_R_INFO (indx, R_LARCH_TLS_DESCNN);
+		  loongarch_elf_append_rela (output_bfd, relgot, &rela);
+		  bfd_put_NN (output_bfd, 0,
+			      got->contents + got_off + desc_off);
+		}
+	      if (tls_type & GOT_TLS_IE)
+		{
+		  rela.r_offset = sec_addr (got) + got_off + ie_off;
+		  if (SYMBOL_REFERENCES_LOCAL (info, h))
+		    {
+		      /* Local sym, used in exec, set module id 1.  */
+		      if (!bfd_link_executable (info))
+			{
+			  rela.r_info = ELFNN_R_INFO (0, R_LARCH_TLS_TPRELNN);
+			  rela.r_addend = tls_block_off;
+			  loongarch_elf_append_rela (output_bfd, relgot, &rela);
+			}
+
+		      bfd_put_NN (output_bfd, tls_block_off,
+				  got->contents + got_off + ie_off);
+		    }
+		  /* Dynamic resolved.  */
+		  else
+		    {
+		      /* Dynamic relocate offset of block.  */
+		      rela.r_info = ELFNN_R_INFO (h->dynindx,
+						  R_LARCH_TLS_TPRELNN);
+		      rela.r_addend = 0;
+		      loongarch_elf_append_rela (output_bfd, relgot, &rela);
+		    }
+		}
+	    }
+	  relocation = (got_off & (~(bfd_vma)1)) + sec_addr (got);
+	  if (is_desc)
+	    relocation += desc_off;
+	  else if (is_ie)
+	    relocation += ie_off;
+
+	  if (r_type == R_LARCH_TLS_LD_PC_HI20
+	      || r_type == R_LARCH_TLS_GD_PC_HI20
+	      || r_type == R_LARCH_TLS_IE_PC_HI20
+	      || r_type == R_LARCH_TLS_DESC_PC_HI20)
+	    RELOCATE_CALC_PC32_HI20 (relocation, pc);
+	  else if (r_type == R_LARCH_TLS_LD_PCREL20_S2
+	      || r_type == R_LARCH_TLS_GD_PCREL20_S2
+	      || r_type == R_LARCH_TLS_DESC_PCREL20_S2)
+	    relocation -= pc;
+	  /* else {} ABS relocations.  */
+	  break;
+
+	case R_LARCH_TLS_DESC_PC_LO12:
+	case R_LARCH_TLS_DESC64_PC_LO20:
+	case R_LARCH_TLS_DESC64_PC_HI12:
+	case R_LARCH_TLS_DESC_LO12:
+	case R_LARCH_TLS_DESC64_LO20:
+	case R_LARCH_TLS_DESC64_HI12:
+	  {
+	    unresolved_reloc = false;
+
+	    if (h)
+	      relocation = sec_addr (got) + (h->got.offset & (~(bfd_vma)1));
+	    else
+	      relocation = sec_addr (got)
+			   + (local_got_offsets[r_symndx] & (~(bfd_vma)1));
+
+	    tls_type = _bfd_loongarch_elf_tls_type (input_bfd, h, r_symndx);
+	    /* Use both TLS_GD and TLS_DESC.  */
+	    if ((tls_type & GOT_TLS_GD) && (tls_type & GOT_TLS_GDESC))
+	      relocation += 2 * GOT_ENTRY_SIZE;
+
+	    if (r_type == R_LARCH_TLS_DESC64_PC_LO20)
+	      RELOCATE_CALC_PC64_HI32 (relocation, pc - 8);
+	    else if (r_type == R_LARCH_TLS_DESC64_PC_HI12)
+	      RELOCATE_CALC_PC64_HI32 (relocation, pc - 12);
+
+	    break;
+	  }
+
+	case R_LARCH_TLS_DESC_LD:
+	case R_LARCH_TLS_DESC_CALL:
+	  unresolved_reloc = false;
+	  break;
+
+	case R_LARCH_TLS_IE_PC_LO12:
+	case R_LARCH_TLS_IE64_PC_LO20:
+	case R_LARCH_TLS_IE64_PC_HI12:
+	case R_LARCH_TLS_IE_LO12:
+	case R_LARCH_TLS_IE64_LO20:
+	case R_LARCH_TLS_IE64_HI12:
+	  unresolved_reloc = false;
+
+	  if (h)
+	    relocation = sec_addr (got) + (h->got.offset & (~(bfd_vma)1));
+	  else
+	    relocation = sec_addr (got)
+	      + (local_got_offsets[r_symndx] & (~(bfd_vma)1));
+
+	  tls_type = _bfd_loongarch_elf_tls_type (input_bfd, h, r_symndx);
+	  /* Use TLS_GD TLS_DESC and TLS_IE.  */
+	  if (GOT_TLS_GD_BOTH_P (tls_type) && (tls_type & GOT_TLS_IE))
+	    relocation += 4 * GOT_ENTRY_SIZE;
+	  /* Use GOT_TLS_GD_ANY_P (tls_type) and TLS_IE.  */
+	  else if (GOT_TLS_GD_ANY_P (tls_type) && (tls_type & GOT_TLS_IE))
+	    relocation += 2 * GOT_ENTRY_SIZE;
+
+	  if (r_type == R_LARCH_TLS_IE64_PC_LO20)
+	    RELOCATE_CALC_PC64_HI32 (relocation, pc - 8);
+	  else if (r_type == R_LARCH_TLS_IE64_PC_HI12)
+	    RELOCATE_CALC_PC64_HI32 (relocation, pc - 12);
+
+	  break;
+
+	case R_LARCH_RELAX:
+	case R_LARCH_ALIGN:
+	  r = bfd_reloc_continue;
+	  unresolved_reloc = false;
+	  break;
+
+	default:
+	  break;
+	}
+
+      if (fatal)
+	break;
+
+      do
+	{
+	  /* 'unresolved_reloc' means we haven't done it yet.
+	     We need help of dynamic linker to fix this memory location up.  */
+	  if (!unresolved_reloc)
+	    break;
+
+	  if (_bfd_elf_section_offset (output_bfd, info, input_section,
+				       rel->r_offset) == MINUS_ONE)
+	    /* WHY? May because it's invalid so skip checking.
+	       But why dynamic reloc a invalid section?  */
+	    break;
+
+	  if (input_section->output_section->flags & SEC_DEBUGGING)
+	    {
+	      fatal = (loongarch_reloc_is_fatal
+		       (info, input_bfd, input_section, rel, howto,
+			bfd_reloc_dangerous, is_undefweak, name,
+			"Seems dynamic linker not process "
+			"sections 'SEC_DEBUGGING'."));
+	    }
+	  if (!is_dyn)
+	    break;
+
+	  if ((info->flags & DF_TEXTREL) == 0)
+	    if (input_section->output_section->flags & SEC_READONLY)
+	      info->flags |= DF_TEXTREL;
+	}
+      while (0);
+
+      if (fatal)
+	break;
+
+      loongarch_record_one_reloc (input_bfd, input_section, r_type,
+				  rel->r_offset, sym, h, rel->r_addend);
+
+      if (r != bfd_reloc_continue)
+	r = perform_relocation (rel, input_section, howto, relocation,
+				input_bfd, contents);
+
+      switch (r)
+	{
+	case bfd_reloc_dangerous:
+	case bfd_reloc_continue:
+	case bfd_reloc_ok:
+	  continue;
+
+	case bfd_reloc_overflow:
+	  /* Overflow value can't be filled in.  */
+	  loongarch_dump_reloc_record (info->callbacks->info);
+	  info->callbacks->reloc_overflow
+	    (info, h ? &h->root : NULL, name, howto->name, rel->r_addend,
+	     input_bfd, input_section, rel->r_offset);
+	  break;
+
+	case bfd_reloc_outofrange:
+	  /* Stack state incorrect.  */
+	  loongarch_dump_reloc_record (info->callbacks->info);
+	  info->callbacks->info
+	    ("%X%H: Internal stack state is incorrect.\n"
+	     "Want to push to full stack or pop from empty stack?\n",
+	     input_bfd, input_section, rel->r_offset);
+	  break;
+
+	case bfd_reloc_notsupported:
+	  info->callbacks->info ("%X%H: Unknown relocation type.\n", input_bfd,
+				 input_section, rel->r_offset);
+	  break;
+
+	default:
+	  info->callbacks->info ("%X%H: Internal: unknown error.\n", input_bfd,
+				 input_section, rel->r_offset);
+	  break;
+	}
+
+      fatal = true;
+    }
+
+  return !fatal;
+}
+
+static bool
+loongarch_relax_delete_bytes (bfd *abfd,
+			  asection *sec,
+			  bfd_vma addr,
+			  size_t count,
+			  struct bfd_link_info *link_info)
+{
+  unsigned int i, symcount;
+  bfd_vma toaddr = sec->size;
+  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (abfd);
+  Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  unsigned int sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
+  struct bfd_elf_section_data *data = elf_section_data (sec);
+  bfd_byte *contents = data->this_hdr.contents;
+
+  /* Actually delete the bytes.  */
+  sec->size -= count;
+  memmove (contents + addr, contents + addr + count, toaddr - addr - count);
+
+  /* Adjust the location of all of the relocs.  Note that we need not
+     adjust the addends, since all PC-relative references must be against
+     symbols, which we will adjust below.  */
+  for (i = 0; i < sec->reloc_count; i++)
+    if (data->relocs[i].r_offset > addr && data->relocs[i].r_offset < toaddr)
+      data->relocs[i].r_offset -= count;
+
+  /* Adjust the local symbols defined in this section.  */
+  for (i = 0; i < symtab_hdr->sh_info; i++)
+    {
+      Elf_Internal_Sym *sym = (Elf_Internal_Sym *) symtab_hdr->contents + i;
+      if (sym->st_shndx == sec_shndx)
+	{
+	  /* If the symbol is in the range of memory we just moved, we
+	     have to adjust its value.  */
+	  if (sym->st_value > addr && sym->st_value <= toaddr)
+	    sym->st_value -= count;
+
+	  /* If the symbol *spans* the bytes we just deleted (i.e. its
+	     *end* is in the moved bytes but its *start* isn't), then we
+	     must adjust its size.
+
+	     This test needs to use the original value of st_value, otherwise
+	     we might accidentally decrease size when deleting bytes right
+	     before the symbol.  But since deleted relocs can't span across
+	     symbols, we can't have both a st_value and a st_size decrease,
+	     so it is simpler to just use an else.  */
+	  else if (sym->st_value <= addr
+		   && sym->st_value + sym->st_size > addr
+		   && sym->st_value + sym->st_size <= toaddr)
+	    sym->st_size -= count;
+	}
+    }
+
+  /* Now adjust the global symbols defined in this section.  */
+  symcount = ((symtab_hdr->sh_size / sizeof (ElfNN_External_Sym))
+	      - symtab_hdr->sh_info);
+
+  for (i = 0; i < symcount; i++)
+    {
+      struct elf_link_hash_entry *sym_hash = sym_hashes[i];
+
+      /* The '--wrap SYMBOL' option is causing a pain when the object file,
+	 containing the definition of __wrap_SYMBOL, includes a direct
+	 call to SYMBOL as well. Since both __wrap_SYMBOL and SYMBOL reference
+	 the same symbol (which is __wrap_SYMBOL), but still exist as two
+	 different symbols in 'sym_hashes', we don't want to adjust
+	 the global symbol __wrap_SYMBOL twice.
+
+	 The same problem occurs with symbols that are versioned_hidden, as
+	 foo becomes an alias for foo@BAR, and hence they need the same
+	 treatment.  */
+      if (link_info->wrap_hash != NULL
+	  || sym_hash->versioned != unversioned)
+	{
+	  struct elf_link_hash_entry **cur_sym_hashes;
+
+	  /* Loop only over the symbols which have already been checked.  */
+	  for (cur_sym_hashes = sym_hashes; cur_sym_hashes < &sym_hashes[i];
+	       cur_sym_hashes++)
+	    {
+	      /* If the current symbol is identical to 'sym_hash', that means
+		 the symbol was already adjusted (or at least checked).  */
+	      if (*cur_sym_hashes == sym_hash)
+		break;
+	    }
+	  /* Don't adjust the symbol again.  */
+	  if (cur_sym_hashes < &sym_hashes[i])
+	    continue;
+	}
+
+      if ((sym_hash->root.type == bfd_link_hash_defined
+	   || sym_hash->root.type == bfd_link_hash_defweak)
+	  && sym_hash->root.u.def.section == sec)
+	{
+	  /* As above, adjust the value if needed.  */
+	  if (sym_hash->root.u.def.value > addr
+	      && sym_hash->root.u.def.value <= toaddr)
+	    sym_hash->root.u.def.value -= count;
+
+	  /* As above, adjust the size if needed.  */
+	  else if (sym_hash->root.u.def.value <= addr
+		   && sym_hash->root.u.def.value + sym_hash->size > addr
+		   && sym_hash->root.u.def.value + sym_hash->size <= toaddr)
+	    sym_hash->size -= count;
+	}
+    }
+
+  return true;
+}
+/*  Relax tls le, mainly relax the process of getting TLS le symbolic addresses.
+  there are three situations in which an assembly instruction sequence needs to
+  be relaxed:
+  symbol address = tp + offset (symbol),offset (symbol) = le_hi20_r + le_lo12_r
+
+  Case 1:
+  in this case, the rd register in the st.{w/d} instruction does not store the
+  full tls symbolic address, but tp + le_hi20_r, which is a part of the tls
+  symbolic address, and then obtains the rd + le_lo12_r address through the
+  st.w instruction feature.
+  this is the full tls symbolic address (tp + le_hi20_r + le_lo12_r).
+
+  before relax:				after relax:
+
+  lu12i.w   $rd,%le_hi20_r (sym)	==> (instruction deleted)
+  add.{w/d} $rd,$rd,$tp,%le_add_r (sym) ==> (instruction deleted)
+  st.{w/d}  $rs,$rd,%le_lo12_r (sym)    ==> st.{w/d}   $rs,$tp,%le_lo12_r (sym)
+
+  Case 2:
+  in this case, ld.{w/d} is similar to st.{w/d} in case1.
+
+  before relax:				after relax:
+
+  lu12i.w   $rd,%le_hi20_r (sym)	==> (instruction deleted)
+  add.{w/d} $rd,$rd,$tp,%le_add_r (sym) ==> (instruction deleted)
+  ld.{w/d}  $rs,$rd,%le_lo12_r (sym)    ==> ld.{w/d}   $rs,$tp,%le_lo12_r (sym)
+
+  Case 3:
+  in this case,the rs register in addi.{w/d} stores the full address of the tls
+  symbol (tp + le_hi20_r + le_lo12_r).
+
+  before relax:				after relax:
+
+  lu12i.w    $rd,%le_hi20_r (sym)	 ==> (instruction deleted)
+  add.{w/d}  $rd,$rd,$tp,%le_add_r (sym) ==> (instruction deleted)
+  addi.{w/d} $rs,$rd,%le_lo12_r (sym)    ==> addi.{w/d} $rs,$tp,%le_lo12_r (sym)
+*/
+static bool
+loongarch_relax_tls_le (bfd *abfd, asection *sec,
+			Elf_Internal_Rela *rel,
+			struct bfd_link_info *link_info,
+			bfd_vma symval)
+{
+  bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
+  uint32_t insn = bfd_get (32, abfd, contents + rel->r_offset);
+  static uint32_t insn_rj,insn_rd;
+  symval = symval - elf_hash_table (link_info)->tls_sec->vma;
+  /* Whether the symbol offset is in the interval (offset < 0x800).  */
+  if (ELFNN_R_TYPE ((rel + 1)->r_info) == R_LARCH_RELAX && (symval < 0x800))
+    {
+      switch (ELFNN_R_TYPE (rel->r_info))
+	{
+	case R_LARCH_TLS_LE_HI20_R:
+	case R_LARCH_TLS_LE_ADD_R:
+	  /* delete insn.  */
+	  rel->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
+	  loongarch_relax_delete_bytes (abfd, sec, rel->r_offset, 4, link_info);
+	  break;
+	case R_LARCH_TLS_LE_LO12_R:
+	  /* Change rj to $tp.  */
+	  insn_rj = 0x2 << 5;
+	  /* Get rd register.  */
+	  insn_rd = insn & 0x1f;
+	  /* Write symbol offset.  */
+	  symval <<= 10;
+	  /* Writes the modified instruction.  */
+	  insn = insn & 0xffc00000;
+	  insn = insn | symval | insn_rj | insn_rd;
+	  bfd_put (32, abfd, insn, contents + rel->r_offset);
+	  break;
+	default:
+	  break;
+	}
+    }
+  return true;
+}
+
+/* Relax pcalau12i,addi.d => pcaddi.  */
+static bool
+loongarch_relax_pcala_addi (bfd *abfd, asection *sec, asection *sym_sec,
+			    Elf_Internal_Rela *rel_hi, bfd_vma symval,
+			    struct bfd_link_info *info, bool *again,
+			    bfd_vma max_alignment)
+{
+  bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
+  Elf_Internal_Rela *rel_lo = rel_hi + 2;
+  uint32_t pca = bfd_get (32, abfd, contents + rel_hi->r_offset);
+  uint32_t add = bfd_get (32, abfd, contents + rel_lo->r_offset);
+  uint32_t rd = pca & 0x1f;
+
+  /* This section's output_offset need to subtract the bytes of instructions
+     relaxed by the previous sections, so it needs to be updated beforehand.
+     size_input_section already took care of updating it after relaxation,
+     so we additionally update once here.  */
+  sec->output_offset = sec->output_section->size;
+  bfd_vma pc = sec_addr (sec) + rel_hi->r_offset;
+
+  /* If pc and symbol not in the same segment, add/sub segment alignment.
+     FIXME: if there are multiple readonly segments? How to determine if
+     two sections are in the same segment.  */
+  if (!(sym_sec->flags & SEC_READONLY))
+    {
+      max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
+							  : max_alignment;
+      if (symval > pc)
+	pc -= max_alignment;
+      else if (symval < pc)
+	pc += max_alignment;
+    }
+  else
+    if (symval > pc)
+      pc -= max_alignment;
+    else if (symval < pc)
+      pc += max_alignment;
+
+  const uint32_t addi_d = 0x02c00000;
+  const uint32_t pcaddi = 0x18000000;
+
+  /* Is pcalau12i + addi.d insns?  */
+  if ((ELFNN_R_TYPE (rel_lo->r_info) != R_LARCH_PCALA_LO12)
+      || (ELFNN_R_TYPE ((rel_lo + 1)->r_info) != R_LARCH_RELAX)
+      || (ELFNN_R_TYPE ((rel_hi + 1)->r_info) != R_LARCH_RELAX)
+      || (rel_hi->r_offset + 4 != rel_lo->r_offset)
+      || ((add & addi_d) != addi_d)
+      /* Is pcalau12i $rd + addi.d $rd,$rd?  */
+      || ((add & 0x1f) != rd)
+      || (((add >> 5) & 0x1f) != rd)
+      /* Can be relaxed to pcaddi?  */
+      || (symval & 0x3) /* 4 bytes align.  */
+      || ((bfd_signed_vma)(symval - pc) < (bfd_signed_vma)(int32_t)0xffe00000)
+      || ((bfd_signed_vma)(symval - pc) > (bfd_signed_vma)(int32_t)0x1ffffc))
+    return false;
+
+  /* Continue next relax trip.  */
+  *again = true;
+
+  pca = pcaddi | rd;
+  bfd_put (32, abfd, pca, contents + rel_hi->r_offset);
+
+  /* Adjust relocations.  */
+  rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
+				 R_LARCH_PCREL20_S2);
+  rel_lo->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
+
+  loongarch_relax_delete_bytes (abfd, sec, rel_lo->r_offset, 4, info);
+
+  return true;
+}
+
+/* Relax pcalau12i,ld.d => pcalau12i,addi.d.  */
+static bool
+loongarch_relax_pcala_ld (bfd *abfd, asection *sec,
+		Elf_Internal_Rela *rel_hi)
+{
+  bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
+  Elf_Internal_Rela *rel_lo = rel_hi + 2;
+  uint32_t pca = bfd_get (32, abfd, contents + rel_hi->r_offset);
+  uint32_t ld = bfd_get (32, abfd, contents + rel_lo->r_offset);
+  uint32_t rd = pca & 0x1f;
+  const uint32_t ld_d = 0x28c00000;
+  uint32_t addi_d = 0x02c00000;
+
+  if ((ELFNN_R_TYPE (rel_lo->r_info) != R_LARCH_GOT_PC_LO12)
+      || (ELFNN_R_TYPE ((rel_lo + 1)->r_info) != R_LARCH_RELAX)
+      || (ELFNN_R_TYPE ((rel_hi + 1)->r_info) != R_LARCH_RELAX)
+      || (rel_hi->r_offset + 4 != rel_lo->r_offset)
+      || ((ld & 0x1f) != rd)
+      || (((ld >> 5) & 0x1f) != rd)
+      || ((ld & ld_d) != ld_d))
+    return false;
+
+  addi_d = addi_d | (rd << 5) | rd;
+  bfd_put (32, abfd, addi_d, contents + rel_lo->r_offset);
+
+  rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
+				 R_LARCH_PCALA_HI20);
+  rel_lo->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_lo->r_info),
+				 R_LARCH_PCALA_LO12);
+  return true;
+}
+
+/* Called by after_allocation to set the information of data segment
+   before relaxing.  */
+
+void
+bfd_elfNN_loongarch_set_data_segment_info (struct bfd_link_info *info,
+				     int *data_segment_phase)
+{
+  struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info);
+  htab->data_segment_phase = data_segment_phase;
+}
+
+/* Implement R_LARCH_ALIGN by deleting excess alignment NOPs.
+   Once we've handled an R_LARCH_ALIGN, we can't relax anything else.  */
+static bool
+loongarch_relax_align (bfd *abfd, asection *sec,
+			asection *sym_sec,
+			struct bfd_link_info *link_info,
+			Elf_Internal_Rela *rel,
+			bfd_vma symval)
+{
+  bfd_vma  addend, max = 0, alignment = 1;
+
+  int sym_index = ELFNN_R_SYM (rel->r_info);
+  if (sym_index > 0)
+    {
+      alignment = 1 << (rel->r_addend & 0xff);
+      max = rel->r_addend >> 8;
+    }
+  else
+    alignment = rel->r_addend + 4;
+
+  addend = alignment - 4; /* The bytes of NOPs added by R_LARCH_ALIGN.  */
+  symval -= addend; /* The address of first NOP added by R_LARCH_ALIGN.  */
+  bfd_vma aligned_addr = ((symval - 1) & ~(alignment - 1)) + alignment;
+  bfd_vma need_nop_bytes = aligned_addr - symval; /* */
+
+  /* Make sure there are enough NOPs to actually achieve the alignment.  */
+  if (addend < need_nop_bytes)
+    {
+      _bfd_error_handler
+	(_("%pB(%pA+%#" PRIx64 "): %" PRId64 " bytes required for alignment "
+	   "to %" PRId64 "-byte boundary, but only %" PRId64 " present"),
+	 abfd, sym_sec, (uint64_t) rel->r_offset,
+	 (int64_t) need_nop_bytes, (int64_t) alignment, (int64_t) addend);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+
+  /* Once we've handled an R_LARCH_ALIGN in a section,
+     we can't relax anything else in this section.  */
+  sec->sec_flg0 = true;
+  rel->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
+
+  /* If skipping more bytes than the specified maximum,
+     then the alignment is not done at all and delete all NOPs.  */
+  if (max > 0 && need_nop_bytes > max)
+    return loongarch_relax_delete_bytes (abfd, sec, rel->r_offset,
+					  addend, link_info);
+
+  /* If the number of NOPs is already correct, there's nothing to do.  */
+  if (need_nop_bytes == addend)
+    return true;
+
+  /* Delete the excess NOPs.  */
+  return loongarch_relax_delete_bytes (abfd, sec,
+					rel->r_offset + need_nop_bytes,
+					addend - need_nop_bytes, link_info);
+}
+
+/* Relax pcalau12i + addi.d of TLS LD/GD/DESC to pcaddi.  */
+static bool
+loongarch_relax_tls_ld_gd_desc (bfd *abfd, asection *sec, asection *sym_sec,
+				Elf_Internal_Rela *rel_hi, bfd_vma symval,
+				struct bfd_link_info *info, bool *again,
+				bfd_vma max_alignment)
+{
+  bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
+  Elf_Internal_Rela *rel_lo = rel_hi + 2;
+  uint32_t pca = bfd_get (32, abfd, contents + rel_hi->r_offset);
+  uint32_t add = bfd_get (32, abfd, contents + rel_lo->r_offset);
+  uint32_t rd = pca & 0x1f;
+
+  /* This section's output_offset need to subtract the bytes of instructions
+     relaxed by the previous sections, so it needs to be updated beforehand.
+     size_input_section already took care of updating it after relaxation,
+     so we additionally update once here.  */
+  sec->output_offset = sec->output_section->size;
+  bfd_vma pc = sec_addr (sec) + rel_hi->r_offset;
+
+  /* If pc and symbol not in the same segment, add/sub segment alignment.
+     FIXME: if there are multiple readonly segments?  */
+  if (!(sym_sec->flags & SEC_READONLY))
+    {
+      max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
+							  : max_alignment;
+      if (symval > pc)
+	pc -= max_alignment;
+      else if (symval < pc)
+	pc += max_alignment;
+    }
+  else
+    if (symval > pc)
+      pc -= max_alignment;
+    else if (symval < pc)
+      pc += max_alignment;
+
+  const uint32_t addi_d = 0x02c00000;
+  const uint32_t pcaddi = 0x18000000;
+
+  /* Is pcalau12i + addi.d insns?  */
+  if ((ELFNN_R_TYPE (rel_lo->r_info) != R_LARCH_GOT_PC_LO12
+	&& ELFNN_R_TYPE (rel_lo->r_info) != R_LARCH_TLS_DESC_PC_LO12)
+      || (ELFNN_R_TYPE ((rel_lo + 1)->r_info) != R_LARCH_RELAX)
+      || (ELFNN_R_TYPE ((rel_hi + 1)->r_info) != R_LARCH_RELAX)
+      || (rel_hi->r_offset + 4 != rel_lo->r_offset)
+      || ((add & addi_d) != addi_d)
+      /* Is pcalau12i $rd + addi.d $rd,$rd?  */
+      || ((add & 0x1f) != rd)
+      || (((add >> 5) & 0x1f) != rd)
+      /* Can be relaxed to pcaddi?  */
+      || (symval & 0x3) /* 4 bytes align.  */
+      || ((bfd_signed_vma)(symval - pc) < (bfd_signed_vma)(int32_t)0xffe00000)
+      || ((bfd_signed_vma)(symval - pc) > (bfd_signed_vma)(int32_t)0x1ffffc))
+    return false;
+
+  /* Continue next relax trip.  */
+  *again = true;
+
+  pca = pcaddi | rd;
+  bfd_put (32, abfd, pca, contents + rel_hi->r_offset);
+
+  /* Adjust relocations.  */
+  switch (ELFNN_R_TYPE (rel_hi->r_info))
+    {
+    case R_LARCH_TLS_LD_PC_HI20:
+      rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
+				      R_LARCH_TLS_LD_PCREL20_S2);
+      break;
+    case R_LARCH_TLS_GD_PC_HI20:
+      rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
+				      R_LARCH_TLS_GD_PCREL20_S2);
+      break;
+    case R_LARCH_TLS_DESC_PC_HI20:
+      rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
+				      R_LARCH_TLS_DESC_PCREL20_S2);
+      break;
+    default:
+      break;
+    }
+  rel_lo->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
+
+  loongarch_relax_delete_bytes (abfd, sec, rel_lo->r_offset, 4, info);
+
+  return true;
+}
+
+/* Traverse all output sections and return the max alignment.  */
+
+static bfd_vma
+loongarch_get_max_alignment (asection *sec)
+{
+  asection *o;
+  unsigned int max_alignment_power = 0;
+
+  for (o = sec->output_section->owner->sections; o != NULL; o = o->next)
+      if (o->alignment_power > max_alignment_power)
+	max_alignment_power = o->alignment_power;
+
+  return (bfd_vma) 1 << max_alignment_power;
+}
+
+static bool
+loongarch_elf_relax_section (bfd *abfd, asection *sec,
+			       struct bfd_link_info *info,
+			       bool *again)
+{
+  struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info);
+  struct bfd_elf_section_data *data = elf_section_data (sec);
+  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (abfd);
+  Elf_Internal_Rela *relocs;
+  *again = false;
+  bfd_vma max_alignment = 0;
+
+  if (bfd_link_relocatable (info)
+      || sec->sec_flg0
+      || (sec->flags & SEC_RELOC) == 0
+      || sec->reloc_count == 0
+      || (info->disable_target_specific_optimizations
+	  && info->relax_pass == 0)
+      /* The exp_seg_relro_adjust is enum phase_enum (0x4),
+	 and defined in ld/ldexp.h.  */
+      || *(htab->data_segment_phase) == 4)
+    return true;
+
+  if (data->relocs)
+    relocs = data->relocs;
+  else if (!(relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
+						 info->keep_memory)))
+    return true;
+
+  if (!data->this_hdr.contents
+      && !bfd_malloc_and_get_section (abfd, sec, &data->this_hdr.contents))
+    return true;
+
+  if (symtab_hdr->sh_info != 0
+      && !symtab_hdr->contents
+      && !(symtab_hdr->contents =
+	   (unsigned char *) bfd_elf_get_elf_syms (abfd, symtab_hdr,
+						   symtab_hdr->sh_info,
+						   0, NULL, NULL, NULL)))
+    return true;
+
+  data->relocs = relocs;
+
+  /* Estimate the maximum alignment for all output sections once time
+     should be enough.  */
+  max_alignment = htab->max_alignment;
+  if (max_alignment == (bfd_vma) -1)
+    {
+      max_alignment = loongarch_get_max_alignment (sec);
+      htab->max_alignment = max_alignment;
+    }
+
+  for (unsigned int i = 0; i < sec->reloc_count; i++)
+    {
+      char symtype;
+      bfd_vma symval;
+      asection *sym_sec;
+      bool local_got = false;
+      Elf_Internal_Rela *rel = relocs + i;
+      struct elf_link_hash_entry *h = NULL;
+      unsigned long r_type = ELFNN_R_TYPE (rel->r_info);
+      unsigned long r_symndx = ELFNN_R_SYM (rel->r_info);
+
+      /* Four kind of relocations:
+	 Normal: symval is the symbol address.
+	 R_LARCH_ALIGN: symval is the address of the last NOP instruction
+	 added by this relocation, and then adds 4 more.
+	 R_LARCH_CALL36: symval is the symbol address for local symbols,
+	 or the PLT entry address of the symbol. (Todo)
+	 R_LARCHL_TLS_LD/GD/DESC_PC_HI20: symval is the GOT entry address
+	 of the symbol.  */
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  Elf_Internal_Sym *sym = (Elf_Internal_Sym *)symtab_hdr->contents
+				    + r_symndx;
+	  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+	    continue;
+
+	  if (R_LARCH_TLS_LD_PC_HI20 == r_type
+	      || R_LARCH_TLS_GD_PC_HI20 == r_type
+	      || R_LARCH_TLS_DESC_PC_HI20 == r_type)
+	    {
+	      if (loongarch_can_relax_tls (info, r_type, h, abfd, r_symndx))
+		continue;
+	      else
+		{
+		  sym_sec = htab->elf.sgot;
+		  symval = elf_local_got_offsets (abfd)[r_symndx];
+		  char tls_type = _bfd_loongarch_elf_tls_type (abfd, h,
+								r_symndx);
+		  if (R_LARCH_TLS_DESC_PC_HI20 == r_type
+			&& GOT_TLS_GD_BOTH_P (tls_type))
+		    symval += 2 * GOT_ENTRY_SIZE;
+		}
+	    }
+	  else if (sym->st_shndx == SHN_UNDEF || R_LARCH_ALIGN == r_type)
+	    {
+	      sym_sec = sec;
+	      symval = rel->r_offset;
+	    }
+	  else
+	    {
+	      sym_sec = elf_elfsections (abfd)[sym->st_shndx]->bfd_section;
+	      symval = sym->st_value;
+	    }
+	  symtype = ELF_ST_TYPE (sym->st_info);
+	}
+      else
+	{
+	  r_symndx = ELFNN_R_SYM (rel->r_info) - symtab_hdr->sh_info;
+	  h = elf_sym_hashes (abfd)[r_symndx];
+
+	  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;
+
+	  /* Disable the relaxation for ifunc.  */
+	  if (h != NULL && h->type == STT_GNU_IFUNC)
+	    continue;
+
+	  /* The GOT entry of tls symbols must in current execute file or
+	     shared object.  */
+	  if (R_LARCH_TLS_LD_PC_HI20 == r_type
+	      || R_LARCH_TLS_GD_PC_HI20 == r_type
+	      || R_LARCH_TLS_DESC_PC_HI20 == r_type)
+	    {
+	      if (loongarch_can_relax_tls (info, r_type, h, abfd, r_symndx))
+		continue;
+	      else
+		{
+		  sym_sec = htab->elf.sgot;
+		  symval = h->got.offset;
+		  char tls_type = _bfd_loongarch_elf_tls_type (abfd, h,
+								r_symndx);
+		  if (R_LARCH_TLS_DESC_PC_HI20 == r_type
+			&& GOT_TLS_GD_BOTH_P (tls_type))
+		    symval += 2 * GOT_ENTRY_SIZE;
+		}
+	    }
+	  else if ((h->root.type == bfd_link_hash_defined
+		  || h->root.type == bfd_link_hash_defweak)
+		&& h->root.u.def.section != NULL
+		&& h->root.u.def.section->output_section != NULL)
+	    {
+	      symval = h->root.u.def.value;
+	      sym_sec = h->root.u.def.section;
+	    }
+	  else
+	    continue;
+
+	  if (h && SYMBOL_REFERENCES_LOCAL (info, h))
+	    local_got = true;
+	  symtype = h->type;
+	}
+
+      if (sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE
+	   && (sym_sec->flags & SEC_MERGE))
+	{
+	   if (symtype == STT_SECTION)
+	     symval += rel->r_addend;
+
+	   symval = _bfd_merged_section_offset (abfd, &sym_sec,
+				elf_section_data (sym_sec)->sec_info,
+				symval);
+
+	   if (symtype != STT_SECTION)
+	     symval += rel->r_addend;
+	}
+      /* For R_LARCH_ALIGN, symval is sec_addr (sec) + rel->r_offset
+	 + (alingmeng - 4).
+	 If r_symndx is 0, alignmeng-4 is r_addend.
+	 If r_symndx > 0, alignment-4 is 2^(r_addend & 0xff)-4.  */
+      else if (R_LARCH_ALIGN == r_type)
+	if (r_symndx > 0)
+	  symval += ((1 << (rel->r_addend & 0xff)) - 4);
+	else
+	  symval += rel->r_addend;
+      else
+	symval += rel->r_addend;
+
+      symval += sec_addr (sym_sec);
+
+      switch (r_type)
+	{
+	case R_LARCH_ALIGN:
+	  if (1 == info->relax_pass)
+	    loongarch_relax_align (abfd, sec, sym_sec, info, rel, symval);
+	  break;
+
+	case R_LARCH_DELETE:
+	  if (1 == info->relax_pass)
+	    {
+	      loongarch_relax_delete_bytes (abfd, sec, rel->r_offset, 4, info);
+	      rel->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
+	    }
+	  break;
+
+	case R_LARCH_TLS_LE_HI20_R:
+	case R_LARCH_TLS_LE_LO12_R:
+	case R_LARCH_TLS_LE_ADD_R:
+	  if (0 == info->relax_pass && (i + 2) <= sec->reloc_count)
+	    loongarch_relax_tls_le (abfd, sec, rel, info, symval);
+	  break;
+
+	case R_LARCH_PCALA_HI20:
+	  if (0 == info->relax_pass && (i + 4) <= sec->reloc_count)
+	    loongarch_relax_pcala_addi (abfd, sec, sym_sec, rel, symval,
+					info, again, max_alignment);
+	  break;
+
+	case R_LARCH_GOT_PC_HI20:
+	  if (local_got && 0 == info->relax_pass
+	      && (i + 4) <= sec->reloc_count)
+	    {
+	      if (loongarch_relax_pcala_ld (abfd, sec, rel))
+		loongarch_relax_pcala_addi (abfd, sec, sym_sec, rel, symval,
+					    info, again, max_alignment);
+	    }
+	  break;
+
+	case R_LARCH_TLS_LD_PC_HI20:
+	case R_LARCH_TLS_GD_PC_HI20:
+	case R_LARCH_TLS_DESC_PC_HI20:
+	  if (0 == info->relax_pass && (i + 4) <= sec->reloc_count)
+	    loongarch_relax_tls_ld_gd_desc (abfd, sec, sym_sec, rel, symval,
+					    info, again, max_alignment);
+	  break;
+
+	default:
+	  break;
+	}
+    }
+
+  return true;
+}
+
+/* Finish up dynamic symbol handling.  We set the contents of various
+   dynamic sections here.  */
+
+static bool
+loongarch_elf_finish_dynamic_symbol (bfd *output_bfd,
+				     struct bfd_link_info *info,
+				     struct elf_link_hash_entry *h,
+				     Elf_Internal_Sym *sym)
+{
+  struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info);
+  const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
+
+  if (h->plt.offset != MINUS_ONE)
+    {
+      size_t i, plt_idx;
+      asection *plt, *gotplt, *relplt;
+      bfd_vma got_address;
+      uint32_t plt_entry[PLT_ENTRY_INSNS];
+      bfd_byte *loc;
+      Elf_Internal_Rela rela;
+
+      if (htab->elf.splt)
+	{
+	  BFD_ASSERT ((h->type == STT_GNU_IFUNC
+		       && SYMBOL_REFERENCES_LOCAL (info, h))
+		      || h->dynindx != -1);
+
+	  plt = htab->elf.splt;
+	  gotplt = htab->elf.sgotplt;
+	  if (h->type == STT_GNU_IFUNC && SYMBOL_REFERENCES_LOCAL (info, h))
+	    relplt = htab->elf.srelgot;
+	  else
+	    relplt = htab->elf.srelplt;
+	  plt_idx = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
+	  got_address =
+	    sec_addr (gotplt) + GOTPLT_HEADER_SIZE + plt_idx * GOT_ENTRY_SIZE;
+	}
+      else /* if (htab->elf.iplt) */
+	{
+	  BFD_ASSERT (h->type == STT_GNU_IFUNC
+		      && SYMBOL_REFERENCES_LOCAL (info, h));
+
+	  plt = htab->elf.iplt;
+	  gotplt = htab->elf.igotplt;
+	  relplt = htab->elf.irelplt;
+	  plt_idx = h->plt.offset / PLT_ENTRY_SIZE;
+	  got_address = sec_addr (gotplt) + plt_idx * GOT_ENTRY_SIZE;
+	}
+
+      /* Find out where the .plt entry should go.  */
+      loc = plt->contents + h->plt.offset;
+
+      /* Fill in the PLT entry itself.  */
+      if (!loongarch_make_plt_entry (got_address,
+				     sec_addr (plt) + h->plt.offset,
+				     plt_entry))
+	return false;
+
+      for (i = 0; i < PLT_ENTRY_INSNS; i++)
+	bfd_put_32 (output_bfd, plt_entry[i], loc + 4 * i);
+
+      /* Fill in the initial value of the got.plt entry.  */
+      loc = gotplt->contents + (got_address - sec_addr (gotplt));
+      bfd_put_NN (output_bfd, sec_addr (plt), loc);
+
+      rela.r_offset = got_address;
+
+      /* TRUE if this is a PLT reference to a local IFUNC.  */
+      if (PLT_LOCAL_IFUNC_P (info, h)
+	  && (relplt == htab->elf.srelgot
+	      || relplt == htab->elf.irelplt))
+	{
+	  rela.r_info = ELFNN_R_INFO (0, R_LARCH_IRELATIVE);
+	  rela.r_addend = (h->root.u.def.value
+			       + h->root.u.def.section->output_section->vma
+			       + h->root.u.def.section->output_offset);
+
+	  loongarch_elf_append_rela (output_bfd, relplt, &rela);
+	}
+      else
+	{
+	  /* Fill in the entry in the rela.plt section.  */
+	  rela.r_info = ELFNN_R_INFO (h->dynindx, R_LARCH_JUMP_SLOT);
+	  rela.r_addend = 0;
+	  loc = relplt->contents + plt_idx * sizeof (ElfNN_External_Rela);
+	  bed->s->swap_reloca_out (output_bfd, &rela, loc);
+	}
+
+      if (!h->def_regular)
+	{
+	  /* Mark the symbol as undefined, rather than as defined in
+	     the .plt section.  Leave the value alone.  */
+	  sym->st_shndx = SHN_UNDEF;
+	  /* If the symbol is weak, we do need to clear the value.
+	     Otherwise, the PLT entry would provide a definition for
+	     the symbol even if the symbol wasn't defined anywhere,
+	     and so the symbol would never be NULL.  */
+	  if (!h->ref_regular_nonweak)
+	    sym->st_value = 0;
+	}
+    }
+
+  if (h->got.offset != MINUS_ONE
+      /* TLS got entry have been handled in elf_relocate_section.  */
+      && !(loongarch_elf_hash_entry (h)->tls_type
+	   & (GOT_TLS_GD | GOT_TLS_IE | GOT_TLS_GDESC))
+      /* Have allocated got entry but not allocated rela before.  */
+      && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+    {
+      asection *sgot, *srela;
+      Elf_Internal_Rela rela;
+      bfd_vma off = h->got.offset & ~(bfd_vma)1;
+
+      /* This symbol has an entry in the GOT.  Set it up.  */
+      sgot = htab->elf.sgot;
+      srela = htab->elf.srelgot;
+      BFD_ASSERT (sgot && srela);
+
+      rela.r_offset = sec_addr (sgot) + off;
+
+      if (h->def_regular
+	  && h->type == STT_GNU_IFUNC)
+	{
+	  if(h->plt.offset == MINUS_ONE)
+	    {
+	      if (htab->elf.splt == NULL)
+		srela = htab->elf.irelplt;
+
+	      if (SYMBOL_REFERENCES_LOCAL (info, h))
+		{
+		  asection *sec = h->root.u.def.section;
+		  rela.r_info = ELFNN_R_INFO (0, R_LARCH_IRELATIVE);
+		  rela.r_addend = h->root.u.def.value + sec->output_section->vma
+		    + sec->output_offset;
+		  bfd_put_NN (output_bfd, 0, sgot->contents + off);
+		}
+	      else
+		{
+		  BFD_ASSERT (h->dynindx != -1);
+		  rela.r_info = ELFNN_R_INFO (h->dynindx, R_LARCH_NN);
+		  rela.r_addend = 0;
+		  bfd_put_NN (output_bfd, (bfd_vma) 0, sgot->contents + off);
+		}
+	    }
+	  else if(bfd_link_pic (info))
+	    {
+	      rela.r_info = ELFNN_R_INFO (h->dynindx, R_LARCH_NN);
+	      rela.r_addend = 0;
+	      bfd_put_NN (output_bfd, rela.r_addend, sgot->contents + off);
+	    }
+	  else
+	    {
+	      asection *plt;
+	      /* For non-shared object, we can't use .got.plt, which
+		 contains the real function address if we need pointer
+		 equality.  We load the GOT entry with the PLT entry.  */
+	      plt = htab->elf.splt ? htab->elf.splt : htab->elf.iplt;
+	      bfd_put_NN (output_bfd,
+			  (plt->output_section->vma
+			   + plt->output_offset
+			   + h->plt.offset),
+			  sgot->contents + off);
+	      return true;
+	    }
+	}
+      else if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))
+	{
+	  asection *sec = h->root.u.def.section;
+	  rela.r_info = ELFNN_R_INFO (0, R_LARCH_RELATIVE);
+	  rela.r_addend = (h->root.u.def.value + sec->output_section->vma
+			   + sec->output_offset);
+	}
+      else
+	{
+	  BFD_ASSERT (h->dynindx != -1);
+	  rela.r_info = ELFNN_R_INFO (h->dynindx, R_LARCH_NN);
+	  rela.r_addend = 0;
+	}
+
+      loongarch_elf_append_rela (output_bfd, srela, &rela);
+    }
+
+  /* Mark some specially defined symbols as absolute.  */
+  if (h == htab->elf.hdynamic || h == htab->elf.hgot || h == htab->elf.hplt)
+    sym->st_shndx = SHN_ABS;
+
+  return true;
+}
+
+/* Finish up the dynamic sections.  */
+
+static bool
+loongarch_finish_dyn (bfd *output_bfd, struct bfd_link_info *info, bfd *dynobj,
+		      asection *sdyn)
+{
+  struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info);
+  const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
+  size_t dynsize = bed->s->sizeof_dyn, skipped_size = 0;
+  bfd_byte *dyncon, *dynconend;
+
+  dynconend = sdyn->contents + sdyn->size;
+  for (dyncon = sdyn->contents; dyncon < dynconend; dyncon += dynsize)
+    {
+      Elf_Internal_Dyn dyn;
+      asection *s;
+      int skipped = 0;
+
+      bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
+
+      switch (dyn.d_tag)
+	{
+	case DT_PLTGOT:
+	  s = htab->elf.sgotplt;
+	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
+	  break;
+	case DT_JMPREL:
+	  s = htab->elf.srelplt;
+	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
+	  break;
+	case DT_PLTRELSZ:
+	  s = htab->elf.srelplt;
+	  dyn.d_un.d_val = s->size;
+	  break;
+	case DT_TEXTREL:
+	  if ((info->flags & DF_TEXTREL) == 0)
+	    skipped = 1;
+	  break;
+	case DT_FLAGS:
+	  if ((info->flags & DF_TEXTREL) == 0)
+	    dyn.d_un.d_val &= ~DF_TEXTREL;
+	  break;
+	}
+      if (skipped)
+	skipped_size += dynsize;
+      else
+	bed->s->swap_dyn_out (output_bfd, &dyn, dyncon - skipped_size);
+    }
+  /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
+  memset (dyncon - skipped_size, 0, skipped_size);
+  return true;
+}
+
+/* Finish up local dynamic symbol handling.  We set the contents of
+   various dynamic sections here.  */
+
+static int
+elfNN_loongarch_finish_local_dynamic_symbol (void **slot, void *inf)
+{
+  struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) *slot;
+  struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+  return loongarch_elf_finish_dynamic_symbol (info->output_bfd, info, h, NULL);
+}
+
+/* Value of struct elf_backend_data->elf_backend_output_arch_local_syms,
+   this function is called before elf_link_sort_relocs.
+   So relocation R_LARCH_IRELATIVE for local ifunc can be append to
+   .rela.dyn (.rela.got) by loongarch_elf_append_rela.  */
+
+static bool
+elf_loongarch_output_arch_local_syms
+  (bfd *output_bfd ATTRIBUTE_UNUSED,
+   struct bfd_link_info *info,
+   void *flaginfo ATTRIBUTE_UNUSED,
+   int (*func) (void *, const char *,
+		Elf_Internal_Sym *,
+		asection *,
+		struct elf_link_hash_entry *) ATTRIBUTE_UNUSED)
+{
+  struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info);
+  if (htab == NULL)
+    return false;
+
+  /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols.  */
+  htab_traverse (htab->loc_hash_table,
+		 elfNN_loongarch_finish_local_dynamic_symbol,
+		 info);
+
+  return true;
+}
+
+static bool
+loongarch_elf_finish_dynamic_sections (bfd *output_bfd,
+				       struct bfd_link_info *info)
+{
+  bfd *dynobj;
+  asection *sdyn, *plt, *gotplt = NULL;
+  struct loongarch_elf_link_hash_table *htab;
+
+  htab = loongarch_elf_hash_table (info);
+  BFD_ASSERT (htab);
+  dynobj = htab->elf.dynobj;
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      BFD_ASSERT (htab->elf.splt && sdyn);
+
+      if (!loongarch_finish_dyn (output_bfd, info, dynobj, sdyn))
+	return false;
+    }
+
+  plt = htab->elf.splt;
+  gotplt = htab->elf.sgotplt;
+
+  if (plt && 0 < plt->size)
+    {
+      size_t i;
+      uint32_t plt_header[PLT_HEADER_INSNS];
+      if (!loongarch_make_plt_header (sec_addr (gotplt), sec_addr (plt),
+				      plt_header))
+	return false;
+
+      for (i = 0; i < PLT_HEADER_INSNS; i++)
+	bfd_put_32 (output_bfd, plt_header[i], plt->contents + 4 * i);
+
+      elf_section_data (plt->output_section)->this_hdr.sh_entsize =
+	PLT_ENTRY_SIZE;
+    }
+
+  if (htab->elf.sgotplt)
+    {
+      asection *output_section = htab->elf.sgotplt->output_section;
+
+      if (bfd_is_abs_section (output_section))
+	{
+	  _bfd_error_handler (_("discarded output section: `%pA'"),
+			      htab->elf.sgotplt);
+	  return false;
+	}
+
+      if (0 < htab->elf.sgotplt->size)
+	{
+	  /* Write the first two entries in .got.plt, needed for the dynamic
+	     linker.  */
+	  bfd_put_NN (output_bfd, MINUS_ONE, htab->elf.sgotplt->contents);
+
+	  bfd_put_NN (output_bfd, (bfd_vma) 0,
+		      htab->elf.sgotplt->contents + GOT_ENTRY_SIZE);
+	}
+
+      elf_section_data (output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE;
+    }
+
+  if (htab->elf.sgot)
+    {
+      asection *output_section = htab->elf.sgot->output_section;
+
+      if (0 < htab->elf.sgot->size)
+	{
+	  /* Set the first entry in the global offset table to the address of
+	     the dynamic section.  */
+	  bfd_vma val = sdyn ? sec_addr (sdyn) : 0;
+	  bfd_put_NN (output_bfd, val, htab->elf.sgot->contents);
+	}
+
+      elf_section_data (output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE;
+    }
+
+  return true;
+}
+
+/* Return address for Ith PLT stub in section PLT, for relocation REL
+   or (bfd_vma) -1 if it should not be included.  */
+
+static bfd_vma
+loongarch_elf_plt_sym_val (bfd_vma i, const asection *plt,
+			   const arelent *rel ATTRIBUTE_UNUSED)
+{
+  return plt->vma + PLT_HEADER_SIZE + i * PLT_ENTRY_SIZE;
+}
+
+static enum elf_reloc_type_class
+loongarch_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			    const asection *rel_sec ATTRIBUTE_UNUSED,
+			    const Elf_Internal_Rela *rela)
+{
+  struct loongarch_elf_link_hash_table *htab;
+  htab = loongarch_elf_hash_table (info);
+
+  if (htab->elf.dynsym != NULL && htab->elf.dynsym->contents != NULL)
+    {
+      /* Check relocation against STT_GNU_IFUNC symbol if there are
+	 dynamic symbols.  */
+      bfd *abfd = info->output_bfd;
+      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+      unsigned long r_symndx = ELFNN_R_SYM (rela->r_info);
+      if (r_symndx != STN_UNDEF)
+	{
+	  Elf_Internal_Sym sym;
+	  if (!bed->s->swap_symbol_in (abfd,
+				       htab->elf.dynsym->contents
+				       + r_symndx * bed->s->sizeof_sym,
+				       0, &sym))
+	    {
+	      /* xgettext:c-format  */
+	      _bfd_error_handler (_("%pB symbol number %lu references"
+				    " nonexistent SHT_SYMTAB_SHNDX section"),
+				  abfd, r_symndx);
+	      /* Ideally an error class should be returned here.  */
+	    }
+	  else if (ELF_ST_TYPE (sym.st_info) == STT_GNU_IFUNC)
+	    return reloc_class_ifunc;
+	}
+    }
+
+  switch (ELFNN_R_TYPE (rela->r_info))
+    {
+    case R_LARCH_IRELATIVE:
+      return reloc_class_ifunc;
+    case R_LARCH_RELATIVE:
+      return reloc_class_relative;
+    case R_LARCH_JUMP_SLOT:
+      return reloc_class_plt;
+    case R_LARCH_COPY:
+      return reloc_class_copy;
+    default:
+      return reloc_class_normal;
+    }
+}
+
+/* Copy the extra info we tack onto an elf_link_hash_entry.  */
+
+static void
+loongarch_elf_copy_indirect_symbol (struct bfd_link_info *info,
+				    struct elf_link_hash_entry *dir,
+				    struct elf_link_hash_entry *ind)
+{
+  struct elf_link_hash_entry *edir, *eind;
+
+  edir = dir;
+  eind = ind;
+
+  if (eind->dyn_relocs != NULL)
+    {
+      if (edir->dyn_relocs != NULL)
+	{
+	  struct elf_dyn_relocs **pp;
+	  struct elf_dyn_relocs *p;
+
+	  /* Add reloc counts against the indirect sym to the direct sym
+	     list.  Merge any entries against the same section.  */
+	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL;)
+	    {
+	      struct elf_dyn_relocs *q;
+
+	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
+		if (q->sec == p->sec)
+		  {
+		    q->pc_count += p->pc_count;
+		    q->count += p->count;
+		    *pp = p->next;
+		    break;
+		  }
+	      if (q == NULL)
+		pp = &p->next;
+	    }
+	  *pp = edir->dyn_relocs;
+	}
+
+      edir->dyn_relocs = eind->dyn_relocs;
+      eind->dyn_relocs = NULL;
+    }
+
+  if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount < 0)
+    {
+      loongarch_elf_hash_entry(edir)->tls_type
+	= loongarch_elf_hash_entry(eind)->tls_type;
+      loongarch_elf_hash_entry(eind)->tls_type = GOT_UNKNOWN;
+    }
+  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
+}
+
+#define PRSTATUS_SIZE		    0x1d8
+#define PRSTATUS_OFFSET_PR_CURSIG   0xc
+#define PRSTATUS_OFFSET_PR_PID	    0x20
+#define ELF_GREGSET_T_SIZE	    0x168
+#define PRSTATUS_OFFSET_PR_REG	    0x70
+
+/* Support for core dump NOTE sections.  */
+
+static bool
+loongarch_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
+{
+  switch (note->descsz)
+    {
+    default:
+      return false;
+
+    /* The sizeof (struct elf_prstatus) on Linux/LoongArch.  */
+    case PRSTATUS_SIZE:
+      /* pr_cursig  */
+      elf_tdata (abfd)->core->signal =
+	bfd_get_16 (abfd, note->descdata + PRSTATUS_OFFSET_PR_CURSIG);
+
+      /* pr_pid  */
+      elf_tdata (abfd)->core->lwpid =
+	bfd_get_32 (abfd, note->descdata + PRSTATUS_OFFSET_PR_PID);
+      break;
+    }
+
+  /* Make a ".reg/999" section.  */
+  return _bfd_elfcore_make_pseudosection (abfd, ".reg", ELF_GREGSET_T_SIZE,
+					  note->descpos
+					  + PRSTATUS_OFFSET_PR_REG);
+}
+
+#define PRPSINFO_SIZE		    0x88
+#define PRPSINFO_OFFSET_PR_PID	    0x18
+#define PRPSINFO_OFFSET_PR_FNAME    0x28
+#define PRPSINFO_SIZEOF_PR_FNAME    0x10
+#define PRPSINFO_OFFSET_PR_PS_ARGS  0x38
+#define PRPSINFO_SIZEOF_PR_PS_ARGS  0x50
+
+static bool
+loongarch_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
+{
+  switch (note->descsz)
+    {
+    default:
+      return false;
+
+    /* The sizeof (prpsinfo_t) on Linux/LoongArch.  */
+    case PRPSINFO_SIZE:
+      /* pr_pid  */
+      elf_tdata (abfd)->core->pid =
+	bfd_get_32 (abfd, note->descdata + PRPSINFO_OFFSET_PR_PID);
+
+      /* pr_fname  */
+      elf_tdata (abfd)->core->program =
+	_bfd_elfcore_strndup (abfd, note->descdata + PRPSINFO_OFFSET_PR_FNAME,
+			      PRPSINFO_SIZEOF_PR_FNAME);
+
+      /* pr_psargs  */
+      elf_tdata (abfd)->core->command =
+	_bfd_elfcore_strndup (abfd, note->descdata + PRPSINFO_OFFSET_PR_PS_ARGS,
+			      PRPSINFO_SIZEOF_PR_PS_ARGS);
+      break;
+    }
+
+  /* Note that for some reason, a spurious space is tacked
+     onto the end of the args in some (at least one anyway)
+     implementations, so strip it off if it exists.  */
+
+  {
+    char *command = elf_tdata (abfd)->core->command;
+    int n = strlen (command);
+
+    if (0 < n && command[n - 1] == ' ')
+      command[n - 1] = '\0';
+  }
+
+  return true;
+}
+
+/* Set the right mach type.  */
+static bool
+loongarch_elf_object_p (bfd *abfd)
+{
+  /* There are only two mach types in LoongArch currently.  */
+  if (strcmp (abfd->xvec->name, "elf64-loongarch") == 0)
+    bfd_default_set_arch_mach (abfd, bfd_arch_loongarch, bfd_mach_loongarch64);
+  else
+    bfd_default_set_arch_mach (abfd, bfd_arch_loongarch, bfd_mach_loongarch32);
+  return true;
+}
+
+static asection *
+loongarch_elf_gc_mark_hook (asection *sec, struct bfd_link_info *info,
+			    Elf_Internal_Rela *rel,
+			    struct elf_link_hash_entry *h,
+			    Elf_Internal_Sym *sym)
+{
+  if (h != NULL)
+    switch (ELFNN_R_TYPE (rel->r_info))
+      {
+      case R_LARCH_GNU_VTINHERIT:
+      case R_LARCH_GNU_VTENTRY:
+	return NULL;
+      }
+
+  return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
+}
+
+/* Return TRUE if symbol H should be hashed in the `.gnu.hash' section.  For
+   executable PLT slots where the executable never takes the address of those
+   functions, the function symbols are not added to the hash table.  */
+
+static bool
+elf_loongarch64_hash_symbol (struct elf_link_hash_entry *h)
+{
+  if (h->plt.offset != (bfd_vma) -1
+      && !h->def_regular
+      && !h->pointer_equality_needed)
+    return false;
+
+  return _bfd_elf_hash_symbol (h);
+}
+
+#define TARGET_LITTLE_SYM loongarch_elfNN_vec
+#define TARGET_LITTLE_NAME "elfNN-loongarch"
+#define ELF_ARCH bfd_arch_loongarch
+#define ELF_TARGET_ID LARCH_ELF_DATA
+#define ELF_MACHINE_CODE EM_LOONGARCH
+#define ELF_MAXPAGESIZE 0x4000
+#define bfd_elfNN_bfd_reloc_type_lookup loongarch_reloc_type_lookup
+#define bfd_elfNN_bfd_link_hash_table_create				  \
+  loongarch_elf_link_hash_table_create
+#define bfd_elfNN_bfd_reloc_name_lookup loongarch_reloc_name_lookup
+#define elf_info_to_howto_rel NULL /* Fall through to elf_info_to_howto.  */
+#define elf_info_to_howto loongarch_info_to_howto_rela
+#define bfd_elfNN_bfd_merge_private_bfd_data				  \
+  elfNN_loongarch_merge_private_bfd_data
+
+#define elf_backend_reloc_type_class loongarch_reloc_type_class
+#define elf_backend_copy_indirect_symbol loongarch_elf_copy_indirect_symbol
+#define elf_backend_create_dynamic_sections				   \
+  loongarch_elf_create_dynamic_sections
+#define elf_backend_check_relocs loongarch_elf_check_relocs
+#define elf_backend_adjust_dynamic_symbol loongarch_elf_adjust_dynamic_symbol
+#define elf_backend_size_dynamic_sections loongarch_elf_size_dynamic_sections
+#define elf_backend_relocate_section loongarch_elf_relocate_section
+#define elf_backend_finish_dynamic_symbol loongarch_elf_finish_dynamic_symbol
+#define elf_backend_output_arch_local_syms \
+  elf_loongarch_output_arch_local_syms
+#define elf_backend_finish_dynamic_sections				   \
+  loongarch_elf_finish_dynamic_sections
+#define elf_backend_object_p loongarch_elf_object_p
+#define elf_backend_gc_mark_hook loongarch_elf_gc_mark_hook
+#define elf_backend_plt_sym_val loongarch_elf_plt_sym_val
+#define elf_backend_grok_prstatus loongarch_elf_grok_prstatus
+#define elf_backend_grok_psinfo loongarch_elf_grok_psinfo
+#define elf_backend_hash_symbol elf_loongarch64_hash_symbol
+#define bfd_elfNN_bfd_relax_section loongarch_elf_relax_section
+
+#define elf_backend_dtrel_excludes_plt 1
+
+#include "elfNN-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-riscv.c ./bfd/elfnn-riscv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfnn-riscv.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfnn-riscv.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* RISC-V-specific support for NN-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    Contributed by Andrew Waterman (andrew@sifive.com).
    Based on TILE-Gx and MIPS targets.
@@ -31,9 +31,104 @@
 #include "elfxx-riscv.h"
 #include "elf/riscv.h"
 #include "opcode/riscv.h"
+#include "objalloc.h"
 
-/* Internal relocations used exclusively by the relaxation pass.  */
-#define R_RISCV_DELETE (R_RISCV_max + 1)
+#include <limits.h>
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
+
+/* True if dynamic relocation is needed.  If we are creating a shared library,
+   and this is a reloc against a global symbol, or a non PC relative reloc
+   against a local symbol, then we need to copy the reloc into the shared
+   library.  However, if we are linking with -Bsymbolic, we do not need to
+   copy a reloc against a global symbol which is defined in an object we are
+   including in the link (i.e., DEF_REGULAR is set).
+
+   At this point we have not seen all the input files, so it is possible that
+   DEF_REGULAR is not set now but will be set later (it is never cleared).
+   In case of a weak definition, DEF_REGULAR may be cleared later by a strong
+   definition in a shared library.  We account for that possibility below by
+   storing information in the relocs_copied field of the hash table entry.
+   A similar situation occurs when creating shared libraries and symbol
+   visibility changes render the symbol local.
+
+   If on the other hand, we are creating an executable, we may need to keep
+   relocations for symbols satisfied by a dynamic library if we manage to
+   avoid copy relocs for the symbol.
+
+   Generate dynamic pointer relocation against STT_GNU_IFUNC symbol in the
+   non-code section (R_RISCV_32/R_RISCV_64).  */
+#define RISCV_NEED_DYNAMIC_RELOC(PCREL, INFO, H, SEC) \
+  ((bfd_link_pic (INFO) \
+    && ((SEC)->flags & SEC_ALLOC) != 0 \
+    && (!(PCREL) \
+	|| ((H) != NULL \
+	    && (!(INFO)->symbolic \
+		|| (H)->root.type == bfd_link_hash_defweak \
+		|| !(H)->def_regular)))) \
+   || (!bfd_link_pic (INFO) \
+       && ((SEC)->flags & SEC_ALLOC) != 0 \
+       && (H) != NULL \
+       && ((H)->root.type == bfd_link_hash_defweak \
+	   || !(H)->def_regular)) \
+   || (!bfd_link_pic (INFO) \
+       && (H) != NULL \
+       && (H)->type == STT_GNU_IFUNC \
+       && ((SEC)->flags & SEC_CODE) == 0))
+
+/* True if dynamic relocation should be generated.  */
+#define RISCV_GENERATE_DYNAMIC_RELOC(PCREL, INFO, H, RESOLVED_TO_ZERO) \
+  ((bfd_link_pic (INFO) \
+    && ((H) == NULL \
+	|| (ELF_ST_VISIBILITY ((H)->other) == STV_DEFAULT && !(RESOLVED_TO_ZERO)) \
+	|| (H)->root.type != bfd_link_hash_undefweak) \
+    && (!(PCREL) \
+	|| !SYMBOL_CALLS_LOCAL ((INFO), (H)))) \
+   || (!bfd_link_pic (INFO) \
+       && (H) != NULL \
+       && (H)->dynindx != -1 \
+       && !(H)->non_got_ref \
+       && (((H)->def_dynamic && !(H)->def_regular) \
+	   || (H)->root.type == bfd_link_hash_undefweak \
+	   || (H)->root.type == bfd_link_hash_undefined)))
+
+/* True if this input relocation should be copied to output.  H->dynindx
+   may be -1 if this symbol was marked to become local.  */
+#define RISCV_COPY_INPUT_RELOC(INFO, H) \
+  ((H) != NULL \
+   && (H)->dynindx != -1 \
+   && (!bfd_link_pic (INFO) \
+       || !SYMBOLIC_BIND ((INFO), (H)) \
+       || !(H)->def_regular))
+
+/* True if this is actually a static link, or it is a -Bsymbolic link
+   and the symbol is defined locally, or the symbol was forced to be
+   local because of a version file.  */
+#define RISCV_RESOLVED_LOCALLY(INFO, H) \
+  (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (elf_hash_table (INFO)->dynamic_sections_created, \
+				     bfd_link_pic (INFO), (H)) \
+   || (bfd_link_pic (INFO) \
+       && SYMBOL_REFERENCES_LOCAL ((INFO), (H))))
+
+/* Set NEED_RELOC to true if TLS GD/IE needs dynamic relocations, and INDX will
+   be the dynamic index.  PR22263, use the same check in allocate_dynrelocs and
+   riscv_elf_relocate_section for TLS GD/IE.  */
+#define RISCV_TLS_GD_IE_NEED_DYN_RELOC(INFO, DYN, H, INDX, NEED_RELOC) \
+  do \
+    { \
+      if ((H) != NULL \
+	  && (H)->dynindx != -1 \
+	  && WILL_CALL_FINISH_DYNAMIC_SYMBOL ((DYN), bfd_link_pic (INFO), (H)) \
+	  && (bfd_link_dll (INFO) || !SYMBOL_REFERENCES_LOCAL ((INFO), (H)))) \
+	(INDX) = (H)->dynindx; \
+      if ((bfd_link_dll (INFO) || (INDX) != 0) \
+	  && ((H) == NULL \
+	      || ELF_ST_VISIBILITY ((H)->other) == STV_DEFAULT \
+	      || (H)->root.type != bfd_link_hash_undefweak)) \
+	(NEED_RELOC) = true; \
+    } \
+  while (0)
 
 #define ARCH_SIZE NN
 
@@ -55,25 +150,24 @@
 #define ELF_MAXPAGESIZE			0x1000
 #define ELF_COMMONPAGESIZE		0x1000
 
+#define RISCV_ATTRIBUTES_SECTION_NAME ".riscv.attributes"
+
 /* RISC-V ELF linker hash entry.  */
 
 struct riscv_elf_link_hash_entry
 {
   struct elf_link_hash_entry elf;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
-#define GOT_UNKNOWN     0
-#define GOT_NORMAL      1
-#define GOT_TLS_GD      2
-#define GOT_TLS_IE      4
-#define GOT_TLS_LE      8
+#define GOT_UNKNOWN	0
+#define GOT_NORMAL	1
+#define GOT_TLS_GD	2
+#define GOT_TLS_IE	4
+#define GOT_TLS_LE	8
   char tls_type;
 };
 
 #define riscv_elf_hash_entry(ent) \
-  ((struct riscv_elf_link_hash_entry *)(ent))
+  ((struct riscv_elf_link_hash_entry *) (ent))
 
 struct _bfd_riscv_elf_obj_tdata
 {
@@ -98,6 +192,14 @@ struct _bfd_riscv_elf_obj_tdata
    && elf_tdata (bfd) != NULL				\
    && elf_object_id (bfd) == RISCV_ELF_DATA)
 
+static bool
+elfNN_riscv_mkobject (bfd *abfd)
+{
+  return bfd_elf_allocate_object (abfd,
+				  sizeof (struct _bfd_riscv_elf_obj_tdata),
+				  RISCV_ELF_DATA);
+}
+
 #include "elf/common.h"
 #include "elf/internal.h"
 
@@ -105,23 +207,59 @@ struct riscv_elf_link_hash_table
 {
   struct elf_link_hash_table elf;
 
+  /* Various options and other info passed from the linker.  */
+  struct riscv_elf_params *params;
+
   /* Short-cuts to get to dynamic linker sections.  */
   asection *sdyntdata;
 
-  /* Small local sym to section mapping cache.  */
-  struct sym_cache sym_cache;
-
   /* The max alignment of output sections.  */
   bfd_vma max_alignment;
+
+  /* The max alignment of output sections in [gp-2K, gp+2K) range.  */
+  bfd_vma max_alignment_for_gp;
+
+  /* Used by local STT_GNU_IFUNC symbols.  */
+  htab_t loc_hash_table;
+  void * loc_hash_memory;
+
+  /* The index of the last unused .rel.iplt slot.  */
+  bfd_vma last_iplt_index;
+
+  /* The data segment phase, don't relax the section
+     when it is exp_seg_relro_adjust.  */
+  int *data_segment_phase;
+
+  /* Relocations for variant CC symbols may be present.  */
+  int variant_cc;
 };
 
+/* Instruction access functions. */
+#define riscv_get_insn(bits, ptr)		\
+  ((bits) == 16 ? bfd_getl16 (ptr)		\
+   : (bits) == 32 ? bfd_getl32 (ptr)		\
+   : (bits) == 64 ? bfd_getl64 (ptr)		\
+   : (abort (), (bfd_vma) - 1))
+#define riscv_put_insn(bits, val, ptr)		\
+  ((bits) == 16 ? bfd_putl16 (val, ptr)		\
+   : (bits) == 32 ? bfd_putl32 (val, ptr)	\
+   : (bits) == 64 ? bfd_putl64 (val, ptr)	\
+   : (abort (), (void) 0))
 
 /* Get the RISC-V ELF linker hash table from a link_info structure.  */
 #define riscv_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == RISCV_ELF_DATA ? ((struct riscv_elf_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == RISCV_ELF_DATA)	\
+   ? (struct riscv_elf_link_hash_table *) (p)->hash : NULL)
+
+void
+riscv_elfNN_set_options (struct bfd_link_info *link_info,
+			 struct riscv_elf_params *params)
+{
+  riscv_elf_hash_table (link_info)->params = params;
+}
 
-static bfd_boolean
+static bool
 riscv_info_to_howto_rela (bfd *abfd,
 			  arelent *cache_ptr,
 			  Elf_Internal_Rela *dst)
@@ -141,26 +279,32 @@ riscv_elf_append_rela (bfd *abfd, asecti
   bed->s->swap_reloca_out (abfd, rel, loc);
 }
 
-/* PLT/GOT stuff.  */
+/* Return true if a relocation is modifying an instruction. */
 
+static bool
+riscv_is_insn_reloc (const reloc_howto_type *howto)
+{
+  /* Heuristic: A multibyte destination with a nontrivial mask
+     is an instruction */
+  return (howto->bitsize > 8
+	  && howto->dst_mask != 0
+	  && ~(howto->dst_mask | (howto->bitsize < sizeof(bfd_vma) * CHAR_BIT
+	       ? (MINUS_ONE << howto->bitsize) : (bfd_vma)0)) != 0);
+}
+
+/* PLT/GOT stuff.  */
 #define PLT_HEADER_INSNS 8
 #define PLT_ENTRY_INSNS 4
 #define PLT_HEADER_SIZE (PLT_HEADER_INSNS * 4)
 #define PLT_ENTRY_SIZE (PLT_ENTRY_INSNS * 4)
-
 #define GOT_ENTRY_SIZE RISCV_ELF_WORD_BYTES
-
+/* Reserve two entries of GOTPLT for ld.so, one is used for PLT resolver,
+   the other is used for link map.  Other targets also reserve one more
+   entry used for runtime profile?  */
 #define GOTPLT_HEADER_SIZE (2 * GOT_ENTRY_SIZE)
 
 #define sec_addr(sec) ((sec)->output_section->vma + (sec)->output_offset)
 
-static bfd_vma
-riscv_elf_got_plt_val (bfd_vma plt_index, struct bfd_link_info *info)
-{
-  return sec_addr (riscv_elf_hash_table (info)->elf.sgotplt)
-	 + GOTPLT_HEADER_SIZE + (plt_index * GOT_ENTRY_SIZE);
-}
-
 #if ARCH_SIZE == 32
 # define MATCH_LREG MATCH_LW
 #else
@@ -169,7 +313,7 @@ riscv_elf_got_plt_val (bfd_vma plt_index
 
 /* Generate a PLT header.  */
 
-static bfd_boolean
+static bool
 riscv_make_plt_header (bfd *output_bfd, bfd_vma gotplt_addr, bfd_vma addr,
 		       uint32_t *entry)
 {
@@ -181,7 +325,7 @@ riscv_make_plt_header (bfd *output_bfd,
     {
       _bfd_error_handler (_("%pB: warning: RVE PLT generation not supported"),
 			  output_bfd);
-      return FALSE;
+      return false;
     }
 
   /* auipc  t2, %hi(.got.plt)
@@ -191,23 +335,23 @@ riscv_make_plt_header (bfd *output_bfd,
      addi   t0, t2, %lo(.got.plt)    # &.got.plt
      srli   t1, t1, log2(16/PTRSIZE) # .got.plt offset
      l[w|d] t0, PTRSIZE(t0)	     # link map
-     jr	    t3 */
+     jr	    t3  */
 
   entry[0] = RISCV_UTYPE (AUIPC, X_T2, gotplt_offset_high);
   entry[1] = RISCV_RTYPE (SUB, X_T1, X_T1, X_T3);
   entry[2] = RISCV_ITYPE (LREG, X_T3, X_T2, gotplt_offset_low);
-  entry[3] = RISCV_ITYPE (ADDI, X_T1, X_T1, -(PLT_HEADER_SIZE + 12));
+  entry[3] = RISCV_ITYPE (ADDI, X_T1, X_T1, (uint32_t) -(PLT_HEADER_SIZE + 12));
   entry[4] = RISCV_ITYPE (ADDI, X_T0, X_T2, gotplt_offset_low);
   entry[5] = RISCV_ITYPE (SRLI, X_T1, X_T1, 4 - RISCV_ELF_LOG_WORD_BYTES);
   entry[6] = RISCV_ITYPE (LREG, X_T0, X_T0, RISCV_ELF_WORD_BYTES);
   entry[7] = RISCV_ITYPE (JALR, 0, X_T3, 0);
 
-  return TRUE;
+  return true;
 }
 
 /* Generate a PLT entry.  */
 
-static bfd_boolean
+static bool
 riscv_make_plt_entry (bfd *output_bfd, bfd_vma got, bfd_vma addr,
 		      uint32_t *entry)
 {
@@ -216,20 +360,20 @@ riscv_make_plt_entry (bfd *output_bfd, b
     {
       _bfd_error_handler (_("%pB: warning: RVE PLT generation not supported"),
 			  output_bfd);
-      return FALSE;
+      return false;
     }
 
   /* auipc  t3, %hi(.got.plt entry)
      l[w|d] t3, %lo(.got.plt entry)(t3)
      jalr   t1, t3
-     nop */
+     nop  */
 
   entry[0] = RISCV_UTYPE (AUIPC, X_T3, RISCV_PCREL_HIGH_PART (got, addr));
   entry[1] = RISCV_ITYPE (LREG,  X_T3, X_T3, RISCV_PCREL_LOW_PART (got, addr));
   entry[2] = RISCV_ITYPE (JALR, X_T1, X_T3, 0);
   entry[3] = RISCV_NOP;
 
-  return TRUE;
+  return true;
 }
 
 /* Create an entry in an RISC-V ELF linker hash table.  */
@@ -256,20 +400,99 @@ link_hash_newfunc (struct bfd_hash_entry
       struct riscv_elf_link_hash_entry *eh;
 
       eh = (struct riscv_elf_link_hash_entry *) entry;
-      eh->dyn_relocs = NULL;
       eh->tls_type = GOT_UNKNOWN;
     }
 
   return entry;
 }
 
+/* Compute a hash of a local hash entry.  We use elf_link_hash_entry
+   for local symbol so that we can handle local STT_GNU_IFUNC symbols
+   as global symbol.  We reuse indx and dynstr_index for local symbol
+   hash since they aren't used by global symbols in this backend.  */
+
+static hashval_t
+riscv_elf_local_htab_hash (const void *ptr)
+{
+  struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) ptr;
+  return ELF_LOCAL_SYMBOL_HASH (h->indx, h->dynstr_index);
+}
+
+/* Compare local hash entries.  */
+
+static int
+riscv_elf_local_htab_eq (const void *ptr1, const void *ptr2)
+{
+  struct elf_link_hash_entry *h1 = (struct elf_link_hash_entry *) ptr1;
+  struct elf_link_hash_entry *h2 = (struct elf_link_hash_entry *) ptr2;
+
+  return h1->indx == h2->indx && h1->dynstr_index == h2->dynstr_index;
+}
+
+/* Find and/or create a hash entry for local symbol.  */
+
+static struct elf_link_hash_entry *
+riscv_elf_get_local_sym_hash (struct riscv_elf_link_hash_table *htab,
+			      bfd *abfd, const Elf_Internal_Rela *rel,
+			      bool create)
+{
+  struct riscv_elf_link_hash_entry eh, *ret;
+  asection *sec = abfd->sections;
+  hashval_t h = ELF_LOCAL_SYMBOL_HASH (sec->id,
+				       ELFNN_R_SYM (rel->r_info));
+  void **slot;
+
+  eh.elf.indx = sec->id;
+  eh.elf.dynstr_index = ELFNN_R_SYM (rel->r_info);
+  slot = htab_find_slot_with_hash (htab->loc_hash_table, &eh, h,
+				   create ? INSERT : NO_INSERT);
+
+  if (!slot)
+    return NULL;
+
+  if (*slot)
+    {
+      ret = (struct riscv_elf_link_hash_entry *) *slot;
+      return &ret->elf;
+    }
+
+  ret = (struct riscv_elf_link_hash_entry *)
+	objalloc_alloc ((struct objalloc *) htab->loc_hash_memory,
+			sizeof (struct riscv_elf_link_hash_entry));
+  if (ret)
+    {
+      memset (ret, 0, sizeof (*ret));
+      ret->elf.indx = sec->id;
+      ret->elf.dynstr_index = ELFNN_R_SYM (rel->r_info);
+      ret->elf.dynindx = -1;
+      *slot = ret;
+    }
+  return &ret->elf;
+}
+
+/* Destroy a RISC-V elf linker hash table.  */
+
+static void
+riscv_elf_link_hash_table_free (bfd *obfd)
+{
+  struct riscv_elf_link_hash_table *ret
+    = (struct riscv_elf_link_hash_table *) obfd->link.hash;
+
+  if (ret->loc_hash_table)
+    htab_delete (ret->loc_hash_table);
+  if (ret->loc_hash_memory)
+    objalloc_free ((struct objalloc *) ret->loc_hash_memory);
+
+  _bfd_elf_link_hash_table_free (obfd);
+}
+
 /* Create a RISC-V ELF linker hash table.  */
 
 static struct bfd_link_hash_table *
 riscv_elf_link_hash_table_create (bfd *abfd)
 {
   struct riscv_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct riscv_elf_link_hash_table);
+  size_t amt = sizeof (struct riscv_elf_link_hash_table);
 
   ret = (struct riscv_elf_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -284,12 +507,27 @@ riscv_elf_link_hash_table_create (bfd *a
     }
 
   ret->max_alignment = (bfd_vma) -1;
+  ret->max_alignment_for_gp = (bfd_vma) -1;
+
+  /* Create hash table for local ifunc.  */
+  ret->loc_hash_table = htab_try_create (1024,
+					 riscv_elf_local_htab_hash,
+					 riscv_elf_local_htab_eq,
+					 NULL);
+  ret->loc_hash_memory = objalloc_create ();
+  if (!ret->loc_hash_table || !ret->loc_hash_memory)
+    {
+      riscv_elf_link_hash_table_free (abfd);
+      return NULL;
+    }
+  ret->elf.root.hash_table_free = riscv_elf_link_hash_table_free;
+
   return &ret->elf.root;
 }
 
 /* Create the .got section.  */
 
-static bfd_boolean
+static bool
 riscv_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags;
@@ -300,7 +538,7 @@ riscv_elf_create_got_section (bfd *abfd,
 
   /* This function may be called more than once.  */
   if (htab->sgot != NULL)
-    return TRUE;
+    return true;
 
   flags = bed->dynamic_sec_flags;
 
@@ -311,13 +549,13 @@ riscv_elf_create_got_section (bfd *abfd,
 					   | SEC_READONLY));
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->srelgot = s;
 
   s = s_got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->sgot = s;
 
   /* The first bit of the global offset table is the header.  */
@@ -328,7 +566,7 @@ riscv_elf_create_got_section (bfd *abfd,
       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->sgotplt = s;
 
       /* Reserve room for the header.  */
@@ -345,17 +583,17 @@ riscv_elf_create_got_section (bfd *abfd,
 				       "_GLOBAL_OFFSET_TABLE_");
       elf_hash_table (info)->hgot = h;
       if (h == NULL)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and
    .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
    hash table.  */
 
-static bfd_boolean
+static bool
 riscv_elf_create_dynamic_sections (bfd *dynobj,
 				   struct bfd_link_info *info)
 {
@@ -365,10 +603,10 @@ riscv_elf_create_dynamic_sections (bfd *
   BFD_ASSERT (htab != NULL);
 
   if (!riscv_elf_create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
-    return FALSE;
+    return false;
 
   if (!bfd_link_pic (info))
     {
@@ -396,7 +634,7 @@ riscv_elf_create_dynamic_sections (bfd *
       || (!bfd_link_pic (info) && (!htab->elf.srelbss || !htab->sdyntdata)))
     abort ();
 
-  return TRUE;
+  return true;
 }
 
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
@@ -411,37 +649,6 @@ riscv_elf_copy_indirect_symbol (struct b
   edir = (struct riscv_elf_link_hash_entry *) dir;
   eind = (struct riscv_elf_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect
       && dir->got.refcount <= 0)
     {
@@ -451,7 +658,7 @@ riscv_elf_copy_indirect_symbol (struct b
   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
 }
 
-static bfd_boolean
+static bool
 riscv_elf_record_tls_type (bfd *abfd, struct elf_link_hash_entry *h,
 			   unsigned long symndx, char tls_type)
 {
@@ -463,12 +670,12 @@ riscv_elf_record_tls_type (bfd *abfd, st
       (*_bfd_error_handler)
 	(_("%pB: `%s' accessed both as normal and thread local symbol"),
 	 abfd, h ? h->root.root.string : "<local>");
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 riscv_elf_record_got_reference (bfd *abfd, struct bfd_link_info *info,
 				struct elf_link_hash_entry *h, long symndx)
 {
@@ -478,13 +685,13 @@ riscv_elf_record_got_reference (bfd *abf
   if (htab->elf.sgot == NULL)
     {
       if (!riscv_elf_create_got_section (htab->elf.dynobj, info))
-	return FALSE;
+	return false;
     }
 
   if (h != NULL)
     {
       h->got.refcount += 1;
-      return TRUE;
+      return true;
     }
 
   /* This is a global offset table entry for a local symbol.  */
@@ -492,33 +699,37 @@ riscv_elf_record_got_reference (bfd *abf
     {
       bfd_size_type size = symtab_hdr->sh_info * (sizeof (bfd_vma) + 1);
       if (!(elf_local_got_refcounts (abfd) = bfd_zalloc (abfd, size)))
-	return FALSE;
+	return false;
       _bfd_riscv_elf_local_got_tls_type (abfd)
 	= (char *) (elf_local_got_refcounts (abfd) + symtab_hdr->sh_info);
     }
   elf_local_got_refcounts (abfd) [symndx] += 1;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bad_static_reloc (bfd *abfd, unsigned r_type, struct elf_link_hash_entry *h)
 {
   reloc_howto_type * r = riscv_elf_rtype_to_howto (abfd, r_type);
 
+  /* We propably can improve the information to tell users that they
+     should be recompile the code with -fPIC or -fPIE, just like what
+     x86 does.  */
   (*_bfd_error_handler)
     (_("%pB: relocation %s against `%s' can not be used when making a shared "
        "object; recompile with -fPIC"),
      abfd, r ? r->name : _("<unknown>"),
      h != NULL ? h->root.root.string : "a local symbol");
   bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return false;
 }
+
 /* Look through the relocs for a section during the first phase, and
    allocate space in the global offset table or procedure linkage
    table.  */
 
-static bfd_boolean
+static bool
 riscv_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -529,7 +740,7 @@ riscv_elf_check_relocs (bfd *abfd, struc
   asection *sreloc = NULL;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = riscv_elf_hash_table (info);
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -543,6 +754,7 @@ riscv_elf_check_relocs (bfd *abfd, struc
       unsigned int r_type;
       unsigned int r_symndx;
       struct elf_link_hash_entry *h;
+      bool is_abs_symbol = false;
 
       r_symndx = ELFNN_R_SYM (rel->r_info);
       r_type = ELFNN_R_TYPE (rel->r_info);
@@ -551,17 +763,72 @@ riscv_elf_check_relocs (bfd *abfd, struc
 	{
 	  (*_bfd_error_handler) (_("%pB: bad symbol index: %d"),
 				 abfd, r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx < symtab_hdr->sh_info)
-	h = NULL;
+	{
+	  /* A local symbol.  */
+	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
+							  abfd, r_symndx);
+	  if (isym == NULL)
+	    return false;
+
+	  is_abs_symbol = isym->st_shndx == SHN_ABS ? true : false;
+
+	  /* Check relocation against local STT_GNU_IFUNC symbol.  */
+	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+	    {
+	      h = riscv_elf_get_local_sym_hash (htab, abfd, rel, true);
+	      if (h == NULL)
+		return false;
+
+	      /* Fake STT_GNU_IFUNC global symbol.  */
+	      h->root.root.string = bfd_elf_sym_name (abfd, symtab_hdr,
+						      isym, NULL);
+	      h->type = STT_GNU_IFUNC;
+	      h->def_regular = 1;
+	      h->ref_regular = 1;
+	      h->forced_local = 1;
+	      h->root.type = bfd_link_hash_defined;
+	    }
+	  else
+	    h = NULL;
+	}
       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;
+
+	  is_abs_symbol = bfd_is_abs_symbol (&h->root) ? true : false;
+	}
+
+      if (h != NULL)
+	{
+	  switch (r_type)
+	    {
+	    case R_RISCV_32:
+	    case R_RISCV_64:
+	    case R_RISCV_CALL:
+	    case R_RISCV_CALL_PLT:
+	    case R_RISCV_HI20:
+	    case R_RISCV_GOT_HI20:
+	    case R_RISCV_PCREL_HI20:
+	      /* Create the ifunc sections, iplt and ipltgot, for static
+		 executables.  */
+	      if (h->type == STT_GNU_IFUNC
+		  && !_bfd_elf_create_ifunc_sections (htab->elf.dynobj, info))
+		return false;
+	      break;
+
+	    default:
+	      break;
+	    }
+
+	  /* It is referenced by a non-shared object.  */
+	  h->ref_regular = 1;
 	}
 
       switch (r_type)
@@ -569,114 +836,165 @@ riscv_elf_check_relocs (bfd *abfd, struc
 	case R_RISCV_TLS_GD_HI20:
 	  if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx)
 	      || !riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_TLS_GD))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_RISCV_TLS_GOT_HI20:
-	  if (bfd_link_pic (info))
+	  if (bfd_link_dll (info))
 	    info->flags |= DF_STATIC_TLS;
 	  if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx)
 	      || !riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_TLS_IE))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_RISCV_GOT_HI20:
 	  if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx)
 	      || !riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_NORMAL))
-	    return FALSE;
+	    return false;
 	  break;
 
+	case R_RISCV_CALL:
 	case R_RISCV_CALL_PLT:
-	  /* This symbol requires a procedure linkage table entry.  We
-	     actually build the entry in adjust_dynamic_symbol,
-	     because this might be a case of linking PIC code without
+	  /* These symbol requires a procedure linkage table entry.
+	     We actually build the entry in adjust_dynamic_symbol,
+	     because these might be a case of linking PIC code without
 	     linking in any dynamic objects, in which case we don't
 	     need to generate a procedure linkage table after all.  */
 
-	  if (h != NULL)
+	  /* If it is a local symbol, then we resolve it directly
+	     without creating a PLT entry.  */
+	  if (h == NULL)
+	    continue;
+
+	  h->needs_plt = 1;
+	  h->plt.refcount += 1;
+	  break;
+
+	case R_RISCV_PCREL_HI20:
+	  if (h != NULL
+	      && h->type == STT_GNU_IFUNC)
 	    {
-	      h->needs_plt = 1;
+	      h->non_got_ref = 1;
+	      h->pointer_equality_needed = 1;
+
+	      /* We don't use the PCREL_HI20 in the data section,
+		 so we always need the plt when it refers to
+		 ifunc symbol.  */
 	      h->plt.refcount += 1;
 	    }
-	  break;
 
-	case R_RISCV_CALL:
+	  /* The non-preemptible absolute symbol shouldn't be referneced with
+	     pc-relative relocation when generating shared object.  However,
+	     PCREL_HI20/LO12 relocs are always bind locally when generating
+	     shared object, so all absolute symbol referenced need to be
+	     disallowed, except they are defined in linker script.
+
+	     Maybe we should add this check for all pc-relative relocations,
+	     please see pr28789 and pr25749 for details.  */
+	  if (bfd_link_pic (info)
+	      /* (h == NULL || SYMBOL_REFERENCES_LOCAL (info, h))  */
+	      && is_abs_symbol)
+	    {
+	      if (h != NULL && (h)->root.ldscript_def)
+		/* Disallow the absolute symbol defined in linker script here
+		   will cause the glibc-linux toolchain build failed, so regard
+		   them as pc-relative symbols, just like what x86 did.  */
+		;
+	      else
+		{
+		  const char *name;
+		  if (h->root.root.string)
+		    name = h->root.root.string;
+		  else
+		    {
+		      Elf_Internal_Sym *sym;
+		      sym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd,
+						   r_symndx);
+		      name = bfd_elf_sym_name (abfd, symtab_hdr, sym, NULL);
+		    }
+
+		  reloc_howto_type *r_t =
+			riscv_elf_rtype_to_howto (abfd, r_type);
+		  _bfd_error_handler
+		    (_("%pB: relocation %s against absolute symbol `%s' can "
+		       "not be used when making a shared object"),
+		     abfd, r_t ? r_t->name : _("<unknown>"), name);
+		  bfd_set_error (bfd_error_bad_value);
+		  return false;
+		}
+	    }
+	  /* Fall through.  */
+
 	case R_RISCV_JAL:
 	case R_RISCV_BRANCH:
 	case R_RISCV_RVC_BRANCH:
 	case R_RISCV_RVC_JUMP:
-	case R_RISCV_PCREL_HI20:
-	  /* In shared libraries, these relocs are known to bind locally.  */
+	  /* In shared libraries and pie, these relocs are known
+	     to bind locally.  */
 	  if (bfd_link_pic (info))
 	    break;
 	  goto static_reloc;
 
 	case R_RISCV_TPREL_HI20:
+	  /* This is not allowed in the pic, but okay in pie.  */
 	  if (!bfd_link_executable (info))
 	    return bad_static_reloc (abfd, r_type, h);
 	  if (h != NULL)
 	    riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_TLS_LE);
-	  goto static_reloc;
+	  break;
 
 	case R_RISCV_HI20:
 	  if (bfd_link_pic (info))
 	    return bad_static_reloc (abfd, r_type, h);
-	  /* Fall through.  */
+	  goto static_reloc;
+
+	case R_RISCV_32:
+	  if (ARCH_SIZE > 32
+	      && bfd_link_pic (info)
+	      && (sec->flags & SEC_ALLOC) != 0)
+	    {
+	      if (is_abs_symbol)
+		break;
+
+	      reloc_howto_type *r_t = riscv_elf_rtype_to_howto (abfd, r_type);
+	      _bfd_error_handler
+		(_("%pB: relocation %s against non-absolute symbol `%s' can "
+		   "not be used in RVNN when making a shared object"),
+		 abfd, r_t ? r_t->name : _("<unknown>"),
+		 h != NULL ? h->root.root.string : "a local symbol");
+	      bfd_set_error (bfd_error_bad_value);
+	      return false;
+	    }
+	  goto static_reloc;
 
 	case R_RISCV_COPY:
 	case R_RISCV_JUMP_SLOT:
 	case R_RISCV_RELATIVE:
 	case R_RISCV_64:
-	case R_RISCV_32:
 	  /* Fall through.  */
 
 	static_reloc:
-	  /* This reloc might not bind locally.  */
-	  if (h != NULL)
-	    h->non_got_ref = 1;
 
-	  if (h != NULL && !bfd_link_pic (info))
+	  if (h != NULL
+	      && (!bfd_link_pic (info)
+		  || h->type == STT_GNU_IFUNC))
 	    {
-	      /* We may need a .plt entry if the function this reloc
-		 refers to is in a shared lib.  */
-	      h->plt.refcount += 1;
+	      /* This reloc might not bind locally.  */
+	      h->non_got_ref = 1;
+	      h->pointer_equality_needed = 1;
+
+	      if (!h->def_regular
+		  || (sec->flags & (SEC_CODE | SEC_READONLY)) != 0)
+		{
+		  /* We may need a .plt entry if the symbol is a function
+		     defined in a shared lib or is a function referenced
+		     from the code or read-only section.  */
+		  h->plt.refcount += 1;
+		}
 	    }
 
-	  /* If we are creating a shared library, and this is a reloc
-	     against a global symbol, or a non PC relative reloc
-	     against a local symbol, then we need to copy the reloc
-	     into the shared library.  However, if we are linking with
-	     -Bsymbolic, we do not need to copy a reloc against a
-	     global symbol which is defined in an object we are
-	     including in the link (i.e., DEF_REGULAR is set).  At
-	     this point we have not seen all the input files, so it is
-	     possible that DEF_REGULAR is not set now but will be set
-	     later (it is never cleared).  In case of a weak definition,
-	     DEF_REGULAR may be cleared later by a strong definition in
-	     a shared library.  We account for that possibility below by
-	     storing information in the relocs_copied field of the hash
-	     table entry.  A similar situation occurs when creating
-	     shared libraries and symbol visibility changes render the
-	     symbol local.
-
-	     If on the other hand, we are creating an executable, we
-	     may need to keep relocations for symbols satisfied by a
-	     dynamic library if we manage to avoid copy relocs for the
-	     symbol.  */
-	  reloc_howto_type * r = riscv_elf_rtype_to_howto (abfd, r_type);
-
-	  if ((bfd_link_pic (info)
-	       && (sec->flags & SEC_ALLOC) != 0
-	       && ((r != NULL && ! r->pc_relative)
-		   || (h != NULL
-		       && (! info->symbolic
-			   || h->root.type == bfd_link_hash_defweak
-			   || !h->def_regular))))
-	      || (!bfd_link_pic (info)
-		  && (sec->flags & SEC_ALLOC) != 0
-		  && h != NULL
-		  && (h->root.type == bfd_link_hash_defweak
-		      || !h->def_regular)))
+	  reloc_howto_type *r = riscv_elf_rtype_to_howto (abfd, r_type);
+	  if (RISCV_NEED_DYNAMIC_RELOC (r->pc_relative, info, h, sec))
 	    {
 	      struct elf_dyn_relocs *p;
 	      struct elf_dyn_relocs **head;
@@ -688,16 +1006,16 @@ riscv_elf_check_relocs (bfd *abfd, struc
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
 		    (sec, htab->elf.dynobj, RISCV_ELF_LOG_WORD_BYTES,
-		    abfd, /*rela?*/ TRUE);
+		    abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
-		head = &((struct riscv_elf_link_hash_entry *) h)->dyn_relocs;
+		head = &h->dyn_relocs;
 	      else
 		{
 		  /* Track dynamic relocs needed for local syms too.
@@ -708,10 +1026,10 @@ riscv_elf_check_relocs (bfd *abfd, struc
 		  void *vpp;
 		  Elf_Internal_Sym *isym;
 
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
@@ -724,11 +1042,11 @@ riscv_elf_check_relocs (bfd *abfd, struc
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->elf.dynobj, amt));
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -742,57 +1060,12 @@ riscv_elf_check_relocs (bfd *abfd, struc
 
 	  break;
 
-	case R_RISCV_GNU_VTINHERIT:
-	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
-	  break;
-
-	case R_RISCV_GNU_VTENTRY:
-	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
-	  break;
-
 	default:
 	  break;
 	}
     }
 
-  return TRUE;
-}
-
-static asection *
-riscv_elf_gc_mark_hook (asection *sec,
-			struct bfd_link_info *info,
-			Elf_Internal_Rela *rel,
-			struct elf_link_hash_entry *h,
-			Elf_Internal_Sym *sym)
-{
-  if (h != NULL)
-    switch (ELFNN_R_TYPE (rel->r_info))
-      {
-      case R_RISCV_GNU_VTINHERIT:
-      case R_RISCV_GNU_VTENTRY:
-	return NULL;
-      }
-
-  return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
-}
-
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = riscv_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -801,7 +1074,7 @@ readonly_dynrelocs (struct elf_link_hash
    change the definition to something the rest of the link can
    understand.  */
 
-static bfd_boolean
+static bool
 riscv_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				 struct elf_link_hash_entry *h)
 {
@@ -830,9 +1103,10 @@ riscv_elf_adjust_dynamic_symbol (struct
   if (h->type == STT_FUNC || h->type == STT_GNU_IFUNC || h->needs_plt)
     {
       if (h->plt.refcount <= 0
-	  || SYMBOL_CALLS_LOCAL (info, h)
-	  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
-	      && h->root.type == bfd_link_hash_undefweak))
+	  || (h->type != STT_GNU_IFUNC
+	      && (SYMBOL_CALLS_LOCAL (info, h)
+		  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+		      && h->root.type == bfd_link_hash_undefweak))))
 	{
 	  /* This case can occur if we saw a R_RISCV_CALL_PLT reloc in an
 	     input file, but the symbol was never referred to by a dynamic
@@ -842,7 +1116,7 @@ riscv_elf_adjust_dynamic_symbol (struct
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) -1;
@@ -856,7 +1130,7 @@ riscv_elf_adjust_dynamic_symbol (struct
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -867,26 +1141,26 @@ riscv_elf_adjust_dynamic_symbol (struct
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (!readonly_dynrelocs (h))
+  if (!_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -931,23 +1205,37 @@ riscv_elf_adjust_dynamic_symbol (struct
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
   struct riscv_elf_link_hash_table *htab;
-  struct riscv_elf_link_hash_entry *eh;
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = riscv_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
 
-  if (htab->elf.dynamic_sections_created
-      && h->plt.refcount > 0)
+  /* When we are generating pde, make sure gp symbol is output as a
+     dynamic symbol.  Then ld.so can set the gp register earlier, before
+     resolving the ifunc.  */
+  if (!bfd_link_pic (info)
+      && htab->elf.dynamic_sections_created
+      && strcmp (h->root.root.string, RISCV_GP_SYMBOL) == 0
+      && !bfd_elf_link_record_dynamic_symbol (info, h))
+    return false;
+
+  /* Since STT_GNU_IFUNC symbols must go through PLT, we handle them
+     in the allocate_ifunc_dynrelocs and allocate_local_ifunc_dynrelocs,
+     if they are defined and referenced in a non-shared object.  */
+  if (h->type == STT_GNU_IFUNC
+      && h->def_regular)
+    return true;
+  else if (htab->elf.dynamic_sections_created
+	   && h->plt.refcount > 0)
     {
       /* Make sure this symbol is output as a dynamic symbol.
 	 Undefined weak syms won't yet be marked as dynamic.  */
@@ -955,7 +1243,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
@@ -987,6 +1275,11 @@ allocate_dynrelocs (struct elf_link_hash
 	      h->root.u.def.section = s;
 	      h->root.u.def.value = h->plt.offset;
 	    }
+
+	  /* If the symbol has STO_RISCV_VARIANT_CC flag, then raise the
+	     variant_cc flag of riscv_elf_link_hash_table.  */
+	  if (h->other & STO_RISCV_VARIANT_CC)
+	    htab->variant_cc = 1;
 	}
       else
 	{
@@ -1003,7 +1296,7 @@ allocate_dynrelocs (struct elf_link_hash
   if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = riscv_elf_hash_entry (h)->tls_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -1012,7 +1305,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->elf.sgot;
@@ -1020,18 +1313,24 @@ allocate_dynrelocs (struct elf_link_hash
       dyn = htab->elf.dynamic_sections_created;
       if (tls_type & (GOT_TLS_GD | GOT_TLS_IE))
 	{
+	  int indx = 0;
+	  bool need_reloc = false;
+	  RISCV_TLS_GD_IE_NEED_DYN_RELOC(info, dyn, h, indx, need_reloc);
+
 	  /* TLS_GD needs two dynamic relocs and two GOT slots.  */
 	  if (tls_type & GOT_TLS_GD)
 	    {
 	      s->size += 2 * RISCV_ELF_WORD_BYTES;
-	      htab->elf.srelgot->size += 2 * sizeof (ElfNN_External_Rela);
+	      if (need_reloc)
+		htab->elf.srelgot->size += 2 * sizeof (ElfNN_External_Rela);
 	    }
 
 	  /* TLS_IE needs one dynamic reloc and one GOT slot.  */
 	  if (tls_type & GOT_TLS_IE)
 	    {
 	      s->size += RISCV_ELF_WORD_BYTES;
-	      htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
+	      if (need_reloc)
+		htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
 	    }
 	}
       else
@@ -1045,9 +1344,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     h->got.offset = (bfd_vma) -1;
 
-  eh = (struct riscv_elf_link_hash_entry *) h;
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -1061,7 +1359,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -1074,12 +1372,12 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -1087,7 +1385,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -1110,7 +1408,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -1119,49 +1417,71 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * sizeof (ElfNN_External_Rela);
     }
 
-  return TRUE;
+  return true;
 }
 
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
+/* Allocate space in .plt, .got and associated reloc sections for
+   ifunc dynamic relocs.  */
 
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
+static bool
+allocate_ifunc_dynrelocs (struct elf_link_hash_entry *h,
+			  void *inf)
 {
-  asection *sec;
+  struct bfd_link_info *info;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
+  if (h->root.type == bfd_link_hash_warning)
+    h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
+  info = (struct bfd_link_info *) inf;
 
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
+     here if it is defined and referenced in a non-shared object.  */
+  if (h->type == STT_GNU_IFUNC
+      && h->def_regular)
+    return _bfd_elf_allocate_ifunc_dyn_relocs (info, h,
+					       &h->dyn_relocs,
+					       PLT_ENTRY_SIZE,
+					       PLT_HEADER_SIZE,
+					       GOT_ENTRY_SIZE,
+					       true);
+  return true;
 }
 
-static bfd_boolean
+/* Allocate space in .plt, .got and associated reloc sections for
+   local ifunc dynamic relocs.  */
+
+static int
+allocate_local_ifunc_dynrelocs (void **slot, void *inf)
+{
+  struct elf_link_hash_entry *h
+    = (struct elf_link_hash_entry *) *slot;
+
+  if (h->type != STT_GNU_IFUNC
+      || !h->def_regular
+      || !h->ref_regular
+      || !h->forced_local
+      || h->root.type != bfd_link_hash_defined)
+    abort ();
+
+  return allocate_ifunc_dynrelocs (h, inf);
+}
+
+static bool
 riscv_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   struct riscv_elf_link_hash_table *htab;
@@ -1251,16 +1571,29 @@ riscv_elf_size_dynamic_sections (bfd *ou
 	}
     }
 
-  /* Allocate global sym .plt and .got entries, and space for global
-     sym dynamic relocs.  */
+  /* Allocate .plt and .got entries and space dynamic relocs for
+     global symbols.  */
   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
 
+  /* Allocate .plt and .got entries and space dynamic relocs for
+     global ifunc symbols.  */
+  elf_link_hash_traverse (&htab->elf, allocate_ifunc_dynrelocs, info);
+
+  /* Allocate .plt and .got entries and space dynamic relocs for
+     local ifunc symbols.  */
+  htab_traverse (htab->loc_hash_table, allocate_local_ifunc_dynrelocs, info);
+
+  /* Used to resolve the dynamic relocs overwite problems when
+     generating static executable.  */
+  if (htab->elf.irelplt)
+    htab->last_iplt_index = htab->elf.irelplt->reloc_count - 1;
+
   if (htab->elf.sgotplt)
     {
       struct elf_link_hash_entry *got;
       got = elf_link_hash_lookup (elf_hash_table (info),
 				  "_GLOBAL_OFFSET_TABLE_",
-				  FALSE, FALSE, FALSE);
+				  false, false, false);
 
       /* Don't allocate .got.plt section if there are no GOT nor PLT
 	 entries and there is no refeence to _GLOBAL_OFFSET_TABLE_.  */
@@ -1286,6 +1619,8 @@ riscv_elf_size_dynamic_sections (bfd *ou
       if (s == htab->elf.splt
 	  || s == htab->elf.sgot
 	  || s == htab->elf.sgotplt
+	  || s == htab->elf.iplt
+	  || s == htab->elf.igotplt
 	  || s == htab->elf.sdynbss
 	  || s == htab->elf.sdynrelro
 	  || s == htab->sdyntdata)
@@ -1293,7 +1628,7 @@ riscv_elf_size_dynamic_sections (bfd *ou
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (strncmp (s->name, ".rela", 5) == 0)
+      else if (startswith (s->name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
@@ -1331,53 +1666,21 @@ riscv_elf_size_dynamic_sections (bfd *ou
 	 at the beginning, and we don't want garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
+  /* Add dynamic entries.  */
   if (elf_hash_table (info)->dynamic_sections_created)
     {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in riscv_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
+      if (!_bfd_elf_add_dynamic_tags (output_bfd, info, true))
+	return false;
 
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->elf.srelplt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (!add_dynamic_entry (DT_RELA, 0)
-	  || !add_dynamic_entry (DT_RELASZ, 0)
-	  || !add_dynamic_entry (DT_RELAENT, sizeof (ElfNN_External_Rela)))
-	return FALSE;
-
-      /* If any dynamic relocs apply to a read-only section,
-	 then we need a DT_TEXTREL entry.  */
-      if ((info->flags & DF_TEXTREL) == 0)
-	elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
-
-      if (info->flags & DF_TEXTREL)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
+      if (htab->variant_cc
+	  && !_bfd_elf_add_dynamic_entry (info, DT_RISCV_VARIANT_CC, 0))
+       return false;
     }
-#undef add_dynamic_entry
 
-  return TRUE;
+  return true;
 }
 
 #define TP_OFFSET 0
@@ -1412,7 +1715,7 @@ riscv_global_pointer_value (struct bfd_l
 {
   struct bfd_link_hash_entry *h;
 
-  h = bfd_link_hash_lookup (info->hash, RISCV_GP_SYMBOL, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, RISCV_GP_SYMBOL, false, false, true);
   if (h == NULL || h->type != bfd_link_hash_defined)
     return 0;
 
@@ -1431,7 +1734,10 @@ perform_relocation (const reloc_howto_ty
 {
   if (howto->pc_relative)
     value -= sec_addr (input_section) + rel->r_offset;
-  value += rel->r_addend;
+
+  /* PR31179, ignore the non-zero addend of R_RISCV_SUB_ULEB128.  */
+  if (ELFNN_R_TYPE (rel->r_info) != R_RISCV_SUB_ULEB128)
+    value += rel->r_addend;
 
   switch (ELFNN_R_TYPE (rel->r_info))
     {
@@ -1471,27 +1777,27 @@ perform_relocation (const reloc_howto_ty
       break;
 
     case R_RISCV_JAL:
-      if (!VALID_UJTYPE_IMM (value))
+      if (!VALID_JTYPE_IMM (value))
 	return bfd_reloc_overflow;
-      value = ENCODE_UJTYPE_IMM (value);
+      value = ENCODE_JTYPE_IMM (value);
       break;
 
     case R_RISCV_BRANCH:
-      if (!VALID_SBTYPE_IMM (value))
+      if (!VALID_BTYPE_IMM (value))
 	return bfd_reloc_overflow;
-      value = ENCODE_SBTYPE_IMM (value);
+      value = ENCODE_BTYPE_IMM (value);
       break;
 
     case R_RISCV_RVC_BRANCH:
-      if (!VALID_RVC_B_IMM (value))
+      if (!VALID_CBTYPE_IMM (value))
 	return bfd_reloc_overflow;
-      value = ENCODE_RVC_B_IMM (value);
+      value = ENCODE_CBTYPE_IMM (value);
       break;
 
     case R_RISCV_RVC_JUMP:
-      if (!VALID_RVC_J_IMM (value))
+      if (!VALID_CJTYPE_IMM (value))
 	return bfd_reloc_overflow;
-      value = ENCODE_RVC_J_IMM (value);
+      value = ENCODE_CJTYPE_IMM (value);
       break;
 
     case R_RISCV_RVC_LUI:
@@ -1500,18 +1806,64 @@ perform_relocation (const reloc_howto_ty
 	  /* Linker relaxation can convert an address equal to or greater than
 	     0x800 to slightly below 0x800.  C.LUI does not accept zero as a
 	     valid immediate.  We can fix this by converting it to a C.LI.  */
-	  bfd_vma insn = bfd_get (howto->bitsize, input_bfd,
-				  contents + rel->r_offset);
+	  bfd_vma insn = riscv_get_insn (howto->bitsize,
+					 contents + rel->r_offset);
 	  insn = (insn & ~MATCH_C_LUI) | MATCH_C_LI;
-	  bfd_put (howto->bitsize, input_bfd, insn, contents + rel->r_offset);
-	  value = ENCODE_RVC_IMM (0);
+	  riscv_put_insn (howto->bitsize, insn, contents + rel->r_offset);
+	  value = ENCODE_CITYPE_IMM (0);
 	}
-      else if (!VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (value)))
+      else if (!VALID_CITYPE_LUI_IMM (RISCV_CONST_HIGH_PART (value)))
 	return bfd_reloc_overflow;
       else
-	value = ENCODE_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (value));
+	value = ENCODE_CITYPE_LUI_IMM (RISCV_CONST_HIGH_PART (value));
       break;
 
+    /* R_RISCV_SET_ULEB128 won't go into here.  */
+    case R_RISCV_SUB_ULEB128:
+      {
+	unsigned int len = 0;
+	_bfd_read_unsigned_leb128 (input_bfd, contents + rel->r_offset, &len);
+
+	/* Clean the contents value to zero (0x80), but keep the original
+	   length.  */
+	bfd_byte *p = contents + rel->r_offset;
+	bfd_byte *endp = p + len - 1;
+	memset (p, 0x80, len - 1);
+	*(endp) = 0;
+
+	/* Make sure the length of the new uleb128 value within the
+	   original (available) length.  */
+	unsigned int new_len = 0;
+	unsigned int val_t = value;
+	do
+	  {
+	    new_len++;
+	    val_t >>= 7;
+	  }
+	while (val_t);
+	if (new_len > len)
+	  {
+	    _bfd_error_handler
+	      (_("final size of uleb128 value at offset 0x%lx in %pA from "
+		 "%pB exceeds available space"),
+	       (long) rel->r_offset, input_section, input_bfd);
+	    return bfd_reloc_dangerous;
+	  }
+	else
+	  {
+	    p = _bfd_write_unsigned_leb128 (p, endp, value);
+	    BFD_ASSERT (p);
+
+	    /* If the length of the value is reduced and shorter than the
+	       original uleb128 length, then _bfd_write_unsigned_leb128 may
+	       clear the 0x80 to 0x0 for the last byte that was written.
+	       So reset it to keep the the original uleb128 length.  */
+	    if (--p < endp)
+	      *p |= 0x80;
+	  }
+	return bfd_reloc_ok;
+      }
+
     case R_RISCV_32:
     case R_RISCV_64:
     case R_RISCV_ADD8:
@@ -1539,9 +1891,16 @@ perform_relocation (const reloc_howto_ty
       return bfd_reloc_notsupported;
     }
 
-  bfd_vma word = bfd_get (howto->bitsize, input_bfd, contents + rel->r_offset);
+  bfd_vma word;
+  if (riscv_is_insn_reloc (howto))
+    word = riscv_get_insn (howto->bitsize, contents + rel->r_offset);
+  else
+    word = bfd_get (howto->bitsize, input_bfd, contents + rel->r_offset);
   word = (word & ~howto->dst_mask) | (value & howto->dst_mask);
-  bfd_put (howto->bitsize, input_bfd, word, contents + rel->r_offset);
+  if (riscv_is_insn_reloc (howto))
+    riscv_put_insn (howto->bitsize, word, contents + rel->r_offset);
+  else
+    bfd_put (howto->bitsize, input_bfd, word, contents + rel->r_offset);
 
   return bfd_reloc_ok;
 }
@@ -1551,25 +1910,41 @@ perform_relocation (const reloc_howto_ty
 
 typedef struct
 {
+  /* PC value.  */
   bfd_vma address;
+  /* Relocation value with addend.  */
   bfd_vma value;
+  /* Original reloc type.  */
+  int type;
 } riscv_pcrel_hi_reloc;
 
 typedef struct riscv_pcrel_lo_reloc
 {
-  asection *			 input_section;
-  struct bfd_link_info *	 info;
-  reloc_howto_type *		 howto;
-  const Elf_Internal_Rela *	 reloc;
-  bfd_vma			 addr;
-  const char *			 name;
-  bfd_byte *			 contents;
-  struct riscv_pcrel_lo_reloc *	 next;
+  /* PC value of auipc.  */
+  bfd_vma address;
+  /* Internal relocation.  */
+  const Elf_Internal_Rela *reloc;
+  /* Record the following information helps to resolve the %pcrel
+     which cross different input section.  For now we build a hash
+     for pcrel at the start of riscv_elf_relocate_section, and then
+     free the hash at the end.  But riscv_elf_relocate_section only
+     handles an input section at a time, so that means we can only
+     resolve the %pcrel_hi and %pcrel_lo which are in the same input
+     section.  Otherwise, we will report dangerous relocation errors
+     for those %pcrel which are not in the same input section.  */
+  asection *input_section;
+  struct bfd_link_info *info;
+  reloc_howto_type *howto;
+  bfd_byte *contents;
+  /* The next riscv_pcrel_lo_reloc.  */
+  struct riscv_pcrel_lo_reloc *next;
 } riscv_pcrel_lo_reloc;
 
 typedef struct
 {
+  /* Hash table for riscv_pcrel_hi_reloc.  */
   htab_t hi_relocs;
+  /* Linked list for riscv_pcrel_lo_reloc.  */
   riscv_pcrel_lo_reloc *lo_relocs;
 } riscv_pcrel_relocs;
 
@@ -1580,17 +1955,16 @@ riscv_pcrel_reloc_hash (const void *entr
   return (hashval_t)(e->address >> 2);
 }
 
-static bfd_boolean
+static int
 riscv_pcrel_reloc_eq (const void *entry1, const void *entry2)
 {
   const riscv_pcrel_hi_reloc *e1 = entry1, *e2 = entry2;
   return e1->address == e2->address;
 }
 
-static bfd_boolean
+static bool
 riscv_init_pcrel_relocs (riscv_pcrel_relocs *p)
 {
-
   p->lo_relocs = NULL;
   p->hi_relocs = htab_create (1024, riscv_pcrel_reloc_hash,
 			      riscv_pcrel_reloc_eq, free);
@@ -1612,83 +1986,84 @@ riscv_free_pcrel_relocs (riscv_pcrel_rel
   htab_delete (p->hi_relocs);
 }
 
-static bfd_boolean
+static bool
 riscv_zero_pcrel_hi_reloc (Elf_Internal_Rela *rel,
 			   struct bfd_link_info *info,
 			   bfd_vma pc,
 			   bfd_vma addr,
 			   bfd_byte *contents,
-			   const reloc_howto_type *howto,
-			   bfd *input_bfd)
+			   const reloc_howto_type *howto)
 {
   /* We may need to reference low addreses in PC-relative modes even when the
-   * PC is far away from these addresses.  For example, undefweak references
-   * need to produce the address 0 when linked.  As 0 is far from the arbitrary
-   * addresses that we can link PC-relative programs at, the linker can't
-   * actually relocate references to those symbols.  In order to allow these
-   * programs to work we simply convert the PC-relative auipc sequences to
-   * 0-relative lui sequences.  */
+     PC is far away from these addresses.  For example, undefweak references
+     need to produce the address 0 when linked.  As 0 is far from the arbitrary
+     addresses that we can link PC-relative programs at, the linker can't
+     actually relocate references to those symbols.  In order to allow these
+     programs to work we simply convert the PC-relative auipc sequences to
+     0-relative lui sequences.  */
   if (bfd_link_pic (info))
-    return FALSE;
+    return false;
 
   /* If it's possible to reference the symbol using auipc we do so, as that's
-   * more in the spirit of the PC-relative relocations we're processing.  */
+     more in the spirit of the PC-relative relocations we're processing.  */
   bfd_vma offset = addr - pc;
   if (ARCH_SIZE == 32 || VALID_UTYPE_IMM (RISCV_CONST_HIGH_PART (offset)))
-    return FALSE;
+    return false;
 
   /* If it's impossible to reference this with a LUI-based offset then don't
-   * bother to convert it at all so users still see the PC-relative relocation
-   * in the truncation message.  */
+     bother to convert it at all so users still see the PC-relative relocation
+     in the truncation message.  */
   if (ARCH_SIZE > 32 && !VALID_UTYPE_IMM (RISCV_CONST_HIGH_PART (addr)))
-    return FALSE;
+    return false;
 
-  rel->r_info = ELFNN_R_INFO(addr, R_RISCV_HI20);
+  rel->r_info = ELFNN_R_INFO (addr, R_RISCV_HI20);
 
-  bfd_vma insn = bfd_get(howto->bitsize, input_bfd, contents + rel->r_offset);
+  bfd_vma insn = riscv_get_insn (howto->bitsize, contents + rel->r_offset);
   insn = (insn & ~MASK_AUIPC) | MATCH_LUI;
-  bfd_put(howto->bitsize, input_bfd, insn, contents + rel->r_offset);
-  return TRUE;
+  riscv_put_insn (howto->bitsize, insn, contents + rel->r_offset);
+  return true;
 }
 
-static bfd_boolean
-riscv_record_pcrel_hi_reloc (riscv_pcrel_relocs *p, bfd_vma addr,
-			     bfd_vma value, bfd_boolean absolute)
+static bool
+riscv_record_pcrel_hi_reloc (riscv_pcrel_relocs *p,
+			     bfd_vma addr,
+			     bfd_vma value,
+			     int type,
+			     bool absolute)
 {
   bfd_vma offset = absolute ? value : value - addr;
-  riscv_pcrel_hi_reloc entry = {addr, offset};
+  riscv_pcrel_hi_reloc entry = {addr, offset, type};
   riscv_pcrel_hi_reloc **slot =
     (riscv_pcrel_hi_reloc **) htab_find_slot (p->hi_relocs, &entry, INSERT);
 
   BFD_ASSERT (*slot == NULL);
   *slot = (riscv_pcrel_hi_reloc *) bfd_malloc (sizeof (riscv_pcrel_hi_reloc));
   if (*slot == NULL)
-    return FALSE;
+    return false;
   **slot = entry;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 riscv_record_pcrel_lo_reloc (riscv_pcrel_relocs *p,
+			     bfd_vma addr,
+			     const Elf_Internal_Rela *reloc,
 			     asection *input_section,
 			     struct bfd_link_info *info,
 			     reloc_howto_type *howto,
-			     const Elf_Internal_Rela *reloc,
-			     bfd_vma addr,
-			     const char *name,
 			     bfd_byte *contents)
 {
   riscv_pcrel_lo_reloc *entry;
   entry = (riscv_pcrel_lo_reloc *) bfd_malloc (sizeof (riscv_pcrel_lo_reloc));
   if (entry == NULL)
-    return FALSE;
-  *entry = (riscv_pcrel_lo_reloc) {input_section, info, howto, reloc, addr,
-				   name, contents, p->lo_relocs};
+    return false;
+  *entry = (riscv_pcrel_lo_reloc) {addr, reloc, input_section, info,
+				   howto, contents, p->lo_relocs};
   p->lo_relocs = entry;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 riscv_resolve_pcrel_lo_relocs (riscv_pcrel_relocs *p)
 {
   riscv_pcrel_lo_reloc *r;
@@ -1697,26 +2072,44 @@ riscv_resolve_pcrel_lo_relocs (riscv_pcr
     {
       bfd *input_bfd = r->input_section->owner;
 
-      riscv_pcrel_hi_reloc search = {r->addr, 0};
+      riscv_pcrel_hi_reloc search = {r->address, 0, 0};
       riscv_pcrel_hi_reloc *entry = htab_find (p->hi_relocs, &search);
-      if (entry == NULL
-	  /* Check for overflow into bit 11 when adding reloc addend.  */
-	  || (! (entry->value & 0x800)
-	      && ((entry->value + r->reloc->r_addend) & 0x800)))
-	{
-	  char *string = (entry == NULL
-			  ? "%pcrel_lo missing matching %pcrel_hi"
-			  : "%pcrel_lo overflow with an addend");
+      /* There may be a risk if the %pcrel_lo with addend refers to
+	 an IFUNC symbol.  The %pcrel_hi has been relocated to plt,
+	 so the corresponding %pcrel_lo with addend looks wrong.  */
+      char *string = NULL;
+      if (entry == NULL)
+	string = _("%pcrel_lo missing matching %pcrel_hi");
+      else if (entry->type == R_RISCV_GOT_HI20
+	       && r->reloc->r_addend != 0)
+	string = _("%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20");
+      else if (RISCV_CONST_HIGH_PART (entry->value)
+	       != RISCV_CONST_HIGH_PART (entry->value + r->reloc->r_addend))
+	{
+	  /* Check the overflow when adding reloc addend.  */
+	  string = bfd_asprintf (_("%%pcrel_lo overflow with an addend,"
+				   " the value of %%pcrel_hi is 0x%" PRIx64
+				   " without any addend, but may be 0x%" PRIx64
+				   " after adding the %%pcrel_lo addend"),
+				 (int64_t) RISCV_CONST_HIGH_PART (entry->value),
+				 (int64_t) RISCV_CONST_HIGH_PART
+				 (entry->value + r->reloc->r_addend));
+	  if (string == NULL)
+	    string = _("%pcrel_lo overflow with an addend");
+	}
+
+      if (string != NULL)
+	{
 	  (*r->info->callbacks->reloc_dangerous)
 	    (r->info, string, input_bfd, r->input_section, r->reloc->r_offset);
-	  return TRUE;
+	  return true;
 	}
 
       perform_relocation (r->howto, r->reloc, entry->value, r->input_section,
 			  input_bfd, r->contents);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relocate a RISC-V ELF section.
@@ -1747,7 +2140,7 @@ riscv_resolve_pcrel_lo_relocs (riscv_pcr
    section, which means that the addend must be adjusted
    accordingly.  */
 
-static bfd_boolean
+static int
 riscv_elf_relocate_section (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    bfd *input_bfd,
@@ -1760,16 +2153,17 @@ riscv_elf_relocate_section (bfd *output_
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
   riscv_pcrel_relocs pcrel_relocs;
-  bfd_boolean ret = FALSE;
-  asection *sreloc = elf_section_data (input_section)->sreloc;
+  bool ret = false;
   struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_bfd);
   struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
   bfd_vma *local_got_offsets = elf_local_got_offsets (input_bfd);
-  bfd_boolean absolute;
+  bfd_vma uleb128_set_vma = 0;
+  Elf_Internal_Rela *uleb128_set_rel = NULL;
+  bool absolute;
 
   if (!riscv_init_pcrel_relocs (&pcrel_relocs))
-    return FALSE;
+    return false;
 
   relend = relocs + input_section->reloc_count;
   for (rel = relocs; rel < relend; rel++)
@@ -1780,18 +2174,16 @@ riscv_elf_relocate_section (bfd *output_
       asection *sec;
       bfd_vma relocation;
       bfd_reloc_status_type r = bfd_reloc_ok;
-      const char *name;
+      const char *name = NULL;
       bfd_vma off, ie_off;
-      bfd_boolean unresolved_reloc, is_ie = FALSE;
+      bool unresolved_reloc, is_ie = false;
       bfd_vma pc = sec_addr (input_section) + rel->r_offset;
       int r_type = ELFNN_R_TYPE (rel->r_info), tls_type;
       reloc_howto_type *howto = riscv_elf_rtype_to_howto (input_bfd, r_type);
       const char *msg = NULL;
-      char *msg_buf = NULL;
-      bfd_boolean resolved_to_zero;
+      bool resolved_to_zero;
 
-      if (howto == NULL
-	  || r_type == R_RISCV_GNU_VTINHERIT || r_type == R_RISCV_GNU_VTENTRY)
+      if (howto == NULL)
 	continue;
 
       /* This is a final link.  */
@@ -1799,16 +2191,29 @@ riscv_elf_relocate_section (bfd *output_
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  sym = local_syms + r_symndx;
 	  sec = local_sections[r_symndx];
 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+
+	  /* Relocate against local STT_GNU_IFUNC symbol.  */
+	  if (!bfd_link_relocatable (info)
+	      && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+	    {
+	      h = riscv_elf_get_local_sym_hash (htab, input_bfd, rel, false);
+	      if (h == NULL)
+		abort ();
+
+	      /* Set STT_GNU_IFUNC symbol value.  */
+	      h->root.u.def.value = sym->st_value;
+	      h->root.u.def.section = sec;
+	    }
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -1833,6 +2238,229 @@ riscv_elf_relocate_section (bfd *output_
       if (bfd_link_relocatable (info))
 	continue;
 
+      /* Since STT_GNU_IFUNC symbol must go through PLT, we handle
+	 it here if it is defined in a non-shared object.  */
+      if (h != NULL
+	  && h->type == STT_GNU_IFUNC
+	  && h->def_regular)
+	{
+	  asection *plt, *base_got;
+
+	  if ((input_section->flags & SEC_ALLOC) == 0)
+	    {
+	      /* If this is a SHT_NOTE section without SHF_ALLOC, treat
+		 STT_GNU_IFUNC symbol as STT_FUNC.  */
+	      if (elf_section_type (input_section) == SHT_NOTE)
+		goto skip_ifunc;
+
+	      /* Dynamic relocs are not propagated for SEC_DEBUGGING
+		 sections because such sections are not SEC_ALLOC and
+		 thus ld.so will not process them.  */
+	      if ((input_section->flags & SEC_DEBUGGING) != 0)
+		continue;
+
+	      abort ();
+	    }
+	  else if (h->plt.offset == (bfd_vma) -1
+		   /* The following relocation may not need the .plt entries
+		      when all references to a STT_GNU_IFUNC symbols are done
+		      via GOT or static function pointers.  */
+		   && r_type != R_RISCV_32
+		   && r_type != R_RISCV_64
+		   && r_type != R_RISCV_HI20
+		   && r_type != R_RISCV_GOT_HI20
+		   && r_type != R_RISCV_LO12_I
+		   && r_type != R_RISCV_LO12_S)
+	    goto bad_ifunc_reloc;
+
+	  /* STT_GNU_IFUNC symbol must go through PLT.  */
+	  plt = htab->elf.splt ? htab->elf.splt : htab->elf.iplt;
+	  relocation = plt->output_section->vma
+		       + plt->output_offset
+		       + h->plt.offset;
+
+	  switch (r_type)
+	    {
+	    case R_RISCV_32:
+	    case R_RISCV_64:
+	      if (rel->r_addend != 0)
+		{
+		  if (h->root.root.string)
+		    name = h->root.root.string;
+		  else
+		    name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, NULL);
+
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB: relocation %s against STT_GNU_IFUNC "
+		       "symbol `%s' has non-zero addend: %" PRId64),
+		     input_bfd, howto->name, name, (int64_t) rel->r_addend);
+		  bfd_set_error (bfd_error_bad_value);
+		  return false;
+		}
+
+		/* Generate dynamic relocation only when there is a non-GOT
+		   reference in a shared object or there is no PLT.  */
+		if ((bfd_link_pic (info) && h->non_got_ref)
+		    || h->plt.offset == (bfd_vma) -1)
+		  {
+		    Elf_Internal_Rela outrel;
+		    asection *sreloc;
+
+		    /* Need a dynamic relocation to get the real function
+		       address.  */
+		    outrel.r_offset = _bfd_elf_section_offset (output_bfd,
+							       info,
+							       input_section,
+							       rel->r_offset);
+		    if (outrel.r_offset == (bfd_vma) -1
+			|| outrel.r_offset == (bfd_vma) -2)
+		      abort ();
+
+		    outrel.r_offset += input_section->output_section->vma
+				       + input_section->output_offset;
+
+		    if (h->dynindx == -1
+			|| h->forced_local
+			|| bfd_link_executable (info))
+		      {
+			info->callbacks->minfo
+			  (_("Local IFUNC function `%s' in %pB\n"),
+			   h->root.root.string,
+			   h->root.u.def.section->owner);
+
+			/* This symbol is resolved locally.  */
+			outrel.r_info = ELFNN_R_INFO (0, R_RISCV_IRELATIVE);
+			outrel.r_addend = h->root.u.def.value
+			  + h->root.u.def.section->output_section->vma
+			  + h->root.u.def.section->output_offset;
+		      }
+		    else
+		      {
+			outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type);
+			outrel.r_addend = 0;
+		      }
+
+		    /* Dynamic relocations are stored in
+		       1. .rela.ifunc section in PIC object.
+		       2. .rela.got section in dynamic executable.
+		       3. .rela.iplt section in static executable.  */
+		    if (bfd_link_pic (info))
+		      sreloc = htab->elf.irelifunc;
+		    else if (htab->elf.splt != NULL)
+		      sreloc = htab->elf.srelgot;
+		    else
+		      sreloc = htab->elf.irelplt;
+
+		    riscv_elf_append_rela (output_bfd, sreloc, &outrel);
+
+		    /* If this reloc is against an external symbol, we
+		       do not want to fiddle with the addend.  Otherwise,
+		       we need to include the symbol value so that it
+		       becomes an addend for the dynamic reloc.  For an
+		       internal symbol, we have updated addend.  */
+		    continue;
+		  }
+		goto do_relocation;
+
+	      case R_RISCV_GOT_HI20:
+		base_got = htab->elf.sgot;
+		off = h->got.offset;
+
+		if (base_got == NULL)
+		  abort ();
+
+		if (off == (bfd_vma) -1)
+		  {
+		    bfd_vma plt_idx;
+
+		    /* We can't use h->got.offset here to save state, or
+		       even just remember the offset, as finish_dynamic_symbol
+		       would use that as offset into .got.  */
+
+		    if (htab->elf.splt != NULL)
+		      {
+			plt_idx = (h->plt.offset - PLT_HEADER_SIZE)
+				  / PLT_ENTRY_SIZE;
+			off = GOTPLT_HEADER_SIZE + (plt_idx * GOT_ENTRY_SIZE);
+			base_got = htab->elf.sgotplt;
+		      }
+		    else
+		      {
+			plt_idx = h->plt.offset / PLT_ENTRY_SIZE;
+			off = plt_idx * GOT_ENTRY_SIZE;
+			base_got = htab->elf.igotplt;
+		      }
+
+		    if (h->dynindx == -1
+			|| h->forced_local
+			|| info->symbolic)
+		      {
+			/* This references the local definition.  We must
+			   initialize this entry in the global offset table.
+			   Since the offset must always be a multiple of 8,
+			   we use the least significant bit to record
+			   whether we have initialized it already.
+
+			   When doing a dynamic link, we create a .rela.got
+			   relocation entry to initialize the value.  This
+			   is done in the finish_dynamic_symbol routine.   */
+			if ((off & 1) != 0)
+			  off &= ~1;
+			else
+			  {
+			    bfd_put_NN (output_bfd, relocation,
+					base_got->contents + off);
+			    /* Note that this is harmless for the case,
+			       as -1 | 1 still is -1.  */
+			    h->got.offset |= 1;
+			  }
+		      }
+		  }
+
+		relocation = base_got->output_section->vma
+			     + base_got->output_offset + off;
+
+		if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
+						  relocation, r_type,
+						  false))
+		  r = bfd_reloc_overflow;
+		goto do_relocation;
+
+	      case R_RISCV_CALL:
+	      case R_RISCV_CALL_PLT:
+	      case R_RISCV_HI20:
+	      case R_RISCV_LO12_I:
+	      case R_RISCV_LO12_S:
+		goto do_relocation;
+
+	      case R_RISCV_PCREL_HI20:
+		if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
+						  relocation, r_type,
+						  false))
+		  r = bfd_reloc_overflow;
+		goto do_relocation;
+
+	    default:
+	    bad_ifunc_reloc:
+	      if (h->root.root.string)
+		name = h->root.root.string;
+	      else
+		/* The entry of local ifunc is fake in global hash table,
+		   we should find the name by the original local symbol.  */
+		name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, NULL);
+
+	      _bfd_error_handler
+	      /* xgettext:c-format */
+	      (_("%pB: relocation %s against STT_GNU_IFUNC "
+		 "symbol `%s' isn't supported"), input_bfd,
+	       howto->name, name);
+	      bfd_set_error (bfd_error_bad_value);
+	      return false;
+	    }
+	}
+
+    skip_ifunc:
       if (h != NULL)
 	name = h->root.root.string;
       else
@@ -1872,26 +2500,75 @@ riscv_elf_relocate_section (bfd *output_
 	  /* These require no special handling beyond perform_relocation.  */
 	  break;
 
+	case R_RISCV_SET_ULEB128:
+	  if (uleb128_set_rel == NULL)
+	    {
+	      /* Saved for later usage.  */
+	      uleb128_set_vma = relocation;
+	      uleb128_set_rel = rel;
+	      continue;
+	    }
+	  else
+	    {
+	      msg = ("Mismatched R_RISCV_SET_ULEB128, it must be paired with"
+		     " and applied before R_RISCV_SUB_ULEB128");
+	      r = bfd_reloc_dangerous;
+	    }
+	  break;
+
+	case R_RISCV_SUB_ULEB128:
+	  if (uleb128_set_rel != NULL
+	      && uleb128_set_rel->r_offset == rel->r_offset)
+	    {
+	      relocation = uleb128_set_vma - relocation
+			   + uleb128_set_rel->r_addend;
+	      uleb128_set_vma = 0;
+	      uleb128_set_rel = NULL;
+
+	      /* PR31179, the addend of SUB_ULEB128 should be zero if using
+		 .uleb128, but we make it non-zero by accident in assembler,
+		 so just ignore it in perform_relocation, and make assembler
+		 continue doing the right thing.  Don't reset the addend of
+		 SUB_ULEB128 to zero here since it will break the --emit-reloc,
+		 even though the non-zero addend is unexpected.
+
+		 We encourage people to rebuild their stuff to get the
+		 non-zero addend of SUB_ULEB128, but that might need some
+		 times, so report warnings to inform people need to rebuild
+		 if --check-uleb128 is enabled.  However, since the failed
+		 .reloc cases for ADD/SET/SUB/ULEB128 are rarely to use, it
+		 may acceptable that stop supproting them until people rebuld
+		 their stuff, maybe half-year or one year later.  I believe
+		 this might be the least harmful option that we should go.
+
+		 Or maybe we should teach people that don't write the
+		 .reloc R_RISCV_SUB* with non-zero constant, and report
+		 warnings/errors in assembler.  */
+	      if (htab->params->check_uleb128
+		  && rel->r_addend != 0)
+		_bfd_error_handler (_("%pB: warning: R_RISCV_SUB_ULEB128 with"
+				      " non-zero addend, please rebuild by"
+				      " binutils 2.42 or up"), input_bfd);
+	    }
+	  else
+	    {
+	      msg = ("Mismatched R_RISCV_SUB_ULEB128, it must be paired with"
+		     " and applied after R_RISCV_SET_ULEB128");
+	      r = bfd_reloc_dangerous;
+	    }
+	  break;
+
 	case R_RISCV_GOT_HI20:
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn, pic;
-
 	      off = h->got.offset;
 	      BFD_ASSERT (off != (bfd_vma) -1);
-	      dyn = elf_hash_table (info)->dynamic_sections_created;
-	      pic = bfd_link_pic (info);
 
-	      if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, pic, h)
-		  || (pic && SYMBOL_REFERENCES_LOCAL (info, h)))
+	      if (RISCV_RESOLVED_LOCALLY (info, h))
 		{
-		  /* This is actually a static link, or it is a
-		     -Bsymbolic link and the symbol is defined
-		     locally, or the symbol was forced to be local
-		     because of a version file.  We must initialize
-		     this entry in the global offset table.  Since the
-		     offset must always be a multiple of the word size,
-		     we use the least significant bit to record whether
+		  /* We must initialize this entry in the global offset table.
+		     Since the offset must always be a multiple of the word
+		     size, we use the least significant bit to record whether
 		     we have initialized it already.
 
 		     When doing a dynamic link, we create a .rela.got
@@ -1907,7 +2584,7 @@ riscv_elf_relocate_section (bfd *output_
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -1946,21 +2623,29 @@ riscv_elf_relocate_section (bfd *output_
 		  local_got_offsets[r_symndx] |= 1;
 		}
 	    }
-	  relocation = sec_addr (htab->elf.sgot) + off;
-	  absolute = riscv_zero_pcrel_hi_reloc (rel,
-						info,
-						pc,
-						relocation,
-						contents,
-						howto,
-						input_bfd);
-	  r_type = ELFNN_R_TYPE (rel->r_info);
-	  howto = riscv_elf_rtype_to_howto (input_bfd, r_type);
-	  if (howto == NULL)
-	    r = bfd_reloc_notsupported;
-	  else if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
-						 relocation, absolute))
-	    r = bfd_reloc_overflow;
+
+	  if (rel->r_addend != 0)
+	    {
+	      msg = _("The addend isn't allowed for R_RISCV_GOT_HI20");
+	      r = bfd_reloc_dangerous;
+	    }
+	  else
+	    {
+	      /* Address of got entry.  */
+	      relocation = sec_addr (htab->elf.sgot) + off;
+	      absolute = riscv_zero_pcrel_hi_reloc (rel, info, pc,
+						    relocation, contents,
+						    howto);
+	      /* Update howto if relocation is changed.  */
+	      howto = riscv_elf_rtype_to_howto (input_bfd,
+						ELFNN_R_TYPE (rel->r_info));
+	      if (howto == NULL)
+		r = bfd_reloc_notsupported;
+	      else if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
+						     relocation, r_type,
+						     absolute))
+		r = bfd_reloc_overflow;
+	    }
 	  break;
 
 	case R_RISCV_ADD8:
@@ -1975,6 +2660,15 @@ riscv_elf_relocate_section (bfd *output_
 	  break;
 
 	case R_RISCV_SUB6:
+	  {
+	    bfd_vma old_value = bfd_get (howto->bitsize, input_bfd,
+					 contents + rel->r_offset);
+	    relocation = (old_value & ~howto->dst_mask)
+			 | (((old_value & howto->dst_mask) - relocation)
+			    & howto->dst_mask);
+	  }
+	  break;
+
 	case R_RISCV_SUB8:
 	case R_RISCV_SUB16:
 	case R_RISCV_SUB32:
@@ -1987,30 +2681,60 @@ riscv_elf_relocate_section (bfd *output_
 	  break;
 
 	case R_RISCV_CALL:
+	case R_RISCV_CALL_PLT:
 	  /* Handle a call to an undefined weak function.  This won't be
 	     relaxed, so we have to handle it here.  */
 	  if (h != NULL && h->root.type == bfd_link_hash_undefweak
-	      && h->plt.offset == MINUS_ONE)
+	      && (!bfd_link_pic (info) || h->plt.offset == MINUS_ONE))
 	    {
 	      /* We can use x0 as the base register.  */
-	      bfd_vma insn = bfd_get_32 (input_bfd,
-					 contents + rel->r_offset + 4);
+	      bfd_vma insn = bfd_getl32 (contents + rel->r_offset + 4);
 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
-	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset + 4);
+	      bfd_putl32 (insn, contents + rel->r_offset + 4);
 	      /* Set the relocation value so that we get 0 after the pc
 		 relative adjustment.  */
 	      relocation = sec_addr (input_section) + rel->r_offset;
 	    }
 	  /* Fall through.  */
 
-	case R_RISCV_CALL_PLT:
 	case R_RISCV_JAL:
 	case R_RISCV_RVC_JUMP:
-	  if (bfd_link_pic (info) && h != NULL && h->plt.offset != MINUS_ONE)
+	  if (bfd_link_pic (info) && h != NULL)
 	    {
-	      /* Refer to the PLT entry.  */
-	      relocation = sec_addr (htab->elf.splt) + h->plt.offset;
-	      unresolved_reloc = FALSE;
+	      if (h->plt.offset != MINUS_ONE)
+		{
+		  /* Refer to the PLT entry.  This check has to match the
+		     check in _bfd_riscv_relax_section.  */
+		  relocation = sec_addr (htab->elf.splt) + h->plt.offset;
+		  unresolved_reloc = false;
+		}
+	      else if (!SYMBOL_REFERENCES_LOCAL (info, h)
+		       && (input_section->flags & SEC_ALLOC) != 0
+		       && (input_section->flags & SEC_READONLY) != 0
+		       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
+		{
+		  /* PR 28509, when generating the shared object, these
+		     referenced symbols may bind externally, which means
+		     they will be exported to the dynamic symbol table,
+		     and are preemptible by default.  These symbols cannot
+		     be referenced by the non-pic relocations, like
+		     R_RISCV_JAL and R_RISCV_RVC_JUMP relocations.
+
+		     However, consider that linker may relax the R_RISCV_CALL
+		     relocations to R_RISCV_JAL or R_RISCV_RVC_JUMP, if
+		     these relocations are relocated to the plt entries,
+		     then we won't report error for them.
+
+		     Perhaps we also need the similar checks for the
+		     R_RISCV_BRANCH and R_RISCV_RVC_BRANCH relocations.  */
+		  msg = bfd_asprintf (_("%%X%%P: relocation %s against `%s'"
+					" which may bind externally"
+					" can not be used"
+					" when making a shared object;"
+					" recompile with -fPIC\n"),
+				      howto->name, h->root.root.string);
+		  r = bfd_reloc_notsupported;
+		}
 	    }
 	  break;
 
@@ -2029,10 +2753,10 @@ riscv_elf_relocate_section (bfd *output_
 	  if (VALID_ITYPE_IMM (relocation + rel->r_addend))
 	    {
 	      /* We can use tp as the base register.  */
-	      bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
+	      bfd_vma insn = bfd_getl32 (contents + rel->r_offset);
 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
 	      insn |= X_TP << OP_SH_RS1;
-	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
+	      bfd_putl32 (insn, contents + rel->r_offset);
 	    }
 	  else
 	    r = bfd_reloc_overflow;
@@ -2042,18 +2766,18 @@ riscv_elf_relocate_section (bfd *output_
 	case R_RISCV_GPREL_S:
 	  {
 	    bfd_vma gp = riscv_global_pointer_value (info);
-	    bfd_boolean x0_base = VALID_ITYPE_IMM (relocation + rel->r_addend);
+	    bool x0_base = VALID_ITYPE_IMM (relocation + rel->r_addend);
 	    if (x0_base || VALID_ITYPE_IMM (relocation + rel->r_addend - gp))
 	      {
 		/* We can use x0 or gp as the base register.  */
-		bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
+		bfd_vma insn = bfd_getl32 (contents + rel->r_offset);
 		insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
 		if (!x0_base)
 		  {
 		    rel->r_addend -= gp;
 		    insn |= X_GP << OP_SH_RS1;
 		  }
-		bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
+		bfd_putl32 (insn, contents + rel->r_offset);
 	      }
 	    else
 	      r = bfd_reloc_overflow;
@@ -2061,20 +2785,16 @@ riscv_elf_relocate_section (bfd *output_
 	  }
 
 	case R_RISCV_PCREL_HI20:
-	  absolute = riscv_zero_pcrel_hi_reloc (rel,
-						info,
-						pc,
-						relocation,
-						contents,
-						howto,
-						input_bfd);
-	  r_type = ELFNN_R_TYPE (rel->r_info);
-	  howto = riscv_elf_rtype_to_howto (input_bfd, r_type);
+	  absolute = riscv_zero_pcrel_hi_reloc (rel, info, pc, relocation,
+						contents, howto);
+	  /* Update howto if relocation is changed.  */
+	  howto = riscv_elf_rtype_to_howto (input_bfd,
+					    ELFNN_R_TYPE (rel->r_info));
 	  if (howto == NULL)
 	    r = bfd_reloc_notsupported;
 	  else if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
 						 relocation + rel->r_addend,
-						 absolute))
+						 r_type, absolute))
 	    r = bfd_reloc_overflow;
 	  break;
 
@@ -2094,8 +2814,8 @@ riscv_elf_relocate_section (bfd *output_
 	      break;
 	    }
 
-	  if (riscv_record_pcrel_lo_reloc (&pcrel_relocs, input_section, info,
-					   howto, rel, relocation, name,
+	  if (riscv_record_pcrel_lo_reloc (&pcrel_relocs, relocation, rel,
+					   input_section, info, howto,
 					   contents))
 	    continue;
 	  r = bfd_reloc_overflow;
@@ -2107,28 +2827,20 @@ riscv_elf_relocate_section (bfd *output_
 	  break;
 
 	case R_RISCV_32:
+	  /* Non ABS symbol should be blocked in check_relocs.  */
+	  if (ARCH_SIZE > 32)
+	    break;
+	  /* Fall through.  */
+
 	case R_RISCV_64:
 	  if ((input_section->flags & SEC_ALLOC) == 0)
 	    break;
 
-	  if ((bfd_link_pic (info)
-	       && (h == NULL
-		   || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-		       && !resolved_to_zero)
-		   || h->root.type != bfd_link_hash_undefweak)
-	       && (! howto->pc_relative
-		   || !SYMBOL_CALLS_LOCAL (info, h)))
-	      || (!bfd_link_pic (info)
-		  && h != NULL
-		  && h->dynindx != -1
-		  && !h->non_got_ref
-		  && ((h->def_dynamic
-		       && !h->def_regular)
-		      || h->root.type == bfd_link_hash_undefweak
-		      || h->root.type == bfd_link_hash_undefined)))
+	  if (RISCV_GENERATE_DYNAMIC_RELOC (howto->pc_relative, info, h,
+					    resolved_to_zero))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip_static_relocation, skip_dynamic_relocation;
+	      asection *sreloc;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
@@ -2137,34 +2849,50 @@ riscv_elf_relocate_section (bfd *output_
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
-	      skip_static_relocation = outrel.r_offset != (bfd_vma) -2;
-	      skip_dynamic_relocation = outrel.r_offset >= (bfd_vma) -2;
+	      bool skip = false;
+	      bool relocate = false;
+	      if (outrel.r_offset == (bfd_vma) -1)
+		skip = true;
+	      else if (outrel.r_offset == (bfd_vma) -2)
+		{
+		  skip = true;
+		  relocate = true;
+		}
+	      else if (h != NULL && bfd_is_abs_symbol (&h->root))
+		{
+		  /* Don't need dynamic reloc when the ABS symbol is
+		     non-dynamic or forced to local.  Maybe just use
+		     SYMBOL_REFERENCES_LOCAL to check?  */
+		  skip = (h->forced_local || (h->dynindx == -1));
+		  relocate = skip;
+		}
+
 	      outrel.r_offset += sec_addr (input_section);
 
-	      if (skip_dynamic_relocation)
-		memset (&outrel, 0, sizeof outrel);
-	      else if (h != NULL && h->dynindx != -1
-		       && !(bfd_link_pic (info)
-			    && SYMBOLIC_BIND (info, h)
-			    && h->def_regular))
+	      if (skip)
+		memset (&outrel, 0, sizeof outrel);	/* R_RISCV_NONE.  */
+	      else if (RISCV_COPY_INPUT_RELOC (info, h))
 		{
+		  /* Maybe just use !SYMBOL_REFERENCES_LOCAL to check?  */
 		  outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type);
 		  outrel.r_addend = rel->r_addend;
 		}
 	      else
 		{
+		  /* This symbol is local, or marked to become local.  */
 		  outrel.r_info = ELFNN_R_INFO (0, R_RISCV_RELATIVE);
 		  outrel.r_addend = relocation + rel->r_addend;
 		}
 
+	      sreloc = elf_section_data (input_section)->sreloc;
 	      riscv_elf_append_rela (output_bfd, sreloc, &outrel);
-	      if (skip_static_relocation)
+	      if (!relocate)
 		continue;
 	    }
 	  break;
 
 	case R_RISCV_TLS_GOT_HI20:
-	  is_ie = TRUE;
+	  is_ie = true;
 	  /* Fall through.  */
 
 	case R_RISCV_TLS_GD_HI20:
@@ -2193,30 +2921,16 @@ riscv_elf_relocate_section (bfd *output_
 	    {
 	      Elf_Internal_Rela outrel;
 	      int indx = 0;
-	      bfd_boolean need_relocs = FALSE;
+	      bool need_relocs = false;
 
 	      if (htab->elf.srelgot == NULL)
 		abort ();
 
-	      if (h != NULL)
-		{
-		  bfd_boolean dyn, pic;
-		  dyn = htab->elf.dynamic_sections_created;
-		  pic = bfd_link_pic (info);
-
-		  if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, pic, h)
-		      && (!pic || !SYMBOL_REFERENCES_LOCAL (info, h)))
-		    indx = h->dynindx;
-		}
+	      bool dyn = elf_hash_table (info)->dynamic_sections_created;
+	      RISCV_TLS_GD_IE_NEED_DYN_RELOC (info, dyn, h, indx, need_relocs);
 
 	      /* The GOT entries have not been initialized yet.  Do it
 		 now, and emit any relocations.  */
-	      if ((bfd_link_pic (info) || indx != 0)
-		  && (h == NULL
-		      || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-		      || h->root.type != bfd_link_hash_undefweak))
-		    need_relocs = TRUE;
-
 	      if (tls_type & GOT_TLS_GD)
 		{
 		  if (need_relocs)
@@ -2232,14 +2946,14 @@ riscv_elf_relocate_section (bfd *output_
 			  BFD_ASSERT (! unresolved_reloc);
 			  bfd_put_NN (output_bfd,
 				      dtpoff (info, relocation),
-				      (htab->elf.sgot->contents + off +
-				       RISCV_ELF_WORD_BYTES));
+				      (htab->elf.sgot->contents
+				       + off + RISCV_ELF_WORD_BYTES));
 			}
 		      else
 			{
 			  bfd_put_NN (output_bfd, 0,
-				      (htab->elf.sgot->contents + off +
-				       RISCV_ELF_WORD_BYTES));
+				      (htab->elf.sgot->contents
+				       + off + RISCV_ELF_WORD_BYTES));
 			  outrel.r_info = ELFNN_R_INFO (indx, R_RISCV_TLS_DTPRELNN);
 			  outrel.r_offset += RISCV_ELF_WORD_BYTES;
 			  riscv_elf_append_rela (output_bfd, htab->elf.srelgot, &outrel);
@@ -2256,8 +2970,8 @@ riscv_elf_relocate_section (bfd *output_
 				  htab->elf.sgot->contents + off);
 		      bfd_put_NN (output_bfd,
 				  dtpoff (info, relocation),
-				  (htab->elf.sgot->contents + off +
-				   RISCV_ELF_WORD_BYTES));
+				  (htab->elf.sgot->contents
+				   + off + RISCV_ELF_WORD_BYTES));
 		   }
 		}
 
@@ -2268,7 +2982,7 @@ riscv_elf_relocate_section (bfd *output_
 		      bfd_put_NN (output_bfd, 0,
 				  htab->elf.sgot->contents + off + ie_off);
 		      outrel.r_offset = sec_addr (htab->elf.sgot)
-				       + off + ie_off;
+					+ off + ie_off;
 		      outrel.r_addend = 0;
 		      if (indx == 0)
 			outrel.r_addend = tpoff (info, relocation);
@@ -2286,9 +3000,10 @@ riscv_elf_relocate_section (bfd *output_
 	  BFD_ASSERT (off < (bfd_vma) -2);
 	  relocation = sec_addr (htab->elf.sgot) + off + (is_ie ? ie_off : 0);
 	  if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
-					    relocation, FALSE))
+					    relocation, r_type,
+					    false))
 	    r = bfd_reloc_overflow;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	default:
@@ -2304,34 +3019,14 @@ riscv_elf_relocate_section (bfd *output_
 	  && _bfd_elf_section_offset (output_bfd, info, input_section,
 				      rel->r_offset) != (bfd_vma) -1)
 	{
-	  switch (r_type)
-	    {
-	    case R_RISCV_CALL:
-	    case R_RISCV_JAL:
-	    case R_RISCV_RVC_JUMP:
-	      if (asprintf (&msg_buf,
-			    _("%%X%%P: relocation %s against `%s' can "
-			      "not be used when making a shared object; "
-			      "recompile with -fPIC\n"),
-			    howto->name,
-			    h->root.root.string) == -1)
-		msg_buf = NULL;
-	      break;
-
-	    default:
-	      if (asprintf (&msg_buf,
-			    _("%%X%%P: unresolvable %s relocation against "
-			      "symbol `%s'\n"),
-			    howto->name,
-			    h->root.root.string) == -1)
-		msg_buf = NULL;
-	      break;
-	    }
-
-	  msg = msg_buf;
+	  msg = bfd_asprintf (_("%%X%%P: unresolvable %s relocation against "
+				"symbol `%s'\n"),
+			      howto->name,
+			      h->root.root.string);
 	  r = bfd_reloc_notsupported;
 	}
 
+ do_relocation:
       if (r == bfd_reloc_ok)
 	r = perform_relocation (howto, rel, relocation, input_section,
 				input_bfd, contents);
@@ -2354,7 +3049,7 @@ riscv_elf_relocate_section (bfd *output_
 	case bfd_reloc_undefined:
 	  info->callbacks->undefined_symbol
 	    (info, name, input_bfd, input_section, rel->r_offset,
-	     TRUE);
+	     true);
 	  break;
 
 	case bfd_reloc_outofrange:
@@ -2384,18 +3079,14 @@ riscv_elf_relocate_section (bfd *output_
       if (msg && r != bfd_reloc_dangerous)
 	info->callbacks->einfo (msg);
 
-      /* Free the unused `msg_buf` if needed.  */
-      if (msg_buf)
-	free (msg_buf);
-
       /* We already reported the error via a callback, so don't try to report
 	 it again by returning false.  That leads to spurious errors.  */
-      ret = TRUE;
+      ret = true;
       goto out;
     }
 
   ret = riscv_resolve_pcrel_lo_relocs (&pcrel_relocs);
-out:
+ out:
   riscv_free_pcrel_relocs (&pcrel_relocs);
   return ret;
 }
@@ -2403,7 +3094,7 @@ out:
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-static bfd_boolean
+static bool
 riscv_elf_finish_dynamic_symbol (bfd *output_bfd,
 				 struct bfd_link_info *info,
 				 struct elf_link_hash_entry *h,
@@ -2416,44 +3107,100 @@ riscv_elf_finish_dynamic_symbol (bfd *ou
     {
       /* We've decided to create a PLT entry for this symbol.  */
       bfd_byte *loc;
-      bfd_vma i, header_address, plt_idx, got_address;
+      bfd_vma i, header_address, plt_idx, got_offset, got_address;
       uint32_t plt_entry[PLT_ENTRY_INSNS];
       Elf_Internal_Rela rela;
+      asection *plt, *gotplt, *relplt;
 
-      BFD_ASSERT (h->dynindx != -1);
+      /* When building a static executable, use .iplt, .igot.plt and
+	 .rela.iplt sections for STT_GNU_IFUNC symbols.  */
+      if (htab->elf.splt != NULL)
+        {
+          plt = htab->elf.splt;
+          gotplt = htab->elf.sgotplt;
+          relplt = htab->elf.srelplt;
+        }
+      else
+        {
+          plt = htab->elf.iplt;
+          gotplt = htab->elf.igotplt;
+          relplt = htab->elf.irelplt;
+        }
+
+      /* This symbol has an entry in the procedure linkage table.  Set
+         it up.  */
+      if ((h->dynindx == -1
+	   && !((h->forced_local || bfd_link_executable (info))
+		&& h->def_regular
+		&& h->type == STT_GNU_IFUNC))
+	  || plt == NULL
+	  || gotplt == NULL
+	  || relplt == NULL)
+	return false;
 
       /* Calculate the address of the PLT header.  */
-      header_address = sec_addr (htab->elf.splt);
+      header_address = sec_addr (plt);
 
-      /* Calculate the index of the entry.  */
-      plt_idx = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
+      /* Calculate the index of the entry and the offset of .got.plt entry.
+	 For static executables, we don't reserve anything.  */
+      if (plt == htab->elf.splt)
+	{
+	  plt_idx = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
+	  got_offset = GOTPLT_HEADER_SIZE + (plt_idx * GOT_ENTRY_SIZE);
+	}
+      else
+	{
+	  plt_idx = h->plt.offset / PLT_ENTRY_SIZE;
+	  got_offset = plt_idx * GOT_ENTRY_SIZE;
+	}
 
       /* Calculate the address of the .got.plt entry.  */
-      got_address = riscv_elf_got_plt_val (plt_idx, info);
+      got_address = sec_addr (gotplt) + got_offset;
 
       /* Find out where the .plt entry should go.  */
-      loc = htab->elf.splt->contents + h->plt.offset;
+      loc = plt->contents + h->plt.offset;
 
       /* Fill in the PLT entry itself.  */
       if (! riscv_make_plt_entry (output_bfd, got_address,
 				  header_address + h->plt.offset,
 				  plt_entry))
-	return FALSE;
+	return false;
 
       for (i = 0; i < PLT_ENTRY_INSNS; i++)
-	bfd_put_32 (output_bfd, plt_entry[i], loc + 4*i);
+	bfd_putl32 (plt_entry[i], loc + 4*i);
 
       /* Fill in the initial value of the .got.plt entry.  */
-      loc = htab->elf.sgotplt->contents
-	    + (got_address - sec_addr (htab->elf.sgotplt));
-      bfd_put_NN (output_bfd, sec_addr (htab->elf.splt), loc);
+      loc = gotplt->contents + (got_address - sec_addr (gotplt));
+      bfd_put_NN (output_bfd, sec_addr (plt), loc);
 
-      /* Fill in the entry in the .rela.plt section.  */
       rela.r_offset = got_address;
-      rela.r_addend = 0;
-      rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_JUMP_SLOT);
 
-      loc = htab->elf.srelplt->contents + plt_idx * sizeof (ElfNN_External_Rela);
+      if (h->dynindx == -1
+	  || ((bfd_link_executable (info)
+	       || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+	      && h->def_regular
+	      && h->type == STT_GNU_IFUNC))
+	{
+	  info->callbacks->minfo (_("Local IFUNC function `%s' in %pB\n"),
+				  h->root.root.string,
+				  h->root.u.def.section->owner);
+
+	  /* If an STT_GNU_IFUNC symbol is locally defined, generate
+	     R_RISCV_IRELATIVE instead of R_RISCV_JUMP_SLOT.  */
+	  asection *sec = h->root.u.def.section;
+	  rela.r_info = ELFNN_R_INFO (0, R_RISCV_IRELATIVE);
+	  rela.r_addend = h->root.u.def.value
+			  + sec->output_section->vma
+			  + sec->output_offset;
+	}
+      else
+	{
+	  /* Fill in the entry in the .rela.plt section.  */
+	  rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_JUMP_SLOT);
+	  rela.r_addend = 0;
+	}
+
+      loc = relplt->contents + plt_idx * sizeof (ElfNN_External_Rela);
       bed->s->swap_reloca_out (output_bfd, &rela, loc);
 
       if (!h->def_regular)
@@ -2477,6 +3224,7 @@ riscv_elf_finish_dynamic_symbol (bfd *ou
       asection *sgot;
       asection *srela;
       Elf_Internal_Rela rela;
+      bool use_elf_append_rela = true;
 
       /* This symbol has an entry in the GOT.  Set it up.  */
 
@@ -2486,15 +3234,81 @@ riscv_elf_finish_dynamic_symbol (bfd *ou
 
       rela.r_offset = sec_addr (sgot) + (h->got.offset &~ (bfd_vma) 1);
 
-      /* If this is a local symbol reference, we just want to emit a RELATIVE
-	 reloc.  This can happen if it is a -Bsymbolic link, or a pie link, or
-	 the symbol was forced to be local because of a version file.
-	 The entry in the global offset table will already have been
-	 initialized in the relocate_section function.  */
-      if (bfd_link_pic (info)
-	  && SYMBOL_REFERENCES_LOCAL (info, h))
+      /* Handle the ifunc symbol in GOT entry.  */
+      if (h->def_regular
+	  && h->type == STT_GNU_IFUNC)
 	{
-	  BFD_ASSERT((h->got.offset & 1) != 0);
+	  if (h->plt.offset == (bfd_vma) -1)
+	    {
+	      /* STT_GNU_IFUNC is referenced without PLT.  */
+
+	      if (htab->elf.splt == NULL)
+		{
+		  /* Use .rela.iplt section to store .got relocations
+		     in static executable.  */
+		  srela = htab->elf.irelplt;
+
+		  /* Do not use riscv_elf_append_rela to add dynamic
+		     relocs.  */
+		  use_elf_append_rela = false;
+		}
+
+	      if (SYMBOL_REFERENCES_LOCAL (info, h))
+		{
+		  info->callbacks->minfo (_("Local IFUNC function `%s' in %pB\n"),
+					  h->root.root.string,
+					  h->root.u.def.section->owner);
+
+		  rela.r_info = ELFNN_R_INFO (0, R_RISCV_IRELATIVE);
+		  rela.r_addend = (h->root.u.def.value
+				   + h->root.u.def.section->output_section->vma
+				   + h->root.u.def.section->output_offset);
+		}
+	      else
+		{
+		  /* Generate R_RISCV_NN.  */
+		  BFD_ASSERT ((h->got.offset & 1) == 0);
+		  BFD_ASSERT (h->dynindx != -1);
+		  rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_NN);
+		  rela.r_addend = 0;
+		}
+	    }
+	  else if (bfd_link_pic (info))
+	    {
+	      /* Generate R_RISCV_NN.  */
+	      BFD_ASSERT ((h->got.offset & 1) == 0);
+	      BFD_ASSERT (h->dynindx != -1);
+	      rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_NN);
+	      rela.r_addend = 0;
+	    }
+	  else
+	    {
+	      asection *plt;
+
+	      if (!h->pointer_equality_needed)
+		abort ();
+
+	      /* For non-shared object, we can't use .got.plt, which
+		 contains the real function address if we need pointer
+		 equality.  We load the GOT entry with the PLT entry.  */
+	      plt = htab->elf.splt ? htab->elf.splt : htab->elf.iplt;
+	      bfd_put_NN (output_bfd, (plt->output_section->vma
+				       + plt->output_offset
+				       + h->plt.offset),
+			  htab->elf.sgot->contents
+			  + (h->got.offset & ~(bfd_vma) 1));
+	      return true;
+	    }
+	}
+      else if (bfd_link_pic (info)
+	       && SYMBOL_REFERENCES_LOCAL (info, h))
+	{
+	  /* If this is a local symbol reference, we just want to emit
+	     a RELATIVE reloc.  This can happen if it is a -Bsymbolic link,
+	     or a pie link, or the symbol was forced to be local because
+	     of a version file.  The entry in the global offset table will
+	     already have been initialized in the relocate_section function.  */
+	  BFD_ASSERT ((h->got.offset & 1) != 0);
 	  asection *sec = h->root.u.def.section;
 	  rela.r_info = ELFNN_R_INFO (0, R_RISCV_RELATIVE);
 	  rela.r_addend = (h->root.u.def.value
@@ -2503,7 +3317,7 @@ riscv_elf_finish_dynamic_symbol (bfd *ou
 	}
       else
 	{
-	  BFD_ASSERT((h->got.offset & 1) == 0);
+	  BFD_ASSERT ((h->got.offset & 1) == 0);
 	  BFD_ASSERT (h->dynindx != -1);
 	  rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_NN);
 	  rela.r_addend = 0;
@@ -2511,7 +3325,24 @@ riscv_elf_finish_dynamic_symbol (bfd *ou
 
       bfd_put_NN (output_bfd, 0,
 		  sgot->contents + (h->got.offset & ~(bfd_vma) 1));
-      riscv_elf_append_rela (output_bfd, srela, &rela);
+
+      if (use_elf_append_rela)
+	riscv_elf_append_rela (output_bfd, srela, &rela);
+      else
+	{
+	  /* Use riscv_elf_append_rela to add the dynamic relocs into
+	     .rela.iplt may cause the overwrite problems.  Since we insert
+	     the relocs for PLT didn't handle the reloc_index of .rela.iplt,
+	     but the riscv_elf_append_rela adds the relocs to the place
+	     that are calculated from the reloc_index (in seqential).
+
+	     One solution is that add these dynamic relocs (GOT IFUNC)
+	     from the last of .rela.iplt section.  */
+	  bfd_vma iplt_idx = htab->last_iplt_index--;
+	  bfd_byte *loc = srela->contents
+			  + iplt_idx * sizeof (ElfNN_External_Rela);
+	  bed->s->swap_reloca_out (output_bfd, &rela, loc);
+	}
     }
 
   if (h->needs_copy)
@@ -2537,12 +3368,24 @@ riscv_elf_finish_dynamic_symbol (bfd *ou
       || (h == htab->elf.hgot || h == htab->elf.hplt))
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
+}
+
+/* Finish up local dynamic symbol handling.  We set the contents of
+   various dynamic sections here.  */
+
+static int
+riscv_elf_finish_local_dynamic_symbol (void **slot, void *inf)
+{
+  struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) *slot;
+  struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+  return riscv_elf_finish_dynamic_symbol (info->output_bfd, info, h, NULL);
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 riscv_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
 		  bfd *dynobj, asection *sdyn)
 {
@@ -2579,10 +3422,10 @@ riscv_finish_dyn (bfd *output_bfd, struc
 
       bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 riscv_elf_finish_dynamic_sections (bfd *output_bfd,
 				   struct bfd_link_info *info)
 {
@@ -2599,7 +3442,7 @@ riscv_elf_finish_dynamic_sections (bfd *
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
-      bfd_boolean ret;
+      bool ret;
 
       splt = htab->elf.splt;
       BFD_ASSERT (splt != NULL && sdyn != NULL);
@@ -2621,7 +3464,7 @@ riscv_elf_finish_dynamic_sections (bfd *
 	    return ret;
 
 	  for (i = 0; i < PLT_HEADER_INSNS; i++)
-	    bfd_put_32 (output_bfd, plt_header[i], splt->contents + 4*i);
+	    bfd_putl32 (plt_header[i], splt->contents + 4*i);
 
 	  elf_section_data (splt->output_section)->this_hdr.sh_entsize
 	    = PLT_ENTRY_SIZE;
@@ -2636,7 +3479,7 @@ riscv_elf_finish_dynamic_sections (bfd *
 	{
 	  (*_bfd_error_handler)
 	    (_("discarded output section: `%pA'"), htab->elf.sgotplt);
-	  return FALSE;
+	  return false;
 	}
 
       if (htab->elf.sgotplt->size > 0)
@@ -2666,7 +3509,12 @@ riscv_elf_finish_dynamic_sections (bfd *
       elf_section_data (output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE;
     }
 
-  return TRUE;
+  /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols.  */
+  htab_traverse (htab->loc_hash_table,
+		 riscv_elf_finish_local_dynamic_symbol,
+		 info);
+
+  return true;
 }
 
 /* Return address for Ith PLT stub in section PLT, for relocation REL
@@ -2722,61 +3570,45 @@ riscv_float_abi_string (flagword flags)
     }
 }
 
-/* The information of architecture attribute.  */
+/* The information of architecture elf attributes.  */
 static riscv_subset_list_t in_subsets;
 static riscv_subset_list_t out_subsets;
 static riscv_subset_list_t merged_subsets;
 
 /* Predicator for standard extension.  */
 
-static bfd_boolean
+static bool
 riscv_std_ext_p (const char *name)
 {
   return (strlen (name) == 1) && (name[0] != 'x') && (name[0] != 's');
 }
 
-/* Predicator for non-standard extension.  */
-
-static bfd_boolean
-riscv_non_std_ext_p (const char *name)
-{
-  return (strlen (name) >= 2) && (name[0] == 'x');
-}
-
-/* Predicator for standard supervisor extension.  */
-
-static bfd_boolean
-riscv_std_sv_ext_p (const char *name)
-{
-  return (strlen (name) >= 2) && (name[0] == 's') && (name[1] != 'x');
-}
-
-/* Predicator for non-standard supervisor extension.  */
+/* Update the output subset's version to match the input when the input
+   subset's version is newer.  */
 
-static bfd_boolean
-riscv_non_std_sv_ext_p (const char *name)
+static void
+riscv_update_subset_version (struct riscv_subset_t *in,
+			     struct riscv_subset_t *out)
 {
-  return (strlen (name) >= 3) && (name[0] == 's') && (name[1] == 'x');
-}
-
-/* Error handler when version mis-match.  */
+  if (in == NULL || out == NULL)
+    return;
 
-static void
-riscv_version_mismatch (bfd *ibfd,
-			struct riscv_subset_t *in,
-			struct riscv_subset_t *out)
-{
-  _bfd_error_handler
-    (_("error: %pB: Mis-matched ISA version for '%s' extension. "
-       "%d.%d vs %d.%d"),
-       ibfd, in->name,
-       in->major_version, in->minor_version,
-       out->major_version, out->minor_version);
+  /* Update the output ISA versions to the newest ones, but otherwise don't
+     provide any errors or warnings about mis-matched ISA versions as it's
+     generally too tricky to check for these at link time. */
+  if ((in->major_version > out->major_version)
+      || (in->major_version == out->major_version
+	  && in->minor_version > out->minor_version)
+      || (out->major_version == RISCV_UNKNOWN_VERSION))
+    {
+      out->major_version = in->major_version;
+      out->minor_version = in->minor_version;
+    }
 }
 
 /* Return true if subset is 'i' or 'e'.  */
 
-static bfd_boolean
+static bool
 riscv_i_or_e_p (bfd *ibfd,
 		const char *arch,
 		struct riscv_subset_t *subset)
@@ -2785,12 +3617,12 @@ riscv_i_or_e_p (bfd *ibfd,
       && (strcasecmp (subset->name, "i") != 0))
     {
       _bfd_error_handler
-	(_("error: %pB: corrupted ISA string '%s'. "
-	   "First letter should be 'i' or 'e' but got '%s'."),
+	(_("error: %pB: corrupted ISA string '%s'.  "
+	   "First letter should be 'i' or 'e' but got '%s'"),
 	   ibfd, arch, subset->name);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Merge standard extensions.
@@ -2800,49 +3632,42 @@ riscv_i_or_e_p (bfd *ibfd,
 
    Arguments:
      `bfd`: bfd handler.
-     `in_arch`: Raw arch string for input object.
-     `out_arch`: Raw arch string for output object.
-     `pin`: subset list for input object, and it'll skip all merged subset after
-            merge.
-     `pout`: Like `pin`, but for output object.  */
+     `in_arch`: Raw ISA string for input object.
+     `out_arch`: Raw ISA string for output object.
+     `pin`: Subset list for input object.
+     `pout`: Subset list for output object.  */
 
-static bfd_boolean
+static bool
 riscv_merge_std_ext (bfd *ibfd,
 		     const char *in_arch,
 		     const char *out_arch,
 		     struct riscv_subset_t **pin,
 		     struct riscv_subset_t **pout)
 {
-  const char *standard_exts = riscv_supported_std_ext ();
+  const char *standard_exts = "mafdqlcbjtpvnh";
   const char *p;
   struct riscv_subset_t *in = *pin;
   struct riscv_subset_t *out = *pout;
 
   /* First letter should be 'i' or 'e'.  */
   if (!riscv_i_or_e_p (ibfd, in_arch, in))
-    return FALSE;
+    return false;
 
   if (!riscv_i_or_e_p (ibfd, out_arch, out))
-    return FALSE;
+    return false;
 
-  if (in->name[0] != out->name[0])
+  if (strcasecmp (in->name, out->name) != 0)
     {
       /* TODO: We might allow merge 'i' with 'e'.  */
       _bfd_error_handler
-	(_("error: %pB: Mis-matched ISA string to merge '%s' and '%s'."),
+	(_("error: %pB: mis-matched ISA string to merge '%s' and '%s'"),
 	 ibfd, in->name, out->name);
-      return FALSE;
-    }
-  else if ((in->major_version != out->major_version) ||
-	   (in->minor_version != out->minor_version))
-    {
-      /* TODO: Allow different merge policy.  */
-      riscv_version_mismatch (ibfd, in, out);
-      return FALSE;
+      return false;
     }
-  else
-    riscv_add_subset (&merged_subsets,
-		      in->name, in->major_version, in->minor_version);
+
+  riscv_update_subset_version(in, out);
+  riscv_add_subset (&merged_subsets,
+		    out->name, out->major_version, out->minor_version);
 
   in = in->next;
   out = out->next;
@@ -2850,28 +3675,22 @@ riscv_merge_std_ext (bfd *ibfd,
   /* Handle standard extension first.  */
   for (p = standard_exts; *p; ++p)
     {
+      struct riscv_subset_t *ext_in, *ext_out, *ext_merged;
       char find_ext[2] = {*p, '\0'};
-      struct riscv_subset_t *find_in =
-	riscv_lookup_subset (&in_subsets, find_ext);
-      struct riscv_subset_t *find_out =
-	riscv_lookup_subset (&out_subsets, find_ext);
+      bool find_in, find_out;
 
-      if (find_in == NULL && find_out == NULL)
+      find_in = riscv_lookup_subset (&in_subsets, find_ext, &ext_in);
+      find_out = riscv_lookup_subset (&out_subsets, find_ext, &ext_out);
+
+      if (!find_in && !find_out)
 	continue;
 
-      /* Check version is same or not.  */
-      /* TODO: Allow different merge policy.  */
-      if ((find_in != NULL && find_out != NULL)
-	  && ((find_in->major_version != find_out->major_version)
-	      || (find_in->minor_version != find_out->minor_version)))
-	{
-	  riscv_version_mismatch (ibfd, in, out);
-	  return FALSE;
-	}
+      if (find_in && find_out)
+	riscv_update_subset_version(ext_in, ext_out);
 
-      struct riscv_subset_t *merged = find_in ? find_in : find_out;
-      riscv_add_subset (&merged_subsets, merged->name,
-			merged->major_version, merged->minor_version);
+      ext_merged = find_out ? ext_out : ext_in;
+      riscv_add_subset (&merged_subsets, ext_merged->name,
+			ext_merged->major_version, ext_merged->minor_version);
     }
 
   /* Skip all standard extensions.  */
@@ -2881,57 +3700,67 @@ riscv_merge_std_ext (bfd *ibfd,
   *pin = in;
   *pout = out;
 
-  return TRUE;
+  return true;
 }
 
-/* Merge non-standard and supervisor extensions.
-   Return Value:
-     Return FALSE if failed to merge.
+/* Merge multi letter extensions.  PIN is a pointer to the head of the input
+   object subset list.  Likewise for POUT and the output object.  Return TRUE
+   on success and FALSE when a conflict is found.  */
 
-   Arguments:
-     `bfd`: bfd handler.
-     `in_arch`: Raw arch string for input object.
-     `out_arch`: Raw arch string for output object.
-     `pin`: subset list for input object, and it'll skip all merged subset after
-            merge.
-     `pout`: Like `pin`, but for output object. */
-
-static bfd_boolean
-riscv_merge_non_std_and_sv_ext (bfd *ibfd,
-				riscv_subset_t **pin,
-				riscv_subset_t **pout,
-				bfd_boolean (*predicate_func) (const char *))
+static bool
+riscv_merge_multi_letter_ext (riscv_subset_t **pin,
+			      riscv_subset_t **pout)
 {
   riscv_subset_t *in = *pin;
   riscv_subset_t *out = *pout;
+  riscv_subset_t *tail;
 
-  for (in = *pin; in != NULL && predicate_func (in->name); in = in->next)
-    riscv_add_subset (&merged_subsets, in->name, in->major_version,
-		      in->minor_version);
-
-  for (out = *pout; out != NULL && predicate_func (out->name); out = out->next)
-    {
-      riscv_subset_t *find_ext =
-	riscv_lookup_subset (&merged_subsets, out->name);
-      if (find_ext != NULL)
-	{
-	  /* Check version is same or not. */
-	  /* TODO: Allow different merge policy.  */
-	  if ((find_ext->major_version != out->major_version)
-	      || (find_ext->minor_version != out->minor_version))
-	    {
-	      riscv_version_mismatch (ibfd, find_ext, out);
-	      return FALSE;
-	    }
+  int cmp;
+
+  while (in && out)
+    {
+      cmp = riscv_compare_subsets (in->name, out->name);
+
+      if (cmp < 0)
+	{
+	  /* `in' comes before `out', append `in' and increment.  */
+	  riscv_add_subset (&merged_subsets, in->name, in->major_version,
+			    in->minor_version);
+	  in = in->next;
+	}
+      else if (cmp > 0)
+	{
+	  /* `out' comes before `in', append `out' and increment.  */
+	  riscv_add_subset (&merged_subsets, out->name, out->major_version,
+			    out->minor_version);
+	  out = out->next;
 	}
       else
-	riscv_add_subset (&merged_subsets, out->name,
-			  out->major_version, out->minor_version);
+	{
+	  /* Both present, check version and increment both.  */
+	  riscv_update_subset_version (in, out);
+
+	  riscv_add_subset (&merged_subsets, out->name, out->major_version,
+			    out->minor_version);
+	  out = out->next;
+	  in = in->next;
+	}
     }
 
-  *pin = in;
-  *pout = out;
-  return TRUE;
+  if (in || out)
+    {
+      /* If we're here, either `in' or `out' is running longer than
+	 the other. So, we need to append the corresponding tail.  */
+      tail = in ? in : out;
+      while (tail)
+	{
+	  riscv_add_subset (&merged_subsets, tail->name, tail->major_version,
+			    tail->minor_version);
+	  tail = tail->next;
+	}
+    }
+
+  return true;
 }
 
 /* Merge Tag_RISCV_arch attribute.  */
@@ -2946,31 +3775,22 @@ riscv_merge_arch_attr_info (bfd *ibfd, c
   merged_subsets.head = NULL;
   merged_subsets.tail = NULL;
 
-  riscv_parse_subset_t rpe_in;
-  riscv_parse_subset_t rpe_out;
-
-  rpe_in.subset_list = &in_subsets;
-  rpe_in.error_handler = _bfd_error_handler;
-  rpe_in.xlen = &xlen_in;
-
-  rpe_out.subset_list = &out_subsets;
-  rpe_out.error_handler = _bfd_error_handler;
-  rpe_out.xlen = &xlen_out;
+  riscv_parse_subset_t riscv_rps_ld_in =
+    {&in_subsets, _bfd_error_handler, &xlen_in, NULL, false};
+  riscv_parse_subset_t riscv_rps_ld_out =
+    {&out_subsets, _bfd_error_handler, &xlen_out, NULL, false};
 
   if (in_arch == NULL && out_arch == NULL)
     return NULL;
-
   if (in_arch == NULL && out_arch != NULL)
     return out_arch;
-
   if (in_arch != NULL && out_arch == NULL)
     return in_arch;
 
-  /* Parse subset from arch string.  */
-  if (!riscv_parse_subset (&rpe_in, in_arch))
+  /* Parse subset from ISA string.  */
+  if (!riscv_parse_subset (&riscv_rps_ld_in, in_arch))
     return NULL;
-
-  if (!riscv_parse_subset (&rpe_out, out_arch))
+  if (!riscv_parse_subset (&riscv_rps_ld_out, out_arch))
     return NULL;
 
   /* Checking XLEN.  */
@@ -2978,7 +3798,7 @@ riscv_merge_arch_attr_info (bfd *ibfd, c
     {
       _bfd_error_handler
 	(_("error: %pB: ISA string of input (%s) doesn't match "
-	   "output (%s)."), ibfd, in_arch, out_arch);
+	   "output (%s)"), ibfd, in_arch, out_arch);
       return NULL;
     }
 
@@ -2989,29 +3809,24 @@ riscv_merge_arch_attr_info (bfd *ibfd, c
   /* Merge standard extension.  */
   if (!riscv_merge_std_ext (ibfd, in_arch, out_arch, &in, &out))
     return NULL;
-  /* Merge non-standard extension.  */
-  if (!riscv_merge_non_std_and_sv_ext (ibfd, &in, &out, riscv_non_std_ext_p))
-    return NULL;
-  /* Merge standard supervisor extension.  */
-  if (!riscv_merge_non_std_and_sv_ext (ibfd, &in, &out, riscv_std_sv_ext_p))
-    return NULL;
-  /* Merge non-standard supervisor extension.  */
-  if (!riscv_merge_non_std_and_sv_ext (ibfd, &in, &out, riscv_non_std_sv_ext_p))
+
+  /* Merge all non-single letter extensions with single call.  */
+  if (!riscv_merge_multi_letter_ext (&in, &out))
     return NULL;
 
   if (xlen_in != xlen_out)
     {
       _bfd_error_handler
 	(_("error: %pB: XLEN of input (%u) doesn't match "
-	   "output (%u)."), ibfd, xlen_in, xlen_out);
+	   "output (%u)"), ibfd, xlen_in, xlen_out);
       return NULL;
     }
 
   if (xlen_in != ARCH_SIZE)
     {
       _bfd_error_handler
-	(_("error: %pB: Unsupported XLEN (%u), you might be "
-	   "using wrong emulation."), ibfd, xlen_in);
+	(_("error: %pB: unsupported XLEN (%u), you might be "
+	   "using wrong emulation"), ibfd, xlen_in);
       return NULL;
     }
 
@@ -3028,25 +3843,26 @@ riscv_merge_arch_attr_info (bfd *ibfd, c
 /* Merge object attributes from IBFD into output_bfd of INFO.
    Raise an error if there are conflicting attributes.  */
 
-static bfd_boolean
+static bool
 riscv_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   obj_attribute *in_attr;
   obj_attribute *out_attr;
-  bfd_boolean result = TRUE;
+  bool result = true;
+  bool priv_attrs_merged = false;
   const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
   unsigned int i;
 
   /* Skip linker created files.  */
   if (ibfd->flags & BFD_LINKER_CREATED)
-    return TRUE;
+    return true;
 
   /* Skip any input that doesn't have an attribute section.
      This enables to link object files without attribute section with
      any others.  */
   if (bfd_get_section_by_name (ibfd, sec_name) == NULL)
-    return TRUE;
+    return true;
 
   if (!elf_known_obj_attributes_proc (obfd)[0].i)
     {
@@ -3059,7 +3875,7 @@ riscv_merge_attributes (bfd *ibfd, struc
 	 initialized.  */
       out_attr[0].i = 1;
 
-      return TRUE;
+      return true;
     }
 
   in_attr = elf_known_obj_attributes_proc (ibfd);
@@ -3075,34 +3891,91 @@ riscv_merge_attributes (bfd *ibfd, struc
 	else if (in_attr[Tag_RISCV_arch].s
 		 && out_attr[Tag_RISCV_arch].s)
 	  {
-	    /* Check arch compatible.  */
+	    /* Check compatible.  */
 	    char *merged_arch =
 		riscv_merge_arch_attr_info (ibfd,
 					    in_attr[Tag_RISCV_arch].s,
 					    out_attr[Tag_RISCV_arch].s);
 	    if (merged_arch == NULL)
 	      {
-		result = FALSE;
+		result = false;
 		out_attr[Tag_RISCV_arch].s = "";
 	      }
 	    else
 	      out_attr[Tag_RISCV_arch].s = merged_arch;
 	  }
 	break;
+
       case Tag_RISCV_priv_spec:
       case Tag_RISCV_priv_spec_minor:
       case Tag_RISCV_priv_spec_revision:
-	if (out_attr[i].i != in_attr[i].i)
+	/* If we have handled the privileged elf attributes, then skip it.  */
+	if (!priv_attrs_merged)
 	  {
-	    _bfd_error_handler
-	      (_("error: %pB: conflicting priv spec version "
-		 "(major/minor/revision)."), ibfd);
-	    result = FALSE;
+	    unsigned int Tag_a = Tag_RISCV_priv_spec;
+	    unsigned int Tag_b = Tag_RISCV_priv_spec_minor;
+	    unsigned int Tag_c = Tag_RISCV_priv_spec_revision;
+	    enum riscv_spec_class in_priv_spec = PRIV_SPEC_CLASS_NONE;
+	    enum riscv_spec_class out_priv_spec = PRIV_SPEC_CLASS_NONE;
+
+	    /* Get the privileged spec class from elf attributes.  */
+	    riscv_get_priv_spec_class_from_numbers (in_attr[Tag_a].i,
+						    in_attr[Tag_b].i,
+						    in_attr[Tag_c].i,
+						    &in_priv_spec);
+	    riscv_get_priv_spec_class_from_numbers (out_attr[Tag_a].i,
+						    out_attr[Tag_b].i,
+						    out_attr[Tag_c].i,
+						    &out_priv_spec);
+
+	    /* Allow to link the object without the privileged specs.  */
+	    if (out_priv_spec == PRIV_SPEC_CLASS_NONE)
+	      {
+		out_attr[Tag_a].i = in_attr[Tag_a].i;
+		out_attr[Tag_b].i = in_attr[Tag_b].i;
+		out_attr[Tag_c].i = in_attr[Tag_c].i;
+	      }
+	    else if (in_priv_spec != PRIV_SPEC_CLASS_NONE
+		     && in_priv_spec != out_priv_spec)
+	      {
+		_bfd_error_handler
+		  (_("warning: %pB use privileged spec version %u.%u.%u but "
+		     "the output use version %u.%u.%u"),
+		   ibfd,
+		   in_attr[Tag_a].i,
+		   in_attr[Tag_b].i,
+		   in_attr[Tag_c].i,
+		   out_attr[Tag_a].i,
+		   out_attr[Tag_b].i,
+		   out_attr[Tag_c].i);
+
+		/* The privileged spec v1.9.1 can not be linked with others
+		   since the conflicts, so we plan to drop it in a year or
+		   two.  */
+		if (in_priv_spec == PRIV_SPEC_CLASS_1P9P1
+		    || out_priv_spec == PRIV_SPEC_CLASS_1P9P1)
+		  {
+		    _bfd_error_handler
+		      (_("warning: privileged spec version 1.9.1 can not be "
+			 "linked with other spec versions"));
+		  }
+
+		/* Update the output privileged spec to the newest one.  */
+		if (in_priv_spec > out_priv_spec)
+		  {
+		    out_attr[Tag_a].i = in_attr[Tag_a].i;
+		    out_attr[Tag_b].i = in_attr[Tag_b].i;
+		    out_attr[Tag_c].i = in_attr[Tag_c].i;
+		  }
+	      }
+	    priv_attrs_merged = true;
 	  }
 	break;
+
       case Tag_RISCV_unaligned_access:
 	out_attr[i].i |= in_attr[i].i;
 	break;
+
       case Tag_RISCV_stack_align:
 	if (out_attr[i].i == 0)
 	  out_attr[i].i = in_attr[i].i;
@@ -3112,11 +3985,12 @@ riscv_merge_attributes (bfd *ibfd, struc
 	  {
 	    _bfd_error_handler
 	      (_("error: %pB use %u-byte stack aligned but the output "
-		 "use %u-byte stack aligned."),
+		 "use %u-byte stack aligned"),
 	       ibfd, in_attr[i].i, out_attr[i].i);
-	    result = FALSE;
+	    result = false;
 	  }
 	break;
+
       default:
 	result &= _bfd_elf_merge_unknown_attribute_low (ibfd, obfd, i);
       }
@@ -3128,7 +4002,7 @@ riscv_merge_attributes (bfd *ibfd, struc
 
   /* Merge Tag_compatibility attributes and any common GNU ones.  */
   if (!_bfd_elf_merge_object_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   /* Check for any attributes not known on RISC-V.  */
   result &= _bfd_elf_merge_unknown_attribute_list (ibfd, obfd);
@@ -3139,14 +4013,14 @@ riscv_merge_attributes (bfd *ibfd, struc
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-static bfd_boolean
+static bool
 _bfd_riscv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   flagword new_flags, old_flags;
 
   if (!is_riscv_elf (ibfd) || !is_riscv_elf (obfd))
-    return TRUE;
+    return true;
 
   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
     {
@@ -3154,24 +4028,14 @@ _bfd_riscv_elf_merge_private_bfd_data (b
 	(_("%pB: ABI is incompatible with that of the selected emulation:\n"
 	   "  target emulation `%s' does not match `%s'"),
 	 ibfd, bfd_get_target (ibfd), bfd_get_target (obfd));
-      return FALSE;
+      return false;
     }
 
   if (!_bfd_elf_merge_object_attributes (ibfd, info))
-    return FALSE;
+    return false;
 
   if (!riscv_merge_attributes (ibfd, info))
-    return FALSE;
-
-  new_flags = elf_elfheader (ibfd)->e_flags;
-  old_flags = elf_elfheader (obfd)->e_flags;
-
-  if (! elf_flags_init (obfd))
-    {
-      elf_flags_init (obfd) = TRUE;
-      elf_elfheader (obfd)->e_flags = new_flags;
-      return TRUE;
-    }
+    return false;
 
   /* Check to see if the input BFD actually contains any sections.  If not,
      its flags may not have been initialized either, but it cannot actually
@@ -3182,23 +4046,35 @@ _bfd_riscv_elf_merge_private_bfd_data (b
      case, there is no need to check for code specific flags.  */
   if (!(ibfd->flags & DYNAMIC))
     {
-      bfd_boolean null_input_bfd = TRUE;
-      bfd_boolean only_data_sections = TRUE;
+      bool null_input_bfd = true;
+      bool only_data_sections = true;
       asection *sec;
 
       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
 	{
+	  null_input_bfd = false;
+
 	  if ((bfd_section_flags (sec)
 	       & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
 	      == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
-	    only_data_sections = FALSE;
-
-	  null_input_bfd = FALSE;
-	  break;
+	    {
+	      only_data_sections = false;
+	      break;
+	    }
 	}
 
       if (null_input_bfd || only_data_sections)
-	return TRUE;
+	return true;
+    }
+
+  new_flags = elf_elfheader (ibfd)->e_flags;
+  old_flags = elf_elfheader (obfd)->e_flags;
+
+  if (!elf_flags_init (obfd))
+    {
+      elf_flags_init (obfd) = true;
+      elf_elfheader (obfd)->e_flags = new_flags;
+      return true;
     }
 
   /* Disallow linking different float ABIs.  */
@@ -3222,119 +4098,14 @@ _bfd_riscv_elf_merge_private_bfd_data (b
   /* Allow linking RVC and non-RVC, and keep the RVC flag.  */
   elf_elfheader (obfd)->e_flags |= new_flags & EF_RISCV_RVC;
 
-  return TRUE;
-
-fail:
-  bfd_set_error (bfd_error_bad_value);
-  return FALSE;
-}
-
-/* Delete some bytes from a section while relaxing.  */
-
-static bfd_boolean
-riscv_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, size_t count,
-			  struct bfd_link_info *link_info)
-{
-  unsigned int i, symcount;
-  bfd_vma toaddr = sec->size;
-  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (abfd);
-  Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
-  unsigned int sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
-  struct bfd_elf_section_data *data = elf_section_data (sec);
-  bfd_byte *contents = data->this_hdr.contents;
-
-  /* Actually delete the bytes.  */
-  sec->size -= count;
-  memmove (contents + addr, contents + addr + count, toaddr - addr - count);
-
-  /* Adjust the location of all of the relocs.  Note that we need not
-     adjust the addends, since all PC-relative references must be against
-     symbols, which we will adjust below.  */
-  for (i = 0; i < sec->reloc_count; i++)
-    if (data->relocs[i].r_offset > addr && data->relocs[i].r_offset < toaddr)
-      data->relocs[i].r_offset -= count;
-
-  /* Adjust the local symbols defined in this section.  */
-  for (i = 0; i < symtab_hdr->sh_info; i++)
-    {
-      Elf_Internal_Sym *sym = (Elf_Internal_Sym *) symtab_hdr->contents + i;
-      if (sym->st_shndx == sec_shndx)
-	{
-	  /* If the symbol is in the range of memory we just moved, we
-	     have to adjust its value.  */
-	  if (sym->st_value > addr && sym->st_value <= toaddr)
-	    sym->st_value -= count;
-
-	  /* If the symbol *spans* the bytes we just deleted (i.e. its
-	     *end* is in the moved bytes but its *start* isn't), then we
-	     must adjust its size.
-
-	     This test needs to use the original value of st_value, otherwise
-	     we might accidentally decrease size when deleting bytes right
-	     before the symbol.  But since deleted relocs can't span across
-	     symbols, we can't have both a st_value and a st_size decrease,
-	     so it is simpler to just use an else.  */
-	  else if (sym->st_value <= addr
-		   && sym->st_value + sym->st_size > addr
-		   && sym->st_value + sym->st_size <= toaddr)
-	    sym->st_size -= count;
-	}
-    }
-
-  /* Now adjust the global symbols defined in this section.  */
-  symcount = ((symtab_hdr->sh_size / sizeof (ElfNN_External_Sym))
-	      - symtab_hdr->sh_info);
-
-  for (i = 0; i < symcount; i++)
-    {
-      struct elf_link_hash_entry *sym_hash = sym_hashes[i];
-
-      /* The '--wrap SYMBOL' option is causing a pain when the object file,
-	 containing the definition of __wrap_SYMBOL, includes a direct
-	 call to SYMBOL as well. Since both __wrap_SYMBOL and SYMBOL reference
-	 the same symbol (which is __wrap_SYMBOL), but still exist as two
-	 different symbols in 'sym_hashes', we don't want to adjust
-	 the global symbol __wrap_SYMBOL twice.  */
-      /* The same problem occurs with symbols that are versioned_hidden, as
-	 foo becomes an alias for foo@BAR, and hence they need the same
-	 treatment.  */
-      if (link_info->wrap_hash != NULL
-	  || sym_hash->versioned == versioned_hidden)
-	{
-	  struct elf_link_hash_entry **cur_sym_hashes;
-
-	  /* Loop only over the symbols which have already been checked.  */
-	  for (cur_sym_hashes = sym_hashes; cur_sym_hashes < &sym_hashes[i];
-	       cur_sym_hashes++)
-	    {
-	      /* If the current symbol is identical to 'sym_hash', that means
-		 the symbol was already adjusted (or at least checked).  */
-	      if (*cur_sym_hashes == sym_hash)
-		break;
-	    }
-	  /* Don't adjust the symbol again.  */
-	  if (cur_sym_hashes < &sym_hashes[i])
-	    continue;
-	}
-
-      if ((sym_hash->root.type == bfd_link_hash_defined
-	   || sym_hash->root.type == bfd_link_hash_defweak)
-	  && sym_hash->root.u.def.section == sec)
-	{
-	  /* As above, adjust the value if needed.  */
-	  if (sym_hash->root.u.def.value > addr
-	      && sym_hash->root.u.def.value <= toaddr)
-	    sym_hash->root.u.def.value -= count;
+  /* Allow linking TSO and non-TSO, and keep the TSO flag.  */
+  elf_elfheader (obfd)->e_flags |= new_flags & EF_RISCV_TSO;
 
-	  /* As above, adjust the size if needed.  */
-	  else if (sym_hash->root.u.def.value <= addr
-		   && sym_hash->root.u.def.value + sym_hash->size > addr
-		   && sym_hash->root.u.def.value + sym_hash->size <= toaddr)
-	    sym_hash->size -= count;
-	}
-    }
+  return true;
 
-  return TRUE;
+ fail:
+  bfd_set_error (bfd_error_bad_value);
+  return false;
 }
 
 /* A second format for recording PC-relative hi relocations.  This stores the
@@ -3348,7 +4119,7 @@ struct riscv_pcgp_hi_reloc
   bfd_vma hi_addr;
   unsigned hi_sym;
   asection *sym_sec;
-  bfd_boolean undefined_weak;
+  bool undefined_weak;
   riscv_pcgp_hi_reloc *next;
 };
 
@@ -3367,12 +4138,12 @@ typedef struct
 
 /* Initialize the pcgp reloc info in P.  */
 
-static bfd_boolean
+static bool
 riscv_init_pcgp_relocs (riscv_pcgp_relocs *p)
 {
   p->hi = NULL;
   p->lo = NULL;
-  return TRUE;
+  return true;
 }
 
 /* Free the pcgp reloc info in P.  */
@@ -3385,14 +4156,14 @@ riscv_free_pcgp_relocs (riscv_pcgp_reloc
   riscv_pcgp_hi_reloc *c;
   riscv_pcgp_lo_reloc *l;
 
-  for (c = p->hi; c != NULL;)
+  for (c = p->hi; c != NULL; )
     {
       riscv_pcgp_hi_reloc *next = c->next;
       free (c);
       c = next;
     }
 
-  for (l = p->lo; l != NULL;)
+  for (l = p->lo; l != NULL; )
     {
       riscv_pcgp_lo_reloc *next = l->next;
       free (l);
@@ -3404,15 +4175,15 @@ riscv_free_pcgp_relocs (riscv_pcgp_reloc
    The HI_ADDEND, HI_ADDR, HI_SYM, and SYM_SEC args contain info required to
    relax the corresponding lo part reloc.  */
 
-static bfd_boolean
+static bool
 riscv_record_pcgp_hi_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off,
 			    bfd_vma hi_addend, bfd_vma hi_addr,
 			    unsigned hi_sym, asection *sym_sec,
-			    bfd_boolean undefined_weak)
+			    bool undefined_weak)
 {
-  riscv_pcgp_hi_reloc *new = bfd_malloc (sizeof(*new));
+  riscv_pcgp_hi_reloc *new = bfd_malloc (sizeof (*new));
   if (!new)
-    return FALSE;
+    return false;
   new->hi_sec_off = hi_sec_off;
   new->hi_addend = hi_addend;
   new->hi_addr = hi_addr;
@@ -3421,14 +4192,14 @@ riscv_record_pcgp_hi_reloc (riscv_pcgp_r
   new->undefined_weak = undefined_weak;
   new->next = p->hi;
   p->hi = new;
-  return TRUE;
+  return true;
 }
 
 /* Look up hi part pcgp reloc info in P, using HI_SEC_OFF as the lookup index.
    This is used by a lo part reloc to find the corresponding hi part reloc.  */
 
 static riscv_pcgp_hi_reloc *
-riscv_find_pcgp_hi_reloc(riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
+riscv_find_pcgp_hi_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
 {
   riscv_pcgp_hi_reloc *c;
 
@@ -3441,55 +4212,306 @@ riscv_find_pcgp_hi_reloc(riscv_pcgp_relo
 /* Record pcgp lo part reloc info in P, using HI_SEC_OFF as the lookup info.
    This is used to record relocs that can't be relaxed.  */
 
-static bfd_boolean
+static bool
 riscv_record_pcgp_lo_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
 {
-  riscv_pcgp_lo_reloc *new = bfd_malloc (sizeof(*new));
+  riscv_pcgp_lo_reloc *new = bfd_malloc (sizeof (*new));
   if (!new)
-    return FALSE;
+    return false;
   new->hi_sec_off = hi_sec_off;
   new->next = p->lo;
   p->lo = new;
-  return TRUE;
+  return true;
 }
 
 /* Look up lo part pcgp reloc info in P, using HI_SEC_OFF as the lookup index.
    This is used by a hi part reloc to find the corresponding lo part reloc.  */
 
-static bfd_boolean
+static bool
 riscv_find_pcgp_lo_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
 {
   riscv_pcgp_lo_reloc *c;
 
   for (c = p->lo; c != NULL; c = c->next)
     if (c->hi_sec_off == hi_sec_off)
-      return TRUE;
-  return FALSE;
+      return true;
+  return false;
 }
 
-typedef bfd_boolean (*relax_func_t) (bfd *, asection *, asection *,
-				     struct bfd_link_info *,
-				     Elf_Internal_Rela *,
-				     bfd_vma, bfd_vma, bfd_vma, bfd_boolean *,
-				     riscv_pcgp_relocs *,
-				     bfd_boolean undefined_weak);
+static void
+riscv_update_pcgp_relocs (riscv_pcgp_relocs *p, asection *deleted_sec,
+			  bfd_vma deleted_addr, size_t deleted_count)
+{
+  /* Bytes have already been deleted and toaddr should match the old section
+     size for our checks, so adjust it here.  */
+  bfd_vma toaddr = deleted_sec->size + deleted_count;
+  riscv_pcgp_lo_reloc *l;
+  riscv_pcgp_hi_reloc *h;
+
+  /* Update section offsets of corresponding pcrel_hi relocs for the pcrel_lo
+     entries where they occur after the deleted bytes.  */
+  for (l = p->lo; l != NULL; l = l->next)
+    if (l->hi_sec_off > deleted_addr
+	&& l->hi_sec_off < toaddr)
+      l->hi_sec_off -= deleted_count;
+
+  /* Update both section offsets, and symbol values of pcrel_hi relocs where
+     these values occur after the deleted bytes.  */
+  for (h = p->hi; h != NULL; h = h->next)
+    {
+      if (h->hi_sec_off > deleted_addr
+	  && h->hi_sec_off < toaddr)
+	h->hi_sec_off -= deleted_count;
+      if (h->sym_sec == deleted_sec
+	  && h->hi_addr > deleted_addr
+	  && h->hi_addr < toaddr)
+      h->hi_addr -= deleted_count;
+    }
+}
+
+/* Delete some bytes, adjust relcocations and symbol table from a section.  */
+
+static bool
+_riscv_relax_delete_bytes (bfd *abfd,
+			   asection *sec,
+			   bfd_vma addr,
+			   size_t count,
+			   struct bfd_link_info *link_info,
+			   riscv_pcgp_relocs *p,
+			   bfd_vma delete_total,
+			   bfd_vma toaddr)
+{
+  unsigned int i, symcount;
+  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (abfd);
+  Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  unsigned int sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
+  struct bfd_elf_section_data *data = elf_section_data (sec);
+  bfd_byte *contents = data->this_hdr.contents;
+  size_t bytes_to_move = toaddr - addr - count;
+
+  /* Actually delete the bytes.  */
+  sec->size -= count;
+  memmove (contents + addr, contents + addr + count + delete_total, bytes_to_move);
+
+  /* Still adjust relocations and symbols in non-linear times.  */
+  toaddr = sec->size + count;
+
+  /* Adjust the location of all of the relocs.  Note that we need not
+     adjust the addends, since all PC-relative references must be against
+     symbols, which we will adjust below.  */
+  for (i = 0; i < sec->reloc_count; i++)
+    if (data->relocs[i].r_offset > addr && data->relocs[i].r_offset < toaddr)
+      data->relocs[i].r_offset -= count;
+
+  /* Adjust the hi_sec_off, and the hi_addr of any entries in the pcgp relocs
+     table for which these values occur after the deleted bytes.  */
+  if (p)
+    riscv_update_pcgp_relocs (p, sec, addr, count);
+
+  /* Adjust the local symbols defined in this section.  */
+  for (i = 0; i < symtab_hdr->sh_info; i++)
+    {
+      Elf_Internal_Sym *sym = (Elf_Internal_Sym *) symtab_hdr->contents + i;
+      if (sym->st_shndx == sec_shndx)
+	{
+	  /* If the symbol is in the range of memory we just moved, we
+	     have to adjust its value.  */
+	  if (sym->st_value > addr && sym->st_value <= toaddr)
+	    sym->st_value -= count;
+
+	  /* If the symbol *spans* the bytes we just deleted (i.e. its
+	     *end* is in the moved bytes but its *start* isn't), then we
+	     must adjust its size.
+
+	     This test needs to use the original value of st_value, otherwise
+	     we might accidentally decrease size when deleting bytes right
+	     before the symbol.  But since deleted relocs can't span across
+	     symbols, we can't have both a st_value and a st_size decrease,
+	     so it is simpler to just use an else.  */
+	  else if (sym->st_value <= addr
+		   && sym->st_value + sym->st_size > addr
+		   && sym->st_value + sym->st_size <= toaddr)
+	    sym->st_size -= count;
+	}
+    }
+
+  /* Now adjust the global symbols defined in this section.  */
+  symcount = ((symtab_hdr->sh_size / sizeof (ElfNN_External_Sym))
+	      - symtab_hdr->sh_info);
+
+  for (i = 0; i < symcount; i++)
+    {
+      struct elf_link_hash_entry *sym_hash = sym_hashes[i];
+
+      /* The '--wrap SYMBOL' option is causing a pain when the object file,
+	 containing the definition of __wrap_SYMBOL, includes a direct
+	 call to SYMBOL as well. Since both __wrap_SYMBOL and SYMBOL reference
+	 the same symbol (which is __wrap_SYMBOL), but still exist as two
+	 different symbols in 'sym_hashes', we don't want to adjust
+	 the global symbol __wrap_SYMBOL twice.
+
+	 The same problem occurs with symbols that are versioned_hidden, as
+	 foo becomes an alias for foo@BAR, and hence they need the same
+	 treatment.  */
+      if (link_info->wrap_hash != NULL
+	  || sym_hash->versioned != unversioned)
+	{
+	  struct elf_link_hash_entry **cur_sym_hashes;
+
+	  /* Loop only over the symbols which have already been checked.  */
+	  for (cur_sym_hashes = sym_hashes; cur_sym_hashes < &sym_hashes[i];
+	       cur_sym_hashes++)
+	    {
+	      /* If the current symbol is identical to 'sym_hash', that means
+		 the symbol was already adjusted (or at least checked).  */
+	      if (*cur_sym_hashes == sym_hash)
+		break;
+	    }
+	  /* Don't adjust the symbol again.  */
+	  if (cur_sym_hashes < &sym_hashes[i])
+	    continue;
+	}
+
+      if ((sym_hash->root.type == bfd_link_hash_defined
+	   || sym_hash->root.type == bfd_link_hash_defweak)
+	  && sym_hash->root.u.def.section == sec)
+	{
+	  /* As above, adjust the value if needed.  */
+	  if (sym_hash->root.u.def.value > addr
+	      && sym_hash->root.u.def.value <= toaddr)
+	    sym_hash->root.u.def.value -= count;
+
+	  /* As above, adjust the size if needed.  */
+	  else if (sym_hash->root.u.def.value <= addr
+		   && sym_hash->root.u.def.value + sym_hash->size > addr
+		   && sym_hash->root.u.def.value + sym_hash->size <= toaddr)
+	    sym_hash->size -= count;
+	}
+    }
+
+  return true;
+}
+
+typedef bool (*relax_delete_t) (bfd *, asection *,
+				bfd_vma, size_t,
+				struct bfd_link_info *,
+				riscv_pcgp_relocs *,
+				Elf_Internal_Rela *);
+
+static relax_delete_t riscv_relax_delete_bytes;
+
+/* Do not delete some bytes from a section while relaxing.
+   Just mark the deleted bytes as R_RISCV_DELETE.  */
+
+static bool
+_riscv_relax_delete_piecewise (bfd *abfd ATTRIBUTE_UNUSED,
+			       asection *sec ATTRIBUTE_UNUSED,
+			       bfd_vma addr,
+			       size_t count,
+			       struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
+			       riscv_pcgp_relocs *p ATTRIBUTE_UNUSED,
+			       Elf_Internal_Rela *rel)
+{
+  if (rel == NULL)
+    return false;
+  rel->r_info = ELFNN_R_INFO (0, R_RISCV_DELETE);
+  rel->r_offset = addr;
+  rel->r_addend = count;
+  return true;
+}
+
+/* Delete some bytes from a section while relaxing.  */
+
+static bool
+_riscv_relax_delete_immediate (bfd *abfd,
+			       asection *sec,
+			       bfd_vma addr,
+			       size_t count,
+			       struct bfd_link_info *link_info,
+			       riscv_pcgp_relocs *p,
+			       Elf_Internal_Rela *rel)
+{
+  if (rel != NULL)
+    rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
+  return _riscv_relax_delete_bytes (abfd, sec, addr, count,
+				    link_info, p, 0, sec->size);
+}
+
+/* Delete the bytes for R_RISCV_DELETE relocs.  */
+
+static bool
+riscv_relax_resolve_delete_relocs (bfd *abfd,
+				   asection *sec,
+				   struct bfd_link_info *link_info,
+				   Elf_Internal_Rela *relocs)
+{
+  bfd_vma delete_total = 0;
+  unsigned int i;
+
+  for (i = 0; i < sec->reloc_count; i++)
+    {
+      Elf_Internal_Rela *rel = relocs + i;
+      if (ELFNN_R_TYPE (rel->r_info) != R_RISCV_DELETE)
+	continue;
+
+      /* Find the next R_RISCV_DELETE reloc if possible.  */
+      Elf_Internal_Rela *rel_next = NULL;
+      unsigned int start = rel - relocs;
+      for (i = start; i < sec->reloc_count; i++)
+	{
+	  /* Since we only replace existing relocs and don't add new relocs, the
+	     relocs are in sequential order. We can skip the relocs prior to this
+	     one, making this search linear time.  */
+	  rel_next = relocs + i;
+	  if (ELFNN_R_TYPE ((rel_next)->r_info) == R_RISCV_DELETE
+	      && (rel_next)->r_offset > rel->r_offset)
+	    {
+	      BFD_ASSERT (rel_next - rel > 0);
+	      break;
+	    }
+	  else
+	    rel_next = NULL;
+	}
+
+      bfd_vma toaddr = rel_next == NULL ? sec->size : rel_next->r_offset;
+      if (!_riscv_relax_delete_bytes (abfd, sec, rel->r_offset, rel->r_addend,
+				      link_info, NULL, delete_total, toaddr))
+	return false;
+
+      delete_total += rel->r_addend;
+      rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
+
+      /* Skip ahead to the next delete reloc.  */
+      i = rel_next != NULL ? (unsigned int) (rel_next - relocs - 1)
+			   : sec->reloc_count;
+    }
+
+  return true;
+}
+
+typedef bool (*relax_func_t) (bfd *, asection *, asection *,
+			      struct bfd_link_info *,
+			      Elf_Internal_Rela *,
+			      bfd_vma, bfd_vma, bfd_vma, bool *,
+			      riscv_pcgp_relocs *,
+			      bool undefined_weak);
 
 /* Relax AUIPC + JALR into JAL.  */
 
-static bfd_boolean
+static bool
 _bfd_riscv_relax_call (bfd *abfd, asection *sec, asection *sym_sec,
 		       struct bfd_link_info *link_info,
 		       Elf_Internal_Rela *rel,
 		       bfd_vma symval,
 		       bfd_vma max_alignment,
 		       bfd_vma reserve_size ATTRIBUTE_UNUSED,
-		       bfd_boolean *again,
-		       riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
-		       bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
+		       bool *again,
+		       riscv_pcgp_relocs *pcgp_relocs,
+		       bool undefined_weak ATTRIBUTE_UNUSED)
 {
   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
-  bfd_signed_vma foff = symval - (sec_addr (sec) + rel->r_offset);
-  bfd_boolean near_zero = (symval + RISCV_IMM_REACH/2) < RISCV_IMM_REACH;
+  bfd_vma foff = symval - (sec_addr (sec) + rel->r_offset);
+  bool near_zero = (symval + RISCV_IMM_REACH / 2) < RISCV_IMM_REACH;
   bfd_vma auipc, jalr;
   int rd, r_type, len = 4, rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC;
 
@@ -3497,25 +4519,25 @@ _bfd_riscv_relax_call (bfd *abfd, asecti
      cause the PC-relative offset to later increase, so we need to add in the
      max alignment of any section inclusive from the call to the target.
      Otherwise, we only need to use the alignment of the current section.  */
-  if (VALID_UJTYPE_IMM (foff))
+  if (VALID_JTYPE_IMM (foff))
     {
       if (sym_sec->output_section == sec->output_section
 	  && sym_sec->output_section != bfd_abs_section_ptr)
 	max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power;
-      foff += (foff < 0 ? -max_alignment : max_alignment);
+      foff += ((bfd_signed_vma) foff < 0 ? -max_alignment : max_alignment);
     }
 
   /* See if this function call can be shortened.  */
-  if (!VALID_UJTYPE_IMM (foff) && !(!bfd_link_pic (link_info) && near_zero))
-    return TRUE;
+  if (!VALID_JTYPE_IMM (foff) && !(!bfd_link_pic (link_info) && near_zero))
+    return true;
 
   /* Shorten the function call.  */
   BFD_ASSERT (rel->r_offset + 8 <= sec->size);
 
-  auipc = bfd_get_32 (abfd, contents + rel->r_offset);
-  jalr = bfd_get_32 (abfd, contents + rel->r_offset + 4);
+  auipc = bfd_getl32 (contents + rel->r_offset);
+  jalr = bfd_getl32 (contents + rel->r_offset + 4);
   rd = (jalr >> OP_SH_RD) & OP_MASK_RD;
-  rvc = rvc && VALID_RVC_J_IMM (foff);
+  rvc = rvc && VALID_CJTYPE_IMM (foff);
 
   /* C.J exists on RV32 and RV64, but C.JAL is RV32-only.  */
   rvc = rvc && (rd == 0 || (rd == X_RA && ARCH_SIZE == 32));
@@ -3527,15 +4549,15 @@ _bfd_riscv_relax_call (bfd *abfd, asecti
       auipc = rd == 0 ? MATCH_C_J : MATCH_C_JAL;
       len = 2;
     }
-  else if (VALID_UJTYPE_IMM (foff))
+  else if (VALID_JTYPE_IMM (foff))
     {
       /* Relax to JAL rd, addr.  */
       r_type = R_RISCV_JAL;
       auipc = MATCH_JAL | (rd << OP_SH_RD);
     }
-  else /* near_zero */
+  else
     {
-      /* Relax to JALR rd, x0, addr.  */
+      /* Near zero, relax to JALR rd, x0, addr.  */
       r_type = R_RISCV_LO12_I;
       auipc = MATCH_JALR | (rd << OP_SH_RD);
     }
@@ -3543,34 +4565,44 @@ _bfd_riscv_relax_call (bfd *abfd, asecti
   /* Replace the R_RISCV_CALL reloc.  */
   rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), r_type);
   /* Replace the AUIPC.  */
-  bfd_put (8 * len, abfd, auipc, contents + rel->r_offset);
+  riscv_put_insn (8 * len, auipc, contents + rel->r_offset);
 
-  /* Delete unnecessary JALR.  */
-  *again = TRUE;
+  /* Delete unnecessary JALR and reuse the R_RISCV_RELAX reloc.  */
+  *again = true;
   return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + len, 8 - len,
-				   link_info);
+				   link_info, pcgp_relocs, rel + 1);
 }
 
-/* Traverse all output sections and return the max alignment.  */
+/* Traverse all output sections and return the max alignment.
+
+   If gp is zero, then all the output section alignments are
+   possible candidates;  Otherwise, only the output sections
+   which are in the [gp-2K, gp+2K) range need to be considered.  */
 
 static bfd_vma
-_bfd_riscv_get_max_alignment (asection *sec)
+_bfd_riscv_get_max_alignment (asection *sec, bfd_vma gp)
 {
   unsigned int max_alignment_power = 0;
   asection *o;
 
   for (o = sec->output_section->owner->sections; o != NULL; o = o->next)
     {
-      if (o->alignment_power > max_alignment_power)
+      bool valid = true;
+      if (gp
+	  && !(VALID_ITYPE_IMM (sec_addr (o) - gp)
+	       || VALID_ITYPE_IMM (sec_addr (o) + o->size - gp)))
+	valid = false;
+
+      if (valid && o->alignment_power > max_alignment_power)
 	max_alignment_power = o->alignment_power;
     }
 
   return (bfd_vma) 1 << max_alignment_power;
 }
 
-/* Relax non-PIC global variable references.  */
+/* Relax non-PIC global variable references to GP-relative references.  */
 
-static bfd_boolean
+static bool
 _bfd_riscv_relax_lui (bfd *abfd,
 		      asection *sec,
 		      asection *sym_sec,
@@ -3579,70 +4611,69 @@ _bfd_riscv_relax_lui (bfd *abfd,
 		      bfd_vma symval,
 		      bfd_vma max_alignment,
 		      bfd_vma reserve_size,
-		      bfd_boolean *again,
-		      riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
-		      bfd_boolean undefined_weak)
+		      bool *again,
+		      riscv_pcgp_relocs *pcgp_relocs,
+		      bool undefined_weak)
 {
+  struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (link_info);
   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
-  bfd_vma gp = riscv_global_pointer_value (link_info);
+  /* Can relax to x0 even when gp relaxation is disabled.  */
+  bfd_vma gp = htab->params->relax_gp
+	       ? riscv_global_pointer_value (link_info)
+	       : 0;
   int use_rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC;
 
   BFD_ASSERT (rel->r_offset + 4 <= sec->size);
 
-  if (gp)
+  if (!undefined_weak && gp)
     {
       /* If gp and the symbol are in the same output section, which is not the
 	 abs section, then consider only that output section's alignment.  */
       struct bfd_link_hash_entry *h =
-	bfd_link_hash_lookup (link_info->hash, RISCV_GP_SYMBOL, FALSE, FALSE,
-			      TRUE);
+	bfd_link_hash_lookup (link_info->hash, RISCV_GP_SYMBOL, false, false,
+			      true);
       if (h->u.def.section->output_section == sym_sec->output_section
 	  && sym_sec->output_section != bfd_abs_section_ptr)
 	max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power;
+      else
+	{
+	  /* Consider output section alignments which are in [gp-2K, gp+2K). */
+	  max_alignment = htab->max_alignment_for_gp;
+	  if (max_alignment == (bfd_vma) -1)
+	    {
+	      max_alignment = _bfd_riscv_get_max_alignment (sec, gp);
+	      htab->max_alignment_for_gp = max_alignment;
+	    }
+	}
     }
 
   /* Is the reference in range of x0 or gp?
-     Valid gp range conservatively because of alignment issue.  */
+     Valid gp range conservatively because of alignment issue.
+
+     Should we also consider the alignment issue for x0 base?  */
   if (undefined_weak
-      || (VALID_ITYPE_IMM (symval)
-	  || (symval >= gp
-	      && VALID_ITYPE_IMM (symval - gp + max_alignment + reserve_size))
-	  || (symval < gp
-	      && VALID_ITYPE_IMM (symval - gp - max_alignment - reserve_size))))
+      || VALID_ITYPE_IMM (symval)
+      || (symval >= gp
+	  && VALID_ITYPE_IMM (symval - gp + max_alignment + reserve_size))
+      || (symval < gp
+	  && VALID_ITYPE_IMM (symval - gp - max_alignment - reserve_size)))
     {
       unsigned sym = ELFNN_R_SYM (rel->r_info);
       switch (ELFNN_R_TYPE (rel->r_info))
 	{
 	case R_RISCV_LO12_I:
-	  if (undefined_weak)
-	    {
-	      /* Change the RS1 to zero.  */
-	      bfd_vma insn = bfd_get_32 (abfd, contents + rel->r_offset);
-	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
-	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
-	    }
-	  else
-	    rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_I);
-	  return TRUE;
+	  rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_I);
+	  return true;
 
 	case R_RISCV_LO12_S:
-	  if (undefined_weak)
-	    {
-	      /* Change the RS1 to zero.  */
-	      bfd_vma insn = bfd_get_32 (abfd, contents + rel->r_offset);
-	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
-	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
-	    }
-	  else
-	    rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);
-	  return TRUE;
+	  rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);
+	  return true;
 
 	case R_RISCV_HI20:
-	  /* We can delete the unnecessary LUI and reloc.  */
-	  rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
-	  *again = TRUE;
+	  /* Delete unnecessary LUI and reuse the reloc.  */
+	  *again = true;
 	  return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4,
-					   link_info);
+					   link_info, pcgp_relocs, rel);
 
 	default:
 	  abort ();
@@ -3656,34 +4687,35 @@ _bfd_riscv_relax_lui (bfd *abfd,
 
   if (use_rvc
       && ELFNN_R_TYPE (rel->r_info) == R_RISCV_HI20
-      && VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (symval))
-      && VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (symval)
+      && VALID_CITYPE_LUI_IMM (RISCV_CONST_HIGH_PART (symval))
+      && VALID_CITYPE_LUI_IMM (RISCV_CONST_HIGH_PART (symval)
 			    + (link_info->relro ? 2 * ELF_MAXPAGESIZE
 			       : ELF_MAXPAGESIZE)))
     {
       /* Replace LUI with C.LUI if legal (i.e., rd != x0 and rd != x2/sp).  */
-      bfd_vma lui = bfd_get_32 (abfd, contents + rel->r_offset);
+      bfd_vma lui = bfd_getl32 (contents + rel->r_offset);
       unsigned rd = ((unsigned)lui >> OP_SH_RD) & OP_MASK_RD;
       if (rd == 0 || rd == X_SP)
-	return TRUE;
+	return true;
 
       lui = (lui & (OP_MASK_RD << OP_SH_RD)) | MATCH_C_LUI;
-      bfd_put_32 (abfd, lui, contents + rel->r_offset);
+      bfd_putl32 (lui, contents + rel->r_offset);
 
       /* Replace the R_RISCV_HI20 reloc.  */
       rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), R_RISCV_RVC_LUI);
 
-      *again = TRUE;
+      /* Delete extra bytes and reuse the R_RISCV_RELAX reloc.  */
+      *again = true;
       return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + 2, 2,
-				       link_info);
+				       link_info, pcgp_relocs, rel + 1);
     }
 
-  return TRUE;
+  return true;
 }
 
-/* Relax non-PIC TLS references.  */
+/* Relax non-PIC TLS references to TP-relative references.  */
 
-static bfd_boolean
+static bool
 _bfd_riscv_relax_tls_le (bfd *abfd,
 			 asection *sec,
 			 asection *sym_sec ATTRIBUTE_UNUSED,
@@ -3692,40 +4724,41 @@ _bfd_riscv_relax_tls_le (bfd *abfd,
 			 bfd_vma symval,
 			 bfd_vma max_alignment ATTRIBUTE_UNUSED,
 			 bfd_vma reserve_size ATTRIBUTE_UNUSED,
-			 bfd_boolean *again,
-			 riscv_pcgp_relocs *prcel_relocs ATTRIBUTE_UNUSED,
-			 bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
+			 bool *again,
+			 riscv_pcgp_relocs *pcgp_relocs,
+			 bool undefined_weak ATTRIBUTE_UNUSED)
 {
   /* See if this symbol is in range of tp.  */
   if (RISCV_CONST_HIGH_PART (tpoff (link_info, symval)) != 0)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (rel->r_offset + 4 <= sec->size);
   switch (ELFNN_R_TYPE (rel->r_info))
     {
     case R_RISCV_TPREL_LO12_I:
       rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), R_RISCV_TPREL_I);
-      return TRUE;
+      return true;
 
     case R_RISCV_TPREL_LO12_S:
       rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), R_RISCV_TPREL_S);
-      return TRUE;
+      return true;
 
     case R_RISCV_TPREL_HI20:
     case R_RISCV_TPREL_ADD:
-      /* We can delete the unnecessary instruction and reloc.  */
-      rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
-      *again = TRUE;
-      return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4, link_info);
+      /* Delete unnecessary instruction and reuse the reloc.  */
+      *again = true;
+      return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4, link_info,
+				       pcgp_relocs, rel);
 
     default:
       abort ();
     }
 }
 
-/* Implement R_RISCV_ALIGN by deleting excess alignment NOPs.  */
+/* Implement R_RISCV_ALIGN by deleting excess alignment NOPs.
+   Once we've handled an R_RISCV_ALIGN, we can't relax anything else.  */
 
-static bfd_boolean
+static bool
 _bfd_riscv_relax_align (bfd *abfd, asection *sec,
 			asection *sym_sec,
 			struct bfd_link_info *link_info,
@@ -3733,9 +4766,9 @@ _bfd_riscv_relax_align (bfd *abfd, asect
 			bfd_vma symval,
 			bfd_vma max_alignment ATTRIBUTE_UNUSED,
 			bfd_vma reserve_size ATTRIBUTE_UNUSED,
-			bfd_boolean *again ATTRIBUTE_UNUSED,
-			riscv_pcgp_relocs *pcrel_relocs ATTRIBUTE_UNUSED,
-			bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
+			bool *again ATTRIBUTE_UNUSED,
+			riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
+			bool undefined_weak ATTRIBUTE_UNUSED)
 {
   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
   bfd_vma alignment = 1, pos;
@@ -3747,7 +4780,7 @@ _bfd_riscv_relax_align (bfd *abfd, asect
   bfd_vma nop_bytes = aligned_addr - symval;
 
   /* Once we've handled an R_RISCV_ALIGN, we can't relax anything else.  */
-  sec->sec_flg0 = TRUE;
+  sec->sec_flg0 = true;
 
   /* Make sure there are enough NOPs to actually achieve the alignment.  */
   if (rel->r_addend < nop_bytes)
@@ -3758,7 +4791,7 @@ _bfd_riscv_relax_align (bfd *abfd, asect
 	 abfd, sym_sec, (uint64_t) rel->r_offset,
 	 (int64_t) nop_bytes, (int64_t) alignment, (int64_t) rel->r_addend);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* Delete the reloc.  */
@@ -3766,43 +4799,47 @@ _bfd_riscv_relax_align (bfd *abfd, asect
 
   /* If the number of NOPs is already correct, there's nothing to do.  */
   if (nop_bytes == rel->r_addend)
-    return TRUE;
+    return true;
 
   /* Write as many RISC-V NOPs as we need.  */
   for (pos = 0; pos < (nop_bytes & -4); pos += 4)
-    bfd_put_32 (abfd, RISCV_NOP, contents + rel->r_offset + pos);
+    bfd_putl32 (RISCV_NOP, contents + rel->r_offset + pos);
 
   /* Write a final RVC NOP if need be.  */
   if (nop_bytes % 4 != 0)
-    bfd_put_16 (abfd, RVC_NOP, contents + rel->r_offset + pos);
+    bfd_putl16 (RVC_NOP, contents + rel->r_offset + pos);
 
-  /* Delete the excess bytes.  */
+  /* Delete excess bytes.  */
   return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + nop_bytes,
-				   rel->r_addend - nop_bytes, link_info);
+				   rel->r_addend - nop_bytes, link_info,
+				   NULL, NULL);
 }
 
 /* Relax PC-relative references to GP-relative references.  */
 
-static bfd_boolean
-_bfd_riscv_relax_pc  (bfd *abfd ATTRIBUTE_UNUSED,
-		      asection *sec,
-		      asection *sym_sec,
-		      struct bfd_link_info *link_info,
-		      Elf_Internal_Rela *rel,
-		      bfd_vma symval,
-		      bfd_vma max_alignment,
-		      bfd_vma reserve_size,
-		      bfd_boolean *again ATTRIBUTE_UNUSED,
-		      riscv_pcgp_relocs *pcgp_relocs,
-		      bfd_boolean undefined_weak)
-{
-  bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
-  bfd_vma gp = riscv_global_pointer_value (link_info);
+static bool
+_bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
+		     asection *sec,
+		     asection *sym_sec,
+		     struct bfd_link_info *link_info,
+		     Elf_Internal_Rela *rel,
+		     bfd_vma symval,
+		     bfd_vma max_alignment,
+		     bfd_vma reserve_size,
+		     bool *again,
+		     riscv_pcgp_relocs *pcgp_relocs,
+		     bool undefined_weak)
+{
+  struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (link_info);
+  /* Can relax to x0 even when gp relaxation is disabled.  */
+  bfd_vma gp = htab->params->relax_gp
+	       ? riscv_global_pointer_value (link_info)
+	       : 0;
 
   BFD_ASSERT (rel->r_offset + 4 <= sec->size);
 
   /* Chain the _LO relocs to their cooresponding _HI reloc to compute the
-   * actual target address.  */
+     actual target address.  */
   riscv_pcgp_hi_reloc hi_reloc;
   memset (&hi_reloc, 0, sizeof (hi_reloc));
   switch (ELFNN_R_TYPE (rel->r_info))
@@ -3820,7 +4857,7 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
 	if (hi == NULL)
 	  {
 	    riscv_record_pcgp_lo_reloc (pcgp_relocs, hi_sec_off);
-	    return TRUE;
+	    return true;
 	  }
 
 	hi_reloc = *hi;
@@ -3839,12 +4876,12 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
       /* Mergeable symbols and code might later move out of range.  */
       if (! undefined_weak
 	  && sym_sec->flags & (SEC_MERGE | SEC_CODE))
-	return TRUE;
+	return true;
 
       /* If the cooresponding lo relocation has already been seen then it's not
-       * safe to relax this relocation.  */
+         safe to relax this relocation.  */
       if (riscv_find_pcgp_lo_reloc (pcgp_relocs, rel->r_offset))
-	return TRUE;
+	return true;
 
       break;
 
@@ -3852,65 +4889,51 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
       abort ();
     }
 
-  if (gp)
+  if (!undefined_weak && gp)
     {
       /* If gp and the symbol are in the same output section, which is not the
 	 abs section, then consider only that output section's alignment.  */
       struct bfd_link_hash_entry *h =
-	bfd_link_hash_lookup (link_info->hash, RISCV_GP_SYMBOL, FALSE, FALSE,
-			      TRUE);
+	bfd_link_hash_lookup (link_info->hash, RISCV_GP_SYMBOL, false, false,
+			      true);
       if (h->u.def.section->output_section == sym_sec->output_section
 	  && sym_sec->output_section != bfd_abs_section_ptr)
 	max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power;
+      else
+	{
+	  /* Consider output section alignments which are in [gp-2K, gp+2K). */
+	  max_alignment = htab->max_alignment_for_gp;
+	  if (max_alignment == (bfd_vma) -1)
+	    {
+	      max_alignment = _bfd_riscv_get_max_alignment (sec, gp);
+	      htab->max_alignment_for_gp = max_alignment;
+	    }
+	}
     }
 
   /* Is the reference in range of x0 or gp?
-     Valid gp range conservatively because of alignment issue.  */
+     Valid gp range conservatively because of alignment issue.
+
+     Should we also consider the alignment issue for x0 base?  */
   if (undefined_weak
-      || (VALID_ITYPE_IMM (symval)
-	  || (symval >= gp
-	      && VALID_ITYPE_IMM (symval - gp + max_alignment + reserve_size))
-	  || (symval < gp
-	      && VALID_ITYPE_IMM (symval - gp - max_alignment - reserve_size))))
+      || VALID_ITYPE_IMM (symval)
+      || (symval >= gp
+	  && VALID_ITYPE_IMM (symval - gp + max_alignment + reserve_size))
+      || (symval < gp
+	  && VALID_ITYPE_IMM (symval - gp - max_alignment - reserve_size)))
     {
       unsigned sym = hi_reloc.hi_sym;
       switch (ELFNN_R_TYPE (rel->r_info))
 	{
 	case R_RISCV_PCREL_LO12_I:
-	  if (undefined_weak)
-	    {
-	      /* Change the RS1 to zero, and then modify the relocation
-		 type to R_RISCV_LO12_I.  */
-	      bfd_vma insn = bfd_get_32 (abfd, contents + rel->r_offset);
-	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
-	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
-	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_LO12_I);
-	      rel->r_addend = hi_reloc.hi_addend;
-	    }
-	  else
-	    {
-	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_I);
-	      rel->r_addend += hi_reloc.hi_addend;
-	    }
-	  return TRUE;
+	  rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_I);
+	  rel->r_addend += hi_reloc.hi_addend;
+	  return true;
 
 	case R_RISCV_PCREL_LO12_S:
-	  if (undefined_weak)
-	    {
-	      /* Change the RS1 to zero, and then modify the relocation
-		 type to R_RISCV_LO12_S.  */
-	      bfd_vma insn = bfd_get_32 (abfd, contents + rel->r_offset);
-	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
-	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
-	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_LO12_S);
-	      rel->r_addend = hi_reloc.hi_addend;
-	    }
-	  else
-	    {
-	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);
-	      rel->r_addend += hi_reloc.hi_addend;
-	    }
-	  return TRUE;
+	  rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);
+	  rel->r_addend += hi_reloc.hi_addend;
+	  return true;
 
 	case R_RISCV_PCREL_HI20:
 	  riscv_record_pcgp_hi_reloc (pcgp_relocs,
@@ -3920,68 +4943,72 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
 				      ELFNN_R_SYM(rel->r_info),
 				      sym_sec,
 				      undefined_weak);
-	  /* We can delete the unnecessary AUIPC and reloc.  */
-	  rel->r_info = ELFNN_R_INFO (0, R_RISCV_DELETE);
-	  rel->r_addend = 4;
-	  return TRUE;
+	  /* Delete unnecessary AUIPC and reuse the reloc.  */
+	  *again = true;
+	  riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4, link_info,
+				    pcgp_relocs, rel);
+	  return true;
 
 	default:
 	  abort ();
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-/* Relax PC-relative references to GP-relative references.  */
+/* Called by after_allocation to set the information of data segment
+   before relaxing.  */
 
-static bfd_boolean
-_bfd_riscv_relax_delete (bfd *abfd,
-			 asection *sec,
-			 asection *sym_sec ATTRIBUTE_UNUSED,
-			 struct bfd_link_info *link_info,
-			 Elf_Internal_Rela *rel,
-			 bfd_vma symval ATTRIBUTE_UNUSED,
-			 bfd_vma max_alignment ATTRIBUTE_UNUSED,
-			 bfd_vma reserve_size ATTRIBUTE_UNUSED,
-			 bfd_boolean *again ATTRIBUTE_UNUSED,
-			 riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
-			 bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
-{
-  if (!riscv_relax_delete_bytes(abfd, sec, rel->r_offset, rel->r_addend,
-				link_info))
-    return FALSE;
-  rel->r_info = ELFNN_R_INFO(0, R_RISCV_NONE);
-  return TRUE;
-}
-
-/* Relax a section.  Pass 0 shortens code sequences unless disabled.  Pass 1
-   deletes the bytes that pass 0 made obselete.  Pass 2, which cannot be
-   disabled, handles code alignment directives.  */
+void
+bfd_elfNN_riscv_set_data_segment_info (struct bfd_link_info *info,
+                                       int *data_segment_phase)
+{
+  struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
+  htab->data_segment_phase = data_segment_phase;
+}
+
+/* Relax a section.
 
-static bfd_boolean
+   Pass 0: Shortens code sequences for LUI/CALL/TPREL/PCREL relocs and
+	   deletes the obsolete bytes.
+   Pass 1: Which cannot be disabled, handles code alignment directives.  */
+
+static bool
 _bfd_riscv_relax_section (bfd *abfd, asection *sec,
 			  struct bfd_link_info *info,
-			  bfd_boolean *again)
+			  bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (abfd);
   struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
   struct bfd_elf_section_data *data = elf_section_data (sec);
   Elf_Internal_Rela *relocs;
-  bfd_boolean ret = FALSE;
+  bool ret = false;
   unsigned int i;
   bfd_vma max_alignment, reserve_size = 0;
   riscv_pcgp_relocs pcgp_relocs;
+  static asection *first_section = NULL;
 
-  *again = FALSE;
+  *again = false;
 
   if (bfd_link_relocatable (info)
       || sec->sec_flg0
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (info->disable_target_specific_optimizations
-	  && info->relax_pass == 0))
-    return TRUE;
+	  && info->relax_pass == 0)
+      /* The exp_seg_relro_adjust is enum phase_enum (0x4),
+	 and defined in ld/ldexp.h.  */
+      || *(htab->data_segment_phase) == 4)
+    return true;
+
+  /* Record the first relax section, so that we can reset the
+     max_alignment_for_gp for the repeated relax passes.  */
+  if (first_section == NULL)
+    first_section = sec;
+  else if (first_section == sec)
+    htab->max_alignment_for_gp = -1;
 
   riscv_init_pcgp_relocs (&pcgp_relocs);
 
@@ -3992,17 +5019,14 @@ _bfd_riscv_relax_section (bfd *abfd, ase
 						 info->keep_memory)))
     goto fail;
 
-  if (htab)
+  /* Estimate the maximum alignment for all output sections once time
+     should be enough.  */
+  max_alignment = htab->max_alignment;
+  if (max_alignment == (bfd_vma) -1)
     {
-      max_alignment = htab->max_alignment;
-      if (max_alignment == (bfd_vma) -1)
-	{
-	  max_alignment = _bfd_riscv_get_max_alignment (sec);
-	  htab->max_alignment = max_alignment;
-	}
+      max_alignment = _bfd_riscv_get_max_alignment (sec, 0/* gp */);
+      htab->max_alignment = max_alignment;
     }
-  else
-    max_alignment = _bfd_riscv_get_max_alignment (sec);
 
   /* Examine and consider relaxing each reloc.  */
   for (i = 0; i < sec->reloc_count; i++)
@@ -4013,29 +5037,32 @@ _bfd_riscv_relax_section (bfd *abfd, ase
       int type = ELFNN_R_TYPE (rel->r_info);
       bfd_vma symval;
       char symtype;
-      bfd_boolean undefined_weak = FALSE;
+      bool undefined_weak = false;
 
       relax_func = NULL;
+      riscv_relax_delete_bytes = NULL;
       if (info->relax_pass == 0)
 	{
-	  if (type == R_RISCV_CALL || type == R_RISCV_CALL_PLT)
+	  if (type == R_RISCV_CALL
+	      || type == R_RISCV_CALL_PLT)
 	    relax_func = _bfd_riscv_relax_call;
 	  else if (type == R_RISCV_HI20
 		   || type == R_RISCV_LO12_I
 		   || type == R_RISCV_LO12_S)
 	    relax_func = _bfd_riscv_relax_lui;
-	  else if (!bfd_link_pic(info)
-		   && (type == R_RISCV_PCREL_HI20
-		   || type == R_RISCV_PCREL_LO12_I
-		   || type == R_RISCV_PCREL_LO12_S))
-	    relax_func = _bfd_riscv_relax_pc;
 	  else if (type == R_RISCV_TPREL_HI20
 		   || type == R_RISCV_TPREL_ADD
 		   || type == R_RISCV_TPREL_LO12_I
 		   || type == R_RISCV_TPREL_LO12_S)
 	    relax_func = _bfd_riscv_relax_tls_le;
+	  else if (!bfd_link_pic (info)
+		   && (type == R_RISCV_PCREL_HI20
+		       || type == R_RISCV_PCREL_LO12_I
+		       || type == R_RISCV_PCREL_LO12_S))
+	    relax_func = _bfd_riscv_relax_pc;
 	  else
 	    continue;
+	  riscv_relax_delete_bytes = _riscv_relax_delete_piecewise;
 
 	  /* Only relax this reloc if it is paired with R_RISCV_RELAX.  */
 	  if (i == sec->reloc_count - 1
@@ -4046,10 +5073,11 @@ _bfd_riscv_relax_section (bfd *abfd, ase
 	  /* Skip over the R_RISCV_RELAX.  */
 	  i++;
 	}
-      else if (info->relax_pass == 1 && type == R_RISCV_DELETE)
-	relax_func = _bfd_riscv_relax_delete;
-      else if (info->relax_pass == 2 && type == R_RISCV_ALIGN)
-	relax_func = _bfd_riscv_relax_align;
+      else if (info->relax_pass == 1 && type == R_RISCV_ALIGN)
+	{
+	  relax_func = _bfd_riscv_relax_align;
+	  riscv_relax_delete_bytes = _riscv_relax_delete_immediate;
+	}
       else
 	continue;
 
@@ -4078,6 +5106,12 @@ _bfd_riscv_relax_section (bfd *abfd, ase
 	  reserve_size = (isym->st_size - rel->r_addend) > isym->st_size
 	    ? 0 : isym->st_size - rel->r_addend;
 
+	  /* Relocate against local STT_GNU_IFUNC symbol.  we have created
+	     a fake global symbol entry for this, so deal with the local ifunc
+	     as a global.  */
+	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+	    continue;
+
 	  if (isym->st_shndx == SHN_UNDEF)
 	    sym_sec = sec, symval = rel->r_offset;
 	  else
@@ -4108,7 +5142,17 @@ _bfd_riscv_relax_section (bfd *abfd, ase
 		 || h->root.type == bfd_link_hash_warning)
 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
+	  /* Disable the relaxation for ifunc.  */
+	  if (h != NULL && h->type == STT_GNU_IFUNC)
+	    continue;
+
+	  /* Maybe we should check UNDEFWEAK_NO_DYNAMIC_RELOC here?  But that
+	     will break the undefweak relaxation testcases, so just make sure
+	     we won't do relaxations for linker_def symbols in short-term.  */
 	  if (h->root.type == bfd_link_hash_undefweak
+	      /* The linker_def symbol like __ehdr_start that may be undefweak
+		 for now, but will be guaranteed to be defined later.  */
+	      && !h->root.linker_def
 	      && (relax_func == _bfd_riscv_relax_lui
 		  || relax_func == _bfd_riscv_relax_pc))
 	    {
@@ -4125,10 +5169,12 @@ _bfd_riscv_relax_section (bfd *abfd, ase
 		 libraries can not happen currently.  Once we support the
 		 auipc relaxations when creating shared libraries, then we will
 		 need the more rigorous checking for this optimization.  */
-	      undefined_weak = TRUE;
+	      undefined_weak = true;
 	    }
 
-	  if (h->plt.offset != MINUS_ONE)
+	  /* This line has to match the check in riscv_elf_relocate_section
+	     in the R_RISCV_CALL[_PLT] case.  */
+	  if (bfd_link_pic (info) && h->plt.offset != MINUS_ONE)
 	    {
 	      sym_sec = htab->elf.splt;
 	      symval = h->plt.offset;
@@ -4138,15 +5184,16 @@ _bfd_riscv_relax_section (bfd *abfd, ase
 	      symval = 0;
 	      sym_sec = bfd_und_section_ptr;
 	    }
-	  else if (h->root.u.def.section->output_section == NULL
-		   || (h->root.type != bfd_link_hash_defined
-		       && h->root.type != bfd_link_hash_defweak))
-	    continue;
-	  else
+	  else if ((h->root.type == bfd_link_hash_defined
+		    || h->root.type == bfd_link_hash_defweak)
+		   && h->root.u.def.section != NULL
+		   && h->root.u.def.section->output_section != NULL)
 	    {
 	      symval = h->root.u.def.value;
 	      sym_sec = h->root.u.def.section;
 	    }
+	  else
+	    continue;
 
 	  if (h->type != STT_FUNC)
 	    reserve_size =
@@ -4194,12 +5241,16 @@ _bfd_riscv_relax_section (bfd *abfd, ase
 	goto fail;
     }
 
-  ret = TRUE;
+  /* Resolve R_RISCV_DELETE relocations.  */
+  if (!riscv_relax_resolve_delete_relocs (abfd, sec, info, relocs))
+    goto fail;
+
+  ret = true;
 
-fail:
+ fail:
   if (relocs != data->relocs)
     free (relocs);
-  riscv_free_pcgp_relocs(&pcgp_relocs, abfd, sec);
+  riscv_free_pcgp_relocs (&pcgp_relocs, abfd, sec);
 
   return ret;
 }
@@ -4214,6 +5265,8 @@ fail:
 # define PRPSINFO_OFFSET_PR_PID		16
 # define PRPSINFO_OFFSET_PR_FNAME	32
 # define PRPSINFO_OFFSET_PR_PSARGS	48
+# define PRPSINFO_PR_FNAME_LENGTH	16
+# define PRPSINFO_PR_PSARGS_LENGTH	80
 #else
 # define PRSTATUS_SIZE			376
 # define PRSTATUS_OFFSET_PR_CURSIG	12
@@ -4224,19 +5277,94 @@ fail:
 # define PRPSINFO_OFFSET_PR_PID		24
 # define PRPSINFO_OFFSET_PR_FNAME	40
 # define PRPSINFO_OFFSET_PR_PSARGS	56
+# define PRPSINFO_PR_FNAME_LENGTH	16
+# define PRPSINFO_PR_PSARGS_LENGTH	80
+#endif
+
+/* Write PRSTATUS and PRPSINFO note into core file.  This will be called
+   before the generic code in elf.c.  By checking the compiler defines we
+   only perform any action here if the generic code would otherwise not be
+   able to help us.  The intention is that bare metal core dumps (where the
+   prstatus_t and/or prpsinfo_t might not be available) will use this code,
+   while non bare metal tools will use the generic elf code.  */
+
+static char *
+riscv_write_core_note (bfd *abfd ATTRIBUTE_UNUSED,
+                       char *buf ATTRIBUTE_UNUSED,
+                       int *bufsiz ATTRIBUTE_UNUSED,
+                       int note_type ATTRIBUTE_UNUSED, ...)
+{
+  switch (note_type)
+    {
+    default:
+      return NULL;
+
+#if !defined (HAVE_PRPSINFO_T)
+    case NT_PRPSINFO:
+      {
+	char data[PRPSINFO_SIZE] ATTRIBUTE_NONSTRING;
+	va_list ap;
+
+	va_start (ap, note_type);
+	memset (data, 0, sizeof (data));
+	strncpy (data + PRPSINFO_OFFSET_PR_FNAME, va_arg (ap, const char *),
+                 PRPSINFO_PR_FNAME_LENGTH);
+#if GCC_VERSION == 8000 || GCC_VERSION == 8001
+	DIAGNOSTIC_PUSH;
+	/* GCC 8.0 and 8.1 warn about 80 equals destination size with
+	   -Wstringop-truncation:
+	   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
+	 */
+	DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
+#endif
+	strncpy (data + PRPSINFO_OFFSET_PR_PSARGS, va_arg (ap, const char *),
+                 PRPSINFO_PR_PSARGS_LENGTH);
+#if GCC_VERSION == 8000 || GCC_VERSION == 8001
+	DIAGNOSTIC_POP;
 #endif
+	va_end (ap);
+	return elfcore_write_note (abfd, buf, bufsiz,
+				   "CORE", note_type, data, sizeof (data));
+      }
+#endif /* !HAVE_PRPSINFO_T */
+
+#if !defined (HAVE_PRSTATUS_T)
+    case NT_PRSTATUS:
+      {
+        char data[PRSTATUS_SIZE];
+        va_list ap;
+        long pid;
+        int cursig;
+        const void *greg;
+
+        va_start (ap, note_type);
+        memset (data, 0, sizeof(data));
+        pid = va_arg (ap, long);
+        bfd_put_32 (abfd, pid, data + PRSTATUS_OFFSET_PR_PID);
+        cursig = va_arg (ap, int);
+        bfd_put_16 (abfd, cursig, data + PRSTATUS_OFFSET_PR_CURSIG);
+        greg = va_arg (ap, const void *);
+        memcpy (data + PRSTATUS_OFFSET_PR_REG, greg,
+                PRSTATUS_SIZE - PRSTATUS_OFFSET_PR_REG - ARCH_SIZE / 8);
+        va_end (ap);
+        return elfcore_write_note (abfd, buf, bufsiz,
+                                   "CORE", note_type, data, sizeof (data));
+      }
+#endif /* !HAVE_PRSTATUS_T */
+    }
+}
 
 /* Support for core dump NOTE sections.  */
 
-static bfd_boolean
+static bool
 riscv_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
-      case PRSTATUS_SIZE:  /* sizeof(struct elf_prstatus) on Linux/RISC-V.  */
+      case PRSTATUS_SIZE: /* sizeof(struct elf_prstatus) on Linux/RISC-V.  */
 	/* pr_cursig */
 	elf_tdata (abfd)->core->signal
 	  = bfd_get_16 (abfd, note->descdata + PRSTATUS_OFFSET_PR_CURSIG);
@@ -4252,13 +5380,13 @@ riscv_elf_grok_prstatus (bfd *abfd, Elf_
 					  note->descpos + PRSTATUS_OFFSET_PR_REG);
 }
 
-static bfd_boolean
+static bool
 riscv_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case PRPSINFO_SIZE: /* sizeof(struct elf_prpsinfo) on Linux/RISC-V.  */
 	/* pr_pid */
@@ -4267,11 +5395,13 @@ riscv_elf_grok_psinfo (bfd *abfd, Elf_In
 
 	/* pr_fname */
 	elf_tdata (abfd)->core->program = _bfd_elfcore_strndup
-	  (abfd, note->descdata + PRPSINFO_OFFSET_PR_FNAME, 16);
+	  (abfd, note->descdata + PRPSINFO_OFFSET_PR_FNAME,
+           PRPSINFO_PR_FNAME_LENGTH);
 
 	/* pr_psargs */
 	elf_tdata (abfd)->core->command = _bfd_elfcore_strndup
-	  (abfd, note->descdata + PRPSINFO_OFFSET_PR_PSARGS, 80);
+	  (abfd, note->descdata + PRPSINFO_OFFSET_PR_PSARGS,
+           PRPSINFO_PR_PSARGS_LENGTH);
 	break;
     }
 
@@ -4287,20 +5417,22 @@ riscv_elf_grok_psinfo (bfd *abfd, Elf_In
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the right mach type.  */
-static bfd_boolean
+
+static bool
 riscv_elf_object_p (bfd *abfd)
 {
   /* There are only two mach types in RISCV currently.  */
-  if (strcmp (abfd->xvec->name, "elf32-littleriscv") == 0)
+  if (strcmp (abfd->xvec->name, "elf32-littleriscv") == 0
+      || strcmp (abfd->xvec->name, "elf32-bigriscv") == 0)
     bfd_default_set_arch_mach (abfd, bfd_arch_riscv, bfd_mach_riscv32);
   else
     bfd_default_set_arch_mach (abfd, bfd_arch_riscv, bfd_mach_riscv64);
 
-  return TRUE;
+  return true;
 }
 
 /* Determine whether an object attribute tag takes an integer, a
@@ -4312,54 +5444,171 @@ riscv_elf_obj_attrs_arg_type (int tag)
   return (tag & 1) != 0 ? ATTR_TYPE_FLAG_STR_VAL : ATTR_TYPE_FLAG_INT_VAL;
 }
 
-#define TARGET_LITTLE_SYM		riscv_elfNN_vec
-#define TARGET_LITTLE_NAME		"elfNN-littleriscv"
+/* Do not choose mapping symbols as a function name.  */
+
+static bfd_size_type
+riscv_maybe_function_sym (const asymbol *sym,
+			  asection *sec,
+			  bfd_vma *code_off)
+{
+  if (sym->flags & BSF_LOCAL
+      && (riscv_elf_is_mapping_symbols (sym->name)
+	  || _bfd_elf_is_local_label_name (sec->owner, sym->name)))
+    return 0;
+
+  return _bfd_elf_maybe_function_sym (sym, sec, code_off);
+}
+
+/* Treat the following cases as target special symbols, they are
+   usually omitted.  */
+
+static bool
+riscv_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
+{
+  /* PR27584, local and empty symbols.  Since they are usually
+     generated for pcrel relocations.  */
+  return (!strcmp (sym->name, "")
+	  || _bfd_elf_is_local_label_name (abfd, sym->name)
+	  /* PR27916, mapping symbols.  */
+	  || riscv_elf_is_mapping_symbols (sym->name));
+}
+
+static int
+riscv_elf_additional_program_headers (bfd *abfd,
+				      struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  int ret = 0;
+
+  /* See if we need a PT_RISCV_ATTRIBUTES segment.  */
+  if (bfd_get_section_by_name (abfd, RISCV_ATTRIBUTES_SECTION_NAME))
+    ++ret;
+
+  return ret;
+}
+
+static bool
+riscv_elf_modify_segment_map (bfd *abfd,
+			      struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  asection *s;
+  struct elf_segment_map *m, **pm;
+  size_t amt;
+
+  /* If there is a .riscv.attributes section, we need a PT_RISCV_ATTRIBUTES
+     segment.  */
+  s = bfd_get_section_by_name (abfd, RISCV_ATTRIBUTES_SECTION_NAME);
+  if (s != NULL)
+    {
+      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
+	if (m->p_type == PT_RISCV_ATTRIBUTES)
+	  break;
+      /* If there is already a PT_RISCV_ATTRIBUTES header, avoid adding
+	 another.  */
+      if (m == NULL)
+	{
+	  amt = sizeof (*m);
+	  m = bfd_zalloc (abfd, amt);
+	  if (m == NULL)
+	    return false;
+
+	  m->p_type = PT_RISCV_ATTRIBUTES;
+	  m->count = 1;
+	  m->sections[0] = s;
+
+	  /* We want to put it after the PHDR and INTERP segments.  */
+	  pm = &elf_seg_map (abfd);
+	  while (*pm != NULL
+		 && ((*pm)->p_type == PT_PHDR
+		     || (*pm)->p_type == PT_INTERP))
+	    pm = &(*pm)->next;
+
+	  m->next = *pm;
+	  *pm = m;
+	}
+    }
+
+  return true;
+}
+
+/* Merge non-visibility st_other attributes.  */
+
+static void
+riscv_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
+				  unsigned int st_other,
+				  bool definition ATTRIBUTE_UNUSED,
+				  bool dynamic ATTRIBUTE_UNUSED)
+{
+  unsigned int isym_sto = st_other & ~ELF_ST_VISIBILITY (-1);
+  unsigned int h_sto = h->other & ~ELF_ST_VISIBILITY (-1);
+
+  if (isym_sto == h_sto)
+    return;
+
+  if (isym_sto & ~STO_RISCV_VARIANT_CC)
+    _bfd_error_handler (_("unknown attribute for symbol `%s': 0x%02x"),
+			h->root.root.string, isym_sto);
+
+  if (isym_sto & STO_RISCV_VARIANT_CC)
+    h->other |= STO_RISCV_VARIANT_CC;
+}
+
+#define TARGET_LITTLE_SYM			riscv_elfNN_vec
+#define TARGET_LITTLE_NAME			"elfNN-littleriscv"
+#define TARGET_BIG_SYM				riscv_elfNN_be_vec
+#define TARGET_BIG_NAME				"elfNN-bigriscv"
 
-#define elf_backend_reloc_type_class	     riscv_reloc_type_class
+#define elf_backend_reloc_type_class		riscv_reloc_type_class
 
-#define bfd_elfNN_bfd_reloc_name_lookup	     riscv_reloc_name_lookup
-#define bfd_elfNN_bfd_link_hash_table_create riscv_elf_link_hash_table_create
-#define bfd_elfNN_bfd_reloc_type_lookup	     riscv_reloc_type_lookup
+#define bfd_elfNN_bfd_reloc_name_lookup		riscv_reloc_name_lookup
+#define bfd_elfNN_bfd_link_hash_table_create	riscv_elf_link_hash_table_create
+#define bfd_elfNN_bfd_reloc_type_lookup		riscv_reloc_type_lookup
 #define bfd_elfNN_bfd_merge_private_bfd_data \
   _bfd_riscv_elf_merge_private_bfd_data
+#define bfd_elfNN_bfd_is_target_special_symbol	riscv_elf_is_target_special_symbol
 
-#define elf_backend_copy_indirect_symbol     riscv_elf_copy_indirect_symbol
-#define elf_backend_create_dynamic_sections  riscv_elf_create_dynamic_sections
-#define elf_backend_check_relocs	     riscv_elf_check_relocs
-#define elf_backend_adjust_dynamic_symbol    riscv_elf_adjust_dynamic_symbol
-#define elf_backend_size_dynamic_sections    riscv_elf_size_dynamic_sections
-#define elf_backend_relocate_section	     riscv_elf_relocate_section
-#define elf_backend_finish_dynamic_symbol    riscv_elf_finish_dynamic_symbol
-#define elf_backend_finish_dynamic_sections  riscv_elf_finish_dynamic_sections
-#define elf_backend_gc_mark_hook	     riscv_elf_gc_mark_hook
-#define elf_backend_plt_sym_val		     riscv_elf_plt_sym_val
-#define elf_backend_grok_prstatus	     riscv_elf_grok_prstatus
-#define elf_backend_grok_psinfo		     riscv_elf_grok_psinfo
-#define elf_backend_object_p		     riscv_elf_object_p
-#define elf_info_to_howto_rel		     NULL
-#define elf_info_to_howto		     riscv_info_to_howto_rela
-#define bfd_elfNN_bfd_relax_section	     _bfd_riscv_relax_section
-
-#define elf_backend_init_index_section	     _bfd_elf_init_1_index_section
-
-#define elf_backend_can_gc_sections	1
-#define elf_backend_can_refcount	1
-#define elf_backend_want_got_plt	1
-#define elf_backend_plt_readonly	1
-#define elf_backend_plt_alignment	4
-#define elf_backend_want_plt_sym	1
-#define elf_backend_got_header_size	(ARCH_SIZE / 8)
-#define elf_backend_want_dynrelro	1
-#define elf_backend_rela_normal		1
-#define elf_backend_default_execstack	0
+#define elf_backend_copy_indirect_symbol	riscv_elf_copy_indirect_symbol
+#define elf_backend_create_dynamic_sections	riscv_elf_create_dynamic_sections
+#define elf_backend_check_relocs		riscv_elf_check_relocs
+#define elf_backend_adjust_dynamic_symbol	riscv_elf_adjust_dynamic_symbol
+#define elf_backend_size_dynamic_sections	riscv_elf_size_dynamic_sections
+#define elf_backend_relocate_section		riscv_elf_relocate_section
+#define elf_backend_finish_dynamic_symbol	riscv_elf_finish_dynamic_symbol
+#define elf_backend_finish_dynamic_sections	riscv_elf_finish_dynamic_sections
+#define elf_backend_plt_sym_val			riscv_elf_plt_sym_val
+#define elf_backend_grok_prstatus		riscv_elf_grok_prstatus
+#define elf_backend_grok_psinfo			riscv_elf_grok_psinfo
+#define elf_backend_object_p			riscv_elf_object_p
+#define elf_backend_write_core_note		riscv_write_core_note
+#define elf_backend_maybe_function_sym		riscv_maybe_function_sym
+#define elf_info_to_howto_rel			NULL
+#define elf_info_to_howto			riscv_info_to_howto_rela
+#define bfd_elfNN_bfd_relax_section		_bfd_riscv_relax_section
+#define bfd_elfNN_mkobject			elfNN_riscv_mkobject
+#define elf_backend_additional_program_headers \
+  riscv_elf_additional_program_headers
+#define elf_backend_modify_segment_map		riscv_elf_modify_segment_map
+#define elf_backend_merge_symbol_attribute	riscv_elf_merge_symbol_attribute
+
+#define elf_backend_init_index_section		_bfd_elf_init_1_index_section
+
+#define elf_backend_can_gc_sections		1
+#define elf_backend_can_refcount		1
+#define elf_backend_want_got_plt		1
+#define elf_backend_plt_readonly		1
+#define elf_backend_plt_alignment		4
+#define elf_backend_want_plt_sym		1
+#define elf_backend_got_header_size		(ARCH_SIZE / 8)
+#define elf_backend_want_dynrelro		1
+#define elf_backend_rela_normal			1
+#define elf_backend_default_execstack		0
 
 #undef  elf_backend_obj_attrs_vendor
-#define elf_backend_obj_attrs_vendor            "riscv"
+#define elf_backend_obj_attrs_vendor		"riscv"
 #undef  elf_backend_obj_attrs_arg_type
-#define elf_backend_obj_attrs_arg_type          riscv_elf_obj_attrs_arg_type
+#define elf_backend_obj_attrs_arg_type		riscv_elf_obj_attrs_arg_type
 #undef  elf_backend_obj_attrs_section_type
-#define elf_backend_obj_attrs_section_type      SHT_RISCV_ATTRIBUTES
+#define elf_backend_obj_attrs_section_type	SHT_RISCV_ATTRIBUTES
 #undef  elf_backend_obj_attrs_section
-#define elf_backend_obj_attrs_section           ".riscv.attributes"
+#define elf_backend_obj_attrs_section		RISCV_ATTRIBUTES_SECTION_NAME
 
 #include "elfNN-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-properties.c ./bfd/elf-properties.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-properties.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-properties.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF program property support.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -76,7 +76,7 @@ _bfd_elf_get_property (bfd *abfd, unsign
 
 /* Parse GNU properties.  */
 
-bfd_boolean
+bool
 _bfd_elf_parse_gnu_properties (bfd *abfd, Elf_Internal_Note *note)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -86,11 +86,11 @@ _bfd_elf_parse_gnu_properties (bfd *abfd
 
   if (note->descsz < 8 || (note->descsz % align_size) != 0)
     {
-bad_size:
+    bad_size:
       _bfd_error_handler
 	(_("warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lx"),
 	 abfd, note->type, note->descsz);
-      return FALSE;
+      return false;
     }
 
   while (ptr != ptr_end)
@@ -113,7 +113,7 @@ bad_size:
 	     abfd, note->type, type, datasz);
 	  /* Clear all properties.  */
 	  elf_properties (abfd) = NULL;
-	  return FALSE;
+	  return false;
 	}
 
       if (type >= GNU_PROPERTY_LOPROC)
@@ -134,7 +134,7 @@ bad_size:
 		{
 		  /* Clear all properties.  */
 		  elf_properties (abfd) = NULL;
-		  return FALSE;
+		  return false;
 		}
 	      else if (kind != property_ignored)
 		goto next;
@@ -152,7 +152,7 @@ bad_size:
 		     abfd, datasz);
 		  /* Clear all properties.  */
 		  elf_properties (abfd) = NULL;
-		  return FALSE;
+		  return false;
 		}
 	      prop = _bfd_elf_get_property (abfd, type, datasz);
 	      if (datasz == 8)
@@ -170,14 +170,42 @@ bad_size:
 		     abfd, datasz);
 		  /* Clear all properties.  */
 		  elf_properties (abfd) = NULL;
-		  return FALSE;
+		  return false;
 		}
 	      prop = _bfd_elf_get_property (abfd, type, datasz);
-	      elf_has_no_copy_on_protected (abfd) = TRUE;
+	      elf_has_no_copy_on_protected (abfd) = true;
 	      prop->pr_kind = property_number;
 	      goto next;
 
 	    default:
+	      if ((type >= GNU_PROPERTY_UINT32_AND_LO
+		   && type <= GNU_PROPERTY_UINT32_AND_HI)
+		  || (type >= GNU_PROPERTY_UINT32_OR_LO
+		      && type <= GNU_PROPERTY_UINT32_OR_HI))
+		{
+		  if (datasz != 4)
+		    {
+		      _bfd_error_handler
+			(_("error: %pB: <corrupt property (0x%x) size: 0x%x>"),
+			 abfd, type, datasz);
+		      /* Clear all properties.  */
+		      elf_properties (abfd) = NULL;
+		      return false;
+		    }
+		  prop = _bfd_elf_get_property (abfd, type, datasz);
+		  prop->u.number |= bfd_h_get_32 (abfd, ptr);
+		  prop->pr_kind = property_number;
+		  if (type == GNU_PROPERTY_1_NEEDED
+		      && ((prop->u.number
+			   & GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS)
+			  != 0))
+		    {
+		      elf_has_indirect_extern_access (abfd) = true;
+		      /* GNU_PROPERTY_NO_COPY_ON_PROTECTED is implied.  */
+		      elf_has_no_copy_on_protected (abfd) = true;
+		    }
+		  goto next;
+		}
 	      break;
 	    }
 	}
@@ -186,23 +214,25 @@ bad_size:
 	(_("warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"),
 	 abfd, note->type, type);
 
-next:
+    next:
       ptr += (datasz + (align_size - 1)) & ~ (align_size - 1);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Merge GNU property BPROP with APROP.  If APROP isn't NULL, return TRUE
    if APROP is updated.  Otherwise, return TRUE if BPROP should be merged
    with ABFD.  */
 
-static bfd_boolean
+static bool
 elf_merge_gnu_properties (struct bfd_link_info *info, bfd *abfd, bfd *bbfd,
 			  elf_property *aprop, elf_property *bprop)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
   unsigned int pr_type = aprop != NULL ? aprop->pr_type : bprop->pr_type;
+  unsigned int number;
+  bool updated;
 
   if (bed->merge_gnu_properties != NULL
       && pr_type >= GNU_PROPERTY_LOPROC
@@ -217,7 +247,7 @@ elf_merge_gnu_properties (struct bfd_lin
 	  if (bprop->u.number > aprop->u.number)
 	    {
 	      aprop->u.number = bprop->u.number;
-	      return TRUE;
+	      return true;
 	    }
 	  break;
 	}
@@ -229,11 +259,80 @@ elf_merge_gnu_properties (struct bfd_lin
       return aprop == NULL;
 
     default:
+      updated = false;
+      if (pr_type >= GNU_PROPERTY_UINT32_OR_LO
+	  && pr_type <= GNU_PROPERTY_UINT32_OR_HI)
+	{
+	  if (aprop != NULL && bprop != NULL)
+	    {
+	      number = aprop->u.number;
+	      aprop->u.number = number | bprop->u.number;
+	      /* Remove the property if all bits are empty.  */
+	      if (aprop->u.number == 0)
+		{
+		  aprop->pr_kind = property_remove;
+		  updated = true;
+		}
+	      else
+		updated = number != (unsigned int) aprop->u.number;
+	    }
+	  else
+	    {
+	      /* Only one of APROP and BPROP can be NULL.  */
+	      if (aprop != NULL)
+		{
+		  if (aprop->u.number == 0)
+		    {
+		      /* Remove APROP if all bits are empty.  */
+		      aprop->pr_kind = property_remove;
+		      updated = true;
+		    }
+		}
+	      else
+		{
+		  /* Return TRUE if APROP is NULL and all bits of BPROP
+		     aren't empty to indicate that BPROP should be added
+		     to ABFD.  */
+		  updated = bprop->u.number != 0;
+		}
+	    }
+	  return updated;
+	}
+      else if (pr_type >= GNU_PROPERTY_UINT32_AND_LO
+	       && pr_type <= GNU_PROPERTY_UINT32_AND_HI)
+	{
+	  /* Only one of APROP and BPROP can be NULL:
+	     1. APROP & BPROP when both APROP and BPROP aren't NULL.
+	     2. If APROP is NULL, remove x86 feature.
+	     3. Otherwise, do nothing.
+	     */
+	  if (aprop != NULL && bprop != NULL)
+	    {
+	      number = aprop->u.number;
+	      aprop->u.number = number & bprop->u.number;
+	      updated = number != (unsigned int) aprop->u.number;
+	      /* Remove the property if all feature bits are cleared.  */
+	      if (aprop->u.number == 0)
+		aprop->pr_kind = property_remove;
+	    }
+	  else
+	    {
+	      /* There should be no AND properties since some input
+	         doesn't have them.   */
+	      if (aprop != NULL)
+		{
+		  aprop->pr_kind = property_remove;
+		  updated = true;
+		}
+	    }
+	  return updated;
+	}
+
       /* Never should happen.  */
       abort ();
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Return the property of TYPE on *LISTP and remove it from *LISTP if RM is
@@ -241,7 +340,7 @@ elf_merge_gnu_properties (struct bfd_lin
 
 static elf_property *
 elf_find_and_remove_property (elf_property_list **listp,
-			      unsigned int type, bfd_boolean rm)
+			      unsigned int type, bool rm)
 {
   elf_property_list *list;
 
@@ -270,7 +369,7 @@ elf_merge_gnu_property_list (struct bfd_
 {
   elf_property_list *p, **lastp;
   elf_property *pr;
-  bfd_boolean number_p;
+  bool number_p;
   bfd_vma number = 0;
 
   /* Merge each GNU property in FIRST_PBFD with the one on *LISTP.  */
@@ -280,13 +379,13 @@ elf_merge_gnu_property_list (struct bfd_
       {
 	if (p->property.pr_kind == property_number)
 	  {
-	    number_p = TRUE;
+	    number_p = true;
 	    number = p->property.u.number;
 	  }
 	else
-	  number_p = FALSE;
+	  number_p = false;
 	pr = elf_find_and_remove_property (listp, p->property.pr_type,
-					   TRUE);
+					   true);
 	/* Pass NULL to elf_merge_gnu_properties for the property which
 	   isn't on *LISTP.  */
 	elf_merge_gnu_properties (info, first_pbfd, abfd, &p->property, pr);
@@ -357,16 +456,16 @@ elf_merge_gnu_property_list (struct bfd_
     {
       if (p->property.pr_kind == property_number)
 	{
-	  number_p = TRUE;
+	  number_p = true;
 	  number = p->property.u.number;
 	}
       else
-	number_p = FALSE;
+	number_p = false;
 
       if (elf_merge_gnu_properties (info, first_pbfd, abfd, NULL, &p->property))
 	{
 	  if (p->property.pr_type == GNU_PROPERTY_NO_COPY_ON_PROTECTED)
-	    elf_has_no_copy_on_protected (first_pbfd) = TRUE;
+	    elf_has_no_copy_on_protected (first_pbfd) = true;
 
 	  pr = _bfd_elf_get_property (first_pbfd, p->property.pr_type,
 				      p->property.pr_datasz);
@@ -380,7 +479,7 @@ elf_merge_gnu_property_list (struct bfd_
 	{
 	  pr = elf_find_and_remove_property (&elf_properties (first_pbfd),
 					     p->property.pr_type,
-					     FALSE);
+					     false);
 	  if (pr == NULL)
 	    {
 	      if (number_p)
@@ -435,7 +534,8 @@ elf_get_gnu_property_section_size (elf_p
 /* Write GNU properties.  */
 
 static void
-elf_write_gnu_properties (bfd *abfd, bfd_byte *contents,
+elf_write_gnu_properties (struct bfd_link_info *info,
+			  bfd *abfd, bfd_byte *contents,
 			  elf_property_list *list, unsigned int size,
 			  unsigned int align_size)
 {
@@ -480,6 +580,11 @@ elf_write_gnu_properties (bfd *abfd, bfd
 	      break;
 
 	    case 4:
+	      /* Save the pointer to GNU_PROPERTY_1_NEEDED so that it
+		 can be updated later if needed.  */
+	      if (info != NULL
+		  && list->property.pr_type == GNU_PROPERTY_1_NEEDED)
+		info->needed_1_p = contents + size;
 	      bfd_h_put_32 (abfd, list->property.u.number,
 			    contents + size);
 	      break;
@@ -508,40 +613,83 @@ elf_write_gnu_properties (bfd *abfd, bfd
 bfd *
 _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
 {
-  bfd *abfd, *first_pbfd = NULL;
+  bfd *abfd, *first_pbfd = NULL, *elf_bfd = NULL;
   elf_property_list *list;
   asection *sec;
-  bfd_boolean has_properties = FALSE;
+  bool has_properties = false;
   const struct elf_backend_data *bed
     = get_elf_backend_data (info->output_bfd);
   unsigned int elfclass = bed->s->elfclass;
   int elf_machine_code = bed->elf_machine_code;
+  elf_property *p;
 
   /* Find the first relocatable ELF input with GNU properties.  */
   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
     if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
 	&& (abfd->flags & DYNAMIC) == 0
-	&& elf_properties (abfd) != NULL)
+	&& (elf_machine_code
+	    == get_elf_backend_data (abfd)->elf_machine_code)
+	&& (elfclass == get_elf_backend_data (abfd)->s->elfclass))
       {
-	has_properties = TRUE;
-
 	/* Ignore GNU properties from ELF objects with different machine
 	   code or class.  Also skip objects without a GNU_PROPERTY note
 	   section.  */
-	if ((elf_machine_code
-	     == get_elf_backend_data (abfd)->elf_machine_code)
-	    && (elfclass
-		== get_elf_backend_data (abfd)->s->elfclass)
-	    && bfd_get_section_by_name (abfd,
-					NOTE_GNU_PROPERTY_SECTION_NAME) != NULL
-	    )
+	elf_bfd = abfd;
+
+	if (elf_properties (abfd) != NULL)
 	  {
-	    /* Keep .note.gnu.property section in FIRST_PBFD.  */
-	    first_pbfd = abfd;
-	    break;
+	    has_properties = true;
+
+	    if (bfd_get_section_by_name (abfd,
+					 NOTE_GNU_PROPERTY_SECTION_NAME)
+		!= NULL)
+	      {
+		/* Keep .note.gnu.property section in FIRST_PBFD.  */
+		first_pbfd = abfd;
+		break;
+	      }
 	  }
       }
 
+  if (info->indirect_extern_access > 0 && elf_bfd != NULL)
+    {
+      /* Support -z indirect-extern-access.  */
+      if (first_pbfd == NULL)
+	{
+	  sec = bfd_make_section_with_flags (elf_bfd,
+					     NOTE_GNU_PROPERTY_SECTION_NAME,
+					     (SEC_ALLOC
+					      | SEC_LOAD
+					      | SEC_IN_MEMORY
+					      | SEC_READONLY
+					      | SEC_HAS_CONTENTS
+					      | SEC_DATA));
+	  if (sec == NULL)
+	    info->callbacks->einfo (_("%F%P: failed to create GNU property section\n"));
+
+	  if (!bfd_set_section_alignment (sec,
+					  elfclass == ELFCLASS64 ? 3 : 2))
+	    info->callbacks->einfo (_("%F%pA: failed to align section\n"),
+				    sec);
+
+	  elf_section_type (sec) = SHT_NOTE;
+	  first_pbfd = elf_bfd;
+	  has_properties = true;
+	}
+
+      p = _bfd_elf_get_property (first_pbfd, GNU_PROPERTY_1_NEEDED, 4);
+      if (p->pr_kind == property_unknown)
+	{
+	  /* Create GNU_PROPERTY_1_NEEDED.  */
+	  p->u.number
+	    = GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS;
+	  p->pr_kind = property_number;
+	}
+      else
+	p->u.number
+	  |= GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS;
+    }
+
   /* Do nothing if there is no .note.gnu.property section.  */
   if (!has_properties)
     return NULL;
@@ -605,7 +753,6 @@ _bfd_elf_link_setup_gnu_properties (stru
 	 if N > 0.  */
       if (info->stacksize > 0)
 	{
-	  elf_property *p;
 	  bfd_vma stacksize = info->stacksize;
 
 	  p = _bfd_elf_get_property (first_pbfd, GNU_PROPERTY_STACK_SIZE,
@@ -647,7 +794,30 @@ _bfd_elf_link_setup_gnu_properties (stru
       sec->size = size;
       contents = (bfd_byte *) bfd_zalloc (first_pbfd, size);
 
-      elf_write_gnu_properties (first_pbfd, contents, list, size,
+      if (info->indirect_extern_access <= 0)
+	{
+	  /* Get GNU_PROPERTY_1_NEEDED properties.  */
+	  p = elf_find_and_remove_property (&elf_properties (first_pbfd),
+					    GNU_PROPERTY_1_NEEDED, false);
+	  if (p != NULL)
+	    {
+	      if (info->indirect_extern_access < 0)
+		{
+		  /* Set indirect_extern_access to 1 to indicate that
+		     it is turned on by input properties.  */
+		  if ((p->u.number
+		       & GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS)
+		      != 0)
+		    info->indirect_extern_access = 1;
+		}
+	      else
+		/* Turn off indirect external access.  */
+		p->u.number
+		  &= ~GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS;
+	    }
+	}
+
+      elf_write_gnu_properties (info, first_pbfd, contents, list, size,
 				align_size);
 
       /* Cache the section contents for elf_link_input_bfd.  */
@@ -656,7 +826,16 @@ _bfd_elf_link_setup_gnu_properties (stru
       /* If GNU_PROPERTY_NO_COPY_ON_PROTECTED is set, protected data
 	 symbol is defined in the shared object.  */
       if (elf_has_no_copy_on_protected (first_pbfd))
-	info->extern_protected_data = FALSE;
+	info->extern_protected_data = false;
+
+      if (info->indirect_extern_access > 0)
+	{
+	  /* For indirect external access, don't generate copy
+	     relocations.  NB: Set to nocopyreloc to 2 to indicate
+	     that it is implied by indirect_extern_access.  */
+	  info->nocopyreloc = 2;
+	  info->extern_protected_data = false;
+	}
     }
 
   return first_pbfd;
@@ -680,7 +859,7 @@ _bfd_elf_convert_gnu_property_size (bfd
 
 /* Convert GNU properties.  */
 
-bfd_boolean
+bool
 _bfd_elf_convert_gnu_properties (bfd *ibfd, asection *isec,
 				 bfd *obfd, bfd_byte **ptr,
 				 bfd_size_type *ptr_size)
@@ -703,6 +882,8 @@ _bfd_elf_convert_gnu_properties (bfd *ib
   if (size > bfd_section_size (isec))
     {
       contents = (bfd_byte *) bfd_malloc (size);
+      if (contents == NULL)
+	return false;
       free (*ptr);
       *ptr = contents;
     }
@@ -712,7 +893,8 @@ _bfd_elf_convert_gnu_properties (bfd *ib
   *ptr_size = size;
 
   /* Generate the output .note.gnu.property section.  */
-  elf_write_gnu_properties (ibfd, contents, list, size, 1 << align_shift);
+  elf_write_gnu_properties (NULL, ibfd, contents, list, size,
+			    1 << align_shift);
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-s390-common.c ./bfd/elf-s390-common.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-s390-common.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-s390-common.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* IBM S/390-specific support for ELF 32 and 64 bit functions
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
    Contributed by Andreas Krebbel.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -23,7 +23,7 @@
 /* Return TRUE if H is an IFUNC symbol.  Simply checking for the
    symbol type might not be enough since it might get changed to
    STT_FUNC for pointer equality reasons.  */
-static inline bfd_boolean
+static inline bool
 s390_is_ifunc_symbol_p (struct elf_link_hash_entry *h)
 {
   struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry*)h;
@@ -32,26 +32,26 @@ s390_is_ifunc_symbol_p (struct elf_link_
 
 /* Return true if .got.plt is supposed to be emitted after .got.  */
 
-static inline bfd_boolean
+static inline bool
 s390_gotplt_after_got_p (struct bfd_link_info *info)
 {
   struct elf_s390_link_hash_table *htab = elf_s390_hash_table (info);
 
   if (!htab->elf.sgot || !htab->elf.sgotplt)
-    return TRUE;
+    return true;
 
   if (htab->elf.sgot->output_section == htab->elf.sgotplt->output_section)
     {
       if (htab->elf.sgot->output_offset < htab->elf.sgotplt->output_offset)
-	return TRUE;
+	return true;
     }
   else
     {
       if (htab->elf.sgot->output_section->vma
 	  <= htab->elf.sgotplt->output_section->vma)
-	return TRUE;
+	return true;
     }
-  return FALSE;
+  return false;
 }
 
 /* Return the value of the _GLOBAL_OFFSET_TABLE_ symbol.  */
@@ -113,7 +113,7 @@ s390_gotplt_offset (struct bfd_link_info
 
 /* Create sections needed by STT_GNU_IFUNC symbol.  */
 
-static bfd_boolean
+static bool
 s390_elf_create_ifunc_sections (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags;
@@ -122,7 +122,7 @@ s390_elf_create_ifunc_sections (bfd *abf
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
   if (htab->iplt != NULL)
-    return TRUE;
+    return true;
 
   flags = bed->dynamic_sec_flags;
 
@@ -132,7 +132,7 @@ s390_elf_create_ifunc_sections (bfd *abf
 				       flags | SEC_READONLY);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->irelifunc = s;
     }
 
@@ -141,36 +141,36 @@ s390_elf_create_ifunc_sections (bfd *abf
 				   flags | SEC_CODE | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
   htab->iplt = s;
 
   s = bfd_make_section_with_flags (abfd, ".rela.iplt", flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->irelplt = s;
 
   s = bfd_make_section_with_flags (abfd, ".igot.plt", flags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->igotplt = s;
 
-  return TRUE;
+  return true;
 }
 
 
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs against a STT_GNU_IFUNC symbol definition.  */
 
-static bfd_boolean
+static bool
 s390_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info,
 				    struct elf_link_hash_entry *h)
 {
   struct elf_dyn_relocs *p;
   struct elf_link_hash_table *htab;
   struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry*)h;
-  struct elf_dyn_relocs **head = &eh->dyn_relocs;
+  struct elf_dyn_relocs **head = &h->dyn_relocs;
 
   htab = elf_hash_table (info);
   eh->ifunc_resolver_address = h->root.u.def.value;
@@ -196,7 +196,7 @@ s390_elf_allocate_ifunc_dyn_relocs (stru
       h->got = htab->init_got_offset;
       h->plt = htab->init_plt_offset;
       *head = NULL;
-      return TRUE;
+      return true;
     }
 
   /* Return and discard space for dynamic relocations against it if
@@ -209,10 +209,10 @@ s390_elf_allocate_ifunc_dyn_relocs (stru
       h->got = htab->init_got_offset;
       h->plt = htab->init_plt_offset;
       *head = NULL;
-      return TRUE;
+      return true;
     }
 
-keep:
+ keep:
   /* Without checking h->plt.refcount here we allocate a PLT slot.
      When setting plt.refcount in check_relocs it might not have been
      known that this will be an IFUNC symol.  */
@@ -276,10 +276,10 @@ keep:
 	htab->srelgot->size += RELA_ENTRY_SIZE;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_s390_allocate_local_syminfo (bfd *abfd, Elf_Internal_Shdr *symtab_hdr)
 {
   bfd_size_type size;
@@ -291,14 +291,14 @@ elf_s390_allocate_local_syminfo (bfd *ab
   elf_local_got_refcounts (abfd) = ((bfd_signed_vma *)
 				    bfd_zalloc (abfd, size));
   if (elf_local_got_refcounts (abfd) == NULL)
-    return FALSE;
+    return false;
   elf_s390_local_plt (abfd)
     = (struct plt_entry*)(elf_local_got_refcounts (abfd)
 			  + symtab_hdr->sh_info);
   elf_s390_local_got_tls_type (abfd)
     = (char *) (elf_s390_local_plt (abfd) + symtab_hdr->sh_info);
 
-  return TRUE;
+  return true;
 }
 
 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by
@@ -307,7 +307,7 @@ elf_s390_allocate_local_syminfo (bfd *ab
    hand, elf-eh-frame.c processing requires .eh_frame relocs to be
    sorted.  */
 
-static bfd_boolean
+static bool
 elf_s390_elf_sort_relocs_p (asection *sec)
 {
   return (sec->flags & SEC_CODE) == 0;
@@ -315,7 +315,7 @@ elf_s390_elf_sort_relocs_p (asection *se
 
 /* Merge object attributes from IBFD into OBFD.  Raise an error if
    there are conflicting attributes.  */
-static bfd_boolean
+static bool
 elf_s390_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -331,7 +331,7 @@ elf_s390_merge_obj_attributes (bfd *ibfd
 	 initialized.  */
       elf_known_obj_attributes_proc (obfd)[0].i = 1;
 
-      return TRUE;
+      return true;
     }
 
   in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
@@ -372,5 +372,5 @@ elf_s390_merge_obj_attributes (bfd *ibfd
   /* Merge Tag_compatibility attributes and any common GNU ones.  */
   _bfd_elf_merge_object_attributes (ibfd, info);
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-s390.h ./bfd/elf-s390.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-s390.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-s390.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* S/390-specific support for ELF.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -25,5 +25,5 @@ struct s390_elf_params
   int pgste;
 };
 
-bfd_boolean bfd_elf_s390_set_options (struct bfd_link_info *info,
-				      struct s390_elf_params *params);
+bool bfd_elf_s390_set_options (struct bfd_link_info *info,
+			       struct s390_elf_params *params);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-sframe.c ./bfd/elf-sframe.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-sframe.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elf-sframe.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,562 @@
+/* .sframe section processing.
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "sframe-api.h"
+
+/* Return TRUE if the function has been marked for deletion during the linking
+   process.  */
+
+static bool
+sframe_decoder_func_deleted_p (struct sframe_dec_info *sfd_info,
+			       unsigned int func_idx)
+{
+  if (func_idx < sfd_info->sfd_fde_count)
+    return sfd_info->sfd_func_bfdinfo[func_idx].func_deleted_p;
+
+  return false;
+}
+
+/* Mark the function in the decoder info for deletion.  */
+
+static void
+sframe_decoder_mark_func_deleted (struct sframe_dec_info *sfd_info,
+				  unsigned int func_idx)
+{
+  if (func_idx < sfd_info->sfd_fde_count)
+    sfd_info->sfd_func_bfdinfo[func_idx].func_deleted_p = true;
+}
+
+/* Get the relocation offset from the decoder info for the given function.  */
+
+static unsigned int
+sframe_decoder_get_func_r_offset (struct sframe_dec_info *sfd_info,
+				  unsigned int func_idx)
+{
+  BFD_ASSERT (func_idx < sfd_info->sfd_fde_count);
+  unsigned int func_r_offset
+    = sfd_info->sfd_func_bfdinfo[func_idx].func_r_offset;
+  /* There must have been a reloc.  */
+  BFD_ASSERT (func_r_offset);
+  return func_r_offset;
+}
+
+/* Bookkeep the function relocation offset in the decoder info.  */
+
+static void
+sframe_decoder_set_func_r_offset (struct sframe_dec_info *sfd_info,
+				  unsigned int func_idx,
+				  unsigned int r_offset)
+{
+  if (func_idx < sfd_info->sfd_fde_count)
+    sfd_info->sfd_func_bfdinfo[func_idx].func_r_offset = r_offset;
+}
+
+/* Get the relocation index in the elf_reloc_cookie for the function.  */
+
+static unsigned int
+sframe_decoder_get_func_reloc_index (struct sframe_dec_info *sfd_info,
+				     unsigned int func_idx)
+{
+  BFD_ASSERT (func_idx < sfd_info->sfd_fde_count);
+  return sfd_info->sfd_func_bfdinfo[func_idx].func_reloc_index;
+}
+
+/* Bookkeep the relocation index in the elf_reloc_cookie for the function.  */
+
+static void
+sframe_decoder_set_func_reloc_index (struct sframe_dec_info *sfd_info,
+				     unsigned int func_idx,
+				     unsigned int reloc_index)
+{
+  if (func_idx < sfd_info->sfd_fde_count)
+    sfd_info->sfd_func_bfdinfo[func_idx].func_reloc_index = reloc_index;
+}
+
+/* Initialize the set of additional information in CFD_INFO,
+   needed for linking SEC.  Returns TRUE if setup is done successfully.  */
+
+static bool
+sframe_decoder_init_func_bfdinfo (asection *sec,
+				  struct sframe_dec_info *sfd_info,
+				  struct elf_reloc_cookie *cookie)
+{
+  unsigned int fde_count;
+  unsigned int func_bfdinfo_size, i;
+
+  fde_count = sframe_decoder_get_num_fidx (sfd_info->sfd_ctx);
+  sfd_info->sfd_fde_count = fde_count;
+
+  /* Allocate and clear the memory.  */
+  func_bfdinfo_size = (sizeof (struct sframe_func_bfdinfo)) * fde_count;
+  sfd_info->sfd_func_bfdinfo
+    = (struct sframe_func_bfdinfo*) bfd_malloc (func_bfdinfo_size);
+  if (sfd_info->sfd_func_bfdinfo == NULL)
+    return false;
+  memset (sfd_info->sfd_func_bfdinfo, 0, func_bfdinfo_size);
+
+  /* For linker generated .sframe sections, we have no relocs.  Skip.  */
+  if ((sec->flags & SEC_LINKER_CREATED) && cookie->rels == NULL)
+    return true;
+
+  for (i = 0; i < fde_count; i++)
+    {
+      cookie->rel = cookie->rels + i;
+      BFD_ASSERT (cookie->rel < cookie->relend);
+      /* Bookkeep the relocation offset and relocation index of each function
+	 for later use.  */
+      sframe_decoder_set_func_r_offset (sfd_info, i, cookie->rel->r_offset);
+      sframe_decoder_set_func_reloc_index (sfd_info, i,
+					   (cookie->rel - cookie->rels));
+
+      cookie->rel++;
+    }
+  BFD_ASSERT (cookie->rel == cookie->relend);
+
+  return true;
+}
+
+/* Read the value from CONTENTS at the specified OFFSET for the given ABFD.  */
+
+static bfd_vma
+sframe_read_value (bfd *abfd, bfd_byte *contents, unsigned int offset,
+		   unsigned int width)
+{
+  BFD_ASSERT (contents && offset);
+  /* Supporting the usecase of reading only the 4-byte relocated
+     value (signed offset for func start addr) for now.  */
+  BFD_ASSERT (width == 4);
+  /* FIXME endianness ?? */
+  unsigned char *buf = contents + offset;
+  bfd_vma value = bfd_get_signed_32 (abfd, buf);
+  return value;
+}
+
+/* Return true if there is at least one non-empty .sframe section in
+   input files.  Can only be called after ld has mapped input to
+   output sections, and before sections are stripped.  */
+
+bool
+_bfd_elf_sframe_present (struct bfd_link_info *info)
+{
+  asection *sframe = bfd_get_section_by_name (info->output_bfd, ".sframe");
+
+  if (sframe == NULL)
+    return false;
+
+  /* Count only sections which have at least a single FDE.  */
+  for (sframe = sframe->map_head.s; sframe != NULL; sframe = sframe->map_head.s)
+    /* Note that this may become an approximate check in the future when
+       some ABI/arch begin to use the sfh_auxhdr_len.  When sfh_auxhdr_len has
+       non-zero value, it will need to be accounted for in the calculation of
+       the SFrame header size.  */
+    if (sframe->size > sizeof (sframe_header))
+      return true;
+  return false;
+}
+
+/* Try to parse .sframe section SEC, which belongs to ABFD.  Store the
+   information in the section's sec_info field on success.  COOKIE
+   describes the relocations in SEC.
+
+   Returns TRUE if success, FALSE if any error or failure.  */
+
+bool
+_bfd_elf_parse_sframe (bfd *abfd,
+		       struct bfd_link_info *info ATTRIBUTE_UNUSED,
+		       asection *sec, struct elf_reloc_cookie *cookie)
+{
+  bfd_byte *sfbuf = NULL;
+  struct sframe_dec_info *sfd_info;
+  sframe_decoder_ctx *sfd_ctx;
+  bfd_size_type sf_size;
+  int decerr = 0;
+
+  if (sec->size == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
+      || sec->sec_info_type != SEC_INFO_TYPE_NONE)
+    {
+      /* This file does not contain .sframe information.  */
+      return false;
+    }
+
+  if (bfd_is_abs_section (sec->output_section))
+    {
+      /* At least one of the sections is being discarded from the
+	 link, so we should just ignore them.  */
+      return false;
+    }
+
+  /* Read the SFrame stack trace information from abfd.  */
+  if (!bfd_malloc_and_get_section (abfd, sec, &sfbuf))
+    goto fail_no_free;
+
+  /* Decode the buffer and keep decoded contents for later use.
+     Relocations are performed later, but are such that the section's
+     size is unaffected.  */
+  sfd_info = bfd_malloc (sizeof (struct sframe_dec_info));
+  sf_size = sec->size;
+
+  sfd_info->sfd_ctx = sframe_decode ((const char*)sfbuf, sf_size, &decerr);
+  sfd_ctx = sfd_info->sfd_ctx;
+  if (!sfd_ctx)
+    /* Free'ing up any memory held by decoder context is done by
+       sframe_decode in case of error.  */
+    goto fail_no_free;
+
+  if (!sframe_decoder_init_func_bfdinfo (sec, sfd_info, cookie))
+    {
+      sframe_decoder_free (&sfd_ctx);
+      goto fail_no_free;
+    }
+
+  elf_section_data (sec)->sec_info = sfd_info;
+  sec->sec_info_type = SEC_INFO_TYPE_SFRAME;
+
+  goto success;
+
+fail_no_free:
+  _bfd_error_handler
+   (_("error in %pB(%pA); no .sframe will be created"),
+    abfd, sec);
+  return false;
+success:
+  free (sfbuf);
+  return true;
+}
+
+/* This function is called for each input file before the .sframe section
+   is relocated.  It marks the SFrame FDE for the discarded functions for
+   deletion.
+
+   The function returns TRUE iff any entries have been deleted.  */
+
+bool
+_bfd_elf_discard_section_sframe
+   (asection *sec,
+    bool (*reloc_symbol_deleted_p) (bfd_vma, void *),
+    struct elf_reloc_cookie *cookie)
+{
+  bool changed;
+  bool keep;
+  unsigned int i;
+  unsigned int func_desc_offset;
+  unsigned int num_fidx;
+  struct sframe_dec_info *sfd_info;
+
+  changed = false;
+  /* FIXME - if relocatable link and changed = true, how does the final
+     .rela.sframe get updated ?.  */
+  keep = false;
+
+  sfd_info = (struct sframe_dec_info *) elf_section_data (sec)->sec_info;
+
+  /* Skip checking for the linker created .sframe sections
+     (for PLT sections).  */
+  if ((sec->flags & SEC_LINKER_CREATED) == 0 || cookie->rels != NULL)
+    {
+      num_fidx = sframe_decoder_get_num_fidx (sfd_info->sfd_ctx);
+      for (i = 0; i < num_fidx; i++)
+	{
+	  func_desc_offset = sframe_decoder_get_func_r_offset (sfd_info, i);
+
+	  cookie->rel = cookie->rels
+	    + sframe_decoder_get_func_reloc_index (sfd_info, i);
+	  keep = !(*reloc_symbol_deleted_p) (func_desc_offset, cookie);
+
+	  if (!keep)
+	    {
+	      sframe_decoder_mark_func_deleted (sfd_info, i);
+	      changed = true;
+	    }
+	}
+    }
+  return changed;
+}
+
+/* Update the reference to the output .sframe section in the output ELF
+   BFD ABFD.  Returns true if no error.  */
+
+bool
+_bfd_elf_set_section_sframe (bfd *abfd,
+				struct bfd_link_info *info)
+{
+  asection *cfsec;
+
+  cfsec = bfd_get_section_by_name (info->output_bfd, ".sframe");
+  if (!cfsec)
+    return false;
+
+  elf_sframe (abfd) = cfsec;
+
+  return true;
+}
+
+/* Merge .sframe section SEC.  This is called with the relocated
+   CONTENTS.  */
+
+bool
+_bfd_elf_merge_section_sframe (bfd *abfd,
+			       struct bfd_link_info *info,
+			       asection *sec,
+			       bfd_byte *contents)
+{
+  struct sframe_dec_info *sfd_info;
+  struct sframe_enc_info *sfe_info;
+  sframe_decoder_ctx *sfd_ctx;
+  sframe_encoder_ctx *sfe_ctx;
+  uint8_t sfd_ctx_abi_arch;
+  int8_t sfd_ctx_fixed_fp_offset;
+  int8_t sfd_ctx_fixed_ra_offset;
+  uint8_t dctx_version;
+  uint8_t ectx_version;
+  int encerr = 0;
+
+  struct elf_link_hash_table *htab;
+  asection *cfsec;
+
+  /* Sanity check - handle SFrame sections only.  */
+  if (sec->sec_info_type != SEC_INFO_TYPE_SFRAME)
+    return false;
+
+  sfd_info = (struct sframe_dec_info *) elf_section_data (sec)->sec_info;
+  sfd_ctx = sfd_info->sfd_ctx;
+
+  htab = elf_hash_table (info);
+  sfe_info = &(htab->sfe_info);
+  sfe_ctx = sfe_info->sfe_ctx;
+
+  /* All input bfds are expected to have a valid SFrame section.  Even if
+     the SFrame section is empty with only a header, there must be a valid
+     SFrame decoder context by now.  The SFrame encoder context, however,
+     will get set later here, if this is the first call to the function.  */
+  if (sfd_ctx == NULL || sfe_info == NULL)
+    return false;
+
+  if (htab->sfe_info.sfe_ctx == NULL)
+    {
+      sfd_ctx_abi_arch = sframe_decoder_get_abi_arch (sfd_ctx);
+      sfd_ctx_fixed_fp_offset = sframe_decoder_get_fixed_fp_offset (sfd_ctx);
+      sfd_ctx_fixed_ra_offset = sframe_decoder_get_fixed_ra_offset (sfd_ctx);
+
+      /* Valid values are non-zero.  */
+      if (!sfd_ctx_abi_arch)
+	return false;
+
+      htab->sfe_info.sfe_ctx = sframe_encode (SFRAME_VERSION_2,
+					      0, /* SFrame flags.  */
+					      sfd_ctx_abi_arch,
+					      sfd_ctx_fixed_fp_offset,
+					      sfd_ctx_fixed_ra_offset,
+					      &encerr);
+      /* Handle errors from sframe_encode.  */
+      if (htab->sfe_info.sfe_ctx == NULL)
+	return false;
+    }
+  sfe_ctx = sfe_info->sfe_ctx;
+
+  if (sfe_info->sframe_section == NULL)
+    {
+      /* Make sure things are set for an eventual write.
+	 Size of the output section is not known until
+	 _bfd_elf_write_section_sframe is ready with the buffer
+	 to write out.  */
+      cfsec = bfd_get_section_by_name (info->output_bfd, ".sframe");
+      if (cfsec)
+	{
+	  sfe_info->sframe_section = cfsec;
+	  // elf_sframe (abfd) = cfsec;
+	}
+      else
+	return false;
+    }
+
+  /* Check that all .sframe sections being linked have the same
+     ABI/arch.  */
+  if (sframe_decoder_get_abi_arch (sfd_ctx)
+      != sframe_encoder_get_abi_arch (sfe_ctx))
+    {
+      _bfd_error_handler
+	(_("input SFrame sections with different abi prevent .sframe"
+	  " generation"));
+      return false;
+    }
+
+  /* Check that all .sframe sections being linked have the same version.  */
+  dctx_version = sframe_decoder_get_version (sfd_ctx);
+  ectx_version = sframe_encoder_get_version (sfe_ctx);
+  if (dctx_version != SFRAME_VERSION_2 || dctx_version != ectx_version)
+    {
+      _bfd_error_handler
+	(_("input SFrame sections with different format versions prevent"
+	  " .sframe generation"));
+      return false;
+    }
+
+
+  /* Iterate over the function descriptor entries and the FREs of the
+     function from the decoder context.  Add each of them to the encoder
+     context, if suitable.  */
+  uint32_t i = 0, j = 0, cur_fidx = 0;
+
+  uint32_t num_fidx = sframe_decoder_get_num_fidx (sfd_ctx);
+  uint32_t num_enc_fidx = sframe_encoder_get_num_fidx (sfe_ctx);
+
+  for (i = 0; i < num_fidx; i++)
+    {
+      unsigned int num_fres = 0;
+      int32_t func_start_addr;
+      bfd_vma address;
+      uint32_t func_size = 0;
+      unsigned char func_info = 0;
+      unsigned int r_offset = 0;
+      bool pltn_reloc_by_hand = false;
+      unsigned int pltn_r_offset = 0;
+      uint8_t rep_block_size = 0;
+
+      if (!sframe_decoder_get_funcdesc_v2 (sfd_ctx, i, &num_fres, &func_size,
+					   &func_start_addr, &func_info,
+					   &rep_block_size))
+	{
+	  /* If function belongs to a deleted section, skip editing the
+	     function descriptor entry.  */
+	  if (sframe_decoder_func_deleted_p(sfd_info, i))
+	    continue;
+
+	  /* Don't edit function descriptor entries for relocatable link.  */
+	  if (!bfd_link_relocatable (info))
+	    {
+	      if (!(sec->flags & SEC_LINKER_CREATED))
+		{
+		  /* Get relocated contents by reading the value of the
+		     relocated function start address at the beginning of the
+		     function descriptor entry.  */
+		  r_offset = sframe_decoder_get_func_r_offset (sfd_info, i);
+		}
+	      else
+		{
+		  /* Expected to land here when SFrame stack trace info is
+		     created dynamically for the .plt* sections.  These
+		     sections are expected to have upto two SFrame FDE entries.
+		     Although the code should work for > 2,  leaving this
+		     assert here for safety.  */
+		  BFD_ASSERT (num_fidx <= 2);
+		  /* For the first entry, we know the offset of the SFrame FDE's
+		     sfde_func_start_address.  Side note: see how the value
+		     of PLT_SFRAME_FDE_START_OFFSET is also set to the
+		     same.  */
+		  r_offset = sframe_decoder_get_hdr_size (sfd_ctx);
+		  /* For any further SFrame FDEs, the generator has already put
+		     in an offset in place of sfde_func_start_address of the
+		     corresponding FDE.  We will use it by hand to relocate.  */
+		  if (i > 0)
+		    {
+		      pltn_r_offset
+			= r_offset + (i * sizeof (sframe_func_desc_entry));
+		      pltn_reloc_by_hand = true;
+		    }
+		}
+
+	      /* Get the SFrame FDE function start address after relocation.  */
+	      address = sframe_read_value (abfd, contents, r_offset, 4);
+	      if (pltn_reloc_by_hand)
+		address += sframe_read_value (abfd, contents,
+					      pltn_r_offset, 4);
+	      address += (sec->output_offset + r_offset);
+
+	      /* FIXME For testing only. Cleanup later.  */
+	      // address += (sec->output_section->vma);
+
+	      func_start_addr = address;
+	    }
+
+	  /* Update the encoder context with updated content.  */
+	  int err = sframe_encoder_add_funcdesc_v2 (sfe_ctx, func_start_addr,
+						    func_size, func_info,
+						    rep_block_size, num_fres);
+	  cur_fidx++;
+	  BFD_ASSERT (!err);
+	}
+
+      for (j = 0; j < num_fres; j++)
+	{
+	  sframe_frame_row_entry fre;
+	  if (!sframe_decoder_get_fre (sfd_ctx, i, j, &fre))
+	    {
+	      int err = sframe_encoder_add_fre (sfe_ctx,
+						cur_fidx-1+num_enc_fidx,
+						&fre);
+	      BFD_ASSERT (!err);
+	    }
+	}
+    }
+  /* Free the SFrame decoder context.  */
+  sframe_decoder_free (&sfd_ctx);
+
+  return true;
+}
+
+/* Write out the .sframe section.  This must be called after
+   _bfd_elf_merge_section_sframe has been called on all input
+   .sframe sections.  */
+
+bool
+_bfd_elf_write_section_sframe (bfd *abfd, struct bfd_link_info *info)
+{
+  bool retval = true;
+
+  struct elf_link_hash_table *htab;
+  struct sframe_enc_info *sfe_info;
+  sframe_encoder_ctx *sfe_ctx;
+  asection *sec;
+  void *contents;
+  size_t sec_size;
+  int err = 0;
+
+  htab = elf_hash_table (info);
+  sfe_info = &htab->sfe_info;
+  sec = sfe_info->sframe_section;
+  sfe_ctx = sfe_info->sfe_ctx;
+
+  if (sec == NULL)
+    return true;
+
+  contents = sframe_encoder_write (sfe_ctx, &sec_size, &err);
+  sec->size = (bfd_size_type) sec_size;
+
+  if (!bfd_set_section_contents (abfd, sec->output_section, contents,
+				 (file_ptr) sec->output_offset,
+				 sec->size))
+    retval = false;
+  else if (!bfd_link_relocatable (info))
+    {
+      Elf_Internal_Shdr *hdr = &elf_section_data (sec)->this_hdr;
+      hdr->sh_size = sec->size;
+    }
+  /* For relocatable links, do not update the section size as the section
+     contents have not been relocated.  */
+
+  sframe_encoder_free (&sfe_ctx);
+
+  return retval;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-strtab.c ./bfd/elf-strtab.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-strtab.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-strtab.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF strtab with GC and suffix merging support.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Written by Jakub Jelinek <jakub@redhat.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -95,7 +95,7 @@ struct elf_strtab_hash *
 _bfd_elf_strtab_init (void)
 {
   struct elf_strtab_hash *table;
-  bfd_size_type amt = sizeof (struct elf_strtab_hash);
+  size_t amt = sizeof (struct elf_strtab_hash);
 
   table = (struct elf_strtab_hash *) bfd_malloc (amt);
   if (table == NULL)
@@ -116,6 +116,7 @@ _bfd_elf_strtab_init (void)
 		  bfd_malloc (table->alloced * amt));
   if (table->array == NULL)
     {
+      bfd_hash_table_free (&table->table);
       free (table);
       return NULL;
     }
@@ -141,7 +142,7 @@ _bfd_elf_strtab_free (struct elf_strtab_
 size_t
 _bfd_elf_strtab_add (struct elf_strtab_hash *tab,
 		     const char *str,
-		     bfd_boolean copy)
+		     bool copy)
 {
   register struct elf_strtab_hash_entry *entry;
 
@@ -152,7 +153,7 @@ _bfd_elf_strtab_add (struct elf_strtab_h
 
   BFD_ASSERT (tab->sec_size == 0);
   entry = (struct elf_strtab_hash_entry *)
-	  bfd_hash_lookup (&tab->table, str, TRUE, copy);
+	  bfd_hash_lookup (&tab->table, str, true, copy);
 
   if (entry == NULL)
     return (size_t) -1;
@@ -245,13 +246,16 @@ _bfd_elf_strtab_save (struct elf_strtab_
 void
 _bfd_elf_strtab_restore (struct elf_strtab_hash *tab, void *buf)
 {
-  size_t idx, curr_size = tab->size;
+  size_t idx, curr_size = tab->size, save_size;
   struct strtab_save *save = (struct strtab_save *) buf;
 
   BFD_ASSERT (tab->sec_size == 0);
-  BFD_ASSERT (save->size <= curr_size);
-  tab->size = save->size;
-  for (idx = 1; idx < save->size; ++idx)
+  save_size = 1;
+  if (save != NULL)
+    save_size = save->size;
+  BFD_ASSERT (save_size <= curr_size);
+  tab->size = save_size;
+  for (idx = 1; idx < save_size; ++idx)
     tab->array[idx]->refcount = save->refcount[idx];
 
   for (; idx < curr_size; ++idx)
@@ -296,22 +300,24 @@ _bfd_elf_strtab_str (struct elf_strtab_h
 		     bfd_size_type *offset)
 {
   if (idx == 0)
-    return 0;
+    return NULL;
   BFD_ASSERT (idx < tab->size);
   BFD_ASSERT (tab->sec_size);
+  if (tab->array[idx]->refcount == 0)
+    return NULL;
   if (offset)
     *offset = tab->array[idx]->u.index;
   return tab->array[idx]->root.string;
 }
 
-bfd_boolean
+bool
 _bfd_elf_strtab_emit (register bfd *abfd, struct elf_strtab_hash *tab)
 {
   bfd_size_type off = 1;
   size_t i;
 
-  if (bfd_bwrite ("", 1, abfd) != 1)
-    return FALSE;
+  if (bfd_write ("", 1, abfd) != 1)
+    return false;
 
   for (i = 1; i < tab->size; ++i)
     {
@@ -324,14 +330,14 @@ _bfd_elf_strtab_emit (register bfd *abfd
 	continue;
 
       str = tab->array[i]->root.string;
-      if (bfd_bwrite (str, len, abfd) != len)
-	return FALSE;
+      if (bfd_write (str, len, abfd) != len)
+	return false;
 
       off += len;
     }
 
   BFD_ASSERT (off == tab->sec_size);
-  return TRUE;
+  return true;
 }
 
 /* Compare two elf_strtab_hash_entry structures.  Called via qsort.
@@ -439,9 +445,8 @@ _bfd_elf_strtab_finalize (struct elf_str
 	}
     }
 
-alloc_failure:
-  if (array)
-    free (array);
+ alloc_failure:
+  free (array);
 
   /* Assign positions to the strings we want to keep.  */
   sec_size = 1;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-vxworks.c ./bfd/elf-vxworks.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-vxworks.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-vxworks.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* VxWorks support for ELF
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,7 +28,7 @@
 /* Return true if symbol NAME, as defined by ABFD, is one of the special
    __GOTT_BASE__ or __GOTT_INDEX__ symbols.  */
 
-static bfd_boolean
+static bool
 elf_vxworks_gott_symbol_p (bfd *abfd, const char *name)
 {
   char leading;
@@ -37,7 +37,7 @@ elf_vxworks_gott_symbol_p (bfd *abfd, co
   if (leading)
     {
       if (*name != leading)
-	return FALSE;
+	return false;
       name++;
     }
   return (strcmp (name, "__GOTT_BASE__") == 0
@@ -45,7 +45,7 @@ elf_vxworks_gott_symbol_p (bfd *abfd, co
 }
 
 /* Tweak magic VxWorks symbols as they are loaded.  */
-bfd_boolean
+bool
 elf_vxworks_add_symbol_hook (bfd *abfd,
 			     struct bfd_link_info *info,
 			     Elf_Internal_Sym *sym,
@@ -69,14 +69,14 @@ elf_vxworks_add_symbol_hook (bfd *abfd,
       *flagsp |= BSF_WEAK;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Perform VxWorks-specific handling of the create_dynamic_sections hook.
    When creating an executable, set *SRELPLT2_OUT to the .rel(a).plt.unloaded
    section.  */
 
-bfd_boolean
+bool
 elf_vxworks_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info,
 				     asection **srelplt2_out)
 {
@@ -98,7 +98,7 @@ elf_vxworks_create_dynamic_sections (bfd
 					      | SEC_LINKER_CREATED);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
 
       *srelplt2_out = s;
     }
@@ -114,7 +114,7 @@ elf_vxworks_create_dynamic_sections (bfd
       htab->hgot->other &= ~ELF_ST_VISIBILITY (-1);
       htab->hgot->forced_local = 0;
       if (!bfd_elf_link_record_dynamic_symbol (info, htab->hgot))
-	return FALSE;
+	return false;
     }
   if (htab->hplt)
     {
@@ -122,7 +122,7 @@ elf_vxworks_create_dynamic_sections (bfd
       htab->hplt->type = STT_FUNC;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Tweak magic VxWorks symbols as they are written to the output file.  */
@@ -146,7 +146,7 @@ elf_vxworks_link_output_symbol_hook (str
 /* Copy relocations into the output file.  Fixes up relocations against PLT
    entries, then calls the generic routine.  */
 
-bfd_boolean
+bool
 elf_vxworks_emit_relocs (bfd *output_bfd,
 			 asection *input_section,
 			 Elf_Internal_Shdr *input_rel_hdr,
@@ -212,7 +212,7 @@ elf_vxworks_emit_relocs (bfd *output_bfd
 
 /* Set the sh_link and sh_info fields on the static plt relocation secton.  */
 
-bfd_boolean
+bool
 elf_vxworks_final_write_processing (bfd *abfd)
 {
   asection * sec;
@@ -235,7 +235,7 @@ elf_vxworks_final_write_processing (bfd
 /* Add the dynamic entries required by VxWorks.  These point to the
    tls sections.  */
 
-bfd_boolean
+bool
 elf_vxworks_add_dynamic_entries (bfd *output_bfd, struct bfd_link_info *info)
 {
   if (bfd_get_section_by_name (output_bfd, ".tls_data"))
@@ -243,21 +243,21 @@ elf_vxworks_add_dynamic_entries (bfd *ou
       if (!_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_DATA_START, 0)
 	  || !_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_DATA_SIZE, 0)
 	  || !_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_DATA_ALIGN, 0))
-	return FALSE;
+	return false;
     }
   if (bfd_get_section_by_name (output_bfd, ".tls_vars"))
     {
       if (!_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_VARS_START, 0)
 	  || !_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_VARS_SIZE, 0))
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* If *DYN is one of the VxWorks-specific dynamic entries, then fill
    in the value now  and return TRUE.  Otherwise return FALSE.  */
 
-bfd_boolean
+bool
 elf_vxworks_finish_dynamic_entry (bfd *output_bfd, Elf_Internal_Dyn *dyn)
 {
   asection *sec;
@@ -265,7 +265,7 @@ elf_vxworks_finish_dynamic_entry (bfd *o
   switch (dyn->d_tag)
     {
     default:
-      return FALSE;
+      return false;
 
     case DT_VX_WRS_TLS_DATA_START:
       sec = bfd_get_section_by_name (output_bfd, ".tls_data");
@@ -292,7 +292,20 @@ elf_vxworks_finish_dynamic_entry (bfd *o
       dyn->d_un.d_val = sec->size;
       break;
     }
-  return TRUE;
+  return true;
 }
 
+/* Add dynamic tags.  */
 
+bool
+_bfd_elf_maybe_vxworks_add_dynamic_tags (bfd *output_bfd,
+					 struct bfd_link_info *info,
+					 bool need_dynamic_reloc)
+{
+  struct elf_link_hash_table *htab = elf_hash_table (info);
+  return (_bfd_elf_add_dynamic_tags (output_bfd, info,
+				     need_dynamic_reloc)
+	  && (!htab->dynamic_sections_created
+	      || htab->target_os != is_vxworks
+	      || elf_vxworks_add_dynamic_entries (output_bfd, info)));
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-vxworks.h ./bfd/elf-vxworks.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elf-vxworks.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elf-vxworks.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* VxWorks support for ELF
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -19,18 +19,19 @@
 #include "elf/common.h"
 #include "elf/internal.h"
 
-bfd_boolean elf_vxworks_add_symbol_hook
+bool elf_vxworks_add_symbol_hook
   (bfd *, struct bfd_link_info *, Elf_Internal_Sym *, const char **,
    flagword *, asection **, bfd_vma *);
-bfd_boolean elf_vxworks_link_output_symbol_hook
+int elf_vxworks_link_output_symbol_hook
   (struct bfd_link_info *, const char *name, Elf_Internal_Sym *,
    asection *, struct elf_link_hash_entry *);
-bfd_boolean elf_vxworks_emit_relocs
+bool elf_vxworks_emit_relocs
   (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *,
    struct elf_link_hash_entry **);
-bfd_boolean elf_vxworks_final_write_processing (bfd *);
-bfd_boolean elf_vxworks_create_dynamic_sections
+bool elf_vxworks_final_write_processing (bfd *);
+bool elf_vxworks_create_dynamic_sections
   (bfd *, struct bfd_link_info *, asection **);
-bfd_boolean elf_vxworks_add_dynamic_entries (bfd *, struct bfd_link_info *);
-bfd_boolean elf_vxworks_finish_dynamic_entry (bfd *, Elf_Internal_Dyn *);
-
+bool elf_vxworks_add_dynamic_entries (bfd *, struct bfd_link_info *);
+bool elf_vxworks_finish_dynamic_entry (bfd *, Elf_Internal_Dyn *);
+bool _bfd_elf_maybe_vxworks_add_dynamic_tags
+  (bfd *, struct bfd_link_info *, bool);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-aarch64.c ./bfd/elfxx-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-aarch64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-aarch64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* AArch64-specific support for ELF.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -398,9 +398,9 @@ bfd_vma
 _bfd_aarch64_elf_resolve_relocation (bfd *input_bfd,
 				     bfd_reloc_code_real_type r_type,
 				     bfd_vma place, bfd_vma value,
-				     bfd_vma addend, bfd_boolean weak_undef_p)
+				     bfd_vma addend, bool weak_undef_p)
 {
-  bfd_boolean tls_reloc = TRUE;
+  bool tls_reloc = true;
   switch (r_type)
     {
     case BFD_RELOC_AARCH64_NONE:
@@ -448,7 +448,7 @@ _bfd_aarch64_elf_resolve_relocation (bfd
     case BFD_RELOC_AARCH64_MOVW_G2_NC:
     case BFD_RELOC_AARCH64_MOVW_G2_S:
     case BFD_RELOC_AARCH64_MOVW_G3:
-      tls_reloc = FALSE;
+      tls_reloc = false;
       /* fall-through.  */
     case BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC:
     case BFD_RELOC_AARCH64_TLSDESC_OFF_G1:
@@ -575,7 +575,7 @@ _bfd_aarch64_elf_resolve_relocation (bfd
 
 /* Support for core dump NOTE sections.  */
 
-bfd_boolean
+bool
 _bfd_aarch64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
@@ -584,7 +584,7 @@ _bfd_aarch64_elf_grok_prstatus (bfd *abf
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 392:		/* sizeof(struct elf_prstatus) on Linux/arm64.  */
 	/* pr_cursig */
@@ -607,13 +607,13 @@ _bfd_aarch64_elf_grok_prstatus (bfd *abf
 					  size, note->descpos + offset);
 }
 
-bfd_boolean
+bool
 _bfd_aarch64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 136:	     /* This is sizeof(struct elf_prpsinfo) on Linux/aarch64.  */
       elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 24);
@@ -635,7 +635,7 @@ _bfd_aarch64_elf_grok_psinfo (bfd *abfd,
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 char *
@@ -830,7 +830,7 @@ _bfd_aarch64_elf_parse_gnu_properties (b
    If APROP isn't NULL, merge it with BPROP and/or PROP.  Vice-versa if BROP
    isn't NULL.  Return TRUE if there is any update to APROP or if BPROP should
    be merge with ABFD.  */
-bfd_boolean
+bool
 _bfd_aarch64_elf_merge_gnu_properties (struct bfd_link_info *info
 				       ATTRIBUTE_UNUSED,
 				       bfd *abfd ATTRIBUTE_UNUSED,
@@ -839,7 +839,7 @@ _bfd_aarch64_elf_merge_gnu_properties (s
 				       uint32_t prop)
 {
   unsigned int orig_number;
-  bfd_boolean updated = FALSE;
+  bool updated = false;
   unsigned int pr_type = aprop != NULL ? aprop->pr_type : bprop->pr_type;
 
   switch (pr_type)
@@ -869,14 +869,14 @@ _bfd_aarch64_elf_merge_gnu_properties (s
 	    else
 	      {
 		bprop->u.number = prop;
-		updated = TRUE;
+		updated = true;
 	      }
 	  }
 	/* No PROP and BPROP is NULL, so remove APROP.  */
 	else if (aprop != NULL)
 	  {
 	    aprop->pr_kind = property_remove;
-	    updated = TRUE;
+	    updated = true;
 	  }
       }
       break;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-aarch64.h ./bfd/elfxx-aarch64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-aarch64.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-aarch64.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* AArch64-specific backend routines.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -78,22 +78,22 @@ extern int elf64_aarch64_setup_section_l
   (bfd *, struct bfd_link_info *);
 extern void elf64_aarch64_next_input_section
   (struct bfd_link_info *, struct bfd_section *);
-extern bfd_boolean elf64_aarch64_size_stubs
+extern bool elf64_aarch64_size_stubs
   (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
    struct bfd_section * (*) (const char *, struct bfd_section *),
    void (*) (void));
-extern bfd_boolean elf64_aarch64_build_stubs
+extern bool elf64_aarch64_build_stubs
   (struct bfd_link_info *);
 /* AArch64 stub generation support for ELF32.  Called from the linker.  */
 extern int elf32_aarch64_setup_section_lists
   (bfd *, struct bfd_link_info *);
 extern void elf32_aarch64_next_input_section
   (struct bfd_link_info *, struct bfd_section *);
-extern bfd_boolean elf32_aarch64_size_stubs
+extern bool elf32_aarch64_size_stubs
   (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
    struct bfd_section * (*) (const char *, struct bfd_section *),
    void (*) (void));
-extern bfd_boolean elf32_aarch64_build_stubs
+extern bool elf32_aarch64_build_stubs
   (struct bfd_link_info *);
 
 /* Take the PAGE component of an address or offset.  */
@@ -119,12 +119,12 @@ _bfd_aarch64_elf_put_addend (bfd *, bfd_
 
 extern bfd_vma
 _bfd_aarch64_elf_resolve_relocation (bfd *, bfd_reloc_code_real_type, bfd_vma,
-				     bfd_vma, bfd_vma, bfd_boolean);
+				     bfd_vma, bfd_vma, bool);
 
-extern bfd_boolean
+extern bool
 _bfd_aarch64_elf_grok_prstatus (bfd *, Elf_Internal_Note *);
 
-extern bfd_boolean
+extern bool
 _bfd_aarch64_elf_grok_psinfo (bfd *, Elf_Internal_Note *);
 
 extern char *
@@ -142,7 +142,7 @@ extern enum elf_property_kind
 _bfd_aarch64_elf_parse_gnu_properties (bfd *, unsigned int,
 				       bfd_byte *, unsigned int);
 
-extern bfd_boolean
+extern bool
 _bfd_aarch64_elf_merge_gnu_properties (struct bfd_link_info *, bfd *,
 				       elf_property *, elf_property *,
 				       uint32_t);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-ia64.c ./bfd/elfxx-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-ia64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-ia64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* IA-64 support for 64-bit ELF
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -66,7 +66,7 @@
 static bfd_reloc_status_type
 ia64_elf_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc,
 		asymbol *sym ATTRIBUTE_UNUSED,
-		PTR data ATTRIBUTE_UNUSED, asection *input_section,
+		void *data ATTRIBUTE_UNUSED, asection *input_section,
 		bfd *output_bfd, char **error_message)
 {
   if (output_bfd)
@@ -84,108 +84,108 @@ ia64_elf_reloc (bfd *abfd ATTRIBUTE_UNUS
 
 #define IA64_HOWTO(TYPE, NAME, SIZE, PCREL, IN)			\
   HOWTO (TYPE, 0, SIZE, 0, PCREL, 0, complain_overflow_signed,	\
-	 ia64_elf_reloc, NAME, FALSE, 0, -1, IN)
+	 ia64_elf_reloc, NAME, false, 0, -1, IN)
 
 /* This table has to be sorted according to increasing number of the
    TYPE field.  */
 static reloc_howto_type ia64_howto_table[] =
   {
-    IA64_HOWTO (R_IA64_NONE,	    "NONE",	   3, FALSE, TRUE),
+    IA64_HOWTO (R_IA64_NONE,	    "NONE",	   0, false, true),
 
-    IA64_HOWTO (R_IA64_IMM14,	    "IMM14",	   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_IMM22,	    "IMM22",	   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_IMM64,	    "IMM64",	   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_DIR32MSB,    "DIR32MSB",	   2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_DIR32LSB,    "DIR32LSB",	   2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_DIR64MSB,    "DIR64MSB",	   4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_DIR64LSB,    "DIR64LSB",	   4, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_GPREL22,	    "GPREL22",	   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_GPREL64I,    "GPREL64I",	   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_GPREL32MSB,  "GPREL32MSB",  2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_GPREL32LSB,  "GPREL32LSB",  2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_GPREL64MSB,  "GPREL64MSB",  4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_GPREL64LSB,  "GPREL64LSB",  4, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_LTOFF22,	    "LTOFF22",	   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTOFF64I,    "LTOFF64I",	   0, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_PLTOFF22,    "PLTOFF22",	   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_PLTOFF64I,   "PLTOFF64I",   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_PLTOFF64MSB, "PLTOFF64MSB", 4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_PLTOFF64LSB, "PLTOFF64LSB", 4, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_FPTR64I,	    "FPTR64I",	   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_FPTR32MSB,   "FPTR32MSB",   2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_FPTR32LSB,   "FPTR32LSB",   2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_FPTR64MSB,   "FPTR64MSB",   4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_FPTR64LSB,   "FPTR64LSB",   4, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_PCREL60B,    "PCREL60B",	   0, TRUE, TRUE),
-    IA64_HOWTO (R_IA64_PCREL21B,    "PCREL21B",	   0, TRUE, TRUE),
-    IA64_HOWTO (R_IA64_PCREL21M,    "PCREL21M",	   0, TRUE, TRUE),
-    IA64_HOWTO (R_IA64_PCREL21F,    "PCREL21F",	   0, TRUE, TRUE),
-    IA64_HOWTO (R_IA64_PCREL32MSB,  "PCREL32MSB",  2, TRUE, TRUE),
-    IA64_HOWTO (R_IA64_PCREL32LSB,  "PCREL32LSB",  2, TRUE, TRUE),
-    IA64_HOWTO (R_IA64_PCREL64MSB,  "PCREL64MSB",  4, TRUE, TRUE),
-    IA64_HOWTO (R_IA64_PCREL64LSB,  "PCREL64LSB",  4, TRUE, TRUE),
-
-    IA64_HOWTO (R_IA64_LTOFF_FPTR22, "LTOFF_FPTR22", 0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTOFF_FPTR64I, "LTOFF_FPTR64I", 0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTOFF_FPTR32MSB, "LTOFF_FPTR32MSB", 2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTOFF_FPTR32LSB, "LTOFF_FPTR32LSB", 2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTOFF_FPTR64MSB, "LTOFF_FPTR64MSB", 4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTOFF_FPTR64LSB, "LTOFF_FPTR64LSB", 4, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_SEGREL32MSB, "SEGREL32MSB", 2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_SEGREL32LSB, "SEGREL32LSB", 2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_SEGREL64MSB, "SEGREL64MSB", 4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_SEGREL64LSB, "SEGREL64LSB", 4, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_SECREL32MSB, "SECREL32MSB", 2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_SECREL32LSB, "SECREL32LSB", 2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_SECREL64MSB, "SECREL64MSB", 4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_SECREL64LSB, "SECREL64LSB", 4, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_REL32MSB,    "REL32MSB",	   2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_REL32LSB,    "REL32LSB",	   2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_REL64MSB,    "REL64MSB",	   4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_REL64LSB,    "REL64LSB",	   4, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_LTV32MSB,    "LTV32MSB",	   2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTV32LSB,    "LTV32LSB",	   2, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTV64MSB,    "LTV64MSB",	   4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTV64LSB,    "LTV64LSB",	   4, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_PCREL21BI,   "PCREL21BI",   0, TRUE, TRUE),
-    IA64_HOWTO (R_IA64_PCREL22,     "PCREL22",     0, TRUE, TRUE),
-    IA64_HOWTO (R_IA64_PCREL64I,    "PCREL64I",    0, TRUE, TRUE),
-
-    IA64_HOWTO (R_IA64_IPLTMSB,	    "IPLTMSB",	   4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_IPLTLSB,	    "IPLTLSB",	   4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_COPY,	    "COPY",	   4, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LTOFF22X,    "LTOFF22X",	   0, FALSE, TRUE),
-    IA64_HOWTO (R_IA64_LDXMOV,	    "LDXMOV",	   0, FALSE, TRUE),
-
-    IA64_HOWTO (R_IA64_TPREL14,	    "TPREL14",	   0, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_TPREL22,	    "TPREL22",	   0, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_TPREL64I,    "TPREL64I",	   0, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_TPREL64MSB,  "TPREL64MSB",  4, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_TPREL64LSB,  "TPREL64LSB",  4, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_LTOFF_TPREL22, "LTOFF_TPREL22",  0, FALSE, FALSE),
-
-    IA64_HOWTO (R_IA64_DTPMOD64MSB, "DTPMOD64MSB",  4, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_DTPMOD64LSB, "DTPMOD64LSB",  4, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_LTOFF_DTPMOD22, "LTOFF_DTPMOD22", 0, FALSE, FALSE),
-
-    IA64_HOWTO (R_IA64_DTPREL14,    "DTPREL14",	   0, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_DTPREL22,    "DTPREL22",	   0, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_DTPREL64I,   "DTPREL64I",   0, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_DTPREL32MSB, "DTPREL32MSB", 2, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_DTPREL32LSB, "DTPREL32LSB", 2, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_DTPREL64MSB, "DTPREL64MSB", 4, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_DTPREL64LSB, "DTPREL64LSB", 4, FALSE, FALSE),
-    IA64_HOWTO (R_IA64_LTOFF_DTPREL22, "LTOFF_DTPREL22", 0, FALSE, FALSE),
+    IA64_HOWTO (R_IA64_IMM14,	    "IMM14",	   1, false, true),
+    IA64_HOWTO (R_IA64_IMM22,	    "IMM22",	   1, false, true),
+    IA64_HOWTO (R_IA64_IMM64,	    "IMM64",	   1, false, true),
+    IA64_HOWTO (R_IA64_DIR32MSB,    "DIR32MSB",	   4, false, true),
+    IA64_HOWTO (R_IA64_DIR32LSB,    "DIR32LSB",	   4, false, true),
+    IA64_HOWTO (R_IA64_DIR64MSB,    "DIR64MSB",	   8, false, true),
+    IA64_HOWTO (R_IA64_DIR64LSB,    "DIR64LSB",	   8, false, true),
+
+    IA64_HOWTO (R_IA64_GPREL22,	    "GPREL22",	   1, false, true),
+    IA64_HOWTO (R_IA64_GPREL64I,    "GPREL64I",	   1, false, true),
+    IA64_HOWTO (R_IA64_GPREL32MSB,  "GPREL32MSB",  4, false, true),
+    IA64_HOWTO (R_IA64_GPREL32LSB,  "GPREL32LSB",  4, false, true),
+    IA64_HOWTO (R_IA64_GPREL64MSB,  "GPREL64MSB",  8, false, true),
+    IA64_HOWTO (R_IA64_GPREL64LSB,  "GPREL64LSB",  8, false, true),
+
+    IA64_HOWTO (R_IA64_LTOFF22,	    "LTOFF22",	   1, false, true),
+    IA64_HOWTO (R_IA64_LTOFF64I,    "LTOFF64I",	   1, false, true),
+
+    IA64_HOWTO (R_IA64_PLTOFF22,    "PLTOFF22",	   1, false, true),
+    IA64_HOWTO (R_IA64_PLTOFF64I,   "PLTOFF64I",   1, false, true),
+    IA64_HOWTO (R_IA64_PLTOFF64MSB, "PLTOFF64MSB", 8, false, true),
+    IA64_HOWTO (R_IA64_PLTOFF64LSB, "PLTOFF64LSB", 8, false, true),
+
+    IA64_HOWTO (R_IA64_FPTR64I,	    "FPTR64I",	   1, false, true),
+    IA64_HOWTO (R_IA64_FPTR32MSB,   "FPTR32MSB",   4, false, true),
+    IA64_HOWTO (R_IA64_FPTR32LSB,   "FPTR32LSB",   4, false, true),
+    IA64_HOWTO (R_IA64_FPTR64MSB,   "FPTR64MSB",   8, false, true),
+    IA64_HOWTO (R_IA64_FPTR64LSB,   "FPTR64LSB",   8, false, true),
+
+    IA64_HOWTO (R_IA64_PCREL60B,    "PCREL60B",	   1, true, true),
+    IA64_HOWTO (R_IA64_PCREL21B,    "PCREL21B",	   1, true, true),
+    IA64_HOWTO (R_IA64_PCREL21M,    "PCREL21M",	   1, true, true),
+    IA64_HOWTO (R_IA64_PCREL21F,    "PCREL21F",	   1, true, true),
+    IA64_HOWTO (R_IA64_PCREL32MSB,  "PCREL32MSB",  4, true, true),
+    IA64_HOWTO (R_IA64_PCREL32LSB,  "PCREL32LSB",  4, true, true),
+    IA64_HOWTO (R_IA64_PCREL64MSB,  "PCREL64MSB",  8, true, true),
+    IA64_HOWTO (R_IA64_PCREL64LSB,  "PCREL64LSB",  8, true, true),
+
+    IA64_HOWTO (R_IA64_LTOFF_FPTR22, "LTOFF_FPTR22", 1, false, true),
+    IA64_HOWTO (R_IA64_LTOFF_FPTR64I, "LTOFF_FPTR64I", 1, false, true),
+    IA64_HOWTO (R_IA64_LTOFF_FPTR32MSB, "LTOFF_FPTR32MSB", 4, false, true),
+    IA64_HOWTO (R_IA64_LTOFF_FPTR32LSB, "LTOFF_FPTR32LSB", 4, false, true),
+    IA64_HOWTO (R_IA64_LTOFF_FPTR64MSB, "LTOFF_FPTR64MSB", 8, false, true),
+    IA64_HOWTO (R_IA64_LTOFF_FPTR64LSB, "LTOFF_FPTR64LSB", 8, false, true),
+
+    IA64_HOWTO (R_IA64_SEGREL32MSB, "SEGREL32MSB", 4, false, true),
+    IA64_HOWTO (R_IA64_SEGREL32LSB, "SEGREL32LSB", 4, false, true),
+    IA64_HOWTO (R_IA64_SEGREL64MSB, "SEGREL64MSB", 8, false, true),
+    IA64_HOWTO (R_IA64_SEGREL64LSB, "SEGREL64LSB", 8, false, true),
+
+    IA64_HOWTO (R_IA64_SECREL32MSB, "SECREL32MSB", 4, false, true),
+    IA64_HOWTO (R_IA64_SECREL32LSB, "SECREL32LSB", 4, false, true),
+    IA64_HOWTO (R_IA64_SECREL64MSB, "SECREL64MSB", 8, false, true),
+    IA64_HOWTO (R_IA64_SECREL64LSB, "SECREL64LSB", 8, false, true),
+
+    IA64_HOWTO (R_IA64_REL32MSB,    "REL32MSB",	   4, false, true),
+    IA64_HOWTO (R_IA64_REL32LSB,    "REL32LSB",	   4, false, true),
+    IA64_HOWTO (R_IA64_REL64MSB,    "REL64MSB",	   8, false, true),
+    IA64_HOWTO (R_IA64_REL64LSB,    "REL64LSB",	   8, false, true),
+
+    IA64_HOWTO (R_IA64_LTV32MSB,    "LTV32MSB",	   4, false, true),
+    IA64_HOWTO (R_IA64_LTV32LSB,    "LTV32LSB",	   4, false, true),
+    IA64_HOWTO (R_IA64_LTV64MSB,    "LTV64MSB",	   8, false, true),
+    IA64_HOWTO (R_IA64_LTV64LSB,    "LTV64LSB",	   8, false, true),
+
+    IA64_HOWTO (R_IA64_PCREL21BI,   "PCREL21BI",   1, true, true),
+    IA64_HOWTO (R_IA64_PCREL22,     "PCREL22",     1, true, true),
+    IA64_HOWTO (R_IA64_PCREL64I,    "PCREL64I",    1, true, true),
+
+    IA64_HOWTO (R_IA64_IPLTMSB,	    "IPLTMSB",	   8, false, true),
+    IA64_HOWTO (R_IA64_IPLTLSB,	    "IPLTLSB",	   8, false, true),
+    IA64_HOWTO (R_IA64_COPY,	    "COPY",	   8, false, true),
+    IA64_HOWTO (R_IA64_LTOFF22X,    "LTOFF22X",	   1, false, true),
+    IA64_HOWTO (R_IA64_LDXMOV,	    "LDXMOV",	   1, false, true),
+
+    IA64_HOWTO (R_IA64_TPREL14,	    "TPREL14",	   1, false, false),
+    IA64_HOWTO (R_IA64_TPREL22,	    "TPREL22",	   1, false, false),
+    IA64_HOWTO (R_IA64_TPREL64I,    "TPREL64I",	   1, false, false),
+    IA64_HOWTO (R_IA64_TPREL64MSB,  "TPREL64MSB",  8, false, false),
+    IA64_HOWTO (R_IA64_TPREL64LSB,  "TPREL64LSB",  8, false, false),
+    IA64_HOWTO (R_IA64_LTOFF_TPREL22, "LTOFF_TPREL22",  1, false, false),
+
+    IA64_HOWTO (R_IA64_DTPMOD64MSB, "DTPMOD64MSB",  8, false, false),
+    IA64_HOWTO (R_IA64_DTPMOD64LSB, "DTPMOD64LSB",  8, false, false),
+    IA64_HOWTO (R_IA64_LTOFF_DTPMOD22, "LTOFF_DTPMOD22", 1, false, false),
+
+    IA64_HOWTO (R_IA64_DTPREL14,    "DTPREL14",	   1, false, false),
+    IA64_HOWTO (R_IA64_DTPREL22,    "DTPREL22",	   1, false, false),
+    IA64_HOWTO (R_IA64_DTPREL64I,   "DTPREL64I",   1, false, false),
+    IA64_HOWTO (R_IA64_DTPREL32MSB, "DTPREL32MSB", 4, false, false),
+    IA64_HOWTO (R_IA64_DTPREL32LSB, "DTPREL32LSB", 4, false, false),
+    IA64_HOWTO (R_IA64_DTPREL64MSB, "DTPREL64MSB", 8, false, false),
+    IA64_HOWTO (R_IA64_DTPREL64LSB, "DTPREL64LSB", 8, false, false),
+    IA64_HOWTO (R_IA64_LTOFF_DTPREL22, "LTOFF_DTPREL22", 1, false, false),
   };
 
 static unsigned char elf_code_to_howto_index[R_IA64_MAX_RELOC_CODE + 1];
@@ -195,12 +195,12 @@ static unsigned char elf_code_to_howto_i
 reloc_howto_type *
 ia64_elf_lookup_howto (unsigned int rtype)
 {
-  static bfd_boolean inited = FALSE;
+  static bool inited = false;
   int i;
 
   if (!inited)
     {
-      inited = TRUE;
+      inited = true;
 
       memset (elf_code_to_howto_index, 0xff, sizeof (elf_code_to_howto_index));
       for (i = 0; i < NELEMS (ia64_howto_table); ++i)
@@ -380,7 +380,7 @@ ia64_elf_reloc_name_lookup (bfd *abfd AT
 #define IS_BR_CALL(i) \
   (((i) & OPCODE_BITS) == (0x5LL << OPCODE_SHIFT))
 
-bfd_boolean
+bool
 ia64_elf_relax_br (bfd_byte *contents, bfd_vma off)
 {
   unsigned int template_val, mlx;
@@ -407,7 +407,7 @@ ia64_elf_relax_br (bfd_byte *contents, b
       /* Check if slot 1 and slot 2 are NOPs. Possible template is
 	 BBB.  We only need to check nop.b.  */
       if (!(IS_NOP_B (s1) && IS_NOP_B (s2)))
-	return FALSE;
+	return false;
       br_code = s0;
       break;
     case 1:
@@ -418,7 +418,7 @@ ia64_elf_relax_br (bfd_byte *contents, b
 	    || (template_val == 0x16			/* BBB */
 		&& IS_NOP_B (s0)
 		&& IS_NOP_B (s2))))
-	return FALSE;
+	return false;
       br_code = s1;
       break;
     case 2:
@@ -435,7 +435,7 @@ ia64_elf_relax_br (bfd_byte *contents, b
 		&& IS_NOP_M (s1))
 	    || (template_val == 0x1c			/* MFB */
 		&& IS_NOP_F (s1))))
-	return FALSE;
+	return false;
       br_code = s2;
       break;
     default:
@@ -445,7 +445,7 @@ ia64_elf_relax_br (bfd_byte *contents, b
 
   /* We can turn br.cond/br.call into brl.cond/brl.call.  */
   if (!(IS_BR_COND (br_code) || IS_BR_CALL (br_code)))
-    return FALSE;
+    return false;
 
   /* Turn br into brl by setting bit 40.  */
   br_code |= 0x1LL << 40;
@@ -480,7 +480,7 @@ ia64_elf_relax_br (bfd_byte *contents, b
 
   bfd_putl64 (t0, hit_addr);
   bfd_putl64 (t1, hit_addr + 8);
-  return TRUE;
+  return true;
 }
 
 void
@@ -555,11 +555,7 @@ ia64_elf_install_value (bfd_byte *hit_ad
   enum ia64_opnd opnd;
   const char *err;
   size_t size = 8;
-#ifdef BFD_HOST_U_64_BIT
-  BFD_HOST_U_64_BIT val = (BFD_HOST_U_64_BIT) v;
-#else
-  bfd_vma val = v;
-#endif
+  uint64_t val = v;
 
   opnd = IA64_OPND_NIL;
   switch (r_type)
@@ -685,7 +681,7 @@ ia64_elf_install_value (bfd_byte *hit_ad
 	 slot 2: bits 23..63 in t1 */
 
       /* First, clear the bits that form the 64 bit constant.  */
-      t0 &= ~(0x3ffffLL << 46);
+      t0 &= ~(0x3ffffULL << 46);
       t1 &= ~(0x7fffffLL
 	      | ((  (0x07fLL << 13) | (0x1ffLL << 27)
 		    | (0x01fLL << 22) | (0x001LL << 21)
@@ -714,7 +710,7 @@ ia64_elf_install_value (bfd_byte *hit_ad
 	 slot 2: bits 23..63 in t1 */
 
       /* First, clear the bits that form the 64 bit constant.  */
-      t0 &= ~(0x3ffffLL << 46);
+      t0 &= ~(0x3ffffULL << 46);
       t1 &= ~(0x7fffffLL
 	      | ((1LL << 36 | 0xfffffLL << 13) << 23));
 
@@ -744,7 +740,7 @@ ia64_elf_install_value (bfd_byte *hit_ad
       if (err)
 	return bfd_reloc_overflow;
 
-      dword &= ~(0x1ffffffffffLL << shift);
+      dword &= ~(0x1ffffffffffULL << shift);
       dword |= (insn << shift);
       bfd_putl64 (dword, hit_addr);
       break;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-ia64.h ./bfd/elfxx-ia64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-ia64.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-ia64.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* IA-64 support for 64-bit ELF
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -25,7 +25,7 @@ reloc_howto_type *ia64_elf_reloc_name_lo
 
 reloc_howto_type *ia64_elf_lookup_howto (unsigned int rtype);
 
-bfd_boolean ia64_elf_relax_br (bfd_byte *contents, bfd_vma off);
+bool ia64_elf_relax_br (bfd_byte *contents, bfd_vma off);
 void ia64_elf_relax_brl (bfd_byte *contents, bfd_vma off);
 void ia64_elf_relax_ldxmov (bfd_byte *contents, bfd_vma off);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-kvx.c ./bfd/elfxx-kvx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-kvx.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elfxx-kvx.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,211 @@
+/* KVX-specific support for ELF.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
+   Contributed by Kalray SA.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3. If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+#include "sysdep.h"
+#include "elfxx-kvx.h"
+#include <stdarg.h>
+#include <string.h>
+
+/* Return non-zero if the indicated VALUE has overflowed the maximum
+   range expressible by a unsigned number with the indicated number of
+   BITS.  */
+
+static bfd_reloc_status_type
+kvx_unsigned_overflow (bfd_vma value, unsigned int bits)
+{
+  bfd_vma lim;
+  if (bits >= sizeof (bfd_vma) * 8)
+    return bfd_reloc_ok;
+  lim = (bfd_vma) 1 << bits;
+  if (value >= lim)
+    return bfd_reloc_overflow;
+  return bfd_reloc_ok;
+}
+
+/* Return non-zero if the indicated VALUE has overflowed the maximum
+   range expressible by an signed number with the indicated number of
+   BITS.  */
+
+static bfd_reloc_status_type
+kvx_signed_overflow (bfd_vma value, unsigned int bits)
+{
+  bfd_vma lim;
+
+  if (bits >= sizeof (bfd_vma) * 8)
+    return bfd_reloc_ok;
+  lim = (bfd_vma) 1 << (bits - 1);
+  if (value + lim >= lim * 2)
+    return bfd_reloc_overflow;
+  return bfd_reloc_ok;
+}
+
+/* Insert the addend/value into the instruction or data object being
+   relocated.  */
+bfd_reloc_status_type
+_bfd_kvx_elf_put_addend (bfd *abfd,
+			 bfd_byte *address,
+			 bfd_reloc_code_real_type r_type ATTRIBUTE_UNUSED,
+			 reloc_howto_type *howto,
+			 bfd_signed_vma addend)
+{
+  bfd_reloc_status_type status = bfd_reloc_ok;
+  bfd_vma contents;
+  int size;
+
+  size = bfd_get_reloc_size (howto);
+  switch (size)
+    {
+    case 2:
+      contents = bfd_get_16 (abfd, address);
+      break;
+    case 4:
+      if (howto->src_mask != 0xffffffff)
+	/* Must be 32-bit instruction, always little-endian.  */
+	contents = bfd_getl32 (address);
+      else
+	/* Must be 32-bit data (endianness dependent).  */
+	contents = bfd_get_32 (abfd, address);
+      break;
+    case 8:
+      contents = bfd_get_64 (abfd, address);
+      break;
+    default:
+      abort ();
+    }
+
+  switch (howto->complain_on_overflow)
+    {
+    case complain_overflow_dont:
+      break;
+    case complain_overflow_signed:
+      status = kvx_signed_overflow (addend,
+				    howto->bitsize + howto->rightshift);
+      break;
+    case complain_overflow_unsigned:
+      status = kvx_unsigned_overflow (addend,
+				      howto->bitsize + howto->rightshift);
+      break;
+    case complain_overflow_bitfield:
+    default:
+      abort ();
+    }
+
+  addend >>= howto->rightshift;
+
+  /* FIXME KVX : AARCH64 is "redoing" what the link_relocate bfd
+   * function does ie. extract bitfields and apply then to the
+   * existing content (insn) (howto's job) Not sure exactly
+   * why. Maybe because we need this even when not applying reloc
+   * against a input_bfd (eg. when doing PLT).  On KVX, we have not
+   * reached a point where we would need to write similar
+   * functions for each insn. So we'll simply enrich the default
+   * case for handling a bit more than "right aligned bitfields"
+   * 
+   * Beware that this won't be able to apply generic howto !
+   */
+
+  /* if (howto->dst_mask & (howto->dst_mask + 1)) */
+  /* 	return bfd_reloc_notsupported; */
+  addend <<= howto->bitpos;
+  contents = ((contents & ~howto->dst_mask) | (addend & howto->dst_mask));
+
+  switch (size)
+    {
+    case 2:
+      bfd_put_16 (abfd, contents, address);
+      break;
+    case 4:
+      if (howto->dst_mask != 0xffffffff)
+	/* must be 32-bit instruction, always little-endian */
+	bfd_putl32 (contents, address);
+      else
+	/* must be 32-bit data (endianness dependent) */
+	bfd_put_32 (abfd, contents, address);
+      break;
+    case 8:
+      bfd_put_64 (abfd, contents, address);
+      break;
+    default:
+      abort ();
+    }
+
+  return status;
+}
+
+bool
+_bfd_kvx_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
+{
+  int offset;
+  size_t size;
+
+  switch (note->descsz)
+    {
+    case 680: /* sizeof(struct elf_prstatus) on Linux/kvx.  */
+      /* pr_cursig */
+      elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
+
+      /* pr_pid */
+      elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32);
+
+      /* pr_reg */
+      offset = 112;
+      size = 560;
+      break;
+
+    default:
+      return false;
+    }
+
+  /* Make a ".reg/999" section.  */
+  return _bfd_elfcore_make_pseudosection (abfd, ".reg", size,
+					  note->descpos + offset);
+}
+
+bool
+_bfd_kvx_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
+{
+  switch (note->descsz)
+    {
+    case 136: /* This is sizeof(struct elf_prpsinfo) on Linux/kvx.  */
+      elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 24);
+      elf_tdata (abfd)->core->program
+	= _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
+      elf_tdata (abfd)->core->command
+	= _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
+      break;
+
+    default:
+      return false;
+    }
+
+  /* Note that for some reason, a spurious space is tacked
+     onto the end of the args in some (at least one anyway)
+     implementations, so strip it off if it exists.  */
+
+  {
+    char *command = elf_tdata (abfd)->core->command;
+    int n = strlen (command);
+
+    if (n > 0 && command[n - 1] == ' ')
+      command[n - 1] = 0;
+  }
+
+  return true;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-kvx.h ./bfd/elfxx-kvx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-kvx.h	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elfxx-kvx.h	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,66 @@
+/* KVX-specific backend routines.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
+   Contributed by Kalray SA.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3. If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+#include "bfd.h"
+#include "elf-bfd.h"
+#include "stdint.h"
+
+
+/* KVX stub generation support for ELF64.  Called from the linker.  */
+extern int elf64_kvx_setup_section_lists
+  (bfd *, struct bfd_link_info *);
+extern void elf64_kvx_next_input_section
+  (struct bfd_link_info *, struct bfd_section *);
+extern bool elf64_kvx_size_stubs
+  (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
+   struct bfd_section * (*) (const char *, struct bfd_section *),
+   void (*) (void));
+extern bool elf64_kvx_build_stubs
+  (struct bfd_link_info *);
+/* Kvx stub generation support for ELF32.  Called from the linker.  */
+extern int elf32_kvx_setup_section_lists
+  (bfd *, struct bfd_link_info *);
+extern void elf32_kvx_next_input_section
+  (struct bfd_link_info *, struct bfd_section *);
+extern bool elf32_kvx_size_stubs
+  (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
+   struct bfd_section * (*) (const char *, struct bfd_section *),
+   void (*) (void));
+extern bool elf32_kvx_build_stubs
+  (struct bfd_link_info *);
+
+
+extern bfd_reloc_status_type
+_bfd_kvx_elf_put_addend (bfd *, bfd_byte *, bfd_reloc_code_real_type,
+			     reloc_howto_type *, bfd_signed_vma);
+
+bool
+kvx_elf32_init_stub_bfd (struct bfd_link_info *info,
+			bfd *stub_bfd);
+bool
+kvx_elf64_init_stub_bfd (struct bfd_link_info *info,
+			bfd *stub_bfd);
+
+bool _bfd_kvx_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note);
+
+bool _bfd_kvx_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note);
+
+#define elf_backend_grok_prstatus _bfd_kvx_elf_grok_prstatus
+#define elf_backend_grok_psinfo _bfd_kvx_elf_grok_psinfo
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-kvx-relocs.h ./bfd/elfxx-kvx-relocs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-kvx-relocs.h	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elfxx-kvx-relocs.h	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,1105 @@
+/* KVX-specific relocations table.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
+   Contributed by Kalray SA.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3. If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+#ifdef KVX_KV3_V1_KV3_V2_KV4_V1
+static reloc_howto_type elf_kvx_howto_table[] =
+{
+  HOWTO (R_KVX_NONE,			/* type */
+	 0,				/* rightshift */
+	 0,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_NONE",			/* name */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
+	 0,				/* dst_mask */
+	 false),			/* pcrel_offset */
+  HOWTO (R_KVX_16,			/* type */
+	 0,				/* rightshift */
+	 2,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 16,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_unsigned,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_16",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_32,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_unsigned,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_32",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_64,			/* type */
+	 0,				/* rightshift */
+	 8,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 64,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_unsigned,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_64",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffffffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S16_PCREL,			/* type */
+	 0,				/* rightshift */
+	 2,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 16,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_signed,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S16_PCREL",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_PCREL17,			/* type */
+	 2,				/* rightshift */
+	 3,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 17,				/* bitsize */
+	 true,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_signed,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_PCREL17",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7fffc0,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_PCREL27,			/* type */
+	 2,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_signed,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_PCREL27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_32_PCREL,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 32,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_signed,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_32_PCREL",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S37_PCREL_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 true,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_PCREL_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S37_PCREL_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_PCREL_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S43_PCREL_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 true,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_PCREL_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S43_PCREL_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_PCREL_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S43_PCREL_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_PCREL_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S64_PCREL_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 true,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S64_PCREL_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S64_PCREL_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S64_PCREL_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S64_PCREL_EX27,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S64_PCREL_EX27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_64_PCREL,			/* type */
+	 0,				/* rightshift */
+	 8,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 64,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_signed,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_64_PCREL",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffffffffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S16,			/* type */
+	 0,				/* rightshift */
+	 2,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 16,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_signed,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S16",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S32_LO5,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 5,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S32_LO5",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7c0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S32_UP27,			/* type */
+	 5,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S32_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_GOTOFF_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_GOTOFF_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_GOTOFF_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_GOTOFF_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_GOTOFF_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_GOTOFF_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_GOTOFF_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_GOTOFF_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_GOTOFF_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_GOTOFF_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_32_GOTOFF,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_32_GOTOFF",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_64_GOTOFF,			/* type */
+	 0,				/* rightshift */
+	 8,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 64,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_64_GOTOFF",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffffffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_32_GOT,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_unsigned,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_32_GOT",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_GOT_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_GOT_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_GOT_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_GOT_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_GOT_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_GOT_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_GOT_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_GOT_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_GOT_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_GOT_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_64_GOT,			/* type */
+	 0,				/* rightshift */
+	 8,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 64,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_64_GOT",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffffffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_GLOB_DAT,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_GLOB_DAT",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_COPY,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_COPY",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_JMP_SLOT,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_JMP_SLOT",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_RELATIVE,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_RELATIVE",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S64_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S64_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S64_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S64_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S64_EX27,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S64_EX27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_GOTADDR_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 true,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_GOTADDR_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S37_GOTADDR_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_GOTADDR_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S43_GOTADDR_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 true,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_GOTADDR_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S43_GOTADDR_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_GOTADDR_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S43_GOTADDR_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_GOTADDR_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S64_GOTADDR_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 true,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S64_GOTADDR_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S64_GOTADDR_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S64_GOTADDR_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_S64_GOTADDR_EX27,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 true,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S64_GOTADDR_EX27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 true),			/* pc_offset */
+  HOWTO (R_KVX_64_DTPMOD,			/* type */
+	 0,				/* rightshift */
+	 8,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 64,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_64_DTPMOD",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffffffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_64_DTPOFF,			/* type */
+	 0,				/* rightshift */
+	 8,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 64,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_64_DTPOFF",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffffffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_DTPOFF_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_DTPOFF_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_DTPOFF_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_DTPOFF_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_DTPOFF_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_DTPOFF_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_DTPOFF_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_DTPOFF_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_DTPOFF_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_DTPOFF_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_GD_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_GD_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_GD_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_GD_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_GD_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_GD_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_GD_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_GD_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_GD_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_GD_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_LD_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_LD_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_LD_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_LD_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_LD_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_LD_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_LD_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_LD_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_LD_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_LD_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_64_TPOFF,			/* type */
+	 0,				/* rightshift */
+	 8,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 64,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_64_TPOFF",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffffffffffffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_IE_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_IE_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_IE_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_IE_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_IE_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_IE_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_IE_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_IE_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_IE_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_IE_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_LE_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_LE_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S37_TLS_LE_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S37_TLS_LE_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_LE_LO10,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 10,				/* bitsize */
+	 false,				/* pc_relative */
+	 6,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_LE_LO10",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xffc0,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_LE_UP27,			/* type */
+	 10,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 27,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_LE_UP27",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x7ffffff,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_S43_TLS_LE_EX6,			/* type */
+	 37,				/* rightshift */
+	 4,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 6,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_S43_TLS_LE_EX6",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0x3f,			/* dst_mask */
+	 false),			/* pc_offset */
+  HOWTO (R_KVX_8,			/* type */
+	 0,				/* rightshift */
+	 1,				/* size (0 = byte, 1 = short, 2 = long, 3 = invalid, 4 = 64bits, 8 = 128bits) */
+	 8,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos (bit field offset) */
+	 complain_overflow_unsigned,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_KVX_8",			/* name */
+	 false,				/* partial_inplace */
+	 0x0,				/* src_mask */
+	 0xff,			/* dst_mask */
+	 false),			/* pc_offset */
+};
+
+#endif /* KVX_KV3_V1_KV3_V2_KV4_V1 */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-loongarch.c ./bfd/elfxx-loongarch.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-loongarch.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elfxx-loongarch.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,2213 @@
+/* LoongArch-specific support for ELF.
+   Copyright (C) 2021-2024 Free Software Foundation, Inc.
+   Contributed by Loongson Ltd.
+
+   Based on RISC-V target.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/loongarch.h"
+#include "elfxx-loongarch.h"
+
+#define ALL_ONES (~ (bfd_vma) 0)
+
+typedef struct loongarch_reloc_howto_type_struct
+{
+  /* The first must be reloc_howto_type!  */
+  reloc_howto_type howto;
+  bfd_reloc_code_real_type bfd_type;
+  bool (*adjust_reloc_bits)(bfd *, reloc_howto_type *, bfd_vma *);
+  const char *larch_reloc_type_name;
+} loongarch_reloc_howto_type;
+
+#define LOONGARCH_DEFAULT_HOWTO(r_name)					    \
+  { HOWTO (R_LARCH_##r_name, 0, 4, 32, false, 0, complain_overflow_signed,  \
+	bfd_elf_generic_reloc, "R_LARCH_" #r_name, false, 0, ALL_ONES,	    \
+	false), BFD_RELOC_LARCH_##r_name, NULL, NULL }
+
+#define LOONGARCH_HOWTO(type, right, size, bits, pcrel, left, ovf, func,  \
+	    name, inplace, src_mask, dst_mask, pcrel_off, btype, afunc,lname) \
+  { HOWTO(type, right, size, bits, pcrel, left, ovf, func, name,	  \
+	  inplace, src_mask, dst_mask, pcrel_off), btype, afunc, lname }
+
+#define LOONGARCH_EMPTY_HOWTO(C) \
+  { EMPTY_HOWTO (C), BFD_RELOC_NONE, NULL, NULL }
+
+static bool
+reloc_bits (bfd *abfd, reloc_howto_type *howto, bfd_vma *val);
+static bool
+reloc_sign_bits (bfd *abfd, reloc_howto_type *howto, bfd_vma *fix_val);
+
+static bfd_reloc_status_type
+loongarch_elf_add_sub_reloc (bfd *, arelent *, asymbol *, void *,
+			      asection *, bfd *, char **);
+
+static bfd_reloc_status_type
+loongarch_elf_add_sub_reloc_uleb128 (bfd *, arelent *, asymbol *, void *,
+				      asection *, bfd *, char **);
+
+/* This does not include any relocation information, but should be
+   good enough for GDB or objdump to read the file.  */
+static loongarch_reloc_howto_type loongarch_howto_table[] =
+{
+  /* No relocation.  */
+    LOONGARCH_HOWTO (R_LARCH_NONE,	  /* type (0).  */
+	 0,				  /* rightshift */
+	 0,				  /* size */
+	 0,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_NONE",		  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 0,				  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_NONE,		  /* bfd_reloc_code_real_type */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  /* 32 bit relocation.  */
+  LOONGARCH_HOWTO (R_LARCH_32,		  /* type (1).  */
+	 0,				  /* rightshift */
+	 4,				  /* size */
+	 32,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_32",			  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_32,			  /* bfd_reloc_code_real_type */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  /* 64 bit relocation.  */
+  LOONGARCH_HOWTO (R_LARCH_64,		  /* type (2).  */
+	 0,				  /* rightshift */
+	 8,				  /* size */
+	 64,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_64",			  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_64,			  /* bfd_reloc_code_real_type */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_RELATIVE,	  /* type (3).  */
+	 0,				  /* rightshift */
+	 4,				  /* size */
+	 32,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_RELATIVE",		  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_NONE,		  /* undefined?  */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_COPY,	  /* type (4).  */
+	 0,				  /* rightshift */
+	 0,				  /* this one is variable size */
+	 0,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_bitfield,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_COPY",		  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 0,				  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_NONE,		  /* undefined?  */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_JUMP_SLOT,	  /* type (5).  */
+	 0,				  /* rightshift */
+	 8,				  /* size */
+	 64,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_bitfield,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_JUMP_SLOT",		  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 0,				  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_NONE,		  /* undefined?  */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  /* Dynamic TLS relocations.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_DTPMOD32,  /* type (6).  */
+	 0,				  /* rightshift */
+	 4,				  /* size */
+	 32,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_TLS_DTPMOD32",	  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_DTPMOD32,	  /* bfd_reloc_code_real_type */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DTPMOD64,  /* type (7).  */
+	 0,				  /* rightshift */
+	 8,				  /* size */
+	 64,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_TLS_DTPMOD64",	  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_DTPMOD64,	  /* bfd_reloc_code_real_type */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DTPREL32,  /* type (8). */
+	 0,				  /* rightshift */
+	 4,				  /* size */
+	 32,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_TLS_DTPREL32",	  /* name */
+	 true,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_DTPREL32,	  /* bfd_reloc_code_real_type */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DTPREL64,  /* type (9).  */
+	 0,				  /* rightshift */
+	 8,				  /* size */
+	 64,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_TLS_DTPREL64",	  /* name */
+	 true,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_DTPREL64,	  /* bfd_reloc_code_real_type */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_TPREL32,	  /* type (10).  */
+	 0,				  /* rightshift */
+	 4,				  /* size */
+	 32,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_TLS_TPREL32",		  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_TPREL32,	  /* bfd_reloc_code_real_type */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_TPREL64,	  /* type (11).  */
+	 0,				  /* rightshift */
+	 8,				  /* size */
+	 64,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_TLS_TPREL64",		  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_TPREL64,	  /* bfd_reloc_code_real_type */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_IRELATIVE,	  /* type (12).  */
+	 0,				  /* rightshift */
+	 4,				  /* size */
+	 32,				  /* bitsize */
+	 false,				  /* pc_relative */
+	 0,				  /* bitpos */
+	 complain_overflow_dont,	  /* complain_on_overflow */
+	 bfd_elf_generic_reloc,		  /* special_function */
+	 "R_LARCH_IRELATIVE",		  /* name */
+	 false,				  /* partial_inplace */
+	 0,				  /* src_mask */
+	 ALL_ONES,			  /* dst_mask */
+	 false,				  /* pcrel_offset */
+	 BFD_RELOC_NONE,		  /* undefined?  */
+	 NULL,				  /* adjust_reloc_bits */
+	 NULL),				  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC32,	  /* type (13).  */
+	 0,				  /* rightshift.  */
+	 4,				  /* size.  */
+	 32,				  /* bitsize.  */
+	 false,				  /* pc_relative.  */
+	 0,				  /* bitpos.  */
+	 complain_overflow_dont,	  /* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,		  /* special_function.  */
+	 "R_LARCH_TLS_DESC32",		  /* name.  */
+	 false,				  /* partial_inplace.  */
+	 0,				  /* src_mask.  */
+	 ALL_ONES,		  	  /* dst_mask.  */
+	 false,				  /* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC32,	  /* bfd_reloc_code_real_type.  */
+	 NULL,				  /* adjust_reloc_bits.  */
+	 NULL),				  /* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC64,	  /* type (14).  */
+	 0,				  /* rightshift.  */
+	 4,				  /* size.  */
+	 64,				  /* bitsize.  */
+	 false,				  /* pc_relative.  */
+	 0,				  /* bitpos.  */
+	 complain_overflow_dont,	  /* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,		  /* special_function.  */
+	 "R_LARCH_TLS_DESC64",		  /* name.  */
+	 false,				  /* partial_inplace.  */
+	 0,				  /* src_mask.  */
+	 ALL_ONES,			  /* dst_mask.  */
+	 false,				  /* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC64,	  /* bfd_reloc_code_real_type.  */
+	 NULL,				  /* adjust_reloc_bits.  */
+	 NULL),				  /* larch_reloc_type_name.  */
+
+  LOONGARCH_EMPTY_HOWTO (15),
+  LOONGARCH_EMPTY_HOWTO (16),
+  LOONGARCH_EMPTY_HOWTO (17),
+  LOONGARCH_EMPTY_HOWTO (18),
+  LOONGARCH_EMPTY_HOWTO (19),
+
+  LOONGARCH_HOWTO (R_LARCH_MARK_LA,		/* type (20).  */
+	 0,					/* rightshift.  */
+	 0,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_MARK_LA",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_MARK_LA,		/* bfd_reloc_code_real_type */
+	 NULL,					/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_MARK_PCREL,		/* type (21).  */
+	 0,					/* rightshift.  */
+	 0,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_MARK_PCREL",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_MARK_PCREL,		/* bfd_reloc_code_real_type */
+	 NULL,					/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_PUSH_PCREL,	/* type (22).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 32,					/* bitsize.  */
+	 true /* FIXME: somewhat use this.  */,	/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_SOP_PUSH_PCREL",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0x03ffffff,				/* src_mask.  */
+	 0x03ffffff,				/* dst_mask.  */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_PUSH_PCREL,	/* bfd_reloc_code_real_type */
+	 NULL,					/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  /* type 23-37.  */
+  LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_ABSOLUTE),
+  LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_DUP),
+  LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_GPREL),
+  LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_TLS_TPREL),
+  LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_TLS_GOT),
+  LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_TLS_GD),
+  LOONGARCH_DEFAULT_HOWTO (SOP_PUSH_PLT_PCREL),
+  LOONGARCH_DEFAULT_HOWTO (SOP_ASSERT),
+  LOONGARCH_DEFAULT_HOWTO (SOP_NOT),
+  LOONGARCH_DEFAULT_HOWTO (SOP_SUB),
+  LOONGARCH_DEFAULT_HOWTO (SOP_SL),
+  LOONGARCH_DEFAULT_HOWTO (SOP_SR),
+  LOONGARCH_DEFAULT_HOWTO (SOP_ADD),
+  LOONGARCH_DEFAULT_HOWTO (SOP_AND),
+  LOONGARCH_DEFAULT_HOWTO (SOP_IF_ELSE),
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_10_5,	  /* type (38).  */
+	 0,					  /* rightshift.  */
+	 4,					  /* size.  */
+	 5,					  /* bitsize.  */
+	 false,					  /* pc_relative.  */
+	 10,					  /* bitpos.  */
+	 complain_overflow_signed,		  /* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			  /* special_function.  */
+	 "R_LARCH_SOP_POP_32_S_10_5",		  /* name.  */
+	 false,					  /* partial_inplace.  */
+	 0,					  /* src_mask */
+	 0x7c00,				  /* dst_mask */
+	 false,					  /* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_POP_32_S_10_5,	  /* bfd_reloc_code_real_type */
+	 reloc_bits,				  /* adjust_reloc_bits */
+	 NULL),					  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_U_10_12,	  /* type (39).  */
+	 0,					  /* rightshift.  */
+	 4,					  /* size.  */
+	 12,					  /* bitsize.  */
+	 false,					  /* pc_relative.  */
+	 10,					  /* bitpos.  */
+	 complain_overflow_unsigned,		  /* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			  /* special_function.  */
+	 "R_LARCH_SOP_POP_32_U_10_12",		  /* name.  */
+	 false,					  /* partial_inplace.  */
+	 0,					  /* src_mask */
+	 0x3ffc00,				  /* dst_mask */
+	 false,					  /* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_POP_32_U_10_12,	  /* bfd_reloc_code_real_type */
+	 reloc_bits,				  /* adjust_reloc_bits */
+	 NULL),					  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_10_12,	  /* type (40).  */
+	 0,					  /* rightshift.  */
+	 4,					  /* size.  */
+	 12,					  /* bitsize.  */
+	 false,					  /* pc_relative.  */
+	 10,					  /* bitpos.  */
+	 complain_overflow_signed,		  /* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			  /* special_function.  */
+	 "R_LARCH_SOP_POP_32_S_10_12",		  /* name.  */
+	 false,					  /* partial_inplace.  */
+	 0,					  /* src_mask */
+	 0x3ffc00,				  /* dst_mask */
+	 false,					  /* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_POP_32_S_10_12,	  /* bfd_reloc_code_real_type */
+	 reloc_bits,				  /* adjust_reloc_bits */
+	 NULL),					  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_10_16,	  /* type (41).  */
+	 0,					  /* rightshift.  */
+	 4,					  /* size.  */
+	 16,					  /* bitsize.  */
+	 false,					  /* pc_relative.  */
+	 10,					  /* bitpos.  */
+	 complain_overflow_signed,		  /* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			  /* special_function.  */
+	 "R_LARCH_SOP_POP_32_S_10_16",		  /* name.  */
+	 false,					  /* partial_inplace.  */
+	 0,					  /* src_mask */
+	 0x3fffc00,				  /* dst_mask */
+	 false,					  /* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_POP_32_S_10_16,	  /* bfd_reloc_code_real_type */
+	 reloc_bits,				  /* adjust_reloc_bits */
+	 NULL),					  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_10_16_S2, /* type (42).  */
+	 2,					  /* rightshift.  */
+	 4,					  /* size.  */
+	 16,					  /* bitsize.  */
+	 false,					  /* pc_relative.  */
+	 10,					  /* bitpos.  */
+	 complain_overflow_signed,		  /* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			  /* special_function.  */
+	 "R_LARCH_SOP_POP_32_S_10_16_S2",	  /* name.  */
+	 false,					  /* partial_inplace.  */
+	 0,					  /* src_mask */
+	 0x3fffc00,				  /* dst_mask */
+	 false,					  /* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2,	  /* bfd_reloc_code_real_type */
+	 reloc_sign_bits,			  /* adjust_reloc_bits */
+	 NULL),					  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_5_20,	  /* type (43).  */
+	 0,					  /* rightshift.  */
+	 4,					  /* size.  */
+	 20,					  /* bitsize.  */
+	 false,					  /* pc_relative.  */
+	 5,					  /* bitpos.  */
+	 complain_overflow_signed,		  /* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			  /* special_function.  */
+	 "R_LARCH_SOP_POP_32_S_5_20",		  /* name.  */
+	 false,					  /* partial_inplace.  */
+	 0,					  /* src_mask */
+	 0x1ffffe0,				  /* dst_mask */
+	 false,					  /* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_POP_32_S_5_20,	  /* bfd_reloc_code_real_type */
+	 reloc_bits,				  /* adjust_reloc_bits */
+	 NULL),					  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_0_5_10_16_S2,
+						  /* type (44).  */
+	 2,					  /* rightshift.  */
+	 4,					  /* size.  */
+	 21,					  /* bitsize.  */
+	 false,					  /* pc_relative.  */
+	 0,					  /* bitpos.  */
+	 complain_overflow_signed,		  /* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			  /* special_function.  */
+	 "R_LARCH_SOP_POP_32_S_0_5_10_16_S2",	  /* name.  */
+	 false,					  /* partial_inplace.  */
+	 0xfc0003e0,				  /* src_mask */
+	 0xfc0003e0,				  /* dst_mask */
+	 false,					  /* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2,
+						  /* bfd_reloc_code_real_type */
+	 reloc_sign_bits,			  /* adjust_reloc_bits */
+	 NULL),					  /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_S_0_10_10_16_S2,	/* type (45).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 26,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_SOP_POP_32_S_0_10_10_16_S2",	/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x03ffffff,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_POP_32_S_0_10_10_16_S2,
+						/* bfd_reloc_code_real_type */
+	 reloc_sign_bits,			/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_SOP_POP_32_U,	/* type (46).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 32,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_unsigned,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_SOP_POP_32_S_U",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0xffffffff00000000,			/* src_mask */
+	 0x00000000ffffffff,			/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_SOP_POP_32_U,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  /* 8-bit in-place addition, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_ADD8,		/* type (47).  */
+	 0,					/* rightshift.  */
+	 1,					/* size.  */
+	 8,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_ADD8",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0xff,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_ADD8,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 16-bit in-place addition, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_ADD16,		/* type (48).  */
+	 0,					/* rightshift.  */
+	 2,					/* size.  */
+	 16,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_ADD16",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0xffff,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_ADD16,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 24-bit in-place addition, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_ADD24,		/* type (49).  */
+	 0,					/* rightshift.  */
+	 3,					/* size.  */
+	 24,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_ADD24",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0xffffff,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_ADD24,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 32-bit in-place addition, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_ADD32,		/* type (50).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 32,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_ADD32",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0xffffffff,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_ADD32,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 64-bit in-place addition, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_ADD64,		/* type (51).  */
+	 0,					/* rightshift.  */
+	 8,					/* size.  */
+	 64,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_ADD64",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 ALL_ONES,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_ADD64,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 8-bit in-place subtraction, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_SUB8,		/* type (52).  */
+	 0,					/* rightshift.  */
+	 1,					/* size.  */
+	 8,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_SUB8",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0xff,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_SUB8,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 16-bit in-place subtraction, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_SUB16,		/* type (53).  */
+	 0,					/* rightshift.  */
+	 2,					/* size.  */
+	 16,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_SUB16",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0xffff,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_SUB16,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 24-bit in-place subtraction, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_SUB24,		/* type (54).  */
+	 0,					/* rightshift.  */
+	 3,					/* size.  */
+	 24,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_SUB24",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0xffffff,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_SUB24,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 32-bit in-place subtraction, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_SUB32,		/* type (55).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 32,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_SUB32",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0xffffffff,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_SUB32,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 64-bit in-place subtraction, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_SUB64,		/* type (56).  */
+	 0,					/* rightshift.  */
+	 8,					/* size.  */
+	 64,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_SUB64",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 ALL_ONES,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_SUB64,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_GNU_VTINHERIT,	/* type (57).  */
+	 0,					/* rightshift.  */
+	 0,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_GNU_VTINHERIT",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0,					/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_NONE,			/* bfd_reloc_code_real_type */
+	 NULL,					/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GNU_VTENTRY,		/* type (58).  */
+	 0,					/* rightshift.  */
+	 0,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 NULL,					/* special_function.  */
+	 "R_LARCH_GNU_VTENTRY",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0,					/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_NONE,			/* bfd_reloc_code_real_type */
+	 NULL,					/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  LOONGARCH_EMPTY_HOWTO (59),
+  LOONGARCH_EMPTY_HOWTO (60),
+  LOONGARCH_EMPTY_HOWTO (61),
+  LOONGARCH_EMPTY_HOWTO (62),
+  LOONGARCH_EMPTY_HOWTO (63),
+
+  /* New reloc types.  */
+  LOONGARCH_HOWTO (R_LARCH_B16,			/* type (64).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 16,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_B16",				/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x3fffc00,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_B16,			/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "b16"),				/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_B21,			/* type (65).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 21,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_B21",				/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x3fffc1f,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_B21,			/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "b21"),				/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_B26,			/* type (66).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 26,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_B26",				/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x03ffffff,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_B26,			/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "b26"),				/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_ABS_HI20,		/* type (67).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_ABS_HI20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_ABS_HI20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "abs_hi20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_ABS_LO12,		/* type (68).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_unsigned,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_ABS_LO12",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_ABS_LO12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "abs_lo12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_ABS64_LO20,		/* type (69).  */
+	 32,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_ABS64_LO20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_ABS64_LO20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "abs64_lo20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_ABS64_HI12,		/* type (70).  */
+	 52,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_ABS64_HI12",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_ABS64_HI12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "abs64_hi12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_PCALA_HI20,		/* type (71).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_PCALA_HI20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_PCALA_HI20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "pc_hi20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_PCALA_LO12,		/* type (72).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_PCALA_LO12",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_PCALA_LO12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "pc_lo12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_PCALA64_LO20,	/* type (73).  */
+	 32,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_PCALA64_LO20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_PCALA64_LO20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "pc64_lo20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_PCALA64_HI12,	/* type (74).  */
+	 52,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_PCALA64_HI12",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_PCALA64_HI12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "pc64_hi12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT_PC_HI20,		/* type (75).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_GOT_PC_HI20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_GOT_PC_HI20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "got_pc_hi20"),			/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT_PC_LO12,		/* type (76).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_GOT_PC_LO12",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_GOT_PC_LO12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "got_pc_lo12"),			/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT64_PC_LO20,	/* type (77).  */
+	 32,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_GOT64_PC_LO20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_GOT64_PC_LO20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "got64_pc_lo20"),			/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT64_PC_HI12,	/* type (78).  */
+	 52,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_GOT64_PC_HI12",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_GOT64_PC_HI12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "got64_pc_hi12"),			/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT_HI20,		/* type (79).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_GOT_HI20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_GOT_HI20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "got_hi20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT_LO12,		/* type (80).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_GOT_LO12",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_GOT_LO12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "got_lo12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT64_LO20,		/* type (81).  */
+	 32,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_GOT64_LO20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_GOT64_LO20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "got64_lo20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT64_HI12,		/* type (82).  */
+	 52,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_GOT64_HI12",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_GOT64_HI12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "got64_hi12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LE_HI20,		/* type (83).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LE_HI20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_LE_HI20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "le_hi20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LE_LO12,		/* type (84).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_unsigned,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LE_LO12",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_LE_LO12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "le_lo12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LE64_LO20,	/* type (85).  */
+	 32,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LE64_LO20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_LE64_LO20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "le64_lo20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LE64_HI12,	/* type (86).  */
+	 52,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LE64_HI12",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_LE64_HI12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "le64_hi12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE_PC_HI20,	/* type (87).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_IE_PC_HI20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_IE_PC_HI20,	/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ie_pc_hi20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE_PC_LO12,	/* type (88).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_IE_PC_LO12",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_IE_PC_LO12,	/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ie_pc_lo12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE64_PC_LO20,	/* type (89).  */
+	 32,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_IE64_PC_LO20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_IE64_PC_LO20,	/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ie64_pc_lo20"),			/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE64_PC_HI12,	/* type (90).  */
+	 52,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_IE64_PC_HI12",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_IE64_PC_HI12,	/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ie64_pc_hi12"),			/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE_HI20,		/* type (91).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_IE_HI20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_IE_HI20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ie_hi20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE_LO12,		/* type (92).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_IE_LO12",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_IE_LO12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ie_lo12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE64_LO20,	/* type (93).  */
+	 32,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_IE64_LO20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_IE64_LO20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ie64_lo20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE64_HI12,	/* type (94).  */
+	 52,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_IE64_HI12",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x3ffc00,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_IE64_HI12,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ie64_hi12"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LD_PC_HI20,	/* type (95).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LD_PC_HI20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_LD_PC_HI20,	/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ld_pc_hi20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LD_HI20,		/* type (96).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LD_HI20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_LD_HI20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "ld_hi20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_GD_PC_HI20,	/* type (97).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_GD_PC_HI20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_GD_PC_HI20,	/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "gd_pc_hi20"),				/* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_GD_HI20,		/* type (98).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_GD_HI20",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0x1ffffe0,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_TLS_GD_HI20,		/* bfd_reloc_code_real_type */
+	 reloc_bits,				/* adjust_reloc_bits */
+	 "gd_hi20"),				/* larch_reloc_type_name */
+
+  /* 32-bit PC relative.  */
+  LOONGARCH_HOWTO (R_LARCH_32_PCREL,		/* type (99).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 32,					/* bitsize.  */
+	 true,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_32_PCREL",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0xffffffff,				/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_32_PCREL,		/* bfd_reloc_code_real_type */
+	 NULL,					/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  /* The paired relocation may be relaxed.  */
+  LOONGARCH_HOWTO (R_LARCH_RELAX,		/* type (100).  */
+	 0,					/* rightshift */
+	 1,					/* size */
+	 0,					/* bitsize */
+	 false,					/* pc_relative */
+	 0,					/* bitpos */
+	 complain_overflow_dont,		/* complain_on_overflow */
+	 bfd_elf_generic_reloc,			/* special_function */
+	 "R_LARCH_RELAX",			/* name */
+	 false,					/* partial_inplace */
+	 0,					/* src_mask */
+	 0,					/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_RELAX,			/* bfd_reloc_code_real_type */
+	 NULL,					/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  /* Delete relaxed instruction.  */
+  LOONGARCH_HOWTO (R_LARCH_DELETE,		/* type (101).  */
+	 0,					/* rightshift.  */
+	 0,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_DELETE",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_DELETE,		/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* Indicates an alignment statement. f the symbol index is 0,
+     the addend indicates the number of bytes occupied by nop instructions
+     at the relocation offset. The alignment boundary is specified by the
+     addend rounded up to the next power of two.
+     If the symbol index is not 0, the addend indicates the first and third
+     expressions of .align. The lowest 8 bits are used to represent the first
+     expression, other bits are used to represent the third expression.  */
+  LOONGARCH_HOWTO (R_LARCH_ALIGN,		/* type (102).  */
+	 0,					/* rightshift.  */
+	 0,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_ALIGN",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_ALIGN,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* For pcaddi and pcala_hi20 + pcala_lo12 can relax to pcrel_20.  */
+  LOONGARCH_HOWTO (R_LARCH_PCREL20_S2,		/* type (103).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_PCREL20_S2",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_PCREL20_S2,		/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "pcrel_20"),				/* larch_reloc_type_name.  */
+
+  /* Canonical Frame Address.  */
+  LOONGARCH_HOWTO (R_LARCH_CFA,			/* type (104).  */
+	 0,					/* rightshift.  */
+	 0,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_CFA",				/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_CFA,			/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 6-bit in-place addition, for local label subtraction
+     to calculate DW_CFA_advance_loc.  */
+  LOONGARCH_HOWTO (R_LARCH_ADD6,		/* type (105).  */
+	 0,					/* rightshift.  */
+	 1,					/* size.  */
+	 8,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_ADD6",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x3f,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_ADD6,			/* bfd_reloc_code_real_type.  */
+	 reloc_bits,				/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 6-bit in-place subtraction, for local label subtraction
+     to calculate DW_CFA_advance_loc.  */
+  LOONGARCH_HOWTO (R_LARCH_SUB6,		/* type (106).  */
+	 0,					/* rightshift.  */
+	 1,					/* size.  */
+	 8,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc,		/* special_function.  */
+	 "R_LARCH_SUB6",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x3f,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_SUB6,			/* bfd_reloc_code_real_type.  */
+	 reloc_bits,				/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* The length of unsigned-leb128 is variable, just assume the
+     size is one byte here.
+     uleb128 in-place addition, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_ADD_ULEB128,		/* type (107).  */
+	 0,					/* rightshift.  */
+	 1,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc_uleb128,	/* special_function.  */
+	 "R_LARCH_ADD_ULEB128",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_ADD_ULEB128,		/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* The length of unsigned-leb128 is variable, just assume the
+     size is one byte here.
+     uleb128 in-place subtraction, for local label subtraction.  */
+  LOONGARCH_HOWTO (R_LARCH_SUB_ULEB128,		/* type (108).  */
+	 0,					/* rightshift.  */
+	 1,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 loongarch_elf_add_sub_reloc_uleb128,	/* special_function.  */
+	 "R_LARCH_SUB_ULEB128",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_SUB_ULEB128,		/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 NULL),					/* larch_reloc_type_name.  */
+
+  /* 64-bit PC relative.  */
+  LOONGARCH_HOWTO (R_LARCH_64_PCREL,		/* type (109).  */
+	 0,					/* rightshift.  */
+	 8,					/* size.  */
+	 64,					/* bitsize.  */
+	 true,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_64_PCREL",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask */
+	 0xffffffffffffffff,			/* dst_mask */
+	 false,					/* pcrel_offset */
+	 BFD_RELOC_LARCH_64_PCREL,		/* bfd_reloc_code_real_type */
+	 NULL,					/* adjust_reloc_bits */
+	 NULL),					/* larch_reloc_type_name */
+
+  /* Used for medium code model function call pcaddu18i+jirl,
+     these two instructions must adjacent.  */
+  LOONGARCH_HOWTO (R_LARCH_CALL36,		/* type (110).  */
+	 2,					/* rightshift.  */
+	 8,					/* size.  */
+	 36,					/* bitsize.  */
+	 true,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_CALL36",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x03fffc0001ffffe0,			/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_CALL36,		/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "call36"),				/* larch_reloc_type_name.  */
+
+  /* TLS_DESC PCREL.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_PC_HI20,	/* type (111).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 true,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_DESC_PC_HI20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC_PC_HI20,	/* bfd_reloc_code_real_type.  */
+	 reloc_bits,				/* adjust_reloc_bits.  */
+	 "desc_pc_hi20"),			/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_PC_LO12,	/* type (112).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 true,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_DESC_PC_LO12",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x3ffc00,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC_PC_LO12,	/* bfd_reloc_code_real_type.  */
+	 reloc_bits,				/* adjust_reloc_bits.  */
+	 "desc_pc_lo12"),			/* larch_reloc_type_name.  */
+
+  /* TLS_DESC64 LARGE PCREL.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC64_PC_LO20, /* type (113).  */
+	32,				       /* rightshift.  */
+	8,				       /* size.  */
+	20,				       /* bitsize.  */
+	true,				       /* pc_relative.  */
+	5,				       /* bitpos.  */
+	complain_overflow_signed,	       /* complain_on_overflow.  */
+	bfd_elf_generic_reloc,		       /* special_function.  */
+	"R_LARCH_TLS_DESC64_PC_LO20",	       /* name.  */
+	false,				       /* partial_inplace.  */
+	0,				       /* src_mask.  */
+	0x1ffffe0,			       /* dst_mask.  */
+	false,				       /* pcrel_offset.  */
+	BFD_RELOC_LARCH_TLS_DESC64_PC_LO20,    /* bfd_reloc_code_real_type.  */
+	reloc_bits,			       /* adjust_reloc_bits.  */
+	"desc64_pc_lo20"),		       /* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC64_PC_HI12, /* type (114).  */
+	52,				       /* rightshift.  */
+	8,				       /* size.  */
+	12,				       /* bitsize.  */
+	true,				       /* pc_relative.  */
+	10,				       /* bitpos.  */
+	complain_overflow_signed,	       /* complain_on_overflow.  */
+	bfd_elf_generic_reloc,		       /* special_function.  */
+	"R_LARCH_TLS_DESC64_PC_HI12",	       /* name.  */
+	false,				       /* partial_inplace.  */
+	0,				       /* src_mask.  */
+	0x3ffc00,			       /* dst_mask.  */
+	false,				       /* pcrel_offset.  */
+	BFD_RELOC_LARCH_TLS_DESC64_PC_HI12,    /* bfd_reloc_code_real_type.  */
+	reloc_bits,			       /* adjust_reloc_bits.  */
+	"desc64_pc_hi12"),		       /* larch_reloc_type_name.  */
+
+  /* TLS_DESC ABS.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_HI20,	/* type (115).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_DESC_HI20",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC_HI20,		/* bfd_reloc_code_real_type.  */
+	 reloc_bits,				/* adjust_reloc_bits.  */
+	 "desc_hi20"),				/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_LO12,	/* type (116).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_DESC_LO12",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x3ffc00,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC_LO12,		/* bfd_reloc_code_real_type.  */
+	 reloc_bits,				/* adjust_reloc_bits.  */
+	 "desc_lo12"),				/* larch_reloc_type_name.  */
+
+  /* TLS_DESC64 LARGE ABS.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC64_LO20,    /* type (117).  */
+	32,				       /* rightshift.  */
+	8,				       /* size.  */
+	20,				       /* bitsize.  */
+	false,				       /* pc_relative.  */
+	5,				       /* bitpos.  */
+	complain_overflow_signed,	       /* complain_on_overflow.  */
+	bfd_elf_generic_reloc,		       /* special_function.  */
+	"R_LARCH_TLS_DESC64_LO20",	       /* name.  */
+	false,				       /* partial_inplace.  */
+	0,				       /* src_mask.  */
+	0x1ffffe0,			       /* dst_mask.  */
+	false,				       /* pcrel_offset.  */
+	BFD_RELOC_LARCH_TLS_DESC64_LO20,       /* bfd_reloc_code_real_type.  */
+	reloc_bits,			       /* adjust_reloc_bits.  */
+	"desc64_lo20"),			       /* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC64_HI12,    /* type (118).  */
+	52,				       /* rightshift.  */
+	8,				       /* size.  */
+	12,				       /* bitsize.  */
+	false,				       /* pc_relative.  */
+	10,				       /* bitpos.  */
+	complain_overflow_signed,	       /* complain_on_overflow.  */
+	bfd_elf_generic_reloc,		       /* special_function.  */
+	"R_LARCH_TLS_DESC64_HI12",	       /* name.  */
+	false,				       /* partial_inplace.  */
+	0,				       /* src_mask.  */
+	0x3ffc00,			       /* dst_mask.  */
+	false,				       /* pcrel_offset.  */
+	BFD_RELOC_LARCH_TLS_DESC64_HI12,       /* bfd_reloc_code_real_type.  */
+	reloc_bits,			       /* adjust_reloc_bits.  */
+	"desc64_hi12"),			       /* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_LD,		/* type (119).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 0,					/* bitsize.  */
+	 true,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_DESC_LD",			/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC_LD,		/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 "desc_ld"),				/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_CALL,	/* type (120).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_DESC_CALL",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC_CALL,		/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 "desc_call"),				/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LE_HI20_R,	/* type (121).  */
+	 12,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LE_HI20_R",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_LE_HI20_R,		/* bfd_reloc_code_real_type.  */
+	 reloc_bits,				/* adjust_reloc_bits.  */
+	 "le_hi20_r"),				/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LE_ADD_R,	/* type (122).  */
+	 0,					/* rightshift.  */
+	 0,					/* size.  */
+	 0,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 0,					/* bitpos.  */
+	 complain_overflow_dont,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LE_ADD_R",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0,					/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_LE_ADD_R,		/* bfd_reloc_code_real_type.  */
+	 NULL,					/* adjust_reloc_bits.  */
+	 "le_add_r"),				/* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LE_LO12_R,	/* type (123).  */
+	 0,					/* rightshift.  */
+	 4,					/* size.  */
+	 12,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 10,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LE_LO12_R",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x3ffc00,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_LE_LO12_R,		/* bfd_reloc_code_real_type.  */
+	 reloc_bits,				/* adjust_reloc_bits.  */
+	 "le_lo12_r"),				/* larch_reloc_type_name.  */
+
+  /* For pcaddi, ld_pc_hi20 + ld_pc_lo12 can relax to ld_pcrel20_s2.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_LD_PCREL20_S2,	/* type (124).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LD_PCREL20_S2",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 true,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_LD_PCREL20_S2,	/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "ld_pcrel_20"),			/* larch_reloc_type_name.  */
+
+  /* For pcaddi, gd_pc_hi20 + gd_pc_lo12 can relax to gd_pcrel20_s2.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_GD_PCREL20_S2,	/* type (125).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_GD_PCREL20_S2",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 true,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_GD_PCREL20_S2,	/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "gd_pcrel_20"),			/* larch_reloc_type_name.  */
+
+  /* For pcaddi, desc_pc_hi20 + desc_pc_lo12 can relax to desc_pcrel20_s2.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_PCREL20_S2,	/* type (126).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_DESC_PCREL20_S2",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 true,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2,	/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "desc_pcrel_20"),			/* larch_reloc_type_name.  */
+};
+
+reloc_howto_type *
+loongarch_elf_rtype_to_howto (bfd *abfd, unsigned int r_type)
+{
+  if (r_type < R_LARCH_count)
+    {
+      BFD_ASSERT (ARRAY_SIZE (loongarch_howto_table) == R_LARCH_count);
+      BFD_ASSERT (loongarch_howto_table[r_type].howto.type == r_type);
+      return &loongarch_howto_table[r_type].howto;
+    }
+
+  (*_bfd_error_handler) (_("%pB: unsupported relocation type %#x"),
+			 abfd, r_type);
+  bfd_set_error (bfd_error_bad_value);
+  return NULL;
+}
+
+reloc_howto_type *
+loongarch_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+  for (size_t i = 0; i < ARRAY_SIZE (loongarch_howto_table); i++)
+    if (loongarch_howto_table[i].howto.name
+	&& strcasecmp (loongarch_howto_table[i].howto.name, r_name) == 0)
+      return &loongarch_howto_table[i].howto;
+
+  (*_bfd_error_handler) (_("%pB: unsupported relocation type %s"),
+			 abfd, r_name);
+  bfd_set_error (bfd_error_bad_value);
+  return NULL;
+}
+
+/* Cost so much.  */
+reloc_howto_type *
+loongarch_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			     bfd_reloc_code_real_type code)
+{
+  BFD_ASSERT (ARRAY_SIZE (loongarch_howto_table) == R_LARCH_count);
+
+  /* Fast search for new reloc types.  */
+  if (BFD_RELOC_LARCH_B16 <= code && code < BFD_RELOC_LARCH_RELAX)
+    {
+      BFD_ASSERT (BFD_RELOC_LARCH_RELAX - BFD_RELOC_LARCH_B16
+		  == R_LARCH_RELAX - R_LARCH_B16);
+      loongarch_reloc_howto_type *ht;
+      ht = &loongarch_howto_table[code - BFD_RELOC_LARCH_B16 + R_LARCH_B16];
+      BFD_ASSERT (ht->bfd_type == code);
+      return &ht->howto;
+    }
+
+  for (size_t i = 0; i < ARRAY_SIZE (loongarch_howto_table); i++)
+    if (loongarch_howto_table[i].bfd_type == code)
+      return &loongarch_howto_table[i].howto;
+
+  (*_bfd_error_handler) (_("%pB: unsupported bfd relocation type %#x"),
+			 abfd, code);
+  bfd_set_error (bfd_error_bad_value);
+  return NULL;
+}
+
+bfd_reloc_code_real_type
+loongarch_larch_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+				   const char *l_r_name)
+{
+  for (size_t i = 0; i < ARRAY_SIZE (loongarch_howto_table); i++)
+    {
+      loongarch_reloc_howto_type *lht = &loongarch_howto_table[i];
+      if ((NULL != lht->larch_reloc_type_name)
+	  && (0 == strcmp (lht->larch_reloc_type_name, l_r_name)))
+	return lht->bfd_type;
+    }
+
+  return BFD_RELOC_NONE;
+}
+
+
+/* Functions for reloc bits field.
+   1.  Signed extend *fix_val.
+   2.  Return false if overflow.  */
+
+#define LARCH_RELOC_BFD_VMA_BIT_MASK(bitsize) \
+  (~((((bfd_vma)0x1) << (bitsize)) - 1))
+
+/* Adjust val to perform insn
+   BFD_RELOC_LARCH_SOP_POP_32_S_10_5
+   BFD_RELOC_LARCH_SOP_POP_32_S_10_12
+   BFD_RELOC_LARCH_SOP_POP_32_U_10_12
+   BFD_RELOC_LARCH_SOP_POP_32_S_10_16
+   BFD_RELOC_LARCH_SOP_POP_32_S_5_20
+   BFD_RELOC_LARCH_SOP_POP_32_U.  */
+
+static bool
+reloc_bits (bfd *abfd ATTRIBUTE_UNUSED,
+	    reloc_howto_type *howto,
+	    bfd_vma *fix_val)
+{
+  bfd_signed_vma val = (bfd_signed_vma)(*fix_val);
+  bfd_signed_vma mask = ((bfd_signed_vma)0x1 << howto->bitsize) - 1;
+
+  val = val >> howto->rightshift;
+
+  /* Perform insn bits field.  */
+  val = val & mask;
+  val <<= howto->bitpos;
+
+  *fix_val = (bfd_vma)val;
+
+  return true;
+}
+
+static bool
+reloc_sign_bits (bfd *abfd, reloc_howto_type *howto, bfd_vma *fix_val)
+{
+  if (howto->complain_on_overflow != complain_overflow_signed)
+    return false;
+
+  bfd_signed_vma val = (bfd_signed_vma)(*fix_val);
+
+  /* Check alignment. FIXME: if rightshift is not alingment.  */
+  if (howto->rightshift
+      && (val & ((((bfd_signed_vma) 1) << howto->rightshift) - 1)))
+    {
+      /* The as passes NULL casued internal error, so it can not use _bfd_error_handler
+	 output details, ld is not affected.  */
+      if (abfd != NULL)
+	{
+	  (*_bfd_error_handler) (_("%pB: relocation %s right shift %d error 0x%lx"),
+				 abfd, howto->name, howto->rightshift, (long) val);
+	  bfd_set_error (bfd_error_bad_value);
+	}
+      return false;
+    }
+
+  bfd_signed_vma mask = ((bfd_signed_vma)0x1 << (howto->bitsize
+			  + howto->rightshift - 1)) - 1;
+
+  /* Positive number: high part is all 0;
+     Negative number: if high part is not all 0, high part must be all 1.
+     high part: from sign bit to highest bit.  */
+  if ((val & ~mask) && ((val & ~mask) != ~mask))
+    {
+      /* The as passes NULL casued internal error, so it can not use _bfd_error_handler
+	 output details, ld is not affected.  */
+      if (abfd != NULL)
+	{
+	  (*_bfd_error_handler) (_("%pB: relocation %s overflow 0x%lx"),
+				 abfd, howto->name, (long) val);
+	  bfd_set_error (bfd_error_bad_value);
+	}
+      return false;
+    }
+
+  val = val >> howto->rightshift;
+  /* can delete? */
+  mask = ((bfd_signed_vma)0x1 << howto->bitsize) - 1;
+  val = val & mask;
+
+  switch (howto->type)
+    {
+    case R_LARCH_SOP_POP_32_S_0_10_10_16_S2:
+    case R_LARCH_B26:
+      /* Perform insn bits field. 15:0<<10, 25:16>>16.  */
+      val = ((val & 0xffff) << 10) | ((val >> 16) & 0x3ff);
+      break;
+    case R_LARCH_SOP_POP_32_S_0_5_10_16_S2:
+    case R_LARCH_B21:
+      /* Perform insn bits field. 15:0<<10, 20:16>>16.  */
+      val = ((val & 0xffff) << 10) | ((val >> 16) & 0x1f);
+      break;
+    case R_LARCH_CALL36:
+      /* 0x8000: If low 16-bit immediate greater than 0x7fff,
+	 it become to a negative number due to sign-extended,
+	 so the high part need to add 0x8000.  */
+      val = (((val + 0x8000) >> 16) << 5) | (((val & 0xffff) << 10) << 32);
+      break;
+    default:
+      val <<= howto->bitpos;
+      break;
+    }
+
+  *fix_val = val;
+  return true;
+}
+
+bool
+loongarch_adjust_reloc_bitsfield (bfd *abfd, reloc_howto_type *howto,
+				  bfd_vma *fix_val)
+{
+  BFD_ASSERT (((loongarch_reloc_howto_type *)howto)->adjust_reloc_bits);
+  return ((loongarch_reloc_howto_type *)
+	  howto)->adjust_reloc_bits (abfd, howto, fix_val);
+}
+
+static bfd_reloc_status_type
+loongarch_elf_add_sub_reloc (bfd *abfd,
+	       arelent *reloc_entry,
+	       asymbol *symbol,
+	       void *data,
+	       asection *input_section,
+	       bfd *output_bfd,
+	       char **error_message ATTRIBUTE_UNUSED)
+{
+  reloc_howto_type *howto = reloc_entry->howto;
+  bfd_vma relocation;
+
+  if (output_bfd != NULL
+      && (symbol->flags & BSF_SECTION_SYM) == 0
+      && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
+    {
+      reloc_entry->address += input_section->output_offset;
+      return bfd_reloc_ok;
+    }
+
+  if (output_bfd != NULL)
+    return bfd_reloc_continue;
+
+  relocation = symbol->value + symbol->section->output_section->vma
+    + symbol->section->output_offset + reloc_entry->addend;
+
+  bfd_size_type octets = reloc_entry->address
+    * bfd_octets_per_byte (abfd, input_section);
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, octets))
+    return bfd_reloc_outofrange;
+
+  bfd_vma old_value = bfd_get (howto->bitsize, abfd,
+			       data + reloc_entry->address);
+
+  switch (howto->type)
+    {
+    case R_LARCH_ADD6:
+    case R_LARCH_ADD8:
+    case R_LARCH_ADD16:
+    case R_LARCH_ADD32:
+    case R_LARCH_ADD64:
+      relocation = old_value + relocation;
+      break;
+
+    case R_LARCH_SUB6:
+    case R_LARCH_SUB8:
+    case R_LARCH_SUB16:
+    case R_LARCH_SUB32:
+    case R_LARCH_SUB64:
+      relocation = old_value - relocation;
+      break;
+    }
+
+  bfd_put (howto->bitsize, abfd, relocation, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+loongarch_elf_add_sub_reloc_uleb128 (bfd *abfd,
+	       arelent *reloc_entry,
+	       asymbol *symbol,
+	       void *data,
+	       asection *input_section,
+	       bfd *output_bfd,
+	       char **error_message ATTRIBUTE_UNUSED)
+{
+  reloc_howto_type *howto = reloc_entry->howto;
+  bfd_vma relocation;
+
+ if (output_bfd != NULL
+     && (symbol->flags & BSF_SECTION_SYM) == 0
+     && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
+   {
+     reloc_entry->address += input_section->output_offset;
+     return bfd_reloc_ok;
+   }
+
+  if (output_bfd != NULL)
+    return bfd_reloc_continue;
+
+  relocation = symbol->value + symbol->section->output_section->vma
+    + symbol->section->output_offset + reloc_entry->addend;
+
+  bfd_size_type octets = reloc_entry->address
+    * bfd_octets_per_byte (abfd, input_section);
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, octets))
+    return bfd_reloc_outofrange;
+
+  unsigned int len = 0;
+  bfd_byte *p = data + reloc_entry->address;
+  bfd_vma old_value = _bfd_read_unsigned_leb128 (abfd, p, &len);
+
+  switch (howto->type)
+    {
+    case R_LARCH_ADD_ULEB128:
+      relocation = old_value + relocation;
+      break;
+
+    case R_LARCH_SUB_ULEB128:
+      relocation = old_value - relocation;
+      break;
+    }
+
+  bfd_vma mask = (1 << (7 * len)) - 1;
+  relocation = relocation & mask;
+  loongarch_write_unsigned_leb128 (p, len, relocation);
+  return bfd_reloc_ok;
+}
+
+/* Write VALUE in uleb128 format to P.
+   LEN is the uleb128 value length.
+   Return a pointer to the byte following the last byte that was written.  */
+bfd_byte *
+loongarch_write_unsigned_leb128 (bfd_byte *p, unsigned int len, bfd_vma value)
+{
+  bfd_byte c;
+  do
+    {
+      c = value & 0x7f;
+      if (len > 1)
+	c |= 0x80;
+      *(p++) = c;
+      value >>= 7;
+      len--;
+    }
+  while (len);
+  return p;
+}
+
+int loongarch_get_uleb128_length (bfd_byte *buf)
+{
+  unsigned int len = 0;
+  _bfd_read_unsigned_leb128 (NULL, buf, &len);
+  return len;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-loongarch.h ./bfd/elfxx-loongarch.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-loongarch.h	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elfxx-loongarch.h	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,55 @@
+/* LoongArch-specific backend routines.
+   Copyright (C) 2021-2024 Free Software Foundation, Inc.
+   Contributed by Loongson Ltd.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+#include "elf/common.h"
+#include "elf/internal.h"
+
+extern reloc_howto_type *
+loongarch_elf_rtype_to_howto (bfd *abfd, unsigned int r_type);
+
+extern reloc_howto_type *
+loongarch_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code);
+
+extern reloc_howto_type *
+loongarch_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name);
+
+extern bfd_reloc_code_real_type
+loongarch_larch_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+				   const char *l_r_name);
+
+bool
+loongarch_adjust_reloc_bitsfield (bfd *, reloc_howto_type *, bfd_vma *);
+void
+bfd_elf32_loongarch_set_data_segment_info (struct bfd_link_info *, int *);
+void
+bfd_elf64_loongarch_set_data_segment_info (struct bfd_link_info *, int *);
+
+bfd_byte *
+loongarch_write_unsigned_leb128 (bfd_byte *p, unsigned int len, bfd_vma value);
+
+int loongarch_get_uleb128_length (bfd_byte *buf);
+
+/* TRUE if this is a PLT reference to a local IFUNC.  */
+#define PLT_LOCAL_IFUNC_P(INFO, H) \
+  ((H)->dynindx == -1 \
+   || ((bfd_link_executable (INFO) \
+	|| ELF_ST_VISIBILITY ((H)->other) != STV_DEFAULT) \
+	&& (H)->def_regular \
+	&& (H)->type == STT_GNU_IFUNC))
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-mips.c ./bfd/elfxx-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-mips.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-mips.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS-specific support for ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    Most of the information added by Ian Lance Taylor, Cygnus Support,
    <ian@cygnus.com>.
@@ -442,37 +442,34 @@ struct mips_elf_link_hash_table
 
   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
-  bfd_boolean use_rld_obj_head;
+  bool use_rld_obj_head;
 
   /* The  __rld_map or __rld_obj_head symbol. */
   struct elf_link_hash_entry *rld_symbol;
 
   /* This is set if we see any mips16 stub sections.  */
-  bfd_boolean mips16_stubs_seen;
+  bool mips16_stubs_seen;
 
   /* True if we can generate copy relocs and PLTs.  */
-  bfd_boolean use_plts_and_copy_relocs;
+  bool use_plts_and_copy_relocs;
 
   /* True if we can only use 32-bit microMIPS instructions.  */
-  bfd_boolean insn32;
+  bool insn32;
 
   /* True if we suppress checks for invalid branches between ISA modes.  */
-  bfd_boolean ignore_branch_isa;
+  bool ignore_branch_isa;
 
   /* True if we are targetting R6 compact branches.  */
-  bfd_boolean compact_branches;
-
-  /* True if we're generating code for VxWorks.  */
-  bfd_boolean is_vxworks;
+  bool compact_branches;
 
   /* True if we already reported the small-data section overflow.  */
-  bfd_boolean small_data_overflow_reported;
+  bool small_data_overflow_reported;
 
   /* True if we use the special `__gnu_absolute_zero' symbol.  */
-  bfd_boolean use_absolute_zero;
+  bool use_absolute_zero;
 
   /* True if we have been configured for a GNU target.  */
-  bfd_boolean gnu_target;
+  bool gnu_target;
 
   /* Shortcuts to some dynamic sections, or NULL if they are not
      being used.  */
@@ -530,9 +527,6 @@ struct mips_elf_link_hash_table
      returns null.  */
   asection *(*add_stub_section) (const char *, asection *, asection *);
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* Is the PLT header compressed?  */
   unsigned int plt_header_is_comp : 1;
 };
@@ -540,8 +534,9 @@ struct mips_elf_link_hash_table
 /* Get the MIPS ELF linker hash table from a link_info structure.  */
 
 #define mips_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == MIPS_ELF_DATA)		\
+   ? (struct mips_elf_link_hash_table *) (p)->hash : NULL)
 
 /* A structure used to communicate with htab_traverse callbacks.  */
 struct mips_htab_traverse_info
@@ -551,7 +546,20 @@ struct mips_htab_traverse_info
   bfd *output_bfd;
 
   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
-  bfd_boolean error;
+  bool error;
+};
+
+/* Used to store a REL high-part relocation such as R_MIPS_HI16 or
+   R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
+   that contains the relocation field and DATA points to the start of
+   INPUT_SECTION.  */
+
+struct mips_hi16
+{
+  struct mips_hi16 *next;
+  bfd_byte *data;
+  asection *input_section;
+  arelent rel;
 };
 
 /* MIPS ELF private object data.  */
@@ -569,7 +577,7 @@ struct mips_elf_obj_tdata
 
   /* The abiflags for this object.  */
   Elf_Internal_ABIFlags_v0 abiflags;
-  bfd_boolean abiflags_valid;
+  bool abiflags_valid;
 
   /* The GOT requirements of input bfds.  */
   struct mips_got_info *got;
@@ -589,6 +597,8 @@ struct mips_elf_obj_tdata
   asymbol *elf_text_symbol;
   asection *elf_data_section;
   asection *elf_text_section;
+
+  struct mips_hi16 *mips_hi16_list;
 };
 
 /* Get MIPS ELF private object data from BFD's tdata.  */
@@ -633,7 +643,7 @@ struct extsym_info
   struct bfd_link_info *info;
   struct ecoff_debug_info *debug;
   const struct ecoff_debug_swap *swap;
-  bfd_boolean failed;
+  bool failed;
 };
 
 /* The names of the runtime procedure table symbols used on IRIX5.  */
@@ -703,13 +713,13 @@ typedef struct
 
 /* These are the constants used to swap the bitfields in a crinfo.  */
 
-#define CRINFO_CTYPE (0x1)
+#define CRINFO_CTYPE (0x1U)
 #define CRINFO_CTYPE_SH (31)
-#define CRINFO_RTYPE (0xf)
+#define CRINFO_RTYPE (0xfU)
 #define CRINFO_RTYPE_SH (27)
-#define CRINFO_DIST2TO (0xff)
+#define CRINFO_DIST2TO (0xffU)
 #define CRINFO_DIST2TO_SH (19)
-#define CRINFO_RELVADDR (0x7ffff)
+#define CRINFO_RELVADDR (0x7ffffU)
 #define CRINFO_RELVADDR_SH (0)
 
 /* A compact relocation info has long (3 words) or short (2 words)
@@ -760,11 +770,11 @@ typedef struct runtime_pdr {
 static struct mips_got_entry *mips_elf_create_local_got_entry
   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
    struct mips_elf_link_hash_entry *, int);
-static bfd_boolean mips_elf_sort_hash_table_f
+static bool mips_elf_sort_hash_table_f
   (struct mips_elf_link_hash_entry *, void *);
 static bfd_vma mips_elf_high
   (bfd_vma);
-static bfd_boolean mips_elf_create_dynamic_relocation
+static bool mips_elf_create_dynamic_relocation
   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
    bfd_vma *, asection *);
@@ -777,14 +787,14 @@ static bfd *reldyn_sorting_bfd;
 /* True if ABFD is for CPUs with load interlocking that include
    non-MIPS1 CPUs and R3900.  */
 #define LOAD_INTERLOCKS_P(abfd) \
-  (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
-   || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
+  (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != EF_MIPS_ARCH_1) \
+   || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == EF_MIPS_MACH_3900))
 
 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
    This should be safe for all architectures.  We enable this predicate
    for RM9000 for now.  */
 #define JAL_TO_BAL_P(abfd) \
-  ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
+  ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == EF_MIPS_MACH_9000)
 
 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
    This should be safe for all architectures.  We enable this predicate for
@@ -802,7 +812,7 @@ static bfd *reldyn_sorting_bfd;
 
 /* Nonzero if ABFD is using the O32 ABI.  */
 #define ABI_O32_P(abfd) \
-  ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
+  ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == EF_MIPS_ABI_O32)
 
 /* Nonzero if ABFD is using the N32 ABI.  */
 #define ABI_N32_P(abfd) \
@@ -821,8 +831,8 @@ static bfd *reldyn_sorting_bfd;
 
 /* Nonzero if ABFD is MIPS R6.  */
 #define MIPSR6_P(abfd) \
-  ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
-    || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
+  ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_32R6 \
+    || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_64R6)
 
 /* The IRIX compatibility level we are striving for.  */
 #define IRIX_COMPAT(abfd) \
@@ -904,7 +914,8 @@ static bfd *reldyn_sorting_bfd;
 
 /* The name of the dynamic relocation section.  */
 #define MIPS_ELF_REL_DYN_NAME(INFO) \
-  (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
+  (mips_elf_hash_table (INFO)->root.target_os == is_vxworks \
+   ? ".rela.dyn" : ".rel.dyn")
 
 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
    from smaller values.  Start with zero, widen, *then* decrement.  */
@@ -919,7 +930,8 @@ static bfd *reldyn_sorting_bfd;
 
 /* The offset of $gp from the beginning of the .got section.  */
 #define ELF_MIPS_GP_OFFSET(INFO) \
-  (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
+  (mips_elf_hash_table (INFO)->root.target_os == is_vxworks \
+   ? 0x0 : 0x7ff0)
 
 /* The maximum size of the GOT for it to be addressable using 16-bit
    offsets from $gp.  */
@@ -1033,9 +1045,9 @@ static bfd *reldyn_sorting_bfd;
 #define CALL_STUB ".mips16.call."
 #define CALL_FP_STUB ".mips16.call.fp."
 
-#define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
-#define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
-#define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
+#define FN_STUB_P(name) startswith (name, FN_STUB)
+#define CALL_STUB_P(name) startswith (name, CALL_STUB)
+#define CALL_FP_STUB_P(name) startswith (name, CALL_FP_STUB)
 
 /* The format of the first PLT entry in an O32 executable.  */
 static const bfd_vma mips_o32_exec_plt0_entry[] =
@@ -1285,7 +1297,7 @@ bfd_get_micromips_32 (const bfd *abfd, c
 #define mips_elf_link_hash_traverse(table, func, info)			\
   (elf_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Find the base offsets for thread-local storage in this object,
@@ -1346,14 +1358,14 @@ mips_elf_link_hash_newfunc (struct bfd_h
       ret->call_fp_stub = NULL;
       ret->mipsxhash_loc = 0;
       ret->global_got_area = GGA_NONE;
-      ret->got_only_for_calls = TRUE;
-      ret->readonly_reloc = FALSE;
-      ret->has_static_relocs = FALSE;
-      ret->no_fn_stub = FALSE;
-      ret->need_fn_stub = FALSE;
-      ret->has_nonpic_branches = FALSE;
-      ret->needs_lazy_stub = FALSE;
-      ret->use_plt_entry = FALSE;
+      ret->got_only_for_calls = true;
+      ret->readonly_reloc = false;
+      ret->has_static_relocs = false;
+      ret->no_fn_stub = false;
+      ret->need_fn_stub = false;
+      ret->has_nonpic_branches = false;
+      ret->needs_lazy_stub = false;
+      ret->use_plt_entry = false;
     }
 
   return (struct bfd_hash_entry *) ret;
@@ -1361,24 +1373,55 @@ mips_elf_link_hash_newfunc (struct bfd_h
 
 /* Allocate MIPS ELF private object data.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
 				  MIPS_ELF_DATA);
 }
 
-bfd_boolean
+/* MIPS ELF uses a special find_nearest_line routine in order the
+   handle the ECOFF debugging information.  */
+
+struct mips_elf_find_line
+{
+  struct ecoff_debug_info d;
+  struct ecoff_find_line i;
+};
+
+bool
+_bfd_mips_elf_free_cached_info (bfd *abfd)
+{
+  struct mips_elf_obj_tdata *tdata;
+
+  if ((bfd_get_format (abfd) == bfd_object
+       || bfd_get_format (abfd) == bfd_core)
+      && (tdata = mips_elf_tdata (abfd)) != NULL)
+    {
+      BFD_ASSERT (tdata->root.object_id == MIPS_ELF_DATA);
+      while (tdata->mips_hi16_list != NULL)
+	{
+	  struct mips_hi16 *hi = tdata->mips_hi16_list;
+	  tdata->mips_hi16_list = hi->next;
+	  free (hi);
+	}
+      if (tdata->find_line_info != NULL)
+	_bfd_ecoff_free_ecoff_debug_info (&tdata->find_line_info->d);
+    }
+  return _bfd_elf_free_cached_info (abfd);
+}
+
+bool
 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
       struct _mips_elf_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
@@ -1388,7 +1431,7 @@ _bfd_mips_elf_new_section_hook (bfd *abf
 /* Read ECOFF debugging information from a .mdebug section into a
    ecoff_debug_info structure.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
 			       struct ecoff_debug_info *debug)
 {
@@ -1409,67 +1452,50 @@ _bfd_mips_elf_read_ecoff_info (bfd *abfd
 
   symhdr = &debug->symbolic_header;
   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
+  free (ext_hdr);
+  ext_hdr = NULL;
 
   /* The symbolic header contains absolute file offsets and sizes to
      read.  */
-#define READ(ptr, offset, count, size, type)				\
-  if (symhdr->count == 0)						\
-    debug->ptr = NULL;							\
-  else									\
+#define READ(ptr, offset, count, size)					\
+  do									\
     {									\
-      bfd_size_type amt = (bfd_size_type) size * symhdr->count;		\
-      debug->ptr = bfd_malloc (amt);					\
-      if (debug->ptr == NULL)						\
+      size_t amt;							\
+      debug->ptr = NULL;						\
+      if (symhdr->count == 0)						\
+	break;								\
+      if (_bfd_mul_overflow (size, symhdr->count, &amt))		\
+	{								\
+	  bfd_set_error (bfd_error_file_too_big);			\
+	  goto error_return;						\
+	}								\
+      if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0)		\
 	goto error_return;						\
-      if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0		\
-	  || bfd_bread (debug->ptr, amt, abfd) != amt)			\
+      debug->ptr = _bfd_malloc_and_read (abfd, amt + 1, amt);		\
+      if (debug->ptr == NULL)						\
 	goto error_return;						\
-    }
+      ((char *) debug->ptr)[amt] = 0;					\
+    } while (0)
 
-  READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
-  READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
-  READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
-  READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
-  READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
-  READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
-	union aux_ext *);
-  READ (ss, cbSsOffset, issMax, sizeof (char), char *);
-  READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
-  READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
-  READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
-  READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
+  READ (line, cbLineOffset, cbLine, sizeof (unsigned char));
+  READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size);
+  READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size);
+  READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size);
+  READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size);
+  READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext));
+  READ (ss, cbSsOffset, issMax, sizeof (char));
+  READ (ssext, cbSsExtOffset, issExtMax, sizeof (char));
+  READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size);
+  READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size);
+  READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size);
 #undef READ
 
-  debug->fdr = NULL;
-
-  return TRUE;
+  return true;
 
  error_return:
-  if (ext_hdr != NULL)
-    free (ext_hdr);
-  if (debug->line != NULL)
-    free (debug->line);
-  if (debug->external_dnr != NULL)
-    free (debug->external_dnr);
-  if (debug->external_pdr != NULL)
-    free (debug->external_pdr);
-  if (debug->external_sym != NULL)
-    free (debug->external_sym);
-  if (debug->external_opt != NULL)
-    free (debug->external_opt);
-  if (debug->external_aux != NULL)
-    free (debug->external_aux);
-  if (debug->ss != NULL)
-    free (debug->ss);
-  if (debug->ssext != NULL)
-    free (debug->ssext);
-  if (debug->external_fdr != NULL)
-    free (debug->external_fdr);
-  if (debug->external_rfd != NULL)
-    free (debug->external_rfd);
-  if (debug->external_ext != NULL)
-    free (debug->external_ext);
-  return FALSE;
+  free (ext_hdr);
+  _bfd_ecoff_free_ecoff_debug_info (debug);
+  return false;
 }
 
 /* Swap RPDR (runtime procedure table entry) for output.  */
@@ -1492,7 +1518,7 @@ ecoff_swap_rpdr_out (bfd *abfd, const RP
 
 /* Create a runtime procedure table from the .mdebug section.  */
 
-static bfd_boolean
+static bool
 mips_elf_create_procedure_table (void *handle, bfd *abfd,
 				 struct bfd_link_info *info, asection *s,
 				 struct ecoff_debug_info *debug)
@@ -1613,47 +1639,36 @@ mips_elf_create_procedure_table (void *h
      matters, but someday it might).  */
   s->map_head.link_order = NULL;
 
-  if (epdr != NULL)
-    free (epdr);
-  if (rpdr != NULL)
-    free (rpdr);
-  if (esym != NULL)
-    free (esym);
-  if (ss != NULL)
-    free (ss);
-  if (sv != NULL)
-    free (sv);
-
-  return TRUE;
+  free (epdr);
+  free (rpdr);
+  free (esym);
+  free (ss);
+  free (sv);
+  return true;
 
  error_return:
-  if (epdr != NULL)
-    free (epdr);
-  if (rpdr != NULL)
-    free (rpdr);
-  if (esym != NULL)
-    free (esym);
-  if (ss != NULL)
-    free (ss);
-  if (sv != NULL)
-    free (sv);
-  return FALSE;
+  free (epdr);
+  free (rpdr);
+  free (esym);
+  free (ss);
+  free (sv);
+  return false;
 }
 
 /* We're going to create a stub for H.  Create a symbol for the stub's
    value and size, to help make the disassembly easier to read.  */
 
-static bfd_boolean
+static bool
 mips_elf_create_stub_symbol (struct bfd_link_info *info,
 			     struct mips_elf_link_hash_entry *h,
 			     const char *prefix, asection *s, bfd_vma value,
 			     bfd_vma size)
 {
-  bfd_boolean micromips_p = ELF_ST_IS_MICROMIPS (h->root.other);
+  bool micromips_p = ELF_ST_IS_MICROMIPS (h->root.other);
   struct bfd_link_hash_entry *bh;
   struct elf_link_hash_entry *elfh;
   char *name;
-  bfd_boolean res;
+  bool res;
 
   if (micromips_p)
     value |= 1;
@@ -1663,10 +1678,10 @@ mips_elf_create_stub_symbol (struct bfd_
   bh = NULL;
   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
 					  BSF_LOCAL, s, value, NULL,
-					  TRUE, FALSE, &bh);
+					  true, false, &bh);
   free (name);
   if (! res)
-    return FALSE;
+    return false;
 
   /* Make it a local function.  */
   elfh = (struct elf_link_hash_entry *) bh;
@@ -1675,14 +1690,14 @@ mips_elf_create_stub_symbol (struct bfd_
   elfh->forced_local = 1;
   if (micromips_p)
     elfh->other = ELF_ST_SET_MICROMIPS (elfh->other);
-  return TRUE;
+  return true;
 }
 
 /* We're about to redefine H.  Create a symbol to represent H's
    current value and size, to help make the disassembly easier
    to read.  */
 
-static bfd_boolean
+static bool
 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
 			       struct mips_elf_link_hash_entry *h,
 			       const char *prefix)
@@ -1692,7 +1707,7 @@ mips_elf_create_shadow_symbol (struct bf
   char *name;
   asection *s;
   bfd_vma value;
-  bfd_boolean res;
+  bool res;
 
   /* Read the symbol's value.  */
   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
@@ -1705,10 +1720,10 @@ mips_elf_create_shadow_symbol (struct bf
   bh = NULL;
   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
 					  BSF_LOCAL, s, value, NULL,
-					  TRUE, FALSE, &bh);
+					  true, false, &bh);
   free (name);
   if (! res)
-    return FALSE;
+    return false;
 
   /* Make it local and copy the other attributes from H.  */
   elfh = (struct elf_link_hash_entry *) bh;
@@ -1716,13 +1731,13 @@ mips_elf_create_shadow_symbol (struct bf
   elfh->other = h->root.other;
   elfh->size = h->root.size;
   elfh->forced_local = 1;
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
    function rather than to a hard-float stub.  */
 
-static bfd_boolean
+static bool
 section_allows_mips16_refs_p (asection *section)
 {
   const char *name;
@@ -1774,7 +1789,7 @@ mips_elf_check_mips16_stubs (struct bfd_
       && h->root.dynindx != -1)
     {
       mips_elf_create_shadow_symbol (info, h, ".mips16.");
-      h->need_fn_stub = TRUE;
+      h->need_fn_stub = true;
     }
 
   if (h->fn_stub != NULL
@@ -1846,7 +1861,7 @@ mips_elf_la25_stub_eq (const void *entry
    the linker's implementation of add_stub_function.  Return true on
    success.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
 			  asection *(*fn) (const char *, asection *,
 					   asection *))
@@ -1855,15 +1870,15 @@ _bfd_mips_elf_init_stubs (struct bfd_lin
 
   htab = mips_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   htab->add_stub_section = fn;
   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
 				      mips_elf_la25_stub_eq, NULL);
   if (htab->la25_stubs == NULL)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Return true if H is a locally-defined PIC function, in the sense
@@ -1872,7 +1887,7 @@ _bfd_mips_elf_init_stubs (struct bfd_lin
    so they themselves never need $25 to be valid.  Only non-MIPS16
    entry points are of interest here.  */
 
-static bfd_boolean
+static bool
 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
 {
   return ((h->root.root.type == bfd_link_hash_defined
@@ -1910,7 +1925,7 @@ mips_elf_get_la25_target (struct mips_el
    by inserting an LUI/ADDIU pair before the target function.
    Create the section and redirect the function symbol to it.  */
 
-static bfd_boolean
+static bool
 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
 			 struct bfd_link_info *info)
 {
@@ -1921,12 +1936,12 @@ mips_elf_add_la25_intro (struct mips_elf
 
   htab = mips_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Create a unique name for the new section.  */
   name = bfd_malloc (11 + sizeof (".text.stub."));
   if (name == NULL)
-    return FALSE;
+    return false;
   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
 
   /* Create the section.  */
@@ -1934,12 +1949,12 @@ mips_elf_add_la25_intro (struct mips_elf
   s = htab->add_stub_section (name, input_section,
 			      input_section->output_section);
   if (s == NULL)
-    return FALSE;
+    return false;
 
   /* Make sure that any padding goes before the stub.  */
   align = input_section->alignment_power;
   if (!bfd_set_section_alignment (s, align))
-    return FALSE;
+    return false;
   if (align > 3)
     s->size = (1 << align) - 8;
 
@@ -1950,14 +1965,14 @@ mips_elf_add_la25_intro (struct mips_elf
 
   /* Allocate room for it.  */
   s->size += 8;
-  return TRUE;
+  return true;
 }
 
 /* STUB describes an la25 stub that we have decided to implement
    with a separate trampoline.  Allocate room for it and redirect
    the function symbol to it.  */
 
-static bfd_boolean
+static bool
 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
 			      struct bfd_link_info *info)
 {
@@ -1966,7 +1981,7 @@ mips_elf_add_la25_trampoline (struct mip
 
   htab = mips_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* Create a trampoline section, if we haven't already.  */
   s = htab->strampoline;
@@ -1976,7 +1991,7 @@ mips_elf_add_la25_trampoline (struct mip
       s = htab->add_stub_section (".text", NULL,
 				  input_section->output_section);
       if (s == NULL || !bfd_set_section_alignment (s, 4))
-	return FALSE;
+	return false;
       htab->strampoline = s;
     }
 
@@ -1987,19 +2002,19 @@ mips_elf_add_la25_trampoline (struct mip
 
   /* Allocate room for it.  */
   s->size += 16;
-  return TRUE;
+  return true;
 }
 
 /* H describes a symbol that needs an la25 stub.  Make sure that an
    appropriate stub exists and point H at it.  */
 
-static bfd_boolean
+static bool
 mips_elf_add_la25_stub (struct bfd_link_info *info,
 			struct mips_elf_link_hash_entry *h)
 {
   struct mips_elf_link_hash_table *htab;
   struct mips_elf_la25_stub search, *stub;
-  bfd_boolean use_trampoline_p;
+  bool use_trampoline_p;
   asection *s;
   bfd_vma value;
   void **slot;
@@ -2012,24 +2027,24 @@ mips_elf_add_la25_stub (struct bfd_link_
   /* See if we've already created an equivalent stub.  */
   htab = mips_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
   if (slot == NULL)
-    return FALSE;
+    return false;
 
   stub = (struct mips_elf_la25_stub *) *slot;
   if (stub != NULL)
     {
       /* We can reuse the existing stub.  */
       h->la25_stub = stub;
-      return TRUE;
+      return true;
     }
 
   /* Create a permanent copy of ENTRY and add it to the hash table.  */
   stub = bfd_malloc (sizeof (search));
   if (stub == NULL)
-    return FALSE;
+    return false;
   *stub = search;
   *slot = stub;
 
@@ -2049,7 +2064,7 @@ mips_elf_add_la25_stub (struct bfd_link_
 /* A mips_elf_link_hash_traverse callback that is called before sizing
    sections.  DATA points to a mips_htab_traverse_info structure.  */
 
-static bfd_boolean
+static bool
 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
 {
   struct mips_htab_traverse_info *hti;
@@ -2063,7 +2078,7 @@ mips_elf_check_symbols (struct mips_elf_
       /* PR 12845: If H is in a section that has been garbage
 	 collected it will have its output section set to *ABS*.  */
       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
-	return TRUE;
+	return true;
 
       /* H is a function that might need $25 to be valid on entry.
 	 If we're creating a non-PIC relocatable object, mark H as
@@ -2077,11 +2092,11 @@ mips_elf_check_symbols (struct mips_elf_
 	}
       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
 	{
-	  hti->error = TRUE;
-	  return FALSE;
+	  hti->error = true;
+	  return false;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
@@ -2173,7 +2188,7 @@ mips_elf_check_symbols (struct mips_elf_
    relocatable field is shifted by 1 rather than 2 and the same bit
    shuffling is done as with the relocations above.  */
 
-static inline bfd_boolean
+static inline bool
 mips16_reloc_p (int r_type)
 {
   switch (r_type)
@@ -2192,34 +2207,36 @@ mips16_reloc_p (int r_type)
     case R_MIPS16_TLS_TPREL_HI16:
     case R_MIPS16_TLS_TPREL_LO16:
     case R_MIPS16_PC16_S1:
-      return TRUE;
+      return true;
 
     default:
-      return FALSE;
+      return false;
     }
 }
 
 /* Check if a microMIPS reloc.  */
 
-static inline bfd_boolean
+static inline bool
 micromips_reloc_p (unsigned int r_type)
 {
   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
 }
 
 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
-   on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
-   and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
+   on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1,
+   R_MICROMIPS_PC10_S1 and R_MICROMIPS_GPREL7_S2 relocs that apply to
+   16-bit instructions.  */
 
-static inline bfd_boolean
+static inline bool
 micromips_reloc_shuffle_p (unsigned int r_type)
 {
   return (micromips_reloc_p (r_type)
 	  && r_type != R_MICROMIPS_PC7_S1
-	  && r_type != R_MICROMIPS_PC10_S1);
+	  && r_type != R_MICROMIPS_PC10_S1
+	  && r_type != R_MICROMIPS_GPREL7_S2);
 }
 
-static inline bfd_boolean
+static inline bool
 got16_reloc_p (int r_type)
 {
   return (r_type == R_MIPS_GOT16
@@ -2227,7 +2244,7 @@ got16_reloc_p (int r_type)
 	  || r_type == R_MICROMIPS_GOT16);
 }
 
-static inline bfd_boolean
+static inline bool
 call16_reloc_p (int r_type)
 {
   return (r_type == R_MIPS_CALL16
@@ -2235,37 +2252,37 @@ call16_reloc_p (int r_type)
 	  || r_type == R_MICROMIPS_CALL16);
 }
 
-static inline bfd_boolean
+static inline bool
 got_disp_reloc_p (unsigned int r_type)
 {
   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
 }
 
-static inline bfd_boolean
+static inline bool
 got_page_reloc_p (unsigned int r_type)
 {
   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
 }
 
-static inline bfd_boolean
+static inline bool
 got_lo16_reloc_p (unsigned int r_type)
 {
   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
 }
 
-static inline bfd_boolean
+static inline bool
 call_hi16_reloc_p (unsigned int r_type)
 {
   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
 }
 
-static inline bfd_boolean
+static inline bool
 call_lo16_reloc_p (unsigned int r_type)
 {
   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
 }
 
-static inline bfd_boolean
+static inline bool
 hi16_reloc_p (int r_type)
 {
   return (r_type == R_MIPS_HI16
@@ -2274,7 +2291,7 @@ hi16_reloc_p (int r_type)
 	  || r_type == R_MIPS_PCHI16);
 }
 
-static inline bfd_boolean
+static inline bool
 lo16_reloc_p (int r_type)
 {
   return (r_type == R_MIPS_LO16
@@ -2283,13 +2300,13 @@ lo16_reloc_p (int r_type)
 	  || r_type == R_MIPS_PCLO16);
 }
 
-static inline bfd_boolean
+static inline bool
 mips16_call_reloc_p (int r_type)
 {
   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
 }
 
-static inline bfd_boolean
+static inline bool
 jal_reloc_p (int r_type)
 {
   return (r_type == R_MIPS_26
@@ -2297,7 +2314,7 @@ jal_reloc_p (int r_type)
 	  || r_type == R_MICROMIPS_26_S1);
 }
 
-static inline bfd_boolean
+static inline bool
 b_reloc_p (int r_type)
 {
   return (r_type == R_MIPS_PC26_S2
@@ -2310,14 +2327,14 @@ b_reloc_p (int r_type)
 	  || r_type == R_MICROMIPS_PC7_S1);
 }
 
-static inline bfd_boolean
+static inline bool
 aligned_pcrel_reloc_p (int r_type)
 {
   return (r_type == R_MIPS_PC18_S3
 	  || r_type == R_MIPS_PC19_S2);
 }
 
-static inline bfd_boolean
+static inline bool
 branch_reloc_p (int r_type)
 {
   return (r_type == R_MIPS_26
@@ -2327,14 +2344,14 @@ branch_reloc_p (int r_type)
 	  || r_type == R_MIPS_GNU_REL16_S2);
 }
 
-static inline bfd_boolean
+static inline bool
 mips16_branch_reloc_p (int r_type)
 {
   return (r_type == R_MIPS16_26
 	  || r_type == R_MIPS16_PC16_S1);
 }
 
-static inline bfd_boolean
+static inline bool
 micromips_branch_reloc_p (int r_type)
 {
   return (r_type == R_MICROMIPS_26_S1
@@ -2343,7 +2360,7 @@ micromips_branch_reloc_p (int r_type)
 	  || r_type == R_MICROMIPS_PC7_S1);
 }
 
-static inline bfd_boolean
+static inline bool
 tls_gd_reloc_p (unsigned int r_type)
 {
   return (r_type == R_MIPS_TLS_GD
@@ -2351,7 +2368,7 @@ tls_gd_reloc_p (unsigned int r_type)
 	  || r_type == R_MICROMIPS_TLS_GD);
 }
 
-static inline bfd_boolean
+static inline bool
 tls_ldm_reloc_p (unsigned int r_type)
 {
   return (r_type == R_MIPS_TLS_LDM
@@ -2359,7 +2376,7 @@ tls_ldm_reloc_p (unsigned int r_type)
 	  || r_type == R_MICROMIPS_TLS_LDM);
 }
 
-static inline bfd_boolean
+static inline bool
 tls_gottprel_reloc_p (unsigned int r_type)
 {
   return (r_type == R_MIPS_TLS_GOTTPREL
@@ -2367,13 +2384,19 @@ tls_gottprel_reloc_p (unsigned int r_typ
 	  || r_type == R_MICROMIPS_TLS_GOTTPREL);
 }
 
+static inline bool
+needs_shuffle (int r_type)
+{
+  return mips16_reloc_p (r_type) || micromips_reloc_shuffle_p (r_type);
+}
+
 void
 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
-			       bfd_boolean jal_shuffle, bfd_byte *data)
+			       bool jal_shuffle, bfd_byte *data)
 {
   bfd_vma first, second, val;
 
-  if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
+  if (!needs_shuffle (r_type))
     return;
 
   /* Pick up the first and second halfwords of the instruction.  */
@@ -2392,11 +2415,11 @@ _bfd_mips_elf_reloc_unshuffle (bfd *abfd
 
 void
 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
-			     bfd_boolean jal_shuffle, bfd_byte *data)
+			     bool jal_shuffle, bfd_byte *data)
 {
   bfd_vma first, second, val;
 
-  if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
+  if (!needs_shuffle (r_type))
     return;
 
   val = bfd_get_32 (abfd, data);
@@ -2420,10 +2443,36 @@ _bfd_mips_elf_reloc_shuffle (bfd *abfd,
   bfd_put_16 (abfd, first, data);
 }
 
+/* Perform reloc offset checking.
+   We can only use bfd_reloc_offset_in_range, which takes into account
+   the size of the field being relocated, when section contents will
+   be accessed because mips object files may use relocations that seem
+   to access beyond section limits.
+   gas/testsuite/gas/mips/dla-reloc.s is an example that puts
+   R_MIPS_SUB, a 64-bit relocation, on the last instruction in the
+   section.  The R_MIPS_SUB applies to the addend for the next reloc
+   rather than the section contents.
+
+   CHECK is CHECK_STD for the standard bfd_reloc_offset_in_range check,
+   CHECK_INPLACE to only check partial_inplace relocs, and
+   CHECK_SHUFFLE to only check relocs that shuffle/unshuffle.  */
+
+bool
+_bfd_mips_reloc_offset_in_range (bfd *abfd, asection *input_section,
+				 arelent *reloc_entry, enum reloc_check check)
+{
+  if (check == check_inplace && !reloc_entry->howto->partial_inplace)
+    return true;
+  if (check == check_shuffle && !needs_shuffle (reloc_entry->howto->type))
+    return true;
+  return bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				    input_section, reloc_entry->address);
+}
+
 bfd_reloc_status_type
 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
 			       arelent *reloc_entry, asection *input_section,
-			       bfd_boolean relocatable, void *data, bfd_vma gp)
+			       bool relocatable, void *data, bfd_vma gp)
 {
   bfd_vma relocation;
   bfd_signed_vma val;
@@ -2434,11 +2483,11 @@ _bfd_mips_elf_gprel16_with_gp (bfd *abfd
   else
     relocation = symbol->value;
 
-  relocation += symbol->section->output_section->vma;
-  relocation += symbol->section->output_offset;
-
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
-    return bfd_reloc_outofrange;
+  if (symbol->section->output_section != NULL)
+    {
+      relocation += symbol->section->output_section->vma;
+      relocation += symbol->section->output_offset;
+    }
 
   /* Set val to the offset into the section or symbol.  */
   val = reloc_entry->addend;
@@ -2454,6 +2503,10 @@ _bfd_mips_elf_gprel16_with_gp (bfd *abfd
 
   if (reloc_entry->howto->partial_inplace)
     {
+      if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd, input_section,
+				      reloc_entry->address))
+	return bfd_reloc_outofrange;
+
       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
 				       (bfd_byte *) data
 				       + reloc_entry->address);
@@ -2469,23 +2522,6 @@ _bfd_mips_elf_gprel16_with_gp (bfd *abfd
   return bfd_reloc_ok;
 }
 
-/* Used to store a REL high-part relocation such as R_MIPS_HI16 or
-   R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
-   that contains the relocation field and DATA points to the start of
-   INPUT_SECTION.  */
-
-struct mips_hi16
-{
-  struct mips_hi16 *next;
-  bfd_byte *data;
-  asection *input_section;
-  arelent rel;
-};
-
-/* FIXME: This should not be a static variable.  */
-
-static struct mips_hi16 *mips_hi16_list;
-
 /* A howto special_function for REL *HI16 relocations.  We can only
    calculate the correct value once we've seen the partnering
    *LO16 relocation, so just save the information for later.
@@ -2496,12 +2532,13 @@ static struct mips_hi16 *mips_hi16_list;
    simplies the relocation handling in gcc.  */
 
 bfd_reloc_status_type
-_bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
+_bfd_mips_elf_hi16_reloc (bfd *abfd, arelent *reloc_entry,
 			  asymbol *symbol ATTRIBUTE_UNUSED, void *data,
 			  asection *input_section, bfd *output_bfd,
 			  char **error_message ATTRIBUTE_UNUSED)
 {
   struct mips_hi16 *n;
+  struct mips_elf_obj_tdata *tdata;
 
   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
     return bfd_reloc_outofrange;
@@ -2510,11 +2547,12 @@ _bfd_mips_elf_hi16_reloc (bfd *abfd ATTR
   if (n == NULL)
     return bfd_reloc_outofrange;
 
-  n->next = mips_hi16_list;
+  tdata = mips_elf_tdata (abfd);
+  n->next = tdata->mips_hi16_list;
   n->data = data;
   n->input_section = input_section;
   n->rel = *reloc_entry;
-  mips_hi16_list = n;
+  tdata->mips_hi16_list = n;
 
   if (output_bfd != NULL)
     reloc_entry->address += input_section->output_offset;
@@ -2554,22 +2592,39 @@ _bfd_mips_elf_lo16_reloc (bfd *abfd, are
 {
   bfd_vma vallo;
   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
+  struct mips_elf_obj_tdata *tdata;
 
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd, input_section,
+				  reloc_entry->address))
     return bfd_reloc_outofrange;
 
-  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
+  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, false,
 				 location);
-  vallo = bfd_get_32 (abfd, location);
-  _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
+  /* The high 16 bits of the addend are stored in the high insn, the
+     low 16 bits in the low insn, but there is a catch:  You can't
+     just concatenate the high and low parts.  The high part of the
+     addend is adjusted for the fact that the low part is sign
+     extended.  For example, an addend of 0x38000 would have 0x0004 in
+     the high part and 0x8000 (=0xff..f8000) in the low part.
+     To extract the actual addend, calculate (a)
+     ((hi & 0xffff) << 16) + ((lo & 0xffff) ^ 0x8000) - 0x8000.
+     We will be applying (symbol + addend) & 0xffff to the low insn,
+     and we want to apply (b) (symbol + addend + 0x8000) >> 16 to the
+     high insn (the +0x8000 adjusting for when the applied low part is
+     negative).  Substituting (a) into (b) and recognising that
+     (hi & 0xffff) is already in the high insn gives a high part
+     addend adjustment of (lo & 0xffff) ^ 0x8000.  */
+  vallo = (bfd_get_32 (abfd, location) & 0xffff) ^ 0x8000;
+  _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, false,
 			       location);
 
-  while (mips_hi16_list != NULL)
+  tdata = mips_elf_tdata (abfd);
+  while (tdata->mips_hi16_list != NULL)
     {
       bfd_reloc_status_type ret;
       struct mips_hi16 *hi;
 
-      hi = mips_hi16_list;
+      hi = tdata->mips_hi16_list;
 
       /* R_MIPS*_GOT16 relocations are something of a special case.  We
 	 want to install the addend in the same way as for a R_MIPS*_HI16
@@ -2577,15 +2632,13 @@ _bfd_mips_elf_lo16_reloc (bfd *abfd, are
 	 relocations can also be used with global symbols, their howto
 	 has a rightshift of 0.  */
       if (hi->rel.howto->type == R_MIPS_GOT16)
-	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
+	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, false);
       else if (hi->rel.howto->type == R_MIPS16_GOT16)
-	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
+	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, false);
       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
-	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
+	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, false);
 
-      /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
-	 carry or borrow will induce a change of +1 or -1 in the high part.  */
-      hi->rel.addend += (vallo + 0x8000) & 0xffff;
+      hi->rel.addend += vallo;
 
       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
 					 hi->input_section, output_bfd,
@@ -2593,7 +2646,7 @@ _bfd_mips_elf_lo16_reloc (bfd *abfd, are
       if (ret != bfd_reloc_ok)
 	return ret;
 
-      mips_hi16_list = hi->next;
+      tdata->mips_hi16_list = hi->next;
       free (hi);
     }
 
@@ -2614,16 +2667,19 @@ _bfd_mips_elf_generic_reloc (bfd *abfd A
 {
   bfd_signed_vma val;
   bfd_reloc_status_type status;
-  bfd_boolean relocatable;
+  bool relocatable;
 
   relocatable = (output_bfd != NULL);
 
-  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+  if (!_bfd_mips_reloc_offset_in_range (abfd, input_section, reloc_entry,
+					(relocatable
+					 ? check_inplace : check_std)))
     return bfd_reloc_outofrange;
 
   /* Build up the field adjustment in VAL.  */
   val = 0;
-  if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
+  if ((!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
+      && symbol->section->output_section != NULL)
     {
       /* Either we're calculating the final field value or we have a
 	 relocation against a section symbol.  Add in the section's
@@ -2659,11 +2715,11 @@ _bfd_mips_elf_generic_reloc (bfd *abfd A
       val += reloc_entry->addend;
 
       /* Add VAL to the relocation field.  */
-      _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
+      _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, false,
 				     location);
       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
 				       location);
-      _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
+      _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, false,
 				   location);
 
       if (status != bfd_reloc_ok)
@@ -2915,32 +2971,32 @@ sort_dynamic_relocs_64 (const void *arg1
    stripped but required by a reloc.  In particular, it can not happen
    when generating a final executable.  */
 
-static bfd_boolean
+static bool
 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
 {
   struct extsym_info *einfo = data;
-  bfd_boolean strip;
+  bool strip;
   asection *sec, *output_section;
 
   if (h->root.indx == -2)
-    strip = FALSE;
+    strip = false;
   else if ((h->root.def_dynamic
 	    || h->root.ref_dynamic
 	    || h->root.type == bfd_link_hash_new)
 	   && !h->root.def_regular
 	   && !h->root.ref_regular)
-    strip = TRUE;
+    strip = true;
   else if (einfo->info->strip == strip_all
 	   || (einfo->info->strip == strip_some
 	       && bfd_hash_lookup (einfo->info->keep_hash,
 				   h->root.root.root.string,
-				   FALSE, FALSE) == NULL))
-    strip = TRUE;
+				   false, false) == NULL))
+    strip = true;
   else
-    strip = FALSE;
+    strip = false;
 
   if (strip)
-    return TRUE;
+    return true;
 
   if (h->esym.ifd == -2)
     {
@@ -3073,11 +3129,11 @@ mips_elf_output_extsym (struct mips_elf_
 				      h->root.root.root.string,
 				      &h->esym))
     {
-      einfo->failed = TRUE;
-      return FALSE;
+      einfo->failed = true;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* A comparison routine used to sort .gptab entries.  */
@@ -3096,7 +3152,7 @@ gptab_compare (const void *p1, const voi
 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
    hash number.  */
 
-static INLINE hashval_t
+static inline hashval_t
 mips_elf_hash_bfd_vma (bfd_vma addr)
 {
 #ifdef BFD64
@@ -3128,7 +3184,7 @@ mips_elf_got_entry_eq (const void *entry
 
   return (e1->symndx == e2->symndx
 	  && e1->tls_type == e2->tls_type
-	  && (e1->tls_type == GOT_TLS_LDM ? TRUE
+	  && (e1->tls_type == GOT_TLS_LDM ? true
 	      : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
 	      : e1->symndx >= 0 ? (e1->abfd == e2->abfd
 				   && e1->d.addend == e2->d.addend)
@@ -3208,7 +3264,7 @@ mips_elf_create_got_info (bfd *abfd)
    CREATE_P and if ABFD doesn't already have a GOT.  */
 
 static struct mips_got_info *
-mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
+mips_elf_bfd_got (bfd *abfd, bool create_p)
 {
   struct mips_elf_obj_tdata *tdata;
 
@@ -3247,7 +3303,7 @@ mips_elf_replace_bfd_got (bfd *abfd, str
    if creation fails.  */
 
 static asection *
-mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
+mips_elf_rel_dyn_section (struct bfd_link_info *info, bool create_p)
 {
   const char *dname;
   asection *sreloc;
@@ -3319,8 +3375,8 @@ mips_tls_got_relocs (struct bfd_link_inf
 		     struct elf_link_hash_entry *h)
 {
   int indx = 0;
-  bfd_boolean need_relocs = FALSE;
-  bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
+  bool need_relocs = false;
+  bool dyn = elf_hash_table (info)->dynamic_sections_created;
 
   if (h != NULL
       && h->dynindx != -1
@@ -3332,7 +3388,7 @@ mips_tls_got_relocs (struct bfd_link_inf
       && (h == NULL
 	  || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 	  || h->root.type != bfd_link_hash_undefweak))
-    need_relocs = TRUE;
+    need_relocs = true;
 
   if (!need_relocs)
     return 0;
@@ -3413,12 +3469,12 @@ mips_elf_initialize_tls_slots (bfd *abfd
 			       struct mips_elf_link_hash_entry *h,
 			       bfd_vma value)
 {
-  bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
+  bool dyn = elf_hash_table (info)->dynamic_sections_created;
   struct mips_elf_link_hash_table *htab;
   int indx;
   asection *sreloc, *sgot;
   bfd_vma got_offset, got_offset2;
-  bfd_boolean need_relocs = FALSE;
+  bool need_relocs = false;
 
   htab = mips_elf_hash_table (info);
   if (htab == NULL)
@@ -3440,7 +3496,7 @@ mips_elf_initialize_tls_slots (bfd *abfd
       && (h == NULL
 	  || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
 	  || h->root.type != bfd_link_hash_undefweak))
-    need_relocs = TRUE;
+    need_relocs = true;
 
   /* MINUS_ONE means the symbol is not defined in this object.  It may not
      be defined at all; assume that the value doesn't matter in that
@@ -3449,7 +3505,7 @@ mips_elf_initialize_tls_slots (bfd *abfd
 	      || h->root.root.type == bfd_link_hash_undefweak);
 
   /* Emit necessary relocations.  */
-  sreloc = mips_elf_rel_dyn_section (info, FALSE);
+  sreloc = mips_elf_rel_dyn_section (info, false);
   got_offset = entry->gotidx;
 
   switch (entry->tls_type)
@@ -3525,7 +3581,7 @@ mips_elf_initialize_tls_slots (bfd *abfd
       abort ();
     }
 
-  entry->tls_initialized = TRUE;
+  entry->tls_initialized = true;
 }
 
 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
@@ -3608,7 +3664,7 @@ mips_elf_primary_global_got_index (bfd *
      indices into the primary GOT.  That makes it easy to calculate the
      GOT offset.  */
   BFD_ASSERT (h->dynindx >= global_got_dynindx);
-  g = mips_elf_bfd_got (obfd, FALSE);
+  g = mips_elf_bfd_got (obfd, false);
   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
 	       * MIPS_ELF_GOT_SIZE (obfd));
   BFD_ASSERT (got_index < htab->root.sgot->size);
@@ -3631,11 +3687,11 @@ mips_elf_global_got_index (bfd *obfd, st
   htab = mips_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
 
-  g = mips_elf_bfd_got (ibfd, FALSE);
+  g = mips_elf_bfd_got (ibfd, false);
   BFD_ASSERT (g);
 
   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
-  if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
+  if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, false))
     return mips_elf_primary_global_got_index (obfd, info, h);
 
   lookup.abfd = ibfd;
@@ -3697,7 +3753,7 @@ mips_elf_got_page (bfd *abfd, bfd *ibfd,
 
 static bfd_vma
 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
-		      bfd_vma value, bfd_boolean external)
+		      bfd_vma value, bool external)
 {
   struct mips_got_entry *entry;
 
@@ -3761,10 +3817,10 @@ mips_elf_create_local_got_entry (bfd *ab
   htab = mips_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
 
-  g = mips_elf_bfd_got (ibfd, FALSE);
+  g = mips_elf_bfd_got (ibfd, false);
   if (g == NULL)
     {
-      g = mips_elf_bfd_got (abfd, FALSE);
+      g = mips_elf_bfd_got (abfd, false);
       BFD_ASSERT (g != NULL);
     }
 
@@ -3839,14 +3895,14 @@ mips_elf_create_local_got_entry (bfd *ab
   MIPS_ELF_PUT_WORD (abfd, value, htab->root.sgot->contents + entry->gotidx);
 
   /* These GOT entries need a dynamic relocation on VxWorks.  */
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     {
       Elf_Internal_Rela outrel;
       asection *s;
       bfd_byte *rloc;
       bfd_vma got_address;
 
-      s = mips_elf_rel_dyn_section (info, FALSE);
+      s = mips_elf_rel_dyn_section (info, false);
       got_address = (htab->root.sgot->output_section->vma
 		     + htab->root.sgot->output_offset
 		     + entry->gotidx);
@@ -3892,7 +3948,7 @@ count_section_dynsyms (bfd *output_bfd,
 /* Sort the dynamic symbol table so that symbols that need GOT entries
    appear towards the end.  */
 
-static bfd_boolean
+static bool
 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
 {
   struct mips_elf_link_hash_table *htab;
@@ -3903,11 +3959,11 @@ mips_elf_sort_hash_table (bfd *abfd, str
   BFD_ASSERT (htab != NULL);
 
   if (htab->root.dynsymcount == 0)
-    return TRUE;
+    return true;
 
   g = htab->got_info;
   if (g == NULL)
-    return TRUE;
+    return true;
 
   hsd.low = NULL;
   hsd.max_unref_got_dynindx
@@ -3942,14 +3998,14 @@ mips_elf_sort_hash_table (bfd *abfd, str
      table index in the GOT.  */
   htab->global_gotsym = hsd.low;
 
-  return TRUE;
+  return true;
 }
 
 /* If H needs a GOT entry, assign it the highest available dynamic
    index.  Otherwise, assign it the lowest available dynamic
    index.  */
 
-static bfd_boolean
+static bool
 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
 {
   struct mips_elf_hash_sort_data *hsd = data;
@@ -3957,7 +4013,7 @@ mips_elf_sort_hash_table_f (struct mips_
   /* Symbols without dynamic symbol table entries aren't interesting
      at all.  */
   if (h->root.dynindx == -1)
-    return TRUE;
+    return true;
 
   switch (h->global_got_area)
     {
@@ -3986,14 +4042,14 @@ mips_elf_sort_hash_table_f (struct mips_
     bfd_put_32 (hsd->output_bfd, h->root.dynindx,
 		hsd->mipsxhash + h->mipsxhash_loc);
 
-  return TRUE;
+  return true;
 }
 
 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
    (which is owned by the caller and shouldn't be added to the
    hash table directly).  */
 
-static bfd_boolean
+static bool
 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
 			   struct mips_got_entry *lookup)
 {
@@ -4007,7 +4063,7 @@ mips_elf_record_got_entry (struct bfd_li
   g = htab->got_info;
   loc = htab_find_slot (g->got_entries, lookup, INSERT);
   if (!loc)
-    return FALSE;
+    return false;
 
   /* Populate the entry if it isn't already.  */
   entry = (struct mips_got_entry *) *loc;
@@ -4015,36 +4071,36 @@ mips_elf_record_got_entry (struct bfd_li
     {
       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
       if (!entry)
-	return FALSE;
+	return false;
 
-      lookup->tls_initialized = FALSE;
+      lookup->tls_initialized = false;
       lookup->gotidx = -1;
       *entry = *lookup;
       *loc = entry;
     }
 
   /* Reuse the same GOT entry for the BFD's GOT.  */
-  g = mips_elf_bfd_got (abfd, TRUE);
+  g = mips_elf_bfd_got (abfd, true);
   if (!g)
-    return FALSE;
+    return false;
 
   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
   if (!bfd_loc)
-    return FALSE;
+    return false;
 
   if (!*bfd_loc)
     *bfd_loc = entry;
-  return TRUE;
+  return true;
 }
 
 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
    entry for it.  FOR_CALL is true if the caller is only interested in
    using the GOT entry for calls.  */
 
-static bfd_boolean
+static bool
 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
 				   bfd *abfd, struct bfd_link_info *info,
-				   bfd_boolean for_call, int r_type)
+				   bool for_call, int r_type)
 {
   struct mips_elf_link_hash_table *htab;
   struct mips_elf_link_hash_entry *hmips;
@@ -4056,7 +4112,7 @@ mips_elf_record_global_got_symbol (struc
 
   hmips = (struct mips_elf_link_hash_entry *) h;
   if (!for_call)
-    hmips->got_only_for_calls = FALSE;
+    hmips->got_only_for_calls = false;
 
   /* A global symbol in the GOT must also be in the dynamic symbol
      table.  */
@@ -4066,11 +4122,11 @@ mips_elf_record_global_got_symbol (struc
 	{
 	case STV_INTERNAL:
 	case STV_HIDDEN:
-	  _bfd_mips_elf_hide_symbol (info, h, TRUE);
+	  _bfd_mips_elf_hide_symbol (info, h, true);
 	  break;
 	}
       if (!bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
     }
 
   tls_type = mips_elf_reloc_tls_type (r_type);
@@ -4087,7 +4143,7 @@ mips_elf_record_global_got_symbol (struc
 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
 
-static bfd_boolean
+static bool
 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
 				  struct bfd_link_info *info, int r_type)
 {
@@ -4112,7 +4168,7 @@ mips_elf_record_local_got_symbol (bfd *a
    H is the symbol's hash table entry, or null if SYMNDX is local
    to ABFD.  */
 
-static bfd_boolean
+static bool
 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
 			      long symndx, struct elf_link_hash_entry *h,
 			      bfd_signed_vma addend)
@@ -4141,32 +4197,32 @@ mips_elf_record_got_page_ref (struct bfd
   lookup.addend = addend;
   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
   if (loc == NULL)
-    return FALSE;
+    return false;
 
   entry = (struct mips_got_page_ref *) *loc;
   if (!entry)
     {
       entry = bfd_alloc (abfd, sizeof (*entry));
       if (!entry)
-	return FALSE;
+	return false;
 
       *entry = lookup;
       *loc = entry;
     }
 
   /* Add the same entry to the BFD's GOT.  */
-  g2 = mips_elf_bfd_got (abfd, TRUE);
+  g2 = mips_elf_bfd_got (abfd, true);
   if (!g2)
-    return FALSE;
+    return false;
 
   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
   if (!bfd_loc)
-    return FALSE;
+    return false;
 
   if (!*bfd_loc)
     *bfd_loc = entry;
 
-  return TRUE;
+  return true;
 }
 
 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
@@ -4181,10 +4237,10 @@ mips_elf_allocate_dynamic_relocations (b
   htab = mips_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
 
-  s = mips_elf_rel_dyn_section (info, FALSE);
+  s = mips_elf_rel_dyn_section (info, false);
   BFD_ASSERT (s != NULL);
 
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
   else
     {
@@ -4219,7 +4275,7 @@ mips_elf_check_recreate_got (void **entr
       if (h->root.root.type == bfd_link_hash_indirect
 	  || h->root.root.type == bfd_link_hash_warning)
 	{
-	  arg->value = TRUE;
+	  arg->value = true;
 	  return 0;
 	}
     }
@@ -4294,7 +4350,7 @@ mips_elf_pages_for_range (const struct m
 
 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
 
-static bfd_boolean
+static bool
 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
 				asection *sec, bfd_signed_vma addend)
 {
@@ -4308,7 +4364,7 @@ mips_elf_record_got_page_entry (struct m
   lookup.sec = sec;
   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
   if (loc == NULL)
-    return FALSE;
+    return false;
 
   /* Create a mips_got_page_entry if this is the first time we've
      seen the section.  */
@@ -4317,7 +4373,7 @@ mips_elf_record_got_page_entry (struct m
     {
       entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
       if (!entry)
-	return FALSE;
+	return false;
 
       entry->sec = sec;
       *loc = entry;
@@ -4337,7 +4393,7 @@ mips_elf_record_got_page_entry (struct m
     {
       range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
       if (!range)
-	return FALSE;
+	return false;
 
       range->next = *range_ptr;
       range->min_addend = addend;
@@ -4346,7 +4402,7 @@ mips_elf_record_got_page_entry (struct m
       *range_ptr = range;
       entry->num_pages++;
       g->page_gotno++;
-      return TRUE;
+      return true;
     }
 
   /* Remember how many pages the old range contributed.  */
@@ -4375,7 +4431,7 @@ mips_elf_record_got_page_entry (struct m
       g->page_gotno += new_pages - old_pages;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
@@ -4383,7 +4439,7 @@ mips_elf_record_got_page_entry (struct m
    whether the page reference described by *REFP needs a GOT page entry,
    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
 
-static bfd_boolean
+static int
 mips_elf_resolve_got_page_ref (void **refp, void *data)
 {
   struct mips_got_page_ref *ref;
@@ -4420,7 +4476,7 @@ mips_elf_resolve_got_page_ref (void **re
       Elf_Internal_Sym *isym;
 
       /* Read in the symbol.  */
-      isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
+      isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, ref->u.abfd,
 				    ref->symndx);
       if (isym == NULL)
 	{
@@ -4468,7 +4524,7 @@ mips_elf_resolve_got_page_ref (void **re
    into got_page_entry structures and estimate the number of page entries
    that they require.  */
 
-static bfd_boolean
+static bool
 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
 				    struct mips_got_info *g)
 {
@@ -4479,7 +4535,7 @@ mips_elf_resolve_final_got_entries (stru
 
   tga.info = info;
   tga.g = g;
-  tga.value = FALSE;
+  tga.value = false;
   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
   if (tga.value)
     {
@@ -4488,11 +4544,11 @@ mips_elf_resolve_final_got_entries (stru
 				    mips_elf_got_entry_hash,
 				    mips_elf_got_entry_eq, NULL);
       if (!g->got_entries)
-	return FALSE;
+	return false;
 
       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
       if (!tga.g)
-	return FALSE;
+	return false;
 
       htab_delete (oldg.got_entries);
     }
@@ -4500,19 +4556,19 @@ mips_elf_resolve_final_got_entries (stru
   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
 					 mips_got_page_entry_eq, NULL);
   if (g->got_page_entries == NULL)
-    return FALSE;
+    return false;
 
   tga.info = info;
   tga.g = g;
   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
 
-  return TRUE;
+  return true;
 }
 
 /* Return true if a GOT entry for H should live in the local rather than
    global GOT area.  */
 
-static bfd_boolean
+static bool
 mips_use_local_got_p (struct bfd_link_info *info,
 		      struct mips_elf_link_hash_entry *h)
 {
@@ -4521,28 +4577,28 @@ mips_use_local_got_p (struct bfd_link_in
      and which therefore don't bind locally.  We'll report undefined
      symbols later if appropriate.  */
   if (h->root.dynindx == -1)
-    return TRUE;
+    return true;
 
   /* Absolute symbols, if ever they need a GOT entry, cannot ever go
      to the local GOT, as they would be implicitly relocated by the
      base address by the dynamic loader.  */
   if (bfd_is_abs_symbol (&h->root.root))
-    return FALSE;
+    return false;
 
   /* Symbols that bind locally can (and in the case of forced-local
      symbols, must) live in the local GOT.  */
   if (h->got_only_for_calls
       ? SYMBOL_CALLS_LOCAL (info, &h->root)
       : SYMBOL_REFERENCES_LOCAL (info, &h->root))
-    return TRUE;
+    return true;
 
   /* If this is an executable that must provide a definition of the symbol,
      either though PLTs or copy relocations, then that address should go in
      the local rather than global GOT.  */
   if (bfd_link_executable (info) && h->has_static_relocs)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* A mips_elf_link_hash_traverse callback for which DATA points to the
@@ -4551,7 +4607,7 @@ mips_use_local_got_p (struct bfd_link_in
    Count the number of global symbols that are in the primary GOT only
    because they have relocations against them (reloc_only_gotno).  */
 
-static int
+static bool
 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
 {
   struct bfd_link_info *info;
@@ -4570,7 +4626,7 @@ mips_elf_count_got_symbols (struct mips_
 	   entry if it was only used for relocations; those relocations
 	   will be against the null or section symbol instead of H.  */
 	h->global_got_area = GGA_NONE;
-      else if (htab->is_vxworks
+      else if (htab->root.target_os == is_vxworks
 	       && h->got_only_for_calls
 	       && h->root.plt.plist->mips_offset != MINUS_ONE)
 	/* On VxWorks, calls can refer directly to the .got.plt entry;
@@ -4696,7 +4752,7 @@ mips_elf_merge_got_with (bfd *abfd, stru
    attempt to merge with the current got, or finish the current got
    and then make make the new got current.  */
 
-static bfd_boolean
+static bool
 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
 		    struct mips_elf_got_per_bfd_arg *arg)
 {
@@ -4704,7 +4760,7 @@ mips_elf_merge_got (bfd *abfd, struct mi
   int result;
 
   if (!mips_elf_resolve_final_got_entries (arg->info, g))
-    return FALSE;
+    return false;
 
   /* Work out the number of page, local and TLS entries.  */
   estimate = arg->max_pages;
@@ -4725,7 +4781,7 @@ mips_elf_merge_got (bfd *abfd, struct mi
       if (!arg->primary)
 	{
 	  arg->primary = g;
-	  return TRUE;
+	  return true;
 	}
 
       /* Try merging with the primary GOT.  */
@@ -4748,14 +4804,14 @@ mips_elf_merge_got (bfd *abfd, struct mi
   g->next = arg->current;
   arg->current = g;
 
-  return TRUE;
+  return true;
 }
 
 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
    to GOTIDX, duplicating the entry if it has already been assigned
    an index in a different GOT.  */
 
-static bfd_boolean
+static bool
 mips_elf_set_gotidx (void **entryp, long gotidx)
 {
   struct mips_got_entry *entry;
@@ -4767,14 +4823,14 @@ mips_elf_set_gotidx (void **entryp, long
 
       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
       if (!new_entry)
-	return FALSE;
+	return false;
 
       *new_entry = *entry;
       *entryp = new_entry;
       entry = new_entry;
     }
   entry->gotidx = gotidx;
-  return TRUE;
+  return true;
 }
 
 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
@@ -4877,7 +4933,7 @@ mips_elf_forbid_lazy_stubs (void **entry
       && entry->symndx == -1
       && entry->d.h->needs_lazy_stub)
     {
-      entry->d.h->needs_lazy_stub = FALSE;
+      entry->d.h->needs_lazy_stub = false;
       htab->lazy_stub_count--;
     }
 
@@ -4892,7 +4948,7 @@ mips_elf_adjust_gp (bfd *abfd, struct mi
   if (!g->next)
     return 0;
 
-  g = mips_elf_bfd_got (ibfd, FALSE);
+  g = mips_elf_bfd_got (ibfd, false);
   if (! g)
     return 0;
 
@@ -4907,7 +4963,7 @@ mips_elf_adjust_gp (bfd *abfd, struct mi
 /* Turn a single GOT that is too big for 16-bit addressing into
    a sequence of GOTs, each one 16-bit addressable.  */
 
-static bfd_boolean
+static bool
 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
 		    asection *got, bfd_size_type pages)
 {
@@ -4942,9 +4998,9 @@ mips_elf_multi_got (bfd *abfd, struct bf
      to be the primary GOT.  */
   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
     {
-      gg = mips_elf_bfd_got (ibfd, FALSE);
+      gg = mips_elf_bfd_got (ibfd, false);
       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
-	return FALSE;
+	return false;
     }
 
   /* If we do not find any suitable primary GOT, create an empty one.  */
@@ -5021,7 +5077,7 @@ mips_elf_multi_got (bfd *abfd, struct bf
       tga.value = MIPS_ELF_GOT_SIZE (abfd);
       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
       if (!tga.g)
-	return FALSE;
+	return false;
       BFD_ASSERT (g->tls_assigned_gotno == assign);
 
       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
@@ -5050,7 +5106,7 @@ mips_elf_multi_got (bfd *abfd, struct bf
       tga.g = g;
       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
       if (!tga.g)
-	return FALSE;
+	return false;
       BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
       g->assigned_low_gotno = save_assign;
 
@@ -5070,7 +5126,7 @@ mips_elf_multi_got (bfd *abfd, struct bf
     mips_elf_allocate_dynamic_relocations (dynobj, info,
 					   needed_relocs);
 
-  return TRUE;
+  return true;
 }
 
 
@@ -5099,7 +5155,7 @@ mips_elf_next_relocation (bfd *abfd ATTR
 
 /* Return whether an input relocation is against a local symbol.  */
 
-static bfd_boolean
+static bool
 mips_elf_local_relocation_p (bfd *input_bfd,
 			     const Elf_Internal_Rela *relocation,
 			     asection **local_sections)
@@ -5113,11 +5169,11 @@ mips_elf_local_relocation_p (bfd *input_
   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
 
   if (r_symndx < extsymoff)
-    return TRUE;
+    return true;
   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Sign-extend VALUE, which has the indicated number of BITS.  */
@@ -5136,20 +5192,20 @@ _bfd_mips_elf_sign_extend (bfd_vma value
    range expressible by a signed number with the indicated number of
    BITS.  */
 
-static bfd_boolean
+static bool
 mips_elf_overflow_p (bfd_vma value, int bits)
 {
   bfd_signed_vma svalue = (bfd_signed_vma) value;
 
   if (svalue > (1 << (bits - 1)) - 1)
     /* The value is too big.  */
-    return TRUE;
+    return true;
   else if (svalue < -(1 << (bits - 1)))
     /* The value is too small.  */
-    return TRUE;
+    return true;
 
   /* All is well.  */
-  return FALSE;
+  return false;
 }
 
 /* Calculate the %high function.  */
@@ -5188,7 +5244,7 @@ mips_elf_highest (bfd_vma value ATTRIBUT
 
 /* Create the .compact_rel section.  */
 
-static bfd_boolean
+static bool
 mips_elf_create_compact_rel_section
   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
@@ -5203,17 +5259,17 @@ mips_elf_create_compact_rel_section
       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)))
-	return FALSE;
+	return false;
 
       s->size = sizeof (Elf32_External_compact_rel);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create the .got section to hold the global offset table.  */
 
-static bfd_boolean
+static bool
 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags;
@@ -5227,7 +5283,7 @@ mips_elf_create_got_section (bfd *abfd,
 
   /* This function may be called more than once.  */
   if (htab->root.sgot)
-    return TRUE;
+    return true;
 
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
 	   | SEC_LINKER_CREATED);
@@ -5237,7 +5293,7 @@ mips_elf_create_got_section (bfd *abfd,
   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (s, 4))
-    return FALSE;
+    return false;
   htab->root.sgot = s;
 
   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
@@ -5246,8 +5302,8 @@ mips_elf_create_got_section (bfd *abfd,
   bh = NULL;
   if (! (_bfd_generic_link_add_one_symbol
 	 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
-	  0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
-    return FALSE;
+	  0, NULL, false, get_elf_backend_data (abfd)->collect, &bh)))
+    return false;
 
   h = (struct elf_link_hash_entry *) bh;
   h->non_elf = 0;
@@ -5258,7 +5314,7 @@ mips_elf_create_got_section (bfd *abfd,
 
   if (bfd_link_pic (info)
       && ! bfd_elf_link_record_dynamic_symbol (info, h))
-    return FALSE;
+    return false;
 
   htab->got_info = mips_elf_create_got_info (abfd);
   mips_elf_section_data (s)->elf.this_hdr.sh_flags
@@ -5271,20 +5327,20 @@ mips_elf_create_got_section (bfd *abfd,
 					  | SEC_IN_MEMORY
 					  | SEC_LINKER_CREATED);
   if (s == NULL)
-    return FALSE;
+    return false;
   htab->root.sgotplt = s;
 
-  return TRUE;
+  return true;
 }
 
 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
    __GOTT_INDEX__ symbols.  These symbols are only special for
    shared objects; they are not used in executables.  */
 
-static bfd_boolean
+static bool
 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
 {
-  return (mips_elf_hash_table (info)->is_vxworks
+  return (mips_elf_hash_table (info)->root.target_os == is_vxworks
 	  && bfd_link_pic (info)
 	  && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
 	      || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
@@ -5295,9 +5351,9 @@ is_gott_symbol (struct bfd_link_info *in
    which determines whether the destination function ever requires a
    stub.  */
 
-static bfd_boolean
+static bool
 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
-				     bfd_boolean target_is_16_bit_code_p)
+				     bool target_is_16_bit_code_p)
 {
   /* We specifically ignore branches and jumps from EF_PIC objects,
      where the onus is on the compiler or programmer to perform any
@@ -5305,7 +5361,7 @@ mips_elf_relocation_needs_la25_stub (bfd
      is unnecessary; for example, -mno-shared functions do not use
      the incoming value of $25, and may therefore be called directly.  */
   if (PIC_OBJECT_P (input_bfd))
-    return FALSE;
+    return false;
 
   switch (r_type)
     {
@@ -5318,13 +5374,13 @@ mips_elf_relocation_needs_la25_stub (bfd
     case R_MICROMIPS_PC10_S1:
     case R_MICROMIPS_PC16_S1:
     case R_MICROMIPS_PC23_S2:
-      return TRUE;
+      return true;
 
     case R_MIPS16_26:
       return !target_is_16_bit_code_p;
 
     default:
-      return FALSE;
+      return false;
     }
 }
 
@@ -5368,17 +5424,17 @@ mips_elf_store_contents (reloc_howto_typ
    return status without actually changing CONTENTS.
 */
 
-static bfd_boolean
+static bool
 mips_elf_nullify_got_load (bfd *input_bfd, bfd_byte *contents,
 			   const Elf_Internal_Rela *relocation,
-			   reloc_howto_type *howto, bfd_boolean doit)
+			   reloc_howto_type *howto, bool doit)
 {
   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
   bfd_byte *location = contents + relocation->r_offset;
-  bfd_boolean nullified = TRUE;
+  bool nullified = true;
   bfd_vma x;
 
-  _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
+  _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, false, location);
 
   /* Obtain the current value.  */
   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
@@ -5388,7 +5444,7 @@ mips_elf_nullify_got_load (bfd *input_bf
   if (mips16_reloc_p (r_type)
       && (((x >> 22) & 0x3ff) == 0x3d3				/* LW */
 	  || ((x >> 22) & 0x3ff) == 0x3c7))			/* LD */
-    x = (0x3cd << 22) | (x & (7 << 16)) << 3;			/* LI */
+    x = (0x3cdU << 22) | (x & (7 << 16)) << 3;			/* LI */
   else if (micromips_reloc_p (r_type)
 	   && ((x >> 26) & 0x37) == 0x37)			/* LW/LD */
     x = (0xc << 26) | (x & (0x1f << 21));			/* ADDIU */
@@ -5396,13 +5452,13 @@ mips_elf_nullify_got_load (bfd *input_bf
 	   || ((x >> 26) & 0x3f) == 0x37)			/* LD */
     x = (0x9 << 26) | (x & (0x1f << 16));			/* ADDIU */
   else
-    nullified = FALSE;
+    nullified = false;
 
   /* Put the value into the output.  */
   if (doit && nullified)
     mips_elf_store_contents (howto, relocation, input_bfd, contents, x);
 
-  _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, FALSE, location);
+  _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, false, location);
 
   return nullified;
 }
@@ -5429,8 +5485,8 @@ mips_elf_calculate_relocation (bfd *abfd
 			       Elf_Internal_Sym *local_syms,
 			       asection **local_sections, bfd_vma *valuep,
 			       const char **namep,
-			       bfd_boolean *cross_mode_jump_p,
-			       bfd_boolean save_addend)
+			       bool *cross_mode_jump_p,
+			       bool save_addend)
 {
   /* The eventual value we will return.  */
   bfd_vma value;
@@ -5455,28 +5511,28 @@ mips_elf_calculate_relocation (bfd *abfd
   struct mips_elf_link_hash_entry *h = NULL;
   /* TRUE if the symbol referred to by this relocation is a local
      symbol.  */
-  bfd_boolean local_p, was_local_p;
+  bool local_p, was_local_p;
   /* TRUE if the symbol referred to by this relocation is a section
      symbol.  */
-  bfd_boolean section_p = FALSE;
+  bool section_p = false;
   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
-  bfd_boolean gp_disp_p = FALSE;
+  bool gp_disp_p = false;
   /* TRUE if the symbol referred to by this relocation is
      "__gnu_local_gp".  */
-  bfd_boolean gnu_local_gp_p = FALSE;
+  bool gnu_local_gp_p = false;
   Elf_Internal_Shdr *symtab_hdr;
   size_t extsymoff;
   unsigned long r_symndx;
   int r_type;
   /* TRUE if overflow occurred during the calculation of the
      relocation value.  */
-  bfd_boolean overflowed_p;
+  bool overflowed_p;
   /* TRUE if this relocation refers to a MIPS16 function.  */
-  bfd_boolean target_is_16_bit_code_p = FALSE;
-  bfd_boolean target_is_micromips_code_p = FALSE;
+  bool target_is_16_bit_code_p = false;
+  bool target_is_micromips_code_p = false;
   struct mips_elf_link_hash_table *htab;
   bfd *dynobj;
-  bfd_boolean resolved_to_zero;
+  bool resolved_to_zero;
 
   dynobj = elf_hash_table (info)->dynobj;
   htab = mips_elf_hash_table (info);
@@ -5490,7 +5546,7 @@ mips_elf_calculate_relocation (bfd *abfd
        + relocation->r_offset);
 
   /* Assume that there will be no overflow.  */
-  overflowed_p = FALSE;
+  overflowed_p = false;
 
   /* Figure out whether or not the symbol is local, and get the offset
      used in the array of hash table entries.  */
@@ -5510,7 +5566,7 @@ mips_elf_calculate_relocation (bfd *abfd
   /* Figure out the value of the symbol.  */
   if (local_p)
     {
-      bfd_boolean micromips_p = MICROMIPS_P (abfd);
+      bool micromips_p = MICROMIPS_P (abfd);
       Elf_Internal_Sym *sym;
 
       sym = local_syms + r_symndx;
@@ -5585,12 +5641,12 @@ mips_elf_calculate_relocation (bfd *abfd
 	  if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
 	    return bfd_reloc_notsupported;
 
-	  gp_disp_p = TRUE;
+	  gp_disp_p = true;
 	}
       /* See if this is the special _gp symbol.  Note that such a
 	 symbol must always be a global symbol.  */
       else if (strcmp (*namep, "__gnu_local_gp") == 0)
-	gnu_local_gp_p = TRUE;
+	gnu_local_gp_p = true;
 
 
       /* If this symbol is defined, calculate its address.  Note that
@@ -5644,11 +5700,12 @@ mips_elf_calculate_relocation (bfd *abfd
 	}
       else
 	{
-	  bfd_boolean reject_undefined
-	    = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
+          bool reject_undefined
+	    = ((info->unresolved_syms_in_objects == RM_DIAGNOSE
+		&& !info->warn_unresolved_syms)
 	       || ELF_ST_VISIBILITY (h->root.other) != STV_DEFAULT);
 
-	  (*info->callbacks->undefined_symbol)
+	  info->callbacks->undefined_symbol
 	    (info, h->root.root.root.string, input_bfd,
 	     input_section, relocation->r_offset, reject_undefined);
 
@@ -5708,7 +5765,7 @@ mips_elf_calculate_relocation (bfd *abfd
 
       symbol = sec->output_section->vma + sec->output_offset + value;
       /* The target is 16-bit, but the stub isn't.  */
-      target_is_16_bit_code_p = FALSE;
+      target_is_16_bit_code_p = false;
     }
   /* If this is a MIPS16 call with a stub, that is made through the PLT or
      to a standard MIPS function, we need to redirect the call to the stub.
@@ -5778,7 +5835,7 @@ mips_elf_calculate_relocation (bfd *abfd
 	   && h->root.plt.plist->comp_offset != MINUS_ONE
 	   && h->root.plt.plist->mips_offset != MINUS_ONE)
     {
-      bfd_boolean micromips_p = MICROMIPS_P (abfd);
+      bool micromips_p = MICROMIPS_P (abfd);
 
       sec = htab->root.splt;
       symbol = (sec->output_section->vma
@@ -5839,8 +5896,10 @@ mips_elf_calculate_relocation (bfd *abfd
     case R_MICROMIPS_CALL_LO16:
       if (resolved_to_zero
 	  && !bfd_link_relocatable (info)
+	  && bfd_reloc_offset_in_range (howto, input_bfd, input_section,
+					relocation->r_offset)
 	  && mips_elf_nullify_got_load (input_bfd, contents,
-					relocation, howto, TRUE))
+					relocation, howto, true))
 	return bfd_reloc_continue;
 
       /* Fall through.  */
@@ -5854,7 +5913,7 @@ mips_elf_calculate_relocation (bfd *abfd
 	{
 	  /* Redirect to the special `__gnu_absolute_zero' symbol.  */
 	  h = mips_elf_link_hash_lookup (htab, "__gnu_absolute_zero",
-					 FALSE, FALSE, FALSE);
+					 false, false, false);
 	  BFD_ASSERT (h != NULL);
 	}
       break;
@@ -5921,7 +5980,7 @@ mips_elf_calculate_relocation (bfd *abfd
 	{
 	  /* On VxWorks, CALL relocations should refer to the .got.plt
 	     entry, which is initialized to point at the PLT stub.  */
-	  if (htab->is_vxworks
+	  if (htab->root.target_os == is_vxworks
 	      && (call_hi16_reloc_p (r_type)
 		  || call_lo16_reloc_p (r_type)
 		  || call16_reloc_p (r_type)))
@@ -5941,7 +6000,7 @@ mips_elf_calculate_relocation (bfd *abfd
 		MIPS_ELF_PUT_WORD (dynobj, symbol, htab->root.sgot->contents + g);
 	    }
 	}
-      else if (!htab->is_vxworks
+      else if (htab->root.target_os != is_vxworks
 	       && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
 	/* The calculation below does not involve "g".  */
 	break;
@@ -5966,7 +6025,7 @@ mips_elf_calculate_relocation (bfd *abfd
       bfd_byte *loc;
       asection *s;
 
-      s = mips_elf_rel_dyn_section (info, FALSE);
+      s = mips_elf_rel_dyn_section (info, false);
       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
 
       outrel.r_offset = (input_section->output_section->vma
@@ -6198,21 +6257,24 @@ mips_elf_calculate_relocation (bfd *abfd
     case R_MIPS_GPREL16:
     case R_MICROMIPS_GPREL7_S2:
     case R_MICROMIPS_GPREL16:
-      /* Only sign-extend the addend if it was extracted from the
-	 instruction.  If the addend was separate, leave it alone,
-	 otherwise we may lose significant bits.  */
-      if (howto->partial_inplace)
-	addend = _bfd_mips_elf_sign_extend (addend, 16);
-      value = symbol + addend - gp;
-      /* If the symbol was local, any earlier relocatable links will
-	 have adjusted its addend with the gp offset, so compensate
-	 for that now.  Don't do it for symbols forced local in this
-	 link, though, since they won't have had the gp offset applied
-	 to them before.  */
-      if (was_local_p)
-	value += gp0;
-      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
-	overflowed_p = mips_elf_overflow_p (value, 16);
+      {
+	int bits = howto->bitsize + howto->rightshift;
+	/* Only sign-extend the addend if it was extracted from the
+	   instruction.  If the addend was separate, leave it alone,
+	   otherwise we may lose significant bits.  */
+	if (howto->partial_inplace)
+	  addend = _bfd_mips_elf_sign_extend (addend, bits);
+	value = symbol + addend - gp;
+	/* If the symbol was local, any earlier relocatable links will
+	   have adjusted its addend with the gp offset, so compensate
+	   for that now.  Don't do it for symbols forced local in this
+	   link, though, since they won't have had the gp offset applied
+	   to them before.  */
+	if (was_local_p)
+	  value += gp0;
+	if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
+	  overflowed_p = mips_elf_overflow_p (value, bits);
+      }
       break;
 
     case R_MIPS16_GOT16:
@@ -6223,7 +6285,7 @@ mips_elf_calculate_relocation (bfd *abfd
     case R_MICROMIPS_CALL16:
       /* VxWorks does not have separate local and global semantics for
 	 R_MIPS*_GOT16; every relocation evaluates to "G".  */
-      if (!htab->is_vxworks && local_p)
+      if (htab->root.target_os != is_vxworks && local_p)
 	{
 	  value = mips_elf_got16_entry (abfd, input_bfd, info,
 					symbol + addend, !was_local_p);
@@ -6526,13 +6588,13 @@ mips_elf_calculate_relocation (bfd *abfd
 
    Returns FALSE if anything goes wrong.  */
 
-static bfd_boolean
+static bool
 mips_elf_perform_relocation (struct bfd_link_info *info,
 			     reloc_howto_type *howto,
 			     const Elf_Internal_Rela *relocation,
 			     bfd_vma value, bfd *input_bfd,
 			     asection *input_section, bfd_byte *contents,
-			     bfd_boolean cross_mode_jump_p)
+			     bool cross_mode_jump_p)
 {
   bfd_vma x;
   bfd_byte *location;
@@ -6541,7 +6603,7 @@ mips_elf_perform_relocation (struct bfd_
   /* Figure out where the relocation is occurring.  */
   location = contents + relocation->r_offset;
 
-  _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
+  _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, false, location);
 
   /* Obtain the current value.  */
   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
@@ -6564,12 +6626,12 @@ mips_elf_perform_relocation (struct bfd_
 	  info->callbacks->einfo
 	    (_("%X%H: unsupported JALX to the same ISA mode\n"),
 	     input_bfd, input_section, relocation->r_offset);
-	  return TRUE;
+	  return true;
 	}
     }
   if (cross_mode_jump_p && jal_reloc_p (r_type))
     {
-      bfd_boolean ok;
+      bool ok;
       bfd_vma opcode = x >> 26;
       bfd_vma jalx_opcode;
 
@@ -6598,15 +6660,15 @@ mips_elf_perform_relocation (struct bfd_
 	    (_("%X%H: unsupported jump between ISA modes; "
 	       "consider recompiling with interlinking enabled\n"),
 	     input_bfd, input_section, relocation->r_offset);
-	  return TRUE;
+	  return true;
 	}
 
       /* Make this the JALX opcode.  */
-      x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
+      x = (x & ~(0x3fu << 26)) | (jalx_opcode << 26);
     }
   else if (cross_mode_jump_p && b_reloc_p (r_type))
     {
-      bfd_boolean ok = FALSE;
+      bool ok = false;
       bfd_vma opcode = x >> 16;
       bfd_vma jalx_opcode = 0;
       bfd_vma sign_bit = 0;
@@ -6643,7 +6705,7 @@ mips_elf_perform_relocation (struct bfd_
 		(_("%X%H: cannot convert branch between ISA modes "
 		   "to JALX: relocation out of range\n"),
 		 input_bfd, input_section, relocation->r_offset);
-	      return TRUE;
+	      return true;
 	    }
 
 	  /* Make this the JALX opcode.  */
@@ -6654,7 +6716,7 @@ mips_elf_perform_relocation (struct bfd_
 	  info->callbacks->einfo
 	    (_("%X%H: unsupported branch between ISA modes\n"),
 	     input_bfd, input_section, relocation->r_offset);
-	  return TRUE;
+	  return true;
 	}
     }
 
@@ -6700,7 +6762,7 @@ mips_elf_perform_relocation (struct bfd_
   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
 			       location);
 
-  return TRUE;
+  return true;
 }
 
 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
@@ -6708,7 +6770,7 @@ mips_elf_perform_relocation (struct bfd_
    dynamic relocation.  The ADDENDP is adjusted if necessary; the
    caller should store the result in place of the original addend.  */
 
-static bfd_boolean
+static bool
 mips_elf_create_dynamic_relocation (bfd *output_bfd,
 				    struct bfd_link_info *info,
 				    const Elf_Internal_Rela *rel,
@@ -6721,7 +6783,7 @@ mips_elf_create_dynamic_relocation (bfd
   bfd *dynobj;
   int r_type;
   long indx;
-  bfd_boolean defined_p;
+  bool defined_p;
   struct mips_elf_link_hash_table *htab;
 
   htab = mips_elf_hash_table (info);
@@ -6729,7 +6791,7 @@ mips_elf_create_dynamic_relocation (bfd
 
   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
   dynobj = elf_hash_table (info)->dynobj;
-  sreloc = mips_elf_rel_dyn_section (info, FALSE);
+  sreloc = mips_elf_rel_dyn_section (info, false);
   BFD_ASSERT (sreloc != NULL);
   BFD_ASSERT (sreloc->contents != NULL);
   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
@@ -6747,7 +6809,7 @@ mips_elf_create_dynamic_relocation (bfd
 
   if (outrel[0].r_offset == MINUS_ONE)
     /* The relocation field has been deleted.  */
-    return TRUE;
+    return true;
 
   if (outrel[0].r_offset == MINUS_TWO)
     {
@@ -6755,14 +6817,15 @@ mips_elf_create_dynamic_relocation (bfd
 	 some sort.  Functions like _bfd_elf_write_section_eh_frame expect
 	 the field to be fully relocated, so add in the symbol's value.  */
       *addendp += symbol;
-      return TRUE;
+      return true;
     }
 
   /* We must now calculate the dynamic symbol table index to use
      in the relocation.  */
   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
     {
-      BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
+      BFD_ASSERT (htab->root.target_os == is_vxworks
+		  || h->global_got_area != GGA_NONE);
       indx = h->root.dynindx;
       if (SGI_COMPAT (output_bfd))
 	defined_p = h->root.def_regular;
@@ -6771,7 +6834,7 @@ mips_elf_create_dynamic_relocation (bfd
 	   relocation field.  It therefore treats relocs against
 	   defined symbols in the same way as relocs against
 	   undefined symbols.  */
-	defined_p = FALSE;
+	defined_p = false;
     }
   else
     {
@@ -6780,7 +6843,7 @@ mips_elf_create_dynamic_relocation (bfd
       else if (sec == NULL || sec->owner == NULL)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       else
 	{
@@ -6811,7 +6874,7 @@ mips_elf_create_dynamic_relocation (bfd
 	 against STN_UNDEF have no effect.  */
       if (!SGI_COMPAT (output_bfd))
 	indx = 0;
-      defined_p = TRUE;
+      defined_p = true;
     }
 
   /* If the relocation was previously an absolute relocation and
@@ -6821,7 +6884,7 @@ mips_elf_create_dynamic_relocation (bfd
   if (defined_p && r_type != R_MIPS_REL32)
     *addendp += symbol;
 
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     /* VxWorks uses non-relative relocations for this.  */
     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
   else
@@ -6867,7 +6930,7 @@ mips_elf_create_dynamic_relocation (bfd
 	 (sreloc->contents
 	  + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
     }
-  else if (htab->is_vxworks)
+  else if (htab->root.target_os == is_vxworks)
     {
       /* VxWorks uses RELA rather than REL dynamic relocations.  */
       outrel[0].r_addend = *addendp;
@@ -6926,7 +6989,7 @@ mips_elf_create_dynamic_relocation (bfd
   if (MIPS_ELF_READONLY_SECTION (input_section))
     info->flags |= DF_TEXTREL;
 
-  return TRUE;
+  return true;
 }
 
 /* Return the MACH for a MIPS e_flags value.  */
@@ -6936,104 +6999,107 @@ _bfd_elf_mips_mach (flagword flags)
 {
   switch (flags & EF_MIPS_MACH)
     {
-    case E_MIPS_MACH_3900:
+    case EF_MIPS_MACH_3900:
       return bfd_mach_mips3900;
 
-    case E_MIPS_MACH_4010:
+    case EF_MIPS_MACH_4010:
       return bfd_mach_mips4010;
 
-    case E_MIPS_MACH_4100:
+    case EF_MIPS_MACH_ALLEGREX:
+      return bfd_mach_mips_allegrex;
+
+    case EF_MIPS_MACH_4100:
       return bfd_mach_mips4100;
 
-    case E_MIPS_MACH_4111:
+    case EF_MIPS_MACH_4111:
       return bfd_mach_mips4111;
 
-    case E_MIPS_MACH_4120:
+    case EF_MIPS_MACH_4120:
       return bfd_mach_mips4120;
 
-    case E_MIPS_MACH_4650:
+    case EF_MIPS_MACH_4650:
       return bfd_mach_mips4650;
 
-    case E_MIPS_MACH_5400:
+    case EF_MIPS_MACH_5400:
       return bfd_mach_mips5400;
 
-    case E_MIPS_MACH_5500:
+    case EF_MIPS_MACH_5500:
       return bfd_mach_mips5500;
 
-    case E_MIPS_MACH_5900:
+    case EF_MIPS_MACH_5900:
       return bfd_mach_mips5900;
 
-    case E_MIPS_MACH_9000:
+    case EF_MIPS_MACH_9000:
       return bfd_mach_mips9000;
 
-    case E_MIPS_MACH_SB1:
+    case EF_MIPS_MACH_SB1:
       return bfd_mach_mips_sb1;
 
-    case E_MIPS_MACH_LS2E:
+    case EF_MIPS_MACH_LS2E:
       return bfd_mach_mips_loongson_2e;
 
-    case E_MIPS_MACH_LS2F:
+    case EF_MIPS_MACH_LS2F:
       return bfd_mach_mips_loongson_2f;
 
-    case E_MIPS_MACH_GS464:
+    case EF_MIPS_MACH_GS464:
       return bfd_mach_mips_gs464;
 
-    case E_MIPS_MACH_GS464E:
+    case EF_MIPS_MACH_GS464E:
       return bfd_mach_mips_gs464e;
 
-    case E_MIPS_MACH_GS264E:
+    case EF_MIPS_MACH_GS264E:
       return bfd_mach_mips_gs264e;
 
-    case E_MIPS_MACH_OCTEON3:
+    case EF_MIPS_MACH_OCTEON3:
       return bfd_mach_mips_octeon3;
 
-    case E_MIPS_MACH_OCTEON2:
+    case EF_MIPS_MACH_OCTEON2:
       return bfd_mach_mips_octeon2;
 
-    case E_MIPS_MACH_OCTEON:
+    case EF_MIPS_MACH_OCTEON:
       return bfd_mach_mips_octeon;
 
-    case E_MIPS_MACH_XLR:
+    case EF_MIPS_MACH_XLR:
       return bfd_mach_mips_xlr;
 
-    case E_MIPS_MACH_IAMR2:
+    case EF_MIPS_MACH_IAMR2:
       return bfd_mach_mips_interaptiv_mr2;
 
     default:
       switch (flags & EF_MIPS_ARCH)
 	{
 	default:
-	case E_MIPS_ARCH_1:
+	case EF_MIPS_ARCH_1:
 	  return bfd_mach_mips3000;
 
-	case E_MIPS_ARCH_2:
+	case EF_MIPS_ARCH_2:
 	  return bfd_mach_mips6000;
 
-	case E_MIPS_ARCH_3:
+	case EF_MIPS_ARCH_3:
 	  return bfd_mach_mips4000;
 
-	case E_MIPS_ARCH_4:
+	case EF_MIPS_ARCH_4:
 	  return bfd_mach_mips8000;
 
-	case E_MIPS_ARCH_5:
+	case EF_MIPS_ARCH_5:
 	  return bfd_mach_mips5;
 
-	case E_MIPS_ARCH_32:
+	case EF_MIPS_ARCH_32:
 	  return bfd_mach_mipsisa32;
 
-	case E_MIPS_ARCH_64:
+	case EF_MIPS_ARCH_64:
 	  return bfd_mach_mipsisa64;
 
-	case E_MIPS_ARCH_32R2:
+	case EF_MIPS_ARCH_32R2:
 	  return bfd_mach_mipsisa32r2;
 
-	case E_MIPS_ARCH_64R2:
+	case EF_MIPS_ARCH_64R2:
 	  return bfd_mach_mipsisa64r2;
 
-	case E_MIPS_ARCH_32R6:
+	case EF_MIPS_ARCH_32R6:
 	  return bfd_mach_mipsisa32r6;
 
-	case E_MIPS_ARCH_64R6:
+	case EF_MIPS_ARCH_64R6:
 	  return bfd_mach_mipsisa64r6;
 	}
     }
@@ -7043,7 +7109,7 @@ _bfd_elf_mips_mach (flagword flags)
 
 /* Return printable name for ABI.  */
 
-static INLINE char *
+static inline char *
 elf_mips_abi_name (bfd *abfd)
 {
   flagword flags;
@@ -7058,13 +7124,13 @@ elf_mips_abi_name (bfd *abfd)
 	return "64";
       else
 	return "none";
-    case E_MIPS_ABI_O32:
+    case EF_MIPS_ABI_O32:
       return "O32";
-    case E_MIPS_ABI_O64:
+    case EF_MIPS_ABI_O64:
       return "O64";
-    case E_MIPS_ABI_EABI32:
+    case EF_MIPS_ABI_EABI32:
       return "EABI32";
-    case E_MIPS_ABI_EABI64:
+    case EF_MIPS_ABI_EABI64:
       return "EABI64";
     default:
       return "unknown abi";
@@ -7077,15 +7143,21 @@ elf_mips_abi_name (bfd *abfd)
    faster assembler code.  This is what we use for the small common
    section.  This approach is copied from ecoff.c.  */
 static asection mips_elf_scom_section;
-static asymbol mips_elf_scom_symbol;
-static asymbol *mips_elf_scom_symbol_ptr;
+static const asymbol mips_elf_scom_symbol =
+  GLOBAL_SYM_INIT (".scommon", &mips_elf_scom_section);
+static asection mips_elf_scom_section =
+  BFD_FAKE_SECTION (mips_elf_scom_section, &mips_elf_scom_symbol,
+		    ".scommon", 0, SEC_IS_COMMON | SEC_SMALL_DATA);
 
 /* MIPS ELF also uses an acommon section, which represents an
    allocated common symbol which may be overridden by a
    definition in a shared library.  */
 static asection mips_elf_acom_section;
-static asymbol mips_elf_acom_symbol;
-static asymbol *mips_elf_acom_symbol_ptr;
+static const asymbol mips_elf_acom_symbol =
+  GLOBAL_SYM_INIT (".acommon", &mips_elf_acom_section);
+static asection mips_elf_acom_section =
+  BFD_FAKE_SECTION (mips_elf_acom_section, &mips_elf_acom_symbol,
+		    ".acommon", 0, SEC_ALLOC);
 
 /* This is used for both the 32-bit and the 64-bit ABI.  */
 
@@ -7104,44 +7176,19 @@ _bfd_mips_elf_symbol_processing (bfd *ab
 	 either resolve these symbols to something in a shared
 	 library, or it can just leave them here.  For our purposes,
 	 we can consider these symbols to be in a new section.  */
-      if (mips_elf_acom_section.name == NULL)
-	{
-	  /* Initialize the acommon section.  */
-	  mips_elf_acom_section.name = ".acommon";
-	  mips_elf_acom_section.flags = SEC_ALLOC;
-	  mips_elf_acom_section.output_section = &mips_elf_acom_section;
-	  mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
-	  mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
-	  mips_elf_acom_symbol.name = ".acommon";
-	  mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
-	  mips_elf_acom_symbol.section = &mips_elf_acom_section;
-	  mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
-	}
       asym->section = &mips_elf_acom_section;
       break;
 
     case SHN_COMMON:
       /* Common symbols less than the GP size are automatically
-	 treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
+	 treated as SHN_MIPS_SCOMMON symbols, with some exceptions.  */
       if (asym->value > elf_gp_size (abfd)
 	  || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
-	  || IRIX_COMPAT (abfd) == ict_irix6)
+	  || IRIX_COMPAT (abfd) == ict_irix6
+	  || strcmp (asym->name, "__gnu_lto_slim") == 0)
 	break;
       /* Fall through.  */
     case SHN_MIPS_SCOMMON:
-      if (mips_elf_scom_section.name == NULL)
-	{
-	  /* Initialize the small common section.  */
-	  mips_elf_scom_section.name = ".scommon";
-	  mips_elf_scom_section.flags = SEC_IS_COMMON;
-	  mips_elf_scom_section.output_section = &mips_elf_scom_section;
-	  mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
-	  mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
-	  mips_elf_scom_symbol.name = ".scommon";
-	  mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
-	  mips_elf_scom_symbol.section = &mips_elf_scom_section;
-	  mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
-	}
       asym->section = &mips_elf_scom_section;
       asym->value = elfsym->internal_elf_sym.st_size;
       break;
@@ -7238,9 +7285,9 @@ _bfd_mips_elf_eh_frame_address_size (bfd
 {
   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
     return 8;
-  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
+  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == EF_MIPS_ABI_EABI64)
     {
-      bfd_boolean long32_p, long64_p;
+      bool long32_p, long64_p;
 
       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
@@ -7276,10 +7323,10 @@ _bfd_mips_elf_eh_frame_address_size (bfd
    We can work around this problem by giving names to local section symbols.
    This is also what the MIPSpro tools do.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
 {
-  return SGI_COMPAT (abfd);
+  return elf_elfheader (abfd)->e_type == ET_REL && SGI_COMPAT (abfd);
 }
 
 /* Work over a section just before writing it out.  This routine is
@@ -7287,7 +7334,7 @@ _bfd_mips_elf_name_local_section_symbols
    sections that need the SHF_MIPS_GPREL flag by name; there has to be
    a better way.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
 {
   if (hdr->sh_type == SHT_MIPS_REGINFO
@@ -7305,16 +7352,16 @@ _bfd_mips_elf_section_processing (bfd *a
 	     abfd, (uint64_t) sizeof (Elf32_External_RegInfo),
 	     (uint64_t) hdr->sh_size);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       if (bfd_seek (abfd,
 		    hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
 		    SEEK_SET) != 0)
-	return FALSE;
+	return false;
       H_PUT_32 (abfd, elf_gp (abfd), buf);
-      if (bfd_bwrite (buf, 4, abfd) != 4)
-	return FALSE;
+      if (bfd_write (buf, 4, abfd) != 4)
+	return false;
     }
 
   if (hdr->sh_type == SHT_MIPS_OPTIONS
@@ -7359,10 +7406,10 @@ _bfd_mips_elf_section_processing (bfd *a
 			     + sizeof (Elf_External_Options)
 			     + (sizeof (Elf64_External_RegInfo) - 8)),
 			     SEEK_SET) != 0)
-		return FALSE;
+		return false;
 	      H_PUT_64 (abfd, elf_gp (abfd), buf);
-	      if (bfd_bwrite (buf, 8, abfd) != 8)
-		return FALSE;
+	      if (bfd_write (buf, 8, abfd) != 8)
+		return false;
 	    }
 	  else if (intopt.kind == ODK_REGINFO)
 	    {
@@ -7374,10 +7421,10 @@ _bfd_mips_elf_section_processing (bfd *a
 			     + sizeof (Elf_External_Options)
 			     + (sizeof (Elf32_External_RegInfo) - 4)),
 			    SEEK_SET) != 0)
-		return FALSE;
+		return false;
 	      H_PUT_32 (abfd, elf_gp (abfd), buf);
-	      if (bfd_bwrite (buf, 4, abfd) != 4)
-		return FALSE;
+	      if (bfd_write (buf, 4, abfd) != 4)
+		return false;
 	    }
 	  l += intopt.size;
 	}
@@ -7415,17 +7462,14 @@ _bfd_mips_elf_section_processing (bfd *a
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Handle a MIPS specific section when reading an object file.  This
    is called when elfcode.h finds a section with an unknown type.
-   This routine supports both the 32-bit and 64-bit ELF ABI.
-
-   FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
-   how to.  */
+   This routine supports both the 32-bit and 64-bit ELF ABI.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_section_from_shdr (bfd *abfd,
 				 Elf_Internal_Shdr *hdr,
 				 const char *name,
@@ -7442,82 +7486,87 @@ _bfd_mips_elf_section_from_shdr (bfd *ab
     {
     case SHT_MIPS_LIBLIST:
       if (strcmp (name, ".liblist") != 0)
-	return FALSE;
+	return false;
       break;
     case SHT_MIPS_MSYM:
       if (strcmp (name, ".msym") != 0)
-	return FALSE;
+	return false;
       break;
     case SHT_MIPS_CONFLICT:
       if (strcmp (name, ".conflict") != 0)
-	return FALSE;
+	return false;
       break;
     case SHT_MIPS_GPTAB:
-      if (! CONST_STRNEQ (name, ".gptab."))
-	return FALSE;
+      if (! startswith (name, ".gptab."))
+	return false;
       break;
     case SHT_MIPS_UCODE:
       if (strcmp (name, ".ucode") != 0)
-	return FALSE;
+	return false;
       break;
     case SHT_MIPS_DEBUG:
       if (strcmp (name, ".mdebug") != 0)
-	return FALSE;
+	return false;
       flags = SEC_DEBUGGING;
       break;
     case SHT_MIPS_REGINFO:
       if (strcmp (name, ".reginfo") != 0
 	  || hdr->sh_size != sizeof (Elf32_External_RegInfo))
-	return FALSE;
+	return false;
       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
       break;
     case SHT_MIPS_IFACE:
       if (strcmp (name, ".MIPS.interfaces") != 0)
-	return FALSE;
+	return false;
       break;
     case SHT_MIPS_CONTENT:
-      if (! CONST_STRNEQ (name, ".MIPS.content"))
-	return FALSE;
+      if (! startswith (name, ".MIPS.content"))
+	return false;
       break;
     case SHT_MIPS_OPTIONS:
       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
-	return FALSE;
+	return false;
       break;
     case SHT_MIPS_ABIFLAGS:
       if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
-	return FALSE;
+	return false;
       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
       break;
     case SHT_MIPS_DWARF:
-      if (! CONST_STRNEQ (name, ".debug_")
-	  && ! CONST_STRNEQ (name, ".zdebug_"))
-	return FALSE;
+      if (! startswith (name, ".debug_")
+         && ! startswith (name, ".gnu.debuglto_.debug_")
+         && ! startswith (name, ".zdebug_")
+         && ! startswith (name, ".gnu.debuglto_.zdebug_"))
+	return false;
       break;
     case SHT_MIPS_SYMBOL_LIB:
       if (strcmp (name, ".MIPS.symlib") != 0)
-	return FALSE;
+	return false;
       break;
     case SHT_MIPS_EVENTS:
-      if (! CONST_STRNEQ (name, ".MIPS.events")
-	  && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
-	return FALSE;
+      if (! startswith (name, ".MIPS.events")
+	  && ! startswith (name, ".MIPS.post_rel"))
+	return false;
       break;
     case SHT_MIPS_XHASH:
       if (strcmp (name, ".MIPS.xhash") != 0)
-	return FALSE;
+	return false;
     default:
       break;
     }
 
   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
+    return false;
+
+  if (hdr->sh_flags & SHF_MIPS_GPREL)
+    flags |= SEC_SMALL_DATA;
 
   if (flags)
     {
       if (!bfd_set_section_flags (hdr->bfd_section,
 				  (bfd_section_flags (hdr->bfd_section)
 				   | flags)))
-	return FALSE;
+	return false;
     }
 
   if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
@@ -7526,12 +7575,12 @@ _bfd_mips_elf_section_from_shdr (bfd *ab
 
       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
 				      &ext, 0, sizeof ext))
-	return FALSE;
+	return false;
       bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
 					&mips_elf_tdata (abfd)->abiflags);
       if (mips_elf_tdata (abfd)->abiflags.version != 0)
-	return FALSE;
-      mips_elf_tdata (abfd)->abiflags_valid = TRUE;
+	return false;
+      mips_elf_tdata (abfd)->abiflags_valid = true;
     }
 
   /* FIXME: We should record sh_info for a .gptab section.  */
@@ -7547,7 +7596,7 @@ _bfd_mips_elf_section_from_shdr (bfd *ab
 
       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
 				      &ext, 0, sizeof ext))
-	return FALSE;
+	return false;
       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
       elf_gp (abfd) = s.ri_gp_value;
     }
@@ -7560,14 +7609,10 @@ _bfd_mips_elf_section_from_shdr (bfd *ab
     {
       bfd_byte *contents, *l, *lend;
 
-      contents = bfd_malloc (hdr->sh_size);
-      if (contents == NULL)
-	return FALSE;
-      if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
-				      0, hdr->sh_size))
+      if (!bfd_malloc_and_get_section (abfd, hdr->bfd_section, &contents))
 	{
 	  free (contents);
-	  return FALSE;
+	  return false;
 	}
       l = contents;
       lend = contents + hdr->sh_size;
@@ -7579,48 +7624,57 @@ _bfd_mips_elf_section_from_shdr (bfd *ab
 					&intopt);
 	  if (intopt.size < sizeof (Elf_External_Options))
 	    {
+	    bad_opt:
 	      _bfd_error_handler
 		/* xgettext:c-format */
-		(_("%pB: warning: bad `%s' option size %u smaller than"
-		   " its header"),
-		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
+		(_("%pB: warning: truncated `%s' option"),
+		 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd));
 	      break;
 	    }
-	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
+	  if (intopt.kind == ODK_REGINFO)
 	    {
-	      Elf64_Internal_RegInfo intreg;
-
-	      bfd_mips_elf64_swap_reginfo_in
-		(abfd,
-		 ((Elf64_External_RegInfo *)
-		  (l + sizeof (Elf_External_Options))),
-		 &intreg);
-	      elf_gp (abfd) = intreg.ri_gp_value;
-	    }
-	  else if (intopt.kind == ODK_REGINFO)
-	    {
-	      Elf32_RegInfo intreg;
-
-	      bfd_mips_elf32_swap_reginfo_in
-		(abfd,
-		 ((Elf32_External_RegInfo *)
-		  (l + sizeof (Elf_External_Options))),
-		 &intreg);
-	      elf_gp (abfd) = intreg.ri_gp_value;
+	      if (ABI_64_P (abfd))
+		{
+		  Elf64_Internal_RegInfo intreg;
+		  size_t needed = (sizeof (Elf_External_Options)
+				   + sizeof (Elf64_External_RegInfo));
+		  if (intopt.size < needed || (size_t) (lend - l) < needed)
+		    goto bad_opt;
+		  bfd_mips_elf64_swap_reginfo_in
+		    (abfd,
+		     ((Elf64_External_RegInfo *)
+		      (l + sizeof (Elf_External_Options))),
+		     &intreg);
+		  elf_gp (abfd) = intreg.ri_gp_value;
+		}
+	      else
+		{
+		  Elf32_RegInfo intreg;
+		  size_t needed = (sizeof (Elf_External_Options)
+				   + sizeof (Elf32_External_RegInfo));
+		  if (intopt.size < needed || (size_t) (lend - l) < needed)
+		    goto bad_opt;
+		  bfd_mips_elf32_swap_reginfo_in
+		    (abfd,
+		     ((Elf32_External_RegInfo *)
+		      (l + sizeof (Elf_External_Options))),
+		     &intreg);
+		  elf_gp (abfd) = intreg.ri_gp_value;
+		}
 	    }
 	  l += intopt.size;
 	}
       free (contents);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the correct type for a MIPS ELF section.  We do this by the
    section name, which is a hack, but ought to work.  This routine is
    used by both the 32-bit and the 64-bit ABI.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
 {
   const char *name = bfd_section_name (sec);
@@ -7633,7 +7687,7 @@ _bfd_mips_elf_fake_sections (bfd *abfd,
     }
   else if (strcmp (name, ".conflict") == 0)
     hdr->sh_type = SHT_MIPS_CONFLICT;
-  else if (CONST_STRNEQ (name, ".gptab."))
+  else if (startswith (name, ".gptab."))
     {
       hdr->sh_type = SHT_MIPS_GPTAB;
       hdr->sh_entsize = sizeof (Elf32_External_gptab);
@@ -7690,7 +7744,7 @@ _bfd_mips_elf_fake_sections (bfd *abfd,
       hdr->sh_type = SHT_MIPS_IFACE;
       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
     }
-  else if (CONST_STRNEQ (name, ".MIPS.content"))
+  else if (startswith (name, ".MIPS.content"))
     {
       hdr->sh_type = SHT_MIPS_CONTENT;
       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
@@ -7702,20 +7756,22 @@ _bfd_mips_elf_fake_sections (bfd *abfd,
       hdr->sh_entsize = 1;
       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
     }
-  else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
+  else if (startswith (name, ".MIPS.abiflags"))
     {
       hdr->sh_type = SHT_MIPS_ABIFLAGS;
       hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
     }
-  else if (CONST_STRNEQ (name, ".debug_")
-	   || CONST_STRNEQ (name, ".zdebug_"))
+  else if (startswith (name, ".debug_")
+	   || startswith (name, ".gnu.debuglto_.debug_")
+	   || startswith (name, ".zdebug_")
+	   || startswith (name, ".gnu.debuglto_.zdebug_"))
     {
       hdr->sh_type = SHT_MIPS_DWARF;
 
       /* Irix facilities such as libexc expect a single .debug_frame
 	 per executable, the system ones have NOSTRIP set and the linker
 	 doesn't merge sections with different flags so ...  */
-      if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
+      if (SGI_COMPAT (abfd) && startswith (name, ".debug_frame"))
 	hdr->sh_flags |= SHF_MIPS_NOSTRIP;
     }
   else if (strcmp (name, ".MIPS.symlib") == 0)
@@ -7724,8 +7780,8 @@ _bfd_mips_elf_fake_sections (bfd *abfd,
       /* The sh_link and sh_info fields are set in
 	 final_write_processing.  */
     }
-  else if (CONST_STRNEQ (name, ".MIPS.events")
-	   || CONST_STRNEQ (name, ".MIPS.post_rel"))
+  else if (startswith (name, ".MIPS.events")
+	   || startswith (name, ".MIPS.post_rel"))
     {
       hdr->sh_type = SHT_MIPS_EVENTS;
       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
@@ -7750,7 +7806,7 @@ _bfd_mips_elf_fake_sections (bfd *abfd,
    these, and the IRIX ld doesn't like resulting empty RELA sections.
    Thus we create those header only on demand now.  */
 
-  return TRUE;
+  return true;
 }
 
 /* Given a BFD section, try to locate the corresponding ELF section
@@ -7759,27 +7815,27 @@ _bfd_mips_elf_fake_sections (bfd *abfd,
    but for non-PIC objects we will certainly want support for at least
    the .scommon section.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
 					asection *sec, int *retval)
 {
   if (strcmp (bfd_section_name (sec), ".scommon") == 0)
     {
       *retval = SHN_MIPS_SCOMMON;
-      return TRUE;
+      return true;
     }
   if (strcmp (bfd_section_name (sec), ".acommon") == 0)
     {
       *retval = SHN_MIPS_ACOMMON;
-      return TRUE;
+      return true;
     }
-  return FALSE;
+  return false;
 }
 
 /* Hook called by the linker routine which adds symbols from an object
    file.  We must handle the special MIPS section numbers here.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
 			       Elf_Internal_Sym *sym, const char **namep,
 			       flagword *flagsp ATTRIBUTE_UNUSED,
@@ -7791,7 +7847,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd
     {
       /* Skip IRIX5 rld entry name.  */
       *namep = NULL;
-      return TRUE;
+      return true;
     }
 
   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
@@ -7805,22 +7861,23 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd
       && (strcmp (*namep, "_gp_disp") == 0))
     {
       *namep = NULL;
-      return TRUE;
+      return true;
     }
 
   switch (sym->st_shndx)
     {
     case SHN_COMMON:
       /* Common symbols less than the GP size are automatically
-	 treated as SHN_MIPS_SCOMMON symbols.  */
+	 treated as SHN_MIPS_SCOMMON symbols, with some exceptions.  */
       if (sym->st_size > elf_gp_size (abfd)
 	  || ELF_ST_TYPE (sym->st_info) == STT_TLS
-	  || IRIX_COMPAT (abfd) == ict_irix6)
+	  || IRIX_COMPAT (abfd) == ict_irix6
+	  || strcmp (*namep, "__gnu_lto_slim") == 0)
 	break;
       /* Fall through.  */
     case SHN_MIPS_SCOMMON:
       *secp = bfd_make_section_old_way (abfd, ".scommon");
-      (*secp)->flags |= SEC_IS_COMMON;
+      (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
       *valp = sym->st_size;
       break;
 
@@ -7830,16 +7887,16 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd
 	{
 	  asymbol *elf_text_symbol;
 	  asection *elf_text_section;
-	  bfd_size_type amt = sizeof (asection);
+	  size_t amt = sizeof (asection);
 
 	  elf_text_section = bfd_zalloc (abfd, amt);
 	  if (elf_text_section == NULL)
-	    return FALSE;
+	    return false;
 
 	  amt = sizeof (asymbol);
 	  elf_text_symbol = bfd_zalloc (abfd, amt);
 	  if (elf_text_symbol == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Initialize the section.  */
 
@@ -7871,16 +7928,16 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd
 	{
 	  asymbol *elf_data_symbol;
 	  asection *elf_data_section;
-	  bfd_size_type amt = sizeof (asection);
+	  size_t amt = sizeof (asection);
 
 	  elf_data_section = bfd_zalloc (abfd, amt);
 	  if (elf_data_section == NULL)
-	    return FALSE;
+	    return false;
 
 	  amt = sizeof (asymbol);
 	  elf_data_symbol = bfd_zalloc (abfd, amt);
 	  if (elf_data_symbol == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Initialize the section.  */
 
@@ -7920,9 +7977,9 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd
       /* Mark __rld_obj_head as dynamic.  */
       bh = NULL;
       if (! (_bfd_generic_link_add_one_symbol
-	     (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
+	     (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, false,
 	      get_elf_backend_data (abfd)->collect, &bh)))
-	return FALSE;
+	return false;
 
       h = (struct elf_link_hash_entry *) bh;
       h->non_elf = 0;
@@ -7930,9 +7987,9 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd
       h->type = STT_OBJECT;
 
       if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
 
-      mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
+      mips_elf_hash_table (info)->use_rld_obj_head = true;
       mips_elf_hash_table (info)->rld_symbol = h;
     }
 
@@ -7942,7 +7999,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd
   if (ELF_ST_IS_COMPRESSED (sym->st_other))
     ++*valp;
 
-  return TRUE;
+  return true;
 }
 
 /* This hook function is called before the linker writes out a global
@@ -7972,7 +8029,7 @@ _bfd_mips_elf_link_output_symbol_hook
 
 /* Create dynamic sections when linking against a dynamic object.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_entry *h;
@@ -7990,22 +8047,22 @@ _bfd_mips_elf_create_dynamic_sections (b
 
   /* The psABI requires a read-only .dynamic section, but the VxWorks
      EABI doesn't.  */
-  if (!htab->is_vxworks)
+  if (htab->root.target_os != is_vxworks)
     {
       s = bfd_get_linker_section (abfd, ".dynamic");
       if (s != NULL)
 	{
 	  if (!bfd_set_section_flags (s, flags))
-	    return FALSE;
+	    return false;
 	}
     }
 
   /* We need to create .got section.  */
   if (!mips_elf_create_got_section (abfd, info))
-    return FALSE;
+    return false;
 
-  if (! mips_elf_rel_dyn_section (info, TRUE))
-    return FALSE;
+  if (! mips_elf_rel_dyn_section (info, true))
+    return false;
 
   /* Create .stub section.  */
   s = bfd_make_section_anyway_with_flags (abfd,
@@ -8013,7 +8070,7 @@ _bfd_mips_elf_create_dynamic_sections (b
 					  flags | SEC_CODE);
   if (s == NULL
       || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)))
-    return FALSE;
+    return false;
   htab->sstubs = s;
 
   if (!mips_elf_hash_table (info)->use_rld_obj_head
@@ -8024,7 +8081,7 @@ _bfd_mips_elf_create_dynamic_sections (b
 					      flags &~ (flagword) SEC_READONLY);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)))
-	return FALSE;
+	return false;
     }
 
   /* Create .MIPS.xhash section.  */
@@ -8043,8 +8100,8 @@ _bfd_mips_elf_create_dynamic_sections (b
 	  bh = NULL;
 	  if (! (_bfd_generic_link_add_one_symbol
 		 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
-		  NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
-	    return FALSE;
+		  NULL, false, get_elf_backend_data (abfd)->collect, &bh)))
+	    return false;
 
 	  h = (struct elf_link_hash_entry *) bh;
 	  h->mark = 1;
@@ -8053,14 +8110,14 @@ _bfd_mips_elf_create_dynamic_sections (b
 	  h->type = STT_SECTION;
 
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       /* We need to create a .compact_rel section.  */
       if (SGI_COMPAT (abfd))
 	{
 	  if (!mips_elf_create_compact_rel_section (abfd, info))
-	    return FALSE;
+	    return false;
 	}
 
       /* Change alignments of some sections.  */
@@ -8094,8 +8151,8 @@ _bfd_mips_elf_create_dynamic_sections (b
       bh = NULL;
       if (!(_bfd_generic_link_add_one_symbol
 	    (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
-	     NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
-	return FALSE;
+	     NULL, false, get_elf_backend_data (abfd)->collect, &bh)))
+	return false;
 
       h = (struct elf_link_hash_entry *) bh;
       h->non_elf = 0;
@@ -8103,7 +8160,7 @@ _bfd_mips_elf_create_dynamic_sections (b
       h->type = STT_SECTION;
 
       if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	return FALSE;
+	return false;
 
       if (! mips_elf_hash_table (info)->use_rld_obj_head)
 	{
@@ -8117,9 +8174,9 @@ _bfd_mips_elf_create_dynamic_sections (b
 	  name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
 	  bh = NULL;
 	  if (!(_bfd_generic_link_add_one_symbol
-		(info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
+		(info, abfd, name, BSF_GLOBAL, s, 0, NULL, false,
 		 get_elf_backend_data (abfd)->collect, &bh)))
-	    return FALSE;
+	    return false;
 
 	  h = (struct elf_link_hash_entry *) bh;
 	  h->non_elf = 0;
@@ -8127,7 +8184,7 @@ _bfd_mips_elf_create_dynamic_sections (b
 	  h->type = STT_OBJECT;
 
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	  mips_elf_hash_table (info)->rld_symbol = h;
 	}
     }
@@ -8135,21 +8192,21 @@ _bfd_mips_elf_create_dynamic_sections (b
   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
   if (!_bfd_elf_create_dynamic_sections (abfd, info))
-    return FALSE;
+    return false;
 
   /* Do the usual VxWorks handling.  */
-  if (htab->is_vxworks
+  if (htab->root.target_os == is_vxworks
       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Return true if relocation REL against section SEC is a REL rather than
    RELA relocation.  RELOCS is the first relocation in the section and
    ABFD is the bfd that contains SEC.  */
 
-static bfd_boolean
+static bool
 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
 			   const Elf_Internal_Rela *relocs,
 			   const Elf_Internal_Rela *rel)
@@ -8161,7 +8218,7 @@ mips_elf_rel_relocation_p (bfd *abfd, as
      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
   rel_hdr = elf_section_data (sec)->rel.hdr;
   if (rel_hdr == NULL)
-    return FALSE;
+    return false;
   bed = get_elf_backend_data (abfd);
   return ((size_t) (rel - relocs)
 	  < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
@@ -8172,7 +8229,8 @@ mips_elf_rel_relocation_p (bfd *abfd, as
    of the section that REL is against.  */
 
 static bfd_vma
-mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
+mips_elf_read_rel_addend (bfd *abfd, asection *sec,
+			  const Elf_Internal_Rela *rel,
 			  reloc_howto_type *howto, bfd_byte *contents)
 {
   bfd_byte *location;
@@ -8180,13 +8238,16 @@ mips_elf_read_rel_addend (bfd *abfd, con
   bfd_vma addend;
   bfd_vma bytes;
 
+  if (!bfd_reloc_offset_in_range (howto, abfd, sec, rel->r_offset))
+    return 0;
+
   r_type = ELF_R_TYPE (abfd, rel->r_info);
   location = contents + rel->r_offset;
 
   /* Get the addend, which is stored in the input file.  */
-  _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
+  _bfd_mips_elf_reloc_unshuffle (abfd, r_type, false, location);
   bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
-  _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
+  _bfd_mips_elf_reloc_shuffle (abfd, r_type, false, location);
 
   addend = bytes & howto->src_mask;
 
@@ -8204,8 +8265,9 @@ mips_elf_read_rel_addend (bfd *abfd, con
    or false if the LO16 could not be found.  RELEND is the exclusive
    upper bound on the relocations for REL's section.  */
 
-static bfd_boolean
+static bool
 mips_elf_add_lo16_rel_addend (bfd *abfd,
+			      asection *sec,
 			      const Elf_Internal_Rela *rel,
 			      const Elf_Internal_Rela *relend,
 			      bfd_byte *contents, bfd_vma *addend)
@@ -8244,35 +8306,36 @@ mips_elf_add_lo16_rel_addend (bfd *abfd,
      the ABI but not immediately harmful.  */
   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
   if (lo16_relocation == NULL)
-    return FALSE;
+    return false;
 
   /* Obtain the addend kept there.  */
-  lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
-  l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
+  lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, false);
+  l = mips_elf_read_rel_addend (abfd, sec, lo16_relocation, lo16_howto,
+				contents);
 
   l <<= lo16_howto->rightshift;
   l = _bfd_mips_elf_sign_extend (l, 16);
 
   *addend <<= 16;
   *addend += l;
-  return TRUE;
+  return true;
 }
 
 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
    store the contents in *CONTENTS on success.  Assume that *CONTENTS
    already holds the contents if it is nonull on entry.  */
 
-static bfd_boolean
+static bool
 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
 {
   if (*contents)
-    return TRUE;
+    return true;
 
   /* Get cached copy if it exists.  */
   if (elf_section_data (sec)->this_hdr.contents != NULL)
     {
       *contents = elf_section_data (sec)->this_hdr.contents;
-      return TRUE;
+      return true;
     }
 
   return bfd_malloc_and_get_section (abfd, sec, contents);
@@ -8301,7 +8364,7 @@ mips_elf_make_plt_record (bfd *abfd)
    and local GOT entries whose value is zero at static link time will
    retain their value at load time.  */
 
-static bfd_boolean
+static bool
 mips_elf_define_absolute_zero (bfd *abfd, struct bfd_link_info *info,
 			       struct mips_elf_link_hash_table *htab,
 			       unsigned int r_type)
@@ -8319,8 +8382,8 @@ mips_elf_define_absolute_zero (bfd *abfd
   hzero.bh = NULL;
   if (!_bfd_generic_link_add_one_symbol (info, abfd, "__gnu_absolute_zero",
 					 BSF_GLOBAL, bfd_abs_section_ptr, 0,
-					 NULL, FALSE, FALSE, &hzero.bh))
-    return FALSE;
+					 NULL, false, false, &hzero.bh))
+    return false;
 
   BFD_ASSERT (hzero.bh != NULL);
   hzero.eh->size = 0;
@@ -8329,19 +8392,19 @@ mips_elf_define_absolute_zero (bfd *abfd
   hzero.eh->def_regular = 1;
   hzero.eh->non_elf = 0;
 
-  if (!mips_elf_record_global_got_symbol (hzero.eh, abfd, info, TRUE, r_type))
-    return FALSE;
+  if (!mips_elf_record_global_got_symbol (hzero.eh, abfd, info, true, r_type))
+    return false;
 
-  htab->use_absolute_zero = TRUE;
+  htab->use_absolute_zero = true;
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase, and
    allocate space in the global offset table and record the need for
    standard MIPS and compressed procedure linkage table entries.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			    asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -8360,7 +8423,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
   reloc_howto_type *howto;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = mips_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
@@ -8392,7 +8455,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	       " stub section `%s'"),
 	     abfd, name);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx < extsymoff
@@ -8418,7 +8481,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
 					     info->keep_memory);
 	      if (sec_relocs == NULL)
-		return FALSE;
+		return false;
 
 	      rend = sec_relocs + o->reloc_count;
 	      for (r = sec_relocs; r < rend; r++)
@@ -8441,7 +8504,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 		 can easily discard it by setting the SEC_EXCLUDE
 		 flag.  */
 	      sec->flags |= SEC_EXCLUDE;
-	      return TRUE;
+	      return true;
 	    }
 
 	  /* Record this stub in an array of local symbol stubs for
@@ -8459,7 +8522,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	      amt = symcount * sizeof (asection *);
 	      n = bfd_zalloc (abfd, amt);
 	      if (n == NULL)
-		return FALSE;
+		return false;
 	      mips_elf_tdata (abfd)->local_stubs = n;
 	    }
 
@@ -8492,12 +8555,12 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	  if (h->fn_stub != NULL)
 	    {
 	      sec->flags |= SEC_EXCLUDE;
-	      return TRUE;
+	      return true;
 	    }
 
 	  sec->flags |= SEC_KEEP;
 	  h->fn_stub = sec;
-	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
+	  mips_elf_hash_table (info)->mips16_stubs_seen = true;
 	}
     }
   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
@@ -8518,7 +8581,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	       " stub section `%s'"),
 	     abfd, name);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx < extsymoff
@@ -8544,7 +8607,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
 					     info->keep_memory);
 	      if (sec_relocs == NULL)
-		return FALSE;
+		return false;
 
 	      rend = sec_relocs + o->reloc_count;
 	      for (r = sec_relocs; r < rend; r++)
@@ -8567,7 +8630,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 		 can easily discard it by setting the SEC_EXCLUDE
 		 flag.  */
 	      sec->flags |= SEC_EXCLUDE;
-	      return TRUE;
+	      return true;
 	    }
 
 	  /* Record this stub in an array of local symbol call_stubs for
@@ -8585,7 +8648,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	      amt = symcount * sizeof (asection *);
 	      n = bfd_zalloc (abfd, amt);
 	      if (n == NULL)
-		return FALSE;
+		return false;
 	      mips_elf_tdata (abfd)->local_call_stubs = n;
 	    }
 
@@ -8617,12 +8680,12 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	  if (*loc != NULL)
 	    {
 	      sec->flags |= SEC_EXCLUDE;
-	      return TRUE;
+	      return true;
 	    }
 
 	  sec->flags |= SEC_KEEP;
 	  *loc = sec;
-	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
+	  mips_elf_hash_table (info)->mips16_stubs_seen = true;
 	}
     }
 
@@ -8633,9 +8696,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
       unsigned long r_symndx;
       unsigned int r_type;
       struct elf_link_hash_entry *h;
-      bfd_boolean can_make_dynamic_p;
-      bfd_boolean call_reloc_p;
-      bfd_boolean constrain_symbol_p;
+      bool can_make_dynamic_p;
+      bool call_reloc_p;
+      bool constrain_symbol_p;
 
       r_symndx = ELF_R_SYM (abfd, rel->r_info);
       r_type = ELF_R_TYPE (abfd, rel->r_info);
@@ -8649,7 +8712,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	    (_("%pB: malformed reloc detected for section %s"),
 	     abfd, name);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       else
 	{
@@ -8664,17 +8727,15 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 
       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
 	 relocation into a dynamic one.  */
-      can_make_dynamic_p = FALSE;
+      can_make_dynamic_p = false;
 
       /* Set CALL_RELOC_P to true if the relocation is for a call,
 	 and if pointer equality therefore doesn't matter.  */
-      call_reloc_p = FALSE;
+      call_reloc_p = false;
 
       /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
-	 into account when deciding how to define the symbol.
-	 Relocations in nonallocatable sections such as .pdr and
-	 .debug* should have no effect.  */
-      constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
+	 into account when deciding how to define the symbol.  */
+      constrain_symbol_p = true;
 
       switch (r_type)
 	{
@@ -8685,7 +8746,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	case R_MICROMIPS_CALL16:
 	case R_MICROMIPS_CALL_HI16:
 	case R_MICROMIPS_CALL_LO16:
-	  call_reloc_p = TRUE;
+	  call_reloc_p = true;
 	  /* Fall through.  */
 
 	case R_MIPS_GOT16:
@@ -8710,18 +8771,19 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	      && !htab->use_absolute_zero
 	      && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
 	    {
-	      bfd_boolean rel_reloc;
+	      bool rel_reloc;
 
 	      if (!mips_elf_get_section_contents (abfd, sec, &contents))
-		return FALSE;
+		return false;
 
 	      rel_reloc = mips_elf_rel_relocation_p (abfd, sec, relocs, rel);
 	      howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, !rel_reloc);
-
-	      if (!mips_elf_nullify_got_load (abfd, contents, rel, howto,
-					      FALSE))
-		if (!mips_elf_define_absolute_zero (abfd, info, htab, r_type))
-		  return FALSE;
+	      if (bfd_reloc_offset_in_range (howto, abfd, sec, rel->r_offset))
+		if (!mips_elf_nullify_got_load (abfd, contents, rel, howto,
+						false))
+		  if (!mips_elf_define_absolute_zero (abfd, info, htab,
+						      r_type))
+		    return false;
 	    }
 
 	  /* Fall through.  */
@@ -8741,17 +8803,18 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	  if (dynobj == NULL)
 	    elf_hash_table (info)->dynobj = dynobj = abfd;
 	  if (!mips_elf_create_got_section (dynobj, info))
-	    return FALSE;
-	  if (htab->is_vxworks && !bfd_link_pic (info))
+	    return false;
+	  if (htab->root.target_os == is_vxworks
+	      && !bfd_link_pic (info))
 	    {
 	      _bfd_error_handler
 		/* xgettext:c-format */
 		(_("%pB: GOT reloc at %#" PRIx64 " not expected in executables"),
 		 abfd, (uint64_t) rel->r_offset);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
-	  can_make_dynamic_p = TRUE;
+	  can_make_dynamic_p = true;
 	  break;
 
 	case R_MIPS_NONE:
@@ -8759,7 +8822,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	case R_MICROMIPS_JALR:
 	  /* These relocations have empty fields and are purely there to
 	     provide link information.  The symbol value doesn't matter.  */
-	  constrain_symbol_p = FALSE;
+	  constrain_symbol_p = false;
 	  break;
 
 	case R_MIPS_GPREL16:
@@ -8771,7 +8834,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	     important for the GP setup sequence in NewABI code, which
 	     always resolves to a local function even if other relocations
 	     against the symbol wouldn't.  */
-	  constrain_symbol_p = FALSE;
+	  constrain_symbol_p = false;
 	  break;
 
 	case R_MIPS_32:
@@ -8788,14 +8851,14 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	     against a read-only section.  */
 	  if ((bfd_link_pic (info)
 	       || (h != NULL
-		   && !htab->is_vxworks
+		   && htab->root.target_os != is_vxworks
 		   && strcmp (h->root.root.string, "__gnu_local_gp") != 0
 		   && !(!info->nocopyreloc
 			&& !PIC_OBJECT_P (abfd)
 			&& MIPS_ELF_READONLY_SECTION (sec))))
 	      && (sec->flags & SEC_ALLOC) != 0)
 	    {
-	      can_make_dynamic_p = TRUE;
+	      can_make_dynamic_p = true;
 	      if (dynobj == NULL)
 		elf_hash_table (info)->dynobj = dynobj = abfd;
 	    }
@@ -8812,7 +8875,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	case R_MICROMIPS_PC10_S1:
 	case R_MICROMIPS_PC16_S1:
 	case R_MICROMIPS_PC23_S2:
-	  call_reloc_p = TRUE;
+	  call_reloc_p = true;
 	  break;
 	}
 
@@ -8830,8 +8893,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 		 relocations related to taking the function's address.
 		 This doesn't apply to VxWorks, where CALL relocs refer
 		 to a .got.plt entry instead of a normal .got entry.  */
-	      if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
-		((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
+	      if (htab->root.target_os != is_vxworks
+		  && (!can_make_dynamic_p || !call_reloc_p))
+		((struct mips_elf_link_hash_entry *) h)->no_fn_stub = true;
 	    }
 
 	  /* Relocations against the special VxWorks __GOTT_BASE__ and
@@ -8841,9 +8905,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	    {
 	      if (sreloc == NULL)
 		{
-		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
+		  sreloc = mips_elf_rel_dyn_section (info, true);
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 	      mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
 	      if (MIPS_ELF_READONLY_SECTION (sec))
@@ -8855,7 +8919,8 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
       else if (call_lo16_reloc_p (r_type)
 	       || got_lo16_reloc_p (r_type)
 	       || got_disp_reloc_p (r_type)
-	       || (got16_reloc_p (r_type) && htab->is_vxworks))
+	       || (got16_reloc_p (r_type)
+		   && htab->root.target_os == is_vxworks))
 	{
 	  /* We may need a local GOT entry for this relocation.  We
 	     don't count R_MIPS_GOT_PAGE because we can estimate the
@@ -8867,13 +8932,13 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	     R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
 	  if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
 						 rel->r_addend, info, r_type))
-	    return FALSE;
+	    return false;
 	}
 
       if (h != NULL
 	  && mips_elf_relocation_needs_la25_stub (abfd, r_type,
 						  ELF_ST_IS_MIPS16 (h->other)))
-	((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
+	((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = true;
 
       switch (r_type)
 	{
@@ -8887,7 +8952,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 		(_("%pB: CALL16 reloc at %#" PRIx64 " not against global symbol"),
 		 abfd, (uint64_t) rel->r_offset);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	  /* Fall through.  */
 
@@ -8900,9 +8965,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	      /* Make sure there is room in the regular GOT to hold the
 		 function's address.  We may eliminate it in favour of
 		 a .got.plt entry later; see mips_elf_count_got_symbols.  */
-	      if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
+	      if (!mips_elf_record_global_got_symbol (h, abfd, info, true,
 						      r_type))
-		return FALSE;
+		return false;
 
 	      /* We need a stub, not a plt entry for the undefined
 		 function.  But we record it as if it needs plt.  See
@@ -8930,12 +8995,12 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	      if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
 		{
 		  if (!mips_elf_get_section_contents (abfd, sec, &contents))
-		    return FALSE;
-		  howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
-		  addend = mips_elf_read_rel_addend (abfd, rel,
+		    return false;
+		  howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, false);
+		  addend = mips_elf_read_rel_addend (abfd, sec, rel,
 						     howto, contents);
 		  if (got16_reloc_p (r_type))
-		    mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
+		    mips_elf_add_lo16_rel_addend (abfd, sec, rel, rel_end,
 						  contents, &addend);
 		  else
 		    addend <<= howto->rightshift;
@@ -8944,7 +9009,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 		addend = rel->r_addend;
 	      if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
 						 h, addend))
-		return FALSE;
+		return false;
 
 	      if (h)
 		{
@@ -8965,8 +9030,8 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	case R_MIPS_GOT_DISP:
 	case R_MICROMIPS_GOT_DISP:
 	  if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
-						       FALSE, r_type))
-	    return FALSE;
+						       false, r_type))
+	    return false;
 	  break;
 
 	case R_MIPS_TLS_GOTTPREL:
@@ -8994,15 +9059,15 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	  if (h != NULL)
 	    {
 	      if (!mips_elf_record_global_got_symbol (h, abfd, info,
-						      FALSE, r_type))
-		return FALSE;
+						      false, r_type))
+		return false;
 	    }
 	  else
 	    {
 	      if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
 						     rel->r_addend,
 						     info, r_type))
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -9016,9 +9081,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	    {
 	      if (sreloc == NULL)
 		{
-		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
+		  sreloc = mips_elf_rel_dyn_section (info, true);
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 	      if (bfd_link_pic (info) && h == NULL)
 		{
@@ -9051,7 +9116,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 		  if (MIPS_ELF_READONLY_SECTION (sec))
 		    /* We need it to tell the dynamic linker if there
 		       are relocations against the text segment.  */
-		    hmips->readonly_reloc = TRUE;
+		    hmips->readonly_reloc = true;
 		}
 	    }
 
@@ -9077,14 +9142,14 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	     Reconstruct it for later use during GC.  */
 	case R_MIPS_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	  /* This relocation describes which C++ vtable entries are actually
 	     used.  Record for later use during GC.  */
 	case R_MIPS_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -9107,12 +9172,12 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	  if (h->plt.plist == NULL)
 	    h->plt.plist = mips_elf_make_plt_record (abfd);
 	  if (h->plt.plist == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (branch_reloc_p (r_type))
-	    h->plt.plist->need_mips = TRUE;
+	    h->plt.plist->need_mips = true;
 	  else
-	    h->plt.plist->need_comp = TRUE;
+	    h->plt.plist->need_comp = true;
 	}
 
       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
@@ -9126,7 +9191,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	  struct mips_elf_link_hash_entry *mh;
 
 	  mh = (struct mips_elf_link_hash_entry *) h;
-	  mh->need_fn_stub = TRUE;
+	  mh->need_fn_stub = true;
 	}
 
       /* Refuse some position-dependent relocations when creating a
@@ -9198,12 +9263,12 @@ _bfd_mips_elf_check_relocs (bfd *abfd, s
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space for global sym dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info = inf;
@@ -9219,13 +9284,13 @@ allocate_dynrelocs (struct elf_link_hash
 
   /* VxWorks executables are handled elsewhere; we only need to
      allocate relocations in shared objects.  */
-  if (htab->is_vxworks && !bfd_link_pic (info))
-    return TRUE;
+  if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
+    return true;
 
   /* Ignore indirect symbols.  All relocations against such symbols
      will be redirected to the target symbol.  */
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   /* If this symbol is defined in a dynamic object, or we are creating
      a shared library, we will need to copy any R_MIPS_32 or
@@ -9236,21 +9301,21 @@ allocate_dynrelocs (struct elf_link_hash
 	  || (!h->def_regular && !ELF_COMMON_DEF_P (h))
 	  || bfd_link_pic (info)))
     {
-      bfd_boolean do_copy = TRUE;
+      bool do_copy = true;
 
       if (h->root.type == bfd_link_hash_undefweak)
 	{
 	  /* Do not copy relocations for undefined weak symbols that
 	     we are not going to export.  */
 	  if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    do_copy = FALSE;
+	    do_copy = false;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
 	  else if (h->dynindx == -1 && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -9264,11 +9329,11 @@ allocate_dynrelocs (struct elf_link_hash
 	     VxWorks does not enforce the same mapping between the GOT
 	     and the symbol table, so the same requirement does not
 	     apply there.  */
-	  if (!htab->is_vxworks)
+	  if (htab->root.target_os != is_vxworks)
 	    {
 	      if (hmips->global_got_area > GGA_RELOC_ONLY)
 		hmips->global_got_area = GGA_RELOC_ONLY;
-	      hmips->got_only_for_calls = FALSE;
+	      hmips->got_only_for_calls = false;
 	    }
 
 	  mips_elf_allocate_dynamic_relocations
@@ -9280,7 +9345,7 @@ allocate_dynrelocs (struct elf_link_hash
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -9289,7 +9354,7 @@ allocate_dynrelocs (struct elf_link_hash
    change the definition to something the rest of the link can
    understand.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				     struct elf_link_hash_entry *h)
 {
@@ -9305,12 +9370,21 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
   hmips = (struct mips_elf_link_hash_entry *) h;
 
   /* Make sure we know what is going on here.  */
-  BFD_ASSERT (dynobj != NULL
-	      && (h->needs_plt
-		  || h->is_weakalias
-		  || (h->def_dynamic
-		      && h->ref_regular
-		      && !h->def_regular)));
+  if (dynobj == NULL
+      || (! h->needs_plt
+	  && ! h->is_weakalias
+	  && (! h->def_dynamic
+	      || ! h->ref_regular
+	      || h->def_regular)))
+    {
+      if (h->type == STT_GNU_IFUNC)
+	_bfd_error_handler (_("IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"),
+			    h->root.root.string);
+      else
+	_bfd_error_handler (_("non-dynamic symbol %s in dynamic symbol table"),
+			    h->root.root.string);
+      return true;
+    }
 
   hmips = (struct mips_elf_link_hash_entry *) h;
 
@@ -9322,10 +9396,12 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
 
      Traditional stubs are only available on SVR4 psABI-based systems;
      VxWorks always uses PLTs instead.  */
-  if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
+  if (htab->root.target_os != is_vxworks
+      && h->needs_plt
+      && !hmips->no_fn_stub)
     {
       if (! elf_hash_table (info)->dynamic_sections_created)
-	return TRUE;
+	return true;
 
       /* If this symbol is not defined in a regular file, then set
 	 the symbol to the stub location.  This is required to make
@@ -9334,9 +9410,9 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
       if (!h->def_regular
 	  && !bfd_is_abs_section (htab->sstubs->output_section))
 	{
-	  hmips->needs_lazy_stub = TRUE;
+	  hmips->needs_lazy_stub = true;
 	  htab->lazy_stub_count++;
-	  return TRUE;
+	  return true;
 	}
     }
   /* As above, VxWorks requires PLT entries for externally-defined
@@ -9356,8 +9432,8 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
 	   && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 		&& h->root.type == bfd_link_hash_undefweak))
     {
-      bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
-      bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
+      bool micromips_p = MICROMIPS_P (info->output_bfd);
+      bool newabi_p = NEWABI_P (info->output_bfd);
 
       /* If this is the first symbol to need a PLT entry, then make some
 	 basic setup.  Also work out PLT entry sizes.  We'll need them
@@ -9371,33 +9447,35 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
 	     entry is 16 bytes and the PLT0 entry is 32 bytes.
 	     Encourage better cache usage by aligning.  We do this
 	     lazily to avoid pessimizing traditional objects.  */
-	  if (!htab->is_vxworks
+	  if (htab->root.target_os != is_vxworks
 	      && !bfd_set_section_alignment (htab->root.splt, 5))
-	    return FALSE;
+	    return false;
 
 	  /* Make sure that .got.plt is word-aligned.  We do this lazily
 	     for the same reason as above.  */
 	  if (!bfd_set_section_alignment (htab->root.sgotplt,
 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
-	    return FALSE;
+	    return false;
 
 	  /* On non-VxWorks targets, the first two entries in .got.plt
 	     are reserved.  */
-	  if (!htab->is_vxworks)
+	  if (htab->root.target_os != is_vxworks)
 	    htab->plt_got_index
 	      += (get_elf_backend_data (dynobj)->got_header_size
 		  / MIPS_ELF_GOT_SIZE (dynobj));
 
 	  /* On VxWorks, also allocate room for the header's
 	     .rela.plt.unloaded entries.  */
-	  if (htab->is_vxworks && !bfd_link_pic (info))
+	  if (htab->root.target_os == is_vxworks
+	      && !bfd_link_pic (info))
 	    htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
 
 	  /* Now work out the sizes of individual PLT entries.  */
-	  if (htab->is_vxworks && bfd_link_pic (info))
+	  if (htab->root.target_os == is_vxworks
+	      && bfd_link_pic (info))
 	    htab->plt_mips_entry_size
 	      = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
-	  else if (htab->is_vxworks)
+	  else if (htab->root.target_os == is_vxworks)
 	    htab->plt_mips_entry_size
 	      = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
 	  else if (newabi_p)
@@ -9429,7 +9507,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
       if (h->plt.plist == NULL)
 	h->plt.plist = mips_elf_make_plt_record (dynobj);
       if (h->plt.plist == NULL)
-	return FALSE;
+	return false;
 
       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
 	 n32 or n64, so always use a standard entry there.
@@ -9440,12 +9518,12 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
 	 standard entry actually has to be used as the stub ends with a J
 	 instruction.  */
       if (newabi_p
-	  || htab->is_vxworks
+	  || htab->root.target_os == is_vxworks
 	  || hmips->call_stub
 	  || hmips->call_fp_stub)
 	{
-	  h->plt.plist->need_mips = TRUE;
-	  h->plt.plist->need_comp = FALSE;
+	  h->plt.plist->need_mips = true;
+	  h->plt.plist->need_comp = false;
 	}
 
       /* Otherwise, if there are no direct calls to the function, we
@@ -9457,9 +9535,9 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
 	{
 	  if (micromips_p)
-	    h->plt.plist->need_comp = TRUE;
+	    h->plt.plist->need_comp = true;
 	  else
-	    h->plt.plist->need_mips = TRUE;
+	    h->plt.plist->need_mips = true;
 	}
 
       if (h->plt.plist->need_mips)
@@ -9479,22 +9557,22 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
       /* If the output file has no definition of the symbol, set the
 	 symbol's value to the address of the stub.  */
       if (!bfd_link_pic (info) && !h->def_regular)
-	hmips->use_plt_entry = TRUE;
+	hmips->use_plt_entry = true;
 
       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
-      htab->root.srelplt->size += (htab->is_vxworks
+      htab->root.srelplt->size += (htab->root.target_os == is_vxworks
 				   ? MIPS_ELF_RELA_SIZE (dynobj)
 				   : MIPS_ELF_REL_SIZE (dynobj));
 
       /* Make room for the .rela.plt.unloaded relocations.  */
-      if (htab->is_vxworks && !bfd_link_pic (info))
+      if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
 	htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
 
       /* All relocations against this symbol that could have been made
 	 dynamic will now refer to the PLT entry instead.  */
       hmips->possibly_dynamic_relocs = 0;
 
-      return TRUE;
+      return true;
     }
 
   /* If this is a weak symbol, and there is a real definition, the
@@ -9506,18 +9584,18 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* Otherwise, there is nothing further to do for symbols defined
      in regular objects.  */
   if (h->def_regular)
-    return TRUE;
+    return true;
 
   /* There's also nothing more to do if we'll convert all relocations
      against this symbol into dynamic relocations.  */
   if (!hmips->has_static_relocs)
-    return TRUE;
+    return true;
 
   /* We're now relying on copy relocations.  Complain if we have
      some that we can't convert.  */
@@ -9527,7 +9605,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
 			    "dynamic symbol %s"),
 			  h->root.root.string);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -9552,7 +9630,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
     }
   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
     {
-      if (htab->is_vxworks)
+      if (htab->root.target_os == is_vxworks)
 	srel->size += sizeof (Elf32_External_Rela);
       else
 	mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
@@ -9570,7 +9648,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (str
    and the input sections have been assigned to output sections.  We
    check for any mips16 stub sections that we can discard.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
 				    struct bfd_link_info *info)
 {
@@ -9599,18 +9677,18 @@ _bfd_mips_elf_always_size_sections (bfd
 
   hti.info = info;
   hti.output_bfd = output_bfd;
-  hti.error = FALSE;
+  hti.error = false;
   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
 			       mips_elf_check_symbols, &hti);
   if (hti.error)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* If the link uses a GOT, lay it out and work out its size.  */
 
-static bfd_boolean
+static bool
 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd *dynobj;
@@ -9627,7 +9705,7 @@ mips_elf_lay_out_got (bfd *output_bfd, s
 
   s = htab->root.sgot;
   if (s == NULL)
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
   g = htab->got_info;
@@ -9635,7 +9713,7 @@ mips_elf_lay_out_got (bfd *output_bfd, s
   /* Allocate room for the reserved entries.  VxWorks always reserves
      3 entries; other objects only reserve 2 entries.  */
   BFD_ASSERT (g->assigned_low_gotno == 0);
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     htab->reserved_gotno = 3;
   else
     htab->reserved_gotno = 2;
@@ -9647,7 +9725,7 @@ mips_elf_lay_out_got (bfd *output_bfd, s
   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
 
   if (!mips_elf_resolve_final_got_entries (info, g))
-    return FALSE;
+    return false;
 
   /* Calculate the total loadable size of the output.  That
      will give us the maximum number of GOT_PAGE entries
@@ -9667,7 +9745,7 @@ mips_elf_lay_out_got (bfd *output_bfd, s
 	}
     }
 
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
        relocations against local symbols evaluate to "G", and the EABI does
        not include R_MIPS_GOT_PAGE.  */
@@ -9692,17 +9770,18 @@ mips_elf_lay_out_got (bfd *output_bfd, s
   /* VxWorks does not support multiple GOTs.  It initializes $gp to
      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
      dynamic loader.  */
-  if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
+  if (htab->root.target_os != is_vxworks
+      && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
     {
       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
-	return FALSE;
+	return false;
     }
   else
     {
       /* Record that all bfds use G.  This also has the effect of freeing
 	 the per-bfd GOTs, which we no longer need.  */
       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
-	if (mips_elf_bfd_got (ibfd, FALSE))
+	if (mips_elf_bfd_got (ibfd, false))
 	  mips_elf_replace_bfd_got (ibfd, g);
       mips_elf_replace_bfd_got (output_bfd, g);
 
@@ -9713,12 +9792,12 @@ mips_elf_lay_out_got (bfd *output_bfd, s
       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
       if (!tga.g)
-	return FALSE;
+	return false;
       BFD_ASSERT (g->tls_assigned_gotno
 		  == g->global_gotno + g->local_gotno + g->tls_gotno);
 
       /* Each VxWorks GOT entry needs an explicit relocation.  */
-      if (htab->is_vxworks && bfd_link_pic (info))
+      if (htab->root.target_os == is_vxworks && bfd_link_pic (info))
 	g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
 
       /* Allocate room for the TLS relocations.  */
@@ -9726,7 +9805,7 @@ mips_elf_lay_out_got (bfd *output_bfd, s
 	mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Estimate the size of the .MIPS.stubs section.  */
@@ -9779,7 +9858,7 @@ mips_elf_estimate_stub_size (bfd *output
    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
    stub, allocate an entry in the stubs section.  */
 
-static bfd_boolean
+static bool
 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
 {
   struct mips_htab_traverse_info *hti = data;
@@ -9794,7 +9873,7 @@ mips_elf_allocate_lazy_stub (struct mips
 
   if (h->needs_lazy_stub)
     {
-      bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
+      bool micromips_p = MICROMIPS_P (output_bfd);
       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
       bfd_vma isa_bit = micromips_p;
 
@@ -9803,8 +9882,8 @@ mips_elf_allocate_lazy_stub (struct mips
 	h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
       if (h->root.plt.plist == NULL)
 	{
-	  hti->error = TRUE;
-	  return FALSE;
+	  hti->error = true;
+	  return false;
 	}
       h->root.root.u.def.section = htab->sstubs;
       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
@@ -9812,17 +9891,17 @@ mips_elf_allocate_lazy_stub (struct mips
       h->root.other = other;
       htab->sstubs->size += htab->function_stub_size;
     }
-  return TRUE;
+  return true;
 }
 
 /* Allocate offsets in the stubs section to each symbol that needs one.
    Set the final size of the .MIPS.stub section.  */
 
-static bfd_boolean
+static bool
 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
 {
   bfd *output_bfd = info->output_bfd;
-  bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
+  bool micromips_p = MICROMIPS_P (output_bfd);
   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
   bfd_vma isa_bit = micromips_p;
   struct mips_elf_link_hash_table *htab;
@@ -9834,15 +9913,15 @@ mips_elf_lay_out_lazy_stubs (struct bfd_
   BFD_ASSERT (htab != NULL);
 
   if (htab->lazy_stub_count == 0)
-    return TRUE;
+    return true;
 
   htab->sstubs->size = 0;
   hti.info = info;
   hti.output_bfd = output_bfd;
-  hti.error = FALSE;
+  hti.error = false;
   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
   if (hti.error)
-    return FALSE;
+    return false;
   htab->sstubs->size += htab->function_stub_size;
   BFD_ASSERT (htab->sstubs->size
 	      == htab->lazy_stub_count * htab->function_stub_size);
@@ -9851,12 +9930,12 @@ mips_elf_lay_out_lazy_stubs (struct bfd_
   BFD_ASSERT (dynobj != NULL);
   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
   if (h == NULL)
-    return FALSE;
+    return false;
   h->root.u.def.value = isa_bit;
   h->other = other;
   h->type = STT_FUNC;
 
-  return TRUE;
+  return true;
 }
 
 /* A mips_elf_link_hash_traverse callback for which DATA points to a
@@ -9864,11 +9943,11 @@ mips_elf_lay_out_lazy_stubs (struct bfd_
    of the symbol, then set the entry in the symbol table now.  Prefer
    a standard MIPS PLT entry.  */
 
-static bfd_boolean
+static bool
 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
 {
   struct bfd_link_info *info = data;
-  bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
+  bool micromips_p = MICROMIPS_P (info->output_bfd);
   struct mips_elf_link_hash_table *htab;
   unsigned int other;
   bfd_vma isa_bit;
@@ -9900,7 +9979,7 @@ mips_elf_set_plt_sym_value (struct mips_
       /* For VxWorks, point at the PLT load stub rather than the lazy
 	 resolution stub; this stub will become the canonical function
 	 address.  */
-      if (htab->is_vxworks)
+      if (htab->root.target_os == is_vxworks)
 	val += 8;
 
       h->root.root.u.def.section = htab->root.splt;
@@ -9908,18 +9987,18 @@ mips_elf_set_plt_sym_value (struct mips_
       h->root.other = other;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
 				     struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s, *sreldyn;
-  bfd_boolean reltext;
+  bool reltext;
   struct mips_elf_link_hash_table *htab;
 
   htab = mips_elf_hash_table (info);
@@ -9954,7 +10033,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 	 haven't already in _bfd_elf_create_dynamic_sections.  */
       if (htab->root.splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
 	{
-	  bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
+	  bool micromips_p = (MICROMIPS_P (output_bfd)
 				     && !htab->plt_mips_offset);
 	  unsigned int other = micromips_p ? STO_MICROMIPS : 0;
 	  bfd_vma isa_bit = micromips_p;
@@ -9965,9 +10044,9 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 	  BFD_ASSERT (htab->root.sgotplt->size == 0);
 	  BFD_ASSERT (htab->root.splt->size == 0);
 
-	  if (htab->is_vxworks && bfd_link_pic (info))
+	  if (htab->root.target_os == is_vxworks && bfd_link_pic (info))
 	    size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
-	  else if (htab->is_vxworks)
+	  else if (htab->root.target_os == is_vxworks)
 	    size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
 	  else if (ABI_64_P (output_bfd))
 	    size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
@@ -9996,7 +10075,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 					       "_PROCEDURE_LINKAGE_TABLE_");
 	      htab->root.hplt = h;
 	      if (h == NULL)
-		return FALSE;
+		return false;
 	    }
 
 	  h = htab->root.hplt;
@@ -10012,14 +10091,14 @@ _bfd_mips_elf_size_dynamic_sections (bfd
   mips_elf_estimate_stub_size (output_bfd, info);
 
   if (!mips_elf_lay_out_got (output_bfd, info))
-    return FALSE;
+    return false;
 
   mips_elf_lay_out_lazy_stubs (info);
 
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
-  reltext = FALSE;
+  reltext = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -10031,7 +10110,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
 
-      if (CONST_STRNEQ (name, ".rel"))
+      if (startswith (name, ".rel"))
 	{
 	  if (s->size != 0)
 	    {
@@ -10050,7 +10129,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 		   && (target->flags & SEC_READONLY) != 0
 		   && (target->flags & SEC_ALLOC) != 0)
 		  || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
-		reltext = TRUE;
+		reltext = true;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -10068,14 +10147,14 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 	}
       else if (bfd_link_executable (info)
 	       && ! mips_elf_hash_table (info)->use_rld_obj_head
-	       && CONST_STRNEQ (name, ".rld_map"))
+	       && startswith (name, ".rld_map"))
 	{
 	  /* We add a room for __rld_map.  It will be filled in by the
 	     rtld to contain a pointer to the _r_debug structure.  */
 	  s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
 	}
       else if (SGI_COMPAT (output_bfd)
-	       && CONST_STRNEQ (name, ".compact_rel"))
+	       && startswith (name, ".compact_rel"))
 	s->size += mips_elf_hash_table (info)->compact_rel_size;
       else if (s == htab->root.splt)
 	{
@@ -10083,10 +10162,11 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 	     room for an extra nop to fill the delay slot.  This is
 	     for CPUs without load interlocking.  */
 	  if (! LOAD_INTERLOCKS_P (output_bfd)
-	      && ! htab->is_vxworks && s->size > 0)
+	      && htab->root.target_os != is_vxworks
+	      && s->size > 0)
 	    s->size += 4;
 	}
-      else if (! CONST_STRNEQ (name, ".init")
+      else if (! startswith (name, ".init")
 	       && s != htab->root.sgot
 	       && s != htab->root.sgotplt
 	       && s != htab->sstubs
@@ -10111,7 +10191,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd
       if (s->contents == NULL)
 	{
 	  bfd_set_error (bfd_error_no_memory);
-	  return FALSE;
+	  return false;
 	}
     }
 
@@ -10128,26 +10208,28 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 	 may only look at the first one they see.  */
       if (!bfd_link_pic (info)
 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
-	return FALSE;
+	return false;
 
       if (bfd_link_executable (info)
 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
-	return FALSE;
+	return false;
 
       /* The DT_DEBUG entry may be filled in by the dynamic linker and
 	 used by the debugger.  */
       if (bfd_link_executable (info)
 	  && !SGI_COMPAT (output_bfd)
 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
-	return FALSE;
+	return false;
 
-      if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
+      if (reltext
+	  && (SGI_COMPAT (output_bfd)
+	      || htab->root.target_os == is_vxworks))
 	info->flags |= DF_TEXTREL;
 
       if ((info->flags & DF_TEXTREL) != 0)
 	{
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
-	    return FALSE;
+	    return false;
 
 	  /* Clear the DF_TEXTREL flag.  It will be set again if we
 	     write out an actual text relocation; we may not, because
@@ -10157,23 +10239,23 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 	}
 
       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
-	return FALSE;
+	return false;
 
-      sreldyn = mips_elf_rel_dyn_section (info, FALSE);
-      if (htab->is_vxworks)
+      sreldyn = mips_elf_rel_dyn_section (info, false);
+      if (htab->root.target_os == is_vxworks)
 	{
 	  /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
 	     use any of the DT_MIPS_* tags.  */
 	  if (sreldyn && sreldyn->size > 0)
 	    {
 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
-		return FALSE;
+		return false;
 
 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
-		return FALSE;
+		return false;
 
 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
-		return FALSE;
+		return false;
 	    }
 	}
       else
@@ -10182,70 +10264,70 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 	      && !bfd_is_abs_section (sreldyn->output_section))
 	    {
 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
-		return FALSE;
+		return false;
 
 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
-		return FALSE;
+		return false;
 
 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
-		return FALSE;
+		return false;
 	    }
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
-	    return FALSE;
+	    return false;
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
-	    return FALSE;
+	    return false;
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
-	    return FALSE;
+	    return false;
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
-	    return FALSE;
+	    return false;
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
-	    return FALSE;
+	    return false;
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
-	    return FALSE;
+	    return false;
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
-	    return FALSE;
+	    return false;
 
 	  if (info->emit_gnu_hash
 	      && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_XHASH, 0))
-	    return FALSE;
+	    return false;
 
 	  if (IRIX_COMPAT (dynobj) == ict_irix5
 	      && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
-	    return FALSE;
+	    return false;
 
 	  if (IRIX_COMPAT (dynobj) == ict_irix6
 	      && (bfd_get_section_by_name
 		  (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
 	      && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
-	    return FALSE;
+	    return false;
 	}
       if (htab->root.splt->size > 0)
 	{
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
-	    return FALSE;
+	    return false;
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
-	    return FALSE;
+	    return false;
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
-	    return FALSE;
+	    return false;
 
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
-	    return FALSE;
+	    return false;
 	}
-      if (htab->is_vxworks
+      if (htab->root.target_os == is_vxworks
 	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
@@ -10311,7 +10393,7 @@ mips_reloc_against_discarded_section (bf
 				      bfd *input_bfd, asection *input_section,
 				      Elf_Internal_Rela **rel,
 				      const Elf_Internal_Rela **relend,
-				      bfd_boolean rel_reloc,
+				      bool rel_reloc,
 				      reloc_howto_type *howto,
 				      bfd_byte *contents)
 {
@@ -10340,7 +10422,7 @@ mips_reloc_against_discarded_section (bf
 
 /* Relocate a MIPS ELF section.  */
 
-bfd_boolean
+int
 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 				bfd *input_bfd, asection *input_section,
 				bfd_byte *contents, Elf_Internal_Rela *relocs,
@@ -10350,7 +10432,7 @@ _bfd_mips_elf_relocate_section (bfd *out
   Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *relend;
   bfd_vma addend = 0;
-  bfd_boolean use_saved_addend_p = FALSE;
+  bool use_saved_addend_p = false;
 
   relend = relocs + input_section->reloc_count;
   for (rel = relocs; rel < relend; ++rel)
@@ -10358,17 +10440,17 @@ _bfd_mips_elf_relocate_section (bfd *out
       const char *name;
       bfd_vma value = 0;
       reloc_howto_type *howto;
-      bfd_boolean cross_mode_jump_p = FALSE;
+      bool cross_mode_jump_p = false;
       /* TRUE if the relocation is a RELA relocation, rather than a
 	 REL relocation.  */
-      bfd_boolean rela_relocation_p = TRUE;
+      bool rela_relocation_p = true;
       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
       const char *msg;
       unsigned long r_symndx;
       asection *sec;
       Elf_Internal_Shdr *symtab_hdr;
       struct elf_link_hash_entry *h;
-      bfd_boolean rel_reloc;
+      bool rel_reloc;
 
       rel_reloc = (NEWABI_P (input_bfd)
 		   && mips_elf_rel_relocation_p (input_bfd, input_section,
@@ -10417,7 +10499,7 @@ _bfd_mips_elf_relocate_section (bfd *out
 	     space.  Thus, when they use an R_MIPS_64 they mean what is
 	     usually meant by R_MIPS_32, with the exception that the
 	     stored value is sign-extended to 64 bits.  */
-	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
+	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, false);
 
 	  /* On big-endian systems, we need to lie about the position
 	     of the reloc.  */
@@ -10434,15 +10516,16 @@ _bfd_mips_elf_relocate_section (bfd *out
 	  if (mips_elf_rel_relocation_p (input_bfd, input_section,
 					 relocs, rel))
 	    {
-	      rela_relocation_p = FALSE;
-	      addend = mips_elf_read_rel_addend (input_bfd, rel,
-						 howto, contents);
+	      rela_relocation_p = false;
+	      addend = mips_elf_read_rel_addend (input_bfd, input_section,
+						 rel, howto, contents);
 	      if (hi16_reloc_p (r_type)
 		  || (got16_reloc_p (r_type)
 		      && mips_elf_local_relocation_p (input_bfd, rel,
 						      local_sections)))
 		{
-		  if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
+		  if (!mips_elf_add_lo16_rel_addend (input_bfd, input_section,
+						     rel, relend,
 						     contents, &addend))
 		    {
 		      if (h)
@@ -10533,8 +10616,8 @@ _bfd_mips_elf_relocate_section (bfd *out
 
 	      if (! mips_elf_perform_relocation (info, howto, rel, addend,
 						 input_bfd, input_section,
-						 contents, FALSE))
-		return FALSE;
+						 contents, false))
+		return false;
 	    }
 
 	  /* Go on to the next relocation.  */
@@ -10548,9 +10631,9 @@ _bfd_mips_elf_relocate_section (bfd *out
       if (rel + 1 < relend
 	  && rel->r_offset == rel[1].r_offset
 	  && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
-	use_saved_addend_p = TRUE;
+	use_saved_addend_p = true;
       else
-	use_saved_addend_p = FALSE;
+	use_saved_addend_p = false;
 
       /* Figure out what value we are supposed to relocate.  */
       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
@@ -10575,7 +10658,7 @@ _bfd_mips_elf_relocate_section (bfd *out
 	  msg = _("internal error: unsupported relocation error");
 	  info->callbacks->warning
 	    (info, msg, name, input_bfd, input_section, rel->r_offset);
-	  return FALSE;
+	  return false;
 
 	case bfd_reloc_overflow:
 	  if (use_saved_addend_p)
@@ -10593,10 +10676,10 @@ _bfd_mips_elf_relocate_section (bfd *out
 		  && (gprel16_reloc_p (howto->type)
 		      || literal_reloc_p (howto->type)))
 		{
-		  msg = _("small-data section exceeds 64KB;"
+		  msg = _("small-data section too large;"
 			  " lower small-data size limit (see option -G)");
 
-		  htab->small_data_overflow_reported = TRUE;
+		  htab->small_data_overflow_reported = true;
 		  (*info->callbacks->einfo) ("%P: %s\n", msg);
 		}
 	      (*info->callbacks->reloc_overflow)
@@ -10694,10 +10777,10 @@ _bfd_mips_elf_relocate_section (bfd *out
       if (! mips_elf_perform_relocation (info, howto, rel, value,
 					 input_bfd, input_section,
 					 contents, cross_mode_jump_p))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* A function that iterates over each entry in la25_stubs and fills
@@ -10728,8 +10811,8 @@ mips_elf_create_la25_stub (void **slot,
       loc = bfd_malloc (s->size);
       if (loc == NULL)
 	{
-	  hti->error = TRUE;
-	  return FALSE;
+	  hti->error = true;
+	  return false;
 	}
       s->contents = loc;
     }
@@ -10807,7 +10890,7 @@ mips_elf_create_la25_stub (void **slot,
 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* If NAME is one of the special IRIX6 symbols defined by the linker,
@@ -10863,7 +10946,7 @@ mips_elf_irix6_finish_dynamic_symbol (bf
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
 				     struct bfd_link_info *info,
 				     struct elf_link_hash_entry *h,
@@ -10882,7 +10965,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd
   dynobj = elf_hash_table (info)->dynobj;
   hmips = (struct mips_elf_link_hash_entry *) h;
 
-  BFD_ASSERT (!htab->is_vxworks);
+  BFD_ASSERT (htab->root.target_os != is_vxworks);
 
   if (h->plt.plist != NULL
       && (h->plt.plist->mips_offset != MINUS_ONE
@@ -10929,7 +11012,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd
 	     htab->root.sgotplt->output_section,
 	     (int64_t) got_address);
 	  bfd_set_error (bfd_error_no_error);
-	  return FALSE;
+	  return false;
 	}
 
       /* Initially point the .got.plt entry at the PLT header.  */
@@ -11045,7 +11128,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd
 		     (int64_t) gotpc_offset,
 		     htab->root.splt->output_section);
 		  bfd_set_error (bfd_error_no_error);
-		  return FALSE;
+		  return false;
 		}
 	      bfd_put_16 (output_bfd,
 			  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
@@ -11079,7 +11162,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd
   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
     {
       /* We've decided to create a lazy-binding stub.  */
-      bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
+      bool micromips_p = MICROMIPS_P (output_bfd);
       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
       bfd_vma stub_size = htab->function_stub_size;
       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
@@ -11103,7 +11186,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd
 	 sign extension at runtime in the stub, resulting in a negative
 	 index value.  */
       if (h->dynindx & ~0x7fffffff)
-	return FALSE;
+	return false;
 
       /* Fill the stub.  */
       if (micromips_p)
@@ -11291,7 +11374,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd
 		  if (! (mips_elf_create_dynamic_relocation
 			 (output_bfd, info, rel,
 			  e.d.h, NULL, sym->st_value, &entry, sgot)))
-		    return FALSE;
+		    return false;
 		}
 	      else
 		entry = sym->st_value;
@@ -11347,7 +11430,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd
       BFD_ASSERT (h->dynindx != -1);
       BFD_ASSERT (htab->use_plts_and_copy_relocs);
 
-      s = mips_elf_rel_dyn_section (info, FALSE);
+      s = mips_elf_rel_dyn_section (info, false);
       symval = (h->root.u.def.section->output_section->vma
 		+ h->root.u.def.section->output_offset
 		+ h->root.u.def.value);
@@ -11372,12 +11455,12 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd
       sym->st_other -= STO_MICROMIPS;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Likewise, for VxWorks.  */
 
-bfd_boolean
+bool
 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
 					 struct bfd_link_info *info,
 					 struct elf_link_hash_entry *h,
@@ -11514,7 +11597,7 @@ _bfd_mips_vxworks_finish_dynamic_symbol
       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
 
       /* Add a dynamic relocation for it.  */
-      s = mips_elf_rel_dyn_section (info, FALSE);
+      s = mips_elf_rel_dyn_section (info, false);
       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
       outrel.r_offset = (sgot->output_section->vma
 			 + sgot->output_offset
@@ -11551,12 +11634,12 @@ _bfd_mips_vxworks_finish_dynamic_symbol
   if (ELF_ST_IS_COMPRESSED (sym->st_other))
     sym->st_value &= ~1;
 
-  return TRUE;
+  return true;
 }
 
 /* Write out a plt0 entry to the beginning of .plt.  */
 
-static bfd_boolean
+static bool
 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd_byte *loc;
@@ -11603,7 +11686,7 @@ mips_finish_exec_plt (bfd *output_bfd, s
 	 htab->root.sgotplt->output_section,
 	 (int64_t) gotplt_value);
       bfd_set_error (bfd_error_no_error);
-      return FALSE;
+      return false;
     }
 
   /* Install the PLT header.  */
@@ -11632,7 +11715,7 @@ mips_finish_exec_plt (bfd *output_bfd, s
 	     (int64_t) gotpc_offset,
 	     htab->root.splt->output_section);
 	  bfd_set_error (bfd_error_no_error);
-	  return FALSE;
+	  return false;
 	}
       bfd_put_16 (output_bfd,
 		  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
@@ -11665,7 +11748,7 @@ mips_finish_exec_plt (bfd *output_bfd, s
       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Install the PLT header for a VxWorks executable and finalize the
@@ -11764,7 +11847,7 @@ mips_vxworks_finish_shared_plt (bfd *out
 
 /* Finish up the dynamic sections.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
 				       struct bfd_link_info *info)
 {
@@ -11792,7 +11875,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
       BFD_ASSERT (sdyn != NULL);
       BFD_ASSERT (gg != NULL);
 
-      g = mips_elf_bfd_got (output_bfd, FALSE);
+      g = mips_elf_bfd_got (output_bfd, false);
       BFD_ASSERT (g != NULL);
 
       for (b = sdyn->contents;
@@ -11803,13 +11886,13 @@ _bfd_mips_elf_finish_dynamic_sections (b
 	  const char *name;
 	  size_t elemsize;
 	  asection *s;
-	  bfd_boolean swap_out_p;
+	  bool swap_out_p;
 
 	  /* Read in the current dynamic entry.  */
 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
 
 	  /* Assume that we're going to modify it and write it out.  */
-	  swap_out_p = TRUE;
+	  swap_out_p = true;
 
 	  switch (dyn.d_tag)
 	    {
@@ -11818,7 +11901,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 	      break;
 
 	    case DT_RELAENT:
-	      BFD_ASSERT (htab->is_vxworks);
+	      BFD_ASSERT (htab->root.target_os == is_vxworks);
 	      dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
 	      break;
 
@@ -11856,12 +11939,12 @@ _bfd_mips_elf_finish_dynamic_sections (b
 
 	    case DT_MIPS_ICHECKSUM:
 	      /* XXX FIXME: */
-	      swap_out_p = FALSE;
+	      swap_out_p = false;
 	      break;
 
 	    case DT_MIPS_IVERSION:
 	      /* XXX FIXME: */
-	      swap_out_p = FALSE;
+	      swap_out_p = false;
 	      break;
 
 	    case DT_MIPS_BASE_ADDRESS:
@@ -11914,7 +11997,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 		if (!h)
 		  {
 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
-		    swap_out_p = FALSE;
+		    swap_out_p = false;
 		    break;
 		  }
 		s = h->root.u.def.section;
@@ -11934,7 +12017,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 		if (!h)
 		  {
 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
-		    swap_out_p = FALSE;
+		    swap_out_p = false;
 		    break;
 		  }
 		s = h->root.u.def.section;
@@ -11957,7 +12040,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 
 	    case DT_PLTREL:
 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
-	      if (htab->is_vxworks)
+	      if (htab->root.target_os == is_vxworks)
 		dyn.d_un.d_val = DT_RELA;
 	      else
 		dyn.d_un.d_val = DT_REL;
@@ -11980,7 +12063,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 	      if (!(info->flags & DF_TEXTREL))
 		{
 		  dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
-		  swap_out_p = FALSE;
+		  swap_out_p = false;
 		}
 	      break;
 
@@ -11990,7 +12073,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 	      if (!(info->flags & DF_TEXTREL))
 		dyn.d_un.d_val &= ~DF_TEXTREL;
 	      else
-		swap_out_p = FALSE;
+		swap_out_p = false;
 	      break;
 
 	    case DT_MIPS_XHASH:
@@ -12000,10 +12083,10 @@ _bfd_mips_elf_finish_dynamic_sections (b
 	      break;
 
 	    default:
-	      swap_out_p = FALSE;
-	      if (htab->is_vxworks
+	      swap_out_p = false;
+	      if (htab->root.target_os == is_vxworks
 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
-		swap_out_p = TRUE;
+		swap_out_p = true;
 	      break;
 	    }
 
@@ -12026,7 +12109,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
   if (sgot != NULL && sgot->size > 0
       && !bfd_is_abs_section (sgot->output_section))
     {
-      if (htab->is_vxworks)
+      if (htab->root.target_os == is_vxworks)
 	{
 	  /* The first entry of the global offset table points to the
 	     ".dynamic" section.  The second is initialized by the
@@ -12091,7 +12174,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 		    (output_bfd, info, rel, NULL,
 		     bfd_abs_section_ptr,
 		     0, &addend, sgot)))
-		return FALSE;
+		return false;
 	      BFD_ASSERT (addend == 0);
 	    }
 	}
@@ -12104,7 +12187,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       bfd_byte *b;
-      bfd_boolean swap_out_p;
+      bool swap_out_p;
 
       BFD_ASSERT (sdyn != NULL);
 
@@ -12119,7 +12202,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
 
 	  /* Assume that we're going to modify it and write it out.  */
-	  swap_out_p = TRUE;
+	  swap_out_p = true;
 
 	  switch (dyn.d_tag)
 	    {
@@ -12128,7 +12211,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 		 decided not to make.  This is for the n64 irix rld,
 		 which doesn't seem to apply any relocations if there
 		 are trailing null entries.  */
-	      s = mips_elf_rel_dyn_section (info, FALSE);
+	      s = mips_elf_rel_dyn_section (info, false);
 	      dyn.d_un.d_val = (s->reloc_count
 				* (ABI_64_P (output_bfd)
 				   ? sizeof (Elf64_Mips_External_Rel)
@@ -12141,7 +12224,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 	      break;
 
 	    default:
-	      swap_out_p = FALSE;
+	      swap_out_p = false;
 	      break;
 	    }
 
@@ -12173,7 +12256,8 @@ _bfd_mips_elf_finish_dynamic_sections (b
 					     s->contents));
 
 	    /* Clean up a dummy stub function entry in .text.  */
-	    if (htab->sstubs != NULL)
+	    if (htab->sstubs != NULL
+		&& htab->sstubs->contents != NULL)
 	      {
 		file_ptr dummy_offset;
 
@@ -12189,9 +12273,9 @@ _bfd_mips_elf_finish_dynamic_sections (b
        increasing order of r_symndx.  The VxWorks EABI doesn't require
        this, and because the code below handles REL rather than RELA
        relocations, using it for VxWorks would be outright harmful.  */
-    if (!htab->is_vxworks)
+    if (htab->root.target_os != is_vxworks)
       {
-	s = mips_elf_rel_dyn_section (info, FALSE);
+	s = mips_elf_rel_dyn_section (info, false);
 	if (s != NULL
 	    && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
 	  {
@@ -12211,7 +12295,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 
   if (htab->root.splt && htab->root.splt->size > 0)
     {
-      if (htab->is_vxworks)
+      if (htab->root.target_os == is_vxworks)
 	{
 	  if (bfd_link_pic (info))
 	    mips_vxworks_finish_shared_plt (output_bfd, info);
@@ -12222,10 +12306,10 @@ _bfd_mips_elf_finish_dynamic_sections (b
 	{
 	  BFD_ASSERT (!bfd_link_pic (info));
 	  if (!mips_finish_exec_plt (output_bfd, info))
-	    return FALSE;
+	    return false;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -12240,64 +12324,68 @@ mips_set_isa_flags (bfd *abfd)
     {
     default:
       if (ABI_N32_P (abfd) || ABI_64_P (abfd))
-        val = E_MIPS_ARCH_3;
+        val = MIPS_DEFAULT_R6 ? EF_MIPS_ARCH_64R6 : EF_MIPS_ARCH_3;
       else
-        val = E_MIPS_ARCH_1;
+        val = MIPS_DEFAULT_R6 ? EF_MIPS_ARCH_32R6 : EF_MIPS_ARCH_1;
       break;
 
     case bfd_mach_mips3000:
-      val = E_MIPS_ARCH_1;
+      val = EF_MIPS_ARCH_1;
       break;
 
     case bfd_mach_mips3900:
-      val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
+      val = EF_MIPS_ARCH_1 | EF_MIPS_MACH_3900;
       break;
 
     case bfd_mach_mips6000:
-      val = E_MIPS_ARCH_2;
+      val = EF_MIPS_ARCH_2;
       break;
 
     case bfd_mach_mips4010:
-      val = E_MIPS_ARCH_2 | E_MIPS_MACH_4010;
+      val = EF_MIPS_ARCH_2 | EF_MIPS_MACH_4010;
+      break;
+
+    case bfd_mach_mips_allegrex:
+      val = EF_MIPS_ARCH_2 | EF_MIPS_MACH_ALLEGREX;
       break;
 
     case bfd_mach_mips4000:
     case bfd_mach_mips4300:
     case bfd_mach_mips4400:
     case bfd_mach_mips4600:
-      val = E_MIPS_ARCH_3;
+      val = EF_MIPS_ARCH_3;
       break;
 
     case bfd_mach_mips4100:
-      val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
+      val = EF_MIPS_ARCH_3 | EF_MIPS_MACH_4100;
       break;
 
     case bfd_mach_mips4111:
-      val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
+      val = EF_MIPS_ARCH_3 | EF_MIPS_MACH_4111;
       break;
 
     case bfd_mach_mips4120:
-      val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
+      val = EF_MIPS_ARCH_3 | EF_MIPS_MACH_4120;
       break;
 
     case bfd_mach_mips4650:
-      val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
+      val = EF_MIPS_ARCH_3 | EF_MIPS_MACH_4650;
       break;
 
     case bfd_mach_mips5400:
-      val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
+      val = EF_MIPS_ARCH_4 | EF_MIPS_MACH_5400;
       break;
 
     case bfd_mach_mips5500:
-      val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
+      val = EF_MIPS_ARCH_4 | EF_MIPS_MACH_5500;
       break;
 
     case bfd_mach_mips5900:
-      val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
+      val = EF_MIPS_ARCH_3 | EF_MIPS_MACH_5900;
       break;
 
     case bfd_mach_mips9000:
-      val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
+      val = EF_MIPS_ARCH_4 | EF_MIPS_MACH_9000;
       break;
 
     case bfd_mach_mips5000:
@@ -12307,84 +12395,84 @@ mips_set_isa_flags (bfd *abfd)
     case bfd_mach_mips12000:
     case bfd_mach_mips14000:
     case bfd_mach_mips16000:
-      val = E_MIPS_ARCH_4;
+      val = EF_MIPS_ARCH_4;
       break;
 
     case bfd_mach_mips5:
-      val = E_MIPS_ARCH_5;
+      val = EF_MIPS_ARCH_5;
       break;
 
     case bfd_mach_mips_loongson_2e:
-      val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
+      val = EF_MIPS_ARCH_3 | EF_MIPS_MACH_LS2E;
       break;
 
     case bfd_mach_mips_loongson_2f:
-      val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
+      val = EF_MIPS_ARCH_3 | EF_MIPS_MACH_LS2F;
       break;
 
     case bfd_mach_mips_sb1:
-      val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
+      val = EF_MIPS_ARCH_64 | EF_MIPS_MACH_SB1;
       break;
 
     case bfd_mach_mips_gs464:
-      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464;
+      val = EF_MIPS_ARCH_64R2 | EF_MIPS_MACH_GS464;
       break;
 
     case bfd_mach_mips_gs464e:
-      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464E;
+      val = EF_MIPS_ARCH_64R2 | EF_MIPS_MACH_GS464E;
       break;
 
     case bfd_mach_mips_gs264e:
-      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS264E;
+      val = EF_MIPS_ARCH_64R2 | EF_MIPS_MACH_GS264E;
       break;
 
     case bfd_mach_mips_octeon:
     case bfd_mach_mips_octeonp:
-      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
+      val = EF_MIPS_ARCH_64R2 | EF_MIPS_MACH_OCTEON;
       break;
 
     case bfd_mach_mips_octeon3:
-      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
+      val = EF_MIPS_ARCH_64R2 | EF_MIPS_MACH_OCTEON3;
       break;
 
     case bfd_mach_mips_xlr:
-      val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
+      val = EF_MIPS_ARCH_64 | EF_MIPS_MACH_XLR;
       break;
 
     case bfd_mach_mips_octeon2:
-      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
+      val = EF_MIPS_ARCH_64R2 | EF_MIPS_MACH_OCTEON2;
       break;
 
     case bfd_mach_mipsisa32:
-      val = E_MIPS_ARCH_32;
+      val = EF_MIPS_ARCH_32;
       break;
 
     case bfd_mach_mipsisa64:
-      val = E_MIPS_ARCH_64;
+      val = EF_MIPS_ARCH_64;
       break;
 
     case bfd_mach_mipsisa32r2:
     case bfd_mach_mipsisa32r3:
     case bfd_mach_mipsisa32r5:
-      val = E_MIPS_ARCH_32R2;
+      val = EF_MIPS_ARCH_32R2;
       break;
 
     case bfd_mach_mips_interaptiv_mr2:
-      val = E_MIPS_ARCH_32R2 | E_MIPS_MACH_IAMR2;
+      val = EF_MIPS_ARCH_32R2 | EF_MIPS_MACH_IAMR2;
       break;
 
     case bfd_mach_mipsisa64r2:
     case bfd_mach_mipsisa64r3:
     case bfd_mach_mipsisa64r5:
-      val = E_MIPS_ARCH_64R2;
+      val = EF_MIPS_ARCH_64R2;
       break;
 
     case bfd_mach_mipsisa32r6:
-      val = E_MIPS_ARCH_32R6;
+      val = EF_MIPS_ARCH_32R6;
       break;
 
     case bfd_mach_mipsisa64r6:
-      val = E_MIPS_ARCH_64R6;
+      val = EF_MIPS_ARCH_64R6;
       break;
     }
   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
@@ -12398,7 +12486,7 @@ mips_set_isa_flags (bfd *abfd)
    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
    relocs to be sorted.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_sort_relocs_p (asection *sec)
 {
   return (sec->flags & SEC_CODE) == 0;
@@ -12442,7 +12530,7 @@ _bfd_mips_final_write_processing (bfd *a
 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
 	  name = bfd_section_name ((*hdrpp)->bfd_section);
 	  BFD_ASSERT (name != NULL
-		      && CONST_STRNEQ (name, ".gptab."));
+		      && startswith (name, ".gptab."));
 	  sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
 	  BFD_ASSERT (sec != NULL);
 	  (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
@@ -12452,7 +12540,7 @@ _bfd_mips_final_write_processing (bfd *a
 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
 	  name = bfd_section_name ((*hdrpp)->bfd_section);
 	  BFD_ASSERT (name != NULL
-		      && CONST_STRNEQ (name, ".MIPS.content"));
+		      && startswith (name, ".MIPS.content"));
 	  sec = bfd_get_section_by_name (abfd,
 					 name + sizeof ".MIPS.content" - 1);
 	  BFD_ASSERT (sec != NULL);
@@ -12472,12 +12560,12 @@ _bfd_mips_final_write_processing (bfd *a
 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
 	  name = bfd_section_name ((*hdrpp)->bfd_section);
 	  BFD_ASSERT (name != NULL);
-	  if (CONST_STRNEQ (name, ".MIPS.events"))
+	  if (startswith (name, ".MIPS.events"))
 	    sec = bfd_get_section_by_name (abfd,
 					   name + sizeof ".MIPS.events" - 1);
 	  else
 	    {
-	      BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
+	      BFD_ASSERT (startswith (name, ".MIPS.post_rel"));
 	      sec = bfd_get_section_by_name (abfd,
 					     (name
 					      + sizeof ".MIPS.post_rel" - 1));
@@ -12494,7 +12582,7 @@ _bfd_mips_final_write_processing (bfd *a
     }
 }
 
-bfd_boolean
+bool
 _bfd_mips_elf_final_write_processing (bfd *abfd)
 {
   _bfd_mips_final_write_processing (abfd);
@@ -12543,13 +12631,13 @@ _bfd_mips_elf_additional_program_headers
 
 /* Modify the segment map for an IRIX5 executable.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_modify_segment_map (bfd *abfd,
 				  struct bfd_link_info *info)
 {
   asection *s;
   struct elf_segment_map *m, **pm;
-  bfd_size_type amt;
+  size_t amt;
 
   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
      segment.  */
@@ -12564,7 +12652,7 @@ _bfd_mips_elf_modify_segment_map (bfd *a
 	  amt = sizeof *m;
 	  m = bfd_zalloc (abfd, amt);
 	  if (m == NULL)
-	    return FALSE;
+	    return false;
 
 	  m->p_type = PT_MIPS_REGINFO;
 	  m->count = 1;
@@ -12595,7 +12683,7 @@ _bfd_mips_elf_modify_segment_map (bfd *a
 	  amt = sizeof *m;
 	  m = bfd_zalloc (abfd, amt);
 	  if (m == NULL)
-	    return FALSE;
+	    return false;
 
 	  m->p_type = PT_MIPS_ABIFLAGS;
 	  m->count = 1;
@@ -12645,7 +12733,7 @@ _bfd_mips_elf_modify_segment_map (bfd *a
 	      options_segment->next = *pm;
 	      options_segment->p_type = PT_MIPS_OPTIONS;
 	      options_segment->p_flags = PF_R;
-	      options_segment->p_flags_valid = TRUE;
+	      options_segment->p_flags_valid = true;
 	      options_segment->count = 1;
 	      options_segment->sections[0] = s;
 	      *pm = options_segment;
@@ -12670,7 +12758,7 @@ _bfd_mips_elf_modify_segment_map (bfd *a
 		  amt = sizeof *m;
 		  m = bfd_zalloc (abfd, amt);
 		  if (m == NULL)
-		    return FALSE;
+		    return false;
 
 		  m->p_type = PT_MIPS_RTPROC;
 
@@ -12752,10 +12840,10 @@ _bfd_mips_elf_modify_segment_map (bfd *a
 		&& s->vma + s->size <= high)
 	      ++c;
 
-	  amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
+	  amt = sizeof *n - sizeof (asection *) + c * sizeof (asection *);
 	  n = bfd_zalloc (abfd, amt);
 	  if (n == NULL)
-	    return FALSE;
+	    return false;
 	  *n = *m;
 	  n->count = c;
 
@@ -12804,14 +12892,14 @@ _bfd_mips_elf_modify_segment_map (bfd *a
 	{
 	  m = bfd_zalloc (abfd, sizeof (*m));
 	  if (m == NULL)
-	    return FALSE;
+	    return false;
 
 	  m->p_type = PT_NULL;
 	  *pm = m;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -12839,7 +12927,7 @@ _bfd_mips_elf_gc_mark_hook (asection *se
 
 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
 				      elf_gc_mark_hook_fn gc_mark_hook)
 {
@@ -12859,11 +12947,11 @@ _bfd_mips_elf_gc_mark_extra_sections (st
 	    && MIPS_ELF_ABIFLAGS_SECTION_NAME_P (bfd_section_name (o)))
 	  {
 	    if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
-	      return FALSE;
+	      return false;
 	  }
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
@@ -12885,16 +12973,16 @@ _bfd_mips_elf_copy_indirect_symbol (stru
   /* Any absolute non-dynamic relocations against an indirect or weak
      definition will be against the target symbol.  */
   if (indmips->has_static_relocs)
-    dirmips->has_static_relocs = TRUE;
+    dirmips->has_static_relocs = true;
 
   if (ind->root.type != bfd_link_hash_indirect)
     return;
 
   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
   if (indmips->readonly_reloc)
-    dirmips->readonly_reloc = TRUE;
+    dirmips->readonly_reloc = true;
   if (indmips->no_fn_stub)
-    dirmips->no_fn_stub = TRUE;
+    dirmips->no_fn_stub = true;
   if (indmips->fn_stub)
     {
       dirmips->fn_stub = indmips->fn_stub;
@@ -12902,8 +12990,8 @@ _bfd_mips_elf_copy_indirect_symbol (stru
     }
   if (indmips->need_fn_stub)
     {
-      dirmips->need_fn_stub = TRUE;
-      indmips->need_fn_stub = FALSE;
+      dirmips->need_fn_stub = true;
+      indmips->need_fn_stub = false;
     }
   if (indmips->call_stub)
     {
@@ -12920,7 +13008,7 @@ _bfd_mips_elf_copy_indirect_symbol (stru
   if (indmips->global_got_area < GGA_NONE)
     indmips->global_got_area = GGA_NONE;
   if (indmips->has_nonpic_branches)
-    dirmips->has_nonpic_branches = TRUE;
+    dirmips->has_nonpic_branches = true;
 }
 
 /* Take care of the special `__gnu_absolute_zero' symbol and ignore attempts
@@ -12931,7 +13019,7 @@ _bfd_mips_elf_copy_indirect_symbol (stru
 void
 _bfd_mips_elf_hide_symbol (struct bfd_link_info *info,
 			   struct elf_link_hash_entry *entry,
-			   bfd_boolean force_local)
+			   bool force_local)
 {
   struct mips_elf_link_hash_table *htab;
 
@@ -12946,36 +13034,36 @@ _bfd_mips_elf_hide_symbol (struct bfd_li
 
 #define PDR_SIZE 32
 
-bfd_boolean
+bool
 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
 			    struct bfd_link_info *info)
 {
   asection *o;
-  bfd_boolean ret = FALSE;
+  bool ret = false;
   unsigned char *tdata;
   size_t i, skip;
 
   o = bfd_get_section_by_name (abfd, ".pdr");
   if (! o)
-    return FALSE;
+    return false;
   if (o->size == 0)
-    return FALSE;
+    return false;
   if (o->size % PDR_SIZE != 0)
-    return FALSE;
+    return false;
   if (o->output_section != NULL
       && bfd_is_abs_section (o->output_section))
-    return FALSE;
+    return false;
 
   tdata = bfd_zmalloc (o->size / PDR_SIZE);
   if (! tdata)
-    return FALSE;
+    return false;
 
   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
 					    info->keep_memory);
   if (!cookie->rels)
     {
       free (tdata);
-      return FALSE;
+      return false;
     }
 
   cookie->rel = cookie->rels;
@@ -12996,7 +13084,7 @@ _bfd_mips_elf_discard_info (bfd *abfd, s
       if (o->rawsize == 0)
 	o->rawsize = o->size;
       o->size -= skip * PDR_SIZE;
-      ret = TRUE;
+      ret = true;
     }
   else
     free (tdata);
@@ -13007,15 +13095,15 @@ _bfd_mips_elf_discard_info (bfd *abfd, s
   return ret;
 }
 
-bfd_boolean
+bool
 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
 {
   if (strcmp (sec->name, ".pdr") == 0)
-    return TRUE;
-  return FALSE;
+    return true;
+  return false;
 }
 
-bfd_boolean
+bool
 _bfd_mips_elf_write_section (bfd *output_bfd,
 			     struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
 			     asection *sec, bfd_byte *contents)
@@ -13024,10 +13112,10 @@ _bfd_mips_elf_write_section (bfd *output
   int i;
 
   if (strcmp (sec->name, ".pdr") != 0)
-    return FALSE;
+    return false;
 
   if (mips_elf_section_data (sec)->u.tdata == NULL)
-    return FALSE;
+    return false;
 
   to = contents;
   end = contents + sec->size;
@@ -13043,28 +13131,19 @@ _bfd_mips_elf_write_section (bfd *output
     }
   bfd_set_section_contents (output_bfd, sec->output_section, contents,
 			    sec->output_offset, sec->size);
-  return TRUE;
+  return true;
 }
 
 /* microMIPS code retains local labels for linker relaxation.  Omit them
    from output by default for clarity.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
 {
   return _bfd_elf_is_local_label_name (abfd, sym->name);
 }
 
-/* MIPS ELF uses a special find_nearest_line routine in order the
-   handle the ECOFF debugging information.  */
-
-struct mips_elf_find_line
-{
-  struct ecoff_debug_info d;
-  struct ecoff_find_line i;
-};
-
-bfd_boolean
+bool
 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
 				 asection *section, bfd_vma offset,
 				 const char **filename_ptr,
@@ -13080,7 +13159,7 @@ _bfd_mips_elf_find_nearest_line (bfd *ab
 				     dwarf_debug_sections,
 				     &elf_tdata (abfd)->dwarf2_find_line_info)
       == 1)
-    return TRUE;
+    return true;
 
   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
 				     filename_ptr, functionname_ptr,
@@ -13090,7 +13169,7 @@ _bfd_mips_elf_find_nearest_line (bfd *ab
 	_bfd_elf_find_function (abfd, symbols, section, offset,
 				*filename_ptr ? NULL : filename_ptr,
 				functionname_ptr);
-      return TRUE;
+      return true;
     }
 
   msec = bfd_get_section_by_name (abfd, ".mdebug");
@@ -13121,13 +13200,13 @@ _bfd_mips_elf_find_nearest_line (bfd *ab
 	  if (fi == NULL)
 	    {
 	      msec->flags = origflags;
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
 	    {
 	      msec->flags = origflags;
-	      return FALSE;
+	      return false;
 	    }
 
 	  /* Swap in the FDR information.  */
@@ -13135,8 +13214,9 @@ _bfd_mips_elf_find_nearest_line (bfd *ab
 	  fi->d.fdr = bfd_alloc (abfd, amt);
 	  if (fi->d.fdr == NULL)
 	    {
+	      _bfd_ecoff_free_ecoff_debug_info (&fi->d);
 	      msec->flags = origflags;
-	      return FALSE;
+	      return false;
 	    }
 	  external_fdr_size = swap->external_fdr_size;
 	  fdr_ptr = fi->d.fdr;
@@ -13147,13 +13227,6 @@ _bfd_mips_elf_find_nearest_line (bfd *ab
 	    (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
 
 	  mips_elf_tdata (abfd)->find_line_info = fi;
-
-	  /* Note that we don't bother to ever free this information.
-	     find_nearest_line is either called all the time, as in
-	     objdump -l, so the information should be saved, or it is
-	     rarely called, as in ld error messages, so the memory
-	     wasted is unimportant.  Still, it would probably be a
-	     good idea for free_cached_info to throw it away.  */
 	}
 
       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
@@ -13161,7 +13234,7 @@ _bfd_mips_elf_find_nearest_line (bfd *ab
 				  line_ptr))
 	{
 	  msec->flags = origflags;
-	  return TRUE;
+	  return true;
 	}
 
       msec->flags = origflags;
@@ -13174,13 +13247,13 @@ _bfd_mips_elf_find_nearest_line (bfd *ab
 				     line_ptr, discriminator_ptr);
 }
 
-bfd_boolean
+bool
 _bfd_mips_elf_find_inliner_info (bfd *abfd,
 				 const char **filename_ptr,
 				 const char **functionname_ptr,
 				 unsigned int *line_ptr)
 {
-  bfd_boolean found;
+  bool found;
   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
 					 functionname_ptr, line_ptr,
 					 & elf_tdata (abfd)->dwarf2_find_line_info);
@@ -13192,7 +13265,7 @@ _bfd_mips_elf_find_inliner_info (bfd *ab
    remember the bytes we are writing out, so that we can install the
    GP value in the section_processing routine.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
 				    const void *location,
 				    file_ptr offset, bfd_size_type count)
@@ -13203,17 +13276,17 @@ _bfd_mips_elf_set_section_contents (bfd
 
       if (elf_section_data (section) == NULL)
 	{
-	  bfd_size_type amt = sizeof (struct bfd_elf_section_data);
+	  size_t amt = sizeof (struct bfd_elf_section_data);
 	  section->used_by_bfd = bfd_zalloc (abfd, amt);
 	  if (elf_section_data (section) == NULL)
-	    return FALSE;
+	    return false;
 	}
       c = mips_elf_section_data (section)->u.tdata;
       if (c == NULL)
 	{
 	  c = bfd_zalloc (abfd, section->size);
 	  if (c == NULL)
-	    return FALSE;
+	    return false;
 	  mips_elf_section_data (section)->u.tdata = c;
 	}
 
@@ -13233,29 +13306,56 @@ _bfd_elf_mips_get_relocated_section_cont
    struct bfd_link_info *link_info,
    struct bfd_link_order *link_order,
    bfd_byte *data,
-   bfd_boolean relocatable,
+   bool relocatable,
    asymbol **symbols)
 {
-  /* Get enough memory to hold the stuff */
   bfd *input_bfd = link_order->u.indirect.section->owner;
   asection *input_section = link_order->u.indirect.section;
-  bfd_size_type sz;
-
-  long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
-  arelent **reloc_vector = NULL;
+  long reloc_size;
+  arelent **reloc_vector;
   long reloc_count;
 
+  reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
   if (reloc_size < 0)
-    goto error_return;
+    return NULL;
 
-  reloc_vector = bfd_malloc (reloc_size);
-  if (reloc_vector == NULL && reloc_size != 0)
-    goto error_return;
+  /* Read in the section.  */
+  bfd_byte *orig_data = data;
+  if (!bfd_get_full_section_contents (input_bfd, input_section, &data))
+    return NULL;
 
-  /* read in the section */
-  sz = input_section->rawsize ? input_section->rawsize : input_section->size;
-  if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
-    goto error_return;
+  if (data == NULL)
+    return NULL;
+
+  if (reloc_size == 0)
+    return data;
+
+  reloc_vector = (arelent **) bfd_malloc (reloc_size);
+  if (reloc_vector == NULL)
+    {
+      struct mips_elf_obj_tdata *tdata;
+      struct mips_hi16 **hip, *hi;
+    error_return:
+      /* If we are going to return an error, remove entries on
+	 mips_hi16_list that point into this section's data.  Data
+	 will typically be freed on return from this function.  */
+      tdata = mips_elf_tdata (abfd);
+      hip = &tdata->mips_hi16_list;
+      while ((hi = *hip) != NULL)
+	{
+	  if (hi->input_section == input_section)
+	    {
+	      *hip = hi->next;
+	      free (hi);
+	    }
+	  else
+	    hip = &hi->next;
+	}
+      if (orig_data == NULL)
+	free (data);
+      data = NULL;
+      goto out;
+    }
 
   reloc_count = bfd_canonicalize_reloc (input_bfd,
 					input_section,
@@ -13280,7 +13380,7 @@ _bfd_elf_mips_get_relocated_section_cont
 	  lh = 0;
 	else
 	  {
-	    h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
+	    h = bfd_hash_lookup (&link_info->hash->table, "_gp", false, false);
 	    lh = (struct bfd_link_hash_entry *) h;
 	  }
       lookup:
@@ -13312,26 +13412,69 @@ _bfd_elf_mips_get_relocated_section_cont
 	  gp_found = 0;
       }
       /* end mips */
+
       for (parent = reloc_vector; *parent != NULL; parent++)
 	{
 	  char *error_message = NULL;
+	  asymbol *symbol;
 	  bfd_reloc_status_type r;
 
+	  symbol = *(*parent)->sym_ptr_ptr;
+	  /* PR ld/19628: A specially crafted input file
+	     can result in a NULL symbol pointer here.  */
+	  if (symbol == NULL)
+	    {
+	      link_info->callbacks->einfo
+		/* xgettext:c-format */
+		(_("%X%P: %pB(%pA): error: relocation for offset %V has no value\n"),
+		 abfd, input_section, (* parent)->address);
+	      goto error_return;
+	    }
+
+	  /* Zap reloc field when the symbol is from a discarded
+	     section, ignoring any addend.  Do the same when called
+	     from bfd_simple_get_relocated_section_contents for
+	     undefined symbols in debug sections.  This is to keep
+	     debug info reasonably sane, in particular so that
+	     DW_FORM_ref_addr to another file's .debug_info isn't
+	     confused with an offset into the current file's
+	     .debug_info.  */
+	  if ((symbol->section != NULL && discarded_section (symbol->section))
+	      || (symbol->section == bfd_und_section_ptr
+		  && (input_section->flags & SEC_DEBUGGING) != 0
+		  && link_info->input_bfds == link_info->output_bfd))
+	    {
+	      bfd_vma off;
+	      static reloc_howto_type none_howto
+		= HOWTO (0, 0, 0, 0, false, 0, complain_overflow_dont, NULL,
+			 "unused", false, 0, 0, false);
+
+	      off = ((*parent)->address
+		     * bfd_octets_per_byte (input_bfd, input_section));
+	      _bfd_clear_contents ((*parent)->howto, input_bfd,
+				   input_section, data, off);
+	      (*parent)->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+	      (*parent)->addend = 0;
+	      (*parent)->howto = &none_howto;
+	      r = bfd_reloc_ok;
+	    }
+
 	  /* Specific to MIPS: Deal with relocation types that require
 	     knowing the gp of the output bfd.  */
-	  asymbol *sym = *(*parent)->sym_ptr_ptr;
 
 	  /* If we've managed to find the gp and have a special
 	     function for the relocation then go ahead, else default
 	     to the generic handling.  */
-	  if (gp_found
-	      && (*parent)->howto->special_function
-	      == _bfd_mips_elf32_gprel16_reloc)
-	    r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
+	  else if (gp_found
+		   && ((*parent)->howto->special_function
+		       == _bfd_mips_elf32_gprel16_reloc))
+	    r = _bfd_mips_elf_gprel16_with_gp (input_bfd, symbol, *parent,
 					       input_section, relocatable,
 					       data, gp);
 	  else
-	    r = bfd_perform_relocation (input_bfd, *parent, data,
+	    r = bfd_perform_relocation (input_bfd,
+					*parent,
+					data,
 					input_section,
 					relocatable ? abfd : NULL,
 					&error_message);
@@ -13340,7 +13483,7 @@ _bfd_elf_mips_get_relocated_section_cont
 	    {
 	      asection *os = input_section->output_section;
 
-	      /* A partial link, so keep the relocs */
+	      /* A partial link, so keep the relocs.  */
 	      os->orelocation[os->reloc_count] = *parent;
 	      os->reloc_count++;
 	    }
@@ -13352,7 +13495,7 @@ _bfd_elf_mips_get_relocated_section_cont
 		case bfd_reloc_undefined:
 		  (*link_info->callbacks->undefined_symbol)
 		    (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
-		     input_bfd, input_section, (*parent)->address, TRUE);
+		     input_bfd, input_section, (*parent)->address, true);
 		  break;
 		case bfd_reloc_dangerous:
 		  BFD_ASSERT (error_message != NULL);
@@ -13368,25 +13511,46 @@ _bfd_elf_mips_get_relocated_section_cont
 		     input_bfd, input_section, (*parent)->address);
 		  break;
 		case bfd_reloc_outofrange:
+		  /* PR ld/13730:
+		     This error can result when processing some partially
+		     complete binaries.  Do not abort, but issue an error
+		     message instead.  */
+		  link_info->callbacks->einfo
+		    /* xgettext:c-format */
+		    (_("%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"),
+		     abfd, input_section, * parent);
+		  goto error_return;
+
+		case bfd_reloc_notsupported:
+		  /* PR ld/17512
+		     This error can result when processing a corrupt binary.
+		     Do not abort.  Issue an error message instead.  */
+		  link_info->callbacks->einfo
+		    /* xgettext:c-format */
+		    (_("%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"),
+		     abfd, input_section, * parent);
+		  goto error_return;
+
 		default:
-		  abort ();
+		  /* PR 17512; file: 90c2a92e.
+		     Report unexpected results, without aborting.  */
+		  link_info->callbacks->einfo
+		    /* xgettext:c-format */
+		    (_("%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"),
+		     abfd, input_section, * parent, r);
 		  break;
 		}
 
 	    }
 	}
     }
-  if (reloc_vector != NULL)
-    free (reloc_vector);
-  return data;
 
-error_return:
-  if (reloc_vector != NULL)
-    free (reloc_vector);
-  return NULL;
+ out:
+  free (reloc_vector);
+  return data;
 }
 
-static bfd_boolean
+static bool
 mips_elf_relax_delete_bytes (bfd *abfd,
 			     asection *sec, bfd_vma addr, int count)
 {
@@ -13453,7 +13617,7 @@ mips_elf_relax_delete_bytes (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -13732,7 +13896,7 @@ check_br32_dslot (bfd *abfd, bfd_byte *p
 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
 
-static bfd_boolean
+static bool
 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
 {
   unsigned long opcode;
@@ -13747,15 +13911,15 @@ check_br16 (bfd *abfd, bfd_byte *ptr, un
       || (MATCH (opcode, jalr_insn_16_bd32)
 						/* JALR16  */
 	  && reg != JR16_REG (opcode) && reg != RA))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
    then return TRUE, otherwise FALSE.  */
 
-static bfd_boolean
+static bool
 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
 {
   unsigned long opcode;
@@ -13775,16 +13939,16 @@ check_br32 (bfd *abfd, bfd_byte *ptr, un
       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
 						/* JALR, JALR.HB, BEQ, BNE  */
 	  && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
    IRELEND) at OFFSET indicate that there must be a compact branch there,
    then return TRUE, otherwise FALSE.  */
 
-static bfd_boolean
+static bool
 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
 		     const Elf_Internal_Rela *internal_relocs,
 		     const Elf_Internal_Rela *irelend)
@@ -13794,14 +13958,14 @@ check_relocated_bzc (bfd *abfd, const bf
 
   opcode = bfd_get_micromips_32 (abfd, ptr);
   if (find_match (opcode, bzc_insns_32) < 0)
-    return FALSE;
+    return false;
 
   for (irel = internal_relocs; irel < irelend; irel++)
     if (irel->r_offset == offset
 	&& ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
-      return TRUE;
+      return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Bitsize checking.  */
@@ -13810,12 +13974,12 @@ check_relocated_bzc (bfd *abfd, const bf
     - (1ULL << ((N) - 1))) == (val))
 
 
-bfd_boolean
+bool
 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
 			     struct bfd_link_info *link_info,
-			     bfd_boolean *again)
+			     bool *again)
 {
-  bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
+  bool insn32 = mips_elf_hash_table (link_info)->insn32;
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
   Elf_Internal_Rela *irel, *irelend;
@@ -13823,17 +13987,18 @@ _bfd_mips_elf_relax_section (bfd *abfd,
   Elf_Internal_Sym *isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
      code section.  */
 
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -13850,7 +14015,7 @@ _bfd_mips_elf_relax_section (bfd *abfd,
     {
       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
-      bfd_boolean target_is_micromips_code_p;
+      bool target_is_micromips_code_p;
       unsigned long opcode;
       bfd_vma symval;
       bfd_vma pcrval;
@@ -13970,7 +14135,7 @@ _bfd_mips_elf_relax_section (bfd *abfd,
 	 out the offset).  */
       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
 	{
-	  bfd_boolean bzc = FALSE;
+	  bool bzc = false;
 	  unsigned long nextopc;
 	  unsigned long reg;
 	  bfd_vma offset;
@@ -14180,7 +14345,7 @@ _bfd_mips_elf_relax_section (bfd *abfd,
 	       && MATCH (opcode, jal_insn_32_bd32))
 	{
 	  unsigned long n32opc;
-	  bfd_boolean relaxed = FALSE;
+	  bool relaxed = false;
 
 	  n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
 
@@ -14189,7 +14354,7 @@ _bfd_mips_elf_relax_section (bfd *abfd,
 	      /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
 	      bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
 
-	      relaxed = TRUE;
+	      relaxed = true;
 	    }
 	  else if (find_match (n32opc, move_insns_32) >= 0)
 	    {
@@ -14200,7 +14365,7 @@ _bfd_mips_elf_relax_section (bfd *abfd,
 			   | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
 			  ptr + 4);
 
-	      relaxed = TRUE;
+	      relaxed = true;
 	    }
 	  /* Other 32-bit instructions relaxable to 16-bit
 	     instructions will be handled here later.  */
@@ -14231,7 +14396,7 @@ _bfd_mips_elf_relax_section (bfd *abfd,
 
 	  /* That will change things, so we should relax again.
 	     Note that this is not required, and it may be slow.  */
-	  *again = TRUE;
+	  *again = true;
 	}
     }
 
@@ -14259,24 +14424,20 @@ _bfd_mips_elf_relax_section (bfd *abfd,
 	}
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 /* Create a MIPS ELF linker hash table.  */
@@ -14285,7 +14446,7 @@ struct bfd_link_hash_table *
 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
 {
   struct mips_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
+  size_t amt = sizeof (struct mips_elf_link_hash_table);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -14318,8 +14479,7 @@ _bfd_mips_vxworks_link_hash_table_create
       struct mips_elf_link_hash_table *htab;
 
       htab = (struct mips_elf_link_hash_table *) ret;
-      htab->use_plts_and_copy_relocs = TRUE;
-      htab->is_vxworks = TRUE;
+      htab->use_plts_and_copy_relocs = true;
     }
   return ret;
 }
@@ -14330,7 +14490,7 @@ _bfd_mips_vxworks_link_hash_table_create
 void
 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
 {
-  mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
+  mips_elf_hash_table (info)->use_plts_and_copy_relocs = true;
 }
 
 /* A function that the linker calls to select between all or only
@@ -14339,9 +14499,9 @@ _bfd_mips_elf_use_plts_and_copy_relocs (
    Also record whether we have been configured for a GNU target.  */
 
 void
-_bfd_mips_elf_linker_flags (struct bfd_link_info *info, bfd_boolean insn32,
-			    bfd_boolean ignore_branch_isa,
-			    bfd_boolean gnu_target)
+_bfd_mips_elf_linker_flags (struct bfd_link_info *info, bool insn32,
+			    bool ignore_branch_isa,
+			    bool gnu_target)
 {
   mips_elf_hash_table (info)->insn32 = insn32;
   mips_elf_hash_table (info)->ignore_branch_isa = ignore_branch_isa;
@@ -14352,7 +14512,7 @@ _bfd_mips_elf_linker_flags (struct bfd_l
    linker generated code for MIPSR6.  */
 
 void
-_bfd_mips_elf_compact_branches (struct bfd_link_info *info, bfd_boolean on)
+_bfd_mips_elf_compact_branches (struct bfd_link_info *info, bool on)
 {
   mips_elf_hash_table (info)->compact_branches = on;
 }
@@ -14365,6 +14525,16 @@ struct mips_mach_extension
   unsigned long extension, base;
 };
 
+/* An array that maps 64-bit architectures to the corresponding 32-bit
+   architectures.  */
+static const struct mips_mach_extension mips_mach_32_64[] =
+{
+  { bfd_mach_mipsisa64r6, bfd_mach_mipsisa32r6 },
+  { bfd_mach_mipsisa64r5, bfd_mach_mipsisa32r5 },
+  { bfd_mach_mipsisa64r3, bfd_mach_mipsisa32r3 },
+  { bfd_mach_mipsisa64r2, bfd_mach_mipsisa32r2 },
+  { bfd_mach_mipsisa64,   bfd_mach_mipsisa32 }
+};
 
 /* An array describing how BFD machines relate to one another.  The entries
    are ordered topologically with MIPS I extensions listed last.  */
@@ -14436,39 +14606,48 @@ static const struct mips_mach_extension
   { bfd_mach_mips4000, bfd_mach_mips6000 },
   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
   { bfd_mach_mips4010, bfd_mach_mips6000 },
+  { bfd_mach_mips_allegrex, bfd_mach_mips6000 },
 
   /* MIPS I extensions.  */
   { bfd_mach_mips6000, bfd_mach_mips3000 },
   { bfd_mach_mips3900, bfd_mach_mips3000 }
 };
 
-/* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
+/* Return true if bfd machine EXTENSION is the same as BASE, or if
+   EXTENSION is the 64-bit equivalent of a 32-bit BASE.  */
 
-static bfd_boolean
-mips_mach_extends_p (unsigned long base, unsigned long extension)
+static bool
+mips_mach_extends_32_64 (unsigned long base, unsigned long extension)
 {
   size_t i;
 
   if (extension == base)
-    return TRUE;
+    return true;
+
+  for (i = 0; i < ARRAY_SIZE (mips_mach_32_64); i++)
+    if (extension == mips_mach_32_64[i].extension)
+      return base == mips_mach_32_64[i].base;
+
+  return false;
+}
+
+static bool
+mips_mach_extends_p (unsigned long base, unsigned long extension)
+{
+  size_t i;
 
-  if (base == bfd_mach_mipsisa32
-      && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
-    return TRUE;
-
-  if (base == bfd_mach_mipsisa32r2
-      && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
-    return TRUE;
+  if (mips_mach_extends_32_64 (base, extension))
+    return true;
 
   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
     if (extension == mips_mach_extensions[i].extension)
       {
 	extension = mips_mach_extensions[i].base;
-	if (extension == base)
-	  return TRUE;
+	if (mips_mach_extends_32_64 (base, extension))
+	  return true;
       }
 
-  return FALSE;
+  return false;
 }
 
 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
@@ -14545,17 +14724,17 @@ update_mips_abiflags_isa (bfd *abfd, Elf
   int new_isa = 0;
   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
     {
-    case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
-    case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
-    case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
-    case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
-    case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
-    case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
-    case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
-    case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
-    case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
-    case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
-    case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
+    case EF_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
+    case EF_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
+    case EF_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
+    case EF_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
+    case EF_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
+    case EF_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
+    case EF_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
+    case EF_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
+    case EF_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
+    case EF_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
+    case EF_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
     default:
       _bfd_error_handler
 	/* xgettext:c-format */
@@ -14577,17 +14756,17 @@ update_mips_abiflags_isa (bfd *abfd, Elf
 
 /* Return true if the given ELF header flags describe a 32-bit binary.  */
 
-static bfd_boolean
+static bool
 mips_32bit_flags_p (flagword flags)
 {
   return ((flags & EF_MIPS_32BITMODE) != 0
-	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
-	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
-	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
-	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
-	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
-	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
-	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
+	  || (flags & EF_MIPS_ABI) == EF_MIPS_ABI_O32
+	  || (flags & EF_MIPS_ABI) == EF_MIPS_ABI_EABI32
+	  || (flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_1
+	  || (flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_2
+	  || (flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_32
+	  || (flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_32R2
+	  || (flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_32R6);
 }
 
 /* Infer the content of the ABI flags based on the elf header.  */
@@ -14641,7 +14820,7 @@ infer_mips_abiflags (bfd *abfd, Elf_Inte
    the .mdebug sections.  We need to merge all instances of these
    sections together, not write them all out sequentially.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   asection *o;
@@ -14678,30 +14857,30 @@ _bfd_mips_elf_final_link (bfd *abfd, str
   /* Sort the dynamic symbols so that those with GOT entries come after
      those without.  */
   if (!mips_elf_sort_hash_table (abfd, info))
-    return FALSE;
+    return false;
 
   /* Create any scheduled LA25 stubs.  */
   hti.info = info;
   hti.output_bfd = abfd;
-  hti.error = FALSE;
+  hti.error = false;
   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
   if (hti.error)
-    return FALSE;
+    return false;
 
   /* Get a value for the GP register.  */
   if (elf_gp (abfd) == 0)
     {
       struct bfd_link_hash_entry *h;
 
-      h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->hash, "_gp", false, false, true);
       if (h != NULL && h->type == bfd_link_hash_defined)
 	elf_gp (abfd) = (h->u.def.value
 			 + h->u.def.section->output_section->vma
 			 + h->u.def.section->output_offset);
-      else if (htab->is_vxworks
+      else if (htab->root.target_os == is_vxworks
 	       && (h = bfd_link_hash_lookup (info->hash,
 					     "_GLOBAL_OFFSET_TABLE_",
-					     FALSE, FALSE, TRUE))
+					     false, false, true))
 	       && h->type == bfd_link_hash_defined)
 	elf_gp (abfd) = (h->u.def.section->output_section->vma
 			 + h->u.def.section->output_offset
@@ -14799,7 +14978,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 	      memset (&ext, 0, sizeof (ext));
 	      if (! bfd_get_section_contents (input_bfd, input_section,
 					      &ext, 0, sz))
-		return FALSE;
+		return false;
 
 	      bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
 
@@ -14854,6 +15033,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 
 	  /* We accumulate the debugging information itself in the
 	     debug_info structure.  */
+	  debug.alloc_syments = false;
 	  debug.line = NULL;
 	  debug.external_dnr = NULL;
 	  debug.external_pdr = NULL;
@@ -14868,7 +15048,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 
 	  mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
 	  if (mdebug_handle == NULL)
-	    return FALSE;
+	    return false;
 
 	  esym.jmptbl = 0;
 	  esym.cobol_main = 0;
@@ -14893,7 +15073,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 		esym.asym.value = last;
 	      if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
 						 secname[i], &esym))
-		return FALSE;
+		return false;
 	    }
 
 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
@@ -14933,12 +15113,15 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 		 ecoff_debug_info structure, so we do that now.  */
 	      if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
 						   &input_debug))
-		return FALSE;
+		return false;
 
 	      if (! (bfd_ecoff_debug_accumulate
 		     (mdebug_handle, abfd, &debug, swap, input_bfd,
 		      &input_debug, input_swap, info)))
-		return FALSE;
+		{
+		  _bfd_ecoff_free_ecoff_debug_info (&input_debug);
+		  return false;
+		}
 
 	      /* Loop through the external symbols.  For each one with
 		 interesting information, try to find the symbol in
@@ -14964,7 +15147,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 
 		  name = input_debug.ssext + ext.asym.iss;
 		  h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
-						 name, FALSE, FALSE, TRUE);
+						 name, false, false, true);
 		  if (h == NULL || h->esym.ifd != -2)
 		    continue;
 
@@ -14979,17 +15162,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 		}
 
 	      /* Free up the information we just read.  */
-	      free (input_debug.line);
-	      free (input_debug.external_dnr);
-	      free (input_debug.external_pdr);
-	      free (input_debug.external_sym);
-	      free (input_debug.external_opt);
-	      free (input_debug.external_aux);
-	      free (input_debug.ss);
-	      free (input_debug.ssext);
-	      free (input_debug.external_fdr);
-	      free (input_debug.external_rfd);
-	      free (input_debug.external_ext);
+	      _bfd_ecoff_free_ecoff_debug_info (&input_debug);
 
 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
 		 elf_link_input_bfd ignores this section.  */
@@ -15010,13 +15183,13 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 								   flags);
 		  if (rtproc_sec == NULL
 		      || !bfd_set_section_alignment (rtproc_sec, 4))
-		    return FALSE;
+		    return false;
 		}
 
 	      if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
 						     info, rtproc_sec,
 						     &debug))
-		return FALSE;
+		return false;
 	    }
 
 	  /* Build the external symbol information.  */
@@ -15024,11 +15197,11 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 	  einfo.info = info;
 	  einfo.debug = &debug;
 	  einfo.swap = swap;
-	  einfo.failed = FALSE;
+	  einfo.failed = false;
 	  mips_elf_link_hash_traverse (mips_elf_hash_table (info),
 				       mips_elf_output_extsym, &einfo);
 	  if (einfo.failed)
-	    return FALSE;
+	    return false;
 
 	  /* Set the size of the .mdebug section.  */
 	  o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
@@ -15040,7 +15213,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 	  mdebug_sec = o;
 	}
 
-      if (CONST_STRNEQ (o->name, ".gptab."))
+      if (startswith (o->name, ".gptab."))
 	{
 	  const char *subname;
 	  unsigned int c;
@@ -15095,7 +15268,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 		/* xgettext:c-format */
 		(_("%pB: illegal section name `%pA'"), abfd, o);
 	      bfd_set_error (bfd_error_nonrepresentable_section);
-	      return FALSE;
+	      return false;
 	    }
 
 	  /* The linker script always combines .gptab.data and
@@ -15119,7 +15292,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 	  amt = c * sizeof (Elf32_gptab);
 	  tab = bfd_malloc (amt);
 	  if (tab == NULL)
-	    return FALSE;
+	    return false;
 	  tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
 	  tab[0].gt_header.gt_unused = 0;
 
@@ -15155,7 +15328,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 		  Elf32_gptab int_gptab;
 		  unsigned long val;
 		  unsigned long add;
-		  bfd_boolean exact;
+		  bool exact;
 		  unsigned int look;
 
 		  if (! (bfd_get_section_contents
@@ -15163,7 +15336,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 			  sizeof (Elf32_External_gptab))))
 		    {
 		      free (tab);
-		      return FALSE;
+		      return false;
 		    }
 
 		  bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
@@ -15171,14 +15344,14 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 		  val = int_gptab.gt_entry.gt_g_value;
 		  add = int_gptab.gt_entry.gt_bytes - last;
 
-		  exact = FALSE;
+		  exact = false;
 		  for (look = 1; look < c; look++)
 		    {
 		      if (tab[look].gt_entry.gt_g_value >= val)
 			tab[look].gt_entry.gt_bytes += add;
 
 		      if (tab[look].gt_entry.gt_g_value == val)
-			exact = TRUE;
+			exact = true;
 		    }
 
 		  if (! exact)
@@ -15192,7 +15365,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 		      if (new_tab == NULL)
 			{
 			  free (tab);
-			  return FALSE;
+			  return false;
 			}
 		      tab = new_tab;
 		      tab[c].gt_entry.gt_g_value = val;
@@ -15235,7 +15408,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 	  if (ext_tab == NULL)
 	    {
 	      free (tab);
-	      return FALSE;
+	      return false;
 	    }
 
 	  for (j = 0; j < c; j++)
@@ -15253,7 +15426,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 
   /* Invoke the regular ELF backend linker to do all the work.  */
   if (!bfd_elf_final_link (abfd, info))
-    return FALSE;
+    return false;
 
   /* Now write out the computed sections.  */
 
@@ -15268,11 +15441,11 @@ _bfd_mips_elf_final_link (bfd *abfd, str
       if (!mips_elf_tdata (abfd)->abiflags_valid)
 	{
 	  infer_mips_abiflags (abfd, abiflags);
-	  mips_elf_tdata (abfd)->abiflags_valid = TRUE;
+	  mips_elf_tdata (abfd)->abiflags_valid = true;
 	}
       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
-	return FALSE;
+	return false;
     }
 
   if (reginfo_sec != NULL)
@@ -15281,7 +15454,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 
       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
-	return FALSE;
+	return false;
     }
 
   if (mdebug_sec != NULL)
@@ -15290,7 +15463,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
 					       swap, info,
 					       mdebug_sec->filepos))
-	return FALSE;
+	return false;
 
       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
     }
@@ -15300,7 +15473,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
       if (! bfd_set_section_contents (abfd, gptab_data_sec,
 				      gptab_data_sec->contents,
 				      0, gptab_data_sec->size))
-	return FALSE;
+	return false;
     }
 
   if (gptab_bss_sec != NULL)
@@ -15308,7 +15481,7 @@ _bfd_mips_elf_final_link (bfd *abfd, str
       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
 				      gptab_bss_sec->contents,
 				      0, gptab_bss_sec->size))
-	return FALSE;
+	return false;
     }
 
   if (SGI_COMPAT (abfd))
@@ -15319,24 +15492,24 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 	  if (! bfd_set_section_contents (abfd, rtproc_sec,
 					  rtproc_sec->contents,
 					  0, rtproc_sec->size))
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Merge object file header flags from IBFD into OBFD.  Raise an error
    if there are conflicting settings.  */
 
-static bfd_boolean
+static bool
 mips_elf_merge_obj_e_flags (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
   flagword old_flags;
   flagword new_flags;
-  bfd_boolean ok;
+  bool ok;
 
   new_flags = elf_elfheader (ibfd)->e_flags;
   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
@@ -15362,9 +15535,9 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
 
   if (new_flags == old_flags)
-    return TRUE;
+    return true;
 
-  ok = TRUE;
+  ok = true;
 
   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
@@ -15372,7 +15545,7 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
       _bfd_error_handler
 	(_("%pB: warning: linking abicalls files with non-abicalls files"),
 	 ibfd);
-      ok = TRUE;
+      ok = true;
     }
 
   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
@@ -15389,7 +15562,7 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
       _bfd_error_handler
 	(_("%pB: linking 32-bit code with 64-bit code"),
 	 ibfd);
-      ok = FALSE;
+      ok = false;
     }
   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
     {
@@ -15423,7 +15596,7 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
 	     ibfd,
 	     bfd_printable_name (ibfd),
 	     bfd_printable_name (obfd));
-	  ok = FALSE;
+	  ok = false;
 	}
     }
 
@@ -15447,7 +15620,7 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
 	     ibfd,
 	     elf_mips_abi_name (ibfd),
 	     elf_mips_abi_name (obfd));
-	  ok = FALSE;
+	  ok = false;
 	}
       new_flags &= ~EF_MIPS_ABI;
       old_flags &= ~EF_MIPS_ABI;
@@ -15472,7 +15645,7 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
 	     ibfd,
 	     m16_mis ? "MIPS16" : "microMIPS",
 	     m16_mis ? "microMIPS" : "MIPS16");
-	  ok = FALSE;
+	  ok = false;
 	}
 
       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
@@ -15491,7 +15664,7 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
 			   ? "-mnan=2008" : "-mnan=legacy"),
 			  (old_flags & EF_MIPS_NAN2008
 			   ? "-mnan=2008" : "-mnan=legacy"));
-      ok = FALSE;
+      ok = false;
       new_flags &= ~EF_MIPS_NAN2008;
       old_flags &= ~EF_MIPS_NAN2008;
     }
@@ -15506,7 +15679,7 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
 			   ? "-mfp64" : "-mfp32"),
 			  (old_flags & EF_MIPS_FP64
 			   ? "-mfp64" : "-mfp32"));
-      ok = FALSE;
+      ok = false;
       new_flags &= ~EF_MIPS_FP64;
       old_flags &= ~EF_MIPS_FP64;
     }
@@ -15519,7 +15692,7 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
 	(_("%pB: uses different e_flags (%#x) fields than previous modules "
 	   "(%#x)"),
 	 ibfd, new_flags, old_flags);
-      ok = FALSE;
+      ok = false;
     }
 
   return ok;
@@ -15527,7 +15700,7 @@ mips_elf_merge_obj_e_flags (bfd *ibfd, s
 
 /* Merge object attributes from IBFD into OBFD.  Raise an error if
    there are conflicting attributes.  */
-static bfd_boolean
+static bool
 mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -15555,7 +15728,7 @@ mips_elf_merge_obj_attributes (bfd *ibfd
 	 initialized.  */
       elf_known_obj_attributes_proc (obfd)[0].i = 1;
 
-      return TRUE;
+      return true;
     }
 
   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
@@ -15684,7 +15857,7 @@ mips_elf_merge_obj_attributes (bfd *ibfd
 /* Merge object ABI flags from IBFD into OBFD.  Raise an error if
    there are conflicting settings.  */
 
-static bfd_boolean
+static bool
 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
 {
   obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
@@ -15710,21 +15883,21 @@ mips_elf_merge_obj_abiflags (bfd *ibfd,
   out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
   out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
 
-  return TRUE;
+  return true;
 }
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
   struct mips_elf_obj_tdata *out_tdata;
   struct mips_elf_obj_tdata *in_tdata;
-  bfd_boolean null_input_bfd = TRUE;
+  bool null_input_bfd = true;
   asection *sec;
-  bfd_boolean ok;
+  bool ok;
 
   /* Check if we have the same endianness.  */
   if (! _bfd_generic_verify_endian_match (ibfd, info))
@@ -15732,11 +15905,11 @@ _bfd_mips_elf_merge_private_bfd_data (bf
       _bfd_error_handler
 	(_("%pB: endianness incompatible with that of the selected emulation"),
 	 ibfd);
-      return FALSE;
+      return false;
     }
 
   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
-    return TRUE;
+    return true;
 
   in_tdata = mips_elf_tdata (ibfd);
   out_tdata = mips_elf_tdata (obfd);
@@ -15746,12 +15919,13 @@ _bfd_mips_elf_merge_private_bfd_data (bf
       _bfd_error_handler
 	(_("%pB: ABI is incompatible with that of the selected emulation"),
 	 ibfd);
-      return FALSE;
+      return false;
     }
 
   /* Check to see if the input BFD actually contains any sections.  If not,
      then it has no attributes, and its flags may not have been initialized
      either, but it cannot actually cause any incompatibility.  */
+  /* FIXME: This excludes any input shared library from consideration.  */
   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
     {
       /* Ignore synthetic sections and empty .text, .data and .bss sections
@@ -15766,12 +15940,12 @@ _bfd_mips_elf_merge_private_bfd_data (bf
 		  && strcmp (sec->name, ".data")
 		  && strcmp (sec->name, ".bss"))))
 	{
-	  null_input_bfd = FALSE;
+	  null_input_bfd = false;
 	  break;
 	}
     }
   if (null_input_bfd)
-    return TRUE;
+    return true;
 
   /* Populate abiflags using existing information.  */
   if (in_tdata->abiflags_valid)
@@ -15823,19 +15997,19 @@ _bfd_mips_elf_merge_private_bfd_data (bf
   else
     {
       infer_mips_abiflags (ibfd, &in_tdata->abiflags);
-      in_tdata->abiflags_valid = TRUE;
+      in_tdata->abiflags_valid = true;
     }
 
   if (!out_tdata->abiflags_valid)
     {
       /* Copy input abiflags if output abiflags are not already valid.  */
       out_tdata->abiflags = in_tdata->abiflags;
-      out_tdata->abiflags_valid = TRUE;
+      out_tdata->abiflags_valid = true;
     }
 
   if (! elf_flags_init (obfd))
     {
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
       elf_elfheader (obfd)->e_ident[EI_CLASS]
 	= elf_elfheader (ibfd)->e_ident[EI_CLASS];
@@ -15847,13 +16021,13 @@ _bfd_mips_elf_merge_private_bfd_data (bf
 	{
 	  if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
 				   bfd_get_mach (ibfd)))
-	    return FALSE;
+	    return false;
 
 	  /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
 	  update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
 	}
 
-      ok = TRUE;
+      ok = true;
     }
   else
     ok = mips_elf_merge_obj_e_flags (ibfd, info);
@@ -15865,23 +16039,23 @@ _bfd_mips_elf_merge_private_bfd_data (bf
   if (!ok)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
 
-bfd_boolean
+bool
 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   BFD_ASSERT (!elf_flags_init (abfd)
 	      || elf_elfheader (abfd)->e_flags == flags);
 
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 char *
@@ -16190,7 +16364,7 @@ get_mips_reg_size (int reg_size)
 	 : -1;
 }
 
-bfd_boolean
+bool
 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE *file = ptr;
@@ -16203,13 +16377,13 @@ _bfd_mips_elf_print_private_bfd_data (bf
   /* xgettext:c-format */
   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
 
-  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
+  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == EF_MIPS_ABI_O32)
     fprintf (file, _(" [abi=O32]"));
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == EF_MIPS_ABI_O64)
     fprintf (file, _(" [abi=O64]"));
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == EF_MIPS_ABI_EABI32)
     fprintf (file, _(" [abi=EABI32]"));
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == EF_MIPS_ABI_EABI64)
     fprintf (file, _(" [abi=EABI64]"));
   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
     fprintf (file, _(" [abi unknown]"));
@@ -16220,27 +16394,27 @@ _bfd_mips_elf_print_private_bfd_data (bf
   else
     fprintf (file, _(" [no abi set]"));
 
-  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
+  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_1)
     fprintf (file, " [mips1]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_2)
     fprintf (file, " [mips2]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_3)
     fprintf (file, " [mips3]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_4)
     fprintf (file, " [mips4]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_5)
     fprintf (file, " [mips5]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_32)
     fprintf (file, " [mips32]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_64)
     fprintf (file, " [mips64]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_32R2)
     fprintf (file, " [mips32r2]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_64R2)
     fprintf (file, " [mips64r2]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_32R6)
     fprintf (file, " [mips32r6]");
-  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
+  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == EF_MIPS_ARCH_64R6)
     fprintf (file, " [mips64r6]");
   else
     fprintf (file, _(" [unknown ISA]"));
@@ -16306,7 +16480,7 @@ _bfd_mips_elf_print_private_bfd_data (bf
       fputc ('\n', file);
     }
 
-  return TRUE;
+  return true;
 }
 
 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
@@ -16326,33 +16500,33 @@ const struct bfd_elf_special_section _bf
    definiton of the symbol.  */
 void
 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
-				      const Elf_Internal_Sym *isym,
-				      bfd_boolean definition,
-				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
+				      unsigned int st_other,
+				      bool definition,
+				      bool dynamic ATTRIBUTE_UNUSED)
 {
-  if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
+  if ((st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
     {
       unsigned char other;
 
-      other = (definition ? isym->st_other : h->other);
+      other = (definition ? st_other : h->other);
       other &= ~ELF_ST_VISIBILITY (-1);
       h->other = other | ELF_ST_VISIBILITY (h->other);
     }
 
   if (!definition
-      && ELF_MIPS_IS_OPTIONAL (isym->st_other))
+      && ELF_MIPS_IS_OPTIONAL (st_other))
     h->other |= STO_OPTIONAL;
 }
 
 /* Decide whether an undefined symbol is special and can be ignored.
    This is the case for OPTIONAL symbols on IRIX.  */
-bfd_boolean
+bool
 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
 {
-  return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
+  return ELF_MIPS_IS_OPTIONAL (h->other) != 0;
 }
 
-bfd_boolean
+bool
 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
 {
   return (sym->st_shndx == SHN_COMMON
@@ -16393,9 +16567,9 @@ _bfd_mips_elf_get_synthetic_symtab (bfd
   static const char m16suffix[] = "@mips16plt";
   static const char mipssuffix[] = "@plt";
 
-  bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
+  bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
-  bfd_boolean micromips_p = MICROMIPS_P (abfd);
+  bool micromips_p = MICROMIPS_P (abfd);
   Elf_Internal_Shdr *hdr;
   bfd_byte *plt_data;
   bfd_vma plt_offset;
@@ -16431,18 +16605,18 @@ _bfd_mips_elf_get_synthetic_symtab (bfd
     return 0;
 
   plt = bfd_get_section_by_name (abfd, ".plt");
-  if (plt == NULL)
+  if (plt == NULL || (plt->flags & SEC_HAS_CONTENTS) == 0)
     return 0;
 
   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
-  if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
+  if (!(*slurp_relocs) (abfd, relplt, dynsyms, true))
     return -1;
   p = relplt->relocation;
 
   /* Calculating the exact amount of space required for symbols would
      require two passes over the PLT, so just pessimise assuming two
      PLT slots per relocation.  */
-  count = relplt->size / hdr->sh_entsize;
+  count = NUM_SHDR_ENTRIES (hdr);
   counti = count * bed->s->int_rels_per_ext_rel;
   size = 2 * count * sizeof (asymbol);
   size += count * (sizeof (mipssuffix) +
@@ -16636,14 +16810,14 @@ enum
   MIPS_LIBC_ABI_MAX
 };
 
-bfd_boolean
+bool
 _bfd_mips_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
 {
   struct mips_elf_link_hash_table *htab = NULL;
   Elf_Internal_Ehdr *i_ehdrp;
 
   if (!_bfd_elf_init_file_header (abfd, link_info))
-    return FALSE;
+    return false;
 
   i_ehdrp = elf_elfheader (abfd);
   if (link_info)
@@ -16652,7 +16826,9 @@ _bfd_mips_init_file_header (bfd *abfd, s
       BFD_ASSERT (htab != NULL);
     }
 
-  if (htab != NULL && htab->use_plts_and_copy_relocs && !htab->is_vxworks)
+  if (htab != NULL
+      && htab->use_plts_and_copy_relocs
+      && htab->root.target_os != is_vxworks)
     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_PLT;
 
   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
@@ -16667,7 +16843,7 @@ _bfd_mips_init_file_header (bfd *abfd, s
      if it is the only hash section that will be created.  */
   if (link_info && link_info->emit_gnu_hash && !link_info->emit_hash)
     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_XHASH;
-  return TRUE;
+  return true;
 }
 
 int
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-mips.h ./bfd/elfxx-mips.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-mips.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-mips.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS ELF specific backend routines.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,60 +22,75 @@
 #include "elf/internal.h"
 #include "elf/mips.h"
 
-extern bfd_boolean _bfd_mips_elf_mkobject
+enum reloc_check
+{
+  check_std,
+  check_inplace,
+  check_shuffle
+};
+
+#ifndef MIPS_DEFAULT_R6
+#define MIPS_DEFAULT_R6 0
+#endif
+
+struct ecoff_debug_info;
+
+extern bool _bfd_mips_elf_mkobject
+  (bfd *);
+extern bool _bfd_mips_elf_free_cached_info
   (bfd *);
-extern bfd_boolean _bfd_mips_elf_new_section_hook
+extern bool _bfd_mips_elf_new_section_hook
   (bfd *, asection *);
 extern void _bfd_mips_elf_symbol_processing
   (bfd *, asymbol *);
 extern unsigned int _bfd_mips_elf_eh_frame_address_size
   (bfd *, const asection *);
-extern bfd_boolean _bfd_mips_elf_name_local_section_symbols
+extern bool _bfd_mips_elf_name_local_section_symbols
   (bfd *);
-extern bfd_boolean _bfd_mips_elf_section_processing
+extern bool _bfd_mips_elf_section_processing
   (bfd *, Elf_Internal_Shdr *);
-extern bfd_boolean _bfd_mips_elf_section_from_shdr
+extern bool _bfd_mips_elf_section_from_shdr
   (bfd *, Elf_Internal_Shdr *, const char *, int);
-extern bfd_boolean _bfd_mips_elf_fake_sections
+extern bool _bfd_mips_elf_fake_sections
   (bfd *, Elf_Internal_Shdr *, asection *);
-extern bfd_boolean _bfd_mips_elf_section_from_bfd_section
+extern bool _bfd_mips_elf_section_from_bfd_section
   (bfd *, asection *, int *);
-extern bfd_boolean _bfd_mips_elf_add_symbol_hook
+extern bool _bfd_mips_elf_add_symbol_hook
   (bfd *, struct bfd_link_info *, Elf_Internal_Sym *,
    const char **, flagword *, asection **, bfd_vma *);
 extern int _bfd_mips_elf_link_output_symbol_hook
   (struct bfd_link_info *, const char *, Elf_Internal_Sym *,
    asection *, struct elf_link_hash_entry *);
-extern bfd_boolean _bfd_mips_elf_create_dynamic_sections
+extern bool _bfd_mips_elf_create_dynamic_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mips_elf_check_relocs
+extern bool _bfd_mips_elf_check_relocs
   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
-extern bfd_boolean _bfd_mips_elf_adjust_dynamic_symbol
+extern bool _bfd_mips_elf_adjust_dynamic_symbol
   (struct bfd_link_info *, struct elf_link_hash_entry *);
-extern bfd_boolean _bfd_mips_elf_always_size_sections
+extern bool _bfd_mips_elf_always_size_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mips_elf_size_dynamic_sections
+extern bool _bfd_mips_elf_size_dynamic_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mips_elf_relocate_section
+extern int _bfd_mips_elf_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
-extern bfd_boolean _bfd_mips_elf_finish_dynamic_symbol
+extern bool _bfd_mips_elf_finish_dynamic_symbol
   (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
    Elf_Internal_Sym *);
-extern bfd_boolean _bfd_mips_vxworks_finish_dynamic_symbol
+extern bool _bfd_mips_vxworks_finish_dynamic_symbol
   (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
    Elf_Internal_Sym *);
-extern bfd_boolean _bfd_mips_elf_finish_dynamic_sections
+extern bool _bfd_mips_elf_finish_dynamic_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mips_elf_sort_relocs_p
+extern bool _bfd_mips_elf_sort_relocs_p
   (asection *);
 extern void _bfd_mips_final_write_processing
   (bfd *);
-extern bfd_boolean _bfd_mips_elf_final_write_processing
+extern bool _bfd_mips_elf_final_write_processing
   (bfd *);
 extern int _bfd_mips_elf_additional_program_headers
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mips_elf_modify_segment_map
+extern bool _bfd_mips_elf_modify_segment_map
   (bfd *, struct bfd_link_info *);
 extern asection * _bfd_mips_elf_gc_mark_hook
   (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
@@ -84,51 +99,55 @@ extern void _bfd_mips_elf_copy_indirect_
   (struct bfd_link_info *, struct elf_link_hash_entry *,
    struct elf_link_hash_entry *);
 extern void _bfd_mips_elf_hide_symbol
-  (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean);
-extern bfd_boolean _bfd_mips_elf_ignore_discarded_relocs
+  (struct bfd_link_info *, struct elf_link_hash_entry *, bool);
+extern bool _bfd_mips_elf_ignore_discarded_relocs
   (asection *);
-extern bfd_boolean _bfd_mips_elf_is_target_special_symbol
+extern bool _bfd_mips_elf_is_target_special_symbol
   (bfd *abfd, asymbol *sym);
-extern bfd_boolean _bfd_mips_elf_find_nearest_line
+extern bool _bfd_mips_elf_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *);
-extern bfd_boolean _bfd_mips_elf_find_inliner_info
+#define _bfd_mips_elf_find_nearest_line_with_alt \
+  _bfd_nosymbols_find_nearest_line_with_alt
+extern bool _bfd_mips_elf_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *);
-extern bfd_boolean _bfd_mips_elf_set_section_contents
+extern bool _bfd_mips_elf_set_section_contents
   (bfd *, asection *, const void *, file_ptr, bfd_size_type);
 extern bfd_byte *_bfd_elf_mips_get_relocated_section_contents
   (bfd *, struct bfd_link_info *, struct bfd_link_order *,
-   bfd_byte *, bfd_boolean, asymbol **);
-extern bfd_boolean _bfd_mips_elf_relax_section
+   bfd_byte *, bool, asymbol **);
+extern bool _bfd_mips_elf_relax_section
   (bfd *abfd, asection *sec, struct bfd_link_info *link_info,
-   bfd_boolean *again);
+   bool *again);
 extern struct bfd_link_hash_table *_bfd_mips_elf_link_hash_table_create
   (bfd *);
 extern struct bfd_link_hash_table *_bfd_mips_vxworks_link_hash_table_create
   (bfd *);
-extern bfd_boolean _bfd_mips_elf_final_link
+extern bool _bfd_mips_elf_final_link
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mips_elf_merge_private_bfd_data
+extern bool _bfd_mips_elf_merge_private_bfd_data
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mips_elf_set_private_flags
+extern bool _bfd_mips_elf_set_private_flags
   (bfd *, flagword);
 extern const char * _bfd_mips_fp_abi_string
   (int);
-extern bfd_boolean _bfd_mips_elf_print_private_bfd_data
+extern bool _bfd_mips_elf_print_private_bfd_data
   (bfd *, void *);
-extern bfd_boolean _bfd_mips_elf_discard_info
+extern bool _bfd_mips_elf_discard_info
   (bfd *, struct elf_reloc_cookie *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mips_elf_write_section
+extern bool _bfd_mips_elf_write_section
   (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
 
-extern bfd_boolean _bfd_mips_elf_read_ecoff_info
+extern bool _bfd_mips_elf_read_ecoff_info
   (bfd *, asection *, struct ecoff_debug_info *);
 extern void _bfd_mips_elf_reloc_unshuffle
-  (bfd *, int, bfd_boolean, bfd_byte *);
+  (bfd *, int, bool, bfd_byte *);
 extern void _bfd_mips_elf_reloc_shuffle
-  (bfd *, int, bfd_boolean, bfd_byte *);
+  (bfd *, int, bool, bfd_byte *);
+extern bool _bfd_mips_reloc_offset_in_range
+  (bfd *, asection *, arelent *, enum reloc_check);
 extern bfd_reloc_status_type _bfd_mips_elf_gprel16_with_gp
-  (bfd *, asymbol *, arelent *, asection *, bfd_boolean, void *, bfd_vma);
+  (bfd *, asymbol *, arelent *, asection *, bool, void *, bfd_vma);
 extern bfd_reloc_status_type _bfd_mips_elf32_gprel16_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 extern bfd_reloc_status_type _bfd_mips_elf_hi16_reloc
@@ -144,31 +163,31 @@ extern unsigned long _bfd_elf_mips_mach
 extern bfd_vma _bfd_mips_elf_sign_extend
   (bfd_vma, int);
 extern void _bfd_mips_elf_merge_symbol_attribute
-  (struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean, bfd_boolean);
+  (struct elf_link_hash_entry *, unsigned int, bool, bool);
 extern char *_bfd_mips_elf_get_target_dtag (bfd_vma);
-extern bfd_boolean _bfd_mips_elf_ignore_undef_symbol
+extern bool _bfd_mips_elf_ignore_undef_symbol
   (struct elf_link_hash_entry *);
 extern void _bfd_mips_elf_use_plts_and_copy_relocs
   (struct bfd_link_info *);
 extern void _bfd_mips_elf_linker_flags
-  (struct bfd_link_info *, bfd_boolean, bfd_boolean, bfd_boolean);
+  (struct bfd_link_info *, bool, bool, bool);
 extern void _bfd_mips_elf_compact_branches
-  (struct bfd_link_info *, bfd_boolean);
-extern bfd_boolean _bfd_mips_elf_init_stubs
+  (struct bfd_link_info *, bool);
+extern bool _bfd_mips_elf_init_stubs
   (struct bfd_link_info *,
    asection *(*) (const char *, asection *, asection *));
 extern bfd_vma _bfd_mips_elf_plt_sym_val
   (bfd_vma, const asection *, const arelent *rel);
 extern long _bfd_mips_elf_get_synthetic_symtab
   (bfd *, long, asymbol **, long, asymbol **, asymbol **);
-extern bfd_boolean _bfd_mips_elf_gc_mark_extra_sections
+extern bool _bfd_mips_elf_gc_mark_extra_sections
   (struct bfd_link_info *, elf_gc_mark_hook_fn);
-extern bfd_boolean _bfd_mips_init_file_header
+extern bool _bfd_mips_init_file_header
   (bfd *abfd, struct bfd_link_info *link_info);
 
 extern const struct bfd_elf_special_section _bfd_mips_elf_special_sections [];
 
-extern bfd_boolean _bfd_mips_elf_common_definition (Elf_Internal_Sym *);
+extern bool _bfd_mips_elf_common_definition (Elf_Internal_Sym *);
 
 extern int _bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *);
 extern int _bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *);
@@ -179,7 +198,7 @@ extern void _bfd_mips_elf_record_xhash_s
 /* MIPS ABI flags data access.  For the disassembler.  */
 extern struct elf_internal_abiflags_v0 *bfd_mips_elf_get_abiflags (bfd *);
 
-static inline bfd_boolean
+static inline bool
 gprel16_reloc_p (unsigned int r_type)
 {
   return (r_type == R_MIPS_GPREL16
@@ -188,7 +207,7 @@ gprel16_reloc_p (unsigned int r_type)
 	  || r_type == R_MICROMIPS_GPREL7_S2);
 }
 
-static inline bfd_boolean
+static inline bool
 literal_reloc_p (int r_type)
 {
   return r_type == R_MIPS_LITERAL || r_type == R_MICROMIPS_LITERAL;
@@ -205,4 +224,4 @@ literal_reloc_p (int r_type)
 #define elf_backend_compact_eh_encoding _bfd_mips_elf_compact_eh_encoding
 #define elf_backend_cant_unwind_opcode _bfd_mips_elf_cant_unwind_opcode
 #define elf_backend_record_xhash_symbol _bfd_mips_elf_record_xhash_symbol
-#define elf_backend_always_renumber_dynsyms TRUE
+#define elf_backend_always_renumber_dynsyms true
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-riscv.c ./bfd/elfxx-riscv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-riscv.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-riscv.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* RISC-V-specific support for ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    Contributed by Andrew Waterman (andrew@sifive.com).
    Based on TILE-Gx and MIPS targets.
@@ -38,6 +38,8 @@
    relocations for the debug info.  */
 static bfd_reloc_status_type riscv_elf_add_sub_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type riscv_elf_ignore_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 
 /* The relocation table used for SHT_RELA sections.  */
 
@@ -46,177 +48,176 @@ static reloc_howto_type howto_table[] =
   /* No relocation.  */
   HOWTO (R_RISCV_NONE,			/* type */
 	 0,				/* rightshift */
-	 3,				/* size */
+	 0,				/* size */
 	 0,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_NONE",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 0,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* 32 bit relocation.  */
   HOWTO (R_RISCV_32,			/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_32",			/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   /* 64 bit relocation.  */
   HOWTO (R_RISCV_64,			/* type */
 	 0,				/* rightshift */
-	 4,				/* size */
+	 8,				/* size */
 	 64,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_64",			/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* Relocation against a local symbol in a shared object.  */
   HOWTO (R_RISCV_RELATIVE,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_RELATIVE",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   HOWTO (R_RISCV_COPY,			/* type */
 	 0,				/* rightshift */
 	 0,				/* this one is variable size */
 	 0,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_COPY",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 0,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   HOWTO (R_RISCV_JUMP_SLOT,		/* type */
 	 0,				/* rightshift */
-	 4,				/* size */
+	 8,				/* size */
 	 64,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_bitfield,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_JUMP_SLOT",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 0,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* Dynamic TLS relocations.  */
   HOWTO (R_RISCV_TLS_DTPMOD32,		/* type */
 	 0,				/* rightshift */
 	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TLS_DTPMOD32",	/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   HOWTO (R_RISCV_TLS_DTPMOD64,		/* type */
 	 0,				/* rightshift */
-	 4,				/* size */
+	 8,				/* size */
 	 64,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TLS_DTPMOD64",	/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   HOWTO (R_RISCV_TLS_DTPREL32,		/* type */
 	 0,				/* rightshift */
 	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TLS_DTPREL32",	/* name */
-	 TRUE,				/* partial_inplace */
+	 true,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   HOWTO (R_RISCV_TLS_DTPREL64,		/* type */
 	 0,				/* rightshift */
-	 4,				/* size */
+	 8,				/* size */
 	 64,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TLS_DTPREL64",	/* name */
-	 TRUE,				/* partial_inplace */
+	 true,				/* partial_inplace */
 	 0,				/* src_mask */
 	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   HOWTO (R_RISCV_TLS_TPREL32,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TLS_TPREL32",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   HOWTO (R_RISCV_TLS_TPREL64,		/* type */
 	 0,				/* rightshift */
-	 4,				/* size */
+	 8,				/* size */
 	 64,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TLS_TPREL64",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
-  /* Reserved for future relocs that the dynamic linker must understand.  */
   EMPTY_HOWTO (12),
   EMPTY_HOWTO (13),
   EMPTY_HOWTO (14),
@@ -225,640 +226,672 @@ static reloc_howto_type howto_table[] =
   /* 12-bit PC-relative branch offset.  */
   HOWTO (R_RISCV_BRANCH,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_BRANCH",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_SBTYPE_IMM (-1U),	/* dst_mask */
-	 TRUE),				/* pcrel_offset */
+	 ENCODE_BTYPE_IMM (-1U),	/* dst_mask */
+	 true),				/* pcrel_offset */
 
   /* 20-bit PC-relative jump offset.  */
   HOWTO (R_RISCV_JAL,			/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_JAL",			/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_UJTYPE_IMM (-1U),	/* dst_mask */
-	 TRUE),				/* pcrel_offset */
+	 ENCODE_JTYPE_IMM (-1U),	/* dst_mask */
+	 true),				/* pcrel_offset */
 
   /* 32-bit PC-relative function call (AUIPC/JALR).  */
   HOWTO (R_RISCV_CALL,			/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 8,				/* size */
 	 64,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_CALL",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_UTYPE_IMM (-1U) | ((bfd_vma) ENCODE_ITYPE_IMM (-1U) << 32),
 					/* dst_mask */
-	 TRUE),				/* pcrel_offset */
+	 true),				/* pcrel_offset */
 
   /* Like R_RISCV_CALL, but not locally binding.  */
   HOWTO (R_RISCV_CALL_PLT,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 8,				/* size */
 	 64,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_CALL_PLT",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_UTYPE_IMM (-1U) | ((bfd_vma) ENCODE_ITYPE_IMM (-1U) << 32),
 					/* dst_mask */
-	 TRUE),				/* pcrel_offset */
+	 true),				/* pcrel_offset */
 
   /* High 20 bits of 32-bit PC-relative GOT access.  */
   HOWTO (R_RISCV_GOT_HI20,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_GOT_HI20",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_UTYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* High 20 bits of 32-bit PC-relative TLS IE GOT access.  */
   HOWTO (R_RISCV_TLS_GOT_HI20,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TLS_GOT_HI20",	/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_UTYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* High 20 bits of 32-bit PC-relative TLS GD GOT reference.  */
   HOWTO (R_RISCV_TLS_GD_HI20,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TLS_GD_HI20",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_UTYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* High 20 bits of 32-bit PC-relative reference.  */
   HOWTO (R_RISCV_PCREL_HI20,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_PCREL_HI20",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_UTYPE_IMM (-1U),	/* dst_mask */
-	 TRUE),				/* pcrel_offset */
+	 true),				/* pcrel_offset */
 
   /* Low 12 bits of a 32-bit PC-relative load or add.  */
   HOWTO (R_RISCV_PCREL_LO12_I,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_PCREL_LO12_I",	/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_ITYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* Low 12 bits of a 32-bit PC-relative store.  */
   HOWTO (R_RISCV_PCREL_LO12_S,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_PCREL_LO12_S",	/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_STYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* High 20 bits of 32-bit absolute address.  */
   HOWTO (R_RISCV_HI20,			/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_HI20",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_UTYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* High 12 bits of 32-bit load or add.  */
   HOWTO (R_RISCV_LO12_I,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_LO12_I",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_ITYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* High 12 bits of 32-bit store.  */
   HOWTO (R_RISCV_LO12_S,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_LO12_S",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_STYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* High 20 bits of TLS LE thread pointer offset.  */
   HOWTO (R_RISCV_TPREL_HI20,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TPREL_HI20",		/* name */
-	 TRUE,				/* partial_inplace */
+	 true,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_UTYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* Low 12 bits of TLS LE thread pointer offset for loads and adds.  */
   HOWTO (R_RISCV_TPREL_LO12_I,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TPREL_LO12_I",	/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_ITYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* Low 12 bits of TLS LE thread pointer offset for stores.  */
   HOWTO (R_RISCV_TPREL_LO12_S,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TPREL_LO12_S",	/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_STYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* TLS LE thread pointer usage.  May be relaxed.  */
   HOWTO (R_RISCV_TPREL_ADD,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
-	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 0,				/* size */
+	 0,				/* bitsize */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_TPREL_ADD",		/* name */
-	 TRUE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 0,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* 8-bit in-place addition, for local label subtraction.  */
   HOWTO (R_RISCV_ADD8,			/* type */
 	 0,				/* rightshift */
-	 0,				/* size */
+	 1,				/* size */
 	 8,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 riscv_elf_add_sub_reloc,	/* special_function */
 	 "R_RISCV_ADD8",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xff,				/* dst_mask */
+	 false),			/* pcrel_offset */
 
   /* 16-bit in-place addition, for local label subtraction.  */
   HOWTO (R_RISCV_ADD16,			/* type */
 	 0,				/* rightshift */
-	 1,				/* size */
+	 2,				/* size */
 	 16,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 riscv_elf_add_sub_reloc,	/* special_function */
 	 "R_RISCV_ADD16",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   /* 32-bit in-place addition, for local label subtraction.  */
   HOWTO (R_RISCV_ADD32,			/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 riscv_elf_add_sub_reloc,	/* special_function */
 	 "R_RISCV_ADD32",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   /* 64-bit in-place addition, for local label subtraction.  */
   HOWTO (R_RISCV_ADD64,			/* type */
 	 0,				/* rightshift */
-	 4,				/* size */
+	 8,				/* size */
 	 64,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 riscv_elf_add_sub_reloc,	/* special_function */
 	 "R_RISCV_ADD64",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* 8-bit in-place addition, for local label subtraction.  */
   HOWTO (R_RISCV_SUB8,			/* type */
 	 0,				/* rightshift */
-	 0,				/* size */
+	 1,				/* size */
 	 8,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 riscv_elf_add_sub_reloc,	/* special_function */
 	 "R_RISCV_SUB8",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xff,				/* dst_mask */
+	 false),			/* pcrel_offset */
 
   /* 16-bit in-place addition, for local label subtraction.  */
   HOWTO (R_RISCV_SUB16,			/* type */
 	 0,				/* rightshift */
-	 1,				/* size */
+	 2,				/* size */
 	 16,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 riscv_elf_add_sub_reloc,	/* special_function */
 	 "R_RISCV_SUB16",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   /* 32-bit in-place addition, for local label subtraction.  */
   HOWTO (R_RISCV_SUB32,			/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 riscv_elf_add_sub_reloc,	/* special_function */
 	 "R_RISCV_SUB32",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   /* 64-bit in-place addition, for local label subtraction.  */
   HOWTO (R_RISCV_SUB64,			/* type */
 	 0,				/* rightshift */
-	 4,				/* size */
+	 8,				/* size */
 	 64,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 riscv_elf_add_sub_reloc,	/* special_function */
 	 "R_RISCV_SUB64",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
-  /* GNU extension to record C++ vtable hierarchy */
-  HOWTO (R_RISCV_GNU_VTINHERIT,		/* type */
-	 0,				/* rightshift */
-	 4,				/* size */
-	 0,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 NULL,				/* special_function */
-	 "R_RISCV_GNU_VTINHERIT",	/* name */
-	 FALSE,				/* partial_inplace */
-	 0,				/* src_mask */
-	 0,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
-
-  /* GNU extension to record C++ vtable member usage */
-  HOWTO (R_RISCV_GNU_VTENTRY,		/* type */
-	 0,				/* rightshift */
-	 4,				/* size */
-	 0,				/* bitsize */
-	 FALSE,				/* pc_relative */
-	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
-	 "R_RISCV_GNU_VTENTRY",		/* name */
-	 FALSE,				/* partial_inplace */
-	 0,				/* src_mask */
-	 0,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+  EMPTY_HOWTO (41),
+  EMPTY_HOWTO (42),
 
   /* Indicates an alignment statement.  The addend field encodes how many
      bytes of NOPs follow the statement.  The desired alignment is the
      addend rounded up to the next power of two.  */
   HOWTO (R_RISCV_ALIGN,			/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 0,				/* size */
 	 0,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_ALIGN",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 0,				/* dst_mask */
-	 TRUE),				/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* 8-bit PC-relative branch offset.  */
   HOWTO (R_RISCV_RVC_BRANCH,		/* type */
 	 0,				/* rightshift */
 	 2,				/* size */
-	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 16,				/* bitsize */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_RVC_BRANCH",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_RVC_B_IMM (-1U),	/* dst_mask */
-	 TRUE),				/* pcrel_offset */
+	 ENCODE_CBTYPE_IMM (-1U),	/* dst_mask */
+	 true),				/* pcrel_offset */
 
   /* 11-bit PC-relative jump offset.  */
   HOWTO (R_RISCV_RVC_JUMP,		/* type */
 	 0,				/* rightshift */
 	 2,				/* size */
-	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 16,				/* bitsize */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_RVC_JUMP",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_RVC_J_IMM (-1U),	/* dst_mask */
-	 TRUE),				/* pcrel_offset */
+	 ENCODE_CJTYPE_IMM (-1U),	/* dst_mask */
+	 true),				/* pcrel_offset */
 
-  /* High 6 bits of 18-bit absolute address.  */
-  HOWTO (R_RISCV_RVC_LUI,		/* type */
+  EMPTY_HOWTO (46),
+  EMPTY_HOWTO (47),
+  EMPTY_HOWTO (48),
+  EMPTY_HOWTO (49),
+  EMPTY_HOWTO (50),
+
+  /* The paired relocation may be relaxed.  */
+  HOWTO (R_RISCV_RELAX,			/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
-	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 0,				/* size */
+	 0,				/* bitsize */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_RVC_LUI",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_RELAX",		/* name */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
+	 0,				/* dst_mask */
+	 false),			/* pcrel_offset */
+
+  /* 6-bit in-place addition, for local label subtraction.  */
+  HOWTO (R_RISCV_SUB6,			/* type */
+	 0,				/* rightshift */
+	 1,				/* size */
+	 8,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 riscv_elf_add_sub_reloc,	/* special_function */
+	 "R_RISCV_SUB6",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_RVC_IMM (-1U),		/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0x3f,				/* dst_mask */
+	 false),			/* pcrel_offset */
 
-  /* GP-relative load.  */
-  HOWTO (R_RISCV_GPREL_I,		/* type */
+  /* 6-bit in-place setting, for local label subtraction.  */
+  HOWTO (R_RISCV_SET6,			/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
-	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 1,				/* size */
+	 8,				/* bitsize */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_GPREL_I",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_SET6",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_ITYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0x3f,				/* dst_mask */
+	 false),			/* pcrel_offset */
 
-  /* GP-relative store.  */
-  HOWTO (R_RISCV_GPREL_S,		/* type */
+  /* 8-bit in-place setting, for local label subtraction.  */
+  HOWTO (R_RISCV_SET8,			/* type */
+	 0,				/* rightshift */
+	 1,				/* size */
+	 8,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_RISCV_SET8",		/* name */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
+	 0xff,				/* dst_mask */
+	 false),			/* pcrel_offset */
+
+  /* 16-bit in-place setting, for local label subtraction.  */
+  HOWTO (R_RISCV_SET16,			/* type */
 	 0,				/* rightshift */
 	 2,				/* size */
+	 16,				/* bitsize */
+	 false,				/* pc_relative */
+	 0,				/* bitpos */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,		/* special_function */
+	 "R_RISCV_SET16",		/* name */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
+	 0xffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
+
+  /* 32-bit in-place setting, for local label subtraction.  */
+  HOWTO (R_RISCV_SET32,			/* type */
+	 0,				/* rightshift */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_GPREL_S",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_SET32",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_STYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
-  /* TP-relative TLS LE load.  */
-  HOWTO (R_RISCV_TPREL_I,		/* type */
+  /* 32-bit PC relative.  */
+  HOWTO (R_RISCV_32_PCREL,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 true,				/* pc_relative */
 	 0,				/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
+	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_TPREL_I",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_32_PCREL",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_ITYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
-  /* TP-relative TLS LE store.  */
-  HOWTO (R_RISCV_TPREL_S,		/* type */
+  /* Relocation against a local ifunc symbol in a shared object.  */
+  HOWTO (R_RISCV_IRELATIVE,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
+	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_TPREL_S",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_IRELATIVE",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_STYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
-  /* The paired relocation may be relaxed.  */
-  HOWTO (R_RISCV_RELAX,			/* type */
+  /* Reserved for R_RISCV_PLT32.  */
+  EMPTY_HOWTO (59),
+
+  /* N-bit in-place setting, for unsigned-leb128 local label subtraction.  */
+  HOWTO (R_RISCV_SET_ULEB128,		/* type */
 	 0,				/* rightshift */
-	 3,				/* size */
+	 0,				/* size */
 	 0,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_RELAX",		/* name */
-	 FALSE,				/* partial_inplace */
+	 riscv_elf_ignore_reloc,	/* special_function */
+	 "R_RISCV_SET_ULEB128",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 0,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
-  /* 6-bit in-place addition, for local label subtraction.  */
-  HOWTO (R_RISCV_SUB6,			/* type */
+  /* N-bit in-place addition, for unsigned-leb128 local label subtraction.  */
+  HOWTO (R_RISCV_SUB_ULEB128,		/* type */
 	 0,				/* rightshift */
 	 0,				/* size */
-	 8,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 0,				/* bitsize */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
-	 riscv_elf_add_sub_reloc,	/* special_function */
-	 "R_RISCV_SUB6",		/* name */
-	 FALSE,				/* partial_inplace */
+	 riscv_elf_ignore_reloc,	/* special_function */
+	 "R_RISCV_SUB_ULEB128",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 0x3f,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0,				/* dst_mask */
+	 false),			/* pcrel_offset */
+};
 
-  /* 6-bit in-place setting, for local label subtraction.  */
-  HOWTO (R_RISCV_SET6,			/* type */
+static reloc_howto_type howto_table_internal[] =
+{
+  /* R_RISCV_DELETE.  */
+  EMPTY_HOWTO (0),
+
+  /* High 6 bits of 18-bit absolute address.  */
+  HOWTO (R_RISCV_RVC_LUI,		/* type */
 	 0,				/* rightshift */
-	 0,				/* size */
-	 8,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 2,				/* size */
+	 16,				/* bitsize */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_SET6",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_RVC_LUI",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 0x3f,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 ENCODE_CITYPE_IMM (-1U),	/* dst_mask */
+	 false),			/* pcrel_offset */
 
-  /* 8-bit in-place setting, for local label subtraction.  */
-  HOWTO (R_RISCV_SET8,			/* type */
+  /* GP-relative load.  */
+  HOWTO (R_RISCV_GPREL_I,		/* type */
 	 0,				/* rightshift */
-	 0,				/* size */
-	 8,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 4,				/* size */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_SET8",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_GPREL_I",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 ENCODE_ITYPE_IMM (-1U),	/* dst_mask */
+	 false),			/* pcrel_offset */
 
-  /* 16-bit in-place setting, for local label subtraction.  */
-  HOWTO (R_RISCV_SET16,			/* type */
+  /* GP-relative store.  */
+  HOWTO (R_RISCV_GPREL_S,		/* type */
 	 0,				/* rightshift */
-	 1,				/* size */
-	 16,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 4,				/* size */
+	 32,				/* bitsize */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_SET16",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_GPREL_S",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 ENCODE_STYPE_IMM (-1U),	/* dst_mask */
+	 false),			/* pcrel_offset */
 
-  /* 32-bit in-place setting, for local label subtraction.  */
-  HOWTO (R_RISCV_SET32,			/* type */
+  /* TP-relative TLS LE load.  */
+  HOWTO (R_RISCV_TPREL_I,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
+	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_SET32",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_TPREL_I",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 ENCODE_ITYPE_IMM (-1U),	/* dst_mask */
+	 false),			/* pcrel_offset */
 
-  /* 32-bit PC relative.  */
-  HOWTO (R_RISCV_32_PCREL,		/* type */
+  /* TP-relative TLS LE store.  */
+  HOWTO (R_RISCV_TPREL_S,		/* type */
 	 0,				/* rightshift */
-	 2,				/* size */
+	 4,				/* size */
 	 32,				/* bitsize */
-	 TRUE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
+	 complain_overflow_signed,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
-	 "R_RISCV_32_PCREL",		/* name */
-	 FALSE,				/* partial_inplace */
+	 "R_RISCV_TPREL_S",		/* name */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 ENCODE_STYPE_IMM (-1U),	/* dst_mask */
+	 false),			/* pcrel_offset */
 };
 
 /* A mapping from BFD reloc types to RISC-V ELF reloc types.  */
-
 struct elf_reloc_map
 {
   bfd_reloc_code_real_type bfd_val;
@@ -905,11 +938,6 @@ static const struct elf_reloc_map riscv_
   { BFD_RELOC_RISCV_ALIGN, R_RISCV_ALIGN },
   { BFD_RELOC_RISCV_RVC_BRANCH, R_RISCV_RVC_BRANCH },
   { BFD_RELOC_RISCV_RVC_JUMP, R_RISCV_RVC_JUMP },
-  { BFD_RELOC_RISCV_RVC_LUI, R_RISCV_RVC_LUI },
-  { BFD_RELOC_RISCV_GPREL_I, R_RISCV_GPREL_I },
-  { BFD_RELOC_RISCV_GPREL_S, R_RISCV_GPREL_S },
-  { BFD_RELOC_RISCV_TPREL_I, R_RISCV_TPREL_I },
-  { BFD_RELOC_RISCV_TPREL_S, R_RISCV_TPREL_S },
   { BFD_RELOC_RISCV_RELAX, R_RISCV_RELAX },
   { BFD_RELOC_RISCV_SUB6, R_RISCV_SUB6 },
   { BFD_RELOC_RISCV_SET6, R_RISCV_SET6 },
@@ -917,6 +945,8 @@ static const struct elf_reloc_map riscv_
   { BFD_RELOC_RISCV_SET16, R_RISCV_SET16 },
   { BFD_RELOC_RISCV_SET32, R_RISCV_SET32 },
   { BFD_RELOC_RISCV_32_PCREL, R_RISCV_32_PCREL },
+  { BFD_RELOC_RISCV_SET_ULEB128, R_RISCV_SET_ULEB128 },
+  { BFD_RELOC_RISCV_SUB_ULEB128, R_RISCV_SUB_ULEB128 },
 };
 
 /* Given a BFD reloc type, return a howto structure.  */
@@ -950,14 +980,17 @@ riscv_reloc_name_lookup (bfd *abfd ATTRI
 reloc_howto_type *
 riscv_elf_rtype_to_howto (bfd *abfd, unsigned int r_type)
 {
-  if (r_type >= ARRAY_SIZE (howto_table))
+  if (r_type < ARRAY_SIZE (howto_table))
+    return &howto_table[r_type];
+  else if (r_type < R_RISCV_max + ARRAY_SIZE (howto_table_internal))
+    return &howto_table_internal[r_type - R_RISCV_max];
+  else
     {
       (*_bfd_error_handler) (_("%pB: unsupported relocation type %#x"),
 			     abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
       return NULL;
     }
-  return &howto_table[r_type];
 }
 
 /* Special_function of RISCV_ADD and RISCV_SUB relocations.  */
@@ -987,6 +1020,13 @@ riscv_elf_add_sub_reloc (bfd *abfd,
 
   relocation = symbol->value + symbol->section->output_section->vma
     + symbol->section->output_offset + reloc_entry->addend;
+
+  bfd_size_type octets = reloc_entry->address
+    * bfd_octets_per_byte (abfd, input_section);
+  if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
+				  input_section, octets))
+    return bfd_reloc_outofrange;
+
   bfd_vma old_value = bfd_get (howto->bitsize, abfd,
 			       data + reloc_entry->address);
 
@@ -999,6 +1039,10 @@ riscv_elf_add_sub_reloc (bfd *abfd,
       relocation = old_value + relocation;
       break;
     case R_RISCV_SUB6:
+      relocation = (old_value & ~howto->dst_mask)
+		   | (((old_value & howto->dst_mask) - relocation)
+		      & howto->dst_mask);
+      break;
     case R_RISCV_SUB8:
     case R_RISCV_SUB16:
     case R_RISCV_SUB32:
@@ -1011,256 +1055,765 @@ riscv_elf_add_sub_reloc (bfd *abfd,
   return bfd_reloc_ok;
 }
 
-/* Parsing subset version.
+/* Special handler for relocations which don't have to be relocated.
+   This function just simply return bfd_reloc_ok.  */
 
-   Return Value:
-     Points to the end of version
+static bfd_reloc_status_type
+riscv_elf_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			arelent *reloc_entry,
+			asymbol *symbol ATTRIBUTE_UNUSED,
+			void *data ATTRIBUTE_UNUSED,
+			asection *input_section,
+			bfd *output_bfd,
+			char **error_message ATTRIBUTE_UNUSED)
+{
+  if (output_bfd != NULL)
+    reloc_entry->address += input_section->output_offset;
+  return bfd_reloc_ok;
+}
 
-   Arguments:
-     `rps`: Hooks and status for parsing subset.
-     `march`: Full arch string.
-     `p`: Curent parsing position.
-     `major_version`: Parsing result of major version, using
-      default_major_version if version is not present in arch string.
-     `minor_version`: Parsing result of minor version, set to 0 if version is
-     not present in arch string, but set to `default_minor_version` if
-     `major_version` using default_major_version.
-     `default_major_version`: Default major version.
-     `default_minor_version`: Default minor version.
-     `std_ext_p`: True if parsing std extension.  */
+/* Always add the IMPLICIT for the SUBSET.  */
 
-static const char *
-riscv_parsing_subset_version (riscv_parse_subset_t *rps,
-			      const char *march,
-			      const char *p,
-			      unsigned *major_version,
-			      unsigned *minor_version,
-			      unsigned default_major_version,
-			      unsigned default_minor_version,
-			      bfd_boolean std_ext_p)
-{
-  bfd_boolean major_p = TRUE;
-  unsigned version = 0;
-  unsigned major = 0;
-  unsigned minor = 0;
-  char np;
+static bool
+check_implicit_always (const char *implicit ATTRIBUTE_UNUSED,
+		       riscv_subset_t *subset ATTRIBUTE_UNUSED)
+{
+  return true;
+}
+
+/* Add the IMPLICIT only when the version of SUBSET less than 2.1.  */
+
+static bool
+check_implicit_for_i (const char *implicit ATTRIBUTE_UNUSED,
+		      riscv_subset_t *subset)
+{
+  return (subset->major_version < 2
+	  || (subset->major_version == 2
+	      && subset->minor_version < 1));
+}
+
+/* Record all implicit information for the subsets.  */
+struct riscv_implicit_subset
+{
+  const char *subset_name;
+  const char *implicit_name;
+  /* A function to determine if we need to add the implicit subset.  */
+  bool (*check_func) (const char *, riscv_subset_t *);
+};
+static struct riscv_implicit_subset riscv_implicit_subsets[] =
+{
+  {"e", "i",		check_implicit_always},
+  {"i", "zicsr",	check_implicit_for_i},
+  {"i", "zifencei",	check_implicit_for_i},
+  {"g", "i",		check_implicit_always},
+  {"g", "m",		check_implicit_always},
+  {"g", "a",		check_implicit_always},
+  {"g", "f",		check_implicit_always},
+  {"g", "d",		check_implicit_always},
+  {"g", "zicsr",	check_implicit_always},
+  {"g", "zifencei",	check_implicit_always},
+  {"m", "zmmul",	check_implicit_always},
+  {"h", "zicsr",	check_implicit_always},
+  {"q", "d",		check_implicit_always},
+  {"v", "d",		check_implicit_always},
+  {"v", "zve64d",	check_implicit_always},
+  {"v", "zvl128b",	check_implicit_always},
+  {"zvfh", "zvfhmin",	check_implicit_always},
+  {"zvfh", "zfhmin",	check_implicit_always},
+  {"zvfhmin", "zve32f",	check_implicit_always},
+  {"zve64d", "d",	check_implicit_always},
+  {"zve64d", "zve64f",	check_implicit_always},
+  {"zve64f", "zve32f",	check_implicit_always},
+  {"zve64f", "zve64x",	check_implicit_always},
+  {"zve64f", "zvl64b",	check_implicit_always},
+  {"zve32f", "f",	check_implicit_always},
+  {"zve32f", "zvl32b",	check_implicit_always},
+  {"zve32f", "zve32x",	check_implicit_always},
+  {"zve64x", "zve32x",	check_implicit_always},
+  {"zve64x", "zvl64b",	check_implicit_always},
+  {"zve32x", "zvl32b",	check_implicit_always},
+  {"zve32x", "zicsr",	check_implicit_always},
+  {"zvl65536b", "zvl32768b",	check_implicit_always},
+  {"zvl32768b", "zvl16384b",	check_implicit_always},
+  {"zvl16384b", "zvl8192b",	check_implicit_always},
+  {"zvl8192b", "zvl4096b",	check_implicit_always},
+  {"zvl4096b", "zvl2048b",	check_implicit_always},
+  {"zvl2048b", "zvl1024b",	check_implicit_always},
+  {"zvl1024b", "zvl512b",	check_implicit_always},
+  {"zvl512b", "zvl256b",	check_implicit_always},
+  {"zvl256b", "zvl128b",	check_implicit_always},
+  {"zvl128b", "zvl64b",		check_implicit_always},
+  {"zvl64b", "zvl32b",		check_implicit_always},
+  {"zicntr", "zicsr",		check_implicit_always},
+  {"zihpm", "zicsr",		check_implicit_always},
+  {"zcd", "d",		check_implicit_always},
+  {"zcf", "f",		check_implicit_always},
+  {"zfa", "f",		check_implicit_always},
+  {"d", "f",		check_implicit_always},
+  {"zfh", "zfhmin",	check_implicit_always},
+  {"zfhmin", "f",	check_implicit_always},
+  {"f", "zicsr",	check_implicit_always},
+  {"zqinx", "zdinx",	check_implicit_always},
+  {"zdinx", "zfinx",	check_implicit_always},
+  {"zhinx", "zhinxmin",	check_implicit_always},
+  {"zhinxmin", "zfinx",	check_implicit_always},
+  {"zfinx", "zicsr",	check_implicit_always},
+  {"zk", "zkn",		check_implicit_always},
+  {"zk", "zkr",		check_implicit_always},
+  {"zk", "zkt",		check_implicit_always},
+  {"zkn", "zbkb",	check_implicit_always},
+  {"zkn", "zbkc",	check_implicit_always},
+  {"zkn", "zbkx",	check_implicit_always},
+  {"zkn", "zkne",	check_implicit_always},
+  {"zkn", "zknd",	check_implicit_always},
+  {"zkn", "zknh",	check_implicit_always},
+  {"zks", "zbkb",	check_implicit_always},
+  {"zks", "zbkc",	check_implicit_always},
+  {"zks", "zbkx",	check_implicit_always},
+  {"zks", "zksed",	check_implicit_always},
+  {"zks", "zksh",	check_implicit_always},
+  {"zvbb", "zvkb",	check_implicit_always},
+  {"zvkn", "zvkned",	check_implicit_always},
+  {"zvkn", "zvknha",	check_implicit_always},
+  {"zvkn", "zvknhb",	check_implicit_always},
+  {"zvkn", "zvkb",	check_implicit_always},
+  {"zvkn", "zvkt",	check_implicit_always},
+  {"zvkng", "zvkn",	check_implicit_always},
+  {"zvkng", "zvkg",	check_implicit_always},
+  {"zvknc", "zvkn",	check_implicit_always},
+  {"zvknc", "zvbc",	check_implicit_always},
+  {"zvks", "zvksed",	check_implicit_always},
+  {"zvks", "zvksh",	check_implicit_always},
+  {"zvks", "zvkb",	check_implicit_always},
+  {"zvks", "zvkt",	check_implicit_always},
+  {"zvksg", "zvks",	check_implicit_always},
+  {"zvksg", "zvkg",	check_implicit_always},
+  {"zvksc", "zvks",	check_implicit_always},
+  {"zvksc", "zvbc",	check_implicit_always},
+  {"zcf", "zca",	check_implicit_always},
+  {"zcd", "zca",	check_implicit_always},
+  {"zcb", "zca",	check_implicit_always},
+  {"smaia", "ssaia",		check_implicit_always},
+  {"smcntrpmf", "zicsr",	check_implicit_always},
+  {"smstateen", "ssstateen",	check_implicit_always},
+  {"smepmp", "zicsr",		check_implicit_always},
+  {"ssaia", "zicsr",		check_implicit_always},
+  {"sscofpmf", "zicsr",		check_implicit_always},
+  {"ssstateen", "zicsr",	check_implicit_always},
+  {"sstc", "zicsr",		check_implicit_always},
+  {"svadu", "zicsr",		check_implicit_always},
 
-  for (;*p; ++p)
+  {"xsfvcp", "zve32x",  check_implicit_always},
+  {NULL, NULL, NULL}
+};
+
+/* For default_enable field, decide if the extension should
+   be enbaled by default.  */
+
+#define EXT_DEFAULT   0x1
+
+/* List all extensions that binutils should know about.  */
+
+struct riscv_supported_ext
+{
+  const char *name;
+  enum riscv_spec_class isa_spec_class;
+  int major_version;
+  int minor_version;
+  unsigned long default_enable;
+};
+
+/* The standard extensions must be added in canonical order.  */
+
+static struct riscv_supported_ext riscv_supported_std_ext[] =
+{
+  {"e",		ISA_SPEC_CLASS_20191213,	1, 9, 0 },
+  {"e",		ISA_SPEC_CLASS_20190608,	1, 9, 0 },
+  {"e",		ISA_SPEC_CLASS_2P2,		1, 9, 0 },
+  {"i",		ISA_SPEC_CLASS_20191213,	2, 1, 0 },
+  {"i",		ISA_SPEC_CLASS_20190608,	2, 1, 0 },
+  {"i",		ISA_SPEC_CLASS_2P2,		2, 0, 0 },
+  /* The g is a special case which we don't want to output it,
+     but still need it when adding implicit extensions.  */
+  {"g",		ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, EXT_DEFAULT },
+  {"m",		ISA_SPEC_CLASS_20191213,	2, 0, 0 },
+  {"m",		ISA_SPEC_CLASS_20190608,	2, 0, 0 },
+  {"m",		ISA_SPEC_CLASS_2P2,		2, 0, 0 },
+  {"a",		ISA_SPEC_CLASS_20191213,	2, 1, 0 },
+  {"a",		ISA_SPEC_CLASS_20190608,	2, 0, 0 },
+  {"a",		ISA_SPEC_CLASS_2P2,		2, 0, 0 },
+  {"f",		ISA_SPEC_CLASS_20191213,	2, 2, 0 },
+  {"f",		ISA_SPEC_CLASS_20190608,	2, 2, 0 },
+  {"f",		ISA_SPEC_CLASS_2P2,		2, 0, 0 },
+  {"d",		ISA_SPEC_CLASS_20191213,	2, 2, 0 },
+  {"d",		ISA_SPEC_CLASS_20190608,	2, 2, 0 },
+  {"d",		ISA_SPEC_CLASS_2P2,		2, 0, 0 },
+  {"q",		ISA_SPEC_CLASS_20191213,	2, 2, 0 },
+  {"q",		ISA_SPEC_CLASS_20190608,	2, 2, 0 },
+  {"q",		ISA_SPEC_CLASS_2P2,		2, 0, 0 },
+  {"c",		ISA_SPEC_CLASS_20191213,	2, 0, 0 },
+  {"c",		ISA_SPEC_CLASS_20190608,	2, 0, 0 },
+  {"c",		ISA_SPEC_CLASS_2P2,		2, 0, 0 },
+  {"v",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"h",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {NULL, 0, 0, 0, 0}
+};
+
+static struct riscv_supported_ext riscv_supported_std_z_ext[] =
+{
+  {"zicbom",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zicbop",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zicboz",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zicond",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zicntr",		ISA_SPEC_CLASS_DRAFT,		2, 0,  0 },
+  {"zicsr",		ISA_SPEC_CLASS_20191213,	2, 0,  0 },
+  {"zicsr",		ISA_SPEC_CLASS_20190608,	2, 0,  0 },
+  {"zifencei",		ISA_SPEC_CLASS_20191213,	2, 0,  0 },
+  {"zifencei",		ISA_SPEC_CLASS_20190608,	2, 0,  0 },
+  {"zihintntl",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zihintpause",	ISA_SPEC_CLASS_DRAFT,		2, 0,  0 },
+  {"zihpm",		ISA_SPEC_CLASS_DRAFT,		2, 0,  0 },
+  {"zmmul",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zawrs",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zfa",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zfh",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zfhmin",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zfinx",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zdinx",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zqinx",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zhinx",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zhinxmin",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zbb",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zba",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zbc",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zbs",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zbkb",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zbkc",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zbkx",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zk",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zkn",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zknd",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zkne",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zknh",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zkr",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zks",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zksed",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zksh",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zkt",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zve32x",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zve32f",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zve64x",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zve64f",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zve64d",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvbb",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvbc",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvfh",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvfhmin",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvkb",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvkg",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvkn",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvkng",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvknc",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvkned",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvknha",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvknhb",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvksed",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvksh",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvks",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvksg",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvksc",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvkt",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl32b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl64b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl128b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl256b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl512b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl1024b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl2048b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl4096b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl8192b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl16384b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl32768b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zvl65536b",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"ztso",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zca",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zcb",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zcf",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {"zcd",		ISA_SPEC_CLASS_DRAFT,		1, 0,  0 },
+  {NULL, 0, 0, 0, 0}
+};
+
+static struct riscv_supported_ext riscv_supported_std_s_ext[] =
+{
+  {"smaia",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"smcntrpmf",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"smepmp",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"smstateen",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"ssaia",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"sscofpmf",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"ssstateen",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"sstc",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"svadu",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"svinval",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"svnapot",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"svpbmt",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {NULL, 0, 0, 0, 0}
+};
+
+static struct riscv_supported_ext riscv_supported_std_zxm_ext[] =
+{
+  {NULL, 0, 0, 0, 0}
+};
+
+static struct riscv_supported_ext riscv_supported_vendor_x_ext[] =
+{
+  {"xcvmac",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xcvalu",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadba",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadbb",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadbs",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadcmo",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadcondmov",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadfmemidx",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadfmv",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadint",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadmac",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadmemidx",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadmempair",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadsync",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadvector",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadzvamo",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xventanacondops",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xsfvcp",		ISA_SPEC_CLASS_DRAFT,	1, 0, 0},
+  {NULL, 0, 0, 0, 0}
+};
+
+const struct riscv_supported_ext *riscv_all_supported_ext[] =
+{
+  riscv_supported_std_ext,
+  riscv_supported_std_z_ext,
+  riscv_supported_std_s_ext,
+  riscv_supported_std_zxm_ext,
+  riscv_supported_vendor_x_ext,
+  NULL
+};
+
+/* ISA extension prefixed name class.  Must define them in parsing order.  */
+enum riscv_prefix_ext_class
+{
+  RV_ISA_CLASS_Z = 1,
+  RV_ISA_CLASS_S,
+  RV_ISA_CLASS_ZXM,
+  RV_ISA_CLASS_X,
+  RV_ISA_CLASS_SINGLE
+};
+
+/* Record the strings of the prefixed extensions, and their corresponding
+   classes.  The more letters of the prefix string, the more forward it must
+   be defined.  Otherwise, the riscv_get_prefix_class will map it to the
+   wrong classes.  */
+struct riscv_parse_prefix_config
+{
+  /* Class of the extension. */
+  enum riscv_prefix_ext_class class;
+
+  /* Prefix string for error printing and internal parser usage.  */
+  const char *prefix;
+};
+static const struct riscv_parse_prefix_config parse_config[] =
+{
+  {RV_ISA_CLASS_ZXM, "zxm"},
+  {RV_ISA_CLASS_Z, "z"},
+  {RV_ISA_CLASS_S, "s"},
+  {RV_ISA_CLASS_X, "x"},
+  {RV_ISA_CLASS_SINGLE, NULL}
+};
+
+/* Get the prefixed name class for the extensions, the class also
+   means the order of the prefixed extensions.  */
+
+static enum riscv_prefix_ext_class
+riscv_get_prefix_class (const char *arch)
+{
+  int i = 0;
+  while (parse_config[i].class != RV_ISA_CLASS_SINGLE)
     {
-      if (*p == 'p')
-	{
-	  np = *(p + 1);
+      if (strncmp (arch, parse_config[i].prefix,
+		   strlen (parse_config[i].prefix)) == 0)
+	return parse_config[i].class;
+      i++;
+    }
+  return RV_ISA_CLASS_SINGLE;
+}
 
-	  if (!ISDIGIT (np))
-	    {
-	      /* Might be beginning of `p` extension.  */
-	      if (std_ext_p)
-		{
-		  *major_version = version;
-		  *minor_version = 0;
-		  return p;
-		}
-	      else
-		{
-		  rps->error_handler ("-march=%s: Expect number after `%dp'.",
-				      march, version);
-		  return NULL;
-		}
-	    }
+/* Check KNOWN_EXTS to see if the EXT is supported.  */
 
-	  major = version;
-	  major_p = FALSE;
-	  version = 0;
+static bool
+riscv_known_prefixed_ext (const char *ext,
+			  struct riscv_supported_ext *known_exts)
+{
+  size_t i;
+  for (i = 0; known_exts[i].name != NULL; ++i)
+    if (strcmp (ext, known_exts[i].name) == 0)
+      return true;
+  return false;
+}
+
+/* Check whether the prefixed extension is recognized or not.  Return
+   true if recognized, otehrwise return false.  */
+
+static bool
+riscv_recognized_prefixed_ext (const char *ext)
+{
+  enum riscv_prefix_ext_class class = riscv_get_prefix_class (ext);
+  switch (class)
+  {
+  case RV_ISA_CLASS_Z:
+    return riscv_known_prefixed_ext (ext, riscv_supported_std_z_ext);
+  case RV_ISA_CLASS_ZXM:
+    return riscv_known_prefixed_ext (ext, riscv_supported_std_zxm_ext);
+  case RV_ISA_CLASS_S:
+    return riscv_known_prefixed_ext (ext, riscv_supported_std_s_ext);
+  case RV_ISA_CLASS_X:
+    /* Only the single x is unrecognized.  */
+    if (strcmp (ext, "x") != 0)
+      return true;
+  default:
+    break;
+  }
+  return false;
+}
+
+/* Canonical order for single letter extensions.  */
+static const char riscv_ext_canonical_order[] = "eigmafdqlcbkjtpvnh";
+
+/* Array is used to compare the orders of standard extensions quickly.  */
+static int riscv_ext_order[26] = {0};
+
+/* Init the riscv_ext_order array.  */
+
+static void
+riscv_init_ext_order (void)
+{
+  static bool inited = false;
+  if (inited)
+    return;
+
+  /* The orders of all standard extensions are positive.  */
+  int order = 1;
+
+  for (const char *ext = &riscv_ext_canonical_order[0]; *ext; ++ext)
+    riscv_ext_order[(*ext - 'a')] = order++;
+
+  /* Some of the prefixed keyword are not single letter, so we set
+     their prefixed orders in the riscv_compare_subsets directly,
+     not through the riscv_ext_order.  */
+
+  inited = true;
+}
+
+/* Similar to the strcmp.  It returns an integer less than, equal to,
+   or greater than zero if `subset2` is found, respectively, to be less
+   than, to match, or be greater than `subset1`.
+
+   The order values,
+   Zero: Preserved keywords.
+   Positive number: Standard extensions.
+   Negative number: Prefixed keywords.  */
+
+int
+riscv_compare_subsets (const char *subset1, const char *subset2)
+{
+  int order1 = riscv_ext_order[(*subset1 - 'a')];
+  int order2 = riscv_ext_order[(*subset2 - 'a')];
+
+  /* Compare the standard extension first.  */
+  if (order1 > 0 && order2 > 0)
+    return order1 - order2;
+
+  /* Set the prefixed orders to negative numbers.  */
+  enum riscv_prefix_ext_class class1 = riscv_get_prefix_class (subset1);
+  enum riscv_prefix_ext_class class2 = riscv_get_prefix_class (subset2);
+
+  if (class1 != RV_ISA_CLASS_SINGLE)
+    order1 = - (int) class1;
+  if (class2 != RV_ISA_CLASS_SINGLE)
+    order2 = - (int) class2;
+
+  if (order1 == order2)
+    {
+      /* Compare the standard addition z extensions.  */
+      if (class1 == RV_ISA_CLASS_Z)
+	{
+	  order1 = riscv_ext_order[(*++subset1 - 'a')];
+	  order2 = riscv_ext_order[(*++subset2 - 'a')];
+	  if (order1 != order2)
+	    return order1 - order2;
 	}
-      else if (ISDIGIT (*p))
-	version = (version * 10) + (*p - '0');
-      else
-	break;
+      return strcasecmp (++subset1, ++subset2);
     }
 
-  if (major_p)
-    major = version;
-  else
-    minor = version;
+  return order2 - order1;
+}
+
+/* Find subset in the list.  Return TRUE and set `current` to the subset
+   if it is found.  Otherwise, return FALSE and set `current` to the place
+   where we should insert the subset.  However, return FALSE with the NULL
+   `current` means we should insert the subset at the head of subset list,
+   if needed.  */
+
+bool
+riscv_lookup_subset (const riscv_subset_list_t *subset_list,
+		     const char *subset,
+		     riscv_subset_t **current)
+{
+  riscv_subset_t *s, *pre_s = NULL;
 
-  if (major == 0 && minor == 0)
+  /* If the subset is added in order, then just add it at the tail.  */
+  if (subset_list->tail != NULL
+      && riscv_compare_subsets (subset_list->tail->name, subset) < 0)
     {
-      /* We don't found any version string, use default version.  */
-      *major_version = default_major_version;
-      *minor_version = default_minor_version;
+      *current = subset_list->tail;
+      return false;
     }
-  else
+
+  for (s = subset_list->head;
+       s != NULL;
+       pre_s = s, s = s->next)
     {
-      *major_version = major;
-      *minor_version = minor;
+      int cmp = riscv_compare_subsets (s->name, subset);
+      if (cmp == 0)
+	{
+	  *current = s;
+	  return true;
+	}
+      else if (cmp > 0)
+	break;
     }
-  return p;
+  *current = pre_s;
+
+  return false;
 }
 
-/* Return string which contain all supported standard extensions in
-   canonical order.  */
+/* Add the extension to the subset list.  Search the
+   list first, and then find the right place to add.  */
 
-const char *
-riscv_supported_std_ext (void)
+void
+riscv_add_subset (riscv_subset_list_t *subset_list,
+		  const char *subset,
+		  int major,
+		  int minor)
 {
-  return "mafdqlcbjtpvn";
-}
+  riscv_subset_t *current, *new;
 
-/* Parsing function for standard extensions.
+  if (riscv_lookup_subset (subset_list, subset, &current))
+    return;
 
-   Return Value:
-     Points to the end of extensions.
+  new = xmalloc (sizeof *new);
+  new->name = xstrdup (subset);
+  new->major_version = major;
+  new->minor_version = minor;
+  new->next = NULL;
 
-   Arguments:
-     `rps`: Hooks and status for parsing subset.
-     `march`: Full arch string.
-     `p`: Curent parsing position.  */
+  if (current != NULL)
+    {
+      new->next = current->next;
+      current->next = new;
+    }
+  else
+    {
+      new->next = subset_list->head;
+      subset_list->head = new;
+    }
 
-static const char *
-riscv_parse_std_ext (riscv_parse_subset_t *rps,
-		     const char *march, const char *p)
-{
-  const char *all_std_exts = riscv_supported_std_ext ();
-  const char *std_exts = all_std_exts;
+  if (new->next == NULL)
+    subset_list->tail = new;
+}
 
-  unsigned major_version = 0;
-  unsigned minor_version = 0;
-  char std_ext = '\0';
+/* Get the default versions from the riscv_supported_*ext tables.  */
 
-  /* First letter must start with i, e or g.  */
-  switch (*p)
+static void
+riscv_get_default_ext_version (enum riscv_spec_class *default_isa_spec,
+			       const char *name,
+			       int *major_version,
+			       int *minor_version)
+{
+  if (name == NULL
+      || default_isa_spec == NULL
+      || *default_isa_spec == ISA_SPEC_CLASS_NONE)
+    return;
+
+  struct riscv_supported_ext *table = NULL;
+  enum riscv_prefix_ext_class class = riscv_get_prefix_class (name);
+  switch (class)
     {
-      case 'i':
-	p++;
-	p = riscv_parsing_subset_version (
-	      rps,
-	      march,
-	      p, &major_version, &minor_version,
-	      /* default_major_version= */ 2,
-	      /* default_minor_version= */ 0,
-	      /* std_ext_p= */TRUE);
-	riscv_add_subset (rps->subset_list, "i", major_version, minor_version);
-	break;
+    case RV_ISA_CLASS_ZXM: table = riscv_supported_std_zxm_ext; break;
+    case RV_ISA_CLASS_Z: table = riscv_supported_std_z_ext; break;
+    case RV_ISA_CLASS_S: table = riscv_supported_std_s_ext; break;
+    case RV_ISA_CLASS_X: table = riscv_supported_vendor_x_ext; break;
+    default:
+      table = riscv_supported_std_ext;
+    }
 
-      case 'e':
-	p++;
-	p = riscv_parsing_subset_version (
-	      rps,
-	      march,
-	      p, &major_version, &minor_version,
-	      /* default_major_version= */ 1,
-	      /* default_minor_version= */ 9,
-	      /* std_ext_p= */TRUE);
-
-	riscv_add_subset (rps->subset_list, "e", major_version, minor_version);
-	riscv_add_subset (rps->subset_list, "i", 2, 0);
-
-	if (*rps->xlen > 32)
-	  {
-	    rps->error_handler ("-march=%s: rv%de is not a valid base ISA",
-				march, *rps->xlen);
-	    return NULL;
-	  }
+  int i = 0;
+  while (table != NULL && table[i].name != NULL)
+    {
+      if (strcmp (table[i].name, name) == 0
+	  && (table[i].isa_spec_class == ISA_SPEC_CLASS_DRAFT
+	      || table[i].isa_spec_class == *default_isa_spec))
+	{
+	  *major_version = table[i].major_version;
+	  *minor_version = table[i].minor_version;
+	  return;
+	}
+      i++;
+    }
+}
 
-	break;
+/* Find the default versions for the extension before adding them to
+   the subset list, if their versions are RISCV_UNKNOWN_VERSION.
+   Afterwards, report errors if we can not find their default versions.  */
 
-      case 'g':
-	p++;
-	p = riscv_parsing_subset_version (
-	      rps,
-	      march,
-	      p, &major_version, &minor_version,
-	      /* default_major_version= */ 2,
-	      /* default_minor_version= */ 0,
-	      /* std_ext_p= */TRUE);
-	riscv_add_subset (rps->subset_list, "i", major_version, minor_version);
-
-	for ( ; *std_exts != 'q'; std_exts++)
-	  {
-	    const char subset[] = {*std_exts, '\0'};
-	    riscv_add_subset (
-	      rps->subset_list, subset, major_version, minor_version);
-	  }
-	break;
+static void
+riscv_parse_add_subset (riscv_parse_subset_t *rps,
+			const char *subset,
+			int major,
+			int minor,
+			bool implicit)
+{
+  int major_version = major;
+  int minor_version = minor;
+
+  if (major_version == RISCV_UNKNOWN_VERSION
+       || minor_version == RISCV_UNKNOWN_VERSION)
+    riscv_get_default_ext_version (rps->isa_spec, subset,
+				   &major_version, &minor_version);
+
+  /* We don't care the versions of the implicit extensions.  */
+  if (!implicit
+      && (major_version == RISCV_UNKNOWN_VERSION
+	  || minor_version == RISCV_UNKNOWN_VERSION))
+    {
+      if (subset[0] == 'x')
+	rps->error_handler
+	  (_("x ISA extension `%s' must be set with the versions"),
+	   subset);
+      /* Allow old ISA spec can recognize zicsr and zifencei.  */
+      else if (strcmp (subset, "zicsr") != 0
+	       && strcmp (subset, "zifencei") != 0)
+	rps->error_handler
+	  (_("cannot find default versions of the ISA extension `%s'"),
+	   subset);
+      return;
+    }
 
-      default:
-	rps->error_handler (
-	  "-march=%s: first ISA subset must be `e', `i' or `g'", march);
-	return NULL;
+  riscv_add_subset (rps->subset_list, subset,
+		    major_version, minor_version);
+}
+
+/* Release subset list.  */
+
+void
+riscv_release_subset_list (riscv_subset_list_t *subset_list)
+{
+   while (subset_list->head != NULL)
+    {
+      riscv_subset_t *next = subset_list->head->next;
+      free ((void *)subset_list->head->name);
+      free (subset_list->head);
+      subset_list->head = next;
     }
 
-  while (*p)
+  subset_list->tail = NULL;
+
+  if (subset_list->arch_str != NULL)
     {
-      char subset[2] = {0, 0};
+      free ((void*) subset_list->arch_str);
+      subset_list->arch_str = NULL;
+    }
+}
 
-      if (*p == 'x' || *p == 's')
-	break;
+/* Parsing extension version.
 
-      if (*p == '_')
-	{
-	  p++;
-	  continue;
-	}
+   Return Value:
+     Points to the end of version
 
-      std_ext = *p;
+   Arguments:
+     `p`: Curent parsing position.
+     `major_version`: Parsed major version.
+     `minor_version`: Parsed minor version.  */
 
-      /* Checking canonical order.  */
-      while (*std_exts && std_ext != *std_exts) std_exts++;
+static const char *
+riscv_parsing_subset_version (const char *p,
+			      int *major_version,
+			      int *minor_version)
+{
+  bool major_p = true;
+  int version = 0;
+  char np;
 
-      if (std_ext != *std_exts)
+  *major_version = 0;
+  *minor_version = 0;
+  for (; *p; ++p)
+    {
+      if (*p == 'p')
 	{
-	  if (strchr (all_std_exts, std_ext) == NULL)
-	    rps->error_handler (
-	      "-march=%s: unsupported ISA subset `%c'", march, *p);
-	  else
-	    rps->error_handler (
-	      "-march=%s: ISA string is not in canonical order. `%c'",
-	      march, *p);
-	  return NULL;
-	}
+	  np = *(p + 1);
 
-      std_exts++;
+	  /* Might be beginning of `p` extension.  */
+	  if (!ISDIGIT (np))
+	    break;
 
-      p++;
-      p = riscv_parsing_subset_version (
-	    rps,
-	    march,
-	    p, &major_version, &minor_version,
-	    /* default_major_version= */ 2,
-	    /* default_minor_version= */ 0,
-	    /* std_ext_p= */TRUE);
+	  *major_version = version;
+	  major_p = false;
+	  version = 0;
+	}
+      else if (ISDIGIT (*p))
+	version = (version * 10) + (*p - '0');
+      else
+	break;
+    }
 
-      subset[0] = std_ext;
+  if (major_p)
+    *major_version = version;
+  else
+    *minor_version = version;
 
-      riscv_add_subset (rps->subset_list, subset, major_version, minor_version);
+  /* We can not find any version in string.  */
+  if (*major_version == 0 && *minor_version == 0)
+    {
+      *major_version = RISCV_UNKNOWN_VERSION;
+      *minor_version = RISCV_UNKNOWN_VERSION;
     }
+
   return p;
 }
 
-/* Parsing function for non-standard and supervisor extensions.
+/* Parsing function for both standard and prefixed extensions.
 
    Return Value:
      Points to the end of extensions.
 
    Arguments:
-     `rps`: Hooks and status for parsing subset.
-     `march`: Full arch string.
-     `p`: Curent parsing position.
-     `ext_type`: What kind of extensions, 'x', 's' or 'sx'.
-     `ext_type_str`: Full name for kind of extension.  */
+     `rps`: Hooks and status for parsing extensions.
+     `arch`: Full ISA string.
+     `p`: Curent parsing position.  */
 
 static const char *
-riscv_parse_sv_or_non_std_ext (riscv_parse_subset_t *rps,
-			       const char *march,
-			       const char *p,
-			       const char *ext_type,
-			       const char *ext_type_str)
-{
-  unsigned major_version = 0;
-  unsigned minor_version = 0;
-  size_t ext_type_len = strlen (ext_type);
+riscv_parse_extensions (riscv_parse_subset_t *rps,
+			const char *arch,
+			const char *p)
+{
+  /* First letter must start with i, e or g.  */
+  if (*p != 'e' && *p != 'i' && *p != 'g')
+    {
+      rps->error_handler
+	(_("%s: first ISA extension must be `e', `i' or `g'"),
+	 arch);
+      return NULL;
+    }
 
-  while (*p)
+  while (*p != '\0')
     {
       if (*p == '_')
 	{
@@ -1268,40 +1821,103 @@ riscv_parse_sv_or_non_std_ext (riscv_par
 	  continue;
 	}
 
-      if (strncmp (p, ext_type, ext_type_len) != 0)
-	break;
-
-      /* It's non-standard supervisor extension if it prefix with sx.  */
-      if ((ext_type[0] == 's') && (ext_type_len == 1)
-	  && (*(p + 1) == 'x'))
-	break;
-
       char *subset = xstrdup (p);
-      char *q = subset;
+      char *q = subset;	/* Start of version.  */
       const char *end_of_version;
+      bool implicit = false;
+
+      enum riscv_prefix_ext_class class = riscv_get_prefix_class (p);
+      if (class == RV_ISA_CLASS_SINGLE)
+	{
+	  if (riscv_ext_order[(*subset - 'a')] == 0)
+	    {
+	      rps->error_handler
+		(_("%s: unknown standard ISA extension or prefix class `%c'"),
+		 arch, *subset);
+	      free (subset);
+	      return NULL;
+	    }
+	  q++;
+	}
+      else
+	{
+	  /* Extract the whole prefixed extension by '_'.  */
+	  while (*++q != '\0' && *q != '_')
+	    ;
+	  /* Look forward to the first letter which is not <major>p<minor>.  */
+	  bool find_any_version = false;
+	  bool find_minor_version = false;
+	  while (1)
+	    {
+	      q--;
+	      if (ISDIGIT (*q))
+		find_any_version = true;
+	      else if (find_any_version
+		       && !find_minor_version
+		       && *q == 'p'
+		       && ISDIGIT (*(q - 1)))
+	      find_minor_version = true;
+	      else
+		break;
+	    }
+	  q++;
 
-      while (*++q != '\0' && *q != '_' && !ISDIGIT (*q))
-	;
+	  /* Check if the end of extension is 'p' or not.  If yes, then
+	     the second letter from the end cannot be number.  */
+	  if (*(q - 1) == 'p' && ISDIGIT (*(q - 2)))
+	    {
+	      *q = '\0';
+	      rps->error_handler
+		(_("%s: invalid prefixed ISA extension `%s' ends with <number>p"),
+		 arch, subset);
+	      free (subset);
+	      return NULL;
+	    }
+	}
 
+      int major_version = RISCV_UNKNOWN_VERSION;
+      int minor_version = RISCV_UNKNOWN_VERSION;
       end_of_version =
-	riscv_parsing_subset_version (
-	  rps,
-	  march,
-	  q, &major_version, &minor_version,
-	  /* default_major_version= */ 2,
-	  /* default_minor_version= */ 0,
-	  /* std_ext_p= */FALSE);
-
+	riscv_parsing_subset_version (q, &major_version, &minor_version);
       *q = '\0';
+      if (end_of_version == NULL)
+	{
+	  free (subset);
+	  return NULL;
+	}
 
-      riscv_add_subset (rps->subset_list, subset, major_version, minor_version);
-      free (subset);
+      /* Check if the prefixed extension name is well-formed.  */
+      if (class != RV_ISA_CLASS_SINGLE
+	  && rps->check_unknown_prefixed_ext
+	  && !riscv_recognized_prefixed_ext (subset))
+	{
+	  rps->error_handler
+	    (_("%s: unknown prefixed ISA extension `%s'"),
+	     arch, subset);
+	  free (subset);
+	  return NULL;
+	}
+
+      /* Added g as an implicit extension.  */
+      if (class == RV_ISA_CLASS_SINGLE
+	  && strcmp (subset, "g") == 0)
+	{
+	  implicit = true;
+	  major_version = RISCV_UNKNOWN_VERSION;
+	  minor_version = RISCV_UNKNOWN_VERSION;
+	}
+      riscv_parse_add_subset (rps, subset,
+			      major_version,
+			      minor_version, implicit);
       p += end_of_version - subset;
+      free (subset);
 
-      if (*p != '\0' && *p != '_')
+      if (class != RV_ISA_CLASS_SINGLE
+	  && *p != '\0' && *p != '_')
 	{
-	  rps->error_handler ("-march=%s: %s must seperate with _",
-			      march, ext_type_str);
+	  rps->error_handler
+	    (_("%s: prefixed ISA extension must separate with _"),
+	     arch);
 	  return NULL;
 	}
     }
@@ -1309,185 +1925,211 @@ riscv_parse_sv_or_non_std_ext (riscv_par
   return p;
 }
 
-/* Function for parsing arch string.
+/* Add the implicit extensions.  */
 
-   Return Value:
-     Return TRUE on success.
+static void
+riscv_parse_add_implicit_subsets (riscv_parse_subset_t *rps)
+{
+  struct riscv_implicit_subset *t = riscv_implicit_subsets;
+  bool finished = false;
+  while (!finished)
+    {
+      finished = true;
+      for (; t->subset_name; t++)
+	{
+	  riscv_subset_t *subset = NULL;
+	  riscv_subset_t *implicit_subset = NULL;
+	  if (riscv_lookup_subset (rps->subset_list, t->subset_name, &subset)
+	      && !riscv_lookup_subset (rps->subset_list, t->implicit_name,
+				       &implicit_subset)
+	      && t->check_func (t->implicit_name, subset))
+	    {
+	      riscv_parse_add_subset (rps, t->implicit_name,
+				      RISCV_UNKNOWN_VERSION,
+				      RISCV_UNKNOWN_VERSION, true);
+
+	      /* Restart the loop and pick up any new implications.  */
+	      finished = false;
+	      t = riscv_implicit_subsets;
+	      break;
+	    }
+	}
+    }
+}
 
-   Arguments:
-     `rps`: Hooks and status for parsing subset.
-     `arch`: Arch string.  */
+/* Check extensions conflicts.  */
 
-bfd_boolean
-riscv_parse_subset (riscv_parse_subset_t *rps,
-		    const char *arch)
+static bool
+riscv_parse_check_conflicts (riscv_parse_subset_t *rps)
 {
-  const char *p = arch;
+  riscv_subset_t *subset = NULL;
+  int xlen = *rps->xlen;
+  bool no_conflict = true;
 
-  if (strncmp (p, "rv32", 4) == 0)
+  if (riscv_subset_supports (rps, "e")
+      && riscv_subset_supports (rps, "h"))
     {
-      *rps->xlen = 32;
-      p += 4;
+      rps->error_handler
+	(_("rv%de does not support the `h' extension"), xlen);
+      no_conflict = false;
     }
-  else if (strncmp (p, "rv64", 4) == 0)
+  if (riscv_lookup_subset (rps->subset_list, "q", &subset)
+      && (subset->major_version < 2 || (subset->major_version == 2
+					&& subset->minor_version < 2))
+      && xlen < 64)
     {
-      *rps->xlen = 64;
-      p += 4;
+      rps->error_handler (_("rv%d does not support the `q' extension"), xlen);
+      no_conflict = false;
     }
-  else
+  if (riscv_lookup_subset (rps->subset_list, "zcf", &subset)
+      && xlen > 32)
     {
-      rps->error_handler ("-march=%s: ISA string must begin with rv32 or rv64",
-			  arch);
-      return FALSE;
+      rps->error_handler
+	(_("rv%d does not support the `zcf' extension"), xlen);
+      no_conflict = false;
     }
-
-  /* Parsing standard extension.  */
-  p = riscv_parse_std_ext (rps, arch, p);
-
-  if (p == NULL)
-    return FALSE;
-
-  /* Parsing non-standard extension.  */
-  p = riscv_parse_sv_or_non_std_ext (
-	rps, arch, p, "x", "non-standard extension");
-
-  if (p == NULL)
-    return FALSE;
-
-  /* Parsing supervisor extension.  */
-  p = riscv_parse_sv_or_non_std_ext (
-	rps, arch, p, "s", "supervisor extension");
-
-  if (p == NULL)
-    return FALSE;
-
-  /* Parsing non-standard supervisor extension.  */
-  p = riscv_parse_sv_or_non_std_ext (
-	rps, arch, p, "sx", "non-standard supervisor extension");
-
-  if (p == NULL)
-    return FALSE;
-
-  if (*p != '\0')
+  if (riscv_lookup_subset (rps->subset_list, "zfinx", &subset)
+      && riscv_lookup_subset (rps->subset_list, "f", &subset))
     {
-      rps->error_handler ("-march=%s: unexpected ISA string at end: %s",
-			  arch, p);
-      return FALSE;
+      rps->error_handler
+	(_("`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"));
+      no_conflict = false;
     }
-
-  if (riscv_lookup_subset (rps->subset_list, "e")
-      && riscv_lookup_subset (rps->subset_list, "f"))
+  if (riscv_lookup_subset (rps->subset_list, "xtheadvector", &subset)
+      && riscv_lookup_subset (rps->subset_list, "v", &subset))
     {
-      rps->error_handler ("-march=%s: rv32e does not support the `f' extension",
-			  arch);
-      return FALSE;
+      rps->error_handler
+	(_("`xtheadvector' is conflict with the `v' extension"));
+      no_conflict = false;
     }
 
-  if (riscv_lookup_subset (rps->subset_list, "d")
-      && !riscv_lookup_subset (rps->subset_list, "f"))
+  bool support_zve = false;
+  bool support_zvl = false;
+  riscv_subset_t *s = rps->subset_list->head;
+  for (; s != NULL; s = s->next)
     {
-      rps->error_handler ("-march=%s: `d' extension requires `f' extension",
-			  arch);
-      return FALSE;
+      if (!support_zve
+	  && strncmp (s->name, "zve", 3) == 0)
+	support_zve = true;
+      if (!support_zvl
+	  && strncmp (s->name, "zvl", 3) == 0)
+	support_zvl = true;
+      if (support_zve && support_zvl)
+	break;
     }
-
-  if (riscv_lookup_subset (rps->subset_list, "q")
-      && !riscv_lookup_subset (rps->subset_list, "d"))
+  if (support_zvl && !support_zve)
     {
-      rps->error_handler ("-march=%s: `q' extension requires `d' extension",
-			  arch);
-      return FALSE;
+      rps->error_handler
+	(_("zvl*b extensions need to enable either `v' or `zve' extension"));
+      no_conflict = false;
     }
 
-  if (riscv_lookup_subset (rps->subset_list, "q") && *rps->xlen < 64)
-    {
-      rps->error_handler ("-march=%s: rv32 does not support the `q' extension",
-			  arch);
-      return FALSE;
-    }
-  return TRUE;
+  return no_conflict;
 }
 
-/* Add new subset to list.  */
+/* Set the default subset list according to the default_enable field
+   of riscv_supported_*ext tables.  */
 
-void
-riscv_add_subset (riscv_subset_list_t *subset_list,
-		  const char *subset,
-		  int major, int minor)
+static void
+riscv_set_default_arch (riscv_parse_subset_t *rps)
 {
-  riscv_subset_t *s = xmalloc (sizeof *s);
-
-  if (subset_list->head == NULL)
-    subset_list->head = s;
-
-  s->name = xstrdup (subset);
-  s->major_version = major;
-  s->minor_version = minor;
-  s->next = NULL;
+  unsigned long enable = EXT_DEFAULT;
+  int i, j;
+  for (i = 0; riscv_all_supported_ext[i] != NULL; i++)
+    {
+      const struct riscv_supported_ext *table = riscv_all_supported_ext[i];
+      for (j = 0; table[j].name != NULL; j++)
+	{
+	  bool implicit = false;
+	  if (strcmp (table[j].name, "g") == 0)
+	    implicit = true;
+	  if (table[j].default_enable & enable)
+	    riscv_parse_add_subset (rps, table[j].name,
+				    RISCV_UNKNOWN_VERSION,
+				    RISCV_UNKNOWN_VERSION, implicit);
+	}
+    }
+}
 
-  if (subset_list->tail != NULL)
-    subset_list->tail->next = s;
+/* Function for parsing ISA string.
 
-  subset_list->tail = s;
-}
+   Return Value:
+     Return TRUE on success.
 
-/* Find subset in list without version checking, return NULL if not found.  */
+   Arguments:
+     `rps`: Hooks and status for parsing extensions.
+     `arch`: Full ISA string.  */
 
-riscv_subset_t *
-riscv_lookup_subset (const riscv_subset_list_t *subset_list,
-		     const char *subset)
+bool
+riscv_parse_subset (riscv_parse_subset_t *rps,
+		    const char *arch)
 {
-  return riscv_lookup_subset_version (
-	   subset_list, subset,
-	   RISCV_DONT_CARE_VERSION,
-	   RISCV_DONT_CARE_VERSION);
-}
-
-/* Find subset in list with version checking, return NULL if not found.  */
-
-riscv_subset_t *
-riscv_lookup_subset_version (const riscv_subset_list_t *subset_list,
-			     const char *subset,
-			     int major, int minor)
-{
-  riscv_subset_t *s;
-
-  for (s = subset_list->head; s != NULL; s = s->next)
-    if (strcasecmp (s->name, subset) == 0)
-      {
-	if ((major != RISCV_DONT_CARE_VERSION)
-	    && (s->major_version != major))
-	  return NULL;
-
-	if ((minor != RISCV_DONT_CARE_VERSION)
-	    && (s->minor_version != minor))
-	  return NULL;
+  const char *p;
 
-	return s;
-      }
+  /* Init the riscv_ext_order array to compare the order of extensions
+     quickly.  */
+  riscv_init_ext_order ();
 
-  return NULL;
-}
+  if (arch == NULL)
+    {
+      riscv_set_default_arch (rps);
+      riscv_parse_add_implicit_subsets (rps);
+      return riscv_parse_check_conflicts (rps);
+    }
 
-/* Release subset list.  */
+  for (p = arch; *p != '\0'; p++)
+    {
+      if (ISUPPER (*p))
+	{
+	  rps->error_handler
+	    (_("%s: ISA string cannot contain uppercase letters"),
+	     arch);
+	  return false;
+	}
+    }
 
-void
-riscv_release_subset_list (riscv_subset_list_t *subset_list)
-{
-   while (subset_list->head != NULL)
+  p = arch;
+  if (startswith (p, "rv32"))
     {
-      riscv_subset_t *next = subset_list->head->next;
-      free ((void *)subset_list->head->name);
-      free (subset_list->head);
-      subset_list->head = next;
+      *rps->xlen = 32;
+      p += 4;
+    }
+  else if (startswith (p, "rv64"))
+    {
+      *rps->xlen = 64;
+      p += 4;
+    }
+  else
+    {
+      /* ISA string shouldn't be NULL or empty here.  For linker,
+	 it might be empty when we failed to merge the ISA string
+	 in the riscv_merge_attributes.  For assembler, we might
+	 give an empty string by .attribute arch, "" or -march=.
+	 However, We have already issued the correct error message
+	 in another side, so do not issue this error when the ISA
+	 string is empty.  */
+      if (strlen (arch))
+	rps->error_handler (
+	  _("%s: ISA string must begin with rv32 or rv64"),
+	  arch);
+      return false;
     }
 
-  subset_list->tail = NULL;
+  /* Parse single standard and prefixed extensions.  */
+  if (riscv_parse_extensions (rps, arch, p) == NULL)
+    return false;
+
+  /* Finally add implicit extensions according to the current
+     extensions.  */
+  riscv_parse_add_implicit_subsets (rps);
+
+  /* Check the conflicts.  */
+  return riscv_parse_check_conflicts (rps);
 }
 
 /* Return the number of digits for the input.  */
 
-static size_t
+size_t
 riscv_estimate_digit (unsigned num)
 {
   size_t digit = 0;
@@ -1511,7 +2153,7 @@ riscv_estimate_arch_strlen1 (const riscv
   return riscv_estimate_arch_strlen1 (subset->next)
 	 + strlen (subset->name)
 	 + riscv_estimate_digit (subset->major_version)
-	 + 1 /* For version seperator: 'p'.  */
+	 + 1 /* For version seperator 'p'.  */
 	 + riscv_estimate_digit (subset->minor_version)
 	 + 1 /* For underscore.  */;
 }
@@ -1531,33 +2173,37 @@ riscv_arch_str1 (riscv_subset_t *subset,
 		 char *attr_str, char *buf, size_t bufsz)
 {
   const char *underline = "_";
+  riscv_subset_t *subset_t = subset;
 
-  if (subset == NULL)
+  if (subset_t == NULL)
     return;
 
-  /* No underline between rvXX and i/e.   */
-  if ((strcasecmp (subset->name, "i") == 0)
-      || (strcasecmp (subset->name, "e") == 0))
+  /* No underline between rvXX and i/e.  */
+  if ((strcasecmp (subset_t->name, "i") == 0)
+      || (strcasecmp (subset_t->name, "e") == 0))
     underline = "";
 
   snprintf (buf, bufsz, "%s%s%dp%d",
 	    underline,
-	    subset->name,
-	    subset->major_version,
-	    subset->minor_version);
+	    subset_t->name,
+	    subset_t->major_version,
+	    subset_t->minor_version);
 
   strncat (attr_str, buf, bufsz);
 
-  /* Skip 'i' extension after 'e'.  */
-  if ((strcasecmp (subset->name, "e") == 0)
-      && subset->next
-      && (strcasecmp (subset->next->name, "i") == 0))
-    riscv_arch_str1 (subset->next->next, attr_str, buf, bufsz);
-  else
-    riscv_arch_str1 (subset->next, attr_str, buf, bufsz);
+  /* Skip 'i' extension after 'e', or skip extensions which
+     versions are unknown.  */
+  while (subset_t->next
+	 && ((strcmp (subset_t->name, "e") == 0
+	      && strcmp (subset_t->next->name, "i") == 0)
+	     || subset_t->next->major_version == RISCV_UNKNOWN_VERSION
+	     || subset_t->next->minor_version == RISCV_UNKNOWN_VERSION))
+    subset_t = subset_t->next;
+
+  riscv_arch_str1 (subset_t->next, attr_str, buf, bufsz);
 }
 
-/* Convert subset info to string with explicit version info.  */
+/* Convert subset information into string with explicit versions.  */
 
 char *
 riscv_arch_str (unsigned xlen, const riscv_subset_list_t *subset)
@@ -1573,3 +2219,646 @@ riscv_arch_str (unsigned xlen, const ris
 
   return attr_str;
 }
+
+/* Copy the subset in the subset list.  */
+
+static struct riscv_subset_t *
+riscv_copy_subset (riscv_subset_list_t *subset_list,
+		   riscv_subset_t *subset)
+{
+  if (subset == NULL)
+    return NULL;
+
+  riscv_subset_t *new = xmalloc (sizeof *new);
+  new->name = xstrdup (subset->name);
+  new->major_version = subset->major_version;
+  new->minor_version = subset->minor_version;
+  new->next = riscv_copy_subset (subset_list, subset->next);
+
+  if (subset->next == NULL)
+    subset_list->tail = new;
+
+  return new;
+}
+
+/* Copy the subset list.  */
+
+riscv_subset_list_t *
+riscv_copy_subset_list (riscv_subset_list_t *subset_list)
+{
+  riscv_subset_list_t *new = xmalloc (sizeof *new);
+  new->head = riscv_copy_subset (new, subset_list->head);
+  new->arch_str = strdup (subset_list->arch_str);
+  return new;
+}
+
+/* Remove the SUBSET from the subset list.  */
+
+static void
+riscv_remove_subset (riscv_subset_list_t *subset_list,
+		     const char *subset)
+{
+  riscv_subset_t *current = subset_list->head;
+  riscv_subset_t *pre = NULL;
+  for (; current != NULL; pre = current, current = current->next)
+    {
+      if (strcmp (current->name, subset) == 0)
+	{
+	  if (pre == NULL)
+	    subset_list->head = current->next;
+	  else
+	    pre->next = current->next;
+	  if (current->next == NULL)
+	    subset_list->tail = pre;
+	  free ((void *) current->name);
+	  free (current);
+	  break;
+	}
+    }
+}
+
+/* Add/Remove an extension to/from the subset list.  This is used for
+   the .option rvc or norvc, and .option arch directives.  */
+
+bool
+riscv_update_subset (riscv_parse_subset_t *rps,
+		     const char *str)
+{
+  const char *p = str;
+
+  do
+    {
+      int major_version = RISCV_UNKNOWN_VERSION;
+      int minor_version = RISCV_UNKNOWN_VERSION;
+
+      bool removed = false;
+      switch (*p)
+	{
+	case '+': removed = false; break;
+	case '-': removed = true; break;
+	default:
+	  riscv_release_subset_list (rps->subset_list);
+	  return riscv_parse_subset (rps, p);
+	}
+      ++p;
+
+      char *subset = xstrdup (p);
+      char *q = subset;
+      const char *end_of_version;
+      /* Extract the whole prefixed extension by ','.  */
+      while (*q != '\0' && *q != ',')
+        q++;
+
+      /* Look forward to the first letter which is not <major>p<minor>.  */
+      bool find_any_version = false;
+      bool find_minor_version = false;
+      size_t len = q - subset;
+      size_t i;
+      for (i = len; i > 0; i--)
+        {
+	  q--;
+	  if (ISDIGIT (*q))
+	    find_any_version = true;
+	  else if (find_any_version
+		   && !find_minor_version
+		   && *q == 'p'
+		   && ISDIGIT (*(q - 1)))
+	    find_minor_version = true;
+	  else
+	    break;
+	}
+      if (len > 0)
+	q++;
+
+      /* Check if the end of extension is 'p' or not.  If yes, then
+	 the second letter from the end cannot be number.  */
+      if (len > 1 && *(q - 1) == 'p' && ISDIGIT (*(q - 2)))
+	{
+	  *q = '\0';
+	  rps->error_handler
+	    (_("invalid ISA extension ends with <number>p "
+	       "in .option arch `%s'"), str);
+	  free (subset);
+	  return false;
+	}
+
+      end_of_version =
+	riscv_parsing_subset_version (q, &major_version, &minor_version);
+      *q = '\0';
+      if (end_of_version == NULL)
+	{
+	  free (subset);
+	  return false;
+	}
+
+      if (strlen (subset) == 0
+	  || (strlen (subset) == 1
+	      && riscv_ext_order[(*subset - 'a')] == 0)
+	  || (strlen (subset) > 1
+	      && rps->check_unknown_prefixed_ext
+	      && !riscv_recognized_prefixed_ext (subset)))
+	{
+	  rps->error_handler
+	    (_("unknown ISA extension `%s' in .option arch `%s'"),
+	     subset, str);
+	  free (subset);
+	  return false;
+	}
+
+      if (strcmp (subset, "i") == 0
+	  || strcmp (subset, "e") == 0
+	  || strcmp (subset, "g") == 0)
+	{
+	  rps->error_handler
+	    (_("cannot + or - base extension `%s' in .option "
+	       "arch `%s'"), subset, str);
+	  free (subset);
+	  return false;
+	}
+
+      if (removed)
+	riscv_remove_subset (rps->subset_list, subset);
+      else
+	riscv_parse_add_subset (rps, subset, major_version, minor_version, true);
+      p += end_of_version - subset;
+      free (subset);
+    }
+  while (*p++ == ',');
+
+  riscv_parse_add_implicit_subsets (rps);
+  return riscv_parse_check_conflicts (rps);
+}
+
+/* Check if the FEATURE subset is supported or not in the subset list.
+   Return true if it is supported; Otherwise, return false.  */
+
+bool
+riscv_subset_supports (riscv_parse_subset_t *rps,
+		       const char *feature)
+{
+  struct riscv_subset_t *subset;
+  return riscv_lookup_subset (rps->subset_list, feature, &subset);
+}
+
+/* Each instuction is belonged to an instruction class INSN_CLASS_*.
+   Call riscv_subset_supports to make sure if the instuction is valid.  */
+
+bool
+riscv_multi_subset_supports (riscv_parse_subset_t *rps,
+			     enum riscv_insn_class insn_class)
+{
+  switch (insn_class)
+    {
+    case INSN_CLASS_I:
+      return riscv_subset_supports (rps, "i");
+    case INSN_CLASS_ZICBOM:
+      return riscv_subset_supports (rps, "zicbom");
+    case INSN_CLASS_ZICBOP:
+      return riscv_subset_supports (rps, "zicbop");
+    case INSN_CLASS_ZICBOZ:
+      return riscv_subset_supports (rps, "zicboz");
+    case INSN_CLASS_ZICOND:
+      return riscv_subset_supports (rps, "zicond");
+    case INSN_CLASS_ZICSR:
+      return riscv_subset_supports (rps, "zicsr");
+    case INSN_CLASS_ZIFENCEI:
+      return riscv_subset_supports (rps, "zifencei");
+    case INSN_CLASS_ZIHINTNTL:
+      return riscv_subset_supports (rps, "zihintntl");
+    case INSN_CLASS_ZIHINTNTL_AND_C:
+      return (riscv_subset_supports (rps, "zihintntl")
+	      && (riscv_subset_supports (rps, "c")
+		  || riscv_subset_supports (rps, "zca")));
+    case INSN_CLASS_ZIHINTPAUSE:
+      return riscv_subset_supports (rps, "zihintpause");
+    case INSN_CLASS_M:
+      return riscv_subset_supports (rps, "m");
+    case INSN_CLASS_ZMMUL:
+      return riscv_subset_supports (rps, "zmmul");
+    case INSN_CLASS_A:
+      return riscv_subset_supports (rps, "a");
+    case INSN_CLASS_ZAWRS:
+      return riscv_subset_supports (rps, "zawrs");
+    case INSN_CLASS_F:
+      return riscv_subset_supports (rps, "f");
+    case INSN_CLASS_D:
+      return riscv_subset_supports (rps, "d");
+    case INSN_CLASS_Q:
+      return riscv_subset_supports (rps, "q");
+    case INSN_CLASS_C:
+      return (riscv_subset_supports (rps, "c")
+	      || riscv_subset_supports (rps, "zca"));
+    case INSN_CLASS_F_AND_C:
+      return (riscv_subset_supports (rps, "f")
+	      && (riscv_subset_supports (rps, "c")
+		  || riscv_subset_supports (rps, "zcf")));
+    case INSN_CLASS_D_AND_C:
+      return (riscv_subset_supports (rps, "d")
+	      && (riscv_subset_supports (rps, "c")
+		  || riscv_subset_supports (rps, "zcd")));
+    case INSN_CLASS_F_INX:
+      return (riscv_subset_supports (rps, "f")
+	      || riscv_subset_supports (rps, "zfinx"));
+    case INSN_CLASS_D_INX:
+      return (riscv_subset_supports (rps, "d")
+	      || riscv_subset_supports (rps, "zdinx"));
+    case INSN_CLASS_Q_INX:
+      return (riscv_subset_supports (rps, "q")
+	      || riscv_subset_supports (rps, "zqinx"));
+    case INSN_CLASS_ZFH_INX:
+      return (riscv_subset_supports (rps, "zfh")
+	      || riscv_subset_supports (rps, "zhinx"));
+    case INSN_CLASS_ZFHMIN:
+      return riscv_subset_supports (rps, "zfhmin");
+    case INSN_CLASS_ZFHMIN_INX:
+      return (riscv_subset_supports (rps, "zfhmin")
+	      || riscv_subset_supports (rps, "zhinxmin"));
+    case INSN_CLASS_ZFHMIN_AND_D_INX:
+      return ((riscv_subset_supports (rps, "zfhmin")
+	       && riscv_subset_supports (rps, "d"))
+	      || (riscv_subset_supports (rps, "zhinxmin")
+		  && riscv_subset_supports (rps, "zdinx")));
+    case INSN_CLASS_ZFHMIN_AND_Q_INX:
+      return ((riscv_subset_supports (rps, "zfhmin")
+	       && riscv_subset_supports (rps, "q"))
+	      || (riscv_subset_supports (rps, "zhinxmin")
+		  && riscv_subset_supports (rps, "zqinx")));
+    case INSN_CLASS_ZFA:
+      return riscv_subset_supports (rps, "zfa");
+    case INSN_CLASS_D_AND_ZFA:
+      return riscv_subset_supports (rps, "d")
+	     && riscv_subset_supports (rps, "zfa");
+    case INSN_CLASS_Q_AND_ZFA:
+      return riscv_subset_supports (rps, "q")
+	     && riscv_subset_supports (rps, "zfa");
+    case INSN_CLASS_ZFH_AND_ZFA:
+      return riscv_subset_supports (rps, "zfh")
+	     && riscv_subset_supports (rps, "zfa");
+    case INSN_CLASS_ZFH_OR_ZVFH_AND_ZFA:
+      return (riscv_subset_supports (rps, "zfh")
+	      || riscv_subset_supports (rps, "zvfh"))
+	     && riscv_subset_supports (rps, "zfa");
+    case INSN_CLASS_ZBA:
+      return riscv_subset_supports (rps, "zba");
+    case INSN_CLASS_ZBB:
+      return riscv_subset_supports (rps, "zbb");
+    case INSN_CLASS_ZBC:
+      return riscv_subset_supports (rps, "zbc");
+    case INSN_CLASS_ZBS:
+      return riscv_subset_supports (rps, "zbs");
+    case INSN_CLASS_ZBKB:
+      return riscv_subset_supports (rps, "zbkb");
+    case INSN_CLASS_ZBKC:
+      return riscv_subset_supports (rps, "zbkc");
+    case INSN_CLASS_ZBKX:
+      return riscv_subset_supports (rps, "zbkx");
+    case INSN_CLASS_ZBB_OR_ZBKB:
+      return (riscv_subset_supports (rps, "zbb")
+	      || riscv_subset_supports (rps, "zbkb"));
+    case INSN_CLASS_ZBC_OR_ZBKC:
+      return (riscv_subset_supports (rps, "zbc")
+	      || riscv_subset_supports (rps, "zbkc"));
+    case INSN_CLASS_ZKND:
+      return riscv_subset_supports (rps, "zknd");
+    case INSN_CLASS_ZKNE:
+      return riscv_subset_supports (rps, "zkne");
+    case INSN_CLASS_ZKNH:
+      return riscv_subset_supports (rps, "zknh");
+    case INSN_CLASS_ZKND_OR_ZKNE:
+      return (riscv_subset_supports (rps, "zknd")
+	      || riscv_subset_supports (rps, "zkne"));
+    case INSN_CLASS_ZKSED:
+      return riscv_subset_supports (rps, "zksed");
+    case INSN_CLASS_ZKSH:
+      return riscv_subset_supports (rps, "zksh");
+    case INSN_CLASS_V:
+      return (riscv_subset_supports (rps, "v")
+	      || riscv_subset_supports (rps, "zve64x")
+	      || riscv_subset_supports (rps, "zve32x"));
+    case INSN_CLASS_ZVEF:
+      return (riscv_subset_supports (rps, "v")
+	      || riscv_subset_supports (rps, "zve64d")
+	      || riscv_subset_supports (rps, "zve64f")
+	      || riscv_subset_supports (rps, "zve32f"));
+    case INSN_CLASS_ZVBB:
+      return riscv_subset_supports (rps, "zvbb");
+    case INSN_CLASS_ZVBC:
+      return riscv_subset_supports (rps, "zvbc");
+    case INSN_CLASS_ZVKB:
+      return riscv_subset_supports (rps, "zvkb");
+    case INSN_CLASS_ZVKG:
+      return riscv_subset_supports (rps, "zvkg");
+    case INSN_CLASS_ZVKNED:
+      return riscv_subset_supports (rps, "zvkned");
+    case INSN_CLASS_ZVKNHA_OR_ZVKNHB:
+      return (riscv_subset_supports (rps, "zvknha")
+	      || riscv_subset_supports (rps, "zvknhb"));
+    case INSN_CLASS_ZVKSED:
+      return riscv_subset_supports (rps, "zvksed");
+    case INSN_CLASS_ZVKSH:
+      return riscv_subset_supports (rps, "zvksh");
+    case INSN_CLASS_ZCB:
+      return riscv_subset_supports (rps, "zcb");
+    case INSN_CLASS_ZCB_AND_ZBB:
+      return (riscv_subset_supports (rps, "zcb")
+	      && riscv_subset_supports (rps, "zbb"));
+    case INSN_CLASS_ZCB_AND_ZBA:
+      return (riscv_subset_supports (rps, "zcb")
+	      && riscv_subset_supports (rps, "zba"));
+    case INSN_CLASS_ZCB_AND_ZMMUL:
+      return (riscv_subset_supports (rps, "zcb")
+	      && riscv_subset_supports (rps, "zmmul"));
+    case INSN_CLASS_SVINVAL:
+      return riscv_subset_supports (rps, "svinval");
+    case INSN_CLASS_H:
+      return riscv_subset_supports (rps, "h");
+    case INSN_CLASS_XCVMAC:
+      return riscv_subset_supports (rps, "xcvmac");
+    case INSN_CLASS_XCVALU:
+      return riscv_subset_supports (rps, "xcvalu");
+    case INSN_CLASS_XTHEADBA:
+      return riscv_subset_supports (rps, "xtheadba");
+    case INSN_CLASS_XTHEADBB:
+      return riscv_subset_supports (rps, "xtheadbb");
+    case INSN_CLASS_XTHEADBS:
+      return riscv_subset_supports (rps, "xtheadbs");
+    case INSN_CLASS_XTHEADCMO:
+      return riscv_subset_supports (rps, "xtheadcmo");
+    case INSN_CLASS_XTHEADCONDMOV:
+      return riscv_subset_supports (rps, "xtheadcondmov");
+    case INSN_CLASS_XTHEADFMEMIDX:
+      return riscv_subset_supports (rps, "xtheadfmemidx");
+    case INSN_CLASS_XTHEADFMV:
+      return riscv_subset_supports (rps, "xtheadfmv");
+    case INSN_CLASS_XTHEADINT:
+      return riscv_subset_supports (rps, "xtheadint");
+    case INSN_CLASS_XTHEADMAC:
+      return riscv_subset_supports (rps, "xtheadmac");
+    case INSN_CLASS_XTHEADMEMIDX:
+      return riscv_subset_supports (rps, "xtheadmemidx");
+    case INSN_CLASS_XTHEADMEMPAIR:
+      return riscv_subset_supports (rps, "xtheadmempair");
+    case INSN_CLASS_XTHEADSYNC:
+      return riscv_subset_supports (rps, "xtheadsync");
+    case INSN_CLASS_XTHEADVECTOR:
+      return riscv_subset_supports (rps, "xtheadvector");
+    case INSN_CLASS_XTHEADZVAMO:
+      return riscv_subset_supports (rps, "xtheadzvamo");
+    case INSN_CLASS_XVENTANACONDOPS:
+      return riscv_subset_supports (rps, "xventanacondops");
+    case INSN_CLASS_XSFVCP:
+      return riscv_subset_supports (rps, "xsfvcp");
+    default:
+      rps->error_handler
+        (_("internal: unreachable INSN_CLASS_*"));
+      return false;
+    }
+}
+
+/* Each instuction is belonged to an instruction class INSN_CLASS_*.
+   Call riscv_subset_supports_ext to determine the missing extension.  */
+
+const char *
+riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
+				 enum riscv_insn_class insn_class)
+{
+  switch (insn_class)
+    {
+    case INSN_CLASS_I:
+      return "i";
+    case INSN_CLASS_ZICBOM:
+      return "zicbom";
+    case INSN_CLASS_ZICBOP:
+      return "zicbop";
+    case INSN_CLASS_ZICBOZ:
+      return "zicboz";
+    case INSN_CLASS_ZICOND:
+      return "zicond";
+    case INSN_CLASS_ZICSR:
+      return "zicsr";
+    case INSN_CLASS_ZIFENCEI:
+      return "zifencei";
+    case INSN_CLASS_ZIHINTNTL:
+      return "zihintntl";
+    case INSN_CLASS_ZIHINTNTL_AND_C:
+      if (!riscv_subset_supports (rps, "zihintntl"))
+	{
+	  if (!riscv_subset_supports (rps, "c")
+	      && !riscv_subset_supports (rps, "zca"))
+	    return _("zihintntl' and `c', or `zihintntl' and `zca");
+	  else
+	    return "zihintntl";
+	}
+      else
+	return _("c' or `zca");
+    case INSN_CLASS_ZIHINTPAUSE:
+      return "zihintpause";
+    case INSN_CLASS_M:
+      return "m";
+    case INSN_CLASS_ZMMUL:
+      return _ ("m' or `zmmul");
+    case INSN_CLASS_A:
+      return "a";
+    case INSN_CLASS_ZAWRS:
+      return "zawrs";
+    case INSN_CLASS_F:
+      return "f";
+    case INSN_CLASS_D:
+      return "d";
+    case INSN_CLASS_Q:
+      return "q";
+    case INSN_CLASS_C:
+      return _("c' or `zca");
+    case INSN_CLASS_F_AND_C:
+      if (!riscv_subset_supports (rps, "f"))
+	{
+	  if (!riscv_subset_supports (rps, "c")
+	      && !riscv_subset_supports (rps, "zcf"))
+	    return _("f' and `c', or `f' and `zcf"); 
+	  else
+	    return "f";
+	}
+      else
+	return _("c' or `zcf");
+    case INSN_CLASS_D_AND_C:
+      if (!riscv_subset_supports (rps, "d"))
+	{
+	  if (!riscv_subset_supports (rps, "c")
+	      && !riscv_subset_supports (rps, "zcd"))
+	    return _("d' and `c', or `d' and `zcd");
+	  else
+	    return "d";
+	}
+      else
+	return _("c' or `zcd");
+    case INSN_CLASS_F_INX:
+      return _("f' or `zfinx");
+    case INSN_CLASS_D_INX:
+      return _("d' or `zdinx");
+    case INSN_CLASS_Q_INX:
+      return _("q' or `zqinx");
+    case INSN_CLASS_ZFH_INX:
+      return _("zfh' or `zhinx");
+    case INSN_CLASS_ZFHMIN:
+      return "zfhmin";
+    case INSN_CLASS_ZFHMIN_INX:
+      return _("zfhmin' or `zhinxmin");
+    case INSN_CLASS_ZFHMIN_AND_D_INX:
+      if (riscv_subset_supports (rps, "zfhmin"))
+	return "d";
+      else if (riscv_subset_supports (rps, "d"))
+	return "zfhmin";
+      else if (riscv_subset_supports (rps, "zhinxmin"))
+	return "zdinx";
+      else if (riscv_subset_supports (rps, "zdinx"))
+	return "zhinxmin";
+      else
+	return _("zfhmin' and `d', or `zhinxmin' and `zdinx");
+    case INSN_CLASS_ZFHMIN_AND_Q_INX:
+      if (riscv_subset_supports (rps, "zfhmin"))
+	return "q";
+      else if (riscv_subset_supports (rps, "q"))
+	return "zfhmin";
+      else if (riscv_subset_supports (rps, "zhinxmin"))
+	return "zqinx";
+      else if (riscv_subset_supports (rps, "zqinx"))
+	return "zhinxmin";
+      else
+	return _("zfhmin' and `q', or `zhinxmin' and `zqinx");
+    case INSN_CLASS_ZFA:
+      return "zfa";
+    case INSN_CLASS_D_AND_ZFA:
+      if (!riscv_subset_supports (rps, "d")
+	  && !riscv_subset_supports (rps, "zfa"))
+	return _("d' and `zfa");
+      else if (!riscv_subset_supports (rps, "d"))
+	return "d";
+      else
+	return "zfa";
+    case INSN_CLASS_Q_AND_ZFA:
+      if (!riscv_subset_supports (rps, "q")
+	  && !riscv_subset_supports (rps, "zfa"))
+	return _("q' and `zfa");
+      else if (!riscv_subset_supports (rps, "q"))
+	return "q";
+      else
+	return "zfa";
+    case INSN_CLASS_ZFH_AND_ZFA:
+      if (!riscv_subset_supports (rps, "zfh")
+	  && !riscv_subset_supports (rps, "zfa"))
+	return _("zfh' and `zfa");
+      else if (!riscv_subset_supports (rps, "zfh"))
+	return "zfh";
+      else
+	return "zfa";
+    case INSN_CLASS_ZFH_OR_ZVFH_AND_ZFA:
+      if (!riscv_subset_supports (rps, "zfa"))
+	{
+	  if (!riscv_subset_supports (rps, "zfh")
+	      && !riscv_subset_supports (rps, "zvfh"))
+	    return _("zfh' and `zfa', or `zvfh' and `zfa");
+	  else
+	    return "zfa";
+	}
+      else
+	return _("zfh' or `zvfh");
+    case INSN_CLASS_ZBA:
+      return "zba";
+    case INSN_CLASS_ZBB:
+      return "zbb";
+    case INSN_CLASS_ZBC:
+      return "zbc";
+    case INSN_CLASS_ZBS:
+      return "zbs";
+    case INSN_CLASS_ZBKB:
+      return "zbkb";
+    case INSN_CLASS_ZBKC:
+      return "zbkc";
+    case INSN_CLASS_ZBKX:
+      return "zbkx";
+    case INSN_CLASS_ZBB_OR_ZBKB:
+      return _("zbb' or `zbkb");
+    case INSN_CLASS_ZBC_OR_ZBKC:
+      return _("zbc' or `zbkc");
+    case INSN_CLASS_ZKND:
+      return "zknd";
+    case INSN_CLASS_ZKNE:
+      return "zkne";
+    case INSN_CLASS_ZKNH:
+      return "zknh";
+    case INSN_CLASS_ZKND_OR_ZKNE:
+      return _("zknd' or `zkne");
+    case INSN_CLASS_ZKSED:
+      return "zksed";
+    case INSN_CLASS_ZKSH:
+      return "zksh";
+    case INSN_CLASS_V:
+      return _("v' or `zve64x' or `zve32x");
+    case INSN_CLASS_ZVEF:
+      return _("v' or `zve64d' or `zve64f' or `zve32f");
+    case INSN_CLASS_ZVBB:
+      return _("zvbb");
+    case INSN_CLASS_ZVBC:
+      return _("zvbc");
+    case INSN_CLASS_ZVKB:
+      return _("zvkb");
+    case INSN_CLASS_ZVKG:
+      return _("zvkg");
+    case INSN_CLASS_ZVKNED:
+      return _("zvkned");
+    case INSN_CLASS_ZVKNHA_OR_ZVKNHB:
+      return _("zvknha' or `zvknhb");
+    case INSN_CLASS_ZVKSED:
+      return _("zvksed");
+    case INSN_CLASS_ZVKSH:
+      return _("zvksh");
+    case INSN_CLASS_ZCB:
+      return "zcb";
+    case INSN_CLASS_ZCB_AND_ZBA:
+      return _("zcb' and `zba");
+    case INSN_CLASS_ZCB_AND_ZBB:
+      return _("zcb' and `zbb");
+    case INSN_CLASS_ZCB_AND_ZMMUL:
+      return _("zcb' and `zmmul', or `zcb' and `m");
+    case INSN_CLASS_SVINVAL:
+      return "svinval";
+    case INSN_CLASS_H:
+      return _("h");
+    case INSN_CLASS_XCVMAC:
+      return "xcvmac";
+    case INSN_CLASS_XCVALU:
+      return "xcvalu";
+    case INSN_CLASS_XTHEADBA:
+      return "xtheadba";
+    case INSN_CLASS_XTHEADBB:
+      return "xtheadbb";
+    case INSN_CLASS_XTHEADBS:
+      return "xtheadbs";
+    case INSN_CLASS_XTHEADCMO:
+      return "xtheadcmo";
+    case INSN_CLASS_XTHEADCONDMOV:
+      return "xtheadcondmov";
+    case INSN_CLASS_XTHEADFMEMIDX:
+      return "xtheadfmemidx";
+    case INSN_CLASS_XTHEADFMV:
+      return "xtheadfmv";
+    case INSN_CLASS_XTHEADINT:
+      return "xtheadint";
+    case INSN_CLASS_XTHEADMAC:
+      return "xtheadmac";
+    case INSN_CLASS_XTHEADMEMIDX:
+      return "xtheadmemidx";
+    case INSN_CLASS_XTHEADMEMPAIR:
+      return "xtheadmempair";
+    case INSN_CLASS_XTHEADSYNC:
+      return "xtheadsync";
+    case INSN_CLASS_XTHEADVECTOR:
+      return "xtheadvector";
+    case INSN_CLASS_XTHEADZVAMO:
+      return "xtheadzvamo";
+    default:
+      rps->error_handler
+        (_("internal: unreachable INSN_CLASS_*"));
+      return NULL;
+    }
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-riscv.h ./bfd/elfxx-riscv.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-riscv.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-riscv.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* RISC-V ELF specific backend routines.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    Contributed by Andrew Waterman (andrew@sifive.com).
    Based on MIPS target.
@@ -22,6 +22,23 @@
 
 #include "elf/common.h"
 #include "elf/internal.h"
+#include "opcode/riscv.h"
+#include "cpu-riscv.h"
+
+#define RISCV_UNKNOWN_VERSION -1
+
+struct riscv_elf_params
+{
+  /* Whether to relax code sequences to GP-relative addressing.  */
+  bool relax_gp;
+  /* Whether to check if SUB_ULEB128 relocation has non-zero addend.  */
+  bool check_uleb128;
+};
+
+extern void riscv_elf32_set_options (struct bfd_link_info *,
+				     struct riscv_elf_params *);
+extern void riscv_elf64_set_options (struct bfd_link_info *,
+				     struct riscv_elf_params *);
 
 extern reloc_howto_type *
 riscv_reloc_name_lookup (bfd *, const char *);
@@ -32,8 +49,6 @@ riscv_reloc_type_lookup (bfd *, bfd_relo
 extern reloc_howto_type *
 riscv_elf_rtype_to_howto (bfd *, unsigned int r_type);
 
-#define RISCV_DONT_CARE_VERSION -1
-
 /* The information of architecture attribute.  */
 struct riscv_subset_t
 {
@@ -45,9 +60,11 @@ struct riscv_subset_t
 
 typedef struct riscv_subset_t riscv_subset_t;
 
-typedef struct {
+typedef struct
+{
   riscv_subset_t *head;
   riscv_subset_t *tail;
+  const char *arch_str;
 } riscv_subset_list_t;
 
 extern void
@@ -58,31 +75,53 @@ riscv_add_subset (riscv_subset_list_t *,
 		  const char *,
 		  int, int);
 
-extern riscv_subset_t *
+extern bool
 riscv_lookup_subset (const riscv_subset_list_t *,
-		     const char *);
-
-extern riscv_subset_t *
-riscv_lookup_subset_version (const riscv_subset_list_t *,
-			     const char *,
-			     int, int);
+		     const char *,
+		     riscv_subset_t **);
 
-typedef struct {
+typedef struct
+{
   riscv_subset_list_t *subset_list;
   void (*error_handler) (const char *,
 			 ...) ATTRIBUTE_PRINTF_1;
   unsigned *xlen;
+  enum riscv_spec_class *isa_spec;
+  bool check_unknown_prefixed_ext;
 } riscv_parse_subset_t;
 
-extern bfd_boolean
+extern bool
 riscv_parse_subset (riscv_parse_subset_t *,
 		    const char *);
 
-extern const char *
-riscv_supported_std_ext (void);
-
 extern void
 riscv_release_subset_list (riscv_subset_list_t *);
 
 extern char *
 riscv_arch_str (unsigned, const riscv_subset_list_t *);
+
+extern size_t
+riscv_estimate_digit (unsigned);
+
+extern int
+riscv_compare_subsets (const char *, const char *);
+
+extern riscv_subset_list_t *
+riscv_copy_subset_list (riscv_subset_list_t *);
+
+extern bool
+riscv_update_subset (riscv_parse_subset_t *, const char *);
+
+extern bool
+riscv_subset_supports (riscv_parse_subset_t *, const char *);
+
+extern bool
+riscv_multi_subset_supports (riscv_parse_subset_t *, enum riscv_insn_class);
+
+extern const char *
+riscv_multi_subset_supports_ext (riscv_parse_subset_t *, enum riscv_insn_class);
+
+extern void
+bfd_elf32_riscv_set_data_segment_info (struct bfd_link_info *, int *);
+extern void
+bfd_elf64_riscv_set_data_segment_info (struct bfd_link_info *, int *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-sparc.c ./bfd/elfxx-sparc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-sparc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-sparc.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* SPARC-specific support for ELF
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -209,106 +209,106 @@ sparc_elf_lox10_reloc (bfd *abfd, arelen
 
 static reloc_howto_type _bfd_sparc_elf_howto_table[] =
 {
-  HOWTO(R_SPARC_NONE,	   0,3, 0,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_NONE",	FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_8,	   0,0, 8,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_8",	FALSE,0,0x000000ff,TRUE),
-  HOWTO(R_SPARC_16,	   0,1,16,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_16",	FALSE,0,0x0000ffff,TRUE),
-  HOWTO(R_SPARC_32,	   0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_32",	FALSE,0,0xffffffff,TRUE),
-  HOWTO(R_SPARC_DISP8,	   0,0, 8,TRUE, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP8",	FALSE,0,0x000000ff,TRUE),
-  HOWTO(R_SPARC_DISP16,	   0,1,16,TRUE, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP16",	FALSE,0,0x0000ffff,TRUE),
-  HOWTO(R_SPARC_DISP32,	   0,2,32,TRUE, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP32",	FALSE,0,0xffffffff,TRUE),
-  HOWTO(R_SPARC_WDISP30,   2,2,30,TRUE, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP30", FALSE,0,0x3fffffff,TRUE),
-  HOWTO(R_SPARC_WDISP22,   2,2,22,TRUE, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP22", FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_HI22,	  10,2,22,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HI22",	FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_22,	   0,2,22,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_22",	FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_13,	   0,2,13,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_13",	FALSE,0,0x00001fff,TRUE),
-  HOWTO(R_SPARC_LO10,	   0,2,10,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_LO10",	FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_GOT10,	   0,2,10,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GOT10",	FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_GOT13,	   0,2,13,FALSE,0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_GOT13",	FALSE,0,0x00001fff,TRUE),
-  HOWTO(R_SPARC_GOT22,	  10,2,22,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GOT22",	FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_PC10,	   0,2,10,TRUE, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC10",	FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_PC22,	  10,2,22,TRUE, 0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PC22",	FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_WPLT30,	   2,2,30,TRUE, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WPLT30",	FALSE,0,0x3fffffff,TRUE),
-  HOWTO(R_SPARC_COPY,	   0,0,00,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_COPY",	FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_GLOB_DAT,  0,0,00,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GLOB_DAT",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_JMP_SLOT,  0,0,00,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_SLOT",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_RELATIVE,  0,0,00,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_RELATIVE",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_UA32,	   0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA32",	FALSE,0,0xffffffff,TRUE),
-  HOWTO(R_SPARC_PLT32,	   0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PLT32",	FALSE,0,0xffffffff,TRUE),
-  HOWTO(R_SPARC_HIPLT22,   0,0,00,FALSE,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_HIPLT22",	 FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_LOPLT10,   0,0,00,FALSE,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_LOPLT10",	 FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_PCPLT32,   0,0,00,FALSE,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PCPLT32",	 FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_PCPLT22,   0,0,00,FALSE,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PCPLT22",	 FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_PCPLT10,   0,0,00,FALSE,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PCPLT10",	 FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_10,	   0,2,10,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_10",	FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_11,	   0,2,11,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_11",	FALSE,0,0x000007ff,TRUE),
-  HOWTO(R_SPARC_64,	   0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_64",	FALSE,0,MINUS_ONE, TRUE),
-  HOWTO(R_SPARC_OLO10,	   0,2,13,FALSE,0,complain_overflow_signed,  sparc_elf_notsup_reloc, "R_SPARC_OLO10",	FALSE,0,0x00001fff,TRUE),
-  HOWTO(R_SPARC_HH22,	  42,2,22,FALSE,0,complain_overflow_unsigned,bfd_elf_generic_reloc,  "R_SPARC_HH22",	FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_HM10,	  32,2,10,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HM10",	FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_LM22,	  10,2,22,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_LM22",	FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_PC_HH22,  42,2,22,TRUE, 0,complain_overflow_unsigned,bfd_elf_generic_reloc,  "R_SPARC_PC_HH22",	   FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_PC_HM10,  32,2,10,TRUE, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC_HM10",	   FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_PC_LM22,  10,2,22,TRUE, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC_LM22",	   FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_WDISP16,   2,2,16,TRUE, 0,complain_overflow_signed,  sparc_elf_wdisp16_reloc,"R_SPARC_WDISP16", FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_WDISP19,   2,2,19,TRUE, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP19", FALSE,0,0x0007ffff,TRUE),
-  HOWTO(R_SPARC_UNUSED_42, 0,0, 0,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_UNUSED_42",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_7,	   0,2, 7,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_7",	FALSE,0,0x0000007f,TRUE),
-  HOWTO(R_SPARC_5,	   0,2, 5,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_5",	FALSE,0,0x0000001f,TRUE),
-  HOWTO(R_SPARC_6,	   0,2, 6,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_6",	FALSE,0,0x0000003f,TRUE),
-  HOWTO(R_SPARC_DISP64,	   0,4,64,TRUE, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP64",	FALSE,0,MINUS_ONE, TRUE),
-  HOWTO(R_SPARC_PLT64,	   0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PLT64",	FALSE,0,MINUS_ONE, TRUE),
-  HOWTO(R_SPARC_HIX22,	   0,4, 0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,  "R_SPARC_HIX22",	FALSE,0,MINUS_ONE, FALSE),
-  HOWTO(R_SPARC_LOX10,	   0,4, 0,FALSE,0,complain_overflow_dont,    sparc_elf_lox10_reloc,  "R_SPARC_LOX10",	FALSE,0,MINUS_ONE, FALSE),
-  HOWTO(R_SPARC_H44,	  22,2,22,FALSE,0,complain_overflow_unsigned,bfd_elf_generic_reloc,  "R_SPARC_H44",	FALSE,0,0x003fffff,FALSE),
-  HOWTO(R_SPARC_M44,	  12,2,10,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_M44",	FALSE,0,0x000003ff,FALSE),
-  HOWTO(R_SPARC_L44,	   0,2,13,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_L44",	FALSE,0,0x00000fff,FALSE),
-  HOWTO(R_SPARC_REGISTER,  0,4, 0,FALSE,0,complain_overflow_bitfield,sparc_elf_notsup_reloc, "R_SPARC_REGISTER",FALSE,0,MINUS_ONE, FALSE),
-  HOWTO(R_SPARC_UA64,	     0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA64",	    FALSE,0,MINUS_ONE, TRUE),
-  HOWTO(R_SPARC_UA16,	     0,1,16,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA16",	    FALSE,0,0x0000ffff,TRUE),
-  HOWTO(R_SPARC_TLS_GD_HI22,10,2,22,FALSE,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_HI22",FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_TLS_GD_LO10,0,2,10,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_LO10",FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_TLS_GD_ADD,0,0, 0,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_ADD",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_TLS_GD_CALL,2,2,30,TRUE,0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_CALL",FALSE,0,0x3fffffff,TRUE),
-  HOWTO(R_SPARC_TLS_LDM_HI22,10,2,22,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_HI22",FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_TLS_LDM_LO10,0,2,10,FALSE,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_LO10",FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_TLS_LDM_ADD,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_ADD",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_TLS_LDM_CALL,2,2,30,TRUE,0,complain_overflow_signed, bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_CALL",FALSE,0,0x3fffffff,TRUE),
-  HOWTO(R_SPARC_TLS_LDO_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_TLS_LDO_HIX22",FALSE,0,0x003fffff, FALSE),
-  HOWTO(R_SPARC_TLS_LDO_LOX10,0,2,0,FALSE,0,complain_overflow_dont,  sparc_elf_lox10_reloc,  "R_SPARC_TLS_LDO_LOX10",FALSE,0,0x000003ff, FALSE),
-  HOWTO(R_SPARC_TLS_LDO_ADD,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_LDO_ADD",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_TLS_IE_HI22,10,2,22,FALSE,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_HI22",FALSE,0,0x003fffff,TRUE),
-  HOWTO(R_SPARC_TLS_IE_LO10,0,2,10,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_LO10",FALSE,0,0x000003ff,TRUE),
-  HOWTO(R_SPARC_TLS_IE_LD,0,0, 0,FALSE,0,complain_overflow_dont,     bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_LD",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_TLS_IE_LDX,0,0, 0,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_LDX",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_TLS_IE_ADD,0,0, 0,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_ADD",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_TLS_LE_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc, "R_SPARC_TLS_LE_HIX22",FALSE,0,0x003fffff, FALSE),
-  HOWTO(R_SPARC_TLS_LE_LOX10,0,2,0,FALSE,0,complain_overflow_dont,   sparc_elf_lox10_reloc,  "R_SPARC_TLS_LE_LOX10",FALSE,0,0x000003ff, FALSE),
-  HOWTO(R_SPARC_TLS_DTPMOD32,0,0, 0,FALSE,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD32",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_TLS_DTPMOD64,0,0, 0,FALSE,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD64",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_TLS_DTPOFF32,0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF32",FALSE,0,0xffffffff,TRUE),
-  HOWTO(R_SPARC_TLS_DTPOFF64,0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF64",FALSE,0,MINUS_ONE,TRUE),
-  HOWTO(R_SPARC_TLS_TPOFF32,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF32",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_TLS_TPOFF64,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF64",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_GOTDATA_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_HIX22",FALSE,0,0x003fffff, FALSE),
-  HOWTO(R_SPARC_GOTDATA_LOX10,0,2,0,FALSE,0,complain_overflow_dont,  sparc_elf_lox10_reloc,  "R_SPARC_GOTDATA_LOX10",FALSE,0,0x000003ff, FALSE),
-  HOWTO(R_SPARC_GOTDATA_OP_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_OP_HIX22",FALSE,0,0x003fffff, FALSE),
-  HOWTO(R_SPARC_GOTDATA_OP_LOX10,0,2,0,FALSE,0,complain_overflow_dont,	sparc_elf_lox10_reloc,	"R_SPARC_GOTDATA_OP_LOX10",FALSE,0,0x000003ff, FALSE),
-  HOWTO(R_SPARC_GOTDATA_OP,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_GOTDATA_OP",FALSE,0,0x00000000,TRUE),
-  HOWTO(R_SPARC_H34,12,2,22,FALSE,0,complain_overflow_unsigned,bfd_elf_generic_reloc,"R_SPARC_H34",FALSE,0,0x003fffff,FALSE),
-  HOWTO(R_SPARC_SIZE32,0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_SIZE32",FALSE,0,0xffffffff,TRUE),
-  HOWTO(R_SPARC_SIZE64,0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_SIZE64",FALSE,0,MINUS_ONE, TRUE),
-  HOWTO(R_SPARC_WDISP10,2,2,10,TRUE, 0,complain_overflow_signed,sparc_elf_wdisp10_reloc,"R_SPARC_WDISP10",FALSE,0,0x00000000,TRUE),
+  HOWTO(R_SPARC_NONE,	   0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_NONE",	false,0,0x00000000,true),
+  HOWTO(R_SPARC_8,	   0,1, 8,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_8",	false,0,0x000000ff,true),
+  HOWTO(R_SPARC_16,	   0,2,16,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_16",	false,0,0x0000ffff,true),
+  HOWTO(R_SPARC_32,	   0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_32",	false,0,0xffffffff,true),
+  HOWTO(R_SPARC_DISP8,	   0,1, 8,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP8",	false,0,0x000000ff,true),
+  HOWTO(R_SPARC_DISP16,	   0,2,16,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP16",	false,0,0x0000ffff,true),
+  HOWTO(R_SPARC_DISP32,	   0,4,32,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP32",	false,0,0xffffffff,true),
+  HOWTO(R_SPARC_WDISP30,   2,4,30,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP30", false,0,0x3fffffff,true),
+  HOWTO(R_SPARC_WDISP22,   2,4,22,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP22", false,0,0x003fffff,true),
+  HOWTO(R_SPARC_HI22,	  10,4,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HI22",	false,0,0x003fffff,true),
+  HOWTO(R_SPARC_22,	   0,4,22,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_22",	false,0,0x003fffff,true),
+  HOWTO(R_SPARC_13,	   0,4,13,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_13",	false,0,0x00001fff,true),
+  HOWTO(R_SPARC_LO10,	   0,4,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_LO10",	false,0,0x000003ff,true),
+  HOWTO(R_SPARC_GOT10,	   0,4,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GOT10",	false,0,0x000003ff,true),
+  HOWTO(R_SPARC_GOT13,	   0,4,13,false,0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_GOT13",	false,0,0x00001fff,true),
+  HOWTO(R_SPARC_GOT22,	  10,4,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GOT22",	false,0,0x003fffff,true),
+  HOWTO(R_SPARC_PC10,	   0,4,10,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC10",	false,0,0x000003ff,true),
+  HOWTO(R_SPARC_PC22,	  10,4,22,true, 0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PC22",	false,0,0x003fffff,true),
+  HOWTO(R_SPARC_WPLT30,	   2,4,30,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WPLT30",	false,0,0x3fffffff,true),
+  HOWTO(R_SPARC_COPY,	   0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_COPY",	false,0,0x00000000,true),
+  HOWTO(R_SPARC_GLOB_DAT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GLOB_DAT",false,0,0x00000000,true),
+  HOWTO(R_SPARC_JMP_SLOT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_SLOT",false,0,0x00000000,true),
+  HOWTO(R_SPARC_RELATIVE,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_RELATIVE",false,0,0x00000000,true),
+  HOWTO(R_SPARC_UA32,	   0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA32",	false,0,0xffffffff,true),
+  HOWTO(R_SPARC_PLT32,	   0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PLT32",	false,0,0xffffffff,true),
+  HOWTO(R_SPARC_HIPLT22,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_HIPLT22",	 false,0,0x00000000,true),
+  HOWTO(R_SPARC_LOPLT10,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_LOPLT10",	 false,0,0x00000000,true),
+  HOWTO(R_SPARC_PCPLT32,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PCPLT32",	 false,0,0x00000000,true),
+  HOWTO(R_SPARC_PCPLT22,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PCPLT22",	 false,0,0x00000000,true),
+  HOWTO(R_SPARC_PCPLT10,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PCPLT10",	 false,0,0x00000000,true),
+  HOWTO(R_SPARC_10,	   0,4,10,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_10",	false,0,0x000003ff,true),
+  HOWTO(R_SPARC_11,	   0,4,11,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_11",	false,0,0x000007ff,true),
+  HOWTO(R_SPARC_64,	   0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_64",	false,0,MINUS_ONE, true),
+  HOWTO(R_SPARC_OLO10,	   0,4,13,false,0,complain_overflow_signed,  sparc_elf_notsup_reloc, "R_SPARC_OLO10",	false,0,0x00001fff,true),
+  HOWTO(R_SPARC_HH22,	  42,4,22,false,0,complain_overflow_unsigned,bfd_elf_generic_reloc,  "R_SPARC_HH22",	false,0,0x003fffff,true),
+  HOWTO(R_SPARC_HM10,	  32,4,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HM10",	false,0,0x000003ff,true),
+  HOWTO(R_SPARC_LM22,	  10,4,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_LM22",	false,0,0x003fffff,true),
+  HOWTO(R_SPARC_PC_HH22,  42,4,22,true, 0,complain_overflow_unsigned,bfd_elf_generic_reloc,  "R_SPARC_PC_HH22",	   false,0,0x003fffff,true),
+  HOWTO(R_SPARC_PC_HM10,  32,4,10,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC_HM10",	   false,0,0x000003ff,true),
+  HOWTO(R_SPARC_PC_LM22,  10,4,22,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC_LM22",	   false,0,0x003fffff,true),
+  HOWTO(R_SPARC_WDISP16,   2,4,16,true, 0,complain_overflow_signed,  sparc_elf_wdisp16_reloc,"R_SPARC_WDISP16", false,0,0x00000000,true),
+  HOWTO(R_SPARC_WDISP19,   2,4,19,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP19", false,0,0x0007ffff,true),
+  HOWTO(R_SPARC_UNUSED_42, 0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_UNUSED_42",false,0,0x00000000,true),
+  HOWTO(R_SPARC_7,	   0,4, 7,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_7",	false,0,0x0000007f,true),
+  HOWTO(R_SPARC_5,	   0,4, 5,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_5",	false,0,0x0000001f,true),
+  HOWTO(R_SPARC_6,	   0,4, 6,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_6",	false,0,0x0000003f,true),
+  HOWTO(R_SPARC_DISP64,	   0,8,64,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP64",	false,0,MINUS_ONE, true),
+  HOWTO(R_SPARC_PLT64,	   0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PLT64",	false,0,MINUS_ONE, true),
+  HOWTO(R_SPARC_HIX22,	   0,8, 0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,  "R_SPARC_HIX22",	false,0,MINUS_ONE, false),
+  HOWTO(R_SPARC_LOX10,	   0,8, 0,false,0,complain_overflow_dont,    sparc_elf_lox10_reloc,  "R_SPARC_LOX10",	false,0,MINUS_ONE, false),
+  HOWTO(R_SPARC_H44,	  22,4,22,false,0,complain_overflow_unsigned,bfd_elf_generic_reloc,  "R_SPARC_H44",	false,0,0x003fffff,false),
+  HOWTO(R_SPARC_M44,	  12,4,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_M44",	false,0,0x000003ff,false),
+  HOWTO(R_SPARC_L44,	   0,4,13,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_L44",	false,0,0x00000fff,false),
+  HOWTO(R_SPARC_REGISTER,  0,8, 0,false,0,complain_overflow_bitfield,sparc_elf_notsup_reloc, "R_SPARC_REGISTER",false,0,MINUS_ONE, false),
+  HOWTO(R_SPARC_UA64,	   0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA64",	    false,0,MINUS_ONE, true),
+  HOWTO(R_SPARC_UA16,	   0,2,16,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA16",	    false,0,0x0000ffff,true),
+  HOWTO(R_SPARC_TLS_GD_HI22,10,4,22,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_HI22",false,0,0x003fffff,true),
+  HOWTO(R_SPARC_TLS_GD_LO10,0,4,10,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_LO10",false,0,0x000003ff,true),
+  HOWTO(R_SPARC_TLS_GD_ADD,0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_ADD",false,0,0x00000000,true),
+  HOWTO(R_SPARC_TLS_GD_CALL,2,4,30,true,0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_CALL",false,0,0x3fffffff,true),
+  HOWTO(R_SPARC_TLS_LDM_HI22,10,4,22,false,0,complain_overflow_dont, bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_HI22",false,0,0x003fffff,true),
+  HOWTO(R_SPARC_TLS_LDM_LO10,0,4,10,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_LO10",false,0,0x000003ff,true),
+  HOWTO(R_SPARC_TLS_LDM_ADD,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_ADD",false,0,0x00000000,true),
+  HOWTO(R_SPARC_TLS_LDM_CALL,2,4,30,true,0,complain_overflow_signed, bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_CALL",false,0,0x3fffffff,true),
+  HOWTO(R_SPARC_TLS_LDO_HIX22,0,4,0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_TLS_LDO_HIX22",false,0,0x003fffff, false),
+  HOWTO(R_SPARC_TLS_LDO_LOX10,0,4,0,false,0,complain_overflow_dont,  sparc_elf_lox10_reloc,  "R_SPARC_TLS_LDO_LOX10",false,0,0x000003ff, false),
+  HOWTO(R_SPARC_TLS_LDO_ADD,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_LDO_ADD",false,0,0x00000000,true),
+  HOWTO(R_SPARC_TLS_IE_HI22,10,4,22,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_HI22",false,0,0x003fffff,true),
+  HOWTO(R_SPARC_TLS_IE_LO10,0,4,10,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_LO10",false,0,0x000003ff,true),
+  HOWTO(R_SPARC_TLS_IE_LD,0,0, 0,false,0,complain_overflow_dont,     bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_LD",false,0,0x00000000,true),
+  HOWTO(R_SPARC_TLS_IE_LDX,0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_LDX",false,0,0x00000000,true),
+  HOWTO(R_SPARC_TLS_IE_ADD,0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_ADD",false,0,0x00000000,true),
+  HOWTO(R_SPARC_TLS_LE_HIX22,0,4,0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc, "R_SPARC_TLS_LE_HIX22",false,0,0x003fffff, false),
+  HOWTO(R_SPARC_TLS_LE_LOX10,0,4,0,false,0,complain_overflow_dont,   sparc_elf_lox10_reloc,  "R_SPARC_TLS_LE_LOX10",false,0,0x000003ff, false),
+  HOWTO(R_SPARC_TLS_DTPMOD32,0,0, 0,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD32",false,0,0x00000000,true),
+  HOWTO(R_SPARC_TLS_DTPMOD64,0,0, 0,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD64",false,0,0x00000000,true),
+  HOWTO(R_SPARC_TLS_DTPOFF32,0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF32",false,0,0xffffffff,true),
+  HOWTO(R_SPARC_TLS_DTPOFF64,0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF64",false,0,MINUS_ONE,true),
+  HOWTO(R_SPARC_TLS_TPOFF32,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF32",false,0,0x00000000,true),
+  HOWTO(R_SPARC_TLS_TPOFF64,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF64",false,0,0x00000000,true),
+  HOWTO(R_SPARC_GOTDATA_HIX22,0,4,0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_HIX22",false,0,0x003fffff, false),
+  HOWTO(R_SPARC_GOTDATA_LOX10,0,4,0,false,0,complain_overflow_dont,  sparc_elf_lox10_reloc,  "R_SPARC_GOTDATA_LOX10",false,0,0x000003ff, false),
+  HOWTO(R_SPARC_GOTDATA_OP_HIX22,0,4,0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_OP_HIX22",false,0,0x003fffff, false),
+  HOWTO(R_SPARC_GOTDATA_OP_LOX10,0,4,0,false,0,complain_overflow_dont,	sparc_elf_lox10_reloc,	"R_SPARC_GOTDATA_OP_LOX10",false,0,0x000003ff, false),
+  HOWTO(R_SPARC_GOTDATA_OP,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_GOTDATA_OP",false,0,0x00000000,true),
+  HOWTO(R_SPARC_H34,12,4,22,false,0,complain_overflow_unsigned,bfd_elf_generic_reloc,"R_SPARC_H34",false,0,0x003fffff,false),
+  HOWTO(R_SPARC_SIZE32,0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_SIZE32",false,0,0xffffffff,true),
+  HOWTO(R_SPARC_SIZE64,0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_SIZE64",false,0,MINUS_ONE, true),
+  HOWTO(R_SPARC_WDISP10,2,4,10,true, 0,complain_overflow_signed,sparc_elf_wdisp10_reloc,"R_SPARC_WDISP10",false,0,0x00000000,true),
 };
 static reloc_howto_type sparc_jmp_irel_howto =
-  HOWTO(R_SPARC_JMP_IREL,  0,0,00,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_IREL",FALSE,0,0x00000000,TRUE);
+  HOWTO(R_SPARC_JMP_IREL,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_IREL",false,0,0x00000000,true);
 static reloc_howto_type sparc_irelative_howto =
-  HOWTO(R_SPARC_IRELATIVE,  0,0,00,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_IRELATIVE",FALSE,0,0x00000000,TRUE);
+  HOWTO(R_SPARC_IRELATIVE,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_IRELATIVE",false,0,0x00000000,true);
 static reloc_howto_type sparc_vtinherit_howto =
-  HOWTO (R_SPARC_GNU_VTINHERIT, 0,2,0,FALSE,0,complain_overflow_dont, NULL, "R_SPARC_GNU_VTINHERIT", FALSE,0, 0, FALSE);
+  HOWTO (R_SPARC_GNU_VTINHERIT, 0,4,0,false,0,complain_overflow_dont, NULL, "R_SPARC_GNU_VTINHERIT", false,0, 0, false);
 static reloc_howto_type sparc_vtentry_howto =
-  HOWTO (R_SPARC_GNU_VTENTRY, 0,2,0,FALSE,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_SPARC_GNU_VTENTRY", FALSE,0,0, FALSE);
+  HOWTO (R_SPARC_GNU_VTENTRY, 0,4,0,false,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_SPARC_GNU_VTENTRY", false,0,0, false);
 static reloc_howto_type sparc_rev32_howto =
-  HOWTO(R_SPARC_REV32, 0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_REV32", FALSE,0,0xffffffff,TRUE);
+  HOWTO(R_SPARC_REV32, 0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_REV32", false,0,0xffffffff,true);
 
 reloc_howto_type *
 _bfd_sparc_elf_reloc_type_lookup (bfd *abfd,
@@ -650,7 +650,7 @@ _bfd_sparc_elf_info_to_howto_ptr (bfd *a
 #define SPARC_ELF_R_TYPE(r_info)	\
 	((r_info) & 0xff)
 
-bfd_boolean
+bool
 _bfd_sparc_elf_info_to_howto (bfd *abfd, arelent *cache_ptr,
 			      Elf_Internal_Rela *dst)
 {
@@ -659,9 +659,9 @@ _bfd_sparc_elf_info_to_howto (bfd *abfd,
   if ((cache_ptr->howto = _bfd_sparc_elf_info_to_howto_ptr (abfd, r_type)) == NULL)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -690,9 +690,6 @@ struct _bfd_sparc_elf_link_hash_entry
 {
   struct elf_link_hash_entry elf;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
 #define GOT_UNKNOWN     0
 #define GOT_NORMAL      1
 #define GOT_TLS_GD      2
@@ -720,7 +717,7 @@ struct _bfd_sparc_elf_obj_tdata
   char *local_got_tls_type;
 
   /* TRUE if TLS GD relocs has been seen for this object.  */
-  bfd_boolean has_tlsgd;
+  bool has_tlsgd;
 };
 
 #define _bfd_sparc_elf_tdata(abfd) \
@@ -734,7 +731,7 @@ struct _bfd_sparc_elf_obj_tdata
    && elf_tdata (bfd) != NULL				\
    && elf_object_id (bfd) == SPARC_ELF_DATA)
 
-bfd_boolean
+bool
 _bfd_sparc_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd, sizeof (struct _bfd_sparc_elf_obj_tdata),
@@ -1028,7 +1025,6 @@ link_hash_newfunc (struct bfd_hash_entry
       struct _bfd_sparc_elf_link_hash_entry *eh;
 
       eh = (struct _bfd_sparc_elf_link_hash_entry *) entry;
-      eh->dyn_relocs = NULL;
       eh->tls_type = GOT_UNKNOWN;
       eh->has_got_reloc = 0;
       eh->has_non_got_reloc = 0;
@@ -1074,7 +1070,7 @@ elf_sparc_local_htab_eq (const void *ptr
 static struct elf_link_hash_entry *
 elf_sparc_get_local_sym_hash (struct _bfd_sparc_elf_link_hash_table *htab,
 			      bfd *abfd, const Elf_Internal_Rela *rel,
-			      bfd_boolean create)
+			      bool create)
 {
   struct _bfd_sparc_elf_link_hash_entry e, *ret;
   asection *sec = abfd->sections;
@@ -1136,7 +1132,7 @@ struct bfd_link_hash_table *
 _bfd_sparc_elf_link_hash_table_create (bfd *abfd)
 {
   struct _bfd_sparc_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct _bfd_sparc_elf_link_hash_table);
+  size_t amt = sizeof (struct _bfd_sparc_elf_link_hash_table);
 
   ret = (struct _bfd_sparc_elf_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -1208,7 +1204,7 @@ _bfd_sparc_elf_link_hash_table_create (b
    .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
    hash table.  */
 
-bfd_boolean
+bool
 _bfd_sparc_elf_create_dynamic_sections (bfd *dynobj,
 					struct bfd_link_info *info)
 {
@@ -1218,12 +1214,12 @@ _bfd_sparc_elf_create_dynamic_sections (
   BFD_ASSERT (htab != NULL);
 
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
-    return FALSE;
+    return false;
 
-  if (htab->is_vxworks)
+  if (htab->elf.target_os == is_vxworks)
     {
       if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2))
-	return FALSE;
+	return false;
       if (bfd_link_pic (info))
 	{
 	  htab->plt_header_size
@@ -1244,10 +1240,10 @@ _bfd_sparc_elf_create_dynamic_sections (
       || (!bfd_link_pic (info) && !htab->elf.srelbss))
     abort ();
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 create_ifunc_sections (bfd *abfd, struct bfd_link_info *info)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -1256,7 +1252,7 @@ create_ifunc_sections (bfd *abfd, struct
   asection *s;
 
   if (htab->irelifunc != NULL || htab->iplt != NULL)
-    return TRUE;
+    return true;
 
   flags = bed->dynamic_sec_flags;
   pltflags = flags | SEC_ALLOC | SEC_CODE | SEC_LOAD;
@@ -1264,17 +1260,17 @@ create_ifunc_sections (bfd *abfd, struct
   s = bfd_make_section_with_flags (abfd, ".iplt", pltflags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->plt_alignment))
-    return FALSE;
+    return false;
   htab->iplt = s;
 
   s = bfd_make_section_with_flags (abfd, ".rela.iplt",
 				   flags | SEC_READONLY);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->irelplt = s;
 
-  return TRUE;
+  return true;
 }
 
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
@@ -1289,37 +1285,6 @@ _bfd_sparc_elf_copy_indirect_symbol (str
   edir = (struct _bfd_sparc_elf_link_hash_entry *) dir;
   eind = (struct _bfd_sparc_elf_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0)
     {
       edir->tls_type = eind->tls_type;
@@ -1368,7 +1333,7 @@ sparc_elf_tls_transition (struct bfd_lin
    allocate space in the global offset table or procedure linkage
    table.  */
 
-bfd_boolean
+bool
 _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			     asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -1379,10 +1344,10 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
   const Elf_Internal_Rela *rel_end;
   asection *sreloc;
   int num_relocs;
-  bfd_boolean checked_tlsgd = FALSE;
+  bool checked_tlsgd = false;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = _bfd_sparc_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
@@ -1401,7 +1366,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
   if (htab->elf.dynobj == NULL)
     htab->elf.dynobj = abfd;
   if (!create_ifunc_sections (htab->elf.dynobj, info))
-    return FALSE;
+    return false;
 
   rel_end = relocs + num_relocs;
   for (rel = relocs; rel < rel_end; rel++)
@@ -1419,23 +1384,24 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 	{
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: bad symbol index: %d"), abfd, r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       isym = NULL;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  /* A local symbol.  */
-	  isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx);
+	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd,
+					r_symndx);
 	  if (isym == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Check relocation against local STT_GNU_IFUNC symbol.  */
 	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
 	    {
-	      h = elf_sparc_get_local_sym_hash (htab, abfd, rel, TRUE);
+	      h = elf_sparc_get_local_sym_hash (htab, abfd, rel, true);
 	      if (h == NULL)
-		return FALSE;
+		return false;
 
 	      /* Fake a STT_GNU_IFUNC symbol.  */
 	      h->type = STT_GNU_IFUNC;
@@ -1475,15 +1441,15 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 		    || ELF32_R_TYPE (relt->r_info) == R_SPARC_TLS_GD_ADD
 		    || ELF32_R_TYPE (relt->r_info) == R_SPARC_TLS_GD_CALL)
 		  break;
-	      checked_tlsgd = TRUE;
+	      checked_tlsgd = true;
 	      _bfd_sparc_elf_tdata (abfd)->has_tlsgd = relt < rel_end;
 	    }
 	    break;
 	  case R_SPARC_TLS_GD_LO10:
 	  case R_SPARC_TLS_GD_ADD:
 	  case R_SPARC_TLS_GD_CALL:
-	    checked_tlsgd = TRUE;
-	    _bfd_sparc_elf_tdata (abfd)->has_tlsgd = TRUE;
+	    checked_tlsgd = true;
+	    _bfd_sparc_elf_tdata (abfd)->has_tlsgd = true;
 	    break;
 	  }
 
@@ -1559,7 +1525,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 		    local_got_refcounts = ((bfd_signed_vma *)
 					   bfd_zalloc (abfd, size));
 		    if (local_got_refcounts == NULL)
-		      return FALSE;
+		      return false;
 		    elf_local_got_refcounts (abfd) = local_got_refcounts;
 		    _bfd_sparc_elf_local_got_tls_type (abfd)
 		      = (char *) (local_got_refcounts + symtab_hdr->sh_info);
@@ -1589,7 +1555,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 		      /* xgettext:c-format */
 		      (_("%pB: `%s' accessed both as normal and thread local symbol"),
 		       abfd, h ? h->root.root.string : "<local>");
-		    return FALSE;
+		    return false;
 		  }
 
 		if (h != NULL)
@@ -1601,7 +1567,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 
 	  if (!htab->elf.sgot
 	      && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
-	    return FALSE;
+	    return false;
 
 	  if (eh != NULL)
 	    {
@@ -1620,8 +1586,8 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 
 	  /* Essentially R_SPARC_WPLT30 relocs against __tls_get_addr.  */
 	  h = (struct elf_link_hash_entry *)
-	       bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
-				     FALSE, TRUE);
+	       bfd_link_hash_lookup (info->hash, "__tls_get_addr", false,
+				     false, true);
 	  BFD_ASSERT (h != NULL);
 	  /* Fall through */
 
@@ -1658,7 +1624,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 	      /* It does not make sense to have a procedure linkage
 		 table entry for a local symbol.  */
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  h->needs_plt = 1;
@@ -1781,16 +1747,16 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
 		    (sec, htab->elf.dynobj, htab->word_align_power,
-		     abfd, /*rela?*/ TRUE);
+		     abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
-		head = &((struct _bfd_sparc_elf_link_hash_entry *) h)->dyn_relocs;
+		head = &h->dyn_relocs;
 	      else
 		{
 		  /* Track dynamic relocs needed for local syms too.
@@ -1811,11 +1777,11 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->elf.dynobj, amt));
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -1832,12 +1798,12 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 
 	case R_SPARC_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_SPARC_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_SPARC_REGISTER:
@@ -1849,7 +1815,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 asection *
@@ -1879,7 +1845,7 @@ _bfd_sparc_elf_gc_mark_hook (asection *s
 	     gc marked when processing the other reloc.  That lets
 	     us handle __tls_get_addr here.  */
 	  h = elf_link_hash_lookup (elf_hash_table (info), "__tls_get_addr",
-				    FALSE, FALSE, TRUE);
+				    false, false, true);
 	  BFD_ASSERT (h != NULL);
 	  h->mark = 1;
 	  if (h->is_weakalias)
@@ -1908,7 +1874,7 @@ sparc_elf_find_reloc_at_ofs (Elf_Interna
 /* Remove undefined weak symbol from the dynamic symbol table if it
    is resolved to 0.   */
 
-bfd_boolean
+bool
 _bfd_sparc_elf_fixup_symbol (struct bfd_link_info *info,
 			     struct elf_link_hash_entry *h)
 {
@@ -1920,24 +1886,7 @@ _bfd_sparc_elf_fixup_symbol (struct bfd_
       _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
 			      h->dynstr_index);
     }
-  return TRUE;
-}
-
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = _bfd_sparc_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
+  return true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -1946,7 +1895,7 @@ readonly_dynrelocs (struct elf_link_hash
    change the definition to something the rest of the link can
    understand.  */
 
-bfd_boolean
+bool
 _bfd_sparc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				     struct elf_link_hash_entry *h)
 {
@@ -1995,7 +1944,7 @@ _bfd_sparc_elf_adjust_dynamic_symbol (st
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) -1;
@@ -2009,7 +1958,7 @@ _bfd_sparc_elf_adjust_dynamic_symbol (st
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2020,26 +1969,26 @@ _bfd_sparc_elf_adjust_dynamic_symbol (st
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (!readonly_dynrelocs (h))
+  if (!_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -2078,17 +2027,17 @@ _bfd_sparc_elf_adjust_dynamic_symbol (st
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info;
   struct _bfd_sparc_elf_link_hash_table *htab;
   struct _bfd_sparc_elf_link_hash_entry *eh;
   struct elf_dyn_relocs *p;
-  bfd_boolean resolved_to_zero;
+  bool resolved_to_zero;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = _bfd_sparc_elf_hash_table (info);
@@ -2110,7 +2059,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)
@@ -2128,7 +2077,8 @@ allocate_dynrelocs (struct elf_link_hash
 	      s->size = htab->plt_header_size;
 
 	      /* Allocate space for the .rela.plt.unloaded relocations.  */
-	      if (htab->is_vxworks && !bfd_link_pic (info))
+	      if (htab->elf.target_os == is_vxworks
+		  && !bfd_link_pic (info))
 		htab->srelplt2->size = sizeof (Elf32_External_Rela) * 2;
 	    }
 
@@ -2138,7 +2088,7 @@ allocate_dynrelocs (struct elf_link_hash
 			  (((bfd_vma)1 << 31) << 1) : 0x400000))
 	    {
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 
 	  if (SPARC_ELF_WORD_BYTES(htab) == 8
@@ -2180,7 +2130,7 @@ allocate_dynrelocs (struct elf_link_hash
 		htab->elf.irelplt->size += SPARC_ELF_RELA_BYTES (htab);
 	    }
 
-	  if (htab->is_vxworks)
+	  if (htab->elf.target_os == is_vxworks)
 	    {
 	      /* Allocate space for the .got.plt entry.  */
 	      htab->elf.sgotplt->size += 4;
@@ -2212,7 +2162,7 @@ allocate_dynrelocs (struct elf_link_hash
   else if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = _bfd_sparc_elf_hash_entry(h)->tls_type;
 
       /* Undefined weak syms won't yet be marked as dynamic.  */
@@ -2222,7 +2172,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->elf.sgot;
@@ -2257,8 +2207,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -2272,7 +2222,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -2283,11 +2233,11 @@ allocate_dynrelocs (struct elf_link_hash
 	    }
 	}
 
-      if (htab->is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      if (strcmp (p->sec->output_section->name, ".tls_vars") == 0)
 		*pp = p->next;
@@ -2298,7 +2248,7 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility or in PIE.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  /* An undefined weak symbol is never
@@ -2313,7 +2263,7 @@ allocate_dynrelocs (struct elf_link_hash
 		     can branch to 0 without PLT.  */
 		  struct elf_dyn_relocs **pp;
 
-		  for (pp = &eh->dyn_relocs; (p = *pp) != NULL;)
+		  for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
 		    if (p->pc_count == 0)
 		      *pp = p->next;
 		    else
@@ -2323,17 +2273,17 @@ allocate_dynrelocs (struct elf_link_hash
 			pp = &p->next;
 		      }
 
-		  if (eh->dyn_relocs != NULL)
+		  if (h->dyn_relocs != NULL)
 		    {
 		      /* Make sure undefined weak symbols are output
 			 as dynamic symbols in PIEs for dynamic non-GOT
 			 non-PLT reloations.  */
 		      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-			return FALSE;
+			return false;
 		    }
 		}
 	      else
-		eh->dyn_relocs = NULL;
+		h->dyn_relocs = NULL;
 	    }
 
 	  /* Make sure undefined weak symbols are output as a dynamic
@@ -2342,7 +2292,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -2368,7 +2318,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -2377,25 +2327,25 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * SPARC_ELF_RELA_BYTES (htab);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    local dynamic relocs.  */
 
-static bfd_boolean
+static int
 allocate_local_dynrelocs (void **slot, void *inf)
 {
   struct elf_link_hash_entry *h
@@ -2411,37 +2361,10 @@ allocate_local_dynrelocs (void **slot, v
   return allocate_dynrelocs (h, inf);
 }
 
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
-}
-
 /* Return true if the dynamic symbol for a given section should be
    omitted when creating a shared library.  */
 
-bfd_boolean
+bool
 _bfd_sparc_elf_omit_section_dynsym (bfd *output_bfd,
 				    struct bfd_link_info *info,
 				    asection *p)
@@ -2450,14 +2373,14 @@ _bfd_sparc_elf_omit_section_dynsym (bfd
      against the _GLOBAL_OFFSET_TABLE_ symbol emitted in PIC mode
      can be turned into relocations against the .got symbol.  */
   if (strcmp (p->name, ".got") == 0)
-    return FALSE;
+    return false;
 
   return _bfd_elf_omit_section_dynsym_default (output_bfd, info, p);
 }
 
 /* Set the sizes of the dynamic sections.  */
 
-bfd_boolean
+bool
 _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
 				      struct bfd_link_info *info)
 {
@@ -2512,7 +2435,7 @@ _bfd_sparc_elf_size_dynamic_sections (bf
 		     linker script /DISCARD/, so we'll be discarding
 		     the relocs too.  */
 		}
-	      else if (htab->is_vxworks
+	      else if (htab->elf.target_os == is_vxworks
 		       && strcmp (p->sec->output_section->name,
 				  ".tls_vars") == 0)
 		{
@@ -2582,7 +2505,7 @@ _bfd_sparc_elf_size_dynamic_sections (bf
   htab_traverse (htab->loc_hash_table, allocate_local_dynrelocs, info);
 
   if (! ABI_64_P (output_bfd)
-      && !htab->is_vxworks
+      && htab->elf.target_os != is_vxworks
       && elf_hash_table (info)->dynamic_sections_created)
     {
       /* Make space for the trailing nop in .plt.  */
@@ -2617,7 +2540,7 @@ _bfd_sparc_elf_size_dynamic_sections (bf
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (CONST_STRNEQ (s->name, ".rela"))
+      else if (startswith (s->name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
@@ -2655,7 +2578,7 @@ _bfd_sparc_elf_size_dynamic_sections (bf
 	 at the beginning, and we don't want garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -2668,37 +2591,9 @@ _bfd_sparc_elf_size_dynamic_sections (bf
 #define add_dynamic_entry(TAG, VAL) \
   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->elf.srelplt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (!add_dynamic_entry (DT_RELA, 0)
-	  || !add_dynamic_entry (DT_RELASZ, 0)
-	  || !add_dynamic_entry (DT_RELAENT,
-				 SPARC_ELF_RELA_BYTES (htab)))
-	return FALSE;
-
-      /* If any dynamic relocs apply to a read-only section,
-	 then we need a DT_TEXTREL entry.  */
-      if ((info->flags & DF_TEXTREL) == 0)
-	elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
-
-      if (info->flags & DF_TEXTREL)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
+      if (!_bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info,
+						    true))
+	return false;
 
       if (ABI_64_P (output_bfd))
 	{
@@ -2718,12 +2613,12 @@ _bfd_sparc_elf_size_dynamic_sections (bf
 		struct elf_link_local_dynamic_entry *entry, *e;
 
 		if (!add_dynamic_entry (DT_SPARC_REGISTER, 0))
-		  return FALSE;
+		  return false;
 
 		entry = (struct elf_link_local_dynamic_entry *)
 		  bfd_hash_allocate (&info->hash->table, sizeof (*entry));
 		if (entry == NULL)
-		  return FALSE;
+		  return false;
 
 		/* We cheat here a little bit: the symbol will not be local, so we
 		   put it at the end of the dynlocal linked list.  We will fix it
@@ -2732,7 +2627,7 @@ _bfd_sparc_elf_size_dynamic_sections (bf
 		entry->isym.st_size = 0;
 		if (*app_regs [reg].name != '\0')
 		  entry->isym.st_name
-		    = _bfd_elf_strtab_add (dynstr, app_regs[reg].name, FALSE);
+		    = _bfd_elf_strtab_add (dynstr, app_regs[reg].name, false);
 		else
 		  entry->isym.st_name = 0;
 		entry->isym.st_other = 0;
@@ -2755,45 +2650,42 @@ _bfd_sparc_elf_size_dynamic_sections (bf
 		eht->dynsymcount++;
 	      }
 	}
-      if (htab->is_vxworks
-	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
-	return FALSE;
     }
 #undef add_dynamic_entry
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_sparc_elf_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
       struct _bfd_sparc_elf_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
+      size_t amt = sizeof (*sdata);
 
       sdata = bfd_zalloc (abfd, amt);
       if (sdata == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = sdata;
     }
 
   return _bfd_elf_new_section_hook (abfd, sec);
 }
 
-bfd_boolean
+bool
 _bfd_sparc_elf_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
 			      struct bfd_section *section,
 			      struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
-			      bfd_boolean *again)
+			      bool *again)
 {
   if (bfd_link_relocatable (link_info))
     (*link_info->callbacks->einfo)
       (_("%P%F: --relax and -r may not be used together\n"));
 
-  *again = FALSE;
+  *again = false;
   sec_do_relax (section) = 1;
-  return TRUE;
+  return true;
 }
 
 /* Return the base VMA address which should be subtracted from real addresses
@@ -2847,13 +2739,13 @@ gdopoff (struct bfd_link_info *info, bfd
    _GLOBAL_OFFSET_TABLE_ and thus the offset may be calculated by a
    sethi, xor sequence.  */
 
-static bfd_boolean
+static bool
 gdop_relative_offset_ok (struct bfd_link_info *info,
 			 struct elf_link_hash_entry *h,
 			 bfd_vma address ATTRIBUTE_UNUSED)
 {
   if (!SYMBOL_REFERENCES_LOCAL (info, h))
-    return FALSE;
+    return false;
   /* If H is undefined, ADDRESS will be zero.  We can't allow a
      relative offset to "zero" when producing PIEs or shared libs.
      Note that to get here with an undefined symbol it must also be
@@ -2862,17 +2754,17 @@ gdop_relative_offset_ok (struct bfd_link
       && h != NULL
       && (h->root.type == bfd_link_hash_undefweak
 	  || h->root.type == bfd_link_hash_undefined))
-    return FALSE;
+    return false;
 #ifdef BFD64
   return gdopoff (info, address) + ((bfd_vma) 1 << 32) < (bfd_vma) 2 << 32;
 #else
-  return TRUE;
+  return true;
 #endif
 }
 
 /* Relocate a SPARC ELF section.  */
 
-bfd_boolean
+int
 _bfd_sparc_elf_relocate_section (bfd *output_bfd,
 				 struct bfd_link_info *info,
 				 bfd *input_bfd,
@@ -2891,7 +2783,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
   int num_relocs;
-  bfd_boolean is_vxworks_tls;
+  bool is_vxworks_tls;
 
   htab = _bfd_sparc_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
@@ -2907,7 +2799,8 @@ _bfd_sparc_elf_relocate_section (bfd *ou
   sreloc = elf_section_data (input_section)->sreloc;
   /* We have to handle relocations in vxworks .tls_vars sections
      specially, because the dynamic loader is 'weird'.  */
-  is_vxworks_tls = (htab->is_vxworks && bfd_link_pic (info)
+  is_vxworks_tls = (htab->elf.target_os == is_vxworks
+		    && bfd_link_pic (info)
 		    && !strcmp (input_section->output_section->name,
 				".tls_vars"));
 
@@ -2928,10 +2821,10 @@ _bfd_sparc_elf_relocate_section (bfd *ou
       asection *sec;
       bfd_vma relocation, off;
       bfd_reloc_status_type r;
-      bfd_boolean is_plt = FALSE;
-      bfd_boolean unresolved_reloc;
-      bfd_boolean resolved_to_zero;
-      bfd_boolean relative_reloc;
+      bool is_plt = false;
+      bool unresolved_reloc;
+      bool resolved_to_zero;
+      bool relative_reloc;
 
       r_type = SPARC_ELF_R_TYPE (rel->r_info);
       if (r_type == R_SPARC_GNU_VTINHERIT
@@ -2941,7 +2834,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
       if (r_type < 0 || r_type >= (int) R_SPARC_max_std)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       howto = _bfd_sparc_elf_howto_table + r_type;
@@ -2949,7 +2842,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  sym = local_syms + r_symndx;
@@ -2961,7 +2854,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 	    {
 	      /* Relocate against local STT_GNU_IFUNC symbol.  */
 	      h = elf_sparc_get_local_sym_hash (htab, input_bfd,
-						rel, FALSE);
+						rel, false);
 	      if (h == NULL)
 		abort ();
 
@@ -2972,7 +2865,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 	}
       else
 	{
-	  bfd_boolean warned, ignored;
+	  bool warned, ignored;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -3011,7 +2904,25 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 	         STT_GNU_IFUNC symbol as STT_FUNC.  */
 	      if (elf_section_type (input_section) == SHT_NOTE)
 		goto skip_ifunc;
-	      abort ();
+
+	      /* Dynamic relocs are not propagated for SEC_DEBUGGING
+		 sections because such sections are not SEC_ALLOC and
+		 thus ld.so will not process them.  */
+	      if ((input_section->flags & SEC_ALLOC) == 0
+		  && (input_section->flags & SEC_DEBUGGING) != 0)
+		continue;
+
+	      _bfd_error_handler
+		/* xgettext:c-format */
+		(_("%pB(%pA+%#" PRIx64 "): "
+		   "unresolvable %s relocation against symbol `%s'"),
+		 input_bfd,
+		 input_section,
+		 (uint64_t) rel->r_offset,
+		 howto->name,
+		 h->root.root.string);
+	      bfd_set_error (bfd_error_bad_value);
+	      return false;
 	    }
 
 	  plt_sec = htab->elf.splt;
@@ -3110,9 +3021,9 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 		(_("%pB: relocation %s against STT_GNU_IFUNC "
 		   "symbol `%s' isn't handled by %s"), input_bfd,
 		 _bfd_sparc_elf_howto_table[r_type].name,
-		 name, __FUNCTION__);
+		 name, __func__);
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -3184,10 +3095,10 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 	  if (htab->elf.sgot == NULL)
 	    abort ();
 
-	  relative_reloc = FALSE;
+	  relative_reloc = false;
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      BFD_ASSERT (off != (bfd_vma) -1);
@@ -3221,7 +3132,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 			  && !h->forced_local
 			  && h->root.type != bfd_link_hash_undefweak
 			  && bfd_link_pic (info))
-			relative_reloc = TRUE;
+			relative_reloc = true;
 		      else
 			SPARC_ELF_PUT_WORD (htab, output_bfd, relocation,
 					    htab->elf.sgot->contents + off);
@@ -3229,7 +3140,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -3248,7 +3159,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 		  /* For a local symbol in PIC mode, we need to generate a
 		     R_SPARC_RELATIVE reloc for the dynamic linker.  */
 		  if (bfd_link_pic (info))
-		    relative_reloc = TRUE;
+		    relative_reloc = true;
 		  else
 		    SPARC_ELF_PUT_WORD (htab, output_bfd, relocation,
 					htab->elf.sgot->contents + off);
@@ -3329,11 +3240,11 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 	  relocation = (htab->elf.splt->output_section->vma
 			+ htab->elf.splt->output_offset
 			+ h->plt.offset);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  if (r_type == R_SPARC_PLT32 || r_type == R_SPARC_PLT64)
 	    {
 	      r_type = r_type == R_SPARC_PLT32 ? R_SPARC_32 : R_SPARC_64;
-	      is_plt = TRUE;
+	      is_plt = true;
 	      goto r_sparc_plt32;
 	    }
 	  break;
@@ -3407,7 +3318,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 		      || h->root.type == bfd_link_hash_undefined)))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate = FALSE;
+	      bool skip, relocate = false;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
@@ -3415,15 +3326,15 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 
 	      BFD_ASSERT (sreloc != NULL);
 
-	      skip = FALSE;
+	      skip = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -3465,7 +3376,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 		     FIXME: Add code tracking needed dynamic relocs as
 		     e.g. i386 has.  */
 		  if (h->dynindx == -1)
-		    skip = TRUE, relocate = TRUE;
+		    skip = true, relocate = true;
 		  break;
 		}
 
@@ -3506,7 +3417,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -3535,7 +3446,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 				(_("%pB: probably compiled without -fPIC?"),
 				 input_bfd);
 			      bfd_set_error (bfd_error_bad_value);
-			      return FALSE;
+			      return false;
 			    }
 			}
 
@@ -3671,7 +3582,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 	    abort ();
 
 	  relocation = htab->elf.sgot->output_offset + off - got_base;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  howto = _bfd_sparc_elf_howto_table + r_type;
 	  break;
 
@@ -3812,8 +3723,8 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 	    }
 
 	  h = (struct elf_link_hash_entry *)
-	      bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
-				    FALSE, TRUE);
+	      bfd_link_hash_lookup (info->hash, "__tls_get_addr", false,
+				    false, true);
 	  BFD_ASSERT (h != NULL);
 	  r_type = R_SPARC_WPLT30;
 	  howto = _bfd_sparc_elf_howto_table + r_type;
@@ -4139,7 +4050,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 
       if (r == bfd_reloc_continue)
 	{
-do_relocation:
+	do_relocation:
 	  r = _bfd_final_link_relocate (howto, input_bfd, input_section,
 					contents, rel->r_offset,
 					relocation, rel->r_addend);
@@ -4190,7 +4101,7 @@ do_relocation:
 							    symtab_hdr->sh_link,
 							    sym->st_name);
 		    if (name == NULL)
-		      return FALSE;
+		      return false;
 		    if (*name == '\0')
 		      name = bfd_section_name (sec);
 		  }
@@ -4203,7 +4114,7 @@ do_relocation:
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Build a VxWorks PLT entry.  PLT_INDEX is the index of the PLT entry
@@ -4302,7 +4213,7 @@ sparc_vxworks_build_plt_entry (bfd *outp
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-bfd_boolean
+bool
 _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
 				      struct bfd_link_info *info,
 				      struct elf_link_hash_entry *h,
@@ -4311,7 +4222,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bf
   struct _bfd_sparc_elf_link_hash_table *htab;
   const struct elf_backend_data *bed;
   struct _bfd_sparc_elf_link_hash_entry  *eh;
-  bfd_boolean resolved_to_zero;
+  bool resolved_to_zero;
 
   htab = _bfd_sparc_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
@@ -4350,7 +4261,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bf
 	abort ();
 
       /* Fill in the entry in the .rela.plt section.  */
-      if (htab->is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
 	{
 	  /* Work out the index of this PLT entry.  */
 	  rela_index = ((h->plt.offset - htab->plt_header_size)
@@ -4375,7 +4286,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bf
 	}
       else
 	{
-	  bfd_boolean ifunc = FALSE;
+	  bool ifunc = false;
 
 	  /* Fill in the entry in the procedure linkage table.  */
 	  rela_index = SPARC_ELF_BUILD_PLT_ENTRY (htab, output_bfd, splt,
@@ -4389,7 +4300,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bf
 		  && h->def_regular
 		  && h->type == STT_GNU_IFUNC))
 	    {
-	      ifunc = TRUE;
+	      ifunc = true;
 	      BFD_ASSERT (h == NULL
 			  || (h->type == STT_GNU_IFUNC
 			      && h->def_regular
@@ -4502,10 +4413,13 @@ _bfd_sparc_elf_finish_dynamic_symbol (bf
 			       + plt->output_offset + h->plt.offset),
 			      htab->elf.sgot->contents
 			      + (h->got.offset & ~(bfd_vma) 1));
-	  return TRUE;
+	  return true;
 	}
 
-      if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))
+      if (bfd_link_pic (info)
+	  && (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
+	  && SYMBOL_REFERENCES_LOCAL (info, h))
 	{
 	  asection *sec = h->root.u.def.section;
 	  if (h->type == STT_GNU_IFUNC)
@@ -4552,16 +4466,16 @@ _bfd_sparc_elf_finish_dynamic_symbol (bf
      ".got" section.  Likewise _PROCEDURE_LINKAGE_TABLE_ and ".plt".  */
   if (sym != NULL
       && (h == htab->elf.hdynamic
-	  || (!htab->is_vxworks
+	  || (htab->elf.target_os != is_vxworks
 	      && (h == htab->elf.hgot || h == htab->elf.hplt))))
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 sparc_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
 		  bfd *dynobj, asection *sdyn,
 		  asection *splt ATTRIBUTE_UNUSED)
@@ -4571,7 +4485,7 @@ sparc_finish_dyn (bfd *output_bfd, struc
   bfd_byte *dyncon, *dynconend;
   size_t dynsize;
   int stt_regidx = -1;
-  bfd_boolean abi_64_p;
+  bool abi_64_p;
 
   htab = _bfd_sparc_elf_hash_table (info);
   BFD_ASSERT (htab != NULL);
@@ -4582,11 +4496,11 @@ sparc_finish_dyn (bfd *output_bfd, struc
   for (dyncon = sdyn->contents; dyncon < dynconend; dyncon += dynsize)
     {
       Elf_Internal_Dyn dyn;
-      bfd_boolean size;
+      bool size;
 
       bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
 
-      if (htab->is_vxworks && dyn.d_tag == DT_PLTGOT)
+      if (htab->elf.target_os == is_vxworks && dyn.d_tag == DT_PLTGOT)
 	{
 	  /* On VxWorks, DT_PLTGOT should point to the start of the GOT,
 	     not to the start of the PLT.  */
@@ -4597,7 +4511,7 @@ sparc_finish_dyn (bfd *output_bfd, struc
 	      bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
 	    }
 	}
-      else if (htab->is_vxworks
+      else if (htab->elf.target_os == is_vxworks
 	       && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 	bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
       else if (abi_64_p && dyn.d_tag == DT_SPARC_REGISTER)
@@ -4607,7 +4521,7 @@ sparc_finish_dyn (bfd *output_bfd, struc
 	      stt_regidx =
 		_bfd_elf_link_lookup_local_dynindx (info, output_bfd, -1);
 	      if (stt_regidx == -1)
-		return FALSE;
+		return false;
 	    }
 	  dyn.d_un.d_val = stt_regidx++;
 	  bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
@@ -4620,15 +4534,15 @@ sparc_finish_dyn (bfd *output_bfd, struc
 	    {
 	    case DT_PLTGOT:
 	      s = htab->elf.splt;
-	      size = FALSE;
+	      size = false;
 	      break;
 	    case DT_PLTRELSZ:
 	      s = htab->elf.srelplt;
-	      size = TRUE;
+	      size = true;
 	      break;
 	    case DT_JMPREL:
 	      s = htab->elf.srelplt;
-	      size = FALSE;
+	      size = false;
 	      break;
 	    default:
 	      continue;
@@ -4646,7 +4560,7 @@ sparc_finish_dyn (bfd *output_bfd, struc
 	  bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Install the first PLT entry in a VxWorks executable and make sure that
@@ -4747,7 +4661,7 @@ sparc_vxworks_finish_shared_plt (bfd *ou
 /* Finish up local dynamic symbol handling.  We set the contents of
    various dynamic sections here.  */
 
-static bfd_boolean
+static int
 finish_local_dynamic_symbol (void **slot, void *inf)
 {
   struct elf_link_hash_entry *h
@@ -4763,7 +4677,7 @@ finish_local_dynamic_symbol (void **slot
    here since undefined weak symbol may not be dynamic and may not be
    called for _bfd_sparc_elf_finish_dynamic_symbol.  */
 
-static bfd_boolean
+static bool
 pie_finish_undefweak_symbol (struct bfd_hash_entry *bh,
 			     void *inf)
 {
@@ -4772,13 +4686,13 @@ pie_finish_undefweak_symbol (struct bfd_
 
   if (h->root.type != bfd_link_hash_undefweak
       || h->dynindx != -1)
-    return TRUE;
+    return true;
 
   return _bfd_sparc_elf_finish_dynamic_symbol (info->output_bfd, info,
 					       h, NULL);
 }
 
-bfd_boolean
+bool
 _bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd *dynobj;
@@ -4817,12 +4731,12 @@ _bfd_sparc_elf_finish_dynamic_sections (
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       if (!sparc_finish_dyn (output_bfd, info, dynobj, sdyn, splt))
-	return FALSE;
+	return false;
 
       /* Initialize the contents of the .plt section.  */
       if (splt->size > 0)
 	{
-	  if (htab->is_vxworks)
+	  if (htab->elf.target_os == is_vxworks)
 	    {
 	      if (bfd_link_pic (info))
 		sparc_vxworks_finish_shared_plt (output_bfd, info);
@@ -4840,7 +4754,8 @@ _bfd_sparc_elf_finish_dynamic_sections (
 
       if (elf_section_data (splt->output_section) != NULL)
 	elf_section_data (splt->output_section)->this_hdr.sh_entsize
-	  = ((htab->is_vxworks || !ABI_64_P (output_bfd))
+	  = ((htab->elf.target_os == is_vxworks
+	      || !ABI_64_P (output_bfd))
 	     ? 0 : htab->plt_entry_size);
     }
 
@@ -4867,13 +4782,13 @@ _bfd_sparc_elf_finish_dynamic_sections (
     bfd_hash_traverse (&info->hash->table,
 		       pie_finish_undefweak_symbol,
 		       info);
-  return TRUE;
+  return true;
 }
 
 
 /* Set the right machine number for a SPARC ELF file.  */
 
-bfd_boolean
+bool
 _bfd_sparc_elf_object_p (bfd *abfd)
 {
   obj_attribute *attrs = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
@@ -4966,7 +4881,7 @@ _bfd_sparc_elf_object_p (bfd *abfd)
 	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
 					      bfd_mach_sparc_v8plus);
 	  else
-	    return FALSE;
+	    return false;
 	}
       else if (elf_elfheader (abfd)->e_flags & EF_SPARC_LEDATA)
 	return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
@@ -5001,7 +4916,7 @@ _bfd_sparc_elf_plt_sym_val (bfd_vma i, c
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
-bfd_boolean
+bool
 _bfd_sparc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -5017,7 +4932,7 @@ _bfd_sparc_elf_merge_private_bfd_data (b
 	 initialized.  */
       elf_known_obj_attributes_proc (obfd)[0].i = 1;
 
-      return TRUE;
+      return true;
     }
 
   in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
@@ -5038,5 +4953,5 @@ _bfd_sparc_elf_merge_private_bfd_data (b
   /* Merge Tag_compatibility attributes and any common GNU ones.  */
   _bfd_elf_merge_object_attributes (ibfd, info);
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-sparc.h ./bfd/elfxx-sparc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-sparc.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-sparc.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* SPARC ELF specific backend routines.
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -55,16 +55,10 @@ struct _bfd_sparc_elf_link_hash_table
     bfd_vma offset;
   } tls_ldm_got;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* Used by local STT_GNU_IFUNC symbols.  */
   htab_t loc_hash_table;
   void *loc_hash_memory;
 
-  /* True if the target system is VxWorks.  */
-  int is_vxworks;
-
   /* The (unloaded but important) .rela.plt.unloaded section, for VxWorks.  */
   asection *srelplt2;
 
@@ -90,57 +84,58 @@ struct _bfd_sparc_elf_link_hash_table
 /* Get the SPARC ELF linker hash table from a link_info structure.  */
 
 #define _bfd_sparc_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == SPARC_ELF_DATA ? ((struct _bfd_sparc_elf_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == SPARC_ELF_DATA)	\
+   ? (struct _bfd_sparc_elf_link_hash_table *) (p)->hash : NULL)
 
 extern reloc_howto_type *_bfd_sparc_elf_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
 extern reloc_howto_type *_bfd_sparc_elf_reloc_name_lookup
   (bfd *, const char *);
-extern bfd_boolean _bfd_sparc_elf_info_to_howto
+extern bool _bfd_sparc_elf_info_to_howto
   (bfd *, arelent *, Elf_Internal_Rela *);
 extern reloc_howto_type *_bfd_sparc_elf_info_to_howto_ptr
   (bfd*, unsigned int);
-extern bfd_boolean _bfd_sparc_elf_mkobject
+extern bool _bfd_sparc_elf_mkobject
   (bfd *);
 extern struct bfd_link_hash_table *_bfd_sparc_elf_link_hash_table_create
   (bfd *);
-extern bfd_boolean _bfd_sparc_elf_create_dynamic_sections
+extern bool _bfd_sparc_elf_create_dynamic_sections
   (bfd *, struct bfd_link_info *);
 extern void _bfd_sparc_elf_copy_indirect_symbol
   (struct bfd_link_info *,
    struct elf_link_hash_entry *,
    struct elf_link_hash_entry *);
-extern bfd_boolean _bfd_sparc_elf_check_relocs
+extern bool _bfd_sparc_elf_check_relocs
   (bfd *, struct bfd_link_info *,
    asection *, const Elf_Internal_Rela *);
 extern asection *_bfd_sparc_elf_gc_mark_hook
   (asection *, struct bfd_link_info *,
    Elf_Internal_Rela *, struct elf_link_hash_entry *,
    Elf_Internal_Sym *);
-extern bfd_boolean _bfd_sparc_elf_adjust_dynamic_symbol
+extern bool _bfd_sparc_elf_adjust_dynamic_symbol
   (struct bfd_link_info *, struct elf_link_hash_entry *);
-extern bfd_boolean _bfd_sparc_elf_omit_section_dynsym
+extern bool _bfd_sparc_elf_omit_section_dynsym
   (bfd *, struct bfd_link_info *, asection *);
-extern bfd_boolean _bfd_sparc_elf_size_dynamic_sections
+extern bool _bfd_sparc_elf_size_dynamic_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_sparc_elf_new_section_hook
+extern bool _bfd_sparc_elf_new_section_hook
   (bfd *, asection *);
-extern bfd_boolean _bfd_sparc_elf_relax_section
-  (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *);
-extern bfd_boolean _bfd_sparc_elf_relocate_section
+extern bool _bfd_sparc_elf_relax_section
+  (bfd *, struct bfd_section *, struct bfd_link_info *, bool *);
+extern int _bfd_sparc_elf_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
-extern bfd_boolean _bfd_sparc_elf_finish_dynamic_symbol
+extern bool _bfd_sparc_elf_finish_dynamic_symbol
   (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
    Elf_Internal_Sym *sym);
-extern bfd_boolean _bfd_sparc_elf_finish_dynamic_sections
+extern bool _bfd_sparc_elf_finish_dynamic_sections
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_sparc_elf_fixup_symbol
+extern bool _bfd_sparc_elf_fixup_symbol
   (struct bfd_link_info *, struct elf_link_hash_entry *);
-extern bfd_boolean _bfd_sparc_elf_object_p
+extern bool _bfd_sparc_elf_object_p
   (bfd *);
 extern bfd_vma _bfd_sparc_elf_plt_sym_val
   (bfd_vma, const asection *, const arelent *);
-extern bfd_boolean _bfd_sparc_elf_merge_private_bfd_data
+extern bool _bfd_sparc_elf_merge_private_bfd_data
   (bfd *, struct bfd_link_info *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-target.h ./bfd/elfxx-target.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-target.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-target.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Target definitions for NN-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,10 +28,10 @@
    one for little-endian machines.   */
 
 #ifndef bfd_elfNN_close_and_cleanup
-#define	bfd_elfNN_close_and_cleanup _bfd_elf_close_and_cleanup
+#define	bfd_elfNN_close_and_cleanup _bfd_generic_close_and_cleanup
 #endif
 #ifndef bfd_elfNN_bfd_free_cached_info
-#define bfd_elfNN_bfd_free_cached_info _bfd_free_cached_info
+#define bfd_elfNN_bfd_free_cached_info _bfd_elf_free_cached_info
 #endif
 #ifndef bfd_elfNN_get_section_contents
 #define bfd_elfNN_get_section_contents _bfd_generic_get_section_contents
@@ -52,6 +52,10 @@
 #ifndef bfd_elfNN_find_nearest_line
 #define bfd_elfNN_find_nearest_line	_bfd_elf_find_nearest_line
 #endif
+#ifndef bfd_elfNN_find_nearest_line_with_alt
+#define bfd_elfNN_find_nearest_line_with_alt \
+  _bfd_elf_find_nearest_line_with_alt
+#endif
 #ifndef bfd_elfNN_find_line
 #define bfd_elfNN_find_line		_bfd_elf_find_line
 #endif
@@ -130,13 +134,13 @@
 #define elf_backend_extern_protected_data 0
 #endif
 #ifndef elf_backend_always_renumber_dynsyms
-#define elf_backend_always_renumber_dynsyms FALSE
+#define elf_backend_always_renumber_dynsyms false
 #endif
 #ifndef elf_backend_linux_prpsinfo32_ugid16
-#define elf_backend_linux_prpsinfo32_ugid16 FALSE
+#define elf_backend_linux_prpsinfo32_ugid16 false
 #endif
 #ifndef elf_backend_linux_prpsinfo64_ugid16
-#define elf_backend_linux_prpsinfo64_ugid16 FALSE
+#define elf_backend_linux_prpsinfo64_ugid16 false
 #endif
 #ifndef elf_backend_stack_align
 #define elf_backend_stack_align 16
@@ -362,6 +366,10 @@
 #define ELF_TARGET_ID	GENERIC_ELF_DATA
 #endif
 
+#ifndef ELF_TARGET_OS
+#define ELF_TARGET_OS	is_normal
+#endif
+
 #ifndef ELF_OSABI
 #define ELF_OSABI ELFOSABI_NONE
 #endif
@@ -375,10 +383,6 @@
 #define ELF_COMMONPAGESIZE ELF_MAXPAGESIZE
 #endif
 
-#ifndef ELF_RELROPAGESIZE
-#define ELF_RELROPAGESIZE ELF_COMMONPAGESIZE
-#endif
-
 #ifndef ELF_MINPAGESIZE
 #define ELF_MINPAGESIZE ELF_COMMONPAGESIZE
 #endif
@@ -386,14 +390,12 @@
 #if ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
 # error ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
 #endif
-#if ELF_RELROPAGESIZE > ELF_MAXPAGESIZE
-# error ELF_RELROPAGESIZE > ELF_MAXPAGESIZE
-#endif
 #if ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
 # error ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
 #endif
-#if ELF_MINPAGESIZE > ELF_RELROPAGESIZE
-# error ELF_MINPAGESIZE > ELF_RELROPAGESIZE
+
+#ifndef ELF_P_ALIGN
+#define ELF_P_ALIGN 0
 #endif
 
 #ifndef ELF_DYNAMIC_SEC_FLAGS
@@ -404,10 +406,10 @@
 #endif
 
 #ifndef elf_backend_collect
-#define elf_backend_collect FALSE
+#define elf_backend_collect false
 #endif
 #ifndef elf_backend_type_change_ok
-#define elf_backend_type_change_ok FALSE
+#define elf_backend_type_change_ok false
 #endif
 
 #ifndef elf_backend_sym_is_global
@@ -470,6 +472,12 @@
 #ifndef elf_backend_check_relocs
 #define elf_backend_check_relocs	0
 #endif
+#ifndef elf_backend_size_relative_relocs
+#define elf_backend_size_relative_relocs 0
+#endif
+#ifndef elf_backend_finish_relative_relocs
+#define elf_backend_finish_relative_relocs 0
+#endif
 #ifndef elf_backend_check_directives
 #define elf_backend_check_directives	0
 #endif
@@ -485,6 +493,9 @@
 #ifndef elf_backend_size_dynamic_sections
 #define elf_backend_size_dynamic_sections 0
 #endif
+#ifndef elf_backend_strip_zero_sized_dynamic_sections
+#define elf_backend_strip_zero_sized_dynamic_sections 0
+#endif
 #ifndef elf_backend_init_index_section
 #define elf_backend_init_index_section _bfd_void_bfd_link
 #endif
@@ -647,12 +658,22 @@
 #ifndef elf_backend_can_make_lsda_relative_eh_frame
 #define elf_backend_can_make_lsda_relative_eh_frame	_bfd_elf_can_make_relative
 #endif
+#ifndef elf_backend_can_make_multiple_eh_frame
+#define elf_backend_can_make_multiple_eh_frame 0
+#endif
 #ifndef elf_backend_encode_eh_address
 #define elf_backend_encode_eh_address		_bfd_elf_encode_eh_address
 #endif
 #ifndef elf_backend_write_section
 #define elf_backend_write_section		NULL
 #endif
+#ifndef elf_backend_add_glibc_version_dependency
+#define elf_backend_add_glibc_version_dependency \
+  _bfd_elf_link_add_dt_relr_dependency
+#endif
+#ifndef elf_backend_elfsym_local_is_section
+#define elf_backend_elfsym_local_is_section	NULL
+#endif
 #ifndef elf_backend_mips_irix_compat
 #define elf_backend_mips_irix_compat		NULL
 #endif
@@ -758,7 +779,7 @@
 #endif
 
 #ifndef elf_backend_copy_special_section_fields
-#define elf_backend_copy_special_section_fields NULL
+#define elf_backend_copy_special_section_fields _bfd_elf_copy_special_section_fields
 #endif
 
 #ifndef elf_backend_compact_eh_encoding
@@ -766,9 +787,25 @@
 #endif
 
 #ifndef elf_backend_cant_unwind_opcode
-#define elf_backend_cant_unwind_opcode 0
+#define elf_backend_cant_unwind_opcode NULL
+#endif
+
+#ifndef elf_backend_init_secondary_reloc_section
+#define elf_backend_init_secondary_reloc_section _bfd_elf_init_secondary_reloc_section
+#endif
+
+#ifndef elf_backend_slurp_secondary_reloc_section
+#define elf_backend_slurp_secondary_reloc_section _bfd_elf_slurp_secondary_reloc_section
 #endif
 
+#ifndef elf_backend_write_secondary_reloc_section
+#define elf_backend_write_secondary_reloc_section _bfd_elf_write_secondary_reloc_section
+#endif
+
+#ifndef elf_backend_symbol_section_index
+#define elf_backend_symbol_section_index NULL
+#endif
+ 
 #ifndef elf_match_priority
 #define elf_match_priority \
   (ELF_ARCH == bfd_arch_unknown ? 2 : ELF_OSABI == ELFOSABI_NONE ? 1 : 0)
@@ -776,16 +813,17 @@
 
 extern const struct elf_size_info _bfd_elfNN_size_info;
 
-static struct elf_backend_data elfNN_bed =
+static const struct elf_backend_data elfNN_bed =
 {
   ELF_ARCH,			/* arch */
   ELF_TARGET_ID,		/* target_id */
+  ELF_TARGET_OS,		/* target_os */
   ELF_MACHINE_CODE,		/* elf_machine_code */
   ELF_OSABI,			/* elf_osabi  */
   ELF_MAXPAGESIZE,		/* maxpagesize */
   ELF_MINPAGESIZE,		/* minpagesize */
   ELF_COMMONPAGESIZE,		/* commonpagesize */
-  ELF_RELROPAGESIZE,		/* commonpagesize to use with -z relro */
+  ELF_P_ALIGN,			/* p_align */
   ELF_DYNAMIC_SEC_FLAGS,	/* dynamic_sec_flags */
   elf_backend_arch_data,
   elf_info_to_howto,
@@ -810,11 +848,14 @@ static struct elf_backend_data elfNN_bed
   elf_backend_omit_section_dynsym,
   elf_backend_relocs_compatible,
   elf_backend_check_relocs,
+  elf_backend_size_relative_relocs,
+  elf_backend_finish_relative_relocs,
   elf_backend_check_directives,
   elf_backend_notice_as_needed,
   elf_backend_adjust_dynamic_symbol,
   elf_backend_always_size_sections,
   elf_backend_size_dynamic_sections,
+  elf_backend_strip_zero_sized_dynamic_sections,
   elf_backend_init_index_section,
   elf_backend_relocate_section,
   elf_backend_finish_dynamic_symbol,
@@ -857,8 +898,11 @@ static struct elf_backend_data elfNN_bed
   elf_backend_eh_frame_address_size,
   elf_backend_can_make_relative_eh_frame,
   elf_backend_can_make_lsda_relative_eh_frame,
+  elf_backend_can_make_multiple_eh_frame,
   elf_backend_encode_eh_address,
   elf_backend_write_section,
+  elf_backend_add_glibc_version_dependency,
+  elf_backend_elfsym_local_is_section,
   elf_backend_mips_irix_compat,
   elf_backend_mips_rtype_to_howto,
   elf_backend_ecoff_debug_swap,
@@ -895,6 +939,10 @@ static struct elf_backend_data elfNN_bed
   elf_backend_fixup_gnu_properties,
   elf_backend_compact_eh_encoding,
   elf_backend_cant_unwind_opcode,
+  elf_backend_symbol_section_index,
+  elf_backend_init_secondary_reloc_section,
+  elf_backend_slurp_secondary_reloc_section,
+  elf_backend_write_secondary_reloc_section,
   elf_backend_static_tls_alignment,
   elf_backend_stack_align,
   elf_backend_strtab_flags,
@@ -950,7 +998,8 @@ const bfd_target TARGET_BIG_SYM =
   /* object_flags: mask of all file flags */
   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
    | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS
-   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON),
+   | BFD_COMPRESS_GABI | BFD_COMPRESS_ZSTD | BFD_CONVERT_ELF_COMMON
+   | BFD_USE_ELF_STT_COMMON | BFD_NO_SECTION_HEADER),
 
   /* section_flags: mask of all section flags */
   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
@@ -974,6 +1023,9 @@ const bfd_target TARGET_BIG_SYM =
 
   elf_match_priority,
 
+  /* TRUE if unused section symbols should be kept.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS,
+
   /* Routines to byte-swap various sized integers from the data sections */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
     bfd_getb32, bfd_getb_signed_32, bfd_putb32,
@@ -1051,7 +1103,8 @@ const bfd_target TARGET_LITTLE_SYM =
   /* object_flags: mask of all file flags */
   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
    | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS
-   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON),
+   | BFD_COMPRESS_GABI | BFD_COMPRESS_ZSTD | BFD_CONVERT_ELF_COMMON
+   | BFD_USE_ELF_STT_COMMON | BFD_NO_SECTION_HEADER),
 
   /* section_flags: mask of all section flags */
   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
@@ -1075,6 +1128,9 @@ const bfd_target TARGET_LITTLE_SYM =
 
   elf_match_priority,
 
+  /* TRUE if unused section symbols should be kept.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS,
+
   /* Routines to byte-swap various sized integers from the data sections */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-tilegx.c ./bfd/elfxx-tilegx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-tilegx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-tilegx.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILE-Gx-specific support for ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -72,372 +72,372 @@ static reloc_howto_type tilegx_elf_howto
   /* This reloc does nothing.  */
   HOWTO (R_TILEGX_NONE,	/* type */
 	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #ifdef BFD64
   /* A 64 bit absolute relocation.  */
   HOWTO (R_TILEGX_64,	/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_64",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffffffffffffULL,	/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #endif
   /* A 32 bit absolute relocation.  */
   HOWTO (R_TILEGX_32,	/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_32",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_TILEGX_16,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_16",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* An 8 bit absolute relocation.  */
   HOWTO (R_TILEGX_8,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_8",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 #ifdef BFD64
   /* A 64 bit pc-relative relocation.  */
   HOWTO (R_TILEGX_64_PCREL,/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_32_PCREL", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffffffffffffULL,	/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 #endif
   /* A 32 bit pc-relative relocation.  */
   HOWTO (R_TILEGX_32_PCREL,/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_32_PCREL", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit pc-relative relocation.  */
   HOWTO (R_TILEGX_16_PCREL,/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* An 8 bit pc-relative relocation.  */
   HOWTO (R_TILEGX_8_PCREL,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 1,			/* size */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_8_PCREL",/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   /* A 16 bit relocation without overflow.  */
   HOWTO (R_TILEGX_HW0,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_HW0",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit relocation without overflow.  */
   HOWTO (R_TILEGX_HW1,	/* type */
 	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_HW1",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit relocation without overflow.  */
   HOWTO (R_TILEGX_HW2,	/* type */
 	 32,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_HW2",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit relocation without overflow.  */
   HOWTO (R_TILEGX_HW3,	/* type */
 	 48,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_HW3",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit relocation with overflow.  */
   HOWTO (R_TILEGX_HW0_LAST,	/* type */
 	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_HW0_LAST",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit relocation with overflow.  */
   HOWTO (R_TILEGX_HW1_LAST,	/* type */
 	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_HW1_LAST",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* A 16 bit relocation with overflow.  */
   HOWTO (R_TILEGX_HW2_LAST,	/* type */
 	 32,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 2,			/* size */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_HW2_LAST",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_TILEGX_COPY,		/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_COPY",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEGX_GLOB_DAT,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEGX_JMP_SLOT,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEGX_RELATIVE,	/* type */
 	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_TILEGX_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEGX_BROFF_X1, /* type */
 	 TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 17,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_TILEGX_BROFF_X1", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEGX_JUMPOFF_X1, /* type */
 	 TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 27,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_TILEGX_JUMPOFF_X1", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_TILEGX_JUMPOFF_X1_PLT, /* type */
 	 TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 27,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_TILEGX_JUMPOFF_X1_PLT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
 #define TILEGX_IMM_HOWTO(name, size, bitsize) \
-  HOWTO (name, 0, size, bitsize, FALSE, 0, \
+  HOWTO (name, 0, size, bitsize, false, 0, \
 	 complain_overflow_signed, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, -1, FALSE)
+	 #name, false, 0, -1, false)
 
 #define TILEGX_UIMM_HOWTO(name, size, bitsize) \
-  HOWTO (name, 0, size, bitsize, FALSE, 0, \
+  HOWTO (name, 0, size, bitsize, false, 0, \
 	 complain_overflow_unsigned, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, -1, FALSE)
+	 #name, false, 0, -1, false)
 
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0, 0, 8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0, 0, 8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1, 0, 8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1, 0, 8),
-  TILEGX_IMM_HOWTO(R_TILEGX_DEST_IMM8_X1, 0, 8),
-
-  TILEGX_UIMM_HOWTO(R_TILEGX_MT_IMM14_X1, 1, 14),
-  TILEGX_UIMM_HOWTO(R_TILEGX_MF_IMM14_X1, 1, 14),
-
-  TILEGX_UIMM_HOWTO(R_TILEGX_MMSTART_X0, 0, 6),
-  TILEGX_UIMM_HOWTO(R_TILEGX_MMEND_X0,   0, 6),
-
-  TILEGX_UIMM_HOWTO(R_TILEGX_SHAMT_X0, 0, 6),
-  TILEGX_UIMM_HOWTO(R_TILEGX_SHAMT_X1, 0, 6),
-  TILEGX_UIMM_HOWTO(R_TILEGX_SHAMT_Y0, 0, 6),
-  TILEGX_UIMM_HOWTO(R_TILEGX_SHAMT_Y1, 0, 6),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0, 1, 8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0, 1, 8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1, 1, 8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1, 1, 8),
+  TILEGX_IMM_HOWTO(R_TILEGX_DEST_IMM8_X1, 1, 8),
+
+  TILEGX_UIMM_HOWTO(R_TILEGX_MT_IMM14_X1, 2, 14),
+  TILEGX_UIMM_HOWTO(R_TILEGX_MF_IMM14_X1, 2, 14),
+
+  TILEGX_UIMM_HOWTO(R_TILEGX_MMSTART_X0, 1, 6),
+  TILEGX_UIMM_HOWTO(R_TILEGX_MMEND_X0,   1, 6),
+
+  TILEGX_UIMM_HOWTO(R_TILEGX_SHAMT_X0, 1, 6),
+  TILEGX_UIMM_HOWTO(R_TILEGX_SHAMT_X1, 1, 6),
+  TILEGX_UIMM_HOWTO(R_TILEGX_SHAMT_Y0, 1, 6),
+  TILEGX_UIMM_HOWTO(R_TILEGX_SHAMT_Y1, 1, 6),
 
 #define TILEGX_IMM16_HOWTO(name, rshift) \
-  HOWTO (name, rshift, 1, 16, FALSE, 0, \
+  HOWTO (name, rshift, 2, 16, false, 0, \
 	 complain_overflow_dont, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, 0xffff, FALSE)
+	 #name, false, 0, 0xffff, false)
 
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW0, 0),
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW0, 0),
@@ -449,9 +449,9 @@ static reloc_howto_type tilegx_elf_howto
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW3, 48),
 
 #define TILEGX_IMM16_HOWTO_LAST(name, rshift) \
-  HOWTO (name, rshift, 1, 16, FALSE, 0, \
+  HOWTO (name, rshift, 2, 16, false, 0, \
 	 complain_overflow_signed, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, 0xffff, FALSE)
+	 #name, false, 0, 0xffff, false)
 
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW0_LAST, 0),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW0_LAST, 0),
@@ -463,9 +463,9 @@ static reloc_howto_type tilegx_elf_howto
   /* PC-relative offsets. */
 
 #define TILEGX_IMM16_HOWTO_PCREL(name, rshift) \
-  HOWTO (name, rshift, 1, 16, TRUE, 0, \
+  HOWTO (name, rshift, 2, 16, true, 0, \
 	 complain_overflow_dont, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, 0xffff, TRUE)
+	 #name, false, 0, 0xffff, true)
 
   TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X0_HW0_PCREL, 0),
   TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X1_HW0_PCREL, 0),
@@ -477,9 +477,9 @@ static reloc_howto_type tilegx_elf_howto
   TILEGX_IMM16_HOWTO_PCREL (R_TILEGX_IMM16_X1_HW3_PCREL, 48),
 
 #define TILEGX_IMM16_HOWTO_LAST_PCREL(name, rshift) \
-  HOWTO (name, rshift, 1, 16, TRUE, 0, \
+  HOWTO (name, rshift, 2, 16, true, 0, \
 	 complain_overflow_signed, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, 0xffff, TRUE)
+	 #name, false, 0, 0xffff, true)
 
   TILEGX_IMM16_HOWTO_LAST_PCREL (R_TILEGX_IMM16_X0_HW0_LAST_PCREL,  0),
   TILEGX_IMM16_HOWTO_LAST_PCREL (R_TILEGX_IMM16_X1_HW0_LAST_PCREL,  0),
@@ -524,9 +524,9 @@ static reloc_howto_type tilegx_elf_howto
   EMPTY_HOWTO (91),
 
 #define TILEGX_IMM16_HOWTO_TLS_IE(name, rshift) \
-  HOWTO (name, rshift, 1, 16, FALSE, 0, \
+  HOWTO (name, rshift, 2, 16, false, 0, \
 	 complain_overflow_dont, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, 0xffff, TRUE)
+	 #name, false, 0, 0xffff, true)
 
   TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW0_TLS_IE, 0),
   TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW0_TLS_IE, 0),
@@ -539,9 +539,9 @@ static reloc_howto_type tilegx_elf_howto
   TILEGX_IMM16_HOWTO_LAST_PCREL (R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL, 32),
 
 #define TILEGX_IMM16_HOWTO_LAST_TLS_IE(name, rshift) \
-  HOWTO (name, rshift, 1, 16, FALSE, 0, \
+  HOWTO (name, rshift, 2, 16, false, 0, \
 	 complain_overflow_signed, bfd_elf_generic_reloc, \
-	 #name, FALSE, 0, 0xffff, TRUE)
+	 #name, false, 0, 0xffff, true)
 
   TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE, 0),
   TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE, 0),
@@ -550,49 +550,49 @@ static reloc_howto_type tilegx_elf_howto
   EMPTY_HOWTO (104),
   EMPTY_HOWTO (105),
 
-  HOWTO(R_TILEGX_TLS_DTPMOD64, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+  HOWTO(R_TILEGX_TLS_DTPMOD64, 0, 0, 0, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_TILEGX_TLS_DTPMOD64",
-	FALSE, 0, 0, TRUE),
-  HOWTO(R_TILEGX_TLS_DTPOFF64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
+	false, 0, 0, true),
+  HOWTO(R_TILEGX_TLS_DTPOFF64, 0, 8, 64, false, 0, complain_overflow_bitfield,
 	bfd_elf_generic_reloc, "R_TILEGX_TLS_DTPOFF64",
-	FALSE, 0, -1, TRUE),
-  HOWTO(R_TILEGX_TLS_TPOFF64, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+	false, 0, -1, true),
+  HOWTO(R_TILEGX_TLS_TPOFF64, 0, 0, 0, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_TILEGX_TLS_TPOFF64",
-	FALSE, 0, 0, TRUE),
+	false, 0, 0, true),
 
-  HOWTO(R_TILEGX_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+  HOWTO(R_TILEGX_TLS_DTPMOD32, 0, 0, 0, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_TILEGX_TLS_DTPMOD32",
-	FALSE, 0, 0, TRUE),
-  HOWTO(R_TILEGX_TLS_DTPOFF32, 0, 4, 32, FALSE, 0, complain_overflow_bitfield,
+	false, 0, 0, true),
+  HOWTO(R_TILEGX_TLS_DTPOFF32, 0, 8, 32, false, 0, complain_overflow_bitfield,
 	bfd_elf_generic_reloc, "R_TILEGX_TLS_DTPOFF32",
-	FALSE, 0, -1, TRUE),
-  HOWTO(R_TILEGX_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+	false, 0, -1, true),
+  HOWTO(R_TILEGX_TLS_TPOFF32, 0, 0, 0, false, 0, complain_overflow_dont,
 	bfd_elf_generic_reloc, "R_TILEGX_TLS_TPOFF32",
-	FALSE, 0, 0, TRUE),
+	false, 0, 0, true),
 
   HOWTO (R_TILEGX_TLS_GD_CALL, /* type */
 	 TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 4,			/* size */
 	 27,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed,/* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_TILEGX_TLS_GD_CALL", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 -1,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0_TLS_GD_ADD,  0,  8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1_TLS_GD_ADD,  0,  8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0_TLS_GD_ADD,  0,  8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1_TLS_GD_ADD,  0,  8),
-  TILEGX_IMM_HOWTO(R_TILEGX_TLS_IE_LOAD, 0,  8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0_TLS_ADD,  0,  8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1_TLS_ADD,  0,  8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0_TLS_ADD,  0,  8),
-  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1_TLS_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0_TLS_GD_ADD,  1,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1_TLS_GD_ADD,  1,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0_TLS_GD_ADD,  1,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1_TLS_GD_ADD,  1,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_TLS_IE_LOAD, 1,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0_TLS_ADD,  1,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1_TLS_ADD,  1,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0_TLS_ADD,  1,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1_TLS_ADD,  1,  8),
 };
 
 static reloc_howto_type tilegx_elf_howto_table2 [] =
@@ -600,32 +600,32 @@ static reloc_howto_type tilegx_elf_howto
   /* GNU extension to record C++ vtable hierarchy */
   HOWTO (R_TILEGX_GNU_VTINHERIT, /* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 NULL,			/* special_function */
 	 "R_TILEGX_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* GNU extension to record C++ vtable member usage */
   HOWTO (R_TILEGX_GNU_VTENTRY,	   /* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* size */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
 	 "R_TILEGX_GNU_VTENTRY",   /* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 };
 
@@ -785,9 +785,6 @@ struct tilegx_elf_link_hash_entry
 {
   struct elf_link_hash_entry elf;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
 #define GOT_UNKNOWN     0
 #define GOT_NORMAL      1
 #define GOT_TLS_GD      2
@@ -837,17 +834,15 @@ struct tilegx_elf_link_hash_table
 
   /* Whether LE transition has been disabled for some of the
      sections.  */
-  bfd_boolean disable_le_transition;
-
-  /* Small local sym to section mapping cache.  */
-  struct sym_cache sym_cache;
+  bool disable_le_transition;
 };
 
 
 /* Get the Tile ELF linker hash table from a link_info structure.  */
 #define tilegx_elf_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == TILEGX_ELF_DATA ? ((struct tilegx_elf_link_hash_table *) ((p)->hash)) : NULL)
+  ((is_elf_hash_table ((p)->hash)					\
+    && elf_hash_table_id (elf_hash_table (p)) == TILEGX_ELF_DATA)	\
+   ? (struct tilegx_elf_link_hash_table *) (p)->hash : NULL)
 
 #ifdef BFD64
 static bfd_vma
@@ -932,7 +927,7 @@ tilegx_reloc_name_lookup (bfd *abfd ATTR
   return NULL;
 }
 
-bfd_boolean
+bool
 tilegx_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
 			   arelent *cache_ptr,
 			   Elf_Internal_Rela *dst)
@@ -952,9 +947,9 @@ tilegx_info_to_howto_rela (bfd *abfd ATT
       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
 			  abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 typedef tilegx_bundle_bits (*tilegx_create_func)(int);
@@ -1280,7 +1275,7 @@ tilegx_plt_entry_build (bfd *output_bfd,
   bfd_signed_vma dist_got0 = dist_got_entry - got_offset;
 
   /* Check whether we can use the short plt entry with 16-bit offset.  */
-  bfd_boolean short_plt_entry =
+  bool short_plt_entry =
     (dist_got_entry <= 0x7fff && dist_got0 >= -0x8000);
 
   const tilegx_bundle_bits *plt_entry = (tilegx_bundle_bits *)
@@ -1356,7 +1351,6 @@ link_hash_newfunc (struct bfd_hash_entry
       struct tilegx_elf_link_hash_entry *eh;
 
       eh = (struct tilegx_elf_link_hash_entry *) entry;
-      eh->dyn_relocs = NULL;
       eh->tls_type = GOT_UNKNOWN;
     }
 
@@ -1369,7 +1363,7 @@ struct bfd_link_hash_table *
 tilegx_elf_link_hash_table_create (bfd *abfd)
 {
   struct tilegx_elf_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct tilegx_elf_link_hash_table);
+  size_t amt = sizeof (struct tilegx_elf_link_hash_table);
 
   ret = (struct tilegx_elf_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -1417,7 +1411,7 @@ tilegx_elf_link_hash_table_create (bfd *
 
 /* Create the .got section.  */
 
-static bfd_boolean
+static bool
 tilegx_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
 {
   flagword flags;
@@ -1428,7 +1422,7 @@ tilegx_elf_create_got_section (bfd *abfd
 
   /* This function may be called more than once.  */
   if (htab->sgot != NULL)
-    return TRUE;
+    return true;
 
   flags = bed->dynamic_sec_flags;
 
@@ -1439,13 +1433,13 @@ tilegx_elf_create_got_section (bfd *abfd
 					   | SEC_READONLY));
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->srelgot = s;
 
   s = s_got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (s, bed->s->log_file_align))
-    return FALSE;
+    return false;
   htab->sgot = s;
 
   /* The first bit of the global offset table is the header.  */
@@ -1456,7 +1450,7 @@ tilegx_elf_create_got_section (bfd *abfd
       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
-	return FALSE;
+	return false;
       htab->sgotplt = s;
 
       /* Reserve room for the header.  */
@@ -1473,22 +1467,22 @@ tilegx_elf_create_got_section (bfd *abfd
 				       "_GLOBAL_OFFSET_TABLE_");
       elf_hash_table (info)->hgot = h;
       if (h == NULL)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and
    .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
    hash table.  */
 
-bfd_boolean
+bool
 tilegx_elf_create_dynamic_sections (bfd *dynobj,
 				    struct bfd_link_info *info)
 {
   if (!tilegx_elf_create_got_section (dynobj, info))
-    return FALSE;
+    return false;
 
   return _bfd_elf_create_dynamic_sections (dynobj, info);
 }
@@ -1505,37 +1499,6 @@ tilegx_elf_copy_indirect_symbol (struct
   edir = (struct tilegx_elf_link_hash_entry *) dir;
   eind = (struct tilegx_elf_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect
       && dir->got.refcount <= 0)
     {
@@ -1611,7 +1574,7 @@ tilegx_tls_translate_to_ie (int r_type)
 
 static int
 tilegx_elf_tls_transition (struct bfd_link_info *info, int r_type,
-			   int is_local, bfd_boolean disable_le_transition)
+			   int is_local, bool disable_le_transition)
 {
   if (!bfd_link_executable (info))
     return r_type;
@@ -1626,7 +1589,7 @@ tilegx_elf_tls_transition (struct bfd_li
    allocate space in the global offset table or procedure linkage
    table.  */
 
-bfd_boolean
+bool
 tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			 asection *sec, const Elf_Internal_Rela *relocs)
 {
@@ -1637,10 +1600,10 @@ tilegx_elf_check_relocs (bfd *abfd, stru
   const Elf_Internal_Rela *rel_end;
   asection *sreloc;
   int num_relocs;
-  bfd_boolean has_tls_gd_or_ie = FALSE, has_tls_add = FALSE;
+  bool has_tls_gd_or_ie = false, has_tls_add = false;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   htab = tilegx_elf_hash_table (info);
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -1669,13 +1632,13 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 	{
 	case R_TILEGX_TLS_GD_CALL:
 	case R_TILEGX_TLS_IE_LOAD:
-	  has_tls_gd_or_ie = TRUE;
+	  has_tls_gd_or_ie = true;
 	  break;
 	case R_TILEGX_IMM8_X0_TLS_ADD:
 	case R_TILEGX_IMM8_Y0_TLS_ADD:
 	case R_TILEGX_IMM8_X1_TLS_ADD:
 	case R_TILEGX_IMM8_Y1_TLS_ADD:
-	  has_tls_add = TRUE;
+	  has_tls_add = true;
 	  break;
 	}
     }
@@ -1698,7 +1661,7 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 	  /* xgettext:c-format */
 	  _bfd_error_handler (_("%pB: bad symbol index: %d"),
 			      abfd, r_symndx);
-	  return FALSE;
+	  return false;
 	}
 
       if (r_symndx < symtab_hdr->sh_info)
@@ -1780,7 +1743,7 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 		    local_got_refcounts = ((bfd_signed_vma *)
 					   bfd_zalloc (abfd, size));
 		    if (local_got_refcounts == NULL)
-		      return FALSE;
+		      return false;
 		    elf_local_got_refcounts (abfd) = local_got_refcounts;
 		    _bfd_tilegx_elf_local_got_tls_type (abfd)
 		      = (char *) (local_got_refcounts + symtab_hdr->sh_info);
@@ -1803,7 +1766,7 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 		      /* xgettext:c-format */
 		      (_("%pB: `%s' accessed both as normal and thread local symbol"),
 		       abfd, h ? h->root.root.string : "<local>");
-		    return FALSE;
+		    return false;
 		  }
 	      }
 
@@ -1819,7 +1782,7 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 	  if (htab->elf.sgot == NULL)
 	    {
 	      if (!tilegx_elf_create_got_section (htab->elf.dynobj, info))
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -1832,9 +1795,9 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 	      if (! _bfd_generic_link_add_one_symbol (info, abfd,
 						      "__tls_get_addr", 0,
 						      bfd_und_section_ptr, 0,
-						      NULL, FALSE, FALSE,
+						      NULL, false, false,
 						      &bh))
-		return FALSE;
+		return false;
 	      h = (struct elf_link_hash_entry *) bh;
 	    }
 	  else
@@ -1994,17 +1957,16 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
 		    (sec, htab->elf.dynobj, htab->word_align_power, abfd,
-		     /*rela?*/ TRUE);
+		     /*rela?*/ true);
 
 		  if (sreloc == NULL)
-		    return FALSE;
+		    return false;
 		}
 
 	      /* If this is a global symbol, we count the number of
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
-		head =
-		  &((struct tilegx_elf_link_hash_entry *) h)->dyn_relocs;
+		head = &h->dyn_relocs;
 	      else
 		{
 		  /* Track dynamic relocs needed for local syms too.
@@ -2015,10 +1977,10 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 		  void *vpp;
 		  Elf_Internal_Sym *isym;
 
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+		  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
 						abfd, r_symndx);
 		  if (isym == NULL)
-		    return FALSE;
+		    return false;
 
 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 		  if (s == NULL)
@@ -2031,11 +1993,11 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
-		  bfd_size_type amt = sizeof *p;
+		  size_t amt = sizeof *p;
 		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->elf.dynobj, amt));
 		  if (p == NULL)
-		    return FALSE;
+		    return false;
 		  p->next = *head;
 		  *head = p;
 		  p->sec = sec;
@@ -2052,12 +2014,12 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 
 	case R_TILEGX_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_TILEGX_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -2065,7 +2027,7 @@ tilegx_elf_check_relocs (bfd *abfd, stru
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -2104,8 +2066,8 @@ tilegx_elf_gc_mark_hook (asection *sec,
 	  if (! _bfd_generic_link_add_one_symbol (info, sec->owner,
 						  "__tls_get_addr", 0,
 						  bfd_und_section_ptr,
-						  0, NULL, FALSE,
-						  FALSE, &bh))
+						  0, NULL, false,
+						  false, &bh))
 	    return NULL;
 	  h = (struct elf_link_hash_entry *) bh;
 	  BFD_ASSERT (h != NULL);
@@ -2119,30 +2081,13 @@ tilegx_elf_gc_mark_hook (asection *sec,
   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
 }
 
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = tilegx_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
    understand.  */
 
-bfd_boolean
+bool
 tilegx_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				  struct elf_link_hash_entry *h)
 {
@@ -2183,7 +2128,7 @@ tilegx_elf_adjust_dynamic_symbol (struct
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) -1;
@@ -2197,7 +2142,7 @@ tilegx_elf_adjust_dynamic_symbol (struct
       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
       h->root.u.def.section = def->root.u.def.section;
       h->root.u.def.value = def->root.u.def.value;
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -2208,26 +2153,26 @@ tilegx_elf_adjust_dynamic_symbol (struct
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (bfd_link_pic (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!h->non_got_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* If we don't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (!readonly_dynrelocs (h))
+  if (!_bfd_elf_readonly_dynrelocs (h))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -2266,16 +2211,15 @@ tilegx_elf_adjust_dynamic_symbol (struct
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
   struct tilegx_elf_link_hash_table *htab;
-  struct tilegx_elf_link_hash_entry *eh;
   struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   info = (struct bfd_link_info *) inf;
   htab = tilegx_elf_hash_table (info);
@@ -2290,7 +2234,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
@@ -2349,7 +2293,7 @@ allocate_dynrelocs (struct elf_link_hash
   else if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = tilegx_elf_hash_entry(h)->tls_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -2358,7 +2302,7 @@ allocate_dynrelocs (struct elf_link_hash
 	  && !h->forced_local)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->elf.sgot;
@@ -2380,9 +2324,8 @@ allocate_dynrelocs (struct elf_link_hash
   else
     h->got.offset = (bfd_vma) -1;
 
-  eh = (struct tilegx_elf_link_hash_entry *) h;
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -2396,7 +2339,7 @@ allocate_dynrelocs (struct elf_link_hash
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -2409,12 +2352,12 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility.  */
-      if (eh->dyn_relocs != NULL
+      if (h->dyn_relocs != NULL
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
-	    eh->dyn_relocs = NULL;
+	    h->dyn_relocs = NULL;
 
 	  /* Make sure undefined weak symbols are output as a dynamic
 	     symbol in PIEs.  */
@@ -2422,7 +2365,7 @@ allocate_dynrelocs (struct elf_link_hash
 		   && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -2445,7 +2388,7 @@ allocate_dynrelocs (struct elf_link_hash
 	      && !h->forced_local)
 	    {
 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 
 	  /* If that succeeded, we know we'll be keeping all the
@@ -2454,52 +2397,25 @@ allocate_dynrelocs (struct elf_link_hash
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       sreloc->size += p->count * TILEGX_ELF_RELA_BYTES (htab);
     }
 
-  return TRUE;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) info_p;
-
-      info->flags |= DF_TEXTREL;
-      info->callbacks->minfo
-	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
-	 sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Return true if the dynamic symbol for a given section should be
    omitted when creating a shared library.  */
 
-bfd_boolean
+bool
 tilegx_elf_omit_section_dynsym (bfd *output_bfd,
 				struct bfd_link_info *info,
 				asection *p)
@@ -2508,12 +2424,12 @@ tilegx_elf_omit_section_dynsym (bfd *out
      against the _GLOBAL_OFFSET_TABLE_ symbol emitted in PIC mode
      can be turned into relocations against the .got symbol.  */
   if (strcmp (p->name, ".got") == 0)
-    return FALSE;
+    return false;
 
   return _bfd_elf_omit_section_dynsym_default (output_bfd, info, p);
 }
 
-bfd_boolean
+bool
 tilegx_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 				  struct bfd_link_info *info)
 {
@@ -2629,7 +2545,7 @@ tilegx_elf_size_dynamic_sections (bfd *o
       struct elf_link_hash_entry *got;
       got = elf_link_hash_lookup (elf_hash_table (info),
 				  "_GLOBAL_OFFSET_TABLE_",
-				  FALSE, FALSE, FALSE);
+				  false, false, false);
 
       /* Don't allocate .got.plt section if there are no GOT nor PLT
 	 entries and there is no refeence to _GLOBAL_OFFSET_TABLE_.  */
@@ -2662,7 +2578,7 @@ tilegx_elf_size_dynamic_sections (bfd *o
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
-      else if (strncmp (s->name, ".rela", 5) == 0)
+      else if (startswith (s->name, ".rela"))
 	{
 	  if (s->size != 0)
 	    {
@@ -2700,53 +2616,10 @@ tilegx_elf_size_dynamic_sections (bfd *o
 	 at the beginning, and we don't want garbage.  */
       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
-  if (elf_hash_table (info)->dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in tilegx_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->elf.srelplt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (!add_dynamic_entry (DT_RELA, 0)
-	  || !add_dynamic_entry (DT_RELASZ, 0)
-	  || !add_dynamic_entry (DT_RELAENT, TILEGX_ELF_RELA_BYTES (htab)))
-	return FALSE;
-
-      /* If any dynamic relocs apply to a read-only section,
-	 then we need a DT_TEXTREL entry.  */
-      if ((info->flags & DF_TEXTREL) == 0)
-	elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
-
-      if (info->flags & DF_TEXTREL)
-	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, true);
 }
 
 /* Return the base VMA address which should be subtracted from real addresses
@@ -2923,7 +2796,7 @@ static const bfd_byte *insn_addx_Y0Y1 =
    section, which means that the addend must be adjusted
    accordingly.  */
 
-bfd_boolean
+int
 tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 			     bfd *input_bfd, asection *input_section,
 			     bfd_byte *contents, Elf_Internal_Rela *relocs,
@@ -2959,7 +2832,7 @@ tilegx_elf_relocate_section (bfd *output
   for (; rel < relend; rel++)
     {
       int r_type, tls_type;
-      bfd_boolean is_tls_iele, is_tls_le;
+      bool is_tls_iele, is_tls_le;
       reloc_howto_type *howto;
       unsigned long r_symndx;
       struct elf_link_hash_entry *h;
@@ -2970,9 +2843,9 @@ tilegx_elf_relocate_section (bfd *output
       bfd_reloc_status_type r;
       const char *name;
       bfd_vma off;
-      bfd_boolean is_plt = FALSE;
-      bfd_boolean resolved_to_zero;
-      bfd_boolean unresolved_reloc;
+      bool is_plt = false;
+      bool resolved_to_zero;
+      bool unresolved_reloc;
 
       r_type = TILEGX_ELF_R_TYPE (rel->r_info);
       if (r_type == R_TILEGX_GNU_VTINHERIT
@@ -2989,7 +2862,7 @@ tilegx_elf_relocate_section (bfd *output
       h = NULL;
       sym = NULL;
       sec = NULL;
-      unresolved_reloc = FALSE;
+      unresolved_reloc = false;
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  sym = local_syms + r_symndx;
@@ -2998,8 +2871,8 @@ tilegx_elf_relocate_section (bfd *output
 	}
       else
 	{
-	  bfd_boolean warned ATTRIBUTE_UNUSED;
-	  bfd_boolean ignored ATTRIBUTE_UNUSED;
+	  bool warned ATTRIBUTE_UNUSED;
+	  bool ignored ATTRIBUTE_UNUSED;
 
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
@@ -3080,8 +2953,8 @@ tilegx_elf_relocate_section (bfd *output
 
 	      /* GD -> GD */
 	      h = (struct elf_link_hash_entry *)
-		bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
-				      FALSE, TRUE);
+		bfd_link_hash_lookup (info->hash, "__tls_get_addr", false,
+				      false, true);
 	      BFD_ASSERT (h != NULL);
 	      r_type = R_TILEGX_JUMPOFF_X1_PLT;
 	      howto = tilegx_elf_howto_table + r_type;
@@ -3091,10 +2964,10 @@ tilegx_elf_relocate_section (bfd *output
 		   || r_type ==  R_TILEGX_IMM8_Y0_TLS_ADD
 		   || r_type ==  R_TILEGX_IMM8_Y1_TLS_ADD)
 	    {
-	      bfd_boolean is_pipe0 =
+	      bool is_pipe0 =
 		(r_type == R_TILEGX_IMM8_X0_TLS_ADD
 		 || r_type ==  R_TILEGX_IMM8_Y0_TLS_ADD);
-	      bfd_boolean is_X0X1 =
+	      bool is_X0X1 =
 		(r_type == R_TILEGX_IMM8_X0_TLS_ADD
 		 || r_type ==  R_TILEGX_IMM8_X1_TLS_ADD);
 	      int dest_begin = is_pipe0 ? 0 : 31;
@@ -3162,7 +3035,7 @@ tilegx_elf_relocate_section (bfd *output
 	    {
 	      const bfd_byte *mask = NULL;
 	      const bfd_byte *add_insn = NULL;
-	      bfd_boolean is_64bit = ABI_64_P (output_bfd);
+	      bool is_64bit = ABI_64_P (output_bfd);
 
 	      switch (r_type)
 		{
@@ -3243,7 +3116,7 @@ tilegx_elf_relocate_section (bfd *output
 
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn;
+	      bool dyn;
 
 	      off = h->got.offset;
 	      BFD_ASSERT (off != (bfd_vma) -1);
@@ -3277,7 +3150,7 @@ tilegx_elf_relocate_section (bfd *output
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -3351,7 +3224,7 @@ tilegx_elf_relocate_section (bfd *output
 	  relocation = (htab->elf.splt->output_section->vma
 			+ htab->elf.splt->output_offset
 			+ h->plt.offset);
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  break;
 
 	case R_TILEGX_64_PCREL:
@@ -3440,7 +3313,7 @@ tilegx_elf_relocate_section (bfd *output
 		      || h->root.type == bfd_link_hash_undefined)))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip, relocate = FALSE;
+	      bool skip, relocate = false;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
@@ -3448,15 +3321,15 @@ tilegx_elf_relocate_section (bfd *output
 
 	      BFD_ASSERT (sreloc != NULL);
 
-	      skip = FALSE;
+	      skip = false;
 
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE, relocate = TRUE;
+		skip = true, relocate = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 
@@ -3472,7 +3345,7 @@ tilegx_elf_relocate_section (bfd *output
 		     FIXME: Add code tracking needed dynamic relocs as
 		     e.g. i386 has.  */
 		  if (h->dynindx == -1)
-		    skip = TRUE, relocate = TRUE;
+		    skip = true, relocate = true;
 		  break;
 		}
 
@@ -3513,7 +3386,7 @@ tilegx_elf_relocate_section (bfd *output
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -3542,7 +3415,7 @@ tilegx_elf_relocate_section (bfd *output
 				(_("%pB: probably compiled without -fPIC?"),
 				 input_bfd);
 			      bfd_set_error (bfd_error_bad_value);
-			      return FALSE;
+			      return false;
 			    }
 			}
 
@@ -3569,17 +3442,17 @@ tilegx_elf_relocate_section (bfd *output
 	  if (!bfd_link_executable (info))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip;
+	      bool skip;
 
 	      BFD_ASSERT (sreloc != NULL);
-	      skip = FALSE;
+	      skip = false;
 	      outrel.r_offset =
 		_bfd_elf_section_offset (output_bfd, info, input_section,
 					 rel->r_offset);
 	      if (outrel.r_offset == (bfd_vma) -1)
-		skip = TRUE;
+		skip = true;
 	      else if (outrel.r_offset == (bfd_vma) -2)
-		skip = TRUE;
+		skip = true;
 	      outrel.r_offset += (input_section->output_section->vma
 				  + input_section->output_offset);
 	      if (skip)
@@ -3661,14 +3534,14 @@ tilegx_elf_relocate_section (bfd *output
 	    {
 	      Elf_Internal_Rela outrel;
 	      int indx = 0;
-	      bfd_boolean need_relocs = FALSE;
+	      bool need_relocs = false;
 
 	      if (htab->elf.srelgot == NULL)
 		abort ();
 
 	      if (h != NULL)
 	      {
-		bfd_boolean dyn;
+		bool dyn;
 		dyn = htab->elf.dynamic_sections_created;
 
 		if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
@@ -3687,7 +3560,7 @@ tilegx_elf_relocate_section (bfd *output
 		  && (h == NULL
 		      || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 		      || h->root.type != bfd_link_hash_undefweak))
-		    need_relocs = TRUE;
+		    need_relocs = true;
 
 	      switch (r_type)
 		{
@@ -3771,7 +3644,7 @@ tilegx_elf_relocate_section (bfd *output
 	    abort ();
 
 	  relocation = off - got_base;
-	  unresolved_reloc = FALSE;
+	  unresolved_reloc = false;
 	  howto = tilegx_elf_howto_table + r_type;
 	  break;
 
@@ -3862,7 +3735,7 @@ tilegx_elf_relocate_section (bfd *output
 
 	    case bfd_reloc_undefined:
 	      (*info->callbacks->undefined_symbol)
-		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+		(info, name, input_bfd, input_section, rel->r_offset, true);
 	      break;
 
 	    case bfd_reloc_outofrange:
@@ -3888,13 +3761,13 @@ tilegx_elf_relocate_section (bfd *output
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
-bfd_boolean
+bool
 tilegx_elf_finish_dynamic_symbol (bfd *output_bfd,
 				  struct bfd_link_info *info,
 				  struct elf_link_hash_entry *h,
@@ -4034,12 +3907,12 @@ tilegx_elf_finish_dynamic_symbol (bfd *o
       || (h == htab->elf.hgot || h == htab->elf.hplt))
     sym->st_shndx = SHN_ABS;
 
-  return TRUE;
+  return true;
 }
 
 /* Finish up the dynamic sections.  */
 
-static bfd_boolean
+static bool
 tilegx_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
 		   bfd *dynobj, asection *sdyn,
 		   asection *splt ATTRIBUTE_UNUSED)
@@ -4082,10 +3955,10 @@ tilegx_finish_dyn (bfd *output_bfd, stru
 
       bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
     }
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 tilegx_elf_finish_dynamic_sections (bfd *output_bfd,
 				    struct bfd_link_info *info)
 {
@@ -4103,7 +3976,7 @@ tilegx_elf_finish_dynamic_sections (bfd
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
-      bfd_boolean ret;
+      bool ret;
 
       splt = htab->elf.splt;
       BFD_ASSERT (splt != NULL && sdyn != NULL);
@@ -4142,7 +4015,7 @@ tilegx_elf_finish_dynamic_sections (bfd
 	{
 	  _bfd_error_handler
 	    (_("discarded output section: `%pA'"), htab->elf.sgotplt);
-	  return FALSE;
+	  return false;
 	}
 
       if (htab->elf.sgotplt->size > 0)
@@ -4177,7 +4050,7 @@ tilegx_elf_finish_dynamic_sections (bfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -4239,7 +4112,7 @@ tilegx_additional_program_headers (bfd *
 }
 
 
-bfd_boolean
+bool
 _bfd_tilegx_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -4253,8 +4126,8 @@ _bfd_tilegx_elf_merge_private_bfd_data (
 	(_("%pB: cannot link together %s and %s objects"),
 	 ibfd, targ1, targ2);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-tilegx.h ./bfd/elfxx-tilegx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-tilegx.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-tilegx.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILE-Gx ELF specific backend routines.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -40,26 +40,26 @@ tilegx_elf_copy_indirect_symbol (struct
 				 struct elf_link_hash_entry *,
 				 struct elf_link_hash_entry *);
 
-extern bfd_boolean
+extern bool
 tilegx_elf_create_dynamic_sections (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
+extern bool
 tilegx_elf_check_relocs (bfd *, struct bfd_link_info *,
 			 asection *, const Elf_Internal_Rela *);
 
-extern bfd_boolean
+extern bool
 tilegx_elf_adjust_dynamic_symbol (struct bfd_link_info *,
 				  struct elf_link_hash_entry *);
 
-extern bfd_boolean
+extern bool
 tilegx_elf_omit_section_dynsym (bfd *,
 				struct bfd_link_info *,
 				asection *);
 
-extern bfd_boolean
+extern bool
 tilegx_elf_size_dynamic_sections (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
+extern int
 tilegx_elf_relocate_section (bfd *, struct bfd_link_info *,
 			     bfd *, asection *,
 			     bfd_byte *, Elf_Internal_Rela *,
@@ -76,20 +76,20 @@ tilegx_elf_gc_mark_hook (asection *,
 extern bfd_vma
 tilegx_elf_plt_sym_val (bfd_vma, const asection *, const arelent *);
 
-extern bfd_boolean
+extern bool
 tilegx_info_to_howto_rela (bfd *, arelent *, Elf_Internal_Rela *);
 
 extern int
 tilegx_additional_program_headers (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
+extern bool
 tilegx_elf_finish_dynamic_symbol (bfd *,
 				  struct bfd_link_info *,
 				  struct elf_link_hash_entry *,
 				  Elf_Internal_Sym *);
 
-extern bfd_boolean
+extern bool
 tilegx_elf_finish_dynamic_sections (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean
+extern bool
 _bfd_tilegx_elf_merge_private_bfd_data (bfd *, struct bfd_link_info *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-x86.c ./bfd/elfxx-x86.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-x86.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-x86.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* x86 specific support for ELF
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -21,8 +21,6 @@
 #include "elfxx-x86.h"
 #include "elf-vxworks.h"
 #include "objalloc.h"
-#include "elf/i386.h"
-#include "elf/x86-64.h"
 
 /* The name of the dynamic interpreter.  This is put in the .interp
    section.  */
@@ -31,7 +29,7 @@
 #define ELF64_DYNAMIC_INTERPRETER "/lib/ld64.so.1"
 #define ELFX32_DYNAMIC_INTERPRETER "/lib/ldx32.so.1"
 
-bfd_boolean
+bool
 _bfd_x86_elf_mkobject (bfd *abfd)
 {
   return bfd_elf_allocate_object (abfd,
@@ -82,7 +80,7 @@ _bfd_x86_elf_dtpoff_base (struct bfd_lin
 /* Allocate space in .plt, .got and associated reloc sections for
    dynamic relocs.  */
 
-static bfd_boolean
+static bool
 elf_x86_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 {
   struct bfd_link_info *info;
@@ -90,11 +88,11 @@ elf_x86_allocate_dynrelocs (struct elf_l
   struct elf_x86_link_hash_entry *eh;
   struct elf_dyn_relocs *p;
   unsigned int plt_entry_size;
-  bfd_boolean resolved_to_zero;
+  bool resolved_to_zero;
   const struct elf_backend_data *bed;
 
   if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
+    return true;
 
   eh = (struct elf_x86_link_hash_entry *) h;
 
@@ -102,7 +100,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
   bed = get_elf_backend_data (info->output_bfd);
   htab = elf_x86_hash_table (info, bed->target_id);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   plt_entry_size = htab->plt.plt_entry_size;
 
@@ -131,13 +129,16 @@ elf_x86_allocate_dynrelocs (struct elf_l
   if (h->type == STT_GNU_IFUNC
       && h->def_regular)
     {
-      if (_bfd_elf_allocate_ifunc_dyn_relocs (info, h, &eh->dyn_relocs,
-					      &htab->readonly_dynrelocs_against_ifunc,
+      /* GOTOFF relocation needs PLT.  */
+      if (eh->gotoff_ref)
+	h->plt.refcount = 1;
+
+      if (_bfd_elf_allocate_ifunc_dyn_relocs (info, h, &h->dyn_relocs,
 					      plt_entry_size,
 					      (htab->plt.has_plt0
 					       * plt_entry_size),
 					       htab->got_entry_size,
-					       TRUE))
+					       true))
 	{
 	  asection *s = htab->plt_second;
 	  if (h->plt.offset != (bfd_vma) -1 && s != NULL)
@@ -149,10 +150,10 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	      s->size += htab->non_lazy_plt->plt_entry_size;
 	    }
 
-	  return TRUE;
+	  return true;
 	}
       else
-	return FALSE;
+	return false;
     }
   /* Don't create the PLT entry if there are only function pointer
      relocations which can be resolved at run-time.  */
@@ -160,7 +161,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	   && (h->plt.refcount > 0
 	       || eh->plt_got.refcount > 0))
     {
-      bfd_boolean use_plt_got = eh->plt_got.refcount > 0;
+      bool use_plt_got = eh->plt_got.refcount > 0;
 
       /* Make sure this symbol is output as a dynamic symbol.
 	 Undefined weak syms won't yet be marked as dynamic.  */
@@ -170,7 +171,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       if (bfd_link_pic (info)
@@ -179,7 +180,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	  asection *s = htab->elf.splt;
 	  asection *second_s = htab->plt_second;
 	  asection *got_s = htab->plt_got;
-	  bfd_boolean use_plt;
+	  bool use_plt;
 
 	  /* If this is the first .plt entry, make room for the special
 	     first entry.  The .plt section is used by prelink to undo
@@ -204,7 +205,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	     NB: If PLT is PC-relative, we can use the .plt in PIE for
 	     function address. */
 	  if (h->def_regular)
-	    use_plt = FALSE;
+	    use_plt = false;
 	  else if (htab->pcrel_plt)
 	    use_plt = ! bfd_link_dll (info);
 	  else
@@ -260,7 +261,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 		}
 	    }
 
-	  if (htab->target_os == is_vxworks && !bfd_link_pic (info))
+	  if (htab->elf.target_os == is_vxworks && !bfd_link_pic (info))
 	    {
 	      /* VxWorks has a second set of relocations for each PLT entry
 		 in executables.  They go in a separate relocation section,
@@ -309,7 +310,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
   else if (h->got.refcount > 0)
     {
       asection *s;
-      bfd_boolean dyn;
+      bool dyn;
       int tls_type = elf_x86_hash_entry (h)->tls_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
@@ -320,7 +321,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	  && h->root.type == bfd_link_hash_undefweak)
 	{
 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 	}
 
       s = htab->elf.sgot;
@@ -347,7 +348,8 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	 (but if both R_386_TLS_IE_32 and R_386_TLS_IE is present, we
 	 need two), R_386_TLS_GD and R_X86_64_TLSGD need one if local
 	 symbol and two if global.  No dynamic relocation against
-	 resolved undefined weak symbol in executable.  */
+	 resolved undefined weak symbol in executable.  No dynamic
+	 relocation against non-preemptible absolute symbol.  */
       if (tls_type == GOT_TLS_IE_BOTH)
 	htab->elf.srelgot->size += 2 * htab->sizeof_reloc;
       else if ((GOT_TLS_GD_P (tls_type) && h->dynindx == -1)
@@ -359,21 +361,23 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	       && ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 		    && !resolved_to_zero)
 		   || h->root.type != bfd_link_hash_undefweak)
-	       && (bfd_link_pic (info)
+	       && ((bfd_link_pic (info)
+		    && !(h->dynindx == -1
+			 && ABS_SYMBOL_P (h)))
 		   || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
 	htab->elf.srelgot->size += htab->sizeof_reloc;
       if (GOT_TLS_GDESC_P (tls_type))
 	{
 	  htab->elf.srelplt->size += htab->sizeof_reloc;
 	  if (bed->target_id == X86_64_ELF_DATA)
-	    htab->tlsdesc_plt = (bfd_vma) -1;
+	    htab->elf.tlsdesc_plt = (bfd_vma) -1;
 	}
     }
   else
     h->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
-    return TRUE;
+  if (h->dyn_relocs == NULL)
+    return true;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -393,7 +397,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	{
 	  struct elf_dyn_relocs **pp;
 
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      p->count -= p->pc_count;
 	      p->pc_count = 0;
@@ -404,10 +408,10 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	    }
 	}
 
-      if (htab->target_os == is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
 	{
 	  struct elf_dyn_relocs **pp;
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      if (strcmp (p->sec->output_section->name, ".tls_vars") == 0)
 		*pp = p->next;
@@ -418,7 +422,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility or in PIE.  */
-      if (eh->dyn_relocs != NULL)
+      if (h->dyn_relocs != NULL)
 	{
 	  if (h->root.type == bfd_link_hash_undefweak)
 	    {
@@ -434,7 +438,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 			 that we can branch to 0 without PLT.  */
 		      struct elf_dyn_relocs **pp;
 
-		      for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+		      for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 			if (p->pc_count == 0)
 			  *pp = p->next;
 			else
@@ -447,17 +451,17 @@ elf_x86_allocate_dynrelocs (struct elf_l
 		      /* Make sure undefined weak symbols are output
 			 as dynamic symbols in PIEs for dynamic non-GOT
 			 non-PLT reloations.  */
-		      if (eh->dyn_relocs != NULL
+		      if (h->dyn_relocs != NULL
 			  && !bfd_elf_link_record_dynamic_symbol (info, h))
-			return FALSE;
+			return false;
 		    }
 		  else
-		    eh->dyn_relocs = NULL;
+		    h->dyn_relocs = NULL;
 		}
 	      else if (h->dynindx == -1
 		       && !h->forced_local
 		       && !bfd_elf_link_record_dynamic_symbol (info, h))
-		return FALSE;
+		return false;
 	    }
 	  else if (bfd_link_executable (info)
 		   && (h->needs_copy || eh->needs_copy)
@@ -469,7 +473,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 		 which turn out to need copy relocs.  */
 	      struct elf_dyn_relocs **pp;
 
-	      for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	      for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 		{
 		  if (p->pc_count != 0)
 		    *pp = p->next;
@@ -502,7 +506,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	      && !resolved_to_zero
 	      && h->root.type == bfd_link_hash_undefweak
 	      && ! bfd_elf_link_record_dynamic_symbol (info, h))
-	    return FALSE;
+	    return false;
 
 	  /* If that succeeded, we know we'll be keeping all the
 	     relocs.  */
@@ -510,85 +514,46 @@ elf_x86_allocate_dynrelocs (struct elf_l
 	    goto keep;
 	}
 
-      eh->dyn_relocs = NULL;
+      h->dyn_relocs = NULL;
 
     keep: ;
     }
 
   /* Finally, allocate space.  */
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc;
 
+      if (eh->def_protected && bfd_link_executable (info))
+	{
+	  /* Disallow copy relocation against non-copyable protected
+	     symbol.  */
+	  asection *s = p->sec->output_section;
+	  if (s != NULL && (s->flags & SEC_READONLY) != 0)
+	    {
+	      info->callbacks->einfo
+		/* xgettext:c-format */
+		(_("%F%P: %pB: copy relocation against non-copyable "
+		   "protected symbol `%s' in %pB\n"),
+		 p->sec->owner, h->root.root.string,
+		 h->root.u.def.section->owner);
+	      return false;
+	    }
+	}
+
       sreloc = elf_section_data (p->sec)->sreloc;
 
       BFD_ASSERT (sreloc != NULL);
       sreloc->size += p->count * htab->sizeof_reloc;
     }
 
-  return TRUE;
-}
-
-/* Find dynamic relocs for H that apply to read-only sections.  */
-
-static asection *
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = elf_x86_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return p->sec;
-    }
-  return NULL;
-}
-
-/* Set DF_TEXTREL if we find any dynamic relocs that apply to
-   read-only sections.  */
-
-static bfd_boolean
-maybe_set_textrel (struct elf_link_hash_entry *h, void *inf)
-{
-  asection *sec;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  /* Skip local IFUNC symbols. */
-  if (h->forced_local && h->type == STT_GNU_IFUNC)
-    return TRUE;
-
-  sec = readonly_dynrelocs (h);
-  if (sec != NULL)
-    {
-      struct bfd_link_info *info = (struct bfd_link_info *) inf;
-
-      info->flags |= DF_TEXTREL;
-      /* xgettext:c-format */
-      info->callbacks->minfo (_("%pB: dynamic relocation against `%pT' "
-				"in read-only section `%pA'\n"),
-			      sec->owner, h->root.root.string, sec);
-
-      if ((info->warn_shared_textrel && bfd_link_pic (info))
-	  || info->error_textrel)
-	/* xgettext:c-format */
-	info->callbacks->einfo (_("%P: %pB: warning: relocation against `%s' "
-				  "in read-only section `%pA'\n"),
-				sec->owner, h->root.root.string, sec);
-
-      /* Not an error, just cut short the traversal.  */
-      return FALSE;
-    }
-  return TRUE;
+  return true;
 }
 
 /* Allocate space in .plt, .got and associated reloc sections for
    local dynamic relocs.  */
 
-static bfd_boolean
+static int
 elf_x86_allocate_local_dynreloc (void **slot, void *inf)
 {
   struct elf_link_hash_entry *h
@@ -609,7 +574,7 @@ elf_x86_allocate_local_dynreloc (void **
 struct elf_link_hash_entry *
 _bfd_elf_x86_get_local_sym_hash (struct elf_x86_link_hash_table *htab,
 				 bfd *abfd, const Elf_Internal_Rela *rel,
-				 bfd_boolean create)
+				 bool create)
 {
   struct elf_x86_link_hash_entry e, *ret;
   asection *sec = abfd->sections;
@@ -737,16 +702,16 @@ elf_x86_link_hash_table_free (bfd *obfd)
   _bfd_elf_link_hash_table_free (obfd);
 }
 
-static bfd_boolean
+static bool
 elf_i386_is_reloc_section (const char *secname)
 {
-  return CONST_STRNEQ (secname, ".rel");
+  return startswith (secname, ".rel");
 }
 
-static bfd_boolean
+static bool
 elf_x86_64_is_reloc_section (const char *secname)
 {
-  return CONST_STRNEQ (secname, ".rela");
+  return startswith (secname, ".rela");
 }
 
 /* Create an x86 ELF linker hash table.  */
@@ -756,7 +721,7 @@ _bfd_x86_elf_link_hash_table_create (bfd
 {
   struct elf_x86_link_hash_table *ret;
   const struct elf_backend_data *bed;
-  bfd_size_type amt = sizeof (struct elf_x86_link_hash_table);
+  size_t amt = sizeof (struct elf_x86_link_hash_table);
 
   ret = (struct elf_x86_link_hash_table *) bfd_zmalloc (amt);
   if (ret == NULL)
@@ -775,12 +740,13 @@ _bfd_x86_elf_link_hash_table_create (bfd
   if (bed->target_id == X86_64_ELF_DATA)
     {
       ret->is_reloc_section = elf_x86_64_is_reloc_section;
-      ret->dt_reloc = DT_RELA;
-      ret->dt_reloc_sz = DT_RELASZ;
-      ret->dt_reloc_ent = DT_RELAENT;
       ret->got_entry_size = 8;
-      ret->pcrel_plt = TRUE;
+      ret->pcrel_plt = true;
       ret->tls_get_addr = "__tls_get_addr";
+      ret->relative_r_type = R_X86_64_RELATIVE;
+      ret->relative_r_name = "R_X86_64_RELATIVE";
+      ret->elf_append_reloc = elf_append_rela;
+      ret->elf_write_addend_in_got = _bfd_elf64_write_addend;
     }
   if (ABI_64_P (abfd))
     {
@@ -788,6 +754,7 @@ _bfd_x86_elf_link_hash_table_create (bfd
       ret->pointer_r_type = R_X86_64_64;
       ret->dynamic_interpreter = ELF64_DYNAMIC_INTERPRETER;
       ret->dynamic_interpreter_size = sizeof ELF64_DYNAMIC_INTERPRETER;
+      ret->elf_write_addend = _bfd_elf64_write_addend;
     }
   else
     {
@@ -798,25 +765,26 @@ _bfd_x86_elf_link_hash_table_create (bfd
 	  ret->dynamic_interpreter = ELFX32_DYNAMIC_INTERPRETER;
 	  ret->dynamic_interpreter_size
 	    = sizeof ELFX32_DYNAMIC_INTERPRETER;
+	  ret->elf_write_addend = _bfd_elf32_write_addend;
 	}
       else
 	{
 	  ret->is_reloc_section = elf_i386_is_reloc_section;
-	  ret->dt_reloc = DT_REL;
-	  ret->dt_reloc_sz = DT_RELSZ;
-	  ret->dt_reloc_ent = DT_RELENT;
 	  ret->sizeof_reloc = sizeof (Elf32_External_Rel);
 	  ret->got_entry_size = 4;
-	  ret->pcrel_plt = FALSE;
+	  ret->pcrel_plt = false;
 	  ret->pointer_r_type = R_386_32;
+	  ret->relative_r_type = R_386_RELATIVE;
+	  ret->relative_r_name = "R_386_RELATIVE";
+	  ret->elf_append_reloc = elf_append_rel;
+	  ret->elf_write_addend = _bfd_elf32_write_addend;
+	  ret->elf_write_addend_in_got = _bfd_elf32_write_addend;
 	  ret->dynamic_interpreter = ELF32_DYNAMIC_INTERPRETER;
 	  ret->dynamic_interpreter_size
 	    = sizeof ELF32_DYNAMIC_INTERPRETER;
 	  ret->tls_get_addr = "___tls_get_addr";
 	}
     }
-  ret->target_id = bed->target_id;
-  ret->target_os = get_elf_x86_backend_data (abfd)->target_os;
 
   ret->loc_hash_table = htab_try_create (1024,
 					 _bfd_x86_elf_local_htab_hash,
@@ -858,7 +826,7 @@ elf_x86_linker_defined (struct bfd_link_
   struct elf_link_hash_entry *h;
 
   h = elf_link_hash_lookup (elf_hash_table (info), name,
-			    FALSE, FALSE, FALSE);
+			    false, false, false);
   if (h == NULL)
     return;
 
@@ -885,7 +853,7 @@ elf_x86_hide_linker_defined (struct bfd_
   struct elf_link_hash_entry *h;
 
   h = elf_link_hash_lookup (elf_hash_table (info), name,
-			    FALSE, FALSE, FALSE);
+			    false, false, false);
   if (h == NULL)
     return;
 
@@ -894,10 +862,10 @@ elf_x86_hide_linker_defined (struct bfd_
 
   if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
       || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
-    _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
+    _bfd_elf_link_hash_hide_symbol (info, h, true);
 }
 
-bfd_boolean
+bool
 _bfd_x86_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
 {
   if (!bfd_link_relocatable (info))
@@ -912,7 +880,7 @@ _bfd_x86_elf_link_check_relocs (bfd *abf
 
 	  h = elf_link_hash_lookup (elf_hash_table (info),
 				    htab->tls_get_addr,
-				    FALSE, FALSE, FALSE);
+				    false, false, false);
 	  if (h != NULL)
 	    {
 	      elf_x86_hash_entry (h)->tls_get_addr = 1;
@@ -952,23 +920,1341 @@ _bfd_x86_elf_link_check_relocs (bfd *abf
   return _bfd_elf_link_check_relocs (abfd, info);
 }
 
+/* Look through the relocs for a section before allocation to make the
+   dynamic reloc section.  */
+
+bool
+_bfd_x86_elf_check_relocs (bfd *abfd,
+			   struct bfd_link_info *info,
+			   asection *sec,
+			   const Elf_Internal_Rela *relocs)
+{
+  struct elf_x86_link_hash_table *htab;
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  const Elf_Internal_Rela *rel;
+  const Elf_Internal_Rela *rel_end;
+  asection *sreloc;
+  const struct elf_backend_data *bed;
+  bool is_x86_64;
+
+  if (bfd_link_relocatable (info))
+    return true;
+
+  bed = get_elf_backend_data (abfd);
+  htab = elf_x86_hash_table (info, bed->target_id);
+  if (htab == NULL)
+    {
+      sec->check_relocs_failed = 1;
+      return false;
+    }
+
+  is_x86_64 = bed->target_id == X86_64_ELF_DATA;
+
+  symtab_hdr = &elf_symtab_hdr (abfd);
+  sym_hashes = elf_sym_hashes (abfd);
+
+  rel_end = relocs + sec->reloc_count;
+  for (rel = relocs; rel < rel_end; rel++)
+    {
+      unsigned int r_type;
+      unsigned int r_symndx;
+      struct elf_link_hash_entry *h;
+
+      r_symndx = htab->r_sym (rel->r_info);
+      r_type = ELF32_R_TYPE (rel->r_info);
+
+      if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
+	{
+	  /* xgettext:c-format */
+	  _bfd_error_handler (_("%pB: bad symbol index: %d"),
+			      abfd, r_symndx);
+	  goto error_return;
+	}
+
+      if (r_symndx < symtab_hdr->sh_info)
+	h = NULL;
+      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;
+	}
+
+      if (X86_NEED_DYNAMIC_RELOC_TYPE_P (is_x86_64, r_type)
+	  && NEED_DYNAMIC_RELOCATION_P (is_x86_64, info, true, h, sec,
+					r_type, htab->pointer_r_type))
+	{
+	  /* We may copy these reloc types into the output file.
+	     Create a reloc section in dynobj and make room for
+	     this reloc.  */
+	  sreloc = _bfd_elf_make_dynamic_reloc_section
+	    (sec, htab->elf.dynobj, ABI_64_P (abfd) ? 3 : 2,
+	     abfd, sec->use_rela_p);
+
+	  if (sreloc != NULL)
+	    return true;
+
+  error_return:
+	  sec->check_relocs_failed = 1;
+	  return false;
+	}
+    }
+
+  return true;
+}
+
+/* Add an entry to the relative reloc record.  */
+
+static bool
+elf_x86_relative_reloc_record_add
+  (struct bfd_link_info *info,
+   struct elf_x86_relative_reloc_data *relative_reloc,
+   Elf_Internal_Rela *rel, asection *sec,
+   asection *sym_sec, struct elf_link_hash_entry *h,
+   Elf_Internal_Sym *sym, bfd_vma offset, bool *keep_symbuf_p)
+{
+  bfd_size_type newidx;
+
+  if (relative_reloc->data == NULL)
+    {
+      relative_reloc->data = bfd_malloc
+	(sizeof (struct elf_x86_relative_reloc_record));
+      relative_reloc->count = 0;
+      relative_reloc->size = 1;
+    }
+
+  newidx = relative_reloc->count++;
+
+  if (relative_reloc->count > relative_reloc->size)
+    {
+      relative_reloc->size <<= 1;
+      relative_reloc->data = bfd_realloc
+	(relative_reloc->data,
+	 (relative_reloc->size
+	  * sizeof (struct elf_x86_relative_reloc_record)));
+    }
+
+  if (relative_reloc->data == NULL)
+    {
+      info->callbacks->einfo
+	/* xgettext:c-format */
+	(_("%F%P: %pB: failed to allocate relative reloc record\n"),
+	 info->output_bfd);
+      return false;
+    }
+
+  relative_reloc->data[newidx].rel = *rel;
+  relative_reloc->data[newidx].sec = sec;
+  if (h != NULL)
+    {
+      /* Set SYM to NULL to indicate a global symbol.  */
+      relative_reloc->data[newidx].sym = NULL;
+      relative_reloc->data[newidx].u.h = h;
+    }
+  else
+    {
+      relative_reloc->data[newidx].sym = sym;
+      relative_reloc->data[newidx].u.sym_sec = sym_sec;
+      /* We must keep the symbol buffer since SYM will be used later.  */
+      *keep_symbuf_p = true;
+    }
+  relative_reloc->data[newidx].offset = offset;
+  relative_reloc->data[newidx].address = 0;
+  return true;
+}
+
+/* After input sections have been mapped to output sections and
+   addresses of output sections are set initiallly, scan input
+   relocations with the same logic in relocate_section to determine
+   if a relative relocation should be generated.  Save the relative
+   relocation candidate information for sizing the DT_RELR section
+   later after all symbols addresses can be determined.  */
+
+bool
+_bfd_x86_elf_link_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
+				 asection *input_section,
+				 struct bfd_link_info *info,
+				 bool *again)
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  Elf_Internal_Rela *internal_relocs;
+  Elf_Internal_Rela *irel, *irelend;
+  Elf_Internal_Sym *isymbuf = NULL;
+  struct elf_link_hash_entry **sym_hashes;
+  const struct elf_backend_data *bed;
+  struct elf_x86_link_hash_table *htab;
+  bfd_vma *local_got_offsets;
+  bool is_x86_64;
+  bool unaligned_section;
+  bool return_status = false;
+  bool keep_symbuf = false;
+
+  if (bfd_link_relocatable (info))
+    return true;
+
+  /* Assume we're not going to change any sizes, and we'll only need
+     one pass.  */
+  *again = false;
+
+  bed = get_elf_backend_data (abfd);
+  htab = elf_x86_hash_table (info, bed->target_id);
+  if (htab == NULL)
+    return true;
+
+  /* Nothing to do if there are no relocations or relative relocations
+     have been packed.  */
+  if (input_section == htab->elf.srelrdyn
+      || input_section->relative_reloc_packed
+      || ((input_section->flags & (SEC_RELOC | SEC_ALLOC))
+	  != (SEC_RELOC | SEC_ALLOC))
+      || (input_section->flags & SEC_DEBUGGING) != 0
+      || input_section->reloc_count == 0)
+    return true;
+
+  /* Skip if the section isn't aligned.  */
+  unaligned_section = input_section->alignment_power == 0;
+
+  is_x86_64 = bed->target_id == X86_64_ELF_DATA;
+
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (abfd);
+  local_got_offsets = elf_local_got_offsets (abfd);
+
+  /* Load the relocations for this section.  */
+  internal_relocs =
+    _bfd_elf_link_info_read_relocs (abfd, info, input_section, NULL,
+				    (Elf_Internal_Rela *) NULL,
+				    info->keep_memory);
+  if (internal_relocs == NULL)
+    return false;
+
+  irelend = internal_relocs + input_section->reloc_count;
+  for (irel = internal_relocs; irel < irelend; irel++)
+    {
+      unsigned int r_type;
+      unsigned int r_symndx;
+      Elf_Internal_Sym *isym;
+      struct elf_link_hash_entry *h;
+      struct elf_x86_link_hash_entry *eh;
+      bfd_vma offset;
+      bool resolved_to_zero;
+      bool need_copy_reloc_in_pie;
+      bool pc32_reloc;
+      asection *sec;
+      /* Offset must be a multiple of 2.  */
+      bool unaligned_offset = (irel->r_offset & 1) != 0;
+      /* True if there is a relative relocation against a dynamic
+	 symbol.  */
+      bool dynamic_relative_reloc_p;
+
+      /* Get the value of the symbol referred to by the reloc.  */
+      r_symndx = htab->r_sym (irel->r_info);
+
+      r_type = ELF32_R_TYPE (irel->r_info);
+      /* Clear the R_X86_64_converted_reloc_bit bit.  */
+      r_type &= ~R_X86_64_converted_reloc_bit;
+
+      sec = NULL;
+      h = NULL;
+      dynamic_relative_reloc_p = false;
+
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  /* Read this BFD's local symbols.  */
+	  if (isymbuf == NULL)
+	    {
+	      isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
+	      if (isymbuf == NULL)
+		{
+		  isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
+						  symtab_hdr->sh_info,
+						  0, NULL, NULL, NULL);
+		  if (isymbuf == NULL)
+		    goto error_return;
+		}
+	    }
+
+	  isym = isymbuf + r_symndx;
+	  switch (isym->st_shndx)
+	    {
+	    case SHN_ABS:
+	      sec = bfd_abs_section_ptr;
+	      break;
+	    case SHN_COMMON:
+	      sec = bfd_com_section_ptr;
+	      break;
+	    case SHN_X86_64_LCOMMON:
+	      if (!is_x86_64)
+		abort ();
+	      sec = &_bfd_elf_large_com_section;
+	      break;
+	    default:
+	      sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
+	      break;
+	    }
+
+	  /* Skip relocation against local STT_GNU_IFUNC symbol.  */
+	  if (ELF32_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+	    continue;
+
+	  eh = (struct elf_x86_link_hash_entry *) h;
+	  resolved_to_zero = false;
+	}
+      else
+	{
+	  /* Get H and SEC for GENERATE_DYNAMIC_RELOCATION_P below.  */
+	  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;
+
+	  if (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
+	    sec = h->root.u.def.section;
+
+	  /* Skip relocation against STT_GNU_IFUNC symbol.  */
+	  if (h->type == STT_GNU_IFUNC)
+	    continue;
+
+	  eh = (struct elf_x86_link_hash_entry *) h;
+	  resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
+	  /* NB: See how elf_backend_finish_dynamic_symbol is called
+	     from elf_link_output_extsym.  */
+	  if ((h->dynindx != -1 || h->forced_local)
+	      && ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+		   || h->root.type != bfd_link_hash_undefweak)
+		  || !h->forced_local)
+	      && h->got.offset != (bfd_vma) -1
+	      && ! GOT_TLS_GD_ANY_P (elf_x86_hash_entry (h)->tls_type)
+	      && elf_x86_hash_entry (h)->tls_type != GOT_TLS_IE
+	      && !resolved_to_zero
+	      && SYMBOL_REFERENCES_LOCAL_P (info, h)
+	      && SYMBOL_DEFINED_NON_SHARED_P (h))
+	    dynamic_relative_reloc_p = true;
+
+	  isym = NULL;
+	}
+
+      if (X86_GOT_TYPE_P (is_x86_64, r_type))
+	{
+	  /* Pack GOT relative relocations.  There should be only a
+	     single R_*_RELATIVE relocation in GOT.  */
+	  if (eh != NULL)
+	    {
+	      if (eh->got_relative_reloc_done)
+		continue;
+
+	      if (!(dynamic_relative_reloc_p
+		    || (RESOLVED_LOCALLY_P (info, h, htab)
+			&& GENERATE_RELATIVE_RELOC_P (info, h))))
+		continue;
+
+	      if (!dynamic_relative_reloc_p)
+		eh->no_finish_dynamic_symbol = 1;
+	      eh->got_relative_reloc_done = 1;
+	      offset = h->got.offset;
+	    }
+	  else
+	    {
+	      if (elf_x86_relative_reloc_done (abfd)[r_symndx])
+		continue;
+
+	      if (!X86_LOCAL_GOT_RELATIVE_RELOC_P (is_x86_64, info,
+						   isym))
+		continue;
+
+	      elf_x86_relative_reloc_done (abfd)[r_symndx] = 1;
+	      offset = local_got_offsets[r_symndx];
+	    }
+
+	  if (!elf_x86_relative_reloc_record_add (info,
+						  &htab->relative_reloc,
+						  irel, htab->elf.sgot,
+						  sec, h, isym, offset,
+						  &keep_symbuf))
+	    goto error_return;
+
+	  continue;
+	}
+
+      if (is_x86_64
+	  && irel->r_addend == 0
+	  && !ABI_64_P (info->output_bfd))
+	{
+	  /* For x32, if addend is zero, treat R_X86_64_64 like
+	     R_X86_64_32 and R_X86_64_SIZE64 like R_X86_64_SIZE32.  */
+	  if (r_type == R_X86_64_64)
+	    r_type = R_X86_64_32;
+	  else if (r_type == R_X86_64_SIZE64)
+	    r_type = R_X86_64_SIZE32;
+	}
+
+      if (!X86_RELATIVE_RELOC_TYPE_P (is_x86_64, r_type))
+	continue;
+
+      /* Pack non-GOT relative relocations.  */
+      if (is_x86_64)
+	{
+	  need_copy_reloc_in_pie =
+	    (bfd_link_pie (info)
+	     && h != NULL
+	     && (h->needs_copy
+		 || eh->needs_copy
+		 || (h->root.type == bfd_link_hash_undefined))
+	     && (X86_PCREL_TYPE_P (true, r_type)
+		 || X86_SIZE_TYPE_P (true, r_type)));
+	  pc32_reloc = false;
+	}
+      else
+	{
+	  need_copy_reloc_in_pie = false;
+	  pc32_reloc = r_type == R_386_PC32;
+	}
+
+      if (GENERATE_DYNAMIC_RELOCATION_P (is_x86_64, info, eh, r_type,
+					 sec, need_copy_reloc_in_pie,
+					 resolved_to_zero, pc32_reloc))
+	{
+	  /* When generating a shared object, these relocations
+	     are copied into the output file to be resolved at run
+	     time.	*/
+	  offset = _bfd_elf_section_offset (info->output_bfd, info,
+					    input_section,
+					    irel->r_offset);
+	  if (offset == (bfd_vma) -1
+	      || offset == (bfd_vma) -2
+	      || COPY_INPUT_RELOC_P (is_x86_64, info, h, r_type))
+	    continue;
+
+	  /* This symbol is local, or marked to become local.  When
+	     relocation overflow check is disabled, we convert
+	     R_X86_64_32 to dynamic R_X86_64_RELATIVE.  */
+	  if (is_x86_64
+	      && !(r_type == htab->pointer_r_type
+		   || (r_type == R_X86_64_32
+		       && htab->params->no_reloc_overflow_check)))
+	    continue;
+
+	  if (!elf_x86_relative_reloc_record_add
+	        (info,
+		 ((unaligned_section || unaligned_offset)
+		  ? &htab->unaligned_relative_reloc
+		  : &htab->relative_reloc),
+		 irel, input_section, sec, h, isym, offset,
+		 &keep_symbuf))
+	    goto error_return;
+	}
+    }
+
+  input_section->relative_reloc_packed = 1;
+
+  return_status = true;
+
+error_return:
+  if ((unsigned char *) isymbuf != symtab_hdr->contents)
+    {
+      /* Cache the symbol buffer if it must be kept.  */
+      if (keep_symbuf)
+	symtab_hdr->contents = (unsigned char *) isymbuf;
+      else
+	free (isymbuf);
+    }
+  if (elf_section_data (input_section)->relocs != internal_relocs)
+    free (internal_relocs);
+  return return_status;
+}
+
+/* Add an entry to the 64-bit DT_RELR bitmap.  */
+
+static void
+elf64_dt_relr_bitmap_add
+  (struct bfd_link_info *info, struct elf_dt_relr_bitmap *bitmap,
+   uint64_t entry)
+{
+  bfd_size_type newidx;
+
+  if (bitmap->u.elf64 == NULL)
+    {
+      bitmap->u.elf64 = bfd_malloc (sizeof (uint64_t));
+      bitmap->count = 0;
+      bitmap->size = 1;
+    }
+
+  newidx = bitmap->count++;
+
+  if (bitmap->count > bitmap->size)
+    {
+      bitmap->size <<= 1;
+      bitmap->u.elf64 = bfd_realloc (bitmap->u.elf64,
+				     (bitmap->size * sizeof (uint64_t)));
+    }
+
+  if (bitmap->u.elf64 == NULL)
+    {
+      info->callbacks->einfo
+	/* xgettext:c-format */
+	(_("%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"),
+	 info->output_bfd);
+    }
+
+  bitmap->u.elf64[newidx] = entry;
+}
+
+/* Add an entry to the 32-bit DT_RELR bitmap.  */
+
+static void
+elf32_dt_relr_bitmap_add
+  (struct bfd_link_info *info, struct elf_dt_relr_bitmap *bitmap,
+   uint32_t entry)
+{
+  bfd_size_type newidx;
+
+  if (bitmap->u.elf32 == NULL)
+    {
+      bitmap->u.elf32 = bfd_malloc (sizeof (uint32_t));
+      bitmap->count = 0;
+      bitmap->size = 1;
+    }
+
+  newidx = bitmap->count++;
+
+  if (bitmap->count > bitmap->size)
+    {
+      bitmap->size <<= 1;
+      bitmap->u.elf32 = bfd_realloc (bitmap->u.elf32,
+				     (bitmap->size * sizeof (uint32_t)));
+    }
+
+  if (bitmap->u.elf32 == NULL)
+    {
+      info->callbacks->einfo
+	/* xgettext:c-format */
+	(_("%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"),
+	 info->output_bfd);
+    }
+
+  bitmap->u.elf32[newidx] = entry;
+}
+
+void
+_bfd_elf32_write_addend (bfd *abfd, uint64_t value, void *addr)
+{
+  bfd_put_32 (abfd, value, addr);
+}
+
+void
+_bfd_elf64_write_addend (bfd *abfd, uint64_t value, void *addr)
+{
+  bfd_put_64 (abfd, value, addr);
+}
+
+/* Size or finish relative relocations to determine the run-time
+   addresses for DT_RELR bitmap computation later.  OUTREL is set
+   to NULL in the sizing phase and non-NULL in the finising phase
+   where the regular relative relocations will be written out.  */
+
+static void
+elf_x86_size_or_finish_relative_reloc
+  (bool is_x86_64, struct bfd_link_info *info,
+   struct elf_x86_link_hash_table *htab, bool unaligned,
+   Elf_Internal_Rela *outrel)
+{
+  unsigned int align_mask;
+  bfd_size_type i, count;
+  asection *sec, *srel;
+  struct elf_link_hash_entry *h;
+  bfd_vma offset;
+  Elf_Internal_Sym *sym;
+  asection *sym_sec;
+  asection *sgot = htab->elf.sgot;
+  asection *srelgot = htab->elf.srelgot;
+  struct elf_x86_relative_reloc_data *relative_reloc;
+
+  if (unaligned)
+    {
+      align_mask = 0;
+      relative_reloc = &htab->unaligned_relative_reloc;
+    }
+  else
+    {
+      align_mask = 1;
+      relative_reloc = &htab->relative_reloc;
+    }
+
+  count = relative_reloc->count;
+  for (i = 0; i < count; i++)
+    {
+      sec = relative_reloc->data[i].sec;
+      sym = relative_reloc->data[i].sym;
+
+      /* If SYM is NULL, it must be a global symbol.  */
+      if (sym == NULL)
+	h = relative_reloc->data[i].u.h;
+      else
+	h = NULL;
+
+      if (is_x86_64)
+	{
+	  bfd_vma relocation;
+	  /* This function may be called more than once and REL may be
+	     updated by _bfd_elf_rela_local_sym below.  */
+	  Elf_Internal_Rela rel = relative_reloc->data[i].rel;
+
+	  if (h != NULL)
+	    {
+	      if (h->root.type == bfd_link_hash_defined
+		  || h->root.type == bfd_link_hash_defweak)
+		{
+		  sym_sec = h->root.u.def.section;
+		  relocation = (h->root.u.def.value
+				+ sym_sec->output_section->vma
+				+ sym_sec->output_offset);
+		}
+	      else
+		{
+		  /* Allow undefined symbol only at the sizing phase.
+		     Otherwise skip undefined symbol here.  Undefined
+		     symbol will be reported by relocate_section.  */
+		  if (outrel == NULL)
+		    relocation = 0;
+		  else
+		    continue;
+		}
+	    }
+	  else
+	    {
+	      sym_sec = relative_reloc->data[i].u.sym_sec;
+	      relocation = _bfd_elf_rela_local_sym
+		(info->output_bfd, sym, &sym_sec, &rel);
+	    }
+
+	  if (outrel != NULL)
+	    {
+	      outrel->r_addend = relocation;
+	      if (sec == sgot)
+		{
+		  if (h != NULL && h->needs_plt)
+		    abort ();
+		}
+	      else
+		outrel->r_addend += rel.r_addend;
+
+	      /* Write the implicit addend if ALIGN_MASK isn't 0.  */
+	      if (align_mask)
+		{
+		  if (sec == sgot)
+		    {
+		      if (relative_reloc->data[i].offset >= sec->size)
+			abort ();
+		      htab->elf_write_addend_in_got
+			(info->output_bfd, outrel->r_addend,
+			 sec->contents + relative_reloc->data[i].offset);
+		    }
+		  else
+		    {
+		      bfd_byte *contents;
+
+		      if (rel.r_offset >= sec->size)
+			abort ();
+
+		      if (elf_section_data (sec)->this_hdr.contents
+			  != NULL)
+			contents
+			  = elf_section_data (sec)->this_hdr.contents;
+		      else
+			{
+			  if (!bfd_malloc_and_get_section (sec->owner,
+							   sec,
+							   &contents))
+			    info->callbacks->einfo
+			      /* xgettext:c-format */
+			      (_("%F%P: %pB: failed to allocate memory for section `%pA'\n"),
+			       info->output_bfd, sec);
+
+			  /* Cache the section contents for
+			     elf_link_input_bfd.  */
+			  elf_section_data (sec)->this_hdr.contents
+			    = contents;
+			}
+		      htab->elf_write_addend
+			(info->output_bfd, outrel->r_addend,
+			 contents + rel.r_offset);
+		    }
+		}
+	    }
+	}
+
+      if (sec == sgot)
+	srel = srelgot;
+      else
+	srel = elf_section_data (sec)->sreloc;
+      offset = (sec->output_section->vma + sec->output_offset
+		+ relative_reloc->data[i].offset);
+      relative_reloc->data[i].address = offset;
+      if (outrel != NULL)
+	{
+	  outrel->r_offset = offset;
+
+	  if ((outrel->r_offset & align_mask) != 0)
+	    abort ();
+
+	  if (htab->params->report_relative_reloc)
+	    _bfd_x86_elf_link_report_relative_reloc
+	      (info, sec, h, sym, htab->relative_r_name, outrel);
+
+	  /* Generate regular relative relocation if ALIGN_MASK is 0.  */
+	  if (align_mask == 0)
+	    htab->elf_append_reloc (info->output_bfd, srel, outrel);
+	}
+    }
+}
+
+/* Compute the DT_RELR section size.  Set NEED_PLAYOUT to true if
+   the DT_RELR section size has been increased.  */
+
+static void
+elf_x86_compute_dl_relr_bitmap
+  (struct bfd_link_info *info, struct elf_x86_link_hash_table *htab,
+   bool *need_layout)
+{
+  bfd_vma base;
+  bfd_size_type i, count, new_count;
+  struct elf_x86_relative_reloc_data *relative_reloc =
+    &htab->relative_reloc;
+  /* Save the old DT_RELR bitmap count.  Don't shrink the DT_RELR bitmap
+     if the new DT_RELR bitmap count is smaller than the old one.  Pad
+     with trailing 1s which won't be decoded to more relocations.  */
+  bfd_size_type dt_relr_bitmap_count = htab->dt_relr_bitmap.count;
+
+  /* Clear the DT_RELR bitmap count.  */
+  htab->dt_relr_bitmap.count = 0;
+
+  count = relative_reloc->count;
+
+  if (ABI_64_P (info->output_bfd))
+    {
+      /* Compute the 64-bit DT_RELR bitmap.  */
+      i = 0;
+      while (i < count)
+	{
+	  if ((relative_reloc->data[i].address % 1) != 0)
+	    abort ();
+
+	  elf64_dt_relr_bitmap_add (info, &htab->dt_relr_bitmap,
+				    relative_reloc->data[i].address);
+
+	  base = relative_reloc->data[i].address + 8;
+	  i++;
+
+	  while (i < count)
+	    {
+	      uint64_t bitmap = 0;
+	      for (; i < count; i++)
+		{
+		  bfd_vma delta = (relative_reloc->data[i].address
+				   - base);
+		  /* Stop if it is too far from base.  */
+		  if (delta >= 63 * 8)
+		    break;
+		  /* Stop if it isn't a multiple of 8.  */
+		  if ((delta % 8) != 0)
+		    break;
+		  bitmap |= 1ULL << (delta / 8);
+		}
+
+	      if (bitmap == 0)
+		break;
+
+	      elf64_dt_relr_bitmap_add (info, &htab->dt_relr_bitmap,
+					(bitmap << 1) | 1);
+
+	      base += 63 * 8;
+	    }
+	}
+
+      new_count = htab->dt_relr_bitmap.count;
+      if (dt_relr_bitmap_count > new_count)
+	{
+	  /* Don't shrink the DT_RELR section size to avoid section
+	     layout oscillation.  Instead, pad the DT_RELR bitmap with
+	     1s which do not decode to more relocations.  */
+
+	  htab->dt_relr_bitmap.count = dt_relr_bitmap_count;
+	  count = dt_relr_bitmap_count - new_count;
+	  for (i = 0; i < count; i++)
+	    htab->dt_relr_bitmap.u.elf64[new_count + i] = 1;
+	}
+    }
+  else
+    {
+      /* Compute the 32-bit DT_RELR bitmap.  */
+      i = 0;
+      while (i < count)
+	{
+	  if ((relative_reloc->data[i].address % 1) != 0)
+	    abort ();
+
+	  elf32_dt_relr_bitmap_add (info, &htab->dt_relr_bitmap,
+				    relative_reloc->data[i].address);
+
+	  base = relative_reloc->data[i].address + 4;
+	  i++;
+
+	  while (i < count)
+	    {
+	      uint32_t bitmap = 0;
+	      for (; i < count; i++)
+		{
+		  bfd_vma delta = (relative_reloc->data[i].address
+				   - base);
+		  /* Stop if it is too far from base.  */
+		  if (delta >= 31 * 4)
+		    break;
+		  /* Stop if it isn't a multiple of 4.  */
+		  if ((delta % 4) != 0)
+		    break;
+		  bitmap |= 1ULL << (delta / 4);
+		}
+
+	      if (bitmap == 0)
+		break;
+
+	      elf32_dt_relr_bitmap_add (info, &htab->dt_relr_bitmap,
+					(bitmap << 1) | 1);
+
+	      base += 31 * 4;
+	    }
+	}
+
+      new_count = htab->dt_relr_bitmap.count;
+      if (dt_relr_bitmap_count > new_count)
+	{
+	  /* Don't shrink the DT_RELR section size to avoid section
+	     layout oscillation.  Instead, pad the DT_RELR bitmap with
+	     1s which do not decode to more relocations.  */
+
+	  htab->dt_relr_bitmap.count = dt_relr_bitmap_count;
+	  count = dt_relr_bitmap_count - new_count;
+	  for (i = 0; i < count; i++)
+	    htab->dt_relr_bitmap.u.elf32[new_count + i] = 1;
+	}
+    }
+
+  if (htab->dt_relr_bitmap.count != dt_relr_bitmap_count)
+    {
+      if (need_layout)
+	{
+	  /* The .relr.dyn section size is changed.  Update the section
+	     size and tell linker to layout sections again.  */
+	  htab->elf.srelrdyn->size =
+	    (htab->dt_relr_bitmap.count
+	     * (ABI_64_P (info->output_bfd) ? 8 : 4));
+
+	  *need_layout = true;
+	}
+      else
+	info->callbacks->einfo
+	  /* xgettext:c-format */
+	  (_("%F%P: %pB: size of compact relative reloc section is "
+	     "changed: new (%lu) != old (%lu)\n"),
+	   info->output_bfd, htab->dt_relr_bitmap.count,
+	   dt_relr_bitmap_count);
+    }
+}
+
+/* Write out the DT_RELR section.  */
+
+static void
+elf_x86_write_dl_relr_bitmap (struct bfd_link_info *info,
+			      struct elf_x86_link_hash_table *htab)
+{
+  asection *sec = htab->elf.srelrdyn;
+  bfd_size_type size = sec->size;
+  bfd_size_type i;
+  unsigned char *contents;
+
+  contents = (unsigned char *) bfd_alloc (sec->owner, size);
+  if (contents == NULL)
+    info->callbacks->einfo
+      /* xgettext:c-format */
+      (_("%F%P: %pB: failed to allocate compact relative reloc section\n"),
+       info->output_bfd);
+
+  /* Cache the section contents for elf_link_input_bfd.  */
+  sec->contents = contents;
+
+  if (ABI_64_P (info->output_bfd))
+    for (i = 0; i < htab->dt_relr_bitmap.count; i++, contents += 8)
+      bfd_put_64 (info->output_bfd, htab->dt_relr_bitmap.u.elf64[i],
+		  contents);
+  else
+    for (i = 0; i < htab->dt_relr_bitmap.count; i++, contents += 4)
+      bfd_put_32 (info->output_bfd, htab->dt_relr_bitmap.u.elf32[i],
+		  contents);
+}
+
+/* Sort relative relocations by address.  */
+
+static int
+elf_x86_relative_reloc_compare (const void *pa, const void *pb)
+{
+  struct elf_x86_relative_reloc_record *a =
+    (struct elf_x86_relative_reloc_record *) pa;
+  struct elf_x86_relative_reloc_record *b =
+    (struct elf_x86_relative_reloc_record *) pb;
+  if (a->address < b->address)
+    return -1;
+  if (a->address > b->address)
+    return 1;
+  return 0;
+}
+
+enum dynobj_sframe_plt_type
+{
+  SFRAME_PLT = 1,
+  SFRAME_PLT_SEC = 2
+};
+
+/* Create SFrame stack trace info for the plt entries in the .plt section
+   of type PLT_SEC_TYPE.  */
+
+static bool
+_bfd_x86_elf_create_sframe_plt (bfd *output_bfd,
+				struct bfd_link_info *info,
+				unsigned int plt_sec_type)
+{
+  struct elf_x86_link_hash_table *htab;
+  const struct elf_backend_data *bed;
+
+  bool plt0_generated_p;
+  unsigned int plt0_entry_size;
+  unsigned char func_info;
+  uint32_t fre_type;
+  /* The dynamic plt section for which .sframe stack trace information is being
+     created.  */
+  asection *dpltsec;
+
+  int err = 0;
+
+  sframe_encoder_ctx **ectx = NULL;
+  unsigned plt_entry_size = 0;
+  unsigned int num_pltn_fres = 0;
+  unsigned int num_pltn_entries = 0;
+
+  bed = get_elf_backend_data (output_bfd);
+  htab = elf_x86_hash_table (info, bed->target_id);
+  /* Whether SFrame stack trace info for plt0 is to be generated.  */
+  plt0_generated_p = htab->plt.has_plt0;
+  plt0_entry_size
+    = (plt0_generated_p) ? htab->sframe_plt->plt0_entry_size : 0;
+
+  switch (plt_sec_type)
+    {
+    case SFRAME_PLT:
+	{
+	  ectx = &htab->plt_cfe_ctx;
+	  dpltsec = htab->elf.splt;
+
+	  plt_entry_size = htab->plt.plt_entry_size;
+	  num_pltn_fres = htab->sframe_plt->pltn_num_fres;
+	  num_pltn_entries
+	    = (htab->elf.splt->size - plt0_entry_size) / plt_entry_size;
+
+	  break;
+	}
+    case SFRAME_PLT_SEC:
+	{
+	  ectx = &htab->plt_second_cfe_ctx;
+	  /* FIXME - this or htab->plt_second_sframe ?  */
+	  dpltsec = htab->plt_second_eh_frame;
+
+	  plt_entry_size = htab->sframe_plt->sec_pltn_entry_size;
+	  num_pltn_fres = htab->sframe_plt->sec_pltn_num_fres;
+	  num_pltn_entries
+		= htab->plt_second_eh_frame->size / plt_entry_size;
+	  break;
+	}
+    default:
+      /* No other value is possible.  */
+      return false;
+      break;
+    }
+
+  *ectx = sframe_encode (SFRAME_VERSION_2,
+			 0,
+			 SFRAME_ABI_AMD64_ENDIAN_LITTLE,
+			 SFRAME_CFA_FIXED_FP_INVALID,
+			 -8, /*  Fixed RA offset.  */
+			 &err);
+
+  /* FRE type is dependent on the size of the function.  */
+  fre_type = sframe_calc_fre_type (dpltsec->size);
+  func_info = sframe_fde_create_func_info (fre_type, SFRAME_FDE_TYPE_PCINC);
+
+  /* Add SFrame FDE and the associated FREs for plt0 if plt0 has been
+     generated.  */
+  if (plt0_generated_p)
+    {
+      /* Add SFrame FDE for plt0, the function start address is updated later
+	 at _bfd_elf_merge_section_sframe time.  */
+      sframe_encoder_add_funcdesc_v2 (*ectx,
+				      0, /* func start addr.  */
+				      plt0_entry_size,
+				      func_info,
+				      16,
+				      0 /* Num FREs.  */);
+      sframe_frame_row_entry plt0_fre;
+      unsigned int num_plt0_fres = htab->sframe_plt->plt0_num_fres;
+      for (unsigned int j = 0; j < num_plt0_fres; j++)
+	{
+	  plt0_fre = *(htab->sframe_plt->plt0_fres[j]);
+	  sframe_encoder_add_fre (*ectx, 0, &plt0_fre);
+	}
+    }
+
+
+  if (num_pltn_entries)
+    {
+      /* pltn entries use an SFrame FDE of type
+	 SFRAME_FDE_TYPE_PCMASK to exploit the repetitive
+	 pattern of the instructions in these entries.  Using this SFrame FDE
+	 type helps in keeping the SFrame stack trace info for pltn entries
+	 compact.  */
+      func_info	= sframe_fde_create_func_info (fre_type,
+					       SFRAME_FDE_TYPE_PCMASK);
+      /* Add the SFrame FDE for all PCs starting at the first pltn entry (hence,
+	 function start address = plt0_entry_size.  As usual, this will be
+	 updated later at _bfd_elf_merge_section_sframe, by when the
+	 sections are relocated.  */
+      sframe_encoder_add_funcdesc_v2 (*ectx,
+				      plt0_entry_size, /* func start addr.  */
+				      dpltsec->size - plt0_entry_size,
+				      func_info,
+				      16,
+				      0 /* Num FREs.  */);
+
+      sframe_frame_row_entry pltn_fre;
+      /* Now add the FREs for pltn.  Simply adding the two FREs suffices due
+	 to the usage of SFRAME_FDE_TYPE_PCMASK above.  */
+      for (unsigned int j = 0; j < num_pltn_fres; j++)
+	{
+	  pltn_fre = *(htab->sframe_plt->pltn_fres[j]);
+	  sframe_encoder_add_fre (*ectx, 1, &pltn_fre);
+	}
+    }
+
+  return true;
+}
+
+/* Put contents of the .sframe section corresponding to the specified
+   PLT_SEC_TYPE.  */
+
+static bool
+_bfd_x86_elf_write_sframe_plt (bfd *output_bfd,
+			       struct bfd_link_info *info,
+			       unsigned int plt_sec_type)
+{
+  struct elf_x86_link_hash_table *htab;
+  const struct elf_backend_data *bed;
+  sframe_encoder_ctx *ectx;
+  size_t sec_size;
+  asection *sec;
+  bfd *dynobj;
+
+  int err = 0;
+
+  bed = get_elf_backend_data (output_bfd);
+  htab = elf_x86_hash_table (info, bed->target_id);
+  dynobj = htab->elf.dynobj;
+
+  switch (plt_sec_type)
+    {
+    case SFRAME_PLT:
+      ectx = htab->plt_cfe_ctx;
+      sec = htab->plt_sframe;
+      break;
+    case SFRAME_PLT_SEC:
+      ectx = htab->plt_second_cfe_ctx;
+      sec = htab->plt_second_sframe;
+      break;
+    default:
+      /* No other value is possible.  */
+      return false;
+      break;
+    }
+
+  BFD_ASSERT (ectx);
+
+  void *contents = sframe_encoder_write (ectx, &sec_size, &err);
+
+  sec->size = (bfd_size_type) sec_size;
+  sec->contents = (unsigned char *) bfd_zalloc (dynobj, sec->size);
+  memcpy (sec->contents, contents, sec_size);
+
+  sframe_encoder_free (&ectx);
+
+  return true;
+}
+
+bool
+_bfd_elf_x86_size_relative_relocs (struct bfd_link_info *info,
+				   bool *need_layout)
+{
+  struct elf_x86_link_hash_table *htab;
+  const struct elf_backend_data *bed;
+  bool is_x86_64;
+  bfd_size_type i, count, unaligned_count;
+  asection *sec, *srel;
+
+  /* Do nothing for ld -r.  */
+  if (bfd_link_relocatable (info))
+    return true;
+
+  bed = get_elf_backend_data (info->output_bfd);
+  htab = elf_x86_hash_table (info, bed->target_id);
+  if (htab == NULL)
+    return false;
+
+  count = htab->relative_reloc.count;
+  unaligned_count = htab->unaligned_relative_reloc.count;
+  if (count == 0)
+    {
+      if (htab->generate_relative_reloc_pass == 0
+	  && htab->elf.srelrdyn != NULL)
+	{
+	  /* Remove the empty .relr.dyn sections now.  */
+	  if (!bfd_is_abs_section (htab->elf.srelrdyn->output_section))
+	    {
+	      bfd_section_list_remove
+		(info->output_bfd, htab->elf.srelrdyn->output_section);
+	      info->output_bfd->section_count--;
+	    }
+	  bfd_section_list_remove (htab->elf.srelrdyn->owner,
+				   htab->elf.srelrdyn);
+	  htab->elf.srelrdyn->owner->section_count--;
+	}
+      if (unaligned_count == 0)
+	{
+	  htab->generate_relative_reloc_pass++;
+	  return true;
+	}
+    }
+
+  is_x86_64 = bed->target_id == X86_64_ELF_DATA;
+
+  /* Size relative relocations.  */
+  if (htab->generate_relative_reloc_pass)
+    {
+      /* Reset the regular relative relocation count.  */
+      for (i = 0; i < unaligned_count; i++)
+	{
+	  sec = htab->unaligned_relative_reloc.data[i].sec;
+	  srel = elf_section_data (sec)->sreloc;
+	  srel->reloc_count = 0;
+	}
+    }
+  else
+    {
+      /* Remove the reserved space for compact relative relocations.  */
+      if (count)
+	{
+	  asection *sgot = htab->elf.sgot;
+	  asection *srelgot = htab->elf.srelgot;
+
+	  for (i = 0; i < count; i++)
+	    {
+	      sec = htab->relative_reloc.data[i].sec;
+	      if (sec == sgot)
+		srel = srelgot;
+	      else
+		srel = elf_section_data (sec)->sreloc;
+	      srel->size -= htab->sizeof_reloc;
+	    }
+	}
+    }
+
+  /* Size unaligned relative relocations.  */
+  if (unaligned_count)
+    elf_x86_size_or_finish_relative_reloc (is_x86_64, info, htab,
+					   true, NULL);
+
+  if (count)
+    {
+      elf_x86_size_or_finish_relative_reloc (is_x86_64, info, htab,
+					     false, NULL);
+
+      /* Sort relative relocations by addresses.  We only need to
+	 sort them in the first pass since the relative positions
+	 won't change.  */
+      if (htab->generate_relative_reloc_pass == 0)
+	qsort (htab->relative_reloc.data, count,
+	       sizeof (struct elf_x86_relative_reloc_record),
+	       elf_x86_relative_reloc_compare);
+
+      elf_x86_compute_dl_relr_bitmap (info, htab, need_layout);
+    }
+
+  htab->generate_relative_reloc_pass++;
+
+  return true;
+}
+
+bool
+_bfd_elf_x86_finish_relative_relocs (struct bfd_link_info *info)
+{
+  struct elf_x86_link_hash_table *htab;
+  const struct elf_backend_data *bed;
+  Elf_Internal_Rela outrel;
+  bool is_x86_64;
+  bfd_size_type count;
+
+  /* Do nothing for ld -r.  */
+  if (bfd_link_relocatable (info))
+    return true;
+
+  bed = get_elf_backend_data (info->output_bfd);
+  htab = elf_x86_hash_table (info, bed->target_id);
+  if (htab == NULL)
+    return false;
+
+  is_x86_64 = bed->target_id == X86_64_ELF_DATA;
+
+  outrel.r_info = htab->r_info (0, htab->relative_r_type);
+
+  if (htab->unaligned_relative_reloc.count)
+    elf_x86_size_or_finish_relative_reloc (is_x86_64, info, htab,
+					   true, &outrel);
+
+  count = htab->relative_reloc.count;
+  if (count)
+    {
+      elf_x86_size_or_finish_relative_reloc (is_x86_64, info, htab,
+					     false, &outrel);
+
+      elf_x86_compute_dl_relr_bitmap (info, htab, NULL);
+
+      elf_x86_write_dl_relr_bitmap (info, htab);
+    }
+
+  return true;
+}
+
+bool
+_bfd_elf_x86_valid_reloc_p (asection *input_section,
+			    struct bfd_link_info *info,
+			    struct elf_x86_link_hash_table *htab,
+			    const Elf_Internal_Rela *rel,
+			    struct elf_link_hash_entry *h,
+			    Elf_Internal_Sym *sym,
+			    Elf_Internal_Shdr *symtab_hdr,
+			    bool *no_dynreloc_p)
+{
+  bool valid_p = true;
+
+  *no_dynreloc_p = false;
+
+  /* Check If relocation against non-preemptible absolute symbol is
+     valid in PIC.  FIXME: Can't use SYMBOL_REFERENCES_LOCAL_P since
+     it may call _bfd_elf_link_hide_sym_by_version and result in
+     ld-elfvers/ vers21 test failure.  */
+  if (bfd_link_pic (info)
+      && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, h)))
+    {
+      const struct elf_backend_data *bed;
+      unsigned int r_type;
+      Elf_Internal_Rela irel;
+
+      /* Skip non-absolute symbol.  */
+      if (h)
+	{
+	  if (!ABS_SYMBOL_P (h))
+	    return valid_p;
+	}
+      else if (sym->st_shndx != SHN_ABS)
+	return valid_p;
+
+      bed = get_elf_backend_data (input_section->owner);
+      r_type = ELF32_R_TYPE (rel->r_info);
+      irel = *rel;
+
+      /* Only allow relocations against absolute symbol, which can be
+	 resolved as absolute value + addend.  GOTPCREL and GOT32
+	 relocations are allowed since absolute value + addend is
+	 stored in the GOT slot.  */
+      if (bed->target_id == X86_64_ELF_DATA)
+	{
+	  r_type &= ~R_X86_64_converted_reloc_bit;
+	  valid_p = (r_type == R_X86_64_64
+		     || r_type == R_X86_64_32
+		     || r_type == R_X86_64_32S
+		     || r_type == R_X86_64_16
+		     || r_type == R_X86_64_8
+		     || r_type == R_X86_64_GOTPCREL
+		     || r_type == R_X86_64_GOTPCRELX
+		     || r_type == R_X86_64_REX_GOTPCRELX);
+	  if (!valid_p)
+	    {
+	      unsigned int r_symndx = htab->r_sym (rel->r_info);
+	      irel.r_info = htab->r_info (r_symndx, r_type);
+	    }
+	}
+      else
+	valid_p = (r_type == R_386_32
+		   || r_type == R_386_16
+		   || r_type == R_386_8
+		   || r_type == R_386_GOT32
+		   || r_type == R_386_GOT32X);
+
+      if (valid_p)
+	*no_dynreloc_p = true;
+      else
+	{
+	  const char *name;
+	  arelent internal_reloc;
+
+	  if (!bed->elf_info_to_howto (input_section->owner,
+				       &internal_reloc, &irel)
+	      || internal_reloc.howto == NULL)
+	    abort ();
+
+	  if (h)
+	    name = h->root.root.string;
+	  else
+	    name = bfd_elf_sym_name (input_section->owner, symtab_hdr,
+				     sym, NULL);
+	  info->callbacks->einfo
+	    /* xgettext:c-format */
+	    (_("%F%P: %pB: relocation %s against absolute symbol "
+	       "`%s' in section `%pA' is disallowed\n"),
+	     input_section->owner, internal_reloc.howto->name, name,
+	     input_section);
+	  bfd_set_error (bfd_error_bad_value);
+	}
+    }
+
+  return valid_p;
+}
+
 /* Set the sizes of the dynamic sections.  */
 
-bfd_boolean
+bool
 _bfd_x86_elf_size_dynamic_sections (bfd *output_bfd,
 				    struct bfd_link_info *info)
 {
   struct elf_x86_link_hash_table *htab;
   bfd *dynobj;
   asection *s;
-  bfd_boolean relocs;
+  bool relocs;
   bfd *ibfd;
   const struct elf_backend_data *bed
     = get_elf_backend_data (output_bfd);
 
   htab = elf_x86_hash_table (info, bed->target_id);
   if (htab == NULL)
-    return FALSE;
+    return false;
   dynobj = htab->elf.dynobj;
   if (dynobj == NULL)
     abort ();
@@ -1005,7 +2291,7 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 		     linker script /DISCARD/, so we'll be discarding
 		     the relocs too.  */
 		}
-	      else if (htab->target_os == is_vxworks
+	      else if (htab->elf.target_os == is_vxworks
 		       && strcmp (p->sec->output_section->name,
 				  ".tls_vars") == 0)
 		{
@@ -1020,8 +2306,7 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 		      && (info->flags & DF_TEXTREL) == 0)
 		    {
 		      info->flags |= DF_TEXTREL;
-		      if ((info->warn_shared_textrel && bfd_link_pic (info))
-			  || info->error_textrel)
+		      if (bfd_link_textrel_check (info))
 			/* xgettext:c-format */
 			info->callbacks->einfo
 			  (_("%P: %pB: warning: relocation "
@@ -1065,7 +2350,7 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 		      || *local_tls_type == GOT_TLS_IE_BOTH)
 		    s->size += htab->got_entry_size;
 		}
-	      if (bfd_link_pic (info)
+	      if ((bfd_link_pic (info) && *local_tls_type != GOT_ABS)
 		  || GOT_TLS_GD_ANY_P (*local_tls_type)
 		  || (*local_tls_type & GOT_TLS_IE))
 		{
@@ -1078,7 +2363,7 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 		    {
 		      htab->elf.srelplt->size += htab->sizeof_reloc;
 		      if (bed->target_id == X86_64_ELF_DATA)
-			htab->tlsdesc_plt = (bfd_vma) -1;
+			htab->elf.tlsdesc_plt = (bfd_vma) -1;
 		    }
 		}
 	    }
@@ -1125,22 +2410,22 @@ _bfd_x86_elf_size_dynamic_sections (bfd
   else if (htab->elf.irelplt)
     htab->next_irelative_index = htab->elf.irelplt->reloc_count - 1;
 
-  if (htab->tlsdesc_plt)
+  if (htab->elf.tlsdesc_plt)
     {
       /* NB: tlsdesc_plt is set only for x86-64.  If we're not using
 	 lazy TLS relocations, don't generate the PLT and GOT entries
 	 they require.  */
       if ((info->flags & DF_BIND_NOW))
-	htab->tlsdesc_plt = 0;
+	htab->elf.tlsdesc_plt = 0;
       else
 	{
-	  htab->tlsdesc_got = htab->elf.sgot->size;
+	  htab->elf.tlsdesc_got = htab->elf.sgot->size;
 	  htab->elf.sgot->size += htab->got_entry_size;
 	  /* Reserve room for the initial entry.
 	     FIXME: we could probably do away with it in this case.  */
 	  if (htab->elf.splt->size == 0)
 	    htab->elf.splt->size = htab->plt.plt_entry_size;
-	  htab->tlsdesc_plt = htab->elf.splt->size;
+	  htab->elf.tlsdesc_plt = htab->elf.splt->size;
 	  htab->elf.splt->size += htab->plt.plt_entry_size;
 	}
     }
@@ -1164,7 +2449,8 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 	  htab->elf.sgotplt->size = 0;
 	  /* Solaris requires to keep _GLOBAL_OFFSET_TABLE_ even if it
 	     isn't used.  */
-	  if (htab->elf.hgot != NULL && htab->target_os != is_solaris)
+	  if (htab->elf.hgot != NULL
+	      && htab->elf.target_os != is_solaris)
 	    {
 	      /* Remove the unused _GLOBAL_OFFSET_TABLE_ from symbol
 		 table. */
@@ -1203,16 +2489,70 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 	  = htab->non_lazy_plt->eh_frame_plt_size;
     }
 
+  /* No need to size the .sframe section explicitly because the write-out
+     mechanism is different.  Simply prep up the FDE/FRE for the
+     .plt section.  */
+  if (_bfd_elf_sframe_present (info))
+    {
+      if (htab->plt_sframe != NULL
+	  && htab->elf.splt != NULL
+	  && htab->elf.splt->size != 0
+	  && !bfd_is_abs_section (htab->elf.splt->output_section))
+	{
+	  _bfd_x86_elf_create_sframe_plt (output_bfd, info, SFRAME_PLT);
+	  /* FIXME - Dirty Hack.  Set the size to something non-zero for now,
+	     so that the section does not get stripped out below.  The precise
+	     size of this section is known only when the contents are
+	     serialized in _bfd_x86_elf_write_sframe_plt.  */
+	  htab->plt_sframe->size = sizeof (sframe_header) + 1;
+	}
+
+      /* FIXME - generate for .got.plt ?  */
+
+      /* Unwind info for the second PLT.  */
+      if (htab->plt_second_sframe != NULL
+	  && htab->plt_second != NULL
+	  && htab->plt_second->size != 0
+	  && !bfd_is_abs_section (htab->plt_second->output_section))
+	{
+	  _bfd_x86_elf_create_sframe_plt (output_bfd, info,
+					  SFRAME_PLT_SEC);
+	  /* FIXME - Dirty Hack.  Set the size to something non-zero for now,
+	     so that the section does not get stripped out below.  The precise
+	     size of this section is known only when the contents are
+	     serialized in _bfd_x86_elf_write_sframe_plt.  */
+	  htab->plt_second_sframe->size = sizeof (sframe_header) + 1;
+	}
+    }
+
+  asection *resolved_plt = NULL;
+
+  if (htab->params->mark_plt && htab->elf.dynamic_sections_created)
+    {
+      if (htab->plt_second != NULL)
+	resolved_plt = htab->plt_second;
+      else
+	resolved_plt = htab->elf.splt;
+
+      if (resolved_plt != NULL && resolved_plt->size == 0)
+	resolved_plt = NULL;
+    }
+
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
-  relocs = FALSE;
+  relocs = false;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
-      bfd_boolean strip_section = TRUE;
+      bool strip_section = true;
 
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
 
+      /* The .relr.dyn section for compact relative relocation will
+	 be filled later.  */
+      if (s == htab->elf.srelrdyn)
+	continue;
+
       if (s == htab->elf.splt
 	  || s == htab->elf.sgot)
 	{
@@ -1223,7 +2563,7 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 	     It's too late to tell BFD to get rid of the symbols.  */
 
 	  if (htab->elf.hplt != NULL)
-	    strip_section = FALSE;
+	    strip_section = false;
 	}
       else if (s == htab->elf.sgotplt
 	       || s == htab->elf.iplt
@@ -1233,6 +2573,8 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 	       || s == htab->plt_eh_frame
 	       || s == htab->plt_got_eh_frame
 	       || s == htab->plt_second_eh_frame
+	       || s == htab->plt_sframe
+	       || s == htab->plt_second_sframe
 	       || s == htab->elf.sdynbss
 	       || s == htab->elf.sdynrelro)
 	{
@@ -1243,7 +2585,7 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 	  if (s->size != 0
 	      && s != htab->elf.srelplt
 	      && s != htab->srelplt2)
-	    relocs = TRUE;
+	    relocs = true;
 
 	  /* We use the reloc_count field as a counter if we need
 	     to copy relocs into the output file.  */
@@ -1275,6 +2617,11 @@ _bfd_x86_elf_size_dynamic_sections (bfd
       if ((s->flags & SEC_HAS_CONTENTS) == 0)
 	continue;
 
+      /* Skip allocating contents for .sframe section as it is written
+	 out differently.  See below.  */
+      if ((s == htab->plt_sframe) || (s == htab->plt_second_sframe))
+	continue;
+
       /* NB: Initially, the iplt section has minimal alignment to
 	 avoid moving dot of the following section backwards when
 	 it is empty.  Update its section alignment now since it
@@ -1289,7 +2636,7 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 	 reloc instead of garbage.  */
       s->contents = (unsigned char *) bfd_zalloc (dynobj, s->size);
       if (s->contents == NULL)
-	return FALSE;
+	return false;
     }
 
   if (htab->plt_eh_frame != NULL
@@ -1324,79 +2671,29 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 		   + PLT_FDE_LEN_OFFSET));
     }
 
-  if (htab->elf.dynamic_sections_created)
+  if (_bfd_elf_sframe_present (info))
     {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in elf_{i386,x86_64}_finish_dynamic_sections,
-	 but we must add the entries now so that we get the correct
-	 size for the .dynamic section.  The DT_DEBUG entry is filled
-	 in by the dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info))
-	{
-	  if (!add_dynamic_entry (DT_DEBUG, 0))
-	    return FALSE;
-	}
-
-      if (htab->elf.splt->size != 0)
-	{
-	  /* DT_PLTGOT is used by prelink even if there is no PLT
-	     relocation.  */
-	  if (!add_dynamic_entry (DT_PLTGOT, 0))
-	    return FALSE;
-	}
-
-      if (htab->elf.srelplt->size != 0)
-	{
-	  if (!add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, htab->dt_reloc)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (htab->tlsdesc_plt
-	  && (!add_dynamic_entry (DT_TLSDESC_PLT, 0)
-	      || !add_dynamic_entry (DT_TLSDESC_GOT, 0)))
-	return FALSE;
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (htab->dt_reloc, 0)
-	      || !add_dynamic_entry (htab->dt_reloc_sz, 0)
-	      || !add_dynamic_entry (htab->dt_reloc_ent,
-				     htab->sizeof_reloc))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0)
-	    {
-	      if (htab->readonly_dynrelocs_against_ifunc)
-		{
-		  info->callbacks->einfo
-		    (_("%P%X: read-only segment has dynamic IFUNC relocations;"
-		       " recompile with %s\n"),
-		     bfd_link_dll (info) ? "-fPIC" : "-fPIE");
-		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
-		}
+      if (htab->plt_sframe != NULL
+	  && htab->elf.splt != NULL
+	  && htab->elf.splt->size != 0
+	  && htab->plt_sframe->contents == NULL)
+	_bfd_x86_elf_write_sframe_plt (output_bfd, info, SFRAME_PLT);
 
-	      if (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
-      if (htab->target_os == is_vxworks
-	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
-	return FALSE;
+      if (htab->plt_second_sframe != NULL
+	  && htab->elf.splt != NULL
+	  && htab->elf.splt->size != 0
+	  && htab->plt_second_sframe->contents == NULL)
+	_bfd_x86_elf_write_sframe_plt (output_bfd, info, SFRAME_PLT_SEC);
     }
-#undef add_dynamic_entry
 
-  return TRUE;
+  if (resolved_plt != NULL
+      && (!_bfd_elf_add_dynamic_entry (info, DT_X86_64_PLT, 0)
+	  || !_bfd_elf_add_dynamic_entry (info, DT_X86_64_PLTSZ, 0)
+	  || !_bfd_elf_add_dynamic_entry (info, DT_X86_64_PLTENT, 0)))
+    return false;
+
+  return _bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info,
+						  relocs);
 }
 
 /* Finish up the x86 dynamic sections.  */
@@ -1469,6 +2766,12 @@ _bfd_x86_elf_finish_dynamic_sections (bf
   if (sdyn == NULL || htab->elf.sgot == NULL)
     abort ();
 
+  asection *resolved_plt;
+  if (htab->plt_second != NULL)
+    resolved_plt = htab->plt_second;
+  else
+    resolved_plt = htab->elf.splt;
+
   sizeof_dyn = bed->s->sizeof_dyn;
   dyncon = sdyn->contents;
   dynconend = sdyn->contents + sdyn->size;
@@ -1482,7 +2785,7 @@ _bfd_x86_elf_finish_dynamic_sections (bf
       switch (dyn.d_tag)
 	{
 	default:
-	  if (htab->target_os == is_vxworks
+	  if (htab->elf.target_os == is_vxworks
 	      && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 	    break;
 	  continue;
@@ -1493,24 +2796,38 @@ _bfd_x86_elf_finish_dynamic_sections (bf
 	  break;
 
 	case DT_JMPREL:
-	  dyn.d_un.d_ptr = htab->elf.srelplt->output_section->vma;
+	  s = htab->elf.srelplt;
+	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
 	  break;
 
 	case DT_PLTRELSZ:
-	  s = htab->elf.srelplt->output_section;
+	  s = htab->elf.srelplt;
 	  dyn.d_un.d_val = s->size;
 	  break;
 
 	case DT_TLSDESC_PLT:
 	  s = htab->elf.splt;
 	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset
-	    + htab->tlsdesc_plt;
+	    + htab->elf.tlsdesc_plt;
 	  break;
 
 	case DT_TLSDESC_GOT:
 	  s = htab->elf.sgot;
 	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset
-	    + htab->tlsdesc_got;
+	    + htab->elf.tlsdesc_got;
+	  break;
+
+	case DT_X86_64_PLT:
+	  s = resolved_plt->output_section;
+	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
+	  break;
+
+	case DT_X86_64_PLTSZ:
+	  dyn.d_un.d_val = resolved_plt->size;
+	  break;
+
+	case DT_X86_64_PLTENT:
+	  dyn.d_un.d_ptr = htab->plt.plt_entry_size;
 	  break;
 	}
 
@@ -1609,6 +2926,74 @@ _bfd_x86_elf_finish_dynamic_sections (bf
 	}
     }
 
+  /* Make any adjustment if necessary and merge .sframe section to
+     create the final .sframe section for output_bfd.  */
+  if (htab->plt_sframe != NULL
+      && htab->plt_sframe->contents != NULL)
+    {
+      if (htab->elf.splt != NULL
+	  && htab->elf.splt->size != 0
+	  && (htab->elf.splt->flags & SEC_EXCLUDE) == 0
+	  && htab->elf.splt->output_section != NULL
+	  && htab->plt_sframe->output_section != NULL)
+	{
+	  bfd_vma plt_start = htab->elf.splt->output_section->vma;
+	  bfd_vma sframe_start = htab->plt_sframe->output_section->vma
+				   + htab->plt_sframe->output_offset
+				   + PLT_SFRAME_FDE_START_OFFSET;
+#if 0 /* FIXME Testing only. Remove before review.  */
+	  bfd_vma test_value = (plt_start - sframe_start)
+	    + htab->plt_sframe->output_section->vma
+	    + htab->plt_sframe->output_offset
+	    + PLT_SFRAME_FDE_START_OFFSET;
+	  bfd_put_signed_32 (dynobj, test_value,
+#endif
+	  bfd_put_signed_32 (dynobj, plt_start - sframe_start,
+			     htab->plt_sframe->contents
+			     + PLT_SFRAME_FDE_START_OFFSET);
+	}
+      if (htab->plt_sframe->sec_info_type == SEC_INFO_TYPE_SFRAME)
+	{
+	  if (! _bfd_elf_merge_section_sframe (output_bfd, info,
+					       htab->plt_sframe,
+					       htab->plt_sframe->contents))
+	    return NULL;
+	}
+    }
+
+  if (htab->plt_second_sframe != NULL
+      && htab->plt_second_sframe->contents != NULL)
+    {
+      if (htab->plt_second != NULL
+	  && htab->plt_second->size != 0
+	  && (htab->plt_second->flags & SEC_EXCLUDE) == 0
+	  && htab->plt_second->output_section != NULL
+	  && htab->plt_second_sframe->output_section != NULL)
+	{
+	  bfd_vma plt_start = htab->plt_second->output_section->vma;
+	  bfd_vma sframe_start
+	    = (htab->plt_second_sframe->output_section->vma
+	       + htab->plt_second_sframe->output_offset
+	       + PLT_SFRAME_FDE_START_OFFSET);
+#if 0 /* FIXME Testing only. Remove before review.  */
+	  bfd_vma test_value = (plt_start - sframe_start)
+	    + htab->plt_second_sframe->output_section->vma
+	    + htab->plt_second_sframe->output_offset
+	    + PLT_SFRAME_FDE_START_OFFSET;
+	  bfd_put_signed_32 (dynobj, test_value,
+#endif
+	  bfd_put_signed_32 (dynobj, plt_start - sframe_start,
+			     htab->plt_second_sframe->contents
+			     + PLT_SFRAME_FDE_START_OFFSET);
+	}
+      if (htab->plt_second_sframe->sec_info_type == SEC_INFO_TYPE_SFRAME)
+	{
+	  if (! _bfd_elf_merge_section_sframe (output_bfd, info,
+					       htab->plt_second_sframe,
+					       htab->plt_second_sframe->contents))
+	    return NULL;
+	}
+    }
   if (htab->elf.sgot && htab->elf.sgot->size > 0)
     elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
       = htab->got_entry_size;
@@ -1617,19 +3002,19 @@ _bfd_x86_elf_finish_dynamic_sections (bf
 }
 
 
-bfd_boolean
+bool
 _bfd_x86_elf_always_size_sections (bfd *output_bfd,
 				   struct bfd_link_info *info)
 {
   asection *tls_sec = elf_hash_table (info)->tls_sec;
 
-  if (tls_sec)
+  if (tls_sec && !bfd_link_relocatable (info))
     {
       struct elf_link_hash_entry *tlsbase;
 
       tlsbase = elf_link_hash_lookup (elf_hash_table (info),
 				      "_TLS_MODULE_BASE_",
-				      FALSE, FALSE, FALSE);
+				      false, false, false);
 
       if (tlsbase && tlsbase->type == STT_TLS)
 	{
@@ -1640,13 +3025,13 @@ _bfd_x86_elf_always_size_sections (bfd *
 
 	  htab = elf_x86_hash_table (info, bed->target_id);
 	  if (htab == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (!(_bfd_generic_link_add_one_symbol
 		(info, output_bfd, "_TLS_MODULE_BASE_", BSF_LOCAL,
-		 tls_sec, 0, NULL, FALSE,
+		 tls_sec, 0, NULL, false,
 		 bed->collect, &bh)))
-	    return FALSE;
+	    return false;
 
 	  htab->tls_module_base = bh;
 
@@ -1654,25 +3039,24 @@ _bfd_x86_elf_always_size_sections (bfd *
 	  tlsbase->def_regular = 1;
 	  tlsbase->other = STV_HIDDEN;
 	  tlsbase->root.linker_def = 1;
-	  (*bed->elf_backend_hide_symbol) (info, tlsbase, TRUE);
+	  (*bed->elf_backend_hide_symbol) (info, tlsbase, true);
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 void
 _bfd_x86_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
-				     const Elf_Internal_Sym *isym,
-				     bfd_boolean definition,
-				     bfd_boolean dynamic ATTRIBUTE_UNUSED)
+				     unsigned int st_other,
+				     bool definition,
+				     bool dynamic ATTRIBUTE_UNUSED)
 {
   if (definition)
     {
       struct elf_x86_link_hash_entry *eh
 	= (struct elf_x86_link_hash_entry *) h;
-      eh->def_protected = (ELF_ST_VISIBILITY (isym->st_other)
-			   == STV_PROTECTED);
+      eh->def_protected = ELF_ST_VISIBILITY (st_other) == STV_PROTECTED;
     }
 }
 
@@ -1688,37 +3072,6 @@ _bfd_x86_elf_copy_indirect_symbol (struc
   edir = (struct elf_x86_link_hash_entry *) dir;
   eind = (struct elf_x86_link_hash_entry *) ind;
 
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
   if (ind->root.type == bfd_link_hash_indirect
       && dir->got.refcount <= 0)
     {
@@ -1753,7 +3106,7 @@ _bfd_x86_elf_copy_indirect_symbol (struc
 /* Remove undefined weak symbol from the dynamic symbol table if it
    is resolved to 0.   */
 
-bfd_boolean
+bool
 _bfd_x86_elf_fixup_symbol (struct bfd_link_info *info,
 			   struct elf_link_hash_entry *h)
 {
@@ -1764,7 +3117,7 @@ _bfd_x86_elf_fixup_symbol (struct bfd_li
       _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
 			      h->dynstr_index);
     }
-  return TRUE;
+  return true;
 }
 
 /* Change the STT_GNU_IFUNC symbol defined in position-dependent
@@ -1782,8 +3135,7 @@ _bfd_x86_elf_link_fixup_ifunc_symbol (st
       && h->def_regular
       && h->dynindx != -1
       && h->plt.offset != (bfd_vma) -1
-      && h->type == STT_GNU_IFUNC
-      && h->pointer_equality_needed)
+      && h->type == STT_GNU_IFUNC)
     {
       asection *plt_s;
       bfd_vma plt_offset;
@@ -1813,15 +3165,52 @@ _bfd_x86_elf_link_fixup_ifunc_symbol (st
     }
 }
 
+/* Report relative relocation.  */
+
+void
+_bfd_x86_elf_link_report_relative_reloc
+  (struct bfd_link_info *info, asection *asect,
+   struct elf_link_hash_entry *h, Elf_Internal_Sym *sym,
+   const char *reloc_name, const void *reloc)
+{
+  const char *name;
+  bfd *abfd;
+  const Elf_Internal_Rela *rel = (const Elf_Internal_Rela *) reloc;
+
+  /* Use the output BFD for linker created sections.  */
+  if ((asect->flags & SEC_LINKER_CREATED) != 0)
+    abfd = info->output_bfd;
+  else
+    abfd = asect->owner;
+
+  if (h != NULL && h->root.root.string != NULL)
+    name = h->root.root.string;
+  else
+    name = bfd_elf_sym_name (abfd, &elf_symtab_hdr (abfd), sym, NULL);
+
+  if (asect->use_rela_p)
+    info->callbacks->einfo
+      (_("%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against "
+	 "'%s' " "for section '%pA' in %pB\n"),
+       info->output_bfd, reloc_name, rel->r_offset, rel->r_info,
+       rel->r_addend, name, asect, abfd);
+  else
+    info->callbacks->einfo
+      (_("%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section "
+	 "'%pA' in %pB\n"),
+       info->output_bfd, reloc_name, rel->r_offset, rel->r_info, name,
+       asect, abfd);
+}
+
 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
 
-bfd_boolean
+bool
 _bfd_x86_elf_hash_symbol (struct elf_link_hash_entry *h)
 {
   if (h->plt.offset != (bfd_vma) -1
       && !h->def_regular
       && !h->pointer_equality_needed)
-    return FALSE;
+    return false;
 
   return _bfd_elf_hash_symbol (h);
 }
@@ -1832,7 +3221,7 @@ _bfd_x86_elf_hash_symbol (struct elf_lin
    change the definition to something the rest of the link can
    understand.  */
 
-bfd_boolean
+bool
 _bfd_x86_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				    struct elf_link_hash_entry *h)
 {
@@ -1843,6 +3232,27 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
   const struct elf_backend_data *bed
     = get_elf_backend_data (info->output_bfd);
 
+  eh = (struct elf_x86_link_hash_entry *) h;
+
+  /* Clear GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS if it is turned
+     on by an input relocatable file and there is a non-GOT/non-PLT
+     reference from another relocatable file without it.
+     NB: There can be non-GOT reference in data sections in input with
+     GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS.  */
+  if (eh->non_got_ref_without_indirect_extern_access
+      && info->indirect_extern_access == 1
+      && bfd_link_executable (info))
+    {
+      unsigned int needed_1;
+      info->indirect_extern_access = 0;
+      /* Turn off nocopyreloc if implied by indirect_extern_access.  */
+      if (info->nocopyreloc == 2)
+	info->nocopyreloc = 0;
+      needed_1 = bfd_h_get_32 (info->output_bfd, info->needed_1_p);
+      needed_1 &= ~GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS;
+      bfd_h_put_32 (info->output_bfd, needed_1, info->needed_1_p);
+    }
+
   /* STT_GNU_IFUNC symbol must go through PLT. */
   if (h->type == STT_GNU_IFUNC)
     {
@@ -1855,7 +3265,7 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
 	  struct elf_dyn_relocs **pp;
 
 	  eh = (struct elf_x86_link_hash_entry *) h;
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 	    {
 	      pc_count += p->pc_count;
 	      p->count -= p->pc_count;
@@ -1881,6 +3291,10 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
 		    h->plt.refcount += 1;
 		}
 	    }
+
+	  /* GOTOFF relocation needs PLT.  */
+	  if (eh->gotoff_ref)
+	    h->plt.refcount = 1;
 	}
 
       if (h->plt.refcount <= 0)
@@ -1888,7 +3302,7 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
 	  h->plt.offset = (bfd_vma) -1;
 	  h->needs_plt = 0;
 	}
-      return TRUE;
+      return true;
     }
 
   /* If this is a function, put it in the procedure linkage table.  We
@@ -1911,7 +3325,7 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     /* It's possible that we incorrectly decided a .plt reloc was needed
@@ -1921,8 +3335,6 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
        the link may change h->type.  So fix it now.  */
     h->plt.offset = (bfd_vma) -1;
 
-  eh = (struct elf_x86_link_hash_entry *) h;
-
   /* If this is a weak symbol, and there is a real definition, the
      processor independent code will have arranged for us to see the
      real definition first, and we can just use the same value.  */
@@ -1940,7 +3352,7 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
 	  h->non_got_ref = def->non_got_ref;
 	  eh->needs_copy = def->needs_copy;
 	}
-      return TRUE;
+      return true;
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
@@ -1951,24 +3363,24 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
   if (!bfd_link_executable (info))
-    return TRUE;
+    return true;
 
   /* If there are no references to this symbol that do not use the
      GOT nor R_386_GOTOFF relocation, we don't need to generate a copy
      reloc.  NB: gotoff_ref is always 0 for x86-64.  */
   if (!h->non_got_ref && !eh->gotoff_ref)
-    return TRUE;
+    return true;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc || SYMBOL_NO_COPYRELOC (info, eh))
     {
       h->non_got_ref = 0;
-      return TRUE;
+      return true;
     }
 
   htab = elf_x86_hash_table (info, bed->target_id);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   /* If there aren't any dynamic relocs in read-only sections nor
      R_386_GOTOFF relocation, then we can keep the dynamic relocs and
@@ -1978,15 +3390,15 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
   if (ELIMINATE_COPY_RELOCS
       && (bed->target_id == X86_64_ELF_DATA
 	  || (!eh->gotoff_ref
-	      && htab->target_os != is_vxworks)))
+	      && htab->elf.target_os != is_vxworks)))
     {
       /* If we don't find any dynamic relocs in read-only sections,
 	 then we'll be keeping the dynamic relocs and avoiding the copy
 	 reloc.  */
-      if (!readonly_dynrelocs (h))
+      if (!_bfd_elf_readonly_dynrelocs (h))
 	{
 	  h->non_got_ref = 0;
-	  return TRUE;
+	  return true;
 	}
     }
 
@@ -2015,6 +3427,24 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
     }
   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
+      if (eh->def_protected && bfd_link_executable (info))
+	for (p = h->dyn_relocs; p != NULL; p = p->next)
+	  {
+	    /* Disallow copy relocation against non-copyable protected
+	       symbol.  */
+	    s = p->sec->output_section;
+	    if (s != NULL && (s->flags & SEC_READONLY) != 0)
+	      {
+		info->callbacks->einfo
+		  /* xgettext:c-format */
+		  (_("%F%P: %pB: copy relocation against non-copyable "
+		     "protected symbol `%s' in %pB\n"),
+		   p->sec->owner, h->root.root.string,
+		   h->root.u.def.section->owner);
+		return false;
+	      }
+	  }
+
       srel->size += htab->sizeof_reloc;
       h->needs_copy = 1;
     }
@@ -2025,7 +3455,7 @@ _bfd_x86_elf_adjust_dynamic_symbol (stru
 void
 _bfd_x86_elf_hide_symbol (struct bfd_link_info *info,
 			  struct elf_link_hash_entry *h,
-			  bfd_boolean force_local)
+			  bool force_local)
 {
   if (h->root.type == bfd_link_hash_undefweak
       && info->nointerp
@@ -2047,7 +3477,7 @@ _bfd_x86_elf_hide_symbol (struct bfd_lin
    SYMBOL_REFERENCES_LOCAL, but it also checks version script.  It
    works in check_relocs.  */
 
-bfd_boolean
+bool
 _bfd_x86_elf_link_symbol_references_local (struct bfd_link_info *info,
 					   struct elf_link_hash_entry *h)
 {
@@ -2056,10 +3486,10 @@ _bfd_x86_elf_link_symbol_references_loca
     = (struct elf_x86_link_hash_table *) info->hash;
 
   if (eh->local_ref > 1)
-    return TRUE;
+    return true;
 
   if (eh->local_ref == 1)
-    return FALSE;
+    return false;
 
   /* Unversioned symbols defined in regular objects can be forced local
      by linker version script.  A weak undefined symbol is forced local
@@ -2068,7 +3498,7 @@ _bfd_x86_elf_link_symbol_references_loca
      2. When building executable, there is no dynamic linker.  Or
      3. or "-z nodynamic-undefined-weak" is used.
    */
-  if (SYMBOL_REFERENCES_LOCAL (info, h)
+  if (_bfd_elf_symbol_refs_local_p (h, info, 1)
       || (h->root.type == bfd_link_hash_undefweak
 	  && (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 	      || (bfd_link_executable (info)
@@ -2079,11 +3509,11 @@ _bfd_x86_elf_link_symbol_references_loca
 	  && _bfd_elf_link_hide_sym_by_version (info, h)))
     {
       eh->local_ref = 2;
-      return TRUE;
+      return true;
     }
 
   eh->local_ref = 1;
-  return FALSE;
+  return false;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -2132,7 +3562,7 @@ elf_x86_64_get_plt_got_vma (struct elf_x
   return plt_p->sec->vma + offset + off + plt_p->plt_got_insn_size;
 }
 
-static bfd_boolean
+static bool
 elf_i386_valid_plt_reloc_p (unsigned int type)
 {
   return (type == R_386_JUMP_SLOT
@@ -2140,7 +3570,7 @@ elf_i386_valid_plt_reloc_p (unsigned int
 	  || type == R_386_IRELATIVE);
 }
 
-static bfd_boolean
+static bool
 elf_x86_64_valid_plt_reloc_p (unsigned int type)
 {
   return (type == R_X86_64_JUMP_SLOT
@@ -2168,7 +3598,8 @@ _bfd_x86_elf_get_synthetic_symtab (bfd *
   const struct elf_backend_data *bed;
   bfd_vma (*get_plt_got_vma) (struct elf_x86_plt *, bfd_vma, bfd_vma,
 			      bfd_vma);
-  bfd_boolean (*valid_plt_reloc_p) (unsigned int);
+  bool (*valid_plt_reloc_p) (unsigned int);
+  unsigned int jump_slot_reloc;
 
   dynrelbuf = NULL;
   if (count == 0)
@@ -2209,11 +3640,13 @@ _bfd_x86_elf_get_synthetic_symtab (bfd *
     {
       get_plt_got_vma = elf_x86_64_get_plt_got_vma;
       valid_plt_reloc_p = elf_x86_64_valid_plt_reloc_p;
+      jump_slot_reloc = R_X86_64_JUMP_SLOT;
     }
   else
     {
       get_plt_got_vma = elf_i386_get_plt_got_vma;
       valid_plt_reloc_p = elf_i386_valid_plt_reloc_p;
+      jump_slot_reloc = R_386_JUMP_SLOT;
       if (got_addr)
 	{
 	  /* Check .got.plt and then .got to get the _GLOBAL_OFFSET_TABLE_
@@ -2318,7 +3751,9 @@ _bfd_x86_elf_get_synthetic_symtab (bfd *
 		len = strlen ((*p->sym_ptr_ptr)->name);
 		memcpy (names, (*p->sym_ptr_ptr)->name, len);
 		names += len;
-		if (p->addend != 0)
+		/* There may be JUMP_SLOT and IRELATIVE relocations.
+		   JUMP_SLOT r_addend should be ignored.  */
+		if (p->addend != 0 && p->howto->type != jump_slot_reloc)
 		  {
 		    char buf[30], *a;
 
@@ -2347,15 +3782,14 @@ _bfd_x86_elf_get_synthetic_symtab (bfd *
   /* PLT entries with R_386_TLS_DESC relocations are skipped.  */
   if (n == 0)
     {
-bad_return:
+    bad_return:
       count = -1;
     }
   else
     count = n;
 
   for (j = 0; plts[j].name != NULL; j++)
-    if (plts[j].contents != NULL)
-      free (plts[j].contents);
+    free (plts[j].contents);
 
   free (dynrelbuf);
 
@@ -2399,7 +3833,7 @@ _bfd_x86_elf_parse_gnu_properties (bfd *
    return TRUE if APROP is updated.  Otherwise, return TRUE if BPROP
    should be merged with ABFD.  */
 
-bfd_boolean
+bool
 _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
 				   bfd *abfd ATTRIBUTE_UNUSED,
 				   bfd *bbfd ATTRIBUTE_UNUSED,
@@ -2407,7 +3841,9 @@ _bfd_x86_elf_merge_gnu_properties (struc
 				   elf_property *bprop)
 {
   unsigned int number, features;
-  bfd_boolean updated = FALSE;
+  bool updated = false;
+  const struct elf_backend_data *bed;
+  struct elf_x86_link_hash_table *htab;
   unsigned int pr_type = aprop != NULL ? aprop->pr_type : bprop->pr_type;
 
   if (pr_type == GNU_PROPERTY_X86_COMPAT_ISA_1_USED
@@ -2422,7 +3858,7 @@ _bfd_x86_elf_merge_gnu_properties (struc
 	      /* Remove this property since the other input file doesn't
 		 have it.  */
 	      aprop->pr_kind = property_remove;
-	      updated = TRUE;
+	      updated = true;
 	    }
 	}
       else
@@ -2437,15 +3873,37 @@ _bfd_x86_elf_merge_gnu_properties (struc
 	   || (pr_type >= GNU_PROPERTY_X86_UINT32_OR_LO
 	       && pr_type <= GNU_PROPERTY_X86_UINT32_OR_HI))
     {
+      features = 0;
+      if (pr_type == GNU_PROPERTY_X86_ISA_1_NEEDED)
+	{
+	  bed = get_elf_backend_data (info->output_bfd);
+	  htab = elf_x86_hash_table (info, bed->target_id);
+	  switch (htab->params->isa_level)
+	    {
+	    case 0:
+	      break;
+	    case 2:
+	      features = GNU_PROPERTY_X86_ISA_1_V2;
+	      break;
+	    case 3:
+	      features = GNU_PROPERTY_X86_ISA_1_V3;
+	      break;
+	    case 4:
+	      features = GNU_PROPERTY_X86_ISA_1_V4;
+	      break;
+	    default:
+	      abort ();
+	    }
+	}
       if (aprop != NULL && bprop != NULL)
 	{
 	  number = aprop->u.number;
-	  aprop->u.number = number | bprop->u.number;
+	  aprop->u.number = number | bprop->u.number | features;
 	  /* Remove the property if all bits are empty.  */
 	  if (aprop->u.number == 0)
 	    {
 	      aprop->pr_kind = property_remove;
-	      updated = TRUE;
+	      updated = true;
 	    }
 	  else
 	    updated = number != (unsigned int) aprop->u.number;
@@ -2455,11 +3913,12 @@ _bfd_x86_elf_merge_gnu_properties (struc
 	  /* Only one of APROP and BPROP can be NULL.  */
 	  if (aprop != NULL)
 	    {
+	      aprop->u.number |= features;
 	      if (aprop->u.number == 0)
 		{
 		  /* Remove APROP if all bits are empty.  */
 		  aprop->pr_kind = property_remove;
-		  updated = TRUE;
+		  updated = true;
 		}
 	    }
 	  else
@@ -2467,6 +3926,7 @@ _bfd_x86_elf_merge_gnu_properties (struc
 	      /* Return TRUE if APROP is NULL and all bits of BPROP
 		 aren't empty to indicate that BPROP should be added
 		 to ABFD.  */
+	      bprop->u.number |= features;
 	      updated = bprop->u.number != 0;
 	    }
 	}
@@ -2480,23 +3940,32 @@ _bfd_x86_elf_merge_gnu_properties (struc
 	 2. If APROP is NULL, remove x86 feature.
 	 3. Otherwise, do nothing.
        */
-      const struct elf_backend_data *bed
-	= get_elf_backend_data (info->output_bfd);
-      struct elf_x86_link_hash_table *htab
-	= elf_x86_hash_table (info, bed->target_id);
+      bed = get_elf_backend_data (info->output_bfd);
+      htab = elf_x86_hash_table (info, bed->target_id);
       if (!htab)
 	abort ();
       if (aprop != NULL && bprop != NULL)
 	{
-	  features = 0;
-	  if (htab->params->ibt)
-	    features = GNU_PROPERTY_X86_FEATURE_1_IBT;
-	  if (htab->params->shstk)
-	    features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
 	  number = aprop->u.number;
-	  /* Add GNU_PROPERTY_X86_FEATURE_1_IBT and
-	     GNU_PROPERTY_X86_FEATURE_1_SHSTK.  */
-	  aprop->u.number = (number & bprop->u.number) | features;
+	  aprop->u.number = number & bprop->u.number;
+	  if (pr_type == GNU_PROPERTY_X86_FEATURE_1_AND)
+	    {
+	      features = 0;
+	      if (htab->params->ibt)
+		features = GNU_PROPERTY_X86_FEATURE_1_IBT;
+	      if (htab->params->shstk)
+		features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
+	      if (htab->params->lam_u48)
+		features |= (GNU_PROPERTY_X86_FEATURE_1_LAM_U48
+			     | GNU_PROPERTY_X86_FEATURE_1_LAM_U57);
+	      else if (htab->params->lam_u57)
+		features |= GNU_PROPERTY_X86_FEATURE_1_LAM_U57;
+	      /* Add GNU_PROPERTY_X86_FEATURE_1_IBT,
+		 GNU_PROPERTY_X86_FEATURE_1_SHSTK,
+		 GNU_PROPERTY_X86_FEATURE_1_LAM_U48 and
+		 GNU_PROPERTY_X86_FEATURE_1_LAM_U57.  */
+	      aprop->u.number |= features;
+	    }
 	  updated = number != (unsigned int) aprop->u.number;
 	  /* Remove the property if all feature bits are cleared.  */
 	  if (aprop->u.number == 0)
@@ -2508,10 +3977,18 @@ _bfd_x86_elf_merge_gnu_properties (struc
 	     have them.  Set IBT and SHSTK properties for -z ibt and -z
 	     shstk if needed.  */
 	  features = 0;
-	  if (htab->params->ibt)
-	    features = GNU_PROPERTY_X86_FEATURE_1_IBT;
-	  if (htab->params->shstk)
-	    features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
+	  if (pr_type == GNU_PROPERTY_X86_FEATURE_1_AND)
+	    {
+	      if (htab->params->ibt)
+		features = GNU_PROPERTY_X86_FEATURE_1_IBT;
+	      if (htab->params->shstk)
+		features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
+	      if (htab->params->lam_u48)
+		features |= (GNU_PROPERTY_X86_FEATURE_1_LAM_U48
+			     | GNU_PROPERTY_X86_FEATURE_1_LAM_U57);
+	      else if (htab->params->lam_u57)
+		features |= GNU_PROPERTY_X86_FEATURE_1_LAM_U57;
+	    }
 	  if (features)
 	    {
 	      if (aprop != NULL)
@@ -2521,14 +3998,14 @@ _bfd_x86_elf_merge_gnu_properties (struc
 		}
 	      else
 		{
-		  updated = TRUE;
+		  updated = true;
 		  bprop->u.number = features;
 		}
 	    }
 	  else if (aprop != NULL)
 	    {
 	      aprop->pr_kind = property_remove;
-	      updated = TRUE;
+	      updated = true;
 	    }
 	}
       return updated;
@@ -2549,12 +4026,12 @@ bfd *
 _bfd_x86_elf_link_setup_gnu_properties
   (struct bfd_link_info *info, struct elf_x86_init_table *init_table)
 {
-  bfd_boolean normal_target;
-  bfd_boolean lazy_plt;
+  bool normal_target;
+  bool lazy_plt;
   asection *sec, *pltsec;
   bfd *dynobj;
-  bfd_boolean use_ibt_plt;
-  unsigned int plt_alignment, features;
+  bool use_ibt_plt;
+  unsigned int plt_alignment, features, isa_level;
   struct elf_x86_link_hash_table *htab;
   bfd *pbfd;
   bfd *ebfd = NULL;
@@ -2586,23 +4063,58 @@ _bfd_x86_elf_link_setup_gnu_properties
   if (htab->params->ibt)
     {
       features = GNU_PROPERTY_X86_FEATURE_1_IBT;
-      htab->params->cet_report &= ~cet_report_ibt;
+      htab->params->cet_report &= ~prop_report_ibt;
     }
   if (htab->params->shstk)
     {
       features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
-      htab->params->cet_report &= ~cet_report_shstk;
+      htab->params->cet_report &= ~prop_report_shstk;
+    }
+  if (!(htab->params->cet_report & (prop_report_ibt | prop_report_shstk)))
+    htab->params->cet_report = prop_report_none;
+  if (htab->params->lam_u48)
+    {
+      features |= (GNU_PROPERTY_X86_FEATURE_1_LAM_U48
+		   | GNU_PROPERTY_X86_FEATURE_1_LAM_U57);
+      htab->params->lam_u48_report = prop_report_none;
+      htab->params->lam_u57_report = prop_report_none;
+    }
+  else if (htab->params->lam_u57)
+    {
+      features |= GNU_PROPERTY_X86_FEATURE_1_LAM_U57;
+      htab->params->lam_u57_report = prop_report_none;
+    }
+
+  switch (htab->params->isa_level)
+    {
+    case 0:
+      isa_level = 0;
+      break;
+    case 1:
+      isa_level = GNU_PROPERTY_X86_ISA_1_BASELINE;
+      break;
+    case 2:
+      isa_level = GNU_PROPERTY_X86_ISA_1_V2;
+      break;
+    case 3:
+      isa_level = GNU_PROPERTY_X86_ISA_1_V3;
+      break;
+    case 4:
+      isa_level = GNU_PROPERTY_X86_ISA_1_V4;
+      break;
+    default:
+      abort ();
     }
-  if (!(htab->params->cet_report & (cet_report_ibt | cet_report_shstk)))
-    htab->params->cet_report = cet_report_none;
 
   if (ebfd != NULL)
     {
       prop = NULL;
       if (features)
 	{
-	  /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
-	     GNU_PROPERTY_X86_FEATURE_1_SHSTK.  */
+	  /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT,
+	     GNU_PROPERTY_X86_FEATURE_1_SHSTK,
+	     GNU_PROPERTY_X86_FEATURE_1_LAM_U48 and
+	     GNU_PROPERTY_X86_FEATURE_1_LAM_U57.  */
 	  prop = _bfd_elf_get_property (ebfd,
 					GNU_PROPERTY_X86_FEATURE_1_AND,
 					4);
@@ -2610,6 +4122,16 @@ _bfd_x86_elf_link_setup_gnu_properties
 	  prop->pr_kind = property_number;
 	}
 
+      if (isa_level)
+	{
+	  /* If ISA level is set, add GNU_PROPERTY_X86_ISA_1_NEEDED.  */
+	  prop = _bfd_elf_get_property (ebfd,
+					GNU_PROPERTY_X86_ISA_1_NEEDED,
+					4);
+	  prop->u.number |= isa_level;
+	  prop->pr_kind = property_number;
+	}
+
       /* Create the GNU property note section if needed.  */
       if (prop != NULL && pbfd == NULL)
 	{
@@ -2626,7 +4148,7 @@ _bfd_x86_elf_link_setup_gnu_properties
 
 	  if (!bfd_set_section_alignment (sec, class_align))
 	    {
-error_alignment:
+	    error_alignment:
 	      info->callbacks->einfo (_("%F%pA: failed to align section\n"),
 				      sec);
 	    }
@@ -2635,22 +4157,49 @@ error_alignment:
 	}
     }
 
-  if (htab->params->cet_report)
+  if (htab->params->cet_report
+      || htab->params->lam_u48_report
+      || htab->params->lam_u57_report)
     {
-      /* Report missing IBT and SHSTK properties.  */
+      /* Report missing IBT, SHSTK and LAM properties.  */
       bfd *abfd;
-      const char *msg;
+      const char *warning_msg = _("%P: %pB: warning: missing %s\n");
+      const char *error_msg = _("%X%P: %pB: error: missing %s\n");
+      const char *cet_msg = NULL;
+      const char *lam_u48_msg = NULL;
+      const char *lam_u57_msg = NULL;
+      const char *missing;
       elf_property_list *p;
-      bfd_boolean missing_ibt, missing_shstk;
-      bfd_boolean check_ibt
-	= !!(htab->params->cet_report & cet_report_ibt);
-      bfd_boolean check_shstk
-	= !!(htab->params->cet_report & cet_report_shstk);
+      bool missing_ibt, missing_shstk;
+      bool missing_lam_u48, missing_lam_u57;
+      bool check_ibt
+	= (htab->params->cet_report
+	   && (htab->params->cet_report & prop_report_ibt));
+      bool check_shstk
+	= (htab->params->cet_report
+	   && (htab->params->cet_report & prop_report_shstk));
 
-      if ((htab->params->cet_report & cet_report_warning))
-	msg = _("%P: %pB: warning: missing %s\n");
-      else
-	msg = _("%X%P: %pB: error: missing %s\n");
+      if (htab->params->cet_report)
+	{
+	  if ((htab->params->cet_report & prop_report_warning))
+	    cet_msg = warning_msg;
+	  else
+	    cet_msg = error_msg;
+	}
+      if (htab->params->lam_u48_report)
+	{
+	  if ((htab->params->lam_u48_report & prop_report_warning))
+	    lam_u48_msg = warning_msg;
+	  else
+	    lam_u48_msg = error_msg;
+	}
+      if (htab->params->lam_u57_report)
+	{
+	  if ((htab->params->lam_u57_report & prop_report_warning))
+	    lam_u57_msg = warning_msg;
+	  else
+	    lam_u57_msg = error_msg;
+	}
 
       for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
 	if (!(abfd->flags & (DYNAMIC | BFD_PLUGIN | BFD_LINKER_CREATED))
@@ -2662,23 +4211,38 @@ error_alignment:
 
 	    missing_ibt = check_ibt;
 	    missing_shstk = check_shstk;
+	    missing_lam_u48 = !!lam_u48_msg;
+	    missing_lam_u57 = !!lam_u57_msg;
 	    if (p)
 	      {
 		missing_ibt &= !(p->property.u.number
 				 & GNU_PROPERTY_X86_FEATURE_1_IBT);
 		missing_shstk &= !(p->property.u.number
 				   & GNU_PROPERTY_X86_FEATURE_1_SHSTK);
+		missing_lam_u48 &= !(p->property.u.number
+				     & GNU_PROPERTY_X86_FEATURE_1_LAM_U48);
+		missing_lam_u57 &= !(p->property.u.number
+				     & GNU_PROPERTY_X86_FEATURE_1_LAM_U57);
 	      }
 	    if (missing_ibt || missing_shstk)
 	      {
-		const char *missing;
 		if (missing_ibt && missing_shstk)
 		  missing = _("IBT and SHSTK properties");
 		else if (missing_ibt)
 		  missing = _("IBT property");
 		else
 		  missing = _("SHSTK property");
-		info->callbacks->einfo (msg, abfd, missing);
+		info->callbacks->einfo (cet_msg, abfd, missing);
+	      }
+	    if (missing_lam_u48)
+	      {
+		missing = _("LAM_U48 property");
+		info->callbacks->einfo (lam_u48_msg, abfd, missing);
+	      }
+	    if (missing_lam_u57)
+	      {
+		missing = _("LAM_U57 property");
+		info->callbacks->einfo (lam_u57_msg, abfd, missing);
 	      }
 	  }
     }
@@ -2754,7 +4318,8 @@ error_alignment:
      still be used with LD_AUDIT or LD_PROFILE if PLT entry is used for
      canonical function address.  */
   htab->plt.has_plt0 = 1;
-  normal_target = htab->target_os == is_normal;
+  htab->plt.plt_indirect_branch_offset = 0;
+  normal_target = htab->elf.target_os == is_normal;
 
   if (normal_target)
     {
@@ -2762,6 +4327,7 @@ error_alignment:
 	{
 	  htab->lazy_plt = init_table->lazy_ibt_plt;
 	  htab->non_lazy_plt = init_table->non_lazy_ibt_plt;
+	  htab->plt.plt_indirect_branch_offset = 4;
 	}
       else
 	{
@@ -2777,12 +4343,36 @@ error_alignment:
 
   pltsec = htab->elf.splt;
 
-  /* If the non-lazy PLT is available, use it for all PLT entries if
-     there are no PLT0 or no .plt section.  */
   if (htab->non_lazy_plt != NULL
       && (!htab->plt.has_plt0 || pltsec == NULL))
+    lazy_plt = false;
+  else
+    lazy_plt = true;
+
+  if (normal_target)
+    {
+      if (use_ibt_plt)
+	{
+	  if (lazy_plt)
+	    htab->sframe_plt = init_table->sframe_lazy_ibt_plt;
+	  else
+	    htab->sframe_plt = init_table->sframe_non_lazy_ibt_plt;
+	}
+      else
+	{
+	  if (lazy_plt)
+	    htab->sframe_plt = init_table->sframe_lazy_plt;
+	  else
+	    htab->sframe_plt = init_table->sframe_non_lazy_plt;
+	}
+    }
+  else
+    htab->sframe_plt = NULL;
+
+  /* If the non-lazy PLT is available, use it for all PLT entries if
+     there are no PLT0 or no .plt section.  */
+  if (!lazy_plt)
     {
-      lazy_plt = FALSE;
       if (bfd_link_pic (info))
 	htab->plt.plt_entry = htab->non_lazy_plt->pic_plt_entry;
       else
@@ -2797,7 +4387,6 @@ error_alignment:
     }
   else
     {
-      lazy_plt = TRUE;
       if (bfd_link_pic (info))
 	{
 	  htab->plt.plt0_entry = htab->lazy_plt->pic_plt0_entry;
@@ -2817,7 +4406,7 @@ error_alignment:
       htab->plt.eh_frame_plt = htab->lazy_plt->eh_frame_plt;
     }
 
-  if (htab->target_os == is_vxworks
+  if (htab->elf.target_os == is_vxworks
       && !elf_vxworks_create_dynamic_sections (dynobj, info,
 					       &htab->srelplt2))
     {
@@ -2866,9 +4455,6 @@ error_alignment:
 	  htab->interp = s;
 	}
 
-      /* Don't change PLT section alignment for NaCl since it uses
-	 64-byte PLT entry and sets PLT section alignment to 32
-	 bytes.  Don't create additional PLT sections for NaCl.  */
       if (normal_target)
 	{
 	  flagword pltflags = (bed->dynamic_sec_flags
@@ -2902,8 +4488,7 @@ error_alignment:
 	      if (use_ibt_plt)
 		{
 		  /* Create the second PLT for Intel IBT support.  IBT
-		     PLT is supported only for non-NaCl target and is
-		     is needed only for lazy binding.  */
+		     PLT is needed only for lazy binding.  */
 		  sec = bfd_make_section_anyway_with_flags (dynobj,
 							    ".plt.sec",
 							    pltflags);
@@ -2913,20 +4498,6 @@ error_alignment:
 		  if (!bfd_set_section_alignment (sec, plt_alignment))
 		    goto error_alignment;
 		}
-	      else if (htab->params->bndplt && ABI_64_P (dynobj))
-		{
-		  /* Create the second PLT for Intel MPX support.  MPX
-		     PLT is supported only for non-NaCl target in 64-bit
-		     mode and is needed only for lazy binding.  */
-		  sec = bfd_make_section_anyway_with_flags (dynobj,
-							    ".plt.sec",
-							    pltflags);
-		  if (sec == NULL)
-		    info->callbacks->einfo (_("%F%P: failed to create BND PLT section\n"));
-
-		  if (!bfd_set_section_alignment (sec, non_lazy_plt_alignment))
-		    goto error_alignment;
-		}
 
 	      htab->plt_second = sec;
 	    }
@@ -2977,6 +4548,39 @@ error_alignment:
 	      htab->plt_second_eh_frame = sec;
 	    }
 	}
+
+      /* .sframe sections are emitted for AMD64 ABI only.  */
+      if (ABI_64_P (info->output_bfd) && !info->no_ld_generated_unwind_info)
+	{
+	  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
+			    | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+			    | SEC_LINKER_CREATED);
+
+	  sec = bfd_make_section_anyway_with_flags (dynobj,
+						    ".sframe",
+						    flags);
+	  if (sec == NULL)
+	    info->callbacks->einfo (_("%F%P: failed to create PLT .sframe section\n"));
+
+	  // FIXME check this
+	  // if (!bfd_set_section_alignment (sec, class_align))
+	  //  goto error_alignment;
+
+	  htab->plt_sframe = sec;
+
+	  /* Second PLT is generated for Intel IBT + lazy plt.  */
+	  if (htab->plt_second != NULL)
+	    {
+	      sec = bfd_make_section_anyway_with_flags (dynobj,
+							".sframe",
+							flags);
+	      if (sec == NULL)
+		info->callbacks->einfo (_("%F%P: failed to create second PLT .sframe section\n"));
+
+	      htab->plt_second_sframe = sec;
+	    }
+	  /* FIXME - add later for plt_got. */
+	}
     }
 
   /* The .iplt section is used for IFUNC symbols in static
@@ -2998,6 +4602,23 @@ error_alignment:
 				  : bed->plt_alignment);
     }
 
+  if (bfd_link_executable (info)
+      && !info->nointerp
+      && !htab->params->has_dynamic_linker
+      && htab->params->static_before_all_inputs)
+    {
+      /* Report error for dynamic input objects if -static is passed at
+	 command-line before all input files without --dynamic-linker
+	 unless --no-dynamic-linker is used.  */
+      bfd *abfd;
+
+      for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
+	if ((abfd->flags & DYNAMIC))
+	  info->callbacks->einfo
+	    (_("%X%P: attempted static link of dynamic object `%pB'\n"),
+	     abfd);
+    }
+
   return pbfd;
 }
 
@@ -3005,8 +4626,7 @@ error_alignment:
 
 void
 _bfd_x86_elf_link_fixup_gnu_properties
-  (struct bfd_link_info *info ATTRIBUTE_UNUSED,
-   elf_property_list **listp)
+  (struct bfd_link_info *info, elf_property_list **listp)
 {
   elf_property_list *p;
 
@@ -3034,6 +4654,12 @@ _bfd_x86_elf_link_fixup_gnu_properties
 	      continue;
 	    }
 
+	  /* Keep LAM features only for 64-bit output.  */
+	  if (type == GNU_PROPERTY_X86_FEATURE_1_AND
+	      && !ABI_64_P (info->output_bfd))
+	    p->property.u.number &= ~(GNU_PROPERTY_X86_FEATURE_1_LAM_U48
+				      | GNU_PROPERTY_X86_FEATURE_1_LAM_U57);
+
 	  listp = &p->next;
 	}
       else if (type > GNU_PROPERTY_HIPROC)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-x86.h ./bfd/elfxx-x86.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/elfxx-x86.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/elfxx-x86.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* x86 specific support for ELF
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,6 +18,9 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+/* Don't generate unused section symbols.  */
+#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS false
+
 #include "sysdep.h"
 #include "bfd.h"
 #include "bfdlink.h"
@@ -25,12 +28,80 @@
 #include "elf-bfd.h"
 #include "hashtab.h"
 #include "elf-linker-x86.h"
+#include "elf/i386.h"
+#include "elf/x86-64.h"
+#include "sframe-api.h"
+
+#define X86_64_PCREL_TYPE_P(TYPE) \
+  ((TYPE) == R_X86_64_PC8 \
+   || (TYPE) == R_X86_64_PC16 \
+   || (TYPE) == R_X86_64_PC32 \
+   || (TYPE) == R_X86_64_PC64)
+#define I386_PCREL_TYPE_P(TYPE) ((TYPE) == R_386_PC32)
+#define X86_PCREL_TYPE_P(IS_X86_64, TYPE) \
+  ((IS_X86_64) ? X86_64_PCREL_TYPE_P (TYPE) : I386_PCREL_TYPE_P (TYPE))
+
+#define X86_64_SIZE_TYPE_P(TYPE) \
+  ((TYPE) == R_X86_64_SIZE32 || (TYPE) == R_X86_64_SIZE64)
+#define I386_SIZE_TYPE_P(TYPE) ((TYPE) == R_386_SIZE32)
+#define X86_SIZE_TYPE_P(IS_X86_64, TYPE) \
+  ((IS_X86_64) ? X86_64_SIZE_TYPE_P(TYPE) : I386_SIZE_TYPE_P (TYPE))
+
+#define X86_64_GOT_TYPE_P(TYPE) \
+  ((TYPE) == R_X86_64_GOTPCREL \
+   || (TYPE) == R_X86_64_GOTPCRELX \
+   || (TYPE) == R_X86_64_REX_GOTPCRELX \
+   || (TYPE) == R_X86_64_GOT32 \
+   || (TYPE) == R_X86_64_GOT64 \
+   || (TYPE) == R_X86_64_GOTPCREL64 \
+   || (TYPE) == R_X86_64_GOTPLT64)
+#define I386_GOT_TYPE_P(TYPE) \
+  ((TYPE) == R_386_GOT32 || (TYPE) == R_386_GOT32X)
+#define X86_GOT_TYPE_P(IS_X86_64, TYPE) \
+  ((IS_X86_64) ? X86_64_GOT_TYPE_P (TYPE) : I386_GOT_TYPE_P (TYPE))
+
+#define X86_64_RELATIVE_RELOC_TYPE_P(TYPE) \
+  (X86_64_PCREL_TYPE_P (TYPE) \
+   || (TYPE) == R_X86_64_8 \
+   || (TYPE) == R_X86_64_16 \
+   || (TYPE) == R_X86_64_32 \
+   || (TYPE) == R_X86_64_32S \
+   || (TYPE) == R_X86_64_64)
+#define I386_RELATIVE_RELOC_TYPE_P(TYPE) \
+  ((TYPE) == R_386_32 || (TYPE) == R_386_PC32)
+#define X86_RELATIVE_RELOC_TYPE_P(IS_X86_64, TYPE) \
+  ((IS_X86_64) \
+   ? X86_64_RELATIVE_RELOC_TYPE_P (TYPE) \
+   : I386_RELATIVE_RELOC_TYPE_P(TYPE))
+
+#define X86_64_NEED_DYNAMIC_RELOC_TYPE_P(TYPE) \
+  (X86_64_SIZE_TYPE_P (TYPE) \
+   || X86_64_RELATIVE_RELOC_TYPE_P (TYPE))
+#define I386_NEED_DYNAMIC_RELOC_TYPE_P(TYPE) \
+  (I386_SIZE_TYPE_P (TYPE) \
+   || I386_RELATIVE_RELOC_TYPE_P (TYPE) \
+   || (TYPE) == R_386_TLS_IE \
+   || (TYPE) == R_386_TLS_LE \
+   || (TYPE) == R_386_TLS_LE_32)
+#define X86_NEED_DYNAMIC_RELOC_TYPE_P(IS_X86_64, TYPE) \
+  ((IS_X86_64) \
+   ? X86_64_NEED_DYNAMIC_RELOC_TYPE_P (TYPE) \
+   : I386_NEED_DYNAMIC_RELOC_TYPE_P (TYPE))
+
+#define X86_LOCAL_GOT_RELATIVE_RELOC_P(IS_X86_64, INFO, SYM) \
+  (bfd_link_pic (INFO) \
+   && (!(IS_X86_64) || ((SYM) != NULL && (SYM)->st_shndx != SHN_ABS)))
 
 #define PLT_CIE_LENGTH		20
 #define PLT_FDE_LENGTH		36
 #define PLT_FDE_START_OFFSET	4 + PLT_CIE_LENGTH + 8
 #define PLT_FDE_LEN_OFFSET	4 + PLT_CIE_LENGTH + 12
 
+/* This must be the same as sframe_get_hdr_size (sfh).  For x86-64, this value
+   is the same as sizeof (sframe_header) because there is no SFrame auxilliary
+   header.  */
+#define PLT_SFRAME_FDE_START_OFFSET	sizeof (sframe_header)
+
 #define ABI_64_P(abfd) \
   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
 
@@ -61,12 +132,11 @@
 
 /* Should copy relocation be generated for a symbol.  Don't generate
    copy relocation against a protected symbol defined in a shared
-   object with GNU_PROPERTY_NO_COPY_ON_PROTECTED.  */
+   object.  */
 #define SYMBOL_NO_COPYRELOC(INFO, EH) \
   ((EH)->def_protected \
    && ((EH)->elf.root.type == bfd_link_hash_defined \
        || (EH)->elf.root.type == bfd_link_hash_defweak) \
-   && elf_has_no_copy_on_protected ((EH)->elf.root.u.def.section->owner) \
    && ((EH)->elf.root.u.def.section->owner->flags & DYNAMIC) != 0 \
    && ((EH)->elf.root.u.def.section->flags & SEC_CODE) == 0)
 
@@ -88,10 +158,10 @@
 
    We also need to generate dynamic pointer relocation against
    STT_GNU_IFUNC symbol in the non-code section.  */
-#define NEED_DYNAMIC_RELOCATION_P(INFO, PCREL_PLT, H, SEC, R_TYPE, \
-				  POINTER_TYPE) \
+#define NEED_DYNAMIC_RELOCATION_P(IS_X86_64, INFO, PCREL_PLT, H, SEC, \
+				  R_TYPE, POINTER_TYPE) \
   ((bfd_link_pic (INFO) \
-    && (! X86_PCREL_TYPE_P (R_TYPE) \
+    && (! X86_PCREL_TYPE_P (IS_X86_64, R_TYPE) \
 	|| ((H) != NULL \
 	    && (! (bfd_link_pie (INFO) \
 		   || SYMBOLIC_BIND ((INFO), (H))) \
@@ -119,19 +189,30 @@
    Copy dynamic function pointer relocations.  Don't generate dynamic
    relocations against resolved undefined weak symbols in PIE, except
    when PC32_RELOC is TRUE.  Undefined weak symbol is bound locally
-   when PIC is false.  */
-#define GENERATE_DYNAMIC_RELOCATION_P(INFO, EH, R_TYPE, \
-				      NEED_COPY_RELOC_IN_PIE, \
+   when PIC is false.  Don't generate dynamic relocations against
+   non-preemptible absolute symbol.  NB: rel_from_abs is set on symbols
+   defined by linker scripts from "dot" (also SEGMENT_START or ORIGIN)
+   outside of an output section statement, which will be converted from
+   absolute to section-relative in set_sym_sections called from
+   ldexp_finalize_syms after ldemul_finish.   */
+#define GENERATE_DYNAMIC_RELOCATION_P(IS_X86_64, INFO, EH, R_TYPE, \
+				      SEC, NEED_COPY_RELOC_IN_PIE, \
 				      RESOLVED_TO_ZERO, PC32_RELOC) \
   ((bfd_link_pic (INFO) \
+    && !(bfd_is_abs_section (SEC) \
+	 && ((EH) == NULL \
+	     || (EH)->elf.root.rel_from_abs == 0) \
+	 && ((EH) == NULL \
+	     || SYMBOL_REFERENCES_LOCAL (INFO, &(EH)->elf))) \
     && !(NEED_COPY_RELOC_IN_PIE) \
     && ((EH) == NULL \
 	|| ((ELF_ST_VISIBILITY ((EH)->elf.other) == STV_DEFAULT \
 	     && (!(RESOLVED_TO_ZERO) || PC32_RELOC)) \
 	    || (EH)->elf.root.type != bfd_link_hash_undefweak)) \
-    && ((!X86_PCREL_TYPE_P (R_TYPE) \
-	 && !X86_SIZE_TYPE_P (R_TYPE)) \
-	 || ! SYMBOL_CALLS_LOCAL ((INFO), &(EH)->elf))) \
+    && ((!X86_PCREL_TYPE_P (IS_X86_64, R_TYPE) \
+	 && !X86_SIZE_TYPE_P (IS_X86_64, R_TYPE)) \
+	|| ! SYMBOL_CALLS_LOCAL ((INFO), \
+				 (struct elf_link_hash_entry *) (EH)))) \
    || (ELIMINATE_COPY_RELOCS \
        && !bfd_link_pic (INFO) \
        && (EH) != NULL \
@@ -144,10 +225,10 @@
 
 /* TRUE if this input relocation should be copied to output.  H->dynindx
    may be -1 if this symbol was marked to become local.  */
-#define COPY_INPUT_RELOC_P(INFO, H, R_TYPE) \
+#define COPY_INPUT_RELOC_P(IS_X86_64, INFO, H, R_TYPE) \
   ((H) != NULL \
    && (H)->dynindx != -1 \
-   && (X86_PCREL_TYPE_P (R_TYPE) \
+   && (X86_PCREL_TYPE_P (IS_X86_64, R_TYPE) \
        || !(bfd_link_executable (INFO) || SYMBOLIC_BIND ((INFO), (H))) \
        || !(H)->def_regular))
 
@@ -170,17 +251,25 @@
    || ((struct elf_x86_link_hash_entry *) (H))->linker_def \
    || ELF_COMMON_DEF_P (H))
 
+/* Return TRUE if the symbol described by a linker hash entry H is
+   going to be absolute.  Similar to bfd_is_abs_symbol, but excluding
+   all linker-script defined symbols.  */
+#define ABS_SYMBOL_P(H) \
+  (bfd_is_abs_symbol (&(H)->root) && !(H)->root.ldscript_def)
+
 /* TRUE if relative relocation should be generated.  GOT reference to
    global symbol in PIC will lead to dynamic symbol.  It becomes a
    problem when "time" or "times" is defined as a variable in an
    executable, clashing with functions of the same name in libc.  If a
    symbol isn't undefined weak symbol, don't make it dynamic in PIC and
-   generate relative relocation.  */
+   generate relative relocation.   Don't generate relative relocation
+   against non-preemptible absolute symbol.  */
 #define GENERATE_RELATIVE_RELOC_P(INFO, H) \
   ((H)->dynindx == -1 \
    && !(H)->forced_local \
    && (H)->root.type != bfd_link_hash_undefweak \
-   && bfd_link_pic (INFO))
+   && bfd_link_pic (INFO) \
+   && !ABS_SYMBOL_P (H))
 
 /* TRUE if this is a pointer reference to a local IFUNC.  */
 #define POINTER_LOCAL_IFUNC_P(INFO, H) \
@@ -238,9 +327,6 @@ struct elf_x86_link_hash_entry
 {
   struct elf_link_hash_entry elf;
 
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
   unsigned char tls_type;
 
   /* Bit 0: Symbol has no GOT nor PLT relocations.
@@ -252,6 +338,10 @@ struct elf_x86_link_hash_entry
   /* Don't call finish_dynamic_symbol on this symbol.  */
   unsigned int no_finish_dynamic_symbol : 1;
 
+  /* R_*_RELATIVE relocation in GOT for this symbol has been
+     processed.  */
+  unsigned int got_relative_reloc_done : 1;
+
   /* TRUE if symbol is __tls_get_addr.  */
   unsigned int tls_get_addr : 1;
 
@@ -267,6 +357,10 @@ struct elf_x86_link_hash_entry
   /* TRUE if symbol is defined by linker.  */
   unsigned int linker_def : 1;
 
+  /* TRUE if symbol is referenced by a non-GOT/non-PLT relocation in a
+     relocatable object file without indirect external access marker.  */
+  unsigned int non_got_ref_without_indirect_extern_access : 1;
+
   /* TRUE if symbol is referenced by R_386_GOTOFF relocation.  This is
      only used by i386.  */
   unsigned int gotoff_ref : 1;
@@ -291,6 +385,24 @@ struct elf_x86_link_hash_entry
   bfd_vma tlsdesc_got;
 };
 
+#define SFRAME_PLT0_MAX_NUM_FRES 2
+#define SFRAME_PLTN_MAX_NUM_FRES 2
+
+struct elf_x86_sframe_plt
+{
+  unsigned int plt0_entry_size;
+  unsigned int plt0_num_fres;
+  const sframe_frame_row_entry *plt0_fres[SFRAME_PLT0_MAX_NUM_FRES];
+
+  unsigned int pltn_entry_size;
+  unsigned int pltn_num_fres;
+  const sframe_frame_row_entry *pltn_fres[SFRAME_PLTN_MAX_NUM_FRES];
+
+  unsigned int sec_pltn_entry_size;
+  unsigned int sec_pltn_num_fres;
+  const sframe_frame_row_entry *sec_pltn_fres[SFRAME_PLTN_MAX_NUM_FRES];
+};
+
 struct elf_x86_lazy_plt_layout
 {
   /* The first entry in a lazy procedure linkage table looks like this.  */
@@ -390,6 +502,9 @@ struct elf_x86_plt_layout
   /* 1 has PLT0.  */
   unsigned int has_plt0;
 
+  /* Offset of indirect branch in plt_entry.  */
+  unsigned int plt_indirect_branch_offset;
+
   /* Offsets into plt_entry that are to be replaced with...  */
   unsigned int plt_got_offset;    /* ... address of this symbol in .got. */
 
@@ -414,6 +529,7 @@ struct elf_x86_plt_layout
 #define GOT_TLS_IE_NEG	6
 #define GOT_TLS_IE_BOTH 7
 #define GOT_TLS_GDESC	8
+#define GOT_ABS		9
 #define GOT_TLS_GD_BOTH_P(type)	\
   ((type) == (GOT_TLS_GD | GOT_TLS_GDESC))
 #define GOT_TLS_GD_P(type) \
@@ -426,12 +542,50 @@ struct elf_x86_plt_layout
 #define elf_x86_hash_entry(ent) \
   ((struct elf_x86_link_hash_entry *)(ent))
 
-enum elf_x86_target_os
+/* Information of an input relocation used to compute its contribution
+   to the DT_RELR section size.  */
+
+struct elf_x86_relative_reloc_record
 {
-  is_normal,
-  is_solaris,
-  is_vxworks,
-  is_nacl
+  /* The original relocation info.  */
+  Elf_Internal_Rela rel;
+  /* The input or the GOT section where the relocation is applied.  */
+  asection *sec;
+  /* Local symbol info.  NULL for global symbol.  */
+  Elf_Internal_Sym *sym;
+  union
+    {
+      /* Section where the local symbol is defined.  */
+      asection *sym_sec;
+      /* Global symbol hash.  */
+      struct elf_link_hash_entry *h;
+    } u;
+  /* The offset into the output section where the relative relocation
+     will be applied at run-time.  */
+  bfd_vma offset;
+  /* The run-time address.  */
+  bfd_vma address;
+};
+
+struct elf_x86_relative_reloc_data
+{
+  bfd_size_type count;
+  bfd_size_type size;
+  struct elf_x86_relative_reloc_record *data;
+};
+
+/* DT_RELR bitmap.  */
+struct elf_dt_relr_bitmap
+{
+  bfd_size_type count;
+  bfd_size_type size;
+  union
+    {
+      /* 32-bit bitmap.  */
+      uint32_t *elf32;
+      /* 64-bit bitmap.  */
+      uint64_t *elf64;
+    } u;
 };
 
 /* x86 ELF linker hash table.  */
@@ -448,6 +602,11 @@ struct elf_x86_link_hash_table
   asection *plt_got;
   asection *plt_got_eh_frame;
 
+  sframe_encoder_ctx *plt_cfe_ctx;
+  asection *plt_sframe;
+  sframe_encoder_ctx *plt_second_cfe_ctx;
+  asection *plt_second_sframe;
+
   /* Parameters describing PLT generation, lazy or non-lazy.  */
   struct elf_x86_plt_layout plt;
 
@@ -457,6 +616,10 @@ struct elf_x86_link_hash_table
   /* Parameters describing non-lazy PLT generation.  */
   const struct elf_x86_non_lazy_plt_layout *non_lazy_plt;
 
+  /* The .sframe helper object for .plt section.
+     This is used for x86-64 only.  */
+  const struct elf_x86_sframe_plt *sframe_plt;
+
   union
   {
     bfd_signed_vma refcount;
@@ -466,9 +629,6 @@ struct elf_x86_link_hash_table
   /* The amount of space used by the jump slots in the GOT.  */
   bfd_vma sgotplt_jump_table_size;
 
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-
   /* _TLS_MODULE_BASE_ symbol.  */
   struct bfd_link_hash_entry *tls_module_base;
 
@@ -476,19 +636,11 @@ struct elf_x86_link_hash_table
   htab_t loc_hash_table;
   void * loc_hash_memory;
 
-  /* The offset into sgot of the GOT entry used by the PLT entry
-     above.  */
-  bfd_vma tlsdesc_got;
-
   /* The index of the next R_X86_64_JUMP_SLOT entry in .rela.plt.  */
   bfd_vma next_jump_slot_index;
   /* The index of the next R_X86_64_IRELATIVE entry in .rela.plt.  */
   bfd_vma next_irelative_index;
 
-  /* TRUE if there are dynamic relocs against IFUNC symbols that apply
-     to read-only sections.  */
-  bfd_boolean readonly_dynrelocs_against_ifunc;
-
   /* The (unloaded but important) .rel.plt.unloaded section on VxWorks.
      This is used for i386 only.  */
   asection *srelplt2;
@@ -497,11 +649,17 @@ struct elf_x86_link_hash_table
      is only used for i386.  */
   bfd_vma next_tls_desc_index;
 
-  /* The offset into splt of the PLT entry for the TLS descriptor
-     resolver.  Special values are 0, if not necessary (or not found
-     to be necessary yet), and -1 if needed but not determined
-     yet.  This is only used for x86-64.  */
-  bfd_vma tlsdesc_plt;
+  /* DT_RELR bitmap.  */
+  struct elf_dt_relr_bitmap dt_relr_bitmap;
+
+  /* Relative relocation data.  */
+  struct elf_x86_relative_reloc_data relative_reloc;
+
+  /* Unaligned relative relocation data.  */
+  struct elf_x86_relative_reloc_data unaligned_relative_reloc;
+
+  /* Number of relative reloc generation pass.  */
+  unsigned int generate_relative_reloc_pass;
 
    /* Value used to fill the unused bytes of the first PLT entry.  This
       is only used for i386.  */
@@ -520,35 +678,23 @@ struct elf_x86_link_hash_table
 
   bfd_vma (*r_info) (bfd_vma, bfd_vma);
   bfd_vma (*r_sym) (bfd_vma);
-  bfd_boolean (*is_reloc_section) (const char *);
-  enum elf_target_id target_id;
-  enum elf_x86_target_os target_os;
+  bool (*is_reloc_section) (const char *);
   unsigned int sizeof_reloc;
-  unsigned int dt_reloc;
-  unsigned int dt_reloc_sz;
-  unsigned int dt_reloc_ent;
   unsigned int got_entry_size;
   unsigned int pointer_r_type;
+  unsigned int relative_r_type;
   int dynamic_interpreter_size;
   const char *dynamic_interpreter;
   const char *tls_get_addr;
+  const char *relative_r_name;
+  void (*elf_append_reloc) (bfd *, asection *, Elf_Internal_Rela *);
+  void (*elf_write_addend) (bfd *, uint64_t, void *);
+  void (*elf_write_addend_in_got) (bfd *, uint64_t, void *);
 
   /* Options passed from the linker.  */
   struct elf_linker_x86_params *params;
 };
 
-/* Architecture-specific backend data for x86.  */
-
-struct elf_x86_backend_data
-{
-  /* Target system.  */
-  enum elf_x86_target_os target_os;
-};
-
-#define get_elf_x86_backend_data(abfd) \
-  ((const struct elf_x86_backend_data *) \
-   get_elf_backend_data (abfd)->arch_data)
-
 struct elf_x86_init_table
 {
   /* The lazy PLT layout.  */
@@ -563,6 +709,22 @@ struct elf_x86_init_table
   /* The non-lazy PLT layout for IBT.  */
   const struct elf_x86_non_lazy_plt_layout *non_lazy_ibt_plt;
 
+  /* The .sframe helper object for lazy .plt section.
+     This is used for x86-64 only.  */
+  const struct elf_x86_sframe_plt *sframe_lazy_plt;
+
+  /* The .sframe helper object for non-lazy .plt section.
+     This is used for x86-64 only.  */
+  const struct elf_x86_sframe_plt *sframe_non_lazy_plt;
+
+  /* The .sframe helper object for lazy IBT .plt section.
+     This is used for x86-64 only.  */
+  const struct elf_x86_sframe_plt *sframe_lazy_ibt_plt;
+
+  /* The .sframe helper object for non-lazy IBT .plt section.
+     This is used for x86-64 only.  */
+  const struct elf_x86_sframe_plt *sframe_non_lazy_ibt_plt;
+
   bfd_byte plt0_pad_byte;
 
   bfd_vma (*r_info) (bfd_vma, bfd_vma);
@@ -578,6 +740,10 @@ struct elf_x86_obj_tdata
 
   /* GOTPLT entries for TLS descriptors.  */
   bfd_vma *local_tlsdesc_gotent;
+
+  /* R_*_RELATIVE relocation in GOT for this local symbol has been
+     processed.  */
+  char *relative_reloc_done;
 };
 
 enum elf_x86_plt_type
@@ -601,6 +767,9 @@ struct elf_x86_plt
   long count;
 };
 
+/* Set if a relocation is converted from a GOTPCREL relocation.  */
+#define R_X86_64_converted_reloc_bit (1 << 7)
+
 #define elf_x86_tdata(abfd) \
   ((struct elf_x86_obj_tdata *) (abfd)->tdata.any)
 
@@ -610,15 +779,23 @@ struct elf_x86_plt
 #define elf_x86_local_tlsdesc_gotent(abfd) \
   (elf_x86_tdata (abfd)->local_tlsdesc_gotent)
 
+#define elf_x86_relative_reloc_done(abfd) \
+  (elf_x86_tdata (abfd)->relative_reloc_done)
+
 #define elf_x86_compute_jump_table_size(htab) \
   ((htab)->elf.srelplt->reloc_count * (htab)->got_entry_size)
 
 #define is_x86_elf(bfd, htab)				\
   (bfd_get_flavour (bfd) == bfd_target_elf_flavour	\
    && elf_tdata (bfd) != NULL				\
-   && elf_object_id (bfd) == (htab)->target_id)
+   && elf_object_id (bfd) == (htab)->elf.hash_table_id)
 
-extern bfd_boolean _bfd_x86_elf_mkobject
+/* Rename some of the generic section flags to better document how they
+   are used here.  */
+#define check_relocs_failed	sec_flg0
+#define relative_reloc_packed	sec_flg1
+
+extern bool _bfd_x86_elf_mkobject
   (bfd *);
 
 extern void _bfd_x86_elf_set_tls_module_base
@@ -627,12 +804,12 @@ extern void _bfd_x86_elf_set_tls_module_
 extern bfd_vma _bfd_x86_elf_dtpoff_base
   (struct bfd_link_info *);
 
-extern bfd_boolean _bfd_x86_elf_readonly_dynrelocs
+extern bool _bfd_x86_elf_readonly_dynrelocs
   (struct elf_link_hash_entry *, void *);
 
 extern struct elf_link_hash_entry * _bfd_elf_x86_get_local_sym_hash
   (struct elf_x86_link_hash_table *, bfd *, const Elf_Internal_Rela *,
-   bfd_boolean);
+   bool);
 
 extern hashval_t _bfd_x86_elf_local_htab_hash
   (const void *);
@@ -649,39 +826,59 @@ extern struct bfd_link_hash_table * _bfd
 extern int _bfd_x86_elf_compare_relocs
   (const void *, const void *);
 
-extern bfd_boolean _bfd_x86_elf_link_check_relocs
+extern bool _bfd_x86_elf_link_check_relocs
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean _bfd_x86_elf_size_dynamic_sections
+extern bool _bfd_x86_elf_check_relocs
+  (bfd *, struct bfd_link_info *, asection *,
+   const Elf_Internal_Rela *);
+
+extern bool _bfd_x86_elf_link_relax_section
+  (bfd *, asection *, struct bfd_link_info *, bool *);
+
+extern bool _bfd_elf_x86_size_relative_relocs
+  (struct bfd_link_info *, bool *);
+
+extern bool _bfd_elf_x86_finish_relative_relocs
+  (struct bfd_link_info *);
+
+extern void _bfd_elf32_write_addend (bfd *, uint64_t, void *);
+extern void _bfd_elf64_write_addend (bfd *, uint64_t, void *);
+
+extern bool _bfd_elf_x86_valid_reloc_p
+  (asection *, struct bfd_link_info *, struct elf_x86_link_hash_table *,
+   const Elf_Internal_Rela *, struct elf_link_hash_entry *,
+   Elf_Internal_Sym *, Elf_Internal_Shdr *, bool *);
+
+extern bool _bfd_x86_elf_size_dynamic_sections
   (bfd *, struct bfd_link_info *);
 
 extern struct elf_x86_link_hash_table *_bfd_x86_elf_finish_dynamic_sections
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean _bfd_x86_elf_always_size_sections
+extern bool _bfd_x86_elf_always_size_sections
   (bfd *, struct bfd_link_info *);
 
 extern void _bfd_x86_elf_merge_symbol_attribute
-  (struct elf_link_hash_entry *, const Elf_Internal_Sym *,
-   bfd_boolean, bfd_boolean);
+  (struct elf_link_hash_entry *, unsigned int, bool, bool);
 
 extern void _bfd_x86_elf_copy_indirect_symbol
   (struct bfd_link_info *, struct elf_link_hash_entry *,
    struct elf_link_hash_entry *);
 
-extern bfd_boolean _bfd_x86_elf_fixup_symbol
+extern bool _bfd_x86_elf_fixup_symbol
   (struct bfd_link_info *, struct elf_link_hash_entry *);
 
-extern bfd_boolean _bfd_x86_elf_hash_symbol
+extern bool _bfd_x86_elf_hash_symbol
   (struct elf_link_hash_entry *);
 
-extern bfd_boolean _bfd_x86_elf_adjust_dynamic_symbol
+extern bool _bfd_x86_elf_adjust_dynamic_symbol
   (struct bfd_link_info *, struct elf_link_hash_entry *);
 
 extern void _bfd_x86_elf_hide_symbol
-  (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean);
+  (struct bfd_link_info *, struct elf_link_hash_entry *, bool);
 
-extern bfd_boolean _bfd_x86_elf_link_symbol_references_local
+extern bool _bfd_x86_elf_link_symbol_references_local
   (struct bfd_link_info *, struct elf_link_hash_entry *);
 
 extern asection * _bfd_x86_elf_gc_mark_hook
@@ -695,7 +892,7 @@ extern long _bfd_x86_elf_get_synthetic_s
 extern enum elf_property_kind _bfd_x86_elf_parse_gnu_properties
   (bfd *, unsigned int, bfd_byte *, unsigned int);
 
-extern bfd_boolean _bfd_x86_elf_merge_gnu_properties
+extern bool _bfd_x86_elf_merge_gnu_properties
   (struct bfd_link_info *, bfd *, bfd *, elf_property *, elf_property *);
 
 extern void _bfd_x86_elf_link_fixup_gnu_properties
@@ -708,6 +905,10 @@ extern void _bfd_x86_elf_link_fixup_ifun
   (struct bfd_link_info *, struct elf_x86_link_hash_table *,
    struct elf_link_hash_entry *, Elf_Internal_Sym *sym);
 
+extern void _bfd_x86_elf_link_report_relative_reloc
+  (struct bfd_link_info *, asection *, struct elf_link_hash_entry *,
+   Elf_Internal_Sym *, const char *, const void *);
+
 #define bfd_elf64_mkobject \
   _bfd_x86_elf_mkobject
 #define bfd_elf32_mkobject \
@@ -720,11 +921,15 @@ extern void _bfd_x86_elf_link_fixup_ifun
   _bfd_x86_elf_link_check_relocs
 #define bfd_elf32_bfd_link_check_relocs \
   _bfd_x86_elf_link_check_relocs
+#define bfd_elf32_bfd_relax_section \
+  _bfd_x86_elf_link_relax_section
+#define bfd_elf64_bfd_relax_section \
+  _bfd_x86_elf_link_relax_section
 
+#define elf_backend_check_relocs \
+  _bfd_x86_elf_check_relocs
 #define elf_backend_size_dynamic_sections \
   _bfd_x86_elf_size_dynamic_sections
-#define elf_backend_always_size_sections \
-  _bfd_x86_elf_always_size_sections
 #define elf_backend_merge_symbol_attribute \
   _bfd_x86_elf_merge_symbol_attribute
 #define elf_backend_copy_indirect_symbol \
@@ -745,3 +950,34 @@ extern void _bfd_x86_elf_link_fixup_ifun
   _bfd_x86_elf_merge_gnu_properties
 #define elf_backend_fixup_gnu_properties \
   _bfd_x86_elf_link_fixup_gnu_properties
+#define elf_backend_size_relative_relocs \
+  _bfd_elf_x86_size_relative_relocs
+#define elf_backend_finish_relative_relocs \
+  _bfd_elf_x86_finish_relative_relocs
+
+#define ELF_P_ALIGN ELF_MINPAGESIZE
+
+/* Allocate x86 GOT info for local symbols.  */
+
+static inline bool
+elf_x86_allocate_local_got_info (bfd *abfd, bfd_size_type count)
+{
+  bfd_signed_vma *local_got_refcounts = elf_local_got_refcounts (abfd);
+  if (local_got_refcounts == NULL)
+    {
+      bfd_size_type size = count * (sizeof (bfd_signed_vma)
+				    + sizeof (bfd_vma)
+				    + 2 * sizeof(char));
+      local_got_refcounts = (bfd_signed_vma *) bfd_zalloc (abfd, size);
+      if (local_got_refcounts == NULL)
+	return false;
+      elf_local_got_refcounts (abfd) = local_got_refcounts;
+      elf_x86_local_tlsdesc_gotent (abfd) =
+	(bfd_vma *) (local_got_refcounts + count);
+      elf_x86_local_got_tls_type (abfd) =
+	(char *) (local_got_refcounts + 2 * count);
+      elf_x86_relative_reloc_done (abfd) =
+	((char *) (local_got_refcounts + 2 * count)) + count;
+    }
+  return true;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/format.c ./bfd/format.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/format.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/format.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic BFD support for file formats.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -55,7 +55,7 @@ FUNCTION
 	bfd_check_format
 
 SYNOPSIS
-	bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
+	bool bfd_check_format (bfd *abfd, bfd_format format);
 
 DESCRIPTION
 	Verify if the file attached to the BFD @var{abfd} is compatible
@@ -88,7 +88,7 @@ DESCRIPTION
 	more than one backend recognised the file format.
 */
 
-bfd_boolean
+bool
 bfd_check_format (bfd *abfd, bfd_format format)
 {
   return bfd_check_format_matches (abfd, format, NULL);
@@ -99,13 +99,19 @@ struct bfd_preserve
   void *marker;
   void *tdata;
   flagword flags;
+  const struct bfd_iovec *iovec;
+  void *iostream;
   const struct bfd_arch_info *arch_info;
+  const struct bfd_build_id *build_id;
+  bfd_cleanup cleanup;
   struct bfd_section *sections;
   struct bfd_section *section_last;
   unsigned int section_count;
   unsigned int section_id;
+  unsigned int symcount;
+  bool read_only;
+  bfd_vma start_address;
   struct bfd_hash_table section_htab;
-  const struct bfd_build_id *build_id;
 };
 
 /* When testing an object for compatibility with a particular target
@@ -117,59 +123,110 @@ struct bfd_preserve
    subset of the bfd state works in practice.  This function stores
    the subset.  */
 
-static bfd_boolean
-bfd_preserve_save (bfd *abfd, struct bfd_preserve *preserve)
+static bool
+bfd_preserve_save (bfd *abfd, struct bfd_preserve *preserve,
+		   bfd_cleanup cleanup)
 {
   preserve->tdata = abfd->tdata.any;
   preserve->arch_info = abfd->arch_info;
   preserve->flags = abfd->flags;
+  preserve->iovec = abfd->iovec;
+  preserve->iostream = abfd->iostream;
   preserve->sections = abfd->sections;
   preserve->section_last = abfd->section_last;
   preserve->section_count = abfd->section_count;
   preserve->section_id = _bfd_section_id;
+  preserve->symcount = abfd->symcount;
+  preserve->read_only = abfd->read_only;
+  preserve->start_address = abfd->start_address;
   preserve->section_htab = abfd->section_htab;
   preserve->marker = bfd_alloc (abfd, 1);
   preserve->build_id = abfd->build_id;
+  preserve->cleanup = cleanup;
   if (preserve->marker == NULL)
-    return FALSE;
+    return false;
 
   return bfd_hash_table_init (&abfd->section_htab, bfd_section_hash_newfunc,
 			      sizeof (struct section_hash_entry));
 }
 
+/* A back-end object_p function may flip a bfd from file backed to
+   in-memory, eg. pe_ILF_object_p.  In that case to restore the
+   original IO state we need to reopen the file.  Conversely, if we
+   are restoring a previously matched pe ILF format and have been
+   checking further target matches using file IO then we need to close
+   the file and detach the bfd from the cache lru list.  */
+
+static void
+io_reinit (bfd *abfd, struct bfd_preserve *preserve)
+{
+  if (abfd->iovec != preserve->iovec)
+    {
+      /* Handle file backed to in-memory transition.  bfd_cache_close
+	 won't do anything unless abfd->iovec is the cache_iovec.
+	 Don't be tempted to call iovec->bclose here.  We don't want
+	 to call memory_bclose, which would free the bim.  The bim
+	 must be kept if bfd_check_format_matches is going to decide
+	 later that the PE format needing it is in fact the correct
+	 target match.  */
+      bfd_cache_close (abfd);
+      abfd->iovec = preserve->iovec;
+      abfd->iostream = preserve->iostream;
+
+      /* Handle in-memory to file backed transition.  */
+      if ((abfd->flags & BFD_CLOSED_BY_CACHE) != 0
+	  && (abfd->flags & BFD_IN_MEMORY) != 0
+	  && (preserve->flags & BFD_CLOSED_BY_CACHE) == 0
+	  && (preserve->flags & BFD_IN_MEMORY) == 0)
+	bfd_open_file (abfd);
+    }
+  abfd->flags = preserve->flags;
+}
+
 /* Clear out a subset of BFD state.  */
 
 static void
-bfd_reinit (bfd *abfd, unsigned int section_id)
+bfd_reinit (bfd *abfd, unsigned int section_id,
+	    struct bfd_preserve *preserve, bfd_cleanup cleanup)
 {
+  _bfd_section_id = section_id;
+  if (cleanup)
+    cleanup (abfd);
   abfd->tdata.any = NULL;
   abfd->arch_info = &bfd_default_arch_struct;
-  abfd->flags &= BFD_FLAGS_SAVED;
+  io_reinit (abfd, preserve);
+  abfd->symcount = 0;
+  abfd->read_only = 0;
+  abfd->start_address = 0;
+  abfd->build_id = NULL;
   bfd_section_list_clear (abfd);
-  _bfd_section_id = section_id;
 }
 
 /* Restores bfd state saved by bfd_preserve_save.  */
 
-static void
+static bfd_cleanup
 bfd_preserve_restore (bfd *abfd, struct bfd_preserve *preserve)
 {
   bfd_hash_table_free (&abfd->section_htab);
 
   abfd->tdata.any = preserve->tdata;
   abfd->arch_info = preserve->arch_info;
-  abfd->flags = preserve->flags;
+  io_reinit (abfd, preserve);
   abfd->section_htab = preserve->section_htab;
   abfd->sections = preserve->sections;
   abfd->section_last = preserve->section_last;
   abfd->section_count = preserve->section_count;
   _bfd_section_id = preserve->section_id;
+  abfd->symcount = preserve->symcount;
+  abfd->read_only = preserve->read_only;
+  abfd->start_address = preserve->start_address;
   abfd->build_id = preserve->build_id;
 
   /* bfd_release frees all memory more recently bfd_alloc'd than
      its arg, as well as its arg.  */
   bfd_release (abfd, preserve->marker);
   preserve->marker = NULL;
+  return preserve->cleanup;
 }
 
 /* Called when the bfd state saved by bfd_preserve_save is no longer
@@ -178,6 +235,15 @@ bfd_preserve_restore (bfd *abfd, struct
 static void
 bfd_preserve_finish (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_preserve *preserve)
 {
+  if (preserve->cleanup)
+    {
+      /* Run the cleanup, assuming that all it will need is the
+	 tdata at the time the cleanup was returned.  */
+      void *tdata = abfd->tdata.any;
+      abfd->tdata.any = preserve->tdata;
+      preserve->cleanup (abfd);
+      abfd->tdata.any = tdata;
+    }
   /* It would be nice to be able to free more memory here, eg. old
      tdata, but that's not possible since these blocks are sitting
      inside bfd_alloc'd memory.  The section hash is on a separate
@@ -186,12 +252,45 @@ bfd_preserve_finish (bfd *abfd ATTRIBUTE
   preserve->marker = NULL;
 }
 
+static void
+print_warnmsg (struct per_xvec_message **list)
+{
+  fflush (stdout);
+  fprintf (stderr, "%s: ", _bfd_get_error_program_name ());
+
+  for (struct per_xvec_message *warn = *list; warn; warn = warn->next)
+    {
+      fputs (warn->message, stderr);
+      fputc ('\n', stderr);
+    }
+  fflush (stderr);
+}
+
+static void
+clear_warnmsg (struct per_xvec_message **list)
+{
+  struct per_xvec_message *warn = *list;
+  while (warn)
+    {
+      struct per_xvec_message *next = warn->next;
+      free (warn);
+      warn = next;
+    }
+  *list = NULL;
+}
+
+static void
+null_error_handler (const char *fmt ATTRIBUTE_UNUSED,
+		    va_list ap ATTRIBUTE_UNUSED)
+{
+}
+
 /*
 FUNCTION
 	bfd_check_format_matches
 
 SYNOPSIS
-	bfd_boolean bfd_check_format_matches
+	bool bfd_check_format_matches
 	  (bfd *abfd, bfd_format format, char ***matching);
 
 DESCRIPTION
@@ -206,7 +305,7 @@ DESCRIPTION
 	should free it.
 */
 
-bfd_boolean
+bool
 bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
 {
   extern const bfd_target binary_vec;
@@ -219,7 +318,10 @@ bfd_check_format_matches (bfd *abfd, bfd
   int match_count, best_count, best_match;
   int ar_match_index;
   unsigned int initial_section_id = _bfd_section_id;
-  struct bfd_preserve preserve;
+  struct bfd_preserve preserve, preserve_match;
+  bfd_cleanup cleanup = NULL;
+  bfd_error_handler_type orig_error_handler;
+  static int in_check_format;
 
   if (matching != NULL)
     *matching = NULL;
@@ -228,7 +330,7 @@ bfd_check_format_matches (bfd *abfd, bfd
       || (unsigned int) abfd->format >= (unsigned int) bfd_type_end)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   if (abfd->format != bfd_unknown)
@@ -236,28 +338,39 @@ bfd_check_format_matches (bfd *abfd, bfd
 
   if (matching != NULL || *bfd_associated_vector != NULL)
     {
-      bfd_size_type amt;
+      size_t amt;
 
       amt = sizeof (*matching_vector) * 2 * _bfd_target_vector_entries;
       matching_vector = (const bfd_target **) bfd_malloc (amt);
       if (!matching_vector)
-	return FALSE;
+	return false;
     }
 
   /* Presume the answer is yes.  */
   abfd->format = format;
   save_targ = abfd->xvec;
-  preserve.marker = NULL;
+
+  /* Don't report errors on recursive calls checking the first element
+     of an archive.  */
+  if (in_check_format)
+    orig_error_handler = bfd_set_error_handler (null_error_handler);
+  else
+    orig_error_handler = _bfd_set_error_handler_caching (abfd);
+  ++in_check_format;
+
+  preserve_match.marker = NULL;
+  if (!bfd_preserve_save (abfd, &preserve, NULL))
+    goto err_ret;
 
   /* If the target type was explicitly specified, just check that target.  */
   if (!abfd->target_defaulted)
     {
-      if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)	/* rewind! */
+      if (bfd_seek (abfd, 0, SEEK_SET) != 0)	/* rewind! */
 	goto err_ret;
 
-      right_targ = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd));
+      cleanup = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd));
 
-      if (right_targ)
+      if (cleanup)
 	goto ok_ret;
 
       /* For a long time the code has dropped through to check all
@@ -288,7 +401,7 @@ bfd_check_format_matches (bfd *abfd, bfd
 
   for (target = bfd_target_vector; *target != NULL; target++)
     {
-      const bfd_target *temp;
+      void **high_water;
 
       /* The binary target matches anything, so don't return it when
 	 searching.  Don't match the plugin target if we have another
@@ -305,24 +418,26 @@ bfd_check_format_matches (bfd *abfd, bfd
       /* If we already tried a match, the bfd is modified and may
 	 have sections attached, which will confuse the next
 	 _bfd_check_format call.  */
-      bfd_reinit (abfd, initial_section_id);
+      bfd_reinit (abfd, initial_section_id, &preserve, cleanup);
+      /* Free bfd_alloc memory too.  If we have matched and preserved
+	 a target then the high water mark is that much higher.  */
+      if (preserve_match.marker)
+	high_water = &preserve_match.marker;
+      else
+	high_water = &preserve.marker;
+      bfd_release (abfd, *high_water);
+      *high_water = bfd_alloc (abfd, 1);
 
       /* Change BFD's target temporarily.  */
       abfd->xvec = *target;
 
-      if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+      if (bfd_seek (abfd, 0, SEEK_SET) != 0)
 	goto err_ret;
 
-      /* If _bfd_check_format neglects to set bfd_error, assume
-	 bfd_error_wrong_format.  We didn't used to even pay any
-	 attention to bfd_error, so I suspect that some
-	 _bfd_check_format might have this problem.  */
-      bfd_set_error (bfd_error_wrong_format);
-
-      temp = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd));
-      if (temp)
+      cleanup = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd));
+      if (cleanup)
 	{
-	  int match_priority = temp->match_priority;
+	  int match_priority = abfd->xvec->match_priority;
 #if BFD_SUPPORTS_PLUGINS
 	  /* If this object can be handled by a plugin, give that the
 	     lowest priority; objects both handled by a plugin and
@@ -332,10 +447,6 @@ bfd_check_format_matches (bfd *abfd, bfd
 	    match_priority = (*target)->match_priority;
 #endif
 
-	  match_targ = temp;
-	  if (preserve.marker != NULL)
-	    bfd_preserve_finish (abfd, &preserve);
-
 	  if (abfd->format != bfd_archive
 	      || (bfd_has_map (abfd)
 		  && bfd_get_error () != bfd_error_wrong_object_format))
@@ -343,11 +454,11 @@ bfd_check_format_matches (bfd *abfd, bfd
 	      /* If this is the default target, accept it, even if
 		 other targets might match.  People who want those
 		 other targets have to set the GNUTARGET variable.  */
-	      if (temp == bfd_default_vector[0])
+	      if (abfd->xvec == bfd_default_vector[0])
 		goto ok_ret;
 
 	      if (matching_vector)
-		matching_vector[match_count] = temp;
+		matching_vector[match_count] = abfd->xvec;
 	      match_count++;
 
 	      if (match_priority < best_match)
@@ -358,7 +469,7 @@ bfd_check_format_matches (bfd *abfd, bfd
 	      if (match_priority <= best_match)
 		{
 		  /* This format checks out as ok!  */
-		  right_targ = temp;
+		  right_targ = abfd->xvec;
 		  best_count++;
 		}
 	    }
@@ -374,11 +485,14 @@ bfd_check_format_matches (bfd *abfd, bfd
 	      ar_match_index++;
 	    }
 
-	  if (!bfd_preserve_save (abfd, &preserve))
-	    goto err_ret;
+	  if (preserve_match.marker == NULL)
+	    {
+	      match_targ = abfd->xvec;
+	      if (!bfd_preserve_save (abfd, &preserve_match, cleanup))
+		goto err_ret;
+	      cleanup = NULL;
+	    }
 	}
-      else if (bfd_get_error () != bfd_error_wrong_format)
-	goto err_ret;
     }
 
   if (best_count == 1)
@@ -448,22 +562,27 @@ bfd_check_format_matches (bfd *abfd, bfd
      really shouldn't iterate on live bfd's.  Note that saving the
      whole bfd and restoring it would be even worse; the first thing
      you notice is that the cached bfd file position gets out of sync.  */
-  if (preserve.marker != NULL)
-    bfd_preserve_restore (abfd, &preserve);
+  if (preserve_match.marker != NULL)
+    cleanup = bfd_preserve_restore (abfd, &preserve_match);
 
   if (match_count == 1)
     {
       abfd->xvec = right_targ;
       /* If we come out of the loop knowing that the last target that
 	 matched is the one we want, then ABFD should still be in a usable
-	 state (except possibly for XVEC).  */
+	 state (except possibly for XVEC).  This is not just an
+	 optimisation.  In the case of plugins a match against the
+	 plugin target can result in the bfd being changed such that
+	 it no longer matches the plugin target, nor will it match
+	 RIGHT_TARG again.  */
       if (match_targ != right_targ)
 	{
-	  bfd_reinit (abfd, initial_section_id);
-	  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+	  bfd_reinit (abfd, initial_section_id, &preserve, cleanup);
+	  bfd_release (abfd, preserve.marker);
+	  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
 	    goto err_ret;
-	  match_targ = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd));
-	  BFD_ASSERT (match_targ != NULL);
+	  cleanup = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd));
+	  BFD_ASSERT (cleanup != NULL);
 	}
 
     ok_ret:
@@ -473,13 +592,24 @@ bfd_check_format_matches (bfd *abfd, bfd
 	 We can not set this flag until after checking the format,
 	 because it will interfere with creation of BFD sections.  */
       if (abfd->direction == both_direction)
-	abfd->output_has_begun = TRUE;
+	abfd->output_has_begun = true;
 
-      if (matching_vector)
-	free (matching_vector);
+      free (matching_vector);
+      if (preserve_match.marker != NULL)
+	bfd_preserve_finish (abfd, &preserve_match);
+      bfd_preserve_finish (abfd, &preserve);
+      bfd_set_error_handler (orig_error_handler);
+
+      struct per_xvec_message **list = _bfd_per_xvec_warn (abfd->xvec, 0);
+      if (*list)
+	print_warnmsg (list);
+      list = _bfd_per_xvec_warn (NULL, 0);
+      for (size_t i = 0; i < _bfd_target_vector_entries + 1; i++)
+	clear_warnmsg (list++);
+      --in_check_format;
 
       /* File position has moved, BTW.  */
-      return TRUE;
+      return true;
     }
 
   if (match_count == 0)
@@ -487,13 +617,12 @@ bfd_check_format_matches (bfd *abfd, bfd
     err_unrecog:
       bfd_set_error (bfd_error_file_not_recognized);
     err_ret:
+      if (cleanup)
+	cleanup (abfd);
       abfd->xvec = save_targ;
       abfd->format = bfd_unknown;
-      if (matching_vector)
-	free (matching_vector);
-      if (preserve.marker != NULL)
-	bfd_preserve_restore (abfd, &preserve);
-      return FALSE;
+      free (matching_vector);
+      goto out;
     }
 
   /* Restore original target type and format.  */
@@ -513,7 +642,36 @@ bfd_check_format_matches (bfd *abfd, bfd
 	  *(const char **) &matching_vector[match_count] = name;
 	}
     }
-  return FALSE;
+  else
+    free (matching_vector);
+  if (cleanup)
+    cleanup (abfd);
+ out:
+  if (preserve_match.marker != NULL)
+    bfd_preserve_finish (abfd, &preserve_match);
+  bfd_preserve_restore (abfd, &preserve);
+  bfd_set_error_handler (orig_error_handler);
+  struct per_xvec_message **list = _bfd_per_xvec_warn (NULL, 0);
+  struct per_xvec_message **one = NULL;
+  for (size_t i = 0; i < _bfd_target_vector_entries + 1; i++)
+    {
+      if (list[i])
+	{
+	  if (!one)
+	    one = list + i;
+	  else
+	    {
+	      one = NULL;
+	      break;
+	    }
+	}
+    }
+  if (one)
+    print_warnmsg (one);
+  for (size_t i = 0; i < _bfd_target_vector_entries + 1; i++)
+    clear_warnmsg (list++);
+  --in_check_format;
+  return false;
 }
 
 /*
@@ -521,7 +679,7 @@ FUNCTION
 	bfd_set_format
 
 SYNOPSIS
-	bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
+	bool bfd_set_format (bfd *abfd, bfd_format format);
 
 DESCRIPTION
 	This function sets the file format of the BFD @var{abfd} to the
@@ -530,14 +688,14 @@ DESCRIPTION
 	is not open for writing, then an error occurs.
 */
 
-bfd_boolean
+bool
 bfd_set_format (bfd *abfd, bfd_format format)
 {
   if (bfd_read_p (abfd)
       || (unsigned int) abfd->format >= (unsigned int) bfd_type_end)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   if (abfd->format != bfd_unknown)
@@ -549,10 +707,10 @@ bfd_set_format (bfd *abfd, bfd_format fo
   if (!BFD_SEND_FMT (abfd, _bfd_set_format, (abfd)))
     {
       abfd->format = bfd_unknown;
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /*
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/gen-aout.c ./bfd/gen-aout.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/gen-aout.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/gen-aout.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generate parameters for an a.out system.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/genlink.h ./bfd/genlink.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/genlink.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/genlink.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* genlink.h -- interface to the BFD generic linker
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -43,7 +43,7 @@ struct generic_link_hash_entry
 {
   struct bfd_link_hash_entry root;
   /* Whether this symbol has been written out.  */
-  bfd_boolean written;
+  bool written;
   /* Symbol from input BFD.  */
   asymbol *sym;
 };
@@ -66,7 +66,7 @@ struct generic_link_hash_table
 #define _bfd_generic_link_hash_traverse(table, func, info)		\
   (bfd_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct bfd_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the generic link hash table from the info structure.  This is
@@ -83,7 +83,7 @@ struct generic_link_hash_table
 
 /* Add the symbols of input_bfd to the symbols being built for
    output_bfd.  */
-extern bfd_boolean _bfd_generic_link_output_symbols
+extern bool _bfd_generic_link_output_symbols
   (bfd *, bfd *, struct bfd_link_info *, size_t *);
 
 /* This structure is used to pass information to
@@ -100,7 +100,7 @@ struct generic_write_global_symbol_info
 /* Write out a single global symbol.  This is expected to be called
    via _bfd_generic_link_hash_traverse.  The second argument must
    actually be a struct generic_write_global_symbol_info *.  */
-extern bfd_boolean _bfd_generic_link_write_global_symbol
+extern bool _bfd_generic_link_write_global_symbol
   (struct generic_link_hash_entry *, void *);
 
 /* Generic link hash table entry creation routine.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/.gitignore ./bfd/.gitignore
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/.gitignore	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/.gitignore	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,5 @@
 /bfd-in3.h
 /bfd.h
-/bfd_stdint.h
 /bfdver.h
 /elf32-ia64.c
 /elf32-target.h
@@ -11,6 +10,9 @@
 /peigen.c
 /pepigen.c
 /pex64igen.c
+/pe-aarch64igen.c
+/pe-loongarch64igen.c
+/pe-riscv64igen.c
 /stmp-bfd-h
 /targmatch.h
 
@@ -24,12 +26,11 @@
 /doc/cache.texi
 /doc/chew
 /doc/coffcode.texi
-/doc/core.texi
+/doc/corefile.texi
 /doc/elf.texi
 /doc/elfcode.texi
 /doc/format.texi
 /doc/hash.texi
-/doc/init.texi
 /doc/libbfd.texi
 /doc/linker.texi
 /doc/mmo.texi
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hash.c ./bfd/hash.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hash.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hash.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* hash.c -- hash table routines for BFD
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -295,6 +295,50 @@ SUBSUBSECTION
 	linker hash table, uses macros for the lookup and traversal
 	routines.  These are <<aout_link_hash_lookup>> and
 	<<aout_link_hash_traverse>> in aoutx.h.
+
+EXTERNAL
+.{* An element in the hash table.  Most uses will actually use a larger
+.   structure, and an instance of this will be the first field.  *}
+.
+.struct bfd_hash_entry
+.{
+.  {* Next entry for this hash code.  *}
+.  struct bfd_hash_entry *next;
+.  {* String being hashed.  *}
+.  const char *string;
+.  {* Hash code.  This is the full hash code, not the index into the
+.     table.  *}
+.  unsigned long hash;
+.};
+.
+.{* A hash table.  *}
+.
+.struct bfd_hash_table
+.{
+.  {* The hash array.  *}
+.  struct bfd_hash_entry **table;
+.  {* A function used to create new elements in the hash table.  The
+.     first entry is itself a pointer to an element.  When this
+.     function is first invoked, this pointer will be NULL.  However,
+.     having the pointer permits a hierarchy of method functions to be
+.     built each of which calls the function in the superclass.  Thus
+.     each function should be written to allocate a new block of memory
+.     only if the argument is NULL.  *}
+.  struct bfd_hash_entry *(*newfunc)
+.    (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
+.  {* An objalloc for this hash table.  This is a struct objalloc *,
+.     but we use void * to avoid requiring the inclusion of objalloc.h.  *}
+.  void *memory;
+.  {* The number of slots in the hash table.  *}
+.  unsigned int size;
+.  {* The number of entries in the hash table.  *}
+.  unsigned int count;
+.  {* The size of elements.  *}
+.  unsigned int entsize;
+.  {* If non-zero, don't grow the hash table.  *}
+.  unsigned int frozen:1;
+.};
+.
 */
 
 /* The default number of entries to use when creating a hash table.  */
@@ -304,50 +348,49 @@ SUBSUBSECTION
    greater than N, and near a power of two.  Copied from libiberty.
    Returns zero for ridiculously large N to signify an error.  */
 
-static unsigned long
-higher_prime_number (unsigned long n)
+static uint32_t
+higher_prime_number (uint32_t n)
 {
   /* These are primes that are near, but slightly smaller than, a
      power of two.  */
-  static const unsigned long primes[] =
+  static const uint32_t primes[] =
     {
-      (unsigned long) 31,
-      (unsigned long) 61,
-      (unsigned long) 127,
-      (unsigned long) 251,
-      (unsigned long) 509,
-      (unsigned long) 1021,
-      (unsigned long) 2039,
-      (unsigned long) 4093,
-      (unsigned long) 8191,
-      (unsigned long) 16381,
-      (unsigned long) 32749,
-      (unsigned long) 65521,
-      (unsigned long) 131071,
-      (unsigned long) 262139,
-      (unsigned long) 524287,
-      (unsigned long) 1048573,
-      (unsigned long) 2097143,
-      (unsigned long) 4194301,
-      (unsigned long) 8388593,
-      (unsigned long) 16777213,
-      (unsigned long) 33554393,
-      (unsigned long) 67108859,
-      (unsigned long) 134217689,
-      (unsigned long) 268435399,
-      (unsigned long) 536870909,
-      (unsigned long) 1073741789,
-      (unsigned long) 2147483647,
-					/* 4294967291L */
-      ((unsigned long) 2147483647) + ((unsigned long) 2147483644),
+      UINT32_C (31),
+      UINT32_C (61),
+      UINT32_C (127),
+      UINT32_C (251),
+      UINT32_C (509),
+      UINT32_C (1021),
+      UINT32_C (2039),
+      UINT32_C (4093),
+      UINT32_C (8191),
+      UINT32_C (16381),
+      UINT32_C (32749),
+      UINT32_C (65521),
+      UINT32_C (131071),
+      UINT32_C (262139),
+      UINT32_C (524287),
+      UINT32_C (1048573),
+      UINT32_C (2097143),
+      UINT32_C (4194301),
+      UINT32_C (8388593),
+      UINT32_C (16777213),
+      UINT32_C (33554393),
+      UINT32_C (67108859),
+      UINT32_C (134217689),
+      UINT32_C (268435399),
+      UINT32_C (536870909),
+      UINT32_C (1073741789),
+      UINT32_C (2147483647),
+      UINT32_C (4294967291)
   };
 
-  const unsigned long *low = &primes[0];
-  const unsigned long *high = &primes[sizeof (primes) / sizeof (primes[0])];
+  const uint32_t *low = &primes[0];
+  const uint32_t *high = &primes[sizeof (primes) / sizeof (primes[0])];
 
   while (low != high)
     {
-      const unsigned long *mid = low + (high - low) / 2;
+      const uint32_t *mid = low + (high - low) / 2;
       if (n >= *mid)
 	low = mid + 1;
       else
@@ -360,11 +403,24 @@ higher_prime_number (unsigned long n)
   return *low;
 }
 
-static unsigned long bfd_default_hash_table_size = DEFAULT_SIZE;
+static unsigned int bfd_default_hash_table_size = DEFAULT_SIZE;
 
-/* Create a new hash table, given a number of entries.  */
+/*
+FUNCTION
+	bfd_hash_table_init_n
+
+SYNOPSIS
+	bool bfd_hash_table_init_n
+	  (struct bfd_hash_table *,
+	   struct bfd_hash_entry *(* {*newfunc*})
+	     (struct bfd_hash_entry *, struct bfd_hash_table *, const char *),
+	   unsigned int {*entsize*}, unsigned int {*size*});
 
-bfd_boolean
+DESCRIPTION
+	Create a new hash table, given a number of entries.
+*/
+
+bool
 bfd_hash_table_init_n (struct bfd_hash_table *table,
 		       struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
 							  struct bfd_hash_table *,
@@ -379,14 +435,14 @@ bfd_hash_table_init_n (struct bfd_hash_t
   if (alloc / sizeof (struct bfd_hash_entry *) != size)
     {
       bfd_set_error (bfd_error_no_memory);
-      return FALSE;
+      return false;
     }
 
   table->memory = (void *) objalloc_create ();
   if (table->memory == NULL)
     {
       bfd_set_error (bfd_error_no_memory);
-      return FALSE;
+      return false;
     }
   table->table = (struct bfd_hash_entry **)
       objalloc_alloc ((struct objalloc *) table->memory, alloc);
@@ -394,7 +450,7 @@ bfd_hash_table_init_n (struct bfd_hash_t
     {
       bfd_hash_table_free (table);
       bfd_set_error (bfd_error_no_memory);
-      return FALSE;
+      return false;
     }
   memset ((void *) table->table, 0, alloc);
   table->size = size;
@@ -402,12 +458,25 @@ bfd_hash_table_init_n (struct bfd_hash_t
   table->count = 0;
   table->frozen = 0;
   table->newfunc = newfunc;
-  return TRUE;
+  return true;
 }
 
-/* Create a new hash table with the default number of entries.  */
+/*
+FUNCTION
+	bfd_hash_table_init
+
+SYNOPSIS
+	bool bfd_hash_table_init
+	  (struct bfd_hash_table *,
+	   struct bfd_hash_entry *(* {*newfunc*})
+	     (struct bfd_hash_entry *, struct bfd_hash_table *, const char *),
+	   unsigned int {*entsize*});
 
-bfd_boolean
+DESCRIPTION
+	Create a new hash table with the default number of entries.
+*/
+
+bool
 bfd_hash_table_init (struct bfd_hash_table *table,
 		     struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
 							struct bfd_hash_table *,
@@ -418,7 +487,16 @@ bfd_hash_table_init (struct bfd_hash_tab
 				bfd_default_hash_table_size);
 }
 
-/* Free a hash table.  */
+/*
+FUNCTION
+	bfd_hash_table_free
+
+SYNOPSIS
+	void bfd_hash_table_free (struct bfd_hash_table *);
+
+DESCRIPTION
+	Free a hash table.
+*/
 
 void
 bfd_hash_table_free (struct bfd_hash_table *table)
@@ -452,13 +530,24 @@ bfd_hash_hash (const char *string, unsig
   return hash;
 }
 
-/* Look up a string in a hash table.  */
+/*
+FUNCTION
+	bfd_hash_lookup
+
+SYNOPSIS
+	struct bfd_hash_entry *bfd_hash_lookup
+	  (struct bfd_hash_table *, const char *,
+	   bool {*create*}, bool {*copy*});
+
+DESCRIPTION
+	Look up a string in a hash table.
+*/
 
 struct bfd_hash_entry *
 bfd_hash_lookup (struct bfd_hash_table *table,
 		 const char *string,
-		 bfd_boolean create,
-		 bfd_boolean copy)
+		 bool create,
+		 bool copy)
 {
   unsigned long hash;
   struct bfd_hash_entry *hashp;
@@ -497,7 +586,19 @@ bfd_hash_lookup (struct bfd_hash_table *
   return bfd_hash_insert (table, string, hash);
 }
 
-/* Insert an entry in a hash table.  */
+/*
+FUNCTION
+	bfd_hash_insert
+
+SYNOPSIS
+	struct bfd_hash_entry *bfd_hash_insert
+	  (struct bfd_hash_table *,
+	   const char *,
+	   unsigned long {*hash*});
+
+DESCRIPTION
+	Insert an entry in a hash table.
+*/
 
 struct bfd_hash_entry *
 bfd_hash_insert (struct bfd_hash_table *table,
@@ -562,7 +663,18 @@ bfd_hash_insert (struct bfd_hash_table *
   return hashp;
 }
 
-/* Rename an entry in a hash table.  */
+/*
+FUNCTION
+	bfd_hash_rename
+
+SYNOPSIS
+	void bfd_hash_rename (struct bfd_hash_table *,
+			      const char *,
+			      struct bfd_hash_entry *);
+
+DESCRIPTION
+	Rename an entry in a hash table.
+*/
 
 void
 bfd_hash_rename (struct bfd_hash_table *table,
@@ -587,7 +699,18 @@ bfd_hash_rename (struct bfd_hash_table *
   table->table[_index] = ent;
 }
 
-/* Replace an entry in a hash table.  */
+/*
+FUNCTION
+	bfd_hash_replace
+
+SYNOPSIS
+	void bfd_hash_replace (struct bfd_hash_table *,
+			       struct bfd_hash_entry * {*old*},
+			       struct bfd_hash_entry * {*new*});
+
+DESCRIPTION
+	Replace an entry in a hash table.
+*/
 
 void
 bfd_hash_replace (struct bfd_hash_table *table,
@@ -612,7 +735,17 @@ bfd_hash_replace (struct bfd_hash_table
   abort ();
 }
 
-/* Allocate space in a hash table.  */
+/*
+FUNCTION
+	bfd_hash_allocate
+
+SYNOPSIS
+	void *bfd_hash_allocate (struct bfd_hash_table *,
+				 unsigned int {*size*});
+
+DESCRIPTION
+	Allocate space in a hash table.
+*/
 
 void *
 bfd_hash_allocate (struct bfd_hash_table *table,
@@ -626,7 +759,19 @@ bfd_hash_allocate (struct bfd_hash_table
   return ret;
 }
 
-/* Base method for creating a new hash table entry.  */
+/*
+FUNCTION
+	bfd_hash_newfunc
+
+SYNOPSIS
+	struct bfd_hash_entry *bfd_hash_newfunc
+	  (struct bfd_hash_entry *,
+	   struct bfd_hash_table *,
+	   const char *);
+
+DESCRIPTION
+	Base method for creating a new hash table entry.
+*/
 
 struct bfd_hash_entry *
 bfd_hash_newfunc (struct bfd_hash_entry *entry,
@@ -639,12 +784,24 @@ bfd_hash_newfunc (struct bfd_hash_entry
   return entry;
 }
 
-/* Traverse a hash table.  */
+/*
+FUNCTION
+	bfd_hash_traverse
+
+SYNOPSIS
+	void bfd_hash_traverse
+	  (struct bfd_hash_table *,
+	   bool (*) (struct bfd_hash_entry *, void *),
+	   void *);
+
+DESCRIPTION
+	Traverse a hash table.
+*/
 
 void
 bfd_hash_traverse (struct bfd_hash_table *table,
-		   bfd_boolean (*func) (struct bfd_hash_entry *, void *),
-		   void * info)
+		   bool (*func) (struct bfd_hash_entry *, void *),
+		   void *info)
 {
   unsigned int i;
 
@@ -660,23 +817,33 @@ bfd_hash_traverse (struct bfd_hash_table
  out:
   table->frozen = 0;
 }
-
-unsigned long
-bfd_hash_set_default_size (unsigned long hash_size)
-{
-  /* Extend this prime list if you want more granularity of hash table size.  */
-  static const unsigned long hash_size_primes[] =
-    {
-      31, 61, 127, 251, 509, 1021, 2039, 4091, 8191, 16381, 32749, 65537
-    };
-  unsigned int _index;
 
-  /* Work out best prime number near the hash_size.  */
-  for (_index = 0; _index < ARRAY_SIZE (hash_size_primes) - 1; ++_index)
-    if (hash_size <= hash_size_primes[_index])
-      break;
+/*
+FUNCTION
+	bfd_hash_set_default_size
+
+SYNOPSIS
+	unsigned int bfd_hash_set_default_size (unsigned int);
+
+DESCRIPTION
+	Set hash table default size.
+*/
 
-  bfd_default_hash_table_size = hash_size_primes[_index];
+unsigned int
+bfd_hash_set_default_size (unsigned int hash_size)
+{
+  /* These silly_size values result in around 1G and 32M of memory
+     being allocated for the table of pointers.  Note that the number
+     of elements allocated will be almost twice the size of any power
+     of two chosen here.  */
+  unsigned int silly_size = sizeof (size_t) > 4 ? 0x4000000 : 0x400000;
+  if (hash_size > silly_size)
+    hash_size = silly_size;
+  else if (hash_size != 0)
+    hash_size--;
+  hash_size = higher_prime_number (hash_size);
+  BFD_ASSERT (hash_size != 0);
+  bfd_default_hash_table_size = hash_size;
   return bfd_default_hash_table_size;
 }
 
@@ -714,11 +881,12 @@ struct bfd_strtab_hash
   struct strtab_hash_entry *first;
   /* Last string in strtab.  */
   struct strtab_hash_entry *last;
-  /* Whether to precede strings with a two byte length, as in the
-     XCOFF .debug section.  */
-  bfd_boolean xcoff;
+  /* Whether to precede strings with a two or four byte length,
+     as in the XCOFF .debug section.  */
+  char length_field_size;
 };
 
+
 /* Routine to create an entry in a strtab.  */
 
 static struct bfd_hash_entry *
@@ -756,13 +924,22 @@ strtab_hash_newfunc (struct bfd_hash_ent
   ((struct strtab_hash_entry *) \
    bfd_hash_lookup (&(t)->table, (string), (create), (copy)))
 
-/* Create a new strtab.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_stringtab_init
+
+SYNOPSIS
+	struct bfd_strtab_hash *_bfd_stringtab_init (void);
+
+DESCRIPTION
+	Create a new strtab.
+*/
 
 struct bfd_strtab_hash *
 _bfd_stringtab_init (void)
 {
   struct bfd_strtab_hash *table;
-  bfd_size_type amt = sizeof (* table);
+  size_t amt = sizeof (* table);
 
   table = (struct bfd_strtab_hash *) bfd_malloc (amt);
   if (table == NULL)
@@ -778,27 +955,46 @@ _bfd_stringtab_init (void)
   table->size = 0;
   table->first = NULL;
   table->last = NULL;
-  table->xcoff = FALSE;
+  table->length_field_size = 0;
 
   return table;
 }
 
-/* Create a new strtab in which the strings are output in the format
-   used in the XCOFF .debug section: a two byte length precedes each
-   string.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_xcoff_stringtab_init
+
+SYNOPSIS
+	struct bfd_strtab_hash *_bfd_xcoff_stringtab_init
+	  (bool {*isxcoff64*});
+
+DESCRIPTION
+	Create a new strtab in which the strings are output in the format
+	used in the XCOFF .debug section: a two byte length precedes each
+	string.
+*/
 
 struct bfd_strtab_hash *
-_bfd_xcoff_stringtab_init (void)
+_bfd_xcoff_stringtab_init (bool isxcoff64)
 {
   struct bfd_strtab_hash *ret;
 
   ret = _bfd_stringtab_init ();
   if (ret != NULL)
-    ret->xcoff = TRUE;
+    ret->length_field_size = isxcoff64 ? 4 : 2;
   return ret;
 }
 
-/* Free a strtab.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_stringtab_free
+
+SYNOPSIS
+	void _bfd_stringtab_free (struct bfd_strtab_hash *);
+
+DESCRIPTION
+	Free a strtab.
+*/
 
 void
 _bfd_stringtab_free (struct bfd_strtab_hash *table)
@@ -807,22 +1003,33 @@ _bfd_stringtab_free (struct bfd_strtab_h
   free (table);
 }
 
-/* Get the index of a string in a strtab, adding it if it is not
-   already present.  If HASH is FALSE, we don't really use the hash
-   table, and we don't eliminate duplicate strings.  If COPY is true
-   then store a copy of STR if creating a new entry.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_stringtab_add
+
+SYNOPSIS
+	bfd_size_type _bfd_stringtab_add
+	  (struct bfd_strtab_hash *, const char *,
+	   bool {*hash*}, bool {*copy*});
+
+DESCRIPTION
+	Get the index of a string in a strtab, adding it if it is not
+	already present.  If HASH is FALSE, we don't really use the hash
+	table, and we don't eliminate duplicate strings.  If COPY is true
+	then store a copy of STR if creating a new entry.
+*/
 
 bfd_size_type
 _bfd_stringtab_add (struct bfd_strtab_hash *tab,
 		    const char *str,
-		    bfd_boolean hash,
-		    bfd_boolean copy)
+		    bool hash,
+		    bool copy)
 {
   struct strtab_hash_entry *entry;
 
   if (hash)
     {
-      entry = strtab_hash_lookup (tab, str, TRUE, copy);
+      entry = strtab_hash_lookup (tab, str, true, copy);
       if (entry == NULL)
 	return (bfd_size_type) -1;
     }
@@ -853,11 +1060,8 @@ _bfd_stringtab_add (struct bfd_strtab_ha
     {
       entry->index = tab->size;
       tab->size += strlen (str) + 1;
-      if (tab->xcoff)
-	{
-	  entry->index += 2;
-	  tab->size += 2;
-	}
+      entry->index += tab->length_field_size;
+      tab->size += tab->length_field_size;
       if (tab->first == NULL)
 	tab->first = entry;
       else
@@ -868,7 +1072,16 @@ _bfd_stringtab_add (struct bfd_strtab_ha
   return entry->index;
 }
 
-/* Get the number of bytes in a strtab.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_stringtab_size
+
+SYNOPSIS
+	bfd_size_type _bfd_stringtab_size (struct bfd_strtab_hash *);
+
+DESCRIPTION
+	Get the number of bytes in a strtab.
+*/
 
 bfd_size_type
 _bfd_stringtab_size (struct bfd_strtab_hash *tab)
@@ -876,17 +1089,23 @@ _bfd_stringtab_size (struct bfd_strtab_h
   return tab->size;
 }
 
-/* Write out a strtab.  ABFD must already be at the right location in
-   the file.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_stringtab_emit
 
-bfd_boolean
+SYNOPSIS
+	bool _bfd_stringtab_emit (bfd *, struct bfd_strtab_hash *);
+
+DESCRIPTION
+	Write out a strtab.  ABFD must already be at the right location in
+	the file.
+*/
+
+bool
 _bfd_stringtab_emit (bfd *abfd, struct bfd_strtab_hash *tab)
 {
-  bfd_boolean xcoff;
   struct strtab_hash_entry *entry;
 
-  xcoff = tab->xcoff;
-
   for (entry = tab->first; entry != NULL; entry = entry->next)
     {
       const char *str;
@@ -895,19 +1114,28 @@ _bfd_stringtab_emit (bfd *abfd, struct b
       str = entry->root.string;
       len = strlen (str) + 1;
 
-      if (xcoff)
+      if (tab->length_field_size == 4)
+	{
+	  bfd_byte buf[4];
+
+	  /* The output length includes the null byte.  */
+	  bfd_put_32 (abfd, len, buf);
+	  if (bfd_write (buf, 4, abfd) != 4)
+	    return false;
+	}
+      else if (tab->length_field_size == 2)
 	{
 	  bfd_byte buf[2];
 
 	  /* The output length includes the null byte.  */
-	  bfd_put_16 (abfd, (bfd_vma) len, buf);
-	  if (bfd_bwrite ((void *) buf, (bfd_size_type) 2, abfd) != 2)
-	    return FALSE;
+	  bfd_put_16 (abfd, len, buf);
+	  if (bfd_write (buf, 2, abfd) != 2)
+	    return false;
 	}
 
-      if (bfd_bwrite ((void *) str, (bfd_size_type) len, abfd) != len)
-	return FALSE;
+      if (bfd_write (str, len, abfd) != len)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/host-aout.c ./bfd/host-aout.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/host-aout.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/host-aout.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD backend for local host's a.out binaries
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.  Probably John Gilmore's fault.
 
    This file is part of BFD, the Binary File Descriptor library.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/alphalinux.h ./bfd/hosts/alphalinux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/alphalinux.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/alphalinux.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/alphavms.h ./bfd/hosts/alphavms.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/alphavms.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/alphavms.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* alphavms.h -- BFD definitions for an openVMS host
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Written by Klaus Kämpf (kkaempf@progis.de)
    of proGIS Softwareentwicklung, Aachen, Germany
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/decstation.h ./bfd/hosts/decstation.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/decstation.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/decstation.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/dpx2.h ./bfd/hosts/dpx2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/dpx2.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/dpx2.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/i386bsd.h ./bfd/hosts/i386bsd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/i386bsd.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/i386bsd.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/i386linux.h ./bfd/hosts/i386linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/i386linux.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/i386linux.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/i386mach3.h ./bfd/hosts/i386mach3.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/i386mach3.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/i386mach3.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/i386sco.h ./bfd/hosts/i386sco.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/i386sco.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/i386sco.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-/* Core file stuff.  At least some, perhaps all, of the following
-   defines work on many more systems than just SCO.  */
-
-#define NBPG NBPC
-#define UPAGES USIZE
-#define HOST_DATA_START_ADDR u.u_exdata.ux_datorg
-#define HOST_STACK_START_ADDR u.u_sub
-#define TRAD_UNIX_CORE_FILE_FAILING_SIGNAL(abfd) \
-  ((core_upage(abfd)->u_sysabort != 0) \
-   ? core_upage(abfd)->u_sysabort \
-   : -1)
-
-/* According to the manpage, a version 2 SCO corefile can contain
-   various additional sections (it is cleverly arranged so the u area,
-   data, and stack are first where we can find them).  So without
-   writing lots of code to parse all their headers and stuff, we can't
-   know whether a corefile is bigger than it should be.  */
-
-#define TRAD_CORE_ALLOW_ANY_EXTRA_SIZE 1
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/m68klinux.h ./bfd/hosts/m68klinux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/m68klinux.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/m68klinux.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/mipsbsd.h ./bfd/hosts/mipsbsd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/mipsbsd.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/mipsbsd.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include <machine/param.h>
-#include <machine/vmparam.h>
-#undef ALIGN
-
-#define	HOST_PAGE_SIZE		NBPG
-/* #define	HOST_SEGMENT_SIZE	NBPG -- we use HOST_DATA_START_ADDR */
-#define	HOST_MACHINE_ARCH	bfd_arch_mips
-/* #define	HOST_MACHINE_MACHINE	 */
-
-#define	HOST_TEXT_START_ADDR		USRTEXT
-#define	HOST_STACK_END_ADDR		USRSTACK
-#define NO_CORE_COMMAND
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/mipsmach3.h ./bfd/hosts/mipsmach3.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/mipsmach3.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/mipsmach3.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/news-mips.h ./bfd/hosts/news-mips.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/news-mips.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/news-mips.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/pc532mach.h ./bfd/hosts/pc532mach.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/pc532mach.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/pc532mach.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/riscos.h ./bfd/hosts/riscos.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/riscos.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/riscos.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/symmetry.h ./bfd/hosts/symmetry.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/symmetry.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/symmetry.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,39 +0,0 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-/* Symmetry running either dynix 3.1 (bsd) or ptx (sysv).  */
-
-#define NBPG 4096
-#define UPAGES 1
-
-#ifdef _SEQUENT_
-/* ptx */
-#define HOST_TEXT_START_ADDR 0
-#define HOST_STACK_END_ADDR 0x3fffe000
-#define TRAD_CORE_USER_OFFSET ((UPAGES * NBPG) - sizeof (struct user))
-#else
-/* dynix */
-#define HOST_TEXT_START_ADDR 0x1000
-#define HOST_DATA_START_ADDR (NBPG * u.u_tsize)
-#define HOST_STACK_END_ADDR 0x3ffff000
-#define TRAD_UNIX_CORE_FILE_FAILING_SIGNAL(core_bfd) \
-  ((core_bfd)->tdata.trad_core_data->u.u_arg[0])
-#endif
-
-#define TRAD_CORE_DSIZE_INCLUDES_TSIZE
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/vaxbsd.h ./bfd/hosts/vaxbsd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/vaxbsd.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/vaxbsd.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/vaxlinux.h ./bfd/hosts/vaxlinux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/vaxlinux.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/vaxlinux.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/vaxult2.h ./bfd/hosts/vaxult2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/vaxult2.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/vaxult2.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,27 +0,0 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include <machine/param.h>
-#include <machine/vmparam.h>
-#define	HOST_PAGE_SIZE		(NBPG*CLSIZE)
-#define	HOST_MACHINE_ARCH	bfd_arch_vax
-
-#define	HOST_TEXT_START_ADDR	USRTEXT
-#define	HOST_STACK_END_ADDR	USRSTACK
-#undef	HOST_BIG_ENDIAN_P
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/vaxult.h ./bfd/hosts/vaxult.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/vaxult.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/vaxult.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,27 +0,0 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include <machine/param.h>
-#include <machine/vmparam.h>
-#define	HOST_PAGE_SIZE		(NBPG*CLSIZE)
-#define	HOST_MACHINE_ARCH	bfd_arch_vax
-
-#define	HOST_TEXT_START_ADDR	USRTEXT
-#define	HOST_STACK_END_ADDR	USRSTACK
-#undef	HOST_BIG_ENDIAN_P
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/x86-64linux.h ./bfd/hosts/x86-64linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hosts/x86-64linux.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hosts/x86-64linux.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2024 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -31,13 +31,7 @@
 
 /* We define here only the symbols differing from their 64-bit variant.  */
 #include <sys/procfs.h>
-
-#ifdef HAVE_STDINT_H
 #include <stdint.h>
-#else
-typedef unsigned int uint32_t;
-typedef unsigned long long int uint64_t;
-#endif
 
 /* Unsigned 64-bit integer aligned to 8 bytes.  */
 typedef uint64_t __attribute__ ((__aligned__ (8))) a8_uint64_t;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hppabsd-core.c ./bfd/hppabsd-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hppabsd-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hppabsd-core.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for HPPA BSD core files.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -90,7 +90,7 @@ make_bfd_asection (bfd *abfd,
   return asect;
 }
 
-static const bfd_target *
+static bfd_cleanup
 hppabsd_core_core_file_p (bfd *abfd)
 {
   int val;
@@ -100,7 +100,7 @@ hppabsd_core_core_file_p (bfd *abfd)
 
   /* Try to read in the u-area.  We will need information from this
      to know how to grok the rest of the core structures.  */
-  val = bfd_bread ((void *) &u, (bfd_size_type) sizeof u, abfd);
+  val = bfd_read (&u, sizeof u, abfd);
   if (val != sizeof u)
     {
       if (bfd_get_error () != bfd_error_system_call)
@@ -181,7 +181,7 @@ hppabsd_core_core_file_p (bfd *abfd)
 
   strncpy (core_command (abfd), u.u_comm, MAXCOMLEN + 1);
   core_signal (abfd) = u.u_code;
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  fail:
   bfd_release (abfd, abfd->tdata.any);
@@ -213,9 +213,9 @@ swap_abort (void)
 #define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
 #define	NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
 #define	NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
-#define	NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
-#define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
-#define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
+#define	NO_GET64 ((uint64_t (*) (const void *)) swap_abort)
+#define	NO_PUT64 ((void (*) (uint64_t, void *)) swap_abort)
+#define	NO_GETS64 ((int64_t (*) (const void *)) swap_abort)
 
 const bfd_target core_hppabsd_vec =
   {
@@ -230,6 +230,7 @@ const bfd_target core_hppabsd_vec =
     0,							   /* symbol prefix */
     ' ',						   /* ar_pad_char */
     16,							   /* ar_max_namelen */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
     NO_GET64, NO_GETS64, NO_PUT64,	/* 64 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 32 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 16 bit data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hpux-core.c ./bfd/hpux-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/hpux-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/hpux-core.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for HP/UX core files.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Written by Stu Grossman, Cygnus Support.
    Converted to back-end form by Ian Lance Taylor, Cygnus SUpport
 
@@ -48,19 +48,7 @@
 #endif /* HOST_HPPABSD */
 
 #include <sys/param.h>
-#ifdef HAVE_DIRENT_H
-# include <dirent.h>
-#else
-# ifdef HAVE_SYS_NDIR_H
-#  include <sys/ndir.h>
-# endif
-# ifdef HAVE_SYS_DIR_H
-#  include <sys/dir.h>
-# endif
-# ifdef HAVE_NDIR_H
-#  include <ndir.h>
-# endif
-#endif
+#include <dirent.h>
 #include <signal.h>
 #ifdef HPUX_CORE
 #include <machine/reg.h>
@@ -106,7 +94,7 @@ struct hpux_core_struct
 
 static asection *make_bfd_asection (bfd *, const char *, flagword,
 				    bfd_size_type, bfd_vma, unsigned int);
-static const bfd_target *hpux_core_core_file_p (bfd *);
+static bfd_cleanup hpux_core_core_file_p (bfd *);
 static char *hpux_core_core_file_failing_command (bfd *);
 static int hpux_core_core_file_failing_signal (bfd *);
 static void swap_abort (void);
@@ -145,7 +133,7 @@ thread_section_p (bfd *abfd ATTRIBUTE_UN
 		  asection *sect,
 		  void *obj ATTRIBUTE_UNUSED)
 {
-  return CONST_STRNEQ (sect->name, ".reg/");
+  return startswith (sect->name, ".reg/");
 }
 
 /* this function builds a bfd target if the file is a corefile.
@@ -157,7 +145,7 @@ thread_section_p (bfd *abfd ATTRIBUTE_UN
    in which the core file is generated by some non-hpux application.
    (I am just guessing here!)
 */
-static const bfd_target *
+static bfd_cleanup
 hpux_core_core_file_p (bfd *abfd)
 {
   int  good_sections = 0;
@@ -173,8 +161,7 @@ hpux_core_core_file_p (bfd *abfd)
       int val;
       struct corehead core_header;
 
-      val = bfd_bread ((void *) &core_header,
-		      (bfd_size_type) sizeof core_header, abfd);
+      val = bfd_read (&core_header, sizeof core_header, abfd);
       if (val <= 0)
 	break;
       switch (core_header.type)
@@ -182,14 +169,13 @@ hpux_core_core_file_p (bfd *abfd)
 	case CORE_KERNEL:
 	case CORE_FORMAT:
 	  /* Just skip this.  */
-	  bfd_seek (abfd, (file_ptr) core_header.len, SEEK_CUR);
+	  bfd_seek (abfd, core_header.len, SEEK_CUR);
 	  good_sections++;
 	  break;
 	case CORE_EXEC:
 	  {
 	    struct proc_exec proc_exec;
-	    if (bfd_bread ((void *) &proc_exec, (bfd_size_type) core_header.len,
-			  abfd) != core_header.len)
+	    if (bfd_read (&proc_exec, core_header.len, abfd) != core_header.len)
 	      break;
 	    strncpy (core_command (abfd), proc_exec.cmd, MAXCOMLEN + 1);
 	    good_sections++;
@@ -203,13 +189,12 @@ hpux_core_core_file_p (bfd *abfd)
 	    /* We need to read this section, 'cause we need to determine
 	       whether the core-dumped app was threaded before we create
 	       any .reg sections. */
-	    if (bfd_bread (&proc_info, (bfd_size_type) core_header.len, abfd)
-		!= core_header.len)
+	    if (bfd_read (&proc_info, core_header.len, abfd) != core_header.len)
 	      break;
 
 	      /* However, we also want to create those sections with the
 		 file positioned at the start of the record, it seems. */
-	    if (bfd_seek (abfd, -((file_ptr) core_header.len), SEEK_CUR) != 0)
+	    if (bfd_seek (abfd, -(file_ptr) core_header.len, SEEK_CUR) != 0)
 	      break;
 
 #if defined(PROC_INFO_HAS_THREAD_ID)
@@ -342,7 +327,7 @@ hpux_core_core_file_p (bfd *abfd)
        "  As a result, some information may be unavailable.\n",
        abfd);
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  fail:
   bfd_release (abfd, core_hdr (abfd));
@@ -374,9 +359,9 @@ swap_abort (void)
 #define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
 #define	NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
 #define	NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
-#define	NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
-#define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
-#define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
+#define	NO_GET64 ((uint64_t (*) (const void *)) swap_abort)
+#define	NO_PUT64 ((void (*) (uint64_t, void *)) swap_abort)
+#define	NO_GETS64 ((int64_t (*) (const void *)) swap_abort)
 
 const bfd_target core_hpux_vec =
   {
@@ -392,6 +377,7 @@ const bfd_target core_hpux_vec =
     ' ',			/* ar_pad_char */
     16,				/* ar_max_namelen */
     0,				/* match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
     NO_GET64, NO_GETS64, NO_PUT64,	/* 64 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 32 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 16 bit data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/i386aout.c ./bfd/i386aout.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/i386aout.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/i386aout.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for i386 a.out binaries.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -38,7 +38,6 @@
    the tokens.  */
 #define MY(OP) CONCAT2 (i386_aout_,OP)
 #define TARGETNAME "a.out-i386"
-#define NO_WRITE_HEADER_KLUDGE 1
 
 #include "sysdep.h"
 #include "bfd.h"
@@ -48,7 +47,7 @@
 
 /* Set the machine type correctly.  */
 
-static bfd_boolean
+static bool
 i386aout_write_object_contents (bfd *abfd)
 {
   struct external_exec exec_bytes;
@@ -60,7 +59,7 @@ i386aout_write_object_contents (bfd *abf
 
   WRITE_HEADERS (abfd, execp);
 
-  return TRUE;
+  return true;
 }
 
 #define MY_write_object_contents  i386aout_write_object_contents
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/i386bsd.c ./bfd/i386bsd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/i386bsd.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/i386bsd.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for i386 a.out binaries under BSD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/i386lynx.c ./bfd/i386lynx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/i386lynx.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/i386lynx.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for i386 a.out binaries under LynxOS.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -34,48 +34,46 @@
 #include "libbfd.h"
 
 #ifndef WRITE_HEADERS
-#define WRITE_HEADERS(abfd, execp)					      \
-      {									      \
-	if (adata(abfd).magic == undecided_magic)			      \
-	  NAME(aout,adjust_sizes_and_vmas) (abfd);			      \
-									      \
-	execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE;	      \
-	execp->a_entry = bfd_get_start_address (abfd);			      \
-									      \
-	execp->a_trsize = ((obj_textsec (abfd)->reloc_count) *		      \
-			   obj_reloc_entry_size (abfd));		      \
-	execp->a_drsize = ((obj_datasec (abfd)->reloc_count) *		      \
-			   obj_reloc_entry_size (abfd));		      \
-	NAME(aout,swap_exec_header_out) (abfd, execp, &exec_bytes);	      \
-									      \
-	if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0		      \
-	    || bfd_bwrite (&exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, \
-			  abfd) != EXEC_BYTES_SIZE)			      \
-	  return FALSE;							      \
-	/* Now write out reloc info, followed by syms and strings */	      \
-									      \
-	if (bfd_get_symcount (abfd) != 0)				      \
-	    {								      \
-	      if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (execp)), SEEK_SET)    \
-		  != 0)							      \
-		return FALSE;						      \
-									      \
-	      if (! NAME(aout,write_syms) (abfd)) return FALSE;		      \
-									      \
-	      if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (execp)), SEEK_SET)   \
-		  != 0)							      \
-		return FALSE;						      \
-									      \
-	      if (!NAME(lynx,squirt_out_relocs) (abfd, obj_textsec (abfd)))   \
-		return FALSE;						      \
-	      if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (execp)), SEEK_SET)   \
-		  != 0)							      \
-		return 0;						      \
-									      \
-	      if (!NAME(lynx,squirt_out_relocs) (abfd, obj_datasec (abfd)))   \
-		return FALSE;						      \
-	    }								      \
-      }
+#define WRITE_HEADERS(abfd, execp)					\
+  {									\
+    if (adata(abfd).magic == undecided_magic)				\
+      NAME (aout, adjust_sizes_and_vmas) (abfd);			\
+									\
+    execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE;	\
+    execp->a_entry = bfd_get_start_address (abfd);			\
+									\
+    execp->a_trsize = ((obj_textsec (abfd)->reloc_count)		\
+		       * obj_reloc_entry_size (abfd));			\
+    execp->a_drsize = ((obj_datasec (abfd)->reloc_count)		\
+		       * obj_reloc_entry_size (abfd));			\
+    NAME (aout, swap_exec_header_out) (abfd, execp, &exec_bytes);	\
+									\
+    if (bfd_seek (abfd, 0, SEEK_SET) != 0				\
+	|| bfd_write (&exec_bytes, EXEC_BYTES_SIZE,			\
+		      abfd) != EXEC_BYTES_SIZE)				\
+      return false;							\
+    /* Now write out reloc info, followed by syms and strings.  */	\
+									\
+    if (bfd_get_outsymbols (abfd) != NULL				\
+	&& bfd_get_symcount (abfd) != 0)				\
+      {									\
+	if (bfd_seek (abfd, N_SYMOFF (execp), SEEK_SET) != 0)		\
+	  return false;							\
+									\
+	if (! NAME (aout, write_syms) (abfd))				\
+	  return false;							\
+      }									\
+									\
+    if (bfd_seek (abfd, N_TRELOFF (execp), SEEK_SET) != 0)		\
+      return false;							\
+    if (!NAME (lynx, squirt_out_relocs) (abfd, obj_textsec (abfd)))	\
+      return false;							\
+									\
+    if (bfd_seek (abfd, N_DRELOFF (execp), SEEK_SET) != 0)		\
+      return false;							\
+    if (!NAME (lynx, squirt_out_relocs) (abfd, obj_datasec (abfd)))	\
+      return false;							\
+  }
 #endif
 
 #include "libaout.h"
@@ -86,8 +84,8 @@
 
 char *lynx_core_file_failing_command ();
 int lynx_core_file_failing_signal ();
-bfd_boolean lynx_core_file_matches_executable_p ();
-const bfd_target *lynx_core_file_p ();
+bool lynx_core_file_matches_executable_p ();
+bfd_cleanup lynx_core_file_p ();
 
 #define	MY_core_file_failing_command lynx_core_file_failing_command
 #define	MY_core_file_failing_signal lynx_core_file_failing_signal
@@ -120,7 +118,7 @@ NAME(lynx,swap_std_reloc_out) (bfd *abfd
 
   PUT_WORD (abfd, g->address, natptr->r_address);
 
-  r_length = g->howto->size;	/* Size as a power of two */
+  r_length = bfd_log2 (bfd_get_reloc_size (g->howto));
   r_pcrel = (int) g->howto->pc_relative;	/* Relative to PC? */
   /* r_baserel, r_jmptable, r_relative???  FIXME-soon */
   r_baserel = 0;
@@ -282,38 +280,42 @@ NAME(lynx,swap_ext_reloc_out) (bfd *abfd
 #define MOVE_ADDRESS(ad)						\
   if (r_extern)								\
     {									\
-   /* undefined symbol */						\
-     cache_ptr->sym_ptr_ptr = symbols + r_index;			\
-     cache_ptr->addend = ad;						\
+      /* undefined symbol */						\
+      if (symbols != NULL && r_index < bfd_get_symcount (abfd))		\
+	cache_ptr->sym_ptr_ptr = symbols + r_index;			\
+      else								\
+	cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;	\
+      cache_ptr->addend = ad;						\
     }									\
   else									\
     {									\
-    /* defined, section relative. replace symbol with pointer to	\
-       symbol which points to section  */				\
-    switch (r_index) {							\
-    case N_TEXT:							\
-    case N_TEXT | N_EXT:						\
-      cache_ptr->sym_ptr_ptr  = obj_textsec(abfd)->symbol_ptr_ptr;	\
-      cache_ptr->addend = ad  - su->textsec->vma;			\
-      break;								\
-    case N_DATA:							\
-    case N_DATA | N_EXT:						\
-      cache_ptr->sym_ptr_ptr  = obj_datasec(abfd)->symbol_ptr_ptr;	\
-      cache_ptr->addend = ad - su->datasec->vma;			\
-      break;								\
-    case N_BSS:								\
-    case N_BSS | N_EXT:							\
-      cache_ptr->sym_ptr_ptr  = obj_bsssec(abfd)->symbol_ptr_ptr;	\
-      cache_ptr->addend = ad - su->bsssec->vma;				\
-      break;								\
-    default:								\
-    case N_ABS:								\
-    case N_ABS | N_EXT:							\
-     cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;	\
-      cache_ptr->addend = ad;						\
-      break;								\
+      /* defined, section relative. replace symbol with pointer to	\
+	 symbol which points to section  */				\
+      switch (r_index)							\
+	{								\
+	case N_TEXT:							\
+	case N_TEXT | N_EXT:						\
+	  cache_ptr->sym_ptr_ptr  = obj_textsec(abfd)->symbol_ptr_ptr;	\
+	  cache_ptr->addend = ad  - su->textsec->vma;			\
+	  break;							\
+	case N_DATA:							\
+	case N_DATA | N_EXT:						\
+	  cache_ptr->sym_ptr_ptr  = obj_datasec(abfd)->symbol_ptr_ptr;	\
+	  cache_ptr->addend = ad - su->datasec->vma;			\
+	  break;							\
+	case N_BSS:							\
+	case N_BSS | N_EXT:						\
+	  cache_ptr->sym_ptr_ptr  = obj_bsssec(abfd)->symbol_ptr_ptr;	\
+	  cache_ptr->addend = ad - su->bsssec->vma;			\
+	  break;							\
+	default:							\
+	case N_ABS:							\
+	case N_ABS | N_EXT:						\
+	  cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;	\
+	  cache_ptr->addend = ad;					\
+	  break;							\
+	}								\
     }									\
-  }									\
 
 static void
 NAME(lynx,swap_ext_reloc_in) (bfd *abfd,
@@ -322,7 +324,7 @@ NAME(lynx,swap_ext_reloc_in) (bfd *abfd,
 			      asymbol **symbols,
 			      bfd_size_type symcount ATTRIBUTE_UNUSED)
 {
-  int r_index;
+  unsigned int r_index;
   int r_extern;
   unsigned int r_type;
   struct aoutdata *su = &(abfd->tdata.aout_data->a);
@@ -345,7 +347,7 @@ NAME(lynx,swap_std_reloc_in) (bfd *abfd,
 			      asymbol **symbols,
 			      bfd_size_type symcount ATTRIBUTE_UNUSED)
 {
-  int r_index;
+  unsigned int r_index;
   int r_extern;
   unsigned int r_length;
   int r_pcrel;
@@ -367,7 +369,7 @@ NAME(lynx,swap_std_reloc_in) (bfd *abfd,
 
 /* Reloc hackery */
 
-static bfd_boolean
+static bool
 NAME(lynx,slurp_reloc_table) (bfd *abfd,
 			      sec_ptr asect,
 			      asymbol **symbols)
@@ -379,10 +381,10 @@ NAME(lynx,slurp_reloc_table) (bfd *abfd,
   size_t each_size;
 
   if (asect->relocation)
-    return TRUE;
+    return true;
 
   if (asect->flags & SEC_CONSTRUCTOR)
-    return TRUE;
+    return true;
 
   if (asect == obj_datasec (abfd))
     {
@@ -397,11 +399,11 @@ NAME(lynx,slurp_reloc_table) (bfd *abfd,
     }
 
   bfd_set_error (bfd_error_invalid_operation);
-  return FALSE;
+  return false;
 
-doit:
+ doit:
   if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
-    return FALSE;
+    return false;
   each_size = obj_reloc_entry_size (abfd);
 
   count = reloc_size / each_size;
@@ -409,20 +411,13 @@ doit:
 
   reloc_cache = (arelent *) bfd_zmalloc (count * sizeof (arelent));
   if (!reloc_cache && count != 0)
-    return FALSE;
+    return false;
 
-  relocs = bfd_alloc (abfd, reloc_size);
+  relocs = _bfd_alloc_and_read (abfd, reloc_size, reloc_size);
   if (!relocs && reloc_size != 0)
     {
       free (reloc_cache);
-      return FALSE;
-    }
-
-  if (bfd_bread (relocs, reloc_size, abfd) != reloc_size)
-    {
-      bfd_release (abfd, relocs);
-      free (reloc_cache);
-      return FALSE;
+      return false;
     }
 
   if (each_size == RELOC_EXT_SIZE)
@@ -454,14 +449,14 @@ doit:
   bfd_release (abfd, relocs);
   asect->relocation = reloc_cache;
   asect->reloc_count = count;
-  return TRUE;
+  return true;
 }
 
 
 
 /* Write out a relocation section into an object file.  */
 
-static bfd_boolean
+static bool
 NAME(lynx,squirt_out_relocs) (bfd *abfd, asection *section)
 {
   arelent **generic;
@@ -471,14 +466,14 @@ NAME(lynx,squirt_out_relocs) (bfd *abfd,
   bfd_size_type natsize;
 
   if (count == 0)
-    return TRUE;
+    return true;
 
   each_size = obj_reloc_entry_size (abfd);
   natsize = count;
   natsize *= each_size;
   native = (unsigned char *) bfd_zalloc (abfd, natsize);
   if (!native)
-    return FALSE;
+    return false;
 
   generic = section->orelocation;
 
@@ -497,14 +492,14 @@ NAME(lynx,squirt_out_relocs) (bfd *abfd,
 	NAME(lynx,swap_std_reloc_out) (abfd, *generic, (struct reloc_std_external *) natptr);
     }
 
-  if (bfd_bwrite (native, natsize, abfd) != natsize)
+  if (bfd_write (native, natsize, abfd) != natsize)
     {
       bfd_release (abfd, native);
-      return FALSE;
+      return false;
     }
   bfd_release (abfd, native);
 
-  return TRUE;
+  return true;
 }
 
 /* This is stupid.  This function should be a boolean predicate */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/i386msdos.c ./bfd/i386msdos.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/i386msdos.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/i386msdos.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for MS-DOS executables.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Bryan Ford of the University of Utah.
 
    Contributed by the Center for Software Science at the
@@ -33,7 +33,7 @@
 #define EXE_LOAD_LOW	0xffff
 #define EXE_PAGE_SIZE	512
 
-static bfd_boolean
+static bool
 msdos_mkobject (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_i386_i8086);
@@ -41,16 +41,16 @@ msdos_mkobject (bfd *abfd)
   return aout_32_mkobject (abfd);
 }
 
-static const bfd_target *
+static bfd_cleanup
 msdos_object_p (bfd *abfd)
 {
   struct external_DOS_hdr hdr;
   bfd_byte buffer[2];
   asection *section;
-  unsigned int size;
+  bfd_size_type size;
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_bread (&hdr, (bfd_size_type) sizeof (hdr), abfd) < DOS_HDR_SIZE)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || (size = bfd_read (&hdr, sizeof (hdr), abfd)) + 1 < DOS_HDR_SIZE + 1)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -67,9 +67,11 @@ msdos_object_p (bfd *abfd)
      e_lfanew field will be valid and point to a header beginning with one of
      the relevant signatures.  If not, e_lfanew might point to anything, so
      don't bail if we can't read there.  */
-  if (H_GET_16 (abfd, hdr.e_cparhdr) < 4
-      || bfd_seek (abfd, (file_ptr) H_GET_32 (abfd, hdr.e_lfanew), SEEK_SET) != 0
-      || bfd_bread (buffer, (bfd_size_type) 2, abfd) != 2)
+  if (size < offsetof (struct external_DOS_hdr, e_lfanew) + 4
+      || H_GET_16 (abfd, hdr.e_cparhdr) < 4)
+    ;
+  else if (bfd_seek (abfd, H_GET_32 (abfd, hdr.e_lfanew), SEEK_SET) != 0
+	   || bfd_read (buffer, 2, abfd) != 2)
     {
       if (bfd_get_error () == bfd_error_system_call)
 	return NULL;
@@ -102,7 +104,7 @@ msdos_object_p (bfd *abfd)
   size += H_GET_16 (abfd, hdr.e_cblp);
 
   /* Check that the size is valid.  */
-  if (bfd_seek (abfd, (file_ptr) (section->filepos + size), SEEK_SET) != 0)
+  if (bfd_seek (abfd, section->filepos + size, SEEK_SET) != 0)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -112,7 +114,7 @@ msdos_object_p (bfd *abfd)
   bfd_set_section_size (section, size);
   section->alignment_power = 4;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 static int
@@ -122,7 +124,7 @@ msdos_sizeof_headers (bfd *abfd ATTRIBUT
   return 0;
 }
 
-static bfd_boolean
+static bool
 msdos_write_object_contents (bfd *abfd)
 {
   static char hdr[EXE_PAGE_SIZE];
@@ -155,7 +157,7 @@ msdos_write_object_contents (bfd *abfd)
   if (high_vma > (bfd_vma)0xffff)
     {
       bfd_set_error(bfd_error_file_too_big);
-      return FALSE;
+      return false;
     }
 
   /* Constants.  */
@@ -177,14 +179,14 @@ msdos_write_object_contents (bfd *abfd)
      The program's crt0 code must relocate it to a real stack.  */
   H_PUT_16 (abfd, high_vma, &hdr[16]);
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_bwrite (hdr, (bfd_size_type) sizeof(hdr), abfd) != sizeof(hdr))
-    return FALSE;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_write (hdr, sizeof (hdr), abfd) != sizeof (hdr))
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 msdos_set_section_contents (bfd *abfd,
 			    sec_ptr section,
 			    const void *location,
@@ -193,18 +195,18 @@ msdos_set_section_contents (bfd *abfd,
 {
 
   if (count == 0)
-    return TRUE;
+    return true;
 
   section->filepos = EXE_PAGE_SIZE + bfd_section_vma (section);
 
   if (bfd_section_flags (section) & SEC_LOAD)
     {
       if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
-	  || bfd_bwrite (location, count, abfd) != count)
-	return FALSE;
+	  || bfd_write (location, count, abfd) != count)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -250,6 +252,7 @@ msdos_set_section_contents (bfd *abfd,
 #define msdos_get_symbol_version_string \
   _bfd_nosymbols_get_symbol_version_string
 #define msdos_find_nearest_line _bfd_nosymbols_find_nearest_line
+#define msdos_find_nearest_line_with_alt _bfd_nosymbols_find_nearest_line_with_alt
 #define msdos_find_line _bfd_nosymbols_find_line
 #define msdos_find_inliner_info _bfd_nosymbols_find_inliner_info
 #define msdos_get_lineno _bfd_nosymbols_get_lineno
@@ -277,6 +280,7 @@ const bfd_target i386_msdos_vec =
     ' ',				/* ar_pad_char */
     16,				/* ar_max_namelen */
     0,				/* match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
     bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
     bfd_getl16, bfd_getl_signed_16, bfd_putl16,	/* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ihex.c ./bfd/ihex.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ihex.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/ihex.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel Hex objects.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
    Written by Ian Lance Taylor of Cygnus Support <ian@cygnus.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -160,54 +160,54 @@ struct ihex_data_struct
 static void
 ihex_init (void)
 {
-  static bfd_boolean inited;
+  static bool inited;
 
   if (! inited)
     {
-      inited = TRUE;
+      inited = true;
       hex_init ();
     }
 }
 
 /* Create an ihex object.  */
 
-static bfd_boolean
+static bool
 ihex_mkobject (bfd *abfd)
 {
   struct ihex_data_struct *tdata;
 
   tdata = (struct ihex_data_struct *) bfd_alloc (abfd, sizeof (* tdata));
   if (tdata == NULL)
-    return FALSE;
+    return false;
 
   abfd->tdata.ihex_data = tdata;
   tdata->head = NULL;
   tdata->tail = NULL;
-  return TRUE;
+  return true;
 }
 
 /* Read a byte from a BFD.  Set *ERRORPTR if an error occurred.
    Return EOF on error or end of file.  */
 
-static INLINE int
-ihex_get_byte (bfd *abfd, bfd_boolean *errorptr)
+static inline int
+ihex_get_byte (bfd *abfd, bool *errorptr)
 {
   bfd_byte c;
 
-  if (bfd_bread (&c, (bfd_size_type) 1, abfd) != 1)
+  if (bfd_read (&c, 1, abfd) != 1)
     {
       if (bfd_get_error () != bfd_error_file_truncated)
-	*errorptr = TRUE;
+	*errorptr = true;
       return EOF;
     }
 
-  return (int) (c & 0xff);
+  return c & 0xff;
 }
 
 /* Report a problem in an Intel Hex file.  */
 
 static void
-ihex_bad_byte (bfd *abfd, unsigned int lineno, int c, bfd_boolean error)
+ihex_bad_byte (bfd *abfd, unsigned int lineno, int c, bool error)
 {
   if (c == EOF)
     {
@@ -236,19 +236,19 @@ ihex_bad_byte (bfd *abfd, unsigned int l
 /* Read an Intel hex file and turn it into sections.  We create a new
    section for each contiguous set of bytes.  */
 
-static bfd_boolean
+static bool
 ihex_scan (bfd *abfd)
 {
   bfd_vma segbase;
   bfd_vma extbase;
   asection *sec;
   unsigned int lineno;
-  bfd_boolean error;
+  bool error;
   bfd_byte *buf = NULL;
   size_t bufsize;
   int c;
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
     goto error_return;
 
   abfd->start_address = 0;
@@ -257,7 +257,7 @@ ihex_scan (bfd *abfd)
   extbase = 0;
   sec = NULL;
   lineno = 1;
-  error = FALSE;
+  error = false;
   bufsize = 0;
 
   while ((c = ihex_get_byte (abfd, &error)) != EOF)
@@ -289,7 +289,7 @@ ihex_scan (bfd *abfd)
 	  pos = bfd_tell (abfd) - 1;
 
 	  /* Read the header bytes.  */
-	  if (bfd_bread (hdr, (bfd_size_type) 8, abfd) != 8)
+	  if (bfd_read (hdr, 8, abfd) != 8)
 	    goto error_return;
 
 	  for (i = 0; i < 8; i++)
@@ -309,13 +309,13 @@ ihex_scan (bfd *abfd)
 	  chars = len * 2 + 2;
 	  if (chars >= bufsize)
 	    {
-	      buf = (bfd_byte *) bfd_realloc (buf, (bfd_size_type) chars);
+	      buf = bfd_realloc (buf, chars);
 	      if (buf == NULL)
 		goto error_return;
 	      bufsize = chars;
 	    }
 
-	  if (bfd_bread (buf, (bfd_size_type) chars, abfd) != chars)
+	  if (bfd_read (buf, chars, abfd) != chars)
 	    goto error_return;
 
 	  for (i = 0; i < chars; i++)
@@ -357,7 +357,7 @@ ihex_scan (bfd *abfd)
 		{
 		  char secbuf[20];
 		  char *secname;
-		  bfd_size_type amt;
+		  size_t amt;
 		  flagword flags;
 
 		  sprintf (secbuf, ".sec%d", bfd_count_sections (abfd) + 1);
@@ -381,9 +381,8 @@ ihex_scan (bfd *abfd)
 	      /* An end record.  */
 	      if (abfd->start_address == 0)
 		abfd->start_address = addr;
-	      if (buf != NULL)
-		free (buf);
-	      return TRUE;
+	      free (buf);
+	      return true;
 
 	    case 2:
 	      /* An extended address record.  */
@@ -474,20 +473,17 @@ ihex_scan (bfd *abfd)
   if (error)
     goto error_return;
 
-  if (buf != NULL)
-    free (buf);
-
-  return TRUE;
+  free (buf);
+  return true;
 
  error_return:
-  if (buf != NULL)
-    free (buf);
-  return FALSE;
+  free (buf);
+  return false;
 }
 
 /* Try to recognize an Intel Hex file.  */
 
-static const bfd_target *
+static bfd_cleanup
 ihex_object_p (bfd *abfd)
 {
   void * tdata_save;
@@ -497,9 +493,9 @@ ihex_object_p (bfd *abfd)
 
   ihex_init ();
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
     return NULL;
-  if (bfd_bread (b, (bfd_size_type) 9, abfd) != 9)
+  if (bfd_read (b, 9, abfd) != 9)
     {
       if (bfd_get_error () == bfd_error_file_truncated)
 	bfd_set_error (bfd_error_wrong_format);
@@ -538,26 +534,26 @@ ihex_object_p (bfd *abfd)
       return NULL;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 /* Read the contents of a section in an Intel Hex file.  */
 
-static bfd_boolean
+static bool
 ihex_read_section (bfd *abfd, asection *section, bfd_byte *contents)
 {
   int c;
   bfd_byte *p;
   bfd_byte *buf = NULL;
   size_t bufsize;
-  bfd_boolean error;
+  bool error;
 
   if (bfd_seek (abfd, section->filepos, SEEK_SET) != 0)
     goto error_return;
 
   p = contents;
   bufsize = 0;
-  error = FALSE;
+  error = false;
   while ((c = ihex_get_byte (abfd, &error)) != EOF)
     {
       unsigned char hdr[8];
@@ -572,7 +568,7 @@ ihex_read_section (bfd *abfd, asection *
 	 know the exact format.  */
       BFD_ASSERT (c == ':');
 
-      if (bfd_bread (hdr, (bfd_size_type) 8, abfd) != 8)
+      if (bfd_read (hdr, 8, abfd) != 8)
 	goto error_return;
 
       len = HEX2 (hdr);
@@ -589,13 +585,13 @@ ihex_read_section (bfd *abfd, asection *
 
       if (len * 2 > bufsize)
 	{
-	  buf = (bfd_byte *) bfd_realloc (buf, (bfd_size_type) len * 2);
+	  buf = bfd_realloc (buf, len * 2);
 	  if (buf == NULL)
 	    goto error_return;
 	  bufsize = len * 2;
 	}
 
-      if (bfd_bread (buf, (bfd_size_type) len * 2, abfd) != len * 2)
+      if (bfd_read (buf, len * 2, abfd) != len * 2)
 	goto error_return;
 
       for (i = 0; i < len; i++)
@@ -603,13 +599,12 @@ ihex_read_section (bfd *abfd, asection *
       if ((bfd_size_type) (p - contents) >= section->size)
 	{
 	  /* We've read everything in the section.  */
-	  if (buf != NULL)
-	    free (buf);
-	  return TRUE;
+	  free (buf);
+	  return true;
 	}
 
       /* Skip the checksum.  */
-      if (bfd_bread (buf, (bfd_size_type) 2, abfd) != 2)
+      if (bfd_read (buf, 2, abfd) != 2)
 	goto error_return;
     }
 
@@ -621,20 +616,17 @@ ihex_read_section (bfd *abfd, asection *
       goto error_return;
     }
 
-  if (buf != NULL)
-    free (buf);
-
-  return TRUE;
+  free (buf);
+  return true;
 
  error_return:
-  if (buf != NULL)
-    free (buf);
-  return FALSE;
+  free (buf);
+  return false;
 }
 
 /* Get the contents of a section in an Intel Hex file.  */
 
-static bfd_boolean
+static bool
 ihex_get_section_contents (bfd *abfd,
 			   asection *section,
 			   void * location,
@@ -645,21 +637,21 @@ ihex_get_section_contents (bfd *abfd,
     {
       section->used_by_bfd = bfd_alloc (abfd, section->size);
       if (section->used_by_bfd == NULL)
-	return FALSE;
+	return false;
       if (! ihex_read_section (abfd, section,
 			       (bfd_byte *) section->used_by_bfd))
-	return FALSE;
+	return false;
     }
 
   memcpy (location, (bfd_byte *) section->used_by_bfd + offset,
 	  (size_t) count);
 
-  return TRUE;
+  return true;
 }
 
 /* Set the contents of a section in an Intel Hex file.  */
 
-static bfd_boolean
+static bool
 ihex_set_section_contents (bfd *abfd,
 			   asection *section,
 			   const void * location,
@@ -673,15 +665,15 @@ ihex_set_section_contents (bfd *abfd,
   if (count == 0
       || (section->flags & SEC_ALLOC) == 0
       || (section->flags & SEC_LOAD) == 0)
-    return TRUE;
+    return true;
 
   n = (struct ihex_data_list *) bfd_alloc (abfd, sizeof (* n));
   if (n == NULL)
-    return FALSE;
+    return false;
 
   data = (bfd_byte *) bfd_alloc (abfd, count);
   if (data == NULL)
-    return FALSE;
+    return false;
   memcpy (data, location, (size_t) count);
 
   n->data = data;
@@ -712,12 +704,12 @@ ihex_set_section_contents (bfd *abfd,
 	tdata->tail = n;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write a record out to an Intel Hex file.  */
 
-static bfd_boolean
+static bool
 ihex_write_record (bfd *abfd,
 		   size_t count,
 		   unsigned int addr,
@@ -753,15 +745,15 @@ ihex_write_record (bfd *abfd,
   p[3] = '\n';
 
   total = 9 + count * 2 + 4;
-  if (bfd_bwrite (buf, (bfd_size_type) total, abfd) != total)
-    return FALSE;
+  if (bfd_write (buf, total, abfd) != total)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Write out an Intel Hex file.  */
 
-static bfd_boolean
+static bool
 ihex_write_object_contents (bfd *abfd)
 {
   bfd_vma segbase;
@@ -794,7 +786,7 @@ ihex_write_object_contents (bfd *abfd)
 	       " out of range for Intel Hex file"),
 	     abfd, (uint64_t) where);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       where &= 0xffffffff;
 #endif
@@ -811,21 +803,20 @@ ihex_write_object_contents (bfd *abfd)
 	  if (count > CHUNK)
 	    now = CHUNK;
 
-	  if (where > segbase + extbase + 0xffff)
+	  if (where < extbase
+	      || where - extbase < segbase
+	      || where - extbase - segbase > 0xffff)
 	    {
 	      bfd_byte addr[2];
 
 	      /* We need a new base address.  */
-	      if (where <= 0xfffff)
+	      if (extbase == 0 && where <= 0xfffff)
 		{
-		  /* The addresses should be sorted.  */
-		  BFD_ASSERT (extbase == 0);
-
 		  segbase = where & 0xf0000;
 		  addr[0] = (bfd_byte)(segbase >> 12) & 0xff;
 		  addr[1] = (bfd_byte)(segbase >> 4) & 0xff;
 		  if (! ihex_write_record (abfd, 2, 0, 2, addr))
-		    return FALSE;
+		    return false;
 		}
 	      else
 		{
@@ -840,7 +831,7 @@ ihex_write_object_contents (bfd *abfd)
 		      addr[0] = 0;
 		      addr[1] = 0;
 		      if (! ihex_write_record (abfd, 2, 0, 2, addr))
-			return FALSE;
+			return false;
 		      segbase = 0;
 		    }
 
@@ -853,12 +844,12 @@ ihex_write_object_contents (bfd *abfd)
 			   " out of range for Intel Hex file"),
 			 abfd, (uint64_t) where);
 		      bfd_set_error (bfd_error_bad_value);
-		      return FALSE;
+		      return false;
 		    }
 		  addr[0] = (bfd_byte)(extbase >> 24) & 0xff;
 		  addr[1] = (bfd_byte)(extbase >> 16) & 0xff;
 		  if (! ihex_write_record (abfd, 2, 0, 4, addr))
-		    return FALSE;
+		    return false;
 		}
 	    }
 
@@ -869,7 +860,7 @@ ihex_write_object_contents (bfd *abfd)
 	    now = 0x10000 - rec_addr;
 
 	  if (! ihex_write_record (abfd, now, rec_addr, 0, p))
-	    return FALSE;
+	    return false;
 
 	  where += now;
 	  p += now;
@@ -891,7 +882,7 @@ ihex_write_object_contents (bfd *abfd)
 	  startbuf[2] = (bfd_byte)(start >> 8) & 0xff;
 	  startbuf[3] = (bfd_byte)start & 0xff;
 	  if (! ihex_write_record (abfd, 4, 0, 3, startbuf))
-	    return FALSE;
+	    return false;
 	}
       else
 	{
@@ -900,20 +891,20 @@ ihex_write_object_contents (bfd *abfd)
 	  startbuf[2] = (bfd_byte)(start >> 8) & 0xff;
 	  startbuf[3] = (bfd_byte)start & 0xff;
 	  if (! ihex_write_record (abfd, 4, 0, 5, startbuf))
-	    return FALSE;
+	    return false;
 	}
     }
 
   if (! ihex_write_record (abfd, 0, 0, 1, NULL))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Set the architecture for the output file.  The architecture is
    irrelevant, so we ignore errors about unknown architectures.  */
 
-static bfd_boolean
+static bool
 ihex_set_arch_mach (bfd *abfd,
 		    enum bfd_architecture arch,
 		    unsigned long mach)
@@ -921,9 +912,9 @@ ihex_set_arch_mach (bfd *abfd,
   if (! bfd_default_set_arch_mach (abfd, arch, mach))
     {
       if (arch != bfd_arch_unknown)
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Get the size of the headers, for the linker.  */
@@ -951,6 +942,7 @@ ihex_sizeof_headers (bfd *abfd ATTRIBUTE
 #define ihex_bfd_is_local_label_name		  _bfd_nosymbols_bfd_is_local_label_name
 #define ihex_get_lineno				  _bfd_nosymbols_get_lineno
 #define ihex_find_nearest_line			  _bfd_nosymbols_find_nearest_line
+#define ihex_find_nearest_line_with_alt		  _bfd_nosymbols_find_nearest_line_with_alt
 #define ihex_find_line				  _bfd_nosymbols_find_line
 #define ihex_find_inliner_info			  _bfd_nosymbols_find_inliner_info
 #define ihex_bfd_make_debug_symbol		  _bfd_nosymbols_bfd_make_debug_symbol
@@ -990,6 +982,7 @@ const bfd_target ihex_vec =
   ' ',				/* AR_pad_char.  */
   16,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/init.c ./bfd/init.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/init.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/init.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* bfd initialization stuff
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,29 +33,3 @@ SUBSECTION
 	These are the functions that handle initializing a BFD.
 */
 
-/*
-FUNCTION
-	bfd_init
-
-SYNOPSIS
-	unsigned int bfd_init (void);
-
-DESCRIPTION
-	This routine must be called before any other BFD function to
-	initialize magical internal data structures.
-	Returns a magic number, which may be used to check
-	that the bfd library is configured as expected by users.
-.
-.{* Value returned by bfd_init.  *}
-.
-.#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
-*/
-
-/* Actually, there is currently nothing for this function to do.
-   However, someday it may be needed, so keep it around.  */
-
-unsigned int
-bfd_init (void)
-{
-  return BFD_INIT_MAGIC;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/irix-core.c ./bfd/irix-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/irix-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/irix-core.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Irix core files.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Written by Stu Grossman, Cygnus Support.
    Converted to back-end form by Ian Lance Taylor, Cygnus Support
 
@@ -61,7 +61,7 @@ do_sections64 (bfd *abfd, struct coreout
 
   for (i = 0; i < coreout->c_nvmap; i++)
     {
-      val = bfd_bread (&vmap, (bfd_size_type) sizeof vmap, abfd);
+      val = bfd_read (&vmap, sizeof vmap, abfd);
       if (val != sizeof vmap)
 	break;
 
@@ -109,7 +109,7 @@ do_sections (bfd *abfd, struct coreout *
 
   for (i = 0; i < coreout->c_nvmap; i++)
     {
-      val = bfd_bread (&vmap, (bfd_size_type) sizeof vmap, abfd);
+      val = bfd_read (&vmap, sizeof vmap, abfd);
       if (val != sizeof vmap)
 	break;
 
@@ -166,15 +166,15 @@ make_bfd_asection (bfd *abfd,
   return asect;
 }
 
-static const bfd_target *
+static bfd_cleanup
 irix_core_core_file_p (bfd *abfd)
 {
   int val;
   struct coreout coreout;
   struct idesc *idg, *idf, *ids;
-  bfd_size_type amt;
+  size_t amt;
 
-  val = bfd_bread (&coreout, (bfd_size_type) sizeof coreout, abfd);
+  val = bfd_read (&coreout, sizeof coreout, abfd);
   if (val != sizeof coreout)
     {
       if (bfd_get_error () != bfd_error_system_call)
@@ -244,7 +244,7 @@ irix_core_core_file_p (bfd *abfd)
   /* OK, we believe you.  You're a core file (sure, sure).  */
   bfd_default_set_arch_mach (abfd, bfd_arch_mips, 0);
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  fail:
   bfd_release (abfd, core_hdr (abfd));
@@ -275,9 +275,9 @@ swap_abort(void)
 #define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
 #define	NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
 #define	NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
-#define	NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
-#define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
-#define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
+#define	NO_GET64 ((uint64_t (*) (const void *)) swap_abort)
+#define	NO_PUT64 ((void (*) (uint64_t, void *)) swap_abort)
+#define	NO_GETS64 ((int64_t (*) (const void *)) swap_abort)
 
 const bfd_target core_irix_vec =
   {
@@ -293,6 +293,7 @@ const bfd_target core_irix_vec =
     ' ',						   /* ar_pad_char */
     16,							   /* ar_max_namelen */
     0,							   /* match_priority */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
     NO_GET64, NO_GETS64, NO_PUT64,	/* 64 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 32 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 16 bit data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libaout.h ./bfd/libaout.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libaout.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libaout.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end data structures for a.out (and similar) files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -102,7 +102,7 @@ struct aout_link_hash_entry
 {
   struct bfd_link_hash_entry root;
   /* Whether this symbol has been written out.  */
-  bfd_boolean written;
+  bool written;
   /* Symbol index in output file.  */
   int indx;
 };
@@ -125,7 +125,7 @@ struct aout_link_hash_table
 #define aout_link_hash_traverse(table, func, info)			\
   (bfd_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct bfd_link_hash_entry *, void *)) (func),	\
     (info)))
 
 /* Get the a.out link hash table from the info structure.  This is
@@ -164,7 +164,7 @@ struct aout_backend_data
 
   /* Callback for setting the page and segment sizes, if they can't be
      trivially determined from the architecture.  */
-  bfd_boolean (*set_sizes) (bfd *);
+  bool (*set_sizes) (bfd *);
 
   /* zmagic files only. For go32, the length of the exec header contributes
      to the size of the text section in the file for alignment purposes but
@@ -173,39 +173,39 @@ struct aout_backend_data
 
   /* Callback from the add symbols phase of the linker code to handle
      a dynamic object.  */
-  bfd_boolean (*add_dynamic_symbols)
+  bool (*add_dynamic_symbols)
     (bfd *, struct bfd_link_info *, struct external_nlist **,
      bfd_size_type *, char **);
 
   /* Callback from the add symbols phase of the linker code to handle
      adding a single symbol to the global linker hash table.  */
-  bfd_boolean (*add_one_symbol)
+  bool (*add_one_symbol)
     (struct bfd_link_info *, bfd *, const char *, flagword,
-     asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
+     asection *, bfd_vma, const char *, bool, bool,
      struct bfd_link_hash_entry **);
 
   /* Called to handle linking a dynamic object.  */
-  bfd_boolean (*link_dynamic_object)
+  bool (*link_dynamic_object)
     (struct bfd_link_info *, bfd *);
 
   /* Called for each global symbol being written out by the linker.
      This should write out the dynamic symbol information.  */
-  bfd_boolean (*write_dynamic_symbol)
+  bool (*write_dynamic_symbol)
     (bfd *, struct bfd_link_info *, struct aout_link_hash_entry *);
 
   /* If this callback is not NULL, the linker calls it for each reloc.
      RELOC is a pointer to the unswapped reloc.  If *SKIP is set to
      TRUE, the reloc will be skipped.  *RELOCATION may be changed to
      change the effects of the relocation.  */
-  bfd_boolean (*check_dynamic_reloc)
+  bool (*check_dynamic_reloc)
     (struct bfd_link_info *info, bfd *input_bfd,
      asection *input_section, struct aout_link_hash_entry *h,
-     void * reloc, bfd_byte *contents, bfd_boolean *skip,
+     void * reloc, bfd_byte *contents, bool *skip,
      bfd_vma *relocation);
 
   /* Called at the end of a link to finish up any dynamic linking
      information.  */
-  bfd_boolean (*finish_dynamic_link) (bfd *, struct bfd_link_info *);
+  bool (*finish_dynamic_link) (bfd *, struct bfd_link_info *);
 };
 #define aout_backend_info(abfd) \
 	((const struct aout_backend_data *)((abfd)->xvec->backend_data))
@@ -309,7 +309,7 @@ enum machine_type
 # define N_SET_INFO(execp, magic, type, flags) \
 ((execp)->a_info = ((magic) & 0xffff) \
  | (((int)(type) & 0xff) << 16) \
- | (((flags) & 0xff) << 24))
+ | (((flags) & 0xffu) << 24))
 #endif
 
 #ifndef N_SET_DYNAMIC
@@ -332,7 +332,7 @@ enum machine_type
 #ifndef N_SET_FLAGS
 # define N_SET_FLAGS(execp, flags) \
 ((execp)->a_info = \
- ((execp)->a_info & 0x00ffffff) | (((flags) & 0xff) << 24))
+ ((execp)->a_info & 0x00ffffff) | (((flags) & 0xffu) << 24))
 #endif
 
 typedef struct aout_symbol
@@ -359,7 +359,8 @@ enum aout_magic {
   undecided_magic = 0,
   z_magic,
   o_magic,
-  n_magic
+  n_magic,
+  i_magic
 };
 
 struct aoutdata
@@ -469,41 +470,41 @@ struct aout_section_data_struct
 
 /* Prototype declarations for functions defined in aoutx.h.  */
 
-extern bfd_boolean NAME (aout, squirt_out_relocs)
+extern bool NAME (aout, squirt_out_relocs)
   (bfd *, asection *);
 
-extern bfd_boolean NAME (aout, make_sections)
+extern bool NAME (aout, make_sections)
   (bfd *);
 
-extern const bfd_target * NAME (aout, some_aout_object_p)
-  (bfd *, struct internal_exec *, const bfd_target *(*) (bfd *));
+extern bfd_cleanup NAME (aout, some_aout_object_p)
+  (bfd *, struct internal_exec *, bfd_cleanup (*) (bfd *));
 
-extern bfd_boolean NAME (aout, mkobject)
+extern bool NAME (aout, mkobject)
   (bfd *);
 
 extern enum machine_type NAME (aout, machine_type)
-  (enum bfd_architecture, unsigned long, bfd_boolean *);
+  (enum bfd_architecture, unsigned long, bool *);
 
-extern bfd_boolean NAME (aout, set_arch_mach)
+extern bool NAME (aout, set_arch_mach)
   (bfd *, enum bfd_architecture, unsigned long);
 
-extern bfd_boolean NAME (aout, new_section_hook)
+extern bool NAME (aout, new_section_hook)
   (bfd *, asection *);
 
-extern bfd_boolean NAME (aout, set_section_contents)
+extern bool NAME (aout, set_section_contents)
   (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);
 
 extern asymbol * NAME (aout, make_empty_symbol)
   (bfd *);
 
-extern bfd_boolean NAME (aout, translate_symbol_table)
+extern bool NAME (aout, translate_symbol_table)
   (bfd *, aout_symbol_type *, struct external_nlist *, bfd_size_type,
-	   char *, bfd_size_type, bfd_boolean);
+   char *, bfd_size_type, bool);
 
-extern bfd_boolean NAME (aout, slurp_symbol_table)
+extern bool NAME (aout, slurp_symbol_table)
   (bfd *);
 
-extern bfd_boolean NAME (aout, write_syms)
+extern bool NAME (aout, write_syms)
   (bfd *);
 
 extern void NAME (aout, reclaim_symbol_table)
@@ -529,7 +530,7 @@ extern reloc_howto_type * NAME (aout, re
 extern reloc_howto_type * NAME (aout, reloc_name_lookup)
   (bfd *, const char *);
 
-extern bfd_boolean NAME (aout, slurp_reloc_table)
+extern bool NAME (aout, slurp_reloc_table)
   (bfd *, sec_ptr, asymbol **);
 
 extern long NAME (aout, canonicalize_reloc)
@@ -550,20 +551,20 @@ extern void NAME (aout, print_symbol)
 extern void NAME (aout, get_symbol_info)
   (bfd *, asymbol *, symbol_info *);
 
-extern bfd_boolean NAME (aout, find_nearest_line)
+extern bool NAME (aout, find_nearest_line)
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *);
 
 extern long NAME (aout, read_minisymbols)
-  (bfd *, bfd_boolean, void * *, unsigned int *);
+  (bfd *, bool, void * *, unsigned int *);
 
 extern asymbol * NAME (aout, minisymbol_to_symbol)
-  (bfd *, bfd_boolean, const void *, asymbol *);
+  (bfd *, bool, const void *, asymbol *);
 
 extern int NAME (aout, sizeof_headers)
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean NAME (aout, adjust_sizes_and_vmas)
+extern bool NAME (aout, adjust_sizes_and_vmas)
   (bfd *);
 
 extern void NAME (aout, swap_exec_header_in)
@@ -575,7 +576,7 @@ extern void NAME (aout, swap_exec_header
 extern struct bfd_hash_entry * NAME (aout, link_hash_newfunc)
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
 
-extern bfd_boolean NAME (aout, link_hash_table_init)
+extern bool NAME (aout, link_hash_table_init)
   (struct aout_link_hash_table *, bfd *,
    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
 			       struct bfd_hash_table *,
@@ -585,14 +586,14 @@ extern bfd_boolean NAME (aout, link_hash
 extern struct bfd_link_hash_table * NAME (aout, link_hash_table_create)
   (bfd *);
 
-extern bfd_boolean NAME (aout, link_add_symbols)
+extern bool NAME (aout, link_add_symbols)
   (bfd *, struct bfd_link_info *);
 
-extern bfd_boolean NAME (aout, final_link)
+extern bool NAME (aout, final_link)
   (bfd *, struct bfd_link_info *,
    void (*) (bfd *, file_ptr *, file_ptr *, file_ptr *));
 
-extern bfd_boolean NAME (aout, bfd_free_cached_info)
+extern bool NAME (aout, bfd_free_cached_info)
   (bfd *);
 
 #define aout_32_find_inliner_info	_bfd_nosymbols_find_inliner_info
@@ -608,9 +609,6 @@ extern bfd_boolean NAME (aout, bfd_free_
 #define	aout_32_get_section_contents	_bfd_generic_get_section_contents
 
 #define	aout_64_get_section_contents	_bfd_generic_get_section_contents
-#ifndef NO_WRITE_HEADER_KLUDGE
-#define NO_WRITE_HEADER_KLUDGE 0
-#endif
 
 #ifndef aout_32_bfd_is_local_label_name
 #define aout_32_bfd_is_local_label_name bfd_generic_is_local_label_name
@@ -621,46 +619,46 @@ extern bfd_boolean NAME (aout, bfd_free_
 #endif
 
 #ifndef WRITE_HEADERS
-#define WRITE_HEADERS(abfd, execp)					      \
-      {									      \
-	if (adata(abfd).magic == undecided_magic)			      \
-	  NAME (aout, adjust_sizes_and_vmas) (abfd);			      \
-									      \
-	execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE;	      \
-	execp->a_entry = bfd_get_start_address (abfd);			      \
-									      \
-	execp->a_trsize = ((obj_textsec (abfd)->reloc_count) *		      \
-			   obj_reloc_entry_size (abfd));		      \
-	execp->a_drsize = ((obj_datasec (abfd)->reloc_count) *		      \
-			   obj_reloc_entry_size (abfd));		      \
-	NAME (aout, swap_exec_header_out) (abfd, execp, & exec_bytes);	      \
-									      \
-	if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0		      \
-	    || bfd_bwrite (& exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE,     \
-			  abfd) != EXEC_BYTES_SIZE)			      \
-	  return FALSE;							      \
-	/* Now write out reloc info, followed by syms and strings.  */	      \
-									      \
-	if (bfd_get_outsymbols (abfd) != NULL				      \
-	    && bfd_get_symcount (abfd) != 0)				      \
-	  {								      \
-	    if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (execp)), SEEK_SET) != 0)\
-	      return FALSE;						      \
-									      \
-	    if (! NAME (aout, write_syms) (abfd))			      \
-	      return FALSE;						      \
-	  }								      \
-									      \
-	if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (execp)), SEEK_SET) != 0)   \
-	  return FALSE;							      \
-	if (!NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd)))	      \
-	  return FALSE;							      \
-									      \
-	if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (execp)), SEEK_SET) != 0)   \
-	  return FALSE;							      \
-	if (!NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd)))	      \
-	  return FALSE;							      \
-      }
+#define WRITE_HEADERS(abfd, execp)					\
+  {									\
+    if (adata(abfd).magic == undecided_magic)				\
+      NAME (aout, adjust_sizes_and_vmas) (abfd);			\
+									\
+    execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE;	\
+    execp->a_entry = bfd_get_start_address (abfd);			\
+									\
+    execp->a_trsize = ((obj_textsec (abfd)->reloc_count)		\
+		       * obj_reloc_entry_size (abfd));			\
+    execp->a_drsize = ((obj_datasec (abfd)->reloc_count)		\
+		       * obj_reloc_entry_size (abfd));			\
+    NAME (aout, swap_exec_header_out) (abfd, execp, &exec_bytes);	\
+									\
+    if (bfd_seek (abfd, 0, SEEK_SET) != 0				\
+	|| bfd_write (&exec_bytes, EXEC_BYTES_SIZE,			\
+		      abfd) != EXEC_BYTES_SIZE)				\
+      return false;							\
+    /* Now write out reloc info, followed by syms and strings.  */	\
+									\
+    if (bfd_get_outsymbols (abfd) != NULL				\
+	&& bfd_get_symcount (abfd) != 0)				\
+      {									\
+	if (bfd_seek (abfd, N_SYMOFF (execp), SEEK_SET) != 0)		\
+	  return false;							\
+									\
+	if (! NAME (aout, write_syms) (abfd))				\
+	  return false;							\
+      }									\
+									\
+    if (bfd_seek (abfd, N_TRELOFF (execp), SEEK_SET) != 0)		\
+      return false;							\
+    if (!NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd)))	\
+      return false;							\
+									\
+    if (bfd_seek (abfd, N_DRELOFF (execp), SEEK_SET) != 0)		\
+      return false;							\
+    if (!NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd)))	\
+      return false;							\
+  }
 #endif
 
 /* Test if a read-only section can be merged with .text.  This is
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libbfd.c ./bfd/libbfd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libbfd.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libbfd.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Assorted BFD support routines, only used internally.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -22,6 +22,7 @@
 #include "sysdep.h"
 #include "bfd.h"
 #include "libbfd.h"
+#include "objalloc.h"
 
 #ifndef HAVE_GETPAGESIZE
 #define getpagesize() 2048
@@ -40,30 +41,30 @@ DESCRIPTION
 	completeness.
 */
 
-bfd_boolean
+bool
 _bfd_bool_bfd_false (bfd *abfd ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
-bfd_boolean
+bool
 _bfd_bool_bfd_asymbol_false (bfd *abfd ATTRIBUTE_UNUSED,
 			     asymbol *sym ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
 /* A routine which is used in target vectors for unsupported
    operations.  */
 
-bfd_boolean
+bool
 _bfd_bool_bfd_false_error (bfd *ignore ATTRIBUTE_UNUSED)
 {
   bfd_set_error (bfd_error_invalid_operation);
-  return FALSE;
+  return false;
 }
 
-bfd_boolean
+bool
 _bfd_bool_bfd_link_false_error (bfd *abfd,
 				struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
@@ -73,56 +74,56 @@ _bfd_bool_bfd_link_false_error (bfd *abf
 /* A routine which is used in target vectors for supported operations
    which do not actually do anything.  */
 
-bfd_boolean
+bool
 _bfd_bool_bfd_true (bfd *ignore ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_bool_bfd_link_true (bfd *abfd ATTRIBUTE_UNUSED,
 			 struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_bool_bfd_bfd_true (bfd *ibfd ATTRIBUTE_UNUSED,
 			bfd *obfd ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_bool_bfd_uint_true (bfd *abfd ATTRIBUTE_UNUSED,
 			 unsigned int flags ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_bool_bfd_asection_bfd_asection_true (bfd *ibfd ATTRIBUTE_UNUSED,
 					  asection *isec ATTRIBUTE_UNUSED,
 					  bfd *obfd ATTRIBUTE_UNUSED,
 					  asection *osec ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_bool_bfd_asymbol_bfd_asymbol_true (bfd *ibfd ATTRIBUTE_UNUSED,
 					asymbol *isym ATTRIBUTE_UNUSED,
 					bfd *obfd ATTRIBUTE_UNUSED,
 					asymbol *osym ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_bool_bfd_ptr_true (bfd *abfd ATTRIBUTE_UNUSED,
 			void *ptr ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /* A routine which is used in target vectors for unsupported
@@ -206,13 +207,13 @@ _bfd_norelocs_set_reloc (bfd *abfd ATTRI
   /* Do nothing.  */
 }
 
-bfd_boolean
+bool
 _bfd_nocore_core_file_matches_executable_p
   (bfd *ignore_core_bfd ATTRIBUTE_UNUSED,
    bfd *ignore_exec_bfd ATTRIBUTE_UNUSED)
 {
   bfd_set_error (bfd_error_invalid_operation);
-  return FALSE;
+  return false;
 }
 
 /* Routine to handle core_file_failing_command entry point for targets
@@ -245,7 +246,7 @@ _bfd_nocore_core_file_pid (bfd *ignore_a
   return 0;
 }
 
-const bfd_target *
+bfd_cleanup
 _bfd_dummy_target (bfd *ignore_abfd ATTRIBUTE_UNUSED)
 {
   bfd_set_error (bfd_error_wrong_format);
@@ -258,6 +259,20 @@ _bfd_dummy_target (bfd *ignore_abfd ATTR
 #define SSIZE_MAX ((size_t) -1 >> 1)
 #endif
 
+/*
+INTERNAL_FUNCTION
+	bfd_malloc
+
+SYNOPSIS
+	void *bfd_malloc (bfd_size_type {*size*});
+
+DESCRIPTION
+	Returns a pointer to an allocated block of memory that is at least
+	SIZE bytes long.  If SIZE is 0 then it will be treated as if it were
+	1.  If SIZE is too big then NULL will be returned.
+	
+	Returns NULL upon error and sets bfd_error.
+*/
 void *
 bfd_malloc (bfd_size_type size)
 {
@@ -272,31 +287,36 @@ bfd_malloc (bfd_size_type size)
       return NULL;
     }
 
-  ptr = malloc (sz);
-  if (ptr == NULL && sz != 0)
+  ptr = malloc (sz ? sz : 1);
+  if (ptr == NULL)
     bfd_set_error (bfd_error_no_memory);
 
   return ptr;
 }
 
-/* Allocate memory using malloc, nmemb * size with overflow checking.  */
-
-void *
-bfd_malloc2 (bfd_size_type nmemb, bfd_size_type size)
-{
-  if ((nmemb | size) >= HALF_BFD_SIZE_TYPE
-      && size != 0
-      && nmemb > ~(bfd_size_type) 0 / size)
-    {
-      bfd_set_error (bfd_error_no_memory);
-      return NULL;
-    }
+/*
+INTERNAL_FUNCTION
+	bfd_realloc
 
-  return bfd_malloc (size * nmemb);
-}
+SYNOPSIS
+	void *bfd_realloc (void *{*mem*}, bfd_size_type {*size*});
 
-/* Reallocate memory using realloc.  */
+DESCRIPTION
+	Returns a pointer to an allocated block of memory that is at least
+	SIZE bytes long.  If SIZE is 0 then it will be treated as if it were
+	1.  If SIZE is too big then NULL will be returned.
+	
+	If MEM is not NULL then it must point to an allocated block of memory.
+	If this block is large enough then MEM may be used as the return
+	value for this function, but this is not guaranteed.
+
+	If MEM is not returned then the first N bytes in the returned block
+	will be identical to the first N bytes in region pointed to by MEM,
+	where N is the lessor of SIZE and the length of the region of memory
+	currently addressed by MEM.
 
+	Returns NULL upon error and sets bfd_error.
+*/
 void *
 bfd_realloc (void *ptr, bfd_size_type size)
 {
@@ -314,74 +334,168 @@ bfd_realloc (void *ptr, bfd_size_type si
       return NULL;
     }
 
-  ret = realloc (ptr, sz);
+  /* The behaviour of realloc(0) is implementation defined,
+     but for this function we always allocate memory.  */
+  ret = realloc (ptr, sz ? sz : 1);
 
-  if (ret == NULL && sz != 0)
+  if (ret == NULL)
     bfd_set_error (bfd_error_no_memory);
 
   return ret;
 }
 
-/* Reallocate memory using realloc, nmemb * size with overflow checking.  */
+/*
+INTERNAL_FUNCTION
+	bfd_realloc_or_free
 
+SYNOPSIS
+	void *bfd_realloc_or_free (void *{*mem*}, bfd_size_type {*size*});
+
+DESCRIPTION
+	Returns a pointer to an allocated block of memory that is at least
+	SIZE bytes long.  If SIZE is 0 then no memory will be allocated,
+	MEM will be freed, and NULL will be returned.  This will not cause
+	bfd_error to be set.
+
+	If SIZE is too big then NULL will be returned and bfd_error will be
+	set. 
+	
+	If MEM is not NULL then it must point to an allocated block of memory.
+	If this block is large enough then MEM may be used as the return
+	value for this function, but this is not guaranteed.
+
+	If MEM is not returned then the first N bytes in the returned block
+	will be identical to the first N bytes in region pointed to by MEM,
+	where N is the lessor of SIZE and the length of the region of memory
+	currently addressed by MEM.
+*/
 void *
-bfd_realloc2 (void *ptr, bfd_size_type nmemb, bfd_size_type size)
+bfd_realloc_or_free (void *ptr, bfd_size_type size)
 {
-  if ((nmemb | size) >= HALF_BFD_SIZE_TYPE
-      && size != 0
-      && nmemb > ~(bfd_size_type) 0 / size)
+  void *ret;
+
+  /* The behaviour of realloc(0) is implementation defined, but
+     for this function we treat it is always freeing the memory.  */
+  if (size == 0)
     {
-      bfd_set_error (bfd_error_no_memory);
+      free (ptr);
       return NULL;
     }
+      
+  ret = bfd_realloc (ptr, size);
+  if (ret == NULL)
+    free (ptr);
 
-  return bfd_realloc (ptr, size * nmemb);
+  return ret;
 }
 
-/* Reallocate memory using realloc.
-   If this fails the pointer is freed before returning.  */
+/*
+INTERNAL_FUNCTION
+	bfd_zmalloc
+
+SYNOPSIS
+	void *bfd_zmalloc (bfd_size_type {*size*});
 
+DESCRIPTION
+	Returns a pointer to an allocated block of memory that is at least
+	SIZE bytes long.  If SIZE is 0 then it will be treated as if it were
+	1.  If SIZE is too big then NULL will be returned.
+	
+	Returns NULL upon error and sets bfd_error.
+
+	If NULL is not returned then the allocated block of memory will
+	have been cleared.
+*/
 void *
-bfd_realloc_or_free (void *ptr, bfd_size_type size)
+bfd_zmalloc (bfd_size_type size)
 {
-  void *ret = bfd_realloc (ptr, size);
+  void *ptr = bfd_malloc (size);
 
-  if (ret == NULL && ptr != NULL)
-    free (ptr);
+  if (ptr != NULL)
+    memset (ptr, 0, size ? (size_t) size : 1);
 
-  return ret;
+  return ptr;
 }
 
-/* Allocate memory using malloc and clear it.  */
+/*
+FUNCTION
+	bfd_alloc
+
+SYNOPSIS
+	void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
+
+DESCRIPTION
+	Allocate a block of @var{wanted} bytes of memory attached to
+	<<abfd>> and return a pointer to it.
+*/
 
 void *
-bfd_zmalloc (bfd_size_type size)
+bfd_alloc (bfd *abfd, bfd_size_type size)
 {
-  void *ptr = bfd_malloc (size);
+  void *ret;
+  unsigned long ul_size = (unsigned long) size;
 
-  if (ptr != NULL && size > 0)
-    memset (ptr, 0, (size_t) size);
+  if (size != ul_size
+      /* Note - although objalloc_alloc takes an unsigned long as its
+	 argument, internally the size is treated as a signed long.  This can
+	 lead to problems where, for example, a request to allocate -1 bytes
+	 can result in just 1 byte being allocated, rather than
+	 ((unsigned long) -1) bytes.  Also memory checkers will often
+	 complain about attempts to allocate a negative amount of memory.
+	 So to stop these problems we fail if the size is negative.  */
+      || ((signed long) ul_size) < 0)
+    {
+      bfd_set_error (bfd_error_no_memory);
+      return NULL;
+    }
 
-  return ptr;
+  ret = objalloc_alloc ((struct objalloc *) abfd->memory, ul_size);
+  if (ret == NULL)
+    bfd_set_error (bfd_error_no_memory);
+  else
+    abfd->alloc_size += size;
+  return ret;
 }
 
-/* Allocate memory using malloc (nmemb * size) with overflow checking
-   and clear it.  */
+/*
+FUNCTION
+	bfd_zalloc
+
+SYNOPSIS
+	void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
+
+DESCRIPTION
+	Allocate a block of @var{wanted} bytes of zeroed memory
+	attached to <<abfd>> and return a pointer to it.
+*/
 
 void *
-bfd_zmalloc2 (bfd_size_type nmemb, bfd_size_type size)
+bfd_zalloc (bfd *abfd, bfd_size_type size)
 {
-  void *ptr = bfd_malloc2 (nmemb, size);
+  void *res;
 
-  if (ptr != NULL)
-    {
-      size_t sz = nmemb * size;
+  res = bfd_alloc (abfd, size);
+  if (res)
+    memset (res, 0, (size_t) size);
+  return res;
+}
 
-      if (sz > 0)
-	memset (ptr, 0, sz);
-    }
+/*
+FUNCTION
+	bfd_release
 
-  return ptr;
+SYNOPSIS
+	void bfd_release (bfd *, void *);
+
+DESCRIPTION
+	Free a block allocated for a BFD.
+	Note: Also frees all more recently allocated blocks!
+*/
+
+void
+bfd_release (bfd *abfd, void *block)
+{
+  objalloc_free_block ((struct objalloc *) abfd->memory, block);
 }
 
 /*
@@ -389,7 +503,7 @@ INTERNAL_FUNCTION
 	bfd_write_bigendian_4byte_int
 
 SYNOPSIS
-	bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
+	bool bfd_write_bigendian_4byte_int (bfd *, unsigned int);
 
 DESCRIPTION
 	Write a 4 byte integer @var{i} to the output BFD @var{abfd}, in big
@@ -397,12 +511,12 @@ DESCRIPTION
 	archives.
 
 */
-bfd_boolean
+bool
 bfd_write_bigendian_4byte_int (bfd *abfd, unsigned int i)
 {
   bfd_byte buffer[4];
-  bfd_putb32 ((bfd_vma) i, buffer);
-  return bfd_bwrite (buffer, (bfd_size_type) 4, abfd) == 4;
+  bfd_putb32 (i, buffer);
+  return bfd_write (buffer, 4, abfd) == 4;
 }
 
 
@@ -445,13 +559,13 @@ DESCRIPTION
 .{* Byte swapping macros for user section data.  *}
 .
 .#define bfd_put_8(abfd, val, ptr) \
-.  ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
+.  ((void) (*((bfd_byte *) (ptr)) = (val) & 0xff))
 .#define bfd_put_signed_8 \
 .  bfd_put_8
 .#define bfd_get_8(abfd, ptr) \
-.  (*(const unsigned char *) (ptr) & 0xff)
+.  ((bfd_vma) *(const bfd_byte *) (ptr) & 0xff)
 .#define bfd_get_signed_8(abfd, ptr) \
-.  (((*(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
+.  ((((bfd_signed_vma) *(const bfd_byte *) (ptr) & 0xff) ^ 0x80) - 0x80)
 .
 .#define bfd_put_16(abfd, val, ptr) \
 .  BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
@@ -495,7 +609,7 @@ DESCRIPTION
 .  BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
 .
 .#define bfd_get(bits, abfd, ptr)			\
-.  ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)	\
+.  ((bits) == 8 ? bfd_get_8 (abfd, ptr)			\
 .   : (bits) == 16 ? bfd_get_16 (abfd, ptr)		\
 .   : (bits) == 32 ? bfd_get_32 (abfd, ptr)		\
 .   : (bits) == 64 ? bfd_get_64 (abfd, ptr)		\
@@ -585,7 +699,43 @@ DESCRIPTION
 #define COERCE16(x) (((bfd_vma) (x) ^ 0x8000) - 0x8000)
 #define COERCE32(x) (((bfd_vma) (x) ^ 0x80000000) - 0x80000000)
 #define COERCE64(x) \
-  (((bfd_uint64_t) (x) ^ ((bfd_uint64_t) 1 << 63)) - ((bfd_uint64_t) 1 << 63))
+  (((uint64_t) (x) ^ ((uint64_t) 1 << 63)) - ((uint64_t) 1 << 63))
+
+/*
+FUNCTION
+	Byte swapping routines.
+
+SYNOPSIS
+	uint64_t bfd_getb64 (const void *);
+	uint64_t bfd_getl64 (const void *);
+	int64_t bfd_getb_signed_64 (const void *);
+	int64_t bfd_getl_signed_64 (const void *);
+	bfd_vma bfd_getb32 (const void *);
+	bfd_vma bfd_getl32 (const void *);
+	bfd_signed_vma bfd_getb_signed_32 (const void *);
+	bfd_signed_vma bfd_getl_signed_32 (const void *);
+	bfd_vma bfd_getb16 (const void *);
+	bfd_vma bfd_getl16 (const void *);
+	bfd_signed_vma bfd_getb_signed_16 (const void *);
+	bfd_signed_vma bfd_getl_signed_16 (const void *);
+	void bfd_putb64 (uint64_t, void *);
+	void bfd_putl64 (uint64_t, void *);
+	void bfd_putb32 (bfd_vma, void *);
+	void bfd_putl32 (bfd_vma, void *);
+	void bfd_putb24 (bfd_vma, void *);
+	void bfd_putl24 (bfd_vma, void *);
+	void bfd_putb16 (bfd_vma, void *);
+	void bfd_putl16 (bfd_vma, void *);
+	uint64_t bfd_get_bits (const void *, int, bool);
+	void bfd_put_bits (uint64_t, void *, int, bool);
+
+DESCRIPTION
+	Read and write integers in a particular endian order.  getb
+	and putb functions handle big-endian, getl and putl handle
+	little-endian.  bfd_get_bits and bfd_put_bits specify
+	big-endian by passing TRUE in the last parameter,
+	little-endian by passing FALSE.
+*/
 
 bfd_vma
 bfd_getb16 (const void *p)
@@ -653,11 +803,11 @@ bfd_vma
 bfd_getb24 (const void *p)
 {
   const bfd_byte *addr = (const bfd_byte *) p;
-  unsigned long v;
+  uint32_t v;
 
-  v =  (unsigned long) addr[0] << 16;
-  v |= (unsigned long) addr[1] << 8;
-  v |= (unsigned long) addr[2];
+  v =  (uint32_t) addr[0] << 16;
+  v |= (uint32_t) addr[1] << 8;
+  v |= (uint32_t) addr[2];
   return v;
 }
 
@@ -665,11 +815,11 @@ bfd_vma
 bfd_getl24 (const void *p)
 {
   const bfd_byte *addr = (const bfd_byte *) p;
-  unsigned long v;
+  uint32_t v;
 
-  v = (unsigned long) addr[0];
-  v |= (unsigned long) addr[1] << 8;
-  v |= (unsigned long) addr[2] << 16;
+  v = (uint32_t) addr[0];
+  v |= (uint32_t) addr[1] << 8;
+  v |= (uint32_t) addr[2] << 16;
   return v;
 }
 
@@ -677,12 +827,12 @@ bfd_vma
 bfd_getb32 (const void *p)
 {
   const bfd_byte *addr = (const bfd_byte *) p;
-  unsigned long v;
+  uint32_t v;
 
-  v = (unsigned long) addr[0] << 24;
-  v |= (unsigned long) addr[1] << 16;
-  v |= (unsigned long) addr[2] << 8;
-  v |= (unsigned long) addr[3];
+  v = (uint32_t) addr[0] << 24;
+  v |= (uint32_t) addr[1] << 16;
+  v |= (uint32_t) addr[2] << 8;
+  v |= (uint32_t) addr[3];
   return v;
 }
 
@@ -690,12 +840,12 @@ bfd_vma
 bfd_getl32 (const void *p)
 {
   const bfd_byte *addr = (const bfd_byte *) p;
-  unsigned long v;
+  uint32_t v;
 
-  v = (unsigned long) addr[0];
-  v |= (unsigned long) addr[1] << 8;
-  v |= (unsigned long) addr[2] << 16;
-  v |= (unsigned long) addr[3] << 24;
+  v = (uint32_t) addr[0];
+  v |= (uint32_t) addr[1] << 8;
+  v |= (uint32_t) addr[2] << 16;
+  v |= (uint32_t) addr[3] << 24;
   return v;
 }
 
@@ -703,12 +853,12 @@ bfd_signed_vma
 bfd_getb_signed_32 (const void *p)
 {
   const bfd_byte *addr = (const bfd_byte *) p;
-  unsigned long v;
+  uint32_t v;
 
-  v = (unsigned long) addr[0] << 24;
-  v |= (unsigned long) addr[1] << 16;
-  v |= (unsigned long) addr[2] << 8;
-  v |= (unsigned long) addr[3];
+  v = (uint32_t) addr[0] << 24;
+  v |= (uint32_t) addr[1] << 16;
+  v |= (uint32_t) addr[2] << 8;
+  v |= (uint32_t) addr[3];
   return COERCE32 (v);
 }
 
@@ -716,21 +866,20 @@ bfd_signed_vma
 bfd_getl_signed_32 (const void *p)
 {
   const bfd_byte *addr = (const bfd_byte *) p;
-  unsigned long v;
+  uint32_t v;
 
-  v = (unsigned long) addr[0];
-  v |= (unsigned long) addr[1] << 8;
-  v |= (unsigned long) addr[2] << 16;
-  v |= (unsigned long) addr[3] << 24;
+  v = (uint32_t) addr[0];
+  v |= (uint32_t) addr[1] << 8;
+  v |= (uint32_t) addr[2] << 16;
+  v |= (uint32_t) addr[3] << 24;
   return COERCE32 (v);
 }
 
-bfd_uint64_t
-bfd_getb64 (const void *p ATTRIBUTE_UNUSED)
+uint64_t
+bfd_getb64 (const void *p)
 {
-#ifdef BFD_HOST_64_BIT
   const bfd_byte *addr = (const bfd_byte *) p;
-  bfd_uint64_t v;
+  uint64_t v;
 
   v  = addr[0]; v <<= 8;
   v |= addr[1]; v <<= 8;
@@ -742,18 +891,13 @@ bfd_getb64 (const void *p ATTRIBUTE_UNUS
   v |= addr[7];
 
   return v;
-#else
-  BFD_FAIL();
-  return 0;
-#endif
 }
 
-bfd_uint64_t
-bfd_getl64 (const void *p ATTRIBUTE_UNUSED)
+uint64_t
+bfd_getl64 (const void *p)
 {
-#ifdef BFD_HOST_64_BIT
   const bfd_byte *addr = (const bfd_byte *) p;
-  bfd_uint64_t v;
+  uint64_t v;
 
   v  = addr[7]; v <<= 8;
   v |= addr[6]; v <<= 8;
@@ -765,19 +909,13 @@ bfd_getl64 (const void *p ATTRIBUTE_UNUS
   v |= addr[0];
 
   return v;
-#else
-  BFD_FAIL();
-  return 0;
-#endif
-
 }
 
-bfd_int64_t
-bfd_getb_signed_64 (const void *p ATTRIBUTE_UNUSED)
+int64_t
+bfd_getb_signed_64 (const void *p)
 {
-#ifdef BFD_HOST_64_BIT
   const bfd_byte *addr = (const bfd_byte *) p;
-  bfd_uint64_t v;
+  uint64_t v;
 
   v  = addr[0]; v <<= 8;
   v |= addr[1]; v <<= 8;
@@ -789,18 +927,13 @@ bfd_getb_signed_64 (const void *p ATTRIB
   v |= addr[7];
 
   return COERCE64 (v);
-#else
-  BFD_FAIL();
-  return 0;
-#endif
 }
 
-bfd_int64_t
-bfd_getl_signed_64 (const void *p ATTRIBUTE_UNUSED)
+int64_t
+bfd_getl_signed_64 (const void *p)
 {
-#ifdef BFD_HOST_64_BIT
   const bfd_byte *addr = (const bfd_byte *) p;
-  bfd_uint64_t v;
+  uint64_t v;
 
   v  = addr[7]; v <<= 8;
   v |= addr[6]; v <<= 8;
@@ -812,10 +945,6 @@ bfd_getl_signed_64 (const void *p ATTRIB
   v |= addr[0];
 
   return COERCE64 (v);
-#else
-  BFD_FAIL();
-  return 0;
-#endif
 }
 
 void
@@ -839,9 +968,8 @@ bfd_putl32 (bfd_vma data, void *p)
 }
 
 void
-bfd_putb64 (bfd_uint64_t data ATTRIBUTE_UNUSED, void *p ATTRIBUTE_UNUSED)
+bfd_putb64 (uint64_t data, void *p)
 {
-#ifdef BFD_HOST_64_BIT
   bfd_byte *addr = (bfd_byte *) p;
   addr[0] = (data >> (7*8)) & 0xff;
   addr[1] = (data >> (6*8)) & 0xff;
@@ -851,15 +979,11 @@ bfd_putb64 (bfd_uint64_t data ATTRIBUTE_
   addr[5] = (data >> (2*8)) & 0xff;
   addr[6] = (data >> (1*8)) & 0xff;
   addr[7] = (data >> (0*8)) & 0xff;
-#else
-  BFD_FAIL();
-#endif
 }
 
 void
-bfd_putl64 (bfd_uint64_t data ATTRIBUTE_UNUSED, void *p ATTRIBUTE_UNUSED)
+bfd_putl64 (uint64_t data, void *p)
 {
-#ifdef BFD_HOST_64_BIT
   bfd_byte *addr = (bfd_byte *) p;
   addr[7] = (data >> (7*8)) & 0xff;
   addr[6] = (data >> (6*8)) & 0xff;
@@ -869,13 +993,10 @@ bfd_putl64 (bfd_uint64_t data ATTRIBUTE_
   addr[2] = (data >> (2*8)) & 0xff;
   addr[1] = (data >> (1*8)) & 0xff;
   addr[0] = (data >> (0*8)) & 0xff;
-#else
-  BFD_FAIL();
-#endif
 }
 
 void
-bfd_put_bits (bfd_uint64_t data, void *p, int bits, bfd_boolean big_p)
+bfd_put_bits (uint64_t data, void *p, int bits, bool big_p)
 {
   bfd_byte *addr = (bfd_byte *) p;
   int i;
@@ -894,11 +1015,11 @@ bfd_put_bits (bfd_uint64_t data, void *p
     }
 }
 
-bfd_uint64_t
-bfd_get_bits (const void *p, int bits, bfd_boolean big_p)
+uint64_t
+bfd_get_bits (const void *p, int bits, bool big_p)
 {
   const bfd_byte *addr = (const bfd_byte *) p;
-  bfd_uint64_t data;
+  uint64_t data;
   int i;
   int bytes;
 
@@ -919,7 +1040,7 @@ bfd_get_bits (const void *p, int bits, b
 
 /* Default implementation */
 
-bfd_boolean
+bool
 _bfd_generic_get_section_contents (bfd *abfd,
 				   sec_ptr section,
 				   void *location,
@@ -928,7 +1049,7 @@ _bfd_generic_get_section_contents (bfd *
 {
   bfd_size_type sz;
   if (count == 0)
-    return TRUE;
+    return true;
 
   if (section->compress_status != COMPRESS_SECTION_NONE)
     {
@@ -937,18 +1058,10 @@ _bfd_generic_get_section_contents (bfd *
 	(_("%pB: unable to get decompressed section %pA"),
 	 abfd, section);
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
-  /* We do allow reading of a section after bfd_final_link has
-     written the contents out to disk.  In that situation, rawsize is
-     just a stale version of size, so ignore it.  Otherwise we must be
-     reading an input section, where rawsize, if different to size,
-     is the on-disk size.  */
-  if (abfd->direction != write_direction && section->rawsize != 0)
-    sz = section->rawsize;
-  else
-    sz = section->size;
+  sz = bfd_get_section_limit_octets (abfd, section);
   if (offset + count < count
       || offset + count > sz
       || (abfd->my_archive != NULL
@@ -957,17 +1070,17 @@ _bfd_generic_get_section_contents (bfd *
 	      > arelt_size (abfd))))
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
-      || bfd_bread (location, count, abfd) != count)
-    return FALSE;
+      || bfd_read (location, count, abfd) != count)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_generic_get_section_contents_in_window
   (bfd *abfd ATTRIBUTE_UNUSED,
    sec_ptr section ATTRIBUTE_UNUSED,
@@ -979,7 +1092,7 @@ _bfd_generic_get_section_contents_in_win
   bfd_size_type sz;
 
   if (count == 0)
-    return TRUE;
+    return true;
   if (abfd->xvec->_bfd_get_section_contents
       != _bfd_generic_get_section_contents)
     {
@@ -991,13 +1104,13 @@ _bfd_generic_get_section_contents_in_win
       bfd_free_window (w);
       w->i = bfd_zmalloc (sizeof (bfd_window_internal));
       if (w->i == NULL)
-	return FALSE;
+	return false;
       w->i->data = bfd_malloc (count);
       if (w->i->data == NULL)
 	{
 	  free (w->i);
 	  w->i = NULL;
-	  return FALSE;
+	  return false;
 	}
       w->i->mapped = 0;
       w->i->refcount = 1;
@@ -1016,9 +1129,9 @@ _bfd_generic_get_section_contents_in_win
 	  && ((ufile_ptr) section->filepos + offset + count
 	      > arelt_size (abfd)))
       || ! bfd_get_file_window (abfd, section->filepos + offset, count, w,
-				TRUE))
-    return FALSE;
-  return TRUE;
+				true))
+    return false;
+  return true;
 #else
   abort ();
 #endif
@@ -1028,7 +1141,7 @@ _bfd_generic_get_section_contents_in_win
    NEW sections is disallowed.  It is useful in patching existing sections
    in read-write files, though.  See other set_section_contents functions
    to see why it doesn't work for new sections.  */
-bfd_boolean
+bool
 _bfd_generic_set_section_contents (bfd *abfd,
 				   sec_ptr section,
 				   const void *location,
@@ -1036,13 +1149,13 @@ _bfd_generic_set_section_contents (bfd *
 				   bfd_size_type count)
 {
   if (count == 0)
-    return TRUE;
+    return true;
 
   if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
-      || bfd_bwrite (location, count, abfd) != count)
-    return FALSE;
+      || bfd_write (location, count, abfd) != count)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -1071,7 +1184,7 @@ bfd_log2 (bfd_vma x)
   return result;
 }
 
-bfd_boolean
+bool
 bfd_generic_is_local_label_name (bfd *abfd, const char *name)
 {
   char locals_prefix = (bfd_get_symbol_leading_char (abfd) == '_') ? 'L' : '.';
@@ -1079,34 +1192,6 @@ bfd_generic_is_local_label_name (bfd *ab
   return name[0] == locals_prefix;
 }
 
-/* Give a warning at runtime if someone compiles code which calls
-   old routines.  */
-
-void
-_bfd_warn_deprecated (const char *what,
-		      const char *file,
-		      int line,
-		      const char *func)
-{
-  /* Poor man's tracking of functions we've already warned about.  */
-  static size_t mask = 0;
-
-  if (~(size_t) func & ~mask)
-    {
-      fflush (stdout);
-      /* Note: separate sentences in order to allow
-	 for translation into other languages.  */
-      if (func)
-	/* xgettext:c-format */
-	fprintf (stderr, _("Deprecated %s called at %s line %d in %s\n"),
-		 what, file, line, func);
-      else
-	fprintf (stderr, _("Deprecated %s called\n"), what);
-      fflush (stderr);
-      mask |= ~(size_t) func;
-    }
-}
-
 /* Helper function for reading uleb128 encoded data.  */
 
 bfd_vma
@@ -1117,7 +1202,7 @@ _bfd_read_unsigned_leb128 (bfd *abfd ATT
   bfd_vma result;
   unsigned int num_read;
   unsigned int shift;
-  unsigned char byte;
+  bfd_byte byte;
 
   result = 0;
   shift = 0;
@@ -1127,46 +1212,47 @@ _bfd_read_unsigned_leb128 (bfd *abfd ATT
       byte = bfd_get_8 (abfd, buf);
       buf++;
       num_read++;
-      result |= (((bfd_vma) byte & 0x7f) << shift);
-      shift += 7;
+      if (shift < 8 * sizeof (result))
+	{
+	  result |= (((bfd_vma) byte & 0x7f) << shift);
+	  shift += 7;
+	}
     }
   while (byte & 0x80);
   *bytes_read_ptr = num_read;
   return result;
 }
 
-/* Read in a LEB128 encoded value from ABFD starting at DATA.
+/* Read in a LEB128 encoded value from ABFD starting at *PTR.
    If SIGN is true, return a signed LEB128 value.
-   If LENGTH_RETURN is not NULL, return in it the number of bytes read.
+   *PTR is incremented by the number of bytes read.
    No bytes will be read at address END or beyond.  */
 
 bfd_vma
 _bfd_safe_read_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
-		       bfd_byte *data,
-		       unsigned int *length_return,
-		       bfd_boolean sign,
+		       bfd_byte **ptr,
+		       bool sign,
 		       const bfd_byte * const end)
 {
   bfd_vma result = 0;
-  unsigned int num_read = 0;
   unsigned int shift = 0;
-  unsigned char byte = 0;
+  bfd_byte byte = 0;
+  bfd_byte *data = *ptr;
 
   while (data < end)
     {
       byte = bfd_get_8 (abfd, data);
       data++;
-      num_read++;
-
-      result |= ((bfd_vma) (byte & 0x7f)) << shift;
-
-      shift += 7;
+      if (shift < 8 * sizeof (result))
+	{
+	  result |= ((bfd_vma) (byte & 0x7f)) << shift;
+	  shift += 7;
+	}
       if ((byte & 0x80) == 0)
 	break;
     }
 
-  if (length_return != NULL)
-    *length_return = num_read;
+  *ptr = data;
 
   if (sign && (shift < 8 * sizeof (result)) && (byte & 0x40))
     result |= -((bfd_vma) 1 << shift);
@@ -1184,7 +1270,7 @@ _bfd_read_signed_leb128 (bfd *abfd ATTRI
   bfd_vma result;
   unsigned int shift;
   unsigned int num_read;
-  unsigned char byte;
+  bfd_byte byte;
 
   result = 0;
   shift = 0;
@@ -1194,8 +1280,11 @@ _bfd_read_signed_leb128 (bfd *abfd ATTRI
       byte = bfd_get_8 (abfd, buf);
       buf ++;
       num_read ++;
-      result |= (((bfd_vma) byte & 0x7f) << shift);
-      shift += 7;
+      if (shift < 8 * sizeof (result))
+	{
+	  result |= (((bfd_vma) byte & 0x7f) << shift);
+	  shift += 7;
+	}
     }
   while (byte & 0x80);
   if (shift < 8 * sizeof (result) && (byte & 0x40))
@@ -1204,12 +1293,36 @@ _bfd_read_signed_leb128 (bfd *abfd ATTRI
   return result;
 }
 
-bfd_boolean
+/* Write VAL in uleb128 format to P.
+   END indicates the last byte of allocated space for the uleb128 value to fit
+   in.
+   Return a pointer to the byte following the last byte that was written, or
+   NULL if the uleb128 value does not fit in the allocated space between P and
+   END.  */
+bfd_byte *
+_bfd_write_unsigned_leb128 (bfd_byte *p, bfd_byte *end, bfd_vma val)
+{
+  bfd_byte c;
+  do
+    {
+      if (p > end)
+	return NULL;
+      c = val & 0x7f;
+      val >>= 7;
+      if (val)
+	c |= 0x80;
+      *(p++) = c;
+    }
+  while (val);
+  return p;
+}
+
+bool
 _bfd_generic_init_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED,
 					asection *isec ATTRIBUTE_UNUSED,
 					bfd *obfd ATTRIBUTE_UNUSED,
 					asection *osec ATTRIBUTE_UNUSED,
 					struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libbfd.h ./bfd/libbfd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libbfd.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libbfd.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,12 +1,13 @@
 /* DO NOT EDIT!  -*- buffer-read-only: t -*-  This file is automatically
-   generated from "libbfd-in.h", "libbfd.c", "bfdio.c", "bfdwin.c",
-   "cache.c", "reloc.c", "archures.c" and "linker.c".
+   generated from "libbfd-in.h", "libbfd.c", "bfd.c", "bfdio.c",
+   "archive.c", "archures.c", "bfdwin.c", "cache.c", "hash.c", "linker.c",
+   "opncls.c", "reloc.c", "section.c", "stabs.c" and "targets.c".
    Run "make headers" in your build bfd/ to regenerate.  */
 
 /* libbfd.h -- Declarations used by bfd library *implementation*.
    (This include file is not for users of the library.)
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Written by Cygnus Support.
 
@@ -44,10 +45,6 @@
 extern "C" {
 #endif
 
-/* If you want to read and write large blocks, you might want to do it
-   in quanta of this amount */
-#define DEFAULT_BUFFERSIZE 8192
-
 /* Set a tdata field.  Can't use the other macros for this, since they
    do casts, and casting to the left of assignment isn't portable.  */
 #define set_tdata(bfd, v) ((bfd)->tdata.any = (v))
@@ -77,10 +74,9 @@ extern unsigned int _bfd_section_id ATTR
 
 struct artdata
 {
-  file_ptr first_file_filepos;
+  ufile_ptr first_file_filepos;
   /* Speed up searching the armap */
   htab_t cache;
-  bfd *archive_head;		/* Only interesting in output routines.  */
   carsym *symdefs;		/* The symdef entries.  */
   symindex symdef_count;	/* How many there are.  */
   char *extended_names;		/* Clever intel extension.  */
@@ -115,18 +111,6 @@ struct areltdata
 
 extern void *bfd_malloc
   (bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_realloc
-  (void *, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_realloc_or_free
-  (void *, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_zmalloc
-  (bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_malloc2
-  (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_realloc2
-  (void *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_zmalloc2
-  (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 static inline char *
 bfd_strdup (const char *str)
@@ -137,34 +121,26 @@ bfd_strdup (const char *str)
     memcpy (buf, str, len);
   return buf;
 }
-/* These routines allocate and free things on the BFD's objalloc.  */
-
-extern void *bfd_alloc2
-  (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_zalloc2
-  (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void bfd_release
-  (bfd *, void *) ATTRIBUTE_HIDDEN;
 
 extern bfd * _bfd_create_empty_archive_element_shell
   (bfd *) ATTRIBUTE_HIDDEN;
 extern bfd * _bfd_look_for_bfd_in_cache
   (bfd *, file_ptr) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_add_bfd_to_archive_cache
+extern bool _bfd_add_bfd_to_archive_cache
   (bfd *, file_ptr, bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_generic_mkarchive
+extern bool _bfd_generic_mkarchive
   (bfd *) ATTRIBUTE_HIDDEN;
 extern char *_bfd_append_relative_path
   (bfd *, char *) ATTRIBUTE_HIDDEN;
-extern const bfd_target *bfd_generic_archive_p
+extern bfd_cleanup bfd_generic_archive_p
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean bfd_slurp_armap
+extern bool bfd_slurp_armap
   (bfd *) ATTRIBUTE_HIDDEN;
 #define bfd_slurp_bsd_armap bfd_slurp_armap
 #define bfd_slurp_coff_armap bfd_slurp_armap
-extern bfd_boolean _bfd_archive_64_bit_slurp_armap
+extern bool _bfd_archive_64_bit_slurp_armap
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_archive_64_bit_write_armap
+extern bool _bfd_archive_64_bit_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int) ATTRIBUTE_HIDDEN;
 #define _bfd_archive_64_bit_slurp_extended_name_table \
   _bfd_slurp_extended_name_table
@@ -184,44 +160,40 @@ extern bfd_boolean _bfd_archive_64_bit_w
   bfd_generic_stat_arch_elt
 #define _bfd_archive_64_bit_update_armap_timestamp _bfd_bool_bfd_true
 
-extern bfd_boolean _bfd_slurp_extended_name_table
+extern bool _bfd_slurp_extended_name_table
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_construct_extended_name_table
-  (bfd *, bfd_boolean, char **, bfd_size_type *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_write_archive_contents
+extern bool _bfd_construct_extended_name_table
+  (bfd *, bool, char **, bfd_size_type *) ATTRIBUTE_HIDDEN;
+extern bool _bfd_write_archive_contents
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_compute_and_write_armap
+extern bool _bfd_compute_and_write_armap
   (bfd *, unsigned int) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_get_elt_at_filepos
-  (bfd *, file_ptr) ATTRIBUTE_HIDDEN;
+  (bfd *, file_ptr, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_generic_get_elt_at_index
   (bfd *, symindex) ATTRIBUTE_HIDDEN;
-extern bfd * _bfd_new_bfd
-  (void) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_free_cached_info
-  (bfd *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_bool_bfd_false
+extern bool _bfd_bool_bfd_false
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_asymbol_false
+extern bool _bfd_bool_bfd_asymbol_false
   (bfd *, asymbol *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_false_error
+extern bool _bfd_bool_bfd_false_error
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_link_false_error
+extern bool _bfd_bool_bfd_link_false_error
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_true
+extern bool _bfd_bool_bfd_true
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_link_true
+extern bool _bfd_bool_bfd_link_true
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_bfd_true
+extern bool _bfd_bool_bfd_bfd_true
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_uint_true
+extern bool _bfd_bool_bfd_uint_true
   (bfd *, unsigned int) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_asection_bfd_asection_true
+extern bool _bfd_bool_bfd_asection_bfd_asection_true
   (bfd *, asection *, bfd *, asection *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_asymbol_bfd_asymbol_true
+extern bool _bfd_bool_bfd_asymbol_bfd_asymbol_true
   (bfd *, asymbol *, bfd *, asymbol *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_ptr_true
+extern bool _bfd_bool_bfd_ptr_true
   (bfd *, void *) ATTRIBUTE_HIDDEN;
 extern void *_bfd_ptr_bfd_null_error
   (bfd *) ATTRIBUTE_HIDDEN;
@@ -240,10 +212,9 @@ extern void _bfd_void_bfd_link
 extern void _bfd_void_bfd_asection
   (bfd *, asection *) ATTRIBUTE_HIDDEN;
 
-extern bfd *_bfd_new_bfd_contained_in
-  (bfd *) ATTRIBUTE_HIDDEN;
-extern const bfd_target *_bfd_dummy_target
+extern bfd_cleanup _bfd_dummy_target
   (bfd *) ATTRIBUTE_HIDDEN;
+#define _bfd_no_cleanup _bfd_void_bfd
 
 extern void bfd_dont_truncate_arname
   (bfd *, const char *, char *) ATTRIBUTE_HIDDEN;
@@ -252,26 +223,26 @@ extern void bfd_bsd_truncate_arname
 extern void bfd_gnu_truncate_arname
   (bfd *, const char *, char *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_bsd_write_armap
+extern bool _bfd_bsd_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_coff_write_armap
+extern bool _bfd_coff_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int) ATTRIBUTE_HIDDEN;
 
 extern void *_bfd_generic_read_ar_hdr
   (bfd *) ATTRIBUTE_HIDDEN;
 extern void _bfd_ar_spacepad
   (char *, size_t, const char *, long) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_ar_sizepad
+extern bool _bfd_ar_sizepad
   (char *, size_t, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 extern void *_bfd_generic_read_ar_hdr_mag
   (bfd *, const char *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_generic_write_ar_hdr
+extern bool _bfd_generic_write_ar_hdr
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_bsd44_write_ar_hdr
+extern bool _bfd_bsd44_write_ar_hdr
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
 
 extern bfd * bfd_generic_openr_next_archived_file
@@ -289,15 +260,15 @@ extern int bfd_generic_stat_arch_elt
    BFD_JUMP_TABLE_GENERIC (_bfd_generic).  */
 
 #define _bfd_generic_close_and_cleanup _bfd_archive_close_and_cleanup
-extern bfd_boolean _bfd_archive_close_and_cleanup
+extern bool _bfd_archive_close_and_cleanup
   (bfd *) ATTRIBUTE_HIDDEN;
 extern void _bfd_unlink_from_archive_parent (bfd *) ATTRIBUTE_HIDDEN;
-#define _bfd_generic_bfd_free_cached_info _bfd_bool_bfd_true
-extern bfd_boolean _bfd_generic_new_section_hook
+#define _bfd_generic_bfd_free_cached_info _bfd_free_cached_info
+extern bool _bfd_generic_new_section_hook
   (bfd *, asection *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_generic_get_section_contents
+extern bool _bfd_generic_get_section_contents
   (bfd *, asection *, void *, file_ptr, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_generic_get_section_contents_in_window
+extern bool _bfd_generic_get_section_contents_in_window
   (bfd *, asection *, bfd_window *, file_ptr, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 /* Generic routines to use for BFD_JUMP_TABLE_COPY.  Use
@@ -314,7 +285,7 @@ extern bfd_boolean _bfd_generic_get_sect
 #define _bfd_generic_bfd_copy_private_header_data _bfd_bool_bfd_bfd_true
 #define _bfd_generic_bfd_print_private_bfd_data _bfd_bool_bfd_ptr_true
 
-extern bfd_boolean _bfd_generic_init_private_section_data
+extern bool _bfd_generic_init_private_section_data
   (bfd *, asection *, bfd *, asection *, struct bfd_link_info *)
   ATTRIBUTE_HIDDEN;
 
@@ -325,7 +296,7 @@ extern char *_bfd_nocore_core_file_faili
   (bfd *) ATTRIBUTE_HIDDEN;
 extern int _bfd_nocore_core_file_failing_signal
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nocore_core_file_matches_executable_p
+extern bool _bfd_nocore_core_file_matches_executable_p
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
 extern int _bfd_nocore_core_file_pid
   (bfd *) ATTRIBUTE_HIDDEN;
@@ -335,14 +306,14 @@ extern int _bfd_nocore_core_file_pid
 
 #define _bfd_noarchive_slurp_armap _bfd_bool_bfd_false_error
 #define _bfd_noarchive_slurp_extended_name_table _bfd_bool_bfd_false_error
-extern bfd_boolean _bfd_noarchive_construct_extended_name_table
+extern bool _bfd_noarchive_construct_extended_name_table
   (bfd *, char **, bfd_size_type *, const char **) ATTRIBUTE_HIDDEN;
 extern void _bfd_noarchive_truncate_arname
   (bfd *, const char *, char *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_noarchive_write_armap
+extern bool _bfd_noarchive_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int) ATTRIBUTE_HIDDEN;
 #define _bfd_noarchive_read_ar_hdr _bfd_ptr_bfd_null_error
-extern bfd_boolean _bfd_noarchive_write_ar_hdr
+extern bool _bfd_noarchive_write_ar_hdr
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
 extern bfd *
 _bfd_noarchive_openr_next_archived_file
@@ -358,7 +329,7 @@ extern bfd * _bfd_noarchive_get_elt_at_i
 #define _bfd_archive_bsd_slurp_armap bfd_slurp_bsd_armap
 #define _bfd_archive_bsd_slurp_extended_name_table \
   _bfd_slurp_extended_name_table
-extern bfd_boolean _bfd_archive_bsd_construct_extended_name_table
+extern bool _bfd_archive_bsd_construct_extended_name_table
   (bfd *, char **, bfd_size_type *, const char **) ATTRIBUTE_HIDDEN;
 #define _bfd_archive_bsd_truncate_arname bfd_bsd_truncate_arname
 #define _bfd_archive_bsd_write_armap _bfd_bsd_write_armap
@@ -369,7 +340,7 @@ extern bfd_boolean _bfd_archive_bsd_cons
 #define _bfd_archive_bsd_get_elt_at_index _bfd_generic_get_elt_at_index
 #define _bfd_archive_bsd_generic_stat_arch_elt \
   bfd_generic_stat_arch_elt
-extern bfd_boolean _bfd_archive_bsd_update_armap_timestamp
+extern bool _bfd_archive_bsd_update_armap_timestamp
   (bfd *) ATTRIBUTE_HIDDEN;
 
 /* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get COFF style
@@ -378,7 +349,7 @@ extern bfd_boolean _bfd_archive_bsd_upda
 #define _bfd_archive_coff_slurp_armap bfd_slurp_coff_armap
 #define _bfd_archive_coff_slurp_extended_name_table \
   _bfd_slurp_extended_name_table
-extern bfd_boolean _bfd_archive_coff_construct_extended_name_table
+extern bool _bfd_archive_coff_construct_extended_name_table
   (bfd *, char **, bfd_size_type *, const char **) ATTRIBUTE_HIDDEN;
 #define _bfd_archive_coff_truncate_arname bfd_dont_truncate_arname
 #define _bfd_archive_coff_write_armap _bfd_coff_write_armap
@@ -397,7 +368,7 @@ extern bfd_boolean _bfd_archive_coff_con
 #define _bfd_archive_bsd44_slurp_armap bfd_slurp_bsd_armap
 #define _bfd_archive_bsd44_slurp_extended_name_table \
   _bfd_slurp_extended_name_table
-extern bfd_boolean _bfd_archive_bsd44_construct_extended_name_table
+extern bool _bfd_archive_bsd44_construct_extended_name_table
   (bfd *, char **, bfd_size_type *, const char **) ATTRIBUTE_HIDDEN;
 #define _bfd_archive_bsd44_truncate_arname bfd_bsd_truncate_arname
 #define _bfd_archive_bsd44_write_armap _bfd_bsd_write_armap
@@ -415,7 +386,7 @@ extern bfd_boolean _bfd_archive_bsd44_co
    archives.  Use BFD_JUMP_TABLE_ARCHIVE (_bfd_vms_lib).  Some of them
    are irrelevant.  */
 
-extern bfd_boolean _bfd_vms_lib_write_archive_contents
+extern bool _bfd_vms_lib_write_archive_contents
   (bfd *) ATTRIBUTE_HIDDEN;
 #define _bfd_vms_lib_slurp_armap _bfd_noarchive_slurp_armap
 #define _bfd_vms_lib_slurp_extended_name_table \
@@ -440,13 +411,13 @@ extern symindex _bfd_vms_lib_find_symbol
   (bfd *, const char *) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_vms_lib_get_imagelib_file
   (bfd *) ATTRIBUTE_HIDDEN;
-extern const bfd_target *_bfd_vms_lib_alpha_archive_p
+extern bfd_cleanup _bfd_vms_lib_alpha_archive_p
   (bfd *) ATTRIBUTE_HIDDEN;
-extern const bfd_target *_bfd_vms_lib_ia64_archive_p
+extern bfd_cleanup _bfd_vms_lib_ia64_archive_p
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_vms_lib_alpha_mkarchive
+extern bool _bfd_vms_lib_alpha_mkarchive
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_vms_lib_ia64_mkarchive
+extern bool _bfd_vms_lib_ia64_mkarchive
   (bfd *) ATTRIBUTE_HIDDEN;
 
 /* Routines to use for BFD_JUMP_TABLE_SYMBOLS where there is no symbol
@@ -461,27 +432,31 @@ extern void _bfd_nosymbols_print_symbol
 extern void _bfd_nosymbols_get_symbol_info
   (bfd *, asymbol *, symbol_info *) ATTRIBUTE_HIDDEN;
 extern const char * _bfd_nosymbols_get_symbol_version_string
-  (bfd *, asymbol *, bfd_boolean *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nosymbols_bfd_is_local_label_name
+  (bfd *, asymbol *, bool, bool *) ATTRIBUTE_HIDDEN;
+extern bool _bfd_nosymbols_bfd_is_local_label_name
   (bfd *, const char *) ATTRIBUTE_HIDDEN;
 #define _bfd_nosymbols_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false
 extern alent *_bfd_nosymbols_get_lineno
   (bfd *, asymbol *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nosymbols_find_nearest_line
+extern bool _bfd_nosymbols_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *)
   ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nosymbols_find_line
+extern bool _bfd_nosymbols_find_nearest_line_with_alt
+  (bfd *, const char *, asymbol **, asection *, bfd_vma,
+   const char **, const char **, unsigned int *, unsigned int *)
+  ATTRIBUTE_HIDDEN;
+extern bool _bfd_nosymbols_find_line
   (bfd *, asymbol **, asymbol *, const char **, unsigned int *)
   ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nosymbols_find_inliner_info
+extern bool _bfd_nosymbols_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *) ATTRIBUTE_HIDDEN;
 extern asymbol *_bfd_nosymbols_bfd_make_debug_symbol
-  (bfd *, void *, unsigned long) ATTRIBUTE_HIDDEN;
+  (bfd *) ATTRIBUTE_HIDDEN;
 extern long _bfd_nosymbols_read_minisymbols
-  (bfd *, bfd_boolean, void **, unsigned int *) ATTRIBUTE_HIDDEN;
+  (bfd *, bool, void **, unsigned int *) ATTRIBUTE_HIDDEN;
 extern asymbol *_bfd_nosymbols_minisymbol_to_symbol
-  (bfd *, bfd_boolean, const void *, asymbol *) ATTRIBUTE_HIDDEN;
+  (bfd *, bool, const void *, asymbol *) ATTRIBUTE_HIDDEN;
 
 /* Routines to use for BFD_JUMP_TABLE_RELOCS when there is no reloc
    support.  Use BFD_JUMP_TABLE_RELOCS (_bfd_norelocs).  */
@@ -500,16 +475,16 @@ extern reloc_howto_type *_bfd_norelocs_b
 /* Routines to use for BFD_JUMP_TABLE_WRITE for targets which may not
    be written.  Use BFD_JUMP_TABLE_WRITE (_bfd_nowrite).  */
 
-extern bfd_boolean _bfd_nowrite_set_arch_mach
+extern bool _bfd_nowrite_set_arch_mach
   (bfd *, enum bfd_architecture, unsigned long) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nowrite_set_section_contents
+extern bool _bfd_nowrite_set_section_contents
   (bfd *, asection *, const void *, file_ptr, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 /* Generic routines to use for BFD_JUMP_TABLE_WRITE.  Use
    BFD_JUMP_TABLE_WRITE (_bfd_generic).  */
 
 #define _bfd_generic_set_arch_mach bfd_default_set_arch_mach
-extern bfd_boolean _bfd_generic_set_section_contents
+extern bool _bfd_generic_set_section_contents
   (bfd *, asection *, const void *, file_ptr, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 /* Routines to use for BFD_JUMP_TABLE_LINK for targets which do not
@@ -519,18 +494,18 @@ extern int _bfd_nolink_sizeof_headers
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 extern bfd_byte *_bfd_nolink_bfd_get_relocated_section_contents
   (bfd *, struct bfd_link_info *, struct bfd_link_order *,
-   bfd_byte *, bfd_boolean, asymbol **) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nolink_bfd_relax_section
-  (bfd *, asection *, struct bfd_link_info *, bfd_boolean *) ATTRIBUTE_HIDDEN;
+   bfd_byte *, bool, asymbol **) ATTRIBUTE_HIDDEN;
+extern bool _bfd_nolink_bfd_relax_section
+  (bfd *, asection *, struct bfd_link_info *, bool *) ATTRIBUTE_HIDDEN;
 #define _bfd_nolink_bfd_gc_sections _bfd_bool_bfd_link_false_error
-extern bfd_boolean _bfd_nolink_bfd_lookup_section_flags
+extern bool _bfd_nolink_bfd_lookup_section_flags
   (struct bfd_link_info *, struct flag_info *, asection *) ATTRIBUTE_HIDDEN;
 #define _bfd_nolink_bfd_merge_sections _bfd_bool_bfd_link_false_error
-extern bfd_boolean _bfd_nolink_bfd_is_group_section
+extern bool _bfd_nolink_bfd_is_group_section
   (bfd *, const asection *) ATTRIBUTE_HIDDEN;
 extern const char *_bfd_nolink_bfd_group_name
   (bfd *, const asection *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nolink_bfd_discard_group
+extern bool _bfd_nolink_bfd_discard_group
   (bfd *, asection *) ATTRIBUTE_HIDDEN;
 extern struct bfd_link_hash_table *_bfd_nolink_bfd_link_hash_table_create
   (bfd *) ATTRIBUTE_HIDDEN;
@@ -541,11 +516,11 @@ extern void _bfd_nolink_bfd_copy_link_ha
   (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *)
   ATTRIBUTE_HIDDEN;
 #define _bfd_nolink_bfd_final_link _bfd_bool_bfd_link_false_error
-extern bfd_boolean _bfd_nolink_bfd_link_split_section
+extern bool _bfd_nolink_bfd_link_split_section
   (bfd *, struct bfd_section *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nolink_section_already_linked
+extern bool _bfd_nolink_section_already_linked
   (bfd *, asection *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nolink_bfd_define_common_symbol
+extern bool _bfd_nolink_bfd_define_common_symbol
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *)
   ATTRIBUTE_HIDDEN;
 #define _bfd_nolink_bfd_link_hide_symbol \
@@ -570,25 +545,29 @@ extern long _bfd_nodynamic_canonicalize_
 
 /* Generic routine to determine of the given symbol is a local
    label.  */
-extern bfd_boolean bfd_generic_is_local_label_name
+extern bool bfd_generic_is_local_label_name
   (bfd *, const char *) ATTRIBUTE_HIDDEN;
 
 /* Generic minisymbol routines.  */
 extern long _bfd_generic_read_minisymbols
-  (bfd *, bfd_boolean, void **, unsigned int *) ATTRIBUTE_HIDDEN;
+  (bfd *, bool, void **, unsigned int *) ATTRIBUTE_HIDDEN;
 extern asymbol *_bfd_generic_minisymbol_to_symbol
-  (bfd *, bfd_boolean, const void *, asymbol *) ATTRIBUTE_HIDDEN;
+  (bfd *, bool, const void *, asymbol *) ATTRIBUTE_HIDDEN;
 
 /* Find the nearest line using .stab/.stabstr sections.  */
-extern bfd_boolean _bfd_stab_section_find_nearest_line
-  (bfd *, asymbol **, asection *, bfd_vma, bfd_boolean *,
+extern bool _bfd_stab_section_find_nearest_line
+  (bfd *, asymbol **, asection *, bfd_vma, bool *,
    const char **, const char **, unsigned int *, void **) ATTRIBUTE_HIDDEN;
 
 /* Find the nearest line using DWARF 1 debugging information.  */
-extern bfd_boolean _bfd_dwarf1_find_nearest_line
+extern bool _bfd_dwarf1_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *) ATTRIBUTE_HIDDEN;
 
+/* Clean up the data used to handle DWARF 1 debugging information. */
+extern void _bfd_dwarf1_cleanup_debug_info
+  (bfd *, void **) ATTRIBUTE_HIDDEN;
+
 struct dwarf_debug_section
 {
   const char * uncompressed_name;
@@ -606,24 +585,34 @@ extern int _bfd_dwarf2_find_nearest_line
    const char **, const char **, unsigned int *, unsigned int *,
    const struct dwarf_debug_section *, void **) ATTRIBUTE_HIDDEN;
 
+/* Find the nearest line using DWARF 2 debugging information, with
+   the option of specifying a .gnu_debugaltlink file.  */
+extern int _bfd_dwarf2_find_nearest_line_with_alt
+  (bfd *, const char *, asymbol **, asymbol *, asection *, bfd_vma,
+   const char **, const char **, unsigned int *, unsigned int *,
+   const struct dwarf_debug_section *, void **) ATTRIBUTE_HIDDEN;
+
 /* Find the bias between DWARF addresses and real addresses.  */
 extern bfd_signed_vma _bfd_dwarf2_find_symbol_bias
   (asymbol **, void **) ATTRIBUTE_HIDDEN;
 
 /* Find inliner info after calling bfd_find_nearest_line. */
-extern bfd_boolean _bfd_dwarf2_find_inliner_info
+extern bool _bfd_dwarf2_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *, void **)
   ATTRIBUTE_HIDDEN;
 
 /* Read DWARF 2 debugging information. */
-extern bfd_boolean _bfd_dwarf2_slurp_debug_info
+extern bool _bfd_dwarf2_slurp_debug_info
   (bfd *, bfd *, const struct dwarf_debug_section *, asymbol **, void **,
-   bfd_boolean) ATTRIBUTE_HIDDEN;
+   bool) ATTRIBUTE_HIDDEN;
 
 /* Clean up the data used to handle DWARF 2 debugging information. */
 extern void _bfd_dwarf2_cleanup_debug_info
   (bfd *, void **) ATTRIBUTE_HIDDEN;
 
+extern void _bfd_stab_cleanup
+  (bfd *, void **) ATTRIBUTE_HIDDEN;
+
 /* Create a new section entry.  */
 extern struct bfd_hash_entry *bfd_section_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *)
@@ -635,7 +624,7 @@ extern struct bfd_hash_entry *_bfd_link_
    const char *string) ATTRIBUTE_HIDDEN;
 
 /* Initialize a bfd_link_hash_table.  */
-extern bfd_boolean _bfd_link_hash_table_init
+extern bool _bfd_link_hash_table_init
   (struct bfd_link_hash_table *, bfd *,
    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
 			       struct bfd_hash_table *,
@@ -651,24 +640,24 @@ extern void _bfd_generic_link_hash_table
   (bfd *) ATTRIBUTE_HIDDEN;
 
 /* Generic add symbol routine.  */
-extern bfd_boolean _bfd_generic_link_add_symbols
+extern bool _bfd_generic_link_add_symbols
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 
 /* Generic archive add symbol routine.  */
-extern bfd_boolean _bfd_generic_link_add_archive_symbols
+extern bool _bfd_generic_link_add_archive_symbols
   (bfd *, struct bfd_link_info *,
-   bfd_boolean (*) (bfd *, struct bfd_link_info *,
+   bool (*) (bfd *, struct bfd_link_info *,
 		    struct bfd_link_hash_entry *, const char *,
-		    bfd_boolean *)) ATTRIBUTE_HIDDEN;
+		    bool *)) ATTRIBUTE_HIDDEN;
 
 /* Forward declaration to avoid prototype errors.  */
 typedef struct bfd_link_hash_entry _bfd_link_hash_entry;
 
 /* Generic routine to add a single symbol.  */
-extern bfd_boolean _bfd_generic_link_add_one_symbol
+extern bool _bfd_generic_link_add_one_symbol
   (struct bfd_link_info *, bfd *, const char *name, flagword,
-   asection *, bfd_vma, const char *, bfd_boolean copy,
-   bfd_boolean constructor, struct bfd_link_hash_entry **) ATTRIBUTE_HIDDEN;
+   asection *, bfd_vma, const char *, bool copy,
+   bool constructor, struct bfd_link_hash_entry **) ATTRIBUTE_HIDDEN;
 
 /* Generic routine to mark section as supplying symbols only.  */
 extern void _bfd_generic_link_just_syms
@@ -680,22 +669,22 @@ extern void _bfd_generic_copy_link_hash_
   ATTRIBUTE_HIDDEN;
 
 /* Generic link routine.  */
-extern bfd_boolean _bfd_generic_final_link
+extern bool _bfd_generic_final_link
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_generic_link_split_section
+extern bool _bfd_generic_link_split_section
   (bfd *, struct bfd_section *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_generic_section_already_linked
+extern bool _bfd_generic_section_already_linked
   (bfd *, asection *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 
 /* Generic reloc_link_order processing routine.  */
-extern bfd_boolean _bfd_generic_reloc_link_order
+extern bool _bfd_generic_reloc_link_order
   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *)
   ATTRIBUTE_HIDDEN;
 
 /* Default link order processing routine.  */
-extern bfd_boolean _bfd_default_link_order
+extern bool _bfd_default_link_order
   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *)
   ATTRIBUTE_HIDDEN;
 
@@ -716,48 +705,20 @@ extern bfd_reloc_status_type _bfd_reloca
 extern bfd_reloc_status_type _bfd_clear_contents
   (reloc_howto_type *, bfd *, asection *, bfd_byte *, bfd_vma) ATTRIBUTE_HIDDEN;
 
-/* Link stabs in sections in the first pass.  */
-
-extern bfd_boolean _bfd_link_section_stabs
-  (bfd *, struct stab_info *, asection *, asection *, void **,
-   bfd_size_type *) ATTRIBUTE_HIDDEN;
-
-/* Eliminate stabs for discarded functions and symbols.  */
-extern bfd_boolean _bfd_discard_section_stabs
-  (bfd *, asection *, void *, bfd_boolean (*) (bfd_vma, void *), void *)
-  ATTRIBUTE_HIDDEN;
-
-/* Write out the .stab section when linking stabs in sections.  */
-
-extern bfd_boolean _bfd_write_section_stabs
-  (bfd *, struct stab_info *, asection *, void **, bfd_byte *)
-  ATTRIBUTE_HIDDEN;
-
-/* Write out the .stabstr string table when linking stabs in sections.  */
-
-extern bfd_boolean _bfd_write_stab_strings
-  (bfd *, struct stab_info *) ATTRIBUTE_HIDDEN;
-
-/* Find an offset within a .stab section when linking stabs in
-   sections.  */
-
-extern bfd_vma _bfd_stab_section_offset
-  (asection *, void *, bfd_vma) ATTRIBUTE_HIDDEN;
-
 /* Register a SEC_MERGE section as a candidate for merging.  */
 
-extern bfd_boolean _bfd_add_merge_section
+extern bool _bfd_add_merge_section
   (bfd *, void **, asection *, void **) ATTRIBUTE_HIDDEN;
 
 /* Attempt to merge SEC_MERGE sections.  */
 
-extern bfd_boolean _bfd_merge_sections
+extern bool _bfd_merge_sections
   (bfd *, struct bfd_link_info *, void *, void (*) (bfd *, asection *))
   ATTRIBUTE_HIDDEN;
 
 /* Write out a merged section.  */
 
-extern bfd_boolean _bfd_write_merged_section
+extern bool _bfd_write_merged_section
   (bfd *, asection *, void *) ATTRIBUTE_HIDDEN;
 
 /* Find an offset within a modified SEC_MERGE section.  */
@@ -769,31 +730,6 @@ extern bfd_vma _bfd_merged_section_offse
 
 extern void _bfd_merge_sections_free (void *) ATTRIBUTE_HIDDEN;
 
-/* Create a string table.  */
-extern struct bfd_strtab_hash *_bfd_stringtab_init
-  (void) ATTRIBUTE_HIDDEN;
-
-/* Create an XCOFF .debug section style string table.  */
-extern struct bfd_strtab_hash *_bfd_xcoff_stringtab_init
-  (void) ATTRIBUTE_HIDDEN;
-
-/* Free a string table.  */
-extern void _bfd_stringtab_free
-  (struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
-
-/* Get the size of a string table.  */
-extern bfd_size_type _bfd_stringtab_size
-  (struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
-
-/* Add a string to a string table.  */
-extern bfd_size_type _bfd_stringtab_add
-  (struct bfd_strtab_hash *, const char *, bfd_boolean hash, bfd_boolean copy)
-  ATTRIBUTE_HIDDEN;
-
-/* Write out a string table.  */
-extern bfd_boolean _bfd_stringtab_emit
-  (bfd *, struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
-
 /* Macros to tell if bfds are read or write enabled.
 
    Note that bfds open for read may be scribbled into if the fd passed
@@ -839,28 +775,31 @@ extern FILE *_bfd_real_fopen
 
 /* List of supported target vectors, and the default vector (if
    bfd_default_vector[0] is NULL, there is no default).  */
-extern const bfd_target * const *bfd_target_vector ATTRIBUTE_HIDDEN;
+extern const bfd_target *const *const bfd_target_vector ATTRIBUTE_HIDDEN;
 extern const bfd_target *bfd_default_vector[] ATTRIBUTE_HIDDEN;
 
 /* List of associated target vectors.  */
-extern const bfd_target * const *bfd_associated_vector ATTRIBUTE_HIDDEN;
+extern const bfd_target *const *const bfd_associated_vector ATTRIBUTE_HIDDEN;
 
 /* Functions shared by the ECOFF and MIPS ELF backends, which have no
    other common header files.  */
 
-#if defined(__STDC__) || defined(ALMOST_STDC)
+struct ecoff_debug_info;
+struct ecoff_debug_swap;
+struct ecoff_extr;
 struct ecoff_find_line;
-#endif
 
-extern bfd_boolean _bfd_ecoff_locate_line
+extern void _bfd_ecoff_free_ecoff_debug_info
+  (struct ecoff_debug_info *debug);
+extern bool _bfd_ecoff_locate_line
   (bfd *, asection *, bfd_vma, struct ecoff_debug_info * const,
    const struct ecoff_debug_swap * const, struct ecoff_find_line *,
    const char **, const char **, unsigned int *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_ecoff_get_accumulated_pdr
+extern bool _bfd_ecoff_get_accumulated_pdr
   (void *, bfd_byte *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_ecoff_get_accumulated_sym
+extern bool _bfd_ecoff_get_accumulated_sym
   (void *, bfd_byte *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_ecoff_get_accumulated_ss
+extern bool _bfd_ecoff_get_accumulated_ss
   (void *, bfd_byte *) ATTRIBUTE_HIDDEN;
 
 extern bfd_vma _bfd_get_gp_value
@@ -872,10 +811,10 @@ extern void _bfd_set_gp_value
    other common header files.  */
 
 #ifndef _bfd_sh_align_load_span
-extern bfd_boolean _bfd_sh_align_load_span
+extern bool _bfd_sh_align_load_span
   (bfd *, asection *, bfd_byte *,
-   bfd_boolean (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
-   void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bfd_boolean *) ATTRIBUTE_HIDDEN;
+   bool (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
+   void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bool *) ATTRIBUTE_HIDDEN;
 #endif
 
 /* This is the shape of the elements inside the already_linked hash
@@ -896,11 +835,11 @@ struct bfd_section_already_linked
 
 extern struct bfd_section_already_linked_hash_entry *
   bfd_section_already_linked_table_lookup (const char *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean bfd_section_already_linked_table_insert
+extern bool bfd_section_already_linked_table_insert
   (struct bfd_section_already_linked_hash_entry *, asection *)
   ATTRIBUTE_HIDDEN;
 extern void bfd_section_already_linked_table_traverse
-  (bfd_boolean (*) (struct bfd_section_already_linked_hash_entry *,
+  (bool (*) (struct bfd_section_already_linked_hash_entry *,
 		    void *), void *) ATTRIBUTE_HIDDEN;
 
 extern bfd_vma _bfd_read_unsigned_leb128
@@ -908,12 +847,99 @@ extern bfd_vma _bfd_read_unsigned_leb128
 extern bfd_signed_vma _bfd_read_signed_leb128
   (bfd *, bfd_byte *, unsigned int *) ATTRIBUTE_HIDDEN;
 extern bfd_vma _bfd_safe_read_leb128
-  (bfd *, bfd_byte *, unsigned int *, bfd_boolean, const bfd_byte * const)
+  (bfd *, bfd_byte **, bool, const bfd_byte * const) ATTRIBUTE_HIDDEN;
+extern bfd_byte * _bfd_write_unsigned_leb128
+  (bfd_byte *, bfd_byte *, bfd_vma) ATTRIBUTE_HIDDEN;
+
+extern struct bfd_link_info *_bfd_get_link_info (bfd *);
+
+extern bool _bfd_link_keep_memory (struct bfd_link_info *)
   ATTRIBUTE_HIDDEN;
+
+#if GCC_VERSION >= 7000
+#define _bfd_mul_overflow(a, b, res) __builtin_mul_overflow (a, b, res)
+#else
+/* Assumes unsigned values.  Careful!  Args evaluated multiple times.  */
+#define _bfd_mul_overflow(a, b, res) \
+  ((*res) = (a), (*res) *= (b), (b) != 0 && (*res) / (b) != (a))
+#endif
+
+#ifdef __GNUC__
+#define _bfd_constant_p(v) __builtin_constant_p (v)
+#else
+#define _bfd_constant_p(v) 0
+#endif
+
+static inline void *
+_bfd_alloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize)
+{
+  void *mem;
+  if (!_bfd_constant_p (rsize))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && rsize > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return NULL;
+	}
+    }
+  mem = bfd_alloc (abfd, asize);
+  if (mem != NULL)
+    {
+      if (bfd_read (mem, rsize, abfd) == rsize)
+	return mem;
+      bfd_release (abfd, mem);
+    }
+  return NULL;
+}
+
+static inline void *
+_bfd_malloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize)
+{
+  void *mem;
+  if (!_bfd_constant_p (rsize))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && rsize > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return NULL;
+	}
+    }
+  mem = bfd_malloc (asize);
+  if (mem != NULL)
+    {
+      if (bfd_read (mem, rsize, abfd) == rsize)
+	return mem;
+      free (mem);
+    }
+  return NULL;
+}
 /* Extracted from libbfd.c.  */
-bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
+void *bfd_malloc (bfd_size_type /*size*/) ATTRIBUTE_HIDDEN;
+
+void *bfd_realloc (void */*mem*/, bfd_size_type /*size*/) ATTRIBUTE_HIDDEN;
+
+void *bfd_realloc_or_free (void */*mem*/, bfd_size_type /*size*/) ATTRIBUTE_HIDDEN;
+
+void *bfd_zmalloc (bfd_size_type /*size*/) ATTRIBUTE_HIDDEN;
+
+bool bfd_write_bigendian_4byte_int (bfd *, unsigned int) ATTRIBUTE_HIDDEN;
+
+unsigned int bfd_log2 (bfd_vma x) ATTRIBUTE_HIDDEN;
+
+/* Extracted from bfd.c.  */
+void _bfd_clear_error_data (void) ATTRIBUTE_HIDDEN;
 
-unsigned int bfd_log2 (bfd_vma x);
+char *bfd_asprintf (const char *fmt, ...) ATTRIBUTE_HIDDEN;
+
+bfd_error_handler_type _bfd_set_error_handler_caching (bfd *) ATTRIBUTE_HIDDEN;
+
+const char *_bfd_get_error_program_name (void) ATTRIBUTE_HIDDEN;
+
+bool bfd_lock (void) ATTRIBUTE_HIDDEN;
+
+bool bfd_unlock (void) ATTRIBUTE_HIDDEN;
 
 /* Extracted from bfdio.c.  */
 struct bfd_iovec
@@ -926,7 +952,7 @@ struct bfd_iovec
      or -1 (setting <<bfd_error>>) if an error occurs.  */
   file_ptr (*bread) (struct bfd *abfd, void *ptr, file_ptr nbytes);
   file_ptr (*bwrite) (struct bfd *abfd, const void *ptr,
-                      file_ptr nbytes);
+		      file_ptr nbytes);
   /* Return the current IOSTREAM file offset, or -1 (setting <<bfd_error>>
      if an error occurs.  */
   file_ptr (*btell) (struct bfd *abfd);
@@ -943,24 +969,79 @@ struct bfd_iovec
      MAP_LEN the size mapped (a page multiple).  Use unmap with MAP_ADDR and
      MAP_LEN to unmap.  */
   void *(*bmmap) (struct bfd *abfd, void *addr, bfd_size_type len,
-                  int prot, int flags, file_ptr offset,
-                  void **map_addr, bfd_size_type *map_len);
+		  int prot, int flags, file_ptr offset,
+		  void **map_addr, bfd_size_type *map_len);
 };
 extern const struct bfd_iovec _bfd_memory_iovec;
+
+/* Extracted from archive.c.  */
+/* Used in generating armaps (archive tables of contents).  */
+struct orl             /* Output ranlib.  */
+{
+  char **name;         /* Symbol name.  */
+  union
+  {
+    file_ptr pos;
+    bfd *abfd;
+  } u;                 /* bfd* or file position.  */
+  int namidx;          /* Index into string table.  */
+};
+
+/* Extracted from archures.c.  */
+extern const bfd_arch_info_type bfd_default_arch_struct;
+
+const bfd_arch_info_type *bfd_default_compatible
+   (const bfd_arch_info_type *a, const bfd_arch_info_type *b) ATTRIBUTE_HIDDEN;
+
+bool bfd_default_scan
+   (const struct bfd_arch_info *info, const char *string) ATTRIBUTE_HIDDEN;
+
+void *bfd_arch_default_fill (bfd_size_type count,
+    bool is_bigendian,
+    bool code) ATTRIBUTE_HIDDEN;
+
 /* Extracted from bfdwin.c.  */
-struct _bfd_window_internal {
+typedef struct _bfd_window_internal
+{
   struct _bfd_window_internal *next;
   void *data;
   bfd_size_type size;
   int refcount : 31;           /* should be enough...  */
   unsigned mapped : 1;         /* 1 = mmap, 0 = malloc */
-};
+}
+bfd_window_internal;
+
 /* Extracted from cache.c.  */
-bfd_boolean bfd_cache_init (bfd *abfd);
+bool bfd_cache_init (bfd *abfd) ATTRIBUTE_HIDDEN;
 
-bfd_boolean bfd_cache_close (bfd *abfd);
+FILE* bfd_open_file (bfd *abfd) ATTRIBUTE_HIDDEN;
 
-FILE* bfd_open_file (bfd *abfd);
+/* Extracted from hash.c.  */
+struct bfd_strtab_hash *_bfd_stringtab_init (void) ATTRIBUTE_HIDDEN;
+
+struct bfd_strtab_hash *_bfd_xcoff_stringtab_init
+   (bool /*isxcoff64*/) ATTRIBUTE_HIDDEN;
+
+void _bfd_stringtab_free (struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
+
+bfd_size_type _bfd_stringtab_add
+   (struct bfd_strtab_hash *, const char *,
+    bool /*hash*/, bool /*copy*/) ATTRIBUTE_HIDDEN;
+
+bfd_size_type _bfd_stringtab_size (struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
+
+bool _bfd_stringtab_emit (bfd *, struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
+
+/* Extracted from linker.c.  */
+bool _bfd_generic_verify_endian_match
+   (bfd *ibfd, struct bfd_link_info *info) ATTRIBUTE_HIDDEN;
+
+/* Extracted from opncls.c.  */
+bfd *_bfd_new_bfd (void) ATTRIBUTE_HIDDEN;
+
+bfd *_bfd_new_bfd_contained_in (bfd *) ATTRIBUTE_HIDDEN;
+
+bool _bfd_free_cached_info (bfd *) ATTRIBUTE_HIDDEN;
 
 /* Extracted from reloc.c.  */
 #ifdef _BFD_MAKE_TABLE_bfd_reloc_code_real
@@ -981,6 +1062,7 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_12_PCREL",
   "BFD_RELOC_8_PCREL",
   "BFD_RELOC_32_SECREL",
+  "BFD_RELOC_16_SECIDX",
   "BFD_RELOC_32_GOT_PCREL",
   "BFD_RELOC_16_GOT_PCREL",
   "BFD_RELOC_8_GOT_PCREL",
@@ -1225,7 +1307,7 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_MICROMIPS_HIGHER",
   "BFD_RELOC_MIPS_SCN_DISP",
   "BFD_RELOC_MICROMIPS_SCN_DISP",
-  "BFD_RELOC_MIPS_REL16",
+  "BFD_RELOC_MIPS_16",
   "BFD_RELOC_MIPS_RELGOT",
   "BFD_RELOC_MIPS_JALR",
   "BFD_RELOC_MICROMIPS_JALR",
@@ -1250,12 +1332,9 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_MIPS_TLS_TPREL_LO16",
   "BFD_RELOC_MICROMIPS_TLS_TPREL_LO16",
   "BFD_RELOC_MIPS_EH",
-
   "BFD_RELOC_MIPS_COPY",
   "BFD_RELOC_MIPS_JUMP_SLOT",
-
   "BFD_RELOC_MOXIE_10_PCREL",
-
   "BFD_RELOC_FT32_10",
   "BFD_RELOC_FT32_20",
   "BFD_RELOC_FT32_17",
@@ -1265,7 +1344,6 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_FT32_SC1",
   "BFD_RELOC_FT32_15",
   "BFD_RELOC_FT32_DIFF32",
-
   "BFD_RELOC_FRV_LABEL16",
   "BFD_RELOC_FRV_LABEL24",
   "BFD_RELOC_FRV_LO16",
@@ -1305,7 +1383,6 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_FRV_GETTLSOFF_RELAX",
   "BFD_RELOC_FRV_TLSOFF_RELAX",
   "BFD_RELOC_FRV_TLSMOFF",
-
   "BFD_RELOC_MN10300_GOTOFF24",
   "BFD_RELOC_MN10300_GOT32",
   "BFD_RELOC_MN10300_GOT24",
@@ -1327,7 +1404,6 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_MN10300_TLS_TPOFF",
   "BFD_RELOC_MN10300_32_PCREL",
   "BFD_RELOC_MN10300_16_PCREL",
-
   "BFD_RELOC_386_GOT32",
   "BFD_RELOC_386_PLT32",
   "BFD_RELOC_386_COPY",
@@ -1384,6 +1460,9 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_X86_64_PLT32_BND",
   "BFD_RELOC_X86_64_GOTPCRELX",
   "BFD_RELOC_X86_64_REX_GOTPCRELX",
+  "BFD_RELOC_X86_64_CODE_4_GOTPCRELX",
+  "BFD_RELOC_X86_64_CODE_4_GOTTPOFF",
+  "BFD_RELOC_X86_64_CODE_4_GOTPC32_TLSDESC",
   "BFD_RELOC_NS32K_IMM_8",
   "BFD_RELOC_NS32K_IMM_16",
   "BFD_RELOC_NS32K_IMM_32",
@@ -1407,6 +1486,8 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_PPC_B26",
   "BFD_RELOC_PPC_BA26",
   "BFD_RELOC_PPC_TOC16",
+  "BFD_RELOC_PPC_TOC16_LO",
+  "BFD_RELOC_PPC_TOC16_HI",
   "BFD_RELOC_PPC_B16",
   "BFD_RELOC_PPC_B16_BRTAKEN",
   "BFD_RELOC_PPC_B16_BRNTAKEN",
@@ -1453,6 +1534,7 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_PPC_VLE_SDAREL_HA16D",
   "BFD_RELOC_PPC_16DX_HA",
   "BFD_RELOC_PPC_REL16DX_HA",
+  "BFD_RELOC_PPC_NEG",
   "BFD_RELOC_PPC64_HIGHER",
   "BFD_RELOC_PPC64_HIGHER_S",
   "BFD_RELOC_PPC64_HIGHEST",
@@ -1487,6 +1569,7 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_PPC64_ADDR64_LOCAL",
   "BFD_RELOC_PPC64_ENTRY",
   "BFD_RELOC_PPC64_REL24_NOTOC",
+  "BFD_RELOC_PPC64_REL24_P9NOTOC",
   "BFD_RELOC_PPC64_D34",
   "BFD_RELOC_PPC64_D34_LO",
   "BFD_RELOC_PPC64_D34_HI30",
@@ -1507,6 +1590,10 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_PPC_TLS",
   "BFD_RELOC_PPC_TLSGD",
   "BFD_RELOC_PPC_TLSLD",
+  "BFD_RELOC_PPC_TLSLE",
+  "BFD_RELOC_PPC_TLSIE",
+  "BFD_RELOC_PPC_TLSM",
+  "BFD_RELOC_PPC_TLSML",
   "BFD_RELOC_PPC_DTPMOD",
   "BFD_RELOC_PPC_TPREL16",
   "BFD_RELOC_PPC_TPREL16_LO",
@@ -1534,6 +1621,12 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_PPC_GOT_DTPREL16_LO",
   "BFD_RELOC_PPC_GOT_DTPREL16_HI",
   "BFD_RELOC_PPC_GOT_DTPREL16_HA",
+  "BFD_RELOC_PPC64_TLSGD",
+  "BFD_RELOC_PPC64_TLSLD",
+  "BFD_RELOC_PPC64_TLSLE",
+  "BFD_RELOC_PPC64_TLSIE",
+  "BFD_RELOC_PPC64_TLSM",
+  "BFD_RELOC_PPC64_TLSML",
   "BFD_RELOC_PPC64_TPREL16_DS",
   "BFD_RELOC_PPC64_TPREL16_LO_DS",
   "BFD_RELOC_PPC64_TPREL16_HIGH",
@@ -1552,10 +1645,10 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_PPC64_DTPREL16_HIGHESTA",
   "BFD_RELOC_PPC64_TPREL34",
   "BFD_RELOC_PPC64_DTPREL34",
-  "BFD_RELOC_PPC64_GOT_TLSGD34",
-  "BFD_RELOC_PPC64_GOT_TLSLD34",
-  "BFD_RELOC_PPC64_GOT_TPREL34",
-  "BFD_RELOC_PPC64_GOT_DTPREL34",
+  "BFD_RELOC_PPC64_GOT_TLSGD_PCREL34",
+  "BFD_RELOC_PPC64_GOT_TLSLD_PCREL34",
+  "BFD_RELOC_PPC64_GOT_TPREL_PCREL34",
+  "BFD_RELOC_PPC64_GOT_DTPREL_PCREL34",
   "BFD_RELOC_PPC64_TLS_PCREL",
   "BFD_RELOC_I370_D12",
   "BFD_RELOC_CTOR",
@@ -2184,7 +2277,6 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_MEP_ADDR24A4",
   "BFD_RELOC_MEP_GNU_VTINHERIT",
   "BFD_RELOC_MEP_GNU_VTENTRY",
-
   "BFD_RELOC_METAG_HIADDR16",
   "BFD_RELOC_METAG_LOADDR16",
   "BFD_RELOC_METAG_RELBRANCH",
@@ -2314,11 +2406,6 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_RISCV_ALIGN",
   "BFD_RELOC_RISCV_RVC_BRANCH",
   "BFD_RELOC_RISCV_RVC_JUMP",
-  "BFD_RELOC_RISCV_RVC_LUI",
-  "BFD_RELOC_RISCV_GPREL_I",
-  "BFD_RELOC_RISCV_GPREL_S",
-  "BFD_RELOC_RISCV_TPREL_I",
-  "BFD_RELOC_RISCV_TPREL_S",
   "BFD_RELOC_RISCV_RELAX",
   "BFD_RELOC_RISCV_CFA",
   "BFD_RELOC_RISCV_SUB6",
@@ -2327,6 +2414,8 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_RISCV_SET16",
   "BFD_RELOC_RISCV_SET32",
   "BFD_RELOC_RISCV_32_PCREL",
+  "BFD_RELOC_RISCV_SET_ULEB128",
+  "BFD_RELOC_RISCV_SUB_ULEB128",
   "BFD_RELOC_RL78_NEG8",
   "BFD_RELOC_RL78_NEG16",
   "BFD_RELOC_RL78_NEG24",
@@ -2672,6 +2761,7 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_OR1K_SLO13",
   "BFD_RELOC_OR1K_GOTPC_HI16",
   "BFD_RELOC_OR1K_GOTPC_LO16",
+  "BFD_RELOC_OR1K_GOT_AHI16",
   "BFD_RELOC_OR1K_GOT16",
   "BFD_RELOC_OR1K_GOT_PG21",
   "BFD_RELOC_OR1K_GOT_LO13",
@@ -2715,11 +2805,6 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_XSTORMY16_24",
   "BFD_RELOC_XSTORMY16_FPTR16",
   "BFD_RELOC_RELC",
-
-  "BFD_RELOC_XC16X_PAG",
-  "BFD_RELOC_XC16X_POF",
-  "BFD_RELOC_XC16X_SEG",
-  "BFD_RELOC_XC16X_SOF",
   "BFD_RELOC_VAX_GLOB_DAT",
   "BFD_RELOC_VAX_JMP_SLOT",
   "BFD_RELOC_VAX_RELATIVE",
@@ -2751,6 +2836,8 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_MSP430_ABS_HI16",
   "BFD_RELOC_MSP430_PREL31",
   "BFD_RELOC_MSP430_SYM_DIFF",
+  "BFD_RELOC_MSP430_SET_ULEB128",
+  "BFD_RELOC_MSP430_SUB_ULEB128",
   "BFD_RELOC_NIOS2_S16",
   "BFD_RELOC_NIOS2_U16",
   "BFD_RELOC_NIOS2_CALL26",
@@ -2868,7 +2955,20 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_XTENSA_TLS_FUNC",
   "BFD_RELOC_XTENSA_TLS_ARG",
   "BFD_RELOC_XTENSA_TLS_CALL",
+  "BFD_RELOC_XTENSA_PDIFF8",
+  "BFD_RELOC_XTENSA_PDIFF16",
+  "BFD_RELOC_XTENSA_PDIFF32",
+  "BFD_RELOC_XTENSA_NDIFF8",
+  "BFD_RELOC_XTENSA_NDIFF16",
+  "BFD_RELOC_XTENSA_NDIFF32",
   "BFD_RELOC_Z80_DISP8",
+  "BFD_RELOC_Z80_BYTE0",
+  "BFD_RELOC_Z80_BYTE1",
+  "BFD_RELOC_Z80_BYTE2",
+  "BFD_RELOC_Z80_BYTE3",
+  "BFD_RELOC_Z80_WORD0",
+  "BFD_RELOC_Z80_WORD1",
+  "BFD_RELOC_Z80_16_BE",
   "BFD_RELOC_Z8K_DISP7",
   "BFD_RELOC_Z8K_CALLR",
   "BFD_RELOC_Z8K_IMM4L",
@@ -2903,6 +3003,7 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_MICROBLAZE_32_ROSDA",
   "BFD_RELOC_MICROBLAZE_32_RWSDA",
   "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM",
+  "BFD_RELOC_MICROBLAZE_32_NONE",
   "BFD_RELOC_MICROBLAZE_64_NONE",
   "BFD_RELOC_MICROBLAZE_64_GOTPC",
   "BFD_RELOC_MICROBLAZE_64_GOT",
@@ -2920,6 +3021,91 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_MICROBLAZE_64_TLSTPREL",
   "BFD_RELOC_MICROBLAZE_64_TEXTPCREL",
   "BFD_RELOC_MICROBLAZE_64_TEXTREL",
+  "BFD_RELOC_KVX_RELOC_START",
+  "BFD_RELOC_KVX_NONE",
+  "BFD_RELOC_KVX_16",
+  "BFD_RELOC_KVX_32",
+  "BFD_RELOC_KVX_64",
+  "BFD_RELOC_KVX_S16_PCREL",
+  "BFD_RELOC_KVX_PCREL17",
+  "BFD_RELOC_KVX_PCREL27",
+  "BFD_RELOC_KVX_32_PCREL",
+  "BFD_RELOC_KVX_S37_PCREL_LO10",
+  "BFD_RELOC_KVX_S37_PCREL_UP27",
+  "BFD_RELOC_KVX_S43_PCREL_LO10",
+  "BFD_RELOC_KVX_S43_PCREL_UP27",
+  "BFD_RELOC_KVX_S43_PCREL_EX6",
+  "BFD_RELOC_KVX_S64_PCREL_LO10",
+  "BFD_RELOC_KVX_S64_PCREL_UP27",
+  "BFD_RELOC_KVX_S64_PCREL_EX27",
+  "BFD_RELOC_KVX_64_PCREL",
+  "BFD_RELOC_KVX_S16",
+  "BFD_RELOC_KVX_S32_LO5",
+  "BFD_RELOC_KVX_S32_UP27",
+  "BFD_RELOC_KVX_S37_LO10",
+  "BFD_RELOC_KVX_S37_UP27",
+  "BFD_RELOC_KVX_S37_GOTOFF_LO10",
+  "BFD_RELOC_KVX_S37_GOTOFF_UP27",
+  "BFD_RELOC_KVX_S43_GOTOFF_LO10",
+  "BFD_RELOC_KVX_S43_GOTOFF_UP27",
+  "BFD_RELOC_KVX_S43_GOTOFF_EX6",
+  "BFD_RELOC_KVX_32_GOTOFF",
+  "BFD_RELOC_KVX_64_GOTOFF",
+  "BFD_RELOC_KVX_32_GOT",
+  "BFD_RELOC_KVX_S37_GOT_LO10",
+  "BFD_RELOC_KVX_S37_GOT_UP27",
+  "BFD_RELOC_KVX_S43_GOT_LO10",
+  "BFD_RELOC_KVX_S43_GOT_UP27",
+  "BFD_RELOC_KVX_S43_GOT_EX6",
+  "BFD_RELOC_KVX_64_GOT",
+  "BFD_RELOC_KVX_GLOB_DAT",
+  "BFD_RELOC_KVX_COPY",
+  "BFD_RELOC_KVX_JMP_SLOT",
+  "BFD_RELOC_KVX_RELATIVE",
+  "BFD_RELOC_KVX_S43_LO10",
+  "BFD_RELOC_KVX_S43_UP27",
+  "BFD_RELOC_KVX_S43_EX6",
+  "BFD_RELOC_KVX_S64_LO10",
+  "BFD_RELOC_KVX_S64_UP27",
+  "BFD_RELOC_KVX_S64_EX27",
+  "BFD_RELOC_KVX_S37_GOTADDR_LO10",
+  "BFD_RELOC_KVX_S37_GOTADDR_UP27",
+  "BFD_RELOC_KVX_S43_GOTADDR_LO10",
+  "BFD_RELOC_KVX_S43_GOTADDR_UP27",
+  "BFD_RELOC_KVX_S43_GOTADDR_EX6",
+  "BFD_RELOC_KVX_S64_GOTADDR_LO10",
+  "BFD_RELOC_KVX_S64_GOTADDR_UP27",
+  "BFD_RELOC_KVX_S64_GOTADDR_EX27",
+  "BFD_RELOC_KVX_64_DTPMOD",
+  "BFD_RELOC_KVX_64_DTPOFF",
+  "BFD_RELOC_KVX_S37_TLS_DTPOFF_LO10",
+  "BFD_RELOC_KVX_S37_TLS_DTPOFF_UP27",
+  "BFD_RELOC_KVX_S43_TLS_DTPOFF_LO10",
+  "BFD_RELOC_KVX_S43_TLS_DTPOFF_UP27",
+  "BFD_RELOC_KVX_S43_TLS_DTPOFF_EX6",
+  "BFD_RELOC_KVX_S37_TLS_GD_LO10",
+  "BFD_RELOC_KVX_S37_TLS_GD_UP27",
+  "BFD_RELOC_KVX_S43_TLS_GD_LO10",
+  "BFD_RELOC_KVX_S43_TLS_GD_UP27",
+  "BFD_RELOC_KVX_S43_TLS_GD_EX6",
+  "BFD_RELOC_KVX_S37_TLS_LD_LO10",
+  "BFD_RELOC_KVX_S37_TLS_LD_UP27",
+  "BFD_RELOC_KVX_S43_TLS_LD_LO10",
+  "BFD_RELOC_KVX_S43_TLS_LD_UP27",
+  "BFD_RELOC_KVX_S43_TLS_LD_EX6",
+  "BFD_RELOC_KVX_64_TPOFF",
+  "BFD_RELOC_KVX_S37_TLS_IE_LO10",
+  "BFD_RELOC_KVX_S37_TLS_IE_UP27",
+  "BFD_RELOC_KVX_S43_TLS_IE_LO10",
+  "BFD_RELOC_KVX_S43_TLS_IE_UP27",
+  "BFD_RELOC_KVX_S43_TLS_IE_EX6",
+  "BFD_RELOC_KVX_S37_TLS_LE_LO10",
+  "BFD_RELOC_KVX_S37_TLS_LE_UP27",
+  "BFD_RELOC_KVX_S43_TLS_LE_LO10",
+  "BFD_RELOC_KVX_S43_TLS_LE_UP27",
+  "BFD_RELOC_KVX_S43_TLS_LE_EX6",
+  "BFD_RELOC_KVX_8",
+  "BFD_RELOC_KVX_RELOC_END",
   "BFD_RELOC_AARCH64_RELOC_START",
   "BFD_RELOC_AARCH64_NULL",
   "BFD_RELOC_AARCH64_NONE",
@@ -3234,10 +3420,9 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD",
   "BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD",
   "BFD_RELOC_BPF_64",
-  "BFD_RELOC_BPF_32",
-  "BFD_RELOC_BPF_16",
-  "BFD_RELOC_BPF_DISP16",
   "BFD_RELOC_BPF_DISP32",
+  "BFD_RELOC_BPF_DISPCALL32",
+  "BFD_RELOC_BPF_DISP16",
   "BFD_RELOC_EPIPHANY_SIMM8",
   "BFD_RELOC_EPIPHANY_SIMM24",
   "BFD_RELOC_EPIPHANY_HIGH",
@@ -3328,62 +3513,182 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_CKCORE_PCREL_BLOOP_IMM4BY4",
   "BFD_RELOC_CKCORE_PCREL_BLOOP_IMM12BY4",
   "BFD_RELOC_S12Z_OPR",
+  "BFD_RELOC_LARCH_TLS_DTPMOD32",
+  "BFD_RELOC_LARCH_TLS_DTPREL32",
+  "BFD_RELOC_LARCH_TLS_DTPMOD64",
+  "BFD_RELOC_LARCH_TLS_DTPREL64",
+  "BFD_RELOC_LARCH_TLS_TPREL32",
+  "BFD_RELOC_LARCH_TLS_TPREL64",
+  "BFD_RELOC_LARCH_TLS_DESC32",
+  "BFD_RELOC_LARCH_TLS_DESC64",
+  "BFD_RELOC_LARCH_MARK_LA",
+  "BFD_RELOC_LARCH_MARK_PCREL",
+  "BFD_RELOC_LARCH_SOP_PUSH_PCREL",
+  "BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE",
+  "BFD_RELOC_LARCH_SOP_PUSH_DUP",
+  "BFD_RELOC_LARCH_SOP_PUSH_GPREL",
+  "BFD_RELOC_LARCH_SOP_PUSH_TLS_TPREL",
+  "BFD_RELOC_LARCH_SOP_PUSH_TLS_GOT",
+  "BFD_RELOC_LARCH_SOP_PUSH_TLS_GD",
+  "BFD_RELOC_LARCH_SOP_PUSH_PLT_PCREL",
+  "BFD_RELOC_LARCH_SOP_ASSERT",
+  "BFD_RELOC_LARCH_SOP_NOT",
+  "BFD_RELOC_LARCH_SOP_SUB",
+  "BFD_RELOC_LARCH_SOP_SL",
+  "BFD_RELOC_LARCH_SOP_SR",
+  "BFD_RELOC_LARCH_SOP_ADD",
+  "BFD_RELOC_LARCH_SOP_AND",
+  "BFD_RELOC_LARCH_SOP_IF_ELSE",
+  "BFD_RELOC_LARCH_SOP_POP_32_S_10_5",
+  "BFD_RELOC_LARCH_SOP_POP_32_U_10_12",
+  "BFD_RELOC_LARCH_SOP_POP_32_S_10_12",
+  "BFD_RELOC_LARCH_SOP_POP_32_S_10_16",
+  "BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2",
+  "BFD_RELOC_LARCH_SOP_POP_32_S_5_20",
+  "BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2",
+  "BFD_RELOC_LARCH_SOP_POP_32_S_0_10_10_16_S2",
+  "BFD_RELOC_LARCH_SOP_POP_32_U",
+  "BFD_RELOC_LARCH_ADD8",
+  "BFD_RELOC_LARCH_ADD16",
+  "BFD_RELOC_LARCH_ADD24",
+  "BFD_RELOC_LARCH_ADD32",
+  "BFD_RELOC_LARCH_ADD64",
+  "BFD_RELOC_LARCH_SUB8",
+  "BFD_RELOC_LARCH_SUB16",
+  "BFD_RELOC_LARCH_SUB24",
+  "BFD_RELOC_LARCH_SUB32",
+  "BFD_RELOC_LARCH_SUB64",
+  "BFD_RELOC_LARCH_B16",
+  "BFD_RELOC_LARCH_B21",
+  "BFD_RELOC_LARCH_B26",
+  "BFD_RELOC_LARCH_ABS_HI20",
+  "BFD_RELOC_LARCH_ABS_LO12",
+  "BFD_RELOC_LARCH_ABS64_LO20",
+  "BFD_RELOC_LARCH_ABS64_HI12",
+  "BFD_RELOC_LARCH_PCALA_HI20",
+  "BFD_RELOC_LARCH_PCALA_LO12",
+  "BFD_RELOC_LARCH_PCALA64_LO20",
+  "BFD_RELOC_LARCH_PCALA64_HI12",
+  "BFD_RELOC_LARCH_GOT_PC_HI20",
+  "BFD_RELOC_LARCH_GOT_PC_LO12",
+  "BFD_RELOC_LARCH_GOT64_PC_LO20",
+  "BFD_RELOC_LARCH_GOT64_PC_HI12",
+  "BFD_RELOC_LARCH_GOT_HI20",
+  "BFD_RELOC_LARCH_GOT_LO12",
+  "BFD_RELOC_LARCH_GOT64_LO20",
+  "BFD_RELOC_LARCH_GOT64_HI12",
+  "BFD_RELOC_LARCH_TLS_LE_HI20",
+  "BFD_RELOC_LARCH_TLS_LE_LO12",
+  "BFD_RELOC_LARCH_TLS_LE64_LO20",
+  "BFD_RELOC_LARCH_TLS_LE64_HI12",
+  "BFD_RELOC_LARCH_TLS_IE_PC_HI20",
+  "BFD_RELOC_LARCH_TLS_IE_PC_LO12",
+  "BFD_RELOC_LARCH_TLS_IE64_PC_LO20",
+  "BFD_RELOC_LARCH_TLS_IE64_PC_HI12",
+  "BFD_RELOC_LARCH_TLS_IE_HI20",
+  "BFD_RELOC_LARCH_TLS_IE_LO12",
+  "BFD_RELOC_LARCH_TLS_IE64_LO20",
+  "BFD_RELOC_LARCH_TLS_IE64_HI12",
+  "BFD_RELOC_LARCH_TLS_LD_PC_HI20",
+  "BFD_RELOC_LARCH_TLS_LD_HI20",
+  "BFD_RELOC_LARCH_TLS_GD_PC_HI20",
+  "BFD_RELOC_LARCH_TLS_GD_HI20",
+  "BFD_RELOC_LARCH_32_PCREL",
+  "BFD_RELOC_LARCH_RELAX",
+  "BFD_RELOC_LARCH_DELETE",
+  "BFD_RELOC_LARCH_ALIGN",
+  "BFD_RELOC_LARCH_PCREL20_S2",
+  "BFD_RELOC_LARCH_CFA",
+  "BFD_RELOC_LARCH_ADD6",
+  "BFD_RELOC_LARCH_SUB6",
+  "BFD_RELOC_LARCH_ADD_ULEB128",
+  "BFD_RELOC_LARCH_SUB_ULEB128",
+  "BFD_RELOC_LARCH_64_PCREL",
+  "BFD_RELOC_LARCH_CALL36",
+  "BFD_RELOC_LARCH_TLS_DESC_PC_HI20",
+  "BFD_RELOC_LARCH_TLS_DESC_PC_LO12",
+  "BFD_RELOC_LARCH_TLS_DESC64_PC_LO20",
+  "BFD_RELOC_LARCH_TLS_DESC64_PC_HI12",
+  "BFD_RELOC_LARCH_TLS_DESC_HI20",
+  "BFD_RELOC_LARCH_TLS_DESC_LO12",
+  "BFD_RELOC_LARCH_TLS_DESC64_LO20",
+  "BFD_RELOC_LARCH_TLS_DESC64_HI12",
+  "BFD_RELOC_LARCH_TLS_DESC_LD",
+  "BFD_RELOC_LARCH_TLS_DESC_CALL",
+  "BFD_RELOC_LARCH_TLS_LE_HI20_R",
+  "BFD_RELOC_LARCH_TLS_LE_ADD_R",
+  "BFD_RELOC_LARCH_TLS_LE_LO12_R",
+  "BFD_RELOC_LARCH_TLS_LD_PCREL20_S2",
+  "BFD_RELOC_LARCH_TLS_GD_PCREL20_S2",
+  "BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2",
  "@@overflow: BFD_RELOC_UNUSED@@",
 };
 #endif
 
 reloc_howto_type *bfd_default_reloc_type_lookup
-   (bfd *abfd, bfd_reloc_code_real_type  code);
+   (bfd *abfd, bfd_reloc_code_real_type  code) ATTRIBUTE_HIDDEN;
 
-bfd_boolean bfd_generic_relax_section
+bool bfd_generic_relax_section
    (bfd *abfd,
     asection *section,
     struct bfd_link_info *,
-    bfd_boolean *);
+    bool *) ATTRIBUTE_HIDDEN;
 
-bfd_boolean bfd_generic_gc_sections
-   (bfd *, struct bfd_link_info *);
+bool bfd_generic_gc_sections
+   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 
-bfd_boolean bfd_generic_lookup_section_flags
-   (struct bfd_link_info *, struct flag_info *, asection *);
+bool bfd_generic_lookup_section_flags
+   (struct bfd_link_info *, struct flag_info *, asection *) ATTRIBUTE_HIDDEN;
 
-bfd_boolean bfd_generic_merge_sections
-   (bfd *, struct bfd_link_info *);
+bool bfd_generic_merge_sections
+   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 
 bfd_byte *bfd_generic_get_relocated_section_contents
    (bfd *abfd,
     struct bfd_link_info *link_info,
     struct bfd_link_order *link_order,
     bfd_byte *data,
-    bfd_boolean relocatable,
-    asymbol **symbols);
+    bool relocatable,
+    asymbol **symbols) ATTRIBUTE_HIDDEN;
 
 void _bfd_generic_set_reloc
    (bfd *abfd,
     sec_ptr section,
     arelent **relptr,
-    unsigned int count);
+    unsigned int count) ATTRIBUTE_HIDDEN;
 
-bfd_boolean _bfd_unrecognized_reloc
+bool _bfd_unrecognized_reloc
    (bfd * abfd,
     sec_ptr section,
-    unsigned int r_type);
+    unsigned int r_type) ATTRIBUTE_HIDDEN;
 
-/* Extracted from archures.c.  */
-extern const bfd_arch_info_type bfd_default_arch_struct;
-const bfd_arch_info_type *bfd_default_compatible
-   (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
+/* Extracted from section.c.  */
+bool _bfd_section_size_insane (bfd *abfd, asection *sec) ATTRIBUTE_HIDDEN;
 
-bfd_boolean bfd_default_scan
-   (const struct bfd_arch_info *info, const char *string);
+/* Extracted from stabs.c.  */
+bool _bfd_link_section_stabs
+   (bfd *, struct stab_info *, asection *, asection *, void **,
+    bfd_size_type *) ATTRIBUTE_HIDDEN;
 
-void *bfd_arch_default_fill (bfd_size_type count,
-    bfd_boolean is_bigendian,
-    bfd_boolean code);
+bool _bfd_discard_section_stabs
+   (bfd *, asection *, void *, bool (*) (bfd_vma, void *), void *) ATTRIBUTE_HIDDEN;
 
-/* Extracted from linker.c.  */
-bfd_boolean _bfd_generic_verify_endian_match
-   (bfd *ibfd, struct bfd_link_info *info);
+bool _bfd_write_section_stabs
+   (bfd *, struct stab_info *, asection *, void **, bfd_byte *) ATTRIBUTE_HIDDEN;
+
+bool _bfd_write_stab_strings (bfd *, struct stab_info *) ATTRIBUTE_HIDDEN;
+
+bfd_vma _bfd_stab_section_offset (asection *, void *, bfd_vma) ATTRIBUTE_HIDDEN;
+
+/* Extracted from targets.c.  */
+/* Cached _bfd_check_format messages are put in this.  */
+struct per_xvec_message
+{
+  struct per_xvec_message *next;
+  char message[];
+};
+
+struct per_xvec_message **_bfd_per_xvec_warn (const bfd_target *, size_t) ATTRIBUTE_HIDDEN;
 
 #ifdef __cplusplus
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libbfd-in.h ./bfd/libbfd-in.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libbfd-in.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libbfd-in.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,7 +1,7 @@
 /* libbfd.h -- Declarations used by bfd library *implementation*.
    (This include file is not for users of the library.)
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Written by Cygnus Support.
 
@@ -39,10 +39,6 @@
 extern "C" {
 #endif
 
-/* If you want to read and write large blocks, you might want to do it
-   in quanta of this amount */
-#define DEFAULT_BUFFERSIZE 8192
-
 /* Set a tdata field.  Can't use the other macros for this, since they
    do casts, and casting to the left of assignment isn't portable.  */
 #define set_tdata(bfd, v) ((bfd)->tdata.any = (v))
@@ -72,10 +68,9 @@ extern unsigned int _bfd_section_id ATTR
 
 struct artdata
 {
-  file_ptr first_file_filepos;
+  ufile_ptr first_file_filepos;
   /* Speed up searching the armap */
   htab_t cache;
-  bfd *archive_head;		/* Only interesting in output routines.  */
   carsym *symdefs;		/* The symdef entries.  */
   symindex symdef_count;	/* How many there are.  */
   char *extended_names;		/* Clever intel extension.  */
@@ -110,18 +105,6 @@ struct areltdata
 
 extern void *bfd_malloc
   (bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_realloc
-  (void *, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_realloc_or_free
-  (void *, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_zmalloc
-  (bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_malloc2
-  (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_realloc2
-  (void *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_zmalloc2
-  (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 static inline char *
 bfd_strdup (const char *str)
@@ -132,34 +115,26 @@ bfd_strdup (const char *str)
     memcpy (buf, str, len);
   return buf;
 }
-/* These routines allocate and free things on the BFD's objalloc.  */
-
-extern void *bfd_alloc2
-  (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void *bfd_zalloc2
-  (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern void bfd_release
-  (bfd *, void *) ATTRIBUTE_HIDDEN;
 
 extern bfd * _bfd_create_empty_archive_element_shell
   (bfd *) ATTRIBUTE_HIDDEN;
 extern bfd * _bfd_look_for_bfd_in_cache
   (bfd *, file_ptr) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_add_bfd_to_archive_cache
+extern bool _bfd_add_bfd_to_archive_cache
   (bfd *, file_ptr, bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_generic_mkarchive
+extern bool _bfd_generic_mkarchive
   (bfd *) ATTRIBUTE_HIDDEN;
 extern char *_bfd_append_relative_path
   (bfd *, char *) ATTRIBUTE_HIDDEN;
-extern const bfd_target *bfd_generic_archive_p
+extern bfd_cleanup bfd_generic_archive_p
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean bfd_slurp_armap
+extern bool bfd_slurp_armap
   (bfd *) ATTRIBUTE_HIDDEN;
 #define bfd_slurp_bsd_armap bfd_slurp_armap
 #define bfd_slurp_coff_armap bfd_slurp_armap
-extern bfd_boolean _bfd_archive_64_bit_slurp_armap
+extern bool _bfd_archive_64_bit_slurp_armap
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_archive_64_bit_write_armap
+extern bool _bfd_archive_64_bit_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int) ATTRIBUTE_HIDDEN;
 #define _bfd_archive_64_bit_slurp_extended_name_table \
   _bfd_slurp_extended_name_table
@@ -179,44 +154,40 @@ extern bfd_boolean _bfd_archive_64_bit_w
   bfd_generic_stat_arch_elt
 #define _bfd_archive_64_bit_update_armap_timestamp _bfd_bool_bfd_true
 
-extern bfd_boolean _bfd_slurp_extended_name_table
+extern bool _bfd_slurp_extended_name_table
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_construct_extended_name_table
-  (bfd *, bfd_boolean, char **, bfd_size_type *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_write_archive_contents
+extern bool _bfd_construct_extended_name_table
+  (bfd *, bool, char **, bfd_size_type *) ATTRIBUTE_HIDDEN;
+extern bool _bfd_write_archive_contents
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_compute_and_write_armap
+extern bool _bfd_compute_and_write_armap
   (bfd *, unsigned int) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_get_elt_at_filepos
-  (bfd *, file_ptr) ATTRIBUTE_HIDDEN;
+  (bfd *, file_ptr, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_generic_get_elt_at_index
   (bfd *, symindex) ATTRIBUTE_HIDDEN;
-extern bfd * _bfd_new_bfd
-  (void) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_free_cached_info
-  (bfd *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_bool_bfd_false
+extern bool _bfd_bool_bfd_false
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_asymbol_false
+extern bool _bfd_bool_bfd_asymbol_false
   (bfd *, asymbol *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_false_error
+extern bool _bfd_bool_bfd_false_error
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_link_false_error
+extern bool _bfd_bool_bfd_link_false_error
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_true
+extern bool _bfd_bool_bfd_true
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_link_true
+extern bool _bfd_bool_bfd_link_true
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_bfd_true
+extern bool _bfd_bool_bfd_bfd_true
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_uint_true
+extern bool _bfd_bool_bfd_uint_true
   (bfd *, unsigned int) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_asection_bfd_asection_true
+extern bool _bfd_bool_bfd_asection_bfd_asection_true
   (bfd *, asection *, bfd *, asection *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_asymbol_bfd_asymbol_true
+extern bool _bfd_bool_bfd_asymbol_bfd_asymbol_true
   (bfd *, asymbol *, bfd *, asymbol *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_bool_bfd_ptr_true
+extern bool _bfd_bool_bfd_ptr_true
   (bfd *, void *) ATTRIBUTE_HIDDEN;
 extern void *_bfd_ptr_bfd_null_error
   (bfd *) ATTRIBUTE_HIDDEN;
@@ -235,10 +206,9 @@ extern void _bfd_void_bfd_link
 extern void _bfd_void_bfd_asection
   (bfd *, asection *) ATTRIBUTE_HIDDEN;
 
-extern bfd *_bfd_new_bfd_contained_in
-  (bfd *) ATTRIBUTE_HIDDEN;
-extern const bfd_target *_bfd_dummy_target
+extern bfd_cleanup _bfd_dummy_target
   (bfd *) ATTRIBUTE_HIDDEN;
+#define _bfd_no_cleanup _bfd_void_bfd
 
 extern void bfd_dont_truncate_arname
   (bfd *, const char *, char *) ATTRIBUTE_HIDDEN;
@@ -247,26 +217,26 @@ extern void bfd_bsd_truncate_arname
 extern void bfd_gnu_truncate_arname
   (bfd *, const char *, char *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_bsd_write_armap
+extern bool _bfd_bsd_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_coff_write_armap
+extern bool _bfd_coff_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int) ATTRIBUTE_HIDDEN;
 
 extern void *_bfd_generic_read_ar_hdr
   (bfd *) ATTRIBUTE_HIDDEN;
 extern void _bfd_ar_spacepad
   (char *, size_t, const char *, long) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_ar_sizepad
+extern bool _bfd_ar_sizepad
   (char *, size_t, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 extern void *_bfd_generic_read_ar_hdr_mag
   (bfd *, const char *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_generic_write_ar_hdr
+extern bool _bfd_generic_write_ar_hdr
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_bsd44_write_ar_hdr
+extern bool _bfd_bsd44_write_ar_hdr
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
 
 extern bfd * bfd_generic_openr_next_archived_file
@@ -284,15 +254,15 @@ extern int bfd_generic_stat_arch_elt
    BFD_JUMP_TABLE_GENERIC (_bfd_generic).  */
 
 #define _bfd_generic_close_and_cleanup _bfd_archive_close_and_cleanup
-extern bfd_boolean _bfd_archive_close_and_cleanup
+extern bool _bfd_archive_close_and_cleanup
   (bfd *) ATTRIBUTE_HIDDEN;
 extern void _bfd_unlink_from_archive_parent (bfd *) ATTRIBUTE_HIDDEN;
-#define _bfd_generic_bfd_free_cached_info _bfd_bool_bfd_true
-extern bfd_boolean _bfd_generic_new_section_hook
+#define _bfd_generic_bfd_free_cached_info _bfd_free_cached_info
+extern bool _bfd_generic_new_section_hook
   (bfd *, asection *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_generic_get_section_contents
+extern bool _bfd_generic_get_section_contents
   (bfd *, asection *, void *, file_ptr, bfd_size_type) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_generic_get_section_contents_in_window
+extern bool _bfd_generic_get_section_contents_in_window
   (bfd *, asection *, bfd_window *, file_ptr, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 /* Generic routines to use for BFD_JUMP_TABLE_COPY.  Use
@@ -309,7 +279,7 @@ extern bfd_boolean _bfd_generic_get_sect
 #define _bfd_generic_bfd_copy_private_header_data _bfd_bool_bfd_bfd_true
 #define _bfd_generic_bfd_print_private_bfd_data _bfd_bool_bfd_ptr_true
 
-extern bfd_boolean _bfd_generic_init_private_section_data
+extern bool _bfd_generic_init_private_section_data
   (bfd *, asection *, bfd *, asection *, struct bfd_link_info *)
   ATTRIBUTE_HIDDEN;
 
@@ -320,7 +290,7 @@ extern char *_bfd_nocore_core_file_faili
   (bfd *) ATTRIBUTE_HIDDEN;
 extern int _bfd_nocore_core_file_failing_signal
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nocore_core_file_matches_executable_p
+extern bool _bfd_nocore_core_file_matches_executable_p
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
 extern int _bfd_nocore_core_file_pid
   (bfd *) ATTRIBUTE_HIDDEN;
@@ -330,14 +300,14 @@ extern int _bfd_nocore_core_file_pid
 
 #define _bfd_noarchive_slurp_armap _bfd_bool_bfd_false_error
 #define _bfd_noarchive_slurp_extended_name_table _bfd_bool_bfd_false_error
-extern bfd_boolean _bfd_noarchive_construct_extended_name_table
+extern bool _bfd_noarchive_construct_extended_name_table
   (bfd *, char **, bfd_size_type *, const char **) ATTRIBUTE_HIDDEN;
 extern void _bfd_noarchive_truncate_arname
   (bfd *, const char *, char *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_noarchive_write_armap
+extern bool _bfd_noarchive_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int) ATTRIBUTE_HIDDEN;
 #define _bfd_noarchive_read_ar_hdr _bfd_ptr_bfd_null_error
-extern bfd_boolean _bfd_noarchive_write_ar_hdr
+extern bool _bfd_noarchive_write_ar_hdr
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
 extern bfd *
 _bfd_noarchive_openr_next_archived_file
@@ -353,7 +323,7 @@ extern bfd * _bfd_noarchive_get_elt_at_i
 #define _bfd_archive_bsd_slurp_armap bfd_slurp_bsd_armap
 #define _bfd_archive_bsd_slurp_extended_name_table \
   _bfd_slurp_extended_name_table
-extern bfd_boolean _bfd_archive_bsd_construct_extended_name_table
+extern bool _bfd_archive_bsd_construct_extended_name_table
   (bfd *, char **, bfd_size_type *, const char **) ATTRIBUTE_HIDDEN;
 #define _bfd_archive_bsd_truncate_arname bfd_bsd_truncate_arname
 #define _bfd_archive_bsd_write_armap _bfd_bsd_write_armap
@@ -364,7 +334,7 @@ extern bfd_boolean _bfd_archive_bsd_cons
 #define _bfd_archive_bsd_get_elt_at_index _bfd_generic_get_elt_at_index
 #define _bfd_archive_bsd_generic_stat_arch_elt \
   bfd_generic_stat_arch_elt
-extern bfd_boolean _bfd_archive_bsd_update_armap_timestamp
+extern bool _bfd_archive_bsd_update_armap_timestamp
   (bfd *) ATTRIBUTE_HIDDEN;
 
 /* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get COFF style
@@ -373,7 +343,7 @@ extern bfd_boolean _bfd_archive_bsd_upda
 #define _bfd_archive_coff_slurp_armap bfd_slurp_coff_armap
 #define _bfd_archive_coff_slurp_extended_name_table \
   _bfd_slurp_extended_name_table
-extern bfd_boolean _bfd_archive_coff_construct_extended_name_table
+extern bool _bfd_archive_coff_construct_extended_name_table
   (bfd *, char **, bfd_size_type *, const char **) ATTRIBUTE_HIDDEN;
 #define _bfd_archive_coff_truncate_arname bfd_dont_truncate_arname
 #define _bfd_archive_coff_write_armap _bfd_coff_write_armap
@@ -392,7 +362,7 @@ extern bfd_boolean _bfd_archive_coff_con
 #define _bfd_archive_bsd44_slurp_armap bfd_slurp_bsd_armap
 #define _bfd_archive_bsd44_slurp_extended_name_table \
   _bfd_slurp_extended_name_table
-extern bfd_boolean _bfd_archive_bsd44_construct_extended_name_table
+extern bool _bfd_archive_bsd44_construct_extended_name_table
   (bfd *, char **, bfd_size_type *, const char **) ATTRIBUTE_HIDDEN;
 #define _bfd_archive_bsd44_truncate_arname bfd_bsd_truncate_arname
 #define _bfd_archive_bsd44_write_armap _bfd_bsd_write_armap
@@ -410,7 +380,7 @@ extern bfd_boolean _bfd_archive_bsd44_co
    archives.  Use BFD_JUMP_TABLE_ARCHIVE (_bfd_vms_lib).  Some of them
    are irrelevant.  */
 
-extern bfd_boolean _bfd_vms_lib_write_archive_contents
+extern bool _bfd_vms_lib_write_archive_contents
   (bfd *) ATTRIBUTE_HIDDEN;
 #define _bfd_vms_lib_slurp_armap _bfd_noarchive_slurp_armap
 #define _bfd_vms_lib_slurp_extended_name_table \
@@ -435,13 +405,13 @@ extern symindex _bfd_vms_lib_find_symbol
   (bfd *, const char *) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_vms_lib_get_imagelib_file
   (bfd *) ATTRIBUTE_HIDDEN;
-extern const bfd_target *_bfd_vms_lib_alpha_archive_p
+extern bfd_cleanup _bfd_vms_lib_alpha_archive_p
   (bfd *) ATTRIBUTE_HIDDEN;
-extern const bfd_target *_bfd_vms_lib_ia64_archive_p
+extern bfd_cleanup _bfd_vms_lib_ia64_archive_p
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_vms_lib_alpha_mkarchive
+extern bool _bfd_vms_lib_alpha_mkarchive
   (bfd *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_vms_lib_ia64_mkarchive
+extern bool _bfd_vms_lib_ia64_mkarchive
   (bfd *) ATTRIBUTE_HIDDEN;
 
 /* Routines to use for BFD_JUMP_TABLE_SYMBOLS where there is no symbol
@@ -456,27 +426,31 @@ extern void _bfd_nosymbols_print_symbol
 extern void _bfd_nosymbols_get_symbol_info
   (bfd *, asymbol *, symbol_info *) ATTRIBUTE_HIDDEN;
 extern const char * _bfd_nosymbols_get_symbol_version_string
-  (bfd *, asymbol *, bfd_boolean *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nosymbols_bfd_is_local_label_name
+  (bfd *, asymbol *, bool, bool *) ATTRIBUTE_HIDDEN;
+extern bool _bfd_nosymbols_bfd_is_local_label_name
   (bfd *, const char *) ATTRIBUTE_HIDDEN;
 #define _bfd_nosymbols_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false
 extern alent *_bfd_nosymbols_get_lineno
   (bfd *, asymbol *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nosymbols_find_nearest_line
+extern bool _bfd_nosymbols_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *)
   ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nosymbols_find_line
+extern bool _bfd_nosymbols_find_nearest_line_with_alt
+  (bfd *, const char *, asymbol **, asection *, bfd_vma,
+   const char **, const char **, unsigned int *, unsigned int *)
+  ATTRIBUTE_HIDDEN;
+extern bool _bfd_nosymbols_find_line
   (bfd *, asymbol **, asymbol *, const char **, unsigned int *)
   ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nosymbols_find_inliner_info
+extern bool _bfd_nosymbols_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *) ATTRIBUTE_HIDDEN;
 extern asymbol *_bfd_nosymbols_bfd_make_debug_symbol
-  (bfd *, void *, unsigned long) ATTRIBUTE_HIDDEN;
+  (bfd *) ATTRIBUTE_HIDDEN;
 extern long _bfd_nosymbols_read_minisymbols
-  (bfd *, bfd_boolean, void **, unsigned int *) ATTRIBUTE_HIDDEN;
+  (bfd *, bool, void **, unsigned int *) ATTRIBUTE_HIDDEN;
 extern asymbol *_bfd_nosymbols_minisymbol_to_symbol
-  (bfd *, bfd_boolean, const void *, asymbol *) ATTRIBUTE_HIDDEN;
+  (bfd *, bool, const void *, asymbol *) ATTRIBUTE_HIDDEN;
 
 /* Routines to use for BFD_JUMP_TABLE_RELOCS when there is no reloc
    support.  Use BFD_JUMP_TABLE_RELOCS (_bfd_norelocs).  */
@@ -495,16 +469,16 @@ extern reloc_howto_type *_bfd_norelocs_b
 /* Routines to use for BFD_JUMP_TABLE_WRITE for targets which may not
    be written.  Use BFD_JUMP_TABLE_WRITE (_bfd_nowrite).  */
 
-extern bfd_boolean _bfd_nowrite_set_arch_mach
+extern bool _bfd_nowrite_set_arch_mach
   (bfd *, enum bfd_architecture, unsigned long) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nowrite_set_section_contents
+extern bool _bfd_nowrite_set_section_contents
   (bfd *, asection *, const void *, file_ptr, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 /* Generic routines to use for BFD_JUMP_TABLE_WRITE.  Use
    BFD_JUMP_TABLE_WRITE (_bfd_generic).  */
 
 #define _bfd_generic_set_arch_mach bfd_default_set_arch_mach
-extern bfd_boolean _bfd_generic_set_section_contents
+extern bool _bfd_generic_set_section_contents
   (bfd *, asection *, const void *, file_ptr, bfd_size_type) ATTRIBUTE_HIDDEN;
 
 /* Routines to use for BFD_JUMP_TABLE_LINK for targets which do not
@@ -514,18 +488,18 @@ extern int _bfd_nolink_sizeof_headers
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 extern bfd_byte *_bfd_nolink_bfd_get_relocated_section_contents
   (bfd *, struct bfd_link_info *, struct bfd_link_order *,
-   bfd_byte *, bfd_boolean, asymbol **) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nolink_bfd_relax_section
-  (bfd *, asection *, struct bfd_link_info *, bfd_boolean *) ATTRIBUTE_HIDDEN;
+   bfd_byte *, bool, asymbol **) ATTRIBUTE_HIDDEN;
+extern bool _bfd_nolink_bfd_relax_section
+  (bfd *, asection *, struct bfd_link_info *, bool *) ATTRIBUTE_HIDDEN;
 #define _bfd_nolink_bfd_gc_sections _bfd_bool_bfd_link_false_error
-extern bfd_boolean _bfd_nolink_bfd_lookup_section_flags
+extern bool _bfd_nolink_bfd_lookup_section_flags
   (struct bfd_link_info *, struct flag_info *, asection *) ATTRIBUTE_HIDDEN;
 #define _bfd_nolink_bfd_merge_sections _bfd_bool_bfd_link_false_error
-extern bfd_boolean _bfd_nolink_bfd_is_group_section
+extern bool _bfd_nolink_bfd_is_group_section
   (bfd *, const asection *) ATTRIBUTE_HIDDEN;
 extern const char *_bfd_nolink_bfd_group_name
   (bfd *, const asection *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nolink_bfd_discard_group
+extern bool _bfd_nolink_bfd_discard_group
   (bfd *, asection *) ATTRIBUTE_HIDDEN;
 extern struct bfd_link_hash_table *_bfd_nolink_bfd_link_hash_table_create
   (bfd *) ATTRIBUTE_HIDDEN;
@@ -536,11 +510,11 @@ extern void _bfd_nolink_bfd_copy_link_ha
   (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *)
   ATTRIBUTE_HIDDEN;
 #define _bfd_nolink_bfd_final_link _bfd_bool_bfd_link_false_error
-extern bfd_boolean _bfd_nolink_bfd_link_split_section
+extern bool _bfd_nolink_bfd_link_split_section
   (bfd *, struct bfd_section *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nolink_section_already_linked
+extern bool _bfd_nolink_section_already_linked
   (bfd *, asection *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_nolink_bfd_define_common_symbol
+extern bool _bfd_nolink_bfd_define_common_symbol
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *)
   ATTRIBUTE_HIDDEN;
 #define _bfd_nolink_bfd_link_hide_symbol \
@@ -565,25 +539,29 @@ extern long _bfd_nodynamic_canonicalize_
 
 /* Generic routine to determine of the given symbol is a local
    label.  */
-extern bfd_boolean bfd_generic_is_local_label_name
+extern bool bfd_generic_is_local_label_name
   (bfd *, const char *) ATTRIBUTE_HIDDEN;
 
 /* Generic minisymbol routines.  */
 extern long _bfd_generic_read_minisymbols
-  (bfd *, bfd_boolean, void **, unsigned int *) ATTRIBUTE_HIDDEN;
+  (bfd *, bool, void **, unsigned int *) ATTRIBUTE_HIDDEN;
 extern asymbol *_bfd_generic_minisymbol_to_symbol
-  (bfd *, bfd_boolean, const void *, asymbol *) ATTRIBUTE_HIDDEN;
+  (bfd *, bool, const void *, asymbol *) ATTRIBUTE_HIDDEN;
 
 /* Find the nearest line using .stab/.stabstr sections.  */
-extern bfd_boolean _bfd_stab_section_find_nearest_line
-  (bfd *, asymbol **, asection *, bfd_vma, bfd_boolean *,
+extern bool _bfd_stab_section_find_nearest_line
+  (bfd *, asymbol **, asection *, bfd_vma, bool *,
    const char **, const char **, unsigned int *, void **) ATTRIBUTE_HIDDEN;
 
 /* Find the nearest line using DWARF 1 debugging information.  */
-extern bfd_boolean _bfd_dwarf1_find_nearest_line
+extern bool _bfd_dwarf1_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *) ATTRIBUTE_HIDDEN;
 
+/* Clean up the data used to handle DWARF 1 debugging information. */
+extern void _bfd_dwarf1_cleanup_debug_info
+  (bfd *, void **) ATTRIBUTE_HIDDEN;
+
 struct dwarf_debug_section
 {
   const char * uncompressed_name;
@@ -601,24 +579,34 @@ extern int _bfd_dwarf2_find_nearest_line
    const char **, const char **, unsigned int *, unsigned int *,
    const struct dwarf_debug_section *, void **) ATTRIBUTE_HIDDEN;
 
+/* Find the nearest line using DWARF 2 debugging information, with
+   the option of specifying a .gnu_debugaltlink file.  */
+extern int _bfd_dwarf2_find_nearest_line_with_alt
+  (bfd *, const char *, asymbol **, asymbol *, asection *, bfd_vma,
+   const char **, const char **, unsigned int *, unsigned int *,
+   const struct dwarf_debug_section *, void **) ATTRIBUTE_HIDDEN;
+
 /* Find the bias between DWARF addresses and real addresses.  */
 extern bfd_signed_vma _bfd_dwarf2_find_symbol_bias
   (asymbol **, void **) ATTRIBUTE_HIDDEN;
 
 /* Find inliner info after calling bfd_find_nearest_line. */
-extern bfd_boolean _bfd_dwarf2_find_inliner_info
+extern bool _bfd_dwarf2_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *, void **)
   ATTRIBUTE_HIDDEN;
 
 /* Read DWARF 2 debugging information. */
-extern bfd_boolean _bfd_dwarf2_slurp_debug_info
+extern bool _bfd_dwarf2_slurp_debug_info
   (bfd *, bfd *, const struct dwarf_debug_section *, asymbol **, void **,
-   bfd_boolean) ATTRIBUTE_HIDDEN;
+   bool) ATTRIBUTE_HIDDEN;
 
 /* Clean up the data used to handle DWARF 2 debugging information. */
 extern void _bfd_dwarf2_cleanup_debug_info
   (bfd *, void **) ATTRIBUTE_HIDDEN;
 
+extern void _bfd_stab_cleanup
+  (bfd *, void **) ATTRIBUTE_HIDDEN;
+
 /* Create a new section entry.  */
 extern struct bfd_hash_entry *bfd_section_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *)
@@ -630,7 +618,7 @@ extern struct bfd_hash_entry *_bfd_link_
    const char *string) ATTRIBUTE_HIDDEN;
 
 /* Initialize a bfd_link_hash_table.  */
-extern bfd_boolean _bfd_link_hash_table_init
+extern bool _bfd_link_hash_table_init
   (struct bfd_link_hash_table *, bfd *,
    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
 			       struct bfd_hash_table *,
@@ -646,24 +634,24 @@ extern void _bfd_generic_link_hash_table
   (bfd *) ATTRIBUTE_HIDDEN;
 
 /* Generic add symbol routine.  */
-extern bfd_boolean _bfd_generic_link_add_symbols
+extern bool _bfd_generic_link_add_symbols
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 
 /* Generic archive add symbol routine.  */
-extern bfd_boolean _bfd_generic_link_add_archive_symbols
+extern bool _bfd_generic_link_add_archive_symbols
   (bfd *, struct bfd_link_info *,
-   bfd_boolean (*) (bfd *, struct bfd_link_info *,
+   bool (*) (bfd *, struct bfd_link_info *,
 		    struct bfd_link_hash_entry *, const char *,
-		    bfd_boolean *)) ATTRIBUTE_HIDDEN;
+		    bool *)) ATTRIBUTE_HIDDEN;
 
 /* Forward declaration to avoid prototype errors.  */
 typedef struct bfd_link_hash_entry _bfd_link_hash_entry;
 
 /* Generic routine to add a single symbol.  */
-extern bfd_boolean _bfd_generic_link_add_one_symbol
+extern bool _bfd_generic_link_add_one_symbol
   (struct bfd_link_info *, bfd *, const char *name, flagword,
-   asection *, bfd_vma, const char *, bfd_boolean copy,
-   bfd_boolean constructor, struct bfd_link_hash_entry **) ATTRIBUTE_HIDDEN;
+   asection *, bfd_vma, const char *, bool copy,
+   bool constructor, struct bfd_link_hash_entry **) ATTRIBUTE_HIDDEN;
 
 /* Generic routine to mark section as supplying symbols only.  */
 extern void _bfd_generic_link_just_syms
@@ -675,22 +663,22 @@ extern void _bfd_generic_copy_link_hash_
   ATTRIBUTE_HIDDEN;
 
 /* Generic link routine.  */
-extern bfd_boolean _bfd_generic_final_link
+extern bool _bfd_generic_final_link
   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_generic_link_split_section
+extern bool _bfd_generic_link_split_section
   (bfd *, struct bfd_section *) ATTRIBUTE_HIDDEN;
 
-extern bfd_boolean _bfd_generic_section_already_linked
+extern bool _bfd_generic_section_already_linked
   (bfd *, asection *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 
 /* Generic reloc_link_order processing routine.  */
-extern bfd_boolean _bfd_generic_reloc_link_order
+extern bool _bfd_generic_reloc_link_order
   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *)
   ATTRIBUTE_HIDDEN;
 
 /* Default link order processing routine.  */
-extern bfd_boolean _bfd_default_link_order
+extern bool _bfd_default_link_order
   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *)
   ATTRIBUTE_HIDDEN;
 
@@ -711,48 +699,20 @@ extern bfd_reloc_status_type _bfd_reloca
 extern bfd_reloc_status_type _bfd_clear_contents
   (reloc_howto_type *, bfd *, asection *, bfd_byte *, bfd_vma) ATTRIBUTE_HIDDEN;
 
-/* Link stabs in sections in the first pass.  */
-
-extern bfd_boolean _bfd_link_section_stabs
-  (bfd *, struct stab_info *, asection *, asection *, void **,
-   bfd_size_type *) ATTRIBUTE_HIDDEN;
-
-/* Eliminate stabs for discarded functions and symbols.  */
-extern bfd_boolean _bfd_discard_section_stabs
-  (bfd *, asection *, void *, bfd_boolean (*) (bfd_vma, void *), void *)
-  ATTRIBUTE_HIDDEN;
-
-/* Write out the .stab section when linking stabs in sections.  */
-
-extern bfd_boolean _bfd_write_section_stabs
-  (bfd *, struct stab_info *, asection *, void **, bfd_byte *)
-  ATTRIBUTE_HIDDEN;
-
-/* Write out the .stabstr string table when linking stabs in sections.  */
-
-extern bfd_boolean _bfd_write_stab_strings
-  (bfd *, struct stab_info *) ATTRIBUTE_HIDDEN;
-
-/* Find an offset within a .stab section when linking stabs in
-   sections.  */
-
-extern bfd_vma _bfd_stab_section_offset
-  (asection *, void *, bfd_vma) ATTRIBUTE_HIDDEN;
-
 /* Register a SEC_MERGE section as a candidate for merging.  */
 
-extern bfd_boolean _bfd_add_merge_section
+extern bool _bfd_add_merge_section
   (bfd *, void **, asection *, void **) ATTRIBUTE_HIDDEN;
 
 /* Attempt to merge SEC_MERGE sections.  */
 
-extern bfd_boolean _bfd_merge_sections
+extern bool _bfd_merge_sections
   (bfd *, struct bfd_link_info *, void *, void (*) (bfd *, asection *))
   ATTRIBUTE_HIDDEN;
 
 /* Write out a merged section.  */
 
-extern bfd_boolean _bfd_write_merged_section
+extern bool _bfd_write_merged_section
   (bfd *, asection *, void *) ATTRIBUTE_HIDDEN;
 
 /* Find an offset within a modified SEC_MERGE section.  */
@@ -764,31 +724,6 @@ extern bfd_vma _bfd_merged_section_offse
 
 extern void _bfd_merge_sections_free (void *) ATTRIBUTE_HIDDEN;
 
-/* Create a string table.  */
-extern struct bfd_strtab_hash *_bfd_stringtab_init
-  (void) ATTRIBUTE_HIDDEN;
-
-/* Create an XCOFF .debug section style string table.  */
-extern struct bfd_strtab_hash *_bfd_xcoff_stringtab_init
-  (void) ATTRIBUTE_HIDDEN;
-
-/* Free a string table.  */
-extern void _bfd_stringtab_free
-  (struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
-
-/* Get the size of a string table.  */
-extern bfd_size_type _bfd_stringtab_size
-  (struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
-
-/* Add a string to a string table.  */
-extern bfd_size_type _bfd_stringtab_add
-  (struct bfd_strtab_hash *, const char *, bfd_boolean hash, bfd_boolean copy)
-  ATTRIBUTE_HIDDEN;
-
-/* Write out a string table.  */
-extern bfd_boolean _bfd_stringtab_emit
-  (bfd *, struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
-
 /* Macros to tell if bfds are read or write enabled.
 
    Note that bfds open for read may be scribbled into if the fd passed
@@ -834,28 +769,31 @@ extern FILE *_bfd_real_fopen
 
 /* List of supported target vectors, and the default vector (if
    bfd_default_vector[0] is NULL, there is no default).  */
-extern const bfd_target * const *bfd_target_vector ATTRIBUTE_HIDDEN;
+extern const bfd_target *const *const bfd_target_vector ATTRIBUTE_HIDDEN;
 extern const bfd_target *bfd_default_vector[] ATTRIBUTE_HIDDEN;
 
 /* List of associated target vectors.  */
-extern const bfd_target * const *bfd_associated_vector ATTRIBUTE_HIDDEN;
+extern const bfd_target *const *const bfd_associated_vector ATTRIBUTE_HIDDEN;
 
 /* Functions shared by the ECOFF and MIPS ELF backends, which have no
    other common header files.  */
 
-#if defined(__STDC__) || defined(ALMOST_STDC)
+struct ecoff_debug_info;
+struct ecoff_debug_swap;
+struct ecoff_extr;
 struct ecoff_find_line;
-#endif
 
-extern bfd_boolean _bfd_ecoff_locate_line
+extern void _bfd_ecoff_free_ecoff_debug_info
+  (struct ecoff_debug_info *debug);
+extern bool _bfd_ecoff_locate_line
   (bfd *, asection *, bfd_vma, struct ecoff_debug_info * const,
    const struct ecoff_debug_swap * const, struct ecoff_find_line *,
    const char **, const char **, unsigned int *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_ecoff_get_accumulated_pdr
+extern bool _bfd_ecoff_get_accumulated_pdr
   (void *, bfd_byte *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_ecoff_get_accumulated_sym
+extern bool _bfd_ecoff_get_accumulated_sym
   (void *, bfd_byte *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_ecoff_get_accumulated_ss
+extern bool _bfd_ecoff_get_accumulated_ss
   (void *, bfd_byte *) ATTRIBUTE_HIDDEN;
 
 extern bfd_vma _bfd_get_gp_value
@@ -867,10 +805,10 @@ extern void _bfd_set_gp_value
    other common header files.  */
 
 #ifndef _bfd_sh_align_load_span
-extern bfd_boolean _bfd_sh_align_load_span
+extern bool _bfd_sh_align_load_span
   (bfd *, asection *, bfd_byte *,
-   bfd_boolean (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
-   void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bfd_boolean *) ATTRIBUTE_HIDDEN;
+   bool (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
+   void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bool *) ATTRIBUTE_HIDDEN;
 #endif
 
 /* This is the shape of the elements inside the already_linked hash
@@ -891,11 +829,11 @@ struct bfd_section_already_linked
 
 extern struct bfd_section_already_linked_hash_entry *
   bfd_section_already_linked_table_lookup (const char *) ATTRIBUTE_HIDDEN;
-extern bfd_boolean bfd_section_already_linked_table_insert
+extern bool bfd_section_already_linked_table_insert
   (struct bfd_section_already_linked_hash_entry *, asection *)
   ATTRIBUTE_HIDDEN;
 extern void bfd_section_already_linked_table_traverse
-  (bfd_boolean (*) (struct bfd_section_already_linked_hash_entry *,
+  (bool (*) (struct bfd_section_already_linked_hash_entry *,
 		    void *), void *) ATTRIBUTE_HIDDEN;
 
 extern bfd_vma _bfd_read_unsigned_leb128
@@ -903,5 +841,71 @@ extern bfd_vma _bfd_read_unsigned_leb128
 extern bfd_signed_vma _bfd_read_signed_leb128
   (bfd *, bfd_byte *, unsigned int *) ATTRIBUTE_HIDDEN;
 extern bfd_vma _bfd_safe_read_leb128
-  (bfd *, bfd_byte *, unsigned int *, bfd_boolean, const bfd_byte * const)
+  (bfd *, bfd_byte **, bool, const bfd_byte * const) ATTRIBUTE_HIDDEN;
+extern bfd_byte * _bfd_write_unsigned_leb128
+  (bfd_byte *, bfd_byte *, bfd_vma) ATTRIBUTE_HIDDEN;
+
+extern struct bfd_link_info *_bfd_get_link_info (bfd *);
+
+extern bool _bfd_link_keep_memory (struct bfd_link_info *)
   ATTRIBUTE_HIDDEN;
+
+#if GCC_VERSION >= 7000
+#define _bfd_mul_overflow(a, b, res) __builtin_mul_overflow (a, b, res)
+#else
+/* Assumes unsigned values.  Careful!  Args evaluated multiple times.  */
+#define _bfd_mul_overflow(a, b, res) \
+  ((*res) = (a), (*res) *= (b), (b) != 0 && (*res) / (b) != (a))
+#endif
+
+#ifdef __GNUC__
+#define _bfd_constant_p(v) __builtin_constant_p (v)
+#else
+#define _bfd_constant_p(v) 0
+#endif
+
+static inline void *
+_bfd_alloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize)
+{
+  void *mem;
+  if (!_bfd_constant_p (rsize))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && rsize > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return NULL;
+	}
+    }
+  mem = bfd_alloc (abfd, asize);
+  if (mem != NULL)
+    {
+      if (bfd_read (mem, rsize, abfd) == rsize)
+	return mem;
+      bfd_release (abfd, mem);
+    }
+  return NULL;
+}
+
+static inline void *
+_bfd_malloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize)
+{
+  void *mem;
+  if (!_bfd_constant_p (rsize))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && rsize > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return NULL;
+	}
+    }
+  mem = bfd_malloc (asize);
+  if (mem != NULL)
+    {
+      if (bfd_read (mem, rsize, abfd) == rsize)
+	return mem;
+      free (mem);
+    }
+  return NULL;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libcoff.h ./bfd/libcoff.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libcoff.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libcoff.h	2024-02-01 01:47:14.000000000 +0000
@@ -3,7 +3,7 @@
    Run "make headers" in your build bfd/ to regenerate.  */
 
 /* BFD COFF object file private structure.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -28,6 +28,7 @@
 
 #include "bfdlink.h"
 #include "coff-bfd.h"
+#include "hashtab.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -37,8 +38,9 @@ extern "C" {
 
 #define coff_data(bfd)		      ((bfd)->tdata.coff_obj_data)
 #define obj_pe(bfd)		      (coff_data (bfd)->pe)
+#define obj_go32(bfd)		      (coff_data (bfd)->go32)
 #define obj_symbols(bfd)	      (coff_data (bfd)->symbols)
-#define	obj_sym_filepos(bfd)	      (coff_data (bfd)->sym_filepos)
+#define obj_sym_filepos(bfd)	      (coff_data (bfd)->sym_filepos)
 #define obj_relocbase(bfd)	      (coff_data (bfd)->relocbase)
 #define obj_raw_syments(bfd)	      (coff_data (bfd)->raw_syments)
 #define obj_raw_syment_count(bfd)     (coff_data (bfd)->raw_syment_count)
@@ -82,21 +84,34 @@ typedef struct coff_tdata
   /* The unswapped external symbols.  May be NULL.  Read by
      _bfd_coff_get_external_symbols.  */
   void * external_syms;
-  /* If this is TRUE, the external_syms may not be freed.  */
-  bfd_boolean keep_syms;
 
   /* The string table.  May be NULL.  Read by
      _bfd_coff_read_string_table.  */
   char *strings;
   /* The length of the strings table.  For error checking.  */
   bfd_size_type strings_len;
+
+  /* Set if long section names are supported.  A writable copy of the COFF
+     backend flag _bfd_coff_long_section_names.  */
+  bool long_section_names;
+
+  /* If this is TRUE, the external_syms may not be freed.  */
+  bool keep_syms;
   /* If this is TRUE, the strings may not be freed.  */
-  bfd_boolean keep_strings;
+  bool keep_strings;
   /* If this is TRUE, the strings have been written out already.  */
-  bfd_boolean strings_written;
+  bool strings_written;
+
+  /* Is this a GO32 coff file?  */
+  bool go32;
 
   /* Is this a PE format coff file?  */
-  int pe;
+  bool pe;
+
+  /* Copy of some of the f_flags bits in the COFF filehdr structure,
+     used by ARM code.  */
+  flagword flags;
+
   /* Used by the COFF backend linker.  */
   struct coff_link_hash_entry **sym_hashes;
 
@@ -114,13 +129,18 @@ typedef struct coff_tdata
   /* The timestamp from the COFF file header.  */
   long timestamp;
 
-  /* Copy of some of the f_flags bits in the COFF filehdr structure,
-     used by ARM code.  */
-  flagword flags;
+  /* A stub (extra data prepended before the COFF image) and its size.
+     Used by coff-go32-exe, it contains executable data that loads the
+     COFF object into memory.  */
+  char * stub;
+  bfd_size_type stub_size;
+
+  /* Hash table containing sections by target index.  */
+  htab_t section_by_target_index;
+
+  /* Hash table containing sections by index.  */
+  htab_t section_by_index;
 
-  /* coff-stgo32 EXE stub header after BFD tdata has been allocated.  Its data
-     is kept in internal_filehdr.go32stub beforehand.  */
-  char *go32stub;
 } coff_data_type;
 
 /* Tdata for pe image files.  */
@@ -131,22 +151,36 @@ typedef struct pe_tdata
   int dll;
   int has_reloc_section;
   int dont_strip_reloc;
-  int dos_message[16];
-  bfd_boolean insert_timestamp;
-  bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
+  char dos_message[64];
+  /* The timestamp to insert into the output file.
+     If the timestamp is -1 then the current time is used.  */
+  int timestamp;
+  bool (*in_reloc_p) (bfd *, reloc_howto_type *);
   flagword real_flags;
 
   /* Build-id info.  */
   struct
   {
-    bfd_boolean (*after_write_object_contents) (bfd *);
+    bool (*after_write_object_contents) (bfd *);
     const char *style;
     asection *sec;
   } build_id;
+
+  htab_t comdat_hash;
 } pe_data_type;
 
 #define pe_data(bfd)		((bfd)->tdata.pe_obj_data)
 
+struct comdat_hash_entry
+{
+  int target_index;
+  struct internal_syment isym;
+  char *symname;
+  flagword sec_flags;
+  char *comdat_name;
+  long comdat_symbol;
+};
+
 /* Tdata for XCOFF files.  */
 
 struct xcoff_tdata
@@ -155,10 +189,10 @@ struct xcoff_tdata
   coff_data_type coff;
 
   /* TRUE if this is an XCOFF64 file. */
-  bfd_boolean xcoff64;
+  bool xcoff64;
 
   /* TRUE if a large a.out header should be generated.  */
-  bfd_boolean full_aouthdr;
+  bool full_aouthdr;
 
   /* TOC value.  */
   bfd_vma toc;
@@ -239,8 +273,9 @@ struct coff_link_hash_entry
 {
   struct bfd_link_hash_entry root;
 
-  /* Symbol index in output file.  Set to -1 initially.  Set to -2 if
-     there is a reloc against this symbol.  */
+  /* Symbol index in output file.  This is initialized to -1.  It is
+     set to -2 if the symbol is used by a reloc.  It is set to -3 if
+     this symbol is defined in a discarded section.  */
   long indx;
 
   /* Symbol type.  */
@@ -271,6 +306,9 @@ struct coff_link_hash_table
   struct bfd_link_hash_table root;
   /* A pointer to information used to link stabs in sections.  */
   struct stab_info stab_info;
+  /* Hash table that maps undecorated names to their respective
+   * decorated coff_link_hash_entry as found in fixup_stdcalls  */
+  struct bfd_hash_table decoration_hash;
 };
 
 struct coff_reloc_cookie
@@ -295,15 +333,25 @@ struct coff_reloc_cookie
 #define coff_link_hash_traverse(table, func, info)			\
   (bfd_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func), \
+    (bool (*) (struct bfd_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the COFF linker hash table from a link_info structure.  */
 
 #define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash))
 
+struct decoration_hash_entry
+{
+  struct bfd_hash_entry root;
+  struct bfd_link_hash_entry *decorated_link;
+};
+
 /* Functions in coffgen.c.  */
-extern const bfd_target *coff_object_p
+extern void coff_object_cleanup
+  (bfd *);
+extern bfd_cleanup coff_real_object_p
+  (bfd *, unsigned, struct internal_filehdr *, struct internal_aouthdr *);
+extern bfd_cleanup coff_object_p
   (bfd *);
 extern struct bfd_section *coff_section_from_bfd_index
   (bfd *, int);
@@ -313,26 +361,26 @@ extern long coff_canonicalize_symtab
   (bfd *, asymbol **);
 extern int coff_count_linenumbers
   (bfd *);
-extern bfd_boolean coff_renumber_symbols
+extern bool coff_renumber_symbols
   (bfd *, int *);
 extern void coff_mangle_symbols
   (bfd *);
-extern bfd_boolean coff_write_symbols
+extern bool coff_write_symbols
   (bfd *);
-extern bfd_boolean coff_write_alien_symbol
-  (bfd *, asymbol *, struct internal_syment *, union internal_auxent *,
-   bfd_vma *, bfd_size_type *, asection **, bfd_size_type *);
-extern bfd_boolean coff_write_linenumbers
+extern bool coff_write_alien_symbol
+  (bfd *, asymbol *, struct internal_syment *, bfd_vma *,
+   struct bfd_strtab_hash *, bool, asection **, bfd_size_type *);
+extern bool coff_write_linenumbers
   (bfd *);
 extern alent *coff_get_lineno
   (bfd *, asymbol *);
 extern asymbol *coff_section_symbol
   (bfd *, char *);
-extern bfd_boolean _bfd_coff_get_external_symbols
+extern bool _bfd_coff_get_external_symbols
   (bfd *);
 extern const char *_bfd_coff_read_string_table
   (bfd *);
-extern bfd_boolean _bfd_coff_free_symbols
+extern bool _bfd_coff_free_symbols
   (bfd *);
 extern struct coff_ptr_struct *coff_get_normalized_symtab
   (bfd *);
@@ -346,31 +394,35 @@ extern void coff_get_symbol_info
   (bfd *, asymbol *, symbol_info *ret);
 #define coff_get_symbol_version_string \
   _bfd_nosymbols_get_symbol_version_string
-extern bfd_boolean _bfd_coff_is_local_label_name
+extern bool _bfd_coff_is_local_label_name
   (bfd *, const char *);
 extern asymbol *coff_bfd_make_debug_symbol
-  (bfd *, void *, unsigned long);
-extern bfd_boolean coff_find_nearest_line
+  (bfd *);
+extern bool coff_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *);
+#define coff_find_nearest_line_with_alt \
+  _bfd_nosymbols_find_nearest_line_with_alt
 #define coff_find_line _bfd_nosymbols_find_line
 struct dwarf_debug_section;
-extern bfd_boolean coff_find_nearest_line_with_names
+extern bool coff_find_nearest_line_with_names
   (bfd *, asymbol **, asection *, bfd_vma, const char **, const char **,
    unsigned int *, const struct dwarf_debug_section *);
-extern bfd_boolean coff_find_inliner_info
+extern bool coff_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *);
 extern int coff_sizeof_headers
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_coff_reloc16_relax_section
-  (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
+extern bool bfd_coff_reloc16_relax_section
+  (bfd *, asection *, struct bfd_link_info *, bool *);
 extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
   (bfd *, struct bfd_link_info *, struct bfd_link_order *,
-   bfd_byte *, bfd_boolean, asymbol **);
+   bfd_byte *, bool, asymbol **);
 extern bfd_vma bfd_coff_reloc16_get_value
   (arelent *, struct bfd_link_info *, asection *);
 extern void bfd_perform_slip
   (bfd *, unsigned int, asection *, bfd_vma);
+extern bool _bfd_coff_free_cached_info
+  (bfd *);
 
 /* Functions and types in cofflink.c.  */
 
@@ -469,11 +521,11 @@ struct coff_final_link_info
   /* Output BFD.  */
   bfd *output_bfd;
   /* Used to indicate failure in traversal routine.  */
-  bfd_boolean failed;
+  bool failed;
   /* If doing "task linking" set only during the time when we want the
      global symbol writer to convert the storage class of defined global
      symbols from global to static. */
-  bfd_boolean global_to_static;
+  bool global_to_static;
   /* Hash table for long symbol names.  */
   struct bfd_strtab_hash *strtab;
   /* When doing a relocatable link, an array of information kept for
@@ -545,9 +597,11 @@ struct coff_section_alignment_entry
   unsigned int alignment_power;
 };
 
+extern struct bfd_hash_entry *_decoration_hash_newfunc
+  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
 extern struct bfd_hash_entry *_bfd_coff_link_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-extern bfd_boolean _bfd_coff_link_hash_table_init
+extern bool _bfd_coff_link_hash_table_init
   (struct coff_link_hash_table *, bfd *,
    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
 			       struct bfd_hash_table *,
@@ -557,30 +611,30 @@ extern struct bfd_link_hash_table *_bfd_
   (bfd *);
 extern const char *_bfd_coff_internal_syment_name
   (bfd *, const struct internal_syment *, char *);
-extern bfd_boolean _bfd_coff_section_already_linked
+extern bool _bfd_coff_section_already_linked
   (bfd *, asection *, struct bfd_link_info *);
-extern bfd_boolean _bfd_coff_link_add_symbols
+extern bool _bfd_coff_link_add_symbols
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_coff_final_link
+extern bool _bfd_coff_final_link
   (bfd *, struct bfd_link_info *);
 extern struct internal_reloc *_bfd_coff_read_internal_relocs
-  (bfd *, asection *, bfd_boolean, bfd_byte *, bfd_boolean,
+  (bfd *, asection *, bool, bfd_byte *, bool,
    struct internal_reloc *);
-extern bfd_boolean _bfd_coff_generic_relocate_section
+extern bool _bfd_coff_generic_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    struct internal_reloc *, struct internal_syment *, asection **);
 extern struct bfd_hash_entry *_bfd_coff_debug_merge_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-extern bfd_boolean _bfd_coff_write_global_sym
+extern bool _bfd_coff_write_global_sym
   (struct bfd_hash_entry *, void *);
-extern bfd_boolean _bfd_coff_write_task_globals
+extern bool _bfd_coff_write_task_globals
   (struct coff_link_hash_entry *, void *);
-extern bfd_boolean _bfd_coff_link_input_bfd
+extern bool _bfd_coff_link_input_bfd
   (struct coff_final_link_info *, bfd *);
-extern bfd_boolean _bfd_coff_reloc_link_order
+extern bool _bfd_coff_reloc_link_order
   (bfd *, struct coff_final_link_info *, asection *,
    struct bfd_link_order *);
-extern bfd_boolean bfd_coff_gc_sections
+extern bool bfd_coff_gc_sections
   (bfd *, struct bfd_link_info *);
 extern const char *bfd_coff_group_name
   (bfd *, const asection *);
@@ -600,49 +654,43 @@ extern long _bfd_xcoff_canonicalize_dyna
   (bfd *, arelent **, asymbol **);
 extern struct bfd_link_hash_table *_bfd_xcoff_bfd_link_hash_table_create
   (bfd *);
-extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols
+extern bool _bfd_xcoff_bfd_link_add_symbols
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_xcoff_bfd_final_link
+extern bool _bfd_xcoff_bfd_final_link
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_xcoff_define_common_symbol
+extern bool _bfd_xcoff_define_common_symbol
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
-extern bfd_boolean _bfd_ppc_xcoff_relocate_section
+extern bool _bfd_ppc_xcoff_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    struct internal_reloc *, struct internal_syment *, asection **);
-
-/* Functions in coff-ppc.c.  FIXME: These are called by pe.em in the
-   linker, and so should start with bfd and be declared in bfd.h.  */
-
-extern bfd_boolean ppc_allocate_toc_section
-  (struct bfd_link_info *);
-extern bfd_boolean ppc_process_before_allocation
-  (bfd *, struct bfd_link_info *);
 /* Extracted from coffcode.h.  */
-
 typedef struct coff_ptr_struct
 {
   /* Remembers the offset from the first symbol in the file for
-     this symbol. Generated by coff_renumber_symbols.  */
+     this symbol.  Generated by coff_renumber_symbols.  */
   unsigned int offset;
 
-  /* Should the value of this symbol be renumbered.  Used for
-     XCOFF C_BSTAT symbols.  Set by coff_slurp_symbol_table.  */
-  unsigned int fix_value : 1;
+  /* Selects between the elements of the union below.  */
+  unsigned int is_sym : 1;
 
-  /* Should the tag field of this symbol be renumbered.
-     Created by coff_pointerize_aux.  */
+  /* Selects between the elements of the x_sym.x_tagndx union.  If set,
+     p is valid and the field will be renumbered.  */
   unsigned int fix_tag : 1;
 
-  /* Should the endidx field of this symbol be renumbered.
-     Created by coff_pointerize_aux.  */
+  /* Selects between the elements of the x_sym.x_fcnary.x_fcn.x_endndx
+     union.  If set, p is valid and the field will be renumbered.  */
   unsigned int fix_end : 1;
 
-  /* Should the x_csect.x_scnlen field be renumbered.
-     Created by coff_pointerize_aux.  */
+  /* Selects between the elements of the x_csect.x_scnlen union.  If set,
+     p is valid and the field will be renumbered.  */
   unsigned int fix_scnlen : 1;
 
-  /* Fix up an XCOFF C_BINCL/C_EINCL symbol.  The value is the
-     index into the line number entries.  Set by coff_slurp_symbol_table.  */
+  /* If set, u.syment.n_value contains a pointer to a symbol.  The final
+     value will be the offset field.  Used for XCOFF C_BSTAT symbols.  */
+  unsigned int fix_value : 1;
+
+  /* If set, u.syment.n_value is an index into the line number entries.
+     Used for XCOFF C_BINCL/C_EINCL symbols.  */
   unsigned int fix_line : 1;
 
   /* The container for the symbol structure as read and translated
@@ -653,11 +701,11 @@ typedef struct coff_ptr_struct
     struct internal_syment syment;
   } u;
 
- /* Selector for the union above.  */
- bfd_boolean is_sym;
+ /* An extra pointer which can used by format based on COFF (like XCOFF)
+    to provide extra information to their backend.  */
+ void *extrap;
 } combined_entry_type;
 
-
 /* Each canonical asymbol really looks like this: */
 
 typedef struct coff_symbol_struct
@@ -672,8 +720,9 @@ typedef struct coff_symbol_struct
   struct lineno_cache_entry *lineno;
 
   /* Have the line numbers been relocated yet ? */
-  bfd_boolean done_lineno;
+  bool done_lineno;
 } coff_symbol_type;
+
 /* COFF symbol classifications.  */
 
 enum coff_symbol_classification
@@ -734,14 +783,14 @@ typedef struct
   unsigned int _bfd_relsz;
   unsigned int _bfd_linesz;
   unsigned int _bfd_filnmlen;
-  bfd_boolean _bfd_coff_long_filenames;
+  bool _bfd_coff_long_filenames;
 
-  bfd_boolean _bfd_coff_long_section_names;
-  bfd_boolean (*_bfd_coff_set_long_section_names)
+  bool _bfd_coff_long_section_names;
+  bool (*_bfd_coff_set_long_section_names)
     (bfd *, int);
 
   unsigned int _bfd_coff_default_section_alignment_power;
-  bfd_boolean _bfd_coff_force_symnames_in_strings;
+  bool _bfd_coff_force_symnames_in_strings;
   unsigned int _bfd_coff_debug_string_prefix_length;
   unsigned int _bfd_coff_max_nscns;
 
@@ -757,38 +806,38 @@ typedef struct
   void (*_bfd_coff_swap_reloc_in)
     (bfd *abfd, void *, void *);
 
-  bfd_boolean (*_bfd_coff_bad_format_hook)
+  bool (*_bfd_coff_bad_format_hook)
     (bfd *, void *);
 
-  bfd_boolean (*_bfd_coff_set_arch_mach_hook)
+  bool (*_bfd_coff_set_arch_mach_hook)
     (bfd *, void *);
 
   void * (*_bfd_coff_mkobject_hook)
     (bfd *, void *, void *);
 
-  bfd_boolean (*_bfd_styp_to_sec_flags_hook)
+  bool (*_bfd_styp_to_sec_flags_hook)
     (bfd *, void *, const char *, asection *, flagword *);
 
   void (*_bfd_set_alignment_hook)
     (bfd *, asection *, void *);
 
-  bfd_boolean (*_bfd_coff_slurp_symbol_table)
+  bool (*_bfd_coff_slurp_symbol_table)
     (bfd *);
 
-  bfd_boolean (*_bfd_coff_symname_in_debug)
+  bool (*_bfd_coff_symname_in_debug)
     (bfd *, struct internal_syment *);
 
-  bfd_boolean (*_bfd_coff_pointerize_aux_hook)
+  bool (*_bfd_coff_pointerize_aux_hook)
     (bfd *, combined_entry_type *, combined_entry_type *,
      unsigned int, combined_entry_type *);
 
-  bfd_boolean (*_bfd_coff_print_aux)
+  bool (*_bfd_coff_print_aux)
     (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
      combined_entry_type *, unsigned int);
 
-  void (*_bfd_coff_reloc16_extra_cases)
+  bool (*_bfd_coff_reloc16_extra_cases)
     (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
-     bfd_byte *, unsigned int *, unsigned int *);
+     bfd_byte *, size_t *, size_t *);
 
   int (*_bfd_coff_reloc16_estimate)
     (bfd *, asection *, arelent *, unsigned int,
@@ -797,13 +846,13 @@ typedef struct
   enum coff_symbol_classification (*_bfd_coff_classify_symbol)
     (bfd *, struct internal_syment *);
 
-  bfd_boolean (*_bfd_coff_compute_section_file_positions)
+  bool (*_bfd_coff_compute_section_file_positions)
     (bfd *);
 
-  bfd_boolean (*_bfd_coff_start_final_link)
+  bool (*_bfd_coff_start_final_link)
     (bfd *, struct bfd_link_info *);
 
-  bfd_boolean (*_bfd_coff_relocate_section)
+  bool (*_bfd_coff_relocate_section)
     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
      struct internal_reloc *, struct internal_syment *, asection **);
 
@@ -811,28 +860,28 @@ typedef struct
     (bfd *, asection *, struct internal_reloc *,
      struct coff_link_hash_entry *, struct internal_syment *, bfd_vma *);
 
-  bfd_boolean (*_bfd_coff_adjust_symndx)
+  bool (*_bfd_coff_adjust_symndx)
     (bfd *, struct bfd_link_info *, bfd *, asection *,
-     struct internal_reloc *, bfd_boolean *);
+     struct internal_reloc *, bool *);
 
-  bfd_boolean (*_bfd_coff_link_add_one_symbol)
+  bool (*_bfd_coff_link_add_one_symbol)
     (struct bfd_link_info *, bfd *, const char *, flagword,
-     asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
+     asection *, bfd_vma, const char *, bool, bool,
      struct bfd_link_hash_entry **);
 
-  bfd_boolean (*_bfd_coff_link_output_has_begun)
+  bool (*_bfd_coff_link_output_has_begun)
     (bfd *, struct coff_final_link_info *);
 
-  bfd_boolean (*_bfd_coff_final_link_postscript)
+  bool (*_bfd_coff_final_link_postscript)
     (bfd *, struct coff_final_link_info *);
 
-  bfd_boolean (*_bfd_coff_print_pdata)
+  bool (*_bfd_coff_print_pdata)
     (bfd *, void *);
 
 } bfd_coff_backend_data;
 
 #define coff_backend_info(abfd) \
-  ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
+  ((const bfd_coff_backend_data *) (abfd)->xvec->backend_data)
 
 #define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
   ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
@@ -875,7 +924,7 @@ typedef struct
 #define bfd_coff_long_filenames(abfd) \
   (coff_backend_info (abfd)->_bfd_coff_long_filenames)
 #define bfd_coff_long_section_names(abfd) \
-  (coff_backend_info (abfd)->_bfd_coff_long_section_names)
+  (coff_data (abfd)->long_section_names)
 #define bfd_coff_set_long_section_names(abfd, enable) \
   ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
 #define bfd_coff_default_section_alignment_power(abfd) \
@@ -928,7 +977,7 @@ typedef struct
    (abfd, file, base, symbol, aux, indaux))
 
 #define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
-                                     reloc, data, src_ptr, dst_ptr)\
+				     reloc, data, src_ptr, dst_ptr)\
   ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
    (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
 
@@ -957,7 +1006,7 @@ typedef struct
   ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
    (obfd, info, ibfd, sec, rel, adjustedp))
 #define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
-                                     value, string, cp, coll, hashp)\
+				     value, string, cp, coll, hashp)\
   ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
    (info, abfd, name, flags, section, value, string, cp, coll, hashp))
 
@@ -974,7 +1023,7 @@ typedef struct
 /* Macro: Returns true if the bfd is a PE executable as opposed to a
    PE object file.  */
 #define bfd_pei_p(abfd) \
-  (CONST_STRNEQ ((abfd)->xvec->name, "pei-"))
+  (startswith ((abfd)->xvec->name, "pei-"))
 #ifdef __cplusplus
 }
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libcoff-in.h ./bfd/libcoff-in.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libcoff-in.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libcoff-in.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD COFF object file private structure.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -24,6 +24,7 @@
 
 #include "bfdlink.h"
 #include "coff-bfd.h"
+#include "hashtab.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -33,8 +34,9 @@ extern "C" {
 
 #define coff_data(bfd)		      ((bfd)->tdata.coff_obj_data)
 #define obj_pe(bfd)		      (coff_data (bfd)->pe)
+#define obj_go32(bfd)		      (coff_data (bfd)->go32)
 #define obj_symbols(bfd)	      (coff_data (bfd)->symbols)
-#define	obj_sym_filepos(bfd)	      (coff_data (bfd)->sym_filepos)
+#define obj_sym_filepos(bfd)	      (coff_data (bfd)->sym_filepos)
 #define obj_relocbase(bfd)	      (coff_data (bfd)->relocbase)
 #define obj_raw_syments(bfd)	      (coff_data (bfd)->raw_syments)
 #define obj_raw_syment_count(bfd)     (coff_data (bfd)->raw_syment_count)
@@ -78,21 +80,34 @@ typedef struct coff_tdata
   /* The unswapped external symbols.  May be NULL.  Read by
      _bfd_coff_get_external_symbols.  */
   void * external_syms;
-  /* If this is TRUE, the external_syms may not be freed.  */
-  bfd_boolean keep_syms;
 
   /* The string table.  May be NULL.  Read by
      _bfd_coff_read_string_table.  */
   char *strings;
   /* The length of the strings table.  For error checking.  */
   bfd_size_type strings_len;
+
+  /* Set if long section names are supported.  A writable copy of the COFF
+     backend flag _bfd_coff_long_section_names.  */
+  bool long_section_names;
+
+  /* If this is TRUE, the external_syms may not be freed.  */
+  bool keep_syms;
   /* If this is TRUE, the strings may not be freed.  */
-  bfd_boolean keep_strings;
+  bool keep_strings;
   /* If this is TRUE, the strings have been written out already.  */
-  bfd_boolean strings_written;
+  bool strings_written;
+
+  /* Is this a GO32 coff file?  */
+  bool go32;
 
   /* Is this a PE format coff file?  */
-  int pe;
+  bool pe;
+
+  /* Copy of some of the f_flags bits in the COFF filehdr structure,
+     used by ARM code.  */
+  flagword flags;
+
   /* Used by the COFF backend linker.  */
   struct coff_link_hash_entry **sym_hashes;
 
@@ -110,13 +125,18 @@ typedef struct coff_tdata
   /* The timestamp from the COFF file header.  */
   long timestamp;
 
-  /* Copy of some of the f_flags bits in the COFF filehdr structure,
-     used by ARM code.  */
-  flagword flags;
+  /* A stub (extra data prepended before the COFF image) and its size.
+     Used by coff-go32-exe, it contains executable data that loads the
+     COFF object into memory.  */
+  char * stub;
+  bfd_size_type stub_size;
+
+  /* Hash table containing sections by target index.  */
+  htab_t section_by_target_index;
+
+  /* Hash table containing sections by index.  */
+  htab_t section_by_index;
 
-  /* coff-stgo32 EXE stub header after BFD tdata has been allocated.  Its data
-     is kept in internal_filehdr.go32stub beforehand.  */
-  char *go32stub;
 } coff_data_type;
 
 /* Tdata for pe image files.  */
@@ -127,22 +147,36 @@ typedef struct pe_tdata
   int dll;
   int has_reloc_section;
   int dont_strip_reloc;
-  int dos_message[16];
-  bfd_boolean insert_timestamp;
-  bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
+  char dos_message[64];
+  /* The timestamp to insert into the output file.
+     If the timestamp is -1 then the current time is used.  */
+  int timestamp;
+  bool (*in_reloc_p) (bfd *, reloc_howto_type *);
   flagword real_flags;
 
   /* Build-id info.  */
   struct
   {
-    bfd_boolean (*after_write_object_contents) (bfd *);
+    bool (*after_write_object_contents) (bfd *);
     const char *style;
     asection *sec;
   } build_id;
+
+  htab_t comdat_hash;
 } pe_data_type;
 
 #define pe_data(bfd)		((bfd)->tdata.pe_obj_data)
 
+struct comdat_hash_entry
+{
+  int target_index;
+  struct internal_syment isym;
+  char *symname;
+  flagword sec_flags;
+  char *comdat_name;
+  long comdat_symbol;
+};
+
 /* Tdata for XCOFF files.  */
 
 struct xcoff_tdata
@@ -151,10 +185,10 @@ struct xcoff_tdata
   coff_data_type coff;
 
   /* TRUE if this is an XCOFF64 file. */
-  bfd_boolean xcoff64;
+  bool xcoff64;
 
   /* TRUE if a large a.out header should be generated.  */
-  bfd_boolean full_aouthdr;
+  bool full_aouthdr;
 
   /* TOC value.  */
   bfd_vma toc;
@@ -235,8 +269,9 @@ struct coff_link_hash_entry
 {
   struct bfd_link_hash_entry root;
 
-  /* Symbol index in output file.  Set to -1 initially.  Set to -2 if
-     there is a reloc against this symbol.  */
+  /* Symbol index in output file.  This is initialized to -1.  It is
+     set to -2 if the symbol is used by a reloc.  It is set to -3 if
+     this symbol is defined in a discarded section.  */
   long indx;
 
   /* Symbol type.  */
@@ -267,6 +302,9 @@ struct coff_link_hash_table
   struct bfd_link_hash_table root;
   /* A pointer to information used to link stabs in sections.  */
   struct stab_info stab_info;
+  /* Hash table that maps undecorated names to their respective
+   * decorated coff_link_hash_entry as found in fixup_stdcalls  */
+  struct bfd_hash_table decoration_hash;
 };
 
 struct coff_reloc_cookie
@@ -291,15 +329,25 @@ struct coff_reloc_cookie
 #define coff_link_hash_traverse(table, func, info)			\
   (bfd_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func), \
+    (bool (*) (struct bfd_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the COFF linker hash table from a link_info structure.  */
 
 #define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash))
 
+struct decoration_hash_entry
+{
+  struct bfd_hash_entry root;
+  struct bfd_link_hash_entry *decorated_link;
+};
+
 /* Functions in coffgen.c.  */
-extern const bfd_target *coff_object_p
+extern void coff_object_cleanup
+  (bfd *);
+extern bfd_cleanup coff_real_object_p
+  (bfd *, unsigned, struct internal_filehdr *, struct internal_aouthdr *);
+extern bfd_cleanup coff_object_p
   (bfd *);
 extern struct bfd_section *coff_section_from_bfd_index
   (bfd *, int);
@@ -309,26 +357,26 @@ extern long coff_canonicalize_symtab
   (bfd *, asymbol **);
 extern int coff_count_linenumbers
   (bfd *);
-extern bfd_boolean coff_renumber_symbols
+extern bool coff_renumber_symbols
   (bfd *, int *);
 extern void coff_mangle_symbols
   (bfd *);
-extern bfd_boolean coff_write_symbols
+extern bool coff_write_symbols
   (bfd *);
-extern bfd_boolean coff_write_alien_symbol
-  (bfd *, asymbol *, struct internal_syment *, union internal_auxent *,
-   bfd_vma *, bfd_size_type *, asection **, bfd_size_type *);
-extern bfd_boolean coff_write_linenumbers
+extern bool coff_write_alien_symbol
+  (bfd *, asymbol *, struct internal_syment *, bfd_vma *,
+   struct bfd_strtab_hash *, bool, asection **, bfd_size_type *);
+extern bool coff_write_linenumbers
   (bfd *);
 extern alent *coff_get_lineno
   (bfd *, asymbol *);
 extern asymbol *coff_section_symbol
   (bfd *, char *);
-extern bfd_boolean _bfd_coff_get_external_symbols
+extern bool _bfd_coff_get_external_symbols
   (bfd *);
 extern const char *_bfd_coff_read_string_table
   (bfd *);
-extern bfd_boolean _bfd_coff_free_symbols
+extern bool _bfd_coff_free_symbols
   (bfd *);
 extern struct coff_ptr_struct *coff_get_normalized_symtab
   (bfd *);
@@ -342,31 +390,35 @@ extern void coff_get_symbol_info
   (bfd *, asymbol *, symbol_info *ret);
 #define coff_get_symbol_version_string \
   _bfd_nosymbols_get_symbol_version_string
-extern bfd_boolean _bfd_coff_is_local_label_name
+extern bool _bfd_coff_is_local_label_name
   (bfd *, const char *);
 extern asymbol *coff_bfd_make_debug_symbol
-  (bfd *, void *, unsigned long);
-extern bfd_boolean coff_find_nearest_line
+  (bfd *);
+extern bool coff_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *);
+#define coff_find_nearest_line_with_alt \
+  _bfd_nosymbols_find_nearest_line_with_alt
 #define coff_find_line _bfd_nosymbols_find_line
 struct dwarf_debug_section;
-extern bfd_boolean coff_find_nearest_line_with_names
+extern bool coff_find_nearest_line_with_names
   (bfd *, asymbol **, asection *, bfd_vma, const char **, const char **,
    unsigned int *, const struct dwarf_debug_section *);
-extern bfd_boolean coff_find_inliner_info
+extern bool coff_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *);
 extern int coff_sizeof_headers
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_coff_reloc16_relax_section
-  (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
+extern bool bfd_coff_reloc16_relax_section
+  (bfd *, asection *, struct bfd_link_info *, bool *);
 extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
   (bfd *, struct bfd_link_info *, struct bfd_link_order *,
-   bfd_byte *, bfd_boolean, asymbol **);
+   bfd_byte *, bool, asymbol **);
 extern bfd_vma bfd_coff_reloc16_get_value
   (arelent *, struct bfd_link_info *, asection *);
 extern void bfd_perform_slip
   (bfd *, unsigned int, asection *, bfd_vma);
+extern bool _bfd_coff_free_cached_info
+  (bfd *);
 
 /* Functions and types in cofflink.c.  */
 
@@ -465,11 +517,11 @@ struct coff_final_link_info
   /* Output BFD.  */
   bfd *output_bfd;
   /* Used to indicate failure in traversal routine.  */
-  bfd_boolean failed;
+  bool failed;
   /* If doing "task linking" set only during the time when we want the
      global symbol writer to convert the storage class of defined global
      symbols from global to static. */
-  bfd_boolean global_to_static;
+  bool global_to_static;
   /* Hash table for long symbol names.  */
   struct bfd_strtab_hash *strtab;
   /* When doing a relocatable link, an array of information kept for
@@ -541,9 +593,11 @@ struct coff_section_alignment_entry
   unsigned int alignment_power;
 };
 
+extern struct bfd_hash_entry *_decoration_hash_newfunc
+  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
 extern struct bfd_hash_entry *_bfd_coff_link_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-extern bfd_boolean _bfd_coff_link_hash_table_init
+extern bool _bfd_coff_link_hash_table_init
   (struct coff_link_hash_table *, bfd *,
    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
 			       struct bfd_hash_table *,
@@ -553,30 +607,30 @@ extern struct bfd_link_hash_table *_bfd_
   (bfd *);
 extern const char *_bfd_coff_internal_syment_name
   (bfd *, const struct internal_syment *, char *);
-extern bfd_boolean _bfd_coff_section_already_linked
+extern bool _bfd_coff_section_already_linked
   (bfd *, asection *, struct bfd_link_info *);
-extern bfd_boolean _bfd_coff_link_add_symbols
+extern bool _bfd_coff_link_add_symbols
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_coff_final_link
+extern bool _bfd_coff_final_link
   (bfd *, struct bfd_link_info *);
 extern struct internal_reloc *_bfd_coff_read_internal_relocs
-  (bfd *, asection *, bfd_boolean, bfd_byte *, bfd_boolean,
+  (bfd *, asection *, bool, bfd_byte *, bool,
    struct internal_reloc *);
-extern bfd_boolean _bfd_coff_generic_relocate_section
+extern bool _bfd_coff_generic_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    struct internal_reloc *, struct internal_syment *, asection **);
 extern struct bfd_hash_entry *_bfd_coff_debug_merge_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-extern bfd_boolean _bfd_coff_write_global_sym
+extern bool _bfd_coff_write_global_sym
   (struct bfd_hash_entry *, void *);
-extern bfd_boolean _bfd_coff_write_task_globals
+extern bool _bfd_coff_write_task_globals
   (struct coff_link_hash_entry *, void *);
-extern bfd_boolean _bfd_coff_link_input_bfd
+extern bool _bfd_coff_link_input_bfd
   (struct coff_final_link_info *, bfd *);
-extern bfd_boolean _bfd_coff_reloc_link_order
+extern bool _bfd_coff_reloc_link_order
   (bfd *, struct coff_final_link_info *, asection *,
    struct bfd_link_order *);
-extern bfd_boolean bfd_coff_gc_sections
+extern bool bfd_coff_gc_sections
   (bfd *, struct bfd_link_info *);
 extern const char *bfd_coff_group_name
   (bfd *, const asection *);
@@ -596,20 +650,12 @@ extern long _bfd_xcoff_canonicalize_dyna
   (bfd *, arelent **, asymbol **);
 extern struct bfd_link_hash_table *_bfd_xcoff_bfd_link_hash_table_create
   (bfd *);
-extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols
+extern bool _bfd_xcoff_bfd_link_add_symbols
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_xcoff_bfd_final_link
+extern bool _bfd_xcoff_bfd_final_link
   (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_xcoff_define_common_symbol
+extern bool _bfd_xcoff_define_common_symbol
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
-extern bfd_boolean _bfd_ppc_xcoff_relocate_section
+extern bool _bfd_ppc_xcoff_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    struct internal_reloc *, struct internal_syment *, asection **);
-
-/* Functions in coff-ppc.c.  FIXME: These are called by pe.em in the
-   linker, and so should start with bfd and be declared in bfd.h.  */
-
-extern bfd_boolean ppc_allocate_toc_section
-  (struct bfd_link_info *);
-extern bfd_boolean ppc_process_before_allocation
-  (bfd *, struct bfd_link_info *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libecoff.h ./bfd/libecoff.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libecoff.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libecoff.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD ECOFF object file private structure.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -47,7 +47,7 @@ struct ecoff_backend_data
   /* TRUE if the .rdata section is part of the text segment, as on the
      Alpha.  FALSE if .rdata is part of the data segment, as on the
      MIPS.  */
-  bfd_boolean rdata_in_text;
+  bool rdata_in_text;
   /* Bitsize of constructor entries.  */
   unsigned int constructor_bitsize;
   /* Reloc to use for constructor entries.  */
@@ -65,20 +65,27 @@ struct ecoff_backend_data
   void (*adjust_reloc_out)
     (bfd *, const arelent *, struct internal_reloc *);
   /* Relocate section contents while linking.  */
-  bfd_boolean (*relocate_section)
+  bool (*relocate_section)
     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, void *);
   /* Do final adjustments to filehdr and aouthdr.  */
-  bfd_boolean (*adjust_headers)
+  bool (*adjust_headers)
     (bfd *, struct internal_filehdr *, struct internal_aouthdr *);
   /* Read an element from an archive at a given file position.  This
      is needed because OSF/1 3.2 uses a weird archive format.  */
-  bfd *(*get_elt_at_filepos) (bfd *, file_ptr);
+  bfd *(*get_elt_at_filepos) (bfd *, file_ptr, struct bfd_link_info *);
 };
 
 /* ECOFF targets don't support COFF long section names, so this
   macro is provided to use as an initialiser for the related
   members of the embedded bfd_coff_backend_data struct.  */
-#define ECOFF_NO_LONG_SECTION_NAMES (FALSE), _bfd_ecoff_no_long_sections
+#define ECOFF_NO_LONG_SECTION_NAMES (false), _bfd_ecoff_no_long_sections
+
+struct mips_hi
+{
+  struct mips_hi *next;
+  bfd_byte *addr;
+  bfd_vma addend;
+};
 
 /* This is the target specific information kept for ECOFF files.  */
 
@@ -117,9 +124,6 @@ typedef struct ecoff_tdata
   /* The ECOFF symbolic debugging information.  */
   struct ecoff_debug_info debug_info;
 
-  /* The unswapped ECOFF symbolic information.  */
-  void * raw_syments;
-
   /* The canonical BFD symbols.  */
   struct ecoff_symbol_struct *canonical_symbols;
 
@@ -132,11 +136,11 @@ typedef struct ecoff_tdata
   asection **symndx_to_section;
 
   /* TRUE if this BFD was written by the backend linker.  */
-  bfd_boolean linker;
+  bool linker;
 
   /* TRUE if a warning that multiple global pointer values are
      needed in the output binary was issued already.  */
-  bfd_boolean issued_multiple_gp_warning;
+  bool issued_multiple_gp_warning;
 
   /* Used by find_nearest_line entry point.  The structure could be
      included directly in this one, but there's no point to wasting
@@ -146,8 +150,10 @@ typedef struct ecoff_tdata
   /* Whether the .rdata section is in the text segment for this
      particular ECOFF file.  This is not valid until
      ecoff_compute_section_file_positions is called.  */
-  bfd_boolean rdata_in_text;
+  bool rdata_in_text;
 
+  /* Used by coff-mips.c to track REFHI relocs for pairing with REFLO.  */
+  struct mips_hi *mips_refhi_list;
 } ecoff_data_type;
 
 /* Each canonical asymbol really looks like this.  */
@@ -161,7 +167,7 @@ typedef struct ecoff_symbol_struct
   FDR *fdr;
 
   /* TRUE if this is a local symbol rather than an external one.  */
-  bfd_boolean local;
+  bool local;
 
   /* A pointer to the unswapped hidden information for this symbol.
      This is either a struct sym_ext or a struct ext_ext, depending on
@@ -224,27 +230,27 @@ struct ecoff_link_hash_table
 };
 
 /* Make an ECOFF object.  */
-extern bfd_boolean _bfd_ecoff_mkobject (bfd *);
+extern bool _bfd_ecoff_mkobject (bfd *);
 
 /* Read in the ECOFF symbolic debugging information.  */
-extern bfd_boolean _bfd_ecoff_slurp_symbolic_info
+extern bool _bfd_ecoff_slurp_symbolic_info
   (bfd *, asection *, struct ecoff_debug_info *);
 
 /* Generic ECOFF BFD backend vectors.  */
 
-extern bfd_boolean _bfd_ecoff_write_object_contents (bfd *);
+extern bool _bfd_ecoff_write_object_contents (bfd *);
 
-#define	_bfd_ecoff_close_and_cleanup _bfd_generic_close_and_cleanup
-#define _bfd_ecoff_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
-extern bfd_boolean _bfd_ecoff_new_section_hook
+#define _bfd_ecoff_close_and_cleanup _bfd_generic_close_and_cleanup
+extern bool _bfd_ecoff_bfd_free_cached_info (bfd *);
+extern bool _bfd_ecoff_new_section_hook
   (bfd *, asection *);
-extern bfd_boolean _bfd_ecoff_get_section_contents
+extern bool _bfd_ecoff_get_section_contents
   (bfd *, asection *, void * location, file_ptr, bfd_size_type);
 
 #define _bfd_ecoff_bfd_link_split_section _bfd_generic_link_split_section
 #define _bfd_ecoff_bfd_link_check_relocs  _bfd_generic_link_check_relocs
 
-extern bfd_boolean _bfd_ecoff_bfd_copy_private_bfd_data
+extern bool _bfd_ecoff_bfd_copy_private_bfd_data
   (bfd *, bfd *);
 #define _bfd_ecoff_bfd_copy_private_section_data \
   _bfd_generic_bfd_copy_private_section_data
@@ -262,12 +268,12 @@ extern bfd_boolean _bfd_ecoff_bfd_copy_p
   _bfd_generic_bfd_merge_private_bfd_data
 
 #define _bfd_ecoff_bfd_set_private_flags _bfd_generic_bfd_set_private_flags
-extern bfd_boolean _bfd_ecoff_slurp_armap (bfd *);
+extern bool _bfd_ecoff_slurp_armap (bfd *);
 #define _bfd_ecoff_slurp_extended_name_table _bfd_slurp_extended_name_table
 #define _bfd_ecoff_construct_extended_name_table \
   _bfd_archive_bsd_construct_extended_name_table
 #define _bfd_ecoff_truncate_arname bfd_dont_truncate_arname
-extern bfd_boolean _bfd_ecoff_write_armap
+extern bool _bfd_ecoff_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int);
 #define _bfd_ecoff_read_ar_hdr _bfd_generic_read_ar_hdr
 #define _bfd_ecoff_write_ar_hdr _bfd_generic_write_ar_hdr
@@ -287,12 +293,14 @@ extern void _bfd_ecoff_get_symbol_info
   (bfd *, asymbol *, symbol_info *);
 #define _bfd_ecoff_get_symbol_version_string \
   _bfd_nosymbols_get_symbol_version_string
-extern bfd_boolean _bfd_ecoff_bfd_is_local_label_name
+extern bool _bfd_ecoff_bfd_is_local_label_name
   (bfd *, const char *);
 #define _bfd_ecoff_get_lineno _bfd_nosymbols_get_lineno
-extern bfd_boolean _bfd_ecoff_find_nearest_line
+extern bool _bfd_ecoff_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *);
+#define _bfd_ecoff_find_nearest_line_with_alt \
+  _bfd_nosymbols_find_nearest_line_with_alt
 #define _bfd_ecoff_find_line _bfd_nosymbols_find_line
 #define _bfd_ecoff_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
 #define _bfd_ecoff_read_minisymbols _bfd_generic_read_minisymbols
@@ -304,9 +312,9 @@ extern long _bfd_ecoff_canonicalize_relo
   (bfd *, asection *, arelent **, asymbol **);
 /* ecoff_bfd_reloc_type_lookup defined by backend. */
 
-extern bfd_boolean _bfd_ecoff_set_arch_mach
+extern bool _bfd_ecoff_set_arch_mach
   (bfd *, enum bfd_architecture, unsigned long);
-extern bfd_boolean _bfd_ecoff_set_section_contents
+extern bool _bfd_ecoff_set_section_contents
   (bfd *, asection *, const void * location, file_ptr, bfd_size_type);
 
 extern int _bfd_ecoff_sizeof_headers (bfd *, struct bfd_link_info *);
@@ -314,12 +322,12 @@ extern int _bfd_ecoff_sizeof_headers (bf
 /* ecoff_bfd_relax_section defined by backend.  */
 extern struct bfd_link_hash_table *_bfd_ecoff_bfd_link_hash_table_create
   (bfd *);
-extern bfd_boolean _bfd_ecoff_bfd_link_add_symbols
+extern bool _bfd_ecoff_bfd_link_add_symbols
   (bfd *, struct bfd_link_info *);
 #define _bfd_ecoff_bfd_link_just_syms _bfd_generic_link_just_syms
 #define _bfd_ecoff_bfd_copy_link_hash_symbol_type \
   _bfd_generic_copy_link_hash_symbol_type
-extern bfd_boolean _bfd_ecoff_bfd_final_link
+extern bool _bfd_ecoff_bfd_final_link
   (bfd *, struct bfd_link_info *);
 
 /* Hook functions for the generic COFF section reading code.  */
@@ -327,13 +335,13 @@ extern bfd_boolean _bfd_ecoff_bfd_final_
 extern void * _bfd_ecoff_mkobject_hook (bfd *, void *, void *);
 extern void _bfd_ecoff_set_alignment_hook
   (bfd *, asection *, void *);
-extern bfd_boolean _bfd_ecoff_set_arch_mach_hook
+extern bool _bfd_ecoff_set_arch_mach_hook
   (bfd *, void *);
-extern bfd_boolean _bfd_ecoff_no_long_sections
+extern bool _bfd_ecoff_no_long_sections
   (bfd *abfd, int enable);
-extern bfd_boolean _bfd_ecoff_styp_to_sec_flags
+extern bool _bfd_ecoff_styp_to_sec_flags
   (bfd *, void *, const char *, asection *, flagword *);
-extern bfd_boolean _bfd_ecoff_slurp_symbol_table (bfd *);
+extern bool _bfd_ecoff_slurp_symbol_table (bfd *);
 
 /* ECOFF auxiliary information swapping routines.  These are the same
    for all ECOFF targets, so they are defined in ecofflink.c.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libhppa.h ./bfd/libhppa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libhppa.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libhppa.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* HP PA-RISC SOM object file format:  definitions internal to BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Contributed by the Center for Software Science at the
    University of Utah (pa-gdb-bugs@cs.utah.edu).
@@ -148,46 +148,27 @@ enum hppa_reloc_expr_type_alt
 #define HPPA_R_ARG_RELOC(a)	\
   (((a) >> 22) & 0x3ff)
 #define HPPA_R_CONSTANT(a)	\
-  ((((bfd_signed_vma)(a)) << (BFD_ARCH_SIZE-22)) >> (BFD_ARCH_SIZE-22))
+  ((((bfd_signed_vma) (a) & 0x3fffff) ^ 0x200000) - 0x200000)
 #define HPPA_R_ADDEND(r, c)	\
   (((r) << 22) + ((c) & 0x3fffff))
 
 
 /* Some functions to manipulate PA instructions.  */
 
-/* Declare the functions with the unused attribute to avoid warnings.  */
-static inline int sign_extend (int, int) ATTRIBUTE_UNUSED;
-static inline int low_sign_extend (int, int) ATTRIBUTE_UNUSED;
-static inline int sign_unext (int, int) ATTRIBUTE_UNUSED;
-static inline int low_sign_unext (int, int) ATTRIBUTE_UNUSED;
-static inline int re_assemble_3 (int) ATTRIBUTE_UNUSED;
-static inline int re_assemble_12 (int) ATTRIBUTE_UNUSED;
-static inline int re_assemble_14 (int) ATTRIBUTE_UNUSED;
-static inline int re_assemble_16 (int) ATTRIBUTE_UNUSED;
-static inline int re_assemble_17 (int) ATTRIBUTE_UNUSED;
-static inline int re_assemble_21 (int) ATTRIBUTE_UNUSED;
-static inline int re_assemble_22 (int) ATTRIBUTE_UNUSED;
-static inline bfd_signed_vma hppa_field_adjust
-  (bfd_vma, bfd_signed_vma, enum hppa_reloc_field_selector_type_alt)
-  ATTRIBUTE_UNUSED;
-static inline int bfd_hppa_insn2fmt (bfd *, int) ATTRIBUTE_UNUSED;
-static inline int hppa_rebuild_insn (int, int, int) ATTRIBUTE_UNUSED;
-
-
 /* The *sign_extend functions are used to assemble various bitfields
    taken from an instruction and return the resulting immediate
    value.  */
 
-static inline int
-sign_extend (int x, int len)
+static inline unsigned ATTRIBUTE_UNUSED
+sign_extend (unsigned x, unsigned len)
 {
-  int signbit = (1 << (len - 1));
-  int mask = (signbit << 1) - 1;
+  unsigned signbit = (1u << (len - 1));
+  unsigned mask = (signbit << 1) - 1;
   return ((x & mask) ^ signbit) - signbit;
 }
 
-static inline int
-low_sign_extend (int x, int len)
+static inline unsigned ATTRIBUTE_UNUSED
+low_sign_extend (unsigned x, unsigned len)
 {
   return (x >> 1) - ((x & 1) << (len - 1));
 }
@@ -197,21 +178,21 @@ low_sign_extend (int x, int len)
    insertion into an opcode. pa-risc uses all sorts of weird bitfields
    in the instruction to hold the value.  */
 
-static inline int
-sign_unext (int x, int len)
+static inline unsigned ATTRIBUTE_UNUSED
+sign_unext (unsigned x, unsigned len)
 {
-  int len_ones;
+  unsigned len_ones;
 
   len_ones = (1 << len) - 1;
 
   return x & len_ones;
 }
 
-static inline int
-low_sign_unext (int x, int len)
+static inline unsigned ATTRIBUTE_UNUSED
+low_sign_unext (unsigned x, unsigned len)
 {
-  int temp;
-  int sign;
+  unsigned temp;
+  unsigned sign;
 
   sign = (x >> (len-1)) & 1;
 
@@ -220,32 +201,32 @@ low_sign_unext (int x, int len)
   return (temp << 1) | sign;
 }
 
-static inline int
-re_assemble_3 (int as3)
+static inline unsigned ATTRIBUTE_UNUSED
+re_assemble_3 (unsigned as3)
 {
   return ((  (as3 & 4) << (13-2))
 	  | ((as3 & 3) << (13+1)));
 }
 
-static inline int
-re_assemble_12 (int as12)
+static inline unsigned ATTRIBUTE_UNUSED
+re_assemble_12 (unsigned as12)
 {
   return ((  (as12 & 0x800) >> 11)
 	  | ((as12 & 0x400) >> (10 - 2))
 	  | ((as12 & 0x3ff) << (1 + 2)));
 }
 
-static inline int
-re_assemble_14 (int as14)
+static inline unsigned ATTRIBUTE_UNUSED
+re_assemble_14 (unsigned as14)
 {
   return ((  (as14 & 0x1fff) << 1)
 	  | ((as14 & 0x2000) >> 13));
 }
 
-static inline int
-re_assemble_16 (int as16)
+static inline unsigned ATTRIBUTE_UNUSED
+re_assemble_16 (unsigned as16)
 {
-  int s, t;
+  unsigned s, t;
 
   /* Unusual 16-bit encoding, for wide mode only.  */
   t = (as16 << 1) & 0xffff;
@@ -253,8 +234,8 @@ re_assemble_16 (int as16)
   return (t ^ s ^ (s >> 1)) | (s >> 15);
 }
 
-static inline int
-re_assemble_17 (int as17)
+static inline unsigned ATTRIBUTE_UNUSED
+re_assemble_17 (unsigned as17)
 {
   return ((  (as17 & 0x10000) >> 16)
 	  | ((as17 & 0x0f800) << (16 - 11))
@@ -262,8 +243,8 @@ re_assemble_17 (int as17)
 	  | ((as17 & 0x003ff) << (1 + 2)));
 }
 
-static inline int
-re_assemble_21 (int as21)
+static inline unsigned ATTRIBUTE_UNUSED
+re_assemble_21 (unsigned as21)
 {
   return ((  (as21 & 0x100000) >> 20)
 	  | ((as21 & 0x0ffe00) >> 8)
@@ -272,8 +253,8 @@ re_assemble_21 (int as21)
 	  | ((as21 & 0x000003) << 12));
 }
 
-static inline int
-re_assemble_22 (int as22)
+static inline unsigned ATTRIBUTE_UNUSED
+re_assemble_22 (unsigned as22)
 {
   return ((  (as22 & 0x200000) >> 21)
 	  | ((as22 & 0x1f0000) << (21 - 16))
@@ -293,7 +274,7 @@ re_assemble_22 (int as22)
    This function returns sign extended values in all cases.
 */
 
-static inline bfd_signed_vma
+static inline bfd_signed_vma ATTRIBUTE_UNUSED
 hppa_field_adjust (bfd_vma sym_val,
 		   bfd_signed_vma addend,
 		   enum hppa_reloc_field_selector_type_alt r_field)
@@ -459,8 +440,8 @@ enum hppa_opcode_type
 
 /* Given a machine instruction, return its format.  */
 
-static inline int
-bfd_hppa_insn2fmt (bfd *abfd, int insn)
+static inline unsigned ATTRIBUTE_UNUSED
+bfd_hppa_insn2fmt (bfd *abfd, unsigned insn)
 {
   enum hppa_opcode_type op = (enum hppa_opcode_type) get_opcode (insn);
 
@@ -541,8 +522,8 @@ bfd_hppa_insn2fmt (bfd *abfd, int insn)
 /* Insert VALUE into INSN using R_FORMAT to determine exactly what
    bits to change.  */
 
-static inline int
-hppa_rebuild_insn (int insn, int value, int r_format)
+static inline unsigned ATTRIBUTE_UNUSED
+hppa_rebuild_insn (unsigned insn, unsigned value, int r_format)
 {
   switch (r_format)
     {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libpei.h ./bfd/libpei.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libpei.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libpei.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for the generic parts of PE/PEI; common header information.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -19,6 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#ifndef _LIBPEI_H
+#define _LIBPEI_H
 
 /* Most of this hacked by  Steve Chamberlain,
 			sac@cygnus.com
@@ -275,6 +277,111 @@
 #define _bfd_XXi_write_codeview_record			_bfd_pepi_write_codeview_record
 #define _bfd_XXi_slurp_codeview_record			_bfd_pepi_slurp_codeview_record
 
+#elif defined COFF_WITH_peAArch64
+
+#define GET_OPTHDR_IMAGE_BASE		 H_GET_64
+#define PUT_OPTHDR_IMAGE_BASE		 H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_COMMIT	 H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_COMMIT	 H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_RESERVE	 H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE	 H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_COMMIT	 H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT	 H_PUT_64
+#define GET_PDATA_ENTRY			 bfd_get_32
+
+#define _bfd_XX_bfd_copy_private_bfd_data_common	_bfd_peAArch64_bfd_copy_private_bfd_data_common
+#define _bfd_XX_bfd_copy_private_section_data		_bfd_peAArch64_bfd_copy_private_section_data
+#define _bfd_XX_get_symbol_info				_bfd_peAArch64_get_symbol_info
+#define _bfd_XX_only_swap_filehdr_out			_bfd_peAArch64_only_swap_filehdr_out
+#define _bfd_XX_print_private_bfd_data_common		_bfd_peAArch64_print_private_bfd_data_common
+#define _bfd_XXi_final_link_postscript			_bfd_peAArch64i_final_link_postscript
+#define _bfd_XXi_only_swap_filehdr_out			_bfd_peAArch64i_only_swap_filehdr_out
+#define _bfd_XXi_swap_aouthdr_in			_bfd_peAArch64i_swap_aouthdr_in
+#define _bfd_XXi_swap_aouthdr_out			_bfd_peAArch64i_swap_aouthdr_out
+#define _bfd_XXi_swap_aux_in				_bfd_peAArch64i_swap_aux_in
+#define _bfd_XXi_swap_aux_out				_bfd_peAArch64i_swap_aux_out
+#define _bfd_XXi_swap_lineno_in				_bfd_peAArch64i_swap_lineno_in
+#define _bfd_XXi_swap_lineno_out			_bfd_peAArch64i_swap_lineno_out
+#define _bfd_XXi_swap_scnhdr_out			_bfd_peAArch64i_swap_scnhdr_out
+#define _bfd_XXi_swap_sym_in				_bfd_peAArch64i_swap_sym_in
+#define _bfd_XXi_swap_sym_out				_bfd_peAArch64i_swap_sym_out
+#define _bfd_XXi_swap_debugdir_in			_bfd_peAArch64i_swap_debugdir_in
+#define _bfd_XXi_swap_debugdir_out			_bfd_peAArch64i_swap_debugdir_out
+#define _bfd_XXi_write_codeview_record			_bfd_peAArch64i_write_codeview_record
+#define _bfd_XXi_slurp_codeview_record			_bfd_peAArch64i_slurp_codeview_record
+
+#elif defined COFF_WITH_peLoongArch64
+
+#define GET_OPTHDR_IMAGE_BASE		 H_GET_64
+#define PUT_OPTHDR_IMAGE_BASE		 H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_COMMIT	 H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_COMMIT	 H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_RESERVE	 H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE	 H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_COMMIT	 H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT	 H_PUT_64
+#define GET_PDATA_ENTRY			 bfd_get_32
+
+#define _bfd_XX_bfd_copy_private_bfd_data_common	_bfd_peLoongArch64_bfd_copy_private_bfd_data_common
+#define _bfd_XX_bfd_copy_private_section_data		_bfd_peLoongArch64_bfd_copy_private_section_data
+#define _bfd_XX_get_symbol_info				_bfd_peLoongArch64_get_symbol_info
+#define _bfd_XX_only_swap_filehdr_out			_bfd_peLoongArch64_only_swap_filehdr_out
+#define _bfd_XX_print_private_bfd_data_common		_bfd_peLoongArch64_print_private_bfd_data_common
+#define _bfd_XXi_final_link_postscript			_bfd_peLoongArch64i_final_link_postscript
+#define _bfd_XXi_only_swap_filehdr_out			_bfd_peLoongArch64i_only_swap_filehdr_out
+#define _bfd_XXi_swap_aouthdr_in			_bfd_peLoongArch64i_swap_aouthdr_in
+#define _bfd_XXi_swap_aouthdr_out			_bfd_peLoongArch64i_swap_aouthdr_out
+#define _bfd_XXi_swap_aux_in				_bfd_peLoongArch64i_swap_aux_in
+#define _bfd_XXi_swap_aux_out				_bfd_peLoongArch64i_swap_aux_out
+#define _bfd_XXi_swap_lineno_in				_bfd_peLoongArch64i_swap_lineno_in
+#define _bfd_XXi_swap_lineno_out			_bfd_peLoongArch64i_swap_lineno_out
+#define _bfd_XXi_swap_scnhdr_out			_bfd_peLoongArch64i_swap_scnhdr_out
+#define _bfd_XXi_swap_sym_in				_bfd_peLoongArch64i_swap_sym_in
+#define _bfd_XXi_swap_sym_out				_bfd_peLoongArch64i_swap_sym_out
+#define _bfd_XXi_swap_debugdir_in			_bfd_peLoongArch64i_swap_debugdir_in
+#define _bfd_XXi_swap_debugdir_out			_bfd_peLoongArch64i_swap_debugdir_out
+#define _bfd_XXi_write_codeview_record			_bfd_peLoongArch64i_write_codeview_record
+#define _bfd_XXi_slurp_codeview_record			_bfd_peLoongArch64i_slurp_codeview_record
+
+#elif defined COFF_WITH_peRiscV64
+
+#define GET_OPTHDR_IMAGE_BASE		 H_GET_64
+#define PUT_OPTHDR_IMAGE_BASE		 H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_COMMIT	 H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_COMMIT	 H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_RESERVE	 H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE	 H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_COMMIT	 H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT	 H_PUT_64
+#define GET_PDATA_ENTRY			 bfd_get_32
+
+#define _bfd_XX_bfd_copy_private_bfd_data_common	_bfd_peRiscV64_bfd_copy_private_bfd_data_common
+#define _bfd_XX_bfd_copy_private_section_data		_bfd_peRiscV64_bfd_copy_private_section_data
+#define _bfd_XX_get_symbol_info				_bfd_peRiscV64_get_symbol_info
+#define _bfd_XX_only_swap_filehdr_out			_bfd_peRiscV64_only_swap_filehdr_out
+#define _bfd_XX_print_private_bfd_data_common		_bfd_peRiscV64_print_private_bfd_data_common
+#define _bfd_XXi_final_link_postscript			_bfd_peRiscV64i_final_link_postscript
+#define _bfd_XXi_only_swap_filehdr_out			_bfd_peRiscV64i_only_swap_filehdr_out
+#define _bfd_XXi_swap_aouthdr_in			_bfd_peRiscV64i_swap_aouthdr_in
+#define _bfd_XXi_swap_aouthdr_out			_bfd_peRiscV64i_swap_aouthdr_out
+#define _bfd_XXi_swap_aux_in				_bfd_peRiscV64i_swap_aux_in
+#define _bfd_XXi_swap_aux_out				_bfd_peRiscV64i_swap_aux_out
+#define _bfd_XXi_swap_lineno_in				_bfd_peRiscV64i_swap_lineno_in
+#define _bfd_XXi_swap_lineno_out			_bfd_peRiscV64i_swap_lineno_out
+#define _bfd_XXi_swap_scnhdr_out			_bfd_peRiscV64i_swap_scnhdr_out
+#define _bfd_XXi_swap_sym_in				_bfd_peRiscV64i_swap_sym_in
+#define _bfd_XXi_swap_sym_out				_bfd_peRiscV64i_swap_sym_out
+#define _bfd_XXi_swap_debugdir_in			_bfd_peRiscV64i_swap_debugdir_in
+#define _bfd_XXi_swap_debugdir_out			_bfd_peRiscV64i_swap_debugdir_out
+#define _bfd_XXi_write_codeview_record			_bfd_peRiscV64i_write_codeview_record
+#define _bfd_XXi_slurp_codeview_record			_bfd_peRiscV64i_slurp_codeview_record
+
 #else /* !COFF_WITH_pep */
 
 #define GET_OPTHDR_IMAGE_BASE H_GET_32
@@ -338,34 +445,42 @@
 #define coff_final_link_postscript _bfd_XXi_final_link_postscript
 #endif
 
-void	    _bfd_XXi_swap_sym_in (bfd *, void *, void *);
-unsigned    _bfd_XXi_swap_sym_out (bfd *, void *, void *);
-void	    _bfd_XXi_swap_aux_in (bfd *, void *, int, int, int, int, void *);
-unsigned    _bfd_XXi_swap_aux_out (bfd *, void *, int, int, int, int, void *);
-void	    _bfd_XXi_swap_lineno_in (bfd *, void *, void *);
-unsigned    _bfd_XXi_swap_lineno_out (bfd *, void *, void *);
-void	    _bfd_XXi_swap_aouthdr_in (bfd *, void *, void *);
-unsigned    _bfd_XXi_swap_aouthdr_out (bfd *, void *, void *);
-unsigned    _bfd_XXi_swap_scnhdr_out (bfd *, void *, void *);
-bfd_boolean _bfd_XX_print_private_bfd_data_common (bfd *, void *);
-bfd_boolean _bfd_XX_bfd_copy_private_bfd_data_common (bfd *, bfd *);
-void	    _bfd_XX_get_symbol_info (bfd *, asymbol *, symbol_info *);
-bfd_boolean _bfd_XXi_final_link_postscript (bfd *, struct coff_final_link_info *);
-void	    _bfd_XXi_swap_debugdir_in (bfd *, void *, void *);
-unsigned    _bfd_XXi_swap_debugdir_out (bfd *, void *, void *);
-unsigned    _bfd_XXi_write_codeview_record (bfd *, file_ptr, CODEVIEW_INFO *);
-CODEVIEW_INFO * _bfd_XXi_slurp_codeview_record (bfd * abfd, file_ptr where, unsigned long length, CODEVIEW_INFO *cvinfo);
+void _bfd_XXi_swap_sym_in (bfd *, void *, void *);
+unsigned _bfd_XXi_swap_sym_out (bfd *, void *, void *);
+void _bfd_XXi_swap_aux_in (bfd *, void *, int, int, int, int, void *);
+unsigned _bfd_XXi_swap_aux_out (bfd *, void *, int, int, int, int, void *);
+void _bfd_XXi_swap_lineno_in (bfd *, void *, void *);
+unsigned _bfd_XXi_swap_lineno_out (bfd *, void *, void *);
+void _bfd_XXi_swap_aouthdr_in (bfd *, void *, void *);
+unsigned _bfd_XXi_swap_aouthdr_out (bfd *, void *, void *);
+unsigned _bfd_XXi_swap_scnhdr_out (bfd *, void *, void *);
+bool _bfd_XX_print_private_bfd_data_common (bfd *, void *);
+bool _bfd_XX_bfd_copy_private_bfd_data_common (bfd *, bfd *);
+void _bfd_XX_get_symbol_info (bfd *, asymbol *, symbol_info *);
+bool _bfd_XXi_final_link_postscript (bfd *, struct coff_final_link_info *);
+void _bfd_XXi_swap_debugdir_in (bfd *, void *, void *);
+unsigned _bfd_XXi_swap_debugdir_out (bfd *, void *, void *);
+unsigned _bfd_XXi_write_codeview_record
+  (bfd *, file_ptr, CODEVIEW_INFO *, const char *);
+CODEVIEW_INFO *_bfd_XXi_slurp_codeview_record
+  (bfd * abfd, file_ptr where, unsigned long length, CODEVIEW_INFO *cvinfo,
+   char **pdb);
 
 /* The following are needed only for ONE of pe or pei, but don't
    otherwise vary; peicode.h fixes up ifdefs but we provide the
    prototype.  */
 
-unsigned    _bfd_XX_only_swap_filehdr_out  (bfd *, void *, void *);
-unsigned    _bfd_XXi_only_swap_filehdr_out (bfd *, void *, void *);
-bfd_boolean _bfd_XX_bfd_copy_private_section_data (bfd *, asection *, bfd *, asection *);
-
-bfd_boolean _bfd_pe_print_ce_compressed_pdata (bfd *, void *);
-bfd_boolean _bfd_pe64_print_ce_compressed_pdata (bfd *, void *);
-bfd_boolean _bfd_pex64_print_ce_compressed_pdata (bfd *, void *);
-bfd_boolean _bfd_pep_print_ce_compressed_pdata (bfd *, void *);
+unsigned _bfd_XX_only_swap_filehdr_out  (bfd *, void *, void *);
+unsigned _bfd_XXi_only_swap_filehdr_out (bfd *, void *, void *);
+bool _bfd_XX_bfd_copy_private_section_data
+  (bfd *, asection *, bfd *, asection *);
+
+bool _bfd_pe_print_ce_compressed_pdata (bfd *, void *);
+bool _bfd_pe64_print_ce_compressed_pdata (bfd *, void *);
+bool _bfd_pex64_print_ce_compressed_pdata (bfd *, void *);
+bool _bfd_peAArch64_print_ce_compressed_pdata (bfd *, void *);
+bool _bfd_peLoongArch64_print_ce_compressed_pdata (bfd *, void *);
+bool _bfd_peRiscV64_print_ce_compressed_pdata (bfd *, void *);
+bool _bfd_pep_print_ce_compressed_pdata (bfd *, void *);
 
+#endif /* _LIBPEI_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libxcoff.h ./bfd/libxcoff.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/libxcoff.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/libxcoff.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD XCOFF object file private structure.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Written by Tom Rix, Redhat.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -63,11 +63,11 @@ struct xcoff_backend_data_rec
      2 : XCOFF64.  */
   unsigned long _xcoff_ldhdr_version;
 
-  bfd_boolean (* _xcoff_put_symbol_name)
+  bool (* _xcoff_put_symbol_name)
     (struct bfd_link_info *, struct bfd_strtab_hash *,
      struct internal_syment *, const char *);
 
-  bfd_boolean (* _xcoff_put_ldsymbol_name)
+  bool (* _xcoff_put_ldsymbol_name)
     (bfd *, struct xcoff_loader_info *, struct internal_ldsym *,
      const char *);
 
@@ -79,8 +79,8 @@ struct xcoff_backend_data_rec
   /* Line number and relocation overflow.
      XCOFF32 overflows to another section when the line number or the
      relocation count exceeds 0xffff.  XCOFF64 does not overflow.  */
-  bfd_boolean (*_xcoff_is_lineno_count_overflow) (bfd *, bfd_vma);
-  bfd_boolean (*_xcoff_is_reloc_count_overflow)  (bfd *, bfd_vma);
+  bool (*_xcoff_is_lineno_count_overflow) (bfd *, bfd_vma);
+  bool (*_xcoff_is_reloc_count_overflow)  (bfd *, bfd_vma);
 
   /* Loader section symbol and relocation table offset
      XCOFF32 is after the .loader header
@@ -90,15 +90,24 @@ struct xcoff_backend_data_rec
 
   /* Global linkage.  The first word of global linkage code must be be
      modified by filling in the correct TOC offset.  */
-  unsigned long *_xcoff_glink_code;
+  const unsigned long *_xcoff_glink_code;
 
   /* Size of the global link code in bytes of the xcoff_glink_code table.  */
   unsigned long _xcoff_glink_size;
 
   /* rtinit.  */
   unsigned int _xcoff_rtinit_size;
-  bfd_boolean (*_xcoff_generate_rtinit)
-    (bfd *, const char *, const char *, bfd_boolean);
+  bool (*_xcoff_generate_rtinit)
+    (bfd *, const char *, const char *, bool);
+
+  /* Stubs code generation.
+     The code part is an array which might need to be modified by
+     some relocations.
+     The size is in bytes.  */
+  const unsigned long *_xcoff_stub_indirect_call_code;
+  unsigned long _xcoff_stub_indirect_call_size;
+  const unsigned long *_xcoff_stub_shared_call_code;
+  unsigned long _xcoff_stub_shared_call_size;
 };
 
 /* Look up an entry in an XCOFF link hash table.  */
@@ -111,7 +120,7 @@ struct xcoff_backend_data_rec
 #define xcoff_link_hash_traverse(table, func, info)			\
   (bfd_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func),	\
+    (bool (*) (struct bfd_link_hash_entry *, void *)) (func),		\
     (info)))
 
 /* Get the XCOFF link hash table from the info structure.  This is
@@ -185,6 +194,11 @@ struct xcoff_backend_data_rec
 #define bfd_xcoff_glink_code(a, b)   ((xcoff_backend (a)->_xcoff_glink_code[(b)]))
 #define bfd_xcoff_glink_code_size(a) ((xcoff_backend (a)->_xcoff_glink_size))
 
+#define bfd_xcoff_stub_indirect_call_code(a, b)   ((xcoff_backend (a)->_xcoff_stub_indirect_call_code[(b)]))
+#define bfd_xcoff_stub_indirect_call_size(a) ((xcoff_backend (a)->_xcoff_stub_indirect_call_size))
+#define bfd_xcoff_stub_shared_call_code(a, b)   ((xcoff_backend (a)->_xcoff_stub_shared_call_code[(b)]))
+#define bfd_xcoff_stub_shared_call_size(a) ((xcoff_backend (a)->_xcoff_stub_shared_call_size))
+
 /* Check for the magic number U803XTOCMAGIC or U64_TOCMAGIC for 64 bit
    targets.  */
 #define bfd_xcoff_is_xcoff64(a) \
@@ -202,7 +216,7 @@ struct xcoff_backend_data_rec
 #define bfd_xcoff_data_align_power(a) ((xcoff_data (a)->data_align_power))
 
 /* xcoff*_ppc_relocate_section macros  */
-#define XCOFF_MAX_CALCULATE_RELOCATION (0x1c)
+#define XCOFF_MAX_CALCULATE_RELOCATION (0x32)
 #define XCOFF_MAX_COMPLAIN_OVERFLOW (4)
 /* N_ONES produces N one bits, without overflowing machine arithmetic.  */
 #ifdef N_ONES
@@ -210,30 +224,32 @@ struct xcoff_backend_data_rec
 #endif
 #define N_ONES(n) (((((bfd_vma) 1 << ((n) - 1)) - 1) << 1) | 1)
 
-#define XCOFF_RELOC_FUNCTION_ARGS \
-  bfd *, asection *, bfd *, struct internal_reloc *, \
-  struct internal_syment *, struct reloc_howto_struct *, bfd_vma, bfd_vma, \
-  bfd_vma *relocation, bfd_byte *contents
-
-#define XCOFF_COMPLAIN_FUNCTION_ARGS \
-  bfd *, bfd_vma, bfd_vma, struct reloc_howto_struct *howto
-
-extern bfd_boolean (*xcoff_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION])
-  (XCOFF_RELOC_FUNCTION_ARGS);
-extern bfd_boolean (*xcoff_complain_overflow[XCOFF_MAX_COMPLAIN_OVERFLOW])
-  (XCOFF_COMPLAIN_FUNCTION_ARGS);
+typedef bool xcoff_reloc_function (bfd *, asection *, bfd *,
+				   struct internal_reloc *,
+				   struct internal_syment *,
+				   struct reloc_howto_struct *,
+				   bfd_vma, bfd_vma,
+				   bfd_vma *, bfd_byte *,
+				   struct bfd_link_info *);
+
+typedef bool xcoff_complain_function (bfd *, bfd_vma, bfd_vma,
+					     struct reloc_howto_struct *);
 
-#define XCOFF_NO_LONG_SECTION_NAMES  (FALSE), bfd_coff_set_long_section_names_disallowed
+extern xcoff_reloc_function *const xcoff_calculate_relocation[];
+extern xcoff_complain_function *const xcoff_complain_overflow[];
+
+#define XCOFF_NO_LONG_SECTION_NAMES  (false), bfd_coff_set_long_section_names_disallowed
 
 /* Relocation functions */
-bfd_boolean xcoff_reloc_type_noop (XCOFF_RELOC_FUNCTION_ARGS);
-bfd_boolean xcoff_reloc_type_fail (XCOFF_RELOC_FUNCTION_ARGS);
-bfd_boolean xcoff_reloc_type_pos  (XCOFF_RELOC_FUNCTION_ARGS);
-bfd_boolean xcoff_reloc_type_neg  (XCOFF_RELOC_FUNCTION_ARGS);
-bfd_boolean xcoff_reloc_type_rel  (XCOFF_RELOC_FUNCTION_ARGS);
-bfd_boolean xcoff_reloc_type_toc  (XCOFF_RELOC_FUNCTION_ARGS);
-bfd_boolean xcoff_reloc_type_ba   (XCOFF_RELOC_FUNCTION_ARGS);
-bfd_boolean xcoff_reloc_type_crel (XCOFF_RELOC_FUNCTION_ARGS);
+extern xcoff_reloc_function xcoff_reloc_type_noop;
+extern xcoff_reloc_function xcoff_reloc_type_fail;
+extern xcoff_reloc_function xcoff_reloc_type_pos;
+extern xcoff_reloc_function xcoff_reloc_type_neg;
+extern xcoff_reloc_function xcoff_reloc_type_rel;
+extern xcoff_reloc_function xcoff_reloc_type_toc;
+extern xcoff_reloc_function xcoff_reloc_type_ba;
+extern xcoff_reloc_function xcoff_reloc_type_crel;
+extern xcoff_reloc_function xcoff_reloc_type_tls;
 
 /* Structure to describe dwarf sections.
    Useful to convert from XCOFF section name to flag and vice-versa.
@@ -243,18 +259,59 @@ struct xcoff_dwsect_name {
   unsigned int flag;
 
   /* Corresponding XCOFF section name.  */
-  const char *name;
+  const char *xcoff_name;
+
+  /* Corresponding DWARF section name.  */
+  const char *dwarf_name;
 
   /* True if size must be prepended.  */
-  bfd_boolean def_size;
+  bool def_size;
 };
 
 /* Number of entries in the array.  The number is known and public so that user
    can 'extend' this array by index.  */
-#define XCOFF_DWSECT_NBR_NAMES	8
+#define XCOFF_DWSECT_NBR_NAMES	11
 
 /* The dwarf sections array.  */
 extern const struct xcoff_dwsect_name
   xcoff_dwsect_names[XCOFF_DWSECT_NBR_NAMES];
 
+/* Structure and functions needed by backend in order to handle
+   stubs created in xcofflink.c.  */
+
+enum xcoff_stub_type
+  {
+    xcoff_stub_none,
+    xcoff_stub_indirect_call,
+    xcoff_stub_shared_call
+  };
+
+struct xcoff_stub_hash_entry
+{
+  /* Base hash table entry structure.  */
+  struct bfd_hash_entry root;
+
+  enum xcoff_stub_type stub_type;
+
+  /* The hash table entry of the stub's csect.  */
+  struct xcoff_link_hash_entry *hcsect;
+
+  /* Offset in the stub's csect.  */
+  bfd_vma stub_offset;
+
+  /* The target's section.  */
+  asection *target_section;
+
+  /* The target's hash table entry.  */
+  struct xcoff_link_hash_entry *htarget;
+};
+
+
+extern enum xcoff_stub_type bfd_xcoff_type_of_stub
+  (asection *, const struct internal_reloc *, bfd_vma,
+   struct xcoff_link_hash_entry *);
+
+extern struct xcoff_stub_hash_entry *bfd_xcoff_get_stub_entry
+  (asection *, struct xcoff_link_hash_entry *, struct bfd_link_info *);
+
 #endif /* LIBXCOFF_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/linker.c ./bfd/linker.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/linker.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/linker.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* linker.c -- BFD linker routines
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -402,20 +402,20 @@ SUBSUBSECTION
 	file at the end of <<NAME(aout,final_link)>>.
 */
 
-static bfd_boolean generic_link_add_object_symbols
+static bool generic_link_add_object_symbols
   (bfd *, struct bfd_link_info *);
-static bfd_boolean generic_link_check_archive_element
+static bool generic_link_check_archive_element
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
-   bfd_boolean *);
-static bfd_boolean generic_link_add_symbol_list
+   bool *);
+static bool generic_link_add_symbol_list
   (bfd *, struct bfd_link_info *, bfd_size_type count, asymbol **);
-static bfd_boolean generic_add_output_symbol
+static bool generic_add_output_symbol
   (bfd *, size_t *psymalloc, asymbol *);
-static bfd_boolean default_data_link_order
+static bool default_data_link_order
   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);
-static bfd_boolean default_indirect_link_order
+static bool default_indirect_link_order
   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *,
-   bfd_boolean);
+   bool);
 
 /* The link hash table structure is defined in bfdlink.h.  It provides
    a base hash table which the backend specific hash tables are built
@@ -455,7 +455,7 @@ _bfd_link_hash_newfunc (struct bfd_hash_
 /* Initialize a link hash table.  The BFD argument is the one
    responsible for creating this table.  */
 
-bfd_boolean
+bool
 _bfd_link_hash_table_init
   (struct bfd_link_hash_table *table,
    bfd *abfd ATTRIBUTE_UNUSED,
@@ -464,7 +464,7 @@ _bfd_link_hash_table_init
 				      const char *),
    unsigned int entsize)
 {
-  bfd_boolean ret;
+  bool ret;
 
   BFD_ASSERT (!abfd->is_linker_output && !abfd->link.hash);
   table->undefs = NULL;
@@ -477,7 +477,7 @@ _bfd_link_hash_table_init
       /* Arrange for destruction of this hash table on closing ABFD.  */
       table->hash_table_free = _bfd_generic_link_hash_table_free;
       abfd->link.hash = table;
-      abfd->is_linker_output = TRUE;
+      abfd->is_linker_output = true;
     }
   return ret;
 }
@@ -502,9 +502,9 @@ _bfd_link_hash_table_init
 struct bfd_link_hash_entry *
 bfd_link_hash_lookup (struct bfd_link_hash_table *table,
 		      const char *string,
-		      bfd_boolean create,
-		      bfd_boolean copy,
-		      bfd_boolean follow)
+		      bool create,
+		      bool copy,
+		      bool follow)
 {
   struct bfd_link_hash_entry *ret;
 
@@ -532,11 +532,11 @@ struct bfd_link_hash_entry *
 bfd_wrapped_link_hash_lookup (bfd *abfd,
 			      struct bfd_link_info *info,
 			      const char *string,
-			      bfd_boolean create,
-			      bfd_boolean copy,
-			      bfd_boolean follow)
+			      bool create,
+			      bool copy,
+			      bool follow)
 {
-  bfd_size_type amt;
+  size_t amt;
 
   if (info->wrap_hash != NULL)
     {
@@ -544,7 +544,9 @@ bfd_wrapped_link_hash_lookup (bfd *abfd,
       char prefix = '\0';
 
       l = string;
-      if (*l == bfd_get_symbol_leading_char (abfd) || *l == info->wrap_char)
+      if (*l
+	  && (*l == bfd_get_symbol_leading_char (abfd)
+	      || *l == info->wrap_char))
 	{
 	  prefix = *l;
 	  ++l;
@@ -553,7 +555,7 @@ bfd_wrapped_link_hash_lookup (bfd *abfd,
 #undef WRAP
 #define WRAP "__wrap_"
 
-      if (bfd_hash_lookup (info->wrap_hash, l, FALSE, FALSE) != NULL)
+      if (bfd_hash_lookup (info->wrap_hash, l, false, false) != NULL)
 	{
 	  char *n;
 	  struct bfd_link_hash_entry *h;
@@ -570,7 +572,7 @@ bfd_wrapped_link_hash_lookup (bfd *abfd,
 	  n[1] = '\0';
 	  strcat (n, WRAP);
 	  strcat (n, l);
-	  h = bfd_link_hash_lookup (info->hash, n, create, TRUE, follow);
+	  h = bfd_link_hash_lookup (info->hash, n, create, true, follow);
 	  free (n);
 	  return h;
 	}
@@ -579,9 +581,9 @@ bfd_wrapped_link_hash_lookup (bfd *abfd,
 #define REAL "__real_"
 
       if (*l == '_'
-	  && CONST_STRNEQ (l, REAL)
+	  && startswith (l, REAL)
 	  && bfd_hash_lookup (info->wrap_hash, l + sizeof REAL - 1,
-			      FALSE, FALSE) != NULL)
+			      false, false) != NULL)
 	{
 	  char *n;
 	  struct bfd_link_hash_entry *h;
@@ -598,7 +600,9 @@ bfd_wrapped_link_hash_lookup (bfd *abfd,
 	  n[0] = prefix;
 	  n[1] = '\0';
 	  strcat (n, l + sizeof REAL - 1);
-	  h = bfd_link_hash_lookup (info->hash, n, create, TRUE, follow);
+	  h = bfd_link_hash_lookup (info->hash, n, create, true, follow);
+	  if (h != NULL)
+	    h->ref_real = 1;
 	  free (n);
 	  return h;
 	}
@@ -619,15 +623,16 @@ unwrap_hash_lookup (struct bfd_link_info
 {
   const char *l = h->root.string;
 
-  if (*l == bfd_get_symbol_leading_char (input_bfd)
-      || *l == info->wrap_char)
+  if (*l
+      && (*l == bfd_get_symbol_leading_char (input_bfd)
+	  || *l == info->wrap_char))
     ++l;
 
-  if (CONST_STRNEQ (l, WRAP))
+  if (startswith (l, WRAP))
     {
       l += sizeof WRAP - 1;
 
-      if (bfd_hash_lookup (info->wrap_hash, l, FALSE, FALSE) != NULL)
+      if (bfd_hash_lookup (info->wrap_hash, l, false, false) != NULL)
 	{
 	  char save = 0;
 	  if (l - (sizeof WRAP - 1) != h->root.string)
@@ -636,7 +641,7 @@ unwrap_hash_lookup (struct bfd_link_info
 	      save = *l;
 	      *(char *) l = *h->root.string;
 	    }
-	  h = bfd_link_hash_lookup (info->hash, l, FALSE, FALSE, FALSE);
+	  h = bfd_link_hash_lookup (info->hash, l, false, false, false);
 	  if (save)
 	    *(char *) l = save;
 	}
@@ -654,7 +659,7 @@ unwrap_hash_lookup (struct bfd_link_info
 void
 bfd_link_hash_traverse
   (struct bfd_link_hash_table *htab,
-   bfd_boolean (*func) (struct bfd_link_hash_entry *, void *),
+   bool (*func) (struct bfd_link_hash_entry *, void *),
    void *info)
 {
   unsigned int i;
@@ -751,7 +756,7 @@ _bfd_generic_link_hash_newfunc (struct b
 
       /* Set local fields.  */
       ret = (struct generic_link_hash_entry *) entry;
-      ret->written = FALSE;
+      ret->written = false;
       ret->sym = NULL;
     }
 
@@ -764,7 +769,7 @@ struct bfd_link_hash_table *
 _bfd_generic_link_hash_table_create (bfd *abfd)
 {
   struct generic_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct generic_link_hash_table);
+  size_t amt = sizeof (struct generic_link_hash_table);
 
   ret = (struct generic_link_hash_table *) bfd_malloc (amt);
   if (ret == NULL)
@@ -789,7 +794,7 @@ _bfd_generic_link_hash_table_free (bfd *
   bfd_hash_table_free (&ret->root.table);
   free (ret);
   obfd->link.hash = NULL;
-  obfd->is_linker_output = FALSE;
+  obfd->is_linker_output = false;
 }
 
 /* Grab the symbols for an object file when doing a generic link.  We
@@ -799,7 +804,7 @@ _bfd_generic_link_hash_table_free (bfd *
    the hash table pointing to different instances of the symbol
    structure.  */
 
-bfd_boolean
+bool
 bfd_generic_link_read_symbols (bfd *abfd)
 {
   if (bfd_get_outsymbols (abfd) == NULL)
@@ -809,17 +814,17 @@ bfd_generic_link_read_symbols (bfd *abfd
 
       symsize = bfd_get_symtab_upper_bound (abfd);
       if (symsize < 0)
-	return FALSE;
+	return false;
       abfd->outsymbols = bfd_alloc (abfd, symsize);
       if (bfd_get_outsymbols (abfd) == NULL && symsize != 0)
-	return FALSE;
+	return false;
       symcount = bfd_canonicalize_symtab (abfd, bfd_get_outsymbols (abfd));
       if (symcount < 0)
-	return FALSE;
+	return false;
       abfd->symcount = symcount;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Indicate that we are only retrieving symbol values from this
@@ -848,10 +853,10 @@ _bfd_generic_copy_link_hash_symbol_type
 /* Generic function to add symbols from an object file to the
    global hash table.  */
 
-bfd_boolean
+bool
 _bfd_generic_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
-  bfd_boolean ret;
+  bool ret;
 
   switch (bfd_get_format (abfd))
     {
@@ -864,7 +869,7 @@ _bfd_generic_link_add_symbols (bfd *abfd
       break;
     default:
       bfd_set_error (bfd_error_wrong_format);
-      ret = FALSE;
+      ret = false;
     }
 
   return ret;
@@ -872,7 +877,7 @@ _bfd_generic_link_add_symbols (bfd *abfd
 
 /* Add symbols from an object file to the global hash table.  */
 
-static bfd_boolean
+static bool
 generic_link_add_object_symbols (bfd *abfd,
 				 struct bfd_link_info *info)
 {
@@ -880,7 +885,7 @@ generic_link_add_object_symbols (bfd *ab
   struct bfd_symbol **outsyms;
 
   if (!bfd_generic_link_read_symbols (abfd))
-    return FALSE;
+    return false;
   symcount = _bfd_generic_link_get_symcount (abfd);
   outsyms = _bfd_generic_link_get_symbols (abfd);
   return generic_link_add_symbol_list (abfd, info, symcount, outsyms);
@@ -901,15 +906,14 @@ generic_link_add_object_symbols (bfd *ab
    those symbols instead if it does so.  CHECKFN should only return
    FALSE if some sort of error occurs.  */
 
-bfd_boolean
+bool
 _bfd_generic_link_add_archive_symbols
   (bfd *abfd,
    struct bfd_link_info *info,
-   bfd_boolean (*checkfn) (bfd *, struct bfd_link_info *,
-			   struct bfd_link_hash_entry *, const char *,
-			   bfd_boolean *))
+   bool (*checkfn) (bfd *, struct bfd_link_info *,
+		    struct bfd_link_hash_entry *, const char *, bool *))
 {
-  bfd_boolean loop;
+  bool loop;
   bfd_size_type amt;
   unsigned char *included;
 
@@ -917,18 +921,18 @@ _bfd_generic_link_add_archive_symbols
     {
       /* An empty archive is a special case.  */
       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
-	return TRUE;
+	return true;
       bfd_set_error (bfd_error_no_armap);
-      return FALSE;
+      return false;
     }
 
   amt = bfd_ardata (abfd)->symdef_count;
   if (amt == 0)
-    return TRUE;
+    return true;
   amt *= sizeof (*included);
   included = (unsigned char *) bfd_zmalloc (amt);
   if (included == NULL)
-    return FALSE;
+    return false;
 
   do
     {
@@ -937,10 +941,10 @@ _bfd_generic_link_add_archive_symbols
       carsym *arsym;
       unsigned int indx;
       file_ptr last_ar_offset = -1;
-      bfd_boolean needed = FALSE;
+      bool needed = false;
       bfd *element = NULL;
 
-      loop = FALSE;
+      loop = false;
       arsyms = bfd_ardata (abfd)->symdefs;
       arsym_end = arsyms + bfd_ardata (abfd)->symdef_count;
       for (arsym = arsyms, indx = 0; arsym < arsym_end; arsym++, indx++)
@@ -960,13 +964,13 @@ _bfd_generic_link_add_archive_symbols
 	    goto error_return;
 
 	  h = bfd_link_hash_lookup (info->hash, arsym->name,
-				    FALSE, FALSE, TRUE);
+				    false, false, true);
 
 	  if (h == NULL
 	      && info->pei386_auto_import
-	      && CONST_STRNEQ (arsym->name, "__imp_"))
+	      && startswith (arsym->name, "__imp_"))
 	    h = bfd_link_hash_lookup (info->hash, arsym->name + 6,
-				      FALSE, FALSE, TRUE);
+				      false, false, true);
 	  if (h == NULL)
 	    continue;
 
@@ -982,7 +986,8 @@ _bfd_generic_link_add_archive_symbols
 	  if (last_ar_offset != arsym->file_offset)
 	    {
 	      last_ar_offset = arsym->file_offset;
-	      element = _bfd_get_elt_at_filepos (abfd, last_ar_offset);
+	      element = _bfd_get_elt_at_filepos (abfd, last_ar_offset,
+						 info);
 	      if (element == NULL
 		  || !bfd_check_format (element, bfd_object))
 		goto error_return;
@@ -1012,34 +1017,34 @@ _bfd_generic_link_add_archive_symbols
 	      while (arsyms[mark].file_offset == last_ar_offset);
 
 	      if (undefs_tail != info->hash->undefs_tail)
-		loop = TRUE;
+		loop = true;
 	    }
 	}
     } while (loop);
 
   free (included);
-  return TRUE;
+  return true;
 
  error_return:
   free (included);
-  return FALSE;
+  return false;
 }
 
 /* See if we should include an archive element.  */
 
-static bfd_boolean
+static bool
 generic_link_check_archive_element (bfd *abfd,
 				    struct bfd_link_info *info,
 				    struct bfd_link_hash_entry *h,
 				    const char *name ATTRIBUTE_UNUSED,
-				    bfd_boolean *pneeded)
+				    bool *pneeded)
 {
   asymbol **pp, **ppend;
 
-  *pneeded = FALSE;
+  *pneeded = false;
 
   if (!bfd_generic_link_read_symbols (abfd))
-    return FALSE;
+    return false;
 
   pp = _bfd_generic_link_get_symbols (abfd);
   ppend = pp + _bfd_generic_link_get_symcount (abfd);
@@ -1059,8 +1064,8 @@ generic_link_check_archive_element (bfd
 	 symbol (type bfd_link_hash_undefweak) is not considered to be
 	 a reference when pulling files out of an archive.  See the
 	 SVR4 ABI, p. 4-27.  */
-      h = bfd_link_hash_lookup (info->hash, bfd_asymbol_name (p), FALSE,
-				FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->hash, bfd_asymbol_name (p), false,
+				false, true);
       if (h == NULL
 	  || (h->type != bfd_link_hash_undefined
 	      && h->type != bfd_link_hash_common))
@@ -1075,11 +1080,11 @@ generic_link_check_archive_element (bfd
 	  /* P is not a common symbol, or an undefined reference was
 	     created from outside BFD such as from a linker -u option.
 	     This object file defines the symbol, so pull it in.  */
-	  *pneeded = TRUE;
+	  *pneeded = true;
 	  if (!(*info->callbacks
 		->add_archive_element) (info, abfd, bfd_asymbol_name (p),
 					&abfd))
-	    return FALSE;
+	    return false;
 	  /* Potentially, the add_archive_element hook may have set a
 	     substitute BFD for us.  */
 	  return bfd_link_add_symbols (abfd, info);
@@ -1106,7 +1111,7 @@ generic_link_check_archive_element (bfd
 	    bfd_hash_allocate (&info->hash->table,
 			       sizeof (struct bfd_link_hash_common_entry));
 	  if (h->u.c.p == NULL)
-	    return FALSE;
+	    return false;
 
 	  size = bfd_asymbol_value (p);
 	  h->u.c.size = size;
@@ -1135,14 +1140,14 @@ generic_link_check_archive_element (bfd
     }
 
   /* This archive element is not needed.  */
-  return TRUE;
+  return true;
 }
 
 /* Add the symbols from an object file to the global hash table.  ABFD
    is the object file.  INFO is the linker information.  SYMBOL_COUNT
    is the number of symbols.  SYMBOLS is the list of symbols.  */
 
-static bfd_boolean
+static bool
 generic_link_add_symbol_list (bfd *abfd,
 			      struct bfd_link_info *info,
 			      bfd_size_type symbol_count,
@@ -1192,8 +1197,8 @@ generic_link_add_symbol_list (bfd *abfd,
 	  bh = NULL;
 	  if (! (_bfd_generic_link_add_one_symbol
 		 (info, abfd, name, p->flags, bfd_asymbol_section (p),
-		  p->value, string, FALSE, FALSE, &bh)))
-	    return FALSE;
+		  p->value, string, false, false, &bh)))
+	    return false;
 	  h = (struct generic_link_hash_entry *) bh;
 
 	  /* If this is a constructor symbol, and the linker didn't do
@@ -1240,7 +1245,7 @@ generic_link_add_symbol_list (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We use a state table to deal with adding symbols from an object
@@ -1301,7 +1306,7 @@ static const enum link_action link_actio
   /* current\prev    new    undef  undefw def    defw   com    indr   warn  */
   /* UNDEF_ROW	*/  {UND,   NOACT, UND,   REF,   REF,   NOACT, REFC,  WARNC },
   /* UNDEFW_ROW	*/  {WEAK,  NOACT, NOACT, REF,   REF,   NOACT, REFC,  WARNC },
-  /* DEF_ROW	*/  {DEF,   DEF,   DEF,   MDEF,  DEF,   CDEF,  MDEF,  CYCLE },
+  /* DEF_ROW	*/  {DEF,   DEF,   DEF,   MDEF,  DEF,   CDEF,  MIND,  CYCLE },
   /* DEFW_ROW	*/  {DEFW,  DEFW,  DEFW,  NOACT, NOACT, NOACT, NOACT, CYCLE },
   /* COMMON_ROW	*/  {COM,   COM,   COM,   CREF,  COM,   BIG,   REFC,  WARNC },
   /* INDR_ROW	*/  {IND,   IND,   IND,   MDEF,  IND,   CIND,  MIND,  CYCLE },
@@ -1373,7 +1378,7 @@ hash_entry_bfd (struct bfd_link_hash_ent
      entry; if *HASHP is not NULL, the caller has already looked up
      the hash table entry, and stored it in *HASHP.  */
 
-bfd_boolean
+bool
 _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
 				  bfd *abfd,
 				  const char *name,
@@ -1381,14 +1386,14 @@ _bfd_generic_link_add_one_symbol (struct
 				  asection *section,
 				  bfd_vma value,
 				  const char *string,
-				  bfd_boolean copy,
-				  bfd_boolean collect,
+				  bool copy,
+				  bool collect,
 				  struct bfd_link_hash_entry **hashp)
 {
   enum link_row row;
   struct bfd_link_hash_entry *h;
   struct bfd_link_hash_entry *inh = NULL;
-  bfd_boolean cycle;
+  bool cycle;
 
   BFD_ASSERT (section != NULL);
 
@@ -1399,10 +1404,10 @@ _bfd_generic_link_add_one_symbol (struct
       /* Create the indirect symbol here.  This is for the benefit of
 	 the plugin "notice" function.
 	 STRING is the name of the symbol we want to indirect to.  */
-      inh = bfd_wrapped_link_hash_lookup (abfd, info, string, TRUE,
-					  copy, FALSE);
+      inh = bfd_wrapped_link_hash_lookup (abfd, info, string, true,
+					  copy, false);
       if (inh == NULL)
-	return FALSE;
+	return false;
     }
   else if ((flags & BSF_WARNING) != 0)
     row = WARN_ROW;
@@ -1421,6 +1426,7 @@ _bfd_generic_link_add_one_symbol (struct
     {
       row = COMMON_ROW;
       if (!bfd_link_relocatable (info)
+	  && name != NULL
 	  && name[0] == '_'
 	  && name[1] == '_'
 	  && strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0)
@@ -1435,24 +1441,24 @@ _bfd_generic_link_add_one_symbol (struct
   else
     {
       if (row == UNDEF_ROW || row == UNDEFW_ROW)
-	h = bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, copy, FALSE);
+	h = bfd_wrapped_link_hash_lookup (abfd, info, name, true, copy, false);
       else
-	h = bfd_link_hash_lookup (info->hash, name, TRUE, copy, FALSE);
+	h = bfd_link_hash_lookup (info->hash, name, true, copy, false);
       if (h == NULL)
 	{
 	  if (hashp != NULL)
 	    *hashp = NULL;
-	  return FALSE;
+	  return false;
 	}
     }
 
   if (info->notice_all
       || (info->notice_hash != NULL
-	  && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
+	  && bfd_hash_lookup (info->notice_hash, name, false, false) != NULL))
     {
       if (! (*info->callbacks->notice) (info, h, inh,
 					abfd, section, value, flags))
-	return FALSE;
+	return false;
     }
 
   if (hashp != NULL)
@@ -1467,7 +1473,7 @@ _bfd_generic_link_add_one_symbol (struct
       /* Treat symbols defined by early linker script pass as undefined.  */
       if (h->ldscript_def)
 	prev = bfd_link_hash_undefined;
-      cycle = FALSE;
+      cycle = false;
       action = link_action[(int) row][prev];
       switch (action)
 	{
@@ -1536,7 +1542,7 @@ _bfd_generic_link_add_one_symbol (struct
 		s = name + 1;
 		while (*s == '_')
 		  ++s;
-		if (s[0] == 'G' && CONST_STRNEQ (s, CONS_PREFIX))
+		if (s[0] == 'G' && startswith (s, CONS_PREFIX))
 		  {
 		    char c;
 
@@ -1573,7 +1579,7 @@ _bfd_generic_link_add_one_symbol (struct
 	    bfd_hash_allocate (&info->hash->table,
 			       sizeof (struct bfd_link_hash_common_entry));
 	  if (h->u.c.p == NULL)
-	    return FALSE;
+	    return false;
 
 	  h->u.c.size = value;
 
@@ -1672,7 +1678,18 @@ _bfd_generic_link_add_one_symbol (struct
 	case MIND:
 	  /* Multiple indirect symbols.  This is OK if they both point
 	     to the same symbol.  */
-	  if (strcmp (h->u.i.link->root.string, string) == 0)
+	  if (h->u.i.link->type == bfd_link_hash_defweak)
+	    {
+	      /* It is also OK to redefine a symbol that indirects to
+		 a weak definition.  So for sym@ver -> sym@@ver where
+		 sym@@ver is weak and we have a new strong sym@ver,
+		 redefine sym@@ver.  Of course if there exists
+		 sym -> sym@@ver then this also redefines sym.  */
+	      h = h->u.i.link;
+	      cycle = true;
+	      break;
+	    }
+	  if (string != NULL && strcmp (h->u.i.link->root.string, string) == 0)
 	    break;
 	  /* Fall through.  */
 	case MDEF:
@@ -1696,7 +1713,7 @@ _bfd_generic_link_add_one_symbol (struct
 		(_("%pB: indirect symbol `%s' to `%s' is a loop"),
 		 abfd, name, string);
 	      bfd_set_error (bfd_error_invalid_operation);
-	      return FALSE;
+	      return false;
 	    }
 	  if (inh->type == bfd_link_hash_new)
 	    {
@@ -1712,7 +1729,7 @@ _bfd_generic_link_add_one_symbol (struct
 	      /* ??? If inh->type == bfd_link_hash_undefweak this
 		 converts inh to bfd_link_hash_undefined.  */
 	      row = UNDEF_ROW;
-	      cycle = TRUE;
+	      cycle = true;
 	    }
 
 	  h->type = bfd_link_hash_indirect;
@@ -1746,7 +1763,7 @@ _bfd_generic_link_add_one_symbol (struct
 	case CYCLE:
 	  /* Try again with the referenced symbol.  */
 	  h = h->u.i.link;
-	  cycle = TRUE;
+	  cycle = true;
 	  break;
 
 	case REFC:
@@ -1754,7 +1771,7 @@ _bfd_generic_link_add_one_symbol (struct
 	  if (h->u.undef.next == NULL && info->hash->undefs_tail != h)
 	    h->u.undef.next = h;
 	  h = h->u.i.link;
-	  cycle = TRUE;
+	  cycle = true;
 	  break;
 
 	case WARN:
@@ -1767,6 +1784,14 @@ _bfd_generic_link_add_one_symbol (struct
 	    {
 	      (*info->callbacks->warning) (info, string, h->root.string,
 					   hash_entry_bfd (h), NULL, 0);
+	      /* PR 31067: If garbage collection is enabled then the
+		 referenced symbol may actually be discarded later on.
+		 This could be very confusing to the user.  So give them
+		 a hint as to what might be happening.  */
+	      if (info->gc_sections)
+		(*info->callbacks->info)
+		  (_("%P: %pB: note: the message above does not take linker garbage collection into account\n"),
+		   hash_entry_bfd (h));
 	      break;
 	    }
 	  /* Fall through.  */
@@ -1780,7 +1805,7 @@ _bfd_generic_link_add_one_symbol (struct
 		   ((*info->hash->table.newfunc)
 		    (NULL, &info->hash->table, h->root.string)));
 	    if (sub == NULL)
-	      return FALSE;
+	      return false;
 	    *sub = *h;
 	    sub->type = bfd_link_hash_warning;
 	    sub->u.i.link = h;
@@ -1793,7 +1818,7 @@ _bfd_generic_link_add_one_symbol (struct
 
 		w = (char *) bfd_hash_allocate (&info->hash->table, len);
 		if (w == NULL)
-		  return FALSE;
+		  return false;
 		memcpy (w, string, len);
 		sub->u.i.warning = w;
 	      }
@@ -1809,12 +1834,12 @@ _bfd_generic_link_add_one_symbol (struct
     }
   while (cycle);
 
-  return TRUE;
+  return true;
 }
 
 /* Generic final link routine.  */
 
-bfd_boolean
+bool
 _bfd_generic_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   bfd *sub;
@@ -1831,12 +1856,12 @@ _bfd_generic_final_link (bfd *abfd, stru
   for (o = abfd->sections; o != NULL; o = o->next)
     for (p = o->map_head.link_order; p != NULL; p = p->next)
       if (p->type == bfd_indirect_link_order)
-	p->u.indirect.section->linker_mark = TRUE;
+	p->u.indirect.section->linker_mark = true;
 
   /* Build the output symbol table.  */
   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
     if (! _bfd_generic_link_output_symbols (abfd, sub, info, &outsymalloc))
-      return FALSE;
+      return false;
 
   /* Accumulate the global symbols.  */
   wginfo.info = info;
@@ -1850,7 +1875,7 @@ _bfd_generic_final_link (bfd *abfd, stru
      shouldn't really need one, since we have SYMCOUNT, but some old
      code still expects one.  */
   if (! generic_add_output_symbol (abfd, &outsymalloc, NULL))
-    return FALSE;
+    return false;
 
   if (bfd_link_relocatable (info))
     {
@@ -1877,10 +1902,10 @@ _bfd_generic_final_link (bfd *abfd, stru
 		  relsize = bfd_get_reloc_upper_bound (input_bfd,
 						       input_section);
 		  if (relsize < 0)
-		    return FALSE;
+		    return false;
 		  relocs = (arelent **) bfd_malloc (relsize);
 		  if (!relocs && relsize != 0)
-		    return FALSE;
+		    return false;
 		  symbols = _bfd_generic_link_get_symbols (input_bfd);
 		  reloc_count = bfd_canonicalize_reloc (input_bfd,
 							input_section,
@@ -1888,7 +1913,7 @@ _bfd_generic_final_link (bfd *abfd, stru
 							symbols);
 		  free (relocs);
 		  if (reloc_count < 0)
-		    return FALSE;
+		    return false;
 		  BFD_ASSERT ((unsigned long) reloc_count
 			      == input_section->reloc_count);
 		  o->reloc_count += reloc_count;
@@ -1902,7 +1927,7 @@ _bfd_generic_final_link (bfd *abfd, stru
 	      amt *= sizeof (arelent *);
 	      o->orelocation = (struct reloc_cache_entry **) bfd_alloc (abfd, amt);
 	      if (!o->orelocation)
-		return FALSE;
+		return false;
 	      o->flags |= SEC_RELOC;
 	      /* Reset the count so that it can be used as an index
 		 when putting in the output relocs.  */
@@ -1921,26 +1946,26 @@ _bfd_generic_final_link (bfd *abfd, stru
 	    case bfd_section_reloc_link_order:
 	    case bfd_symbol_reloc_link_order:
 	      if (! _bfd_generic_reloc_link_order (abfd, info, o, p))
-		return FALSE;
+		return false;
 	      break;
 	    case bfd_indirect_link_order:
-	      if (! default_indirect_link_order (abfd, info, o, p, TRUE))
-		return FALSE;
+	      if (! default_indirect_link_order (abfd, info, o, p, true))
+		return false;
 	      break;
 	    default:
 	      if (! _bfd_default_link_order (abfd, info, o, p))
-		return FALSE;
+		return false;
 	      break;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Add an output symbol to the output BFD.  */
 
-static bfd_boolean
+static bool
 generic_add_output_symbol (bfd *output_bfd, size_t *psymalloc, asymbol *sym)
 {
   if (bfd_get_symcount (output_bfd) >= *psymalloc)
@@ -1956,7 +1981,7 @@ generic_add_output_symbol (bfd *output_b
       amt *= sizeof (asymbol *);
       newsyms = (asymbol **) bfd_realloc (bfd_get_outsymbols (output_bfd), amt);
       if (newsyms == NULL)
-	return FALSE;
+	return false;
       output_bfd->outsymbols = newsyms;
     }
 
@@ -1964,12 +1989,12 @@ generic_add_output_symbol (bfd *output_b
   if (sym != NULL)
     ++output_bfd->symcount;
 
-  return TRUE;
+  return true;
 }
 
 /* Handle the symbols for an input BFD.  */
 
-bfd_boolean
+bool
 _bfd_generic_link_output_symbols (bfd *output_bfd,
 				  bfd *input_bfd,
 				  struct bfd_link_info *info,
@@ -1979,7 +2004,7 @@ _bfd_generic_link_output_symbols (bfd *o
   asymbol **sym_end;
 
   if (!bfd_generic_link_read_symbols (input_bfd))
-    return FALSE;
+    return false;
 
   /* Create a filename symbol if we are supposed to.  */
   if (info->create_object_symbols_section != NULL)
@@ -1994,15 +2019,15 @@ _bfd_generic_link_output_symbols (bfd *o
 
 	      newsym = bfd_make_empty_symbol (input_bfd);
 	      if (!newsym)
-		return FALSE;
-	      newsym->name = input_bfd->filename;
+		return false;
+	      newsym->name = bfd_get_filename (input_bfd);
 	      newsym->value = 0;
 	      newsym->flags = BSF_LOCAL | BSF_FILE;
 	      newsym->section = sec;
 
 	      if (! generic_add_output_symbol (output_bfd, psymalloc,
 					       newsym))
-		return FALSE;
+		return false;
 
 	      break;
 	    }
@@ -2017,7 +2042,7 @@ _bfd_generic_link_output_symbols (bfd *o
     {
       asymbol *sym;
       struct generic_link_hash_entry *h;
-      bfd_boolean output;
+      bool output;
 
       h = NULL;
       sym = *sym_ptr;
@@ -2048,11 +2073,11 @@ _bfd_generic_link_output_symbols (bfd *o
 	    h = ((struct generic_link_hash_entry *)
 		 bfd_wrapped_link_hash_lookup (output_bfd, info,
 					       bfd_asymbol_name (sym),
-					       FALSE, FALSE, TRUE));
+					       false, false, true));
 	  else
 	    h = _bfd_generic_link_hash_lookup (_bfd_generic_hash_table (info),
 					       bfd_asymbol_name (sym),
-					       FALSE, FALSE, TRUE);
+					       false, false, true);
 
 	  if (h != NULL)
 	    {
@@ -2115,8 +2140,8 @@ _bfd_generic_link_output_symbols (bfd *o
 	  && (info->strip == strip_all
 	      || (info->strip == strip_some
 		  && bfd_hash_lookup (info->keep_hash, bfd_asymbol_name (sym),
-				      FALSE, FALSE) == NULL)))
-	output = FALSE;
+				      false, false) == NULL)))
+	output = false;
       else if ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0)
 	{
 	  /* If this symbol is marked as occurring now, rather
@@ -2125,50 +2150,50 @@ _bfd_generic_link_output_symbols (bfd *o
 	     better way.  */
 	  if (bfd_asymbol_bfd (sym) == input_bfd
 	      && (sym->flags & BSF_NOT_AT_END) != 0)
-	    output = TRUE;
+	    output = true;
 	  else
-	    output = FALSE;
+	    output = false;
 	}
       else if ((sym->flags & BSF_KEEP) != 0)
-	output = TRUE;
+	output = true;
       else if (bfd_is_ind_section (sym->section))
-	output = FALSE;
+	output = false;
       else if ((sym->flags & BSF_DEBUGGING) != 0)
 	{
 	  if (info->strip == strip_none)
-	    output = TRUE;
+	    output = true;
 	  else
-	    output = FALSE;
+	    output = false;
 	}
       else if (bfd_is_und_section (sym->section)
 	       || bfd_is_com_section (sym->section))
-	output = FALSE;
+	output = false;
       else if ((sym->flags & BSF_LOCAL) != 0)
 	{
 	  if ((sym->flags & BSF_WARNING) != 0)
-	    output = FALSE;
+	    output = false;
 	  else
 	    {
 	      switch (info->discard)
 		{
 		default:
 		case discard_all:
-		  output = FALSE;
+		  output = false;
 		  break;
 		case discard_sec_merge:
-		  output = TRUE;
+		  output = true;
 		  if (bfd_link_relocatable (info)
 		      || ! (sym->section->flags & SEC_MERGE))
 		    break;
 		  /* FALLTHROUGH */
 		case discard_l:
 		  if (bfd_is_local_label (input_bfd, sym))
-		    output = FALSE;
+		    output = false;
 		  else
-		    output = TRUE;
+		    output = true;
 		  break;
 		case discard_none:
-		  output = TRUE;
+		  output = true;
 		  break;
 		}
 	    }
@@ -2176,16 +2201,16 @@ _bfd_generic_link_output_symbols (bfd *o
       else if ((sym->flags & BSF_CONSTRUCTOR))
 	{
 	  if (info->strip != strip_all)
-	    output = TRUE;
+	    output = true;
 	  else
-	    output = FALSE;
+	    output = false;
 	}
       else if (sym->flags == 0
 	       && (sym->section->owner->flags & BFD_PLUGIN) != 0)
 	/* LTO doesn't set symbol information.  We get here with the
 	   generic linker for a symbol that was "common" but no longer
 	   needs to be global.  */
-	output = FALSE;
+	output = false;
       else
 	abort ();
 
@@ -2195,18 +2220,18 @@ _bfd_generic_link_output_symbols (bfd *o
       if (!bfd_is_abs_section (sym->section)
 	  && bfd_section_removed_from_list (output_bfd,
 					    sym->section->output_section))
-	output = FALSE;
+	output = false;
 
       if (output)
 	{
 	  if (! generic_add_output_symbol (output_bfd, psymalloc, sym))
-	    return FALSE;
+	    return false;
 	  if (h != NULL)
-	    h->written = TRUE;
+	    h->written = true;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the section and value of a generic BFD symbol based on a linker
@@ -2273,7 +2298,7 @@ set_symbol_from_hash (asymbol *sym, stru
 /* Write out a global symbol, if it hasn't already been written out.
    This is called for each symbol in the hash table.  */
 
-bfd_boolean
+bool
 _bfd_generic_link_write_global_symbol (struct generic_link_hash_entry *h,
 				       void *data)
 {
@@ -2282,15 +2307,15 @@ _bfd_generic_link_write_global_symbol (s
   asymbol *sym;
 
   if (h->written)
-    return TRUE;
+    return true;
 
-  h->written = TRUE;
+  h->written = true;
 
   if (wginfo->info->strip == strip_all
       || (wginfo->info->strip == strip_some
 	  && bfd_hash_lookup (wginfo->info->keep_hash, h->root.root.string,
-			      FALSE, FALSE) == NULL))
-    return TRUE;
+			      false, false) == NULL))
+    return true;
 
   if (h->sym != NULL)
     sym = h->sym;
@@ -2298,7 +2323,7 @@ _bfd_generic_link_write_global_symbol (s
     {
       sym = bfd_make_empty_symbol (wginfo->output_bfd);
       if (!sym)
-	return FALSE;
+	return false;
       sym->name = h->root.root.string;
       sym->flags = 0;
     }
@@ -2314,12 +2339,12 @@ _bfd_generic_link_write_global_symbol (s
       abort ();
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Create a relocation.  */
 
-bfd_boolean
+bool
 _bfd_generic_reloc_link_order (bfd *abfd,
 			       struct bfd_link_info *info,
 			       asection *sec,
@@ -2334,14 +2359,14 @@ _bfd_generic_reloc_link_order (bfd *abfd
 
   r = (arelent *) bfd_alloc (abfd, sizeof (arelent));
   if (r == NULL)
-    return FALSE;
+    return false;
 
   r->address = link_order->offset;
   r->howto = bfd_reloc_type_lookup (abfd, link_order->u.reloc.p->reloc);
   if (r->howto == 0)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* Get the symbol to use for the relocation.  */
@@ -2354,14 +2379,14 @@ _bfd_generic_reloc_link_order (bfd *abfd
       h = ((struct generic_link_hash_entry *)
 	   bfd_wrapped_link_hash_lookup (abfd, info,
 					 link_order->u.reloc.p->u.name,
-					 FALSE, FALSE, TRUE));
+					 false, false, true));
       if (h == NULL
 	  || ! h->written)
 	{
 	  (*info->callbacks->unattached_reloc)
 	    (info, link_order->u.reloc.p->u.name, NULL, NULL, 0);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       r->sym_ptr_ptr = &h->sym;
     }
@@ -2375,13 +2400,13 @@ _bfd_generic_reloc_link_order (bfd *abfd
       bfd_size_type size;
       bfd_reloc_status_type rstat;
       bfd_byte *buf;
-      bfd_boolean ok;
+      bool ok;
       file_ptr loc;
 
       size = bfd_get_reloc_size (r->howto);
       buf = (bfd_byte *) bfd_zmalloc (size);
       if (buf == NULL && size != 0)
-	return FALSE;
+	return false;
       rstat = _bfd_relocate_contents (r->howto, abfd,
 				      (bfd_vma) link_order->u.reloc.p->addend,
 				      buf);
@@ -2406,7 +2431,7 @@ _bfd_generic_reloc_link_order (bfd *abfd
       ok = bfd_set_section_contents (abfd, sec, buf, loc, size);
       free (buf);
       if (! ok)
-	return FALSE;
+	return false;
 
       r->addend = 0;
     }
@@ -2414,7 +2439,7 @@ _bfd_generic_reloc_link_order (bfd *abfd
   sec->orelocation[sec->reloc_count] = r;
   ++sec->reloc_count;
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate a new link_order for a section.  */
@@ -2422,7 +2447,7 @@ _bfd_generic_reloc_link_order (bfd *abfd
 struct bfd_link_order *
 bfd_new_link_order (bfd *abfd, asection *section)
 {
-  bfd_size_type amt = sizeof (struct bfd_link_order);
+  size_t amt = sizeof (struct bfd_link_order);
   struct bfd_link_order *new_lo;
 
   new_lo = (struct bfd_link_order *) bfd_zalloc (abfd, amt);
@@ -2444,7 +2469,7 @@ bfd_new_link_order (bfd *abfd, asection
    the reloc_link_order types here, since they depend upon the details
    of how the particular backends generates relocs.  */
 
-bfd_boolean
+bool
 _bfd_default_link_order (bfd *abfd,
 			 struct bfd_link_info *info,
 			 asection *sec,
@@ -2459,7 +2484,7 @@ _bfd_default_link_order (bfd *abfd,
       abort ();
     case bfd_indirect_link_order:
       return default_indirect_link_order (abfd, info, sec, link_order,
-					  FALSE);
+					  false);
     case bfd_data_link_order:
       return default_data_link_order (abfd, info, sec, link_order);
     }
@@ -2467,7 +2492,7 @@ _bfd_default_link_order (bfd *abfd,
 
 /* Default routine to handle a bfd_data_link_order.  */
 
-static bfd_boolean
+static bool
 default_data_link_order (bfd *abfd,
 			 struct bfd_link_info *info,
 			 asection *sec,
@@ -2477,13 +2502,13 @@ default_data_link_order (bfd *abfd,
   size_t fill_size;
   bfd_byte *fill;
   file_ptr loc;
-  bfd_boolean result;
+  bool result;
 
   BFD_ASSERT ((sec->flags & SEC_HAS_CONTENTS) != 0);
 
   size = link_order->size;
   if (size == 0)
-    return TRUE;
+    return true;
 
   fill = link_order->u.data.contents;
   fill_size = link_order->u.data.size;
@@ -2492,14 +2517,14 @@ default_data_link_order (bfd *abfd,
       fill = abfd->arch_info->fill (size, info->big_endian,
 				    (sec->flags & SEC_CODE) != 0);
       if (fill == NULL)
-	return FALSE;
+	return false;
     }
   else if (fill_size < size)
     {
       bfd_byte *p;
       fill = (bfd_byte *) bfd_malloc (size);
       if (fill == NULL)
-	return FALSE;
+	return false;
       p = fill;
       if (fill_size == 1)
 	memset (p, (int) link_order->u.data.contents[0], (size_t) size);
@@ -2528,18 +2553,17 @@ default_data_link_order (bfd *abfd,
 
 /* Default routine to handle a bfd_indirect_link_order.  */
 
-static bfd_boolean
+static bool
 default_indirect_link_order (bfd *output_bfd,
 			     struct bfd_link_info *info,
 			     asection *output_section,
 			     struct bfd_link_order *link_order,
-			     bfd_boolean generic_linker)
+			     bool generic_linker)
 {
   asection *input_section;
   bfd *input_bfd;
-  bfd_byte *contents = NULL;
+  bfd_byte *alloced = NULL;
   bfd_byte *new_contents;
-  bfd_size_type sec_size;
   file_ptr loc;
 
   BFD_ASSERT ((output_section->flags & SEC_HAS_CONTENTS) != 0);
@@ -2547,7 +2571,7 @@ default_indirect_link_order (bfd *output
   input_section = link_order->u.indirect.section;
   input_bfd = input_section->owner;
   if (input_section->size == 0)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (input_section->output_section == output_section);
   BFD_ASSERT (input_section->output_offset == link_order->offset);
@@ -2567,7 +2591,7 @@ default_indirect_link_order (bfd *output
 	(_("attempt to do relocatable link with %s input and %s output"),
 	 bfd_get_target (input_bfd), bfd_get_target (output_bfd));
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   if (! generic_linker)
@@ -2580,7 +2604,7 @@ default_indirect_link_order (bfd *output
 	 a specific linker, presumably because we are linking
 	 different types of object files together.  */
       if (!bfd_generic_link_read_symbols (input_bfd))
-	return FALSE;
+	return false;
 
       /* Since we have been called by a specific linker, rather than
 	 the generic linker, the values of the symbols will not be
@@ -2612,11 +2636,11 @@ default_indirect_link_order (bfd *output
 	      else if (bfd_is_und_section (bfd_asymbol_section (sym)))
 		h = bfd_wrapped_link_hash_lookup (output_bfd, info,
 						  bfd_asymbol_name (sym),
-						  FALSE, FALSE, TRUE);
+						  false, false, true);
 	      else
 		h = bfd_link_hash_lookup (info->hash,
 					  bfd_asymbol_name (sym),
-					  FALSE, FALSE, TRUE);
+					  false, false, true);
 	      if (h != NULL)
 		set_symbol_from_hash (sym, h);
 	    }
@@ -2640,16 +2664,11 @@ default_indirect_link_order (bfd *output
   else
     {
       /* Get and relocate the section contents.  */
-      sec_size = (input_section->rawsize > input_section->size
-		  ? input_section->rawsize
-		  : input_section->size);
-      contents = (bfd_byte *) bfd_malloc (sec_size);
-      if (contents == NULL && sec_size != 0)
-	goto error_return;
       new_contents = (bfd_get_relocated_section_contents
-		      (output_bfd, info, link_order, contents,
+		      (output_bfd, info, link_order, NULL,
 		       bfd_link_relocatable (info),
 		       _bfd_generic_link_get_symbols (input_bfd)));
+      alloced = new_contents;
       if (!new_contents)
 	goto error_return;
     }
@@ -2661,14 +2680,12 @@ default_indirect_link_order (bfd *output
 				  new_contents, loc, input_section->size))
     goto error_return;
 
-  if (contents != NULL)
-    free (contents);
-  return TRUE;
+  free (alloced);
+  return true;
 
  error_return:
-  if (contents != NULL)
-    free (contents);
-  return FALSE;
+  free (alloced);
+  return false;
 }
 
 /* A little routine to count the number of relocs in a link_order
@@ -2696,7 +2713,7 @@ FUNCTION
 	bfd_link_split_section
 
 SYNOPSIS
-	bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
+	bool bfd_link_split_section (bfd *abfd, asection *sec);
 
 DESCRIPTION
 	Return nonzero if @var{sec} should be split during a
@@ -2708,11 +2725,11 @@ DESCRIPTION
 
 */
 
-bfd_boolean
+bool
 _bfd_generic_link_split_section (bfd *abfd ATTRIBUTE_UNUSED,
 				 asection *sec ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
 /*
@@ -2720,9 +2737,9 @@ FUNCTION
 	bfd_section_already_linked
 
 SYNOPSIS
-	bfd_boolean bfd_section_already_linked (bfd *abfd,
-						asection *sec,
-						struct bfd_link_info *info);
+	bool bfd_section_already_linked (bfd *abfd,
+					 asection *sec,
+					 struct bfd_link_info *info);
 
 DESCRIPTION
 	Check if @var{data} has been already linked during a reloceatable
@@ -2752,12 +2769,11 @@ static struct bfd_hash_table _bfd_sectio
 
 void
 bfd_section_already_linked_table_traverse
-  (bfd_boolean (*func) (struct bfd_section_already_linked_hash_entry *,
-			void *), void *info)
+  (bool (*func) (struct bfd_section_already_linked_hash_entry *, void *),
+   void *info)
 {
   bfd_hash_traverse (&_bfd_section_already_linked_table,
-		     (bfd_boolean (*) (struct bfd_hash_entry *,
-				       void *)) func,
+		     (bool (*) (struct bfd_hash_entry *, void *)) func,
 		     info);
 }
 
@@ -2766,10 +2782,10 @@ bfd_section_already_linked_table_lookup
 {
   return ((struct bfd_section_already_linked_hash_entry *)
 	  bfd_hash_lookup (&_bfd_section_already_linked_table, name,
-			   TRUE, FALSE));
+			   true, false));
 }
 
-bfd_boolean
+bool
 bfd_section_already_linked_table_insert
   (struct bfd_section_already_linked_hash_entry *already_linked_list,
    asection *sec)
@@ -2781,11 +2797,11 @@ bfd_section_already_linked_table_insert
   l = (struct bfd_section_already_linked *)
       bfd_hash_allocate (&_bfd_section_already_linked_table, sizeof *l);
   if (l == NULL)
-    return FALSE;
+    return false;
   l->sec = sec;
   l->next = already_linked_list->entry;
   already_linked_list->entry = l;
-  return TRUE;
+  return true;
 }
 
 static struct bfd_hash_entry *
@@ -2805,7 +2821,7 @@ already_linked_newfunc (struct bfd_hash_
   return &ret->root;
 }
 
-bfd_boolean
+bool
 bfd_section_already_linked_table_init (void)
 {
   return bfd_hash_table_init_n (&_bfd_section_already_linked_table,
@@ -2823,7 +2839,7 @@ bfd_section_already_linked_table_free (v
 /* Report warnings as appropriate for duplicate section SEC.
    Return FALSE if we decide to keep SEC after all.  */
 
-bfd_boolean
+bool
 _bfd_handle_already_linked (asection *sec,
 			    struct bfd_section_already_linked *l,
 			    struct bfd_link_info *info)
@@ -2844,7 +2860,7 @@ _bfd_handle_already_linked (asection *se
 	  && (l->sec->owner->flags & BFD_PLUGIN) != 0)
 	{
 	  l->sec = sec;
-	  return FALSE;
+	  return false;
 	}
       break;
 
@@ -2875,29 +2891,38 @@ _bfd_handle_already_linked (asection *se
 	   sec->owner, sec);
       else if (sec->size != 0)
 	{
-	  bfd_byte *sec_contents, *l_sec_contents = NULL;
+	  bfd_byte *sec_contents, *l_sec_contents;
 
-	  if (!bfd_malloc_and_get_section (sec->owner, sec, &sec_contents))
-	    info->callbacks->einfo
-	      /* xgettext:c-format */
-	      (_("%pB: could not read contents of section `%pA'\n"),
-	       sec->owner, sec);
-	  else if (!bfd_malloc_and_get_section (l->sec->owner, l->sec,
-						&l_sec_contents))
+	  if ((sec->flags & SEC_HAS_CONTENTS) == 0
+	      && (l->sec->flags & SEC_HAS_CONTENTS) == 0)
+	    ;
+	  else if ((sec->flags & SEC_HAS_CONTENTS) == 0
+		   || !bfd_malloc_and_get_section (sec->owner, sec,
+						   &sec_contents))
 	    info->callbacks->einfo
 	      /* xgettext:c-format */
 	      (_("%pB: could not read contents of section `%pA'\n"),
-	       l->sec->owner, l->sec);
-	  else if (memcmp (sec_contents, l_sec_contents, sec->size) != 0)
-	    info->callbacks->einfo
-	      /* xgettext:c-format */
-	      (_("%pB: duplicate section `%pA' has different contents\n"),
 	       sec->owner, sec);
-
-	  if (sec_contents)
-	    free (sec_contents);
-	  if (l_sec_contents)
-	    free (l_sec_contents);
+	  else if ((l->sec->flags & SEC_HAS_CONTENTS) == 0
+		   || !bfd_malloc_and_get_section (l->sec->owner, l->sec,
+						   &l_sec_contents))
+	    {
+	      info->callbacks->einfo
+		/* xgettext:c-format */
+		(_("%pB: could not read contents of section `%pA'\n"),
+		 l->sec->owner, l->sec);
+	      free (sec_contents);
+	    }
+	  else
+	    {
+	      if (memcmp (sec_contents, l_sec_contents, sec->size) != 0)
+		info->callbacks->einfo
+		  /* xgettext:c-format */
+		  (_("%pB: duplicate section `%pA' has different contents\n"),
+		   sec->owner, sec);
+	      free (l_sec_contents);
+	      free (sec_contents);
+	    }
 	}
       break;
     }
@@ -2909,12 +2934,12 @@ _bfd_handle_already_linked (asection *se
      which we are really going to use.  */
   sec->output_section = bfd_abs_section_ptr;
   sec->kept_section = l->sec;
-  return TRUE;
+  return true;
 }
 
 /* This is used on non-ELF inputs.  */
 
-bfd_boolean
+bool
 _bfd_generic_section_already_linked (bfd *abfd ATTRIBUTE_UNUSED,
 				     asection *sec,
 				     struct bfd_link_info *info)
@@ -2924,11 +2949,11 @@ _bfd_generic_section_already_linked (bfd
   struct bfd_section_already_linked_hash_entry *already_linked_list;
 
   if ((sec->flags & SEC_LINK_ONCE) == 0)
-    return FALSE;
+    return false;
 
   /* The generic linker doesn't handle section groups.  */
   if ((sec->flags & SEC_GROUP) != 0)
-    return FALSE;
+    return false;
 
   /* FIXME: When doing a relocatable link, we may have trouble
      copying relocations in other sections that refer to local symbols
@@ -2958,7 +2983,7 @@ _bfd_generic_section_already_linked (bfd
   /* This is the first section with this name.  Record it.  */
   if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
-  return FALSE;
+  return false;
 }
 
 /* Choose a neighbouring section to S in OBFD that will be output, or
@@ -3033,7 +3058,7 @@ _bfd_nearby_section (bfd *obfd, asection
 
 /* Convert symbols in excluded output sections to use a kept section.  */
 
-static bfd_boolean
+static bool
 fix_syms (struct bfd_link_hash_entry *h, void *data)
 {
   bfd *obfd = (bfd *) data;
@@ -3056,7 +3081,7 @@ fix_syms (struct bfd_link_hash_entry *h,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 void
@@ -3070,7 +3095,7 @@ FUNCTION
 	bfd_generic_define_common_symbol
 
 SYNOPSIS
-	bfd_boolean bfd_generic_define_common_symbol
+	bool bfd_generic_define_common_symbol
 	  (bfd *output_bfd, struct bfd_link_info *info,
 	   struct bfd_link_hash_entry *h);
 
@@ -3083,7 +3108,7 @@ DESCRIPTION
 .
 */
 
-bfd_boolean
+bool
 bfd_generic_define_common_symbol (bfd *output_bfd,
 				  struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				  struct bfd_link_hash_entry *h)
@@ -3099,8 +3124,13 @@ bfd_generic_define_common_symbol (bfd *o
   section = h->u.c.p->section;
 
   /* Increase the size of the section to align the common symbol.
-     The alignment must be a power of two.  */
-  alignment = bfd_octets_per_byte (output_bfd, section) << power_of_two;
+     The alignment must be a power of two.  But if the section does
+     not have any alignment requirement then do not increase the
+     alignment unnecessarily.  */
+  if (power_of_two)
+    alignment = bfd_octets_per_byte (output_bfd, section) << power_of_two;
+  else
+    alignment = 1;
   BFD_ASSERT (alignment != 0 && (alignment & -alignment) == alignment);
   section->size += alignment - 1;
   section->size &= -alignment;
@@ -3121,7 +3151,7 @@ bfd_generic_define_common_symbol (bfd *o
      it is no longer a common section.  */
   section->flags |= SEC_ALLOC;
   section->flags &= ~(SEC_IS_COMMON | SEC_HAS_CONTENTS);
-  return TRUE;
+  return true;
 }
 
 /*
@@ -3174,8 +3204,9 @@ bfd_generic_define_start_stop (struct bf
 {
   struct bfd_link_hash_entry *h;
 
-  h = bfd_link_hash_lookup (info->hash, symbol, FALSE, FALSE, TRUE);
+  h = bfd_link_hash_lookup (info->hash, symbol, false, false, true);
   if (h != NULL
+      && !h->ldscript_def
       && (h->type == bfd_link_hash_undefined
 	  || h->type == bfd_link_hash_undefweak))
     {
@@ -3194,7 +3225,7 @@ FUNCTION
 SYNOPSIS
 	struct bfd_elf_version_tree * bfd_find_version_for_sym
 	  (struct bfd_elf_version_tree *verdefs,
-	   const char *sym_name, bfd_boolean *hide);
+	   const char *sym_name, bool *hide);
 
 DESCRIPTION
 	Search an elf version script tree for symbol versioning
@@ -3207,7 +3238,7 @@ DESCRIPTION
 struct bfd_elf_version_tree *
 bfd_find_version_for_sym (struct bfd_elf_version_tree *verdefs,
 			  const char *sym_name,
-			  bfd_boolean *hide)
+			  bool *hide)
 {
   struct bfd_elf_version_tree *t;
   struct bfd_elf_version_tree *local_ver, *global_ver, *exist_ver;
@@ -3287,7 +3318,7 @@ bfd_find_version_for_sym (struct bfd_elf
 
   if (local_ver != NULL)
     {
-      *hide = TRUE;
+      *hide = true;
       return local_ver;
     }
 
@@ -3299,7 +3330,7 @@ FUNCTION
 	bfd_hide_sym_by_version
 
 SYNOPSIS
-	bfd_boolean bfd_hide_sym_by_version
+	bool bfd_hide_sym_by_version
 	  (struct bfd_elf_version_tree *verdefs, const char *sym_name);
 
 DESCRIPTION
@@ -3308,11 +3339,11 @@ DESCRIPTION
 
 */
 
-bfd_boolean
+bool
 bfd_hide_sym_by_version (struct bfd_elf_version_tree *verdefs,
 			 const char *sym_name)
 {
-  bfd_boolean hidden = FALSE;
+  bool hidden = false;
   bfd_find_version_for_sym (verdefs, sym_name, &hidden);
   return hidden;
 }
@@ -3322,7 +3353,7 @@ FUNCTION
 	bfd_link_check_relocs
 
 SYNOPSIS
-	bfd_boolean bfd_link_check_relocs
+	bool bfd_link_check_relocs
 	  (bfd *abfd, struct bfd_link_info *info);
 
 DESCRIPTION
@@ -3332,7 +3363,7 @@ DESCRIPTION
 	This is the external entry point to this code.
 */
 
-bfd_boolean
+bool
 bfd_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
 {
   return BFD_SEND (abfd, _bfd_link_check_relocs, (abfd, info));
@@ -3343,7 +3374,7 @@ FUNCTION
 	_bfd_generic_link_check_relocs
 
 SYNOPSIS
-	bfd_boolean _bfd_generic_link_check_relocs
+	bool _bfd_generic_link_check_relocs
 	  (bfd *abfd, struct bfd_link_info *info);
 
 DESCRIPTION
@@ -3353,11 +3384,11 @@ DESCRIPTION
 	outside the BFD library.
 */
 
-bfd_boolean
+bool
 _bfd_generic_link_check_relocs (bfd *abfd ATTRIBUTE_UNUSED,
 				struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /*
@@ -3365,7 +3396,7 @@ FUNCTION
 	bfd_merge_private_bfd_data
 
 SYNOPSIS
-	bfd_boolean bfd_merge_private_bfd_data
+	bool bfd_merge_private_bfd_data
 	  (bfd *ibfd, struct bfd_link_info *info);
 
 DESCRIPTION
@@ -3379,6 +3410,7 @@ DESCRIPTION
 .#define bfd_merge_private_bfd_data(ibfd, info) \
 .	BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \
 .		  (ibfd, info))
+.
 */
 
 /*
@@ -3386,7 +3418,7 @@ INTERNAL_FUNCTION
 	_bfd_generic_verify_endian_match
 
 SYNOPSIS
-	bfd_boolean _bfd_generic_verify_endian_match
+	bool _bfd_generic_verify_endian_match
 	  (bfd *ibfd, struct bfd_link_info *info);
 
 DESCRIPTION
@@ -3395,7 +3427,7 @@ DESCRIPTION
 	TRUE for a match, otherwise returns FALSE and emits an error.
 */
 
-bfd_boolean
+bool
 _bfd_generic_verify_endian_match (bfd *ibfd, struct bfd_link_info *info)
 {
   bfd *obfd = info->output_bfd;
@@ -3411,10 +3443,10 @@ _bfd_generic_verify_endian_match (bfd *i
 	_bfd_error_handler (_("%pB: compiled for a little endian system "
 			      "and target is big endian"), ibfd);
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 int
@@ -3424,11 +3456,11 @@ _bfd_nolink_sizeof_headers (bfd *abfd AT
   return 0;
 }
 
-bfd_boolean
+bool
 _bfd_nolink_bfd_relax_section (bfd *abfd,
 			       asection *section ATTRIBUTE_UNUSED,
 			       struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
-			       bfd_boolean *again ATTRIBUTE_UNUSED)
+			       bool *again ATTRIBUTE_UNUSED)
 {
   return _bfd_bool_bfd_false_error (abfd);
 }
@@ -3439,13 +3471,13 @@ _bfd_nolink_bfd_get_relocated_section_co
      struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
      struct bfd_link_order *link_order ATTRIBUTE_UNUSED,
      bfd_byte *data ATTRIBUTE_UNUSED,
-     bfd_boolean relocatable ATTRIBUTE_UNUSED,
+     bool relocatable ATTRIBUTE_UNUSED,
      asymbol **symbols ATTRIBUTE_UNUSED)
 {
   return (bfd_byte *) _bfd_ptr_bfd_null_error (abfd);
 }
 
-bfd_boolean
+bool
 _bfd_nolink_bfd_lookup_section_flags
     (struct bfd_link_info *info ATTRIBUTE_UNUSED,
      struct flag_info *flaginfo ATTRIBUTE_UNUSED,
@@ -3454,7 +3486,7 @@ _bfd_nolink_bfd_lookup_section_flags
   return _bfd_bool_bfd_false_error (section->owner);
 }
 
-bfd_boolean
+bool
 _bfd_nolink_bfd_is_group_section (bfd *abfd,
 				  const asection *sec ATTRIBUTE_UNUSED)
 {
@@ -3468,7 +3500,7 @@ _bfd_nolink_bfd_group_name (bfd *abfd,
   return _bfd_ptr_bfd_null_error (abfd);
 }
 
-bfd_boolean
+bool
 _bfd_nolink_bfd_discard_group (bfd *abfd, asection *sec ATTRIBUTE_UNUSED)
 {
   return _bfd_bool_bfd_false_error (abfd);
@@ -3494,13 +3526,13 @@ _bfd_nolink_bfd_copy_link_hash_symbol_ty
 {
 }
 
-bfd_boolean
+bool
 _bfd_nolink_bfd_link_split_section (bfd *abfd, asection *sec ATTRIBUTE_UNUSED)
 {
   return _bfd_bool_bfd_false_error (abfd);
 }
 
-bfd_boolean
+bool
 _bfd_nolink_section_already_linked (bfd *abfd,
 				    asection *sec ATTRIBUTE_UNUSED,
 				    struct bfd_link_info *info ATTRIBUTE_UNUSED)
@@ -3508,7 +3540,7 @@ _bfd_nolink_section_already_linked (bfd
   return _bfd_bool_bfd_false_error (abfd);
 }
 
-bfd_boolean
+bool
 _bfd_nolink_bfd_define_common_symbol
     (bfd *abfd,
      struct bfd_link_info *info ATTRIBUTE_UNUSED,
@@ -3524,3 +3556,38 @@ _bfd_nolink_bfd_define_start_stop (struc
 {
   return (struct bfd_link_hash_entry *) _bfd_ptr_bfd_null_error (sec->owner);
 }
+
+/* Return false if linker should avoid caching relocation infomation
+   and symbol tables of input files in memory.  */
+
+bool
+_bfd_link_keep_memory (struct bfd_link_info * info)
+{
+  bfd *abfd;
+  bfd_size_type size;
+
+  if (!info->keep_memory)
+    return false;
+
+  if (info->max_cache_size == (bfd_size_type) -1)
+    return true;
+
+  abfd = info->input_bfds;
+  size = info->cache_size;
+  do
+    {
+      if (size >= info->max_cache_size)
+	{
+	  /* Over the limit.  Reduce the memory usage.  */
+	  info->keep_memory = false;
+	  return false;
+	}
+      if (!abfd)
+	break;
+      size += abfd->alloc_size;
+      abfd = abfd->link.next;
+    }
+  while (1);
+
+  return true;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/lynx-core.c ./bfd/lynx-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/lynx-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/lynx-core.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back end for Lynx core files
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    Written by Stu Grossman of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -85,7 +85,7 @@ make_bfd_asection (bfd *abfd,
   return asect;
 }
 
-const bfd_target *
+bfd_cleanup
 lynx_core_file_p (bfd *abfd)
 {
   int secnum;
@@ -94,7 +94,7 @@ lynx_core_file_p (bfd *abfd)
   core_st_t *threadp;
   int pagesize;
   asection *newsect;
-  bfd_size_type amt;
+  size_t amt;
 
   pagesize = getpagesize ();	/* Serious cross-target issue here...  This
 				   really needs to come from a system-specific
@@ -102,11 +102,11 @@ lynx_core_file_p (bfd *abfd)
 
   /* Get the pss entry from the core file */
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
     return NULL;
 
   amt = sizeof pss;
-  if (bfd_bread ((void *) &pss, amt, abfd) != amt)
+  if (bfd_read (&pss, amt, abfd) != amt)
     {
       /* Too small to be a core file */
       if (bfd_get_error () != bfd_error_system_call)
@@ -126,24 +126,13 @@ lynx_core_file_p (bfd *abfd)
 
   tcontext_size = pss.threadcnt * sizeof (core_st_t);
 
-  /* Allocate space for the thread contexts */
-
-  threadp = (core_st_t *) bfd_alloc (abfd, tcontext_size);
-  if (!threadp)
-    goto fail;
-
   /* Save thread contexts */
-
-  if (bfd_seek (abfd, (file_ptr) pagesize, SEEK_SET) != 0)
+  if (bfd_seek (abfd, pagesize, SEEK_SET) != 0)
+    goto fail;
+  threadp = (core_st_t *) _bfd_alloc_and_read (abfd, tcontext_size,
+					       tcontext_size);
+  if (!threadp)
     goto fail;
-
-  if (bfd_bread ((void *) threadp, tcontext_size, abfd) != tcontext_size)
-    {
-      /* Probably too small to be a core file */
-      if (bfd_get_error () != bfd_error_system_call)
-	bfd_set_error (bfd_error_wrong_format);
-      goto fail;
-    }
 
   core_signal (abfd) = threadp->currsig;
 
@@ -202,7 +191,7 @@ lynx_core_file_p (bfd *abfd)
 	goto fail;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  fail:
   bfd_release (abfd, core_hdr (abfd));
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-aarch64.c ./bfd/mach-o-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-aarch64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/mach-o-aarch64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* AArch-64 Mach-O support for BFD.
-   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Copyright (C) 2015-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -40,26 +40,26 @@
 #define bfd_mach_o_tgt_seg_table NULL
 #define bfd_mach_o_section_type_valid_for_tgt NULL
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_arm64_object_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0, 0, BFD_MACH_O_CPU_TYPE_ARM64);
 }
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_arm64_core_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0,
 			      BFD_MACH_O_MH_CORE, BFD_MACH_O_CPU_TYPE_ARM64);
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_arm64_mkobject (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata;
 
   if (!bfd_mach_o_mkobject_init (abfd))
-    return FALSE;
+    return false;
 
   mdata = bfd_mach_o_get_data (abfd);
   mdata->header.magic = BFD_MACH_O_MH_MAGIC;
@@ -68,7 +68,7 @@ bfd_mach_o_arm64_mkobject (bfd *abfd)
   mdata->header.byteorder = BFD_ENDIAN_LITTLE;
   mdata->header.version = 1;
 
-  return TRUE;
+  return true;
 }
 
 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value.  */
@@ -77,76 +77,76 @@ bfd_mach_o_arm64_mkobject (bfd *abfd)
 static reloc_howto_type arm64_howto_table[]=
 {
   /* 0 */
-  HOWTO (BFD_RELOC_64, 0, 4, 64, FALSE, 0,
+  HOWTO (BFD_RELOC_64, 0, 8, 64, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "64",
-	 FALSE, MINUS_ONE, MINUS_ONE, FALSE),
-  HOWTO (BFD_RELOC_32, 0, 2, 32, FALSE, 0,
+	 false, MINUS_ONE, MINUS_ONE, false),
+  HOWTO (BFD_RELOC_32, 0, 4, 32, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "32",
-	 FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO (BFD_RELOC_16, 0, 1, 16, FALSE, 0,
+	 false, 0xffffffff, 0xffffffff, false),
+  HOWTO (BFD_RELOC_16, 0, 2, 16, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "16",
-	 FALSE, 0xffff, 0xffff, FALSE),
-  HOWTO (BFD_RELOC_8, 0, 0, 8, FALSE, 0,
+	 false, 0xffff, 0xffff, false),
+  HOWTO (BFD_RELOC_8, 0, 1, 8, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "8",
-	 FALSE, 0xff, 0xff, FALSE),
+	 false, 0xff, 0xff, false),
   /* 4 */
-  HOWTO (BFD_RELOC_64_PCREL, 0, 4, 64, TRUE, 0,
+  HOWTO (BFD_RELOC_64_PCREL, 0, 8, 64, true, 0,
 	 complain_overflow_bitfield,
 	 NULL, "DISP64",
-	 FALSE, MINUS_ONE, MINUS_ONE, TRUE),
-  HOWTO (BFD_RELOC_32_PCREL, 0, 2, 32, TRUE, 0,
+	 false, MINUS_ONE, MINUS_ONE, true),
+  HOWTO (BFD_RELOC_32_PCREL, 0, 4, 32, true, 0,
 	 complain_overflow_bitfield,
 	 NULL, "DISP32",
-	 FALSE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO (BFD_RELOC_16_PCREL, 0, 1, 16, TRUE, 0,
+	 false, 0xffffffff, 0xffffffff, true),
+  HOWTO (BFD_RELOC_16_PCREL, 0, 2, 16, true, 0,
 	 complain_overflow_bitfield,
 	 NULL, "DISP16",
-	 FALSE, 0xffff, 0xffff, TRUE),
-  HOWTO (BFD_RELOC_AARCH64_CALL26, 0, 2, 26, TRUE, 0,
+	 false, 0xffff, 0xffff, true),
+  HOWTO (BFD_RELOC_AARCH64_CALL26, 0, 4, 26, true, 0,
 	 complain_overflow_bitfield,
 	 NULL, "BRANCH26",
-	 FALSE, 0x03ffffff, 0x03ffffff, TRUE),
+	 false, 0x03ffffff, 0x03ffffff, true),
   /* 8 */
-  HOWTO (BFD_RELOC_AARCH64_ADR_HI21_PCREL, 12, 2, 21, TRUE, 0,
+  HOWTO (BFD_RELOC_AARCH64_ADR_HI21_PCREL, 12, 4, 21, true, 0,
 	 complain_overflow_signed,
 	 NULL, "PAGE21",
-	 FALSE, 0x1fffff, 0x1fffff, TRUE),
-  HOWTO (BFD_RELOC_AARCH64_LDST16_LO12, 1, 2, 12, TRUE, 0,
+	 false, 0x1fffff, 0x1fffff, true),
+  HOWTO (BFD_RELOC_AARCH64_LDST16_LO12, 1, 4, 12, true, 0,
 	 complain_overflow_signed,
 	 NULL, "PGOFF12",
-	 FALSE, 0xffe, 0xffe, TRUE),
-  HOWTO (BFD_RELOC_MACH_O_ARM64_ADDEND, 0, 2, 32, FALSE, 0,
+	 false, 0xffe, 0xffe, true),
+  HOWTO (BFD_RELOC_MACH_O_ARM64_ADDEND, 0, 4, 32, false, 0,
 	 complain_overflow_signed,
 	 NULL, "ADDEND",
-	 FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO (BFD_RELOC_MACH_O_SUBTRACTOR32, 0, 2, 32, FALSE, 0,
+	 false, 0xffffffff, 0xffffffff, false),
+  HOWTO (BFD_RELOC_MACH_O_SUBTRACTOR32, 0, 4, 32, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "SUBTRACTOR32",
-	 FALSE, 0xffffffff, 0xffffffff, FALSE),
+	 false, 0xffffffff, 0xffffffff, false),
   /* 12 */
-  HOWTO (BFD_RELOC_MACH_O_SUBTRACTOR64, 0, 4, 64, FALSE, 0,
+  HOWTO (BFD_RELOC_MACH_O_SUBTRACTOR64, 0, 8, 64, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "SUBTRACTOR64",
-	 FALSE, MINUS_ONE, MINUS_ONE, FALSE),
-  HOWTO (BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21, 12, 2, 21, TRUE, 0,
+	 false, MINUS_ONE, MINUS_ONE, false),
+  HOWTO (BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21, 12, 4, 21, true, 0,
 	 complain_overflow_signed,
 	 NULL, "GOT_LD_PG21",
-	 FALSE, 0x1fffff, 0x1fffff, TRUE),
-  HOWTO (BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12, 1, 2, 12, TRUE, 0,
+	 false, 0x1fffff, 0x1fffff, true),
+  HOWTO (BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12, 1, 4, 12, true, 0,
 	 complain_overflow_signed,
 	 NULL, "GOT_LD_PGOFF12",
-	 FALSE, 0xffe, 0xffe, TRUE),
-  HOWTO (BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT, 0, 2, 32, TRUE, 0,
+	 false, 0xffe, 0xffe, true),
+  HOWTO (BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT, 0, 4, 32, true, 0,
 	 complain_overflow_bitfield,
 	 NULL, "PTR_TO_GOT",
-	 FALSE, 0xffffffff, 0xffffffff, TRUE),
+	 false, 0xffffffff, 0xffffffff, true),
 };
 
-static bfd_boolean
+static bool
 bfd_mach_o_arm64_canonicalize_one_reloc (bfd *       abfd,
 					 struct mach_o_reloc_info_external * raw,
 					 arelent *   res,
@@ -159,7 +159,7 @@ bfd_mach_o_arm64_canonicalize_one_reloc
   if (res->address & BFD_MACH_O_SR_SCATTERED)
     {
       /* Only non-scattered relocations.  */
-      return FALSE;
+      return false;
     }
 
   /* The value and info fields have to be extracted dependent on target
@@ -173,13 +173,13 @@ bfd_mach_o_arm64_canonicalize_one_reloc
 	  res->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
 	  res->addend = reloc.r_value;
 	  res->howto = &arm64_howto_table[10];
-	  return TRUE;
+	  return true;
 	}
-      return FALSE;
+      return false;
     }
 
   if (!bfd_mach_o_canonicalize_non_scattered_reloc (abfd, &reloc, res, syms))
-    return FALSE;
+    return false;
 
   switch (reloc.r_type)
     {
@@ -188,90 +188,90 @@ bfd_mach_o_arm64_canonicalize_one_reloc
 	{
 	case 0: /* len = 0, pcrel = 0  */
 	  res->howto = &arm64_howto_table[3];
-	  return TRUE;
+	  return true;
 	case 2: /* len = 1, pcrel = 0  */
 	  res->howto = &arm64_howto_table[2];
-	  return TRUE;
+	  return true;
 	case 3: /* len = 1, pcrel = 1  */
 	  res->howto = &arm64_howto_table[6];
-	  return TRUE;
+	  return true;
 	case 4: /* len = 2, pcrel = 0  */
 	  res->howto = &arm64_howto_table[1];
-	  return TRUE;
+	  return true;
 	case 5: /* len = 2, pcrel = 1  */
 	  res->howto = &arm64_howto_table[5];
-	  return TRUE;
+	  return true;
 	case 6: /* len = 3, pcrel = 0  */
 	  res->howto = &arm64_howto_table[0];
-	  return TRUE;
+	  return true;
 	case 7: /* len = 3, pcrel = 1  */
 	  res->howto = &arm64_howto_table[4];
-	  return TRUE;
+	  return true;
 	default:
-	  return FALSE;
+	  return false;
 	}
       break;
     case BFD_MACH_O_ARM64_RELOC_SUBTRACTOR:
       if (reloc.r_pcrel)
-	return FALSE;
+	return false;
       switch (reloc.r_length)
 	{
 	case 2:
 	  res->howto = &arm64_howto_table[11];
-	  return TRUE;
+	  return true;
 	case 3:
 	  res->howto = &arm64_howto_table[12];
-	  return TRUE;
+	  return true;
 	default:
-	  return FALSE;
+	  return false;
 	}
       break;
     case BFD_MACH_O_ARM64_RELOC_BRANCH26:
       if (reloc.r_length == 2 && reloc.r_pcrel == 1)
 	{
 	  res->howto = &arm64_howto_table[7];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_ARM64_RELOC_PAGE21:
       if (reloc.r_length == 2 && reloc.r_pcrel == 1)
 	{
 	  res->howto = &arm64_howto_table[8];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_ARM64_RELOC_PAGEOFF12:
       if (reloc.r_length == 2 && reloc.r_pcrel == 0)
 	{
 	  res->howto = &arm64_howto_table[9];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_ARM64_RELOC_GOT_LOAD_PAGE21:
       if (reloc.r_length == 2 && reloc.r_pcrel == 1)
 	{
 	  res->howto = &arm64_howto_table[13];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_ARM64_RELOC_GOT_LOAD_PAGEOFF12:
       if (reloc.r_length == 2 && reloc.r_pcrel == 0)
 	{
 	  res->howto = &arm64_howto_table[14];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_ARM64_RELOC_POINTER_TO_GOT:
       if (reloc.r_length == 2 && reloc.r_pcrel == 1)
 	{
 	  res->howto = &arm64_howto_table[15];
-	  return TRUE;
+	  return true;
 	}
       break;
     default:
       break;
     }
-  return FALSE;
+  return false;
 }
 
 static reloc_howto_type *
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-arm.c ./bfd/mach-o-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-arm.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/mach-o-arm.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* ARM Mach-O support for BFD.
-   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Copyright (C) 2015-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -38,26 +38,26 @@
 #define bfd_mach_o_tgt_seg_table NULL
 #define bfd_mach_o_section_type_valid_for_tgt NULL
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_arm_object_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0, 0, BFD_MACH_O_CPU_TYPE_ARM);
 }
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_arm_core_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0,
 			      BFD_MACH_O_MH_CORE, BFD_MACH_O_CPU_TYPE_ARM);
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_arm_mkobject (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata;
 
   if (!bfd_mach_o_mkobject_init (abfd))
-    return FALSE;
+    return false;
 
   mdata = bfd_mach_o_get_data (abfd);
   mdata->header.magic = BFD_MACH_O_MH_MAGIC;
@@ -66,87 +66,87 @@ bfd_mach_o_arm_mkobject (bfd *abfd)
   mdata->header.byteorder = BFD_ENDIAN_LITTLE;
   mdata->header.version = 1;
 
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type arm_howto_table[]=
 {
   /* 0 */
-  HOWTO (BFD_RELOC_32, 0, 2, 32, FALSE, 0,
+  HOWTO (BFD_RELOC_32, 0, 4, 32, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "32",
-	 FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO (BFD_RELOC_16, 0, 1, 16, FALSE, 0,
+	 false, 0xffffffff, 0xffffffff, false),
+  HOWTO (BFD_RELOC_16, 0, 2, 16, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "16",
-	 FALSE, 0xffff, 0xffff, FALSE),
-  HOWTO (BFD_RELOC_8, 0, 0, 8, FALSE, 0,
+	 false, 0xffff, 0xffff, false),
+  HOWTO (BFD_RELOC_8, 0, 1, 8, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "8",
-	 FALSE, 0xff, 0xff, FALSE),
-  HOWTO (BFD_RELOC_32_PCREL, 0, 2, 32, TRUE, 0,
+	 false, 0xff, 0xff, false),
+  HOWTO (BFD_RELOC_32_PCREL, 0, 4, 32, true, 0,
 	 complain_overflow_bitfield,
 	 NULL, "DISP32",
-	 FALSE, 0xffffffff, 0xffffffff, TRUE),
+	 false, 0xffffffff, 0xffffffff, true),
   /* 4 */
-  HOWTO (BFD_RELOC_16_PCREL, 0, 1, 16, TRUE, 0,
+  HOWTO (BFD_RELOC_16_PCREL, 0, 2, 16, true, 0,
 	 complain_overflow_bitfield,
 	 NULL, "DISP16",
-	 FALSE, 0xffff, 0xffff, TRUE),
-  HOWTO (BFD_RELOC_MACH_O_SECTDIFF, 0, 2, 32, FALSE, 0,
+	 false, 0xffff, 0xffff, true),
+  HOWTO (BFD_RELOC_MACH_O_SECTDIFF, 0, 4, 32, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "SECTDIFF_32",
-	 FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO (BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 2, 32, FALSE, 0,
+	 false, 0xffffffff, 0xffffffff, false),
+  HOWTO (BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 4, 32, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "LSECTDIFF_32",
-	 FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO (BFD_RELOC_MACH_O_PAIR, 0, 2, 32, FALSE, 0,
+	 false, 0xffffffff, 0xffffffff, false),
+  HOWTO (BFD_RELOC_MACH_O_PAIR, 0, 4, 32, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "PAIR_32",
-	 FALSE, 0xffffffff, 0xffffffff, FALSE),
+	 false, 0xffffffff, 0xffffffff, false),
   /* 8 */
-  HOWTO (BFD_RELOC_MACH_O_SECTDIFF, 0, 1, 16, FALSE, 0,
+  HOWTO (BFD_RELOC_MACH_O_SECTDIFF, 0, 2, 16, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "SECTDIFF_16",
-	 FALSE, 0xffff, 0xffff, FALSE),
-  HOWTO (BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 1, 16, FALSE, 0,
+	 false, 0xffff, 0xffff, false),
+  HOWTO (BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 2, 16, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "LSECTDIFF_16",
-	 FALSE, 0xffff, 0xffff, FALSE),
-  HOWTO (BFD_RELOC_MACH_O_PAIR, 0, 1, 16, FALSE, 0,
+	 false, 0xffff, 0xffff, false),
+  HOWTO (BFD_RELOC_MACH_O_PAIR, 0, 2, 16, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "PAIR_16",
-	 FALSE, 0xffff, 0xffff, FALSE),
-  HOWTO (BFD_RELOC_ARM_PCREL_CALL, 2, 2, 24, TRUE, 0,
+	 false, 0xffff, 0xffff, false),
+  HOWTO (BFD_RELOC_ARM_PCREL_CALL, 2, 4, 24, true, 0,
 	 complain_overflow_signed,
 	 NULL, "BR24",
-	 FALSE, 0x00ffffff, 0x00ffffff, TRUE),
+	 false, 0x00ffffff, 0x00ffffff, true),
   /* 12 */
-  HOWTO (BFD_RELOC_ARM_MOVW, 0,	2, 16, FALSE, 0,
+  HOWTO (BFD_RELOC_ARM_MOVW, 0,	4, 16, false, 0,
 	 complain_overflow_dont,
 	 NULL, "MOVW",
-	 FALSE, 0x000f0fff, 0x000f0fff, FALSE),
-  HOWTO (BFD_RELOC_MACH_O_PAIR, 0, 2, 16, FALSE, 0,
+	 false, 0x000f0fff, 0x000f0fff, false),
+  HOWTO (BFD_RELOC_MACH_O_PAIR, 0, 4, 16, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "PAIR_W",
-	 FALSE, 0x000f0fff, 0x000f0fff, FALSE),
-  HOWTO (BFD_RELOC_ARM_MOVT, 0, 2, 16, FALSE, 0,
+	 false, 0x000f0fff, 0x000f0fff, false),
+  HOWTO (BFD_RELOC_ARM_MOVT, 0, 4, 16, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "MOVT",
-	 FALSE, 0x000f0fff, 0x000f0fff, FALSE),
-  HOWTO (BFD_RELOC_MACH_O_PAIR, 0, 2, 16, FALSE, 0,
+	 false, 0x000f0fff, 0x000f0fff, false),
+  HOWTO (BFD_RELOC_MACH_O_PAIR, 0, 4, 16, false, 0,
 	 complain_overflow_bitfield,
 	 NULL, "PAIR_T",
-	 FALSE, 0x000f0fff, 0x000f0fff, FALSE),
+	 false, 0x000f0fff, 0x000f0fff, false),
   /* 16 */
-  HOWTO (BFD_RELOC_THUMB_PCREL_BLX, 2, 2, 24, TRUE, 0,
+  HOWTO (BFD_RELOC_THUMB_PCREL_BLX, 2, 4, 24, true, 0,
 	 complain_overflow_signed,
 	 NULL, "TBR22",
-	 FALSE, 0x07ff2fff, 0x07ff2fff, TRUE)
+	 false, 0x07ff2fff, 0x07ff2fff, true)
 };
 
-static bfd_boolean
+static bool
 bfd_mach_o_arm_canonicalize_one_reloc (bfd *       abfd,
 				       struct mach_o_reloc_info_external * raw,
 				       arelent *   res,
@@ -156,10 +156,7 @@ bfd_mach_o_arm_canonicalize_one_reloc (b
   bfd_mach_o_reloc_info reloc;
 
   if (!bfd_mach_o_pre_canonicalize_one_reloc (abfd, raw, &reloc, res, syms))
-    {
-fprintf (stderr, "ARm 1\n");
-    return FALSE;
-    }
+    return false;
 
   if (reloc.r_scattered)
     {
@@ -169,71 +166,71 @@ fprintf (stderr, "ARm 1\n");
 	  /* PR 21813: Check for a corrupt PAIR reloc at the start.  */
 	  if (res == res_base)
 	    {
-	      _bfd_error_handler (_("\
-malformed mach-o ARM reloc pair: reloc is first reloc"));
-	    return FALSE;
+	      _bfd_error_handler (_("malformed mach-o ARM reloc pair: "
+				    "reloc is first reloc"));
+	      return false;
 	    }
 	  if (reloc.r_length == 2)
 	    {
 	      res->howto = &arm_howto_table[7];
 	      res->address = res[-1].address;
-	      return TRUE;
+	      return true;
 	    }
 	  else if (reloc.r_length == 1)
 	    {
 	      res->howto = &arm_howto_table[10];
 	      res->address = res[-1].address;
-	      return TRUE;
+	      return true;
 	    }
-	  _bfd_error_handler (_("\
-malformed mach-o ARM reloc pair: invalid length: %d"), reloc.r_length);
-	  return FALSE;
+	  _bfd_error_handler (_("malformed mach-o ARM reloc pair: "
+				"invalid length: %d"), reloc.r_length);
+	  return false;
 
 	case BFD_MACH_O_ARM_RELOC_SECTDIFF:
 	  if (reloc.r_length == 2)
 	    {
 	      res->howto = &arm_howto_table[5];
-	      return TRUE;
+	      return true;
 	    }
 	  else if (reloc.r_length == 1)
 	    {
 	      res->howto = &arm_howto_table[8];
-	      return TRUE;
+	      return true;
 	    }
-	  _bfd_error_handler (_("\
-malformed mach-o ARM sectdiff reloc: invalid length: %d"), reloc.r_length);
-	  return FALSE;
+	  _bfd_error_handler (_("malformed mach-o ARM sectdiff reloc: "
+				"invalid length: %d"), reloc.r_length);
+	  return false;
 
 	case BFD_MACH_O_ARM_RELOC_LOCAL_SECTDIFF:
 	  if (reloc.r_length == 2)
 	    {
 	      res->howto = &arm_howto_table[6];
-	      return TRUE;
+	      return true;
 	    }
 	  else if (reloc.r_length == 1)
 	    {
 	      res->howto = &arm_howto_table[9];
-	      return TRUE;
+	      return true;
 	    }
-	  _bfd_error_handler (_("\
-malformed mach-o ARM local sectdiff reloc: invalid length: %d"),
+	  _bfd_error_handler (_("malformed mach-o ARM local sectdiff reloc: "
+				"invalid length: %d"),
 			      reloc.r_length);
-	  return FALSE;
+	  return false;
 
 	case BFD_MACH_O_ARM_RELOC_HALF_SECTDIFF:
 	  switch (reloc.r_length)
 	    {
 	    case 2: /* :lower16: for movw arm.  */
 	      res->howto = &arm_howto_table[12];
-	      return TRUE;
+	      return true;
 	    case 3: /* :upper16: for movt arm.  */
 	      res->howto = &arm_howto_table[14];
-	      return TRUE;
+	      return true;
 	    }
-	  _bfd_error_handler (_("\
-malformed mach-o ARM half sectdiff reloc: invalid length: %d"),
+	  _bfd_error_handler (_("malformed mach-o ARM half sectdiff reloc: "
+				"invalid length: %d"),
 			      reloc.r_length);
-	  return FALSE;
+	  return false;
 
 	default:
 	  break;
@@ -248,24 +245,24 @@ malformed mach-o ARM half sectdiff reloc
 	    {
 	    case 0: /* len = 0, pcrel = 0  */
 	      res->howto = &arm_howto_table[2];
-	      return TRUE;
+	      return true;
 	    case 2: /* len = 1, pcrel = 0  */
 	      res->howto = &arm_howto_table[1];
-	      return TRUE;
+	      return true;
 	    case 3: /* len = 1, pcrel = 1  */
 	      res->howto = &arm_howto_table[4];
-	      return TRUE;
+	      return true;
 	    case 4: /* len = 2, pcrel = 0  */
 	      res->howto = &arm_howto_table[0];
-	      return TRUE;
+	      return true;
 	    case 5: /* len = 2, pcrel = 1  */
 	      res->howto = &arm_howto_table[3];
-	      return TRUE;
+	      return true;
 	    default:
-	      _bfd_error_handler (_("\
-malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"),
+	      _bfd_error_handler (_("malformed mach-o ARM vanilla reloc: "
+				    "invalid length: %d (pcrel: %d)"),
 				  reloc.r_length, reloc.r_pcrel);
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 
@@ -273,7 +270,7 @@ malformed mach-o ARM vanilla reloc: inva
 	  if (reloc.r_length == 2 && reloc.r_pcrel == 1)
 	    {
 	      res->howto = &arm_howto_table[11];
-	      return TRUE;
+	      return true;
 	    }
 	  break;
 
@@ -281,7 +278,7 @@ malformed mach-o ARM vanilla reloc: inva
 	  if (reloc.r_length == 2 && reloc.r_pcrel == 1)
 	    {
 	      res->howto = &arm_howto_table[16];
-	      return TRUE;
+	      return true;
 	    }
 	  break;
 
@@ -291,14 +288,20 @@ malformed mach-o ARM vanilla reloc: inva
 	      {
 	      case 0: /* :lower16: for movw arm.  */
 		res->howto = &arm_howto_table[12];
-		return TRUE;
+		return true;
 	      case 1: /* :upper16: for movt arm.  */
 		res->howto = &arm_howto_table[14];
-		return TRUE;
+		return true;
 	      }
 	  break;
 
 	case BFD_MACH_O_ARM_RELOC_PAIR:
+	  if (res == res_base)
+	    {
+	      _bfd_error_handler (_("malformed mach-o ARM reloc pair: "
+				    "reloc is first reloc"));
+	      return false;
+	    }
 	  if (res[-1].howto == &arm_howto_table[12]
 	      && reloc.r_length == 0)
 	    {
@@ -307,7 +310,7 @@ malformed mach-o ARM vanilla reloc: inva
 	      /* This reloc contains the other half in its r_address field.  */
 	      res[-1].addend += (res->address & 0xffff) << 16;
 	      res->address = res[-1].address;
-	      return TRUE;
+	      return true;
 	    }
 	  else if (res[-1].howto == &arm_howto_table[14]
 		   && reloc.r_length == 1)
@@ -317,7 +320,7 @@ malformed mach-o ARM vanilla reloc: inva
 	      /* This reloc contains the other half in its r_address field.  */
 	      res[-1].addend += res->address & 0xffff;
 	      res->address = res[-1].address;
-	      return TRUE;
+	      return true;
 	    }
 	  break;
 
@@ -326,9 +329,9 @@ malformed mach-o ARM vanilla reloc: inva
 	}
     }
 
-  _bfd_error_handler (_("\
-malformed mach-o ARM reloc: unknown reloc type: %d"), reloc.r_length);
-  return FALSE;
+  _bfd_error_handler (_("malformed mach-o ARM reloc: "
+			"unknown reloc type: %d"), reloc.r_length);
+  return false;
 }
 
 static reloc_howto_type *
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o.c ./bfd/mach-o.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/mach-o.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Mach-O support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -36,9 +36,9 @@
 #define bfd_mach_o_mkobject bfd_mach_o_gen_mkobject
 
 #define FILE_ALIGN(off, algn) \
-  (((off) + ((file_ptr) 1 << (algn)) - 1) & ((file_ptr) -1U << (algn)))
+  (((off) + ((ufile_ptr) 1 << (algn)) - 1) & ((ufile_ptr) -1 << (algn)))
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_dyld_content (bfd *abfd, bfd_mach_o_dyld_info_command *cmd);
 
 unsigned int
@@ -52,36 +52,36 @@ bfd_mach_o_version (bfd *abfd)
   return mdata->header.version;
 }
 
-bfd_boolean
+bool
 bfd_mach_o_valid (bfd *abfd)
 {
   if (abfd == NULL || abfd->xvec == NULL)
-    return FALSE;
+    return false;
 
   if (abfd->xvec->flavour != bfd_target_mach_o_flavour)
-    return FALSE;
+    return false;
 
   if (bfd_mach_o_get_data (abfd) == NULL)
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
-static INLINE bfd_boolean
+static inline bool
 mach_o_wide_p (bfd_mach_o_header *header)
 {
   switch (header->version)
     {
     case 1:
-      return FALSE;
+      return false;
     case 2:
-      return TRUE;
+      return true;
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 }
 
-static INLINE bfd_boolean
+static inline bool
 bfd_mach_o_wide_p (bfd *abfd)
 {
   return mach_o_wide_p (&bfd_mach_o_get_data (abfd)->header);
@@ -379,7 +379,7 @@ bfd_mach_o_convert_section_name_to_bfd (
 {
   const mach_o_section_name_xlat *xlat;
   char *res;
-  unsigned int len;
+  size_t len;
   const char *pfx = "";
 
   *name = NULL;
@@ -394,7 +394,7 @@ bfd_mach_o_convert_section_name_to_bfd (
       res = bfd_alloc (abfd, len + 1);
       if (res == NULL)
 	return;
-      memcpy (res, xlat->bfd_name, len+1);
+      memcpy (res, xlat->bfd_name, len + 1);
       *name = res;
       *flags = xlat->bfd_flags;
       return;
@@ -440,9 +440,9 @@ bfd_mach_o_convert_section_name_to_mach_
   const char *name = bfd_section_name (sect);
   const char *segname;
   const char *dot;
-  unsigned int len;
-  unsigned int seglen;
-  unsigned int seclen;
+  size_t len;
+  size_t seglen;
+  size_t seclen;
 
   memset (section->segname, 0, BFD_MACH_O_SEGNAME_SIZE + 1);
   memset (section->sectname, 0, BFD_MACH_O_SECTNAME_SIZE + 1);
@@ -526,6 +526,15 @@ bfd_mach_o_section_get_nbr_indirect (bfd
 {
   unsigned int elsz;
 
+  /* FIXME: This array is set by the assembler but does not seem to be
+     set anywhere for objcopy.  Since bfd_mach_o_build_dysymtab will
+     not fill in output bfd_mach_o_dysymtab_command indirect_syms when
+     this array is NULL we may as well return zero for the size.
+     This is enough to stop objcopy allocating huge amounts of memory
+     for indirect symbols in fuzzed object files.  */
+  if (sec->indirect_syms == NULL)
+    return 0;
+
   elsz = bfd_mach_o_section_get_entry_size (abfd, sec);
   if (elsz == 0)
     return 0;
@@ -551,7 +560,7 @@ bfd_mach_o_append_command (bfd *abfd, bf
 /* Copy any private info we understand from the input symbol
    to the output symbol.  */
 
-bfd_boolean
+bool
 bfd_mach_o_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED,
 					 asymbol *isymbol,
 					 bfd *obfd ATTRIBUTE_UNUSED,
@@ -566,13 +575,13 @@ bfd_mach_o_bfd_copy_private_symbol_data
   os->n_desc = is->n_desc;
   os->symbol.udata.i = is->symbol.udata.i;
 
-  return TRUE;
+  return true;
 }
 
 /* Copy any private info we understand from the input section
    to the output section.  */
 
-bfd_boolean
+bool
 bfd_mach_o_bfd_copy_private_section_data (bfd *ibfd, asection *isection,
 					  bfd *obfd, asection *osection)
 {
@@ -581,7 +590,7 @@ bfd_mach_o_bfd_copy_private_section_data
 
   if (ibfd->xvec->flavour != bfd_target_mach_o_flavour
       || obfd->xvec->flavour != bfd_target_mach_o_flavour)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is != NULL && os != NULL);
 
@@ -590,7 +599,7 @@ bfd_mach_o_bfd_copy_private_section_data
   os->reserved2 = is->reserved2;
   os->reserved3 = is->reserved3;
 
-  return TRUE;
+  return true;
 }
 
 static const char *
@@ -618,12 +627,10 @@ cputype (unsigned long value)
 }
 
 static const char *
-cpusubtype (unsigned long cputype, unsigned long cpusubtype)
+cpusubtype (unsigned long cpu_type, unsigned long cpu_subtype, char *buffer)
 {
-  static char buffer[128];
-
   buffer[0] = 0;
-  switch (cpusubtype & BFD_MACH_O_CPU_SUBTYPE_MASK)
+  switch (cpu_subtype & BFD_MACH_O_CPU_SUBTYPE_MASK)
     {
     case 0:
       break;
@@ -633,13 +640,13 @@ cpusubtype (unsigned long cputype, unsig
       sprintf (buffer, _("<unknown mask flags>")); break;
     }
 
-  cpusubtype &= ~ BFD_MACH_O_CPU_SUBTYPE_MASK;
+  cpu_subtype &= ~ BFD_MACH_O_CPU_SUBTYPE_MASK;
 
-  switch (cputype)
+  switch (cpu_type)
     {
     case BFD_MACH_O_CPU_TYPE_X86_64:
     case BFD_MACH_O_CPU_TYPE_I386:
-      switch (cpusubtype)
+      switch (cpu_subtype)
 	{
 	case BFD_MACH_O_CPU_SUBTYPE_X86_ALL:
 	  return strcat (buffer, " (X86_ALL)");
@@ -649,7 +656,7 @@ cpusubtype (unsigned long cputype, unsig
       break;
 
     case BFD_MACH_O_CPU_TYPE_ARM:
-      switch (cpusubtype)
+      switch (cpu_subtype)
 	{
 	case BFD_MACH_O_CPU_SUBTYPE_ARM_ALL:
 	  return strcat (buffer, " (ARM_ALL)");
@@ -669,7 +676,7 @@ cpusubtype (unsigned long cputype, unsig
       break;
 
     case BFD_MACH_O_CPU_TYPE_ARM64:
-      switch (cpusubtype)
+      switch (cpu_subtype)
 	{
 	case BFD_MACH_O_CPU_SUBTYPE_ARM64_ALL:
 	  return strcat (buffer, " (ARM64_ALL)");
@@ -684,37 +691,38 @@ cpusubtype (unsigned long cputype, unsig
       break;
     }
 
-  if (cpusubtype != 0)
+  if (cpu_subtype != 0)
     return strcat (buffer, _(" (<unknown>)"));
 
   return buffer;
 }
 
-bfd_boolean
+bool
 bfd_mach_o_bfd_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE * file = (FILE *) ptr;
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
+  char buff[128];
 
   fprintf (file, _(" MACH-O header:\n"));
   fprintf (file, _("   magic:      %#lx\n"), (long) mdata->header.magic);
   fprintf (file, _("   cputype:    %#lx (%s)\n"), (long) mdata->header.cputype,
 	   cputype (mdata->header.cputype));
   fprintf (file, _("   cpusubtype: %#lx%s\n"), (long) mdata->header.cpusubtype,
-	   cpusubtype (mdata->header.cputype, mdata->header.cpusubtype));
+	   cpusubtype (mdata->header.cputype, mdata->header.cpusubtype, buff));
   fprintf (file, _("   filetype:   %#lx\n"), (long) mdata->header.filetype);
   fprintf (file, _("   ncmds:      %#lx\n"), (long) mdata->header.ncmds);
   fprintf (file, _("   sizeocmds:  %#lx\n"), (long) mdata->header.sizeofcmds);
   fprintf (file, _("   flags:      %#lx\n"), (long) mdata->header.flags);
   fprintf (file, _("   version:    %x\n"), mdata->header.version);
 
-  return TRUE;
+  return true;
 }
 
 /* Copy any private info we understand from the input bfd
    to the output bfd.  */
 
-bfd_boolean
+bool
 bfd_mach_o_bfd_copy_private_header_data (bfd *ibfd, bfd *obfd)
 {
   bfd_mach_o_data_struct *imdata;
@@ -723,7 +731,7 @@ bfd_mach_o_bfd_copy_private_header_data
 
   if (bfd_get_flavour (ibfd) != bfd_target_mach_o_flavour
       || bfd_get_flavour (obfd) != bfd_target_mach_o_flavour)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (bfd_mach_o_valid (ibfd));
   BFD_ASSERT (bfd_mach_o_valid (obfd));
@@ -762,7 +770,7 @@ bfd_mach_o_bfd_copy_private_header_data
 	  /* Command is copied.  */
 	  ocmd = bfd_alloc (obfd, sizeof (bfd_mach_o_load_command));
 	  if (ocmd == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Copy common fields.  */
 	  ocmd->type = icmd->type;
@@ -850,23 +858,23 @@ bfd_mach_o_bfd_copy_private_header_data
       bfd_mach_o_append_command (obfd, ocmd);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This allows us to set up to 32 bits of flags (unless we invent some
    fiendish scheme to subdivide).  For now, we'll just set the file flags
    without error checking - just overwrite.  */
 
-bfd_boolean
+bool
 bfd_mach_o_bfd_set_private_flags (bfd *abfd, flagword flags)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
 
   if (!mdata)
-    return FALSE;
+    return false;
 
   mdata->header.flags = flags;
-  return TRUE;
+  return true;
 }
 
 /* Count the total number of symbols.  */
@@ -911,7 +919,7 @@ bfd_mach_o_canonicalize_symtab (bfd *abf
     {
       _bfd_error_handler
 	(_("bfd_mach_o_canonicalize_symtab: unable to load symbols"));
-      return 0;
+      return -1;
     }
 
   BFD_ASSERT (sym->symbols != NULL);
@@ -939,11 +947,9 @@ bfd_mach_o_get_synthetic_symtab (bfd *ab
   bfd_mach_o_symtab_command *symtab = mdata->symtab;
   asymbol *s;
   char * s_start;
-  char * s_end;
   unsigned long count, i, j, n;
   size_t size;
   char *names;
-  char *nul_name;
   const char stub [] = "$stub";
 
   *ret = NULL;
@@ -956,27 +962,27 @@ bfd_mach_o_get_synthetic_symtab (bfd *ab
   /* We need to allocate a bfd symbol for every indirect symbol and to
      allocate the memory for its name.  */
   count = dysymtab->nindirectsyms;
-  size = count * sizeof (asymbol) + 1;
-
+  size = 0;
   for (j = 0; j < count; j++)
     {
-      const char * strng;
       unsigned int isym = dysymtab->indirect_syms[j];
+      const char *str;
 
       /* Some indirect symbols are anonymous.  */
-      if (isym < symtab->nsyms && (strng = symtab->symbols[isym].symbol.name))
-	/* PR 17512: file: f5b8eeba.  */
-	size += strnlen (strng, symtab->strsize - (strng - symtab->strtab)) + sizeof (stub);
+      if (isym < symtab->nsyms
+	  && (str = symtab->symbols[isym].symbol.name) != NULL)
+	{
+	  /* PR 17512: file: f5b8eeba.  */
+	  size += strnlen (str, symtab->strsize - (str - symtab->strtab));
+	  size += sizeof (stub);
+	}
     }
 
-  s_start = bfd_malloc (size);
+  s_start = bfd_malloc (size + count * sizeof (asymbol));
   s = *ret = (asymbol *) s_start;
   if (s == NULL)
     return -1;
   names = (char *) (s + count);
-  nul_name = names;
-  *names++ = 0;
-  s_end = s_start + size;
 
   n = 0;
   for (i = 0; i < mdata->nsects; i++)
@@ -984,7 +990,7 @@ bfd_mach_o_get_synthetic_symtab (bfd *ab
       bfd_mach_o_section *sec = mdata->sections[i];
       unsigned int first, last;
       bfd_vma addr;
-      bfd_vma entry_size;
+      unsigned int entry_size;
 
       switch (sec->flags & BFD_MACH_O_SECTION_TYPE_MASK)
 	{
@@ -998,47 +1004,39 @@ bfd_mach_o_get_synthetic_symtab (bfd *ab
 	  entry_size = bfd_mach_o_section_get_entry_size (abfd, sec);
 
 	  /* PR 17512: file: 08e15eec.  */
-	  if (first >= count || last >= count || first > last)
+	  if (first >= count || last > count || first > last)
 	    goto fail;
 
 	  for (j = first; j < last; j++)
 	    {
 	      unsigned int isym = dysymtab->indirect_syms[j];
-
-	      /* PR 17512: file: 04d64d9b.  */
-	      if (((char *) s) + sizeof (* s) > s_end)
-		goto fail;
-
-	      s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
-	      s->section = sec->bfdsection;
-	      s->value = addr - sec->addr;
-	      s->udata.p = NULL;
+	      const char *str;
+	      size_t len;
 
 	      if (isym < symtab->nsyms
-		  && symtab->symbols[isym].symbol.name)
+		  && (str = symtab->symbols[isym].symbol.name) != NULL)
 		{
-		  const char *sym = symtab->symbols[isym].symbol.name;
-		  size_t len;
-
-		  s->name = names;
-		  len = strlen (sym);
-		  /* PR 17512: file: 47dfd4d2.  */
-		  if (names + len >= s_end)
+		  /* PR 17512: file: 04d64d9b.  */
+		  if (n >= count)
 		    goto fail;
-		  memcpy (names, sym, len);
-		  names += len;
-		  /* PR 17512: file: 18f340a4.  */
-		  if (names + sizeof (stub) >= s_end)
+		  len = strnlen (str, symtab->strsize - (str - symtab->strtab));
+		  /* PR 17512: file: 47dfd4d2, 18f340a4.  */
+		  if (size < len + sizeof (stub))
 		    goto fail;
-		  memcpy (names, stub, sizeof (stub));
-		  names += sizeof (stub);
+		  memcpy (names, str, len);
+		  memcpy (names + len, stub, sizeof (stub));
+		  s->name = names;
+		  names += len + sizeof (stub);
+		  size -= len + sizeof (stub);
+		  s->the_bfd = symtab->symbols[isym].symbol.the_bfd;
+		  s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
+		  s->section = sec->bfdsection;
+		  s->value = addr - sec->addr;
+		  s->udata.p = NULL;
+		  s++;
+		  n++;
 		}
-	      else
-		s->name = nul_name;
-
 	      addr += entry_size;
-	      s++;
-	      n++;
 	    }
 	  break;
 	default:
@@ -1203,14 +1201,14 @@ bfd_mach_o_convert_architecture (bfd_mac
    number of bytes written or -1 in case of error.  */
 
 static int
-bfd_mach_o_pad4 (bfd *abfd, unsigned int len)
+bfd_mach_o_pad4 (bfd *abfd, size_t len)
 {
   if (len % 4 != 0)
     {
       char pad[4] = {0,0,0,0};
       unsigned int padlen = 4 - (len % 4);
 
-      if (bfd_bwrite (pad, padlen, abfd) != padlen)
+      if (bfd_write (pad, padlen, abfd) != padlen)
 	return -1;
 
       return padlen;
@@ -1222,16 +1220,16 @@ bfd_mach_o_pad4 (bfd *abfd, unsigned int
 /* Likewise, but for a command.  */
 
 static int
-bfd_mach_o_pad_command (bfd *abfd, unsigned int len)
+bfd_mach_o_pad_command (bfd *abfd, size_t len)
 {
-  unsigned int align = bfd_mach_o_wide_p (abfd) ? 8 : 4;
+  size_t align = bfd_mach_o_wide_p (abfd) ? 8 : 4;
 
   if (len % align != 0)
     {
       char pad[8] = {0};
-      unsigned int padlen = align - (len % align);
+      size_t padlen = align - (len % align);
 
-      if (bfd_bwrite (pad, padlen, abfd) != padlen)
+      if (bfd_write (pad, padlen, abfd) != padlen)
 	return -1;
 
       return padlen;
@@ -1240,11 +1238,11 @@ bfd_mach_o_pad_command (bfd *abfd, unsig
     return 0;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_header (bfd *abfd, bfd_mach_o_header *header)
 {
   struct mach_o_header_external raw;
-  unsigned int size;
+  size_t size;
 
   size = mach_o_wide_p (header) ?
     BFD_MACH_O_HEADER_64_SIZE : BFD_MACH_O_HEADER_SIZE;
@@ -1261,19 +1259,19 @@ bfd_mach_o_write_header (bfd *abfd, bfd_
     bfd_h_put_32 (abfd, header->reserved, raw.reserved);
 
   if (bfd_seek (abfd, 0, SEEK_SET) != 0
-      || bfd_bwrite (&raw, size, abfd) != size)
-    return FALSE;
+      || bfd_write (&raw, size, abfd) != size)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_thread (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_thread_command *cmd = &command->command.thread;
   unsigned int i;
   struct mach_o_thread_command_external raw;
-  unsigned int offset;
+  size_t offset;
 
   BFD_ASSERT ((command->type == BFD_MACH_O_LC_THREAD)
 	      || (command->type == BFD_MACH_O_LC_UNIXTHREAD));
@@ -1282,51 +1280,51 @@ bfd_mach_o_write_thread (bfd *abfd, bfd_
   for (i = 0; i < cmd->nflavours; i++)
     {
       BFD_ASSERT ((cmd->flavours[i].size % 4) == 0);
-      BFD_ASSERT (cmd->flavours[i].offset ==
-		  (command->offset + offset + BFD_MACH_O_LC_SIZE));
+      BFD_ASSERT (cmd->flavours[i].offset
+		  == command->offset + offset + BFD_MACH_O_LC_SIZE);
 
       bfd_h_put_32 (abfd, cmd->flavours[i].flavour, raw.flavour);
       bfd_h_put_32 (abfd, (cmd->flavours[i].size / 4), raw.count);
 
       if (bfd_seek (abfd, command->offset + offset, SEEK_SET) != 0
-	  || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+	  || bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+	return false;
 
       offset += cmd->flavours[i].size + sizeof (raw);
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_dylinker (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_dylinker_command *cmd = &command->command.dylinker;
   struct mach_o_str_command_external raw;
-  unsigned int namelen;
+  size_t namelen;
 
   bfd_h_put_32 (abfd, cmd->name_offset, raw.str);
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
-      || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+      || bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   namelen = strlen (cmd->name_str) + 1;
-  if (bfd_bwrite (cmd->name_str, namelen, abfd) != namelen)
-    return FALSE;
+  if (bfd_write (cmd->name_str, namelen, abfd) != namelen)
+    return false;
 
   if (bfd_mach_o_pad_command (abfd, namelen) < 0)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_dylib (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_dylib_command *cmd = &command->command.dylib;
   struct mach_o_dylib_command_external raw;
-  unsigned int namelen;
+  size_t namelen;
 
   bfd_h_put_32 (abfd, cmd->name_offset, raw.name);
   bfd_h_put_32 (abfd, cmd->timestamp, raw.timestamp);
@@ -1334,20 +1332,20 @@ bfd_mach_o_write_dylib (bfd *abfd, bfd_m
   bfd_h_put_32 (abfd, cmd->compatibility_version, raw.compatibility_version);
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
-      || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+      || bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   namelen = strlen (cmd->name_str) + 1;
-  if (bfd_bwrite (cmd->name_str, namelen, abfd) != namelen)
-    return FALSE;
+  if (bfd_write (cmd->name_str, namelen, abfd) != namelen)
+    return false;
 
   if (bfd_mach_o_pad_command (abfd, namelen) < 0)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_main (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_main_command *cmd = &command->command.main;
@@ -1357,13 +1355,13 @@ bfd_mach_o_write_main (bfd *abfd, bfd_ma
   bfd_h_put_64 (abfd, cmd->stacksize, raw.stacksize);
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
-      || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+      || bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_dyld_info (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_dyld_info_command *cmd = &command->command.dyld_info;
@@ -1381,54 +1379,64 @@ bfd_mach_o_write_dyld_info (bfd *abfd, b
   bfd_h_put_32 (abfd, cmd->export_size, raw.export_size);
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
-      || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+      || bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   if (cmd->rebase_size != 0)
     if (bfd_seek (abfd, cmd->rebase_off, SEEK_SET) != 0
-	|| (bfd_bwrite (cmd->rebase_content, cmd->rebase_size, abfd) !=
+	|| (bfd_write (cmd->rebase_content, cmd->rebase_size, abfd) !=
 	    cmd->rebase_size))
-      return FALSE;
+      return false;
 
   if (cmd->bind_size != 0)
     if (bfd_seek (abfd, cmd->bind_off, SEEK_SET) != 0
-	|| (bfd_bwrite (cmd->bind_content, cmd->bind_size, abfd) !=
+	|| (bfd_write (cmd->bind_content, cmd->bind_size, abfd) !=
 	    cmd->bind_size))
-      return FALSE;
+      return false;
 
   if (cmd->weak_bind_size != 0)
     if (bfd_seek (abfd, cmd->weak_bind_off, SEEK_SET) != 0
-	|| (bfd_bwrite (cmd->weak_bind_content, cmd->weak_bind_size, abfd) !=
+	|| (bfd_write (cmd->weak_bind_content, cmd->weak_bind_size, abfd) !=
 	    cmd->weak_bind_size))
-      return FALSE;
+      return false;
 
   if (cmd->lazy_bind_size != 0)
     if (bfd_seek (abfd, cmd->lazy_bind_off, SEEK_SET) != 0
-	|| (bfd_bwrite (cmd->lazy_bind_content, cmd->lazy_bind_size, abfd) !=
+	|| (bfd_write (cmd->lazy_bind_content, cmd->lazy_bind_size, abfd) !=
 	    cmd->lazy_bind_size))
-      return FALSE;
+      return false;
 
   if (cmd->export_size != 0)
     if (bfd_seek (abfd, cmd->export_off, SEEK_SET) != 0
-	|| (bfd_bwrite (cmd->export_content, cmd->export_size, abfd) !=
+	|| (bfd_write (cmd->export_content, cmd->export_size, abfd) !=
 	    cmd->export_size))
-      return FALSE;
+      return false;
 
-  return TRUE;
+  return true;
 }
 
 long
-bfd_mach_o_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
-				  asection *asect)
+bfd_mach_o_get_reloc_upper_bound (bfd *abfd, asection *asect)
 {
-#if SIZEOF_LONG == SIZEOF_INT
-   if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
+  size_t count, raw;
+
+  count = asect->reloc_count;
+  if (count >= LONG_MAX / sizeof (arelent *)
+      || _bfd_mul_overflow (count, BFD_MACH_O_RELENT_SIZE, &raw))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
-#endif
- return (asect->reloc_count + 1) * sizeof (arelent *);
+  if (!bfd_write_p (abfd))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && raw > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
+    }
+  return (count + 1) * sizeof (arelent *);
 }
 
 /* In addition to the need to byte-swap the symbol number, the bit positions
@@ -1462,7 +1470,7 @@ bfd_mach_o_swap_in_non_scattered_reloc (
 
 /* Set syms_ptr_ptr and addend of RES.  */
 
-bfd_boolean
+bool
 bfd_mach_o_canonicalize_non_scattered_reloc (bfd *abfd,
 					     bfd_mach_o_reloc_info *reloc,
 					     arelent *res, asymbol **syms)
@@ -1504,7 +1512,7 @@ bfd_mach_o_canonicalize_non_scattered_re
 	{
 	  _bfd_error_handler (_("\
 malformed mach-o reloc: section index is greater than the number of sections"));
-	  return FALSE;
+	  return false;
 	}
 
       /* A section number.  */
@@ -1525,7 +1533,7 @@ malformed mach-o reloc: section index is
      the PPC swap_reloc_in routine.  */
   res->sym_ptr_ptr = sym;
 
-  return TRUE;
+  return true;
 }
 
 /* Do most of the work for canonicalize_relocs on RAW: create internal
@@ -1536,7 +1544,7 @@ malformed mach-o reloc: section index is
    (like arm64) don't follow the generic rules (symnum is a value for the
    non-scattered relocation ADDEND).  */
 
-bfd_boolean
+bool
 bfd_mach_o_pre_canonicalize_one_reloc (bfd *abfd,
 				       struct mach_o_reloc_info_external *raw,
 				       bfd_mach_o_reloc_info *reloc,
@@ -1546,7 +1554,7 @@ bfd_mach_o_pre_canonicalize_one_reloc (b
   bfd_vma addr;
 
   addr = bfd_get_32 (abfd, raw->r_address);
-  res->sym_ptr_ptr = NULL;
+  res->sym_ptr_ptr = bfd_und_section_ptr->symbol_ptr_ptr;
   res->addend = 0;
 
   if (addr & BFD_MACH_O_SR_SCATTERED)
@@ -1564,7 +1572,7 @@ bfd_mach_o_pre_canonicalize_one_reloc (b
 	 end of the data for the section (e.g. in a calculation of section
 	 data length).  At present, the symbol will end up associated with
 	 the following section or, if it falls within alignment padding, as
-	 null - which will assert later.  */
+	 the undefined section symbol.  */
       for (j = 0; j < mdata->nsects; j++)
 	{
 	  bfd_mach_o_section *sect = mdata->sections[j];
@@ -1596,14 +1604,14 @@ bfd_mach_o_pre_canonicalize_one_reloc (b
 
       if (!bfd_mach_o_canonicalize_non_scattered_reloc (abfd, reloc,
 							res, syms))
-	return FALSE;
+	return false;
     }
 
   /* We have set up a reloc with all the information present, so the swapper
      can modify address, value and addend fields, if necessary, to convey
      information in the generic BFD reloc that is mach-o specific.  */
 
-  return TRUE;
+  return true;
 }
 
 static int
@@ -1614,24 +1622,20 @@ bfd_mach_o_canonicalize_relocs (bfd *abf
   bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd);
   unsigned long i;
   struct mach_o_reloc_info_external *native_relocs = NULL;
-  bfd_size_type native_size;
+  size_t native_size;
 
   /* Allocate and read relocs.  */
-  native_size = count * BFD_MACH_O_RELENT_SIZE;
-
-  /* PR 17512: file: 09477b57.  */
-  if (native_size < count)
+  if (_bfd_mul_overflow (count, BFD_MACH_O_RELENT_SIZE, &native_size))
+    /* PR 17512: file: 09477b57.  */
     goto err;
 
-  native_relocs =
-    (struct mach_o_reloc_info_external *) bfd_malloc (native_size);
+  if (bfd_seek (abfd, filepos, SEEK_SET) != 0)
+    return -1;
+  native_relocs = (struct mach_o_reloc_info_external *)
+    _bfd_malloc_and_read (abfd, native_size, native_size);
   if (native_relocs == NULL)
     return -1;
 
-  if (bfd_seek (abfd, filepos, SEEK_SET) != 0
-      || bfd_bread (native_relocs, native_size, abfd) != native_size)
-    goto err;
-
   for (i = 0; i < count; i++)
     {
       if (!(*bed->_bfd_mach_o_canonicalize_one_reloc)(abfd, &native_relocs[i],
@@ -1665,9 +1669,14 @@ bfd_mach_o_canonicalize_reloc (bfd *abfd
 
   if (asect->relocation == NULL)
     {
-      if (asect->reloc_count * sizeof (arelent) < asect->reloc_count)
-	return -1;
-      res = bfd_malloc (asect->reloc_count * sizeof (arelent));
+      size_t amt;
+
+      if (_bfd_mul_overflow (asect->reloc_count, sizeof (arelent), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  return -1;
+	}
+      res = bfd_malloc (amt);
       if (res == NULL)
 	return -1;
 
@@ -1692,11 +1701,36 @@ long
 bfd_mach_o_get_dynamic_reloc_upper_bound (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
+  bfd_mach_o_dysymtab_command *dysymtab = mdata->dysymtab;
 
-  if (mdata->dysymtab == NULL)
+  if (dysymtab == NULL)
     return 1;
-  return (mdata->dysymtab->nextrel + mdata->dysymtab->nlocrel + 1)
-    * sizeof (arelent *);
+
+  ufile_ptr filesize = bfd_get_file_size (abfd);
+  size_t amt;
+
+  if (filesize != 0)
+    {
+      if (dysymtab->extreloff > filesize
+	  || dysymtab->nextrel > ((filesize - dysymtab->extreloff)
+				  / BFD_MACH_O_RELENT_SIZE)
+	  || dysymtab->locreloff > filesize
+	  || dysymtab->nlocrel > ((filesize - dysymtab->locreloff)
+				  / BFD_MACH_O_RELENT_SIZE))
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
+    }
+  if (dysymtab->nextrel + dysymtab->nlocrel < dysymtab->nextrel
+      || _bfd_mul_overflow (dysymtab->nextrel + dysymtab->nlocrel,
+			    sizeof (arelent), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return -1;
+    }
+
+  return (dysymtab->nextrel + dysymtab->nlocrel + 1) * sizeof (arelent *);
 }
 
 long
@@ -1720,12 +1754,8 @@ bfd_mach_o_canonicalize_dynamic_reloc (b
 
   if (mdata->dyn_reloc_cache == NULL)
     {
-      if ((dysymtab->nextrel + dysymtab->nlocrel) * sizeof (arelent)
-	  < (dysymtab->nextrel + dysymtab->nlocrel))
-	return -1;
-
-      res = bfd_malloc ((dysymtab->nextrel + dysymtab->nlocrel)
-			* sizeof (arelent));
+      size_t amt = (dysymtab->nextrel + dysymtab->nlocrel) * sizeof (arelent);
+      res = bfd_malloc (amt);
       if (res == NULL)
 	return -1;
 
@@ -1789,7 +1819,7 @@ bfd_mach_o_swap_out_non_scattered_reloc
   fields[3] = info;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_relocs (bfd *abfd, bfd_mach_o_section *section)
 {
   unsigned int i;
@@ -1799,13 +1829,13 @@ bfd_mach_o_write_relocs (bfd *abfd, bfd_
 
   sec = section->bfdsection;
   if (sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   if (bed->_bfd_mach_o_swap_reloc_out == NULL)
-    return TRUE;
+    return true;
 
   if (bfd_seek (abfd, section->reloff, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   /* Convert and write.  */
   entries = section->bfdsection->orelocation;
@@ -1817,7 +1847,7 @@ bfd_mach_o_write_relocs (bfd *abfd, bfd_
 
       /* Convert relocation to an intermediate representation.  */
       if (!(*bed->_bfd_mach_o_swap_reloc_out) (rel, pinfo))
-	return FALSE;
+	return false;
 
       /* Lower the relocation info.  */
       if (pinfo->r_scattered)
@@ -1840,14 +1870,14 @@ bfd_mach_o_write_relocs (bfd *abfd, bfd_
 						   pinfo);
 	}
 
-      if (bfd_bwrite (&raw, BFD_MACH_O_RELENT_SIZE, abfd)
+      if (bfd_write (&raw, BFD_MACH_O_RELENT_SIZE, abfd)
 	  != BFD_MACH_O_RELENT_SIZE)
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_section_32 (bfd *abfd, bfd_mach_o_section *section)
 {
   struct mach_o_section_32_external raw;
@@ -1864,14 +1894,14 @@ bfd_mach_o_write_section_32 (bfd *abfd,
   bfd_h_put_32 (abfd, section->reserved1, raw.reserved1);
   bfd_h_put_32 (abfd, section->reserved2, raw.reserved2);
 
-  if (bfd_bwrite (&raw, BFD_MACH_O_SECTION_SIZE, abfd)
+  if (bfd_write (&raw, BFD_MACH_O_SECTION_SIZE, abfd)
       != BFD_MACH_O_SECTION_SIZE)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_section_64 (bfd *abfd, bfd_mach_o_section *section)
 {
   struct mach_o_section_64_external raw;
@@ -1889,14 +1919,14 @@ bfd_mach_o_write_section_64 (bfd *abfd,
   bfd_h_put_32 (abfd, section->reserved2, raw.reserved2);
   bfd_h_put_32 (abfd, section->reserved3, raw.reserved3);
 
-  if (bfd_bwrite (&raw, BFD_MACH_O_SECTION_64_SIZE, abfd)
+  if (bfd_write (&raw, BFD_MACH_O_SECTION_64_SIZE, abfd)
       != BFD_MACH_O_SECTION_64_SIZE)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_segment_32 (bfd *abfd, bfd_mach_o_load_command *command)
 {
   struct mach_o_segment_command_32_external raw;
@@ -1907,7 +1937,7 @@ bfd_mach_o_write_segment_32 (bfd *abfd,
 
   for (sec = seg->sect_head; sec != NULL; sec = sec->next)
     if (!bfd_mach_o_write_relocs (abfd, sec))
-      return FALSE;
+      return false;
 
   memcpy (raw.segname, seg->segname, 16);
   bfd_h_put_32 (abfd, seg->vmaddr, raw.vmaddr);
@@ -1920,17 +1950,17 @@ bfd_mach_o_write_segment_32 (bfd *abfd,
   bfd_h_put_32 (abfd, seg->flags, raw.flags);
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
-      || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+      || bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   for (sec = seg->sect_head; sec != NULL; sec = sec->next)
     if (!bfd_mach_o_write_section_32 (abfd, sec))
-      return FALSE;
+      return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_segment_64 (bfd *abfd, bfd_mach_o_load_command *command)
 {
   struct mach_o_segment_command_64_external raw;
@@ -1941,7 +1971,7 @@ bfd_mach_o_write_segment_64 (bfd *abfd,
 
   for (sec = seg->sect_head; sec != NULL; sec = sec->next)
     if (!bfd_mach_o_write_relocs (abfd, sec))
-      return FALSE;
+      return false;
 
   memcpy (raw.segname, seg->segname, 16);
   bfd_h_put_64 (abfd, seg->vmaddr, raw.vmaddr);
@@ -1954,17 +1984,17 @@ bfd_mach_o_write_segment_64 (bfd *abfd,
   bfd_h_put_32 (abfd, seg->flags, raw.flags);
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
-      || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+      || bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   for (sec = seg->sect_head; sec != NULL; sec = sec->next)
     if (!bfd_mach_o_write_section_64 (abfd, sec))
-      return FALSE;
+      return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_symtab_content (bfd *abfd, bfd_mach_o_symtab_command *sym)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -1976,17 +2006,17 @@ bfd_mach_o_write_symtab_content (bfd *ab
 
   /* Write the symbols first.  */
   if (bfd_seek (abfd, sym->symoff, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   strtab = _bfd_stringtab_init ();
   if (strtab == NULL)
-    return FALSE;
+    return false;
 
   if (sym->nsyms > 0)
     /* Although we don't strictly need to do this, for compatibility with
        Darwin system tools, actually output an empty string for the index
        0 entry.  */
-    _bfd_stringtab_add (strtab, "", TRUE, FALSE);
+    _bfd_stringtab_add (strtab, "", true, false);
 
   for (i = 0; i < sym->nsyms; i++)
     {
@@ -1998,7 +2028,7 @@ bfd_mach_o_write_symtab_content (bfd *ab
 	str_index = 0;
       else
 	{
-	  str_index = _bfd_stringtab_add (strtab, s->symbol.name, TRUE, FALSE);
+	  str_index = _bfd_stringtab_add (strtab, s->symbol.name, true, false);
 
 	  if (str_index == (bfd_size_type) -1)
 	    goto err;
@@ -2015,7 +2045,7 @@ bfd_mach_o_write_symtab_content (bfd *ab
 	  bfd_h_put_64 (abfd, s->symbol.section->vma + s->symbol.value,
 			raw.n_value);
 
-	  if (bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
+	  if (bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
 	    goto err;
 	}
       else
@@ -2029,7 +2059,7 @@ bfd_mach_o_write_symtab_content (bfd *ab
 	  bfd_h_put_32 (abfd, s->symbol.section->vma + s->symbol.value,
 			raw.n_value);
 
-	  if (bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
+	  if (bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
 	    goto err;
 	}
     }
@@ -2043,22 +2073,24 @@ bfd_mach_o_write_symtab_content (bfd *ab
   if (!_bfd_stringtab_emit (abfd, strtab))
     goto err;
 
+  _bfd_stringtab_free (strtab);
+
   /* Pad string table.  */
   padlen = bfd_mach_o_pad4 (abfd, sym->strsize);
   if (padlen < 0)
-    return FALSE;
+    return false;
   mdata->filelen += padlen;
   sym->strsize += padlen;
 
-  return TRUE;
+  return true;
 
  err:
   _bfd_stringtab_free (strtab);
   sym->strsize = 0;
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_symtab (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_symtab_command *sym = &command->command.symtab;
@@ -2073,10 +2105,10 @@ bfd_mach_o_write_symtab (bfd *abfd, bfd_
   bfd_h_put_32 (abfd, sym->strsize, raw.strsize);
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
-      || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+      || bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Count the number of indirect symbols in the image.
@@ -2108,7 +2140,7 @@ bfd_mach_o_count_indirect_symbols (bfd *
 
 /* Create the dysymtab.  */
 
-static bfd_boolean
+static bool
 bfd_mach_o_build_dysymtab (bfd *abfd, bfd_mach_o_dysymtab_command *cmd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -2122,7 +2154,7 @@ bfd_mach_o_build_dysymtab (bfd *abfd, bf
     {
       _bfd_error_handler (_("sorry: modtab, toc and extrefsyms are not yet"
 			    " implemented for dysymtab commands."));
-      return FALSE;
+      return false;
     }
 
   cmd->ilocalsym = 0;
@@ -2167,16 +2199,17 @@ bfd_mach_o_build_dysymtab (bfd *abfd, bf
     {
       unsigned i;
       unsigned n;
+      size_t amt;
 
       mdata->filelen = FILE_ALIGN (mdata->filelen, 2);
       cmd->indirectsymoff = mdata->filelen;
-      mdata->filelen += cmd->nindirectsyms * 4;
+      if (_bfd_mul_overflow (cmd->nindirectsyms, 4, &amt))
+	return false;
+      mdata->filelen += amt;
 
-      if (cmd->nindirectsyms * 4 < cmd->nindirectsyms)
-	return FALSE;
-      cmd->indirect_syms = bfd_zalloc (abfd, cmd->nindirectsyms * 4);
+      cmd->indirect_syms = bfd_zalloc (abfd, amt);
       if (cmd->indirect_syms == NULL)
-	return FALSE;
+	return false;
 
       n = 0;
       for (i = 0; i < mdata->nsects; ++i)
@@ -2216,13 +2249,13 @@ bfd_mach_o_build_dysymtab (bfd *abfd, bf
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write a dysymtab command.
    TODO: Possibly coalesce writes of smaller objects.  */
 
-static bfd_boolean
+static bool
 bfd_mach_o_write_dysymtab (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_dysymtab_command *cmd = &command->command.dysymtab;
@@ -2234,7 +2267,7 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
       unsigned int i;
 
       if (bfd_seek (abfd, cmd->modtaboff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       for (i = 0; i < cmd->nmodtab; i++)
 	{
@@ -2268,8 +2301,8 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
 	      bfd_h_put_32 (abfd, module->objc_module_info_size,
 			    &w.objc_module_info_size);
 
-	      if (bfd_bwrite ((void *) &w, sizeof (w), abfd) != sizeof (w))
-		return FALSE;
+	      if (bfd_write (&w, sizeof (w), abfd) != sizeof (w))
+		return false;
 	    }
 	  else
 	    {
@@ -2291,8 +2324,8 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
 	      bfd_h_put_32 (abfd, module->objc_module_info_size,
 			    &n.objc_module_info_size);
 
-	      if (bfd_bwrite ((void *) &n, sizeof (n), abfd) != sizeof (n))
-		return FALSE;
+	      if (bfd_write (&n, sizeof (n), abfd) != sizeof (n))
+		return false;
 	    }
 	}
     }
@@ -2302,7 +2335,7 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
       unsigned int i;
 
       if (bfd_seek (abfd, cmd->tocoff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       for (i = 0; i < cmd->ntoc; i++)
 	{
@@ -2312,8 +2345,8 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
 	  bfd_h_put_32 (abfd, toc->symbol_index, &raw.symbol_index);
 	  bfd_h_put_32 (abfd, toc->module_index, &raw.module_index);
 
-	  if (bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	  if (bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+	    return false;
 	}
     }
 
@@ -2322,15 +2355,15 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
       unsigned int i;
 
       if (bfd_seek (abfd, cmd->indirectsymoff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       for (i = 0; i < cmd->nindirectsyms; ++i)
 	{
 	  unsigned char raw[4];
 
 	  bfd_h_put_32 (abfd, cmd->indirect_syms[i], &raw);
-	  if (bfd_bwrite (raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	  if (bfd_write (raw, sizeof (raw), abfd) != sizeof (raw))
+	    return false;
 	}
     }
 
@@ -2339,7 +2372,7 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
       unsigned int i;
 
       if (bfd_seek (abfd, cmd->extrefsymoff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       for (i = 0; i < cmd->nextrefsyms; i++)
 	{
@@ -2362,14 +2395,14 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
 	    }
 
 	  bfd_h_put_32 (abfd, v, raw);
-	  if (bfd_bwrite (raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	  if (bfd_write (raw, sizeof (raw), abfd) != sizeof (raw))
+	    return false;
 	}
     }
 
   /* The command.  */
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0)
-    return FALSE;
+    return false;
   else
     {
       struct mach_o_dysymtab_command_external raw;
@@ -2393,11 +2426,11 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
       bfd_h_put_32 (abfd, cmd->locreloff, &raw.locreloff);
       bfd_h_put_32 (abfd, cmd->nlocrel, &raw.nlocrel);
 
-      if (bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+      if (bfd_write (&raw, sizeof (raw), abfd) != sizeof (raw))
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 static unsigned
@@ -2472,14 +2505,14 @@ bfd_mach_o_cf_symbols (const void *a, co
 		(by name)
 */
 
-static bfd_boolean
+static bool
 bfd_mach_o_mangle_symbols (bfd *abfd)
 {
   unsigned long i;
   asymbol **symbols = bfd_get_outsymbols (abfd);
 
   if (symbols == NULL || bfd_get_symcount (abfd) == 0)
-    return TRUE;
+    return true;
 
   for (i = 0; i < bfd_get_symcount (abfd); i++)
     {
@@ -2542,18 +2575,19 @@ bfd_mach_o_mangle_symbols (bfd *abfd)
       s->symbol.udata.i = i;  /* renumber.  */
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We build a flat table of sections, which can be re-ordered if necessary.
    Fill in the section number and other mach-o-specific data.  */
 
-static bfd_boolean
+static bool
 bfd_mach_o_mangle_sections (bfd *abfd, bfd_mach_o_data_struct *mdata)
 {
   asection *sec;
   unsigned target_index;
   unsigned nsect;
+  size_t amt;
 
   nsect = bfd_count_sections (abfd);
 
@@ -2561,21 +2595,21 @@ bfd_mach_o_mangle_sections (bfd *abfd, b
      doing.  */
   if (mdata->nsects == nsect
       && (mdata->nsects == 0 || mdata->sections != NULL))
-    return TRUE;
+    return true;
 
   /* We need to check that this can be done...  */
   if (nsect > 255)
     {
       _bfd_error_handler (_("mach-o: there are too many sections (%u)"
 			    " maximum is 255,\n"), nsect);
-      return FALSE;
+      return false;
     }
 
   mdata->nsects = nsect;
-  mdata->sections = bfd_alloc2 (abfd,
-				mdata->nsects, sizeof (bfd_mach_o_section *));
+  amt = mdata->nsects * sizeof (bfd_mach_o_section *);
+  mdata->sections = bfd_alloc (abfd, amt);
   if (mdata->sections == NULL)
-    return FALSE;
+    return false;
 
   /* Create Mach-O sections.
      Section type, attribute and align should have been set when the
@@ -2599,10 +2633,10 @@ bfd_mach_o_mangle_sections (bfd *abfd, b
       sec->target_index = ++target_index;
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 bfd_mach_o_write_contents (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -2613,12 +2647,12 @@ bfd_mach_o_write_contents (bfd *abfd)
 
   /* Make the commands, if not already present.  */
   if (!abfd->output_has_begun && !bfd_mach_o_build_commands (abfd))
-    return FALSE;
-  abfd->output_has_begun = TRUE;
+    return false;
+  abfd->output_has_begun = true;
 
   /* Write the header.  */
   if (!bfd_mach_o_write_header (abfd, &mdata->header))
-    return FALSE;
+    return false;
 
   /* First pass: allocate the linkedit segment.  */
   for (cmd = mdata->first_command; cmd != NULL; cmd = cmd->next)
@@ -2639,31 +2673,16 @@ bfd_mach_o_write_contents (bfd *abfd)
 	{
 	  bfd_mach_o_dyld_info_command *di = &cmd->command.dyld_info;
 
-	  if (di->rebase_size != 0)
-	    {
-	      di->rebase_off = mdata->filelen;
-	      mdata->filelen += di->rebase_size;
-	    }
-	  if (di->bind_size != 0)
-	    {
-	      di->bind_off = mdata->filelen;
-	      mdata->filelen += di->bind_size;
-	    }
-	  if (di->weak_bind_size != 0)
-	    {
-	      di->weak_bind_off = mdata->filelen;
-	      mdata->filelen += di->weak_bind_size;
-	    }
-	  if (di->lazy_bind_size != 0)
-	    {
-	      di->lazy_bind_off = mdata->filelen;
-	      mdata->filelen += di->lazy_bind_size;
-	    }
-	  if (di->export_size != 0)
-	    {
-	      di->export_off = mdata->filelen;
-	      mdata->filelen += di->export_size;
-	    }
+	  di->rebase_off = di->rebase_size != 0 ? mdata->filelen : 0;
+	  mdata->filelen += di->rebase_size;
+	  di->bind_off = di->bind_size != 0 ? mdata->filelen : 0;
+	  mdata->filelen += di->bind_size;
+	  di->weak_bind_off = di->weak_bind_size != 0 ? mdata->filelen : 0;
+	  mdata->filelen += di->weak_bind_size;
+	  di->lazy_bind_off = di->lazy_bind_size != 0 ? mdata->filelen : 0;
+	  mdata->filelen += di->lazy_bind_size;
+	  di->export_off = di->export_size != 0 ? mdata->filelen : 0;
+	  mdata->filelen += di->export_size;
 	}
 	break;
       case BFD_MACH_O_LC_LOAD_DYLIB:
@@ -2701,12 +2720,12 @@ bfd_mach_o_write_contents (bfd *abfd)
   /* Build the dysymtab.  */
   if (dysymtab != NULL)
     if (!bfd_mach_o_build_dysymtab (abfd, dysymtab))
-      return FALSE;
+      return false;
 
   /* Write symtab and strtab.  */
   if (symtab != NULL)
     if (!bfd_mach_o_write_symtab_content (abfd, symtab))
-      return FALSE;
+      return false;
 
   /* Adjust linkedit size.  */
   if (linkedit != NULL)
@@ -2734,57 +2753,57 @@ bfd_mach_o_write_contents (bfd *abfd)
       bfd_h_put_32 (abfd, cmd->len, raw.cmdsize);
 
       if (bfd_seek (abfd, cmd->offset, SEEK_SET) != 0
-	  || bfd_bwrite (&raw, BFD_MACH_O_LC_SIZE, abfd) != 8)
-	return FALSE;
+	  || bfd_write (&raw, BFD_MACH_O_LC_SIZE, abfd) != 8)
+	return false;
 
       switch (cmd->type)
 	{
 	case BFD_MACH_O_LC_SEGMENT:
 	  if (!bfd_mach_o_write_segment_32 (abfd, cmd))
-	    return FALSE;
+	    return false;
 	  break;
 	case BFD_MACH_O_LC_SEGMENT_64:
 	  if (!bfd_mach_o_write_segment_64 (abfd, cmd))
-	    return FALSE;
+	    return false;
 	  break;
 	case BFD_MACH_O_LC_SYMTAB:
 	  if (!bfd_mach_o_write_symtab (abfd, cmd))
-	    return FALSE;
+	    return false;
 	  break;
 	case BFD_MACH_O_LC_DYSYMTAB:
 	  if (!bfd_mach_o_write_dysymtab (abfd, cmd))
-	    return FALSE;
+	    return false;
 	  break;
 	case BFD_MACH_O_LC_THREAD:
 	case BFD_MACH_O_LC_UNIXTHREAD:
 	  if (!bfd_mach_o_write_thread (abfd, cmd))
-	    return FALSE;
+	    return false;
 	  break;
 	case BFD_MACH_O_LC_LOAD_DYLIB:
 	  if (!bfd_mach_o_write_dylib (abfd, cmd))
-	    return FALSE;
+	    return false;
 	  break;
 	case BFD_MACH_O_LC_LOAD_DYLINKER:
 	  if (!bfd_mach_o_write_dylinker (abfd, cmd))
-	    return FALSE;
+	    return false;
 	  break;
 	case BFD_MACH_O_LC_MAIN:
 	  if (!bfd_mach_o_write_main (abfd, cmd))
-	    return FALSE;
+	    return false;
 	  break;
 	case BFD_MACH_O_LC_DYLD_INFO:
 	  if (!bfd_mach_o_write_dyld_info (abfd, cmd))
-	    return FALSE;
+	    return false;
 	  break;
 	default:
 	  _bfd_error_handler
 	    (_("unable to write unknown load command %#x"),
 	     cmd->type);
-	  return FALSE;
+	  return false;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -2821,7 +2840,7 @@ bfd_mach_o_set_section_flags_from_bfd (b
     s->flags = BFD_MACH_O_S_REGULAR;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_build_obj_seg_command (bfd *abfd, bfd_mach_o_segment_command *seg)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -2926,10 +2945,10 @@ bfd_mach_o_build_obj_seg_command (bfd *a
       mdata->filelen += sec->reloc_count * BFD_MACH_O_RELENT_SIZE;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_build_exec_seg_command (bfd *abfd, bfd_mach_o_segment_command *seg)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -2965,7 +2984,7 @@ bfd_mach_o_build_exec_seg_command (bfd *
 	    (_("section address (%#" PRIx64 ") "
 	       "below start of segment (%#" PRIx64 ")"),
 	       (uint64_t) s->addr, (uint64_t) vma);
-	  return FALSE;
+	  return false;
 	}
 
       vma = s->addr + s->size;
@@ -3021,7 +3040,7 @@ bfd_mach_o_build_exec_seg_command (bfd *
 
       /* Relocs shouldn't appear in non-object files.  */
       if (s->bfdsection->reloc_count != 0)
-	return FALSE;
+	return false;
     }
 
   /* Set maxprot.  */
@@ -3036,13 +3055,13 @@ bfd_mach_o_build_exec_seg_command (bfd *
   seg->filesize = (seg->filesize + pagemask) & ~pagemask;
   mdata->filelen = (mdata->filelen + pagemask) & ~pagemask;
 
-  return TRUE;
+  return true;
 }
 
 /* Layout the commands: set commands size and offset, set ncmds and sizeofcmds
    fields in header.  */
 
-static bfd_boolean
+static bool
 bfd_mach_o_layout_commands (bfd_mach_o_data_struct *mdata)
 {
   unsigned wide = mach_o_wide_p (&mdata->header);
@@ -3050,7 +3069,7 @@ bfd_mach_o_layout_commands (bfd_mach_o_d
   ufile_ptr offset;
   bfd_mach_o_load_command *cmd;
   unsigned int align;
-  bfd_boolean ret = TRUE;
+  bool ret = true;
 
   hdrlen = wide ? BFD_MACH_O_HEADER_64_SIZE : BFD_MACH_O_HEADER_SIZE;
   align = wide ? 8 - 1 : 4 - 1;
@@ -3106,7 +3125,7 @@ bfd_mach_o_layout_commands (bfd_mach_o_d
 	  _bfd_error_handler
 	    (_("unable to layout unknown load command %#x"),
 	     cmd->type);
-	  ret = FALSE;
+	  ret = false;
 	  break;
 	}
 
@@ -3132,7 +3151,7 @@ bfd_mach_o_init_segment (bfd_mach_o_data
 
   /* Init segment command.  */
   cmd->type = wide ? BFD_MACH_O_LC_SEGMENT_64 : BFD_MACH_O_LC_SEGMENT;
-  cmd->type_required = FALSE;
+  cmd->type_required = false;
 
   strcpy (seg->segname, segname);
   seg->nsects = nbr_sect;
@@ -3153,7 +3172,7 @@ bfd_mach_o_init_segment (bfd_mach_o_data
    TODO: Other file formats, rebuilding symtab/dysymtab commands for strip
    and copy functionality.  */
 
-bfd_boolean
+bool
 bfd_mach_o_build_commands (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -3168,7 +3187,7 @@ bfd_mach_o_build_commands (bfd *abfd)
 
   /* Return now if already built.  */
   if (mdata->header.ncmds != 0)
-    return TRUE;
+    return true;
 
   /* Fill in the file type, if not already set.  */
   if (mdata->header.filetype == 0)
@@ -3186,12 +3205,12 @@ bfd_mach_o_build_commands (bfd *abfd)
      since that depends on properly numbered sections.  */
   if (mdata->nsects == 0 || mdata->sections == NULL)
     if (! bfd_mach_o_mangle_sections (abfd, mdata))
-      return FALSE;
+      return false;
 
   /* Order the symbol table, fill-in/check mach-o specific fields and
      partition out any indirect symbols.  */
   if (!bfd_mach_o_mangle_symbols (abfd))
-    return FALSE;
+    return false;
 
   /* Segment commands.  */
   if (mdata->header.filetype == BFD_MACH_O_MH_OBJECT)
@@ -3257,7 +3276,7 @@ bfd_mach_o_build_commands (bfd *abfd)
   /* Create commands for segments (and symtabs), prepend them.  */
   commands = bfd_zalloc (abfd, nbr_commands * sizeof (bfd_mach_o_load_command));
   if (commands == NULL)
-    return FALSE;
+    return false;
   for (i = 0; i < nbr_commands - 1; i++)
     commands[i].next = &commands[i + 1];
   commands[nbr_commands - 1].next = mdata->first_command;
@@ -3308,7 +3327,7 @@ bfd_mach_o_build_commands (bfd *abfd)
       bfd_mach_o_load_command *cmd = &commands[symtab_idx];
 
       cmd->type = BFD_MACH_O_LC_SYMTAB;
-      cmd->type_required = FALSE;
+      cmd->type_required = false;
     }
 
   /* If required, setup symtab command, see comment above about the quality
@@ -3318,7 +3337,7 @@ bfd_mach_o_build_commands (bfd *abfd)
       bfd_mach_o_load_command *cmd = &commands[dysymtab_idx];
 
       cmd->type = BFD_MACH_O_LC_DYSYMTAB;
-      cmd->type_required = FALSE;
+      cmd->type_required = false;
     }
 
   /* Create the main command.  */
@@ -3327,7 +3346,7 @@ bfd_mach_o_build_commands (bfd *abfd)
       bfd_mach_o_load_command *cmd = &commands[main_idx];
 
       cmd->type = BFD_MACH_O_LC_MAIN;
-      cmd->type_required = TRUE;
+      cmd->type_required = true;
 
       cmd->command.main.entryoff = 0;
       cmd->command.main.stacksize = 0;
@@ -3335,7 +3354,7 @@ bfd_mach_o_build_commands (bfd *abfd)
 
   /* Layout commands.  */
   if (! bfd_mach_o_layout_commands (mdata))
-    return FALSE;
+    return false;
 
   /* So, now we have sized the commands and the filelen set to that.
      Now we can build the segment command and set the section file offsets.  */
@@ -3344,7 +3363,7 @@ bfd_mach_o_build_commands (bfd *abfd)
       for (i = 0; i < nbr_segcmd; i++)
 	if (!bfd_mach_o_build_obj_seg_command
 	    (abfd, &commands[i].command.segment))
-	  return FALSE;
+	  return false;
     }
   else
     {
@@ -3356,7 +3375,7 @@ bfd_mach_o_build_commands (bfd *abfd)
 	  bfd_mach_o_segment_command *seg = &commands[i].command.segment;
 
 	  if (!bfd_mach_o_build_exec_seg_command (abfd, seg))
-	    return FALSE;
+	    return false;
 
 	  if (seg->vmaddr + seg->vmsize > maxvma)
 	    maxvma = seg->vmaddr + seg->vmsize;
@@ -3376,12 +3395,12 @@ bfd_mach_o_build_commands (bfd *abfd)
 	  bfd_get_start_address (abfd) - commands[1].command.segment.vmaddr;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the contents of a section.  */
 
-bfd_boolean
+bool
 bfd_mach_o_set_section_contents (bfd *abfd,
 				 asection *section,
 				 const void * location,
@@ -3393,17 +3412,17 @@ bfd_mach_o_set_section_contents (bfd *ab
   /* Trying to write the first section contents will trigger the creation of
      the load commands if they are not already present.  */
   if (!abfd->output_has_begun && !bfd_mach_o_build_commands (abfd))
-    return FALSE;
+    return false;
 
   if (count == 0)
-    return TRUE;
+    return true;
 
   pos = section->filepos + offset;
   if (bfd_seek (abfd, pos, SEEK_SET) != 0
-      || bfd_bwrite (location, count, abfd) != count)
-    return FALSE;
+      || bfd_write (location, count, abfd) != count)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 int
@@ -3429,7 +3448,7 @@ bfd_mach_o_make_empty_symbol (bfd *abfd)
   return new_symbol;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_header (bfd *abfd, file_ptr hdr_off, bfd_mach_o_header *header)
 {
   struct mach_o_header_external raw;
@@ -3438,8 +3457,8 @@ bfd_mach_o_read_header (bfd *abfd, file_
 
   /* Just read the magic number.  */
   if (bfd_seek (abfd, hdr_off, SEEK_SET) != 0
-      || bfd_bread (raw.magic, sizeof (raw.magic), abfd) != 4)
-    return FALSE;
+      || bfd_read (raw.magic, sizeof (raw.magic), abfd) != 4)
+    return false;
 
   if (bfd_getb32 (raw.magic) == BFD_MACH_O_MH_MAGIC)
     {
@@ -3472,7 +3491,7 @@ bfd_mach_o_read_header (bfd *abfd, file_
   else
     {
       header->byteorder = BFD_ENDIAN_UNKNOWN;
-      return FALSE;
+      return false;
     }
 
   /* Once the size of the header is known, read the full header.  */
@@ -3480,8 +3499,8 @@ bfd_mach_o_read_header (bfd *abfd, file_
     BFD_MACH_O_HEADER_64_SIZE : BFD_MACH_O_HEADER_SIZE;
 
   if (bfd_seek (abfd, hdr_off, SEEK_SET) != 0
-      || bfd_bread (&raw, size, abfd) != size)
-    return FALSE;
+      || bfd_read (&raw, size, abfd) != size)
+    return false;
 
   header->cputype = (*get32) (raw.cputype);
   header->cpusubtype = (*get32) (raw.cpusubtype);
@@ -3495,10 +3514,10 @@ bfd_mach_o_read_header (bfd *abfd, file_
   else
     header->reserved = 0;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 bfd_mach_o_new_section_hook (bfd *abfd, asection *sec)
 {
   bfd_mach_o_section *s;
@@ -3512,7 +3531,7 @@ bfd_mach_o_new_section_hook (bfd *abfd,
 
       s = (bfd_mach_o_section *) bfd_zalloc (abfd, sizeof (*s));
       if (s == NULL)
-	return FALSE;
+	return false;
       sec->used_by_bfd = s;
       s->bfdsection = sec;
 
@@ -3618,7 +3637,7 @@ bfd_mach_o_read_section_32 (bfd *abfd, u
   asection *sec;
   bfd_mach_o_section *section;
 
-  if (bfd_bread (&raw, BFD_MACH_O_SECTION_SIZE, abfd)
+  if (bfd_read (&raw, BFD_MACH_O_SECTION_SIZE, abfd)
       != BFD_MACH_O_SECTION_SIZE)
     return NULL;
 
@@ -3636,12 +3655,12 @@ bfd_mach_o_read_section_32 (bfd *abfd, u
   section->offset = bfd_h_get_32 (abfd, raw.offset);
   section->align = bfd_h_get_32 (abfd, raw.align);
   /* PR 17512: file: 0017eb76.  */
-  if (section->align > 64)
+  if (section->align >= 31)
     {
       _bfd_error_handler
-	(_("bfd_mach_o_read_section_32: overlarge alignment value: %#lx, "
-	   "using 32 instead"), section->align);
-      section->align = 32;
+	(_("bfd_mach_o_read_section_32: overlarge alignment value: %#lx"),
+	 section->align);
+      section->align = 30;
     }
   section->reloff = bfd_h_get_32 (abfd, raw.reloff);
   section->nreloc = bfd_h_get_32 (abfd, raw.nreloc);
@@ -3662,7 +3681,7 @@ bfd_mach_o_read_section_64 (bfd *abfd, u
   asection *sec;
   bfd_mach_o_section *section;
 
-  if (bfd_bread (&raw, BFD_MACH_O_SECTION_64_SIZE, abfd)
+  if (bfd_read (&raw, BFD_MACH_O_SECTION_64_SIZE, abfd)
       != BFD_MACH_O_SECTION_64_SIZE)
     return NULL;
 
@@ -3679,12 +3698,12 @@ bfd_mach_o_read_section_64 (bfd *abfd, u
   section->size = bfd_h_get_64 (abfd, raw.size);
   section->offset = bfd_h_get_32 (abfd, raw.offset);
   section->align = bfd_h_get_32 (abfd, raw.align);
-  if (section->align > 64)
+  if (section->align >= 63)
     {
       _bfd_error_handler
-	(_("bfd_mach_o_read_section_64: overlarge alignment value: %#lx, "
-	   "using 32 instead"), section->align);
-      section->align = 32;
+	(_("bfd_mach_o_read_section_64: overlarge alignment value: %#lx"),
+	 section->align);
+      section->align = 62;
     }
   section->reloff = bfd_h_get_32 (abfd, raw.reloff);
   section->nreloc = bfd_h_get_32 (abfd, raw.nreloc);
@@ -3707,7 +3726,7 @@ bfd_mach_o_read_section (bfd *abfd, unsi
     return bfd_mach_o_read_section_32 (abfd, prot);
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_symtab_symbol (bfd *abfd,
 			       bfd_mach_o_symtab_command *sym,
 			       bfd_mach_o_asymbol *s,
@@ -3729,13 +3748,13 @@ bfd_mach_o_read_symtab_symbol (bfd *abfd
   BFD_ASSERT (sym->strtab != NULL);
 
   if (bfd_seek (abfd, symoff, SEEK_SET) != 0
-      || bfd_bread (&raw, symwidth, abfd) != symwidth)
+      || bfd_read (&raw, symwidth, abfd) != symwidth)
     {
       _bfd_error_handler
 	/* xgettext:c-format */
 	(_("bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"),
 	 symwidth, symoff);
-      return FALSE;
+      return false;
     }
 
   stroff = bfd_h_get_32 (abfd, raw.n_strx);
@@ -3755,7 +3774,7 @@ bfd_mach_o_read_symtab_symbol (bfd *abfd
 	(_("bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"),
 	 stroff,
 	 sym->strsize);
-      return FALSE;
+      return false;
     }
 
   s->symbol.the_bfd = abfd;
@@ -3862,10 +3881,10 @@ bfd_mach_o_read_symtab_symbol (bfd *abfd
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 bfd_mach_o_read_symtab_strtab (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -3873,11 +3892,11 @@ bfd_mach_o_read_symtab_strtab (bfd *abfd
 
   /* Fail if there is no symtab.  */
   if (sym == NULL)
-    return FALSE;
+    return false;
 
   /* Success if already loaded.  */
   if (sym->strtab)
-    return TRUE;
+    return true;
 
   if (abfd->flags & BFD_IN_MEMORY)
     {
@@ -3888,7 +3907,7 @@ bfd_mach_o_read_symtab_strtab (bfd *abfd
       if ((sym->stroff + sym->strsize) > b->size)
 	{
 	  bfd_set_error (bfd_error_file_truncated);
-	  return FALSE;
+	  return false;
 	}
       sym->strtab = (char *) b->buffer + sym->stroff;
     }
@@ -3896,45 +3915,55 @@ bfd_mach_o_read_symtab_strtab (bfd *abfd
     {
       /* See PR 21840 for a reproducer.  */
       if ((sym->strsize + 1) == 0)
-	return FALSE;
-      sym->strtab = bfd_alloc (abfd, sym->strsize + 1);
+	return false;
+      if (bfd_seek (abfd, sym->stroff, SEEK_SET) != 0)
+	return false;
+      sym->strtab = (char *) _bfd_alloc_and_read (abfd, sym->strsize + 1,
+						  sym->strsize);
       if (sym->strtab == NULL)
-	return FALSE;
+	return false;
 
-      if (bfd_seek (abfd, sym->stroff, SEEK_SET) != 0
-	  || bfd_bread (sym->strtab, sym->strsize, abfd) != sym->strsize)
-	{
-	  /* PR 17512: file: 10888-1609-0.004.  */
-	  bfd_release (abfd, sym->strtab);
-	  sym->strtab = NULL;
-	  bfd_set_error (bfd_error_file_truncated);
-	  return FALSE;
-	}
       /* Zero terminate the string table.  */
       sym->strtab[sym->strsize] = 0;
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 bfd_mach_o_read_symtab_symbols (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
   bfd_mach_o_symtab_command *sym = mdata->symtab;
   unsigned long i;
+  size_t amt;
+  ufile_ptr filesize;
 
-  if (sym == NULL || sym->symbols)
+  if (sym == NULL || sym->nsyms == 0 || sym->symbols)
     /* Return now if there are no symbols or if already loaded.  */
-    return TRUE;
+    return true;
+
+  filesize = bfd_get_file_size (abfd);
+  if (filesize != 0)
+    {
+      unsigned int wide = mach_o_wide_p (&mdata->header);
+      unsigned int symwidth
+	= wide ? BFD_MACH_O_NLIST_64_SIZE : BFD_MACH_O_NLIST_SIZE;
 
-  sym->symbols = bfd_alloc2 (abfd, sym->nsyms, sizeof (bfd_mach_o_asymbol));
-  if (sym->symbols == NULL)
+      if (sym->symoff > filesize
+	  || sym->nsyms > (filesize - sym->symoff) / symwidth)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  sym->nsyms = 0;
+	  return false;
+	}
+    }
+  if (_bfd_mul_overflow (sym->nsyms, sizeof (bfd_mach_o_asymbol), &amt)
+      || (sym->symbols = bfd_alloc (abfd, amt)) == NULL)
     {
-      _bfd_error_handler (_("bfd_mach_o_read_symtab_symbols: "
-			    "unable to allocate memory for symbols"));
+      bfd_set_error (bfd_error_no_memory);
       sym->nsyms = 0;
-      return FALSE;
+      return false;
     }
 
   if (!bfd_mach_o_read_symtab_strtab (abfd))
@@ -3944,13 +3973,13 @@ bfd_mach_o_read_symtab_symbols (bfd *abf
     if (!bfd_mach_o_read_symtab_symbol (abfd, sym, &sym->symbols[i], i))
       goto fail;
 
-  return TRUE;
+  return true;
 
  fail:
   bfd_release (abfd, sym->symbols);
   sym->symbols = NULL;
   sym->nsyms = 0;
-  return FALSE;
+  return false;
 }
 
 static const char *
@@ -3990,40 +4019,55 @@ bfd_mach_o_ppc_flavour_string (unsigned
     }
 }
 
-static bfd_boolean
+static unsigned char *
+bfd_mach_o_alloc_and_read (bfd *abfd, file_ptr filepos,
+			   size_t size, size_t extra)
+{
+  if (bfd_seek (abfd, filepos, SEEK_SET) != 0)
+    return NULL;
+  unsigned char *ret = _bfd_alloc_and_read (abfd, size + extra, size);
+  if (ret && extra != 0)
+    memset (ret + size, 0, extra);
+  return ret;
+}
+
+static bool
 bfd_mach_o_read_dylinker (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_dylinker_command *cmd = &command->command.dylinker;
   struct mach_o_str_command_external raw;
   unsigned int nameoff;
-  unsigned int namelen;
+  size_t namelen;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   nameoff = bfd_h_get_32 (abfd, raw.str);
+  if (nameoff > command->len)
+    return false;
 
   cmd->name_offset = nameoff;
   namelen = command->len - nameoff;
   nameoff += command->offset;
-  cmd->name_str = bfd_alloc (abfd, namelen);
-  if (cmd->name_str == NULL)
-    return FALSE;
-  if (bfd_seek (abfd, nameoff, SEEK_SET) != 0
-      || bfd_bread (cmd->name_str, namelen, abfd) != namelen)
-    return FALSE;
-  return TRUE;
+  cmd->name_str = (char *) bfd_mach_o_alloc_and_read (abfd, nameoff,
+						      namelen, 1);
+  return cmd->name_str != NULL;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_dylib (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
   bfd_mach_o_dylib_command *cmd = &command->command.dylib;
   struct mach_o_dylib_command_external raw;
   unsigned int nameoff;
-  unsigned int namelen;
+  size_t namelen;
+  file_ptr pos;
 
+  if (command->len < sizeof (raw) + 8)
+    return false;
   switch (command->type)
     {
     case BFD_MACH_O_LC_LOAD_DYLIB:
@@ -4035,29 +4079,27 @@ bfd_mach_o_read_dylib (bfd *abfd, bfd_ma
       break;
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   nameoff = bfd_h_get_32 (abfd, raw.name);
+  if (nameoff > command->len)
+    return false;
   cmd->timestamp = bfd_h_get_32 (abfd, raw.timestamp);
   cmd->current_version = bfd_h_get_32 (abfd, raw.current_version);
   cmd->compatibility_version = bfd_h_get_32 (abfd, raw.compatibility_version);
 
   cmd->name_offset = command->offset + nameoff;
   namelen = command->len - nameoff;
-  cmd->name_str = bfd_alloc (abfd, namelen);
-  if (cmd->name_str == NULL)
-    return FALSE;
-  if (bfd_seek (abfd, mdata->hdr_offset + cmd->name_offset, SEEK_SET) != 0
-      || bfd_bread (cmd->name_str, namelen, abfd) != namelen)
-    return FALSE;
-  return TRUE;
+  pos = mdata->hdr_offset + cmd->name_offset;
+  cmd->name_str = (char *) bfd_mach_o_alloc_and_read (abfd, pos, namelen, 1);
+  return cmd->name_str != NULL;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_prebound_dylib (bfd *abfd,
 				bfd_mach_o_load_command *command)
 {
@@ -4068,20 +4110,20 @@ bfd_mach_o_read_prebound_dylib (bfd *abf
   unsigned int str_len;
   unsigned char *str;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   nameoff = bfd_h_get_32 (abfd, raw.name);
   modoff = bfd_h_get_32 (abfd, raw.linked_modules);
   if (nameoff > command->len || modoff > command->len)
-    return FALSE;
+    return false;
 
   str_len = command->len - sizeof (raw);
-  str = bfd_alloc (abfd, str_len);
+  str = _bfd_alloc_and_read (abfd, str_len, str_len);
   if (str == NULL)
-    return FALSE;
-  if (bfd_bread (str, str_len, abfd) != str_len)
-    return FALSE;
+    return false;
 
   cmd->name_offset = command->offset + nameoff;
   cmd->nmodules = bfd_h_get_32 (abfd, raw.nmodules);
@@ -4089,65 +4131,69 @@ bfd_mach_o_read_prebound_dylib (bfd *abf
 
   cmd->name_str = (char *)str + nameoff - (sizeof (raw) + BFD_MACH_O_LC_SIZE);
   cmd->linked_modules = str + modoff - (sizeof (raw) + BFD_MACH_O_LC_SIZE);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_prebind_cksum (bfd *abfd,
 			       bfd_mach_o_load_command *command)
 {
   bfd_mach_o_prebind_cksum_command *cmd = &command->command.prebind_cksum;
   struct mach_o_prebind_cksum_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   cmd->cksum = bfd_get_32 (abfd, raw.cksum);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_twolevel_hints (bfd *abfd,
 				bfd_mach_o_load_command *command)
 {
   bfd_mach_o_twolevel_hints_command *cmd = &command->command.twolevel_hints;
   struct mach_o_twolevel_hints_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   cmd->offset = bfd_get_32 (abfd, raw.offset);
   cmd->nhints = bfd_get_32 (abfd, raw.nhints);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_fvmlib (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_fvmlib_command *fvm = &command->command.fvmlib;
   struct mach_o_fvmlib_command_external raw;
   unsigned int nameoff;
-  unsigned int namelen;
+  size_t namelen;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   nameoff = bfd_h_get_32 (abfd, raw.name);
+  if (nameoff > command->len)
+    return false;
   fvm->minor_version = bfd_h_get_32 (abfd, raw.minor_version);
   fvm->header_addr = bfd_h_get_32 (abfd, raw.header_addr);
 
   fvm->name_offset = command->offset + nameoff;
   namelen = command->len - nameoff;
-  fvm->name_str = bfd_alloc (abfd, namelen);
-  if (fvm->name_str == NULL)
-    return FALSE;
-  if (bfd_seek (abfd, fvm->name_offset, SEEK_SET) != 0
-      || bfd_bread (fvm->name_str, namelen, abfd) != namelen)
-    return FALSE;
-  return TRUE;
+  fvm->name_str = (char *) bfd_mach_o_alloc_and_read (abfd, fvm->name_offset,
+						      namelen, 1);
+  return fvm->name_str != NULL;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_thread (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -4155,6 +4201,8 @@ bfd_mach_o_read_thread (bfd *abfd, bfd_m
   unsigned int offset;
   unsigned int nflavours;
   unsigned int i;
+  struct mach_o_thread_command_external raw;
+  size_t amt;
 
   BFD_ASSERT ((command->type == BFD_MACH_O_LC_THREAD)
 	      || (command->type == BFD_MACH_O_LC_UNIXTHREAD));
@@ -4162,43 +4210,42 @@ bfd_mach_o_read_thread (bfd *abfd, bfd_m
   /* Count the number of threads.  */
   offset = 8;
   nflavours = 0;
-  while (offset != command->len)
+  while (offset + sizeof (raw) <= command->len)
     {
-      struct mach_o_thread_command_external raw;
-
-      if (offset >= command->len)
-	return FALSE;
+      unsigned int count;
 
       if (bfd_seek (abfd, command->offset + offset, SEEK_SET) != 0
-	  || bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+	  || bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+	return false;
 
-      offset += sizeof (raw) + bfd_h_get_32 (abfd, raw.count) * 4;
+      count = bfd_h_get_32 (abfd, raw.count);
+      if (count > (unsigned) -1 / 4
+	  || command->len - (offset + sizeof (raw)) < count * 4)
+	return false;
+      offset += sizeof (raw) + count * 4;
       nflavours++;
     }
+  if (nflavours == 0 || offset != command->len)
+    return false;
 
   /* Allocate threads.  */
-  cmd->flavours = bfd_alloc2
-    (abfd, nflavours, sizeof (bfd_mach_o_thread_flavour));
+  if (_bfd_mul_overflow (nflavours, sizeof (bfd_mach_o_thread_flavour), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  cmd->flavours = bfd_alloc (abfd, amt);
   if (cmd->flavours == NULL)
-    return FALSE;
+    return false;
   cmd->nflavours = nflavours;
 
   offset = 8;
   nflavours = 0;
   while (offset != command->len)
     {
-      struct mach_o_thread_command_external raw;
-
-      if (offset >= command->len)
-	return FALSE;
-
-      if (nflavours >= cmd->nflavours)
-	return FALSE;
-
       if (bfd_seek (abfd, command->offset + offset, SEEK_SET) != 0
-	  || bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+	  || bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+	return false;
 
       cmd->flavours[nflavours].flavour = bfd_h_get_32 (abfd, raw.flavour);
       cmd->flavours[nflavours].offset = command->offset + offset + sizeof (raw);
@@ -4210,7 +4257,7 @@ bfd_mach_o_read_thread (bfd *abfd, bfd_m
   for (i = 0; i < nflavours; i++)
     {
       asection *bfdsec;
-      unsigned int snamelen;
+      size_t snamelen;
       char *sname;
       const char *flavourstr;
       const char *prefix = "LC_THREAD";
@@ -4236,7 +4283,7 @@ bfd_mach_o_read_thread (bfd *abfd, bfd_m
       snamelen = strlen (prefix) + 1 + 20 + 1 + strlen (flavourstr) + 1;
       sname = bfd_alloc (abfd, snamelen);
       if (sname == NULL)
-	return FALSE;
+	return false;
 
       for (;;)
 	{
@@ -4257,11 +4304,12 @@ bfd_mach_o_read_thread (bfd *abfd, bfd_m
       cmd->section = bfdsec;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
-bfd_mach_o_read_dysymtab (bfd *abfd, bfd_mach_o_load_command *command)
+static bool
+bfd_mach_o_read_dysymtab (bfd *abfd, bfd_mach_o_load_command *command,
+			  ufile_ptr filesize)
 {
   bfd_mach_o_dysymtab_command *cmd = &command->command.dysymtab;
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -4271,8 +4319,10 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
   {
     struct mach_o_dysymtab_command_external raw;
 
-    if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-      return FALSE;
+    if (command->len < sizeof (raw) + 8)
+      return false;
+    if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+      return false;
 
     cmd->ilocalsym = bfd_h_get_32 (abfd, raw.ilocalsym);
     cmd->nlocalsym = bfd_h_get_32 (abfd, raw.nlocalsym);
@@ -4299,14 +4349,26 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
       unsigned int i;
       int wide = bfd_mach_o_wide_p (abfd);
       unsigned int module_len = wide ? 56 : 52;
+      size_t amt;
 
-      cmd->dylib_module =
-	bfd_alloc2 (abfd, cmd->nmodtab, sizeof (bfd_mach_o_dylib_module));
+      if (cmd->modtaboff > filesize
+	  || cmd->nmodtab > (filesize - cmd->modtaboff) / module_len)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return false;
+	}
+      if (_bfd_mul_overflow (cmd->nmodtab,
+			     sizeof (bfd_mach_o_dylib_module), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  return false;
+	}
+      cmd->dylib_module = bfd_alloc (abfd, amt);
       if (cmd->dylib_module == NULL)
-	return FALSE;
+	return false;
 
       if (bfd_seek (abfd, cmd->modtaboff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       for (i = 0; i < cmd->nmodtab; i++)
 	{
@@ -4314,8 +4376,8 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
 	  unsigned long v;
 	  unsigned char buf[56];
 
-	  if (bfd_bread ((void *) buf, module_len, abfd) != module_len)
-	    return FALSE;
+	  if (bfd_read (buf, module_len, abfd) != module_len)
+	    return false;
 
 	  module->module_name_idx = bfd_h_get_32 (abfd, buf + 0);
 	  module->iextdefsym = bfd_h_get_32 (abfd, buf + 4);
@@ -4348,22 +4410,34 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
   if (cmd->ntoc != 0)
     {
       unsigned long i;
+      size_t amt;
+      struct mach_o_dylib_table_of_contents_external raw;
 
-      cmd->dylib_toc = bfd_alloc2
-	(abfd, cmd->ntoc, sizeof (bfd_mach_o_dylib_table_of_content));
+      if (cmd->tocoff > filesize
+	  || cmd->ntoc > (filesize - cmd->tocoff) / sizeof (raw))
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return false;
+	}
+      if (_bfd_mul_overflow (cmd->ntoc,
+			     sizeof (bfd_mach_o_dylib_table_of_content), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  return false;
+	}
+      cmd->dylib_toc = bfd_alloc (abfd, amt);
       if (cmd->dylib_toc == NULL)
-	return FALSE;
+	return false;
 
       if (bfd_seek (abfd, cmd->tocoff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       for (i = 0; i < cmd->ntoc; i++)
 	{
-	  struct mach_o_dylib_table_of_contents_external raw;
 	  bfd_mach_o_dylib_table_of_content *toc = &cmd->dylib_toc[i];
 
-	  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+	    return false;
 
 	  toc->symbol_index = bfd_h_get_32 (abfd, raw.symbol_index);
 	  toc->module_index = bfd_h_get_32 (abfd, raw.module_index);
@@ -4373,22 +4447,33 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
   if (cmd->nindirectsyms != 0)
     {
       unsigned int i;
+      size_t amt;
 
-      cmd->indirect_syms = bfd_alloc2
-	(abfd, cmd->nindirectsyms, sizeof (unsigned int));
+      if (cmd->indirectsymoff > filesize
+	  || cmd->nindirectsyms > (filesize - cmd->indirectsymoff) / 4)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return false;
+	}
+      if (_bfd_mul_overflow (cmd->nindirectsyms, sizeof (unsigned int), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  return false;
+	}
+      cmd->indirect_syms = bfd_alloc (abfd, amt);
       if (cmd->indirect_syms == NULL)
-	return FALSE;
+	return false;
 
       if (bfd_seek (abfd, cmd->indirectsymoff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       for (i = 0; i < cmd->nindirectsyms; i++)
 	{
 	  unsigned char raw[4];
 	  unsigned int *is = &cmd->indirect_syms[i];
 
-	  if (bfd_bread (raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	  if (bfd_read (raw, sizeof (raw), abfd) != sizeof (raw))
+	    return false;
 
 	  *is = bfd_h_get_32 (abfd, raw);
 	}
@@ -4398,22 +4483,34 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
     {
       unsigned long v;
       unsigned int i;
+      size_t amt;
 
-      cmd->ext_refs = bfd_alloc2
-	(abfd, cmd->nextrefsyms, sizeof (bfd_mach_o_dylib_reference));
+      if (cmd->extrefsymoff > filesize
+	  || cmd->nextrefsyms > (filesize - cmd->extrefsymoff) / 4)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return false;
+	}
+      if (_bfd_mul_overflow (cmd->nextrefsyms,
+			     sizeof (bfd_mach_o_dylib_reference), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  return false;
+	}
+      cmd->ext_refs = bfd_alloc (abfd, amt);
       if (cmd->ext_refs == NULL)
-	return FALSE;
+	return false;
 
       if (bfd_seek (abfd, cmd->extrefsymoff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       for (i = 0; i < cmd->nextrefsyms; i++)
 	{
 	  unsigned char raw[4];
 	  bfd_mach_o_dylib_reference *ref = &cmd->ext_refs[i];
 
-	  if (bfd_bread (raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	  if (bfd_read (raw, sizeof (raw), abfd) != sizeof (raw))
+	    return false;
 
 	  /* Fields isym and flags are written as bit-fields, thus we need
 	     a specific processing for endianness.  */
@@ -4432,14 +4529,15 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
     }
 
   if (mdata->dysymtab)
-    return FALSE;
+    return false;
   mdata->dysymtab = cmd;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
-bfd_mach_o_read_symtab (bfd *abfd, bfd_mach_o_load_command *command)
+static bool
+bfd_mach_o_read_symtab (bfd *abfd, bfd_mach_o_load_command *command,
+			ufile_ptr filesize)
 {
   bfd_mach_o_symtab_command *symtab = &command->command.symtab;
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -4447,8 +4545,10 @@ bfd_mach_o_read_symtab (bfd *abfd, bfd_m
 
   BFD_ASSERT (command->type == BFD_MACH_O_LC_SYMTAB);
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   symtab->symoff = bfd_h_get_32 (abfd, raw.symoff);
   symtab->nsyms = bfd_h_get_32 (abfd, raw.nsyms);
@@ -4457,137 +4557,144 @@ bfd_mach_o_read_symtab (bfd *abfd, bfd_m
   symtab->symbols = NULL;
   symtab->strtab = NULL;
 
+  if (symtab->symoff > filesize
+      || symtab->nsyms > (filesize - symtab->symoff) / BFD_MACH_O_NLIST_SIZE
+      || symtab->stroff > filesize
+      || symtab->strsize > filesize - symtab->stroff)
+    {
+      bfd_set_error (bfd_error_file_truncated);
+      return false;
+    }
+
   if (symtab->nsyms != 0)
     abfd->flags |= HAS_SYMS;
 
   if (mdata->symtab)
-    return FALSE;
+    return false;
   mdata->symtab = symtab;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_uuid (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_uuid_command *cmd = &command->command.uuid;
 
   BFD_ASSERT (command->type == BFD_MACH_O_LC_UUID);
 
-  if (bfd_bread (cmd->uuid, 16, abfd) != 16)
-    return FALSE;
+  if (command->len < 16 + 8)
+    return false;
+  if (bfd_read (cmd->uuid, 16, abfd) != 16)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_linkedit (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_linkedit_command *cmd = &command->command.linkedit;
   struct mach_o_linkedit_data_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   cmd->dataoff = bfd_get_32 (abfd, raw.dataoff);
   cmd->datasize = bfd_get_32 (abfd, raw.datasize);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_str (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_str_command *cmd = &command->command.str;
   struct mach_o_str_command_external raw;
   unsigned long off;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   off = bfd_get_32 (abfd, raw.str);
+  if (off > command->len)
+    return false;
+
   cmd->stroff = command->offset + off;
   cmd->str_len = command->len - off;
-  cmd->str = bfd_alloc (abfd, cmd->str_len);
-  if (cmd->str == NULL)
-    return FALSE;
-  if (bfd_seek (abfd, cmd->stroff, SEEK_SET) != 0
-      || bfd_bread ((void *) cmd->str, cmd->str_len, abfd) != cmd->str_len)
-    return FALSE;
-  return TRUE;
+  cmd->str = (char *) bfd_mach_o_alloc_and_read (abfd, cmd->stroff,
+						 cmd->str_len, 1);
+  return cmd->str != NULL;
 }
 
-static unsigned char *
-bfd_mach_o_alloc_and_read (bfd *abfd, unsigned int off, unsigned int size)
-{
-  unsigned char *buf;
-
-  buf = bfd_alloc (abfd, size);
-  if (buf == NULL)
-    return NULL;
-  if (bfd_seek (abfd, off, SEEK_SET) != 0
-      || bfd_bread (buf, size, abfd) != size)
-    return NULL;
-  return buf;
-}
-
-static bfd_boolean
+static bool
 bfd_mach_o_read_dyld_content (bfd *abfd, bfd_mach_o_dyld_info_command *cmd)
 {
   /* Read rebase content.  */
   if (cmd->rebase_content == NULL && cmd->rebase_size != 0)
     {
-      cmd->rebase_content =
-	bfd_mach_o_alloc_and_read (abfd, cmd->rebase_off, cmd->rebase_size);
+      cmd->rebase_content
+	= bfd_mach_o_alloc_and_read (abfd, cmd->rebase_off,
+				     cmd->rebase_size, 0);
       if (cmd->rebase_content == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Read bind content.  */
   if (cmd->bind_content == NULL && cmd->bind_size != 0)
     {
-      cmd->bind_content =
-	bfd_mach_o_alloc_and_read (abfd, cmd->bind_off, cmd->bind_size);
+      cmd->bind_content
+	= bfd_mach_o_alloc_and_read (abfd, cmd->bind_off,
+				     cmd->bind_size, 0);
       if (cmd->bind_content == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Read weak bind content.  */
   if (cmd->weak_bind_content == NULL && cmd->weak_bind_size != 0)
     {
-      cmd->weak_bind_content = bfd_mach_o_alloc_and_read
-	(abfd, cmd->weak_bind_off, cmd->weak_bind_size);
+      cmd->weak_bind_content
+	= bfd_mach_o_alloc_and_read (abfd, cmd->weak_bind_off,
+				     cmd->weak_bind_size, 0);
       if (cmd->weak_bind_content == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Read lazy bind content.  */
   if (cmd->lazy_bind_content == NULL && cmd->lazy_bind_size != 0)
     {
-      cmd->lazy_bind_content = bfd_mach_o_alloc_and_read
-	(abfd, cmd->lazy_bind_off, cmd->lazy_bind_size);
+      cmd->lazy_bind_content
+	= bfd_mach_o_alloc_and_read (abfd, cmd->lazy_bind_off,
+				     cmd->lazy_bind_size, 0);
       if (cmd->lazy_bind_content == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Read export content.  */
   if (cmd->export_content == NULL && cmd->export_size != 0)
     {
-      cmd->export_content = bfd_mach_o_alloc_and_read
-	(abfd, cmd->export_off, cmd->export_size);
+      cmd->export_content
+	= bfd_mach_o_alloc_and_read (abfd, cmd->export_off,
+				     cmd->export_size, 0);
       if (cmd->export_content == NULL)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_dyld_info (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_dyld_info_command *cmd = &command->command.dyld_info;
   struct mach_o_dyld_info_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   cmd->rebase_off = bfd_get_32 (abfd, raw.rebase_off);
   cmd->rebase_size = bfd_get_32 (abfd, raw.rebase_size);
@@ -4604,76 +4711,86 @@ bfd_mach_o_read_dyld_info (bfd *abfd, bf
   cmd->export_off = bfd_get_32 (abfd, raw.export_off);
   cmd->export_size = bfd_get_32 (abfd, raw.export_size);
   cmd->export_content = NULL;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_version_min (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_version_min_command *cmd = &command->command.version_min;
   struct mach_o_version_min_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   cmd->version = bfd_get_32 (abfd, raw.version);
   cmd->sdk = bfd_get_32 (abfd, raw.sdk);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_encryption_info (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_encryption_info_command *cmd = &command->command.encryption_info;
   struct mach_o_encryption_info_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   cmd->cryptoff = bfd_get_32 (abfd, raw.cryptoff);
   cmd->cryptsize = bfd_get_32 (abfd, raw.cryptsize);
   cmd->cryptid = bfd_get_32 (abfd, raw.cryptid);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_encryption_info_64 (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_encryption_info_command *cmd = &command->command.encryption_info;
   struct mach_o_encryption_info_64_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   cmd->cryptoff = bfd_get_32 (abfd, raw.cryptoff);
   cmd->cryptsize = bfd_get_32 (abfd, raw.cryptsize);
   cmd->cryptid = bfd_get_32 (abfd, raw.cryptid);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_main (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_main_command *cmd = &command->command.main;
   struct mach_o_entry_point_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   cmd->entryoff = bfd_get_64 (abfd, raw.entryoff);
   cmd->stacksize = bfd_get_64 (abfd, raw.stacksize);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_source_version (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_source_version_command *cmd = &command->command.source_version;
   struct mach_o_source_version_command_external raw;
-  bfd_uint64_t ver;
+  uint64_t ver;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   ver = bfd_get_64 (abfd, raw.version);
   /* Note: we use a serie of shift to avoid shift > 32 (for which gcc
@@ -4688,41 +4805,45 @@ bfd_mach_o_read_source_version (bfd *abf
   cmd->b = ver & 0x3ff;
   ver >>= 10;
   cmd->a = ver & 0xffffff;
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_note (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_note_command *cmd = &command->command.note;
   struct mach_o_note_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   memcpy (cmd->data_owner, raw.data_owner, 16);
   cmd->offset = bfd_get_64 (abfd, raw.offset);
   cmd->size = bfd_get_64 (abfd, raw.size);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_build_version (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_build_version_command *cmd = &command->command.build_version;
   struct mach_o_build_version_command_external raw;
 
-  if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+  if (command->len < sizeof (raw) + 8)
+    return false;
+  if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return false;
 
   cmd->platform = bfd_get_32 (abfd, raw.platform);
   cmd->minos = bfd_get_32 (abfd, raw.minos);
   cmd->sdk = bfd_get_32 (abfd, raw.sdk);
   cmd->ntools = bfd_get_32 (abfd, raw.ntools);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_segment (bfd *abfd,
 			 bfd_mach_o_load_command *command,
 			 unsigned int wide)
@@ -4736,8 +4857,10 @@ bfd_mach_o_read_segment (bfd *abfd,
 
       BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT_64);
 
-      if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+      if (command->len < sizeof (raw) + 8)
+	return false;
+      if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+	return false;
 
       memcpy (seg->segname, raw.segname, 16);
       seg->segname[16] = '\0';
@@ -4757,8 +4880,10 @@ bfd_mach_o_read_segment (bfd *abfd,
 
       BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT);
 
-      if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+      if (command->len < sizeof (raw) + 8)
+	return false;
+      if (bfd_read (&raw, sizeof (raw), abfd) != sizeof (raw))
+	return false;
 
       memcpy (seg->segname, raw.segname, 16);
       seg->segname[16] = '\0';
@@ -4781,29 +4906,30 @@ bfd_mach_o_read_segment (bfd *abfd,
 
       sec = bfd_mach_o_read_section (abfd, seg->initprot, wide);
       if (sec == NULL)
-	return FALSE;
+	return false;
 
       bfd_mach_o_append_section_to_segment
 	(seg, bfd_mach_o_get_mach_o_section (sec));
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_segment_32 (bfd *abfd, bfd_mach_o_load_command *command)
 {
   return bfd_mach_o_read_segment (abfd, command, 0);
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_read_segment_64 (bfd *abfd, bfd_mach_o_load_command *command)
 {
   return bfd_mach_o_read_segment (abfd, command, 1);
 }
 
-static bfd_boolean
-bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command)
+static bool
+bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command,
+			 ufile_ptr filesize)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
   struct mach_o_load_command_external raw;
@@ -4811,40 +4937,42 @@ bfd_mach_o_read_command (bfd *abfd, bfd_
 
   /* Read command type and length.  */
   if (bfd_seek (abfd, mdata->hdr_offset + command->offset, SEEK_SET) != 0
-      || bfd_bread (&raw, BFD_MACH_O_LC_SIZE, abfd) != BFD_MACH_O_LC_SIZE)
-    return FALSE;
+      || bfd_read (&raw, BFD_MACH_O_LC_SIZE, abfd) != BFD_MACH_O_LC_SIZE)
+    return false;
 
   cmd = bfd_h_get_32 (abfd, raw.cmd);
-  command->type =  cmd & ~BFD_MACH_O_LC_REQ_DYLD;
-  command->type_required = cmd & BFD_MACH_O_LC_REQ_DYLD ? TRUE : FALSE;
+  command->type = cmd & ~BFD_MACH_O_LC_REQ_DYLD;
+  command->type_required = (cmd & BFD_MACH_O_LC_REQ_DYLD) != 0;
   command->len = bfd_h_get_32 (abfd, raw.cmdsize);
+  if (command->len < 8 || command->len % 4 != 0)
+    return false;
 
   switch (command->type)
     {
     case BFD_MACH_O_LC_SEGMENT:
       if (!bfd_mach_o_read_segment_32 (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_SEGMENT_64:
       if (!bfd_mach_o_read_segment_64 (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_SYMTAB:
-      if (!bfd_mach_o_read_symtab (abfd, command))
-	return FALSE;
+      if (!bfd_mach_o_read_symtab (abfd, command, filesize))
+	return false;
       break;
     case BFD_MACH_O_LC_SYMSEG:
       break;
     case BFD_MACH_O_LC_THREAD:
     case BFD_MACH_O_LC_UNIXTHREAD:
       if (!bfd_mach_o_read_thread (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_LOAD_DYLINKER:
     case BFD_MACH_O_LC_ID_DYLINKER:
     case BFD_MACH_O_LC_DYLD_ENVIRONMENT:
       if (!bfd_mach_o_read_dylinker (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_LOAD_DYLIB:
     case BFD_MACH_O_LC_LAZY_LOAD_DYLIB:
@@ -4853,16 +4981,16 @@ bfd_mach_o_read_command (bfd *abfd, bfd_
     case BFD_MACH_O_LC_REEXPORT_DYLIB:
     case BFD_MACH_O_LC_LOAD_UPWARD_DYLIB:
       if (!bfd_mach_o_read_dylib (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_PREBOUND_DYLIB:
       if (!bfd_mach_o_read_prebound_dylib (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_LOADFVMLIB:
     case BFD_MACH_O_LC_IDFVMLIB:
       if (!bfd_mach_o_read_fvmlib (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_IDENT:
     case BFD_MACH_O_LC_FVMFILE:
@@ -4876,23 +5004,23 @@ bfd_mach_o_read_command (bfd *abfd, bfd_
     case BFD_MACH_O_LC_SUB_CLIENT:
     case BFD_MACH_O_LC_RPATH:
       if (!bfd_mach_o_read_str (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_DYSYMTAB:
-      if (!bfd_mach_o_read_dysymtab (abfd, command))
-	return FALSE;
+      if (!bfd_mach_o_read_dysymtab (abfd, command, filesize))
+	return false;
       break;
     case BFD_MACH_O_LC_PREBIND_CKSUM:
       if (!bfd_mach_o_read_prebind_cksum (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_TWOLEVEL_HINTS:
       if (!bfd_mach_o_read_twolevel_hints (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_UUID:
       if (!bfd_mach_o_read_uuid (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_CODE_SIGNATURE:
     case BFD_MACH_O_LC_SEGMENT_SPLIT_INFO:
@@ -4900,62 +5028,65 @@ bfd_mach_o_read_command (bfd *abfd, bfd_
     case BFD_MACH_O_LC_DATA_IN_CODE:
     case BFD_MACH_O_LC_DYLIB_CODE_SIGN_DRS:
     case BFD_MACH_O_LC_LINKER_OPTIMIZATION_HINT:
+    case BFD_MACH_O_LC_DYLD_EXPORTS_TRIE:
+    case BFD_MACH_O_LC_DYLD_CHAINED_FIXUPS:
       if (!bfd_mach_o_read_linkedit (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_ENCRYPTION_INFO:
       if (!bfd_mach_o_read_encryption_info (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_ENCRYPTION_INFO_64:
       if (!bfd_mach_o_read_encryption_info_64 (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_DYLD_INFO:
       if (!bfd_mach_o_read_dyld_info (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_VERSION_MIN_MACOSX:
     case BFD_MACH_O_LC_VERSION_MIN_IPHONEOS:
     case BFD_MACH_O_LC_VERSION_MIN_WATCHOS:
     case BFD_MACH_O_LC_VERSION_MIN_TVOS:
       if (!bfd_mach_o_read_version_min (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_MAIN:
       if (!bfd_mach_o_read_main (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_SOURCE_VERSION:
       if (!bfd_mach_o_read_source_version (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_LINKER_OPTIONS:
       break;
     case BFD_MACH_O_LC_NOTE:
       if (!bfd_mach_o_read_note (abfd, command))
-	return FALSE;
+	return false;
       break;
     case BFD_MACH_O_LC_BUILD_VERSION:
       if (!bfd_mach_o_read_build_version (abfd, command))
-	return FALSE;
+	return false;
       break;
     default:
       command->len = 0;
       _bfd_error_handler (_("%pB: unknown load command %#x"),
 			  abfd, command->type);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static void
+static bool
 bfd_mach_o_flatten_sections (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
   bfd_mach_o_load_command *cmd;
   long csect = 0;
+  size_t amt;
 
   /* Count total number of sections.  */
   mdata->nsects = 0;
@@ -4972,8 +5103,14 @@ bfd_mach_o_flatten_sections (bfd *abfd)
     }
 
   /* Allocate sections array.  */
-  mdata->sections = bfd_alloc2 (abfd,
-				mdata->nsects, sizeof (bfd_mach_o_section *));
+  if (_bfd_mul_overflow (mdata->nsects, sizeof (bfd_mach_o_section *), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  mdata->sections = bfd_alloc (abfd, amt);
+  if (mdata->sections == NULL && mdata->nsects != 0)
+    return false;
 
   /* Fill the array.  */
   csect = 0;
@@ -4992,9 +5129,10 @@ bfd_mach_o_flatten_sections (bfd *abfd)
 	    mdata->sections[csect++] = sec;
 	}
     }
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_scan_start_address (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -5018,13 +5156,13 @@ bfd_mach_o_scan_start_address (bfd *abfd
 	  {
 	    abfd->start_address = main_cmd->entryoff
 	      + (text_sect->addr - text_sect->offset);
-	    return TRUE;
+	    return true;
 	  }
       }
 
   /* An object file has no start address, so do not fail if not found.  */
   if (thr == NULL)
-    return TRUE;
+    return true;
 
   /* FIXME: create a subtarget hook ?  */
   for (i = 0; i < thr->nflavours; i++)
@@ -5035,8 +5173,8 @@ bfd_mach_o_scan_start_address (bfd *abfd
 	  unsigned char buf[4];
 
 	  if (bfd_seek (abfd, thr->flavours[i].offset + 40, SEEK_SET) != 0
-	      || bfd_bread (buf, 4, abfd) != 4)
-	    return FALSE;
+	      || bfd_read (buf, 4, abfd) != 4)
+	    return false;
 
 	  abfd->start_address = bfd_h_get_32 (abfd, buf);
 	}
@@ -5046,8 +5184,8 @@ bfd_mach_o_scan_start_address (bfd *abfd
 	  unsigned char buf[4];
 
 	  if (bfd_seek (abfd, thr->flavours[i].offset + 0, SEEK_SET) != 0
-	      || bfd_bread (buf, 4, abfd) != 4)
-	    return FALSE;
+	      || bfd_read (buf, 4, abfd) != 4)
+	    return false;
 
 	  abfd->start_address = bfd_h_get_32 (abfd, buf);
 	}
@@ -5057,8 +5195,8 @@ bfd_mach_o_scan_start_address (bfd *abfd
 	  unsigned char buf[8];
 
 	  if (bfd_seek (abfd, thr->flavours[i].offset + 0, SEEK_SET) != 0
-	      || bfd_bread (buf, 8, abfd) != 8)
-	    return FALSE;
+	      || bfd_read (buf, 8, abfd) != 8)
+	    return false;
 
 	  abfd->start_address = bfd_h_get_64 (abfd, buf);
 	}
@@ -5068,17 +5206,17 @@ bfd_mach_o_scan_start_address (bfd *abfd
 	  unsigned char buf[8];
 
 	  if (bfd_seek (abfd, thr->flavours[i].offset + (16 * 8), SEEK_SET) != 0
-	      || bfd_bread (buf, 8, abfd) != 8)
-	    return FALSE;
+	      || bfd_read (buf, 8, abfd) != 8)
+	    return false;
 
 	  abfd->start_address = bfd_h_get_64 (abfd, buf);
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 bfd_mach_o_set_arch_mach (bfd *abfd,
 			  enum bfd_architecture arch,
 			  unsigned long machine)
@@ -5090,19 +5228,19 @@ bfd_mach_o_set_arch_mach (bfd *abfd,
   if (arch != bed->arch
       && arch != bfd_arch_unknown
       && bed->arch != bfd_arch_unknown)
-    return FALSE;
+    return false;
 
   return bfd_default_set_arch_mach (abfd, arch, machine);
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_scan (bfd *abfd,
 		 bfd_mach_o_header *header,
 		 bfd_mach_o_data_struct *mdata)
 {
   unsigned int i;
-  enum bfd_architecture cputype;
-  unsigned long cpusubtype;
+  enum bfd_architecture cpu_type;
+  unsigned long cpu_subtype;
   unsigned int hdrsize;
 
   hdrsize = mach_o_wide_p (header) ?
@@ -5128,28 +5266,44 @@ bfd_mach_o_scan (bfd *abfd,
   abfd->tdata.mach_o_data = mdata;
 
   bfd_mach_o_convert_architecture (header->cputype, header->cpusubtype,
-				   &cputype, &cpusubtype);
-  if (cputype == bfd_arch_unknown)
+				   &cpu_type, &cpu_subtype);
+  if (cpu_type == bfd_arch_unknown)
     {
       _bfd_error_handler
 	/* xgettext:c-format */
 	(_("bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"),
 	 header->cputype, header->cpusubtype);
-      return FALSE;
+      return false;
     }
 
-  bfd_set_arch_mach (abfd, cputype, cpusubtype);
+  bfd_set_arch_mach (abfd, cpu_type, cpu_subtype);
 
   if (header->ncmds != 0)
     {
       bfd_mach_o_load_command *cmd;
+      size_t amt;
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+
+      if (filesize == 0)
+	filesize = (ufile_ptr) -1;
 
       mdata->first_command = NULL;
       mdata->last_command = NULL;
 
-      cmd = bfd_alloc2 (abfd, header->ncmds, sizeof (bfd_mach_o_load_command));
+      if (header->ncmds > (filesize - hdrsize) / BFD_MACH_O_LC_SIZE)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return false;
+	}
+      if (_bfd_mul_overflow (header->ncmds,
+			     sizeof (bfd_mach_o_load_command), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  return false;
+	}
+      cmd = bfd_alloc (abfd, amt);
       if (cmd == NULL)
-	return FALSE;
+	return false;
 
       for (i = 0; i < header->ncmds; i++)
 	{
@@ -5165,27 +5319,28 @@ bfd_mach_o_scan (bfd *abfd,
 	      cur->offset = prev->offset + prev->len;
 	    }
 
-	  if (!bfd_mach_o_read_command (abfd, cur))
-	    return FALSE;
+	  if (!bfd_mach_o_read_command (abfd, cur, filesize))
+	    return false;
 	}
     }
 
   /* Sections should be flatten before scanning start address.  */
-  bfd_mach_o_flatten_sections (abfd);
+  if (!bfd_mach_o_flatten_sections (abfd))
+    return false;
   if (!bfd_mach_o_scan_start_address (abfd))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 bfd_mach_o_mkobject_init (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = NULL;
 
   mdata = bfd_zalloc (abfd, sizeof (bfd_mach_o_data_struct));
   if (mdata == NULL)
-    return FALSE;
+    return false;
   abfd->tdata.mach_o_data = mdata;
 
   mdata->header.magic = 0;
@@ -5202,16 +5357,16 @@ bfd_mach_o_mkobject_init (bfd *abfd)
   mdata->sections = NULL;
   mdata->dyn_reloc_cache = NULL;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_gen_mkobject (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata;
 
   if (!bfd_mach_o_mkobject_init (abfd))
-    return FALSE;
+    return false;
 
   mdata = bfd_mach_o_get_data (abfd);
   mdata->header.magic = BFD_MACH_O_MH_MAGIC;
@@ -5220,14 +5375,14 @@ bfd_mach_o_gen_mkobject (bfd *abfd)
   mdata->header.byteorder = abfd->xvec->byteorder;
   mdata->header.version = 1;
 
-  return TRUE;
+  return true;
 }
 
-const bfd_target *
+bfd_cleanup
 bfd_mach_o_header_p (bfd *abfd,
 		     file_ptr hdr_off,
-		     bfd_mach_o_filetype filetype,
-		     bfd_mach_o_cpu_type cputype)
+		     bfd_mach_o_filetype file_type,
+		     bfd_mach_o_cpu_type cpu_type)
 {
   bfd_mach_o_header header;
   bfd_mach_o_data_struct *mdata;
@@ -5254,9 +5409,9 @@ bfd_mach_o_header_p (bfd *abfd,
   /* Check cputype and filetype.
      In case of wildcard, do not accept magics that are handled by existing
      targets.  */
-  if (cputype)
+  if (cpu_type)
     {
-      if (header.cputype != cputype)
+      if (header.cputype != cpu_type)
 	goto wrong;
     }
   else
@@ -5269,9 +5424,9 @@ bfd_mach_o_header_p (bfd *abfd,
 #endif
     }
 
-  if (filetype)
+  if (file_type)
     {
-      if (header.filetype != filetype)
+      if (header.filetype != file_type)
 	goto wrong;
     }
   else
@@ -5294,7 +5449,7 @@ bfd_mach_o_header_p (bfd *abfd,
   if (!bfd_mach_o_scan (abfd, &header, mdata))
     goto wrong;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  wrong:
   bfd_set_error (bfd_error_wrong_format);
@@ -5303,13 +5458,13 @@ bfd_mach_o_header_p (bfd *abfd,
   return NULL;
 }
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_gen_object_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0, 0, 0);
 }
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_gen_core_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0, BFD_MACH_O_MH_CORE, 0);
@@ -5359,15 +5514,33 @@ typedef struct mach_o_fat_data_struct
   mach_o_fat_archentry *archentries;
 } mach_o_fat_data_struct;
 
-const bfd_target *
+/* Check for overlapping archive elements.  Note that we can't allow
+   multiple elements at the same offset even if one is empty, because
+   bfd_mach_o_fat_openr_next_archived_file assume distinct offsets.  */
+static bool
+overlap_previous (const mach_o_fat_archentry *elt, unsigned long i)
+{
+  unsigned long j = i;
+  while (j-- != 0)
+    if (elt[i].offset == elt[j].offset
+	|| (elt[i].offset > elt[j].offset
+	    ? elt[i].offset - elt[j].offset < elt[j].size
+	    : elt[j].offset - elt[i].offset < elt[i].size))
+      return true;
+  return false;
+}
+
+bfd_cleanup
 bfd_mach_o_fat_archive_p (bfd *abfd)
 {
   mach_o_fat_data_struct *adata = NULL;
   struct mach_o_fat_header_external hdr;
   unsigned long i;
+  size_t amt;
+  ufile_ptr filesize;
 
   if (bfd_seek (abfd, 0, SEEK_SET) != 0
-      || bfd_bread (&hdr, sizeof (hdr), abfd) != sizeof (hdr))
+      || bfd_read (&hdr, sizeof (hdr), abfd) != sizeof (hdr))
     goto error;
 
   adata = bfd_alloc (abfd, sizeof (mach_o_fat_data_struct));
@@ -5384,26 +5557,44 @@ bfd_mach_o_fat_archive_p (bfd *abfd)
   if (adata->nfat_arch > 30)
     goto error;
 
-  adata->archentries =
-    bfd_alloc2 (abfd, adata->nfat_arch, sizeof (mach_o_fat_archentry));
+  if (_bfd_mul_overflow (adata->nfat_arch,
+			 sizeof (mach_o_fat_archentry), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      goto error;
+    }
+  adata->archentries = bfd_alloc (abfd, amt);
   if (adata->archentries == NULL)
     goto error;
 
+  filesize = bfd_get_file_size (abfd);
   for (i = 0; i < adata->nfat_arch; i++)
     {
       struct mach_o_fat_arch_external arch;
-      if (bfd_bread (&arch, sizeof (arch), abfd) != sizeof (arch))
+      if (bfd_read (&arch, sizeof (arch), abfd) != sizeof (arch))
 	goto error;
       adata->archentries[i].cputype = bfd_getb32 (arch.cputype);
       adata->archentries[i].cpusubtype = bfd_getb32 (arch.cpusubtype);
       adata->archentries[i].offset = bfd_getb32 (arch.offset);
       adata->archentries[i].size = bfd_getb32 (arch.size);
       adata->archentries[i].align = bfd_getb32 (arch.align);
+      if ((filesize != 0
+	   && (adata->archentries[i].offset > filesize
+	       || (adata->archentries[i].size
+		   > filesize - adata->archentries[i].offset)))
+	  || (adata->archentries[i].offset
+	      < sizeof (hdr) + adata->nfat_arch * sizeof (arch))
+	  || overlap_previous (adata->archentries, i))
+	{
+	  bfd_release (abfd, adata);
+	  bfd_set_error (bfd_error_malformed_archive);
+	  return NULL;
+	}
     }
 
   abfd->tdata.mach_o_fat_data = adata;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  error:
   if (adata != NULL)
@@ -5416,7 +5607,7 @@ bfd_mach_o_fat_archive_p (bfd *abfd)
    ARCH_TYPE/ARCH_SUBTYPE and corresponding entry in header is ENTRY.
    Set arelt_data and origin fields too.  */
 
-static bfd_boolean
+static bool
 bfd_mach_o_fat_member_init (bfd *abfd,
 			    enum bfd_architecture arch_type,
 			    unsigned long arch_subtype,
@@ -5425,35 +5616,32 @@ bfd_mach_o_fat_member_init (bfd *abfd,
   struct areltdata *areltdata;
   /* Create the member filename. Use ARCH_NAME.  */
   const bfd_arch_info_type *ap = bfd_lookup_arch (arch_type, arch_subtype);
-  char *filename;
+  const char *filename;
 
   if (ap)
     {
       /* Use the architecture name if known.  */
-      filename = bfd_strdup (ap->printable_name);
-      if (filename == NULL)
-	return FALSE;
+      filename = bfd_set_filename (abfd, ap->printable_name);
     }
   else
     {
       /* Forge a uniq id.  */
-      const size_t namelen = 2 + 8 + 1 + 2 + 8 + 1;
-      filename = bfd_malloc (namelen);
-      if (filename == NULL)
-	return FALSE;
-      snprintf (filename, namelen, "0x%lx-0x%lx",
+      char buf[2 + 8 + 1 + 2 + 8 + 1];
+      snprintf (buf, sizeof (buf), "0x%lx-0x%lx",
 		entry->cputype, entry->cpusubtype);
+      filename = bfd_set_filename (abfd, buf);
     }
-  bfd_set_filename (abfd, filename);
+  if (!filename)
+    return false;
 
   areltdata = bfd_zmalloc (sizeof (struct areltdata));
   if (areltdata == NULL)
-    return FALSE;
+    return false;
   areltdata->parsed_size = entry->size;
   abfd->arelt_data = areltdata;
   abfd->iostream = NULL;
   abfd->origin = entry->offset;
-  return TRUE;
+  return true;
 }
 
 bfd *
@@ -5598,11 +5786,11 @@ bfd_mach_o_fat_extract (bfd *abfd,
   return NULL;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_fat_close_and_cleanup (bfd *abfd)
 {
   _bfd_unlink_from_archive_parent (abfd);
-  return TRUE;
+  return true;
 }
 
 int
@@ -5752,6 +5940,8 @@ bfd_mach_o_core_fetch_environment (bfd *
 	  unsigned char *buf = bfd_malloc (1024);
 	  unsigned long size = 1024;
 
+	  if (buf == NULL)
+	    return -1;
 	  for (;;)
 	    {
 	      bfd_size_type nread = 0;
@@ -5771,7 +5961,7 @@ bfd_mach_o_core_fetch_environment (bfd *
 		  return -1;
 		}
 
-	      nread = bfd_bread (buf, size, abfd);
+	      nread = bfd_read (buf, size, abfd);
 
 	      if (nread != size)
 		{
@@ -5783,7 +5973,8 @@ bfd_mach_o_core_fetch_environment (bfd *
 		{
 		  unsigned long val;
 
-		  val = *((unsigned long *) (buf + size - offset));
+		  val = bfd_get_32(abfd, buf + size - offset);
+
 		  if (! found_nonnull)
 		    {
 		      if (val != 0)
@@ -5797,6 +5988,8 @@ bfd_mach_o_core_fetch_environment (bfd *
 		      bottom = seg->fileoff + seg->filesize - offset;
 		      top = seg->fileoff + seg->filesize - 4;
 		      *rbuf = bfd_malloc (top - bottom);
+		      if (*rbuf == NULL)
+			return -1;
 		      *rlen = top - bottom;
 
 		      memcpy (*rbuf, buf + size - *rlen, *rlen);
@@ -5844,13 +6037,13 @@ bfd_mach_o_lookup_uuid_command (bfd *abf
   bfd_mach_o_load_command *uuid_cmd = NULL;
   int ncmd = bfd_mach_o_lookup_command (abfd, BFD_MACH_O_LC_UUID, &uuid_cmd);
   if (ncmd != 1 || uuid_cmd == NULL)
-    return FALSE;
+    return false;
   return &uuid_cmd->command.uuid;
 }
 
 /* Return true if ABFD is a dSYM file and its UUID matches UUID_CMD. */
 
-static bfd_boolean
+static bool
 bfd_mach_o_dsym_for_uuid_p (bfd *abfd, const bfd_mach_o_uuid_command *uuid_cmd)
 {
   bfd_mach_o_uuid_command *dsym_uuid_cmd;
@@ -5859,22 +6052,22 @@ bfd_mach_o_dsym_for_uuid_p (bfd *abfd, c
   BFD_ASSERT (uuid_cmd);
 
   if (!bfd_check_format (abfd, bfd_object))
-    return FALSE;
+    return false;
 
   if (bfd_get_flavour (abfd) != bfd_target_mach_o_flavour
       || bfd_mach_o_get_data (abfd) == NULL
       || bfd_mach_o_get_data (abfd)->header.filetype != BFD_MACH_O_MH_DSYM)
-    return FALSE;
+    return false;
 
   dsym_uuid_cmd = bfd_mach_o_lookup_uuid_command (abfd);
   if (dsym_uuid_cmd == NULL)
-    return FALSE;
+    return false;
 
   if (memcmp (uuid_cmd->uuid, dsym_uuid_cmd->uuid,
 	      sizeof (uuid_cmd->uuid)) != 0)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Find a BFD in DSYM_FILENAME which matches ARCH and UUID_CMD.
@@ -5923,12 +6116,12 @@ bfd_mach_o_follow_dsym (bfd *abfd)
   if (abfd->my_archive && !bfd_is_thin_archive (abfd->my_archive))
     base_bfd = abfd->my_archive;
   /* BFD may have been opened from a stream. */
-  if (base_bfd->filename == NULL)
+  if (bfd_get_filename (base_bfd) == NULL)
     {
       bfd_set_error (bfd_error_invalid_operation);
       return NULL;
     }
-  base_basename = lbasename (base_bfd->filename);
+  base_basename = lbasename (bfd_get_filename (base_bfd));
 
   uuid_cmd = bfd_mach_o_lookup_uuid_command (abfd);
   if (uuid_cmd == NULL)
@@ -5938,11 +6131,14 @@ bfd_mach_o_follow_dsym (bfd *abfd)
      It seems apple's GDB checks all files in the dSYM bundle directory.
      http://opensource.apple.com/source/gdb/gdb-1708/src/gdb/macosx/macosx-tdep.c
   */
-  dsym_filename = (char *)bfd_malloc (strlen (base_bfd->filename)
+  dsym_filename = (char *)bfd_malloc (strlen (bfd_get_filename (base_bfd))
 				       + strlen (dsym_subdir) + 1
 				       + strlen (base_basename) + 1);
+  if (dsym_filename == NULL)
+    return NULL;
+
   sprintf (dsym_filename, "%s%s/%s",
-	   base_bfd->filename, dsym_subdir, base_basename);
+	   bfd_get_filename (base_bfd), dsym_subdir, base_basename);
 
   dsym_bfd = bfd_mach_o_find_dsym (dsym_filename, uuid_cmd,
 				   bfd_get_arch_info (abfd));
@@ -5952,7 +6148,7 @@ bfd_mach_o_follow_dsym (bfd *abfd)
   return dsym_bfd;
 }
 
-bfd_boolean
+bool
 bfd_mach_o_find_nearest_line (bfd *abfd,
 			      asymbol **symbols,
 			      asection *section,
@@ -5964,7 +6160,7 @@ bfd_mach_o_find_nearest_line (bfd *abfd,
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
   if (mdata == NULL)
-    return FALSE;
+    return false;
   switch (mdata->header.filetype)
     {
     case BFD_MACH_O_MH_OBJECT:
@@ -5985,12 +6181,12 @@ bfd_mach_o_find_nearest_line (bfd *abfd,
 	  if (! _bfd_dwarf2_slurp_debug_info (abfd, mdata->dsym_bfd,
 					      dwarf_debug_sections, symbols,
 					      &mdata->dwarf2_find_line_info,
-					      FALSE))
-	    return FALSE;
+					      false))
+	    return false;
 	}
       break;
     default:
-      return FALSE;
+      return false;
     }
   return _bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
 					filename_ptr, functionname_ptr,
@@ -5999,14 +6195,12 @@ bfd_mach_o_find_nearest_line (bfd *abfd,
 					&mdata->dwarf2_find_line_info);
 }
 
-bfd_boolean
+bool
 bfd_mach_o_close_and_cleanup (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
   if (bfd_get_format (abfd) == bfd_object && mdata != NULL)
     {
-      _bfd_dwarf2_cleanup_debug_info (abfd, &mdata->dwarf2_find_line_info);
-      bfd_mach_o_free_cached_info (abfd);
       if (mdata->dsym_bfd != NULL)
 	{
 	  bfd *fat_bfd = mdata->dsym_bfd->my_archive;
@@ -6020,8 +6214,8 @@ bfd_mach_o_close_and_cleanup (bfd *abfd)
 	     but it is small, and happens when we are closing down, so it
 	     should not matter too much.  */
 	  char *dsym_filename = (char *)(fat_bfd
-					 ? fat_bfd->filename
-					 : mdata->dsym_bfd->filename);
+					 ? bfd_get_filename (fat_bfd)
+					 : bfd_get_filename (mdata->dsym_bfd));
 #endif
 	  bfd_close (mdata->dsym_bfd);
 	  mdata->dsym_bfd = NULL;
@@ -6036,20 +6230,29 @@ bfd_mach_o_close_and_cleanup (bfd *abfd)
   return _bfd_generic_close_and_cleanup (abfd);
 }
 
-bfd_boolean
-bfd_mach_o_free_cached_info (bfd *abfd)
+bool
+bfd_mach_o_bfd_free_cached_info (bfd *abfd)
 {
-  bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
-  asection *asect;
-  free (mdata->dyn_reloc_cache);
-  mdata->dyn_reloc_cache = NULL;
-  for (asect = abfd->sections; asect != NULL; asect = asect->next)
+  bfd_mach_o_data_struct *mdata;
+
+  if ((bfd_get_format (abfd) == bfd_object
+       || bfd_get_format (abfd) == bfd_core)
+      && (mdata = bfd_mach_o_get_data (abfd)) != NULL)
     {
-      free (asect->relocation);
-      asect->relocation = NULL;
+      _bfd_dwarf2_cleanup_debug_info (abfd, &mdata->dwarf2_find_line_info);
+      free (mdata->dyn_reloc_cache);
+      mdata->dyn_reloc_cache = NULL;
+
+      for (asection *asect = abfd->sections; asect; asect = asect->next)
+	{
+	  free (asect->relocation);
+	  asect->relocation = NULL;
+	}
     }
 
-  return TRUE;
+  /* Do not call _bfd_generic_bfd_free_cached_info here.
+     bfd_mach_o_close_and_cleanup uses tdata.  */
+  return true;
 }
 
 #define bfd_mach_o_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o.h ./bfd/mach-o.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/mach-o.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Mach-O support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -545,8 +545,8 @@ bfd_mach_o_encryption_info_command;
 
 typedef struct bfd_mach_o_main_command
 {
-  bfd_uint64_t entryoff;
-  bfd_uint64_t stacksize;
+  uint64_t entryoff;
+  uint64_t stacksize;
 }
 bfd_mach_o_main_command;
 
@@ -563,8 +563,8 @@ bfd_mach_o_source_version_command;
 typedef struct bfd_mach_o_note_command
 {
   char data_owner[16];
-  bfd_uint64_t offset;
-  bfd_uint64_t size;
+  uint64_t offset;
+  uint64_t size;
 }
 bfd_mach_o_note_command;
 
@@ -591,7 +591,7 @@ typedef struct bfd_mach_o_load_command
 
   /* Type and required flag.  */
   bfd_mach_o_load_command_type type;
-  bfd_boolean type_required;
+  bool type_required;
 
   /* Offset and length in the file.  */
   unsigned int offset;
@@ -677,24 +677,24 @@ bfd_mach_o_xlat_name;
 #define bfd_mach_o_get_mach_o_section(sec) \
   ((bfd_mach_o_section *)(sec)->used_by_bfd)
 
-bfd_boolean bfd_mach_o_valid (bfd *);
-bfd_boolean bfd_mach_o_mkobject_init (bfd *);
-const bfd_target *bfd_mach_o_object_p (bfd *);
-const bfd_target *bfd_mach_o_core_p (bfd *);
-const bfd_target *bfd_mach_o_fat_archive_p (bfd *);
+bool bfd_mach_o_valid (bfd *);
+bool bfd_mach_o_mkobject_init (bfd *);
+bfd_cleanup bfd_mach_o_object_p (bfd *);
+bfd_cleanup bfd_mach_o_core_p (bfd *);
+bfd_cleanup bfd_mach_o_fat_archive_p (bfd *);
 bfd *bfd_mach_o_fat_openr_next_archived_file (bfd *, bfd *);
-bfd_boolean bfd_mach_o_set_arch_mach (bfd *, enum bfd_architecture,
-				      unsigned long);
-int bfd_mach_o_lookup_command (bfd *, bfd_mach_o_load_command_type, bfd_mach_o_load_command **);
-bfd_boolean bfd_mach_o_new_section_hook (bfd *, asection *);
-bfd_boolean bfd_mach_o_write_contents (bfd *);
-bfd_boolean bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *,
-						     bfd *, asymbol *);
-bfd_boolean bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *,
-						      bfd *, asection *);
-bfd_boolean bfd_mach_o_bfd_copy_private_header_data (bfd *, bfd *);
-bfd_boolean bfd_mach_o_bfd_set_private_flags (bfd *, flagword);
-bfd_boolean bfd_mach_o_bfd_print_private_bfd_data (bfd *, void *);
+bool bfd_mach_o_set_arch_mach (bfd *, enum bfd_architecture, unsigned long);
+int bfd_mach_o_lookup_command (bfd *, bfd_mach_o_load_command_type,
+			       bfd_mach_o_load_command **);
+bool bfd_mach_o_new_section_hook (bfd *, asection *);
+bool bfd_mach_o_write_contents (bfd *);
+bool bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *,
+					      bfd *, asymbol *);
+bool bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *,
+					       bfd *, asection *);
+bool bfd_mach_o_bfd_copy_private_header_data (bfd *, bfd *);
+bool bfd_mach_o_bfd_set_private_flags (bfd *, flagword);
+bool bfd_mach_o_bfd_print_private_bfd_data (bfd *, void *);
 long bfd_mach_o_get_symtab_upper_bound (bfd *);
 long bfd_mach_o_canonicalize_symtab (bfd *, asymbol **);
 long bfd_mach_o_get_synthetic_symtab (bfd *, long, asymbol **, long,
@@ -711,13 +711,13 @@ unsigned long bfd_mach_o_stack_addr (enu
 int bfd_mach_o_core_fetch_environment (bfd *, unsigned char **, unsigned int *);
 char *bfd_mach_o_core_file_failing_command (bfd *);
 int bfd_mach_o_core_file_failing_signal (bfd *);
-bfd_boolean bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *);
+bool bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *);
 bfd *bfd_mach_o_fat_extract (bfd *, bfd_format , const bfd_arch_info_type *);
-const bfd_target *bfd_mach_o_header_p (bfd *, file_ptr, bfd_mach_o_filetype,
-				       bfd_mach_o_cpu_type);
-bfd_boolean bfd_mach_o_build_commands (bfd *);
-bfd_boolean bfd_mach_o_set_section_contents (bfd *, asection *, const void *,
-					     file_ptr, bfd_size_type);
+bfd_cleanup bfd_mach_o_header_p (bfd *, file_ptr, bfd_mach_o_filetype,
+				 bfd_mach_o_cpu_type);
+bool bfd_mach_o_build_commands (bfd *);
+bool bfd_mach_o_set_section_contents (bfd *, asection *, const void *,
+				      file_ptr, bfd_size_type);
 unsigned int bfd_mach_o_version (bfd *);
 
 unsigned int bfd_mach_o_get_section_type_from_name (bfd *, const char *);
@@ -725,29 +725,31 @@ unsigned int bfd_mach_o_get_section_attr
 
 void bfd_mach_o_convert_section_name_to_bfd (bfd *, const char *, const char *,
 					     const char **, flagword *);
-bfd_boolean bfd_mach_o_find_nearest_line (bfd *, asymbol **,
+bool bfd_mach_o_find_nearest_line (bfd *, asymbol **,
 					  asection *, bfd_vma,
 					  const char **, const char **,
 					  unsigned int *, unsigned int *);
+#define bfd_mach_o_find_nearest_line_with_alt \
+  _bfd_nosymbols_find_nearest_line_with_alt
 #define bfd_mach_o_find_line _bfd_nosymbols_find_line
-bfd_boolean bfd_mach_o_close_and_cleanup (bfd *);
-bfd_boolean bfd_mach_o_free_cached_info (bfd *);
+bool bfd_mach_o_close_and_cleanup (bfd *);
+bool bfd_mach_o_bfd_free_cached_info (bfd *);
 
 unsigned int bfd_mach_o_section_get_nbr_indirect (bfd *, bfd_mach_o_section *);
 unsigned int bfd_mach_o_section_get_entry_size (bfd *, bfd_mach_o_section *);
-bfd_boolean bfd_mach_o_read_symtab_symbols (bfd *);
-bfd_boolean bfd_mach_o_read_symtab_strtab (bfd *abfd);
+bool bfd_mach_o_read_symtab_symbols (bfd *);
+bool bfd_mach_o_read_symtab_strtab (bfd *abfd);
 
 bfd_vma bfd_mach_o_get_base_address (bfd *);
 
 void bfd_mach_o_swap_in_non_scattered_reloc (bfd *, bfd_mach_o_reloc_info *,
 					     unsigned char *);
-bfd_boolean bfd_mach_o_canonicalize_non_scattered_reloc (bfd *, bfd_mach_o_reloc_info *, arelent *, asymbol **);
-bfd_boolean bfd_mach_o_pre_canonicalize_one_reloc (bfd *, struct mach_o_reloc_info_external *, bfd_mach_o_reloc_info *, arelent *, asymbol **);
+bool bfd_mach_o_canonicalize_non_scattered_reloc (bfd *, bfd_mach_o_reloc_info *, arelent *, asymbol **);
+bool bfd_mach_o_pre_canonicalize_one_reloc (bfd *, struct mach_o_reloc_info_external *, bfd_mach_o_reloc_info *, arelent *, asymbol **);
 
 /* A placeholder in case we need to suppress emitting the dysymtab for some
    reason (e.g. compatibility with older system versions).  */
-#define bfd_mach_o_should_emit_dysymtab(x) TRUE
+#define bfd_mach_o_should_emit_dysymtab(x) true
 
 extern const bfd_mach_o_xlat_name bfd_mach_o_section_attribute_name[];
 extern const bfd_mach_o_xlat_name bfd_mach_o_section_type_name[];
@@ -781,13 +783,13 @@ typedef struct bfd_mach_o_backend_data
 {
   enum bfd_architecture arch;
   bfd_vma page_size;
-  bfd_boolean (*_bfd_mach_o_canonicalize_one_reloc)
+  bool (*_bfd_mach_o_canonicalize_one_reloc)
   (bfd *, struct mach_o_reloc_info_external *, arelent *, asymbol **, arelent *);
-  bfd_boolean (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *);
-  bfd_boolean (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *,
+  bool (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *);
+  bool (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *,
 					  void *, char *);
   const mach_o_segment_name_xlat *segsec_names_xlat;
-  bfd_boolean (*bfd_mach_o_section_type_valid_for_target) (unsigned long);
+  bool (*bfd_mach_o_section_type_valid_for_target) (unsigned long);
 }
 bfd_mach_o_backend_data;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-i386.c ./bfd/mach-o-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-i386.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/mach-o-i386.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Intel i386 Mach-O support for BFD.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,26 +29,26 @@
 #define bfd_mach_o_core_p bfd_mach_o_i386_core_p
 #define bfd_mach_o_mkobject bfd_mach_o_i386_mkobject
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_i386_object_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0, 0, BFD_MACH_O_CPU_TYPE_I386);
 }
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_i386_core_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0,
 			      BFD_MACH_O_MH_CORE, BFD_MACH_O_CPU_TYPE_I386);
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_i386_mkobject (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata;
 
   if (!bfd_mach_o_mkobject_init (abfd))
-    return FALSE;
+    return false;
 
   mdata = bfd_mach_o_get_data (abfd);
   mdata->header.magic = BFD_MACH_O_MH_MAGIC;
@@ -57,61 +57,61 @@ bfd_mach_o_i386_mkobject (bfd *abfd)
   mdata->header.byteorder = BFD_ENDIAN_LITTLE;
   mdata->header.version = 1;
 
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type i386_howto_table[]=
 {
   /* 0 */
-  HOWTO(BFD_RELOC_32, 0, 2, 32, FALSE, 0,
+  HOWTO(BFD_RELOC_32, 0, 4, 32, false, 0,
 	complain_overflow_bitfield,
 	NULL, "32",
-	FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(BFD_RELOC_16, 0, 1, 16, FALSE, 0,
+	false, 0xffffffff, 0xffffffff, false),
+  HOWTO(BFD_RELOC_16, 0, 2, 16, false, 0,
 	complain_overflow_bitfield,
 	NULL, "16",
-	FALSE, 0xffff, 0xffff, FALSE),
-  HOWTO(BFD_RELOC_8, 0, 0, 8, FALSE, 0,
+	false, 0xffff, 0xffff, false),
+  HOWTO(BFD_RELOC_8, 0, 1, 8, false, 0,
 	complain_overflow_bitfield,
 	NULL, "8",
-	FALSE, 0xff, 0xff, FALSE),
-  HOWTO(BFD_RELOC_32_PCREL, 0, 2, 32, TRUE, 0,
+	false, 0xff, 0xff, false),
+  HOWTO(BFD_RELOC_32_PCREL, 0, 4, 32, true, 0,
 	complain_overflow_bitfield,
 	NULL, "DISP32",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
+	false, 0xffffffff, 0xffffffff, true),
   /* 4 */
-  HOWTO(BFD_RELOC_16_PCREL, 0, 1, 16, TRUE, 0,
+  HOWTO(BFD_RELOC_16_PCREL, 0, 2, 16, true, 0,
 	complain_overflow_bitfield,
 	NULL, "DISP16",
-	FALSE, 0xffff, 0xffff, TRUE),
-  HOWTO(BFD_RELOC_MACH_O_SECTDIFF, 0, 2, 32, FALSE, 0,
+	false, 0xffff, 0xffff, true),
+  HOWTO(BFD_RELOC_MACH_O_SECTDIFF, 0, 4, 32, false, 0,
 	complain_overflow_bitfield,
 	NULL, "SECTDIFF_32",
-	FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 2, 32, FALSE, 0,
+	false, 0xffffffff, 0xffffffff, false),
+  HOWTO(BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 4, 32, false, 0,
 	complain_overflow_bitfield,
 	NULL, "LSECTDIFF_32",
-	FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(BFD_RELOC_MACH_O_PAIR, 0, 2, 32, FALSE, 0,
+	false, 0xffffffff, 0xffffffff, false),
+  HOWTO(BFD_RELOC_MACH_O_PAIR, 0, 4, 32, false, 0,
 	complain_overflow_bitfield,
 	NULL, "PAIR_32",
-	FALSE, 0xffffffff, 0xffffffff, FALSE),
+	false, 0xffffffff, 0xffffffff, false),
   /* 8 */
-  HOWTO(BFD_RELOC_MACH_O_SECTDIFF, 0, 1, 16, FALSE, 0,
+  HOWTO(BFD_RELOC_MACH_O_SECTDIFF, 0, 2, 16, false, 0,
 	complain_overflow_bitfield,
 	NULL, "SECTDIFF_16",
-	FALSE, 0xffff, 0xffff, FALSE),
-  HOWTO(BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 1, 16, FALSE, 0,
+	false, 0xffff, 0xffff, false),
+  HOWTO(BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 2, 16, false, 0,
 	complain_overflow_bitfield,
 	NULL, "LSECTDIFF_16",
-	FALSE, 0xffff, 0xffff, FALSE),
-  HOWTO(BFD_RELOC_MACH_O_PAIR, 0, 1, 16, FALSE, 0,
+	false, 0xffff, 0xffff, false),
+  HOWTO(BFD_RELOC_MACH_O_PAIR, 0, 2, 16, false, 0,
 	complain_overflow_bitfield,
 	NULL, "PAIR_16",
-	FALSE, 0xffff, 0xffff, FALSE),
+	false, 0xffff, 0xffff, false),
 };
 
-static bfd_boolean
+static bool
 bfd_mach_o_i386_canonicalize_one_reloc (bfd *       abfd,
 					struct mach_o_reloc_info_external * raw,
 					arelent *   res,
@@ -121,7 +121,7 @@ bfd_mach_o_i386_canonicalize_one_reloc (
   bfd_mach_o_reloc_info reloc;
 
   if (!bfd_mach_o_pre_canonicalize_one_reloc (abfd, raw, &reloc, res, syms))
-    return FALSE;
+    return false;
 
   if (reloc.r_scattered)
     {
@@ -130,44 +130,44 @@ bfd_mach_o_i386_canonicalize_one_reloc (
 	case BFD_MACH_O_GENERIC_RELOC_PAIR:
 	  /* PR 21813: Check for a corrupt PAIR reloc at the start.  */
 	  if (res == res_base)
-	    return FALSE;
+	    return false;
 	  if (reloc.r_length == 2)
 	    {
 	      res->howto = &i386_howto_table[7];
 	      res->address = res[-1].address;
-	      return TRUE;
+	      return true;
 	    }
 	  else if (reloc.r_length == 1)
 	    {
 	      res->howto = &i386_howto_table[10];
 	      res->address = res[-1].address;
-	      return TRUE;
+	      return true;
 	    }
-	  return FALSE;
+	  return false;
 	case BFD_MACH_O_GENERIC_RELOC_SECTDIFF:
 	  if (reloc.r_length == 2)
 	    {
 	      res->howto = &i386_howto_table[5];
-	      return TRUE;
+	      return true;
 	    }
 	  else if (reloc.r_length == 1)
 	    {
 	      res->howto = &i386_howto_table[8];
-	      return TRUE;
+	      return true;
 	    }
-	  return FALSE;
+	  return false;
 	case BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF:
 	  if (reloc.r_length == 2)
 	    {
 	      res->howto = &i386_howto_table[6];
-	      return TRUE;
+	      return true;
 	    }
 	  else if (reloc.r_length == 1)
 	    {
 	      res->howto = &i386_howto_table[9];
-	      return TRUE;
+	      return true;
 	    }
-	  return FALSE;
+	  return false;
 	default:
 	  break;
 	}
@@ -181,30 +181,30 @@ bfd_mach_o_i386_canonicalize_one_reloc (
 	    {
 	    case 0: /* len = 0, pcrel = 0  */
 	      res->howto = &i386_howto_table[2];
-	      return TRUE;
+	      return true;
 	    case 2: /* len = 1, pcrel = 0  */
 	      res->howto = &i386_howto_table[1];
-	      return TRUE;
+	      return true;
 	    case 3: /* len = 1, pcrel = 1  */
 	      res->howto = &i386_howto_table[4];
-	      return TRUE;
+	      return true;
 	    case 4: /* len = 2, pcrel = 0  */
 	      res->howto = &i386_howto_table[0];
-	      return TRUE;
+	      return true;
 	    case 5: /* len = 2, pcrel = 1  */
 	      res->howto = &i386_howto_table[3];
-	      return TRUE;
+	      return true;
 	    default:
-	      return FALSE;
+	      return false;
 	    }
 	default:
 	  break;
 	}
     }
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_i386_swap_reloc_out (arelent *rel, bfd_mach_o_reloc_info *rinfo)
 {
   rinfo->r_address = rel->address;
@@ -218,7 +218,7 @@ bfd_mach_o_i386_swap_reloc_out (arelent
       rinfo->r_scattered = 0;
       rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_VANILLA;
       rinfo->r_pcrel = rel->howto->pc_relative;
-      rinfo->r_length = rel->howto->size; /* Correct in practice.  */
+      rinfo->r_length = bfd_log2 (bfd_get_reloc_size (rel->howto));
       if ((*rel->sym_ptr_ptr)->flags & BSF_SECTION_SYM)
 	{
 	  rinfo->r_extern = 0;
@@ -235,7 +235,7 @@ bfd_mach_o_i386_swap_reloc_out (arelent
       rinfo->r_scattered = 1;
       rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_SECTDIFF;
       rinfo->r_pcrel = 0;
-      rinfo->r_length = rel->howto->size;
+      rinfo->r_length = bfd_log2 (bfd_get_reloc_size (rel->howto));
       rinfo->r_extern = 0;
       rinfo->r_value = rel->addend;
       break;
@@ -243,7 +243,7 @@ bfd_mach_o_i386_swap_reloc_out (arelent
       rinfo->r_scattered = 1;
       rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF;
       rinfo->r_pcrel = 0;
-      rinfo->r_length = rel->howto->size;
+      rinfo->r_length = bfd_log2 (bfd_get_reloc_size (rel->howto));
       rinfo->r_extern = 0;
       rinfo->r_value = rel->addend;
       break;
@@ -252,14 +252,14 @@ bfd_mach_o_i386_swap_reloc_out (arelent
       rinfo->r_scattered = 1;
       rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_PAIR;
       rinfo->r_pcrel = 0;
-      rinfo->r_length = rel->howto->size;
+      rinfo->r_length = bfd_log2 (bfd_get_reloc_size (rel->howto));
       rinfo->r_extern = 0;
       rinfo->r_value = rel->addend;
       break;
     default:
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type *
@@ -281,7 +281,7 @@ bfd_mach_o_i386_bfd_reloc_name_lookup (b
   return NULL;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_i386_print_thread (bfd *abfd, bfd_mach_o_thread_flavour *thread,
 			      void *vfile, char *buf)
 {
@@ -291,7 +291,7 @@ bfd_mach_o_i386_print_thread (bfd *abfd,
     {
     case BFD_MACH_O_x86_THREAD_STATE:
       if (thread->size < (8 + 16 * 4))
-	return FALSE;
+	return false;
       fprintf (file, "   x86_THREAD_STATE:\n");
       fprintf (file, "    flavor: 0x%08lx  count: 0x%08lx\n",
 	       (unsigned long)bfd_get_32 (abfd, buf + 0),
@@ -316,18 +316,18 @@ bfd_mach_o_i386_print_thread (bfd *abfd,
 	       (unsigned long)bfd_get_32 (abfd, buf + 60),
 	       (unsigned long)bfd_get_32 (abfd, buf + 64),
 	       (unsigned long)bfd_get_32 (abfd, buf + 68));
-      return TRUE;
+      return true;
     case BFD_MACH_O_x86_FLOAT_STATE:
       if (thread->size < 8)
-	return FALSE;
+	return false;
       fprintf (file, "   x86_FLOAT_STATE:\n");
       fprintf (file, "    flavor: 0x%08lx  count: 0x%08lx\n",
 	       (unsigned long)bfd_get_32 (abfd, buf + 0),
 	       (unsigned long)bfd_get_32 (abfd, buf + 4));
-      return TRUE;
+      return true;
     case BFD_MACH_O_x86_EXCEPTION_STATE:
       if (thread->size < 8 + 3 * 4)
-	return FALSE;
+	return false;
       fprintf (file, "   x86_EXCEPTION_STATE:\n");
       fprintf (file, "    flavor: 0x%08lx  count: 0x%08lx\n",
 	       (unsigned long)bfd_get_32 (abfd, buf + 0),
@@ -336,11 +336,11 @@ bfd_mach_o_i386_print_thread (bfd *abfd,
 	       (unsigned long)bfd_get_32 (abfd, buf + 8),
 	       (unsigned long)bfd_get_32 (abfd, buf + 12),
 	       (unsigned long)bfd_get_32 (abfd, buf + 16));
-      return TRUE;
+      return true;
     default:
       break;
     }
-  return FALSE;
+  return false;
 }
 
 static const mach_o_section_name_xlat text_section_names_xlat[] =
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-target.c ./bfd/mach-o-target.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-target.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/mach-o-target.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Mach-O support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -24,7 +24,6 @@
 #ifndef MACH_O_TARGET_COMMON_DEFINED
 #define MACH_O_TARGET_COMMON_DEFINED
 
-#define bfd_mach_o_bfd_free_cached_info		      _bfd_generic_bfd_free_cached_info
 #define bfd_mach_o_get_section_contents_in_window     _bfd_generic_get_section_contents_in_window
 #define bfd_mach_o_bfd_print_private_bfd_data	      bfd_mach_o_bfd_print_private_bfd_data
 #define bfd_mach_o_bfd_is_target_special_symbol	      _bfd_bool_bfd_asymbol_false
@@ -136,6 +135,7 @@ const bfd_target TARGET_NAME =
   ' ',				/* ar_pad_char.  */
   16,				/* ar_max_namelen.  */
   TARGET_PRIORITY,	/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 
 #if TARGET_BIG_ENDIAN
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-x86-64.c ./bfd/mach-o-x86-64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mach-o-x86-64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/mach-o-x86-64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Intel x86-64 Mach-O support for BFD.
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,26 +29,26 @@
 #define bfd_mach_o_core_p bfd_mach_o_x86_64_core_p
 #define bfd_mach_o_mkobject bfd_mach_o_x86_64_mkobject
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_x86_64_object_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0, 0, BFD_MACH_O_CPU_TYPE_X86_64);
 }
 
-static const bfd_target *
+static bfd_cleanup
 bfd_mach_o_x86_64_core_p (bfd *abfd)
 {
   return bfd_mach_o_header_p (abfd, 0,
 			      BFD_MACH_O_MH_CORE, BFD_MACH_O_CPU_TYPE_X86_64);
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_x86_64_mkobject (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata;
 
   if (!bfd_mach_o_mkobject_init (abfd))
-    return FALSE;
+    return false;
 
   mdata = bfd_mach_o_get_data (abfd);
   mdata->header.magic = BFD_MACH_O_MH_MAGIC_64;
@@ -58,7 +58,7 @@ bfd_mach_o_x86_64_mkobject (bfd *abfd)
   mdata->header.byteorder = BFD_ENDIAN_LITTLE;
   mdata->header.version = 2;
 
-  return TRUE;
+  return true;
 }
 
 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value.  */
@@ -67,64 +67,64 @@ bfd_mach_o_x86_64_mkobject (bfd *abfd)
 static reloc_howto_type x86_64_howto_table[]=
 {
   /* 0 */
-  HOWTO(BFD_RELOC_64, 0, 4, 64, FALSE, 0,
+  HOWTO(BFD_RELOC_64, 0, 8, 64, false, 0,
 	complain_overflow_bitfield,
 	NULL, "64",
-	FALSE, MINUS_ONE, MINUS_ONE, FALSE),
-  HOWTO(BFD_RELOC_32, 0, 2, 32, FALSE, 0,
+	false, MINUS_ONE, MINUS_ONE, false),
+  HOWTO(BFD_RELOC_32, 0, 4, 32, false, 0,
 	complain_overflow_bitfield,
 	NULL, "32",
-	FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(BFD_RELOC_32_PCREL, 0, 2, 32, TRUE, 0,
+	false, 0xffffffff, 0xffffffff, false),
+  HOWTO(BFD_RELOC_32_PCREL, 0, 4, 32, true, 0,
 	complain_overflow_bitfield,
 	NULL, "DISP32",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO(BFD_RELOC_MACH_O_X86_64_PCREL32_1, 0, 2, 32, TRUE, 0,
+	false, 0xffffffff, 0xffffffff, true),
+  HOWTO(BFD_RELOC_MACH_O_X86_64_PCREL32_1, 0, 4, 32, true, 0,
 	complain_overflow_bitfield,
 	NULL, "DISP32_1",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
+	false, 0xffffffff, 0xffffffff, true),
   /* 4 */
-  HOWTO(BFD_RELOC_MACH_O_X86_64_PCREL32_2, 0, 2, 32, TRUE, 0,
+  HOWTO(BFD_RELOC_MACH_O_X86_64_PCREL32_2, 0, 4, 32, true, 0,
 	complain_overflow_bitfield,
 	NULL, "DISP32_2",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO(BFD_RELOC_MACH_O_X86_64_PCREL32_4, 0, 2, 32, TRUE, 0,
+	false, 0xffffffff, 0xffffffff, true),
+  HOWTO(BFD_RELOC_MACH_O_X86_64_PCREL32_4, 0, 4, 32, true, 0,
 	complain_overflow_bitfield,
 	NULL, "DISP32_4",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO(BFD_RELOC_MACH_O_X86_64_BRANCH32, 0, 2, 32, TRUE, 0,
+	false, 0xffffffff, 0xffffffff, true),
+  HOWTO(BFD_RELOC_MACH_O_X86_64_BRANCH32, 0, 4, 32, true, 0,
 	complain_overflow_bitfield,
 	NULL, "BRANCH32",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO(BFD_RELOC_MACH_O_X86_64_GOT_LOAD, 0, 2, 32, TRUE, 0,
+	false, 0xffffffff, 0xffffffff, true),
+  HOWTO(BFD_RELOC_MACH_O_X86_64_GOT_LOAD, 0, 4, 32, true, 0,
 	complain_overflow_bitfield,
 	NULL, "GOT_LOAD",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
+	false, 0xffffffff, 0xffffffff, true),
   /* 8 */
-  HOWTO(BFD_RELOC_MACH_O_SUBTRACTOR32, 0, 2, 32, FALSE, 0,
+  HOWTO(BFD_RELOC_MACH_O_SUBTRACTOR32, 0, 4, 32, false, 0,
 	complain_overflow_bitfield,
 	NULL, "SUBTRACTOR32",
-	FALSE, 0xffffffff, 0xffffffff, FALSE),
-  HOWTO(BFD_RELOC_MACH_O_SUBTRACTOR64, 0, 4, 64, FALSE, 0,
+	false, 0xffffffff, 0xffffffff, false),
+  HOWTO(BFD_RELOC_MACH_O_SUBTRACTOR64, 0, 8, 64, false, 0,
 	complain_overflow_bitfield,
 	NULL, "SUBTRACTOR64",
-	FALSE, MINUS_ONE, MINUS_ONE, FALSE),
-  HOWTO(BFD_RELOC_MACH_O_X86_64_GOT, 0, 2, 32, TRUE, 0,
+	false, MINUS_ONE, MINUS_ONE, false),
+  HOWTO(BFD_RELOC_MACH_O_X86_64_GOT, 0, 4, 32, true, 0,
 	complain_overflow_bitfield,
 	NULL, "GOT",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
-  HOWTO(BFD_RELOC_MACH_O_X86_64_BRANCH8, 0, 0, 8, TRUE, 0,
+	false, 0xffffffff, 0xffffffff, true),
+  HOWTO(BFD_RELOC_MACH_O_X86_64_BRANCH8, 0, 1, 8, true, 0,
 	complain_overflow_bitfield,
 	NULL, "BRANCH8",
-	FALSE, 0xff, 0xff, TRUE),
+	false, 0xff, 0xff, true),
   /* 12 */
-  HOWTO(BFD_RELOC_MACH_O_X86_64_TLV, 0, 2, 32, TRUE, 0,
+  HOWTO(BFD_RELOC_MACH_O_X86_64_TLV, 0, 4, 32, true, 0,
 	complain_overflow_bitfield,
 	NULL, "TLV",
-	FALSE, 0xffffffff, 0xffffffff, TRUE),
+	false, 0xffffffff, 0xffffffff, true),
 };
 
-static bfd_boolean
+static bool
 bfd_mach_o_x86_64_canonicalize_one_reloc (bfd *       abfd,
 					  struct mach_o_reloc_info_external * raw,
 					  arelent *   res,
@@ -134,111 +134,111 @@ bfd_mach_o_x86_64_canonicalize_one_reloc
   bfd_mach_o_reloc_info reloc;
 
   if (!bfd_mach_o_pre_canonicalize_one_reloc (abfd, raw, &reloc, res, syms))
-    return FALSE;
+    return false;
 
   /* On x86-64, scattered relocs are not used.  */
   if (reloc.r_scattered)
-    return FALSE;
+    return false;
 
   switch (reloc.r_type)
     {
     case BFD_MACH_O_X86_64_RELOC_UNSIGNED:
       if (reloc.r_pcrel)
-	return FALSE;
+	return false;
       switch (reloc.r_length)
 	{
 	case 2:
 	  res->howto = &x86_64_howto_table[1];
-	  return TRUE;
+	  return true;
 	case 3:
 	  res->howto = &x86_64_howto_table[0];
-	  return TRUE;
+	  return true;
 	default:
-	  return FALSE;
+	  return false;
 	}
     case BFD_MACH_O_X86_64_RELOC_SIGNED:
       if (reloc.r_length == 2 && reloc.r_pcrel)
 	{
 	  res->howto = &x86_64_howto_table[2];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_X86_64_RELOC_BRANCH:
       if (!reloc.r_pcrel)
-	return FALSE;
+	return false;
       switch (reloc.r_length)
 	{
 	case 2:
 	  res->howto = &x86_64_howto_table[6];
-	  return TRUE;
+	  return true;
 	default:
-	  return FALSE;
+	  return false;
 	}
       break;
     case BFD_MACH_O_X86_64_RELOC_GOT_LOAD:
       if (reloc.r_length == 2 && reloc.r_pcrel && reloc.r_extern)
 	{
 	  res->howto = &x86_64_howto_table[7];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_X86_64_RELOC_GOT:
       if (reloc.r_length == 2 && reloc.r_pcrel && reloc.r_extern)
 	{
 	  res->howto = &x86_64_howto_table[10];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_X86_64_RELOC_SUBTRACTOR:
       if (reloc.r_pcrel)
-	return FALSE;
+	return false;
       switch (reloc.r_length)
 	{
 	case 2:
 	  res->howto = &x86_64_howto_table[8];
-	  return TRUE;
+	  return true;
 	case 3:
 	  res->howto = &x86_64_howto_table[9];
-	  return TRUE;
+	  return true;
 	default:
-	  return FALSE;
+	  return false;
 	}
       break;
     case BFD_MACH_O_X86_64_RELOC_SIGNED_1:
       if (reloc.r_length == 2 && reloc.r_pcrel)
 	{
 	  res->howto = &x86_64_howto_table[3];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_X86_64_RELOC_SIGNED_2:
       if (reloc.r_length == 2 && reloc.r_pcrel)
 	{
 	  res->howto = &x86_64_howto_table[4];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_X86_64_RELOC_SIGNED_4:
       if (reloc.r_length == 2 && reloc.r_pcrel)
 	{
 	  res->howto = &x86_64_howto_table[5];
-	  return TRUE;
+	  return true;
 	}
       break;
     case BFD_MACH_O_X86_64_RELOC_TLV:
       if (reloc.r_length == 2 && reloc.r_pcrel && reloc.r_extern)
 	{
 	  res->howto = &x86_64_howto_table[12];
-	  return TRUE;
+	  return true;
 	}
       break;
     default:
-      return FALSE;
+      return false;
     }
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_x86_64_swap_reloc_out (arelent *rel, bfd_mach_o_reloc_info *rinfo)
 {
   rinfo->r_address = rel->address;
@@ -306,7 +306,7 @@ bfd_mach_o_x86_64_swap_reloc_out (arelen
       rinfo->r_length = 2;
       break;
     default:
-      return FALSE;
+      return false;
     }
   if ((*rel->sym_ptr_ptr)->flags & BSF_SECTION_SYM)
     {
@@ -319,7 +319,7 @@ bfd_mach_o_x86_64_swap_reloc_out (arelen
       rinfo->r_extern = 1;
       rinfo->r_value = (*rel->sym_ptr_ptr)->udata.i;
     }
-  return TRUE;
+  return true;
 }
 
 static reloc_howto_type *
@@ -343,14 +343,14 @@ bfd_mach_o_x86_64_bfd_reloc_name_lookup
   return NULL;
 }
 
-static bfd_boolean
+static bool
 bfd_mach_o_section_type_valid_for_x86_64 (unsigned long val)
 {
   if (val == BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS
       || val == BFD_MACH_O_S_LAZY_SYMBOL_POINTERS
       || val == BFD_MACH_O_S_SYMBOL_STUBS)
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 /* We want to bump the alignment of some sections.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/MAINTAINERS ./bfd/MAINTAINERS
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/MAINTAINERS	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/MAINTAINERS	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 See ../binutils/MAINTAINERS
 
-Copyright (C) 2012-2019 Free Software Foundation, Inc.
+Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/Makefile.am ./bfd/Makefile.am
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/Makefile.am	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/Makefile.am	2024-02-01 01:47:13.000000000 +0000
@@ -1,6 +1,6 @@
 ## Process this file with automake to generate Makefile.in
 #
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -17,13 +17,18 @@
 # <http://www.gnu.org/licenses/>.
 #
 
-AUTOMAKE_OPTIONS = no-dist foreign
+AUTOMAKE_OPTIONS = no-dist foreign info-in-builddir no-texinfo.tex
 ACLOCAL_AMFLAGS = -I . -I .. -I ../config
 
+MOSTLYCLEANFILES =
+CLEANFILES =
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+
 INCDIR = $(srcdir)/../include
 CSEARCH = -I. -I$(srcdir) -I$(INCDIR)
 
-SUBDIRS = doc po
+SUBDIRS = po
 
 bfddocdir = doc
 
@@ -33,7 +38,7 @@ bfdlibdir = @bfdlibdir@
 bfdincludedir = @bfdincludedir@
 bfdlib_LTLIBRARIES = libbfd.la
 bfdinclude_HEADERS = $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
-		     bfd_stdint.h $(INCDIR)/diagnostics.h $(INCDIR)/bfdlink.h
+		     $(INCDIR)/diagnostics.h $(INCDIR)/bfdlink.h
 else !INSTALL_LIBBFD
 # Empty these so that the respective installation directories will not be created.
 bfdlibdir =
@@ -52,8 +57,8 @@ ZLIBINC = @zlibinc@
 
 WARN_CFLAGS = @WARN_CFLAGS@
 NO_WERROR = @NO_WERROR@
-AM_CFLAGS = $(WARN_CFLAGS) $(ZLIBINC)
-AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"'
+AM_CFLAGS = $(WARN_CFLAGS) $(ZLIBINC) $(ZSTD_CFLAGS)
+AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' @LARGEFILE_CPPFLAGS@
 if PLUGINS
 bfdinclude_HEADERS += $(INCDIR)/plugin-api.h
 LIBDL = @lt_cv_dlopen_libs@
@@ -72,7 +77,7 @@ BFD_H = bfd.h
 BFD32_LIBS = \
 	archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo cache.lo \
 	coff-bfd.lo compress.lo corefile.lo elf-properties.lo format.lo \
-	hash.lo init.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo \
+	hash.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo \
 	section.lo simple.lo stab-syms.lo stabs.lo syms.lo targets.lo \
 	binary.lo ihex.lo srec.lo tekhex.lo verilog.lo
 
@@ -81,7 +86,7 @@ BFD64_LIBS = archive64.lo
 BFD32_LIBS_CFILES = \
 	archive.c archures.c bfd.c bfdio.c bfdwin.c cache.c coff-bfd.c \
 	compress.c corefile.c elf-properties.c format.c hash.c \
-	init.c libbfd.c linker.c merge.c opncls.c reloc.c \
+	libbfd.c linker.c merge.c opncls.c reloc.c \
 	section.c simple.c stab-syms.c stabs.c syms.c targets.c \
 	binary.c ihex.c srec.c tekhex.c verilog.c
 
@@ -92,6 +97,7 @@ BFD64_LIBS_CFILES = archive64.c
 ALL_MACHINES = \
 	cpu-aarch64.lo \
 	cpu-alpha.lo \
+	cpu-amdgcn.lo \
 	cpu-arc.lo \
 	cpu-arm.lo \
 	cpu-avr.lo \
@@ -111,23 +117,22 @@ ALL_MACHINES = \
 	cpu-h8300.lo \
 	cpu-hppa.lo \
 	cpu-i386.lo \
-	cpu-iamcu.lo \
-	cpu-l1om.lo \
-	cpu-k1om.lo \
 	cpu-ia64.lo \
+	cpu-iamcu.lo \
 	cpu-ip2k.lo \
 	cpu-iq2000.lo \
+	cpu-kvx.lo \
 	cpu-lm32.lo \
+	cpu-loongarch.lo \
 	cpu-m10200.lo \
 	cpu-m10300.lo \
 	cpu-m32c.lo \
 	cpu-m32r.lo \
 	cpu-m68hc11.lo \
 	cpu-m68hc12.lo \
+	cpu-m68k.lo \
 	cpu-m9s12x.lo \
-	cpu-s12z.lo \
 	cpu-m9s12xg.lo \
-	cpu-m68k.lo \
 	cpu-mcore.lo \
 	cpu-mep.lo \
 	cpu-metag.lo \
@@ -144,13 +149,13 @@ ALL_MACHINES = \
 	cpu-or1k.lo \
 	cpu-pdp11.lo \
 	cpu-pj.lo \
-	cpu-plugin.lo \
 	cpu-powerpc.lo \
 	cpu-pru.lo \
-	cpu-rs6000.lo \
 	cpu-riscv.lo \
 	cpu-rl78.lo \
+	cpu-rs6000.lo \
 	cpu-rx.lo \
+	cpu-s12z.lo \
 	cpu-s390.lo \
 	cpu-score.lo \
 	cpu-sh.lo \
@@ -160,7 +165,6 @@ ALL_MACHINES = \
 	cpu-tic4x.lo \
 	cpu-tic54x.lo \
 	cpu-tic6x.lo \
-	cpu-tic80.lo \
 	cpu-tilegx.lo \
 	cpu-tilepro.lo \
 	cpu-v850.lo \
@@ -168,7 +172,6 @@ ALL_MACHINES = \
 	cpu-vax.lo \
 	cpu-visium.lo \
 	cpu-wasm32.lo \
-	cpu-xc16x.lo \
 	cpu-xgate.lo \
 	cpu-xstormy16.lo \
 	cpu-xtensa.lo \
@@ -178,6 +181,7 @@ ALL_MACHINES = \
 ALL_MACHINES_CFILES = \
 	cpu-aarch64.c \
 	cpu-alpha.c \
+	cpu-amdgcn.c \
 	cpu-arc.c \
 	cpu-arm.c \
 	cpu-avr.c \
@@ -197,23 +201,22 @@ ALL_MACHINES_CFILES = \
 	cpu-h8300.c \
 	cpu-hppa.c \
 	cpu-i386.c \
-	cpu-iamcu.c \
-	cpu-l1om.c \
-	cpu-k1om.c \
 	cpu-ia64.c \
+	cpu-iamcu.c \
 	cpu-ip2k.c \
 	cpu-iq2000.c \
+	cpu-kvx.c \
 	cpu-lm32.c \
+	cpu-loongarch.c \
 	cpu-m10200.c \
 	cpu-m10300.c \
 	cpu-m32c.c \
 	cpu-m32r.c \
 	cpu-m68hc11.c \
 	cpu-m68hc12.c \
+	cpu-m68k.c \
 	cpu-m9s12x.c \
-	cpu-s12z.c \
 	cpu-m9s12xg.c \
-	cpu-m68k.c \
 	cpu-mcore.c \
 	cpu-mep.c \
 	cpu-metag.c \
@@ -225,18 +228,18 @@ ALL_MACHINES_CFILES = \
 	cpu-mt.c \
 	cpu-nds32.c \
 	cpu-nfp.c \
-	cpu-ns32k.c \
 	cpu-nios2.c \
+	cpu-ns32k.c \
 	cpu-or1k.c \
 	cpu-pdp11.c \
 	cpu-pj.c \
-	cpu-plugin.c \
 	cpu-powerpc.c \
 	cpu-pru.c \
-	cpu-rs6000.c \
 	cpu-riscv.c \
 	cpu-rl78.c \
+	cpu-rs6000.c \
 	cpu-rx.c \
+	cpu-s12z.c \
 	cpu-s390.c \
 	cpu-score.c \
 	cpu-sh.c \
@@ -246,7 +249,6 @@ ALL_MACHINES_CFILES = \
 	cpu-tic4x.c \
 	cpu-tic54x.c \
 	cpu-tic6x.c \
-	cpu-tic80.c \
 	cpu-tilegx.c \
 	cpu-tilepro.c \
 	cpu-v850.c \
@@ -254,7 +256,6 @@ ALL_MACHINES_CFILES = \
 	cpu-vax.c \
 	cpu-visium.c \
 	cpu-wasm32.c \
-	cpu-xc16x.c \
 	cpu-xgate.c \
 	cpu-xstormy16.c \
 	cpu-xtensa.c \
@@ -266,7 +267,6 @@ ALL_MACHINES_CFILES = \
 BFD32_BACKENDS = \
 	aout-cris.lo \
 	aout-ns32k.lo \
-	aout-tic30.lo \
 	aout32.lo \
 	cf-i386lynx.lo \
 	coff-go32.lo \
@@ -278,7 +278,6 @@ BFD32_BACKENDS = \
 	coff-tic30.lo \
 	coff-tic4x.lo \
 	coff-tic54x.lo \
-	coff-tic80.lo \
 	coff-z80.lo \
 	coff-z8k.lo \
 	coffgen.lo \
@@ -293,6 +292,7 @@ BFD32_BACKENDS = \
 	elf-m10200.lo \
 	elf-m10300.lo \
 	elf-nacl.lo \
+	elf-sframe.lo \
 	elf-strtab.lo \
 	elf-vxworks.lo \
 	elf.lo \
@@ -316,7 +316,6 @@ BFD32_BACKENDS = \
 	elf32-h8300.lo \
 	elf32-hppa.lo \
 	elf32-i386.lo \
-	elfxx-x86.lo \
 	elf32-ip2k.lo \
 	elf32-iq2000.lo \
 	elf32-lm32.lo \
@@ -326,7 +325,6 @@ BFD32_BACKENDS = \
 	elf32-m68hc12.lo \
 	elf32-m68hc1x.lo \
 	elf32-m68k.lo \
-	elf32-s12z.lo \
 	elf32-mcore.lo \
 	elf32-mep.lo \
 	elf32-metag.lo \
@@ -342,6 +340,7 @@ BFD32_BACKENDS = \
 	elf32-pru.lo \
 	elf32-rl78.lo \
 	elf32-rx.lo \
+	elf32-s12z.lo \
 	elf32-s390.lo \
 	elf32-sh.lo \
 	elf32-sparc.lo \
@@ -353,36 +352,36 @@ BFD32_BACKENDS = \
 	elf32-vax.lo \
 	elf32-visium.lo \
 	elf32-wasm32.lo \
-	elf32-xc16x.lo \
 	elf32-xgate.lo \
 	elf32-xstormy16.lo \
 	elf32-xtensa.lo \
+	elf32-z80.lo \
 	elf32.lo \
 	elflink.lo \
 	elfxx-sparc.lo \
 	elfxx-tilegx.lo \
+	elfxx-x86.lo \
 	i386aout.lo \
 	i386bsd.lo \
 	i386lynx.lo \
 	i386msdos.lo \
-	mach-o.lo \
-	mach-o-i386.lo \
 	mach-o-arm.lo \
+	mach-o-i386.lo \
+	mach-o.lo \
 	ns32knetbsd.lo \
 	pc532-mach.lo \
+	pdb.lo \
 	pdp11.lo \
 	pe-arm-wince.lo \
 	pe-arm.lo \
 	pe-i386.lo \
 	pe-mcore.lo \
-	pe-ppc.lo \
 	pe-sh.lo \
 	pef.lo \
 	pei-arm-wince.lo \
 	pei-arm.lo \
 	pei-i386.lo \
 	pei-mcore.lo \
-	pei-ppc.lo \
 	pei-sh.lo \
 	peigen.lo \
 	plugin.lo \
@@ -396,13 +395,13 @@ BFD32_BACKENDS = \
 	wasm-module.lo \
 	xcofflink.lo \
 	xsym.lo \
+	xtensa-dynconfig.lo \
 	xtensa-isa.lo \
 	xtensa-modules.lo
 
 BFD32_BACKENDS_CFILES = \
 	aout-cris.c \
 	aout-ns32k.c \
-	aout-tic30.c \
 	aout32.c \
 	cf-i386lynx.c \
 	coff-go32.c \
@@ -414,7 +413,6 @@ BFD32_BACKENDS_CFILES = \
 	coff-tic30.c \
 	coff-tic4x.c \
 	coff-tic54x.c \
-	coff-tic80.c \
 	coff-z80.c \
 	coff-z8k.c \
 	coffgen.c \
@@ -429,6 +427,7 @@ BFD32_BACKENDS_CFILES = \
 	elf-m10200.c \
 	elf-m10300.c \
 	elf-nacl.c \
+	elf-sframe.c \
 	elf-strtab.c \
 	elf-vxworks.c \
 	elf.c \
@@ -452,7 +451,6 @@ BFD32_BACKENDS_CFILES = \
 	elf32-h8300.c \
 	elf32-hppa.c \
 	elf32-i386.c \
-	elfxx-x86.c \
 	elf32-ip2k.c \
 	elf32-iq2000.c \
 	elf32-lm32.c \
@@ -462,7 +460,6 @@ BFD32_BACKENDS_CFILES = \
 	elf32-m68hc12.c \
 	elf32-m68hc1x.c \
 	elf32-m68k.c \
-	elf32-s12z.c \
 	elf32-mcore.c \
 	elf32-mep.c \
 	elf32-metag.c \
@@ -478,6 +475,7 @@ BFD32_BACKENDS_CFILES = \
 	elf32-pru.c \
 	elf32-rl78.c \
 	elf32-rx.c \
+	elf32-s12z.c \
 	elf32-s390.c \
 	elf32-sh.c \
 	elf32-sparc.c \
@@ -489,36 +487,36 @@ BFD32_BACKENDS_CFILES = \
 	elf32-vax.c \
 	elf32-visium.c \
 	elf32-wasm32.c \
-	elf32-xc16x.c \
 	elf32-xgate.c \
 	elf32-xstormy16.c \
 	elf32-xtensa.c \
+	elf32-z80.c \
 	elf32.c \
 	elflink.c \
 	elfxx-sparc.c \
 	elfxx-tilegx.c \
+	elfxx-x86.c \
 	i386aout.c \
 	i386bsd.c \
 	i386lynx.c \
 	i386msdos.c \
-	mach-o.c \
-	mach-o-i386.c \
 	mach-o-arm.c \
+	mach-o-i386.c \
+	mach-o.c \
 	ns32knetbsd.c \
 	pc532-mach.c \
+	pdb.c \
 	pdp11.c \
 	pe-arm-wince.c \
 	pe-arm.c \
 	pe-i386.c \
 	pe-mcore.c \
-	pe-ppc.c \
 	pe-sh.c \
 	pef.c \
 	pei-arm-wince.c \
 	pei-arm.c \
 	pei-i386.c \
 	pei-mcore.c \
-	pei-ppc.c \
 	pei-sh.c \
 	plugin.c \
 	ppcboot.c \
@@ -531,6 +529,7 @@ BFD32_BACKENDS_CFILES = \
 	wasm-module.c \
 	xcofflink.c \
 	xsym.c \
+	xtensa-dynconfig.c \
 	xtensa-isa.c \
 	xtensa-modules.c
 
@@ -540,45 +539,59 @@ BFD32_BACKENDS_CFILES = \
 # elf32-ia64.c requires a 64-bit bfd_vma, and hence can not be put in
 # BFD32_BACKENDS.
 BFD64_BACKENDS = \
-	elf32-aarch64.lo \
-	elf64-aarch64.lo \
-	elfxx-aarch64.lo \
 	aix5ppc-core.lo \
 	aout64.lo \
 	coff-alpha.lo \
 	coff-x86_64.lo \
 	coff64-rs6000.lo \
+	elf32-aarch64.lo \
 	elf32-ia64.lo \
+	elf32-kvx.lo \
+	elf32-loongarch.lo \
 	elf32-mips.lo \
+	elf32-riscv.lo \
 	elf32-score.lo \
 	elf32-score7.lo \
+	elf64-aarch64.lo \
 	elf64-alpha.lo \
+	elf64-amdgcn.lo \
+	elf64-bpf.lo \
 	elf64-gen.lo \
 	elf64-hppa.lo \
-	elf64-ia64.lo \
 	elf64-ia64-vms.lo \
-	elfxx-ia64.lo \
-	elfn32-mips.lo \
+	elf64-ia64.lo \
+	elf64-kvx.lo \
+	elf64-loongarch.lo \
 	elf64-mips.lo \
-	elfxx-mips.lo \
 	elf64-mmix.lo \
 	elf64-nfp.lo \
 	elf64-ppc.lo \
-	elf32-riscv.lo \
 	elf64-riscv.lo \
-	elfxx-riscv.lo \
 	elf64-s390.lo \
 	elf64-sparc.lo \
 	elf64-tilegx.lo \
 	elf64-x86-64.lo \
-	elfxx-x86.lo \
-	elf64-bpf.lo \
 	elf64.lo \
+	elfn32-mips.lo \
+	elfxx-aarch64.lo \
+	elfxx-ia64.lo \
+	elfxx-kvx.lo \
+	elfxx-loongarch.lo \
+	elfxx-mips.lo \
+	elfxx-riscv.lo \
+	elfxx-x86.lo \
 	mach-o-aarch64.lo \
 	mach-o-x86-64.lo \
 	mmo.lo \
+	pe-aarch64.lo \
+	pe-aarch64igen.lo \
+	pe-loongarch64igen.lo \
+	pe-riscv64igen.lo \
 	pe-x86_64.lo \
+	pei-aarch64.lo \
 	pei-ia64.lo \
+	pei-loongarch64.lo \
+	pei-riscv64.lo \
 	pei-x86_64.lo \
 	pepigen.lo \
 	pex64igen.lo \
@@ -594,6 +607,8 @@ BFD64_BACKENDS_CFILES = \
 	elf32-score.c \
 	elf32-score7.c \
 	elf64-alpha.c \
+	elf64-amdgcn.c \
+	elf64-bpf.c \
 	elf64-gen.c \
 	elf64-hppa.c \
 	elf64-ia64-vms.c \
@@ -605,24 +620,28 @@ BFD64_BACKENDS_CFILES = \
 	elf64-sparc.c \
 	elf64-tilegx.c \
 	elf64-x86-64.c \
-	elfxx-x86.c \
-	elf64-bpf.c \
 	elf64.c \
 	elfn32-mips.c \
 	elfxx-aarch64.c \
 	elfxx-ia64.c \
+	elfxx-kvx.c \
+	elfxx-loongarch.c \
 	elfxx-mips.c \
 	elfxx-riscv.c \
+	elfxx-x86.c \
 	mach-o-aarch64.c \
 	mach-o-x86-64.c \
 	mmo.c \
+	pe-aarch64.c \
 	pe-x86_64.c \
+	pei-aarch64.c \
 	pei-ia64.c \
+	pei-loongarch64.c \
+	pei-riscv64.c \
 	pei-x86_64.c \
 	vms-alpha.c
 
 OPTIONAL_BACKENDS = \
-	aix386-core.lo \
 	cisco-core.lo \
 	hpux-core.lo \
 	irix-core.lo \
@@ -630,11 +649,9 @@ OPTIONAL_BACKENDS = \
 	netbsd-core.lo \
 	osf-core.lo \
 	rs6000-core.lo \
-	sco5-core.lo \
 	trad-core.lo
 
 OPTIONAL_BACKENDS_CFILES = \
-	aix386-core.c \
 	cisco-core.c \
 	hpux-core.c \
 	irix-core.c \
@@ -642,7 +659,6 @@ OPTIONAL_BACKENDS_CFILES = \
 	netbsd-core.c \
 	osf-core.c \
 	rs6000-core.c \
-	sco5-core.c \
 	trad-core.c
 
 # Reconfigure if config.bfd or configure.host changes.
@@ -674,9 +690,12 @@ SOURCE_CFILES = \
 
 BUILD_CFILES = \
 	elf32-aarch64.c elf64-aarch64.c \
+	elf32-kvx.c elf64-kvx.c \
 	elf32-ia64.c elf64-ia64.c \
+	elf32-loongarch.c elf64-loongarch.c \
 	elf32-riscv.c elf64-riscv.c \
-	peigen.c pepigen.c pex64igen.c
+	peigen.c pepigen.c pex64igen.c pe-aarch64igen.c pe-loongarch64igen.c \
+	pe-riscv64igen.c
 
 CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
 
@@ -685,7 +704,7 @@ CFILES = $(SOURCE_CFILES) $(BUILD_CFILES
 SOURCE_HFILES = \
 	aout-target.h aoutx.h arc-got.h arc-plt.h \
 	coff-arm.h coff-bfd.h coffcode.h coffswap.h \
-	cpu-aarch64.h cpu-arm.h cpu-h8300.h cpu-m68k.h \
+	cpu-aarch64.h cpu-arm.h cpu-h8300.h cpu-m68k.h cpu-riscv.h \
 	ecoff-bfd.h ecoffswap.h \
 	elf32-arm.h elf32-avr.h elf32-bfin.h elf32-cr16.h elf32-csky.h \
 	elf32-dlx.h elf32-hppa.h elf32-m68hc1x.h elf32-m68k.h \
@@ -696,7 +715,7 @@ SOURCE_HFILES = \
 	elf-bfd.h elfcode.h elfcore.h elf-hppa.h elf-linker-x86.h \
 	elf-linux-core.h elf-nacl.h elf-s390.h elf-vxworks.h \
 	elfxx-aarch64.h elfxx-ia64.h elfxx-mips.h elfxx-riscv.h \
-	elfxx-sparc.h elfxx-tilegx.h elfxx-x86.h \
+	elfxx-sparc.h elfxx-tilegx.h elfxx-x86.h elfxx-loongarch.h \
 	genlink.h go32stub.h \
 	libaout.h libbfd.h libcoff.h libecoff.h libhppa.h \
 	libpei.h libxcoff.h \
@@ -710,24 +729,33 @@ SOURCE_HFILES = \
 
 ## ... and .h files which are in the build tree, minus config.h and bfd.h
 BUILD_HFILES = \
-	bfdver.h elf32-target.h elf64-target.h targmatch.h bfd_stdint.h
+	bfdver.h elf32-target.h elf64-target.h targmatch.h
 
 # Ensure they are built early:
-BUILT_SOURCES = $(BUILD_HFILES)
+BUILT_SOURCES = $(BUILD_HFILES) @MAINT@ $(BUILD_CFILES)
 
 HFILES = $(SOURCE_HFILES) $(BUILD_HFILES)
 
+BFD_H_DEPS = $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
+LOCAL_H_DEPS = libbfd.h sysdep.h config.h
+$(BFD32_LIBS) \
+ $(BFD64_LIBS) \
+ $(ALL_MACHINES) \
+ $(BFD32_BACKENDS) \
+ $(BFD64_BACKENDS) \
+ $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
+
 SRC_POTFILES = $(SOURCE_CFILES) $(SOURCE_HFILES)
 BLD_POTFILES = $(BUILD_CFILES) $(BUILD_HFILES)
 
-po/SRC-POTFILES.in: @MAINT@ Makefile $(SRC_POTFILES)
+po/SRC-POTFILES.in: @MAINT@ Makefile
 	for file in $(SRC_POTFILES); do echo $$file; done \
-	  | LC_ALL=C sort > tmp.src \
+	  | LC_ALL=C sort | uniq > tmp.src \
 	  && mv tmp.src $(srcdir)/po/SRC-POTFILES.in
 
-po/BLD-POTFILES.in: @MAINT@ Makefile $(BLD_POTFILES)
+po/BLD-POTFILES.in: @MAINT@ Makefile
 	for file in $(BLD_POTFILES); do echo $$file; done \
-	  | LC_ALL=C sort > tmp.bld \
+	  | LC_ALL=C sort | uniq > tmp.bld \
 	  && mv tmp.bld $(srcdir)/po/BLD-POTFILES.in
 
 all diststuff: info
@@ -760,143 +788,126 @@ ofiles: stamp-ofiles ; @true
 # dependency tracking fragments are picked up in the Makefile.
 libbfd_la_SOURCES = $(BFD32_LIBS_CFILES)
 EXTRA_libbfd_la_SOURCES = $(CFILES)
-libbfd_la_DEPENDENCIES = $(OFILES) ofiles
-libbfd_la_LIBADD = `cat ofiles` @SHARED_LIBADD@ $(LIBDL) $(ZLIB)
+libbfd_la_DEPENDENCIES = $(OFILES) ofiles ../libsframe/libsframe.la
+libbfd_la_LIBADD = `cat ofiles` @SHARED_LIBADD@ $(LIBDL) $(ZLIB) $(ZSTD_LIBS) ../libsframe/libsframe.la
 libbfd_la_LDFLAGS += -release `cat libtool-soversion` @SHARED_LDFLAGS@
 
-# libtool will build .libs/libbfd.a.  We create libbfd.a in the build
-# directory so that we don't have to convert all the programs that use
-# libbfd.a simultaneously.  This is a hack which should be removed if
-# everything else starts using libtool.  FIXME.
-
-noinst_LIBRARIES = libbfd.a
-libbfd_a_SOURCES =
-
-stamp-lib: libbfd.la
-	libtooldir=`$(LIBTOOL) --config | $(SED) -n -e 's/^objdir=//p'`; \
-	if [ -f $$libtooldir/libbfd.a ]; then \
-	  cp $$libtooldir/libbfd.a libbfd.tmp; \
-	  $(RANLIB) libbfd.tmp; \
-	  $(SHELL) $(srcdir)/../move-if-change libbfd.tmp libbfd.a; \
-	else true; fi
-	touch stamp-lib
-
-libbfd.a: stamp-lib ; @true
-
 # This file holds an array associating configuration triplets and
 # vector names.  It is built from config.bfd.  It is not compiled by
 # itself, but is included by targets.c.
 targmatch.h: config.bfd targmatch.sed
-	rm -f targmatch.h
-	$(SED) -f $(srcdir)/targmatch.sed < $(srcdir)/config.bfd > targmatch.new
-	mv -f targmatch.new targmatch.h
+	$(AM_V_at)rm -f targmatch.new
+	$(AM_V_GEN)$(SED) -f $(srcdir)/targmatch.sed < $(srcdir)/config.bfd > targmatch.new
+	$(AM_V_at)mv -f targmatch.new targmatch.h
 
 # When compiling archures.c and targets.c, supply the default target
 # info from configure.
 
 targets.lo: targets.c Makefile
 if am__fastdepCC
-	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c
-	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c
+	$(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 else
 if AMDEP
 	source='targets.c' object='$@' libtool=yes @AMDEPBACKSLASH@
 	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 endif
-	$(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c
+	$(AM_V_CC)$(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c
 endif
 
 archures.lo: archures.c Makefile
 if am__fastdepCC
-	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c
-	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c
+	$(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 else
 if AMDEP
 	source='archures.c' object='$@' libtool=yes @AMDEPBACKSLASH@
 	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 endif
-	$(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c
+	$(AM_V_CC)$(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c
 endif
 
 dwarf2.lo: dwarf2.c Makefile
 if am__fastdepCC
-	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
-	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
+	$(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 else
 if AMDEP
 	source='dwarf2.c' object='$@' libtool=yes @AMDEPBACKSLASH@
 	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 endif
-	$(LTCOMPILE) -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
+	$(AM_V_CC)$(LTCOMPILE) -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
 endif
 
 elf32-target.h : elfxx-target.h
-	rm -f elf32-target.h
-	$(SED) -e s/NN/32/g < $(srcdir)/elfxx-target.h > elf32-target.new
-	mv -f elf32-target.new elf32-target.h
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< > $@
 
 elf64-target.h : elfxx-target.h
-	rm -f elf64-target.h
-	$(SED) -e s/NN/64/g < $(srcdir)/elfxx-target.h > elf64-target.new
-	mv -f elf64-target.new elf64-target.h
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< > $@
 
 elf32-aarch64.c : elfnn-aarch64.c
-	rm -f elf32-aarch64.c
-	echo "#line 1 \"$(srcdir)/elfnn-aarch64.c\"" > elf32-aarch64.new
-	$(SED) -e s/NN/32/g < $(srcdir)/elfnn-aarch64.c >> elf32-aarch64.new
-	mv -f elf32-aarch64.new elf32-aarch64.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
 
 elf64-aarch64.c : elfnn-aarch64.c
-	rm -f elf64-aarch64.c
-	echo "#line 1 \"$(srcdir)/elfnn-aarch64.c\"" > elf64-aarch64.new
-	$(SED) -e s/NN/64/g < $(srcdir)/elfnn-aarch64.c >> elf64-aarch64.new
-	mv -f elf64-aarch64.new elf64-aarch64.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
 
 elf32-ia64.c : elfnn-ia64.c
-	rm -f elf32-ia64.c
-	$(SED) -e s/NN/32/g < $(srcdir)/elfnn-ia64.c > elf32-ia64.new
-	mv -f elf32-ia64.new elf32-ia64.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
 
 elf64-ia64.c : elfnn-ia64.c
-	rm -f elf64-ia64.c
-	$(SED) -e s/NN/64/g < $(srcdir)/elfnn-ia64.c > elf64-ia64.new
-	mv -f elf64-ia64.new elf64-ia64.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
+
+elf32-kvx.c : elfnn-kvx.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
+
+elf64-kvx.c : elfnn-kvx.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
+
+elf32-loongarch.c : elfnn-loongarch.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
+
+elf64-loongarch.c : elfnn-loongarch.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
 
 elf32-riscv.c : elfnn-riscv.c
-	rm -f elf32-riscv.c
-	echo "#line 1 \"$(srcdir)/elfnn-riscv.c\"" > elf32-riscv.new
-	sed -e s/NN/32/g < $(srcdir)/elfnn-riscv.c >> elf32-riscv.new
-	mv -f elf32-riscv.new elf32-riscv.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
 
 elf64-riscv.c : elfnn-riscv.c
-	rm -f elf64-riscv.c
-	echo "#line 1 \"$(srcdir)/elfnn-riscv.c\"" > elf64-riscv.new
-	sed -e s/NN/64/g < $(srcdir)/elfnn-riscv.c >> elf64-riscv.new
-	mv -f elf64-riscv.new elf64-riscv.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
 
 peigen.c : peXXigen.c
-	rm -f peigen.c
-	$(SED) -e s/XX/pe/g < $(srcdir)/peXXigen.c > peigen.new
-	mv -f peigen.new peigen.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/pe/g < $< >> $@
 
 pepigen.c : peXXigen.c
-	rm -f pepigen.c
-	$(SED) -e s/XX/pep/g < $(srcdir)/peXXigen.c > pepigen.new
-	mv -f pepigen.new pepigen.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/pep/g < $< >> $@
 
 pex64igen.c: peXXigen.c
-	rm -f pex64igen.c
-	$(SED) -e s/XX/pex64/g < $(srcdir)/peXXigen.c > pex64igen.new
-	mv -f pex64igen.new pex64igen.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/pex64/g < $< >> $@
 
-BFD_H_DEPS= $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
-LOCAL_H_DEPS= libbfd.h sysdep.h config.h bfd_stdint.h
-$(BFD32_LIBS) \
- $(BFD64_LIBS) \
- $(ALL_MACHINES) \
- $(BFD32_BACKENDS) \
- $(BFD64_BACKENDS) \
- $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
+pe-aarch64igen.c: peXXigen.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/peAArch64/g < $< >> $@
+
+pe-loongarch64igen.c: peXXigen.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/peLoongArch64/g < $< >> $@
+
+pe-riscv64igen.c: peXXigen.c
+	$(AM_V_at)echo "#line 1 \"peXXigen.c\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/peRiscV64/g < $< >> $@
 
 host-aout.lo: Makefile
 
@@ -916,59 +927,68 @@ stmp-bfd-h: bfd-in3.h
 	rm -f bfd-tmp.h
 	touch stmp-bfd-h
 
-BFD_H_FILES = bfd-in.h init.c opncls.c libbfd.c \
-	bfdio.c bfdwin.c section.c archures.c reloc.c \
-	syms.c bfd.c archive.c corefile.c targets.c format.c \
-	linker.c simple.c compress.c
+BFD_H_FILES = bfd-in.h libbfd.c hash.c section.c syms.c \
+	archive.c archures.c bfd.c bfdio.c bfdwin.c \
+	cache.c compress.c corefile.c format.c linker.c opncls.c \
+	reloc.c simple.c stab-syms.c stabs.c targets.c
 BFD64_H_FILES = archive64.c
-LIBBFD_H_FILES = libbfd-in.h libbfd.c bfdio.c bfdwin.c \
-	cache.c reloc.c archures.c linker.c
+LIBBFD_H_FILES = libbfd-in.h libbfd.c bfd.c bfdio.c \
+	archive.c archures.c bfdwin.c cache.c hash.c linker.c opncls.c \
+	reloc.c section.c stabs.c targets.c
 LIBCOFF_H_FILES = libcoff-in.h coffcode.h
 
-# Could really use a "copy-if-change"...
-headers:
-	(cd $(bfddocdir); $(MAKE) protos $(FLAGS_TO_PASS))
-	cp $(bfddocdir)/bfd.h bfd-in2.h-new
-	$(SHELL) $(srcdir)/../move-if-change bfd-in2.h-new $(srcdir)/bfd-in2.h
-	cp $(bfddocdir)/libbfd.h libbfd.h-new
-	$(SHELL) $(srcdir)/../move-if-change libbfd.h-new $(srcdir)/libbfd.h
-	cp $(bfddocdir)/libcoff.h libcoff.h-new
-	$(SHELL) $(srcdir)/../move-if-change libcoff.h-new $(srcdir)/libcoff.h
+headers: stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
 
 # We only rebuild the header files automatically if we have been
 # configured with --enable-maintainer-mode.
 
+REGEN_HEADER = \
+	( \
+	set -e; \
+	echo "$$H_FILES" | sed -f $(srcdir)/doc/header.sed; \
+	for file in $$H_FILES; do \
+	  file="$(srcdir)/$$file"; \
+	  case $$file in \
+	    *-in.h) cat $$file;; \
+	    *)	echo $$file | sed -e 's,.*/,,' -e 's,^,/* Extracted from ,' \
+				-e 's,$$,.  */,'; \
+		$(MKDOC) $$CHEW_FLAGS -f $(srcdir)/doc/proto.str < $$file;; \
+	  esac; \
+	done; \
+	echo "\#ifdef __cplusplus"; \
+	echo "}"; \
+	echo "\#endif"; \
+	echo "\#endif"; \
+	)
+
 $(srcdir)/bfd-in2.h: @MAINT@ stmp-bin2-h ; @true
-stmp-bin2-h: $(BFD_H_FILES) $(BFD64_H_FILES)
-	(cd $(bfddocdir); $(MAKE) $(FLAGS_TO_PASS) bfd.h)
-	cp $(bfddocdir)/bfd.h bfd-in2.h-new
-	$(SHELL) $(srcdir)/../move-if-change bfd-in2.h-new $(srcdir)/bfd-in2.h
-	touch stmp-bin2-h
+stmp-bin2-h: $(BFD_H_FILES) $(BFD64_H_FILES) $(MKDOC)
+	$(AM_V_GEN)H_FILES="$(BFD_H_FILES)" CHEW_FLAGS= ; $(REGEN_HEADER) > bfd-in2.h-new
+	$(AM_V_at)$(SHELL) $(srcdir)/../move-if-change bfd-in2.h-new $(srcdir)/bfd-in2.h
+	$(AM_V_at)touch stmp-bin2-h
 
 $(srcdir)/libbfd.h: @MAINT@ stmp-lbfd-h ; @true
-stmp-lbfd-h: $(LIBBFD_H_FILES)
-	(cd $(bfddocdir); $(MAKE) $(FLAGS_TO_PASS) libbfd.h)
-	cp $(bfddocdir)/libbfd.h libbfd.h-new
-	$(SHELL) $(srcdir)/../move-if-change libbfd.h-new $(srcdir)/libbfd.h
-	touch stmp-lbfd-h
+stmp-lbfd-h: $(LIBBFD_H_FILES) $(MKDOC)
+	$(AM_V_GEN)H_FILES="$(LIBBFD_H_FILES)" CHEW_FLAGS=-i ; $(REGEN_HEADER) > libbfd.h-new
+	$(AM_V_at)$(SHELL) $(srcdir)/../move-if-change libbfd.h-new $(srcdir)/libbfd.h
+	$(AM_V_at)touch stmp-lbfd-h
 
 $(srcdir)/libcoff.h: @MAINT@ stmp-lcoff-h ; @true
-stmp-lcoff-h: $(LIBCOFF_H_FILES)
-	(cd $(bfddocdir); $(MAKE) $(FLAGS_TO_PASS) libcoff.h)
-	cp $(bfddocdir)/libcoff.h libcoff.h-new
-	$(SHELL) $(srcdir)/../move-if-change libcoff.h-new $(srcdir)/libcoff.h
-	touch stmp-lcoff-h
+stmp-lcoff-h: $(LIBCOFF_H_FILES) $(MKDOC)
+	$(AM_V_GEN)H_FILES="$(LIBCOFF_H_FILES)" CHEW_FLAGS=-i ; $(REGEN_HEADER) > libcoff.h-new
+	$(AM_V_at)$(SHELL) $(srcdir)/../move-if-change libcoff.h-new $(srcdir)/libcoff.h
+	$(AM_V_at)touch stmp-lcoff-h
 
-MOSTLYCLEANFILES = ofiles stamp-ofiles
+MOSTLYCLEANFILES += ofiles stamp-ofiles
 
-CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a stamp-lib \
+CLEANFILES += bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 \
 	stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
 
-DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion
+DISTCLEANFILES += $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion
 
 bfdver.h: $(srcdir)/version.h $(srcdir)/development.sh $(srcdir)/Makefile.in
-	@echo "creating $@"
-	@bfd_version=`echo "$(VERSION)" | $(SED) -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
+	$(AM_V_GEN)\
+	bfd_version=`echo "$(VERSION)" | $(SED) -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
 	bfd_version_string="\"$(VERSION)\"" ;\
 	bfd_soversion="$(VERSION)" ;\
 	bfd_version_package="\"$(PKGVERSION)\"" ;\
@@ -989,15 +1009,17 @@ bfdver.h: $(srcdir)/version.h $(srcdir)/
 # Disable -Werror, if it has been enabled, since coffswap.h won't
 # compile with gcc 4.5 and above.
 coff-tic4x.lo: coff-tic4x.c
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(NO_WERROR)
-@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(NO_WERROR)
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
+@am__fastdepCC_FALSE@	$(AM_V_CC)$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
 
 coff-tic54x.lo: coff-tic54x.c
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(NO_WERROR)
-@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(NO_WERROR)
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
+@am__fastdepCC_FALSE@	$(AM_V_CC)$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
+
+include doc/local.mk
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/Makefile.in ./bfd/Makefile.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/Makefile.in	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/Makefile.in	2024-02-01 01:47:13.000000000 +0000
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 #
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -33,7 +33,6 @@
 #
 
 
-
 VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -114,22 +113,31 @@ target_triplet = @target@
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+	$(top_srcdir)/../config/bfd64.m4 \
 	$(top_srcdir)/../config/depstand.m4 \
 	$(top_srcdir)/../config/gettext-sister.m4 \
+	$(top_srcdir)/../config/gettext.m4 \
+	$(top_srcdir)/../config/iconv.m4 \
+	$(top_srcdir)/../config/intlmacosx.m4 \
+	$(top_srcdir)/../config/jobserver.m4 \
 	$(top_srcdir)/../config/largefile.m4 \
 	$(top_srcdir)/../config/lead-dot.m4 \
+	$(top_srcdir)/../config/lib-ld.m4 \
+	$(top_srcdir)/../config/lib-link.m4 \
+	$(top_srcdir)/../config/lib-prefix.m4 \
 	$(top_srcdir)/../config/nls.m4 \
 	$(top_srcdir)/../config/override.m4 \
+	$(top_srcdir)/../config/pkg.m4 \
 	$(top_srcdir)/../config/plugins.m4 \
 	$(top_srcdir)/../config/po.m4 \
 	$(top_srcdir)/../config/progtest.m4 \
-	$(top_srcdir)/../config/stdint.m4 \
-	$(top_srcdir)/../config/zlib.m4 $(top_srcdir)/../libtool.m4 \
+	$(top_srcdir)/../config/zlib.m4 \
+	$(top_srcdir)/../config/zstd.m4 $(top_srcdir)/../libtool.m4 \
 	$(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
 	$(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
-	$(top_srcdir)/bfd.m4 $(top_srcdir)/warning.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/version.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/ax_tls.m4 $(top_srcdir)/bfd.m4 \
+	$(top_srcdir)/warning.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/version.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
@@ -140,16 +148,6 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/.
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = bfd-in3.h po/Makefile.in
 CONFIG_CLEAN_VPATH_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-ARFLAGS = cru
-AM_V_AR = $(am__v_AR_@AM_V@)
-am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
-am__v_AR_0 = @echo "  AR      " $@;
-am__v_AR_1 = 
-libbfd_a_AR = $(AR) $(ARFLAGS)
-libbfd_a_LIBADD =
-am_libbfd_a_OBJECTS =
-libbfd_a_OBJECTS = $(am_libbfd_a_OBJECTS)
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -177,16 +175,15 @@ am__uninstall_files_from_dir = { \
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(bfdlibdir)" \
+am__installdirs = "$(DESTDIR)$(bfdlibdir)" "$(DESTDIR)$(infodir)" \
 	"$(DESTDIR)$(bfdincludedir)"
 LTLIBRARIES = $(bfdlib_LTLIBRARIES) $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 am__objects_1 = archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo \
 	cache.lo coff-bfd.lo compress.lo corefile.lo elf-properties.lo \
-	format.lo hash.lo init.lo libbfd.lo linker.lo merge.lo \
-	opncls.lo reloc.lo section.lo simple.lo stab-syms.lo stabs.lo \
-	syms.lo targets.lo binary.lo ihex.lo srec.lo tekhex.lo \
-	verilog.lo
+	format.lo hash.lo libbfd.lo linker.lo merge.lo opncls.lo \
+	reloc.lo section.lo simple.lo stab-syms.lo stabs.lo syms.lo \
+	targets.lo binary.lo ihex.lo srec.lo tekhex.lo verilog.lo
 am_libbfd_la_OBJECTS = $(am__objects_1)
 libbfd_la_OBJECTS = $(am_libbfd_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -232,8 +229,47 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES) \
-	$(EXTRA_libbfd_la_SOURCES)
+SOURCES = $(libbfd_la_SOURCES) $(EXTRA_libbfd_la_SOURCES)
+AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
+am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
+am__v_DVIPS_0 = @echo "  DVIPS   " $@;
+am__v_DVIPS_1 = 
+AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
+am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
+am__v_MAKEINFO_0 = @echo "  MAKEINFO" $@;
+am__v_MAKEINFO_1 = 
+AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
+am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
+am__v_INFOHTML_0 = @echo "  INFOHTML" $@;
+am__v_INFOHTML_1 = 
+AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
+am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
+am__v_TEXI2DVI_0 = @echo "  TEXI2DVI" $@;
+am__v_TEXI2DVI_1 = 
+AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
+am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
+am__v_TEXI2PDF_0 = @echo "  TEXI2PDF" $@;
+am__v_TEXI2PDF_1 = 
+AM_V_texinfo = $(am__v_texinfo_@AM_V@)
+am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
+am__v_texinfo_0 = -q
+am__v_texinfo_1 = 
+AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
+am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
+am__v_texidevnull_0 = > /dev/null
+am__v_texidevnull_1 = 
+am__dirstamp = $(am__leading_dot)dirstamp
+INFO_DEPS = doc/bfd.info
+am__TEXINFO_TEX_DIR = $(srcdir)
+DVIS = doc/bfd.dvi
+PDFS = doc/bfd.pdf
+PSS = doc/bfd.ps
+HTMLS = doc/bfd.html
+TEXINFOS = doc/bfd.texi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
 RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
 	ctags-recursive dvi-recursive html-recursive info-recursive \
 	install-data-recursive install-dvi-recursive \
@@ -248,7 +284,7 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__bfdinclude_HEADERS_DIST = $(INCDIR)/plugin-api.h bfd.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bfd_stdint.h \
+	$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
 	$(INCDIR)/diagnostics.h $(INCDIR)/bfdlink.h
 HEADERS = $(bfdinclude_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
@@ -289,12 +325,6 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BFD_HOSTPTR_T = @BFD_HOSTPTR_T@
-BFD_HOST_64BIT_LONG = @BFD_HOST_64BIT_LONG@
-BFD_HOST_64BIT_LONG_LONG = @BFD_HOST_64BIT_LONG_LONG@
-BFD_HOST_64_BIT = @BFD_HOST_64_BIT@
-BFD_HOST_64_BIT_DEFINED = @BFD_HOST_64_BIT_DEFINED@
-BFD_HOST_U_64_BIT = @BFD_HOST_U_64_BIT@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -330,8 +360,12 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LARGEFILE_CPPFLAGS = @LARGEFILE_CPPFLAGS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBINTL_DEP = @LIBINTL_DEP@
 LIBM = @LIBM@
@@ -340,6 +374,8 @@ LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -363,6 +399,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKGVERSION = @PKGVERSION@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
 REPORT_BUGS_TEXI = @REPORT_BUGS_TEXI@
@@ -380,6 +419,8 @@ WARN_CFLAGS = @WARN_CFLAGS@
 WARN_CFLAGS_FOR_BUILD = @WARN_CFLAGS_FOR_BUILD@
 WARN_WRITE_STRINGS = @WARN_WRITE_STRINGS@
 XGETTEXT = @XGETTEXT@
+ZSTD_CFLAGS = @ZSTD_CFLAGS@
+ZSTD_LIBS = @ZSTD_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -456,11 +497,17 @@ top_srcdir = @top_srcdir@
 wordsize = @wordsize@
 zlibdir = @zlibdir@
 zlibinc = @zlibinc@
-AUTOMAKE_OPTIONS = no-dist foreign
+AUTOMAKE_OPTIONS = no-dist foreign info-in-builddir no-texinfo.tex
 ACLOCAL_AMFLAGS = -I . -I .. -I ../config
+MOSTLYCLEANFILES = ofiles stamp-ofiles $(MKDOC) doc/*.o doc/*.stamp
+CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 stmp-bin2-h \
+	stmp-lbfd-h stmp-lcoff-h
+DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion \
+	doc/bfd.?? doc/bfd.??? texput.log
+MAINTAINERCLEANFILES = $(DOCFILES) doc/bfd.info
 INCDIR = $(srcdir)/../include
 CSEARCH = -I. -I$(srcdir) -I$(INCDIR)
-SUBDIRS = doc po
+SUBDIRS = po
 bfddocdir = doc
 libbfd_la_LDFLAGS = $(am__append_1) -release `cat libtool-soversion` \
 	@SHARED_LDFLAGS@ $(am__empty)
@@ -468,7 +515,7 @@ libbfd_la_LDFLAGS = $(am__append_1) -rel
 @INSTALL_LIBBFD_FALSE@bfdinclude_HEADERS = $(am__append_2)
 @INSTALL_LIBBFD_TRUE@bfdinclude_HEADERS = $(BFD_H) \
 @INSTALL_LIBBFD_TRUE@	$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
-@INSTALL_LIBBFD_TRUE@	bfd_stdint.h $(INCDIR)/diagnostics.h \
+@INSTALL_LIBBFD_TRUE@	$(INCDIR)/diagnostics.h \
 @INSTALL_LIBBFD_TRUE@	$(INCDIR)/bfdlink.h $(am__append_2)
 @INSTALL_LIBBFD_FALSE@rpath_bfdlibdir = @bfdlibdir@
 @INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libbfd.la
@@ -478,10 +525,10 @@ libbfd_la_LDFLAGS = $(am__append_1) -rel
 # case both are empty.
 ZLIB = @zlibdir@ -lz
 ZLIBINC = @zlibinc@
-AM_CFLAGS = $(WARN_CFLAGS) $(ZLIBINC)
-AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' @HDEFINES@ \
-	@COREFLAG@ @TDEFINES@ $(CSEARCH) $(CSWITCHES) $(HAVEVECS) \
-	@INCINTL@ $(am__empty)
+AM_CFLAGS = $(WARN_CFLAGS) $(ZLIBINC) $(ZSTD_CFLAGS)
+AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' \
+	@LARGEFILE_CPPFLAGS@ @HDEFINES@ @COREFLAG@ @TDEFINES@ \
+	$(CSEARCH) $(CSWITCHES) $(HAVEVECS) @INCINTL@
 @PLUGINS_TRUE@LIBDL = @lt_cv_dlopen_libs@
 
 # bfd.h goes here, for now
@@ -497,7 +544,7 @@ BFD_H = bfd.h
 BFD32_LIBS = \
 	archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo cache.lo \
 	coff-bfd.lo compress.lo corefile.lo elf-properties.lo format.lo \
-	hash.lo init.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo \
+	hash.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo \
 	section.lo simple.lo stab-syms.lo stabs.lo syms.lo targets.lo \
 	binary.lo ihex.lo srec.lo tekhex.lo verilog.lo
 
@@ -505,7 +552,7 @@ BFD64_LIBS = archive64.lo
 BFD32_LIBS_CFILES = \
 	archive.c archures.c bfd.c bfdio.c bfdwin.c cache.c coff-bfd.c \
 	compress.c corefile.c elf-properties.c format.c hash.c \
-	init.c libbfd.c linker.c merge.c opncls.c reloc.c \
+	libbfd.c linker.c merge.c opncls.c reloc.c \
 	section.c simple.c stab-syms.c stabs.c syms.c targets.c \
 	binary.c ihex.c srec.c tekhex.c verilog.c
 
@@ -516,6 +563,7 @@ BFD64_LIBS_CFILES = archive64.c
 ALL_MACHINES = \
 	cpu-aarch64.lo \
 	cpu-alpha.lo \
+	cpu-amdgcn.lo \
 	cpu-arc.lo \
 	cpu-arm.lo \
 	cpu-avr.lo \
@@ -535,23 +583,22 @@ ALL_MACHINES = \
 	cpu-h8300.lo \
 	cpu-hppa.lo \
 	cpu-i386.lo \
-	cpu-iamcu.lo \
-	cpu-l1om.lo \
-	cpu-k1om.lo \
 	cpu-ia64.lo \
+	cpu-iamcu.lo \
 	cpu-ip2k.lo \
 	cpu-iq2000.lo \
+	cpu-kvx.lo \
 	cpu-lm32.lo \
+	cpu-loongarch.lo \
 	cpu-m10200.lo \
 	cpu-m10300.lo \
 	cpu-m32c.lo \
 	cpu-m32r.lo \
 	cpu-m68hc11.lo \
 	cpu-m68hc12.lo \
+	cpu-m68k.lo \
 	cpu-m9s12x.lo \
-	cpu-s12z.lo \
 	cpu-m9s12xg.lo \
-	cpu-m68k.lo \
 	cpu-mcore.lo \
 	cpu-mep.lo \
 	cpu-metag.lo \
@@ -568,13 +615,13 @@ ALL_MACHINES = \
 	cpu-or1k.lo \
 	cpu-pdp11.lo \
 	cpu-pj.lo \
-	cpu-plugin.lo \
 	cpu-powerpc.lo \
 	cpu-pru.lo \
-	cpu-rs6000.lo \
 	cpu-riscv.lo \
 	cpu-rl78.lo \
+	cpu-rs6000.lo \
 	cpu-rx.lo \
+	cpu-s12z.lo \
 	cpu-s390.lo \
 	cpu-score.lo \
 	cpu-sh.lo \
@@ -584,7 +631,6 @@ ALL_MACHINES = \
 	cpu-tic4x.lo \
 	cpu-tic54x.lo \
 	cpu-tic6x.lo \
-	cpu-tic80.lo \
 	cpu-tilegx.lo \
 	cpu-tilepro.lo \
 	cpu-v850.lo \
@@ -592,7 +638,6 @@ ALL_MACHINES = \
 	cpu-vax.lo \
 	cpu-visium.lo \
 	cpu-wasm32.lo \
-	cpu-xc16x.lo \
 	cpu-xgate.lo \
 	cpu-xstormy16.lo \
 	cpu-xtensa.lo \
@@ -602,6 +647,7 @@ ALL_MACHINES = \
 ALL_MACHINES_CFILES = \
 	cpu-aarch64.c \
 	cpu-alpha.c \
+	cpu-amdgcn.c \
 	cpu-arc.c \
 	cpu-arm.c \
 	cpu-avr.c \
@@ -621,23 +667,22 @@ ALL_MACHINES_CFILES = \
 	cpu-h8300.c \
 	cpu-hppa.c \
 	cpu-i386.c \
-	cpu-iamcu.c \
-	cpu-l1om.c \
-	cpu-k1om.c \
 	cpu-ia64.c \
+	cpu-iamcu.c \
 	cpu-ip2k.c \
 	cpu-iq2000.c \
+	cpu-kvx.c \
 	cpu-lm32.c \
+	cpu-loongarch.c \
 	cpu-m10200.c \
 	cpu-m10300.c \
 	cpu-m32c.c \
 	cpu-m32r.c \
 	cpu-m68hc11.c \
 	cpu-m68hc12.c \
+	cpu-m68k.c \
 	cpu-m9s12x.c \
-	cpu-s12z.c \
 	cpu-m9s12xg.c \
-	cpu-m68k.c \
 	cpu-mcore.c \
 	cpu-mep.c \
 	cpu-metag.c \
@@ -649,18 +694,18 @@ ALL_MACHINES_CFILES = \
 	cpu-mt.c \
 	cpu-nds32.c \
 	cpu-nfp.c \
-	cpu-ns32k.c \
 	cpu-nios2.c \
+	cpu-ns32k.c \
 	cpu-or1k.c \
 	cpu-pdp11.c \
 	cpu-pj.c \
-	cpu-plugin.c \
 	cpu-powerpc.c \
 	cpu-pru.c \
-	cpu-rs6000.c \
 	cpu-riscv.c \
 	cpu-rl78.c \
+	cpu-rs6000.c \
 	cpu-rx.c \
+	cpu-s12z.c \
 	cpu-s390.c \
 	cpu-score.c \
 	cpu-sh.c \
@@ -670,7 +715,6 @@ ALL_MACHINES_CFILES = \
 	cpu-tic4x.c \
 	cpu-tic54x.c \
 	cpu-tic6x.c \
-	cpu-tic80.c \
 	cpu-tilegx.c \
 	cpu-tilepro.c \
 	cpu-v850.c \
@@ -678,7 +722,6 @@ ALL_MACHINES_CFILES = \
 	cpu-vax.c \
 	cpu-visium.c \
 	cpu-wasm32.c \
-	cpu-xc16x.c \
 	cpu-xgate.c \
 	cpu-xstormy16.c \
 	cpu-xtensa.c \
@@ -691,7 +734,6 @@ ALL_MACHINES_CFILES = \
 BFD32_BACKENDS = \
 	aout-cris.lo \
 	aout-ns32k.lo \
-	aout-tic30.lo \
 	aout32.lo \
 	cf-i386lynx.lo \
 	coff-go32.lo \
@@ -703,7 +745,6 @@ BFD32_BACKENDS = \
 	coff-tic30.lo \
 	coff-tic4x.lo \
 	coff-tic54x.lo \
-	coff-tic80.lo \
 	coff-z80.lo \
 	coff-z8k.lo \
 	coffgen.lo \
@@ -718,6 +759,7 @@ BFD32_BACKENDS = \
 	elf-m10200.lo \
 	elf-m10300.lo \
 	elf-nacl.lo \
+	elf-sframe.lo \
 	elf-strtab.lo \
 	elf-vxworks.lo \
 	elf.lo \
@@ -741,7 +783,6 @@ BFD32_BACKENDS = \
 	elf32-h8300.lo \
 	elf32-hppa.lo \
 	elf32-i386.lo \
-	elfxx-x86.lo \
 	elf32-ip2k.lo \
 	elf32-iq2000.lo \
 	elf32-lm32.lo \
@@ -751,7 +792,6 @@ BFD32_BACKENDS = \
 	elf32-m68hc12.lo \
 	elf32-m68hc1x.lo \
 	elf32-m68k.lo \
-	elf32-s12z.lo \
 	elf32-mcore.lo \
 	elf32-mep.lo \
 	elf32-metag.lo \
@@ -767,6 +807,7 @@ BFD32_BACKENDS = \
 	elf32-pru.lo \
 	elf32-rl78.lo \
 	elf32-rx.lo \
+	elf32-s12z.lo \
 	elf32-s390.lo \
 	elf32-sh.lo \
 	elf32-sparc.lo \
@@ -778,36 +819,36 @@ BFD32_BACKENDS = \
 	elf32-vax.lo \
 	elf32-visium.lo \
 	elf32-wasm32.lo \
-	elf32-xc16x.lo \
 	elf32-xgate.lo \
 	elf32-xstormy16.lo \
 	elf32-xtensa.lo \
+	elf32-z80.lo \
 	elf32.lo \
 	elflink.lo \
 	elfxx-sparc.lo \
 	elfxx-tilegx.lo \
+	elfxx-x86.lo \
 	i386aout.lo \
 	i386bsd.lo \
 	i386lynx.lo \
 	i386msdos.lo \
-	mach-o.lo \
-	mach-o-i386.lo \
 	mach-o-arm.lo \
+	mach-o-i386.lo \
+	mach-o.lo \
 	ns32knetbsd.lo \
 	pc532-mach.lo \
+	pdb.lo \
 	pdp11.lo \
 	pe-arm-wince.lo \
 	pe-arm.lo \
 	pe-i386.lo \
 	pe-mcore.lo \
-	pe-ppc.lo \
 	pe-sh.lo \
 	pef.lo \
 	pei-arm-wince.lo \
 	pei-arm.lo \
 	pei-i386.lo \
 	pei-mcore.lo \
-	pei-ppc.lo \
 	pei-sh.lo \
 	peigen.lo \
 	plugin.lo \
@@ -821,13 +862,13 @@ BFD32_BACKENDS = \
 	wasm-module.lo \
 	xcofflink.lo \
 	xsym.lo \
+	xtensa-dynconfig.lo \
 	xtensa-isa.lo \
 	xtensa-modules.lo
 
 BFD32_BACKENDS_CFILES = \
 	aout-cris.c \
 	aout-ns32k.c \
-	aout-tic30.c \
 	aout32.c \
 	cf-i386lynx.c \
 	coff-go32.c \
@@ -839,7 +880,6 @@ BFD32_BACKENDS_CFILES = \
 	coff-tic30.c \
 	coff-tic4x.c \
 	coff-tic54x.c \
-	coff-tic80.c \
 	coff-z80.c \
 	coff-z8k.c \
 	coffgen.c \
@@ -854,6 +894,7 @@ BFD32_BACKENDS_CFILES = \
 	elf-m10200.c \
 	elf-m10300.c \
 	elf-nacl.c \
+	elf-sframe.c \
 	elf-strtab.c \
 	elf-vxworks.c \
 	elf.c \
@@ -877,7 +918,6 @@ BFD32_BACKENDS_CFILES = \
 	elf32-h8300.c \
 	elf32-hppa.c \
 	elf32-i386.c \
-	elfxx-x86.c \
 	elf32-ip2k.c \
 	elf32-iq2000.c \
 	elf32-lm32.c \
@@ -887,7 +927,6 @@ BFD32_BACKENDS_CFILES = \
 	elf32-m68hc12.c \
 	elf32-m68hc1x.c \
 	elf32-m68k.c \
-	elf32-s12z.c \
 	elf32-mcore.c \
 	elf32-mep.c \
 	elf32-metag.c \
@@ -903,6 +942,7 @@ BFD32_BACKENDS_CFILES = \
 	elf32-pru.c \
 	elf32-rl78.c \
 	elf32-rx.c \
+	elf32-s12z.c \
 	elf32-s390.c \
 	elf32-sh.c \
 	elf32-sparc.c \
@@ -914,36 +954,36 @@ BFD32_BACKENDS_CFILES = \
 	elf32-vax.c \
 	elf32-visium.c \
 	elf32-wasm32.c \
-	elf32-xc16x.c \
 	elf32-xgate.c \
 	elf32-xstormy16.c \
 	elf32-xtensa.c \
+	elf32-z80.c \
 	elf32.c \
 	elflink.c \
 	elfxx-sparc.c \
 	elfxx-tilegx.c \
+	elfxx-x86.c \
 	i386aout.c \
 	i386bsd.c \
 	i386lynx.c \
 	i386msdos.c \
-	mach-o.c \
-	mach-o-i386.c \
 	mach-o-arm.c \
+	mach-o-i386.c \
+	mach-o.c \
 	ns32knetbsd.c \
 	pc532-mach.c \
+	pdb.c \
 	pdp11.c \
 	pe-arm-wince.c \
 	pe-arm.c \
 	pe-i386.c \
 	pe-mcore.c \
-	pe-ppc.c \
 	pe-sh.c \
 	pef.c \
 	pei-arm-wince.c \
 	pei-arm.c \
 	pei-i386.c \
 	pei-mcore.c \
-	pei-ppc.c \
 	pei-sh.c \
 	plugin.c \
 	ppcboot.c \
@@ -956,6 +996,7 @@ BFD32_BACKENDS_CFILES = \
 	wasm-module.c \
 	xcofflink.c \
 	xsym.c \
+	xtensa-dynconfig.c \
 	xtensa-isa.c \
 	xtensa-modules.c
 
@@ -966,45 +1007,59 @@ BFD32_BACKENDS_CFILES = \
 # elf32-ia64.c requires a 64-bit bfd_vma, and hence can not be put in
 # BFD32_BACKENDS.
 BFD64_BACKENDS = \
-	elf32-aarch64.lo \
-	elf64-aarch64.lo \
-	elfxx-aarch64.lo \
 	aix5ppc-core.lo \
 	aout64.lo \
 	coff-alpha.lo \
 	coff-x86_64.lo \
 	coff64-rs6000.lo \
+	elf32-aarch64.lo \
 	elf32-ia64.lo \
+	elf32-kvx.lo \
+	elf32-loongarch.lo \
 	elf32-mips.lo \
+	elf32-riscv.lo \
 	elf32-score.lo \
 	elf32-score7.lo \
+	elf64-aarch64.lo \
 	elf64-alpha.lo \
+	elf64-amdgcn.lo \
+	elf64-bpf.lo \
 	elf64-gen.lo \
 	elf64-hppa.lo \
-	elf64-ia64.lo \
 	elf64-ia64-vms.lo \
-	elfxx-ia64.lo \
-	elfn32-mips.lo \
+	elf64-ia64.lo \
+	elf64-kvx.lo \
+	elf64-loongarch.lo \
 	elf64-mips.lo \
-	elfxx-mips.lo \
 	elf64-mmix.lo \
 	elf64-nfp.lo \
 	elf64-ppc.lo \
-	elf32-riscv.lo \
 	elf64-riscv.lo \
-	elfxx-riscv.lo \
 	elf64-s390.lo \
 	elf64-sparc.lo \
 	elf64-tilegx.lo \
 	elf64-x86-64.lo \
-	elfxx-x86.lo \
-	elf64-bpf.lo \
 	elf64.lo \
+	elfn32-mips.lo \
+	elfxx-aarch64.lo \
+	elfxx-ia64.lo \
+	elfxx-kvx.lo \
+	elfxx-loongarch.lo \
+	elfxx-mips.lo \
+	elfxx-riscv.lo \
+	elfxx-x86.lo \
 	mach-o-aarch64.lo \
 	mach-o-x86-64.lo \
 	mmo.lo \
+	pe-aarch64.lo \
+	pe-aarch64igen.lo \
+	pe-loongarch64igen.lo \
+	pe-riscv64igen.lo \
 	pe-x86_64.lo \
+	pei-aarch64.lo \
 	pei-ia64.lo \
+	pei-loongarch64.lo \
+	pei-riscv64.lo \
 	pei-x86_64.lo \
 	pepigen.lo \
 	pex64igen.lo \
@@ -1020,6 +1075,8 @@ BFD64_BACKENDS_CFILES = \
 	elf32-score.c \
 	elf32-score7.c \
 	elf64-alpha.c \
+	elf64-amdgcn.c \
+	elf64-bpf.c \
 	elf64-gen.c \
 	elf64-hppa.c \
 	elf64-ia64-vms.c \
@@ -1031,24 +1088,28 @@ BFD64_BACKENDS_CFILES = \
 	elf64-sparc.c \
 	elf64-tilegx.c \
 	elf64-x86-64.c \
-	elfxx-x86.c \
-	elf64-bpf.c \
 	elf64.c \
 	elfn32-mips.c \
 	elfxx-aarch64.c \
 	elfxx-ia64.c \
+	elfxx-kvx.c \
+	elfxx-loongarch.c \
 	elfxx-mips.c \
 	elfxx-riscv.c \
+	elfxx-x86.c \
 	mach-o-aarch64.c \
 	mach-o-x86-64.c \
 	mmo.c \
+	pe-aarch64.c \
 	pe-x86_64.c \
+	pei-aarch64.c \
 	pei-ia64.c \
+	pei-loongarch64.c \
+	pei-riscv64.c \
 	pei-x86_64.c \
 	vms-alpha.c
 
 OPTIONAL_BACKENDS = \
-	aix386-core.lo \
 	cisco-core.lo \
 	hpux-core.lo \
 	irix-core.lo \
@@ -1056,11 +1117,9 @@ OPTIONAL_BACKENDS = \
 	netbsd-core.lo \
 	osf-core.lo \
 	rs6000-core.lo \
-	sco5-core.lo \
 	trad-core.lo
 
 OPTIONAL_BACKENDS_CFILES = \
-	aix386-core.c \
 	cisco-core.c \
 	hpux-core.c \
 	irix-core.c \
@@ -1068,7 +1127,6 @@ OPTIONAL_BACKENDS_CFILES = \
 	netbsd-core.c \
 	osf-core.c \
 	rs6000-core.c \
-	sco5-core.c \
 	trad-core.c
 
 
@@ -1099,15 +1157,18 @@ SOURCE_CFILES = \
 
 BUILD_CFILES = \
 	elf32-aarch64.c elf64-aarch64.c \
+	elf32-kvx.c elf64-kvx.c \
 	elf32-ia64.c elf64-ia64.c \
+	elf32-loongarch.c elf64-loongarch.c \
 	elf32-riscv.c elf64-riscv.c \
-	peigen.c pepigen.c pex64igen.c
+	peigen.c pepigen.c pex64igen.c pe-aarch64igen.c pe-loongarch64igen.c \
+	pe-riscv64igen.c
 
 CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
 SOURCE_HFILES = \
 	aout-target.h aoutx.h arc-got.h arc-plt.h \
 	coff-arm.h coff-bfd.h coffcode.h coffswap.h \
-	cpu-aarch64.h cpu-arm.h cpu-h8300.h cpu-m68k.h \
+	cpu-aarch64.h cpu-arm.h cpu-h8300.h cpu-m68k.h cpu-riscv.h \
 	ecoff-bfd.h ecoffswap.h \
 	elf32-arm.h elf32-avr.h elf32-bfin.h elf32-cr16.h elf32-csky.h \
 	elf32-dlx.h elf32-hppa.h elf32-m68hc1x.h elf32-m68k.h \
@@ -1118,7 +1179,7 @@ SOURCE_HFILES = \
 	elf-bfd.h elfcode.h elfcore.h elf-hppa.h elf-linker-x86.h \
 	elf-linux-core.h elf-nacl.h elf-s390.h elf-vxworks.h \
 	elfxx-aarch64.h elfxx-ia64.h elfxx-mips.h elfxx-riscv.h \
-	elfxx-sparc.h elfxx-tilegx.h elfxx-x86.h \
+	elfxx-sparc.h elfxx-tilegx.h elfxx-x86.h elfxx-loongarch.h \
 	genlink.h go32stub.h \
 	libaout.h libbfd.h libcoff.h libecoff.h libhppa.h \
 	libpei.h libxcoff.h \
@@ -1131,12 +1192,14 @@ SOURCE_HFILES = \
 	xcofflink.h xsym.h
 
 BUILD_HFILES = \
-	bfdver.h elf32-target.h elf64-target.h targmatch.h bfd_stdint.h
+	bfdver.h elf32-target.h elf64-target.h targmatch.h
 
 
 # Ensure they are built early:
-BUILT_SOURCES = $(BUILD_HFILES)
+BUILT_SOURCES = $(BUILD_HFILES) @MAINT@ $(BUILD_CFILES)
 HFILES = $(SOURCE_HFILES) $(BUILD_HFILES)
+BFD_H_DEPS = $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
+LOCAL_H_DEPS = libbfd.h sysdep.h config.h
 SRC_POTFILES = $(SOURCE_CFILES) $(SOURCE_HFILES)
 BLD_POTFILES = $(BUILD_CFILES) $(BUILD_HFILES)
 
@@ -1153,40 +1216,129 @@ OFILES = $(BFD_BACKENDS) $(BFD_MACHINES)
 # dependency tracking fragments are picked up in the Makefile.
 libbfd_la_SOURCES = $(BFD32_LIBS_CFILES)
 EXTRA_libbfd_la_SOURCES = $(CFILES)
-libbfd_la_DEPENDENCIES = $(OFILES) ofiles
-libbfd_la_LIBADD = `cat ofiles` @SHARED_LIBADD@ $(LIBDL) $(ZLIB)
-
-# libtool will build .libs/libbfd.a.  We create libbfd.a in the build
-# directory so that we don't have to convert all the programs that use
-# libbfd.a simultaneously.  This is a hack which should be removed if
-# everything else starts using libtool.  FIXME.
-noinst_LIBRARIES = libbfd.a
-libbfd_a_SOURCES = 
-BFD_H_DEPS = $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
-LOCAL_H_DEPS = libbfd.h sysdep.h config.h bfd_stdint.h
-BFD_H_FILES = bfd-in.h init.c opncls.c libbfd.c \
-	bfdio.c bfdwin.c section.c archures.c reloc.c \
-	syms.c bfd.c archive.c corefile.c targets.c format.c \
-	linker.c simple.c compress.c
+libbfd_la_DEPENDENCIES = $(OFILES) ofiles ../libsframe/libsframe.la
+libbfd_la_LIBADD = `cat ofiles` @SHARED_LIBADD@ $(LIBDL) $(ZLIB) $(ZSTD_LIBS) ../libsframe/libsframe.la
+BFD_H_FILES = bfd-in.h libbfd.c hash.c section.c syms.c \
+	archive.c archures.c bfd.c bfdio.c bfdwin.c \
+	cache.c compress.c corefile.c format.c linker.c opncls.c \
+	reloc.c simple.c stab-syms.c stabs.c targets.c
 
 BFD64_H_FILES = archive64.c
-LIBBFD_H_FILES = libbfd-in.h libbfd.c bfdio.c bfdwin.c \
-	cache.c reloc.c archures.c linker.c
+LIBBFD_H_FILES = libbfd-in.h libbfd.c bfd.c bfdio.c \
+	archive.c archures.c bfdwin.c cache.c hash.c linker.c opncls.c \
+	reloc.c section.c stabs.c targets.c
 
 LIBCOFF_H_FILES = libcoff-in.h coffcode.h
-MOSTLYCLEANFILES = ofiles stamp-ofiles
-CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a stamp-lib \
-	stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
 
-DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion
+# We only rebuild the header files automatically if we have been
+# configured with --enable-maintainer-mode.
+REGEN_HEADER = \
+	( \
+	set -e; \
+	echo "$$H_FILES" | sed -f $(srcdir)/doc/header.sed; \
+	for file in $$H_FILES; do \
+	  file="$(srcdir)/$$file"; \
+	  case $$file in \
+	    *-in.h) cat $$file;; \
+	    *)	echo $$file | sed -e 's,.*/,,' -e 's,^,/* Extracted from ,' \
+				-e 's,$$,.  */,'; \
+		$(MKDOC) $$CHEW_FLAGS -f $(srcdir)/doc/proto.str < $$file;; \
+	  esac; \
+	done; \
+	echo "\#ifdef __cplusplus"; \
+	echo "}"; \
+	echo "\#endif"; \
+	echo "\#endif"; \
+	)
+
+DOCFILES = \
+	doc/aoutx.texi \
+	doc/archive.texi \
+	doc/archures.texi \
+	doc/bfdio.texi \
+	doc/bfdt.texi \
+	doc/bfdver.texi \
+	doc/bfdwin.texi \
+	doc/cache.texi \
+	doc/coffcode.texi \
+	doc/corefile.texi \
+	doc/elfcode.texi \
+	doc/elf.texi \
+	doc/format.texi \
+	doc/hash.texi \
+	doc/libbfd.texi \
+	doc/linker.texi \
+	doc/mmo.texi \
+	doc/opncls.texi \
+	doc/reloc.texi \
+	doc/section.texi \
+	doc/syms.texi \
+	doc/targets.texi
+
+
+# SRCDOC, SRCPROT, SRCIPROT only used to sidestep Sun Make bug in interaction
+# between VPATH and suffix rules.  If you use GNU Make, perhaps other Makes,
+# you don't need these three:
+SRCDOC = \
+	$(srcdir)/aoutx.h $(srcdir)/archive.c \
+	$(srcdir)/archures.c $(srcdir)/bfd.c \
+	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+	$(srcdir)/cache.c $(srcdir)/coffcode.h \
+	$(srcdir)/corefile.c $(srcdir)/elf.c \
+	$(srcdir)/elfcode.h $(srcdir)/format.c \
+	$(srcdir)/libbfd.c $(srcdir)/opncls.c \
+	$(srcdir)/reloc.c $(srcdir)/section.c \
+	$(srcdir)/syms.c $(srcdir)/targets.c \
+	$(srcdir)/hash.c $(srcdir)/linker.c \
+	$(srcdir)/mmo.c
+
+SRCPROT = $(srcdir)/archive.c $(srcdir)/archures.c \
+	$(srcdir)/bfd.c $(srcdir)/coffcode.h $(srcdir)/corefile.c \
+	$(srcdir)/format.c $(srcdir)/libbfd.c \
+	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+	$(srcdir)/opncls.c $(srcdir)/reloc.c \
+	$(srcdir)/section.c $(srcdir)/syms.c \
+	$(srcdir)/targets.c
+
+SRCIPROT = $(srcdir)/cache.c $(srcdir)/libbfd.c \
+	$(srcdir)/bfdio.c $(srcdir)/bfdwin.c \
+	$(srcdir)/reloc.c $(srcdir)/cpu-h8300.c \
+	$(srcdir)/archures.c
+
+TEXIDIR = $(srcdir)/../texinfo/fsf
+info_TEXINFOS = doc/bfd.texi
+doc_bfd_TEXINFOS = $(DOCFILES) doc/bfdsumm.texi
+AM_MAKEINFOFLAGS = --no-split -I "$(srcdir)/doc" -I doc
+TEXI2DVI = texi2dvi -I "$(srcdir)/doc" -I doc
+MKDOC = doc/chew$(EXEEXT_FOR_BUILD)
+
+# We can't replace these rules with an implicit rule, because
+# makes without VPATH support couldn't find the .h files in `..'.
+
+# We do not depend on chew directly so that we can distribute the info
+# files, and permit people to rebuild them, without requiring the makeinfo
+# program.  If somebody tries to rebuild info, but none of the .texi files
+# have changed, then nothing will be rebuilt.
+REGEN_TEXI = \
+	( \
+	set -e; \
+	$(MKDOC) -f $(srcdir)/doc/doc.str < $< > $@.tmp; \
+	texi=$@; \
+	texi=$${texi%.stamp}.texi; \
+	test -e $$texi || test ! -f $(srcdir)/$$texi || $(LN_S) $(srcdir)/$$texi .; \
+	$(SHELL) $(srcdir)/../move-if-change $@.tmp $$texi; \
+	touch $@; \
+	)
+
+noinst_TEXINFOS = doc/bfdint.texi
 all: $(BUILT_SOURCES) config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
+.SUFFIXES: .c .dvi .lo .o .obj .ps
 am--refresh: Makefile
 	@:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/doc/local.mk $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -1208,6 +1360,7 @@ Makefile: $(srcdir)/Makefile.in $(top_bu
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
 	esac;
+$(srcdir)/doc/local.mk $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
@@ -1237,9 +1390,6 @@ bfd-in3.h: $(top_builddir)/config.status
 po/Makefile.in: $(top_builddir)/config.status $(top_srcdir)/po/Make-in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-
 install-bfdlibLTLIBRARIES: $(bfdlib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
 	@list='$(bfdlib_LTLIBRARIES)'; test -n "$(bfdlibdir)" || list=; \
@@ -1295,11 +1445,9 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aix386-core.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aix5ppc-core.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-cris.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-ns32k.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-tic30.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout32.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/archive.Plo@am__quote@
@@ -1323,7 +1471,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic30.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic4x.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic54x.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic80.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-x86_64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-z80.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-z8k.Plo@am__quote@
@@ -1334,6 +1481,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/corefile.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-aarch64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-alpha.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-amdgcn.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-avr.Plo@am__quote@
@@ -1357,9 +1505,9 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-iamcu.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-ip2k.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-iq2000.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-k1om.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-l1om.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-kvx.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-lm32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-loongarch.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m10200.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m10300.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m32c.Plo@am__quote@
@@ -1385,7 +1533,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-or1k.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pdp11.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pj.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-plugin.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-powerpc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pru.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-riscv.Plo@am__quote@
@@ -1402,7 +1549,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic4x.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic54x.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic6x.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic80.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tilegx.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tilepro.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-v850.Plo@am__quote@
@@ -1410,7 +1556,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-vax.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-visium.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-wasm32.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-xc16x.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-xgate.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-xstormy16.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-xtensa.Plo@am__quote@
@@ -1427,6 +1572,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-m10300.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-nacl.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-properties.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-sframe.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-strtab.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-vxworks.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf.Plo@am__quote@
@@ -1454,7 +1600,9 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-ia64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-ip2k.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-iq2000.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-kvx.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-lm32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-loongarch.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m32c.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m32r.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m68hc11.Plo@am__quote@
@@ -1492,18 +1640,21 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-vax.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-visium.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-wasm32.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xc16x.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xgate.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xstormy16.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xtensa.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-z80.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-aarch64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-alpha.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-amdgcn.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-bpf.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-gen.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-hppa.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ia64-vms.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ia64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-kvx.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-loongarch.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mips.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mmix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-nfp.Plo@am__quote@
@@ -1518,6 +1669,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfn32-mips.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfxx-aarch64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfxx-ia64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfxx-kvx.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfxx-loongarch.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfxx-mips.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfxx-riscv.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfxx-sparc.Plo@am__quote@
@@ -1531,7 +1684,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386lynx.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386msdos.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ihex.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/irix-core.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbfd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linker.Plo@am__quote@
@@ -1548,21 +1700,27 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opncls.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osf-core.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pc532-mach.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdb.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdp11.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-aarch64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-aarch64igen.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-arm-wince.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-arm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-i386.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-loongarch64igen.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-mcore.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-ppc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-riscv64igen.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-sh.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-x86_64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pef.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-aarch64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-arm-wince.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-arm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-i386.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-ia64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-loongarch64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-mcore.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-ppc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-riscv64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-sh.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-x86_64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peigen.Plo@am__quote@
@@ -1573,7 +1731,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reloc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reloc16.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs6000-core.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sco5-core.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/section.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/som.Plo@am__quote@
@@ -1593,6 +1750,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wasm-module.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xcofflink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsym.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtensa-dynconfig.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtensa-isa.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtensa-modules.Plo@am__quote@
 
@@ -1625,6 +1783,143 @@ clean-libtool:
 
 distclean-libtool:
 	-rm -f libtool config.lt
+doc/$(am__dirstamp):
+	@$(MKDIR_P) doc
+	@: > doc/$(am__dirstamp)
+
+doc/bfd.info: doc/bfd.texi $(doc_bfd_TEXINFOS)
+	@test -f doc/$(am__dirstamp) || $(MAKE) $(AM_MAKEFLAGS) doc/$(am__dirstamp)
+	$(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+	rm -rf $$backupdir && mkdir $$backupdir && \
+	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+	  done; \
+	else :; fi && \
+	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \
+	 -o $@ `test -f 'doc/bfd.texi' || echo '$(srcdir)/'`doc/bfd.texi; \
+	then \
+	  rc=0; \
+	else \
+	  rc=$$?; \
+	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+	fi; \
+	rm -rf $$backupdir; exit $$rc
+
+doc/bfd.dvi: doc/bfd.texi $(doc_bfd_TEXINFOS) doc/$(am__dirstamp)
+	$(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \
+	$(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
+	`test -f 'doc/bfd.texi' || echo '$(srcdir)/'`doc/bfd.texi
+
+doc/bfd.pdf: doc/bfd.texi $(doc_bfd_TEXINFOS) doc/$(am__dirstamp)
+	$(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \
+	$(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
+	`test -f 'doc/bfd.texi' || echo '$(srcdir)/'`doc/bfd.texi
+
+doc/bfd.html: doc/bfd.texi $(doc_bfd_TEXINFOS) doc/$(am__dirstamp)
+	$(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
+	$(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \
+	 -o $(@:.html=.htp) `test -f 'doc/bfd.texi' || echo '$(srcdir)/'`doc/bfd.texi; \
+	then \
+	  rm -rf $@ && mv $(@:.html=.htp) $@; \
+	else \
+	  rm -rf $(@:.html=.htp); exit 1; \
+	fi
+.dvi.ps:
+	$(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	$(DVIPS) $(AM_V_texinfo) -o $@ $<
+
+uninstall-dvi-am:
+	@$(NORMAL_UNINSTALL)
+	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+	done
+
+uninstall-html-am:
+	@$(NORMAL_UNINSTALL)
+	@list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+	  rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+	done
+
+uninstall-info-am:
+	@$(PRE_UNINSTALL)
+	@if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
+	  list='$(INFO_DEPS)'; \
+	  for file in $$list; do \
+	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
+	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+	    if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+	    then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+	  done; \
+	else :; fi
+	@$(NORMAL_UNINSTALL)
+	@list='$(INFO_DEPS)'; \
+	for file in $$list; do \
+	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
+	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+	  (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+	     echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+	   else :; fi); \
+	done
+
+uninstall-pdf-am:
+	@$(NORMAL_UNINSTALL)
+	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+	done
+
+uninstall-ps-am:
+	@$(NORMAL_UNINSTALL)
+	@list='$(PSS)'; test -n "$(psdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(psdir)/$$f"; \
+	done
+
+dist-info: $(INFO_DEPS)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	list='$(INFO_DEPS)'; \
+	for base in $$list; do \
+	  case $$base in \
+	    $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+	  esac; \
+	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
+	  base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+	  for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+	    if test -f $$file; then \
+	      relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+	      test -f "$(distdir)/$$relfile" || \
+		cp -p $$file "$(distdir)/$$relfile"; \
+	    else :; fi; \
+	  done; \
+	done
+
+mostlyclean-aminfo:
+	-rm -rf doc/bfd.t2d doc/bfd.t2p
+
+clean-aminfo:
+	-test -z "doc/bfd.dvi doc/bfd.pdf doc/bfd.ps doc/bfd.html" \
+	|| rm -rf doc/bfd.dvi doc/bfd.pdf doc/bfd.ps doc/bfd.html
+
+maintainer-clean-aminfo:
+	@list='$(INFO_DEPS)'; for i in $$list; do \
+	  i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+	done
 install-bfdincludeHEADERS: $(bfdinclude_HEADERS)
 	@$(NORMAL_INSTALL)
 	@list='$(bfdinclude_HEADERS)'; test -n "$(bfdincludedir)" || list=; \
@@ -1755,10 +2050,10 @@ distclean-tags:
 check-am: all-am
 check: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) config.h
+all-am: Makefile $(INFO_DEPS) $(LTLIBRARIES) $(HEADERS) config.h
 installdirs: installdirs-recursive
 installdirs-am:
-	for dir in "$(DESTDIR)$(bfdlibdir)" "$(DESTDIR)$(bfdincludedir)"; do \
+	for dir in "$(DESTDIR)$(bfdlibdir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(bfdincludedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: $(BUILT_SOURCES)
@@ -1790,16 +2085,18 @@ clean-generic:
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f doc/$(am__dirstamp)
 	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
 clean: clean-recursive
 
-clean-am: clean-bfdlibLTLIBRARIES clean-generic clean-libtool \
-	clean-noinstLIBRARIES clean-noinstLTLIBRARIES mostlyclean-am
+clean-am: clean-aminfo clean-bfdlibLTLIBRARIES clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES mostlyclean-am
 
 distclean: distclean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
@@ -1810,42 +2107,134 @@ distclean-am: clean-am distclean-compile
 
 dvi: dvi-recursive
 
-dvi-am:
+dvi-am: $(DVIS)
 
 html: html-recursive
 
-html-am:
+html-am: $(HTMLS) html-local
 
 info: info-recursive
 
-info-am:
+info-am: $(INFO_DEPS)
 
-install-data-am: install-bfdincludeHEADERS install-bfdlibLTLIBRARIES
+install-data-am: install-bfdincludeHEADERS install-bfdlibLTLIBRARIES \
+	install-info-am
 
 install-dvi: install-dvi-recursive
 
-install-dvi-am:
-
+install-dvi-am: $(DVIS)
+	@$(NORMAL_INSTALL)
+	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+	done
 install-exec-am:
 
 install-html: install-html-recursive
 
-install-html-am:
-
+install-html-am: $(HTMLS)
+	@$(NORMAL_INSTALL)
+	@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  $(am__strip_dir) \
+	  d2=$$d$$p; \
+	  if test -d "$$d2"; then \
+	    echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+	    $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+	    echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+	    $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+	  else \
+	    list2="$$list2 $$d2"; \
+	  fi; \
+	done; \
+	test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+	done; }
 install-info: install-info-recursive
 
-install-info-am:
-
+install-info-am: $(INFO_DEPS)
+	@$(NORMAL_INSTALL)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
+	fi; \
+	for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	  esac; \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+	               $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+	    if test -f $$ifile; then \
+	      echo "$$ifile"; \
+	    else : ; fi; \
+	  done; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+	@$(POST_INSTALL)
+	@if $(am__can_run_installinfo); then \
+	  list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+	  for file in $$list; do \
+	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
+	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+	  done; \
+	else : ; fi
 install-man:
 
 install-pdf: install-pdf-recursive
 
-install-pdf-am:
-
+install-pdf-am: $(PDFS)
+	@$(NORMAL_INSTALL)
+	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
 install-ps: install-ps-recursive
 
-install-ps-am:
-
+install-ps-am: $(PSS)
+	@$(NORMAL_INSTALL)
+	@list='$(PSS)'; test -n "$(psdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
 installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
@@ -1853,55 +2242,67 @@ maintainer-clean: maintainer-clean-recur
 	-rm -rf $(top_srcdir)/autom4te.cache
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+	maintainer-clean-generic
 
 mostlyclean: mostlyclean-recursive
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
+mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool
 
 pdf: pdf-recursive
 
-pdf-am:
+pdf-am: $(PDFS)
 
 ps: ps-recursive
 
-ps-am:
+ps-am: $(PSS)
 
-uninstall-am: uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES
+uninstall-am: uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES \
+	uninstall-dvi-am uninstall-html-am uninstall-info-am \
+	uninstall-pdf-am uninstall-ps-am
 
 .MAKE: $(am__recursive_targets) all check install install-am \
 	install-strip
 
 .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
-	am--refresh check check-am clean clean-bfdlibLTLIBRARIES \
-	clean-cscope clean-generic clean-libtool clean-noinstLIBRARIES \
-	clean-noinstLTLIBRARIES cscope cscopelist-am ctags ctags-am \
-	distclean distclean-compile distclean-generic distclean-hdr \
-	distclean-libtool distclean-tags dvi dvi-am html html-am info \
-	info-am install install-am install-bfdincludeHEADERS \
+	am--refresh check check-am clean clean-aminfo \
+	clean-bfdlibLTLIBRARIES clean-cscope clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscope cscopelist-am \
+	ctags ctags-am dist-info distclean distclean-compile \
+	distclean-generic distclean-hdr distclean-libtool \
+	distclean-tags dvi dvi-am html html-am html-local info info-am \
+	install install-am install-bfdincludeHEADERS \
 	install-bfdlibLTLIBRARIES install-data install-data-am \
 	install-dvi install-dvi-am install-exec install-exec-am \
 	install-html install-html-am install-info install-info-am \
 	install-man install-pdf install-pdf-am install-ps \
 	install-ps-am install-strip installcheck installcheck-am \
 	installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-am uninstall uninstall-am \
-	uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES
+	maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
+	mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-bfdincludeHEADERS \
+	uninstall-bfdlibLTLIBRARIES uninstall-dvi-am uninstall-html-am \
+	uninstall-info-am uninstall-pdf-am uninstall-ps-am
 
 .PRECIOUS: Makefile
 
+$(BFD32_LIBS) \
+ $(BFD64_LIBS) \
+ $(ALL_MACHINES) \
+ $(BFD32_BACKENDS) \
+ $(BFD64_BACKENDS) \
+ $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
 
-po/SRC-POTFILES.in: @MAINT@ Makefile $(SRC_POTFILES)
+po/SRC-POTFILES.in: @MAINT@ Makefile
 	for file in $(SRC_POTFILES); do echo $$file; done \
-	  | LC_ALL=C sort > tmp.src \
+	  | LC_ALL=C sort | uniq > tmp.src \
 	  && mv tmp.src $(srcdir)/po/SRC-POTFILES.in
 
-po/BLD-POTFILES.in: @MAINT@ Makefile $(BLD_POTFILES)
+po/BLD-POTFILES.in: @MAINT@ Makefile
 	for file in $(BLD_POTFILES); do echo $$file; done \
-	  | LC_ALL=C sort > tmp.bld \
+	  | LC_ALL=C sort | uniq > tmp.bld \
 	  && mv tmp.bld $(srcdir)/po/BLD-POTFILES.in
 
 all diststuff: info
@@ -1921,113 +2322,107 @@ stamp-ofiles: Makefile
 
 ofiles: stamp-ofiles ; @true
 
-stamp-lib: libbfd.la
-	libtooldir=`$(LIBTOOL) --config | $(SED) -n -e 's/^objdir=//p'`; \
-	if [ -f $$libtooldir/libbfd.a ]; then \
-	  cp $$libtooldir/libbfd.a libbfd.tmp; \
-	  $(RANLIB) libbfd.tmp; \
-	  $(SHELL) $(srcdir)/../move-if-change libbfd.tmp libbfd.a; \
-	else true; fi
-	touch stamp-lib
-
-libbfd.a: stamp-lib ; @true
-
 # This file holds an array associating configuration triplets and
 # vector names.  It is built from config.bfd.  It is not compiled by
 # itself, but is included by targets.c.
 targmatch.h: config.bfd targmatch.sed
-	rm -f targmatch.h
-	$(SED) -f $(srcdir)/targmatch.sed < $(srcdir)/config.bfd > targmatch.new
-	mv -f targmatch.new targmatch.h
+	$(AM_V_at)rm -f targmatch.new
+	$(AM_V_GEN)$(SED) -f $(srcdir)/targmatch.sed < $(srcdir)/config.bfd > targmatch.new
+	$(AM_V_at)mv -f targmatch.new targmatch.h
 
 # When compiling archures.c and targets.c, supply the default target
 # info from configure.
 
 targets.lo: targets.c Makefile
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c
+@am__fastdepCC_TRUE@	$(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='targets.c' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c
+@am__fastdepCC_FALSE@	$(AM_V_CC)$(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c
 
 archures.lo: archures.c Makefile
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c
+@am__fastdepCC_TRUE@	$(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='archures.c' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c
+@am__fastdepCC_FALSE@	$(AM_V_CC)$(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c
 
 dwarf2.lo: dwarf2.c Makefile
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dwarf2.c' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
+@am__fastdepCC_FALSE@	$(AM_V_CC)$(LTCOMPILE) -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
 
 elf32-target.h : elfxx-target.h
-	rm -f elf32-target.h
-	$(SED) -e s/NN/32/g < $(srcdir)/elfxx-target.h > elf32-target.new
-	mv -f elf32-target.new elf32-target.h
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< > $@
 
 elf64-target.h : elfxx-target.h
-	rm -f elf64-target.h
-	$(SED) -e s/NN/64/g < $(srcdir)/elfxx-target.h > elf64-target.new
-	mv -f elf64-target.new elf64-target.h
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< > $@
 
 elf32-aarch64.c : elfnn-aarch64.c
-	rm -f elf32-aarch64.c
-	echo "#line 1 \"$(srcdir)/elfnn-aarch64.c\"" > elf32-aarch64.new
-	$(SED) -e s/NN/32/g < $(srcdir)/elfnn-aarch64.c >> elf32-aarch64.new
-	mv -f elf32-aarch64.new elf32-aarch64.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
 
 elf64-aarch64.c : elfnn-aarch64.c
-	rm -f elf64-aarch64.c
-	echo "#line 1 \"$(srcdir)/elfnn-aarch64.c\"" > elf64-aarch64.new
-	$(SED) -e s/NN/64/g < $(srcdir)/elfnn-aarch64.c >> elf64-aarch64.new
-	mv -f elf64-aarch64.new elf64-aarch64.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
 
 elf32-ia64.c : elfnn-ia64.c
-	rm -f elf32-ia64.c
-	$(SED) -e s/NN/32/g < $(srcdir)/elfnn-ia64.c > elf32-ia64.new
-	mv -f elf32-ia64.new elf32-ia64.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
 
 elf64-ia64.c : elfnn-ia64.c
-	rm -f elf64-ia64.c
-	$(SED) -e s/NN/64/g < $(srcdir)/elfnn-ia64.c > elf64-ia64.new
-	mv -f elf64-ia64.new elf64-ia64.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
+
+elf32-kvx.c : elfnn-kvx.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
+
+elf64-kvx.c : elfnn-kvx.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
+
+elf32-loongarch.c : elfnn-loongarch.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
+
+elf64-loongarch.c : elfnn-loongarch.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
 
 elf32-riscv.c : elfnn-riscv.c
-	rm -f elf32-riscv.c
-	echo "#line 1 \"$(srcdir)/elfnn-riscv.c\"" > elf32-riscv.new
-	sed -e s/NN/32/g < $(srcdir)/elfnn-riscv.c >> elf32-riscv.new
-	mv -f elf32-riscv.new elf32-riscv.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@
 
 elf64-riscv.c : elfnn-riscv.c
-	rm -f elf64-riscv.c
-	echo "#line 1 \"$(srcdir)/elfnn-riscv.c\"" > elf64-riscv.new
-	sed -e s/NN/64/g < $(srcdir)/elfnn-riscv.c >> elf64-riscv.new
-	mv -f elf64-riscv.new elf64-riscv.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@
 
 peigen.c : peXXigen.c
-	rm -f peigen.c
-	$(SED) -e s/XX/pe/g < $(srcdir)/peXXigen.c > peigen.new
-	mv -f peigen.new peigen.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/pe/g < $< >> $@
 
 pepigen.c : peXXigen.c
-	rm -f pepigen.c
-	$(SED) -e s/XX/pep/g < $(srcdir)/peXXigen.c > pepigen.new
-	mv -f pepigen.new pepigen.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/pep/g < $< >> $@
 
 pex64igen.c: peXXigen.c
-	rm -f pex64igen.c
-	$(SED) -e s/XX/pex64/g < $(srcdir)/peXXigen.c > pex64igen.new
-	mv -f pex64igen.new pex64igen.c
-$(BFD32_LIBS) \
- $(BFD64_LIBS) \
- $(ALL_MACHINES) \
- $(BFD32_BACKENDS) \
- $(BFD64_BACKENDS) \
- $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/pex64/g < $< >> $@
+
+pe-aarch64igen.c: peXXigen.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/peAArch64/g < $< >> $@
+
+pe-loongarch64igen.c: peXXigen.c
+	$(AM_V_at)echo "#line 1 \"$<\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/peLoongArch64/g < $< >> $@
+
+pe-riscv64igen.c: peXXigen.c
+	$(AM_V_at)echo "#line 1 \"peXXigen.c\"" > $@
+	$(AM_V_GEN)$(SED) -e s/XX/peRiscV64/g < $< >> $@
 
 host-aout.lo: Makefile
 
@@ -2047,43 +2442,29 @@ stmp-bfd-h: bfd-in3.h
 	rm -f bfd-tmp.h
 	touch stmp-bfd-h
 
-# Could really use a "copy-if-change"...
-headers:
-	(cd $(bfddocdir); $(MAKE) protos $(FLAGS_TO_PASS))
-	cp $(bfddocdir)/bfd.h bfd-in2.h-new
-	$(SHELL) $(srcdir)/../move-if-change bfd-in2.h-new $(srcdir)/bfd-in2.h
-	cp $(bfddocdir)/libbfd.h libbfd.h-new
-	$(SHELL) $(srcdir)/../move-if-change libbfd.h-new $(srcdir)/libbfd.h
-	cp $(bfddocdir)/libcoff.h libcoff.h-new
-	$(SHELL) $(srcdir)/../move-if-change libcoff.h-new $(srcdir)/libcoff.h
-
-# We only rebuild the header files automatically if we have been
-# configured with --enable-maintainer-mode.
+headers: stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
 
 $(srcdir)/bfd-in2.h: @MAINT@ stmp-bin2-h ; @true
-stmp-bin2-h: $(BFD_H_FILES) $(BFD64_H_FILES)
-	(cd $(bfddocdir); $(MAKE) $(FLAGS_TO_PASS) bfd.h)
-	cp $(bfddocdir)/bfd.h bfd-in2.h-new
-	$(SHELL) $(srcdir)/../move-if-change bfd-in2.h-new $(srcdir)/bfd-in2.h
-	touch stmp-bin2-h
+stmp-bin2-h: $(BFD_H_FILES) $(BFD64_H_FILES) $(MKDOC)
+	$(AM_V_GEN)H_FILES="$(BFD_H_FILES)" CHEW_FLAGS= ; $(REGEN_HEADER) > bfd-in2.h-new
+	$(AM_V_at)$(SHELL) $(srcdir)/../move-if-change bfd-in2.h-new $(srcdir)/bfd-in2.h
+	$(AM_V_at)touch stmp-bin2-h
 
 $(srcdir)/libbfd.h: @MAINT@ stmp-lbfd-h ; @true
-stmp-lbfd-h: $(LIBBFD_H_FILES)
-	(cd $(bfddocdir); $(MAKE) $(FLAGS_TO_PASS) libbfd.h)
-	cp $(bfddocdir)/libbfd.h libbfd.h-new
-	$(SHELL) $(srcdir)/../move-if-change libbfd.h-new $(srcdir)/libbfd.h
-	touch stmp-lbfd-h
+stmp-lbfd-h: $(LIBBFD_H_FILES) $(MKDOC)
+	$(AM_V_GEN)H_FILES="$(LIBBFD_H_FILES)" CHEW_FLAGS=-i ; $(REGEN_HEADER) > libbfd.h-new
+	$(AM_V_at)$(SHELL) $(srcdir)/../move-if-change libbfd.h-new $(srcdir)/libbfd.h
+	$(AM_V_at)touch stmp-lbfd-h
 
 $(srcdir)/libcoff.h: @MAINT@ stmp-lcoff-h ; @true
-stmp-lcoff-h: $(LIBCOFF_H_FILES)
-	(cd $(bfddocdir); $(MAKE) $(FLAGS_TO_PASS) libcoff.h)
-	cp $(bfddocdir)/libcoff.h libcoff.h-new
-	$(SHELL) $(srcdir)/../move-if-change libcoff.h-new $(srcdir)/libcoff.h
-	touch stmp-lcoff-h
+stmp-lcoff-h: $(LIBCOFF_H_FILES) $(MKDOC)
+	$(AM_V_GEN)H_FILES="$(LIBCOFF_H_FILES)" CHEW_FLAGS=-i ; $(REGEN_HEADER) > libcoff.h-new
+	$(AM_V_at)$(SHELL) $(srcdir)/../move-if-change libcoff.h-new $(srcdir)/libcoff.h
+	$(AM_V_at)touch stmp-lcoff-h
 
 bfdver.h: $(srcdir)/version.h $(srcdir)/development.sh $(srcdir)/Makefile.in
-	@echo "creating $@"
-	@bfd_version=`echo "$(VERSION)" | $(SED) -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
+	$(AM_V_GEN)\
+	bfd_version=`echo "$(VERSION)" | $(SED) -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
 	bfd_version_string="\"$(VERSION)\"" ;\
 	bfd_soversion="$(VERSION)" ;\
 	bfd_version_package="\"$(PKGVERSION)\"" ;\
@@ -2104,18 +2485,61 @@ bfdver.h: $(srcdir)/version.h $(srcdir)/
 # Disable -Werror, if it has been enabled, since coffswap.h won't
 # compile with gcc 4.5 and above.
 coff-tic4x.lo: coff-tic4x.c
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(NO_WERROR)
-@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(NO_WERROR)
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
+@am__fastdepCC_FALSE@	$(AM_V_CC)$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
 
 coff-tic54x.lo: coff-tic54x.c
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(NO_WERROR)
-@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(NO_WERROR)
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
+@am__fastdepCC_FALSE@	$(AM_V_CC)$(LTCOMPILE) -c -o $@ $< $(NO_WERROR)
+
+$(MKDOC): doc/chew.stamp ; @true
+doc/chew.stamp: $(srcdir)/doc/chew.c doc/$(am__dirstamp)
+	$(AM_V_CCLD)$(CC_FOR_BUILD) -o doc/chw$$$$$(EXEEXT_FOR_BUILD) $(CFLAGS_FOR_BUILD) \
+	  $(CPPFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) \
+	  -I. -I$(srcdir) -Idoc -I$(srcdir)/../include -I$(srcdir)/../intl -I../intl \
+	  $(srcdir)/doc/chew.c && \
+	$(SHELL) $(srcdir)/../move-if-change \
+	  doc/chw$$$$$(EXEEXT_FOR_BUILD) $(MKDOC) && \
+	touch $@
+
+.PRECIOUS: doc/%.stamp
+doc/%.texi: doc/%.stamp ; @true
+doc/%.stamp: $(srcdir)/%.c $(srcdir)/doc/doc.str $(MKDOC) doc/$(am__dirstamp)
+	$(AM_V_GEN)$(REGEN_TEXI)
+doc/%.stamp: $(srcdir)/%.h $(srcdir)/doc/doc.str $(MKDOC) doc/$(am__dirstamp)
+	$(AM_V_GEN)$(REGEN_TEXI)
+
+# Avoid the %.stamp generating a builddir/bfd.texi that overrides the
+# srcdir/ as well as regenerating doc/bfd.info for each make run.
+doc/bfd.stamp: $(srcdir)/doc/bfd.texi ; $(AM_V_at)touch $@
+
+# We use bfdt.texi, rather than bfd.texi, to avoid conflicting with
+# bfd.texi on an 8.3 filesystem.
+doc/bfdt.stamp: $(srcdir)/bfd.c $(srcdir)/doc/doc.str $(MKDOC) doc/$(am__dirstamp)
+	$(AM_V_GEN)$(REGEN_TEXI)
+
+doc/bfdver.texi: $(srcdir)/Makefile.in
+	$(AM_V_GEN)\
+	$(MKDIR_P) $(@D); \
+	echo "@set VERSION $(VERSION)" > $@; \
+	if test -n "$(PKGVERSION)"; then \
+	  echo "@set VERSION_PACKAGE $(PKGVERSION)" >> $@; \
+	fi; \
+	echo "@set UPDATED `date '+%B %Y'`" >> $@; \
+	if test -n "$(REPORT_BUGS_TEXI)"; then \
+	  echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> $@; \
+	fi
+
+html-local: doc/bfd/index.html
+doc/bfd/index.html: doc/bfd.texi $(bfd_TEXINFOS) doc/$(am__dirstamp)
+	$(AM_V_at)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \
+	  --split=node -o doc/bfd $(srcdir)/doc/bfd.texi
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/makefile.vms ./bfd/makefile.vms
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/makefile.vms	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/makefile.vms	2024-02-01 01:47:14.000000000 +0000
@@ -5,7 +5,7 @@
 #
 # Created by Klaus K"ampf, kkaempf@rmi.de
 #
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mep-relocs.pl ./bfd/mep-relocs.pl
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mep-relocs.pl	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/mep-relocs.pl	2024-02-01 01:47:14.000000000 +0000
@@ -2,7 +2,7 @@
 # -*- perl -*-
 #
 # Toshiba MeP Media Engine Relocation Generator
-# Copyright (C) 2001-2019 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
 # This file is part of BFD.
 # Originally written by DJ Delorie <dj@redhat.com>
 #
@@ -156,20 +156,23 @@ sub emit_apply {
 	    $e = '^e4' # endian swap for data
 	}
 	print NEW "    case R_MEP_$relocs[$i]: /* $pattern[$i] */\n";
+	if ($relocs[$i] =~ /HI16S/) {
+	    print NEW "      u += 0x8000;\n"
+	}
 	if ($attrs[$i] =~ /tp-rel/i) {
-	    print NEW "      $v -= mep_tpoff_base(rel->r_offset);\n";
+	    print NEW "      u -= mep_tpoff_base(rel->r_offset);\n";
 	}
 	if ($attrs[$i] =~ /gp-rel/i) {
-	    print NEW "      $v -= mep_sdaoff_base(rel->r_offset);\n";
+	    print NEW "      u -= mep_sdaoff_base(rel->r_offset);\n";
 	}
 	if ($attrs[$i] !~ /no-overflow/ && $bits[$i] < 32) {
 	    if ($v eq "u") {
 		$max = (1 << $bits[$i]) - 1;
 		print NEW "      if (u > $max) r = bfd_reloc_overflow;\n";
 	    } else {
-		$min = -(1 << ($bits[$i]-1));
-		$max = (1 << ($bits[$i]-1)) - 1;
-		print NEW "      if ($min > s || s > $max) r = bfd_reloc_overflow;\n";
+		$min = (1 << ($bits[$i]-1));
+		$max = (1 << ($bits[$i])) - 1;
+		print NEW "      if (u + $min > $max) r = bfd_reloc_overflow;\n";
 	    }
 	}
 	for ($b=0; $b<length($pattern[$i]); $b += 8) {
@@ -183,11 +186,11 @@ sub emit_apply {
 		print NEW "      byte[$bb$e] = ";
 		print NEW "(byte[$bb$e] & 0x$rmask) | " if $rmask ne "00";
 		if ($left) {
-		    print NEW "(($v << $left) & 0x$mask)";
+		    print NEW "((u << $left) & 0x$mask)";
 		} elsif ($right) {
-		    print NEW "(($v >> $right) & 0x$mask)";
+		    print NEW "((u >> $right) & 0x$mask)";
 		} else {
-		    print NEW "($v & 0x$mask)";
+		    print NEW "(u & 0x$mask)";
 		}
 		print NEW ";\n";
 	    }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/merge.c ./bfd/merge.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/merge.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/merge.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* SEC_MERGE support.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Written by Jakub Jelinek <jakub@redhat.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -28,16 +28,29 @@
 #include "bfd.h"
 #include "elf-bfd.h"
 #include "libbfd.h"
-#include "hashtab.h"
+#include "objalloc.h"
 #include "libiberty.h"
 
-struct sec_merge_sec_info;
+/* We partition all mergable input sections into sets of similar
+   characteristics.  These sets are the unit of merging.  All content
+   of the input sections is scanned and inserted into a hash table.
+   We also remember an input-offset to entry mapping per input section, but
+   the content itself is removed.  After everything is read in we assign
+   output offsets to all hash entries, and when relocations are processed we
+   lookup the given input offset per input-section, get the matching entry
+   and its output offset (possibly adjusted for offset pointing into the
+   middle of an entry).
+
+   The input-offset-to-entry mapping (in map_ofs/map) is sorted, so in principle
+   we could binary search it, but that's not cache-friendly and it's faster
+   to add another lookup structure that gets us very near the correct
+   entry in just one step (that's what ofstolowbound is for) and do a linear
+   search from there.  */
 
 /* An entry in the section merge hash table.  */
 
 struct sec_merge_hash_entry
 {
-  struct bfd_hash_entry root;
   /* Length of this entry.  This includes the zero terminator.  */
   unsigned int len;
   /* Start of this string needs to be aligned to
@@ -50,10 +63,9 @@ struct sec_merge_hash_entry
     /* Entry this is a suffix of (if alignment is 0).  */
     struct sec_merge_hash_entry *suffix;
   } u;
-  /* Which section is it in.  */
-  struct sec_merge_sec_info *secinfo;
-  /* Next entity in the hash table.  */
+  /* Next entity in the hash table (in order of entering).  */
   struct sec_merge_hash_entry *next;
+  char str[1];
 };
 
 /* The section merge hash table.  */
@@ -70,19 +82,56 @@ struct sec_merge_hash
   /* Entity size.  */
   unsigned int entsize;
   /* Are entries fixed size or zero terminated strings?  */
-  bfd_boolean strings;
+  bool strings;
+  /* struct-of-array variant of all entries in the hash-table: */
+  unsigned int nbuckets;
+  /* We keep hash-code and length of entry together in a separate
+     array in such a way that it can be checked with just a single memory
+     reference.  In this way we don't need indirect access to the entries
+     in the normal case.  keys_lens[i] is 'hashcode << 32) | len' for entry
+     i (which is pointed to be values[i]).  */
+  uint64_t *key_lens;
+  struct sec_merge_hash_entry **values;
 };
 
+/* True when given NEWCOUNT and NBUCKETS indicate that the hash table needs
+   resizing.  */
+#define NEEDS_RESIZE(newcount, nbuckets) ((newcount) > (nbuckets) / 3 * 2)
+
+struct sec_merge_sec_info;
+
+/* Information per merged blob.  This is the unit of merging and is
+   related to (multiple) input sections of similar characteristics
+   (alignment, entity size, strings or blobs).  */
 struct sec_merge_info
 {
   /* Chain of sec_merge_infos.  */
   struct sec_merge_info *next;
-  /* Chain of sec_merge_sec_infos.  */
+  /* Chain of sec_merge_sec_infos.  This first one will be the representative
+     section that conceptually collects all merged content.  */
   struct sec_merge_sec_info *chain;
+  struct sec_merge_sec_info **last;
   /* A hash table used to hold section content.  */
   struct sec_merge_hash *htab;
 };
 
+/* Offset into input mergable sections are represented by this type.
+   Note how doesn't support crazy large mergable sections.  */
+typedef uint32_t mapofs_type;
+
+/* Given a sec_merge_sec_info S this gives the input offset of the IDX's
+   recorded entry.  */
+#define MAP_OFS(S,IDX) (S)->map_ofs[IDX]
+/* And this gives the output offset (in the merged blob representing
+   this S.  */
+#define MAP_IDX(S,IDX) (S)->map[IDX].idx
+/* For quick lookup of output offset given an input offset we store
+   an array mapping intput-offset / OFSDIV to entry index.
+   16 is better than 8, 32 is roughly same as 16, but uses less memory, so
+   we use that. */
+#define OFSDIV 32
+
+/* Information per input merge section.  */
 struct sec_merge_sec_info
 {
   /* Chain of sec_merge_sec_infos.  */
@@ -91,76 +140,212 @@ struct sec_merge_sec_info
   asection *sec;
   /* Pointer to merge_info pointing to us.  */
   void **psecinfo;
-  /* A hash table used to hold section content.  */
-  struct sec_merge_hash *htab;
+  /* The merge entity this is a part of.  */
+  struct sec_merge_info *sinfo;
+  /* The section associated with sinfo (i.e. the representative section).
+     Same as sinfo->chain->sec, but faster to access in the hot function.  */
+  asection *reprsec;
   /* First string in this section.  */
   struct sec_merge_hash_entry *first_str;
-  /* Original section content.  */
-  unsigned char contents[1];
+  /* Sparse mapping from input offset to entry covering that offset:  */
+  unsigned int noffsetmap;  /* Number of these mappings.  */
+  mapofs_type *map_ofs;     /* Input offset.  */
+  union {
+      struct sec_merge_hash_entry *entry;  /* Covering hash entry ... */
+      bfd_size_type idx;                   /* ... or destination offset.  */
+  } *map;
+  /* Quick access: index into map_ofs[].  ofstolowbound[o / OFSDIV]=I is
+     such that map_ofs[I] is the smallest offset higher that
+     rounddown(o, OFSDIV) (and hence I-1 is the largest entry whose offset is
+     smaller or equal to o/OFSDIV*OFSDIV).  */
+  unsigned int *ofstolowbound;
+  int fast_state;
 };
 
 
-/* Routine to create an entry in a section merge hashtab.  */
+/* Given a merge hash table TABLE and a number of entries to be
+   ADDED, possibly resize the table for this to fit without further
+   resizing.  */
 
-static struct bfd_hash_entry *
-sec_merge_hash_newfunc (struct bfd_hash_entry *entry,
-			struct bfd_hash_table *table, const char *string)
-{
-  /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
-  if (entry == NULL)
-    entry = (struct bfd_hash_entry *)
-	bfd_hash_allocate (table, sizeof (struct sec_merge_hash_entry));
-  if (entry == NULL)
-    return NULL;
+static bool
+sec_merge_maybe_resize (struct sec_merge_hash *table, unsigned added)
+{
+  struct bfd_hash_table *bfdtab = &table->table;
+  if (NEEDS_RESIZE (bfdtab->count + added, table->nbuckets))
+    {
+      unsigned i;
+      unsigned long newnb = table->nbuckets * 2;
+      struct sec_merge_hash_entry **newv;
+      uint64_t *newl;
+      unsigned long alloc;
 
-  /* Call the allocation method of the superclass.  */
-  entry = bfd_hash_newfunc (entry, table, string);
+      while (NEEDS_RESIZE (bfdtab->count + added, newnb))
+	{
+	  newnb *= 2;
+	  if (!newnb)
+	    return false;
+	}
 
-  if (entry != NULL)
-    {
-      /* Initialize the local fields.  */
-      struct sec_merge_hash_entry *ret = (struct sec_merge_hash_entry *) entry;
+      alloc = newnb * sizeof (newl[0]);
+      if (alloc / sizeof (newl[0]) != newnb)
+	return false;
+      newl = objalloc_alloc ((struct objalloc *) table->table.memory, alloc);
+      if (newl == NULL)
+	return false;
+      memset (newl, 0, alloc);
+      alloc = newnb * sizeof (newv[0]);
+      if (alloc / sizeof (newv[0]) != newnb)
+	return false;
+      newv = objalloc_alloc ((struct objalloc *) table->table.memory, alloc);
+      if (newv == NULL)
+	return false;
+      memset (newv, 0, alloc);
 
-      ret->u.suffix = NULL;
-      ret->alignment = 0;
-      ret->secinfo = NULL;
-      ret->next = NULL;
-    }
+      for (i = 0; i < table->nbuckets; i++)
+	{
+	  struct sec_merge_hash_entry *v = table->values[i];
+	  if (v)
+	    {
+	      uint32_t thishash = table->key_lens[i] >> 32;
+	      unsigned idx = thishash & (newnb - 1);
+	      while (newv[idx])
+		idx = (idx + 1) & (newnb - 1);
+	      newl[idx] = table->key_lens[i];
+	      newv[idx] = v;
+	    }
+	}
 
-  return entry;
+      table->key_lens = newl;
+      table->values = newv;
+      table->nbuckets = newnb;
+    }
+  return true;
 }
 
-/* Look up an entry in a section merge hash table.  */
+/* Insert STRING (actually a byte blob of length LEN, with pre-computed
+   HASH and bucket _INDEX) into our hash TABLE.  */
 
 static struct sec_merge_hash_entry *
-sec_merge_hash_lookup (struct sec_merge_hash *table, const char *string,
-		       unsigned int alignment, bfd_boolean create)
+sec_merge_hash_insert (struct sec_merge_hash *table,
+		 const char *string,
+		 uint64_t hash, unsigned int len, unsigned int _index)
 {
-  const unsigned char *s;
-  unsigned long hash;
-  unsigned int c;
+  struct bfd_hash_table *bfdtab = &table->table;
   struct sec_merge_hash_entry *hashp;
+
+  hashp = (struct sec_merge_hash_entry *)
+      bfd_hash_allocate (bfdtab, len + sizeof (struct sec_merge_hash_entry));
+  if (hashp == NULL)
+    return NULL;
+
+  memcpy (hashp->str, string, len);
+  hashp->len = len;
+  hashp->alignment = 0;
+  hashp->u.suffix = NULL;
+  hashp->next = NULL;
+  // We must not need resizing, otherwise the estimation was wrong
+  BFD_ASSERT (!NEEDS_RESIZE (bfdtab->count + 1, table->nbuckets));
+  bfdtab->count++;
+  table->key_lens[_index] = (hash << 32) | (uint32_t)len;
+  table->values[_index] = hashp;
+
+  return hashp;
+}
+
+/* Read four bytes from *STR, interpret it as 32bit unsigned little
+   endian value and return that.  */
+
+static inline uint32_t
+hash_read32 (const char *str)
+{
+  uint32_t i;
+  /* All reasonable compilers will inline this memcpy and generate optimal
+     code on architectures that support unaligned (4-byte) accesses.  */
+  memcpy(&i, str, 4);
+#ifdef WORDS_BIGENDIAN
+  i = (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+#endif
+  return i;
+}
+
+/* Calculate and return a hashvalue of the bytes at STR[0..LEN-1].
+   All non-zero lengths and all alignments are supported.
+
+   This is somewhat similar to xxh3 (of xxhash), but restricted to 32bit.
+   On cc1 strings this has quite similar statistic properties, and we
+   don't need to jump through hoops to get fast 64x64->128 mults,
+   or 64bit arith on 32 bit hosts.  We also don't care for seeds
+   or secrets.  They improve mixing very little.  */
+
+static uint32_t
+hash_blob (const char *str, unsigned int len)
+{
+  uint32_t ret = 0;
+  uint32_t mul = (1 << 0) +  (1 << 2) + (1 << 3) + (1 << 5) + (1 << 7);
+  mul += (1 << 11) + (1 << 13) + (1 << 17) + (0 << 19) + (1 << 23) + (1 << 29);
+  mul += (1u << 31);
+  if (len >= 8)
+    {
+      uint32_t acc = len * 0x9e3779b1;
+      while (len >= 8)
+	{
+	  uint32_t i1 = hash_read32  (str) ^ (0x396cfeb8 + 1*len);
+	  uint32_t i2 = hash_read32  (str + 4) ^ (0xbe4ba423 + 1*len);
+	  str += 8;
+	  len -= 8;
+	  uint64_t m = (uint64_t)i1 * i2;
+	  acc += (uint32_t)m ^ (uint32_t)(m >> 32);
+	}
+      acc = acc ^ (acc >> 7);
+      uint64_t r = (uint64_t)mul * acc;
+      ret = (uint32_t)r ^ (uint32_t)(r >> 32);
+      if (len == 0)
+	goto end;
+    }
+  if (len >= 4)
+    {
+      uint32_t i1 = hash_read32  (str);
+      uint32_t i2 = hash_read32  (str + len - 4);
+      i1 = ((i1 + len) ^ (i1 >> 7));
+      i2 = i2 ^ (i2 >> 7);
+      uint64_t r = (uint64_t)mul * i1 + i2;
+      ret += r ^ (r >> 32);
+    }
+  else
+    {
+      /* Cleverly read in 1 to 3 bytes without further conditionals.  */
+      unsigned char c1 = str[0];
+      unsigned char c2 = str[len >> 1];
+      unsigned char c3 = str[len - 1];
+      uint32_t i1 = ((uint32_t)c1 << 16) | ((uint32_t)c2 << 24)
+		     | ((uint32_t) c3) | (len << 8);
+      i1 = i1 ^ (i1 >> 7);
+      uint64_t r = (uint64_t)mul * i1;
+      ret += r ^ (r >> 32);
+    }
+end:
+  return ret;
+}
+
+/* Given a hash TABLE, return the hash of STRING (a blob described
+   according to info in TABLE, either a character string, or some fixed
+   size entity) and set *PLEN to the length of this blob.  */
+
+static uint32_t
+hashit (struct sec_merge_hash *table, const char *string, unsigned int *plen)
+{
+  const unsigned char *s;
+  uint32_t hash;
   unsigned int len, i;
-  unsigned int _index;
 
-  hash = 0;
-  len = 0;
   s = (const unsigned char *) string;
   if (table->strings)
     {
       if (table->entsize == 1)
-	{
-	  while ((c = *s++) != '\0')
-	    {
-	      hash += c + (c << 17);
-	      hash ^= hash >> 2;
-	      ++len;
-	    }
-	  hash += len + (len << 17);
-	}
+	len = strlen (string) + 1;
       else
 	{
+	  len = 0;
 	  for (;;)
 	    {
 	      for (i = 0; i < table->entsize; ++i)
@@ -168,72 +353,74 @@ sec_merge_hash_lookup (struct sec_merge_
 		  break;
 	      if (i == table->entsize)
 		break;
-	      for (i = 0; i < table->entsize; ++i)
-		{
-		  c = *s++;
-		  hash += c + (c << 17);
-		  hash ^= hash >> 2;
-		}
+	      s += table->entsize;
 	      ++len;
 	    }
-	  hash += len + (len << 17);
 	  len *= table->entsize;
+	  len += table->entsize;
 	}
-      hash ^= hash >> 2;
-      len += table->entsize;
     }
   else
-    {
-      for (i = 0; i < table->entsize; ++i)
-	{
-	  c = *s++;
-	  hash += c + (c << 17);
-	  hash ^= hash >> 2;
-	}
-      len = table->entsize;
-    }
+    len = table->entsize;
+  hash = hash_blob (string, len);
+  *plen = len;
+  return hash;
+}
 
-  _index = hash % table->table.size;
-  for (hashp = (struct sec_merge_hash_entry *) table->table.table[_index];
-       hashp != NULL;
-       hashp = (struct sec_merge_hash_entry *) hashp->root.next)
-    {
-      if (hashp->root.hash == hash
-	  && len == hashp->len
-	  && memcmp (hashp->root.string, string, len) == 0)
+/* Lookup or insert a blob STRING (of length LEN, precomputed HASH and
+   input ALIGNMENT) into TABLE.  Return the found or new hash table entry.  */
+
+static struct sec_merge_hash_entry *
+sec_merge_hash_lookup (struct sec_merge_hash *table, const char *string,
+		       unsigned int len, uint64_t hash,
+		       unsigned int alignment)
+{
+  struct sec_merge_hash_entry *hashp;
+  unsigned int _index;
+
+  /*printf ("YYY insert 0x%x into %u buckets (%s)\n",
+	  (unsigned)hash, (unsigned)table->nbuckets, string);*/
+  uint64_t *key_lens = table->key_lens;
+  struct sec_merge_hash_entry **values = table->values;
+  uint64_t hlen = (hash << 32) | (uint32_t)len;
+  unsigned int nbuckets = table->nbuckets;
+  _index = hash & (nbuckets - 1);
+  while (1)
+    {
+      uint64_t candlen = key_lens[_index];
+      if (candlen == hlen
+	  && !memcmp (values[_index]->str, string, len))
 	{
-	  /* If the string we found does not have at least the required
-	     alignment, we need to insert another copy.  */
+	  hashp = values[_index];
 	  if (hashp->alignment < alignment)
-	    {
-	      if (create)
-		{
-		  /*  Mark the less aligned copy as deleted.  */
-		  hashp->len = 0;
-		  hashp->alignment = 0;
-		}
-	      break;
-	    }
+	    hashp->alignment = alignment;
 	  return hashp;
 	}
+      if (!(candlen & (uint32_t)-1))
+	break;
+      _index = (_index + 1) & (nbuckets - 1);
     }
 
-  if (! create)
-    return NULL;
-
-  hashp = ((struct sec_merge_hash_entry *)
-	   bfd_hash_insert (&table->table, string, hash));
+  hashp = sec_merge_hash_insert (table, string, hash, len, _index);
   if (hashp == NULL)
     return NULL;
-  hashp->len = len;
   hashp->alignment = alignment;
+
+  table->size++;
+  BFD_ASSERT (table->size == table->table.count);
+  if (table->first == NULL)
+    table->first = hashp;
+  else
+    table->last->next = hashp;
+  table->last = hashp;
+
   return hashp;
 }
 
 /* Create a new hash table.  */
 
 static struct sec_merge_hash *
-sec_merge_init (unsigned int entsize, bfd_boolean strings)
+sec_merge_init (unsigned int entsize, bool strings)
 {
   struct sec_merge_hash *table;
 
@@ -241,8 +428,8 @@ sec_merge_init (unsigned int entsize, bf
   if (table == NULL)
     return NULL;
 
-  if (! bfd_hash_table_init_n (&table->table, sec_merge_hash_newfunc,
-			       sizeof (struct sec_merge_hash_entry), 16699))
+  if (! bfd_hash_table_init_n (&table->table, NULL,
+			       sizeof (struct sec_merge_hash_entry), 0x2000))
     {
       free (table);
       return NULL;
@@ -254,46 +441,88 @@ sec_merge_init (unsigned int entsize, bf
   table->entsize = entsize;
   table->strings = strings;
 
+  table->nbuckets = 0x2000;
+  table->key_lens = objalloc_alloc ((struct objalloc *) table->table.memory,
+				table->nbuckets * sizeof (table->key_lens[0]));
+  memset (table->key_lens, 0, table->nbuckets * sizeof (table->key_lens[0]));
+  table->values = objalloc_alloc ((struct objalloc *) table->table.memory,
+				table->nbuckets * sizeof (table->values[0]));
+  memset (table->values, 0, table->nbuckets * sizeof (table->values[0]));
+
   return table;
 }
 
-/* Get the index of an entity in a hash table, adding it if it is not
-   already present.  */
-
-static struct sec_merge_hash_entry *
-sec_merge_add (struct sec_merge_hash *tab, const char *str,
-	       unsigned int alignment, struct sec_merge_sec_info *secinfo)
+/* Append the tuple of input-offset O corresponding
+   to hash table ENTRY into SECINFO, such that we later may lookup the
+   entry just by O.  */
+
+static bool
+append_offsetmap (struct sec_merge_sec_info *secinfo,
+		  mapofs_type o,
+		  struct sec_merge_hash_entry *entry)
 {
-  struct sec_merge_hash_entry *entry;
+  if ((secinfo->noffsetmap & 2047) == 0)
+    {
+      bfd_size_type amt;
+      amt = (secinfo->noffsetmap + 2048);
+      secinfo->map_ofs = bfd_realloc (secinfo->map_ofs,
+				      amt * sizeof(secinfo->map_ofs[0]));
+      if (!secinfo->map_ofs)
+	return false;
+      secinfo->map = bfd_realloc (secinfo->map, amt * sizeof(secinfo->map[0]));
+      if (!secinfo->map)
+	return false;
+    }
+  unsigned int i = secinfo->noffsetmap++;
+  MAP_OFS(secinfo, i) = o;
+  secinfo->map[i].entry = entry;
+  return true;
+}
 
-  entry = sec_merge_hash_lookup (tab, str, alignment, TRUE);
-  if (entry == NULL)
-    return NULL;
+/* Prepare the input-offset-to-entry tables after output offsets are
+   determined.  */
 
-  if (entry->secinfo == NULL)
-    {
-      tab->size++;
-      entry->secinfo = secinfo;
-      if (tab->first == NULL)
-	tab->first = entry;
-      else
-	tab->last->next = entry;
-      tab->last = entry;
+static void
+prepare_offsetmap (struct sec_merge_sec_info *secinfo)
+{
+  unsigned int noffsetmap = secinfo->noffsetmap;
+  unsigned int i, lbi;
+  bfd_size_type l, sz, amt;
+
+  secinfo->fast_state = 1;
+
+  for (i = 0; i < noffsetmap; i++)
+    MAP_IDX(secinfo, i) = secinfo->map[i].entry->u.index;
+
+  sz = secinfo->sec->rawsize;
+  amt = (sz / OFSDIV + 1) * sizeof (secinfo->ofstolowbound[0]);
+  secinfo->ofstolowbound = bfd_zmalloc (amt);
+  if (!secinfo->ofstolowbound)
+    return;
+  for (l = lbi = 0; l < sz; l += OFSDIV)
+    {
+      /* No need for bounds checking on lbi, as we've added a sentinel that's
+	 larger than any offset.  */
+      while (MAP_OFS(secinfo, lbi) <= l)
+	lbi++;
+      //BFD_ASSERT ((l / OFSDIV) <= (i / OFSDIV));
+      secinfo->ofstolowbound[l / OFSDIV] = lbi;
     }
-
-  return entry;
+  secinfo->fast_state = 2;
 }
 
-static bfd_boolean
-sec_merge_emit (bfd *abfd, struct sec_merge_hash_entry *entry,
-		unsigned char *contents, file_ptr offset)
+static bool
+sec_merge_emit (bfd *abfd, struct sec_merge_sec_info *secinfo,
+		unsigned char *contents)
 {
-  struct sec_merge_sec_info *secinfo = entry->secinfo;
+  struct sec_merge_hash_entry *entry = secinfo->first_str;
   asection *sec = secinfo->sec;
+  file_ptr offset = sec->output_offset;
   char *pad = NULL;
   bfd_size_type off = 0;
-  int alignment_power = sec->output_section->alignment_power;
-  bfd_size_type pad_len;
+  unsigned int opb = bfd_octets_per_byte (abfd, sec);
+  int alignment_power = sec->output_section->alignment_power * opb;
+  bfd_size_type pad_len;  /* Octets.  */
 
   /* FIXME: If alignment_power is 0 then really we should scan the
      entry list for the largest required alignment and use that.  */
@@ -301,13 +530,16 @@ sec_merge_emit (bfd *abfd, struct sec_me
 
   pad = (char *) bfd_zmalloc (pad_len);
   if (pad == NULL)
-    return FALSE;
+    return false;
 
-  for (; entry != NULL && entry->secinfo == secinfo; entry = entry->next)
+  for (; entry != NULL; entry = entry->next)
     {
       const char *str;
       bfd_size_type len;
 
+      if (!entry->len)
+	continue;
+      BFD_ASSERT (entry->alignment);
       len = -off & (entry->alignment - 1);
       if (len != 0)
 	{
@@ -317,12 +549,12 @@ sec_merge_emit (bfd *abfd, struct sec_me
 	      memcpy (contents + offset, pad, len);
 	      offset += len;
 	    }
-	  else if (bfd_bwrite (pad, len, abfd) != len)
+	  else if (bfd_write (pad, len, abfd) != len)
 	    goto err;
 	  off += len;
 	}
 
-      str = entry->root.string;
+      str = entry->str;
       len = entry->len;
 
       if (contents)
@@ -330,43 +562,45 @@ sec_merge_emit (bfd *abfd, struct sec_me
 	  memcpy (contents + offset, str, len);
 	  offset += len;
 	}
-      else if (bfd_bwrite (str, len, abfd) != len)
+      else if (bfd_write (str, len, abfd) != len)
 	goto err;
 
       off += len;
     }
+  BFD_ASSERT (!entry);
 
   /* Trailing alignment needed?  */
   off = sec->size - off;
-  if (off != 0)
+  if (1 && off != 0)
     {
       BFD_ASSERT (off <= pad_len);
       if (contents)
 	memcpy (contents + offset, pad, off);
-      else if (bfd_bwrite (pad, off, abfd) != off)
+      else if (bfd_write (pad, off, abfd) != off)
 	goto err;
     }
 
   free (pad);
-  return TRUE;
+  return true;
 
  err:
   free (pad);
-  return FALSE;
+  return false;
 }
 
 /* Register a SEC_MERGE section as a candidate for merging.
    This function is called for all non-dynamic SEC_MERGE input sections.  */
 
-bfd_boolean
+bool
 _bfd_add_merge_section (bfd *abfd, void **psinfo, asection *sec,
 			void **psecinfo)
 {
   struct sec_merge_info *sinfo;
   struct sec_merge_sec_info *secinfo;
-  unsigned int align;
-  bfd_size_type amt;
-  bfd_byte *contents;
+  asection *repr;
+  unsigned int alignment_power;  /* Octets.  */
+  unsigned int align;            /* Octets.  */
+  unsigned int opb = bfd_octets_per_byte (abfd, sec);
 
   if ((abfd->flags & DYNAMIC) != 0
       || (sec->flags & SEC_MERGE) == 0)
@@ -375,24 +609,31 @@ _bfd_add_merge_section (bfd *abfd, void
   if (sec->size == 0
       || (sec->flags & SEC_EXCLUDE) != 0
       || sec->entsize == 0)
-    return TRUE;
+    return true;
 
   if (sec->size % sec->entsize != 0)
-    return TRUE;
+    return true;
 
   if ((sec->flags & SEC_RELOC) != 0)
     {
       /* We aren't prepared to handle relocations in merged sections.  */
-      return TRUE;
+      return true;
+    }
+
+  if (sec->size > (mapofs_type)-1)
+    {
+      /* Input offsets must be representable by mapofs_type.  */
+      return true;
     }
 
 #ifndef CHAR_BIT
 #define CHAR_BIT 8
 #endif
-  if (sec->alignment_power >= sizeof (align) * CHAR_BIT)
-    return TRUE;
+  alignment_power = sec->alignment_power * opb;
+  if (alignment_power >= sizeof (align) * CHAR_BIT)
+    return true;
 
-  align = 1u << sec->alignment_power;
+  align = 1u << alignment_power;
   if ((sec->entsize < align
        && ((sec->entsize & (sec->entsize - 1))
 	   || !(sec->flags & SEC_STRINGS)))
@@ -405,15 +646,26 @@ _bfd_add_merge_section (bfd *abfd, void
 	 of alignment.  For non-string constants, alignment must
 	 be smaller than or equal to entity size and entity size
 	 must be integer multiple of alignment.  */
-      return TRUE;
+      return true;
     }
 
+  /* Initialize the descriptor for this input section.  */
+
+  *psecinfo = secinfo = bfd_zalloc (abfd, sizeof (*secinfo));
+  if (*psecinfo == NULL)
+    goto error_return;
+
+  secinfo->sec = sec;
+  secinfo->psecinfo = psecinfo;
+
+  /* Search for a matching output merged section.  */
   for (sinfo = (struct sec_merge_info *) *psinfo; sinfo; sinfo = sinfo->next)
-    if ((secinfo = sinfo->chain)
-	&& ! ((secinfo->sec->flags ^ sec->flags) & (SEC_MERGE | SEC_STRINGS))
-	&& secinfo->sec->entsize == sec->entsize
-	&& secinfo->sec->alignment_power == sec->alignment_power
-	&& secinfo->sec->output_section == sec->output_section)
+    if (sinfo->chain
+	&& (repr = sinfo->chain->sec)
+	&& ! ((repr->flags ^ sec->flags) & (SEC_MERGE | SEC_STRINGS))
+	&& repr->entsize == sec->entsize
+	&& repr->alignment_power == sec->alignment_power
+	&& repr->output_section == sec->output_section)
       break;
 
   if (sinfo == NULL)
@@ -425,134 +677,125 @@ _bfd_add_merge_section (bfd *abfd, void
 	goto error_return;
       sinfo->next = (struct sec_merge_info *) *psinfo;
       sinfo->chain = NULL;
+      sinfo->last = &sinfo->chain;
       *psinfo = sinfo;
       sinfo->htab = sec_merge_init (sec->entsize, (sec->flags & SEC_STRINGS));
       if (sinfo->htab == NULL)
 	goto error_return;
     }
 
-  /* Read the section from abfd.  */
-
-  amt = sizeof (struct sec_merge_sec_info) - 1 + sec->size;
-  if (sec->flags & SEC_STRINGS)
-    /* Some versions of gcc may emit a string without a zero terminator.
-       See http://gcc.gnu.org/ml/gcc-patches/2006-06/msg01004.html
-       Allocate space for an extra zero.  */
-    amt += sec->entsize;
-  *psecinfo = bfd_alloc (abfd, amt);
-  if (*psecinfo == NULL)
-    goto error_return;
+  *sinfo->last = secinfo;
+  sinfo->last = &secinfo->next;
 
-  secinfo = (struct sec_merge_sec_info *) *psecinfo;
-  if (sinfo->chain)
-    {
-      secinfo->next = sinfo->chain->next;
-      sinfo->chain->next = secinfo;
-    }
-  else
-    secinfo->next = secinfo;
-  sinfo->chain = secinfo;
-  secinfo->sec = sec;
-  secinfo->psecinfo = psecinfo;
-  secinfo->htab = sinfo->htab;
-  secinfo->first_str = NULL;
+  secinfo->sinfo = sinfo;
+  secinfo->reprsec = sinfo->chain->sec;
 
-  sec->rawsize = sec->size;
-  if (sec->flags & SEC_STRINGS)
-    memset (secinfo->contents + sec->size, 0, sec->entsize);
-  contents = secinfo->contents;
-  if (! bfd_get_full_section_contents (sec->owner, sec, &contents))
-    goto error_return;
-
-  return TRUE;
+  return true;
 
  error_return:
   *psecinfo = NULL;
-  return FALSE;
+  return false;
 }
 
-/* Record one section into the hash table.  */
-static bfd_boolean
+/* Record one whole input section (described by SECINFO) into the hash table
+   SINFO.  */
+
+static bool
 record_section (struct sec_merge_info *sinfo,
 		struct sec_merge_sec_info *secinfo)
 {
   asection *sec = secinfo->sec;
   struct sec_merge_hash_entry *entry;
-  bfd_boolean nul;
   unsigned char *p, *end;
   bfd_vma mask, eltalign;
-  unsigned int align, i;
+  unsigned int align;
+  bfd_size_type amt;
+  bfd_byte *contents;
+  void *tmpptr;
 
-  align = sec->alignment_power;
-  end = secinfo->contents + sec->size;
-  nul = FALSE;
-  mask = ((bfd_vma) 1 << align) - 1;
+  amt = sec->size;
   if (sec->flags & SEC_STRINGS)
+    /* Some versions of gcc may emit a string without a zero terminator.
+       See http://gcc.gnu.org/ml/gcc-patches/2006-06/msg01004.html
+       Allocate space for an extra zero.  */
+    amt += sec->entsize;
+  contents = bfd_malloc (amt);
+  if (!contents)
+    goto error_return;
+
+  /* Slurp in all section contents (possibly decompressing it).  */
+  sec->rawsize = sec->size;
+  if (sec->flags & SEC_STRINGS)
+    memset (contents + sec->size, 0, sec->entsize);
+  if (! bfd_get_full_section_contents (sec->owner, sec, &contents))
+    goto error_return;
+
+  /* Now populate the hash table and offset mapping.  */
+
+  /* Presize the hash table for what we're going to add.  We overestimate
+     quite a bit, but if it turns out to be too much then other sections
+     merged into this area will make use of that as well.  */
+  if (!sec_merge_maybe_resize (sinfo->htab, 1 + sec->size / 2))
     {
-      for (p = secinfo->contents; p < end; )
-	{
-	  eltalign = p - secinfo->contents;
-	  eltalign = ((eltalign ^ (eltalign - 1)) + 1) >> 1;
-	  if (!eltalign || eltalign > mask)
-	    eltalign = mask + 1;
-	  entry = sec_merge_add (sinfo->htab, (char *) p, (unsigned) eltalign,
-				 secinfo);
-	  if (! entry)
-	    goto error_return;
-	  p += entry->len;
-	  if (sec->entsize == 1)
-	    {
-	      while (p < end && *p == 0)
-		{
-		  if (!nul && !((p - secinfo->contents) & mask))
-		    {
-		      nul = TRUE;
-		      entry = sec_merge_add (sinfo->htab, "",
-					     (unsigned) mask + 1, secinfo);
-		      if (! entry)
-			goto error_return;
-		    }
-		  p++;
-		}
-	    }
-	  else
-	    {
-	      while (p < end)
-		{
-		  for (i = 0; i < sec->entsize; i++)
-		    if (p[i] != '\0')
-		      break;
-		  if (i != sec->entsize)
-		    break;
-		  if (!nul && !((p - secinfo->contents) & mask))
-		    {
-		      nul = TRUE;
-		      entry = sec_merge_add (sinfo->htab, (char *) p,
-					     (unsigned) mask + 1, secinfo);
-		      if (! entry)
-			goto error_return;
-		    }
-		  p += sec->entsize;
-		}
-	    }
-	}
+      bfd_set_error (bfd_error_no_memory);
+      goto error_return;
     }
-  else
+
+  /* Walk through the contents, calculate hashes and length of all
+     blobs (strings or fixed-size entries) we find and fill the
+     hash and offset tables.  */
+  align = sec->alignment_power;
+  mask = ((bfd_vma) 1 << align) - 1;
+  end = contents + sec->size;
+  for (p = contents; p < end;)
     {
-      for (p = secinfo->contents; p < end; p += sec->entsize)
-	{
-	  entry = sec_merge_add (sinfo->htab, (char *) p, 1, secinfo);
-	  if (! entry)
-	    goto error_return;
-	}
+      unsigned len;
+      uint32_t hash = hashit (sinfo->htab, (char*) p, &len);
+      unsigned int ofs = p - contents;
+      eltalign = ofs;
+      eltalign = ((eltalign ^ (eltalign - 1)) + 1) >> 1;
+      if (!eltalign || eltalign > mask)
+	eltalign = mask + 1;
+      entry = sec_merge_hash_lookup (sinfo->htab, (char *) p, len, hash,
+				     (unsigned) eltalign);
+      if (! entry)
+	goto error_return;
+      if (! append_offsetmap (secinfo, ofs, entry))
+	goto error_return;
+      p += len;
     }
 
-  return TRUE;
+  /* Add a sentinel element that's conceptually behind all others.  */
+  append_offsetmap (secinfo, sec->size, NULL);
+  /* But don't count it.  */
+  secinfo->noffsetmap--;
+
+  free (contents);
+  contents = NULL;
+
+  /* We allocate the ofsmap arrays in blocks of 2048 elements.
+     In case we have very many small input files/sections,
+     this might waste large amounts of memory, so reallocate these
+     arrays here to their true size.  */
+  amt = secinfo->noffsetmap + 1;
+  tmpptr = bfd_realloc (secinfo->map, amt * sizeof(secinfo->map[0]));
+  if (tmpptr)
+    secinfo->map = tmpptr;
+  tmpptr = bfd_realloc (secinfo->map_ofs, amt * sizeof(secinfo->map_ofs[0]));
+  if (tmpptr)
+    secinfo->map_ofs = tmpptr;
 
-error_return:
+  /*printf ("ZZZ %s:%s %u entries\n", sec->owner->filename, sec->name,
+	  (unsigned)secinfo->noffsetmap);*/
+
+  return true;
+
+ error_return:
+  free (contents);
+  contents = NULL;
   for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
     *secinfo->psecinfo = NULL;
-  return FALSE;
+  return false;
 }
 
 /* qsort comparison function.  Won't ever return zero as all entries
@@ -565,8 +808,8 @@ strrevcmp (const void *a, const void *b)
   struct sec_merge_hash_entry *B = *(struct sec_merge_hash_entry **) b;
   unsigned int lenA = A->len;
   unsigned int lenB = B->len;
-  const unsigned char *s = (const unsigned char *) A->root.string + lenA - 1;
-  const unsigned char *t = (const unsigned char *) B->root.string + lenB - 1;
+  const unsigned char *s = (const unsigned char *) A->str + lenA - 1;
+  const unsigned char *t = (const unsigned char *) B->str + lenB - 1;
   int l = lenA < lenB ? lenA : lenB;
 
   while (l)
@@ -590,8 +833,8 @@ strrevcmp_align (const void *a, const vo
   struct sec_merge_hash_entry *B = *(struct sec_merge_hash_entry **) b;
   unsigned int lenA = A->len;
   unsigned int lenB = B->len;
-  const unsigned char *s = (const unsigned char *) A->root.string + lenA - 1;
-  const unsigned char *t = (const unsigned char *) B->root.string + lenB - 1;
+  const unsigned char *s = (const unsigned char *) A->str + lenA - 1;
+  const unsigned char *t = (const unsigned char *) B->str + lenB - 1;
   int l = lenA < lenB ? lenA : lenB;
   int tail_align = (lenA & (A->alignment - 1)) - (lenB & (A->alignment - 1));
 
@@ -618,8 +861,8 @@ is_suffix (const struct sec_merge_hash_e
        not to be equal by the hash table.  */
     return 0;
 
-  return memcmp (A->root.string + (A->len - B->len),
-		 B->root.string, B->len) == 0;
+  return memcmp (A->str + (A->len - B->len),
+		 B->str, B->len) == 0;
 }
 
 /* This is a helper function for _bfd_merge_sections.  It attempts to
@@ -685,21 +928,11 @@ merge_strings (struct sec_merge_info *si
 
   /* Now assign positions to the strings we want to keep.  */
   size = 0;
-  secinfo = sinfo->htab->first->secinfo;
+  secinfo = sinfo->chain;
   for (e = sinfo->htab->first; e; e = e->next)
     {
-      if (e->secinfo != secinfo)
-	{
-	  secinfo->sec->size = size;
-	  secinfo = e->secinfo;
-	}
       if (e->alignment)
 	{
-	  if (e->secinfo->first_str == NULL)
-	    {
-	      e->secinfo->first_str = e;
-	      size = 0;
-	    }
 	  size = (size + e->alignment - 1) & ~((bfd_vma) e->alignment - 1);
 	  e->u.index = size;
 	  size += e->len;
@@ -717,18 +950,21 @@ merge_strings (struct sec_merge_info *si
 	*a = e->next;
 	if (e->len)
 	  {
-	    e->secinfo = e->u.suffix->secinfo;
 	    e->alignment = e->u.suffix->alignment;
 	    e->u.index = e->u.suffix->u.index + (e->u.suffix->len - e->len);
 	  }
       }
+
+  BFD_ASSERT (!secinfo->first_str);
+  secinfo->first_str = sinfo->htab->first;
+
   return secinfo;
 }
 
 /* This function is called once after all SEC_MERGE sections are registered
    with _bfd_merge_section.  */
 
-bfd_boolean
+bool
 _bfd_merge_sections (bfd *abfd,
 		     struct bfd_link_info *info ATTRIBUTE_UNUSED,
 		     void *xsinfo,
@@ -739,16 +975,11 @@ _bfd_merge_sections (bfd *abfd,
   for (sinfo = (struct sec_merge_info *) xsinfo; sinfo; sinfo = sinfo->next)
     {
       struct sec_merge_sec_info *secinfo;
-      bfd_size_type align;
+      bfd_size_type align;  /* Bytes.  */
 
       if (! sinfo->chain)
 	continue;
 
-      /* Move sinfo->chain to head of the chain, terminate it.  */
-      secinfo = sinfo->chain;
-      sinfo->chain = secinfo->next;
-      secinfo->next = NULL;
-
       /* Record the sections into the hash table.  */
       align = 1;
       for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
@@ -761,11 +992,13 @@ _bfd_merge_sections (bfd *abfd,
 	else
 	  {
 	    if (!record_section (sinfo, secinfo))
-	      return FALSE;
+	      return false;
 	    if (align)
 	      {
+		unsigned int opb = bfd_octets_per_byte (abfd, secinfo->sec);
+
 		align = (bfd_size_type) 1 << secinfo->sec->alignment_power;
-		if ((secinfo->sec->size & (align - 1)) != 0)
+		if (((secinfo->sec->size / opb) & (align - 1)) != 0)
 		  align = 0;
 	      }
 	  }
@@ -777,29 +1010,27 @@ _bfd_merge_sections (bfd *abfd,
 	{
 	  secinfo = merge_strings (sinfo);
 	  if (!secinfo)
-	    return FALSE;
+	    return false;
 	}
       else
 	{
-	  struct sec_merge_hash_entry *e;
-	  bfd_size_type size = 0;
+	  struct sec_merge_hash_entry *e = sinfo->htab->first;
+	  bfd_size_type size = 0;  /* Octets.  */
 
 	  /* Things are much simpler for non-strings.
 	     Just assign them slots in the section.  */
-	  secinfo = NULL;
+	  secinfo = sinfo->chain;
+	  BFD_ASSERT (!secinfo->first_str);
+	  secinfo->first_str = e;
 	  for (e = sinfo->htab->first; e; e = e->next)
 	    {
-	      if (e->secinfo->first_str == NULL)
+	      if (e->alignment)
 		{
-		  if (secinfo)
-		    secinfo->sec->size = size;
-		  e->secinfo->first_str = e;
-		  size = 0;
+		  size = (size + e->alignment - 1)
+			 & ~((bfd_vma) e->alignment - 1);
+		  e->u.index = size;
+		  size += e->len;
 		}
-	      size = (size + e->alignment - 1) & ~((bfd_vma) e->alignment - 1);
-	      e->u.index = size;
-	      size += e->len;
-	      secinfo = e->secinfo;
 	    }
 	  secinfo->sec->size = size;
 	}
@@ -816,12 +1047,12 @@ _bfd_merge_sections (bfd *abfd,
 	  secinfo->sec->flags |= SEC_EXCLUDE | SEC_KEEP;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write out the merged section.  */
 
-bfd_boolean
+bool
 _bfd_write_merged_section (bfd *output_bfd, asection *sec, void *psecinfo)
 {
   struct sec_merge_sec_info *secinfo;
@@ -832,10 +1063,10 @@ _bfd_write_merged_section (bfd *output_b
   secinfo = (struct sec_merge_sec_info *) psecinfo;
 
   if (!secinfo)
-    return FALSE;
+    return false;
 
   if (secinfo->first_str == NULL)
-    return TRUE;
+    return true;
 
   /* FIXME: octets_per_byte.  */
   hdr = &elf_section_data (sec->output_section)->this_hdr;
@@ -844,8 +1075,7 @@ _bfd_write_merged_section (bfd *output_b
       /* We must compress this section.  Write output to the
 	 buffer.  */
       contents = hdr->contents;
-      if ((sec->output_section->flags & SEC_ELF_COMPRESS) == 0
-	  || contents == NULL)
+      if (contents == NULL)
 	abort ();
     }
   else
@@ -853,14 +1083,15 @@ _bfd_write_merged_section (bfd *output_b
       contents = NULL;
       pos = sec->output_section->filepos + sec->output_offset;
       if (bfd_seek (output_bfd, pos, SEEK_SET) != 0)
-	return FALSE;
+	return false;
     }
 
-  if (! sec_merge_emit (output_bfd, secinfo->first_str, contents,
-			sec->output_offset))
-    return FALSE;
+  BFD_ASSERT (sec == secinfo->sec);
+  BFD_ASSERT (secinfo == secinfo->sinfo->chain);
+  if (! sec_merge_emit (output_bfd, secinfo, contents))
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust an address in the SEC_MERGE section.  Given OFFSET within
@@ -872,8 +1103,6 @@ _bfd_merged_section_offset (bfd *output_
 			    void *psecinfo, bfd_vma offset)
 {
   struct sec_merge_sec_info *secinfo;
-  struct sec_merge_hash_entry *entry;
-  unsigned char *p;
   asection *sec = *psec;
 
   secinfo = (struct sec_merge_sec_info *) psecinfo;
@@ -891,55 +1120,27 @@ _bfd_merged_section_offset (bfd *output_
       return secinfo->first_str ? sec->size : 0;
     }
 
-  if (secinfo->htab->strings)
+  if (secinfo->fast_state != 2)
     {
-      if (sec->entsize == 1)
-	{
-	  p = secinfo->contents + offset - 1;
-	  while (p >= secinfo->contents && *p)
-	    --p;
-	  ++p;
-	}
-      else
-	{
-	  p = secinfo->contents + (offset / sec->entsize) * sec->entsize;
-	  p -= sec->entsize;
-	  while (p >= secinfo->contents)
-	    {
-	      unsigned int i;
-
-	      for (i = 0; i < sec->entsize; ++i)
-		if (p[i] != '\0')
-		  break;
-	      if (i == sec->entsize)
-		break;
-	      p -= sec->entsize;
-	    }
-	  p += sec->entsize;
-	}
-    }
-  else
-    {
-      p = secinfo->contents + (offset / sec->entsize) * sec->entsize;
-    }
-  entry = sec_merge_hash_lookup (secinfo->htab, (char *) p, 0, FALSE);
-  if (!entry)
-    {
-      if (! secinfo->htab->strings)
-	abort ();
-      /* This should only happen if somebody points into the padding
-	 after a NUL character but before next entity.  */
-      if (*p)
-	abort ();
-      if (! secinfo->htab->first)
-	abort ();
-      entry = secinfo->htab->first;
-      p = (secinfo->contents + (offset / sec->entsize + 1) * sec->entsize
-	   - entry->len);
-    }
-
-  *psec = entry->secinfo->sec;
-  return entry->u.index + (secinfo->contents + offset - p);
+      if (!secinfo->fast_state)
+	prepare_offsetmap (secinfo);
+      if (secinfo->fast_state != 2)
+	return offset;
+    }
+
+  long lb = secinfo->ofstolowbound[offset / OFSDIV];
+  *psec = secinfo->reprsec;
+
+  /* No need for bounds checking on lb, as we've added a sentinel that's
+     larger than any offset.  */
+  while (MAP_OFS(secinfo, lb) <= offset)
+    lb++;
+  lb--;
+
+  /*printf ("YYY (%s:%s):%u -> (%s):%u\n",
+	  sec->owner->filename, sec->name, (unsigned)offset,
+	  (*psec)->name, (unsigned)lb);*/
+  return MAP_IDX(secinfo, lb) + offset - MAP_OFS(secinfo, lb);
 }
 
 /* Tidy up when done.  */
@@ -951,6 +1152,13 @@ _bfd_merge_sections_free (void *xsinfo)
 
   for (sinfo = (struct sec_merge_info *) xsinfo; sinfo; sinfo = sinfo->next)
     {
+      struct sec_merge_sec_info *secinfo;
+      for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
+	{
+	  free (secinfo->ofstolowbound);
+	  free (secinfo->map);
+	  free (secinfo->map_ofs);
+	}
       bfd_hash_table_free (&sinfo->htab->table);
       free (sinfo->htab);
     }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mmo.c ./bfd/mmo.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/mmo.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/mmo.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for mmo objects (MMIX-specific object-format).
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Written by Hans-Peter Nilsson (hp@bitrange.com).
    Infrastructure and other bits originally copied from srec.c and
    binary.c.
@@ -207,7 +207,7 @@ EXAMPLE
 #include "elf/mmix.h"
 #include "opcode/mmix.h"
 
-#define LOP 0x98
+#define LOP 0x98u
 #define LOP_QUOTE 0
 #define LOP_LOC 1
 #define LOP_SKIP 2
@@ -307,7 +307,7 @@ struct mmo_data_struct
 
     /* When we're reading bytes recursively, check this occasionally.
        Also holds write errors.  */
-    bfd_boolean have_error;
+    bool have_error;
 
     /* Max symbol length that may appear in the lop_stab table.  Note that
        this table might just hold a subset of symbols for not-really large
@@ -334,10 +334,10 @@ struct mmo_data_struct
     /* Whether we've calculated symbol consistency requirement yet.  We do this
        when-needed, which must be at some time after all section
        contents is known.  */
-    bfd_boolean symbol_consistency_override_calculated;
+    bool symbol_consistency_override_calculated;
 
     /* Whether to consistency-check symbol values, in particular "Main".  */
-    bfd_boolean ignore_symbol_consistency;
+    bool ignore_symbol_consistency;
   };
 
 typedef struct mmo_data_struct tdata_type;
@@ -358,7 +358,7 @@ struct mmo_section_data_struct
 struct mmo_write_sec_info
   {
     asection *reg_section;
-    bfd_boolean retval;
+    bool retval;
   };
 
 /* Used when trying to find a section corresponding to addr.  */
@@ -368,7 +368,7 @@ struct mmo_find_sec_info
     bfd_vma addr;
   };
 
-static bfd_boolean mmo_bfd_copy_private_bfd_data (bfd *, bfd *);
+static bool mmo_bfd_copy_private_bfd_data (bfd *, bfd *);
 static void mmo_write_section_unless_reg_contents (bfd *, asection *, void *);
 static void mmo_find_sec_w_addr (bfd *, asection *, void *);
 static void mmo_find_sec_w_addr_grow (bfd *, asection *, void *);
@@ -377,59 +377,55 @@ static void mmo_get_symbol_info (bfd *,
 static void mmo_print_symbol (bfd *, void *, asymbol *,
 			      bfd_print_symbol_type);
 static void mmo_init (void);
-static bfd_boolean mmo_mkobject (bfd *);
-static bfd_boolean mmo_scan (bfd *);
+static bool mmo_mkobject (bfd *);
+static bool mmo_scan (bfd *);
 static asection *mmo_decide_section (bfd *, bfd_vma);
 static asection *mmo_get_generic_spec_data_section (bfd *, int);
 static asection *mmo_get_spec_section (bfd *, int);
-static INLINE bfd_byte *mmo_get_loc (asection *, bfd_vma, int);
-static void mmo_xore_64 (asection *, bfd_vma vma, bfd_vma value);
-static void mmo_xore_32 (asection *, bfd_vma vma, unsigned int);
-static void mmo_xore_16 (asection *, bfd_vma vma, unsigned int);
-static const bfd_target *mmo_object_p (bfd *);
+static bfd_byte *mmo_get_loc (asection *, bfd_vma, unsigned int);
+static bfd_cleanup mmo_object_p (bfd *);
 static void mmo_map_set_sizes (bfd *, asection *, void *);
-static bfd_boolean mmo_get_symbols (bfd *);
-static bfd_boolean mmo_create_symbol (bfd *, const char *, bfd_vma,
-				      enum mmo_sym_type, unsigned int);
-static bfd_boolean mmo_get_section_contents (bfd *, asection *, void *,
-					     file_ptr, bfd_size_type);
+static bool mmo_get_symbols (bfd *);
+static bool mmo_create_symbol (bfd *, const char *, bfd_vma,
+			       enum mmo_sym_type, unsigned int);
+static bool mmo_get_section_contents (bfd *, asection *, void *,
+				      file_ptr, bfd_size_type);
 static long mmo_get_symtab_upper_bound (bfd *);
 static long mmo_canonicalize_symtab (bfd *, asymbol **);
 static void mmo_get_symbol_info (bfd *, asymbol *, symbol_info *);
 static void mmo_print_symbol (bfd *, void *, asymbol *,
 			      bfd_print_symbol_type);
-static bfd_boolean mmo_set_section_contents (bfd *, sec_ptr, const void *,
-					     file_ptr, bfd_size_type);
+static bool mmo_set_section_contents (bfd *, sec_ptr, const void *,
+				      file_ptr, bfd_size_type);
 static int mmo_sizeof_headers (bfd *, struct bfd_link_info *);
-static bfd_boolean mmo_internal_write_header (bfd *);
-static bfd_boolean mmo_internal_write_post (bfd *, int, asection *);
-static bfd_boolean mmo_internal_add_3_sym (bfd *, struct mmo_symbol_trie *,
+static bool mmo_internal_write_header (bfd *);
+static bool mmo_internal_write_post (bfd *, int, asection *);
+static bool mmo_internal_add_3_sym (bfd *, struct mmo_symbol_trie *,
 					   const struct mmo_symbol *);
 static unsigned int mmo_internal_3_length (bfd *, struct mmo_symbol_trie *);
 static void mmo_internal_3_dump (bfd *, struct mmo_symbol_trie *);
 static void mmo_beb128_out (bfd *, int, int);
-static bfd_boolean mmo_internal_write_section (bfd *, asection *);
+static bool mmo_internal_write_section (bfd *, asection *);
 static void mmo_write_tetra (bfd *, unsigned int);
 static void mmo_write_tetra_raw (bfd *, unsigned int);
 static void mmo_write_octa (bfd *, bfd_vma);
 static void mmo_write_octa_raw (bfd *, bfd_vma);
-static bfd_boolean mmo_write_chunk (bfd *, const bfd_byte *, unsigned int);
-static bfd_boolean mmo_flush_chunk (bfd *);
-static bfd_boolean mmo_write_loc_chunk (bfd *, bfd_vma, const bfd_byte *,
-					unsigned int, bfd_vma *);
-static bfd_boolean mmo_write_chunk_list (bfd *, mmo_data_list_type *);
-static bfd_boolean mmo_write_loc_chunk_list (bfd *, mmo_data_list_type *);
-static bfd_boolean mmo_write_symbols_and_terminator (bfd *);
+static bool mmo_write_chunk (bfd *, const bfd_byte *, unsigned int);
+static bool mmo_flush_chunk (bfd *);
+static bool mmo_write_loc_chunk (bfd *, bfd_vma, const bfd_byte *,
+				 unsigned int, bfd_vma *);
+static bool mmo_write_chunk_list (bfd *, mmo_data_list_type *);
+static bool mmo_write_loc_chunk_list (bfd *, mmo_data_list_type *);
+static bool mmo_write_symbols_and_terminator (bfd *);
 static flagword mmo_sec_flags_from_bfd_flags (flagword);
 static flagword bfd_sec_flags_from_mmo_flags (flagword);
 static bfd_byte mmo_get_byte (bfd *);
 static void mmo_write_byte (bfd *, bfd_byte);
-static bfd_boolean mmo_new_section_hook (bfd *, asection *);
+static bool mmo_new_section_hook (bfd *, asection *);
 static int mmo_sort_mmo_symbols (const void *, const void *);
-static bfd_boolean mmo_write_object_contents (bfd *);
-static bfd_boolean mmo_write_section_description (bfd *, asection *);
-static bfd_boolean mmo_has_leading_or_trailing_zero_tetra_p (bfd *,
-							     asection *);
+static bool mmo_write_object_contents (bfd *);
+static bool mmo_write_section_description (bfd *, asection *);
+static bool mmo_has_leading_or_trailing_zero_tetra_p (bfd *, asection *);
 
 static const char
 valid_mmo_symbol_character_set[] =
@@ -467,17 +463,15 @@ mmo_make_section (bfd *abfd, const char
 
   if (sec == NULL)
     {
-      char *newsecname = strdup (secname);
+      size_t len = strlen (secname) + 1;
+      char *newsecname = bfd_alloc (abfd, len);
 
       if (newsecname == NULL)
 	{
-	  _bfd_error_handler
-	    /* xgettext:c-format */
-	    (_("%pB: no core to allocate section name %s"),
-	     abfd, secname);
-	  bfd_set_error (bfd_error_system_call);
+	  bfd_set_error (bfd_error_no_memory);
 	  return NULL;
 	}
+      memcpy (newsecname, secname, len);
       sec = bfd_make_section (abfd, newsecname);
     }
 
@@ -491,16 +485,16 @@ mmo_make_section (bfd *abfd, const char
 static void
 mmo_init (void)
 {
-  static bfd_boolean inited = FALSE;
+  static bool inited = false;
 
   if (inited)
     return;
-  inited = TRUE;
+  inited = true;
 }
 
 /* Check whether an existing file is an mmo file.  */
 
-static const bfd_target *
+static bfd_cleanup
 mmo_object_p (bfd *abfd)
 {
   struct stat statbuf;
@@ -509,8 +503,8 @@ mmo_object_p (bfd *abfd)
   mmo_init ();
 
   if (bfd_stat (abfd, &statbuf) < 0
-      || bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_bread (b, 4, abfd) != 4)
+      || bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_read (b, 4, abfd) != 4)
     goto bad_final;
 
   /* All mmo files are a multiple of four bytes long.
@@ -520,8 +514,8 @@ mmo_object_p (bfd *abfd)
     goto bad_format;
 
   /* Get the last 32-bit word.  */
-  if (bfd_seek (abfd, (file_ptr) statbuf.st_size - 4, SEEK_SET) != 0
-      || bfd_bread (b, 4, abfd) != 4)
+  if (bfd_seek (abfd, statbuf.st_size - 4, SEEK_SET) != 0
+      || bfd_read (b, 4, abfd) != 4)
     goto bad_final;
 
   /* Check if the file ends in a lop_end lopcode. */
@@ -532,7 +526,7 @@ mmo_object_p (bfd *abfd)
      important as all of the symbol information can only be 256k.  */
   abfd->tdata.mmo_data->max_symbol_length = (b[2] * 256 + b[3]) * 4;
   abfd->tdata.mmo_data->lop_stab_symbol
-    = bfd_malloc (abfd->tdata.mmo_data->max_symbol_length + 1);
+    = bfd_alloc (abfd, abfd->tdata.mmo_data->max_symbol_length + 1);
 
   if (abfd->tdata.mmo_data->lop_stab_symbol == NULL)
     {
@@ -545,7 +539,7 @@ mmo_object_p (bfd *abfd)
 
   /* Read in everything.  */
   if (! mmo_scan (abfd))
-    goto bad_format_free;
+    goto bad_format;
 
   if (abfd->symcount > 0)
     abfd->flags |= HAS_SYMS;
@@ -554,12 +548,10 @@ mmo_object_p (bfd *abfd)
      arches (not recommended due to its small-size limitations).  Look at
      the ELF format for how to make it target-generic.  */
   if (! bfd_default_set_arch_mach (abfd, bfd_arch_mmix, 0))
-    goto bad_format_free;
+    goto bad_format;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
- bad_format_free:
-  free (abfd->tdata.mmo_data->lop_stab_symbol);
  bad_format:
   bfd_set_error (bfd_error_wrong_format);
  bad_final:
@@ -568,7 +560,7 @@ mmo_object_p (bfd *abfd)
 
 /* Set up the mmo tdata information.  */
 
-static bfd_boolean
+static bool
 mmo_mkobject (bfd *abfd)
 {
   mmo_init ();
@@ -579,9 +571,9 @@ mmo_mkobject (bfd *abfd)
 
       /* All fields are zero-initialized, so we don't have to explicitly
 	 initialize most.  */
-      tdata_type *tdata = (tdata_type *) bfd_zmalloc (sizeof (tdata_type));
+      tdata_type *tdata = (tdata_type *) bfd_zalloc (abfd, sizeof (tdata_type));
       if (tdata == NULL)
-	return FALSE;
+	return false;
 
       created = time (NULL);
       bfd_put_32 (abfd, created, tdata->created);
@@ -589,10 +581,10 @@ mmo_mkobject (bfd *abfd)
       abfd->tdata.mmo_data = tdata;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 mmo_section_has_contents (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *p ATTRIBUTE_UNUSED)
 {
   /* The point is to match what --extract-symbols does (well, negated).  */
@@ -606,7 +598,7 @@ mmo_section_has_contents (bfd *abfd ATTR
    known.  However, calculating symbol consistency at the time the
    private BFD data is initialized is too late for some uses.  */
 
-static bfd_boolean
+static bool
 mmo_ignore_symbol_consistency (bfd *abfd)
 {
   if (!abfd->tdata.mmo_data->symbol_consistency_override_calculated)
@@ -614,25 +606,25 @@ mmo_ignore_symbol_consistency (bfd *abfd
       abfd->tdata.mmo_data->ignore_symbol_consistency =
 	bfd_sections_find_if (abfd, mmo_section_has_contents, NULL) == NULL;
 
-      abfd->tdata.mmo_data->symbol_consistency_override_calculated = TRUE;
+      abfd->tdata.mmo_data->symbol_consistency_override_calculated = true;
     }
 
   return abfd->tdata.mmo_data->ignore_symbol_consistency;
 }
 
-static bfd_boolean
+static bool
 mmo_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   if (bfd_get_flavour (ibfd) != bfd_target_mmo_flavour
       || bfd_get_flavour (obfd) != bfd_target_mmo_flavour)
-    return TRUE;
+    return true;
 
   /* Copy the time the copied-from file was created.  If people want the
      time the file was last *modified*, they have that in the normal file
      information.  */
   memcpy (obfd->tdata.mmo_data->created, ibfd->tdata.mmo_data->created,
 	  sizeof (obfd->tdata.mmo_data->created));
-  return TRUE;
+  return true;
 }
 
 /* Helper functions for mmo_decide_section, used through
@@ -731,7 +723,7 @@ mmo_decide_section (bfd *abfd, bfd_vma v
   sprintf (sec_name, ".MMIX.sec.%d", abfd->tdata.mmo_data->sec_no++);
   sec = mmo_make_section (abfd, sec_name);
 
-  if (!sec->user_set_vma && !bfd_set_section_vma (sec, vma))
+  if (!sec || (!sec->user_set_vma && !bfd_set_section_vma (sec, vma)))
     return NULL;
 
   if (!bfd_set_section_flags (sec, (bfd_section_flags (sec)
@@ -742,56 +734,68 @@ mmo_decide_section (bfd *abfd, bfd_vma v
 
 /* Xor in a 64-bit value VALUE at VMA.  */
 
-static INLINE void
+static inline bfd_byte *
 mmo_xore_64 (asection *sec, bfd_vma vma, bfd_vma value)
 {
   bfd_byte *loc = mmo_get_loc (sec, vma, 8);
-  bfd_vma prev = bfd_get_64 (sec->owner, loc);
+  if (loc)
+    {
+      bfd_vma prev = bfd_get_64 (sec->owner, loc);
 
-  value ^= prev;
-  bfd_put_64 (sec->owner, value, loc);
+      value ^= prev;
+      bfd_put_64 (sec->owner, value, loc);
+    }
+  return loc;
 }
 
 /* Xor in a 32-bit value VALUE at VMA.  */
 
-static INLINE void
+static inline bfd_byte *
 mmo_xore_32 (asection *sec, bfd_vma vma, unsigned int value)
 {
   bfd_byte *loc = mmo_get_loc (sec, vma, 4);
-  unsigned int prev = bfd_get_32 (sec->owner, loc);
+  if (loc)
+    {
+      unsigned int prev = bfd_get_32 (sec->owner, loc);
 
-  value ^= prev;
-  bfd_put_32 (sec->owner, value, loc);
+      value ^= prev;
+      bfd_put_32 (sec->owner, value, loc);
+    }
+  return loc;
 }
 
 /* Xor in a 16-bit value VALUE at VMA.  */
 
-static INLINE void
+static inline bfd_byte *
 mmo_xore_16 (asection *sec, bfd_vma vma, unsigned int value)
 {
   bfd_byte *loc = mmo_get_loc (sec, vma, 2);
-  unsigned int prev = bfd_get_16 (sec->owner, loc);
+  if (loc)
+    {
+      unsigned int prev = bfd_get_16 (sec->owner, loc);
 
-  value ^= prev;
-  bfd_put_16 (sec->owner, value, loc);
+      value ^= prev;
+      bfd_put_16 (sec->owner, value, loc);
+    }
+  return loc;
 }
 
 /* Write a 32-bit word to output file, no lop_quote generated.  */
 
-static INLINE void
+static inline void
 mmo_write_tetra_raw (bfd *abfd, unsigned int value)
 {
   bfd_byte buf[4];
 
   bfd_put_32 (abfd, value, buf);
 
-  if (bfd_bwrite (buf, 4, abfd) != 4)
-    abfd->tdata.mmo_data->have_error = TRUE;
+  if (bfd_write (buf, 4, abfd) != 4)
+    abfd->tdata.mmo_data->have_error = true;
 }
 
 /* Write a 32-bit word to output file; lop_quote if necessary.  */
 
-static INLINE void
+static inline void
 mmo_write_tetra (bfd *abfd, unsigned int value)
 {
   if (((value >> 24) & 0xff) == LOP)
@@ -802,7 +806,7 @@ mmo_write_tetra (bfd *abfd, unsigned int
 
 /* Write a 64-bit word to output file, perhaps with lop_quoting.  */
 
-static INLINE void
+static inline void
 mmo_write_octa (bfd *abfd, bfd_vma value)
 {
   mmo_write_tetra (abfd, (unsigned int) (value >> 32));
@@ -811,7 +815,7 @@ mmo_write_octa (bfd *abfd, bfd_vma value
 
 /* Write a 64-bit word to output file, without lop_quoting.  */
 
-static INLINE void
+static inline void
 mmo_write_octa_raw (bfd *abfd, bfd_vma value)
 {
   mmo_write_tetra_raw (abfd, (unsigned int) (value >> 32));
@@ -821,10 +825,10 @@ mmo_write_octa_raw (bfd *abfd, bfd_vma v
 /* Write quoted contents.  Intended to be called multiple times in
    sequence, followed by a call to mmo_flush_chunk.  */
 
-static INLINE bfd_boolean
+static inline bool
 mmo_write_chunk (bfd *abfd, const bfd_byte *loc, unsigned int len)
 {
-  bfd_boolean retval = TRUE;
+  bool retval = true;
   struct mmo_data_struct *mmop = abfd->tdata.mmo_data;
 
   /* Fill up a tetra from bytes remaining from a previous chunk.  */
@@ -850,7 +854,7 @@ mmo_write_chunk (bfd *abfd, const bfd_by
 
       retval = (retval
 		&& ! mmop->have_error
-		&& 4 == bfd_bwrite (loc, 4, abfd));
+		&& 4 == bfd_write (loc, 4, abfd));
 
       loc += 4;
       len -= 4;
@@ -866,14 +870,14 @@ mmo_write_chunk (bfd *abfd, const bfd_by
     }
 
   if (! retval)
-    mmop->have_error = TRUE;
+    mmop->have_error = true;
   return retval;
 }
 
 /* Flush remaining bytes, from a previous mmo_write_chunk, zero-padded to
    4 bytes.  */
 
-static INLINE bfd_boolean
+static inline bool
 mmo_flush_chunk (bfd *abfd)
 {
   if (abfd->tdata.mmo_data->byte_no != 0)
@@ -890,12 +894,12 @@ mmo_flush_chunk (bfd *abfd)
 
 /* Same, but from a list.  */
 
-static INLINE bfd_boolean
+static inline bool
 mmo_write_chunk_list (bfd *abfd, mmo_data_list_type *datap)
 {
   for (; datap != NULL; datap = datap->next)
     if (! mmo_write_chunk (abfd, datap->data, datap->size))
-      return FALSE;
+      return false;
 
   return mmo_flush_chunk (abfd);
 }
@@ -904,7 +908,7 @@ mmo_write_chunk_list (bfd *abfd, mmo_dat
    mmo_flush_chunk after calling this function.  The location is only
    output if different than *LAST_VMAP, which is updated after this call.  */
 
-static bfd_boolean
+static bool
 mmo_write_loc_chunk (bfd *abfd, bfd_vma vma, const bfd_byte *loc,
 		     unsigned int len, bfd_vma *last_vmap)
 {
@@ -953,7 +957,7 @@ mmo_write_loc_chunk (bfd *abfd, bfd_vma
 	       " address %#" PRIx64 ""),
 	     abfd, (uint64_t) vma);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       /* We always write the location as 64 bits; no use saving bytes
@@ -971,7 +975,7 @@ mmo_write_loc_chunk (bfd *abfd, bfd_vma
 
 /* Same, but from a list.  */
 
-static INLINE bfd_boolean
+static inline bool
 mmo_write_loc_chunk_list (bfd *abfd, mmo_data_list_type *datap)
 {
   /* Get an address different than the address of the first chunk.  */
@@ -980,7 +984,7 @@ mmo_write_loc_chunk_list (bfd *abfd, mmo
   for (; datap != NULL; datap = datap->next)
     if (! mmo_write_loc_chunk (abfd, datap->where, datap->data, datap->size,
 			       &last_vma))
-      return FALSE;
+      return false;
 
   return mmo_flush_chunk (abfd);
 }
@@ -1028,7 +1032,7 @@ mmo_get_spec_section (bfd *abfd, int spe
   orig_pos = bfd_tell (abfd);
 
   /* Read the length (in 32-bit words).  */
-  if (bfd_bread (buf, 4, abfd) != 4)
+  if (bfd_read (buf, 4, abfd) != 4)
     goto format_error;
 
   if (buf[0] == LOP)
@@ -1036,7 +1040,7 @@ mmo_get_spec_section (bfd *abfd, int spe
       if (buf[1] != LOP_QUOTE)
 	goto format_error;
 
-      if (bfd_bread (buf, 4, abfd) != 4)
+      if (bfd_read (buf, 4, abfd) != 4)
 	goto format_error;
     }
 
@@ -1054,7 +1058,7 @@ mmo_get_spec_section (bfd *abfd, int spe
 
   for (i = 0; i < secname_length / 4; i++)
     {
-      if (bfd_bread (secname + i * 4, 4, abfd) != 4)
+      if (bfd_read (secname + i * 4, 4, abfd) != 4)
 	goto format_error_free;
 
       if (secname[i * 4] == (char) LOP)
@@ -1062,7 +1066,7 @@ mmo_get_spec_section (bfd *abfd, int spe
 	  /* A bit of overkill, but we handle char 0x98 in a section name,
 	     and recognize misparsing.  */
 	  if (secname[i * 4 + 1] != LOP_QUOTE
-	      || bfd_bread (secname + i * 4, 4, abfd) != 4)
+	      || bfd_read (secname + i * 4, 4, abfd) != 4)
 	    /* Whoops.  We thought this was a name, and now we found a
 	       non-lop_quote lopcode before we parsed the whole length of
 	       the name.  Signal end-of-file in the same manner.  */
@@ -1071,26 +1075,26 @@ mmo_get_spec_section (bfd *abfd, int spe
     }
 
   /* Get the section flags.  */
-  if (bfd_bread (buf, 4, abfd) != 4
+  if (bfd_read (buf, 4, abfd) != 4
       || (buf[0] == LOP
-	  && (buf[1] != LOP_QUOTE || bfd_bread (buf, 4, abfd) != 4)))
+	  && (buf[1] != LOP_QUOTE || bfd_read (buf, 4, abfd) != 4)))
     goto format_error_free;
 
   flags = bfd_get_32 (abfd, buf);
 
   /* Get the section length.  */
-  if (bfd_bread (buf, 4, abfd) != 4
+  if (bfd_read (buf, 4, abfd) != 4
       || (buf[0] == LOP
-	  && (buf[1] != LOP_QUOTE || bfd_bread (buf, 4, abfd) != 4)))
+	  && (buf[1] != LOP_QUOTE || bfd_read (buf, 4, abfd) != 4)))
     goto format_error_free;
 
   section_length = (bfd_vma) bfd_get_32 (abfd, buf) << 32;
 
   /* That's the first, high-part.  Now get the low part.  */
 
-  if (bfd_bread (buf, 4, abfd) != 4
+  if (bfd_read (buf, 4, abfd) != 4
       || (buf[0] == LOP
-	  && (buf[1] != LOP_QUOTE || bfd_bread (buf, 4, abfd) != 4)))
+	  && (buf[1] != LOP_QUOTE || bfd_read (buf, 4, abfd) != 4)))
     goto format_error_free;
 
   section_length |= (bfd_vma) bfd_get_32 (abfd, buf);
@@ -1100,17 +1104,17 @@ mmo_get_spec_section (bfd *abfd, int spe
     goto format_error_free;
 
   /* Get the section VMA.  */
-  if (bfd_bread (buf, 4, abfd) != 4
+  if (bfd_read (buf, 4, abfd) != 4
       || (buf[0] == LOP
-	  && (buf[1] != LOP_QUOTE || bfd_bread (buf, 4, abfd) != 4)))
+	  && (buf[1] != LOP_QUOTE || bfd_read (buf, 4, abfd) != 4)))
     goto format_error_free;
 
   section_vma = (bfd_vma) bfd_get_32 (abfd, buf) << 32;
 
   /* That's the first, high-part.  Now get the low part.  */
-  if (bfd_bread (buf, 4, abfd) != 4
+  if (bfd_read (buf, 4, abfd) != 4
       || (buf[0] == LOP
-	  && (buf[1] != LOP_QUOTE || bfd_bread (buf, 4, abfd) != 4)))
+	  && (buf[1] != LOP_QUOTE || bfd_read (buf, 4, abfd) != 4)))
     goto format_error_free;
 
   section_vma |= (bfd_vma) bfd_get_32 (abfd, buf);
@@ -1122,8 +1126,8 @@ mmo_get_spec_section (bfd *abfd, int spe
 
   /* We allocate a buffer here for the advertised size, with head room for
      tetrabyte alignment.  */
-  loc = bfd_zmalloc (section_length + 3
-		     + sizeof (struct mmo_data_list_struct));
+  loc = bfd_zalloc (abfd, (section_length + 3
+			   + sizeof (struct mmo_data_list_struct)));
   if (loc == NULL)
     goto format_error;
 
@@ -1174,15 +1178,14 @@ mmo_get_byte (bfd *abfd)
 
   if (abfd->tdata.mmo_data->byte_no == 0)
     {
-      if (! abfd->tdata.mmo_data->have_error
-	  && bfd_bread (abfd->tdata.mmo_data->buf, 4, abfd) != 4)
-	{
-	  abfd->tdata.mmo_data->have_error = TRUE;
-
-	  /* A value somewhat safe against tripping on some inconsistency
-	     when mopping up after this error.  */
-	  return 128;
-	}
+      if (!abfd->tdata.mmo_data->have_error
+	  && bfd_read (abfd->tdata.mmo_data->buf, 4, abfd) != 4)
+	abfd->tdata.mmo_data->have_error = true;
+
+      /* A value somewhat safe against tripping on some inconsistency
+	 when mopping up after this error.  */
+      if (abfd->tdata.mmo_data->have_error)
+	return 128;
     }
 
   retval = abfd->tdata.mmo_data->buf[abfd->tdata.mmo_data->byte_no];
@@ -1200,14 +1203,14 @@ mmo_write_byte (bfd *abfd, bfd_byte valu
   if ((abfd->tdata.mmo_data->byte_no % 4) == 0)
     {
       if (! abfd->tdata.mmo_data->have_error
-	  && bfd_bwrite (abfd->tdata.mmo_data->buf, 4, abfd) != 4)
-	abfd->tdata.mmo_data->have_error = TRUE;
+	  && bfd_write (abfd->tdata.mmo_data->buf, 4, abfd) != 4)
+	abfd->tdata.mmo_data->have_error = true;
     }
 }
 
 /* Create a symbol.  */
 
-static bfd_boolean
+static bool
 mmo_create_symbol (bfd *abfd, const char *symname, bfd_vma addr, enum
 		   mmo_sym_type sym_type, unsigned int serno)
 {
@@ -1215,11 +1218,11 @@ mmo_create_symbol (bfd *abfd, const char
 
   n = (struct mmo_symbol *) bfd_alloc (abfd, sizeof (struct mmo_symbol));
   if (n == NULL)
-    return FALSE;
+    return false;
 
   n->name = bfd_alloc (abfd, strlen (symname) + 1);
   if (n->name == NULL)
-    return FALSE;
+    return false;
 
   strcpy (n->name, symname);
 
@@ -1249,15 +1252,15 @@ mmo_create_symbol (bfd *abfd, const char
 	   " is not `Main'\n"),
 	 abfd);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read in symbols.  */
 
-static bfd_boolean
+static bool
 mmo_get_symbols (bfd *abfd)
 {
 /*
@@ -1363,7 +1366,7 @@ SUBSECTION
 
   /* Check first if we have a bad hair day.  */
   if (abfd->tdata.mmo_data->have_error)
-    return FALSE;
+    return false;
 
   if (m & MMO3_LEFT)
     /* Traverse left trie. */
@@ -1396,13 +1399,23 @@ SUBSECTION
 		   " 0x%02X 0x%02X after symbol name starting with `%s'\n"),
 		 abfd, c, c2, abfd->tdata.mmo_data->lop_stab_symbol);
 	      bfd_set_error (bfd_error_bad_value);
-	      abfd->tdata.mmo_data->have_error = TRUE;
-	      return FALSE;
+	      abfd->tdata.mmo_data->have_error = true;
+	      return false;
 	    }
 	  else
 	    c = c2;
 	}
 
+      if (abfd->tdata.mmo_data->symbol_position
+	  >= abfd->tdata.mmo_data->max_symbol_length)
+	{
+	  _bfd_error_handler
+	    /* xgettext:c-format */
+	    (_("%pB: symbol name exceeds given max length of %d"),
+	     abfd, abfd->tdata.mmo_data->max_symbol_length);
+	  abfd->tdata.mmo_data->have_error = true;
+	  return false;
+	}
       abfd->tdata.mmo_data->lop_stab_symbol[abfd->tdata.mmo_data->symbol_position++] = c;
       abfd->tdata.mmo_data->lop_stab_symbol[abfd->tdata.mmo_data->symbol_position] = 0;
 
@@ -1451,7 +1464,7 @@ SUBSECTION
 				      abfd->tdata.mmo_data->lop_stab_symbol
 				      + 1,
 				      addr, sym_type, serno))
-	    abfd->tdata.mmo_data->have_error = TRUE;
+	    abfd->tdata.mmo_data->have_error = true;
 	}
 
       if (m & MMO3_MIDDLE)
@@ -1473,8 +1486,8 @@ SUBSECTION
    If there's new contents, allocate to the next multiple of
    MMO_SEC_CONTENTS_CHUNK_SIZE.  */
 
-static INLINE bfd_byte *
-mmo_get_loc (asection *sec, bfd_vma vma, int size)
+static bfd_byte *
+mmo_get_loc (asection *sec, bfd_vma vma, unsigned int size)
 {
   bfd_size_type allocated_size;
   struct mmo_section_data_struct *sdatap = mmo_section_data (sec);
@@ -1486,27 +1499,29 @@ mmo_get_loc (asection *sec, bfd_vma vma,
   for (; datap != NULL; datap = datap->next)
     {
       if (datap->where <= vma
-	  && datap->where + datap->size >= vma + size)
-	return datap->data + vma - datap->where;
+	  && datap->size >= size
+	  && datap->size - size >= vma - datap->where)
+	return datap->data + (vma - datap->where);
       else if (datap->where <= vma
-	       && datap->where + datap->allocated_size >= vma + size
+	       && datap->allocated_size >= size
+	       && datap->allocated_size - size >= vma - datap->where
 	       /* Only munch on the "allocated size" if it does not
 		  overlap the next chunk.  */
 	       && (datap->next == NULL || datap->next->where >= vma + size))
 	{
 	  /* There was room allocated, but the size wasn't set to include
 	     it.  Do that now.  */
-	  datap->size += (vma + size) - (datap->where + datap->size);
+	  datap->size = vma - datap->where + size;
 
 	  /* Update the section size.  This happens only if we update the
 	     32-bit-aligned chunk size.  Callers that have
 	     non-32-bit-aligned sections should do all allocation and
 	     size-setting by themselves or at least set the section size
 	     after the last allocating call to this function.  */
-	  if (vma + size > sec->vma + sec->size)
-	    sec->size += (vma + size) - (sec->vma + sec->size);
+	  if (vma - sec->vma + size > sec->size)
+	    sec->size = vma - sec->vma + size;
 
-	  return datap->data + vma - datap->where;
+	  return datap->data + (vma - datap->where);
 	}
     }
 
@@ -1517,7 +1532,7 @@ mmo_get_loc (asection *sec, bfd_vma vma,
      for no more than MMO_SEC_CONTENTS_CHUNK_SIZE will always get resolved.  */
 
   for (datap = sdatap->head; datap != NULL; datap = datap->next)
-    if ((datap->where <= vma && datap->where + datap->size > vma)
+    if ((datap->where <= vma && datap->size > vma - datap->where)
 	|| (datap->where < vma + size
 	    && datap->where + datap->size >= vma + size))
       return NULL;
@@ -1565,8 +1580,8 @@ mmo_get_loc (asection *sec, bfd_vma vma,
 
   /* Update the section size.  This happens only when we add contents and
      re-size as we go.  The section size will then be aligned to 32 bits.  */
-  if (vma + size > sec->vma + sec->size)
-    sec->size += (vma + size) - (sec->vma + sec->size);
+  if (vma - sec->vma + size > sec->size)
+    sec->size = vma - sec->vma + size;
   return entry->data;
 }
 
@@ -1581,14 +1596,14 @@ mmo_map_set_sizes (bfd *abfd ATTRIBUTE_U
 
 /* Read the mmo file and turn it into sections.  */
 
-static bfd_boolean
+static bool
 mmo_scan (bfd *abfd)
 {
   unsigned int i;
-  unsigned int lineno = 1;
-  bfd_boolean error = FALSE;
+  unsigned int lineno ATTRIBUTE_UNUSED = 1;
+  bool error = false;
   bfd_vma vma = 0;
-  asection *sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME);
+  asection *sec = NULL;
   asection *non_spec_sec = NULL;
   bfd_vma non_spec_vma = 0;
   bfd_size_type nbytes_read = 0;
@@ -1600,10 +1615,10 @@ mmo_scan (bfd *abfd)
   abfd->symcount = 0;
   memset (file_names, 0, sizeof (file_names));
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
     goto error_return;
 
-  while ((nbytes_read = bfd_bread (buf, 4, abfd)) == 4)
+  while ((nbytes_read = bfd_read (buf, 4, abfd)) == 4)
     {
       if (buf[0] == LOP)
 	{
@@ -1642,11 +1657,17 @@ mmo_scan (bfd *abfd)
 		  bfd_set_error (bfd_error_bad_value);
 		  goto error_return;
 		}
-	      if (bfd_bread (buf, 4, abfd) != 4)
+	      if (bfd_read (buf, 4, abfd) != 4)
 		goto error_return;
 
 	      vma &= ~3;
-	      mmo_xore_32 (sec, vma, bfd_get_32 (abfd, buf));
+	      if (sec == NULL)
+		sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME);
+	      if (!mmo_xore_32 (sec, vma, bfd_get_32 (abfd, buf)))
+		{
+		  bfd_set_error (bfd_error_bad_value);
+		  goto error_return;
+		}
 	      vma += 4;
 	      lineno++;
 	      break;
@@ -1657,7 +1678,7 @@ mmo_scan (bfd *abfd)
 	      if (z == 1)
 		{
 		  /* Get a 32-bit value.  */
-		  if (bfd_bread (buf, 4, abfd) != 4)
+		  if (bfd_read (buf, 4, abfd) != 4)
 		    goto error_return;
 
 		  vma += bfd_get_32 (abfd, buf);
@@ -1665,7 +1686,7 @@ mmo_scan (bfd *abfd)
 	      else if (z == 2)
 		{
 		  /* Get a 64-bit value.  */
-		  if (bfd_bread (buf, 8, abfd) != 8)
+		  if (bfd_read (buf, 8, abfd) != 8)
 		    goto error_return;
 
 		  vma += bfd_get_64 (abfd, buf);
@@ -1708,7 +1729,7 @@ mmo_scan (bfd *abfd)
 		if (z == 1)
 		  {
 		    /* Get a 32-bit value.  */
-		    if (bfd_bread (buf, 4, abfd) != 4)
+		    if (bfd_read (buf, 4, abfd) != 4)
 		      goto error_return;
 
 		    p += bfd_get_32 (abfd, buf);
@@ -1716,7 +1737,7 @@ mmo_scan (bfd *abfd)
 		else if (z == 2)
 		  {
 		    /* Get a 64-bit value.  */
-		    if (bfd_bread (buf, 8, abfd) != 8)
+		    if (bfd_read (buf, 8, abfd) != 8)
 		      goto error_return;
 
 		    p += bfd_get_64 (abfd, buf);
@@ -1737,7 +1758,11 @@ mmo_scan (bfd *abfd)
 		fixosec = mmo_decide_section (abfd, p);
 		if (fixosec == NULL)
 		  goto error_return;
-		mmo_xore_64 (fixosec, p, vma);
+		if (!mmo_xore_64 (fixosec, p, vma))
+		  {
+		    bfd_set_error (bfd_error_bad_value);
+		    goto error_return;
+		  }
 	      }
 	    break;
 
@@ -1749,7 +1774,11 @@ mmo_scan (bfd *abfd)
 		asection *fixrsec = mmo_decide_section (abfd, p);
 		if (fixrsec == NULL)
 		  goto error_return;
-		mmo_xore_16 (fixrsec, p, yz);
+		if (!mmo_xore_16 (fixrsec, p, yz))
+		  {
+		    bfd_set_error (bfd_error_bad_value);
+		    goto error_return;
+		  }
 	      }
 	    break;
 
@@ -1785,7 +1814,7 @@ mmo_scan (bfd *abfd)
 		  }
 
 		/* Get the next 32-bit value.  */
-		if (bfd_bread (buf, 4, abfd) != 4)
+		if (bfd_read (buf, 4, abfd) != 4)
 		  goto error_return;
 
 		delta = bfd_get_32 (abfd, buf);
@@ -1812,7 +1841,11 @@ mmo_scan (bfd *abfd)
 		fixrsec = mmo_decide_section (abfd, vma);
 		if (fixrsec == NULL)
 		  goto error_return;
-		mmo_xore_32 (fixrsec, p, delta);
+		if (!mmo_xore_32 (fixrsec, p, delta))
+		  {
+		    bfd_set_error (bfd_error_bad_value);
+		    goto error_return;
+		  }
 	      }
 	    break;
 
@@ -1838,7 +1871,7 @@ mmo_scan (bfd *abfd)
 
 		  for (i = 0; i < z; i++)
 		    {
-		      if (bfd_bread (fname + i * 4, 4, abfd) != 4)
+		      if (bfd_read (fname + i * 4, 4, abfd) != 4)
 			{
 			  free (fname);
 			  goto error_return;
@@ -1853,6 +1886,7 @@ mmo_scan (bfd *abfd)
 			   " was already entered as `%s'\n"),
 			 abfd, y, fname, file_names[y]);
 		      bfd_set_error (bfd_error_bad_value);
+		      free (fname);
 		      goto error_return;
 		    }
 
@@ -1899,12 +1933,12 @@ mmo_scan (bfd *abfd)
 		   creation time from the first 32-bit word with the time
 		   in seconds since era.  */
 		if (z >= 1
-		    && bfd_bread (abfd->tdata.mmo_data->created, 4,
+		    && bfd_read (abfd->tdata.mmo_data->created, 4,
 				 abfd) != 4)
 		  goto error_return;
 
 		for (i = 1; i < z; i++)
-		  if (bfd_bread (buf, 4, abfd) != 4)
+		  if (bfd_read (buf, 4, abfd) != 4)
 		    goto error_return;
 	      }
 	      break;
@@ -1921,7 +1955,7 @@ mmo_scan (bfd *abfd)
 
 		/* Read first octaword outside loop to simplify logic when
 		   excluding the Z == 255, octa == 0 case.  */
-		if (bfd_bread (buf, 8, abfd) != 8)
+		if (bfd_read (buf, 8, abfd) != 8)
 		  goto error_return;
 
 		first_octa = bfd_get_64 (abfd, buf);
@@ -1936,17 +1970,22 @@ mmo_scan (bfd *abfd)
 		    rsec->flags |= SEC_LINKER_CREATED;
 		    rsec->vma = z * 8;
 		    loc = mmo_get_loc (rsec, z * 8, (255 - z) * 8);
+		    if (!loc)
+		      {
+			bfd_set_error (bfd_error_bad_value);
+			goto error_return;
+		      }
 		    bfd_put_64 (abfd, first_octa, loc);
 
 		    for (i = z + 1; i < 255; i++)
 		      {
-			if (bfd_bread (loc + (i - z) * 8, 8, abfd) != 8)
+			if (bfd_read (loc + (i - z) * 8, 8, abfd) != 8)
 			  goto error_return;
 		      }
 
 		    /* Read out the last octabyte, and use it to set the
 		       start address.  */
-		    if (bfd_bread (buf, 8, abfd) != 8)
+		    if (bfd_read (buf, 8, abfd) != 8)
 		      goto error_return;
 
 		    startaddr_octa = bfd_get_64 (abfd, buf);
@@ -2038,7 +2077,13 @@ mmo_scan (bfd *abfd)
       else
 	{
 	  /* This wasn't a lopcode, so store it in the current section.  */
-	  mmo_xore_32 (sec, vma & ~3, bfd_get_32 (abfd, buf));
+	  if (sec == NULL)
+	    sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME);
+	  if (!mmo_xore_32 (sec, vma & ~3, bfd_get_32 (abfd, buf)))
+	    {
+	      bfd_set_error (bfd_error_bad_value);
+	      goto error_return;
+	    }
 	  vma += 4;
 	  vma &= ~3;
 	  lineno++;
@@ -2057,7 +2102,7 @@ mmo_scan (bfd *abfd)
     bfd_set_error (bfd_error_bad_value);
 
  error_return:
-  error = TRUE;
+  error = true;
  done:
   /* Mark the .text and .data section with their normal attribute if they
      contain anything.  This is not redundant wrt. mmo_decide_section,
@@ -2068,26 +2113,25 @@ mmo_scan (bfd *abfd)
       && (bfd_section_flags (sec) & SEC_HAS_CONTENTS)
       && !bfd_set_section_flags (sec, (bfd_section_flags (sec)
 				       | SEC_ALLOC | SEC_LOAD | SEC_CODE)))
-    error = TRUE;
+    error = true;
 
   sec = bfd_get_section_by_name (abfd, MMO_DATA_SECTION_NAME);
   if (sec != NULL
       && (bfd_section_flags (sec) & SEC_HAS_CONTENTS)
       && !bfd_set_section_flags (sec, (bfd_section_flags (sec)
-				       | SEC_ALLOC | SEC_LOAD)))
-    error = TRUE;
+				       | SEC_ALLOC | SEC_LOAD | SEC_DATA)))
+    error = true;
 
   /* Free whatever resources we took.  */
   for (i = 0; i < sizeof (file_names) / sizeof (file_names[0]); i++)
-    if (file_names[i])
-      free (file_names[i]);
+    free (file_names[i]);
   return ! error;
 }
 
 /* A hook to set up object file dependent section information.  For mmo,
    we point out the shape of allocated section contents.  */
 
-static bfd_boolean
+static bool
 mmo_new_section_hook (bfd *abfd, asection *newsect)
 {
   if (!newsect->used_by_bfd)
@@ -2097,7 +2141,7 @@ mmo_new_section_hook (bfd *abfd, asectio
       newsect->used_by_bfd
 	= bfd_zalloc (abfd, sizeof (struct mmo_section_data_struct));
       if (!newsect->used_by_bfd)
-	return FALSE;
+	return false;
     }
 
   /* Always align to at least 32-bit words.  */
@@ -2108,7 +2152,7 @@ mmo_new_section_hook (bfd *abfd, asectio
 /* We already have section contents loaded for sections that have
    contents.  */
 
-static bfd_boolean
+static bool
 mmo_get_section_contents (bfd *abfd ATTRIBUTE_UNUSED,
 			  asection *sec,
 			  void * location,
@@ -2131,7 +2175,7 @@ mmo_get_section_contents (bfd *abfd ATTR
       while (loc == NULL && (chunk_size /= 2) != 0);
 
       if (chunk_size == 0)
-	return FALSE;
+	return false;
 
       memcpy (location, loc, chunk_size);
 
@@ -2139,7 +2183,7 @@ mmo_get_section_contents (bfd *abfd ATTR
       bytes_to_do -= chunk_size;
       offset += chunk_size;
     }
-  return TRUE;
+  return true;
 }
 
 /* Return the amount of memory needed to read the symbol table.  */
@@ -2319,19 +2363,19 @@ mmo_sizeof_headers (bfd *abfd ATTRIBUTE_
 
 /* Write the (section-neutral) file preamble.  */
 
-static bfd_boolean
+static bool
 mmo_internal_write_header (bfd *abfd)
 {
   const char lop_pre_bfd[] = { LOP, LOP_PRE, 1, 1};
 
-  if (bfd_bwrite (lop_pre_bfd, 4, abfd) != 4)
-    return FALSE;
+  if (bfd_write (lop_pre_bfd, 4, abfd) != 4)
+    return false;
 
   /* Copy creation time of original file.  */
-  if (bfd_bwrite (abfd->tdata.mmo_data->created, 4, abfd) != 4)
-    return FALSE;
+  if (bfd_write (abfd->tdata.mmo_data->created, 4, abfd) != 4)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Write the LOP_POST record, with global register initializations.
@@ -2339,7 +2383,7 @@ mmo_internal_write_header (bfd *abfd)
    registers at DATA.  The Z = 255 field is filled in with the
    start-address.  */
 
-static bfd_boolean
+static bool
 mmo_internal_write_post (bfd *abfd, int z, asection *sec)
 {
   int i;
@@ -2350,8 +2394,8 @@ mmo_internal_write_post (bfd *abfd, int
     {
       bfd_byte *data = mmo_get_loc (sec, i * 8, 8);
 
-      if (bfd_bwrite (data, 8, abfd) != 8)
-	return FALSE;
+      if (bfd_write (data, 8, abfd) != 8)
+	return false;
     }
 
   /* For Z == $255, we always emit the start location; supposedly Main,
@@ -2359,7 +2403,7 @@ mmo_internal_write_post (bfd *abfd, int
      Z == 255, don't assume DATA is valid.  */
   bfd_put_64 (abfd, bfd_get_start_address (abfd), buf);
 
-  return ! abfd->tdata.mmo_data->have_error && bfd_bwrite (buf, 8, abfd) == 8;
+  return ! abfd->tdata.mmo_data->have_error && bfd_write (buf, 8, abfd) == 8;
 }
 
 /* Translate to and from BFD flags.  This is to make sure that we don't
@@ -2422,25 +2466,25 @@ bfd_sec_flags_from_mmo_flags (flagword f
 /* Return TRUE iff the leading or trailing tetrabyte in SEC is defined and
    is 0.  */
 
-static bfd_boolean
+static bool
 mmo_has_leading_or_trailing_zero_tetra_p (bfd *abfd, asection *sec)
 {
   bfd_vma secaddr = bfd_section_vma (sec);
 
   if (sec->size < 4)
-    return FALSE;
+    return false;
 
   if (bfd_get_32 (abfd, mmo_get_loc (sec, secaddr, 4)) == 0
       && bfd_get_32 (abfd,
 		     mmo_get_loc (sec, secaddr + sec->size - 4, 4)) == 0)
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Write a section.  */
 
-static bfd_boolean
+static bool
 mmo_internal_write_section (bfd *abfd, asection *sec)
 {
   /* We do it differently depending on what section this is:
@@ -2470,7 +2514,7 @@ mmo_internal_write_section (bfd *abfd, a
 	      || mmo_has_leading_or_trailing_zero_tetra_p (abfd, sec)))
 	{
 	  if (!mmo_write_section_description (abfd, sec))
-	    return FALSE;
+	    return false;
 	}
 
       /* FIXME: Output source file name and line number.  */
@@ -2489,7 +2533,7 @@ mmo_internal_write_section (bfd *abfd, a
 	      || mmo_has_leading_or_trailing_zero_tetra_p (abfd, sec)))
 	{
 	  if (!mmo_write_section_description (abfd, sec))
-	    return FALSE;
+	    return false;
 	}
 
       return mmo_write_loc_chunk_list (abfd, mmo_section_data (sec)->head);
@@ -2500,9 +2544,9 @@ mmo_internal_write_section (bfd *abfd, a
       /* This would normally be an abort call since this can't happen, but
 	 we don't do that.  */
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
-  else if (CONST_STRNEQ (sec->name, MMIX_OTHER_SPEC_SECTION_PREFIX))
+  else if (startswith (sec->name, MMIX_OTHER_SPEC_SECTION_PREFIX))
     {
       int n = atoi (sec->name + strlen (MMIX_OTHER_SPEC_SECTION_PREFIX));
 
@@ -2516,7 +2560,7 @@ mmo_internal_write_section (bfd *abfd, a
 	   && sec->size != 0)
     {
       if (!mmo_write_section_description (abfd, sec))
-	return FALSE;
+	return false;
 
       /* Writing a LOP_LOC ends the LOP_SPEC data, and makes data actually
 	 loaded.  */
@@ -2529,12 +2573,12 @@ mmo_internal_write_section (bfd *abfd, a
     }
 
   /* Some section without contents.  */
-  return TRUE;
+  return true;
 }
 
 /* Write the description of a section, extended-mmo-style.  */
 
-static bfd_boolean
+static bool
 mmo_write_section_description (bfd *abfd, asection *sec)
 {
   /* Keep the following document-comment formatted the way it is.  */
@@ -2642,12 +2686,12 @@ EXAMPLE
 		   mmo_sec_flags_from_bfd_flags (bfd_section_flags (sec)));
   mmo_write_octa (abfd, sec->size);
   mmo_write_octa (abfd, bfd_section_vma (sec));
-  return TRUE;
+  return true;
 }
 
 /* We save up all data before output.  */
 
-static bfd_boolean
+static bool
 mmo_set_section_contents (bfd *abfd ATTRIBUTE_UNUSED, sec_ptr sec,
 			  const void *location, file_ptr offset,
 			  bfd_size_type bytes_to_do)
@@ -2667,7 +2711,7 @@ mmo_set_section_contents (bfd *abfd ATTR
       while (loc == NULL && (chunk_size /= 2) != 0);
 
       if (chunk_size == 0)
-	return FALSE;
+	return false;
 
       memcpy (loc, location, chunk_size);
 
@@ -2675,12 +2719,12 @@ mmo_set_section_contents (bfd *abfd ATTR
       bytes_to_do -= chunk_size;
       offset += chunk_size;
     }
-  return TRUE;
+  return true;
 }
 
 /* Add a symbol to a trie-tree.  */
 
-static bfd_boolean
+static bool
 mmo_internal_add_3_sym (bfd *abfd, struct mmo_symbol_trie *rootp,
 			const struct mmo_symbol *symp)
 {
@@ -2732,11 +2776,11 @@ mmo_internal_add_3_sym (bfd *abfd, struc
 	(_("%pB: invalid symbol table: duplicate symbol `%s'\n"),
 	 abfd, trie->sym.name);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   memcpy (&trie->sym, symp, sizeof *symp);
-  return TRUE;
+  return true;
 }
 
 /* Find out the length of the serialized version of a trie in bytes.  */
@@ -2904,7 +2948,7 @@ mmo_internal_3_dump (bfd *abfd, struct m
 
 /* Write symbols in mmo format.  Also write the lop_end terminator.  */
 
-static bfd_boolean
+static bool
 mmo_write_symbols_and_terminator (bfd *abfd)
 {
   int count = bfd_get_symcount (abfd);
@@ -2933,9 +2977,10 @@ mmo_write_symbols_and_terminator (bfd *a
      symbols.  Make sure we have room for it.  */
   table = bfd_alloc (abfd, (count + 1) * sizeof (asymbol *));
   if (table == NULL)
-    return FALSE;
+    return false;
 
-  memcpy (table, orig_table, count * sizeof (asymbol *));
+  if (count != 0)
+    memcpy (table, orig_table, count * sizeof (asymbol *));
 
   /* Move :Main (if there is one) to the first position.  This is
      necessary to get the same layout of the trie-tree when linking as
@@ -2963,20 +3008,15 @@ mmo_write_symbols_and_terminator (bfd *a
 	  {
 	    /* Arbitrary buffer to hold the printable representation of a
 	       vma.  */
-	    char vmas_main[40];
-	    char vmas_start[40];
 	    bfd_vma vma_start = bfd_get_start_address (abfd);
 
-	    sprintf_vma (vmas_main, mainvalue);
-	    sprintf_vma (vmas_start, vma_start);
-
 	    _bfd_error_handler
 	      /* xgettext:c-format */
-	      (_("%pB: bad symbol definition: `Main' set to %s rather"
-		 " than the start address %s\n"),
-	       abfd, vmas_main, vmas_start);
+	      (_("%pB: bad symbol definition: `Main' set to %" PRIx64 " rather"
+		 " than the start address %" PRIx64 "\n"),
+	       abfd, mainvalue, vma_start);
 	    bfd_set_error (bfd_error_bad_value);
-	    return FALSE;
+	    return false;
 	  }
 	break;
       }
@@ -3046,7 +3086,7 @@ mmo_write_symbols_and_terminator (bfd *a
 	      sym.serno = serno++;
 
 	      if (! mmo_internal_add_3_sym (abfd, &root, &sym))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -3089,7 +3129,7 @@ mmo_write_symbols_and_terminator (bfd *a
       root.right = NULL;
 
       if (! mmo_internal_add_3_sym (abfd, &root, &sym))
-	return FALSE;
+	return false;
 
       root.symchar = ':';
       root.middle = root.left;
@@ -3104,8 +3144,8 @@ mmo_write_symbols_and_terminator (bfd *a
 
   /* Put out the lop_stab mark.  */
   bfd_put_32 (abfd, (LOP << 24) | (LOP_STAB << 16), buf);
-  if (bfd_bwrite (buf, 4, abfd) != 4)
-    return FALSE;
+  if (bfd_write (buf, 4, abfd) != 4)
+    return false;
 
   /* Dump out symbols.  */
   mmo_internal_3_dump (abfd, &root);
@@ -3122,7 +3162,7 @@ mmo_write_symbols_and_terminator (bfd *a
 	 abfd, trie_len,
 	 (abfd->tdata.mmo_data->byte_no + 3)/4);
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   /* Dump out remaining bytes in the buffer and handle I/O errors by
@@ -3134,12 +3174,12 @@ mmo_write_symbols_and_terminator (bfd *a
 	      0, 4 - (abfd->tdata.mmo_data->byte_no % 4));
 
       if (abfd->tdata.mmo_data->have_error
-	  || bfd_bwrite (abfd->tdata.mmo_data->buf, 4, abfd) != 4)
-	return FALSE;
+	  || bfd_write (abfd->tdata.mmo_data->buf, 4, abfd) != 4)
+	return false;
     }
 
   bfd_put_32 (abfd, (LOP << 24) | (LOP_END << 16) | trie_len, buf);
-  return bfd_bwrite (buf, 4, abfd) == 4;
+  return bfd_write (buf, 4, abfd) == 4;
 }
 
 /* Write section unless it is the register contents section.  For that, we
@@ -3174,7 +3214,7 @@ mmo_write_section_unless_reg_contents (b
 	       " contents\n"),
 	     abfd, sec);
 	  bfd_set_error (bfd_error_bad_value);
-	  infop->retval = FALSE;
+	  infop->retval = false;
 	  return;
 	}
 
@@ -3187,23 +3227,23 @@ mmo_write_section_unless_reg_contents (b
 /* Do the actual output of a file.  Assumes mmo_set_section_contents is
    already called. */
 
-static bfd_boolean
+static bool
 mmo_write_object_contents (bfd *abfd)
 {
   struct mmo_write_sec_info wsecinfo;
 
   /* First, there are a few words of preamble.  */
   if (! mmo_internal_write_header (abfd))
-    return FALSE;
+    return false;
 
   wsecinfo.reg_section = NULL;
-  wsecinfo.retval = TRUE;
+  wsecinfo.retval = true;
 
   bfd_map_over_sections (abfd, mmo_write_section_unless_reg_contents,
 			 &wsecinfo);
 
   if (! wsecinfo.retval)
-    return FALSE;
+    return false;
 
   if (wsecinfo.reg_section != NULL)
     {
@@ -3237,15 +3277,15 @@ mmo_write_object_contents (bfd *abfd)
 		 " length %" PRId64 ": %#" PRIx64),
 	       abfd, (int64_t) sec->size, (uint64_t) sec->vma);
 
-	  return FALSE;
+	  return false;
 	}
 
       if (! mmo_internal_write_post (abfd, z, sec))
-	return FALSE;
+	return false;
     }
   else
     if (! mmo_internal_write_post (abfd, 255, NULL))
-      return FALSE;
+      return false;
 
   return mmo_write_symbols_and_terminator (abfd);
 }
@@ -3275,6 +3315,7 @@ mmo_write_object_contents (bfd *abfd)
 /* FIXME: We can do better on this one, if we have a dwarf2 .debug_line
    section or if MMO line numbers are implemented.  */
 #define mmo_find_nearest_line _bfd_nosymbols_find_nearest_line
+#define mmo_find_nearest_line_with_alt _bfd_nosymbols_find_nearest_line_with_alt
 #define mmo_find_line _bfd_nosymbols_find_line
 #define mmo_find_inliner_info _bfd_nosymbols_find_inliner_info
 #define mmo_make_empty_symbol _bfd_generic_make_empty_symbol
@@ -3340,6 +3381,7 @@ const bfd_target mmix_mmo_vec =
   ' ',				/* ar_pad_char */
   16,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/netbsd-core.c ./bfd/netbsd-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/netbsd-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/netbsd-core.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back end for NetBSD style core files
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
    Written by Paul Kranenburg, EUR
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -51,7 +51,7 @@ struct netbsd_core_struct
 
 /* Handle NetBSD-style core dump file.  */
 
-static const bfd_target *
+static bfd_cleanup
 netbsd_core_file_p (bfd *abfd)
 {
   int val;
@@ -60,9 +60,9 @@ netbsd_core_file_p (bfd *abfd)
   asection *asect;
   struct core core;
   struct coreseg coreseg;
-  bfd_size_type amt = sizeof core;
+  size_t amt = sizeof core;
 
-  val = bfd_bread (&core, amt, abfd);
+  val = bfd_read (&core, amt, abfd);
   if (val != sizeof core)
     {
       /* Too small to be a core file.  */
@@ -93,7 +93,7 @@ netbsd_core_file_p (bfd *abfd)
       if (bfd_seek (abfd, offset, SEEK_SET) != 0)
 	goto punt;
 
-      val = bfd_bread (&coreseg, sizeof coreseg, abfd);
+      val = bfd_read (&coreseg, sizeof coreseg, abfd);
       if (val != sizeof coreseg)
 	{
 	  bfd_set_error (bfd_error_file_truncated);
@@ -222,7 +222,7 @@ netbsd_core_file_p (bfd *abfd)
     }
 
   /* OK, we believe you.  You're a core file (sure, sure).  */
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  punt:
   bfd_release (abfd, abfd->tdata.any);
@@ -257,9 +257,9 @@ swap_abort (void)
 #define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
 #define	NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
 #define	NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
-#define	NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
-#define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
-#define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
+#define	NO_GET64 ((uint64_t (*) (const void *)) swap_abort)
+#define	NO_PUT64 ((void (*) (uint64_t, void *)) swap_abort)
+#define	NO_GETS64 ((int64_t (*) (const void *)) swap_abort)
 
 const bfd_target core_netbsd_vec =
   {
@@ -276,6 +276,7 @@ const bfd_target core_netbsd_vec =
     ' ',			/* ar_pad_char.  */
     16,				/* ar_max_namelen.  */
     0,				/* Match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
     NO_GET64, NO_GETS64, NO_PUT64,	/* 64 bit data.  */
     NO_GET, NO_GETS, NO_PUT,		/* 32 bit data.  */
     NO_GET, NO_GETS, NO_PUT,		/* 16 bit data.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/netbsd.h ./bfd/netbsd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/netbsd.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/netbsd.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end definitions used by all NetBSD targets.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -48,7 +48,7 @@
 	 ((execp)->a_info & 0xfb00ffff) | ((((int) (machtype)) & 0x3ff) << 16))
 #define N_SET_FLAGS(execp, flags) \
 	((execp)->a_info = \
-	 ((execp)->a_info & 0x03ffffff) | ((flags & 0x03f) << 26))
+	 ((execp)->a_info & 0x03ffffff) | ((flags & 0x3fu) << 26))
 
 #include "sysdep.h"
 #include "bfd.h"
@@ -64,7 +64,7 @@
 #define MY_entry_is_text_address 1
 
 #define MY_write_object_contents MY (write_object_contents)
-static bfd_boolean MY (write_object_contents) (bfd *);
+static bool MY (write_object_contents) (bfd *);
 
 #define MY_text_includes_header 1
 
@@ -74,7 +74,7 @@ static bfd_boolean MY (write_object_cont
    Section contents have already been written.  We write the
    file header, symbols, and relocation.  */
 
-static bfd_boolean
+static bool
 MY (write_object_contents) (bfd *abfd)
 {
   struct external_exec exec_bytes;
@@ -104,11 +104,11 @@ MY (write_object_contents) (bfd *abfd)
   /* XXX aren't there any macro to change byteorder of a word independent of
      the host's or target's endiannesses?  */
   execp->a_info
-    = (execp->a_info & 0xff) << 24 | (execp->a_info & 0xff00) << 8
+    = (execp->a_info & 0xffu) << 24 | (execp->a_info & 0xff00) << 8
       | (execp->a_info & 0xff0000) >> 8 | (execp->a_info & 0xff000000) >> 24;
 #endif
 
   WRITE_HEADERS (abfd, execp);
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ns32k.h ./bfd/ns32k.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ns32k.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/ns32k.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for ns32k routines.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ns32knetbsd.c ./bfd/ns32knetbsd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ns32knetbsd.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/ns32knetbsd.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for NetBSD/ns32k a.out-ish binaries.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/opncls.c ./bfd/opncls.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/opncls.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/opncls.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* opncls.c -- open and close a BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Written by Cygnus Support.
 
@@ -37,22 +37,40 @@
 #define S_IXOTH 0001	/* Execute by others.  */
 #endif
 
+/*
+SECTION
+	Opening and closing BFDs
+
+SUBSECTION
+	Functions for opening and closing
+*/
+
 /* Counters used to initialize the bfd identifier.  */
 
 static unsigned int bfd_id_counter = 0;
 static unsigned int bfd_reserved_id_counter = 0;
 
 /*
-CODE_FRAGMENT
+EXTERNAL
 .{* Set to N to open the next N BFDs using an alternate id space.  *}
 .extern unsigned int bfd_use_reserved_id;
+.
 */
 unsigned int bfd_use_reserved_id = 0;
 
 /* fdopen is a loser -- we should use stdio exclusively.  Unfortunately
    if we do that we can't use fcntl.  */
 
-/* Return a new BFD.  All BFD's are allocated through this routine.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_new_bfd
+
+SYNOPSIS
+	bfd *_bfd_new_bfd (void);
+
+DESCRIPTION
+	Return a new BFD.  All BFD's are allocated through this routine.
+*/
 
 bfd *
 _bfd_new_bfd (void)
@@ -63,6 +81,8 @@ _bfd_new_bfd (void)
   if (nbfd == NULL)
     return NULL;
 
+  if (!bfd_lock ())
+    return NULL;
   if (bfd_use_reserved_id)
     {
       nbfd->id = --bfd_reserved_id_counter;
@@ -70,6 +90,11 @@ _bfd_new_bfd (void)
     }
   else
     nbfd->id = bfd_id_counter++;
+  if (!bfd_unlock ())
+    {
+      free (nbfd);
+      return NULL;
+    }
 
   nbfd->memory = objalloc_create ();
   if (nbfd->memory == NULL)
@@ -84,22 +109,40 @@ _bfd_new_bfd (void)
   if (!bfd_hash_table_init_n (& nbfd->section_htab, bfd_section_hash_newfunc,
 			      sizeof (struct section_hash_entry), 13))
     {
+      objalloc_free ((struct objalloc *) nbfd->memory);
       free (nbfd);
       return NULL;
     }
 
+  nbfd->archive_plugin_fd = -1;
+
   return nbfd;
 }
 
 static const struct bfd_iovec opncls_iovec;
 
-/* Allocate a new BFD as a member of archive OBFD.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_new_bfd_contained_in
+
+SYNOPSIS
+	bfd *_bfd_new_bfd_contained_in (bfd *);
+
+DESCRIPTION
+	Allocate a new BFD as a member of archive OBFD.
+*/
 
 bfd *
 _bfd_new_bfd_contained_in (bfd *obfd)
 {
   bfd *nbfd;
 
+  /* Nested archives in bims are unsupported.  */
+  if ((obfd->flags & BFD_IN_MEMORY) != 0)
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return NULL;
+    }
   nbfd = _bfd_new_bfd ();
   if (nbfd == NULL)
     return NULL;
@@ -120,25 +163,62 @@ _bfd_new_bfd_contained_in (bfd *obfd)
 static void
 _bfd_delete_bfd (bfd *abfd)
 {
+  /* Give the target _bfd_free_cached_info a chance to free memory.  */
+  if (abfd->memory && abfd->xvec)
+    bfd_free_cached_info (abfd);
+
+  /* The target _bfd_free_cached_info may not have done anything..  */
   if (abfd->memory)
     {
       bfd_hash_table_free (&abfd->section_htab);
       objalloc_free ((struct objalloc *) abfd->memory);
     }
+  else
+    free ((char *) bfd_get_filename (abfd));
 
-  if (abfd->filename)
-    free ((char *) abfd->filename);
   free (abfd->arelt_data);
   free (abfd);
 }
 
-/* Free objalloc memory.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_free_cached_info
+
+SYNOPSIS
+	bool _bfd_free_cached_info (bfd *);
 
-bfd_boolean
+DESCRIPTION
+	Free objalloc memory.
+*/
+
+bool
 _bfd_free_cached_info (bfd *abfd)
 {
   if (abfd->memory)
     {
+      const char *filename = bfd_get_filename (abfd);
+      if (filename)
+	{
+	  /* We can't afford to lose the bfd filename when freeing
+	     abfd->memory, because that would kill the cache.c scheme
+	     of closing and reopening files in order to limit the
+	     number of open files.  To reopen, you need the filename.
+	     And indeed _bfd_compute_and_write_armap calls
+	     _bfd_free_cached_info to free up space used by symbols
+	     and by check_format_matches.  Which we want to continue
+	     doing to handle very large archives.  Later the archive
+	     elements are copied, which might require reopening files.
+	     We also want to keep using objalloc memory for the
+	     filename since that allows the name to be updated
+	     without either leaking memory or implementing some sort
+	     of reference counted string for copies of the filename.  */
+	  size_t len = strlen (filename) + 1;
+	  char *copy = bfd_malloc (len);
+	  if (copy == NULL)
+	    return false;
+	  memcpy (copy, filename, len);
+	  abfd->filename = copy;
+	}
       bfd_hash_table_free (&abfd->section_htab);
       objalloc_free ((struct objalloc *) abfd->memory);
 
@@ -150,18 +230,10 @@ _bfd_free_cached_info (bfd *abfd)
       abfd->memory = NULL;
     }
 
-  return TRUE;
+  return true;
 }
 
 /*
-SECTION
-	Opening and closing BFDs
-
-SUBSECTION
-	Functions for opening and closing
-*/
-
-/*
 FUNCTION
 	bfd_fopen
 
@@ -233,8 +305,7 @@ bfd_fopen (const char *filename, const c
 
   /* PR 11983: Do not cache the original filename, but
      rather make a copy - the original might go away.  */
-  nbfd->filename = bfd_strdup (filename);
-  if (nbfd->filename == NULL)
+  if (!bfd_set_filename (nbfd, filename))
     {
       fclose (nbfd->iostream);
       _bfd_delete_bfd (nbfd);
@@ -257,14 +328,14 @@ bfd_fopen (const char *filename, const c
       _bfd_delete_bfd (nbfd);
       return NULL;
     }
-  nbfd->opened_once = TRUE;
+  nbfd->opened_once = true;
 
   /* If we opened the file by name, mark it cacheable; we can close it
      and reopen it later.  However, if a file descriptor was provided,
      then it may have been opened with special flags that make it
      unsafe to close and reopen the file.  */
   if (fd == -1)
-    (void) bfd_set_cacheable (nbfd, TRUE);
+    (void) bfd_set_cacheable (nbfd, true);
 
   return nbfd;
 }
@@ -372,6 +443,39 @@ bfd_fdopenr (const char *filename, const
 
 /*
 FUNCTION
+	bfd_fdopenw
+
+SYNOPSIS
+	bfd *bfd_fdopenw (const char *filename, const char *target, int fd);
+
+DESCRIPTION
+	<<bfd_fdopenw>> is exactly like <<bfd_fdopenr>> with the exception that
+	the resulting BFD is suitable for output.
+*/
+
+bfd *
+bfd_fdopenw (const char *filename, const char *target, int fd)
+{
+  bfd *out = bfd_fdopenr (filename, target, fd);
+
+  if (out != NULL)
+    {
+      if (!bfd_write_p (out))
+	{
+	  close (fd);
+	  _bfd_delete_bfd (out);
+	  out = NULL;
+	  bfd_set_error (bfd_error_invalid_operation);
+	}
+      else
+	out->direction = write_direction;
+    }
+
+  return out;
+}
+
+/*
+FUNCTION
 	bfd_openstreamr
 
 SYNOPSIS
@@ -407,8 +511,7 @@ bfd_openstreamr (const char *filename, c
   nbfd->iostream = stream;
   /* PR 11983: Do not cache the original filename, but
      rather make a copy - the original might go away.  */
-  nbfd->filename = bfd_strdup (filename);
-  if (nbfd->filename == NULL)
+  if (!bfd_set_filename (nbfd, filename))
     {
       _bfd_delete_bfd (nbfd);
       return NULL;
@@ -608,8 +711,7 @@ bfd_openr_iovec (const char *filename, c
 
   /* PR 11983: Do not cache the original filename, but
      rather make a copy - the original might go away.  */
-  nbfd->filename = bfd_strdup (filename);
-  if (nbfd->filename == NULL)
+  if (!bfd_set_filename (nbfd, filename))
     {
       _bfd_delete_bfd (nbfd);
       return NULL;
@@ -680,8 +782,7 @@ bfd_openw (const char *filename, const c
 
   /* PR 11983: Do not cache the original filename, but
      rather make a copy - the original might go away.  */
-  nbfd->filename = bfd_strdup (filename);
-  if (nbfd->filename == NULL)
+  if (!bfd_set_filename (nbfd, filename))
     {
       _bfd_delete_bfd (nbfd);
       return NULL;
@@ -699,6 +800,51 @@ bfd_openw (const char *filename, const c
   return nbfd;
 }
 
+/*
+FUNCTION
+	bfd_elf_bfd_from_remote_memory
+
+SYNOPSIS
+	bfd *bfd_elf_bfd_from_remote_memory
+	  (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
+	   int (*target_read_memory)
+	     (bfd_vma vma, bfd_byte *myaddr, bfd_size_type len));
+
+DESCRIPTION
+	Create a new BFD as if by bfd_openr.  Rather than opening a
+	file, reconstruct an ELF file by reading the segments out of
+	remote memory based on the ELF file header at EHDR_VMA and the
+	ELF program headers it points to.  If non-zero, SIZE is the
+	known extent of the object.  If not null, *LOADBASEP is filled
+	in with the difference between the VMAs from which the
+	segments were read, and the VMAs the file headers (and hence
+	BFD's idea of each section's VMA) put them at.
+
+	The function TARGET_READ_MEMORY is called to copy LEN bytes
+	from the remote memory at target address VMA into the local
+	buffer at MYADDR; it should return zero on success or an
+	errno code on failure.  TEMPL must be a BFD for an ELF
+	target with the word size and byte order found in the remote
+	memory.
+*/
+
+bfd *
+bfd_elf_bfd_from_remote_memory
+  (bfd *templ,
+   bfd_vma ehdr_vma,
+   bfd_size_type size,
+   bfd_vma *loadbasep,
+   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
+{
+  if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return NULL;
+    }
+  return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
+    (templ, ehdr_vma, size, loadbasep, target_read_memory);
+}
+
 static inline void
 _maybe_make_executable (bfd * abfd)
 {
@@ -709,7 +855,7 @@ _maybe_make_executable (bfd * abfd)
     {
       struct stat buf;
 
-      if (stat (abfd->filename, &buf) == 0
+      if (stat (bfd_get_filename (abfd), &buf) == 0
 	  /* Do not attempt to change non-regular files.  This is
 	     here especially for configure scripts and kernel builds
 	     which run tests with "ld [...] -o /dev/null".  */
@@ -718,7 +864,7 @@ _maybe_make_executable (bfd * abfd)
 	  unsigned int mask = umask (0);
 
 	  umask (mask);
-	  chmod (abfd->filename,
+	  chmod (bfd_get_filename (abfd),
 		 (0777
 		  & (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask))));
 	}
@@ -730,7 +876,7 @@ FUNCTION
 	bfd_close
 
 SYNOPSIS
-	bfd_boolean bfd_close (bfd *abfd);
+	bool bfd_close (bfd *abfd);
 
 DESCRIPTION
 	Close a BFD. If the BFD was open for writing, then pending
@@ -743,20 +889,16 @@ DESCRIPTION
 	The file descriptor associated with the BFD is closed (even
 	if it was passed in to BFD by <<bfd_fdopenr>>).
 
-RETURNS
 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
 */
 
-bfd_boolean
+bool
 bfd_close (bfd *abfd)
 {
-  if (bfd_write_p (abfd))
-    {
-      if (! BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)))
-	return FALSE;
-    }
+  bool ret = (!bfd_write_p (abfd)
+	      || BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)));
 
-  return bfd_close_all_done (abfd);
+  return bfd_close_all_done (abfd) && ret;
 }
 
 /*
@@ -764,7 +906,7 @@ FUNCTION
 	bfd_close_all_done
 
 SYNOPSIS
-	bfd_boolean bfd_close_all_done (bfd *);
+	bool bfd_close_all_done (bfd *);
 
 DESCRIPTION
 	Close a BFD.  Differs from <<bfd_close>> since it does not
@@ -777,24 +919,22 @@ DESCRIPTION
 
 	All memory attached to the BFD is released.
 
-RETURNS
 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
 */
 
-bfd_boolean
+bool
 bfd_close_all_done (bfd *abfd)
 {
-  bfd_boolean ret;
-
-  if (! BFD_SEND (abfd, _close_and_cleanup, (abfd)))
-    return FALSE;
+  bool ret = BFD_SEND (abfd, _close_and_cleanup, (abfd));
 
-  ret = abfd->iovec->bclose (abfd) == 0;
+  if (abfd->iovec != NULL)
+    ret &= abfd->iovec->bclose (abfd) == 0;
 
   if (ret)
     _maybe_make_executable (abfd);
 
   _bfd_delete_bfd (abfd);
+  _bfd_clear_error_data ();
 
   return ret;
 }
@@ -825,8 +965,7 @@ bfd_create (const char *filename, bfd *t
     return NULL;
   /* PR 11983: Do not cache the original filename, but
      rather make a copy - the original might go away.  */
-  nbfd->filename = bfd_strdup (filename);
-  if (nbfd->filename == NULL)
+  if (!bfd_set_filename (nbfd, filename))
     {
       _bfd_delete_bfd (nbfd);
       return NULL;
@@ -844,7 +983,7 @@ FUNCTION
 	bfd_make_writable
 
 SYNOPSIS
-	bfd_boolean bfd_make_writable (bfd *abfd);
+	bool bfd_make_writable (bfd *abfd);
 
 DESCRIPTION
 	Takes a BFD as created by <<bfd_create>> and converts it
@@ -852,11 +991,10 @@ DESCRIPTION
 	by converting the BFD to BFD_IN_MEMORY.  It's assumed that
 	you will call <<bfd_make_readable>> on this bfd later.
 
-RETURNS
 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
 */
 
-bfd_boolean
+bool
 bfd_make_writable (bfd *abfd)
 {
   struct bfd_in_memory *bim;
@@ -864,14 +1002,14 @@ bfd_make_writable (bfd *abfd)
   if (abfd->direction != no_direction)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   bim = (struct bfd_in_memory *) bfd_malloc (sizeof (struct bfd_in_memory));
   if (bim == NULL)
-    return FALSE;	/* bfd_error already set.  */
+    return false;	/* bfd_error already set.  */
   abfd->iostream = bim;
-  /* bfd_bwrite will grow these as needed.  */
+  /* bfd_write will grow these as needed.  */
   bim->size = 0;
   bim->buffer = 0;
 
@@ -881,7 +1019,7 @@ bfd_make_writable (bfd *abfd)
   abfd->direction = write_direction;
   abfd->where = 0;
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -889,7 +1027,7 @@ FUNCTION
 	bfd_make_readable
 
 SYNOPSIS
-	bfd_boolean bfd_make_readable (bfd *abfd);
+	bool bfd_make_readable (bfd *abfd);
 
 DESCRIPTION
 	Takes a BFD as created by <<bfd_create>> and
@@ -898,23 +1036,22 @@ DESCRIPTION
 	contents out to the memory buffer, then reversing the
 	direction.
 
-RETURNS
 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.  */
 
-bfd_boolean
+bool
 bfd_make_readable (bfd *abfd)
 {
   if (abfd->direction != write_direction || !(abfd->flags & BFD_IN_MEMORY))
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   if (! BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)))
-    return FALSE;
+    return false;
 
   if (! BFD_SEND (abfd, _close_and_cleanup, (abfd)))
-    return FALSE;
+    return false;
 
   abfd->arch_info = &bfd_default_arch_struct;
 
@@ -922,157 +1059,27 @@ bfd_make_readable (bfd *abfd)
   abfd->format = bfd_unknown;
   abfd->my_archive = NULL;
   abfd->origin = 0;
-  abfd->opened_once = FALSE;
-  abfd->output_has_begun = FALSE;
+  abfd->opened_once = false;
+  abfd->output_has_begun = false;
   abfd->section_count = 0;
   abfd->usrdata = NULL;
-  abfd->cacheable = FALSE;
-  abfd->flags |= BFD_IN_MEMORY;
-  abfd->mtime_set = FALSE;
+  abfd->cacheable = false;
+  abfd->mtime_set = false;
 
-  abfd->target_defaulted = TRUE;
+  abfd->target_defaulted = true;
   abfd->direction = read_direction;
   abfd->sections = 0;
   abfd->symcount = 0;
   abfd->outsymbols = 0;
   abfd->tdata.any = 0;
+  abfd->size = 0;
 
   bfd_section_list_clear (abfd);
   bfd_check_format (abfd, bfd_object);
 
-  return TRUE;
-}
-
-/*
-FUNCTION
-	bfd_alloc
-
-SYNOPSIS
-	void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
-
-DESCRIPTION
-	Allocate a block of @var{wanted} bytes of memory attached to
-	<<abfd>> and return a pointer to it.
-*/
-
-void *
-bfd_alloc (bfd *abfd, bfd_size_type size)
-{
-  void *ret;
-  unsigned long ul_size = (unsigned long) size;
-
-  if (size != ul_size
-      /* Note - although objalloc_alloc takes an unsigned long as its
-	 argument, internally the size is treated as a signed long.  This can
-	 lead to problems where, for example, a request to allocate -1 bytes
-	 can result in just 1 byte being allocated, rather than
-	 ((unsigned long) -1) bytes.  Also memory checkers will often
-	 complain about attempts to allocate a negative amount of memory.
-	 So to stop these problems we fail if the size is negative.  */
-      || ((signed long) ul_size) < 0)
-    {
-      bfd_set_error (bfd_error_no_memory);
-      return NULL;
-    }
-
-  ret = objalloc_alloc ((struct objalloc *) abfd->memory, ul_size);
-  if (ret == NULL)
-    bfd_set_error (bfd_error_no_memory);
-  return ret;
-}
-
-/*
-INTERNAL_FUNCTION
-	bfd_alloc2
-
-SYNOPSIS
-	void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
-
-DESCRIPTION
-	Allocate a block of @var{nmemb} elements of @var{size} bytes each
-	of memory attached to <<abfd>> and return a pointer to it.
-*/
-
-void *
-bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size)
-{
-  if ((nmemb | size) >= HALF_BFD_SIZE_TYPE
-      && size != 0
-      && nmemb > ~(bfd_size_type) 0 / size)
-    {
-      bfd_set_error (bfd_error_no_memory);
-      return NULL;
-    }
-
-  return bfd_alloc (abfd, size * nmemb);
-}
-
-/*
-FUNCTION
-	bfd_zalloc
-
-SYNOPSIS
-	void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
-
-DESCRIPTION
-	Allocate a block of @var{wanted} bytes of zeroed memory
-	attached to <<abfd>> and return a pointer to it.
-*/
-
-void *
-bfd_zalloc (bfd *abfd, bfd_size_type size)
-{
-  void *res;
-
-  res = bfd_alloc (abfd, size);
-  if (res)
-    memset (res, 0, (size_t) size);
-  return res;
-}
-
-/*
-INTERNAL_FUNCTION
-	bfd_zalloc2
-
-SYNOPSIS
-	void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
-
-DESCRIPTION
-	Allocate a block of @var{nmemb} elements of @var{size} bytes each
-	of zeroed memory attached to <<abfd>> and return a pointer to it.
-*/
-
-void *
-bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size)
-{
-  void *res;
-
-  if ((nmemb | size) >= HALF_BFD_SIZE_TYPE
-      && size != 0
-      && nmemb > ~(bfd_size_type) 0 / size)
-    {
-      bfd_set_error (bfd_error_no_memory);
-      return NULL;
-    }
-
-  size *= nmemb;
-
-  res = bfd_alloc (abfd, size);
-  if (res)
-    memset (res, 0, (size_t) size);
-  return res;
-}
-
-/* Free a block allocated for a BFD.
-   Note:  Also frees all more recently allocated blocks!  */
-
-void
-bfd_release (bfd *abfd, void *block)
-{
-  objalloc_free_block ((struct objalloc *) abfd->memory, block);
+  return true;
 }
 
-
 /*
    GNU Extension: separate debug-info files
 
@@ -1094,24 +1101,23 @@ FUNCTION
 	bfd_calc_gnu_debuglink_crc32
 
 SYNOPSIS
-	unsigned long bfd_calc_gnu_debuglink_crc32
-	  (unsigned long crc, const unsigned char *buf, bfd_size_type len);
+	uint32_t bfd_calc_gnu_debuglink_crc32
+	  (uint32_t crc, const bfd_byte *buf, bfd_size_type len);
 
 DESCRIPTION
 	Computes a CRC value as used in the .gnu_debuglink section.
 	Advances the previously computed @var{crc} value by computing
 	and adding in the crc32 for @var{len} bytes of @var{buf}.
 
-RETURNS
 	Return the updated CRC32 value.
 */
 
-unsigned long
-bfd_calc_gnu_debuglink_crc32 (unsigned long crc,
-			      const unsigned char *buf,
+uint32_t
+bfd_calc_gnu_debuglink_crc32 (uint32_t crc,
+			      const bfd_byte *buf,
 			      bfd_size_type len)
 {
-  static const unsigned long crc32_table[256] =
+  static const uint32_t crc32_table[256] =
     {
       0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
       0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
@@ -1166,7 +1172,7 @@ bfd_calc_gnu_debuglink_crc32 (unsigned l
       0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
       0x2d02ef8d
     };
-  const unsigned char *end;
+  const bfd_byte *end;
 
   crc = ~crc & 0xffffffff;
   for (end = buf + len; buf < end; ++ buf)
@@ -1175,36 +1181,26 @@ bfd_calc_gnu_debuglink_crc32 (unsigned l
 }
 
 
-/*
-INTERNAL_FUNCTION
-	bfd_get_debug_link_info_1
+/* Extracts the filename and CRC32 value for any separate debug
+   information file associated with @var{abfd}.
 
-SYNOPSIS
-	char *bfd_get_debug_link_info_1 (bfd *abfd, void *crc32_out);
+   The @var{crc32_out} parameter is an untyped pointer because
+   this routine is used as a @code{get_func_type} function, but it
+   is expected to be a uint32_t pointer.
+
+   Returns the filename of the associated debug information file,
+   or NULL if there is no such file.  If the filename was found
+   then the contents of @var{crc32_out} are updated to hold the
+   corresponding CRC32 value for the file.
 
-DESCRIPTION
-	Extracts the filename and CRC32 value for any separate debug
-	information file associated with @var{abfd}.
-
-	The @var{crc32_out} parameter is an untyped pointer because
-	this routine is used as a @code{get_func_type} function, but it
-	is expected to be an unsigned long pointer.
-
-RETURNS
-	The filename of the associated debug information file, or NULL
-	if there is no such file.  If the filename was found then the
-	contents of @var{crc32_out} are updated to hold the corresponding
-	CRC32 value for the file.
-
-	The returned filename is allocated with @code{malloc}; freeing
-	it is the responsibility of the caller.
-*/
+   The returned filename is allocated with @code{malloc}; freeing
+   it is the responsibility of the caller.  */
 
 static char *
 bfd_get_debug_link_info_1 (bfd *abfd, void *crc32_out)
 {
   asection *sect;
-  unsigned long *crc32 = (unsigned long *) crc32_out;
+  uint32_t *crc32 = crc32_out;
   bfd_byte *contents;
   unsigned int crc_offset;
   char *name;
@@ -1215,21 +1211,17 @@ bfd_get_debug_link_info_1 (bfd *abfd, vo
 
   sect = bfd_get_section_by_name (abfd, GNU_DEBUGLINK);
 
-  if (sect == NULL)
+  if (sect == NULL || (sect->flags & SEC_HAS_CONTENTS) == 0)
     return NULL;
 
   size = bfd_section_size (sect);
 
   /* PR 22794: Make sure that the section has a reasonable size.  */
-  if (size < 8 || size >= bfd_get_size (abfd))
+  if (size < 8)
     return NULL;
 
   if (!bfd_malloc_and_get_section (abfd, sect, &contents))
-    {
-      if (contents != NULL)
-	free (contents);
-      return NULL;
-    }
+    return NULL;
 
   /* CRC value is stored after the filename, aligned up to 4 bytes.  */
   name = (char *) contents;
@@ -1237,7 +1229,10 @@ bfd_get_debug_link_info_1 (bfd *abfd, vo
   crc_offset = strnlen (name, size) + 1;
   crc_offset = (crc_offset + 3) & ~3;
   if (crc_offset + 4 > size)
-    return NULL;
+    {
+      free (name);
+      return NULL;
+    }
 
   *crc32 = bfd_get_32 (abfd, contents + crc_offset);
   return name;
@@ -1249,24 +1244,23 @@ FUNCTION
 	bfd_get_debug_link_info
 
 SYNOPSIS
-	char *bfd_get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
+	char *bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out);
 
 DESCRIPTION
 	Extracts the filename and CRC32 value for any separate debug
 	information file associated with @var{abfd}.
 
-RETURNS
-	The filename of the associated debug information file, or NULL
-	if there is no such file.  If the filename was found then the
-	contents of @var{crc32_out} are updated to hold the corresponding
-	CRC32 value for the file.
+	Returns the filename of the associated debug information file,
+	or NULL if there is no such file.  If the filename was found
+	then the contents of @var{crc32_out} are updated to hold the
+	corresponding CRC32 value for the file.
 
 	The returned filename is allocated with @code{malloc}; freeing
 	it is the responsibility of the caller.
 */
 
 char *
-bfd_get_debug_link_info (bfd *abfd, unsigned long *crc32_out)
+bfd_get_debug_link_info (bfd *abfd, uint32_t *crc32_out)
 {
   return bfd_get_debug_link_info_1 (abfd, crc32_out);
 }
@@ -1305,19 +1299,15 @@ bfd_get_alt_debug_link_info (bfd * abfd,
 
   sect = bfd_get_section_by_name (abfd, GNU_DEBUGALTLINK);
 
-  if (sect == NULL)
+  if (sect == NULL || (sect->flags & SEC_HAS_CONTENTS) == 0)
     return NULL;
 
   size = bfd_section_size (sect);
-  if (size < 8 || size >= bfd_get_size (abfd))
+  if (size < 8)
     return NULL;
 
   if (!bfd_malloc_and_get_section (abfd, sect, & contents))
-    {
-      if (contents != NULL)
-	free (contents);
-      return NULL;
-    }
+    return NULL;
 
   /* BuildID value is stored after the filename.  */
   name = (char *) contents;
@@ -1332,40 +1322,30 @@ bfd_get_alt_debug_link_info (bfd * abfd,
   return name;
 }
 
-/*
-INTERNAL_FUNCTION
-	separate_debug_file_exists
-
-SYNOPSIS
-	bfd_boolean separate_debug_file_exists
-	  (char *name, void *crc32_p);
-
-DESCRIPTION
-	Checks to see if @var{name} is a file and if its contents
-	match @var{crc32}, which is a pointer to an @code{unsigned
-	long} containing a CRC32.
+/* Checks to see if @var{name} is a file and if its contents match
+   @var{crc32}, which is a pointer to a @code{uint32_t}
+   containing a CRC32.
 
-	The @var{crc32_p} parameter is an untyped pointer because
-	this routine is used as a @code{check_func_type} function.
-*/
+   The @var{crc32_p} parameter is an untyped pointer because this
+   routine is used as a @code{check_func_type} function.  */
 
-static bfd_boolean
+static bool
 separate_debug_file_exists (const char *name, void *crc32_p)
 {
-  static unsigned char buffer [8 * 1024];
-  unsigned long file_crc = 0;
+  unsigned char buffer[8 * 1024];
+  uint32_t file_crc = 0;
   FILE *f;
   bfd_size_type count;
-  unsigned long crc;
+  uint32_t crc;
 
   BFD_ASSERT (name);
   BFD_ASSERT (crc32_p);
 
-  crc = *(unsigned long *) crc32_p;
+  crc = *(uint32_t *) crc32_p;
 
   f = _bfd_real_fopen (name, FOPEN_RB);
   if (f == NULL)
-    return FALSE;
+    return false;
 
   while ((count = fread (buffer, 1, sizeof (buffer), f)) > 0)
     file_crc = bfd_calc_gnu_debuglink_crc32 (file_crc, buffer, count);
@@ -1375,19 +1355,9 @@ separate_debug_file_exists (const char *
   return crc == file_crc;
 }
 
-/*
-INTERNAL_FUNCTION
-	separate_alt_debug_file_exists
-
-SYNOPSIS
-	bfd_boolean separate_alt_debug_file_exists
-	  (char *name, void *unused);
-
-DESCRIPTION
-	Checks to see if @var{name} is a file.
-*/
+/* Checks to see if @var{name} is a file.  */
 
-static bfd_boolean
+static bool
 separate_alt_debug_file_exists (const char *name, void *unused ATTRIBUTE_UNUSED)
 {
   FILE *f;
@@ -1396,52 +1366,40 @@ separate_alt_debug_file_exists (const ch
 
   f = _bfd_real_fopen (name, FOPEN_RB);
   if (f == NULL)
-    return FALSE;
+    return false;
 
   fclose (f);
 
-  return TRUE;
+  return true;
 }
 
-/*
-INTERNAL_FUNCTION
-	find_separate_debug_file
-
-SYNOPSIS
-	char *find_separate_debug_file
-	  (bfd *abfd, const char *dir, bfd_boolean include_dirs,
-	   get_func_type get, check_func_type check, void *data);
+/* Searches for a debug information file corresponding to @var{abfd}.
 
-DESCRIPTION
-	Searches for a debug information file corresponding to @var{abfd}.
-
-	The name of the separate debug info file is returned by the
-	@var{get} function.  This function scans various fixed locations
-	in the filesystem, including the file tree rooted at @var{dir}.
-	If the @var{include_dirs} parameter is true then the directory
-	components of @var{abfd}'s filename will be included in the
-	searched locations.
+   The name of the separate debug info file is returned by the
+   @var{get} function.  This function scans various fixed locations
+   in the filesystem, including the file tree rooted at @var{dir}.
+   If the @var{include_dirs} parameter is true then the directory
+   components of @var{abfd}'s filename will be included in the
+   searched locations.
 
-	@var{data} is passed unmodified to the @var{get} and @var{check}
-	functions.  It is generally used to implement build-id-like
-	matching in the callback functions.
+   @var{data} is passed unmodified to the @var{get} and @var{check}
+   functions.  It is generally used to implement build-id-like
+   matching in the callback functions.
 
-RETURNS
-	Returns the filename of the first file to be found which
-	receives a TRUE result from the @var{check} function.
-	Returns NULL if no valid file could be found.
-*/
+   Returns the filename of the first file to be found which
+   receives a TRUE result from the @var{check} function.
+   Returns NULL if no valid file could be found.  */
 
-typedef char *      (* get_func_type) (bfd *, void *);
-typedef bfd_boolean (* check_func_type) (const char *, void *);
+typedef char * (*get_func_type) (bfd *, void *);
+typedef bool (*check_func_type) (const char *, void *);
 
 static char *
-find_separate_debug_file (bfd *		  abfd,
-			  const char *	  debug_file_directory,
-			  bfd_boolean	  include_dirs,
-			  get_func_type	  get_func,
+find_separate_debug_file (bfd *abfd,
+			  const char *debug_file_directory,
+			  bool include_dirs,
+			  get_func_type get_func,
 			  check_func_type check_func,
-			  void *	  func_data)
+			  void *func_data)
 {
   char *base;
   char *dir;
@@ -1455,7 +1413,7 @@ find_separate_debug_file (bfd *		  abfd,
     debug_file_directory = ".";
 
   /* BFD may have been opened from a stream.  */
-  if (abfd->filename == NULL)
+  if (bfd_get_filename (abfd) == NULL)
     {
       bfd_set_error (bfd_error_invalid_operation);
       return NULL;
@@ -1475,8 +1433,9 @@ find_separate_debug_file (bfd *		  abfd,
 
   if (include_dirs)
     {
-      for (dirlen = strlen (abfd->filename); dirlen > 0; dirlen--)
-	if (IS_DIR_SEPARATOR (abfd->filename[dirlen - 1]))
+      const char *fname = bfd_get_filename (abfd);
+      for (dirlen = strlen (fname); dirlen > 0; dirlen--)
+	if (IS_DIR_SEPARATOR (fname[dirlen - 1]))
 	  break;
 
       dir = (char *) bfd_malloc (dirlen + 1);
@@ -1485,7 +1444,7 @@ find_separate_debug_file (bfd *		  abfd,
 	  free (base);
 	  return NULL;
 	}
-      memcpy (dir, abfd->filename, dirlen);
+      memcpy (dir, fname, dirlen);
       dir[dirlen] = '\0';
     }
   else
@@ -1497,7 +1456,7 @@ find_separate_debug_file (bfd *		  abfd,
 
   /* Compute the canonical name of the bfd object with all symbolic links
      resolved, for use in the global debugfile directory.  */
-  canon_dir = lrealpath (abfd->filename);
+  canon_dir = lrealpath (bfd_get_filename (abfd));
   for (canon_dirlen = strlen (canon_dir); canon_dirlen > 0; canon_dirlen--)
     if (IS_DIR_SEPARATOR (canon_dir[canon_dirlen - 1]))
       break;
@@ -1609,18 +1568,18 @@ DESCRIPTION
 	If @var{dir} is NULL, the search will take place starting at
 	the current directory.
 
-RETURNS
-	<<NULL>> on any errors or failure to locate the .debug file,
-	otherwise a pointer to a heap-allocated string containing the
-	filename.  The caller is responsible for freeing this string.
+	Returns <<NULL>> on any errors or failure to locate the .debug
+	file, otherwise a pointer to a heap-allocated string
+	containing the filename.  The caller is responsible for
+	freeing this string.
 */
 
 char *
 bfd_follow_gnu_debuglink (bfd *abfd, const char *dir)
 {
-  unsigned long crc32;
+  uint32_t crc32;
 
-  return find_separate_debug_file (abfd, dir, TRUE,
+  return find_separate_debug_file (abfd, dir, true,
 				   bfd_get_debug_link_info_1,
 				   separate_debug_file_exists, &crc32);
 }
@@ -1658,16 +1617,16 @@ DESCRIPTION
 	If @var{dir} is NULL, the search will take place starting at
 	the current directory.
 
-RETURNS
-	<<NULL>> on any errors or failure to locate the debug file,
-	otherwise a pointer to a heap-allocated string containing the
-	filename.  The caller is responsible for freeing this string.
+	Returns <<NULL>> on any errors or failure to locate the debug
+	file, otherwise a pointer to a heap-allocated string
+	containing the filename.  The caller is responsible for
+	freeing this string.
 */
 
 char *
 bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir)
 {
-  return find_separate_debug_file (abfd, dir, TRUE,
+  return find_separate_debug_file (abfd, dir, true,
 				   get_alt_debug_link_info_shim,
 				   separate_alt_debug_file_exists,
 				   NULL);
@@ -1686,7 +1645,6 @@ DESCRIPTION
 	section is sized to be big enough to contain a link to the specified
 	@var{filename}.
 
-RETURNS
 	A pointer to the new section is returned if all is ok.  Otherwise
 	<<NULL>> is returned and bfd_error is set.
 */
@@ -1745,51 +1703,45 @@ FUNCTION
 	bfd_fill_in_gnu_debuglink_section
 
 SYNOPSIS
-	bfd_boolean bfd_fill_in_gnu_debuglink_section
+	bool bfd_fill_in_gnu_debuglink_section
 	  (bfd *abfd, struct bfd_section *sect, const char *filename);
 
 DESCRIPTION
 	Takes a @var{BFD} and containing a .gnu_debuglink section @var{SECT}
 	and fills in the contents of the section to contain a link to the
-	specified @var{filename}.  The filename should be relative to the
-	current directory.
+	specified @var{filename}.  The filename should be absolute or
+	relative to the current directory.
 
-RETURNS
 	<<TRUE>> is returned if all is ok.  Otherwise <<FALSE>> is returned
 	and bfd_error is set.
 */
 
-bfd_boolean
+bool
 bfd_fill_in_gnu_debuglink_section (bfd *abfd,
 				   struct bfd_section *sect,
 				   const char *filename)
 {
   bfd_size_type debuglink_size;
-  unsigned long crc32;
+  uint32_t crc32;
   char * contents;
   bfd_size_type crc_offset;
   FILE * handle;
-  static unsigned char buffer[8 * 1024];
+  unsigned char buffer[8 * 1024];
   size_t count;
   size_t filelen;
 
   if (abfd == NULL || sect == NULL || filename == NULL)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
-  /* Make sure that we can read the file.
-     XXX - Should we attempt to locate the debug info file using the same
-     algorithm as gdb ?  At the moment, since we are creating the
-     .gnu_debuglink section, we insist upon the user providing us with a
-     correct-for-section-creation-time path, but this need not conform to
-     the gdb location algorithm.  */
+  /* Open the linked file so that we can compute a CRC.  */
   handle = _bfd_real_fopen (filename, FOPEN_RB);
   if (handle == NULL)
     {
       bfd_set_error (bfd_error_system_call);
-      return FALSE;
+      return false;
     }
 
   crc32 = 0;
@@ -1811,7 +1763,7 @@ bfd_fill_in_gnu_debuglink_section (bfd *
   if (contents == NULL)
     {
       /* XXX Should we delete the section from the bfd ?  */
-      return FALSE;
+      return false;
     }
 
   crc_offset = debuglink_size - 4;
@@ -1824,30 +1776,20 @@ bfd_fill_in_gnu_debuglink_section (bfd *
     {
       /* XXX Should we delete the section from the bfd ?  */
       free (contents);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-/*
-INTERNAL_FUNCTION
-	get_build_id
-
-SYNOPSIS
-	struct bfd_build_id * get_build_id (bfd *abfd);
+/* Finds the build-id associated with @var{abfd}.  If the build-id is
+   extracted from the note section then a build-id structure is built
+   for it, using memory allocated to @var{abfd}, and this is then
+   attached to the @var{abfd}.
 
-DESCRIPTION
-	Finds the build-id associated with @var{abfd}.  If the build-id is
-	extracted from the note section then a build-id structure is built
-	for it, using memory allocated to @var{abfd}, and this is then
-	attached to the @var{abfd}.
-
-RETURNS
-	Returns a pointer to the build-id structure if a build-id could be
-	found.  If no build-id is found NULL is returned and error code is
-	set.
-*/
+   Returns a pointer to the build-id structure if a build-id could be
+   found.  If no build-id is found NULL is returned and error code is
+   set.  */
 
 static struct bfd_build_id *
 get_build_id (bfd *abfd)
@@ -1866,7 +1808,8 @@ get_build_id (bfd *abfd)
     return (struct bfd_build_id *) abfd->build_id;
 
   sect = bfd_get_section_by_name (abfd, ".note.gnu.build-id");
-  if (sect == NULL)
+  if (sect == NULL
+      || (sect->flags & SEC_HAS_CONTENTS) == 0)
     {
       bfd_set_error (bfd_error_no_debug_section);
       return NULL;
@@ -1881,11 +1824,7 @@ get_build_id (bfd *abfd)
     }
 
   if (!bfd_malloc_and_get_section (abfd, sect, & contents))
-    {
-      if (contents != NULL)
-	free (contents);
-      return NULL;
-    }
+    return NULL;
 
   /* FIXME: Paranoia - allow for compressed build-id sections.
      Maybe we should complain if this size is different from
@@ -1909,7 +1848,7 @@ get_build_id (bfd *abfd)
   if (inote.descsz <= 0
       || inote.type != NT_GNU_BUILD_ID
       || inote.namesz != 4 /* sizeof "GNU"  */
-      || strncmp (inote.namedata, "GNU", 4) != 0
+      || !startswith (inote.namedata, "GNU")
       || inote.descsz > 0x7ffffffe
       || size < (12 + BFD_ALIGN (inote.namesz, 4) + inote.descsz))
     {
@@ -1933,26 +1872,15 @@ get_build_id (bfd *abfd)
   return build_id;
 }
 
-/*
-INTERNAL_FUNCTION
-	get_build_id_name
-
-SYNOPSIS
-	char * get_build_id_name (bfd *abfd, void *build_id_out_p)
-
-DESCRIPTION
-	Searches @var{abfd} for a build-id, and then constructs a pathname
-	from it.  The path is computed as .build-id/NN/NN+NN.debug where
-	NNNN+NN is the build-id value as a hexadecimal string.
-
-RETURNS
-	Returns the constructed filename or NULL upon error.
-	It is the caller's responsibility to free the memory used to hold the
-	filename.
-	If a filename is returned then the @var{build_id_out_p}
-	parameter (which points to a @code{struct bfd_build_id}
-	pointer) is set to a pointer to the build_id structure.
-*/
+/* Searches @var{abfd} for a build-id, and then constructs a pathname
+   from it.  The path is computed as .build-id/NN/NN+NN.debug where
+   NNNN+NN is the build-id value as a hexadecimal string.
+
+   Returns the constructed filename or NULL upon error.  It is the
+   caller's responsibility to free the memory used to hold the
+   filename.  If a filename is returned then the @var{build_id_out_p}
+   parameter (which points to a @code{struct bfd_build_id} pointer) is
+   set to a pointer to the build_id structure.  */
 
 static char *
 get_build_id_name (bfd *abfd, void *build_id_out_p)
@@ -1964,7 +1892,7 @@ get_build_id_name (bfd *abfd, void *buil
   bfd_size_type s;
   bfd_byte *d;
 
-  if (abfd == NULL || abfd->filename == NULL || build_id_out == NULL)
+  if (abfd == NULL || bfd_get_filename (abfd) == NULL || build_id_out == NULL)
     {
       bfd_set_error (bfd_error_invalid_operation);
       return NULL;
@@ -1996,50 +1924,40 @@ get_build_id_name (bfd *abfd, void *buil
   return name;
 }
 
-/*
-INTERNAL_FUNCTION
-	check_build_id_file
-
-SYNOPSIS
-	bfd_boolean check_build_id_file (char *name, void *buildid_p);
-
-DESCRIPTION
-	Checks to see if @var{name} is a readable file and if its build-id
-	matches @var{buildid}.
+/* Checks to see if @var{name} is a readable file and if its build-id
+   matches @var{buildid}.
 
-RETURNS
-	Returns TRUE if the file exists, is readable, and contains a
-	build-id which matches the build-id pointed at by
-	@var{build_id_p} (which is really a @code{struct bfd_build_id **}).
-*/
+   Returns TRUE if the file exists, is readable, and contains a
+   build-id which matches the build-id pointed at by @var{build_id_p}
+   (which is really a @code{struct bfd_build_id **}).  */
 
-static bfd_boolean
+static bool
 check_build_id_file (const char *name, void *buildid_p)
 {
   struct bfd_build_id *orig_build_id;
   struct bfd_build_id *build_id;
   bfd * file;
-  bfd_boolean result;
+  bool result;
 
   BFD_ASSERT (name);
   BFD_ASSERT (buildid_p);
 
   file = bfd_openr (name, NULL);
   if (file == NULL)
-    return FALSE;
+    return false;
 
   /* If the file is an archive, process all of its elements.  */
   if (! bfd_check_format (file, bfd_object))
     {
       bfd_close (file);
-      return FALSE;
+      return false;
     }
 
   build_id = get_build_id (file);
   if (build_id == NULL)
     {
       bfd_close (file);
-      return FALSE;
+      return false;
     }
 
   orig_build_id = *(struct bfd_build_id **) buildid_p;
@@ -2074,10 +1992,10 @@ DESCRIPTION
 	If @var{dir} is NULL, the search will take place starting at
 	the current directory.
 
-RETURNS
-	<<NULL>> on any errors or failure to locate the debug file,
-	otherwise a pointer to a heap-allocated string containing the
-	filename.  The caller is responsible for freeing this string.
+	Returns <<NULL>> on any errors or failure to locate the debug
+	file, otherwise a pointer to a heap-allocated string
+	containing the filename.  The caller is responsible for
+	freeing this string.
 */
 
 char *
@@ -2085,7 +2003,7 @@ bfd_follow_build_id_debuglink (bfd *abfd
 {
   struct bfd_build_id *build_id;
 
-  return find_separate_debug_file (abfd, dir, FALSE,
+  return find_separate_debug_file (abfd, dir, false,
 				   get_build_id_name,
 				   check_build_id_file, &build_id);
 }
@@ -2095,17 +2013,41 @@ FUNCTION
 	bfd_set_filename
 
 SYNOPSIS
-	void bfd_set_filename (bfd *abfd, char *filename);
+	const char *bfd_set_filename (bfd *abfd, const char *filename);
 
 DESCRIPTION
-	Set the filename of @var{abfd}.  The old filename, if any, is freed.
-	@var{filename} must be allocated using @code{xmalloc}.  After
-	this call, it is owned @var{abfd}.
+	Set the filename of @var{abfd}, copying the FILENAME parameter to
+	bfd_alloc'd memory owned by @var{abfd}.  Returns a pointer the
+	newly allocated name, or NULL if the allocation failed.
 */
 
-void
-bfd_set_filename (bfd *abfd, char *filename)
+const char *
+bfd_set_filename (bfd *abfd, const char *filename)
 {
-  free ((char *) abfd->filename);
-  abfd->filename = filename;
+  size_t len = strlen (filename) + 1;
+  char *n = bfd_alloc (abfd, len);
+
+  if (n == NULL)
+    return NULL;
+
+  if (abfd->filename != NULL)
+    {
+      /* PR 29389.  If we attempt to rename a file that has been closed due
+	 to caching, then we will not be able to reopen it later on.  */
+      if (abfd->iostream == NULL && (abfd->flags & BFD_CLOSED_BY_CACHE))
+	{
+	  bfd_set_error (bfd_error_invalid_operation);
+	  return NULL;
+	}
+
+      /* Similarly if we attempt to close a renamed file because the
+	 cache is now full, we will not be able to reopen it later on.  */
+      if (abfd->iostream != NULL)
+	abfd->cacheable = 0;
+    }
+
+  memcpy (n, filename, len);
+  abfd->filename = n;
+
+  return n;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/osf-core.c ./bfd/osf-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/osf-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/osf-core.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for OSF/1 core files.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -70,21 +70,21 @@ make_bfd_asection (bfd *abfd,
   return asect;
 }
 
-static const bfd_target *
+static bfd_cleanup
 osf_core_core_file_p (bfd *abfd)
 {
   int val;
   int i;
   char *secname;
   struct core_filehdr core_header;
-  bfd_size_type amt;
+  size_t amt;
 
   amt = sizeof core_header;
-  val = bfd_bread (& core_header, amt, abfd);
+  val = bfd_read (& core_header, amt, abfd);
   if (val != sizeof core_header)
     return NULL;
 
-  if (! CONST_STRNEQ (core_header.magic, "Core"))
+  if (! startswith (core_header.magic, "Core"))
     return NULL;
 
   core_hdr (abfd) = (struct osf_core_struct *)
@@ -101,7 +101,7 @@ osf_core_core_file_p (bfd *abfd)
       flagword flags;
 
       amt = sizeof core_scnhdr;
-      val = bfd_bread (& core_scnhdr, amt, abfd);
+      val = bfd_read (& core_scnhdr, amt, abfd);
       if (val != sizeof core_scnhdr)
 	break;
 
@@ -138,7 +138,7 @@ osf_core_core_file_p (bfd *abfd)
 
   /* OK, we believe you.  You're a core file (sure, sure).  */
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  fail:
   bfd_release (abfd, core_hdr (abfd));
@@ -169,9 +169,9 @@ swap_abort (void)
 #define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
 #define	NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
 #define	NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
-#define	NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
-#define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
-#define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
+#define	NO_GET64 ((uint64_t (*) (const void *)) swap_abort)
+#define	NO_PUT64 ((void (*) (uint64_t, void *)) swap_abort)
+#define	NO_GETS64 ((int64_t (*) (const void *)) swap_abort)
 
 const bfd_target core_osf_vec =
   {
@@ -187,6 +187,7 @@ const bfd_target core_osf_vec =
     ' ',			/* ar_pad_char */
     16,				/* ar_max_namelen */
     0,				/* match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
     NO_GET64, NO_GETS64, NO_PUT64,	/* 64 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 32 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 16 bit data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pc532-mach.c ./bfd/pc532-mach.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pc532-mach.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pc532-mach.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Mach3/532 a.out-ish binaries.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -77,7 +77,7 @@
 reloc_howto_type *MY_bfd_reloc_type_lookup
   (bfd *abfd, bfd_reloc_code_real_type code);
 
-static bfd_boolean
+static bool
 MY(write_object_contents) (bfd *abfd)
 {
   struct external_exec exec_bytes;
@@ -100,7 +100,7 @@ MY(write_object_contents) (bfd *abfd)
 
   WRITE_HEADERS (abfd, execp);
 
-  return TRUE;
+  return true;
 }
 
 #define MY_write_object_contents MY(write_object_contents)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pdb.c ./bfd/pdb.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pdb.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/pdb.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,826 @@
+/* BFD back-end for PDB Multi-Stream Format archives.
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+/* This describes the MSF file archive format, which is used for the
+   PDB debug info generated by MSVC. See https://llvm.org/docs/PDB/MsfFile.html
+   for a full description of the format.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+/* "Microsoft C/C++ MSF 7.00\r\n\x1a\x44\x53\0\0\0" */
+static const uint8_t pdb_magic[] =
+{ 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66,
+  0x74, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x20,
+  0x4d, 0x53, 0x46, 0x20, 0x37, 0x2e, 0x30, 0x30,
+  0x0d, 0x0a, 0x1a, 0x44, 0x53, 0x00, 0x00, 0x00 };
+
+#define arch_eltdata(bfd) ((struct areltdata *) ((bfd)->arelt_data))
+
+static bfd_cleanup
+pdb_archive_p (bfd *abfd)
+{
+  int ret;
+  char magic[sizeof (pdb_magic)];
+
+  ret = bfd_read (magic, sizeof (magic), abfd);
+  if (ret != sizeof (magic))
+    {
+      bfd_set_error (bfd_error_wrong_format);
+      return NULL;
+    }
+
+  if (memcmp (magic, pdb_magic, sizeof (magic)))
+    {
+      bfd_set_error (bfd_error_wrong_format);
+      return NULL;
+    }
+
+  void *tdata = bfd_zalloc (abfd, sizeof (struct artdata));
+  if (tdata == NULL)
+    return NULL;
+  bfd_ardata (abfd) = tdata;
+
+  return _bfd_no_cleanup;
+}
+
+static bfd *
+pdb_get_elt_at_index (bfd *abfd, symindex sym_index)
+{
+  char int_buf[sizeof (uint32_t)];
+  uint32_t block_size, block_map_addr, block, num_files;
+  uint32_t first_dir_block, dir_offset, file_size, block_off, left;
+  char name[10];
+  bfd *file;
+  char *buf;
+
+  /* Get block_size.  */
+
+  if (bfd_seek (abfd, sizeof (pdb_magic), SEEK_SET))
+    return NULL;
+
+  if (bfd_read (int_buf, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return NULL;
+    }
+
+  block_size = bfd_getl32 (int_buf);
+  if ((block_size & -block_size) != block_size
+      || block_size < 512
+      || block_size > 4096)
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return NULL;
+    }
+
+  /* Get block_map_addr.  */
+
+  if (bfd_seek (abfd, 4 * sizeof (uint32_t), SEEK_CUR))
+    return NULL;
+
+  if (bfd_read (int_buf, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return NULL;
+    }
+
+  block_map_addr = bfd_getl32 (int_buf);
+
+  /* Get num_files.  */
+
+  if (bfd_seek (abfd, block_map_addr * block_size, SEEK_SET))
+    return NULL;
+
+  if (bfd_read (int_buf, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return NULL;
+    }
+
+  first_dir_block = bfd_getl32 (int_buf);
+
+  if (bfd_seek (abfd, first_dir_block * block_size, SEEK_SET))
+    return NULL;
+
+  if (bfd_read (int_buf, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return NULL;
+    }
+
+  num_files = bfd_getl32 (int_buf);
+
+  if (sym_index >= num_files)
+    {
+      bfd_set_error (bfd_error_no_more_archived_files);
+      return NULL;
+    }
+
+  /* Read file size.  */
+
+  dir_offset = sizeof (uint32_t) * (sym_index + 1);
+
+  if (dir_offset >= block_size)
+    {
+      uint32_t block_map_addr_off;
+
+      block_map_addr_off = ((dir_offset / block_size) * sizeof (uint32_t));
+
+      if (bfd_seek (abfd, (block_map_addr * block_size) + block_map_addr_off,
+		    SEEK_SET))
+	return NULL;
+
+      if (bfd_read (int_buf, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+	{
+	  bfd_set_error (bfd_error_malformed_archive);
+	  return NULL;
+	}
+
+      block = bfd_getl32 (int_buf);
+    }
+  else
+    {
+      block = first_dir_block;
+    }
+
+  if (bfd_seek (abfd, (block * block_size) + (dir_offset % block_size),
+		SEEK_SET))
+    return NULL;
+
+  if (bfd_read (int_buf, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return NULL;
+    }
+
+  file_size = bfd_getl32 (int_buf);
+
+  /* Undocumented? Seen on PDBs created by MSVC 2022.  */
+  if (file_size == 0xffffffff)
+    file_size = 0;
+
+  /* Create BFD. */
+
+  /* Four hex digits is enough - even though MSF allows for 32 bits, the
+     PDB format itself only uses 16 bits for stream numbers.  */
+  sprintf (name, "%04lx", sym_index);
+
+  file = bfd_create (name, abfd);
+
+  if (!file)
+    return NULL;
+
+  if (!bfd_make_writable (file))
+    goto fail;
+
+  file->arelt_data =
+    (struct areltdata *) bfd_zmalloc (sizeof (struct areltdata));
+
+  if (!file->arelt_data)
+    goto fail;
+
+  arch_eltdata (file)->parsed_size = file_size;
+  arch_eltdata (file)->key = sym_index;
+
+  if (file_size == 0)
+    return file;
+
+  block_off = 0;
+
+  /* Sum number of blocks in previous files.  */
+
+  if (sym_index != 0)
+    {
+      dir_offset = sizeof (uint32_t);
+
+      if (bfd_seek (abfd, (first_dir_block * block_size) + sizeof (uint32_t),
+		    SEEK_SET))
+	goto fail;
+
+      for (symindex i = 0; i < sym_index; i++)
+	{
+	  uint32_t size, num_blocks;
+
+	  if ((dir_offset % block_size) == 0)
+	    {
+	      uint32_t block_map_addr_off;
+
+	      block_map_addr_off =
+		((dir_offset / block_size) * sizeof (uint32_t));
+
+	      if (bfd_seek
+		  (abfd, (block_map_addr * block_size) + block_map_addr_off,
+		   SEEK_SET))
+		goto fail;
+
+	      if (bfd_read (int_buf, sizeof (uint32_t), abfd) !=
+		  sizeof (uint32_t))
+		{
+		  bfd_set_error (bfd_error_malformed_archive);
+		  goto fail;
+		}
+
+	      block = bfd_getl32 (int_buf);
+
+	      if (bfd_seek (abfd, block * block_size, SEEK_SET))
+		goto fail;
+	    }
+
+	  if (bfd_read (int_buf, sizeof (uint32_t), abfd) !=
+	      sizeof (uint32_t))
+	    {
+	      bfd_set_error (bfd_error_malformed_archive);
+	      goto fail;
+	    }
+
+	  size = bfd_getl32 (int_buf);
+
+	  if (size == 0xffffffff)
+	    size = 0;
+
+	  num_blocks = (size + block_size - 1) / block_size;
+	  block_off += num_blocks;
+
+	  dir_offset += sizeof (uint32_t);
+	}
+    }
+
+  /* Read blocks, and write into new BFD.  */
+
+  dir_offset = sizeof (uint32_t) * (num_files + block_off + 1);
+
+  if (dir_offset >= block_size)
+    {
+      uint32_t block_map_addr_off;
+
+      block_map_addr_off = ((dir_offset / block_size) * sizeof (uint32_t));
+
+      if (bfd_seek (abfd, (block_map_addr * block_size) + block_map_addr_off,
+		    SEEK_SET))
+	goto fail;
+
+      if (bfd_read (int_buf, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+	{
+	  bfd_set_error (bfd_error_malformed_archive);
+	  goto fail;
+	}
+
+      block = bfd_getl32 (int_buf);
+    }
+  else
+    {
+      block = first_dir_block;
+    }
+
+  buf = bfd_malloc (block_size);
+  if (!buf)
+    goto fail;
+
+  left = file_size;
+  do
+    {
+      uint32_t file_block, to_read;
+
+      if ((dir_offset % block_size) == 0 && left != file_size)
+	{
+	  uint32_t block_map_addr_off;
+
+	  block_map_addr_off =
+	    ((dir_offset / block_size) * sizeof (uint32_t));
+
+	  if (bfd_seek
+	      (abfd, (block_map_addr * block_size) + block_map_addr_off,
+	       SEEK_SET))
+	    goto fail2;
+
+	  if (bfd_read (int_buf, sizeof (uint32_t), abfd) !=
+	      sizeof (uint32_t))
+	    {
+	      bfd_set_error (bfd_error_malformed_archive);
+	      goto fail2;
+	    }
+
+	  block = bfd_getl32 (int_buf);
+	}
+
+      if (bfd_seek (abfd, (block * block_size) + (dir_offset % block_size),
+		    SEEK_SET))
+	goto fail2;
+
+      if (bfd_read (int_buf, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+	{
+	  bfd_set_error (bfd_error_malformed_archive);
+	  goto fail2;
+	}
+
+      file_block = bfd_getl32 (int_buf);
+
+      if (bfd_seek (abfd, file_block * block_size, SEEK_SET))
+	goto fail2;
+
+      to_read = left > block_size ? block_size : left;
+
+      if (bfd_read (buf, to_read, abfd) != to_read)
+	{
+	  bfd_set_error (bfd_error_malformed_archive);
+	  goto fail2;
+	}
+
+      if (bfd_write (buf, to_read, file) != to_read)
+	goto fail2;
+
+      if (left > block_size)
+	left -= block_size;
+      else
+	break;
+
+      dir_offset += sizeof (uint32_t);
+    }
+  while (left > 0);
+
+  free (buf);
+
+  return file;
+
+fail2:
+  free (buf);
+
+fail:
+  bfd_close (file);
+  return NULL;
+}
+
+static bfd *
+pdb_openr_next_archived_file (bfd *archive, bfd *last_file)
+{
+  if (!last_file)
+    return pdb_get_elt_at_index (archive, 0);
+  else
+    return pdb_get_elt_at_index (archive, arch_eltdata (last_file)->key + 1);
+}
+
+static int
+pdb_generic_stat_arch_elt (bfd *abfd, struct stat *buf)
+{
+  buf->st_mtime = 0;
+  buf->st_uid = 0;
+  buf->st_gid = 0;
+  buf->st_mode = 0644;
+  buf->st_size = arch_eltdata (abfd)->parsed_size;
+
+  return 0;
+}
+
+static uint32_t
+pdb_allocate_block (uint32_t *num_blocks, uint32_t block_size)
+{
+  uint32_t block;
+
+  block = *num_blocks;
+
+  (*num_blocks)++;
+
+  /* If new interval, skip two blocks for free space map.  */
+
+  if ((block % block_size) == 1)
+    {
+      block += 2;
+      (*num_blocks) += 2;
+    }
+
+  return block;
+}
+
+static bool
+pdb_write_directory (bfd *abfd, uint32_t block_size, uint32_t num_files,
+		     uint32_t block_map_addr, uint32_t * num_blocks)
+{
+  char tmp[sizeof (uint32_t)];
+  uint32_t block, left, block_map_off;
+  bfd *arelt;
+  char *buf;
+
+  /* Allocate first block for directory.  */
+
+  block = pdb_allocate_block (num_blocks, block_size);
+  left = block_size;
+
+  /* Write allocated block no. at beginning of block map.  */
+
+  if (bfd_seek (abfd, block_map_addr * block_size, SEEK_SET))
+    return false;
+
+  bfd_putl32 (block, tmp);
+
+  if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    return false;
+
+  block_map_off = sizeof (uint32_t);
+
+  /* Write num_files at beginning of directory.  */
+
+  if (bfd_seek (abfd, block * block_size, SEEK_SET))
+    return false;
+
+  bfd_putl32 (num_files, tmp);
+
+  if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    return false;
+
+  left -= sizeof (uint32_t);
+
+  /* Write file sizes.  */
+
+  arelt = abfd->archive_head;
+  while (arelt)
+    {
+      if (left == 0)
+	{
+	  if (block_map_off == block_size) /* Too many blocks.  */
+	    {
+	      bfd_set_error (bfd_error_invalid_operation);
+	      return false;
+	    }
+
+	  block = pdb_allocate_block (num_blocks, block_size);
+	  left = block_size;
+
+	  if (bfd_seek
+	      (abfd, (block_map_addr * block_size) + block_map_off, SEEK_SET))
+	    return false;
+
+	  bfd_putl32 (block, tmp);
+
+	  if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+	    return false;
+
+	  block_map_off += sizeof (uint32_t);
+
+	  if (bfd_seek (abfd, block * block_size, SEEK_SET))
+	    return false;
+	}
+
+      bfd_putl32 (bfd_get_size (arelt), tmp);
+
+      if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+	return false;
+
+      left -= sizeof (uint32_t);
+
+      arelt = arelt->archive_next;
+    }
+
+  /* Write blocks.  */
+
+  buf = bfd_malloc (block_size);
+  if (!buf)
+    return false;
+
+  arelt = abfd->archive_head;
+  while (arelt)
+    {
+      ufile_ptr size = bfd_get_size (arelt);
+      uint32_t req_blocks = (size + block_size - 1) / block_size;
+
+      if (bfd_seek (arelt, 0, SEEK_SET))
+	{
+	  free (buf);
+	  return false;
+	}
+
+      for (uint32_t i = 0; i < req_blocks; i++)
+	{
+	  uint32_t file_block, to_read;
+
+	  if (left == 0)
+	    {
+	      if (block_map_off == block_size) /* Too many blocks.  */
+		{
+		  bfd_set_error (bfd_error_invalid_operation);
+		  free (buf);
+		  return false;
+		}
+
+	      block = pdb_allocate_block (num_blocks, block_size);
+	      left = block_size;
+
+	      if (bfd_seek
+		  (abfd, (block_map_addr * block_size) + block_map_off,
+		   SEEK_SET))
+		{
+		  free (buf);
+		  return false;
+		}
+
+	      bfd_putl32 (block, tmp);
+
+	      if (bfd_write (tmp, sizeof (uint32_t), abfd) !=
+		  sizeof (uint32_t))
+		{
+		  free (buf);
+		  return false;
+		}
+
+	      block_map_off += sizeof (uint32_t);
+
+	      if (bfd_seek (abfd, block * block_size, SEEK_SET))
+		{
+		  free (buf);
+		  return false;
+		}
+	    }
+
+	  /* Allocate block and write number into directory.  */
+
+	  file_block = pdb_allocate_block (num_blocks, block_size);
+
+	  bfd_putl32 (file_block, tmp);
+
+	  if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+	    {
+	      free (buf);
+	      return false;
+	    }
+
+	  left -= sizeof (uint32_t);
+
+	  /* Read file contents into buffer.  */
+
+	  to_read = size > block_size ? block_size : size;
+
+	  if (bfd_read (buf, to_read, arelt) != to_read)
+	    {
+	      free (buf);
+	      return false;
+	    }
+
+	  size -= to_read;
+
+	  if (to_read < block_size)
+	    memset (buf + to_read, 0, block_size - to_read);
+
+	  if (bfd_seek (abfd, file_block * block_size, SEEK_SET))
+	    {
+	      free (buf);
+	      return false;
+	    }
+
+	  /* Write file contents into allocated block.  */
+
+	  if (bfd_write (buf, block_size, abfd) != block_size)
+	    {
+	      free (buf);
+	      return false;
+	    }
+
+	  if (bfd_seek
+	      (abfd, (block * block_size) + block_size - left, SEEK_SET))
+	    {
+	      free (buf);
+	      return false;
+	    }
+	}
+
+      arelt = arelt->archive_next;
+    }
+
+  memset (buf, 0, left);
+
+  if (bfd_write (buf, left, abfd) != left)
+    {
+      free (buf);
+      return false;
+    }
+
+  free (buf);
+
+  return true;
+}
+
+static bool
+pdb_write_bitmap (bfd *abfd, uint32_t block_size, uint32_t num_blocks)
+{
+  char *buf;
+  uint32_t num_intervals = (num_blocks + block_size - 1) / block_size;
+
+  buf = bfd_malloc (block_size);
+  if (!buf)
+    return false;
+
+  num_blocks--;			/* Superblock not included.  */
+
+  for (uint32_t i = 0; i < num_intervals; i++)
+    {
+      if (bfd_seek (abfd, ((i * block_size) + 1) * block_size, SEEK_SET))
+	{
+	  free (buf);
+	  return false;
+	}
+
+      /* All of our blocks are contiguous, making our free block map simple.
+         0 = used, 1 = free.  */
+
+      if (num_blocks >= 8)
+	memset (buf, 0,
+		(num_blocks / 8) >
+		block_size ? block_size : (num_blocks / 8));
+
+      if (num_blocks < block_size * 8)
+	{
+	  unsigned int off = num_blocks / 8;
+
+	  if (num_blocks % 8)
+	    {
+	      buf[off] = (1 << (8 - (num_blocks % 8))) - 1;
+	      off++;
+	    }
+
+	  if (off < block_size)
+	    memset (buf + off, 0xff, block_size - off);
+	}
+
+      if (num_blocks < block_size * 8)
+	num_blocks = 0;
+      else
+	num_blocks -= block_size * 8;
+
+      if (bfd_write (buf, block_size, abfd) != block_size)
+	return false;
+    }
+
+  free (buf);
+
+  return true;
+}
+
+static bool
+pdb_write_contents (bfd *abfd)
+{
+  char tmp[sizeof (uint32_t)];
+  const uint32_t block_size = 0x400;
+  uint32_t block_map_addr;
+  uint32_t num_blocks;
+  uint32_t num_files = 0;
+  uint32_t num_directory_bytes = sizeof (uint32_t);
+  bfd *arelt;
+
+  if (bfd_write (pdb_magic, sizeof (pdb_magic), abfd) != sizeof (pdb_magic))
+    return false;
+
+  bfd_putl32 (block_size, tmp);
+
+  if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    return false;
+
+  bfd_putl32 (1, tmp); /* Free block map block (always either 1 or 2).  */
+
+  if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    return false;
+
+  arelt = abfd->archive_head;
+
+  while (arelt)
+    {
+      uint32_t blocks_required =
+	(bfd_get_size (arelt) + block_size - 1) / block_size;
+
+      num_directory_bytes += sizeof (uint32_t); /* Size.  */
+      num_directory_bytes += blocks_required * sizeof (uint32_t); /* Blocks.  */
+
+      num_files++;
+
+      arelt = arelt->archive_next;
+    }
+
+  /* Superblock plus two bitmap blocks.  */
+  num_blocks = 3;
+
+  /* Skip num_blocks for now.  */
+  if (bfd_seek (abfd, sizeof (uint32_t), SEEK_CUR))
+    return false;
+
+  bfd_putl32 (num_directory_bytes, tmp);
+
+  if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    return false;
+
+  /* Skip unknown uint32_t (always 0?).  */
+  if (bfd_seek (abfd, sizeof (uint32_t), SEEK_CUR))
+    return false;
+
+  block_map_addr = pdb_allocate_block (&num_blocks, block_size);
+
+  bfd_putl32 (block_map_addr, tmp);
+
+  if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    return false;
+
+  if (!pdb_write_directory
+      (abfd, block_size, num_files, block_map_addr, &num_blocks))
+    return false;
+
+  if (!pdb_write_bitmap (abfd, block_size, num_blocks))
+    return false;
+
+  /* Write num_blocks now we know it.  */
+
+  if (bfd_seek
+      (abfd, sizeof (pdb_magic) + sizeof (uint32_t) + sizeof (uint32_t),
+       SEEK_SET))
+    return false;
+
+  bfd_putl32 (num_blocks, tmp);
+
+  if (bfd_write (tmp, sizeof (uint32_t), abfd) != sizeof (uint32_t))
+    return false;
+
+  return true;
+}
+
+#define pdb_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
+#define pdb_new_section_hook _bfd_generic_new_section_hook
+#define pdb_get_section_contents _bfd_generic_get_section_contents
+#define pdb_get_section_contents_in_window _bfd_generic_get_section_contents_in_window
+#define pdb_close_and_cleanup _bfd_generic_close_and_cleanup
+
+#define pdb_slurp_armap _bfd_noarchive_slurp_armap
+#define pdb_slurp_extended_name_table _bfd_noarchive_slurp_extended_name_table
+#define pdb_construct_extended_name_table _bfd_noarchive_construct_extended_name_table
+#define pdb_truncate_arname _bfd_noarchive_truncate_arname
+#define pdb_write_armap _bfd_noarchive_write_armap
+#define pdb_read_ar_hdr _bfd_noarchive_read_ar_hdr
+#define pdb_write_ar_hdr _bfd_noarchive_write_ar_hdr
+#define pdb_update_armap_timestamp _bfd_noarchive_update_armap_timestamp
+
+const bfd_target pdb_vec =
+{
+  "pdb",
+  bfd_target_unknown_flavour,
+  BFD_ENDIAN_LITTLE,		/* target byte order */
+  BFD_ENDIAN_LITTLE,		/* target headers byte order */
+  0,				/* object flags */
+  0,				/* section flags */
+  0,				/* leading underscore */
+  ' ',				/* ar_pad_char */
+  16,				/* ar_max_namelen */
+  0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+  bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data.  */
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+  bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs.  */
+
+  {				/* bfd_check_format */
+    _bfd_dummy_target,
+    _bfd_dummy_target,
+    pdb_archive_p,
+    _bfd_dummy_target
+  },
+  {				/* bfd_set_format */
+    _bfd_bool_bfd_false_error,
+    _bfd_bool_bfd_false_error,
+    _bfd_bool_bfd_true,
+    _bfd_bool_bfd_false_error
+  },
+  {				/* bfd_write_contents */
+    _bfd_bool_bfd_true,
+    _bfd_bool_bfd_false_error,
+    pdb_write_contents,
+    _bfd_bool_bfd_false_error
+  },
+
+  BFD_JUMP_TABLE_GENERIC (pdb),
+  BFD_JUMP_TABLE_COPY (_bfd_generic),
+  BFD_JUMP_TABLE_CORE (_bfd_nocore),
+  BFD_JUMP_TABLE_ARCHIVE (pdb),
+  BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols),
+  BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
+  BFD_JUMP_TABLE_WRITE (_bfd_generic),
+  BFD_JUMP_TABLE_LINK (_bfd_nolink),
+  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+  NULL,
+
+  NULL
+};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pdp11.c ./bfd/pdp11.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pdp11.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pdp11.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for PDP-11 a.out binaries.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,7 +22,9 @@
 /* BFD backend for PDP-11, running 2.11BSD in particular.
 
    This file was hacked up by looking hard at the existing vaxnetbsd
-   back end and the header files in 2.11BSD.
+   back end and the header files in 2.11BSD.  The symbol table format
+   of 2.11BSD has been extended to accommodate .stab symbols.  See
+   struct pdp11_external_nlist below for details.
 
    TODO
    * support for V7 file formats
@@ -37,7 +39,7 @@
 #define ARCH_SIZE	16
 #undef TARGET_IS_BIG_ENDIAN_P
 
-#define	TARGET_PAGE_SIZE	256
+#define	TARGET_PAGE_SIZE	8192
 #define	SEGMENT__SIZE	TARGET_PAGE_SIZE
 
 #define	DEFAULT_ARCH	bfd_arch_pdp11
@@ -63,6 +65,7 @@
 #define N_SET_FLAGS(execp, flags) do { } while (0)
 #define N_BADMAG(x) (N_MAGIC(x) != OMAGIC	\
 		     && N_MAGIC(x) != NMAGIC	\
+		     && N_MAGIC(x) != IMAGIC	\
 		     && N_MAGIC(x) != ZMAGIC)
 
 #include "sysdep.h"
@@ -90,7 +93,8 @@ struct pdp11_external_exec
 #define	A_MAGIC2	NMAGIC
 #define NMAGIC		0410	/* Pure executable.  */
 #define ZMAGIC		0413	/* Demand-paged executable.  */
-#define	A_MAGIC3	0411	/* Separated I&D.  */
+#define	IMAGIC		0411	/* Separated I&D.  */
+#define	A_MAGIC3	IMAGIC
 #define	A_MAGIC4	0405	/* Overlay.  */
 #define	A_MAGIC5	0430	/* Auto-overlay (nonseparate).  */
 #define	A_MAGIC6	0431	/* Auto-overlay (separate).  */
@@ -99,10 +103,23 @@ struct pdp11_external_exec
 
 #define A_FLAG_RELOC_STRIPPED	0x0001
 
+/* The following struct defines the format of an entry in the object file
+   symbol table.  In the original 2.11BSD struct the index into the string
+   table is stored as a long, but the PDP11 C convention for storing a long in
+   memory placed the most significant word first even though the bytes within a
+   word are stored least significant first.  So here the string table index is
+   considered to be just 16 bits and the first two bytes of the struct were
+   previously named e_unused.  To extend the symbol table format to accommodate
+   .stab symbols, the e_unused bytes are renamed e_desc to store the desc field
+   of the .stab symbol.  The GDP Project's STABS document says that the "other"
+   field is almost always unused and can be set to zero; the only nonzero cases
+   identified were for stabs in their own sections, which does not apply for
+   pdp11 a.out format, and for a special case of GNU Modula2 which is not
+   supported for the PDP11.  */
 #define external_nlist pdp11_external_nlist
 struct pdp11_external_nlist
 {
-  bfd_byte e_unused[2];		/* Unused.  */
+  bfd_byte e_desc[2];		/* The desc field for .stab symbols, else 0.  */
   bfd_byte e_strx[2];		/* Index into string table of name.  */
   bfd_byte e_type[1];		/* Type of symbol.  */
   bfd_byte e_ovly[1];		/* Overlay number.  */
@@ -128,7 +145,7 @@ struct pdp11_external_nlist
 #define MY_entry_is_text_address 1
 
 #define MY_write_object_contents MY(write_object_contents)
-static bfd_boolean MY(write_object_contents) (bfd *);
+static bool MY(write_object_contents) (bfd *);
 #define MY_text_includes_header 1
 
 #define MY_BFD_TARGET
@@ -149,6 +166,13 @@ static bfd_boolean MY(write_object_conte
 #include "aout/stab_gnu.h"
 #include "aout/ar.h"
 
+/* The symbol type numbers for the 16-bit a.out format from 2.11BSD differ from
+   those defined in aout64.h so we must redefine them here.  N_EXT changes from
+   0x01 to 0x20 which creates a conflict with some .stab values, in particular
+   between undefined externals (N_UNDF+N_EXT) vs. global variables (N_GYSM) and
+   between external bss symbols (N_BSS+N_EXT) vs. function names (N_FUN).  We
+   disambiguate those conflicts with a hack in is_stab() to look for the ':' in
+   the global variable or function name string.  */
 #undef N_TYPE
 #undef N_UNDF
 #undef N_ABS
@@ -158,6 +182,7 @@ static bfd_boolean MY(write_object_conte
 #undef N_REG
 #undef N_FN
 #undef N_EXT
+#undef N_STAB
 #define N_TYPE		0x1f	/* Type mask.  */
 #define N_UNDF		0x00	/* Undefined.  */
 #define N_ABS		0x01	/* Absolute.  */
@@ -167,6 +192,12 @@ static bfd_boolean MY(write_object_conte
 #define N_REG		0x14	/* Register symbol.  */
 #define N_FN		0x1f	/* File name.  */
 #define N_EXT		0x20	/* External flag.  */
+/* Type numbers from .stab entries that could conflict:
+	N_GSYM		0x20	   Global variable [conflict with external undef]
+	N_FNAME		0x22	   Function name (for BSD Fortran) [ignored]
+	N_FUN		0x24	   Function name [conflict with external BSS]
+	N_NOMAP		0x34	   No DST map for sym. [ext. reg. doesn't exist]
+*/
 
 #define RELOC_SIZE 2
 
@@ -242,20 +273,27 @@ struct aout_final_link_info
   struct external_nlist *output_syms;
 };
 
+/* Copy of the link_info.separate_code boolean to select the output format with
+   separate instruction and data spaces selected by --imagic */
+static bool separate_i_d = false;
+
 reloc_howto_type howto_table_pdp11[] =
 {
   /* type	       rs size bsz  pcrel bitpos ovrf			  sf name     part_inpl readmask  setmask    pcdone */
-HOWTO( 0,	       0,  1,  16,  FALSE, 0, complain_overflow_signed,0,"16",	TRUE, 0x0000ffff,0x0000ffff, FALSE),
-HOWTO( 1,	       0,  1,  16,  TRUE,  0, complain_overflow_signed,0,"DISP16",	TRUE, 0x0000ffff,0x0000ffff, FALSE),
+HOWTO( 0,	       0,  2,  16,  false, 0, complain_overflow_dont,0,"16",	true, 0x0000ffff,0x0000ffff, false),
+HOWTO( 1,	       0,  2,  16,  true,  0, complain_overflow_dont,0,"DISP16",	true, 0x0000ffff,0x0000ffff, false),
+HOWTO( 2,	       0,  4,  32,  false, 0, complain_overflow_dont,0,"32",	true, 0x0000ffff,0x0000ffff, false),
 };
 
 #define TABLE_SIZE(TABLE)	(sizeof(TABLE)/sizeof(TABLE[0]))
 
 
-static bfd_boolean aout_link_check_archive_element (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *, bfd_boolean *);
-static bfd_boolean aout_link_add_object_symbols	   (bfd *, struct bfd_link_info *);
-static bfd_boolean aout_link_add_symbols	   (bfd *, struct bfd_link_info *);
-static bfd_boolean aout_link_write_symbols	   (struct aout_final_link_info *, bfd *);
+static bool aout_link_check_archive_element (bfd *, struct bfd_link_info *,
+					     struct bfd_link_hash_entry *,
+					     const char *, bool *);
+static bool aout_link_add_object_symbols (bfd *, struct bfd_link_info *);
+static bool aout_link_add_symbols (bfd *, struct bfd_link_info *);
+static bool aout_link_write_symbols (struct aout_final_link_info *, bfd *);
 
 
 reloc_howto_type *
@@ -268,6 +306,8 @@ NAME (aout, reloc_type_lookup) (bfd * ab
       return &howto_table_pdp11[0];
     case BFD_RELOC_16_PCREL:
       return &howto_table_pdp11[1];
+    case BFD_RELOC_32:
+      return &howto_table_pdp11[2];
     default:
       return NULL;
     }
@@ -289,6 +329,19 @@ NAME (aout, reloc_name_lookup) (bfd *abf
   return NULL;
 }
 
+/* Disambiguate conflicts between normal symbol types and .stab symbol types
+   (undefined externals N_UNDF+N_EXT vs. global variables N_GYSM and external
+   bss symbols N_BSS+N_EXT vs. function names N_FUN) with a hack to look for
+   the ':' in the global variable or function name string.  */
+
+static int
+is_stab (int type, const char *name)
+{
+  if (type == N_GSYM || type == N_FUN)
+    return strchr (name, ':') != NULL;
+  return type > N_FUN;
+}
+
 static int
 pdp11_aout_write_headers (bfd *abfd, struct internal_exec *execp)
 {
@@ -314,42 +367,41 @@ pdp11_aout_write_headers (bfd *abfd, str
 
   NAME (aout, swap_exec_header_out) (abfd, execp, & exec_bytes);
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
+    return false;
 
-  if (bfd_bwrite ((void *) &exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, abfd)
-      != EXEC_BYTES_SIZE)
-    return FALSE;
+  if (bfd_write (&exec_bytes, EXEC_BYTES_SIZE, abfd) != EXEC_BYTES_SIZE)
+    return false;
 
   /* Now write out reloc info, followed by syms and strings.  */
   if (bfd_get_outsymbols (abfd) != NULL
       && bfd_get_symcount (abfd) != 0)
     {
-      if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (execp)), SEEK_SET) != 0)
-	return FALSE;
+      if (bfd_seek (abfd, N_SYMOFF (execp), SEEK_SET) != 0)
+	return false;
 
       if (! NAME (aout, write_syms) (abfd))
-	return FALSE;
+	return false;
     }
 
   if (obj_textsec (abfd)->reloc_count > 0
       || obj_datasec (abfd)->reloc_count > 0)
     {
-      if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (execp)), SEEK_SET) != 0
+      if (bfd_seek (abfd, N_TRELOFF (execp), SEEK_SET) != 0
 	  || !NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd))
-	  || bfd_seek (abfd, (file_ptr) (N_DRELOFF (execp)), SEEK_SET) != 0
+	  || bfd_seek (abfd, N_DRELOFF (execp), SEEK_SET) != 0
 	  || !NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd)))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write an object file.
    Section contents have already been written.  We write the
    file header, symbols, and relocation.  */
 
-static bfd_boolean
+static bool
 MY(write_object_contents) (bfd *abfd)
 {
   struct internal_exec *execp = exec_hdr (abfd);
@@ -434,16 +486,16 @@ NAME (aout, swap_exec_header_out) (bfd *
 
 /* Make all the section for an a.out file.  */
 
-bfd_boolean
+bool
 NAME (aout, make_sections) (bfd *abfd)
 {
   if (obj_textsec (abfd) == NULL && bfd_make_section (abfd, ".text") == NULL)
-    return FALSE;
+    return false;
   if (obj_datasec (abfd) == NULL && bfd_make_section (abfd, ".data") == NULL)
-    return FALSE;
+    return false;
   if (obj_bsssec (abfd) == NULL  && bfd_make_section (abfd, ".bss") == NULL)
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 /* Some a.out variant thinks that the file open in ABFD
@@ -452,14 +504,14 @@ NAME (aout, make_sections) (bfd *abfd)
    environment's "finish up" function just before returning, to
    handle any last-minute setup.  */
 
-const bfd_target *
+bfd_cleanup
 NAME (aout, some_aout_object_p) (bfd *abfd,
 				 struct internal_exec *execp,
-				 const bfd_target *(*callback_to_real_object_p) (bfd *))
+				 bfd_cleanup (*callback_to_real_object_p) (bfd *))
 {
   struct aout_data_struct *rawptr, *oldrawptr;
-  const bfd_target *result;
-  bfd_size_type amt = sizeof (struct aout_data_struct);
+  bfd_cleanup cleanup;
+  size_t amt = sizeof (struct aout_data_struct);
 
   rawptr = bfd_zalloc (abfd, amt);
   if (rawptr == NULL)
@@ -498,6 +550,8 @@ NAME (aout, some_aout_object_p) (bfd *ab
     }
   else if (N_MAGIC (execp) == OMAGIC)
     adata (abfd).magic = o_magic;
+  else if (N_MAGIC (execp) == IMAGIC)
+    adata (abfd).magic = i_magic;
   else
     {
       /* Should have been checked with N_BADMAG before this routine
@@ -580,7 +634,7 @@ NAME (aout, some_aout_object_p) (bfd *ab
   adata(abfd)->segment_size = SEGMENT_SIZE;
   adata(abfd)->exec_bytes_size = EXEC_BYTES_SIZE;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
   /* The architecture is encoded in various ways in various a.out variants,
      or is not encoded at all in some of them.  The relocation size depends
@@ -592,7 +646,7 @@ NAME (aout, some_aout_object_p) (bfd *ab
      header, should cope with them in this callback as well.  */
 #endif	/* DOCUMENTATION */
 
-  result = (*callback_to_real_object_p)(abfd);
+  cleanup = (*callback_to_real_object_p)(abfd);
 
   /* Now that the segment addresses have been worked out, take a better
      guess at whether the file is executable.  If the entry point
@@ -610,8 +664,11 @@ NAME (aout, some_aout_object_p) (bfd *ab
      sets the entry point, and that is likely to be non-zero for most systems. */
 
   if (execp->a_entry != 0
-      || (execp->a_entry >= obj_textsec(abfd)->vma
-	  && execp->a_entry < obj_textsec(abfd)->vma + obj_textsec(abfd)->size))
+      || (execp->a_entry >= obj_textsec (abfd)->vma
+	  && execp->a_entry < (obj_textsec (abfd)->vma
+			       + obj_textsec (abfd)->size)
+	  && execp->a_trsize == 0
+	  && execp->a_drsize == 0))
     abfd->flags |= EXEC_P;
 #ifdef STAT_FOR_EXEC
   else
@@ -633,21 +690,21 @@ NAME (aout, some_aout_object_p) (bfd *ab
     }
 #endif /* STAT_FOR_EXEC */
 
-  if (!result)
+  if (!cleanup)
     {
       free (rawptr);
       abfd->tdata.aout_data = oldrawptr;
     }
-  return result;
+  return cleanup;
 }
 
 /* Initialize ABFD for use with a.out files.  */
 
-bfd_boolean
+bool
 NAME (aout, mkobject) (bfd *abfd)
 {
   struct aout_data_struct  *rawptr;
-  bfd_size_type amt = sizeof (struct aout_data_struct);
+  size_t amt = sizeof (struct aout_data_struct);
 
   bfd_set_error (bfd_error_system_call);
 
@@ -655,7 +712,7 @@ NAME (aout, mkobject) (bfd *abfd)
   rawptr = bfd_zalloc (abfd, amt);
 
   if (rawptr == NULL)
-    return FALSE;
+    return false;
 
   abfd->tdata.aout_data = rawptr;
   exec_hdr (abfd) = &(rawptr->e);
@@ -664,7 +721,7 @@ NAME (aout, mkobject) (bfd *abfd)
   obj_datasec (abfd) = NULL;
   obj_bsssec (abfd)  = NULL;
 
-  return TRUE;
+  return true;
 }
 
 /* Keep track of machine architecture and machine type for
@@ -678,12 +735,12 @@ NAME (aout, mkobject) (bfd *abfd)
 enum machine_type
 NAME (aout, machine_type) (enum bfd_architecture arch,
 			   unsigned long machine,
-			   bfd_boolean *unknown)
+			   bool *unknown)
 {
   enum machine_type arch_flags;
 
   arch_flags = M_UNKNOWN;
-  *unknown = TRUE;
+  *unknown = true;
 
   switch (arch)
     {
@@ -740,11 +797,11 @@ NAME (aout, machine_type) (enum bfd_arch
 
     case bfd_arch_pdp11:
       /* TODO: arch_flags = M_PDP11; */
-      *unknown = FALSE;
+      *unknown = false;
       break;
 
     case bfd_arch_vax:
-      *unknown = FALSE;
+      *unknown = false;
       break;
 
     default:
@@ -752,7 +809,7 @@ NAME (aout, machine_type) (enum bfd_arch
     }
 
   if (arch_flags != M_UNKNOWN)
-    *unknown = FALSE;
+    *unknown = false;
 
   return arch_flags;
 }
@@ -761,21 +818,21 @@ NAME (aout, machine_type) (enum bfd_arch
    values ARCH and MACHINE.  Verify that @ABFD's format
    can support the architecture required.  */
 
-bfd_boolean
+bool
 NAME (aout, set_arch_mach) (bfd *abfd,
 			    enum bfd_architecture arch,
 			    unsigned long machine)
 {
   if (! bfd_default_set_arch_mach (abfd, arch, machine))
-    return FALSE;
+    return false;
 
   if (arch != bfd_arch_unknown)
     {
-      bfd_boolean unknown;
+      bool unknown;
 
       NAME (aout, machine_type) (arch, machine, &unknown);
       if (unknown)
-	return FALSE;
+	return false;
     }
 
   obj_reloc_entry_size (abfd) = RELOC_SIZE;
@@ -789,57 +846,56 @@ adjust_o_magic (bfd *abfd, struct intern
   file_ptr pos = adata (abfd).exec_bytes_size;
   bfd_vma vma = 0;
   int pad = 0;
+  asection *text = obj_textsec (abfd);
+  asection *data = obj_datasec (abfd);
+  asection *bss = obj_bsssec (abfd);
 
   /* Text.  */
-  obj_textsec (abfd)->filepos = pos;
-  if (! obj_textsec (abfd)->user_set_vma)
-    obj_textsec (abfd)->vma = vma;
+  text->filepos = pos;
+  if (!text->user_set_vma)
+    text->vma = vma;
   else
-    vma = obj_textsec (abfd)->vma;
+    vma = text->vma;
 
-  pos += obj_textsec (abfd)->size;
-  vma += obj_textsec (abfd)->size;
+  pos += execp->a_text;
+  vma += execp->a_text;
 
   /* Data.  */
-  if (!obj_datasec (abfd)->user_set_vma)
+  if (!data->user_set_vma)
     {
-      obj_textsec (abfd)->size += pad;
       pos += pad;
       vma += pad;
-      obj_datasec (abfd)->vma = vma;
+      data->vma = vma;
     }
   else
-    vma = obj_datasec (abfd)->vma;
-  obj_datasec (abfd)->filepos = pos;
-  pos += obj_datasec (abfd)->size;
-  vma += obj_datasec (abfd)->size;
+    vma = data->vma;
+  execp->a_text += pad;
+
+  data->filepos = pos;
+  pos += data->size;
+  vma += data->size;
 
   /* BSS.  */
-  if (! obj_bsssec (abfd)->user_set_vma)
+  if (!bss->user_set_vma)
     {
-      obj_datasec (abfd)->size += pad;
       pos += pad;
       vma += pad;
-      obj_bsssec (abfd)->vma = vma;
+      bss->vma = vma;
     }
-  else
+  else if (data->size > 0 || bss->size > 0) /* PR25677: for objcopy --extract-symbol */
     {
       /* The VMA of the .bss section is set by the VMA of the
 	 .data section plus the size of the .data section.  We may
 	 need to add padding bytes to make this true.  */
-      pad = obj_bsssec (abfd)->vma - vma;
-      if (pad > 0)
-	{
-	  obj_datasec (abfd)->size += pad;
-	  pos += pad;
-	}
+      pad = bss->vma - vma;
+      if (pad < 0)
+	pad = 0;
+      pos += pad;
     }
-  obj_bsssec (abfd)->filepos = pos;
+  execp->a_data = data->size + pad;
+  bss->filepos = pos;
+  execp->a_bss = bss->size;
 
-  /* Fix up the exec header.  */
-  execp->a_text = obj_textsec (abfd)->size;
-  execp->a_data = obj_datasec (abfd)->size;
-  execp->a_bss  = obj_bsssec (abfd)->size;
   N_SET_MAGIC (execp, OMAGIC);
 }
 
@@ -849,7 +905,11 @@ adjust_z_magic (bfd *abfd, struct intern
   bfd_size_type data_pad, text_pad;
   file_ptr text_end;
   const struct aout_backend_data *abdp;
-  int ztih;			/* Nonzero if text includes exec header.  */
+  /* TRUE if text includes exec header.  */
+  bool ztih;
+  asection *text = obj_textsec (abfd);
+  asection *data = obj_datasec (abfd);
+  asection *bss = obj_bsssec (abfd);
 
   abdp = aout_backend_info (abfd);
 
@@ -857,18 +917,17 @@ adjust_z_magic (bfd *abfd, struct intern
   ztih = (abdp != NULL
 	  && (abdp->text_includes_header
 	      || obj_aout_subformat (abfd) == q_magic_format));
-  obj_textsec(abfd)->filepos = (ztih
-				? adata(abfd).exec_bytes_size
-				: adata(abfd).zmagic_disk_block_size);
-  if (! obj_textsec(abfd)->user_set_vma)
+  text->filepos = (ztih
+		   ? adata (abfd).exec_bytes_size
+		   : adata (abfd).zmagic_disk_block_size);
+  if (!text->user_set_vma)
     {
       /* ?? Do we really need to check for relocs here?  */
-      obj_textsec(abfd)->vma = ((abfd->flags & HAS_RELOC)
-				? 0
-				: (ztih
-				   ? (abdp->default_text_vma
-				      + adata (abfd).exec_bytes_size)
-				   : abdp->default_text_vma));
+      text->vma = ((abfd->flags & HAS_RELOC)
+		   ? 0
+		   : (ztih
+		      ? abdp->default_text_vma + adata (abfd).exec_bytes_size
+		      : abdp->default_text_vma));
       text_pad = 0;
     }
   else
@@ -877,17 +936,17 @@ adjust_z_magic (bfd *abfd, struct intern
 	 may need to pad it such that the .data section starts at a page
 	 boundary.  */
       if (ztih)
-	text_pad = ((obj_textsec (abfd)->filepos - obj_textsec (abfd)->vma)
+	text_pad = ((text->filepos - text->vma)
 		    & (adata (abfd).page_size - 1));
       else
-	text_pad = ((- obj_textsec (abfd)->vma)
+	text_pad = (-text->vma
 		    & (adata (abfd).page_size - 1));
     }
 
   /* Find start of data.  */
   if (ztih)
     {
-      text_end = obj_textsec (abfd)->filepos + obj_textsec (abfd)->size;
+      text_end = text->filepos + execp->a_text;
       text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end;
     }
   else
@@ -895,49 +954,42 @@ adjust_z_magic (bfd *abfd, struct intern
       /* Note that if page_size == zmagic_disk_block_size, then
 	 filepos == page_size, and this case is the same as the ztih
 	 case.  */
-      text_end = obj_textsec (abfd)->size;
+      text_end = execp->a_text;
       text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end;
-      text_end += obj_textsec (abfd)->filepos;
+      text_end += text->filepos;
     }
-
-  obj_textsec (abfd)->size += text_pad;
-  text_end += text_pad;
+  execp->a_text += text_pad;
 
   /* Data.  */
-  if (!obj_datasec(abfd)->user_set_vma)
+  if (!data->user_set_vma)
     {
       bfd_vma vma;
-      vma = obj_textsec(abfd)->vma + obj_textsec(abfd)->size;
-      obj_datasec(abfd)->vma = BFD_ALIGN (vma, adata(abfd).segment_size);
+      vma = text->vma + execp->a_text;
+      data->vma = BFD_ALIGN (vma, adata (abfd).segment_size);
     }
   if (abdp && abdp->zmagic_mapped_contiguous)
     {
-      text_pad = (obj_datasec(abfd)->vma
-		  - obj_textsec(abfd)->vma
-		  - obj_textsec(abfd)->size);
-      obj_textsec(abfd)->size += text_pad;
+      text_pad = data->vma - (text->vma + execp->a_text);
+      /* Only pad the text section if the data
+	 section is going to be placed after it.  */
+      if (text_pad > 0)
+	execp->a_text += text_pad;
     }
-  obj_datasec (abfd)->filepos = (obj_textsec (abfd)->filepos
-				+ obj_textsec (abfd)->size);
+  data->filepos = text->filepos + execp->a_text;
 
   /* Fix up exec header while we're at it.  */
-  execp->a_text = obj_textsec(abfd)->size;
   if (ztih && (!abdp || (abdp && !abdp->exec_header_not_counted)))
-    execp->a_text += adata(abfd).exec_bytes_size;
+    execp->a_text += adata (abfd).exec_bytes_size;
   N_SET_MAGIC (execp, ZMAGIC);
 
   /* Spec says data section should be rounded up to page boundary.  */
-  obj_datasec(abfd)->size
-    = align_power (obj_datasec(abfd)->size,
-		   obj_bsssec(abfd)->alignment_power);
-  execp->a_data = BFD_ALIGN (obj_datasec(abfd)->size,
-			     adata(abfd).page_size);
-  data_pad = execp->a_data - obj_datasec(abfd)->size;
+  execp->a_data = align_power (data->size, bss->alignment_power);
+  execp->a_data = BFD_ALIGN (execp->a_data, adata (abfd).page_size);
+  data_pad = execp->a_data - data->size;
 
   /* BSS.  */
-  if (!obj_bsssec(abfd)->user_set_vma)
-    obj_bsssec(abfd)->vma = (obj_datasec(abfd)->vma
-			     + obj_datasec(abfd)->size);
+  if (!bss->user_set_vma)
+    bss->vma = data->vma + execp->a_data;
   /* If the BSS immediately follows the data section and extra space
      in the page is left after the data section, fudge data
      in the header so that the bss section looks smaller by that
@@ -945,69 +997,108 @@ adjust_z_magic (bfd *abfd, struct intern
      (Note that a linker script, as well as the above assignment,
      could have explicitly set the BSS vma to immediately follow
      the data section.)  */
-  if (align_power (obj_bsssec(abfd)->vma, obj_bsssec(abfd)->alignment_power)
-      == obj_datasec(abfd)->vma + obj_datasec(abfd)->size)
-    execp->a_bss = (data_pad > obj_bsssec(abfd)->size) ? 0 :
-      obj_bsssec(abfd)->size - data_pad;
+  if (align_power (bss->vma, bss->alignment_power) == data->vma + execp->a_data)
+    execp->a_bss = data_pad > bss->size ? 0 : bss->size - data_pad;
   else
-    execp->a_bss = obj_bsssec(abfd)->size;
+    execp->a_bss = bss->size;
 }
 
 static void
 adjust_n_magic (bfd *abfd, struct internal_exec *execp)
 {
-  file_ptr pos = adata(abfd).exec_bytes_size;
+  file_ptr pos = adata (abfd).exec_bytes_size;
   bfd_vma vma = 0;
   int pad;
+  asection *text = obj_textsec (abfd);
+  asection *data = obj_datasec (abfd);
+  asection *bss = obj_bsssec (abfd);
 
   /* Text.  */
-  obj_textsec(abfd)->filepos = pos;
-  if (!obj_textsec(abfd)->user_set_vma)
-    obj_textsec(abfd)->vma = vma;
+  text->filepos = pos;
+  if (!text->user_set_vma)
+    text->vma = vma;
   else
-    vma = obj_textsec(abfd)->vma;
-  pos += obj_textsec(abfd)->size;
-  vma += obj_textsec(abfd)->size;
+    vma = text->vma;
+  pos += execp->a_text;
+  vma += execp->a_text;
 
   /* Data.  */
-  obj_datasec(abfd)->filepos = pos;
-  if (!obj_datasec(abfd)->user_set_vma)
-    obj_datasec(abfd)->vma = BFD_ALIGN (vma, adata(abfd).segment_size);
-  vma = obj_datasec(abfd)->vma;
+  data->filepos = pos;
+  if (!data->user_set_vma)
+    data->vma = BFD_ALIGN (vma, adata (abfd).segment_size);
+  vma = data->vma;
 
   /* Since BSS follows data immediately, see if it needs alignment.  */
-  vma += obj_datasec(abfd)->size;
-  pad = align_power (vma, obj_bsssec(abfd)->alignment_power) - vma;
-  obj_datasec(abfd)->size += pad;
-  pos += obj_datasec(abfd)->size;
+  vma += data->size;
+  pad = align_power (vma, bss->alignment_power) - vma;
+  execp->a_data = data->size + pad;
+  pos += execp->a_data;
 
   /* BSS.  */
-  if (!obj_bsssec(abfd)->user_set_vma)
-    obj_bsssec(abfd)->vma = vma;
+  if (!bss->user_set_vma)
+    bss->vma = vma;
   else
-    vma = obj_bsssec(abfd)->vma;
+    vma = bss->vma;
 
   /* Fix up exec header.  */
-  execp->a_text = obj_textsec(abfd)->size;
-  execp->a_data = obj_datasec(abfd)->size;
-  execp->a_bss = obj_bsssec(abfd)->size;
+  execp->a_bss = bss->size;
   N_SET_MAGIC (execp, NMAGIC);
 }
 
-bfd_boolean
+static void
+adjust_i_magic (bfd *abfd, struct internal_exec *execp)
+{
+  file_ptr pos = adata (abfd).exec_bytes_size;
+  bfd_vma vma = 0;
+  int pad;
+  asection *text = obj_textsec (abfd);
+  asection *data = obj_datasec (abfd);
+  asection *bss = obj_bsssec (abfd);
+
+  /* Text.  */
+  text->filepos = pos;
+  if (!text->user_set_vma)
+    text->vma = vma;
+  else
+    vma = text->vma;
+  pos += execp->a_text;
+
+  /* Data.  */
+  data->filepos = pos;
+  if (!data->user_set_vma)
+    data->vma = 0;
+  vma = data->vma;
+
+  /* Since BSS follows data immediately, see if it needs alignment.  */
+  vma += data->size;
+  pad = align_power (vma, bss->alignment_power) - vma;
+  execp->a_data = data->size + pad;
+  pos += execp->a_data;
+
+  /* BSS.  */
+  if (!bss->user_set_vma)
+    bss->vma = vma;
+  else
+    vma = bss->vma;
+
+  /* Fix up exec header.  */
+  execp->a_bss = bss->size;
+  N_SET_MAGIC (execp, IMAGIC);
+}
+
+bool
 NAME (aout, adjust_sizes_and_vmas) (bfd *abfd)
 {
   struct internal_exec *execp = exec_hdr (abfd);
 
   if (! NAME (aout, make_sections) (abfd))
-    return FALSE;
+    return false;
 
-  if (adata(abfd).magic != undecided_magic)
-    return TRUE;
+  if (adata (abfd).magic != undecided_magic)
+    return true;
 
-  obj_textsec(abfd)->size =
-    align_power(obj_textsec(abfd)->size,
-		obj_textsec(abfd)->alignment_power);
+  execp->a_text = align_power (obj_textsec (abfd)->size,
+			       obj_textsec (abfd)->alignment_power);
 
   /* Rule (heuristic) for when to pad to a new page.  Note that there
      are (at least) two ways demand-paged (ZMAGIC) files have been
@@ -1015,7 +1106,7 @@ NAME (aout, adjust_sizes_and_vmas) (bfd
      (TARGET_PAGE_SIZE).  However, newer versions of SUNOS start the text
      segment right after the exec header; the latter is counted in the
      text segment size, and is paged in by the kernel with the rest of
-     the text. */
+     the text.  */
 
   /* This perhaps isn't the right way to do this, but made it simpler for me
      to understand enough to implement it.  Better would probably be to go
@@ -1025,33 +1116,37 @@ NAME (aout, adjust_sizes_and_vmas) (bfd
      I understand it better now, but I haven't time to do the cleanup this
      minute.  */
 
-  if (abfd->flags & WP_TEXT)
-    adata(abfd).magic = n_magic;
+  if (separate_i_d)
+    adata (abfd).magic = i_magic;
+  else if (abfd->flags & WP_TEXT)
+    adata (abfd).magic = n_magic;
   else
-    adata(abfd).magic = o_magic;
+    adata (abfd).magic = o_magic;
 
 #ifdef BFD_AOUT_DEBUG /* requires gcc2 */
 #if __GNUC__ >= 2
   fprintf (stderr, "%s text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x,%x>\n",
 	   ({ char *str;
-	      switch (adata(abfd).magic) {
-	      case n_magic: str = "NMAGIC"; break;
-	      case o_magic: str = "OMAGIC"; break;
-	      case z_magic: str = "ZMAGIC"; break;
-	      default: abort ();
-	      }
+	      switch (adata (abfd).magic)
+		{
+		case n_magic: str = "NMAGIC"; break;
+		case o_magic: str = "OMAGIC"; break;
+		case i_magic: str = "IMAGIC"; break;
+		case z_magic: str = "ZMAGIC"; break;
+		default: abort ();
+		}
 	      str;
 	    }),
-	   obj_textsec(abfd)->vma, obj_textsec(abfd)->size,
-		obj_textsec(abfd)->alignment_power,
-	   obj_datasec(abfd)->vma, obj_datasec(abfd)->size,
-		obj_datasec(abfd)->alignment_power,
-	   obj_bsssec(abfd)->vma, obj_bsssec(abfd)->size,
-		obj_bsssec(abfd)->alignment_power);
+	   obj_textsec (abfd)->vma, obj_textsec (abfd)->size,
+		obj_textsec (abfd)->alignment_power,
+	   obj_datasec (abfd)->vma, obj_datasec (abfd)->size,
+		obj_datasec (abfd)->alignment_power,
+	   obj_bsssec (abfd)->vma, obj_bsssec (abfd)->size,
+		obj_bsssec (abfd)->alignment_power);
 #endif
 #endif
 
-  switch (adata(abfd).magic)
+  switch (adata (abfd).magic)
     {
     case o_magic:
       adjust_o_magic (abfd, execp);
@@ -1062,25 +1157,28 @@ NAME (aout, adjust_sizes_and_vmas) (bfd
     case n_magic:
       adjust_n_magic (abfd, execp);
       break;
+    case i_magic:
+      adjust_i_magic (abfd, execp);
+      break;
     default:
       abort ();
     }
 
 #ifdef BFD_AOUT_DEBUG
   fprintf (stderr, "       text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x>\n",
-	   obj_textsec(abfd)->vma, obj_textsec(abfd)->size,
-		obj_textsec(abfd)->filepos,
-	   obj_datasec(abfd)->vma, obj_datasec(abfd)->size,
-		obj_datasec(abfd)->filepos,
-	   obj_bsssec(abfd)->vma, obj_bsssec(abfd)->size);
+	   obj_textsec (abfd)->vma, execp->a_text,
+		obj_textsec (abfd)->filepos,
+	   obj_datasec (abfd)->vma, execp->a_data,
+		obj_datasec (abfd)->filepos,
+	   obj_bsssec (abfd)->vma, execp->a_bss);
 #endif
 
-  return TRUE;
+  return true;
 }
 
 /* Called by the BFD in response to a bfd_make_section request.  */
 
-bfd_boolean
+bool
 NAME (aout, new_section_hook) (bfd *abfd, asection *newsect)
 {
   /* Align to double at least.  */
@@ -1112,7 +1210,7 @@ NAME (aout, new_section_hook) (bfd *abfd
   return _bfd_generic_new_section_hook (abfd, newsect);
 }
 
-bfd_boolean
+bool
 NAME (aout, set_section_contents) (bfd *abfd,
 				   sec_ptr section,
 				   const void * location,
@@ -1122,13 +1220,13 @@ NAME (aout, set_section_contents) (bfd *
   if (! abfd->output_has_begun)
     {
       if (! NAME (aout, adjust_sizes_and_vmas) (abfd))
-	return FALSE;
+	return false;
     }
 
   if (section == obj_bsssec (abfd))
     {
       bfd_set_error (bfd_error_no_contents);
-      return FALSE;
+      return false;
     }
 
   if (section != obj_textsec (abfd)
@@ -1139,22 +1237,22 @@ NAME (aout, set_section_contents) (bfd *
 	(_("%pB: can not represent section `%pA' in a.out object file format"),
 	 abfd, section);
       bfd_set_error (bfd_error_nonrepresentable_section);
-      return FALSE;
+      return false;
     }
 
   if (count != 0)
     {
       if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
-	  || bfd_bwrite (location, count, abfd) != count)
-	return FALSE;
+	  || bfd_write (location, count, abfd) != count)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read the external symbols from an a.out file.  */
 
-static bfd_boolean
+static bool
 aout_get_external_symbols (bfd *abfd)
 {
   if (obj_aout_external_syms (abfd) == NULL)
@@ -1169,30 +1267,26 @@ aout_get_external_symbols (bfd *abfd)
 	{
 	  obj_aout_external_syms (abfd) = NULL;
 	  obj_aout_external_sym_count (abfd) = count;
-	  return TRUE;
+	  return true;
 	}
 
 #ifdef USE_MMAP
       if (! bfd_get_file_window (abfd, obj_sym_filepos (abfd),
 				 exec_hdr (abfd)->a_syms,
-				 &obj_aout_sym_window (abfd), TRUE))
-	return FALSE;
+				 &obj_aout_sym_window (abfd), true))
+	return false;
       syms = (struct external_nlist *) obj_aout_sym_window (abfd).data;
 #else
       /* We allocate using malloc to make the values easy to free
 	 later on.  If we put them on the objalloc it might not be
 	 possible to free them.  */
-      syms = bfd_malloc (count * EXTERNAL_NLIST_SIZE);
-      if (syms == NULL && count != 0)
-	return FALSE;
-
-      if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
-	  || (bfd_bread (syms, exec_hdr (abfd)->a_syms, abfd)
-	      != exec_hdr (abfd)->a_syms))
-	{
-	  free (syms);
-	  return FALSE;
-	}
+      if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0)
+	return false;
+      syms = (struct external_nlist *)
+	_bfd_malloc_and_read (abfd, count * EXTERNAL_NLIST_SIZE,
+			      count * EXTERNAL_NLIST_SIZE);
+      if (syms == NULL)
+	return false;
 #endif
 
       obj_aout_external_syms (abfd) = syms;
@@ -1205,42 +1299,59 @@ aout_get_external_symbols (bfd *abfd)
       unsigned char string_chars[BYTES_IN_LONG];
       bfd_size_type stringsize;
       char *strings;
+      bfd_size_type amt = BYTES_IN_LONG;
 
       /* Get the size of the strings.  */
       if (bfd_seek (abfd, obj_str_filepos (abfd), SEEK_SET) != 0
-	  || (bfd_bread ((void *) string_chars, (bfd_size_type) BYTES_IN_LONG,
-			abfd) != BYTES_IN_LONG))
-	return FALSE;
+	  || bfd_read (string_chars, amt, abfd) != amt)
+	return false;
       stringsize = H_GET_32 (abfd, string_chars);
+      if (stringsize == 0)
+	stringsize = 1;
+      else if (stringsize < BYTES_IN_LONG
+	       || (size_t) stringsize != stringsize)
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
 
 #ifdef USE_MMAP
-      if (! bfd_get_file_window (abfd, obj_str_filepos (abfd), stringsize,
-				 &obj_aout_string_window (abfd), TRUE))
-	return FALSE;
-      strings = (char *) obj_aout_string_window (abfd).data;
-#else
-      strings = bfd_malloc (stringsize + 1);
-      if (strings == NULL)
-	return FALSE;
-
-      /* Skip space for the string count in the buffer for convenience
-	 when using indexes.  */
-      if (bfd_bread (strings + 4, stringsize - 4, abfd) != stringsize - 4)
+      if (stringsize >= BYTES_IN_LONG)
 	{
-	  free (strings);
-	  return FALSE;
+	  if (! bfd_get_file_window (abfd, obj_str_filepos (abfd), stringsize + 1,
+				     &obj_aout_string_window (abfd), true))
+	    return false;
+	  strings = (char *) obj_aout_string_window (abfd).data;
 	}
+      else
 #endif
+	{
+	  strings = (char *) bfd_malloc (stringsize + 1);
+	  if (strings == NULL)
+	    return false;
+
+	  if (stringsize >= BYTES_IN_LONG)
+	    {
+	      amt = stringsize - BYTES_IN_LONG;
+	      if (bfd_read (strings + BYTES_IN_LONG, amt, abfd) != amt)
+		{
+		  free (strings);
+		  return false;
+		}
+	    }
+	}
       /* Ensure that a zero index yields an empty string.  */
-      strings[0] = '\0';
+      if (stringsize >= BYTES_IN_WORD)
+	memset (strings, 0, BYTES_IN_LONG);
 
-      strings[stringsize - 1] = 0;
+      /* Ensure that the string buffer is NUL terminated.  */
+      strings[stringsize] = 0;
 
       obj_aout_external_strings (abfd) = strings;
       obj_aout_external_string_size (abfd) = stringsize;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Translate an a.out symbol into a BFD symbol.  The desc, other, type
@@ -1248,13 +1359,13 @@ aout_get_external_symbols (bfd *abfd)
    nlist structure.  This function is responsible for setting
    symbol->flags and symbol->section, and adjusting symbol->value.  */
 
-static bfd_boolean
+static bool
 translate_from_native_sym_flags (bfd *abfd,
 				 aout_symbol_type *cache_ptr)
 {
   flagword visible;
 
-  if (cache_ptr->type == N_FN)
+  if (is_stab (cache_ptr->type, cache_ptr->symbol.name))
     {
       asection *sec;
 
@@ -1262,20 +1373,25 @@ translate_from_native_sym_flags (bfd *ab
       cache_ptr->symbol.flags = BSF_DEBUGGING;
 
       /* Work out the symbol section.  */
-      switch (cache_ptr->type & N_TYPE)
+      switch (cache_ptr->type)
 	{
-	case N_TEXT:
+	case N_SO:
+	case N_SOL:
+	case N_FUN:
+	case N_ENTRY:
+	case N_SLINE:
 	case N_FN:
 	  sec = obj_textsec (abfd);
 	  break;
-	case N_DATA:
+	case N_STSYM:
+	case N_DSLINE:
 	  sec = obj_datasec (abfd);
 	  break;
-	case N_BSS:
+	case N_LCSYM:
+	case N_BSLINE:
 	  sec = obj_bsssec (abfd);
 	  break;
 	default:
-	case N_ABS:
 	  sec = bfd_abs_section_ptr;
 	  break;
 	}
@@ -1283,7 +1399,7 @@ translate_from_native_sym_flags (bfd *ab
       cache_ptr->symbol.section = sec;
       cache_ptr->symbol.value -= sec->vma;
 
-      return TRUE;
+      return true;
     }
 
   /* Get the default visibility.  This does not apply to all types, so
@@ -1334,12 +1450,12 @@ translate_from_native_sym_flags (bfd *ab
       break;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the fields of SYM_POINTER according to CACHE_PTR.  */
 
-static bfd_boolean
+static bool
 translate_to_native_sym_flags (bfd *abfd,
 			       asymbol *cache_ptr,
 			       struct external_nlist *sym_pointer)
@@ -1347,10 +1463,12 @@ translate_to_native_sym_flags (bfd *abfd
   bfd_vma value = cache_ptr->value;
   asection *sec;
   bfd_vma off;
+  const char *name = cache_ptr->name != NULL ? cache_ptr->name : "*unknown*";
 
   /* Mask out any existing type bits in case copying from one section
      to another.  */
-  sym_pointer->e_type[0] &= ~N_TYPE;
+  if (!is_stab (sym_pointer->e_type[0], name))
+    sym_pointer->e_type[0] &= ~N_TYPE;
 
   sec = bfd_asymbol_section (cache_ptr);
   off = 0;
@@ -1362,9 +1480,9 @@ translate_to_native_sym_flags (bfd *abfd
       _bfd_error_handler
 	/* xgettext:c-format */
 	(_("%pB: can not represent section for symbol `%s' in a.out object file format"),
-	 abfd, cache_ptr->name != NULL ? cache_ptr->name : "*unknown*");
+	 abfd, name);
       bfd_set_error (bfd_error_nonrepresentable_section);
-      return FALSE;
+      return false;
     }
 
   if (sec->output_section != NULL)
@@ -1392,7 +1510,7 @@ translate_to_native_sym_flags (bfd *abfd
 	(_("%pB: can not represent section `%pA' in a.out object file format"),
 	 abfd, sec);
       bfd_set_error (bfd_error_nonrepresentable_section);
-      return FALSE;
+      return false;
     }
 
   /* Turn the symbol from section relative to absolute again */
@@ -1405,7 +1523,7 @@ translate_to_native_sym_flags (bfd *abfd
 
   PUT_WORD(abfd, value, sym_pointer->e_value);
 
-  return TRUE;
+  return true;
 }
 
 /* Native-level interface to symbols. */
@@ -1413,7 +1531,7 @@ translate_to_native_sym_flags (bfd *abfd
 asymbol *
 NAME (aout, make_empty_symbol) (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (aout_symbol_type);
+  size_t amt = sizeof (aout_symbol_type);
   aout_symbol_type *new_symbol_type = bfd_zalloc (abfd, amt);
 
   if (!new_symbol_type)
@@ -1423,16 +1541,16 @@ NAME (aout, make_empty_symbol) (bfd *abf
   return &new_symbol_type->symbol;
 }
 
-/* Translate a set of internal symbols into external symbols.  */
+/* Translate a set of external symbols into internal symbols.  */
 
-bfd_boolean
+bool
 NAME (aout, translate_symbol_table) (bfd *abfd,
 				     aout_symbol_type *in,
 				     struct external_nlist *ext,
 				     bfd_size_type count,
 				     char *str,
 				     bfd_size_type strsize,
-				     bfd_boolean dynamic)
+				     bool dynamic)
 {
   struct external_nlist *ext_end;
 
@@ -1440,6 +1558,7 @@ NAME (aout, translate_symbol_table) (bfd
   for (; ext < ext_end; ext++, in++)
     {
       bfd_vma x;
+      int ovly;
 
       x = GET_WORD (abfd, ext->e_strx);
       in->symbol.the_bfd = abfd;
@@ -1454,30 +1573,46 @@ NAME (aout, translate_symbol_table) (bfd
       else if (x < strsize)
 	in->symbol.name = str + x;
       else
-	return FALSE;
-
-      in->symbol.value = GET_SWORD (abfd,  ext->e_value);
-      /* TODO: is 0 a safe value here?  */
-      in->desc = 0;
+	{
+	  _bfd_error_handler
+	    (_("%pB: invalid string offset %" PRIu64 " >= %" PRIu64),
+	     abfd, (uint64_t) x, (uint64_t) strsize);
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+
+      ovly = H_GET_8 (abfd, ext->e_ovly);
+      if (ovly != 0)
+	{
+	  _bfd_error_handler
+	    (_("%pB: symbol indicates overlay (not supported)"), abfd);
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+
+      in->symbol.value = GET_WORD (abfd,  ext->e_value);
+      /* e_desc is zero for normal symbols but for .stab symbols it
+	 carries the desc field in our extended 2.11BSD format. */
+      in->desc = H_GET_16 (abfd, ext->e_desc);
       in->other = 0;
       in->type = H_GET_8 (abfd,  ext->e_type);
       in->symbol.udata.p = NULL;
 
       if (! translate_from_native_sym_flags (abfd, in))
-	return FALSE;
+	return false;
 
       if (dynamic)
 	in->symbol.flags |= BSF_DYNAMIC;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We read the symbols into a buffer, which is discarded when this
    function exits.  We read the strings into a buffer large enough to
    hold them all plus all the cached symbol entries.  */
 
-bfd_boolean
+bool
 NAME (aout, slurp_symbol_table) (bfd *abfd)
 {
   struct external_nlist *old_external_syms;
@@ -1486,18 +1621,18 @@ NAME (aout, slurp_symbol_table) (bfd *ab
 
   /* If there's no work to be done, don't do any.  */
   if (obj_aout_symbols (abfd) != NULL)
-    return TRUE;
+    return true;
 
   old_external_syms = obj_aout_external_syms (abfd);
 
   if (! aout_get_external_symbols (abfd))
-    return FALSE;
+    return false;
 
   cached_size = obj_aout_external_sym_count (abfd);
   cached_size *= sizeof (aout_symbol_type);
   cached = bfd_zmalloc (cached_size);
   if (cached == NULL && cached_size != 0)
-    return FALSE;
+    return false;
 
   /* Convert from external symbol information to internal.  */
   if (! (NAME (aout, translate_symbol_table)
@@ -1506,10 +1641,10 @@ NAME (aout, slurp_symbol_table) (bfd *ab
 	  obj_aout_external_sym_count (abfd),
 	  obj_aout_external_strings (abfd),
 	  obj_aout_external_string_size (abfd),
-	  FALSE)))
+	  false)))
     {
       free (cached);
-      return FALSE;
+      return false;
     }
 
   abfd->symcount = obj_aout_external_sym_count (abfd);
@@ -1531,7 +1666,7 @@ NAME (aout, slurp_symbol_table) (bfd *ab
       obj_aout_external_syms (abfd) = NULL;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We use a hash table when writing out symbols so that we only write
@@ -1546,13 +1681,13 @@ NAME (aout, slurp_symbol_table) (bfd *ab
 /* Get the index of a string in a strtab, adding it if it is not
    already present.  */
 
-static INLINE bfd_size_type
+static inline bfd_size_type
 add_to_stringtab (bfd *abfd,
 		  struct bfd_strtab_hash *tab,
 		  const char *str,
-		  bfd_boolean copy)
+		  bool copy)
 {
-  bfd_boolean hash;
+  bool hash;
   bfd_size_type str_index;
 
   /* An index of 0 always means the empty string.  */
@@ -1561,9 +1696,9 @@ add_to_stringtab (bfd *abfd,
 
   /* Don't hash if BFD_TRADITIONAL_FORMAT is set, because SunOS dbx
      doesn't understand a hashed string table.  */
-  hash = TRUE;
+  hash = true;
   if ((abfd->flags & BFD_TRADITIONAL_FORMAT) != 0)
-    hash = FALSE;
+    hash = false;
 
   str_index = _bfd_stringtab_add (tab, str, hash, copy);
 
@@ -1578,21 +1713,20 @@ add_to_stringtab (bfd *abfd,
 /* Write out a strtab.  ABFD is already at the right location in the
    file.  */
 
-static bfd_boolean
+static bool
 emit_stringtab (bfd *abfd, struct bfd_strtab_hash *tab)
 {
   bfd_byte buffer[BYTES_IN_LONG];
 
   /* The string table starts with the size.  */
   H_PUT_32 (abfd, _bfd_stringtab_size (tab) + BYTES_IN_LONG, buffer);
-  if (bfd_bwrite ((void *) buffer, (bfd_size_type) BYTES_IN_LONG, abfd)
-      != BYTES_IN_LONG)
-    return FALSE;
+  if (bfd_write (buffer, BYTES_IN_LONG, abfd) != BYTES_IN_LONG)
+    return false;
 
   return _bfd_stringtab_emit (abfd, tab);
 }
 
-bfd_boolean
+bool
 NAME (aout, write_syms) (bfd *abfd)
 {
   unsigned int count ;
@@ -1601,7 +1735,7 @@ NAME (aout, write_syms) (bfd *abfd)
 
   strtab = _bfd_stringtab_init ();
   if (strtab == NULL)
-    return FALSE;
+    return false;
 
   for (count = 0; count < bfd_get_symcount (abfd); count++)
     {
@@ -1609,25 +1743,28 @@ NAME (aout, write_syms) (bfd *abfd)
       bfd_size_type indx;
       struct external_nlist nsp;
 
-      PUT_WORD (abfd, 0, nsp.e_unused);
-
-      indx = add_to_stringtab (abfd, strtab, g->name, FALSE);
+      indx = add_to_stringtab (abfd, strtab, g->name, false);
       if (indx == (bfd_size_type) -1)
 	goto error_return;
       PUT_WORD (abfd, indx, nsp.e_strx);
 
       if (bfd_asymbol_flavour(g) == abfd->xvec->flavour)
-	H_PUT_8 (abfd, aout_symbol(g)->type,  nsp.e_type);
+	{
+	  H_PUT_16 (abfd, aout_symbol (g)->desc,  nsp.e_desc);
+	  H_PUT_8 (abfd, 0, nsp.e_ovly);
+	  H_PUT_8 (abfd, aout_symbol (g)->type,  nsp.e_type);
+	}
       else
-	H_PUT_8 (abfd, 0, nsp.e_type);
+	{
+	  H_PUT_16 (abfd, 0, nsp.e_desc);
+	  H_PUT_8 (abfd, 0, nsp.e_ovly);
+	  H_PUT_8 (abfd, 0, nsp.e_type);
+	}
 
       if (! translate_to_native_sym_flags (abfd, g, &nsp))
 	goto error_return;
 
-      H_PUT_8 (abfd, 0, nsp.e_ovly);
-
-      if (bfd_bwrite ((void *)&nsp, (bfd_size_type) EXTERNAL_NLIST_SIZE, abfd)
-	  != EXTERNAL_NLIST_SIZE)
+      if (bfd_write (&nsp, EXTERNAL_NLIST_SIZE, abfd) != EXTERNAL_NLIST_SIZE)
 	goto error_return;
 
       /* NB: `KEEPIT' currently overlays `udata.p', so set this only
@@ -1640,11 +1777,11 @@ NAME (aout, write_syms) (bfd *abfd)
 
   _bfd_stringtab_free (strtab);
 
-  return TRUE;
+  return true;
 
-error_return:
+ error_return:
   _bfd_stringtab_free (strtab);
-  return FALSE;
+  return false;
 }
 
 
@@ -1721,7 +1858,10 @@ pdp11_aout_swap_reloc_out (bfd *abfd, ar
   if (r_extern)								\
     {									\
       /* Undefined symbol.  */						\
-      cache_ptr->sym_ptr_ptr = symbols + r_index;			\
+      if (symbols != NULL && r_index < bfd_get_symcount (abfd))		\
+	cache_ptr->sym_ptr_ptr = symbols + r_index;			\
+      else								\
+	cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;	\
       cache_ptr->addend = ad;						\
     }									\
   else									\
@@ -1784,10 +1924,12 @@ pdp11_aout_swap_reloc_in (bfd *		 abfd,
      local or global.  */
   r_extern = (reloc_entry & RTYPE) == REXT;
 
-  if (r_extern && r_index > symcount)
+  if (r_extern && r_index >= symcount)
     {
       /* We could arrange to return an error, but it might be useful
-	 to see the file even if it is bad.  */
+	 to see the file even if it is bad.  FIXME: Of course this
+	 means that objdump -r *doesn't* see the actual reloc, and
+	 objcopy silently writes a different reloc.  */
       r_extern = 0;
       r_index = N_ABS;
     }
@@ -1797,7 +1939,7 @@ pdp11_aout_swap_reloc_in (bfd *		 abfd,
 
 /* Read and swap the relocs for a section.  */
 
-bfd_boolean
+bool
 NAME (aout, slurp_reloc_table) (bfd *abfd, sec_ptr asect, asymbol **symbols)
 {
   bfd_byte *rptr;
@@ -1810,10 +1952,10 @@ NAME (aout, slurp_reloc_table) (bfd *abf
   arelent *cache_ptr;
 
   if (asect->relocation)
-    return TRUE;
+    return true;
 
   if (asect->flags & SEC_CONSTRUCTOR)
-    return TRUE;
+    return true;
 
   if (asect == obj_datasec (abfd))
     reloc_size = exec_hdr(abfd)->a_drsize;
@@ -1824,24 +1966,16 @@ NAME (aout, slurp_reloc_table) (bfd *abf
   else
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
-    return FALSE;
-
-  each_size = obj_reloc_entry_size (abfd);
-
-  relocs = bfd_malloc (reloc_size);
+    return false;
+  relocs = _bfd_malloc_and_read (abfd, reloc_size, reloc_size);
   if (relocs == NULL && reloc_size != 0)
-    return FALSE;
-
-  if (bfd_bread (relocs, reloc_size, abfd) != reloc_size)
-    {
-      free (relocs);
-      return FALSE;
-    }
+    return false;
 
+  each_size = obj_reloc_entry_size (abfd);
   count = reloc_size / each_size;
 
   /* Count the number of NON-ZERO relocs, this is the count we want.  */
@@ -1862,7 +1996,7 @@ NAME (aout, slurp_reloc_table) (bfd *abf
 
   reloc_cache = bfd_zmalloc (count * sizeof (arelent));
   if (reloc_cache == NULL && count != 0)
-    return FALSE;
+    return false;
 
   cache_ptr = reloc_cache;
 
@@ -1893,12 +2027,12 @@ NAME (aout, slurp_reloc_table) (bfd *abf
   asect->relocation = reloc_cache;
   asect->reloc_count = cache_ptr - reloc_cache;
 
-  return TRUE;
+  return true;
 }
 
 /* Write out a relocation section into an object file.  */
 
-bfd_boolean
+bool
 NAME (aout, squirt_out_relocs) (bfd *abfd, asection *section)
 {
   arelent **generic;
@@ -1909,7 +2043,7 @@ NAME (aout, squirt_out_relocs) (bfd *abf
   natsize = section->size;
   native = bfd_zalloc (abfd, natsize);
   if (!native)
-    return FALSE;
+    return false;
 
   generic = section->orelocation;
   if (generic != NULL)
@@ -1918,6 +2052,15 @@ NAME (aout, squirt_out_relocs) (bfd *abf
 	{
 	  bfd_byte *r;
 
+	  if ((*generic)->howto == NULL
+	      || (*generic)->sym_ptr_ptr == NULL)
+	    {
+	      bfd_set_error (bfd_error_invalid_operation);
+	      _bfd_error_handler (_("%pB: attempt to write out "
+				    "unknown reloc type"), abfd);
+	      bfd_release (abfd, native);
+	      return false;
+	    }
 	  r = native + (*generic)->address;
 	  pdp11_aout_swap_reloc_out (abfd, *generic, r);
 	  count--;
@@ -1925,14 +2068,14 @@ NAME (aout, squirt_out_relocs) (bfd *abf
 	}
     }
 
-  if (bfd_bwrite ((void *) native, natsize, abfd) != natsize)
+  if (bfd_write (native, natsize, abfd) != natsize)
     {
       bfd_release (abfd, native);
-      return FALSE;
+      return false;
     }
 
   bfd_release (abfd, native);
-  return TRUE;
+  return true;
 }
 
 /* This is stupid.  This function should be a boolean predicate.  */
@@ -1981,13 +2124,7 @@ NAME (aout, canonicalize_reloc) (bfd *ab
 long
 NAME (aout, get_reloc_upper_bound) (bfd *abfd, sec_ptr asect)
 {
-  bfd_size_type count;
-
-  if (bfd_get_format (abfd) != bfd_object)
-    {
-      bfd_set_error (bfd_error_invalid_operation);
-      return -1;
-    }
+  size_t count, raw;
 
   if (asect->flags & SEC_CONSTRUCTOR)
     count = asect->reloc_count;
@@ -2003,11 +2140,21 @@ NAME (aout, get_reloc_upper_bound) (bfd
       return -1;
     }
 
-  if (count >= LONG_MAX / sizeof (arelent *))
+  if (count >= LONG_MAX / sizeof (arelent *)
+      || _bfd_mul_overflow (count, obj_reloc_entry_size (abfd), &raw))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
+  if (!bfd_write_p (abfd))
+    {
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+      if (filesize != 0 && raw > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
+    }
   return (count + 1) * sizeof (arelent *);
 }
 
@@ -2103,7 +2250,7 @@ NAME (aout, print_symbol) (bfd * abfd,
 
 long
 NAME (aout, read_minisymbols) (bfd *abfd,
-			       bfd_boolean dynamic,
+			       bool dynamic,
 			       void * *minisymsp,
 			       unsigned int *sizep)
 {
@@ -2136,7 +2283,7 @@ NAME (aout, read_minisymbols) (bfd *abfd
 
 asymbol *
 NAME (aout, minisymbol_to_symbol) (bfd *abfd,
-				   bfd_boolean dynamic,
+				   bool dynamic,
 				   const void * minisym,
 				   asymbol *sym)
 {
@@ -2154,7 +2301,7 @@ NAME (aout, minisymbol_to_symbol) (bfd *
 	  (bfd_size_type) 1,
 	  obj_aout_external_strings (abfd),
 	  obj_aout_external_string_size (abfd),
-	  FALSE)))
+	  false)))
     return NULL;
 
   return sym;
@@ -2164,7 +2311,7 @@ NAME (aout, minisymbol_to_symbol) (bfd *
    and return the name of the source file and the line nearest to the
    wanted location.  */
 
-bfd_boolean
+bool
 NAME (aout, find_nearest_line) (bfd *abfd,
 				asymbol **symbols,
 				asection *section,
@@ -2186,8 +2333,8 @@ NAME (aout, find_nearest_line) (bfd *abf
   size_t filelen, funclen;
   char *buf;
 
-  *filename_ptr = abfd->filename;
-  *functionname_ptr = 0;
+  *filename_ptr = bfd_get_filename (abfd);
+  *functionname_ptr = NULL;
   *line_ptr = 0;
   if (discriminator_ptr)
     *discriminator_ptr = 0;
@@ -2215,7 +2362,10 @@ NAME (aout, find_nearest_line) (bfd *abf
 		  const char * symname;
 
 		  symname = q->symbol.name;
-		  if (strcmp (symname + strlen (symname) - 2, ".o") == 0)
+
+		  if (symname != NULL
+		      && strlen (symname) > 2
+		      && strcmp (symname + strlen (symname) - 2, ".o") == 0)
 		    {
 		      if (q->symbol.value > low_line_vma)
 			{
@@ -2247,7 +2397,7 @@ NAME (aout, find_nearest_line) (bfd *abf
 	      /* Look ahead to next symbol to check if that too is an N_SO.  */
 	      p++;
 	      if (*p == NULL)
-		break;
+		goto done;
 	      q = (aout_symbol_type *)(*p);
 	      if (q->type != (int) N_SO)
 		goto next;
@@ -2308,8 +2458,7 @@ NAME (aout, find_nearest_line) (bfd *abf
   else
     funclen = strlen (bfd_asymbol_name (func));
 
-  if (adata (abfd).line_buf != NULL)
-    free (adata (abfd).line_buf);
+  free (adata (abfd).line_buf);
   if (filelen + funclen == 0)
     adata (abfd).line_buf = buf = NULL;
   else
@@ -2317,7 +2466,7 @@ NAME (aout, find_nearest_line) (bfd *abf
       buf = bfd_malloc ((bfd_size_type) filelen + funclen + 3);
       adata (abfd).line_buf = buf;
       if (buf == NULL)
-	return FALSE;
+	return false;
     }
 
   if (main_file_name != NULL)
@@ -2326,9 +2475,17 @@ NAME (aout, find_nearest_line) (bfd *abf
 	*filename_ptr = main_file_name;
       else
 	{
-	  sprintf (buf, "%s%s", directory_name, main_file_name);
-	  *filename_ptr = buf;
-	  buf += filelen + 1;
+	  if (buf == NULL)
+	    /* PR binutils/20891: In a corrupt input file both
+	       main_file_name and directory_name can be empty...  */
+	    * filename_ptr = NULL;
+	  else
+	    {
+	      snprintf (buf, filelen + 1, "%s%s", directory_name,
+			main_file_name);
+	      *filename_ptr = buf;
+	      buf += filelen + 1;
+	    }
 	}
     }
 
@@ -2337,6 +2494,12 @@ NAME (aout, find_nearest_line) (bfd *abf
       const char *function = func->name;
       char *colon;
 
+      if (buf == NULL)
+	{
+	  /* PR binutils/20892: In a corrupt input file func can be empty.  */
+	  * functionname_ptr = NULL;
+	  return true;
+	}
       /* The caller expects a symbol name.  We actually have a
 	 function name, without the leading underscore.  Put the
 	 underscore back in, so that the caller gets a symbol name.  */
@@ -2355,7 +2518,7 @@ NAME (aout, find_nearest_line) (bfd *abf
       *functionname_ptr = buf;
     }
 
-  return TRUE;
+  return true;
 }
 
 int
@@ -2365,34 +2528,33 @@ NAME (aout, sizeof_headers) (bfd *abfd,
   return adata (abfd).exec_bytes_size;
 }
 
-/* Free all information we have cached for this BFD.  We can always
-   read it again later if we need it.  */
+/* Throw away most malloc'd and alloc'd information for this BFD.  */
 
-bfd_boolean
+bool
 NAME (aout, bfd_free_cached_info) (bfd *abfd)
 {
-  asection *o;
-
-  if (bfd_get_format (abfd) != bfd_object)
-    return TRUE;
-
-#define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; }
-  BFCI_FREE (obj_aout_symbols (abfd));
-
+  if ((bfd_get_format (abfd) == bfd_object
+       || bfd_get_format (abfd) == bfd_core)
+      && abfd->tdata.aout_data != NULL)
+    {
+#define BFCI_FREE(x) do { free (x); x = NULL; } while (0)
+      BFCI_FREE (adata (abfd).line_buf);
+      BFCI_FREE (obj_aout_symbols (abfd));
 #ifdef USE_MMAP
-  obj_aout_external_syms (abfd) = 0;
-  bfd_free_window (&obj_aout_sym_window (abfd));
-  bfd_free_window (&obj_aout_string_window (abfd));
-  obj_aout_external_strings (abfd) = 0;
+      obj_aout_external_syms (abfd) = 0;
+      bfd_free_window (&obj_aout_sym_window (abfd));
+      bfd_free_window (&obj_aout_string_window (abfd));
+      obj_aout_external_strings (abfd) = 0;
 #else
-  BFCI_FREE (obj_aout_external_syms (abfd));
-  BFCI_FREE (obj_aout_external_strings (abfd));
+      BFCI_FREE (obj_aout_external_syms (abfd));
+      BFCI_FREE (obj_aout_external_strings (abfd));
 #endif
-  for (o = abfd->sections; o != NULL; o = o->next)
-    BFCI_FREE (o->relocation);
+      for (asection *o = abfd->sections; o != NULL; o = o->next)
+	BFCI_FREE (o->relocation);
 #undef BFCI_FREE
+    }
 
-  return TRUE;
+  return _bfd_generic_bfd_free_cached_info (abfd);
 }
 
 /* Routine to create an entry in an a.out link hash table.  */
@@ -2417,7 +2579,7 @@ NAME (aout, link_hash_newfunc) (struct b
   if (ret)
     {
       /* Set local fields.  */
-      ret->written = FALSE;
+      ret->written = false;
       ret->indx = -1;
     }
 
@@ -2426,7 +2588,7 @@ NAME (aout, link_hash_newfunc) (struct b
 
 /* Initialize an a.out link hash table.  */
 
-bfd_boolean
+bool
 NAME (aout, link_hash_table_init) (struct aout_link_hash_table *table,
 				   bfd *abfd,
 				   struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
@@ -2443,7 +2605,7 @@ struct bfd_link_hash_table *
 NAME (aout, link_hash_table_create) (bfd *abfd)
 {
   struct aout_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct aout_link_hash_table);
+  size_t amt = sizeof (struct aout_link_hash_table);
 
   ret = bfd_malloc (amt);
   if (ret == NULL)
@@ -2460,7 +2622,7 @@ NAME (aout, link_hash_table_create) (bfd
 
 /* Free up the internal symbols read from an a.out file.  */
 
-static bfd_boolean
+static bool
 aout_link_free_symbols (bfd *abfd)
 {
   if (obj_aout_external_syms (abfd) != NULL)
@@ -2482,13 +2644,13 @@ aout_link_free_symbols (bfd *abfd)
 #endif
       obj_aout_external_strings (abfd) = NULL;
     }
-  return TRUE;
+  return true;
 }
 
 /* Given an a.out BFD, add symbols to the global hash table as
    appropriate.  */
 
-bfd_boolean
+bool
 NAME (aout, link_add_symbols) (bfd *abfd, struct bfd_link_info *info)
 {
   switch (bfd_get_format (abfd))
@@ -2500,25 +2662,25 @@ NAME (aout, link_add_symbols) (bfd *abfd
 	(abfd, info, aout_link_check_archive_element);
     default:
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 }
 
 /* Add symbols from an a.out object file.  */
 
-static bfd_boolean
+static bool
 aout_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   if (! aout_get_external_symbols (abfd))
-    return FALSE;
+    return false;
   if (! aout_link_add_symbols (abfd, info))
-    return FALSE;
+    return false;
   if (! info->keep_memory)
     {
       if (! aout_link_free_symbols (abfd))
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Look through the internal symbols to see if this object file should
@@ -2528,17 +2690,17 @@ aout_link_add_object_symbols (bfd *abfd,
    known symbol but we do not include the object file in the link
    (unless there is some other reason to include it).  */
 
-static bfd_boolean
+static bool
 aout_link_check_ar_symbols (bfd *abfd,
 			    struct bfd_link_info *info,
-			    bfd_boolean *pneeded,
+			    bool *pneeded,
 			    bfd **subsbfd)
 {
   struct external_nlist *p;
   struct external_nlist *pend;
   char *strings;
 
-  *pneeded = FALSE;
+  *pneeded = false;
 
   /* Look through all the symbols.  */
   p = obj_aout_external_syms (abfd);
@@ -2547,18 +2709,18 @@ aout_link_check_ar_symbols (bfd *abfd,
   for (; p < pend; p++)
     {
       int type = H_GET_8 (abfd, p->e_type);
-      const char *name;
+      const char *name = strings + GET_WORD (abfd, p->e_strx);
       struct bfd_link_hash_entry *h;
 
       /* Ignore symbols that are not externally visible.  This is an
 	 optimization only, as we check the type more thoroughly
 	 below.  */
       if ((type & N_EXT) == 0
+	  || is_stab(type, name)
 	  || type == N_FN)
 	continue;
 
-      name = strings + GET_WORD (abfd, p->e_strx);
-      h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->hash, name, false, false, true);
 
       /* We are only interested in symbols that are currently
 	 undefined or common.  */
@@ -2590,8 +2752,8 @@ aout_link_check_ar_symbols (bfd *abfd,
 	  if (!(*info->callbacks
 		->add_archive_element) (info, abfd, name, subsbfd))
 	    continue;
-	  *pneeded = TRUE;
-	  return TRUE;
+	  *pneeded = true;
+	  return true;
 	}
 
       if (type == (N_UNDF | N_EXT))
@@ -2617,9 +2779,9 @@ aout_link_check_ar_symbols (bfd *abfd,
 			 option in the linker.  */
 		      if (!(*info->callbacks
 			    ->add_archive_element) (info, abfd, name, subsbfd))
-			return FALSE;
-		      *pneeded = TRUE;
-		      return TRUE;
+			return false;
+		      *pneeded = true;
+		      return true;
 		    }
 		  /* Turn the current link symbol into a common
 		     symbol.  It is already on the undefs list.  */
@@ -2627,7 +2789,7 @@ aout_link_check_ar_symbols (bfd *abfd,
 		  h->u.c.p = bfd_hash_allocate (&info->hash->table,
 						sizeof (struct bfd_link_hash_common_entry));
 		  if (h->u.c.p == NULL)
-		    return FALSE;
+		    return false;
 
 		  h->u.c.size = value;
 
@@ -2655,7 +2817,7 @@ aout_link_check_ar_symbols (bfd *abfd,
     }
 
   /* We do not need this object file.  */
-  return TRUE;
+  return true;
 }
 
 /* Check a single archive element to see if we need to include it in
@@ -2663,22 +2825,22 @@ aout_link_check_ar_symbols (bfd *abfd,
    needed in the link or not.  This is called from
    _bfd_generic_link_add_archive_symbols.  */
 
-static bfd_boolean
+static bool
 aout_link_check_archive_element (bfd *abfd,
 				 struct bfd_link_info *info,
 				 struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED,
 				 const char *name ATTRIBUTE_UNUSED,
-				 bfd_boolean *pneeded)
+				 bool *pneeded)
 {
   bfd *oldbfd;
-  bfd_boolean needed;
+  bool needed;
 
   if (!aout_get_external_symbols (abfd))
-    return FALSE;
+    return false;
 
   oldbfd = abfd;
   if (!aout_link_check_ar_symbols (abfd, info, pneeded, &abfd))
-    return FALSE;
+    return false;
 
   needed = *pneeded;
   if (needed)
@@ -2689,36 +2851,35 @@ aout_link_check_archive_element (bfd *ab
 	{
 	  if (!info->keep_memory
 	      && !aout_link_free_symbols (oldbfd))
-	    return FALSE;
+	    return false;
 	  if (!aout_get_external_symbols (abfd))
-	    return FALSE;
+	    return false;
 	}
       if (!aout_link_add_symbols (abfd, info))
-	return FALSE;
+	return false;
     }
 
   if (!info->keep_memory || !needed)
     {
       if (!aout_link_free_symbols (abfd))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Add all symbols from an object file to the hash table.  */
 
-static bfd_boolean
+static bool
 aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
-  bfd_boolean (*add_one_symbol)
+  bool (*add_one_symbol)
     (struct bfd_link_info *, bfd *, const char *, flagword, asection *,
-     bfd_vma, const char *, bfd_boolean, bfd_boolean,
-     struct bfd_link_hash_entry **);
+     bfd_vma, const char *, bool, bool, struct bfd_link_hash_entry **);
   struct external_nlist *syms;
   bfd_size_type sym_count;
   char *strings;
-  bfd_boolean copy;
+  bool copy;
   struct aout_link_hash_entry **sym_hash;
   struct external_nlist *p;
   struct external_nlist *pend;
@@ -2727,15 +2888,15 @@ aout_link_add_symbols (bfd *abfd, struct
   sym_count = obj_aout_external_sym_count (abfd);
   strings = obj_aout_external_strings (abfd);
   if (info->keep_memory)
-    copy = FALSE;
+    copy = false;
   else
-    copy = TRUE;
+    copy = true;
 
   if (aout_backend_info (abfd)->add_dynamic_symbols != NULL)
     {
       if (! ((*aout_backend_info (abfd)->add_dynamic_symbols)
 	     (abfd, info, &syms, &sym_count, &strings)))
-	return FALSE;
+	return false;
     }
 
   /* We keep a list of the linker hash table entries that correspond
@@ -2745,7 +2906,7 @@ aout_link_add_symbols (bfd *abfd, struct
   sym_hash = bfd_alloc (abfd,
 			sym_count * sizeof (struct aout_link_hash_entry *));
   if (sym_hash == NULL && sym_count != 0)
-    return FALSE;
+    return false;
   obj_aout_sym_hashes (abfd) = sym_hash;
 
   add_one_symbol = aout_backend_info (abfd)->add_one_symbol;
@@ -2767,15 +2928,23 @@ aout_link_add_symbols (bfd *abfd, struct
 
       type = H_GET_8 (abfd, p->e_type);
 
+      /* PR 19629: Corrupt binaries can contain illegal string offsets.  */
+      if (GET_WORD (abfd, p->e_strx) >= obj_aout_external_string_size (abfd))
+	return false;
       name = strings + GET_WORD (abfd, p->e_strx);
+
+      /* Ignore debugging symbols.  */
+      if (is_stab (type, name))
+	continue;
+
       value = GET_WORD (abfd, p->e_value);
       flags = BSF_GLOBAL;
       string = NULL;
       switch (type)
 	{
 	default:
-	  /* Anything else should be a debugging symbol.  */
-	  BFD_ASSERT ((type & N_STAB) != 0);
+	  /* Shouldn't be any types not covered.  */
+	  BFD_ASSERT (0);
 	  continue;
 
 	case N_UNDF:
@@ -2817,9 +2986,9 @@ aout_link_add_symbols (bfd *abfd, struct
 	}
 
       if (! ((*add_one_symbol)
-	     (info, abfd, name, flags, section, value, string, copy, FALSE,
+	     (info, abfd, name, flags, section, value, string, copy, false,
 	      (struct bfd_link_hash_entry **) sym_hash)))
-	return FALSE;
+	return false;
 
       /* Restrict the maximum alignment of a common symbol based on
 	 the architecture, since a.out has no way to represent
@@ -2842,7 +3011,7 @@ aout_link_add_symbols (bfd *abfd, struct
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look up an entry in an the header file hash table.  */
@@ -2879,7 +3048,10 @@ aout_link_includes_newfunc (struct bfd_h
   return (struct bfd_hash_entry *) ret;
 }
 
-static bfd_boolean
+/* Write out a symbol that was not associated with an a.out input
+   object.  */
+
+static bool
 aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 {
   struct aout_link_hash_entry *h = (struct aout_link_hash_entry *) bh;
@@ -2889,13 +3061,13 @@ aout_link_write_other_symbol (struct bfd
   bfd_vma val;
   struct external_nlist outsym;
   bfd_size_type indx;
-  bfd_size_type amt;
+  size_t amt;
 
   if (h->root.type == bfd_link_hash_warning)
     {
       h = (struct aout_link_hash_entry *) h->root.u.i.link;
       if (h->root.type == bfd_link_hash_new)
-	return TRUE;
+	return true;
     }
 
   output_bfd = flaginfo->output_bfd;
@@ -2911,28 +3083,28 @@ aout_link_write_other_symbol (struct bfd
     }
 
   if (h->written)
-    return TRUE;
+    return true;
 
-  h->written = TRUE;
+  h->written = true;
 
   /* An indx of -2 means the symbol must be written.  */
   if (h->indx != -2
       && (flaginfo->info->strip == strip_all
 	  || (flaginfo->info->strip == strip_some
 	      && bfd_hash_lookup (flaginfo->info->keep_hash, h->root.root.string,
-				  FALSE, FALSE) == NULL)))
-    return TRUE;
+				  false, false) == NULL)))
+    return true;
 
   switch (h->root.type)
     {
     default:
       abort ();
       /* Avoid variable not initialized warnings.  */
-      return TRUE;
+      return true;
     case bfd_link_hash_new:
       /* This can happen for set symbols when sets are not being
 	 built.  */
-      return TRUE;
+      return true;
     case bfd_link_hash_undefined:
       type = N_UNDF | N_EXT;
       val = 0;
@@ -2971,22 +3143,24 @@ aout_link_write_other_symbol (struct bfd
     case bfd_link_hash_warning:
       /* FIXME: Ignore these for now.  The circumstances under which
 	 they should be written out are not clear to me.  */
-      return TRUE;
+      return true;
     }
 
   H_PUT_8 (output_bfd, type, outsym.e_type);
+  H_PUT_8 (output_bfd, 0, outsym.e_ovly);
   indx = add_to_stringtab (output_bfd, flaginfo->strtab, h->root.root.string,
-			   FALSE);
+			   false);
   if (indx == (bfd_size_type) -1)
     /* FIXME: No way to handle errors.  */
     abort ();
 
+  PUT_WORD (output_bfd, 0, outsym.e_desc);
   PUT_WORD (output_bfd, indx, outsym.e_strx);
   PUT_WORD (output_bfd, val, outsym.e_value);
 
   amt = EXTERNAL_NLIST_SIZE;
   if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0
-      || bfd_bwrite ((void *) &outsym, amt, output_bfd) != amt)
+      || bfd_write (&outsym, amt, output_bfd) != amt)
     /* FIXME: No way to handle errors.  */
     abort ();
 
@@ -2994,12 +3168,12 @@ aout_link_write_other_symbol (struct bfd
   h->indx = obj_aout_external_sym_count (output_bfd);
   ++obj_aout_external_sym_count (output_bfd);
 
-  return TRUE;
+  return true;
 }
 
 /* Handle a link order which is supposed to generate a reloc.  */
 
-static bfd_boolean
+static bool
 aout_link_reloc_link_order (struct aout_final_link_info *flaginfo,
 			    asection *o,
 			    struct bfd_link_order *p)
@@ -3034,7 +3208,7 @@ aout_link_reloc_link_order (struct aout_
       r_extern = 1;
       h = ((struct aout_link_hash_entry *)
 	   bfd_wrapped_link_hash_lookup (flaginfo->output_bfd, flaginfo->info,
-					 pr->u.name, FALSE, FALSE, TRUE));
+					 pr->u.name, false, false, true));
       if (h != NULL
 	  && h->indx >= 0)
 	r_index = h->indx;
@@ -3045,9 +3219,9 @@ aout_link_reloc_link_order (struct aout_
 	     here.  I don't think that will ever matter for a global
 	     symbol.  */
 	  h->indx = -2;
-	  h->written = FALSE;
+	  h->written = false;
 	  if (!aout_link_write_other_symbol (&h->root.root, flaginfo))
-	    return FALSE;
+	    return false;
 	  r_index = h->indx;
 	}
       else
@@ -3062,7 +3236,7 @@ aout_link_reloc_link_order (struct aout_
   if (howto == 0)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   if (o == obj_textsec (flaginfo->output_bfd))
@@ -3089,7 +3263,7 @@ aout_link_reloc_link_order (struct aout_
     r_baserel = (howto->type & 8) != 0;
     r_jmptable = (howto->type & 16) != 0;
     r_relative = (howto->type & 32) != 0;
-    r_length = howto->size;
+    r_length = bfd_log2 (bfd_get_reloc_size (howto));
 
     PUT_WORD (flaginfo->output_bfd, p->offset, srel.r_address);
     if (bfd_header_big_endian (flaginfo->output_bfd))
@@ -3132,12 +3306,12 @@ aout_link_reloc_link_order (struct aout_
       bfd_size_type size;
       bfd_reloc_status_type r;
       bfd_byte *buf;
-      bfd_boolean ok;
+      bool ok;
 
       size = bfd_get_reloc_size (howto);
       buf = bfd_zmalloc (size);
       if (buf == NULL && size != 0)
-	return FALSE;
+	return false;
       r = MY_relocate_contents (howto, flaginfo->output_bfd,
 				pr->addend, buf);
       switch (r)
@@ -3163,13 +3337,13 @@ aout_link_reloc_link_order (struct aout_
 				     size);
       free (buf);
       if (! ok)
-	return FALSE;
+	return false;
     }
 
   rel_size = obj_reloc_entry_size (flaginfo->output_bfd);
   if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0
-      || bfd_bwrite (rel_ptr, rel_size, flaginfo->output_bfd) != rel_size)
-    return FALSE;
+      || bfd_write (rel_ptr, rel_size, flaginfo->output_bfd) != rel_size)
+    return false;
 
   *reloff_ptr += rel_size;
 
@@ -3180,7 +3354,7 @@ aout_link_reloc_link_order (struct aout_
 		  || (*reloff_ptr
 		      <= obj_datasec (flaginfo->output_bfd)->rel_filepos)));
 
-  return TRUE;
+  return true;
 }
 
 /* Get the section corresponding to a reloc index.  */
@@ -3199,7 +3373,7 @@ aout_reloc_type_to_section (bfd *abfd, i
     }
 }
 
-static bfd_boolean
+static bool
 pdp11_aout_link_input_section (struct aout_final_link_info *flaginfo,
 			       bfd *input_bfd,
 			       asection *input_section,
@@ -3207,12 +3381,11 @@ pdp11_aout_link_input_section (struct ao
 			       bfd_size_type rel_size,
 			       bfd_byte *contents)
 {
-  bfd_boolean (*check_dynamic_reloc)
+  bool (*check_dynamic_reloc)
     (struct bfd_link_info *, bfd *, asection *,
-     struct aout_link_hash_entry *, void *, bfd_byte *, bfd_boolean *,
-     bfd_vma *);
+     struct aout_link_hash_entry *, void *, bfd_byte *, bool *, bfd_vma *);
   bfd *output_bfd;
-  bfd_boolean relocatable;
+  bool relocatable;
   struct external_nlist *syms;
   char *strings;
   struct aout_link_hash_entry **sym_hashes;
@@ -3263,8 +3436,15 @@ pdp11_aout_link_input_section (struct ao
 	r_extern = (r_type == REXT);
 
 	howto_idx = r_pcrel;
-	BFD_ASSERT (howto_idx < TABLE_SIZE (howto_table_pdp11));
-	howto = howto_table_pdp11 + howto_idx;
+	if (howto_idx < TABLE_SIZE (howto_table_pdp11))
+	  howto = howto_table_pdp11 + howto_idx;
+	else
+	  {
+	    _bfd_error_handler (_("%pB: unsupported relocation type"),
+				input_bfd);
+	    bfd_set_error (bfd_error_bad_value);
+	    return false;
+	  }
       }
 
       if (relocatable)
@@ -3318,10 +3498,10 @@ pdp11_aout_link_input_section (struct ao
 			  if (h->indx < 0)
 			    {
 			      h->indx = -2;
-			      h->written = FALSE;
+			      h->written = false;
 			      if (!aout_link_write_other_symbol (&h->root.root,
 								 flaginfo))
-				return FALSE;
+				return false;
 			    }
 			  r_index = h->indx;
 			}
@@ -3383,11 +3563,11 @@ pdp11_aout_link_input_section (struct ao
 	}
       else
 	{
-	  bfd_boolean hundef;
+	  bool hundef;
 
 	  /* We are generating an executable, and must do a full
 	     relocation.  */
-	  hundef = FALSE;
+	  hundef = false;
 	  if (r_extern)
 	    {
 	      h = sym_hashes[r_index];
@@ -3405,7 +3585,7 @@ pdp11_aout_link_input_section (struct ao
 		relocation = 0;
 	      else
 		{
-		  hundef = TRUE;
+		  hundef = true;
 		  relocation = 0;
 		}
 	    }
@@ -3423,12 +3603,12 @@ pdp11_aout_link_input_section (struct ao
 
 	  if (check_dynamic_reloc != NULL)
 	    {
-	      bfd_boolean skip;
+	      bool skip;
 
 	      if (! ((*check_dynamic_reloc)
 		     (flaginfo->info, input_bfd, input_section, h,
 		      (void *) rel, contents, &skip, &relocation)))
-		return FALSE;
+		return false;
 	      if (skip)
 		continue;
 	    }
@@ -3446,7 +3626,7 @@ pdp11_aout_link_input_section (struct ao
 		name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
 	      (*flaginfo->info->callbacks->undefined_symbol)
 		(flaginfo->info, name, input_bfd, input_section,
-		 r_addr, TRUE);
+		 r_addr, true);
 	    }
 
 	  r = MY_final_link_relocate (howto,
@@ -3487,12 +3667,12 @@ pdp11_aout_link_input_section (struct ao
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Link an a.out section into the output file.  */
 
-static bfd_boolean
+static bool
 aout_link_input_section (struct aout_final_link_info *flaginfo,
 			 bfd *input_bfd,
 			 asection *input_section,
@@ -3507,7 +3687,7 @@ aout_link_input_section (struct aout_fin
   if (! bfd_get_section_contents (input_bfd, input_section,
 				  (void *) flaginfo->contents,
 				  (file_ptr) 0, input_size))
-    return FALSE;
+    return false;
 
   /* Read in the relocs if we haven't already done it.  */
   if (aout_section_data (input_section) != NULL
@@ -3519,8 +3699,8 @@ aout_link_input_section (struct aout_fin
       if (rel_size > 0)
 	{
 	  if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0
-	      || bfd_bread (relocs, rel_size, input_bfd) != rel_size)
-	    return FALSE;
+	      || bfd_read (relocs, rel_size, input_bfd) != rel_size)
+	    return false;
 	}
     }
 
@@ -3528,7 +3708,7 @@ aout_link_input_section (struct aout_fin
   if (! pdp11_aout_link_input_section (flaginfo, input_bfd, input_section,
 				       (bfd_byte *) relocs,
 				       rel_size, flaginfo->contents))
-    return FALSE;
+    return false;
 
   /* Write out the section contents.  */
   if (! bfd_set_section_contents (flaginfo->output_bfd,
@@ -3536,16 +3716,16 @@ aout_link_input_section (struct aout_fin
 				  (void *) flaginfo->contents,
 				  (file_ptr) input_section->output_offset,
 				  input_size))
-    return FALSE;
+    return false;
 
   /* If we are producing relocatable output, the relocs were
      modified, and we now write them out.  */
   if (bfd_link_relocatable (flaginfo->info) && rel_size > 0)
     {
       if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0)
-	return FALSE;
-      if (bfd_bwrite (relocs, rel_size, flaginfo->output_bfd) != rel_size)
-	return FALSE;
+	return false;
+      if (bfd_write (relocs, rel_size, flaginfo->output_bfd) != rel_size)
+	return false;
       *reloff_ptr += rel_size;
 
       /* Assert that the relocs have not run into the symbols, and
@@ -3557,12 +3737,12 @@ aout_link_input_section (struct aout_fin
 			  <= obj_datasec (flaginfo->output_bfd)->rel_filepos)));
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Link an a.out input BFD into the output file.  */
 
-static bfd_boolean
+static bool
 aout_link_input_bfd (struct aout_final_link_info *flaginfo, bfd *input_bfd)
 {
   BFD_ASSERT (bfd_get_format (input_bfd) == bfd_object);
@@ -3576,12 +3756,12 @@ aout_link_input_bfd (struct aout_final_l
   /* Get the symbols.  We probably have them already, unless
      flaginfo->info->keep_memory is FALSE.  */
   if (! aout_get_external_symbols (input_bfd))
-    return FALSE;
+    return false;
 
   /* Write out the symbols and get a map of the new indices.  The map
      is placed into flaginfo->symbol_map.  */
   if (! aout_link_write_symbols (flaginfo, input_bfd))
-    return FALSE;
+    return false;
 
   /* Relocate and write out the sections.  These functions use the
      symbol map created by aout_link_write_symbols.  The linker_mark
@@ -3593,7 +3773,7 @@ aout_link_input_bfd (struct aout_final_l
 				     obj_textsec (input_bfd),
 				     &flaginfo->treloff,
 				     exec_hdr (input_bfd)->a_trsize))
-	return FALSE;
+	return false;
     }
   if (obj_datasec (input_bfd)->linker_mark)
     {
@@ -3601,7 +3781,7 @@ aout_link_input_bfd (struct aout_final_l
 				     obj_datasec (input_bfd),
 				     &flaginfo->dreloff,
 				     exec_hdr (input_bfd)->a_drsize))
-	return FALSE;
+	return false;
     }
 
   /* If we are not keeping memory, we don't need the symbols any
@@ -3610,10 +3790,10 @@ aout_link_input_bfd (struct aout_final_l
   if (! flaginfo->info->keep_memory)
     {
       if (! aout_link_free_symbols (input_bfd))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Do the final link step.  This is called on the output BFD.  The
@@ -3623,13 +3803,13 @@ aout_link_input_bfd (struct aout_final_l
    of bfd_link_order structures which list all the input sections for
    the output section.  */
 
-bfd_boolean
+bool
 NAME (aout, final_link) (bfd *abfd,
 			 struct bfd_link_info *info,
 			 void (*callback) (bfd *, file_ptr *, file_ptr *, file_ptr *))
 {
   struct aout_final_link_info aout_info;
-  bfd_boolean includes_hash_initialized = FALSE;
+  bool includes_hash_initialized = false;
   bfd *sub;
   bfd_size_type trsize, drsize;
   bfd_size_type max_contents_size;
@@ -3637,11 +3817,12 @@ NAME (aout, final_link) (bfd *abfd,
   bfd_size_type max_sym_count;
   struct bfd_link_order *p;
   asection *o;
-  bfd_boolean have_link_order_relocs;
+  bool have_link_order_relocs;
 
   if (bfd_link_pic (info))
     abfd->flags |= DYNAMIC;
 
+  separate_i_d = info->separate_code;
   aout_info.info = info;
   aout_info.output_bfd = abfd;
   aout_info.contents = NULL;
@@ -3654,7 +3835,7 @@ NAME (aout, final_link) (bfd *abfd,
 			      sizeof (struct aout_link_includes_entry),
 			      251))
     goto error_return;
-  includes_hash_initialized = TRUE;
+  includes_hash_initialized = true;
 
   /* Figure out the largest section size.  Also, if generating
      relocatable output, count the relocs.  */
@@ -3774,7 +3955,7 @@ NAME (aout, final_link) (bfd *abfd,
     struct aout_link_hash_entry *h;
 
     h = aout_link_hash_lookup (aout_hash_table (info), "__DYNAMIC",
-			       FALSE, FALSE, FALSE);
+			       false, false, false);
     if (h != NULL)
       aout_link_write_other_symbol (&h->root.root, &aout_info);
   }
@@ -3801,7 +3982,7 @@ NAME (aout, final_link) (bfd *abfd,
      We use the output_has_begun field of the input BFDs to see
      whether we have already handled it.  */
   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
-    sub->output_has_begun = FALSE;
+    sub->output_has_begun = false;
 
   /* Mark all sections which are to be included in the link.  This
      will normally be every section.  We need to do this so that we
@@ -3811,10 +3992,10 @@ NAME (aout, final_link) (bfd *abfd,
     {
       for (p = o->map_head.link_order; p != NULL; p = p->next)
 	if (p->type == bfd_indirect_link_order)
-	  p->u.indirect.section->linker_mark = TRUE;
+	  p->u.indirect.section->linker_mark = true;
     }
 
-  have_link_order_relocs = FALSE;
+  have_link_order_relocs = false;
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       for (p = o->map_head.link_order;
@@ -3832,13 +4013,13 @@ NAME (aout, final_link) (bfd *abfd,
 		{
 		  if (! aout_link_input_bfd (&aout_info, input_bfd))
 		    goto error_return;
-		  input_bfd->output_has_begun = TRUE;
+		  input_bfd->output_has_begun = true;
 		}
 	    }
 	  else if (p->type == bfd_section_reloc_link_order
 		   || p->type == bfd_symbol_reloc_link_order)
 	    /* These are handled below.  */
-	    have_link_order_relocs = TRUE;
+	    have_link_order_relocs = true;
 	  else
 	    {
 	      if (! _bfd_default_link_order (abfd, info, o, p))
@@ -3874,30 +4055,18 @@ NAME (aout, final_link) (bfd *abfd,
 	}
     }
 
-  if (aout_info.contents != NULL)
-    {
-      free (aout_info.contents);
-      aout_info.contents = NULL;
-    }
-  if (aout_info.relocs != NULL)
-    {
-      free (aout_info.relocs);
-      aout_info.relocs = NULL;
-    }
-  if (aout_info.symbol_map != NULL)
-    {
-      free (aout_info.symbol_map);
-      aout_info.symbol_map = NULL;
-    }
-  if (aout_info.output_syms != NULL)
-    {
-      free (aout_info.output_syms);
-      aout_info.output_syms = NULL;
-    }
+  free (aout_info.contents);
+  aout_info.contents = NULL;
+  free (aout_info.relocs);
+  aout_info.relocs = NULL;
+  free (aout_info.symbol_map);
+  aout_info.symbol_map = NULL;
+  free (aout_info.output_syms);
+  aout_info.output_syms = NULL;
   if (includes_hash_initialized)
     {
       bfd_hash_table_free (&aout_info.includes.root);
-      includes_hash_initialized = FALSE;
+      includes_hash_initialized = false;
     }
 
   /* Finish up any dynamic linking we may be doing.  */
@@ -3926,38 +4095,46 @@ NAME (aout, final_link) (bfd *abfd,
   else if (obj_textsec (abfd)->reloc_count == 0
 	   && obj_datasec (abfd)->reloc_count == 0)
     {
-      bfd_byte b;
-
-      b = 0;
-      if (bfd_seek (abfd,
-		    (file_ptr) (obj_datasec (abfd)->filepos
-				+ exec_hdr (abfd)->a_data
-				- 1),
-		    SEEK_SET) != 0
-	  || bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1)
-	goto error_return;
+      /* The layout of a typical a.out file is header, text, data,
+	 relocs, symbols, string table.  When there are no relocs,
+	 symbols or string table, the last thing in the file is data
+	 and a_data may be rounded up.  However we may have a smaller
+	 sized .data section and thus not written final padding.  The
+	 same thing can happen with text if there is no data.  Write
+	 final padding here to extend the file.  */
+      file_ptr pos = 0;
+
+      if (exec_hdr (abfd)->a_data > obj_datasec (abfd)->size)
+	pos = obj_datasec (abfd)->filepos + exec_hdr (abfd)->a_data;
+      else if (obj_datasec (abfd)->size == 0
+	       && exec_hdr (abfd)->a_text > obj_textsec (abfd)->size)
+	pos = obj_textsec (abfd)->filepos + exec_hdr (abfd)->a_text;
+      if (pos != 0)
+	{
+	  bfd_byte b = 0;
+
+	  if (bfd_seek (abfd, pos - 1, SEEK_SET) != 0
+	      || bfd_write (&b, 1, abfd) != 1)
+	    goto error_return;
+	}
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (aout_info.contents != NULL)
-    free (aout_info.contents);
-  if (aout_info.relocs != NULL)
-    free (aout_info.relocs);
-  if (aout_info.symbol_map != NULL)
-    free (aout_info.symbol_map);
-  if (aout_info.output_syms != NULL)
-    free (aout_info.output_syms);
+  free (aout_info.contents);
+  free (aout_info.relocs);
+  free (aout_info.symbol_map);
+  free (aout_info.output_syms);
   if (includes_hash_initialized)
     bfd_hash_table_free (&aout_info.includes.root);
-  return FALSE;
+  return false;
 }
 
 /* Adjust and write out the symbols for an a.out file.  Set the new
    symbol indices into a symbol_map.  */
 
-static bfd_boolean
+static bool
 aout_link_write_symbols (struct aout_final_link_info *flaginfo, bfd *input_bfd)
 {
   bfd *output_bfd;
@@ -3971,8 +4148,8 @@ aout_link_write_symbols (struct aout_fin
   struct external_nlist *sym_end;
   struct aout_link_hash_entry **sym_hash;
   int *symbol_map;
-  bfd_boolean pass;
-  bfd_boolean skip_next;
+  bool pass;
+  bool skip_next;
 
   output_bfd = flaginfo->output_bfd;
   sym_count = obj_aout_external_sym_count (input_bfd);
@@ -3985,15 +4162,18 @@ aout_link_write_symbols (struct aout_fin
      discarding such symbols.  */
   if (strip != strip_all
       && (strip != strip_some
-	  || bfd_hash_lookup (flaginfo->info->keep_hash, input_bfd->filename,
-			      FALSE, FALSE) != NULL)
+	  || bfd_hash_lookup (flaginfo->info->keep_hash,
+			      bfd_get_filename (input_bfd),
+			      false, false) != NULL)
       && discard != discard_all)
     {
       H_PUT_8 (output_bfd, N_TEXT, outsym->e_type);
+      H_PUT_8 (output_bfd, 0, outsym->e_ovly);
+      H_PUT_16 (output_bfd, 0, outsym->e_desc);
       strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab,
-				       input_bfd->filename, FALSE);
+				       bfd_get_filename (input_bfd), false);
       if (strtab_index == (bfd_size_type) -1)
-	return FALSE;
+	return false;
       PUT_WORD (output_bfd, strtab_index, outsym->e_strx);
       PUT_WORD (output_bfd,
 		(bfd_section_vma (obj_textsec (input_bfd)->output_section)
@@ -4003,8 +4183,8 @@ aout_link_write_symbols (struct aout_fin
       ++outsym;
     }
 
-  pass = FALSE;
-  skip_next = FALSE;
+  pass = false;
+  skip_next = false;
   sym = obj_aout_external_syms (input_bfd);
   sym_end = sym + sym_count;
   sym_hash = obj_aout_sym_hashes (input_bfd);
@@ -4015,10 +4195,10 @@ aout_link_write_symbols (struct aout_fin
       const char *name;
       int type;
       struct aout_link_hash_entry *h;
-      bfd_boolean skip;
+      bool skip;
       asection *symsec;
       bfd_vma val = 0;
-      bfd_boolean copy;
+      bool copy;
 
       /* We set *symbol_map to 0 above for all symbols.  If it has
 	 already been set to -1 for this symbol, it means that we are
@@ -4042,14 +4222,14 @@ aout_link_write_symbols (struct aout_fin
 	  /* Pass this symbol through.  It is the target of an
 	     indirect or warning symbol.  */
 	  val = GET_WORD (input_bfd, sym->e_value);
-	  pass = FALSE;
+	  pass = false;
 	}
       else if (skip_next)
 	{
 	  /* Skip this symbol, which is the target of an indirect
 	     symbol that we have changed to no longer be an indirect
 	     symbol.  */
-	  skip_next = FALSE;
+	  skip_next = false;
 	  continue;
 	}
       else
@@ -4091,39 +4271,65 @@ aout_link_write_symbols (struct aout_fin
 	    {
 	      if ((type & N_TYPE) == N_INDR
 		  || type == N_WARNING)
-		skip_next = TRUE;
+		skip_next = true;
 	      *symbol_map = h->indx;
 	      continue;
 	    }
 
 	  /* See if we are stripping this symbol.  */
-	  skip = FALSE;
+	  skip = false;
 	  switch (strip)
 	    {
 	    case strip_none:
 	      break;
 	    case strip_debugger:
-	      if ((type & N_STAB) != 0)
-		skip = TRUE;
+	      if (is_stab (type, name))
+		skip = true;
 	      break;
 	    case strip_some:
-	      if (bfd_hash_lookup (flaginfo->info->keep_hash, name, FALSE, FALSE)
-		  == NULL)
-		skip = TRUE;
+	      if (bfd_hash_lookup (flaginfo->info->keep_hash, name,
+				   false, false) == NULL)
+		skip = true;
 	      break;
 	    case strip_all:
-	      skip = TRUE;
+	      skip = true;
 	      break;
 	    }
 	  if (skip)
 	    {
 	      if (h != NULL)
-		h->written = TRUE;
+		h->written = true;
 	      continue;
 	    }
 
 	  /* Get the value of the symbol.  */
-	  if ((type & N_TYPE) == N_TEXT
+	  if (is_stab (type, name))
+	    {
+	      switch (type)
+		{
+		default:
+		  symsec = bfd_abs_section_ptr;
+		  break;
+		case N_SO:
+		case N_SOL:
+		case N_FUN:
+		case N_ENTRY:
+		case N_SLINE:
+		case N_FN:
+		  symsec = obj_textsec (input_bfd);
+		  break;
+		case N_STSYM:
+		case N_DSLINE:
+		  symsec = obj_datasec (input_bfd);
+		  break;
+		case N_LCSYM:
+		case N_BSLINE:
+		  symsec = obj_bsssec (input_bfd);
+		  break;
+		}
+	      val = GET_WORD (input_bfd, sym->e_value);
+	    }
+	  else if ((type & N_TYPE) == N_TEXT
 	      || type == N_WEAKT)
 	    symsec = obj_textsec (input_bfd);
 	  else if ((type & N_TYPE) == N_DATA
@@ -4147,12 +4353,7 @@ aout_link_write_symbols (struct aout_fin
 		 the indirect symbol was defined, we output it with
 		 the correct definition so the debugger will
 		 understand it.  */
-	      pass = TRUE;
-	      val = GET_WORD (input_bfd, sym->e_value);
-	      symsec = NULL;
-	    }
-	  else if ((type & N_STAB) != 0)
-	    {
+	      pass = true;
 	      val = GET_WORD (input_bfd, sym->e_value);
 	      symsec = NULL;
 	    }
@@ -4163,7 +4364,7 @@ aout_link_write_symbols (struct aout_fin
 		 a case we do not want to output the next symbol,
 		 which is the target of the indirection.  */
 	      if ((type & N_TYPE) == N_INDR)
-		skip_next = TRUE;
+		skip_next = true;
 
 	      symsec = NULL;
 
@@ -4255,7 +4456,7 @@ aout_link_write_symbols (struct aout_fin
 	     it is a local symbol see if we should discard it.  */
 	  if (h != NULL)
 	    {
-	      h->written = TRUE;
+	      h->written = true;
 	      h->indx = obj_aout_external_sym_count (output_bfd);
 	    }
 	  else if ((type & N_TYPE) != N_SETT
@@ -4269,17 +4470,17 @@ aout_link_write_symbols (struct aout_fin
 		case discard_sec_merge:
 		  break;
 		case discard_l:
-		  if ((type & N_STAB) == 0
+		  if (!is_stab (type, name)
 		      && bfd_is_local_label_name (input_bfd, name))
-		    skip = TRUE;
+		    skip = true;
 		  break;
 		case discard_all:
-		  skip = TRUE;
+		  skip = true;
 		  break;
 		}
 	      if (skip)
 		{
-		  pass = FALSE;
+		  pass = false;
 		  continue;
 		}
 	    }
@@ -4337,9 +4538,9 @@ aout_link_write_symbols (struct aout_fin
 		 symbol.  */
 	      copy = ! flaginfo->info->keep_memory;
 	      incl_entry = aout_link_includes_lookup (&flaginfo->includes,
-						      name, TRUE, copy);
+						      name, true, copy);
 	      if (incl_entry == NULL)
-		return FALSE;
+		return false;
 	      for (t = incl_entry->totals; t != NULL; t = t->next)
 		if (t->total == val)
 		  break;
@@ -4350,7 +4551,7 @@ aout_link_write_symbols (struct aout_fin
 		  t = bfd_hash_allocate (&flaginfo->includes.root,
 					 sizeof *t);
 		  if (t == NULL)
-		    return FALSE;
+		    return false;
 		  t->total = val;
 		  t->next = incl_entry->totals;
 		  incl_entry->totals = t;
@@ -4393,7 +4594,9 @@ aout_link_write_symbols (struct aout_fin
       /* Copy this symbol into the list of symbols we are going to
 	 write out.  */
       H_PUT_8 (output_bfd, type, outsym->e_type);
-      copy = FALSE;
+      H_PUT_8 (output_bfd, H_GET_8 (input_bfd, sym->e_ovly), outsym->e_ovly);
+      H_PUT_16 (output_bfd, H_GET_16 (input_bfd, sym->e_desc), outsym->e_desc);
+      copy = false;
       if (! flaginfo->info->keep_memory)
 	{
 	  /* name points into a string table which we are going to
@@ -4402,12 +4605,12 @@ aout_link_write_symbols (struct aout_fin
 	  if (h != NULL)
 	    name = h->root.root.string;
 	  else
-	    copy = TRUE;
+	    copy = true;
 	}
       strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab,
 				       name, copy);
       if (strtab_index == (bfd_size_type) -1)
-	return FALSE;
+	return false;
       PUT_WORD (output_bfd, strtab_index, outsym->e_strx);
       PUT_WORD (output_bfd, val, outsym->e_value);
       *symbol_map = obj_aout_external_sym_count (output_bfd);
@@ -4421,15 +4624,15 @@ aout_link_write_symbols (struct aout_fin
       bfd_size_type size;
 
       if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0)
-	return FALSE;
+	return false;
       size = outsym - flaginfo->output_syms;
       size *= EXTERNAL_NLIST_SIZE;
-      if (bfd_bwrite ((void *) flaginfo->output_syms, size, output_bfd) != size)
-	return FALSE;
+      if (bfd_write (flaginfo->output_syms, size, output_bfd) != size)
+	return false;
       flaginfo->symoff += size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write out a symbol that was not associated with an a.out input
@@ -4488,6 +4691,7 @@ const bfd_target MY (vec) =
   AR_PAD_CHAR,			/* AR_pad_char.  */
   15,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
      bfd_getp32, bfd_getp_signed_32, bfd_putp32,
      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-aarch64.c ./bfd/pe-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-aarch64.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/pe-aarch64.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,73 @@
+/* BFD back-end for AArch64 PE IMAGE COFF files.
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+
+#define TARGET_SYM             aarch64_pe_le_vec
+#define TARGET_NAME            "pe-aarch64-little"
+#define TARGET_ARCHITECTURE    bfd_arch_aarch64
+#define TARGET_PAGESIZE        4096
+#define TARGET_BIG_ENDIAN      0
+#define TARGET_ARCHIVE         0
+#define TARGET_PRIORITY        0
+
+/* Rename the above into.. */
+#define COFF_WITH_peAArch64
+#define COFF_WITH_PE
+#define PCRELOFFSET       true
+
+/* Long section names not allowed in executable images, only object files.  */
+#define COFF_LONG_SECTION_NAMES 1
+
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "coff/aarch64.h"
+#include "coff/internal.h"
+#include "coff/pe.h"
+#include "libcoff.h"
+#include "libpei.h"
+#include "libiberty.h"
+
+/* Make sure we're setting a 64-bit format.  */
+#undef AOUTSZ
+#define AOUTSZ          PEPAOUTSZ
+#define PEAOUTHDR       PEPAOUTHDR
+
+#include "coff-aarch64.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-arm.c ./bfd/pe-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-arm.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pe-arm.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ARM PECOFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,7 +29,7 @@
 #endif
 
 #define COFF_WITH_PE
-#define PCRELOFFSET	     TRUE
+#define PCRELOFFSET	     true
 #define COFF_LONG_SECTION_NAMES
 
 #define COFF_SECTION_ALIGNMENT_ENTRIES \
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-arm-wince.c ./bfd/pe-arm-wince.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-arm-wince.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pe-arm-wince.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ARM WINCE PE files.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pef.c ./bfd/pef.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pef.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pef.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* PEF support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -41,6 +41,7 @@
 #define bfd_pef_bfd_is_target_special_symbol        _bfd_bool_bfd_asymbol_false
 #define bfd_pef_get_lineno			    _bfd_nosymbols_get_lineno
 #define bfd_pef_find_nearest_line		    _bfd_nosymbols_find_nearest_line
+#define bfd_pef_find_nearest_line_with_alt	    _bfd_nosymbols_find_nearest_line_with_alt
 #define bfd_pef_find_line			    _bfd_nosymbols_find_line
 #define bfd_pef_find_inliner_info		    _bfd_nosymbols_find_inliner_info
 #define bfd_pef_get_symbol_version_string	    _bfd_nosymbols_get_symbol_version_string
@@ -180,7 +181,7 @@ bfd_pef_parse_traceback_table (bfd *abfd
 
       /* Strip leading period inserted by compiler.  */
       if (namebuf[0] == '.')
-	memmove (namebuf, namebuf + 1, name.name_len + 1);
+	memmove (namebuf, namebuf + 1, name.name_len);
 
       sym->name = namebuf;
 
@@ -219,7 +220,7 @@ bfd_pef_print_symbol (bfd *abfd,
     default:
       bfd_print_symbol_vandf (abfd, (void *) file, symbol);
       fprintf (file, " %-5s %s", symbol->section->name, symbol->name);
-      if (CONST_STRNEQ (symbol->name, "__traceback_"))
+      if (startswith (symbol->name, "__traceback_"))
 	{
 	  unsigned char *buf;
 	  size_t offset = symbol->value + 4;
@@ -254,10 +255,10 @@ bfd_pef_convert_architecture (unsigned l
     *type = bfd_arch_m68k;
 }
 
-static bfd_boolean
+static bool
 bfd_pef_mkobject (bfd *abfd ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 static const char *bfd_pef_section_name (bfd_pef_section *section)
@@ -385,8 +386,8 @@ bfd_pef_scan_section (bfd *abfd, bfd_pef
 {
   unsigned char buf[28];
 
-  bfd_seek (abfd, section->header_offset, SEEK_SET);
-  if (bfd_bread ((void *) buf, 28, abfd) != 28)
+  if (bfd_seek (abfd, section->header_offset, SEEK_SET) != 0
+      || bfd_read (buf, 28, abfd) != 28)
     return -1;
 
   section->name_offset = bfd_h_get_32 (abfd, buf);
@@ -446,12 +447,15 @@ bfd_pef_print_loader_section (bfd *abfd,
     return -1;
 
   loaderlen = loadersec->size;
-  loaderbuf = bfd_malloc (loaderlen);
+  if (loaderlen < 56)
+    return -1;
+  if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0)
+    return -1;
+  loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen);
+  if (loaderbuf == NULL)
+    return -1;
 
-  if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0
-      || bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen
-      || loaderlen < 56
-      || bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header) < 0)
+  if (bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header) < 0)
     {
       free (loaderbuf);
       return -1;
@@ -477,14 +481,14 @@ bfd_pef_scan_start_address (bfd *abfd)
     goto end;
 
   loaderlen = loadersec->size;
-  loaderbuf = bfd_malloc (loaderlen);
-  if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0)
+  if (loaderlen < 56)
     goto error;
-  if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen)
+  if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0)
     goto error;
-
-  if (loaderlen < 56)
+  loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen);
+  if (loaderbuf == NULL)
     goto error;
+
   ret = bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header);
   if (ret < 0)
     goto error;
@@ -502,13 +506,11 @@ bfd_pef_scan_start_address (bfd *abfd)
   abfd->start_address = section->vma + header.main_offset;
 
  end:
-  if (loaderbuf != NULL)
-    free (loaderbuf);
+  free (loaderbuf);
   return 0;
 
  error:
-  if (loaderbuf != NULL)
-    free (loaderbuf);
+  free (loaderbuf);
   return -1;
 }
 
@@ -566,9 +568,8 @@ bfd_pef_read_header (bfd *abfd, bfd_pef_
 {
   unsigned char buf[40];
 
-  bfd_seek (abfd, 0, SEEK_SET);
-
-  if (bfd_bread ((void *) buf, 40, abfd) != 40)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_read (buf, 40, abfd) != 40)
     return -1;
 
   header->tag1 = bfd_getb32 (buf);
@@ -586,7 +587,7 @@ bfd_pef_read_header (bfd *abfd, bfd_pef_
   return 0;
 }
 
-static const bfd_target *
+static bfd_cleanup
 bfd_pef_object_p (bfd *abfd)
 {
   bfd_pef_header header;
@@ -605,7 +606,7 @@ bfd_pef_object_p (bfd *abfd)
   if (bfd_pef_scan (abfd, &header, mdata))
     goto wrong;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  wrong:
   bfd_set_error (bfd_error_wrong_format);
@@ -749,13 +750,20 @@ bfd_pef_parse_function_stubs (bfd *abfd,
   if (ret < 0)
     goto error;
 
+  if ((loaderlen - 56) / 24 < header.imported_library_count)
+    goto error;
+
+  if ((loaderlen - 56 - header.imported_library_count * 24) / 4
+      < header.total_imported_symbol_count)
+    goto error;
+
   libraries = bfd_malloc
     (header.imported_library_count * sizeof (bfd_pef_imported_library));
   imports = bfd_malloc
     (header.total_imported_symbol_count * sizeof (bfd_pef_imported_symbol));
-
-  if (loaderlen < (56 + (header.imported_library_count * 24)))
+  if (libraries == NULL || imports == NULL)
     goto error;
+
   for (i = 0; i < header.imported_library_count; i++)
     {
       ret = bfd_pef_parse_imported_library
@@ -764,9 +772,6 @@ bfd_pef_parse_function_stubs (bfd *abfd,
 	goto error;
     }
 
-  if (loaderlen < (56 + (header.imported_library_count * 24)
-		   + (header.total_imported_symbol_count * 4)))
-    goto error;
   for (i = 0; i < header.total_imported_symbol_count; i++)
     {
       ret = (bfd_pef_parse_imported_symbol
@@ -799,7 +804,7 @@ bfd_pef_parse_function_stubs (bfd *abfd,
 	  codepos += 4;
 	}
 
-      if ((codepos + 4) > codelen)
+      if ((codepos + 24) > codelen)
 	break;
 
       ret = bfd_pef_parse_function_stub (abfd, codebuf + codepos, 24, &sym_index);
@@ -863,18 +868,14 @@ bfd_pef_parse_function_stubs (bfd *abfd,
   goto end;
 
  end:
-  if (libraries != NULL)
-    free (libraries);
-  if (imports != NULL)
-    free (imports);
+  free (libraries);
+  free (imports);
   *nsym = count;
   return 0;
 
  error:
-  if (libraries != NULL)
-    free (libraries);
-  if (imports != NULL)
-    free (imports);
+  free (libraries);
+  free (imports);
   *nsym = count;
   return -1;
 }
@@ -896,10 +897,10 @@ bfd_pef_parse_symbols (bfd *abfd, asymbo
   if (codesec != NULL)
     {
       codelen = codesec->size;
-      codebuf = bfd_malloc (codelen);
-      if (bfd_seek (abfd, codesec->filepos, SEEK_SET) < 0)
+      if (bfd_seek (abfd, codesec->filepos, SEEK_SET) != 0)
 	goto end;
-      if (bfd_bread ((void *) codebuf, codelen, abfd) != codelen)
+      codebuf = _bfd_malloc_and_read (abfd, codelen, codelen);
+      if (codebuf == NULL)
 	goto end;
     }
 
@@ -907,10 +908,10 @@ bfd_pef_parse_symbols (bfd *abfd, asymbo
   if (loadersec != NULL)
     {
       loaderlen = loadersec->size;
-      loaderbuf = bfd_malloc (loaderlen);
-      if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0)
+      if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0)
 	goto end;
-      if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen)
+      loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen);
+      if (loaderbuf == NULL)
 	goto end;
     }
 
@@ -936,12 +937,8 @@ bfd_pef_parse_symbols (bfd *abfd, asymbo
     csym[count] = NULL;
 
  end:
-  if (codebuf != NULL)
-    free (codebuf);
-
-  if (loaderbuf != NULL)
-    free (loaderbuf);
-
+  free (codebuf);
+  free (loaderbuf);
   return count;
 }
 
@@ -1020,6 +1017,7 @@ const bfd_target pef_vec =
   ' ',				/* AR_pad_char.  */
   16,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
@@ -1073,9 +1071,8 @@ bfd_pef_xlib_read_header (bfd *abfd, bfd
 {
   unsigned char buf[80];
 
-  bfd_seek (abfd, 0, SEEK_SET);
-
-  if (bfd_bread ((void *) buf, sizeof buf, abfd) != sizeof buf)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_read (buf, sizeof buf, abfd) != sizeof buf)
     return -1;
 
   header->tag1 = bfd_getb32 (buf);
@@ -1121,7 +1118,7 @@ bfd_pef_xlib_scan (bfd *abfd, bfd_pef_xl
   return 0;
 }
 
-static const bfd_target *
+static bfd_cleanup
 bfd_pef_xlib_object_p (bfd *abfd)
 {
   bfd_pef_xlib_header header;
@@ -1146,7 +1143,7 @@ bfd_pef_xlib_object_p (bfd *abfd)
       return NULL;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 const bfd_target pef_xlib_vec =
@@ -1164,6 +1161,7 @@ const bfd_target pef_xlib_vec =
   ' ',				/* AR_pad_char.  */
   16,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pef.h ./bfd/pef.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pef.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pef.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* PEF support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pef-traceback.h ./bfd/pef-traceback.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pef-traceback.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pef-traceback.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC traceback table support for BFD.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-i386.c ./bfd/pe-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-i386.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pe-i386.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel 386 PECOFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -23,8 +23,11 @@
 
 #define TARGET_SYM		i386_pe_vec
 #define TARGET_NAME		"pe-i386"
+#define TARGET_SYM_BIG		i386_pe_big_vec
+#define TARGET_NAME_BIG		"pe-bigobj-i386"
 #define COFF_WITH_PE
-#define PCRELOFFSET		TRUE
+#define COFF_WITH_PE_BIGOBJ
+#define PCRELOFFSET		true
 #define TARGET_UNDERSCORE	'_'
 #define COFF_LONG_SECTION_NAMES
 #define COFF_SUPPORT_GNU_LINKONCE
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-aarch64.c ./bfd/pei-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-aarch64.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/pei-aarch64.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,74 @@
+/* BFD back-end for AArch64 PE IMAGE COFF files.
+   Copyright (C) 2021-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+
+#define TARGET_SYM		aarch64_pei_le_vec
+#define TARGET_NAME		"pei-aarch64-little"
+#define TARGET_ARCHITECTURE	bfd_arch_aarch64
+#define TARGET_PAGESIZE		4096
+#define TARGET_BIG_ENDIAN	0
+#define TARGET_ARCHIVE		0
+#define TARGET_PRIORITY		0
+
+#define COFF_IMAGE_WITH_PE
+/* Rename the above into.. */
+#define COFF_WITH_peAArch64
+#define COFF_WITH_PE
+#define PCRELOFFSET	   true
+
+/* Long section names not allowed in executable images, only object files.  */
+#define COFF_LONG_SECTION_NAMES 0
+
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "coff/aarch64.h"
+#include "coff/internal.h"
+#include "coff/pe.h"
+#include "libcoff.h"
+#include "libpei.h"
+#include "libiberty.h"
+
+/* Make sure we're setting a 64-bit format.  */
+#undef AOUTSZ
+#define AOUTSZ          PEPAOUTSZ
+#define PEAOUTHDR       PEPAOUTHDR
+
+#include "coff-aarch64.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-arm.c ./bfd/pei-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-arm.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pei-arm.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for arm PE IMAGE COFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -30,7 +30,7 @@
 
 #define COFF_IMAGE_WITH_PE
 #define COFF_WITH_PE
-#define PCRELOFFSET	   TRUE
+#define PCRELOFFSET	   true
 /* Long section names not allowed in executable images, only object files.  */
 #define COFF_LONG_SECTION_NAMES 0
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-arm-wince.c ./bfd/pei-arm-wince.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-arm-wince.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pei-arm-wince.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ARM WINCE PE IMAGE COFF files.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,4 +28,6 @@
 
 #define LOCAL_LABEL_PREFIX "."
 
+#define WINCE
+
 #include "pei-arm.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/peicode.h ./bfd/peicode.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/peicode.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/peicode.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for the generic parts of PE/PEI, for BFD.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -56,7 +56,7 @@
 
 #include "libpei.h"
 
-static bfd_boolean (*pe_saved_coff_bfd_print_private_bfd_data) (bfd *, void *) =
+static bool (*pe_saved_coff_bfd_print_private_bfd_data) (bfd *, void *) =
 #ifndef coff_bfd_print_private_bfd_data
      NULL;
 #else
@@ -64,10 +64,10 @@ static bfd_boolean (*pe_saved_coff_bfd_p
 #undef coff_bfd_print_private_bfd_data
 #endif
 
-static bfd_boolean			pe_print_private_bfd_data (bfd *, void *);
+static bool pe_print_private_bfd_data (bfd *, void *);
 #define coff_bfd_print_private_bfd_data pe_print_private_bfd_data
 
-static bfd_boolean (*pe_saved_coff_bfd_copy_private_bfd_data) (bfd *, bfd *) =
+static bool (*pe_saved_coff_bfd_copy_private_bfd_data) (bfd *, bfd *) =
 #ifndef coff_bfd_copy_private_bfd_data
      NULL;
 #else
@@ -75,7 +75,7 @@ static bfd_boolean (*pe_saved_coff_bfd_c
 #undef coff_bfd_copy_private_bfd_data
 #endif
 
-static bfd_boolean		       pe_bfd_copy_private_bfd_data (bfd *, bfd *);
+static bool pe_bfd_copy_private_bfd_data (bfd *, bfd *);
 #define coff_bfd_copy_private_bfd_data pe_bfd_copy_private_bfd_data
 
 #define coff_mkobject	   pe_mkobject
@@ -122,7 +122,7 @@ typedef struct
 pe_ILF_vars;
 #endif /* COFF_IMAGE_WITH_PE */
 
-const bfd_target *coff_real_object_p
+bfd_cleanup coff_real_object_p
   (bfd *, unsigned, struct internal_filehdr *, struct internal_aouthdr *);
 
 #ifndef NO_COFF_RELOCS
@@ -191,6 +191,8 @@ coff_swap_filehdr_in (bfd * abfd, void *
 
 #ifdef COFF_IMAGE_WITH_PE
 # define coff_swap_filehdr_out _bfd_XXi_only_swap_filehdr_out
+#elif defined COFF_WITH_peAArch64
+# define coff_swap_filehdr_out _bfd_XX_only_swap_filehdr_out
 #elif defined COFF_WITH_pex64
 # define coff_swap_filehdr_out _bfd_pex64_only_swap_filehdr_out
 #elif defined COFF_WITH_pep
@@ -231,7 +233,7 @@ coff_swap_scnhdr_in (bfd * abfd, void *
     {
       scnhdr_int->s_vaddr += pe_data (abfd)->pe_opthdr.ImageBase;
       /* Do not cut upper 32-bits for 64-bit vma.  */
-#ifndef COFF_WITH_pex64
+#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined(COFF_WITH_peRiscV64)
       scnhdr_int->s_vaddr &= 0xffffffff;
 #endif
     }
@@ -253,44 +255,36 @@ coff_swap_scnhdr_in (bfd * abfd, void *
 #endif
 }
 
-static bfd_boolean
+static bool
 pe_mkobject (bfd * abfd)
 {
-  pe_data_type *pe;
-  bfd_size_type amt = sizeof (pe_data_type);
-
-  abfd->tdata.pe_obj_data = (struct pe_tdata *) bfd_zalloc (abfd, amt);
-
-  if (abfd->tdata.pe_obj_data == 0)
-    return FALSE;
-
-  pe = pe_data (abfd);
+  /* Some x86 code followed by an ascii string.  */
+  static const char default_dos_message[64] = {
+    0x0e, 0x1f, 0xba, 0x0e, 0x00, 0xb4, 0x09, 0xcd,
+    0x21, 0xb8, 0x01, 0x4c, 0xcd, 0x21, 0x54, 0x68,
+    0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72,
+    0x61, 0x6d, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f,
+    0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x75, 0x6e,
+    0x20, 0x69, 0x6e, 0x20, 0x44, 0x4f, 0x53, 0x20,
+    0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0d, 0x0d, 0x0a,
+    0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+  pe_data_type *pe = bfd_zalloc (abfd, sizeof (*pe));
+  abfd->tdata.pe_obj_data = pe;
+  if (pe == NULL)
+    return false;
 
   pe->coff.pe = 1;
 
   /* in_reloc_p is architecture dependent.  */
   pe->in_reloc_p = in_reloc_p;
 
-  /* Default DOS message string.  */
-  pe->dos_message[0]  = 0x0eba1f0e;
-  pe->dos_message[1]  = 0xcd09b400;
-  pe->dos_message[2]  = 0x4c01b821;
-  pe->dos_message[3]  = 0x685421cd;
-  pe->dos_message[4]  = 0x70207369;
-  pe->dos_message[5]  = 0x72676f72;
-  pe->dos_message[6]  = 0x63206d61;
-  pe->dos_message[7]  = 0x6f6e6e61;
-  pe->dos_message[8]  = 0x65622074;
-  pe->dos_message[9]  = 0x6e757220;
-  pe->dos_message[10] = 0x206e6920;
-  pe->dos_message[11] = 0x20534f44;
-  pe->dos_message[12] = 0x65646f6d;
-  pe->dos_message[13] = 0x0a0d0d2e;
-  pe->dos_message[14] = 0x24;
-  pe->dos_message[15] = 0x0;
+  memcpy (pe->dos_message, default_dos_message, sizeof (pe->dos_message));
+
+  bfd_coff_long_section_names (abfd)
+    = coff_backend_info (abfd)->_bfd_coff_long_section_names;
 
-  memset (& pe->pe_opthdr, 0, sizeof pe->pe_opthdr);
-  return TRUE;
+  return true;
 }
 
 /* Create the COFF backend specific information.  */
@@ -349,16 +343,16 @@ pe_mkobject_hook (bfd * abfd,
   return (void *) pe;
 }
 
-static bfd_boolean
+static bool
 pe_print_private_bfd_data (bfd *abfd, void * vfile)
 {
   FILE *file = (FILE *) vfile;
 
   if (!_bfd_XX_print_private_bfd_data_common (abfd, vfile))
-    return FALSE;
+    return false;
 
   if (pe_saved_coff_bfd_print_private_bfd_data == NULL)
-    return TRUE;
+    return true;
 
   fputc ('\n', file);
 
@@ -368,7 +362,7 @@ pe_print_private_bfd_data (bfd *abfd, vo
 /* Copy any private info we understand from the input bfd
    to the output bfd.  */
 
-static bfd_boolean
+static bool
 pe_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   /* PR binutils/716: Copy the large address aware flag.
@@ -380,12 +374,12 @@ pe_bfd_copy_private_bfd_data (bfd *ibfd,
     pe_data (obfd)->real_flags |= IMAGE_FILE_LARGE_ADDRESS_AWARE;
 
   if (!_bfd_XX_bfd_copy_private_bfd_data_common (ibfd, obfd))
-    return FALSE;
+    return false;
 
   if (pe_saved_coff_bfd_copy_private_bfd_data)
     return pe_saved_coff_bfd_copy_private_bfd_data (ibfd, obfd);
 
-  return TRUE;
+  return true;
 }
 
 #define coff_bfd_copy_private_section_data \
@@ -395,11 +389,11 @@ pe_bfd_copy_private_bfd_data (bfd *ibfd,
 
 #ifdef COFF_IMAGE_WITH_PE
 
-/* Code to handle Microsoft's Image Library Format.
+/* Code to handle Microsoft's Import Library Format.
    Also known as LINK6 format.
    Documentation about this format can be found at:
 
-   http://msdn.microsoft.com/library/specs/pecoff_section8.htm  */
+   https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#import-library-format  */
 
 /* The following constants specify the sizes of the various data
    structures that we have to create in order to build a bfd describing
@@ -438,7 +432,7 @@ pe_bfd_copy_private_bfd_data (bfd *ibfd,
 #define SIZEOF_IDATA2		(5 * 4)
 
 /* For PEx64 idata4 & 5 have thumb size of 8 bytes.  */
-#ifdef COFF_WITH_pex64
+#if defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
 #define SIZEOF_IDATA4		(2 * 4)
 #define SIZEOF_IDATA5		(2 * 4)
 #else
@@ -489,7 +483,7 @@ pe_ILF_make_a_symbol_reloc (pe_ILF_vars
 
   internal->r_vaddr  = address;
   internal->r_symndx = sym_index;
-  internal->r_type   = entry->howto->type;
+  internal->r_type   = entry->howto ? entry->howto->type : 0;
 
   vars->relcount ++;
 
@@ -520,7 +514,6 @@ pe_ILF_save_relocs (pe_ILF_vars * vars,
     abort ();
 
   coff_section_data (vars->abfd, sec)->relocs = vars->int_reltab;
-  coff_section_data (vars->abfd, sec)->keep_relocs = TRUE;
 
   sec->relocation  = vars->reltab;
   sec->reloc_count = vars->relcount;
@@ -571,7 +564,7 @@ pe_ILF_make_a_symbol (pe_ILF_vars *  var
   esym = vars->esym_ptr;
 
   /* Copy the symbol's name into the string table.  */
-  sprintf (vars->string_ptr, "%s%s", prefix, symbol_name);
+  int len = sprintf (vars->string_ptr, "%s%s", prefix, symbol_name);
 
   if (section == NULL)
     section = bfd_und_section_ptr;
@@ -588,8 +581,8 @@ pe_ILF_make_a_symbol (pe_ILF_vars *  var
   /* Initialise the internal symbol structure.  */
   ent->u.syment.n_sclass	  = sclass;
   ent->u.syment.n_scnum		  = section->target_index;
-  ent->u.syment._n._n_n._n_offset = (bfd_hostptr_t) sym;
-  ent->is_sym = TRUE;
+  ent->u.syment._n._n_n._n_offset = (uintptr_t) sym;
+  ent->is_sym = true;
 
   sym->symbol.the_bfd = vars->abfd;
   sym->symbol.name    = vars->string_ptr;
@@ -607,7 +600,7 @@ pe_ILF_make_a_symbol (pe_ILF_vars *  var
   vars->table_ptr ++;
   vars->native_ptr ++;
   vars->esym_ptr ++;
-  vars->string_ptr += strlen (symbol_name) + strlen (prefix) + 1;
+  vars->string_ptr += len + 1;
 
   BFD_ASSERT (vars->string_ptr < vars->end_string_ptr);
 }
@@ -622,6 +615,7 @@ pe_ILF_make_a_section (pe_ILF_vars * var
 {
   asection_ptr sec;
   flagword     flags;
+  intptr_t alignment;
 
   sec = bfd_make_section_old_way (vars->abfd, name);
   if (sec == NULL)
@@ -652,20 +646,18 @@ pe_ILF_make_a_section (pe_ILF_vars * var
   if (size & 1)
     vars->data --;
 
-# if (GCC_VERSION >= 3000)
   /* PR 18758: See note in pe_ILF_buid_a_bfd.  We must make sure that we
-     preserve host alignment requirements.  We test 'size' rather than
-     vars.data as we cannot perform binary arithmetic on pointers.  We assume
-     that vars.data was sufficiently aligned upon entry to this function.
-     The BFD_ASSERTs in this functions will warn us if we run out of room,
-     but we should already have enough padding built in to ILF_DATA_SIZE.  */
-  {
-    unsigned int alignment = __alignof__ (struct coff_section_tdata);
-
-    if (size & (alignment - 1))
-      vars->data += alignment - (size & (alignment - 1));
-  }
+     preserve host alignment requirements.  The BFD_ASSERTs in this
+     functions will warn us if we run out of room, but we should
+     already have enough padding built in to ILF_DATA_SIZE.  */
+#if GCC_VERSION >= 3000
+  alignment = __alignof__ (struct coff_section_tdata);
+#else
+  alignment = 8;
 #endif
+  vars->data
+    = (bfd_byte *) (((intptr_t) vars->data + alignment - 1) & -alignment);
+
   /* Create a coff_section_tdata structure for our use.  */
   sec->used_by_bfd = (struct coff_section_tdata *) vars->data;
   vars->data += sizeof (struct coff_section_tdata);
@@ -700,7 +692,7 @@ typedef struct
 }
 jump_table;
 
-static jump_table jtab[] =
+static const jump_table jtab[] =
 {
 #ifdef I386MAGIC
   { I386MAGIC,
@@ -739,6 +731,16 @@ static jump_table jtab[] =
   },
 #endif
 
+#ifdef AARCH64MAGIC
+/* We don't currently support jumping to DLLs, so if
+   someone does try emit a runtime trap.  Through UDF #0.  */
+  { AARCH64MAGIC,
+    { 0x00, 0x00, 0x00, 0x00 },
+    4, 0
+  },
+
+#endif
+
 #ifdef  ARMPEMAGIC
   { ARMPEMAGIC,
     { 0x00, 0xc0, 0x9f, 0xe5, 0x00, 0xf0,
@@ -754,6 +756,27 @@ static jump_table jtab[] =
     16, 12
   },
 #endif
+
+#ifdef LOONGARCH64MAGIC
+/* We don't currently support jumping to DLLs, so if
+   someone does try emit a runtime trap.  Through BREAK 0.  */
+  { LOONGARCH64MAGIC,
+    { 0x00, 0x00, 0x2a, 0x00 },
+    4, 0
+  },
+
+#endif
+
+#ifdef RISCV64MAGIC
+  /* We don't currently support jumping to DLLs, so if
+     someone does try emit a runtime trap.  Through EBREAK.  */
+  { RISCV64MAGIC,
+    { 0x73, 0x00, 0x10, 0x00 },
+    4, 0
+  },
+
+#endif
+
   { 0, { 0 }, 0, 0 }
 };
 
@@ -763,7 +786,7 @@ static jump_table jtab[] =
 
 /* Build a full BFD from the information supplied in a ILF object.  */
 
-static bfd_boolean
+static bool
 pe_ILF_build_a_bfd (bfd *	    abfd,
 		    unsigned int    magic,
 		    char *	    symbol_name,
@@ -779,6 +802,7 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
   asection_ptr		   id4, id5, id6 = NULL, text = NULL;
   coff_symbol_type **	   imp_sym;
   unsigned int		   imp_index;
+  intptr_t alignment;
 
   /* Decode and verify the types field of the ILF structure.  */
   import_type = types & 0x3;
@@ -795,13 +819,13 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: unhandled import type; %x"),
 			  abfd, import_type);
-      return FALSE;
+      return false;
 
     default:
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: unrecognized import type; %x"),
 			  abfd, import_type);
-      return FALSE;
+      return false;
     }
 
   switch (import_name_type)
@@ -816,7 +840,7 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: unrecognized import name type; %x"),
 			  abfd, import_name_type);
-      return FALSE;
+      return false;
     }
 
   /* Initialise local variables.
@@ -829,7 +853,7 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
   vars.bim
     = (struct bfd_in_memory *) bfd_malloc ((bfd_size_type) sizeof (*vars.bim));
   if (vars.bim == NULL)
-    return FALSE;
+    return false;
 
   ptr = (bfd_byte *) bfd_zmalloc ((bfd_size_type) ILF_DATA_SIZE);
   vars.bim->buffer = ptr;
@@ -874,23 +898,17 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
 
   /* The remaining space in bim->buffer is used
      by the pe_ILF_make_a_section() function.  */
-# if (GCC_VERSION >= 3000)
+
   /* PR 18758: Make sure that the data area is sufficiently aligned for
-     pointers on the host.  __alignof__ is a gcc extension, hence the test
-     above.  For other compilers we will have to assume that the alignment is
-     unimportant, or else extra code can be added here and in
-     pe_ILF_make_a_section.
-
-     Note - we cannot test 'ptr' directly as it is illegal to perform binary
-     arithmetic on pointers, but we know that the strings section is the only
-     one that might end on an unaligned boundary.  */
-  {
-    unsigned int alignment = __alignof__ (char *);
-
-    if (SIZEOF_ILF_STRINGS & (alignment - 1))
-      ptr += alignment - (SIZEOF_ILF_STRINGS & (alignment - 1));
-  }
+     struct coff_section_tdata.  __alignof__ is a gcc extension, hence
+     the test of GCC_VERSION.  For other compilers we assume 8 byte
+     alignment.  */
+#if GCC_VERSION >= 3000
+  alignment = __alignof__ (struct coff_section_tdata);
+#else
+  alignment = 8;
 #endif
+  ptr = (bfd_byte *) (((intptr_t) ptr + alignment - 1) & -alignment);
 
   vars.data = ptr;
   vars.abfd = abfd;
@@ -916,7 +934,7 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
 	/* See PR 20907 for a reproducer.  */
 	goto error_return;
 
-#ifdef COFF_WITH_pex64
+#if defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) || defined(COFF_WITH_peLoongArch64) || defined (COFF_WITH_peRiscV64)
       ((unsigned int *) id4->contents)[0] = ordinal;
       ((unsigned int *) id4->contents)[1] = 0x80000000;
       ((unsigned int *) id5->contents)[0] = ordinal;
@@ -1054,6 +1072,32 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
       abort ();
     }
 
+  /* Now create a symbol describing the imported value.  */
+  switch (import_type)
+    {
+    case IMPORT_CODE:
+      pe_ILF_make_a_symbol (& vars, "", symbol_name, text,
+			    BSF_NOT_AT_END | BSF_FUNCTION);
+
+      break;
+
+    case IMPORT_DATA:
+      /* Nothing to do here.  */
+      break;
+
+    default:
+      /* XXX code not yet written.  */
+      abort ();
+    }
+
+  /* Create an import symbol for the DLL, without the .dll suffix.  */
+  ptr = (bfd_byte *) strrchr (source_dll, '.');
+  if (ptr)
+    * ptr = 0;
+  pe_ILF_make_a_symbol (& vars, "__IMPORT_DESCRIPTOR_", source_dll, NULL, 0);
+  if (ptr)
+    * ptr = '.';
+
   /* Initialise the bfd.  */
   memset (& internal_f, 0, sizeof (internal_f));
 
@@ -1069,7 +1113,7 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
   if (bfd_coff_mkobject_hook (abfd, (void *) & internal_f, NULL) == NULL)
     goto error_return;
 
-  coff_data (abfd)->pe = 1;
+  obj_pe (abfd) = true;
 #ifdef THUMBPEMAGIC
   if (vars.magic == THUMBPEMAGIC)
     /* Stop some linker warnings about thumb code not supporting interworking.  */
@@ -1080,38 +1124,13 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
   bfd_cache_close (abfd);
 
   abfd->iostream = (void *) vars.bim;
-  abfd->flags |= BFD_IN_MEMORY /* | HAS_LOCALS */;
+  abfd->flags |= BFD_IN_MEMORY | HAS_SYMS;
   abfd->iovec = &_bfd_memory_iovec;
   abfd->where = 0;
   abfd->origin = 0;
+  abfd->size = 0;
   obj_sym_filepos (abfd) = 0;
 
-  /* Now create a symbol describing the imported value.  */
-  switch (import_type)
-    {
-    case IMPORT_CODE:
-      pe_ILF_make_a_symbol (& vars, "", symbol_name, text,
-			    BSF_NOT_AT_END | BSF_FUNCTION);
-
-      break;
-
-    case IMPORT_DATA:
-      /* Nothing to do here.  */
-      break;
-
-    default:
-      /* XXX code not yet written.  */
-      abort ();
-    }
-
-  /* Create an import symbol for the DLL, without the .dll suffix.  */
-  ptr = (bfd_byte *) strrchr (source_dll, '.');
-  if (ptr)
-    * ptr = 0;
-  pe_ILF_make_a_symbol (& vars, "__IMPORT_DESCRIPTOR_", source_dll, NULL, 0);
-  if (ptr)
-    * ptr = '.';
-
   /* Point the bfd at the symbol table.  */
   obj_symbols (abfd) = vars.sym_cache;
   abfd->symcount = vars.sym_index;
@@ -1120,29 +1139,40 @@ pe_ILF_build_a_bfd (bfd *	    abfd,
   obj_raw_syment_count (abfd) = vars.sym_index;
 
   obj_coff_external_syms (abfd) = (void *) vars.esym_table;
-  obj_coff_keep_syms (abfd) = TRUE;
+  obj_coff_keep_syms (abfd) = true;
 
   obj_convert (abfd) = vars.sym_table;
   obj_conv_table_size (abfd) = vars.sym_index;
 
   obj_coff_strings (abfd) = vars.string_table;
-  obj_coff_keep_strings (abfd) = TRUE;
+  obj_coff_strings_len (abfd) = vars.string_ptr - vars.string_table;
+  obj_coff_keep_strings (abfd) = true;
 
-  abfd->flags |= HAS_SYMS;
-
-  return TRUE;
+  return true;
 
  error_return:
-  if (vars.bim->buffer != NULL)
-    free (vars.bim->buffer);
+  free (vars.bim->buffer);
   free (vars.bim);
-  return FALSE;
+  return false;
+}
+
+/* Cleanup function, returned from check_format hook.  */
+
+static void
+pe_ILF_cleanup (bfd *abfd)
+{
+  coff_object_cleanup (abfd);
+
+  struct bfd_in_memory *bim = abfd->iostream;
+  free (bim->buffer);
+  free (bim);
+  abfd->iostream = NULL;
 }
 
-/* We have detected a Image Library Format archive element.
+/* We have detected an Import Library Format archive element.
    Decode the element and return the appropriate target.  */
 
-static const bfd_target *
+static bfd_cleanup
 pe_ILF_object_p (bfd * abfd)
 {
   bfd_byte	  buffer[14];
@@ -1156,8 +1186,8 @@ pe_ILF_object_p (bfd * abfd)
   unsigned int	  magic;
 
   /* Upon entry the first six bytes of the ILF header have
-      already been read.  Now read the rest of the header.  */
-  if (bfd_bread (buffer, (bfd_size_type) 14, abfd) != 14)
+     already been read.  Now read the rest of the header.  */
+  if (bfd_read (buffer, 14, abfd) != 14)
     return NULL;
 
   ptr = buffer;
@@ -1213,6 +1243,24 @@ pe_ILF_object_p (bfd * abfd)
 #endif
       break;
 
+    case IMAGE_FILE_MACHINE_ARM64:
+#ifdef AARCH64MAGIC
+      magic = AARCH64MAGIC;
+#endif
+      break;
+
+    case IMAGE_FILE_MACHINE_LOONGARCH64:
+#ifdef LOONGARCH64MAGIC
+      magic = LOONGARCH64MAGIC;
+#endif
+      break;
+
+    case IMAGE_FILE_MACHINE_RISCV64:
+#ifdef RISCV64MAGIC
+      magic = RISCV64MAGIC;
+#endif
+      break;
+
     case IMAGE_FILE_MACHINE_THUMB:
 #ifdef THUMBPEMAGIC
       {
@@ -1273,16 +1321,10 @@ pe_ILF_object_p (bfd * abfd)
   /* ptr += 2; */
 
   /* Now read in the two strings that follow.  */
-  ptr = (bfd_byte *) bfd_alloc (abfd, size);
+  ptr = (bfd_byte *) _bfd_alloc_and_read (abfd, size, size);
   if (ptr == NULL)
     return NULL;
 
-  if (bfd_bread (ptr, size, abfd) != size)
-    {
-      bfd_release (abfd, ptr);
-      return NULL;
-    }
-
   symbol_name = (char *) ptr;
   /* See PR 20905 for an example of where the strnlen is necessary.  */
   source_dll  = symbol_name + strnlen (symbol_name, size - 1) + 1;
@@ -1306,7 +1348,7 @@ pe_ILF_object_p (bfd * abfd)
       return NULL;
     }
 
-  return abfd->xvec;
+  return pe_ILF_cleanup;
 }
 
 static void
@@ -1356,8 +1398,7 @@ pe_bfd_read_buildid (bfd *abfd)
   /* Read the whole section. */
   if (!bfd_malloc_and_get_section (abfd, section, &data))
     {
-      if (data != NULL)
-	free (data);
+      free (data);
       return;
     }
 
@@ -1381,7 +1422,7 @@ pe_bfd_read_buildid (bfd *abfd)
 	  */
 	  if (_bfd_XXi_slurp_codeview_record (abfd,
 					      (file_ptr) idd.PointerToRawData,
-					      idd.SizeOfData, cvinfo))
+					      idd.SizeOfData, cvinfo, NULL))
 	    {
 	      struct bfd_build_id* build_id = bfd_alloc (abfd,
 			 sizeof (struct bfd_build_id) + cvinfo->SignatureLength);
@@ -1396,9 +1437,11 @@ pe_bfd_read_buildid (bfd *abfd)
 	  break;
 	}
     }
+
+  free (data);
 }
 
-static const bfd_target *
+static bfd_cleanup
 pe_bfd_object_p (bfd * abfd)
 {
   bfd_byte buffer[6];
@@ -1406,14 +1449,14 @@ pe_bfd_object_p (bfd * abfd)
   struct external_PEI_IMAGE_hdr image_hdr;
   struct internal_filehdr internal_f;
   struct internal_aouthdr internal_a;
-  file_ptr opt_hdr_size;
+  bfd_size_type opt_hdr_size;
   file_ptr offset;
-  const bfd_target *result;
+  bfd_cleanup result;
 
   /* Detect if this a Microsoft Import Library Format element.  */
   /* First read the beginning of the header.  */
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_bread (buffer, (bfd_size_type) 6, abfd) != 6)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_read (buffer, 6, abfd) != 6)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -1425,9 +1468,8 @@ pe_bfd_object_p (bfd * abfd)
       && H_GET_16 (abfd, buffer + 4) == 0)
     return pe_ILF_object_p (abfd);
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_bread (&dos_hdr, (bfd_size_type) sizeof (dos_hdr), abfd)
-	 != sizeof (dos_hdr))
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_read (&dos_hdr, sizeof (dos_hdr), abfd) != sizeof (dos_hdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -1452,8 +1494,7 @@ pe_bfd_object_p (bfd * abfd)
 
   offset = H_GET_32 (abfd, dos_hdr.e_lfanew);
   if (bfd_seek (abfd, offset, SEEK_SET) != 0
-      || (bfd_bread (&image_hdr, (bfd_size_type) sizeof (image_hdr), abfd)
-	  != sizeof (image_hdr)))
+      || bfd_read (&image_hdr, sizeof (image_hdr), abfd) != sizeof (image_hdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -1486,32 +1527,65 @@ pe_bfd_object_p (bfd * abfd)
   if (opt_hdr_size != 0)
     {
       bfd_size_type amt = opt_hdr_size;
-      void * opthdr;
+      bfd_byte * opthdr;
 
       /* PR 17521 file: 230-131433-0.004.  */
       if (amt < sizeof (PEAOUTHDR))
 	amt = sizeof (PEAOUTHDR);
 
-      opthdr = bfd_zalloc (abfd, amt);
+      opthdr = _bfd_alloc_and_read (abfd, amt, opt_hdr_size);
       if (opthdr == NULL)
 	return NULL;
-      if (bfd_bread (opthdr, opt_hdr_size, abfd)
-	  != (bfd_size_type) opt_hdr_size)
-	return NULL;
+      if (amt > opt_hdr_size)
+	memset (opthdr + opt_hdr_size, 0, amt - opt_hdr_size);
 
-      bfd_set_error (bfd_error_no_error);
-      bfd_coff_swap_aouthdr_in (abfd, opthdr, & internal_a);
-      if (bfd_get_error () != bfd_error_no_error)
-	return NULL;
-    }
+      bfd_coff_swap_aouthdr_in (abfd, opthdr, &internal_a);
 
+      struct internal_extra_pe_aouthdr *a = &internal_a.pe;
+
+#ifdef ARM
+      /* Use Subsystem to distinguish between pei-arm-little and
+	 pei-arm-wince-little.  */
+#ifdef WINCE
+      if (a->Subsystem != IMAGE_SUBSYSTEM_WINDOWS_CE_GUI)
+#else
+      if (a->Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CE_GUI)
+#endif
+	{
+	  bfd_set_error (bfd_error_wrong_format);
+	  return NULL;
+	}
+#endif
+
+      if ((a->SectionAlignment & -a->SectionAlignment) != a->SectionAlignment
+	  || a->SectionAlignment >= 0x80000000)
+	{
+	  _bfd_error_handler (_("%pB: adjusting invalid SectionAlignment"),
+				abfd);
+	  a->SectionAlignment &= -a->SectionAlignment;
+	  if (a->SectionAlignment >= 0x80000000)
+	    a->SectionAlignment = 0x40000000;
+	}
+
+      if ((a->FileAlignment & -a->FileAlignment) != a->FileAlignment
+	  || a->FileAlignment > a->SectionAlignment)
+	{
+	  _bfd_error_handler (_("%pB: adjusting invalid FileAlignment"),
+			      abfd);
+	  a->FileAlignment &= -a->FileAlignment;
+	  if (a->FileAlignment > a->SectionAlignment)
+	    a->FileAlignment = a->SectionAlignment;
+	}
+
+      if (a->NumberOfRvaAndSizes > IMAGE_NUMBEROF_DIRECTORY_ENTRIES)
+	_bfd_error_handler (_("%pB: invalid NumberOfRvaAndSizes"), abfd);
+    }
 
   result = coff_real_object_p (abfd, internal_f.f_nscns, &internal_f,
 			       (opt_hdr_size != 0
 				? &internal_a
 				: (struct internal_aouthdr *) NULL));
 
-
   if (result)
     {
       /* Now the whole header has been processed, see if there is a build-id */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-i386.c ./bfd/pei-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-i386.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pei-i386.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel 386 PE IMAGE COFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -25,7 +25,7 @@
 #define TARGET_NAME		"pei-i386"
 #define COFF_IMAGE_WITH_PE
 #define COFF_WITH_PE
-#define PCRELOFFSET		TRUE
+#define PCRELOFFSET		true
 #define TARGET_UNDERSCORE	'_'
 /* Long section names not allowed in executable images, only object files.  */
 #define COFF_LONG_SECTION_NAMES 0
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-ia64.c ./bfd/pei-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-ia64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pei-ia64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for HP/Intel IA-64 PE IMAGE COFF files.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by David Mosberger <davidm@hpl.hp.com>
 
    This implementation only supports objcopy to ouput IA-64 PE IMAGE COFF
@@ -30,7 +30,7 @@
 #define COFF_IMAGE_WITH_PE
 #define COFF_WITH_PE
 #define COFF_WITH_pep
-#define PCRELOFFSET TRUE
+#define PCRELOFFSET true
 #define TARGET_UNDERSCORE '_'
 /* Long section names not allowed in executable images, only object files.  */
 #define COFF_LONG_SECTION_NAMES 0
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-loongarch64.c ./bfd/pei-loongarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-loongarch64.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/pei-loongarch64.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,74 @@
+/* BFD back-end for LoongArch64 PE IMAGE COFF files.
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+
+#define TARGET_SYM		loongarch64_pei_vec
+#define TARGET_NAME		"pei-loongarch64"
+#define TARGET_ARCHITECTURE	bfd_arch_loongarch
+#define TARGET_PAGESIZE		0x4000
+#define TARGET_BIG_ENDIAN	0
+#define TARGET_ARCHIVE		0
+#define TARGET_PRIORITY		0
+
+#define COFF_IMAGE_WITH_PE
+/* Rename the above into...  */
+#define COFF_WITH_peLoongArch64
+#define COFF_WITH_PE
+#define PCRELOFFSET	   true
+
+/* Long section names not allowed in executable images, only object files.  */
+#define COFF_LONG_SECTION_NAMES 0
+
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "coff/loongarch64.h"
+#include "coff/internal.h"
+#include "coff/pe.h"
+#include "libcoff.h"
+#include "libpei.h"
+#include "libiberty.h"
+
+/* Make sure we're setting a 64-bit format.  */
+#undef AOUTSZ
+#define AOUTSZ          PEPAOUTSZ
+#define PEAOUTHDR       PEPAOUTHDR
+
+#include "coff-loongarch64.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-mcore.c ./bfd/pei-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-mcore.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pei-mcore.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for MCore PECOFF files.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -30,7 +30,7 @@
 
 #define COFF_IMAGE_WITH_PE
 #define COFF_WITH_PE
-#define PCRELOFFSET	   TRUE
+#define PCRELOFFSET	   true
 /* Long section names not allowed in executable images, only object files.  */
 #define COFF_LONG_SECTION_NAMES 0
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-ppc.c ./bfd/pei-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-ppc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pei-ppc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,50 +0,0 @@
-/* BFD back-end for PowerPC PE IMAGE COFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, 51 Franklin Street - Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-
-/* setting up for a PE environment stolen directly from the i386 structure */
-#define E_FILNMLEN	18	/* # characters in a file name		*/
-
-#define PPC_PE
-
-#define TARGET_LITTLE_SYM   powerpc_pei_le_vec
-#define TARGET_LITTLE_NAME "pei-powerpcle"
-
-#define TARGET_BIG_SYM      powerpc_pei_vec
-#define TARGET_BIG_NAME    "pei-powerpc"
-
-#define COFF_IMAGE_WITH_PE
-#define COFF_WITH_PE
-
-/* Long section names not allowed in executable images, only object files.  */
-#define COFF_LONG_SECTION_NAMES 0
-
-/* FIXME: Verify PCRELOFFSET is always false */
-
-/* FIXME: This target no longer works.  Search for POWERPC_LE_PE in
-   coff-ppc.c and peigen.c.  */
-
-#ifndef bfd_pe_print_pdata
-#define bfd_pe_print_pdata	NULL
-#endif
-
-#include "coff-ppc.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-riscv64.c ./bfd/pei-riscv64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-riscv64.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/pei-riscv64.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,74 @@
+/* BFD back-end for RISC-V 64-bit PE IMAGE COFF files.
+   Copyright (C) 2023-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+
+#define TARGET_SYM		riscv64_pei_vec
+#define TARGET_NAME		"pei-riscv64-little"
+#define TARGET_ARCHITECTURE	bfd_arch_riscv
+#define TARGET_PAGESIZE		0x4000
+#define TARGET_BIG_ENDIAN	0
+#define TARGET_ARCHIVE		0
+#define TARGET_PRIORITY		0
+
+#define COFF_IMAGE_WITH_PE
+/* Rename the above into...  */
+#define COFF_WITH_peRiscV64
+#define COFF_WITH_PE
+#define PCRELOFFSET	   true
+
+/* Long section names not allowed in executable images, only object files.  */
+#define COFF_LONG_SECTION_NAMES 0
+
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "coff/riscv64.h"
+#include "coff/internal.h"
+#include "coff/pe.h"
+#include "libcoff.h"
+#include "libpei.h"
+#include "libiberty.h"
+
+/* Make sure we're setting a 64-bit format.  */
+#undef AOUTSZ
+#define AOUTSZ          PEPAOUTSZ
+#define PEAOUTHDR       PEPAOUTHDR
+
+#include "coff-riscv64.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-sh.c ./bfd/pei-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-sh.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pei-sh.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for SH PE IMAGE COFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -26,7 +26,7 @@
 #define IMAGE_BASE NT_IMAGE_BASE
 #define COFF_IMAGE_WITH_PE
 #define COFF_WITH_PE
-#define PCRELOFFSET TRUE
+#define PCRELOFFSET true
 #define TARGET_UNDERSCORE '_'
 /* Long section names not allowed in executable images, only object files.  */
 #define COFF_LONG_SECTION_NAMES 0
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-x86_64.c ./bfd/pei-x86_64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pei-x86_64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pei-x86_64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel 386 PE IMAGE COFF files.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -28,7 +28,7 @@
 #define COFF_IMAGE_WITH_PE
 #define COFF_WITH_PE
 #define COFF_WITH_pex64
-#define PCRELOFFSET		TRUE
+#define PCRELOFFSET		true
 #if defined (USE_MINGW64_LEADING_UNDERSCORES)
 #define TARGET_UNDERSCORE	'_'
 #else
@@ -58,10 +58,6 @@
 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
 
-/* Note we have to make sure not to include headers twice.
-   Not all headers are wrapped in #ifdef guards, so we define
-   PEI_HEADERS to prevent double including in coff-x86_64.c  */
-#define PEI_HEADERS
 #include "sysdep.h"
 #include "bfd.h"
 #include "libbfd.h"
@@ -98,7 +94,7 @@ pex64_get_runtime_function (bfd *abfd, s
 
 /* Swap in unwind info header.  */
 
-static bfd_boolean
+static bool
 pex64_get_unwind_info (bfd *abfd, struct pex64_unwind_info *ui,
 		       void *data, void *data_end)
 {
@@ -109,8 +105,8 @@ pex64_get_unwind_info (bfd *abfd, struct
 
   memset (ui, 0, sizeof (struct pex64_unwind_info));
 
-  if (ex_dta >= ex_dta_end || ex_dta + 4 >= ex_dta_end)
-    return FALSE;
+  if (ex_dta_end - ex_dta < 4)
+    return false;
 
   ui->Version = PEX64_UWI_VERSION (ex_ui->Version_Flags);
   ui->Flags = PEX64_UWI_FLAGS (ex_ui->Version_Flags);
@@ -123,30 +119,30 @@ pex64_get_unwind_info (bfd *abfd, struct
   ui->rawUnwindCodes = ex_dta + 4;
   ui->rawUnwindCodesEnd = ex_dta_end;
 
+  if ((size_t) (ex_dta_end - ex_dta) < ui->SizeOfBlock)
+    return false;
   ex_dta += ui->SizeOfBlock;
-  if (ex_dta >= ex_dta_end)
-    return FALSE;
 
   switch (ui->Flags)
     {
     case UNW_FLAG_CHAININFO:
-      if (ex_dta + 12 >= ex_dta_end)
-	return FALSE;
+      if (ex_dta_end - ex_dta < 12)
+	return false;
       ui->rva_BeginAddress = bfd_get_32 (abfd, ex_dta + 0);
       ui->rva_EndAddress = bfd_get_32 (abfd, ex_dta + 4);
       ui->rva_UnwindData = bfd_get_32 (abfd, ex_dta + 8);
       ui->SizeOfBlock += 12;
-      return TRUE;
+      return true;
     case UNW_FLAG_EHANDLER:
     case UNW_FLAG_UHANDLER:
     case UNW_FLAG_FHANDLER:
-      if (ex_dta + 4 >= ex_dta_end)
-	return FALSE;
+      if (ex_dta_end - ex_dta < 4)
+	return false;
       ui->rva_ExceptionHandler = bfd_get_32 (abfd, ex_dta);
       ui->SizeOfBlock += 4;
-      return TRUE;
+      return true;
     default:
-      return TRUE;
+      return true;
     }
 }
 
@@ -168,11 +164,12 @@ pex64_xdata_print_uwd_codes (FILE *file,
       If an FP reg is used, the any unwind code taking an offset must only be
       used after the FP reg is established in the prolog.
      But there are counter examples of that in system dlls...  */
-  save_allowed = TRUE;
+  save_allowed = true;
 
   i = 0;
 
-  if (ui->rawUnwindCodes + 1 >= ui->rawUnwindCodesEnd)
+  if ((size_t) (ui->rawUnwindCodesEnd - ui->rawUnwindCodes)
+      < ui->CountOfCodes * 2)
     {
       fprintf (file, _("warning: corrupt unwind data\n"));
       return;
@@ -186,12 +183,6 @@ pex64_xdata_print_uwd_codes (FILE *file,
 	 to decode instruction flow if outside an epilog.  */
       unsigned int func_size = rf->rva_EndAddress - rf->rva_BeginAddress;
 
-      if (ui->rawUnwindCodes + 1 + (ui->CountOfCodes * 2) >= ui->rawUnwindCodesEnd)
-	{
-	  fprintf (file, _("warning: corrupt unwind data\n"));
-	  return;
-	}
-
       fprintf (file, "\tv2 epilog (length: %02x) at pc+:",
 	       ui->rawUnwindCodes[0]);
 
@@ -215,17 +206,11 @@ pex64_xdata_print_uwd_codes (FILE *file,
       fputc ('\n', file);
     }
 
-  if (ui->rawUnwindCodes + 2 + (ui->CountOfCodes * 2) >= ui->rawUnwindCodesEnd)
-    {
-      fprintf (file, _("warning: corrupt unwind data\n"));
-      return;
-    }
-
   for (; i < ui->CountOfCodes; i++)
     {
       const bfd_byte *dta = ui->rawUnwindCodes + 2 * i;
       unsigned int info = PEX64_UNWCODE_INFO (dta[1]);
-      int unexpected = FALSE;
+      int unexpected = false;
 
       fprintf (file, "\t  pc+0x%02x: ", (unsigned int) dta[0]);
 
@@ -238,7 +223,7 @@ pex64_xdata_print_uwd_codes (FILE *file,
 	case UWOP_ALLOC_LARGE:
 	  if (info == 0)
 	    {
-	      if (dta + 4 > ui->rawUnwindCodesEnd)
+	      if (ui->rawUnwindCodesEnd - dta < 4)
 		{
 		  fprintf (file, _("warning: corrupt unwind data\n"));
 		  return;
@@ -248,7 +233,7 @@ pex64_xdata_print_uwd_codes (FILE *file,
 	    }
 	  else
 	    {
-	      if (dta + 6 > ui->rawUnwindCodesEnd)
+	      if (ui->rawUnwindCodesEnd - dta < 6)
 		{
 		  fprintf (file, _("warning: corrupt unwind data\n"));
 		  return;
@@ -269,11 +254,11 @@ pex64_xdata_print_uwd_codes (FILE *file,
 		   pex_regs[ui->FrameRegister],
 		   (unsigned int) ui->FrameOffset * 16, info);
 	  unexpected = ui->FrameRegister == 0;
-	  save_allowed = FALSE;
+	  save_allowed = false;
 	  break;
 
 	case UWOP_SAVE_NONVOL:
-	  if (dta + 4 > ui->rawUnwindCodesEnd)
+	  if (ui->rawUnwindCodesEnd - dta < 4)
 	    {
 	      fprintf (file, _("warning: corrupt unwind data\n"));
 	      return;
@@ -285,7 +270,7 @@ pex64_xdata_print_uwd_codes (FILE *file,
 	  break;
 
 	case UWOP_SAVE_NONVOL_FAR:
-	  if (dta + 6 > ui->rawUnwindCodesEnd)
+	  if (ui->rawUnwindCodesEnd - dta < 6)
 	    {
 	      fprintf (file, _("warning: corrupt unwind data\n"));
 	      return;
@@ -299,7 +284,7 @@ pex64_xdata_print_uwd_codes (FILE *file,
 	case UWOP_SAVE_XMM:
 	  if (ui->Version == 1)
 	    {
-	      if (dta + 4 > ui->rawUnwindCodesEnd)
+	      if (ui->rawUnwindCodesEnd - dta < 4)
 		{
 		  fprintf (file, _("warning: corrupt unwind data\n"));
 		  return;
@@ -312,12 +297,12 @@ pex64_xdata_print_uwd_codes (FILE *file,
 	  else if (ui->Version == 2)
 	    {
 	      fprintf (file, "epilog %02x %01x", dta[0], info);
-	      unexpected = TRUE;
+	      unexpected = true;
 	    }
 	  break;
 
 	case UWOP_SAVE_XMM_FAR:
-	  if (dta + 6 > ui->rawUnwindCodesEnd)
+	  if (ui->rawUnwindCodesEnd - dta < 6)
 	    {
 	      fprintf (file, _("warning: corrupt unwind data\n"));
 	      return;
@@ -329,7 +314,7 @@ pex64_xdata_print_uwd_codes (FILE *file,
 	  break;
 
 	case UWOP_SAVE_XMM128:
-	  if (dta + 4 > ui->rawUnwindCodesEnd)
+	  if (ui->rawUnwindCodesEnd - dta < 4)
 	    {
 	      fprintf (file, _("warning: corrupt unwind data\n"));
 	      return;
@@ -341,7 +326,7 @@ pex64_xdata_print_uwd_codes (FILE *file,
 	  break;
 
 	case UWOP_SAVE_XMM128_FAR:
-	  if (dta + 6 > ui->rawUnwindCodesEnd)
+	  if (ui->rawUnwindCodesEnd - dta < 6)
 	    {
 	      fprintf (file, _("warning: corrupt unwind data\n"));
 	      return;
@@ -498,19 +483,14 @@ pex64_dump_xdata (FILE *file, bfd *abfd,
     case UNW_FLAG_EHANDLER:
     case UNW_FLAG_UHANDLER:
     case UNW_FLAG_FHANDLER:
-      fprintf (file, "\tHandler: ");
-      fprintf_vma (file, (ui.rva_ExceptionHandler
-			  + pe_data (abfd)->pe_opthdr.ImageBase));
-      fprintf (file, ".\n");
+      fprintf (file, "\tHandler: %016" PRIx64 ".\n",
+	       ui.rva_ExceptionHandler + pe_data (abfd)->pe_opthdr.ImageBase);
       break;
     case UNW_FLAG_CHAININFO:
-      fprintf (file, "\tChain: start: ");
-      fprintf_vma (file, ui.rva_BeginAddress);
-      fprintf (file, ", end: ");
-      fprintf_vma (file, ui.rva_EndAddress);
-      fprintf (file, "\n\t unwind data: ");
-      fprintf_vma (file, ui.rva_UnwindData);
-      fprintf (file, ".\n");
+      fprintf (file, "\tChain: start: %016" PRIx64 ", end: %016" PRIx64,
+	       ui.rva_BeginAddress, ui.rva_EndAddress);
+      fprintf (file, "\n\t unwind data: %016" PRIx64 ".\n",
+	       ui.rva_UnwindData);
       break;
     }
 
@@ -549,7 +529,7 @@ sort_xdata_arr (const void *l, const voi
 
 /* Display unwind tables for x86-64.  */
 
-static bfd_boolean
+static bool
 pex64_bfd_print_pdata_section (bfd *abfd, void *vfile, asection *pdata_section)
 {
   FILE *file = (FILE *) vfile;
@@ -567,13 +547,14 @@ pex64_bfd_print_pdata_section (bfd *abfd
   int seen_error = 0;
   bfd_vma *xdata_arr = NULL;
   int xdata_arr_cnt;
-  bfd_boolean virt_size_is_zero = FALSE;
+  bool virt_size_is_zero = false;
 
   /* Sanity checks.  */
   if (pdata_section == NULL
+      || (pdata_section->flags & SEC_HAS_CONTENTS) == 0
       || coff_section_data (abfd, pdata_section) == NULL
       || pei_section_data (abfd, pdata_section) == NULL)
-    return TRUE;
+    return true;
 
   stop = pei_section_data (abfd, pdata_section)->virt_size;
   if ((stop % onaline) != 0)
@@ -588,14 +569,14 @@ pex64_bfd_print_pdata_section (bfd *abfd
       if (stop)
 	fprintf (file, _("Warning: %s section size is zero\n"),
 		 pdata_section->name);
-      return TRUE;
+      return true;
     }
 
   /* virt_size might be zero for objects.  */
   if (stop == 0 && strcmp (abfd->xvec->name, "pe-x86-64") == 0)
     {
       stop = datasize;
-      virt_size_is_zero = TRUE;
+      virt_size_is_zero = true;
     }
   else if (datasize < stop)
       {
@@ -640,15 +621,10 @@ pex64_bfd_print_pdata_section (bfd *abfd
 	  && rf.rva_UnwindData == 0)
 	/* We are probably into the padding of the section now.  */
 	break;
-      fputc (' ', file);
-      fprintf_vma (file, i + pdata_section->vma);
-      fprintf (file, ":\t");
-      fprintf_vma (file, imagebase + rf.rva_BeginAddress);
-      fprintf (file, " ");
-      fprintf_vma (file, imagebase + rf.rva_EndAddress);
-      fprintf (file, " ");
-      fprintf_vma (file, imagebase + rf.rva_UnwindData);
-      fprintf (file, "\n");
+      fprintf (file, " %016" PRIx64, i + pdata_section->vma);
+      fprintf (file, ":\t%016" PRIx64, imagebase + rf.rva_BeginAddress);
+      fprintf (file, " %016" PRIx64, imagebase + rf.rva_EndAddress);
+      fprintf (file, " %016" PRIx64 "\n", imagebase + rf.rva_UnwindData);
       if (i != 0 && rf.rva_BeginAddress <= prev_beginaddress)
 	{
 	  seen_error = 1;
@@ -720,6 +696,7 @@ pex64_bfd_print_pdata_section (bfd *abfd
     xdata_section = pex64_get_section_by_rva (abfd, xdata_base, ".text");
   /* Transfer xdata section into xdata array.  */
   if (!xdata_section
+      || (xdata_section->flags & SEC_HAS_CONTENTS) == 0
       || !bfd_malloc_and_get_section (abfd, xdata_section, &xdata))
     goto done;
 
@@ -744,26 +721,22 @@ pex64_bfd_print_pdata_section (bfd *abfd
       if (i == 0)
 	fprintf (file, _("\nDump of %s\n"), xdata_section->name);
 
-      fputc (' ', file);
-      fprintf_vma (file, rf.rva_UnwindData + imagebase);
+      fprintf (file, " %016" PRIx64, rf.rva_UnwindData + imagebase);
 
       if (prev_unwinddata_rva == rf.rva_UnwindData)
 	{
 	  /* Do not dump again the xdata for the same entry.  */
-	  fprintf (file, " also used for function at ");
-	  fprintf_vma (file, rf.rva_BeginAddress + imagebase);
-	  fputc ('\n', file);
+	  fprintf (file, " also used for function at %016" PRIx64 "\n",
+		   rf.rva_BeginAddress + imagebase);
 	  continue;
 	}
       else
 	prev_unwinddata_rva = rf.rva_UnwindData;
 
-      fprintf (file, " (rva: %08x): ",
-	       (unsigned int) rf.rva_UnwindData);
-      fprintf_vma (file, rf.rva_BeginAddress + imagebase);
-      fprintf (file, " - ");
-      fprintf_vma (file, rf.rva_EndAddress + imagebase);
-      fputc ('\n', file);
+      fprintf (file, " (rva: %08x): %016" PRIx64 " - %016" PRIx64 "\n",
+	       (unsigned int) rf.rva_UnwindData,
+	       rf.rva_BeginAddress + imagebase,
+	       rf.rva_EndAddress + imagebase);
 
       if (rf.rva_UnwindData != 0 || virt_size_is_zero)
 	{
@@ -781,8 +754,8 @@ pex64_bfd_print_pdata_section (bfd *abfd
 		{
 		  pex64_get_runtime_function
 		    (abfd, &arf, &pdata[altent - pdata_vma]);
-		  fprintf (file, "pdata element at 0x");
-		  fprintf_vma (file, arf.rva_UnwindData);
+		  fprintf (file, "pdata element at 0x%016" PRIx64,
+			   arf.rva_UnwindData);
 		}
 	      else
 		fprintf (file, "unknown pdata element");
@@ -817,37 +790,44 @@ pex64_bfd_print_pdata_section (bfd *abfd
   free (xdata_arr);
   free (xdata);
 
-  return TRUE;
+  return true;
 }
 
-/* Static counter of number of found pdata sections.  */
-static bfd_boolean pdata_count;
+struct pex64_paps
+{
+  void *obj;
+  /* Number of found pdata sections.  */
+  unsigned int pdata_count;
+};
 
 /* Functionn prototype.  */
-bfd_boolean pex64_bfd_print_pdata (bfd *, void *);
+bool pex64_bfd_print_pdata (bfd *, void *);
 
 /* Helper function for bfd_map_over_section.  */
 static void
-pex64_print_all_pdata_sections (bfd *abfd, asection *pdata, void *obj)
+pex64_print_all_pdata_sections (bfd *abfd, asection *pdata, void *arg)
 {
-  if (CONST_STRNEQ (pdata->name, ".pdata"))
+  struct pex64_paps *paps = arg;
+  if (startswith (pdata->name, ".pdata"))
     {
-      if (pex64_bfd_print_pdata_section (abfd, obj, pdata))
-	pdata_count++;
+      if (pex64_bfd_print_pdata_section (abfd, paps->obj, pdata))
+	paps->pdata_count++;
     }
 }
 
-bfd_boolean
+bool
 pex64_bfd_print_pdata (bfd *abfd, void *vfile)
 {
   asection *pdata_section = bfd_get_section_by_name (abfd, ".pdata");
+  struct pex64_paps paps;
 
   if (pdata_section)
     return pex64_bfd_print_pdata_section (abfd, vfile, pdata_section);
 
-  pdata_count = 0;
-  bfd_map_over_sections (abfd, pex64_print_all_pdata_sections, vfile);
-  return (pdata_count > 0);
+  paps.obj = vfile;
+  paps.pdata_count = 0;
+  bfd_map_over_sections (abfd, pex64_print_all_pdata_sections, &paps);
+  return paps.pdata_count != 0;
 }
 
 #define bfd_pe_print_pdata   pex64_bfd_print_pdata
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-mcore.c ./bfd/pe-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-mcore.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pe-mcore.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for MCore PECOFF files.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,7 +29,7 @@
 #endif
 
 #define COFF_WITH_PE
-#define PCRELOFFSET	     TRUE
+#define PCRELOFFSET		true
 #define COFF_LONG_SECTION_NAMES
 
 #define MCORE_PE
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-ppc.c ./bfd/pe-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-ppc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pe-ppc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,47 +0,0 @@
-/* BFD back-end for PowerPC PECOFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, 51 Franklin Street - Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-
-#define E_FILENMLEN     18
-
-#define PPC_PE
-
-#define TARGET_LITTLE_SYM   powerpc_pe_le_vec
-#define TARGET_LITTLE_NAME "pe-powerpcle"
-
-#define TARGET_BIG_SYM      powerpc_pe_vec
-#define TARGET_BIG_NAME    "pe-powerpc"
-
-#define COFF_WITH_PE
-
-#define COFF_LONG_SECTION_NAMES
-
-/* FIXME: verify PCRELOFFSET is always false */
-
-/* FIXME: This target no longer works.  Search for POWERPC_LE_PE in
-   coff-ppc.c and peigen.c.  */
-
-#ifndef bfd_pe_print_pdata
-#define bfd_pe_print_pdata	NULL
-#endif
-
-#include "coff-ppc.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-sh.c ./bfd/pe-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-sh.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pe-sh.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for SH PECOFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -24,7 +24,7 @@
 #define TARGET_SHL_SYM sh_pe_le_vec
 #define TARGET_SHL_NAME "pe-shl"
 #define COFF_WITH_PE
-#define PCRELOFFSET TRUE
+#define PCRELOFFSET true
 #define TARGET_UNDERSCORE '_'
 #define COFF_LONG_SECTION_NAMES
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-x86_64.c ./bfd/pe-x86_64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/pe-x86_64.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/pe-x86_64.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel/AMD x86_64 PECOFF files.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,13 +22,21 @@
 
 #include "sysdep.h"
 #include "bfd.h"
+#include "libbfd.h"
+#include "libiberty.h"
+#include "coff/x86_64.h"
+#include "coff/internal.h"
+#include "coff/pe.h"
+#include "libcoff.h"
 
 #define TARGET_SYM		x86_64_pe_vec
 #define TARGET_NAME		"pe-x86-64"
+#define TARGET_SYM_BIG		x86_64_pe_big_vec
+#define TARGET_NAME_BIG		"pe-bigobj-x86-64"
 #define COFF_WITH_PE
 #define COFF_WITH_pex64
 #define COFF_WITH_PE_BIGOBJ
-#define PCRELOFFSET		TRUE
+#define PCRELOFFSET		true
 #if defined (USE_MINGW64_LEADING_UNDERSCORES)
 #define TARGET_UNDERSCORE	'_'
 #else
@@ -60,73 +68,37 @@
 
 /* The function pex64_bfd_print_pdata is implemented in pei-x86_64.c
    source, but has be extended to also handle pe objects.  */
-extern bfd_boolean pex64_bfd_print_pdata (bfd *, void *);
+extern bool pex64_bfd_print_pdata (bfd *, void *);
 
 #define bfd_pe_print_pdata   pex64_bfd_print_pdata
 
-#include "coff-x86_64.c"
-
-/* Entry for big object files.  */
-
-const bfd_target
-x86_64_pe_be_vec =
+static bool
+pex64_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
-  "pe-bigobj-x86-64",			/* Name.  */
-  bfd_target_coff_flavour,
-  BFD_ENDIAN_LITTLE,		/* Data byte order is little.  */
-  BFD_ENDIAN_LITTLE,		/* Header byte order is little.  */
-
-  (HAS_RELOC | EXEC_P		/* Object flags.  */
-   | HAS_LINENO | HAS_DEBUG
-   | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
-
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags.  */
-   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
-   | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
-
-  TARGET_UNDERSCORE,		/* Leading underscore.  */
-  '/',				/* Ar_pad_char.  */
-  15,				/* Ar_max_namelen.  */
-  0,				/* match priority.  */
-
-  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
-     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
-     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data.  */
-  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
-     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
-     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs.  */
-
-  /* Note that we allow an object file to be treated as a core file as well.  */
-  {				/* bfd_check_format.  */
-    _bfd_dummy_target,
-    amd64coff_object_p,
-    bfd_generic_archive_p,
-    amd64coff_object_p
-  },
-  {				/* bfd_set_format.  */
-    _bfd_bool_bfd_false_error,
-    coff_mkobject,
-    _bfd_generic_mkarchive,
-    _bfd_bool_bfd_false_error
-  },
-  {				/* bfd_write_contents.  */
-    _bfd_bool_bfd_false_error,
-    coff_write_object_contents,
-    _bfd_write_archive_contents,
-    _bfd_bool_bfd_false_error
-  },
-
-  BFD_JUMP_TABLE_GENERIC (coff),
-  BFD_JUMP_TABLE_COPY (coff),
-  BFD_JUMP_TABLE_CORE (_bfd_nocore),
-  BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
-  BFD_JUMP_TABLE_SYMBOLS (coff),
-  BFD_JUMP_TABLE_RELOCS (coff),
-  BFD_JUMP_TABLE_WRITE (coff),
-  BFD_JUMP_TABLE_LINK (coff),
-  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+  if (bfd_link_pde (info)
+      && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour)
+    {
+      /* NB: When linking Windows x86-64 relocatable object files to
+	 generate ELF executable, create an indirect reference to
+	 __executable_start for __ImageBase to support R_AMD64_IMAGEBASE
+	 relocation which is relative to __ImageBase.  */
+      struct bfd_link_hash_entry *h, *hi;
+      hi = bfd_link_hash_lookup (info->hash, "__ImageBase", true, false,
+				 false);
+      if (hi->type == bfd_link_hash_new
+	  || hi->type == bfd_link_hash_undefined
+	  || hi->type == bfd_link_hash_undefweak)
+	{
+	  h = bfd_link_hash_lookup (info->hash, "__executable_start",
+				    true, false, true);
+	  hi->type = bfd_link_hash_indirect;
+	  hi->u.i.link = h;
+	}
+    }
 
-  NULL,
+  return _bfd_coff_link_add_symbols (abfd, info);
+}
 
-  &bigobj_swap_table
-};
+#define coff_bfd_link_add_symbols pex64_link_add_symbols
+
+#include "coff-x86_64.c"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/peXXigen.c ./bfd/peXXigen.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/peXXigen.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/peXXigen.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for the generic parts of PE/PEI; the common executable parts.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -60,7 +60,8 @@
    on this code has a chance of getting something accomplished without
    wasting too much time.  */
 
-/* This expands into COFF_WITH_pe, COFF_WITH_pep, or COFF_WITH_pex64
+/* This expands into COFF_WITH_pe, COFF_WITH_pep, COFF_WITH_pex64,
+   COFF_WITH_peAArch64 or COFF_WITH_peLoongArch64 or COFF_WITH_peRiscV64
    depending on whether we're compiling for straight PE or PE+.  */
 #define COFF_WITH_XX
 
@@ -70,12 +71,8 @@
 #include "coff/internal.h"
 #include "bfdver.h"
 #include "libiberty.h"
-#ifdef HAVE_WCHAR_H
 #include <wchar.h>
-#endif
-#ifdef HAVE_WCTYPE_H
 #include <wctype.h>
-#endif
 
 /* NOTE: it's strange to be including an architecture specific header
    in what's supposed to be general (to PE/PEI) code.  However, that's
@@ -87,6 +84,12 @@
 # include "coff/x86_64.h"
 #elif defined COFF_WITH_pep
 # include "coff/ia64.h"
+#elif defined COFF_WITH_peAArch64
+# include "coff/aarch64.h"
+#elif defined COFF_WITH_peLoongArch64
+# include "coff/loongarch64.h"
+#elif defined COFF_WITH_peRiscV64
+# include "coff/riscv64.h"
 #else
 # include "coff/i386.h"
 #endif
@@ -96,7 +99,7 @@
 #include "libpei.h"
 #include "safe-ctype.h"
 
-#if defined COFF_WITH_pep || defined COFF_WITH_pex64
+#if defined COFF_WITH_pep || defined COFF_WITH_pex64 || defined COFF_WITH_peAArch64 || defined COFF_WITH_peLoongArch64 || defined COFF_WITH_peRiscV64
 # undef AOUTSZ
 # define AOUTSZ		PEPAOUTSZ
 # define PEAOUTHDR	PEPAOUTHDR
@@ -105,12 +108,6 @@
 #define HighBitSet(val)      ((val) & 0x80000000)
 #define SetHighBit(val)      ((val) | 0x80000000)
 #define WithoutHighBit(val)  ((val) & 0x7fffffff)
-
-/* FIXME: This file has various tests of POWERPC_LE_PE.  Those tests
-   worked when the code was in peicode.h, but no longer work now that
-   the code is in peigen.c.  PowerPC NT is said to be dead.  If
-   anybody wants to revive the code, you will have to figure out how
-   to handle those issues.  */
 
 void
 _bfd_XXi_swap_sym_in (bfd * abfd, void * ext1, void * in1)
@@ -177,25 +174,26 @@ _bfd_XXi_swap_sym_in (bfd * abfd, void *
 	  int unused_section_number = 0;
 	  asection *sec;
 	  flagword flags;
+	  size_t name_len;
+	  char *sec_name;
 
 	  for (sec = abfd->sections; sec; sec = sec->next)
 	    if (unused_section_number <= sec->target_index)
 	      unused_section_number = sec->target_index + 1;
 
-	  if (name == namebuf)
+	  name_len = strlen (name) + 1;
+	  sec_name = bfd_alloc (abfd, name_len);
+	  if (sec_name == NULL)
 	    {
-	      name = (const char *) bfd_alloc (abfd, strlen (namebuf) + 1);
-	      if (name == NULL)
-		{
-		  _bfd_error_handler (_("%pB: out of memory creating name for empty section"),
-				      abfd);
-		  return;
-		}
-	      strcpy ((char *) name, namebuf);
+	      _bfd_error_handler (_("%pB: out of memory creating name "
+				    "for empty section"), abfd);
+	      return;
 	    }
+	  memcpy (sec_name, name, name_len);
 
-	  flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_DATA | SEC_LOAD;
-	  sec = bfd_make_section_anyway_with_flags (abfd, name, flags);
+	  flags = (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_DATA | SEC_LOAD
+		   | SEC_LINKER_CREATED);
+	  sec = bfd_make_section_anyway_with_flags (abfd, sec_name, flags);
 	  if (sec == NULL)
 	    {
 	      _bfd_error_handler (_("%pB: unable to create fake empty section"),
@@ -203,18 +201,7 @@ _bfd_XXi_swap_sym_in (bfd * abfd, void *
 	      return;
 	    }
 
-	  sec->vma = 0;
-	  sec->lma = 0;
-	  sec->size = 0;
-	  sec->filepos = 0;
-	  sec->rel_filepos = 0;
-	  sec->reloc_count = 0;
-	  sec->line_filepos = 0;
-	  sec->lineno_count = 0;
-	  sec->userdata = NULL;
-	  sec->next = NULL;
 	  sec->alignment_power = 2;
-
 	  sec->target_index = unused_section_number;
 
 	  in->n_scnum = unused_section_number;
@@ -222,15 +209,9 @@ _bfd_XXi_swap_sym_in (bfd * abfd, void *
       in->n_sclass = C_STAT;
     }
 #endif
-
-#ifdef coff_swap_sym_in_hook
-  /* This won't work in peigen.c, but since it's for PPC PE, it's not
-     worth fixing.  */
-  coff_swap_sym_in_hook (abfd, ext1, in1);
-#endif
 }
 
-static bfd_boolean
+static bool
 abs_finder (bfd * abfd ATTRIBUTE_UNUSED, asection * sec, void * data)
 {
   bfd_vma abs_val = * (bfd_vma *) data;
@@ -314,11 +295,11 @@ _bfd_XXi_swap_aux_in (bfd *	abfd,
     case C_FILE:
       if (ext->x_file.x_fname[0] == 0)
 	{
-	  in->x_file.x_n.x_zeroes = 0;
-	  in->x_file.x_n.x_offset = H_GET_32 (abfd, ext->x_file.x_n.x_offset);
+	  in->x_file.x_n.x_n.x_zeroes = 0;
+	  in->x_file.x_n.x_n.x_offset = H_GET_32 (abfd, ext->x_file.x_n.x_offset);
 	}
       else
-	memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
+	memcpy (in->x_file.x_n.x_fname, ext->x_file.x_fname, FILNMLEN);
       return;
 
     case C_STAT:
@@ -337,14 +318,14 @@ _bfd_XXi_swap_aux_in (bfd *	abfd,
       break;
     }
 
-  in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->x_sym.x_tagndx);
+  in->x_sym.x_tagndx.u32 = H_GET_32 (abfd, ext->x_sym.x_tagndx);
   in->x_sym.x_tvndx = H_GET_16 (abfd, ext->x_sym.x_tvndx);
 
   if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
       || ISTAG (in_class))
     {
       in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR (abfd, ext);
-      in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX (abfd, ext);
+      in->x_sym.x_fcnary.x_fcn.x_endndx.u32 = GET_FCN_ENDNDX (abfd, ext);
     }
   else
     {
@@ -386,13 +367,13 @@ _bfd_XXi_swap_aux_out (bfd *  abfd,
   switch (in_class)
     {
     case C_FILE:
-      if (in->x_file.x_fname[0] == 0)
+      if (in->x_file.x_n.x_fname[0] == 0)
 	{
 	  H_PUT_32 (abfd, 0, ext->x_file.x_n.x_zeroes);
-	  H_PUT_32 (abfd, in->x_file.x_n.x_offset, ext->x_file.x_n.x_offset);
+	  H_PUT_32 (abfd, in->x_file.x_n.x_n.x_offset, ext->x_file.x_n.x_offset);
 	}
       else
-	memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
+	memcpy (ext->x_file.x_fname, in->x_file.x_n.x_fname, sizeof (ext->x_file.x_fname));
 
       return AUXESZ;
 
@@ -412,14 +393,14 @@ _bfd_XXi_swap_aux_out (bfd *  abfd,
       break;
     }
 
-  H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->x_sym.x_tagndx);
+  H_PUT_32 (abfd, in->x_sym.x_tagndx.u32, ext->x_sym.x_tagndx);
   H_PUT_16 (abfd, in->x_sym.x_tvndx, ext->x_sym.x_tvndx);
 
   if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
       || ISTAG (in_class))
     {
       PUT_FCN_LNNOPTR (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr,  ext);
-      PUT_FCN_ENDNDX  (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext);
+      PUT_FCN_ENDNDX  (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.u32, ext);
     }
   else
     {
@@ -485,7 +466,7 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
   aouthdr_int->text_start =
     GET_AOUTHDR_TEXT_START (abfd, aouthdr_ext->text_start);
 
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
   /* PE32+ does not have data_start member!  */
   aouthdr_int->data_start =
     GET_AOUTHDR_DATA_START (abfd, aouthdr_ext->data_start);
@@ -528,50 +509,31 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
   a->LoaderFlags = H_GET_32 (abfd, src->LoaderFlags);
   a->NumberOfRvaAndSizes = H_GET_32 (abfd, src->NumberOfRvaAndSizes);
 
-  {
-    unsigned idx;
-
-    /* PR 17512: Corrupt PE binaries can cause seg-faults.  */
-    if (a->NumberOfRvaAndSizes > IMAGE_NUMBEROF_DIRECTORY_ENTRIES)
-      {
-	/* xgettext:c-format */
-	_bfd_error_handler
-	  (_("%pB: aout header specifies an invalid number of"
-	     " data-directory entries: %u"), abfd, a->NumberOfRvaAndSizes);
-	bfd_set_error (bfd_error_bad_value);
-
-	/* Paranoia: If the number is corrupt, then assume that the
-	   actual entries themselves might be corrupt as well.  */
-	a->NumberOfRvaAndSizes = 0;
-      }
+  /* PR 17512: Don't blindly trust NumberOfRvaAndSizes.  */
+  unsigned idx;
+  for (idx = 0;
+       idx < a->NumberOfRvaAndSizes && idx < IMAGE_NUMBEROF_DIRECTORY_ENTRIES;
+       idx++)
+    {
+      /* If data directory is empty, rva also should be 0.  */
+      int size = H_GET_32 (abfd, src->DataDirectory[idx][1]);
+      int vma = size ? H_GET_32 (abfd, src->DataDirectory[idx][0]) : 0;
 
-    for (idx = 0; idx < a->NumberOfRvaAndSizes; idx++)
-      {
-	/* If data directory is empty, rva also should be 0.  */
-	int size =
-	  H_GET_32 (abfd, src->DataDirectory[idx][1]);
-
-	a->DataDirectory[idx].Size = size;
-
-	if (size)
-	  a->DataDirectory[idx].VirtualAddress =
-	    H_GET_32 (abfd, src->DataDirectory[idx][0]);
-	else
-	  a->DataDirectory[idx].VirtualAddress = 0;
-      }
+      a->DataDirectory[idx].Size = size;
+      a->DataDirectory[idx].VirtualAddress = vma;
+    }
 
-    while (idx < IMAGE_NUMBEROF_DIRECTORY_ENTRIES)
-      {
-	a->DataDirectory[idx].Size = 0;
-	a->DataDirectory[idx].VirtualAddress = 0;
-	idx ++;
-      }
-  }
+  while (idx < IMAGE_NUMBEROF_DIRECTORY_ENTRIES)
+    {
+      a->DataDirectory[idx].Size = 0;
+      a->DataDirectory[idx].VirtualAddress = 0;
+      idx++;
+    }
 
   if (aouthdr_int->entry)
     {
       aouthdr_int->entry += a->ImageBase;
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
       aouthdr_int->entry &= 0xffffffff;
 #endif
     }
@@ -579,12 +541,12 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
   if (aouthdr_int->tsize)
     {
       aouthdr_int->text_start += a->ImageBase;
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
       aouthdr_int->text_start &= 0xffffffff;
 #endif
     }
 
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
   /* PE32+ does not have data_start member!  */
   if (aouthdr_int->dsize)
     {
@@ -592,15 +554,6 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
       aouthdr_int->data_start &= 0xffffffff;
     }
 #endif
-
-#ifdef POWERPC_LE_PE
-  /* These three fields are normally set up by ppc_relocate_section.
-     In the case of reading a file in, we can pick them up from the
-     DataDirectory.  */
-  first_thunk_address = a->DataDirectory[PE_IMPORT_ADDRESS_TABLE].VirtualAddress;
-  thunk_size = a->DataDirectory[PE_IMPORT_ADDRESS_TABLE].Size;
-  import_table_size = a->DataDirectory[PE_IMPORT_TABLE].Size;
-#endif
 }
 
 /* A support function for below.  */
@@ -653,7 +606,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
   if (aouthdr_in->tsize)
     {
       aouthdr_in->text_start -= ib;
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
       aouthdr_in->text_start &= 0xffffffff;
 #endif
     }
@@ -661,7 +614,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
   if (aouthdr_in->dsize)
     {
       aouthdr_in->data_start -= ib;
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
       aouthdr_in->data_start &= 0xffffffff;
 #endif
     }
@@ -669,7 +622,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
   if (aouthdr_in->entry)
     {
       aouthdr_in->entry -= ib;
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
       aouthdr_in->entry &= 0xffffffff;
 #endif
     }
@@ -758,13 +711,23 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
 
   H_PUT_16 (abfd, aouthdr_in->magic, aouthdr_out->standard.magic);
 
+  if (extra->MajorLinkerVersion || extra->MinorLinkerVersion)
+    {
+      H_PUT_8 (abfd, extra->MajorLinkerVersion,
+	       aouthdr_out->standard.vstamp);
+      H_PUT_8 (abfd, extra->MinorLinkerVersion,
+	       aouthdr_out->standard.vstamp + 1);
+    }
+  else
+    {
 /* e.g. 219510000 is linker version 2.19  */
 #define LINKER_VERSION ((short) (BFD_VERSION / 1000000))
 
-  /* This piece of magic sets the "linker version" field to
-     LINKER_VERSION.  */
-  H_PUT_16 (abfd, (LINKER_VERSION / 100 + (LINKER_VERSION % 100) * 256),
-	    aouthdr_out->standard.vstamp);
+      /* This piece of magic sets the "linker version" field to
+	 LINKER_VERSION.  */
+      H_PUT_16 (abfd, (LINKER_VERSION / 100 + (LINKER_VERSION % 100) * 256),
+		aouthdr_out->standard.vstamp);
+    }
 
   PUT_AOUTHDR_TSIZE (abfd, aouthdr_in->tsize, aouthdr_out->standard.tsize);
   PUT_AOUTHDR_DSIZE (abfd, aouthdr_in->dsize, aouthdr_out->standard.dsize);
@@ -773,7 +736,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
   PUT_AOUTHDR_TEXT_START (abfd, aouthdr_in->text_start,
 			  aouthdr_out->standard.text_start);
 
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
   /* PE32+ does not have data_start member!  */
   PUT_AOUTHDR_DATA_START (abfd, aouthdr_in->data_start,
 			  aouthdr_out->standard.data_start);
@@ -876,10 +839,13 @@ _bfd_XXi_only_swap_filehdr_out (bfd * ab
 
   /* Use a real timestamp by default, unless the no-insert-timestamp
      option was chosen.  */
-  if ((pe_data (abfd)->insert_timestamp))
-    H_PUT_32 (abfd, time (0), filehdr_out->f_timdat);
+  if ((pe_data (abfd)->timestamp) == -1)
+    {
+      time_t now = bfd_get_current_time (0);
+      H_PUT_32 (abfd, now, filehdr_out->f_timdat);
+    }
   else
-    H_PUT_32 (abfd, 0, filehdr_out->f_timdat);
+    H_PUT_32 (abfd, pe_data (abfd)->timestamp, filehdr_out->f_timdat);
 
   PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr,
 		      filehdr_out->f_symptr);
@@ -916,9 +882,8 @@ _bfd_XXi_only_swap_filehdr_out (bfd * ab
 
   H_PUT_32 (abfd, filehdr_in->pe.e_lfanew, filehdr_out->e_lfanew);
 
-  for (idx = 0; idx < 16; idx++)
-    H_PUT_32 (abfd, filehdr_in->pe.dos_message[idx],
-	      filehdr_out->dos_message[idx]);
+  memcpy (filehdr_out->dos_message, filehdr_in->pe.dos_message,
+	  sizeof (filehdr_out->dos_message));
 
   /* Also put in the NT signature.  */
   H_PUT_32 (abfd, filehdr_in->pe.nt_signature, filehdr_out->nt_signature);
@@ -954,11 +919,18 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, vo
 
   memcpy (scnhdr_ext->s_name, scnhdr_int->s_name, sizeof (scnhdr_int->s_name));
 
-  PUT_SCNHDR_VADDR (abfd,
-		    ((scnhdr_int->s_vaddr
-		      - pe_data (abfd)->pe_opthdr.ImageBase)
-		     & 0xffffffff),
-		    scnhdr_ext->s_vaddr);
+  ss = scnhdr_int->s_vaddr - pe_data (abfd)->pe_opthdr.ImageBase;
+  if (scnhdr_int->s_vaddr < pe_data (abfd)->pe_opthdr.ImageBase)
+    _bfd_error_handler (_("%pB:%.8s: section below image base"),
+                        abfd, scnhdr_int->s_name);
+  /* Do not compare lower 32-bits for 64-bit vma.  */
+#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
+  else if(ss != (ss & 0xffffffff))
+    _bfd_error_handler (_("%pB:%.8s: RVA truncated"), abfd, scnhdr_int->s_name);
+  PUT_SCNHDR_VADDR (abfd, ss & 0xffffffff, scnhdr_ext->s_vaddr);
+#else
+  PUT_SCNHDR_VADDR (abfd, ss, scnhdr_ext->s_vaddr);
+#endif
 
   /* NT wants the size data to be rounded up to the next
      NT_FILE_ALIGNMENT, but zero if it has no content (as in .bss,
@@ -1010,7 +982,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, vo
        (0x02000000).  Also, the resource data should also be read and
        writable.  */
 
-    /* FIXME: Alignment is also encoded in this field, at least on PPC and
+    /* FIXME: Alignment is also encoded in this field, at least on
        ARM-WINCE.  Although - how do we get the original alignment field
        back ?  */
 
@@ -1031,7 +1003,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, vo
 	{ ".pdata", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA },
 	{ ".rdata", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA },
 	{ ".reloc", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_DISCARDABLE },
-	{ ".rsrc",  IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_WRITE },
+	{ ".rsrc",  IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA },
 	{ ".text" , IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE },
 	{ ".tls",   IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_WRITE },
 	{ ".xdata", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA },
@@ -1144,18 +1116,25 @@ _bfd_XXi_swap_debugdir_out (bfd * abfd,
 }
 
 CODEVIEW_INFO *
-_bfd_XXi_slurp_codeview_record (bfd * abfd, file_ptr where, unsigned long length, CODEVIEW_INFO *cvinfo)
+_bfd_XXi_slurp_codeview_record (bfd * abfd, file_ptr where, unsigned long length, CODEVIEW_INFO *cvinfo,
+				char **pdb)
 {
   char buffer[256+1];
+  bfd_size_type nread;
 
   if (bfd_seek (abfd, where, SEEK_SET) != 0)
     return NULL;
 
-  if (bfd_bread (buffer, 256, abfd) < 4)
+  if (length <= sizeof (CV_INFO_PDB70) && length <= sizeof (CV_INFO_PDB20))
+    return NULL;
+  if (length > 256)
+    length = 256;
+  nread = bfd_read (buffer, length, abfd);
+  if (length != nread)
     return NULL;
 
   /* Ensure null termination of filename.  */
-  buffer[256] = '\0';
+  memset (buffer + nread, 0, sizeof (buffer) - nread);
 
   cvinfo->CVSignature = H_GET_32 (abfd, buffer);
   cvinfo->Age = 0;
@@ -1176,7 +1155,10 @@ _bfd_XXi_slurp_codeview_record (bfd * ab
       memcpy (&(cvinfo->Signature[8]), &(cvinfo70->Signature[8]), 8);
 
       cvinfo->SignatureLength = CV_INFO_SIGNATURE_LENGTH;
-      // cvinfo->PdbFileName = cvinfo70->PdbFileName;
+      /* cvinfo->PdbFileName = cvinfo70->PdbFileName;  */
+
+      if (pdb)
+	*pdb = xstrdup (cvinfo70->PdbFileName);
 
       return cvinfo;
     }
@@ -1187,7 +1169,10 @@ _bfd_XXi_slurp_codeview_record (bfd * ab
       cvinfo->Age = H_GET_32(abfd, cvinfo20->Age);
       memcpy (cvinfo->Signature, cvinfo20->Signature, 4);
       cvinfo->SignatureLength = 4;
-      // cvinfo->PdbFileName = cvinfo20->PdbFileName;
+      /* cvinfo->PdbFileName = cvinfo20->PdbFileName;  */
+
+      if (pdb)
+	*pdb = xstrdup (cvinfo20->PdbFileName);
 
       return cvinfo;
     }
@@ -1196,9 +1181,11 @@ _bfd_XXi_slurp_codeview_record (bfd * ab
 }
 
 unsigned int
-_bfd_XXi_write_codeview_record (bfd * abfd, file_ptr where, CODEVIEW_INFO *cvinfo)
+_bfd_XXi_write_codeview_record (bfd * abfd, file_ptr where, CODEVIEW_INFO *cvinfo,
+				const char *pdb)
 {
-  const bfd_size_type size = sizeof (CV_INFO_PDB70) + 1;
+  size_t pdb_len = pdb ? strlen (pdb) : 0;
+  const bfd_size_type size = sizeof (CV_INFO_PDB70) + pdb_len + 1;
   bfd_size_type written;
   CV_INFO_PDB70 *cvinfo70;
   char * buffer;
@@ -1221,9 +1208,13 @@ _bfd_XXi_write_codeview_record (bfd * ab
   memcpy (&(cvinfo70->Signature[8]), &(cvinfo->Signature[8]), 8);
 
   H_PUT_32 (abfd, cvinfo->Age, cvinfo70->Age);
-  cvinfo70->PdbFileName[0] = '\0';
 
-  written = bfd_bwrite (buffer, size, abfd);
+  if (pdb == NULL)
+    cvinfo70->PdbFileName[0] = '\0';
+  else
+    memcpy (cvinfo70->PdbFileName, pdb, pdb_len + 1);
+
+  written = bfd_write (buffer, size, abfd);
 
   free (buffer);
 
@@ -1250,26 +1241,31 @@ static char * dir_names[IMAGE_NUMBEROF_D
   N_("Reserved")
 };
 
-#ifdef POWERPC_LE_PE
-/* The code for the PPC really falls in the "architecture dependent"
-   category.  However, it's not clear that anyone will ever care, so
-   we're ignoring the issue for now; if/when PPC matters, some of this
-   may need to go into peicode.h, or arguments passed to enable the
-   PPC- specific code.  */
-#endif
+static bool
+get_contents_sanity_check (bfd *abfd, asection *section,
+			   bfd_size_type dataoff, bfd_size_type datasize)
+{
+  if ((section->flags & SEC_HAS_CONTENTS) == 0)
+    return false;
+  if (dataoff > section->size
+      || datasize > section->size - dataoff)
+    return false;
+  ufile_ptr filesize = bfd_get_file_size (abfd);
+  if (filesize != 0
+      && ((ufile_ptr) section->filepos > filesize
+	  || dataoff > filesize - section->filepos
+	  || datasize > filesize - section->filepos - dataoff))
+    return false;
+  return true;
+}
 
-static bfd_boolean
+static bool
 pe_print_idata (bfd * abfd, void * vfile)
 {
   FILE *file = (FILE *) vfile;
   bfd_byte *data;
   asection *section;
   bfd_signed_vma adj;
-
-#ifdef POWERPC_LE_PE
-  asection *rel_section = bfd_get_section_by_name (abfd, ".reldata");
-#endif
-
   bfd_size_type datasize = 0;
   bfd_size_type dataoff;
   bfd_size_type i;
@@ -1286,13 +1282,13 @@ pe_print_idata (bfd * abfd, void * vfile
     {
       /* Maybe the extra header isn't there.  Look for the section.  */
       section = bfd_get_section_by_name (abfd, ".idata");
-      if (section == NULL)
-	return TRUE;
+      if (section == NULL || (section->flags & SEC_HAS_CONTENTS) == 0)
+	return true;
 
       addr = section->vma;
       datasize = section->size;
       if (datasize == 0)
-	return TRUE;
+	return true;
     }
   else
     {
@@ -1308,14 +1304,14 @@ pe_print_idata (bfd * abfd, void * vfile
 	{
 	  fprintf (file,
 		   _("\nThere is an import table, but the section containing it could not be found\n"));
-	  return TRUE;
+	  return true;
 	}
       else if (!(section->flags & SEC_HAS_CONTENTS))
 	{
 	  fprintf (file,
 		   _("\nThere is an import table in %s, but that section has no contents\n"),
 		   section->name);
-	  return TRUE;
+	  return true;
 	}
     }
 
@@ -1325,59 +1321,6 @@ pe_print_idata (bfd * abfd, void * vfile
 
   dataoff = addr - section->vma;
 
-#ifdef POWERPC_LE_PE
-  if (rel_section != 0 && rel_section->size != 0)
-    {
-      /* The toc address can be found by taking the starting address,
-	 which on the PPC locates a function descriptor. The
-	 descriptor consists of the function code starting address
-	 followed by the address of the toc. The starting address we
-	 get from the bfd, and the descriptor is supposed to be in the
-	 .reldata section.  */
-
-      bfd_vma loadable_toc_address;
-      bfd_vma toc_address;
-      bfd_vma start_address;
-      bfd_byte *data;
-      bfd_vma offset;
-
-      if (!bfd_malloc_and_get_section (abfd, rel_section, &data))
-	{
-	  if (data != NULL)
-	    free (data);
-	  return FALSE;
-	}
-
-      offset = abfd->start_address - rel_section->vma;
-
-      if (offset >= rel_section->size || offset + 8 > rel_section->size)
-	{
-	  if (data != NULL)
-	    free (data);
-	  return FALSE;
-	}
-
-      start_address = bfd_get_32 (abfd, data + offset);
-      loadable_toc_address = bfd_get_32 (abfd, data + offset + 4);
-      toc_address = loadable_toc_address - 32768;
-
-      fprintf (file,
-	       _("\nFunction descriptor located at the start address: %04lx\n"),
-	       (unsigned long int) (abfd->start_address));
-      fprintf (file,
-	       /* xgettext:c-format */
-	       _("\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"),
-	       start_address, loadable_toc_address, toc_address);
-      if (data != NULL)
-	free (data);
-    }
-  else
-    {
-      fprintf (file,
-	       _("\nNo reldata section! Function descriptor not decoded.\n"));
-    }
-#endif
-
   fprintf (file,
 	   _("\nThe Import Tables (interpreted %s section contents)\n"),
 	   section->name);
@@ -1389,9 +1332,8 @@ pe_print_idata (bfd * abfd, void * vfile
   /* Read the whole section.  Some of the fields might be before dataoff.  */
   if (!bfd_malloc_and_get_section (abfd, section, &data))
     {
-      if (data != NULL)
-	free (data);
-      return FALSE;
+      free (data);
+      return false;
     }
 
   adj = section->vma - extra->ImageBase;
@@ -1483,6 +1425,9 @@ pe_print_idata (bfd * abfd, void * vfile
 		{
 		  ft_idx = first_thunk - (ft_section->vma - extra->ImageBase);
 		  ft_datasize = ft_section->size - ft_idx;
+		  if (!get_contents_sanity_check (abfd, ft_section,
+						  ft_idx, ft_datasize))
+		    continue;
 		  ft_data = (bfd_byte *) bfd_malloc (ft_datasize);
 		  if (ft_data == NULL)
 		    continue;
@@ -1590,10 +1535,10 @@ pe_print_idata (bfd * abfd, void * vfile
 
   free (data);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 pe_print_edata (bfd * abfd, void * vfile)
 {
   FILE *file = (FILE *) vfile;
@@ -1630,13 +1575,13 @@ pe_print_edata (bfd * abfd, void * vfile
       /* Maybe the extra header isn't there.  Look for the section.  */
       section = bfd_get_section_by_name (abfd, ".edata");
       if (section == NULL)
-	return TRUE;
+	return true;
 
       addr = section->vma;
       dataoff = 0;
       datasize = section->size;
       if (datasize == 0)
-	return TRUE;
+	return true;
     }
   else
     {
@@ -1650,26 +1595,11 @@ pe_print_edata (bfd * abfd, void * vfile
 	{
 	  fprintf (file,
 		   _("\nThere is an export table, but the section containing it could not be found\n"));
-	  return TRUE;
-	}
-      else if (!(section->flags & SEC_HAS_CONTENTS))
-	{
-	  fprintf (file,
-		   _("\nThere is an export table in %s, but that section has no contents\n"),
-		   section->name);
-	  return TRUE;
+	  return true;
 	}
 
       dataoff = addr - section->vma;
       datasize = extra->DataDirectory[PE_EXPORT_TABLE].Size;
-      if (dataoff > section->size
-	  || datasize > section->size - dataoff)
-	{
-	  fprintf (file,
-		   _("\nThere is an export table in %s, but it does not fit into that section\n"),
-		   section->name);
-	  return TRUE;
-	}
     }
 
   /* PR 17512: Handle corrupt PE binaries.  */
@@ -1679,7 +1609,15 @@ pe_print_edata (bfd * abfd, void * vfile
 	       /* xgettext:c-format */
 	       _("\nThere is an export table in %s, but it is too small (%d)\n"),
 	       section->name, (int) datasize);
-      return TRUE;
+      return true;
+    }
+
+  if (!get_contents_sanity_check (abfd, section, dataoff, datasize))
+    {
+      fprintf (file,
+	       _("\nThere is an export table in %s, but contents cannot be read\n"),
+	       section->name);
+      return true;
     }
 
   /* xgettext:c-format */
@@ -1688,11 +1626,14 @@ pe_print_edata (bfd * abfd, void * vfile
 
   data = (bfd_byte *) bfd_malloc (datasize);
   if (data == NULL)
-    return FALSE;
+    return false;
 
   if (! bfd_get_section_contents (abfd, section, data,
 				  (file_ptr) dataoff, datasize))
-    return FALSE;
+    {
+      free (data);
+      return false;
+    }
 
   /* Go get Export Directory Table.  */
   edt.export_flags   = bfd_get_32 (abfd, data +	 0);
@@ -1866,7 +1807,7 @@ pe_print_edata (bfd * abfd, void * vfile
 
   free (data);
 
-  return TRUE;
+  return true;
 }
 
 /* This really is architecture dependent.  On IA-64, a .pdata entry
@@ -1881,10 +1822,10 @@ pe_print_edata (bfd * abfd, void * vfile
 
    This is the version for uncompressed data.  */
 
-static bfd_boolean
+static bool
 pe_print_pdata (bfd * abfd, void * vfile)
 {
-#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
 # define PDATA_ROW_SIZE	(3 * 8)
 #else
 # define PDATA_ROW_SIZE	(5 * 4)
@@ -1898,9 +1839,10 @@ pe_print_pdata (bfd * abfd, void * vfile
   int onaline = PDATA_ROW_SIZE;
 
   if (section == NULL
+      || (section->flags & SEC_HAS_CONTENTS) == 0
       || coff_section_data (abfd, section) == NULL
       || pei_section_data (abfd, section) == NULL)
-    return TRUE;
+    return true;
 
   stop = pei_section_data (abfd, section)->virt_size;
   if ((stop % onaline) != 0)
@@ -1911,7 +1853,7 @@ pe_print_pdata (bfd * abfd, void * vfile
 
   fprintf (file,
 	   _("\nThe Function Table (interpreted .pdata section contents)\n"));
-#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
   fprintf (file,
 	   _(" vma:\t\t\tBegin Address    End Address      Unwind Info\n"));
 #else
@@ -1922,7 +1864,7 @@ pe_print_pdata (bfd * abfd, void * vfile
 
   datasize = section->size;
   if (datasize == 0)
-    return TRUE;
+    return true;
 
   /* PR 17512: file: 002-193900-0.004.  */
   if (datasize < stop)
@@ -1930,14 +1872,13 @@ pe_print_pdata (bfd * abfd, void * vfile
       /* xgettext:c-format */
       fprintf (file, _("Virtual size of .pdata section (%ld) larger than real size (%ld)\n"),
 	       (long) stop, (long) datasize);
-      return FALSE;
+      return false;
     }
 
   if (! bfd_malloc_and_get_section (abfd, section, &data))
     {
-      if (data != NULL)
-	free (data);
-      return FALSE;
+      free (data);
+      return false;
     }
 
   start = 0;
@@ -1949,7 +1890,7 @@ pe_print_pdata (bfd * abfd, void * vfile
       bfd_vma eh_handler;
       bfd_vma eh_data;
       bfd_vma prolog_end_addr;
-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) || defined(COFF_WITH_peLoongArch64) || defined (COFF_WITH_peRiscV64)
       int em_data;
 #endif
 
@@ -1967,7 +1908,7 @@ pe_print_pdata (bfd * abfd, void * vfile
 	/* We are probably into the padding of the section now.  */
 	break;
 
-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) || defined(COFF_WITH_peLoongArch64) || defined (COFF_WITH_peRiscV64)
       em_data = ((eh_handler & 0x1) << 2) | (prolog_end_addr & 0x3);
 #endif
       eh_handler &= ~(bfd_vma) 0x3;
@@ -1978,45 +1919,18 @@ pe_print_pdata (bfd * abfd, void * vfile
       bfd_fprintf_vma (abfd, file, begin_addr); fputc (' ', file);
       bfd_fprintf_vma (abfd, file, end_addr); fputc (' ', file);
       bfd_fprintf_vma (abfd, file, eh_handler);
-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) || defined(COFF_WITH_peLoongArch64) || defined (COFF_WITH_peRiscV64)
       fputc (' ', file);
       bfd_fprintf_vma (abfd, file, eh_data); fputc (' ', file);
       bfd_fprintf_vma (abfd, file, prolog_end_addr);
       fprintf (file, "   %x", em_data);
 #endif
-
-#ifdef POWERPC_LE_PE
-      if (eh_handler == 0 && eh_data != 0)
-	{
-	  /* Special bits here, although the meaning may be a little
-	     mysterious. The only one I know for sure is 0x03
-	     Code Significance
-	     0x00 None
-	     0x01 Register Save Millicode
-	     0x02 Register Restore Millicode
-	     0x03 Glue Code Sequence.  */
-	  switch (eh_data)
-	    {
-	    case 0x01:
-	      fprintf (file, _(" Register save millicode"));
-	      break;
-	    case 0x02:
-	      fprintf (file, _(" Register restore millicode"));
-	      break;
-	    case 0x03:
-	      fprintf (file, _(" Glue code sequence"));
-	      break;
-	    default:
-	      break;
-	    }
-	}
-#endif
       fprintf (file, "\n");
     }
 
   free (data);
 
-  return TRUE;
+  return true;
 #undef PDATA_ROW_SIZE
 }
 
@@ -2081,7 +1995,7 @@ cleanup_syms (sym_cache *psc)
 
 /* This is the version for "compressed" pdata.  */
 
-bfd_boolean
+bool
 _bfd_XX_print_ce_compressed_pdata (bfd * abfd, void * vfile)
 {
 # define PDATA_ROW_SIZE	(2 * 4)
@@ -2095,9 +2009,10 @@ _bfd_XX_print_ce_compressed_pdata (bfd *
   struct sym_cache cache = {0, 0} ;
 
   if (section == NULL
+      || (section->flags & SEC_HAS_CONTENTS) == 0
       || coff_section_data (abfd, section) == NULL
       || pei_section_data (abfd, section) == NULL)
-    return TRUE;
+    return true;
 
   stop = pei_section_data (abfd, section)->virt_size;
   if ((stop % onaline) != 0)
@@ -2115,16 +2030,17 @@ _bfd_XX_print_ce_compressed_pdata (bfd *
 
   datasize = section->size;
   if (datasize == 0)
-    return TRUE;
+    return true;
 
   if (! bfd_malloc_and_get_section (abfd, section, &data))
     {
-      if (data != NULL)
-	free (data);
-      return FALSE;
+      free (data);
+      return false;
     }
 
   start = 0;
+  if (stop > datasize)
+    stop = datasize;
 
   for (i = start; i < stop; i += onaline)
     {
@@ -2196,7 +2112,7 @@ _bfd_XX_print_ce_compressed_pdata (bfd *
 
   cleanup_syms (& cache);
 
-  return TRUE;
+  return true;
 #undef PDATA_ROW_SIZE
 }
 
@@ -2219,7 +2135,7 @@ static const char * const tbl[] =
   "UNKNOWN",   /* MUST be last.  */
 };
 
-static bfd_boolean
+static bool
 pe_print_reloc (bfd * abfd, void * vfile)
 {
   FILE *file = (FILE *) vfile;
@@ -2227,17 +2143,18 @@ pe_print_reloc (bfd * abfd, void * vfile
   asection *section = bfd_get_section_by_name (abfd, ".reloc");
   bfd_byte *p, *end;
 
-  if (section == NULL || section->size == 0 || !(section->flags & SEC_HAS_CONTENTS))
-    return TRUE;
+  if (section == NULL
+      || section->size == 0
+      || (section->flags & SEC_HAS_CONTENTS) == 0)
+    return true;
 
   fprintf (file,
 	   _("\n\nPE File Base Relocations (interpreted .reloc section contents)\n"));
 
   if (! bfd_malloc_and_get_section (abfd, section, &data))
     {
-      if (data != NULL)
-	free (data);
-      return FALSE;
+      free (data);
+      return false;
     }
 
   p = data;
@@ -2300,7 +2217,7 @@ pe_print_reloc (bfd * abfd, void * vfile
 
   free (data);
 
-  return TRUE;
+  return true;
 }
 
 /* A data structure describing the regions of a .rsrc section.
@@ -2325,13 +2242,13 @@ rsrc_print_resource_directory (FILE * ,
    or section_end + 1 upon failure.  */
 
 static bfd_byte *
-rsrc_print_resource_entries (FILE *	    file,
-			     bfd *	    abfd,
-			     unsigned int   indent,
-			     bfd_boolean    is_name,
-			     bfd_byte *	    data,
-			     rsrc_regions * regions,
-			     bfd_vma	    rva_bias)
+rsrc_print_resource_entries (FILE *file,
+			     bfd *abfd,
+			     unsigned int indent,
+			     bool is_name,
+			     bfd_byte *data,
+			     rsrc_regions *regions,
+			     bfd_vma rva_bias)
 {
   unsigned long entry, addr, size;
   bfd_byte * leaf;
@@ -2487,7 +2404,7 @@ rsrc_print_resource_directory (FILE *
     {
       bfd_byte * entry_end;
 
-      entry_end = rsrc_print_resource_entries (file, abfd, indent + 1, TRUE,
+      entry_end = rsrc_print_resource_entries (file, abfd, indent + 1, true,
 					       data, regions, rva_bias);
       data += 8;
       highest_data = max (highest_data, entry_end);
@@ -2499,7 +2416,7 @@ rsrc_print_resource_directory (FILE *
     {
       bfd_byte * entry_end;
 
-      entry_end = rsrc_print_resource_entries (file, abfd, indent + 1, FALSE,
+      entry_end = rsrc_print_resource_entries (file, abfd, indent + 1, false,
 					       data, regions, rva_bias);
       data += 8;
       highest_data = max (highest_data, entry_end);
@@ -2514,7 +2431,7 @@ rsrc_print_resource_directory (FILE *
    reproduce the resources, windres does that.  Instead we dump
    the tables in a human readable format.  */
 
-static bfd_boolean
+static bool
 rsrc_print_section (bfd * abfd, void * vfile)
 {
   bfd_vma rva_bias;
@@ -2527,25 +2444,24 @@ rsrc_print_section (bfd * abfd, void * v
 
   pe = pe_data (abfd);
   if (pe == NULL)
-    return TRUE;
+    return true;
 
   section = bfd_get_section_by_name (abfd, ".rsrc");
   if (section == NULL)
-    return TRUE;
+    return true;
   if (!(section->flags & SEC_HAS_CONTENTS))
-    return TRUE;
+    return true;
 
   datasize = section->size;
   if (datasize == 0)
-    return TRUE;
+    return true;
 
   rva_bias = section->vma - pe->pe_opthdr.ImageBase;
 
   if (! bfd_malloc_and_get_section (abfd, section, & data))
     {
-      if (data != NULL)
-	free (data);
-      return FALSE;
+      free (data);
+      return false;
     }
 
   regions.section_start = data;
@@ -2600,10 +2516,10 @@ rsrc_print_section (bfd * abfd, void * v
 	     (int) (regions.resource_start - regions.section_start));
 
   free (regions.section_start);
-  return TRUE;
+  return true;
 }
 
-#define IMAGE_NUMBEROF_DEBUG_TYPES 12
+#define IMAGE_NUMBEROF_DEBUG_TYPES 17
 
 static char * debug_type_names[IMAGE_NUMBEROF_DEBUG_TYPES] =
 {
@@ -2619,9 +2535,14 @@ static char * debug_type_names[IMAGE_NUM
   "Borland",
   "Reserved",
   "CLSID",
+  "Feature",
+  "CoffGrp",
+  "ILTCG",
+  "MPX",
+  "Repro",
 };
 
-static bfd_boolean
+static bool
 pe_print_debugdata (bfd * abfd, void * vfile)
 {
   FILE *file = (FILE *) vfile;
@@ -2630,13 +2551,13 @@ pe_print_debugdata (bfd * abfd, void * v
   asection *section;
   bfd_byte *data = 0;
   bfd_size_type dataoff;
-  unsigned int i;
+  unsigned int i, j;
 
   bfd_vma addr = extra->DataDirectory[PE_DEBUG_DATA].VirtualAddress;
   bfd_size_type size = extra->DataDirectory[PE_DEBUG_DATA].Size;
 
   if (size == 0)
-    return TRUE;
+    return true;
 
   addr += extra->ImageBase;
   for (section = abfd->sections; section != NULL; section = section->next)
@@ -2649,21 +2570,21 @@ pe_print_debugdata (bfd * abfd, void * v
     {
       fprintf (file,
 	       _("\nThere is a debug directory, but the section containing it could not be found\n"));
-      return TRUE;
+      return true;
     }
   else if (!(section->flags & SEC_HAS_CONTENTS))
     {
       fprintf (file,
 	       _("\nThere is a debug directory in %s, but that section has no contents\n"),
 	       section->name);
-      return TRUE;
+      return true;
     }
   else if (section->size < size)
     {
       fprintf (file,
 	       _("\nError: section %s contains the debug data starting address but it is too small\n"),
 	       section->name);
-      return FALSE;
+      return false;
     }
 
   fprintf (file, _("\nThere is a debug directory in %s at 0x%lx\n\n"),
@@ -2674,7 +2595,7 @@ pe_print_debugdata (bfd * abfd, void * v
   if (size > (section->size - dataoff))
     {
       fprintf (file, _("The debug data size field in the data directory is too big for the section"));
-      return FALSE;
+      return false;
     }
 
   fprintf (file,
@@ -2683,9 +2604,8 @@ pe_print_debugdata (bfd * abfd, void * v
   /* Read the whole section.  */
   if (!bfd_malloc_and_get_section (abfd, section, &data))
     {
-      if (data != NULL)
-	free (data);
-      return FALSE;
+      free (data);
+      return false;
     }
 
   for (i = 0; i < size / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++)
@@ -2713,35 +2633,104 @@ pe_print_debugdata (bfd * abfd, void * v
 	     We need to use a 32-bit aligned buffer
 	     to safely read in a codeview record.  */
 	  char buffer[256 + 1] ATTRIBUTE_ALIGNED_ALIGNOF (CODEVIEW_INFO);
+	  char *pdb;
 
 	  CODEVIEW_INFO *cvinfo = (CODEVIEW_INFO *) buffer;
 
 	  /* The debug entry doesn't have to have to be in a section,
 	     in which case AddressOfRawData is 0, so always use PointerToRawData.  */
 	  if (!_bfd_XXi_slurp_codeview_record (abfd, (file_ptr) idd.PointerToRawData,
-					       idd.SizeOfData, cvinfo))
+					       idd.SizeOfData, cvinfo, &pdb))
 	    continue;
 
-	  for (i = 0; i < cvinfo->SignatureLength; i++)
-	    sprintf (&signature[i*2], "%02x", cvinfo->Signature[i] & 0xff);
+	  for (j = 0; j < cvinfo->SignatureLength; j++)
+	    sprintf (&signature[j*2], "%02x", cvinfo->Signature[j] & 0xff);
 
 	  /* xgettext:c-format */
-	  fprintf (file, _("(format %c%c%c%c signature %s age %ld)\n"),
+	  fprintf (file, _("(format %c%c%c%c signature %s age %ld pdb %s)\n"),
 		   buffer[0], buffer[1], buffer[2], buffer[3],
-		   signature, cvinfo->Age);
+		   signature, cvinfo->Age, pdb[0] ? pdb : "(none)");
+
+	  free (pdb);
 	}
     }
 
+  free(data);
+
   if (size % sizeof (struct external_IMAGE_DEBUG_DIRECTORY) != 0)
     fprintf (file,
 	    _("The debug directory size is not a multiple of the debug directory entry size\n"));
 
-  return TRUE;
+  return true;
+}
+
+static bool
+pe_is_repro (bfd * abfd)
+{
+  pe_data_type *pe = pe_data (abfd);
+  struct internal_extra_pe_aouthdr *extra = &pe->pe_opthdr;
+  asection *section;
+  bfd_byte *data = 0;
+  bfd_size_type dataoff;
+  unsigned int i;
+  bool res = false;
+
+  bfd_vma addr = extra->DataDirectory[PE_DEBUG_DATA].VirtualAddress;
+  bfd_size_type size = extra->DataDirectory[PE_DEBUG_DATA].Size;
+
+  if (size == 0)
+    return false;
+
+  addr += extra->ImageBase;
+  for (section = abfd->sections; section != NULL; section = section->next)
+    {
+      if ((addr >= section->vma) && (addr < (section->vma + section->size)))
+	break;
+    }
+
+  if ((section == NULL)
+      || (!(section->flags & SEC_HAS_CONTENTS))
+      || (section->size < size))
+    {
+      return false;
+    }
+
+  dataoff = addr - section->vma;
+
+  if (size > (section->size - dataoff))
+    {
+      return false;
+    }
+
+  if (!bfd_malloc_and_get_section (abfd, section, &data))
+    {
+      free (data);
+      return false;
+    }
+
+  for (i = 0; i < size / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++)
+    {
+      struct external_IMAGE_DEBUG_DIRECTORY *ext
+	= &((struct external_IMAGE_DEBUG_DIRECTORY *)(data + dataoff))[i];
+      struct internal_IMAGE_DEBUG_DIRECTORY idd;
+
+      _bfd_XXi_swap_debugdir_in (abfd, ext, &idd);
+
+      if (idd.Type == PE_IMAGE_DEBUG_TYPE_REPRO)
+        {
+          res = true;
+          break;
+        }
+    }
+
+  free(data);
+
+  return res;
 }
 
 /* Print out the program headers.  */
 
-bfd_boolean
+bool
 _bfd_XX_print_private_bfd_data_common (bfd * abfd, void * vfile)
 {
   FILE *file = (FILE *) vfile;
@@ -2765,16 +2754,29 @@ _bfd_XX_print_private_bfd_data_common (b
   PF (IMAGE_FILE_BYTES_REVERSED_LO, "little endian");
   PF (IMAGE_FILE_32BIT_MACHINE, "32 bit words");
   PF (IMAGE_FILE_DEBUG_STRIPPED, "debugging information removed");
+  PF (IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP, "copy to swap file if on removable media");
+  PF (IMAGE_FILE_NET_RUN_FROM_SWAP, "copy to swap file if on network media");
   PF (IMAGE_FILE_SYSTEM, "system file");
   PF (IMAGE_FILE_DLL, "DLL");
+  PF (IMAGE_FILE_UP_SYSTEM_ONLY, "run only on uniprocessor machine");
   PF (IMAGE_FILE_BYTES_REVERSED_HI, "big endian");
 #undef PF
 
-  /* ctime implies '\n'.  */
-  {
-    time_t t = pe->coff.timestamp;
-    fprintf (file, "\nTime/Date\t\t%s", ctime (&t));
-  }
+  /*
+    If a PE_IMAGE_DEBUG_TYPE_REPRO entry is present in the debug directory, the
+    timestamp is to be interpreted as the hash of a reproducible build.
+  */
+  if (pe_is_repro (abfd))
+    {
+      fprintf (file, "\nTime/Date\t\t%08lx", pe->coff.timestamp);
+      fprintf (file, "\t(This is a reproducible build file hash, not a timestamp)\n");
+    }
+  else
+    {
+      /* ctime implies '\n'.  */
+      time_t t = pe->coff.timestamp;
+      fprintf (file, "\nTime/Date\t\t%s", ctime (&t));
+    }
 
 #ifndef IMAGE_NT_OPTIONAL_HDR_MAGIC
 # define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b
@@ -2816,7 +2818,7 @@ _bfd_XX_print_private_bfd_data_common (b
   bfd_fprintf_vma (abfd, file, i->AddressOfEntryPoint);
   fprintf (file, "\nBaseOfCode\t\t");
   bfd_fprintf_vma (abfd, file, i->BaseOfCode);
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
   /* PE32+ does not have BaseOfData member!  */
   fprintf (file, "\nBaseOfData\t\t");
   bfd_fprintf_vma (abfd, file, i->BaseOfData);
@@ -2857,7 +2859,7 @@ _bfd_XX_print_private_bfd_data_common (b
     case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI:
       subsystem_name = "Wince CUI";
       break;
-    // These are from UEFI Platform Initialization Specification 1.1.
+    /* These are from UEFI Platform Initialization Specification 1.1.  */
     case IMAGE_SUBSYSTEM_EFI_APPLICATION:
       subsystem_name = "EFI application";
       break;
@@ -2870,11 +2872,11 @@ _bfd_XX_print_private_bfd_data_common (b
     case IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER:
       subsystem_name = "SAL runtime driver";
       break;
-    // This is from revision 8.0 of the MS PE/COFF spec
+    /* This is from revision 8.0 of the MS PE/COFF spec  */
     case IMAGE_SUBSYSTEM_XBOX:
       subsystem_name = "XBOX";
       break;
-    // Added default case for clarity - subsystem_name is NULL anyway.
+    /* Added default case for clarity - subsystem_name is NULL anyway.  */
     default:
       subsystem_name = NULL;
     }
@@ -2883,6 +2885,34 @@ _bfd_XX_print_private_bfd_data_common (b
   if (subsystem_name)
     fprintf (file, "\t(%s)", subsystem_name);
   fprintf (file, "\nDllCharacteristics\t%08x\n", i->DllCharacteristics);
+  if (i->DllCharacteristics)
+    {
+      unsigned short dllch = i->DllCharacteristics;
+      const char *indent = "\t\t\t\t\t";
+
+      if (dllch & IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA)
+	fprintf (file, "%sHIGH_ENTROPY_VA\n", indent);
+      if (dllch & IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE)
+	fprintf (file, "%sDYNAMIC_BASE\n", indent);
+      if (dllch & IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY)
+	fprintf (file, "%sFORCE_INTEGRITY\n", indent);
+      if (dllch & IMAGE_DLL_CHARACTERISTICS_NX_COMPAT)
+	fprintf (file, "%sNX_COMPAT\n", indent);
+      if (dllch & IMAGE_DLLCHARACTERISTICS_NO_ISOLATION)
+	fprintf (file, "%sNO_ISOLATION\n", indent);
+      if (dllch & IMAGE_DLLCHARACTERISTICS_NO_SEH)
+	fprintf (file, "%sNO_SEH\n", indent);
+      if (dllch & IMAGE_DLLCHARACTERISTICS_NO_BIND)
+	fprintf (file, "%sNO_BIND\n", indent);
+      if (dllch & IMAGE_DLLCHARACTERISTICS_APPCONTAINER)
+	fprintf (file, "%sAPPCONTAINER\n", indent);
+      if (dllch & IMAGE_DLLCHARACTERISTICS_WDM_DRIVER)
+	fprintf (file, "%sWDM_DRIVER\n", indent);
+      if (dllch & IMAGE_DLLCHARACTERISTICS_GUARD_CF)
+	fprintf (file, "%sGUARD_CF\n", indent);
+      if (dllch & IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE)
+	fprintf (file, "%sTERMINAL_SERVICE_AWARE\n", indent);
+    }
   fprintf (file, "SizeOfStackReserve\t");
   bfd_fprintf_vma (abfd, file, i->SizeOfStackReserve);
   fprintf (file, "\nSizeOfStackCommit\t");
@@ -2915,10 +2945,10 @@ _bfd_XX_print_private_bfd_data_common (b
 
   rsrc_print_section (abfd, vfile);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 is_vma_in_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sect, void *obj)
 {
   bfd_vma addr = * (bfd_vma *) obj;
@@ -2934,15 +2964,16 @@ find_section_by_vma (bfd *abfd, bfd_vma
 /* Copy any private info we understand from the input bfd
    to the output bfd.  */
 
-bfd_boolean
+bool
 _bfd_XX_bfd_copy_private_bfd_data_common (bfd * ibfd, bfd * obfd)
 {
   pe_data_type *ipe, *ope;
+  bfd_size_type size;
 
   /* One day we may try to grok other private data.  */
   if (ibfd->xvec->flavour != bfd_target_coff_flavour
       || obfd->xvec->flavour != bfd_target_coff_flavour)
-    return TRUE;
+    return true;
 
   ipe = pe_data (ibfd);
   ope = pe_data (obfd);
@@ -2972,76 +3003,94 @@ _bfd_XX_bfd_copy_private_bfd_data_common
   memcpy (ope->dos_message, ipe->dos_message, sizeof (ope->dos_message));
 
   /* The file offsets contained in the debug directory need rewriting.  */
-  if (ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size != 0)
+  size = ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size;
+  if (size != 0)
     {
       bfd_vma addr = ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].VirtualAddress
 	+ ope->pe_opthdr.ImageBase;
-      asection *section = find_section_by_vma (obfd, addr);
-      bfd_byte *data;
+      /* In particular a .buildid section may overlap (in VA space) with
+	 whatever section comes ahead of it (largely because of section->size
+	 representing s_size, not virt_size).  Therefore don't look for the
+	 section containing the first byte, but for that covering the last
+	 one.  */
+      bfd_vma last = addr + size - 1;
+      asection *section = find_section_by_vma (obfd, last);
 
-      if (section && bfd_malloc_and_get_section (obfd, section, &data))
+      if (section != NULL)
 	{
-	  unsigned int i;
-	  struct external_IMAGE_DEBUG_DIRECTORY *dd =
-	    (struct external_IMAGE_DEBUG_DIRECTORY *)(data + (addr - section->vma));
+	  bfd_byte *data;
+	  bfd_vma dataoff = addr - section->vma;
 
 	  /* PR 17512: file: 0f15796a.  */
-	  if ((unsigned long) ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size
-	      > section->size - (addr - section->vma))
+	  if (addr < section->vma
+	      || section->size < dataoff
+	      || section->size - dataoff < size)
 	    {
 	      /* xgettext:c-format */
 	      _bfd_error_handler
-		(_("%pB: Data Directory size (%lx) "
-		   "exceeds space left in section (%" PRIx64 ")"),
+		(_("%pB: Data Directory (%lx bytes at %" PRIx64 ") "
+		   "extends across section boundary at %" PRIx64),
 		 obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size,
-		 (uint64_t) (section->size - (addr - section->vma)));
-	      free (data);
-	      return FALSE;
+		 (uint64_t) addr, (uint64_t) section->vma);
+	      return false;
 	    }
 
-	  for (i = 0; i < ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size
-		 / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++)
+	  if ((section->flags & SEC_HAS_CONTENTS) != 0
+	      && bfd_malloc_and_get_section (obfd, section, &data))
 	    {
-	      asection *ddsection;
-	      struct external_IMAGE_DEBUG_DIRECTORY *edd = &(dd[i]);
-	      struct internal_IMAGE_DEBUG_DIRECTORY idd;
+	      unsigned int i;
+	      struct external_IMAGE_DEBUG_DIRECTORY *dd =
+		(struct external_IMAGE_DEBUG_DIRECTORY *)(data + dataoff);
 
-	      _bfd_XXi_swap_debugdir_in (obfd, edd, &idd);
+	      for (i = 0; i < ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size
+		     / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++)
+		{
+		  asection *ddsection;
+		  struct external_IMAGE_DEBUG_DIRECTORY *edd = &(dd[i]);
+		  struct internal_IMAGE_DEBUG_DIRECTORY idd;
+		  bfd_vma idd_vma;
 
-	      if (idd.AddressOfRawData == 0)
-		continue; /* RVA 0 means only offset is valid, not handled yet.  */
+		  _bfd_XXi_swap_debugdir_in (obfd, edd, &idd);
 
-	      ddsection = find_section_by_vma (obfd, idd.AddressOfRawData + ope->pe_opthdr.ImageBase);
-	      if (!ddsection)
-		continue; /* Not in a section! */
+		  /* RVA 0 means only offset is valid, not handled yet.  */
+		  if (idd.AddressOfRawData == 0)
+		    continue;
 
-	      idd.PointerToRawData = ddsection->filepos + (idd.AddressOfRawData
-							   + ope->pe_opthdr.ImageBase) - ddsection->vma;
+		  idd_vma = idd.AddressOfRawData + ope->pe_opthdr.ImageBase;
+		  ddsection = find_section_by_vma (obfd, idd_vma);
+		  if (!ddsection)
+		    continue; /* Not in a section! */
+
+		  idd.PointerToRawData
+		    = ddsection->filepos + idd_vma - ddsection->vma;
+		  _bfd_XXi_swap_debugdir_out (obfd, &idd, edd);
+		}
 
-	      _bfd_XXi_swap_debugdir_out (obfd, &idd, edd);
+	      if (!bfd_set_section_contents (obfd, section, data, 0,
+					     section->size))
+		{
+		  _bfd_error_handler (_("failed to update file offsets"
+					" in debug directory"));
+		  free (data);
+		  return false;
+		}
+	      free (data);
 	    }
-
-	  if (!bfd_set_section_contents (obfd, section, data, 0, section->size))
+	  else
 	    {
-	      _bfd_error_handler (_("failed to update file offsets in debug directory"));
-	      free (data);
-	      return FALSE;
+	      _bfd_error_handler (_("%pB: failed to read "
+				    "debug data section"), obfd);
+	      return false;
 	    }
-	  free (data);
-	}
-      else if (section)
-	{
-	  _bfd_error_handler (_("%pB: failed to read debug data section"), obfd);
-	  return FALSE;
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy private section data.  */
 
-bfd_boolean
+bool
 _bfd_XX_bfd_copy_private_section_data (bfd *ibfd,
 				       asection *isec,
 				       bfd *obfd,
@@ -3049,25 +3098,25 @@ _bfd_XX_bfd_copy_private_section_data (b
 {
   if (bfd_get_flavour (ibfd) != bfd_target_coff_flavour
       || bfd_get_flavour (obfd) != bfd_target_coff_flavour)
-    return TRUE;
+    return true;
 
   if (coff_section_data (ibfd, isec) != NULL
       && pei_section_data (ibfd, isec) != NULL)
     {
       if (coff_section_data (obfd, osec) == NULL)
 	{
-	  bfd_size_type amt = sizeof (struct coff_section_tdata);
+	  size_t amt = sizeof (struct coff_section_tdata);
 	  osec->used_by_bfd = bfd_zalloc (obfd, amt);
 	  if (osec->used_by_bfd == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       if (pei_section_data (obfd, osec) == NULL)
 	{
-	  bfd_size_type amt = sizeof (struct pei_section_tdata);
+	  size_t amt = sizeof (struct pei_section_tdata);
 	  coff_section_data (obfd, osec)->tdata = bfd_zalloc (obfd, amt);
 	  if (coff_section_data (obfd, osec)->tdata == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       pei_section_data (obfd, osec)->virt_size =
@@ -3076,7 +3125,7 @@ _bfd_XX_bfd_copy_private_section_data (b
 	pei_section_data (ibfd, isec)->pe_flags;
     }
 
-  return TRUE;
+  return true;
 }
 
 void
@@ -3085,7 +3134,7 @@ _bfd_XX_get_symbol_info (bfd * abfd, asy
   coff_get_symbol_info (abfd, symbol, ret);
 }
 
-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && (defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) || defined(COFF_WITH_peLoongArch64) || defined (COFF_WITH_peRiscV64))
 static int
 sort_x64_pdata (const void *l, const void *r)
 {
@@ -3110,12 +3159,12 @@ static bfd_byte *
 rsrc_count_directory (bfd *, bfd_byte *, bfd_byte *, bfd_byte *, bfd_vma);
 
 static bfd_byte *
-rsrc_count_entries (bfd *	   abfd,
-		    bfd_boolean	   is_name,
-		    bfd_byte *	   datastart,
-		    bfd_byte *	   data,
-		    bfd_byte *	   dataend,
-		    bfd_vma	   rva_bias)
+rsrc_count_entries (bfd *abfd,
+		    bool is_name,
+		    bfd_byte *datastart,
+		    bfd_byte *data,
+		    bfd_byte *dataend,
+		    bfd_vma rva_bias)
 {
   unsigned long entry, addr, size;
 
@@ -3232,14 +3281,14 @@ typedef struct rsrc_leaf
 
 typedef struct rsrc_entry
 {
-  bfd_boolean is_name;
+  bool is_name;
   union
   {
     unsigned int	  id;
     struct rsrc_string	  name;
   } name_id;
 
-  bfd_boolean is_dir;
+  bool is_dir;
   union
   {
     struct rsrc_directory * directory;
@@ -3255,14 +3304,14 @@ rsrc_parse_directory (bfd *, rsrc_direct
 		      bfd_byte *, bfd_byte *, bfd_vma, rsrc_entry *);
 
 static bfd_byte *
-rsrc_parse_entry (bfd *		   abfd,
-		  bfd_boolean	   is_name,
-		  rsrc_entry *	   entry,
-		  bfd_byte *	   datastart,
-		  bfd_byte *	   data,
-		  bfd_byte *	   dataend,
-		  bfd_vma	   rva_bias,
-		  rsrc_directory * parent)
+rsrc_parse_entry (bfd *abfd,
+		  bool is_name,
+		  rsrc_entry *entry,
+		  bfd_byte *datastart,
+		  bfd_byte * data,
+		  bfd_byte *dataend,
+		  bfd_vma rva_bias,
+		  rsrc_directory *parent)
 {
   unsigned long val, addr, size;
 
@@ -3299,8 +3348,8 @@ rsrc_parse_entry (bfd *		   abfd,
 
   if (HighBitSet (val))
     {
-      entry->is_dir = TRUE;
-      entry->value.directory = bfd_malloc (sizeof * entry->value.directory);
+      entry->is_dir = true;
+      entry->value.directory = bfd_malloc (sizeof (*entry->value.directory));
       if (entry->value.directory == NULL)
 	return dataend;
 
@@ -3310,13 +3359,13 @@ rsrc_parse_entry (bfd *		   abfd,
 				   dataend, rva_bias, entry);
     }
 
-  entry->is_dir = FALSE;
-  entry->value.leaf = bfd_malloc (sizeof * entry->value.leaf);
+  entry->is_dir = false;
+  entry->value.leaf = bfd_malloc (sizeof (*entry->value.leaf));
   if (entry->value.leaf == NULL)
     return dataend;
 
   data = datastart + val;
-  if (data < datastart || data >= dataend)
+  if (data < datastart || data + 12 > dataend)
     return dataend;
 
   addr = bfd_get_32 (abfd, data);
@@ -3324,6 +3373,8 @@ rsrc_parse_entry (bfd *		   abfd,
   entry->value.leaf->codepage = bfd_get_32 (abfd, data + 8);
   /* FIXME: We assume that the reserved field (data + 12) is OK.  */
 
+  if (size > dataend - datastart - (addr - rva_bias))
+    return dataend;
   entry->value.leaf->data = bfd_malloc (size);
   if (entry->value.leaf->data == NULL)
     return dataend;
@@ -3333,15 +3384,15 @@ rsrc_parse_entry (bfd *		   abfd,
 }
 
 static bfd_byte *
-rsrc_parse_entries (bfd *	     abfd,
-		    rsrc_dir_chain * chain,
-		    bfd_boolean	     is_name,
-		    bfd_byte *	     highest_data,
-		    bfd_byte *	     datastart,
-		    bfd_byte *	     data,
-		    bfd_byte *	     dataend,
-		    bfd_vma	     rva_bias,
-		    rsrc_directory * parent)
+rsrc_parse_entries (bfd *abfd,
+		    rsrc_dir_chain *chain,
+		    bool is_name,
+		    bfd_byte *highest_data,
+		    bfd_byte *datastart,
+		    bfd_byte *data,
+		    bfd_byte *dataend,
+		    bfd_vma rva_bias,
+		    rsrc_directory *parent)
 {
   unsigned int i;
   rsrc_entry * entry;
@@ -3352,7 +3403,7 @@ rsrc_parse_entries (bfd *	     abfd,
       return highest_data;
     }
 
-  entry = bfd_malloc (sizeof * entry);
+  entry = bfd_malloc (sizeof (*entry));
   if (entry == NULL)
     return dataend;
 
@@ -3371,7 +3422,7 @@ rsrc_parse_entries (bfd *	     abfd,
 
       if (i)
 	{
-	  entry->next_entry = bfd_malloc (sizeof * entry);
+	  entry->next_entry = bfd_malloc (sizeof (*entry));
 	  entry = entry->next_entry;
 	  if (entry == NULL)
 	    return dataend;
@@ -3409,11 +3460,11 @@ rsrc_parse_directory (bfd *	       abfd,
 
   data += 16;
 
-  highest_data = rsrc_parse_entries (abfd, & table->names, TRUE, data,
+  highest_data = rsrc_parse_entries (abfd, & table->names, true, data,
 				     datastart, data, dataend, rva_bias, table);
   data += table->names.num_entries * 8;
 
-  highest_data = rsrc_parse_entries (abfd, & table->ids, FALSE, highest_data,
+  highest_data = rsrc_parse_entries (abfd, & table->ids, false, highest_data,
 				     datastart, data, dataend, rva_bias, table);
   data += table->ids.num_entries * 8;
 
@@ -3575,16 +3626,12 @@ rsrc_write_directory (rsrc_write_data *
   BFD_ASSERT (nt == next_entry);
 }
 
-#if defined HAVE_WCHAR_H && ! defined __CYGWIN__ && ! defined __MINGW32__
+#if ! defined __CYGWIN__ && ! defined __MINGW32__
 /* Return the length (number of units) of the first character in S,
    putting its 'ucs4_t' representation in *PUC.  */
 
 static unsigned int
-#if defined HAVE_WCTYPE_H
 u16_mbtouc (wint_t * puc, const unsigned short * s, unsigned int n)
-#else
-u16_mbtouc (wchar_t * puc, const unsigned short * s, unsigned int n)
-#endif
 {
   unsigned short c = * s;
 
@@ -3616,11 +3663,11 @@ u16_mbtouc (wchar_t * puc, const unsigne
   *puc = 0xfffd;
   return 1;
 }
-#endif /* HAVE_WCHAR_H and not Cygwin/Mingw */
+#endif /* not Cygwin/Mingw */
 
 /* Perform a comparison of two entries.  */
 static signed int
-rsrc_cmp (bfd_boolean is_name, rsrc_entry * a, rsrc_entry * b)
+rsrc_cmp (bool is_name, rsrc_entry * a, rsrc_entry * b)
 {
   signed int    res;
   bfd_byte *    astring;
@@ -3653,20 +3700,15 @@ rsrc_cmp (bfd_boolean is_name, rsrc_entr
   res = rscpcmp ((const wchar_t *) astring, (const wchar_t *) bstring,
 		 min (alen, blen));
 
-#elif defined HAVE_WCHAR_H
+#else
   {
     unsigned int  i;
 
     res = 0;
     for (i = min (alen, blen); i--; astring += 2, bstring += 2)
       {
-#if defined HAVE_WCTYPE_H
 	wint_t awc;
 	wint_t bwc;
-#else
-	wchar_t awc;
-	wchar_t bwc;
-#endif
 
 	/* Convert UTF-16 unicode characters into wchar_t characters
 	   so that we can then perform a case insensitive comparison.  */
@@ -3676,21 +3718,14 @@ rsrc_cmp (bfd_boolean is_name, rsrc_entr
 	if (Alen != Blen)
 	  return Alen - Blen;
 
-#ifdef HAVE_WCTYPE_H
 	awc = towlower (awc);
 	bwc = towlower (bwc);
 
 	res = awc - bwc;
-#else
-	res = wcsncasecmp (& awc, & bwc, 1);
-#endif
 	if (res)
 	  break;
       }
   }
-#else
-  /* Do the best we can - a case sensitive, untranslated comparison.  */
-  res = memcmp (astring, bstring, min (alen, blen) * 2);
 #endif
 
   if (res == 0)
@@ -3710,10 +3745,9 @@ rsrc_print_name (char * buffer, rsrc_str
 }
 
 static const char *
-rsrc_resource_name (rsrc_entry * entry, rsrc_directory * dir)
+rsrc_resource_name (rsrc_entry *entry, rsrc_directory *dir, char *buffer)
 {
-  static char buffer [256];
-  bfd_boolean is_string = FALSE;
+  bool is_string = false;
 
   buffer[0] = 0;
 
@@ -3736,7 +3770,7 @@ rsrc_resource_name (rsrc_entry * entry,
 	    case 3: strcat (buffer, " (ICON)"); break;
 	    case 4: strcat (buffer, " (MENU)"); break;
 	    case 5: strcat (buffer, " (DIALOG)"); break;
-	    case 6: strcat (buffer, " (STRING)"); is_string = TRUE; break;
+	    case 6: strcat (buffer, " (STRING)"); is_string = true; break;
 	    case 7: strcat (buffer, " (FONTDIR)"); break;
 	    case 8: strcat (buffer, " (FONT)"); break;
 	    case 9: strcat (buffer, " (ACCELERATOR)"); break;
@@ -3800,7 +3834,7 @@ rsrc_resource_name (rsrc_entry * entry,
    them and return FALSE.  Otherwise we copy any strings from B into A and
    then return TRUE.  */
 
-static bfd_boolean
+static bool
 rsrc_merge_string_entries (rsrc_entry * a ATTRIBUTE_UNUSED,
 			   rsrc_entry * b ATTRIBUTE_UNUSED)
 {
@@ -3849,11 +3883,11 @@ rsrc_merge_string_entries (rsrc_entry *
 	  && !a->parent->entry->is_name)
 	_bfd_error_handler (_(".rsrc merge failure: duplicate string resource: %d"),
 			    ((a->parent->entry->name_id.id - 1) << 4) + i);
-      return FALSE;
+      return false;
     }
 
   if (copy_needed == 0)
-    return TRUE;
+    return true;
 
   /* If we reach here then A and B must both have non-colliding strings.
      (We never get string resources with fully empty string tables).
@@ -3861,7 +3895,7 @@ rsrc_merge_string_entries (rsrc_entry *
      in B's strings.  */
   new_data = bfd_malloc (a->value.leaf->size + copy_needed);
   if (new_data == NULL)
-    return FALSE;
+    return false;
 
   nstring = new_data;
   astring = a->value.leaf->data;
@@ -3898,7 +3932,7 @@ rsrc_merge_string_entries (rsrc_entry *
   a->value.leaf->data = new_data;
   a->value.leaf->size += copy_needed;
 
-  return TRUE;
+  return true;
 }
 
 static void rsrc_merge (rsrc_entry *, rsrc_entry *);
@@ -3908,21 +3942,21 @@ static void rsrc_merge (rsrc_entry *, rs
    with lists and we want to handle matches specially.  */
 
 static void
-rsrc_sort_entries (rsrc_dir_chain *  chain,
-		   bfd_boolean       is_name,
-		   rsrc_directory *  dir)
+rsrc_sort_entries (rsrc_dir_chain *chain,
+		   bool is_name,
+		   rsrc_directory *dir)
 {
   rsrc_entry * entry;
   rsrc_entry * next;
   rsrc_entry ** points_to_entry;
-  bfd_boolean swapped;
+  bool swapped;
 
   if (chain->num_entries < 2)
     return;
 
   do
     {
-      swapped = FALSE;
+      swapped = false;
       points_to_entry = & chain->first_entry;
       entry = * points_to_entry;
       next  = entry->next_entry;
@@ -3938,7 +3972,7 @@ rsrc_sort_entries (rsrc_dir_chain *  cha
 	      * points_to_entry = next;
 	      points_to_entry = & next->next_entry;
 	      next = entry->next_entry;
-	      swapped = TRUE;
+	      swapped = true;
 	    }
 	  else if (cmp == 0)
 	    {
@@ -3978,7 +4012,7 @@ rsrc_sort_entries (rsrc_dir_chain *  cha
 			  * points_to_entry = next;
 			  points_to_entry = & next->next_entry;
 			  next = entry->next_entry;
-			  swapped = TRUE;
+			  swapped = true;
 			}
 		      else
 			{
@@ -4044,8 +4078,12 @@ rsrc_sort_entries (rsrc_dir_chain *  cha
 			  || dir->entry->parent->entry == NULL)
 			_bfd_error_handler (_(".rsrc merge failure: duplicate leaf"));
 		      else
-			_bfd_error_handler (_(".rsrc merge failure: duplicate leaf: %s"),
-					    rsrc_resource_name (entry, dir));
+			{
+			  char buff[256];
+
+			  _bfd_error_handler (_(".rsrc merge failure: duplicate leaf: %s"),
+					      rsrc_resource_name (entry, dir, buff));
+			}
 		      bfd_set_error (bfd_error_file_truncated);
 		      return;
 		    }
@@ -4129,8 +4167,8 @@ rsrc_merge (struct rsrc_entry * a, struc
   rsrc_attach_chain (& adir->ids, & bdir->ids);
 
   /* Now sort A's entries.  */
-  rsrc_sort_entries (& adir->names, TRUE, adir);
-  rsrc_sort_entries (& adir->ids, FALSE, adir);
+  rsrc_sort_entries (& adir->names, true, adir);
+  rsrc_sort_entries (& adir->ids, false, adir);
 }
 
 /* Check the .rsrc section.  If it contains multiple concatenated
@@ -4172,13 +4210,7 @@ rsrc_process_section (bfd * abfd,
 
   rva_bias = sec->vma - pe->pe_opthdr.ImageBase;
 
-  data = bfd_malloc (size);
-  if (data == NULL)
-    return;
-
-  datastart = data;
-
-  if (! bfd_get_section_contents (abfd, sec, data, 0, size))
+  if (! bfd_malloc_and_get_section (abfd, sec, &datastart))
     goto end;
 
   /* Step zero: Scan the input bfds looking for .rsrc sections and record
@@ -4190,7 +4222,8 @@ rsrc_process_section (bfd * abfd,
      at the end of a variable amount.  (It does not appear to be based upon
      the section alignment or the file alignment).  We need to skip any
      padding bytes when parsing the input .rsrc sections.  */
-  rsrc_sizes = bfd_malloc (max_num_input_rsrc * sizeof * rsrc_sizes);
+  data = datastart;
+  rsrc_sizes = bfd_malloc (max_num_input_rsrc * sizeof (*rsrc_sizes));
   if (rsrc_sizes == NULL)
     goto end;
 
@@ -4207,7 +4240,7 @@ rsrc_process_section (bfd * abfd,
 	    {
 	      max_num_input_rsrc += 10;
 	      rsrc_sizes = bfd_realloc (rsrc_sizes, max_num_input_rsrc
-					* sizeof * rsrc_sizes);
+					* sizeof (*rsrc_sizes));
 	      if (rsrc_sizes == NULL)
 		goto end;
 	    }
@@ -4260,7 +4293,7 @@ rsrc_process_section (bfd * abfd,
   data = datastart;
   rva_bias = sec->vma - pe->pe_opthdr.ImageBase;
 
-  type_tables = bfd_malloc (num_resource_sets * sizeof * type_tables);
+  type_tables = bfd_malloc (num_resource_sets * sizeof (*type_tables));
   if (type_tables == NULL)
     goto end;
 
@@ -4297,7 +4330,7 @@ rsrc_process_section (bfd * abfd,
   for (indx = 0; indx < num_resource_sets; indx++)
     rsrc_attach_chain (& new_table.names, & type_tables[indx].names);
 
-  rsrc_sort_entries (& new_table.names, TRUE, & new_table);
+  rsrc_sort_entries (& new_table.names, true, & new_table);
 
   /* Chain the ID entries onto the table.  */
   new_table.ids.first_entry = NULL;
@@ -4306,7 +4339,7 @@ rsrc_process_section (bfd * abfd,
   for (indx = 0; indx < num_resource_sets; indx++)
     rsrc_attach_chain (& new_table.ids, & type_tables[indx].ids);
 
-  rsrc_sort_entries (& new_table.ids, FALSE, & new_table);
+  rsrc_sort_entries (& new_table.ids, false, & new_table);
 
   /* Step four: Create new contents for the .rsrc section.  */
   /* Step four point one: Compute the size of each region of the .rsrc section.
@@ -4348,12 +4381,12 @@ rsrc_process_section (bfd * abfd,
 /* Handle the .idata section and other things that need symbol table
    access.  */
 
-bfd_boolean
+bool
 _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
 {
   struct coff_link_hash_entry *h1;
   struct bfd_link_info *info = pfinfo->info;
-  bfd_boolean result = TRUE;
+  bool result = true;
 
   /* There are a few fields that need to be filled in now while we
      have symbol table access.
@@ -4364,7 +4397,7 @@ _bfd_XXi_final_link_postscript (bfd * ab
   /* The import directory.  This is the address of .idata$2, with size
      of .idata$2 + .idata$3.  */
   h1 = coff_link_hash_lookup (coff_hash_table (info),
-			      ".idata$2", FALSE, FALSE, TRUE);
+			      ".idata$2", false, false, true);
   if (h1 != NULL)
     {
       /* PR ld/2729: We cannot rely upon all the output sections having been
@@ -4383,11 +4416,11 @@ _bfd_XXi_final_link_postscript (bfd * ab
 	  _bfd_error_handler
 	    (_("%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"),
 	     abfd);
-	  result = FALSE;
+	  result = false;
 	}
 
       h1 = coff_link_hash_lookup (coff_hash_table (info),
-				  ".idata$4", FALSE, FALSE, TRUE);
+				  ".idata$4", false, false, true);
       if (h1 != NULL
 	  && (h1->root.type == bfd_link_hash_defined
 	   || h1->root.type == bfd_link_hash_defweak)
@@ -4403,13 +4436,13 @@ _bfd_XXi_final_link_postscript (bfd * ab
 	  _bfd_error_handler
 	    (_("%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"),
 	     abfd);
-	  result = FALSE;
+	  result = false;
 	}
 
       /* The import address table.  This is the size/address of
 	 .idata$5.  */
       h1 = coff_link_hash_lookup (coff_hash_table (info),
-				  ".idata$5", FALSE, FALSE, TRUE);
+				  ".idata$5", false, false, true);
       if (h1 != NULL
 	  && (h1->root.type == bfd_link_hash_defined
 	   || h1->root.type == bfd_link_hash_defweak)
@@ -4424,11 +4457,11 @@ _bfd_XXi_final_link_postscript (bfd * ab
 	  _bfd_error_handler
 	    (_("%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"),
 	     abfd);
-	  result = FALSE;
+	  result = false;
 	}
 
       h1 = coff_link_hash_lookup (coff_hash_table (info),
-				  ".idata$6", FALSE, FALSE, TRUE);
+				  ".idata$6", false, false, true);
       if (h1 != NULL
 	  && (h1->root.type == bfd_link_hash_defined
 	   || h1->root.type == bfd_link_hash_defweak)
@@ -4444,13 +4477,13 @@ _bfd_XXi_final_link_postscript (bfd * ab
 	  _bfd_error_handler
 	    (_("%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"),
 	     abfd);
-	  result = FALSE;
+	  result = false;
 	}
     }
   else
     {
       h1 = coff_link_hash_lookup (coff_hash_table (info),
-				  "__IAT_start__", FALSE, FALSE, TRUE);
+				  "__IAT_start__", false, false, true);
       if (h1 != NULL
 	  && (h1->root.type == bfd_link_hash_defined
 	   || h1->root.type == bfd_link_hash_defweak)
@@ -4465,7 +4498,7 @@ _bfd_XXi_final_link_postscript (bfd * ab
 	     + h1->root.u.def.section->output_offset);
 
 	  h1 = coff_link_hash_lookup (coff_hash_table (info),
-				      "__IAT_end__", FALSE, FALSE, TRUE);
+				      "__IAT_end__", false, false, true);
 	  if (h1 != NULL
 	      && (h1->root.type == bfd_link_hash_defined
 	       || h1->root.type == bfd_link_hash_defweak)
@@ -4486,7 +4519,7 @@ _bfd_XXi_final_link_postscript (bfd * ab
 	      _bfd_error_handler
 		(_("%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)]"
 		   " because .idata$6 is missing"), abfd);
-	      result = FALSE;
+	      result = false;
 	    }
 	}
     }
@@ -4494,7 +4527,7 @@ _bfd_XXi_final_link_postscript (bfd * ab
   h1 = coff_link_hash_lookup (coff_hash_table (info),
 			      (bfd_get_symbol_leading_char (abfd) != 0
 			       ? "__tls_used" : "_tls_used"),
-			      FALSE, FALSE, TRUE);
+			      false, false, true);
   if (h1 != NULL)
     {
       if ((h1->root.type == bfd_link_hash_defined
@@ -4511,13 +4544,13 @@ _bfd_XXi_final_link_postscript (bfd * ab
 	  _bfd_error_handler
 	    (_("%pB: unable to fill in DataDictionary[9] because __tls_used is missing"),
 	     abfd);
-	  result = FALSE;
+	  result = false;
 	}
      /* According to PECOFF sepcifications by Microsoft version 8.2
 	the TLS data directory consists of 4 pointers, followed
 	by two 4-byte integer. This implies that the total size
 	is different for 32-bit and 64-bit executables.  */
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) && !defined(COFF_WITH_peLoongArch64) && !defined (COFF_WITH_peRiscV64)
       pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].Size = 0x18;
 #else
       pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].Size = 0x28;
@@ -4526,32 +4559,26 @@ _bfd_XXi_final_link_postscript (bfd * ab
 
 /* If there is a .pdata section and we have linked pdata finally, we
      need to sort the entries ascending.  */
-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64)
+#if !defined(COFF_WITH_pep) && (defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) || defined(COFF_WITH_peLoongArch64) || defined (COFF_WITH_peRiscV64))
   {
     asection *sec = bfd_get_section_by_name (abfd, ".pdata");
 
     if (sec)
       {
 	bfd_size_type x = sec->rawsize;
-	bfd_byte *tmp_data = NULL;
-
-	if (x)
-	  tmp_data = bfd_malloc (x);
+	bfd_byte *tmp_data;
 
-	if (tmp_data != NULL)
+	if (bfd_malloc_and_get_section (abfd, sec, &tmp_data))
 	  {
-	    if (bfd_get_section_contents (abfd, sec, tmp_data, 0, x))
-	      {
-		qsort (tmp_data,
-		       (size_t) (x / 12),
-		       12, sort_x64_pdata);
-		bfd_set_section_contents (pfinfo->output_bfd, sec,
-					  tmp_data, 0, x);
-	      }
+	    qsort (tmp_data,
+		   (size_t) (x / 12),
+		   12, sort_x64_pdata);
+	    bfd_set_section_contents (pfinfo->output_bfd, sec,
+				      tmp_data, 0, x);
 	    free (tmp_data);
 	  }
 	else
-	  result = FALSE;
+	  result = false;
       }
   }
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/plugin.c ./bfd/plugin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/plugin.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/plugin.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Plugin support for BFD.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -83,6 +83,7 @@ dlerror (void)
 #define bfd_plugin_bfd_is_target_special_symbol	      _bfd_bool_bfd_asymbol_false
 #define bfd_plugin_get_lineno			      _bfd_nosymbols_get_lineno
 #define bfd_plugin_find_nearest_line		      _bfd_nosymbols_find_nearest_line
+#define bfd_plugin_find_nearest_line_with_alt	      _bfd_nosymbols_find_nearest_line_with_alt
 #define bfd_plugin_find_line			      _bfd_nosymbols_find_line
 #define bfd_plugin_find_inliner_info		      _bfd_nosymbols_find_inliner_info
 #define bfd_plugin_get_symbol_version_string	      _bfd_nosymbols_get_symbol_version_string
@@ -124,13 +125,48 @@ message (int level ATTRIBUTE_UNUSED,
   return LDPS_OK;
 }
 
+struct plugin_list_entry
+{
+  /* These must be initialized for each IR object with LTO wrapper.  */
+  ld_plugin_claim_file_handler claim_file;
+  ld_plugin_claim_file_handler_v2 claim_file_v2;
+  ld_plugin_all_symbols_read_handler all_symbols_read;
+  ld_plugin_all_symbols_read_handler cleanup_handler;
+  bool has_symbol_type;
+
+  struct plugin_list_entry *next;
+
+  /* These can be reused for all IR objects.  */
+  const char *plugin_name;
+};
+
+static const char *plugin_program_name;
+
+void
+bfd_plugin_set_program_name (const char *program_name)
+{
+  plugin_program_name = program_name;
+}
+
+static struct plugin_list_entry *plugin_list = NULL;
+static struct plugin_list_entry *current_plugin = NULL;
+
 /* Register a claim-file handler. */
-static ld_plugin_claim_file_handler claim_file = NULL;
 
 static enum ld_plugin_status
 register_claim_file (ld_plugin_claim_file_handler handler)
 {
-  claim_file = handler;
+  current_plugin->claim_file = handler;
+  return LDPS_OK;
+}
+
+
+/* Register a claim-file handler, version 2. */
+
+static enum ld_plugin_status
+register_claim_file_v2 (ld_plugin_claim_file_handler_v2 handler)
+{
+  current_plugin->claim_file_v2 = handler;
   return LDPS_OK;
 }
 
@@ -143,6 +179,9 @@ add_symbols (void * handle,
   struct plugin_data_struct *plugin_data =
     bfd_alloc (abfd, sizeof (plugin_data_struct));
 
+  if (!plugin_data)
+    return LDPS_ERR;
+
   plugin_data->nsyms = nsyms;
   plugin_data->syms = syms;
 
@@ -153,44 +192,83 @@ add_symbols (void * handle,
   return LDPS_OK;
 }
 
-static const char *plugin_program_name;
-
-void
-bfd_plugin_set_program_name (const char *program_name)
+static enum ld_plugin_status
+add_symbols_v2 (void *handle, int nsyms,
+		const struct ld_plugin_symbol *syms)
 {
-  plugin_program_name = program_name;
+  current_plugin->has_symbol_type = true;
+  return add_symbols (handle, nsyms, syms);
 }
 
 int
 bfd_plugin_open_input (bfd *ibfd, struct ld_plugin_input_file *file)
 {
   bfd *iobfd;
+  int fd;
 
   iobfd = ibfd;
   while (iobfd->my_archive
 	 && !bfd_is_thin_archive (iobfd->my_archive))
     iobfd = iobfd->my_archive;
-  file->name = iobfd->filename;
+  file->name = bfd_get_filename (iobfd);
 
   if (!iobfd->iostream && !bfd_open_file (iobfd))
     return 0;
 
-  /* The plugin API expects that the file descriptor won't be closed
-     and reused as done by the bfd file cache.  So open it again.
-     dup isn't good enough.  plugin IO uses lseek/read while BFD uses
-     fseek/fread.  It isn't wise to mix the unistd and stdio calls on
-     the same underlying file descriptor.  */
-  file->fd = open (file->name, O_RDONLY | O_BINARY);
-  if (file->fd < 0)
-    return 0;
+  /* Reuse the archive plugin file descriptor.  */
+  if (iobfd != ibfd)
+    fd = iobfd->archive_plugin_fd;
+  else
+    fd = -1;
+
+  if (fd < 0)
+    {
+      /* The plugin API expects that the file descriptor won't be closed
+	 and reused as done by the bfd file cache.  So open it again.
+	 dup isn't good enough.  plugin IO uses lseek/read while BFD uses
+	 fseek/fread.  It isn't wise to mix the unistd and stdio calls on
+	 the same underlying file descriptor.  */
+      fd = open (file->name, O_RDONLY | O_BINARY);
+      if (fd < 0)
+	{
+#ifndef EMFILE
+	  return 0;
+#else
+	  if (errno != EMFILE)
+	    return 0;
+
+#ifdef HAVE_GETRLIMIT
+	  struct rlimit lim;
+
+	  /* Complicated links involving lots of files and/or large
+	     archives can exhaust the number of file descriptors
+	     available to us.  If possible, try to allocate more
+	     descriptors.  */
+	  if (getrlimit (RLIMIT_NOFILE, & lim) == 0
+	      && lim.rlim_cur < lim.rlim_max)
+	    {
+	      lim.rlim_cur = lim.rlim_max;
+	      if (setrlimit (RLIMIT_NOFILE, &lim) == 0)
+		fd = open (file->name, O_RDONLY | O_BINARY);
+	    }
+
+	  if (fd < 0)
+#endif
+	    {
+	      _bfd_error_handler (_("plugin framework: out of file descriptors. Try using fewer objects/archives\n"));
+	      return 0;
+	    }
+#endif
+	}
+    }
 
   if (iobfd == ibfd)
     {
       struct stat stat_buf;
 
-      if (fstat (file->fd, &stat_buf))
+      if (fstat (fd, &stat_buf))
 	{
-	  close(file->fd);
+	  close (fd);
 	  return 0;
 	}
 
@@ -199,12 +277,51 @@ bfd_plugin_open_input (bfd *ibfd, struct
     }
   else
     {
+      /* Cache the archive plugin file descriptor.  */
+      iobfd->archive_plugin_fd = fd;
+      iobfd->archive_plugin_fd_open_count++;
+
       file->offset = ibfd->origin;
       file->filesize = arelt_size (ibfd);
     }
+
+  file->fd = fd;
   return 1;
 }
 
+/* Close the plugin file descriptor FD.  If ABFD isn't NULL, it is an
+   archive member.   */
+
+void
+bfd_plugin_close_file_descriptor (bfd *abfd, int fd)
+{
+  if (abfd == NULL)
+    close (fd);
+  else
+    {
+      while (abfd->my_archive
+	     && !bfd_is_thin_archive (abfd->my_archive))
+	abfd = abfd->my_archive;
+
+      /* Close the file descriptor if there is no archive plugin file
+	 descriptor.  */
+      if (abfd->archive_plugin_fd == -1)
+	{
+	  close (fd);
+	  return;
+	}
+
+      abfd->archive_plugin_fd_open_count--;
+      /* Dup the archive plugin file descriptor for later use, which
+	 will be closed by _bfd_archive_close_and_cleanup.  */
+      if (abfd->archive_plugin_fd_open_count == 0)
+	{
+	  abfd->archive_plugin_fd = dup (fd);
+	  close (fd);
+	}
+    }
+}
+
 static int
 try_claim (bfd *abfd)
 {
@@ -212,68 +329,81 @@ try_claim (bfd *abfd)
   struct ld_plugin_input_file file;
 
   file.handle = abfd;
-  if (!bfd_plugin_open_input (abfd, &file))
-    return 0;
-  if (claim_file)
-    claim_file (&file, &claimed);
-  close (file.fd);
+  if (bfd_plugin_open_input (abfd, &file)
+      && current_plugin->claim_file)
+    {
+      current_plugin->claim_file (&file, &claimed);
+      bfd_plugin_close_file_descriptor ((abfd->my_archive != NULL
+					 ? abfd : NULL),
+					file.fd);
+    }
+
   return claimed;
 }
 
-struct plugin_list_entry
+static bool
+try_load_plugin (const char *pname,
+		 struct plugin_list_entry *plugin_list_iter,
+		 bfd *abfd,
+		 bool build_list_p)
 {
-  void *                        handle;
-  ld_plugin_claim_file_handler  claim_file;
-  struct plugin_list_entry *    next;
-};
-
-static struct plugin_list_entry * plugin_list = NULL;
-
-static int
-try_load_plugin (const char *pname, bfd *abfd, int *has_plugin_p)
-{
-  void *plugin_handle = NULL;
-  struct ld_plugin_tv tv[4];
+  void *plugin_handle;
+  struct ld_plugin_tv tv[6];
   int i;
   ld_plugin_onload onload;
   enum ld_plugin_status status;
-  struct plugin_list_entry *plugin_list_iter;
+  bool result = false;
+
+  /* NB: Each object is independent.  Reuse the previous plugin from
+     the last run will lead to wrong result.  */
+  if (current_plugin)
+    memset (current_plugin, 0,
+	    offsetof (struct plugin_list_entry, next));
 
-  *has_plugin_p = 0;
+  if (plugin_list_iter)
+    pname = plugin_list_iter->plugin_name;
 
   plugin_handle = dlopen (pname, RTLD_NOW);
   if (!plugin_handle)
     {
-      _bfd_error_handler ("%s\n", dlerror ());
-      return 0;
+      /* If we are building a list of viable plugins, then
+	 we do not bother the user with the details of any
+	 plugins that cannot be loaded.  */
+      if (! build_list_p)
+	_bfd_error_handler ("Failed to load plugin '%s', reason: %s\n",
+			    pname, dlerror ());
+      return false;
     }
 
-  for (plugin_list_iter = plugin_list;
-       plugin_list_iter;
-       plugin_list_iter = plugin_list_iter->next)
+  if (plugin_list_iter == NULL)
     {
-      if (plugin_handle == plugin_list_iter->handle)
-	{
-	  dlclose (plugin_handle);
-	  if (!plugin_list_iter->claim_file)
-	    return 0;
+      size_t length_plugin_name = strlen (pname) + 1;
+      char *plugin_name = bfd_malloc (length_plugin_name);
 
-	  register_claim_file (plugin_list_iter->claim_file);
-	  goto have_claim_file;
+      if (plugin_name == NULL)
+	goto short_circuit;
+      plugin_list_iter = bfd_malloc (sizeof *plugin_list_iter);
+      if (plugin_list_iter == NULL)
+	{
+	  free (plugin_name);
+	  goto short_circuit;
 	}
+      /* Make a copy of PNAME since PNAME from load_plugin () will be
+	 freed.  */
+      memcpy (plugin_name, pname, length_plugin_name);
+      memset (plugin_list_iter, 0, sizeof (*plugin_list_iter));
+      plugin_list_iter->plugin_name = plugin_name;
+      plugin_list_iter->next = plugin_list;
+      plugin_list = plugin_list_iter;
     }
 
-  plugin_list_iter = bfd_malloc (sizeof *plugin_list_iter);
-  if (plugin_list_iter == NULL)
-    return 0;
-  plugin_list_iter->handle = plugin_handle;
-  plugin_list_iter->claim_file = NULL;
-  plugin_list_iter->next = plugin_list;
-  plugin_list = plugin_list_iter;
+  current_plugin = plugin_list_iter;
+  if (build_list_p)
+    goto short_circuit;
 
   onload = dlsym (plugin_handle, "onload");
   if (!onload)
-    return 0;
+    goto short_circuit;
 
   i = 0;
   tv[i].tv_tag = LDPT_MESSAGE;
@@ -284,40 +414,47 @@ try_load_plugin (const char *pname, bfd
   tv[i].tv_u.tv_register_claim_file = register_claim_file;
 
   ++i;
+  tv[i].tv_tag = LDPT_REGISTER_CLAIM_FILE_HOOK_V2;
+  tv[i].tv_u.tv_register_claim_file_v2 = register_claim_file_v2;
+
+  ++i;
   tv[i].tv_tag = LDPT_ADD_SYMBOLS;
   tv[i].tv_u.tv_add_symbols = add_symbols;
 
   ++i;
+  tv[i].tv_tag = LDPT_ADD_SYMBOLS_V2;
+  tv[i].tv_u.tv_add_symbols = add_symbols_v2;
+
+  ++i;
   tv[i].tv_tag = LDPT_NULL;
   tv[i].tv_u.tv_val = 0;
 
+  /* LTO plugin will call handler hooks to set up plugin handlers.  */
   status = (*onload)(tv);
 
   if (status != LDPS_OK)
-    return 0;
-
-  plugin_list_iter->claim_file = claim_file;
-
-have_claim_file:
-  *has_plugin_p = 1;
+    goto short_circuit;
 
   abfd->plugin_format = bfd_plugin_no;
 
-  if (!claim_file)
-    return 0;
+  if (!current_plugin->claim_file)
+    goto short_circuit;
 
   if (!try_claim (abfd))
-    return 0;
+    goto short_circuit;
 
   abfd->plugin_format = bfd_plugin_yes;
-  return 1;
+  result = true;
+
+ short_circuit:
+  dlclose (plugin_handle);
+  return result;
 }
 
 /* There may be plugin libraries in lib/bfd-plugins.  */
+static int has_plugin_list = -1;
 
-static int has_plugin = -1;
-
-static const bfd_target *(*ld_plugin_object_p) (bfd *);
+static bfd_cleanup (*ld_plugin_object_p) (bfd *, bool);
 
 static const char *plugin_name;
 
@@ -325,32 +462,31 @@ void
 bfd_plugin_set_plugin (const char *p)
 {
   plugin_name = p;
-  has_plugin = p != NULL;
 }
 
 /* Return TRUE if a plugin library is used.  */
 
-bfd_boolean
+bool
 bfd_plugin_specified_p (void)
 {
-  return has_plugin > 0;
+  return plugin_list != NULL;
 }
 
 /* Return TRUE if ABFD can be claimed by linker LTO plugin.  */
 
-bfd_boolean
+bool
 bfd_link_plugin_object_p (bfd *abfd)
 {
   if (ld_plugin_object_p)
-    return ld_plugin_object_p (abfd) != NULL;
-  return FALSE;
+    return ld_plugin_object_p (abfd, false) != NULL;
+  return false;
 }
 
 extern const bfd_target plugin_vec;
 
 /* Return TRUE if TARGET is a pointer to plugin_vec.  */
 
-bfd_boolean
+bool
 bfd_plugin_target_p (const bfd_target *target)
 {
   return target == &plugin_vec;
@@ -359,13 +495,13 @@ bfd_plugin_target_p (const bfd_target *t
 /* Register OBJECT_P to be used by bfd_plugin_object_p.  */
 
 void
-register_ld_plugin_object_p (const bfd_target *(*object_p) (bfd *))
+register_ld_plugin_object_p (bfd_cleanup (*object_p) (bfd *, bool))
 {
   ld_plugin_object_p = object_p;
 }
 
-static int
-load_plugin (bfd *abfd)
+static void
+build_plugin_list (bfd *abfd)
 {
   /* The intent was to search ${libdir}/bfd-plugins for plugins, but
      unfortunately the original implementation wasn't precisely that
@@ -374,17 +510,10 @@ load_plugin (bfd *abfd)
   static const char *path[]
     = { LIBDIR "/bfd-plugins", BINDIR "/../lib/bfd-plugins" };
   struct stat last_st;
-  int found = 0;
   unsigned int i;
 
-  if (!has_plugin)
-    return found;
-
-  if (plugin_name)
-    return try_load_plugin (plugin_name, abfd, &has_plugin);
-
-  if (plugin_program_name == NULL)
-    return found;
+  if (has_plugin_list >= 0)
+    return;
 
   /* Try not to search the same dir twice, by looking at st_dev and
      st_ino for the dir.  If we are on a file system that always sets
@@ -419,83 +548,95 @@ load_plugin (bfd *abfd)
 
 		  full_name = concat (plugin_dir, "/", ent->d_name, NULL);
 		  if (stat (full_name, &st) == 0 && S_ISREG (st.st_mode))
-		    {
-		      int valid_plugin;
-
-		      found = try_load_plugin (full_name, abfd, &valid_plugin);
-		      if (has_plugin <= 0)
-			has_plugin = valid_plugin;
-		    }
+		    (void) try_load_plugin (full_name, NULL, abfd, true);
 		  free (full_name);
-		  if (found)
-		    break;
 		}
 	      closedir (d);
 	    }
 	  free (plugin_dir);
 	}
-      if (found)
-	break;
     }
 
-  return found;
+  has_plugin_list = plugin_list != NULL;
+}
+
+static bool
+load_plugin (bfd *abfd)
+{
+  struct plugin_list_entry *plugin_list_iter;
+
+  if (plugin_name)
+    return try_load_plugin (plugin_name, plugin_list, abfd, false);
+
+  if (plugin_program_name == NULL)
+    return false;
+
+  build_plugin_list (abfd);
+
+  for (plugin_list_iter = plugin_list;
+       plugin_list_iter;
+       plugin_list_iter = plugin_list_iter->next)
+    if (try_load_plugin (NULL, plugin_list_iter, abfd, false))
+      return true;
+
+  return false;
 }
 
 
-static const bfd_target *
+static bfd_cleanup
 bfd_plugin_object_p (bfd *abfd)
 {
   if (ld_plugin_object_p)
-    return ld_plugin_object_p (abfd);
+    return ld_plugin_object_p (abfd, false);
 
   if (abfd->plugin_format == bfd_plugin_unknown && !load_plugin (abfd))
     return NULL;
 
-  return abfd->plugin_format == bfd_plugin_yes ? abfd->xvec : NULL;
+  return abfd->plugin_format == bfd_plugin_yes ? _bfd_no_cleanup : NULL;
 }
 
 /* Copy any private info we understand from the input bfd
    to the output bfd.  */
 
-static bfd_boolean
+static bool
 bfd_plugin_bfd_copy_private_bfd_data (bfd *ibfd ATTRIBUTE_UNUSED,
 				      bfd *obfd ATTRIBUTE_UNUSED)
 {
   BFD_ASSERT (0);
-  return TRUE;
+  return true;
 }
 
 /* Copy any private info we understand from the input section
    to the output section.  */
 
-static bfd_boolean
+static bool
 bfd_plugin_bfd_copy_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED,
 					  asection *isection ATTRIBUTE_UNUSED,
 					  bfd *obfd ATTRIBUTE_UNUSED,
 					  asection *osection ATTRIBUTE_UNUSED)
 {
   BFD_ASSERT (0);
-  return TRUE;
+  return true;
 }
 
 /* Copy any private info we understand from the input symbol
    to the output symbol.  */
 
-static bfd_boolean
+static bool
 bfd_plugin_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED,
 					 asymbol *isymbol ATTRIBUTE_UNUSED,
 					 bfd *obfd ATTRIBUTE_UNUSED,
 					 asymbol *osymbol ATTRIBUTE_UNUSED)
 {
   BFD_ASSERT (0);
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
-bfd_plugin_bfd_print_private_bfd_data (bfd *abfd ATTRIBUTE_UNUSED, PTR ptr ATTRIBUTE_UNUSED)
+static bool
+bfd_plugin_bfd_print_private_bfd_data (bfd *abfd ATTRIBUTE_UNUSED, void *ptr ATTRIBUTE_UNUSED)
 {
   BFD_ASSERT (0);
-  return TRUE;
+  return true;
 }
 
 static char *
@@ -557,9 +698,15 @@ bfd_plugin_canonicalize_symtab (bfd *abf
   struct plugin_data_struct *plugin_data = abfd->tdata.plugin_data;
   long nsyms = plugin_data->nsyms;
   const struct ld_plugin_symbol *syms = plugin_data->syms;
-  static asection fake_section
-    = BFD_FAKE_SECTION (fake_section, NULL, "plug", 0,
+  static asection fake_text_section
+    = BFD_FAKE_SECTION (fake_text_section, NULL, "plug", 0,
 			SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS);
+  static asection fake_data_section
+    = BFD_FAKE_SECTION (fake_data_section, NULL, "plug", 0,
+			SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS);
+  static asection fake_bss_section
+    = BFD_FAKE_SECTION (fake_bss_section, NULL, "plug", 0,
+			SEC_ALLOC);
   static asection fake_common_section
     = BFD_FAKE_SECTION (fake_common_section, NULL, "plug", 0, SEC_IS_COMMON);
   int i;
@@ -586,7 +733,25 @@ bfd_plugin_canonicalize_symtab (bfd *abf
 	  break;
 	case LDPK_DEF:
 	case LDPK_WEAKDEF:
-	  s->section = &fake_section;
+	  if (current_plugin->has_symbol_type)
+	    switch (syms[i].symbol_type)
+	      {
+	      default:
+		/* FIXME: Should we issue an error here ?  */
+	      case LDST_UNKNOWN:
+		/* What is the best fake section for LDST_UNKNOWN?  */
+	      case LDST_FUNCTION:
+		s->section = &fake_text_section;
+		break;
+	      case LDST_VARIABLE:
+		if (syms[i].section_kind == LDSSK_BSS)
+		  s->section = &fake_bss_section;
+		else
+		  s->section = &fake_data_section;
+		break;
+	      }
+	  else
+	    s->section = &fake_text_section;
 	  break;
 	default:
 	  BFD_ASSERT (0);
@@ -600,7 +765,7 @@ bfd_plugin_canonicalize_symtab (bfd *abf
 
 static void
 bfd_plugin_print_symbol (bfd *abfd ATTRIBUTE_UNUSED,
-			 PTR afile ATTRIBUTE_UNUSED,
+			 void *afile ATTRIBUTE_UNUSED,
 			 asymbol *symbol ATTRIBUTE_UNUSED,
 			 bfd_print_symbol_type how ATTRIBUTE_UNUSED)
 {
@@ -650,6 +815,7 @@ const bfd_target plugin_vec =
   '/',				/* ar_pad_char.  */
   15,				/* ar_max_namelen.  */
   255,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
 
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
@@ -695,4 +861,4 @@ const bfd_target plugin_vec =
 
   NULL				/* backend_data.  */
 };
-#endif /* BFD_SUPPORTS_PLUGIN */
+#endif /* BFD_SUPPORTS_PLUGINS */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/plugin.h ./bfd/plugin.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/plugin.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/plugin.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Plugin support for BFD.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -24,10 +24,11 @@
 void bfd_plugin_set_program_name (const char *);
 int bfd_plugin_open_input (bfd *, struct ld_plugin_input_file *);
 void bfd_plugin_set_plugin (const char *);
-bfd_boolean bfd_plugin_target_p (const bfd_target *);
-bfd_boolean bfd_plugin_specified_p (void);
-bfd_boolean bfd_link_plugin_object_p (bfd *);
-void register_ld_plugin_object_p (const bfd_target *(*object_p) (bfd *));
+bool bfd_plugin_target_p (const bfd_target *);
+bool bfd_plugin_specified_p (void);
+bool bfd_link_plugin_object_p (bfd *);
+void register_ld_plugin_object_p (bfd_cleanup (*object_p) (bfd *, bool));
+void bfd_plugin_close_file_descriptor (bfd *, int);
 
 typedef struct plugin_data_struct
 {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/bfd.pot ./bfd/po/bfd.pot
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/bfd.pot	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/bfd.pot	2024-02-01 01:47:14.000000000 +0000
@@ -7,246 +7,266 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2019-01-19 16:33+0000\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2024-01-15 14:58+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: aout-cris.c:200
+#: aout-cris.c:196
 #, c-format
 msgid "%pB: unsupported relocation type exported: %#x"
 msgstr ""
 
-#: aout-cris.c:244
+#: aout-cris.c:242
 #, c-format
 msgid "%pB: unsupported relocation type imported: %#x"
 msgstr ""
 
-#: aout-cris.c:256
+#: aout-cris.c:254
 #, c-format
 msgid "%pB: bad relocation record imported: %d"
 msgstr ""
 
-#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1237 pdp11.c:1510
 #, c-format
 msgid "%pB: can not represent section `%pA' in a.out object file format"
 msgstr ""
 
-#: aoutx.h:1582 pdp11.c:1371
+#: aoutx.h:1576 pdp11.c:1482
 #, c-format
 msgid ""
 "%pB: can not represent section for symbol `%s' in a.out object file format"
 msgstr ""
 
-#: aoutx.h:1585 vms-alpha.c:7860
+#: aoutx.h:1579 vms-alpha.c:8461
 msgid "*unknown*"
 msgstr ""
 
-#: aoutx.h:1721
+#: aoutx.h:1715 pdp11.c:1578
 #, c-format
 msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
 msgstr ""
 
-#: aoutx.h:2412 aoutx.h:2430
+#: aoutx.h:1963
+#, c-format
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr ""
+
+#: aoutx.h:2407 aoutx.h:2425 pdp11.c:2059
 #, c-format
 msgid "%pB: attempt to write out unknown reloc type"
 msgstr ""
 
-#: aoutx.h:4086
+#: aoutx.h:4080 pdp11.c:3443
 #, c-format
 msgid "%pB: unsupported relocation type"
 msgstr ""
 
 #. Unknown relocation.
-#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772
-#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798
-#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517
-#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698
-#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467
-#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522
-#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381
-#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302
-#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539
-#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417
-#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354
-#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692
-#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137
-#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236
-#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037
-#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420
-#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292
-#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508
-#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642
-#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270
-#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250
-#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459
-#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249
-#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958
-#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921
-#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378
-#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955
-#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:2125
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:2223 elf32-ia64.c:210
-#: elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862
+#: aoutx.h:4400 coff-alpha.c:601 coff-mips.c:356 coff-rs6000.c:3050
+#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:262 elf-hppa.h:798
+#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
+#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1063 elf32-bfin.c:4686
+#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
+#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
+#: elf32-dlx.c:546 elf32-epiphany.c:373 elf32-fr30.c:381 elf32-frv.c:2559
+#: elf32-frv.c:6240 elf32-ft32.c:304 elf32-h8300.c:302 elf32-i386.c:394
+#: elf32-ip2k.c:1241 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
+#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
+#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
+#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:708
+#: elf32-microblaze.c:1020 elf32-mips.c:2242 elf32-moxie.c:137
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3288
+#: elf32-nds32.c:3309 elf32-nds32.c:5078 elf32-nios2.c:3019 elf32-or1k.c:1087
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
+#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
+#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
+#: elf32-v850.c:1924 elf32-v850.c:4250 elf32-vax.c:289 elf32-visium.c:481
+#: elf32-wasm32.c:105 elf32-xgate.c:418 elf32-xstormy16.c:395
+#: elf32-xtensa.c:510 elf32-xtensa.c:544 elf32-z80.c:331 elf64-alpha.c:1114
+#: elf64-alpha.c:4056 elf64-alpha.c:4204 elf64-bpf.c:132 elf64-ia64-vms.c:255
+#: elf64-ia64-vms.c:3426 elf64-mips.c:3965 elf64-mips.c:3981 elf64-mmix.c:1264
+#: elf64-nfp.c:151 elf64-ppc.c:1031 elf64-ppc.c:1385 elf64-ppc.c:1394
+#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3799
+#: elfxx-ia64.c:324 elfxx-loongarch.c:1895 elfxx-riscv.c:989 elfxx-sparc.c:589
+#: elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947
+#: elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313
+#: elfnn-ia64.c:214
+#: elfnn-ia64.c:3821
+#: elfnn-kvx.c:259
 #, c-format
 msgid "%pB: unsupported relocation type %#x"
 msgstr ""
 
-#: aoutx.h:5434 pdp11.c:3694
+#: aoutx.h:5427 pdp11.c:3866
 #, c-format
 msgid "%pB: relocatable link from %s to %s not supported"
 msgstr ""
 
-#: archive.c:2214
+#: arc-got.h:69
+#, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr ""
+
+#: archive.c:753
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr ""
+
+#: archive.c:2294
 msgid "warning: writing archive was slow: rewriting timestamp"
 msgstr ""
 
-#: archive.c:2330 linker.c:1429
+#: archive.c:2362 archive.c:2423 elflink.c:4800 linker.c:1434
 #, c-format
 msgid "%pB: plugin needed to handle lto object"
 msgstr ""
 
-#: archive.c:2559
+#: archive.c:2655
 msgid "Reading archive file mod timestamp"
 msgstr ""
 
-#: archive.c:2583
+#: archive.c:2686
 msgid "Writing updated armap timestamp"
 msgstr ""
 
-#: bfd.c:449
+#: bfd.c:740
 msgid "no error"
 msgstr ""
 
-#: bfd.c:450
+#: bfd.c:741
 msgid "system call error"
 msgstr ""
 
-#: bfd.c:451
+#: bfd.c:742
 msgid "invalid bfd target"
 msgstr ""
 
-#: bfd.c:452
+#: bfd.c:743
 msgid "file in wrong format"
 msgstr ""
 
-#: bfd.c:453
+#: bfd.c:744
 msgid "archive object file in wrong format"
 msgstr ""
 
-#: bfd.c:454
+#: bfd.c:745
 msgid "invalid operation"
 msgstr ""
 
-#: bfd.c:455
+#: bfd.c:746
 msgid "memory exhausted"
 msgstr ""
 
-#: bfd.c:456
+#: bfd.c:747
 msgid "no symbols"
 msgstr ""
 
-#: bfd.c:457
+#: bfd.c:748
 msgid "archive has no index; run ranlib to add one"
 msgstr ""
 
-#: bfd.c:458
+#: bfd.c:749
 msgid "no more archived files"
 msgstr ""
 
-#: bfd.c:459
+#: bfd.c:750
 msgid "malformed archive"
 msgstr ""
 
-#: bfd.c:460
+#: bfd.c:751
 msgid "DSO missing from command line"
 msgstr ""
 
-#: bfd.c:461
+#: bfd.c:752
 msgid "file format not recognized"
 msgstr ""
 
-#: bfd.c:462
+#: bfd.c:753
 msgid "file format is ambiguous"
 msgstr ""
 
-#: bfd.c:463
+#: bfd.c:754
 msgid "section has no contents"
 msgstr ""
 
-#: bfd.c:464
+#: bfd.c:755
 msgid "nonrepresentable section on output"
 msgstr ""
 
-#: bfd.c:465
+#: bfd.c:756
 msgid "symbol needs debug section which does not exist"
 msgstr ""
 
-#: bfd.c:466
+#: bfd.c:757
 msgid "bad value"
 msgstr ""
 
-#: bfd.c:467
+#: bfd.c:758
 msgid "file truncated"
 msgstr ""
 
-#: bfd.c:468
+#: bfd.c:759
 msgid "file too big"
 msgstr ""
 
-#: bfd.c:469
+#: bfd.c:760
+msgid "sorry, cannot handle this file"
+msgstr ""
+
+#: bfd.c:761
 #, c-format
 msgid "error reading %s: %s"
 msgstr ""
 
-#: bfd.c:470
+#: bfd.c:762
 msgid "#<invalid error code>"
 msgstr ""
 
-#: bfd.c:1429
+#: bfd.c:2019
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr ""
 
-#: bfd.c:1442
+#: bfd.c:2032
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d in %s\n"
 msgstr ""
 
-#: bfd.c:1447
+#: bfd.c:2037
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d\n"
 msgstr ""
 
-#: bfd.c:1449
+#: bfd.c:2039
 msgid "Please report this bug.\n"
 msgstr ""
 
-#: bfdwin.c:206
+#: bfdwin.c:261
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
 msgstr ""
 
-#: bfdwin.c:209
+#: bfdwin.c:264
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr ""
 
-#: binary.c:276
+#: binary.c:277
 #, c-format
 msgid "warning: writing section `%pA' at huge (ie negative) file offset"
 msgstr ""
 
-#: cache.c:271
+#: cache.c:275
 #, c-format
-msgid "reopening %pB: %s\n"
+msgid "reopening %pB: %s"
 msgstr ""
 
 #: coff-alpha.c:450
@@ -256,536 +276,612 @@ msgid ""
 "to generate uncompressed binaries"
 msgstr ""
 
-#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950
+#: coff-alpha.c:867 coff-alpha.c:894 coff-alpha.c:2004 coff-mips.c:948
 msgid "GP relative relocation used when GP not defined"
 msgstr ""
 
-#: coff-alpha.c:1443
+#: coff-alpha.c:1151 coff-z80.c:351 coff-z8k.c:214 elf32-nds32.c:13189
+#: elfxx-mips.c:13520 reloc.c:8683 reloc16.c:314
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgstr ""
+
+#: coff-alpha.c:1157 coff-z80.c:477 coff-z8k.c:378 elfxx-mips.c:13530
+#: reloc.c:8693
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr ""
+
+#: coff-alpha.c:1163 elfxx-mips.c:13539 reloc.c:8702
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr ""
+
+#: coff-alpha.c:1489
 msgid "using multiple gp values"
 msgstr ""
 
-#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411
+#: coff-alpha.c:1987
 #, c-format
-msgid "%pB: %s unsupported"
+msgid "%X%P: %pB(%pA): relocation out of range\n"
+msgstr ""
+
+#: coff-alpha.c:1999
+#, c-format
+msgid "%X%P: %pB(%pA): relocation is not supported\n"
 msgstr ""
 
-#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330
-#: elf64-mips.c:3451 elfn32-mips.c:3276
+#: coff-go32.c:167 coffswap.h:812
+#, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr ""
+
+#: coff-mips.c:638 elf32-mips.c:1743 elf32-score.c:433 elf32-score7.c:333
+#: elf64-mips.c:3450 elfn32-mips.c:3277
 msgid "GP relative relocation when _gp not defined"
 msgstr ""
 
-#: coff-rs6000.c:2858
+#: coff-rs6000.c:484 coff64-rs6000.c:377
+#, c-format
+msgid "%pB: unsupported swap_aux_in for storage class %#x"
+msgstr ""
+
+#: coff-rs6000.c:571 coff64-rs6000.c:497
+#, c-format
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr ""
+
+#: coff-rs6000.c:3140
 #, c-format
 msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
 msgstr ""
 
-#: coff-rs6000.c:3620 coff64-rs6000.c:2145
+#: coff-rs6000.c:3264 coff64-rs6000.c:848
+#, c-format
+msgid "Unable to find the stub entry targeting %s"
+msgstr ""
+
+#: coff-rs6000.c:3379
+#, c-format
+msgid "%pB: TLS relocation at 0x%<PRIx64> over non-TLS symbol %s (0x%x)\n"
+msgstr ""
+
+#: coff-rs6000.c:3392
+#, c-format
+msgid "%pB: TLS local relocation at 0x%<PRIx64> over imported symbol %s\n"
+msgstr ""
+
+#: coff-rs6000.c:3798
+#, c-format
+msgid "%pB: relocation (%d) at 0x%<PRIx64> has wrong r_rsize (0x%x)\n"
+msgstr ""
+
+#: coff-rs6000.c:4060 coff64-rs6000.c:2030
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized smclas %d"
 msgstr ""
 
-#: coff-sh.c:780 elf32-sh.c:521
+#: coff-sh.c:781 elf32-sh.c:521
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES offset"
 msgstr ""
 
-#: coff-sh.c:791
+#: coff-sh.c:792
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn %#x"
 msgstr ""
 
-#: coff-sh.c:809 elf32-sh.c:552
+#: coff-sh.c:810 elf32-sh.c:552
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
 msgstr ""
 
-#: coff-sh.c:834 elf32-sh.c:568
+#: coff-sh.c:835 elf32-sh.c:568
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: could not find expected reloc"
 msgstr ""
 
-#: coff-sh.c:851 elf32-sh.c:597
+#: coff-sh.c:852 elf32-sh.c:597
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
 msgstr ""
 
-#: coff-sh.c:977 elf32-sh.c:727
+#: coff-sh.c:973 elf32-sh.c:727
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
 msgstr ""
 
-#: coff-sh.c:987 elf32-sh.c:738
+#: coff-sh.c:983 elf32-sh.c:738
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad count"
 msgstr ""
 
-#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512
+#: coff-sh.c:1349 coff-sh.c:2636 elf32-sh.c:1138 elf32-sh.c:1506
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
 msgstr ""
 
-#: coff-sh.c:1454
+#: coff-sh.c:1443
 #, c-format
 msgid "%pB: fatal: generic symbols retrieved before relaxing"
 msgstr ""
 
-#: coff-sh.c:2785 cofflink.c:2965
+#: coff-sh.c:2773 cofflink.c:2947
 #, c-format
 msgid "%pB: illegal symbol index %ld in relocs"
 msgstr ""
 
-#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:338 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5314
 #, c-format
 msgid "%pB: warning: illegal symbol index %ld in relocs"
 msgstr ""
 
-#: coff-tic80.c:441
+#: coff-x86_64.c:147
+msgid "R_AMD64_IMAGEBASE with __ImageBase undefined"
+msgstr ""
+
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
 #, c-format
-msgid "unsupported relocation type %#x"
+msgid "%pB: C_STAT isn't supported by XCOFF64"
 msgstr ""
 
-#: coff-tic80.c:672 cofflink.c:3127
+#: coff64-rs6000.c:477
 #, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgid "%pB: wrong auxtype %#x for storage class %#x"
 msgstr ""
 
-#: coffcode.h:954
+#: coff64-rs6000.c:1598
+#, c-format
+msgid "%pB: relocation (%d) at (0x%<PRIx64>) has wrong r_rsize (0x%x)\n"
+msgstr ""
+
+#: coffcode.h:951
 #, c-format
 msgid "%pB: unable to load COMDAT section name"
 msgstr ""
 
-#. Malformed input files can trigger this test.
-#. cf PR 21781.
-#: coffcode.h:989
+#: coffcode.h:976
 #, c-format
-msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
+msgid "%pB: warning: no symbol for section '%s' found"
 msgstr ""
 
-#: coffcode.h:1001
+#: coffcode.h:1148
 #, c-format
-msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
+msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
 msgstr ""
 
-#: coffcode.h:1011
+#: coffcode.h:1159
 #, c-format
-msgid "%pB: warning: no symbol for section '%s' found"
+msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
 msgstr ""
 
 #. Generate a warning message rather using the 'unhandled'
 #. variable as this will allow some .sys files generate by
 #. other toolchains to be processed.  See bugzilla issue 196.
-#: coffcode.h:1237
+#: coffcode.h:1267
 #, c-format
 msgid "%pB: warning: ignoring section flag %s in section %s"
 msgstr ""
 
-#: coffcode.h:1306
+#: coffcode.h:1337
 #, c-format
 msgid "%pB (%s): section flag %s (%#lx) ignored"
 msgstr ""
 
-#: coffcode.h:1917
+#: coffcode.h:1954
 #, c-format
-msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
+msgid "%pB: overflow reloc count too small"
 msgstr ""
 
-#: coffcode.h:2315
+#: coffcode.h:1963 coffcode.h:2028
 #, c-format
-msgid "unrecognized TI COFF target id '0x%x'"
+msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
 msgstr ""
 
-#: coffcode.h:2599
+#: coffcode.h:2411
 #, c-format
-msgid "%pB: reloc against a non-existent symbol index: %ld"
+msgid "unrecognized TI COFF target id '0x%x'"
 msgstr ""
 
-#: coffcode.h:2910
+#: coffcode.h:2690
 #, c-format
-msgid "%pB: page size is too large (0x%x)"
+msgid "%pB: reloc against a non-existent symbol index: %ld"
 msgstr ""
 
-#: coffcode.h:3070
+#: coffcode.h:3162
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr ""
 
-#: coffcode.h:3489
+#: coffcode.h:3690
 #, c-format
 msgid "%pB: section %pA: string table overflow at offset %ld"
 msgstr ""
 
-#: coffcode.h:3589
+#: coffcode.h:3791
 #, c-format
 msgid "%pB:%s section %s: alignment 2**%u not representable"
 msgstr ""
 
-#: coffcode.h:4276
-#, c-format
-msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
-msgstr ""
-
-#: coffcode.h:4291
+#: coffcode.h:4532
 #, c-format
 msgid "%pB: warning: line number table read failed"
 msgstr ""
 
-#: coffcode.h:4325 coffcode.h:4339
+#: coffcode.h:4578 coffcode.h:4592
 #, c-format
 msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
 msgstr ""
 
-#: coffcode.h:4353
+#: coffcode.h:4606
 #, c-format
 msgid "%pB: warning: illegal symbol in line number entry %d"
 msgstr ""
 
-#: coffcode.h:4366
+#: coffcode.h:4619
 #, c-format
 msgid "%pB: warning: duplicate line number information for `%s'"
 msgstr ""
 
-#: coffcode.h:4774
+#: coffcode.h:5043
 #, c-format
 msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
 msgstr ""
 
-#: coffcode.h:4904
+#: coffcode.h:5183
 #, c-format
 msgid "warning: %pB: local symbol `%s' has no section"
 msgstr ""
 
-#: coffcode.h:5050
+#: coffcode.h:5354
 #, c-format
 msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
 msgstr ""
 
-#: coffgen.c:178 elf.c:1216
+#: coffgen.c:255 elf.c:1226
 #, c-format
-msgid "%pB: unable to initialize compress status for section %s"
+msgid "%pB: unable to compress section %s"
 msgstr ""
 
-#: coffgen.c:202 elf.c:1227
+#: coffgen.c:265 elf.c:1236
 #, c-format
-msgid "%pB: unable to initialize decompress status for section %s"
+msgid "%pB: unable to decompress section %s"
 msgstr ""
 
-#: coffgen.c:1657
-#, c-format
-msgid "%pB: corrupt symbol count: %#<PRIx64>"
-msgstr ""
-
-#. PR 21013: Provide an error message when the alloc fails.
-#: coffgen.c:1666
-#, c-format
-msgid ""
-"%pB: not enough memory to allocate space for %#<PRIx64> symbols of size "
-"%#<PRIx64>"
-msgstr ""
-
-#: coffgen.c:1735
+#: coffgen.c:1781
 #, c-format
 msgid "%pB: bad string table size %<PRIu64>"
 msgstr ""
 
-#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882
-#: xcofflink.c:4505
+#: coffgen.c:1931 coffgen.c:1981 coffgen.c:2031 coffgen.c:2050 cofflink.c:2012
+#: elf.c:2478 xcofflink.c:5532
 msgid "<corrupt>"
 msgstr ""
 
-#: coffgen.c:2114
+#: coffgen.c:2192
 #, c-format
 msgid "<corrupt info> %s"
 msgstr ""
 
-#: coffgen.c:2693 elflink.c:14322 linker.c:2959
+#: coffgen.c:2796 elflink.c:15219 linker.c:2985
 msgid "%F%P: already_linked_table: %E\n"
 msgstr ""
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3138 elflink.c:14159
 #, c-format
 msgid "removing unused section '%pA' in file '%pB'"
 msgstr ""
 
-#: coffgen.c:3111 elflink.c:13542
+#: coffgen.c:3215 elflink.c:14389
 msgid "warning: gc-sections option ignored"
 msgstr ""
 
-#: cofflink.c:352
+#: cofflink.c:398
 #, c-format
 msgid "warning: symbol `%s' is both section and non-section"
 msgstr ""
 
-#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953
+#: cofflink.c:503 elf64-ia64-vms.c:5200 elflink.c:5407
 #, c-format
 msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
 msgstr ""
 
-#: cofflink.c:2373
+#: cofflink.c:2340
 #, c-format
 msgid "%pB: relocs in section `%pA', but it has no contents"
 msgstr ""
 
-#: cofflink.c:2436 elflink.c:10810
+#: cofflink.c:2403 elflink.c:11600
 #, c-format
 msgid ""
-"%X`%s' referenced in section `%pA' of %pB: defined in discarded section `"
-"%pA' of %pB\n"
+"%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%"
+"pA' of %pB\n"
 msgstr ""
 
-#: cofflink.c:2734
+#: cofflink.c:2598
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%<PRIx64>)"
+msgstr ""
+
+#: cofflink.c:2716
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr ""
 
-#: cofflink.c:2742
+#: cofflink.c:2724
 #, c-format
 msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
 msgstr ""
 
-#: coffswap.h:789
+#: cofflink.c:3118
 #, c-format
-msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
 msgstr ""
 
-#: coffswap.h:803
+#: coffswap.h:826
 #, c-format
 msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
 msgstr ""
 
-#: compress.c:260
+#: compress.c:744 compress.c:761
 #, c-format
 msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
 msgstr ""
 
-#: cpu-arm.c:298 cpu-arm.c:310
+#: cpu-arm.c:320 cpu-arm.c:332
 #, c-format
 msgid ""
 "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
 msgstr ""
 
-#: cpu-arm.c:446
+#: cpu-arm.c:469
 #, c-format
 msgid "warning: unable to update contents of %s section in %pB"
 msgstr ""
 
-#: dwarf2.c:544
+#: dwarf2.c:705
 #, c-format
 msgid "DWARF error: can't find %s section."
 msgstr ""
 
-#: dwarf2.c:579
+#: dwarf2.c:713
+#, c-format
+msgid "DWARF error: section %s has no contents"
+msgstr ""
+
+#. PR 26946
+#: dwarf2.c:722
+#, c-format
+msgid "DWARF error: section %s is too big"
+msgstr ""
+
+#: dwarf2.c:757
 #, c-format
 msgid ""
 "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
 msgstr ""
 
-#: dwarf2.c:1107
+#: dwarf2.c:1504
 msgid "DWARF error: info pointer extends beyond end of attributes"
 msgstr ""
 
-#: dwarf2.c:1275
+#: dwarf2.c:1696
 #, c-format
 msgid "DWARF error: invalid or unhandled FORM value: %#x"
 msgstr ""
 
-#: dwarf2.c:1581
+#: dwarf2.c:2043
 msgid "DWARF error: mangled line number section (bad file number)"
 msgstr ""
 
-#: dwarf2.c:1926
+#: dwarf2.c:2585
 msgid "DWARF error: zero format count"
 msgstr ""
 
-#: dwarf2.c:1936
+#: dwarf2.c:2595
 #, c-format
 msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
 msgstr ""
 
-#: dwarf2.c:1977
+#: dwarf2.c:2634
 #, c-format
 msgid "DWARF error: unknown format content type %<PRIu64>"
 msgstr ""
 
-#: dwarf2.c:2057
+#: dwarf2.c:2707
 #, c-format
 msgid "DWARF error: line info section is too small (%<PRId64>)"
 msgstr ""
 
-#: dwarf2.c:2087
+#: dwarf2.c:2734
 #, c-format
 msgid ""
 "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining "
 "in the section (%#lx)"
 msgstr ""
 
-#: dwarf2.c:2100
+#: dwarf2.c:2747
 #, c-format
 msgid "DWARF error: unhandled .debug_line version %d"
 msgstr ""
 
-#: dwarf2.c:2110
+#: dwarf2.c:2756
 msgid "DWARF error: ran out of room reading prologue"
 msgstr ""
 
-#: dwarf2.c:2128
+#: dwarf2.c:2772
 #, c-format
 msgid "DWARF error: line info unsupported segment selector size %u"
 msgstr ""
 
-#: dwarf2.c:2155
+#: dwarf2.c:2794
 msgid "DWARF error: invalid maximum operations per instruction"
 msgstr ""
 
-#: dwarf2.c:2174
+#: dwarf2.c:2806
 msgid "DWARF error: ran out of room reading opcodes"
 msgstr ""
 
-#: dwarf2.c:2347
+#: dwarf2.c:2984
 msgid "DWARF error: mangled line number section"
 msgstr ""
 
-#: dwarf2.c:2852 dwarf2.c:2913
+#: dwarf2.c:3455
+msgid "DWARF error: abstract instance recursion detected"
+msgstr ""
+
+#: dwarf2.c:3489 dwarf2.c:3579
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr ""
 
-#: dwarf2.c:2889
+#: dwarf2.c:3505
 #, c-format
 msgid "DWARF error: unable to read alt ref %<PRIu64>"
 msgstr ""
 
-#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457
+#: dwarf2.c:3557
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr ""
+
+#: dwarf2.c:3594 dwarf2.c:3910 dwarf2.c:4483
 #, c-format
 msgid "DWARF error: could not find abbrev number %u"
 msgstr ""
 
-#: dwarf2.c:2947
-msgid "DWARF error: abstract instance recursion detected"
+#: dwarf2.c:4183
+#, c-format
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
+msgstr ""
+
+#: dwarf2.c:4329 dwarf2.c:4583
+msgid ""
+"DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
 msgstr ""
 
-#: dwarf2.c:3376
+#: dwarf2.c:4400
 #, c-format
 msgid ""
 "DWARF error: found dwarf version '%u', this reader only handles version 2, "
 "3, 4 and 5 information"
 msgstr ""
 
-#: dwarf2.c:3420
+#: dwarf2.c:4447
 #, c-format
 msgid ""
 "DWARF error: found address size '%u', this reader can not handle sizes "
 "greater than '%u'"
 msgstr ""
 
-#: dwarf2.c:3523
-msgid ""
-"DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
-msgstr ""
-
-#: ecoff.c:971
+#: ecoff.c:1016
 #, c-format
 msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
 msgstr ""
 
-#: ecoff.c:1268
+#: ecoff.c:1312
 #, c-format
 msgid "unknown basic type %d"
 msgstr ""
 
-#: ecoff.c:1525
+#: ecoff.c:1568
 #, c-format
 msgid ""
 "\n"
 "      End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1575 ecoff.c:1578
 #, c-format
 msgid ""
 "\n"
 "      First symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1548
+#: ecoff.c:1593
 #, c-format
 msgid ""
 "\n"
 "      End+1 symbol: %-7ld   Type:  %s"
 msgstr ""
 
-#: ecoff.c:1555
+#: ecoff.c:1601
 #, c-format
 msgid ""
 "\n"
 "      Local symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1563
+#: ecoff.c:1609
 #, c-format
 msgid ""
 "\n"
 "      struct; End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1568
+#: ecoff.c:1614
 #, c-format
 msgid ""
 "\n"
 "      union; End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1573
+#: ecoff.c:1619
 #, c-format
 msgid ""
 "\n"
 "      enum; End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1579
+#: ecoff.c:1627
 #, c-format
 msgid ""
 "\n"
 "      Type: %s"
 msgstr ""
 
-#: elf-attrs.c:446
+#: elf-attrs.c:417 elf-attrs.c:447 elf-attrs.c:623
+msgid "error adding attribute"
+msgstr ""
+
+#: elf-attrs.c:503
 #, c-format
 msgid "%pB: error: attribute section '%pA' too big: %#llx"
 msgstr ""
 
-#: elf-attrs.c:487
+#: elf-attrs.c:540
 #, c-format
-msgid "%pB: error: attribute section length too small: %<PRId64>"
+msgid "%pB: error: attribute section length too small: %ld"
 msgstr ""
 
-#: elf-attrs.c:615
+#: elf-attrs.c:673
 #, c-format
 msgid ""
 "error: %pB: object has vendor-specific contents that must be processed by "
 "the '%s' toolchain"
 msgstr ""
 
-#: elf-attrs.c:625
+#: elf-attrs.c:683
 #, c-format
 msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
 msgstr ""
 
-#: elf-eh-frame.c:944
+#: elf-eh-frame.c:945
 #, c-format
 msgid "discarding zero address range FDE in %pB(%pA).\n"
 msgstr ""
 
-#: elf-eh-frame.c:1049
+#: elf-eh-frame.c:1050
 #, c-format
 msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
 msgstr ""
 
-#: elf-eh-frame.c:1539
+#: elf-eh-frame.c:1542
 #, c-format
 msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
 msgstr ""
 
-#: elf-eh-frame.c:1546
+#: elf-eh-frame.c:1549
 msgid ""
 "further warnings about FDE encoding preventing .eh_frame_hdr generation "
 "dropped"
@@ -806,29 +902,31 @@ msgstr ""
 msgid "%pB: %pA points past end of text section"
 msgstr ""
 
-#: elf-eh-frame.c:2139
+#: elf-eh-frame.c:2143
 msgid "DW_EH_PE_datarel unspecified for this architecture"
 msgstr ""
 
-#: elf-eh-frame.c:2309
+#: elf-eh-frame.c:2314
 #, c-format
 msgid "invalid output section for .eh_frame_entry: %pA"
 msgstr ""
 
-#: elf-eh-frame.c:2332
+#: elf-eh-frame.c:2337
 #, c-format
 msgid "invalid contents in %pA section"
 msgstr ""
 
-#: elf-eh-frame.c:2488
+#: elf-eh-frame.c:2493
 msgid ".eh_frame_hdr entry overflow"
 msgstr ""
 
-#: elf-eh-frame.c:2490
+#: elf-eh-frame.c:2495
 msgid ".eh_frame_hdr refers to overlapping FDEs"
 msgstr ""
 
-#: elf-ifunc.c:149
+#. xgettext:c-format.
+#: elf-ifunc.c:144
+#: elfnn-loongarch.c:1427
 #, c-format
 msgid ""
 "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can "
@@ -836,92 +934,92 @@ msgid ""
 "pie\n"
 msgstr ""
 
-#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127
-#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925
-#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049
-#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693
-#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266
-#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631 elf32-moxie.c:288
-#: elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759 elf32-score.c:2733
-#: elf32-score7.c:2542 elf32-spu.c:5083 elf32-tilepro.c:3506 elf32-v850.c:2291
-#: elf32-visium.c:681 elf32-xstormy16.c:931 elf64-mmix.c:1541
-#: elfxx-tilegx.c:3870
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-bfin.c:3133 elf32-cr16.c:1429
+#: elf32-cris.c:2034 elf32-crx.c:922 elf32-d10v.c:510 elf32-epiphany.c:563
+#: elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:492 elf32-h8300.c:523
+#: elf32-ip2k.c:1478 elf32-iq2000.c:691 elf32-lm32.c:1070 elf32-m32c.c:624
+#: elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522 elf32-metag.c:1984
+#: elf32-microblaze.c:1682 elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6093
+#: elf32-or1k.c:1897 elf32-score.c:2734 elf32-score7.c:2545 elf32-spu.c:5085
+#: elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
+#: elf32-xstormy16.c:930 elf64-bpf.c:339 elf64-mmix.c:1541 elfxx-tilegx.c:3742
 msgid "internal error: out of range error"
 msgstr ""
 
-#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131
-#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929
-#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498
-#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628
-#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994
-#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362
-#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546
-#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685
-#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469
-#: elfxx-tilegx.c:3874
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-bfin.c:3137 elf32-cr16.c:1433
+#: elf32-cris.c:2038 elf32-crx.c:926 elf32-d10v.c:514 elf32-fr30.c:598
+#: elf32-frv.c:4053 elf32-ft32.c:496 elf32-h8300.c:527 elf32-iq2000.c:695
+#: elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841 elf32-m68hc1x.c:1275
+#: elf32-mep.c:526 elf32-metag.c:1988 elf32-microblaze.c:1686
+#: elf32-moxie.c:292 elf32-msp430.c:1510 elf32-nds32.c:6097 elf32-or1k.c:1901
+#: elf32-score.c:2738 elf32-score7.c:2549 elf32-spu.c:5089
+#: elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684
+#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10658
+#: elfxx-tilegx.c:3746
 msgid "internal error: unsupported relocation error"
 msgstr ""
 
-#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933
-#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053
-#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197
-#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:930 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
+#: elf32-microblaze.c:1690 elf32-nds32.c:6101 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5093
 msgid "internal error: dangerous error"
 msgstr ""
 
-#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139
-#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937
-#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061
-#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705
-#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278
-#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643 elf32-moxie.c:300
-#: elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201 elf32-or1k.c:1771
-#: elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095 elf32-tilepro.c:3518
-#: elf32-v850.c:2315 elf32-visium.c:693 elf32-xstormy16.c:943 elf64-mmix.c:1553
-#: elfxx-tilegx.c:3882
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-bfin.c:3145 elf32-cr16.c:1441
+#: elf32-cris.c:2046 elf32-crx.c:934 elf32-d10v.c:522 elf32-epiphany.c:578
+#: elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:504 elf32-h8300.c:535
+#: elf32-ip2k.c:1493 elf32-iq2000.c:703 elf32-lm32.c:1082 elf32-m32c.c:636
+#: elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534 elf32-metag.c:1996
+#: elf32-microblaze.c:1694 elf32-moxie.c:300 elf32-msp430.c:1518
+#: elf32-mt.c:410 elf32-nds32.c:6105 elf32-or1k.c:1909 elf32-score.c:2751
+#: elf32-score7.c:2557 elf32-spu.c:5097 elf32-tilepro.c:3384 elf32-v850.c:2318
+#: elf32-visium.c:692 elf32-xstormy16.c:942 elf64-bpf.c:352 elf64-mmix.c:1553
+#: elfxx-tilegx.c:3754
 msgid "internal error: unknown error"
 msgstr ""
 
-#: elf-m10300.c:1029
+#: elf-m10300.c:1030
 #, c-format
 msgid "%pB: unsupported transition from %s to %s"
 msgstr ""
 
-#: elf-m10300.c:1198
+#: elf-m10300.c:1197
 #, c-format
 msgid "%pB: %s' accessed both as normal and thread local symbol"
 msgstr ""
 
-#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539
-#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409
-#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846 elfxx-sparc.c:3906
-#: elfxx-tilegx.c:3793 /work/sources/binutils/current/bfd/elfnn-aarch64.c:5261
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6807
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2279
+#: elf-m10300.c:2093 elf32-arm.c:13398 elf32-i386.c:3494 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3023 elf64-s390.c:3042 elf64-x86-64.c:4369
+#: elfxx-sparc.c:2917 elfxx-sparc.c:3814 elfxx-tilegx.c:3665
+#: elfnn-aarch64.c:5713
+#: elfnn-aarch64.c:7322
+#: elfnn-kvx.c:2775
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr ""
 
-#: elf-m10300.c:2156
+#: elf-m10300.c:2155
 msgid ""
 "error: inappropriate relocation type for shared library (did you forget -"
 "fpic?)"
 msgstr ""
 
-#: elf-m10300.c:2160
+#: elf-m10300.c:2159
 #, c-format
 msgid ""
 "%pB: taking the address of protected function '%s' cannot be done when "
 "making a shared library"
 msgstr ""
 
-#: elf-m10300.c:2163
+#: elf-m10300.c:2162
 msgid "internal error: suspicious relocation type used in shared library"
 msgstr ""
 
-#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364
-#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361
-#: elf64-ia64.c:361
+#: elf-m10300.c:2650 elf32-avr.c:2488 elf32-frv.c:5621 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8457 reloc16.c:155
+#: elfnn-ia64.c:365
 msgid "%P%F: --relax and -r may not be used together\n"
 msgstr ""
 
@@ -950,442 +1048,632 @@ msgstr ""
 msgid "warning: %pB: corrupt no copy on protected size: 0x%x"
 msgstr ""
 
-#: elf-properties.c:186
+#: elf-properties.c:189
+#, c-format
+msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
+msgstr ""
+
+#: elf-properties.c:214
 #, c-format
 msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
 msgstr ""
 
-#: elf-properties.c:301
+#: elf-properties.c:400
 msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr ""
 
-#: elf-properties.c:307
+#: elf-properties.c:406
 msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
 msgstr ""
 
-#: elf-properties.c:316 elf-properties.c:396
+#: elf-properties.c:415 elf-properties.c:493
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr ""
 
-#: elf-properties.c:320
+#: elf-properties.c:419
 msgid "Removed property %W to merge %pB and %pB (not found)\n"
 msgstr ""
 
-#: elf-properties.c:339
+#: elf-properties.c:436
 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr ""
 
-#: elf-properties.c:348
+#: elf-properties.c:445
 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
 msgstr ""
 
-#: elf-properties.c:390
+#: elf-properties.c:487
 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
 msgstr ""
 
+#: elf-properties.c:668 elfxx-aarch64.c:758 elfxx-x86.c:4147
+msgid "%F%P: failed to create GNU property section\n"
+msgstr ""
+
+#: elf-properties.c:672 elfxx-aarch64.c:762 elfxx-x86.c:4152
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr ""
+
 #. Merge .note.gnu.property sections.
-#: elf-properties.c:552 elf-properties.c:554
+#: elf-properties.c:698 elf-properties.c:700
 msgid "\n"
 msgstr ""
 
-#: elf-properties.c:553
+#: elf-properties.c:699
 msgid "Merging program properties\n"
 msgstr ""
 
+#: elf-sframe.c:240
+#, c-format
+msgid "error in %pB(%pA); no .sframe will be created"
+msgstr ""
+
+#: elf-sframe.c:400
+msgid "input SFrame sections with different abi prevent .sframe generation"
+msgstr ""
+
+#: elf-sframe.c:411
+msgid ""
+"input SFrame sections with different format versions prevent .sframe "
+"generation"
+msgstr ""
+
 #. PR 17512: file: f057ec89.
-#: elf.c:345
+#: elf.c:328
 #, c-format
 msgid "%pB: attempt to load strings from a non-string section (number %d)"
 msgstr ""
 
-#: elf.c:360
+#: elf.c:353
 #, c-format
 msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
 msgstr ""
 
-#: elf.c:499 /work/sources/binutils/current/bfd/elfnn-aarch64.c:7891
+#: elf.c:517 elf32-arm.c:17731
+#: elfnn-aarch64.c:8322
+#: elfnn-loongarch.c:5102
 #, c-format
 msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
 msgstr ""
 
-#: elf.c:664
-#, c-format
-msgid "%pB: corrupt size field in group section header: %#<PRIx64>"
-msgstr ""
-
-#: elf.c:680
+#: elf.c:679
 #, c-format
 msgid "%pB: invalid size field in group section header: %#<PRIx64>"
 msgstr ""
 
-#: elf.c:728
+#: elf.c:724
 #, c-format
 msgid "%pB: invalid entry in SHT_GROUP section [%u]"
 msgstr ""
 
-#: elf.c:747
+#: elf.c:743
 #, c-format
 msgid "%pB: no valid group sections found"
 msgstr ""
 
 #. See PR 21957 for a reproducer.
-#: elf.c:776
+#: elf.c:772
 #, c-format
 msgid "%pB: group section '%pA' has no contents"
 msgstr ""
 
-#: elf.c:837
+#: elf.c:833
 #, c-format
 msgid "%pB: no group info for section '%pA'"
 msgstr ""
 
-#: elf.c:868 elf.c:3886 elflink.c:11403
-#, c-format
-msgid "%pB: warning: sh_link not set for section `%pA'"
-msgstr ""
-
-#: elf.c:888
+#: elf.c:885
 #, c-format
 msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
 msgstr ""
 
-#: elf.c:901
+#: elf.c:898
 #, c-format
 msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
 msgstr ""
 
-#: elf.c:922
+#: elf.c:920
 #, c-format
 msgid "%pB: section group entry number %u is corrupt"
 msgstr ""
 
-#: elf.c:945
+#: elf.c:943
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
 msgstr ""
 
-#: elf.c:1408
+#: elf.c:1244
+#, c-format
+msgid ""
+"%pB: section %s is compressed with zstd, but BFD is not built with zstd "
+"support"
+msgstr ""
+
+#: elf.c:1440
 #, c-format
 msgid "%pB: invalid sh_link field (%d) in section number %d"
 msgstr ""
 
-#: elf.c:1424
+#: elf.c:1456
 #, c-format
 msgid "%pB: failed to find link section for section %d"
 msgstr ""
 
-#: elf.c:1451
+#: elf.c:1483
 #, c-format
 msgid "%pB: failed to find info section for section %d"
 msgstr ""
 
-#: elf.c:1623
+#: elf.c:1660
 #, c-format
 msgid ""
 "\n"
 "Program Header:\n"
 msgstr ""
 
-#: elf.c:1665
+#: elf.c:1702
 #, c-format
 msgid ""
 "\n"
 "Dynamic Section:\n"
 msgstr ""
 
-#: elf.c:1806
+#: elf.c:1841
 #, c-format
 msgid ""
 "\n"
 "Version definitions:\n"
 msgstr ""
 
-#: elf.c:1831
+#: elf.c:1866
 #, c-format
 msgid ""
 "\n"
 "Version References:\n"
 msgstr ""
 
-#: elf.c:1836
+#: elf.c:1871
 #, c-format
 msgid "  required from %s:\n"
 msgstr ""
 
-#: elf.c:2037
+#: elf.c:2614
 #, c-format
 msgid "%pB: warning: loop in section dependencies detected"
 msgstr ""
 
-#: elf.c:2145
+#: elf.c:2721
 #, c-format
 msgid ""
 "%pB: warning: multiple symbol tables detected - ignoring the table in "
 "section %u"
 msgstr ""
 
-#: elf.c:2229
+#: elf.c:2806
 #, c-format
 msgid ""
 "%pB: warning: multiple dynamic symbol tables detected - ignoring the table "
 "in section %u"
 msgstr ""
 
-#: elf.c:2342
+#: elf.c:2925
 #, c-format
 msgid "%pB: invalid link %u for reloc section %s (index %u)"
 msgstr ""
 
-#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543
+#: elf.c:2982
+#, c-format
+msgid ""
+"%pB: warning: secondary relocation section '%s' for section %pA found - "
+"ignoring"
+msgstr ""
+
+#: elf.c:3070 elf.c:3084 elf.c:3095 elf.c:3108
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr ""
 
-#: elf.c:3248
+#: elf.c:3770
 #, c-format
 msgid "%pB: error: alignment power %d of section `%pA' is too big"
 msgstr ""
 
-#: elf.c:3278
+#: elf.c:3805
 #, c-format
 msgid "warning: section `%pA' type changed to PROGBITS"
 msgstr ""
 
-#: elf.c:3754
+#: elf.c:4311
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr ""
 
-#: elf.c:3839
+#: elf.c:4397
 #, c-format
 msgid ""
 "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
 msgstr ""
 
-#: elf.c:3864
+#: elf.c:4415
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
 msgstr ""
 
-#: elf.c:4430
+#: elf.c:5009
 #, c-format
-msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d"
+msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
 msgstr ""
 
-#: elf.c:5013
+#: elf.c:5192
+msgid "%F%P: failed to size relative relocations\n"
+msgstr ""
+
+#: elf.c:5617
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr ""
 
-#: elf.c:5020
+#: elf.c:5624
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr ""
 
-#: elf.c:5024
+#: elf.c:5628
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr ""
 
-#: elf.c:5538
+#: elf.c:6256
 #, c-format
 msgid ""
 "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
 msgstr ""
 
-#: elf.c:5566
+#: elf.c:6282
 #, c-format
 msgid "%pB: not enough room for program headers, try linking with -N"
 msgstr ""
 
-#: elf.c:5654
+#: elf.c:6399
 #, c-format
 msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
 msgstr ""
 
-#: elf.c:5791
+#. The fix for this error is usually to edit the linker script being
+#. used and set up the program headers manually.  Either that or
+#. leave room for the headers at the start of the SECTIONS.
+#: elf.c:6539
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr ""
+
+#: elf.c:6579
 #, c-format
 msgid "%pB: section `%pA' can't be allocated in segment %d"
 msgstr ""
 
-#: elf.c:5839
+#: elf.c:6720
 #, c-format
 msgid "%pB: warning: allocated section `%s' not in segment"
 msgstr ""
 
-#: elf.c:6072
+#: elf.c:6855
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr ""
+
+#: elf.c:6886
 #, c-format
 msgid ""
 "%pB: error: non-load segment %d includes file header and/or program header"
 msgstr ""
 
-#. The fix for this error is usually to edit the linker script being
-#. used and set up the program headers manually.  Either that or
-#. leave room for the headers at the start of the SECTIONS.
-#: elf.c:6249
+#: elf.c:7034
 #, c-format
-msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgid "error: %pB has a TLS segment with execute permission"
+msgstr ""
+
+#: elf.c:7040
+#, c-format
+msgid "warning: %pB has a TLS segment with execute permission"
+msgstr ""
+
+#: elf.c:7055
+#, c-format
+msgid "error: %pB has a LOAD segment with RWX permissions"
 msgstr ""
 
-#: elf.c:6606
+#: elf.c:7061
+#, c-format
+msgid "warning: %pB has a LOAD segment with RWX permissions"
+msgstr ""
+
+#: elf.c:7454
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr ""
 
-#: elf.c:6949
+#: elf.c:7832
 #, c-format
 msgid ""
 "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this "
 "intentional?"
 msgstr ""
 
-#: elf.c:7574
+#: elf.c:8492
 #, c-format
 msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
 msgstr ""
 
-#: elf.c:8073
+#: elf.c:9000
+#, c-format
+msgid ""
+"%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr ""
+
+#: elf.c:9030
 #, c-format
 msgid ""
 "unable to find equivalent output section for symbol '%s' from section '%s'"
 msgstr ""
 
-#: elf.c:8421
+#: elf.c:9464
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr ""
 
-#: elf.c:8548
+#: elf.c:9639
 #, c-format
 msgid "%pB: .gnu.version_d invalid entry"
 msgstr ""
 
-#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914
-#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841
-#: elf64-ppc.c:4950
+#: elf.c:10139
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr ""
+
+#: elf.c:10151
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr ""
+
+#: elf.c:10266 elf32-mcore.c:100 elf32-mcore.c:455 elf32-ppc.c:7676
+#: elf32-ppc.c:8864 elf64-ppc.c:16839
+#, c-format
+msgid "%pB: %s unsupported"
+msgstr ""
+
+#: elf.c:11079
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr ""
+
+#: elf.c:11158
+#, c-format
+msgid ""
+"%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a "
+"name of size %u"
+msgstr ""
+
+#: elf.c:13796
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:13799
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:13802
+msgid ""
+"symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:13805
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:14023
+#, c-format
+msgid "%pB(%pA): relocation %zu has invalid symbol index %lu"
+msgstr ""
+
+#: elf.c:14099
+#, c-format
+msgid ""
+"%pB(%pA): link section cannot be set because the output file does not have a "
+"symbol table"
+msgstr ""
+
+#: elf.c:14113
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr ""
+
+#: elf.c:14127
+#, c-format
+msgid ""
+"%pB(%pA): info section index cannot be set because the section is not in the "
+"output"
+msgstr ""
+
+#: elf.c:14203
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr ""
+
+#: elf.c:14215
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr ""
+
+#: elf.c:14227
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr ""
+
+#: elf.c:14241
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr ""
+
+#: elf.c:14264
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr ""
+
+#: elf.c:14284
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %zu is empty"
+msgstr ""
+
+#: elf.c:14309
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a missing symbol"
+msgstr ""
+
+#: elf.c:14327
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a deleted symbol"
+msgstr ""
+
+#: elf.c:14341
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu is of an unknown type"
+msgstr ""
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15125 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3218
+#: elf32-visium.c:844 elf64-ppc.c:5513
+#: elfnn-aarch64.c:7552
 #, c-format
 msgid "private flags = 0x%lx:"
 msgstr ""
 
-#: elf32-arc.c:627
+#: elf32-arc.c:642
 #, c-format
 msgid "warning: %pB: conflicting platform configuration %s with %s"
 msgstr ""
 
-#: elf32-arc.c:646
+#: elf32-arc.c:661
 #, c-format
 msgid "error: %pB: unable to merge CPU base attributes %s with %s"
 msgstr ""
 
-#: elf32-arc.c:683
+#: elf32-arc.c:698
 #, c-format
 msgid "error: %pB: unable to merge ISA extension attributes %s"
 msgstr ""
 
-#: elf32-arc.c:707
+#: elf32-arc.c:722
 #, c-format
 msgid "error: %pB: conflicting ISA extension attributes %s with %s"
 msgstr ""
 
-#: elf32-arc.c:747
+#: elf32-arc.c:762
 #, c-format
 msgid "error: %pB: cannot mix rf16 with full register set %pB"
 msgstr ""
 
-#: elf32-arc.c:775
+#: elf32-arc.c:790
 #, c-format
 msgid "error: %pB: conflicting attributes %s: %s with %s"
 msgstr ""
 
-#: elf32-arc.c:802
+#: elf32-arc.c:817
 #, c-format
 msgid "error: %pB: conflicting attributes %s"
 msgstr ""
 
-#: elf32-arc.c:907
+#: elf32-arc.c:922
 #, c-format
 msgid ""
 "error: attempting to link %pB with a binary %pB of different architecture"
 msgstr ""
 
-#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385
-#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354
+#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
+#: elf32-ppc.c:3856 elf64-sparc.c:737 elfxx-mips.c:15692
 #, c-format
 msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
 msgstr ""
 
-#: elf32-arc.c:1012
+#: elf32-arc.c:1027
 msgid "error: the ARC4 architecture is no longer supported"
 msgstr ""
 
-#: elf32-arc.c:1018
+#: elf32-arc.c:1033
 msgid "warning: unset or old architecture flags; use default machine"
 msgstr ""
 
-#: elf32-arc.c:1151
+#: elf32-arc.c:1159
 #, c-format
 msgid ""
-"%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be "
-"%#x (value is %#<PRIx64>)"
+"%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be %"
+"#x (value is %#<PRIx64>)"
 msgstr ""
 
-#: elf32-arc.c:1162
+#: elf32-arc.c:1170
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s+%#<PRIx64>' is invalid, 16 MSB "
 "should be %#x (value is %#<PRIx64>)"
 msgstr ""
 
-#: elf32-arc.c:1876
+#: elf32-arc.c:1898
 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
 msgstr ""
 
-#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470
+#: elf32-arc.c:1922 elf32-rx.c:1486
 #, c-format
 msgid ""
 "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
 msgstr ""
 
-#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475
+#: elf32-arc.c:1927 elf32-rx.c:1491
 #, c-format
 msgid "%pB(%pA): internal error: out of range error"
 msgstr ""
 
-#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480
+#: elf32-arc.c:1932 elf32-rx.c:1496
 #, c-format
 msgid "%pB(%pA): internal error: unsupported relocation error"
 msgstr ""
 
-#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485
+#: elf32-arc.c:1937 elf32-rx.c:1501
 #, c-format
 msgid "%pB(%pA): internal error: dangerous relocation"
 msgstr ""
 
-#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490
+#: elf32-arc.c:1942 elf32-rx.c:1506
 #, c-format
 msgid "%pB(%pA): internal error: unknown error"
 msgstr ""
 
-#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7462
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:497
+#: elf32-arc.c:2036 elf32-arc.c:2104 elf32-arm.c:15580 elf32-metag.c:2251
+#: elf32-nds32.c:5543
+#: elfnn-aarch64.c:7959
+#: elfnn-riscv.c:720
 #, c-format
 msgid ""
 "%pB: relocation %s against `%s' can not be used when making a shared object; "
 "recompile with -fPIC"
 msgstr ""
 
-#: elf32-arc.c:2949
+#: elf32-arc.c:2923
 #, c-format
 msgid "%pB: unknown mandatory ARC object attribute %d"
 msgstr ""
 
-#: elf32-arc.c:2957
+#: elf32-arc.c:2931
 #, c-format
 msgid "warning: %pB: unknown ARC object attribute %d"
 msgstr ""
 
-#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409
+#: elf32-arm.c:4346 elf32-arm.c:4380 elf32-arm.c:4399 elf32-arm.c:4451
 #, c-format
 msgid ""
 "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE "
@@ -1393,141 +1681,159 @@ msgid ""
 "movw instruction"
 msgstr ""
 
-#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183
+#: elf32-arm.c:4411 elf32-arm.c:4465 elf32-arm.c:9163 elf32-arm.c:9253
 #, c-format
 msgid ""
 "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call "
 "to %s"
 msgstr ""
 
-#: elf32-arm.c:4697
+#: elf32-arm.c:4591
+#, c-format
+msgid ""
+"ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%"
+"#<PRIx64>)"
+msgstr ""
+
+#: elf32-arm.c:4760
 #, c-format
 msgid "no address assigned to the veneers output section %s"
 msgstr ""
 
-#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579
-#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:3098
+#: elf32-arm.c:4835 elf32-arm.c:6984 elf32-csky.c:3389 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3907
+#: elf64-ppc.c:14157
+#: elfnn-aarch64.c:3203
+#: elfnn-kvx.c:895
 #, c-format
 msgid "%pB: cannot create stub entry %s"
 msgstr ""
 
-#: elf32-arm.c:5957
+#: elf32-arm.c:5056 elf32-csky.c:3731 elf32-hppa.c:732 elf32-hppa.c:761
+#: elf32-hppa.c:842 elf32-m68hc11.c:422 elf32-m68hc12.c:542 elf32-metag.c:3345
+#: elf32-nios2.c:2494 elf64-ppc.c:12273 elf64-ppc.c:12281 xcofflink.c:4684
+#: elfnn-aarch64.c:3275
+msgid ""
+"%F%P: Could not assign `%pA' to an output section. Retry without --enable-"
+"non-contiguous-regions.\n"
+msgstr ""
+
+#: elf32-arm.c:6027
 #, c-format
 msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
 msgstr ""
 
-#: elf32-arm.c:5966
+#: elf32-arm.c:6036
 #, c-format
 msgid ""
 "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
 msgstr ""
 
-#: elf32-arm.c:6005
+#: elf32-arm.c:6075
 #, c-format
 msgid ""
 "%pB: invalid standard symbol `%s'; it must be a global or weak function "
 "symbol"
 msgstr ""
 
-#: elf32-arm.c:6011
+#: elf32-arm.c:6081
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr ""
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6093
 #, c-format
 msgid "%pB: `%s' and its special symbol are in different sections"
 msgstr ""
 
-#: elf32-arm.c:6035
+#: elf32-arm.c:6105
 #, c-format
 msgid "%pB: entry function `%s' not output"
 msgstr ""
 
-#: elf32-arm.c:6042
+#: elf32-arm.c:6112
 #, c-format
 msgid "%pB: entry function `%s' is empty"
 msgstr ""
 
-#: elf32-arm.c:6171
+#: elf32-arm.c:6241
 #, c-format
 msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
 msgstr ""
 
-#: elf32-arm.c:6217
+#: elf32-arm.c:6290
 #, c-format
 msgid ""
 "%pB: invalid import library entry: `%s'; symbol should be absolute, global "
 "and refer to Thumb functions"
 msgstr ""
 
-#: elf32-arm.c:6239
+#: elf32-arm.c:6312
 #, c-format
 msgid "entry function `%s' disappeared from secure code"
 msgstr ""
 
-#: elf32-arm.c:6263
+#: elf32-arm.c:6336
 #, c-format
 msgid "`%s' refers to a non entry function"
 msgstr ""
 
-#: elf32-arm.c:6278
+#: elf32-arm.c:6351
 #, c-format
 msgid "%pB: visibility of symbol `%s' has changed"
 msgstr ""
 
-#: elf32-arm.c:6287
+#: elf32-arm.c:6360
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr ""
 
-#: elf32-arm.c:6306
+#: elf32-arm.c:6379
 #, c-format
 msgid "offset of veneer for entry function `%s' not a multiple of its size"
 msgstr ""
 
-#: elf32-arm.c:6326
+#: elf32-arm.c:6399
 msgid ""
 "new entry function(s) introduced but no output import library specified:"
 msgstr ""
 
-#: elf32-arm.c:6334
+#: elf32-arm.c:6407
 #, c-format
 msgid "start address of `%s' is different from previous link"
 msgstr ""
 
-#: elf32-arm.c:7042 elf32-arm.c:7078
+#: elf32-arm.c:7118 elf32-arm.c:7156
 #, c-format
 msgid "unable to find %s glue '%s' for '%s'"
 msgstr ""
 
-#: elf32-arm.c:7793
+#: elf32-arm.c:7868
 #, c-format
 msgid "%pB: BE8 images only valid in big-endian mode"
 msgstr ""
 
 #. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:8024
+#: elf32-arm.c:8096
 #, c-format
 msgid ""
 "%pB: warning: selected VFP11 erratum workaround is not necessary for target "
 "architecture"
 msgstr ""
 
-#: elf32-arm.c:8051
+#: elf32-arm.c:8123
 #, c-format
 msgid ""
 "%pB: warning: selected STM32L4XX erratum workaround is not necessary for "
 "target architecture"
 msgstr ""
 
-#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693
+#: elf32-arm.c:8659 elf32-arm.c:8679 elf32-arm.c:8746 elf32-arm.c:8765
 #, c-format
 msgid "%pB: unable to find %s veneer `%s'"
 msgstr ""
 
-#: elf32-arm.c:8900
+#: elf32-arm.c:8972
 #, c-format
 msgid ""
 "%pB(%pA+%#x): error: multiple load detected in non-last IT block "
@@ -1535,43 +1841,55 @@ msgid ""
 "it to generate only one instruction per IT block"
 msgstr ""
 
-#: elf32-arm.c:9000
+#: elf32-arm.c:9070
 #, c-format
 msgid "invalid TARGET2 relocation type '%s'"
 msgstr ""
 
 #. FIXME: We ought to be able to generate thumb-1 PLT
 #. instructions...
-#: elf32-arm.c:9802
+#: elf32-arm.c:9840
 #, c-format
 msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
 msgstr ""
 
-#: elf32-arm.c:10106 elf32-arm.c:10148
+#: elf32-arm.c:10149 elf32-arm.c:10191
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
 msgstr ""
 
-#: elf32-arm.c:10492
+#: elf32-arm.c:10541
 msgid "shared object"
 msgstr ""
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10544
 msgid "PIE executable"
 msgstr ""
 
-#: elf32-arm.c:10498
+#: elf32-arm.c:10547
 #, c-format
 msgid ""
 "%pB: relocation %s against external or undefined symbol `%s' can not be used "
 "when making a %s; recompile with -fPIC"
 msgstr ""
 
-#: elf32-arm.c:10635 elf32-arm.c:11062
+#: elf32-arm.c:10649
+#, c-format
+msgid "\\%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr ""
+
+#: elf32-arm.c:11066
 #, c-format
 msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
 msgstr ""
 
+#: elf32-arm.c:11700
+#, c-format
+msgid ""
+"%pB: expected symbol index in range 0..%lu but found local symbol with index "
+"%lu"
+msgstr ""
+
 #: elf32-arm.c:11975 elf32-arm.c:12001
 #, c-format
 msgid ""
@@ -1579,8 +1897,8 @@ msgid ""
 "TLS_GOTDESC"
 msgstr ""
 
-#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919
-#: elf32-nios2.c:4366
+#: elf32-arm.c:12047 elf32-csky.c:4959 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-nios2.c:4377
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
 msgstr ""
@@ -1599,582 +1917,610 @@ msgid ""
 "relocation %s"
 msgstr ""
 
-#: elf32-arm.c:13078 elf32-sh.c:3689
+#: elf32-arm.c:12630 elf32-arm.c:12789
+msgid "local symbol index too big"
+msgstr ""
+
+#: elf32-arm.c:12640 elf32-arm.c:12674
+msgid "no dynamic index information available"
+msgstr ""
+
+#: elf32-arm.c:12682
+msgid "invalid dynamic index"
+msgstr ""
+
+#: elf32-arm.c:12799
+msgid "dynamic index information not available"
+msgstr ""
+
+#: elf32-arm.c:13230 elf32-sh.c:3567
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
 msgstr ""
 
-#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6534
+#: elf32-arm.c:13343 elf32-m68k.c:3966 elf32-xtensa.c:2761
+#: elfnn-aarch64.c:7049
+#: elfnn-kvx.c:2571
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
 msgstr ""
 
-#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6536
+#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2763
+#: elfnn-aarch64.c:7051
+#: elfnn-kvx.c:2573
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
 msgstr ""
 
-#: elf32-arm.c:13276 elf32-tic6x.c:2708
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6871
+#: elf32-arm.c:13428 elf32-tic6x.c:2649
+#: elfnn-aarch64.c:7386
+#: elfnn-kvx.c:2800
 msgid "out of range"
 msgstr ""
 
-#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6875
+#: elf32-arm.c:13432 elf32-nios2.c:4511 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7390
+#: elfnn-kvx.c:2804
 msgid "unsupported relocation"
 msgstr ""
 
-#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6883
+#: elf32-arm.c:13440 elf32-nios2.c:4521 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7398
+#: elfnn-kvx.c:2812
 msgid "unknown error"
 msgstr ""
 
-#: elf32-arm.c:13764
+#: elf32-arm.c:13922
 #, c-format
 msgid ""
 "warning: not setting interworking flag of %pB since it has already been "
 "specified as non-interworking"
 msgstr ""
 
-#: elf32-arm.c:13768
+#: elf32-arm.c:13926
 #, c-format
 msgid "warning: clearing the interworking flag of %pB due to outside request"
 msgstr ""
 
-#: elf32-arm.c:13813
+#: elf32-arm.c:13971
 #, c-format
 msgid ""
 "warning: clearing the interworking flag of %pB because non-interworking code "
 "in %pB has been linked with it"
 msgstr ""
 
-#: elf32-arm.c:13900
+#: elf32-arm.c:14058
 #, c-format
 msgid "%pB: unknown mandatory EABI object attribute %d"
 msgstr ""
 
-#: elf32-arm.c:13908
+#: elf32-arm.c:14066
 #, c-format
 msgid "warning: %pB: unknown EABI object attribute %d"
 msgstr ""
 
-#: elf32-arm.c:14175
+#: elf32-arm.c:14401
 #, c-format
 msgid "error: %pB: unknown CPU architecture"
 msgstr ""
 
-#: elf32-arm.c:14213 elf32-nios2.c:2946
+#: elf32-arm.c:14439
 #, c-format
-msgid "error: %pB: conflicting CPU architectures %d/%d"
+msgid "error: conflicting CPU architectures %s vs %s in %pB"
 msgstr ""
 
-#: elf32-arm.c:14310
+#: elf32-arm.c:14536
 #, c-format
 msgid ""
 "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr ""
 
-#: elf32-arm.c:14339
+#: elf32-arm.c:14573
 #, c-format
 msgid "error: %pB uses VFP register arguments, %pB does not"
 msgstr ""
 
-#: elf32-arm.c:14497
+#: elf32-arm.c:14743
 #, c-format
 msgid "error: %pB: unable to merge virtualization attributes with %pB"
 msgstr ""
 
-#: elf32-arm.c:14523
+#: elf32-arm.c:14769
 #, c-format
 msgid "error: %pB: conflicting architecture profiles %c/%c"
 msgstr ""
 
-#: elf32-arm.c:14662
+#: elf32-arm.c:14908
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr ""
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14917
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr ""
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14929
 #, c-format
 msgid "error: %pB: SB relative addressing conflicts with use of R9"
 msgstr ""
 
-#: elf32-arm.c:14696
+#: elf32-arm.c:14942
 #, c-format
 msgid ""
 "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; "
 "use of wchar_t values across objects may fail"
 msgstr ""
 
-#: elf32-arm.c:14727
+#: elf32-arm.c:14973
 #, c-format
 msgid ""
 "warning: %pB uses %s enums yet the output is to use %s enums; use of enum "
 "values across objects may fail"
 msgstr ""
 
-#: elf32-arm.c:14739
+#: elf32-arm.c:14985
 #, c-format
 msgid "error: %pB uses iWMMXt register arguments, %pB does not"
 msgstr ""
 
-#: elf32-arm.c:14756
+#: elf32-arm.c:15002
 #, c-format
 msgid "error: fp16 format mismatch between %pB and %pB"
 msgstr ""
 
-#: elf32-arm.c:14792
+#: elf32-arm.c:15038
 #, c-format
 msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr ""
 
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410
-#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537
-#: elf32-xgate.c:494 elfxx-mips.c:16037
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7037
-#, c-format
-msgid "private flags = %lx:"
-msgstr ""
-
-#: elf32-arm.c:14888
+#: elf32-arm.c:15134
 #, c-format
 msgid " [interworking enabled]"
 msgstr ""
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15142
 #, c-format
 msgid " [VFP float format]"
 msgstr ""
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15144
 #, c-format
 msgid " [Maverick float format]"
 msgstr ""
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15146
 #, c-format
 msgid " [FPA float format]"
 msgstr ""
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15149
 #, c-format
 msgid " [floats passed in float registers]"
 msgstr ""
 
-#: elf32-arm.c:14906 elf32-arm.c:14992
+#: elf32-arm.c:15152 elf32-arm.c:15238
 #, c-format
 msgid " [position independent]"
 msgstr ""
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15155
 #, c-format
 msgid " [new ABI]"
 msgstr ""
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15158
 #, c-format
 msgid " [old ABI]"
 msgstr ""
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15161
 #, c-format
 msgid " [software FP]"
 msgstr ""
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15170
 #, c-format
 msgid " [Version1 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15173 elf32-arm.c:15184
 #, c-format
 msgid " [sorted symbol table]"
 msgstr ""
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15175 elf32-arm.c:15186
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr ""
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15181
 #, c-format
 msgid " [Version2 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15189
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr ""
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15192
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr ""
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15199
 #, c-format
 msgid " [Version3 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15203
 #, c-format
 msgid " [Version4 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15207
 #, c-format
 msgid " [Version5 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15210
 #, c-format
 msgid " [soft-float ABI]"
 msgstr ""
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15213
 #, c-format
 msgid " [hard-float ABI]"
 msgstr ""
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15219
 #, c-format
 msgid " [BE8]"
 msgstr ""
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15222
 #, c-format
 msgid " [LE8]"
 msgstr ""
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15228
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr ""
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15235
 #, c-format
 msgid " [relocatable executable]"
 msgstr ""
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15241
 #, c-format
 msgid " [FDPIC ABI supplement]"
 msgstr ""
 
-#: elf32-arm.c:15000 /work/sources/binutils/current/bfd/elfnn-aarch64.c:7040
+#: elf32-arm.c:15246
+#: elfnn-aarch64.c:7555
 #, c-format
-msgid "<Unrecognised flag bits set>"
+msgid " <Unrecognised flag bits set>"
 msgstr ""
 
-#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783
-#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882
-#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7329
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:539
+#: elf32-arm.c:15363 elf32-arm.c:15497 elf32-i386.c:1535 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1090
+#: elf64-s390.c:845 elf64-x86-64.c:2050 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfxx-x86.c:970
+#: elfnn-aarch64.c:7826
+#: elfnn-kvx.c:3250
+#: elfnn-loongarch.c:756
+#: elfnn-riscv.c:764
 #, c-format
 msgid "%pB: bad symbol index: %d"
 msgstr ""
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15753
 #, c-format
 msgid ""
 "FDPIC does not yet support %s relocation to become dynamic for executable"
 msgstr ""
 
-#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998
-#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858
-#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252
-#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435
-#: elfxx-tilegx.c:2491 elfxx-x86.c:571
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:8677
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:1142
+#: elf32-arm.c:17027
 #, c-format
-msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgid "errors encountered processing file %pB"
 msgstr ""
 
-#: elf32-arm.c:16854
+#: elf32-arm.c:17400 elflink.c:13325 elflink.c:13372
 #, c-format
-msgid "errors encountered processing file %pB"
+msgid "could not find section %s"
 msgstr ""
 
-#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603
+#: elf32-arm.c:18355
 #, c-format
-msgid "could not find section %s"
+msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
 msgstr ""
 
-#: elf32-arm.c:18512
+#: elf32-arm.c:18619
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
 msgstr ""
 
 #. There's not much we can do apart from complain if this
 #. happens.
-#: elf32-arm.c:18539
+#: elf32-arm.c:18646
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
 msgstr ""
 
-#: elf32-arm.c:19366 elf32-arm.c:19388
+#: elf32-arm.c:19473 elf32-arm.c:19495
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr ""
 
-#: elf32-arm.c:19439
+#: elf32-arm.c:19546
 #, c-format
 msgid ""
 "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by "
 "%<PRId64> bytes; cannot encode branch instruction"
 msgstr ""
 
-#: elf32-arm.c:19478
+#: elf32-arm.c:19585
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr ""
 
-#: elf32-arm.c:20567
+#: elf32-arm.c:20668
 #, c-format
 msgid "error: %pB is already in final BE8 format"
 msgstr ""
 
-#: elf32-arm.c:20643
+#: elf32-arm.c:20745
 #, c-format
 msgid ""
 "error: source object %pB has EABI version %d, but target %pB has EABI "
 "version %d"
 msgstr ""
 
-#: elf32-arm.c:20658
+#: elf32-arm.c:20760
 #, c-format
 msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
 msgstr ""
 
-#: elf32-arm.c:20668
+#: elf32-arm.c:20770
 #, c-format
 msgid ""
 "error: %pB passes floats in float registers, whereas %pB passes them in "
 "integer registers"
 msgstr ""
 
-#: elf32-arm.c:20672
+#: elf32-arm.c:20774
 #, c-format
 msgid ""
 "error: %pB passes floats in integer registers, whereas %pB passes them in "
 "float registers"
 msgstr ""
 
-#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696
+#: elf32-arm.c:20784 elf32-arm.c:20788 elf32-arm.c:20798
 #, c-format
 msgid "error: %pB uses %s instructions, whereas %pB does not"
 msgstr ""
 
-#: elf32-arm.c:20700
+#: elf32-arm.c:20802
 #, c-format
 msgid "error: %pB does not use %s instructions, whereas %pB does"
 msgstr ""
 
-#: elf32-arm.c:20719
+#: elf32-arm.c:20821
 #, c-format
 msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
 msgstr ""
 
-#: elf32-arm.c:20723
+#: elf32-arm.c:20825
 #, c-format
 msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
 msgstr ""
 
-#: elf32-arm.c:20737
+#: elf32-arm.c:20839
 #, c-format
 msgid "warning: %pB supports interworking, whereas %pB does not"
 msgstr ""
 
-#: elf32-arm.c:20743
+#: elf32-arm.c:20845
 #, c-format
 msgid "warning: %pB does not support interworking, whereas %pB does"
 msgstr ""
 
-#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577
-#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493
-#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998
-#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767
-#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689
-#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878
-msgid "internal error: dangerous relocation"
+#: elf32-avr.c:1508
+msgid "%X%H: %s against `%s': error: relocation applies outside section\n"
+msgstr ""
+
+#: elf32-avr.c:1516
+msgid "%X%H: %s against `%s': error: relocation target address is odd\n"
 msgstr ""
 
-#: elf32-avr.c:3327 /work/sources/binutils/current/bfd/elfnn-aarch64.c:3126
+#: elf32-avr.c:1524
+msgid ""
+"%X%H: %s against `%s': internal error: unexpected relocation result %d\n"
+msgstr ""
+
+#: elf32-avr.c:3340
+#: elfnn-aarch64.c:3234
 #, c-format
 msgid "cannot create stub entry %s"
 msgstr ""
 
-#: elf32-bfin.c:106 elf32-bfin.c:362
+#: elf32-bfin.c:107 elf32-bfin.c:364
 msgid "relocation should be even number"
 msgstr ""
 
-#: elf32-bfin.c:1585
+#: elf32-bfin.c:1589
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
 msgstr ""
 
-#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269
-#: elf64-s390.c:3219 elf64-x86-64.c:3896
+#: elf32-bfin.c:1621 elf32-i386.c:3534 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3118 elf64-x86-64.c:4424
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
 msgstr ""
 
-#: elf32-bfin.c:2638
+#: elf32-bfin.c:2647
 #, c-format
 msgid ""
 "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero "
 "addend"
 msgstr ""
 
-#: elf32-bfin.c:2655
+#: elf32-bfin.c:2664
 msgid "relocation references symbol not defined in the module"
 msgstr ""
 
-#: elf32-bfin.c:2752
+#: elf32-bfin.c:2762
 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
 msgstr ""
 
-#: elf32-bfin.c:2793 elf32-bfin.c:2916
+#: elf32-bfin.c:2802 elf32-bfin.c:2923
 msgid "cannot emit fixups in read-only section"
 msgstr ""
 
-#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511
+#: elf32-bfin.c:2832 elf32-bfin.c:2960 elf32-lm32.c:1007 elf32-sh.c:4385
 msgid "cannot emit dynamic relocations in read-only section"
 msgstr ""
 
-#: elf32-bfin.c:2874
+#: elf32-bfin.c:2882
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr ""
 
-#: elf32-bfin.c:3039
+#: elf32-bfin.c:3045
 msgid "relocations between different segments are not supported"
 msgstr ""
 
-#: elf32-bfin.c:3040
+#: elf32-bfin.c:3046
 msgid "warning: relocation references a different segment"
 msgstr ""
 
-#: elf32-bfin.c:4787 elf32-frv.c:6603
+#: elf32-bfin.c:3141 elf32-cris.c:2042 elf32-epiphany.c:574 elf32-fr30.c:602
+#: elf32-frv.c:4057 elf32-ft32.c:500 elf32-ip2k.c:1489 elf32-iq2000.c:699
+#: elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992 elf32-moxie.c:296
+#: elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1905 elf32-tilepro.c:3380
+#: elf32-v850.c:2302 elf32-visium.c:688 elf32-xstormy16.c:938 elf64-bpf.c:348
+#: elf64-mmix.c:1549 elfxx-tilegx.c:3750
+msgid "internal error: dangerous relocation"
+msgstr ""
+
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-bfin.c:4728 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16378
+#, c-format
+msgid "private flags = %lx:"
+msgstr ""
+
+#: elf32-bfin.c:4779 elf32-frv.c:6585
 #, c-format
 msgid "%pB: cannot link non-fdpic object file into fdpic executable"
 msgstr ""
 
-#: elf32-bfin.c:4791 elf32-frv.c:6607
+#: elf32-bfin.c:4783 elf32-frv.c:6589
 #, c-format
 msgid "%pB: cannot link fdpic object file into non-fdpic executable"
 msgstr ""
 
-#: elf32-bfin.c:4941
+#: elf32-bfin.c:4920
 #, c-format
 msgid "*** check this relocation %s"
 msgstr ""
 
-#: elf32-bfin.c:5057
+#: elf32-bfin.c:5035
 msgid ""
 "the bfin target does not currently support the generation of copy relocations"
 msgstr ""
 
-#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390
+#: elf32-bfin.c:5329 elf32-cr16.c:2720 elf32-m68k.c:4420
 msgid "unsupported relocation type"
 msgstr ""
 
-#: elf32-cris.c:1119
+#: elf32-cris.c:1120
 #, c-format
 msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'"
 msgstr ""
 
-#: elf32-cris.c:1184
+#: elf32-cris.c:1185
 #, c-format
 msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'"
 msgstr ""
 
-#: elf32-cris.c:1187
+#: elf32-cris.c:1188
 #, c-format
 msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'"
 msgstr ""
 
-#: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674
-#: elf32-cris.c:1827 elf32-tic6x.c:2619
+#: elf32-cris.c:1194 elf32-cris.c:1327 elf32-cris.c:1592 elf32-cris.c:1675
+#: elf32-cris.c:1828 elf32-tic6x.c:2560
 msgid "[whose name is lost]"
 msgstr ""
 
-#: elf32-cris.c:1311 elf32-tic6x.c:2603
+#: elf32-cris.c:1312 elf32-tic6x.c:2544
 #, c-format
 msgid ""
 "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against local "
 "symbol"
 msgstr ""
 
-#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612
+#: elf32-cris.c:1321 elf32-cris.c:1669 elf32-cris.c:1822 elf32-tic6x.c:2553
 #, c-format
 msgid ""
 "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against "
 "symbol `%s'"
 msgstr ""
 
-#: elf32-cris.c:1347
+#: elf32-cris.c:1348
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'"
 msgstr ""
 
-#: elf32-cris.c:1364
+#: elf32-cris.c:1365
 #, c-format
 msgid "%pB, section %pA: relocation %s with no GOT created"
 msgstr ""
 
 #. We shouldn't get here for GCC-emitted code.
-#: elf32-cris.c:1581
+#: elf32-cris.c:1582
 #, c-format
 msgid ""
 "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps "
 "a declaration mixup?"
 msgstr ""
 
-#: elf32-cris.c:1584
+#: elf32-cris.c:1585
 #, c-format
 msgid ""
 "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol "
 "with default visibility, perhaps a declaration mixup?"
 msgstr ""
 
-#: elf32-cris.c:1955
+#: elf32-cris.c:1956
 #, c-format
 msgid ""
 "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is "
 "defined outside the program, perhaps a declaration mixup?"
 msgstr ""
 
-#: elf32-cris.c:2008
+#: elf32-cris.c:2009
 msgid "(too many global variables for -fpic: recompile with -fPIC)"
 msgstr ""
 
-#: elf32-cris.c:2015
+#: elf32-cris.c:2016
 msgid ""
 "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or "
 "-mno-small-tls)"
 msgstr ""
 
-#: elf32-cris.c:3050
+#: elf32-cris.c:3051
 #, c-format
 msgid ""
 "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation"
 msgstr ""
 
-#: elf32-cris.c:3104
+#: elf32-cris.c:3105
 #, c-format
 msgid ""
 "%pB, section %pA:\n"
@@ -2182,83 +2528,109 @@ msgid ""
 "recompile with -fPIC"
 msgstr ""
 
-#: elf32-cris.c:3322
+#: elf32-cris.c:3323
 #, c-format
 msgid ""
 "%pB, section %pA: relocation %s should not be used in a shared object; "
 "recompile with -fPIC"
 msgstr ""
 
-#: elf32-cris.c:3747
+#: elf32-cris.c:3701
 #, c-format
 msgid ""
 "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a "
 "shared object; recompile with -fPIC"
 msgstr ""
 
-#: elf32-cris.c:3860
+#: elf32-cris.c:3813
 msgid "unexpected machine number"
 msgstr ""
 
-#: elf32-cris.c:3911
+#: elf32-cris.c:3865
 #, c-format
 msgid " [symbols have a _ prefix]"
 msgstr ""
 
-#: elf32-cris.c:3914
+#: elf32-cris.c:3868
 #, c-format
 msgid " [v10 and v32]"
 msgstr ""
 
-#: elf32-cris.c:3917
+#: elf32-cris.c:3871
 #, c-format
 msgid " [v32]"
 msgstr ""
 
-#: elf32-cris.c:3961
+#: elf32-cris.c:3915
 #, c-format
 msgid ""
 "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
 msgstr ""
 
-#: elf32-cris.c:3962
+#: elf32-cris.c:3916
 #, c-format
 msgid ""
 "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
 msgstr ""
 
-#: elf32-cris.c:3981
+#: elf32-cris.c:3935
 #, c-format
 msgid "%pB contains CRIS v32 code, incompatible with previous objects"
 msgstr ""
 
-#: elf32-cris.c:3983
+#: elf32-cris.c:3937
 #, c-format
 msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
 msgstr ""
 
-#: elf32-csky.c:2066
+#: elf32-csky.c:2018
 msgid "GOT table size out of range"
 msgstr ""
 
-#: elf32-csky.c:2917
+#: elf32-csky.c:2830
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
 msgstr ""
 
-#: elf32-csky.c:2977
+#: elf32-csky.c:2853
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr ""
+
+#: elf32-csky.c:2918 elf32-csky.c:3078
 #, c-format
 msgid "%pB: machine flag conflict with target"
 msgstr ""
 
-#: elf32-csky.c:2990
+#: elf32-csky.c:2931
 #, c-format
 msgid ""
-"warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s"
+"warning: file %pB's arch flag %s conflict with target %s,set target arch "
+"flag to %s"
+msgstr ""
+
+#: elf32-csky.c:2960
+#, c-format
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr ""
+
+#: elf32-csky.c:2977
+#, c-format
+msgid "Error: %pB and %pB has different DSP version"
+msgstr ""
+
+#: elf32-csky.c:2995
+#, c-format
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr ""
+
+#: elf32-csky.c:3092
+#, c-format
+msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
 msgstr ""
 
 #. The r_type is error, not support it.
-#: elf32-csky.c:4225 elf32-i386.c:351
+#: elf32-csky.c:4331 elf32-i386.c:344
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr ""
@@ -2274,80 +2646,80 @@ msgid "jump (PC rel26) to section (%s) n
 msgstr ""
 
 #. Only if it's not an unresolved symbol.
-#: elf32-epiphany.c:573 elf32-ip2k.c:1489
+#: elf32-epiphany.c:570 elf32-ip2k.c:1485
 msgid "unsupported relocation between data/insn address spaces"
 msgstr ""
 
-#: elf32-frv.c:1452 elf32-frv.c:1603
+#: elf32-frv.c:1453 elf32-frv.c:1604
 msgid "relocation requires zero addend"
 msgstr ""
 
-#: elf32-frv.c:2829
+#: elf32-frv.c:2833
 #, c-format
 msgid "%H: relocation to `%s+%v' may have caused the error above\n"
 msgstr ""
 
-#: elf32-frv.c:2846
+#: elf32-frv.c:2850
 msgid "%H: relocation references symbol not defined in the module\n"
 msgstr ""
 
-#: elf32-frv.c:2922
+#: elf32-frv.c:2926
 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
 msgstr ""
 
-#: elf32-frv.c:2963
+#: elf32-frv.c:2967
 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3034
+#: elf32-frv.c:3038
 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3071
+#: elf32-frv.c:3075
 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3118
+#: elf32-frv.c:3122
 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3202
+#: elf32-frv.c:3206
 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3256
+#: elf32-frv.c:3260
 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3286
+#: elf32-frv.c:3290
 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3315
+#: elf32-frv.c:3319
 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3345
+#: elf32-frv.c:3349
 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3390
+#: elf32-frv.c:3394
 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3417
+#: elf32-frv.c:3421
 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
 msgstr ""
 
-#: elf32-frv.c:3538 elf32-frv.c:3660
+#: elf32-frv.c:3542 elf32-frv.c:3662
 msgid "%H: %s references dynamic symbol with nonzero addend\n"
 msgstr ""
 
-#: elf32-frv.c:3580 elf32-frv.c:3703
+#: elf32-frv.c:3583 elf32-frv.c:3704
 msgid "%H: cannot emit fixups in read-only section\n"
 msgstr ""
 
-#: elf32-frv.c:3611 elf32-frv.c:3746
+#: elf32-frv.c:3613 elf32-frv.c:3746
 msgid "%H: cannot emit dynamic relocations in read-only section\n"
 msgstr ""
 
@@ -2361,18 +2733,18 @@ msgstr ""
 msgid "%H: reloc against `%s': %s\n"
 msgstr ""
 
-#: elf32-frv.c:6514
+#: elf32-frv.c:6496
 #, c-format
 msgid ""
 "%pB: compiled with %s and linked with modules that use non-pic relocations"
 msgstr ""
 
-#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876
+#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
 #, c-format
 msgid "%pB: compiled with %s and linked with modules compiled with %s"
 msgstr ""
 
-#: elf32-frv.c:6581
+#: elf32-frv.c:6563
 #, c-format
 msgid ""
 "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
@@ -2383,305 +2755,326 @@ msgstr ""
 msgid "%pB: relocations in generic ELF (EM: %d)"
 msgstr ""
 
-#: elf32-hppa.c:834 elf32-hppa.c:3511
+#: elf32-hppa.c:863 elf32-hppa.c:3403
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
 msgstr ""
 
-#: elf32-hppa.c:1248
+#: elf32-hppa.c:1241
 #, c-format
 msgid ""
 "%pB: relocation %s can not be used when making a shared object; recompile "
 "with -fPIC"
 msgstr ""
 
-#: elf32-hppa.c:2688
+#: elf32-hppa.c:2580
 #, c-format
 msgid "%pB: duplicate export stub %s"
 msgstr ""
 
-#: elf32-hppa.c:3344
+#: elf32-hppa.c:3236
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): %s fixup for insn %#x is not supported in a non-shared "
 "link"
 msgstr ""
 
-#: elf32-hppa.c:4140
+#: elf32-hppa.c:4032
 #, c-format
 msgid "%s has both normal and TLS relocs"
 msgstr ""
 
-#: elf32-hppa.c:4158
+#: elf32-hppa.c:4050
 #, c-format
 msgid "%pB:%s has both normal and TLS relocs"
 msgstr ""
 
-#: elf32-hppa.c:4217
+#: elf32-hppa.c:4109
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
 msgstr ""
 
-#: elf32-hppa.c:4521
+#: elf32-hppa.c:4415
 msgid ".got section not immediately after .plt section"
 msgstr ""
 
-#: elf32-i386.c:1178 elf64-x86-64.c:1377
+#: elf32-i386.c:1177 elf64-x86-64.c:1506
 #, c-format
 msgid ""
-"%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `"
-"%pA' failed"
+"%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%"
+"pA' failed"
 msgstr ""
 
-#: elf32-i386.c:1269
+#: elf32-i386.c:1286
 #, c-format
 msgid ""
 "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register "
 "can not be used when making a shared object"
 msgstr ""
 
-#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592
-#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591 elfxx-tilegx.c:1805
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:451
+#: elf32-i386.c:1719 elf32-s390.c:1151 elf32-sh.c:5499 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1263 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767
+#: elfnn-loongarch.c:612
+#: elfnn-riscv.c:671
 #, c-format
 msgid "%pB: `%s' accessed both as normal and thread local symbol"
 msgstr ""
 
-#: elf32-i386.c:1798
+#: elf32-i386.c:1791
 #, c-format
 msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
 msgstr ""
 
-#: elf32-i386.c:2379 elf64-x86-64.c:2670
+#: elf32-i386.c:1846 elf64-x86-64.c:2436
+#, c-format
+msgid ""
+"%pB: non-canonical reference to canonical protected function `%s' in %pB"
+msgstr ""
+
+#: elf32-i386.c:2410 elf64-x86-64.c:2900
+#: elfnn-riscv.c:2455
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
 msgstr ""
 
-#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727
-#: elf64-x86-64.c:4069 elf64-x86-64.c:4225
+#: elf32-i386.c:2443 elf32-i386.c:3745 elf32-i386.c:3893 elf64-x86-64.c:2957
+#: elf64-x86-64.c:4597 elf64-x86-64.c:4765
+#: elfnn-riscv.c:2328
+#: elfnn-riscv.c:3184
+#: elfnn-riscv.c:3258
 #, c-format
 msgid "Local IFUNC function `%s' in %pB\n"
 msgstr ""
 
-#: elf32-i386.c:2569
+#: elf32-i386.c:2621
 #, c-format
 msgid ""
 "%pB: direct GOT relocation %s against `%s' without base register can not be "
 "used when making a shared object"
 msgstr ""
 
-#: elf32-i386.c:2604 elf64-x86-64.c:2919
+#: elf32-i386.c:2656 elf64-x86-64.c:3174
 msgid "hidden symbol"
 msgstr ""
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2659 elf64-x86-64.c:3177
 msgid "internal symbol"
 msgstr ""
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2662 elf64-x86-64.c:3180
 msgid "protected symbol"
 msgstr ""
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2665 elf64-x86-64.c:3183
 msgid "symbol"
 msgstr ""
 
-#: elf32-i386.c:2619
+#: elf32-i386.c:2671
 #, c-format
 msgid ""
 "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when "
 "making a shared object"
 msgstr ""
 
-#: elf32-i386.c:2632
+#: elf32-i386.c:2684
 #, c-format
 msgid ""
 "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when "
 "making a shared object"
 msgstr ""
 
-#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935
+#: elf32-i386.c:4096 elf64-x86-64.c:4976
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr ""
+
+#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
 msgid ""
 "ip2k relaxer: switch table without complete matching relocation information."
 msgstr ""
 
-#: elf32-ip2k.c:879 elf32-ip2k.c:962
+#: elf32-ip2k.c:878 elf32-ip2k.c:961
 msgid "ip2k relaxer: switch table header corrupt."
 msgstr ""
 
-#: elf32-ip2k.c:1302
+#: elf32-ip2k.c:1298
 #, c-format
 msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr ""
 
-#: elf32-ip2k.c:1321
+#: elf32-ip2k.c:1317
 #, c-format
 msgid ""
 "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr ""
 
-#: elf32-lm32.c:651 elf32-nios2.c:3141
+#: elf32-lm32.c:609 elf32-nios2.c:3145
 msgid "global pointer relative relocation when _gp not defined"
 msgstr ""
 
-#: elf32-lm32.c:706 elf32-nios2.c:3578
+#: elf32-lm32.c:664 elf32-nios2.c:3582
 msgid "global pointer relative address out of range"
 msgstr ""
 
-#: elf32-lm32.c:1002
+#: elf32-lm32.c:960
 #, c-format
 msgid "internal error: addend should be zero for %s"
 msgstr ""
 
-#: elf32-m32r.c:1471
+#: elf32-m32r.c:1461
 msgid "SDA relocation when _SDA_BASE_ not defined"
 msgstr ""
 
-#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149
+#: elf32-m32r.c:2776 elf32-microblaze.c:1152 elf32-microblaze.c:1200
 #, c-format
 msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)"
 msgstr ""
 
-#: elf32-m32r.c:3487
+#: elf32-m32r.c:3279
 #, c-format
 msgid "%pB: instruction set mismatch with previous modules"
 msgstr ""
 
-#: elf32-m32r.c:3508 elf32-nds32.c:6992
+#: elf32-m32r.c:3300 elf32-nds32.c:6900
 #, c-format
 msgid "private flags = %lx"
 msgstr ""
 
-#: elf32-m32r.c:3513
+#: elf32-m32r.c:3305
 #, c-format
 msgid ": m32r instructions"
 msgstr ""
 
-#: elf32-m32r.c:3514
+#: elf32-m32r.c:3306
 #, c-format
 msgid ": m32rx instructions"
 msgstr ""
 
-#: elf32-m32r.c:3515
+#: elf32-m32r.c:3307
 #, c-format
 msgid ": m32r2 instructions"
 msgstr ""
 
-#: elf32-m68hc1x.c:1116
+#: elf32-m68hc1x.c:1135
 #, c-format
 msgid ""
 "reference to the far symbol `%s' using a wrong relocation may result in "
 "incorrect execution"
 msgstr ""
 
-#: elf32-m68hc1x.c:1150
+#: elf32-m68hc1x.c:1166
 #, c-format
 msgid ""
 "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you "
 "must manually offset the address, and possibly manage the page, in your code."
 msgstr ""
 
-#: elf32-m68hc1x.c:1168
+#: elf32-m68hc1x.c:1182
 #, c-format
 msgid ""
 "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked "
 "address [%lx:%04lx] (%lx)"
 msgstr ""
 
-#: elf32-m68hc1x.c:1184
+#: elf32-m68hc1x.c:1197
 #, c-format
 msgid ""
-"reference to a banked address [%lx:%04lx] in the normal address space at "
-"%04lx"
+"reference to a banked address [%lx:%04lx] in the normal address space at %"
+"04lx"
 msgstr ""
 
-#: elf32-m68hc1x.c:1225
+#: elf32-m68hc1x.c:1233
 #, c-format
 msgid ""
 "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you "
 "must manually offset the address in your code"
 msgstr ""
 
-#: elf32-m68hc1x.c:1352
+#: elf32-m68hc1x.c:1357
 #, c-format
 msgid ""
 "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-"
 "bit integers"
 msgstr ""
 
-#: elf32-m68hc1x.c:1359
+#: elf32-m68hc1x.c:1364
 #, c-format
 msgid ""
 "%pB: linking files compiled for 32-bit double (-fshort-double) and others "
 "for 64-bit double"
 msgstr ""
 
-#: elf32-m68hc1x.c:1368
+#: elf32-m68hc1x.c:1373
 #, c-format
 msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
 msgstr ""
 
-#: elf32-m68hc1x.c:1413 elf32-xgate.c:497
+#: elf32-m68hc1x.c:1418 elf32-xgate.c:497
 #, c-format
 msgid "[abi=32-bit int, "
 msgstr ""
 
-#: elf32-m68hc1x.c:1415 elf32-xgate.c:499
+#: elf32-m68hc1x.c:1420 elf32-xgate.c:499
 #, c-format
 msgid "[abi=16-bit int, "
 msgstr ""
 
-#: elf32-m68hc1x.c:1418 elf32-xgate.c:502
+#: elf32-m68hc1x.c:1423 elf32-xgate.c:502
 #, c-format
 msgid "64-bit double, "
 msgstr ""
 
-#: elf32-m68hc1x.c:1420 elf32-xgate.c:504
+#: elf32-m68hc1x.c:1425 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr ""
 
-#: elf32-m68hc1x.c:1423
+#: elf32-m68hc1x.c:1428
 #, c-format
 msgid "cpu=HC11]"
 msgstr ""
 
-#: elf32-m68hc1x.c:1425
+#: elf32-m68hc1x.c:1430
 #, c-format
 msgid "cpu=HCS12]"
 msgstr ""
 
-#: elf32-m68hc1x.c:1427
+#: elf32-m68hc1x.c:1432
 #, c-format
 msgid "cpu=HC12]"
 msgstr ""
 
-#: elf32-m68hc1x.c:1430
+#: elf32-m68hc1x.c:1435
 #, c-format
 msgid " [memory=bank-model]"
 msgstr ""
 
-#: elf32-m68hc1x.c:1432
+#: elf32-m68hc1x.c:1437
 #, c-format
 msgid " [memory=flat]"
 msgstr ""
 
-#: elf32-m68hc1x.c:1435
+#: elf32-m68hc1x.c:1440
 #, c-format
 msgid " [XGATE RAM offsetting]"
 msgstr ""
 
-#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3572 elf32-ppc.c:3580
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr ""
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:8085 vms-alpha.c:8101
 msgid "unknown"
 msgstr ""
 
-#: elf32-m68k.c:1660
+#: elf32-m68k.c:1731
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d"
 msgstr ""
 
-#: elf32-m68k.c:1667
+#: elf32-m68k.c:1738
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
 msgstr ""
@@ -2697,364 +3090,367 @@ msgstr ""
 msgid "MeP: howto %d has type %d"
 msgstr ""
 
-#: elf32-mep.c:622
+#: elf32-mep.c:618
 #, c-format
 msgid "%pB and %pB are for different cores"
 msgstr ""
 
-#: elf32-mep.c:641
+#: elf32-mep.c:637
 #, c-format
 msgid "%pB and %pB are for different configurations"
 msgstr ""
 
-#: elf32-mep.c:679
+#: elf32-mep.c:675
 #, c-format
 msgid "private flags = 0x%lx"
 msgstr ""
 
-#: elf32-metag.c:1863
+#: elf32-metag.c:1857
 #, c-format
 msgid "%pB(%pA): multiple TLS models are not supported"
 msgstr ""
 
-#: elf32-metag.c:1866
+#: elf32-metag.c:1860
 #, c-format
 msgid ""
 "%pB(%pA): shared library symbol %s encountered whilst performing a static "
 "link"
 msgstr ""
 
-#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538
-#: elfxx-tilegx.c:3543
+#: elf32-microblaze.c:1595 elf32-tilepro.c:3021 elfxx-sparc.c:3446
+#: elfxx-tilegx.c:3415
 #, c-format
 msgid "%pB: probably compiled without -fPIC?"
 msgstr ""
 
-#: elf32-mips.c:1775 elf64-mips.c:3516 elfn32-mips.c:3332
+#: elf32-mips.c:1776 elf64-mips.c:3515 elfn32-mips.c:3334
 msgid "literal relocation occurs for an external symbol"
 msgstr ""
 
-#: elf32-mips.c:1822 elf32-score.c:569 elf32-score7.c:469 elf64-mips.c:3559
-#: elfn32-mips.c:3373
+#: elf32-mips.c:1827 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3558
+#: elfn32-mips.c:3376
 msgid "32bits gp relative relocation occurs for an external symbol"
 msgstr ""
 
-#: elf32-msp430.c:837 elf32-msp430.c:1151
+#: elf32-msp430.c:914
+#, c-format
+msgid ""
+"error: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds "
+"available space"
+msgstr ""
+
+#: elf32-msp430.c:983 elf32-msp430.c:1297
 msgid "try enabling relaxation to avoid relocation truncations"
 msgstr ""
 
-#: elf32-msp430.c:1358
+#: elf32-msp430.c:1506
 msgid "internal error: branch/jump to an odd address detected"
 msgstr ""
 
-#: elf32-msp430.c:2357
+#: elf32-msp430.c:2673
 #, c-format
 msgid "warning: %pB: unknown MSPABI object attribute %d"
 msgstr ""
 
-#: elf32-msp430.c:2456
+#: elf32-msp430.c:2774
 #, c-format
 msgid "error: %pB uses %s instructions but %pB uses %s"
 msgstr ""
 
-#: elf32-msp430.c:2468
+#: elf32-msp430.c:2786
 #, c-format
 msgid "error: %pB uses the %s code model whereas %pB uses the %s code model"
 msgstr ""
 
-#: elf32-msp430.c:2480
+#: elf32-msp430.c:2799
 #, c-format
 msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
 msgstr ""
 
-#: elf32-msp430.c:2491
+#: elf32-msp430.c:2810
 #, c-format
 msgid "error: %pB uses the %s data model whereas %pB uses the %s data model"
 msgstr ""
 
-#: elf32-msp430.c:2503
+#: elf32-msp430.c:2823
 #, c-format
 msgid "error: %pB uses the small code model but %pB uses the %s data model"
 msgstr ""
 
-#: elf32-msp430.c:2515
+#: elf32-msp430.c:2835
 #, c-format
 msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions"
 msgstr ""
 
-#: elf32-nds32.c:3624
+#: elf32-msp430.c:2860
 #, c-format
-msgid "error: can't find symbol: %s"
+msgid ""
+"error: %pB can use the upper region for data, but %pB assumes data is "
+"exclusively in lower memory"
 msgstr ""
 
-#: elf32-nds32.c:5639
+#: elf32-nds32.c:3674
 #, c-format
-msgid ""
-"%pB: relocation %s against `%s' can not be used whenmaking a shared object; "
-"recompile with -fPIC"
+msgid "error: can't find symbol: %s"
 msgstr ""
 
-#: elf32-nds32.c:5669
+#: elf32-nds32.c:5573
 #, c-format
 msgid "%pB: warning: %s unsupported in shared mode"
 msgstr ""
 
-#: elf32-nds32.c:5795
+#: elf32-nds32.c:5699
 #, c-format
 msgid "%pB: warning: unaligned access to GOT entry"
 msgstr ""
 
-#: elf32-nds32.c:5836
+#: elf32-nds32.c:5740
 #, c-format
 msgid "%pB: warning: relocate SDA_BASE failed"
 msgstr ""
 
-#: elf32-nds32.c:5858
+#: elf32-nds32.c:5762
 #, c-format
 msgid "%pB(%pA): warning: unaligned small data access of type %d"
 msgstr ""
 
-#: elf32-nds32.c:6784
+#: elf32-nds32.c:6688
 #, c-format
 msgid ""
 "%pB: ISR vector size mismatch with previous modules, previous %u-byte, "
 "current %u-byte"
 msgstr ""
 
-#: elf32-nds32.c:6828
+#: elf32-nds32.c:6736
 #, c-format
 msgid "%pB: warning: endian mismatch with previous modules"
 msgstr ""
 
-#: elf32-nds32.c:6842
+#: elf32-nds32.c:6750
 #, c-format
 msgid ""
 "%pB: warning: older version of object file encountered, please recompile "
 "with current tool chain"
 msgstr ""
 
-#: elf32-nds32.c:6930
+#: elf32-nds32.c:6838
 #, c-format
 msgid "%pB: error: ABI mismatch with previous modules"
 msgstr ""
 
-#: elf32-nds32.c:6940
+#: elf32-nds32.c:6848
 #, c-format
 msgid "%pB: error: instruction set mismatch with previous modules"
 msgstr ""
 
-#: elf32-nds32.c:6967
+#: elf32-nds32.c:6875
 #, c-format
 msgid "%pB: warning: incompatible elf-versions %s and %s"
 msgstr ""
 
-#: elf32-nds32.c:6998
+#: elf32-nds32.c:6906
 #, c-format
 msgid ": n1 instructions"
 msgstr ""
 
-#: elf32-nds32.c:7001
+#: elf32-nds32.c:6909
 #, c-format
 msgid ": n1h instructions"
 msgstr ""
 
-#: elf32-nds32.c:9462
+#: elf32-nds32.c:9358
 #, c-format
 msgid "%pB: error: search_nds32_elf_blank reports wrong node"
 msgstr ""
 
-#: elf32-nds32.c:9722
+#: elf32-nds32.c:9622
 #, c-format
 msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
 msgstr ""
 
-#: elf32-nds32.c:12975
+#: elf32-nds32.c:12887
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr ""
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12906
 #, c-format
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr ""
 
-#: elf32-nds32.c:13275 reloc.c:8410
+#: elf32-nios2.c:2934
 #, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgid "error: %pB: big-endian R2 is not supported"
 msgstr ""
 
-#: elf32-nios2.c:2930
+#: elf32-nios2.c:2950
 #, c-format
-msgid "error: %pB: big-endian R2 is not supported"
+msgid "error: %pB: conflicting CPU architectures %d/%d"
 msgstr ""
 
-#: elf32-nios2.c:3822
+#: elf32-nios2.c:3825
 #, c-format
 msgid ""
-"global pointer relative relocation at address 0x%08x when _gp not defined\n"
+"global pointer relative relocation at address %#<PRIx64> when _gp not "
+"defined\n"
 msgstr ""
 
-#: elf32-nios2.c:3842
+#: elf32-nios2.c:3852
 #, c-format
 msgid ""
-"unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because "
-"the offset (%d) is out of the allowed range, -32678 to 32767\n"
+"unable to reach %s (at %#<PRIx64>) from the global pointer (at %#<PRIx64>) "
+"because the offset (%<PRId64>) is out of the allowed range, -32678 to 32767\n"
 msgstr ""
 
-#: elf32-nios2.c:4495 elf32-pru.c:928
+#: elf32-nios2.c:4506 elf32-pru.c:931
 msgid "relocation out of range"
 msgstr ""
 
-#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716
+#: elf32-nios2.c:4516 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr ""
 
-#: elf32-nios2.c:5378
+#: elf32-nios2.c:5354
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr ""
 
-#: elf32-or1k.c:1177
+#: elf32-or1k.c:1258
 #, c-format
 msgid "%pB: Cannot handle relocation value size of %d"
 msgstr ""
 
-#: elf32-or1k.c:1286
+#: elf32-or1k.c:1377
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr ""
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1431
 #, c-format
 msgid "%pB: addend should be zero for plt relocations"
 msgstr ""
 
-#: elf32-or1k.c:1445
+#: elf32-or1k.c:1544
 #, c-format
 msgid "%pB: addend should be zero for got relocations"
 msgstr ""
 
-#: elf32-or1k.c:1462
+#: elf32-or1k.c:1561
 #, c-format
 msgid "%pB: gotoff relocation against dynamic symbol %s"
 msgstr ""
 
-#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599
+#: elf32-or1k.c:1575 elf32-or1k.c:1590 elf64-alpha.c:4410 elf64-alpha.c:4554
 #, c-format
 msgid "%pB: pc-relative relocation against dynamic symbol %s"
 msgstr ""
 
-#: elf32-or1k.c:1493
+#: elf32-or1k.c:1604
 #, c-format
 msgid "%pB: non-pic relocation against symbol %s"
 msgstr ""
 
-#: elf32-or1k.c:1577
+#: elf32-or1k.c:1688
 #, c-format
 msgid "%pB: support for local dynamic not implemented"
 msgstr ""
 
-#: elf32-or1k.c:1729
+#: elf32-or1k.c:1867
 #, c-format
 msgid "%pB: will not resolve runtime TLS relocation"
 msgstr ""
 
-#: elf32-or1k.c:2074
+#: elf32-or1k.c:2201
 #, c-format
 msgid "%pB: bad relocation section name `%s'"
 msgstr ""
 
-#: elf32-or1k.c:3218
+#: elf32-or1k.c:3315
 #, c-format
 msgid "%pB: %s flag mismatch with previous modules"
 msgstr ""
 
-#: elf32-ppc.c:986
+#: elf32-ppc.c:990 elf64-ppc.c:1753
 #, c-format
 msgid "generic linker can't handle %s"
 msgstr ""
 
-#: elf32-ppc.c:1617
+#: elf32-ppc.c:1628
 #, c-format
 msgid "corrupt %s section in %pB"
 msgstr ""
 
-#: elf32-ppc.c:1637
+#: elf32-ppc.c:1647
 #, c-format
 msgid "unable to read in %s section from %pB"
 msgstr ""
 
-#: elf32-ppc.c:1679
+#: elf32-ppc.c:1689
 #, c-format
 msgid "warning: unable to set size of %s section in %pB"
 msgstr ""
 
-#: elf32-ppc.c:1729
+#: elf32-ppc.c:1738
 msgid "failed to allocate space for new APUinfo section"
 msgstr ""
 
-#: elf32-ppc.c:1748
+#: elf32-ppc.c:1757
 msgid "failed to compute new APUinfo section"
 msgstr ""
 
-#: elf32-ppc.c:1751
+#: elf32-ppc.c:1760
 msgid "failed to install new APUinfo section"
 msgstr ""
 
-#: elf32-ppc.c:2853
+#: elf32-ppc.c:2869
 #, c-format
 msgid "%pB: relocation %s cannot be used when making a shared object"
 msgstr ""
 
-#: elf32-ppc.c:3587 elf32-ppc.c:3595
-#, c-format
-msgid "%pB uses hard float, %pB uses soft float"
-msgstr ""
-
-#: elf32-ppc.c:3603 elf32-ppc.c:3611
+#: elf32-ppc.c:3588 elf32-ppc.c:3596
 #, c-format
 msgid ""
 "%pB uses double-precision hard float, %pB uses single-precision hard float"
 msgstr ""
 
-#: elf32-ppc.c:3630 elf32-ppc.c:3638
+#: elf32-ppc.c:3618 elf32-ppc.c:3626
 #, c-format
 msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
 msgstr ""
 
-#: elf32-ppc.c:3646 elf32-ppc.c:3654
+#: elf32-ppc.c:3634 elf32-ppc.c:3642
 #, c-format
 msgid "%pB uses IBM long double, %pB uses IEEE long double"
 msgstr ""
 
-#: elf32-ppc.c:3721 elf32-ppc.c:3730
+#: elf32-ppc.c:3709 elf32-ppc.c:3718
 #, c-format
 msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
 msgstr ""
 
-#: elf32-ppc.c:3759 elf32-ppc.c:3768
+#: elf32-ppc.c:3747 elf32-ppc.c:3756
 #, c-format
 msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
 msgstr ""
 
-#: elf32-ppc.c:3829
+#: elf32-ppc.c:3820
 #, c-format
 msgid ""
 "%pB: compiled with -mrelocatable and linked with modules compiled normally"
 msgstr ""
 
-#: elf32-ppc.c:3837
+#: elf32-ppc.c:3828
 #, c-format
 msgid ""
 "%pB: compiled normally and linked with modules compiled with -mrelocatable"
 msgstr ""
 
-#: elf32-ppc.c:3906
+#: elf32-ppc.c:3899
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
 msgstr ""
 
-#: elf32-ppc.c:3925
+#: elf32-ppc.c:3918
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
 msgstr ""
@@ -3068,44 +3464,53 @@ msgstr ""
 msgid "bss-plt forced by profiling"
 msgstr ""
 
+#: elf32-ppc.c:4608 elf64-ppc.c:8497
+msgid "%H: warning: %s unexpected insn %#x.\n"
+msgstr ""
+
 #. Uh oh, we didn't find the expected call.  We
 #. could just mark this symbol to exclude it
 #. from tls optimization but it's safer to skip
 #. the entire optimization.
-#: elf32-ppc.c:4606 elf64-ppc.c:7724
+#: elf32-ppc.c:4638 elf64-ppc.c:8562
 #, c-format
 msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
 msgstr ""
 
-#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534
-#: elfxx-tilegx.c:2579
+#: elf32-ppc.c:5565 elf32-sh.c:3019 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elfxx-tilegx.c:2494
 #, c-format
 msgid "%pB: dynamic relocation in read-only section `%pA'\n"
 msgstr ""
 
-#: elf32-ppc.c:7457
+#: elf32-ppc.c:6511
+msgid "%pB: Adjusting branch at 0x%V towards \"%s\" in section %s\n"
+msgstr ""
+
+#: elf32-ppc.c:7464
 msgid "%P: %H: error: %s with unexpected instruction %x\n"
 msgstr ""
 
-#: elf32-ppc.c:7494
+#: elf32-ppc.c:7502
 msgid "%H: fixup branch overflow\n"
 msgstr ""
 
-#: elf32-ppc.c:7534 elf32-ppc.c:7570
+#: elf32-ppc.c:7542 elf32-ppc.c:7580
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
 msgstr ""
 
-#: elf32-ppc.c:7634
+#: elf32-ppc.c:7644
 #, c-format
 msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
 msgstr ""
 
-#: elf32-ppc.c:7673 elf64-ppc.c:15220
-msgid "%H: warning: %s unexpected insn %#x.\n"
+#: elf32-ppc.c:7680
+#, c-format
+msgid "%pB: reloc %#x unsupported"
 msgstr ""
 
-#: elf32-ppc.c:7985
+#: elf32-ppc.c:7963
 #, c-format
 msgid "%H: non-zero addend on %s reloc against `%s'\n"
 msgstr ""
@@ -3118,115 +3523,122 @@ msgstr ""
 #. local won't have the +32k reloc addend trick marking
 #. -fPIC code, so the linker won't know whether r30 is
 #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
-#: elf32-ppc.c:8017
+#: elf32-ppc.c:7995
 #, c-format
 msgid "%X%H: @local call to ifunc %s\n"
 msgstr ""
 
-#: elf32-ppc.c:8187
+#: elf32-ppc.c:8173
 #, c-format
 msgid "%H: relocation %s for indirect function %s unsupported\n"
 msgstr ""
 
-#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725
+#: elf32-ppc.c:8511 elf32-ppc.c:8542 elf32-ppc.c:8645 elf32-ppc.c:8745
 #, c-format
 msgid ""
 "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
 msgstr ""
 
-#: elf32-ppc.c:8855 elf32-ppc.c:8873
-msgid "%P: %H: %s relocation unsupported for bss-plt\n"
+#: elf32-ppc.c:8923 elf32-ppc.c:8944
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
 msgstr ""
 
-#: elf32-ppc.c:8954
+#: elf32-ppc.c:9026
 #, c-format
 msgid "%H: error: %s against `%s' not a multiple of %u\n"
 msgstr ""
 
-#: elf32-ppc.c:8983
+#: elf32-ppc.c:9055
 #, c-format
 msgid "%H: unresolvable %s relocation against symbol `%s'\n"
 msgstr ""
 
-#: elf32-ppc.c:9064
+#: elf32-ppc.c:9137
 #, c-format
 msgid "%H: %s reloc against `%s': error %d\n"
 msgstr ""
 
-#: elf32-ppc.c:9959 elf64-ppc.c:15715
+#: elf32-ppc.c:10019
 msgid ""
 "%X%P: text relocations and GNU indirect functions will result in a segfault "
 "at runtime\n"
 msgstr ""
 
-#: elf32-ppc.c:9963 elf64-ppc.c:15719
+#: elf32-ppc.c:10023 elf64-ppc.c:18302
 msgid ""
 "%P: warning: text relocations and GNU indirect functions may result in a "
 "segfault at runtime\n"
 msgstr ""
 
-#: elf32-ppc.c:10008
+#: elf32-ppc.c:10068
 #, c-format
 msgid "%s not defined in linker created %pA"
 msgstr ""
 
-#: elf32-pru.c:579 elf32-pru.c:1472
+#: elf32-pru.c:582 elf32-pru.c:1477
 #, c-format
 msgid "error: %pB: old incompatible object file detected"
 msgstr ""
 
-#: elf32-rl78.c:372
-msgid "internal error: RL78 reloc stack overflow"
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
 msgstr ""
 
-#: elf32-rl78.c:383
-msgid "internal error: RL78 reloc stack underflow"
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
 msgstr ""
 
-#: elf32-rl78.c:1053
+#: elf32-rl78.c:1069
 msgid "warning: RL78_SYM reloc with an unknown symbol"
 msgstr ""
 
-#: elf32-rl78.c:1084 elf32-rx.c:1456
-#, c-format
-msgid "%pB(%pA): error: call to undefined function '%s'"
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr ""
+
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
 msgstr ""
 
-#: elf32-rl78.c:1205
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr ""
+
+#: elf32-rl78.c:1220
 #, c-format
 msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
 msgstr ""
 
-#: elf32-rl78.c:1222
+#: elf32-rl78.c:1237
 #, c-format
 msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
 msgstr ""
 
-#: elf32-rl78.c:1231
+#: elf32-rl78.c:1246
 msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
 msgstr ""
 
-#: elf32-rl78.c:1235 elf32-rl78.c:1239
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
 #, c-format
 msgid "- %pB is 64-bit, %pB is not"
 msgstr ""
 
-#: elf32-rl78.c:1266
+#: elf32-rl78.c:1281
 #, c-format
 msgid " [64-bit doubles]"
 msgstr ""
 
-#: elf32-rx.c:605
+#: elf32-rx.c:618
 #, c-format
 msgid "%pB:%pA: table entry %s outside table"
 msgstr ""
 
-#: elf32-rx.c:612
+#: elf32-rx.c:625
 #, c-format
 msgid "%pB:%pA: table entry %s not word-aligned within table"
 msgstr ""
 
-#: elf32-rx.c:684
+#: elf32-rx.c:700
 #, c-format
 msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
 msgstr ""
@@ -3235,74 +3647,79 @@ msgstr ""
 #. an absolute address is being computed.  There are special cases
 #. for relocs against symbols that are known to be referenced in
 #. crt0.o before the PID base address register has been initialised.
-#: elf32-rx.c:704
+#: elf32-rx.c:720
 #, c-format
 msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
 msgstr ""
 
-#: elf32-rx.c:1288
+#: elf32-rx.c:1304
 msgid "warning: RX_SYM reloc with an unknown symbol"
 msgstr ""
 
-#: elf32-rx.c:3167
+#: elf32-rx.c:1472
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr ""
+
+#: elf32-rx.c:3185
 #, c-format
 msgid "there is a conflict merging the ELF header flags from %pB"
 msgstr ""
 
-#: elf32-rx.c:3170
+#: elf32-rx.c:3188
 #, c-format
 msgid "  the input  file's flags: %s"
 msgstr ""
 
-#: elf32-rx.c:3172
+#: elf32-rx.c:3190
 #, c-format
 msgid "  the output file's flags: %s"
 msgstr ""
 
-#: elf32-rx.c:3792
+#: elf32-rx.c:3797
 #, c-format
 msgid "%pB:%pA: table %s missing corresponding %s"
 msgstr ""
 
-#: elf32-rx.c:3800
+#: elf32-rx.c:3805
 #, c-format
 msgid "%pB:%pA: %s and %s must be in the same input section"
 msgstr ""
 
-#: elf32-s390.c:2140 elf64-s390.c:2095
+#: elf32-s390.c:2009 elf64-s390.c:1976
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
 msgstr ""
 
-#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3875
 msgid "not enough GOT space for local GOT entries"
 msgstr ""
 
-#: elf32-score.c:2746
+#: elf32-score.c:2747
 msgid "address not word aligned"
 msgstr ""
 
-#: elf32-score.c:2827 elf32-score7.c:2632
+#: elf32-score.c:2828 elf32-score7.c:2635
 #, c-format
 msgid "%pB: malformed reloc detected for section %pA"
 msgstr ""
 
-#: elf32-score.c:2881 elf32-score7.c:2686
+#: elf32-score.c:2882 elf32-score7.c:2689
 #, c-format
 msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
 msgstr ""
 
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3990 elf32-score7.c:3797
 #, c-format
 msgid " [pic]"
 msgstr ""
 
-#: elf32-score.c:4007 elf32-score7.c:3812
+#: elf32-score.c:3994 elf32-score7.c:3801
 #, c-format
 msgid " [fix dep]"
 msgstr ""
 
-#: elf32-score.c:4050 elf32-score7.c:3855
+#: elf32-score.c:4041 elf32-score7.c:3848
 #, c-format
 msgid "%pB: warning: linking PIC files with non-PIC files"
 msgstr ""
@@ -3312,170 +3729,166 @@ msgstr ""
 msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
 msgstr ""
 
-#: elf32-sh.c:3633
-msgid "unexpected STO_SH5_ISA32 on local symbol is not handled"
-msgstr ""
-
-#: elf32-sh.c:3880
+#: elf32-sh.c:3754
 #, c-format
 msgid ""
 "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
 msgstr ""
 
-#: elf32-sh.c:3910 elf32-sh.c:3926
+#: elf32-sh.c:3784 elf32-sh.c:3800
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
 msgstr ""
 
-#: elf32-sh.c:3942
+#: elf32-sh.c:3816
 #, c-format
 msgid ""
 "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocation %<PRId64> not in range -32..32"
 msgstr ""
 
-#: elf32-sh.c:3958
+#: elf32-sh.c:3832
 #, c-format
 msgid ""
 "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocation %<PRId64> not in range -32..32"
 msgstr ""
 
-#: elf32-sh.c:4088 elf32-sh.c:4483
+#: elf32-sh.c:3962 elf32-sh.c:4357
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot emit fixup to `%s' in read-only section"
 msgstr ""
 
-#: elf32-sh.c:4586
+#: elf32-sh.c:4460
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
 msgstr ""
 
-#: elf32-sh.c:4705
+#: elf32-sh.c:4579
 #, c-format
 msgid ""
-"%pB(%pA): offset in relocation for GD->LE translation is too small: "
-"%#<PRIx64>"
+"%pB(%pA): offset in relocation for GD->LE translation is too small: %"
+"#<PRIx64>"
 msgstr ""
 
 #. The backslash is to prevent bogus trigraph detection.
-#: elf32-sh.c:4723
+#: elf32-sh.c:4597
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
 msgstr ""
 
-#: elf32-sh.c:4731
+#: elf32-sh.c:4605
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
 msgstr ""
 
-#: elf32-sh.c:4738
+#: elf32-sh.c:4612
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
 msgstr ""
 
-#: elf32-sh.c:4745
+#: elf32-sh.c:4619
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
 msgstr ""
 
-#: elf32-sh.c:4752
+#: elf32-sh.c:4626
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
 msgstr ""
 
-#: elf32-sh.c:4759
+#: elf32-sh.c:4633
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
 msgstr ""
 
-#: elf32-sh.c:4794
+#: elf32-sh.c:4668
 #, c-format
 msgid ""
-"%pB(%pA): offset in relocation for IE->LE translation is too small: "
-"%#<PRIx64>"
+"%pB(%pA): offset in relocation for IE->LE translation is too small: %"
+"#<PRIx64>"
 msgstr ""
 
-#: elf32-sh.c:4812
+#: elf32-sh.c:4686
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
 msgstr ""
 
-#: elf32-sh.c:4821
+#: elf32-sh.c:4695
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
 msgstr ""
 
-#: elf32-sh.c:4828
+#: elf32-sh.c:4702
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
 msgstr ""
 
-#: elf32-sh.c:4943
+#: elf32-sh.c:4817
 #, c-format
 msgid ""
-"%pB(%pA): offset in relocation for GD->IE translation is too small: "
-"%#<PRIx64>"
+"%pB(%pA): offset in relocation for GD->IE translation is too small: %"
+"#<PRIx64>"
 msgstr ""
 
-#: elf32-sh.c:5011
+#: elf32-sh.c:4885
 #, c-format
 msgid ""
-"%pB(%pA): offset in relocation for LD->LE translation is too small: "
-"%#<PRIx64>"
+"%pB(%pA): offset in relocation for LD->LE translation is too small: %"
+"#<PRIx64>"
 msgstr ""
 
-#: elf32-sh.c:5139
+#: elf32-sh.c:5013
 #, c-format
-msgid "%X%C: relocation to \"%s\" references a different segment\n"
+msgid "%X%H: relocation to \"%s\" references a different segment\n"
 msgstr ""
 
-#: elf32-sh.c:5146
+#: elf32-sh.c:5020
 #, c-format
-msgid "%C: warning: relocation to \"%s\" references a different segment\n"
+msgid "%H: warning: relocation to \"%s\" references a different segment\n"
 msgstr ""
 
-#: elf32-sh.c:5651 elf32-sh.c:5733
+#: elf32-sh.c:5488 elf32-sh.c:5570
 #, c-format
 msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
 msgstr ""
 
-#: elf32-sh.c:5657 elf32-sh.c:5738
+#: elf32-sh.c:5494 elf32-sh.c:5575
 #, c-format
 msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
 msgstr ""
 
-#: elf32-sh.c:5688
+#: elf32-sh.c:5525
 #, c-format
 msgid "%pB: Function descriptor relocation with non-zero addend"
 msgstr ""
 
-#: elf32-sh.c:5895 elf64-alpha.c:4691
+#: elf32-sh.c:5732 elf64-alpha.c:4646
 #, c-format
 msgid "%pB: TLS local exec code cannot be linked into shared objects"
 msgstr ""
 
-#: elf32-sh.c:6010
+#: elf32-sh.c:5847
 #, c-format
 msgid "%pB: uses %s instructions while previous modules use %s instructions"
 msgstr ""
 
-#: elf32-sh.c:6022
+#: elf32-sh.c:5859
 #, c-format
 msgid ""
 "internal error: merge of architecture '%s' with architecture '%s' produced "
 "unknown architecture"
 msgstr ""
 
-#: elf32-sh.c:6059
+#: elf32-sh.c:5900
 #, c-format
 msgid ""
 "%pB: uses instructions which are incompatible with instructions used in "
 "previous modules"
 msgstr ""
 
-#: elf32-sh.c:6072
+#: elf32-sh.c:5913
 #, c-format
 msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
 msgstr ""
@@ -3490,72 +3903,78 @@ msgstr ""
 msgid "%pB: linking little endian files with big endian files"
 msgstr ""
 
-#: elf32-spu.c:732
+#: elf32-sparc.c:157
+#, c-format
+msgid ""
+"%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr ""
+
+#: elf32-spu.c:737
 msgid "%X%P: overlay section %pA does not start on a cache line\n"
 msgstr ""
 
-#: elf32-spu.c:740
+#: elf32-spu.c:745
 msgid "%X%P: overlay section %pA is larger than a cache line\n"
 msgstr ""
 
-#: elf32-spu.c:760
+#: elf32-spu.c:765
 msgid "%X%P: overlay section %pA is not in cache area\n"
 msgstr ""
 
-#: elf32-spu.c:801
+#: elf32-spu.c:806
 #, c-format
 msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n"
 msgstr ""
 
-#: elf32-spu.c:1027
+#: elf32-spu.c:1032
 #, c-format
 msgid "warning: call to non-function symbol %s defined in %pB"
 msgstr ""
 
-#: elf32-spu.c:1377
+#: elf32-spu.c:1382
 #, c-format
 msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
 msgstr ""
 
-#: elf32-spu.c:1909
+#: elf32-spu.c:1912
 #, c-format
 msgid "%pB is not allowed to define %s"
 msgstr ""
 
-#: elf32-spu.c:1917
+#: elf32-spu.c:1920
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr ""
 
-#: elf32-spu.c:1951
+#: elf32-spu.c:1954
 #, c-format
 msgid "%s in overlay section"
 msgstr ""
 
-#: elf32-spu.c:1980
+#: elf32-spu.c:1983
 msgid "overlay stub relocation overflow"
 msgstr ""
 
-#: elf32-spu.c:1989 elf64-ppc.c:13230
+#: elf32-spu.c:1992 elf64-ppc.c:15341
 msgid "stubs don't match calculated size"
 msgstr ""
 
-#: elf32-spu.c:2572
+#: elf32-spu.c:2575
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr ""
 
-#: elf32-spu.c:2588
+#: elf32-spu.c:2591
 #, c-format
 msgid "warning: %s exceeds section size\n"
 msgstr ""
 
-#: elf32-spu.c:2620
+#: elf32-spu.c:2623
 #, c-format
 msgid "%pA:0x%v not found in function table\n"
 msgstr ""
 
-#: elf32-spu.c:2761
+#: elf32-spu.c:2764
 #, c-format
 msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n"
 msgstr ""
@@ -3569,382 +3988,384 @@ msgstr ""
 msgid "  calls:\n"
 msgstr ""
 
-#: elf32-spu.c:4341
+#: elf32-spu.c:4342
 #, c-format
 msgid "%s duplicated in %s\n"
 msgstr ""
 
-#: elf32-spu.c:4345
+#: elf32-spu.c:4346
 #, c-format
 msgid "%s duplicated\n"
 msgstr ""
 
-#: elf32-spu.c:4352
+#: elf32-spu.c:4353
 msgid "sorry, no support for duplicate object files in auto-overlay script\n"
 msgstr ""
 
-#: elf32-spu.c:4394
+#: elf32-spu.c:4395
 #, c-format
 msgid ""
 "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local "
 "store\n"
 msgstr ""
 
-#: elf32-spu.c:4550
+#: elf32-spu.c:4551
 #, c-format
 msgid "%pB:%pA%s exceeds overlay size\n"
 msgstr ""
 
-#: elf32-spu.c:4691
+#: elf32-spu.c:4692
 msgid "%F%P: auto overlay error: %E\n"
 msgstr ""
 
-#: elf32-spu.c:4712
+#: elf32-spu.c:4713
 msgid "Stack size for call graph root nodes.\n"
 msgstr ""
 
-#: elf32-spu.c:4713
+#: elf32-spu.c:4714
 msgid ""
 "\n"
 "Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
 msgstr ""
 
-#: elf32-spu.c:4723
+#: elf32-spu.c:4724
 msgid "Maximum stack required is 0x%v\n"
 msgstr ""
 
-#: elf32-spu.c:4742
+#: elf32-spu.c:4743
 msgid "%X%P: stack/lrlive analysis error: %E\n"
 msgstr ""
 
-#: elf32-spu.c:4745
+#: elf32-spu.c:4746
 msgid "%F%P: can not build overlay stubs: %E\n"
 msgstr ""
 
-#: elf32-spu.c:4814
+#: elf32-spu.c:4815
 msgid "fatal error while creating .fixup"
 msgstr ""
 
-#: elf32-spu.c:5049
+#: elf32-spu.c:5051
 #, c-format
 msgid "%pB(%s+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr ""
 
-#: elf32-tic6x.c:1628
+#: elf32-tic6x.c:1588
 msgid "warning: generating a shared library containing non-PIC code"
 msgstr ""
 
-#: elf32-tic6x.c:1633
+#: elf32-tic6x.c:1593
 msgid "warning: generating a shared library containing non-PID code"
 msgstr ""
 
-#: elf32-tic6x.c:2493
+#: elf32-tic6x.c:2434
 #, c-format
 msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
 msgstr ""
 
-#: elf32-tic6x.c:3629
+#: elf32-tic6x.c:3498
 #, c-format
 msgid "%pB: error: unknown mandatory EABI object attribute %d"
 msgstr ""
 
-#: elf32-tic6x.c:3638
+#: elf32-tic6x.c:3507
 #, c-format
 msgid "%pB: warning: unknown EABI object attribute %d"
 msgstr ""
 
-#: elf32-tic6x.c:3752 elf32-tic6x.c:3761
+#: elf32-tic6x.c:3625 elf32-tic6x.c:3634
 #, c-format
 msgid "error: %pB requires more stack alignment than %pB preserves"
 msgstr ""
 
-#: elf32-tic6x.c:3771 elf32-tic6x.c:3780
+#: elf32-tic6x.c:3644 elf32-tic6x.c:3653
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_alignment value in %pB"
 msgstr ""
 
-#: elf32-tic6x.c:3789 elf32-tic6x.c:3798
+#: elf32-tic6x.c:3662 elf32-tic6x.c:3671
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB"
 msgstr ""
 
-#: elf32-tic6x.c:3807 elf32-tic6x.c:3815
+#: elf32-tic6x.c:3680 elf32-tic6x.c:3688
 #, c-format
 msgid "error: %pB requires more array alignment than %pB preserves"
 msgstr ""
 
-#: elf32-tic6x.c:3838
+#: elf32-tic6x.c:3711
 #, c-format
 msgid "warning: %pB and %pB differ in wchar_t size"
 msgstr ""
 
-#: elf32-tic6x.c:3857
+#: elf32-tic6x.c:3730
 #, c-format
 msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
 msgstr ""
 
-#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:9530
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2579
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2729
+#: elfnn-aarch64.c:10030
+#: elfnn-kvx.c:4636
+#: elfnn-loongarch.c:5032
+#: elfnn-riscv.c:3481
 #, c-format
 msgid "discarded output section: `%pA'"
 msgstr ""
 
-#: elf32-v850.c:153
+#: elf32-v850.c:152
 #, c-format
 msgid "variable `%s' cannot occupy in multiple small data regions"
 msgstr ""
 
-#: elf32-v850.c:156
+#: elf32-v850.c:155
 #, c-format
 msgid ""
 "variable `%s' can only be in one of the small, zero, and tiny data regions"
 msgstr ""
 
-#: elf32-v850.c:159
+#: elf32-v850.c:158
 #, c-format
 msgid ""
 "variable `%s' cannot be in both small and zero data regions simultaneously"
 msgstr ""
 
-#: elf32-v850.c:162
+#: elf32-v850.c:161
 #, c-format
 msgid ""
 "variable `%s' cannot be in both small and tiny data regions simultaneously"
 msgstr ""
 
-#: elf32-v850.c:165
+#: elf32-v850.c:164
 #, c-format
 msgid ""
 "variable `%s' cannot be in both zero and tiny data regions simultaneously"
 msgstr ""
 
-#: elf32-v850.c:463
+#: elf32-v850.c:466
 msgid "failed to find previous HI16 reloc"
 msgstr ""
 
-#: elf32-v850.c:2303
+#: elf32-v850.c:2306
 msgid "could not locate special linker symbol __gp"
 msgstr ""
 
-#: elf32-v850.c:2307
+#: elf32-v850.c:2310
 msgid "could not locate special linker symbol __ep"
 msgstr ""
 
-#: elf32-v850.c:2311
+#: elf32-v850.c:2314
 msgid "could not locate special linker symbol __ctbp"
 msgstr ""
 
-#: elf32-v850.c:2532
+#: elf32-v850.c:2535
 #, c-format
 msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"
 msgstr ""
 
-#: elf32-v850.c:2548
+#: elf32-v850.c:2551
 #, c-format
 msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles"
 msgstr ""
 
-#: elf32-v850.c:2563
+#: elf32-v850.c:2566
 #, c-format
 msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
 msgstr ""
 
-#: elf32-v850.c:2595
+#: elf32-v850.c:2598
 #, c-format
 msgid " alignment of 8-byte entities: "
 msgstr ""
 
-#: elf32-v850.c:2598
+#: elf32-v850.c:2601
 #, c-format
 msgid "4-byte"
 msgstr ""
 
-#: elf32-v850.c:2599
+#: elf32-v850.c:2602
 #, c-format
 msgid "8-byte"
 msgstr ""
 
-#: elf32-v850.c:2600 elf32-v850.c:2612
+#: elf32-v850.c:2603 elf32-v850.c:2615
 #, c-format
 msgid "not set"
 msgstr ""
 
-#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636
-#: elf32-v850.c:2647 elf32-v850.c:2658
+#: elf32-v850.c:2604 elf32-v850.c:2616 elf32-v850.c:2628 elf32-v850.c:2639
+#: elf32-v850.c:2650 elf32-v850.c:2661
 #, c-format
 msgid "unknown: %x"
 msgstr ""
 
-#: elf32-v850.c:2607
+#: elf32-v850.c:2610
 #, c-format
 msgid " size of doubles: "
 msgstr ""
 
-#: elf32-v850.c:2610
+#: elf32-v850.c:2613
 #, c-format
 msgid "4-bytes"
 msgstr ""
 
-#: elf32-v850.c:2611
+#: elf32-v850.c:2614
 #, c-format
 msgid "8-bytes"
 msgstr ""
 
-#: elf32-v850.c:2619
+#: elf32-v850.c:2622
 #, c-format
 msgid " FPU support required: "
 msgstr ""
 
-#: elf32-v850.c:2622
+#: elf32-v850.c:2625
 #, c-format
 msgid "FPU-2.0"
 msgstr ""
 
-#: elf32-v850.c:2623
+#: elf32-v850.c:2626
 #, c-format
 msgid "FPU-3.0"
 msgstr ""
 
-#: elf32-v850.c:2624
+#: elf32-v850.c:2627
 #, c-format
 msgid "none"
 msgstr ""
 
-#: elf32-v850.c:2631
+#: elf32-v850.c:2634
 #, c-format
 msgid "SIMD use: "
 msgstr ""
 
-#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656
+#: elf32-v850.c:2637 elf32-v850.c:2648 elf32-v850.c:2659
 #, c-format
 msgid "yes"
 msgstr ""
 
-#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657
+#: elf32-v850.c:2638 elf32-v850.c:2649 elf32-v850.c:2660
 #, c-format
 msgid "no"
 msgstr ""
 
-#: elf32-v850.c:2642
+#: elf32-v850.c:2645
 #, c-format
 msgid "CACHE use: "
 msgstr ""
 
-#: elf32-v850.c:2653
+#: elf32-v850.c:2656
 #, c-format
 msgid "MMU use: "
 msgstr ""
 
-#: elf32-v850.c:2820 elf32-v850.c:2876
+#: elf32-v850.c:2823 elf32-v850.c:2879
 #, c-format
 msgid "%pB: architecture mismatch with previous modules"
 msgstr ""
 
 #. xgettext:c-format.
-#: elf32-v850.c:2894
+#: elf32-v850.c:2897
 #, c-format
 msgid "private flags = %lx: "
 msgstr ""
 
-#: elf32-v850.c:2899
+#: elf32-v850.c:2902
 #, c-format
 msgid "unknown v850 architecture"
 msgstr ""
 
-#: elf32-v850.c:2901
+#: elf32-v850.c:2904
 #, c-format
 msgid "v850 E3 architecture"
 msgstr ""
 
-#: elf32-v850.c:2903 elf32-v850.c:2910
+#: elf32-v850.c:2906 elf32-v850.c:2913
 #, c-format
 msgid "v850 architecture"
 msgstr ""
 
-#: elf32-v850.c:2911
+#: elf32-v850.c:2914
 #, c-format
 msgid "v850e architecture"
 msgstr ""
 
-#: elf32-v850.c:2912
+#: elf32-v850.c:2915
 #, c-format
 msgid "v850e1 architecture"
 msgstr ""
 
-#: elf32-v850.c:2913
+#: elf32-v850.c:2916
 #, c-format
 msgid "v850e2 architecture"
 msgstr ""
 
-#: elf32-v850.c:2914
+#: elf32-v850.c:2917
 #, c-format
 msgid "v850e2v3 architecture"
 msgstr ""
 
-#: elf32-v850.c:2915
+#: elf32-v850.c:2918
 #, c-format
 msgid "v850e3v5 architecture"
 msgstr ""
 
-#: elf32-v850.c:3609 elf32-v850.c:3848
+#: elf32-v850.c:3592 elf32-v850.c:3831
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
 msgstr ""
 
-#: elf32-v850.c:3619 elf32-v850.c:3858
+#: elf32-v850.c:3602 elf32-v850.c:3841
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
 msgstr ""
 
-#: elf32-v850.c:3665 elf32-v850.c:3893
+#: elf32-v850.c:3648 elf32-v850.c:3876
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
 msgstr ""
 
-#: elf32-v850.c:3705
+#: elf32-v850.c:3688
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
 msgstr ""
 
-#: elf32-vax.c:540
+#: elf32-vax.c:539
 #, c-format
 msgid " [nonpic]"
 msgstr ""
 
-#: elf32-vax.c:543
+#: elf32-vax.c:542
 #, c-format
 msgid " [d-float]"
 msgstr ""
 
-#: elf32-vax.c:546
+#: elf32-vax.c:545
 #, c-format
 msgid " [g-float]"
 msgstr ""
 
-#: elf32-vax.c:632
+#: elf32-vax.c:631
 #, c-format
 msgid ""
 "%pB: warning: GOT addend of %<PRId64> to `%s' does not match previous GOT "
 "addend of %<PRId64>"
 msgstr ""
 
-#: elf32-vax.c:1446
+#: elf32-vax.c:1388
 #, c-format
 msgid "%pB: warning: PLT addend of %<PRId64> to `%s' from %pA section ignored"
 msgstr ""
 
-#: elf32-vax.c:1572
+#: elf32-vax.c:1514
 #, c-format
 msgid "%pB: warning: %s relocation against symbol `%s' from %pA section"
 msgstr ""
 
-#: elf32-vax.c:1579
+#: elf32-vax.c:1521
 #, c-format
 msgid "%pB: warning: %s relocation to %#<PRIx64> from %pA section"
 msgstr ""
 
-#: elf32-visium.c:821
+#: elf32-visium.c:824
 #, c-format
 msgid ""
 "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
@@ -3960,252 +4381,305 @@ msgstr ""
 msgid "error reading cpu type from elf private data"
 msgstr ""
 
-#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353
-#: elf64-ia64.c:2353
+#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2077
+#: elfnn-ia64.c:2346
 msgid "non-zero addend in @fptr reloc"
 msgstr ""
 
-#: elf32-xtensa.c:937
+#: elf32-xtensa.c:998
 #, c-format
 msgid "%pB(%pA): invalid property table"
 msgstr ""
 
-#: elf32-xtensa.c:2675
+#: elf32-xtensa.c:2733
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
 msgstr ""
 
-#: elf32-xtensa.c:2758 elf32-xtensa.c:2881
+#: elf32-xtensa.c:2816 elf32-xtensa.c:2939
 msgid "dynamic relocation in read-only section"
 msgstr ""
 
-#: elf32-xtensa.c:2858
+#: elf32-xtensa.c:2916
 msgid "TLS relocation invalid without dynamic sections"
 msgstr ""
 
-#: elf32-xtensa.c:3070
+#: elf32-xtensa.c:3129
 msgid "internal inconsistency in size of .got.loc section"
 msgstr ""
 
-#: elf32-xtensa.c:3377
+#: elf32-xtensa.c:3435
 #, c-format
 msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
 msgstr ""
 
-#: elf32-xtensa.c:4608 elf32-xtensa.c:4616
+#: elf32-xtensa.c:4734 elf32-xtensa.c:4742
 msgid "attempt to convert L32R/CALLX to CALL failed"
 msgstr ""
 
-#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899
+#: elf32-xtensa.c:6574 elf32-xtensa.c:6653 elf32-xtensa.c:8079
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration "
 "mismatch"
 msgstr ""
 
-#: elf32-xtensa.c:7638
+#: elf32-xtensa.c:7820
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY "
 "relocation; possible configuration mismatch"
 msgstr ""
 
-#: elf32-xtensa.c:9493
+#: elf32-xtensa.c:9678
 msgid "invalid relocation address"
 msgstr ""
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9769
 msgid "overflow after relaxation"
 msgstr ""
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10915
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
 msgstr ""
 
-#: elf64-alpha.c:472
+#: elf32-z80.c:473
+#, c-format
+msgid "%pB: unsupported bfd mach %#lx"
+msgstr ""
+
+#: elf32-z80.c:518
+#, c-format
+msgid "%pB: unsupported mach %#x"
+msgstr ""
+
+#: elf32-z80.c:546
+#, c-format
+msgid "%pB: unsupported arch %#x"
+msgstr ""
+
+#: elf64-alpha.c:474
 msgid "GPDISP relocation did not find ldah and lda instructions"
 msgstr ""
 
-#: elf64-alpha.c:2463
+#: elf64-alpha.c:1985
+#, c-format
+msgid ""
+"%pB: dynamic relocation against a local symbol in read-only section `%pA'\n"
+msgstr ""
+
+#: elf64-alpha.c:2437
 #, c-format
 msgid "%pB: .got subsegment exceeds 64K (size %d)"
 msgstr ""
 
-#: elf64-alpha.c:3018 elf64-alpha.c:3214
+#: elf64-alpha.c:2680 elflink.c:15481
+#: elfnn-kvx.c:4022
+#: elfnn-loongarch.c:1715
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr ""
+
+#: elf64-alpha.c:2975 elf64-alpha.c:3170
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
 msgstr ""
 
-#: elf64-alpha.c:4415 elf64-alpha.c:4428
+#: elf64-alpha.c:4370 elf64-alpha.c:4383
 #, c-format
 msgid "%pB: gp-relative relocation against dynamic symbol %s"
 msgstr ""
 
-#: elf64-alpha.c:4484
+#: elf64-alpha.c:4439
 #, c-format
 msgid "%pB: change in gp: BRSGP %s"
 msgstr ""
 
-#: elf64-alpha.c:4509 mach-o.c:615
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:499
+#: elf64-alpha.c:4464 mach-o.c:625
+#: elfnn-riscv.c:722
+#: elfnn-riscv.c:921
+#: elfnn-riscv.c:963
 msgid "<unknown>"
 msgstr ""
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4470
 #, c-format
 msgid "%pB: !samegp reloc against symbol without .prologue: %s"
 msgstr ""
 
-#: elf64-alpha.c:4573
+#: elf64-alpha.c:4528
 #, c-format
 msgid "%pB: unhandled dynamic relocation against %s"
 msgstr ""
 
-#: elf64-alpha.c:4608
+#: elf64-alpha.c:4563
 #, c-format
 msgid "%pB: pc-relative relocation against undefined weak symbol %s"
 msgstr ""
 
-#: elf64-alpha.c:4674
+#: elf64-alpha.c:4629
 #, c-format
 msgid "%pB: dtp-relative relocation against dynamic symbol %s"
 msgstr ""
 
-#: elf64-alpha.c:4699
+#: elf64-alpha.c:4654
 #, c-format
 msgid "%pB: tp-relative relocation against dynamic symbol %s"
 msgstr ""
 
+#. Only if it's not an unresolved symbol.
+#: elf64-bpf.c:344
+msgid "internal error: relocation not supported"
+msgstr ""
+
 #: elf64-gen.c:71
 #, c-format
 msgid "%pB: Relocations in generic ELF (EM: %d)"
 msgstr ""
 
-#: elf64-hppa.c:2081
+#: elf64-hppa.c:2032
 #, c-format
 msgid "stub entry for %s cannot load .plt, dp offset = %<PRId64>"
 msgstr ""
 
-#: elf64-hppa.c:3286
+#: elf64-hppa.c:3236
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot reach %s"
 msgstr ""
 
-#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636
+#: elf64-ia64-vms.c:600
+#: elfnn-ia64.c:641
 #, c-format
 msgid ""
 "%pB: can't relax br at %#<PRIx64> in section `%pA'; please use brl or "
 "indirect branch"
 msgstr ""
 
-#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301
+#: elf64-ia64-vms.c:2032
+#: elfnn-ia64.c:2294
 msgid "@pltoff reloc against local symbol"
 msgstr ""
 
-#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712
+#: elf64-ia64-vms.c:3278
+#: elfnn-ia64.c:3671
 #, c-format
 msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
 msgstr ""
 
-#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722
+#: elf64-ia64-vms.c:3288
+#: elfnn-ia64.c:3681
 #, c-format
 msgid "%pB: __gp does not cover short data segment"
 msgstr ""
 
-#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996
+#: elf64-ia64-vms.c:3558
+#: elfnn-ia64.c:3954
 #, c-format
 msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
 msgstr ""
 
-#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064
+#: elf64-ia64-vms.c:3622
+#: elfnn-ia64.c:4022
 #, c-format
 msgid "%pB: @gprel relocation against dynamic symbol %s"
 msgstr ""
 
-#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127
+#: elf64-ia64-vms.c:3681
+#: elfnn-ia64.c:4085
 #, c-format
 msgid "%pB: linking non-pic code in a position independent executable"
 msgstr ""
 
-#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265
+#: elf64-ia64-vms.c:3783
+#: elfnn-ia64.c:4223
 #, c-format
 msgid "%pB: @internal branch to dynamic symbol %s"
 msgstr ""
 
-#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268
+#: elf64-ia64-vms.c:3786
+#: elfnn-ia64.c:4226
 #, c-format
 msgid "%pB: speculation fixup to dynamic symbol %s"
 msgstr ""
 
-#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271
+#: elf64-ia64-vms.c:3789
+#: elfnn-ia64.c:4229
 #, c-format
 msgid "%pB: @pcrel relocation against dynamic symbol %s"
 msgstr ""
 
-#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468
+#: elf64-ia64-vms.c:3913
+#: elfnn-ia64.c:4426
 msgid "unsupported reloc"
 msgstr ""
 
-#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506
+#: elf64-ia64-vms.c:3950
+#: elfnn-ia64.c:4464
 #, c-format
 msgid ""
 "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in "
 "section `%pA'."
 msgstr ""
 
-#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523
+#: elf64-ia64-vms.c:3967
+#: elfnn-ia64.c:4481
 #, c-format
 msgid ""
-"%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size "
-"%#<PRIx64> (> 0x1000000)."
+"%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %"
+"#<PRIx64> (> 0x1000000)."
 msgstr ""
 
-#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781
+#: elf64-ia64-vms.c:4263
+#: elfnn-ia64.c:4742
 #, c-format
 msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
 msgstr ""
 
-#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790
+#: elf64-ia64-vms.c:4272
+#: elfnn-ia64.c:4751
 #, c-format
 msgid "%pB: linking big-endian files with little-endian files"
 msgstr ""
 
-#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799
+#: elf64-ia64-vms.c:4281
+#: elfnn-ia64.c:4760
 #, c-format
 msgid "%pB: linking 64-bit files with 32-bit files"
 msgstr ""
 
-#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808
+#: elf64-ia64-vms.c:4290
+#: elfnn-ia64.c:4769
 #, c-format
 msgid "%pB: linking constant-gp files with non-constant-gp files"
 msgstr ""
 
-#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818
+#: elf64-ia64-vms.c:4300
+#: elfnn-ia64.c:4779
 #, c-format
 msgid "%pB: linking auto-pic files with non-auto-pic files"
 msgstr ""
 
-#: elf64-ia64-vms.c:5153 elflink.c:4894
+#: elf64-ia64-vms.c:5150 elflink.c:5338
 #, c-format
 msgid ""
 "warning: alignment %u of common symbol `%s' in %pB is greater than the "
 "alignment (%u) of its section %pA"
 msgstr ""
 
-#: elf64-ia64-vms.c:5160 elflink.c:4901
+#: elf64-ia64-vms.c:5157
 #, c-format
 msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
 msgstr ""
 
-#: elf64-ia64-vms.c:5176 elflink.c:4918
+#: elf64-ia64-vms.c:5173 elflink.c:5367
 #, c-format
 msgid ""
-"warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in "
-"%pB"
+"warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %"
+"pB"
 msgstr ""
 
-#: elf64-mips.c:4098
+#: elf64-mips.c:4102
 #, c-format
 msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
 msgstr ""
@@ -4257,1060 +4731,1583 @@ msgstr ""
 msgid "%pB: directive LOCAL valid only with a register or absolute value"
 msgstr ""
 
-#: elf64-mmix.c:1744
+#: elf64-mmix.c:1742
 #, c-format
 msgid ""
 "%pB: LOCAL directive: register $%<PRId64> is not a local register; first "
 "global register is $%<PRId64>"
 msgstr ""
 
-#: elf64-mmix.c:2173
+#: elf64-mmix.c:2157
 #, c-format
 msgid ""
 "%pB: error: multiple definition of `%s'; start of %s is set in a earlier "
 "linked file"
 msgstr ""
 
-#: elf64-mmix.c:2228
+#: elf64-mmix.c:2212
 msgid "register section has contents\n"
 msgstr ""
 
-#: elf64-mmix.c:2418
+#: elf64-mmix.c:2402
 #, c-format
 msgid ""
 "internal inconsistency: remaining %lu != max %lu; please report this bug"
 msgstr ""
 
-#: elf64-ppc.c:3827
+#: elf64-ppc.c:1361
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr ""
+
+#: elf64-ppc.c:4307
 #, c-format
 msgid "symbol '%s' has invalid st_other for ABI version 1"
 msgstr ""
 
-#: elf64-ppc.c:4002
+#: elf64-ppc.c:4490
 #, c-format
 msgid "%pB .opd not allowed in ABI version %d"
 msgstr ""
 
-#: elf64-ppc.c:4523
+#: elf64-ppc.c:5085
 #, c-format
 msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
 msgstr ""
 
-#: elf64-ppc.c:4919
+#: elf64-ppc.c:5255
+msgid "%H: %s reloc unsupported here\n"
+msgstr ""
+
+#: elf64-ppc.c:5482
 #, c-format
 msgid "%pB uses unknown e_flags 0x%lx"
 msgstr ""
 
-#: elf64-ppc.c:4927
+#: elf64-ppc.c:5490
 #, c-format
 msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
 msgstr ""
 
-#: elf64-ppc.c:4954
+#: elf64-ppc.c:5517
 #, c-format
 msgid " [abiv%ld]"
 msgstr ""
 
-#: elf64-ppc.c:6145
+#: elf64-ppc.c:6821
 msgid ""
 "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting "
 "LD_BIND_NOW=1 or upgrade gcc\n"
 msgstr ""
 
-#: elf64-ppc.c:6417
+#: elf64-ppc.c:7088
 #, c-format
 msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
 msgstr ""
 
-#: elf64-ppc.c:6644
+#: elf64-ppc.c:7343
 #, c-format
 msgid "dynreloc miscount for %pB, section %pA"
 msgstr ""
 
-#: elf64-ppc.c:6733
+#: elf64-ppc.c:7434
 #, c-format
 msgid "%pB: .opd is not a regular array of opd entries"
 msgstr ""
 
-#: elf64-ppc.c:6743
+#: elf64-ppc.c:7444
 #, c-format
 msgid "%pB: unexpected reloc type %u in .opd section"
 msgstr ""
 
-#: elf64-ppc.c:6765
+#: elf64-ppc.c:7466
 #, c-format
 msgid "%pB: undefined sym `%s' in .opd section"
 msgstr ""
 
-#: elf64-ppc.c:7249
+#. The issue is that __glink_PLTresolve saves r2, which is done
+#. because glibc ld.so _dl_runtime_resolve restores r2 to support
+#. a glibc plt call optimisation where global entry code is
+#. skipped on calls that resolve to the same binary.  The
+#. __glink_PLTresolve save of r2 is incompatible with code
+#. making tail calls, because the tail call might go via the
+#. resolver and thus overwrite the proper saved r2.
+#: elf64-ppc.c:7967
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr ""
+
+#: elf64-ppc.c:7975
 msgid ""
 "warning: --plt-localentry is especially dangerous without ld.so support to "
 "detect ABI violations"
 msgstr ""
 
-#: elf64-ppc.c:7499
+#: elf64-ppc.c:8291
 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
 msgstr ""
 
-#: elf64-ppc.c:7876 elf64-ppc.c:8513
+#: elf64-ppc.c:8726 elf64-ppc.c:9442
 #, c-format
 msgid "%s defined on removed toc entry"
 msgstr ""
 
-#: elf64-ppc.c:8241
+#: elf64-ppc.c:9399
 #, c-format
-msgid "%H: toc optimization is not supported for %s instruction\n"
+msgid "%H: %s references optimized away TOC entry\n"
 msgstr ""
 
-#: elf64-ppc.c:8470
+#: elf64-ppc.c:9620
 #, c-format
-msgid "%H: %s references optimized away TOC entry\n"
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
 msgstr ""
 
-#: elf64-ppc.c:9301
+#: elf64-ppc.c:10515
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr ""
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11668
 msgid "%P: cannot find opd entry toc for `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:10303
+#: elf64-ppc.c:11818
 #, c-format
 msgid "long branch stub `%s' offset overflow"
 msgstr ""
 
-#: elf64-ppc.c:10330
+#: elf64-ppc.c:11845
 #, c-format
 msgid "can't find branch stub `%s'"
 msgstr ""
 
-#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791
+#: elf64-ppc.c:11906 elf64-ppc.c:12158 elf64-ppc.c:14724
 #, c-format
 msgid "%P: linkage table error against `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:10820
+#: elf64-ppc.c:12357
 #, c-format
 msgid "can't build branch stub `%s'"
 msgstr ""
 
-#: elf64-ppc.c:11779
+#: elf64-ppc.c:13384
 #, c-format
 msgid "%pB section %pA exceeds stub group size"
 msgstr ""
 
-#: elf64-ppc.c:13189 elf64-ppc.c:13208
+#: elf64-ppc.c:14904
+msgid "__tls_get_addr call offset overflow"
+msgstr ""
+
+#: elf64-ppc.c:15244 elf64-ppc.c:15263
 #, c-format
 msgid "%s offset too large for .eh_frame sdata4 encoding"
 msgstr ""
 
-#: elf64-ppc.c:13244
+#: elf64-ppc.c:15349
 #, c-format
-msgid "linker stubs in %u group\n"
-msgid_plural "linker stubs in %u groups\n"
+msgid "linker stubs in %u group"
+msgid_plural "linker stubs in %u groups"
 msgstr[0] ""
 msgstr[1] ""
 
-#: elf64-ppc.c:13248
+#: elf64-ppc.c:15356
 #, c-format
 msgid ""
+"%s, iter %u\n"
 "  branch         %lu\n"
-"  branch toc adj %lu\n"
-"  branch notoc   %lu\n"
-"  branch both    %lu\n"
 "  long branch    %lu\n"
-"  long toc adj   %lu\n"
-"  long notoc     %lu\n"
-"  long both      %lu\n"
 "  plt call       %lu\n"
-"  plt call save  %lu\n"
-"  plt call notoc %lu\n"
-"  plt call both  %lu\n"
 "  global entry   %lu"
 msgstr ""
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:15738
 #, c-format
 msgid "%H: %s used with TLS symbol `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:13585
+#: elf64-ppc.c:15740
 #, c-format
 msgid "%H: %s used with non-TLS symbol `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:14245
+#: elf64-ppc.c:16524
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
 msgstr ""
 
-#: elf64-ppc.c:14251
+#: elf64-ppc.c:16530
 #, c-format
 msgid ""
 "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
 msgstr ""
 
-#: elf64-ppc.c:14985
+#: elf64-ppc.c:17181
+#, c-format
+msgid "%H: %s against %pT is not supported\n"
+msgstr ""
+
+#: elf64-ppc.c:17457
 #, c-format
 msgid "%H: %s for indirect function `%pT' unsupported\n"
 msgstr ""
 
-#: elf64-ppc.c:15097
+#: elf64-ppc.c:17545
+#, c-format
+msgid ""
+"%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
+msgstr ""
+
+#: elf64-ppc.c:17600
 #, c-format
 msgid "%P: %pB: %s is not supported for `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:15326
+#: elf64-ppc.c:17869
 #, c-format
 msgid "%H: error: %s not a multiple of %u\n"
 msgstr ""
 
-#: elf64-ppc.c:15349
+#: elf64-ppc.c:17892
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:15446
+#: elf64-ppc.c:18037
 #, c-format
 msgid "%H: %s against `%pT': error %d\n"
 msgstr ""
 
-#: elf64-s390.c:2576
+#: elf64-s390.c:2457
 #, c-format
 msgid ""
 "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed "
 "from executable (rebuild file with -fPIC ?)"
 msgstr ""
 
-#: elf64-sparc.c:109 elfcode.h:1471
+#: elf64-s390.c:3066
+#, c-format
+msgid ""
+"%pB(%pA+%#<PRIx64>): misaligned symbol `%s' (%#<PRIx64>) for relocation %s"
+msgstr ""
+
+#: elf64-sparc.c:134 elfcode.h:1602
 #, c-format
 msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
 msgstr ""
 
-#: elf64-sparc.c:467
+#: elf64-sparc.c:493
 #, c-format
 msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
 msgstr ""
 
-#: elf64-sparc.c:488
+#: elf64-sparc.c:514
 #, c-format
 msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
 msgstr ""
 
-#: elf64-sparc.c:512
+#: elf64-sparc.c:538
 #, c-format
 msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
 msgstr ""
 
-#: elf64-sparc.c:559
+#: elf64-sparc.c:585
 #, c-format
 msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
 msgstr ""
 
-#: elf64-sparc.c:691
+#: elf64-sparc.c:717
 #, c-format
 msgid "%pB: linking UltraSPARC specific with HAL specific code"
 msgstr ""
 
-#: elf64-x86-64.c:1412
+#: elf64-x86-64.c:1537
 msgid "hidden symbol "
 msgstr ""
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1540
 msgid "internal symbol "
 msgstr ""
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1543 elf64-x86-64.c:1547
 msgid "protected symbol "
 msgstr ""
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1549
 msgid "symbol "
 msgstr ""
 
-#: elf64-x86-64.c:1425 elf64-x86-64.c:1435
-msgid "; recompile with -fPIC"
-msgstr ""
-
-#: elf64-x86-64.c:1430
+#: elf64-x86-64.c:1555
 msgid "undefined "
 msgstr ""
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1565
 msgid "a shared object"
 msgstr ""
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1567
+msgid "; recompile with -fPIC"
+msgstr ""
+
+#: elf64-x86-64.c:1572
 msgid "a PIE object"
 msgstr ""
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1574
 msgid "a PDE object"
 msgstr ""
 
-#: elf64-x86-64.c:1446
+#: elf64-x86-64.c:1576
+msgid "; recompile with -fPIE"
+msgstr ""
+
+#: elf64-x86-64.c:1580
 #, c-format
 msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
 msgstr ""
 
-#: elf64-x86-64.c:1931
+#: elf64-x86-64.c:2116
 #, c-format
 msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
 msgstr ""
 
-#: elf64-x86-64.c:2073
+#: elf64-x86-64.c:2266
 #, c-format
 msgid "%pB: '%s' accessed both as normal and thread local symbol"
 msgstr ""
 
-#: elf64-x86-64.c:2696 /work/sources/binutils/current/bfd/elfnn-aarch64.c:5302
+#: elf64-x86-64.c:2926
+#: elfnn-aarch64.c:5754
+#: elfnn-riscv.c:2295
 #, c-format
 msgid ""
-"%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: "
-"%<PRId64>"
+"%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %"
+"<PRId64>"
 msgstr ""
 
-#: elf64-x86-64.c:2934
+#: elf64-x86-64.c:3189
 #, c-format
 msgid ""
 "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used "
 "when making a shared object"
 msgstr ""
 
-#: elf64-x86-64.c:2948
+#: elf64-x86-64.c:3203
 #, c-format
 msgid ""
 "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used "
 "when making a shared object"
 msgstr ""
 
-#: elf64-x86-64.c:3208
+#: elf64-x86-64.c:3493
 #, c-format
 msgid ""
 "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in "
 "section `%pA' is out of range"
 msgstr ""
 
-#: elf64-x86-64.c:3885
-msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"
+#: elf64-x86-64.c:3643 elflink.c:13796
+msgid "%F%P: corrupt input: %pB\n"
+msgstr ""
+
+#: elf64-x86-64.c:4410
+#, c-format
+msgid ""
+" failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
 msgstr ""
 
-#: elf64-x86-64.c:4043
+#: elf64-x86-64.c:4571
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
 msgstr ""
 
-#: elf64-x86-64.c:4106
+#: elf64-x86-64.c:4644
 #, c-format
 msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
 msgstr ""
 
-#: elf64-x86-64.c:4159
+#: elf64-x86-64.c:4697
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
 msgstr ""
 
-#: elfcode.h:323
-msgid "warning: %pB has a corrupt section with a size (%"
+#: elfcode.h:342
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr ""
+
+#: elfcode.h:790
+#, c-format
+msgid "warning: %pB has a corrupt string table index"
 msgstr ""
 
-#: elfcode.h:768
+#: elfcode.h:838
 #, c-format
-msgid "warning: %pB has a corrupt string table index - ignoring"
+msgid "warning: %pB has a program header with invalid alignment"
 msgstr ""
 
-#: elfcode.h:1212
+#: elfcode.h:1056
+#, c-format
+msgid "%pB: %pA+%<PRIx64>: relocation addend %<PRIx64> too large"
+msgstr ""
+
+#: elfcode.h:1322
 #, c-format
 msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
 msgstr ""
 
-#: elfcore.h:300
+#: elfcore.h:280
 #, c-format
-msgid ""
-"warning: %pB is truncated: expected core file size >= %<PRIu64>, found: "
-"%<PRIu64>"
+msgid "warning: %pB has a segment extending past end of file"
 msgstr ""
 
-#: elflink.c:1367
+#: elflink.c:1397
 #, c-format
 msgid ""
 "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB "
 "section %pA"
 msgstr ""
 
-#: elflink.c:1373
+#: elflink.c:1403
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
 msgstr ""
 
-#: elflink.c:1379
+#: elflink.c:1409
 #, c-format
 msgid ""
 "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
 msgstr ""
 
-#: elflink.c:1385
+#: elflink.c:1415
 #, c-format
 msgid ""
 "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
 msgstr ""
 
-#: elflink.c:2075
+#: elflink.c:2127
 #, c-format
 msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
 msgstr ""
 
-#: elflink.c:2452
+#: elflink.c:2626
 #, c-format
 msgid "%pB: version node not found for symbol %s"
 msgstr ""
 
-#: elflink.c:2541
+#: elflink.c:2717
 #, c-format
 msgid ""
 "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in "
 "section `%pA'"
 msgstr ""
 
-#: elflink.c:2553
+#: elflink.c:2729
 #, c-format
 msgid ""
-"%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `"
-"%pA' when the object file has no symbol table"
+"%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%"
+"pA' when the object file has no symbol table"
 msgstr ""
 
-#: elflink.c:2744
+#: elflink.c:2940
 #, c-format
 msgid "%pB: relocation size mismatch in %pB section %pA"
 msgstr ""
 
-#: elflink.c:3066
+#: elflink.c:3269
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr ""
 
-#: elflink.c:3128
+#: elflink.c:3329
 msgid "%P: copy reloc against protected `%pT' is dangerous\n"
 msgstr ""
 
-#: elflink.c:3932
+#: elflink.c:4306
 #, c-format
 msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
 msgstr ""
 
-#: elflink.c:4598
+#: elflink.c:4789
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr ""
+
+#: elflink.c:4857
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr ""
+
+#: elflink.c:5005
+#, c-format
+msgid "%pB: not enough version information"
+msgstr ""
+
+#: elflink.c:5043
 #, c-format
 msgid "%pB: %s: invalid version %u (max %d)"
 msgstr ""
 
-#: elflink.c:4635
+#: elflink.c:5080
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr ""
 
-#: elflink.c:5054
+#: elflink.c:5345
+#, c-format
+msgid ""
+"warning: alignment %u of normal symbol `%s' in %pB is smaller than %u used "
+"by the common definition in %pB"
+msgstr ""
+
+#: elflink.c:5352
+msgid ""
+"warning: NOTE: alignment discrepancies can cause real problems.  "
+"Investigation is advised."
+msgstr ""
+
+#: elflink.c:5374
+msgid ""
+"warning: NOTE: size discrepancies can cause real problems.  Investigation is "
+"advised."
+msgstr ""
+
+#: elflink.c:5516
 #, c-format
 msgid "%pB: undefined reference to symbol '%s'"
 msgstr ""
 
-#: elflink.c:6130
+#: elflink.c:6576
 #, c-format
 msgid "%pB: stack size specified and %s set"
 msgstr ""
 
-#: elflink.c:6134
+#: elflink.c:6580
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr ""
 
-#: elflink.c:6331
+#: elflink.c:6792
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr ""
 
-#: elflink.c:6902
+#: elflink.c:7181
+msgid ""
+"error: creating an executable stack because of -z execstack command line "
+"option"
+msgstr ""
+
+#: elflink.c:7187
+msgid ""
+"warning: enabling an executable stack because of -z execstack command line "
+"option"
+msgstr ""
+
+#: elflink.c:7249
+#, c-format
+msgid ""
+"error: %s: is triggering the generation of an executable stack (because it "
+"has an executable .note.GNU-stack section)"
+msgstr ""
+
+#: elflink.c:7255
+#, c-format
+msgid ""
+"warning: %s: requires executable stack (because the .note.GNU-stack section "
+"is executable)"
+msgstr ""
+
+#: elflink.c:7263
+#, c-format
+msgid ""
+"error: %s: is triggering the generation of an executable stack because it "
+"does not have a .note.GNU-stack section"
+msgstr ""
+
+#: elflink.c:7269
+#, c-format
+msgid "warning: %s: missing .note.GNU-stack section implies executable stack"
+msgstr ""
+
+#: elflink.c:7272
+msgid ""
+"NOTE: This behaviour is deprecated and will be removed in a future version "
+"of the linker"
+msgstr ""
+
+#: elflink.c:7426
 #, c-format
 msgid "%pB: .preinit_array section is not allowed in DSO"
 msgstr ""
 
-#: elflink.c:8359
+#: elflink.c:9017
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr ""
 
-#: elflink.c:8514
+#: elflink.c:9180 elflink.c:9188
+msgid "division by zero"
+msgstr ""
+
+#: elflink.c:9202
 #, c-format
 msgid "unknown operator '%c' in complex symbol"
 msgstr ""
 
 #. PR 21524: Let the user know if a symbol was removed by garbage collection.
-#: elflink.c:8852
+#: elflink.c:9538
 #, c-format
 msgid ""
 "%pB:%pA: error: relocation references symbol %s which was removed by garbage "
 "collection"
 msgstr ""
 
-#: elflink.c:8855
+#: elflink.c:9541
 #, c-format
 msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
 msgstr ""
 
-#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166
+#: elflink.c:9792 elflink.c:9810 elflink.c:9849 elflink.c:9867
 #, c-format
 msgid "%pB: unable to sort relocs - they are in more than one size"
 msgstr ""
 
 #. The section size is not divisible by either -
 #. something is wrong.
-#: elflink.c:9125 elflink.c:9182
+#: elflink.c:9826 elflink.c:9883
 #, c-format
 msgid "%pB: unable to sort relocs - they are of an unknown size"
 msgstr ""
 
-#: elflink.c:9234
+#: elflink.c:9935
 msgid "not enough memory to sort relocations"
 msgstr ""
 
-#: elflink.c:9502
+#: elflink.c:10273
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr ""
 
-#: elflink.c:9782
+#: elflink.c:10549
 #, c-format
 msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
 msgstr ""
 
-#: elflink.c:9785
+#: elflink.c:10552
 #, c-format
 msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
 msgstr ""
 
-#: elflink.c:9788
+#: elflink.c:10555
 #, c-format
 msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
 msgstr ""
 
-#: elflink.c:9874
+#: elflink.c:10641
 #, c-format
 msgid "%pB: could not find output section %pA for input section %pA"
 msgstr ""
 
-#: elflink.c:10028
+#: elflink.c:10795
 #, c-format
 msgid "%pB: protected symbol `%s' isn't defined"
 msgstr ""
 
-#: elflink.c:10031
+#: elflink.c:10798
 #, c-format
 msgid "%pB: internal symbol `%s' isn't defined"
 msgstr ""
 
-#: elflink.c:10034
+#: elflink.c:10801
 #, c-format
 msgid "%pB: hidden symbol `%s' isn't defined"
 msgstr ""
 
-#: elflink.c:10066
+#: elflink.c:10833
 #, c-format
 msgid "%pB: no symbol version section for versioned symbol `%s'"
 msgstr ""
 
-#: elflink.c:10679
-#, c-format
-msgid "error: %pB: size of section %pA is not multiple of address size"
-msgstr ""
-
-#: elflink.c:10724
+#: elflink.c:11514
 #, c-format
 msgid ""
 "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a "
 "non-existent global symbol"
 msgstr ""
 
-#: elflink.c:11484
+#: elflink.c:11984
 #, c-format
-msgid ""
-"%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
+msgid "error: %pB: size of section %pA is not multiple of address size"
 msgstr ""
 
-#: elflink.c:11490
+#: elflink.c:12261
 #, c-format
-msgid "%pA has both ordered and unordered sections"
+msgid "%pB: no symbol found for import library"
 msgstr ""
 
-#: elflink.c:11592
-#, c-format
-msgid "%pB: no symbol found for import library"
+#: elflink.c:12836
+msgid "%F%P: %pB: failed to finish relative relocations\n"
 msgstr ""
 
-#: elflink.c:12225
+#: elflink.c:12913
 #, c-format
 msgid "%pB: file class %s incompatible with %s"
 msgstr ""
 
-#: elflink.c:12442
+#: elflink.c:13162
 #, c-format
 msgid "%pB: failed to generate import library"
 msgstr ""
 
-#: elflink.c:12561
+#: elflink.c:13330
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr ""
 
-#: elflink.c:12609
+#: elflink.c:13378
 #, c-format
 msgid "warning: section '%s' is being made into a note"
 msgstr ""
 
-#: elflink.c:12701
+#: elflink.c:13472
 msgid "%P%X: read-only segment has dynamic relocations\n"
 msgstr ""
 
-#: elflink.c:12704
-msgid "%P: warning: creating a DT_TEXTREL in a shared object\n"
+#: elflink.c:13475
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
 msgstr ""
 
-#: elflink.c:12829
+#: elflink.c:13478
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr ""
+
+#: elflink.c:13481
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr ""
+
+#: elflink.c:13617
 msgid "%P%X: can not read symbols: %E\n"
 msgstr ""
 
-#: elflink.c:13002
-msgid "%F%P: corrupt input: %pB\n"
+#: elflink.c:14042
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
 msgstr ""
 
-#: elflink.c:13668
+#: elflink.c:14520
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
 msgstr ""
 
-#: elflink.c:13844
+#: elflink.c:14561
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr ""
+
+#: elflink.c:14704
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr ""
 
-#: elfxx-mips.c:1450
+#: elflink.c:15487
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr ""
+
+#: elflink.c:15576
+msgid ""
+"%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault "
+"at runtime; recompile with %s\n"
+msgstr ""
+
+#: elfxx-aarch64.c:477
+#, c-format
+msgid ""
+"%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr ""
+
+#: elfxx-aarch64.c:738
+#: elfnn-aarch64.c:10231
+#: elfnn-aarch64.c:10238
+#, c-format
+msgid ""
+"%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI "
+"in NOTE section."
+msgstr ""
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr ""
+
+#: elfxx-loongarch.c:1909
+#, c-format
+msgid "%pB: unsupported relocation type %s"
+msgstr ""
+
+#: elfxx-loongarch.c:1937
+#, c-format
+msgid "%pB: unsupported bfd relocation type %#x"
+msgstr ""
+
+#: elfxx-loongarch.c:2009
+#, c-format
+msgid "%pB: relocation %s right shift %d error 0x%lx"
+msgstr ""
+
+#: elfxx-loongarch.c:2028
+#, c-format
+msgid "%pB: relocation %s overflow 0x%lx"
+msgstr ""
+
+#: elfxx-mips.c:1541
 msgid "static procedure (no name)"
 msgstr ""
 
-#: elfxx-mips.c:5718
+#: elfxx-mips.c:5857
 msgid "MIPS16 and microMIPS functions cannot call each other"
 msgstr ""
 
-#: elfxx-mips.c:6485
+#: elfxx-mips.c:6627
 msgid "%X%H: unsupported JALX to the same ISA mode\n"
 msgstr ""
 
-#: elfxx-mips.c:6518
+#: elfxx-mips.c:6660
 msgid ""
 "%X%H: unsupported jump between ISA modes; consider recompiling with "
 "interlinking enabled\n"
 msgstr ""
 
-#: elfxx-mips.c:6563
+#: elfxx-mips.c:6705
 msgid ""
 "%X%H: cannot convert branch between ISA modes to JALX: relocation out of "
 "range\n"
 msgstr ""
 
-#: elfxx-mips.c:6575
+#: elfxx-mips.c:6717
 msgid "%X%H: unsupported branch between ISA modes\n"
 msgstr ""
 
-#: elfxx-mips.c:7223
+#: elfxx-mips.c:7350
 #, c-format
 msgid ""
 "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
 msgstr ""
 
-#: elfxx-mips.c:7267 elfxx-mips.c:7502
+#: elfxx-mips.c:7394
 #, c-format
 msgid "%pB: warning: bad `%s' option size %u smaller than its header"
 msgstr ""
 
-#: elfxx-mips.c:8300 elfxx-mips.c:8426
+#: elfxx-mips.c:7630
+#, c-format
+msgid "%pB: warning: truncated `%s' option"
+msgstr ""
+
+#: elfxx-mips.c:8454 elfxx-mips.c:8580
 #, c-format
 msgid ""
 "%pB: warning: cannot determine the target function for stub section `%s'"
 msgstr ""
 
-#: elfxx-mips.c:8558
+#: elfxx-mips.c:8712
 #, c-format
 msgid "%pB: malformed reloc detected for section %s"
 msgstr ""
 
-#: elfxx-mips.c:8658
+#: elfxx-mips.c:8812
 #, c-format
 msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
 msgstr ""
 
-#: elfxx-mips.c:8796
+#: elfxx-mips.c:8952
 #, c-format
 msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
 msgstr ""
 
-#: elfxx-mips.c:9086
+#: elfxx-mips.c:9255
 #, c-format
 msgid ""
 "%X%H: relocation %s against `%s' cannot be used when making a shared object; "
 "recompile with -fPIC\n"
 msgstr ""
 
-#: elfxx-mips.c:9422
+#: elfxx-mips.c:9381
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr ""
+
+#: elfxx-mips.c:9384
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr ""
+
+#: elfxx-mips.c:9604
 #, c-format
 msgid "non-dynamic relocations refer to dynamic symbol %s"
 msgstr ""
 
-#: elfxx-mips.c:10350
+#: elfxx-mips.c:10539
 #, c-format
 msgid ""
 "%pB: can't find matching LO16 reloc against `%s' for %s at %#<PRIx64> in "
 "section `%pA'"
 msgstr ""
 
-#: elfxx-mips.c:10490
+#: elfxx-mips.c:10679
 msgid ""
-"small-data section exceeds 64KB; lower small-data size limit (see option -G)"
+"small-data section too large; lower small-data size limit (see option -G)"
 msgstr ""
 
-#: elfxx-mips.c:10509
+#: elfxx-mips.c:10698
 msgid "cannot convert a jump to JALX for a non-word-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10512
+#: elfxx-mips.c:10701
 msgid "jump to a non-word-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10513
+#: elfxx-mips.c:10702
 msgid "jump to a non-instruction-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10516
+#: elfxx-mips.c:10705
 msgid "cannot convert a branch to JALX for a non-word-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10518
+#: elfxx-mips.c:10707
 msgid "branch to a non-instruction-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10520
+#: elfxx-mips.c:10709
 msgid "PC-relative load from unaligned address"
 msgstr ""
 
-#: elfxx-mips.c:10798
+#: elfxx-mips.c:11009
 #, c-format
 msgid ""
 "%pB: `%pA' entry VMA of %#<PRIx64> outside the 32-bit range supported; "
 "consider using `-Ttext-segment=...'"
 msgstr ""
 
-#: elfxx-mips.c:10911 elfxx-mips.c:11484
+#: elfxx-mips.c:11124 elfxx-mips.c:11711
 #, c-format
 msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
 msgstr ""
 
-#: elfxx-mips.c:11456
+#: elfxx-mips.c:11683
 #, c-format
 msgid ""
 "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; "
 "consider using `-Ttext-segment=...'"
 msgstr ""
 
-#: elfxx-mips.c:14397
+#: elfxx-mips.c:13429 reloc.c:8605
+#, c-format
+msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgstr ""
+
+#: elfxx-mips.c:14741
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr ""
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15269
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr ""
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15546
 #, c-format
 msgid "%pB: warning: linking abicalls files with non-abicalls files"
 msgstr ""
 
-#: elfxx-mips.c:15225
+#: elfxx-mips.c:15563
 #, c-format
 msgid "%pB: linking 32-bit code with 64-bit code"
 msgstr ""
 
-#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338
+#: elfxx-mips.c:15595 elfxx-mips.c:15661 elfxx-mips.c:15676
 #, c-format
 msgid "%pB: linking %s module with previous %s modules"
 msgstr ""
 
-#: elfxx-mips.c:15281
+#: elfxx-mips.c:15619
 #, c-format
 msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
 msgstr ""
 
-#: elfxx-mips.c:15306
+#: elfxx-mips.c:15644
 #, c-format
 msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
 msgstr ""
 
-#: elfxx-mips.c:15440
+#: elfxx-mips.c:15778
 #, c-format
 msgid ""
 "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses "
 "unknown floating point ABI %d"
 msgstr ""
 
-#: elfxx-mips.c:15446
+#: elfxx-mips.c:15784
 #, c-format
 msgid ""
 "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
 msgstr ""
 
-#: elfxx-mips.c:15452
+#: elfxx-mips.c:15790
 #, c-format
 msgid ""
 "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
 msgstr ""
 
-#: elfxx-mips.c:15466
+#: elfxx-mips.c:15804
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
 msgstr ""
 
-#: elfxx-mips.c:15485
+#: elfxx-mips.c:15823
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
 msgstr ""
 
-#: elfxx-mips.c:15497
+#: elfxx-mips.c:15835
 #, c-format
 msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
 msgstr ""
 
-#: elfxx-mips.c:15506
+#: elfxx-mips.c:15844
 #, c-format
 msgid ""
-"warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI "
-"%d"
+"warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %"
+"d"
 msgstr ""
 
-#: elfxx-mips.c:15568
+#: elfxx-mips.c:15906
 #, c-format
 msgid "%pB: endianness incompatible with that of the selected emulation"
 msgstr ""
 
-#: elfxx-mips.c:15582
+#: elfxx-mips.c:15920
 #, c-format
 msgid "%pB: ABI is incompatible with that of the selected emulation"
 msgstr ""
 
-#: elfxx-mips.c:15634
+#: elfxx-mips.c:15973
 #, c-format
 msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
 msgstr ""
 
-#: elfxx-mips.c:15639
+#: elfxx-mips.c:15978
 #, c-format
 msgid ""
 "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
 msgstr ""
 
-#: elfxx-mips.c:15643
+#: elfxx-mips.c:15982
 #, c-format
 msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
 msgstr ""
 
-#: elfxx-mips.c:15650
+#: elfxx-mips.c:15989
 #, c-format
 msgid ""
 "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
 msgstr ""
 
-#: elfxx-mips.c:15654
+#: elfxx-mips.c:15993
 #, c-format
 msgid ""
 "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
 msgstr ""
 
-#: elfxx-mips.c:15843
+#: elfxx-mips.c:16184
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr ""
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16246 elfxx-mips.c:16257
 msgid "None"
 msgstr ""
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16248 elfxx-mips.c:16317
 msgid "Unknown"
 msgstr ""
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16328
 #, c-format
 msgid "Hard or soft float\n"
 msgstr ""
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16331
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr ""
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16334
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr ""
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16337
 #, c-format
 msgid "Soft float\n"
 msgstr ""
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16340
 #, c-format
 msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
 msgstr ""
 
-#: elfxx-mips.c:16002
+#: elfxx-mips.c:16343
 #, c-format
 msgid "Hard float (32-bit CPU, Any FPU)\n"
 msgstr ""
 
-#: elfxx-mips.c:16005
+#: elfxx-mips.c:16346
 #, c-format
 msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
 msgstr ""
 
-#: elfxx-mips.c:16008
+#: elfxx-mips.c:16349
 #, c-format
 msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
 msgstr ""
 
-#: elfxx-mips.c:16040
+#: elfxx-mips.c:16381
 #, c-format
 msgid " [abi=O32]"
 msgstr ""
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16383
 #, c-format
 msgid " [abi=O64]"
 msgstr ""
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16385
 #, c-format
 msgid " [abi=EABI32]"
 msgstr ""
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16387
 #, c-format
 msgid " [abi=EABI64]"
 msgstr ""
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16389
 #, c-format
 msgid " [abi unknown]"
 msgstr ""
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16391
 #, c-format
 msgid " [abi=N32]"
 msgstr ""
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16393
 #, c-format
 msgid " [abi=64]"
 msgstr ""
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16395
 #, c-format
 msgid " [no abi set]"
 msgstr ""
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16420
 #, c-format
 msgid " [unknown ISA]"
 msgstr ""
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16440
 #, c-format
 msgid " [not 32bitmode]"
 msgstr ""
 
-#: elfxx-sparc.c:3113 /work/sources/binutils/current/bfd/elfnn-aarch64.c:5286
+#: elfxx-riscv.c:1699
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr ""
+
+#: elfxx-riscv.c:1705
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1811
+#, c-format
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr ""
+
+#: elfxx-riscv.c:1835
+#, c-format
+msgid "%s: unknown standard ISA extension or prefix class `%c'"
+msgstr ""
+
+#: elfxx-riscv.c:1871
+#, c-format
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr ""
+
+#: elfxx-riscv.c:1895
+#, c-format
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1919
+#, c-format
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr ""
+
+#: elfxx-riscv.c:1973
+#, c-format
+msgid "rv%de does not support the `h' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1981
+#, c-format
+msgid "rv%d does not support the `q' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1988
+#, c-format
+msgid "rv%d does not support the `zcf' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1995
+msgid "`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"
+msgstr ""
+
+#: elfxx-riscv.c:2002
+msgid "`xtheadvector' is conflict with the `v' extension"
+msgstr ""
+
+#: elfxx-riscv.c:2023
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr ""
+
+#: elfxx-riscv.c:2085
+#, c-format
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr ""
+
+#: elfxx-riscv.c:2113
+#, c-format
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr ""
+
+#: elfxx-riscv.c:2339
+#, c-format
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2362
+#, c-format
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2373
+#, c-format
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2613 elfxx-riscv.c:2861
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr ""
+
+#: elfxx-riscv.c:2648
+msgid "zihintntl' and `c', or `zihintntl' and `zca"
+msgstr ""
+
+#: elfxx-riscv.c:2653 elfxx-riscv.c:2671
+msgid "c' or `zca"
+msgstr ""
+
+#: elfxx-riscv.c:2659
+msgid "m' or `zmmul"
+msgstr ""
+
+#: elfxx-riscv.c:2677
+msgid "f' and `c', or `f' and `zcf"
+msgstr ""
+
+#: elfxx-riscv.c:2682
+msgid "c' or `zcf"
+msgstr ""
+
+#: elfxx-riscv.c:2688
+msgid "d' and `c', or `d' and `zcd"
+msgstr ""
+
+#: elfxx-riscv.c:2693
+msgid "c' or `zcd"
+msgstr ""
+
+#: elfxx-riscv.c:2695
+msgid "f' or `zfinx"
+msgstr ""
+
+#: elfxx-riscv.c:2697
+msgid "d' or `zdinx"
+msgstr ""
+
+#: elfxx-riscv.c:2699
+msgid "q' or `zqinx"
+msgstr ""
+
+#: elfxx-riscv.c:2701
+msgid "zfh' or `zhinx"
+msgstr ""
+
+#: elfxx-riscv.c:2705
+msgid "zfhmin' or `zhinxmin"
+msgstr ""
+
+#: elfxx-riscv.c:2716
+msgid "zfhmin' and `d', or `zhinxmin' and `zdinx"
+msgstr ""
+
+#: elfxx-riscv.c:2727
+msgid "zfhmin' and `q', or `zhinxmin' and `zqinx"
+msgstr ""
+
+#: elfxx-riscv.c:2733
+msgid "d' and `zfa"
+msgstr ""
+
+#: elfxx-riscv.c:2741
+msgid "q' and `zfa"
+msgstr ""
+
+#: elfxx-riscv.c:2749
+msgid "zfh' and `zfa"
+msgstr ""
+
+#: elfxx-riscv.c:2759
+msgid "zfh' and `zfa', or `zvfh' and `zfa"
+msgstr ""
+
+#: elfxx-riscv.c:2764
+msgid "zfh' or `zvfh"
+msgstr ""
+
+#: elfxx-riscv.c:2780
+msgid "zbb' or `zbkb"
+msgstr ""
+
+#: elfxx-riscv.c:2782
+msgid "zbc' or `zbkc"
+msgstr ""
+
+#: elfxx-riscv.c:2790
+msgid "zknd' or `zkne"
+msgstr ""
+
+#: elfxx-riscv.c:2796
+msgid "v' or `zve64x' or `zve32x"
+msgstr ""
+
+#: elfxx-riscv.c:2798
+msgid "v' or `zve64d' or `zve64f' or `zve32f"
+msgstr ""
+
+#: elfxx-riscv.c:2800
+msgid "zvbb"
+msgstr ""
+
+#: elfxx-riscv.c:2802
+msgid "zvbc"
+msgstr ""
+
+#: elfxx-riscv.c:2804
+msgid "zvkb"
+msgstr ""
+
+#: elfxx-riscv.c:2806
+msgid "zvkg"
+msgstr ""
+
+#: elfxx-riscv.c:2808
+msgid "zvkned"
+msgstr ""
+
+#: elfxx-riscv.c:2810
+msgid "zvknha' or `zvknhb"
+msgstr ""
+
+#: elfxx-riscv.c:2812
+msgid "zvksed"
+msgstr ""
+
+#: elfxx-riscv.c:2814
+msgid "zvksh"
+msgstr ""
+
+#: elfxx-riscv.c:2818
+msgid "zcb' and `zba"
+msgstr ""
+
+#: elfxx-riscv.c:2820
+msgid "zcb' and `zbb"
+msgstr ""
+
+#: elfxx-riscv.c:2822
+msgid "zcb' and `zmmul', or `zcb' and `m"
+msgstr ""
+
+#: elfxx-riscv.c:2826
+msgid "h"
+msgstr ""
+
+#: elfxx-sparc.c:3021
+#: elfnn-aarch64.c:5738
 #, c-format
 msgid ""
 "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
 msgstr ""
 
-#: elfxx-tilegx.c:4254
+#: elfxx-tilegx.c:4126
 #, c-format
 msgid "%pB: cannot link together %s and %s objects"
 msgstr ""
 
-#: elfxx-x86.c:578
+#: elfxx-x86.c:536 elfxx-x86.c:3440
 #, c-format
-msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgid ""
+"%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %"
+"pB\n"
+msgstr ""
+
+#: elfxx-x86.c:1043
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr ""
+
+#: elfxx-x86.c:1399
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr ""
+
+#: elfxx-x86.c:1435
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr ""
+
+#: elfxx-x86.c:1574
+#, c-format
+msgid "%F%P: %pB: failed to allocate memory for section `%pA'\n"
+msgstr ""
+
+#: elfxx-x86.c:1761
+#, c-format
+msgid ""
+"%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != "
+"old (%lu)\n"
+msgstr ""
+
+#: elfxx-x86.c:1783
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr ""
+
+#: elfxx-x86.c:2230
+#, c-format
+msgid ""
+"%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is "
+"disallowed\n"
 msgstr ""
 
-#: elfxx-x86.c:1027
+#: elfxx-x86.c:2312
 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
 msgstr ""
 
-#: elfxx-x86.c:1383
+#: elfxx-x86.c:3193
 msgid ""
-"%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n"
+"%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%"
+"pA' in %pB\n"
 msgstr ""
 
-#: elfxx-x86.c:2384
+#: elfxx-x86.c:3199
+msgid ""
+"%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr ""
+
+#: elfxx-x86.c:3819
 #, c-format
 msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
 msgstr ""
 
-#: elfxx-x86.c:2609
-msgid "%F%P: failed to create GNU property section\n"
+#: elfxx-x86.c:4166
+msgid "%P: %pB: warning: missing %s\n"
 msgstr ""
 
-#: elfxx-x86.c:2614
-#, c-format
-msgid "%F%pA: failed to align section\n"
+#: elfxx-x86.c:4167
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr ""
+
+#: elfxx-x86.c:4230
+msgid "IBT and SHSTK properties"
 msgstr ""
 
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:4232
+msgid "IBT property"
+msgstr ""
+
+#: elfxx-x86.c:4234
+msgid "SHSTK property"
+msgstr ""
+
+#: elfxx-x86.c:4239
+msgid "LAM_U48 property"
+msgstr ""
+
+#: elfxx-x86.c:4244
+msgid "LAM_U57 property"
+msgstr ""
+
+#: elfxx-x86.c:4413
 msgid "%F%P: failed to create VxWorks dynamic sections\n"
 msgstr ""
 
-#: elfxx-x86.c:2769
+#: elfxx-x86.c:4422
 msgid "%F%P: failed to create GOT sections\n"
 msgstr ""
 
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:4440
 msgid "%F%P: failed to create ifunc sections\n"
 msgstr ""
 
-#: elfxx-x86.c:2828
+#: elfxx-x86.c:4477
 msgid "%F%P: failed to create GOT PLT section\n"
 msgstr ""
 
-#: elfxx-x86.c:2849
+#: elfxx-x86.c:4496
 msgid "%F%P: failed to create IBT-enabled PLT section\n"
 msgstr ""
 
-#: elfxx-x86.c:2864
-msgid "%F%P: failed to create BND PLT section\n"
-msgstr ""
-
-#: elfxx-x86.c:2885
+#: elfxx-x86.c:4516
 msgid "%F%P: failed to create PLT .eh_frame section\n"
 msgstr ""
 
-#: elfxx-x86.c:2898
+#: elfxx-x86.c:4529
 msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
 msgstr ""
 
-#: elfxx-x86.c:2912
+#: elfxx-x86.c:4543
 msgid "%F%P: failed to create the second PLT .eh_frame section\n"
 msgstr ""
 
+#: elfxx-x86.c:4563
+msgid "%F%P: failed to create PLT .sframe section\n"
+msgstr ""
+
+#: elfxx-x86.c:4578
+msgid "%F%P: failed to create second PLT .sframe section\n"
+msgstr ""
+
+#: elfxx-x86.c:4618
+msgid "%X%P: attempted static link of dynamic object `%pB'\n"
+msgstr ""
+
 #: ihex.c:230
 #, c-format
 msgid "%pB:%d: unexpected character `%s' in Intel Hex file"
@@ -5321,407 +6318,436 @@ msgstr ""
 msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)"
 msgstr ""
 
-#: ihex.c:394
+#: ihex.c:393
 #, c-format
 msgid "%pB:%u: bad extended address record length in Intel Hex file"
 msgstr ""
 
-#: ihex.c:412
+#: ihex.c:411
 #, c-format
 msgid "%pB:%u: bad extended start address length in Intel Hex file"
 msgstr ""
 
-#: ihex.c:430
+#: ihex.c:429
 #, c-format
 msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
 msgstr ""
 
-#: ihex.c:448
+#: ihex.c:447
 #, c-format
 msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
 msgstr ""
 
-#: ihex.c:466
+#: ihex.c:465
 #, c-format
 msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
 msgstr ""
 
-#: ihex.c:585
+#: ihex.c:581
 #, c-format
 msgid "%pB: internal error in ihex_read_section"
 msgstr ""
 
-#: ihex.c:619
+#: ihex.c:614
 #, c-format
 msgid "%pB: bad section length in ihex_read_section"
 msgstr ""
 
-#: ihex.c:793
+#: ihex.c:785
 #, c-format
 msgid "%pB 64-bit address %#<PRIx64> out of range for Intel Hex file"
 msgstr ""
 
-#: ihex.c:852
+#: ihex.c:843
 #, c-format
 msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
 msgstr ""
 
-#: libbfd.c:937
+#: libbfd.c:1058
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr ""
 
-#: libbfd.c:1101
-#, c-format
-msgid "Deprecated %s called at %s line %d in %s\n"
-msgstr ""
-
-#: libbfd.c:1104
+#: linker.c:1713
 #, c-format
-msgid "Deprecated %s called\n"
+msgid "%pB: indirect symbol `%s' to `%s' is a loop"
 msgstr ""
 
-#: linker.c:1697
-#, c-format
-msgid "%pB: indirect symbol `%s' to `%s' is a loop"
+#: linker.c:1793
+msgid ""
+"%P: %pB: note: the message above does not take linker garbage collection "
+"into account\n"
 msgstr ""
 
-#: linker.c:2567
+#: linker.c:2591
 #, c-format
 msgid "attempt to do relocatable link with %s input and %s output"
 msgstr ""
 
-#: linker.c:2853
+#: linker.c:2870
 #, c-format
 msgid "%pB: ignoring duplicate section `%pA'\n"
 msgstr ""
 
-#: linker.c:2863 linker.c:2873
+#: linker.c:2880 linker.c:2890
 #, c-format
 msgid "%pB: duplicate section `%pA' has different size\n"
 msgstr ""
 
-#: linker.c:2882 linker.c:2888
+#: linker.c:2904 linker.c:2912
 #, c-format
 msgid "%pB: could not read contents of section `%pA'\n"
 msgstr ""
 
-#: linker.c:2893
+#: linker.c:2921
 #, c-format
 msgid "%pB: duplicate section `%pA' has different contents\n"
 msgstr ""
 
-#: linker.c:3407
+#: linker.c:3440
 #, c-format
 msgid "%pB: compiled for a big endian system and target is little endian"
 msgstr ""
 
-#: linker.c:3410
+#: linker.c:3443
 #, c-format
 msgid "%pB: compiled for a little endian system and target is big endian"
 msgstr ""
 
-#: mach-o.c:632
+#: mach-o-arm.c:169 mach-o-arm.c:301
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr ""
+
+#: mach-o-arm.c:185
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:200
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:215
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:230
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:262
+#, c-format
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr ""
+
+#: mach-o-arm.c:332
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr ""
+
+#: mach-o.c:640
 #, c-format
 msgid "<unknown mask flags>"
 msgstr ""
 
-#: mach-o.c:687
+#: mach-o.c:695
 msgid " (<unknown>)"
 msgstr ""
 
-#: mach-o.c:698
+#: mach-o.c:707
 #, c-format
 msgid " MACH-O header:\n"
 msgstr ""
 
-#: mach-o.c:699
+#: mach-o.c:708
 #, c-format
 msgid "   magic:      %#lx\n"
 msgstr ""
 
-#: mach-o.c:700
+#: mach-o.c:709
 #, c-format
 msgid "   cputype:    %#lx (%s)\n"
 msgstr ""
 
-#: mach-o.c:702
+#: mach-o.c:711
 #, c-format
 msgid "   cpusubtype: %#lx%s\n"
 msgstr ""
 
-#: mach-o.c:704
+#: mach-o.c:713
 #, c-format
 msgid "   filetype:   %#lx\n"
 msgstr ""
 
-#: mach-o.c:705
+#: mach-o.c:714
 #, c-format
 msgid "   ncmds:      %#lx\n"
 msgstr ""
 
-#: mach-o.c:706
+#: mach-o.c:715
 #, c-format
 msgid "   sizeocmds:  %#lx\n"
 msgstr ""
 
-#: mach-o.c:707
+#: mach-o.c:716
 #, c-format
 msgid "   flags:      %#lx\n"
 msgstr ""
 
-#: mach-o.c:708
+#: mach-o.c:717
 #, c-format
 msgid "   version:    %x\n"
 msgstr ""
 
 #. Urg - what has happened ?
-#: mach-o.c:743
+#: mach-o.c:752
 #, c-format
 msgid "incompatible cputypes in mach-o files: %ld vs %ld"
 msgstr ""
 
-#: mach-o.c:912
+#: mach-o.c:921
 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
 msgstr ""
 
-#: mach-o.c:2108
+#: mach-o.c:1513
+msgid ""
+"malformed mach-o reloc: section index is greater than the number of sections"
+msgstr ""
+
+#: mach-o.c:2155
 msgid ""
 "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab "
 "commands."
 msgstr ""
 
-#: mach-o.c:2554
+#: mach-o.c:2603
 #, c-format
 msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
 msgstr ""
 
-#: mach-o.c:2661
+#: mach-o.c:2695
 #, c-format
 msgid "unable to allocate data for load command %#x"
 msgstr ""
 
-#: mach-o.c:2766
+#: mach-o.c:2800
 #, c-format
 msgid "unable to write unknown load command %#x"
 msgstr ""
 
-#: mach-o.c:2950
+#: mach-o.c:2984
 #, c-format
 msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
 msgstr ""
 
-#: mach-o.c:3092
+#: mach-o.c:3126
 #, c-format
 msgid "unable to layout unknown load command %#x"
 msgstr ""
 
-#: mach-o.c:3628
+#: mach-o.c:3661
 #, c-format
-msgid ""
-"bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead"
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
 msgstr ""
 
-#: mach-o.c:3671
+#: mach-o.c:3704
 #, c-format
-msgid ""
-"bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead"
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
 msgstr ""
 
-#: mach-o.c:3722
+#: mach-o.c:3755
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"
 msgstr ""
 
-#: mach-o.c:3741
+#: mach-o.c:3774
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
 msgstr ""
 
-#: mach-o.c:3824
+#: mach-o.c:3857
 #, c-format
 msgid ""
 "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d "
 "(max %lu): setting to undefined"
 msgstr ""
 
-#: mach-o.c:3843
+#: mach-o.c:3876
 #, c-format
 msgid ""
-"bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x"
-"%x: setting to undefined"
-msgstr ""
-
-#: mach-o.c:3920
-msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
+"bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%"
+"x: setting to undefined"
 msgstr ""
 
-#: mach-o.c:4931
+#: mach-o.c:5075
 #, c-format
 msgid "%pB: unknown load command %#x"
 msgstr ""
 
-#: mach-o.c:5122
+#: mach-o.c:5274
 #, c-format
 msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
 msgstr ""
 
-#: mach-o.c:5227
+#: mach-o.c:5396
 #, c-format
 msgid "unknown header byte-order value %#x"
 msgstr ""
 
-#: merge.c:878
+#: merge.c:1118
 #, c-format
 msgid "%pB: access beyond end of merged section (%<PRId64>)"
 msgstr ""
 
-#: mmo.c:476
-#, c-format
-msgid "%pB: no core to allocate section name %s"
-msgstr ""
-
-#: mmo.c:541
+#: mmo.c:535
 #, c-format
 msgid "%pB: no core to allocate a symbol %d bytes long"
 msgstr ""
 
-#: mmo.c:955
+#: mmo.c:956
 #, c-format
 msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
 msgstr ""
 
-#: mmo.c:1252
+#: mmo.c:1251
 #, c-format
 msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
 msgstr ""
 
-#: mmo.c:1399
+#: mmo.c:1398
 #, c-format
 msgid ""
 "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name "
 "starting with `%s'\n"
 msgstr ""
 
-#: mmo.c:1633
+#: mmo.c:1414
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr ""
+
+#: mmo.c:1643
 #, c-format
 msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
 msgstr ""
 
-#: mmo.c:1644
+#: mmo.c:1654
 #, c-format
 msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
 msgstr ""
 
-#: mmo.c:1682
+#: mmo.c:1698
 #, c-format
 msgid ""
 "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
 msgstr ""
 
-#: mmo.c:1733
+#: mmo.c:1749
 #, c-format
 msgid ""
 "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
 msgstr ""
 
-#: mmo.c:1774
+#: mmo.c:1798
 #, c-format
 msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
 msgstr ""
 
-#: mmo.c:1785
+#: mmo.c:1809
 #, c-format
 msgid ""
 "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
 msgstr ""
 
-#: mmo.c:1810
+#: mmo.c:1834
 #, c-format
 msgid ""
 "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d "
 "for lop_fixrx\n"
 msgstr ""
 
-#: mmo.c:1835
+#: mmo.c:1863
 #, c-format
 msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
 msgstr ""
 
-#: mmo.c:1857
+#: mmo.c:1885
 #, c-format
 msgid ""
 "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
 msgstr ""
 
-#: mmo.c:1871
+#: mmo.c:1900
 #, c-format
 msgid ""
 "%pB: invalid mmo file: file name for number %d was not specified before use\n"
 msgstr ""
 
-#: mmo.c:1978
+#: mmo.c:2012
 #, c-format
 msgid ""
 "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
 msgstr ""
 
-#: mmo.c:2015
+#: mmo.c:2049
 #, c-format
 msgid "%pB: invalid mmo file: lop_end not last item in file\n"
 msgstr ""
 
-#: mmo.c:2029
+#: mmo.c:2063
 #, c-format
 msgid ""
 "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras "
 "to the preceding lop_stab (%ld)\n"
 msgstr ""
 
-#: mmo.c:2740
+#: mmo.c:2776
 #, c-format
 msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
 msgstr ""
 
-#: mmo.c:2983
+#: mmo.c:3015
 #, c-format
 msgid ""
-"%pB: bad symbol definition: `Main' set to %s rather than the start address "
-"%s\n"
+"%pB: bad symbol definition: `Main' set to %<PRIx64> rather than the start "
+"address %<PRIx64>\n"
 msgstr ""
 
-#: mmo.c:3082
+#: mmo.c:3114
 #, c-format
 msgid ""
 "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit "
 "words: %d.  Only `Main' will be emitted.\n"
 msgstr ""
 
-#: mmo.c:3128
+#: mmo.c:3160
 #, c-format
 msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
 msgstr ""
 
-#: mmo.c:3181
+#: mmo.c:3213
 #, c-format
 msgid "%pB: internal error, internal register section %pA had contents\n"
 msgstr ""
 
-#: mmo.c:3232
+#: mmo.c:3264
 #, c-format
 msgid "%pB: no initialized registers; section length 0\n"
 msgstr ""
 
-#: mmo.c:3239
+#: mmo.c:3271
 #, c-format
 msgid "%pB: too many initialized registers; section length %<PRId64>"
 msgstr ""
 
-#: mmo.c:3244
+#: mmo.c:3276
 #, c-format
 msgid ""
-"%pB: invalid start address for initialized registers of length %<PRId64>: "
-"%#<PRIx64>"
+"%pB: invalid start address for initialized registers of length %<PRId64>: %"
+"#<PRIx64>"
 msgstr ""
 
 #: osf-core.c:127
@@ -5729,60 +6755,67 @@ msgstr ""
 msgid "unhandled OSF/1 core file section type %d"
 msgstr ""
 
-#: pef.c:527
+#: pdp11.c:1588
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr ""
+
+#: pef.c:531
 #, c-format
 msgid "bfd_pef_scan: unknown architecture 0x%lx"
 msgstr ""
 
-#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220
+#: pei-x86_64.c:174 pei-x86_64.c:228 pei-x86_64.c:238 pei-x86_64.c:263
+#: pei-x86_64.c:275 pei-x86_64.c:289 pei-x86_64.c:307 pei-x86_64.c:319
+#: pei-x86_64.c:331
 #, c-format
 msgid "warning: corrupt unwind data\n"
 msgstr ""
 
 #. PR 17512: file: 2245-7442-0.004.
-#: pei-x86_64.c:315
+#: pei-x86_64.c:352
 #, c-format
 msgid "Unknown: %x"
 msgstr ""
 
-#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384
+#: pei-x86_64.c:403 pei-x86_64.c:413 pei-x86_64.c:422
 #, c-format
 msgid "warning: xdata section corrupt\n"
 msgstr ""
 
-#: pei-x86_64.c:439
+#: pei-x86_64.c:477
 #, c-format
 msgid "Too many unwind codes (%ld)\n"
 msgstr ""
 
-#: pei-x86_64.c:529
+#: pei-x86_64.c:563
 #, c-format
 msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
 msgstr ""
 
-#: pei-x86_64.c:536
+#: pei-x86_64.c:570
 #, c-format
 msgid "Warning: %s section size is zero\n"
 msgstr ""
 
-#: pei-x86_64.c:551
+#: pei-x86_64.c:585
 #, c-format
 msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
 msgstr ""
 
-#: pei-x86_64.c:560
+#: pei-x86_64.c:594
 #, c-format
 msgid ""
 "\n"
 "The Function Table (interpreted %s section contents)\n"
 msgstr ""
 
-#: pei-x86_64.c:563
+#: pei-x86_64.c:597
 #, c-format
 msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
 msgstr ""
 
-#: pei-x86_64.c:692
+#: pei-x86_64.c:722
 #, c-format
 msgid ""
 "\n"
@@ -5790,48 +6823,68 @@ msgid ""
 msgstr ""
 
 #. XXX code yet to be written.
-#: peicode.h:775
+#: peicode.h:820
 #, c-format
 msgid "%pB: unhandled import type; %x"
 msgstr ""
 
-#: peicode.h:781
+#: peicode.h:826
 #, c-format
 msgid "%pB: unrecognized import type; %x"
 msgstr ""
 
-#: peicode.h:796
+#: peicode.h:841
 #, c-format
 msgid "%pB: unrecognized import name type; %x"
 msgstr ""
 
-#: peicode.h:1211
+#: peicode.h:1280
 #, c-format
 msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
 msgstr ""
 
-#: peicode.h:1224
+#: peicode.h:1293
 #, c-format
 msgid ""
 "%pB: recognised but unhandled machine type (0x%x) in Import Library Format "
 "archive"
 msgstr ""
 
-#: peicode.h:1242
+#: peicode.h:1311
 #, c-format
 msgid "%pB: size field is zero in Import Library Format header"
 msgstr ""
 
-#: peicode.h:1274
+#: peicode.h:1337
 #, c-format
 msgid "%pB: string not null terminated in ILF object file"
 msgstr ""
 
-#: peicode.h:1330
+#: peicode.h:1393
 #, c-format
 msgid "%pB: error: debug data ends beyond end of debug directory"
 msgstr ""
 
+#: peicode.h:1563
+#, c-format
+msgid "%pB: adjusting invalid SectionAlignment"
+msgstr ""
+
+#: peicode.h:1573
+#, c-format
+msgid "%pB: adjusting invalid FileAlignment"
+msgstr ""
+
+#: peicode.h:1581
+#, c-format
+msgid "%pB: invalid NumberOfRvaAndSizes"
+msgstr ""
+
+#: plugin.c:258
+msgid ""
+"plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr ""
+
 #: ppcboot.c:392
 #, c-format
 msgid ""
@@ -5881,49 +6934,50 @@ msgstr ""
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
 msgstr ""
 
-#: reloc.c:8232
+#: reloc.c:8504
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr ""
 
-#: reloc.c:8333
+#: reloc.c:8770
 #, c-format
-msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgid "%pB: unrecognized relocation type %#x in section `%pA'"
 msgstr ""
 
-#: reloc.c:8420
+#. PR 21803: Suggest the most likely cause of this error.
+#: reloc.c:8774
 #, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgid "is this version of the linker - %s - out of date ?"
 msgstr ""
 
-#: reloc.c:8429
+#: rs6000-core.c:471
 #, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgid "%pB: warning core file truncated"
 msgstr ""
 
-#: reloc.c:8491
+#: som.c:3002
 #, c-format
-msgid "%pB: unrecognized relocation type %#x in section `%pA'"
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of order"
 msgstr ""
 
-#. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8495
+#: som.c:3015
 #, c-format
-msgid "is this version of the linker - %s - out of date ?"
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of range"
 msgstr ""
 
-#: rs6000-core.c:471
+#. User has specified a subspace without its containing space.
+#: som.c:5405
 #, c-format
-msgid "%pB: warning core file truncated"
+msgid "%pB[%pA]: no output section for space %pA"
 msgstr ""
 
-#: som.c:5478
+#: som.c:5451
 #, c-format
 msgid ""
 "\n"
 "Exec Auxiliary Header\n"
 msgstr ""
 
-#: som.c:5787
+#: som.c:5760
 msgid "som_sizeof_headers unimplemented"
 msgstr ""
 
@@ -5937,17 +6991,17 @@ msgstr ""
 msgid "%pB:%d: byte count %d too small"
 msgstr ""
 
-#: srec.c:581 srec.c:615
+#: srec.c:580 srec.c:614
 #, c-format
 msgid "%pB:%d: bad checksum in S-record file"
 msgstr ""
 
-#: stabs.c:279
+#: stabs.c:308
 #, c-format
 msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
 msgstr ""
 
-#: syms.c:1091
+#: syms.c:1112
 msgid "unsupported .stab relocation"
 msgstr ""
 
@@ -5955,65 +7009,75 @@ msgstr ""
 msgid "corrupt EIHD record - size is too small"
 msgstr ""
 
-#: vms-alpha.c:660
+#: vms-alpha.c:665
 #, c-format
 msgid "unable to read EIHS record at offset %#x"
 msgstr ""
 
-#: vms-alpha.c:1173
+#: vms-alpha.c:1157
+msgid "record is too small for symbol name length"
+msgstr ""
+
+#: vms-alpha.c:1190
 #, c-format
 msgid "corrupt EGSD record: its size (%#x) is too small"
 msgstr ""
 
-#: vms-alpha.c:1197
+#: vms-alpha.c:1214
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)"
+msgid ""
+"corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
 msgstr ""
 
-#: vms-alpha.c:1205
+#: vms-alpha.c:1224
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is too small"
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
 msgstr ""
 
-#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390
+#: vms-alpha.c:1366
 #, c-format
 msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
 msgstr ""
 
-#: vms-alpha.c:1419
+#: vms-alpha.c:1441
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr ""
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1474
 #, c-format
 msgid "stack overflow (%d) in _bfd_vms_push"
 msgstr ""
 
-#: vms-alpha.c:1465
+#: vms-alpha.c:1488
 msgid "stack underflow in _bfd_vms_pop"
 msgstr ""
 
+#: vms-alpha.c:1562
+#, c-format
+msgid "dst_define_location %u too large"
+msgstr ""
+
 #. These names have not yet been added to this switch statement.
-#: vms-alpha.c:1707
+#: vms-alpha.c:1765
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr ""
 
-#: vms-alpha.c:1738
+#: vms-alpha.c:1796
 msgid "corrupt vms value"
 msgstr ""
 
-#: vms-alpha.c:1866
+#: vms-alpha.c:1927
 msgid "corrupt ETIR record encountered"
 msgstr ""
 
-#: vms-alpha.c:1923
+#: vms-alpha.c:1989
 #, c-format
 msgid "bad section index in %s"
 msgstr ""
 
-#: vms-alpha.c:1936
+#: vms-alpha.c:2003
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr ""
@@ -6023,2363 +7087,2624 @@ msgstr ""
 #. Rotate.
 #. Redefine symbol to current location.
 #. Define a literal.
-#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396
+#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557
 #, c-format
 msgid "%s: not supported"
 msgstr ""
 
-#: vms-alpha.c:2122
+#: vms-alpha.c:2217
 #, c-format
 msgid "%s: not implemented"
 msgstr ""
 
-#: vms-alpha.c:2380
+#: vms-alpha.c:2382 vms-alpha.c:2397
+#, c-format
+msgid "invalid %s"
+msgstr ""
+
+#. Divide by zero is supposed to give a result of zero,
+#. and a non-fatal warning message.
+#: vms-alpha.c:2457
+#, c-format
+msgid "%s divide by zero"
+msgstr ""
+
+#: vms-alpha.c:2523
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr ""
 
-#: vms-alpha.c:2414
+#: vms-alpha.c:2581
 #, c-format
 msgid "reserved cmd %d"
 msgstr ""
 
-#: vms-alpha.c:2498
+#: vms-alpha.c:2665
 msgid "corrupt EEOM record - size is too small"
 msgstr ""
 
-#: vms-alpha.c:2507
+#: vms-alpha.c:2674
 msgid "object module not error-free !"
 msgstr ""
 
-#: vms-alpha.c:3831
+#: vms-alpha.c:4012
 #, c-format
 msgid "SEC_RELOC with no relocs in section %pA"
 msgstr ""
 
-#: vms-alpha.c:3883 vms-alpha.c:4097
+#: vms-alpha.c:4064 vms-alpha.c:4292
 #, c-format
 msgid "size error in section %pA"
 msgstr ""
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4235
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr ""
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4278
 #, c-format
 msgid "unhandled relocation %s"
 msgstr ""
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4643
 #, c-format
 msgid "unknown source command %d"
 msgstr ""
 
-#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456
-#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501
-#: vms-alpha.c:4507
+#: vms-alpha.c:4795 vms-alpha.c:4800 vms-alpha.c:4805 vms-alpha.c:4810
+#: vms-alpha.c:4815 vms-alpha.c:4838 vms-alpha.c:4843 vms-alpha.c:4848
+#: vms-alpha.c:4853
 #, c-format
 msgid "%s not implemented"
 msgstr ""
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4889
 #, c-format
 msgid "unknown line command %d"
 msgstr ""
 
-#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059
-#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097
+#: vms-alpha.c:5328
+msgid "corrupt reloc record"
+msgstr ""
+
+#: vms-alpha.c:5358 vms-alpha.c:5376 vms-alpha.c:5393 vms-alpha.c:5411
+#: vms-alpha.c:5424 vms-alpha.c:5436 vms-alpha.c:5449
 #, c-format
 msgid "unknown reloc %s + %s"
 msgstr ""
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5508
 #, c-format
 msgid "unknown reloc %s"
 msgstr ""
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5522
 msgid "invalid section index in ETIR"
 msgstr ""
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5531
 msgid "relocation for non-REL psect"
 msgstr ""
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5584
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr ""
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:6003
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr ""
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:6119
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr ""
 
-#: vms-alpha.c:5757
+#: vms-alpha.c:6124
 #, c-format
 msgid "   Error: The length is less than the length of an EMH record\n"
 msgstr ""
 
-#: vms-alpha.c:5774
+#: vms-alpha.c:6141
 #, c-format
 msgid ""
 "   Error: The record length is less than the size of an EMH_MHD record\n"
 msgstr ""
 
-#: vms-alpha.c:5777
+#: vms-alpha.c:6144
 #, c-format
 msgid "Module header\n"
 msgstr ""
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:6145
 #, c-format
 msgid "   structure level: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:6146
 #, c-format
 msgid "   max record size: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:6152
 #, c-format
 msgid "   Error: The module name is missing\n"
 msgstr ""
 
-#: vms-alpha.c:5791
+#: vms-alpha.c:6158
 #, c-format
 msgid "   Error: The module name is too long\n"
 msgstr ""
 
-#: vms-alpha.c:5794
+#: vms-alpha.c:6161
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:6165
 #, c-format
 msgid "   Error: The module version is missing\n"
 msgstr ""
 
-#: vms-alpha.c:5804
+#: vms-alpha.c:6171
 #, c-format
 msgid "   Error: The module version is too long\n"
 msgstr ""
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:6174
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:6177
 #, c-format
 msgid "   Error: The compile date is truncated\n"
 msgstr ""
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:6179
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr ""
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:6184
 #, c-format
 msgid "Language Processor Name\n"
 msgstr ""
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:6185
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6189
 #, c-format
 msgid "Source Files Header\n"
 msgstr ""
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6190
 #, c-format
 msgid "   file: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6194
 #, c-format
 msgid "Title Text Header\n"
 msgstr ""
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6195
 #, c-format
 msgid "   title: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6199
 #, c-format
 msgid "Copyright Header\n"
 msgstr ""
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6200
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6204
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr ""
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6214
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr ""
 
-#: vms-alpha.c:5852
+#: vms-alpha.c:6219
 #, c-format
 msgid "   Error: The length is less than the length of an EEOM record\n"
 msgstr ""
 
-#: vms-alpha.c:5856
+#: vms-alpha.c:6223
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5858
+#: vms-alpha.c:6225
 #, c-format
 msgid "   completion code: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6229
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr ""
 
-#: vms-alpha.c:5863
+#: vms-alpha.c:6230
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6232
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6241
 msgid " WEAK"
 msgstr ""
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6243
 msgid " DEF"
 msgstr ""
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6245
 msgid " UNI"
 msgstr ""
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6247 vms-alpha.c:6268
 msgid " REL"
 msgstr ""
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6249
 msgid " COMM"
 msgstr ""
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6251
 msgid " VECEP"
 msgstr ""
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6253
 msgid " NORM"
 msgstr ""
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6255
 msgid " QVAL"
 msgstr ""
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6262
 msgid " PIC"
 msgstr ""
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6264
 msgid " LIB"
 msgstr ""
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6266
 msgid " OVR"
 msgstr ""
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6270
 msgid " GBL"
 msgstr ""
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6272
 msgid " SHR"
 msgstr ""
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6274
 msgid " EXE"
 msgstr ""
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6276
 msgid " RD"
 msgstr ""
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6278
 msgid " WRT"
 msgstr ""
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6280
 msgid " VEC"
 msgstr ""
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6282
 msgid " NOMOD"
 msgstr ""
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6284
 msgid " COM"
 msgstr ""
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6286
 msgid " 64B"
 msgstr ""
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6295
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr ""
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6310
 #, c-format
 msgid "  EGSD entry %2u (type: %u, len: %u): "
 msgstr ""
 
-#: vms-alpha.c:5947 vms-alpha.c:6198
+#: vms-alpha.c:6316 vms-alpha.c:6611
 #, c-format
-msgid "   Error: length larger than remaining space in record\n"
+msgid "   Erroneous length\n"
 msgstr ""
 
-#: vms-alpha.c:5959
+#: vms-alpha.c:6329
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr ""
 
-#: vms-alpha.c:5960 vms-alpha.c:5977
+#: vms-alpha.c:6330 vms-alpha.c:6350
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr ""
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6331 vms-alpha.c:6351
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr ""
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6335
 #, c-format
 msgid "   alloc (len): %u (0x%08x)\n"
 msgstr ""
 
-#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072
+#: vms-alpha.c:6337 vms-alpha.c:6403 vms-alpha.c:6471
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6349
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr ""
 
-#: vms-alpha.c:5982
+#: vms-alpha.c:6355
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr ""
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6356
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6358
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6361
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6377
 #, c-format
 msgid "SYM - Global symbol definition\n"
 msgstr ""
 
-#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101
+#: vms-alpha.c:6378 vms-alpha.c:6459 vms-alpha.c:6483 vms-alpha.c:6506
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr ""
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6381
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6385
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6387
 #, c-format
 msgid "   psect index for entry point : %u\n"
 msgstr ""
 
-#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108
+#: vms-alpha.c:6390 vms-alpha.c:6490 vms-alpha.c:6513
 #, c-format
 msgid "   psect index : %u\n"
 msgstr ""
 
-#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110
+#: vms-alpha.c:6393 vms-alpha.c:6493 vms-alpha.c:6516
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6401
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr ""
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6416
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr ""
 
-#: vms-alpha.c:6035
+#: vms-alpha.c:6417
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr ""
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6421
 #, c-format
 msgid "   id match      : %x\n"
 msgstr ""
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6423
 #, c-format
 msgid "   error severity: %x\n"
 msgstr ""
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6427
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6433
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6442
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6446
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6458
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr ""
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6462
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6464
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6466
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6468
 #, c-format
 msgid "   psect index: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6482
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr ""
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6486
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6488 vms-alpha.c:6511
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6505
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr ""
 
-#: vms-alpha.c:6104
+#: vms-alpha.c:6509
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6522
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr ""
 
-#: vms-alpha.c:6150
+#: vms-alpha.c:6561
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6154
+#: vms-alpha.c:6565
 #, c-format
 msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6159
+#: vms-alpha.c:6570
 #, c-format
 msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6165
+#: vms-alpha.c:6576
 #, c-format
 msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6170
+#: vms-alpha.c:6581
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6593
 #, c-format
-msgid "  %s (len=%u+%u):\n"
+msgid "  %s (len=%u):\n"
 msgstr ""
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6616
 #, c-format
-msgid "   (type: %3u, size: 4+%3u): "
+msgid "   (type: %3u, size: %3u): "
 msgstr ""
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6622
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6626
 #, c-format
-msgid "STA_LW (stack longword) 0x%08x\n"
+msgid "STA_LW (stack longword)"
 msgstr ""
 
-#: vms-alpha.c:6215
+#: vms-alpha.c:6632
 #, c-format
-msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+msgid "STA_QW (stack quadword)"
 msgstr ""
 
-#: vms-alpha.c:6220
+#: vms-alpha.c:6639
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6222
+#: vms-alpha.c:6642
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6228
+#: vms-alpha.c:6648
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr ""
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6651
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr ""
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6654
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr ""
 
-#: vms-alpha.c:6238
+#: vms-alpha.c:6658
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr ""
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6661
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr ""
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6664
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr ""
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6667
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr ""
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6674
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr ""
 
-#: vms-alpha.c:6260
+#: vms-alpha.c:6683
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6688
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6268
+#: vms-alpha.c:6692
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr ""
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6695
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr ""
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6698
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr ""
 
-#: vms-alpha.c:6280
+#: vms-alpha.c:6705
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr ""
 
-#: vms-alpha.c:6287
+#: vms-alpha.c:6714
 #, c-format
 msgid "STO_GBL_LW (store global longword) %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6291
+#: vms-alpha.c:6718
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr ""
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6721
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr ""
 
-#: vms-alpha.c:6297
+#: vms-alpha.c:6724
 #, c-format
 msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
 msgstr ""
 
-#: vms-alpha.c:6301
+#: vms-alpha.c:6728
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr ""
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6731
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr ""
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6734
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr ""
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6737
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr ""
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6740
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr ""
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6743
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr ""
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6746
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr ""
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6749
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr ""
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6752
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr ""
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6755
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr ""
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6758
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr ""
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6761
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr ""
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6764
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr ""
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6767
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr ""
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6770
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr ""
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6773
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr ""
 
-#: vms-alpha.c:6349
+#: vms-alpha.c:6776
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr ""
 
-#: vms-alpha.c:6353
+#: vms-alpha.c:6780
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr ""
 
-#: vms-alpha.c:6357
+#: vms-alpha.c:6784
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr ""
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:6788
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6362
+#: vms-alpha.c:6795
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6801
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr ""
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6804
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6371
+#: vms-alpha.c:6809
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr ""
 
-#: vms-alpha.c:6373
+#: vms-alpha.c:6812
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6377
+#: vms-alpha.c:6817
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6380
+#: vms-alpha.c:6821
 #, c-format
 msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6387
+#: vms-alpha.c:6828
 #, c-format
 msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6391
+#: vms-alpha.c:6832
 #, c-format
 msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6395
+#: vms-alpha.c:6836
 #, c-format
 msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6399
+#: vms-alpha.c:6840
 #, c-format
 msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6403
+#: vms-alpha.c:6844
 #, c-format
 msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6407
+#: vms-alpha.c:6848
 #, c-format
 msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6411
+#: vms-alpha.c:6852
 #, c-format
 msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6415
+#: vms-alpha.c:6856
 #, c-format
 msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6420
+#: vms-alpha.c:6861
 #, c-format
 msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6424
+#: vms-alpha.c:6865
 #, c-format
 msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6428
+#: vms-alpha.c:6869
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr ""
 
-#: vms-alpha.c:6434
+#: vms-alpha.c:6875
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr ""
 
-#: vms-alpha.c:6438
+#: vms-alpha.c:6880
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr ""
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6883
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr ""
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6886
 #, c-format
 msgid "CTL_STKDL (stack defined location)\n"
 msgstr ""
 
-#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997
+#: vms-alpha.c:6889 vms-alpha.c:7317 vms-alpha.c:7478
 #, c-format
 msgid "*unhandled*\n"
 msgstr ""
 
-#: vms-alpha.c:6477 vms-alpha.c:6516
+#: vms-alpha.c:6914
 #, c-format
-msgid "cannot read GST record length\n"
+msgid "cannot read GST record header\n"
 msgstr ""
 
 #. Ill-formed.
-#: vms-alpha.c:6498
+#: vms-alpha.c:6937
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr ""
 
-#: vms-alpha.c:6524
-#, c-format
-msgid "cannot read GST record header\n"
-msgstr ""
-
-#: vms-alpha.c:6537
+#: vms-alpha.c:6961
 #, c-format
-msgid " corrupted GST\n"
+msgid "corrupted GST\n"
 msgstr ""
 
-#: vms-alpha.c:6545
+#: vms-alpha.c:6974
 #, c-format
 msgid "cannot read GST record\n"
 msgstr ""
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:7001
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr ""
 
-#: vms-alpha.c:6598
+#: vms-alpha.c:7026
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6612
+#: vms-alpha.c:7040
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr ""
 
-#: vms-alpha.c:6619
+#: vms-alpha.c:7047
 #, c-format
 msgid " %08x"
 msgstr ""
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:7074
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr ""
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:7080
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6673
+#: vms-alpha.c:7103
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr ""
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:7110
 #, c-format
 msgid " 0x%08x"
 msgstr ""
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:7236
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr ""
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:7241
 #, c-format
 msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6818
+#: vms-alpha.c:7252
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr ""
 
-#: vms-alpha.c:6823
+#: vms-alpha.c:7259
 #, c-format
 msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6828
+#: vms-alpha.c:7264
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7268
 #, c-format
 msgid "Strides:\n"
 msgstr ""
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7282
 #, c-format
 msgid "Bounds:\n"
 msgstr ""
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7289
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6860
+#: vms-alpha.c:7303
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr ""
 
-#: vms-alpha.c:6865
+#: vms-alpha.c:7310
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7336
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr ""
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7343
 #, c-format
 msgid "(no value)\n"
 msgstr ""
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7346
 #, c-format
 msgid "(not active)\n"
 msgstr ""
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7349
 #, c-format
 msgid "(not allocated)\n"
 msgstr ""
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7352
 #, c-format
 msgid "(descriptor)\n"
 msgstr ""
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7357
 #, c-format
 msgid "(trailing value)\n"
 msgstr ""
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7360
 #, c-format
 msgid "(value spec follows)\n"
 msgstr ""
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7363
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr ""
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7367
 #, c-format
 msgid "(reg: %u, disp: %u, indir: %u, kind: "
 msgstr ""
 
-#: vms-alpha.c:6922
+#: vms-alpha.c:7374
 msgid "literal"
 msgstr ""
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7377
 msgid "address"
 msgstr ""
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7380
 msgid "desc"
 msgstr ""
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7383
 msgid "reg"
 msgstr ""
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7404
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr ""
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7412
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr ""
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7417
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7421
 #, c-format
 msgid "typed pointer\n"
 msgstr ""
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7425
 #, c-format
 msgid "pointer\n"
 msgstr ""
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7436
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr ""
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7451
 #, c-format
 msgid "array descriptor:\n"
 msgstr ""
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7462
 #, c-format
 msgid "type spec for element:\n"
 msgstr ""
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7464
 #, c-format
 msgid "type spec for subscript %u:\n"
 msgstr ""
 
-#: vms-alpha.c:7008
+#: vms-alpha.c:7489
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr ""
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7500
 #, c-format
 msgid "cannot read DST header\n"
 msgstr ""
 
-#: vms-alpha.c:7025
+#: vms-alpha.c:7506
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr ""
 
-#: vms-alpha.c:7039
+#: vms-alpha.c:7523
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr ""
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7567
 #, c-format
 msgid "standard data: %s\n"
 msgstr ""
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7571 vms-alpha.c:7695
 #, c-format
 msgid "    name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7579
 #, c-format
 msgid "modbeg\n"
 msgstr ""
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7583
 #, c-format
 msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7100 vms-alpha.c:7374
+#: vms-alpha.c:7593 vms-alpha.c:7959
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7600
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7607
 #, c-format
 msgid "modend\n"
 msgstr ""
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7614
 msgid "rtnbeg\n"
 msgstr ""
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7618
 #, c-format
 msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7122
+#: vms-alpha.c:7627
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7638
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7648
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7147
+#: vms-alpha.c:7658
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7673
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7166
+#: vms-alpha.c:7685
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7691
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7707
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7723
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7727
 #, c-format
 msgid "    len: %u bits\n"
 msgstr ""
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7733
 #, c-format
 msgid "recend\n"
 msgstr ""
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7738
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7203
+#: vms-alpha.c:7744
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7750
 #, c-format
 msgid "enumend\n"
 msgstr ""
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7757
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7760
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7772
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7779
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7790
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7809
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr ""
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7818
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr ""
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7826
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr ""
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7834
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr ""
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7842
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr ""
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7849
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr ""
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7856
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr ""
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7863
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7869
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7876
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr ""
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7878
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7885
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr ""
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7887
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7893
 #, c-format
 msgid "delta pc +%-4d"
 msgstr ""
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7897
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr ""
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7902
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr ""
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7917
 #, c-format
 msgid "source (len: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7936
 #, c-format
 msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7362
+#: vms-alpha.c:7941
 #, c-format
 msgid "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7371
+#: vms-alpha.c:7953
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7969
 #, c-format
 msgid "   setfile %u\n"
 msgstr ""
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7976 vms-alpha.c:7983
 #, c-format
 msgid "   setrec %u\n"
 msgstr ""
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7990 vms-alpha.c:7997
 #, c-format
 msgid "   setlnum %u\n"
 msgstr ""
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:8004 vms-alpha.c:8011
 #, c-format
 msgid "   deflines %u\n"
 msgstr ""
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:8015
 #, c-format
 msgid "   formfeed\n"
 msgstr ""
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:8019
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr ""
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:8031
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr ""
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:8063
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr ""
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:8067
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7470
+#: vms-alpha.c:8071
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:8079
 msgid "executable"
 msgstr ""
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:8082
 msgid "linkable image"
 msgstr ""
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:8089
 #, c-format
 msgid " image type: %u (%s)"
 msgstr ""
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:8095
 msgid "native"
 msgstr ""
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:8098
 msgid "CLI"
 msgstr ""
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:8105
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ""
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:8112
 #, c-format
 msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7515
+#: vms-alpha.c:8116
 #, c-format
 msgid " fixup info rva: "
 msgstr ""
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:8118
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ""
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:8121
 #, c-format
 msgid ""
 "\n"
 " version array off: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7525
+#: vms-alpha.c:8126
 #, c-format
 msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7531
+#: vms-alpha.c:8132
 #, c-format
 msgid " linker flags: %08x:"
 msgstr ""
 
-#: vms-alpha.c:7562
+#: vms-alpha.c:8163
 #, c-format
 msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7568
+#: vms-alpha.c:8169
 #, c-format
 msgid " BPAGE: %u"
 msgstr ""
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:8176
 #, c-format
 msgid ", ext fixup offset: %u, no_opt psect off: %u"
 msgstr ""
 
-#: vms-alpha.c:7578
+#: vms-alpha.c:8179
 #, c-format
 msgid ", alias: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:8187
 #, c-format
 msgid "system version array information:\n"
 msgstr ""
 
-#: vms-alpha.c:7590
+#: vms-alpha.c:8191
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr ""
 
-#: vms-alpha.c:7600
+#: vms-alpha.c:8201
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr ""
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:8204
 #, c-format
 msgid "   %02u "
 msgstr ""
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:8208
 msgid "BASE_IMAGE       "
 msgstr ""
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:8211
 msgid "MEMORY_MANAGEMENT"
 msgstr ""
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:8214
 msgid "IO               "
 msgstr ""
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:8217
 msgid "FILES_VOLUMES    "
 msgstr ""
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:8220
 msgid "PROCESS_SCHED    "
 msgstr ""
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:8223
 msgid "SYSGEN           "
 msgstr ""
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:8226
 msgid "CLUSTERS_LOCKMGR "
 msgstr ""
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:8229
 msgid "LOGICAL_NAMES    "
 msgstr ""
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:8232
 msgid "SECURITY         "
 msgstr ""
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:8235
 msgid "IMAGE_ACTIVATOR  "
 msgstr ""
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:8238
 msgid "NETWORKS         "
 msgstr ""
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:8241
 msgid "COUNTERS         "
 msgstr ""
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:8244
 msgid "STABLE           "
 msgstr ""
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:8247
 msgid "MISC             "
 msgstr ""
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:8250
 msgid "CPU              "
 msgstr ""
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:8253
 msgid "VOLATILE         "
 msgstr ""
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:8256
 msgid "SHELL            "
 msgstr ""
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:8259
 msgid "POSIX            "
 msgstr ""
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:8262
 msgid "MULTI_PROCESSING "
 msgstr ""
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:8265
 msgid "GALAXY           "
 msgstr ""
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:8268
 msgid "*unknown*        "
 msgstr ""
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:8284 vms-alpha.c:8558
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr ""
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:8287
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr ""
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:8290
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7693
+#: vms-alpha.c:8294
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7697
+#: vms-alpha.c:8298
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:8302
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7705
+#: vms-alpha.c:8306
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7716
+#: vms-alpha.c:8317
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr ""
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:8321
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7723
+#: vms-alpha.c:8324
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:8326
 #, c-format
 msgid " link time        : %s\n"
 msgstr ""
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:8328
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:8330
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:8332
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:8342
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr ""
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:8346
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7751
+#: vms-alpha.c:8352
 #, c-format
 msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
 msgstr ""
 
-#: vms-alpha.c:7756
+#: vms-alpha.c:8357
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7761
+#: vms-alpha.c:8362
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7774
+#: vms-alpha.c:8375
 #, c-format
 msgid "cannot read EISD\n"
 msgstr ""
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:8386
 #, c-format
 msgid ""
 "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7793
+#: vms-alpha.c:8394
 #, c-format
 msgid " section: base: 0x%08x%08x size: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7798
+#: vms-alpha.c:8399
 #, c-format
 msgid " flags: 0x%04x"
 msgstr ""
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8437
 #, c-format
 msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
 msgstr ""
 
-#: vms-alpha.c:7842
+#: vms-alpha.c:8443
 msgid "NORMAL"
 msgstr ""
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8446
 msgid "SHRFXD"
 msgstr ""
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8449
 msgid "PRVFXD"
 msgstr ""
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8452
 msgid "SHRPIC"
 msgstr ""
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8455
 msgid "PRVPIC"
 msgstr ""
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8458
 msgid "USRSTACK"
 msgstr ""
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8464
 msgid ")\n"
 msgstr ""
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8467
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8477
 #, c-format
 msgid "cannot read DMT\n"
 msgstr ""
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8481
 #, c-format
 msgid "Debug module table:\n"
 msgstr ""
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8490
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr ""
 
-#: vms-alpha.c:7895
+#: vms-alpha.c:8496
 #, c-format
 msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
 msgstr ""
 
-#: vms-alpha.c:7905
+#: vms-alpha.c:8506
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr ""
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8510
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7922
+#: vms-alpha.c:8523
 #, c-format
 msgid "cannot read DST\n"
 msgstr ""
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8533
 #, c-format
 msgid "cannot read GST\n"
 msgstr ""
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8537
 #, c-format
 msgid "Global symbol table:\n"
 msgstr ""
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8564
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7969
+#: vms-alpha.c:8568
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8572
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8575
 #, c-format
 msgid "  size : %u\n"
 msgstr ""
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8577
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8582
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr ""
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8587
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr ""
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8592
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr ""
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8595
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr ""
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8599
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr ""
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8602
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr ""
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8605
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8607
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr ""
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8614
 #, c-format
 msgid " Shareable images:\n"
 msgstr ""
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8622
 #, c-format
 msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:8028
+#: vms-alpha.c:8629
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8635
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8641
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8043
+#: vms-alpha.c:8646
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8048
+#: vms-alpha.c:8651
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8053
+#: vms-alpha.c:8656
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8062
+#: vms-alpha.c:8664
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr ""
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8673
 #, c-format
 msgid "  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
 msgstr ""
 
 #. FIXME: we do not yet support relocatable link.  It is not obvious
 #. how to do it for debug infos.
-#: vms-alpha.c:8908
+#: vms-alpha.c:9550
 msgid "%P: relocatable link is not supported\n"
 msgstr ""
 
-#: vms-alpha.c:8979
+#: vms-alpha.c:9621
 #, c-format
 msgid "%P: multiple entry points: in modules %pB and %pB\n"
 msgstr ""
 
-#: vms-lib.c:1445
+#: vms-lib.c:1530
 #, c-format
 msgid "could not open shared image '%s' from '%s'"
 msgstr ""
 
-#: vms-misc.c:361
+#: vms-misc.c:374
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr ""
 
-#: vms-misc.c:366
+#: vms-misc.c:379
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr ""
 
-#: xcofflink.c:832
+#: xcofflink.c:889
 #, c-format
 msgid "%pB: XCOFF shared object when not producing XCOFF output"
 msgstr ""
 
-#: xcofflink.c:853
+#: xcofflink.c:910
 #, c-format
 msgid "%pB: dynamic object with no .loader section"
 msgstr ""
 
-#: xcofflink.c:1413
+#: xcofflink.c:1492
 #, c-format
 msgid "%pB: `%s' has line numbers but no enclosing section"
 msgstr ""
 
-#: xcofflink.c:1466
+#: xcofflink.c:1548
 #, c-format
 msgid "%pB: class %d symbol `%s' has no aux entries"
 msgstr ""
 
-#: xcofflink.c:1489
+#: xcofflink.c:1571
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized csect type %d"
 msgstr ""
 
-#: xcofflink.c:1502
+#: xcofflink.c:1584
 #, c-format
 msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
 msgstr ""
 
-#: xcofflink.c:1533
+#: xcofflink.c:1615
 #, c-format
-msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
+msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRIu64>"
 msgstr ""
 
-#: xcofflink.c:1680
+#: xcofflink.c:1750
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr ""
+
+#: xcofflink.c:1784
 #, c-format
 msgid "%pB: csect `%s' not in enclosing section"
 msgstr ""
 
-#: xcofflink.c:1788
+#: xcofflink.c:1893
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr ""
 
-#: xcofflink.c:2109
+#: xcofflink.c:2236
 #, c-format
 msgid "%pB: reloc %s:%<PRId64> not in csect"
 msgstr ""
 
-#: xcofflink.c:3196
+#: xcofflink.c:3345
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr ""
+
+#: xcofflink.c:3393
 #, c-format
 msgid "%s: no such symbol"
 msgstr ""
 
-#: xcofflink.c:3301
+#: xcofflink.c:3502
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr ""
 
-#: xcofflink.c:3680
+#: xcofflink.c:3850
 msgid "error: undefined symbol __rtinit"
 msgstr ""
 
-#: xcofflink.c:4060
+#: xcofflink.c:4863
+#, c-format
+msgid ""
+"%pB: Unable to find a stub csect in rangeof relocation at %#<PRIx64> "
+"targeting'%s'"
+msgstr ""
+
+#: xcofflink.c:4892
+#, c-format
+msgid "%pB: Cannot create stub entry '%s'"
+msgstr ""
+
+#: xcofflink.c:5012
+msgid "TOC overflow during stub generation; try -mminimal-toc when compiling"
+msgstr ""
+
+#: xcofflink.c:5080
 #, c-format
 msgid "%pB: loader reloc in unrecognized section `%s'"
 msgstr ""
 
-#: xcofflink.c:4072
+#: xcofflink.c:5092
 #, c-format
 msgid "%pB: `%s' in loader reloc but not loader sym"
 msgstr ""
 
-#: xcofflink.c:4089
+#: xcofflink.c:5109
 #, c-format
 msgid "%pB: loader reloc in read-only section %pA"
 msgstr ""
 
-#: xcofflink.c:5113
+#: xcofflink.c:6182
 #, c-format
 msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:5031
+#: xcofflink.c:7298
+#, c-format
+msgid "Unable to link input file: %s"
+msgstr ""
+
+#: xtensa-dynconfig.c:60
+msgid "Unable to load DLL."
+msgstr ""
+
+#: xtensa-dynconfig.c:86
+#, c-format
+msgid "%s is defined but could not be loaded: %s"
+msgstr ""
+
+#: xtensa-dynconfig.c:102
+#, c-format
+msgid "%s is loaded but symbol \"%s\" is not found: %s"
+msgstr ""
+
+#: xtensa-dynconfig.c:115
+#, c-format
+msgid "%s is defined but plugin support is disabled"
+msgstr ""
+
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2893
+#: elfnn-riscv.c:5548
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr ""
+
+#: elfnn-aarch64.c:5456
 #, c-format
 msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:5112
+#: elfnn-aarch64.c:5548
 #, c-format
 msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:5641
+#: elfnn-aarch64.c:5561
+#, c-format
+msgid ""
+"%pB: error: erratum 843419 immediate 0x%<PRIx64> out of range for ADR (input "
+"file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --"
+"fix-cortex-a53-843419=full instead"
+msgstr ""
+
+#: elfnn-aarch64.c:6096
 #, c-format
 msgid ""
 "%pB: relocation %s against symbol `%s' which may bind externally can not be "
 "used when making a shared object; recompile with -fPIC"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:5732
+#: elfnn-aarch64.c:6116
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr ""
+
+#: elfnn-aarch64.c:6204
+#: elfnn-kvx.c:2384
 #, c-format
 msgid ""
 "%pB: local symbol descriptor table be NULL when applying relocation %s "
 "against local symbol"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6830
+#: elfnn-aarch64.c:6317
+#: elfnn-aarch64.c:6354
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr ""
+
+#: elfnn-aarch64.c:7345
 msgid "too many GOT entries for -fpic, please recompile with -fPIC"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6858
+#: elfnn-aarch64.c:7373
 msgid ""
 "one possible cause of this error is that the symbol is being referenced in "
 "the indicated code as if it had a larger alignment than was declared where "
 "it was defined"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7443
+#: elfnn-aarch64.c:7940
 #, c-format
 msgid ""
 "%pB: relocation %s against `%s' can not be used when making a shared object"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:182
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:217
+#: elfnn-aarch64.c:9013
+#, c-format
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s'\n"
+msgstr ""
+
+#: elfnn-kvx.c:930
+msgid ""
+"%F%P: Could not assign '%pA' to an output section. Retry without --enable-"
+"non-contiguous-regions.\n"
+msgstr ""
+
+#: elfnn-kvx.c:2129
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation in section `%s'"
+msgstr ""
+
+#: elfnn-kvx.c:2853
+#, c-format
+msgid "%s: Bad ELF id: `%d'"
+msgstr ""
+
+#: elfnn-kvx.c:2908
+#, c-format
+msgid "%s: compiled as 32-bit object and %s is 64-bit"
+msgstr ""
+
+#: elfnn-kvx.c:2911
+#, c-format
+msgid "%s: compiled as 64-bit object and %s is 32-bit"
+msgstr ""
+
+#: elfnn-kvx.c:2913
+#, c-format
+msgid "%s: object size does not match that of target %s"
+msgstr ""
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elfnn-kvx.c:3001
+#, c-format
+msgid "Private flags = 0x%lx : "
+msgstr ""
+
+#: elfnn-kvx.c:3005
+#, c-format
+msgid "Coolidge (kv3) V1 64 bits"
+msgstr ""
+
+#: elfnn-kvx.c:3007
+#, c-format
+msgid "Coolidge (kv3) V2 64 bits"
+msgstr ""
+
+#: elfnn-kvx.c:3009
+#, c-format
+msgid "Coolidge (kv4) V1 64 bits"
+msgstr ""
+
+#: elfnn-kvx.c:3014
+#, c-format
+msgid "Coolidge (kv3) V1 32 bits"
+msgstr ""
+
+#: elfnn-kvx.c:3016
+#, c-format
+msgid "Coolidge (kv3) V2 32 bits"
+msgstr ""
+
+#: elfnn-kvx.c:3018
+#, c-format
+msgid "Coolidge (kv4) V1 32 bits"
+msgstr ""
+
+#: elfnn-kvx.c:3854
+#, c-format
+msgid "relocation against `%s' has faulty GOT type "
+msgstr ""
+
+#: elfnn-loongarch.c:169
+#: elfnn-loongarch.c:221
+#, c-format
+msgid "%#<PRIx64> invaild imm"
+msgstr ""
+
+#: elfnn-loongarch.c:403
+#: elfnn-riscv.c:4028
+#, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+"  target emulation `%s' does not match `%s'"
+msgstr ""
+
+#: elfnn-loongarch.c:458
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr ""
+
+#: elfnn-loongarch.c:600
+msgid "Internal error: unreachable."
+msgstr ""
+
+#: elfnn-loongarch.c:4339
+#: elfnn-riscv.c:4789
+#, c-format
+msgid ""
+"%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-"
+"byte boundary, but only %<PRId64> present"
+msgstr ""
+
+#: elfnn-riscv.c:326
+#: elfnn-riscv.c:361
 #, c-format
 msgid "%pB: warning: RVE PLT generation not supported"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2311
-msgid "%X%P: internal error: out of range error\n"
+#: elfnn-riscv.c:919
+#, c-format
+msgid ""
+"%pB: relocation %s against absolute symbol `%s' can not be used when making "
+"a shared object"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2315
-msgid "%X%P: internal error: unsupported relocation error\n"
+#: elfnn-riscv.c:961
+#, c-format
+msgid ""
+"%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 "
+"when making a shared object"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2325
-msgid "%X%P: internal error: unknown error\n"
+#: elfnn-riscv.c:1847
+#, c-format
+msgid ""
+"final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds "
+"available space"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2711
+#: elfnn-riscv.c:2082
 #, c-format
-msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d"
+msgid "%pcrel_lo missing matching %pcrel_hi"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2729
+#: elfnn-riscv.c:2085
+#, c-format
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr ""
+
+#. Check the overflow when adding reloc addend.
+#: elfnn-riscv.c:2090
 #, c-format
 msgid ""
-"error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but "
-"got '%s'."
+"%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> "
+"without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2773
+#: elfnn-riscv.c:2098
 #, c-format
-msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'."
+msgid "%pcrel_lo overflow with an addend"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2921
+#: elfnn-riscv.c:2549
 #, c-format
-msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)."
+msgid ""
+"%pB: warning: R_RISCV_SUB_ULEB128 with non-zero addend, please rebuild by "
+"binutils 2.42 or up"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2946
+#: elfnn-riscv.c:2629
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr ""
+
+#. PR 28509, when generating the shared object, these
+#. referenced symbols may bind externally, which means
+#. they will be exported to the dynamic symbol table,
+#. and are preemptible by default.  These symbols cannot
+#. be referenced by the non-pic relocations, like
+#. R_RISCV_JAL and R_RISCV_RVC_JUMP relocations.
+#.
+#. However, consider that linker may relax the R_RISCV_CALL
+#. relocations to R_RISCV_JAL or R_RISCV_RVC_JUMP, if
+#. these relocations are relocated to the plt entries,
+#. then we won't report error for them.
+#.
+#. Perhaps we also need the similar checks for the
+#. R_RISCV_BRANCH and R_RISCV_RVC_BRANCH relocations.
+#: elfnn-riscv.c:2730
 #, c-format
-msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)."
+msgid ""
+"%%X%%P: relocation %s against `%s' which may bind externally can not be used "
+"when making a shared object; recompile with -fPIC\n"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2954
+#: elfnn-riscv.c:2812
 #, c-format
-msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation."
+msgid "%pcrel_lo section symbol with an addend"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3039
+#: elfnn-riscv.c:3022
 #, c-format
-msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3055
+#: elfnn-riscv.c:3057
+msgid "%X%P: internal error: out of range error\n"
+msgstr ""
+
+#: elfnn-riscv.c:3062
+msgid "%X%P: internal error: unsupported relocation error\n"
+msgstr ""
+
+#: elfnn-riscv.c:3068
+msgid "dangerous relocation error"
+msgstr ""
+
+#: elfnn-riscv.c:3074
+msgid "%X%P: internal error: unknown error\n"
+msgstr ""
+
+#: elfnn-riscv.c:3620
+#, c-format
+msgid ""
+"error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' "
+"but got '%s'"
+msgstr ""
+
+#: elfnn-riscv.c:3663
+#, c-format
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr ""
+
+#: elfnn-riscv.c:3800
+#, c-format
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr ""
+
+#: elfnn-riscv.c:3820
+#, c-format
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr ""
+
+#: elfnn-riscv.c:3828
+#, c-format
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr ""
+
+#: elfnn-riscv.c:3942
 #, c-format
 msgid ""
-"error: %pB use %u-byte stack aligned but the output use %u-byte stack "
-"aligned."
+"warning: %pB use privileged spec version %u.%u.%u but the output use version "
+"%u.%u.%u"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3096
+#: elfnn-riscv.c:3959
+msgid ""
+"warning: privileged spec version 1.9.1 can not be linked with other spec "
+"versions"
+msgstr ""
+
+#: elfnn-riscv.c:3987
 #, c-format
 msgid ""
-"%pB: ABI is incompatible with that of the selected emulation:\n"
-"  target emulation `%s' does not match `%s'"
+"error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3119
+#: elfnn-riscv.c:4084
 #, c-format
 msgid "%pB: can't link %s modules with %s modules"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3129
+#: elfnn-riscv.c:4094
 #, c-format
 msgid "%pB: can't link RVE with other target"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3630
+#: elfnn-riscv.c:961
 #, c-format
 msgid ""
-"%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-"
-"byte boundary, but only %<PRId64> present"
+"%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 "
+"when making a shared object"
 msgstr ""
 
-#: peigen.c:157 pepigen.c:157 pex64igen.c:157
+#: peXXigen.c:161 peXXigen.c:161
 #, c-format
 msgid "%pB: unable to find name for empty section"
 msgstr ""
 
-#: peigen.c:183 pepigen.c:183 pex64igen.c:183
+#: peXXigen.c:188 peXXigen.c:188
 #, c-format
 msgid "%pB: out of memory creating name for empty section"
 msgstr ""
 
-#: peigen.c:194 pepigen.c:194 pex64igen.c:194
+#: peXXigen.c:199 peXXigen.c:199
 #, c-format
 msgid "%pB: unable to create fake empty section"
 msgstr ""
 
-#: peigen.c:532 pepigen.c:532 pex64igen.c:532
+#: peXXigen.c:924 peXXigen.c:924
 #, c-format
-msgid ""
-"%pB: aout header specifies an invalid number of data-directory entries: %ld"
+msgid "%pB:%.8s: section below image base"
 msgstr ""
 
-#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091
+#: peXXigen.c:929 peXXigen.c:929
+#, c-format
+msgid "%pB:%.8s: RVA truncated"
+msgstr ""
+
+#: peXXigen.c:1060 peXXigen.c:1060
 #, c-format
 msgid "%pB: line number overflow: 0x%lx > 0xffff"
 msgstr ""
 
-#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235
+#: peXXigen.c:1226 peXXigen.c:1226
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr ""
 
-#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236
+#: peXXigen.c:1227 peXXigen.c:1227
 msgid "Import Directory [parts of .idata]"
 msgstr ""
 
-#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237
+#: peXXigen.c:1228 peXXigen.c:1228
 msgid "Resource Directory [.rsrc]"
 msgstr ""
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1229 peXXigen.c:1229
 msgid "Exception Directory [.pdata]"
 msgstr ""
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1230 peXXigen.c:1230
 msgid "Security Directory"
 msgstr ""
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1231 peXXigen.c:1231
 msgid "Base Relocation Directory [.reloc]"
 msgstr ""
 
-#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241
+#: peXXigen.c:1232 peXXigen.c:1232
 msgid "Debug Directory"
 msgstr ""
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1233 peXXigen.c:1233
 msgid "Description Directory"
 msgstr ""
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1234 peXXigen.c:1234
 msgid "Special Directory"
 msgstr ""
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1235 peXXigen.c:1235
 msgid "Thread Storage Directory [.tls]"
 msgstr ""
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1236 peXXigen.c:1236
 msgid "Load Configuration Directory"
 msgstr ""
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1237 peXXigen.c:1237
 msgid "Bound Import Directory"
 msgstr ""
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1238 peXXigen.c:1238
 msgid "Import Address Table Directory"
 msgstr ""
 
-#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248
+#: peXXigen.c:1239 peXXigen.c:1239
 msgid "Delay Import Directory"
 msgstr ""
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1240 peXXigen.c:1240
 msgid "CLR Runtime Header"
 msgstr ""
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1241 peXXigen.c:1241
 msgid "Reserved"
 msgstr ""
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1306 peXXigen.c:1306
 #, c-format
 msgid ""
 "\n"
 "There is an import table, but the section containing it could not be found\n"
 msgstr ""
 
-#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316
+#: peXXigen.c:1312 peXXigen.c:1312
 #, c-format
 msgid ""
 "\n"
 "There is an import table in %s, but that section has no contents\n"
 msgstr ""
 
-#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323
+#: peXXigen.c:1319 peXXigen.c:1319
 #, c-format
 msgid ""
 "\n"
 "There is an import table in %s at 0x%lx\n"
 msgstr ""
 
-#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365
-#, c-format
-msgid ""
-"\n"
-"Function descriptor located at the start address: %04lx\n"
-msgstr ""
-
-#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369
-#, c-format
-msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
-msgstr ""
-
-#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377
-#, c-format
-msgid ""
-"\n"
-"No reldata section! Function descriptor not decoded.\n"
-msgstr ""
-
-#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382
+#: peXXigen.c:1325 peXXigen.c:1325
 #, c-format
 msgid ""
 "\n"
 "The Import Tables (interpreted %s section contents)\n"
 msgstr ""
 
-#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385
+#: peXXigen.c:1328 peXXigen.c:1328
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
 "                 Table   Stamp     Chain    Name      Thunk\n"
 msgstr ""
 
-#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435
+#: peXXigen.c:1377 peXXigen.c:1377
 #, c-format
 msgid ""
 "\n"
 "\tDLL Name: %.*s\n"
 msgstr ""
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1393 peXXigen.c:1393
 #, c-format
 msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
 msgstr ""
 
-#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476
+#: peXXigen.c:1418 peXXigen.c:1418
 #, c-format
 msgid ""
 "\n"
 "There is a first thunk, but the section containing it could not be found\n"
 msgstr ""
 
-#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520
-#: pex64igen.c:1559
+#: peXXigen.c:1465
+#: peXXigen.c:1504 peXXigen.c:1465
+#: peXXigen.c:1504
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr ""
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1597 peXXigen.c:1597
 #, c-format
 msgid ""
 "\n"
 "There is an export table, but the section containing it could not be found\n"
 msgstr ""
 
-#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658
+#: peXXigen.c:1610 peXXigen.c:1610
 #, c-format
 msgid ""
 "\n"
-"There is an export table in %s, but that section has no contents\n"
-msgstr ""
-
-#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669
-#, c-format
-msgid ""
-"\n"
-"There is an export table in %s, but it does not fit into that section\n"
+"There is an export table in %s, but it is too small (%d)\n"
 msgstr ""
 
-#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680
+#: peXXigen.c:1618 peXXigen.c:1618
 #, c-format
 msgid ""
 "\n"
-"There is an export table in %s, but it is too small (%d)\n"
+"There is an export table in %s, but contents cannot be read\n"
 msgstr ""
 
-#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686
+#: peXXigen.c:1624 peXXigen.c:1624
 #, c-format
 msgid ""
 "\n"
 "There is an export table in %s at 0x%lx\n"
 msgstr ""
 
-#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714
+#: peXXigen.c:1655 peXXigen.c:1655
 #, c-format
 msgid ""
 "\n"
@@ -8387,162 +9712,149 @@ msgid ""
 "\n"
 msgstr ""
 
-#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718
+#: peXXigen.c:1659 peXXigen.c:1659
 #, c-format
 msgid "Export Flags \t\t\t%lx\n"
 msgstr ""
 
-#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721
+#: peXXigen.c:1662 peXXigen.c:1662
 #, c-format
 msgid "Time/Date stamp \t\t%lx\n"
 msgstr ""
 
-#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725
+#: peXXigen.c:1666 peXXigen.c:1666
 #, c-format
 msgid "Major/Minor \t\t\t%d/%d\n"
 msgstr ""
 
-#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728
+#: peXXigen.c:1669 peXXigen.c:1669
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr ""
 
-#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739
+#: peXXigen.c:1680 peXXigen.c:1680
 #, c-format
 msgid "Ordinal Base \t\t\t%ld\n"
 msgstr ""
 
-#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742
+#: peXXigen.c:1683 peXXigen.c:1683
 #, c-format
 msgid "Number in:\n"
 msgstr ""
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1686 peXXigen.c:1686
 #, c-format
 msgid "\tExport Address Table \t\t%08lx\n"
 msgstr ""
 
-#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749
+#: peXXigen.c:1690 peXXigen.c:1690
 #, c-format
 msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
 msgstr ""
 
-#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752
+#: peXXigen.c:1693 peXXigen.c:1693
 #, c-format
 msgid "Table Addresses\n"
 msgstr ""
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1696 peXXigen.c:1696
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr ""
 
-#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760
+#: peXXigen.c:1701 peXXigen.c:1701
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr ""
 
-#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765
+#: peXXigen.c:1706 peXXigen.c:1706
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr ""
 
-#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779
+#: peXXigen.c:1720 peXXigen.c:1720
 #, c-format
 msgid ""
 "\n"
 "Export Address Table -- Ordinal Base %ld\n"
 msgstr ""
 
-#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788
+#: peXXigen.c:1729 peXXigen.c:1729
 #, c-format
 msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr ""
 
-#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807
+#: peXXigen.c:1748 peXXigen.c:1748
 msgid "Forwarder RVA"
 msgstr ""
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1760 peXXigen.c:1760
 msgid "Export RVA"
 msgstr ""
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1767 peXXigen.c:1767
 #, c-format
 msgid ""
 "\n"
 "[Ordinal/Name Pointer] Table\n"
 msgstr ""
 
-#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834
+#: peXXigen.c:1775 peXXigen.c:1775
 #, c-format
 msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr ""
 
-#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841
+#: peXXigen.c:1782 peXXigen.c:1782
 #, c-format
 msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr ""
 
-#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855
+#: peXXigen.c:1796 peXXigen.c:1796
 #, c-format
 msgid "\t[%4ld] <corrupt offset: %lx>\n"
 msgstr ""
 
-#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909
-#: pex64igen.c:2106
+#: peXXigen.c:1851
+#: peXXigen.c:2021 peXXigen.c:1851
+#: peXXigen.c:2021
 #, c-format
 msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
 msgstr ""
 
-#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913
-#: pex64igen.c:2110
+#: peXXigen.c:1855
+#: peXXigen.c:2025 peXXigen.c:1855
+#: peXXigen.c:2025
 #, c-format
 msgid ""
 "\n"
 "The Function Table (interpreted .pdata section contents)\n"
 msgstr ""
 
-#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916
+#: peXXigen.c:1858 peXXigen.c:1858
 #, c-format
 msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
 msgstr ""
 
-#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918
+#: peXXigen.c:1860 peXXigen.c:1860
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
 "     \t\tAddress  Address  Handler  Data     Address    Mask\n"
 msgstr ""
 
-#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931
+#: peXXigen.c:1873 peXXigen.c:1873
 #, c-format
 msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
 msgstr ""
 
-#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001
-#, c-format
-msgid " Register save millicode"
-msgstr ""
-
-#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004
-#, c-format
-msgid " Register restore millicode"
-msgstr ""
-
-#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007
-#, c-format
-msgid " Glue code sequence"
-msgstr ""
-
-#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112
+#: peXXigen.c:2027 peXXigen.c:2027
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
 "     \t\tAddress  Length   Length   32b exc  Handler   Data\n"
 msgstr ""
 
-#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234
+#: peXXigen.c:2152 peXXigen.c:2152
 #, c-format
 msgid ""
 "\n"
@@ -8550,86 +9862,86 @@ msgid ""
 "PE File Base Relocations (interpreted .reloc section contents)\n"
 msgstr ""
 
-#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264
+#: peXXigen.c:2181 peXXigen.c:2181
 #, c-format
 msgid ""
 "\n"
 "Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"
 msgstr ""
 
-#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282
+#: peXXigen.c:2199 peXXigen.c:2199
 #, c-format
 msgid "\treloc %4d offset %4x [%4lx] %s"
 msgstr ""
 
-#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343
+#: peXXigen.c:2260 peXXigen.c:2260
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr ""
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2284 peXXigen.c:2284
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr ""
 
-#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387
+#: peXXigen.c:2304 peXXigen.c:2304
 #, c-format
 msgid "<corrupt string length: %#x>\n"
 msgstr ""
 
-#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397
+#: peXXigen.c:2314 peXXigen.c:2314
 #, c-format
 msgid "<corrupt string offset: %#lx>\n"
 msgstr ""
 
-#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402
+#: peXXigen.c:2319 peXXigen.c:2319
 #, c-format
 msgid "ID: %#08lx"
 msgstr ""
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2322 peXXigen.c:2322
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ""
 
-#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427
+#: peXXigen.c:2344 peXXigen.c:2344
 #, c-format
 msgid "%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
 msgstr ""
 
-#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469
+#: peXXigen.c:2386 peXXigen.c:2386
 #, c-format
 msgid "<unknown directory type: %d>\n"
 msgstr ""
 
-#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477
+#: peXXigen.c:2394 peXXigen.c:2394
 #, c-format
 msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
 msgstr ""
 
-#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566
+#: peXXigen.c:2482 peXXigen.c:2482
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr ""
 
-#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590
+#: peXXigen.c:2506 peXXigen.c:2506
 #, c-format
 msgid ""
 "\n"
 "WARNING: Extra data in .rsrc section - it will be ignored by Windows:\n"
 msgstr ""
 
-#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596
+#: peXXigen.c:2512 peXXigen.c:2512
 #, c-format
 msgid " String table starts at offset: %#03x\n"
 msgstr ""
 
-#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599
+#: peXXigen.c:2515 peXXigen.c:2515
 #, c-format
 msgid " Resources start at offset: %#03x\n"
 msgstr ""
 
-#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651
+#: peXXigen.c:2572 peXXigen.c:2572
 #, c-format
 msgid ""
 "\n"
@@ -8637,14 +9949,14 @@ msgid ""
 "found\n"
 msgstr ""
 
-#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657
+#: peXXigen.c:2578 peXXigen.c:2578
 #, c-format
 msgid ""
 "\n"
 "There is a debug directory in %s, but that section has no contents\n"
 msgstr ""
 
-#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664
+#: peXXigen.c:2585 peXXigen.c:2585
 #, c-format
 msgid ""
 "\n"
@@ -8652,7 +9964,7 @@ msgid ""
 "small\n"
 msgstr ""
 
-#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669
+#: peXXigen.c:2590 peXXigen.c:2590
 #, c-format
 msgid ""
 "\n"
@@ -8660,23 +9972,23 @@ msgid ""
 "\n"
 msgstr ""
 
-#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676
+#: peXXigen.c:2597 peXXigen.c:2597
 #, c-format
 msgid ""
 "The debug data size field in the data directory is too big for the section"
 msgstr ""
 
-#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681
+#: peXXigen.c:2602 peXXigen.c:2602
 #, c-format
 msgid "Type                Size     Rva      Offset\n"
 msgstr ""
 
-#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729
+#: peXXigen.c:2650 peXXigen.c:2650
 #, c-format
-msgid "(format %c%c%c%c signature %s age %ld)\n"
+msgid "(format %c%c%c%c signature %s age %ld pdb %s)\n"
 msgstr ""
 
-#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737
+#: peXXigen.c:2662 peXXigen.c:2662
 #, c-format
 msgid ""
 "The debug directory size is not a multiple of the debug directory entry "
@@ -8686,99 +9998,100 @@ msgstr ""
 #. The MS dumpbin program reportedly ands with 0xff0f before
 #. printing the characteristics field.  Not sure why.  No reason to
 #. emulate it here.
-#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757
+#: peXXigen.c:2746 peXXigen.c:2746
 #, c-format
 msgid ""
 "\n"
 "Characteristics 0x%x\n"
 msgstr ""
 
-#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993
+#: peXXigen.c:3031 peXXigen.c:3031
 #, c-format
 msgid ""
-"%pB: Data Directory size (%lx) exceeds space left in section (%<PRIx64>)"
+"%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary "
+"at %<PRIx64>"
 msgstr ""
 
-#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025
+#: peXXigen.c:3072 peXXigen.c:3072
 msgid "failed to update file offsets in debug directory"
 msgstr ""
 
-#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033
+#: peXXigen.c:3081 peXXigen.c:3081
 #, c-format
 msgid "%pB: failed to read debug data section"
 msgstr ""
 
-#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849
+#: peXXigen.c:3884 peXXigen.c:3884
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
 msgstr ""
 
-#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984
+#: peXXigen.c:4019 peXXigen.c:4019
 msgid ".rsrc merge failure: multiple non-default manifests"
 msgstr ""
 
-#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002
+#: peXXigen.c:4037 peXXigen.c:4037
 msgid ".rsrc merge failure: a directory matches a leaf"
 msgstr ""
 
-#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044
+#: peXXigen.c:4079 peXXigen.c:4079
 msgid ".rsrc merge failure: duplicate leaf"
 msgstr ""
 
-#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046
+#: peXXigen.c:4084 peXXigen.c:4084
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
 msgstr ""
 
-#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112
+#: peXXigen.c:4151 peXXigen.c:4151
 msgid ".rsrc merge failure: dirs with differing characteristics"
 msgstr ""
 
-#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119
+#: peXXigen.c:4158 peXXigen.c:4158
 msgid ".rsrc merge failure: differing directory versions"
 msgstr ""
 
 #. Corrupted .rsrc section - cannot merge.
-#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236
+#: peXXigen.c:4270 peXXigen.c:4270
 #, c-format
 msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
 msgstr ""
 
-#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244
+#: peXXigen.c:4278 peXXigen.c:4278
 #, c-format
 msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
 msgstr ""
 
-#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383
+#: peXXigen.c:4417 peXXigen.c:4417
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
 msgstr ""
 
-#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403
+#: peXXigen.c:4437 peXXigen.c:4437
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
 msgstr ""
 
-#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424
+#: peXXigen.c:4458 peXXigen.c:4458
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
 msgstr ""
 
-#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444
+#: peXXigen.c:4478 peXXigen.c:4478
 #, c-format
 msgid ""
 "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because ."
 "idata$6 is missing"
 msgstr ""
 
-#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486
+#: peXXigen.c:4520 peXXigen.c:4520
 #, c-format
 msgid ""
 "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because ."
 "idata$6 is missing"
 msgstr ""
 
-#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511
+#: peXXigen.c:4545 peXXigen.c:4545
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
 msgstr ""
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/BLD-POTFILES.in ./bfd/po/BLD-POTFILES.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/BLD-POTFILES.in	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/BLD-POTFILES.in	2024-02-01 01:47:14.000000000 +0000
@@ -1,13 +1,19 @@
-bfd_stdint.h
 bfdver.h
 elf32-aarch64.c
 elf32-ia64.c
+elf32-kvx.c
+elf32-loongarch.c
 elf32-riscv.c
 elf32-target.h
 elf64-aarch64.c
 elf64-ia64.c
+elf64-kvx.c
+elf64-loongarch.c
 elf64-riscv.c
 elf64-target.h
+pe-aarch64igen.c
+pe-loongarch64igen.c
+pe-riscv64igen.c
 peigen.c
 pepigen.c
 pex64igen.c
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/es.gmo ./bfd/po/es.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/es.gmo	2019-12-11 01:53:30.000000000 +0000
+++ ./bfd/po/es.gmo	2024-02-01 01:52:32.000000000 +0000
@@ -1046,7 +1046,7 @@ Emplee opciÃ³n gcc -mrestrict-it para ge
 %B: ningÃºn sÃ­mbolo encontrado para importar biblioteca%B: encontradas secciones agrupadas no vÃ¡lidas%B: cÃ³digo que no es pic con reubicaciÃ³n imm contra el sÃ­mbolo dinÃ¡mico Â«%sÂ»%B: Ã­ndice simbÃ³licos distinto de cero (%#Lx) para desplazamiento %#Lx en la secciÃ³n `%A' cuando el fichero objeto no tiene ningÃºn segmento simbÃ³lico%B: sin suficiente memoria para reservar espacio para sÃ­mbolos %#Lx de tamaÃ±o %#Lx%B: tamaÃ±o del objeto no coincide con el tamaÃ±o objetivo %B%B: memoria agotada al crear nombre para secciÃ³n vacÃ­a%B: memoria agotada en propiedad _bfd_elf_get_property%B: tamaÃ±o de pÃ¡gina es demasiado grande (0x%x)%B: reubicaciÃ³n relativa a pc contra el sÃ­mbolo dinÃ¡mico %s%B: reubicaciÃ³n relativa a pc contra el sÃ­mbolo dÃ©bil sin definir %s%B: complementos requeridos para manipular objeto lto%B: Â¿Compilado probablemente sin -fPIC?%B: el sÃ­mbolo protegido Â«%sÂ» no estÃ¡ definido%B: reubicaciÃ³n registrada frente sÃ­mbolo no registrado: %s en %A%B: reubicaciÃ³n registrada frente sÃ­mbolo no registrado: (desconocido) en %A%B: reloc %s:%Ld no contenido en csect%B: reubicaciÃ³n contra un Ã­ndice de sÃ­mbolo inexistente: %ld%B: enlace reubicable desde %s hasta %s sin apoyo%B: reubicaciÃ³n %s frente a %s%s Â«%sÂ» no puede emplearse cuando se crea %s%s%B: reubicaciÃ³n %s frente al sÃ­mbolo STT_GNU_IFUNC Â«%sÂ» tiene aÃ±adido algo distinto de cero: %Ld%B: reubicaciÃ³n %s frente al sÃ­mbolo STT_GNU_IFUNC Â«%sÂ» no es manipulada por %s%B: reubicaciÃ³n %s frente al sÃ­mbolo STT_GNU_IFUNC Â«%sÂ» no estÃ¡ apoyado%B: reubicaciÃ³n %s frente a Â«%sÂ» no puede emplearse cuando se crea un objeto compartido%B: reubicaciÃ³n %s frente a Â«%sÂ» no puede emplearse cuando se crea un objeto compartido; recompile con -fPIC%B: reubicaciÃ³n %s frente sÃ­mbolos externos o indefinidos Â«%sÂ» pueden no ser empleados cuando hacen un %s; recompile con -fPIC%B: reubicaciÃ³n %s frente al sÃ­mbolo Â«%sÂ» no se admite en modo x32%B: reubicaciÃ³n %s frente al sÃ­mbolo Â«%sÂ» el cual quizÃ¡ externamente enlazado no puede ser empleada cuando se cra un objeto compartido; recompile con -fPIC%B: reubicaciÃ³n %s no puede utilizarse cuando se crea un objeto compartido; recompile con -fPIC%B: reubicaciÃ³n %s no puede utilizarse cuando se crea un objeto compartido%B: reubicaciÃ³n R_386_GOTOFF contra %s protegida Â«%sÂ» no puede ser utilizada cuando crea un objeto compartido%B: no se puede usar la reubicaciÃ³n R_386_GOTOFF contra %s indefinida Â«%sÂ» cuando se hace un objeto compartido%B: reubicaciÃ³n R_X86_64_GOTOFF64 contra %s protegida Â«%sÂ» puede no ser empleada cuando crea un objeto compartido%B: no se puede usar la reubicaciÃ³n R_X86_64_GOTOFF64  contra %s indefinida Â«%sÂ» cuando se hace un objeto compartido%B: la reubicaciÃ³n en `%A+%#Lx' referencia al sÃ­mbolo Â«%sÂ» con adiciÃ³n sin cero%B: el tamaÃ±o de reubicaciÃ³n no coincide en %B secciÃ³n %A%B: reubicaciones en la secciÃ³n `%A', pero no tiene contenidos%B: secciÃ³n %A lma %#lx ajustado a %#Lx%B: secciÃ³n %A: desbordamiento superior de segmento de cadenas en el desplazamiento %ld%B: la secciÃ³n `%A' no se puede asignar en el segmento %d%B: nÃºmero de entrada de grupo seccional %u estÃ¡ corrupto%B: sh_link [%d] en la secciÃ³n `%A', es incorrecto%B: sh_link de la secciÃ³n `%A' apunta a la secciÃ³n descartada `%A' de `%B'%B: sh_link de la secciÃ³n `%A' apunta a la secciÃ³n quitada `%A' de `%B'%B: segmento de datos short sobredesbordado (%#Lx >= 0x400000)%B: el tamaÃ±o del campo es cero en el encabezado del Formato de ImportaciÃ³n de Bibliotecas%B: compostura de especulaciÃ³n al sÃ­mbolo dinÃ¡mico %s%B: tamaÃ±o de pila especificado y %s establecido%B: cadena que no termina en null en el fichero objeto ILF.%B: cadena muy larga (%ld caracteres, mÃ¡x 65535)%B: apoyo para dinÃ¡mico local no implementado%B: el sÃ­mbolo Â«%sÂ» tiene un tipo csect %d que no se reconoce%B: el sÃ­mbolo Â«%sÂ» tiene smclas %d que no se reconoce%B: el sÃ­mbolo Â«%sÂ» se requiere pero no estÃ¡ presente%B: tomando la direcciÃ³n de funciÃ³n protegida Â«%sÂ» no puede ser hecha cuando crea una biblioteca compartida%B: el objetivo (%s) de una reubicaciÃ³n %s estÃ¡ en la secciÃ³n de salida equivocada (%s)%B: demasiados registros iniciados: longitud seccional %Ld%B: Demasiadas secciones (%d)%B: demasiadas secciones: %u%B: reubicaciÃ³n tp-relativa contra el sÃ­mbolo dinÃ¡mico %s%B: incapaz de crear secciÃ³n vacÃ­a simulada%B: no se puede llenar DataDictionary[12] porque falta .idata$5%B: no se puede llenar DataDictionary[1] porque falta .idata$2%B: no se puede llenar DataDictionary[1] porque falta .idata$4%B: no se puede llenar DataDictionary[9] porque falta __tls_used%B: no se puede llenar DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] porque falta .idata$6%B: no se puede llenar DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] porque falta .idata$6%B: no se puede encontrar el pegamento ARM Â«%sÂ» para Â«%sÂ»%B: incapaz de encontrar chapa STM32L4XX Â«%sÂ»%B: no se puede encontrar el pegamento THUMB Â«%sÂ» para Â«%sÂ»%B: no se puede encontrar la chapa de VFP11 Â«%sÂ»%B: no se puede encontrar nombre para secciÃ³n vacÃ­a%B: no se puede obtener la secciÃ³n %A descomprimida%B: incapaz de inicializar estado compresivo para secciÃ³n %s%B: incapaz de inicializar estado descompresivo para secciÃ³n %s%B: incapaz de cargar nombre de secciÃ³n COMDAT%B: referencia sin definir al sÃ­mbolo Â«%sÂ»%B: sÃ­mbolo Â«%sÂ» sin definir en la secciÃ³n .opd%B: sÃ­mbolo sin definir en la reubicaciÃ³n R_PPC64_TOCSAVE%B: tipo ATN %Ld inesperado en la parte externa%B: redefiniciÃ³n inesperada del sÃ­mbolo con versiÃ³n indirecta Â«%sÂ»%B: tipo de reubicaciÃ³n %u inesperado en la secciÃ³n .opd%B: tipo inesperado despuÃ©s de ATN%B: reubicaciÃ³n dinÃ¡mica sin manipular contra %s%B: %s sin implementar
 %B: registro ATI %u sin implementar para el sÃ­mbolo %u%B: orden de carga desconocida %#x%B: tipo de reubicaciÃ³n %d desconocido%B: tipo de reubicaciÃ³n %d desconocida para el sÃ­mbolo %s%B: tipo desconocido [%#x] secciÃ³n Â«%sÂ»%B: tipo desconocido [%#x] secciÃ³n Â«%sÂ» en grupo [%A]%B: tipo de reubicaciÃ³n %d desconocida/no admitida%B: nÃºmero reubicante Alpha no reconocido: %d%B: nÃºmero reubicante CR16 no reconocido: %d%B: nÃºmero reubicante CRX no reconocido: %d%B: nÃºmero reubicante I370 no reconocido: %d%B: nÃºmero reubicante MCore no reconocido: %d%B: nÃºmero reubicante MN10300 no reconocido: %d%B: nÃºmero reubicante MicroBlaze no reconocido: %d%B: nÃºmero reubicante PPC no reconocido: %d%B: nÃºmero reubicante PicoJava no reconocido: %d%B: nÃºmero reubicante SH no reconocido: %d%B: nÃºmero reubicante SPU no reconocido: %d%B: nÃºmero reubicante VAX no reconocido: %d%B: reubicaciÃ³n no reconocida (%#x) en la secciÃ³n Â«%AÂ»%B: sÃ­mbolo Â«%sÂ» marcas 0x%x no reconocido%B: llamada no-PIC a IFUNC Â«%sÂ» sin apoyo%B: tipo de reubicaciÃ³n %d no admitido%B: no se admite el tipo de reubicaciÃ³n %i
 %B: no se admite el tipo de reubicaciÃ³n %s%B: tipo de reubicaciÃ³n 0x%02x no admitido%B: tipo de reubicaciÃ³n no admitida: ALPHA_R_GPRELHIGH%B: tipo de reubicaciÃ³n no admitida: ALPHA_R_GPRELLOW%B: secuencia de anchura de carÃ¡cter 0x%02X 0x%02X tras nombre simbÃ³lico iniciada con Â«%sÂ» no admitida
-%B: emplea %s instrucciones mientras que mÃ³dulos anteriores emplean %s instrucciones%B: se usan sÃ­mbolos _-prefijo, pero escribiÃ©ndo el fichero con sÃ­mbolos sin prefijo%B: emplea diferentes campos e_flags (%#x) que mÃ³dulos (%#x) anteriores%B: emplea campos e_flags (%#x) desconocidos diferentes a aquellos de los mÃ³dulos previos (%#x)%B: utiliza instrucciones las cuales son incompatibles con instrucciones utilizadas en mÃ³dulos previos%B: se usan sÃ­mbolos sin prefijo, pero se escribe el fichero con sÃ­mbolos con _-prefijo%B: contador de versiÃ³n (%Ld) no coincide con la cuenta simbÃ³lica (%ld)%B: no se encuentra la versiÃ³n del nodo para el sÃ­mbolo %s%B: visibilidad de sÃ­mbolo Â«%sÂ» ha modificado.%B: aviso de fichero core truncado%B: aviso: %A: desbordamiento de nÃºmero de lÃ­nea: %#x > 0xffff%B: aviso: %s apunta a reloc no reconocido en %#Lx%B: aviso: reubicaciÃ³n %s frente a sÃ­mbolo Â«%sÂ» desde secciÃ³n %A%B: aviso: reubicaciÃ³n %s a %#Lx desde secciÃ³n %A%B: aviso: %s: desbordamiento de nÃºmero de lÃ­nea: 0x%lx > 0xffff%B: aviso: el sÃ­mbolo COMDAT Â«%sÂ» no coincide con el nombre seccional Â«%sÂ»%B: aviso: Se detectÃ³ un segmento cargable vacÃ­o en vaddr=%#Lx, Â¿esto es intencional?%B: aviso: Coincidencia endian con mÃ³dulos previos.%B: aviso: la adiciÃ³n GOT de %Ld a Â«%sÂ» no coincide con la adiciÃ³n previa GOT de %Ld%B: aviso: versiones elf incompatibles %s y %s.%B: aviso: ASEs inconsistentes entre e_flags y .MIPS.abiflags%B: aviso: ABI FP inconsistente entre .gnu.attributes y .MIPS.abiflags%B: aviso: ISA inconsistente entre e_flags y .MIPS.abiflags%B: aviso: Extensiones ISA inconsistente entre e_flags y .MIPS.abiflags%B: aviso: ningÃºn sÃ­mbolo para secciÃ³n Â«%sÂ» encontrado%B: aviso: versiÃ³n de fichero objeto anterior encontrado, por favor recompile con la cadena de herramientas actuales.%B: aviso: adiciÃ³n PLT de %Ld a Â«%sÂ» desde secciÃ³n %A ignorada%B: aviso: Marca inesperada den el campo flags2 de  .MIPS.abiflags (0x%lx)%B: aviso: secciÃ³n asignada Â«%sÂ» no dentro del segmento%B: aviso: se crea un R_NDS32_25_ABS_RELA en un objeto compartido.%B: aviso: reclama tener reubicados 0xffff, sin desbordamiento superior%B: aviso: informaciÃ³n de nÃºmeros de lÃ­nea duplicada para Â«%sÂ»%B: aviso: sÃ­mbolos ilegal en la entrada del nÃºmero de lÃ­nea %d%B: aviso: Ã­ndice de sÃ­mbolos %ld ilegal en reubicaciones%B: aviso: Ã­ndice simbÃ³lico 0x%ld ilegal en las entradas del nÃºmero de lÃ­nea %d%B: aviso: isymMax (%ld) es mayor que ifdMax (%ld)%B: aviso: contador de nÃºmero de lÃ­nea (%#lx) excede el tamaÃ±o (%#lx) de la secciÃ³n%B: aviso: lectura de segmento de nÃºmeros de lÃ­nea fallada%B: aviso: se enlazan ficheros PIC con ficheros que no son PIC%B: aviso: se enlazan ficheros de llamadas ABI con ficheros que no son de llamadas ABI%B: aviso: bucle dentro de dependencias de secciÃ³n detectadas%B: aviso: mÃºltiples tablas sÃ­mbÃ³licas dinÃ¡micas detectadas - ignorando el segmento en secciÃ³n %u%B: aviso: mÃºltiples segmento simbÃ³licos detectados - ignorando el segmento en secciÃ³n %u%B: aviso: reubicaciÃ³n SDA_BASE fallada.%B: aviso: alineamiento de segmento de %#Lx es demasiado grande%B: aviso: no se necesita la alternativa para evitar la errata del STM32L4XX seleccionado para arquitectura objetivo%B: aviso: no se necesita la alternativa para evitar la errata del VFP11 seleccionado para la arquitectura objetivo%B: aviso: no se estableciÃ³ sh_link para la secciÃ³n `%A'%B: aviso: segmento simbÃ³lico es muy grande para mmo, mÃ¡s grande que 65535 words de 32-bit: %d.  Solamente serÃ¡ emitida `Main'.
+%B: emplea %s instrucciones mientras que mÃ³dulos anteriores emplean %s instrucciones%B: se usan sÃ­mbolos _-prefijo, pero escribiÃ©ndo el fichero con sÃ­mbolos sin prefijo%B: emplea diferentes campos e_flags (%#x) que mÃ³dulos (%#x) anteriores%B: emplea campos e_flags (%#x) desconocidos diferentes a aquellos de los mÃ³dulos previos (%#x)%B: utiliza instrucciones las cuales son incompatibles con instrucciones utilizadas en mÃ³dulos previos%B: se usan sÃ­mbolos sin prefijo, pero se escribe el fichero con sÃ­mbolos con _-prefijo%B: contador de versiÃ³n (%Ld) no coincide con la cuenta simbÃ³lica (%ld)%B: no se encuentra la versiÃ³n del nodo para el sÃ­mbolo %s%B: visibilidad de sÃ­mbolo Â«%sÂ» ha modificado.%B: aviso de fichero core truncado%B: aviso: %A: desbordamiento de nÃºmero de lÃ­nea: %#x > 0xffff%B: aviso: %s apunta a reloc no reconocido en %#Lx%B: aviso: reubicaciÃ³n %s frente a sÃ­mbolo Â«%sÂ» desde secciÃ³n %A%B: aviso: reubicaciÃ³n %s a %#Lx desde secciÃ³n %A%B: aviso: %s: desbordamiento de nÃºmero de lÃ­nea: 0x%lx > 0xffff%B: aviso: el sÃ­mbolo COMDAT Â«%sÂ» no coincide con el nombre seccional Â«%sÂ»%B: aviso: Se detectÃ³ un segmento cargable vacÃ­o en vaddr=%#Lx, Â¿esto es intencional?%B: aviso: Coincidencia endian con mÃ³dulos previos.%B: aviso: la adiciÃ³n GOT de %Ld a Â«%sÂ» no coincide con la adiciÃ³n previa GOT de %Ld%B: aviso: versiones elf incompatibles %s y %s.%B: aviso: ASEs inconsistentes entre e_flags y .MIPS.abiflags%B: aviso: ABI FP inconsistente entre .gnu.attributes y .MIPS.abiflags%B: aviso: ISA inconsistente entre e_flags y .MIPS.abiflags%B: aviso: Extensiones ISA inconsistente entre e_flags y .MIPS.abiflags%B: aviso: ningÃºn sÃ­mbolo para secciÃ³n Â«%sÂ» encontrado%B: aviso: versiÃ³n de fichero objeto anterior encontrado, por favor recompile con la cadena de herramientas actuales.%B: aviso: adiciÃ³n PLT de %Ld a Â«%sÂ» desde secciÃ³n %A ignorada%B: aviso: Marca inesperada den el campo flags2 de  .MIPS.abiflags (0x%lx)%B: aviso: secciÃ³n asignada Â«%sÂ» no dentro del segmento%B: aviso: se crea un R_NDS32_25_ABS_RELA en un objeto compartido.%B: aviso: reclama tener reubicados 0xffff, sin desbordamiento superior%B: aviso: informaciÃ³n de nÃºmeros de lÃ­nea duplicada para Â«%sÂ»%B: aviso: sÃ­mbolos ilegal en la entrada del nÃºmero de lÃ­nea %d%B: aviso: Ã­ndice de sÃ­mbolos %ld ilegal en reubicaciones%B: aviso: Ã­ndice simbÃ³lico 0x%lx ilegal en las entradas del nÃºmero de lÃ­nea %d%B: aviso: isymMax (%ld) es mayor que ifdMax (%ld)%B: aviso: contador de nÃºmero de lÃ­nea (%#lx) excede el tamaÃ±o (%#lx) de la secciÃ³n%B: aviso: lectura de segmento de nÃºmeros de lÃ­nea fallada%B: aviso: se enlazan ficheros PIC con ficheros que no son PIC%B: aviso: se enlazan ficheros de llamadas ABI con ficheros que no son de llamadas ABI%B: aviso: bucle dentro de dependencias de secciÃ³n detectadas%B: aviso: mÃºltiples tablas sÃ­mbÃ³licas dinÃ¡micas detectadas - ignorando el segmento en secciÃ³n %u%B: aviso: mÃºltiples segmento simbÃ³licos detectados - ignorando el segmento en secciÃ³n %u%B: aviso: reubicaciÃ³n SDA_BASE fallada.%B: aviso: alineamiento de segmento de %#Lx es demasiado grande%B: aviso: no se necesita la alternativa para evitar la errata del STM32L4XX seleccionado para arquitectura objetivo%B: aviso: no se necesita la alternativa para evitar la errata del VFP11 seleccionado para la arquitectura objetivo%B: aviso: no se estableciÃ³ sh_link para la secciÃ³n `%A'%B: aviso: segmento simbÃ³lico es muy grande para mmo, mÃ¡s grande que 65535 words de 32-bit: %d.  Solamente serÃ¡ emitida `Main'.
 %B: aviso: acceso no alineado a la entrada GOT.%B: aviso: acceso de datos pequeÃ±o desalineados para entradas: {%Ld, %Ld, %Ld}, direc = %#Lx, alineam = %#x%B: aviso: atributo de objeto EABI %d desconocido%B: no resolverÃ¡ reubicaciÃ³n TLS en tiempo de ejecuciÃ³n%B:%A%s excede el tamaÃ±o de sobreescritura
 %B:%A: %s y %s debe estar en la misma secciÃ³n de entrada%B:%A: Aviso: reubicaciÃ³n Red Hat obsoleta %B:%A: error: referencias simbÃ³licas %s reubicadas las cuales fueron quitadas para colecciÃ³n de basura.%B:%A: error: intente reenlazar con --gc-keep-exported activado.%B:%A: segmento %s requiere correspondiente ausente %d%B:%A: entrada de tabla %s no alineada por palabra dentro de tabla%B:%A: entrada de mesa %s fuera de mesa%B:%d: EquivocaciÃ³n de suma comprobante en el fichero S-record
 %B:%d: CarÃ¡cter Â«%sÂ» inesperado en el fichero S-record
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/es.po ./bfd/po/es.po
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/es.po	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/es.po	2024-02-01 01:47:14.000000000 +0000
@@ -567,7 +567,7 @@ msgstr "%B: aviso: lectura de segmento d
 #: coffcode.h:4641 coffcode.h:4655
 #, c-format
 msgid "%B: warning: illegal symbol index 0x%lx in line number entry %d"
-msgstr "%B: aviso: Ã­ndice simbÃ³lico 0x%ld ilegal en las entradas del nÃºmero de lÃ­nea %d"
+msgstr "%B: aviso: Ã­ndice simbÃ³lico 0x%lx ilegal en las entradas del nÃºmero de lÃ­nea %d"
 
 #: coffcode.h:4669
 #, c-format
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/fr.gmo ./bfd/po/fr.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/fr.gmo	2019-12-11 01:53:31.000000000 +0000
+++ ./bfd/po/fr.gmo	2024-02-01 01:52:32.000000000 +0000
@@ -1,149 +1,169 @@
-Þ•01Ûbl…€„…„‡dŸ
eŸsŸ‡Ÿ ŸA¿Ÿ? :A | “ ¦ $Å 3ê 
¡,¡%L¡r¡t¡A†¡&È¡ï¡¢!¢:¢J¢ i¢Š¢ª¢Ã¢Ú¢ç¢Pú¢K£*c£9Ž£6È£;ÿ£;¤FM¤6”¤6Ë¤:¥5=¥,s¥D ¥Nå¥J4¦)¦G©¦:ñ¦B,§Lo§)¼§Bæ§L)¨v¨Œ¨D£¨Gè¨0©O©a©u©�©¢©3Á©õ©ª0ªOª_ªoª+‰ª+µª+áª#
«1«I«R«p«(‡«?°«>ð«%/¬&U¬(|¬)¥¬GÏ¬7­O­f­†­£­¼­×­÷­®+®A®Y®m®„®,ž®Ë®Û®ô®¯#¯2¯H¯]¯w¯Ž¯1£¯Õ¯æ¯ó¯
-°%°#=°+a°&�°5´°ê°ÿ°±1±G±a±z±‘±§±$¼±á±ú±²2²$G²l²€²•²<®²ë²ú²
	³³+³@³ X³y³”³¤³Ä³à³´´2´E´*X´ƒ´•´&§´Î´0â´µ"'µJµ	[¶e¶#x¶œ¶µ¶Æ¶ß¶"ø¶·"/·#R·#v·š·#¯·#Ó·÷·¸"¸@¸F¸S¸[¸`¸
-}¸ˆ¸�¸!“¸ µ¸Ö¸Û¸à¸ø¸¹8¹=¹Q¹!V¹x¹‰¹�¹–¹›¹ ¹¦¹ª¹¯¹Ë¹"ä¹ºº,º@º&`ºB‡ºÊºêºïºôºûº»»»»7»K»R»k»»�»¡»²»Ã»Ô»ì»	û»
¼
¼
-!¼
-,¼
-7¼
-B¼
-M¼$X¼
-}¼#ˆ¼
-¬¼·¼É¼!á¼½½
-'½
2½	@½J½
-[½f½m½…½Ÿ½±½À½×½ò½¾¾)¾0¾P¾(`¾/‰¾¹¾Ë¾+Ú¾¿A"¿d¿~¿˜¿²¿8Ç¿ÀÀ-À&GÀnÀ�À2¨À?ÛÀ&ÁBÁ(aÁŠÁ"�ÁÀÁ*àÁ6Â{BÂr¾Âx1ÃªÃ:ÀÃûÃ?
ÄMÄmÄ&‹Ä²ÄœÌÄDiÅ'®Å,ÖÅ1Æ'5Æ$]Æ/‚Æ-²Æ0àÆ&Ç88ÇqÇ=‘Ç9ÏÇ:	È6DÈ6{È²È/ÒÈ5É+8É$dÉ6‰É"ÀÉ&ãÉ6
-Ê=AÊ:Ê:ºÊDõÊ8:Ë9sËC­Ë:ñË7,Ì8dÌ@�ÌGÞÌ9&Í,`Í0�Í#¾ÍâÍ-ýÍ6+ÎbÎ7~Î;¶Î:òÎ9-Ï"gÏ3ŠÏ%¾Ï.äÏÐL3Ð0€Ð.±Ð1àÐ'ÑE:Ñ8€Ñ(¹ÑcâÑ4FÒ&{Ò2¢Ò&ÕÒ6üÒ]3Ó8‘ÓÊÓOéÓb9Ô,œÔ+ÉÔ)õÔYÕ=yÕ3·Õ2ëÕBÖ)aÖ$‹Ö3°Ö9äÖ6×/U×D…×&Ê×Wñ×UIØIŸØ+éØ8Ù%NÙ(tÙ&�Ù,ÄÙ#ñÙ>ÚBTÚB—ÚÚÚ'úÚE"Û9hÛ4¢Û3×ÛJÜ(VÜ;Ü»Ü0ÚÜ.Ý,:Ý'gÝ6�Ý ÆÝ/çÝ4ÞNLÞª›ÞIFß9�ß3Êß¾þß<½à<úàF7áP~áoÏá>?âF~â`Åâ~&ãF¥ã‚ìã[oä3Ëä@ÿäM@åmŽå7üå#4æXæ(næ&—æ+¾æêæÿæ8ç"Lç$oç'”ç9¼çCöç!:è!\è*~è/©è1Ùè/é/;é0ké*œé0Çé<øéi5ê=ŸêBÝê= ë-^ë.Œë8»ë9ôëF.ì?uìVµì(í>5í;tí=°í#îíLî8_î+˜î8Äî2ýî90ï:jï3¥ï,Ùïuð |ð.�ð.ÌðKûð0GñBxñ/»ñ,ëñ'ò%@ò,fòN“òâòCüòJ@ó@‹óJÌó*ô%Bô<hô ¥ôlÆô<3õ<põ+­õÙõ,õõH"ö6köA¢öAäöJ&÷>q÷J°÷Jû÷<Fø.ƒø(²ølÛøvHùA¿ù6ú8ú4Vú0‹ú+¼úAèú3*û@^û!Ÿû#Áû.åûBüFWü4žü%Óü:ùü24ý*gý9’ýCÌýCþ:TþT�þJäþ5/ÿ4eÿ6šÿ/Ñÿ/&1&X5'µ0Ý5(D3m%¡&Çî'=6#t+˜3Ä(ø@!Cb5¦'Ü,g14™mÎA<@~H¿GKPIœLæH3C|YÀ50P4�M¶N	1S	)…	/¯	)ß	+	
-75
-3m
-6¡
-9Ø
-X[kCÇ6>B=�*¿.ê2
[L
&¨
-Ï
,ý
*E/`(�$¹0Þ'87"pA“)Õ=ÿ@=2~+±"Ý5<6's%›(ÁRê?=F}3Ä1øD*HoD¸KýaI`«sB€‚ÃTF=›bÙb<gŸg0o( 4É5þ34-h/–HÆF7VGŽ+Ö$2'.Z/‰+¹)å^KnFº"@5[(‘EºDDEFŠ_Ñ^1"�*³+Þ8
- :C '~ ;¦ 8â '!'C!3k!>Ÿ!-Þ!,"9"X"u".“"/Â"ò"$#37#k#F‰#&Ð#!÷#6$5P$+†$ ²$$Ó$.ø$.'%%V%)|%\¦%D&HH&D‘&LÖ&X#'H|')Å'*ï' (5;(9q(@«(+ì(6)AO).‘)3À)=ô)H2*<{*8¸*3ñ*4%+4Z+0�+@À+1,B3,Lv,AÃ,L-8R-B‹-+Î-2ú-<-.3j.Xž.P÷..H/`w/&Ø/\ÿ/X\0/µ0på0AV1+˜1KÄ1.2,?2%l2’23²22æ23493Wn3=Æ3*45/4%e4B‹4%Î44ô4>)5<h5C¥5Bé5;,63h6œ6¼6Ë6!à67$7=71P7V‚7IÙ7I#8<m8ª8½8Ñ8ã8ý8
9'9G9
S9a9%r9\˜9;õ91:C:Y:\:y:†:	Ÿ:©:»:Ì:,Ù:;;0;"L;o;(Œ;/µ;/å;1<8G<#€<'¤<2Ì<3ÿ<3=;C==†=Ž=£=³=º=Â=Ö=ë=>>%><>Y>k>‰>	¨>²>Ð>	å>"ï>?$?)@?/j?"š?½?Ô?Ý?é?í?@@$@'6@^@ {@#œ@À@Ú@ ì@
AH+A1tA#¦A,ÊAX÷AaPB:²B.íB7C1TC;†C(ÂC:ëC,&D-SD-�D¯D2ÎDEE&E;ERE)hE’E!¨E$ÊEIïE9F5VFŒF
-¡FC¬FIðF:GLGTG\G
zGˆGAšGÜG/øG+(H8TH�H$£H!ÈH1êHI;I+ZI†I
-šI¥IÄI%ÖIüIJ.,J-[JG‰J3ÑJK"$KGKYK$rK—K!´KÖK5èKL	0L:LLLbL‚LœL¸LÇLÙL	àLêLïLûL
-M!M=MSMeM…MžM¾MÒMäMüM-NHNZNlN€NšN'¯N×NæNøN
-OO!O:O:VO%‘O%·OÝOAöO;8PCtP=¸PCöP=:Q"xQ7›Q<ÓQ<R)MR5wR­R¶RvÑR*HSsS'…S­S¿SÆS
-ÍS(ØST'T;TXTpT�T#¨T$ÌT,ñT.U,MU.zU©U"ÆU,éU.V!EV1gV0™V2ÊV,ýV.*W#YW}W�W(±W/ÚW!
-X,X(IX#rX+–XÂX,ÛX Y)YBYbYvY–Y#µY-ÙY"Z*Z<ZOZ[ZpZ&‚Z	©ZF³Z/úZ*[J;[M†[Ô[ô[\\-;\i\r\z\A†\>È\]A]7[]B“]!Ö]ø]˜^±^Í^ß^ñ^2_.9_#h_Œ_™_¦_¶_¾_:×_+`#>`b`u`Ž`¦`,¾`:ë`&a	>adHa­a6ÀaM÷aMEb<“bgÐbb8c<›cEØc1d(Pd$ydžd/´d+äde,eFece>e<¾eûe4f'Lf$tf™fªfÂfÙfêfgg,g>gPgbg|g—g©gºgÒgñg2hCh']h7…h0½hDîh,3i'`iˆi¨iºi-Ôi+j+.j*Zj	…j	�j
-™j
-¤j¯jÄjÓjèj÷j1üj.k/Nk~k'�k"Åk&èk0l@l^lsl|l9šlÔl,él9m)PmCzmI¾mEnYNnY¨n;o;>oNzo/Éo5ùo:/p5jp4 p9Õp7q9GqD�qGÆqDrESrC™r4Ýr?s:RsG�s;ÕsAt9St*�t6¸t/ït;u3[u%�u1µuAçu!)vUKv\¡vAþv1@w?rw:²w7íw>%x$dxI‰xÓx/ðxO yPpy3Áy õy?z:Vz&‘z
-¸z0Ãz%ôz"{%={0c{!”{¶{Ï{ê{ÿ{|O|k|,Š|J·|7}
:}H}1W}‰}�}°}Ã})à}*
-~,5~6b~™~$¹~_Þ~">Aa£,Á2îH!€j€z€$‹€°€Ã€¼ã€¹ �Z‚/l‚œ‚·‚Õ‚*õ‚L ƒ2mƒ- ƒ)Îƒ"øƒ„.„C„X„4g„œ„0¤„%Õ„9û„5…G…X…r…z…‚…ž…H¥…î…4ñ…&†/†
-F†Q†2m†O †ð†‡"‡*7‡%b‡ ˆ‡©‡Ç‡Ï‡Cî‡¤2ˆ×ˆäˆ þˆ‰(‰<‰Q‰g‰}‰”‰±‰Â‰Ô‰è‰Nð‰[?Š›ŠAŸŠáŠ‹‹5‹6M‹„‹ ¤‹8Å‹+þ‹*Œ=ŒMŒUŒjŒ‚Œ–ŒªŒ¾ŒÑŒ
äŒòŒL� Y�Dz�P¿�Ž"Ž2=Ž$pŽ•ŽµŽ5ÈŽþŽ!�;�B�2J�F}�/Ä�ô�"�)�9�MH�9–�;Ð�7‘D‘\‘y‘ˆ‘,›‘$È‘Jí‘)8’ˆb’(ë’%“(:“c“
-“,Š“7·“ï“)	”3”Q”k”ƒ”‹”£”»”
Ñ”#ß”•'•C•T•j•„•¡•»•#Ç•%ë•–.–E–W–7n–¦–Â–â–û–—"—5—I—]—s—J‰—JÔ—J˜Ij˜:´˜ï˜-™;<™+x™@¤™<å™1"š8Tš8�š.Æš>õšI4›h~›yç›>aœN œIïœd9�0ž�;Ï�8žFDž5‹ž&Áž.èž-Ÿ.EŸ0tŸ<¥Ÿ!âŸ ! `? .  ,Ï hü Ee¡0«¡6Ü¡k¢E¢Å¢&ã¢I
-£#T£<x£<µ£eò£2X¤/‹¤/»¤4ë¤= ¥9^¥0˜¥7É¥'¦=)¦6g¦@ž¦ß¦ÿ¦,§Ð0§
©©!$©(F©wo©lç©_Tª´ªÔªìª+«C8«
|«)Š«!´«Ö«Ø«Ué«+?¬k¬‰¬¥¬¿¬"Ï¬!ò¬$­9­W­p­€­i•­ÿ­>®B^®?¡®>á® ¯b9¯Dœ¯Eá¯I'°Cq°5µ°Së°\?±Wœ±1ô±Q&²Hx²OÁ²U³1g³O™³Vé³@´[´Sx´[Ì´!(µJµ_µsµ�µ ¢µ5Ãµùµ¶= ¶^¶m¶}¶,˜¶,Å¶,ò¶"·B·Z·c·ƒ·0œ·PÍ·O¸)n¸*˜¸.Ã¸0ò¸d#¹Kˆ¹Ô¹ë¹º(ºAº,\º‰º¢ºÂºÚºöº
-»!»3;»o»»™»µ»Ò»ä»ú»¼)¼@¼5U¼‹¼ž¼«¼Æ¼á¼$û¼+ ½'L½5t½ª½#¿½ã½¾¾9¾R¾i¾¾)”¾¾¾×¾÷¾¿($¿M¿a¿v¿<�¿Ì¿Û¿
ê¿ø¿À!À"=À`À{À&‹À²ÀÍÀíÀÁ$Á7Á-KÁyÁŒÁ)ŸÁÉÁ2ÞÁÂ+%ÂlQÂ
-¾ÃÉÃ#ÜÃÄÄ2ÄLÄ#fÄŠÄ%žÄ#ÄÄ#èÄÅ#Å#AÅeÅ&tÅ&›ÅÂÅÈÅÔÅÜÅáÅ
-þÅ	ÆÆ)Æ3>ÆrÆwÆ|Æ#•Æ#¹ÆÝÆâÆÿÆ4Ç9ÇKÇRÇXÇ]ÇbÇhÇlÇ"qÇ#”Ç/¸ÇèÇ#íÇÈ#(È4LÈ@�È#ÂÈæÈëÈðÈ÷ÈÿÈÉÉ!É:ÉQÉXÉtÉ‹ÉœÉ­É¾ÉÏÉàÉ÷É	Ê
Ê
Ê
-,Ê
-7Ê
-BÊ
-MÊ
-XÊ4cÊ
-˜Ê[£Ê
-ÿÊ
-ËË,;ËhË}Ë
ŒËšË	«ËµË
ËËÙËàËúËÌ)ÌGÌ+dÌ�Ì ŸÌ
ÀÌÎÌ#ÕÌùÌ1Í::ÍuÍ‹Í:œÍ×ÍGòÍ :Î[ÎvÎ‘Î;¦ÎâÎûÎÏ:,Ï,gÏ”Ï7³ÏHëÏ94Ð+nÐ*šÐÅÐ#ÛÐ-ÿÐ*-Ñ7XÑ�ÑwÒ{ˆÒÓ?Ó^ÓVrÓÉÓ%éÓ;ÔKÔÐiÔe:Õ8 ÕEÙÕBÖ8bÖ3›ÖFÏÖ>×BU×5˜×>Î×1
ØV?ØR–ØVéØD@ÙD…Ù#ÊÙ<îÙJ+ÚIvÚ/ÀÚYðÚ0JÛ4{Û=°ÛAîÛ=0Ü>nÜH­Ü;öÜ=2ÝGpÝ=¸Ý;öÝ;2ÞgnÞ~ÖÞXUßL®ßEûß+Aà.màGœàMäà$2á@WáN˜áNçáB6â8yâD²â'÷âBã(bã^‹ã>êã<)ä4fä<›ä]ØäN6å7…å†½åIDæ3Žæ<Âæ%ÿæ@%ç|fçPãç4èdTè‡¹è6Aé0xé+©é^ÕéO4êB„ê@ÇêPë-Yë&‡ë<®ëLëëJ8ìFƒìQÊì*íkGíu³íj)î<”îDÑî1ï-Hï/vï4¦ï+ÛïGðKOðE›ðáð7ýðW5ñJ�ñHØñ?!ò~aòYàòQ:ó$Œó>±ó0ðó%!ô)Gô4qô'¦ôEÎô<õhQõÝºõ_˜öHøöDA÷†÷C’øCÖøQùdlùŠÑùJ\úT§ú…üúª‚û[-ü©‰üp3ý-¤ýGÒýUþ”pþ<ÿ-Bÿpÿ6Šÿ4Áÿ:öÿ1GZ]$¸%Ý5Q9U‹$á$1+7]6•:Ì=5E7{5³DéŒ.X»PXe=¾DüBAD„TÉNsm5áIAaF£-êR	Dk	4°	Xå	O>
-ZŽ
-Né
-M8U†¤Ü'�?©?é\)
A†
SÈ
98V8�6È8ÿh8¡KÀRS_b³S@jP«.ü—+FÃF
-.Q!€>¢JáD,sqsåbY@¼TýbRLµ;=>Œ| 	Lª=÷(5?^Bž)áYJe]°..=ClV°]9e%ŸUÅ>FZ\¡ZþZYP´oZu=Ð@ @O F� C× @!F\!@£!.ä!5"<I"8†"@¿"0#11#(c#6Œ#DÃ#1$?:$Ez$*À$Lë$K8%A„%1Æ%4ø%•-&DÃ&q'Hz'GÃ'O(N[(Rª(Ký(\I)f¦)T
*lb*QÏ*<!+;^+`š+`û+>\,5›,DÑ,;-AR-P”-Gå-k-.M™.kç.rS/SÆ/l0J‡0NÒ0C!1Fe1?¬1xì1,e2<’2;Ï2!3 -3BN33‘36Å38ü3>54Qt4.Æ4Qõ46G5S~5cÒ5B665y6-¯6<Ý6E7'`7(ˆ73±7nå7GT8Nœ8Dë8909Sj9W¾9S:_j:…Ê:…P;”Ö;Qk<²½<np=Tß=ƒ4>‹¸>ˆD?�Í?@^@5Ÿ@;Õ@FAIXA4¢A?×AgBfBWæBk>C<ªC-çCGD9]D6—D;ÎD*
-Ev5ES¬EHFIF!dF†F< F2ÝFGGFXGFŸGHæGa/H`‘HCòH76I7nIG¦IJîI39JKmJE¹J2ÿJ62K:iKT¤K;ùK/5L(eLŽL(¬L6ÕL7M$DM2iMBœM"ßM\N._N'ŽN;¶NBòN65O'lO+”O4ÀO5õO,+P*XPsƒPb÷PcZQP¾QTRsdR^ØR57S3mS*¡SOÌSBTL_T1¬TPÞT[/U?‹UEËUSV]eVFÃVK
-WWVWA®WIðWA:XW|X5ÔX@
-YMKYA™YLÛY=(Z_fZKÆZL[V_[C¶[zú[eu\AÛ\y]0—]dÈ]`-^EŽ^ƒÔ^NX_5§_OÝ_0-`<^`<›`%Ø`Jþ`@Ia-Ša?¸aiøaQbb0´bMåb;3cIoc6¹c>ðc^/dcŽdmòdc`eYÄeCf*bf
�f›f2±f#äf6g?g8SgiŒgYög]PhQ®hii,i>i[iti'ƒi«i
¼iÊi$Úiiÿi>ij¨j&¿jæj éj
-k k	:kDkVkhk7uk­kÃk#Ýk"l'$l<Ll6‰lFÀlCmOKm0›m1Ìm>þmB=n€nA”nÖnßnènooo'o;oPodovo‰o¡oÀo(Ôo'ýo
-%p"0pSp	pp*zp¥p!·p(Ùp0q,3q&`q	‡q‘q¥q©qÂqÔqæq0øq)r)Hr+rržrºr,Ñr&þrK%s<qs-®s5ÜsutvˆtDÿt4Du:yu<´u_ñu1QvJƒvCÎvLw8_w%˜w7¾wöwx'x%Exkx6�x¸x"Óx&öxMy#kyB�yÒyïyJÿyVJz¡z³z»zÃz
ázïzc{#e{?‰{4É{Dþ{C|>`|;Ÿ|:Û|'}'>}Mf}´}
-Ô}2ß}~"$~G~$Y~@~~1¿~Qñ~<C/€4°å÷$€*:€*e€�€H¢€ë€ý€�!�9�X�%v�œ�­�¿�Æ�Ï�Õ�ä�õ�!‚-‚D‚X‚w‚“‚²‚Ì‚á‚!ü‚9ƒXƒlƒ�ƒ™ƒ¹ƒ8Øƒ„!„3„E„L„*S„!~„= „-Þ„,…#9…O]…[­…R	†R\†X¯†A‡:J‡@…‡HÆ‡Hˆ2XˆA‹ˆ	Íˆ!×ˆ™ùˆ7“‰Ë‰0Ý‰Š Š'Š.Š8AŠzŠ3ŒŠÀŠÝŠõŠ‹"+‹#N‹3r‹/¦‹3Ö‹/
-Œ:Œ#YŒ3}Œ/±Œ%áŒ5�==�9{�3µ�/é�$Ž >Ž_Ž+uŽ1¡Ž!ÓŽõŽ)�$>�3c�—�7±�!é��!%�G�#[�$�(¤�3Í�&‘(‘:‘W‘j‘‰‘6ž‘Õ‘\Û‘28’k’k}’sé’(]“†“Ÿ“#»“0ß“””!”O-”I}”Ç”[Ù”H5•Z~•0Ù•1
-–»<–'ø– —2—D—2\—=�—QÍ—˜,˜9˜K˜S˜As˜>µ˜.ô˜#™<™W™o™6‰™KÀ™!š.šu>š´šBÇšY
-›Yd›;¾›tú›ooœAßœR!�2t�)§�'Ñ�ù�=ž=PžŽž®ž7Íž5ŸY;ŸR•Ÿ&èŸS Gc @« ì þ ¡6¡"H¡k¡ˆ¡›¡®¡Á¡Ô¡ó¡¢%¢"7¢6Z¢7‘¢6É¢£3£DR£=—£XÕ£=.¤:l¤'§¤Ï¤ä¤>¥<B¥<¥<¼¥	ù¥	¦
-
¦
-¦#¦:¦I¦^¦m¦4r¦'§¦>Ï¦§8+§3d§C˜§7Ü§*¨$?¨d¨#w¨@›¨#Ü¨G©GH©*�©H»©KªfPª|·ª|4«S±«P¬qV¬@È¬H	­QR­<¤­Sá­p5®N¦®põ®Uf¯f¼¯]#°Z�°\Ü°I9±Pƒ±QÔ±T&²K{²fÇ²H.³1w³T©³3þ³<2´6o´&¦´2Í´Gµ,Hµ…uµuûµ\q¶8Î¶^·If·H°·Lù·&F¸Pm¸,¾¸2ë¸b¹Y�¹1Û¹$
ºD2º?wº9·ºñº>ýº3<»4p»4¥»YÚ»,4¼a¼z¼˜¼·¼É¼tÚ¼&O½0v½Y§½D¾F¾U¾;e¾¡¾µ¾È¾Û¾=ø¾H6¿5¿Cµ¿!ù¿&ÀyBÀ¼ÀRØÀ+Á5KÁ:�ÁN¼ÁÂÂ0,Â]Â$pÂé•ÂÝÃ]Ä4qÄ"¦Ä$ÉÄ/îÄ9Å_XÅC¸Å6üÅ63Æ-jÆ˜Æ¯ÆÅÆÜÆbéÆ	LÇ9VÇE�Ç9ÖÇÈ$È(7È`ÈoÈ{È—Èo�È
ÉMÉ_ÉlÉ
ŠÉ˜ÉE³ÉmùÉ(gÊ�Ê(–Ê;¿Ê2ûÊ@.ËFoË¶Ë%ÂËpèËÁYÌÍ'Í:GÍ	‚ÍŒÍ¢Í¸ÍÐÍèÍÎ Î2ÎEÎ\ÎYeÎs¿Î3ÏX7Ï�Ï"®ÏÑÏñÏI
-Ð&TÐ-{ÐC©ÐMíÐ;ÑTÑkÑwÑ�Ñ¤Ñ·ÑËÑßÑòÑÒ$Ò�9Ò#»ÒSßÒa3Ó•Ó"¨Ó2ËÓ/þÓ+.ÔZÔ_rÔÒÔ=òÔ0Õ8ÕGAÕ\‰Õ?æÕ&Ö+>ÖjÖzÖS‰ÖBÝÖ5 ×HV×Ÿ×½×Ý×í×DØ<FØWƒØ=ÛØ”Ù8®Ù5çÙ;Ú"YÚ|Ú8‰Ú>ÂÚÛ4Û%SÛ$yÛžÛºÛÂÛÜÛöÛÜ;ÜZÜ6xÜ¯ÜÇÜäÜ#Ý$Ý?Ý"KÝ8nÝ#§ÝËÝêÝÞA!Þ"cÞ&†Þ#­ÞÑÞæÞøÞßß3ßIß`_ß]ÀßYà\xàMÕà#á2CáIvá<ÀáOýáHMâ9–âAÐâAãCTãN˜ã\çãŒDäžÑäOpåbÀå]#æ~�æ9çA:çA|çT¾çFè/Zè;Šè/Æè6öè2-é@`é/¡éÑé(ìé{ê8‘ê6ÊêuëVwëFÎëJìz`ì^Ûì/:í-jín˜í0îI8îI‚îÌîALï1Žï=ÀïNþïNMðGœðFäðK+ñ2wñ^ªñV	òj`ò#Ëòïò-óòßÎ¿Ciq¯ž$Š¨6¸ŒÔ9õ¹í¹Ä"Àg!f5Ý”­;›Î¬¾×Æ
-ƒTW­0§y2!'(ê�)Ý
-ªE69	Ç`Z‹—EÄÖê{8¦J5„÷”�ž‡I£r€dŠÊ<ÆxkUámÜ‚x´¡[×ºå§û8ÇR)Ä»°q�¿õÿU³�Û³÷ëÃ"D}sÖ/WòF[šƒ|y0Vôë,ëµäÕ²$².ÿ;Y}_Îó„¼Ê!Hø×<\Œð¤´Àsˆh¡…fæˆ«ÁÄÏÜ,*‘wØºúa:ë©Î„' ðí~Mà‚báZó
Èc:Q3(;ÿ÷4G&ÉCN±µÞ&"PL%‹Cç?æ‰
-æýµ”Õ‡r±Ê¡Y†`�”¥Uôa›BÉUÙðlñe/—lwÝæ6î“Ÿ¥õh›>Lþ�:’’øõ¢“#VÔ¸Ÿ¿pxŠÍ~­a·ÃxC•QSt#Ú<â¡ÒïÈé@»ã�eûPÔ—jˆËñ%‰	S~LÃ°ãXOù$,3{)ã@šnÅcËAŸ�5Œ3§‚åb×À3µÅ-ÈXŠuZ=©zRí0[FÔD:wºËaÞ›Õ=ú¨
¦®N9®ä �ñ¿5šÜ­Kn8¶¾ŸKäÊ½	.l2ÜŠBAtø?�öãm®ƒÆÖLëz !x–gW˜ùÖ¶ÉÌVÄøIZ¸4O™¶:»«þžŽ€Iåÿ=©ÝþÌc‰•N¡þí�ªù[‡V¥v¬xÆòñ‘³Y$Ž‡Ž˜D Ê…•J®Íg+†û²Ð¨·ÒèØ3é�ozŸÝeo2ŽV•Ñïn(·êi0¬#+°]Õèû`|iFeî�åªo<Mq6î*>Tà&§ìÎÀ6Ç‹€"o¸Eæ¶NY’½Žð7vKø{£Óë8‡@–ªÂý*„*?	1GAù 5uç‡_>úÂÐ#ìž«Kü™å9«ð¥Ï`…^B£7Ù¢ï£1žè2â>ÆþÅÐ¬¶ví–9'Å¹Ñz|ÜÛÁõµ¢ï-OÒÌh²ÂvW€U‘ÏËà+òA%Ç&œ´%z«S2#—¤Nsî¾d“?pÕ0ãbÍÈ³ãR¦H£“(—ÏÑAž¤	]r¢¹âjI:â�81GXÚ§-ô±
-‘wÈå^}°h¹4ù¥�—íPÂn¼è8pÌ1êf<ká]RX2[Ï#¼½vrÔª¹ß™,Ùü_mƒ¨Ãh�ôw@]¼‰	JÛO·Ê vQ¼†Ð”˜/g¥ƒç^œ©ÉÁÒWd^¤)Úi!üÞ–JmI;'¿ê ÿüÅ$
Ú•{;š
.5qÉy /öÓw¸qX�ûNö™†ÛE>k�Ëà=øþB©ÿ¸�´–ªuÖ-‰óÓsGŒÈý^4iâ¡ôùÐºY-Û/•�ç¦Bf%Üîõ,e»è	fE]|T½®FöfÌìkÇ´ý4ÙÝÑÏBtóÞ?éÍœ~ØF¯ÁSpQé ÓŸ�ì“(ˆÛT²Øèæ|³=÷k¯z·ö¨Ž_9W²mP_J¼Ó­Øáô &C/MDºJß](CÖÍK†sjE¿…lc\‹ä�@˜17ð}Éé F[OÓaÔ+òÐ»PºZX™ctM¢â„SŒj
-çKìo{p
-7œýÌHU+áYj‹³Ã¬äßMïÙR_.ns˜‚)$
?îG×�=.cœM´'ouk†L@±�yöÒ^T›Ú}�\*Á1¦¯0tšò÷yH±Ò…tg÷ý¤­‹‘4>…ÞbÑl¨u-ú‚g&óm°«A–{¾q §SR×”ï’›OQà¾‘ÃVD3Z¢6àeúPdÑç½"Daê~·7ÆÎj+Š£‰dn½b
Ú!»’‚Hñó\r
À¦üœ�Ë’ÇÍhyÂˆµ¤H\Áìr7~uˆL®€l™˜.Þñû�iéIÙá€ü)
-òÂ|šß¾Ä±“b„À\%�*TƒQ¶¬p�¯©d`}`;<ä�G¯úØÅ',°ÕŒ"ß!ó(ó/ó„‰ ‰´‰È‰Ü‰ð‰ŠŠ,Š@ŠTŠhŠ|Š�Š¬ŠÀŠÔŠðŠ‹‹,‹@‹T‹h‹|‹�‹¤‹¸‹Ô‹è‹ü‹Œ<ŒPŒdŒxŒŒŒ¨Œ¼ŒÐŒäŒ��(�<�P�d�x�Œ� �´�Ð�ì�ŽŽ(Ž<ŽPŽdŽxŽ”Ž°ŽÌŽàŽôŽ��0�D�X�l�€�”�¨�¼�Ð�ä�ø�� �4�H�d�€�”�¨�Ä�Ø�ì�‘‘(‘<‘P‘d‘x‘”‘°‘Ä‘à‘ü‘’$’8’T’p’Œ’ ’´’Ð’ä’ø’“ “4“H“\“p“Œ“ “´“È“ä“ø“” ”4”`”t”�”¤”¸”Ì”à”ô”••0•D•X•l•€•œ•°•Ä•à•ô•––0–D–X–l–€–”–¨–Ä–Ø–ì–—,—@—T—h—|—˜—¬—À—Ô—ð—˜˜,˜@˜T˜h˜|˜�˜¤˜À˜Ü˜ð˜™™,™@™T™h™„™ ™¼™Ð™ä™ø™š š4šHš\špš„š˜š¬šÀšÔšèšüš›$›8›T›p›„›˜›´›È›Ü›ð›œœ,œ@œTœhœ„œ œ´œÐœìœ��(�D�`�|���¤�À�Ô�è�ü�ž$ž8žLž`ž|ž�ž¤ž¸žÔžèžüžŸ$ŸPŸ6óÿÿÿÿXó"ÿÿÿÿŽó ÿÿÿÿµó5ÿÿÿÿñó%ÿÿÿÿô)ÿÿÿÿMô(ÿÿÿÿ|ô/ÿÿÿÿ²ôÿÿÿÿÎô'ÿÿÿÿüôÿÿÿÿ'õ-ÿÿÿÿUõÿÿÿÿsõ/ÿÿÿÿ¶õÿÿÿÿÓõ ÿÿÿÿûõ%ÿÿÿÿ8öÿÿÿÿlö*ÿÿÿÿ—ö.ÿÿÿÿÇö)1ÿÿÿÿ!÷%ÿÿÿÿG÷1ÿÿÿÿy÷
-2ÿÿÿÿµ÷"ÿÿÿÿé÷3ÿÿÿÿø3ÿÿÿÿQøÿÿÿÿxø9ÿÿÿÿÈø%ÿÿÿÿûø
-HÿÿÿÿOù
-/ÿÿÿÿ¦ù
-6ÿÿÿÿæù
->ÿÿÿÿ.ú
-0ÿÿÿÿhú
-Fÿÿÿÿ¸ú
-ÿÿÿÿúú
-+ÿÿÿÿ/û
-ÿÿÿÿWû
-"ÿÿÿÿƒû@)ÿÿÿÿòû
-/ÿÿÿÿ+ü
- ÿÿÿÿUü-ÿÿÿÿœü6ÿÿÿÿèü6ÿÿÿÿ3ý
-7ÿÿÿÿtý
-?ÿÿÿÿ½ý
-ÿÿÿÿâý4ÿÿÿÿ/þ+ÿÿÿÿgþ-ÿÿÿÿ¡þ3ÿÿÿÿÕþ
--ÿÿÿÿÿ(ÿÿÿÿHÿ
--ÿÿÿÿÿÿÿÿÿ±ÿ6ÿÿÿÿîÿ>ÿÿÿÿ3#ÿÿÿÿ^ÿÿÿÿšÿÿÿÿÖ
-2ÿÿÿÿ
-.ÿÿÿÿJFÿÿÿÿ‘
-2ÿÿÿÿÍ
-2ÿÿÿÿ	
-2ÿÿÿÿE
-2ÿÿÿÿ�
-2ÿÿÿÿ½
-2ÿÿÿÿùFÿÿÿÿ@
-9ÿÿÿÿƒ
-7ÿÿÿÿÄ
-9ÿÿÿÿFÿÿÿÿNFÿÿÿÿ•	2ÿÿÿÿÐ+ÿÿÿÿ.ÿÿÿÿ7+ÿÿÿÿi-ÿÿÿÿž0ÿÿÿÿì"ÿÿÿÿ+!ÿÿÿÿ^
-*ÿÿÿÿ”
-Aÿÿÿÿß
-dÿÿÿÿM
-$ÿÿÿÿ{1ÿÿÿÿ·1ÿÿÿÿé
-ÿÿÿÿ5ÿÿÿÿT&ÿÿÿÿˆ=ÿÿÿÿØ&ÿÿÿÿ,	+ÿÿÿÿk	ÿÿÿÿŸ	]ÿÿÿÿ
-!5ÿÿÿÿc
-Kÿÿÿÿ¯
-<"ÿÿÿÿ
$ÿÿÿÿF7
-ÿÿÿÿˆÿÿÿÿÐ;ÿÿÿÿ8?ÿÿÿÿ–ÿÿÿÿ¿2ÿÿÿÿùÿÿÿÿ*
ÿÿÿÿ\
=ÿÿÿÿ«
Iÿÿÿÿ(ÿÿÿÿLIÿÿÿÿ¯!ÿÿÿÿå!ÿÿÿÿÿÿÿÿF+ÿÿÿÿs=ÿÿÿÿ±5ÿÿÿÿç@ÿÿÿÿ,7ÿÿÿÿd-ÿÿÿÿ’ÿÿÿÿ¯-ÿÿÿÿì
-"	ÿÿÿÿ??ÿÿÿÿ€$ÿÿÿÿª30ÿÿÿÿ
.ÿÿÿÿB6ÿÿÿÿ7ÿÿÿÿ½6ÿÿÿÿú1ÿÿÿÿ2Cÿÿÿÿ|ÿÿÿÿ¢Aÿÿÿÿê(ÿÿÿÿ/5ÿÿÿÿe&ÿÿÿÿŒ8ÿÿÿÿÛ/ÿÿÿÿ#	ÿÿÿÿ7+ÿÿÿÿ~&%ÿÿÿÿÉ)	ÿÿÿÿûFÿÿÿÿCK.ÿÿÿÿ¼-ÿÿÿÿê;ÿÿÿÿ&
-<ÿÿÿÿl*ÿÿÿÿ²FÿÿÿÿùFÿÿÿÿ@ÿÿÿÿl=ÿÿÿÿÂ.ÿÿÿÿ
-`ÿÿÿÿl
-&<ÿÿÿÿÚ
-@ÿÿÿÿ$
-Bÿÿÿÿp
-5ÿÿÿÿ¯
-Eÿÿÿÿþ
-#ÿÿÿÿI
-.ÿÿÿÿ�
-&ÿÿÿÿ±
-*ÿÿÿÿå`;ÿÿÿÿ†
-9ÿÿÿÿÉ
-*ÿÿÿÿýFÿÿÿÿb@ÿÿÿÿ¸@ÿÿÿÿ
-=ÿÿÿÿZ
-Mÿÿÿÿ±
-"ÿÿÿÿÝCÿÿÿÿ=;ÿÿÿÿ†<ÿÿÿÿÑ@ÿÿÿÿ 
-0ÿÿÿÿL +ÿÿÿÿ‰ 
-4ÿÿÿÿÇ '+ÿÿÿÿ!8ÿÿÿÿX!Vÿÿÿÿµ!'ÿÿÿÿä!!ÿÿÿÿ+"!%ÿÿÿÿx"
-YÿÿÿÿÛ"
-6ÿÿÿÿ#Vÿÿÿÿr#
-2ÿÿÿÿ®#
-2ÿÿÿÿê#
-2ÿÿÿÿ&$
-2ÿÿÿÿb$
-2ÿÿÿÿž$
-2ÿÿÿÿÚ$Xÿÿÿÿ3%
-9ÿÿÿÿv%
-7ÿÿÿÿ·%
-8ÿÿÿÿù%XÿÿÿÿR&Xÿÿÿÿ«&	<ÿÿÿÿð&,ÿÿÿÿ#'0ÿÿÿÿZ'8ÿÿÿÿ™'=ÿÿÿÿÞ'@ÿÿÿÿ=('!ÿÿÿÿ…('ÿÿÿÿ¿(
-3ÿÿÿÿþ(
-Wÿÿÿÿ_)
-€ÿÿÿÿé)
-1ÿÿÿÿ$*8ÿÿÿÿg*Fÿÿÿÿ®*
-ÿÿÿÿÐ*Pÿÿÿÿ?+2ÿÿÿÿ+Hÿÿÿÿå+7.ÿÿÿÿZ,6
-ÿÿÿÿ¨,$ÿÿÿÿä,mÿÿÿÿc-!<ÿÿÿÿÁ-Yÿÿÿÿ.O-ÿÿÿÿ—.4ÿÿÿÿæ.Eÿÿÿÿ7/1ÿÿÿÿ�/!Oÿÿÿÿ0(Kÿÿÿÿ’0&ÿÿÿÿÃ05ÿÿÿÿ1#ÿÿÿÿI1!!ÿÿÿÿ‹1Rÿÿÿÿø1$_ÿÿÿÿ{25ÿÿÿÿÌ2$_ÿÿÿÿO30ÿÿÿÿ˜30ÿÿÿÿ×3$ÿÿÿÿ4:ÿÿÿÿO46 ÿÿÿÿ¥4:ÿÿÿÿà4Nÿÿÿÿ35Cÿÿÿÿw58ÿÿÿÿ°5ÿÿÿÿß5)=ÿÿÿÿE63ÿÿÿÿ®6[ÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
+Þ•	0x8
+Àp<™ŽT™Œ›4¶
5¶C¶W¶p¶A�¶?Ñ¶:·L·c·v·$•·
º·È·%è·¸¸A"¸&d¸‹¸¤¸½¸Ö¸æ¸ ¹&¹F¹_¹v¹ƒ¹P–¹ç¹*ÿ¹;*ºfºFxº6¿º6öº:-»5h»,ž»DË»N¼J_¼)ª¼=Ô¼:½LM½)š½BÄ½L¾T¾j¾D�¾GÆ¾¿-¿?¿S¿k¿€¿3Ÿ¿Ó¿ê¿0ü¿-À=ÀMÀ+gÀ+“À+¿À#ëÀÁ'Á0ÁLÁcÁ(xÁ?¡Á>áÁ% Â&FÂ(mÂ)–ÂGÀÂÃÃ?Ã\ÃuÃ�Ã°ÃÉÃäÃúÃÄ&Ä=Ä,WÄ„Ä”Ä­ÄÅÄÜÄëÄÅÅ0ÅGÅ1\ÅŽÅŸÅ¬ÅÃÅÞÅ#öÅ+Æ&FÆ5mÆ£Æ¸ÆÐÆêÆÇÇ3ÇJÇ`Ç$uÇšÇ³ÇÓÇëÇ$È%È9ÈNÈ<gÈ¤È³È
ÂÈÐÈäÈùÈ É2ÉMÉ]É}É™É¹ÉÒÉëÉþÉ*Ê9ÊKÊ&]Ê„Ê0˜ÊÉÊ"ÝÊ	Ë
+Ë#ËAËZËkË„Ë"�ËÀË"ÔË#÷Ë#Ì?Ì#TÌ#xÌœÌ©ÌÇÌåÌëÌøÌÍÍ"Í
+@ÍKÍPÍ!VÍ xÍ™ÍžÍ£Í»ÍÛÍûÍÎ!Î'Î8Î?ÎEÎJÎOÎUÎYÎ"^Î�Î†Î¦ÎºÎ&ÚÎBÏDÏdÏiÏnÏuÏ{Ï€Ï’Ï™Ï±ÏÅÏÌÏåÏùÏ
+ÐÐ,Ð=ÐNÐfÐ	uÐ
Ð
�Ð
+›Ð
+¦Ð
+±Ð
+¼Ð
+ÇÐ$ÒÐ
+÷Ð#Ñ
+&Ñ1ÑCÑ![Ñ}Ñ’Ñ
+¡Ñ
¬Ñ	ºÑÄÑ
+ÕÑàÑçÑÿÑÒ+Ò:ÒQÒlÒ{Ò”Ò£ÒªÒ(ÊÒ/óÒL#ÓpÓ‚Ó+‘Ó½ÓAÙÓÔ5ÔOÔiÔ8~Ô·ÔÏÔäÔ&þÔ%ÕDÕ2_Õ?’Õ&ÒÕùÕ(ÖAÖ"TÖwÖ*—Ö6ÂÖ{ùÖru×xè×aØwØ7÷Ø:/ÙjÙ@|Ù5½ÙFóÙM:Ú4ˆÚ4½Ú=òÚ70Û4hÛ1�ÛUÏÛU%Üb{ÜbÞÜAÝaÝ&Ý¦Ý&ÀÝœçÝ,„Þ1±Þ'ãÞ$ß/0ß-`ß+Žß0ºß&ëß2à8Eà*~à©à=Éà9á:Aá6|á6³á$êáâ//â_â5tâ+ªâ$Öâûâ6ã"Qã&tã6›ã=Òã:ä:KäD†ä8Ëä9åC>å:‚å7½å8õå@.æGoæ9·æ,ñæ0ç#Oçsç=Žç-Ìç6úç1è7Mè3…è;¹è:õè(0é"Yé3|é%°é?Öé.êEê0eê1–ê'ÈêVðêGëEeë8«ë(äëc
ì4qì&¦ì2Íì&ík'í*“í*¾í4éí]îA|î?¾îGþîFïOeïbµï8ð,Qð+~ð)ªðYÔð0.ñ=_ñ3�ñ2ÑñBò,Gò(tòL�òêò4ó)=ó$gó3Œó9Àó6úó/1ôDaô&¦ôWÍôU%õ8{õ%´õ(Úõ&ö,*ö#Wö>{öBºöBýö@÷'`÷Eˆ÷9Î÷4ø3=øJqø(¼ø;åø!ù0@ùDqù/¶ù:æù@!ú@búG£ú?ëú2+û8^ûS—û'ëû.ü,Bü'oü6—ü ÎüYïü/Iý4yý5®ýNäýª3þIÞþ9(ÿ3bÿ¾–ÿ<U<’FÏPog>×F`]~¾F=‚„[3c@—MØm&7”#Ìð(&/IVW +ø5$Zo8ƒ"¼$ß'9,Cf!ª!Ì*î/	1I	/{	/«	0Û	*
+07
+<h
+i¥
+=BM=�9Î-&6"].€8¯:èF#
?j
Vª
B(D>m;¬=è4&#[@LÀI
8W+�8¼2õ9(:b3�,Ñuþ t.•.Ä$ó'0@Bq/´,ä'%9,_ŒC¦Jê@5Jv*Á%ì%<81u §(Èlñ<^<›+Ø, HM6–AÍAJQ>œJÛJ&<q<®.ë(lCv°A'6i 4¾0ó+$APJ’3Ý@!R#t.˜BÇF
+4Q%†:¬2ç3 *N 9y C³ C÷ :;!Tv!JË!5"4L"6�"P¸"/	#/9#&i#&�#5·#'í#0$5F$(|$3¥$%Ù$&ÿ$&%'F%=n%#¬%+Ð%3ü%(0&@Y&Cš&5Þ&'' <',]'gŠ'4ò'm'(A•(@×(H)Ga)K©)Iõ)L?*HŒ*CÕ*Y+5s+0©+4Ú+M,N],1¬,)Þ,)-/2-)b-+Œ-7¸-3ð-6$.9[.X•.[î.CJ/6Ž/>Å/=0*B0.m02œ0[Ï0&+1-R1,€1­1È1/ã1$2082'i28‘2"Ê2Hí2A63)x3=¢3#à3@42E4+x4#¤45È4<þ4';5%c5(‰5R²5?6FE6Œ63§61Û6D
7HR7D›7Kà7a,8[Ž8sê8g^9gÆ9B.:‚q:Tô:=I;!‡;-©;b×;b:<g�<g=0m=(ž=4Ç=5ü=O2>)‚>3¬>-à>/?H>?F‡?7Î?G@+N@$z@2Ÿ@.Ò@/A+1A)]A-‡A/µA^åAKDBF�B×B"óBC51C"gC(ŠC$³CEØCDDDcDF¨D_ïD^OE"®E*ÑE+üE'(F;PF8ŒF'ÅF'íF3G>IG-ˆG,¶GãGIHLHiH.‡H/¶HæH$I3+I_IF}I&ÄI!ëI6
J5DJ)zJ¤J¾J(ÝJK+ K LK$mK#’K.¶K.åK%L2:L3mL)¡L\ËLD(MHmMD¶MLûMXHNH¡N)êN*O ?O5`O9–O@ÐO+P6=P\tPAÑP.Q]BQM Q3îQ="RH`R<©R8æR3S4SS4ˆS0½S@îS1/TBaTL¤TAñTL3U8€U+¹U2åU<V3UVX‰VPâV.3W`bW&ÃWPêW\;XX˜XpñXAbY#¤YEÈY+ZK:Z.†Z<µZ,òZX[,x[¥["½[%à[\3&\2Z\�\4­\?â\@"]Wc]=»]*ù]5$^%Z^B€^%Ã^4é^>_<]_Cš_BÞ_;!`3]`)‘`$»`!à`'a8*acaƒa•a¤a!¹aÛa)ña,b-Hb$vb›b1®b_àb@c/Uc+…cV±cIdIRd<œd.Ùd.e/7e;ge£e¶eÊe0Üe/
f=f'Wf7f·f
Ëf.Ùfg
g"g%3g\Yg;¶gòghhh:hGh	`hjh|h�h,šhÇhÛhñh"
i0i(Mi/vi/¦i1Öi8j#Aj'ej2�j3Àjôj;k@kGkOkdktk{kƒk—k¬kÁkÓkækýkl&lDl	clml‹l	 l"ªlÍlßl)ûl/%m"Umxm�m˜m¤m¨m»mÍmßm'ñmn 6n#Wn{n•n¯nÉnãnýno1o CodoH‚o1Ëo#ýo,!pBNpX‘paêp:Lq.‡q7¶q1îq; r(\r:…r,Àr-ír's"Cs-fs”s2³sæsöst t7t!Mt$ot,”t(Át-êtIubu5uµu
+ÊuCÕuIvcvuv}v…v
£v±v>Ãv?wABw„w/ w+Ðw8üw5x$Kx!px1’xÄxãx+y.yBy[y
+hysyB’yÕy%çy
zz.=z-lzGšz3âz{"5{X{u{†{—{©{$Â{ç{!|&|58|n|	€|Š|œ|²|Ò|ì|}})}X0}	‰}“}˜}¤}³}Ê}æ}ü}~.~G~g~{~�~¥~-Ã~ñ~)C'X€�¡³º!Áã:ÿ%:€%`€†€Ÿ€A¸€;ú€C6�z�#”�,¸�=å�C#‚=g‚"¥‚7È‚<ƒ<=ƒ)zƒ5¤ƒÚƒãƒvþƒ*u„ „'²„Ú„ì„ó„ú„
+	…(…=…'O…w…”…¬…Ä…#Ü…†,†.E†,t†.¡†Ð†"í†,‡.=‡!l‡1Ž‡0À‡2ñ‡,$ˆ.Qˆ#€ˆ¤ˆÄˆ(Øˆ/‰!1‰S‰(p‰#™‰+½‰é‰,Š /ŠPŠiŠ‰Š�Š½Š#ÜŠ-‹".‹Q‹c‹v‹‚‹—‹&©‹	Ð‹FÚ‹/!ŒEQŒ—Œ-¨ŒJÖŒM!�o���¦�¹�-Ö�Ž*
Ž8ŽVŽjŽrŽA~Ž>ÀŽÿŽA�7S�B‹�!Î�ð�˜�©�Å�×�é�:þ�#9‘2]‘.�‘#¿‘1ã‘9’O’\’i’y’�’:š’+Õ’#“%“8“Q“i“,�“:®“é“	”d”p”6ƒ”;º”;ö”<2•go•b×•<:–1w–(©–$Ò–÷–/
—+=—i—…—
+Ÿ—
+ª—
+µ—À—Ý—6ù—>0˜<o˜¬˜4È˜'ý˜$%™6J™�™’™ª™Á™Ò™ê™šš&š8šJšdšš‘š¢šºš2Ùš›'&›LN›4››7Ð›0œ'9œaœ�œ–œ¨œ·œ-Ñœ+ÿœ++�*W�	‚�	Œ�
+–�
+¡�¬�È�Ô�á�ö�ž ž5žDž1Iž{ž/›žËžêž ûž'Ÿ'DŸ"lŸ&�Ÿ0¶ŸçŸ  # A 9X -’ À ,Õ a¡9d¡2ž¡4Ñ¡)¢C0¢It¢E¾¢Y£Y^£;¸£;ô£M0¤/~¤5®¤:ä¤5¥4U¥9Š¥7Ä¥9ü¥D6¦G{¦DÃ¦E§CN§-’§0À§4ñ§>&¨;e¨8¡¨*Ú¨6©/<©;l©3¨©%Ü©1ª!4ªVVª9­ª\çªAD«1†«?¸«:ø«73¬>k¬$ª¬EÏ¬u­q‹­Iý­G®4d®O™®Zé®/D¯Ot¯PÄ¯3° I°?j°:ª°&å°
+±±3±0@±%q±"—±%º±0à±!²3²L²g²|²‰²S˜²Oì²<³,[³7ˆ³À³
Â³Ð³1ß³´%´8´K´Ch´O¬´,ü´6)µ`µ$€µ_¥µ"¶((¶AQ¶“¶,±¶2Þ¶H·Z·j·"{·
+ž·>©·$è·
¸ ¸@¸¼V¸¹¹Í¹/ß¹º*ºHº*hºL“º2àº-»)A»"k»Ž»¡»¶»Ë»2Ú»
¼0¼F¼%a¼‡¼9”¼Î¼<à¼=½3[½5�½2Å½7ø½B0¾Ls¾À¾Ñ¾ë¾ó¾û¾¿H¿g¿4j¿&Ÿ¿Æ¿Ï¿
+æ¿ñ¿2
À-@ÀOnÀ¾ÀÝÀ"âÀ*Á%0Á VÁwÁ•Á�ÁC¼Á¤Â¥Â²Â ÌÂLíÂ:ÃCÃWÃlÃ‚Ã˜Ã¯ÃÌÃÝÃïÃûÃÄÄ*$ÄNOÄ[žÄúÄAþÄ@Å_Å,wÅ¤ÅÁÅ6ÙÅÆ 0Æ8QÆ+ŠÆ¶ÆÈÆØÆàÆ'õÆ)Ç(GÇpÇˆÇœÇ°ÇÄÇ×Ç
êÇøÇIÈ \È}ÈDœÈPáÈ2ÉDÉ2_É$’É·É×É5êÉ Ê!;Ê]ÊdÊ2lÊFŸÊJæÊ/1ËFaË¨Ë"ºËÝËíËMüË9JÌ;„Ì7ÀÌøÌÍ-Í<Í,OÍ$|ÍJ¡Í)ìÍ(Î%?Î(eÎŽÎ
+ªÎ,µÎâÎ)üÎ&ÏDÏ^ÏvÏ~Ï–Ï/®Ï)ÞÏÐ
Ð#,ÐPÐ'hÐ�Ð¡Ð·ÐÑÐîÐÑ#Ñ%8Ñ^Ñ{Ñ’Ñ¤Ñ7»ÑóÑÒ%(ÒNÒhÒ}Ò�Ò¢Ò¶ÒÊÒàÒJöÒJAÓJŒÓI×Ó:!Ô\Ô-{Ô;©Ô+åÔ@Õ<RÕ4�Õ6ÄÕ-ûÕ8)Ö5bÖ5˜Ö8ÎÖU×.]×>Œ×IË×hØy~Ø>øØN7ÙI†ÙdÐÙ05Ú;fÚ8¢ÚFÛÚ5"Û&XÛ.Û-®Û.ÜÛ0Ü<<Ü!yÜ›Ü!´Ü)ÖÜEÝZFÝ`¡ÝGÞZJÞU¥Þ.ûÞ,*ßhWßjÀßE+à0qà6¢àkÙàEEá‹á&©áQÐáS"âEvâ#¼â<àâ<ãeZãQÀã2ä/Eä/uä4¥ä=Úä9å0Rå7ƒå%»å'áå=	æ6Gæ@~æ¿æ2ßæç,ç
Cç
Qç
_ç
mç!{ç
�ç"«çÎç
Ýç)ëç)è?è+Tè€è�è”è™èžè£èªè½èÄè=ÊèÜé
åêóê!ë(*ëwSëlËë_8ì˜ì¸ìÐì+ðì
í)*í!TívíxíU‰í+ßíî)îEî_î"oî!’î$´îÙî÷îï ïi5ïŸï>¿ï>þï=ðbVðD¹ðEþðIDñCŽñ5ÒñSò\\òW¹ò1óNCóH’óUÛó11ôOcôV³ô
+õ%õSBõ[–õ!òõö)ö=öWö lö5�öÃöØö=êö(÷7÷G÷,b÷,�÷,¼÷"é÷ø$ø-øKødø0zøP«øOüø)Lù*vù.¡ù0Ðùdúfú}ú�úºúÓú,îúû4ûTûlûˆûœû³û3Íûüü+üGüdüvüŒü¡ü»üÒü5çüý0ý=ýXýsý$�ý+²ý'Þý5þ<þ#Qþuþ”þ¬þËþäþûþÿ)&ÿPÿiÿ‰ÿ¡ÿ(¶ÿßÿóÿ<!^m
|Šž³"Ïò
&D_˜¶É-Ú).X2m +´
+àë#þ"ATn#ˆ¬%À#æ#
+.#?#c‡&–&½äêöþ 
+@KP)V3€´¹¾#×#û$4)^pw}‚‡�‘/–Æ#Ëï#4*@_# ÄÉÎÕÝâøÿ/6Riz‹œ­¾Õ	ä
î
ü
+
+	
+	
+ 	
++	
+6	4A	
+v	[�	
+Ý	è	ú	,
+F
+[
+
j
+x
+	‰
+“
+
©
+·
+¾
+Ø
+õ
+%+Bn }
ž¬#³1×:	zD¿Õ:æ!
G<
 „
¥
À
Û
;ð
,E[:v,±Þ7ýH59~+¸*ä#%-I*w7¢ÚwZ{ÒN±hH?c£M·KSQ\¥JJMV˜RïSB?–sÖuJsÀs4¨%È;î*.HÐwEHBŽ8Ñ3
+F>>…<ÄB5DDz>¿@þ1?VqRÈVDrD·#ü# <D�J•Ià/* /Z YŠ 0ä 4!=J!Aˆ!=Ê!>"HG";�"=Ì"G
+#=R#;�#;Ì#g$~p$Xï$LH%E•%+Û%.&F6&G}&MÅ&$'@8';y'Nµ'N(3S(8‡(DÀ(')V-)B„)(Ç)>ð)4/*<d*n¡*$+]5+N“+7â+†,I¡,3ë,<-%\-„‚-3.3;.>o.|®.U+/N�/UÐ/&0dF0‡«0P316„10»1+ì1^2>w2O¶2B3@I3PŠ34Û334[D4 4JÀ4-5&95<`5L�5Jê5F56Q|6*Î6kù6ue7DÛ71 8-R8/€84°8+å8G9KY9E¥9ë97:W?:J—:Hâ:?+;~k;Yê;QD<$–<>»<]ú<CX=Fœ=Yã=X=>`–>V÷>CN?Q’?oä?:T@0�@%À@)æ@4A'EApmAEÞA<$B=aBhŸBÝC_æCHFDD�DÔDCàEC$FQhFdºFŠGJªGTõG…JHªÐH[{I©×Ip�J-òJG KUhK”¾K<SL-�L¾L6ØL4MWDMdœM:N9<NvNŒNZ¢N$ýN%"O5HOQ~OUÐO$&P$KP1pP7¢P6ÚP:Q=LQ5ŠQ7ÀQ5øQD.RŒsRXSPYSXªSJT=NT+ŒT6¸TDïTB4UEwUT½UNVsaVNÕV5$WIZWA¤WFæW<-X-jXU˜XRîXeAYD§Y4ìYX!ZOzZZÊZN%[Mt[UÂ[¤\'½\?å\?%])e]-�]A½]Sÿ]9S^8�^8Æ^6ÿ^86_o_KŽ_RÚ_S-`b�`Sä`@8a9yaP³aCb.Hb9wb—±bFIcF�c.×c!d>(dJgdD²ds÷dskebße@BfTƒfbØfX;gL”g;ág=hŒ[h èhL‰i=Öi(j?=jB}j)ÀjYêj^DkJ£k]îk.Ll.{lCªlVîl]Em9£m%ÝmUn>Yn=˜nFÖn\oZzoZÕoP0po�pZñp=Lq@Šq@ËqlrFyrCÀr@sFEs@Œs.Ís5üs<2t8ot@¨t0ét1u(Lu6uuD¬u1ñu?#vEcv*©vLÔvK!wAmw1¯w!áw4x•8xDÎxqyH…yGÎyOzNfzRµzK{\T{f±{T|lm|QÚ|<,};i}`¥}`~>g~0¦~5×~D
;RAŽPÐG!€ki€MÕ€k#�r��S‚lV‚JÃ‚NƒC]ƒF¡ƒ?èƒx(„,¡„<Î„;…!G… i…BŠ…6Í…8†>=†Q|†.Î†Vý†QT‡6¦‡SÝ‡(1ˆcZˆB¾ˆ5‰<7‰<t‰E±‰'÷‰(Š3HŠn|ŠGëŠN3‹#‚‹D¦‹9ë‹S%ŒWyŒSÑŒ_%�……�qŽ”}Ž�’�Q�²d�n‘T†‘'Û‘8’ƒ<’‹À’ˆL“�Õ“@f”5§”;Ý”F•``•3Á•Iõ•4?–?t–g´–f—Wƒ—kÛ—<G˜-„˜G²˜9ú˜64™;k™*§™7Ò™?
+švJšSÁšH›^›!y›››<µ›+ò›2œ.QœG€œFÈœF�HV�aŸ�`žCbž7¦ž7Þž3ŸKJŸE–Ÿ2ÜŸ6 :F T� ;Ö /¡(B¡ck¡Ï¡(í¡6¢7M¢$…¢2ª¢BÝ¢" £\C£. £'Ï£;÷£B3¤5v¤$¬¤+Ñ¤/ý¤&-¥6T¥'‹¥+³¥*ß¥4
+¦5?¦,u¦=¢¦>à¦*§sJ§b¾§c!¨P…¨TÖ¨s+©^Ÿ©5þ©34ª*hªO“ªBãªL&«1s«P¥«rö«[i¬?Å¬o­pu­Eæ­S,®]€®FÞ®K%¯Wq¯AÉ¯I°AU°W—°5ï°@%±Mf±A´±Lö±=C²K�²LÍ²V³Cq³zµ³e0´A–´yØ´0Rµ{ƒµdÿµ`d¶ƒÅ¶NI·+˜·XÄ·5¸OS¸0£¸NÔ¸<#¹r`¹7Ó¹º2"º<Uº%’ºJ¸º@»-D»?r»E²»Cø»i<¼Q¦¼0ø¼M)½;w½I³½6ý½>4¾^s¾cÒ¾m6¿c¤¿YÀCbÀ4¦À,ÛÀ Á.)Á>XÁ*—ÁÂÁ
ÖÁäÁ2úÁ#-Â2QÂ;„ÂAÀÂ6Ã9Ã8MÃf†Ã íÃ;Ä2JÄi}ÄYçÄ]AÅQŸÅ;ñÅ;-ÆKiÆNµÆÇÇ0ÇCBÇ3†ÇºÇ0×ÇDÈMÈfÈ.uÈ¤È
µÈÃÈ$ÓÈiøÈ>bÉ¡É&¸ÉßÉ âÉÊÊ	3Ê=ÊOÊaÊ7nÊ¦Ê¼Ê#ÖÊ"úÊ'Ë<EË6‚ËF¹ËCÌODÌ0”Ì1ÅÌ>÷ÌB6ÍyÍA�ÍÏÍØÍáÍúÍÎÎ Î4ÎIÎ]ÎoÎ‚ÎšÎ²Î(ÆÎ'ïÎ
+Ï""ÏEÏ	bÏ*lÏ—Ï!©Ï(ËÏ0ôÏ,%Ð&RÐ	yÐƒÐ—Ð›Ð´ÐÆÐØÐ0êÐÑ):Ñ+dÑ�Ñ¬ÑÆÑàÑúÑÒ.ÒHÒ,_Ò&ŒÒK³Ò<ÿÒ-<Ó5jÓO ÓuðÓvfÔDÝÔ4"Õ:WÕ<’Õ_ÏÕ1/ÖJaÖC¬ÖLðÖ.=×+l×8˜×%Ñ×7÷×/ØEØ`Ø%~Ø¤Ø"¿Ø&âØ4	Ù/>Ù5nÙM¤Ù#òÙBÚYÚvÚJ†ÚVÑÚ(Û:ÛBÛJÛ
hÛvÛMˆÛNÖÛc%Ü#‰Ü?­Ü4íÜD"ÝgÝ>„Ý;ÃÝ:ÿÝ':Þ'bÞMŠÞØÞøÞß
+"ß2-ßT`ßµß"Çßêß$üß@!à1bàQ”à<æà/#á4Sáˆá§á»áÏááá$ÿá*$â*OâzâHŒâÕâçâùâã#ãBã%`ã†ã—ã©ãk°ãä%ä+ä:äKä!aäƒäšä®äÍäéäå"å7å!Så9uå¯åÃåØåðåæ8/æhæxæŠæœæ£æ*ªæ!Õæ=÷æ-5ç,cç#�ç´çOÏç[èR{è,ÎèEûè2AéRtéXÇéA ê:bê@�êHÞêH'ë2pëA£ë	åë!ïë™ì7«ìãì0õì&í8í?íFíXí8kí¤í3¶íêí	î$î=î$Vî{î3”î/Èî3øî/,ï\ï#{ï3Ÿï/Óï%ð5)ð=_ð9�ð3×ð/ñ$;ñ `ñ�ñ+—ñ1Ãñ!õñò)6ò$`ò3…ò¹ò7Óò!ó-ó!Góió#}ó$¡ó(Æó3ïó&#ôJô\ôyôŒô«ô6Àô÷ô\ýô2Zõ~�õö/ökNösºö(.÷W÷p÷#Œ÷0°÷á÷7ê÷C"øfø„øŒøO˜øIèø2ù[DùH ùZéù0Dú1uú»§ú'cû‹û�û¯ûCÇû5ü2Aü=tüQ²ü>ýFCýŠý—ý¤ý¶ý¾ýAÞý> þ._þŽþ§þÂþÚþ6ôþK+ÿ!wÿ™ÿu©ÿB2AuA·;ùt5oªA2\)�'¹á=ú=8v–µÆ×7è5 ZVY±R&^S…GÙ@!Lb¯ÁÞù".K^q„—¶Õè"ú66T‹3©bÝG@	Dˆ	=Í	:
+'F
+'n
+–
+
«
+¹
+>Ø
+<<T<‘	Î	Ø
+â
+í*ø#4G ^Ž£²4·'ì>
S
p
!ƒ
,¥
8Ò
3C?7ƒ*»$æ#B@`1¡#ÓG÷ƒ?GÃ6<B*HªKóf?|¦|#S PôpE@¶H÷Q@<’SÏp#N”pãUTfª]Zo\ÊB'EjI°OúKJG–1ÞT3e<™6Ö&
24,g…”Puk\á8>^wIÖH Li&¶eÝpC s´ P(!,y!F¦!_í!pM"2¾"bñ"YT#1®#$à#D$?J$9Š$Ä$*Ð$û$>%3M%4�%4¶%Yë%,E&r&‹&©&È&Ú&hë&tT'&É'0ð'D!(f(h(w(;‡(Ã(×(ê(ý(])kx)5ä)C*!^*&€*y§*!+*=+Rh+»+5Û+:,NL,›,«,#¼,à,]ì,0J-{-$Ž-³-éÌ-Ý¶.”/4¨/"Ý/$0/%09U0_�0Cï06316j1-¡1Ï1æ1ü12` 2	�29‹2 Å2Eæ2,39?3y3@�3LÎ3G4[c4H¿4F5SO5]£56(6=6L6X6t6oz6ê6Mî6.<7k7x7
–7¤7E¿7>8mD8(²8Û8(á8;
+92F9@y9Fº9:%
:p3:Á¤:f;r;:’;gÍ;	5<?<U<k<ƒ<›<´<Ó<å<ø<	==3=B<=Y=sÙ=M>XQ>ª>"È>Eë>1?Q?Ij?&´?-Û?C	@MM@›@³@Ê@Ö@*î@,A+FArA‡AšA®AÂAÕAèA$÷A…B#¢B*ÆBSñBaEC§C"ºC2ÝC/D+@DlD_„DäD=EBEJEGSE\›E]øE?VFX–FïF+G3GCGSRGB¦G5éGHHhH†H¦H¶HDÊH<IWLI=¤I8âI5J;QJ"�J°J8½JöJ4K%HK$nK“K¯K·KÑKHëK54LjL‚L;’LÎL6ìL#M;MXM#tM˜M³M"¿M8âM#N?N^NzNA•N"×N#úN7O%VO|O‘O£O¶OÊOÞOôO`
+P]kPYÉP\#QM€QÎQ2îQI!R<kRO¨RHøR9AS?{S7»SEóSG9TF�TAÈTm
+UCxUN¼U\VŒhVžõVO”WbäW]GX~¥X9$YA^YA YTâYF7Z/~Z;®Z/êZ6[2Q[@„[/Å[õ[(\29\Tl\XÁ\{]R–]zé]wd^8Ü^6_uL_ƒÂ_VF`F�`Jä`z/a^ªa/	b-9bcgb‰ËbjUc0ÀcIñcI;d…djeApe1²e=äeN"fNqfGÀfFgKOg9›g2Õg^hVghj¾h#)iBMi�i-”iÂiÖiêiýi0jAj/Tj„j™j8­j8æjk::kukŠk�k”k™kžk¥k¾kÅkSËk]›j7ìŸ±ß4¾ˆKi¿z¹Ò°ZÜÐ†©œË‹e£æÌµ Þ½W³1üÑÃO”�+·-Øˆæ>6ØK¹Å5.ŽÚÞüÙ-ÿ¨¡8éÊà”)é9hfBC”5ðpHÄ•ír~�}u‚N}lACˆÔHQ~à
+CÔõùÀáÖE�Pñ¤»Ãÿ±ë]ÈÚçi[3ªÆ3-Ph–ž‡Ïw“FR³âãk_é‰%$¡*—²5¨Q0q`µôŽQy”+“ùvå4GåìÄªÙõÓÞŽ+ÐæÁñÆàeøç{Dík-­PZ»)r
+Q:»‘Œ´@½ªJ(ˆSðTfŠÓ¡‘—ÏúM¼°ý#,#æÁ.z,¤_ÑbŠ¼úñ>—˜îµñ%„ÿŸÀ¶Y÷÷¤@¯wRO”À‹ÈTxëL0–‘Û�»ÁäŸ{lK ÐÍz#ÅxMH}õøÖd6ƒ0a‰L.‚*òøÝÚ¯ÐÂ¯ÂcÃ mg�°\è^wÂØaf…Fek_|YÊd±+x¹—v7¾˜%A<‚ÄÒ
+÷£�"àª5…È§�•„�×
+[nq@ÊýÔ…–IÙá]WÞ¬¥3�*™äï|˜Y­¹6ÇÑPÆW_ì"¸œòâ‘‰çµ$É}Á4Ì/Ì+,¯ÆMÑs‚àœŸÙt)Š¦C´žêþï×éV¿@‡É(Ø?¢B¥E©�íË2c	Óè}ŸC(ç?Ã†	îók�b§ãL	—kÚXö�	uK:±£ähmùß;’˜Î®ô™Rêp XËUqÊô÷Ÿg*=d•¬‡Gx�ScÁ�I«]&d¸à`1ÛðUò:ãäÜØÚ"=]h²°jÕ°.�Ö�HI=¬‡ì?…CÍê¦NîºNéWá7¸+I
+ë™>“Í/sŽšûi>Œ’“i4½!¤|!ÉšêäŒ¿>À²'pÕÛìn‡A6žK8ºy½¥~W'‹·ëheb’!÷«4Æ(s·L‹®Î·ø§¶¯`orfãa
ëöÎZFŠAGÚO©Ù='ËBLèE[ºÄB&$ÒRn¬/öa�¨ÿºkÝ~|-ý"ºÔ!Ãþú,9y%€É’Ú?õõüVêF›óKô&†TtE'¢m8Jœs‡ÝClO™²ˆU„›êŠ¢"âdS#�†ÓïèDÑÜw«VƒùÕMZ¶b&jžiÏÛ«’ÍB¿Å´Ý¢@V[(÷çúpôº]ÙÀ€¶Ä)mX@MŠmzÍtïÅcçÙ9‹ìl2$6ª�[ nžîµåH ÂP	�‘Ga€üâ%#»‚U•8Ýyó•t×éòšjj�³Š¼1Æ�=rªu<±Ô:ÍþGo�×nX~ržU:;vŸ±ð¸Q×A&$= ‡_ôÿÓ·tÑÇãÜVþ{g³4Äg,¸ŽG×¥�ö4���‰û¶‘è¸õ5£¾\â5Ž£åãÔƒ¯ñÃÂÈ%Ø½n";–î°ÈÿžSO}ÂÈìM(móÞ1á…û\«¢Õv¨·›´pÂ´Ï³\S_/«Zá{ý†ãÇOzæËf¼T•/—­ùg(ÒÊ¹8¦2H±þ…Üò1D%š\˜0½ß¤zÆEZ3ÐL¢R§EéW
+5;ÎyG:Ûe‰n‰^J<wÐö!N‹
•ÇÅö²üÏs'ÌƒXob×¬¬O1PI†o+íDþ¶ÕÜ<�iÕâN¼9î‘ÊLŽ­;ô)F¡r{]›ögßÖ#y8
<Y.*¨ÜcV°ý™™X„p¤qQ÷ ùNJˆ.¥Àètš^ÇFßhÝÝÊÎ a»
¦KþÖ{ð�£	¾œ2g`¡À­†¿á0¼�ctÈ€x“‚­ÿøz¨©Óål?fTƒ[®cuƒ)€¿SRÕDï¥l7 ³?ßYš3¤·–aqÅ*”§^ý_—ñ2$`}à;ÉËëçùëI/ób)oÓúƒ¡8ŒÛ&å!˜­U6¼ h\ºE¦o²òpÖNí>d�û¬�ýû`0ÅDX øw³v´®^v˜‹Á«¡`®ä&¦úÒÐ' M-¶!|óŒuRÞîï’äÞšT*J77sÎÉò99új¾	¦>y@Ì„„¢Ôœø#;Ã¥™dsAr=	Œ9q\¯B€/æÉü¸Òµ £Pœ…6Q�
Ò¾®F|?|{1ZHØvåSífuóêÇ[‰D~›Tˆ-:3Ñû€áæ,¹ÎÄ®m©oAü²„
©ujÏ©~¹ÖßËûâBw3xÛkð´õ<eÍï“<Y,YŒ§”Ìq§70’è
2ílÁ›»¿^Iñ¨ªµ�–W‚^UÇ“ðJ.ÌbÏVJ"½$
+2x–ie'¾�l&l-lÄ�à�ô�žž0žDžXžlž€ž”ž¨ž¼žÐžäžøžŸ Ÿ4ŸHŸdŸxŸŒŸ Ÿ´ŸÈŸÜŸðŸ  4 H \ x œ ¸ Ì à ô ¡$¡8¡L¡`¡|¡�¡¤¡¸¡Ì¡à¡ô¡¢¢0¢L¢h¢|¢�¢´¢È¢Ü¢ð¢££,£H£d£€£”£¨£¼£Ð£ä£ø£¤ ¤4¤H¤\¤p¤„¤˜¤¬¤À¤Ô¤è¤ü¤¥4¥H¥\¥x¥Œ¥ ¥´¥È¥Ü¥ð¥¦¦,¦H¦d¦x¦”¦°¦Ì¦à¦ô¦§$§@§\§p§„§ §´§È§Ü§ð§¨¨,¨@¨\¨p¨„¨ ¨´¨Ð¨ä¨ø¨© ©4©H©\©p©„©˜©Ä©à©ü©ª,ª@ªTªhª|ª�ª¤ª¸ªÌªàªôª««0«D«X«l«€«œ«°«Ä«Ø«ì«¬¬(¬<¬P¬l¬€¬”¬°¬Ô¬ð¬­­,­@­\­p­„­˜­´­È­Ü­ð­®®,®@®T®h®„® ®´®È®ì®¯¯(¯<¯P¯d¯€¯œ¯¸¯Ì¯à¯ô¯°°0°D°X°l°€°”°¨°¼°Ð°ä°ø°± ±4±P±l±€±”±°±Ä±Ø±ì±²²(²<²P²d²€²œ²°²Ì²è²³³,³H³\³x³”³¨³¼³Ø³ì³´´(´<´P´d´x´”´¨´¼´Ø´ì´µµ0µDµXµlµ€µ”µ¨µ¼µÐµüµ¶4lÿÿÿÿVl"ÿÿÿÿŒl ÿÿÿÿÆl ÿÿÿÿmÿÿÿÿ6m ÿÿÿÿ]m5ÿÿÿÿ™m%ÿÿÿÿÅm)ÿÿÿÿõm(ÿÿÿÿ$n/ÿÿÿÿZnÿÿÿÿvn'ÿÿÿÿ¤nÿÿÿÿÜn-ÿÿÿÿ
+oÿÿÿÿ'o7ÿÿÿÿ`oÿÿÿÿ‹o ÿÿÿÿ³o%ÿÿÿÿðoÿÿÿÿ$p*ÿÿÿÿOp.ÿÿÿÿp)1ÿÿÿÿÙp%ÿÿÿÿÿp9ÿÿÿÿ9q
+2ÿÿÿÿuq"ÿÿÿÿ©q3ÿÿÿÿÝqÿÿÿÿr9ÿÿÿÿTr%ÿÿÿÿ‡r
+HÿÿÿÿÛr
+/ÿÿÿÿ2s)ÿÿÿÿss
+6ÿÿÿÿ³s
+>ÿÿÿÿûs
+0ÿÿÿÿ5t
+Fÿÿÿÿ…t
+ÿÿÿÿÇt
++ÿÿÿÿüt
+ÿÿÿÿ$u
+"ÿÿÿÿPu@)ÿÿÿÿ¿u
+/ÿÿÿÿøu
+ ÿÿÿÿ"v-ÿÿÿÿiv6ÿÿÿÿµv6ÿÿÿÿw
+7ÿÿÿÿAw
+?ÿÿÿÿŠw
+ÿÿÿÿ¯w4ÿÿÿÿüw+ÿÿÿÿ4x-ÿÿÿÿnx3ÿÿÿÿ¢x0ÿÿÿÿéx 0ÿÿÿÿiy
+-ÿÿÿÿ y(ÿÿÿÿÜy
+-ÿÿÿÿzÿÿÿÿEz6ÿÿÿÿ‚z>ÿÿÿÿÇz#ÿÿÿÿòzÿÿÿÿ.{ÿÿÿÿj{
+2ÿÿÿÿ¦{
+.ÿÿÿÿÞ{Fÿÿÿÿ%|
+2ÿÿÿÿa|
+2ÿÿÿÿ�|
+2ÿÿÿÿÙ|
+2ÿÿÿÿ}
+2ÿÿÿÿQ}
+2ÿÿÿÿ�}FÿÿÿÿÔ}
+9ÿÿÿÿ~
+7ÿÿÿÿX~
+9ÿÿÿÿ›~Fÿÿÿÿâ~Fÿÿÿÿ)	2ÿÿÿÿd+ÿÿÿÿ–.ÿÿÿÿË+ÿÿÿÿý-ÿÿÿÿ2€0ÿÿÿÿ€€"ÿÿÿÿ¿€!ÿÿÿÿò€
+*ÿÿÿÿ(�
+Aÿÿÿÿs�
+dÿÿÿÿá�
+$ÿÿÿÿ‚1ÿÿÿÿK‚1ÿÿÿÿ}‚
+ÿÿÿÿš‚5ÿÿÿÿè‚&ÿÿÿÿƒ=ÿÿÿÿlƒ&ÿÿÿÿÀƒ+ÿÿÿÿÿƒÿÿÿÿ3„]ÿÿÿÿ „!5ÿÿÿÿ÷„
+ÿÿÿÿ2…Kÿÿÿÿ~…<"ÿÿÿÿÜ…
+ÿÿÿÿ†$ÿÿÿÿ?†ÿÿÿÿ‡†;ÿÿÿÿï†?ÿÿÿÿM‡ÿÿÿÿv‡2ÿÿÿÿ°‡ÿÿÿÿá‡ÿÿÿÿˆ=ÿÿÿÿbˆIÿÿÿÿÅˆ(ÿÿÿÿ‰Iÿÿÿÿf‰!ÿÿÿÿœ‰!ÿÿÿÿÌ‰ÿÿÿÿý‰+ÿÿÿÿ*Š=ÿÿÿÿhŠ+ ÿÿÿÿµŠ5ÿÿÿÿëŠ@ÿÿÿÿ0‹
+%ÿÿÿÿ_‹
+%ÿÿÿÿŽ‹7ÿÿÿÿÆ‹-ÿÿÿÿô‹ÿÿÿÿŒ<ÿÿÿÿ\Œ-ÿÿÿÿ™Œ(�ÿÿÿÿN�
+.ÿÿÿÿ†�
ÿÿÿÿ•�
+"	ÿÿÿÿè�B#$ÿÿÿÿqŽ#&ÿÿÿÿ»Ž$ÿÿÿÿåŽ30ÿÿÿÿH�#ÿÿÿÿ‡�"ÿÿÿÿÆ�ÿÿÿÿ�.ÿÿÿÿ6�6ÿÿÿÿs�7ÿÿÿÿ±�6ÿÿÿÿî�1ÿÿÿÿ&‘Cÿÿÿÿp‘ÿÿÿÿ–‘AÿÿÿÿÞ‘ÿÿÿÿ’5ÿÿÿÿQ’/ÿÿÿÿ�’FÿÿÿÿÉ’(ÿÿÿÿ“#	ÿÿÿÿ:“+ÿÿÿÿ�“&%ÿÿÿÿÌ“)	ÿÿÿÿþ“FÿÿÿÿF”K.ÿÿÿÿ¿”-ÿÿÿÿí”Kÿÿÿÿ9•
+<ÿÿÿÿ•*ÿÿÿÿÅ•Fÿÿÿÿ–ÿÿÿÿ8–=ÿÿÿÿŽ–.ÿÿÿÿÌ–
+`ÿÿÿÿ8—
+&<ÿÿÿÿ¦—6ÿÿÿÿõ—
+@ÿÿÿÿ?˜
+Bÿÿÿÿ‹˜
+5ÿÿÿÿÊ˜
+Eÿÿÿÿ™
+#ÿÿÿÿd™
+.ÿÿÿÿœ™
+&ÿÿÿÿÌ™
+*ÿÿÿÿš`;ÿÿÿÿ¡š
+9ÿÿÿÿäš
+*ÿÿÿÿ›Fÿÿÿÿ}›@ÿÿÿÿÓ›@ÿÿÿÿ.œ
+=ÿÿÿÿuœ
+MÿÿÿÿÌœ
+"ÿÿÿÿøœCÿÿÿÿX�;ÿÿÿÿ¡�<ÿÿÿÿì�@ÿÿÿÿ-ž7ÿÿÿÿƒž "9ÿÿÿÿŸ
+0ÿÿÿÿIŸ+ÿÿÿÿ†Ÿ
+4ÿÿÿÿÄŸ'+ÿÿÿÿ 8ÿÿÿÿU Vÿÿÿÿ² 'ÿÿÿÿá !ÿÿÿÿ(¡!%ÿÿÿÿu¡
+YÿÿÿÿØ¡
+6ÿÿÿÿ¢Vÿÿÿÿo¢
+2ÿÿÿÿ«¢
+2ÿÿÿÿç¢
+2ÿÿÿÿ#£
+2ÿÿÿÿ_£
+2ÿÿÿÿ›£
+2ÿÿÿÿ×£Xÿÿÿÿ0¤
+9ÿÿÿÿs¤
+7ÿÿÿÿ´¤
+8ÿÿÿÿö¤XÿÿÿÿO¥Xÿÿÿÿ¨¥	<ÿÿÿÿí¥,ÿÿÿÿ ¦0ÿÿÿÿW¦8ÿÿÿÿ–¦=ÿÿÿÿÛ¦@ÿÿÿÿ:§'!ÿÿÿÿ‚§'ÿÿÿÿ¼§
+3ÿÿÿÿû§
+Wÿÿÿÿ\¨
+€ÿÿÿÿæ¨
+1ÿÿÿÿ!©8ÿÿÿÿd©Fÿÿÿÿ«©
+ÿÿÿÿÍ©Pÿÿÿÿ<ª2ÿÿÿÿ|ªHÿÿÿÿâª7.ÿÿÿÿW«6
+ÿÿÿÿ¥«$ÿÿÿÿá«mÿÿÿÿ`¬!<ÿÿÿÿ¾¬
+%ÿÿÿÿ­Yÿÿÿÿa­O-ÿÿÿÿÝ­
+ÿÿÿÿ®4ÿÿÿÿb®1ÿÿÿÿÈ®!OÿÿÿÿJ¯(Kÿÿÿÿ½¯&ÿÿÿÿî¯5ÿÿÿÿ6°#ÿÿÿÿt°!!ÿÿÿÿ¶°Rÿÿÿÿ#±$_ÿÿÿÿ¦±5ÿÿÿÿ÷±$_ÿÿÿÿz²0ÿÿÿÿÃ²0ÿÿÿÿ³$ÿÿÿÿ>³:ÿÿÿÿz³6 ÿÿÿÿÐ³C"ÿÿÿÿ7´:ÿÿÿÿr´NÿÿÿÿÅ´
+6ÿÿÿÿµ
+,ÿÿÿÿ;µCÿÿÿÿµ8ÿÿÿÿ¸µÿÿÿÿçµPÿÿÿÿN¶)=ÿÿÿÿ´¶Çÿÿÿÿ—·
+<ÿÿÿÿÝ·ÿÿÿÿí·3ÿÿÿÿV¸B %ÿÿÿÿÝ¸04ÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
 	Invalid Export Address Table rva (0x%lx) or entry count (0x%lx)
 	Invalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)
 	Invalid Ordinal Table rva (0x%lx) or entry count (0x%lx)
 	Name Pointer Table 			Ordinal Table 				[%4ld] <corrupt offset: %lx>
 	[Name Pointer/Ordinal] Table	%08lx
-	code-base %08lx toc (loadable/actual) %08lx/%08lx
 	non-TLS: %pA	reloc %4d offset %4x [%4lx] %s	vma:  Hint/Ord Member-Name Bound-To
 
 
@@ -174,10 +194,6 @@ Exec Auxiliary Header
 
 Export Address Table -- Ordinal Base %ld
 
-Function descriptor located at the start address: %04lx
-
-No reldata section! Function descriptor not decoded.
-
 Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Program Header:
@@ -204,12 +220,10 @@ There is a first thunk, but the section
 
 There is an export table in %s at 0x%lx
 
-There is an export table in %s, but it does not fit into that section
+There is an export table in %s, but contents cannot be read
 
 There is an export table in %s, but it is too small (%d)
 
-There is an export table in %s, but that section has no contents
-
 There is an export table, but the section containing it could not be found
 
 There is an import table in %s at 0x%lx
@@ -245,7 +259,8 @@ ppcboot header:
     psect idx 3: %u, offset 3: 0x%08x %08x
     psect: %u, offset: 0x%08x %08x
     routine name: %.*s
-   %02u    (type: %3u, size: 4+%3u):    *unhandled* cmd %u
+   %02u    (type: %3u, size: %3u):    *unhandled* cmd %u
+   Erroneous length
    Error: The compile date is truncated
    Error: The length is less than the length of an EEOM record
    Error: The length is less than the length of an EMH record
@@ -254,7 +269,6 @@ ppcboot header:
    Error: The module version is missing
    Error: The module version is too long
    Error: The record length is less than the size of an EMH_MHD record
-   Error: length larger than remaining space in record
    alignment  : 2**%u
    alloc (len)   : %u (0x%08x)
    alloc (len): %u (0x%08x)
@@ -320,25 +334,13 @@ ppcboot header:
    vector      : 0x%08x
    version mask: 0x%08x
    version:    %x
-  %s (len=%u+%u):
+  %s (len=%u):
   %u: size: %u, flags: 0x%02x, name: %.*s
   EEOM (len=%u):
   EGSD (len=%u):
   EGSD entry %2u (type: %u, len: %u):   EMH %u (len=%u):   base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x   base_va : 0x%08x
   bitcount: %u, base addr: 0x%08x
-  branch         %lu
-  branch toc adj %lu
-  branch notoc   %lu
-  branch both    %lu
-  long branch    %lu
-  long toc adj   %lu
-  long notoc     %lu
-  long both      %lu
-  plt call       %lu
-  plt call save  %lu
-  plt call notoc %lu
-  plt call both  %lu
-  global entry   %lu  calls:
+  calls:
   chgprtoff : %5u
   codeadroff: %5u, lpfixoff  : %5u
   fixuplnk: 0x%08x %08x
@@ -354,22 +356,22 @@ ppcboot header:
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   size : %u
-  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> BPAGE: %u COM COMM Change Protection (%u entries):
+  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> <Unrecognised flag bits set> BPAGE: %u COM COMM Change Protection (%u entries):
  Code Address Reference Fixups:
  DEF EXE FPU support required:  First address : 0x%08x 0x%08x
  Fourth address: 0x%08x 0x%08x
- GBL Glue code sequence LIB Linkage Pairs Reference Fixups:
+ GBL LIB Linkage Pairs Reference Fixups:
  MACH-O header:
- NOMOD NORM OVR PIC QVAL RD REL Register restore millicode Register save millicode Resources start at offset: %#03x
+ NOMOD NORM OVR PIC QVAL RD REL Resources start at offset: %#03x
  SHR Second address: 0x%08x 0x%08x
  Shareable images:
  Shared image  : 0x%08x 0x%08x
  String table starts at offset: %#03x
  Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d
  Third address : 0x%08x 0x%08x
- UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [FDPIC ABI supplement] [FPA float format] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [g-float] [hard-float ABI] [interworking enabled] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] alignment of 8-byte entities:  corrupted GST
- debug module table : vbn: %u, size: %u
+ UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [FDPIC ABI supplement] [FPA float format] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [g-float] [hard-float ABI] [interworking enabled] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] alignment of 8-byte entities:  debug module table : vbn: %u, size: %u
  debug symbol table : vbn: %u, size: %u (0x%x)
+ failed to convert GOTPCREL relocation against '%s'; relink with --no-relax
  fixup info rva:  flags: 0x%04x global symbol table: vbn: %u, records: %u
  ident: 0x%08x, name: %.*s
  ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u
@@ -395,35 +397,55 @@ ppcboot header:
      		Address  Length   Length   32b exc  Handler   Data
  vma:            Hint    Time      Forward  DLL       First
                  Table   Stamp     Chain    Name      Thunk
-#<invalid error code>%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
-%03x %*.s Entry: %C: warning: relocation to "%s" references a different segment
+#<invalid error code>%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC
+%%X%%P: unresolvable %s relocation against symbol `%s'
+%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
+%03x %*.s Entry: %F%P: %pB(%pA): error: need linked-to section for --gc-sections
+%F%P: %pB(%s): error opening thin archive member: %E
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s'
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB
+%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate compact relative reloc section
+%F%P: %pB: failed to allocate memory for section `%pA'
+%F%P: %pB: failed to allocate relative reloc record
+%F%P: %pB: failed to finish relative relocations
+%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed
+%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)
+%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.
+%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: auto overlay error: %E
 %F%P: can not build overlay stubs: %E
 %F%P: corrupt input: %pB
+%F%P: discarded output section: `%pA'
 %F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie
-%F%P: failed to convert GOTPCREL relocation; relink with --no-relax
-%F%P: failed to create BND PLT section
 %F%P: failed to create GNU property section
 %F%P: failed to create GOT PLT .eh_frame section
 %F%P: failed to create GOT PLT section
 %F%P: failed to create GOT sections
 %F%P: failed to create IBT-enabled PLT section
 %F%P: failed to create PLT .eh_frame section
+%F%P: failed to create PLT .sframe section
 %F%P: failed to create VxWorks dynamic sections
 %F%P: failed to create ifunc sections
+%F%P: failed to create second PLT .sframe section
 %F%P: failed to create the second PLT .eh_frame section
+%F%P: failed to size relative relocations
 %F%pA: failed to align section
 %F%pB: PC-relative offset overflow in GOT PLT entry for `%s'
 %F%pB: PC-relative offset overflow in PLT entry for `%s'
 %F%pB: branch displacement overflow in PLT entry for `%s'
 %H __tls_get_addr lost arg, TLS optimization disabled
 %H arg lost __tls_get_addr, TLS optimization disabled
+%H: %s against %pT is not supported
 %H: %s against `%pT': error %d
 %H: %s for indirect function `%pT' unsupported
+%H: %s out of range
 %H: %s references dynamic symbol with nonzero addend
 %H: %s references optimized away TOC entry
 %H: %s reloc against `%s': error %d
+%H: %s reloc unsupported here
 %H: %s reloc unsupported in shared libraries and PIEs
 %H: %s used with TLS symbol `%pT'
 %H: %s used with non-TLS symbol `%pT'
@@ -445,23 +467,26 @@ ppcboot header:
 %H: error: %s against `%s' not a multiple of %u
 %H: error: %s not a multiple of %u
 %H: fixup branch overflow
+%H: got/toc optimization is not supported for %s instruction
 %H: non-zero addend on %s reloc against `%s'
 %H: reloc against `%s' references a different segment
 %H: reloc against `%s': %s
 %H: relocation %s for indirect function %s unsupported
+%H: relocation %s returns an unrecognized value %x
 %H: relocation references symbol not defined in the module
 %H: relocation to `%s+%v' may have caused the error above
-%H: toc optimization is not supported for %s instruction
+%H: relocation type %u is not supported
 %H: unresolvable %s against `%pT'
 %H: unresolvable %s relocation against symbol `%s'
 %H: warning: %s unexpected insn %#x.
+%H: warning: relocation to "%s" references a different segment
 %P%F: --relax and -r may not be used together
 %P%X: can not read symbols: %E
-%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC
 %P%X: read-only segment has dynamic relocations
-%P: %H: %s relocation unsupported for bss-plt
 %P: %H: error: %s with unexpected instruction %x
 %P: %pB: %s is not supported for `%pT'
+%P: %pB: note: the message above does not take linker garbage collection into account
+%P: %pB: warning: missing %s
 %P: %pB: warning: relocation against `%s' in read-only section `%pA'
 %P: %pB: warning: relocation in read-only section `%pA'
 %P: cannot find opd entry toc for `%pT'
@@ -470,20 +495,32 @@ ppcboot header:
 %P: linkage table error against `%pT'
 %P: multiple entry points: in modules %pB and %pB
 %P: relocatable link is not supported
-%P: warning: creating a DT_TEXTREL in a shared object
+%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s
+%P: warning: creating DT_TEXTREL in a PDE
+%P: warning: creating DT_TEXTREL in a PIE
+%P: warning: creating DT_TEXTREL in a shared object
 %P: warning: text relocations and GNU indirect functions may result in a segfault at runtime
-%X%C: relocation to "%s" references a different segment
+%X%H: %s against `%s': error: relocation applies outside section
+%X%H: %s against `%s': error: relocation target address is odd
+%X%H: %s against `%s': internal error: unexpected relocation result %d
 %X%H: @local call to ifunc %s
 %X%H: cannot convert branch between ISA modes to JALX: relocation out of range
 %X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC
+%X%H: relocation to "%s" references a different segment
 %X%H: unsupported JALX to the same ISA mode
 %X%H: unsupported branch between ISA modes
 %X%H: unsupported bss-plt -fPIC ifunc %s
 %X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled
+%X%P: %H: %s relocation unsupported for bss-plt
 %X%P: %pB(%pA): error: relocation for offset %V has no value
 %X%P: %pB(%pA): relocation "%pR" goes out of range
 %X%P: %pB(%pA): relocation "%pR" is not supported
 %X%P: %pB(%pA): relocation "%pR" returns an unrecognized value %x
+%X%P: %pB(%pA): relocation is not supported
+%X%P: %pB(%pA): relocation out of range
+%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation
+%X%P: %pB: error: missing %s
+%X%P: attempted static link of dynamic object `%pB'
 %X%P: internal error: out of range error
 %X%P: internal error: unknown error
 %X%P: internal error: unsupported relocation error
@@ -494,22 +531,26 @@ ppcboot header:
 %X%P: stack/lrlive analysis error: %E
 %X%P: text relocations and GNU indirect functions will result in a segfault at runtime
 %X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB
-%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections%pA has both ordered and unordered sections%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
+%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
 %pA:0x%v not found in function table
-%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
+%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): error: internal relocs missing for secondary reloc section%pB(%pA): error: reloc table entry %zu is empty%pB(%pA): error: secondary reloc %zu is of an unknown type%pB(%pA): error: secondary reloc %zu references a deleted symbol%pB(%pA): error: secondary reloc %zu references a missing symbol%pB(%pA): error: secondary reloc section has non-standard sized entries%pB(%pA): error: secondary reloc section has zero sized entries%pB(%pA): error: secondary reloc section is empty!%pB(%pA): error: secondary reloc section processed twice%pB(%pA): info section index cannot be set because the section is not in the output%pB(%pA): info section index is invalid%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): link section cannot be set because the output file does not have a symbol table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): relocation %zu has invalid symbol index %lu%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
 %pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s%pB, section %pA:
-  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s flag mismatch with previous modules%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
-  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: BE8 images only valid in big-endian mode%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS sections are not adjacent:%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: aout header specifies an invalid number of data-directory entries: %ld%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol definition: `Main' set to %s rather than the start address %s
-%pB: bad symbol index: %d%pB: base-plus-offset relocation against register symbol: %s in %pA%pB: base-plus-offset relocation against register symbol: (unknown) in %pA%pB: can not represent section `%pA' in a.out object file format%pB: can not represent section for symbol `%s' in a.out object file format%pB: can't link %s modules with %s modules%pB: can't link RVE with other target%pB: cannot allocate file name for file number %d, %d bytes
-%pB: cannot create stub entry %s%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
+  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s flag mismatch with previous modules%pB: %s local symbol at index %lu (>= sh_info of %lu)%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
+  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: Adjusting branch at 0x%V towards "%s" in section %s
+%pB: BE8 images only valid in big-endian mode%pB: C_STAT isn't supported by XCOFF64%pB: Cannot create stub entry '%s'%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Number of symbols in input file has increased from %lu to %u
+%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS relocation %s against undefined symbol `%s'%pB: TLS sections are not adjacent:%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead.%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: adjusting invalid FileAlignment%pB: adjusting invalid SectionAlignment%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol index: %d%pB: base-plus-offset relocation against register symbol: %s in %pA%pB: base-plus-offset relocation against register symbol: (unknown) in %pA%pB: can not represent section `%pA' in a.out object file format%pB: can not represent section for symbol `%s' in a.out object file format%pB: can't link %s modules with %s modules%pB: can't link RVE with other target%pB: can't link different ABI object.%pB: cannot allocate file name for file number %d, %d bytes
+%pB: cannot allocate memory for local GOT entries%pB: cannot create stub entry %s%pB: cannot export internal symbol `%s`.%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: conditional branch to undefined symbol `%s' not allowed%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
 %pB: csect `%s' not in enclosing section%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object%pB: directive LOCAL valid only with a register or absolute value%pB: dtp-relative relocation against dynamic symbol %s%pB: duplicate export stub %s%pB: duplicate section `%pA' has different contents
 %pB: duplicate section `%pA' has different size
 %pB: dynamic object with no .loader section%pB: dynamic relocation against `%pT' in read-only section `%pA'
+%pB: dynamic relocation against a local symbol in read-only section `%pA'
 %pB: dynamic relocation in read-only section `%pA'
-%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
+%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: attribute section length too small: %ld%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: expected symbol index in range 0..%lu but found local symbol with index %lu%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
 %pB: illegal section name `%pA'%pB: illegal symbol index %ld in relocs%pB: incompatible machine type; output is 0x%x; input is 0x%x%pB: incorrect size for symbol `%s'%pB: indirect symbol `%s' to `%s' is a loop%pB: instruction set mismatch with previous modules%pB: internal error in ihex_read_section%pB: internal error, internal register section %pA had contents
 %pB: internal error, symbol table changed size from %d to %d words
-%pB: internal symbol `%s' in %pB is referenced by DSO%pB: internal symbol `%s' isn't defined%pB: invalid entry in SHT_GROUP section [%u]%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions%pB: invalid link %u for reloc section %s (index %u)%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
+%pB: internal symbol `%s' in %pB is referenced by DSO%pB: internal symbol `%s' isn't defined%pB: invalid NumberOfRvaAndSizes%pB: invalid entry in SHT_GROUP section [%u]%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions%pB: invalid link %u for reloc section %s (index %u)%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
 %pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote
 %pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx
 %pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo
@@ -523,15 +564,19 @@ ppcboot header:
 %pB: invalid mmo file: lop_end not last item in file
 %pB: invalid mmo file: unsupported lopcode `%d'
 %pB: invalid sh_link field (%d) in section number %d%pB: invalid special symbol `%s'; it must be a global or weak function symbol%pB: invalid standard symbol `%s'; it must be a global or weak function symbol%pB: invalid symbol table: duplicate symbol `%s'
-%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no core to allocate section name %s%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
-%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: page size is too large (0x%x)%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to create fake empty section%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to initialize compress status for section %s%pB: unable to initialize decompress status for section %s%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type: %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
-%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number count (%#lx) exceeds section size (%#lx)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: sh_link not set for section `%pA'%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
-%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: will not resolve runtime TLS relocation%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
-%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%s defined on removed toc entry%s duplicated
+%pB: invalid version offset %lx (max %lx)%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
+%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-canonical reference to canonical protected function `%s' in %pB%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: not enough version information%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: overflow reloc count too small%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc %#x unsupported%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation %s overflow 0x%lx%pB: relocation %s right shift %d error 0x%lx%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section %s is compressed with zstd, but BFD is not built with zstd support%pB: section '%pA': corrupt VTENTRY entry%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: symbol indicates overlay (not supported)%pB: symbol name exceeds given max length of %d%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to compress section %s%pB: unable to create fake empty section%pB: unable to decompress section %s%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unhandled sparc machine value '%lu' detected during write processing%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported AOUT relocation size: %d%pB: unsupported arch %#x%pB: unsupported bfd mach %#lx%pB: unsupported bfd relocation type %#x%pB: unsupported mach %#x%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type %s%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type: %#x%pB: unsupported swap_aux_in for storage class %#x%pB: unsupported swap_aux_out for storage class %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
+%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section.%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: R_RISCV_SUB_ULEB128 with non-zero addend, please rebuild by binutils 2.42 or up%pB: warning: Weak TLS is implementation defined and may not work as expected%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: secondary relocation section '%s' for section %pA found - ignoring%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
+%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: truncated `%s' option%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: warning: win32pstatus %s of size %lu bytes is too small%pB: will not resolve runtime TLS relocation%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u%pB: wrong auxtype %#x for storage class %#x%pB:%.8s: RVA truncated%pB:%.8s: section below image base%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
+%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: attempting to write over the end of the section%pB:%pA: error: attempting to write section into an empty buffer%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%pB[%pA]: no output section for space %pA%pcrel_lo missing matching %pcrel_hi%pcrel_lo overflow with an addend%pcrel_lo section symbol with an addend%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20%s defined on removed toc entry%s divide by zero%s duplicated
 %s duplicated in %s
-%s has both normal and TLS relocs%s in overlay section%s not defined in linker created %pA%s not implemented%s offset too large for .eh_frame sdata4 encoding%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA%s: TLS reference in %pB mismatches non-TLS reference in %pB%s: no such symbol%s: not implemented%s: not supported%s: undefined version: %s(at bit offset %u)
+%s has both normal and TLS relocs%s in overlay section%s is defined but could not be loaded: %s%s is defined but plugin support is disabled%s is loaded but symbol "%s" is not found: %s%s not defined in linker created %pA%s not implemented%s offset too large for .eh_frame sdata4 encoding%s, iter %u
+  branch         %lu
+  long branch    %lu
+  plt call       %lu
+  global entry   %lu%s: Bad ELF id: `%d'%s: ISA string cannot contain uppercase letters%s: ISA string must begin with rv32 or rv64%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA%s: TLS reference in %pB mismatches non-TLS reference in %pB%s: compiled as 32-bit object and %s is 64-bit%s: compiled as 64-bit object and %s is 32-bit%s: first ISA extension must be `e', `i' or `g'%s: invalid prefixed ISA extension `%s' ends with <number>p%s: no such symbol%s: not implemented%s: not supported%s: object size does not match that of target %s%s: prefixed ISA extension must separate with _%s: undefined version: %s%s: unknown prefixed ISA extension `%s'%s: unknown standard ISA extension or prefix class `%c'(at bit offset %u)
 (descriptor)
-(format %c%c%c%c signature %s age %ld)
+(format %c%c%c%c signature %s age %ld pdb %s)
 (no value)
 (not active)
 (not allocated)
@@ -544,7 +589,7 @@ ppcboot header:
 , alias: %u
 , ext fixup offset: %u, no_opt psect off: %u, subtype: %u (%s)
 , symbol vector rva: - %pB is 64-bit, %pB is not-mips32r2 -mfp64 (12 callee-saved).eh_frame_hdr entry overflow.eh_frame_hdr refers to overlapping FDEs.got section not immediately after .plt section.rsrc merge failure: a directory matches a leaf.rsrc merge failure: differing directory versions.rsrc merge failure: dirs with differing characteristics.rsrc merge failure: duplicate leaf.rsrc merge failure: duplicate leaf: %s.rsrc merge failure: duplicate string resource: %d.rsrc merge failure: multiple non-default manifests32-bit double, 32bits gp relative relocation occurs for an external symbol4-byte4-bytes64 bits *unhandled*
-64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC<Unrecognised flag bits set><corrupt info> %s<corrupt string length: %#x>
+64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC; recompile with -fPIE<corrupt info> %s<corrupt string length: %#x>
 <corrupt string offset: %#lx>
 <corrupt><unknown directory type: %d>
 <unknown mask flags><unknown>@pltoff reloc against local symbolBASE_IMAGE       BFD %s assertion fail %s:%dBFD %s internal error, aborting at %s:%d
@@ -555,17 +600,15 @@ ppcboot header:
 CTL_SETRB (set relocation base)
 CTL_STKDL (stack defined location)
 CTL_STLOC (set location)
-Copyright Header
+Coolidge (kv3) V1 32 bitsCoolidge (kv3) V1 64 bitsCoolidge (kv3) V2 32 bitsCoolidge (kv3) V2 64 bitsCoolidge (kv4) V1 32 bitsCoolidge (kv4) V1 64 bitsCopyright Header
 Corrupt .rsrc section detected!
-DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
+DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: could not find variable specification at offset 0x%lxDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: section %s has no contentsDWARF error: section %s is too bigDWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
 Debug symbol table:
-Delay Import DirectoryDeprecated %s called
-Deprecated %s called at %s line %d in %s
-Description DirectoryEIHD: (size: %u, nbr blocks: %u)
+Delay Import DirectoryDescription DirectoryEIHD: (size: %u, nbr blocks: %u)
 Entry offset        = 0x%.8lx (%ld)
-Error: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
+Error: %pB and %pB has different DSP versionError: %pB and %pB has different FPU ABIError: %pB and %pB has different VDSP versionError: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
 Export RVAFDE encoding in %pB(%pA) prevents .eh_frame_hdr table being createdFDPIC does not yet support %s relocation to become dynamic for executableFILES_VOLUMES    FPU-2.0FPU-3.0Flag field          = 0x%.2x
-Forwarder RVAGALAXY           GOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
+Forwarder RVAGALAXY           GNU_MBIND section is supported only by GNU and FreeBSD targetsGNU_RETAIN section is supported only by GNU and FreeBSD targetsGOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
 Hard float (32-bit CPU, 64-bit FPU)
 Hard float (32-bit CPU, Any FPU)
 Hard float (MIPS32r2 64-bit FPU 12 callee-saved)
@@ -573,20 +616,20 @@ ppcboot header:
 Hard float (single precision)
 Hard float compat (32-bit CPU, 64-bit FPU)
 Hard or soft float
-ID: %#08lxIDC - Ident Consistency check
-IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
+IBT and SHSTK propertiesIBT propertyID: %#08lxIDC - Ident Consistency check
+IFUNC symbol %s in dynamic symbol table - IFUNCS are not supportedIMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
 Image activator fixup: (major: %u, minor: %u)
 Image identification: (major: %u, minor: %u)
 Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)
 Image symbol & debug table: (major: %u, minor: %u)
-Import Address Table DirectoryImport Directory [parts of .idata]LOGICAL_NAMES    Language Processor Name
+Import Address Table DirectoryImport Directory [parts of .idata]Internal error: unreachable.LAM_U48 propertyLAM_U57 propertyLOGICAL_NAMES    Language Processor Name
 Length              = 0x%.8lx (%ld)
 Load Configuration DirectoryLocal IFUNC function `%s' in %pB
 MEMORY_MANAGEMENTMIPS16 and microMIPS functions cannot call each otherMISC             MMU use: MULTI_PROCESSING Major/Minor 			%d/%d
 Maximum stack required is 0x%v
 MeP: howto %d has type %dMerging program properties
 Module header
-NETWORKS         NORMALName 				NoneNumber in:
+NETWORKS         NORMALNOTE: This behaviour is deprecated and will be removed in a future version of the linkerName 				NoneNumber in:
 OPR_ADD (add)
 OPR_AND (logical and)
 OPR_ASH (arithmetic shift)
@@ -611,21 +654,19 @@ ppcboot header:
 Partition[%d] length = 0x%.8lx (%ld)
 Partition[%d] sector = 0x%.8lx (%ld)
 Please report this bug.
-RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pBRL78 ABI conflict: cannot link %s file %pB with %s file %pBRL78 merge conflict: cannot link 32-bit and 64-bit objects togetherR_BFIN_FUNCDESC references dynamic symbol with nonzero addendR_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addendR_FRV_TLSMOFFLO not applied to a setlo or setlos instruction
+Private flags = 0x%lx : RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pBRL78 ABI conflict: cannot link %s file %pB with %s file %pBRL78 merge conflict: cannot link 32-bit and 64-bit objects togetherRL78 reloc divide by zeroRL78 reloc stack overflow/underflowR_AMD64_IMAGEBASE with __ImageBase undefinedR_BFIN_FUNCDESC references dynamic symbol with nonzero addendR_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addendR_FRV_TLSMOFFLO not applied to a setlo or setlos instruction
 Reading archive file mod timestampRemoved property %W to merge %pB (0x%v) and %pB (0x%v)
 Removed property %W to merge %pB (0x%v) and %pB (not found)
 Removed property %W to merge %pB (not found) and %pB (0x%v)
 Removed property %W to merge %pB and %pB
 Removed property %W to merge %pB and %pB (not found)
-ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSIMD use: SPSC - Shared Image Program section def
+ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSHSTK propertySIMD use: SPSC - Shared Image Program section def
 STABLE           STA_CKARG (compare procedure argument)
 STA_GBL (stack global) %.*s
 STA_LI (stack literal)
-STA_LW (stack longword) 0x%08x
-STA_MOD (stack module)
+STA_LW (stack longword)STA_MOD (stack module)
 STA_PQ (stack psect base + offset)
-STA_QW (stack quadword) 0x%08x %08x
-STC_BOH_GBL (store cond BOH at global addr)
+STA_QW (stack quadword)STC_BOH_GBL (store cond BOH at global addr)
 STC_BOH_PS (store cond BOH at psect + offset)
 STC_BSR_GBL (store cond BSR at global addr)
 STC_BSR_PS (store cond BSR at psect + offset)
@@ -664,27 +705,27 @@ ppcboot header:
 Source Files Header
 Special DirectoryStack size for call graph root nodes.
 Strides:
-Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pBTLS relocation invalid without dynamic sectionsTable Addresses
-The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
+Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pBTLS relocation invalid without dynamic sectionsTOC overflow during stub generation; try -mminimal-toc when compilingTable Addresses
+The addend isn't allowed for R_RISCV_GOT_HI20The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
 Thread Storage Directory [.tls]Time/Date stamp 		%lx
 Title Text Header
 Too many unwind codes (%ld)
 Type                Size     Rva      Offset
-USRSTACKUnknownUnknown: %xUpdated property %W (%v) to merge %pB (0x%v) and %pB (not found)
+USRSTACKUnable to find the stub entry targeting %sUnable to link input file: %sUnable to load DLL.UnknownUnknown: %xUpdated property %W (%v) to merge %pB (0x%v) and %pB (not found)
 Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)
 VOLATILE         Virtual size of .pdata section (%ld) larger than real size (%ld)
 Warning: %s section size (%ld) is not a multiple of %d
 Warning: %s section size (%ld) is smaller than virtual size (%ld)
 Warning: %s section size is zero
 Writing updated armap timestampXGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code.[%u]: Lower: %u, upper: %u
-[abi=16-bit int, [abi=32-bit int, [whose name is lost]_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry functiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
+[abi=16-bit int, [abi=32-bit int, [whose name is lost]\%pB: warning: %s BLX instruction targets %s function '%s'__tls_get_addr call offset overflow_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry function`xtheadvector' is conflict with the `v' extension`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extensiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
 array, dim: %u, bitmap: arsize: %u, a0: 0x%08x
 atomic, type=0x%02x %s
 attempt to convert L32R/CALLX to CALL failedattempt to do relocatable link with %s input and %s outputbad section index in %sbad valuebanked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)base: %u, pos: %u
-bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_read_symtab_symbols: unable to allocate memory for symbolsbfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
+bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lxbfd_mach_o_read_section_64: overlarge alignment value: %#lxbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
 blkend: size: 0x%08x
-branch (PC rel16) to section (%s) not supportedbranch to a non-instruction-aligned addressbss-plt forced by profilingbss-plt forced due to %pBcan't build branch stub `%s'can't find branch stub `%s'cannot convert a branch to JALX for a non-word-aligned addresscannot convert a jump to JALX for a non-word-aligned addresscannot create stub entry %scannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
-cannot read DMT
+branch (PC rel16) to section (%s) not supportedbranch to a non-instruction-aligned addressbss-plt forced by profilingbss-plt forced due to %pBc' or `zcac' or `zcdc' or `zcfcan't build branch stub `%s'can't find branch stub `%s'cannot + or - base extension `%s' in .option arch `%s'cannot convert a branch to JALX for a non-word-aligned addresscannot convert a jump to JALX for a non-word-aligned addresscannot create stub entry %scannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
+cannot find default versions of the ISA extension `%s'cannot read DMT
 cannot read DMT header
 cannot read DMT psect
 cannot read DST
@@ -700,70 +741,66 @@ ppcboot header:
 cannot read GST
 cannot read GST record
 cannot read GST record header
-cannot read GST record length
 class: %u, dtype: %u, length: %u, pointer: 0x%08x
-corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EGSD record: size (%#x) is larger than remaining space (%#x)corrupt EGSD record: size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt vms valuecould not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]dangerous relocationdelta pc +%-4ddelta_pc_l: +0x%08x
+corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)corrupt EGSD record type %d: size (%#x) is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt reloc recordcorrupt vms valuecorrupted GST
+could not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]d' and `c', or `d' and `zcdd' and `zfad' or `zdinxdangerous relocationdangerous relocation errordelta pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 descdimct: %u, aflags: 0x%02x, digits: %u, scale: %u
 discarded output section: `%pA'discarding zero address range FDE in %pB(%pA).
 discontiguous range (nbr: %u)
-dynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
+division by zerodst_define_location %u too largedynamic index information not availabledynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
 enumelt, name: %.*s
 enumend
 epilog: flags: %u, count: %u
-error in %pB(%pA); no .eh_frame_hdr table will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB does not use %s instructions, whereas %pB doeserror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack aligned.error: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s).error: %pB: Mis-matched ISA string to merge '%s' and '%s'.error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%derror: %pB: SB relative addressing conflicts with use of R9error: %pB: Unspported XLEN (%u), you mightusing wrong emulation.error: %pB: XLEN of input (%u) doesn't match output (%u).error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting priv spec version (major/minor/revision).error: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'.error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablefailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation at address 0x%08x when _gp not defined
-global pointer relative relocation when _gp not definedhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
+error adding attributeerror in %pB(%pA); no .eh_frame_hdr table will be createderror in %pB(%pA); no .sframe will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memoryerror: %pB does not use %s instructions, whereas %pB doeserror: %pB has a LOAD segment with RWX permissionserror: %pB has a TLS segment with execute permissionerror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack alignederror: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt AArch64 used size: 0x%x>error: %pB: <corrupt property (0x%x) size: 0x%x>error: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s)error: %pB: SB relative addressing conflicts with use of R9error: %pB: XLEN of input (%u) doesn't match output (%u)error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'error: %pB: mis-matched ISA string to merge '%s' and '%s'error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: %pB: unsupported XLEN (%u), you might be using wrong emulationerror: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack sectionerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: conflicting CPU architectures %s vs %s in %pBerror: creating an executable stack because of -z execstack command line optionerror: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spaceerror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablef' and `c', or `f' and `zcff' or `zfinxfailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfinal size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spacefurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation when _gp not definedhhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
 indirect, defined at 0x%08x
-internal error: RL78 reloc stack overflowinternal error: RL78 reloc stack underflowinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol invalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
+input SFrame sections with different abi prevent .sframe generationinput SFrame sections with different format versions prevent .sframe generationinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: relocation not supportedinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol internal: unreachable INSN_CLASS_*invalid %sinvalid ISA extension ends with <number>p in .option arch `%s'invalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid dynamic indexinvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
 len: %2u, kind: %2u line num  (len: %u)
-linkable imagelinker stubs in %u group
-linker stubs in %u groups
-literalliteral relocation occurs for an external symbollong branch stub `%s' offset overflowmach-o: there are too many sections (%u) maximum is 255,
-malformed archivememory exhaustedmep: no reloc for code %dmodbeg
+linkable imagelinker stubs in %u grouplinker stubs in %u groupsliteralliteral relocation occurs for an external symbollocal symbol index too biglong branch stub `%s' offset overflowm' or `zmmulmach-o: there are too many sections (%u) maximum is 255,
+malformed archivemalformed mach-o ARM half sectdiff reloc: invalid length: %dmalformed mach-o ARM local sectdiff reloc: invalid length: %dmalformed mach-o ARM reloc pair: invalid length: %dmalformed mach-o ARM reloc pair: reloc is first relocmalformed mach-o ARM reloc: unknown reloc type: %dmalformed mach-o ARM sectdiff reloc: invalid length: %dmalformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)malformed mach-o reloc: section index is greater than the number of sectionsmemory exhaustedmep: no reloc for code %dmodbeg
 modend
-name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno errorno more archived filesno symbolsnon-contiguous array of %s
-non-dynamic relocations refer to dynamic symbol %snon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
+name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno dynamic index information availableno errorno more archived filesno symbolsnon-contiguous array of %s
+non-dynamic relocations refer to dynamic symbol %snon-dynamic symbol %s in dynamic symbol tablenon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
 non-zero addend in @fptr relocnonenonrepresentable section on outputnot enough GOT space for local GOT entriesnot enough memory to sort relocationsnot mapping: data=%lx mapped=%d
 not mapping: env var not set
-not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowpointer
+not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowplugin framework: out of file descriptors. Try using fewer objects/archives
+pointer
 private flags = %lxprivate flags = %lx:private flags = %lx: private flags = 0x%lxprivate flags = 0x%lx:prolog: bkpt address 0x%08x
-protected symbolprotected symbol recbeg: name: %.*s
+protected symbolprotected symbol q' and `zfaq' or `zqinxrecbeg: name: %.*s
 recend
-reference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
-reloc (%d) is *UNKNOWN*relocation for non-REL psectrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedremoving unused section '%pA' in file '%pB'reopening %pB: %s
-reserved cmd %drtnbeg
+record is too small for symbol name lengthreference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
+reloc (%d) is *UNKNOWN*relocation against `%s' has faulty GOT type relocation for non-REL psectrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedremoving unused section '%pA' in file '%pB'reopening %pB: %sreserved cmd %drtnbeg
 rtnend: size 0x%08x
-section has no contentsseptyp, name: %.*s
+rv%d does not support the `q' extensionrv%d does not support the `zcf' extensionrv%de does not support the `h' extensionsection has no contentsseptyp, name: %.*s
 set_abs_pc: 0x%08x
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-shared objectsize error in section %pAsmall-data section exceeds 64KB; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, no support for duplicate object files in auto-overlay script
+shared objectsize error in section %pAsmall-data section too large; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, cannot handle this filesorry, no support for duplicate object files in auto-overlay script
 sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands.source (len: %u)
 spurious ALPHA_R_BSR relocstack analysis will ignore the call from %s to %s
 stack overflow (%d) in _bfd_vms_pushstack underflow in _bfd_vms_popstandard data: %s
-start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol needs debug section which does not existsystem call errorsystem version array information:
+start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targetssymbol needs debug section which does not existsymbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targetssystem call errorsystem version array information:
 term(b): 0x%02xterm_w: 0x%04xthe bfin target does not currently support the generation of copy relocationsthere is a conflict merging the ELF header flags from %pBtoo many GOT entries for -fpic, please recompile with -fPICtry enabling relaxation to avoid relocation truncationstype spec for element:
 type spec for subscript %u:
 typed pointer
 typspec (len: %u)
-unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767
-unable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
-undefined undefined %s reference in complex symbol: %sunexpected STO_SH5_ISA32 on local symbol is not handledunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
+unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
+undefined undefined %s reference in complex symbol: %sunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
 unhandled emh subtype %u
-unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
-unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeunsupported relocation type %#xusing multiple gp valuesv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
+unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown ISA extension `%s' in .option arch `%s'unknown attribute for symbol `%s': 0x%02xunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
+unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeusing multiple gp valuesv' or `zve64d' or `zve64f' or `zve32fv' or `zve64x' or `zve32xv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
 warning, .pdata section size (%ld) is not a multiple of %d
-warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a corrupt section with a size (%warning: %pB has a corrupt string table index - ignoringwarning: %pB supports interworking, whereas %pB does notwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
+warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a LOAD segment with RWX permissionswarning: %pB has a TLS segment with execute permissionwarning: %pB has a corrupt string table indexwarning: %pB has a program header with invalid alignmentwarning: %pB has a section extending past end of filewarning: %pB has a segment extending past end of filewarning: %pB supports interworking, whereas %pB does notwarning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%uwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
 warning: %s overlaps %s
-warning: %s section has zero sizewarning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
-warning: discarding dynamic section %swarning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
-yesyou are not allowed to define %s in a scriptProject-Id-Version: bfd-2.31.90
-Report-Msgid-Bugs-To: bug-binutils@gnu.org
-POT-Creation-Date: 2019-01-19 16:30+0000
-PO-Revision-Date: 2019-05-15 05:58+0200
+warning: %s section has zero sizewarning: %s should be used rather than %swarning: %s: missing .note.GNU-stack section implies executable stackwarning: %s: requires executable stack (because the .note.GNU-stack section is executable)warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: --plt-localentry is incompatible with power10 pc-relative codewarning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised.warning: NOTE: size discrepancies can cause real problems.  Investigation is advised.warning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pBwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
+warning: discarding dynamic section %swarning: enabling an executable stack because of -z execstack command line optionwarning: file %pB's arch flag %s conflict with target %s,set target arch flag to %swarning: file %pB's arch flag %s conflicts with target ck%s, using %swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: privileged spec version 1.9.1 can not be linked with other spec versionswarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognised arch name '%#x'warning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
+x ISA extension `%s' must be set with the versionsyesyou are not allowed to define %s in a scriptzbb' or `zbkbzbc' or `zbkczcb' and `zbazcb' and `zbbzcb' and `zmmul', or `zcb' and `mzfh' and `zfazfh' and `zfa', or `zvfh' and `zfazfh' or `zhinxzfh' or `zvfhzfhmin' and `d', or `zhinxmin' and `zdinxzfhmin' and `q', or `zhinxmin' and `zqinxzfhmin' or `zhinxminzihintntl' and `c', or `zihintntl' and `zcazknd' or `zknezvbbzvbczvkbzvkgzvknedzvknha' or `zvknhbzvksedzvkshzvl*b extensions need to enable either `v' or `zve' extensionProject-Id-Version: bfd-2.41.90
+Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/
+POT-Creation-Date: 2024-01-15 14:55+0000
+PO-Revision-Date: 2024-01-17 06:30+0100
 Last-Translator: FrÃ©dÃ©ric Marchal <fmarchal@perso.be>
 Language-Team: French <traduc@traduc.org>
 Language: fr
@@ -778,7 +815,6 @@ Plural-Forms: nplurals=2; plural=(n >= 2
 	Adresse virtuelle relative de la table ordinale (0x%lx) ou nombre d'entrÃ©es (0x%lx) invalide
 	Table des noms de pointeurs 			Table des ordinals 				[%4ld] <offset corrompu: %lx>
 	Table [Nom pointeur/Nombre ordinal]	%08lx
-	code-base %08lx tab. des entrÃ©es (chargeable/actuel) %08lx/%08lx
 	non-TLS: %pA	rÃ©adressage %4d dÃ©calage %4x [%4lx] %s	vma:  Hint/Ord Membre      Lien
 
 
@@ -809,10 +845,6 @@ En-tÃªte auxiliaire de l'exec
 
 Table d'adresses d'exportation -- base de nombre ordinal %ld
 
-Descripteur de fonction localisÃ© Ã  l'adresse de dÃ©part: %04lx
-
-Pas de section reldata! Descripteur de fonction pas dÃ©codÃ©.
-
 DÃ©but de partition[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 En-tÃªte de programme:
@@ -838,12 +870,10 @@ Il y a un premier Â«Â thunkÂ Â», mais la
 
 Il y a une table d'exportation dans %s Ã  0x%lx
 
-Il y a une table d'exportation dans %s, mais elle ne rentre pas dans la section
+Il y a une table d'exportation dans %s, mais le contenu ne sait pas Ãªtre lu
 
 Il y a une table d'exportation dans %s, mais elle est trop petite (%d)
 
-Il y a une table d'exportation dans %s, mais cette section n'a pas de contenu
-
 Il y a une table d'exportation, mais la section la contenant n'a pu Ãªtre repÃ©rÃ©e
 
 Il y a une table d'importation dans %s Ã  0x%lx
@@ -879,7 +909,8 @@ En-tÃªtes ppcboot:
    index psect 3: %u, offset 3: 0x%08x %08x
    psect: %u, offset: 0x%08x %08x
     nom routine : %.*s
-   %02u    (type: %3u, taille: 4+%3u):    cmd %u *non gÃ©rÃ©e*
+   %02u    (type: %3u, taille: %3u):    cmd %u *non gÃ©rÃ©e*
+   Longueur erronÃ©e
    Erreur: La date de compilation est tronquÃ©e
    Erreur: La longueur est plus petite que la longueur d'un enregistrement EEOM
    Erreur: La longueur est plus petite que la longueur d'un enregistrement EMH
@@ -888,7 +919,6 @@ En-tÃªtes ppcboot:
    Erreur: La version du module est manquante
    Erreur: La version du module est trop longue
    Erreur: La longueur de l'enregistrement est infÃ©rieure Ã  la taille de l'enregistrement EMH_MHD
-   Erreur: longueur plus grande que l'espace restant dans l'enregistrement
    alignement : 2**%u
    alloc (long)  : %u (0x%08x)
   alloc (long): %u (0x%08x)
@@ -954,25 +984,13 @@ En-tÃªtes ppcboot:
    vecteur     : 0x%08x
    masque de version: 0x%08x
   version:     %x
-  %s (long=%u+%u):
+  %s (long=%u):
   %u: taille: %u, fanions: 0x%02x, nom: %.*s
   EEOM (long=%u):
   EGSD (long=%u):
   entrÃ©e EGSD %2u (type: %u, long: %u):   EMH %u (long=%u):   base: 0x%08x %08x, taille: 0x%08x, prot: 0x%08x   base_va : 0x%08x
   dÃ©compte des bits: %u, adr base: 0x%08x
-  branchements          %lu
-  aj. branchements toc  %lu
-  branchements notoc    %lu
-  branchements les deux %lu
-  long branchements     %lu
-  aj. long toc          %lu
-  long notoc            %lu
-  long les deux         %lu
-  appels plt            %lu
-  appels plt save       %lu
-  appels plt notoc      %lu
-  appels plt les deux   %lu
-  entrÃ©es globales      %lu  appels:
+  appels:
   chgprtoff : %5u
   codeadroff: %5u, lpfixoff  : %5u
   lien correctif: 0x%08x %08x
@@ -988,22 +1006,22 @@ En-tÃªtes ppcboot:
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   taille : %u
-  les fanions du fichier d'entrÃ©e: %s  les fanions du fichier de sortie: %s %08x(<inconnu>) 0x%08x 64B <Version EABI non reconnue> BPAGE: %u COM COMM Changement de protection (%u entrÃ©es):
+  les fanions du fichier d'entrÃ©e: %s  les fanions du fichier de sortie: %s %08x(<inconnu>) 0x%08x 64B <Version EABI non reconnue> <Bits de fanions non reconnus> BPAGE: %u COM COMM Changement de protection (%u entrÃ©es):
  Correctifs des rÃ©fÃ©rences des adresses de code:
  DEF EXE support du FPU requis:  PremiÃ¨re adresse : 0x%08x 0x%08x
  QuatriÃ¨me adresse: 0x%08x 0x%08x
- GBL SÃ©quence du code de liants LIB Correctifs des rÃ©fÃ©rences des paires de liaison:
+ GBL LIB Correctifs des rÃ©fÃ©rences des paires de liaison:
 En-tÃªte MACH-O:
- NOMOD NORM OVR PIC QVAL RD REL Registre a restaurÃ© le millicode Registre a prÃ©servÃ© le millicode Les ressources dÃ©marrent au dÃ©calage: %#03x
+ NOMOD NORM OVR PIC QVAL RD REL Les ressources dÃ©marrent au dÃ©calage: %#03x
  SHR DeuxiÃ¨me adresse : 0x%08x 0x%08x
  Images partageables:
  Image partagÃ©e   : 0x%08x 0x%08x
  La table des chaÃ®nes dÃ©marre au dÃ©calage: %#03x
 Table: Car: %d, Temps: %08lx, Ver: %d/%d, Nbr Noms: %d, IDs: %d
  TroisiÃ¨me adresse: 0x%08x 0x%08x
- UNI VEC VECEP FAIBLE WRT [doubles de 64 bits] [BE8] [supplÃ©ment ABI FDPIC] [format flottant FPA] [LE8] [format flottant Maverick] [format flottant VFP] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [dÃ©calage RAM XGATE] [abi inconnu] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [symboles dynamiques utilisent un index de segment] [fix dep] [valeurs en virgule flottante passÃ©es dans des registres de valeurs en virgule flottante] [g-float] [hard-float ABI] [inter-rÃ©seautage autorisÃ©] [mapping de symboles prÃ©cÃ¨des les autres] [memory=bank-model] [memory=flat] [nouvel ABI] [aucun jeu abi] [nonpic] [aucun mode 32 bits] [ancien ABI] [pic] [position indÃ©pendante] [exÃ©cutables relocalisÃ©s] [soft-float ABI] [virgule flottante logiciel] [table des symboles triÃ©s] [symboles sont prÃ©fixÃ©s par Â«Â  _ Â Â»] [ISA inconnu] [table des symboles non triÃ©s] [v10 et v32] [v32] alignement d'entitÃ©s de 8 octets: GST corrompu
- table des modules de debug: vbn: %u, taille: %u
+ UNI VEC VECEP FAIBLE WRT [doubles de 64 bits] [BE8] [supplÃ©ment ABI FDPIC] [format flottant FPA] [LE8] [format flottant Maverick] [format flottant VFP] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [dÃ©calage RAM XGATE] [abi inconnu] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [symboles dynamiques utilisent un index de segment] [fix dep] [valeurs en virgule flottante passÃ©es dans des registres de valeurs en virgule flottante] [g-float] [hard-float ABI] [inter-rÃ©seautage autorisÃ©] [mapping de symboles prÃ©cÃ¨des les autres] [memory=bank-model] [memory=flat] [nouvel ABI] [aucun jeu abi] [nonpic] [aucun mode 32 bits] [ancien ABI] [pic] [position indÃ©pendante] [exÃ©cutables relocalisÃ©s] [soft-float ABI] [virgule flottante logiciel] [table des symboles triÃ©s] [symboles sont prÃ©fixÃ©s par Â«Â  _ Â Â»] [ISA inconnu] [table des symboles non triÃ©s] [v10 et v32] [v32] alignement d'entitÃ©s de 8 octets: table des modules de debug: vbn: %u, taille: %u
  table des symboles de debug : vbn: %u, taille: %u (0x%x)
+ impossible de convertir le rÃ©adressage GOTPCREL par rapport Ã  Â«Â %sÂ Â»: Ã©ditez les liens Ã  nouveau avec --no-relax
  correctif info rva:  fanions: 0x%04x table des symboles globale: vbn: %u, enregistrements: %u
  ident: 0x%08x, nom: %.*s
  ident: 0x%08x, ver sys: 0x%08x, apparier ctrl: %u, taille vectsym: %u
@@ -1029,35 +1047,55 @@ En-tÃªtes ppcboot:
      		Adresse  Prolog.  Fonction 32b exc  Exception DonnÃ©es
  vma:            Hint    Temps     Avant    DLL       Premier
                  Table   Estampil. ChaÃ®ne   Nom       Thunk
-#<code d'erreur invalide>%03x %*.s  Feuilles: Adr: %#08lx, Taille: %#08lx, Codepage: %d
-%03x %*.s EntrÃ©e: %C: attention: rÃ©adressage vers Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent
+#<code d'erreur invalide>%%X%%P: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» qui peut Ãªtre liÃ© avec l'extÃ©rieur ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©Â ; recompilez avec -fPIC
+%%X%%P: rÃ©adressage %s sans solution par rapport au symbole Â«Â %sÂ Â»
+%03x %*.s  Feuilles: Adr: %#08lx, Taille: %#08lx, Codepage: %d
+%03x %*.s EntrÃ©e: %F%P: %pB(%pA): erreur: une section linked-to est requise pour --gc-sections
+%F%P: %pB(%s): erreur lors de l'ouverture de membre d'archive lÃ©gerÂ : %E
+%F%P: %pB: rÃ©adressage par copie sur le symbole protÃ©gÃ© non copiable Â«Â %sÂ Â»
+%F%P: %pB: rÃ©adressage par copie sur le symbole protÃ©gÃ© non copiable Â«Â %sÂ Â» dans %pB
+%F%P: %pB: Ã©chec lors de l'allocation d'un champ de bits DT_RELR 32 bits
+%F%P: %pB: Ã©chec lors de l'allocation d'un champ de bits DT_RELR 64 bits
+%F%P: %pB: Ã©chec lors de l'allocation d'une section de rÃ©adressage relatif compacte
+%F%P: %pB: Ã©chec lors de l'allocation de la mÃ©moire pour la section Â«Â %pAÂ Â»
+%F%P: %pB: Ã©chec lors de l'allocation d'un enregistrement de rÃ©adressage relatif
+%F%P: %pB: Ã©chec lors finalisation des rÃ©adressages relatifs
+%F%P: %pB: le rÃ©adressage de %s par rapport au symbole absolu Â«Â %sÂ Â» dans la section Â«Â %pAÂ Â» est interdit
+%F%P: %pB: la taille de la section de rÃ©adressage relatif compacte est changÃ©eÂ : nouvelle (%lu) != ancienne (%lu)
+%F%P: Impossible d'assigner Â«Â %pAÂ Â» Ã  une section de sortie. RÃ©essayez sans --enable-non-contiguous-regions.
+%F%P: Impossible d'assigner Â«Â %pAÂ Â» Ã  une section de sortie. RÃ©essayez sans --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: erreur d'auto recouvrement: %E
 %F%P: ne peut construire les Ã©bauches de recouvrement: %E
 %F%P: entrÃ©e corrompue: %pB
+%F%P: section de sortie rejetÃ©e: Â«Â %pAÂ Â»
 %P%P: le symbole dynamique STT_GNU_IFUNC Â«Â %sÂ Â» avec une Ã©galitÃ© de pointeur dans Â«Â %pBÂ Â» ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un exÃ©cutable. Recompilez avec -fPIE et reliez avec -pie
-%F%P: impossible de convertir le rÃ©adressage GOTPCREL: Ã©ditez les liens Ã  nouveau avec --no-relax
-%F%P: Ã©chec lors de la crÃ©ation de la section PLT BND
 %F%P: Ã©chec lors de la crÃ©ation de la section des propriÃ©tÃ©s GNU
 %F%P: Ã©chec lors de la crÃ©ation de la section .eh_frame PLT GOT
 %F%P: Ã©chec lors de la crÃ©ation de la section PLT GOT
 %F%P: Ã©chec lors de la crÃ©ation des sections GOT
 %F%P: Ã©chec lors de la crÃ©ation de la section PLT activÃ©e pour IBT
 %F%P: Ã©chec lors de la crÃ©ation de la section .eh_frame PLT
+%F%P: Ã©chec lors de la crÃ©ation de la section .sframe PLT
 %F%P: Ã©chec lors de la crÃ©ation des sections dynamiques VxWorks
 %F%P: Ã©chec lors de la crÃ©ation des sections ifunc
+%F%P: Ã©chec lors de la crÃ©ation de la seconde section .sframe PLT
 %F%P: Ã©chec lors de la crÃ©ation de la section .eh_frame PLT
+%F%P: Ã©chec lors du dimensionnement des rÃ©adressages relatifs
 %F%pA: Ã©chec lors de l'alignement de la section
 %F%pB: dÃ©bordement du dÃ©calage relatif au PC dans l'entrÃ©e PLT GOT pour Â«Â %sÂ Â»
 %F%pB: dÃ©bordement du dÃ©calage relatif au PC dans l'entrÃ©e PLT pour Â«Â %sÂ Â»
 %F%pB: dÃ©bordement du dÃ©placement de branchement dans l'entrÃ©e PLT pour Â«Â %sÂ Â»
 %H __tls_get_addr a perdu l'argument, optimisation TLS dÃ©sactivÃ©e
 %H l'argument a perdu __tls_get_addr, optimisation TLS dÃ©sactivÃ©e
+%H: %s sur %pT n'est pas supportÃ©
 %H: %s vers Â«Â %pTÂ Â»: erreur %d
 %H: %s non supportÃ© pour la fonction indirecte Â«Â %pTÂ Â»
+%H: %s hors limite
 %H: %s fait rÃ©fÃ©rence Ã  un symbole dynamique avec un opÃ©rande non nul
 %H: %s fait rÃ©fÃ©rence Ã  une entrÃ©e TOC supprimÃ©e par l'optimisation
 %H: rÃ©adressage %s vers Â«Â %sÂ Â»: erreur %d
+%H: le rÃ©adressage %s n'est pas supportÃ© ici
 %H: le rÃ©adressage %s n'est pas supportÃ© dans les bibliothÃ¨ques partagÃ©es et les PIE
 %H: %s utilisÃ© avec le symbole TLS Â«Â %pTÂ Â»
 %H: %s utilisÃ© avec le symbole non-TLS Â«Â %pTÂ Â»
@@ -1079,23 +1117,26 @@ En-tÃªtes ppcboot:
 %H: erreur: %s par rapport Ã  Â«Â %sÂ Â» n'est pas un multiple de %u
 %H: erreur: %s n'est pas un multiple de %u
 %H: dÃ©bordement du branchement de correction
+%H: l'optimisation got/toc n'est pas supportÃ©e pour l'instruction %s
 %H: opÃ©rande non nul sur le rÃ©adressage %s par rapport Ã  Â«Â %sÂ Â»
 %H: le rÃ©adressage sur Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent
 %H: rÃ©adressage sur Â«Â %sÂ Â»: %s
 %H: rÃ©adressage %s non supportÃ© pour la fonction indirecte %s
+%H: le rÃ©adressage %s retourne une valeur %x non reconnue
 %H: le rÃ©adressage fait rÃ©fÃ©rence Ã  un symbole non dÃ©fini dans le module
 %H: le rÃ©adressage en Â«Â %s+%vÂ Â» peut avoir causÃ© le problÃ¨me ci-dessus
-%H: l'optimisation toc n'est pas supportÃ©e pour l'instruction %s
+%H: le type de rÃ©adressage %u n'est pas supportÃ©
 %H: %s ne peut Ãªtre rÃ©solu par rapport Ã  Â«Â %pTÂ Â»
 %H: rÃ©adressage %s sans solution par rapport au symbole Â«Â %sÂ Â»
 %H: attention: %s insn %#x inattendue.
+%H: attention: rÃ©adressage vers Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent
 %P%F: --relax et -r ne peuvent pas Ãªtre utilisÃ©s en mÃªme temps
 %P%X: ne peut pas lire les symboles: %E
-%P%X: le segment en lecture seule a des rÃ©adressages IFUNC dynamiques; recompilez avec -fPIC
 %P%X: segment en lecture seule a des rÃ©adressages dynamiques
-%P: %H: le rÃ©adressage %s n'est pas supportÃ© pour bss-plt
 %P: %H: erreur: %s avec l'instruction inattendue %x
 %P: %pB: %s n'est pas supportÃ© pour le symbole Â«Â %pTÂ Â»
+%P: %pB: note: le message ci-dessus ne prend pas en compte la rÃ©cupÃ©ration du rebut par l'Ã©diteur de liens
+%P: %pB: avertissement: %s manquant
 %P: %pB: attention: rÃ©adressage sur Â«Â %sÂ Â» dans la section en lecture seule Â«Â %pAÂ Â»
 %P: %pB: attention: rÃ©adressage dans la section Â«Â %pAÂ Â» en lecture seule
 %P: l'entrÃ©e toc de opd non trouvÃ©e pour Â«Â %pTÂ Â»
@@ -1104,20 +1145,32 @@ En-tÃªtes ppcboot:
 %P: erreur de la table de liaison vers Â«Â %pTÂ Â»
 %P: points d'entrÃ©e multiples: dans les modules %pB et %pB
 %P: lien relocalisable pas supportÃ©
-%P: attention: crÃ©ation d'un DT_TEXTREL dans un objet partagÃ©
+%P: attention: les fonctions indirectes GNU avec DT_TEXTREL pourraient rÃ©sulter en un plantage Ã  l'exÃ©cution; recompilez avec %s
+%P: attention: crÃ©ation de DT_TEXTREL dans un PDE
+%P: attention: crÃ©ation de DT_TEXTREL dans un PIE
+%P: attention: crÃ©ation de DT_TEXTREL dans un objet partagÃ©
 %P: attention: les rÃ©adressages de textes et les fonctions indirectes GNU pourraient rÃ©sulter en un crash Ã  l'exÃ©cution
-%X%C: le rÃ©adressage vers Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent
+%X%H: %s vers Â«Â %sÂ Â»: erreur: le rÃ©adressage s'applique en dehors de la section
+%X%H: %s vers Â«Â %sÂ Â»: erreur: l'adresse cible du rÃ©adressage est impaire
+%X%H: %s envers Â«Â %sÂ Â»Â : erreur interne: rÃ©sultat de rÃ©adressage %d inattendu
 %X%H: appel @local Ã  ifunc %s
 %X%H: impossible de convertir les branchements vers JALX entre modes ISA: rÃ©adressage hors portÃ©e
 %X%H: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC
+%X%H: le rÃ©adressage vers Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent
 %X%H: JALX vers le mÃªme mode ISA n'est pas supportÃ©
 %X%H: branchement entre modes ISA non supportÃ©
 %X%H: bss-plt -fPIC ifunc %s non supportÃ©
 %X%H: saut non supportÃ© entre modes ISAÂ ; envisagez de recompiler avec l'interliage activÃ©
+%X%P: %H: le rÃ©adressage %s n'est pas supportÃ© pour bss-plt
 %X%P: %pB(%pA): erreur: le rÃ©adressage pour le dÃ©calage %V n'a pas de valeur
 %X%P: %pB(%pA): rÃ©adressage Â«Â %pRÂ Â» va en dehors des limites
 %X%P: %pB(%pA): le rÃ©adressage Â«Â %pRÂ Â» n'est pas supportÃ©
 %X%P: %pB(%pA): le rÃ©adressage Â«Â %pRÂ Â» retourne une valeur %x non reconnue
+%X%P: %pB(%pA): le rÃ©adressage n'est pas supportÃ©
+%X%P: %pB(%pA): rÃ©adressage en dehors des limites
+%X%P: %pB: %s vis-Ã -vis de %pT n'est pas supportÃ© par glibc comme rÃ©adressage dynamique
+%X%P: %pB: erreur: %s manquant
+%X%P: Ã©dition de lien statique tentÃ©e sur l'objet dynamique Â«Â %pBÂ Â»
 %X%P: erreur interne: erreur car hors limite
 %X%P: erreur interne: erreur inconnue
 %X%P: erreur interne: erreur car rÃ©adressage non supportÃ©
@@ -1128,22 +1181,26 @@ En-tÃªtes ppcboot:
 %X%P: erreur d'analyse de pile/lrlive: %E
 %X%P: les rÃ©adressages de textes et les fonctions indirectes GNU rÃ©sulteront en un crash Ã  l'exÃ©cution
 %XÂ«Â %sÂ Â» rÃ©fÃ©rencÃ© dans la section Â«Â %pAÂ Â» de %pB: dÃ©fini dans la section abandonnÃ©e Â«Â %pAÂ Â» de %pB
-%pA a, Ã  la fois, des sections ordonnÃ©es [Â«Â %pAÂ Â» dans %pB] et dÃ©sordonnÃ©es [Â«Â %pAÂ Â» dans %pB]%pA a, Ã  la fois, des sections ordonnÃ©es et dÃ©sordonnÃ©es%pA:0x%v le lrlive .brinfo (%u) diffÃ¨re de celui de l'analyse (%u)
+%pA:0x%v le lrlive .brinfo (%u) diffÃ¨re de celui de l'analyse (%u)
 %pA:%0x%v pas trouvÃ© dans la table de fonctions
-%pB (%s): fanion de section %s (%#lx) ignorÃ©%pB .opd pas permis dans l'ABI Ã  la version %d%pB et %pB sont pour des configurations diffÃ©rentes%pB et %pB sont pour des noyaux diffÃ©rents%pB contient du code CRIS v32 incompatible avec les objets prÃ©cÃ©dents%pB contient du code non CRIS v32 incompatible avec les objets prÃ©cÃ©dents%pB utilise les deux attributs Tag_MPextension_use actuel et hÃ©ritÃ©%pB ne peut pas dÃ©finir %s%pB section %pA dÃ©passe la taille du groupe d'Ã©bauche%pB le symbole numÃ©ro %lu fait rÃ©fÃ©rence Ã  une section SHT_SYMTAB_SHNDX inexistante%pB utilise un double long 64 bits, %pB utilise un double long de 128 bits%pB utilise l'ABI de vecteurs AltiVec, %pB utilise l'ABI de vecteurs SPE%pB utilise un double long IBM, %pB utilise un double long IEEE%pB utilise la virgule flottante double prÃ©cision matÃ©rielle, %pB utilise la virgule flottante simple prÃ©cision matÃ©rielle%pB utilise la virgule flottante matÃ©rielle, %pB utilise la virgule flottante logicielle%pB utilise r3/r4 pour les retours de petites structures, %pB utilise la mÃ©moire%pB utilise le e_flags 0x%lx inconnu%pB(%pA): erreur: appel Ã  la fonction non dÃ©finie Â«Â %sÂ Â»%pB(%pA): erreur interne: rÃ©adressage dangereux%pB(%pA): erreur interne: hors limite%pB(%pA): erreur interne: erreur inconnue%pB(%pA): erreur interne: rÃ©adressage non supportÃ©%pB(%pA): table de propriÃ©tÃ© invalide%pB(%pA): l'utilisation de plusieurs modÃ¨les TLS n'est pas supportÃ©%pB(%pA): rÃ©adressage %d a un index de symbole %ld invalide%pB(%pA): symbole de bibliothÃ¨que partagÃ©e %s rencontrÃ© en rÃ©alisant une Ã©dition de liens statiques%pB(%pA): attention: les trampolines (aka veneers) de branchements longs utilisÃ©s dans la section avec l'attribut de section SHF_ARM_PURECODE n'est supportÃ© que sur les cibles M-profile implÃ©mentant l'instruction movw.%pB(%pA): attention: accÃ¨s non alignÃ© au symbole Â«Â %sÂ Â» dans la zone des petites donnÃ©es%pB(%pA): attention: accÃ¨s non alignÃ© Ã  une petite donnÃ©e de type %d%pB(%pA+%#lx): entrÃ©e des Ã©bauches a un indexe de chaÃ®ne invalide%pB(%pA+%#x): erreur: chargements multiples dÃ©tectÃ©s dans un bloc d'instruction IT qui n'est pas le dernier: le trampoline (veneer) du STM32L4XX ne peut pas Ãªtre gÃ©nÃ©rÃ©; utilisez l'option -mrestrict-it de gcc pour gÃ©nÃ©rer seulement une instruction par bloc IT%pB(%pA+0x%lx): rÃ©adressage du style 16A attendu sur l'insn 0x%08x%pB(%pA+0x%lx): rÃ©adressage du style 16D attendu sur l'insn 0x%08x%pB(%pA+0x%v): appel Ã  la section non exÃ©cutable %pB(%pA), analyse incomplÃ¨te
+%pB (%s): fanion de section %s (%#lx) ignorÃ©%pB .opd pas permis dans l'ABI Ã  la version %d%pB et %pB sont pour des configurations diffÃ©rentes%pB et %pB sont pour des noyaux diffÃ©rents%pB contient du code CRIS v32 incompatible avec les objets prÃ©cÃ©dents%pB contient du code non CRIS v32 incompatible avec les objets prÃ©cÃ©dents%pB utilise les deux attributs Tag_MPextension_use actuel et hÃ©ritÃ©%pB ne peut pas dÃ©finir %s%pB section %pA dÃ©passe la taille du groupe d'Ã©bauche%pB le symbole numÃ©ro %lu fait rÃ©fÃ©rence Ã  une section SHT_SYMTAB_SHNDX inexistante%pB utilise un double long 64 bits, %pB utilise un double long de 128 bits%pB utilise l'ABI de vecteurs AltiVec, %pB utilise l'ABI de vecteurs SPE%pB utilise un double long IBM, %pB utilise un double long IEEE%pB utilise la virgule flottante double prÃ©cision matÃ©rielle, %pB utilise la virgule flottante simple prÃ©cision matÃ©rielle%pB utilise la virgule flottante matÃ©rielle, %pB utilise la virgule flottante logicielle%pB utilise r3/r4 pour les retours de petites structures, %pB utilise la mÃ©moire%pB utilise le e_flags 0x%lx inconnu%pB(%pA): erreur: appel Ã  la fonction non dÃ©finie Â«Â %sÂ Â»%pB(%pA): erreur: rÃ©adressages internes manquants pour la section de rÃ©adressage secondaire%pB:%pA: erreur: l'entrÃ©e %zu de la table de rÃ©adressage est vide%pB(%pA): erreur: le rÃ©adressage secondaire %zu est d'un type inconnu%pB(%pA): erreur: le rÃ©adressage secondaire %zu fait rÃ©fÃ©rence Ã  un symbole supprimÃ©%pB(%pA): erreur: le rÃ©adressage secondaire %zu fait rÃ©fÃ©rence Ã  un symbole manquant%pB(%pA): erreur: la section de rÃ©adressage secondaire a des entrÃ©es d'une taille non standard%pB(%pA): erreur: la section de rÃ©adressage secondaire a des entrÃ©es de taille nulle%pB(%pA): erreur: la section de rÃ©adressage secondaire est videÂ !%pB(%pA): erreur: la section de rÃ©adressage secondaire est compressÃ©e deux fois%pB(%pA): l'index de la section d'information ne peut pas Ãªtre dÃ©fini car la section n'est pas dans la sortie%pB(%pA): l'index de la section d'information est invalide%pB(%pA): erreur interne: rÃ©adressage dangereux%pB(%pA): erreur interne: hors limite%pB(%pA): erreur interne: erreur inconnue%pB(%pA): erreur interne: rÃ©adressage non supportÃ©%pB(%pA): table de propriÃ©tÃ© invalide%pB(%pA): la section de liaison ne peut pas Ãªtre dÃ©finie car le fichier de sortie n'a pas de table de symboles%pB(%pA): l'utilisation de plusieurs modÃ¨les TLS n'est pas supportÃ©%pB(%pA): rÃ©adressage %d a un index de symbole %ld invalide%pB(%pA): rÃ©adressage %zu a un index de symbole %lu invalide%pB(%pA): symbole de bibliothÃ¨que partagÃ©e %s rencontrÃ© en rÃ©alisant une Ã©dition de liens statiques%pB(%pA): attention: les trampolines (aka veneers) de branchements longs utilisÃ©s dans la section avec l'attribut de section SHF_ARM_PURECODE n'est supportÃ© que sur les cibles M-profile implÃ©mentant l'instruction movw.%pB(%pA): attention: accÃ¨s non alignÃ© au symbole Â«Â %sÂ Â» dans la zone des petites donnÃ©es%pB(%pA): attention: accÃ¨s non alignÃ© Ã  une petite donnÃ©e de type %d%pB(%pA+%#lx): entrÃ©e des Ã©bauches a un indexe de chaÃ®ne invalide%pB(%pA+%#x): erreur: chargements multiples dÃ©tectÃ©s dans un bloc d'instruction IT qui n'est pas le dernier: le trampoline (veneer) du STM32L4XX ne peut pas Ãªtre gÃ©nÃ©rÃ©; utilisez l'option -mrestrict-it de gcc pour gÃ©nÃ©rer seulement une instruction par bloc IT%pB(%pA+0x%lx): rÃ©adressage du style 16A attendu sur l'insn 0x%08x%pB(%pA+0x%lx): rÃ©adressage du style 16D attendu sur l'insn 0x%08x%pB(%pA+0x%v): appel Ã  la section non exÃ©cutable %pB(%pA), analyse incomplÃ¨te
 %pB(%s): attention: l'inter-rÃ©seautage n'est pas activÃ©; premiÃ¨re occurrence: %pB: appel %s Ã  %s%pB, section %pA:
-  rÃ©adressage de %s pas valable dans un objet partagÃ©; typiquement un mÃ©lange dans les options. Recompilez avec -fPIC%pB, section %pA: pas de PLT pour rÃ©adresser %s sur le symbole Â«Â %sÂ Â»%pB, section %pA: Pas de PLT ni de GOT pour rÃ©adresser %s sur le symbole Â«Â %sÂ Â»%pB, section %pA: rÃ©adressage de %s a une rÃ©fÃ©rence non dÃ©finie vers Â«Â %sÂ Â», peut-Ãªtre un mÃ©lange dans les dÃ©clarationsÂ ?%pB, section %pA: rÃ©adressage de %s n'est pas permis pour Â«Â %sÂ Â», un symbole global avec la visibilitÃ© par dÃ©faut, peut-Ãªtre un mÃ©lange dans les dÃ©clarationsÂ ?%pB, section %pA: le rÃ©adressage de %s n'est pas permis pour le symbole global: Â«Â %sÂ Â»%pB, section %pA: rÃ©adressage de %s n'est pas permis pour le symbole Â«Â %sÂ Â» qui est dÃ©fini en dehors du programme, peut-Ãªtre un mÃ©lange dans les dÃ©clarationsÂ ?%pB, section %pA: rÃ©adressage de %s ne devrait pas Ãªtre utilisÃ© dans un objet partagÃ©; recompilez avec -fPIC%pB, section %pA: rÃ©adressage de %s sans GOT%pB, section %pA: rÃ©adressage %s non rÃ©solu sur le symbole Â«Â %sÂ Â»%pB, section %pA: l'objet compatible v10/v32 ne peut pas contenir de rÃ©adressage PIC%pB, section Â«Â %pAÂ Â», vers le symbole Â«Â %sÂ Â»: rÃ©adressage de %s ne devrait pas Ãªtre utilisÃ© dans un objet partagÃ©; recompilez avec -fPIC%pB: rÃ©adressage !samegp vers le symbole sans .prologue: %s%pB: %pA taille de section d'entrÃ©e invalide%pB: %pA pas dans l'ordre%pB: %pA pointe au delÃ  de la fin de la section texte%pB: %pA: dÃ©bordement de rÃ©adressage: %#x > 0xffff%pB: dÃ©saccord du fanion %s avec les modules prÃ©cÃ©dents%pB: %s pas supportÃ©%pB: %s pas supportÃ©%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole normal et comme symbole locale au thread%pB: %s: version requise invalide %d%pB: %s: version invalide %u (max %d)%pB: %s: dÃ©bordement de rÃ©adressage: 0x%lx > 0xffff%pB: symbole Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme normal et comme local au thread%pB: --in-implib uniquement supportÃ© pour les bibliothÃ¨ques d'import Secure Gateway%pB: entrÃ©e .gnu.version_d invalide%pB: entrÃ©e .gnu.version_r invalide%pB: le sous-segment .got excÃ¨de 64K (taille %d)%pB: .opd n'est pas un tableau rÃ©gulier d'entrÃ©es opd%pB: section .preinit_array n'est pas permise dans DSO%pB: Ã©chec de la fusion de .rsrc: section .rsrc corrompue%pB: Ã©chec de la fusion de .rsrc: taille de .rsrc inattendue%pB: rÃ©adressage @gprel vers le symbole dynamique %s%pB: branchement @internal vers le symbole dynamique %s%pB: rÃ©adressage @pcrel vers le symbole dynamique %s%pB: ABI est incompatible avec celui sÃ©lectionnÃ© pour l'Ã©mulation%pB: l'ABI est incompatible avec celle de l'Ã©mulation sÃ©lectionnÃ©e:
-  l'Ã©mulation de la cible Â«Â %sÂ Â» ne correspond pas Ã  Â«Â %sÂ Â»%pB: ABI ne concorde pas: Ã©dition de lien du module %s avec les modules prÃ©cÃ©dents %s%pB: la version ABI %ld n'est pas compatible avec la sortie de l'ABI version %ld%pB: ASE ne concorde pas: Ã©dition de lien du module %s avec les modules prÃ©cÃ©dents %s%pB: les images BE8 ne sont valables qu'en mode gros boutiste%pB: Impossible de gÃ©rer une taille de valeur de rÃ©adressage de %d%pB: Descripteur de fonction rÃ©adressÃ© avec un opÃ©rande non nul%pB: la section GNU_MBIN Â«Â %pAÂ Â» a un champ sh_info invalide: %d%pB: dÃ©bordement GOT: nombre de rÃ©adressages avec des offsets de 8 ou 16 bits > %d%pB: dÃ©bordement GOT: nombre de rÃ©adressages avec des offsets de 8 bits > %d%pB: Taille de vecteur ISR en dÃ©saccord avec les modules prÃ©cÃ©dents: prÃ©cÃ©dent a %u octets; actuel a %u octets%pB: RÃ©adressages en format ELF gÃ©nÃ©rique (EM: %d)%pB: rÃ©adressage relatif Ã  SB mais __c6xabi_DSBT_BASE n'est pas dÃ©fini%pB: la section SHT_GROUP [index %d] n'a pas de section SHF_GROUP%pB: code exÃ©cutable local TLS ne peut Ãªtre liÃ© en objets partagÃ©s%pB: Les sections TLS ne sont pas adjacentes:%pB: La premiÃ¨re section dans le segment PT_DYNAMIC n'est pas la section .dynamic%pB: objet XCOFF partagÃ© alors qu'on ne produit pas de sortie XCOFF%pB: __gp ne couvre pas le segment de donnÃ©es court%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole FDPIC et comme symbole local au thread%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole normal et comme symbole FDPIC%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole normal et comme symbole locale au thread%pB: Â«Â %sÂ Â» est ses symboles spÃ©ciaux sont dans des sections diffÃ©rentes%pB: Â«Â %sÂ Â» contient des numÃ©ros de lignes mais de section d'encadrement%pB: Â«Â %sÂ Â» est dans le chargeur de rÃ©adressage mais pas dans celui des symboles%pB: rÃ©adressage non-PLT Â«Â %sÂ Â» pour le symbole dÃ©fini dans une bibliothÃ¨que partagÃ©e et accÃ©dÃ© depuis l'exÃ©cutable (recompilez le fichier avec -fPICÂ ?)%pB: symbole standard Â«Â %sÂ Â» absent%pB: l'opÃ©rande devrait Ãªtre zÃ©ro pour des rÃ©adressages got%pB: l'opÃ©rande devrait Ãªtre zÃ©ro pour des rÃ©adressages plt%pB: l'en-tÃªte aout spÃ©cifie un nombre invalide d'entrÃ©es de rÃ©pertoire de donnÃ©es: %ld%pB: l'architecture ne concorde pas avec les modules prÃ©cÃ©dents%pB: tentative de charger des chaÃ®nes depuis une section non-chaÃ®nes (numÃ©ro %d)%pB: tentative de mÃ©langer des objets FDPIC et non-FDPIC%pB: tentative d'Ã©crire un type de rÃ©adressage inconnu%pB: mauvais enregistrement de rÃ©adressage importÃ©: %d%pB: nom de section de rÃ©adressage erronÃ© Â«Â %sÂ Â»%pB: longueur erronÃ©e de section dans ihex_read_section%pB: DÃ©finition de symbole erronÃ©e: Â«Â MainÂ Â» initialisÃ© Ã  %s au lieu de l'adresse de dÃ©part %s
-%pB: symbole index erronÃ©: %d%pB: rÃ©adressage base plus dÃ©calage vers le symbole registre: %s dans %pA%pB: rÃ©adressage base plus dÃ©calage vers le symbole registre: (inconnu) dans %pA%pB: ne peut reprÃ©senter la section Â«Â %pAÂ Â» dans le fichier format objet a.out%pB: ne peut reprÃ©senter la section pour le symbole Â«Â %sÂ Â» dans le fichier format objet a.out%pB: impossible de rÃ©aliser l'Ã©dition de liens des modules %s avec les modules %s%pB: impossible de faire l'Ã©dition de lien avec une autre cible%pB: ne peut pas allouer un nom de fichier pour le no. de fichier %d, %d octets
-%pB: ne peut crÃ©er l'entrÃ©e de l'Ã©bauche %s%pB: les binaires compressÃ©s pour Alpha ne sont pas supportÃ©s; utilisez les options du compilateur ou objZ pour produire des binaires non compressÃ©s%pB: ne peut lier un fichier objet fdpic dans un exÃ©cutable non fdpic%pB: ne peut lier un fichier objet non fdpic dans un exÃ©cutable fdpic%pB: ne peut lier ensemble les objets %s et %s%pB: changÃ© dans le GP: BRSGP %s%pB: classe %d symbole Â«Â %sÂ Â» n'a pas d'entrÃ©e auxiliaire%pB: compilÃ© %s -mtune=%s et liÃ© avec des modules compilÃ©s %s -mtune=%s%pB: compilÃ© pour un systÃ¨me Ã  64 bits et la cible est de 32 bits%pB: compilÃ© pour un systÃ¨me Ã  octets de poids fort alors que la cible est un systÃ¨me Ã  octets de poids faible%pB: compilÃ© pour un systÃ¨me Ã  octets de poids faible alors que la cible est un systÃ¨me Ã  octets de poids fort%pB: compilÃ© normalement et fait l'Ã©dition de lien avec les modules compilÃ©s avec -mrelocatable%pB: compilÃ© avec %s et liÃ© avec les modules compilÃ©s avec %s%pB: compilÃ© avec %s et liÃ© avec les modules qui utilisent le rÃ©adressage non PIC%pB: compilÃ© avec -mrelocatable et fait l'Ã©dition de lien avec les modules compilÃ©s normalement%pB: ne peut repÃ©rer la section de sortie %pA pour la section d'entrÃ©e %pA%pB: ne peut pas lire le contenu de la section Â«Â %pAÂ Â»
+  rÃ©adressage de %s pas valable dans un objet partagÃ©; typiquement un mÃ©lange dans les options. Recompilez avec -fPIC%pB, section %pA: pas de PLT pour rÃ©adresser %s sur le symbole Â«Â %sÂ Â»%pB, section %pA: Pas de PLT ni de GOT pour rÃ©adresser %s sur le symbole Â«Â %sÂ Â»%pB, section %pA: rÃ©adressage de %s a une rÃ©fÃ©rence non dÃ©finie vers Â«Â %sÂ Â», peut-Ãªtre un mÃ©lange dans les dÃ©clarationsÂ ?%pB, section %pA: rÃ©adressage de %s n'est pas permis pour Â«Â %sÂ Â», un symbole global avec la visibilitÃ© par dÃ©faut, peut-Ãªtre un mÃ©lange dans les dÃ©clarationsÂ ?%pB, section %pA: le rÃ©adressage de %s n'est pas permis pour le symbole global: Â«Â %sÂ Â»%pB, section %pA: rÃ©adressage de %s n'est pas permis pour le symbole Â«Â %sÂ Â» qui est dÃ©fini en dehors du programme, peut-Ãªtre un mÃ©lange dans les dÃ©clarationsÂ ?%pB, section %pA: rÃ©adressage de %s ne devrait pas Ãªtre utilisÃ© dans un objet partagÃ©; recompilez avec -fPIC%pB, section %pA: rÃ©adressage de %s sans GOT%pB, section %pA: rÃ©adressage %s non rÃ©solu sur le symbole Â«Â %sÂ Â»%pB, section %pA: l'objet compatible v10/v32 ne peut pas contenir de rÃ©adressage PIC%pB, section Â«Â %pAÂ Â», vers le symbole Â«Â %sÂ Â»: rÃ©adressage de %s ne devrait pas Ãªtre utilisÃ© dans un objet partagÃ©; recompilez avec -fPIC%pB: rÃ©adressage !samegp vers le symbole sans .prologue: %s%pB: %pA taille de section d'entrÃ©e invalide%pB: %pA pas dans l'ordre%pB: %pA pointe au delÃ  de la fin de la section texte%pB: %pA: dÃ©bordement de rÃ©adressage: %#x > 0xffff%pB: %s (offset: 0x%v, info: 0x%v) sur Â«Â %sÂ Â» pour la section Â«Â %pAÂ Â» dans %pB
+%pB: %s (offset: 0x%v, info: 0x%v, terme: 0x%v) sur Â«Â %sÂ Â» pour la section Â«Â %pAÂ Â» dans %pB
+%pB: dÃ©saccord du fanion %s avec les modules prÃ©cÃ©dents%pB: symbole locale %s Ã  l'index %lu (>= sh_info de %lu)%pB: %s pas supportÃ©%pB: %s pas supportÃ©%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole normal et comme symbole locale au thread%pB: %s: version requise invalide %d%pB: %s: version invalide %u (max %d)%pB: %s: dÃ©bordement de rÃ©adressage: 0x%lx > 0xffff%pB: symbole Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme normal et comme local au thread%pB: --in-implib uniquement supportÃ© pour les bibliothÃ¨ques d'import Secure Gateway%pB: entrÃ©e .gnu.version_d invalide%pB: entrÃ©e .gnu.version_r invalide%pB: le sous-segment .got excÃ¨de 64K (taille %d)%pB: .opd n'est pas un tableau rÃ©gulier d'entrÃ©es opd%pB: section .preinit_array n'est pas permise dans DSO%pB: Ã©chec de la fusion de .rsrc: section .rsrc corrompue%pB: Ã©chec de la fusion de .rsrc: taille de .rsrc inattendue%pB: rÃ©adressage @gprel vers le symbole dynamique %s%pB: branchement @internal vers le symbole dynamique %s%pB: rÃ©adressage @pcrel vers le symbole dynamique %s%pB: ABI est incompatible avec celui sÃ©lectionnÃ© pour l'Ã©mulation%pB: l'ABI est incompatible avec celle de l'Ã©mulation sÃ©lectionnÃ©e:
+  l'Ã©mulation de la cible Â«Â %sÂ Â» ne correspond pas Ã  Â«Â %sÂ Â»%pB: ABI ne concorde pas: Ã©dition de lien du module %s avec les modules prÃ©cÃ©dents %s%pB: la version ABI %ld n'est pas compatible avec la sortie de l'ABI version %ld%pB: ASE ne concorde pas: Ã©dition de lien du module %s avec les modules prÃ©cÃ©dents %s%pB: Ajustement du branchement Ã  0x%V vers Â«Â %sÂ Â» dans la section %s
+%pB: les images BE8 ne sont valables qu'en mode gros boutiste%pB: C_STAT n'est pas supportÃ© par XCOFF64%pB: Ne peut crÃ©er l'entrÃ©e de l'Ã©bauche Â«Â %sÂ Â»%pB: Impossible de gÃ©rer une taille de valeur de rÃ©adressage de %d%pB: Descripteur de fonction rÃ©adressÃ© avec un opÃ©rande non nul%pB: la section GNU_MBIND Â«Â %pAÂ Â» a un champ sh_info invalide: %d%pB: dÃ©bordement GOT: nombre de rÃ©adressages avec des offsets de 8 ou 16 bits > %d%pB: dÃ©bordement GOT: nombre de rÃ©adressages avec des offsets de 8 bits > %d%pB: Taille de vecteur ISR en dÃ©saccord avec les modules prÃ©cÃ©dents: prÃ©cÃ©dent a %u octets; actuel a %u octets%pB: Le nombre de symboles dans le fichier d'entrÃ©e a augmentÃ© de %lu Ã  %u
+%pB: RÃ©adressages en format ELF gÃ©nÃ©rique (EM: %d)%pB: rÃ©adressage relatif Ã  SB mais __c6xabi_DSBT_BASE n'est pas dÃ©fini%pB: la section SHT_GROUP [index %d] n'a pas de section SHF_GROUP%pB: code exÃ©cutable local TLS ne peut Ãªtre liÃ© en objets partagÃ©s%pB: rÃ©adressage TLS %s sur le symbole indÃ©fini Â«Â %sÂ Â»%pB: Les sections TLS ne sont pas adjacentes:%pB: l'entrÃ©e TOC Â«Â %sÂ Â» a un rÃ©adressage R_TLSML qui ne se cible pas lui-mÃªme%pB: La premiÃ¨re section dans le segment PT_DYNAMIC n'est pas la section .dynamic%pB: Impossible de gÃ©rer l'indice de section %x dans le symbole ELF. Utilisation de ABS Ã  la place.%pB: objet XCOFF partagÃ© alors qu'on ne produit pas de sortie XCOFF%pB: __gp ne couvre pas le segment de donnÃ©es court%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole FDPIC et comme symbole local au thread%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole normal et comme symbole FDPIC%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole normal et comme symbole locale au thread%pB: Â«Â %sÂ Â» est ses symboles spÃ©ciaux sont dans des sections diffÃ©rentes%pB: Â«Â %sÂ Â» contient des numÃ©ros de lignes mais de section d'encadrement%pB: Â«Â %sÂ Â» est dans le chargeur de rÃ©adressage mais pas dans celui des symboles%pB: rÃ©adressage non-PLT Â«Â %sÂ Â» pour le symbole dÃ©fini dans une bibliothÃ¨que partagÃ©e et accÃ©dÃ© depuis l'exÃ©cutable (recompilez le fichier avec -fPICÂ ?)%pB: symbole standard Â«Â %sÂ Â» absent%pB: l'opÃ©rande devrait Ãªtre zÃ©ro pour des rÃ©adressages got%pB: l'opÃ©rande devrait Ãªtre zÃ©ro pour des rÃ©adressages plt%pB: ajustement du FileAlignment invalide%pB: ajustement du SectionAlignement invalide%pB: l'architecture ne concorde pas avec les modules prÃ©cÃ©dents%pB: tentative de charger des chaÃ®nes depuis une section non-chaÃ®nes (numÃ©ro %d)%pB: tentative de mÃ©langer des objets FDPIC et non-FDPIC%pB: tentative d'Ã©crire un type de rÃ©adressage inconnu%pB: mauvais enregistrement de rÃ©adressage importÃ©: %d%pB: nom de section de rÃ©adressage erronÃ© Â«Â %sÂ Â»%pB: longueur erronÃ©e de section dans ihex_read_section%pB: symbole index erronÃ©: %d%pB: rÃ©adressage base plus dÃ©calage vers le symbole registre: %s dans %pA%pB: rÃ©adressage base plus dÃ©calage vers le symbole registre: (inconnu) dans %pA%pB: ne peut reprÃ©senter la section Â«Â %pAÂ Â» dans le fichier format objet a.out%pB: ne peut reprÃ©senter la section pour le symbole Â«Â %sÂ Â» dans le fichier format objet a.out%pB: impossible de rÃ©aliser l'Ã©dition de liens des modules %s avec les modules %s%pB: impossible de faire l'Ã©dition de lien avec une autre cible%pB: ne peut lier ensemble des objets d'ABI diffÃ©rentes.%pB: ne peut pas allouer un nom de fichier pour le no. de fichier %d, %d octets
+%pB: impossible d'allouer la mÃ©moire pour les entrÃ©es locales GOT%pB: ne peut crÃ©er l'entrÃ©e de l'Ã©bauche %s%pB: impossible d'exporter le symbole interne Â«Â %sÂ Â».%pB: les binaires compressÃ©s pour Alpha ne sont pas supportÃ©s; utilisez les options du compilateur ou objZ pour produire des binaires non compressÃ©s%pB: ne peut lier un fichier objet fdpic dans un exÃ©cutable non fdpic%pB: ne peut lier un fichier objet non fdpic dans un exÃ©cutable fdpic%pB: ne peut lier ensemble les objets %s et %s%pB: changÃ© dans le GP: BRSGP %s%pB: classe %d symbole Â«Â %sÂ Â» n'a pas d'entrÃ©e auxiliaire%pB: compilÃ© %s -mtune=%s et liÃ© avec des modules compilÃ©s %s -mtune=%s%pB: compilÃ© pour un systÃ¨me Ã  64 bits et la cible est de 32 bits%pB: compilÃ© pour un systÃ¨me Ã  octets de poids fort alors que la cible est un systÃ¨me Ã  octets de poids faible%pB: compilÃ© pour un systÃ¨me Ã  octets de poids faible alors que la cible est un systÃ¨me Ã  octets de poids fort%pB: compilÃ© normalement et fait l'Ã©dition de lien avec les modules compilÃ©s avec -mrelocatable%pB: compilÃ© avec %s et liÃ© avec les modules compilÃ©s avec %s%pB: compilÃ© avec %s et liÃ© avec les modules qui utilisent le rÃ©adressage non PIC%pB: compilÃ© avec -mrelocatable et fait l'Ã©dition de lien avec les modules compilÃ©s normalement%pB: le branchement conditionnel vers le symbole non dÃ©fini Â«Â %sÂ Â» n'est pas permis%pB: ne peut repÃ©rer la section de sortie %pA pour la section d'entrÃ©e %pA%pB: ne peut pas lire le contenu de la section Â«Â %pAÂ Â»
 %pB: csect Â«Â %sÂ Â» n'est pas dans un section d'encadrement%pB: le rÃ©adressage GOT direct %s vers Â«Â %sÂ Â» sans registre de base ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: le rÃ©adressage GOT direct R_386_GOT32X sur le symbole Â«Â %sÂ Â» sans registre de base ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: directive LOCAL valide seulement avec un registre ou une valeur absolue%pB: rÃ©adressage relatif au dtp vers le symbole dynamique %s%pB: Ã©bauche d'exportation en double %s%pB: section dupliquÃ©e Â«Â %pAÂ Â» a des contenus diffÃ©rents
 %pB: section dupliquÃ©e Â«Â %pAÂ Â» avec des tailles diffÃ©rentes
 %pB: objet dynamique sans section .loader%pB: rÃ©adressage dynamique sur Â«Â %pTÂ Â» dans la section en lecture seule Â«Â %pAÂ Â»
+%pB: rÃ©adressage dynamique sur un symbole local dans la section en lecture seule Â«Â %pAÂ Â»
 %pB: rÃ©adressage dynamique dans une section en lecture seule Â«Â %pAÂ Â»
-%pB: systÃ¨me de poids fort ou faible incompatible avec celui sÃ©lectionnÃ© pour l'Ã©mulation%pB: la fonction Â«Â %sÂ Â» d'entrÃ©e est vide%pB: fonction Â«Â %sÂ Â» d'entrÃ©e par Ã©crite%pB: erreur: non concordance de l'ABI avec les modules prÃ©cÃ©dents%pB: erreur: l'Ã©bauche d'erratum du Cortex A8 est allouÃ©e Ã  un emplacement peu sÃ»r%pB: erreur: l'Ã©bauche d'erratum du Cortex A8 est hors limite (fichier d'entrÃ©e trop grand)%pB: erreur: segment PHDR non couvert par le segment LOAD%pB: erreur: vernis VFP11 hors limite%pB: erreur: l'alignement Ã  la puissance %d de la section Â«Â %pAÂ Â» est trop grand%pB: erreur: section d'attributs Â«Â %pAÂ Â» trop grande: %llx%pB: erreur: impossible de crÃ©er le trampoline (veneer) du STM32L4XX.%pB: erreur: les donnÃ©es de dÃ©bogage s'arrÃªtent aprÃ¨s la fin du rÃ©pertoire de dÃ©bogage%pB: erreur: l'Ã©bauche d'erratum du 835769 est hors limite (fichier d'entrÃ©e trop grand)%pB: erreur: l'Ã©bauche d'erratum du 843419 est hors limite (fichier d'entrÃ©e trop grand)%pB: erreur: le jeu d'instructions ne concorde par avec les modules prÃ©cÃ©dents%pB: erreur: multiple dÃ©finitions de Â«Â %sÂ Â»; dÃ©but de %s est initialisÃ© dans un prÃ©cÃ©dent fichier liÃ©%pB: erreur: le segment de non-chargement %d inclus un en-tÃªte de fichier ou de programme%pB: erreur: search_nds32_elf_blank rapporte le mauvais nÅ“ud%pB: erreur: symbole Â«Â %sÂ Â» inattendu dans la section COMDAT%pB: erreur: l'attribut d'objet EABI obligatoire %d est manquant%pB: impossible de trouver la section d'information pour la section %d%pB: impossible de trouver la section de liaison pour la section %d%pB: Ã©chec de la gÃ©nÃ©ration de la bibliothÃ¨que d'importation%pB: Ã©chec lors de la lecture de la section des donnÃ©es de dÃ©bogage%pB: fatal: symboles gÃ©nÃ©riques rÃ©cupÃ©rÃ©s avant la relÃ¢che%pB: classe de fichier %s incompatible avec %s%pB: rÃ©adressage gotoff vers le symbole dynamique %s%pB: rÃ©adressage relatif au gp vers le symbole dynamique %s%pB: la section de groupe Â«Â %pAÂ Â» n'a pas de contenu%pB: symbole cachÃ© Â«Â %sÂ Â» dans %pB est rÃ©fÃ©rencÃ© par DSO%pB: symbole cachÃ© Â«Â %sÂ Â» n'est pas dÃ©fini%pB: ignore les sections dupliquÃ©es Â«Â %pAÂ Â»
+%pB: systÃ¨me de poids fort ou faible incompatible avec celui sÃ©lectionnÃ© pour l'Ã©mulation%pB: la fonction Â«Â %sÂ Â» d'entrÃ©e est vide%pB: fonction Â«Â %sÂ Â» d'entrÃ©e par Ã©crite%pB: erreur: non concordance de l'ABI avec les modules prÃ©cÃ©dents%pB: erreur: l'Ã©bauche d'erratum du Cortex A8 est allouÃ©e Ã  un emplacement peu sÃ»r%pB: erreur: l'Ã©bauche d'erratum du Cortex A8 est hors limite (fichier d'entrÃ©e trop grand)%pB: erreur: segment PHDR non couvert par le segment LOAD%pB: erreur: vernis VFP11 hors limite%pB: erreur: l'alignement Ã  la puissance %d de la section Â«Â %pAÂ Â» est trop grand%pB: erreur: section d'attributs Â«Â %pAÂ Â» trop grande: %llx%pB: erreur: longueur de section d'attributs trop petite: %ld%pB: erreur: impossible de crÃ©er le trampoline (veneer) du STM32L4XX.%pB: erreur: les donnÃ©es de dÃ©bogage s'arrÃªtent aprÃ¨s la fin du rÃ©pertoire de dÃ©bogage%pB: erreur: l'Ã©bauche d'erratum du 835769 est hors limite (fichier d'entrÃ©e trop grand)%pB: erreur: l'Ã©bauche d'erratum du 843419 est hors limite (fichier d'entrÃ©e trop grand)%pB: erreur: le jeu d'instructions ne concorde par avec les modules prÃ©cÃ©dents%pB: erreur: multiple dÃ©finitions de Â«Â %sÂ Â»; dÃ©but de %s est initialisÃ© dans un prÃ©cÃ©dent fichier liÃ©%pB: erreur: le segment de non-chargement %d inclus un en-tÃªte de fichier ou de programme%pB: erreur: search_nds32_elf_blank rapporte le mauvais nÅ“ud%pB: erreur: symbole Â«Â %sÂ Â» inattendu dans la section COMDAT%pB: erreur: l'attribut d'objet EABI obligatoire %d est manquant%pB: index de symbole attendu dans la plage 0..%lu mais un symbole local avec l'index %lu a Ã©tÃ© rencontrÃ©%pB: impossible de trouver la section d'information pour la section %d%pB: impossible de trouver la section de liaison pour la section %d%pB: Ã©chec de la gÃ©nÃ©ration de la bibliothÃ¨que d'importation%pB: Ã©chec lors de la lecture de la section des donnÃ©es de dÃ©bogage%pB: fatal: symboles gÃ©nÃ©riques rÃ©cupÃ©rÃ©s avant la relÃ¢che%pB: classe de fichier %s incompatible avec %s%pB: rÃ©adressage gotoff vers le symbole dynamique %s%pB: rÃ©adressage relatif au gp vers le symbole dynamique %s%pB: la section de groupe Â«Â %pAÂ Â» n'a pas de contenu%pB: symbole cachÃ© Â«Â %sÂ Â» dans %pB est rÃ©fÃ©rencÃ© par DSO%pB: symbole cachÃ© Â«Â %sÂ Â» n'est pas dÃ©fini%pB: ignore les sections dupliquÃ©es Â«Â %pAÂ Â»
 %pB: nom illÃ©gal de section Â«Â %pAÂ Â»%pB: symbole index %ld illÃ©gal dans les rÃ©adressages%pB: type de machine incompatible; sortie est 0x%x; entrÃ©e est 0x%x%pB: taille incorrecte pour le symbole Â«Â %sÂ Â»%pB: symbole indirect Â«Â %sÂ Â» vers Â«Â %sÂ Â» est une boucle%pB: jeu d'instructions ne concorde par avec les modules prÃ©cÃ©dents%pB: erreur interne dans ihex_read_section%pB: erreur interne, registre interne de section %pA contient quelque chose
 %pB: erreur interne, table de symbole a changÃ© de taille de %d Ã  %d mots
-%pB: symbole interne Â«Â %sÂ Â» dans %pB est rÃ©fÃ©rencÃ© par DSO%pB: symbole interne Â«Â %sÂ Â» n'est pas dÃ©fini%pB: entrÃ©e invalide dans la section SHT_GROUP [%u]%pB: entrÃ©e de bibliothÃ¨que d'importation invalide: Â«Â %sÂ Â»; le symbole devrait Ãªtre absolu, global et faire rÃ©fÃ©rence Ã  des fonctions Thumb%pB: lien %u invalide pour la section de rÃ©adressages %s (index %u)%pB: fichier mmo invalide: YZ de lop_end (%ld) n'est pas Ã©gal au nombre de tetras du lop_stab prÃ©cÃ©dent (%ld)
+%pB: symbole interne Â«Â %sÂ Â» dans %pB est rÃ©fÃ©rencÃ© par DSO%pB: symbole interne Â«Â %sÂ Â» n'est pas dÃ©fini%pB: NumberOfRvaAndSizes invalide%pB: entrÃ©e invalide dans la section SHT_GROUP [%u]%pB: entrÃ©e de bibliothÃ¨que d'importation invalide: Â«Â %sÂ Â»; le symbole devrait Ãªtre absolu, global et faire rÃ©fÃ©rence Ã  des fonctions Thumb%pB: lien %u invalide pour la section de rÃ©adressages %s (index %u)%pB: fichier mmo invalide: YZ de lop_end (%ld) n'est pas Ã©gal au nombre de tetras du lop_stab prÃ©cÃ©dent (%ld)
 %pB: fichier mmo invalide: attendu YZ = 1 obtenu YZ = %d pour lop_quote
 %pB: fichier mmo invalide: attendu y = 0, obtenu y = %d pour lop_fixrx
 %pB: fichier mmo invalide: attendu z = 1 ou z = 2, obtenu z = %d pour lop_fixo
@@ -1157,15 +1214,19 @@ En-tÃªtes ppcboot:
 %pB: fichier mmo invalide: lop_end n'est pas le dernier Ã©lement dans le fichier
 %pB: fichier mmo invalide: lopcode Â«Â %dÂ Â» non supportÃ©
 %pB: champ sh_link (%d) invalide dans la section numÃ©ro %d%pB: symbole spÃ©cial Â«Â %sÂ Â» invalide; il doit Ãªtre un symbole de fonction global ou faible%pB: symbole standard Â«Â %sÂ Â» invalide; il doit Ãªtre un symbole de fonction global ou faible%pB: table de symboles invalide: symbole Â«Â %sÂ Â» dupliquÃ©
-%pB: dÃ©bordement du nombre de lignes: 0x%lx > 0xffff%pB: Ã©dition de liens du module %s avec les modules prÃ©cÃ©dents %s%pB: Ã©dition de liens de code 32 bits avec du code 64 bits%pB: Ã©dition de liens entre fichiers 64 bits et fichiers 32 bits%pB: Ã©dition de liens spÃ©cifiques pour UltraSPARC avec du code spÃ©cifique HAL%pB: Ã©dition de liens entre fichiers auto-pic et fichiers non-auto-pic%pB: Ã©dition de liens entre des fichiers Ã  octets de poids fort et des fichiers Ã  octets de poids faible%pB: Ã©dition de liens entre fichiers constant-gp et fichiers non-constant-gp%pB: fichiers liÃ©s compilÃ©s pour des entiers de 16 bits (-mshort) et d'autres pour des entiers de 32 bits%pB: fichiers liÃ©s compilÃ©s pour des doubles de 32 bits (-fshort-double) et d'autres pour des doubles de 64 bits%pB: certains fichiers liÃ©s compilÃ©s pour HCS12 avec d'autres compilÃ©s pour HC12%pB: Ã©dition de liens pour des fichiers Ã  octets de poids faible avec des fichiers Ã  octets de poids fort%pB: liaison de code non-pic dans un exÃ©cutable Ã  position indÃ©pendante%pB: Ã©dition de liens trap-on-NULL-dereference avec des fichiers non-trapping%pB: chargeur de rÃ©adressages dans la section %pA en lecture seule%pB: chargeur de rÃ©adressage dans une section non reconnue Â«Â %sÂ Â»%pB: symbole local Â«Â %sÂ Â» dans %pB est rÃ©fÃ©rencÃ© par DSO%pB: la table des descripteurs de symboles locaux peut Ãªtre NULL en application le rÃ©adressage %s sur un symbole local%pB: fanion machine en conflit avec la cible%pB: rÃ©adressage mal composÃ© dÃ©tectÃ© dans la section %pA%pB: rÃ©adressage mal composÃ© dÃ©tectÃ© dans la section %s%pB: XTY_LD Â«Â %sÂ Â» mal placÃ©%pB: OMIT_FP imbriquÃ©s dans %pA%pB: pas de noyau pour allouer un symbole de %d octets de longueur%pB: pas de noyau pour allouer un nom de section %s%pB: aucune info de groupe pour la section Â«Â %pAÂ Â»%pB: pas de registre initialisÃ©; section de longueur 0
-%pB: aucun symbole trouvÃ© dans la bibliothÃ¨que d'importation%pB: pas de section de version de symbole pour le symbole avec version Â«Â %sÂ Â»%pB: aucune section de groupe valable trouvÃ©e%pB: code non pic avec des rÃ©adressages imm vers le symbole dynamique Â«Â %sÂ Â»%pB: rÃ©adressage non-pic vers le symbole dynamique %s%pB: pas suffisamment d'espace pour les en-tÃªtes du programme, essayer l'option -N%pB: seuls les registres %%g[2367] peuvent Ãªtre dÃ©clarÃ©s en utilisant les registres STT_REGISTER%pB: pas assez de mÃ©moire en crÃ©ant le nom pour une section vide%pB: pas assez de mÃ©moire dans _bfd_elf_get_property%pB: la taille de page est trop grande (0x%x)%pB: rÃ©adressage relatif au PC vers le symbole dynamique %s%pB: rÃ©adressage relatif au PC vers le symbole faible non dÃ©fini %s%pB: le greffon doit gÃ©rer l'objet lto%pB: probablement compilÃ© sans -fPICÂ ?%pB: symbole protÃ©gÃ© Â«Â %sÂ Â» n'est pas dÃ©fini%pB: type de machine reconnue mais non traitÃ©e (0x%x) dans l'archive da la librairie de formats d'importation%pB: rÃ©adressage de registre vers le symbole non-registre: %s dans %pA%pB: rÃ©adressage de registre vers le symbole non-registre: (inconnu) dans %pA%pB: rÃ©adressage par rapport Ã  un index de symbole inexistant: %ld%pB: lien relocalisable de %s vers %s n'est pas supportÃ©%pB: rÃ©adressage %s vers %s%sÂ«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en crÃ©ant %s%s%pB: le rÃ©adressage %s sur le symbole STT_GNU_IFUNC Â«Â %sÂ Â» n'est pas gÃ©rÃ© par %s%pB: le rÃ©adressage %s sur le symbole STT_GNU_IFUNC Â«Â %sÂ Â» n'est pas supportÃ©%pB: le rÃ©adressage %s vers Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en crÃ©ant un objet partagÃ©%pB: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC%pB: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC%pB: le rÃ©adressage de %s vers le symbole externe ou non dÃ©fini Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en construisant un %s; recompilez avec -fPIC%pB: le rÃ©adressage %s sur le symbole Â«Â %sÂ Â» n'est pas supportÃ© en mode x32%pB: rÃ©adressage de %s en vertu du symbol Â«Â %sÂ Â» qui peut Ãªtre liÃ© avec l'extÃ©rieur ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC%pB: rÃ©adressage de %s ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC%pB: rÃ©adressage %s ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: rÃ©adressage R_386_GOTOFF vers la %s protÃ©gÃ©e Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: rÃ©adressage R_386_GOTOFF sur le symbole %s Â«Â %sÂ Â» non dÃ©fini ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: rÃ©adressage R_X86_64_GOTOFF64 vers la %s protÃ©gÃ©e Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: rÃ©adressage R_X86_64_GOTOFF64 sur le symbole %s Â«Â %sÂ Â» non dÃ©fini ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: taille du rÃ©adressage ne concorde pas dans %pB section %pA%pB: rÃ©adressages en format ELF gÃ©nÃ©rique (EM: %d)%pB: rÃ©adressages dans la section Â«Â %pAÂ Â» qui est vide%pB: section %pA: dÃ©bordement de la table de chaÃ®nes Ã  l'offset %ld%pB: la section Â«Â %pAÂ Â» ne peut pas Ãªtre allouÃ©e dans le segment %d%pB: l'entrÃ©e de groupe de section %u est corrompue%pB: sh_link [%d] n'est pas correct dans la section Â«Â %pAÂ Â»%pB: le sh_link de la section Â«Â %pAÂ Â» pointe vers la section abandonnÃ©e Â«Â %pAÂ Â» de Â«Â %pBÂ Â»%pB: le sh_link de la section Â«Â %pAÂ Â» pointe vers la section supprimÃ©e Â«Â %pAÂ Â» de Â«Â %pBÂ Â»%pB: taille du champ est zÃ©ro dans l'en-tÃªte de la librairie de formats d'importation%pB: le symbole spÃ©cial Â«Â %sÂ Â» est uniquement autorisÃ© pour les architectures ARMv8-M ou ultÃ©rieures%pB: spÃ©culation d'ajustements vers le symbole dynamique %s%pB: taille de pile spÃ©cifiÃ©e et %s dÃ©fini%pB: chaÃ®ne n'est pas terminÃ©e par un zÃ©ro dans le fichier objet ILF%pB: support pour les dynamiques locaux pas implÃ©mentÃ©e%pB: symbole Â«Â %sÂ Â» a un type csect %d non reconnu%pB: symbole Â«Â %sÂ Â» a une classe smclas %d non reconnue%pB: symbole Â«Â %sÂ Â» requis mais absent%pB: l'adresse de la fonction protÃ©gÃ©e Â«Â %sÂ Â» ne peut Ãªtre prise lors de la crÃ©ation d'une librairie partagÃ©e%pB: la cible (%s) d'un rÃ©adressage %s est dans la mauvaise section de sortie (%s)%pB: la cible (%s) du rÃ©adressage %s est dans la mauvaise section (%pA)%pB: trop de sections (%d)%pB: trop de sections: %d (>= %d)%pB: trop de sections: %u%pB: rÃ©adressage relatif au tp vers le symbole dynamique %s%pB: impossible de crÃ©er une section vide factice%pB: impossible de remplir DataDictionary[12] car .idata$5 est manquant%pB: impossible de remplir DataDictionary[1] car .idata$2 est manquant%pB: impossible de remplir DataDictionary[1] car .idata$4 est manquant%pB: impossible de remplir DataDictionary[9] car __tls_used est manquant%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] car .idata$6 est manquant%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] car .idata$6 est manquant%pB: incapable de trouver le trampoline (veneer) Â«Â %sÂ Â» pour %s%pB: impossible de trouver le nom pour une section vide%pB: impossible d'obtenir la section dÃ©compressÃ©e %pA%pB: impossible d'initialiser le statut de compression de la section %s%pB: impossible d'initialiser le statut de dÃ©compression de la section %s%pB: impossible de charger le nom de section COMDAT%pB: impossible de trier les rÃ©adressages - plusieurs tailles rencontrÃ©es%pB: impossible de trier les rÃ©adressages - leur taille est inconnue%pB: rÃ©fÃ©rence au symbole non dÃ©fini Â«Â %sÂ Â»%pB: symbole Â«Â %sÂ Â» indÃ©fini dans la section .opd%pB: symbole indÃ©fini sur le rÃ©adressage R_PPC64_TOCSAVE%pB: attention: redÃ©finition inattendue du symbole indirect avec version Â«Â %sÂ Â»%pB: type de rÃ©adressage %u inattendu dans la section .opd%pB: rÃ©adressage dynamique non traitÃ© vers %s%pB: type d'importation non traitÃ©e; %x%pB: Architecture %s inconnue%pB: commande de chargement inconnue %#x%pB: l'attribut d'objet ARC obligatoire %d est inconnu%pB: l'attribut d'objet EABI obligatoire %d est inconnu%pB: type de rÃ©adressage %d inconnu%pB: type [%#x] inconnu dans la section Â«Â %sÂ Â»%pB: type [%#x] de section Â«Â %sÂ Â» inconnu dans le groupe [%pA]%pB: OMIT_FP non appariÃ© dans %pA%pB: type de machine non reconnu (0x%x) dans l'archive de librairie de formats d'importation%pB: type de nom d'importation non reconnu: %x%pB: type d'importation non reconnu; %x%pB: rÃ©adressage inconnu (%#x) dans la section Â«Â %pAÂ Â»%pB: classe de stockage %d non reconnue pour %s symbole Â«Â %sÂ Â»%pB: appel non-PIC non supportÃ© vers IFUNC Â«Â %sÂ Â»%pB: type de rÃ©adressage non supportÃ©%pB: type de rÃ©adressage %#x non supportÃ©%pB: type de rÃ©adressage exportÃ© non supportÃ© %#x%pB: type de rÃ©adressage importÃ© non supportÃ©: %#x%pB: type de rÃ©adressage non supportÃ©: %#x%pB: transition de %s Ã  %s non supportÃ©e%pB: sÃ©quence de caractÃ¨res large 0x%02X 0x%02X non supportÃ©e aprÃ¨s le nom de symbole dÃ©butant par Â«Â %sÂ Â»
-%pB: utilise les instructions %s tandis que les modules prÃ©cÃ©dents utilisent les instructions %s%pB: utilise des symboles prÃ©fixÃ©s par _ mais Ã©crits les symboles sans prÃ©fixes dans le fichier%pB: utilise des champs e_flags (%#x) diffÃ©rents des modules prÃ©cÃ©dents (%#x)%pB: utilise diffÃ©rents champs e_flags (%#x) de ceux des modules prÃ©cÃ©dents (%#x)%pB: utilise des instructions qui sont incompatibles avec les instructions utilisÃ©es dans les modules prÃ©cÃ©dents%pB: utilise des symboles sans prÃ©fixe mais ajoute le prÃ©fixe _ aux symboles dans le fichier%pB: version du nÅ“ud pas trouvÃ©e pour le symbole %s%pB: la visibilitÃ© du symbole Â«Â %sÂ Â» a changÃ©%pB: fichier core d'avertissement tronquÃ©%pB: attention: %pA: dÃ©bordement du compteur de numÃ©ro de ligne: %#x > 0xffff%pB: attention: instruction %s BLX vise la fonction %s Â«Â %sÂ Â».%pB: attention: rÃ©adressage %s vers le symbole Â«Â %sÂ Â» de la section %pA%pB: attention: %s non supportÃ© en mode partagÃ©%pB: attention: %s: dÃ©bordement du compteur de numÃ©ro de ligne: 0x%lx > 0xffff%pB: attention: symbole COMDAT Â«Â %sÂ Â» ne concorde par avec le nom de section Â«Â %sÂ Â»%pB: attention: la gÃ©nÃ©ration de PLT RVE n'est pas supportÃ©e%pB: attention: section allouÃ©e Â«Â %sÂ Â» n'est pas dans le segment%pB: attention: mauvaise Â«Â %sÂ Â» taille d'option %u plus petite que son en-tÃªte%pB: attention: ne peut pas dÃ©terminer la fonction cible de la section d'Ã©bauche Â«Â %sÂ Â»%pB: attention: prÃ©tend avoir 0xffff rÃ©adressages, sans dÃ©bordement%pB: attention: information de numÃ©ro de ligne dÃ©doublÃ©e pour Â«Â %sÂ Â»%pB: attention: l'ordre des octets n'est pas le mÃªme que dans les modules prÃ©cÃ©dents%pB: attention: ignore le fanion de section %s dans la section %s%pB: attention: symbole illÃ©gal dans l'entrÃ©e %d des numÃ©ros de lignes%pB: attention: symbole index illÃ©gal %ld dans les rÃ©adressages%pB: attention: symbole d'index 0x%lx illÃ©gal dans l'entrÃ©e %d des numÃ©ros de lignes%pB: attention: versions elf %s et %s non compatibles%pB: attention: ASE incohÃ©rents entre e_flags et .MIPS.abiflags%pB: attention: ABI FP incohÃ©rentes entre .gnu.attributes and .MIPS.abiflags%pB: attention: ISA incohÃ©rentes entre e_flags et .MIPS.abiflags%pB: attention: extensions ISA incohÃ©rentes entre e_flags et .MIPS.abiflags%pB: attention: isymMax (%ld) est plus grand que ifdMax (%ld)%pB: attention: le dÃ©compte du nombre de lignes (%#lx) dÃ©passe la taille de la section (%#lx)%pB: attention: erreur lors de la lecture de la table des numÃ©ros de ligne%pB: attention: Ã©dition de liens des fichiers PIC avec des fichiers non PIC%pB: attention: Ã©dition de liens des fichiers abicalls avec des fichiers non abicalls%pB: attention: boucle dÃ©tectÃ©e dans les dÃ©pendances de sections%pB: attention: plusieurs tables de symboles dynamiques ont Ã©tÃ© dÃ©tectÃ©es â€” la table dans la section %u est ignorÃ©e%pB: attention: plusieurs tables de symboles dÃ©tectÃ©es â€” la table dans la section %u est ignorÃ©e%pB: attention: pas de symbole trouvÃ© pour la section Â«Â %sÂ Â»%pB: attention: version plus ancienne du fichier objet rencontrÃ©e. Veuillez recompiler avec la chaÃ®ne d'outils actuelle%pB: attention: rÃ©adressage SDA_BASE a Ã©chouÃ©%pB: attention: le palliatif STM32L4XX sÃ©lectionnÃ© n'est pas nÃ©cessaire avec l'architecture cible%pB: attention: le palliatif VFP11 sÃ©lectionnÃ© n'est pas nÃ©cessaire avec l'architecture cible%pB: attention: sh_link n'a pas de valeur pour la section Â«Â %pAÂ Â»%pB: attention: table de symboles trop grande pour mmo, plus grande que 65535 mots de 32 bits: %d. Seul Â«Â MainÂ Â» sera produit.
-%pB: attention: gÃ©nÃ©ration de PLT dans le mode thumb-1 pas encore supportÃ©e%pB: attention: accÃ¨s non alignÃ© Ã  une entrÃ©e GOT%pB: attention: fanion inattendu dans le champ flags2 de .MIPS.abiflags (0x%lx)%pB: attention: attribut d'objet EABI %d inconnu%pB: le rÃ©adressage TLS ne sera pas rÃ©solu Ã  l'exÃ©cution%pB:%d: mauvaise somme de contrÃ´le dans le fichier S-record%pB:%d: nombre d'octets %d trop petit%pB:%d: caractÃ¨re inattendu Â«Â %sÂ Â» dans le fichier Intel hexadÃ©cimal%pB:%d: caractÃ¨re inattendu Â«Â %sÂ Â» dans le fichier S-record%pB:%pA%s dÃ©passe la taille de recouvrement
-%pB:%pA: %s et %s doivent Ãªtre dans la mÃªme section d'entrÃ©e%pB:%pA: erreur: symbole de rÃ©fÃ©rence des rÃ©adressages %s qui a Ã©tÃ© supprimÃ© par le ramasse miettes%pB:%pA: erreur: essayez de rÃ©Ã©diter les liens avec --gc-keep-exported enabled.%pB:%pA: la table %s n'a pas de %s correspondant%pB:%pA: l'entrÃ©e %s de la table n'est pas alignÃ©e sur un mot dans la table%pB:%pA: l'entrÃ©e %s de la table est en dehors de la table%pB:%pA: attention: rÃ©adressage %s Red Hat rÃ©prouvÃ©e dÃ©tectÃ© sur: %s%pB:%s a, Ã  la fois, des rÃ©adressages normaux et TLS%pB:%s section %s: l'alignement 2**%u n'est pas reprÃ©sentable%pB:%u: somme de contrÃ´le erronÃ©e dans le fichier Intel hexadÃ©cimal (attendu %u, obtenu %u)%pB:%u: longueur erronÃ©e de l'enregistrement d'adresse Ã©tendue dans le fichier Intel hexadÃ©cimal%pB:%u: longueur erronÃ©e de l'enregistrement d'adresse Ã©tendue linÃ©aire dans le fichier Intel hexadÃ©cimal%pB:%u: longueur erronÃ©e d'adresse Ã©tendue linÃ©aire de dÃ©but dans le fichier Intel hexadÃ©cimal%pB:%u: longueur erronÃ©e d'adresse Ã©tendue de dÃ©but dans le fichier Intel hexadÃ©cimal%pB:%u: type ihex %u non reconnu dans le fichier Intel hexadÃ©cimal%s dÃ©fini dans une entrÃ©e toc supprimÃ©e%s dupliquÃ©
+%pB: dÃ©calage de version %lx invalide (max %lx)%pB: dÃ©bordement du nombre de lignes: 0x%lx > 0xffff%pB: Ã©dition de liens du module %s avec les modules prÃ©cÃ©dents %s%pB: Ã©dition de liens de code 32 bits avec du code 64 bits%pB: Ã©dition de liens entre fichiers 64 bits et fichiers 32 bits%pB: Ã©dition de liens spÃ©cifiques pour UltraSPARC avec du code spÃ©cifique HAL%pB: Ã©dition de liens entre fichiers auto-pic et fichiers non-auto-pic%pB: Ã©dition de liens entre des fichiers Ã  octets de poids fort et des fichiers Ã  octets de poids faible%pB: Ã©dition de liens entre fichiers constant-gp et fichiers non-constant-gp%pB: fichiers liÃ©s compilÃ©s pour des entiers de 16 bits (-mshort) et d'autres pour des entiers de 32 bits%pB: fichiers liÃ©s compilÃ©s pour des doubles de 32 bits (-fshort-double) et d'autres pour des doubles de 64 bits%pB: certains fichiers liÃ©s compilÃ©s pour HCS12 avec d'autres compilÃ©s pour HC12%pB: Ã©dition de liens pour des fichiers Ã  octets de poids faible avec des fichiers Ã  octets de poids fort%pB: liaison de code non-pic dans un exÃ©cutable Ã  position indÃ©pendante%pB: Ã©dition de liens trap-on-NULL-dereference avec des fichiers non-trapping%pB: chargeur de rÃ©adressages dans la section %pA en lecture seule%pB: chargeur de rÃ©adressage dans une section non reconnue Â«Â %sÂ Â»%pB: symbole local Â«Â %sÂ Â» dans %pB est rÃ©fÃ©rencÃ© par DSO%pB: la table des descripteurs de symboles locaux peut Ãªtre NULL en application le rÃ©adressage %s sur un symbole local%pB: fanion machine en conflit avec la cible%pB: rÃ©adressage mal composÃ© dÃ©tectÃ© dans la section %pA%pB: rÃ©adressage mal composÃ© dÃ©tectÃ© dans la section %s%pB: XTY_LD Â«Â %sÂ Â» mal placÃ©%pB: OMIT_FP imbriquÃ©s dans %pA%pB: pas de noyau pour allouer un symbole de %d octets de longueur%pB: aucune info de groupe pour la section Â«Â %pAÂ Â»%pB: pas de registre initialisÃ©; section de longueur 0
+%pB: aucun symbole trouvÃ© dans la bibliothÃ¨que d'importation%pB: pas de section de version de symbole pour le symbole avec version Â«Â %sÂ Â»%pB: aucune section de groupe valable trouvÃ©e%pB: rÃ©fÃ©rence non canonique Ã  la fonction protÃ©gÃ©e canonique Â«Â %sÂ Â» dans %pB%pB: code non pic avec des rÃ©adressages imm vers le symbole dynamique Â«Â %sÂ Â»%pB: rÃ©adressage non-pic vers le symbole dynamique %s%pB: pas suffisamment d'espace pour les en-tÃªtes du programme, essayer l'option -N%pB: pas assez d'informations de version%pB: seuls les registres %%g[2367] peuvent Ãªtre dÃ©clarÃ©s en utilisant les registres STT_REGISTER%pB: pas assez de mÃ©moire en crÃ©ant le nom pour une section vide%pB: pas assez de mÃ©moire dans _bfd_elf_get_property%pB: dÃ©bordement dÃ» au compteur de rÃ©adressage trop petit%pB: rÃ©adressage relatif au PC vers le symbole dynamique %s%pB: rÃ©adressage relatif au PC vers le symbole faible non dÃ©fini %s%pB: le greffon doit gÃ©rer l'objet lto%pB: probablement compilÃ© sans -fPICÂ ?%pB: symbole protÃ©gÃ© Â«Â %sÂ Â» n'est pas dÃ©fini%pB: type de machine reconnue mais non traitÃ©e (0x%x) dans l'archive da la librairie de formats d'importation%pB: rÃ©adressage de registre vers le symbole non-registre: %s dans %pA%pB: rÃ©adressage de registre vers le symbole non-registre: (inconnu) dans %pA%pB: rÃ©adressage %#x pas supportÃ©%pB: rÃ©adressage par rapport Ã  un index de symbole inexistant: %ld%pB: lien relocalisable de %s vers %s n'est pas supportÃ©%pB: rÃ©adressage %s vers %s%sÂ«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en crÃ©ant %s%s%pB: le rÃ©adressage %s sur le symbole STT_GNU_IFUNC Â«Â %sÂ Â» n'est pas gÃ©rÃ© par %s%pB: le rÃ©adressage %s sur le symbole STT_GNU_IFUNC Â«Â %sÂ Â» n'est pas supportÃ©%pB: le rÃ©adressage %s vers Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en crÃ©ant un objet partagÃ©%pB: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC%pB: le rÃ©adressage %s vers le symbole absolu Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en crÃ©ant un objet partagÃ©%pB: le rÃ©adressage de %s vers le symbole externe ou non dÃ©fini Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en construisant un %s; recompilez avec -fPIC%pB: le rÃ©adressage %s vers le symbole pas absolu Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© dans RV32 en crÃ©ant un objet partagÃ©%pB: le rÃ©adressage %s vers le symbole pas absolu Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© dans RV64 en crÃ©ant un objet partagÃ©%pB: le rÃ©adressage %s sur le symbole Â«Â %sÂ Â» n'est pas supportÃ© en mode x32%pB: rÃ©adressage de %s en vertu du symbol Â«Â %sÂ Â» qui peut Ãªtre liÃ© avec l'extÃ©rieur ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC%pB: rÃ©adressage de %s ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC%pB: rÃ©adressage %s ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: rÃ©adressage %s dÃ©bordement 0x%lx%pB: rÃ©adressage %s dÃ©calage Ã  droite %d erreur 0x%lx%pB: rÃ©adressage R_386_GOTOFF vers la %s protÃ©gÃ©e Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: rÃ©adressage R_386_GOTOFF sur le symbole %s Â«Â %sÂ Â» non dÃ©fini ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: rÃ©adressage R_X86_64_GOTOFF64 vers la %s protÃ©gÃ©e Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: rÃ©adressage R_X86_64_GOTOFF64 sur le symbole %s Â«Â %sÂ Â» non dÃ©fini ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©%pB: taille du rÃ©adressage ne concorde pas dans %pB section %pA%pB: rÃ©adressages en format ELF gÃ©nÃ©rique (EM: %d)%pB: rÃ©adressages dans la section Â«Â %pAÂ Â» qui est vide%pB: section %pA: dÃ©bordement de la table de chaÃ®nes Ã  l'offset %ld%pB: la section %s est compressÃ©e avec zstd mais BFD n'est pas compilÃ© avec le support de zstd%pB: section Â«Â %pAÂ Â»: entrÃ©e VTENTRY corrompue%pB: la section Â«Â %pAÂ Â» ne peut pas Ãªtre allouÃ©e dans le segment %d%pB: l'entrÃ©e de groupe de section %u est corrompue%pB: sh_link [%d] n'est pas correct dans la section Â«Â %pAÂ Â»%pB: le sh_link de la section Â«Â %pAÂ Â» pointe vers la section abandonnÃ©e Â«Â %pAÂ Â» de Â«Â %pBÂ Â»%pB: le sh_link de la section Â«Â %pAÂ Â» pointe vers la section supprimÃ©e Â«Â %pAÂ Â» de Â«Â %pBÂ Â»%pB: taille du champ est zÃ©ro dans l'en-tÃªte de la librairie de formats d'importation%pB: le symbole spÃ©cial Â«Â %sÂ Â» est uniquement autorisÃ© pour les architectures ARMv8-M ou ultÃ©rieures%pB: spÃ©culation d'ajustements vers le symbole dynamique %s%pB: taille de pile spÃ©cifiÃ©e et %s dÃ©fini%pB: chaÃ®ne n'est pas terminÃ©e par un zÃ©ro dans le fichier objet ILF%pB: support pour les dynamiques locaux pas implÃ©mentÃ©e%pB: symbole Â«Â %sÂ Â» a un type csect %d non reconnu%pB: symbole Â«Â %sÂ Â» a une classe smclas %d non reconnue%pB: symbole Â«Â %sÂ Â» requis mais absent%pB: le symbole indique un recouvrement (pas supportÃ©)%pB: le nom de symbole dÃ©passe la longueur maximale donnÃ©e %d%pB: l'adresse de la fonction protÃ©gÃ©e Â«Â %sÂ Â» ne peut Ãªtre prise lors de la crÃ©ation d'une librairie partagÃ©e%pB: la cible (%s) d'un rÃ©adressage %s est dans la mauvaise section de sortie (%s)%pB: la cible (%s) du rÃ©adressage %s est dans la mauvaise section (%pA)%pB: trop de sections (%d)%pB: trop de sections: %d (>= %d)%pB: trop de sections: %u%pB: rÃ©adressage relatif au tp vers le symbole dynamique %s%pB: impossible de compresser la section %s%pB: impossible de crÃ©er une section vide factice%pB: impossible de dÃ©compresser la section %s%pB: impossible de remplir DataDictionary[12] car .idata$5 est manquant%pB: impossible de remplir DataDictionary[1] car .idata$2 est manquant%pB: impossible de remplir DataDictionary[1] car .idata$4 est manquant%pB: impossible de remplir DataDictionary[9] car __tls_used est manquant%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] car .idata$6 est manquant%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] car .idata$6 est manquant%pB: incapable de trouver le trampoline (veneer) Â«Â %sÂ Â» pour %s%pB: impossible de trouver le nom pour une section vide%pB: impossible d'obtenir la section dÃ©compressÃ©e %pA%pB: impossible de charger le nom de section COMDAT%pB: impossible de trier les rÃ©adressages - plusieurs tailles rencontrÃ©es%pB: impossible de trier les rÃ©adressages - leur taille est inconnue%pB: rÃ©fÃ©rence au symbole non dÃ©fini Â«Â %sÂ Â»%pB: symbole Â«Â %sÂ Â» indÃ©fini dans la section .opd%pB: symbole indÃ©fini sur le rÃ©adressage R_PPC64_TOCSAVE%pB: attention: redÃ©finition inattendue du symbole indirect avec version Â«Â %sÂ Â»%pB: type de rÃ©adressage %u inattendu dans la section .opd%pB: rÃ©adressage dynamique non traitÃ© vers %s%pB: type d'importation non traitÃ©e; %x%pB: valeur de machine sparc Â«Â %luÂ Â» non gÃ©rÃ©e dÃ©tectÃ©e durant le traitement de l'Ã©criture%pB: Architecture %s inconnue%pB: commande de chargement inconnue %#x%pB: l'attribut d'objet ARC obligatoire %d est inconnu%pB: l'attribut d'objet EABI obligatoire %d est inconnu%pB: type de rÃ©adressage %d inconnu%pB: type [%#x] inconnu dans la section Â«Â %sÂ Â»%pB: type [%#x] de section Â«Â %sÂ Â» inconnu dans le groupe [%pA]%pB: OMIT_FP non appariÃ© dans %pA%pB: type de machine non reconnu (0x%x) dans l'archive de librairie de formats d'importation%pB: type de nom d'importation non reconnu: %x%pB: type d'importation non reconnu; %x%pB: rÃ©adressage inconnu (%#x) dans la section Â«Â %pAÂ Â»%pB: classe de stockage %d non reconnue pour %s symbole Â«Â %sÂ Â»%pB: taille de rÃ©adressage AOUT non supportÃ©eÂ : %d%pB: architecture %#x non supportÃ©e%pB: correspondance bfd %#lx non supportÃ©e%pB: type de rÃ©adressage bfd %#x non supportÃ©%pB: correspondance %#x non supportÃ©e%pB: appel non-PIC non supportÃ© vers IFUNC Â«Â %sÂ Â»%pB: type de rÃ©adressage non supportÃ©%pB: type de rÃ©adressage %#x non supportÃ©%pB: type de rÃ©adressage %s non supportÃ©%pB: type de rÃ©adressage exportÃ© non supportÃ© %#x%pB: type de rÃ©adressage importÃ© non supportÃ©: %#x%pB: type de rÃ©adressage non supportÃ©: %#x%pB: swap_aux_in non supportÃ© pour la classe de stockage %#x%pB: swap_aux_out non supportÃ© pour la classe de stockage %#x%pB: transition de %s Ã  %s non supportÃ©e%pB: sÃ©quence de caractÃ¨res large 0x%02X 0x%02X non supportÃ©e aprÃ¨s le nom de symbole dÃ©butant par Â«Â %sÂ Â»
+%pB: utilise les instructions %s tandis que les modules prÃ©cÃ©dents utilisent les instructions %s%pB: utilise des symboles prÃ©fixÃ©s par _ mais Ã©crits les symboles sans prÃ©fixes dans le fichier%pB: utilise des champs e_flags (%#x) diffÃ©rents des modules prÃ©cÃ©dents (%#x)%pB: utilise diffÃ©rents champs e_flags (%#x) de ceux des modules prÃ©cÃ©dents (%#x)%pB: utilise des instructions qui sont incompatibles avec les instructions utilisÃ©es dans les modules prÃ©cÃ©dents%pB: utilise des symboles sans prÃ©fixe mais ajoute le prÃ©fixe _ aux symboles dans le fichier%pB: version du nÅ“ud pas trouvÃ©e pour le symbole %s%pB: la visibilitÃ© du symbole Â«Â %sÂ Â» a changÃ©%pB: fichier core d'avertissement tronquÃ©%pB: attention: %pA: dÃ©bordement du compteur de numÃ©ro de ligne: %#x > 0xffff%pB: attention: instruction %s BLX vise la fonction %s Â«Â %sÂ Â».%pB: attention: rÃ©adressage %s vers le symbole Â«Â %sÂ Â» de la section %pA%pB: attention: %s non supportÃ© en mode partagÃ©%pB: attention: %s: dÃ©bordement du compteur de numÃ©ro de ligne: 0x%lx > 0xffff%pB: avertissement: BTI activÃ© par -z force-bti alors que toutes les entrÃ©es n'ont pas BTI dans la section NOTE.%pB: attention: symbole COMDAT Â«Â %sÂ Â» ne concorde par avec le nom de section Â«Â %sÂ Â»%pB: attention: la gÃ©nÃ©ration de PLT RVE n'est pas supportÃ©e%pB: attention: R_RISCV_SUB_ULEB128 avec un terme non nul, veuillez recompiler avec binutils 2.42 ou supÃ©rieur%pB: avertissement: Le TLS faible est dÃ©fini par l'implÃ©mentation et pourrait ne pas fonctionner comme attendu%pB: attention: section allouÃ©e Â«Â %sÂ Â» n'est pas dans le segment%pB: attention: mauvaise Â«Â %sÂ Â» taille d'option %u plus petite que son en-tÃªte%pB: attention: ne peut pas dÃ©terminer la fonction cible de la section d'Ã©bauche Â«Â %sÂ Â»%pB: attention: prÃ©tend avoir 0xffff rÃ©adressages, sans dÃ©bordement%pB: attention: information de numÃ©ro de ligne dÃ©doublÃ©e pour Â«Â %sÂ Â»%pB: attention: l'ordre des octets n'est pas le mÃªme que dans les modules prÃ©cÃ©dents%pB: attention: ignore le fanion de section %s dans la section %s%pB: attention: symbole illÃ©gal dans l'entrÃ©e %d des numÃ©ros de lignes%pB: attention: symbole index illÃ©gal %ld dans les rÃ©adressages%pB: attention: symbole d'index 0x%lx illÃ©gal dans l'entrÃ©e %d des numÃ©ros de lignes%pB: attention: versions elf %s et %s non compatibles%pB: attention: ASE incohÃ©rents entre e_flags et .MIPS.abiflags%pB: attention: ABI FP incohÃ©rentes entre .gnu.attributes and .MIPS.abiflags%pB: attention: ISA incohÃ©rentes entre e_flags et .MIPS.abiflags%pB: attention: extensions ISA incohÃ©rentes entre e_flags et .MIPS.abiflags%pB: attention: isymMax (%ld) est plus grand que ifdMax (%ld)%pB: attention: erreur lors de la lecture de la table des numÃ©ros de ligne%pB: attention: Ã©dition de liens des fichiers PIC avec des fichiers non PIC%pB: attention: Ã©dition de liens des fichiers abicalls avec des fichiers non abicalls%pB: attention: boucle dÃ©tectÃ©e dans les dÃ©pendances de sections%pB: attention: plusieurs tables de symboles dynamiques ont Ã©tÃ© dÃ©tectÃ©es â€” la table dans la section %u est ignorÃ©e%pB: attention: plusieurs tables de symboles dÃ©tectÃ©es â€” la table dans la section %u est ignorÃ©e%pB: attention: pas de symbole trouvÃ© pour la section Â«Â %sÂ Â»%pB: attention: version plus ancienne du fichier objet rencontrÃ©e. Veuillez recompiler avec la chaÃ®ne d'outils actuelle%pB: attention: rÃ©adressage SDA_BASE a Ã©chouÃ©%pB: attention: la section de rÃ©adressage secondaire Â«Â %sÂ Â» pour la section %pA a Ã©tÃ© trouvÃ©e â€” elle est ignorÃ©e%pB: attention: le palliatif STM32L4XX sÃ©lectionnÃ© n'est pas nÃ©cessaire avec l'architecture cible%pB: attention: le palliatif VFP11 sÃ©lectionnÃ© n'est pas nÃ©cessaire avec l'architecture cible%pB: attention: table de symboles trop grande pour mmo, plus grande que 65535 mots de 32 bits: %d. Seul Â«Â MainÂ Â» sera produit.
+%pB: attention: gÃ©nÃ©ration de PLT dans le mode thumb-1 pas encore supportÃ©e%pB: attention: option Â«Â %sÂ Â» tronquÃ©e%pB: attention: impossible d'allouer une quelconque section dans le segment PT_GNU_RELRO%pB: attention: accÃ¨s non alignÃ© Ã  une entrÃ©e GOT%pB: attention: fanion inattendu dans le champ flags2 de .MIPS.abiflags (0x%lx)%pB: attention: attribut d'objet EABI %d inconnu%pB: attention: le win32pstatus %s, d'une taille de %lu octets, est trop petit%pB: le rÃ©adressage TLS ne sera pas rÃ©solu Ã  l'exÃ©cution%pB: le win32pstatus NOTE_INFO_MODULE, d'une taille de %lu, est trop petit pour contenir un nom d'une taille de %u%pB: mauvais auxtype %#x pour la classe de stockage %#x%pB:%.8s: RVA tronquÃ©%pB:%.8s: section en dessous de la base de l'image%pB:%d: mauvaise somme de contrÃ´le dans le fichier S-record%pB:%d: nombre d'octets %d trop petit%pB:%d: caractÃ¨re inattendu Â«Â %sÂ Â» dans le fichier Intel hexadÃ©cimal%pB:%d: caractÃ¨re inattendu Â«Â %sÂ Â» dans le fichier S-record%pB:%pA%s dÃ©passe la taille de recouvrement
+%pB:%pA: %s et %s doivent Ãªtre dans la mÃªme section d'entrÃ©e%pB:%pA: erreur: tentative d'Ã©crire au delÃ  de la fin de la section%pB:%pA: erreur: tentative d'Ã©crire la section dans un tampon vide%pB:%pA: erreur: symbole de rÃ©fÃ©rence des rÃ©adressages %s qui a Ã©tÃ© supprimÃ© par le ramasse miettes%pB:%pA: erreur: essayez de rÃ©Ã©diter les liens avec --gc-keep-exported enabled.%pB:%pA: la table %s n'a pas de %s correspondant%pB:%pA: l'entrÃ©e %s de la table n'est pas alignÃ©e sur un mot dans la table%pB:%pA: l'entrÃ©e %s de la table est en dehors de la table%pB:%pA: attention: rÃ©adressage %s Red Hat rÃ©prouvÃ©e dÃ©tectÃ© sur: %s%pB:%s a, Ã  la fois, des rÃ©adressages normaux et TLS%pB:%s section %s: l'alignement 2**%u n'est pas reprÃ©sentable%pB:%u: somme de contrÃ´le erronÃ©e dans le fichier Intel hexadÃ©cimal (attendu %u, obtenu %u)%pB:%u: longueur erronÃ©e de l'enregistrement d'adresse Ã©tendue dans le fichier Intel hexadÃ©cimal%pB:%u: longueur erronÃ©e de l'enregistrement d'adresse Ã©tendue linÃ©aire dans le fichier Intel hexadÃ©cimal%pB:%u: longueur erronÃ©e d'adresse Ã©tendue linÃ©aire de dÃ©but dans le fichier Intel hexadÃ©cimal%pB:%u: longueur erronÃ©e d'adresse Ã©tendue de dÃ©but dans le fichier Intel hexadÃ©cimal%pB:%u: type ihex %u non reconnu dans le fichier Intel hexadÃ©cimal%pB[%pA]: pas de section de sortie pour l'espace %pA%pcrel_lo n'a pas de %pcrel_hi correspondant%pcrel_lo dÃ©borde avec un termesymbole de section %pcrel_lo avec un opÃ©rande%pcrel_lo avec un terme n'est pas permis avec R_RISCV_GOT_HI20%s dÃ©fini dans une entrÃ©e toc supprimÃ©e%s divise par zÃ©ro%s dupliquÃ©
 %s dupliquÃ© dans %s
-%s a, Ã  la fois, des rÃ©adressages normaux et TLS%s dans une section de recouvrement%s pas dÃ©fini dans %pA crÃ©Ã© par l'Ã©diteur de liens%s non implÃ©mentÃ©dÃ©calage %s trop grand pour l'encodage .eh_frame sdata4%s: dÃ©finition TLS dans %pB section %pA ne correspond pas Ã  la dÃ©finition non TLS dans %pB section %pA%s: dÃ©finition TLS dans %pB section %pA ne correspond pas Ã  la rÃ©fÃ©rence TLS dans %pB%s: rÃ©fÃ©rence TLS dans %pB ne correspond pas Ã  la dÃ©finition non TLS dans %pB section %pA%s: rÃ©fÃ©rence TLS dans %pB ne correspond pas Ã  la rÃ©fÃ©rence non TLS dans %pB%s: pas de tel symbole%s: non implÃ©mentÃ©%s: pas supportÃ©%s: version non dÃ©finie: %s(Ã  l'offset de bit %u)
+%s a, Ã  la fois, des rÃ©adressages normaux et TLS%s dans une section de recouvrement%s est dÃ©fini mais n'a pas su Ãªtre chargÃ©Â : %s%s est dÃ©fini mais le support des greffons est dÃ©sactivÃ©%s est chargÃ© mais le symbole Â«Â %sÂ Â» n'est pas trouvÃ©Â : %s%s pas dÃ©fini dans %pA crÃ©Ã© par l'Ã©diteur de liens%s non implÃ©mentÃ©dÃ©calage %s trop grand pour l'encodage .eh_frame sdata4%s, itÃ©ration %u
+  branchement    %lu
+  branch. long   %lu
+  appel plt      %lu
+  entrÃ©e globale %lu%s: Mauvais id ELFÂ : Â«Â %dÂ Â»%s: la chaÃ®ne ISA ne peut pas contenir de lettre majuscule%s: la chaÃ®ne ISA doit commencer par rv32 ou rv64%s: dÃ©finition TLS dans %pB section %pA ne correspond pas Ã  la dÃ©finition non TLS dans %pB section %pA%s: dÃ©finition TLS dans %pB section %pA ne correspond pas Ã  la rÃ©fÃ©rence TLS dans %pB%s: rÃ©fÃ©rence TLS dans %pB ne correspond pas Ã  la dÃ©finition non TLS dans %pB section %pA%s: rÃ©fÃ©rence TLS dans %pB ne correspond pas Ã  la rÃ©fÃ©rence non TLS dans %pB%s: compilÃ© comme un objet de 32 bits et %s est de 64 bits%s: compilÃ© comme un objet de 64 bits et %s est de 32 bits%s: la premiÃ¨re extension ISA doit Ãªtre Â«Â eÂ Â», Â«Â iÂ Â» ou Â«Â gÂ Â»%s: l'extension ISA prÃ©fixÃ©e Â«Â %sÂ Â» invalide est terminÃ©e par <nombre>p%s: pas de tel symbole%s: non implÃ©mentÃ©%s: pas supportÃ©%s: taille de l'objet ne concorde pas avec la taille de la cible %s%s: l'extension ISA prÃ©fixÃ©e doit sÃ©parer avec _%s: version non dÃ©finie: %s%s: extension prÃ©fixÃ©e ISA Â«Â %sÂ Â» inconnue%s: extension ISA standard ou classe de prÃ©fixe Â«Â %cÂ Â» inconnue(Ã  l'offset de bit %u)
 (descripteur)
-(format %c%c%c%c signature %s age %ld)
+(format %c%c%c%c signature %s age %ld pdb %s)
 (pas de valeur)
 (pas active)
 (pas allouÃ©e)
@@ -1178,7 +1239,7 @@ En-tÃªtes ppcboot:
 , alias: %u
 , offset correctif Ã©tendu: %u, offset no_opt psect: %u, sous-type: %u (%s)
 , vecteur de symbol rva: - %pB est 64 bits, %pB ne l'est pas-mips32r2 -mfp64 (12 callee-saved)dÃ©bordement de l'entrÃ©e .eh_frame_hdr.eh_frame_hdr fait rÃ©fÃ©rence Ã  des FDE qui se chevauchentsection .got pas immÃ©diatement aprÃ¨s la section .pltÃ©chec de la fusion de .rsrc: un rÃ©pertoire correspond Ã  une feuilleÃ©chec de la fusion de .rsrc: versions de rÃ©pertoires diffÃ©rentesÃ©chec de la fusion .rsrc: rÃ©pertoires avec des caractÃ©ristiques diffÃ©rentesÃ©chec de la fusion de .rsrc: feuille dupliquÃ©eÃ©chec de la fusion .rsrc: feuille dupliquÃ©e: %sÃ©chec de la fusion de .rsrc: ressource chaÃ®ne dupliquÃ©e: %dÃ©chec de la fusion de .rsrc: plusieurs manifestes pas par dÃ©fautdouble de 32 bits, rÃ©adressage relatif gp 32bits rencontrÃ© pour un symbole externe4 octets4 octets64 bits *non supportÃ©*
-double de 64 bits, 8 octets8 octets: instructions m32r: instructions m32r2: instruction m32rx: instructions n1: instructions n1h; recompilez avec -fPIC<Bits de fanions non reconnus><info corrompue> %s<longueur de la chaÃ®ne corrompue: %#x>
+double de 64 bits, 8 octets8 octets: instructions m32r: instructions m32r2: instruction m32rx: instructions n1: instructions n1h; recompilez avec -fPIC; recompilez avec -fPIE<info corrompue> %s<longueur de la chaÃ®ne corrompue: %#x>
 <offset de la chaÃ®ne corrompue: %#lx>
 <corrompu><type de rÃ©pertoire inconnu: %d>
 <fanions de masque inconnus><inconnu>rÃ©adressage @pltoff vers un symbole localBASE_IMAGE       BFD assertion %s a Ã©chouÃ© %s:%dBFD erreur interne %s, abandon Ã  %s:%d
@@ -1189,17 +1250,15 @@ En-tÃªtes ppcboot:
 CTL_SETRB (fixe la base du rÃ©adressage)
 CTL_STKDL (position dÃ©finie dans la pile)
 CTL_STLOC (fixer position)
-En-tÃªte du copyright
+Coolidge (kv3) V1 32 bitsCoolidge (kv3) V1 64 bitsCoolidge (kv3) V2 32 bitsCoolidge (kv3) V2 64 bitsCoolidge (kv4) V1 32 bitsCoolidge (kv4) V1 64 bitsEn-tÃªte du copyright
 DÃ©tection d'une section .rsrc corrompueÂ !
-DSO manquant dans la ligne de commandeErreur DWARF: attribut DW_AT_comp_dir rencontrÃ© sous une forme non-chaÃ®neErreur DWARF: rÃ©cursion d'une instance abstraite dÃ©tectÃ©eErreur DWARF: ne peut repÃ©rer la section %s.Erreur DWARF: ne peut repÃ©rer le numÃ©ro abrÃ©gÃ© %uErreur DWARF: taille d'adresse obtenue Â«Â %uÂ Â», ce lecteur ne peut traiter des tailles plus grandes que Â«Â %uÂ Â»Erreur DWARF: version DWARF trouvÃ©e Â«Â %uÂ Â», ce lecteur ne supporte que les informations des versions 2, 3, 4 et 5Erreur DWARF: le pointeur d'info va au delÃ  de la fin des attributsErreur DWARF: rÃ©f DIE d'instance abstraite invalideErreur DWARF: opÃ©rations maximum par instruction invalideErreur DWARF: valeur de FORM invalide ou non supportÃ©e: %#xErreur DWARF: taille de sÃ©lecteur de segment %u non supportÃ©e pour les informations de lignesErreur DWARF: numÃ©ro de ligne de section mutilÃ©Erreur DWARF: numÃ©ro de ligne de section mutilÃ© (mauvais no. de fichier)Erreur DWARF: on est tombÃ© Ã  cours de place en lisant les opcodesErreur DWARF: on est tombÃ© Ã  cours de place lors de la lecture du prologueErreur DWARF: version .debug_line %d non prise en chargeErreur DWARF: dÃ©compte de format nulDW_EH_PE_datarel non spÃ©cifiÃ© pour cette architectureRÃ©pertoire de dÃ©bugTable de debug du module:
+DSO manquant dans la ligne de commandeErreur DWARF: attribut DW_AT_comp_dir rencontrÃ© sous une forme non-chaÃ®neErreur DWARF: rÃ©cursion d'une instance abstraite dÃ©tectÃ©eErreur DWARF: ne peut repÃ©rer la section %s.Erreur DWARF: ne peut repÃ©rer le numÃ©ro abrÃ©gÃ© %uErreur DWARF: ne peut repÃ©rer la spÃ©cification de variable au dÃ©calage 0x%lxErreur DWARF: taille d'adresse obtenue Â«Â %uÂ Â», ce lecteur ne peut traiter des tailles plus grandes que Â«Â %uÂ Â»Erreur DWARF: version DWARF trouvÃ©e Â«Â %uÂ Â», ce lecteur ne supporte que les informations des versions 2, 3, 4 et 5Erreur DWARF: le pointeur d'info va au delÃ  de la fin des attributsErreur DWARF: rÃ©f DIE d'instance abstraite invalideErreur DWARF: opÃ©rations maximum par instruction invalideErreur DWARF: valeur de FORM invalide ou non supportÃ©e: %#xErreur DWARF: taille de sÃ©lecteur de segment %u non supportÃ©e pour les informations de lignesErreur DWARF: numÃ©ro de ligne de section mutilÃ©Erreur DWARF: numÃ©ro de ligne de section mutilÃ© (mauvais no. de fichier)Erreur DWARF: on est tombÃ© Ã  cours de place en lisant les opcodesErreur DWARF: on est tombÃ© Ã  cours de place lors de la lecture du prologueErreur DWARF: la section %s n'a pas de contenuErreur DWARF: la section %s est trop grandeErreur DWARF: version .debug_line %d non prise en chargeErreur DWARF: dÃ©compte de format nulDW_EH_PE_datarel non spÃ©cifiÃ© pour cette architectureRÃ©pertoire de dÃ©bugTable de debug du module:
 Table des symboles de debug:
-RÃ©pertoire des dÃ©lais d'importation%s appel dÃ©prÃ©ciÃ©
-%s dÃ©prÃ©ciÃ© appelÃ© Ã  %s dans la ligne %d dans %s
-RÃ©pertoire de descriptionEIHD: (taille: %u, nbr blocs: %u)
+RÃ©pertoire des dÃ©lais d'importationRÃ©pertoire de descriptionEIHD: (taille: %u, nbr blocs: %u)
 DÃ©calage de l'entrÃ©e= 0x%.8lx (%ld)
-Erreur: %pB utilise les deux attributs Tag_MPextension_use actuel et hÃ©ritÃ©RÃ©pertoire des exceptions [.pdata]RÃ©pertoire d'exportation [.edata (ou lÃ  oÃ¹ il a Ã©tÃ© trouvÃ©)]Fanion d'exportation 			%lx
+Erreur: %pB et %pB ont des versions DSP diffÃ©rentesErreur: %pB et %pB ont des ABI FPU diffÃ©rentesErreur: %pB et %pB ont des versions VDSP diffÃ©rentesErreur: %pB utilise les deux attributs Tag_MPextension_use actuel et hÃ©ritÃ©RÃ©pertoire des exceptions [.pdata]RÃ©pertoire d'exportation [.edata (ou lÃ  oÃ¹ il a Ã©tÃ© trouvÃ©)]Fanion d'exportation 			%lx
 Exportation RVAencodage FDE dans %pB(%pA) empÃªche la crÃ©ation de la table .eh_frame_hdrFDPIC ne supporte pas encore le rÃ©adressage %s pour devenir dynamique Ã  l'exÃ©cutionFILES_VOLUMES    FPU-2.0FPU-3.0Champ de fanion     = 0x%.2x
-Adresseur RVAGALAXY           les rÃ©adressages GOT et PLT ne peuvent pas Ãªtre corrigÃ©s avec un Ã©diteur de liens non dynamiquetaille de la table GOT hors limitesRÃ©adressage relatif GP utilisÃ© alors que GP n'est pas dÃ©finirÃ©adressage relatif GP sans que _gp ne soit dÃ©finile rÃ©adressage GPDISP n'a pas repÃ©rÃ© les instructions ldah et ldaTable des symboles globaux:
+Adresseur RVAGALAXY           la section GNU_MBIND est uniquement supportÃ©e pour les cibles GNU et FreeBSDla section GNU_RETAIN est uniquement supportÃ©e pour les cibles GNU et FreeBSDles rÃ©adressages GOT et PLT ne peuvent pas Ãªtre corrigÃ©s avec un Ã©diteur de liens non dynamiquetaille de la table GOT hors limitesRÃ©adressage relatif GP utilisÃ© alors que GP n'est pas dÃ©finirÃ©adressage relatif GP sans que _gp ne soit dÃ©finile rÃ©adressage GPDISP n'a pas repÃ©rÃ© les instructions ldah et ldaTable des symboles globaux:
 Flottant matÃ©riel (processeur 32 bits, coprocesseur 64 bits)
 Flottant matÃ©riel (processeur 32 bits, tout coprocesseur)
 Flottant matÃ©riel (MIPS32r2 64 bits FPU 12 callee-saved)
@@ -1207,20 +1266,20 @@ En-tÃªtes ppcboot:
 Flottant matÃ©riel (simple prÃ©cision)
 CompatibilitÃ© flottant matÃ©riel (processeur 32 bits, coprocesseur 64 bits)
 Flottant matÃ©riel ou logiciel
-ID: %#08lxIDC - VÃ©rification de la consistance d'identitÃ©
-IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS pas supportÃ©sIO               Activation de l'image:  (taille=%u)
+propriÃ©tÃ©s IBT et SHSTKpropriÃ©tÃ© IBTID: %#08lxIDC - VÃ©rification de la consistance d'identitÃ©
+Symbole IFUNC %s dans la table des symboles dynamiques â€“ IFUNC n'est pas supportÃ©IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS pas supportÃ©sIO               Activation de l'image:  (taille=%u)
 Correction de l'activateur de l'image: (majeur: %u, mineur: %u)
 Identification d'image: (majeur: %u, mineur: %u)
 Descripteur de section d'image: (majeur: %u, mineur: %u, taille: %u, offset: %u)
 Image des symboles et table debug: (majeur: %u, mineur: %u)
-RÃ©pertoire de la table d'adresse d'importationRÃ©pertoire d'importation [faisant partie de .idata]LOGICAL_NAMES    Nom du Processeur de Langage
+RÃ©pertoire de la table d'adresse d'importationRÃ©pertoire d'importation [faisant partie de .idata]Erreur interne: inatteignable.propriÃ©tÃ© LAM_U48propriÃ©tÃ© LAM_U57LOGICAL_NAMES    Nom du Processeur de Langage
 Longueur            = 0x%.8lx (%ld)
 RÃ©pertoire de chargement de configurationFonction IFUNC locale Â«Â %sÂ Â» dans %pB
 MEMORY_MANAGEMENTDes fonctions MIPS16 et microMIPS ne peuvent pas s'appeler l'une l'autreMISC             utilisation MMU: MULTI_PROCESSING Majeur/Mineur 			%d/%d
 Pile maximum requise est 0x%v
 MeP: le howto %d a le type %dFusion des propriÃ©tÃ©s du programme
 En-tÃªte module
-NETWORKS         NORMALNom 				aucunNumÃ©ro dans:
+NETWORKS         NORMALNOTE: Ce comportement est dÃ©prÃ©ciÃ© et sera supprimÃ© dans une version ultÃ©rieure de l'Ã©diteur de liensNom 				aucunNumÃ©ro dans:
 OPR_ADD (ajout)
 OPR_AND (et logique)
 OPR_ASH (dÃ©calage arithmetique)
@@ -1231,7 +1290,7 @@ En-tÃªtes ppcboot:
 OPR_IOR (ou inclusif logique)
 OPR_MUL (multiplication)
 OPR_NEG (nÃ©gation)
-OPR_NOP (pas d'operation)
+OPR_NOP (pas d'opÃ©ration)
 OPR_REDEF (dÃ©finir un litÃ©ral)
 OPR_REDEF (redÃ©fini le symbole Ã  la position actuelle)
 OPR_ROT (rotation)
@@ -1245,21 +1304,19 @@ En-tÃªtes ppcboot:
 Longueur de la partition[%d] = 0x%.8lx (%ld)
 Secteur de la partition[%d] = 0x%.8lx (%ld)
 Merci de rapporter cette anomalie.
-conflit ABI RL78: le fichier G10 %pB ne peut pas Ãªtre liÃ© avec %s fichier %pBconflit d'ABI RL78: ne peut lier le fichier %2$pB pour %1$s avec le fichier %4$pB pour %3$sconflit de fusion RL78: ne peut lier ensemble un objet 32 bits et un objet 64 bitsR_BFIN_FUNCDESC fait rÃ©fÃ©rence Ã  un symbole dynamique avec un opÃ©rande non nulR_BFIN_FUNCDESC_VALUE fait rÃ©fÃ©rence Ã  un symbole dynamique avec un opÃ©rande non nulR_FRV_TLSMOFFLO pas appliquÃ© Ã  une instruction setlo ou setlos
+Fanions privÃ©s = 0x%lx : conflit ABI RL78: le fichier G10 %pB ne peut pas Ãªtre liÃ© avec %s fichier %pBconflit d'ABI RL78: ne peut lier le fichier %2$pB pour %1$s avec le fichier %4$pB pour %3$sconflit de fusion RL78: ne peut lier ensemble un objet 32 bits et un objet 64 bitsdivision par zÃ©ro dans le rÃ©adressage RL78dÃ©bordement (par le bas ou le haut) de la pile de rÃ©adressages RL78R_AMD64_IMAGEBASE avec __ImageBase est non-dÃ©finiR_BFIN_FUNCDESC fait rÃ©fÃ©rence Ã  un symbole dynamique avec un opÃ©rande non nulR_BFIN_FUNCDESC_VALUE fait rÃ©fÃ©rence Ã  un symbole dynamique avec un opÃ©rande non nulR_FRV_TLSMOFFLO pas appliquÃ© Ã  une instruction setlo ou setlos
 Lecture du cachet date-heure modifiÃ© du fichier d'archivePropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB (0x%v) et %pB (0x%v)
 PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB (0x%v) et %pB (pas trouvÃ©e)
 PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB (pas trouvÃ©e) et %pB (0x%v)
 PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB et %pB
 PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB et %pB (pas trouvÃ©e)
-RÃ©servÃ©RÃ©pertoire des resources [.rsrc]l'adresse S12 (%lx) n'est pas dans la mÃ©moire RAM partagÃ©e (0x2000-0x4000), par consÃ©quent, vous devez dÃ©caler l'adresse manuellement dans votre coderÃ©adressage SDA alors que _SDA_BASE_ n'est pas dÃ©finiSECURITY         SEC_RELOC sans rÃ©adressages dans la section %pASHELL            SHRFXDSHRPICutilisation SIMD: SPSC - Def de section de l'image partagÃ©e du programme
+RÃ©servÃ©RÃ©pertoire des resources [.rsrc]l'adresse S12 (%lx) n'est pas dans la mÃ©moire RAM partagÃ©e (0x2000-0x4000), par consÃ©quent, vous devez dÃ©caler l'adresse manuellement dans votre coderÃ©adressage SDA alors que _SDA_BASE_ n'est pas dÃ©finiSECURITY         SEC_RELOC sans rÃ©adressages dans la section %pASHELL            SHRFXDSHRPICpropriÃ©tÃ© SHSTKutilisation SIMD: SPSC - Def de section de l'image partagÃ©e du programme
 STABLE           STA_CKARG (compare les arguments de la procÃ©dure)
-STA_GBL (pile globals) %.*s
-STA_LI (pile literale)
-STA_LW (pile mot long) 0x%08x
-STA_MOD (pile module)
-STA_PQ (base pile psect + offset)
-STA_QW (pile quad mot) 0x%08x %08x
-STC_BOH_GBL (stocke BOH cond Ã  l'adresse globale)
+STA_GBL (empile globals) %.*s
+STA_LI (empile littÃ©ral)
+STA_LW (empile mot long)STA_MOD (empile module)
+STA_PQ (empile base psect + offset)
+STO_QW (empile quad mot)STC_BOH_GBL (stocke BOH cond Ã  l'adresse globale)
 STC_BOH_PS (stocke BOH cond Ã  psect + offset)
 STC_BSR_GBL (stocke BSR cond Ã  l'adresse globale)
 STC_BSR_PS (stocke BSR cond Ã  psect + offset)
@@ -1298,27 +1355,27 @@ En-tÃªtes ppcboot:
 En-tÃªte des fichiers sources
 RÃ©pertoire spÃ©cialTaille de la pile des nÅ“uds racine du graph d'appel.
 Pas:
-Symbole Â«Â %sÂ Â» a des types qui diffÃ¨rent: %s dans %pB, prÃ©cÃ©demment REGISTRE dans %pBrÃ©adressage TLS incorrecte sans section dynamiqueTable d'adresses
-Le champ de taille des donnÃ©es de dÃ©bogage dans le rÃ©pertoire de donnÃ©es est trop grand pour la sectionLa taille du rÃ©pertoire de dÃ©bogage n'est pas un multiple de la taille d'une entrÃ©e du rÃ©pertoire de dÃ©bogage
+Symbole Â«Â %sÂ Â» a des types qui diffÃ¨rent: %s dans %pB, prÃ©cÃ©demment REGISTRE dans %pBrÃ©adressage TLS incorrecte sans section dynamiqueDÃ©bordement de la table des entrÃ©es durant la gÃ©nÃ©ration de l'Ã©baucheÂ ; essayez l'option -mminimal-toc Ã  la compilationTable d'adresses
+Le terme n'est pas permis avec R_RISCV_GOT_HI20Le champ de taille des donnÃ©es de dÃ©bogage dans le rÃ©pertoire de donnÃ©es est trop grand pour la sectionLa taille du rÃ©pertoire de dÃ©bogage n'est pas un multiple de la taille d'une entrÃ©e du rÃ©pertoire de dÃ©bogage
 RÃ©pertoire des files de stockage [.tls]Tampon Heure/Date 		%lx
 En-tÃªte du texte du titre
 Trop de codes de dÃ©roulages (%ld)
 Type                Taille   Rva      DÃ©calage
-USRSTACKInconnuInconnu: %xPropriÃ©tÃ© mise Ã  jour %W (%v) Ã  fusionner %pB (0x%v) et %pB (pas trouvÃ©e)
+USRSTACKImpossible de trouver une entrÃ©e d'Ã©bauche ciblant %sImpossible de procÃ©der Ã  l'Ã©dition de liens sur le fichierÂ : %sImpossible de charger la DLL.InconnuInconnu: %xPropriÃ©tÃ© mise Ã  jour %W (%v) Ã  fusionner %pB (0x%v) et %pB (pas trouvÃ©e)
 PropriÃ©tÃ© mise Ã  jour %W (0x%v) Ã  fusionner %pB (0x%v) et %pB (0x%v)
 VOLATILE         La taille virtuelle de la section .pdata (%ld) est plus grande que la taille rÃ©elle (%ld)
 Attention: la taille de la section %s (%ld) n'est pas un multiple de %d
 Attention: la taille de la section %s (%ld) est plus petite que la taille virtuelle (%ld)
 Attention: la taille de la section %s est nulle
 Ã‰criture du cachet date-heure armap mise Ã  jourl'adresse XGATE (%lx) n'est pas dans la mÃ©moire RAM partagÃ©e (0xE000-0xFFFF), par consÃ©quent, vous devez dÃ©caler l'adresse manuellement, et peut-Ãªtre gÃ©rer la page, dans votre code.[%u]: InfÃ©rieure: %u, supÃ©rieure: %u
-[abi=16-bit int, [abi=32-bit int, [dont le nom est perdu]_bfd_vms_output_counted appelÃ© avec trop d'octets_bfd_vms_output_counted appelÃ© avec un compte de zÃ©ro octetÂ«Â %sÂ Â» fait rÃ©fÃ©rence Ã  quelque chose qui n'est pas une fonction d'entrÃ©eun objet PDEun objet PIEun objet partagÃ©adresseadresse pas alignÃ©e sur un motcode machine ELF alternatif trouvÃ© (%d) dans %pB, %d est attendul'archive n'a pas d'index; exÃ©cuter ranlib pour en ajouter unfichier objet d'archive dans un mauvais formatdescripteur de tableau:
+[abi=16-bit int, [abi=32-bit int, [dont le nom est perdu]\%pB: attention: instruction %s BLX vise la fonction %s Â«Â %sÂ Â».dÃ©bordement du dÃ©calage dans l'appel __tls_get_addr_bfd_vms_output_counted appelÃ© avec trop d'octets_bfd_vms_output_counted appelÃ© avec un compte de zÃ©ro octetÂ«Â %sÂ Â» fait rÃ©fÃ©rence Ã  quelque chose qui n'est pas une fonction d'entrÃ©eÂ«Â xtheadvectorÂ Â» est en conflit avec l'extension Â«Â vÂ Â»Â«Â zfinxÂ Â» est en conflit avec l'extension Â«Â f/d/q/zfh/zfhminÂ Â»un objet PDEun objet PIEun objet partagÃ©adresseadresse pas alignÃ©e sur un motcode machine ELF alternatif trouvÃ© (%d) dans %pB, %d est attendul'archive n'a pas d'index; exÃ©cuter ranlib pour en ajouter unfichier objet d'archive dans un mauvais formatdescripteur de tableau:
 tableau, dim: %u, bitmpa: arsize: %u, a0: 0x%08x
 atomique, type=0x%02x %s
 Ã©chec de la tentative de convertir L32R/CALLX en CALLtentative de rÃ©adressage d'un lien avec %s Ã  l'entrÃ©e et %s Ã  la sortieindex de section erronÃ©e dans %smauvaise valeurbanque d'adresses [%lx:%04lx] (%lx) n'es pas dans la mÃªme banque que la banque courante d'adresses [%lx:%04lx] (%lx)base: %u, pos: %u
-bfd_mach_o_canonicalize_symtab: impossible de charger les symbolesbfd_mach_o_read_section_32: valeur d'alignement dÃ©mesurÃ©e: %#lx, utilise 32 Ã  la placebfd_mach_o_read_section_64: valeur d'alignement dÃ©mesurÃ©e: %#lx, utilise 32 Ã  la placebfd_mach_o_read_symtab_symbol: nom hors limites (%lu >= %u)bfd_mach_o_read_symtab_symbol: le symbole Â«Â %sÂ Â» spÃ©cifie la section %d invalide (max %lu): laissÃ© non dÃ©finibfd_mach_o_read_symtab_symbol: symbole Â«Â %sÂ Â» spÃ©cifie le champ de type 0x%x invalide: laissÃ© non dÃ©finibfd_mach_o_read_symtab_symbol: impossible de lire %d octets Ã  %ubfd_mach_o_read_symtab_symbols: impossible d'allouer la mÃ©moire pour les symbolesbfd_mach_o_scan: architecture 0x%lx/0x%lx inconnuebfd_pef_scan: architecture 0x%lx inconnuedÃ©but blk: adresse: 0x%08x, nom: %.*s
+bfd_mach_o_canonicalize_symtab: impossible de charger les symbolesbfd_mach_o_read_section_32: valeur d'alignement dÃ©mesurÃ©e: %#lxbfd_mach_o_read_section_64: valeur d'alignement dÃ©mesurÃ©e: %#lxbfd_mach_o_read_symtab_symbol: nom hors limites (%lu >= %u)bfd_mach_o_read_symtab_symbol: le symbole Â«Â %sÂ Â» spÃ©cifie la section %d invalide (max %lu): laissÃ© non dÃ©finibfd_mach_o_read_symtab_symbol: symbole Â«Â %sÂ Â» spÃ©cifie le champ de type 0x%x invalide: laissÃ© non dÃ©finibfd_mach_o_read_symtab_symbol: impossible de lire %d octets Ã  %ubfd_mach_o_scan: architecture 0x%lx/0x%lx inconnuebfd_pef_scan: architecture 0x%lx inconnuedÃ©but blk: adresse: 0x%08x, nom: %.*s
 fin blk: taille: 0x%08x
-branchement (PC rel16) Ã  la section (%s) n'est pas supportÃ©branchement vers une adresse non alignÃ©e sur une instructionbss-plt forcÃ© par le profilagebss-plt forcÃ© Ã  cause de %pBne peut construire l'Ã©bauche de branchement Â«Â %sÂ Â»ne peut repÃ©rer l'Ã©bauche de branchement Â«Â %sÂ Â»impossible de convertir un branchement vers JALX pour une adresse non alignÃ©e sur un motimpossible de convertir un saut vers JALX pour une adresse non alignÃ©e sur un motne peut crÃ©er l'entrÃ©e d'Ã©bauche %simpossible d'Ã©diter les rÃ©adressages dynamiques dans une section en lecture seuleimpossible d'apporter des corrections dans une section en lecture seuleimpossible de trouver le EMH dans le premier enregistrement GST
-ne peut lire DMT
+branchement (PC rel16) Ã  la section (%s) n'est pas supportÃ©branchement vers une adresse non alignÃ©e sur une instructionbss-plt forcÃ© par le profilagebss-plt forcÃ© Ã  cause de %pBcÂ Â» ou Â«Â zcacÂ Â» ou Â«Â zcdcÂ Â» ou Â«Â zcfne peut construire l'Ã©bauche de branchement Â«Â %sÂ Â»ne peut repÃ©rer l'Ã©bauche de branchement Â«Â %sÂ Â»impossible de + ou - l'extension de base Â«Â %sÂ Â» dans l'architecture .option Â«Â %sÂ Â»impossible de convertir un branchement vers JALX pour une adresse non alignÃ©e sur un motimpossible de convertir un saut vers JALX pour une adresse non alignÃ©e sur un motne peut crÃ©er l'entrÃ©e d'Ã©bauche %simpossible d'Ã©diter les rÃ©adressages dynamiques dans une section en lecture seuleimpossible d'apporter des corrections dans une section en lecture seuleimpossible de trouver le EMH dans le premier enregistrement GST
+impossible de trouver les versions par dÃ©faut de l'extension ISA Â«Â %sÂ Â»ne peut lire DMT
 ne peut lire l'en-tÃªte DMT
 ne peut lire le psect DMT
 ne peut lire DST
@@ -1334,66 +1391,76 @@ En-tÃªtes ppcboot:
 ne peut lire GST
 ne peut lire l'enregistrement GST
 impossible de lire l'en-tÃªte de l'enregistrement GST
-impossible de lire la longueur de l'enregistrement GST
 classe: %u, dtype: %u, longueur: %u, pointeur: 0x%08x
-section %s corrompue dans %pBenregistrement EEOM corrompu â€“ taille trop petiteenregistrement EGSD corrompu: son champ psindx est trop grand (%#lx)enregistrement EGSD corrompu: sa taille (%#x) est trop petiteenregistrement EGSD corrompu: la taille (%#x) est plus grande que l'espace restant (%#x)enregistrement EGSD corrompu: la taille (%#x) est trop petiteenregistrement EIHD corrompu â€“ la taille est trop petiteenregistrement ETIR corrompu rencontrÃ©valeur vms corrompuene peut repÃ©rer la section %sne peut repÃ©rer le symbole spÃ©cial d'Ã©dition de lien __ctbpne peut repÃ©rer le symbole spÃ©cial d'Ã©dition de lien __epne peut repÃ©rer le symbole spÃ©cial d'Ã©dition de lien __gpn'a pas su ouvrir l'image partagÃ©e Â«Â %sÂ Â» de Â«Â %sÂ Â»cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]rÃ©adressage dangereuxdelta pc +%-4ddelta_pc_l: +0x%08x
+section %s corrompue dans %pBenregistrement EEOM corrompu â€“ taille trop petitetype d'enregistrement EGSD %d corrompu: la taille (%#x) est plus grande que l'espace restant (%#x)type d'enregistrement EGSD %d corrompu: la taille (%#x) est trop petiteenregistrement EGSD corrompu: son champ psindx est trop grand (%#lx)enregistrement EGSD corrompu: sa taille (%#x) est trop petiteenregistrement EIHD corrompu â€“ la taille est trop petiteenregistrement ETIR corrompu rencontrÃ©enregistrement de rÃ©adressage corrompuvaleur vms corrompueGST corrompu
+ne peut repÃ©rer la section %sne peut repÃ©rer le symbole spÃ©cial d'Ã©dition de lien __ctbpne peut repÃ©rer le symbole spÃ©cial d'Ã©dition de lien __epne peut repÃ©rer le symbole spÃ©cial d'Ã©dition de lien __gpn'a pas su ouvrir l'image partagÃ©e Â«Â %sÂ Â» de Â«Â %sÂ Â»cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]dÂ Â» et Â«Â cÂ Â» ou Â«Â dÂ Â» et Â«Â zcddÂ Â» et Â«Â zfadÂ Â» ou Â«Â zdinxrÃ©adressage dangereuxerreur de rÃ©adressage dangereuxdelta pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 descdimct: %u, aflags: 0x%02x, digits: %u, Ã©chelle: %u
 section de sortie rejetÃ©e: Â«Â %pAÂ Â»abandon du FDE avec une plage d'adresses nulle dans %pB(%pA).
 plage discontinue (nbr: %u)
-rÃ©adressage dynamique dans une section en lecture seulela variable dynamique Â«Â %sÂ Â» a une taille nulleerreur de dÃ©compte de rÃ©adressage dynamique pour %pB, section %pAla fonction d'entrÃ©e Â«Â %sÂ Â» a disparu du code sÃ»rdÃ©but Ã©numÃ©ration, long: %u, nom: %.*s
+division par zÃ©rodst_define_location %u trop grandinformation d'index dynamique pas disponiblerÃ©adressage dynamique dans une section en lecture seulela variable dynamique Â«Â %sÂ Â» a une taille nulleerreur de dÃ©compte de rÃ©adressage dynamique pour %pB, section %pAla fonction d'entrÃ©e Â«Â %sÂ Â» a disparu du code sÃ»rdÃ©but Ã©numÃ©ration, long: %u, nom: %.*s
 Ã©numÃ©ration Ã©lÃ©ments, nom: %.*s
 fin Ã©numÃ©ration
 Ã©pilogue: fanions: %u, nombre: %u
-erreur dans %pB(%pA); aucune table .eh_frame_hdr ne sera crÃ©Ã©eerreur lors de la lecture de %s: %serreur lors de la lecture du type de CPU dans les donnÃ©es elf privÃ©eserreur: %pB n'utilise pas les instructions %s alors que %pB les utiliseerreur: %pB est dÃ©jÃ  au format final BE8erreur: %pB compilÃ© pour APCS-%d alors que la cible %pB utilise APCS-%derreur: %pB compilÃ© pour EP9312 alors que %pB a Ã©tÃ© compilÃ© pour XScaleerreur: %pB a besoin d'un alignement sur 8 octets mais %pB est dÃ©fini pour un alignement sur 4 octetserreur: %pB passage de valeurs en virgule flottante dans les registres FP alors que %pB les passe dans les registres entierserreur: %pB passage de valeurs en virgule flottante dans les registres entiers alors que %pB les passe dans les registres FPerreur: %pB nÃ©cessite un plus grand alignement de tableau que ce que %pB prÃ©serveerreur: %pB nÃ©cessite un plus grand alignement de pile que ce que %pB prÃ©serveerreur: %pB utilise un alignement de pile de %u octets mais la sortie utilise un alignement de pile de %u octets.erreur: %pB utilise les instructions %s alors que %pB utilise %serreur: %pB utilise les instructions %s alors que %pB ne les utilise paserreur: %pB utilise des doubles 64 bits alors que %pB utilise des doubles 32 bitserreur: %pB utilise FPU-3.0 mais %pB ne supporte que FPU-2.0erreur: %pB passe les paramÃ¨tres dans un registre VFP alors que %pB ne le fait paserreur: %pB utilise le matÃ©riel pour virgule flottante alors que %pB utilise le logiciel pour virgule flottanteerreur: %pB passe les paramÃ¨tres dans le registre iWMMXt contrairement Ã  %pBerreur: %pB utilise le logiciel pour virgule flottante alors que %pB utilise le matÃ©riel pour virgule flottanteerreur: %pB utilise le modÃ¨le de code %s alors que %pB utilise le modÃ¨le de code %serreur: %pB utilise le modÃ¨le de donnÃ©es %s alors que %pB utilise uniquement des instructions MSP430erreur: %pB utilise le modÃ¨le de donnÃ©es %s alors que %pB utilise le modÃ¨le de donnÃ©es %serreur: %pB utilise le grand modÃ¨le de code alors que %pB utilise les instructions MSP430erreur: %pB utilise le petit modÃ¨le de code alors que %pB utilise le modÃ¨le de donnÃ©es %serreur: %pB: <la taille de la propriÃ©tÃ© x86 (0x%x) est corrompue: 0x%x>erreur: %pB: la chaÃ®ne ISA en entrÃ©e (%s) ne correspond pas Ã  la sortie (%s).erreur: %pB: ChaÃ®nes ISA Ã  fusionner Â«Â %sÂ Â» et Â«Â %sÂ Â» non concordantes.erreur: %pB: version ISA non concordante pour l'extension Â«Â %sÂ Â». %d.%d vs %d.%derreur: %pB: adressage relatif SB entre en conflit avec l'utilisation de R9erreur: %pB: XLEN (%u) non supportÃ©e, vous pourriez Ãªtre en train d'utiliser la mauvaise Ã©mulation.erreur: %pB: XLEN de l'entrÃ©e (%u) ne correspond pas Ã  la sortie (%u).erreur: %pB: R2 gros boutiste n'est pas supportÃ©erreur: %pB: impossible de mÃ©langer rf16 avec l'ensemble des registres complets %pBerreur: %pB: architectures CPU conflictuelles %d/%derreur: %pB: attributs d'extension ISA %s en conflit avec %serreur: %pB: profils d'architecture conflictuels %c/%cerreur: %pB: attributs %s conflictuelserreur: %pB: attributs %s conflictuels: %s avec %serreur: %pB: version de spec priv en conflit (majeur/mineur/rÃ©vision).erreur: %pB: utilisation conflictuelle de R9erreur: %pB: chaÃ®ne ISA Â«Â %sÂ Â» corrompue, la premiÃ¨re lettre devrait Ãªtre Â«Â iÂ Â» ou Â«Â eÂ Â» mais on a trouvÃ© Â«Â %sÂ Â».erreur: %pB: l'objet a un contenu spÃ©cifique Ã  un vendeur qui doit Ãªtre traitÃ© par la chaÃ®ne d'outils Â«Â %sÂ Â»erreur: %pB: Ã©tiquette d'objet Â«Â %d, %sÂ Â» incompatible avec l'Ã©tiquette Â«Â %d, %sÂ Â»erreur: %pB: ancien fichier objet incompatible dÃ©tectÃ©erreur: %pB: le rÃ©adressage de la section %pA n'est pas un multiple de la taille des adresseserreur: %pB: impossible de fusionner les attributs de base CPU %s avec %serreur: %pB: impossible de fusionner les attributs de l'extension ISA %serreur: %pB: impossible de fusionner les attributs de visualisation avec %pBerreur: %pB: architecture CPU inconnueerreur: tentative de lier %pB avec un binaire %pB d'une architecture diffÃ©renteerreur: le symbole ne peut Ãªtre trouvÃ©: %serreur: dÃ©saccord de format fp16 entre %pB et %pBerreur: type de rÃ©adressage inappropriÃ© pour une librairie partagÃ©e (avez-vous oubliÃ© -fpic ?)erreur: l'objet source %pB a l'EABI version %d alors que la cible %pB a l'EABI version %derreur: l'architecture ARC4 n'est plus supportÃ©eerreur: symbole __rtinit non dÃ©finierreur: valeur Tag_ABI_array_object_align_expected inconnue dans %pBerreur: valeur Tag_ABI_array_object_alignment inconnue dans %pBerreurs rencontrÃ©es pendant le traitement du fichier %pBexÃ©cutableÃ©chec d'allocation d'espace pour une nouvelle section APUinfoÃ©chec d'Ã©valuation de la nouvelle section APUinfoÃ©chec de repÃ©rage du rÃ©adressage HI16 prÃ©cÃ©dentÃ©chec d'installation de la nouvelle section APUinfoÃ©chec lors de la mise Ã  jour des dÃ©calages du fichier dans le rÃ©pertoire de dÃ©bogageerreur fatale lors de la crÃ©ation de .fixupformat de fichier ambiguformat de fichier non reconnufichier dans un mauvais formatfichier trop grosfichier tronquÃ©les avertissements suivants Ã  propos de l'encodage FDE empÃªchant la gÃ©nÃ©ration de .eh_frame_hdr sont abandonnÃ©sliaison gÃ©nÃ©rique ne peut traiter %sadresse relative du pointeur global hors limitesrÃ©adressage relatif au pointeur global Ã  l'adresse 0x%08x sans que _gp ne soit dÃ©fini
-rÃ©adressage relatif au pointeur global sans que _gp ne soit dÃ©finisymbole cachÃ©symbole cachÃ© cputypes incompatibles dans les fichiers mach-o: %ld vs %ldincr_linum(b): +%u
+erreur en ajoutant l'attributerreur dans %pB(%pA); aucune table .eh_frame_hdr ne sera crÃ©Ã©eerreur dans %pB(%pA); aucune .sframe sera crÃ©Ã©eerreur lors de la lecture de %s: %serreur lors de la lecture du type de CPU dans les donnÃ©es elf privÃ©eserreur: %pB peut utiliser la rÃ©gion haute pour les donnÃ©es mais %pB suppose que les donnÃ©es sont exclusivement en mÃ©moire basseerreur: %pB n'utilise pas les instructions %s alors que %pB les utiliseerreur: %pB a un segment LOAD avec les permissions RWXerreur: %pB a un segment TLS avec la permission d'exÃ©cutionerreur: %pB est dÃ©jÃ  au format final BE8erreur: %pB compilÃ© pour APCS-%d alors que la cible %pB utilise APCS-%derreur: %pB compilÃ© pour EP9312 alors que %pB a Ã©tÃ© compilÃ© pour XScaleerreur: %pB a besoin d'un alignement sur 8 octets mais %pB est dÃ©fini pour un alignement sur 4 octetserreur: %pB passage de valeurs en virgule flottante dans les registres FP alors que %pB les passe dans les registres entierserreur: %pB passage de valeurs en virgule flottante dans les registres entiers alors que %pB les passe dans les registres FPerreur: %pB nÃ©cessite un plus grand alignement de tableau que ce que %pB prÃ©serveerreur: %pB nÃ©cessite un plus grand alignement de pile que ce que %pB prÃ©serveerreur: %pB utilise un alignement de pile de %u octets mais la sortie utilise un alignement de pile de %u octetserreur: %pB utilise les instructions %s alors que %pB utilise %serreur: %pB utilise les instructions %s alors que %pB ne les utilise paserreur: %pB utilise des doubles 64 bits alors que %pB utilise des doubles 32 bitserreur: %pB utilise FPU-3.0 mais %pB ne supporte que FPU-2.0erreur: %pB passe les paramÃ¨tres dans un registre VFP alors que %pB ne le fait paserreur: %pB utilise le matÃ©riel pour virgule flottante alors que %pB utilise le logiciel pour virgule flottanteerreur: %pB passe les paramÃ¨tres dans le registre iWMMXt contrairement Ã  %pBerreur: %pB utilise le logiciel pour virgule flottante alors que %pB utilise le matÃ©riel pour virgule flottanteerreur: %pB utilise le modÃ¨le de code %s alors que %pB utilise le modÃ¨le de code %serreur: %pB utilise le modÃ¨le de donnÃ©es %s alors que %pB utilise uniquement des instructions MSP430erreur: %pB utilise le modÃ¨le de donnÃ©es %s alors que %pB utilise le modÃ¨le de donnÃ©es %serreur: %pB utilise le grand modÃ¨le de code alors que %pB utilise les instructions MSP430erreur: %pB utilise le petit modÃ¨le de code alors que %pB utilise le modÃ¨le de donnÃ©es %serreur: %pB: <la taille utilisÃ©e par AArch64 est corrompue: 0x%x>erreur: %pB: <la taille de la propriÃ©tÃ© (0x%x) est corrompue: 0x%x>erreur: %pB: <la taille de la propriÃ©tÃ© x86 (0x%x) est corrompue: 0x%x>erreur: %pB: la chaÃ®ne ISA en entrÃ©e (%s) ne correspond pas Ã  la sortie (%s)erreur: %pB: adressage relatif SB entre en conflit avec l'utilisation de R9erreur: %pB: XLEN de l'entrÃ©e (%u) ne correspond pas Ã  la sortie (%u)erreur: %pB: R2 gros boutiste n'est pas supportÃ©erreur: %pB: impossible de mÃ©langer rf16 avec l'ensemble des registres complets %pBerreur: %pB: architectures CPU conflictuelles %d/%derreur: %pB: attributs d'extension ISA %s en conflit avec %serreur: %pB: profils d'architecture conflictuels %c/%cerreur: %pB: attributs %s conflictuelserreur: %pB: attributs %s conflictuels: %s avec %serreur: %pB: utilisation conflictuelle de R9erreur: %pB: chaÃ®ne ISA Â«Â %sÂ Â» corrompue. La premiÃ¨re lettre devrait Ãªtre Â«Â iÂ Â» ou Â«Â eÂ Â» mais on a trouvÃ© Â«Â %sÂ Â».erreur: %pB: chaÃ®nes ISA Ã  fusionner Â«Â %sÂ Â» et Â«Â %sÂ Â» non concordanteserreur: %pB: l'objet a un contenu spÃ©cifique Ã  un vendeur qui doit Ãªtre traitÃ© par la chaÃ®ne d'outils Â«Â %sÂ Â»erreur: %pB: Ã©tiquette d'objet Â«Â %d, %sÂ Â» incompatible avec l'Ã©tiquette Â«Â %d, %sÂ Â»erreur: %pB: ancien fichier objet incompatible dÃ©tectÃ©erreur: %pB: le rÃ©adressage de la section %pA n'est pas un multiple de la taille des adresseserreur: %pB: impossible de fusionner les attributs de base CPU %s avec %serreur: %pB: impossible de fusionner les attributs de l'extension ISA %serreur: %pB: impossible de fusionner les attributs de visualisation avec %pBerreur: %pB: architecture CPU inconnueerreur: %pB: XLEN (%u) non supportÃ©e, vous pourriez Ãªtre en train d'utiliser la mauvaise Ã©mulationerreur: %s: dÃ©clenche la gÃ©nÃ©ration d'une pile exÃ©cutable (car il a une section .note.GNU-stack exÃ©cutable)erreur: %s: dÃ©clenche la gÃ©nÃ©ration d'une pile exÃ©cutable car il n'a pas de section .note.GNU-stack exÃ©cutableerreur: tentative de lier %pB avec un binaire %pB d'une architecture diffÃ©renteerreur: le symbole ne peut Ãªtre trouvÃ©: %serreur: architectures CPU conflictuelles %s par rapport Ã  %s dans %pBerreur: crÃ©ation d'une pile exÃ©cutable Ã  cause de l'option en ligne de commande -z execstackerreur: la taille finale de la valeur uleb128 Ã  l'offset 0x%lx dans %pA depuis %pB dÃ©passe l'espace disponibleerreur: dÃ©saccord de format fp16 entre %pB et %pBerreur: type de rÃ©adressage inappropriÃ© pour une librairie partagÃ©e (avez-vous oubliÃ© -fpic ?)erreur: l'objet source %pB a l'EABI version %d alors que la cible %pB a l'EABI version %derreur: l'architecture ARC4 n'est plus supportÃ©eerreur: symbole __rtinit non dÃ©finierreur: valeur Tag_ABI_array_object_align_expected inconnue dans %pBerreur: valeur Tag_ABI_array_object_alignment inconnue dans %pBerreurs rencontrÃ©es pendant le traitement du fichier %pBexÃ©cutablefÂ Â» et Â«Â cÂ Â» ou Â«Â fÂ Â» et Â«Â zcffÂ Â» ou Â«Â zfinxÃ©chec d'allocation d'espace pour une nouvelle section APUinfoÃ©chec d'Ã©valuation de la nouvelle section APUinfoÃ©chec de repÃ©rage du rÃ©adressage HI16 prÃ©cÃ©dentÃ©chec d'installation de la nouvelle section APUinfoÃ©chec lors de la mise Ã  jour des dÃ©calages du fichier dans le rÃ©pertoire de dÃ©bogageerreur fatale lors de la crÃ©ation de .fixupformat de fichier ambiguformat de fichier non reconnufichier dans un mauvais formatfichier trop grosfichier tronquÃ©la taille finale de la valeur uleb128 Ã  l'offset 0x%lx dans %pA depuis %pB dÃ©passe l'espace disponibleles avertissements suivants Ã  propos de l'encodage FDE empÃªchant la gÃ©nÃ©ration de .eh_frame_hdr sont abandonnÃ©sliaison gÃ©nÃ©rique ne peut traiter %sadresse relative du pointeur global hors limitesrÃ©adressage relatif au pointeur global sans que _gp ne soit dÃ©finihsymbole cachÃ©symbole cachÃ© cputypes incompatibles dans les fichiers mach-o: %ld vs %ldincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
 indirect, dÃ©fini Ã  0x%08x
-erreur interne: dÃ©bordement de la pile de rÃ©adressages RL78erreur interne: dÃ©bordement par le bas de la pile de rÃ©adressages RL78erreur interne: opÃ©rande devrait Ãªtre zÃ©ro pour %serreur interne: branchement/saut vers une adresse impaire dÃ©tectÃ©erreur interne: erreur dangereuseerreur interne: rÃ©adressage dangereuxerreur interne: la fusion de l'architecture Â«Â %sÂ Â» avec l'architecture Â«Â %sÂ Â» a produit une architecture inconnueerreur interne: hors limiteerreur interne: type de rÃ©adressage douteux utilisÃ© dans une librairie partagÃ©eerreur interne: erreur inconnueerreur interne: erreur de rÃ©adressage non supportÃ©eincohÃ©rence interne dans la taille de la section .got.locinconsistance interne: reste %lu != max %lu; merci de rapporter cette anomaliesymbole internesymbole interne type de rÃ©adressage TARGET2 Â«Â %sÂ Â» invalidecible bfd invalidecontenu invalide dans la section %pArÃ©adressage d'entrÃ©e invalide en produisant un format de sortie non ELF et non mmo; veuillez utiliser le programme objcopy pour convertir de ELF ou mmo, ou assembler en utilisant Â«Â -no-expandÂ Â» (pour gcc, Â«Â -Wa,-no-expandÂ Â»rÃ©adressage d'entrÃ©e invalide en produisant un format de sortie non ELF et non mmo; veuillez utiliser le programme objcopy pour convertir de ELF ou mmo, ou compiler en utilisant l'option gcc Â«Â -mno-base-addressesÂ Â».opÃ©ration invalidesection de sortie invalide pour .eh_frame_entry: %pAadresse de rÃ©adressage incorrecteindex de section incorrect dans ETIRutilisation incorrecte de %s avec des contextesrelÃ¢che ip2k: en-tÃªte de table de commutation corrompuerelÃ¢che ip2k: table de commutation sans concordance complÃ¨te des informations de rÃ©adressagela version de l'Ã©diteur de liens â€“ %s â€“ est-elle dÃ©passÃ©eÂ ?saut (PC rel26) Ã  la section (%s) n'est pas supportÃ©saut vers une adresse non alignÃ©e sur une instructionsaut vers une adresse non alignÃ©e sur un motÃ©tiquette, nom: %.*s
+Des sections SFrame d'entrÃ©e avec des abi diffÃ©rentes empÃªchent la gÃ©nÃ©ration de .sframeDes sections SFrame d'entrÃ©e avec des formats de version diffÃ©rents empÃªchent la gÃ©nÃ©ration de .sframeerreur interne: opÃ©rande devrait Ãªtre zÃ©ro pour %serreur interne: branchement/saut vers une adresse impaire dÃ©tectÃ©erreur interne: erreur dangereuseerreur interne: rÃ©adressage dangereuxerreur interne: la fusion de l'architecture Â«Â %sÂ Â» avec l'architecture Â«Â %sÂ Â» a produit une architecture inconnueerreur interne: hors limiteerreur interne: rÃ©adressage non supportÃ©erreur interne: type de rÃ©adressage douteux utilisÃ© dans une librairie partagÃ©eerreur interne: erreur inconnueerreur interne: erreur de rÃ©adressage non supportÃ©eincohÃ©rence interne dans la taille de la section .got.locinconsistance interne: reste %lu != max %lu; merci de rapporter cette anomaliesymbole internesymbole interne interne: INSN_CLASS_* inatteignable%s invalideune extension ISA invalide est terminÃ©e par <nombre>p dans l'architecture .option Â«Â %sÂ Â»type de rÃ©adressage TARGET2 Â«Â %sÂ Â» invalidecible bfd invalidecontenu invalide dans la section %pAindex dynamique invaliderÃ©adressage d'entrÃ©e invalide en produisant un format de sortie non ELF et non mmo; veuillez utiliser le programme objcopy pour convertir de ELF ou mmo, ou assembler en utilisant Â«Â -no-expandÂ Â» (pour gcc, Â«Â -Wa,-no-expandÂ Â»rÃ©adressage d'entrÃ©e invalide en produisant un format de sortie non ELF et non mmo; veuillez utiliser le programme objcopy pour convertir de ELF ou mmo, ou compiler en utilisant l'option gcc Â«Â -mno-base-addressesÂ Â».opÃ©ration invalidesection de sortie invalide pour .eh_frame_entry: %pAadresse de rÃ©adressage incorrecteindex de section incorrect dans ETIRutilisation incorrecte de %s avec des contextesrelÃ¢che ip2k: en-tÃªte de table de commutation corrompuerelÃ¢che ip2k: table de commutation sans concordance complÃ¨te des informations de rÃ©adressagela version de l'Ã©diteur de liens â€“ %s â€“ est-elle dÃ©passÃ©eÂ ?saut (PC rel26) Ã  la section (%s) n'est pas supportÃ©saut vers une adresse non alignÃ©e sur une instructionsaut vers une adresse non alignÃ©e sur un motÃ©tiquette, nom: %.*s
 long: %2u, type: %2u num ligne  (long: %u)
-image liableÃ©bauches de l'Ã©diteur de liens dans %u groupe
-Ã©bauches de l'Ã©diteur de liens dans %u groupes
-litÃ©ralerÃ©adressage littÃ©ral rencontrÃ© pour un symbole externedÃ©bordement de l'offset du branchement long de l'Ã©bauche Â«Â %sÂ Â»mach-o: il y a trop de sections (%u) le maximum est 255,
-archive mal formÃ©emÃ©moire Ã©puisÃ©emep: pas de rÃ©adressage pour le code %ddÃ©but module
+image liableÃ©bauches de l'Ã©diteur de liens dans %u groupeÃ©bauches de l'Ã©diteur de liens dans %u groupeslitÃ©ralerÃ©adressage littÃ©ral rencontrÃ© pour un symbole externeindex de symbole local trop longdÃ©bordement de l'offset du branchement long de l'Ã©bauche Â«Â %sÂ Â»mÂ Â» ou Â«Â zmmulmach-o: il y a trop de sections (%u) le maximum est 255,
+archive mal formÃ©erÃ©adressage mach-o ARM half sectdiffÂ : longueur invalideÂ : %drÃ©adressage mach-o ARM local sectdiff mal formÃ©Â : longueur invalideÂ : %dpaire de rÃ©adressage mach-o ARM mal formÃ©eÂ : longueur invalideÂ : %dpaire de rÃ©adressage mach-o ARM mal formÃ©eÂ : le rÃ©adressage est le premier rÃ©adressagerÃ©adressage mach-o ARM mal formÃ©Â : type de rÃ©adressage inconnuÂ : %drÃ©adressage mach-o ARM sectdiff mal formÃ©Â : longueur invalideÂ : %drÃ©adressage mach-o ARM vanilla mal formÃ©Â : longueur invalideÂ : %d (pcrelÂ : %d)rÃ©adressage mach-o mal formÃ©Â : l'index de section est plus grand que le nombre de sectionsmÃ©moire Ã©puisÃ©emep: pas de rÃ©adressage pour le code %ddÃ©but module
 fin module
-nom: [val: %08lx long %d]: natifune ou plusieurs nouvelles fonctions d'entrÃ©e spÃ©cifiÃ©es mais aucune bibliothÃ¨que d'import est spÃ©cifiÃ©e:nonaucune adresse assignÃ©e Ã  la section de sortie %s des trampolines (veneers)pas d'erreuraucun autre fichier d'archiveaucun symboletable de %s non contiguÃ«
-rÃ©adressages non dynamiques font rÃ©fÃ©rence au symbole dynamique %sla taille de non recouvrement de 0x%v plus la taille maximum de recouvrement de 0x%v dÃ©passe l'espace local
+nom: [val: %08lx long %d]: natifune ou plusieurs nouvelles fonctions d'entrÃ©e spÃ©cifiÃ©es mais aucune bibliothÃ¨que d'import est spÃ©cifiÃ©e:nonaucune adresse assignÃ©e Ã  la section de sortie %s des trampolines (veneers)pas d'information d'index dynamique disponiblepas d'erreuraucun autre fichier d'archiveaucun symboletable de %s non contiguÃ«
+rÃ©adressages non dynamiques font rÃ©fÃ©rence au symbole dynamique %ssymbole non dynamique %s dans la table des symboles dynamiquesla taille de non recouvrement de 0x%v plus la taille maximum de recouvrement de 0x%v dÃ©passe l'espace local
 ajout non nul dans le rÃ©adressage @fptraucunsection non-reprÃ©sentable sur la sortiepas suffisamment d'espace GOT pour les entrÃ©es locales GOTpas assez de mÃ©moire pour trier les rÃ©adressagespas de table de projection: donnÃ©es=%lx adresse de la table=%d
 pas de table de projection: variable d'environnement pas initialisÃ©e
-pas dÃ©finimodule objet N'EST PAS sans erreurÂ !le dÃ©calage du trampoline (aka veneer) pour la fonction d'entrÃ©e Â«Â %sÂ Â» n'est pas un multiple de sa tailleune cause possible pour cette erreur est que le symbole est rÃ©fÃ©rencÃ© dans le code indiquÃ© comme si il avait un alignement plus grand que celui qui a Ã©tÃ© dÃ©clarÃ© lors de sa dÃ©finition.hors limitedÃ©bordement aprÃ¨s la relÃ¢chedÃ©bordement du rÃ©adressage de l'Ã©bauche de recouvrementpointeur
+pas dÃ©finimodule objet N'EST PAS sans erreurÂ !le dÃ©calage du trampoline (aka veneer) pour la fonction d'entrÃ©e Â«Â %sÂ Â» n'est pas un multiple de sa tailleune cause possible pour cette erreur est que le symbole est rÃ©fÃ©rencÃ© dans le code indiquÃ© comme si il avait un alignement plus grand que celui qui a Ã©tÃ© dÃ©clarÃ© lors de sa dÃ©finition.hors limitedÃ©bordement aprÃ¨s la relÃ¢chedÃ©bordement du rÃ©adressage de l'Ã©bauche de recouvrementframework de greffon: Ã  cours de descripteurs de fichiers. Essayez d'utiliser moins d'objets/archives
+pointeur
 fanions privÃ©s = %lxfanions privÃ©s = %lxfanions privÃ©s = %lx: fanions privÃ©s = 0x%lxfanions privÃ©s = 0x%lx:prologue: adresse bkpt 0x%08x
-symbole protÃ©gÃ©symbole protÃ©gÃ© dÃ©but rec: nom: %.*s
+symbole protÃ©gÃ©symbole protÃ©gÃ© qÂ Â» et Â«Â zfaqÂ Â» ou Â«Â zqinxdÃ©but rec: nom: %.*s
 fin rec
-rÃ©fÃ©rence Ã  une banque d'adresses [%lx:%04lx] dans l'espace normal d'adresses Ã  %04lxrÃ©fÃ©rence Ã  un symbole far Â«Â %sÂ Â» utilisant le mauvais rÃ©adressage peut provoquer une exÃ©cution incorrecteregregistre %%g%d utilisÃ© de maniÃ¨re incompatible: %s dans %pB prÃ©cÃ©demment %s dans %pBregistre de section contient
-le rÃ©adressage (%d) est *INCONNU*rÃ©adressage pour psect non-RELrÃ©adressage hors limitele rÃ©adressage fait rÃ©fÃ©rence Ã  un symbole non dÃ©fini dans le modulele rÃ©adressage exige un opÃ©rande nulle rÃ©adressage devrait Ãªtre un nombre paireles rÃ©adressages entre segments diffÃ©rents ne sont pas supportÃ©ssuppression de la section inutilisÃ©e Â«Â %pAÂ Â» dans le fichier Â«Â %pBÂ Â»rÃ©ouverture de %pB: %s
-commande %d rÃ©servÃ©edÃ©but rtn
+l'enregistrement est trop petit pour la longueur du nom de symbolerÃ©fÃ©rence Ã  une banque d'adresses [%lx:%04lx] dans l'espace normal d'adresses Ã  %04lxrÃ©fÃ©rence Ã  un symbole far Â«Â %sÂ Â» utilisant le mauvais rÃ©adressage peut provoquer une exÃ©cution incorrecteregregistre %%g%d utilisÃ© de maniÃ¨re incompatible: %s dans %pB prÃ©cÃ©demment %s dans %pBregistre de section contient
+le rÃ©adressage (%d) est *INCONNU*le rÃ©adressage par rapport Ã  Â«Â %sÂ Â» Ã  le type GOT dÃ©fectueux rÃ©adressage pour psect non-RELrÃ©adressage hors limitele rÃ©adressage fait rÃ©fÃ©rence Ã  un symbole non dÃ©fini dans le modulele rÃ©adressage exige un opÃ©rande nulle rÃ©adressage devrait Ãªtre un nombre paireles rÃ©adressages entre segments diffÃ©rents ne sont pas supportÃ©ssuppression de la section inutilisÃ©e Â«Â %pAÂ Â» dans le fichier Â«Â %pBÂ Â»rÃ©ouverture de %pB: %scommande %d rÃ©servÃ©edÃ©but rtn
 fin rtn: taille 0x%08x
-section sans contenuseptyp, nom: %.*s
+rv%d ne supporte pas l'extension Â«Â qÂ Â»rv%d ne supporte pas l'extension Â«Â zcfÂ Â»rv%de ne supporte pas l'extension Â«Â hÂ Â»section sans contenuseptyp, nom: %.*s
 set_abs_pc: 0x%08x
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-objet partagÃ©erreur de taille dans la section %pAla taille des petites donnÃ©es de la section dÃ©passe 64KB; abaissez la limite de taille des petites donnÃ©es (voyez l'option -G)som_sizeof_headers non implÃ©mentÃ©dÃ©solÃ©, pas de support des fichiers objet dupliquÃ©s dans un script auto-overlay
+objet partagÃ©erreur de taille dans la section %pAla taille des petites donnÃ©es de la section est trop grandeÂ ; abaissez la limite de taille des petites donnÃ©es (voyez l'option -G)som_sizeof_headers non implÃ©mentÃ©dÃ©solÃ©, ce fichier ne peut Ãªtre traitÃ©dÃ©solÃ©, pas de support des fichiers objet dupliquÃ©s dans un script auto-overlay
 dÃ©solÃ©: modtab, toc et extrefsyms ne sont pas encore implÃ©mentÃ©s pour les commandes dysymtab.source (long: %u)
 rÃ©adressages ALPHA_R_BSR parasitel'analyse de la pile ignorera l'appel de %s Ã  %s
 dÃ©bordement de la pile (%d) dans _bfd_vms_pushsous dÃ©pilage de la pile dans _bfd_vms_popdonnÃ©es standards: %s
-l'adresse de dÃ©part de Â«Â %sÂ Â» est diffÃ©rente de celle de l'Ã©dition de liens prÃ©cÃ©denteprocÃ©dure statique (sans name)taille des Ã©bauches ne concorde pas avec la taille calculÃ©esymbolesymbole le symbole Â«Â %sÂ Â» a un st_other invalide pour l'ABI Ã  la version 1symbole Â«Â %sÂ Â» a des types qui diffÃ¨rent: REGISTRE dans %pB, prÃ©cÃ©demment %s dans %pBsymboles ont besoin de la section de dÃ©bug qui est inexistanteerreur d'appel systÃ¨meinformation sur table de version systÃ¨me:
+l'adresse de dÃ©part de Â«Â %sÂ Â» est diffÃ©rente de celle de l'Ã©dition de liens prÃ©cÃ©denteprocÃ©dure statique (sans name)taille des Ã©bauches ne concorde pas avec la taille calculÃ©esymbolesymbole le symbole Â«Â %sÂ Â» a un st_other invalide pour l'ABI Ã  la version 1symbole Â«Â %sÂ Â» a des types qui diffÃ¨rent: REGISTRE dans %pB, prÃ©cÃ©demment %s dans %pBla liaison symbolique STB_GNU_UNIQUE est uniquement supportÃ©e pour les cibles GNU et FreeBSDsymboles ont besoin de la section de dÃ©bug qui est inexistantele type symbolique STT_GNU_IFUNC est uniquement supportÃ© pour les cibles GNU et FreeBSDerreur d'appel systÃ¨meinformation sur table de version systÃ¨me:
 term(b): 0x%02xterm_w: 0x%04xla cible bfin ne supporte actuellement pas la gÃ©nÃ©ration de rÃ©adressages copiÃ©sil y a un conflit en fusionnant les fanions d'en-tÃªtes ELF de %pBtrop d'entrÃ©es GOT pour -fpic, recompilez avec -fPICessayez d'activer la relaxation pour Ã©viter des rÃ©adressages tronquÃ©sspec de type pour Ã©lÃ©ment:
 spec de type pour l'indice %u:
 pointeur typÃ©
 typspec (long: %u)
-impossible d'allouer les donnÃ©es pour la commande de chargement %#xincapable de repÃ©rer le liant %s Â«Â %sÂ Â» pour Â«Â %sÂ Â»incapable de trouver un Ã©quivalent pour le symbole Â«Â %sÂ Â» de la section Â«Â %sÂ Â»impossible de disposer la commande de chargement inconnue %#ximpossible d'atteindre %s (Ã  0x%08x) depuis le pointeur global (Ã  0x%08x) car l'offset (%d) est en dehors de la plage autorisÃ©e -32768 Ã  32767.
-impossible de lire l'enregistrement EIHS Ã  l'offset %#xincapable de lire dans la section %s Ã  partir de %pBimpossible d'Ã©crire la commande de chargement inconnue %#xchaine de bits de %s dÃ©salignÃ©e
-non dÃ©fini rÃ©fÃ©rence %s non dÃ©finie dans le symbole complexe: %sSTO_SH5_ISA32 inattendu sur le symbole local n'est pas traitÃ©numÃ©ro de machine inattendutype de section de fichier core OSF/1 %d non traitÃ©type d'entrÃ©e egsd %u non supportÃ©
+impossible d'allouer les donnÃ©es pour la commande de chargement %#xincapable de repÃ©rer le liant %s Â«Â %sÂ Â» pour Â«Â %sÂ Â»incapable de trouver un Ã©quivalent pour le symbole Â«Â %sÂ Â» de la section Â«Â %sÂ Â»impossible de disposer la commande de chargement inconnue %#ximpossible de lire l'enregistrement EIHS Ã  l'offset %#xincapable de lire dans la section %s Ã  partir de %pBimpossible d'Ã©crire la commande de chargement inconnue %#xchaine de bits de %s dÃ©salignÃ©e
+non dÃ©fini rÃ©fÃ©rence %s non dÃ©finie dans le symbole complexe: %snumÃ©ro de machine inattendutype de section de fichier core OSF/1 %d non traitÃ©type d'entrÃ©e egsd %u non supportÃ©
 sous-type emh %u non pris en charge
-rÃ©adressage %s non traitÃ©inconnusous type EGSD %d inconnucommande ETIR %d inconnuetype de base %d inconnuerreur inconnuela valeur d'ordre des octets de l'en-tÃªte %#x est inconnuecommande de ligne %d inconnueopÃ©rateur Â«Â %cÂ Â» inconnu dans le symbole complexerÃ©adressage %s inconnurÃ©adressage %s + %s inconnucommande source %d inconnuesymbole inconnu dans la commande %sarchitecture v850 inconnueinconnu: %xINPUT_SECTION_FLAG %s non reconnu
-identificateur de cible TI COFF non reconnu Â«Â 0x%xÂ Â»rÃ©adressage du .stab non supportÃ©commande STA %s non supportÃ©erÃ©adressage non supportÃ©erÃ©adressage non supportÃ©rÃ©adressage non supportÃ© entre les espaces d'adresses data/insntype de rÃ©adressage non supportÃ©type de rÃ©adressage %#x non supportÃ©utilisation de valeurs gp multiplesarchitecture v850 E3architecture v850architecture v850earchitecture v850e1architecture v850e2architecture v850e2v3architecture v850e3v5variable Â«Â %sÂ Â» peut seulement Ãªtre dans une rÃ©gion de donnÃ©es petite, zÃ©ro ou minusculevariable Â«Â %sÂ Â» ne peut Ãªtre dans une rÃ©gion de donnÃ©es petite et minuscule Ã  la foisvariable Â«Â %sÂ Â» ne peut Ãªtre dans une rÃ©gion de donnÃ©es petite et zÃ©ro Ã  la foisvariable Â«Â %sÂ Â» ne peut Ãªtre dans une rÃ©gion de donnÃ©es zÃ©ro et minuscule Ã  la foisvariable Â«Â %sÂ Â» ne peut occuper de multiples petites rÃ©gions de donnÃ©esvflags: 0x%02x, valeur: 0x%08x  vma:			Adresse DÃ©but	 Adresse Fin	  Unwind Info
+rÃ©adressage %s non traitÃ©inconnusous type EGSD %d inconnucommande ETIR %d inconnueextension ISA Â«Â %sÂ Â» inconnue dans l'architecture .option Â«Â %sÂ Â»attribut inconnu pour le symbole Â«Â %sÂ Â»Â : 0x%02xtype de base %d inconnuerreur inconnuela valeur d'ordre des octets de l'en-tÃªte %#x est inconnuecommande de ligne %d inconnueopÃ©rateur Â«Â %cÂ Â» inconnu dans le symbole complexerÃ©adressage %s inconnurÃ©adressage %s + %s inconnucommande source %d inconnuesymbole inconnu dans la commande %sarchitecture v850 inconnueinconnu: %xINPUT_SECTION_FLAG %s non reconnu
+identificateur de cible TI COFF non reconnu Â«Â 0x%xÂ Â»rÃ©adressage du .stab non supportÃ©commande STA %s non supportÃ©erÃ©adressage non supportÃ©erÃ©adressage non supportÃ©rÃ©adressage non supportÃ© entre les espaces d'adresses data/insntype de rÃ©adressage non supportÃ©utilisation de valeurs gp multiplesvÂ Â» ou Â«Â zve64dÂ Â» ou Â«Â zve64fÂ Â» ou Â«Â zve32fvÂ Â» ou Â«Â zve64xÂ Â» ou Â«Â zve32xarchitecture v850 E3architecture v850architecture v850earchitecture v850e1architecture v850e2architecture v850e2v3architecture v850e3v5variable Â«Â %sÂ Â» peut seulement Ãªtre dans une rÃ©gion de donnÃ©es petite, zÃ©ro ou minusculevariable Â«Â %sÂ Â» ne peut Ãªtre dans une rÃ©gion de donnÃ©es petite et minuscule Ã  la foisvariable Â«Â %sÂ Â» ne peut Ãªtre dans une rÃ©gion de donnÃ©es petite et zÃ©ro Ã  la foisvariable Â«Â %sÂ Â» ne peut Ãªtre dans une rÃ©gion de donnÃ©es zÃ©ro et minuscule Ã  la foisvariable Â«Â %sÂ Â» ne peut occuper de multiples petites rÃ©gions de donnÃ©esvflags: 0x%02x, valeur: 0x%08x  vma:			Adresse DÃ©but	 Adresse Fin	  Unwind Info
 attention, taille de la section .pdata (%ld) n'est pas un multiple de %d
-attention: %pB et %pB on des tailles de wchar_t diffÃ©rentesattention: %pB et %pB ne sont pas d'accord sur la compilation du code pour DSBTattention: %pB ne supporte pas l'inter-rÃ©seautage, contrairement Ã  %pBattention: %pB a une section corrompue avec une taille (%attention: %pB a un index de table de chaÃ®nes corrompu - ignorÃ©attention: %pB supporte l'inter-rÃ©seautage, contrairement Ã  %pBAttention: %pB utilise %s (dÃ©fini par %pB), %pB utilise Â«Â %sÂ Â»Attention: %pB utilise %s (dÃ©fini par %pB), %pB utilise l'ABI MSA inconnue %dAttention: %pB utilise %s (dÃ©fini par %pB), %pB utilise l'ABI virgule flottante inconnue %dattention: %pB utilise des enums %s alors que la sortie doit utiliser des enums %s. L'utilisation des valeurs enum entre objets peu Ã©chouerattention: %pB utilise des wchar_t de %u octets alors que la sortie doit utiliser des wchar_t de %u octets. L'utilisation de wchar_t entre objets peu Ã©chouerAttention: %pB utilise l'ABI MSA inconnue %d (dÃ©finie par %pB), %pB utilise %sAttention: %pB utilise l'ABI MSA inconnue %d (dÃ©finie par %pB), %pB utilise l'ABI MSA inconnue %dAttention: %pB utilise l'ABI virgule flottante inconnue %d (dÃ©finie par %pB), %pB utilise %sAttention: %pB utilise l'ABI virgule flottante inconnue %d (dÃ©finie par %pB), %pB utilise l'ABI virgule flottante inconnue %dattention: %pB: configuration de plateforme conflictuelleattention: %pB: configuration de plateforme %s en conflit avec %sattention: %pB: taille de GNU_PROPERTY_TYPE (%ld) corrompue: %#lxattention: %1$pB: datasz du type (0x%3$x) GNU_PROPERTY_TYPE (%2$ld) corrompu: 0x%4$xattention: %pB: taille de Â«Â no copy on protectedÂ Â» corrompue: 0x%xattention: %pB: taille de pille corrompue: 0x%xattention: %pB: symbole local Â«Â %sÂ Â» n'a pas de sectionattention: %pB: attribut d'objet ARC %d inconnuattention: %pB: l'attribut d'objet EABI %d est inconnuattention: %pB: attribut d'objet MSPABI %d inconnuattention: %pB: type GNU_PROPERTY_TYPE (%ld) non supportÃ©: 0x%xattention: %s dÃ©passe la taille de la section
+attention: %pB et %pB on des tailles de wchar_t diffÃ©rentesattention: %pB et %pB ne sont pas d'accord sur la compilation du code pour DSBTattention: %pB ne supporte pas l'inter-rÃ©seautage, contrairement Ã  %pBattention: %pB a un segment LOAD avec les permissions RWXattention: %pB a un segment TLS avec la permission d'exÃ©cutionattention: %pB a un index de table de chaÃ®nes corrompuattention: %pB a un en-tÃªte de programme avec un alignement invalideattention: %pB a une section qui s'Ã©tend au delÃ  de la fin du fichierattention: %pB a un segment qui s'Ã©tend au delÃ  de la fin du fichierattention: %pB supporte l'inter-rÃ©seautage, contrairement Ã  %pBavertissement: %pB utilise la version de spec privilÃ©gie %u.%u.%u mais la sortie utilise la version %u.%u.%uAttention: %pB utilise %s (dÃ©fini par %pB), %pB utilise Â«Â %sÂ Â»Attention: %pB utilise %s (dÃ©fini par %pB), %pB utilise l'ABI MSA inconnue %dAttention: %pB utilise %s (dÃ©fini par %pB), %pB utilise l'ABI virgule flottante inconnue %dattention: %pB utilise des enums %s alors que la sortie doit utiliser des enums %s. L'utilisation des valeurs enum entre objets peu Ã©chouerattention: %pB utilise des wchar_t de %u octets alors que la sortie doit utiliser des wchar_t de %u octets. L'utilisation de wchar_t entre objets peu Ã©chouerAttention: %pB utilise l'ABI MSA inconnue %d (dÃ©finie par %pB), %pB utilise %sAttention: %pB utilise l'ABI MSA inconnue %d (dÃ©finie par %pB), %pB utilise l'ABI MSA inconnue %dAttention: %pB utilise l'ABI virgule flottante inconnue %d (dÃ©finie par %pB), %pB utilise %sAttention: %pB utilise l'ABI virgule flottante inconnue %d (dÃ©finie par %pB), %pB utilise l'ABI virgule flottante inconnue %dattention: %pB: configuration de plateforme conflictuelleattention: %pB: configuration de plateforme %s en conflit avec %sattention: %pB: taille de GNU_PROPERTY_TYPE (%ld) corrompue: %#lxattention: %1$pB: datasz du type (0x%3$x) GNU_PROPERTY_TYPE (%2$ld) corrompu: 0x%4$xattention: %pB: taille de Â«Â no copy on protectedÂ Â» corrompue: 0x%xattention: %pB: taille de pille corrompue: 0x%xattention: %pB: symbole local Â«Â %sÂ Â» n'a pas de sectionattention: %pB: attribut d'objet ARC %d inconnuattention: %pB: l'attribut d'objet EABI %d est inconnuattention: %pB: attribut d'objet MSPABI %d inconnuattention: %pB: type GNU_PROPERTY_TYPE (%ld) non supportÃ©: 0x%xattention: %s dÃ©passe la taille de la section
 attention: %s recouvre %s
-attention: section %s a une taille nulleattention: --plt-localentry est particuliÃ¨rement dangereux sans le support de ld.so pour dÃ©tecter des violations de l'ABIattention: rÃ©adressage RL78_SYM avec un symbole inconnuattention: rÃ©adressage RX_SYM avec un symbole inconnuattention: alignement %u du symbole commun Â«Â %sÂ Â» dans %pB est plus grand que l'alignement (%u) de sa section %pAattention: alignement %u du symbole Â«Â %sÂ Â» dans %pB est plus petit que %u dans %pBattention: tentative d'exportation d'un symbole non dÃ©fini Â«Â %sÂ Â»attention: appel au symbole %s dÃ©fini dans %pB qui n'est pas une fonctionattention: mise Ã  zÃ©ro du fanion d'inter-rÃ©seautage %pB en raison du code sans inter-rÃ©seautage dans %pB liÃ© avec luiattention: mise Ã  zÃ©ro du fanion d'inter-rÃ©seautage de %pB en raison d'une requÃªte externeattention: donnÃ©es de dÃ©roulement corrompues
-attention: abandon de la section dynamique %savertissement: le fanion d'archive ck%2$s du fichier %1$pB est en conflit avec la cible ck%3$s, utilise ck%4$sattention: l'option des sections gc est ignorÃ©eattention: production d'une librairie partagÃ©e contenant du code non-PICattention: production d'une librairie partagÃ©e contenant du code non-PIDattention: pas d'initialisation du fanion d'inter-rÃ©seautage de %pB puisqu'il a dÃ©jÃ  Ã©tÃ© spÃ©cifiÃ© sans inter-rÃ©seautageattention: rÃ©adressage fait rÃ©fÃ©rence Ã  un segment diffÃ©rentattention: section Â«Â %sÂ Â» changÃ© en une noteattention: type de la section Â«Â %pAÂ Â» changÃ© en PROGBITSattention: le symbole Â«Â %sÂ Â» est Ã  la fois une section et une non-sectionattention: type et taille du symbole dynamique Â«Â %sÂ Â» ne sont pas dÃ©finisattention: le type du symbole Â«Â %sÂ Â» a changÃ© de %d Ã  %d dans %pBattention: incapable d'initialiser la taille de la section %s dans %pBattention: incapable de mettre Ã  jour le contenu de la section %s dans %pBavertissement: eflag arch Â«Â %#lxÂ Â» non reconnuattention: fanions d'architecture non dÃ©finis ou trop anciens; utilise la machine par dÃ©fautattention: l'Ã©criture de l'archive Ã©tait lente: rÃ©Ã©criture du cachet de date-heureattention: Ã©criture de la section Â«Â %pAÂ Â» vers un Ã©norme dÃ©calage (c-Ã -d nÃ©gatif) dans le fichierattention: section xdata corrompue
-ouivous ne pouvez pas dÃ©finir %s dans un scriptPRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: bad reloc address %# in section `%pA'%pB: illegal relocation type %d at address %#%pB: corrupt symbol count: %#%pB: not enough memory to allocate space for %# symbols of size %#%pB: bad string table size %error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %%pB: error: attribute section length too small: %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: corrupt size field in group section header: %#%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
- linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: version count (%) does not match symbol count (%ld)warning: %pB is truncated: expected core file size >= %, found: %%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csectTOC overflow: %# > 0x10000; try -mminimal-toc when compiling%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%pB: Data Directory size (%lx) exceeds space left in section (%)%pB: chaÃ®ne de dÃ©calage invalide % >= %%pB: la table des matiÃ¨res des rÃ©adressages Ã  %# pour le symbole Â«Â %sÂ Â» sans aucune entrÃ©e%pB: %#: attention: mauvais dÃ©calage pour R_SH_USES%pB: %#: attention: R_SH_USES pointe vers l'insn inconnu %#x%pB: %#: attention: mauvais dÃ©calage de chargement R_SH_USES%pB: %#: attention: ne peut repÃ©rer le rÃ©adressage attendu%pB: %#: attention: symbole dans une section inattendue%pB: %#: attention: ne peut repÃ©rer le compteur de rÃ©adressages attendu%pB: %#: attention: mauvais dÃ©compte%pB: %#: erreur fatale: dÃ©bordement de rÃ©adressage lors des relÃ¢ches%pB: mauvaise adresse de rÃ©adressage %# dans la section Â«Â %pAÂ Â»%pB: type de rÃ©adressage %d illÃ©gal Ã  l'adresse %#%pB: dÃ©compte de symbole corrompu: %#%pB: Pas assez de mÃ©moire pour allouer l'espace pour %# symboles de taille %#%pB: mauvaise taille de la table des chaÃ®nes %erreur: %pB(%pA) est trop grand (%# octets)Erreur DWARF: dÃ©calage (%) plus grand ou Ã©gal Ã  la taille de %s (%)Erreur DWARF: dÃ©compte de donnÃ©es (%) plus grand que la taille du tamponErreur DWARF: type de contenu de format % inconnuErreur DWARF: la section des informations de lignes est trop petite (%)Erreur DWARF: les donnÃ©es des informations de lignes sont plus grandes (%#) que l'espace restant dans la section (%#lx)Erreur DWARF: impossible de lire la ref alt %%pB: erreur: longueur de section d'attributs trop petite: %%pB(%pA+%#): rÃ©adressage %s sans solution vers le symbole Â«Â %sÂ Â»%pB: chaÃ®ne de dÃ©calage invalide %u >= % pour la section Â«Â %sÂ Â»%pB: champ de taille corrompu dans l'en-tÃªte du groupe de section: %#%pB: champ de taille invalide dans l'en-tÃªte du groupe de section: %#%pB: section %pA avec lma %# ajustÃ©e Ã  %#%pB: attention: segment chargeable vide dÃ©tectÃ© Ã  vaddr=%#, est-ce intentionnelÂ ?%pB: attention: un alignement de segment de %# est trop grand%pB(%pA+%#): le rÃ©adressage CMEM vers Â«Â %sÂ Â» est invalide. 16 MSB devrait Ãªtre %#x (la valeur est %#)%pB(%pA+%#): le rÃ©adressage CMEM vers Â«Â %s+%#Â Â» est invalide, 16 MSB devrait Ãªtre %#x (la valeur est %)%pB(%pA+%#): instruction %s Â«Â %lxÂ Â» inattendue dans le trampoline TLS%pB(%pA+%#): instruction %s '%#lx' inattendue rÃ©fÃ©rencÃ©e par TLS_GOTDESC%pB(%pA+%#): rÃ©adressage %s pas permis dans un objet partagÃ©%pB(%pA+%#): seuls ADD ou SUB sont permis dans les rÃ©adressages du groupe ALU%pB(%pA+%#): dÃ©bordement en scindant %# pour le rÃ©adressage du groupe %s%pB(%pA+%#): %s rÃ©adressage vers une section SEC_MERGE%pB(%pA+%#): %s utilisÃ© avec le symbole TLS %s%pB(%pA+%#): %s utilisÃ© avec le symbole non-TLS %s%pB(%#): erreur: impossible de crÃ©er le trampoline (veneer) du STM32L4XX; saut hors de portÃ©e pour % octets; impossible d'encoder l'instruction de branchement%pB(%pA+%#): rÃ©adressage sans solution vers le symbole Â«Â %sÂ Â»%pB(%pA+%#): rÃ©adressage sur Â«Â %sÂ Â»: erreur %d%pB: rÃ©adressage Ã  Â«Â %pA+%#Â Â» fait rÃ©fÃ©rence au symbole Â«Â %sÂ Â» avec un opÃ©rande non nul%pB, section %pA: rÃ©adressage de %s avec un opÃ©rande non nul % sur le symbole local%pB, section %pA: rÃ©adressage de %s avec un opÃ©rande non nul % sur le symbole Â«Â %sÂ Â»%pB(%pA+%#): ne peut atteindre %s, recompilez avec -ffunction-sections%pB(%pA+%#): correction %s pour insn %#x n'est pas supportÃ© dans un lien non partagÃ©%pB(%pA+%#): ne sait pas traiter %s pour %s%pB: Ã‰chec de la transition TLS de %s vers %s sur Â«Â %sÂ Â» Ã  %# dans la section Â«Â %pAÂ Â»Ã©diteur de liens ip2k: instruction de page manquante Ã  %# (cible = %#)Ã©diteur de liens ip2k: instruction de page redondante Ã  %# (cible = %#).%pB: attention: %s pointe vers le rÃ©adressage non reconnu Ã  %#%pB(%pA+%#): erreur: %s avec l'instruction inattendue %#x%pB(%pA): rÃ©adressage PID %s non sÃ»r Ã  % (sur %s dans %s)%pB(%pA+%#): instruction invalide pour le rÃ©adressage TLS %s%pB: appel CALL15 de rÃ©adressage Ã  %# n'est pas appliquÃ© sur un symbole global%pB: %#: attention: R_SH_USES pointe vers un insn inconnu 0x%x%pB: %#: fatal: cible de branchement non alignÃ©e pour un rÃ©adressage de type relax-support%pB: %#: fatal: rÃ©adressage %s non alignÃ© %#%pB: %#: fatal: rÃ©adressage R_SH_PSHA % pas dans l'intervalle -32..32%pB: %#: fatal: rÃ©adressage R_SH_PSHL % n'est pas dans l'intervalle -32..32%pB(%pA+%#): impossible d'apporter des corrections Ã  Â«Â %sÂ Â» dans une section en lecture seule%pB(%pA+%#): %s rÃ©adressage vers le symbole externe Â«Â %sÂ Â»%pB(%pA): le dÃ©calage dans le rÃ©adressage de la traduction GD->LE est trop petit: %#%pB(%pA+%#): instruction %#04X inattendue (0xd4?? attendue)%pB(%pA+%#): instruction %#04X inattendue (0xc7?? attendue)%pB(%pA+%#): instruction %#04X inattendue (0xd1?? attendue)%pB(%pA+%#): instruction %#04X inattendue (0x310c attendue)%pB(%pA+%#): instruction %#04X inattendue (0x410b attendue)%pB(%pA+%#): instruction %#04X inattendue (0x34cc attendue)%pB(%pA): le dÃ©calage dans le rÃ©adressage pour la traduction IE->LE est trop petit: %#%pB(%pA+%#): instruction %#04X inattendue (0xd0?? attendue: mov.l)%pB(%pA+%#): instruction %#04X inattendue (0x0?12 attendue: stc)%pB(%pA+%#): instruction %#04X inattendue (0x0?ce attendu: mov.l)%pB(%pA): le dÃ©calage dans le rÃ©adressage pour la traduction GD->IE est trop petit: %#%pB(%pA): le dÃ©calage dans le rÃ©adressage pour la traduction LD->LE est trop petit: %#%pB(%s+%#): rÃ©adressage %s sans solution vers le symbole Â«Â %sÂ Â»%pB: %#: attention: %s pointe vers l'insn inconnue%pB: %#: attention: %s pointe vers l'insn inconnue %#x%pB: %#: attention: %s pointe vers le rÃ©adressage non reconnu%pB: %#: attention: %s pointe vers le rÃ©adressage non reconnu Ã  %#%pB: attention: ajout GOT de % Ã  Â«Â %sÂ Â» ne concorde par avec l'ajout GOT prÃ©cÃ©dent de %%pB: attention: ignore l'ajout PLT de % Ã  Â«Â %sÂ Â» de la section %pA%pB: attention: rÃ©adressage %s vers %# de la section %pA%pB(%pA+%#): dÃ©calage de rÃ©adressage hors limite (taille=%#)%pB(%pA+%#): l'instruction ne peut pas Ãªtre dÃ©codÃ©e; la configuration est peut-Ãªtre erronÃ©e%pB(%pA+%#): l'instruction ne peut pas Ãªtre dÃ©codÃ©e pour un rÃ©adressage XTENSA_ASM_SIMPLIFY; la configuration est peut-Ãªtre erronÃ©e%pB(%pA+%#): correction inattendue pour le rÃ©adressage %s%pB: %pA+%#: attention: rÃ©adressage de %s sur une insn inattenduel'entrÃ©e de l'Ã©bauche pour %s ne peut charger .plt, dÃ©calage dp = %%pB(%pA+%#): ne peut atteindre %s%pB: Ne peut relÃ¢cher br Ã  %# dans la section Â«Â %pAÂ Â». Veuillez utiliser brl ou un branchement indirect.%pB: dÃ©bordement du segment de donnÃ©es court (%# >= 0x400000)%pB: section TLS manquante pour le rÃ©adressage %s vers Â«Â %sÂ Â» Ã  %# dans la section Â«Â %pAÂ Â».%pB: Ne peut pas relÃ¢cher br (%s) sur Â«Â %sÂ Â» Ã  %# dans la section Â«Â %pAÂ Â» avec la taille %# (> 0x1000000).attention: taille du symbole Â«Â %sÂ Â» a changÃ© de % dans %pB Ã  % dans %pB%pB(%pA): rÃ©adressage % a un index de symbole %ld invalide%pB: Erreur d'incohÃ©rence interne pour la valeur du registre global
- allouÃ© Ã  l'Ã©dition de lien: liÃ©: %# != relÃ¢chÃ©: %#%pB: directive LOCAL: registre $% n'est pas un registre local; premier registre global est $%%pB: le rÃ©adressage %s vers le symbole STT_GNU_IFUNC Â«Â %sÂ Â» a l'opÃ©rande non nul: %%pB: l'opÃ©rande %s%#x dans le rÃ©adressage %s vers le symbole Â«Â %sÂ Â» Ã  %# dans la section Â«Â %pAÂ Â» est hors limite%pB: compteur de version (%) ne concorde pas avec le symbole du compteur (%ld)attention: %pB est tronquÃ©: taille attendue du cÅ“ur du fichier >= %, obtenu: %%pB: mauvais index du symbole de rÃ©adressage (%# >= %#lx) pour l'offset %# de la section Â«Â %pAÂ Â»%pB: index de symbole non nul (%#) pour l'offset %# de la section Â«Â %pAÂ Â» quand le fichier objet n'a pas de table de symboleserreur: %pB contient un rÃ©adressage (%#) pour la section %pA qui fait rÃ©fÃ©rence Ã  un symbole global inexistant%pB: %pA+%#: Pas de symbole trouvÃ© pour INHERIT%pB: taille de section Â«Â .reginfoÂ Â» incorrecte; % attendu, % obtenu%pB: rÃ©adressage GOT Ã  %# pas attendu dans les exÃ©cutables%pB: Le rÃ©adressage CALL16 Ã  %# n'est pas sur un symbole global%pB: ne trouve pas de rÃ©adressage LO16 correspondant sur Â«Â %sÂ Â» pour %s Ã  %# de la section Â«Â %pAÂ Â»%pB: l'entrÃ©e VMA Â«Â %pAÂ Â» de %# est en dehors de la plage 32 bits supportÃ©e; envisagez d'utiliser Â«Â -Ttext-segment=â€¦Â Â»%pB: Â«Â %pAÂ Â» offset de % depuis Â«Â %pAÂ Â» au delÃ  de la limite de ADDIUPC%pB: le dÃ©but VMA Â«Â %pAÂ Â» de %# est en dehors de la plage 32 bits supportÃ©e; envisagez d'utiliser Â«Â -Ttext-segment=â€¦Â Â»%pB: l'adresse 64 bits %# hors limite pour le fichier Intel hexadÃ©cimal%pB: adresse %# hors limite pour le fichier Intel hexadÃ©cimaladresse de section (%#) en deÃ§Ã  du dÃ©but du segment (%#)%pB: accÃ¨s au-delÃ  de la fin de la section fusionnÃ©e (%)%pB: tentative d'Ã©mettre du contenu Ã  une adresse %# qui n'est pas un multiple de 4%pB: trop de registres initialisÃ©s; longueur de section %%pB: adresse de dÃ©part invalide pour des registres initialisÃ©s de longueur %: %#%pB: symbole XTY_ER Â«Â %sÂ Â» erronÃ©: classe %d scnum %d scnlen %%pB: XMC_TC0 symbol Â«Â %sÂ Â» est la classe %d scnlen %%pB: le rÃ©adressage %s:% n'est pas dans csectDÃ©bordement de la table des entrÃ©es: %# > 0x10000; essayez l'option -mminimal-toc Ã  la compilation%pB(%pA+0x%: % octets requis pour aligner sur une frontiÃ¨re de % octets mais seulement % sont prÃ©sents%pB: La taille du rÃ©pertoire de donnÃ©es (%lx) excÃ¨de l'espace restant dans la section (%)
\ No newline at end of file
+attention: section %s a une taille nulleattention: %s devrait Ãªtre utilisÃ© au lieu de %sattention: %s: l'absence de la section .note.GNU-stack implique une pile exÃ©cutableattention: %s: pile exÃ©cutable requise (car la section .note.GNU-stack est exÃ©cutable)attention: --plt-localentry est particuliÃ¨rement dangereux sans le support de ld.so pour dÃ©tecter des violations de l'ABIattention: --plt-localentry est incompatible avec le code relatif au pc du power10attention: NOTEÂ : les dÃ©saccords d'alignements peuvent provoquer des problÃ¨mes rÃ©els. Il est conseillÃ© de contrÃ´ler.attention: NOTEÂ : les dÃ©saccords de tailles peuvent provoquer des problÃ¨mes rÃ©els. Il est conseillÃ© de contrÃ´ler.attention: rÃ©adressage RL78_SYM avec un symbole inconnuattention: rÃ©adressage RX_SYM avec un symbole inconnuattention: alignement %u du symbole commun Â«Â %sÂ Â» dans %pB est plus grand que l'alignement (%u) de sa section %pAattention: l'alignement %u du symbole normal Â«Â %sÂ Â» dans %pB est plus petit que %u utilisÃ© par la dÃ©finition commune dans %pBattention: alignement %u du symbole Â«Â %sÂ Â» dans %pB est plus petit que %u dans %pBattention: tentative d'exportation d'un symbole non dÃ©fini Â«Â %sÂ Â»attention: appel au symbole %s dÃ©fini dans %pB qui n'est pas une fonctionattention: mise Ã  zÃ©ro du fanion d'inter-rÃ©seautage %pB en raison du code sans inter-rÃ©seautage dans %pB liÃ© avec luiattention: mise Ã  zÃ©ro du fanion d'inter-rÃ©seautage de %pB en raison d'une requÃªte externeattention: donnÃ©es de dÃ©roulement corrompues
+attention: abandon de la section dynamique %sattention: activation d'une pile exÃ©cutable Ã  cause de l'option en ligne de commande -z execstackavertissement: le fanion d'archive %2$s du fichier %1$pB est en conflit avec la cible %3$s, dÃ©finissez le fanion d'archive cible Ã  %4$savertissement: le fanion d'archive %2$s du fichier %1$pB est en conflit avec la cible ck%3$s, utilise %4$sattention: l'option des sections gc est ignorÃ©eattention: production d'une librairie partagÃ©e contenant du code non-PICattention: production d'une librairie partagÃ©e contenant du code non-PIDattention: pas d'initialisation du fanion d'inter-rÃ©seautage de %pB puisqu'il a dÃ©jÃ  Ã©tÃ© spÃ©cifiÃ© sans inter-rÃ©seautageavertissement: la version de spec privilÃ©gie 1.9.1 ne peut pas Ãªtre liÃ©e avec d'autres versions de specattention: rÃ©adressage fait rÃ©fÃ©rence Ã  un segment diffÃ©rentattention: section Â«Â %sÂ Â» changÃ© en une noteattention: type de la section Â«Â %pAÂ Â» changÃ© en PROGBITSattention: le symbole Â«Â %sÂ Â» est Ã  la fois une section et une non-sectionattention: type et taille du symbole dynamique Â«Â %sÂ Â» ne sont pas dÃ©finisattention: le type du symbole Â«Â %sÂ Â» a changÃ© de %d Ã  %d dans %pBattention: incapable d'initialiser la taille de la section %s dans %pBattention: incapable de mettre Ã  jour le contenu de la section %s dans %pBavertissement: nom d'architecture Â«Â %#xÂ Â» non reconnuavertissement: eflag arch Â«Â %#lxÂ Â» non reconnuattention: fanions d'architecture non dÃ©finis ou trop anciens; utilise la machine par dÃ©fautattention: l'Ã©criture de l'archive Ã©tait lente: rÃ©Ã©criture du cachet de date-heureattention: Ã©criture de la section Â«Â %pAÂ Â» vers un Ã©norme dÃ©calage (c-Ã -d nÃ©gatif) dans le fichierattention: section xdata corrompue
+l'extension x ISA Â«Â %sÂ Â» doit Ãªtre dÃ©finie avec les versionsouivous ne pouvez pas dÃ©finir %s dans un scriptzbbÂ Â» ou Â«Â zbkbzbcÂ Â» ou Â«Â zbkczcbÂ Â» et Â«Â zbazcbÂ Â» et Â«Â zbbzcbÂ Â» et Â«Â zmmulÂ Â» ou Â«Â zcbÂ Â» et Â«Â mzfhÂ Â» et Â«Â zfazfhÂ» et Â«Â zfaÂ Â» ou Â«Â zvfhÂ Â» et Â«Â zfazfhÂ Â» ou Â«Â zhinxzfhÂ Â» ou Â«Â zvfhzfhminÂ Â» et Â«Â dÂ Â» ou Â«Â zhinxminÂ Â» et Â«Â zdinxzfhminÂ Â» et Â«Â qÂ Â» ou Â«Â zhinxminÂ Â» et Â«Â zqinxzfhminÂ Â» ou Â«Â zhinxminzihintntlÂ Â» et Â«Â cÂ Â» ou Â«Â zihintntlÂ Â» et Â«Â zcazkndÂ Â» ou Â«Â zknezvbbzvbczvkbzvkgzvknedzvknhaÂ Â» ou Â«Â zvknhbzvksedzvkshles extensions zvl*b ont besoin d'activer l'extension Â«Â vÂ Â» ou bien Â«Â zveÂ Â»PRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: TLS relocation at 0x% over non-TLS symbol %s (0x%x)
+%pB: TLS local relocation at 0x% over imported symbol %s
+%pB: relocation (%d) at 0x% has wrong r_rsize (0x%x)
+%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: relocation (%d) at (0x%) has wrong r_rsize (0x%x)
+%pB: illegal relocation type %d at address %#%pB: bad string table size %%pB: stripping non-representable symbol '%s' (value 0x%)%pB: bad reloc address %# in section `%pA'error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %DWARF error: unable to locate abstract instance DIE ref %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)ERROR: CMSE stub (%s section) too far (%#) from destination (%#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#global pointer relative relocation at address %# when _gp not defined
+unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767
+%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
+ linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB(%pA+%#): misaligned symbol `%s' (%#) for relocation %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: %pA+%: relocation addend % too large%pB: version count (%) does not match symbol count (%ld)%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: bad symbol definition: `Main' set to % rather than the start address %
+%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB(%pA+%#): %s relocation offset out of order%pB(%pA+%#): %s relocation offset out of range%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csect%pB: Unable to find a stub csect in rangeof relocation at %# targeting'%s'TOC overflow: %# > 0x10000; try -mminimal-toc when compiling%pB: error: erratum 843419 immediate 0x% out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead%pB(%pA+%#): unresolvable %s relocation in section `%s'%# invaild imm%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x% without any addend, but may be 0x% after adding the %%pcrel_lo addend%pB: Data Directory (%lx bytes at %) extends across section boundary at %%pB: chaÃ®ne de dÃ©calage invalide % >= %%pB: la table des matiÃ¨res des rÃ©adressages Ã  %# pour le symbole Â«Â %sÂ Â» sans aucune entrÃ©e%pB: rÃ©adressage TLS Ã  0x% sur le symbole non-TLS %s (0x%x)
+%pB: rÃ©adressage TLS local Ã  0x% sur le symbole importÃ© %s
+%pB: rÃ©adressage (%d) Ã  0x% a un mauvais r_rsize (0x%x)
+%pB: %#: attention: mauvais dÃ©calage pour R_SH_USES%pB: %#: attention: R_SH_USES pointe vers l'insn inconnu %#x%pB: %#: attention: mauvais dÃ©calage de chargement R_SH_USES%pB: %#: attention: ne peut repÃ©rer le rÃ©adressage attendu%pB: %#: attention: symbole dans une section inattendue%pB: %#: attention: ne peut repÃ©rer le compteur de rÃ©adressages attendu%pB: %#: attention: mauvais dÃ©compte%pB: %#: erreur fatale: dÃ©bordement de rÃ©adressage lors des relÃ¢ches%pB: rÃ©adressage (%d) Ã  (0x%) a un mauvais r_rsize (0x%x)
+%pB: type de rÃ©adressage %d illÃ©gal Ã  l'adresse %#%pB: mauvaise taille de la table des chaÃ®nes %%pB: Ã©limination du symbole non reprÃ©sentable Â«Â %sÂ Â» (valeur 0x%)%pB: mauvaise adresse de rÃ©adressage %# dans la section Â«Â %pAÂ Â»erreur: %pB(%pA) est trop grand (%# octets)Erreur DWARF: dÃ©calage (%) plus grand ou Ã©gal Ã  la taille de %s (%)Erreur DWARF: dÃ©compte de donnÃ©es (%) plus grand que la taille du tamponErreur DWARF: type de contenu de format % inconnuErreur DWARF: la section des informations de lignes est trop petite (%)Erreur DWARF: les donnÃ©es des informations de lignes sont plus grandes (%#) que l'espace restant dans la section (%#lx)Erreur DWARF: impossible de lire la ref alt %Erreur DWARF: impossible de localiser l'instance abstraite de la rÃ©f DIE %%pB(%pA+%#): rÃ©adressage %s sans solution vers le symbole Â«Â %sÂ Â»%pB: chaÃ®ne de dÃ©calage invalide %u >= % pour la section Â«Â %sÂ Â»%pB: champ de taille invalide dans l'en-tÃªte du groupe de section: %#%pB: section %pA avec lma %# ajustÃ©e Ã  %#%pB: attention: segment chargeable vide dÃ©tectÃ© Ã  vaddr=%#, est-ce intentionnelÂ ?%pB: attention: un alignement de segment de %# est trop grand%pB(%pA+%#): le rÃ©adressage CMEM vers Â«Â %sÂ Â» est invalide. 16 MSB devrait Ãªtre %#x (la valeur est %#)%pB(%pA+%#): le rÃ©adressage CMEM vers Â«Â %s+%#Â Â» est invalide, 16 MSB devrait Ãªtre %#x (la valeur est %)ERREUR: l'Ã©bauche CMSE (section %s) est trop loin (%#) de la destination (%#)%pB(%pA+%#): instruction %s Â«Â %lxÂ Â» inattendue dans le trampoline TLS%pB(%pA+%#): instruction %s '%#lx' inattendue rÃ©fÃ©rencÃ©e par TLS_GOTDESC%pB(%pA+%#): rÃ©adressage %s pas permis dans un objet partagÃ©%pB(%pA+%#): seuls ADD ou SUB sont permis dans les rÃ©adressages du groupe ALU%pB(%pA+%#): dÃ©bordement en scindant %# pour le rÃ©adressage du groupe %s%pB(%pA+%#): %s rÃ©adressage vers une section SEC_MERGE%pB(%pA+%#): %s utilisÃ© avec le symbole TLS %s%pB(%pA+%#): %s utilisÃ© avec le symbole non-TLS %s%pB(%#): erreur: impossible de crÃ©er le trampoline (veneer) du STM32L4XX; saut hors de portÃ©e pour % octets; impossible d'encoder l'instruction de branchement%pB(%pA+%#): rÃ©adressage sans solution vers le symbole Â«Â %sÂ Â»%pB(%pA+%#): rÃ©adressage sur Â«Â %sÂ Â»: erreur %d%pB: rÃ©adressage Ã  Â«Â %pA+%#Â Â» fait rÃ©fÃ©rence au symbole Â«Â %sÂ Â» avec un opÃ©rande non nul%pB, section %pA: rÃ©adressage de %s avec un opÃ©rande non nul % sur le symbole local%pB, section %pA: rÃ©adressage de %s avec un opÃ©rande non nul % sur le symbole Â«Â %sÂ Â»%pB(%pA+%#): ne peut atteindre %s, recompilez avec -ffunction-sections%pB(%pA+%#): correction %s pour insn %#x n'est pas supportÃ© dans un lien non partagÃ©%pB(%pA+%#): ne sait pas traiter %s pour %s%pB: Ã‰chec de la transition TLS de %s vers %s sur Â«Â %sÂ Â» Ã  %# dans la section Â«Â %pAÂ Â»Ã©diteur de liens ip2k: instruction de page manquante Ã  %# (cible = %#)Ã©diteur de liens ip2k: instruction de page redondante Ã  %# (cible = %#).%pB: attention: %s pointe vers le rÃ©adressage non reconnu Ã  %#rÃ©adressage relatif au pointeur global Ã  l'adresse %# sans que _gp ne soit dÃ©fini
+impossible d'atteindre %s (Ã  %#) depuis le pointeur global (Ã  %#) car l'offset (%) est en dehors de la plage autorisÃ©e -32768 Ã  32767.
+%pB(%pA+%#): erreur: %s avec l'instruction inattendue %#x%pB(%pA): rÃ©adressage PID %s non sÃ»r Ã  % (sur %s dans %s)%pB(%pA+%#): instruction invalide pour le rÃ©adressage TLS %s%pB: appel CALL15 de rÃ©adressage Ã  %# n'est pas appliquÃ© sur un symbole global%pB: %#: attention: R_SH_USES pointe vers un insn inconnu 0x%x%pB: %#: fatal: cible de branchement non alignÃ©e pour un rÃ©adressage de type relax-support%pB: %#: fatal: rÃ©adressage %s non alignÃ© %#%pB: %#: fatal: rÃ©adressage R_SH_PSHA % pas dans l'intervalle -32..32%pB: %#: fatal: rÃ©adressage R_SH_PSHL % n'est pas dans l'intervalle -32..32%pB(%pA+%#): impossible d'apporter des corrections Ã  Â«Â %sÂ Â» dans une section en lecture seule%pB(%pA+%#): %s rÃ©adressage vers le symbole externe Â«Â %sÂ Â»%pB(%pA): le dÃ©calage dans le rÃ©adressage de la traduction GD->LE est trop petit: %#%pB(%pA+%#): instruction %#04X inattendue (0xd4?? attendue)%pB(%pA+%#): instruction %#04X inattendue (0xc7?? attendue)%pB(%pA+%#): instruction %#04X inattendue (0xd1?? attendue)%pB(%pA+%#): instruction %#04X inattendue (0x310c attendue)%pB(%pA+%#): instruction %#04X inattendue (0x410b attendue)%pB(%pA+%#): instruction %#04X inattendue (0x34cc attendue)%pB(%pA): le dÃ©calage dans le rÃ©adressage pour la traduction IE->LE est trop petit: %#%pB(%pA+%#): instruction %#04X inattendue (0xd0?? attendue: mov.l)%pB(%pA+%#): instruction %#04X inattendue (0x0?12 attendue: stc)%pB(%pA+%#): instruction %#04X inattendue (0x0?ce attendu: mov.l)%pB(%pA): le dÃ©calage dans le rÃ©adressage pour la traduction GD->IE est trop petit: %#%pB(%pA): le dÃ©calage dans le rÃ©adressage pour la traduction LD->LE est trop petit: %#%pB(%s+%#): rÃ©adressage %s sans solution vers le symbole Â«Â %sÂ Â»%pB: %#: attention: %s pointe vers l'insn inconnue%pB: %#: attention: %s pointe vers l'insn inconnue %#x%pB: %#: attention: %s pointe vers le rÃ©adressage non reconnu%pB: %#: attention: %s pointe vers le rÃ©adressage non reconnu Ã  %#%pB: attention: ajout GOT de % Ã  Â«Â %sÂ Â» ne concorde par avec l'ajout GOT prÃ©cÃ©dent de %%pB: attention: ignore l'ajout PLT de % Ã  Â«Â %sÂ Â» de la section %pA%pB: attention: rÃ©adressage %s vers %# de la section %pA%pB(%pA+%#): dÃ©calage de rÃ©adressage hors limite (taille=%#)%pB(%pA+%#): l'instruction ne peut pas Ãªtre dÃ©codÃ©e; la configuration est peut-Ãªtre erronÃ©e%pB(%pA+%#): l'instruction ne peut pas Ãªtre dÃ©codÃ©e pour un rÃ©adressage XTENSA_ASM_SIMPLIFY; la configuration est peut-Ãªtre erronÃ©e%pB(%pA+%#): correction inattendue pour le rÃ©adressage %s%pB: %pA+%#: attention: rÃ©adressage de %s sur une insn inattenduel'entrÃ©e de l'Ã©bauche pour %s ne peut charger .plt, dÃ©calage dp = %%pB(%pA+%#): ne peut atteindre %s%pB: Ne peut relÃ¢cher br Ã  %# dans la section Â«Â %pAÂ Â». Veuillez utiliser brl ou un branchement indirect.%pB: dÃ©bordement du segment de donnÃ©es court (%# >= 0x400000)%pB: section TLS manquante pour le rÃ©adressage %s vers Â«Â %sÂ Â» Ã  %# dans la section Â«Â %pAÂ Â».%pB: Ne peut pas relÃ¢cher br (%s) sur Â«Â %sÂ Â» Ã  %# dans la section Â«Â %pAÂ Â» avec la taille %# (> 0x1000000).attention: taille du symbole Â«Â %sÂ Â» a changÃ© de % dans %pB Ã  % dans %pB%pB(%pA): rÃ©adressage % a un index de symbole %ld invalide%pB: Erreur d'incohÃ©rence interne pour la valeur du registre global
+ allouÃ© Ã  l'Ã©dition de lien: liÃ©: %# != relÃ¢chÃ©: %#%pB: directive LOCAL: registre $% n'est pas un registre local; premier registre global est $%%pB(%pA+%#): symbole Â«Â %sÂ Â» mal alignÃ© (%#) pour le rÃ©adressage %s%pB: le rÃ©adressage %s vers le symbole STT_GNU_IFUNC Â«Â %sÂ Â» a l'opÃ©rande non nul: %%pB: l'opÃ©rande %s%#x dans le rÃ©adressage %s vers le symbole Â«Â %sÂ Â» Ã  %# dans la section Â«Â %pAÂ Â» est hors limite%pB: %pA+%: le terme de rÃ©adressage % est trop grand%pB: compteur de version (%) ne concorde pas avec le symbole du compteur (%ld)%pB: mauvais index du symbole de rÃ©adressage (%# >= %#lx) pour l'offset %# de la section Â«Â %pAÂ Â»%pB: index de symbole non nul (%#) pour l'offset %# de la section Â«Â %pAÂ Â» quand le fichier objet n'a pas de table de symboleserreur: %pB contient un rÃ©adressage (%#) pour la section %pA qui fait rÃ©fÃ©rence Ã  un symbole global inexistant%pB: %pA+%#: Pas de symbole trouvÃ© pour INHERIT%pB: taille de section Â«Â .reginfoÂ Â» incorrecte; % attendu, % obtenu%pB: rÃ©adressage GOT Ã  %# pas attendu dans les exÃ©cutables%pB: Le rÃ©adressage CALL16 Ã  %# n'est pas sur un symbole global%pB: ne trouve pas de rÃ©adressage LO16 correspondant sur Â«Â %sÂ Â» pour %s Ã  %# de la section Â«Â %pAÂ Â»%pB: l'entrÃ©e VMA Â«Â %pAÂ Â» de %# est en dehors de la plage 32 bits supportÃ©e; envisagez d'utiliser Â«Â -Ttext-segment=â€¦Â Â»%pB: Â«Â %pAÂ Â» offset de % depuis Â«Â %pAÂ Â» au delÃ  de la limite de ADDIUPC%pB: le dÃ©but VMA Â«Â %pAÂ Â» de %# est en dehors de la plage 32 bits supportÃ©e; envisagez d'utiliser Â«Â -Ttext-segment=â€¦Â Â»%pB: l'adresse 64 bits %# hors limite pour le fichier Intel hexadÃ©cimal%pB: adresse %# hors limite pour le fichier Intel hexadÃ©cimaladresse de section (%#) en deÃ§Ã  du dÃ©but du segment (%#)%pB: accÃ¨s au-delÃ  de la fin de la section fusionnÃ©e (%)%pB: tentative d'Ã©mettre du contenu Ã  une adresse %# qui n'est pas un multiple de 4%pB: dÃ©finition de symbole erronÃ©e: Â«Â MainÂ Â» initialisÃ© Ã  % au lieu de l'adresse de dÃ©part %
+%pB: trop de registres initialisÃ©s; longueur de section %%pB: adresse de dÃ©part invalide pour des registres initialisÃ©s de longueur %: %#%pB(%pA+%#): dÃ©calage de rÃ©adressage %s pas dans le bon ordre%pB(%pA+%#): dÃ©calage de rÃ©adressage %s hors limite%pB: symbole XTY_ER Â«Â %sÂ Â» erronÃ©: classe %d scnum %d scnlen %%pB: XMC_TC0 symbol Â«Â %sÂ Â» est la classe %d scnlen %%pB: le rÃ©adressage %s:% n'est pas dans csect%pB: Impossible de trouver une Ã©bauche csect dans le rÃ©adressage rangeof Ã  %# et ciblant Â«Â %sÂ Â»DÃ©bordement de la table des entrÃ©es: %# > 0x10000; essayez l'option -mminimal-toc Ã  la compilation%pB: erreur: l'immÃ©diat 0x% de l'erratum 843419 est hors limites pour ADR (fichier d'entrÃ©e trop grand) et --fix-cortex-a53-843419=adr est utilisÃ©. ExÃ©cutez l'Ã©diteur de liens avec --fix-cortex-a53-843419=full Ã  la place%pB(%pA+%#): rÃ©adressage %s sans solution dans la section Â«Â %sÂ Â»%# imm invalide%pB(%pA+0x%: % octets requis pour aligner sur une frontiÃ¨re de % octets mais seulement % sont prÃ©sents%%pcrel_lo dÃ©borde avec un terme, la valeur de %%pcrel_hi est 0x% sans terme, mais peut Ãªtre 0x% aprÃ¨s ajout du terme de %%pcrel_lo%pB: Le rÃ©pertoire de donnÃ©es (%lx octets Ã  %) s'Ã©tend au delÃ  de la frontiÃ¨re de section Ã  %
\ No newline at end of file
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/fr.po ./bfd/po/fr.po
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/fr.po	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/fr.po	2024-02-01 01:47:14.000000000 +0000
@@ -1,14 +1,14 @@
 # Messages franÃ§ais pour GNU concernant bfd.
-# Copyright (C) 2019 Free Software Foundation, Inc.
+# Copyright (C) 2024 Free Software Foundation, Inc.
 # This file is distributed under the same license as the binutils package.
 # Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
-# FrÃ©dÃ©ric Marchal <fmarchal@perso.be>, 2019.
+# FrÃ©dÃ©ric Marchal <fmarchal@perso.be>, 2024.
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd-2.31.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2019-01-19 16:30+0000\n"
-"PO-Revision-Date: 2019-05-15 05:58+0200\n"
+"Project-Id-Version: bfd-2.41.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2024-01-15 14:55+0000\n"
+"PO-Revision-Date: 2024-01-17 06:30+0100\n"
 "Last-Translator: FrÃ©dÃ©ric Marchal <fmarchal@perso.be>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -18,665 +18,756 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n >= 2);\n"
 
-#: aout-cris.c:200
+#: aout-cris.c:196
 #, c-format
 msgid "%pB: unsupported relocation type exported: %#x"
 msgstr "%pB: type de rÃ©adressage exportÃ© non supportÃ© %#x"
 
-#: aout-cris.c:244
+#: aout-cris.c:242
 #, c-format
 msgid "%pB: unsupported relocation type imported: %#x"
 msgstr "%pB: type de rÃ©adressage importÃ© non supportÃ©: %#x"
 
-#: aout-cris.c:256
+#: aout-cris.c:254
 #, c-format
 msgid "%pB: bad relocation record imported: %d"
 msgstr "%pB: mauvais enregistrement de rÃ©adressage importÃ©: %d"
 
-#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1237 pdp11.c:1510
 #, c-format
 msgid "%pB: can not represent section `%pA' in a.out object file format"
 msgstr "%pB: ne peut reprÃ©senter la section Â«Â %pAÂ Â» dans le fichier format objet a.out"
 
-#: aoutx.h:1582 pdp11.c:1371
+#: aoutx.h:1576 pdp11.c:1482
 #, c-format
 msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
 msgstr "%pB: ne peut reprÃ©senter la section pour le symbole Â«Â %sÂ Â» dans le fichier format objet a.out"
 
-#: aoutx.h:1585 vms-alpha.c:7860
+#: aoutx.h:1579 vms-alpha.c:8461
 msgid "*unknown*"
 msgstr "*inconnu*"
 
-#: aoutx.h:1721
+#: aoutx.h:1715 pdp11.c:1578
 #, c-format
 msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
 msgstr "%pB: chaÃ®ne de dÃ©calage invalide %<PRIu64> >= %<PRIu64>"
 
-#: aoutx.h:2412 aoutx.h:2430
+#: aoutx.h:1963
+#, c-format
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr "%pB: taille de rÃ©adressage AOUT non supportÃ©eÂ : %d"
+
+#: aoutx.h:2407 aoutx.h:2425 pdp11.c:2059
 #, c-format
 msgid "%pB: attempt to write out unknown reloc type"
 msgstr "%pB: tentative d'Ã©crire un type de rÃ©adressage inconnu"
 
-#: aoutx.h:4086
+#: aoutx.h:4080 pdp11.c:3443
 #, c-format
 msgid "%pB: unsupported relocation type"
 msgstr "%pB: type de rÃ©adressage non supportÃ©"
 
 #. Unknown relocation.
-#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772
-#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798
-#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517
-#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698
-#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467
-#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522
-#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381
-#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302
-#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539
-#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417
-#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354
-#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692
-#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137
-#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236
-#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037
-#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420
-#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292
-#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508
-#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642
-#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270
-#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250
-#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459
-#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249
-#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958
-#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921
-#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378
-#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955
-#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2125
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2223
-#: elf32-ia64.c:210 elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862
+#: aoutx.h:4400 coff-alpha.c:601 coff-mips.c:356 coff-rs6000.c:3050
+#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:262 elf-hppa.h:798
+#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
+#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1063 elf32-bfin.c:4686
+#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
+#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
+#: elf32-dlx.c:546 elf32-epiphany.c:373 elf32-fr30.c:381 elf32-frv.c:2559
+#: elf32-frv.c:6240 elf32-ft32.c:304 elf32-h8300.c:302 elf32-i386.c:394
+#: elf32-ip2k.c:1241 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
+#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
+#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
+#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:708
+#: elf32-microblaze.c:1020 elf32-mips.c:2242 elf32-moxie.c:137
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3288
+#: elf32-nds32.c:3309 elf32-nds32.c:5078 elf32-nios2.c:3019 elf32-or1k.c:1087
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
+#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
+#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
+#: elf32-v850.c:1924 elf32-v850.c:4250 elf32-vax.c:289 elf32-visium.c:481
+#: elf32-wasm32.c:105 elf32-xgate.c:418 elf32-xstormy16.c:395
+#: elf32-xtensa.c:510 elf32-xtensa.c:544 elf32-z80.c:331 elf64-alpha.c:1114
+#: elf64-alpha.c:4056 elf64-alpha.c:4204 elf64-bpf.c:132 elf64-ia64-vms.c:255
+#: elf64-ia64-vms.c:3426 elf64-mips.c:3965 elf64-mips.c:3981 elf64-mmix.c:1264
+#: elf64-nfp.c:151 elf64-ppc.c:1031 elf64-ppc.c:1385 elf64-ppc.c:1394
+#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3799
+#: elfxx-ia64.c:324 elfxx-loongarch.c:1895 elfxx-riscv.c:989 elfxx-sparc.c:589
+#: elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3821 elfnn-kvx.c:259
 #, c-format
 msgid "%pB: unsupported relocation type %#x"
 msgstr "%pB: type de rÃ©adressage %#x non supportÃ©"
 
-#: aoutx.h:5434 pdp11.c:3694
+#: aoutx.h:5427 pdp11.c:3866
 #, c-format
 msgid "%pB: relocatable link from %s to %s not supported"
 msgstr "%pB: lien relocalisable de %s vers %s n'est pas supportÃ©"
 
-#: archive.c:2214
+#: arc-got.h:69
+#, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr "%pB: impossible d'allouer la mÃ©moire pour les entrÃ©es locales GOT"
+
+#: archive.c:753
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr "%F%P: %pB(%s): erreur lors de l'ouverture de membre d'archive lÃ©gerÂ : %E\n"
+
+#: archive.c:2294
 msgid "warning: writing archive was slow: rewriting timestamp"
 msgstr "attention: l'Ã©criture de l'archive Ã©tait lente: rÃ©Ã©criture du cachet de date-heure"
 
-#: archive.c:2330 linker.c:1429
+#: archive.c:2362 archive.c:2423 elflink.c:4800 linker.c:1434
 #, c-format
 msgid "%pB: plugin needed to handle lto object"
 msgstr "%pB: le greffon doit gÃ©rer l'objet lto"
 
-#: archive.c:2559
+#: archive.c:2655
 msgid "Reading archive file mod timestamp"
 msgstr "Lecture du cachet date-heure modifiÃ© du fichier d'archive"
 
-#: archive.c:2583
+#: archive.c:2686
 msgid "Writing updated armap timestamp"
 msgstr "Ã‰criture du cachet date-heure armap mise Ã  jour"
 
-#: bfd.c:449
+#: bfd.c:740
 msgid "no error"
 msgstr "pas d'erreur"
 
-#: bfd.c:450
+#: bfd.c:741
 msgid "system call error"
 msgstr "erreur d'appel systÃ¨me"
 
-#: bfd.c:451
+#: bfd.c:742
 msgid "invalid bfd target"
 msgstr "cible bfd invalide"
 
-#: bfd.c:452
+#: bfd.c:743
 msgid "file in wrong format"
 msgstr "fichier dans un mauvais format"
 
-#: bfd.c:453
+#: bfd.c:744
 msgid "archive object file in wrong format"
 msgstr "fichier objet d'archive dans un mauvais format"
 
-#: bfd.c:454
+#: bfd.c:745
 msgid "invalid operation"
 msgstr "opÃ©ration invalide"
 
-#: bfd.c:455
+#: bfd.c:746
 msgid "memory exhausted"
 msgstr "mÃ©moire Ã©puisÃ©e"
 
-#: bfd.c:456
+#: bfd.c:747
 msgid "no symbols"
 msgstr "aucun symbole"
 
-#: bfd.c:457
+#: bfd.c:748
 msgid "archive has no index; run ranlib to add one"
 msgstr "l'archive n'a pas d'index; exÃ©cuter ranlib pour en ajouter un"
 
-#: bfd.c:458
+#: bfd.c:749
 msgid "no more archived files"
 msgstr "aucun autre fichier d'archive"
 
-#: bfd.c:459
+#: bfd.c:750
 msgid "malformed archive"
 msgstr "archive mal formÃ©e"
 
-#: bfd.c:460
+#: bfd.c:751
 msgid "DSO missing from command line"
 msgstr "DSO manquant dans la ligne de commande"
 
-#: bfd.c:461
+#: bfd.c:752
 msgid "file format not recognized"
 msgstr "format de fichier non reconnu"
 
-#: bfd.c:462
+#: bfd.c:753
 msgid "file format is ambiguous"
 msgstr "format de fichier ambigu"
 
-#: bfd.c:463
+#: bfd.c:754
 msgid "section has no contents"
 msgstr "section sans contenu"
 
-#: bfd.c:464
+#: bfd.c:755
 msgid "nonrepresentable section on output"
 msgstr "section non-reprÃ©sentable sur la sortie"
 
-#: bfd.c:465
+#: bfd.c:756
 msgid "symbol needs debug section which does not exist"
 msgstr "symboles ont besoin de la section de dÃ©bug qui est inexistante"
 
-#: bfd.c:466
+#: bfd.c:757
 msgid "bad value"
 msgstr "mauvaise valeur"
 
-#: bfd.c:467
+#: bfd.c:758
 msgid "file truncated"
 msgstr "fichier tronquÃ©"
 
-#: bfd.c:468
+#: bfd.c:759
 msgid "file too big"
 msgstr "fichier trop gros"
 
-#: bfd.c:469
+#: bfd.c:760
+msgid "sorry, cannot handle this file"
+msgstr "dÃ©solÃ©, ce fichier ne peut Ãªtre traitÃ©"
+
+#: bfd.c:761
 #, c-format
 msgid "error reading %s: %s"
 msgstr "erreur lors de la lecture de %s: %s"
 
-#: bfd.c:470
+#: bfd.c:762
 msgid "#<invalid error code>"
 msgstr "#<code d'erreur invalide>"
 
-#: bfd.c:1429
+#: bfd.c:2019
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "BFD assertion %s a Ã©chouÃ© %s:%d"
 
-#: bfd.c:1442
+#: bfd.c:2032
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d in %s\n"
 msgstr "BFD erreur interne %s, abandon Ã  %s:%d dans %s\n"
 
-#: bfd.c:1447
+#: bfd.c:2037
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d\n"
 msgstr "BFD erreur interne %s, abandon Ã  %s:%d\n"
 
-#: bfd.c:1449
+#: bfd.c:2039
 msgid "Please report this bug.\n"
 msgstr "Merci de rapporter cette anomalie.\n"
 
-#: bfdwin.c:206
+#: bfdwin.c:261
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
 msgstr "pas de table de projection: donnÃ©es=%lx adresse de la table=%d\n"
 
-#: bfdwin.c:209
+#: bfdwin.c:264
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr "pas de table de projection: variable d'environnement pas initialisÃ©e\n"
 
-#: binary.c:276
+#: binary.c:277
 #, c-format
 msgid "warning: writing section `%pA' at huge (ie negative) file offset"
 msgstr "attention: Ã©criture de la section Â«Â %pAÂ Â» vers un Ã©norme dÃ©calage (c-Ã -d nÃ©gatif) dans le fichier"
 
-#: cache.c:271
+#: cache.c:275
 #, c-format
-msgid "reopening %pB: %s\n"
-msgstr "rÃ©ouverture de %pB: %s\n"
+msgid "reopening %pB: %s"
+msgstr "rÃ©ouverture de %pB: %s"
 
 #: coff-alpha.c:450
 #, c-format
 msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
 msgstr "%pB: les binaires compressÃ©s pour Alpha ne sont pas supportÃ©s; utilisez les options du compilateur ou objZ pour produire des binaires non compressÃ©s"
 
-#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950
+#: coff-alpha.c:867 coff-alpha.c:894 coff-alpha.c:2004 coff-mips.c:948
 msgid "GP relative relocation used when GP not defined"
 msgstr "RÃ©adressage relatif GP utilisÃ© alors que GP n'est pas dÃ©fini"
 
-#: coff-alpha.c:1443
+#: coff-alpha.c:1151 coff-z80.c:351 coff-z8k.c:214 elf32-nds32.c:13189
+#: elfxx-mips.c:13520 reloc.c:8683 reloc16.c:314
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgstr "%X%P: %pB(%pA): rÃ©adressage Â«Â %pRÂ Â» va en dehors des limites\n"
+
+#: coff-alpha.c:1157 coff-z80.c:477 coff-z8k.c:378 elfxx-mips.c:13530
+#: reloc.c:8693
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr "%X%P: %pB(%pA): le rÃ©adressage Â«Â %pRÂ Â» n'est pas supportÃ©\n"
+
+#: coff-alpha.c:1163 elfxx-mips.c:13539 reloc.c:8702
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr "%X%P: %pB(%pA): le rÃ©adressage Â«Â %pRÂ Â» retourne une valeur %x non reconnue\n"
+
+#: coff-alpha.c:1489
 msgid "using multiple gp values"
 msgstr "utilisation de valeurs gp multiples"
 
-#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411
+#: coff-alpha.c:1987
 #, c-format
-msgid "%pB: %s unsupported"
-msgstr "%pB: %s pas supportÃ©"
+msgid "%X%P: %pB(%pA): relocation out of range\n"
+msgstr "%X%P: %pB(%pA): rÃ©adressage en dehors des limites\n"
 
-#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330
-#: elf64-mips.c:3451 elfn32-mips.c:3276
+#: coff-alpha.c:1999
+#, c-format
+msgid "%X%P: %pB(%pA): relocation is not supported\n"
+msgstr "%X%P: %pB(%pA): le rÃ©adressage n'est pas supportÃ©\n"
+
+#: coff-go32.c:167 coffswap.h:812
+#, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: attention: %s: dÃ©bordement du compteur de numÃ©ro de ligne: 0x%lx > 0xffff"
+
+#: coff-mips.c:638 elf32-mips.c:1743 elf32-score.c:433 elf32-score7.c:333
+#: elf64-mips.c:3450 elfn32-mips.c:3277
 msgid "GP relative relocation when _gp not defined"
 msgstr "rÃ©adressage relatif GP sans que _gp ne soit dÃ©fini"
 
-#: coff-rs6000.c:2858
+#: coff-rs6000.c:484 coff64-rs6000.c:377
+#, c-format
+msgid "%pB: unsupported swap_aux_in for storage class %#x"
+msgstr "%pB: swap_aux_in non supportÃ© pour la classe de stockage %#x"
+
+#: coff-rs6000.c:571 coff64-rs6000.c:497
+#, c-format
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr "%pB: swap_aux_out non supportÃ© pour la classe de stockage %#x"
+
+#: coff-rs6000.c:3140
 #, c-format
 msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
 msgstr "%pB: la table des matiÃ¨res des rÃ©adressages Ã  %#<PRIx64> pour le symbole Â«Â %sÂ Â» sans aucune entrÃ©e"
 
-#: coff-rs6000.c:3620 coff64-rs6000.c:2145
+#: coff-rs6000.c:3264 coff64-rs6000.c:848
+#, c-format
+msgid "Unable to find the stub entry targeting %s"
+msgstr "Impossible de trouver une entrÃ©e d'Ã©bauche ciblant %s"
+
+#: coff-rs6000.c:3379
+#, c-format
+msgid "%pB: TLS relocation at 0x%<PRIx64> over non-TLS symbol %s (0x%x)\n"
+msgstr "%pB: rÃ©adressage TLS Ã  0x%<PRIx64> sur le symbole non-TLS %s (0x%x)\n"
+
+#: coff-rs6000.c:3392
+#, c-format
+msgid "%pB: TLS local relocation at 0x%<PRIx64> over imported symbol %s\n"
+msgstr "%pB: rÃ©adressage TLS local Ã  0x%<PRIx64> sur le symbole importÃ© %s\n"
+
+#: coff-rs6000.c:3798
+#, c-format
+msgid "%pB: relocation (%d) at 0x%<PRIx64> has wrong r_rsize (0x%x)\n"
+msgstr "%pB: rÃ©adressage (%d) Ã  0x%<PRIx64> a un mauvais r_rsize (0x%x)\n"
+
+#: coff-rs6000.c:4060 coff64-rs6000.c:2030
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized smclas %d"
 msgstr "%pB: symbole Â«Â %sÂ Â» a une classe smclas %d non reconnue"
 
-#: coff-sh.c:780 elf32-sh.c:521
+#: coff-sh.c:781 elf32-sh.c:521
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES offset"
 msgstr "%pB: %#<PRIx64>: attention: mauvais dÃ©calage pour R_SH_USES"
 
-#: coff-sh.c:791
+#: coff-sh.c:792
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn %#x"
 msgstr "%pB: %#<PRIx64>: attention: R_SH_USES pointe vers l'insn inconnu %#x"
 
-#: coff-sh.c:809 elf32-sh.c:552
+#: coff-sh.c:810 elf32-sh.c:552
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
 msgstr "%pB: %#<PRIx64>: attention: mauvais dÃ©calage de chargement R_SH_USES"
 
-#: coff-sh.c:834 elf32-sh.c:568
+#: coff-sh.c:835 elf32-sh.c:568
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: could not find expected reloc"
 msgstr "%pB: %#<PRIx64>: attention: ne peut repÃ©rer le rÃ©adressage attendu"
 
-#: coff-sh.c:851 elf32-sh.c:597
+#: coff-sh.c:852 elf32-sh.c:597
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
 msgstr "%pB: %#<PRIx64>: attention: symbole dans une section inattendue"
 
-#: coff-sh.c:977 elf32-sh.c:727
+#: coff-sh.c:973 elf32-sh.c:727
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
 msgstr "%pB: %#<PRIx64>: attention: ne peut repÃ©rer le compteur de rÃ©adressages attendu"
 
-#: coff-sh.c:987 elf32-sh.c:738
+#: coff-sh.c:983 elf32-sh.c:738
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad count"
 msgstr "%pB: %#<PRIx64>: attention: mauvais dÃ©compte"
 
-#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512
+#: coff-sh.c:1349 coff-sh.c:2636 elf32-sh.c:1138 elf32-sh.c:1506
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
 msgstr "%pB: %#<PRIx64>: erreur fatale: dÃ©bordement de rÃ©adressage lors des relÃ¢ches"
 
-#: coff-sh.c:1454
+#: coff-sh.c:1443
 #, c-format
 msgid "%pB: fatal: generic symbols retrieved before relaxing"
 msgstr "%pB: fatal: symboles gÃ©nÃ©riques rÃ©cupÃ©rÃ©s avant la relÃ¢che"
 
-#: coff-sh.c:2785 cofflink.c:2965
+#: coff-sh.c:2773 cofflink.c:2947
 #, c-format
 msgid "%pB: illegal symbol index %ld in relocs"
 msgstr "%pB: symbole index %ld illÃ©gal dans les rÃ©adressages"
 
-#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:338 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5314
 #, c-format
 msgid "%pB: warning: illegal symbol index %ld in relocs"
 msgstr "%pB: attention: symbole index illÃ©gal %ld dans les rÃ©adressages"
 
-#: coff-tic80.c:441
+#: coff-x86_64.c:147
+msgid "R_AMD64_IMAGEBASE with __ImageBase undefined"
+msgstr "R_AMD64_IMAGEBASE avec __ImageBase est non-dÃ©fini"
+
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
 #, c-format
-msgid "unsupported relocation type %#x"
-msgstr "type de rÃ©adressage %#x non supportÃ©"
+msgid "%pB: C_STAT isn't supported by XCOFF64"
+msgstr "%pB: C_STAT n'est pas supportÃ© par XCOFF64"
 
-#: coff-tic80.c:672 cofflink.c:3127
+#: coff64-rs6000.c:477
 #, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
-msgstr "%pB: mauvaise adresse de rÃ©adressage %#<PRIx64> dans la section Â«Â %pAÂ Â»"
+msgid "%pB: wrong auxtype %#x for storage class %#x"
+msgstr "%pB: mauvais auxtype %#x pour la classe de stockage %#x"
 
-#: coffcode.h:954
+#: coff64-rs6000.c:1598
+#, c-format
+msgid "%pB: relocation (%d) at (0x%<PRIx64>) has wrong r_rsize (0x%x)\n"
+msgstr "%pB: rÃ©adressage (%d) Ã  (0x%<PRIx64>) a un mauvais r_rsize (0x%x)\n"
+
+#: coffcode.h:951
 #, c-format
 msgid "%pB: unable to load COMDAT section name"
 msgstr "%pB: impossible de charger le nom de section COMDAT"
 
-#. Malformed input files can trigger this test.
-#. cf PR 21781.
-#: coffcode.h:989
+#: coffcode.h:976
+#, c-format
+msgid "%pB: warning: no symbol for section '%s' found"
+msgstr "%pB: attention: pas de symbole trouvÃ© pour la section Â«Â %sÂ Â»"
+
+#: coffcode.h:1148
 #, c-format
 msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
 msgstr "%pB: erreur: symbole Â«Â %sÂ Â» inattendu dans la section COMDAT"
 
-#: coffcode.h:1001
+#: coffcode.h:1159
 #, c-format
 msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
 msgstr "%pB: attention: symbole COMDAT Â«Â %sÂ Â» ne concorde par avec le nom de section Â«Â %sÂ Â»"
 
-#: coffcode.h:1011
-#, c-format
-msgid "%pB: warning: no symbol for section '%s' found"
-msgstr "%pB: attention: pas de symbole trouvÃ© pour la section Â«Â %sÂ Â»"
-
 #. Generate a warning message rather using the 'unhandled'
 #. variable as this will allow some .sys files generate by
 #. other toolchains to be processed.  See bugzilla issue 196.
-#: coffcode.h:1237
+#: coffcode.h:1267
 #, c-format
 msgid "%pB: warning: ignoring section flag %s in section %s"
 msgstr "%pB: attention: ignore le fanion de section %s dans la section %s"
 
-#: coffcode.h:1306
+#: coffcode.h:1337
 #, c-format
 msgid "%pB (%s): section flag %s (%#lx) ignored"
 msgstr "%pB (%s): fanion de section %s (%#lx) ignorÃ©"
 
-#: coffcode.h:1917
+#: coffcode.h:1954
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr "%pB: dÃ©bordement dÃ» au compteur de rÃ©adressage trop petit"
+
+#: coffcode.h:1963 coffcode.h:2028
 #, c-format
 msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
 msgstr "%pB: attention: prÃ©tend avoir 0xffff rÃ©adressages, sans dÃ©bordement"
 
-#: coffcode.h:2315
+#: coffcode.h:2411
 #, c-format
 msgid "unrecognized TI COFF target id '0x%x'"
 msgstr "identificateur de cible TI COFF non reconnu Â«Â 0x%xÂ Â»"
 
-#: coffcode.h:2599
+#: coffcode.h:2690
 #, c-format
 msgid "%pB: reloc against a non-existent symbol index: %ld"
 msgstr "%pB: rÃ©adressage par rapport Ã  un index de symbole inexistant: %ld"
 
-#: coffcode.h:2910
-#, c-format
-msgid "%pB: page size is too large (0x%x)"
-msgstr "%pB: la taille de page est trop grande (0x%x)"
-
-#: coffcode.h:3070
+#: coffcode.h:3162
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr "%pB: trop de sections (%d)"
 
-#: coffcode.h:3489
+#: coffcode.h:3690
 #, c-format
 msgid "%pB: section %pA: string table overflow at offset %ld"
 msgstr "%pB: section %pA: dÃ©bordement de la table de chaÃ®nes Ã  l'offset %ld"
 
-#: coffcode.h:3589
+#: coffcode.h:3791
 #, c-format
 msgid "%pB:%s section %s: alignment 2**%u not representable"
 msgstr "%pB:%s section %s: l'alignement 2**%u n'est pas reprÃ©sentable"
 
-#: coffcode.h:4276
-#, c-format
-msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
-msgstr "%pB: attention: le dÃ©compte du nombre de lignes (%#lx) dÃ©passe la taille de la section (%#lx)"
-
-#: coffcode.h:4291
+#: coffcode.h:4532
 #, c-format
 msgid "%pB: warning: line number table read failed"
 msgstr "%pB: attention: erreur lors de la lecture de la table des numÃ©ros de ligne"
 
-#: coffcode.h:4325 coffcode.h:4339
+#: coffcode.h:4578 coffcode.h:4592
 #, c-format
 msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
 msgstr "%pB: attention: symbole d'index 0x%lx illÃ©gal dans l'entrÃ©e %d des numÃ©ros de lignes"
 
-#: coffcode.h:4353
+#: coffcode.h:4606
 #, c-format
 msgid "%pB: warning: illegal symbol in line number entry %d"
 msgstr "%pB: attention: symbole illÃ©gal dans l'entrÃ©e %d des numÃ©ros de lignes"
 
-#: coffcode.h:4366
+#: coffcode.h:4619
 #, c-format
 msgid "%pB: warning: duplicate line number information for `%s'"
 msgstr "%pB: attention: information de numÃ©ro de ligne dÃ©doublÃ©e pour Â«Â %sÂ Â»"
 
-#: coffcode.h:4774
+#: coffcode.h:5043
 #, c-format
 msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
 msgstr "%pB: classe de stockage %d non reconnue pour %s symbole Â«Â %sÂ Â»"
 
-#: coffcode.h:4904
+#: coffcode.h:5183
 #, c-format
 msgid "warning: %pB: local symbol `%s' has no section"
 msgstr "attention: %pB: symbole local Â«Â %sÂ Â» n'a pas de section"
 
-#: coffcode.h:5050
+#: coffcode.h:5354
 #, c-format
 msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
 msgstr "%pB: type de rÃ©adressage %d illÃ©gal Ã  l'adresse %#<PRIx64>"
 
-#: coffgen.c:178 elf.c:1216
-#, c-format
-msgid "%pB: unable to initialize compress status for section %s"
-msgstr "%pB: impossible d'initialiser le statut de compression de la section %s"
-
-#: coffgen.c:202 elf.c:1227
-#, c-format
-msgid "%pB: unable to initialize decompress status for section %s"
-msgstr "%pB: impossible d'initialiser le statut de dÃ©compression de la section %s"
-
-#: coffgen.c:1657
+#: coffgen.c:255 elf.c:1226
 #, c-format
-msgid "%pB: corrupt symbol count: %#<PRIx64>"
-msgstr "%pB: dÃ©compte de symbole corrompu: %#<PRIx64>"
+msgid "%pB: unable to compress section %s"
+msgstr "%pB: impossible de compresser la section %s"
 
-#. PR 21013: Provide an error message when the alloc fails.
-#: coffgen.c:1666
+#: coffgen.c:265 elf.c:1236
 #, c-format
-msgid "%pB: not enough memory to allocate space for %#<PRIx64> symbols of size %#<PRIx64>"
-msgstr "%pB: Pas assez de mÃ©moire pour allouer l'espace pour %#<PRIx64> symboles de taille %#<PRIx64>"
+msgid "%pB: unable to decompress section %s"
+msgstr "%pB: impossible de dÃ©compresser la section %s"
 
-#: coffgen.c:1735
+#: coffgen.c:1781
 #, c-format
 msgid "%pB: bad string table size %<PRIu64>"
 msgstr "%pB: mauvaise taille de la table des chaÃ®nes %<PRIu64>"
 
-#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882
-#: xcofflink.c:4505
+#: coffgen.c:1931 coffgen.c:1981 coffgen.c:2031 coffgen.c:2050 cofflink.c:2012
+#: elf.c:2478 xcofflink.c:5532
 msgid "<corrupt>"
 msgstr "<corrompu>"
 
-#: coffgen.c:2114
+#: coffgen.c:2192
 #, c-format
 msgid "<corrupt info> %s"
 msgstr "<info corrompue> %s"
 
-#: coffgen.c:2693 elflink.c:14322 linker.c:2959
+#: coffgen.c:2796 elflink.c:15219 linker.c:2985
 msgid "%F%P: already_linked_table: %E\n"
 msgstr "%F%P: already_linked_table: %E\n"
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3138 elflink.c:14159
 #, c-format
 msgid "removing unused section '%pA' in file '%pB'"
 msgstr "suppression de la section inutilisÃ©e Â«Â %pAÂ Â» dans le fichier Â«Â %pBÂ Â»"
 
-#: coffgen.c:3111 elflink.c:13542
+#: coffgen.c:3215 elflink.c:14389
 msgid "warning: gc-sections option ignored"
 msgstr "attention: l'option des sections gc est ignorÃ©e"
 
-#: cofflink.c:352
+#: cofflink.c:398
 #, c-format
 msgid "warning: symbol `%s' is both section and non-section"
 msgstr "attention: le symbole Â«Â %sÂ Â» est Ã  la fois une section et une non-section"
 
-#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953
+#: cofflink.c:503 elf64-ia64-vms.c:5200 elflink.c:5407
 #, c-format
 msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
 msgstr "attention: le type du symbole Â«Â %sÂ Â» a changÃ© de %d Ã  %d dans %pB"
 
-#: cofflink.c:2373
+#: cofflink.c:2340
 #, c-format
 msgid "%pB: relocs in section `%pA', but it has no contents"
 msgstr "%pB: rÃ©adressages dans la section Â«Â %pAÂ Â» qui est vide"
 
-#: cofflink.c:2436 elflink.c:10810
+#: cofflink.c:2403 elflink.c:11600
 #, c-format
 msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
 msgstr "%XÂ«Â %sÂ Â» rÃ©fÃ©rencÃ© dans la section Â«Â %pAÂ Â» de %pB: dÃ©fini dans la section abandonnÃ©e Â«Â %pAÂ Â» de %pB\n"
 
-#: cofflink.c:2734
+#: cofflink.c:2598
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%<PRIx64>)"
+msgstr "%pB: Ã©limination du symbole non reprÃ©sentable Â«Â %sÂ Â» (valeur 0x%<PRIx64>)"
+
+#: cofflink.c:2716
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr "%pB: %pA: dÃ©bordement de rÃ©adressage: %#x > 0xffff"
 
-#: cofflink.c:2742
+#: cofflink.c:2724
 #, c-format
 msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
 msgstr "%pB: attention: %pA: dÃ©bordement du compteur de numÃ©ro de ligne: %#x > 0xffff"
 
-#: coffswap.h:789
+#: cofflink.c:3118
 #, c-format
-msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
-msgstr "%pB: attention: %s: dÃ©bordement du compteur de numÃ©ro de ligne: 0x%lx > 0xffff"
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr "%pB: mauvaise adresse de rÃ©adressage %#<PRIx64> dans la section Â«Â %pAÂ Â»"
 
-#: coffswap.h:803
+#: coffswap.h:826
 #, c-format
 msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
 msgstr "%pB: %s: dÃ©bordement de rÃ©adressage: 0x%lx > 0xffff"
 
-#: compress.c:260
+#: compress.c:744 compress.c:761
 #, c-format
 msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
 msgstr "erreur: %pB(%pA) est trop grand (%#<PRIx64> octets)"
 
-#: cpu-arm.c:298 cpu-arm.c:310
+#: cpu-arm.c:320 cpu-arm.c:332
 #, c-format
 msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
 msgstr "erreur: %pB compilÃ© pour EP9312 alors que %pB a Ã©tÃ© compilÃ© pour XScale"
 
-#: cpu-arm.c:446
+#: cpu-arm.c:469
 #, c-format
 msgid "warning: unable to update contents of %s section in %pB"
 msgstr "attention: incapable de mettre Ã  jour le contenu de la section %s dans %pB"
 
-#: dwarf2.c:544
+#: dwarf2.c:705
 #, c-format
 msgid "DWARF error: can't find %s section."
 msgstr "Erreur DWARF: ne peut repÃ©rer la section %s."
 
-#: dwarf2.c:579
+#: dwarf2.c:713
+#, c-format
+msgid "DWARF error: section %s has no contents"
+msgstr "Erreur DWARF: la section %s n'a pas de contenu"
+
+#. PR 26946
+#: dwarf2.c:722
+#, c-format
+msgid "DWARF error: section %s is too big"
+msgstr "Erreur DWARF: la section %s est trop grande"
+
+#: dwarf2.c:757
 #, c-format
 msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
 msgstr "Erreur DWARF: dÃ©calage (%<PRIu64>) plus grand ou Ã©gal Ã  la taille de %s (%<PRIu64>)"
 
-#: dwarf2.c:1107
+#: dwarf2.c:1504
 msgid "DWARF error: info pointer extends beyond end of attributes"
 msgstr "Erreur DWARF: le pointeur d'info va au delÃ  de la fin des attributs"
 
-#: dwarf2.c:1275
+#: dwarf2.c:1696
 #, c-format
 msgid "DWARF error: invalid or unhandled FORM value: %#x"
 msgstr "Erreur DWARF: valeur de FORM invalide ou non supportÃ©e: %#x"
 
-#: dwarf2.c:1581
+#: dwarf2.c:2043
 msgid "DWARF error: mangled line number section (bad file number)"
 msgstr "Erreur DWARF: numÃ©ro de ligne de section mutilÃ© (mauvais no. de fichier)"
 
-#: dwarf2.c:1926
+#: dwarf2.c:2585
 msgid "DWARF error: zero format count"
 msgstr "Erreur DWARF: dÃ©compte de format nul"
 
-#: dwarf2.c:1936
+#: dwarf2.c:2595
 #, c-format
 msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
 msgstr "Erreur DWARF: dÃ©compte de donnÃ©es (%<PRIx64>) plus grand que la taille du tampon"
 
-#: dwarf2.c:1977
+#: dwarf2.c:2634
 #, c-format
 msgid "DWARF error: unknown format content type %<PRIu64>"
 msgstr "Erreur DWARF: type de contenu de format %<PRIu64> inconnu"
 
-#: dwarf2.c:2057
+#: dwarf2.c:2707
 #, c-format
 msgid "DWARF error: line info section is too small (%<PRId64>)"
 msgstr "Erreur DWARF: la section des informations de lignes est trop petite (%<PRId64>)"
 
-#: dwarf2.c:2087
+#: dwarf2.c:2734
 #, c-format
 msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
 msgstr "Erreur DWARF: les donnÃ©es des informations de lignes sont plus grandes (%#<PRIx64>) que l'espace restant dans la section (%#lx)"
 
-#: dwarf2.c:2100
+#: dwarf2.c:2747
 #, c-format
 msgid "DWARF error: unhandled .debug_line version %d"
 msgstr "Erreur DWARF: version .debug_line %d non prise en charge"
 
-#: dwarf2.c:2110
+#: dwarf2.c:2756
 msgid "DWARF error: ran out of room reading prologue"
 msgstr "Erreur DWARF: on est tombÃ© Ã  cours de place lors de la lecture du prologue"
 
-#: dwarf2.c:2128
+#: dwarf2.c:2772
 #, c-format
 msgid "DWARF error: line info unsupported segment selector size %u"
 msgstr "Erreur DWARF: taille de sÃ©lecteur de segment %u non supportÃ©e pour les informations de lignes"
 
-#: dwarf2.c:2155
+#: dwarf2.c:2794
 msgid "DWARF error: invalid maximum operations per instruction"
 msgstr "Erreur DWARF: opÃ©rations maximum par instruction invalide"
 
-#: dwarf2.c:2174
+#: dwarf2.c:2806
 msgid "DWARF error: ran out of room reading opcodes"
 msgstr "Erreur DWARF: on est tombÃ© Ã  cours de place en lisant les opcodes"
 
-#: dwarf2.c:2347
+#: dwarf2.c:2984
 msgid "DWARF error: mangled line number section"
 msgstr "Erreur DWARF: numÃ©ro de ligne de section mutilÃ©"
 
-#: dwarf2.c:2852 dwarf2.c:2913
+#: dwarf2.c:3455
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "Erreur DWARF: rÃ©cursion d'une instance abstraite dÃ©tectÃ©e"
+
+#: dwarf2.c:3489 dwarf2.c:3579
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr "Erreur DWARF: rÃ©f DIE d'instance abstraite invalide"
 
-#: dwarf2.c:2889
+#: dwarf2.c:3505
 #, c-format
 msgid "DWARF error: unable to read alt ref %<PRIu64>"
 msgstr "Erreur DWARF: impossible de lire la ref alt %<PRIu64>"
 
-#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457
+#: dwarf2.c:3557
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr "Erreur DWARF: impossible de localiser l'instance abstraite de la rÃ©f DIE %<PRIu64>"
+
+#: dwarf2.c:3594 dwarf2.c:3910 dwarf2.c:4483
 #, c-format
 msgid "DWARF error: could not find abbrev number %u"
 msgstr "Erreur DWARF: ne peut repÃ©rer le numÃ©ro abrÃ©gÃ© %u"
 
-#: dwarf2.c:2947
-msgid "DWARF error: abstract instance recursion detected"
-msgstr "Erreur DWARF: rÃ©cursion d'une instance abstraite dÃ©tectÃ©e"
+#: dwarf2.c:4183
+#, c-format
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
+msgstr "Erreur DWARF: ne peut repÃ©rer la spÃ©cification de variable au dÃ©calage 0x%lx"
+
+#: dwarf2.c:4329 dwarf2.c:4583
+msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
+msgstr "Erreur DWARF: attribut DW_AT_comp_dir rencontrÃ© sous une forme non-chaÃ®ne"
 
-#: dwarf2.c:3376
+#: dwarf2.c:4400
 #, c-format
 msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
 msgstr "Erreur DWARF: version DWARF trouvÃ©e Â«Â %uÂ Â», ce lecteur ne supporte que les informations des versions 2, 3, 4 et 5"
 
-#: dwarf2.c:3420
+#: dwarf2.c:4447
 #, c-format
 msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
 msgstr "Erreur DWARF: taille d'adresse obtenue Â«Â %uÂ Â», ce lecteur ne peut traiter des tailles plus grandes que Â«Â %uÂ Â»"
 
-#: dwarf2.c:3523
-msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
-msgstr "Erreur DWARF: attribut DW_AT_comp_dir rencontrÃ© sous une forme non-chaÃ®ne"
-
-#: ecoff.c:971
+#: ecoff.c:1016
 #, c-format
 msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
 msgstr "%pB: attention: isymMax (%ld) est plus grand que ifdMax (%ld)"
 
-#: ecoff.c:1268
+#: ecoff.c:1312
 #, c-format
 msgid "unknown basic type %d"
 msgstr "type de base %d inconnu"
 
-#: ecoff.c:1525
+#: ecoff.c:1568
 #, c-format
 msgid ""
 "\n"
@@ -685,7 +776,7 @@ msgstr ""
 "\n"
 "      Dernier+1 symbole: %ld"
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1575 ecoff.c:1578
 #, c-format
 msgid ""
 "\n"
@@ -694,7 +785,7 @@ msgstr ""
 "\n"
 "      Premier symbole: %ld"
 
-#: ecoff.c:1548
+#: ecoff.c:1593
 #, c-format
 msgid ""
 "\n"
@@ -703,7 +794,7 @@ msgstr ""
 "\n"
 "      Dernier+1 symbole: %-7ld   Type:  %s"
 
-#: ecoff.c:1555
+#: ecoff.c:1601
 #, c-format
 msgid ""
 "\n"
@@ -712,7 +803,7 @@ msgstr ""
 "\n"
 "      Symbole local: %ld"
 
-#: ecoff.c:1563
+#: ecoff.c:1609
 #, c-format
 msgid ""
 "\n"
@@ -721,7 +812,7 @@ msgstr ""
 "\n"
 "      struct; Symbole Fin+1: %ld"
 
-#: ecoff.c:1568
+#: ecoff.c:1614
 #, c-format
 msgid ""
 "\n"
@@ -730,7 +821,7 @@ msgstr ""
 "\n"
 "      union; Dernier+1 symbole: %ld"
 
-#: ecoff.c:1573
+#: ecoff.c:1619
 #, c-format
 msgid ""
 "\n"
@@ -739,7 +830,7 @@ msgstr ""
 "\n"
 "      enum; Dernier+1 symbol: %ld"
 
-#: ecoff.c:1579
+#: ecoff.c:1627
 #, c-format
 msgid ""
 "\n"
@@ -748,42 +839,46 @@ msgstr ""
 "\n"
 "      Type: %s"
 
-#: elf-attrs.c:446
+#: elf-attrs.c:417 elf-attrs.c:447 elf-attrs.c:623
+msgid "error adding attribute"
+msgstr "erreur en ajoutant l'attribut"
+
+#: elf-attrs.c:503
 #, c-format
 msgid "%pB: error: attribute section '%pA' too big: %#llx"
 msgstr "%pB: erreur: section d'attributs Â«Â %pAÂ Â» trop grande: %llx"
 
-#: elf-attrs.c:487
+#: elf-attrs.c:540
 #, c-format
-msgid "%pB: error: attribute section length too small: %<PRId64>"
-msgstr "%pB: erreur: longueur de section d'attributs trop petite: %<PRId64>"
+msgid "%pB: error: attribute section length too small: %ld"
+msgstr "%pB: erreur: longueur de section d'attributs trop petite: %ld"
 
-#: elf-attrs.c:615
+#: elf-attrs.c:673
 #, c-format
 msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain"
 msgstr "erreur: %pB: l'objet a un contenu spÃ©cifique Ã  un vendeur qui doit Ãªtre traitÃ© par la chaÃ®ne d'outils Â«Â %sÂ Â»"
 
-#: elf-attrs.c:625
+#: elf-attrs.c:683
 #, c-format
 msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
 msgstr "erreur: %pB: Ã©tiquette d'objet Â«Â %d, %sÂ Â» incompatible avec l'Ã©tiquette Â«Â %d, %sÂ Â»"
 
-#: elf-eh-frame.c:944
+#: elf-eh-frame.c:945
 #, c-format
 msgid "discarding zero address range FDE in %pB(%pA).\n"
 msgstr "abandon du FDE avec une plage d'adresses nulle dans %pB(%pA).\n"
 
-#: elf-eh-frame.c:1049
+#: elf-eh-frame.c:1050
 #, c-format
 msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
 msgstr "erreur dans %pB(%pA); aucune table .eh_frame_hdr ne sera crÃ©Ã©e"
 
-#: elf-eh-frame.c:1539
+#: elf-eh-frame.c:1542
 #, c-format
 msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
 msgstr "encodage FDE dans %pB(%pA) empÃªche la crÃ©ation de la table .eh_frame_hdr"
 
-#: elf-eh-frame.c:1546
+#: elf-eh-frame.c:1549
 msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
 msgstr "les avertissements suivants Ã  propos de l'encodage FDE empÃªchant la gÃ©nÃ©ration de .eh_frame_hdr sont abandonnÃ©s"
 
@@ -802,116 +897,111 @@ msgstr "%pB: %pA taille de section d'ent
 msgid "%pB: %pA points past end of text section"
 msgstr "%pB: %pA pointe au delÃ  de la fin de la section texte"
 
-#: elf-eh-frame.c:2139
+#: elf-eh-frame.c:2143
 msgid "DW_EH_PE_datarel unspecified for this architecture"
 msgstr "DW_EH_PE_datarel non spÃ©cifiÃ© pour cette architecture"
 
-#: elf-eh-frame.c:2309
+#: elf-eh-frame.c:2314
 #, c-format
 msgid "invalid output section for .eh_frame_entry: %pA"
 msgstr "section de sortie invalide pour .eh_frame_entry: %pA"
 
-#: elf-eh-frame.c:2332
+#: elf-eh-frame.c:2337
 #, c-format
 msgid "invalid contents in %pA section"
 msgstr "contenu invalide dans la section %pA"
 
-#: elf-eh-frame.c:2488
+#: elf-eh-frame.c:2493
 msgid ".eh_frame_hdr entry overflow"
 msgstr "dÃ©bordement de l'entrÃ©e .eh_frame_hdr"
 
-#: elf-eh-frame.c:2490
+#: elf-eh-frame.c:2495
 msgid ".eh_frame_hdr refers to overlapping FDEs"
 msgstr ".eh_frame_hdr fait rÃ©fÃ©rence Ã  des FDE qui se chevauchent"
 
-#: elf-ifunc.c:149
+#. xgettext:c-format.
+#: elf-ifunc.c:144 elfnn-loongarch.c:1427
 #, c-format
 msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
 msgstr "%P%P: le symbole dynamique STT_GNU_IFUNC Â«Â %sÂ Â» avec une Ã©galitÃ© de pointeur dans Â«Â %pBÂ Â» ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un exÃ©cutable. Recompilez avec -fPIE et reliez avec -pie\n"
 
-#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127
-#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925
-#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049
-#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693
-#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266
-#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631
-#: elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759
-#: elf32-score.c:2733 elf32-score7.c:2542 elf32-spu.c:5083
-#: elf32-tilepro.c:3506 elf32-v850.c:2291 elf32-visium.c:681
-#: elf32-xstormy16.c:931 elf64-mmix.c:1541 elfxx-tilegx.c:3870
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-bfin.c:3133 elf32-cr16.c:1429
+#: elf32-cris.c:2034 elf32-crx.c:922 elf32-d10v.c:510 elf32-epiphany.c:563
+#: elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:492 elf32-h8300.c:523
+#: elf32-ip2k.c:1478 elf32-iq2000.c:691 elf32-lm32.c:1070 elf32-m32c.c:624
+#: elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522 elf32-metag.c:1984
+#: elf32-microblaze.c:1682 elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6093
+#: elf32-or1k.c:1897 elf32-score.c:2734 elf32-score7.c:2545 elf32-spu.c:5085
+#: elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
+#: elf32-xstormy16.c:930 elf64-bpf.c:339 elf64-mmix.c:1541 elfxx-tilegx.c:3742
 msgid "internal error: out of range error"
 msgstr "erreur interne: hors limite"
 
-#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131
-#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929
-#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498
-#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628
-#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994
-#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362
-#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546
-#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685
-#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469
-#: elfxx-tilegx.c:3874
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-bfin.c:3137 elf32-cr16.c:1433
+#: elf32-cris.c:2038 elf32-crx.c:926 elf32-d10v.c:514 elf32-fr30.c:598
+#: elf32-frv.c:4053 elf32-ft32.c:496 elf32-h8300.c:527 elf32-iq2000.c:695
+#: elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841 elf32-m68hc1x.c:1275
+#: elf32-mep.c:526 elf32-metag.c:1988 elf32-microblaze.c:1686 elf32-moxie.c:292
+#: elf32-msp430.c:1510 elf32-nds32.c:6097 elf32-or1k.c:1901 elf32-score.c:2738
+#: elf32-score7.c:2549 elf32-spu.c:5089 elf32-tilepro.c:3376 elf32-v850.c:2298
+#: elf32-visium.c:684 elf32-xstormy16.c:934 elf64-mmix.c:1545
+#: elfxx-mips.c:10658 elfxx-tilegx.c:3746
 msgid "internal error: unsupported relocation error"
 msgstr "erreur interne: erreur de rÃ©adressage non supportÃ©e"
 
-#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933
-#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053
-#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197
-#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:930 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
+#: elf32-microblaze.c:1690 elf32-nds32.c:6101 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5093
 msgid "internal error: dangerous error"
 msgstr "erreur interne: erreur dangereuse"
 
-#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139
-#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937
-#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061
-#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705
-#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278
-#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643
-#: elf32-moxie.c:300 elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201
-#: elf32-or1k.c:1771 elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095
-#: elf32-tilepro.c:3518 elf32-v850.c:2315 elf32-visium.c:693
-#: elf32-xstormy16.c:943 elf64-mmix.c:1553 elfxx-tilegx.c:3882
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-bfin.c:3145 elf32-cr16.c:1441
+#: elf32-cris.c:2046 elf32-crx.c:934 elf32-d10v.c:522 elf32-epiphany.c:578
+#: elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:504 elf32-h8300.c:535
+#: elf32-ip2k.c:1493 elf32-iq2000.c:703 elf32-lm32.c:1082 elf32-m32c.c:636
+#: elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534 elf32-metag.c:1996
+#: elf32-microblaze.c:1694 elf32-moxie.c:300 elf32-msp430.c:1518 elf32-mt.c:410
+#: elf32-nds32.c:6105 elf32-or1k.c:1909 elf32-score.c:2751 elf32-score7.c:2557
+#: elf32-spu.c:5097 elf32-tilepro.c:3384 elf32-v850.c:2318 elf32-visium.c:692
+#: elf32-xstormy16.c:942 elf64-bpf.c:352 elf64-mmix.c:1553 elfxx-tilegx.c:3754
 msgid "internal error: unknown error"
 msgstr "erreur interne: erreur inconnue"
 
-#: elf-m10300.c:1029
+#: elf-m10300.c:1030
 #, c-format
 msgid "%pB: unsupported transition from %s to %s"
 msgstr "%pB: transition de %s Ã  %s non supportÃ©e"
 
-#: elf-m10300.c:1198
+#: elf-m10300.c:1197
 #, c-format
 msgid "%pB: %s' accessed both as normal and thread local symbol"
 msgstr "%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole normal et comme symbole locale au thread"
 
-#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539
-#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409
-#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846
-#: elfxx-sparc.c:3906 elfxx-tilegx.c:3793
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5261
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6807
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2279
+#: elf-m10300.c:2093 elf32-arm.c:13398 elf32-i386.c:3494 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3023 elf64-s390.c:3042 elf64-x86-64.c:4369 elfxx-sparc.c:2917
+#: elfxx-sparc.c:3814 elfxx-tilegx.c:3665 elfnn-aarch64.c:5713
+#: elfnn-aarch64.c:7322 elfnn-kvx.c:2775
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr "%pB(%pA+%#<PRIx64>): rÃ©adressage %s sans solution vers le symbole Â«Â %sÂ Â»"
 
-#: elf-m10300.c:2156
+#: elf-m10300.c:2155
 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
 msgstr "erreur: type de rÃ©adressage inappropriÃ© pour une librairie partagÃ©e (avez-vous oubliÃ© -fpic ?)"
 
-#: elf-m10300.c:2160
+#: elf-m10300.c:2159
 #, c-format
 msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library"
 msgstr "%pB: l'adresse de la fonction protÃ©gÃ©e Â«Â %sÂ Â» ne peut Ãªtre prise lors de la crÃ©ation d'une librairie partagÃ©e"
 
-#: elf-m10300.c:2163
+#: elf-m10300.c:2162
 msgid "internal error: suspicious relocation type used in shared library"
 msgstr "erreur interne: type de rÃ©adressage douteux utilisÃ© dans une librairie partagÃ©e"
 
-#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364
-#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361
-#: elf64-ia64.c:361
+#: elf-m10300.c:2650 elf32-avr.c:2488 elf32-frv.c:5621 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8457 reloc16.c:155 elfnn-ia64.c:365
 msgid "%P%F: --relax and -r may not be used together\n"
 msgstr "%P%F: --relax et -r ne peuvent pas Ãªtre utilisÃ©s en mÃªme temps\n"
 
@@ -940,136 +1030,158 @@ msgstr "attention: %pB: taille de pille
 msgid "warning: %pB: corrupt no copy on protected size: 0x%x"
 msgstr "attention: %pB: taille de Â«Â no copy on protectedÂ Â» corrompue: 0x%x"
 
-#: elf-properties.c:186
+#: elf-properties.c:189
+#, c-format
+msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
+msgstr "erreur: %pB: <la taille de la propriÃ©tÃ© (0x%x) est corrompue: 0x%x>"
+
+#: elf-properties.c:214
 #, c-format
 msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
 msgstr "attention: %pB: type GNU_PROPERTY_TYPE (%ld) non supportÃ©: 0x%x"
 
-#: elf-properties.c:301
+#: elf-properties.c:400
 msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr "PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB (0x%v) et %pB (0x%v)\n"
 
-#: elf-properties.c:307
+#: elf-properties.c:406
 msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
 msgstr "PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB (0x%v) et %pB (pas trouvÃ©e)\n"
 
-#: elf-properties.c:316 elf-properties.c:396
+#: elf-properties.c:415 elf-properties.c:493
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr "PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB et %pB\n"
 
-#: elf-properties.c:320
+#: elf-properties.c:419
 msgid "Removed property %W to merge %pB and %pB (not found)\n"
 msgstr "PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB et %pB (pas trouvÃ©e)\n"
 
-#: elf-properties.c:339
+#: elf-properties.c:436
 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr "PropriÃ©tÃ© mise Ã  jour %W (0x%v) Ã  fusionner %pB (0x%v) et %pB (0x%v)\n"
 
-#: elf-properties.c:348
+#: elf-properties.c:445
 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
 msgstr "PropriÃ©tÃ© mise Ã  jour %W (%v) Ã  fusionner %pB (0x%v) et %pB (pas trouvÃ©e)\n"
 
-#: elf-properties.c:390
+#: elf-properties.c:487
 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
 msgstr "PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB (pas trouvÃ©e) et %pB (0x%v)\n"
 
+#: elf-properties.c:668 elfxx-aarch64.c:758 elfxx-x86.c:4147
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section des propriÃ©tÃ©s GNU\n"
+
+#: elf-properties.c:672 elfxx-aarch64.c:762 elfxx-x86.c:4152
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: Ã©chec lors de l'alignement de la section\n"
+
 #. Merge .note.gnu.property sections.
-#: elf-properties.c:552 elf-properties.c:554
+#: elf-properties.c:698 elf-properties.c:700
 msgid "\n"
 msgstr "\n"
 
-#: elf-properties.c:553
+#: elf-properties.c:699
 msgid "Merging program properties\n"
 msgstr "Fusion des propriÃ©tÃ©s du programme\n"
 
+#: elf-sframe.c:240
+#, c-format
+msgid "error in %pB(%pA); no .sframe will be created"
+msgstr "erreur dans %pB(%pA); aucune .sframe sera crÃ©Ã©e"
+
+#: elf-sframe.c:400
+msgid "input SFrame sections with different abi prevent .sframe generation"
+msgstr "Des sections SFrame d'entrÃ©e avec des abi diffÃ©rentes empÃªchent la gÃ©nÃ©ration de .sframe"
+
+#: elf-sframe.c:411
+msgid "input SFrame sections with different format versions prevent .sframe generation"
+msgstr "Des sections SFrame d'entrÃ©e avec des formats de version diffÃ©rents empÃªchent la gÃ©nÃ©ration de .sframe"
+
 #. PR 17512: file: f057ec89.
-#: elf.c:345
+#: elf.c:328
 #, c-format
 msgid "%pB: attempt to load strings from a non-string section (number %d)"
 msgstr "%pB: tentative de charger des chaÃ®nes depuis une section non-chaÃ®nes (numÃ©ro %d)"
 
-#: elf.c:360
+#: elf.c:353
 #, c-format
 msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
 msgstr "%pB: chaÃ®ne de dÃ©calage invalide %u >= %<PRIu64> pour la section Â«Â %sÂ Â»"
 
-#: elf.c:499 /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7891
+#: elf.c:517 elf32-arm.c:17731 elfnn-aarch64.c:8322 elfnn-loongarch.c:5102
 #, c-format
 msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
 msgstr "%pB le symbole numÃ©ro %lu fait rÃ©fÃ©rence Ã  une section SHT_SYMTAB_SHNDX inexistante"
 
-#: elf.c:664
-#, c-format
-msgid "%pB: corrupt size field in group section header: %#<PRIx64>"
-msgstr "%pB: champ de taille corrompu dans l'en-tÃªte du groupe de section: %#<PRIx64>"
-
-#: elf.c:680
+#: elf.c:679
 #, c-format
 msgid "%pB: invalid size field in group section header: %#<PRIx64>"
 msgstr "%pB: champ de taille invalide dans l'en-tÃªte du groupe de section: %#<PRIx64>"
 
-#: elf.c:728
+#: elf.c:724
 #, c-format
 msgid "%pB: invalid entry in SHT_GROUP section [%u]"
 msgstr "%pB: entrÃ©e invalide dans la section SHT_GROUP [%u]"
 
-#: elf.c:747
+#: elf.c:743
 #, c-format
 msgid "%pB: no valid group sections found"
 msgstr "%pB: aucune section de groupe valable trouvÃ©e"
 
 #. See PR 21957 for a reproducer.
-#: elf.c:776
+#: elf.c:772
 #, c-format
 msgid "%pB: group section '%pA' has no contents"
 msgstr "%pB: la section de groupe Â«Â %pAÂ Â» n'a pas de contenu"
 
-#: elf.c:837
+#: elf.c:833
 #, c-format
 msgid "%pB: no group info for section '%pA'"
 msgstr "%pB: aucune info de groupe pour la section Â«Â %pAÂ Â»"
 
-#: elf.c:868 elf.c:3886 elflink.c:11403
-#, c-format
-msgid "%pB: warning: sh_link not set for section `%pA'"
-msgstr "%pB: attention: sh_link n'a pas de valeur pour la section Â«Â %pAÂ Â»"
-
-#: elf.c:888
+#: elf.c:885
 #, c-format
 msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
 msgstr "%pB: sh_link [%d] n'est pas correct dans la section Â«Â %pAÂ Â»"
 
-#: elf.c:901
+#: elf.c:898
 #, c-format
 msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
 msgstr "%pB: la section SHT_GROUP [index %d] n'a pas de section SHF_GROUP"
 
-#: elf.c:922
+#: elf.c:920
 #, c-format
 msgid "%pB: section group entry number %u is corrupt"
 msgstr "%pB: l'entrÃ©e de groupe de section %u est corrompue"
 
-#: elf.c:945
+#: elf.c:943
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
 msgstr "%pB: type [%#x] de section Â«Â %sÂ Â» inconnu dans le groupe [%pA]"
 
-#: elf.c:1408
+#: elf.c:1244
+#, c-format
+msgid "%pB: section %s is compressed with zstd, but BFD is not built with zstd support"
+msgstr "%pB: la section %s est compressÃ©e avec zstd mais BFD n'est pas compilÃ© avec le support de zstd"
+
+#: elf.c:1440
 #, c-format
 msgid "%pB: invalid sh_link field (%d) in section number %d"
 msgstr "%pB: champ sh_link (%d) invalide dans la section numÃ©ro %d"
 
-#: elf.c:1424
+#: elf.c:1456
 #, c-format
 msgid "%pB: failed to find link section for section %d"
 msgstr "%pB: impossible de trouver la section de liaison pour la section %d"
 
-#: elf.c:1451
+#: elf.c:1483
 #, c-format
 msgid "%pB: failed to find info section for section %d"
 msgstr "%pB: impossible de trouver la section d'information pour la section %d"
 
-#: elf.c:1623
+#: elf.c:1660
 #, c-format
 msgid ""
 "\n"
@@ -1078,7 +1190,7 @@ msgstr ""
 "\n"
 "En-tÃªte de programme:\n"
 
-#: elf.c:1665
+#: elf.c:1702
 #, c-format
 msgid ""
 "\n"
@@ -1087,7 +1199,7 @@ msgstr ""
 "\n"
 "Section dynamique:\n"
 
-#: elf.c:1806
+#: elf.c:1841
 #, c-format
 msgid ""
 "\n"
@@ -1096,7 +1208,7 @@ msgstr ""
 "\n"
 "DÃ©finitions des versions:\n"
 
-#: elf.c:1831
+#: elf.c:1866
 #, c-format
 msgid ""
 "\n"
@@ -1105,262 +1217,411 @@ msgstr ""
 "\n"
 "RÃ©fÃ©rences de version:\n"
 
-#: elf.c:1836
+#: elf.c:1871
 #, c-format
 msgid "  required from %s:\n"
 msgstr " requis par %s:\n"
 
-#: elf.c:2037
+#: elf.c:2614
 #, c-format
 msgid "%pB: warning: loop in section dependencies detected"
 msgstr "%pB: attention: boucle dÃ©tectÃ©e dans les dÃ©pendances de sections"
 
-#: elf.c:2145
+#: elf.c:2721
 #, c-format
 msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: attention: plusieurs tables de symboles dÃ©tectÃ©es â€” la table dans la section %u est ignorÃ©e"
 
-#: elf.c:2229
+#: elf.c:2806
 #, c-format
 msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: attention: plusieurs tables de symboles dynamiques ont Ã©tÃ© dÃ©tectÃ©es â€” la table dans la section %u est ignorÃ©e"
 
-#: elf.c:2342
+#: elf.c:2925
 #, c-format
 msgid "%pB: invalid link %u for reloc section %s (index %u)"
 msgstr "%pB: lien %u invalide pour la section de rÃ©adressages %s (index %u)"
 
-#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543
+#: elf.c:2982
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%pB: attention: la section de rÃ©adressage secondaire Â«Â %sÂ Â» pour la section %pA a Ã©tÃ© trouvÃ©e â€” elle est ignorÃ©e"
+
+#: elf.c:3070 elf.c:3084 elf.c:3095 elf.c:3108
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr "%pB: type [%#x] inconnu dans la section Â«Â %sÂ Â»"
 
-#: elf.c:3248
+#: elf.c:3770
 #, c-format
 msgid "%pB: error: alignment power %d of section `%pA' is too big"
 msgstr "%pB: erreur: l'alignement Ã  la puissance %d de la section Â«Â %pAÂ Â» est trop grand"
 
-#: elf.c:3278
+#: elf.c:3805
 #, c-format
 msgid "warning: section `%pA' type changed to PROGBITS"
 msgstr "attention: type de la section Â«Â %pAÂ Â» changÃ© en PROGBITS"
 
-#: elf.c:3754
+#: elf.c:4311
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr "%pB: trop de sections: %u"
 
-#: elf.c:3839
+#: elf.c:4397
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
 msgstr "%pB: le sh_link de la section Â«Â %pAÂ Â» pointe vers la section abandonnÃ©e Â«Â %pAÂ Â» de Â«Â %pBÂ Â»"
 
-#: elf.c:3864
+#: elf.c:4415
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
 msgstr "%pB: le sh_link de la section Â«Â %pAÂ Â» pointe vers la section supprimÃ©e Â«Â %pAÂ Â» de Â«Â %pBÂ Â»"
 
-#: elf.c:4430
+#: elf.c:5009
 #, c-format
-msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d"
-msgstr "%pB: la section GNU_MBIN Â«Â %pAÂ Â» a un champ sh_info invalide: %d"
+msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
+msgstr "%pB: la section GNU_MBIND Â«Â %pAÂ Â» a un champ sh_info invalide: %d"
+
+#: elf.c:5192
+msgid "%F%P: failed to size relative relocations\n"
+msgstr "%F%P: Ã©chec lors du dimensionnement des rÃ©adressages relatifs\n"
 
-#: elf.c:5013
+#: elf.c:5617
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr "%pB: Les sections TLS ne sont pas adjacentes:"
 
-#: elf.c:5020
+#: elf.c:5624
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr "\t    TLS: %pA"
 
-#: elf.c:5024
+#: elf.c:5628
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr "\tnon-TLS: %pA"
 
-#: elf.c:5538
+#: elf.c:6256
 #, c-format
 msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
 msgstr "%pB: La premiÃ¨re section dans le segment PT_DYNAMIC n'est pas la section .dynamic"
 
-#: elf.c:5566
+#: elf.c:6282
 #, c-format
 msgid "%pB: not enough room for program headers, try linking with -N"
 msgstr "%pB: pas suffisamment d'espace pour les en-tÃªtes du programme, essayer l'option -N"
 
-#: elf.c:5654
+#: elf.c:6399
 #, c-format
 msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
 msgstr "%pB: section %pA avec lma %#<PRIx64> ajustÃ©e Ã  %#<PRIx64>"
 
-#: elf.c:5791
+#. The fix for this error is usually to edit the linker script being
+#. used and set up the program headers manually.  Either that or
+#. leave room for the headers at the start of the SECTIONS.
+#: elf.c:6539
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr "%pB: erreur: segment PHDR non couvert par le segment LOAD"
+
+#: elf.c:6579
 #, c-format
 msgid "%pB: section `%pA' can't be allocated in segment %d"
 msgstr "%pB: la section Â«Â %pAÂ Â» ne peut pas Ãªtre allouÃ©e dans le segment %d"
 
-#: elf.c:5839
+#: elf.c:6720
 #, c-format
 msgid "%pB: warning: allocated section `%s' not in segment"
 msgstr "%pB: attention: section allouÃ©e Â«Â %sÂ Â» n'est pas dans le segment"
 
-#: elf.c:6072
+#: elf.c:6855
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr "%pB: attention: impossible d'allouer une quelconque section dans le segment PT_GNU_RELRO"
+
+#: elf.c:6886
 #, c-format
 msgid "%pB: error: non-load segment %d includes file header and/or program header"
 msgstr "%pB: erreur: le segment de non-chargement %d inclus un en-tÃªte de fichier ou de programme"
 
-#. The fix for this error is usually to edit the linker script being
-#. used and set up the program headers manually.  Either that or
-#. leave room for the headers at the start of the SECTIONS.
-#: elf.c:6249
+#: elf.c:7034
 #, c-format
-msgid "%pB: error: PHDR segment not covered by LOAD segment"
-msgstr "%pB: erreur: segment PHDR non couvert par le segment LOAD"
+msgid "error: %pB has a TLS segment with execute permission"
+msgstr "erreur: %pB a un segment TLS avec la permission d'exÃ©cution"
+
+#: elf.c:7040
+#, c-format
+msgid "warning: %pB has a TLS segment with execute permission"
+msgstr "attention: %pB a un segment TLS avec la permission d'exÃ©cution"
 
-#: elf.c:6606
+#: elf.c:7055
+#, c-format
+msgid "error: %pB has a LOAD segment with RWX permissions"
+msgstr "erreur: %pB a un segment LOAD avec les permissions RWX"
+
+#: elf.c:7061
+#, c-format
+msgid "warning: %pB has a LOAD segment with RWX permissions"
+msgstr "attention: %pB a un segment LOAD avec les permissions RWX"
+
+#: elf.c:7454
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr "%pB: symbole Â«Â %sÂ Â» requis mais absent"
 
-#: elf.c:6949
+#: elf.c:7832
 #, c-format
 msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
 msgstr "%pB: attention: segment chargeable vide dÃ©tectÃ© Ã  vaddr=%#<PRIx64>, est-ce intentionnelÂ ?"
 
-#: elf.c:7574
+#: elf.c:8492
 #, c-format
 msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
 msgstr "%pB: attention: un alignement de segment de %#<PRIx64> est trop grand"
 
-#: elf.c:8073
+#: elf.c:9000
+#, c-format
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr "%pB: Impossible de gÃ©rer l'indice de section %x dans le symbole ELF. Utilisation de ABS Ã  la place."
+
+#: elf.c:9030
 #, c-format
 msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
 msgstr "incapable de trouver un Ã©quivalent pour le symbole Â«Â %sÂ Â» de la section Â«Â %sÂ Â»"
 
-#: elf.c:8421
+#: elf.c:9464
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr "%pB: entrÃ©e .gnu.version_r invalide"
 
-#: elf.c:8548
+#: elf.c:9639
 #, c-format
 msgid "%pB: .gnu.version_d invalid entry"
 msgstr "%pB: entrÃ©e .gnu.version_d invalide"
 
-#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914
-#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841
-#: elf64-ppc.c:4950
+#: elf.c:10139
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr "%pB:%pA: erreur: tentative d'Ã©crire au delÃ  de la fin de la section"
+
+#: elf.c:10151
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr "%pB:%pA: erreur: tentative d'Ã©crire la section dans un tampon vide"
+
+#: elf.c:10266 elf32-mcore.c:100 elf32-mcore.c:455 elf32-ppc.c:7676
+#: elf32-ppc.c:8864 elf64-ppc.c:16839
+#, c-format
+msgid "%pB: %s unsupported"
+msgstr "%pB: %s pas supportÃ©"
+
+#: elf.c:11079
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr "%pB: attention: le win32pstatus %s, d'une taille de %lu octets, est trop petit"
+
+#: elf.c:11158
+#, c-format
+msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
+msgstr "%pB: le win32pstatus NOTE_INFO_MODULE, d'une taille de %lu, est trop petit pour contenir un nom d'une taille de %u"
+
+#: elf.c:13796
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr "la section GNU_MBIND est uniquement supportÃ©e pour les cibles GNU et FreeBSD"
+
+#: elf.c:13799
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr "le type symbolique STT_GNU_IFUNC est uniquement supportÃ© pour les cibles GNU et FreeBSD"
+
+#: elf.c:13802
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr "la liaison symbolique STB_GNU_UNIQUE est uniquement supportÃ©e pour les cibles GNU et FreeBSD"
+
+#: elf.c:13805
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr "la section GNU_RETAIN est uniquement supportÃ©e pour les cibles GNU et FreeBSD"
+
+#: elf.c:14023
+#, c-format
+msgid "%pB(%pA): relocation %zu has invalid symbol index %lu"
+msgstr "%pB(%pA): rÃ©adressage %zu a un index de symbole %lu invalide"
+
+#: elf.c:14099
+#, c-format
+msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
+msgstr "%pB(%pA): la section de liaison ne peut pas Ãªtre dÃ©finie car le fichier de sortie n'a pas de table de symboles"
+
+#: elf.c:14113
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): l'index de la section d'information est invalide"
+
+#: elf.c:14127
+#, c-format
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr "%pB(%pA): l'index de la section d'information ne peut pas Ãªtre dÃ©fini car la section n'est pas dans la sortie"
+
+#: elf.c:14203
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr "%pB(%pA): erreur: la section de rÃ©adressage secondaire est compressÃ©e deux fois"
+
+#: elf.c:14215
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr "%pB(%pA): erreur: la section de rÃ©adressage secondaire a des entrÃ©es de taille nulle"
+
+#: elf.c:14227
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr "%pB(%pA): erreur: la section de rÃ©adressage secondaire a des entrÃ©es d'une taille non standard"
+
+#: elf.c:14241
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr "%pB(%pA): erreur: la section de rÃ©adressage secondaire est videÂ !"
+
+#: elf.c:14264
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr "%pB(%pA): erreur: rÃ©adressages internes manquants pour la section de rÃ©adressage secondaire"
+
+#: elf.c:14284
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %zu is empty"
+msgstr "%pB:%pA: erreur: l'entrÃ©e %zu de la table de rÃ©adressage est vide"
+
+#: elf.c:14309
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a missing symbol"
+msgstr "%pB(%pA): erreur: le rÃ©adressage secondaire %zu fait rÃ©fÃ©rence Ã  un symbole manquant"
+
+#: elf.c:14327
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a deleted symbol"
+msgstr "%pB(%pA): erreur: le rÃ©adressage secondaire %zu fait rÃ©fÃ©rence Ã  un symbole supprimÃ©"
+
+#: elf.c:14341
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu is of an unknown type"
+msgstr "%pB(%pA): erreur: le rÃ©adressage secondaire %zu est d'un type inconnu"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15125 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3218
+#: elf32-visium.c:844 elf64-ppc.c:5513 elfnn-aarch64.c:7552
 #, c-format
 msgid "private flags = 0x%lx:"
 msgstr "fanions privÃ©s = 0x%lx:"
 
-#: elf32-arc.c:627
+#: elf32-arc.c:642
 #, c-format
 msgid "warning: %pB: conflicting platform configuration %s with %s"
 msgstr "attention: %pB: configuration de plateforme %s en conflit avec %s"
 
-#: elf32-arc.c:646
+#: elf32-arc.c:661
 #, c-format
 msgid "error: %pB: unable to merge CPU base attributes %s with %s"
 msgstr "erreur: %pB: impossible de fusionner les attributs de base CPU %s avec %s"
 
-#: elf32-arc.c:683
+#: elf32-arc.c:698
 #, c-format
 msgid "error: %pB: unable to merge ISA extension attributes %s"
 msgstr "erreur: %pB: impossible de fusionner les attributs de l'extension ISA %s"
 
-#: elf32-arc.c:707
+#: elf32-arc.c:722
 #, c-format
 msgid "error: %pB: conflicting ISA extension attributes %s with %s"
 msgstr "erreur: %pB: attributs d'extension ISA %s en conflit avec %s"
 
-#: elf32-arc.c:747
+#: elf32-arc.c:762
 #, c-format
 msgid "error: %pB: cannot mix rf16 with full register set %pB"
 msgstr "erreur: %pB: impossible de mÃ©langer rf16 avec l'ensemble des registres complets %pB"
 
-#: elf32-arc.c:775
+#: elf32-arc.c:790
 #, c-format
 msgid "error: %pB: conflicting attributes %s: %s with %s"
 msgstr "erreur: %pB: attributs %s conflictuels: %s avec %s"
 
-#: elf32-arc.c:802
+#: elf32-arc.c:817
 #, c-format
 msgid "error: %pB: conflicting attributes %s"
 msgstr "erreur: %pB: attributs %s conflictuels"
 
-#: elf32-arc.c:907
+#: elf32-arc.c:922
 #, c-format
 msgid "error: attempting to link %pB with a binary %pB of different architecture"
 msgstr "erreur: tentative de lier %pB avec un binaire %pB d'une architecture diffÃ©rente"
 
-#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385
-#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354
+#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
+#: elf32-ppc.c:3856 elf64-sparc.c:737 elfxx-mips.c:15692
 #, c-format
 msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: utilise des champs e_flags (%#x) diffÃ©rents des modules prÃ©cÃ©dents (%#x)"
 
-#: elf32-arc.c:1012
+#: elf32-arc.c:1027
 msgid "error: the ARC4 architecture is no longer supported"
 msgstr "erreur: l'architecture ARC4 n'est plus supportÃ©e"
 
-#: elf32-arc.c:1018
+#: elf32-arc.c:1033
 msgid "warning: unset or old architecture flags; use default machine"
 msgstr "attention: fanions d'architecture non dÃ©finis ou trop anciens; utilise la machine par dÃ©faut"
 
-#: elf32-arc.c:1151
+#: elf32-arc.c:1159
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): le rÃ©adressage CMEM vers Â«Â %sÂ Â» est invalide. 16 MSB devrait Ãªtre %#x (la valeur est %#<PRIx64>)"
 
-#: elf32-arc.c:1162
+#: elf32-arc.c:1170
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s+%#<PRIx64>' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): le rÃ©adressage CMEM vers Â«Â %s+%#<PRIx64>Â Â» est invalide, 16 MSB devrait Ãªtre %#x (la valeur est %<PRIx64>)"
 
-#: elf32-arc.c:1876
+#: elf32-arc.c:1898
 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
 msgstr "les rÃ©adressages GOT et PLT ne peuvent pas Ãªtre corrigÃ©s avec un Ã©diteur de liens non dynamique"
 
-#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470
+#: elf32-arc.c:1922 elf32-rx.c:1486
 #, c-format
 msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
 msgstr "%pB(%pA): attention: accÃ¨s non alignÃ© au symbole Â«Â %sÂ Â» dans la zone des petites donnÃ©es"
 
-#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475
+#: elf32-arc.c:1927 elf32-rx.c:1491
 #, c-format
 msgid "%pB(%pA): internal error: out of range error"
 msgstr "%pB(%pA): erreur interne: hors limite"
 
-#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480
+#: elf32-arc.c:1932 elf32-rx.c:1496
 #, c-format
 msgid "%pB(%pA): internal error: unsupported relocation error"
 msgstr "%pB(%pA): erreur interne: rÃ©adressage non supportÃ©"
 
-#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485
+#: elf32-arc.c:1937 elf32-rx.c:1501
 #, c-format
 msgid "%pB(%pA): internal error: dangerous relocation"
 msgstr "%pB(%pA): erreur interne: rÃ©adressage dangereux"
 
-#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490
+#: elf32-arc.c:1942 elf32-rx.c:1506
 #, c-format
 msgid "%pB(%pA): internal error: unknown error"
 msgstr "%pB(%pA): erreur interne: erreur inconnue"
 
-#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7462
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:497
+#: elf32-arc.c:2036 elf32-arc.c:2104 elf32-arm.c:15580 elf32-metag.c:2251
+#: elf32-nds32.c:5543 elfnn-aarch64.c:7959 elfnn-riscv.c:720
 #, c-format
 msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC"
 
-#: elf32-arc.c:2949
+#: elf32-arc.c:2923
 #, c-format
 msgid "%pB: unknown mandatory ARC object attribute %d"
 msgstr "%pB: l'attribut d'objet ARC obligatoire %d est inconnu"
 
-#: elf32-arc.c:2957
+#: elf32-arc.c:2931
 #, c-format
 msgid "warning: %pB: unknown ARC object attribute %d"
 msgstr "attention: %pB: attribut d'objet ARC %d inconnu"
@@ -1368,180 +1629,202 @@ msgstr "attention: %pB: attribut d'objet
 # Les auteurs francophones que j'ai trouvÃ©s utilisent le mot Â«Â veneerÂ Â». Le mot Â«Â trampolineÂ Â» est nettement plus appropriÃ©
 # pour dÃ©signer une instruction intermÃ©diaire dont le seul but est de faire rebondir un branchement court vers une destination plus
 # Ã©loignÃ©e.
-#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409
+#: elf32-arm.c:4346 elf32-arm.c:4380 elf32-arm.c:4399 elf32-arm.c:4451
 #, c-format
 msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction"
 msgstr "%pB(%pA): attention: les trampolines (aka veneers) de branchements longs utilisÃ©s dans la section avec l'attribut de section SHF_ARM_PURECODE n'est supportÃ© que sur les cibles M-profile implÃ©mentant l'instruction movw."
 
-#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183
+#: elf32-arm.c:4411 elf32-arm.c:4465 elf32-arm.c:9163 elf32-arm.c:9253
 #, c-format
 msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
 msgstr "%pB(%s): attention: l'inter-rÃ©seautage n'est pas activÃ©; premiÃ¨re occurrence: %pB: appel %s Ã  %s"
 
-#: elf32-arm.c:4697
+#: elf32-arm.c:4591
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr "ERREUR: l'Ã©bauche CMSE (section %s) est trop loin (%#<PRIx64>) de la destination (%#<PRIx64>)"
+
+#: elf32-arm.c:4760
 #, c-format
 msgid "no address assigned to the veneers output section %s"
 msgstr "aucune adresse assignÃ©e Ã  la section de sortie %s des trampolines (veneers)"
 
-#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579
-#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3098
+#: elf32-arm.c:4835 elf32-arm.c:6984 elf32-csky.c:3389 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3907
+#: elf64-ppc.c:14157 elfnn-aarch64.c:3203 elfnn-kvx.c:895
 #, c-format
 msgid "%pB: cannot create stub entry %s"
 msgstr "%pB: ne peut crÃ©er l'entrÃ©e de l'Ã©bauche %s"
 
-#: elf32-arm.c:5957
+#: elf32-arm.c:5056 elf32-csky.c:3731 elf32-hppa.c:732 elf32-hppa.c:761
+#: elf32-hppa.c:842 elf32-m68hc11.c:422 elf32-m68hc12.c:542 elf32-metag.c:3345
+#: elf32-nios2.c:2494 elf64-ppc.c:12273 elf64-ppc.c:12281 xcofflink.c:4684
+#: elfnn-aarch64.c:3275
+msgid "%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: Impossible d'assigner Â«Â %pAÂ Â» Ã  une section de sortie. RÃ©essayez sans --enable-non-contiguous-regions.\n"
+
+#: elf32-arm.c:6027
 #, c-format
 msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
 msgstr "%pB: le symbole spÃ©cial Â«Â %sÂ Â» est uniquement autorisÃ© pour les architectures ARMv8-M ou ultÃ©rieures"
 
-#: elf32-arm.c:5966
+#: elf32-arm.c:6036
 #, c-format
 msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
 msgstr "%pB: symbole spÃ©cial Â«Â %sÂ Â» invalide; il doit Ãªtre un symbole de fonction global ou faible"
 
-#: elf32-arm.c:6005
+#: elf32-arm.c:6075
 #, c-format
 msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
 msgstr "%pB: symbole standard Â«Â %sÂ Â» invalide; il doit Ãªtre un symbole de fonction global ou faible"
 
-#: elf32-arm.c:6011
+#: elf32-arm.c:6081
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr "%pB: symbole standard Â«Â %sÂ Â» absent"
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6093
 #, c-format
 msgid "%pB: `%s' and its special symbol are in different sections"
 msgstr "%pB: Â«Â %sÂ Â» est ses symboles spÃ©ciaux sont dans des sections diffÃ©rentes"
 
-#: elf32-arm.c:6035
+#: elf32-arm.c:6105
 #, c-format
 msgid "%pB: entry function `%s' not output"
 msgstr "%pB: fonction Â«Â %sÂ Â» d'entrÃ©e par Ã©crite"
 
-#: elf32-arm.c:6042
+#: elf32-arm.c:6112
 #, c-format
 msgid "%pB: entry function `%s' is empty"
 msgstr "%pB: la fonction Â«Â %sÂ Â» d'entrÃ©e est vide"
 
-#: elf32-arm.c:6171
+#: elf32-arm.c:6241
 #, c-format
 msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
 msgstr "%pB: --in-implib uniquement supportÃ© pour les bibliothÃ¨ques d'import Secure Gateway"
 
-#: elf32-arm.c:6217
+#: elf32-arm.c:6290
 #, c-format
 msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
 msgstr "%pB: entrÃ©e de bibliothÃ¨que d'importation invalide: Â«Â %sÂ Â»; le symbole devrait Ãªtre absolu, global et faire rÃ©fÃ©rence Ã  des fonctions Thumb"
 
-#: elf32-arm.c:6239
+#: elf32-arm.c:6312
 #, c-format
 msgid "entry function `%s' disappeared from secure code"
 msgstr "la fonction d'entrÃ©e Â«Â %sÂ Â» a disparu du code sÃ»r"
 
-#: elf32-arm.c:6263
+#: elf32-arm.c:6336
 #, c-format
 msgid "`%s' refers to a non entry function"
 msgstr "Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  quelque chose qui n'est pas une fonction d'entrÃ©e"
 
-#: elf32-arm.c:6278
+#: elf32-arm.c:6351
 #, c-format
 msgid "%pB: visibility of symbol `%s' has changed"
 msgstr "%pB: la visibilitÃ© du symbole Â«Â %sÂ Â» a changÃ©"
 
-#: elf32-arm.c:6287
+#: elf32-arm.c:6360
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr "%pB: taille incorrecte pour le symbole Â«Â %sÂ Â»"
 
-#: elf32-arm.c:6306
+#: elf32-arm.c:6379
 #, c-format
 msgid "offset of veneer for entry function `%s' not a multiple of its size"
 msgstr "le dÃ©calage du trampoline (aka veneer) pour la fonction d'entrÃ©e Â«Â %sÂ Â» n'est pas un multiple de sa taille"
 
-#: elf32-arm.c:6326
+#: elf32-arm.c:6399
 msgid "new entry function(s) introduced but no output import library specified:"
 msgstr "une ou plusieurs nouvelles fonctions d'entrÃ©e spÃ©cifiÃ©es mais aucune bibliothÃ¨que d'import est spÃ©cifiÃ©e:"
 
-#: elf32-arm.c:6334
+#: elf32-arm.c:6407
 #, c-format
 msgid "start address of `%s' is different from previous link"
 msgstr "l'adresse de dÃ©part de Â«Â %sÂ Â» est diffÃ©rente de celle de l'Ã©dition de liens prÃ©cÃ©dente"
 
-#: elf32-arm.c:7042 elf32-arm.c:7078
+#: elf32-arm.c:7118 elf32-arm.c:7156
 #, c-format
 msgid "unable to find %s glue '%s' for '%s'"
 msgstr "incapable de repÃ©rer le liant %s Â«Â %sÂ Â» pour Â«Â %sÂ Â»"
 
-#: elf32-arm.c:7793
+#: elf32-arm.c:7868
 #, c-format
 msgid "%pB: BE8 images only valid in big-endian mode"
 msgstr "%pB: les images BE8 ne sont valables qu'en mode gros boutiste"
 
 #. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:8024
+#: elf32-arm.c:8096
 #, c-format
 msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
 msgstr "%pB: attention: le palliatif VFP11 sÃ©lectionnÃ© n'est pas nÃ©cessaire avec l'architecture cible"
 
-#: elf32-arm.c:8051
+#: elf32-arm.c:8123
 #, c-format
 msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
 msgstr "%pB: attention: le palliatif STM32L4XX sÃ©lectionnÃ© n'est pas nÃ©cessaire avec l'architecture cible"
 
-#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693
+#: elf32-arm.c:8659 elf32-arm.c:8679 elf32-arm.c:8746 elf32-arm.c:8765
 #, c-format
 msgid "%pB: unable to find %s veneer `%s'"
 msgstr "%pB: incapable de trouver le trampoline (veneer) Â«Â %sÂ Â» pour %s"
 
-#: elf32-arm.c:8900
+#: elf32-arm.c:8972
 #, c-format
 msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
 msgstr "%pB(%pA+%#x): erreur: chargements multiples dÃ©tectÃ©s dans un bloc d'instruction IT qui n'est pas le dernier: le trampoline (veneer) du STM32L4XX ne peut pas Ãªtre gÃ©nÃ©rÃ©; utilisez l'option -mrestrict-it de gcc pour gÃ©nÃ©rer seulement une instruction par bloc IT"
 
-#: elf32-arm.c:9000
+#: elf32-arm.c:9070
 #, c-format
 msgid "invalid TARGET2 relocation type '%s'"
 msgstr "type de rÃ©adressage TARGET2 Â«Â %sÂ Â» invalide"
 
 #. FIXME: We ought to be able to generate thumb-1 PLT
 #. instructions...
-#: elf32-arm.c:9802
+#: elf32-arm.c:9840
 #, c-format
 msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
 msgstr "%pB: attention: gÃ©nÃ©ration de PLT dans le mode thumb-1 pas encore supportÃ©e"
 
-#: elf32-arm.c:10106 elf32-arm.c:10148
+#: elf32-arm.c:10149 elf32-arm.c:10191
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %s Â«Â %lxÂ Â» inattendue dans le trampoline TLS"
 
-#: elf32-arm.c:10492
+#: elf32-arm.c:10541
 msgid "shared object"
 msgstr "objet partagÃ©"
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10544
 msgid "PIE executable"
 msgstr "exÃ©cutable PIE"
 
-#: elf32-arm.c:10498
+#: elf32-arm.c:10547
 #, c-format
 msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
 msgstr "%pB: le rÃ©adressage de %s vers le symbole externe ou non dÃ©fini Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en construisant un %s; recompilez avec -fPIC"
 
-#: elf32-arm.c:10635 elf32-arm.c:11062
+#: elf32-arm.c:10649
+#, c-format
+msgid "\\%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr "\\%pB: attention: instruction %s BLX vise la fonction %s Â«Â %sÂ Â»."
+
+#: elf32-arm.c:11066
 #, c-format
 msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
 msgstr "%pB: attention: instruction %s BLX vise la fonction %s Â«Â %sÂ Â»."
 
+#: elf32-arm.c:11700
+#, c-format
+msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
+msgstr "%pB: index de symbole attendu dans la plage 0..%lu mais un symbole local avec l'index %lu a Ã©tÃ© rencontrÃ©"
+
 #: elf32-arm.c:11975 elf32-arm.c:12001
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %s '%#lx' inattendue rÃ©fÃ©rencÃ©e par TLS_GOTDESC"
 
-#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919
-#: elf32-nios2.c:4366
+#: elf32-arm.c:12047 elf32-csky.c:4959 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-nios2.c:4377
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
 msgstr "%pB(%pA+%#<PRIx64>): rÃ©adressage %s pas permis dans un objet partagÃ©"
@@ -1556,550 +1839,564 @@ msgstr "%pB(%pA+%#<PRIx64>): seuls ADD o
 msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
 msgstr "%pB(%pA+%#<PRIx64>): dÃ©bordement en scindant %#<PRIx64> pour le rÃ©adressage du groupe %s"
 
-#: elf32-arm.c:13078 elf32-sh.c:3689
+#: elf32-arm.c:12630 elf32-arm.c:12789
+msgid "local symbol index too big"
+msgstr "index de symbole local trop long"
+
+#: elf32-arm.c:12640 elf32-arm.c:12674
+msgid "no dynamic index information available"
+msgstr "pas d'information d'index dynamique disponible"
+
+#: elf32-arm.c:12682
+msgid "invalid dynamic index"
+msgstr "index dynamique invalide"
+
+#: elf32-arm.c:12799
+msgid "dynamic index information not available"
+msgstr "information d'index dynamique pas disponible"
+
+#: elf32-arm.c:13230 elf32-sh.c:3567
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
 msgstr "%pB(%pA+%#<PRIx64>): %s rÃ©adressage vers une section SEC_MERGE"
 
-#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6534
+#: elf32-arm.c:13343 elf32-m68k.c:3966 elf32-xtensa.c:2761 elfnn-aarch64.c:7049
+#: elfnn-kvx.c:2571
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
 msgstr "%pB(%pA+%#<PRIx64>): %s utilisÃ© avec le symbole TLS %s"
 
-#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6536
+#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2763 elfnn-aarch64.c:7051
+#: elfnn-kvx.c:2573
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
 msgstr "%pB(%pA+%#<PRIx64>): %s utilisÃ© avec le symbole non-TLS %s"
 
-#: elf32-arm.c:13276 elf32-tic6x.c:2708
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6871
+#: elf32-arm.c:13428 elf32-tic6x.c:2649 elfnn-aarch64.c:7386 elfnn-kvx.c:2800
 msgid "out of range"
 msgstr "hors limite"
 
-#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6875
+#: elf32-arm.c:13432 elf32-nios2.c:4511 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7390 elfnn-kvx.c:2804
 msgid "unsupported relocation"
 msgstr "rÃ©adressage non supportÃ©"
 
-#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6883
+#: elf32-arm.c:13440 elf32-nios2.c:4521 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7398 elfnn-kvx.c:2812
 msgid "unknown error"
 msgstr "erreur inconnue"
 
-#: elf32-arm.c:13764
+#: elf32-arm.c:13922
 #, c-format
 msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
 msgstr "attention: pas d'initialisation du fanion d'inter-rÃ©seautage de %pB puisqu'il a dÃ©jÃ  Ã©tÃ© spÃ©cifiÃ© sans inter-rÃ©seautage"
 
-#: elf32-arm.c:13768
+#: elf32-arm.c:13926
 #, c-format
 msgid "warning: clearing the interworking flag of %pB due to outside request"
 msgstr "attention: mise Ã  zÃ©ro du fanion d'inter-rÃ©seautage de %pB en raison d'une requÃªte externe"
 
-#: elf32-arm.c:13813
+#: elf32-arm.c:13971
 #, c-format
 msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
 msgstr "attention: mise Ã  zÃ©ro du fanion d'inter-rÃ©seautage %pB en raison du code sans inter-rÃ©seautage dans %pB liÃ© avec lui"
 
-#: elf32-arm.c:13900
+#: elf32-arm.c:14058
 #, c-format
 msgid "%pB: unknown mandatory EABI object attribute %d"
 msgstr "%pB: l'attribut d'objet EABI obligatoire %d est inconnu"
 
-#: elf32-arm.c:13908
+#: elf32-arm.c:14066
 #, c-format
 msgid "warning: %pB: unknown EABI object attribute %d"
 msgstr "attention: %pB: l'attribut d'objet EABI %d est inconnu"
 
-#: elf32-arm.c:14175
+#: elf32-arm.c:14401
 #, c-format
 msgid "error: %pB: unknown CPU architecture"
 msgstr "erreur: %pB: architecture CPU inconnue"
 
-#: elf32-arm.c:14213 elf32-nios2.c:2946
+#: elf32-arm.c:14439
 #, c-format
-msgid "error: %pB: conflicting CPU architectures %d/%d"
-msgstr "erreur: %pB: architectures CPU conflictuelles %d/%d"
+msgid "error: conflicting CPU architectures %s vs %s in %pB"
+msgstr "erreur: architectures CPU conflictuelles %s par rapport Ã  %s dans %pB"
 
-#: elf32-arm.c:14310
+#: elf32-arm.c:14536
 #, c-format
 msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr "Erreur: %pB utilise les deux attributs Tag_MPextension_use actuel et hÃ©ritÃ©"
 
-#: elf32-arm.c:14339
+#: elf32-arm.c:14573
 #, c-format
 msgid "error: %pB uses VFP register arguments, %pB does not"
 msgstr "erreur: %pB passe les paramÃ¨tres dans un registre VFP alors que %pB ne le fait pas"
 
-#: elf32-arm.c:14497
+#: elf32-arm.c:14743
 #, c-format
 msgid "error: %pB: unable to merge virtualization attributes with %pB"
 msgstr "erreur: %pB: impossible de fusionner les attributs de visualisation avec %pB"
 
-#: elf32-arm.c:14523
+#: elf32-arm.c:14769
 #, c-format
 msgid "error: %pB: conflicting architecture profiles %c/%c"
 msgstr "erreur: %pB: profils d'architecture conflictuels %c/%c"
 
-#: elf32-arm.c:14662
+#: elf32-arm.c:14908
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr "attention: %pB: configuration de plateforme conflictuelle"
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14917
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr "erreur: %pB: utilisation conflictuelle de R9"
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14929
 #, c-format
 msgid "error: %pB: SB relative addressing conflicts with use of R9"
 msgstr "erreur: %pB: adressage relatif SB entre en conflit avec l'utilisation de R9"
 
-#: elf32-arm.c:14696
+#: elf32-arm.c:14942
 #, c-format
 msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
 msgstr "attention: %pB utilise des wchar_t de %u octets alors que la sortie doit utiliser des wchar_t de %u octets. L'utilisation de wchar_t entre objets peu Ã©chouer"
 
-#: elf32-arm.c:14727
+#: elf32-arm.c:14973
 #, c-format
 msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
 msgstr "attention: %pB utilise des enums %s alors que la sortie doit utiliser des enums %s. L'utilisation des valeurs enum entre objets peu Ã©chouer"
 
-#: elf32-arm.c:14739
+#: elf32-arm.c:14985
 #, c-format
 msgid "error: %pB uses iWMMXt register arguments, %pB does not"
 msgstr "erreur: %pB passe les paramÃ¨tres dans le registre iWMMXt contrairement Ã  %pB"
 
-#: elf32-arm.c:14756
+#: elf32-arm.c:15002
 #, c-format
 msgid "error: fp16 format mismatch between %pB and %pB"
 msgstr "erreur: dÃ©saccord de format fp16 entre %pB et %pB"
 
-#: elf32-arm.c:14792
+#: elf32-arm.c:15038
 #, c-format
 msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr "%pB utilise les deux attributs Tag_MPextension_use actuel et hÃ©ritÃ©"
 
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410
-#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537
-#: elf32-xgate.c:494 elfxx-mips.c:16037
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7037
-#, c-format
-msgid "private flags = %lx:"
-msgstr "fanions privÃ©s = %lx"
-
-#: elf32-arm.c:14888
+#: elf32-arm.c:15134
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [inter-rÃ©seautage autorisÃ©]"
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15142
 #, c-format
 msgid " [VFP float format]"
 msgstr " [format flottant VFP]"
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15144
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [format flottant Maverick]"
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15146
 #, c-format
 msgid " [FPA float format]"
 msgstr " [format flottant FPA]"
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15149
 #, c-format
 msgid " [floats passed in float registers]"
 msgstr " [valeurs en virgule flottante passÃ©es dans des registres de valeurs en virgule flottante]"
 
-#: elf32-arm.c:14906 elf32-arm.c:14992
+#: elf32-arm.c:15152 elf32-arm.c:15238
 #, c-format
 msgid " [position independent]"
 msgstr " [position indÃ©pendante]"
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15155
 #, c-format
 msgid " [new ABI]"
 msgstr " [nouvel ABI]"
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15158
 #, c-format
 msgid " [old ABI]"
 msgstr " [ancien ABI]"
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15161
 #, c-format
 msgid " [software FP]"
 msgstr " [virgule flottante logiciel]"
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15170
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Version1 EABI]"
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15173 elf32-arm.c:15184
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [table des symboles triÃ©s]"
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15175 elf32-arm.c:15186
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [table des symboles non triÃ©s]"
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15181
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Version2 EABI]"
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15189
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [symboles dynamiques utilisent un index de segment]"
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15192
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [mapping de symboles prÃ©cÃ¨des les autres]"
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15199
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Version3 EABI]"
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15203
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Version4 EABI]"
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15207
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Version5 EABI]"
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15210
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [soft-float ABI]"
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15213
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [hard-float ABI]"
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15219
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15222
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15228
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <Version EABI non reconnue>"
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15235
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [exÃ©cutables relocalisÃ©s]"
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15241
 #, c-format
 msgid " [FDPIC ABI supplement]"
 msgstr " [supplÃ©ment ABI FDPIC]"
 
-#: elf32-arm.c:15000
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7040
+#: elf32-arm.c:15246 elfnn-aarch64.c:7555
 #, c-format
-msgid "<Unrecognised flag bits set>"
-msgstr "<Bits de fanions non reconnus>"
+msgid " <Unrecognised flag bits set>"
+msgstr " <Bits de fanions non reconnus>"
 
-#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783
-#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882
-#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7329
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:539
+#: elf32-arm.c:15363 elf32-arm.c:15497 elf32-i386.c:1535 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1090 elf64-s390.c:845
+#: elf64-x86-64.c:2050 elfxx-sparc.c:1386 elfxx-tilegx.c:1662 elfxx-x86.c:970
+#: elfnn-aarch64.c:7826 elfnn-kvx.c:3250 elfnn-loongarch.c:756
+#: elfnn-riscv.c:764
 #, c-format
 msgid "%pB: bad symbol index: %d"
 msgstr "%pB: symbole index erronÃ©: %d"
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15753
 #, c-format
 msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
 msgstr "FDPIC ne supporte pas encore le rÃ©adressage %s pour devenir dynamique Ã  l'exÃ©cution"
 
-#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998
-#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858
-#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252
-#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435
-#: elfxx-tilegx.c:2491 elfxx-x86.c:571
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:8677
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:1142
-#, c-format
-msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
-msgstr "%pB: rÃ©adressage dynamique sur Â«Â %pTÂ Â» dans la section en lecture seule Â«Â %pAÂ Â»\n"
-
-#: elf32-arm.c:16854
+#: elf32-arm.c:17027
 #, c-format
 msgid "errors encountered processing file %pB"
 msgstr "erreurs rencontrÃ©es pendant le traitement du fichier %pB"
 
-#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603
+#: elf32-arm.c:17400 elflink.c:13325 elflink.c:13372
 #, c-format
 msgid "could not find section %s"
 msgstr "ne peut repÃ©rer la section %s"
 
-#: elf32-arm.c:18512
+#: elf32-arm.c:18355
+#, c-format
+msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
+msgstr "%pB: Le nombre de symboles dans le fichier d'entrÃ©e a augmentÃ© de %lu Ã  %u\n"
+
+#: elf32-arm.c:18619
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
 msgstr "%pB: erreur: l'Ã©bauche d'erratum du Cortex A8 est allouÃ©e Ã  un emplacement peu sÃ»r"
 
 #. There's not much we can do apart from complain if this
 #. happens.
-#: elf32-arm.c:18539
+#: elf32-arm.c:18646
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
 msgstr "%pB: erreur: l'Ã©bauche d'erratum du Cortex A8 est hors limite (fichier d'entrÃ©e trop grand)"
 
-#: elf32-arm.c:19366 elf32-arm.c:19388
+#: elf32-arm.c:19473 elf32-arm.c:19495
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr "%pB: erreur: vernis VFP11 hors limite"
 
-#: elf32-arm.c:19439
+#: elf32-arm.c:19546
 #, c-format
 msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
 msgstr "%pB(%#<PRIx64>): erreur: impossible de crÃ©er le trampoline (veneer) du STM32L4XX; saut hors de portÃ©e pour %<PRId64> octets; impossible d'encoder l'instruction de branchement"
 
-#: elf32-arm.c:19478
+#: elf32-arm.c:19585
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr "%pB: erreur: impossible de crÃ©er le trampoline (veneer) du STM32L4XX."
 
-#: elf32-arm.c:20567
+#: elf32-arm.c:20668
 #, c-format
 msgid "error: %pB is already in final BE8 format"
 msgstr "erreur: %pB est dÃ©jÃ  au format final BE8"
 
-#: elf32-arm.c:20643
+#: elf32-arm.c:20745
 #, c-format
 msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
 msgstr "erreur: l'objet source %pB a l'EABI version %d alors que la cible %pB a l'EABI version %d"
 
-#: elf32-arm.c:20658
+#: elf32-arm.c:20760
 #, c-format
 msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
 msgstr "erreur: %pB compilÃ© pour APCS-%d alors que la cible %pB utilise APCS-%d"
 
-#: elf32-arm.c:20668
+#: elf32-arm.c:20770
 #, c-format
 msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
 msgstr "erreur: %pB passage de valeurs en virgule flottante dans les registres FP alors que %pB les passe dans les registres entiers"
 
-#: elf32-arm.c:20672
+#: elf32-arm.c:20774
 #, c-format
 msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
 msgstr "erreur: %pB passage de valeurs en virgule flottante dans les registres entiers alors que %pB les passe dans les registres FP"
 
-#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696
+#: elf32-arm.c:20784 elf32-arm.c:20788 elf32-arm.c:20798
 #, c-format
 msgid "error: %pB uses %s instructions, whereas %pB does not"
 msgstr "erreur: %pB utilise les instructions %s alors que %pB ne les utilise pas"
 
-#: elf32-arm.c:20700
+#: elf32-arm.c:20802
 #, c-format
 msgid "error: %pB does not use %s instructions, whereas %pB does"
 msgstr "erreur: %pB n'utilise pas les instructions %s alors que %pB les utilise"
 
-#: elf32-arm.c:20719
+#: elf32-arm.c:20821
 #, c-format
 msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
 msgstr "erreur: %pB utilise le logiciel pour virgule flottante alors que %pB utilise le matÃ©riel pour virgule flottante"
 
-#: elf32-arm.c:20723
+#: elf32-arm.c:20825
 #, c-format
 msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
 msgstr "erreur: %pB utilise le matÃ©riel pour virgule flottante alors que %pB utilise le logiciel pour virgule flottante"
 
-#: elf32-arm.c:20737
+#: elf32-arm.c:20839
 #, c-format
 msgid "warning: %pB supports interworking, whereas %pB does not"
 msgstr "attention: %pB supporte l'inter-rÃ©seautage, contrairement Ã  %pB"
 
-#: elf32-arm.c:20743
+#: elf32-arm.c:20845
 #, c-format
 msgid "warning: %pB does not support interworking, whereas %pB does"
 msgstr "attention: %pB ne supporte pas l'inter-rÃ©seautage, contrairement Ã  %pB"
 
-#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577
-#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493
-#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998
-#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767
-#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689
-#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878
-msgid "internal error: dangerous relocation"
-msgstr "erreur interne: rÃ©adressage dangereux"
+#: elf32-avr.c:1508
+msgid "%X%H: %s against `%s': error: relocation applies outside section\n"
+msgstr "%X%H: %s vers Â«Â %sÂ Â»: erreur: le rÃ©adressage s'applique en dehors de la section\n"
+
+#: elf32-avr.c:1516
+msgid "%X%H: %s against `%s': error: relocation target address is odd\n"
+msgstr "%X%H: %s vers Â«Â %sÂ Â»: erreur: l'adresse cible du rÃ©adressage est impaire\n"
+
+#: elf32-avr.c:1524
+msgid "%X%H: %s against `%s': internal error: unexpected relocation result %d\n"
+msgstr "%X%H: %s envers Â«Â %sÂ Â»Â : erreur interne: rÃ©sultat de rÃ©adressage %d inattendu\n"
 
-#: elf32-avr.c:3327
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126
+#: elf32-avr.c:3340 elfnn-aarch64.c:3234
 #, c-format
 msgid "cannot create stub entry %s"
 msgstr "ne peut crÃ©er l'entrÃ©e d'Ã©bauche %s"
 
-#: elf32-bfin.c:106 elf32-bfin.c:362
+#: elf32-bfin.c:107 elf32-bfin.c:364
 msgid "relocation should be even number"
 msgstr "le rÃ©adressage devrait Ãªtre un nombre paire"
 
-#: elf32-bfin.c:1585
+#: elf32-bfin.c:1589
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
 msgstr "%pB(%pA+%#<PRIx64>): rÃ©adressage sans solution vers le symbole Â«Â %sÂ Â»"
 
-#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269
-#: elf64-s390.c:3219 elf64-x86-64.c:3896
+#: elf32-bfin.c:1621 elf32-i386.c:3534 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3118 elf64-x86-64.c:4424
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
 msgstr "%pB(%pA+%#<PRIx64>): rÃ©adressage sur Â«Â %sÂ Â»: erreur %d"
 
-#: elf32-bfin.c:2638
+#: elf32-bfin.c:2647
 #, c-format
 msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
 msgstr "%pB: rÃ©adressage Ã  Â«Â %pA+%#<PRIx64>Â Â» fait rÃ©fÃ©rence au symbole Â«Â %sÂ Â» avec un opÃ©rande non nul"
 
-#: elf32-bfin.c:2655
+#: elf32-bfin.c:2664
 msgid "relocation references symbol not defined in the module"
 msgstr "le rÃ©adressage fait rÃ©fÃ©rence Ã  un symbole non dÃ©fini dans le module"
 
-#: elf32-bfin.c:2752
+#: elf32-bfin.c:2762
 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC fait rÃ©fÃ©rence Ã  un symbole dynamique avec un opÃ©rande non nul"
 
-#: elf32-bfin.c:2793 elf32-bfin.c:2916
+#: elf32-bfin.c:2802 elf32-bfin.c:2923
 msgid "cannot emit fixups in read-only section"
 msgstr "impossible d'apporter des corrections dans une section en lecture seule"
 
-#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511
+#: elf32-bfin.c:2832 elf32-bfin.c:2960 elf32-lm32.c:1007 elf32-sh.c:4385
 msgid "cannot emit dynamic relocations in read-only section"
 msgstr "impossible d'Ã©diter les rÃ©adressages dynamiques dans une section en lecture seule"
 
-#: elf32-bfin.c:2874
+#: elf32-bfin.c:2882
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC_VALUE fait rÃ©fÃ©rence Ã  un symbole dynamique avec un opÃ©rande non nul"
 
-#: elf32-bfin.c:3039
+#: elf32-bfin.c:3045
 msgid "relocations between different segments are not supported"
 msgstr "les rÃ©adressages entre segments diffÃ©rents ne sont pas supportÃ©s"
 
-#: elf32-bfin.c:3040
+#: elf32-bfin.c:3046
 msgid "warning: relocation references a different segment"
 msgstr "attention: rÃ©adressage fait rÃ©fÃ©rence Ã  un segment diffÃ©rent"
 
-#: elf32-bfin.c:4787 elf32-frv.c:6603
+#: elf32-bfin.c:3141 elf32-cris.c:2042 elf32-epiphany.c:574 elf32-fr30.c:602
+#: elf32-frv.c:4057 elf32-ft32.c:500 elf32-ip2k.c:1489 elf32-iq2000.c:699
+#: elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992 elf32-moxie.c:296
+#: elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1905 elf32-tilepro.c:3380
+#: elf32-v850.c:2302 elf32-visium.c:688 elf32-xstormy16.c:938 elf64-bpf.c:348
+#: elf64-mmix.c:1549 elfxx-tilegx.c:3750
+msgid "internal error: dangerous relocation"
+msgstr "erreur interne: rÃ©adressage dangereux"
+
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-bfin.c:4728 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16378
+#, c-format
+msgid "private flags = %lx:"
+msgstr "fanions privÃ©s = %lx"
+
+#: elf32-bfin.c:4779 elf32-frv.c:6585
 #, c-format
 msgid "%pB: cannot link non-fdpic object file into fdpic executable"
 msgstr "%pB: ne peut lier un fichier objet non fdpic dans un exÃ©cutable fdpic"
 
-#: elf32-bfin.c:4791 elf32-frv.c:6607
+#: elf32-bfin.c:4783 elf32-frv.c:6589
 #, c-format
 msgid "%pB: cannot link fdpic object file into non-fdpic executable"
 msgstr "%pB: ne peut lier un fichier objet fdpic dans un exÃ©cutable non fdpic"
 
-#: elf32-bfin.c:4941
+#: elf32-bfin.c:4920
 #, c-format
 msgid "*** check this relocation %s"
 msgstr "*** vÃ©rifiez ce rÃ©adressage %s"
 
-#: elf32-bfin.c:5057
+#: elf32-bfin.c:5035
 msgid "the bfin target does not currently support the generation of copy relocations"
 msgstr "la cible bfin ne supporte actuellement pas la gÃ©nÃ©ration de rÃ©adressages copiÃ©s"
 
-#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390
+#: elf32-bfin.c:5329 elf32-cr16.c:2720 elf32-m68k.c:4420
 msgid "unsupported relocation type"
 msgstr "type de rÃ©adressage non supportÃ©"
 
-#: elf32-cris.c:1119
+#: elf32-cris.c:1120
 #, c-format
 msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'"
 msgstr "%pB, section %pA: rÃ©adressage %s non rÃ©solu sur le symbole Â«Â %sÂ Â»"
 
-#: elf32-cris.c:1184
+#: elf32-cris.c:1185
 #, c-format
 msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'"
 msgstr "%pB, section %pA: Pas de PLT ni de GOT pour rÃ©adresser %s sur le symbole Â«Â %sÂ Â»"
 
-#: elf32-cris.c:1187
+#: elf32-cris.c:1188
 #, c-format
 msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'"
 msgstr "%pB, section %pA: pas de PLT pour rÃ©adresser %s sur le symbole Â«Â %sÂ Â»"
 
-#: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674
-#: elf32-cris.c:1827 elf32-tic6x.c:2619
+#: elf32-cris.c:1194 elf32-cris.c:1327 elf32-cris.c:1592 elf32-cris.c:1675
+#: elf32-cris.c:1828 elf32-tic6x.c:2560
 msgid "[whose name is lost]"
 msgstr "[dont le nom est perdu]"
 
-#: elf32-cris.c:1311 elf32-tic6x.c:2603
+#: elf32-cris.c:1312 elf32-tic6x.c:2544
 #, c-format
 msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against local symbol"
 msgstr "%pB, section %pA: rÃ©adressage de %s avec un opÃ©rande non nul %<PRId64> sur le symbole local"
 
-#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612
+#: elf32-cris.c:1321 elf32-cris.c:1669 elf32-cris.c:1822 elf32-tic6x.c:2553
 #, c-format
 msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against symbol `%s'"
 msgstr "%pB, section %pA: rÃ©adressage de %s avec un opÃ©rande non nul %<PRId64> sur le symbole Â«Â %sÂ Â»"
 
-#: elf32-cris.c:1347
+#: elf32-cris.c:1348
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'"
 msgstr "%pB, section %pA: le rÃ©adressage de %s n'est pas permis pour le symbole global: Â«Â %sÂ Â»"
 
-#: elf32-cris.c:1364
+#: elf32-cris.c:1365
 #, c-format
 msgid "%pB, section %pA: relocation %s with no GOT created"
 msgstr "%pB, section %pA: rÃ©adressage de %s sans GOT"
 
 #. We shouldn't get here for GCC-emitted code.
-#: elf32-cris.c:1581
+#: elf32-cris.c:1582
 #, c-format
 msgid "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
 msgstr "%pB, section %pA: rÃ©adressage de %s a une rÃ©fÃ©rence non dÃ©finie vers Â«Â %sÂ Â», peut-Ãªtre un mÃ©lange dans les dÃ©clarationsÂ ?"
 
-#: elf32-cris.c:1584
+#: elf32-cris.c:1585
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?"
 msgstr "%pB, section %pA: rÃ©adressage de %s n'est pas permis pour Â«Â %sÂ Â», un symbole global avec la visibilitÃ© par dÃ©faut, peut-Ãªtre un mÃ©lange dans les dÃ©clarationsÂ ?"
 
-#: elf32-cris.c:1955
+#: elf32-cris.c:1956
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
 msgstr "%pB, section %pA: rÃ©adressage de %s n'est pas permis pour le symbole Â«Â %sÂ Â» qui est dÃ©fini en dehors du programme, peut-Ãªtre un mÃ©lange dans les dÃ©clarationsÂ ?"
 
-#: elf32-cris.c:2008
+#: elf32-cris.c:2009
 msgid "(too many global variables for -fpic: recompile with -fPIC)"
 msgstr "(trop de variables globales pour -fpic: recompilez avec -fPIC)"
 
-#: elf32-cris.c:2015
+#: elf32-cris.c:2016
 msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)"
 msgstr "(donnÃ©e locale au thread trop grande pour -fpic or -msmall-tls: recompilez avec -fPIC ou -mno-small-tls)"
 
-#: elf32-cris.c:3050
+#: elf32-cris.c:3051
 #, c-format
 msgid "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation"
 msgstr "%pB, section %pA: l'objet compatible v10/v32 ne peut pas contenir de rÃ©adressage PIC"
 
-#: elf32-cris.c:3104
+#: elf32-cris.c:3105
 #, c-format
 msgid ""
 "%pB, section %pA:\n"
@@ -2108,76 +2405,101 @@ msgstr ""
 "%pB, section %pA:\n"
 "  rÃ©adressage de %s pas valable dans un objet partagÃ©; typiquement un mÃ©lange dans les options. Recompilez avec -fPIC"
 
-#: elf32-cris.c:3322
+#: elf32-cris.c:3323
 #, c-format
 msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC"
 msgstr "%pB, section %pA: rÃ©adressage de %s ne devrait pas Ãªtre utilisÃ© dans un objet partagÃ©; recompilez avec -fPIC"
 
-#: elf32-cris.c:3747
+#: elf32-cris.c:3701
 #, c-format
 msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC"
 msgstr "%pB, section Â«Â %pAÂ Â», vers le symbole Â«Â %sÂ Â»: rÃ©adressage de %s ne devrait pas Ãªtre utilisÃ© dans un objet partagÃ©; recompilez avec -fPIC"
 
-#: elf32-cris.c:3860
+#: elf32-cris.c:3813
 msgid "unexpected machine number"
 msgstr "numÃ©ro de machine inattendu"
 
-#: elf32-cris.c:3911
+#: elf32-cris.c:3865
 #, c-format
 msgid " [symbols have a _ prefix]"
 msgstr " [symboles sont prÃ©fixÃ©s par Â«Â  _ Â Â»]"
 
-#: elf32-cris.c:3914
+#: elf32-cris.c:3868
 #, c-format
 msgid " [v10 and v32]"
 msgstr " [v10 et v32]"
 
-#: elf32-cris.c:3917
+#: elf32-cris.c:3871
 #, c-format
 msgid " [v32]"
 msgstr " [v32]"
 
-#: elf32-cris.c:3961
+#: elf32-cris.c:3915
 #, c-format
 msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
 msgstr "%pB: utilise des symboles prÃ©fixÃ©s par _ mais Ã©crits les symboles sans prÃ©fixes dans le fichier"
 
-#: elf32-cris.c:3962
+#: elf32-cris.c:3916
 #, c-format
 msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
 msgstr "%pB: utilise des symboles sans prÃ©fixe mais ajoute le prÃ©fixe _ aux symboles dans le fichier"
 
-#: elf32-cris.c:3981
+#: elf32-cris.c:3935
 #, c-format
 msgid "%pB contains CRIS v32 code, incompatible with previous objects"
 msgstr "%pB contient du code CRIS v32 incompatible avec les objets prÃ©cÃ©dents"
 
-#: elf32-cris.c:3983
+#: elf32-cris.c:3937
 #, c-format
 msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
 msgstr "%pB contient du code non CRIS v32 incompatible avec les objets prÃ©cÃ©dents"
 
-#: elf32-csky.c:2066
+#: elf32-csky.c:2018
 msgid "GOT table size out of range"
 msgstr "taille de la table GOT hors limites"
 
-#: elf32-csky.c:2917
+#: elf32-csky.c:2830
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
 msgstr "avertissement: eflag arch Â«Â %#lxÂ Â» non reconnu"
 
-#: elf32-csky.c:2977
+#: elf32-csky.c:2853
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "avertissement: nom d'architecture Â«Â %#xÂ Â» non reconnu"
+
+#: elf32-csky.c:2918 elf32-csky.c:3078
 #, c-format
 msgid "%pB: machine flag conflict with target"
 msgstr "%pB: fanion machine en conflit avec la cible"
 
-#: elf32-csky.c:2990
+#: elf32-csky.c:2931
+#, c-format
+msgid "warning: file %pB's arch flag %s conflict with target %s,set target arch flag to %s"
+msgstr "avertissement: le fanion d'archive %2$s du fichier %1$pB est en conflit avec la cible %3$s, dÃ©finissez le fanion d'archive cible Ã  %4$s"
+
+#: elf32-csky.c:2960
+#, c-format
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr "Erreur: %pB et %pB ont des versions VDSP diffÃ©rentes"
+
+#: elf32-csky.c:2977
+#, c-format
+msgid "Error: %pB and %pB has different DSP version"
+msgstr "Erreur: %pB et %pB ont des versions DSP diffÃ©rentes"
+
+#: elf32-csky.c:2995
+#, c-format
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr "Erreur: %pB et %pB ont des ABI FPU diffÃ©rentes"
+
+#: elf32-csky.c:3092
 #, c-format
-msgid "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s"
-msgstr "avertissement: le fanion d'archive ck%2$s du fichier %1$pB est en conflit avec la cible ck%3$s, utilise ck%4$s"
+msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
+msgstr "avertissement: le fanion d'archive %2$s du fichier %1$pB est en conflit avec la cible ck%3$s, utilise %4$s"
 
 #. The r_type is error, not support it.
-#: elf32-csky.c:4225 elf32-i386.c:351
+#: elf32-csky.c:4331 elf32-i386.c:344
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr "%pB: type de rÃ©adressage non supportÃ©: %#x"
@@ -2193,80 +2515,80 @@ msgid "jump (PC rel26) to section (%s) n
 msgstr "saut (PC rel26) Ã  la section (%s) n'est pas supportÃ©"
 
 #. Only if it's not an unresolved symbol.
-#: elf32-epiphany.c:573 elf32-ip2k.c:1489
+#: elf32-epiphany.c:570 elf32-ip2k.c:1485
 msgid "unsupported relocation between data/insn address spaces"
 msgstr "rÃ©adressage non supportÃ© entre les espaces d'adresses data/insn"
 
-#: elf32-frv.c:1452 elf32-frv.c:1603
+#: elf32-frv.c:1453 elf32-frv.c:1604
 msgid "relocation requires zero addend"
 msgstr "le rÃ©adressage exige un opÃ©rande nul"
 
-#: elf32-frv.c:2829
+#: elf32-frv.c:2833
 #, c-format
 msgid "%H: relocation to `%s+%v' may have caused the error above\n"
 msgstr "%H: le rÃ©adressage en Â«Â %s+%vÂ Â» peut avoir causÃ© le problÃ¨me ci-dessus\n"
 
-#: elf32-frv.c:2846
+#: elf32-frv.c:2850
 msgid "%H: relocation references symbol not defined in the module\n"
 msgstr "%H: le rÃ©adressage fait rÃ©fÃ©rence Ã  un symbole non dÃ©fini dans le module\n"
 
-#: elf32-frv.c:2922
+#: elf32-frv.c:2926
 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
 msgstr "%H: R_FRV_GETTLSOFF pas appliquÃ© Ã  une instruction d'appel\n"
 
-#: elf32-frv.c:2963
+#: elf32-frv.c:2967
 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESC12 pas appliquÃ© Ã  une instruction lddi\n"
 
-#: elf32-frv.c:3034
+#: elf32-frv.c:3038
 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESCHI pas appliquÃ© Ã  une instruction sethi\n"
 
-#: elf32-frv.c:3071
+#: elf32-frv.c:3075
 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESCLO pas appliquÃ© Ã  une instruction setlo ou setlos\n"
 
-#: elf32-frv.c:3118
+#: elf32-frv.c:3122
 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
 msgstr "%H: R_FRV_TLSDESC_RELAX pas appliquÃ© Ã  une instruction ldd\n"
 
-#: elf32-frv.c:3202
+#: elf32-frv.c:3206
 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
 msgstr "%H: R_FRV_GETTLSOFF_RELAX pas appliquÃ© Ã  une instruction calll\n"
 
-#: elf32-frv.c:3256
+#: elf32-frv.c:3260
 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFF12 pas appliquÃ© Ã  une instruction ldi\n"
 
-#: elf32-frv.c:3286
+#: elf32-frv.c:3290
 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFFHI pas appliquÃ© Ã  une instruction sethi\n"
 
-#: elf32-frv.c:3315
+#: elf32-frv.c:3319
 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFFLO pas appliquÃ© Ã  une instruction setlo ou setlos\n"
 
-#: elf32-frv.c:3345
+#: elf32-frv.c:3349
 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
 msgstr "%H: R_FRV_TLSOFF_RELAX pas appliquÃ© Ã  une instruction ld\n"
 
-#: elf32-frv.c:3390
+#: elf32-frv.c:3394
 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_TLSMOFFHI pas appliquÃ© Ã  une instruction sethi\n"
 
-#: elf32-frv.c:3417
+#: elf32-frv.c:3421
 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "R_FRV_TLSMOFFLO pas appliquÃ© Ã  une instruction setlo ou setlos\n"
 
-#: elf32-frv.c:3538 elf32-frv.c:3660
+#: elf32-frv.c:3542 elf32-frv.c:3662
 msgid "%H: %s references dynamic symbol with nonzero addend\n"
 msgstr "%H: %s fait rÃ©fÃ©rence Ã  un symbole dynamique avec un opÃ©rande non nul\n"
 
-#: elf32-frv.c:3580 elf32-frv.c:3703
+#: elf32-frv.c:3583 elf32-frv.c:3704
 msgid "%H: cannot emit fixups in read-only section\n"
 msgstr "%H: impossible d'apporter des corrections dans une section en lecture seule\n"
 
-#: elf32-frv.c:3611 elf32-frv.c:3746
+#: elf32-frv.c:3613 elf32-frv.c:3746
 msgid "%H: cannot emit dynamic relocations in read-only section\n"
 msgstr "%H: impossible d'Ã©diter les rÃ©adressages dynamiques dans une section en lecture seule\n"
 
@@ -2280,17 +2602,17 @@ msgstr "%H: le rÃ©adressage sur Â«Â %sÂ 
 msgid "%H: reloc against `%s': %s\n"
 msgstr "%H: rÃ©adressage sur Â«Â %sÂ Â»: %s\n"
 
-#: elf32-frv.c:6514
+#: elf32-frv.c:6496
 #, c-format
 msgid "%pB: compiled with %s and linked with modules that use non-pic relocations"
 msgstr "%pB: compilÃ© avec %s et liÃ© avec les modules qui utilisent le rÃ©adressage non PIC"
 
-#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876
+#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
 #, c-format
 msgid "%pB: compiled with %s and linked with modules compiled with %s"
 msgstr "%pB: compilÃ© avec %s et liÃ© avec les modules compilÃ©s avec %s"
 
-#: elf32-frv.c:6581
+#: elf32-frv.c:6563
 #, c-format
 msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: utilise diffÃ©rents champs e_flags (%#x) de ceux des modules prÃ©cÃ©dents (%#x)"
@@ -2300,277 +2622,291 @@ msgstr "%pB: utilise diffÃ©rents champs
 msgid "%pB: relocations in generic ELF (EM: %d)"
 msgstr "%pB: rÃ©adressages en format ELF gÃ©nÃ©rique (EM: %d)"
 
-#: elf32-hppa.c:834 elf32-hppa.c:3511
+#: elf32-hppa.c:863 elf32-hppa.c:3403
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
 msgstr "%pB(%pA+%#<PRIx64>): ne peut atteindre %s, recompilez avec -ffunction-sections"
 
-#: elf32-hppa.c:1248
+#: elf32-hppa.c:1241
 #, c-format
 msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: rÃ©adressage de %s ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC"
 
-#: elf32-hppa.c:2688
+#: elf32-hppa.c:2580
 #, c-format
 msgid "%pB: duplicate export stub %s"
 msgstr "%pB: Ã©bauche d'exportation en double %s"
 
-#: elf32-hppa.c:3344
+#: elf32-hppa.c:3236
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s fixup for insn %#x is not supported in a non-shared link"
 msgstr "%pB(%pA+%#<PRIx64>): correction %s pour insn %#x n'est pas supportÃ© dans un lien non partagÃ©"
 
-#: elf32-hppa.c:4140
+#: elf32-hppa.c:4032
 #, c-format
 msgid "%s has both normal and TLS relocs"
 msgstr "%s a, Ã  la fois, des rÃ©adressages normaux et TLS"
 
-#: elf32-hppa.c:4158
+#: elf32-hppa.c:4050
 #, c-format
 msgid "%pB:%s has both normal and TLS relocs"
 msgstr "%pB:%s a, Ã  la fois, des rÃ©adressages normaux et TLS"
 
-#: elf32-hppa.c:4217
+#: elf32-hppa.c:4109
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
 msgstr "%pB(%pA+%#<PRIx64>): ne sait pas traiter %s pour %s"
 
-#: elf32-hppa.c:4521
+#: elf32-hppa.c:4415
 msgid ".got section not immediately after .plt section"
 msgstr "section .got pas immÃ©diatement aprÃ¨s la section .plt"
 
-#: elf32-i386.c:1178 elf64-x86-64.c:1377
+#: elf32-i386.c:1177 elf64-x86-64.c:1506
 #, c-format
 msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
 msgstr "%pB: Ã‰chec de la transition TLS de %s vers %s sur Â«Â %sÂ Â» Ã  %#<PRIx64> dans la section Â«Â %pAÂ Â»"
 
-#: elf32-i386.c:1269
+#: elf32-i386.c:1286
 #, c-format
 msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
 msgstr "%pB: le rÃ©adressage GOT direct R_386_GOT32X sur le symbole Â«Â %sÂ Â» sans registre de base ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©"
 
-#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592
-#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591
-#: elfxx-tilegx.c:1805
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:451
+#: elf32-i386.c:1719 elf32-s390.c:1151 elf32-sh.c:5499 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1263 elf64-s390.c:1083 elfxx-sparc.c:1556 elfxx-tilegx.c:1767
+#: elfnn-loongarch.c:612 elfnn-riscv.c:671
 #, c-format
 msgid "%pB: `%s' accessed both as normal and thread local symbol"
 msgstr "%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole normal et comme symbole locale au thread"
 
-#: elf32-i386.c:1798
+#: elf32-i386.c:1791
 #, c-format
 msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
 msgstr "%pB: appel non-PIC non supportÃ© vers IFUNC Â«Â %sÂ Â»"
 
-#: elf32-i386.c:2379 elf64-x86-64.c:2670
+#: elf32-i386.c:1846 elf64-x86-64.c:2436
+#, c-format
+msgid "%pB: non-canonical reference to canonical protected function `%s' in %pB"
+msgstr "%pB: rÃ©fÃ©rence non canonique Ã  la fonction protÃ©gÃ©e canonique Â«Â %sÂ Â» dans %pB"
+
+#: elf32-i386.c:2410 elf64-x86-64.c:2900 elfnn-riscv.c:2455
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
 msgstr "%pB: le rÃ©adressage %s sur le symbole STT_GNU_IFUNC Â«Â %sÂ Â» n'est pas supportÃ©"
 
-#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727
-#: elf64-x86-64.c:4069 elf64-x86-64.c:4225
+#: elf32-i386.c:2443 elf32-i386.c:3745 elf32-i386.c:3893 elf64-x86-64.c:2957
+#: elf64-x86-64.c:4597 elf64-x86-64.c:4765 elfnn-riscv.c:2328
+#: elfnn-riscv.c:3184 elfnn-riscv.c:3258
 #, c-format
 msgid "Local IFUNC function `%s' in %pB\n"
 msgstr "Fonction IFUNC locale Â«Â %sÂ Â» dans %pB\n"
 
-#: elf32-i386.c:2569
+#: elf32-i386.c:2621
 #, c-format
 msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
 msgstr "%pB: le rÃ©adressage GOT direct %s vers Â«Â %sÂ Â» sans registre de base ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©"
 
-#: elf32-i386.c:2604 elf64-x86-64.c:2919
+#: elf32-i386.c:2656 elf64-x86-64.c:3174
 msgid "hidden symbol"
 msgstr "symbole cachÃ©"
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2659 elf64-x86-64.c:3177
 msgid "internal symbol"
 msgstr "symbole interne"
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2662 elf64-x86-64.c:3180
 msgid "protected symbol"
 msgstr "symbole protÃ©gÃ©"
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2665 elf64-x86-64.c:3183
 msgid "symbol"
 msgstr "symbole"
 
-#: elf32-i386.c:2619
+#: elf32-i386.c:2671
 #, c-format
 msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
 msgstr "%pB: rÃ©adressage R_386_GOTOFF sur le symbole %s Â«Â %sÂ Â» non dÃ©fini ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©"
 
 # Â«Â la %s progÃ©tÃ©eÂ Â» a un %s qui est remplacÃ© par le texte non traduit Â«Â functionÂ Â» ou Â«Â dataÂ Â».
 # Heureusement, cette ligne n'existe plus dans le code source actuel, pas besoin de signaler un bug.
-#: elf32-i386.c:2632
+#: elf32-i386.c:2684
 #, c-format
 msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
 msgstr "%pB: rÃ©adressage R_386_GOTOFF vers la %s protÃ©gÃ©e Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©"
 
-#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935
+#: elf32-i386.c:4096 elf64-x86-64.c:4976
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr "%F%P: section de sortie rejetÃ©e: Â«Â %pAÂ Â»\n"
+
+#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
 msgid "ip2k relaxer: switch table without complete matching relocation information."
 msgstr "relÃ¢che ip2k: table de commutation sans concordance complÃ¨te des informations de rÃ©adressage"
 
-#: elf32-ip2k.c:879 elf32-ip2k.c:962
+#: elf32-ip2k.c:878 elf32-ip2k.c:961
 msgid "ip2k relaxer: switch table header corrupt."
 msgstr "relÃ¢che ip2k: en-tÃªte de table de commutation corrompue"
 
-#: elf32-ip2k.c:1302
+#: elf32-ip2k.c:1298
 #, c-format
 msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "Ã©diteur de liens ip2k: instruction de page manquante Ã  %#<PRIx64> (cible = %#<PRIx64>)"
 
-#: elf32-ip2k.c:1321
+#: elf32-ip2k.c:1317
 #, c-format
 msgid "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "Ã©diteur de liens ip2k: instruction de page redondante Ã  %#<PRIx64> (cible = %#<PRIx64>)."
 
-#: elf32-lm32.c:651 elf32-nios2.c:3141
+#: elf32-lm32.c:609 elf32-nios2.c:3145
 msgid "global pointer relative relocation when _gp not defined"
 msgstr "rÃ©adressage relatif au pointeur global sans que _gp ne soit dÃ©fini"
 
-#: elf32-lm32.c:706 elf32-nios2.c:3578
+#: elf32-lm32.c:664 elf32-nios2.c:3582
 msgid "global pointer relative address out of range"
 msgstr "adresse relative du pointeur global hors limites"
 
-#: elf32-lm32.c:1002
+#: elf32-lm32.c:960
 #, c-format
 msgid "internal error: addend should be zero for %s"
 msgstr "erreur interne: opÃ©rande devrait Ãªtre zÃ©ro pour %s"
 
-#: elf32-m32r.c:1471
+#: elf32-m32r.c:1461
 msgid "SDA relocation when _SDA_BASE_ not defined"
 msgstr "rÃ©adressage SDA alors que _SDA_BASE_ n'est pas dÃ©fini"
 
-#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149
+#: elf32-m32r.c:2776 elf32-microblaze.c:1152 elf32-microblaze.c:1200
 #, c-format
 msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)"
 msgstr "%pB: la cible (%s) du rÃ©adressage %s est dans la mauvaise section (%pA)"
 
-#: elf32-m32r.c:3487
+#: elf32-m32r.c:3279
 #, c-format
 msgid "%pB: instruction set mismatch with previous modules"
 msgstr "%pB: jeu d'instructions ne concorde par avec les modules prÃ©cÃ©dents"
 
-#: elf32-m32r.c:3508 elf32-nds32.c:6992
+#: elf32-m32r.c:3300 elf32-nds32.c:6900
 #, c-format
 msgid "private flags = %lx"
 msgstr "fanions privÃ©s = %lx"
 
-#: elf32-m32r.c:3513
+#: elf32-m32r.c:3305
 #, c-format
 msgid ": m32r instructions"
 msgstr ": instructions m32r"
 
-#: elf32-m32r.c:3514
+#: elf32-m32r.c:3306
 #, c-format
 msgid ": m32rx instructions"
 msgstr ": instruction m32rx"
 
-#: elf32-m32r.c:3515
+#: elf32-m32r.c:3307
 #, c-format
 msgid ": m32r2 instructions"
 msgstr ": instructions m32r2"
 
-#: elf32-m68hc1x.c:1116
+#: elf32-m68hc1x.c:1135
 #, c-format
 msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
 msgstr "rÃ©fÃ©rence Ã  un symbole far Â«Â %sÂ Â» utilisant le mauvais rÃ©adressage peut provoquer une exÃ©cution incorrecte"
 
-#: elf32-m68hc1x.c:1150
+#: elf32-m68hc1x.c:1166
 #, c-format
 msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code."
 msgstr "l'adresse XGATE (%lx) n'est pas dans la mÃ©moire RAM partagÃ©e (0xE000-0xFFFF), par consÃ©quent, vous devez dÃ©caler l'adresse manuellement, et peut-Ãªtre gÃ©rer la page, dans votre code."
 
-#: elf32-m68hc1x.c:1168
+#: elf32-m68hc1x.c:1182
 #, c-format
 msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)"
 msgstr "banque d'adresses [%lx:%04lx] (%lx) n'es pas dans la mÃªme banque que la banque courante d'adresses [%lx:%04lx] (%lx)"
 
-#: elf32-m68hc1x.c:1184
+#: elf32-m68hc1x.c:1197
 #, c-format
 msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx"
 msgstr "rÃ©fÃ©rence Ã  une banque d'adresses [%lx:%04lx] dans l'espace normal d'adresses Ã  %04lx"
 
-#: elf32-m68hc1x.c:1225
+#: elf32-m68hc1x.c:1233
 #, c-format
 msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code"
 msgstr "l'adresse S12 (%lx) n'est pas dans la mÃ©moire RAM partagÃ©e (0x2000-0x4000), par consÃ©quent, vous devez dÃ©caler l'adresse manuellement dans votre code"
 
-#: elf32-m68hc1x.c:1352
+#: elf32-m68hc1x.c:1357
 #, c-format
 msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
 msgstr "%pB: fichiers liÃ©s compilÃ©s pour des entiers de 16 bits (-mshort) et d'autres pour des entiers de 32 bits"
 
-#: elf32-m68hc1x.c:1359
+#: elf32-m68hc1x.c:1364
 #, c-format
 msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
 msgstr "%pB: fichiers liÃ©s compilÃ©s pour des doubles de 32 bits (-fshort-double) et d'autres pour des doubles de 64 bits"
 
-#: elf32-m68hc1x.c:1368
+#: elf32-m68hc1x.c:1373
 #, c-format
 msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
 msgstr "%pB: certains fichiers liÃ©s compilÃ©s pour HCS12 avec d'autres compilÃ©s pour HC12"
 
-#: elf32-m68hc1x.c:1413 elf32-xgate.c:497
+#: elf32-m68hc1x.c:1418 elf32-xgate.c:497
 #, c-format
 msgid "[abi=32-bit int, "
 msgstr "[abi=32-bit int, "
 
-#: elf32-m68hc1x.c:1415 elf32-xgate.c:499
+#: elf32-m68hc1x.c:1420 elf32-xgate.c:499
 #, c-format
 msgid "[abi=16-bit int, "
 msgstr "[abi=16-bit int, "
 
-#: elf32-m68hc1x.c:1418 elf32-xgate.c:502
+#: elf32-m68hc1x.c:1423 elf32-xgate.c:502
 #, c-format
 msgid "64-bit double, "
 msgstr "double de 64 bits, "
 
-#: elf32-m68hc1x.c:1420 elf32-xgate.c:504
+#: elf32-m68hc1x.c:1425 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "double de 32 bits, "
 
-#: elf32-m68hc1x.c:1423
+#: elf32-m68hc1x.c:1428
 #, c-format
 msgid "cpu=HC11]"
 msgstr "cpu=HC11]"
 
-#: elf32-m68hc1x.c:1425
+#: elf32-m68hc1x.c:1430
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "cpu=HCS12]"
 
-#: elf32-m68hc1x.c:1427
+#: elf32-m68hc1x.c:1432
 #, c-format
 msgid "cpu=HC12]"
 msgstr "cpu=HC12]"
 
-#: elf32-m68hc1x.c:1430
+#: elf32-m68hc1x.c:1435
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [memory=bank-model]"
 
-#: elf32-m68hc1x.c:1432
+#: elf32-m68hc1x.c:1437
 #, c-format
 msgid " [memory=flat]"
 msgstr " [memory=flat]"
 
-#: elf32-m68hc1x.c:1435
+#: elf32-m68hc1x.c:1440
 #, c-format
 msgid " [XGATE RAM offsetting]"
 msgstr " [dÃ©calage RAM XGATE]"
 
-#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3572 elf32-ppc.c:3580
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr "%pB utilise la virgule flottante matÃ©rielle, %pB utilise la virgule flottante logicielle"
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:8085 vms-alpha.c:8101
 msgid "unknown"
 msgstr "inconnu"
 
-#: elf32-m68k.c:1660
+#: elf32-m68k.c:1731
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d"
 msgstr "%pB: dÃ©bordement GOT: nombre de rÃ©adressages avec des offsets de 8 bits > %d"
 
-#: elf32-m68k.c:1667
+#: elf32-m68k.c:1738
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
 msgstr "%pB: dÃ©bordement GOT: nombre de rÃ©adressages avec des offsets de 8 ou 16 bits > %d"
@@ -2586,350 +2922,350 @@ msgstr "mep: pas de rÃ©adressage pour le
 msgid "MeP: howto %d has type %d"
 msgstr "MeP: le howto %d a le type %d"
 
-#: elf32-mep.c:622
+#: elf32-mep.c:618
 #, c-format
 msgid "%pB and %pB are for different cores"
 msgstr "%pB et %pB sont pour des noyaux diffÃ©rents"
 
-#: elf32-mep.c:641
+#: elf32-mep.c:637
 #, c-format
 msgid "%pB and %pB are for different configurations"
 msgstr "%pB et %pB sont pour des configurations diffÃ©rentes"
 
-#: elf32-mep.c:679
+#: elf32-mep.c:675
 #, c-format
 msgid "private flags = 0x%lx"
 msgstr "fanions privÃ©s = 0x%lx"
 
-#: elf32-metag.c:1863
+#: elf32-metag.c:1857
 #, c-format
 msgid "%pB(%pA): multiple TLS models are not supported"
 msgstr "%pB(%pA): l'utilisation de plusieurs modÃ¨les TLS n'est pas supportÃ©"
 
-#: elf32-metag.c:1866
+#: elf32-metag.c:1860
 #, c-format
 msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link"
 msgstr "%pB(%pA): symbole de bibliothÃ¨que partagÃ©e %s rencontrÃ© en rÃ©alisant une Ã©dition de liens statiques"
 
-#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538
-#: elfxx-tilegx.c:3543
+#: elf32-microblaze.c:1595 elf32-tilepro.c:3021 elfxx-sparc.c:3446
+#: elfxx-tilegx.c:3415
 #, c-format
 msgid "%pB: probably compiled without -fPIC?"
 msgstr "%pB: probablement compilÃ© sans -fPICÂ ?"
 
-#: elf32-mips.c:1775 elf64-mips.c:3516 elfn32-mips.c:3332
+#: elf32-mips.c:1776 elf64-mips.c:3515 elfn32-mips.c:3334
 msgid "literal relocation occurs for an external symbol"
 msgstr "rÃ©adressage littÃ©ral rencontrÃ© pour un symbole externe"
 
-#: elf32-mips.c:1822 elf32-score.c:569 elf32-score7.c:469 elf64-mips.c:3559
-#: elfn32-mips.c:3373
+#: elf32-mips.c:1827 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3558
+#: elfn32-mips.c:3376
 msgid "32bits gp relative relocation occurs for an external symbol"
 msgstr "rÃ©adressage relatif gp 32bits rencontrÃ© pour un symbole externe"
 
-#: elf32-msp430.c:837 elf32-msp430.c:1151
+#: elf32-msp430.c:914
+#, c-format
+msgid "error: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "erreur: la taille finale de la valeur uleb128 Ã  l'offset 0x%lx dans %pA depuis %pB dÃ©passe l'espace disponible"
+
+#: elf32-msp430.c:983 elf32-msp430.c:1297
 msgid "try enabling relaxation to avoid relocation truncations"
 msgstr "essayez d'activer la relaxation pour Ã©viter des rÃ©adressages tronquÃ©s"
 
-#: elf32-msp430.c:1358
+#: elf32-msp430.c:1506
 msgid "internal error: branch/jump to an odd address detected"
 msgstr "erreur interne: branchement/saut vers une adresse impaire dÃ©tectÃ©"
 
-#: elf32-msp430.c:2357
+#: elf32-msp430.c:2673
 #, c-format
 msgid "warning: %pB: unknown MSPABI object attribute %d"
 msgstr "attention: %pB: attribut d'objet MSPABI %d inconnu"
 
-#: elf32-msp430.c:2456
+#: elf32-msp430.c:2774
 #, c-format
 msgid "error: %pB uses %s instructions but %pB uses %s"
 msgstr "erreur: %pB utilise les instructions %s alors que %pB utilise %s"
 
-#: elf32-msp430.c:2468
+#: elf32-msp430.c:2786
 #, c-format
 msgid "error: %pB uses the %s code model whereas %pB uses the %s code model"
 msgstr "erreur: %pB utilise le modÃ¨le de code %s alors que %pB utilise le modÃ¨le de code %s"
 
-#: elf32-msp430.c:2480
+#: elf32-msp430.c:2799
 #, c-format
 msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
 msgstr "erreur: %pB utilise le grand modÃ¨le de code alors que %pB utilise les instructions MSP430"
 
-#: elf32-msp430.c:2491
+#: elf32-msp430.c:2810
 #, c-format
 msgid "error: %pB uses the %s data model whereas %pB uses the %s data model"
 msgstr "erreur: %pB utilise le modÃ¨le de donnÃ©es %s alors que %pB utilise le modÃ¨le de donnÃ©es %s"
 
-#: elf32-msp430.c:2503
+#: elf32-msp430.c:2823
 #, c-format
 msgid "error: %pB uses the small code model but %pB uses the %s data model"
 msgstr "erreur: %pB utilise le petit modÃ¨le de code alors que %pB utilise le modÃ¨le de donnÃ©es %s"
 
-#: elf32-msp430.c:2515
+#: elf32-msp430.c:2835
 #, c-format
 msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions"
 msgstr "erreur: %pB utilise le modÃ¨le de donnÃ©es %s alors que %pB utilise uniquement des instructions MSP430"
 
-#: elf32-nds32.c:3624
+#: elf32-msp430.c:2860
 #, c-format
-msgid "error: can't find symbol: %s"
-msgstr "erreur: le symbole ne peut Ãªtre trouvÃ©: %s"
+msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
+msgstr "erreur: %pB peut utiliser la rÃ©gion haute pour les donnÃ©es mais %pB suppose que les donnÃ©es sont exclusivement en mÃ©moire basse"
 
-#: elf32-nds32.c:5639
+#: elf32-nds32.c:3674
 #, c-format
-msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC"
-msgstr "%pB: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC"
+msgid "error: can't find symbol: %s"
+msgstr "erreur: le symbole ne peut Ãªtre trouvÃ©: %s"
 
-#: elf32-nds32.c:5669
+#: elf32-nds32.c:5573
 #, c-format
 msgid "%pB: warning: %s unsupported in shared mode"
 msgstr "%pB: attention: %s non supportÃ© en mode partagÃ©"
 
-#: elf32-nds32.c:5795
+#: elf32-nds32.c:5699
 #, c-format
 msgid "%pB: warning: unaligned access to GOT entry"
 msgstr "%pB: attention: accÃ¨s non alignÃ© Ã  une entrÃ©e GOT"
 
-#: elf32-nds32.c:5836
+#: elf32-nds32.c:5740
 #, c-format
 msgid "%pB: warning: relocate SDA_BASE failed"
 msgstr "%pB: attention: rÃ©adressage SDA_BASE a Ã©chouÃ©"
 
-#: elf32-nds32.c:5858
+#: elf32-nds32.c:5762
 #, c-format
 msgid "%pB(%pA): warning: unaligned small data access of type %d"
 msgstr "%pB(%pA): attention: accÃ¨s non alignÃ© Ã  une petite donnÃ©e de type %d"
 
-#: elf32-nds32.c:6784
+#: elf32-nds32.c:6688
 #, c-format
 msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
 msgstr "%pB: Taille de vecteur ISR en dÃ©saccord avec les modules prÃ©cÃ©dents: prÃ©cÃ©dent a %u octets; actuel a %u octets"
 
-#: elf32-nds32.c:6828
+#: elf32-nds32.c:6736
 #, c-format
 msgid "%pB: warning: endian mismatch with previous modules"
 msgstr "%pB: attention: l'ordre des octets n'est pas le mÃªme que dans les modules prÃ©cÃ©dents"
 
-#: elf32-nds32.c:6842
+#: elf32-nds32.c:6750
 #, c-format
 msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
 msgstr "%pB: attention: version plus ancienne du fichier objet rencontrÃ©e. Veuillez recompiler avec la chaÃ®ne d'outils actuelle"
 
-#: elf32-nds32.c:6930
+#: elf32-nds32.c:6838
 #, c-format
 msgid "%pB: error: ABI mismatch with previous modules"
 msgstr "%pB: erreur: non concordance de l'ABI avec les modules prÃ©cÃ©dents"
 
-#: elf32-nds32.c:6940
+#: elf32-nds32.c:6848
 #, c-format
 msgid "%pB: error: instruction set mismatch with previous modules"
 msgstr "%pB: erreur: le jeu d'instructions ne concorde par avec les modules prÃ©cÃ©dents"
 
-#: elf32-nds32.c:6967
+#: elf32-nds32.c:6875
 #, c-format
 msgid "%pB: warning: incompatible elf-versions %s and %s"
 msgstr "%pB: attention: versions elf %s et %s non compatibles"
 
-#: elf32-nds32.c:6998
+#: elf32-nds32.c:6906
 #, c-format
 msgid ": n1 instructions"
 msgstr ": instructions n1"
 
-#: elf32-nds32.c:7001
+#: elf32-nds32.c:6909
 #, c-format
 msgid ": n1h instructions"
 msgstr ": instructions n1h"
 
-#: elf32-nds32.c:9462
+#: elf32-nds32.c:9358
 #, c-format
 msgid "%pB: error: search_nds32_elf_blank reports wrong node"
 msgstr "%pB: erreur: search_nds32_elf_blank rapporte le mauvais nÅ“ud"
 
-#: elf32-nds32.c:9722
+#: elf32-nds32.c:9622
 #, c-format
 msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
 msgstr "%pB: attention: %s pointe vers le rÃ©adressage non reconnu Ã  %#<PRIx64>"
 
-#: elf32-nds32.c:12975
+#: elf32-nds32.c:12887
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr "%pB: OMIT_FP imbriquÃ©s dans %pA"
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12906
 #, c-format
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr "%pB: OMIT_FP non appariÃ© dans %pA"
 
-#: elf32-nds32.c:13275 reloc.c:8410
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
-msgstr "%X%P: %pB(%pA): rÃ©adressage Â«Â %pRÂ Â» va en dehors des limites\n"
-
-#: elf32-nios2.c:2930
+#: elf32-nios2.c:2934
 #, c-format
 msgid "error: %pB: big-endian R2 is not supported"
 msgstr "erreur: %pB: R2 gros boutiste n'est pas supportÃ©"
 
-#: elf32-nios2.c:3822
+#: elf32-nios2.c:2950
 #, c-format
-msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n"
-msgstr "rÃ©adressage relatif au pointeur global Ã  l'adresse 0x%08x sans que _gp ne soit dÃ©fini\n"
+msgid "error: %pB: conflicting CPU architectures %d/%d"
+msgstr "erreur: %pB: architectures CPU conflictuelles %d/%d"
 
-#: elf32-nios2.c:3842
+#: elf32-nios2.c:3825
 #, c-format
-msgid "unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767\n"
-msgstr "impossible d'atteindre %s (Ã  0x%08x) depuis le pointeur global (Ã  0x%08x) car l'offset (%d) est en dehors de la plage autorisÃ©e -32768 Ã  32767.\n"
+msgid "global pointer relative relocation at address %#<PRIx64> when _gp not defined\n"
+msgstr "rÃ©adressage relatif au pointeur global Ã  l'adresse %#<PRIx64> sans que _gp ne soit dÃ©fini\n"
 
-#: elf32-nios2.c:4495 elf32-pru.c:928
+#: elf32-nios2.c:3852
+#, c-format
+msgid "unable to reach %s (at %#<PRIx64>) from the global pointer (at %#<PRIx64>) because the offset (%<PRId64>) is out of the allowed range, -32678 to 32767\n"
+msgstr "impossible d'atteindre %s (Ã  %#<PRIx64>) depuis le pointeur global (Ã  %#<PRIx64>) car l'offset (%<PRId64>) est en dehors de la plage autorisÃ©e -32768 Ã  32767.\n"
+
+#: elf32-nios2.c:4506 elf32-pru.c:931
 msgid "relocation out of range"
 msgstr "rÃ©adressage hors limite"
 
-#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716
+#: elf32-nios2.c:4516 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr "rÃ©adressage dangereux"
 
-#: elf32-nios2.c:5378
+#: elf32-nios2.c:5354
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr "la variable dynamique Â«Â %sÂ Â» a une taille nulle"
 
-#: elf32-or1k.c:1177
+#: elf32-or1k.c:1258
 #, c-format
 msgid "%pB: Cannot handle relocation value size of %d"
 msgstr "%pB: Impossible de gÃ©rer une taille de valeur de rÃ©adressage de %d"
 
-#: elf32-or1k.c:1286
+#: elf32-or1k.c:1377
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr "%pB: type de rÃ©adressage %d inconnu"
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1431
 #, c-format
 msgid "%pB: addend should be zero for plt relocations"
 msgstr "%pB: l'opÃ©rande devrait Ãªtre zÃ©ro pour des rÃ©adressages plt"
 
-#: elf32-or1k.c:1445
+#: elf32-or1k.c:1544
 #, c-format
 msgid "%pB: addend should be zero for got relocations"
 msgstr "%pB: l'opÃ©rande devrait Ãªtre zÃ©ro pour des rÃ©adressages got"
 
-#: elf32-or1k.c:1462
+#: elf32-or1k.c:1561
 #, c-format
 msgid "%pB: gotoff relocation against dynamic symbol %s"
 msgstr "%pB: rÃ©adressage gotoff vers le symbole dynamique %s"
 
-#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599
+#: elf32-or1k.c:1575 elf32-or1k.c:1590 elf64-alpha.c:4410 elf64-alpha.c:4554
 #, c-format
 msgid "%pB: pc-relative relocation against dynamic symbol %s"
 msgstr "%pB: rÃ©adressage relatif au PC vers le symbole dynamique %s"
 
-#: elf32-or1k.c:1493
+#: elf32-or1k.c:1604
 #, c-format
 msgid "%pB: non-pic relocation against symbol %s"
 msgstr "%pB: rÃ©adressage non-pic vers le symbole dynamique %s"
 
-#: elf32-or1k.c:1577
+#: elf32-or1k.c:1688
 #, c-format
 msgid "%pB: support for local dynamic not implemented"
 msgstr "%pB: support pour les dynamiques locaux pas implÃ©mentÃ©e"
 
-#: elf32-or1k.c:1729
+#: elf32-or1k.c:1867
 #, c-format
 msgid "%pB: will not resolve runtime TLS relocation"
 msgstr "%pB: le rÃ©adressage TLS ne sera pas rÃ©solu Ã  l'exÃ©cution"
 
-#: elf32-or1k.c:2074
+#: elf32-or1k.c:2201
 #, c-format
 msgid "%pB: bad relocation section name `%s'"
 msgstr "%pB: nom de section de rÃ©adressage erronÃ© Â«Â %sÂ Â»"
 
-#: elf32-or1k.c:3218
+#: elf32-or1k.c:3315
 #, c-format
 msgid "%pB: %s flag mismatch with previous modules"
 msgstr "%pB: dÃ©saccord du fanion %s avec les modules prÃ©cÃ©dents"
 
-#: elf32-ppc.c:986
+#: elf32-ppc.c:990 elf64-ppc.c:1753
 #, c-format
 msgid "generic linker can't handle %s"
 msgstr "liaison gÃ©nÃ©rique ne peut traiter %s"
 
-#: elf32-ppc.c:1617
+#: elf32-ppc.c:1628
 #, c-format
 msgid "corrupt %s section in %pB"
 msgstr "section %s corrompue dans %pB"
 
-#: elf32-ppc.c:1637
+#: elf32-ppc.c:1647
 #, c-format
 msgid "unable to read in %s section from %pB"
 msgstr "incapable de lire dans la section %s Ã  partir de %pB"
 
-#: elf32-ppc.c:1679
+#: elf32-ppc.c:1689
 #, c-format
 msgid "warning: unable to set size of %s section in %pB"
 msgstr "attention: incapable d'initialiser la taille de la section %s dans %pB"
 
-#: elf32-ppc.c:1729
+#: elf32-ppc.c:1738
 msgid "failed to allocate space for new APUinfo section"
 msgstr "Ã©chec d'allocation d'espace pour une nouvelle section APUinfo"
 
-#: elf32-ppc.c:1748
+#: elf32-ppc.c:1757
 msgid "failed to compute new APUinfo section"
 msgstr "Ã©chec d'Ã©valuation de la nouvelle section APUinfo"
 
-#: elf32-ppc.c:1751
+#: elf32-ppc.c:1760
 msgid "failed to install new APUinfo section"
 msgstr "Ã©chec d'installation de la nouvelle section APUinfo"
 
-#: elf32-ppc.c:2853
+#: elf32-ppc.c:2869
 #, c-format
 msgid "%pB: relocation %s cannot be used when making a shared object"
 msgstr "%pB: rÃ©adressage %s ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©"
 
-#: elf32-ppc.c:3587 elf32-ppc.c:3595
-#, c-format
-msgid "%pB uses hard float, %pB uses soft float"
-msgstr "%pB utilise la virgule flottante matÃ©rielle, %pB utilise la virgule flottante logicielle"
-
-#: elf32-ppc.c:3603 elf32-ppc.c:3611
+#: elf32-ppc.c:3588 elf32-ppc.c:3596
 #, c-format
 msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
 msgstr "%pB utilise la virgule flottante double prÃ©cision matÃ©rielle, %pB utilise la virgule flottante simple prÃ©cision matÃ©rielle"
 
-#: elf32-ppc.c:3630 elf32-ppc.c:3638
+#: elf32-ppc.c:3618 elf32-ppc.c:3626
 #, c-format
 msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
 msgstr "%pB utilise un double long 64 bits, %pB utilise un double long de 128 bits"
 
-#: elf32-ppc.c:3646 elf32-ppc.c:3654
+#: elf32-ppc.c:3634 elf32-ppc.c:3642
 #, c-format
 msgid "%pB uses IBM long double, %pB uses IEEE long double"
 msgstr "%pB utilise un double long IBM, %pB utilise un double long IEEE"
 
-#: elf32-ppc.c:3721 elf32-ppc.c:3730
+#: elf32-ppc.c:3709 elf32-ppc.c:3718
 #, c-format
 msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
 msgstr "%pB utilise l'ABI de vecteurs AltiVec, %pB utilise l'ABI de vecteurs SPE"
 
-#: elf32-ppc.c:3759 elf32-ppc.c:3768
+#: elf32-ppc.c:3747 elf32-ppc.c:3756
 #, c-format
 msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
 msgstr "%pB utilise r3/r4 pour les retours de petites structures, %pB utilise la mÃ©moire"
 
-#: elf32-ppc.c:3829
+#: elf32-ppc.c:3820
 #, c-format
 msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
 msgstr "%pB: compilÃ© avec -mrelocatable et fait l'Ã©dition de lien avec les modules compilÃ©s normalement"
 
-#: elf32-ppc.c:3837
+#: elf32-ppc.c:3828
 #, c-format
 msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
 msgstr "%pB: compilÃ© normalement et fait l'Ã©dition de lien avec les modules compilÃ©s avec -mrelocatable"
 
-#: elf32-ppc.c:3906
+#: elf32-ppc.c:3899
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
 msgstr "%pB(%pA+0x%lx): rÃ©adressage du style 16A attendu sur l'insn 0x%08x"
 
-#: elf32-ppc.c:3925
+#: elf32-ppc.c:3918
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
 msgstr "%pB(%pA+0x%lx): rÃ©adressage du style 16D attendu sur l'insn 0x%08x"
@@ -2943,44 +3279,53 @@ msgstr "bss-plt forcÃ© Ã  cause de %pB"
 msgid "bss-plt forced by profiling"
 msgstr "bss-plt forcÃ© par le profilage"
 
+#: elf32-ppc.c:4608 elf64-ppc.c:8497
+msgid "%H: warning: %s unexpected insn %#x.\n"
+msgstr "%H: attention: %s insn %#x inattendue.\n"
+
 #. Uh oh, we didn't find the expected call.  We
 #. could just mark this symbol to exclude it
 #. from tls optimization but it's safer to skip
 #. the entire optimization.
-#: elf32-ppc.c:4606 elf64-ppc.c:7724
+#: elf32-ppc.c:4638 elf64-ppc.c:8562
 #, c-format
 msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
 msgstr "%H l'argument a perdu __tls_get_addr, optimisation TLS dÃ©sactivÃ©e\n"
 
-#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534
-#: elfxx-tilegx.c:2579
+#: elf32-ppc.c:5565 elf32-sh.c:3019 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elfxx-tilegx.c:2494
 #, c-format
 msgid "%pB: dynamic relocation in read-only section `%pA'\n"
 msgstr "%pB: rÃ©adressage dynamique dans une section en lecture seule Â«Â %pAÂ Â»\n"
 
-#: elf32-ppc.c:7457
+#: elf32-ppc.c:6511
+msgid "%pB: Adjusting branch at 0x%V towards \"%s\" in section %s\n"
+msgstr "%pB: Ajustement du branchement Ã  0x%V vers Â«Â %sÂ Â» dans la section %s\n"
+
+#: elf32-ppc.c:7464
 msgid "%P: %H: error: %s with unexpected instruction %x\n"
 msgstr "%P: %H: erreur: %s avec l'instruction inattendue %x\n"
 
-#: elf32-ppc.c:7494
+#: elf32-ppc.c:7502
 msgid "%H: fixup branch overflow\n"
 msgstr "%H: dÃ©bordement du branchement de correction\n"
 
-#: elf32-ppc.c:7534 elf32-ppc.c:7570
+#: elf32-ppc.c:7542 elf32-ppc.c:7580
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
 msgstr "%pB(%pA+%#<PRIx64>): erreur: %s avec l'instruction inattendue %#x"
 
-#: elf32-ppc.c:7634
+#: elf32-ppc.c:7644
 #, c-format
 msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
 msgstr "%X%H: bss-plt -fPIC ifunc %s non supportÃ©\n"
 
-#: elf32-ppc.c:7673 elf64-ppc.c:15220
-msgid "%H: warning: %s unexpected insn %#x.\n"
-msgstr "%H: attention: %s insn %#x inattendue.\n"
+#: elf32-ppc.c:7680
+#, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr "%pB: rÃ©adressage %#x pas supportÃ©"
 
-#: elf32-ppc.c:7985
+#: elf32-ppc.c:7963
 #, c-format
 msgid "%H: non-zero addend on %s reloc against `%s'\n"
 msgstr "%H: opÃ©rande non nul sur le rÃ©adressage %s par rapport Ã  Â«Â %sÂ Â»\n"
@@ -2993,111 +3338,118 @@ msgstr "%H: opÃ©rande non nul sur le rÃ©
 #. local won't have the +32k reloc addend trick marking
 #. -fPIC code, so the linker won't know whether r30 is
 #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
-#: elf32-ppc.c:8017
+#: elf32-ppc.c:7995
 #, c-format
 msgid "%X%H: @local call to ifunc %s\n"
 msgstr "%X%H: appel @local Ã  ifunc %s\n"
 
-#: elf32-ppc.c:8187
+#: elf32-ppc.c:8173
 #, c-format
 msgid "%H: relocation %s for indirect function %s unsupported\n"
 msgstr "%H: rÃ©adressage %s non supportÃ© pour la fonction indirecte %s\n"
 
-#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725
+#: elf32-ppc.c:8511 elf32-ppc.c:8542 elf32-ppc.c:8645 elf32-ppc.c:8745
 #, c-format
 msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
 msgstr "%pB: la cible (%s) d'un rÃ©adressage %s est dans la mauvaise section de sortie (%s)"
 
-#: elf32-ppc.c:8855 elf32-ppc.c:8873
-msgid "%P: %H: %s relocation unsupported for bss-plt\n"
-msgstr "%P: %H: le rÃ©adressage %s n'est pas supportÃ© pour bss-plt\n"
+#: elf32-ppc.c:8923 elf32-ppc.c:8944
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
+msgstr "%X%P: %H: le rÃ©adressage %s n'est pas supportÃ© pour bss-plt\n"
 
-#: elf32-ppc.c:8954
+#: elf32-ppc.c:9026
 #, c-format
 msgid "%H: error: %s against `%s' not a multiple of %u\n"
 msgstr "%H: erreur: %s par rapport Ã  Â«Â %sÂ Â» n'est pas un multiple de %u\n"
 
-#: elf32-ppc.c:8983
+#: elf32-ppc.c:9055
 #, c-format
 msgid "%H: unresolvable %s relocation against symbol `%s'\n"
 msgstr "%H: rÃ©adressage %s sans solution par rapport au symbole Â«Â %sÂ Â»\n"
 
-#: elf32-ppc.c:9064
+#: elf32-ppc.c:9137
 #, c-format
 msgid "%H: %s reloc against `%s': error %d\n"
 msgstr "%H: rÃ©adressage %s vers Â«Â %sÂ Â»: erreur %d\n"
 
-#: elf32-ppc.c:9959 elf64-ppc.c:15715
+#: elf32-ppc.c:10019
 msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
 msgstr "%X%P: les rÃ©adressages de textes et les fonctions indirectes GNU rÃ©sulteront en un crash Ã  l'exÃ©cution\n"
 
-#: elf32-ppc.c:9963 elf64-ppc.c:15719
+#: elf32-ppc.c:10023 elf64-ppc.c:18302
 msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
 msgstr "%P: attention: les rÃ©adressages de textes et les fonctions indirectes GNU pourraient rÃ©sulter en un crash Ã  l'exÃ©cution\n"
 
-#: elf32-ppc.c:10008
+#: elf32-ppc.c:10068
 #, c-format
 msgid "%s not defined in linker created %pA"
 msgstr "%s pas dÃ©fini dans %pA crÃ©Ã© par l'Ã©diteur de liens"
 
-#: elf32-pru.c:579 elf32-pru.c:1472
+#: elf32-pru.c:582 elf32-pru.c:1477
 #, c-format
 msgid "error: %pB: old incompatible object file detected"
 msgstr "erreur: %pB: ancien fichier objet incompatible dÃ©tectÃ©"
 
-#: elf32-rl78.c:372
-msgid "internal error: RL78 reloc stack overflow"
-msgstr "erreur interne: dÃ©bordement de la pile de rÃ©adressages RL78"
-
-#: elf32-rl78.c:383
-msgid "internal error: RL78 reloc stack underflow"
-msgstr "erreur interne: dÃ©bordement par le bas de la pile de rÃ©adressages RL78"
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
+msgstr "dÃ©bordement (par le bas ou le haut) de la pile de rÃ©adressages RL78"
+
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr "division par zÃ©ro dans le rÃ©adressage RL78"
 
-#: elf32-rl78.c:1053
+#: elf32-rl78.c:1069
 msgid "warning: RL78_SYM reloc with an unknown symbol"
 msgstr "attention: rÃ©adressage RL78_SYM avec un symbole inconnu"
 
-#: elf32-rl78.c:1084 elf32-rx.c:1456
-#, c-format
-msgid "%pB(%pA): error: call to undefined function '%s'"
-msgstr "%pB(%pA): erreur: appel Ã  la fonction non dÃ©finie Â«Â %sÂ Â»"
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr "%H: %s hors limite\n"
+
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
+msgstr "%H: le type de rÃ©adressage %u n'est pas supportÃ©\n"
+
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr "%H: le rÃ©adressage %s retourne une valeur %x non reconnue\n"
 
-#: elf32-rl78.c:1205
+#: elf32-rl78.c:1220
 #, c-format
 msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
 msgstr "conflit ABI RL78: le fichier G10 %pB ne peut pas Ãªtre liÃ© avec %s fichier %pB"
 
 # les deux %s sont des noms de processeurs
-#: elf32-rl78.c:1222
+#: elf32-rl78.c:1237
 #, c-format
 msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
 msgstr "conflit d'ABI RL78: ne peut lier le fichier %2$pB pour %1$s avec le fichier %4$pB pour %3$s"
 
-#: elf32-rl78.c:1231
+#: elf32-rl78.c:1246
 msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
 msgstr "conflit de fusion RL78: ne peut lier ensemble un objet 32 bits et un objet 64 bits"
 
-#: elf32-rl78.c:1235 elf32-rl78.c:1239
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
 #, c-format
 msgid "- %pB is 64-bit, %pB is not"
 msgstr "- %pB est 64 bits, %pB ne l'est pas"
 
-#: elf32-rl78.c:1266
+#: elf32-rl78.c:1281
 #, c-format
 msgid " [64-bit doubles]"
 msgstr " [doubles de 64 bits]"
 
-#: elf32-rx.c:605
+#: elf32-rx.c:618
 #, c-format
 msgid "%pB:%pA: table entry %s outside table"
 msgstr "%pB:%pA: l'entrÃ©e %s de la table est en dehors de la table"
 
-#: elf32-rx.c:612
+#: elf32-rx.c:625
 #, c-format
 msgid "%pB:%pA: table entry %s not word-aligned within table"
 msgstr "%pB:%pA: l'entrÃ©e %s de la table n'est pas alignÃ©e sur un mot dans la table"
 
-#: elf32-rx.c:684
+#: elf32-rx.c:700
 #, c-format
 msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
 msgstr "%pB:%pA: attention: rÃ©adressage %s Red Hat rÃ©prouvÃ©e dÃ©tectÃ© sur: %s"
@@ -3106,74 +3458,79 @@ msgstr "%pB:%pA: attention: rÃ©adressage
 #. an absolute address is being computed.  There are special cases
 #. for relocs against symbols that are known to be referenced in
 #. crt0.o before the PID base address register has been initialised.
-#: elf32-rx.c:704
+#: elf32-rx.c:720
 #, c-format
 msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
 msgstr "%pB(%pA): rÃ©adressage PID %s non sÃ»r Ã  %<PRIx64> (sur %s dans %s)"
 
-#: elf32-rx.c:1288
+#: elf32-rx.c:1304
 msgid "warning: RX_SYM reloc with an unknown symbol"
 msgstr "attention: rÃ©adressage RX_SYM avec un symbole inconnu"
 
-#: elf32-rx.c:3167
+#: elf32-rx.c:1472
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr "%pB(%pA): erreur: appel Ã  la fonction non dÃ©finie Â«Â %sÂ Â»"
+
+#: elf32-rx.c:3185
 #, c-format
 msgid "there is a conflict merging the ELF header flags from %pB"
 msgstr "il y a un conflit en fusionnant les fanions d'en-tÃªtes ELF de %pB"
 
-#: elf32-rx.c:3170
+#: elf32-rx.c:3188
 #, c-format
 msgid "  the input  file's flags: %s"
 msgstr "  les fanions du fichier d'entrÃ©e: %s"
 
-#: elf32-rx.c:3172
+#: elf32-rx.c:3190
 #, c-format
 msgid "  the output file's flags: %s"
 msgstr "  les fanions du fichier de sortie: %s"
 
-#: elf32-rx.c:3792
+#: elf32-rx.c:3797
 #, c-format
 msgid "%pB:%pA: table %s missing corresponding %s"
 msgstr "%pB:%pA: la table %s n'a pas de %s correspondant"
 
-#: elf32-rx.c:3800
+#: elf32-rx.c:3805
 #, c-format
 msgid "%pB:%pA: %s and %s must be in the same input section"
 msgstr "%pB:%pA: %s et %s doivent Ãªtre dans la mÃªme section d'entrÃ©e"
 
-#: elf32-s390.c:2140 elf64-s390.c:2095
+#: elf32-s390.c:2009 elf64-s390.c:1976
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
 msgstr "%pB(%pA+%#<PRIx64>): instruction invalide pour le rÃ©adressage TLS %s"
 
-#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3875
 msgid "not enough GOT space for local GOT entries"
 msgstr "pas suffisamment d'espace GOT pour les entrÃ©es locales GOT"
 
-#: elf32-score.c:2746
+#: elf32-score.c:2747
 msgid "address not word aligned"
 msgstr "adresse pas alignÃ©e sur un mot"
 
-#: elf32-score.c:2827 elf32-score7.c:2632
+#: elf32-score.c:2828 elf32-score7.c:2635
 #, c-format
 msgid "%pB: malformed reloc detected for section %pA"
 msgstr "%pB: rÃ©adressage mal composÃ© dÃ©tectÃ© dans la section %pA"
 
-#: elf32-score.c:2881 elf32-score7.c:2686
+#: elf32-score.c:2882 elf32-score7.c:2689
 #, c-format
 msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: appel CALL15 de rÃ©adressage Ã  %#<PRIx64> n'est pas appliquÃ© sur un symbole global"
 
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3990 elf32-score7.c:3797
 #, c-format
 msgid " [pic]"
 msgstr " [pic]"
 
-#: elf32-score.c:4007 elf32-score7.c:3812
+#: elf32-score.c:3994 elf32-score7.c:3801
 #, c-format
 msgid " [fix dep]"
 msgstr " [fix dep]"
 
-#: elf32-score.c:4050 elf32-score7.c:3855
+#: elf32-score.c:4041 elf32-score7.c:3848
 #, c-format
 msgid "%pB: warning: linking PIC files with non-PIC files"
 msgstr "%pB: attention: Ã©dition de liens des fichiers PIC avec des fichiers non PIC"
@@ -3183,153 +3540,149 @@ msgstr "%pB: attention: Ã©dition de lien
 msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
 msgstr "%pB: %#<PRIx64>: attention: R_SH_USES pointe vers un insn inconnu 0x%x"
 
-#: elf32-sh.c:3633
-msgid "unexpected STO_SH5_ISA32 on local symbol is not handled"
-msgstr "STO_SH5_ISA32 inattendu sur le symbole local n'est pas traitÃ©"
-
-#: elf32-sh.c:3880
+#: elf32-sh.c:3754
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
 msgstr "%pB: %#<PRIx64>: fatal: cible de branchement non alignÃ©e pour un rÃ©adressage de type relax-support"
 
-#: elf32-sh.c:3910 elf32-sh.c:3926
+#: elf32-sh.c:3784 elf32-sh.c:3800
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: fatal: rÃ©adressage %s non alignÃ© %#<PRIx64>"
 
-#: elf32-sh.c:3942
+#: elf32-sh.c:3816
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocation %<PRId64> not in range -32..32"
 msgstr "%pB: %#<PRIx64>: fatal: rÃ©adressage R_SH_PSHA %<PRId64> pas dans l'intervalle -32..32"
 
-#: elf32-sh.c:3958
+#: elf32-sh.c:3832
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocation %<PRId64> not in range -32..32"
 msgstr "%pB: %#<PRIx64>: fatal: rÃ©adressage R_SH_PSHL %<PRId64> n'est pas dans l'intervalle -32..32"
 
-#: elf32-sh.c:4088 elf32-sh.c:4483
+#: elf32-sh.c:3962 elf32-sh.c:4357
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot emit fixup to `%s' in read-only section"
 msgstr "%pB(%pA+%#<PRIx64>): impossible d'apporter des corrections Ã  Â«Â %sÂ Â» dans une section en lecture seule"
 
-#: elf32-sh.c:4586
+#: elf32-sh.c:4460
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
 msgstr "%pB(%pA+%#<PRIx64>): %s rÃ©adressage vers le symbole externe Â«Â %sÂ Â»"
 
-#: elf32-sh.c:4705
+#: elf32-sh.c:4579
 #, c-format
 msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): le dÃ©calage dans le rÃ©adressage de la traduction GD->LE est trop petit: %#<PRIx64>"
 
 #. The backslash is to prevent bogus trigraph detection.
-#: elf32-sh.c:4723
+#: elf32-sh.c:4597
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %#04X inattendue (0xd4?? attendue)"
 
-#: elf32-sh.c:4731
+#: elf32-sh.c:4605
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %#04X inattendue (0xc7?? attendue)"
 
-#: elf32-sh.c:4738
+#: elf32-sh.c:4612
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %#04X inattendue (0xd1?? attendue)"
 
-#: elf32-sh.c:4745
+#: elf32-sh.c:4619
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %#04X inattendue (0x310c attendue)"
 
-#: elf32-sh.c:4752
+#: elf32-sh.c:4626
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %#04X inattendue (0x410b attendue)"
 
-#: elf32-sh.c:4759
+#: elf32-sh.c:4633
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %#04X inattendue (0x34cc attendue)"
 
-#: elf32-sh.c:4794
+#: elf32-sh.c:4668
 #, c-format
 msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): le dÃ©calage dans le rÃ©adressage pour la traduction IE->LE est trop petit: %#<PRIx64>"
 
-#: elf32-sh.c:4812
+#: elf32-sh.c:4686
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %#04X inattendue (0xd0?? attendue: mov.l)"
 
-#: elf32-sh.c:4821
+#: elf32-sh.c:4695
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %#04X inattendue (0x0?12 attendue: stc)"
 
-#: elf32-sh.c:4828
+#: elf32-sh.c:4702
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
 msgstr "%pB(%pA+%#<PRIx64>): instruction %#04X inattendue (0x0?ce attendu: mov.l)"
 
-#: elf32-sh.c:4943
+#: elf32-sh.c:4817
 #, c-format
 msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): le dÃ©calage dans le rÃ©adressage pour la traduction GD->IE est trop petit: %#<PRIx64>"
 
-#: elf32-sh.c:5011
+#: elf32-sh.c:4885
 #, c-format
 msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): le dÃ©calage dans le rÃ©adressage pour la traduction LD->LE est trop petit: %#<PRIx64>"
 
-#: elf32-sh.c:5139
+#: elf32-sh.c:5013
 #, c-format
-msgid "%X%C: relocation to \"%s\" references a different segment\n"
-msgstr "%X%C: le rÃ©adressage vers Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent\n"
+msgid "%X%H: relocation to \"%s\" references a different segment\n"
+msgstr "%X%H: le rÃ©adressage vers Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent\n"
 
-#: elf32-sh.c:5146
+#: elf32-sh.c:5020
 #, c-format
-msgid "%C: warning: relocation to \"%s\" references a different segment\n"
-msgstr "%C: attention: rÃ©adressage vers Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent\n"
+msgid "%H: warning: relocation to \"%s\" references a different segment\n"
+msgstr "%H: attention: rÃ©adressage vers Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent\n"
 
-#: elf32-sh.c:5651 elf32-sh.c:5733
+#: elf32-sh.c:5488 elf32-sh.c:5570
 #, c-format
 msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
 msgstr "%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole normal et comme symbole FDPIC"
 
-#: elf32-sh.c:5657 elf32-sh.c:5738
+#: elf32-sh.c:5494 elf32-sh.c:5575
 #, c-format
 msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
 msgstr "%pB: Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme symbole FDPIC et comme symbole local au thread"
 
-#: elf32-sh.c:5688
+#: elf32-sh.c:5525
 #, c-format
 msgid "%pB: Function descriptor relocation with non-zero addend"
 msgstr "%pB: Descripteur de fonction rÃ©adressÃ© avec un opÃ©rande non nul"
 
-#: elf32-sh.c:5895 elf64-alpha.c:4691
+#: elf32-sh.c:5732 elf64-alpha.c:4646
 #, c-format
 msgid "%pB: TLS local exec code cannot be linked into shared objects"
 msgstr "%pB: code exÃ©cutable local TLS ne peut Ãªtre liÃ© en objets partagÃ©s"
 
 # %s sont Â«Â dspÂ Â» ou Â«Â floating pointÂ Â» non traduits
-#: elf32-sh.c:6010
+#: elf32-sh.c:5847
 #, c-format
 msgid "%pB: uses %s instructions while previous modules use %s instructions"
 msgstr "%pB: utilise les instructions %s tandis que les modules prÃ©cÃ©dents utilisent les instructions %s"
 
-#: elf32-sh.c:6022
+#: elf32-sh.c:5859
 #, c-format
 msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture"
 msgstr "erreur interne: la fusion de l'architecture Â«Â %sÂ Â» avec l'architecture Â«Â %sÂ Â» a produit une architecture inconnue"
 
-#: elf32-sh.c:6059
+#: elf32-sh.c:5900
 #, c-format
 msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
 msgstr "%pB: utilise des instructions qui sont incompatibles avec les instructions utilisÃ©es dans les modules prÃ©cÃ©dents"
 
-#: elf32-sh.c:6072
+#: elf32-sh.c:5913
 #, c-format
 msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
 msgstr "%pB: tentative de mÃ©langer des objets FDPIC et non-FDPIC"
@@ -3344,72 +3697,77 @@ msgstr "%pB: compilÃ© pour un systÃ¨me Ã
 msgid "%pB: linking little endian files with big endian files"
 msgstr "%pB: Ã©dition de liens pour des fichiers Ã  octets de poids faible avec des fichiers Ã  octets de poids fort"
 
-#: elf32-spu.c:732
+#: elf32-sparc.c:157
+#, c-format
+msgid "%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr "%pB: valeur de machine sparc Â«Â %luÂ Â» non gÃ©rÃ©e dÃ©tectÃ©e durant le traitement de l'Ã©criture"
+
+#: elf32-spu.c:737
 msgid "%X%P: overlay section %pA does not start on a cache line\n"
 msgstr "%X%P: recouvrement de la section %pA ne dÃ©marre pas sur une ligne de cache\n"
 
-#: elf32-spu.c:740
+#: elf32-spu.c:745
 msgid "%X%P: overlay section %pA is larger than a cache line\n"
 msgstr "%X%P: recouvrement de la section %pA est plus grand que la ligne de cache\n"
 
-#: elf32-spu.c:760
+#: elf32-spu.c:765
 msgid "%X%P: overlay section %pA is not in cache area\n"
 msgstr "%X%P: recouvrement de la section %pA n'est pas dans une zone de cache\n"
 
-#: elf32-spu.c:801
+#: elf32-spu.c:806
 #, c-format
 msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n"
 msgstr "%X%P: recouvrement des sections %pA et %pA ne commencent pas Ã  la mÃªme adresse\n"
 
-#: elf32-spu.c:1027
+#: elf32-spu.c:1032
 #, c-format
 msgid "warning: call to non-function symbol %s defined in %pB"
 msgstr "attention: appel au symbole %s dÃ©fini dans %pB qui n'est pas une fonction"
 
-#: elf32-spu.c:1377
+#: elf32-spu.c:1382
 #, c-format
 msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
 msgstr "%pA:0x%v le lrlive .brinfo (%u) diffÃ¨re de celui de l'analyse (%u)\n"
 
-#: elf32-spu.c:1909
+#: elf32-spu.c:1912
 #, c-format
 msgid "%pB is not allowed to define %s"
 msgstr "%pB ne peut pas dÃ©finir %s"
 
-#: elf32-spu.c:1917
+#: elf32-spu.c:1920
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr "vous ne pouvez pas dÃ©finir %s dans un script"
 
-#: elf32-spu.c:1951
+#: elf32-spu.c:1954
 #, c-format
 msgid "%s in overlay section"
 msgstr "%s dans une section de recouvrement"
 
-#: elf32-spu.c:1980
+#: elf32-spu.c:1983
 msgid "overlay stub relocation overflow"
 msgstr "dÃ©bordement du rÃ©adressage de l'Ã©bauche de recouvrement"
 
-#: elf32-spu.c:1989 elf64-ppc.c:13230
+#: elf32-spu.c:1992 elf64-ppc.c:15341
 msgid "stubs don't match calculated size"
 msgstr "taille des Ã©bauches ne concorde pas avec la taille calculÃ©e"
 
-#: elf32-spu.c:2572
+#: elf32-spu.c:2575
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr "attention: %s recouvre %s\n"
 
-#: elf32-spu.c:2588
+#: elf32-spu.c:2591
 #, c-format
 msgid "warning: %s exceeds section size\n"
 msgstr "attention: %s dÃ©passe la taille de la section\n"
 
-#: elf32-spu.c:2620
+#: elf32-spu.c:2623
 #, c-format
 msgid "%pA:0x%v not found in function table\n"
 msgstr "%pA:%0x%v pas trouvÃ© dans la table de fonctions\n"
 
-#: elf32-spu.c:2761
+#: elf32-spu.c:2764
 #, c-format
 msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n"
 msgstr "%pB(%pA+0x%v): appel Ã  la section non exÃ©cutable %pB(%pA), analyse incomplÃ¨te\n"
@@ -3423,39 +3781,39 @@ msgstr "l'analyse de la pile ignorera l'
 msgid "  calls:\n"
 msgstr "  appels:\n"
 
-#: elf32-spu.c:4341
+#: elf32-spu.c:4342
 #, c-format
 msgid "%s duplicated in %s\n"
 msgstr "%s dupliquÃ© dans %s\n"
 
-#: elf32-spu.c:4345
+#: elf32-spu.c:4346
 #, c-format
 msgid "%s duplicated\n"
 msgstr "%s dupliquÃ©\n"
 
-#: elf32-spu.c:4352
+#: elf32-spu.c:4353
 msgid "sorry, no support for duplicate object files in auto-overlay script\n"
 msgstr "dÃ©solÃ©, pas de support des fichiers objet dupliquÃ©s dans un script auto-overlay\n"
 
-#: elf32-spu.c:4394
+#: elf32-spu.c:4395
 #, c-format
 msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n"
 msgstr "la taille de non recouvrement de 0x%v plus la taille maximum de recouvrement de 0x%v dÃ©passe l'espace local\n"
 
-#: elf32-spu.c:4550
+#: elf32-spu.c:4551
 #, c-format
 msgid "%pB:%pA%s exceeds overlay size\n"
 msgstr "%pB:%pA%s dÃ©passe la taille de recouvrement\n"
 
-#: elf32-spu.c:4691
+#: elf32-spu.c:4692
 msgid "%F%P: auto overlay error: %E\n"
 msgstr "%F%P: erreur d'auto recouvrement: %E\n"
 
-#: elf32-spu.c:4712
+#: elf32-spu.c:4713
 msgid "Stack size for call graph root nodes.\n"
 msgstr "Taille de la pile des nÅ“uds racine du graph d'appel.\n"
 
-#: elf32-spu.c:4713
+#: elf32-spu.c:4714
 msgid ""
 "\n"
 "Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
@@ -3463,338 +3821,338 @@ msgstr ""
 "\n"
 "Taille de la pile pour les fonctions.  Annotations: Â«Â *Â Â» pile max, Â«Â tÂ Â» appel de queue\n"
 
-#: elf32-spu.c:4723
+#: elf32-spu.c:4724
 msgid "Maximum stack required is 0x%v\n"
 msgstr "Pile maximum requise est 0x%v\n"
 
-#: elf32-spu.c:4742
+#: elf32-spu.c:4743
 msgid "%X%P: stack/lrlive analysis error: %E\n"
 msgstr "%X%P: erreur d'analyse de pile/lrlive: %E\n"
 
-#: elf32-spu.c:4745
+#: elf32-spu.c:4746
 msgid "%F%P: can not build overlay stubs: %E\n"
 msgstr "%F%P: ne peut construire les Ã©bauches de recouvrement: %E\n"
 
-#: elf32-spu.c:4814
+#: elf32-spu.c:4815
 msgid "fatal error while creating .fixup"
 msgstr "erreur fatale lors de la crÃ©ation de .fixup"
 
-#: elf32-spu.c:5049
+#: elf32-spu.c:5051
 #, c-format
 msgid "%pB(%s+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr "%pB(%s+%#<PRIx64>): rÃ©adressage %s sans solution vers le symbole Â«Â %sÂ Â»"
 
-#: elf32-tic6x.c:1628
+#: elf32-tic6x.c:1588
 msgid "warning: generating a shared library containing non-PIC code"
 msgstr "attention: production d'une librairie partagÃ©e contenant du code non-PIC"
 
-#: elf32-tic6x.c:1633
+#: elf32-tic6x.c:1593
 msgid "warning: generating a shared library containing non-PID code"
 msgstr "attention: production d'une librairie partagÃ©e contenant du code non-PID"
 
-#: elf32-tic6x.c:2493
+#: elf32-tic6x.c:2434
 #, c-format
 msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
 msgstr "%pB: rÃ©adressage relatif Ã  SB mais __c6xabi_DSBT_BASE n'est pas dÃ©fini"
 
-#: elf32-tic6x.c:3629
+#: elf32-tic6x.c:3498
 #, c-format
 msgid "%pB: error: unknown mandatory EABI object attribute %d"
 msgstr "%pB: erreur: l'attribut d'objet EABI obligatoire %d est manquant"
 
-#: elf32-tic6x.c:3638
+#: elf32-tic6x.c:3507
 #, c-format
 msgid "%pB: warning: unknown EABI object attribute %d"
 msgstr "%pB: attention: attribut d'objet EABI %d inconnu"
 
-#: elf32-tic6x.c:3752 elf32-tic6x.c:3761
+#: elf32-tic6x.c:3625 elf32-tic6x.c:3634
 #, c-format
 msgid "error: %pB requires more stack alignment than %pB preserves"
 msgstr "erreur: %pB nÃ©cessite un plus grand alignement de pile que ce que %pB prÃ©serve"
 
-#: elf32-tic6x.c:3771 elf32-tic6x.c:3780
+#: elf32-tic6x.c:3644 elf32-tic6x.c:3653
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_alignment value in %pB"
 msgstr "erreur: valeur Tag_ABI_array_object_alignment inconnue dans %pB"
 
-#: elf32-tic6x.c:3789 elf32-tic6x.c:3798
+#: elf32-tic6x.c:3662 elf32-tic6x.c:3671
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB"
 msgstr "erreur: valeur Tag_ABI_array_object_align_expected inconnue dans %pB"
 
-#: elf32-tic6x.c:3807 elf32-tic6x.c:3815
+#: elf32-tic6x.c:3680 elf32-tic6x.c:3688
 #, c-format
 msgid "error: %pB requires more array alignment than %pB preserves"
 msgstr "erreur: %pB nÃ©cessite un plus grand alignement de tableau que ce que %pB prÃ©serve"
 
-#: elf32-tic6x.c:3838
+#: elf32-tic6x.c:3711
 #, c-format
 msgid "warning: %pB and %pB differ in wchar_t size"
 msgstr "attention: %pB et %pB on des tailles de wchar_t diffÃ©rentes"
 
-#: elf32-tic6x.c:3857
+#: elf32-tic6x.c:3730
 #, c-format
 msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
 msgstr "attention: %pB et %pB ne sont pas d'accord sur la compilation du code pour DSBT"
 
-#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:9530
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2579
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2729
+#: elfnn-aarch64.c:10030 elfnn-kvx.c:4636 elfnn-loongarch.c:5032
+#: elfnn-riscv.c:3481
 #, c-format
 msgid "discarded output section: `%pA'"
 msgstr "section de sortie rejetÃ©e: Â«Â %pAÂ Â»"
 
-#: elf32-v850.c:153
+#: elf32-v850.c:152
 #, c-format
 msgid "variable `%s' cannot occupy in multiple small data regions"
 msgstr "variable Â«Â %sÂ Â» ne peut occuper de multiples petites rÃ©gions de donnÃ©es"
 
-#: elf32-v850.c:156
+#: elf32-v850.c:155
 #, c-format
 msgid "variable `%s' can only be in one of the small, zero, and tiny data regions"
 msgstr "variable Â«Â %sÂ Â» peut seulement Ãªtre dans une rÃ©gion de donnÃ©es petite, zÃ©ro ou minuscule"
 
-#: elf32-v850.c:159
+#: elf32-v850.c:158
 #, c-format
 msgid "variable `%s' cannot be in both small and zero data regions simultaneously"
 msgstr "variable Â«Â %sÂ Â» ne peut Ãªtre dans une rÃ©gion de donnÃ©es petite et zÃ©ro Ã  la fois"
 
-#: elf32-v850.c:162
+#: elf32-v850.c:161
 #, c-format
 msgid "variable `%s' cannot be in both small and tiny data regions simultaneously"
 msgstr "variable Â«Â %sÂ Â» ne peut Ãªtre dans une rÃ©gion de donnÃ©es petite et minuscule Ã  la fois"
 
-#: elf32-v850.c:165
+#: elf32-v850.c:164
 #, c-format
 msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously"
 msgstr "variable Â«Â %sÂ Â» ne peut Ãªtre dans une rÃ©gion de donnÃ©es zÃ©ro et minuscule Ã  la fois"
 
-#: elf32-v850.c:463
+#: elf32-v850.c:466
 msgid "failed to find previous HI16 reloc"
 msgstr "Ã©chec de repÃ©rage du rÃ©adressage HI16 prÃ©cÃ©dent"
 
-#: elf32-v850.c:2303
+#: elf32-v850.c:2306
 msgid "could not locate special linker symbol __gp"
 msgstr "ne peut repÃ©rer le symbole spÃ©cial d'Ã©dition de lien __gp"
 
-#: elf32-v850.c:2307
+#: elf32-v850.c:2310
 msgid "could not locate special linker symbol __ep"
 msgstr "ne peut repÃ©rer le symbole spÃ©cial d'Ã©dition de lien __ep"
 
-#: elf32-v850.c:2311
+#: elf32-v850.c:2314
 msgid "could not locate special linker symbol __ctbp"
 msgstr "ne peut repÃ©rer le symbole spÃ©cial d'Ã©dition de lien __ctbp"
 
-#: elf32-v850.c:2532
+#: elf32-v850.c:2535
 #, c-format
 msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"
 msgstr "erreur: %pB a besoin d'un alignement sur 8 octets mais %pB est dÃ©fini pour un alignement sur 4 octets"
 
-#: elf32-v850.c:2548
+#: elf32-v850.c:2551
 #, c-format
 msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles"
 msgstr "erreur: %pB utilise des doubles 64 bits alors que %pB utilise des doubles 32 bits"
 
-#: elf32-v850.c:2563
+#: elf32-v850.c:2566
 #, c-format
 msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
 msgstr "erreur: %pB utilise FPU-3.0 mais %pB ne supporte que FPU-2.0"
 
-#: elf32-v850.c:2595
+#: elf32-v850.c:2598
 #, c-format
 msgid " alignment of 8-byte entities: "
 msgstr " alignement d'entitÃ©s de 8 octets:"
 
-#: elf32-v850.c:2598
+#: elf32-v850.c:2601
 #, c-format
 msgid "4-byte"
 msgstr "4 octets"
 
-#: elf32-v850.c:2599
+#: elf32-v850.c:2602
 #, c-format
 msgid "8-byte"
 msgstr "8 octets"
 
-#: elf32-v850.c:2600 elf32-v850.c:2612
+#: elf32-v850.c:2603 elf32-v850.c:2615
 #, c-format
 msgid "not set"
 msgstr "pas dÃ©fini"
 
-#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636
-#: elf32-v850.c:2647 elf32-v850.c:2658
+#: elf32-v850.c:2604 elf32-v850.c:2616 elf32-v850.c:2628 elf32-v850.c:2639
+#: elf32-v850.c:2650 elf32-v850.c:2661
 #, c-format
 msgid "unknown: %x"
 msgstr "inconnu: %x"
 
-#: elf32-v850.c:2607
+#: elf32-v850.c:2610
 #, c-format
 msgid " size of doubles: "
 msgstr " taille des doubles: "
 
-#: elf32-v850.c:2610
+#: elf32-v850.c:2613
 #, c-format
 msgid "4-bytes"
 msgstr "4 octets"
 
-#: elf32-v850.c:2611
+#: elf32-v850.c:2614
 #, c-format
 msgid "8-bytes"
 msgstr "8 octets"
 
-#: elf32-v850.c:2619
+#: elf32-v850.c:2622
 #, c-format
 msgid " FPU support required: "
 msgstr " support du FPU requis: "
 
-#: elf32-v850.c:2622
+#: elf32-v850.c:2625
 #, c-format
 msgid "FPU-2.0"
 msgstr "FPU-2.0"
 
-#: elf32-v850.c:2623
+#: elf32-v850.c:2626
 #, c-format
 msgid "FPU-3.0"
 msgstr "FPU-3.0"
 
-#: elf32-v850.c:2624
+#: elf32-v850.c:2627
 #, c-format
 msgid "none"
 msgstr "aucun"
 
-#: elf32-v850.c:2631
+#: elf32-v850.c:2634
 #, c-format
 msgid "SIMD use: "
 msgstr "utilisation SIMD: "
 
-#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656
+#: elf32-v850.c:2637 elf32-v850.c:2648 elf32-v850.c:2659
 #, c-format
 msgid "yes"
 msgstr "oui"
 
-#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657
+#: elf32-v850.c:2638 elf32-v850.c:2649 elf32-v850.c:2660
 #, c-format
 msgid "no"
 msgstr "non"
 
-#: elf32-v850.c:2642
+#: elf32-v850.c:2645
 #, c-format
 msgid "CACHE use: "
 msgstr "utilisation CACHE: "
 
-#: elf32-v850.c:2653
+#: elf32-v850.c:2656
 #, c-format
 msgid "MMU use: "
 msgstr "utilisation MMU: "
 
-#: elf32-v850.c:2820 elf32-v850.c:2876
+#: elf32-v850.c:2823 elf32-v850.c:2879
 #, c-format
 msgid "%pB: architecture mismatch with previous modules"
 msgstr "%pB: l'architecture ne concorde pas avec les modules prÃ©cÃ©dents"
 
 #. xgettext:c-format.
-#: elf32-v850.c:2894
+#: elf32-v850.c:2897
 #, c-format
 msgid "private flags = %lx: "
 msgstr "fanions privÃ©s = %lx: "
 
-#: elf32-v850.c:2899
+#: elf32-v850.c:2902
 #, c-format
 msgid "unknown v850 architecture"
 msgstr "architecture v850 inconnue"
 
-#: elf32-v850.c:2901
+#: elf32-v850.c:2904
 #, c-format
 msgid "v850 E3 architecture"
 msgstr "architecture v850 E3"
 
-#: elf32-v850.c:2903 elf32-v850.c:2910
+#: elf32-v850.c:2906 elf32-v850.c:2913
 #, c-format
 msgid "v850 architecture"
 msgstr "architecture v850"
 
-#: elf32-v850.c:2911
+#: elf32-v850.c:2914
 #, c-format
 msgid "v850e architecture"
 msgstr "architecture v850e"
 
-#: elf32-v850.c:2912
+#: elf32-v850.c:2915
 #, c-format
 msgid "v850e1 architecture"
 msgstr "architecture v850e1"
 
-#: elf32-v850.c:2913
+#: elf32-v850.c:2916
 #, c-format
 msgid "v850e2 architecture"
 msgstr "architecture v850e2"
 
-#: elf32-v850.c:2914
+#: elf32-v850.c:2917
 #, c-format
 msgid "v850e2v3 architecture"
 msgstr "architecture v850e2v3"
 
-#: elf32-v850.c:2915
+#: elf32-v850.c:2918
 #, c-format
 msgid "v850e3v5 architecture"
 msgstr "architecture v850e3v5"
 
-#: elf32-v850.c:3609 elf32-v850.c:3848
+#: elf32-v850.c:3592 elf32-v850.c:3831
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
 msgstr "%pB: %#<PRIx64>: attention: %s pointe vers l'insn inconnue"
 
-#: elf32-v850.c:3619 elf32-v850.c:3858
+#: elf32-v850.c:3602 elf32-v850.c:3841
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
 msgstr "%pB: %#<PRIx64>: attention: %s pointe vers l'insn inconnue %#x"
 
-#: elf32-v850.c:3665 elf32-v850.c:3893
+#: elf32-v850.c:3648 elf32-v850.c:3876
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
 msgstr "%pB: %#<PRIx64>: attention: %s pointe vers le rÃ©adressage non reconnu"
 
-#: elf32-v850.c:3705
+#: elf32-v850.c:3688
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: attention: %s pointe vers le rÃ©adressage non reconnu Ã  %#<PRIx64>"
 
-#: elf32-vax.c:540
+#: elf32-vax.c:539
 #, c-format
 msgid " [nonpic]"
 msgstr " [nonpic]"
 
-#: elf32-vax.c:543
+#: elf32-vax.c:542
 #, c-format
 msgid " [d-float]"
 msgstr " [d-float]"
 
-#: elf32-vax.c:546
+#: elf32-vax.c:545
 #, c-format
 msgid " [g-float]"
 msgstr " [g-float]"
 
-#: elf32-vax.c:632
+#: elf32-vax.c:631
 #, c-format
 msgid "%pB: warning: GOT addend of %<PRId64> to `%s' does not match previous GOT addend of %<PRId64>"
 msgstr "%pB: attention: ajout GOT de %<PRId64> Ã  Â«Â %sÂ Â» ne concorde par avec l'ajout GOT prÃ©cÃ©dent de %<PRId64>"
 
-#: elf32-vax.c:1446
+#: elf32-vax.c:1388
 #, c-format
 msgid "%pB: warning: PLT addend of %<PRId64> to `%s' from %pA section ignored"
 msgstr "%pB: attention: ignore l'ajout PLT de %<PRId64> Ã  Â«Â %sÂ Â» de la section %pA"
 
-#: elf32-vax.c:1572
+#: elf32-vax.c:1514
 #, c-format
 msgid "%pB: warning: %s relocation against symbol `%s' from %pA section"
 msgstr "%pB: attention: rÃ©adressage %s vers le symbole Â«Â %sÂ Â» de la section %pA"
 
-#: elf32-vax.c:1579
+#: elf32-vax.c:1521
 #, c-format
 msgid "%pB: warning: %s relocation to %#<PRIx64> from %pA section"
 msgstr "%pB: attention: rÃ©adressage %s vers %#<PRIx64> de la section %pA"
 
 # Les %s sont Â«Â withÂ Â» ou Â«Â withoutÂ Â» non traduits.
 # Heureusement, le fichier entier a Ã©tÃ© supprimÃ© dans les sources actuelles.
-#: elf32-visium.c:821
+#: elf32-visium.c:824
 #, c-format
 msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
 msgstr "%pB: compilÃ© %s -mtune=%s et liÃ© avec des modules compilÃ©s %s -mtune=%s"
@@ -3809,238 +4167,267 @@ msgstr "cpu=XGATE]"
 msgid "error reading cpu type from elf private data"
 msgstr "erreur lors de la lecture du type de CPU dans les donnÃ©es elf privÃ©es"
 
-#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353
-#: elf64-ia64.c:2353
+#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2077 elfnn-ia64.c:2346
 msgid "non-zero addend in @fptr reloc"
 msgstr "ajout non nul dans le rÃ©adressage @fptr"
 
-#: elf32-xtensa.c:937
+#: elf32-xtensa.c:998
 #, c-format
 msgid "%pB(%pA): invalid property table"
 msgstr "%pB(%pA): table de propriÃ©tÃ© invalide"
 
-#: elf32-xtensa.c:2675
+#: elf32-xtensa.c:2733
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): dÃ©calage de rÃ©adressage hors limite (taille=%#<PRIx64>)"
 
-#: elf32-xtensa.c:2758 elf32-xtensa.c:2881
+#: elf32-xtensa.c:2816 elf32-xtensa.c:2939
 msgid "dynamic relocation in read-only section"
 msgstr "rÃ©adressage dynamique dans une section en lecture seule"
 
-#: elf32-xtensa.c:2858
+#: elf32-xtensa.c:2916
 msgid "TLS relocation invalid without dynamic sections"
 msgstr "rÃ©adressage TLS incorrecte sans section dynamique"
 
-#: elf32-xtensa.c:3070
+#: elf32-xtensa.c:3129
 msgid "internal inconsistency in size of .got.loc section"
 msgstr "incohÃ©rence interne dans la taille de la section .got.loc"
 
-#: elf32-xtensa.c:3377
+#: elf32-xtensa.c:3435
 #, c-format
 msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
 msgstr "%pB: type de machine incompatible; sortie est 0x%x; entrÃ©e est 0x%x"
 
-#: elf32-xtensa.c:4608 elf32-xtensa.c:4616
+#: elf32-xtensa.c:4734 elf32-xtensa.c:4742
 msgid "attempt to convert L32R/CALLX to CALL failed"
 msgstr "Ã©chec de la tentative de convertir L32R/CALLX en CALL"
 
-#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899
+#: elf32-xtensa.c:6574 elf32-xtensa.c:6653 elf32-xtensa.c:8079
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): l'instruction ne peut pas Ãªtre dÃ©codÃ©e; la configuration est peut-Ãªtre erronÃ©e"
 
-#: elf32-xtensa.c:7638
+#: elf32-xtensa.c:7820
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): l'instruction ne peut pas Ãªtre dÃ©codÃ©e pour un rÃ©adressage XTENSA_ASM_SIMPLIFY; la configuration est peut-Ãªtre erronÃ©e"
 
-#: elf32-xtensa.c:9493
+#: elf32-xtensa.c:9678
 msgid "invalid relocation address"
 msgstr "adresse de rÃ©adressage incorrecte"
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9769
 msgid "overflow after relaxation"
 msgstr "dÃ©bordement aprÃ¨s la relÃ¢che"
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10915
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
 msgstr "%pB(%pA+%#<PRIx64>): correction inattendue pour le rÃ©adressage %s"
 
-#: elf64-alpha.c:472
+#: elf32-z80.c:473
+#, c-format
+msgid "%pB: unsupported bfd mach %#lx"
+msgstr "%pB: correspondance bfd %#lx non supportÃ©e"
+
+#: elf32-z80.c:518
+#, c-format
+msgid "%pB: unsupported mach %#x"
+msgstr "%pB: correspondance %#x non supportÃ©e"
+
+#: elf32-z80.c:546
+#, c-format
+msgid "%pB: unsupported arch %#x"
+msgstr "%pB: architecture %#x non supportÃ©e"
+
+#: elf64-alpha.c:474
 msgid "GPDISP relocation did not find ldah and lda instructions"
 msgstr "le rÃ©adressage GPDISP n'a pas repÃ©rÃ© les instructions ldah et lda"
 
-#: elf64-alpha.c:2463
+#: elf64-alpha.c:1985
+#, c-format
+msgid "%pB: dynamic relocation against a local symbol in read-only section `%pA'\n"
+msgstr "%pB: rÃ©adressage dynamique sur un symbole local dans la section en lecture seule Â«Â %pAÂ Â»\n"
+
+#: elf64-alpha.c:2437
 #, c-format
 msgid "%pB: .got subsegment exceeds 64K (size %d)"
 msgstr "%pB: le sous-segment .got excÃ¨de 64K (taille %d)"
 
-#: elf64-alpha.c:3018 elf64-alpha.c:3214
+#: elf64-alpha.c:2680 elflink.c:15481 elfnn-kvx.c:4022 elfnn-loongarch.c:1715
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%pB: rÃ©adressage dynamique sur Â«Â %pTÂ Â» dans la section en lecture seule Â«Â %pAÂ Â»\n"
+
+#: elf64-alpha.c:2975 elf64-alpha.c:3170
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
 msgstr "%pB: %pA+%#<PRIx64>: attention: rÃ©adressage de %s sur une insn inattendue"
 
-#: elf64-alpha.c:4415 elf64-alpha.c:4428
+#: elf64-alpha.c:4370 elf64-alpha.c:4383
 #, c-format
 msgid "%pB: gp-relative relocation against dynamic symbol %s"
 msgstr "%pB: rÃ©adressage relatif au gp vers le symbole dynamique %s"
 
-#: elf64-alpha.c:4484
+#: elf64-alpha.c:4439
 #, c-format
 msgid "%pB: change in gp: BRSGP %s"
 msgstr "%pB: changÃ© dans le GP: BRSGP %s"
 
-#: elf64-alpha.c:4509 mach-o.c:615
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:499
+#: elf64-alpha.c:4464 mach-o.c:625 elfnn-riscv.c:722 elfnn-riscv.c:921
+#: elfnn-riscv.c:963
 msgid "<unknown>"
 msgstr "<inconnu>"
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4470
 #, c-format
 msgid "%pB: !samegp reloc against symbol without .prologue: %s"
 msgstr "%pB: rÃ©adressage !samegp vers le symbole sans .prologue: %s"
 
-#: elf64-alpha.c:4573
+#: elf64-alpha.c:4528
 #, c-format
 msgid "%pB: unhandled dynamic relocation against %s"
 msgstr "%pB: rÃ©adressage dynamique non traitÃ© vers %s"
 
-#: elf64-alpha.c:4608
+#: elf64-alpha.c:4563
 #, c-format
 msgid "%pB: pc-relative relocation against undefined weak symbol %s"
 msgstr "%pB: rÃ©adressage relatif au PC vers le symbole faible non dÃ©fini %s"
 
-#: elf64-alpha.c:4674
+#: elf64-alpha.c:4629
 #, c-format
 msgid "%pB: dtp-relative relocation against dynamic symbol %s"
 msgstr "%pB: rÃ©adressage relatif au dtp vers le symbole dynamique %s"
 
-#: elf64-alpha.c:4699
+#: elf64-alpha.c:4654
 #, c-format
 msgid "%pB: tp-relative relocation against dynamic symbol %s"
 msgstr "%pB: rÃ©adressage relatif au tp vers le symbole dynamique %s"
 
+#. Only if it's not an unresolved symbol.
+#: elf64-bpf.c:344
+msgid "internal error: relocation not supported"
+msgstr "erreur interne: rÃ©adressage non supportÃ©"
+
 #: elf64-gen.c:71
 #, c-format
 msgid "%pB: Relocations in generic ELF (EM: %d)"
 msgstr "%pB: RÃ©adressages en format ELF gÃ©nÃ©rique (EM: %d)"
 
-#: elf64-hppa.c:2081
+#: elf64-hppa.c:2032
 #, c-format
 msgid "stub entry for %s cannot load .plt, dp offset = %<PRId64>"
 msgstr "l'entrÃ©e de l'Ã©bauche pour %s ne peut charger .plt, dÃ©calage dp = %<PRId64>"
 
-#: elf64-hppa.c:3286
+#: elf64-hppa.c:3236
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot reach %s"
 msgstr "%pB(%pA+%#<PRIx64>): ne peut atteindre %s"
 
-#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636
+#: elf64-ia64-vms.c:600 elfnn-ia64.c:641
 #, c-format
 msgid "%pB: can't relax br at %#<PRIx64> in section `%pA'; please use brl or indirect branch"
 msgstr "%pB: Ne peut relÃ¢cher br Ã  %#<PRIx64> dans la section Â«Â %pAÂ Â». Veuillez utiliser brl ou un branchement indirect."
 
-#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301
+#: elf64-ia64-vms.c:2032 elfnn-ia64.c:2294
 msgid "@pltoff reloc against local symbol"
 msgstr "rÃ©adressage @pltoff vers un symbole local"
 
-#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712
+#: elf64-ia64-vms.c:3278 elfnn-ia64.c:3671
 #, c-format
 msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
 msgstr "%pB: dÃ©bordement du segment de donnÃ©es court (%#<PRIx64> >= 0x400000)"
 
-#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722
+#: elf64-ia64-vms.c:3288 elfnn-ia64.c:3681
 #, c-format
 msgid "%pB: __gp does not cover short data segment"
 msgstr "%pB: __gp ne couvre pas le segment de donnÃ©es court"
 
-#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996
+#: elf64-ia64-vms.c:3558 elfnn-ia64.c:3954
 #, c-format
 msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
 msgstr "%pB: code non pic avec des rÃ©adressages imm vers le symbole dynamique Â«Â %sÂ Â»"
 
-#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064
+#: elf64-ia64-vms.c:3622 elfnn-ia64.c:4022
 #, c-format
 msgid "%pB: @gprel relocation against dynamic symbol %s"
 msgstr "%pB: rÃ©adressage @gprel vers le symbole dynamique %s"
 
-#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127
+#: elf64-ia64-vms.c:3681 elfnn-ia64.c:4085
 #, c-format
 msgid "%pB: linking non-pic code in a position independent executable"
 msgstr "%pB: liaison de code non-pic dans un exÃ©cutable Ã  position indÃ©pendante"
 
-#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265
+#: elf64-ia64-vms.c:3783 elfnn-ia64.c:4223
 #, c-format
 msgid "%pB: @internal branch to dynamic symbol %s"
 msgstr "%pB: branchement @internal vers le symbole dynamique %s"
 
-#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268
+#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4226
 #, c-format
 msgid "%pB: speculation fixup to dynamic symbol %s"
 msgstr "%pB: spÃ©culation d'ajustements vers le symbole dynamique %s"
 
-#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271
+#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4229
 #, c-format
 msgid "%pB: @pcrel relocation against dynamic symbol %s"
 msgstr "%pB: rÃ©adressage @pcrel vers le symbole dynamique %s"
 
-#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468
+#: elf64-ia64-vms.c:3913 elfnn-ia64.c:4426
 msgid "unsupported reloc"
 msgstr "rÃ©adressage non supportÃ©e"
 
-#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506
+#: elf64-ia64-vms.c:3950 elfnn-ia64.c:4464
 #, c-format
 msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
 msgstr "%pB: section TLS manquante pour le rÃ©adressage %s vers Â«Â %sÂ Â» Ã  %#<PRIx64> dans la section Â«Â %pAÂ Â»."
 
-#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523
+#: elf64-ia64-vms.c:3967 elfnn-ia64.c:4481
 #, c-format
 msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
 msgstr "%pB: Ne peut pas relÃ¢cher br (%s) sur Â«Â %sÂ Â» Ã  %#<PRIx64> dans la section Â«Â %pAÂ Â» avec la taille %#<PRIx64> (> 0x1000000)."
 
-#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781
+#: elf64-ia64-vms.c:4263 elfnn-ia64.c:4742
 #, c-format
 msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
 msgstr "%pB: Ã©dition de liens trap-on-NULL-dereference avec des fichiers non-trapping"
 
-#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790
+#: elf64-ia64-vms.c:4272 elfnn-ia64.c:4751
 #, c-format
 msgid "%pB: linking big-endian files with little-endian files"
 msgstr "%pB: Ã©dition de liens entre des fichiers Ã  octets de poids fort et des fichiers Ã  octets de poids faible"
 
-#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799
+#: elf64-ia64-vms.c:4281 elfnn-ia64.c:4760
 #, c-format
 msgid "%pB: linking 64-bit files with 32-bit files"
 msgstr "%pB: Ã©dition de liens entre fichiers 64 bits et fichiers 32 bits"
 
-#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808
+#: elf64-ia64-vms.c:4290 elfnn-ia64.c:4769
 #, c-format
 msgid "%pB: linking constant-gp files with non-constant-gp files"
 msgstr "%pB: Ã©dition de liens entre fichiers constant-gp et fichiers non-constant-gp"
 
-#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818
+#: elf64-ia64-vms.c:4300 elfnn-ia64.c:4779
 #, c-format
 msgid "%pB: linking auto-pic files with non-auto-pic files"
 msgstr "%pB: Ã©dition de liens entre fichiers auto-pic et fichiers non-auto-pic"
 
-#: elf64-ia64-vms.c:5153 elflink.c:4894
+#: elf64-ia64-vms.c:5150 elflink.c:5338
 #, c-format
 msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
 msgstr "attention: alignement %u du symbole commun Â«Â %sÂ Â» dans %pB est plus grand que l'alignement (%u) de sa section %pA"
 
-#: elf64-ia64-vms.c:5160 elflink.c:4901
+#: elf64-ia64-vms.c:5157
 #, c-format
 msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
 msgstr "attention: alignement %u du symbole Â«Â %sÂ Â» dans %pB est plus petit que %u dans %pB"
 
-#: elf64-ia64-vms.c:5176 elflink.c:4918
+#: elf64-ia64-vms.c:5173 elflink.c:5367
 #, c-format
 msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
 msgstr "attention: taille du symbole Â«Â %sÂ Â» a changÃ© de %<PRIu64> dans %pB Ã  %<PRIu64> dans %pB"
 
-#: elf64-mips.c:4098
+#: elf64-mips.c:4102
 #, c-format
 msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
 msgstr "%pB(%pA): rÃ©adressage %<PRIu64> a un index de symbole %ld invalide"
@@ -4087,1022 +4474,1507 @@ msgstr "%pB: rÃ©adressage de registre ve
 msgid "%pB: directive LOCAL valid only with a register or absolute value"
 msgstr "%pB: directive LOCAL valide seulement avec un registre ou une valeur absolue"
 
-#: elf64-mmix.c:1744
+#: elf64-mmix.c:1742
 #, c-format
 msgid "%pB: LOCAL directive: register $%<PRId64> is not a local register; first global register is $%<PRId64>"
 msgstr "%pB: directive LOCAL: registre $%<PRId64> n'est pas un registre local; premier registre global est $%<PRId64>"
 
-#: elf64-mmix.c:2173
+#: elf64-mmix.c:2157
 #, c-format
 msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file"
 msgstr "%pB: erreur: multiple dÃ©finitions de Â«Â %sÂ Â»; dÃ©but de %s est initialisÃ© dans un prÃ©cÃ©dent fichier liÃ©"
 
-#: elf64-mmix.c:2228
+#: elf64-mmix.c:2212
 msgid "register section has contents\n"
 msgstr "registre de section contient\n"
 
-#: elf64-mmix.c:2418
+#: elf64-mmix.c:2402
 #, c-format
 msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
 msgstr "inconsistance interne: reste %lu != max %lu; merci de rapporter cette anomalie"
 
-#: elf64-ppc.c:3827
+#: elf64-ppc.c:1361
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "attention: %s devrait Ãªtre utilisÃ© au lieu de %s"
+
+#: elf64-ppc.c:4307
 #, c-format
 msgid "symbol '%s' has invalid st_other for ABI version 1"
 msgstr "le symbole Â«Â %sÂ Â» a un st_other invalide pour l'ABI Ã  la version 1"
 
-#: elf64-ppc.c:4002
+#: elf64-ppc.c:4490
 #, c-format
 msgid "%pB .opd not allowed in ABI version %d"
 msgstr "%pB .opd pas permis dans l'ABI Ã  la version %d"
 
-#: elf64-ppc.c:4523
+#: elf64-ppc.c:5085
 #, c-format
 msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
 msgstr "%H: le rÃ©adressage %s n'est pas supportÃ© dans les bibliothÃ¨ques partagÃ©es et les PIE\n"
 
-#: elf64-ppc.c:4919
+#: elf64-ppc.c:5255
+msgid "%H: %s reloc unsupported here\n"
+msgstr "%H: le rÃ©adressage %s n'est pas supportÃ© ici\n"
+
+#: elf64-ppc.c:5482
 #, c-format
 msgid "%pB uses unknown e_flags 0x%lx"
 msgstr "%pB utilise le e_flags 0x%lx inconnu"
 
-#: elf64-ppc.c:4927
+#: elf64-ppc.c:5490
 #, c-format
 msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
 msgstr "%pB: la version ABI %ld n'est pas compatible avec la sortie de l'ABI version %ld"
 
-#: elf64-ppc.c:4954
+#: elf64-ppc.c:5517
 #, c-format
 msgid " [abiv%ld]"
 msgstr " [abiv%ld]"
 
-#: elf64-ppc.c:6145
+#: elf64-ppc.c:6821
 msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
 msgstr "%P: le rÃ©adressage par copie sur Â«Â %pTÂ Â» nÃ©cessite un lien plt paresseux; Ã©vitez de mettre LD_BIND_NOW=1 ou mettez Ã  jour gcc\n"
 
-#: elf64-ppc.c:6417
+#: elf64-ppc.c:7088
 #, c-format
 msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
 msgstr "%pB: symbole indÃ©fini sur le rÃ©adressage R_PPC64_TOCSAVE"
 
-#: elf64-ppc.c:6644
+#: elf64-ppc.c:7343
 #, c-format
 msgid "dynreloc miscount for %pB, section %pA"
 msgstr "erreur de dÃ©compte de rÃ©adressage dynamique pour %pB, section %pA"
 
-#: elf64-ppc.c:6733
+#: elf64-ppc.c:7434
 #, c-format
 msgid "%pB: .opd is not a regular array of opd entries"
 msgstr "%pB: .opd n'est pas un tableau rÃ©gulier d'entrÃ©es opd"
 
-#: elf64-ppc.c:6743
+#: elf64-ppc.c:7444
 #, c-format
 msgid "%pB: unexpected reloc type %u in .opd section"
 msgstr "%pB: type de rÃ©adressage %u inattendu dans la section .opd"
 
-#: elf64-ppc.c:6765
+#: elf64-ppc.c:7466
 #, c-format
 msgid "%pB: undefined sym `%s' in .opd section"
 msgstr "%pB: symbole Â«Â %sÂ Â» indÃ©fini dans la section .opd"
 
-#: elf64-ppc.c:7249
+#. The issue is that __glink_PLTresolve saves r2, which is done
+#. because glibc ld.so _dl_runtime_resolve restores r2 to support
+#. a glibc plt call optimisation where global entry code is
+#. skipped on calls that resolve to the same binary.  The
+#. __glink_PLTresolve save of r2 is incompatible with code
+#. making tail calls, because the tail call might go via the
+#. resolver and thus overwrite the proper saved r2.
+#: elf64-ppc.c:7967
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr "attention: --plt-localentry est incompatible avec le code relatif au pc du power10"
+
+#: elf64-ppc.c:7975
 msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
 msgstr "attention: --plt-localentry est particuliÃ¨rement dangereux sans le support de ld.so pour dÃ©tecter des violations de l'ABI"
 
-#: elf64-ppc.c:7499
+#: elf64-ppc.c:8291
 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
 msgstr "%H __tls_get_addr a perdu l'argument, optimisation TLS dÃ©sactivÃ©e\n"
 
-#: elf64-ppc.c:7876 elf64-ppc.c:8513
+#: elf64-ppc.c:8726 elf64-ppc.c:9442
 #, c-format
 msgid "%s defined on removed toc entry"
 msgstr "%s dÃ©fini dans une entrÃ©e toc supprimÃ©e"
 
-#: elf64-ppc.c:8241
-#, c-format
-msgid "%H: toc optimization is not supported for %s instruction\n"
-msgstr "%H: l'optimisation toc n'est pas supportÃ©e pour l'instruction %s\n"
-
-#: elf64-ppc.c:8470
+#: elf64-ppc.c:9399
 #, c-format
 msgid "%H: %s references optimized away TOC entry\n"
 msgstr "%H: %s fait rÃ©fÃ©rence Ã  une entrÃ©e TOC supprimÃ©e par l'optimisation\n"
 
-#: elf64-ppc.c:9301
+#: elf64-ppc.c:9620
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%H: l'optimisation got/toc n'est pas supportÃ©e pour l'instruction %s\n"
+
+#: elf64-ppc.c:10515
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr "attention: abandon de la section dynamique %s"
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11668
 msgid "%P: cannot find opd entry toc for `%pT'\n"
 msgstr "%P: l'entrÃ©e toc de opd non trouvÃ©e pour Â«Â %pTÂ Â»\n"
 
-#: elf64-ppc.c:10303
+#: elf64-ppc.c:11818
 #, c-format
 msgid "long branch stub `%s' offset overflow"
 msgstr "dÃ©bordement de l'offset du branchement long de l'Ã©bauche Â«Â %sÂ Â»"
 
-#: elf64-ppc.c:10330
+#: elf64-ppc.c:11845
 #, c-format
 msgid "can't find branch stub `%s'"
 msgstr "ne peut repÃ©rer l'Ã©bauche de branchement Â«Â %sÂ Â»"
 
-#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791
+#: elf64-ppc.c:11906 elf64-ppc.c:12158 elf64-ppc.c:14724
 #, c-format
 msgid "%P: linkage table error against `%pT'\n"
 msgstr "%P: erreur de la table de liaison vers Â«Â %pTÂ Â»\n"
 
-#: elf64-ppc.c:10820
+#: elf64-ppc.c:12357
 #, c-format
 msgid "can't build branch stub `%s'"
 msgstr "ne peut construire l'Ã©bauche de branchement Â«Â %sÂ Â»"
 
-#: elf64-ppc.c:11779
+#: elf64-ppc.c:13384
 #, c-format
 msgid "%pB section %pA exceeds stub group size"
 msgstr "%pB section %pA dÃ©passe la taille du groupe d'Ã©bauche"
 
-#: elf64-ppc.c:13189 elf64-ppc.c:13208
+#: elf64-ppc.c:14904
+msgid "__tls_get_addr call offset overflow"
+msgstr "dÃ©bordement du dÃ©calage dans l'appel __tls_get_addr"
+
+#: elf64-ppc.c:15244 elf64-ppc.c:15263
 #, c-format
 msgid "%s offset too large for .eh_frame sdata4 encoding"
 msgstr "dÃ©calage %s trop grand pour l'encodage .eh_frame sdata4"
 
-#: elf64-ppc.c:13244
+#: elf64-ppc.c:15349
 #, c-format
-msgid "linker stubs in %u group\n"
-msgid_plural "linker stubs in %u groups\n"
-msgstr[0] "Ã©bauches de l'Ã©diteur de liens dans %u groupe\n"
-msgstr[1] "Ã©bauches de l'Ã©diteur de liens dans %u groupes\n"
+msgid "linker stubs in %u group"
+msgid_plural "linker stubs in %u groups"
+msgstr[0] "Ã©bauches de l'Ã©diteur de liens dans %u groupe"
+msgstr[1] "Ã©bauches de l'Ã©diteur de liens dans %u groupes"
 
-#: elf64-ppc.c:13248
+#: elf64-ppc.c:15356
 #, c-format
 msgid ""
+"%s, iter %u\n"
 "  branch         %lu\n"
-"  branch toc adj %lu\n"
-"  branch notoc   %lu\n"
-"  branch both    %lu\n"
 "  long branch    %lu\n"
-"  long toc adj   %lu\n"
-"  long notoc     %lu\n"
-"  long both      %lu\n"
 "  plt call       %lu\n"
-"  plt call save  %lu\n"
-"  plt call notoc %lu\n"
-"  plt call both  %lu\n"
 "  global entry   %lu"
 msgstr ""
-"  branchements          %lu\n"
-"  aj. branchements toc  %lu\n"
-"  branchements notoc    %lu\n"
-"  branchements les deux %lu\n"
-"  long branchements     %lu\n"
-"  aj. long toc          %lu\n"
-"  long notoc            %lu\n"
-"  long les deux         %lu\n"
-"  appels plt            %lu\n"
-"  appels plt save       %lu\n"
-"  appels plt notoc      %lu\n"
-"  appels plt les deux   %lu\n"
-"  entrÃ©es globales      %lu"
+"%s, itÃ©ration %u\n"
+"  branchement    %lu\n"
+"  branch. long   %lu\n"
+"  appel plt      %lu\n"
+"  entrÃ©e globale %lu"
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:15738
 #, c-format
 msgid "%H: %s used with TLS symbol `%pT'\n"
 msgstr "%H: %s utilisÃ© avec le symbole TLS Â«Â %pTÂ Â»\n"
 
-#: elf64-ppc.c:13585
+#: elf64-ppc.c:15740
 #, c-format
 msgid "%H: %s used with non-TLS symbol `%pT'\n"
 msgstr "%H: %s utilisÃ© avec le symbole non-TLS Â«Â %pTÂ Â»\n"
 
-#: elf64-ppc.c:14245
+#: elf64-ppc.c:16524
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
 msgstr "%H: il manque un nop Ã  l'appel Ã  Â«Â %pTÂ Â», toc ne peut Ãªtre rÃ©tablie, (Ã©bauche de l'appel plt)\n"
 
-#: elf64-ppc.c:14251
+#: elf64-ppc.c:16530
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
 msgstr "%H: il manque un nop Ã  l'appel Ã  Â«Â %pTÂ Â», toc ne peut Ãªtre rÃ©tablie, (Ã©bauche de la sauvegarde/ajustement de la toc)\n"
 
-#: elf64-ppc.c:14985
+#: elf64-ppc.c:17181
+#, c-format
+msgid "%H: %s against %pT is not supported\n"
+msgstr "%H: %s sur %pT n'est pas supportÃ©\n"
+
+#: elf64-ppc.c:17457
 #, c-format
 msgid "%H: %s for indirect function `%pT' unsupported\n"
 msgstr "%H: %s non supportÃ© pour la fonction indirecte Â«Â %pTÂ Â»\n"
 
-#: elf64-ppc.c:15097
+#: elf64-ppc.c:17545
+#, c-format
+msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
+msgstr "%X%P: %pB: %s vis-Ã -vis de %pT n'est pas supportÃ© par glibc comme rÃ©adressage dynamique\n"
+
+#: elf64-ppc.c:17600
 #, c-format
 msgid "%P: %pB: %s is not supported for `%pT'\n"
 msgstr "%P: %pB: %s n'est pas supportÃ© pour le symbole Â«Â %pTÂ Â»\n"
 
-#: elf64-ppc.c:15326
+#: elf64-ppc.c:17869
 #, c-format
 msgid "%H: error: %s not a multiple of %u\n"
 msgstr "%H: erreur: %s n'est pas un multiple de %u\n"
 
-#: elf64-ppc.c:15349
+#: elf64-ppc.c:17892
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr "%H: %s ne peut Ãªtre rÃ©solu par rapport Ã  Â«Â %pTÂ Â»\n"
 
-#: elf64-ppc.c:15446
+#: elf64-ppc.c:18037
 #, c-format
 msgid "%H: %s against `%pT': error %d\n"
 msgstr "%H: %s vers Â«Â %pTÂ Â»: erreur %d\n"
 
-#: elf64-s390.c:2576
+#: elf64-s390.c:2457
 #, c-format
 msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)"
 msgstr "%pB: rÃ©adressage non-PLT Â«Â %sÂ Â» pour le symbole dÃ©fini dans une bibliothÃ¨que partagÃ©e et accÃ©dÃ© depuis l'exÃ©cutable (recompilez le fichier avec -fPICÂ ?)"
 
-#: elf64-sparc.c:109 elfcode.h:1471
+#: elf64-s390.c:3066
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): misaligned symbol `%s' (%#<PRIx64>) for relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): symbole Â«Â %sÂ Â» mal alignÃ© (%#<PRIx64>) pour le rÃ©adressage %s"
+
+#: elf64-sparc.c:134 elfcode.h:1602
 #, c-format
 msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
 msgstr "%pB(%pA): rÃ©adressage %d a un index de symbole %ld invalide"
 
-#: elf64-sparc.c:467
+#: elf64-sparc.c:493
 #, c-format
 msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
 msgstr "%pB: seuls les registres %%g[2367] peuvent Ãªtre dÃ©clarÃ©s en utilisant les registres STT_REGISTER"
 
-#: elf64-sparc.c:488
+#: elf64-sparc.c:514
 #, c-format
 msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
 msgstr "registre %%g%d utilisÃ© de maniÃ¨re incompatible: %s dans %pB prÃ©cÃ©demment %s dans %pB"
 
-#: elf64-sparc.c:512
+#: elf64-sparc.c:538
 #, c-format
 msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
 msgstr "symbole Â«Â %sÂ Â» a des types qui diffÃ¨rent: REGISTRE dans %pB, prÃ©cÃ©demment %s dans %pB"
 
-#: elf64-sparc.c:559
+#: elf64-sparc.c:585
 #, c-format
 msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
 msgstr "Symbole Â«Â %sÂ Â» a des types qui diffÃ¨rent: %s dans %pB, prÃ©cÃ©demment REGISTRE dans %pB"
 
-#: elf64-sparc.c:691
+#: elf64-sparc.c:717
 #, c-format
 msgid "%pB: linking UltraSPARC specific with HAL specific code"
 msgstr "%pB: Ã©dition de liens spÃ©cifiques pour UltraSPARC avec du code spÃ©cifique HAL"
 
-#: elf64-x86-64.c:1412
+#: elf64-x86-64.c:1537
 msgid "hidden symbol "
 msgstr "symbole cachÃ© "
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1540
 msgid "internal symbol "
 msgstr "symbole interne "
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1543 elf64-x86-64.c:1547
 msgid "protected symbol "
 msgstr "symbole protÃ©gÃ© "
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1549
 msgid "symbol "
 msgstr "symbole "
 
-#: elf64-x86-64.c:1425 elf64-x86-64.c:1435
-msgid "; recompile with -fPIC"
-msgstr "; recompilez avec -fPIC"
-
-#: elf64-x86-64.c:1430
+#: elf64-x86-64.c:1555
 msgid "undefined "
 msgstr "non dÃ©fini "
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1565
 msgid "a shared object"
 msgstr "un objet partagÃ©"
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1567
+msgid "; recompile with -fPIC"
+msgstr "; recompilez avec -fPIC"
+
+#: elf64-x86-64.c:1572
 msgid "a PIE object"
 msgstr "un objet PIE"
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1574
 msgid "a PDE object"
 msgstr "un objet PDE"
 
+#: elf64-x86-64.c:1576
+msgid "; recompile with -fPIE"
+msgstr "; recompilez avec -fPIE"
+
 # Les %s%s au dÃ©but de %s%sÂ«Â %sÂ Â» peuvent Ãªtre Â«Â non dÃ©finiÂ Â» ou rien pour le premier et
 # un des fragments ci-dessus pour le second ce qui donne par exemple Â«Â symbole interneÂ non dÃ©finiÂ» en inversant les deux %s.
 # Malheureusement, on ne peut pas inverser les %s car la syntaxe %1$s a Ã©tÃ© ajoutÃ©e le 5/11/2017 Ã  bfd comme indiquÃ©
 # dans le bug https://sourceware.org/bugzilla/show_bug.cgi?id=22717.
 # L'avant dernier %s est l'un des trois messages ci-dessus telle que "un objet partagÃ©".
 # Le dernier %s collÃ© au dernier %s peut Ãªtre rien ou un des fragments traduits ci-dessus et commenÃ§ant par un point-virgule.
-#: elf64-x86-64.c:1446
+#: elf64-x86-64.c:1580
 #, c-format
 msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
 msgstr "%pB: rÃ©adressage %s vers %s%sÂ«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en crÃ©ant %s%s"
 
-#: elf64-x86-64.c:1931
+#: elf64-x86-64.c:2116
 #, c-format
 msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
 msgstr "%pB: le rÃ©adressage %s sur le symbole Â«Â %sÂ Â» n'est pas supportÃ© en mode x32"
 
-#: elf64-x86-64.c:2073
+#: elf64-x86-64.c:2266
 #, c-format
 msgid "%pB: '%s' accessed both as normal and thread local symbol"
 msgstr "%pB: symbole Â«Â %sÂ Â» accÃ©dÃ© Ã  la fois comme normal et comme local au thread"
 
-#: elf64-x86-64.c:2696
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5302
+#: elf64-x86-64.c:2926 elfnn-aarch64.c:5754 elfnn-riscv.c:2295
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
 msgstr "%pB: le rÃ©adressage %s vers le symbole STT_GNU_IFUNC Â«Â %sÂ Â» a l'opÃ©rande non nul: %<PRId64>"
 
-#: elf64-x86-64.c:2934
+#: elf64-x86-64.c:3189
 #, c-format
 msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
 msgstr "%pB: rÃ©adressage R_X86_64_GOTOFF64 sur le symbole %s Â«Â %sÂ Â» non dÃ©fini ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©"
 
 # Le %s protÃ©gÃ©e est soit Â«Â functionÂ Â» ou Â«Â dataÂ Â» sans traduction.
 # Cette construction scabreuse a dÃ©jÃ  Ã©tÃ© enlevÃ©e dans les sources.
-#: elf64-x86-64.c:2948
+#: elf64-x86-64.c:3203
 #, c-format
 msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
 msgstr "%pB: rÃ©adressage R_X86_64_GOTOFF64 vers la %s protÃ©gÃ©e Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©"
 
-#: elf64-x86-64.c:3208
+#: elf64-x86-64.c:3493
 #, c-format
 msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
 msgstr "%pB: l'opÃ©rande %s%#x dans le rÃ©adressage %s vers le symbole Â«Â %sÂ Â» Ã  %#<PRIx64> dans la section Â«Â %pAÂ Â» est hors limite"
 
-#: elf64-x86-64.c:3885
-msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"
-msgstr "%F%P: impossible de convertir le rÃ©adressage GOTPCREL: Ã©ditez les liens Ã  nouveau avec --no-relax\n"
+#: elf64-x86-64.c:3643 elflink.c:13796
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: entrÃ©e corrompue: %pB\n"
+
+#: elf64-x86-64.c:4410
+#, c-format
+msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
+msgstr " impossible de convertir le rÃ©adressage GOTPCREL par rapport Ã  Â«Â %sÂ Â»: Ã©ditez les liens Ã  nouveau avec --no-relax\n"
 
-#: elf64-x86-64.c:4043
+#: elf64-x86-64.c:4571
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
 msgstr "%F%pB: dÃ©bordement du dÃ©calage relatif au PC dans l'entrÃ©e PLT pour Â«Â %sÂ Â»\n"
 
-#: elf64-x86-64.c:4106
+#: elf64-x86-64.c:4644
 #, c-format
 msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
 msgstr "%F%pB: dÃ©bordement du dÃ©placement de branchement dans l'entrÃ©e PLT pour Â«Â %sÂ Â»\n"
 
-#: elf64-x86-64.c:4159
+#: elf64-x86-64.c:4697
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
 msgstr "%F%pB: dÃ©bordement du dÃ©calage relatif au PC dans l'entrÃ©e PLT GOT pour Â«Â %sÂ Â»\n"
 
-#: elfcode.h:323
-msgid "warning: %pB has a corrupt section with a size (%"
-msgstr "attention: %pB a une section corrompue avec une taille (%"
+#: elfcode.h:342
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr "attention: %pB a une section qui s'Ã©tend au delÃ  de la fin du fichier"
+
+#: elfcode.h:790
+#, c-format
+msgid "warning: %pB has a corrupt string table index"
+msgstr "attention: %pB a un index de table de chaÃ®nes corrompu"
+
+#: elfcode.h:838
+#, c-format
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr "attention: %pB a un en-tÃªte de programme avec un alignement invalide"
 
-#: elfcode.h:768
+#: elfcode.h:1056
 #, c-format
-msgid "warning: %pB has a corrupt string table index - ignoring"
-msgstr "attention: %pB a un index de table de chaÃ®nes corrompu - ignorÃ©"
+msgid "%pB: %pA+%<PRIx64>: relocation addend %<PRIx64> too large"
+msgstr "%pB: %pA+%<PRIx64>: le terme de rÃ©adressage %<PRIx64> est trop grand"
 
-#: elfcode.h:1212
+#: elfcode.h:1322
 #, c-format
 msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
 msgstr "%pB: compteur de version (%<PRId64>) ne concorde pas avec le symbole du compteur (%ld)"
 
-#: elfcore.h:300
+#: elfcore.h:280
 #, c-format
-msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
-msgstr "attention: %pB est tronquÃ©: taille attendue du cÅ“ur du fichier >= %<PRIu64>, obtenu: %<PRIu64>"
+msgid "warning: %pB has a segment extending past end of file"
+msgstr "attention: %pB a un segment qui s'Ã©tend au delÃ  de la fin du fichier"
 
-#: elflink.c:1367
+#: elflink.c:1397
 #, c-format
 msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
 msgstr "%s: dÃ©finition TLS dans %pB section %pA ne correspond pas Ã  la dÃ©finition non TLS dans %pB section %pA"
 
-#: elflink.c:1373
+#: elflink.c:1403
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
 msgstr "%s: rÃ©fÃ©rence TLS dans %pB ne correspond pas Ã  la rÃ©fÃ©rence non TLS dans %pB"
 
-#: elflink.c:1379
+#: elflink.c:1409
 #, c-format
 msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
 msgstr "%s: dÃ©finition TLS dans %pB section %pA ne correspond pas Ã  la rÃ©fÃ©rence TLS dans %pB"
 
-#: elflink.c:1385
+#: elflink.c:1415
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
 msgstr "%s: rÃ©fÃ©rence TLS dans %pB ne correspond pas Ã  la dÃ©finition non TLS dans %pB section %pA"
 
-#: elflink.c:2075
+#: elflink.c:2127
 #, c-format
 msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
 msgstr "%pB: attention: redÃ©finition inattendue du symbole indirect avec version Â«Â %sÂ Â»"
 
-#: elflink.c:2452
+#: elflink.c:2626
 #, c-format
 msgid "%pB: version node not found for symbol %s"
 msgstr "%pB: version du nÅ“ud pas trouvÃ©e pour le symbole %s"
 
-#: elflink.c:2541
+#: elflink.c:2717
 #, c-format
 msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
 msgstr "%pB: mauvais index du symbole de rÃ©adressage (%#<PRIx64> >= %#lx) pour l'offset %#<PRIx64> de la section Â«Â %pAÂ Â»"
 
-#: elflink.c:2553
+#: elflink.c:2729
 #, c-format
 msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
 msgstr "%pB: index de symbole non nul (%#<PRIx64>) pour l'offset %#<PRIx64> de la section Â«Â %pAÂ Â» quand le fichier objet n'a pas de table de symboles"
 
-#: elflink.c:2744
+#: elflink.c:2940
 #, c-format
 msgid "%pB: relocation size mismatch in %pB section %pA"
 msgstr "%pB: taille du rÃ©adressage ne concorde pas dans %pB section %pA"
 
-#: elflink.c:3066
+#: elflink.c:3269
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr "attention: type et taille du symbole dynamique Â«Â %sÂ Â» ne sont pas dÃ©finis"
 
-#: elflink.c:3128
+#: elflink.c:3329
 msgid "%P: copy reloc against protected `%pT' is dangerous\n"
 msgstr "%P: un rÃ©adressage copiÃ© envers un Â«Â %pTÂ Â» protÃ©gÃ© est dangereux\n"
 
-#: elflink.c:3932
+#: elflink.c:4306
 #, c-format
 msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
 msgstr "code machine ELF alternatif trouvÃ© (%d) dans %pB, %d est attendu"
 
-#: elflink.c:4598
+#: elflink.c:4789
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: dÃ©calage de version %lx invalide (max %lx)"
+
+#: elflink.c:4857
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr "%pB: symbole locale %s Ã  l'index %lu (>= sh_info de %lu)"
+
+#: elflink.c:5005
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: pas assez d'informations de version"
+
+#: elflink.c:5043
 #, c-format
 msgid "%pB: %s: invalid version %u (max %d)"
 msgstr "%pB: %s: version invalide %u (max %d)"
 
-#: elflink.c:4635
+#: elflink.c:5080
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr "%pB: %s: version requise invalide %d"
 
-#: elflink.c:5054
+#: elflink.c:5345
+#, c-format
+msgid "warning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pB"
+msgstr "attention: l'alignement %u du symbole normal Â«Â %sÂ Â» dans %pB est plus petit que %u utilisÃ© par la dÃ©finition commune dans %pB"
+
+#: elflink.c:5352
+msgid "warning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised."
+msgstr "attention: NOTEÂ : les dÃ©saccords d'alignements peuvent provoquer des problÃ¨mes rÃ©els. Il est conseillÃ© de contrÃ´ler."
+
+#: elflink.c:5374
+msgid "warning: NOTE: size discrepancies can cause real problems.  Investigation is advised."
+msgstr "attention: NOTEÂ : les dÃ©saccords de tailles peuvent provoquer des problÃ¨mes rÃ©els. Il est conseillÃ© de contrÃ´ler."
+
+#: elflink.c:5516
 #, c-format
 msgid "%pB: undefined reference to symbol '%s'"
 msgstr "%pB: rÃ©fÃ©rence au symbole non dÃ©fini Â«Â %sÂ Â»"
 
-#: elflink.c:6130
+#: elflink.c:6576
 #, c-format
 msgid "%pB: stack size specified and %s set"
 msgstr "%pB: taille de pile spÃ©cifiÃ©e et %s dÃ©fini"
 
-#: elflink.c:6134
+#: elflink.c:6580
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr "%pB: %s pas supportÃ©"
 
-#: elflink.c:6331
+#: elflink.c:6792
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr "%s: version non dÃ©finie: %s"
 
-#: elflink.c:6902
+#: elflink.c:7181
+msgid "error: creating an executable stack because of -z execstack command line option"
+msgstr "erreur: crÃ©ation d'une pile exÃ©cutable Ã  cause de l'option en ligne de commande -z execstack"
+
+#: elflink.c:7187
+msgid "warning: enabling an executable stack because of -z execstack command line option"
+msgstr "attention: activation d'une pile exÃ©cutable Ã  cause de l'option en ligne de commande -z execstack"
+
+#: elflink.c:7249
+#, c-format
+msgid "error: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)"
+msgstr "erreur: %s: dÃ©clenche la gÃ©nÃ©ration d'une pile exÃ©cutable (car il a une section .note.GNU-stack exÃ©cutable)"
+
+#: elflink.c:7255
+#, c-format
+msgid "warning: %s: requires executable stack (because the .note.GNU-stack section is executable)"
+msgstr "attention: %s: pile exÃ©cutable requise (car la section .note.GNU-stack est exÃ©cutable)"
+
+#: elflink.c:7263
+#, c-format
+msgid "error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack section"
+msgstr "erreur: %s: dÃ©clenche la gÃ©nÃ©ration d'une pile exÃ©cutable car il n'a pas de section .note.GNU-stack exÃ©cutable"
+
+#: elflink.c:7269
+#, c-format
+msgid "warning: %s: missing .note.GNU-stack section implies executable stack"
+msgstr "attention: %s: l'absence de la section .note.GNU-stack implique une pile exÃ©cutable"
+
+#: elflink.c:7272
+msgid "NOTE: This behaviour is deprecated and will be removed in a future version of the linker"
+msgstr "NOTE: Ce comportement est dÃ©prÃ©ciÃ© et sera supprimÃ© dans une version ultÃ©rieure de l'Ã©diteur de liens"
+
+#: elflink.c:7426
 #, c-format
 msgid "%pB: .preinit_array section is not allowed in DSO"
 msgstr "%pB: section .preinit_array n'est pas permise dans DSO"
 
-#: elflink.c:8359
+#: elflink.c:9017
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr "rÃ©fÃ©rence %s non dÃ©finie dans le symbole complexe: %s"
 
-#: elflink.c:8514
+#: elflink.c:9180 elflink.c:9188
+msgid "division by zero"
+msgstr "division par zÃ©ro"
+
+#: elflink.c:9202
 #, c-format
 msgid "unknown operator '%c' in complex symbol"
 msgstr "opÃ©rateur Â«Â %cÂ Â» inconnu dans le symbole complexe"
 
 #. PR 21524: Let the user know if a symbol was removed by garbage collection.
-#: elflink.c:8852
+#: elflink.c:9538
 #, c-format
 msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
 msgstr "%pB:%pA: erreur: symbole de rÃ©fÃ©rence des rÃ©adressages %s qui a Ã©tÃ© supprimÃ© par le ramasse miettes"
 
-#: elflink.c:8855
+#: elflink.c:9541
 #, c-format
 msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
 msgstr "%pB:%pA: erreur: essayez de rÃ©Ã©diter les liens avec --gc-keep-exported enabled."
 
-#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166
+#: elflink.c:9792 elflink.c:9810 elflink.c:9849 elflink.c:9867
 #, c-format
 msgid "%pB: unable to sort relocs - they are in more than one size"
 msgstr "%pB: impossible de trier les rÃ©adressages - plusieurs tailles rencontrÃ©es"
 
 #. The section size is not divisible by either -
 #. something is wrong.
-#: elflink.c:9125 elflink.c:9182
+#: elflink.c:9826 elflink.c:9883
 #, c-format
 msgid "%pB: unable to sort relocs - they are of an unknown size"
 msgstr "%pB: impossible de trier les rÃ©adressages - leur taille est inconnue"
 
-#: elflink.c:9234
+#: elflink.c:9935
 msgid "not enough memory to sort relocations"
 msgstr "pas assez de mÃ©moire pour trier les rÃ©adressages"
 
-#: elflink.c:9502
+#: elflink.c:10273
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr "%pB: trop de sections: %d (>= %d)"
 
-#: elflink.c:9782
+#: elflink.c:10549
 #, c-format
 msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: symbole interne Â«Â %sÂ Â» dans %pB est rÃ©fÃ©rencÃ© par DSO"
 
-#: elflink.c:9785
+#: elflink.c:10552
 #, c-format
 msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: symbole cachÃ© Â«Â %sÂ Â» dans %pB est rÃ©fÃ©rencÃ© par DSO"
 
-#: elflink.c:9788
+#: elflink.c:10555
 #, c-format
 msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: symbole local Â«Â %sÂ Â» dans %pB est rÃ©fÃ©rencÃ© par DSO"
 
-#: elflink.c:9874
+#: elflink.c:10641
 #, c-format
 msgid "%pB: could not find output section %pA for input section %pA"
 msgstr "%pB: ne peut repÃ©rer la section de sortie %pA pour la section d'entrÃ©e %pA"
 
-#: elflink.c:10028
+#: elflink.c:10795
 #, c-format
 msgid "%pB: protected symbol `%s' isn't defined"
 msgstr "%pB: symbole protÃ©gÃ© Â«Â %sÂ Â» n'est pas dÃ©fini"
 
-#: elflink.c:10031
+#: elflink.c:10798
 #, c-format
 msgid "%pB: internal symbol `%s' isn't defined"
 msgstr "%pB: symbole interne Â«Â %sÂ Â» n'est pas dÃ©fini"
 
-#: elflink.c:10034
+#: elflink.c:10801
 #, c-format
 msgid "%pB: hidden symbol `%s' isn't defined"
 msgstr "%pB: symbole cachÃ© Â«Â %sÂ Â» n'est pas dÃ©fini"
 
-#: elflink.c:10066
+#: elflink.c:10833
 #, c-format
 msgid "%pB: no symbol version section for versioned symbol `%s'"
 msgstr "%pB: pas de section de version de symbole pour le symbole avec version Â«Â %sÂ Â»"
 
-#: elflink.c:10679
-#, c-format
-msgid "error: %pB: size of section %pA is not multiple of address size"
-msgstr "erreur: %pB: le rÃ©adressage de la section %pA n'est pas un multiple de la taille des adresses"
-
-#: elflink.c:10724
+#: elflink.c:11514
 #, c-format
 msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
 msgstr "erreur: %pB contient un rÃ©adressage (%#<PRIx64>) pour la section %pA qui fait rÃ©fÃ©rence Ã  un symbole global inexistant"
 
-#: elflink.c:11484
+#: elflink.c:11984
 #, c-format
-msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
-msgstr "%pA a, Ã  la fois, des sections ordonnÃ©es [Â«Â %pAÂ Â» dans %pB] et dÃ©sordonnÃ©es [Â«Â %pAÂ Â» dans %pB]"
-
-#: elflink.c:11490
-#, c-format
-msgid "%pA has both ordered and unordered sections"
-msgstr "%pA a, Ã  la fois, des sections ordonnÃ©es et dÃ©sordonnÃ©es"
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "erreur: %pB: le rÃ©adressage de la section %pA n'est pas un multiple de la taille des adresses"
 
-#: elflink.c:11592
+#: elflink.c:12261
 #, c-format
 msgid "%pB: no symbol found for import library"
 msgstr "%pB: aucun symbole trouvÃ© dans la bibliothÃ¨que d'importation"
 
-#: elflink.c:12225
+#: elflink.c:12836
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr "%F%P: %pB: Ã©chec lors finalisation des rÃ©adressages relatifs\n"
+
+#: elflink.c:12913
 #, c-format
 msgid "%pB: file class %s incompatible with %s"
 msgstr "%pB: classe de fichier %s incompatible avec %s"
 
-#: elflink.c:12442
+#: elflink.c:13162
 #, c-format
 msgid "%pB: failed to generate import library"
 msgstr "%pB: Ã©chec de la gÃ©nÃ©ration de la bibliothÃ¨que d'importation"
 
-#: elflink.c:12561
+#: elflink.c:13330
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "attention: section %s a une taille nulle"
 
-#: elflink.c:12609
+#: elflink.c:13378
 #, c-format
 msgid "warning: section '%s' is being made into a note"
 msgstr "attention: section Â«Â %sÂ Â» changÃ© en une note"
 
-#: elflink.c:12701
+#: elflink.c:13472
 msgid "%P%X: read-only segment has dynamic relocations\n"
 msgstr "%P%X: segment en lecture seule a des rÃ©adressages dynamiques\n"
 
-#: elflink.c:12704
-msgid "%P: warning: creating a DT_TEXTREL in a shared object\n"
-msgstr "%P: attention: crÃ©ation d'un DT_TEXTREL dans un objet partagÃ©\n"
+#: elflink.c:13475
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
+msgstr "%P: attention: crÃ©ation de DT_TEXTREL dans un objet partagÃ©\n"
+
+#: elflink.c:13478
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr "%P: attention: crÃ©ation de DT_TEXTREL dans un PDE\n"
+
+#: elflink.c:13481
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr "%P: attention: crÃ©ation de DT_TEXTREL dans un PIE\n"
 
-#: elflink.c:12829
+#: elflink.c:13617
 msgid "%P%X: can not read symbols: %E\n"
 msgstr "%P%X: ne peut pas lire les symboles: %E\n"
 
-#: elflink.c:13002
-msgid "%F%P: corrupt input: %pB\n"
-msgstr "%F%P: entrÃ©e corrompue: %pB\n"
+#: elflink.c:14042
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
+msgstr "%F%P: %pB(%pA): erreur: une section linked-to est requise pour --gc-sections\n"
 
-#: elflink.c:13668
+#: elflink.c:14520
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
 msgstr "%pB: %pA+%#<PRIx64>: Pas de symbole trouvÃ© pour INHERIT"
 
-#: elflink.c:13844
+#: elflink.c:14561
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: section Â«Â %pAÂ Â»: entrÃ©e VTENTRY corrompue"
+
+#: elflink.c:14704
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr "INPUT_SECTION_FLAG %s non reconnu\n"
 
-#: elfxx-mips.c:1450
+#: elflink.c:15487
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%P: %pB: attention: rÃ©adressage sur Â«Â %sÂ Â» dans la section en lecture seule Â«Â %pAÂ Â»\n"
+
+#: elflink.c:15576
+msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
+msgstr "%P: attention: les fonctions indirectes GNU avec DT_TEXTREL pourraient rÃ©sulter en un plantage Ã  l'exÃ©cution; recompilez avec %s\n"
+
+#: elfxx-aarch64.c:477
+#, c-format
+msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr "%pB: avertissement: Le TLS faible est dÃ©fini par l'implÃ©mentation et pourrait ne pas fonctionner comme attendu"
+
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:10231 elfnn-aarch64.c:10238
+#, c-format
+msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
+msgstr "%pB: avertissement: BTI activÃ© par -z force-bti alors que toutes les entrÃ©es n'ont pas BTI dans la section NOTE."
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr "erreur: %pB: <la taille utilisÃ©e par AArch64 est corrompue: 0x%x>"
+
+#: elfxx-loongarch.c:1909
+#, c-format
+msgid "%pB: unsupported relocation type %s"
+msgstr "%pB: type de rÃ©adressage %s non supportÃ©"
+
+#: elfxx-loongarch.c:1937
+#, c-format
+msgid "%pB: unsupported bfd relocation type %#x"
+msgstr "%pB: type de rÃ©adressage bfd %#x non supportÃ©"
+
+#: elfxx-loongarch.c:2009
+#, c-format
+msgid "%pB: relocation %s right shift %d error 0x%lx"
+msgstr "%pB: rÃ©adressage %s dÃ©calage Ã  droite %d erreur 0x%lx"
+
+#: elfxx-loongarch.c:2028
+#, c-format
+msgid "%pB: relocation %s overflow 0x%lx"
+msgstr "%pB: rÃ©adressage %s dÃ©bordement 0x%lx"
+
+#: elfxx-mips.c:1541
 msgid "static procedure (no name)"
 msgstr "procÃ©dure statique (sans name)"
 
-#: elfxx-mips.c:5718
+#: elfxx-mips.c:5857
 msgid "MIPS16 and microMIPS functions cannot call each other"
 msgstr "Des fonctions MIPS16 et microMIPS ne peuvent pas s'appeler l'une l'autre"
 
-#: elfxx-mips.c:6485
+#: elfxx-mips.c:6627
 msgid "%X%H: unsupported JALX to the same ISA mode\n"
 msgstr "%X%H: JALX vers le mÃªme mode ISA n'est pas supportÃ©\n"
 
-#: elfxx-mips.c:6518
+#: elfxx-mips.c:6660
 msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n"
 msgstr "%X%H: saut non supportÃ© entre modes ISAÂ ; envisagez de recompiler avec l'interliage activÃ©\n"
 
-#: elfxx-mips.c:6563
+#: elfxx-mips.c:6705
 msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n"
 msgstr "%X%H: impossible de convertir les branchements vers JALX entre modes ISA: rÃ©adressage hors portÃ©e\n"
 
-#: elfxx-mips.c:6575
+#: elfxx-mips.c:6717
 msgid "%X%H: unsupported branch between ISA modes\n"
 msgstr "%X%H: branchement entre modes ISA non supportÃ©\n"
 
-#: elfxx-mips.c:7223
+#: elfxx-mips.c:7350
 #, c-format
 msgid "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
 msgstr "%pB: taille de section Â«Â .reginfoÂ Â» incorrecte; %<PRIu64> attendu, %<PRIu64> obtenu"
 
-#: elfxx-mips.c:7267 elfxx-mips.c:7502
+#: elfxx-mips.c:7394
 #, c-format
 msgid "%pB: warning: bad `%s' option size %u smaller than its header"
 msgstr "%pB: attention: mauvaise Â«Â %sÂ Â» taille d'option %u plus petite que son en-tÃªte"
 
-#: elfxx-mips.c:8300 elfxx-mips.c:8426
+#: elfxx-mips.c:7630
+#, c-format
+msgid "%pB: warning: truncated `%s' option"
+msgstr "%pB: attention: option Â«Â %sÂ Â» tronquÃ©e"
+
+#: elfxx-mips.c:8454 elfxx-mips.c:8580
 #, c-format
 msgid "%pB: warning: cannot determine the target function for stub section `%s'"
 msgstr "%pB: attention: ne peut pas dÃ©terminer la fonction cible de la section d'Ã©bauche Â«Â %sÂ Â»"
 
-#: elfxx-mips.c:8558
+#: elfxx-mips.c:8712
 #, c-format
 msgid "%pB: malformed reloc detected for section %s"
 msgstr "%pB: rÃ©adressage mal composÃ© dÃ©tectÃ© dans la section %s"
 
-#: elfxx-mips.c:8658
+#: elfxx-mips.c:8812
 #, c-format
 msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
 msgstr "%pB: rÃ©adressage GOT Ã  %#<PRIx64> pas attendu dans les exÃ©cutables"
 
-#: elfxx-mips.c:8796
+#: elfxx-mips.c:8952
 #, c-format
 msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: Le rÃ©adressage CALL16 Ã  %#<PRIx64> n'est pas sur un symbole global"
 
-#: elfxx-mips.c:9086
+#: elfxx-mips.c:9255
 #, c-format
 msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n"
 msgstr "%X%H: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC\n"
 
-#: elfxx-mips.c:9422
+#: elfxx-mips.c:9381
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr "Symbole IFUNC %s dans la table des symboles dynamiques â€“ IFUNC n'est pas supportÃ©"
+
+#: elfxx-mips.c:9384
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr "symbole non dynamique %s dans la table des symboles dynamiques"
+
+#: elfxx-mips.c:9604
 #, c-format
 msgid "non-dynamic relocations refer to dynamic symbol %s"
 msgstr "rÃ©adressages non dynamiques font rÃ©fÃ©rence au symbole dynamique %s"
 
-#: elfxx-mips.c:10350
+#: elfxx-mips.c:10539
 #, c-format
 msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %#<PRIx64> in section `%pA'"
 msgstr "%pB: ne trouve pas de rÃ©adressage LO16 correspondant sur Â«Â %sÂ Â» pour %s Ã  %#<PRIx64> de la section Â«Â %pAÂ Â»"
 
-#: elfxx-mips.c:10490
-msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
-msgstr "la taille des petites donnÃ©es de la section dÃ©passe 64KB; abaissez la limite de taille des petites donnÃ©es (voyez l'option -G)"
+#: elfxx-mips.c:10679
+msgid "small-data section too large; lower small-data size limit (see option -G)"
+msgstr "la taille des petites donnÃ©es de la section est trop grandeÂ ; abaissez la limite de taille des petites donnÃ©es (voyez l'option -G)"
 
-#: elfxx-mips.c:10509
+#: elfxx-mips.c:10698
 msgid "cannot convert a jump to JALX for a non-word-aligned address"
 msgstr "impossible de convertir un saut vers JALX pour une adresse non alignÃ©e sur un mot"
 
-#: elfxx-mips.c:10512
+#: elfxx-mips.c:10701
 msgid "jump to a non-word-aligned address"
 msgstr "saut vers une adresse non alignÃ©e sur un mot"
 
-#: elfxx-mips.c:10513
+#: elfxx-mips.c:10702
 msgid "jump to a non-instruction-aligned address"
 msgstr "saut vers une adresse non alignÃ©e sur une instruction"
 
-#: elfxx-mips.c:10516
+#: elfxx-mips.c:10705
 msgid "cannot convert a branch to JALX for a non-word-aligned address"
 msgstr "impossible de convertir un branchement vers JALX pour une adresse non alignÃ©e sur un mot"
 
-#: elfxx-mips.c:10518
+#: elfxx-mips.c:10707
 msgid "branch to a non-instruction-aligned address"
 msgstr "branchement vers une adresse non alignÃ©e sur une instruction"
 
-#: elfxx-mips.c:10520
+#: elfxx-mips.c:10709
 msgid "PC-relative load from unaligned address"
 msgstr "Chargement relatif au PC depuis une adresse non alignÃ©e"
 
-#: elfxx-mips.c:10798
+#: elfxx-mips.c:11009
 #, c-format
 msgid "%pB: `%pA' entry VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
 msgstr "%pB: l'entrÃ©e VMA Â«Â %pAÂ Â» de %#<PRIx64> est en dehors de la plage 32 bits supportÃ©e; envisagez d'utiliser Â«Â -Ttext-segment=â€¦Â Â»"
 
-#: elfxx-mips.c:10911 elfxx-mips.c:11484
+#: elfxx-mips.c:11124 elfxx-mips.c:11711
 #, c-format
 msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
 msgstr "%pB: Â«Â %pAÂ Â» offset de %<PRId64> depuis Â«Â %pAÂ Â» au delÃ  de la limite de ADDIUPC"
 
-#: elfxx-mips.c:11456
+#: elfxx-mips.c:11683
 #, c-format
 msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
 msgstr "%pB: le dÃ©but VMA Â«Â %pAÂ Â» de %#<PRIx64> est en dehors de la plage 32 bits supportÃ©e; envisagez d'utiliser Â«Â -Ttext-segment=â€¦Â Â»"
 
-#: elfxx-mips.c:14397
+#: elfxx-mips.c:13429 reloc.c:8605
+#, c-format
+msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgstr "%X%P: %pB(%pA): erreur: le rÃ©adressage pour le dÃ©calage %V n'a pas de valeur\n"
+
+#: elfxx-mips.c:14741
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr "%pB: Architecture %s inconnue"
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15269
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr "%pB: nom illÃ©gal de section Â«Â %pAÂ Â»"
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15546
 #, c-format
 msgid "%pB: warning: linking abicalls files with non-abicalls files"
 msgstr "%pB: attention: Ã©dition de liens des fichiers abicalls avec des fichiers non abicalls"
 
-#: elfxx-mips.c:15225
+#: elfxx-mips.c:15563
 #, c-format
 msgid "%pB: linking 32-bit code with 64-bit code"
 msgstr "%pB: Ã©dition de liens de code 32 bits avec du code 64 bits"
 
-#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338
+#: elfxx-mips.c:15595 elfxx-mips.c:15661 elfxx-mips.c:15676
 #, c-format
 msgid "%pB: linking %s module with previous %s modules"
 msgstr "%pB: Ã©dition de liens du module %s avec les modules prÃ©cÃ©dents %s"
 
-#: elfxx-mips.c:15281
+#: elfxx-mips.c:15619
 #, c-format
 msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
 msgstr "%pB: ABI ne concorde pas: Ã©dition de lien du module %s avec les modules prÃ©cÃ©dents %s"
 
-#: elfxx-mips.c:15306
+#: elfxx-mips.c:15644
 #, c-format
 msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
 msgstr "%pB: ASE ne concorde pas: Ã©dition de lien du module %s avec les modules prÃ©cÃ©dents %s"
 
-#: elfxx-mips.c:15440
+#: elfxx-mips.c:15778
 #, c-format
 msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
 msgstr "Attention: %pB utilise l'ABI virgule flottante inconnue %d (dÃ©finie par %pB), %pB utilise l'ABI virgule flottante inconnue %d"
 
-#: elfxx-mips.c:15446
+#: elfxx-mips.c:15784
 #, c-format
 msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
 msgstr "Attention: %pB utilise l'ABI virgule flottante inconnue %d (dÃ©finie par %pB), %pB utilise %s"
 
-#: elfxx-mips.c:15452
+#: elfxx-mips.c:15790
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
 msgstr "Attention: %pB utilise %s (dÃ©fini par %pB), %pB utilise l'ABI virgule flottante inconnue %d"
 
-#: elfxx-mips.c:15466
+#: elfxx-mips.c:15804
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
 msgstr "Attention: %pB utilise %s (dÃ©fini par %pB), %pB utilise Â«Â %sÂ Â»"
 
-#: elfxx-mips.c:15485
+#: elfxx-mips.c:15823
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
 msgstr "Attention: %pB utilise %s (dÃ©fini par %pB), %pB utilise l'ABI MSA inconnue %d"
 
-#: elfxx-mips.c:15497
+#: elfxx-mips.c:15835
 #, c-format
 msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
 msgstr "Attention: %pB utilise l'ABI MSA inconnue %d (dÃ©finie par %pB), %pB utilise %s"
 
-#: elfxx-mips.c:15506
+#: elfxx-mips.c:15844
 #, c-format
 msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
 msgstr "Attention: %pB utilise l'ABI MSA inconnue %d (dÃ©finie par %pB), %pB utilise l'ABI MSA inconnue %d"
 
-#: elfxx-mips.c:15568
+#: elfxx-mips.c:15906
 #, c-format
 msgid "%pB: endianness incompatible with that of the selected emulation"
 msgstr "%pB: systÃ¨me de poids fort ou faible incompatible avec celui sÃ©lectionnÃ© pour l'Ã©mulation"
 
-#: elfxx-mips.c:15582
+#: elfxx-mips.c:15920
 #, c-format
 msgid "%pB: ABI is incompatible with that of the selected emulation"
 msgstr "%pB: ABI est incompatible avec celui sÃ©lectionnÃ© pour l'Ã©mulation"
 
-#: elfxx-mips.c:15634
+#: elfxx-mips.c:15973
 #, c-format
 msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
 msgstr "%pB: attention: ISA incohÃ©rentes entre e_flags et .MIPS.abiflags"
 
-#: elfxx-mips.c:15639
+#: elfxx-mips.c:15978
 #, c-format
 msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
 msgstr "%pB: attention: ABI FP incohÃ©rentes entre .gnu.attributes and .MIPS.abiflags"
 
-#: elfxx-mips.c:15643
+#: elfxx-mips.c:15982
 #, c-format
 msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
 msgstr "%pB: attention: ASE incohÃ©rents entre e_flags et .MIPS.abiflags"
 
-#: elfxx-mips.c:15650
+#: elfxx-mips.c:15989
 #, c-format
 msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
 msgstr "%pB: attention: extensions ISA incohÃ©rentes entre e_flags et .MIPS.abiflags"
 
-#: elfxx-mips.c:15654
+#: elfxx-mips.c:15993
 #, c-format
 msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
 msgstr "%pB: attention: fanion inattendu dans le champ flags2 de .MIPS.abiflags (0x%lx)"
 
-#: elfxx-mips.c:15843
+#: elfxx-mips.c:16184
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr "-mips32r2 -mfp64 (12 callee-saved)"
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16246 elfxx-mips.c:16257
 msgid "None"
 msgstr "aucun"
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16248 elfxx-mips.c:16317
 msgid "Unknown"
 msgstr "Inconnu"
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16328
 #, c-format
 msgid "Hard or soft float\n"
 msgstr "Flottant matÃ©riel ou logiciel\n"
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16331
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr "Flottant matÃ©riel (double prÃ©cision)\n"
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16334
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr "Flottant matÃ©riel (simple prÃ©cision)\n"
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16337
 #, c-format
 msgid "Soft float\n"
 msgstr "Flottant logiciel\n"
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16340
 #, c-format
 msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
 msgstr "Flottant matÃ©riel (MIPS32r2 64 bits FPU 12 callee-saved)\n"
 
-#: elfxx-mips.c:16002
+#: elfxx-mips.c:16343
 #, c-format
 msgid "Hard float (32-bit CPU, Any FPU)\n"
 msgstr "Flottant matÃ©riel (processeur 32 bits, tout coprocesseur)\n"
 
-#: elfxx-mips.c:16005
+#: elfxx-mips.c:16346
 #, c-format
 msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
 msgstr "Flottant matÃ©riel (processeur 32 bits, coprocesseur 64 bits)\n"
 
-#: elfxx-mips.c:16008
+#: elfxx-mips.c:16349
 #, c-format
 msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
 msgstr "CompatibilitÃ© flottant matÃ©riel (processeur 32 bits, coprocesseur 64 bits)\n"
 
-#: elfxx-mips.c:16040
+#: elfxx-mips.c:16381
 #, c-format
 msgid " [abi=O32]"
 msgstr " [abi=O32]"
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16383
 #, c-format
 msgid " [abi=O64]"
 msgstr " [abi=O64]"
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16385
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [abi=EABI32]"
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16387
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [abi=EABI64]"
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16389
 #, c-format
 msgid " [abi unknown]"
 msgstr " [abi inconnu]"
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16391
 #, c-format
 msgid " [abi=N32]"
 msgstr " [abi=N32]"
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16393
 #, c-format
 msgid " [abi=64]"
 msgstr " [abi=64]"
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16395
 #, c-format
 msgid " [no abi set]"
 msgstr " [aucun jeu abi]"
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16420
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [ISA inconnu]"
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16440
 #, c-format
 msgid " [not 32bitmode]"
 msgstr " [aucun mode 32 bits]"
 
-#: elfxx-sparc.c:3113
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5286
+#: elfxx-riscv.c:1699
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr "l'extension x ISA Â«Â %sÂ Â» doit Ãªtre dÃ©finie avec les versions"
+
+#: elfxx-riscv.c:1705
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr "impossible de trouver les versions par dÃ©faut de l'extension ISA Â«Â %sÂ Â»"
+
+#: elfxx-riscv.c:1811
+#, c-format
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr "%s: la premiÃ¨re extension ISA doit Ãªtre Â«Â eÂ Â», Â«Â iÂ Â» ou Â«Â gÂ Â»"
+
+#: elfxx-riscv.c:1835
+#, c-format
+msgid "%s: unknown standard ISA extension or prefix class `%c'"
+msgstr "%s: extension ISA standard ou classe de prÃ©fixe Â«Â %cÂ Â» inconnue"
+
+#: elfxx-riscv.c:1871
+#, c-format
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr "%s: l'extension ISA prÃ©fixÃ©e Â«Â %sÂ Â» invalide est terminÃ©e par <nombre>p"
+
+#: elfxx-riscv.c:1895
+#, c-format
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr "%s: extension prÃ©fixÃ©e ISA Â«Â %sÂ Â» inconnue"
+
+#: elfxx-riscv.c:1919
+#, c-format
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr "%s: l'extension ISA prÃ©fixÃ©e doit sÃ©parer avec _"
+
+#: elfxx-riscv.c:1973
+#, c-format
+msgid "rv%de does not support the `h' extension"
+msgstr "rv%de ne supporte pas l'extension Â«Â hÂ Â»"
+
+#: elfxx-riscv.c:1981
+#, c-format
+msgid "rv%d does not support the `q' extension"
+msgstr "rv%d ne supporte pas l'extension Â«Â qÂ Â»"
+
+#: elfxx-riscv.c:1988
+#, c-format
+msgid "rv%d does not support the `zcf' extension"
+msgstr "rv%d ne supporte pas l'extension Â«Â zcfÂ Â»"
+
+#: elfxx-riscv.c:1995
+msgid "`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"
+msgstr "Â«Â zfinxÂ Â» est en conflit avec l'extension Â«Â f/d/q/zfh/zfhminÂ Â»"
+
+#: elfxx-riscv.c:2002
+msgid "`xtheadvector' is conflict with the `v' extension"
+msgstr "Â«Â xtheadvectorÂ Â» est en conflit avec l'extension Â«Â vÂ Â»"
+
+#: elfxx-riscv.c:2023
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr "les extensions zvl*b ont besoin d'activer l'extension Â«Â vÂ Â» ou bien Â«Â zveÂ Â»"
+
+#: elfxx-riscv.c:2085
+#, c-format
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr "%s: la chaÃ®ne ISA ne peut pas contenir de lettre majuscule"
+
+#: elfxx-riscv.c:2113
+#, c-format
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr "%s: la chaÃ®ne ISA doit commencer par rv32 ou rv64"
+
+#: elfxx-riscv.c:2339
+#, c-format
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr "une extension ISA invalide est terminÃ©e par <nombre>p dans l'architecture .option Â«Â %sÂ Â»"
+
+#: elfxx-riscv.c:2362
+#, c-format
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr "extension ISA Â«Â %sÂ Â» inconnue dans l'architecture .option Â«Â %sÂ Â»"
+
+#: elfxx-riscv.c:2373
+#, c-format
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr "impossible de + ou - l'extension de base Â«Â %sÂ Â» dans l'architecture .option Â«Â %sÂ Â»"
+
+#: elfxx-riscv.c:2613 elfxx-riscv.c:2861
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr "interne: INSN_CLASS_* inatteignable"
+
+#: elfxx-riscv.c:2648
+msgid "zihintntl' and `c', or `zihintntl' and `zca"
+msgstr "zihintntlÂ Â» et Â«Â cÂ Â» ou Â«Â zihintntlÂ Â» et Â«Â zca"
+
+#: elfxx-riscv.c:2653 elfxx-riscv.c:2671
+msgid "c' or `zca"
+msgstr "cÂ Â» ou Â«Â zca"
+
+#: elfxx-riscv.c:2659
+msgid "m' or `zmmul"
+msgstr "mÂ Â» ou Â«Â zmmul"
+
+#: elfxx-riscv.c:2677
+msgid "f' and `c', or `f' and `zcf"
+msgstr "fÂ Â» et Â«Â cÂ Â» ou Â«Â fÂ Â» et Â«Â zcf"
+
+#: elfxx-riscv.c:2682
+msgid "c' or `zcf"
+msgstr "cÂ Â» ou Â«Â zcf"
+
+#: elfxx-riscv.c:2688
+msgid "d' and `c', or `d' and `zcd"
+msgstr "dÂ Â» et Â«Â cÂ Â» ou Â«Â dÂ Â» et Â«Â zcd"
+
+#: elfxx-riscv.c:2693
+msgid "c' or `zcd"
+msgstr "cÂ Â» ou Â«Â zcd"
+
+#: elfxx-riscv.c:2695
+msgid "f' or `zfinx"
+msgstr "fÂ Â» ou Â«Â zfinx"
+
+#: elfxx-riscv.c:2697
+msgid "d' or `zdinx"
+msgstr "dÂ Â» ou Â«Â zdinx"
+
+#: elfxx-riscv.c:2699
+msgid "q' or `zqinx"
+msgstr "qÂ Â» ou Â«Â zqinx"
+
+#: elfxx-riscv.c:2701
+msgid "zfh' or `zhinx"
+msgstr "zfhÂ Â» ou Â«Â zhinx"
+
+#: elfxx-riscv.c:2705
+msgid "zfhmin' or `zhinxmin"
+msgstr "zfhminÂ Â» ou Â«Â zhinxmin"
+
+#: elfxx-riscv.c:2716
+msgid "zfhmin' and `d', or `zhinxmin' and `zdinx"
+msgstr "zfhminÂ Â» et Â«Â dÂ Â» ou Â«Â zhinxminÂ Â» et Â«Â zdinx"
+
+#: elfxx-riscv.c:2727
+msgid "zfhmin' and `q', or `zhinxmin' and `zqinx"
+msgstr "zfhminÂ Â» et Â«Â qÂ Â» ou Â«Â zhinxminÂ Â» et Â«Â zqinx"
+
+#: elfxx-riscv.c:2733
+msgid "d' and `zfa"
+msgstr "dÂ Â» et Â«Â zfa"
+
+# FrÃ©dÃ©ric: Les messages suivants sont remplacÃ©s dans un texte contenant Â«Â %sÂ Â» pour produire Â«Â fÂ Â» et Â«Â cÂ Â». Cette bidouille n'est pas sympa pour les traducteurs.
+# Je me demande comment les dÃ©veloppeurs s'y retrouventâ€¦
+#: elfxx-riscv.c:2741
+msgid "q' and `zfa"
+msgstr "qÂ Â» et Â«Â zfa"
+
+# FrÃ©dÃ©ric: Les messages suivants sont remplacÃ©s dans un texte contenant Â«Â %sÂ Â» pour produire Â«Â fÂ Â» et Â«Â cÂ Â». Cette bidouille n'est pas sympa pour les traducteurs.
+# Je me demande comment les dÃ©veloppeurs s'y retrouventâ€¦
+#: elfxx-riscv.c:2749
+msgid "zfh' and `zfa"
+msgstr "zfhÂ Â» et Â«Â zfa"
+
+#: elfxx-riscv.c:2759
+msgid "zfh' and `zfa', or `zvfh' and `zfa"
+msgstr "zfhÂ» et Â«Â zfaÂ Â» ou Â«Â zvfhÂ Â» et Â«Â zfa"
+
+#: elfxx-riscv.c:2764
+msgid "zfh' or `zvfh"
+msgstr "zfhÂ Â» ou Â«Â zvfh"
+
+#: elfxx-riscv.c:2780
+msgid "zbb' or `zbkb"
+msgstr "zbbÂ Â» ou Â«Â zbkb"
+
+#: elfxx-riscv.c:2782
+msgid "zbc' or `zbkc"
+msgstr "zbcÂ Â» ou Â«Â zbkc"
+
+#: elfxx-riscv.c:2790
+msgid "zknd' or `zkne"
+msgstr "zkndÂ Â» ou Â«Â zkne"
+
+#: elfxx-riscv.c:2796
+msgid "v' or `zve64x' or `zve32x"
+msgstr "vÂ Â» ou Â«Â zve64xÂ Â» ou Â«Â zve32x"
+
+#: elfxx-riscv.c:2798
+msgid "v' or `zve64d' or `zve64f' or `zve32f"
+msgstr "vÂ Â» ou Â«Â zve64dÂ Â» ou Â«Â zve64fÂ Â» ou Â«Â zve32f"
+
+#: elfxx-riscv.c:2800
+msgid "zvbb"
+msgstr "zvbb"
+
+#: elfxx-riscv.c:2802
+msgid "zvbc"
+msgstr "zvbc"
+
+#: elfxx-riscv.c:2804
+msgid "zvkb"
+msgstr "zvkb"
+
+#: elfxx-riscv.c:2806
+msgid "zvkg"
+msgstr "zvkg"
+
+#: elfxx-riscv.c:2808
+msgid "zvkned"
+msgstr "zvkned"
+
+#: elfxx-riscv.c:2810
+msgid "zvknha' or `zvknhb"
+msgstr "zvknhaÂ Â» ou Â«Â zvknhb"
+
+#: elfxx-riscv.c:2812
+msgid "zvksed"
+msgstr "zvksed"
+
+#: elfxx-riscv.c:2814
+msgid "zvksh"
+msgstr "zvksh"
+
+# FrÃ©dÃ©ric: Les messages suivants sont remplacÃ©s dans un texte contenant Â«Â %sÂ Â» pour produire Â«Â fÂ Â» et Â«Â cÂ Â». Cette bidouille n'est pas sympa pour les traducteurs.
+# Je me demande comment les dÃ©veloppeurs s'y retrouventâ€¦
+#: elfxx-riscv.c:2818
+msgid "zcb' and `zba"
+msgstr "zcbÂ Â» et Â«Â zba"
+
+# FrÃ©dÃ©ric: Les messages suivants sont remplacÃ©s dans un texte contenant Â«Â %sÂ Â» pour produire Â«Â fÂ Â» et Â«Â cÂ Â». Cette bidouille n'est pas sympa pour les traducteurs.
+# Je me demande comment les dÃ©veloppeurs s'y retrouventâ€¦
+#: elfxx-riscv.c:2820
+msgid "zcb' and `zbb"
+msgstr "zcbÂ Â» et Â«Â zbb"
+
+#: elfxx-riscv.c:2822
+msgid "zcb' and `zmmul', or `zcb' and `m"
+msgstr "zcbÂ Â» et Â«Â zmmulÂ Â» ou Â«Â zcbÂ Â» et Â«Â m"
+
+#: elfxx-riscv.c:2826
+msgid "h"
+msgstr "h"
+
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5738
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
 msgstr "%pB: le rÃ©adressage %s sur le symbole STT_GNU_IFUNC Â«Â %sÂ Â» n'est pas gÃ©rÃ© par %s"
 
-#: elfxx-tilegx.c:4254
+#: elfxx-tilegx.c:4126
 #, c-format
 msgid "%pB: cannot link together %s and %s objects"
 msgstr "%pB: ne peut lier ensemble les objets %s et %s"
 
-#: elfxx-x86.c:578
+#: elfxx-x86.c:536 elfxx-x86.c:3440
 #, c-format
-msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
-msgstr "%P: %pB: attention: rÃ©adressage sur Â«Â %sÂ Â» dans la section en lecture seule Â«Â %pAÂ Â»\n"
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB\n"
+msgstr "%F%P: %pB: rÃ©adressage par copie sur le symbole protÃ©gÃ© non copiable Â«Â %sÂ Â» dans %pB\n"
+
+#: elfxx-x86.c:1043
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr "%F%P: %pB: Ã©chec lors de l'allocation d'un enregistrement de rÃ©adressage relatif\n"
+
+#: elfxx-x86.c:1399
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: Ã©chec lors de l'allocation d'un champ de bits DT_RELR 64 bits\n"
+
+#: elfxx-x86.c:1435
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: Ã©chec lors de l'allocation d'un champ de bits DT_RELR 32 bits\n"
+
+#: elfxx-x86.c:1574
+#, c-format
+msgid "%F%P: %pB: failed to allocate memory for section `%pA'\n"
+msgstr "%F%P: %pB: Ã©chec lors de l'allocation de la mÃ©moire pour la section Â«Â %pAÂ Â»\n"
+
+#: elfxx-x86.c:1761
+#, c-format
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr "%F%P: %pB: la taille de la section de rÃ©adressage relatif compacte est changÃ©eÂ : nouvelle (%lu) != ancienne (%lu)\n"
+
+#: elfxx-x86.c:1783
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr "%F%P: %pB: Ã©chec lors de l'allocation d'une section de rÃ©adressage relatif compacte\n"
 
-#: elfxx-x86.c:1027
+#: elfxx-x86.c:2230
+#, c-format
+msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
+msgstr "%F%P: %pB: le rÃ©adressage de %s par rapport au symbole absolu Â«Â %sÂ Â» dans la section Â«Â %pAÂ Â» est interdit\n"
+
+#: elfxx-x86.c:2312
 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
 msgstr "%P: %pB: attention: rÃ©adressage dans la section Â«Â %pAÂ Â» en lecture seule\n"
 
-#: elfxx-x86.c:1383
-msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n"
-msgstr "%P%X: le segment en lecture seule a des rÃ©adressages IFUNC dynamiques; recompilez avec -fPIC\n"
+#: elfxx-x86.c:3193
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (offset: 0x%v, info: 0x%v, terme: 0x%v) sur Â«Â %sÂ Â» pour la section Â«Â %pAÂ Â» dans %pB\n"
+
+#: elfxx-x86.c:3199
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (offset: 0x%v, info: 0x%v) sur Â«Â %sÂ Â» pour la section Â«Â %pAÂ Â» dans %pB\n"
 
-#: elfxx-x86.c:2384
+#: elfxx-x86.c:3819
 #, c-format
 msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
 msgstr "erreur: %pB: <la taille de la propriÃ©tÃ© x86 (0x%x) est corrompue: 0x%x>"
 
-#: elfxx-x86.c:2609
-msgid "%F%P: failed to create GNU property section\n"
-msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section des propriÃ©tÃ©s GNU\n"
-
-#: elfxx-x86.c:2614
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: Ã©chec lors de l'alignement de la section\n"
+#: elfxx-x86.c:4166
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: avertissement: %s manquant\n"
+
+#: elfxx-x86.c:4167
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: erreur: %s manquant\n"
+
+#: elfxx-x86.c:4230
+msgid "IBT and SHSTK properties"
+msgstr "propriÃ©tÃ©s IBT et SHSTK"
+
+#: elfxx-x86.c:4232
+msgid "IBT property"
+msgstr "propriÃ©tÃ© IBT"
+
+#: elfxx-x86.c:4234
+msgid "SHSTK property"
+msgstr "propriÃ©tÃ© SHSTK"
+
+#: elfxx-x86.c:4239
+msgid "LAM_U48 property"
+msgstr "propriÃ©tÃ© LAM_U48"
+
+#: elfxx-x86.c:4244
+msgid "LAM_U57 property"
+msgstr "propriÃ©tÃ© LAM_U57"
 
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:4413
 msgid "%F%P: failed to create VxWorks dynamic sections\n"
 msgstr "%F%P: Ã©chec lors de la crÃ©ation des sections dynamiques VxWorks\n"
 
-#: elfxx-x86.c:2769
+#: elfxx-x86.c:4422
 msgid "%F%P: failed to create GOT sections\n"
 msgstr "%F%P: Ã©chec lors de la crÃ©ation des sections GOT\n"
 
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:4440
 msgid "%F%P: failed to create ifunc sections\n"
 msgstr "%F%P: Ã©chec lors de la crÃ©ation des sections ifunc\n"
 
-#: elfxx-x86.c:2828
+#: elfxx-x86.c:4477
 msgid "%F%P: failed to create GOT PLT section\n"
 msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section PLT GOT\n"
 
-#: elfxx-x86.c:2849
+#: elfxx-x86.c:4496
 msgid "%F%P: failed to create IBT-enabled PLT section\n"
 msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section PLT activÃ©e pour IBT\n"
 
-#: elfxx-x86.c:2864
-msgid "%F%P: failed to create BND PLT section\n"
-msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section PLT BND\n"
-
-#: elfxx-x86.c:2885
+#: elfxx-x86.c:4516
 msgid "%F%P: failed to create PLT .eh_frame section\n"
 msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section .eh_frame PLT\n"
 
-#: elfxx-x86.c:2898
+#: elfxx-x86.c:4529
 msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
 msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section .eh_frame PLT GOT\n"
 
-#: elfxx-x86.c:2912
+#: elfxx-x86.c:4543
 msgid "%F%P: failed to create the second PLT .eh_frame section\n"
 msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section .eh_frame PLT\n"
 
+#: elfxx-x86.c:4563
+msgid "%F%P: failed to create PLT .sframe section\n"
+msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section .sframe PLT\n"
+
+#: elfxx-x86.c:4578
+msgid "%F%P: failed to create second PLT .sframe section\n"
+msgstr "%F%P: Ã©chec lors de la crÃ©ation de la seconde section .sframe PLT\n"
+
+#: elfxx-x86.c:4618
+msgid "%X%P: attempted static link of dynamic object `%pB'\n"
+msgstr "%X%P: Ã©dition de lien statique tentÃ©e sur l'objet dynamique Â«Â %pBÂ Â»\n"
+
 #: ihex.c:230
 #, c-format
 msgid "%pB:%d: unexpected character `%s' in Intel Hex file"
@@ -5113,379 +5985,407 @@ msgstr "%pB:%d: caractÃ¨re inattendu Â«Â
 msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)"
 msgstr "%pB:%u: somme de contrÃ´le erronÃ©e dans le fichier Intel hexadÃ©cimal (attendu %u, obtenu %u)"
 
-#: ihex.c:394
+#: ihex.c:393
 #, c-format
 msgid "%pB:%u: bad extended address record length in Intel Hex file"
 msgstr "%pB:%u: longueur erronÃ©e de l'enregistrement d'adresse Ã©tendue dans le fichier Intel hexadÃ©cimal"
 
-#: ihex.c:412
+#: ihex.c:411
 #, c-format
 msgid "%pB:%u: bad extended start address length in Intel Hex file"
 msgstr "%pB:%u: longueur erronÃ©e d'adresse Ã©tendue de dÃ©but dans le fichier Intel hexadÃ©cimal"
 
-#: ihex.c:430
+#: ihex.c:429
 #, c-format
 msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
 msgstr "%pB:%u: longueur erronÃ©e de l'enregistrement d'adresse Ã©tendue linÃ©aire dans le fichier Intel hexadÃ©cimal"
 
-#: ihex.c:448
+#: ihex.c:447
 #, c-format
 msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
 msgstr "%pB:%u: longueur erronÃ©e d'adresse Ã©tendue linÃ©aire de dÃ©but dans le fichier Intel hexadÃ©cimal"
 
-#: ihex.c:466
+#: ihex.c:465
 #, c-format
 msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
 msgstr "%pB:%u: type ihex %u non reconnu dans le fichier Intel hexadÃ©cimal"
 
-#: ihex.c:585
+#: ihex.c:581
 #, c-format
 msgid "%pB: internal error in ihex_read_section"
 msgstr "%pB: erreur interne dans ihex_read_section"
 
-#: ihex.c:619
+#: ihex.c:614
 #, c-format
 msgid "%pB: bad section length in ihex_read_section"
 msgstr "%pB: longueur erronÃ©e de section dans ihex_read_section"
 
-#: ihex.c:793
+#: ihex.c:785
 #, c-format
 msgid "%pB 64-bit address %#<PRIx64> out of range for Intel Hex file"
 msgstr "%pB: l'adresse 64 bits %#<PRIx64> hors limite pour le fichier Intel hexadÃ©cimal"
 
-#: ihex.c:852
+#: ihex.c:843
 #, c-format
 msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
 msgstr "%pB: adresse %#<PRIx64> hors limite pour le fichier Intel hexadÃ©cimal"
 
-#: libbfd.c:937
+#: libbfd.c:1058
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr "%pB: impossible d'obtenir la section dÃ©compressÃ©e %pA"
 
-#: libbfd.c:1101
-#, c-format
-msgid "Deprecated %s called at %s line %d in %s\n"
-msgstr "%s dÃ©prÃ©ciÃ© appelÃ© Ã  %s dans la ligne %d dans %s\n"
-
-#: libbfd.c:1104
-#, c-format
-msgid "Deprecated %s called\n"
-msgstr "%s appel dÃ©prÃ©ciÃ©\n"
-
-#: linker.c:1697
+#: linker.c:1713
 #, c-format
 msgid "%pB: indirect symbol `%s' to `%s' is a loop"
 msgstr "%pB: symbole indirect Â«Â %sÂ Â» vers Â«Â %sÂ Â» est une boucle"
 
-#: linker.c:2567
+#: linker.c:1793
+msgid "%P: %pB: note: the message above does not take linker garbage collection into account\n"
+msgstr "%P: %pB: note: le message ci-dessus ne prend pas en compte la rÃ©cupÃ©ration du rebut par l'Ã©diteur de liens\n"
+
+#: linker.c:2591
 #, c-format
 msgid "attempt to do relocatable link with %s input and %s output"
 msgstr "tentative de rÃ©adressage d'un lien avec %s Ã  l'entrÃ©e et %s Ã  la sortie"
 
-#: linker.c:2853
+#: linker.c:2870
 #, c-format
 msgid "%pB: ignoring duplicate section `%pA'\n"
 msgstr "%pB: ignore les sections dupliquÃ©es Â«Â %pAÂ Â»\n"
 
-#: linker.c:2863 linker.c:2873
+#: linker.c:2880 linker.c:2890
 #, c-format
 msgid "%pB: duplicate section `%pA' has different size\n"
 msgstr "%pB: section dupliquÃ©e Â«Â %pAÂ Â» avec des tailles diffÃ©rentes\n"
 
-#: linker.c:2882 linker.c:2888
+#: linker.c:2904 linker.c:2912
 #, c-format
 msgid "%pB: could not read contents of section `%pA'\n"
 msgstr "%pB: ne peut pas lire le contenu de la section Â«Â %pAÂ Â»\n"
 
-#: linker.c:2893
+#: linker.c:2921
 #, c-format
 msgid "%pB: duplicate section `%pA' has different contents\n"
 msgstr "%pB: section dupliquÃ©e Â«Â %pAÂ Â» a des contenus diffÃ©rents\n"
 
-#: linker.c:3407
+#: linker.c:3440
 #, c-format
 msgid "%pB: compiled for a big endian system and target is little endian"
 msgstr "%pB: compilÃ© pour un systÃ¨me Ã  octets de poids fort alors que la cible est un systÃ¨me Ã  octets de poids faible"
 
-#: linker.c:3410
+#: linker.c:3443
 #, c-format
 msgid "%pB: compiled for a little endian system and target is big endian"
 msgstr "%pB: compilÃ© pour un systÃ¨me Ã  octets de poids faible alors que la cible est un systÃ¨me Ã  octets de poids fort"
 
-#: mach-o.c:632
+#: mach-o-arm.c:169 mach-o-arm.c:301
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr "paire de rÃ©adressage mach-o ARM mal formÃ©eÂ : le rÃ©adressage est le premier rÃ©adressage"
+
+#: mach-o-arm.c:185
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr "paire de rÃ©adressage mach-o ARM mal formÃ©eÂ : longueur invalideÂ : %d"
+
+#: mach-o-arm.c:200
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr "rÃ©adressage mach-o ARM sectdiff mal formÃ©Â : longueur invalideÂ : %d"
+
+#: mach-o-arm.c:215
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr "rÃ©adressage mach-o ARM local sectdiff mal formÃ©Â : longueur invalideÂ : %d"
+
+#: mach-o-arm.c:230
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr "rÃ©adressage mach-o ARM half sectdiffÂ : longueur invalideÂ : %d"
+
+#: mach-o-arm.c:262
+#, c-format
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr "rÃ©adressage mach-o ARM vanilla mal formÃ©Â : longueur invalideÂ : %d (pcrelÂ : %d)"
+
+#: mach-o-arm.c:332
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr "rÃ©adressage mach-o ARM mal formÃ©Â : type de rÃ©adressage inconnuÂ : %d"
+
+#: mach-o.c:640
 #, c-format
 msgid "<unknown mask flags>"
 msgstr "<fanions de masque inconnus>"
 
-#: mach-o.c:687
+#: mach-o.c:695
 msgid " (<unknown>)"
 msgstr "(<inconnu>)"
 
-#: mach-o.c:698
+#: mach-o.c:707
 #, c-format
 msgid " MACH-O header:\n"
 msgstr "En-tÃªte MACH-O:\n"
 
-#: mach-o.c:699
+#: mach-o.c:708
 #, c-format
 msgid "   magic:      %#lx\n"
 msgstr "  magique:     %#lx\n"
 
-#: mach-o.c:700
+#: mach-o.c:709
 #, c-format
 msgid "   cputype:    %#lx (%s)\n"
 msgstr "  typecpu:     %#lx (%s)\n"
 
-#: mach-o.c:702
+#: mach-o.c:711
 #, c-format
 msgid "   cpusubtype: %#lx%s\n"
 msgstr "  soustypecpu: %#lx%s\n"
 
-#: mach-o.c:704
+#: mach-o.c:713
 #, c-format
 msgid "   filetype:   %#lx\n"
 msgstr "  typefichier: %#lx\n"
 
-#: mach-o.c:705
+#: mach-o.c:714
 #, c-format
 msgid "   ncmds:      %#lx\n"
 msgstr "  ncmds:       %#lx\n"
 
-#: mach-o.c:706
+#: mach-o.c:715
 #, c-format
 msgid "   sizeocmds:  %#lx\n"
 msgstr "  taillecmds:  %#lx\n"
 
-#: mach-o.c:707
+#: mach-o.c:716
 #, c-format
 msgid "   flags:      %#lx\n"
 msgstr "  fanions:     %#lx\n"
 
-#: mach-o.c:708
+#: mach-o.c:717
 #, c-format
 msgid "   version:    %x\n"
 msgstr "  version:     %x\n"
 
 #. Urg - what has happened ?
-#: mach-o.c:743
+#: mach-o.c:752
 #, c-format
 msgid "incompatible cputypes in mach-o files: %ld vs %ld"
 msgstr "cputypes incompatibles dans les fichiers mach-o: %ld vs %ld"
 
-#: mach-o.c:912
+#: mach-o.c:921
 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
 msgstr "bfd_mach_o_canonicalize_symtab: impossible de charger les symboles"
 
-#: mach-o.c:2108
+#: mach-o.c:1513
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr "rÃ©adressage mach-o mal formÃ©Â : l'index de section est plus grand que le nombre de sections"
+
+#: mach-o.c:2155
 msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands."
 msgstr "dÃ©solÃ©: modtab, toc et extrefsyms ne sont pas encore implÃ©mentÃ©s pour les commandes dysymtab."
 
-#: mach-o.c:2554
+#: mach-o.c:2603
 #, c-format
 msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
 msgstr "mach-o: il y a trop de sections (%u) le maximum est 255,\n"
 
-#: mach-o.c:2661
+#: mach-o.c:2695
 #, c-format
 msgid "unable to allocate data for load command %#x"
 msgstr "impossible d'allouer les donnÃ©es pour la commande de chargement %#x"
 
-#: mach-o.c:2766
+#: mach-o.c:2800
 #, c-format
 msgid "unable to write unknown load command %#x"
 msgstr "impossible d'Ã©crire la commande de chargement inconnue %#x"
 
-#: mach-o.c:2950
+#: mach-o.c:2984
 #, c-format
 msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
 msgstr "adresse de section (%#<PRIx64>) en deÃ§Ã  du dÃ©but du segment (%#<PRIx64>)"
 
-#: mach-o.c:3092
+#: mach-o.c:3126
 #, c-format
 msgid "unable to layout unknown load command %#x"
 msgstr "impossible de disposer la commande de chargement inconnue %#x"
 
-#: mach-o.c:3628
+#: mach-o.c:3661
 #, c-format
-msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_32: valeur d'alignement dÃ©mesurÃ©e: %#lx, utilise 32 Ã  la place"
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: valeur d'alignement dÃ©mesurÃ©e: %#lx"
 
-#: mach-o.c:3671
+#: mach-o.c:3704
 #, c-format
-msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_64: valeur d'alignement dÃ©mesurÃ©e: %#lx, utilise 32 Ã  la place"
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_64: valeur d'alignement dÃ©mesurÃ©e: %#lx"
 
-#: mach-o.c:3722
+#: mach-o.c:3755
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"
 msgstr "bfd_mach_o_read_symtab_symbol: impossible de lire %d octets Ã  %u"
 
-#: mach-o.c:3741
+#: mach-o.c:3774
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
 msgstr "bfd_mach_o_read_symtab_symbol: nom hors limites (%lu >= %u)"
 
-#: mach-o.c:3824
+#: mach-o.c:3857
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: le symbole Â«Â %sÂ Â» spÃ©cifie la section %d invalide (max %lu): laissÃ© non dÃ©fini"
 
-#: mach-o.c:3843
+#: mach-o.c:3876
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: symbole Â«Â %sÂ Â» spÃ©cifie le champ de type 0x%x invalide: laissÃ© non dÃ©fini"
 
-#: mach-o.c:3920
-msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
-msgstr "bfd_mach_o_read_symtab_symbols: impossible d'allouer la mÃ©moire pour les symboles"
-
-#: mach-o.c:4931
+#: mach-o.c:5075
 #, c-format
 msgid "%pB: unknown load command %#x"
 msgstr "%pB: commande de chargement inconnue %#x"
 
-#: mach-o.c:5122
+#: mach-o.c:5274
 #, c-format
 msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
 msgstr "bfd_mach_o_scan: architecture 0x%lx/0x%lx inconnue"
 
-#: mach-o.c:5227
+#: mach-o.c:5396
 #, c-format
 msgid "unknown header byte-order value %#x"
 msgstr "la valeur d'ordre des octets de l'en-tÃªte %#x est inconnue"
 
-#: merge.c:878
+#: merge.c:1118
 #, c-format
 msgid "%pB: access beyond end of merged section (%<PRId64>)"
 msgstr "%pB: accÃ¨s au-delÃ  de la fin de la section fusionnÃ©e (%<PRId64>)"
 
-#: mmo.c:476
-#, c-format
-msgid "%pB: no core to allocate section name %s"
-msgstr "%pB: pas de noyau pour allouer un nom de section %s"
-
-#: mmo.c:541
+#: mmo.c:535
 #, c-format
 msgid "%pB: no core to allocate a symbol %d bytes long"
 msgstr "%pB: pas de noyau pour allouer un symbole de %d octets de longueur"
 
-#: mmo.c:955
+#: mmo.c:956
 #, c-format
 msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
 msgstr "%pB: tentative d'Ã©mettre du contenu Ã  une adresse %#<PRIx64> qui n'est pas un multiple de 4"
 
-#: mmo.c:1252
+#: mmo.c:1251
 #, c-format
 msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
 msgstr "%pB: fichier mmo invalide: valeur d'initialisation pour $255 n'est pas Â«Â MainÂ Â»\n"
 
-#: mmo.c:1399
+#: mmo.c:1398
 #, c-format
 msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
 msgstr "%pB: sÃ©quence de caractÃ¨res large 0x%02X 0x%02X non supportÃ©e aprÃ¨s le nom de symbole dÃ©butant par Â«Â %sÂ Â»\n"
 
-#: mmo.c:1633
+#: mmo.c:1414
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr "%pB: le nom de symbole dÃ©passe la longueur maximale donnÃ©e %d"
+
+#: mmo.c:1643
 #, c-format
 msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
 msgstr "%pB: fichier mmo invalide: lopcode Â«Â %dÂ Â» non supportÃ©\n"
 
-#: mmo.c:1644
+#: mmo.c:1654
 #, c-format
 msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
 msgstr "%pB: fichier mmo invalide: attendu YZ = 1 obtenu YZ = %d pour lop_quote\n"
 
-#: mmo.c:1682
+#: mmo.c:1698
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
 msgstr "%pB: fichier mmo invalide: attendu z = 1 ou z = 2, obtenu z = %d pour lop_loc\n"
 
-#: mmo.c:1733
+#: mmo.c:1749
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
 msgstr "%pB: fichier mmo invalide: attendu z = 1 ou z = 2, obtenu z = %d pour lop_fixo\n"
 
-#: mmo.c:1774
+#: mmo.c:1798
 #, c-format
 msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
 msgstr "%pB: fichier mmo invalide: attendu y = 0, obtenu y = %d pour lop_fixrx\n"
 
-#: mmo.c:1785
+#: mmo.c:1809
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
 msgstr "%pB: fichier mmo invalide: attendu z = 16 ou z = 24, obtenu z = %d pour lop_fixrx\n"
 
-#: mmo.c:1810
+#: mmo.c:1834
 #, c-format
 msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
 msgstr "%pB: fichier mmo invalide: octet de tÃªte du mot de l'opÃ©rande doit Ãªtre 0 ou 1, obtenu %d pour lop_fixrx\n"
 
-#: mmo.c:1835
+#: mmo.c:1863
 #, c-format
 msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
 msgstr "%pB: ne peut pas allouer un nom de fichier pour le no. de fichier %d, %d octets\n"
 
-#: mmo.c:1857
+#: mmo.c:1885
 #, c-format
 msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
 msgstr "%pB: fichier mmo invalide: no. de fichier %d Â«Â %sÂ Â», a dÃ©jÃ  Ã©tÃ© entrÃ© en tant que Â«Â %sÂ Â»\n"
 
-#: mmo.c:1871
+#: mmo.c:1900
 #, c-format
 msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
 msgstr "%pB: fichier mmo invalide: nom de fichier %d n'a pas Ã©tÃ© spÃ©cifiÃ© avant son utilisation\n"
 
-#: mmo.c:1978
+#: mmo.c:2012
 #, c-format
 msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
 msgstr "%pB: fichier mmo invalide: champs y et z de lop_stab non nul, y: %d, z: %d\n"
 
-#: mmo.c:2015
+#: mmo.c:2049
 #, c-format
 msgid "%pB: invalid mmo file: lop_end not last item in file\n"
 msgstr "%pB: fichier mmo invalide: lop_end n'est pas le dernier Ã©lement dans le fichier\n"
 
-#: mmo.c:2029
+#: mmo.c:2063
 #, c-format
 msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
 msgstr "%pB: fichier mmo invalide: YZ de lop_end (%ld) n'est pas Ã©gal au nombre de tetras du lop_stab prÃ©cÃ©dent (%ld)\n"
 
-#: mmo.c:2740
+#: mmo.c:2776
 #, c-format
 msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
 msgstr "%pB: table de symboles invalide: symbole Â«Â %sÂ Â» dupliquÃ©\n"
 
-#: mmo.c:2983
+#: mmo.c:3015
 #, c-format
-msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n"
-msgstr "%pB: DÃ©finition de symbole erronÃ©e: Â«Â MainÂ Â» initialisÃ© Ã  %s au lieu de l'adresse de dÃ©part %s\n"
+msgid "%pB: bad symbol definition: `Main' set to %<PRIx64> rather than the start address %<PRIx64>\n"
+msgstr "%pB: dÃ©finition de symbole erronÃ©e: Â«Â MainÂ Â» initialisÃ© Ã  %<PRIx64> au lieu de l'adresse de dÃ©part %<PRIx64>\n"
 
-#: mmo.c:3082
+#: mmo.c:3114
 #, c-format
 msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
 msgstr "%pB: attention: table de symboles trop grande pour mmo, plus grande que 65535 mots de 32 bits: %d. Seul Â«Â MainÂ Â» sera produit.\n"
 
-#: mmo.c:3128
+#: mmo.c:3160
 #, c-format
 msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
 msgstr "%pB: erreur interne, table de symbole a changÃ© de taille de %d Ã  %d mots\n"
 
-#: mmo.c:3181
+#: mmo.c:3213
 #, c-format
 msgid "%pB: internal error, internal register section %pA had contents\n"
 msgstr "%pB: erreur interne, registre interne de section %pA contient quelque chose\n"
 
-#: mmo.c:3232
+#: mmo.c:3264
 #, c-format
 msgid "%pB: no initialized registers; section length 0\n"
 msgstr "%pB: pas de registre initialisÃ©; section de longueur 0\n"
 
-#: mmo.c:3239
+#: mmo.c:3271
 #, c-format
 msgid "%pB: too many initialized registers; section length %<PRId64>"
 msgstr "%pB: trop de registres initialisÃ©s; longueur de section %<PRId64>"
 
-#: mmo.c:3244
+#: mmo.c:3276
 #, c-format
 msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
 msgstr "%pB: adresse de dÃ©part invalide pour des registres initialisÃ©s de longueur %<PRId64>: %#<PRIx64>"
@@ -5495,48 +6395,55 @@ msgstr "%pB: adresse de dÃ©part invalide
 msgid "unhandled OSF/1 core file section type %d"
 msgstr "type de section de fichier core OSF/1 %d non traitÃ©"
 
-#: pef.c:527
+#: pdp11.c:1588
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr "%pB: le symbole indique un recouvrement (pas supportÃ©)"
+
+#: pef.c:531
 #, c-format
 msgid "bfd_pef_scan: unknown architecture 0x%lx"
 msgstr "bfd_pef_scan: architecture 0x%lx inconnue"
 
-#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220
+#: pei-x86_64.c:174 pei-x86_64.c:228 pei-x86_64.c:238 pei-x86_64.c:263
+#: pei-x86_64.c:275 pei-x86_64.c:289 pei-x86_64.c:307 pei-x86_64.c:319
+#: pei-x86_64.c:331
 #, c-format
 msgid "warning: corrupt unwind data\n"
 msgstr "attention: donnÃ©es de dÃ©roulement corrompues\n"
 
 #. PR 17512: file: 2245-7442-0.004.
-#: pei-x86_64.c:315
+#: pei-x86_64.c:352
 #, c-format
 msgid "Unknown: %x"
 msgstr "Inconnu: %x"
 
-#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384
+#: pei-x86_64.c:403 pei-x86_64.c:413 pei-x86_64.c:422
 #, c-format
 msgid "warning: xdata section corrupt\n"
 msgstr "attention: section xdata corrompue\n"
 
-#: pei-x86_64.c:439
+#: pei-x86_64.c:477
 #, c-format
 msgid "Too many unwind codes (%ld)\n"
 msgstr "Trop de codes de dÃ©roulages (%ld)\n"
 
-#: pei-x86_64.c:529
+#: pei-x86_64.c:563
 #, c-format
 msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
 msgstr "Attention: la taille de la section %s (%ld) n'est pas un multiple de %d\n"
 
-#: pei-x86_64.c:536
+#: pei-x86_64.c:570
 #, c-format
 msgid "Warning: %s section size is zero\n"
 msgstr "Attention: la taille de la section %s est nulle\n"
 
-#: pei-x86_64.c:551
+#: pei-x86_64.c:585
 #, c-format
 msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
 msgstr "Attention: la taille de la section %s (%ld) est plus petite que la taille virtuelle (%ld)\n"
 
-#: pei-x86_64.c:560
+#: pei-x86_64.c:594
 #, c-format
 msgid ""
 "\n"
@@ -5545,12 +6452,12 @@ msgstr ""
 "\n"
 "La table de fonctions (interprÃ©tation du contenu de la section %s)\n"
 
-#: pei-x86_64.c:563
+#: pei-x86_64.c:597
 #, c-format
 msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
 msgstr " vma:\t\t\tAdresse DÃ©but\t Adresse Fin\t  Unwind Info\n"
 
-#: pei-x86_64.c:692
+#: pei-x86_64.c:722
 #, c-format
 msgid ""
 "\n"
@@ -5560,46 +6467,65 @@ msgstr ""
 "Vidange de %s\n"
 
 #. XXX code yet to be written.
-#: peicode.h:775
+#: peicode.h:820
 #, c-format
 msgid "%pB: unhandled import type; %x"
 msgstr "%pB: type d'importation non traitÃ©e; %x"
 
-#: peicode.h:781
+#: peicode.h:826
 #, c-format
 msgid "%pB: unrecognized import type; %x"
 msgstr "%pB: type d'importation non reconnu; %x"
 
-#: peicode.h:796
+#: peicode.h:841
 #, c-format
 msgid "%pB: unrecognized import name type; %x"
 msgstr "%pB: type de nom d'importation non reconnu: %x"
 
-#: peicode.h:1211
+#: peicode.h:1280
 #, c-format
 msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
 msgstr "%pB: type de machine non reconnu (0x%x) dans l'archive de librairie de formats d'importation"
 
-#: peicode.h:1224
+#: peicode.h:1293
 #, c-format
 msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
 msgstr "%pB: type de machine reconnue mais non traitÃ©e (0x%x) dans l'archive da la librairie de formats d'importation"
 
-#: peicode.h:1242
+#: peicode.h:1311
 #, c-format
 msgid "%pB: size field is zero in Import Library Format header"
 msgstr "%pB: taille du champ est zÃ©ro dans l'en-tÃªte de la librairie de formats d'importation"
 
-#: peicode.h:1274
+#: peicode.h:1337
 #, c-format
 msgid "%pB: string not null terminated in ILF object file"
 msgstr "%pB: chaÃ®ne n'est pas terminÃ©e par un zÃ©ro dans le fichier objet ILF"
 
-#: peicode.h:1330
+#: peicode.h:1393
 #, c-format
 msgid "%pB: error: debug data ends beyond end of debug directory"
 msgstr "%pB: erreur: les donnÃ©es de dÃ©bogage s'arrÃªtent aprÃ¨s la fin du rÃ©pertoire de dÃ©bogage"
 
+#: peicode.h:1563
+#, c-format
+msgid "%pB: adjusting invalid SectionAlignment"
+msgstr "%pB: ajustement du SectionAlignement invalide"
+
+#: peicode.h:1573
+#, c-format
+msgid "%pB: adjusting invalid FileAlignment"
+msgstr "%pB: ajustement du FileAlignment invalide"
+
+#: peicode.h:1581
+#, c-format
+msgid "%pB: invalid NumberOfRvaAndSizes"
+msgstr "%pB: NumberOfRvaAndSizes invalide"
+
+#: plugin.c:258
+msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr "framework de greffon: Ã  cours de descripteurs de fichiers. Essayez d'utiliser moins d'objets/archives\n"
+
 #: ppcboot.c:392
 #, c-format
 msgid ""
@@ -5653,32 +6579,17 @@ msgstr "Secteur de la partition[%d] = 0x
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
 msgstr "Longueur de la partition[%d] = 0x%.8lx (%ld)\n"
 
-#: reloc.c:8232
+#: reloc.c:8504
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr "INPUT_SECTION_FLAGS pas supportÃ©s"
 
-#: reloc.c:8333
-#, c-format
-msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
-msgstr "%X%P: %pB(%pA): erreur: le rÃ©adressage pour le dÃ©calage %V n'a pas de valeur\n"
-
-#: reloc.c:8420
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
-msgstr "%X%P: %pB(%pA): le rÃ©adressage Â«Â %pRÂ Â» n'est pas supportÃ©\n"
-
-#: reloc.c:8429
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
-msgstr "%X%P: %pB(%pA): le rÃ©adressage Â«Â %pRÂ Â» retourne une valeur %x non reconnue\n"
-
-#: reloc.c:8491
+#: reloc.c:8770
 #, c-format
 msgid "%pB: unrecognized relocation type %#x in section `%pA'"
 msgstr "%pB: rÃ©adressage inconnu (%#x) dans la section Â«Â %pAÂ Â»"
 
 #. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8495
+#: reloc.c:8774
 #, c-format
 msgid "is this version of the linker - %s - out of date ?"
 msgstr "la version de l'Ã©diteur de liens â€“ %s â€“ est-elle dÃ©passÃ©eÂ ?"
@@ -5688,7 +6599,23 @@ msgstr "la version de l'Ã©diteur de lien
 msgid "%pB: warning core file truncated"
 msgstr "%pB: fichier core d'avertissement tronquÃ©"
 
-#: som.c:5478
+#: som.c:3002
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of order"
+msgstr "%pB(%pA+%#<PRIx64>): dÃ©calage de rÃ©adressage %s pas dans le bon ordre"
+
+#: som.c:3015
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of range"
+msgstr "%pB(%pA+%#<PRIx64>): dÃ©calage de rÃ©adressage %s hors limite"
+
+#. User has specified a subspace without its containing space.
+#: som.c:5405
+#, c-format
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr "%pB[%pA]: pas de section de sortie pour l'espace %pA"
+
+#: som.c:5451
 #, c-format
 msgid ""
 "\n"
@@ -5697,7 +6624,7 @@ msgstr ""
 "\n"
 "En-tÃªte auxiliaire de l'exec\n"
 
-#: som.c:5787
+#: som.c:5760
 msgid "som_sizeof_headers unimplemented"
 msgstr "som_sizeof_headers non implÃ©mentÃ©"
 
@@ -5711,17 +6638,17 @@ msgstr "%pB:%d: caractÃ¨re inattendu Â«Â
 msgid "%pB:%d: byte count %d too small"
 msgstr "%pB:%d: nombre d'octets %d trop petit"
 
-#: srec.c:581 srec.c:615
+#: srec.c:580 srec.c:614
 #, c-format
 msgid "%pB:%d: bad checksum in S-record file"
 msgstr "%pB:%d: mauvaise somme de contrÃ´le dans le fichier S-record"
 
-#: stabs.c:279
+#: stabs.c:308
 #, c-format
 msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
 msgstr "%pB(%pA+%#lx): entrÃ©e des Ã©bauches a un indexe de chaÃ®ne invalide"
 
-#: syms.c:1091
+#: syms.c:1112
 msgid "unsupported .stab relocation"
 msgstr "rÃ©adressage du .stab non supportÃ©"
 
@@ -5729,65 +6656,74 @@ msgstr "rÃ©adressage du .stab non suppor
 msgid "corrupt EIHD record - size is too small"
 msgstr "enregistrement EIHD corrompu â€“ la taille est trop petite"
 
-#: vms-alpha.c:660
+#: vms-alpha.c:665
 #, c-format
 msgid "unable to read EIHS record at offset %#x"
 msgstr "impossible de lire l'enregistrement EIHS Ã  l'offset %#x"
 
-#: vms-alpha.c:1173
+#: vms-alpha.c:1157
+msgid "record is too small for symbol name length"
+msgstr "l'enregistrement est trop petit pour la longueur du nom de symbole"
+
+#: vms-alpha.c:1190
 #, c-format
 msgid "corrupt EGSD record: its size (%#x) is too small"
 msgstr "enregistrement EGSD corrompu: sa taille (%#x) est trop petite"
 
-#: vms-alpha.c:1197
+#: vms-alpha.c:1214
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)"
-msgstr "enregistrement EGSD corrompu: la taille (%#x) est plus grande que l'espace restant (%#x)"
+msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
+msgstr "type d'enregistrement EGSD %d corrompu: la taille (%#x) est plus grande que l'espace restant (%#x)"
 
-#: vms-alpha.c:1205
+#: vms-alpha.c:1224
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is too small"
-msgstr "enregistrement EGSD corrompu: la taille (%#x) est trop petite"
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
+msgstr "type d'enregistrement EGSD %d corrompu: la taille (%#x) est trop petite"
 
-#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390
+#: vms-alpha.c:1366
 #, c-format
 msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
 msgstr "enregistrement EGSD corrompu: son champ psindx est trop grand (%#lx)"
 
-#: vms-alpha.c:1419
+#: vms-alpha.c:1441
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr "sous type EGSD %d inconnu"
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1474
 #, c-format
 msgid "stack overflow (%d) in _bfd_vms_push"
 msgstr "dÃ©bordement de la pile (%d) dans _bfd_vms_push"
 
-#: vms-alpha.c:1465
+#: vms-alpha.c:1488
 msgid "stack underflow in _bfd_vms_pop"
 msgstr "sous dÃ©pilage de la pile dans _bfd_vms_pop"
 
+#: vms-alpha.c:1562
+#, c-format
+msgid "dst_define_location %u too large"
+msgstr "dst_define_location %u trop grand"
+
 #. These names have not yet been added to this switch statement.
-#: vms-alpha.c:1707
+#: vms-alpha.c:1765
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr "commande ETIR %d inconnue"
 
-#: vms-alpha.c:1738
+#: vms-alpha.c:1796
 msgid "corrupt vms value"
 msgstr "valeur vms corrompue"
 
-#: vms-alpha.c:1866
+#: vms-alpha.c:1927
 msgid "corrupt ETIR record encountered"
 msgstr "enregistrement ETIR corrompu rencontrÃ©"
 
-#: vms-alpha.c:1923
+#: vms-alpha.c:1989
 #, c-format
 msgid "bad section index in %s"
 msgstr "index de section erronÃ©e dans %s"
 
-#: vms-alpha.c:1936
+#: vms-alpha.c:2003
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr "commande STA %s non supportÃ©e"
@@ -5797,1468 +6733,1479 @@ msgstr "commande STA %s non supportÃ©e"
 #. Rotate.
 #. Redefine symbol to current location.
 #. Define a literal.
-#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396
+#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557
 #, c-format
 msgid "%s: not supported"
 msgstr "%s: pas supportÃ©"
 
-#: vms-alpha.c:2122
+#: vms-alpha.c:2217
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: non implÃ©mentÃ©"
 
-#: vms-alpha.c:2380
+#: vms-alpha.c:2382 vms-alpha.c:2397
+#, c-format
+msgid "invalid %s"
+msgstr "%s invalide"
+
+#. Divide by zero is supposed to give a result of zero,
+#. and a non-fatal warning message.
+#: vms-alpha.c:2457
+#, c-format
+msgid "%s divide by zero"
+msgstr "%s divise par zÃ©ro"
+
+#: vms-alpha.c:2523
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr "utilisation incorrecte de %s avec des contextes"
 
-#: vms-alpha.c:2414
+#: vms-alpha.c:2581
 #, c-format
 msgid "reserved cmd %d"
 msgstr "commande %d rÃ©servÃ©e"
 
-#: vms-alpha.c:2498
+#: vms-alpha.c:2665
 msgid "corrupt EEOM record - size is too small"
 msgstr "enregistrement EEOM corrompu â€“ taille trop petite"
 
-#: vms-alpha.c:2507
+#: vms-alpha.c:2674
 msgid "object module not error-free !"
 msgstr "module objet N'EST PAS sans erreurÂ !"
 
-#: vms-alpha.c:3831
+#: vms-alpha.c:4012
 #, c-format
 msgid "SEC_RELOC with no relocs in section %pA"
 msgstr "SEC_RELOC sans rÃ©adressages dans la section %pA"
 
-#: vms-alpha.c:3883 vms-alpha.c:4097
+#: vms-alpha.c:4064 vms-alpha.c:4292
 #, c-format
 msgid "size error in section %pA"
 msgstr "erreur de taille dans la section %pA"
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4235
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr "rÃ©adressages ALPHA_R_BSR parasite"
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4278
 #, c-format
 msgid "unhandled relocation %s"
 msgstr "rÃ©adressage %s non traitÃ©"
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4643
 #, c-format
 msgid "unknown source command %d"
 msgstr "commande source %d inconnue"
 
-#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456
-#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501
-#: vms-alpha.c:4507
+#: vms-alpha.c:4795 vms-alpha.c:4800 vms-alpha.c:4805 vms-alpha.c:4810
+#: vms-alpha.c:4815 vms-alpha.c:4838 vms-alpha.c:4843 vms-alpha.c:4848
+#: vms-alpha.c:4853
 #, c-format
 msgid "%s not implemented"
 msgstr "%s non implÃ©mentÃ©"
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4889
 #, c-format
 msgid "unknown line command %d"
 msgstr "commande de ligne %d inconnue"
 
-#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059
-#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097
+#: vms-alpha.c:5328
+msgid "corrupt reloc record"
+msgstr "enregistrement de rÃ©adressage corrompu"
+
+#: vms-alpha.c:5358 vms-alpha.c:5376 vms-alpha.c:5393 vms-alpha.c:5411
+#: vms-alpha.c:5424 vms-alpha.c:5436 vms-alpha.c:5449
 #, c-format
 msgid "unknown reloc %s + %s"
 msgstr "rÃ©adressage %s + %s inconnu"
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5508
 #, c-format
 msgid "unknown reloc %s"
 msgstr "rÃ©adressage %s inconnu"
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5522
 msgid "invalid section index in ETIR"
 msgstr "index de section incorrect dans ETIR"
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5531
 msgid "relocation for non-REL psect"
 msgstr "rÃ©adressage pour psect non-REL"
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5584
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr "symbole inconnu dans la commande %s"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:6003
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr "le rÃ©adressage (%d) est *INCONNU*"
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:6119
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (long=%u): "
 
-#: vms-alpha.c:5757
+#: vms-alpha.c:6124
 #, c-format
 msgid "   Error: The length is less than the length of an EMH record\n"
 msgstr "   Erreur: La longueur est plus petite que la longueur d'un enregistrement EMH\n"
 
-#: vms-alpha.c:5774
+#: vms-alpha.c:6141
 #, c-format
 msgid "   Error: The record length is less than the size of an EMH_MHD record\n"
 msgstr "   Erreur: La longueur de l'enregistrement est infÃ©rieure Ã  la taille de l'enregistrement EMH_MHD\n"
 
-#: vms-alpha.c:5777
+#: vms-alpha.c:6144
 #, c-format
 msgid "Module header\n"
 msgstr "En-tÃªte module\n"
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:6145
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   niveau de structure: %u\n"
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:6146
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   taille max d'enregistrement: %u\n"
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:6152
 #, c-format
 msgid "   Error: The module name is missing\n"
 msgstr "   Erreur: Le nom du module est manquant\n"
 
-#: vms-alpha.c:5791
+#: vms-alpha.c:6158
 #, c-format
 msgid "   Error: The module name is too long\n"
 msgstr "   Erreur: Le nom du module est trop long\n"
 
-#: vms-alpha.c:5794
+#: vms-alpha.c:6161
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   nom du module       : %.*s\n"
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:6165
 #, c-format
 msgid "   Error: The module version is missing\n"
 msgstr "   Erreur: La version du module est manquante\n"
 
-#: vms-alpha.c:5804
+#: vms-alpha.c:6171
 #, c-format
 msgid "   Error: The module version is too long\n"
 msgstr "   Erreur: La version du module est trop longue\n"
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:6174
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   version du module   : %.*s\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:6177
 #, c-format
 msgid "   Error: The compile date is truncated\n"
 msgstr "   Erreur: La date de compilation est tronquÃ©e\n"
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:6179
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   date de compilation : %.17s\n"
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:6184
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Nom du Processeur de Langage\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:6185
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   nom du language: %.*s\n"
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6189
 #, c-format
 msgid "Source Files Header\n"
 msgstr "En-tÃªte des fichiers sources\n"
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6190
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   fichier: %.*s\n"
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6194
 #, c-format
 msgid "Title Text Header\n"
 msgstr "En-tÃªte du texte du titre\n"
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6195
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   titre: %.*s\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6199
 #, c-format
 msgid "Copyright Header\n"
 msgstr "En-tÃªte du copyright\n"
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6200
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   copyright: %.*s\n"
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6204
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr "sous-type emh %u non pris en charge\n"
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6214
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (long=%u):\n"
 
-#: vms-alpha.c:5852
+#: vms-alpha.c:6219
 #, c-format
 msgid "   Error: The length is less than the length of an EEOM record\n"
 msgstr "   Erreur: La longueur est plus petite que la longueur d'un enregistrement EEOM\n"
 
-#: vms-alpha.c:5856
+#: vms-alpha.c:6223
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr "   nombre de paires de liaisons cond: %u\n"
 
-#: vms-alpha.c:5858
+#: vms-alpha.c:6225
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   code de complÃ©tion: %u\n"
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6229
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr "   fanions de transfert d'adr: 0x%02x\n"
 
-#: vms-alpha.c:5863
+#: vms-alpha.c:6230
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   psect transert adr: %u\n"
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6232
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   adresse de transert: 0x%08x\n"
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6241
 msgid " WEAK"
 msgstr " FAIBLE"
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6243
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6245
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6247 vms-alpha.c:6268
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6249
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6251
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6253
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6255
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6262
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6264
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6266
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6270
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6272
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6274
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6276
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6278
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6280
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6282
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6284
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6286
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6295
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (long=%u):\n"
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6310
 #, c-format
 msgid "  EGSD entry %2u (type: %u, len: %u): "
 msgstr "  entrÃ©e EGSD %2u (type: %u, long: %u): "
 
-#: vms-alpha.c:5947 vms-alpha.c:6198
+#: vms-alpha.c:6316 vms-alpha.c:6611
 #, c-format
-msgid "   Error: length larger than remaining space in record\n"
-msgstr "   Erreur: longueur plus grande que l'espace restant dans l'enregistrement\n"
+msgid "   Erroneous length\n"
+msgstr "   Longueur erronÃ©e\n"
 
-#: vms-alpha.c:5959
+#: vms-alpha.c:6329
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr "PSC - DÃ©finition de section du programme\n"
 
-#: vms-alpha.c:5960 vms-alpha.c:5977
+#: vms-alpha.c:6330 vms-alpha.c:6350
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   alignement : 2**%u\n"
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6331 vms-alpha.c:6351
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   fanions    : 0x%04x"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6335
 #, c-format
 msgid "   alloc (len): %u (0x%08x)\n"
 msgstr "  alloc (long): %u (0x%08x)\n"
 
-#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072
+#: vms-alpha.c:6337 vms-alpha.c:6403 vms-alpha.c:6471
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   nom        : %.*s\n"
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6349
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr "SPSC - Def de section de l'image partagÃ©e du programme\n"
 
-#: vms-alpha.c:5982
+#: vms-alpha.c:6355
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   alloc (long)  : %u (0x%08x)\n"
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6356
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   offset d'image: 0x%08x\n"
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6358
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   offset symvec : 0x%08x\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6361
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   nom           : %.*s\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6377
 #, c-format
 msgid "SYM - Global symbol definition\n"
 msgstr "SYM - DÃ©finition du symbol global\n"
 
-#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101
+#: vms-alpha.c:6378 vms-alpha.c:6459 vms-alpha.c:6483 vms-alpha.c:6506
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   fanions: 0x%04x"
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6381
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   offset psect: 0x%08x\n"
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6385
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   adresse code: 0x%08x\n"
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6387
 #, c-format
 msgid "   psect index for entry point : %u\n"
 msgstr "   index psect pour point d'entrÃ©e: %u\n"
 
-#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108
+#: vms-alpha.c:6390 vms-alpha.c:6490 vms-alpha.c:6513
 #, c-format
 msgid "   psect index : %u\n"
 msgstr "   index psect : %u\n"
 
-#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110
+#: vms-alpha.c:6393 vms-alpha.c:6493 vms-alpha.c:6516
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   nom         : %.*s\n"
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6401
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM - RÃ©fÃ©rence du symbol globaux\n"
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6416
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr "IDC - VÃ©rification de la consistance d'identitÃ©\n"
 
-#: vms-alpha.c:6035
+#: vms-alpha.c:6417
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   fanions       : 0x%08x"
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6421
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   correspondance id : %x\n"
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6423
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   sÃ©vÃ©ritÃ© d'erreur: %x\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6427
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   nom d'entitÃ©  : %.*s\n"
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6433
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   nom d'objet   : %.*s\n"
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6442
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   ident binaire : 0x%08x\n"
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6446
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   ident ascii   : %.*s\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6458
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG - DÃ©finition de symbole universel\n"
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6462
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr "   offset vecteur symbole: 0x%08x\n"
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6464
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   point d'entrÃ©e: 0x%08x\n"
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6466
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   descr proc : 0x%08x\n"
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6468
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   index psect: %u\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6482
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV - DÃ©finition symbole vectorisÃ©\n"
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6486
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   vecteur     : 0x%08x\n"
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6488 vms-alpha.c:6511
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   offset psect: %u\n"
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6505
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr "SYMM - DÃ©finition de symbole globale avec version\n"
 
-#: vms-alpha.c:6104
+#: vms-alpha.c:6509
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   masque de version: 0x%08x\n"
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6522
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr "type d'entrÃ©e egsd %u non supportÃ©\n"
 
-#: vms-alpha.c:6150
+#: vms-alpha.c:6561
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr "   index de liaison: %u, instruction de remplacement: 0x%08x\n"
 
-#: vms-alpha.c:6154
+#: vms-alpha.c:6565
 #, c-format
 msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
 msgstr "   index psect 1: %u, offset 1: 0x%08x %08x\n"
 
-#: vms-alpha.c:6159
+#: vms-alpha.c:6570
 #, c-format
 msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
 msgstr "   index psect 2: %u, offset 2: 0x%08x %08x\n"
 
-#: vms-alpha.c:6165
+#: vms-alpha.c:6576
 #, c-format
 msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
 msgstr "   index psect 3: %u, offset 3: 0x%08x %08x\n"
 
-#: vms-alpha.c:6170
+#: vms-alpha.c:6581
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "   nom global: %.*s\n"
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6593
 #, c-format
-msgid "  %s (len=%u+%u):\n"
-msgstr "  %s (long=%u+%u):\n"
+msgid "  %s (len=%u):\n"
+msgstr "  %s (long=%u):\n"
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6616
 #, c-format
-msgid "   (type: %3u, size: 4+%3u): "
-msgstr "   (type: %3u, taille: 4+%3u): "
+msgid "   (type: %3u, size: %3u): "
+msgstr "   (type: %3u, taille: %3u): "
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6622
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
-msgstr "STA_GBL (pile globals) %.*s\n"
+msgstr "STA_GBL (empile globals) %.*s\n"
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6626
 #, c-format
-msgid "STA_LW (stack longword) 0x%08x\n"
-msgstr "STA_LW (pile mot long) 0x%08x\n"
+msgid "STA_LW (stack longword)"
+msgstr "STA_LW (empile mot long)"
 
-#: vms-alpha.c:6215
+#: vms-alpha.c:6632
 #, c-format
-msgid "STA_QW (stack quadword) 0x%08x %08x\n"
-msgstr "STA_QW (pile quad mot) 0x%08x %08x\n"
+msgid "STA_QW (stack quadword)"
+msgstr "STO_QW (empile quad mot)"
 
-#: vms-alpha.c:6220
+#: vms-alpha.c:6639
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
-msgstr "STA_PQ (base pile psect + offset)\n"
+msgstr "STA_PQ (empile base psect + offset)\n"
 
-#: vms-alpha.c:6222
+#: vms-alpha.c:6642
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr "   psect: %u, offset: 0x%08x %08x\n"
 
-#: vms-alpha.c:6228
+#: vms-alpha.c:6648
 #, c-format
 msgid "STA_LI (stack literal)\n"
-msgstr "STA_LI (pile literale)\n"
+msgstr "STA_LI (empile littÃ©ral)\n"
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6651
 #, c-format
 msgid "STA_MOD (stack module)\n"
-msgstr "STA_MOD (pile module)\n"
+msgstr "STA_MOD (empile module)\n"
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6654
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr "STA_CKARG (compare les arguments de la procÃ©dure)\n"
 
-#: vms-alpha.c:6238
+#: vms-alpha.c:6658
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (stocke octet)\n"
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6661
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (stocke mot)\n"
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6664
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (stocke mot long)\n"
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6667
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (stocke quad mot)\n"
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6674
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr "STO_IMMR (stock rÃ©pÃ©tition immÃ©diate) %u octets\n"
 
-#: vms-alpha.c:6260
+#: vms-alpha.c:6683
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (stocke globale) %.*s\n"
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6688
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr "STO_CA (stock adresse code) %.*s\n"
 
-#: vms-alpha.c:6268
+#: vms-alpha.c:6692
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (stocke branche relative)\n"
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6695
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (stocke branche absolue)\n"
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6698
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr "STO_OFF (stocke offset de psect)\n"
 
-#: vms-alpha.c:6280
+#: vms-alpha.c:6705
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr "STO_IMM (stocke immediat) %u octets\n"
 
-#: vms-alpha.c:6287
+#: vms-alpha.c:6714
 #, c-format
 msgid "STO_GBL_LW (store global longword) %.*s\n"
 msgstr "STO_GBL_LW (stocke mot long global) %.*s\n"
 
-#: vms-alpha.c:6291
+#: vms-alpha.c:6718
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr "STO_OFF (stocke LP avec la signature de la procÃ©dure)\n"
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6721
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr "STO_BR_GBL (stocke branche globale) *todo*\n"
 
-#: vms-alpha.c:6297
+#: vms-alpha.c:6724
 #, c-format
 msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
 msgstr "STO_BR_PS (stocke branche psect + offset) *todo*\n"
 
-#: vms-alpha.c:6301
+#: vms-alpha.c:6728
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
-msgstr "OPR_NOP (pas d'operation)\n"
+msgstr "OPR_NOP (pas d'opÃ©ration)\n"
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6731
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (ajout)\n"
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6734
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (soustraction)\n"
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6737
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (multiplication)\n"
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6740
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (division)\n"
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6743
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (et logique)\n"
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6746
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (ou inclusif logique)\n"
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6749
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (ou exclusif logique)\n"
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6752
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (nÃ©gation)\n"
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6755
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (complÃ©ment)\n"
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6758
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (insertion champ)\n"
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6761
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (dÃ©calage arithmetique)\n"
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6764
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (dÃ©calage non signÃ©)\n"
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6767
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (rotation)\n"
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6770
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (selection)\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6773
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr "OPR_REDEF (redÃ©fini le symbole Ã  la position actuelle)\n"
 
-#: vms-alpha.c:6349
+#: vms-alpha.c:6776
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr "OPR_REDEF (dÃ©finir un litÃ©ral)\n"
 
-#: vms-alpha.c:6353
+#: vms-alpha.c:6780
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr "STC_LP (stocke pair de liaison cond)\n"
 
-#: vms-alpha.c:6357
+#: vms-alpha.c:6784
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr "STC_LP_PSB (stocke pair de liaison cond + signature)\n"
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:6788
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr "   index liaison: %u, procÃ©dure: %.*s\n"
 
-#: vms-alpha.c:6362
+#: vms-alpha.c:6795
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   signature: %.*s\n"
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6801
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (stocke cond globale)\n"
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6804
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr "   index liaison: %u, globale: %.*s\n"
 
-#: vms-alpha.c:6371
+#: vms-alpha.c:6809
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr "STC_GCA (stocke adresse code cond)\n"
 
-#: vms-alpha.c:6373
+#: vms-alpha.c:6812
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr "   index liaison: %u, nom procÃ©dure: %.*s\n"
 
-#: vms-alpha.c:6377
+#: vms-alpha.c:6817
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr "STC_PS (stocke psect cond + offset)\n"
 
-#: vms-alpha.c:6380
+#: vms-alpha.c:6821
 #, c-format
 msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
 msgstr "   index liaison: %u, psect: %u, offset: 0x%08x %08x\n"
 
-#: vms-alpha.c:6387
+#: vms-alpha.c:6828
 #, c-format
 msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
 msgstr "STC_NOP_GBL (stocke NOP cond Ã  l'adresse globale)\n"
 
-#: vms-alpha.c:6391
+#: vms-alpha.c:6832
 #, c-format
 msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
 msgstr "STC_NOP_PS (stocke NOP cond Ã  psect + offset)\n"
 
-#: vms-alpha.c:6395
+#: vms-alpha.c:6836
 #, c-format
 msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
 msgstr "STC_BSR_GBL (stocke BSR cond Ã  l'adresse globale)\n"
 
-#: vms-alpha.c:6399
+#: vms-alpha.c:6840
 #, c-format
 msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
 msgstr "STC_BSR_PS (stocke BSR cond Ã  psect + offset)\n"
 
-#: vms-alpha.c:6403
+#: vms-alpha.c:6844
 #, c-format
 msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
 msgstr "STC_LDA_GBL (stocke LDA cond Ã  l'adresse globale)\n"
 
-#: vms-alpha.c:6407
+#: vms-alpha.c:6848
 #, c-format
 msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
 msgstr "STC_LDA_PS (stocke LDA cond Ã  psect + offset)\n"
 
-#: vms-alpha.c:6411
+#: vms-alpha.c:6852
 #, c-format
 msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
 msgstr "STC_BOH_GBL (stocke BOH cond Ã  l'adresse globale)\n"
 
-#: vms-alpha.c:6415
+#: vms-alpha.c:6856
 #, c-format
 msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
 msgstr "STC_BOH_PS (stocke BOH cond Ã  psect + offset)\n"
 
-#: vms-alpha.c:6420
+#: vms-alpha.c:6861
 #, c-format
 msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
 msgstr "STC_NBH_GBL (stocke cond ou suggestion Ã  l'adresse globale)\n"
 
-#: vms-alpha.c:6424
+#: vms-alpha.c:6865
 #, c-format
 msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
 msgstr "STC_NBH_PS (stocke cond or suggestion Ã  psect + offset)\n"
 
-#: vms-alpha.c:6428
+#: vms-alpha.c:6869
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr "CTL_SETRB (fixe la base du rÃ©adressage)\n"
 
-#: vms-alpha.c:6434
+#: vms-alpha.c:6875
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr "CTL_AUGRB (augmente la base du rÃ©adressage) %u\n"
 
-#: vms-alpha.c:6438
+#: vms-alpha.c:6880
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (dÃ©finir position)\n"
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6883
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (fixer position)\n"
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6886
 #, c-format
 msgid "CTL_STKDL (stack defined location)\n"
 msgstr "CTL_STKDL (position dÃ©finie dans la pile)\n"
 
-#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997
+#: vms-alpha.c:6889 vms-alpha.c:7317 vms-alpha.c:7478
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*non pris en charge*\n"
 
-#: vms-alpha.c:6477 vms-alpha.c:6516
+#: vms-alpha.c:6914
 #, c-format
-msgid "cannot read GST record length\n"
-msgstr "impossible de lire la longueur de l'enregistrement GST\n"
+msgid "cannot read GST record header\n"
+msgstr "impossible de lire l'en-tÃªte de l'enregistrement GST\n"
 
 #. Ill-formed.
-#: vms-alpha.c:6498
+#: vms-alpha.c:6937
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr "impossible de trouver le EMH dans le premier enregistrement GST\n"
 
-#: vms-alpha.c:6524
+#: vms-alpha.c:6961
 #, c-format
-msgid "cannot read GST record header\n"
-msgstr "impossible de lire l'en-tÃªte de l'enregistrement GST\n"
+msgid "corrupted GST\n"
+msgstr "GST corrompu\n"
 
-#: vms-alpha.c:6537
-#, c-format
-msgid " corrupted GST\n"
-msgstr " GST corrompu\n"
-
-#: vms-alpha.c:6545
+#: vms-alpha.c:6974
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "ne peut lire l'enregistrement GST\n"
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:7001
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr " type d'enregistrement EOBJ %u non supportÃ©\n"
 
-#: vms-alpha.c:6598
+#: vms-alpha.c:7026
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr "  dÃ©compte des bits: %u, adr base: 0x%08x\n"
 
-#: vms-alpha.c:6612
+#: vms-alpha.c:7040
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr "   carte des bits: 0x%08x (occurrence: %u):\n"
 
-#: vms-alpha.c:6619
+#: vms-alpha.c:7047
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:7074
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  image %u (%u entrÃ©es)\n"
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:7080
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr "   offset: 0x%08x, val: 0x%08x\n"
 
-#: vms-alpha.c:6673
+#: vms-alpha.c:7103
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  image %u (%u entrÃ©es), offsets:\n"
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:7110
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:7236
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 bits *non supportÃ©*\n"
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:7241
 #, c-format
 msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
 msgstr "classe: %u, dtype: %u, longueur: %u, pointeur: 0x%08x\n"
 
-#: vms-alpha.c:6818
+#: vms-alpha.c:7252
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr "table de %s non contiguÃ«\n"
 
-#: vms-alpha.c:6823
+#: vms-alpha.c:7259
 #, c-format
 msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
 msgstr "dimct: %u, aflags: 0x%02x, digits: %u, Ã©chelle: %u\n"
 
-#: vms-alpha.c:6828
+#: vms-alpha.c:7264
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "arsize: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7268
 #, c-format
 msgid "Strides:\n"
 msgstr "Pas:\n"
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7282
 #, c-format
 msgid "Bounds:\n"
 msgstr "Limites:\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7289
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr "[%u]: InfÃ©rieure: %u, supÃ©rieure: %u\n"
 
-#: vms-alpha.c:6860
+#: vms-alpha.c:7303
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr "chaine de bits de %s dÃ©salignÃ©e\n"
 
-#: vms-alpha.c:6865
+#: vms-alpha.c:7310
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "base: %u, pos: %u\n"
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7336
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "vflags: 0x%02x, valeur: 0x%08x "
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7343
 #, c-format
 msgid "(no value)\n"
 msgstr "(pas de valeur)\n"
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7346
 #, c-format
 msgid "(not active)\n"
 msgstr "(pas active)\n"
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7349
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(pas allouÃ©e)\n"
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7352
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(descripteur)\n"
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7357
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(valeur postÃ©rieure)\n"
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7360
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(spÃ©cificitÃ©s de la valeur suivent)\n"
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7363
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(Ã  l'offset de bit %u)\n"
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7367
 #, c-format
 msgid "(reg: %u, disp: %u, indir: %u, kind: "
 msgstr "(reg: %u, aff: %u, indir: %u, type: "
 
-#: vms-alpha.c:6922
+#: vms-alpha.c:7374
 msgid "literal"
 msgstr "litÃ©rale"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7377
 msgid "address"
 msgstr "adresse"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7380
 msgid "desc"
 msgstr "desc"
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7383
 msgid "reg"
 msgstr "reg"
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7404
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr "long: %2u, type: %2u "
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7412
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr "atomique, type=0x%02x %s\n"
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7417
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr "indirect, dÃ©fini Ã  0x%08x\n"
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7421
 #, c-format
 msgid "typed pointer\n"
 msgstr "pointeur typÃ©\n"
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7425
 #, c-format
 msgid "pointer\n"
 msgstr "pointeur\n"
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7436
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr "tableau, dim: %u, bitmpa: "
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7451
 #, c-format
 msgid "array descriptor:\n"
 msgstr "descripteur de tableau:\n"
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7462
 #, c-format
 msgid "type spec for element:\n"
 msgstr "spec de type pour Ã©lÃ©ment:\n"
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7464
 #, c-format
 msgid "type spec for subscript %u:\n"
 msgstr "spec de type pour l'indice %u:\n"
 
-#: vms-alpha.c:7008
+#: vms-alpha.c:7489
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Table des symboles de debug:\n"
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7500
 #, c-format
 msgid "cannot read DST header\n"
 msgstr "impossible de lire l'en-tÃªte DST\n"
 
-#: vms-alpha.c:7025
+#: vms-alpha.c:7506
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr " type: %3u, long: %3u (Ã  0x%08x): "
 
-#: vms-alpha.c:7039
+#: vms-alpha.c:7523
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "ne peut lire le symbole DST\n"
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7567
 #, c-format
 msgid "standard data: %s\n"
 msgstr "donnÃ©es standards: %s\n"
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7571 vms-alpha.c:7695
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    nom: %.*s\n"
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7579
 #, c-format
 msgid "modbeg\n"
 msgstr "dÃ©but module\n"
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7583
 #, c-format
 msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
 msgstr "   fanions: %d, language: %u, majeur: %u, mineur: %u\n"
 
-#: vms-alpha.c:7100 vms-alpha.c:7374
+#: vms-alpha.c:7593 vms-alpha.c:7959
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   nom du module: %.*s\n"
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7600
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   compilateur  : %.*s\n"
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7607
 #, c-format
 msgid "modend\n"
 msgstr "fin module\n"
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7614
 msgid "rtnbeg\n"
 msgstr "dÃ©but rtn\n"
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7618
 #, c-format
 msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
 msgstr "    fanions: %u, adresse: 0x%08x, pd-adresse: 0x%08x\n"
 
-#: vms-alpha.c:7122
+#: vms-alpha.c:7627
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    nom routine : %.*s\n"
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7638
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "fin rtn: taille 0x%08x\n"
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7648
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr "prologue: adresse bkpt 0x%08x\n"
 
-#: vms-alpha.c:7147
+#: vms-alpha.c:7658
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "Ã©pilogue: fanions: %u, nombre: %u\n"
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7673
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr "dÃ©but blk: adresse: 0x%08x, nom: %.*s\n"
 
-#: vms-alpha.c:7166
+#: vms-alpha.c:7685
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "fin blk: taille: 0x%08x\n"
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7691
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "typspec (long: %u)\n"
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7707
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "septyp, nom: %.*s\n"
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7723
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "dÃ©but rec: nom: %.*s\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7727
 #, c-format
 msgid "    len: %u bits\n"
 msgstr "   long: %u bits\n"
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7733
 #, c-format
 msgid "recend\n"
 msgstr "fin rec\n"
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7738
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr "dÃ©but Ã©numÃ©ration, long: %u, nom: %.*s\n"
 
-#: vms-alpha.c:7203
+#: vms-alpha.c:7744
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "Ã©numÃ©ration Ã©lÃ©ments, nom: %.*s\n"
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7750
 #, c-format
 msgid "enumend\n"
 msgstr "fin Ã©numÃ©ration\n"
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7757
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr "Ã©tiquette, nom: %.*s\n"
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7760
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr "    adresse: 0x%08x\n"
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7772
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "plage discontinue (nbr: %u)\n"
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7779
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    adresse: 0x%08x, taille: %u\n"
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7790
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "num ligne  (long: %u)\n"
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7809
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7818
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7826
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7834
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7842
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7849
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7856
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7863
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7869
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7876
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7878
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7885
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7887
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7893
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "delta pc +%-4d"
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7897
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x ligne: %5u\n"
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7902
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    cmd %u *non gÃ©rÃ©e*\n"
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7917
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "source (long: %u)\n"
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7936
 #, c-format
 msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
 msgstr "   declfile: long: %u, fanions: %u, id fichier: %u\n"
 
-#: vms-alpha.c:7362
+#: vms-alpha.c:7941
 #, c-format
 msgid "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 msgstr "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 
-#: vms-alpha.c:7371
+#: vms-alpha.c:7953
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   nom fichier: %.*s\n"
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7969
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7976 vms-alpha.c:7983
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7990 vms-alpha.c:7997
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:8004 vms-alpha.c:8011
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:8015
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:8019
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   cmd %u *non gÃ©rÃ©e*\n"
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:8031
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "type dst %u *non gÃ©rÃ©*\n"
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:8063
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "ne peut lire EIHD\n"
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:8067
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr "EIHD: (taille: %u, nbr blocs: %u)\n"
 
-#: vms-alpha.c:7470
+#: vms-alpha.c:8071
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " id majeur: %u, id mineur: %u\n"
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:8079
 msgid "executable"
 msgstr "exÃ©cutable"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:8082
 msgid "linkable image"
 msgstr "image liable"
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:8089
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " type image: %u (%s)"
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:8095
 msgid "native"
 msgstr "natif"
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:8098
 msgid "CLI"
 msgstr "CLI"
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:8105
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", sous-type: %u (%s)\n"
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:8112
 #, c-format
 msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 msgstr " offsets: isd: %u, actif: %u, debug symbol: %u, id image: %u, patch: %u\n"
 
-#: vms-alpha.c:7515
+#: vms-alpha.c:8116
 #, c-format
 msgid " fixup info rva: "
 msgstr " correctif info rva: "
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:8118
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", vecteur de symbol rva: "
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:8121
 #, c-format
 msgid ""
 "\n"
@@ -7267,653 +8214,745 @@ msgstr ""
 "\n"
 " offset tableau version: %u\n"
 
-#: vms-alpha.c:7525
+#: vms-alpha.c:8126
 #, c-format
 msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
 msgstr " dÃ©compte E/S img: %u, nbr canaux: %u, priv req: %08x%08x\n"
 
-#: vms-alpha.c:7531
+#: vms-alpha.c:8132
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " fanions lieur: %08x:"
 
-#: vms-alpha.c:7562
+#: vms-alpha.c:8163
 #, c-format
 msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
 msgstr " ident: 0x%08x, ver sys: 0x%08x, apparier ctrl: %u, taille vectsym: %u\n"
 
-#: vms-alpha.c:7568
+#: vms-alpha.c:8169
 #, c-format
 msgid " BPAGE: %u"
 msgstr " BPAGE: %u"
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:8176
 #, c-format
 msgid ", ext fixup offset: %u, no_opt psect off: %u"
 msgstr ", offset correctif Ã©tendu: %u, offset no_opt psect: %u"
 
-#: vms-alpha.c:7578
+#: vms-alpha.c:8179
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", alias: %u\n"
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:8187
 #, c-format
 msgid "system version array information:\n"
 msgstr "information sur table de version systÃ¨me:\n"
 
-#: vms-alpha.c:7590
+#: vms-alpha.c:8191
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr "ne peut lire l'en-tÃªte EIHVN\n"
 
-#: vms-alpha.c:7600
+#: vms-alpha.c:8201
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "ne peut lire la version EIHVN\n"
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:8204
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:8208
 msgid "BASE_IMAGE       "
 msgstr "BASE_IMAGE       "
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:8211
 msgid "MEMORY_MANAGEMENT"
 msgstr "MEMORY_MANAGEMENT"
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:8214
 msgid "IO               "
 msgstr "IO               "
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:8217
 msgid "FILES_VOLUMES    "
 msgstr "FILES_VOLUMES    "
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:8220
 msgid "PROCESS_SCHED    "
 msgstr "PROCESS_SCHED    "
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:8223
 msgid "SYSGEN           "
 msgstr "SYSGEN           "
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:8226
 msgid "CLUSTERS_LOCKMGR "
 msgstr "CLUSTERS_LOCKMGR "
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:8229
 msgid "LOGICAL_NAMES    "
 msgstr "LOGICAL_NAMES    "
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:8232
 msgid "SECURITY         "
 msgstr "SECURITY         "
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:8235
 msgid "IMAGE_ACTIVATOR  "
 msgstr "IMAGE_ACTIVATOR  "
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:8238
 msgid "NETWORKS         "
 msgstr "NETWORKS         "
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:8241
 msgid "COUNTERS         "
 msgstr "COUNTERS         "
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:8244
 msgid "STABLE           "
 msgstr "STABLE           "
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:8247
 msgid "MISC             "
 msgstr "MISC             "
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:8250
 msgid "CPU              "
 msgstr "CPU              "
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:8253
 msgid "VOLATILE         "
 msgstr "VOLATILE         "
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:8256
 msgid "SHELL            "
 msgstr "SHELL            "
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:8259
 msgid "POSIX            "
 msgstr "POSIX            "
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:8262
 msgid "MULTI_PROCESSING "
 msgstr "MULTI_PROCESSING "
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:8265
 msgid "GALAXY           "
 msgstr "GALAXY           "
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:8268
 msgid "*unknown*        "
 msgstr "*inconnu*        "
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:8284 vms-alpha.c:8558
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "ne peut lire EIHA\n"
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:8287
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "Activation de l'image:  (taille=%u)\n"
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:8290
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr " PremiÃ¨re adresse : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7693
+#: vms-alpha.c:8294
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr " DeuxiÃ¨me adresse : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7697
+#: vms-alpha.c:8298
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr " TroisiÃ¨me adresse: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:8302
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr " QuatriÃ¨me adresse: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7705
+#: vms-alpha.c:8306
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr " Image partagÃ©e   : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7716
+#: vms-alpha.c:8317
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "ne peut lire EIHI\n"
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:8321
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr "Identification d'image: (majeur: %u, mineur: %u)\n"
 
-#: vms-alpha.c:7723
+#: vms-alpha.c:8324
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " nom de l'image    : %.*s\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:8326
 #, c-format
 msgid " link time        : %s\n"
 msgstr " heure de liaison  : %s\n"
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:8328
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " ident image       : %.*s\n"
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:8330
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " ident lieur       : %.*s\n"
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:8332
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " ident construction image: %.*s\n"
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:8342
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "ne peut lire EIHS\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:8346
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr "Image des symboles et table debug: (majeur: %u, mineur: %u)\n"
 
-#: vms-alpha.c:7751
+#: vms-alpha.c:8352
 #, c-format
 msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
 msgstr " table des symboles de debug : vbn: %u, taille: %u (0x%x)\n"
 
-#: vms-alpha.c:7756
+#: vms-alpha.c:8357
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr " table des symboles globale: vbn: %u, enregistrements: %u\n"
 
-#: vms-alpha.c:7761
+#: vms-alpha.c:8362
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr " table des modules de debug: vbn: %u, taille: %u\n"
 
-#: vms-alpha.c:7774
+#: vms-alpha.c:8375
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "ne peut lire EISD\n"
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:8386
 #, c-format
 msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
 msgstr "Descripteur de section d'image: (majeur: %u, mineur: %u, taille: %u, offset: %u)\n"
 
-#: vms-alpha.c:7793
+#: vms-alpha.c:8394
 #, c-format
 msgid " section: base: 0x%08x%08x size: 0x%08x\n"
 msgstr " section: base: 0x%08x%08x taille: 0x%08x\n"
 
-#: vms-alpha.c:7798
+#: vms-alpha.c:8399
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " fanions: 0x%04x"
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8437
 #, c-format
 msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
 msgstr " vbn: %u, pfc: %u, matchctl: %u type: %u ("
 
-#: vms-alpha.c:7842
+#: vms-alpha.c:8443
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8446
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8449
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8452
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8455
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8458
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8464
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8467
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " ident: 0x%08x, nom: %.*s\n"
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8477
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "ne peut lire DMT\n"
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8481
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Table de debug du module:\n"
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8490
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr "ne peut lire l'en-tÃªte DMT\n"
 
-#: vms-alpha.c:7895
+#: vms-alpha.c:8496
 #, c-format
 msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
 msgstr " offset du module: 0x%08x, taille: 0x%08x, (%u psects)\n"
 
-#: vms-alpha.c:7905
+#: vms-alpha.c:8506
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "ne peut lire le psect DMT\n"
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8510
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr "  dÃ©but psect: 0x%08x, longueur: %u\n"
 
-#: vms-alpha.c:7922
+#: vms-alpha.c:8523
 #, c-format
 msgid "cannot read DST\n"
 msgstr "ne peut lire DST\n"
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8533
 #, c-format
 msgid "cannot read GST\n"
 msgstr "ne peut lire GST\n"
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8537
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Table des symboles globaux:\n"
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8564
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr "Correction de l'activateur de l'image: (majeur: %u, mineur: %u)\n"
 
-#: vms-alpha.c:7969
+#: vms-alpha.c:8568
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  lien iaf : 0x%08x %08x\n"
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8572
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  lien correctif: 0x%08x %08x\n"
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8575
 #, c-format
 msgid "  size : %u\n"
 msgstr "  taille : %u\n"
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8577
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  fanions: 0x%08x\n"
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8582
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8587
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8592
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8595
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8599
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8602
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8605
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8607
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8614
 #, c-format
 msgid " Shareable images:\n"
 msgstr " Images partageables:\n"
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8622
 #, c-format
 msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
 msgstr "  %u: taille: %u, fanions: 0x%02x, nom: %.*s\n"
 
-#: vms-alpha.c:8028
+#: vms-alpha.c:8629
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " correctifs du rÃ©adressage des quad-mots:\n"
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8635
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " correctifs du rÃ©adressage des mots longs:\n"
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8641
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr " correctifs des rÃ©fÃ©rences quad-mots Â«Â .addressÂ Â»:\n"
 
-#: vms-alpha.c:8043
+#: vms-alpha.c:8646
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr " correctifs des rÃ©fÃ©rences mots longs Â«Â .addressÂ Â»:\n"
 
-#: vms-alpha.c:8048
+#: vms-alpha.c:8651
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr " Correctifs des rÃ©fÃ©rences des adresses de code:\n"
 
-#: vms-alpha.c:8053
+#: vms-alpha.c:8656
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr " Correctifs des rÃ©fÃ©rences des paires de liaison:\n"
 
-#: vms-alpha.c:8062
+#: vms-alpha.c:8664
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " Changement de protection (%u entrÃ©es):\n"
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8673
 #, c-format
 msgid "  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
 msgstr "  base: 0x%08x %08x, taille: 0x%08x, prot: 0x%08x "
 
 #. FIXME: we do not yet support relocatable link.  It is not obvious
 #. how to do it for debug infos.
-#: vms-alpha.c:8908
+#: vms-alpha.c:9550
 msgid "%P: relocatable link is not supported\n"
 msgstr "%P: lien relocalisable pas supportÃ©\n"
 
-#: vms-alpha.c:8979
+#: vms-alpha.c:9621
 #, c-format
 msgid "%P: multiple entry points: in modules %pB and %pB\n"
 msgstr "%P: points d'entrÃ©e multiples: dans les modules %pB et %pB\n"
 
-#: vms-lib.c:1445
+#: vms-lib.c:1530
 #, c-format
 msgid "could not open shared image '%s' from '%s'"
 msgstr "n'a pas su ouvrir l'image partagÃ©e Â«Â %sÂ Â» de Â«Â %sÂ Â»"
 
-#: vms-misc.c:361
+#: vms-misc.c:374
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr "_bfd_vms_output_counted appelÃ© avec un compte de zÃ©ro octet"
 
-#: vms-misc.c:366
+#: vms-misc.c:379
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr "_bfd_vms_output_counted appelÃ© avec trop d'octets"
 
-#: xcofflink.c:832
+#: xcofflink.c:889
 #, c-format
 msgid "%pB: XCOFF shared object when not producing XCOFF output"
 msgstr "%pB: objet XCOFF partagÃ© alors qu'on ne produit pas de sortie XCOFF"
 
-#: xcofflink.c:853
+#: xcofflink.c:910
 #, c-format
 msgid "%pB: dynamic object with no .loader section"
 msgstr "%pB: objet dynamique sans section .loader"
 
-#: xcofflink.c:1413
+#: xcofflink.c:1492
 #, c-format
 msgid "%pB: `%s' has line numbers but no enclosing section"
 msgstr "%pB: Â«Â %sÂ Â» contient des numÃ©ros de lignes mais de section d'encadrement"
 
-#: xcofflink.c:1466
+#: xcofflink.c:1548
 #, c-format
 msgid "%pB: class %d symbol `%s' has no aux entries"
 msgstr "%pB: classe %d symbole Â«Â %sÂ Â» n'a pas d'entrÃ©e auxiliaire"
 
-#: xcofflink.c:1489
+#: xcofflink.c:1571
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized csect type %d"
 msgstr "%pB: symbole Â«Â %sÂ Â» a un type csect %d non reconnu"
 
-#: xcofflink.c:1502
+#: xcofflink.c:1584
 #, c-format
 msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
 msgstr "%pB: symbole XTY_ER Â«Â %sÂ Â» erronÃ©: classe %d scnum %d scnlen %<PRId64>"
 
-#: xcofflink.c:1533
+#: xcofflink.c:1615
 #, c-format
-msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
-msgstr "%pB: XMC_TC0 symbol Â«Â %sÂ Â» est la classe %d scnlen %<PRId64>"
+msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRIu64>"
+msgstr "%pB: XMC_TC0 symbol Â«Â %sÂ Â» est la classe %d scnlen %<PRIu64>"
 
-#: xcofflink.c:1680
+#: xcofflink.c:1750
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr "%pB: l'entrÃ©e TOC Â«Â %sÂ Â» a un rÃ©adressage R_TLSML qui ne se cible pas lui-mÃªme"
+
+#: xcofflink.c:1784
 #, c-format
 msgid "%pB: csect `%s' not in enclosing section"
 msgstr "%pB: csect Â«Â %sÂ Â» n'est pas dans un section d'encadrement"
 
-#: xcofflink.c:1788
+#: xcofflink.c:1893
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr "%pB: XTY_LD Â«Â %sÂ Â» mal placÃ©"
 
-#: xcofflink.c:2109
+#: xcofflink.c:2236
 #, c-format
 msgid "%pB: reloc %s:%<PRId64> not in csect"
 msgstr "%pB: le rÃ©adressage %s:%<PRId64> n'est pas dans csect"
 
-#: xcofflink.c:3196
+#: xcofflink.c:3345
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr "%pB: impossible d'exporter le symbole interne Â«Â %sÂ Â»."
+
+#: xcofflink.c:3393
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: pas de tel symbole"
 
-#: xcofflink.c:3301
+#: xcofflink.c:3502
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr "attention: tentative d'exportation d'un symbole non dÃ©fini Â«Â %sÂ Â»"
 
-#: xcofflink.c:3680
+#: xcofflink.c:3850
 msgid "error: undefined symbol __rtinit"
 msgstr "erreur: symbole __rtinit non dÃ©fini"
 
-#: xcofflink.c:4060
+#: xcofflink.c:4863
+#, c-format
+msgid "%pB: Unable to find a stub csect in rangeof relocation at %#<PRIx64> targeting'%s'"
+msgstr "%pB: Impossible de trouver une Ã©bauche csect dans le rÃ©adressage rangeof Ã  %#<PRIx64> et ciblant Â«Â %sÂ Â»"
+
+#: xcofflink.c:4892
+#, c-format
+msgid "%pB: Cannot create stub entry '%s'"
+msgstr "%pB: Ne peut crÃ©er l'entrÃ©e de l'Ã©bauche Â«Â %sÂ Â»"
+
+#: xcofflink.c:5012
+msgid "TOC overflow during stub generation; try -mminimal-toc when compiling"
+msgstr "DÃ©bordement de la table des entrÃ©es durant la gÃ©nÃ©ration de l'Ã©baucheÂ ; essayez l'option -mminimal-toc Ã  la compilation"
+
+#: xcofflink.c:5080
 #, c-format
 msgid "%pB: loader reloc in unrecognized section `%s'"
 msgstr "%pB: chargeur de rÃ©adressage dans une section non reconnue Â«Â %sÂ Â»"
 
-#: xcofflink.c:4072
+#: xcofflink.c:5092
 #, c-format
 msgid "%pB: `%s' in loader reloc but not loader sym"
 msgstr "%pB: Â«Â %sÂ Â» est dans le chargeur de rÃ©adressage mais pas dans celui des symboles"
 
-#: xcofflink.c:4089
+#: xcofflink.c:5109
 #, c-format
 msgid "%pB: loader reloc in read-only section %pA"
 msgstr "%pB: chargeur de rÃ©adressages dans la section %pA en lecture seule"
 
-#: xcofflink.c:5113
+#: xcofflink.c:6182
 #, c-format
 msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
 msgstr "DÃ©bordement de la table des entrÃ©es: %#<PRIx64> > 0x10000; essayez l'option -mminimal-toc Ã  la compilation"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5031
+#: xcofflink.c:7298
+#, c-format
+msgid "Unable to link input file: %s"
+msgstr "Impossible de procÃ©der Ã  l'Ã©dition de liens sur le fichierÂ : %s"
+
+#: xtensa-dynconfig.c:60
+msgid "Unable to load DLL."
+msgstr "Impossible de charger la DLL."
+
+#: xtensa-dynconfig.c:86
+#, c-format
+msgid "%s is defined but could not be loaded: %s"
+msgstr "%s est dÃ©fini mais n'a pas su Ãªtre chargÃ©Â : %s"
+
+#: xtensa-dynconfig.c:102
+#, c-format
+msgid "%s is loaded but symbol \"%s\" is not found: %s"
+msgstr "%s est chargÃ© mais le symbole Â«Â %sÂ Â» n'est pas trouvÃ©Â : %s"
+
+#: xtensa-dynconfig.c:115
+#, c-format
+msgid "%s is defined but plugin support is disabled"
+msgstr "%s est dÃ©fini mais le support des greffons est dÃ©sactivÃ©"
+
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2893 elfnn-riscv.c:5548
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "attribut inconnu pour le symbole Â«Â %sÂ Â»Â : 0x%02x"
+
+#: elfnn-aarch64.c:5456
 #, c-format
 msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
 msgstr "%pB: erreur: l'Ã©bauche d'erratum du 835769 est hors limite (fichier d'entrÃ©e trop grand)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5112
+#: elfnn-aarch64.c:5548
 #, c-format
 msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
 msgstr "%pB: erreur: l'Ã©bauche d'erratum du 843419 est hors limite (fichier d'entrÃ©e trop grand)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5641
+#: elfnn-aarch64.c:5561
+#, c-format
+msgid "%pB: error: erratum 843419 immediate 0x%<PRIx64> out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr "%pB: erreur: l'immÃ©diat 0x%<PRIx64> de l'erratum 843419 est hors limites pour ADR (fichier d'entrÃ©e trop grand) et --fix-cortex-a53-843419=adr est utilisÃ©. ExÃ©cutez l'Ã©diteur de liens avec --fix-cortex-a53-843419=full Ã  la place"
+
+#: elfnn-aarch64.c:6096
 #, c-format
 msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: rÃ©adressage de %s en vertu du symbol Â«Â %sÂ Â» qui peut Ãªtre liÃ© avec l'extÃ©rieur ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5732
+#: elfnn-aarch64.c:6116
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr "%pB: le branchement conditionnel vers le symbole non dÃ©fini Â«Â %sÂ Â» n'est pas permis"
+
+#: elfnn-aarch64.c:6204 elfnn-kvx.c:2384
 #, c-format
 msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
 msgstr "%pB: la table des descripteurs de symboles locaux peut Ãªtre NULL en application le rÃ©adressage %s sur un symbole local"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6830
+#: elfnn-aarch64.c:6317 elfnn-aarch64.c:6354
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%pB: rÃ©adressage TLS %s sur le symbole indÃ©fini Â«Â %sÂ Â»"
+
+#: elfnn-aarch64.c:7345
 msgid "too many GOT entries for -fpic, please recompile with -fPIC"
 msgstr "trop d'entrÃ©es GOT pour -fpic, recompilez avec -fPIC"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6858
+#: elfnn-aarch64.c:7373
 msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
 msgstr "une cause possible pour cette erreur est que le symbole est rÃ©fÃ©rencÃ© dans le code indiquÃ© comme si il avait un alignement plus grand que celui qui a Ã©tÃ© dÃ©clarÃ© lors de sa dÃ©finition."
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7443
+#: elfnn-aarch64.c:7940
 #, c-format
 msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
 msgstr "%pB: le rÃ©adressage %s vers Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en crÃ©ant un objet partagÃ©"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:182
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:217
+#: elfnn-aarch64.c:9013
 #, c-format
-msgid "%pB: warning: RVE PLT generation not supported"
-msgstr "%pB: attention: la gÃ©nÃ©ration de PLT RVE n'est pas supportÃ©e"
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s'\n"
+msgstr "%F%P: %pB: rÃ©adressage par copie sur le symbole protÃ©gÃ© non copiable Â«Â %sÂ Â»\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311
-msgid "%X%P: internal error: out of range error\n"
-msgstr "%X%P: erreur interne: erreur car hors limite\n"
+#: elfnn-kvx.c:930
+msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: Impossible d'assigner Â«Â %pAÂ Â» Ã  une section de sortie. RÃ©essayez sans --enable-non-contiguous-regions.\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2315
-msgid "%X%P: internal error: unsupported relocation error\n"
-msgstr "%X%P: erreur interne: erreur car rÃ©adressage non supportÃ©\n"
+#: elfnn-kvx.c:2129
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation in section `%s'"
+msgstr "%pB(%pA+%#<PRIx64>): rÃ©adressage %s sans solution dans la section Â«Â %sÂ Â»"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2325
-msgid "%X%P: internal error: unknown error\n"
-msgstr "%X%P: erreur interne: erreur inconnue\n"
+#: elfnn-kvx.c:2853
+#, c-format
+msgid "%s: Bad ELF id: `%d'"
+msgstr "%s: Mauvais id ELFÂ : Â«Â %dÂ Â»"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2711
+#: elfnn-kvx.c:2908
 #, c-format
-msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d"
-msgstr "erreur: %pB: version ISA non concordante pour l'extension Â«Â %sÂ Â». %d.%d vs %d.%d"
+msgid "%s: compiled as 32-bit object and %s is 64-bit"
+msgstr "%s: compilÃ© comme un objet de 32 bits et %s est de 64 bits"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729
+#: elfnn-kvx.c:2911
 #, c-format
-msgid "error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'."
-msgstr "erreur: %pB: chaÃ®ne ISA Â«Â %sÂ Â» corrompue, la premiÃ¨re lettre devrait Ãªtre Â«Â iÂ Â» ou Â«Â eÂ Â» mais on a trouvÃ© Â«Â %sÂ Â»."
+msgid "%s: compiled as 64-bit object and %s is 32-bit"
+msgstr "%s: compilÃ© comme un objet de 64 bits et %s est de 32 bits"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773
+#: elfnn-kvx.c:2913
 #, c-format
-msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'."
-msgstr "erreur: %pB: ChaÃ®nes ISA Ã  fusionner Â«Â %sÂ Â» et Â«Â %sÂ Â» non concordantes."
+msgid "%s: object size does not match that of target %s"
+msgstr "%s: taille de l'objet ne concorde pas avec la taille de la cible %s"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2921
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elfnn-kvx.c:3001
+#, c-format
+msgid "Private flags = 0x%lx : "
+msgstr "Fanions privÃ©s = 0x%lx : "
+
+#: elfnn-kvx.c:3005
+#, c-format
+msgid "Coolidge (kv3) V1 64 bits"
+msgstr "Coolidge (kv3) V1 64 bits"
+
+#: elfnn-kvx.c:3007
+#, c-format
+msgid "Coolidge (kv3) V2 64 bits"
+msgstr "Coolidge (kv3) V2 64 bits"
+
+#: elfnn-kvx.c:3009
+#, c-format
+msgid "Coolidge (kv4) V1 64 bits"
+msgstr "Coolidge (kv4) V1 64 bits"
+
+#: elfnn-kvx.c:3014
 #, c-format
-msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)."
-msgstr "erreur: %pB: la chaÃ®ne ISA en entrÃ©e (%s) ne correspond pas Ã  la sortie (%s)."
+msgid "Coolidge (kv3) V1 32 bits"
+msgstr "Coolidge (kv3) V1 32 bits"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2946
+#: elfnn-kvx.c:3016
 #, c-format
-msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)."
-msgstr "erreur: %pB: XLEN de l'entrÃ©e (%u) ne correspond pas Ã  la sortie (%u)."
+msgid "Coolidge (kv3) V2 32 bits"
+msgstr "Coolidge (kv3) V2 32 bits"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2954
+#: elfnn-kvx.c:3018
 #, c-format
-msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation."
-msgstr "erreur: %pB: XLEN (%u) non supportÃ©e, vous pourriez Ãªtre en train d'utiliser la mauvaise Ã©mulation."
+msgid "Coolidge (kv4) V1 32 bits"
+msgstr "Coolidge (kv4) V1 32 bits"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3039
+#: elfnn-kvx.c:3854
 #, c-format
-msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
-msgstr "erreur: %pB: version de spec priv en conflit (majeur/mineur/rÃ©vision)."
+msgid "relocation against `%s' has faulty GOT type "
+msgstr "le rÃ©adressage par rapport Ã  Â«Â %sÂ Â» Ã  le type GOT dÃ©fectueux "
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3055
+#: elfnn-loongarch.c:169 elfnn-loongarch.c:221
 #, c-format
-msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned."
-msgstr "erreur: %pB utilise un alignement de pile de %u octets mais la sortie utilise un alignement de pile de %u octets."
+msgid "%#<PRIx64> invaild imm"
+msgstr "%#<PRIx64> imm invalide"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3096
+#: elfnn-loongarch.c:403 elfnn-riscv.c:4028
 #, c-format
 msgid ""
 "%pB: ABI is incompatible with that of the selected emulation:\n"
@@ -7922,111 +8961,264 @@ msgstr ""
 "%pB: l'ABI est incompatible avec celle de l'Ã©mulation sÃ©lectionnÃ©e:\n"
 "  l'Ã©mulation de la cible Â«Â %sÂ Â» ne correspond pas Ã  Â«Â %sÂ Â»"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119
+#: elfnn-loongarch.c:458
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr "%pB: ne peut lier ensemble des objets d'ABI diffÃ©rentes."
+
+#: elfnn-loongarch.c:600
+msgid "Internal error: unreachable."
+msgstr "Erreur interne: inatteignable."
+
+#: elfnn-loongarch.c:4339 elfnn-riscv.c:4789
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
+msgstr "%pB(%pA+0x%<PRIx64>: %<PRId64> octets requis pour aligner sur une frontiÃ¨re de %<PRId64> octets mais seulement %<PRId64> sont prÃ©sents"
+
+#: elfnn-riscv.c:326 elfnn-riscv.c:361
+#, c-format
+msgid "%pB: warning: RVE PLT generation not supported"
+msgstr "%pB: attention: la gÃ©nÃ©ration de PLT RVE n'est pas supportÃ©e"
+
+#: elfnn-riscv.c:919
+#, c-format
+msgid "%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object"
+msgstr "%pB: le rÃ©adressage %s vers le symbole absolu Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© en crÃ©ant un objet partagÃ©"
+
+#: elfnn-riscv.c:961
+#, c-format
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object"
+msgstr "%pB: le rÃ©adressage %s vers le symbole pas absolu Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© dans RV32 en crÃ©ant un objet partagÃ©"
+
+#: elfnn-riscv.c:1847
+#, c-format
+msgid "final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "la taille finale de la valeur uleb128 Ã  l'offset 0x%lx dans %pA depuis %pB dÃ©passe l'espace disponible"
+
+#: elfnn-riscv.c:2082
+#, c-format
+msgid "%pcrel_lo missing matching %pcrel_hi"
+msgstr "%pcrel_lo n'a pas de %pcrel_hi correspondant"
+
+#: elfnn-riscv.c:2085
+#, c-format
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "%pcrel_lo avec un terme n'est pas permis avec R_RISCV_GOT_HI20"
+
+#. Check the overflow when adding reloc addend.
+#: elfnn-riscv.c:2090
+#, c-format
+msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
+msgstr "%%pcrel_lo dÃ©borde avec un terme, la valeur de %%pcrel_hi est 0x%<PRIx64> sans terme, mais peut Ãªtre 0x%<PRIx64> aprÃ¨s ajout du terme de %%pcrel_lo"
+
+#: elfnn-riscv.c:2098
+#, c-format
+msgid "%pcrel_lo overflow with an addend"
+msgstr "%pcrel_lo dÃ©borde avec un terme"
+
+#: elfnn-riscv.c:2549
+#, c-format
+msgid "%pB: warning: R_RISCV_SUB_ULEB128 with non-zero addend, please rebuild by binutils 2.42 or up"
+msgstr "%pB: attention: R_RISCV_SUB_ULEB128 avec un terme non nul, veuillez recompiler avec binutils 2.42 ou supÃ©rieur"
+
+#: elfnn-riscv.c:2629
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "Le terme n'est pas permis avec R_RISCV_GOT_HI20"
+
+#. PR 28509, when generating the shared object, these
+#. referenced symbols may bind externally, which means
+#. they will be exported to the dynamic symbol table,
+#. and are preemptible by default.  These symbols cannot
+#. be referenced by the non-pic relocations, like
+#. R_RISCV_JAL and R_RISCV_RVC_JUMP relocations.
+#.
+#. However, consider that linker may relax the R_RISCV_CALL
+#. relocations to R_RISCV_JAL or R_RISCV_RVC_JUMP, if
+#. these relocations are relocated to the plt entries,
+#. then we won't report error for them.
+#.
+#. Perhaps we also need the similar checks for the
+#. R_RISCV_BRANCH and R_RISCV_RVC_BRANCH relocations.
+#: elfnn-riscv.c:2730
+#, c-format
+msgid "%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC\n"
+msgstr "%%X%%P: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» qui peut Ãªtre liÃ© avec l'extÃ©rieur ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©Â ; recompilez avec -fPIC\n"
+
+#: elfnn-riscv.c:2812
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "symbole de section %pcrel_lo avec un opÃ©rande"
+
+#: elfnn-riscv.c:3022
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%%X%%P: rÃ©adressage %s sans solution par rapport au symbole Â«Â %sÂ Â»\n"
+
+#: elfnn-riscv.c:3057
+msgid "%X%P: internal error: out of range error\n"
+msgstr "%X%P: erreur interne: erreur car hors limite\n"
+
+#: elfnn-riscv.c:3062
+msgid "%X%P: internal error: unsupported relocation error\n"
+msgstr "%X%P: erreur interne: erreur car rÃ©adressage non supportÃ©\n"
+
+#: elfnn-riscv.c:3068
+msgid "dangerous relocation error"
+msgstr "erreur de rÃ©adressage dangereux"
+
+#: elfnn-riscv.c:3074
+msgid "%X%P: internal error: unknown error\n"
+msgstr "%X%P: erreur interne: erreur inconnue\n"
+
+#: elfnn-riscv.c:3620
+#, c-format
+msgid "error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'"
+msgstr "erreur: %pB: chaÃ®ne ISA Â«Â %sÂ Â» corrompue. La premiÃ¨re lettre devrait Ãªtre Â«Â iÂ Â» ou Â«Â eÂ Â» mais on a trouvÃ© Â«Â %sÂ Â»."
+
+#: elfnn-riscv.c:3663
+#, c-format
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr "erreur: %pB: chaÃ®nes ISA Ã  fusionner Â«Â %sÂ Â» et Â«Â %sÂ Â» non concordantes"
+
+#: elfnn-riscv.c:3800
+#, c-format
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr "erreur: %pB: la chaÃ®ne ISA en entrÃ©e (%s) ne correspond pas Ã  la sortie (%s)"
+
+#: elfnn-riscv.c:3820
+#, c-format
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr "erreur: %pB: XLEN de l'entrÃ©e (%u) ne correspond pas Ã  la sortie (%u)"
+
+#: elfnn-riscv.c:3828
+#, c-format
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr "erreur: %pB: XLEN (%u) non supportÃ©e, vous pourriez Ãªtre en train d'utiliser la mauvaise Ã©mulation"
+
+#: elfnn-riscv.c:3942
+#, c-format
+msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "avertissement: %pB utilise la version de spec privilÃ©gie %u.%u.%u mais la sortie utilise la version %u.%u.%u"
+
+#: elfnn-riscv.c:3959
+msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
+msgstr "avertissement: la version de spec privilÃ©gie 1.9.1 ne peut pas Ãªtre liÃ©e avec d'autres versions de spec"
+
+#: elfnn-riscv.c:3987
+#, c-format
+msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
+msgstr "erreur: %pB utilise un alignement de pile de %u octets mais la sortie utilise un alignement de pile de %u octets"
+
+#: elfnn-riscv.c:4084
 #, c-format
 msgid "%pB: can't link %s modules with %s modules"
 msgstr "%pB: impossible de rÃ©aliser l'Ã©dition de liens des modules %s avec les modules %s"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3129
+#: elfnn-riscv.c:4094
 #, c-format
 msgid "%pB: can't link RVE with other target"
 msgstr "%pB: impossible de faire l'Ã©dition de lien avec une autre cible"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3630
+#: elfnn-riscv.c:961
 #, c-format
-msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
-msgstr "%pB(%pA+0x%<PRIx64>: %<PRId64> octets requis pour aligner sur une frontiÃ¨re de %<PRId64> octets mais seulement %<PRId64> sont prÃ©sents"
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object"
+msgstr "%pB: le rÃ©adressage %s vers le symbole pas absolu Â«Â %sÂ Â» ne peut pas Ãªtre utilisÃ© dans RV64 en crÃ©ant un objet partagÃ©"
 
-#: peigen.c:157 pepigen.c:157 pex64igen.c:157
+#: peXXigen.c:161
 #, c-format
 msgid "%pB: unable to find name for empty section"
 msgstr "%pB: impossible de trouver le nom pour une section vide"
 
-#: peigen.c:183 pepigen.c:183 pex64igen.c:183
+#: peXXigen.c:188
 #, c-format
 msgid "%pB: out of memory creating name for empty section"
 msgstr "%pB: pas assez de mÃ©moire en crÃ©ant le nom pour une section vide"
 
-#: peigen.c:194 pepigen.c:194 pex64igen.c:194
+#: peXXigen.c:199
 #, c-format
 msgid "%pB: unable to create fake empty section"
 msgstr "%pB: impossible de crÃ©er une section vide factice"
 
-#: peigen.c:532 pepigen.c:532 pex64igen.c:532
+#: peXXigen.c:924
 #, c-format
-msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld"
-msgstr "%pB: l'en-tÃªte aout spÃ©cifie un nombre invalide d'entrÃ©es de rÃ©pertoire de donnÃ©es: %ld"
+msgid "%pB:%.8s: section below image base"
+msgstr "%pB:%.8s: section en dessous de la base de l'image"
 
-#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091
+#: peXXigen.c:929
+#, c-format
+msgid "%pB:%.8s: RVA truncated"
+msgstr "%pB:%.8s: RVA tronquÃ©"
+
+#: peXXigen.c:1060
 #, c-format
 msgid "%pB: line number overflow: 0x%lx > 0xffff"
 msgstr "%pB: dÃ©bordement du nombre de lignes: 0x%lx > 0xffff"
 
-#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235
+#: peXXigen.c:1226
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr "RÃ©pertoire d'exportation [.edata (ou lÃ  oÃ¹ il a Ã©tÃ© trouvÃ©)]"
 
-#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236
+#: peXXigen.c:1227
 msgid "Import Directory [parts of .idata]"
 msgstr "RÃ©pertoire d'importation [faisant partie de .idata]"
 
-#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237
+#: peXXigen.c:1228
 msgid "Resource Directory [.rsrc]"
 msgstr "RÃ©pertoire des resources [.rsrc]"
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1229
 msgid "Exception Directory [.pdata]"
 msgstr "RÃ©pertoire des exceptions [.pdata]"
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1230
 msgid "Security Directory"
 msgstr "RÃ©pertoire de la sÃ©curitÃ©"
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1231
 msgid "Base Relocation Directory [.reloc]"
 msgstr "RÃ©pertoire de base du rÃ©adressage [.reloc]"
 
-#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241
+#: peXXigen.c:1232
 msgid "Debug Directory"
 msgstr "RÃ©pertoire de dÃ©bug"
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1233
 msgid "Description Directory"
 msgstr "RÃ©pertoire de description"
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1234
 msgid "Special Directory"
 msgstr "RÃ©pertoire spÃ©cial"
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1235
 msgid "Thread Storage Directory [.tls]"
 msgstr "RÃ©pertoire des files de stockage [.tls]"
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1236
 msgid "Load Configuration Directory"
 msgstr "RÃ©pertoire de chargement de configuration"
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1237
 msgid "Bound Import Directory"
 msgstr "RÃ©pertoire des importations limitÃ©es"
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1238
 msgid "Import Address Table Directory"
 msgstr "RÃ©pertoire de la table d'adresse d'importation"
 
-#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248
+#: peXXigen.c:1239
 msgid "Delay Import Directory"
 msgstr "RÃ©pertoire des dÃ©lais d'importation"
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1240
 msgid "CLR Runtime Header"
 msgstr "En-tÃªte exÃ©cutable CLR"
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1241
 msgid "Reserved"
 msgstr "RÃ©servÃ©"
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1306
 #, c-format
 msgid ""
 "\n"
@@ -8035,7 +9227,7 @@ msgstr ""
 "\n"
 "Il y a une table d'importation, mais la section la contenant ne peut Ãªtre repÃ©rÃ©e\n"
 
-#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316
+#: peXXigen.c:1312
 #, c-format
 msgid ""
 "\n"
@@ -8044,7 +9236,7 @@ msgstr ""
 "\n"
 "Il y a une table d'importation dans %s, mais cette section n'a pas de contenu\n"
 
-#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323
+#: peXXigen.c:1319
 #, c-format
 msgid ""
 "\n"
@@ -8053,30 +9245,7 @@ msgstr ""
 "\n"
 "Il y a une table d'importation dans %s Ã  0x%lx\n"
 
-#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365
-#, c-format
-msgid ""
-"\n"
-"Function descriptor located at the start address: %04lx\n"
-msgstr ""
-"\n"
-"Descripteur de fonction localisÃ© Ã  l'adresse de dÃ©part: %04lx\n"
-
-#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369
-#, c-format
-msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
-msgstr "\tcode-base %08lx tab. des entrÃ©es (chargeable/actuel) %08lx/%08lx\n"
-
-#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377
-#, c-format
-msgid ""
-"\n"
-"No reldata section! Function descriptor not decoded.\n"
-msgstr ""
-"\n"
-"Pas de section reldata! Descripteur de fonction pas dÃ©codÃ©.\n"
-
-#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382
+#: peXXigen.c:1325
 #, c-format
 msgid ""
 "\n"
@@ -8085,7 +9254,7 @@ msgstr ""
 "\n"
 "Les tables d'importation (contenus interprÃ©tÃ© de la section %s)\n"
 
-#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385
+#: peXXigen.c:1328
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -8094,7 +9263,7 @@ msgstr ""
 " vma:            Hint    Temps     Avant    DLL       Premier\n"
 "                 Table   Estampil. ChaÃ®ne   Nom       Thunk\n"
 
-#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435
+#: peXXigen.c:1377
 #, c-format
 msgid ""
 "\n"
@@ -8103,12 +9272,12 @@ msgstr ""
 "\n"
 "\tNom DLL: %.*s\n"
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1393
 #, c-format
 msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
 msgstr "\tvma:  Hint/Ord Membre      Lien\n"
 
-#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476
+#: peXXigen.c:1418
 #, c-format
 msgid ""
 "\n"
@@ -8117,13 +9286,12 @@ msgstr ""
 "\n"
 "Il y a un premier Â«Â thunkÂ Â», mais la section le contenant ne peut Ãªtre repÃ©rÃ©e\n"
 
-#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520
-#: pex64igen.c:1559
+#: peXXigen.c:1465 peXXigen.c:1504
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr "\t<corrompu: 0x%04lx>"
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1597
 #, c-format
 msgid ""
 "\n"
@@ -8132,34 +9300,25 @@ msgstr ""
 "\n"
 "Il y a une table d'exportation, mais la section la contenant n'a pu Ãªtre repÃ©rÃ©e\n"
 
-#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658
+#: peXXigen.c:1610
 #, c-format
 msgid ""
 "\n"
-"There is an export table in %s, but that section has no contents\n"
-msgstr ""
-"\n"
-"Il y a une table d'exportation dans %s, mais cette section n'a pas de contenu\n"
-
-#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669
-#, c-format
-msgid ""
-"\n"
-"There is an export table in %s, but it does not fit into that section\n"
+"There is an export table in %s, but it is too small (%d)\n"
 msgstr ""
 "\n"
-"Il y a une table d'exportation dans %s, mais elle ne rentre pas dans la section\n"
+"Il y a une table d'exportation dans %s, mais elle est trop petite (%d)\n"
 
-#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680
+#: peXXigen.c:1618
 #, c-format
 msgid ""
 "\n"
-"There is an export table in %s, but it is too small (%d)\n"
+"There is an export table in %s, but contents cannot be read\n"
 msgstr ""
 "\n"
-"Il y a une table d'exportation dans %s, mais elle est trop petite (%d)\n"
+"Il y a une table d'exportation dans %s, mais le contenu ne sait pas Ãªtre lu\n"
 
-#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686
+#: peXXigen.c:1624
 #, c-format
 msgid ""
 "\n"
@@ -8168,7 +9327,7 @@ msgstr ""
 "\n"
 "Il y a une table d'exportation dans %s Ã  0x%lx\n"
 
-#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714
+#: peXXigen.c:1655
 #, c-format
 msgid ""
 "\n"
@@ -8179,67 +9338,67 @@ msgstr ""
 "Les tables d'exportation (contenus interprÃ©tÃ© de la section %s)\n"
 "\n"
 
-#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718
+#: peXXigen.c:1659
 #, c-format
 msgid "Export Flags \t\t\t%lx\n"
 msgstr "Fanion d'exportation \t\t\t%lx\n"
 
-#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721
+#: peXXigen.c:1662
 #, c-format
 msgid "Time/Date stamp \t\t%lx\n"
 msgstr "Tampon Heure/Date \t\t%lx\n"
 
-#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725
+#: peXXigen.c:1666
 #, c-format
 msgid "Major/Minor \t\t\t%d/%d\n"
 msgstr "Majeur/Mineur \t\t\t%d/%d\n"
 
-#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728
+#: peXXigen.c:1669
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr "Nom \t\t\t\t"
 
-#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739
+#: peXXigen.c:1680
 #, c-format
 msgid "Ordinal Base \t\t\t%ld\n"
 msgstr "base de nombre ordinal \t\t\t%ld\n"
 
-#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742
+#: peXXigen.c:1683
 #, c-format
 msgid "Number in:\n"
 msgstr "NumÃ©ro dans:\n"
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1686
 #, c-format
 msgid "\tExport Address Table \t\t%08lx\n"
 msgstr "\tTable d'adresses d'exportation \t\t%08lx\n"
 
-#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749
+#: peXXigen.c:1690
 #, c-format
 msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
 msgstr "\tTable [Nom pointeur/Nombre ordinal]\t%08lx\n"
 
-#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752
+#: peXXigen.c:1693
 #, c-format
 msgid "Table Addresses\n"
 msgstr "Table d'adresses\n"
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1696
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr "\tTable d'adresse d'exportation \t\t"
 
-#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760
+#: peXXigen.c:1701
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr "\tTable des noms de pointeurs \t\t"
 
-#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765
+#: peXXigen.c:1706
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr "\tTable des ordinals \t\t\t"
 
-#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779
+#: peXXigen.c:1720
 #, c-format
 msgid ""
 "\n"
@@ -8248,20 +9407,20 @@ msgstr ""
 "\n"
 "Table d'adresses d'exportation -- base de nombre ordinal %ld\n"
 
-#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788
+#: peXXigen.c:1729
 #, c-format
 msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\tL'adresse virtuelle relative de la table des adresses exportÃ©es (0x%lx) ou le nombre d'entrÃ©es (0x%lx) est invalide\n"
 
-#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807
+#: peXXigen.c:1748
 msgid "Forwarder RVA"
 msgstr "Adresseur RVA"
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1760
 msgid "Export RVA"
 msgstr "Exportation RVA"
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1767
 #, c-format
 msgid ""
 "\n"
@@ -8270,29 +9429,27 @@ msgstr ""
 "\n"
 "Table [Ordinal/Nom de pointeur]\n"
 
-#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834
+#: peXXigen.c:1775
 #, c-format
 msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\tAdresse virtuelle relative de la table des pointeurs de noms (0x%lx) ou nombre d'entrÃ©es (0x%lx) invalide\n"
 
-#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841
+#: peXXigen.c:1782
 #, c-format
 msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\tAdresse virtuelle relative de la table ordinale (0x%lx) ou nombre d'entrÃ©es (0x%lx) invalide\n"
 
-#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855
+#: peXXigen.c:1796
 #, c-format
 msgid "\t[%4ld] <corrupt offset: %lx>\n"
 msgstr "\t[%4ld] <offset corrompu: %lx>\n"
 
-#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909
-#: pex64igen.c:2106
+#: peXXigen.c:1851 peXXigen.c:2021
 #, c-format
 msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
 msgstr "attention, taille de la section .pdata (%ld) n'est pas un multiple de %d\n"
 
-#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913
-#: pex64igen.c:2110
+#: peXXigen.c:1855 peXXigen.c:2025
 #, c-format
 msgid ""
 "\n"
@@ -8301,12 +9458,12 @@ msgstr ""
 "\n"
 "La table de fonctions (interprÃ©tation du contenu de la section .pdata)\n"
 
-#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916
+#: peXXigen.c:1858
 #, c-format
 msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
 msgstr " vma:\t\t\tDÃ©but Adresse    Fin Adresse      Unwind Info\n"
 
-#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918
+#: peXXigen.c:1860
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -8315,27 +9472,12 @@ msgstr ""
 " vma:\t\tDÃ©but    Fin      EH       EH       FinProlog  Exception\n"
 "     \t\tAdresse  Adresse  Handler  DonnÃ©es  Adresse    Masque\n"
 
-#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931
+#: peXXigen.c:1873
 #, c-format
 msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
 msgstr "La taille virtuelle de la section .pdata (%ld) est plus grande que la taille rÃ©elle (%ld)\n"
 
-#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001
-#, c-format
-msgid " Register save millicode"
-msgstr " Registre a prÃ©servÃ© le millicode"
-
-#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004
-#, c-format
-msgid " Register restore millicode"
-msgstr " Registre a restaurÃ© le millicode"
-
-#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007
-#, c-format
-msgid " Glue code sequence"
-msgstr " SÃ©quence du code de liants"
-
-#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112
+#: peXXigen.c:2027
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -8344,7 +9486,7 @@ msgstr ""
 " vma:\t\tDÃ©but    Long.    Long.    Fanions  Gestion.  EH\n"
 "     \t\tAdresse  Prolog.  Fonction 32b exc  Exception DonnÃ©es\n"
 
-#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234
+#: peXXigen.c:2152
 #, c-format
 msgid ""
 "\n"
@@ -8355,7 +9497,7 @@ msgstr ""
 "\n"
 "Fichier de base des rÃ©adressages PE (contenus interprÃ©tÃ©s de la section .reloc)\n"
 
-#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264
+#: peXXigen.c:2181
 #, c-format
 msgid ""
 "\n"
@@ -8364,62 +9506,62 @@ msgstr ""
 "\n"
 "Adresse virtuelle: %08lx taille des morceaux %ld (0x%lx) nombre de correctifs %ld\n"
 
-#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282
+#: peXXigen.c:2199
 #, c-format
 msgid "\treloc %4d offset %4x [%4lx] %s"
 msgstr "\trÃ©adressage %4d dÃ©calage %4x [%4lx] %s"
 
-#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343
+#: peXXigen.c:2260
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr "%03x %*.s EntrÃ©e: "
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2284
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr "nom: [val: %08lx long %d]: "
 
-#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387
+#: peXXigen.c:2304
 #, c-format
 msgid "<corrupt string length: %#x>\n"
 msgstr "<longueur de la chaÃ®ne corrompue: %#x>\n"
 
-#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397
+#: peXXigen.c:2314
 #, c-format
 msgid "<corrupt string offset: %#lx>\n"
 msgstr "<offset de la chaÃ®ne corrompue: %#lx>\n"
 
-#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402
+#: peXXigen.c:2319
 #, c-format
 msgid "ID: %#08lx"
 msgstr "ID: %#08lx"
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2322
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Valeur: %#08lx\n"
 
-#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427
+#: peXXigen.c:2344
 #, c-format
 msgid "%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
 msgstr "%03x %*.s  Feuilles: Adr: %#08lx, Taille: %#08lx, Codepage: %d\n"
 
-#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469
+#: peXXigen.c:2386
 #, c-format
 msgid "<unknown directory type: %d>\n"
 msgstr "<type de rÃ©pertoire inconnu: %d>\n"
 
-#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477
+#: peXXigen.c:2394
 #, c-format
 msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
 msgstr "Table: Car: %d, Temps: %08lx, Ver: %d/%d, Nbr Noms: %d, IDs: %d\n"
 
-#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566
+#: peXXigen.c:2482
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr "DÃ©tection d'une section .rsrc corrompueÂ !\n"
 
-#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590
+#: peXXigen.c:2506
 #, c-format
 msgid ""
 "\n"
@@ -8428,17 +9570,17 @@ msgstr ""
 "\n"
 "ATTENTION: DonnÃ©es en trop dans la section .rsrc â€“ elles seront ignorÃ©es par Windows:\n"
 
-#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596
+#: peXXigen.c:2512
 #, c-format
 msgid " String table starts at offset: %#03x\n"
 msgstr " La table des chaÃ®nes dÃ©marre au dÃ©calage: %#03x\n"
 
-#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599
+#: peXXigen.c:2515
 #, c-format
 msgid " Resources start at offset: %#03x\n"
 msgstr " Les ressources dÃ©marrent au dÃ©calage: %#03x\n"
 
-#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651
+#: peXXigen.c:2572
 #, c-format
 msgid ""
 "\n"
@@ -8447,7 +9589,7 @@ msgstr ""
 "\n"
 "Ceci est un rÃ©pertoire de dÃ©bogage, mais la section le contenant ne peut Ãªtre repÃ©rÃ©e\n"
 
-#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657
+#: peXXigen.c:2578
 #, c-format
 msgid ""
 "\n"
@@ -8456,7 +9598,7 @@ msgstr ""
 "\n"
 "Il y a un rÃ©pertoire de dÃ©bogage dans %s, mais cette section n'a pas de contenu\n"
 
-#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664
+#: peXXigen.c:2585
 #, c-format
 msgid ""
 "\n"
@@ -8465,7 +9607,7 @@ msgstr ""
 "\n"
 "Erreur: la section %s contient l'adresse de dÃ©part des donnÃ©es de dÃ©bogage mais elle est trop petite\n"
 
-#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669
+#: peXXigen.c:2590
 #, c-format
 msgid ""
 "\n"
@@ -8475,24 +9617,24 @@ msgstr ""
 "\n"
 "Il y a un rÃ©pertoire de dÃ©bogage dans %s Ã  0x%lx\n"
 
-#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676
+#: peXXigen.c:2597
 #, c-format
 msgid "The debug data size field in the data directory is too big for the section"
 msgstr "Le champ de taille des donnÃ©es de dÃ©bogage dans le rÃ©pertoire de donnÃ©es est trop grand pour la section"
 
 # RVA = Adresse Virtuelle Relative mais AVR semble inconnu sur internet. Gageons que les utilisateurs trouverons plus
 # facilement la signification de RVA dans ce contexte.
-#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681
+#: peXXigen.c:2602
 #, c-format
 msgid "Type                Size     Rva      Offset\n"
 msgstr "Type                Taille   Rva      DÃ©calage\n"
 
-#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729
+#: peXXigen.c:2650
 #, c-format
-msgid "(format %c%c%c%c signature %s age %ld)\n"
-msgstr "(format %c%c%c%c signature %s age %ld)\n"
+msgid "(format %c%c%c%c signature %s age %ld pdb %s)\n"
+msgstr "(format %c%c%c%c signature %s age %ld pdb %s)\n"
 
-#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737
+#: peXXigen.c:2662
 #, c-format
 msgid "The debug directory size is not a multiple of the debug directory entry size\n"
 msgstr "La taille du rÃ©pertoire de dÃ©bogage n'est pas un multiple de la taille d'une entrÃ©e du rÃ©pertoire de dÃ©bogage\n"
@@ -8500,7 +9642,7 @@ msgstr "La taille du rÃ©pertoire de dÃ©b
 #. The MS dumpbin program reportedly ands with 0xff0f before
 #. printing the characteristics field.  Not sure why.  No reason to
 #. emulate it here.
-#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757
+#: peXXigen.c:2746
 #, c-format
 msgid ""
 "\n"
@@ -8509,97 +9651,331 @@ msgstr ""
 "\n"
 "CaractÃ©ristiques 0x%x\n"
 
-#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993
+#: peXXigen.c:3031
 #, c-format
-msgid "%pB: Data Directory size (%lx) exceeds space left in section (%<PRIx64>)"
-msgstr "%pB: La taille du rÃ©pertoire de donnÃ©es (%lx) excÃ¨de l'espace restant dans la section (%<PRIx64>)"
+msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
+msgstr "%pB: Le rÃ©pertoire de donnÃ©es (%lx octets Ã  %<PRIx64>) s'Ã©tend au delÃ  de la frontiÃ¨re de section Ã  %<PRIx64>"
 
-#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025
+#: peXXigen.c:3072
 msgid "failed to update file offsets in debug directory"
 msgstr "Ã©chec lors de la mise Ã  jour des dÃ©calages du fichier dans le rÃ©pertoire de dÃ©bogage"
 
-#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033
+#: peXXigen.c:3081
 #, c-format
 msgid "%pB: failed to read debug data section"
 msgstr "%pB: Ã©chec lors de la lecture de la section des donnÃ©es de dÃ©bogage"
 
-#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849
+#: peXXigen.c:3884
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
 msgstr "Ã©chec de la fusion de .rsrc: ressource chaÃ®ne dupliquÃ©e: %d"
 
-#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984
+#: peXXigen.c:4019
 msgid ".rsrc merge failure: multiple non-default manifests"
 msgstr "Ã©chec de la fusion de .rsrc: plusieurs manifestes pas par dÃ©faut"
 
-#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002
+#: peXXigen.c:4037
 msgid ".rsrc merge failure: a directory matches a leaf"
 msgstr "Ã©chec de la fusion de .rsrc: un rÃ©pertoire correspond Ã  une feuille"
 
-#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044
+#: peXXigen.c:4079
 msgid ".rsrc merge failure: duplicate leaf"
 msgstr "Ã©chec de la fusion de .rsrc: feuille dupliquÃ©e"
 
-#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046
+#: peXXigen.c:4084
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
 msgstr "Ã©chec de la fusion .rsrc: feuille dupliquÃ©e: %s"
 
-#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112
+#: peXXigen.c:4151
 msgid ".rsrc merge failure: dirs with differing characteristics"
 msgstr "Ã©chec de la fusion .rsrc: rÃ©pertoires avec des caractÃ©ristiques diffÃ©rentes"
 
-#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119
+#: peXXigen.c:4158
 msgid ".rsrc merge failure: differing directory versions"
 msgstr "Ã©chec de la fusion de .rsrc: versions de rÃ©pertoires diffÃ©rentes"
 
 #. Corrupted .rsrc section - cannot merge.
-#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236
+#: peXXigen.c:4270
 #, c-format
 msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
 msgstr "%pB: Ã©chec de la fusion de .rsrc: section .rsrc corrompue"
 
-#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244
+#: peXXigen.c:4278
 #, c-format
 msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
 msgstr "%pB: Ã©chec de la fusion de .rsrc: taille de .rsrc inattendue"
 
-#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383
+#: peXXigen.c:4417
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
 msgstr "%pB: impossible de remplir DataDictionary[1] car .idata$2 est manquant"
 
-#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403
+#: peXXigen.c:4437
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
 msgstr "%pB: impossible de remplir DataDictionary[1] car .idata$4 est manquant"
 
-#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424
+#: peXXigen.c:4458
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
 msgstr "%pB: impossible de remplir DataDictionary[12] car .idata$5 est manquant"
 
-#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444
+#: peXXigen.c:4478
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
 msgstr "%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] car .idata$6 est manquant"
 
-#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486
+#: peXXigen.c:4520
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
 msgstr "%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] car .idata$6 est manquant"
 
-#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511
+#: peXXigen.c:4545
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
 msgstr "%pB: impossible de remplir DataDictionary[9] car __tls_used est manquant"
 
+#, c-format
+#~ msgid "%pB: unsupported relocation type name %s"
+#~ msgstr "%pB: nom de type de rÃ©adressage %s non supportÃ©"
+
+# FrÃ©dÃ©ric: Les messages suivants sont remplacÃ©s dans un texte contenant Â«Â %sÂ Â» pour produire Â«Â fÂ Â» et Â«Â cÂ Â». Cette bidouille n'est pas sympa pour les traducteurs.
+# Je me demande comment les dÃ©veloppeurs s'y retrouventâ€¦
+#~ msgid "f' and `c"
+#~ msgstr "fÂ Â» et Â«Â c"
+
+#~ msgid "d' and `c"
+#~ msgstr "dÂ Â» et Â«Â c"
+
+#~ msgid "zvknha"
+#~ msgstr "zvknha"
+
+#~ msgid "zvknhb"
+#~ msgstr "zvknhb"
+
+#~ msgid "Deprecated %s called at %s line %d in %s\n"
+#~ msgstr "%s dÃ©prÃ©ciÃ© appelÃ© Ã  %s dans la ligne %d dans %s\n"
+
+#~ msgid "Deprecated %s called\n"
+#~ msgstr "%s appel dÃ©prÃ©ciÃ©\n"
+
+#~ msgid "cannot read GST record length\n"
+#~ msgstr "impossible de lire la longueur de l'enregistrement GST\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but that section has no contents\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Il y a une table d'exportation dans %s, mais cette section n'a pas de contenu\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but it does not fit into that section\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Il y a une table d'exportation dans %s, mais elle ne rentre pas dans la section\n"
+
+#~ msgid "%pB: unable to initialize compress status for section %s"
+#~ msgstr "%pB: impossible d'initialiser le statut de compression de la section %s"
+
+#~ msgid "%pB: unable to initialize decompress status for section %s"
+#~ msgstr "%pB: impossible d'initialiser le statut de dÃ©compression de la section %s"
+
+#~ msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+#~ msgstr "erreur: %pB(%pA) la taille de la section (%#<PRIx64> octets) est plus grande que la taille du fichier (%#<PRIx64> octets)"
+
+#~ msgid "DWARF error: section %s is larger than 10x its filesize! (0x%lx vs 0x%lx)"
+#~ msgstr "erreur DWARF: la section %s est plus grande que 10Ã— sa taille du fichierÂ ! (0x%lx contre 0x%lx)"
+
+#~ msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+#~ msgstr "%pB:%pA: erreur: tentative d'Ã©crire dans une session compressÃ©e non allouÃ©e"
+
+#~ msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+#~ msgstr "%F%P: Impossible d'assigner %pA Ã  une section de sortie. RÃ©essayez sans --enable-non-contiguous-regions.\n"
+
+#~ msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+#~ msgstr "%F%P: Impossible d'assigner le groupe %pA de la cible %pA Ã  une section de sortie. RÃ©essayez sans --enable-non-contiguous-regions.\n"
+
+#~ msgid "%pB: %pA+%"
+#~ msgstr "%pB: %pA+%"
+
+#~ msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
+#~ msgstr "attention: --enable-non-contiguous-regions abandonne la section Â«Â %sÂ Â» de Â«Â %sÂ Â»\n"
+
+#~ msgid "%s: standard ISA extension `%c' is not in canonical order"
+#~ msgstr "%s: l'extension standard ISA Â«Â %cÂ Â» n'est pas dans l'ordre canonique"
+
+#~ msgid "%s: unknown prefix class for the ISA extension `%s'"
+#~ msgstr "%s: classe de prÃ©fixe inconnue pour l'extension ISA Â«Â %sÂ Â»"
+
+#~ msgid "rv32e does not support the `f' extension"
+#~ msgstr "rv32e ne supporte pas l'extension Â«Â fÂ Â»"
+
+#~ msgid "%F%P: failed to create BND PLT section\n"
+#~ msgstr "%F%P: Ã©chec lors de la crÃ©ation de la section PLT BND\n"
+
+#~ msgid "%pB: no core to allocate section name %s"
+#~ msgstr "%pB: pas de noyau pour allouer un nom de section %s"
+
+#~ msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
+#~ msgstr "%%X%%p: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC\n"
+
+#~ msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
+#~ msgstr "%pB: l'en-tÃªte aout spÃ©cifie un nombre invalide d'entrÃ©es de rÃ©pertoire de donnÃ©es: %u"
+
+#~ msgid "%pB: page size is too large (0x%x)"
+#~ msgstr "%pB: la taille de page est trop grande (0x%x)"
+
+#~ msgid "%s: duplicate prefixed ISA extension `%s'"
+#~ msgstr "%s: extension ISA prÃ©fixÃ©e Â«Â %sÂ Â» dupliquÃ©e"
+
+#~ msgid "%s: prefixed ISA extension `%s' is not in expected order.  It must come before `%s'"
+#~ msgstr "%s: l'extension ISA prÃ©fixÃ©e Â«Â %sÂ Â» n'est pas dans l'ordre attendu. Elle doit apparaÃ®tre avant Â«Â %sÂ Â»"
+
+#~ msgid "warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%d"
+#~ msgstr "avertissement: %pB: version ISA %d.%d non concordante pour l'extension Â«Â %sÂ Â», la version de sortie est %d.%d"
+
+#~ msgid "%pB: TLS relocation at (0x%"
+#~ msgstr "%pB: rÃ©adressage TLS Ã  (0x%"
+
+#~ msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
+#~ msgstr "%pB: attention: le dÃ©compte du nombre de lignes (%#lx) dÃ©passe la taille de la section (%#lx)"
+
+#~ msgid "internal error: RL78 reloc stack overflow"
+#~ msgstr "erreur interne: dÃ©bordement de la pile de rÃ©adressages RL78"
+
+#~ msgid ""
+#~ "%s  branch         %lu\n"
+#~ "  branch toc adj %lu\n"
+#~ "  branch notoc   %lu\n"
+#~ "  branch both    %lu\n"
+#~ "  long branch    %lu\n"
+#~ "  long toc adj   %lu\n"
+#~ "  long notoc     %lu\n"
+#~ "  long both      %lu\n"
+#~ "  plt call       %lu\n"
+#~ "  plt call save  %lu\n"
+#~ "  plt call notoc %lu\n"
+#~ "  plt call both  %lu\n"
+#~ "  global entry   %lu"
+#~ msgstr ""
+#~ "%s  branchements          %lu\n"
+#~ "  aj. branchements toc  %lu\n"
+#~ "  branchements notoc    %lu\n"
+#~ "  branchements les deux %lu\n"
+#~ "  long branchements     %lu\n"
+#~ "  aj. long toc          %lu\n"
+#~ "  long notoc            %lu\n"
+#~ "  long les deux         %lu\n"
+#~ "  appels plt            %lu\n"
+#~ "  appels plt save       %lu\n"
+#~ "  appels plt notoc      %lu\n"
+#~ "  appels plt les deux   %lu\n"
+#~ "  entrÃ©es globales      %lu"
+
+#~ msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
+#~ msgstr "attention: %pB est tronquÃ©: taille attendue du cÅ“ur du fichier >= %<PRIu64>, obtenu: %<PRIu64>"
+
+#~ msgid "-march=%s: expect number after `%dp'"
+#~ msgstr "-march=%s: nombre attendu aprÃ¨s Â«Â %dpÂ Â»"
+
+#~ msgid "-march=%s: rv%de is not a valid base ISA"
+#~ msgstr "-march=%s: rv%de n'est pas une base ISA valable"
+
+#~ msgid "   Error: length larger than remaining space in record\n"
+#~ msgstr "   Erreur: longueur plus grande que l'espace restant dans l'enregistrement\n"
+
+#~ msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+#~ msgstr "STA_QW (pile quad mot) 0x%08x %08x\n"
+
+#~ msgid "%pB: error: erratum 843419 immediate 0x%"
+#~ msgstr "%pB: erreur: erratum 843419 immÃ©diat 0x%"
+
+#~ msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
+#~ msgstr "%pA a, Ã  la fois, des sections ordonnÃ©es [Â«Â %pAÂ Â» dans %pB] et dÃ©sordonnÃ©es [Â«Â %pAÂ Â» dans %pB]"
+
+#~ msgid "%pA has both ordered and unordered sections"
+#~ msgstr "%pA a, Ã  la fois, des sections ordonnÃ©es et dÃ©sordonnÃ©es"
+
+#~ msgid "%F%P: %pA has ordered sections with incompatible alignments\n"
+#~ msgstr "%F%P: %pA a des sections ordonnÃ©es avec des alignements incompatibles\n"
+
+#~ msgid "-march=%s: unexpected ISA string at end: %s"
+#~ msgstr "-march=%s: chaÃ®ne ISA inattendue Ã  la finÂ : %s"
+
+#~ msgid "%pB: warning: sh_link not set for section `%pA'"
+#~ msgstr "%pB: attention: sh_link n'a pas de valeur pour la section Â«Â %pAÂ Â»"
+
+#~ msgid "-march=%s: unsupported ISA subset `%c'"
+#~ msgstr "-march=%s: sous-ensemble ISA Â«Â %cÂ Â» non supportÃ©"
+
+#~ msgid "-march=%s: `d' extension requires `f' extension"
+#~ msgstr "-march=%s: l'extension Â«Â dÂ Â» requiert l'extension Â«Â fÂ Â»"
+
+#~ msgid "-march=%s: `q' extension requires `d' extension"
+#~ msgstr "-march=%s: l'extension Â«Â qÂ Â» requiert l'extension Â«Â dÂ Â»"
+
+#~ msgid ""
+#~ "\n"
+#~ "Function descriptor located at the start address: %04lx\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Descripteur de fonction localisÃ© Ã  l'adresse de dÃ©part: %04lx\n"
+
+#~ msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
+#~ msgstr "\tcode-base %08lx tab. des entrÃ©es (chargeable/actuel) %08lx/%08lx\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "No reldata section! Function descriptor not decoded.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Pas de section reldata! Descripteur de fonction pas dÃ©codÃ©.\n"
+
+#~ msgid " Register save millicode"
+#~ msgstr " Registre a prÃ©servÃ© le millicode"
+
+#~ msgid " Register restore millicode"
+#~ msgstr " Registre a restaurÃ© le millicode"
+
+#~ msgid " Glue code sequence"
+#~ msgstr " SÃ©quence du code de liants"
+
+#~ msgid "%pB: corrupt symbol count: %#<PRIx64>"
+#~ msgstr "%pB: dÃ©compte de symbole corrompu: %#<PRIx64>"
+
+#~ msgid "%pB: not enough memory to allocate space for %#<PRIx64> symbols of size %#<PRIx64>"
+#~ msgstr "%pB: Pas assez de mÃ©moire pour allouer l'espace pour %#<PRIx64> symboles de taille %#<PRIx64>"
+
+#~ msgid "%pB: corrupt size field in group section header: %#<PRIx64>"
+#~ msgstr "%pB: champ de taille corrompu dans l'en-tÃªte du groupe de section: %#<PRIx64>"
+
+#~ msgid "error: %pB version reference section is too large (%#<PRIx64> bytes)"
+#~ msgstr "erreur: la section de rÃ©fÃ©rence de version %pB est trop grande (%#<PRIx64> octets)"
+
+#~ msgid "unexpected STO_SH5_ISA32 on local symbol is not handled"
+#~ msgstr "STO_SH5_ISA32 inattendu sur le symbole local n'est pas traitÃ©"
+
+#~ msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with %s\n"
+#~ msgstr "%P%X: le segment en lecture seule a des rÃ©adressages IFUNC dynamiques; recompilez avec %s\n"
+
+#~ msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
+#~ msgstr "bfd_mach_o_read_symtab_symbols: impossible d'allouer la mÃ©moire pour les symboles"
+
+#~ msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
+#~ msgstr "erreur: %pB: version de spec priv en conflit (majeur/mineur/rÃ©vision)."
+
+#~ msgid "unsupported relocation type %#x"
+#~ msgstr "type de rÃ©adressage %#x non supportÃ©"
+
+#~ msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC"
+#~ msgstr "%pB: rÃ©adressage de %s en vertu de Â«Â %sÂ Â» ne peut Ãªtre utilisÃ© lors de la crÃ©ation d'un objet partagÃ©; recompilez avec -fPIC"
+
 #~ msgid "%H: call to `%pT' lacks nop, can't restore toc; recompile with -fPIC\n"
 #~ msgstr "%H: il manque un nop Ã  l'appel Ã  Â«Â %pTÂ Â», toc ne peut Ãªtre rÃ©tablie, recompilez avec -fPIC\n"
 
-#~ msgid "error: %pB: <corrupt x86 ISA used size: 0x%x>"
-#~ msgstr "erreur: %pB: <la taille utilisÃ©e par l'ISA x86 est corrompue: 0x%x>"
-
 #~ msgid "error: %pB: <corrupt x86 ISA needed size: 0x%x>"
 #~ msgstr "erreur: %pB: <la taille nÃ©cessaire pour l'ISA x86 est corrompue: 0x%x>"
 
@@ -8690,9 +10066,6 @@ msgstr "%pB: impossible de remplir DataD
 #~ msgid "unsupported reloc type"
 #~ msgstr "type de rÃ©adressage non supportÃ©"
 
-#~ msgid "SH Error: unknown reloc type %d"
-#~ msgstr "Erreur SH: type de rÃ©adressage %d inconnu"
-
 #~ msgid "Unrecognized reloc type 0x%x"
 #~ msgstr "Type de rÃ©adressage non reconnu 0x%x"
 
@@ -8749,9 +10122,6 @@ msgstr "%pB: impossible de remplir DataD
 #~ msgid "%B: invalid AVR reloc number: %d"
 #~ msgstr "%B: numÃ©ro de rÃ©adressage AVR invalide: %d"
 
-#~ msgid "%B: unsupported relocation type %d"
-#~ msgstr "%B: type de rÃ©adressage %d non supportÃ©"
-
 #~ msgid "Unsupported CR16 relocation type: 0x%x\n"
 #~ msgstr "Type de rÃ©adressage CR16 non supportÃ©: 0x%x\n"
 
@@ -8794,15 +10164,9 @@ msgstr "%pB: impossible de remplir DataD
 #~ msgid "%B: unrecognised I370 reloc number: %d"
 #~ msgstr "%B: numÃ©ro de rÃ©adressage I370 non reconnu: %d"
 
-#~ msgid "%B: unknown relocation type %d for symbol %s"
-#~ msgstr "%B: type de rÃ©adressage %d inconnu pour le symbole %s"
-
 #~ msgid "%B: Relocation %s is not yet supported for symbol %s."
 #~ msgstr "%B: rÃ©adressage %s n'est pas encore supportÃ© pour le symbole %s"
 
-#~ msgid "%B: invalid relocation type %d"
-#~ msgstr "%B: type de rÃ©adressage %d invalide"
-
 #~ msgid "%B: invalid i960 reloc number: %d"
 #~ msgstr "%B: numÃ©ro de rÃ©adressage i960 invalide: %d"
 
@@ -8929,15 +10293,6 @@ msgstr "%pB: impossible de remplir DataD
 #~ msgid "%B: unrecognised SH reloc number: %d"
 #~ msgstr "%B: numÃ©ro de rÃ©adressage SH non reconnu: %d"
 
-#~ msgid "%B: compiled as 32-bit object and %B is 64-bit"
-#~ msgstr "%B: compilÃ© comme un objet de 32 bits et %B est de 64 bits"
-
-#~ msgid "%B: compiled as 64-bit object and %B is 32-bit"
-#~ msgstr "%B: compilÃ© comme un objet de 64 bits et %B est de 32 bits"
-
-#~ msgid "%B: object size does not match that of target %B"
-#~ msgstr "%B: taille de l'objet ne concorde pas avec la taille de la cible %B"
-
 #~ msgid "%B: encountered datalabel symbol in input"
 #~ msgstr "%B: rencontre du symbole d'une Ã©tiquette de donnÃ©e dans l'entrÃ©e"
 
@@ -9133,9 +10488,6 @@ msgstr "%pB: impossible de remplir DataD
 #~ msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B"
 #~ msgstr "Attention: taille du symbole Â«Â %sÂ Â» a changÃ© de %lu dans %B Ã  %lu dans %B"
 
-#~ msgid "%B: addend -0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range"
-#~ msgstr "%B: l'opÃ©rande -0x%x dans le rÃ©adressage %s vers le symbole Â«Â %sÂ Â» Ã  0x%lx dans la section Â«Â %AÂ Â» est hors limite"
-
 #~ msgid "%F: failed to create BND PLT .eh_frame section\n"
 #~ msgstr "%F: Ã©chec lors de la crÃ©ation de la section .eh_frame PLT BND\n"
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ka.gmo ./bfd/po/ka.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ka.gmo	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/po/ka.gmo	2024-02-01 01:52:32.000000000 +0000
@@ -0,0 +1,48 @@
+Þ•.0 C$(T
U
cqsƒ–¨¾Õë6V	hrŽ“¬	µ¿Ðåþ.;JL"l�­ÀÒäõþ
+ -?Wv}
��ù¡
›	©	½	¿	4×	7
+7D
+1|
+®
+Ä
+9ä
+€Ÿ	±Q»
ˆ&'¯:×"
A5
Mw
>Å
A3F.z©L°wýLu9Â1ü+.CZ+ž^Ê4)+^7ŠQÂXmlƒ(ð.
+,) $#"!	-*('&%+
&,@-ÿÿÿÿIZÿÿÿÿ	    TLS: %pA	non-TLS: %pA
+
+      Type: %s
+Dynamic Section:
+
+Program Header:
+
+Version References:
+
+Version definitions:
+#<invalid error code>%F%P: already_linked_table: %E
+%pB: %s unsupported%pB: warning: %s: line number overflow: 0x%lx > 0xffff<corrupt info> %s<corrupt>Merging program properties
+NonePlease report this bug.
+Reservedbad valuedivision by zeroerror reading %s: %sfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedhinternal error: dangerous errorinternal error: out of range errorinternal error: unknown errorinvalid bfd targetinvalid operationmalformed archivememory exhaustedno errorno more archived filesno symbolsout of rangereopening %pB: %ssection has no contentssorry, cannot handle this filesymbolsystem call errorunknown erroryesProject-Id-Version: bfd 2.39.90
+Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/
+POT-Creation-Date: 2022-12-31 12:18+0000
+PO-Revision-Date: 2023-04-22 20:38+0200
+Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>
+Language-Team: Georgian <(nothing)>
+Language: ka
+X-Bugs: Report translation errors to the Language-Team address.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Plural-Forms: nplurals=2; plural=(n != 1);
+X-Generator: Poedit 3.2.2
+	    TLS: %pA	áƒ�áƒ áƒ�-TLS: %pA
+
+      áƒ¢áƒ˜áƒžáƒ˜: %s
+áƒ“áƒ˜áƒœáƒ�áƒ›áƒ˜áƒ™áƒ£áƒ áƒ˜ áƒ¡áƒ”áƒ¥áƒªáƒ˜áƒ�:
+
+áƒžáƒ áƒ�áƒ’áƒ áƒ�áƒ›áƒ˜áƒ¡ áƒ—áƒ�áƒ•áƒ¡áƒ�áƒ áƒ—áƒ˜:
+
+áƒ•áƒ”áƒ áƒ¡áƒ˜áƒ˜áƒ¡ áƒ›áƒ˜áƒ›áƒ�áƒ áƒ—áƒ•áƒ”áƒ‘áƒ˜:
+
+áƒ•áƒ”áƒ áƒ¡áƒ˜áƒ˜áƒ¡ áƒ�áƒ¦áƒ¬áƒ”áƒ áƒ”áƒ‘áƒ˜:
+#<invalid error code>%F%P: already_linked_table: %E
+%pB: %s áƒ›áƒ®áƒ�áƒ áƒ“áƒ�áƒ­áƒ”áƒ áƒ˜áƒšáƒ˜ áƒ�áƒ áƒ�áƒ�%pB: áƒ’áƒ�áƒ¤áƒ áƒ—áƒ®áƒ˜áƒšáƒ”áƒ‘áƒ�: %s: áƒ®áƒ�áƒ–áƒ˜áƒ¡ áƒœáƒ�áƒ›áƒ áƒ”áƒ‘áƒ˜áƒ¡ áƒ’áƒ�áƒ“áƒ�áƒ•áƒ¡áƒ”áƒ‘áƒ�: 0x%lx > 0xffff<corrupt info> %s<corrupt>áƒžáƒ áƒ�áƒ’áƒ áƒ�áƒ›áƒ˜áƒ¡ áƒ—áƒ•áƒ˜áƒ¡áƒ”áƒ‘áƒ”áƒ‘áƒ˜áƒ¡ áƒ¨áƒ”áƒ áƒ¬áƒ§áƒ›áƒ�
+áƒ�áƒ áƒ�áƒ¤áƒ”áƒ áƒ˜áƒ¡áƒ’áƒ—áƒ®áƒ�áƒ•áƒ— áƒ’áƒ�áƒ“áƒ�áƒ�áƒ’áƒ–áƒ�áƒ•áƒœáƒ�áƒ— áƒ�áƒœáƒ’áƒ�áƒ áƒ˜áƒ¨áƒ˜ áƒ�áƒ› áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ˜áƒ¡ áƒ¨áƒ”áƒ¡áƒ�áƒ®áƒ”áƒ‘.
+áƒ áƒ”áƒ–áƒ”áƒ áƒ•áƒ˜áƒ áƒ”áƒ‘áƒ£áƒšáƒ˜áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ›áƒœáƒ˜áƒ¨áƒ•áƒœáƒ”áƒšáƒ�áƒ‘áƒ�áƒœáƒ£áƒšáƒ–áƒ” áƒ’áƒ�áƒ§áƒ�áƒ¤áƒ�áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ� '%s'-áƒ˜áƒ¡ áƒ™áƒ˜áƒ—áƒ®áƒ•áƒ˜áƒ¡áƒ�áƒ¡. %sáƒ¤áƒ�áƒ˜áƒšáƒ˜áƒ¡ áƒ¤áƒ�áƒ áƒ›áƒ�áƒ¢áƒ˜ áƒ’áƒ�áƒ£áƒ áƒ™áƒ•áƒ”áƒ•áƒ”áƒšáƒ˜áƒ�áƒ¤áƒ�áƒ˜áƒšáƒ˜áƒ¡ áƒ¤áƒ�áƒ áƒ›áƒ�áƒ¢áƒ˜ áƒ£áƒªáƒœáƒ�áƒ‘áƒ˜áƒ�áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ¤áƒ�áƒ˜áƒšáƒ˜áƒ¡ áƒ¤áƒ�áƒ áƒ›áƒ�áƒ¢áƒ˜áƒ¤áƒ�áƒ˜áƒšáƒ˜ .áƒ«áƒ�áƒšáƒ˜áƒ�áƒœ áƒ“áƒ˜áƒ“áƒ˜áƒ�áƒ¤áƒ�áƒ˜áƒšáƒ˜ áƒ¬áƒ�áƒ™áƒ•áƒ”áƒ—áƒ˜áƒšáƒ˜áƒ�áƒ¡áƒ—áƒ¨áƒ˜áƒ“áƒ� áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�: áƒ¡áƒ�áƒ¨áƒ˜áƒ¨áƒ˜ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�áƒ¨áƒ˜áƒ“áƒ� áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�: áƒ“áƒ˜áƒ�áƒžáƒ�áƒ–áƒ�áƒœáƒ¡ áƒ’áƒ�áƒ“áƒ�áƒªáƒ˜áƒšáƒ”áƒ‘áƒ˜áƒ¡ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�áƒ¨áƒ˜áƒ“áƒ� áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�: áƒ£áƒªáƒœáƒ�áƒ‘áƒ˜ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�bfd-áƒ˜áƒ¡ áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ¡áƒ�áƒ›áƒ˜áƒ–áƒœáƒ”áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ�áƒžáƒ”áƒ áƒ�áƒªáƒ˜áƒ�áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ�áƒ áƒ¥áƒ˜áƒ•áƒ˜áƒ›áƒ”áƒ®áƒ¡áƒ˜áƒ”áƒ áƒ”áƒ‘áƒ� áƒ’áƒ�áƒ“áƒ�áƒ•áƒ¡áƒ”áƒ‘áƒ£áƒšáƒ˜áƒ�áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ˜áƒ¡ áƒ’áƒ�áƒ áƒ”áƒ¨áƒ”áƒ›áƒ”áƒ¢áƒ˜ áƒ“áƒ�áƒ�áƒ áƒ¥áƒ˜áƒ•áƒ”áƒ‘áƒ£áƒšáƒ˜ áƒ¤áƒ�áƒ˜áƒšáƒ˜ áƒ•áƒ”áƒ  áƒ•áƒ˜áƒžáƒ�áƒ•áƒ”áƒ¡áƒ˜áƒ›áƒ‘áƒ�áƒšáƒ�áƒ”áƒ‘áƒ˜áƒ¡ áƒ’áƒ�áƒ áƒ”áƒ¨áƒ”áƒ“áƒ˜áƒ�áƒžáƒ�áƒ–áƒ�áƒœáƒ¡ áƒ’áƒ�áƒ áƒ”áƒ—%pB-áƒ˜áƒ¡ áƒ—áƒ�áƒ•áƒ˜áƒ“áƒ�áƒœ áƒ’áƒ�áƒ®áƒ¡áƒœáƒ�: %sáƒ¡áƒ”áƒ¥áƒªáƒ˜áƒ�áƒ¡ áƒ¨áƒ”áƒ›áƒªáƒ•áƒ”áƒšáƒ�áƒ‘áƒ� áƒ�áƒ  áƒ’áƒ�áƒ�áƒ©áƒœáƒ˜áƒ�áƒ�áƒ› áƒ¤áƒ�áƒ˜áƒšáƒ˜áƒ¡ áƒ“áƒ�áƒ›áƒ£áƒ¨áƒ�áƒ•áƒ”áƒ‘áƒ� áƒ�áƒ  áƒ¨áƒ”áƒ›áƒ˜áƒ«áƒšáƒ˜áƒ�áƒ¡áƒ˜áƒ›áƒ‘áƒ�áƒšáƒ�áƒ¡áƒ˜áƒ¡áƒ¢áƒ”áƒ›áƒ£áƒ áƒ˜ áƒ¤áƒ£áƒœáƒ¥áƒªáƒ˜áƒ˜áƒ¡ áƒ’áƒ�áƒ›áƒ�áƒ«áƒ�áƒ®áƒ”áƒ‘áƒ˜áƒ¡ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�áƒ£áƒªáƒœáƒ�áƒ‘áƒ˜ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�áƒ“áƒ˜áƒ�áƒ®PRIx64%pB: %#: warning: bad count%pB: %#: áƒ’áƒ�áƒ¤áƒ áƒ—áƒ®áƒ˜áƒšáƒ”áƒ‘áƒ�: áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ áƒ�áƒ�áƒ“áƒ”áƒœáƒ�áƒ‘áƒ�
\ No newline at end of file
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ka.po ./bfd/po/ka.po
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ka.po	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/po/ka.po	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,9348 @@
+# Georgian translation for bfd
+# Copyright (C) 2023 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bfd 2.39.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2022-12-31 12:18+0000\n"
+"PO-Revision-Date: 2023-04-22 20:38+0200\n"
+"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
+"Language-Team: Georgian <(nothing)>\n"
+"Language: ka\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#: aout-cris.c:196
+#, c-format
+msgid "%pB: unsupported relocation type exported: %#x"
+msgstr ""
+
+#: aout-cris.c:242
+#, c-format
+msgid "%pB: unsupported relocation type imported: %#x"
+msgstr ""
+
+#: aout-cris.c:254
+#, c-format
+msgid "%pB: bad relocation record imported: %d"
+msgstr ""
+
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1238 pdp11.c:1511
+#, c-format
+msgid "%pB: can not represent section `%pA' in a.out object file format"
+msgstr ""
+
+#: aoutx.h:1576 pdp11.c:1483
+#, c-format
+msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
+msgstr ""
+
+#: aoutx.h:1579 vms-alpha.c:8429
+msgid "*unknown*"
+msgstr ""
+
+#: aoutx.h:1715 pdp11.c:1579
+#, c-format
+msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
+msgstr ""
+
+#: aoutx.h:1963
+#, c-format
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr ""
+
+#: aoutx.h:2407 aoutx.h:2425 pdp11.c:2062
+#, c-format
+msgid "%pB: attempt to write out unknown reloc type"
+msgstr ""
+
+#: aoutx.h:4081 pdp11.c:3447
+#, c-format
+msgid "%pB: unsupported relocation type"
+msgstr ""
+
+#. Unknown relocation.
+#: aoutx.h:4401 coff-alpha.c:601 coff-alpha.c:1521 coff-mips.c:356
+#: coff-rs6000.c:2955 coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279
+#: elf-hppa.h:798 elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813
+#: elf32-arc.c:532 elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1063
+#: elf32-bfin.c:4686 elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467
+#: elf32-crx.c:429 elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522
+#: elf32-d30v.c:544 elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381
+#: elf32-frv.c:2559 elf32-frv.c:6240 elf32-ft32.c:304 elf32-h8300.c:302
+#: elf32-i386.c:394 elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496
+#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209
+#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354
+#: elf32-mcore.c:440 elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
+#: elf32-microblaze.c:1002 elf32-mips.c:2239 elf32-moxie.c:137
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3288
+#: elf32-nds32.c:3309 elf32-nds32.c:5078 elf32-nios2.c:3019 elf32-or1k.c:1087
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
+#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
+#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
+#: elf32-v850.c:1924 elf32-v850.c:4249 elf32-vax.c:289 elf32-visium.c:481
+#: elf32-wasm32.c:105 elf32-xgate.c:418 elf32-xstormy16.c:395
+#: elf32-xtensa.c:510 elf32-xtensa.c:544 elf32-z80.c:331 elf64-alpha.c:1114
+#: elf64-alpha.c:4073 elf64-alpha.c:4221 elf64-bpf.c:325 elf64-ia64-vms.c:255
+#: elf64-ia64-vms.c:3425 elf64-mips.c:3962 elf64-mips.c:3978 elf64-mmix.c:1264
+#: elf64-nfp.c:151 elf64-ppc.c:1026 elf64-ppc.c:1380 elf64-ppc.c:1389
+#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:269 elfn32-mips.c:3792
+#: elfxx-ia64.c:324 elfxx-loongarch.c:1382 elfxx-riscv.c:943 elfxx-sparc.c:589
+#: elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947
+#: elfnn-aarch64.c:2215 elfnn-aarch64.c:2313 elfnn-ia64.c:214
+#: elfnn-ia64.c:3820
+#, c-format
+msgid "%pB: unsupported relocation type %#x"
+msgstr ""
+
+#: aoutx.h:5428 pdp11.c:3870
+#, c-format
+msgid "%pB: relocatable link from %s to %s not supported"
+msgstr ""
+
+#: arc-got.h:69
+#, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr ""
+
+#: archive.c:733
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr ""
+
+#: archive.c:2262
+msgid "warning: writing archive was slow: rewriting timestamp"
+msgstr ""
+
+#: archive.c:2329 archive.c:2390 elflink.c:4760 linker.c:1431
+#, c-format
+msgid "%pB: plugin needed to handle lto object"
+msgstr ""
+
+#: archive.c:2616
+msgid "Reading archive file mod timestamp"
+msgstr ""
+
+#: archive.c:2640
+msgid "Writing updated armap timestamp"
+msgstr ""
+
+#: bfd.c:708
+msgid "no error"
+msgstr "áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ˜áƒ¡ áƒ’áƒ�áƒ áƒ”áƒ¨áƒ”"
+
+#: bfd.c:709
+msgid "system call error"
+msgstr "áƒ¡áƒ˜áƒ¡áƒ¢áƒ”áƒ›áƒ£áƒ áƒ˜ áƒ¤áƒ£áƒœáƒ¥áƒªáƒ˜áƒ˜áƒ¡ áƒ’áƒ�áƒ›áƒ�áƒ«áƒ�áƒ®áƒ”áƒ‘áƒ˜áƒ¡ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�"
+
+#: bfd.c:710
+msgid "invalid bfd target"
+msgstr "bfd-áƒ˜áƒ¡ áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ¡áƒ�áƒ›áƒ˜áƒ–áƒœáƒ”"
+
+#: bfd.c:711
+msgid "file in wrong format"
+msgstr "áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ¤áƒ�áƒ˜áƒšáƒ˜áƒ¡ áƒ¤áƒ�áƒ áƒ›áƒ�áƒ¢áƒ˜"
+
+#: bfd.c:712
+msgid "archive object file in wrong format"
+msgstr ""
+
+#: bfd.c:713
+msgid "invalid operation"
+msgstr "áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ�áƒžáƒ”áƒ áƒ�áƒªáƒ˜áƒ�"
+
+#: bfd.c:714
+msgid "memory exhausted"
+msgstr "áƒ›áƒ”áƒ®áƒ¡áƒ˜áƒ”áƒ áƒ”áƒ‘áƒ� áƒ’áƒ�áƒ“áƒ�áƒ•áƒ¡áƒ”áƒ‘áƒ£áƒšáƒ˜áƒ�"
+
+#: bfd.c:715
+msgid "no symbols"
+msgstr "áƒ¡áƒ˜áƒ›áƒ‘áƒ�áƒšáƒ�áƒ”áƒ‘áƒ˜áƒ¡ áƒ’áƒ�áƒ áƒ”áƒ¨áƒ”"
+
+#: bfd.c:716
+msgid "archive has no index; run ranlib to add one"
+msgstr ""
+
+#: bfd.c:717
+msgid "no more archived files"
+msgstr "áƒ›áƒ”áƒ¢áƒ˜ áƒ“áƒ�áƒ�áƒ áƒ¥áƒ˜áƒ•áƒ”áƒ‘áƒ£áƒšáƒ˜ áƒ¤áƒ�áƒ˜áƒšáƒ˜ áƒ•áƒ”áƒ  áƒ•áƒ˜áƒžáƒ�áƒ•áƒ”"
+
+#: bfd.c:718
+msgid "malformed archive"
+msgstr "áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ�áƒ áƒ¥áƒ˜áƒ•áƒ˜"
+
+#: bfd.c:719
+msgid "DSO missing from command line"
+msgstr ""
+
+#: bfd.c:720
+msgid "file format not recognized"
+msgstr "áƒ¤áƒ�áƒ˜áƒšáƒ˜áƒ¡ áƒ¤áƒ�áƒ áƒ›áƒ�áƒ¢áƒ˜ áƒ£áƒªáƒœáƒ�áƒ‘áƒ˜áƒ�"
+
+#: bfd.c:721
+msgid "file format is ambiguous"
+msgstr "áƒ¤áƒ�áƒ˜áƒšáƒ˜áƒ¡ áƒ¤áƒ�áƒ áƒ›áƒ�áƒ¢áƒ˜ áƒ’áƒ�áƒ£áƒ áƒ™áƒ•áƒ”áƒ•áƒ”áƒšáƒ˜áƒ�"
+
+#: bfd.c:722
+msgid "section has no contents"
+msgstr "áƒ¡áƒ”áƒ¥áƒªáƒ˜áƒ�áƒ¡ áƒ¨áƒ”áƒ›áƒªáƒ•áƒ”áƒšáƒ�áƒ‘áƒ� áƒ�áƒ  áƒ’áƒ�áƒ�áƒ©áƒœáƒ˜áƒ�"
+
+#: bfd.c:723
+msgid "nonrepresentable section on output"
+msgstr ""
+
+#: bfd.c:724
+msgid "symbol needs debug section which does not exist"
+msgstr ""
+
+#: bfd.c:725
+msgid "bad value"
+msgstr "áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ›áƒœáƒ˜áƒ¨áƒ•áƒœáƒ”áƒšáƒ�áƒ‘áƒ�"
+
+#: bfd.c:726
+msgid "file truncated"
+msgstr "áƒ¤áƒ�áƒ˜áƒšáƒ˜ áƒ¬áƒ�áƒ™áƒ•áƒ”áƒ—áƒ˜áƒšáƒ˜áƒ�"
+
+#: bfd.c:727
+msgid "file too big"
+msgstr "áƒ¤áƒ�áƒ˜áƒšáƒ˜ .áƒ«áƒ�áƒšáƒ˜áƒ�áƒœ áƒ“áƒ˜áƒ“áƒ˜áƒ�"
+
+#: bfd.c:728
+msgid "sorry, cannot handle this file"
+msgstr "áƒ�áƒ› áƒ¤áƒ�áƒ˜áƒšáƒ˜áƒ¡ áƒ“áƒ�áƒ›áƒ£áƒ¨áƒ�áƒ•áƒ”áƒ‘áƒ� áƒ�áƒ  áƒ¨áƒ”áƒ›áƒ˜áƒ«áƒšáƒ˜áƒ�"
+
+#: bfd.c:729
+#, c-format
+msgid "error reading %s: %s"
+msgstr "áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ� '%s'-áƒ˜áƒ¡ áƒ™áƒ˜áƒ—áƒ®áƒ•áƒ˜áƒ¡áƒ�áƒ¡. %s"
+
+#: bfd.c:730
+msgid "#<invalid error code>"
+msgstr "#<invalid error code>"
+
+#: bfd.c:1775
+#, c-format
+msgid "BFD %s assertion fail %s:%d"
+msgstr ""
+
+#: bfd.c:1788
+#, c-format
+msgid "BFD %s internal error, aborting at %s:%d in %s\n"
+msgstr ""
+
+#: bfd.c:1793
+#, c-format
+msgid "BFD %s internal error, aborting at %s:%d\n"
+msgstr ""
+
+#: bfd.c:1795
+msgid "Please report this bug.\n"
+msgstr "áƒ’áƒ—áƒ®áƒ�áƒ•áƒ— áƒ’áƒ�áƒ“áƒ�áƒ�áƒ’áƒ–áƒ�áƒ•áƒœáƒ�áƒ— áƒ�áƒœáƒ’áƒ�áƒ áƒ˜áƒ¨áƒ˜ áƒ�áƒ› áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ˜áƒ¡ áƒ¨áƒ”áƒ¡áƒ�áƒ®áƒ”áƒ‘.\n"
+
+#: bfdwin.c:207
+#, c-format
+msgid "not mapping: data=%lx mapped=%d\n"
+msgstr ""
+
+#: bfdwin.c:210
+#, c-format
+msgid "not mapping: env var not set\n"
+msgstr ""
+
+#: binary.c:277
+#, c-format
+msgid "warning: writing section `%pA' at huge (ie negative) file offset"
+msgstr ""
+
+#: cache.c:275
+#, c-format
+msgid "reopening %pB: %s"
+msgstr "%pB-áƒ˜áƒ¡ áƒ—áƒ�áƒ•áƒ˜áƒ“áƒ�áƒœ áƒ’áƒ�áƒ®áƒ¡áƒœáƒ�: %s"
+
+#: coff-alpha.c:450
+#, c-format
+msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
+msgstr ""
+
+#: coff-alpha.c:857 coff-alpha.c:894 coff-alpha.c:1963 coff-mips.c:959
+msgid "GP relative relocation used when GP not defined"
+msgstr ""
+
+#: coff-alpha.c:1450
+msgid "using multiple gp values"
+msgstr ""
+
+#: coff-alpha.c:1508 coff-alpha.c:1514 elf.c:9591 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7651 elf32-ppc.c:8846 elf64-ppc.c:16806
+#, c-format
+msgid "%pB: %s unsupported"
+msgstr "%pB: %s áƒ›áƒ®áƒ�áƒ áƒ“áƒ�áƒ­áƒ”áƒ áƒ˜áƒšáƒ˜ áƒ�áƒ áƒ�áƒ�"
+
+#: coff-go32.c:164 coffswap.h:819
+#, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: áƒ’áƒ�áƒ¤áƒ áƒ—áƒ®áƒ˜áƒšáƒ”áƒ‘áƒ�: %s: áƒ®áƒ�áƒ–áƒ˜áƒ¡ áƒœáƒ�áƒ›áƒ áƒ”áƒ‘áƒ˜áƒ¡ áƒ’áƒ�áƒ“áƒ�áƒ•áƒ¡áƒ”áƒ‘áƒ�: 0x%lx > 0xffff"
+
+#: coff-mips.c:649 elf32-mips.c:1743 elf32-score.c:433 elf32-score7.c:333
+#: elf64-mips.c:3450 elfn32-mips.c:3277
+msgid "GP relative relocation when _gp not defined"
+msgstr ""
+
+#: coff-rs6000.c:484 coff64-rs6000.c:377
+#, c-format
+msgid "%pB: unsupported swap_aux_in for storage class %#x"
+msgstr ""
+
+#: coff-rs6000.c:571 coff64-rs6000.c:497
+#, c-format
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr ""
+
+#: coff-rs6000.c:3045
+#, c-format
+msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
+msgstr ""
+
+#: coff-rs6000.c:3169 coff64-rs6000.c:848
+#, c-format
+msgid "Unable to find the stub entry targeting %s"
+msgstr ""
+
+#: coff-rs6000.c:3284
+#, c-format
+msgid "%pB: TLS relocation at 0x%<PRIx64> over non-TLS symbol %s (0x%x)\n"
+msgstr ""
+
+#: coff-rs6000.c:3297
+#, c-format
+msgid "%pB: TLS local relocation at 0x%<PRIx64> over imported symbol %s\n"
+msgstr ""
+
+#: coff-rs6000.c:3703
+#, c-format
+msgid "%pB: relocation (%d) at 0x%<PRIx64> has wrong r_rsize (0x%x)\n"
+msgstr ""
+
+#: coff-rs6000.c:3965 coff64-rs6000.c:2037
+#, c-format
+msgid "%pB: symbol `%s' has unrecognized smclas %d"
+msgstr ""
+
+#: coff-sh.c:779 elf32-sh.c:520
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES offset"
+msgstr ""
+
+#: coff-sh.c:790
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn %#x"
+msgstr ""
+
+#: coff-sh.c:808 elf32-sh.c:551
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
+msgstr ""
+
+#: coff-sh.c:833 elf32-sh.c:567
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: could not find expected reloc"
+msgstr ""
+
+#: coff-sh.c:850 elf32-sh.c:596
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
+msgstr ""
+
+#: coff-sh.c:976 elf32-sh.c:726
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
+msgstr ""
+
+#: coff-sh.c:986 elf32-sh.c:737
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: bad count"
+msgstr "%pB: %#<PRIx64>: áƒ’áƒ�áƒ¤áƒ áƒ—áƒ®áƒ˜áƒšáƒ”áƒ‘áƒ�: áƒ�áƒ áƒ�áƒ¡áƒ¬áƒ�áƒ áƒ˜ áƒ áƒ�áƒ�áƒ“áƒ”áƒœáƒ�áƒ‘áƒ�"
+
+#: coff-sh.c:1357 coff-sh.c:2645 elf32-sh.c:1137 elf32-sh.c:1504
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
+msgstr ""
+
+#: coff-sh.c:1452
+#, c-format
+msgid "%pB: fatal: generic symbols retrieved before relaxing"
+msgstr ""
+
+#: coff-sh.c:2782 cofflink.c:2915
+#, c-format
+msgid "%pB: illegal symbol index %ld in relocs"
+msgstr ""
+
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:366 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5177
+#, c-format
+msgid "%pB: warning: illegal symbol index %ld in relocs"
+msgstr ""
+
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
+#, c-format
+msgid "%pB: C_STAT isn't supported by XCOFF64"
+msgstr ""
+
+#: coff64-rs6000.c:477
+#, c-format
+msgid "%pB: wrong auxtype %#x for storage class %#x"
+msgstr ""
+
+#: coff64-rs6000.c:1598
+#, c-format
+msgid "%pB: relocation (%d) at (0x%<PRIx64>) has wrong r_rsize (0x%x)\n"
+msgstr ""
+
+#: coffcode.h:990
+#, c-format
+msgid "%pB: unable to load COMDAT section name"
+msgstr ""
+
+#. Malformed input files can trigger this test.
+#. cf PR 21781.
+#: coffcode.h:1025
+#, c-format
+msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
+msgstr ""
+
+#: coffcode.h:1037
+#, c-format
+msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
+msgstr ""
+
+#: coffcode.h:1047
+#, c-format
+msgid "%pB: warning: no symbol for section '%s' found"
+msgstr ""
+
+#. Generate a warning message rather using the 'unhandled'
+#. variable as this will allow some .sys files generate by
+#. other toolchains to be processed.  See bugzilla issue 196.
+#: coffcode.h:1278
+#, c-format
+msgid "%pB: warning: ignoring section flag %s in section %s"
+msgstr ""
+
+#: coffcode.h:1347
+#, c-format
+msgid "%pB (%s): section flag %s (%#lx) ignored"
+msgstr ""
+
+#: coffcode.h:1960
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr ""
+
+#: coffcode.h:1969 coffcode.h:2034
+#, c-format
+msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
+msgstr ""
+
+#: coffcode.h:2407
+#, c-format
+msgid "unrecognized TI COFF target id '0x%x'"
+msgstr ""
+
+#: coffcode.h:2685
+#, c-format
+msgid "%pB: reloc against a non-existent symbol index: %ld"
+msgstr ""
+
+#: coffcode.h:3148
+#, c-format
+msgid "%pB: too many sections (%d)"
+msgstr ""
+
+#: coffcode.h:3584
+#, c-format
+msgid "%pB: section %pA: string table overflow at offset %ld"
+msgstr ""
+
+#: coffcode.h:3691
+#, c-format
+msgid "%pB:%s section %s: alignment 2**%u not representable"
+msgstr ""
+
+#: coffcode.h:4415
+#, c-format
+msgid "%pB: warning: line number table read failed"
+msgstr ""
+
+#: coffcode.h:4461 coffcode.h:4475
+#, c-format
+msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
+msgstr ""
+
+#: coffcode.h:4489
+#, c-format
+msgid "%pB: warning: illegal symbol in line number entry %d"
+msgstr ""
+
+#: coffcode.h:4502
+#, c-format
+msgid "%pB: warning: duplicate line number information for `%s'"
+msgstr ""
+
+#: coffcode.h:4921
+#, c-format
+msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
+msgstr ""
+
+#: coffcode.h:5061
+#, c-format
+msgid "warning: %pB: local symbol `%s' has no section"
+msgstr ""
+
+#: coffcode.h:5217
+#, c-format
+msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
+msgstr ""
+
+#: coffgen.c:175 elf.c:1224
+#, c-format
+msgid "%pB: unable to compress section %s"
+msgstr ""
+
+#: coffgen.c:185 elf.c:1234
+#, c-format
+msgid "%pB: unable to decompress section %s"
+msgstr ""
+
+#: coffgen.c:1645
+#, c-format
+msgid "%pB: bad string table size %<PRIu64>"
+msgstr ""
+
+#: coffgen.c:1818 coffgen.c:1864 coffgen.c:1915 coffgen.c:1933 cofflink.c:1980
+#: elf.c:1924 xcofflink.c:5541
+msgid "<corrupt>"
+msgstr "<corrupt>"
+
+#: coffgen.c:2073
+#, c-format
+msgid "<corrupt info> %s"
+msgstr "<corrupt info> %s"
+
+#: coffgen.c:2677 elflink.c:15129 linker.c:2963
+msgid "%F%P: already_linked_table: %E\n"
+msgstr "%F%P: already_linked_table: %E\n"
+
+#: coffgen.c:3019 elflink.c:14069
+#, c-format
+msgid "removing unused section '%pA' in file '%pB'"
+msgstr ""
+
+#: coffgen.c:3096 elflink.c:14299
+msgid "warning: gc-sections option ignored"
+msgstr ""
+
+#: cofflink.c:366
+#, c-format
+msgid "warning: symbol `%s' is both section and non-section"
+msgstr ""
+
+#: cofflink.c:471 elf64-ia64-vms.c:5196 elflink.c:5357
+#, c-format
+msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
+msgstr ""
+
+#: cofflink.c:2308
+#, c-format
+msgid "%pB: relocs in section `%pA', but it has no contents"
+msgstr ""
+
+#: cofflink.c:2371 elflink.c:11510
+#, c-format
+msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
+msgstr ""
+
+#: cofflink.c:2566
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%<PRIx64>)"
+msgstr ""
+
+#: cofflink.c:2684
+#, c-format
+msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
+msgstr ""
+
+#: cofflink.c:2692
+#, c-format
+msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
+msgstr ""
+
+#: cofflink.c:3085
+#, c-format
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr ""
+
+#: coffswap.h:833
+#, c-format
+msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
+msgstr ""
+
+#: compress.c:747 compress.c:764
+#, c-format
+msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
+msgstr ""
+
+#: cpu-arm.c:320 cpu-arm.c:332
+#, c-format
+msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
+msgstr ""
+
+#: cpu-arm.c:468
+#, c-format
+msgid "warning: unable to update contents of %s section in %pB"
+msgstr ""
+
+#: dwarf2.c:702
+#, c-format
+msgid "DWARF error: can't find %s section."
+msgstr ""
+
+#. PR 26946
+#: dwarf2.c:711
+#, c-format
+msgid "DWARF error: section %s is too big"
+msgstr ""
+
+#: dwarf2.c:746
+#, c-format
+msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
+msgstr ""
+
+#: dwarf2.c:1493
+msgid "DWARF error: info pointer extends beyond end of attributes"
+msgstr ""
+
+#: dwarf2.c:1685
+#, c-format
+msgid "DWARF error: invalid or unhandled FORM value: %#x"
+msgstr ""
+
+#: dwarf2.c:2032
+msgid "DWARF error: mangled line number section (bad file number)"
+msgstr ""
+
+#: dwarf2.c:2576
+msgid "DWARF error: zero format count"
+msgstr ""
+
+#: dwarf2.c:2586
+#, c-format
+msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
+msgstr ""
+
+#: dwarf2.c:2625
+#, c-format
+msgid "DWARF error: unknown format content type %<PRIu64>"
+msgstr ""
+
+#: dwarf2.c:2698
+#, c-format
+msgid "DWARF error: line info section is too small (%<PRId64>)"
+msgstr ""
+
+#: dwarf2.c:2725
+#, c-format
+msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
+msgstr ""
+
+#: dwarf2.c:2738
+#, c-format
+msgid "DWARF error: unhandled .debug_line version %d"
+msgstr ""
+
+#: dwarf2.c:2747
+msgid "DWARF error: ran out of room reading prologue"
+msgstr ""
+
+#: dwarf2.c:2763
+#, c-format
+msgid "DWARF error: line info unsupported segment selector size %u"
+msgstr ""
+
+#: dwarf2.c:2785
+msgid "DWARF error: invalid maximum operations per instruction"
+msgstr ""
+
+#: dwarf2.c:2797
+msgid "DWARF error: ran out of room reading opcodes"
+msgstr ""
+
+#: dwarf2.c:2975
+msgid "DWARF error: mangled line number section"
+msgstr ""
+
+#: dwarf2.c:3446
+msgid "DWARF error: abstract instance recursion detected"
+msgstr ""
+
+#: dwarf2.c:3480 dwarf2.c:3570
+msgid "DWARF error: invalid abstract instance DIE ref"
+msgstr ""
+
+#: dwarf2.c:3496
+#, c-format
+msgid "DWARF error: unable to read alt ref %<PRIu64>"
+msgstr ""
+
+#: dwarf2.c:3548
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr ""
+
+#: dwarf2.c:3585 dwarf2.c:3901 dwarf2.c:4471
+#, c-format
+msgid "DWARF error: could not find abbrev number %u"
+msgstr ""
+
+#: dwarf2.c:4171
+#, c-format
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
+msgstr ""
+
+#: dwarf2.c:4317 dwarf2.c:4571
+msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
+msgstr ""
+
+#: dwarf2.c:4388
+#, c-format
+msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
+msgstr ""
+
+#: dwarf2.c:4435
+#, c-format
+msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
+msgstr ""
+
+#: ecoff.c:940
+#, c-format
+msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
+msgstr ""
+
+#: ecoff.c:1236
+#, c-format
+msgid "unknown basic type %d"
+msgstr ""
+
+#: ecoff.c:1492
+#, c-format
+msgid ""
+"\n"
+"      End+1 symbol: %ld"
+msgstr ""
+
+#: ecoff.c:1499 ecoff.c:1502
+#, c-format
+msgid ""
+"\n"
+"      First symbol: %ld"
+msgstr ""
+
+#: ecoff.c:1517
+#, c-format
+msgid ""
+"\n"
+"      End+1 symbol: %-7ld   Type:  %s"
+msgstr ""
+
+#: ecoff.c:1525
+#, c-format
+msgid ""
+"\n"
+"      Local symbol: %ld"
+msgstr ""
+
+#: ecoff.c:1533
+#, c-format
+msgid ""
+"\n"
+"      struct; End+1 symbol: %ld"
+msgstr ""
+
+#: ecoff.c:1538
+#, c-format
+msgid ""
+"\n"
+"      union; End+1 symbol: %ld"
+msgstr ""
+
+#: ecoff.c:1543
+#, c-format
+msgid ""
+"\n"
+"      enum; End+1 symbol: %ld"
+msgstr ""
+
+#: ecoff.c:1551
+#, c-format
+msgid ""
+"\n"
+"      Type: %s"
+msgstr ""
+"\n"
+"      áƒ¢áƒ˜áƒžáƒ˜: %s"
+
+#: elf-attrs.c:477
+#, c-format
+msgid "%pB: error: attribute section '%pA' too big: %#llx"
+msgstr ""
+
+#: elf-attrs.c:514
+#, c-format
+msgid "%pB: error: attribute section length too small: %ld"
+msgstr ""
+
+#: elf-attrs.c:644
+#, c-format
+msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain"
+msgstr ""
+
+#: elf-attrs.c:654
+#, c-format
+msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
+msgstr ""
+
+#: elf-eh-frame.c:944
+#, c-format
+msgid "discarding zero address range FDE in %pB(%pA).\n"
+msgstr ""
+
+#: elf-eh-frame.c:1049
+#, c-format
+msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
+msgstr ""
+
+#: elf-eh-frame.c:1541
+#, c-format
+msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
+msgstr ""
+
+#: elf-eh-frame.c:1548
+msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
+msgstr ""
+
+#: elf-eh-frame.c:1867
+#, c-format
+msgid "%pB: %pA not in order"
+msgstr ""
+
+#: elf-eh-frame.c:1881
+#, c-format
+msgid "%pB: %pA invalid input section size"
+msgstr ""
+
+#: elf-eh-frame.c:1889
+#, c-format
+msgid "%pB: %pA points past end of text section"
+msgstr ""
+
+#: elf-eh-frame.c:2142
+msgid "DW_EH_PE_datarel unspecified for this architecture"
+msgstr ""
+
+#: elf-eh-frame.c:2313
+#, c-format
+msgid "invalid output section for .eh_frame_entry: %pA"
+msgstr ""
+
+#: elf-eh-frame.c:2336
+#, c-format
+msgid "invalid contents in %pA section"
+msgstr ""
+
+#: elf-eh-frame.c:2492
+msgid ".eh_frame_hdr entry overflow"
+msgstr ""
+
+#: elf-eh-frame.c:2494
+msgid ".eh_frame_hdr refers to overlapping FDEs"
+msgstr ""
+
+#. xgettext:c-format.
+#: elf-ifunc.c:144 elfnn-loongarch.c:1278
+#, c-format
+msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
+msgstr ""
+
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-bfin.c:3133 elf32-cr16.c:1429
+#: elf32-cris.c:2034 elf32-crx.c:922 elf32-d10v.c:510 elf32-epiphany.c:562
+#: elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:492 elf32-h8300.c:523
+#: elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1070 elf32-m32c.c:624
+#: elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522 elf32-metag.c:1984
+#: elf32-microblaze.c:1664 elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6093
+#: elf32-or1k.c:1889 elf32-score.c:2734 elf32-score7.c:2545 elf32-spu.c:5085
+#: elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
+#: elf32-xstormy16.c:930 elf64-bpf.c:552 elf64-mmix.c:1541 elfxx-tilegx.c:3742
+msgid "internal error: out of range error"
+msgstr "áƒ¨áƒ˜áƒ“áƒ� áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�: áƒ“áƒ˜áƒ�áƒžáƒ�áƒ–áƒ�áƒœáƒ¡ áƒ’áƒ�áƒ“áƒ�áƒªáƒ˜áƒšáƒ”áƒ‘áƒ˜áƒ¡ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�"
+
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-bfin.c:3137 elf32-cr16.c:1433
+#: elf32-cris.c:2038 elf32-crx.c:926 elf32-d10v.c:514 elf32-fr30.c:598
+#: elf32-frv.c:4053 elf32-ft32.c:496 elf32-h8300.c:527 elf32-iq2000.c:695
+#: elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841 elf32-m68hc1x.c:1275
+#: elf32-mep.c:526 elf32-metag.c:1988 elf32-microblaze.c:1668
+#: elf32-moxie.c:292 elf32-msp430.c:1510 elf32-nds32.c:6097 elf32-or1k.c:1893
+#: elf32-score.c:2738 elf32-score7.c:2549 elf32-spu.c:5089
+#: elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684
+#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10628
+#: elfxx-tilegx.c:3746
+msgid "internal error: unsupported relocation error"
+msgstr ""
+
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:930 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
+#: elf32-microblaze.c:1672 elf32-nds32.c:6101 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5093
+msgid "internal error: dangerous error"
+msgstr "áƒ¨áƒ˜áƒ“áƒ� áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�: áƒ¡áƒ�áƒ¨áƒ˜áƒ¨áƒ˜ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�"
+
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-bfin.c:3145 elf32-cr16.c:1441
+#: elf32-cris.c:2046 elf32-crx.c:934 elf32-d10v.c:522 elf32-epiphany.c:577
+#: elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:504 elf32-h8300.c:535
+#: elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1082 elf32-m32c.c:636
+#: elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534 elf32-metag.c:1996
+#: elf32-microblaze.c:1676 elf32-moxie.c:300 elf32-msp430.c:1518
+#: elf32-mt.c:410 elf32-nds32.c:6105 elf32-or1k.c:1901 elf32-score.c:2751
+#: elf32-score7.c:2557 elf32-spu.c:5097 elf32-tilepro.c:3384 elf32-v850.c:2318
+#: elf32-visium.c:692 elf32-xstormy16.c:942 elf64-bpf.c:565 elf64-mmix.c:1553
+#: elfxx-tilegx.c:3754
+msgid "internal error: unknown error"
+msgstr "áƒ¨áƒ˜áƒ“áƒ� áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�: áƒ£áƒªáƒœáƒ�áƒ‘áƒ˜ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�"
+
+#: elf-m10300.c:1030
+#, c-format
+msgid "%pB: unsupported transition from %s to %s"
+msgstr ""
+
+#: elf-m10300.c:1197
+#, c-format
+msgid "%pB: %s' accessed both as normal and thread local symbol"
+msgstr ""
+
+#: elf-m10300.c:2093 elf32-arm.c:13392 elf32-i386.c:3459 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3671 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3023 elf64-s390.c:3042 elf64-x86-64.c:4182
+#: elfxx-sparc.c:2917 elfxx-sparc.c:3814 elfxx-tilegx.c:3665
+#: elfnn-aarch64.c:5515 elfnn-aarch64.c:7120
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
+msgstr ""
+
+#: elf-m10300.c:2155
+msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
+msgstr ""
+
+#: elf-m10300.c:2159
+#, c-format
+msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library"
+msgstr ""
+
+#: elf-m10300.c:2162
+msgid "internal error: suspicious relocation type used in shared library"
+msgstr ""
+
+#: elf-m10300.c:2650 elf32-avr.c:2488 elf32-frv.c:5621 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8424 reloc16.c:155 elfnn-ia64.c:365
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr ""
+
+#: elf-properties.c:65
+#, c-format
+msgid "%pB: out of memory in _bfd_elf_get_property"
+msgstr ""
+
+#: elf-properties.c:91
+#, c-format
+msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lx"
+msgstr ""
+
+#: elf-properties.c:112
+#, c-format
+msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%x"
+msgstr ""
+
+#: elf-properties.c:151
+#, c-format
+msgid "warning: %pB: corrupt stack size: 0x%x"
+msgstr ""
+
+#: elf-properties.c:169
+#, c-format
+msgid "warning: %pB: corrupt no copy on protected size: 0x%x"
+msgstr ""
+
+#: elf-properties.c:189
+#, c-format
+msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
+msgstr ""
+
+#: elf-properties.c:214
+#, c-format
+msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
+msgstr ""
+
+#: elf-properties.c:400
+msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
+msgstr ""
+
+#: elf-properties.c:406
+msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
+msgstr ""
+
+#: elf-properties.c:415 elf-properties.c:493
+msgid "Removed property %W to merge %pB and %pB\n"
+msgstr ""
+
+#: elf-properties.c:419
+msgid "Removed property %W to merge %pB and %pB (not found)\n"
+msgstr ""
+
+#: elf-properties.c:436
+msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
+msgstr ""
+
+#: elf-properties.c:445
+msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
+msgstr ""
+
+#: elf-properties.c:487
+msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
+msgstr ""
+
+#: elf-properties.c:668 elfxx-aarch64.c:758 elfxx-x86.c:4087
+msgid "%F%P: failed to create GNU property section\n"
+msgstr ""
+
+#: elf-properties.c:672 elfxx-aarch64.c:762 elfxx-x86.c:4092
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr ""
+
+#. Merge .note.gnu.property sections.
+#: elf-properties.c:698 elf-properties.c:700
+msgid "\n"
+msgstr "\n"
+
+#: elf-properties.c:699
+msgid "Merging program properties\n"
+msgstr "áƒžáƒ áƒ�áƒ’áƒ áƒ�áƒ›áƒ˜áƒ¡ áƒ—áƒ•áƒ˜áƒ¡áƒ”áƒ‘áƒ”áƒ‘áƒ˜áƒ¡ áƒ¨áƒ”áƒ áƒ¬áƒ§áƒ›áƒ�\n"
+
+#: elf-sframe.c:239
+#, c-format
+msgid "error in %pB(%pA); no .sframe will be created"
+msgstr ""
+
+#: elf-sframe.c:397
+msgid "input SFrame sections with different abi prevent .sframe generation"
+msgstr ""
+
+#. PR 17512: file: f057ec89.
+#: elf.c:337
+#, c-format
+msgid "%pB: attempt to load strings from a non-string section (number %d)"
+msgstr ""
+
+#: elf.c:362
+#, c-format
+msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
+msgstr ""
+
+#: elf.c:515 elfnn-aarch64.c:8120 elfnn-loongarch.c:3919
+#, c-format
+msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
+msgstr ""
+
+#: elf.c:677
+#, c-format
+msgid "%pB: invalid size field in group section header: %#<PRIx64>"
+msgstr ""
+
+#: elf.c:722
+#, c-format
+msgid "%pB: invalid entry in SHT_GROUP section [%u]"
+msgstr ""
+
+#: elf.c:741
+#, c-format
+msgid "%pB: no valid group sections found"
+msgstr ""
+
+#. See PR 21957 for a reproducer.
+#: elf.c:770
+#, c-format
+msgid "%pB: group section '%pA' has no contents"
+msgstr ""
+
+#: elf.c:831
+#, c-format
+msgid "%pB: no group info for section '%pA'"
+msgstr ""
+
+#: elf.c:883
+#, c-format
+msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
+msgstr ""
+
+#: elf.c:896
+#, c-format
+msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
+msgstr ""
+
+#: elf.c:918
+#, c-format
+msgid "%pB: section group entry number %u is corrupt"
+msgstr ""
+
+#: elf.c:941
+#, c-format
+msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
+msgstr ""
+
+#: elf.c:1242
+#, c-format
+msgid "%pB: section %s is compressed with zstd, but BFD is not built with zstd support"
+msgstr ""
+
+#: elf.c:1438
+#, c-format
+msgid "%pB: invalid sh_link field (%d) in section number %d"
+msgstr ""
+
+#: elf.c:1454
+#, c-format
+msgid "%pB: failed to find link section for section %d"
+msgstr ""
+
+#: elf.c:1481
+#, c-format
+msgid "%pB: failed to find info section for section %d"
+msgstr ""
+
+#: elf.c:1658
+#, c-format
+msgid ""
+"\n"
+"Program Header:\n"
+msgstr ""
+"\n"
+"áƒžáƒ áƒ�áƒ’áƒ áƒ�áƒ›áƒ˜áƒ¡ áƒ—áƒ�áƒ•áƒ¡áƒ�áƒ áƒ—áƒ˜:\n"
+
+#: elf.c:1700
+#, c-format
+msgid ""
+"\n"
+"Dynamic Section:\n"
+msgstr ""
+"\n"
+"áƒ“áƒ˜áƒœáƒ�áƒ›áƒ˜áƒ™áƒ£áƒ áƒ˜ áƒ¡áƒ”áƒ¥áƒªáƒ˜áƒ�:\n"
+
+#: elf.c:1839
+#, c-format
+msgid ""
+"\n"
+"Version definitions:\n"
+msgstr ""
+"\n"
+"áƒ•áƒ”áƒ áƒ¡áƒ˜áƒ˜áƒ¡ áƒ�áƒ¦áƒ¬áƒ”áƒ áƒ”áƒ‘áƒ˜:\n"
+
+#: elf.c:1864
+#, c-format
+msgid ""
+"\n"
+"Version References:\n"
+msgstr ""
+"\n"
+"áƒ•áƒ”áƒ áƒ¡áƒ˜áƒ˜áƒ¡ áƒ›áƒ˜áƒ›áƒ�áƒ áƒ—áƒ•áƒ”áƒ‘áƒ˜:\n"
+
+#: elf.c:1869
+#, c-format
+msgid "  required from %s:\n"
+msgstr ""
+
+#: elf.c:2060
+#, c-format
+msgid "%pB: warning: loop in section dependencies detected"
+msgstr ""
+
+#: elf.c:2167
+#, c-format
+msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
+msgstr ""
+
+#: elf.c:2252
+#, c-format
+msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
+msgstr ""
+
+#: elf.c:2371
+#, c-format
+msgid "%pB: invalid link %u for reloc section %s (index %u)"
+msgstr ""
+
+#: elf.c:2427
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr ""
+
+#: elf.c:2515 elf.c:2529 elf.c:2540 elf.c:2553
+#, c-format
+msgid "%pB: unknown type [%#x] section `%s'"
+msgstr ""
+
+#: elf.c:3213
+#, c-format
+msgid "%pB: error: alignment power %d of section `%pA' is too big"
+msgstr ""
+
+#: elf.c:3248
+#, c-format
+msgid "warning: section `%pA' type changed to PROGBITS"
+msgstr ""
+
+#: elf.c:3754
+#, c-format
+msgid "%pB: too many sections: %u"
+msgstr ""
+
+#: elf.c:3840
+#, c-format
+msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
+msgstr ""
+
+#: elf.c:3858
+#, c-format
+msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
+msgstr ""
+
+#: elf.c:4446
+#, c-format
+msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
+msgstr ""
+
+#: elf.c:4629
+msgid "%F%P: failed to size relative relocations\n"
+msgstr ""
+
+#: elf.c:5054
+#, c-format
+msgid "%pB: TLS sections are not adjacent:"
+msgstr ""
+
+#: elf.c:5061
+#, c-format
+msgid "\t    TLS: %pA"
+msgstr "\t    TLS: %pA"
+
+#: elf.c:5065
+#, c-format
+msgid "\tnon-TLS: %pA"
+msgstr "\táƒ�áƒ áƒ�-TLS: %pA"
+
+#: elf.c:5709
+#, c-format
+msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
+msgstr ""
+
+#: elf.c:5735
+#, c-format
+msgid "%pB: not enough room for program headers, try linking with -N"
+msgstr ""
+
+#: elf.c:5852
+#, c-format
+msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
+msgstr ""
+
+#. The fix for this error is usually to edit the linker script being
+#. used and set up the program headers manually.  Either that or
+#. leave room for the headers at the start of the SECTIONS.
+#: elf.c:5990
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr ""
+
+#: elf.c:6030
+#, c-format
+msgid "%pB: section `%pA' can't be allocated in segment %d"
+msgstr ""
+
+#: elf.c:6171
+#, c-format
+msgid "%pB: warning: allocated section `%s' not in segment"
+msgstr ""
+
+#: elf.c:6306
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr ""
+
+#: elf.c:6337
+#, c-format
+msgid "%pB: error: non-load segment %d includes file header and/or program header"
+msgstr ""
+
+#: elf.c:6477
+#, c-format
+msgid "warning: %pB has a TLS segment with execute permission"
+msgstr ""
+
+#: elf.c:6483
+#, c-format
+msgid "warning: %pB has a LOAD segment with RWX permissions"
+msgstr ""
+
+#: elf.c:6864
+#, c-format
+msgid "%pB: symbol `%s' required but not present"
+msgstr ""
+
+#: elf.c:7239
+#, c-format
+msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
+msgstr ""
+
+#: elf.c:7899
+#, c-format
+msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
+msgstr ""
+
+#: elf.c:8407
+#, c-format
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr ""
+
+#: elf.c:8437
+#, c-format
+msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
+msgstr ""
+
+#: elf.c:8851
+#, c-format
+msgid "%pB: .gnu.version_r invalid entry"
+msgstr ""
+
+#: elf.c:8986
+#, c-format
+msgid "%pB: .gnu.version_d invalid entry"
+msgstr ""
+
+#: elf.c:9464
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr ""
+
+#: elf.c:9476
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr ""
+
+#: elf.c:10381
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr ""
+
+#: elf.c:10460
+#, c-format
+msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
+msgstr ""
+
+#: elf.c:13054
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:13057
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:13060
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:13063
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:13282
+#, c-format
+msgid "%pB(%pA): relocation %zu has invalid symbol index %lu"
+msgstr ""
+
+#: elf.c:13358
+#, c-format
+msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
+msgstr ""
+
+#: elf.c:13372
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr ""
+
+#: elf.c:13386
+#, c-format
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr ""
+
+#: elf.c:13462
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr ""
+
+#: elf.c:13474
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr ""
+
+#: elf.c:13486
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr ""
+
+#: elf.c:13500
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr ""
+
+#: elf.c:13523
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr ""
+
+#: elf.c:13543
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %zu is empty"
+msgstr ""
+
+#: elf.c:13568
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a missing symbol"
+msgstr ""
+
+#: elf.c:13586
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a deleted symbol"
+msgstr ""
+
+#: elf.c:13600
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu is of an unknown type"
+msgstr ""
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15118 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3217
+#: elf32-visium.c:844 elf64-ppc.c:5503 elfnn-aarch64.c:7350
+#, c-format
+msgid "private flags = 0x%lx:"
+msgstr ""
+
+#: elf32-arc.c:642
+#, c-format
+msgid "warning: %pB: conflicting platform configuration %s with %s"
+msgstr ""
+
+#: elf32-arc.c:661
+#, c-format
+msgid "error: %pB: unable to merge CPU base attributes %s with %s"
+msgstr ""
+
+#: elf32-arc.c:698
+#, c-format
+msgid "error: %pB: unable to merge ISA extension attributes %s"
+msgstr ""
+
+#: elf32-arc.c:722
+#, c-format
+msgid "error: %pB: conflicting ISA extension attributes %s with %s"
+msgstr ""
+
+#: elf32-arc.c:762
+#, c-format
+msgid "error: %pB: cannot mix rf16 with full register set %pB"
+msgstr ""
+
+#: elf32-arc.c:790
+#, c-format
+msgid "error: %pB: conflicting attributes %s: %s with %s"
+msgstr ""
+
+#: elf32-arc.c:817
+#, c-format
+msgid "error: %pB: conflicting attributes %s"
+msgstr ""
+
+#: elf32-arc.c:922
+#, c-format
+msgid "error: attempting to link %pB with a binary %pB of different architecture"
+msgstr ""
+
+#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
+#: elf32-ppc.c:3860 elf64-sparc.c:737 elfxx-mips.c:15659
+#, c-format
+msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
+msgstr ""
+
+#: elf32-arc.c:1027
+msgid "error: the ARC4 architecture is no longer supported"
+msgstr ""
+
+#: elf32-arc.c:1033
+msgid "warning: unset or old architecture flags; use default machine"
+msgstr ""
+
+#: elf32-arc.c:1159
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
+msgstr ""
+
+#: elf32-arc.c:1170
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s+%#<PRIx64>' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
+msgstr ""
+
+#: elf32-arc.c:1885
+msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
+msgstr ""
+
+#: elf32-arc.c:1909 elf32-rx.c:1486
+#, c-format
+msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
+msgstr ""
+
+#: elf32-arc.c:1914 elf32-rx.c:1491
+#, c-format
+msgid "%pB(%pA): internal error: out of range error"
+msgstr ""
+
+#: elf32-arc.c:1919 elf32-rx.c:1496
+#, c-format
+msgid "%pB(%pA): internal error: unsupported relocation error"
+msgstr ""
+
+#: elf32-arc.c:1924 elf32-rx.c:1501
+#, c-format
+msgid "%pB(%pA): internal error: dangerous relocation"
+msgstr ""
+
+#: elf32-arc.c:1929 elf32-rx.c:1506
+#, c-format
+msgid "%pB(%pA): internal error: unknown error"
+msgstr ""
+
+#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15573 elf32-metag.c:2251
+#: elf32-nds32.c:5543 elfnn-aarch64.c:7757 elfnn-riscv.c:617
+#, c-format
+msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
+msgstr ""
+
+#: elf32-arc.c:2910
+#, c-format
+msgid "%pB: unknown mandatory ARC object attribute %d"
+msgstr ""
+
+#: elf32-arc.c:2918
+#, c-format
+msgid "warning: %pB: unknown ARC object attribute %d"
+msgstr ""
+
+#: elf32-arm.c:4346 elf32-arm.c:4380 elf32-arm.c:4399 elf32-arm.c:4451
+#, c-format
+msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction"
+msgstr ""
+
+#: elf32-arm.c:4411 elf32-arm.c:4465 elf32-arm.c:9157 elf32-arm.c:9247
+#, c-format
+msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
+msgstr ""
+
+#: elf32-arm.c:4591
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr ""
+
+#: elf32-arm.c:4760
+#, c-format
+msgid "no address assigned to the veneers output section %s"
+msgstr ""
+
+#: elf32-arm.c:4835 elf32-arm.c:6984 elf32-csky.c:3400 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3906
+#: elf64-ppc.c:14122 elfnn-aarch64.c:3198
+#, c-format
+msgid "%pB: cannot create stub entry %s"
+msgstr ""
+
+#: elf32-arm.c:5056 elf32-csky.c:3742 elf32-hppa.c:732 elf32-hppa.c:761
+#: elf32-hppa.c:842 elf32-m68hc11.c:422 elf32-m68hc12.c:542 elf32-metag.c:3345
+#: elf32-nios2.c:2494 elf64-ppc.c:12238 elf64-ppc.c:12246 xcofflink.c:4693
+#: elfnn-aarch64.c:3267
+msgid "%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr ""
+
+#: elf32-arm.c:6027
+#, c-format
+msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
+msgstr ""
+
+#: elf32-arm.c:6036
+#, c-format
+msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
+msgstr ""
+
+#: elf32-arm.c:6075
+#, c-format
+msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
+msgstr ""
+
+#: elf32-arm.c:6081
+#, c-format
+msgid "%pB: absent standard symbol `%s'"
+msgstr ""
+
+#: elf32-arm.c:6093
+#, c-format
+msgid "%pB: `%s' and its special symbol are in different sections"
+msgstr ""
+
+#: elf32-arm.c:6105
+#, c-format
+msgid "%pB: entry function `%s' not output"
+msgstr ""
+
+#: elf32-arm.c:6112
+#, c-format
+msgid "%pB: entry function `%s' is empty"
+msgstr ""
+
+#: elf32-arm.c:6241
+#, c-format
+msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
+msgstr ""
+
+#: elf32-arm.c:6290
+#, c-format
+msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
+msgstr ""
+
+#: elf32-arm.c:6312
+#, c-format
+msgid "entry function `%s' disappeared from secure code"
+msgstr ""
+
+#: elf32-arm.c:6336
+#, c-format
+msgid "`%s' refers to a non entry function"
+msgstr ""
+
+#: elf32-arm.c:6351
+#, c-format
+msgid "%pB: visibility of symbol `%s' has changed"
+msgstr ""
+
+#: elf32-arm.c:6360
+#, c-format
+msgid "%pB: incorrect size for symbol `%s'"
+msgstr ""
+
+#: elf32-arm.c:6379
+#, c-format
+msgid "offset of veneer for entry function `%s' not a multiple of its size"
+msgstr ""
+
+#: elf32-arm.c:6399
+msgid "new entry function(s) introduced but no output import library specified:"
+msgstr ""
+
+#: elf32-arm.c:6407
+#, c-format
+msgid "start address of `%s' is different from previous link"
+msgstr ""
+
+#: elf32-arm.c:7117 elf32-arm.c:7152
+#, c-format
+msgid "unable to find %s glue '%s' for '%s'"
+msgstr ""
+
+#: elf32-arm.c:7863
+#, c-format
+msgid "%pB: BE8 images only valid in big-endian mode"
+msgstr ""
+
+#. Give a warning, but do as the user requests anyway.
+#: elf32-arm.c:8090
+#, c-format
+msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
+msgstr ""
+
+#: elf32-arm.c:8117
+#, c-format
+msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
+msgstr ""
+
+#: elf32-arm.c:8653 elf32-arm.c:8673 elf32-arm.c:8740 elf32-arm.c:8759
+#, c-format
+msgid "%pB: unable to find %s veneer `%s'"
+msgstr ""
+
+#: elf32-arm.c:8966
+#, c-format
+msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
+msgstr ""
+
+#: elf32-arm.c:9064
+#, c-format
+msgid "invalid TARGET2 relocation type '%s'"
+msgstr ""
+
+#. FIXME: We ought to be able to generate thumb-1 PLT
+#. instructions...
+#: elf32-arm.c:9834
+#, c-format
+msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
+msgstr ""
+
+#: elf32-arm.c:10143 elf32-arm.c:10185
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
+msgstr ""
+
+#: elf32-arm.c:10535
+msgid "shared object"
+msgstr ""
+
+#: elf32-arm.c:10538
+msgid "PIE executable"
+msgstr ""
+
+#: elf32-arm.c:10541
+#, c-format
+msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
+msgstr ""
+
+#: elf32-arm.c:10643
+#, c-format
+msgid "\\%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr ""
+
+#: elf32-arm.c:11060
+#, c-format
+msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr ""
+
+#: elf32-arm.c:11694
+#, c-format
+msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
+msgstr ""
+
+#: elf32-arm.c:11969 elf32-arm.c:11995
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
+msgstr ""
+
+#: elf32-arm.c:12041 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-nios2.c:4382
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
+msgstr ""
+
+#: elf32-arm.c:12255
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
+msgstr ""
+
+#: elf32-arm.c:12296 elf32-arm.c:12388 elf32-arm.c:12476 elf32-arm.c:12566
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
+msgstr ""
+
+#: elf32-arm.c:12624 elf32-arm.c:12783
+msgid "local symbol index too big"
+msgstr ""
+
+#: elf32-arm.c:12634 elf32-arm.c:12668
+msgid "no dynamic index information available"
+msgstr ""
+
+#: elf32-arm.c:12676
+msgid "invalid dynamic index"
+msgstr ""
+
+#: elf32-arm.c:12793
+msgid "dynamic index information not available"
+msgstr ""
+
+#: elf32-arm.c:13224 elf32-sh.c:3565
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
+msgstr ""
+
+#: elf32-arm.c:13337 elf32-m68k.c:3966 elf32-xtensa.c:2761
+#: elfnn-aarch64.c:6847
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
+msgstr ""
+
+#: elf32-arm.c:13339 elf32-m68k.c:3968 elf32-xtensa.c:2763
+#: elfnn-aarch64.c:6849
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
+msgstr ""
+
+#: elf32-arm.c:13422 elf32-tic6x.c:2649 elfnn-aarch64.c:7184
+msgid "out of range"
+msgstr "áƒ“áƒ˜áƒ�áƒžáƒ�áƒ–áƒ�áƒœáƒ¡ áƒ’áƒ�áƒ áƒ”áƒ—"
+
+#: elf32-arm.c:13426 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7188
+msgid "unsupported relocation"
+msgstr ""
+
+#: elf32-arm.c:13434 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7196
+msgid "unknown error"
+msgstr "áƒ£áƒªáƒœáƒ�áƒ‘áƒ˜ áƒ¨áƒ”áƒªáƒ“áƒ�áƒ›áƒ�"
+
+#: elf32-arm.c:13916
+#, c-format
+msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
+msgstr ""
+
+#: elf32-arm.c:13920
+#, c-format
+msgid "warning: clearing the interworking flag of %pB due to outside request"
+msgstr ""
+
+#: elf32-arm.c:13965
+#, c-format
+msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
+msgstr ""
+
+#: elf32-arm.c:14052
+#, c-format
+msgid "%pB: unknown mandatory EABI object attribute %d"
+msgstr ""
+
+#: elf32-arm.c:14060
+#, c-format
+msgid "warning: %pB: unknown EABI object attribute %d"
+msgstr ""
+
+#: elf32-arm.c:14395
+#, c-format
+msgid "error: %pB: unknown CPU architecture"
+msgstr ""
+
+#: elf32-arm.c:14433 elf32-nios2.c:2950
+#, c-format
+msgid "error: %pB: conflicting CPU architectures %d/%d"
+msgstr ""
+
+#: elf32-arm.c:14530
+#, c-format
+msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr ""
+
+#: elf32-arm.c:14567
+#, c-format
+msgid "error: %pB uses VFP register arguments, %pB does not"
+msgstr ""
+
+#: elf32-arm.c:14736
+#, c-format
+msgid "error: %pB: unable to merge virtualization attributes with %pB"
+msgstr ""
+
+#: elf32-arm.c:14762
+#, c-format
+msgid "error: %pB: conflicting architecture profiles %c/%c"
+msgstr ""
+
+#: elf32-arm.c:14901
+#, c-format
+msgid "warning: %pB: conflicting platform configuration"
+msgstr ""
+
+#: elf32-arm.c:14910
+#, c-format
+msgid "error: %pB: conflicting use of R9"
+msgstr ""
+
+#: elf32-arm.c:14922
+#, c-format
+msgid "error: %pB: SB relative addressing conflicts with use of R9"
+msgstr ""
+
+#: elf32-arm.c:14935
+#, c-format
+msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
+msgstr ""
+
+#: elf32-arm.c:14966
+#, c-format
+msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
+msgstr ""
+
+#: elf32-arm.c:14978
+#, c-format
+msgid "error: %pB uses iWMMXt register arguments, %pB does not"
+msgstr ""
+
+#: elf32-arm.c:14995
+#, c-format
+msgid "error: fp16 format mismatch between %pB and %pB"
+msgstr ""
+
+#: elf32-arm.c:15031
+#, c-format
+msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr ""
+
+#: elf32-arm.c:15127
+#, c-format
+msgid " [interworking enabled]"
+msgstr ""
+
+#: elf32-arm.c:15135
+#, c-format
+msgid " [VFP float format]"
+msgstr ""
+
+#: elf32-arm.c:15137
+#, c-format
+msgid " [Maverick float format]"
+msgstr ""
+
+#: elf32-arm.c:15139
+#, c-format
+msgid " [FPA float format]"
+msgstr ""
+
+#: elf32-arm.c:15142
+#, c-format
+msgid " [floats passed in float registers]"
+msgstr ""
+
+#: elf32-arm.c:15145 elf32-arm.c:15231
+#, c-format
+msgid " [position independent]"
+msgstr ""
+
+#: elf32-arm.c:15148
+#, c-format
+msgid " [new ABI]"
+msgstr ""
+
+#: elf32-arm.c:15151
+#, c-format
+msgid " [old ABI]"
+msgstr ""
+
+#: elf32-arm.c:15154
+#, c-format
+msgid " [software FP]"
+msgstr ""
+
+#: elf32-arm.c:15163
+#, c-format
+msgid " [Version1 EABI]"
+msgstr ""
+
+#: elf32-arm.c:15166 elf32-arm.c:15177
+#, c-format
+msgid " [sorted symbol table]"
+msgstr ""
+
+#: elf32-arm.c:15168 elf32-arm.c:15179
+#, c-format
+msgid " [unsorted symbol table]"
+msgstr ""
+
+#: elf32-arm.c:15174
+#, c-format
+msgid " [Version2 EABI]"
+msgstr ""
+
+#: elf32-arm.c:15182
+#, c-format
+msgid " [dynamic symbols use segment index]"
+msgstr ""
+
+#: elf32-arm.c:15185
+#, c-format
+msgid " [mapping symbols precede others]"
+msgstr ""
+
+#: elf32-arm.c:15192
+#, c-format
+msgid " [Version3 EABI]"
+msgstr ""
+
+#: elf32-arm.c:15196
+#, c-format
+msgid " [Version4 EABI]"
+msgstr ""
+
+#: elf32-arm.c:15200
+#, c-format
+msgid " [Version5 EABI]"
+msgstr ""
+
+#: elf32-arm.c:15203
+#, c-format
+msgid " [soft-float ABI]"
+msgstr ""
+
+#: elf32-arm.c:15206
+#, c-format
+msgid " [hard-float ABI]"
+msgstr ""
+
+#: elf32-arm.c:15212
+#, c-format
+msgid " [BE8]"
+msgstr ""
+
+#: elf32-arm.c:15215
+#, c-format
+msgid " [LE8]"
+msgstr ""
+
+#: elf32-arm.c:15221
+#, c-format
+msgid " <EABI version unrecognised>"
+msgstr ""
+
+#: elf32-arm.c:15228
+#, c-format
+msgid " [relocatable executable]"
+msgstr ""
+
+#: elf32-arm.c:15234
+#, c-format
+msgid " [FDPIC ABI supplement]"
+msgstr ""
+
+#: elf32-arm.c:15239 elfnn-aarch64.c:7353
+#, c-format
+msgid " <Unrecognised flag bits set>"
+msgstr ""
+
+#: elf32-arm.c:15356 elf32-arm.c:15490 elf32-i386.c:1511 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1090
+#: elf64-s390.c:845 elf64-x86-64.c:1963 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfxx-x86.c:970 elfnn-aarch64.c:7624 elfnn-loongarch.c:632
+#: elfnn-riscv.c:660
+#, c-format
+msgid "%pB: bad symbol index: %d"
+msgstr ""
+
+#: elf32-arm.c:15746
+#, c-format
+msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
+msgstr ""
+
+#: elf32-arm.c:17009
+#, c-format
+msgid "errors encountered processing file %pB"
+msgstr ""
+
+#: elf32-arm.c:17382 elflink.c:13235 elflink.c:13282
+#, c-format
+msgid "could not find section %s"
+msgstr ""
+
+#: elf32-arm.c:18308
+#, c-format
+msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
+msgstr ""
+
+#: elf32-arm.c:18572
+#, c-format
+msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
+msgstr ""
+
+#. There's not much we can do apart from complain if this
+#. happens.
+#: elf32-arm.c:18599
+#, c-format
+msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
+msgstr ""
+
+#: elf32-arm.c:19426 elf32-arm.c:19448
+#, c-format
+msgid "%pB: error: VFP11 veneer out of range"
+msgstr ""
+
+#: elf32-arm.c:19499
+#, c-format
+msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
+msgstr ""
+
+#: elf32-arm.c:19538
+#, c-format
+msgid "%pB: error: cannot create STM32L4XX veneer"
+msgstr ""
+
+#: elf32-arm.c:20622
+#, c-format
+msgid "error: %pB is already in final BE8 format"
+msgstr ""
+
+#: elf32-arm.c:20698
+#, c-format
+msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
+msgstr ""
+
+#: elf32-arm.c:20713
+#, c-format
+msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
+msgstr ""
+
+#: elf32-arm.c:20723
+#, c-format
+msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
+msgstr ""
+
+#: elf32-arm.c:20727
+#, c-format
+msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
+msgstr ""
+
+#: elf32-arm.c:20737 elf32-arm.c:20741 elf32-arm.c:20751
+#, c-format
+msgid "error: %pB uses %s instructions, whereas %pB does not"
+msgstr ""
+
+#: elf32-arm.c:20755
+#, c-format
+msgid "error: %pB does not use %s instructions, whereas %pB does"
+msgstr ""
+
+#: elf32-arm.c:20774
+#, c-format
+msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
+msgstr ""
+
+#: elf32-arm.c:20778
+#, c-format
+msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
+msgstr ""
+
+#: elf32-arm.c:20792
+#, c-format
+msgid "warning: %pB supports interworking, whereas %pB does not"
+msgstr ""
+
+#: elf32-arm.c:20798
+#, c-format
+msgid "warning: %pB does not support interworking, whereas %pB does"
+msgstr ""
+
+#: elf32-avr.c:1508
+msgid "%X%H: %s against `%s': error: relocation applies outside section\n"
+msgstr ""
+
+#: elf32-avr.c:1516
+msgid "%X%H: %s against `%s': error: relocation target address is odd\n"
+msgstr ""
+
+#: elf32-avr.c:1524
+msgid "%X%H: %s against `%s': internal error: unexpected relocation result %d\n"
+msgstr ""
+
+#: elf32-avr.c:3339 elfnn-aarch64.c:3229
+#, c-format
+msgid "cannot create stub entry %s"
+msgstr ""
+
+#: elf32-bfin.c:107 elf32-bfin.c:364
+msgid "relocation should be even number"
+msgstr ""
+
+#: elf32-bfin.c:1589
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
+msgstr ""
+
+#: elf32-bfin.c:1621 elf32-i386.c:3499 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3118 elf64-x86-64.c:4237
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
+msgstr ""
+
+#: elf32-bfin.c:2647
+#, c-format
+msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:2664
+msgid "relocation references symbol not defined in the module"
+msgstr ""
+
+#: elf32-bfin.c:2762
+msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:2802 elf32-bfin.c:2923
+msgid "cannot emit fixups in read-only section"
+msgstr ""
+
+#: elf32-bfin.c:2832 elf32-bfin.c:2960 elf32-lm32.c:1007 elf32-sh.c:4383
+msgid "cannot emit dynamic relocations in read-only section"
+msgstr ""
+
+#: elf32-bfin.c:2882
+msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:3045
+msgid "relocations between different segments are not supported"
+msgstr ""
+
+#: elf32-bfin.c:3046
+msgid "warning: relocation references a different segment"
+msgstr ""
+
+#: elf32-bfin.c:3141 elf32-cris.c:2042 elf32-epiphany.c:573 elf32-fr30.c:602
+#: elf32-frv.c:4057 elf32-ft32.c:500 elf32-ip2k.c:1488 elf32-iq2000.c:699
+#: elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992 elf32-moxie.c:296
+#: elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1897 elf32-tilepro.c:3380
+#: elf32-v850.c:2302 elf32-visium.c:688 elf32-xstormy16.c:938 elf64-bpf.c:561
+#: elf64-mmix.c:1549 elfxx-tilegx.c:3750
+msgid "internal error: dangerous relocation"
+msgstr ""
+
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-bfin.c:4728 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16345
+#, c-format
+msgid "private flags = %lx:"
+msgstr ""
+
+#: elf32-bfin.c:4779 elf32-frv.c:6585
+#, c-format
+msgid "%pB: cannot link non-fdpic object file into fdpic executable"
+msgstr ""
+
+#: elf32-bfin.c:4783 elf32-frv.c:6589
+#, c-format
+msgid "%pB: cannot link fdpic object file into non-fdpic executable"
+msgstr ""
+
+#: elf32-bfin.c:4920
+#, c-format
+msgid "*** check this relocation %s"
+msgstr ""
+
+#: elf32-bfin.c:5036
+msgid "the bfin target does not currently support the generation of copy relocations"
+msgstr ""
+
+#: elf32-bfin.c:5330 elf32-cr16.c:2719 elf32-m68k.c:4420
+msgid "unsupported relocation type"
+msgstr ""
+
+#: elf32-cris.c:1120
+#, c-format
+msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'"
+msgstr ""
+
+#: elf32-cris.c:1185
+#, c-format
+msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'"
+msgstr ""
+
+#: elf32-cris.c:1188
+#, c-format
+msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'"
+msgstr ""
+
+#: elf32-cris.c:1194 elf32-cris.c:1327 elf32-cris.c:1592 elf32-cris.c:1675
+#: elf32-cris.c:1828 elf32-tic6x.c:2560
+msgid "[whose name is lost]"
+msgstr ""
+
+#: elf32-cris.c:1312 elf32-tic6x.c:2544
+#, c-format
+msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against local symbol"
+msgstr ""
+
+#: elf32-cris.c:1321 elf32-cris.c:1669 elf32-cris.c:1822 elf32-tic6x.c:2553
+#, c-format
+msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against symbol `%s'"
+msgstr ""
+
+#: elf32-cris.c:1348
+#, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'"
+msgstr ""
+
+#: elf32-cris.c:1365
+#, c-format
+msgid "%pB, section %pA: relocation %s with no GOT created"
+msgstr ""
+
+#. We shouldn't get here for GCC-emitted code.
+#: elf32-cris.c:1582
+#, c-format
+msgid "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
+msgstr ""
+
+#: elf32-cris.c:1585
+#, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?"
+msgstr ""
+
+#: elf32-cris.c:1956
+#, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
+msgstr ""
+
+#: elf32-cris.c:2009
+msgid "(too many global variables for -fpic: recompile with -fPIC)"
+msgstr ""
+
+#: elf32-cris.c:2016
+msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)"
+msgstr ""
+
+#: elf32-cris.c:3051
+#, c-format
+msgid "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation"
+msgstr ""
+
+#: elf32-cris.c:3105
+#, c-format
+msgid ""
+"%pB, section %pA:\n"
+"  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC"
+msgstr ""
+
+#: elf32-cris.c:3323
+#, c-format
+msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr ""
+
+#: elf32-cris.c:3701
+#, c-format
+msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr ""
+
+#: elf32-cris.c:3813
+msgid "unexpected machine number"
+msgstr ""
+
+#: elf32-cris.c:3865
+#, c-format
+msgid " [symbols have a _ prefix]"
+msgstr ""
+
+#: elf32-cris.c:3868
+#, c-format
+msgid " [v10 and v32]"
+msgstr ""
+
+#: elf32-cris.c:3871
+#, c-format
+msgid " [v32]"
+msgstr ""
+
+#: elf32-cris.c:3915
+#, c-format
+msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
+msgstr ""
+
+#: elf32-cris.c:3916
+#, c-format
+msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
+msgstr ""
+
+#: elf32-cris.c:3935
+#, c-format
+msgid "%pB contains CRIS v32 code, incompatible with previous objects"
+msgstr ""
+
+#: elf32-cris.c:3937
+#, c-format
+msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
+msgstr ""
+
+#: elf32-csky.c:2019
+msgid "GOT table size out of range"
+msgstr ""
+
+#: elf32-csky.c:2831
+#, c-format
+msgid "warning: unrecognized arch eflag '%#lx'"
+msgstr ""
+
+#: elf32-csky.c:2854
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr ""
+
+#: elf32-csky.c:2928 elf32-csky.c:3086
+#, c-format
+msgid "%pB: machine flag conflict with target"
+msgstr ""
+
+#: elf32-csky.c:2941
+#, c-format
+msgid "warning: file %pB's arch flag %s conflict with target %s,set target arch flag to %s"
+msgstr ""
+
+#: elf32-csky.c:2970
+#, c-format
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr ""
+
+#: elf32-csky.c:2987
+#, c-format
+msgid "Error: %pB and %pB has different DSP version"
+msgstr ""
+
+#: elf32-csky.c:3005
+#, c-format
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr ""
+
+#: elf32-csky.c:3100
+#, c-format
+msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
+msgstr ""
+
+#. The r_type is error, not support it.
+#: elf32-csky.c:4342 elf32-i386.c:344
+#, c-format
+msgid "%pB: unsupported relocation type: %#x"
+msgstr ""
+
+#: elf32-dlx.c:141
+#, c-format
+msgid "branch (PC rel16) to section (%s) not supported"
+msgstr ""
+
+#: elf32-dlx.c:204
+#, c-format
+msgid "jump (PC rel26) to section (%s) not supported"
+msgstr ""
+
+#. Only if it's not an unresolved symbol.
+#: elf32-epiphany.c:569 elf32-ip2k.c:1484
+msgid "unsupported relocation between data/insn address spaces"
+msgstr ""
+
+#: elf32-frv.c:1453 elf32-frv.c:1604
+msgid "relocation requires zero addend"
+msgstr ""
+
+#: elf32-frv.c:2833
+#, c-format
+msgid "%H: relocation to `%s+%v' may have caused the error above\n"
+msgstr ""
+
+#: elf32-frv.c:2850
+msgid "%H: relocation references symbol not defined in the module\n"
+msgstr ""
+
+#: elf32-frv.c:2926
+msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
+msgstr ""
+
+#: elf32-frv.c:2967
+msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3038
+msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3075
+msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3122
+msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3206
+msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3260
+msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3290
+msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3319
+msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3349
+msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3394
+msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3421
+msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3542 elf32-frv.c:3662
+msgid "%H: %s references dynamic symbol with nonzero addend\n"
+msgstr ""
+
+#: elf32-frv.c:3583 elf32-frv.c:3704
+msgid "%H: cannot emit fixups in read-only section\n"
+msgstr ""
+
+#: elf32-frv.c:3613 elf32-frv.c:3746
+msgid "%H: cannot emit dynamic relocations in read-only section\n"
+msgstr ""
+
+#: elf32-frv.c:3918
+#, c-format
+msgid "%H: reloc against `%s' references a different segment\n"
+msgstr ""
+
+#: elf32-frv.c:4069
+#, c-format
+msgid "%H: reloc against `%s': %s\n"
+msgstr ""
+
+#: elf32-frv.c:6496
+#, c-format
+msgid "%pB: compiled with %s and linked with modules that use non-pic relocations"
+msgstr ""
+
+#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
+#, c-format
+msgid "%pB: compiled with %s and linked with modules compiled with %s"
+msgstr ""
+
+#: elf32-frv.c:6563
+#, c-format
+msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
+msgstr ""
+
+#: elf32-gen.c:71
+#, c-format
+msgid "%pB: relocations in generic ELF (EM: %d)"
+msgstr ""
+
+#: elf32-hppa.c:863 elf32-hppa.c:3403
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
+msgstr ""
+
+#: elf32-hppa.c:1241
+#, c-format
+msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"
+msgstr ""
+
+#: elf32-hppa.c:2580
+#, c-format
+msgid "%pB: duplicate export stub %s"
+msgstr ""
+
+#: elf32-hppa.c:3236
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s fixup for insn %#x is not supported in a non-shared link"
+msgstr ""
+
+#: elf32-hppa.c:4032
+#, c-format
+msgid "%s has both normal and TLS relocs"
+msgstr ""
+
+#: elf32-hppa.c:4050
+#, c-format
+msgid "%pB:%s has both normal and TLS relocs"
+msgstr ""
+
+#: elf32-hppa.c:4109
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
+msgstr ""
+
+#: elf32-hppa.c:4413
+msgid ".got section not immediately after .plt section"
+msgstr ""
+
+#: elf32-i386.c:1163 elf64-x86-64.c:1450
+#, c-format
+msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
+msgstr ""
+
+#: elf32-i386.c:1266
+#, c-format
+msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
+msgstr ""
+
+#: elf32-i386.c:1695 elf32-s390.c:1151 elf32-sh.c:5497 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1263 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-loongarch.c:586 elfnn-riscv.c:568
+#, c-format
+msgid "%pB: `%s' accessed both as normal and thread local symbol"
+msgstr ""
+
+#: elf32-i386.c:1767
+#, c-format
+msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
+msgstr ""
+
+#: elf32-i386.c:1822 elf64-x86-64.c:2343
+#, c-format
+msgid "%pB: non-canonical reference to canonical protected function `%s' in %pB"
+msgstr ""
+
+#: elf32-i386.c:2385 elf64-x86-64.c:2806 elfnn-riscv.c:2271
+#, c-format
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
+msgstr ""
+
+#: elf32-i386.c:2418 elf32-i386.c:3710 elf32-i386.c:3858 elf64-x86-64.c:2863
+#: elf64-x86-64.c:4410 elf64-x86-64.c:4573 elfnn-riscv.c:2144
+#: elfnn-riscv.c:2967 elfnn-riscv.c:3041
+#, c-format
+msgid "Local IFUNC function `%s' in %pB\n"
+msgstr ""
+
+#: elf32-i386.c:2596
+#, c-format
+msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
+msgstr ""
+
+#: elf32-i386.c:2631 elf64-x86-64.c:3077
+msgid "hidden symbol"
+msgstr ""
+
+#: elf32-i386.c:2634 elf64-x86-64.c:3080
+msgid "internal symbol"
+msgstr ""
+
+#: elf32-i386.c:2637 elf64-x86-64.c:3083
+msgid "protected symbol"
+msgstr ""
+
+#: elf32-i386.c:2640 elf64-x86-64.c:3086
+msgid "symbol"
+msgstr "áƒ¡áƒ˜áƒ›áƒ‘áƒ�áƒšáƒ�"
+
+#: elf32-i386.c:2646
+#, c-format
+msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
+msgstr ""
+
+#: elf32-i386.c:2659
+#, c-format
+msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
+msgstr ""
+
+#: elf32-i386.c:4061 elf64-x86-64.c:4784
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr ""
+
+#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
+msgid "ip2k relaxer: switch table without complete matching relocation information."
+msgstr ""
+
+#: elf32-ip2k.c:878 elf32-ip2k.c:961
+msgid "ip2k relaxer: switch table header corrupt."
+msgstr ""
+
+#: elf32-ip2k.c:1297
+#, c-format
+msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
+msgstr ""
+
+#: elf32-ip2k.c:1316
+#, c-format
+msgid "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
+msgstr ""
+
+#: elf32-lm32.c:609 elf32-nios2.c:3145
+msgid "global pointer relative relocation when _gp not defined"
+msgstr ""
+
+#: elf32-lm32.c:664 elf32-nios2.c:3582
+msgid "global pointer relative address out of range"
+msgstr ""
+
+#: elf32-lm32.c:960
+#, c-format
+msgid "internal error: addend should be zero for %s"
+msgstr ""
+
+#: elf32-m32r.c:1461
+msgid "SDA relocation when _SDA_BASE_ not defined"
+msgstr ""
+
+#: elf32-m32r.c:2776 elf32-microblaze.c:1134 elf32-microblaze.c:1182
+#, c-format
+msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)"
+msgstr ""
+
+#: elf32-m32r.c:3279
+#, c-format
+msgid "%pB: instruction set mismatch with previous modules"
+msgstr ""
+
+#: elf32-m32r.c:3300 elf32-nds32.c:6900
+#, c-format
+msgid "private flags = %lx"
+msgstr ""
+
+#: elf32-m32r.c:3305
+#, c-format
+msgid ": m32r instructions"
+msgstr ""
+
+#: elf32-m32r.c:3306
+#, c-format
+msgid ": m32rx instructions"
+msgstr ""
+
+#: elf32-m32r.c:3307
+#, c-format
+msgid ": m32r2 instructions"
+msgstr ""
+
+#: elf32-m68hc1x.c:1135
+#, c-format
+msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
+msgstr ""
+
+#: elf32-m68hc1x.c:1166
+#, c-format
+msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code."
+msgstr ""
+
+#: elf32-m68hc1x.c:1182
+#, c-format
+msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)"
+msgstr ""
+
+#: elf32-m68hc1x.c:1197
+#, c-format
+msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx"
+msgstr ""
+
+#: elf32-m68hc1x.c:1233
+#, c-format
+msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code"
+msgstr ""
+
+#: elf32-m68hc1x.c:1357
+#, c-format
+msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
+msgstr ""
+
+#: elf32-m68hc1x.c:1364
+#, c-format
+msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
+msgstr ""
+
+#: elf32-m68hc1x.c:1373
+#, c-format
+msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
+msgstr ""
+
+#: elf32-m68hc1x.c:1418 elf32-xgate.c:497
+#, c-format
+msgid "[abi=32-bit int, "
+msgstr ""
+
+#: elf32-m68hc1x.c:1420 elf32-xgate.c:499
+#, c-format
+msgid "[abi=16-bit int, "
+msgstr ""
+
+#: elf32-m68hc1x.c:1423 elf32-xgate.c:502
+#, c-format
+msgid "64-bit double, "
+msgstr ""
+
+#: elf32-m68hc1x.c:1425 elf32-xgate.c:504
+#, c-format
+msgid "32-bit double, "
+msgstr ""
+
+#: elf32-m68hc1x.c:1428
+#, c-format
+msgid "cpu=HC11]"
+msgstr ""
+
+#: elf32-m68hc1x.c:1430
+#, c-format
+msgid "cpu=HCS12]"
+msgstr ""
+
+#: elf32-m68hc1x.c:1432
+#, c-format
+msgid "cpu=HC12]"
+msgstr ""
+
+#: elf32-m68hc1x.c:1435
+#, c-format
+msgid " [memory=bank-model]"
+msgstr ""
+
+#: elf32-m68hc1x.c:1437
+#, c-format
+msgid " [memory=flat]"
+msgstr ""
+
+#: elf32-m68hc1x.c:1440
+#, c-format
+msgid " [XGATE RAM offsetting]"
+msgstr ""
+
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3576 elf32-ppc.c:3584
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr ""
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:8053 vms-alpha.c:8069
+msgid "unknown"
+msgstr ""
+
+#: elf32-m68k.c:1731
+#, c-format
+msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d"
+msgstr ""
+
+#: elf32-m68k.c:1738
+#, c-format
+msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
+msgstr ""
+
+#. Pacify gcc -Wall.
+#: elf32-mep.c:139
+#, c-format
+msgid "mep: no reloc for code %d"
+msgstr ""
+
+#: elf32-mep.c:146
+#, c-format
+msgid "MeP: howto %d has type %d"
+msgstr ""
+
+#: elf32-mep.c:618
+#, c-format
+msgid "%pB and %pB are for different cores"
+msgstr ""
+
+#: elf32-mep.c:637
+#, c-format
+msgid "%pB and %pB are for different configurations"
+msgstr ""
+
+#: elf32-mep.c:675
+#, c-format
+msgid "private flags = 0x%lx"
+msgstr ""
+
+#: elf32-metag.c:1857
+#, c-format
+msgid "%pB(%pA): multiple TLS models are not supported"
+msgstr ""
+
+#: elf32-metag.c:1860
+#, c-format
+msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link"
+msgstr ""
+
+#: elf32-microblaze.c:1577 elf32-tilepro.c:3021 elfxx-sparc.c:3446
+#: elfxx-tilegx.c:3415
+#, c-format
+msgid "%pB: probably compiled without -fPIC?"
+msgstr ""
+
+#: elf32-mips.c:1776 elf64-mips.c:3515 elfn32-mips.c:3333
+msgid "literal relocation occurs for an external symbol"
+msgstr ""
+
+#: elf32-mips.c:1827 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3558
+#: elfn32-mips.c:3374
+msgid "32bits gp relative relocation occurs for an external symbol"
+msgstr ""
+
+#: elf32-msp430.c:914
+#, c-format
+msgid "error: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr ""
+
+#: elf32-msp430.c:983 elf32-msp430.c:1297
+msgid "try enabling relaxation to avoid relocation truncations"
+msgstr ""
+
+#: elf32-msp430.c:1506
+msgid "internal error: branch/jump to an odd address detected"
+msgstr ""
+
+#: elf32-msp430.c:2671
+#, c-format
+msgid "warning: %pB: unknown MSPABI object attribute %d"
+msgstr ""
+
+#: elf32-msp430.c:2772
+#, c-format
+msgid "error: %pB uses %s instructions but %pB uses %s"
+msgstr ""
+
+#: elf32-msp430.c:2784
+#, c-format
+msgid "error: %pB uses the %s code model whereas %pB uses the %s code model"
+msgstr ""
+
+#: elf32-msp430.c:2797
+#, c-format
+msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
+msgstr ""
+
+#: elf32-msp430.c:2808
+#, c-format
+msgid "error: %pB uses the %s data model whereas %pB uses the %s data model"
+msgstr ""
+
+#: elf32-msp430.c:2821
+#, c-format
+msgid "error: %pB uses the small code model but %pB uses the %s data model"
+msgstr ""
+
+#: elf32-msp430.c:2833
+#, c-format
+msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions"
+msgstr ""
+
+#: elf32-msp430.c:2858
+#, c-format
+msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
+msgstr ""
+
+#: elf32-nds32.c:3674
+#, c-format
+msgid "error: can't find symbol: %s"
+msgstr ""
+
+#: elf32-nds32.c:5573
+#, c-format
+msgid "%pB: warning: %s unsupported in shared mode"
+msgstr ""
+
+#: elf32-nds32.c:5699
+#, c-format
+msgid "%pB: warning: unaligned access to GOT entry"
+msgstr ""
+
+#: elf32-nds32.c:5740
+#, c-format
+msgid "%pB: warning: relocate SDA_BASE failed"
+msgstr ""
+
+#: elf32-nds32.c:5762
+#, c-format
+msgid "%pB(%pA): warning: unaligned small data access of type %d"
+msgstr ""
+
+#: elf32-nds32.c:6688
+#, c-format
+msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
+msgstr ""
+
+#: elf32-nds32.c:6736
+#, c-format
+msgid "%pB: warning: endian mismatch with previous modules"
+msgstr ""
+
+#: elf32-nds32.c:6750
+#, c-format
+msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
+msgstr ""
+
+#: elf32-nds32.c:6838
+#, c-format
+msgid "%pB: error: ABI mismatch with previous modules"
+msgstr ""
+
+#: elf32-nds32.c:6848
+#, c-format
+msgid "%pB: error: instruction set mismatch with previous modules"
+msgstr ""
+
+#: elf32-nds32.c:6875
+#, c-format
+msgid "%pB: warning: incompatible elf-versions %s and %s"
+msgstr ""
+
+#: elf32-nds32.c:6906
+#, c-format
+msgid ": n1 instructions"
+msgstr ""
+
+#: elf32-nds32.c:6909
+#, c-format
+msgid ": n1h instructions"
+msgstr ""
+
+#: elf32-nds32.c:9358
+#, c-format
+msgid "%pB: error: search_nds32_elf_blank reports wrong node"
+msgstr ""
+
+#: elf32-nds32.c:9622
+#, c-format
+msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
+msgstr ""
+
+#: elf32-nds32.c:12887
+#, c-format
+msgid "%pB: nested OMIT_FP in %pA"
+msgstr ""
+
+#: elf32-nds32.c:12906
+#, c-format
+msgid "%pB: unmatched OMIT_FP in %pA"
+msgstr ""
+
+#: elf32-nds32.c:13189 elfxx-mips.c:13501 reloc.c:8651
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgstr ""
+
+#: elf32-nios2.c:2934
+#, c-format
+msgid "error: %pB: big-endian R2 is not supported"
+msgstr ""
+
+#: elf32-nios2.c:3826
+#, c-format
+msgid "global pointer relative relocation at address %#<PRIx64> when _gp not defined\n"
+msgstr ""
+
+#: elf32-nios2.c:3856
+#, c-format
+msgid "unable to reach %s (at %#<PRIx64>) from the global pointer (at %#<PRIx64>) because the offset (%<PRId64>) is out of the allowed range, -32678 to 32767\n"
+msgstr ""
+
+#: elf32-nios2.c:4511 elf32-pru.c:931
+msgid "relocation out of range"
+msgstr ""
+
+#: elf32-nios2.c:4521 elf32-pru.c:941 elf32-tic6x.c:2657
+msgid "dangerous relocation"
+msgstr ""
+
+#: elf32-nios2.c:5360
+#, c-format
+msgid "dynamic variable `%s' is zero size"
+msgstr ""
+
+#: elf32-or1k.c:1258
+#, c-format
+msgid "%pB: Cannot handle relocation value size of %d"
+msgstr ""
+
+#: elf32-or1k.c:1366
+#, c-format
+msgid "%pB: unknown relocation type %d"
+msgstr ""
+
+#: elf32-or1k.c:1420
+#, c-format
+msgid "%pB: addend should be zero for plt relocations"
+msgstr ""
+
+#: elf32-or1k.c:1536
+#, c-format
+msgid "%pB: addend should be zero for got relocations"
+msgstr ""
+
+#: elf32-or1k.c:1553
+#, c-format
+msgid "%pB: gotoff relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf32-or1k.c:1567 elf32-or1k.c:1582 elf64-alpha.c:4427 elf64-alpha.c:4571
+#, c-format
+msgid "%pB: pc-relative relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf32-or1k.c:1596
+#, c-format
+msgid "%pB: non-pic relocation against symbol %s"
+msgstr ""
+
+#: elf32-or1k.c:1680
+#, c-format
+msgid "%pB: support for local dynamic not implemented"
+msgstr ""
+
+#: elf32-or1k.c:1859
+#, c-format
+msgid "%pB: will not resolve runtime TLS relocation"
+msgstr ""
+
+#: elf32-or1k.c:2193
+#, c-format
+msgid "%pB: bad relocation section name `%s'"
+msgstr ""
+
+#: elf32-or1k.c:3307
+#, c-format
+msgid "%pB: %s flag mismatch with previous modules"
+msgstr ""
+
+#: elf32-ppc.c:993 elf64-ppc.c:1748
+#, c-format
+msgid "generic linker can't handle %s"
+msgstr ""
+
+#: elf32-ppc.c:1633
+#, c-format
+msgid "corrupt %s section in %pB"
+msgstr ""
+
+#: elf32-ppc.c:1652
+#, c-format
+msgid "unable to read in %s section from %pB"
+msgstr ""
+
+#: elf32-ppc.c:1694
+#, c-format
+msgid "warning: unable to set size of %s section in %pB"
+msgstr ""
+
+#: elf32-ppc.c:1743
+msgid "failed to allocate space for new APUinfo section"
+msgstr ""
+
+#: elf32-ppc.c:1762
+msgid "failed to compute new APUinfo section"
+msgstr ""
+
+#: elf32-ppc.c:1765
+msgid "failed to install new APUinfo section"
+msgstr ""
+
+#: elf32-ppc.c:2873
+#, c-format
+msgid "%pB: relocation %s cannot be used when making a shared object"
+msgstr ""
+
+#: elf32-ppc.c:3592 elf32-ppc.c:3600
+#, c-format
+msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
+msgstr ""
+
+#: elf32-ppc.c:3622 elf32-ppc.c:3630
+#, c-format
+msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
+msgstr ""
+
+#: elf32-ppc.c:3638 elf32-ppc.c:3646
+#, c-format
+msgid "%pB uses IBM long double, %pB uses IEEE long double"
+msgstr ""
+
+#: elf32-ppc.c:3713 elf32-ppc.c:3722
+#, c-format
+msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
+msgstr ""
+
+#: elf32-ppc.c:3751 elf32-ppc.c:3760
+#, c-format
+msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
+msgstr ""
+
+#: elf32-ppc.c:3824
+#, c-format
+msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
+msgstr ""
+
+#: elf32-ppc.c:3832
+#, c-format
+msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
+msgstr ""
+
+#: elf32-ppc.c:3903
+#, c-format
+msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
+msgstr ""
+
+#: elf32-ppc.c:3922
+#, c-format
+msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
+msgstr ""
+
+#: elf32-ppc.c:4026
+#, c-format
+msgid "bss-plt forced due to %pB"
+msgstr ""
+
+#: elf32-ppc.c:4028
+msgid "bss-plt forced by profiling"
+msgstr ""
+
+#: elf32-ppc.c:4605 elf64-ppc.c:8478
+msgid "%H: warning: %s unexpected insn %#x.\n"
+msgstr ""
+
+#. Uh oh, we didn't find the expected call.  We
+#. could just mark this symbol to exclude it
+#. from tls optimization but it's safer to skip
+#. the entire optimization.
+#: elf32-ppc.c:4635 elf64-ppc.c:8543
+#, c-format
+msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
+msgstr ""
+
+#: elf32-ppc.c:5564 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elfxx-tilegx.c:2494
+#, c-format
+msgid "%pB: dynamic relocation in read-only section `%pA'\n"
+msgstr ""
+
+#: elf32-ppc.c:7439
+msgid "%P: %H: error: %s with unexpected instruction %x\n"
+msgstr ""
+
+#: elf32-ppc.c:7477
+msgid "%H: fixup branch overflow\n"
+msgstr ""
+
+#: elf32-ppc.c:7517 elf32-ppc.c:7555
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
+msgstr ""
+
+#: elf32-ppc.c:7619
+#, c-format
+msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
+msgstr ""
+
+#: elf32-ppc.c:7655
+#, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr ""
+
+#: elf32-ppc.c:7943
+#, c-format
+msgid "%H: non-zero addend on %s reloc against `%s'\n"
+msgstr ""
+
+#. @local on an ifunc does not really make sense since
+#. the ifunc resolver can take you anywhere.  More
+#. seriously, calls to ifuncs must go through a plt call
+#. stub, and for pic the plt call stubs uses r30 to
+#. access the PLT.  The problem is that a call that is
+#. local won't have the +32k reloc addend trick marking
+#. -fPIC code, so the linker won't know whether r30 is
+#. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
+#: elf32-ppc.c:7975
+#, c-format
+msgid "%X%H: @local call to ifunc %s\n"
+msgstr ""
+
+#: elf32-ppc.c:8154
+#, c-format
+msgid "%H: relocation %s for indirect function %s unsupported\n"
+msgstr ""
+
+#: elf32-ppc.c:8493 elf32-ppc.c:8524 elf32-ppc.c:8627 elf32-ppc.c:8727
+#, c-format
+msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
+msgstr ""
+
+#: elf32-ppc.c:8905 elf32-ppc.c:8926
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
+msgstr ""
+
+#: elf32-ppc.c:9008
+#, c-format
+msgid "%H: error: %s against `%s' not a multiple of %u\n"
+msgstr ""
+
+#: elf32-ppc.c:9037
+#, c-format
+msgid "%H: unresolvable %s relocation against symbol `%s'\n"
+msgstr ""
+
+#: elf32-ppc.c:9119
+#, c-format
+msgid "%H: %s reloc against `%s': error %d\n"
+msgstr ""
+
+#: elf32-ppc.c:10000
+msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
+msgstr ""
+
+#: elf32-ppc.c:10004 elf64-ppc.c:18281
+msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
+msgstr ""
+
+#: elf32-ppc.c:10049
+#, c-format
+msgid "%s not defined in linker created %pA"
+msgstr ""
+
+#: elf32-pru.c:582 elf32-pru.c:1475
+#, c-format
+msgid "error: %pB: old incompatible object file detected"
+msgstr ""
+
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
+msgstr ""
+
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr ""
+
+#: elf32-rl78.c:1069
+msgid "warning: RL78_SYM reloc with an unknown symbol"
+msgstr ""
+
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr ""
+
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
+msgstr ""
+
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr ""
+
+#: elf32-rl78.c:1220
+#, c-format
+msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
+msgstr ""
+
+#: elf32-rl78.c:1237
+#, c-format
+msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
+msgstr ""
+
+#: elf32-rl78.c:1246
+msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
+msgstr ""
+
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
+#, c-format
+msgid "- %pB is 64-bit, %pB is not"
+msgstr ""
+
+#: elf32-rl78.c:1281
+#, c-format
+msgid " [64-bit doubles]"
+msgstr ""
+
+#: elf32-rx.c:618
+#, c-format
+msgid "%pB:%pA: table entry %s outside table"
+msgstr ""
+
+#: elf32-rx.c:625
+#, c-format
+msgid "%pB:%pA: table entry %s not word-aligned within table"
+msgstr ""
+
+#: elf32-rx.c:700
+#, c-format
+msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
+msgstr ""
+
+#. Check for unsafe relocs in PID mode.  These are any relocs where
+#. an absolute address is being computed.  There are special cases
+#. for relocs against symbols that are known to be referenced in
+#. crt0.o before the PID base address register has been initialised.
+#: elf32-rx.c:720
+#, c-format
+msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
+msgstr ""
+
+#: elf32-rx.c:1304
+msgid "warning: RX_SYM reloc with an unknown symbol"
+msgstr ""
+
+#: elf32-rx.c:1472
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr ""
+
+#: elf32-rx.c:3184
+#, c-format
+msgid "there is a conflict merging the ELF header flags from %pB"
+msgstr ""
+
+#: elf32-rx.c:3187
+#, c-format
+msgid "  the input  file's flags: %s"
+msgstr ""
+
+#: elf32-rx.c:3189
+#, c-format
+msgid "  the output file's flags: %s"
+msgstr ""
+
+#: elf32-rx.c:3796
+#, c-format
+msgid "%pB:%pA: table %s missing corresponding %s"
+msgstr ""
+
+#: elf32-rx.c:3804
+#, c-format
+msgid "%pB:%pA: %s and %s must be in the same input section"
+msgstr ""
+
+#: elf32-s390.c:2009 elf64-s390.c:1976
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
+msgstr ""
+
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3853
+msgid "not enough GOT space for local GOT entries"
+msgstr ""
+
+#: elf32-score.c:2747
+msgid "address not word aligned"
+msgstr ""
+
+#: elf32-score.c:2828 elf32-score7.c:2635
+#, c-format
+msgid "%pB: malformed reloc detected for section %pA"
+msgstr ""
+
+#: elf32-score.c:2882 elf32-score7.c:2689
+#, c-format
+msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
+msgstr ""
+
+#: elf32-score.c:3990 elf32-score7.c:3797
+#, c-format
+msgid " [pic]"
+msgstr ""
+
+#: elf32-score.c:3994 elf32-score7.c:3801
+#, c-format
+msgid " [fix dep]"
+msgstr ""
+
+#: elf32-score.c:4041 elf32-score7.c:3848
+#, c-format
+msgid "%pB: warning: linking PIC files with non-PIC files"
+msgstr ""
+
+#: elf32-sh.c:532
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
+msgstr ""
+
+#: elf32-sh.c:3752
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
+msgstr ""
+
+#: elf32-sh.c:3782 elf32-sh.c:3798
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
+msgstr ""
+
+#: elf32-sh.c:3814
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocation %<PRId64> not in range -32..32"
+msgstr ""
+
+#: elf32-sh.c:3830
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocation %<PRId64> not in range -32..32"
+msgstr ""
+
+#: elf32-sh.c:3960 elf32-sh.c:4355
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot emit fixup to `%s' in read-only section"
+msgstr ""
+
+#: elf32-sh.c:4458
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
+msgstr ""
+
+#: elf32-sh.c:4577
+#, c-format
+msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#<PRIx64>"
+msgstr ""
+
+#. The backslash is to prevent bogus trigraph detection.
+#: elf32-sh.c:4595
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
+msgstr ""
+
+#: elf32-sh.c:4603
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
+msgstr ""
+
+#: elf32-sh.c:4610
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
+msgstr ""
+
+#: elf32-sh.c:4617
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
+msgstr ""
+
+#: elf32-sh.c:4624
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
+msgstr ""
+
+#: elf32-sh.c:4631
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
+msgstr ""
+
+#: elf32-sh.c:4666
+#, c-format
+msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#<PRIx64>"
+msgstr ""
+
+#: elf32-sh.c:4684
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
+msgstr ""
+
+#: elf32-sh.c:4693
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
+msgstr ""
+
+#: elf32-sh.c:4700
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
+msgstr ""
+
+#: elf32-sh.c:4815
+#, c-format
+msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#<PRIx64>"
+msgstr ""
+
+#: elf32-sh.c:4883
+#, c-format
+msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#<PRIx64>"
+msgstr ""
+
+#: elf32-sh.c:5011
+#, c-format
+msgid "%X%C: relocation to \"%s\" references a different segment\n"
+msgstr ""
+
+#: elf32-sh.c:5018
+#, c-format
+msgid "%C: warning: relocation to \"%s\" references a different segment\n"
+msgstr ""
+
+#: elf32-sh.c:5486 elf32-sh.c:5568
+#, c-format
+msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
+msgstr ""
+
+#: elf32-sh.c:5492 elf32-sh.c:5573
+#, c-format
+msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
+msgstr ""
+
+#: elf32-sh.c:5523
+#, c-format
+msgid "%pB: Function descriptor relocation with non-zero addend"
+msgstr ""
+
+#: elf32-sh.c:5730 elf64-alpha.c:4663
+#, c-format
+msgid "%pB: TLS local exec code cannot be linked into shared objects"
+msgstr ""
+
+#: elf32-sh.c:5845
+#, c-format
+msgid "%pB: uses %s instructions while previous modules use %s instructions"
+msgstr ""
+
+#: elf32-sh.c:5857
+#, c-format
+msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture"
+msgstr ""
+
+#: elf32-sh.c:5898
+#, c-format
+msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
+msgstr ""
+
+#: elf32-sh.c:5911
+#, c-format
+msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
+msgstr ""
+
+#: elf32-sparc.c:89
+#, c-format
+msgid "%pB: compiled for a 64 bit system and target is 32 bit"
+msgstr ""
+
+#: elf32-sparc.c:102
+#, c-format
+msgid "%pB: linking little endian files with big endian files"
+msgstr ""
+
+#: elf32-sparc.c:157
+#, c-format
+msgid "%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr ""
+
+#: elf32-spu.c:737
+msgid "%X%P: overlay section %pA does not start on a cache line\n"
+msgstr ""
+
+#: elf32-spu.c:745
+msgid "%X%P: overlay section %pA is larger than a cache line\n"
+msgstr ""
+
+#: elf32-spu.c:765
+msgid "%X%P: overlay section %pA is not in cache area\n"
+msgstr ""
+
+#: elf32-spu.c:806
+#, c-format
+msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n"
+msgstr ""
+
+#: elf32-spu.c:1032
+#, c-format
+msgid "warning: call to non-function symbol %s defined in %pB"
+msgstr ""
+
+#: elf32-spu.c:1382
+#, c-format
+msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
+msgstr ""
+
+#: elf32-spu.c:1912
+#, c-format
+msgid "%pB is not allowed to define %s"
+msgstr ""
+
+#: elf32-spu.c:1920
+#, c-format
+msgid "you are not allowed to define %s in a script"
+msgstr ""
+
+#: elf32-spu.c:1954
+#, c-format
+msgid "%s in overlay section"
+msgstr ""
+
+#: elf32-spu.c:1983
+msgid "overlay stub relocation overflow"
+msgstr ""
+
+#: elf32-spu.c:1992 elf64-ppc.c:15308
+msgid "stubs don't match calculated size"
+msgstr ""
+
+#: elf32-spu.c:2575
+#, c-format
+msgid "warning: %s overlaps %s\n"
+msgstr ""
+
+#: elf32-spu.c:2591
+#, c-format
+msgid "warning: %s exceeds section size\n"
+msgstr ""
+
+#: elf32-spu.c:2623
+#, c-format
+msgid "%pA:0x%v not found in function table\n"
+msgstr ""
+
+#: elf32-spu.c:2764
+#, c-format
+msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n"
+msgstr ""
+
+#: elf32-spu.c:3330
+#, c-format
+msgid "stack analysis will ignore the call from %s to %s\n"
+msgstr ""
+
+#: elf32-spu.c:4027
+msgid "  calls:\n"
+msgstr ""
+
+#: elf32-spu.c:4342
+#, c-format
+msgid "%s duplicated in %s\n"
+msgstr ""
+
+#: elf32-spu.c:4346
+#, c-format
+msgid "%s duplicated\n"
+msgstr ""
+
+#: elf32-spu.c:4353
+msgid "sorry, no support for duplicate object files in auto-overlay script\n"
+msgstr ""
+
+#: elf32-spu.c:4395
+#, c-format
+msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n"
+msgstr ""
+
+#: elf32-spu.c:4551
+#, c-format
+msgid "%pB:%pA%s exceeds overlay size\n"
+msgstr ""
+
+#: elf32-spu.c:4692
+msgid "%F%P: auto overlay error: %E\n"
+msgstr ""
+
+#: elf32-spu.c:4713
+msgid "Stack size for call graph root nodes.\n"
+msgstr ""
+
+#: elf32-spu.c:4714
+msgid ""
+"\n"
+"Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
+msgstr ""
+
+#: elf32-spu.c:4724
+msgid "Maximum stack required is 0x%v\n"
+msgstr ""
+
+#: elf32-spu.c:4743
+msgid "%X%P: stack/lrlive analysis error: %E\n"
+msgstr ""
+
+#: elf32-spu.c:4746
+msgid "%F%P: can not build overlay stubs: %E\n"
+msgstr ""
+
+#: elf32-spu.c:4815
+msgid "fatal error while creating .fixup"
+msgstr ""
+
+#: elf32-spu.c:5051
+#, c-format
+msgid "%pB(%s+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
+msgstr ""
+
+#: elf32-tic6x.c:1588
+msgid "warning: generating a shared library containing non-PIC code"
+msgstr ""
+
+#: elf32-tic6x.c:1593
+msgid "warning: generating a shared library containing non-PID code"
+msgstr ""
+
+#: elf32-tic6x.c:2434
+#, c-format
+msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
+msgstr ""
+
+#: elf32-tic6x.c:3498
+#, c-format
+msgid "%pB: error: unknown mandatory EABI object attribute %d"
+msgstr ""
+
+#: elf32-tic6x.c:3507
+#, c-format
+msgid "%pB: warning: unknown EABI object attribute %d"
+msgstr ""
+
+#: elf32-tic6x.c:3625 elf32-tic6x.c:3634
+#, c-format
+msgid "error: %pB requires more stack alignment than %pB preserves"
+msgstr ""
+
+#: elf32-tic6x.c:3644 elf32-tic6x.c:3653
+#, c-format
+msgid "error: unknown Tag_ABI_array_object_alignment value in %pB"
+msgstr ""
+
+#: elf32-tic6x.c:3662 elf32-tic6x.c:3671
+#, c-format
+msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB"
+msgstr ""
+
+#: elf32-tic6x.c:3680 elf32-tic6x.c:3688
+#, c-format
+msgid "error: %pB requires more array alignment than %pB preserves"
+msgstr ""
+
+#: elf32-tic6x.c:3711
+#, c-format
+msgid "warning: %pB and %pB differ in wchar_t size"
+msgstr ""
+
+#: elf32-tic6x.c:3730
+#, c-format
+msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
+msgstr ""
+
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2694
+#: elfnn-aarch64.c:9831 elfnn-loongarch.c:3845 elfnn-riscv.c:3264
+#, c-format
+msgid "discarded output section: `%pA'"
+msgstr ""
+
+#: elf32-v850.c:152
+#, c-format
+msgid "variable `%s' cannot occupy in multiple small data regions"
+msgstr ""
+
+#: elf32-v850.c:155
+#, c-format
+msgid "variable `%s' can only be in one of the small, zero, and tiny data regions"
+msgstr ""
+
+#: elf32-v850.c:158
+#, c-format
+msgid "variable `%s' cannot be in both small and zero data regions simultaneously"
+msgstr ""
+
+#: elf32-v850.c:161
+#, c-format
+msgid "variable `%s' cannot be in both small and tiny data regions simultaneously"
+msgstr ""
+
+#: elf32-v850.c:164
+#, c-format
+msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously"
+msgstr ""
+
+#: elf32-v850.c:466
+msgid "failed to find previous HI16 reloc"
+msgstr ""
+
+#: elf32-v850.c:2306
+msgid "could not locate special linker symbol __gp"
+msgstr ""
+
+#: elf32-v850.c:2310
+msgid "could not locate special linker symbol __ep"
+msgstr ""
+
+#: elf32-v850.c:2314
+msgid "could not locate special linker symbol __ctbp"
+msgstr ""
+
+#: elf32-v850.c:2535
+#, c-format
+msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"
+msgstr ""
+
+#: elf32-v850.c:2551
+#, c-format
+msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles"
+msgstr ""
+
+#: elf32-v850.c:2566
+#, c-format
+msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
+msgstr ""
+
+#: elf32-v850.c:2598
+#, c-format
+msgid " alignment of 8-byte entities: "
+msgstr ""
+
+#: elf32-v850.c:2601
+#, c-format
+msgid "4-byte"
+msgstr ""
+
+#: elf32-v850.c:2602
+#, c-format
+msgid "8-byte"
+msgstr ""
+
+#: elf32-v850.c:2603 elf32-v850.c:2615
+#, c-format
+msgid "not set"
+msgstr ""
+
+#: elf32-v850.c:2604 elf32-v850.c:2616 elf32-v850.c:2628 elf32-v850.c:2639
+#: elf32-v850.c:2650 elf32-v850.c:2661
+#, c-format
+msgid "unknown: %x"
+msgstr ""
+
+#: elf32-v850.c:2610
+#, c-format
+msgid " size of doubles: "
+msgstr ""
+
+#: elf32-v850.c:2613
+#, c-format
+msgid "4-bytes"
+msgstr ""
+
+#: elf32-v850.c:2614
+#, c-format
+msgid "8-bytes"
+msgstr ""
+
+#: elf32-v850.c:2622
+#, c-format
+msgid " FPU support required: "
+msgstr ""
+
+#: elf32-v850.c:2625
+#, c-format
+msgid "FPU-2.0"
+msgstr ""
+
+#: elf32-v850.c:2626
+#, c-format
+msgid "FPU-3.0"
+msgstr ""
+
+#: elf32-v850.c:2627
+#, c-format
+msgid "none"
+msgstr ""
+
+#: elf32-v850.c:2634
+#, c-format
+msgid "SIMD use: "
+msgstr ""
+
+#: elf32-v850.c:2637 elf32-v850.c:2648 elf32-v850.c:2659
+#, c-format
+msgid "yes"
+msgstr "áƒ“áƒ˜áƒ�áƒ®"
+
+#: elf32-v850.c:2638 elf32-v850.c:2649 elf32-v850.c:2660
+#, c-format
+msgid "no"
+msgstr ""
+
+#: elf32-v850.c:2645
+#, c-format
+msgid "CACHE use: "
+msgstr ""
+
+#: elf32-v850.c:2656
+#, c-format
+msgid "MMU use: "
+msgstr ""
+
+#: elf32-v850.c:2823 elf32-v850.c:2879
+#, c-format
+msgid "%pB: architecture mismatch with previous modules"
+msgstr ""
+
+#. xgettext:c-format.
+#: elf32-v850.c:2897
+#, c-format
+msgid "private flags = %lx: "
+msgstr ""
+
+#: elf32-v850.c:2902
+#, c-format
+msgid "unknown v850 architecture"
+msgstr ""
+
+#: elf32-v850.c:2904
+#, c-format
+msgid "v850 E3 architecture"
+msgstr ""
+
+#: elf32-v850.c:2906 elf32-v850.c:2913
+#, c-format
+msgid "v850 architecture"
+msgstr ""
+
+#: elf32-v850.c:2914
+#, c-format
+msgid "v850e architecture"
+msgstr ""
+
+#: elf32-v850.c:2915
+#, c-format
+msgid "v850e1 architecture"
+msgstr ""
+
+#: elf32-v850.c:2916
+#, c-format
+msgid "v850e2 architecture"
+msgstr ""
+
+#: elf32-v850.c:2917
+#, c-format
+msgid "v850e2v3 architecture"
+msgstr ""
+
+#: elf32-v850.c:2918
+#, c-format
+msgid "v850e3v5 architecture"
+msgstr ""
+
+#: elf32-v850.c:3591 elf32-v850.c:3830
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
+msgstr ""
+
+#: elf32-v850.c:3601 elf32-v850.c:3840
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
+msgstr ""
+
+#: elf32-v850.c:3647 elf32-v850.c:3875
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
+msgstr ""
+
+#: elf32-v850.c:3687
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
+msgstr ""
+
+#: elf32-vax.c:539
+#, c-format
+msgid " [nonpic]"
+msgstr ""
+
+#: elf32-vax.c:542
+#, c-format
+msgid " [d-float]"
+msgstr ""
+
+#: elf32-vax.c:545
+#, c-format
+msgid " [g-float]"
+msgstr ""
+
+#: elf32-vax.c:631
+#, c-format
+msgid "%pB: warning: GOT addend of %<PRId64> to `%s' does not match previous GOT addend of %<PRId64>"
+msgstr ""
+
+#: elf32-vax.c:1388
+#, c-format
+msgid "%pB: warning: PLT addend of %<PRId64> to `%s' from %pA section ignored"
+msgstr ""
+
+#: elf32-vax.c:1514
+#, c-format
+msgid "%pB: warning: %s relocation against symbol `%s' from %pA section"
+msgstr ""
+
+#: elf32-vax.c:1521
+#, c-format
+msgid "%pB: warning: %s relocation to %#<PRIx64> from %pA section"
+msgstr ""
+
+#: elf32-visium.c:824
+#, c-format
+msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
+msgstr ""
+
+#: elf32-xgate.c:506
+#, c-format
+msgid "cpu=XGATE]"
+msgstr ""
+
+#: elf32-xgate.c:508
+#, c-format
+msgid "error reading cpu type from elf private data"
+msgstr ""
+
+#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2076 elfnn-ia64.c:2345
+msgid "non-zero addend in @fptr reloc"
+msgstr ""
+
+#: elf32-xtensa.c:998
+#, c-format
+msgid "%pB(%pA): invalid property table"
+msgstr ""
+
+#: elf32-xtensa.c:2733
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
+msgstr ""
+
+#: elf32-xtensa.c:2816 elf32-xtensa.c:2939
+msgid "dynamic relocation in read-only section"
+msgstr ""
+
+#: elf32-xtensa.c:2916
+msgid "TLS relocation invalid without dynamic sections"
+msgstr ""
+
+#: elf32-xtensa.c:3129
+msgid "internal inconsistency in size of .got.loc section"
+msgstr ""
+
+#: elf32-xtensa.c:3435
+#, c-format
+msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
+msgstr ""
+
+#: elf32-xtensa.c:4734 elf32-xtensa.c:4742
+msgid "attempt to convert L32R/CALLX to CALL failed"
+msgstr ""
+
+#: elf32-xtensa.c:6567 elf32-xtensa.c:6646 elf32-xtensa.c:8072
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
+msgstr ""
+
+#: elf32-xtensa.c:7813
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
+msgstr ""
+
+#: elf32-xtensa.c:9671
+msgid "invalid relocation address"
+msgstr ""
+
+#: elf32-xtensa.c:9762
+msgid "overflow after relaxation"
+msgstr ""
+
+#: elf32-xtensa.c:10908
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
+msgstr ""
+
+#: elf32-z80.c:473
+#, c-format
+msgid "%pB: unsupported bfd mach %#lx"
+msgstr ""
+
+#: elf32-z80.c:518
+#, c-format
+msgid "%pB: unsupported mach %#x"
+msgstr ""
+
+#: elf32-z80.c:546
+#, c-format
+msgid "%pB: unsupported arch %#x"
+msgstr ""
+
+#: elf64-alpha.c:474
+msgid "GPDISP relocation did not find ldah and lda instructions"
+msgstr ""
+
+#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15391
+#: elfnn-loongarch.c:1566
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr ""
+
+#: elf64-alpha.c:2454
+#, c-format
+msgid "%pB: .got subsegment exceeds 64K (size %d)"
+msgstr ""
+
+#: elf64-alpha.c:2992 elf64-alpha.c:3187
+#, c-format
+msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
+msgstr ""
+
+#: elf64-alpha.c:4387 elf64-alpha.c:4400
+#, c-format
+msgid "%pB: gp-relative relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf64-alpha.c:4456
+#, c-format
+msgid "%pB: change in gp: BRSGP %s"
+msgstr ""
+
+#: elf64-alpha.c:4481 mach-o.c:616 elfnn-riscv.c:619
+msgid "<unknown>"
+msgstr ""
+
+#: elf64-alpha.c:4487
+#, c-format
+msgid "%pB: !samegp reloc against symbol without .prologue: %s"
+msgstr ""
+
+#: elf64-alpha.c:4545
+#, c-format
+msgid "%pB: unhandled dynamic relocation against %s"
+msgstr ""
+
+#: elf64-alpha.c:4580
+#, c-format
+msgid "%pB: pc-relative relocation against undefined weak symbol %s"
+msgstr ""
+
+#: elf64-alpha.c:4646
+#, c-format
+msgid "%pB: dtp-relative relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf64-alpha.c:4671
+#, c-format
+msgid "%pB: tp-relative relocation against dynamic symbol %s"
+msgstr ""
+
+#. Only if it's not an unresolved symbol.
+#: elf64-bpf.c:557
+msgid "internal error: relocation not supported"
+msgstr ""
+
+#: elf64-gen.c:71
+#, c-format
+msgid "%pB: Relocations in generic ELF (EM: %d)"
+msgstr ""
+
+#: elf64-hppa.c:2032
+#, c-format
+msgid "stub entry for %s cannot load .plt, dp offset = %<PRId64>"
+msgstr ""
+
+#: elf64-hppa.c:3236
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot reach %s"
+msgstr ""
+
+#: elf64-ia64-vms.c:599 elfnn-ia64.c:640
+#, c-format
+msgid "%pB: can't relax br at %#<PRIx64> in section `%pA'; please use brl or indirect branch"
+msgstr ""
+
+#: elf64-ia64-vms.c:2031 elfnn-ia64.c:2293
+msgid "@pltoff reloc against local symbol"
+msgstr ""
+
+#: elf64-ia64-vms.c:3277 elfnn-ia64.c:3670
+#, c-format
+msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
+msgstr ""
+
+#: elf64-ia64-vms.c:3287 elfnn-ia64.c:3680
+#, c-format
+msgid "%pB: __gp does not cover short data segment"
+msgstr ""
+
+#: elf64-ia64-vms.c:3557 elfnn-ia64.c:3953
+#, c-format
+msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
+msgstr ""
+
+#: elf64-ia64-vms.c:3621 elfnn-ia64.c:4021
+#, c-format
+msgid "%pB: @gprel relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf64-ia64-vms.c:3680 elfnn-ia64.c:4084
+#, c-format
+msgid "%pB: linking non-pic code in a position independent executable"
+msgstr ""
+
+#: elf64-ia64-vms.c:3782 elfnn-ia64.c:4222
+#, c-format
+msgid "%pB: @internal branch to dynamic symbol %s"
+msgstr ""
+
+#: elf64-ia64-vms.c:3785 elfnn-ia64.c:4225
+#, c-format
+msgid "%pB: speculation fixup to dynamic symbol %s"
+msgstr ""
+
+#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4228
+#, c-format
+msgid "%pB: @pcrel relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf64-ia64-vms.c:3912 elfnn-ia64.c:4425
+msgid "unsupported reloc"
+msgstr ""
+
+#: elf64-ia64-vms.c:3949 elfnn-ia64.c:4463
+#, c-format
+msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
+msgstr ""
+
+#: elf64-ia64-vms.c:3966 elfnn-ia64.c:4480
+#, c-format
+msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
+msgstr ""
+
+#: elf64-ia64-vms.c:4262 elfnn-ia64.c:4741
+#, c-format
+msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
+msgstr ""
+
+#: elf64-ia64-vms.c:4271 elfnn-ia64.c:4750
+#, c-format
+msgid "%pB: linking big-endian files with little-endian files"
+msgstr ""
+
+#: elf64-ia64-vms.c:4280 elfnn-ia64.c:4759
+#, c-format
+msgid "%pB: linking 64-bit files with 32-bit files"
+msgstr ""
+
+#: elf64-ia64-vms.c:4289 elfnn-ia64.c:4768
+#, c-format
+msgid "%pB: linking constant-gp files with non-constant-gp files"
+msgstr ""
+
+#: elf64-ia64-vms.c:4299 elfnn-ia64.c:4778
+#, c-format
+msgid "%pB: linking auto-pic files with non-auto-pic files"
+msgstr ""
+
+#: elf64-ia64-vms.c:5146 elflink.c:5298
+#, c-format
+msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
+msgstr ""
+
+#: elf64-ia64-vms.c:5153 elflink.c:5305
+#, c-format
+msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
+msgstr ""
+
+#: elf64-ia64-vms.c:5169 elflink.c:5322
+#, c-format
+msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
+msgstr ""
+
+#: elf64-mips.c:4099
+#, c-format
+msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
+msgstr ""
+
+#: elf64-mmix.c:984
+msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using \"-no-expand\" (for gcc, \"-Wa,-no-expand\""
+msgstr ""
+
+#: elf64-mmix.c:1168
+msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option \"-mno-base-addresses\"."
+msgstr ""
+
+#: elf64-mmix.c:1195
+#, c-format
+msgid ""
+"%pB: Internal inconsistency error for value for\n"
+" linker-allocated global register: linked: %#<PRIx64> != relaxed: %#<PRIx64>"
+msgstr ""
+
+#: elf64-mmix.c:1619
+#, c-format
+msgid "%pB: base-plus-offset relocation against register symbol: (unknown) in %pA"
+msgstr ""
+
+#: elf64-mmix.c:1625
+#, c-format
+msgid "%pB: base-plus-offset relocation against register symbol: %s in %pA"
+msgstr ""
+
+#: elf64-mmix.c:1670
+#, c-format
+msgid "%pB: register relocation against non-register symbol: (unknown) in %pA"
+msgstr ""
+
+#: elf64-mmix.c:1676
+#, c-format
+msgid "%pB: register relocation against non-register symbol: %s in %pA"
+msgstr ""
+
+#: elf64-mmix.c:1713
+#, c-format
+msgid "%pB: directive LOCAL valid only with a register or absolute value"
+msgstr ""
+
+#: elf64-mmix.c:1742
+#, c-format
+msgid "%pB: LOCAL directive: register $%<PRId64> is not a local register; first global register is $%<PRId64>"
+msgstr ""
+
+#: elf64-mmix.c:2157
+#, c-format
+msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file"
+msgstr ""
+
+#: elf64-mmix.c:2212
+msgid "register section has contents\n"
+msgstr ""
+
+#: elf64-mmix.c:2402
+#, c-format
+msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
+msgstr ""
+
+#: elf64-ppc.c:1356
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr ""
+
+#: elf64-ppc.c:4306
+#, c-format
+msgid "symbol '%s' has invalid st_other for ABI version 1"
+msgstr ""
+
+#: elf64-ppc.c:4487
+#, c-format
+msgid "%pB .opd not allowed in ABI version %d"
+msgstr ""
+
+#: elf64-ppc.c:5082
+#, c-format
+msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
+msgstr ""
+
+#: elf64-ppc.c:5472
+#, c-format
+msgid "%pB uses unknown e_flags 0x%lx"
+msgstr ""
+
+#: elf64-ppc.c:5480
+#, c-format
+msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
+msgstr ""
+
+#: elf64-ppc.c:5507
+#, c-format
+msgid " [abiv%ld]"
+msgstr ""
+
+#: elf64-ppc.c:6804
+msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
+msgstr ""
+
+#: elf64-ppc.c:7071
+#, c-format
+msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
+msgstr ""
+
+#: elf64-ppc.c:7326
+#, c-format
+msgid "dynreloc miscount for %pB, section %pA"
+msgstr ""
+
+#: elf64-ppc.c:7415
+#, c-format
+msgid "%pB: .opd is not a regular array of opd entries"
+msgstr ""
+
+#: elf64-ppc.c:7425
+#, c-format
+msgid "%pB: unexpected reloc type %u in .opd section"
+msgstr ""
+
+#: elf64-ppc.c:7447
+#, c-format
+msgid "%pB: undefined sym `%s' in .opd section"
+msgstr ""
+
+#. The issue is that __glink_PLTresolve saves r2, which is done
+#. because glibc ld.so _dl_runtime_resolve restores r2 to support
+#. a glibc plt call optimisation where global entry code is
+#. skipped on calls that resolve to the same binary.  The
+#. __glink_PLTresolve save of r2 is incompatible with code
+#. making tail calls, because the tail call might go via the
+#. resolver and thus overwrite the proper saved r2.
+#: elf64-ppc.c:7948
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr ""
+
+#: elf64-ppc.c:7956
+msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
+msgstr ""
+
+#: elf64-ppc.c:8272
+msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
+msgstr ""
+
+#: elf64-ppc.c:8707 elf64-ppc.c:9422
+#, c-format
+msgid "%s defined on removed toc entry"
+msgstr ""
+
+#: elf64-ppc.c:9379
+#, c-format
+msgid "%H: %s references optimized away TOC entry\n"
+msgstr ""
+
+#: elf64-ppc.c:9600
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr ""
+
+#: elf64-ppc.c:10495
+#, c-format
+msgid "warning: discarding dynamic section %s"
+msgstr ""
+
+#: elf64-ppc.c:11630
+msgid "%P: cannot find opd entry toc for `%pT'\n"
+msgstr ""
+
+#: elf64-ppc.c:11780
+#, c-format
+msgid "long branch stub `%s' offset overflow"
+msgstr ""
+
+#: elf64-ppc.c:11807
+#, c-format
+msgid "can't find branch stub `%s'"
+msgstr ""
+
+#: elf64-ppc.c:11871 elf64-ppc.c:12123 elf64-ppc.c:14689
+#, c-format
+msgid "%P: linkage table error against `%pT'\n"
+msgstr ""
+
+#: elf64-ppc.c:12322
+#, c-format
+msgid "can't build branch stub `%s'"
+msgstr ""
+
+#: elf64-ppc.c:13349
+#, c-format
+msgid "%pB section %pA exceeds stub group size"
+msgstr ""
+
+#: elf64-ppc.c:14871
+msgid "__tls_get_addr call offset overflow"
+msgstr ""
+
+#: elf64-ppc.c:15211 elf64-ppc.c:15230
+#, c-format
+msgid "%s offset too large for .eh_frame sdata4 encoding"
+msgstr ""
+
+#: elf64-ppc.c:15316
+#, c-format
+msgid "linker stubs in %u group\n"
+msgid_plural "linker stubs in %u groups\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: elf64-ppc.c:15323
+#, c-format
+msgid ""
+"%s  branch         %lu\n"
+"  long branch    %lu\n"
+"  plt call       %lu\n"
+"  global entry   %lu"
+msgstr ""
+
+#: elf64-ppc.c:15705
+#, c-format
+msgid "%H: %s used with TLS symbol `%pT'\n"
+msgstr ""
+
+#: elf64-ppc.c:15707
+#, c-format
+msgid "%H: %s used with non-TLS symbol `%pT'\n"
+msgstr ""
+
+#: elf64-ppc.c:16491
+#, c-format
+msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
+msgstr ""
+
+#: elf64-ppc.c:16497
+#, c-format
+msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
+msgstr ""
+
+#: elf64-ppc.c:17154
+#, c-format
+msgid "%H: %s against %pT is not supported\n"
+msgstr ""
+
+#: elf64-ppc.c:17430
+#, c-format
+msgid "%H: %s for indirect function `%pT' unsupported\n"
+msgstr ""
+
+#: elf64-ppc.c:17522
+#, c-format
+msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
+msgstr ""
+
+#: elf64-ppc.c:17577
+#, c-format
+msgid "%P: %pB: %s is not supported for `%pT'\n"
+msgstr ""
+
+#: elf64-ppc.c:17846
+#, c-format
+msgid "%H: error: %s not a multiple of %u\n"
+msgstr ""
+
+#: elf64-ppc.c:17869
+#, c-format
+msgid "%H: unresolvable %s against `%pT'\n"
+msgstr ""
+
+#: elf64-ppc.c:18014
+#, c-format
+msgid "%H: %s against `%pT': error %d\n"
+msgstr ""
+
+#: elf64-s390.c:2457
+#, c-format
+msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)"
+msgstr ""
+
+#: elf64-s390.c:3066
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): misaligned symbol `%s' (%#<PRIx64>) for relocation %s"
+msgstr ""
+
+#: elf64-sparc.c:134 elfcode.h:1525
+#, c-format
+msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
+msgstr ""
+
+#: elf64-sparc.c:493
+#, c-format
+msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
+msgstr ""
+
+#: elf64-sparc.c:514
+#, c-format
+msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
+msgstr ""
+
+#: elf64-sparc.c:538
+#, c-format
+msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
+msgstr ""
+
+#: elf64-sparc.c:585
+#, c-format
+msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
+msgstr ""
+
+#: elf64-sparc.c:717
+#, c-format
+msgid "%pB: linking UltraSPARC specific with HAL specific code"
+msgstr ""
+
+#: elf64-x86-64.c:1481
+msgid "hidden symbol "
+msgstr ""
+
+#: elf64-x86-64.c:1484
+msgid "internal symbol "
+msgstr ""
+
+#: elf64-x86-64.c:1487 elf64-x86-64.c:1491
+msgid "protected symbol "
+msgstr ""
+
+#: elf64-x86-64.c:1493
+msgid "symbol "
+msgstr ""
+
+#: elf64-x86-64.c:1499
+msgid "undefined "
+msgstr ""
+
+#: elf64-x86-64.c:1509
+msgid "a shared object"
+msgstr ""
+
+#: elf64-x86-64.c:1511
+msgid "; recompile with -fPIC"
+msgstr ""
+
+#: elf64-x86-64.c:1516
+msgid "a PIE object"
+msgstr ""
+
+#: elf64-x86-64.c:1518
+msgid "a PDE object"
+msgstr ""
+
+#: elf64-x86-64.c:1520
+msgid "; recompile with -fPIE"
+msgstr ""
+
+#: elf64-x86-64.c:1524
+#, c-format
+msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
+msgstr ""
+
+#: elf64-x86-64.c:2029
+#, c-format
+msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
+msgstr ""
+
+#: elf64-x86-64.c:2173
+#, c-format
+msgid "%pB: '%s' accessed both as normal and thread local symbol"
+msgstr ""
+
+#: elf64-x86-64.c:2832 elfnn-aarch64.c:5556 elfnn-riscv.c:2111
+#, c-format
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
+msgstr ""
+
+#: elf64-x86-64.c:3092
+#, c-format
+msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
+msgstr ""
+
+#: elf64-x86-64.c:3106
+#, c-format
+msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
+msgstr ""
+
+#: elf64-x86-64.c:3396
+#, c-format
+msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
+msgstr ""
+
+#: elf64-x86-64.c:3539 elflink.c:13706
+msgid "%F%P: corrupt input: %pB\n"
+msgstr ""
+
+#: elf64-x86-64.c:4223
+#, c-format
+msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
+msgstr ""
+
+#: elf64-x86-64.c:4384
+#, c-format
+msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
+msgstr ""
+
+#: elf64-x86-64.c:4452
+#, c-format
+msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
+msgstr ""
+
+#: elf64-x86-64.c:4505
+#, c-format
+msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
+msgstr ""
+
+#: elfcode.h:329
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr ""
+
+#: elfcode.h:777
+#, c-format
+msgid "warning: %pB has a corrupt string table index"
+msgstr ""
+
+#: elfcode.h:824
+#, c-format
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr ""
+
+#: elfcode.h:1011
+#, c-format
+msgid "%pB: %pA+%<PRIx64>: relocation addend %<PRIx64> too large"
+msgstr ""
+
+#: elfcode.h:1265
+#, c-format
+msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
+msgstr ""
+
+#: elfcore.h:280
+#, c-format
+msgid "warning: %pB has a segment extending past end of file"
+msgstr ""
+
+#: elflink.c:1410
+#, c-format
+msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
+msgstr ""
+
+#: elflink.c:1416
+#, c-format
+msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
+msgstr ""
+
+#: elflink.c:1422
+#, c-format
+msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
+msgstr ""
+
+#: elflink.c:1428
+#, c-format
+msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
+msgstr ""
+
+#: elflink.c:2140
+#, c-format
+msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
+msgstr ""
+
+#: elflink.c:2601
+#, c-format
+msgid "%pB: version node not found for symbol %s"
+msgstr ""
+
+#: elflink.c:2692
+#, c-format
+msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
+msgstr ""
+
+#: elflink.c:2704
+#, c-format
+msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
+msgstr ""
+
+#: elflink.c:2915
+#, c-format
+msgid "%pB: relocation size mismatch in %pB section %pA"
+msgstr ""
+
+#: elflink.c:3244
+#, c-format
+msgid "warning: type and size of dynamic symbol `%s' are not defined"
+msgstr ""
+
+#: elflink.c:3304
+msgid "%P: copy reloc against protected `%pT' is dangerous\n"
+msgstr ""
+
+#: elflink.c:4266
+#, c-format
+msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
+msgstr ""
+
+#: elflink.c:4749
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr ""
+
+#: elflink.c:4817
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr ""
+
+#: elflink.c:4965
+#, c-format
+msgid "%pB: not enough version information"
+msgstr ""
+
+#: elflink.c:5003
+#, c-format
+msgid "%pB: %s: invalid version %u (max %d)"
+msgstr ""
+
+#: elflink.c:5040
+#, c-format
+msgid "%pB: %s: invalid needed version %d"
+msgstr ""
+
+#: elflink.c:5459
+#, c-format
+msgid "%pB: undefined reference to symbol '%s'"
+msgstr ""
+
+#: elflink.c:6519
+#, c-format
+msgid "%pB: stack size specified and %s set"
+msgstr ""
+
+#: elflink.c:6523
+#, c-format
+msgid "%pB: %s not absolute"
+msgstr ""
+
+#: elflink.c:6735
+#, c-format
+msgid "%s: undefined version: %s"
+msgstr ""
+
+#: elflink.c:7124
+msgid "warning: enabling an executable stack because of -z execstack command line option"
+msgstr ""
+
+#: elflink.c:7181
+#, c-format
+msgid "warning: %s: requires executable stack (because the .note.GNU-stack section is executable)"
+msgstr ""
+
+#: elflink.c:7186
+#, c-format
+msgid "warning: %s: missing .note.GNU-stack section implies executable stack"
+msgstr ""
+
+#: elflink.c:7189
+msgid "NOTE: This behaviour is deprecated and will be removed in a future version of the linker"
+msgstr ""
+
+#: elflink.c:7343
+#, c-format
+msgid "%pB: .preinit_array section is not allowed in DSO"
+msgstr ""
+
+#: elflink.c:8934
+#, c-format
+msgid "undefined %s reference in complex symbol: %s"
+msgstr ""
+
+#: elflink.c:9097 elflink.c:9105
+msgid "division by zero"
+msgstr "áƒœáƒ£áƒšáƒ–áƒ” áƒ’áƒ�áƒ§áƒ�áƒ¤áƒ�"
+
+#: elflink.c:9119
+#, c-format
+msgid "unknown operator '%c' in complex symbol"
+msgstr ""
+
+#. PR 21524: Let the user know if a symbol was removed by garbage collection.
+#: elflink.c:9455
+#, c-format
+msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
+msgstr ""
+
+#: elflink.c:9458
+#, c-format
+msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
+msgstr ""
+
+#: elflink.c:9709 elflink.c:9727 elflink.c:9766 elflink.c:9784
+#, c-format
+msgid "%pB: unable to sort relocs - they are in more than one size"
+msgstr ""
+
+#. The section size is not divisible by either -
+#. something is wrong.
+#: elflink.c:9743 elflink.c:9800
+#, c-format
+msgid "%pB: unable to sort relocs - they are of an unknown size"
+msgstr ""
+
+#: elflink.c:9852
+msgid "not enough memory to sort relocations"
+msgstr ""
+
+#: elflink.c:10190
+#, c-format
+msgid "%pB: too many sections: %d (>= %d)"
+msgstr ""
+
+#: elflink.c:10466
+#, c-format
+msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
+msgstr ""
+
+#: elflink.c:10469
+#, c-format
+msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
+msgstr ""
+
+#: elflink.c:10472
+#, c-format
+msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
+msgstr ""
+
+#: elflink.c:10558
+#, c-format
+msgid "%pB: could not find output section %pA for input section %pA"
+msgstr ""
+
+#: elflink.c:10712
+#, c-format
+msgid "%pB: protected symbol `%s' isn't defined"
+msgstr ""
+
+#: elflink.c:10715
+#, c-format
+msgid "%pB: internal symbol `%s' isn't defined"
+msgstr ""
+
+#: elflink.c:10718
+#, c-format
+msgid "%pB: hidden symbol `%s' isn't defined"
+msgstr ""
+
+#: elflink.c:10750
+#, c-format
+msgid "%pB: no symbol version section for versioned symbol `%s'"
+msgstr ""
+
+#: elflink.c:11424
+#, c-format
+msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
+msgstr ""
+
+#: elflink.c:11894
+#, c-format
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr ""
+
+#: elflink.c:12171
+#, c-format
+msgid "%pB: no symbol found for import library"
+msgstr ""
+
+#: elflink.c:12746
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr ""
+
+#: elflink.c:12823
+#, c-format
+msgid "%pB: file class %s incompatible with %s"
+msgstr ""
+
+#: elflink.c:13072
+#, c-format
+msgid "%pB: failed to generate import library"
+msgstr ""
+
+#: elflink.c:13240
+#, c-format
+msgid "warning: %s section has zero size"
+msgstr ""
+
+#: elflink.c:13288
+#, c-format
+msgid "warning: section '%s' is being made into a note"
+msgstr ""
+
+#: elflink.c:13382
+msgid "%P%X: read-only segment has dynamic relocations\n"
+msgstr ""
+
+#: elflink.c:13385
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
+msgstr ""
+
+#: elflink.c:13388
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr ""
+
+#: elflink.c:13391
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr ""
+
+#: elflink.c:13527
+msgid "%P%X: can not read symbols: %E\n"
+msgstr ""
+
+#: elflink.c:13952
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
+msgstr ""
+
+#: elflink.c:14430
+#, c-format
+msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
+msgstr ""
+
+#: elflink.c:14471
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr ""
+
+#: elflink.c:14614
+#, c-format
+msgid "unrecognized INPUT_SECTION_FLAG %s\n"
+msgstr ""
+
+#: elflink.c:15397
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr ""
+
+#: elflink.c:15486
+msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
+msgstr ""
+
+#: elfxx-aarch64.c:477
+#, c-format
+msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr ""
+
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:10031 elfnn-aarch64.c:10038
+#, c-format
+msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
+msgstr ""
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr ""
+
+#: elfxx-loongarch.c:1398
+#, c-format
+msgid "%pB: unsupported relocation type %s"
+msgstr ""
+
+#: elfxx-loongarch.c:1427
+#, c-format
+msgid "%pB: unsupported bfd relocation type %#x"
+msgstr ""
+
+#: elfxx-loongarch.c:1446
+#, c-format
+msgid "%pB: unsupported relocation type name %s"
+msgstr ""
+
+#: elfxx-mips.c:1537
+msgid "static procedure (no name)"
+msgstr ""
+
+#: elfxx-mips.c:5835
+msgid "MIPS16 and microMIPS functions cannot call each other"
+msgstr ""
+
+#: elfxx-mips.c:6602
+msgid "%X%H: unsupported JALX to the same ISA mode\n"
+msgstr ""
+
+#: elfxx-mips.c:6635
+msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n"
+msgstr ""
+
+#: elfxx-mips.c:6680
+msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n"
+msgstr ""
+
+#: elfxx-mips.c:6692
+msgid "%X%H: unsupported branch between ISA modes\n"
+msgstr ""
+
+#: elfxx-mips.c:7321
+#, c-format
+msgid "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
+msgstr ""
+
+#: elfxx-mips.c:7365
+#, c-format
+msgid "%pB: warning: bad `%s' option size %u smaller than its header"
+msgstr ""
+
+#: elfxx-mips.c:7601
+#, c-format
+msgid "%pB: warning: truncated `%s' option"
+msgstr ""
+
+#: elfxx-mips.c:8424 elfxx-mips.c:8550
+#, c-format
+msgid "%pB: warning: cannot determine the target function for stub section `%s'"
+msgstr ""
+
+#: elfxx-mips.c:8682
+#, c-format
+msgid "%pB: malformed reloc detected for section %s"
+msgstr ""
+
+#: elfxx-mips.c:8782
+#, c-format
+msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
+msgstr ""
+
+#: elfxx-mips.c:8922
+#, c-format
+msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
+msgstr ""
+
+#: elfxx-mips.c:9225
+#, c-format
+msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n"
+msgstr ""
+
+#: elfxx-mips.c:9351
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr ""
+
+#: elfxx-mips.c:9354
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr ""
+
+#: elfxx-mips.c:9574
+#, c-format
+msgid "non-dynamic relocations refer to dynamic symbol %s"
+msgstr ""
+
+#: elfxx-mips.c:10509
+#, c-format
+msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %#<PRIx64> in section `%pA'"
+msgstr ""
+
+#: elfxx-mips.c:10649
+msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
+msgstr ""
+
+#: elfxx-mips.c:10668
+msgid "cannot convert a jump to JALX for a non-word-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10671
+msgid "jump to a non-word-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10672
+msgid "jump to a non-instruction-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10675
+msgid "cannot convert a branch to JALX for a non-word-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10677
+msgid "branch to a non-instruction-aligned address"
+msgstr ""
+
+#: elfxx-mips.c:10679
+msgid "PC-relative load from unaligned address"
+msgstr ""
+
+#: elfxx-mips.c:10979
+#, c-format
+msgid "%pB: `%pA' entry VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
+msgstr ""
+
+#: elfxx-mips.c:11094 elfxx-mips.c:11681
+#, c-format
+msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
+msgstr ""
+
+#: elfxx-mips.c:11653
+#, c-format
+msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
+msgstr ""
+
+#: elfxx-mips.c:13410 reloc.c:8573
+#, c-format
+msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgstr ""
+
+#: elfxx-mips.c:13511 reloc.c:8661
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr ""
+
+#: elfxx-mips.c:13520 reloc.c:8670
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr ""
+
+#: elfxx-mips.c:14702
+#, c-format
+msgid "%pB: unknown architecture %s"
+msgstr ""
+
+#: elfxx-mips.c:15236
+#, c-format
+msgid "%pB: illegal section name `%pA'"
+msgstr ""
+
+#: elfxx-mips.c:15513
+#, c-format
+msgid "%pB: warning: linking abicalls files with non-abicalls files"
+msgstr ""
+
+#: elfxx-mips.c:15530
+#, c-format
+msgid "%pB: linking 32-bit code with 64-bit code"
+msgstr ""
+
+#: elfxx-mips.c:15562 elfxx-mips.c:15628 elfxx-mips.c:15643
+#, c-format
+msgid "%pB: linking %s module with previous %s modules"
+msgstr ""
+
+#: elfxx-mips.c:15586
+#, c-format
+msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
+msgstr ""
+
+#: elfxx-mips.c:15611
+#, c-format
+msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
+msgstr ""
+
+#: elfxx-mips.c:15745
+#, c-format
+msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
+msgstr ""
+
+#: elfxx-mips.c:15751
+#, c-format
+msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
+msgstr ""
+
+#: elfxx-mips.c:15757
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
+msgstr ""
+
+#: elfxx-mips.c:15771
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
+msgstr ""
+
+#: elfxx-mips.c:15790
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
+msgstr ""
+
+#: elfxx-mips.c:15802
+#, c-format
+msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
+msgstr ""
+
+#: elfxx-mips.c:15811
+#, c-format
+msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
+msgstr ""
+
+#: elfxx-mips.c:15873
+#, c-format
+msgid "%pB: endianness incompatible with that of the selected emulation"
+msgstr ""
+
+#: elfxx-mips.c:15887
+#, c-format
+msgid "%pB: ABI is incompatible with that of the selected emulation"
+msgstr ""
+
+#: elfxx-mips.c:15940
+#, c-format
+msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
+msgstr ""
+
+#: elfxx-mips.c:15945
+#, c-format
+msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
+msgstr ""
+
+#: elfxx-mips.c:15949
+#, c-format
+msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
+msgstr ""
+
+#: elfxx-mips.c:15956
+#, c-format
+msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
+msgstr ""
+
+#: elfxx-mips.c:15960
+#, c-format
+msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
+msgstr ""
+
+#: elfxx-mips.c:16151
+msgid "-mips32r2 -mfp64 (12 callee-saved)"
+msgstr ""
+
+#: elfxx-mips.c:16213 elfxx-mips.c:16224
+msgid "None"
+msgstr "áƒ�áƒ áƒ�áƒ¤áƒ”áƒ áƒ˜áƒ¡"
+
+#: elfxx-mips.c:16215 elfxx-mips.c:16284
+msgid "Unknown"
+msgstr ""
+
+#: elfxx-mips.c:16295
+#, c-format
+msgid "Hard or soft float\n"
+msgstr ""
+
+#: elfxx-mips.c:16298
+#, c-format
+msgid "Hard float (double precision)\n"
+msgstr ""
+
+#: elfxx-mips.c:16301
+#, c-format
+msgid "Hard float (single precision)\n"
+msgstr ""
+
+#: elfxx-mips.c:16304
+#, c-format
+msgid "Soft float\n"
+msgstr ""
+
+#: elfxx-mips.c:16307
+#, c-format
+msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
+msgstr ""
+
+#: elfxx-mips.c:16310
+#, c-format
+msgid "Hard float (32-bit CPU, Any FPU)\n"
+msgstr ""
+
+#: elfxx-mips.c:16313
+#, c-format
+msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
+msgstr ""
+
+#: elfxx-mips.c:16316
+#, c-format
+msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
+msgstr ""
+
+#: elfxx-mips.c:16348
+#, c-format
+msgid " [abi=O32]"
+msgstr ""
+
+#: elfxx-mips.c:16350
+#, c-format
+msgid " [abi=O64]"
+msgstr ""
+
+#: elfxx-mips.c:16352
+#, c-format
+msgid " [abi=EABI32]"
+msgstr ""
+
+#: elfxx-mips.c:16354
+#, c-format
+msgid " [abi=EABI64]"
+msgstr ""
+
+#: elfxx-mips.c:16356
+#, c-format
+msgid " [abi unknown]"
+msgstr ""
+
+#: elfxx-mips.c:16358
+#, c-format
+msgid " [abi=N32]"
+msgstr ""
+
+#: elfxx-mips.c:16360
+#, c-format
+msgid " [abi=64]"
+msgstr ""
+
+#: elfxx-mips.c:16362
+#, c-format
+msgid " [no abi set]"
+msgstr ""
+
+#: elfxx-mips.c:16387
+#, c-format
+msgid " [unknown ISA]"
+msgstr ""
+
+#: elfxx-mips.c:16407
+#, c-format
+msgid " [not 32bitmode]"
+msgstr ""
+
+#: elfxx-riscv.c:1569
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr ""
+
+#: elfxx-riscv.c:1575
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1681
+#, c-format
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr ""
+
+#: elfxx-riscv.c:1705
+#, c-format
+msgid "%s: unknown standard ISA extension or prefix class `%c'"
+msgstr ""
+
+#: elfxx-riscv.c:1741
+#, c-format
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr ""
+
+#: elfxx-riscv.c:1765
+#, c-format
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1789
+#, c-format
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr ""
+
+#: elfxx-riscv.c:1828
+#, c-format
+msgid "rv%d does not support the `e' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1836
+#, c-format
+msgid "rv%d does not support the `q' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1843
+msgid "`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1864
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1926
+#, c-format
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr ""
+
+#: elfxx-riscv.c:1954
+#, c-format
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr ""
+
+#: elfxx-riscv.c:2180
+#, c-format
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2203
+#, c-format
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2214
+#, c-format
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:2388 elfxx-riscv.c:2546
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr ""
+
+#: elfxx-riscv.c:2419
+msgid "m' or `zmmul"
+msgstr ""
+
+#: elfxx-riscv.c:2435
+msgid "f' and `c"
+msgstr ""
+
+#: elfxx-riscv.c:2443
+msgid "d' and `c"
+msgstr ""
+
+#: elfxx-riscv.c:2449
+msgid "f' or `zfinx"
+msgstr ""
+
+#: elfxx-riscv.c:2451
+msgid "d' or `zdinx"
+msgstr ""
+
+#: elfxx-riscv.c:2453
+msgid "q' or `zqinx"
+msgstr ""
+
+#: elfxx-riscv.c:2455
+msgid "zfh' or `zhinx"
+msgstr ""
+
+#: elfxx-riscv.c:2459
+msgid "zfhmin' or `zhinxmin"
+msgstr ""
+
+#: elfxx-riscv.c:2470
+msgid "zfhmin' and `d', or `zhinxmin' and `zdinx"
+msgstr ""
+
+#: elfxx-riscv.c:2481
+msgid "zfhmin' and `q', or `zhinxmin' and `zqinx"
+msgstr ""
+
+#: elfxx-riscv.c:2497
+msgid "zbb' or `zbkb"
+msgstr ""
+
+#: elfxx-riscv.c:2499
+msgid "zbc' or `zbkc"
+msgstr ""
+
+#: elfxx-riscv.c:2507
+msgid "zknd' or `zkne"
+msgstr ""
+
+#: elfxx-riscv.c:2513
+msgid "v' or `zve64x' or `zve32x"
+msgstr ""
+
+#: elfxx-riscv.c:2515
+msgid "v' or `zve64d' or `zve64f' or `zve32f"
+msgstr ""
+
+#: elfxx-riscv.c:2519
+msgid "h"
+msgstr "áƒ¡áƒ—"
+
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5540
+#, c-format
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
+msgstr ""
+
+#: elfxx-tilegx.c:4126
+#, c-format
+msgid "%pB: cannot link together %s and %s objects"
+msgstr ""
+
+#: elfxx-x86.c:536 elfxx-x86.c:3385
+#, c-format
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB\n"
+msgstr ""
+
+#: elfxx-x86.c:1043
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr ""
+
+#: elfxx-x86.c:1385
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr ""
+
+#: elfxx-x86.c:1421
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr ""
+
+#: elfxx-x86.c:1560
+#, c-format
+msgid "%F%P: %pB: failed to allocate memory for section `%pA'\n"
+msgstr ""
+
+#: elfxx-x86.c:1747
+#, c-format
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr ""
+
+#: elfxx-x86.c:1769
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr ""
+
+#: elfxx-x86.c:2214
+#, c-format
+msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
+msgstr ""
+
+#: elfxx-x86.c:2296
+msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
+msgstr ""
+
+#: elfxx-x86.c:3138
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr ""
+
+#: elfxx-x86.c:3144
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr ""
+
+#: elfxx-x86.c:3759
+#, c-format
+msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
+msgstr ""
+
+#: elfxx-x86.c:4106
+msgid "%P: %pB: warning: missing %s\n"
+msgstr ""
+
+#: elfxx-x86.c:4107
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr ""
+
+#: elfxx-x86.c:4170
+msgid "IBT and SHSTK properties"
+msgstr ""
+
+#: elfxx-x86.c:4172
+msgid "IBT property"
+msgstr ""
+
+#: elfxx-x86.c:4174
+msgid "SHSTK property"
+msgstr ""
+
+#: elfxx-x86.c:4179
+msgid "LAM_U48 property"
+msgstr ""
+
+#: elfxx-x86.c:4184
+msgid "LAM_U57 property"
+msgstr ""
+
+#: elfxx-x86.c:4351
+msgid "%F%P: failed to create VxWorks dynamic sections\n"
+msgstr ""
+
+#: elfxx-x86.c:4360
+msgid "%F%P: failed to create GOT sections\n"
+msgstr ""
+
+#: elfxx-x86.c:4378
+msgid "%F%P: failed to create ifunc sections\n"
+msgstr ""
+
+#: elfxx-x86.c:4415
+msgid "%F%P: failed to create GOT PLT section\n"
+msgstr ""
+
+#: elfxx-x86.c:4434
+msgid "%F%P: failed to create IBT-enabled PLT section\n"
+msgstr ""
+
+#: elfxx-x86.c:4454
+msgid "%F%P: failed to create PLT .eh_frame section\n"
+msgstr ""
+
+#: elfxx-x86.c:4467
+msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
+msgstr ""
+
+#: elfxx-x86.c:4481
+msgid "%F%P: failed to create the second PLT .eh_frame section\n"
+msgstr ""
+
+#: elfxx-x86.c:4501
+msgid "%F%P: failed to create PLT .sframe section\n"
+msgstr ""
+
+#: elfxx-x86.c:4516
+msgid "%F%P: failed to create second PLT .sframe section\n"
+msgstr ""
+
+#: elfxx-x86.c:4556
+msgid "%X%P: attempted static link of dynamic object `%pB'\n"
+msgstr ""
+
+#: ihex.c:230
+#, c-format
+msgid "%pB:%d: unexpected character `%s' in Intel Hex file"
+msgstr ""
+
+#: ihex.c:338
+#, c-format
+msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)"
+msgstr ""
+
+#: ihex.c:393
+#, c-format
+msgid "%pB:%u: bad extended address record length in Intel Hex file"
+msgstr ""
+
+#: ihex.c:411
+#, c-format
+msgid "%pB:%u: bad extended start address length in Intel Hex file"
+msgstr ""
+
+#: ihex.c:429
+#, c-format
+msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
+msgstr ""
+
+#: ihex.c:447
+#, c-format
+msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
+msgstr ""
+
+#: ihex.c:465
+#, c-format
+msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
+msgstr ""
+
+#: ihex.c:581
+#, c-format
+msgid "%pB: internal error in ihex_read_section"
+msgstr ""
+
+#: ihex.c:614
+#, c-format
+msgid "%pB: bad section length in ihex_read_section"
+msgstr ""
+
+#: ihex.c:785
+#, c-format
+msgid "%pB 64-bit address %#<PRIx64> out of range for Intel Hex file"
+msgstr ""
+
+#: ihex.c:843
+#, c-format
+msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
+msgstr ""
+
+#: libbfd.c:940
+#, c-format
+msgid "%pB: unable to get decompressed section %pA"
+msgstr ""
+
+#: libbfd.c:1096
+#, c-format
+msgid "Deprecated %s called at %s line %d in %s\n"
+msgstr ""
+
+#: libbfd.c:1099
+#, c-format
+msgid "Deprecated %s called\n"
+msgstr ""
+
+#: linker.c:1710
+#, c-format
+msgid "%pB: indirect symbol `%s' to `%s' is a loop"
+msgstr ""
+
+#: linker.c:2580
+#, c-format
+msgid "attempt to do relocatable link with %s input and %s output"
+msgstr ""
+
+#: linker.c:2859
+#, c-format
+msgid "%pB: ignoring duplicate section `%pA'\n"
+msgstr ""
+
+#: linker.c:2869 linker.c:2879
+#, c-format
+msgid "%pB: duplicate section `%pA' has different size\n"
+msgstr ""
+
+#: linker.c:2888 linker.c:2894
+#, c-format
+msgid "%pB: could not read contents of section `%pA'\n"
+msgstr ""
+
+#: linker.c:2899
+#, c-format
+msgid "%pB: duplicate section `%pA' has different contents\n"
+msgstr ""
+
+#: linker.c:3417
+#, c-format
+msgid "%pB: compiled for a big endian system and target is little endian"
+msgstr ""
+
+#: linker.c:3420
+#, c-format
+msgid "%pB: compiled for a little endian system and target is big endian"
+msgstr ""
+
+#: mach-o-arm.c:169 mach-o-arm.c:301
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr ""
+
+#: mach-o-arm.c:185
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:200
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:215
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:230
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:262
+#, c-format
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr ""
+
+#: mach-o-arm.c:332
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr ""
+
+#: mach-o.c:631
+#, c-format
+msgid "<unknown mask flags>"
+msgstr ""
+
+#: mach-o.c:686
+msgid " (<unknown>)"
+msgstr ""
+
+#: mach-o.c:698
+#, c-format
+msgid " MACH-O header:\n"
+msgstr ""
+
+#: mach-o.c:699
+#, c-format
+msgid "   magic:      %#lx\n"
+msgstr ""
+
+#: mach-o.c:700
+#, c-format
+msgid "   cputype:    %#lx (%s)\n"
+msgstr ""
+
+#: mach-o.c:702
+#, c-format
+msgid "   cpusubtype: %#lx%s\n"
+msgstr ""
+
+#: mach-o.c:704
+#, c-format
+msgid "   filetype:   %#lx\n"
+msgstr ""
+
+#: mach-o.c:705
+#, c-format
+msgid "   ncmds:      %#lx\n"
+msgstr ""
+
+#: mach-o.c:706
+#, c-format
+msgid "   sizeocmds:  %#lx\n"
+msgstr ""
+
+#: mach-o.c:707
+#, c-format
+msgid "   flags:      %#lx\n"
+msgstr ""
+
+#: mach-o.c:708
+#, c-format
+msgid "   version:    %x\n"
+msgstr ""
+
+#. Urg - what has happened ?
+#: mach-o.c:743
+#, c-format
+msgid "incompatible cputypes in mach-o files: %ld vs %ld"
+msgstr ""
+
+#: mach-o.c:912
+msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
+msgstr ""
+
+#: mach-o.c:1504
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr ""
+
+#: mach-o.c:2141
+msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands."
+msgstr ""
+
+#: mach-o.c:2589
+#, c-format
+msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
+msgstr ""
+
+#: mach-o.c:2681
+#, c-format
+msgid "unable to allocate data for load command %#x"
+msgstr ""
+
+#: mach-o.c:2786
+#, c-format
+msgid "unable to write unknown load command %#x"
+msgstr ""
+
+#: mach-o.c:2970
+#, c-format
+msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
+msgstr ""
+
+#: mach-o.c:3112
+#, c-format
+msgid "unable to layout unknown load command %#x"
+msgstr ""
+
+#: mach-o.c:3647
+#, c-format
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr ""
+
+#: mach-o.c:3690
+#, c-format
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr ""
+
+#: mach-o.c:3741
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"
+msgstr ""
+
+#: mach-o.c:3760
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
+msgstr ""
+
+#: mach-o.c:3843
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined"
+msgstr ""
+
+#: mach-o.c:3862
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined"
+msgstr ""
+
+#: mach-o.c:5061
+#, c-format
+msgid "%pB: unknown load command %#x"
+msgstr ""
+
+#: mach-o.c:5260
+#, c-format
+msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
+msgstr ""
+
+#: mach-o.c:5382
+#, c-format
+msgid "unknown header byte-order value %#x"
+msgstr ""
+
+#: merge.c:894
+#, c-format
+msgid "%pB: access beyond end of merged section (%<PRId64>)"
+msgstr ""
+
+#: mmo.c:535
+#, c-format
+msgid "%pB: no core to allocate a symbol %d bytes long"
+msgstr ""
+
+#: mmo.c:958
+#, c-format
+msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
+msgstr ""
+
+#: mmo.c:1253
+#, c-format
+msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
+msgstr ""
+
+#: mmo.c:1400
+#, c-format
+msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
+msgstr ""
+
+#: mmo.c:1416
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr ""
+
+#: mmo.c:1645
+#, c-format
+msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
+msgstr ""
+
+#: mmo.c:1656
+#, c-format
+msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
+msgstr ""
+
+#: mmo.c:1700
+#, c-format
+msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
+msgstr ""
+
+#: mmo.c:1751
+#, c-format
+msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
+msgstr ""
+
+#: mmo.c:1800
+#, c-format
+msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
+msgstr ""
+
+#: mmo.c:1811
+#, c-format
+msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
+msgstr ""
+
+#: mmo.c:1836
+#, c-format
+msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
+msgstr ""
+
+#: mmo.c:1865
+#, c-format
+msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
+msgstr ""
+
+#: mmo.c:1887
+#, c-format
+msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
+msgstr ""
+
+#: mmo.c:1901
+#, c-format
+msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
+msgstr ""
+
+#: mmo.c:2013
+#, c-format
+msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
+msgstr ""
+
+#: mmo.c:2050
+#, c-format
+msgid "%pB: invalid mmo file: lop_end not last item in file\n"
+msgstr ""
+
+#: mmo.c:2064
+#, c-format
+msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
+msgstr ""
+
+#: mmo.c:2777
+#, c-format
+msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
+msgstr ""
+
+#: mmo.c:3016
+#, c-format
+msgid "%pB: bad symbol definition: `Main' set to %<PRIx64> rather than the start address %<PRIx64>\n"
+msgstr ""
+
+#: mmo.c:3115
+#, c-format
+msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
+msgstr ""
+
+#: mmo.c:3161
+#, c-format
+msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
+msgstr ""
+
+#: mmo.c:3214
+#, c-format
+msgid "%pB: internal error, internal register section %pA had contents\n"
+msgstr ""
+
+#: mmo.c:3265
+#, c-format
+msgid "%pB: no initialized registers; section length 0\n"
+msgstr ""
+
+#: mmo.c:3272
+#, c-format
+msgid "%pB: too many initialized registers; section length %<PRId64>"
+msgstr ""
+
+#: mmo.c:3277
+#, c-format
+msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
+msgstr ""
+
+#: osf-core.c:127
+#, c-format
+msgid "unhandled OSF/1 core file section type %d"
+msgstr ""
+
+#: pdp11.c:1589
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr ""
+
+#: pef.c:531
+#, c-format
+msgid "bfd_pef_scan: unknown architecture 0x%lx"
+msgstr ""
+
+#: pei-x86_64.c:178 pei-x86_64.c:232 pei-x86_64.c:242 pei-x86_64.c:267
+#: pei-x86_64.c:279 pei-x86_64.c:293 pei-x86_64.c:311 pei-x86_64.c:323
+#: pei-x86_64.c:335
+#, c-format
+msgid "warning: corrupt unwind data\n"
+msgstr ""
+
+#. PR 17512: file: 2245-7442-0.004.
+#: pei-x86_64.c:356
+#, c-format
+msgid "Unknown: %x"
+msgstr ""
+
+#: pei-x86_64.c:407 pei-x86_64.c:417 pei-x86_64.c:426
+#, c-format
+msgid "warning: xdata section corrupt\n"
+msgstr ""
+
+#: pei-x86_64.c:481
+#, c-format
+msgid "Too many unwind codes (%ld)\n"
+msgstr ""
+
+#: pei-x86_64.c:566
+#, c-format
+msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
+msgstr ""
+
+#: pei-x86_64.c:573
+#, c-format
+msgid "Warning: %s section size is zero\n"
+msgstr ""
+
+#: pei-x86_64.c:588
+#, c-format
+msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
+msgstr ""
+
+#: pei-x86_64.c:597
+#, c-format
+msgid ""
+"\n"
+"The Function Table (interpreted %s section contents)\n"
+msgstr ""
+
+#: pei-x86_64.c:600
+#, c-format
+msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
+msgstr ""
+
+#: pei-x86_64.c:724
+#, c-format
+msgid ""
+"\n"
+"Dump of %s\n"
+msgstr ""
+
+#. XXX code yet to be written.
+#: peicode.h:819
+#, c-format
+msgid "%pB: unhandled import type; %x"
+msgstr ""
+
+#: peicode.h:825
+#, c-format
+msgid "%pB: unrecognized import type; %x"
+msgstr ""
+
+#: peicode.h:840
+#, c-format
+msgid "%pB: unrecognized import name type; %x"
+msgstr ""
+
+#: peicode.h:1260
+#, c-format
+msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
+msgstr ""
+
+#: peicode.h:1273
+#, c-format
+msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
+msgstr ""
+
+#: peicode.h:1291
+#, c-format
+msgid "%pB: size field is zero in Import Library Format header"
+msgstr ""
+
+#: peicode.h:1317
+#, c-format
+msgid "%pB: string not null terminated in ILF object file"
+msgstr ""
+
+#: peicode.h:1373
+#, c-format
+msgid "%pB: error: debug data ends beyond end of debug directory"
+msgstr ""
+
+#: peicode.h:1530
+#, c-format
+msgid "%pB: adjusting invalid SectionAlignment"
+msgstr ""
+
+#: peicode.h:1540
+#, c-format
+msgid "%pB: adjusting invalid FileAlignment"
+msgstr ""
+
+#: peicode.h:1548
+#, c-format
+msgid "%pB: invalid NumberOfRvaAndSizes"
+msgstr ""
+
+#: plugin.c:247
+msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr ""
+
+#: ppcboot.c:393
+#, c-format
+msgid ""
+"\n"
+"ppcboot header:\n"
+msgstr ""
+
+#: ppcboot.c:394
+#, c-format
+msgid "Entry offset        = 0x%.8lx (%ld)\n"
+msgstr ""
+
+#: ppcboot.c:396
+#, c-format
+msgid "Length              = 0x%.8lx (%ld)\n"
+msgstr ""
+
+#: ppcboot.c:400
+#, c-format
+msgid "Flag field          = 0x%.2x\n"
+msgstr ""
+
+#: ppcboot.c:406
+#, c-format
+msgid "Partition name      = \"%s\"\n"
+msgstr ""
+
+#: ppcboot.c:426
+#, c-format
+msgid ""
+"\n"
+"Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+msgstr ""
+
+#: ppcboot.c:433
+#, c-format
+msgid "Partition[%d] end    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+msgstr ""
+
+#: ppcboot.c:440
+#, c-format
+msgid "Partition[%d] sector = 0x%.8lx (%ld)\n"
+msgstr ""
+
+#: ppcboot.c:444
+#, c-format
+msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
+msgstr ""
+
+#: reloc.c:8471
+msgid "INPUT_SECTION_FLAGS are not supported"
+msgstr ""
+
+#: reloc.c:8738
+#, c-format
+msgid "%pB: unrecognized relocation type %#x in section `%pA'"
+msgstr ""
+
+#. PR 21803: Suggest the most likely cause of this error.
+#: reloc.c:8742
+#, c-format
+msgid "is this version of the linker - %s - out of date ?"
+msgstr ""
+
+#: rs6000-core.c:470
+#, c-format
+msgid "%pB: warning core file truncated"
+msgstr ""
+
+#: som.c:3002
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of order"
+msgstr ""
+
+#: som.c:3015
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of range"
+msgstr ""
+
+#. User has specified a subspace without its containing space.
+#: som.c:5488
+#, c-format
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr ""
+
+#: som.c:5534
+#, c-format
+msgid ""
+"\n"
+"Exec Auxiliary Header\n"
+msgstr ""
+
+#: som.c:5843
+msgid "som_sizeof_headers unimplemented"
+msgstr ""
+
+#: srec.c:260
+#, c-format
+msgid "%pB:%d: unexpected character `%s' in S-record file"
+msgstr ""
+
+#: srec.c:488
+#, c-format
+msgid "%pB:%d: byte count %d too small"
+msgstr ""
+
+#: srec.c:580 srec.c:614
+#, c-format
+msgid "%pB:%d: bad checksum in S-record file"
+msgstr ""
+
+#: stabs.c:279
+#, c-format
+msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
+msgstr ""
+
+#: syms.c:1098
+msgid "unsupported .stab relocation"
+msgstr ""
+
+#: vms-alpha.c:479
+msgid "corrupt EIHD record - size is too small"
+msgstr ""
+
+#: vms-alpha.c:665
+#, c-format
+msgid "unable to read EIHS record at offset %#x"
+msgstr ""
+
+#: vms-alpha.c:1157
+msgid "record is too small for symbol name length"
+msgstr ""
+
+#: vms-alpha.c:1190
+#, c-format
+msgid "corrupt EGSD record: its size (%#x) is too small"
+msgstr ""
+
+#: vms-alpha.c:1214
+#, c-format
+msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
+msgstr ""
+
+#: vms-alpha.c:1224
+#, c-format
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
+msgstr ""
+
+#: vms-alpha.c:1366
+#, c-format
+msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
+msgstr ""
+
+#: vms-alpha.c:1441
+#, c-format
+msgid "unknown EGSD subtype %d"
+msgstr ""
+
+#: vms-alpha.c:1474
+#, c-format
+msgid "stack overflow (%d) in _bfd_vms_push"
+msgstr ""
+
+#: vms-alpha.c:1488
+msgid "stack underflow in _bfd_vms_pop"
+msgstr ""
+
+#: vms-alpha.c:1562
+#, c-format
+msgid "dst_define_location %u too large"
+msgstr ""
+
+#. These names have not yet been added to this switch statement.
+#: vms-alpha.c:1765
+#, c-format
+msgid "unknown ETIR command %d"
+msgstr ""
+
+#: vms-alpha.c:1796
+msgid "corrupt vms value"
+msgstr ""
+
+#: vms-alpha.c:1927
+msgid "corrupt ETIR record encountered"
+msgstr ""
+
+#: vms-alpha.c:1989
+#, c-format
+msgid "bad section index in %s"
+msgstr ""
+
+#: vms-alpha.c:2003
+#, c-format
+msgid "unsupported STA cmd %s"
+msgstr ""
+
+#. Insert field.
+#. Unsigned shift.
+#. Rotate.
+#. Redefine symbol to current location.
+#. Define a literal.
+#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557
+#, c-format
+msgid "%s: not supported"
+msgstr ""
+
+#: vms-alpha.c:2217
+#, c-format
+msgid "%s: not implemented"
+msgstr ""
+
+#: vms-alpha.c:2382 vms-alpha.c:2397
+#, c-format
+msgid "invalid %s"
+msgstr ""
+
+#. Divide by zero is supposed to give a result of zero,
+#. and a non-fatal warning message.
+#: vms-alpha.c:2457
+#, c-format
+msgid "%s divide by zero"
+msgstr ""
+
+#: vms-alpha.c:2523
+#, c-format
+msgid "invalid use of %s with contexts"
+msgstr ""
+
+#: vms-alpha.c:2581
+#, c-format
+msgid "reserved cmd %d"
+msgstr ""
+
+#: vms-alpha.c:2665
+msgid "corrupt EEOM record - size is too small"
+msgstr ""
+
+#: vms-alpha.c:2674
+msgid "object module not error-free !"
+msgstr ""
+
+#: vms-alpha.c:4004
+#, c-format
+msgid "SEC_RELOC with no relocs in section %pA"
+msgstr ""
+
+#: vms-alpha.c:4056 vms-alpha.c:4271
+#, c-format
+msgid "size error in section %pA"
+msgstr ""
+
+#: vms-alpha.c:4216
+msgid "spurious ALPHA_R_BSR reloc"
+msgstr ""
+
+#: vms-alpha.c:4257
+#, c-format
+msgid "unhandled relocation %s"
+msgstr ""
+
+#: vms-alpha.c:4616
+#, c-format
+msgid "unknown source command %d"
+msgstr ""
+
+#: vms-alpha.c:4768 vms-alpha.c:4773 vms-alpha.c:4778 vms-alpha.c:4783
+#: vms-alpha.c:4788 vms-alpha.c:4811 vms-alpha.c:4816 vms-alpha.c:4821
+#: vms-alpha.c:4826
+#, c-format
+msgid "%s not implemented"
+msgstr ""
+
+#: vms-alpha.c:4862
+#, c-format
+msgid "unknown line command %d"
+msgstr ""
+
+#: vms-alpha.c:5323 vms-alpha.c:5341 vms-alpha.c:5356 vms-alpha.c:5372
+#: vms-alpha.c:5385 vms-alpha.c:5397 vms-alpha.c:5410
+#, c-format
+msgid "unknown reloc %s + %s"
+msgstr ""
+
+#: vms-alpha.c:5465
+#, c-format
+msgid "unknown reloc %s"
+msgstr ""
+
+#: vms-alpha.c:5479
+msgid "invalid section index in ETIR"
+msgstr ""
+
+#: vms-alpha.c:5488
+msgid "relocation for non-REL psect"
+msgstr ""
+
+#: vms-alpha.c:5537
+#, c-format
+msgid "unknown symbol in command %s"
+msgstr ""
+
+#: vms-alpha.c:5956
+#, c-format
+msgid "reloc (%d) is *UNKNOWN*"
+msgstr ""
+
+#: vms-alpha.c:6072
+#, c-format
+msgid "  EMH %u (len=%u): "
+msgstr ""
+
+#: vms-alpha.c:6077
+#, c-format
+msgid "   Error: The length is less than the length of an EMH record\n"
+msgstr ""
+
+#: vms-alpha.c:6094
+#, c-format
+msgid "   Error: The record length is less than the size of an EMH_MHD record\n"
+msgstr ""
+
+#: vms-alpha.c:6097
+#, c-format
+msgid "Module header\n"
+msgstr ""
+
+#: vms-alpha.c:6098
+#, c-format
+msgid "   structure level: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6099
+#, c-format
+msgid "   max record size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6105
+#, c-format
+msgid "   Error: The module name is missing\n"
+msgstr ""
+
+#: vms-alpha.c:6111
+#, c-format
+msgid "   Error: The module name is too long\n"
+msgstr ""
+
+#: vms-alpha.c:6114
+#, c-format
+msgid "   module name    : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6118
+#, c-format
+msgid "   Error: The module version is missing\n"
+msgstr ""
+
+#: vms-alpha.c:6124
+#, c-format
+msgid "   Error: The module version is too long\n"
+msgstr ""
+
+#: vms-alpha.c:6127
+#, c-format
+msgid "   module version : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6130
+#, c-format
+msgid "   Error: The compile date is truncated\n"
+msgstr ""
+
+#: vms-alpha.c:6132
+#, c-format
+msgid "   compile date   : %.17s\n"
+msgstr ""
+
+#: vms-alpha.c:6137
+#, c-format
+msgid "Language Processor Name\n"
+msgstr ""
+
+#: vms-alpha.c:6138
+#, c-format
+msgid "   language name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6142
+#, c-format
+msgid "Source Files Header\n"
+msgstr ""
+
+#: vms-alpha.c:6143
+#, c-format
+msgid "   file: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6147
+#, c-format
+msgid "Title Text Header\n"
+msgstr ""
+
+#: vms-alpha.c:6148
+#, c-format
+msgid "   title: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6152
+#, c-format
+msgid "Copyright Header\n"
+msgstr ""
+
+#: vms-alpha.c:6153
+#, c-format
+msgid "   copyright: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6157
+#, c-format
+msgid "unhandled emh subtype %u\n"
+msgstr ""
+
+#: vms-alpha.c:6167
+#, c-format
+msgid "  EEOM (len=%u):\n"
+msgstr ""
+
+#: vms-alpha.c:6172
+#, c-format
+msgid "   Error: The length is less than the length of an EEOM record\n"
+msgstr ""
+
+#: vms-alpha.c:6176
+#, c-format
+msgid "   number of cond linkage pairs: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6178
+#, c-format
+msgid "   completion code: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6182
+#, c-format
+msgid "   transfer addr flags: 0x%02x\n"
+msgstr ""
+
+#: vms-alpha.c:6183
+#, c-format
+msgid "   transfer addr psect: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6185
+#, c-format
+msgid "   transfer address   : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6194
+msgid " WEAK"
+msgstr ""
+
+#: vms-alpha.c:6196
+msgid " DEF"
+msgstr ""
+
+#: vms-alpha.c:6198
+msgid " UNI"
+msgstr ""
+
+#: vms-alpha.c:6200 vms-alpha.c:6221
+msgid " REL"
+msgstr ""
+
+#: vms-alpha.c:6202
+msgid " COMM"
+msgstr ""
+
+#: vms-alpha.c:6204
+msgid " VECEP"
+msgstr ""
+
+#: vms-alpha.c:6206
+msgid " NORM"
+msgstr ""
+
+#: vms-alpha.c:6208
+msgid " QVAL"
+msgstr ""
+
+#: vms-alpha.c:6215
+msgid " PIC"
+msgstr ""
+
+#: vms-alpha.c:6217
+msgid " LIB"
+msgstr ""
+
+#: vms-alpha.c:6219
+msgid " OVR"
+msgstr ""
+
+#: vms-alpha.c:6223
+msgid " GBL"
+msgstr ""
+
+#: vms-alpha.c:6225
+msgid " SHR"
+msgstr ""
+
+#: vms-alpha.c:6227
+msgid " EXE"
+msgstr ""
+
+#: vms-alpha.c:6229
+msgid " RD"
+msgstr ""
+
+#: vms-alpha.c:6231
+msgid " WRT"
+msgstr ""
+
+#: vms-alpha.c:6233
+msgid " VEC"
+msgstr ""
+
+#: vms-alpha.c:6235
+msgid " NOMOD"
+msgstr ""
+
+#: vms-alpha.c:6237
+msgid " COM"
+msgstr ""
+
+#: vms-alpha.c:6239
+msgid " 64B"
+msgstr ""
+
+#: vms-alpha.c:6248
+#, c-format
+msgid "  EGSD (len=%u):\n"
+msgstr ""
+
+#: vms-alpha.c:6263
+#, c-format
+msgid "  EGSD entry %2u (type: %u, len: %u): "
+msgstr ""
+
+#: vms-alpha.c:6269 vms-alpha.c:6564
+#, c-format
+msgid "   Erroneous length\n"
+msgstr ""
+
+#: vms-alpha.c:6282
+#, c-format
+msgid "PSC - Program section definition\n"
+msgstr ""
+
+#: vms-alpha.c:6283 vms-alpha.c:6303
+#, c-format
+msgid "   alignment  : 2**%u\n"
+msgstr ""
+
+#: vms-alpha.c:6284 vms-alpha.c:6304
+#, c-format
+msgid "   flags      : 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:6288
+#, c-format
+msgid "   alloc (len): %u (0x%08x)\n"
+msgstr ""
+
+#: vms-alpha.c:6290 vms-alpha.c:6356 vms-alpha.c:6424
+#, c-format
+msgid "   name       : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6302
+#, c-format
+msgid "SPSC - Shared Image Program section def\n"
+msgstr ""
+
+#: vms-alpha.c:6308
+#, c-format
+msgid "   alloc (len)   : %u (0x%08x)\n"
+msgstr ""
+
+#: vms-alpha.c:6309
+#, c-format
+msgid "   image offset  : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6311
+#, c-format
+msgid "   symvec offset : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6314
+#, c-format
+msgid "   name          : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6330
+#, c-format
+msgid "SYM - Global symbol definition\n"
+msgstr ""
+
+#: vms-alpha.c:6331 vms-alpha.c:6412 vms-alpha.c:6436 vms-alpha.c:6459
+#, c-format
+msgid "   flags: 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:6334
+#, c-format
+msgid "   psect offset: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6338
+#, c-format
+msgid "   code address: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6340
+#, c-format
+msgid "   psect index for entry point : %u\n"
+msgstr ""
+
+#: vms-alpha.c:6343 vms-alpha.c:6443 vms-alpha.c:6466
+#, c-format
+msgid "   psect index : %u\n"
+msgstr ""
+
+#: vms-alpha.c:6346 vms-alpha.c:6446 vms-alpha.c:6469
+#, c-format
+msgid "   name        : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6354
+#, c-format
+msgid "SYM - Global symbol reference\n"
+msgstr ""
+
+#: vms-alpha.c:6369
+#, c-format
+msgid "IDC - Ident Consistency check\n"
+msgstr ""
+
+#: vms-alpha.c:6370
+#, c-format
+msgid "   flags         : 0x%08x"
+msgstr ""
+
+#: vms-alpha.c:6374
+#, c-format
+msgid "   id match      : %x\n"
+msgstr ""
+
+#: vms-alpha.c:6376
+#, c-format
+msgid "   error severity: %x\n"
+msgstr ""
+
+#: vms-alpha.c:6380
+#, c-format
+msgid "   entity name   : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6386
+#, c-format
+msgid "   object name   : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6395
+#, c-format
+msgid "   binary ident  : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6399
+#, c-format
+msgid "   ascii ident   : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6411
+#, c-format
+msgid "SYMG - Universal symbol definition\n"
+msgstr ""
+
+#: vms-alpha.c:6415
+#, c-format
+msgid "   symbol vector offset: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6417
+#, c-format
+msgid "   entry point: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6419
+#, c-format
+msgid "   proc descr : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6421
+#, c-format
+msgid "   psect index: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6435
+#, c-format
+msgid "SYMV - Vectored symbol definition\n"
+msgstr ""
+
+#: vms-alpha.c:6439
+#, c-format
+msgid "   vector      : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6441 vms-alpha.c:6464
+#, c-format
+msgid "   psect offset: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6458
+#, c-format
+msgid "SYMM - Global symbol definition with version\n"
+msgstr ""
+
+#: vms-alpha.c:6462
+#, c-format
+msgid "   version mask: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6475
+#, c-format
+msgid "unhandled egsd entry type %u\n"
+msgstr ""
+
+#: vms-alpha.c:6514
+#, c-format
+msgid "    linkage index: %u, replacement insn: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6518
+#, c-format
+msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6523
+#, c-format
+msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6529
+#, c-format
+msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6534
+#, c-format
+msgid "    global name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6546
+#, c-format
+msgid "  %s (len=%u):\n"
+msgstr ""
+
+#: vms-alpha.c:6569
+#, c-format
+msgid "   (type: %3u, size: %3u): "
+msgstr ""
+
+#: vms-alpha.c:6575
+#, c-format
+msgid "STA_GBL (stack global) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6579
+#, c-format
+msgid "STA_LW (stack longword)"
+msgstr ""
+
+#: vms-alpha.c:6585
+#, c-format
+msgid "STA_QW (stack quadword)"
+msgstr ""
+
+#: vms-alpha.c:6592
+#, c-format
+msgid "STA_PQ (stack psect base + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6595
+#, c-format
+msgid "    psect: %u, offset: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6601
+#, c-format
+msgid "STA_LI (stack literal)\n"
+msgstr ""
+
+#: vms-alpha.c:6604
+#, c-format
+msgid "STA_MOD (stack module)\n"
+msgstr ""
+
+#: vms-alpha.c:6607
+#, c-format
+msgid "STA_CKARG (compare procedure argument)\n"
+msgstr ""
+
+#: vms-alpha.c:6611
+#, c-format
+msgid "STO_B (store byte)\n"
+msgstr ""
+
+#: vms-alpha.c:6614
+#, c-format
+msgid "STO_W (store word)\n"
+msgstr ""
+
+#: vms-alpha.c:6617
+#, c-format
+msgid "STO_LW (store longword)\n"
+msgstr ""
+
+#: vms-alpha.c:6620
+#, c-format
+msgid "STO_QW (store quadword)\n"
+msgstr ""
+
+#: vms-alpha.c:6627
+#, c-format
+msgid "STO_IMMR (store immediate repeat) %u bytes\n"
+msgstr ""
+
+#: vms-alpha.c:6636
+#, c-format
+msgid "STO_GBL (store global) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6641
+#, c-format
+msgid "STO_CA (store code address) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6645
+#, c-format
+msgid "STO_RB (store relative branch)\n"
+msgstr ""
+
+#: vms-alpha.c:6648
+#, c-format
+msgid "STO_AB (store absolute branch)\n"
+msgstr ""
+
+#: vms-alpha.c:6651
+#, c-format
+msgid "STO_OFF (store offset to psect)\n"
+msgstr ""
+
+#: vms-alpha.c:6658
+#, c-format
+msgid "STO_IMM (store immediate) %u bytes\n"
+msgstr ""
+
+#: vms-alpha.c:6667
+#, c-format
+msgid "STO_GBL_LW (store global longword) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6671
+#, c-format
+msgid "STO_OFF (store LP with procedure signature)\n"
+msgstr ""
+
+#: vms-alpha.c:6674
+#, c-format
+msgid "STO_BR_GBL (store branch global) *todo*\n"
+msgstr ""
+
+#: vms-alpha.c:6677
+#, c-format
+msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
+msgstr ""
+
+#: vms-alpha.c:6681
+#, c-format
+msgid "OPR_NOP (no-operation)\n"
+msgstr ""
+
+#: vms-alpha.c:6684
+#, c-format
+msgid "OPR_ADD (add)\n"
+msgstr ""
+
+#: vms-alpha.c:6687
+#, c-format
+msgid "OPR_SUB (subtract)\n"
+msgstr ""
+
+#: vms-alpha.c:6690
+#, c-format
+msgid "OPR_MUL (multiply)\n"
+msgstr ""
+
+#: vms-alpha.c:6693
+#, c-format
+msgid "OPR_DIV (divide)\n"
+msgstr ""
+
+#: vms-alpha.c:6696
+#, c-format
+msgid "OPR_AND (logical and)\n"
+msgstr ""
+
+#: vms-alpha.c:6699
+#, c-format
+msgid "OPR_IOR (logical inclusive or)\n"
+msgstr ""
+
+#: vms-alpha.c:6702
+#, c-format
+msgid "OPR_EOR (logical exclusive or)\n"
+msgstr ""
+
+#: vms-alpha.c:6705
+#, c-format
+msgid "OPR_NEG (negate)\n"
+msgstr ""
+
+#: vms-alpha.c:6708
+#, c-format
+msgid "OPR_COM (complement)\n"
+msgstr ""
+
+#: vms-alpha.c:6711
+#, c-format
+msgid "OPR_INSV (insert field)\n"
+msgstr ""
+
+#: vms-alpha.c:6714
+#, c-format
+msgid "OPR_ASH (arithmetic shift)\n"
+msgstr ""
+
+#: vms-alpha.c:6717
+#, c-format
+msgid "OPR_USH (unsigned shift)\n"
+msgstr ""
+
+#: vms-alpha.c:6720
+#, c-format
+msgid "OPR_ROT (rotate)\n"
+msgstr ""
+
+#: vms-alpha.c:6723
+#, c-format
+msgid "OPR_SEL (select)\n"
+msgstr ""
+
+#: vms-alpha.c:6726
+#, c-format
+msgid "OPR_REDEF (redefine symbol to curr location)\n"
+msgstr ""
+
+#: vms-alpha.c:6729
+#, c-format
+msgid "OPR_REDEF (define a literal)\n"
+msgstr ""
+
+#: vms-alpha.c:6733
+#, c-format
+msgid "STC_LP (store cond linkage pair)\n"
+msgstr ""
+
+#: vms-alpha.c:6737
+#, c-format
+msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
+msgstr ""
+
+#: vms-alpha.c:6741
+#, c-format
+msgid "   linkage index: %u, procedure: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6748
+#, c-format
+msgid "   signature: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6754
+#, c-format
+msgid "STC_GBL (store cond global)\n"
+msgstr ""
+
+#: vms-alpha.c:6757
+#, c-format
+msgid "   linkage index: %u, global: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6762
+#, c-format
+msgid "STC_GCA (store cond code address)\n"
+msgstr ""
+
+#: vms-alpha.c:6765
+#, c-format
+msgid "   linkage index: %u, procedure name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6770
+#, c-format
+msgid "STC_PS (store cond psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6774
+#, c-format
+msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6781
+#, c-format
+msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6785
+#, c-format
+msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6789
+#, c-format
+msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6793
+#, c-format
+msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6797
+#, c-format
+msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6801
+#, c-format
+msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6805
+#, c-format
+msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6809
+#, c-format
+msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6814
+#, c-format
+msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6818
+#, c-format
+msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6822
+#, c-format
+msgid "CTL_SETRB (set relocation base)\n"
+msgstr ""
+
+#: vms-alpha.c:6828
+#, c-format
+msgid "CTL_AUGRB (augment relocation base) %u\n"
+msgstr ""
+
+#: vms-alpha.c:6833
+#, c-format
+msgid "CTL_DFLOC (define location)\n"
+msgstr ""
+
+#: vms-alpha.c:6836
+#, c-format
+msgid "CTL_STLOC (set location)\n"
+msgstr ""
+
+#: vms-alpha.c:6839
+#, c-format
+msgid "CTL_STKDL (stack defined location)\n"
+msgstr ""
+
+#: vms-alpha.c:6842 vms-alpha.c:7285 vms-alpha.c:7446
+#, c-format
+msgid "*unhandled*\n"
+msgstr ""
+
+#: vms-alpha.c:6872 vms-alpha.c:6911
+#, c-format
+msgid "cannot read GST record length\n"
+msgstr ""
+
+#. Ill-formed.
+#: vms-alpha.c:6893
+#, c-format
+msgid "cannot find EMH in first GST record\n"
+msgstr ""
+
+#: vms-alpha.c:6919
+#, c-format
+msgid "cannot read GST record header\n"
+msgstr ""
+
+#: vms-alpha.c:6932
+#, c-format
+msgid " corrupted GST\n"
+msgstr ""
+
+#: vms-alpha.c:6940
+#, c-format
+msgid "cannot read GST record\n"
+msgstr ""
+
+#: vms-alpha.c:6969
+#, c-format
+msgid " unhandled EOBJ record type %u\n"
+msgstr ""
+
+#: vms-alpha.c:6994
+#, c-format
+msgid "  bitcount: %u, base addr: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7008
+#, c-format
+msgid "   bitmap: 0x%08x (count: %u):\n"
+msgstr ""
+
+#: vms-alpha.c:7015
+#, c-format
+msgid " %08x"
+msgstr ""
+
+#: vms-alpha.c:7042
+#, c-format
+msgid "  image %u (%u entries)\n"
+msgstr ""
+
+#: vms-alpha.c:7048
+#, c-format
+msgid "   offset: 0x%08x, val: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7071
+#, c-format
+msgid "  image %u (%u entries), offsets:\n"
+msgstr ""
+
+#: vms-alpha.c:7078
+#, c-format
+msgid " 0x%08x"
+msgstr ""
+
+#. 64 bits.
+#: vms-alpha.c:7204
+#, c-format
+msgid "64 bits *unhandled*\n"
+msgstr ""
+
+#: vms-alpha.c:7209
+#, c-format
+msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7220
+#, c-format
+msgid "non-contiguous array of %s\n"
+msgstr ""
+
+#: vms-alpha.c:7227
+#, c-format
+msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7232
+#, c-format
+msgid "arsize: %u, a0: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7236
+#, c-format
+msgid "Strides:\n"
+msgstr ""
+
+#: vms-alpha.c:7250
+#, c-format
+msgid "Bounds:\n"
+msgstr ""
+
+#: vms-alpha.c:7257
+#, c-format
+msgid "[%u]: Lower: %u, upper: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7271
+#, c-format
+msgid "unaligned bit-string of %s\n"
+msgstr ""
+
+#: vms-alpha.c:7278
+#, c-format
+msgid "base: %u, pos: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7304
+#, c-format
+msgid "vflags: 0x%02x, value: 0x%08x "
+msgstr ""
+
+#: vms-alpha.c:7311
+#, c-format
+msgid "(no value)\n"
+msgstr ""
+
+#: vms-alpha.c:7314
+#, c-format
+msgid "(not active)\n"
+msgstr ""
+
+#: vms-alpha.c:7317
+#, c-format
+msgid "(not allocated)\n"
+msgstr ""
+
+#: vms-alpha.c:7320
+#, c-format
+msgid "(descriptor)\n"
+msgstr ""
+
+#: vms-alpha.c:7325
+#, c-format
+msgid "(trailing value)\n"
+msgstr ""
+
+#: vms-alpha.c:7328
+#, c-format
+msgid "(value spec follows)\n"
+msgstr ""
+
+#: vms-alpha.c:7331
+#, c-format
+msgid "(at bit offset %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7335
+#, c-format
+msgid "(reg: %u, disp: %u, indir: %u, kind: "
+msgstr ""
+
+#: vms-alpha.c:7342
+msgid "literal"
+msgstr ""
+
+#: vms-alpha.c:7345
+msgid "address"
+msgstr ""
+
+#: vms-alpha.c:7348
+msgid "desc"
+msgstr ""
+
+#: vms-alpha.c:7351
+msgid "reg"
+msgstr ""
+
+#: vms-alpha.c:7372
+#, c-format
+msgid "len: %2u, kind: %2u "
+msgstr ""
+
+#: vms-alpha.c:7380
+#, c-format
+msgid "atomic, type=0x%02x %s\n"
+msgstr ""
+
+#: vms-alpha.c:7385
+#, c-format
+msgid "indirect, defined at 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7389
+#, c-format
+msgid "typed pointer\n"
+msgstr ""
+
+#: vms-alpha.c:7393
+#, c-format
+msgid "pointer\n"
+msgstr ""
+
+#: vms-alpha.c:7404
+#, c-format
+msgid "array, dim: %u, bitmap: "
+msgstr ""
+
+#: vms-alpha.c:7419
+#, c-format
+msgid "array descriptor:\n"
+msgstr ""
+
+#: vms-alpha.c:7430
+#, c-format
+msgid "type spec for element:\n"
+msgstr ""
+
+#: vms-alpha.c:7432
+#, c-format
+msgid "type spec for subscript %u:\n"
+msgstr ""
+
+#: vms-alpha.c:7457
+#, c-format
+msgid "Debug symbol table:\n"
+msgstr ""
+
+#: vms-alpha.c:7468
+#, c-format
+msgid "cannot read DST header\n"
+msgstr ""
+
+#: vms-alpha.c:7474
+#, c-format
+msgid " type: %3u, len: %3u (at 0x%08x): "
+msgstr ""
+
+#: vms-alpha.c:7491
+#, c-format
+msgid "cannot read DST symbol\n"
+msgstr ""
+
+#: vms-alpha.c:7535
+#, c-format
+msgid "standard data: %s\n"
+msgstr ""
+
+#: vms-alpha.c:7539 vms-alpha.c:7663
+#, c-format
+msgid "    name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7547
+#, c-format
+msgid "modbeg\n"
+msgstr ""
+
+#: vms-alpha.c:7551
+#, c-format
+msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7561 vms-alpha.c:7927
+#, c-format
+msgid "   module name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7568
+#, c-format
+msgid "   compiler   : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7575
+#, c-format
+msgid "modend\n"
+msgstr ""
+
+#: vms-alpha.c:7582
+msgid "rtnbeg\n"
+msgstr ""
+
+#: vms-alpha.c:7586
+#, c-format
+msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7595
+#, c-format
+msgid "    routine name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7606
+#, c-format
+msgid "rtnend: size 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7616
+#, c-format
+msgid "prolog: bkpt address 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7626
+#, c-format
+msgid "epilog: flags: %u, count: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7641
+#, c-format
+msgid "blkbeg: address: 0x%08x, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7653
+#, c-format
+msgid "blkend: size: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7659
+#, c-format
+msgid "typspec (len: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7675
+#, c-format
+msgid "septyp, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7691
+#, c-format
+msgid "recbeg: name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7695
+#, c-format
+msgid "    len: %u bits\n"
+msgstr ""
+
+#: vms-alpha.c:7701
+#, c-format
+msgid "recend\n"
+msgstr ""
+
+#: vms-alpha.c:7706
+#, c-format
+msgid "enumbeg, len: %u, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7712
+#, c-format
+msgid "enumelt, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7718
+#, c-format
+msgid "enumend\n"
+msgstr ""
+
+#: vms-alpha.c:7725
+#, c-format
+msgid "label, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7728
+#, c-format
+msgid "    address: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7740
+#, c-format
+msgid "discontiguous range (nbr: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7747
+#, c-format
+msgid "    address: 0x%08x, size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7758
+#, c-format
+msgid "line num  (len: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7777
+#, c-format
+msgid "delta_pc_w %u\n"
+msgstr ""
+
+#: vms-alpha.c:7786
+#, c-format
+msgid "incr_linum(b): +%u\n"
+msgstr ""
+
+#: vms-alpha.c:7794
+#, c-format
+msgid "incr_linum_w: +%u\n"
+msgstr ""
+
+#: vms-alpha.c:7802
+#, c-format
+msgid "incr_linum_l: +%u\n"
+msgstr ""
+
+#: vms-alpha.c:7810
+#, c-format
+msgid "set_line_num(w) %u\n"
+msgstr ""
+
+#: vms-alpha.c:7817
+#, c-format
+msgid "set_line_num_b %u\n"
+msgstr ""
+
+#: vms-alpha.c:7824
+#, c-format
+msgid "set_line_num_l %u\n"
+msgstr ""
+
+#: vms-alpha.c:7831
+#, c-format
+msgid "set_abs_pc: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7837
+#, c-format
+msgid "delta_pc_l: +0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7844
+#, c-format
+msgid "term(b): 0x%02x"
+msgstr ""
+
+#: vms-alpha.c:7846
+#, c-format
+msgid "        pc: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7853
+#, c-format
+msgid "term_w: 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:7855
+#, c-format
+msgid "    pc: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7861
+#, c-format
+msgid "delta pc +%-4d"
+msgstr ""
+
+#: vms-alpha.c:7865
+#, c-format
+msgid "    pc: 0x%08x line: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7870
+#, c-format
+msgid "    *unhandled* cmd %u\n"
+msgstr ""
+
+#: vms-alpha.c:7885
+#, c-format
+msgid "source (len: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7904
+#, c-format
+msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7909
+#, c-format
+msgid "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7921
+#, c-format
+msgid "   filename   : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7937
+#, c-format
+msgid "   setfile %u\n"
+msgstr ""
+
+#: vms-alpha.c:7944 vms-alpha.c:7951
+#, c-format
+msgid "   setrec %u\n"
+msgstr ""
+
+#: vms-alpha.c:7958 vms-alpha.c:7965
+#, c-format
+msgid "   setlnum %u\n"
+msgstr ""
+
+#: vms-alpha.c:7972 vms-alpha.c:7979
+#, c-format
+msgid "   deflines %u\n"
+msgstr ""
+
+#: vms-alpha.c:7983
+#, c-format
+msgid "   formfeed\n"
+msgstr ""
+
+#: vms-alpha.c:7987
+#, c-format
+msgid "   *unhandled* cmd %u\n"
+msgstr ""
+
+#: vms-alpha.c:7999
+#, c-format
+msgid "*unhandled* dst type %u\n"
+msgstr ""
+
+#: vms-alpha.c:8031
+#, c-format
+msgid "cannot read EIHD\n"
+msgstr ""
+
+#: vms-alpha.c:8035
+#, c-format
+msgid "EIHD: (size: %u, nbr blocks: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:8039
+#, c-format
+msgid " majorid: %u, minorid: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8047
+msgid "executable"
+msgstr ""
+
+#: vms-alpha.c:8050
+msgid "linkable image"
+msgstr ""
+
+#: vms-alpha.c:8057
+#, c-format
+msgid " image type: %u (%s)"
+msgstr ""
+
+#: vms-alpha.c:8063
+msgid "native"
+msgstr ""
+
+#: vms-alpha.c:8066
+msgid "CLI"
+msgstr ""
+
+#: vms-alpha.c:8073
+#, c-format
+msgid ", subtype: %u (%s)\n"
+msgstr ""
+
+#: vms-alpha.c:8080
+#, c-format
+msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8084
+#, c-format
+msgid " fixup info rva: "
+msgstr ""
+
+#: vms-alpha.c:8086
+#, c-format
+msgid ", symbol vector rva: "
+msgstr ""
+
+#: vms-alpha.c:8089
+#, c-format
+msgid ""
+"\n"
+" version array off: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8094
+#, c-format
+msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8100
+#, c-format
+msgid " linker flags: %08x:"
+msgstr ""
+
+#: vms-alpha.c:8131
+#, c-format
+msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8137
+#, c-format
+msgid " BPAGE: %u"
+msgstr ""
+
+#: vms-alpha.c:8144
+#, c-format
+msgid ", ext fixup offset: %u, no_opt psect off: %u"
+msgstr ""
+
+#: vms-alpha.c:8147
+#, c-format
+msgid ", alias: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8155
+#, c-format
+msgid "system version array information:\n"
+msgstr ""
+
+#: vms-alpha.c:8159
+#, c-format
+msgid "cannot read EIHVN header\n"
+msgstr ""
+
+#: vms-alpha.c:8169
+#, c-format
+msgid "cannot read EIHVN version\n"
+msgstr ""
+
+#: vms-alpha.c:8172
+#, c-format
+msgid "   %02u "
+msgstr ""
+
+#: vms-alpha.c:8176
+msgid "BASE_IMAGE       "
+msgstr ""
+
+#: vms-alpha.c:8179
+msgid "MEMORY_MANAGEMENT"
+msgstr ""
+
+#: vms-alpha.c:8182
+msgid "IO               "
+msgstr ""
+
+#: vms-alpha.c:8185
+msgid "FILES_VOLUMES    "
+msgstr ""
+
+#: vms-alpha.c:8188
+msgid "PROCESS_SCHED    "
+msgstr ""
+
+#: vms-alpha.c:8191
+msgid "SYSGEN           "
+msgstr ""
+
+#: vms-alpha.c:8194
+msgid "CLUSTERS_LOCKMGR "
+msgstr ""
+
+#: vms-alpha.c:8197
+msgid "LOGICAL_NAMES    "
+msgstr ""
+
+#: vms-alpha.c:8200
+msgid "SECURITY         "
+msgstr ""
+
+#: vms-alpha.c:8203
+msgid "IMAGE_ACTIVATOR  "
+msgstr ""
+
+#: vms-alpha.c:8206
+msgid "NETWORKS         "
+msgstr ""
+
+#: vms-alpha.c:8209
+msgid "COUNTERS         "
+msgstr ""
+
+#: vms-alpha.c:8212
+msgid "STABLE           "
+msgstr ""
+
+#: vms-alpha.c:8215
+msgid "MISC             "
+msgstr ""
+
+#: vms-alpha.c:8218
+msgid "CPU              "
+msgstr ""
+
+#: vms-alpha.c:8221
+msgid "VOLATILE         "
+msgstr ""
+
+#: vms-alpha.c:8224
+msgid "SHELL            "
+msgstr ""
+
+#: vms-alpha.c:8227
+msgid "POSIX            "
+msgstr ""
+
+#: vms-alpha.c:8230
+msgid "MULTI_PROCESSING "
+msgstr ""
+
+#: vms-alpha.c:8233
+msgid "GALAXY           "
+msgstr ""
+
+#: vms-alpha.c:8236
+msgid "*unknown*        "
+msgstr ""
+
+#: vms-alpha.c:8252 vms-alpha.c:8526
+#, c-format
+msgid "cannot read EIHA\n"
+msgstr ""
+
+#: vms-alpha.c:8255
+#, c-format
+msgid "Image activation:  (size=%u)\n"
+msgstr ""
+
+#: vms-alpha.c:8258
+#, c-format
+msgid " First address : 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8262
+#, c-format
+msgid " Second address: 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8266
+#, c-format
+msgid " Third address : 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8270
+#, c-format
+msgid " Fourth address: 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8274
+#, c-format
+msgid " Shared image  : 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8285
+#, c-format
+msgid "cannot read EIHI\n"
+msgstr ""
+
+#: vms-alpha.c:8289
+#, c-format
+msgid "Image identification: (major: %u, minor: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:8292
+#, c-format
+msgid " image name       : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8294
+#, c-format
+msgid " link time        : %s\n"
+msgstr ""
+
+#: vms-alpha.c:8296
+#, c-format
+msgid " image ident      : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8298
+#, c-format
+msgid " linker ident     : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8300
+#, c-format
+msgid " image build ident: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8310
+#, c-format
+msgid "cannot read EIHS\n"
+msgstr ""
+
+#: vms-alpha.c:8314
+#, c-format
+msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:8320
+#, c-format
+msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
+msgstr ""
+
+#: vms-alpha.c:8325
+#, c-format
+msgid " global symbol table: vbn: %u, records: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8330
+#, c-format
+msgid " debug module table : vbn: %u, size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8343
+#, c-format
+msgid "cannot read EISD\n"
+msgstr ""
+
+#: vms-alpha.c:8354
+#, c-format
+msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:8362
+#, c-format
+msgid " section: base: 0x%08x%08x size: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8367
+#, c-format
+msgid " flags: 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:8405
+#, c-format
+msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
+msgstr ""
+
+#: vms-alpha.c:8411
+msgid "NORMAL"
+msgstr ""
+
+#: vms-alpha.c:8414
+msgid "SHRFXD"
+msgstr ""
+
+#: vms-alpha.c:8417
+msgid "PRVFXD"
+msgstr ""
+
+#: vms-alpha.c:8420
+msgid "SHRPIC"
+msgstr ""
+
+#: vms-alpha.c:8423
+msgid "PRVPIC"
+msgstr ""
+
+#: vms-alpha.c:8426
+msgid "USRSTACK"
+msgstr ""
+
+#: vms-alpha.c:8432
+msgid ")\n"
+msgstr ""
+
+#: vms-alpha.c:8435
+#, c-format
+msgid " ident: 0x%08x, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8445
+#, c-format
+msgid "cannot read DMT\n"
+msgstr ""
+
+#: vms-alpha.c:8449
+#, c-format
+msgid "Debug module table:\n"
+msgstr ""
+
+#: vms-alpha.c:8458
+#, c-format
+msgid "cannot read DMT header\n"
+msgstr ""
+
+#: vms-alpha.c:8464
+#, c-format
+msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
+msgstr ""
+
+#: vms-alpha.c:8474
+#, c-format
+msgid "cannot read DMT psect\n"
+msgstr ""
+
+#: vms-alpha.c:8478
+#, c-format
+msgid "  psect start: 0x%08x, length: %u\n"
+msgstr ""
+
+#: vms-alpha.c:8491
+#, c-format
+msgid "cannot read DST\n"
+msgstr ""
+
+#: vms-alpha.c:8501
+#, c-format
+msgid "cannot read GST\n"
+msgstr ""
+
+#: vms-alpha.c:8505
+#, c-format
+msgid "Global symbol table:\n"
+msgstr ""
+
+#: vms-alpha.c:8532
+#, c-format
+msgid "Image activator fixup: (major: %u, minor: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:8536
+#, c-format
+msgid "  iaflink : 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:8540
+#, c-format
+msgid "  fixuplnk: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:8543
+#, c-format
+msgid "  size : %u\n"
+msgstr ""
+
+#: vms-alpha.c:8545
+#, c-format
+msgid "  flags: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8550
+#, c-format
+msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8555
+#, c-format
+msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8560
+#, c-format
+msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8563
+#, c-format
+msgid "  chgprtoff : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8567
+#, c-format
+msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8570
+#, c-format
+msgid "  shlextra  : %5u, permctx   : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8573
+#, c-format
+msgid "  base_va : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:8575
+#, c-format
+msgid "  lppsbfixoff: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:8582
+#, c-format
+msgid " Shareable images:\n"
+msgstr ""
+
+#: vms-alpha.c:8590
+#, c-format
+msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:8597
+#, c-format
+msgid " quad-word relocation fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8603
+#, c-format
+msgid " long-word relocation fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8609
+#, c-format
+msgid " quad-word .address reference fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8614
+#, c-format
+msgid " long-word .address reference fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8619
+#, c-format
+msgid " Code Address Reference Fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8624
+#, c-format
+msgid " Linkage Pairs Reference Fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:8632
+#, c-format
+msgid " Change Protection (%u entries):\n"
+msgstr ""
+
+#: vms-alpha.c:8641
+#, c-format
+msgid "  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
+msgstr ""
+
+#. FIXME: we do not yet support relocatable link.  It is not obvious
+#. how to do it for debug infos.
+#: vms-alpha.c:9518
+msgid "%P: relocatable link is not supported\n"
+msgstr ""
+
+#: vms-alpha.c:9589
+#, c-format
+msgid "%P: multiple entry points: in modules %pB and %pB\n"
+msgstr ""
+
+#: vms-lib.c:1527
+#, c-format
+msgid "could not open shared image '%s' from '%s'"
+msgstr ""
+
+#: vms-misc.c:370
+msgid "_bfd_vms_output_counted called with zero bytes"
+msgstr ""
+
+#: vms-misc.c:375
+msgid "_bfd_vms_output_counted called with too many bytes"
+msgstr ""
+
+#: xcofflink.c:891
+#, c-format
+msgid "%pB: XCOFF shared object when not producing XCOFF output"
+msgstr ""
+
+#: xcofflink.c:912
+#, c-format
+msgid "%pB: dynamic object with no .loader section"
+msgstr ""
+
+#: xcofflink.c:1497
+#, c-format
+msgid "%pB: `%s' has line numbers but no enclosing section"
+msgstr ""
+
+#: xcofflink.c:1553
+#, c-format
+msgid "%pB: class %d symbol `%s' has no aux entries"
+msgstr ""
+
+#: xcofflink.c:1576
+#, c-format
+msgid "%pB: symbol `%s' has unrecognized csect type %d"
+msgstr ""
+
+#: xcofflink.c:1589
+#, c-format
+msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
+msgstr ""
+
+#: xcofflink.c:1620
+#, c-format
+msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
+msgstr ""
+
+#: xcofflink.c:1755
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr ""
+
+#: xcofflink.c:1789
+#, c-format
+msgid "%pB: csect `%s' not in enclosing section"
+msgstr ""
+
+#: xcofflink.c:1899
+#, c-format
+msgid "%pB: misplaced XTY_LD `%s'"
+msgstr ""
+
+#: xcofflink.c:2242
+#, c-format
+msgid "%pB: reloc %s:%<PRId64> not in csect"
+msgstr ""
+
+#: xcofflink.c:3356
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr ""
+
+#: xcofflink.c:3404
+#, c-format
+msgid "%s: no such symbol"
+msgstr ""
+
+#: xcofflink.c:3513
+#, c-format
+msgid "warning: attempt to export undefined symbol `%s'"
+msgstr ""
+
+#: xcofflink.c:3861
+msgid "error: undefined symbol __rtinit"
+msgstr ""
+
+#: xcofflink.c:4872
+#, c-format
+msgid "%pB: Unable to find a stub csect in rangeof relocation at %#<PRIx64> targeting'%s'"
+msgstr ""
+
+#: xcofflink.c:4901
+#, c-format
+msgid "%pB: Cannot create stub entry '%s'"
+msgstr ""
+
+#: xcofflink.c:5021
+msgid "TOC overflow during stub generation; try -mminimal-toc when compiling"
+msgstr ""
+
+#: xcofflink.c:5089
+#, c-format
+msgid "%pB: loader reloc in unrecognized section `%s'"
+msgstr ""
+
+#: xcofflink.c:5101
+#, c-format
+msgid "%pB: `%s' in loader reloc but not loader sym"
+msgstr ""
+
+#: xcofflink.c:5118
+#, c-format
+msgid "%pB: loader reloc in read-only section %pA"
+msgstr ""
+
+#: xcofflink.c:6191
+#, c-format
+msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
+msgstr ""
+
+#: xcofflink.c:7305
+#, c-format
+msgid "Unable to link input file: %s"
+msgstr ""
+
+#: xtensa-dynconfig.c:60
+msgid "Unable to load DLL."
+msgstr ""
+
+#: xtensa-dynconfig.c:86
+#, c-format
+msgid "%s is defined but could not be loaded: %s"
+msgstr ""
+
+#: xtensa-dynconfig.c:102
+#, c-format
+msgid "%s is loaded but symbol \"%s\" is not found: %s"
+msgstr ""
+
+#: xtensa-dynconfig.c:115
+#, c-format
+msgid "%s is defined but plugin support is disabled"
+msgstr ""
+
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2880 elfnn-riscv.c:5319
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr ""
+
+#: elfnn-aarch64.c:5258
+#, c-format
+msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
+msgstr ""
+
+#: elfnn-aarch64.c:5350
+#, c-format
+msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
+msgstr ""
+
+#: elfnn-aarch64.c:5363
+#, c-format
+msgid "%pB: error: erratum 843419 immediate 0x%<PRIx64> out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr ""
+
+#: elfnn-aarch64.c:5898
+#, c-format
+msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
+msgstr ""
+
+#: elfnn-aarch64.c:5918
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr ""
+
+#: elfnn-aarch64.c:6006
+#, c-format
+msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
+msgstr ""
+
+#: elfnn-aarch64.c:6119 elfnn-aarch64.c:6156
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr ""
+
+#: elfnn-aarch64.c:7143
+msgid "too many GOT entries for -fpic, please recompile with -fPIC"
+msgstr ""
+
+#: elfnn-aarch64.c:7171
+msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
+msgstr ""
+
+#: elfnn-aarch64.c:7738
+#, c-format
+msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
+msgstr ""
+
+#: elfnn-aarch64.c:8814
+#, c-format
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s'\n"
+msgstr ""
+
+#: elfnn-loongarch.c:148 elfnn-loongarch.c:200
+#, c-format
+msgid "%#<PRIx64> invaild imm"
+msgstr ""
+
+#: elfnn-loongarch.c:382 elfnn-riscv.c:3811
+#, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+"  target emulation `%s' does not match `%s'"
+msgstr ""
+
+#: elfnn-loongarch.c:437
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr ""
+
+#: elfnn-loongarch.c:578
+msgid "Internal error: unreachable."
+msgstr ""
+
+#: elfnn-riscv.c:224 elfnn-riscv.c:259
+#, c-format
+msgid "%pB: warning: RVE PLT generation not supported"
+msgstr ""
+
+#: elfnn-riscv.c:1899
+#, c-format
+msgid "%pcrel_lo missing matching %pcrel_hi"
+msgstr ""
+
+#: elfnn-riscv.c:1902
+#, c-format
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr ""
+
+#: elfnn-riscv.c:1908
+#, c-format
+msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
+msgstr ""
+
+#: elfnn-riscv.c:1915
+#, c-format
+msgid "%pcrel_lo overflow with an addend"
+msgstr ""
+
+#: elfnn-riscv.c:2396
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr ""
+
+#: elfnn-riscv.c:2498
+#, c-format
+msgid "%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC\n"
+msgstr ""
+
+#: elfnn-riscv.c:2581
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr ""
+
+#: elfnn-riscv.c:2800
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr ""
+
+#: elfnn-riscv.c:2837
+msgid "%X%P: internal error: out of range error\n"
+msgstr ""
+
+#: elfnn-riscv.c:2842
+msgid "%X%P: internal error: unsupported relocation error\n"
+msgstr ""
+
+#: elfnn-riscv.c:2848
+msgid "dangerous relocation error"
+msgstr ""
+
+#: elfnn-riscv.c:2854
+msgid "%X%P: internal error: unknown error\n"
+msgstr ""
+
+#: elfnn-riscv.c:3403
+#, c-format
+msgid "error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'"
+msgstr ""
+
+#: elfnn-riscv.c:3446
+#, c-format
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr ""
+
+#: elfnn-riscv.c:3583
+#, c-format
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr ""
+
+#: elfnn-riscv.c:3603
+#, c-format
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr ""
+
+#: elfnn-riscv.c:3611
+#, c-format
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr ""
+
+#: elfnn-riscv.c:3725
+#, c-format
+msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr ""
+
+#: elfnn-riscv.c:3742
+msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
+msgstr ""
+
+#: elfnn-riscv.c:3770
+#, c-format
+msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
+msgstr ""
+
+#: elfnn-riscv.c:3867
+#, c-format
+msgid "%pB: can't link %s modules with %s modules"
+msgstr ""
+
+#: elfnn-riscv.c:3877
+#, c-format
+msgid "%pB: can't link RVE with other target"
+msgstr ""
+
+#: elfnn-riscv.c:4562
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
+msgstr ""
+
+#: peXXigen.c:159
+#, c-format
+msgid "%pB: unable to find name for empty section"
+msgstr ""
+
+#: peXXigen.c:186
+#, c-format
+msgid "%pB: out of memory creating name for empty section"
+msgstr ""
+
+#: peXXigen.c:196
+#, c-format
+msgid "%pB: unable to create fake empty section"
+msgstr ""
+
+#: peXXigen.c:930
+#, c-format
+msgid "%pB:%.8s: section below image base"
+msgstr ""
+
+#: peXXigen.c:935
+#, c-format
+msgid "%pB:%.8s: RVA truncated"
+msgstr ""
+
+#: peXXigen.c:1066
+#, c-format
+msgid "%pB: line number overflow: 0x%lx > 0xffff"
+msgstr ""
+
+#: peXXigen.c:1232
+msgid "Export Directory [.edata (or where ever we found it)]"
+msgstr ""
+
+#: peXXigen.c:1233
+msgid "Import Directory [parts of .idata]"
+msgstr ""
+
+#: peXXigen.c:1234
+msgid "Resource Directory [.rsrc]"
+msgstr ""
+
+#: peXXigen.c:1235
+msgid "Exception Directory [.pdata]"
+msgstr ""
+
+#: peXXigen.c:1236
+msgid "Security Directory"
+msgstr ""
+
+#: peXXigen.c:1237
+msgid "Base Relocation Directory [.reloc]"
+msgstr ""
+
+#: peXXigen.c:1238
+msgid "Debug Directory"
+msgstr ""
+
+#: peXXigen.c:1239
+msgid "Description Directory"
+msgstr ""
+
+#: peXXigen.c:1240
+msgid "Special Directory"
+msgstr ""
+
+#: peXXigen.c:1241
+msgid "Thread Storage Directory [.tls]"
+msgstr ""
+
+#: peXXigen.c:1242
+msgid "Load Configuration Directory"
+msgstr ""
+
+#: peXXigen.c:1243
+msgid "Bound Import Directory"
+msgstr ""
+
+#: peXXigen.c:1244
+msgid "Import Address Table Directory"
+msgstr ""
+
+#: peXXigen.c:1245
+msgid "Delay Import Directory"
+msgstr ""
+
+#: peXXigen.c:1246
+msgid "CLR Runtime Header"
+msgstr ""
+
+#: peXXigen.c:1247
+msgid "Reserved"
+msgstr "áƒ áƒ”áƒ–áƒ”áƒ áƒ•áƒ˜áƒ áƒ”áƒ‘áƒ£áƒšáƒ˜"
+
+#: peXXigen.c:1294
+#, c-format
+msgid ""
+"\n"
+"There is an import table, but the section containing it could not be found\n"
+msgstr ""
+
+#: peXXigen.c:1300
+#, c-format
+msgid ""
+"\n"
+"There is an import table in %s, but that section has no contents\n"
+msgstr ""
+
+#: peXXigen.c:1307
+#, c-format
+msgid ""
+"\n"
+"There is an import table in %s at 0x%lx\n"
+msgstr ""
+
+#: peXXigen.c:1313
+#, c-format
+msgid ""
+"\n"
+"The Import Tables (interpreted %s section contents)\n"
+msgstr ""
+
+#: peXXigen.c:1316
+#, c-format
+msgid ""
+" vma:            Hint    Time      Forward  DLL       First\n"
+"                 Table   Stamp     Chain    Name      Thunk\n"
+msgstr ""
+
+#: peXXigen.c:1365
+#, c-format
+msgid ""
+"\n"
+"\tDLL Name: %.*s\n"
+msgstr ""
+
+#: peXXigen.c:1381
+#, c-format
+msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
+msgstr ""
+
+#: peXXigen.c:1406
+#, c-format
+msgid ""
+"\n"
+"There is a first thunk, but the section containing it could not be found\n"
+msgstr ""
+
+#: peXXigen.c:1450 peXXigen.c:1489
+#, c-format
+msgid "\t<corrupt: 0x%04lx>"
+msgstr ""
+
+#: peXXigen.c:1582
+#, c-format
+msgid ""
+"\n"
+"There is an export table, but the section containing it could not be found\n"
+msgstr ""
+
+#: peXXigen.c:1588
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but that section has no contents\n"
+msgstr ""
+
+#: peXXigen.c:1599
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but it does not fit into that section\n"
+msgstr ""
+
+#: peXXigen.c:1610
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but it is too small (%d)\n"
+msgstr ""
+
+#: peXXigen.c:1616
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s at 0x%lx\n"
+msgstr ""
+
+#: peXXigen.c:1644
+#, c-format
+msgid ""
+"\n"
+"The Export Tables (interpreted %s section contents)\n"
+"\n"
+msgstr ""
+
+#: peXXigen.c:1648
+#, c-format
+msgid "Export Flags \t\t\t%lx\n"
+msgstr ""
+
+#: peXXigen.c:1651
+#, c-format
+msgid "Time/Date stamp \t\t%lx\n"
+msgstr ""
+
+#: peXXigen.c:1655
+#, c-format
+msgid "Major/Minor \t\t\t%d/%d\n"
+msgstr ""
+
+#: peXXigen.c:1658
+#, c-format
+msgid "Name \t\t\t\t"
+msgstr ""
+
+#: peXXigen.c:1669
+#, c-format
+msgid "Ordinal Base \t\t\t%ld\n"
+msgstr ""
+
+#: peXXigen.c:1672
+#, c-format
+msgid "Number in:\n"
+msgstr ""
+
+#: peXXigen.c:1675
+#, c-format
+msgid "\tExport Address Table \t\t%08lx\n"
+msgstr ""
+
+#: peXXigen.c:1679
+#, c-format
+msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
+msgstr ""
+
+#: peXXigen.c:1682
+#, c-format
+msgid "Table Addresses\n"
+msgstr ""
+
+#: peXXigen.c:1685
+#, c-format
+msgid "\tExport Address Table \t\t"
+msgstr ""
+
+#: peXXigen.c:1690
+#, c-format
+msgid "\tName Pointer Table \t\t"
+msgstr ""
+
+#: peXXigen.c:1695
+#, c-format
+msgid "\tOrdinal Table \t\t\t"
+msgstr ""
+
+#: peXXigen.c:1709
+#, c-format
+msgid ""
+"\n"
+"Export Address Table -- Ordinal Base %ld\n"
+msgstr ""
+
+#: peXXigen.c:1718
+#, c-format
+msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr ""
+
+#: peXXigen.c:1737
+msgid "Forwarder RVA"
+msgstr ""
+
+#: peXXigen.c:1749
+msgid "Export RVA"
+msgstr ""
+
+#: peXXigen.c:1756
+#, c-format
+msgid ""
+"\n"
+"[Ordinal/Name Pointer] Table\n"
+msgstr ""
+
+#: peXXigen.c:1764
+#, c-format
+msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr ""
+
+#: peXXigen.c:1771
+#, c-format
+msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr ""
+
+#: peXXigen.c:1785
+#, c-format
+msgid "\t[%4ld] <corrupt offset: %lx>\n"
+msgstr ""
+
+#: peXXigen.c:1839 peXXigen.c:2008
+#, c-format
+msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
+msgstr ""
+
+#: peXXigen.c:1843 peXXigen.c:2012
+#, c-format
+msgid ""
+"\n"
+"The Function Table (interpreted .pdata section contents)\n"
+msgstr ""
+
+#: peXXigen.c:1846
+#, c-format
+msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
+msgstr ""
+
+#: peXXigen.c:1848
+#, c-format
+msgid ""
+" vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
+"     \t\tAddress  Address  Handler  Data     Address    Mask\n"
+msgstr ""
+
+#: peXXigen.c:1861
+#, c-format
+msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
+msgstr ""
+
+#: peXXigen.c:2014
+#, c-format
+msgid ""
+" vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
+"     \t\tAddress  Length   Length   32b exc  Handler   Data\n"
+msgstr ""
+
+#: peXXigen.c:2137
+#, c-format
+msgid ""
+"\n"
+"\n"
+"PE File Base Relocations (interpreted .reloc section contents)\n"
+msgstr ""
+
+#: peXXigen.c:2166
+#, c-format
+msgid ""
+"\n"
+"Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"
+msgstr ""
+
+#: peXXigen.c:2184
+#, c-format
+msgid "\treloc %4d offset %4x [%4lx] %s"
+msgstr ""
+
+#: peXXigen.c:2245
+#, c-format
+msgid "%03x %*.s Entry: "
+msgstr ""
+
+#: peXXigen.c:2269
+#, c-format
+msgid "name: [val: %08lx len %d]: "
+msgstr ""
+
+#: peXXigen.c:2289
+#, c-format
+msgid "<corrupt string length: %#x>\n"
+msgstr ""
+
+#: peXXigen.c:2299
+#, c-format
+msgid "<corrupt string offset: %#lx>\n"
+msgstr ""
+
+#: peXXigen.c:2304
+#, c-format
+msgid "ID: %#08lx"
+msgstr ""
+
+#: peXXigen.c:2307
+#, c-format
+msgid ", Value: %#08lx\n"
+msgstr ""
+
+#: peXXigen.c:2329
+#, c-format
+msgid "%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
+msgstr ""
+
+#: peXXigen.c:2371
+#, c-format
+msgid "<unknown directory type: %d>\n"
+msgstr ""
+
+#: peXXigen.c:2379
+#, c-format
+msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
+msgstr ""
+
+#: peXXigen.c:2467
+#, c-format
+msgid "Corrupt .rsrc section detected!\n"
+msgstr ""
+
+#: peXXigen.c:2491
+#, c-format
+msgid ""
+"\n"
+"WARNING: Extra data in .rsrc section - it will be ignored by Windows:\n"
+msgstr ""
+
+#: peXXigen.c:2497
+#, c-format
+msgid " String table starts at offset: %#03x\n"
+msgstr ""
+
+#: peXXigen.c:2500
+#, c-format
+msgid " Resources start at offset: %#03x\n"
+msgstr ""
+
+#: peXXigen.c:2557
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory, but the section containing it could not be found\n"
+msgstr ""
+
+#: peXXigen.c:2563
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory in %s, but that section has no contents\n"
+msgstr ""
+
+#: peXXigen.c:2570
+#, c-format
+msgid ""
+"\n"
+"Error: section %s contains the debug data starting address but it is too small\n"
+msgstr ""
+
+#: peXXigen.c:2575
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory in %s at 0x%lx\n"
+"\n"
+msgstr ""
+
+#: peXXigen.c:2582
+#, c-format
+msgid "The debug data size field in the data directory is too big for the section"
+msgstr ""
+
+#: peXXigen.c:2587
+#, c-format
+msgid "Type                Size     Rva      Offset\n"
+msgstr ""
+
+#: peXXigen.c:2635
+#, c-format
+msgid "(format %c%c%c%c signature %s age %ld pdb %s)\n"
+msgstr ""
+
+#: peXXigen.c:2647
+#, c-format
+msgid "The debug directory size is not a multiple of the debug directory entry size\n"
+msgstr ""
+
+#. The MS dumpbin program reportedly ands with 0xff0f before
+#. printing the characteristics field.  Not sure why.  No reason to
+#. emulate it here.
+#: peXXigen.c:2731
+#, c-format
+msgid ""
+"\n"
+"Characteristics 0x%x\n"
+msgstr ""
+
+#: peXXigen.c:3016
+#, c-format
+msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
+msgstr ""
+
+#: peXXigen.c:3056
+msgid "failed to update file offsets in debug directory"
+msgstr ""
+
+#: peXXigen.c:3065
+#, c-format
+msgid "%pB: failed to read debug data section"
+msgstr ""
+
+#: peXXigen.c:3866
+#, c-format
+msgid ".rsrc merge failure: duplicate string resource: %d"
+msgstr ""
+
+#: peXXigen.c:4001
+msgid ".rsrc merge failure: multiple non-default manifests"
+msgstr ""
+
+#: peXXigen.c:4019
+msgid ".rsrc merge failure: a directory matches a leaf"
+msgstr ""
+
+#: peXXigen.c:4061
+msgid ".rsrc merge failure: duplicate leaf"
+msgstr ""
+
+#: peXXigen.c:4066
+#, c-format
+msgid ".rsrc merge failure: duplicate leaf: %s"
+msgstr ""
+
+#: peXXigen.c:4133
+msgid ".rsrc merge failure: dirs with differing characteristics"
+msgstr ""
+
+#: peXXigen.c:4140
+msgid ".rsrc merge failure: differing directory versions"
+msgstr ""
+
+#. Corrupted .rsrc section - cannot merge.
+#: peXXigen.c:4257
+#, c-format
+msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
+msgstr ""
+
+#: peXXigen.c:4265
+#, c-format
+msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
+msgstr ""
+
+#: peXXigen.c:4404
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
+msgstr ""
+
+#: peXXigen.c:4424
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
+msgstr ""
+
+#: peXXigen.c:4445
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
+msgstr ""
+
+#: peXXigen.c:4465
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
+msgstr ""
+
+#: peXXigen.c:4507
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
+msgstr ""
+
+#: peXXigen.c:4532
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
+msgstr ""
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/Make-in ./bfd/po/Make-in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/Make-in	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/Make-in	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 # Makefile for program source directory in GNU NLS utilities package.
 # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
-# Copyright (C) 2001-2019 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
 #
 # This file may be copied and used freely without restrictions.  It can
 # be used in projects which are not available under the GNU Public License
@@ -96,17 +96,17 @@ all-no:
 	$(XGETTEXT) --default-domain=$(PACKAGE) \
 	  --directory=$(top_srcdir) \
 	  --add-comments --keyword=_ --keyword=N_ \
-	  --msgid-bugs-address=bug-binutils@gnu.org \
+	  --msgid-bugs-address=https://sourceware.org/bugzilla/ \
 	  --files-from=$(srcdir)/SRC-POTFILES.in 
 	$(XGETTEXT) --default-domain=$(PACKAGE) \
 	  --directory=.. \
 	  --directory=. \
 	  --add-comments --keyword=_ --keyword=N_ \
 	  --join-existing \
-	  --msgid-bugs-address=bug-binutils@gnu.org \
+	  --msgid-bugs-address=https://sourceware.org/bugzilla/ \
 	  --files-from=$(srcdir)/BLD-POTFILES.in
-	rm -f $(srcdir)/$(PACKAGE).pot
-	mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot
+	sed -e '/^#:/s,$(top_srcdir)/,,g' < $(PACKAGE).po > $@-t
+	mv -f $@-t $@
 
 $(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
 $(srcdir)/stamp-cat-id: $(PACKAGE).pot
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/pt.gmo ./bfd/po/pt.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/pt.gmo	2019-12-11 01:53:30.000000000 +0000
+++ ./bfd/po/pt.gmo	2024-02-01 01:52:32.000000000 +0000
@@ -1,144 +1,144 @@
-Þ•01Ûbl…€„…„‡dŸ
eŸsŸ‡Ÿ ŸA¿Ÿ? :A | “ ¦ $Å 3ê 
¡,¡%L¡r¡t¡A†¡&È¡ï¡¢!¢:¢J¢ i¢Š¢ª¢Ã¢Ú¢ç¢Pú¢K£*c£9Ž£6È£;ÿ£;¤FM¤6”¤6Ë¤:¥5=¥,s¥D ¥Nå¥J4¦)¦G©¦:ñ¦B,§Lo§)¼§Bæ§L)¨v¨Œ¨D£¨Gè¨0©O©a©u©�©¢©3Á©õ©ª0ªOª_ªoª+‰ª+µª+áª#
«1«I«R«p«(‡«?°«>ð«%/¬&U¬(|¬)¥¬GÏ¬7­O­f­†­£­¼­×­÷­®+®A®Y®m®„®,ž®Ë®Û®ô®¯#¯2¯H¯]¯w¯Ž¯1£¯Õ¯æ¯ó¯
-°%°#=°+a°&�°5´°ê°ÿ°±1±G±a±z±‘±§±$¼±á±ú±²2²$G²l²€²•²<®²ë²ú²
	³³+³@³ X³y³”³¤³Ä³à³´´2´E´*X´ƒ´•´&§´Î´0â´µ"'µJµ	[¶e¶#x¶œ¶µ¶Æ¶ß¶"ø¶·"/·#R·#v·š·#¯·#Ó·÷·¸"¸@¸F¸S¸[¸`¸
-}¸ˆ¸�¸!“¸ µ¸Ö¸Û¸à¸ø¸¹8¹=¹Q¹!V¹x¹‰¹�¹–¹›¹ ¹¦¹ª¹¯¹Ë¹"ä¹ºº,º@º&`ºB‡ºÊºêºïºôºûº»»»»7»K»R»k»»�»¡»²»Ã»Ô»ì»	û»
¼
¼
-!¼
-,¼
-7¼
-B¼
-M¼$X¼
-}¼#ˆ¼
-¬¼·¼É¼!á¼½½
-'½
2½	@½J½
-[½f½m½…½Ÿ½±½À½×½ò½¾¾)¾0¾P¾(`¾/‰¾¹¾Ë¾+Ú¾¿A"¿d¿~¿˜¿²¿8Ç¿ÀÀ-À&GÀnÀ�À2¨À?ÛÀ&ÁBÁ(aÁŠÁ"�ÁÀÁ*àÁ6Â{BÂr¾Âx1ÃªÃ:ÀÃûÃ?
ÄMÄmÄ&‹Ä²ÄœÌÄDiÅ'®Å,ÖÅ1Æ'5Æ$]Æ/‚Æ-²Æ0àÆ&Ç88ÇqÇ=‘Ç9ÏÇ:	È6DÈ6{È²È/ÒÈ5É+8É$dÉ6‰É"ÀÉ&ãÉ6
-Ê=AÊ:Ê:ºÊDõÊ8:Ë9sËC­Ë:ñË7,Ì8dÌ@�ÌGÞÌ9&Í,`Í0�Í#¾ÍâÍ-ýÍ6+ÎbÎ7~Î;¶Î:òÎ9-Ï"gÏ3ŠÏ%¾Ï.äÏÐL3Ð0€Ð.±Ð1àÐ'ÑE:Ñ8€Ñ(¹ÑcâÑ4FÒ&{Ò2¢Ò&ÕÒ6üÒ]3Ó8‘ÓÊÓOéÓb9Ô,œÔ+ÉÔ)õÔYÕ=yÕ3·Õ2ëÕBÖ)aÖ$‹Ö3°Ö9äÖ6×/U×D…×&Ê×Wñ×UIØIŸØ+éØ8Ù%NÙ(tÙ&�Ù,ÄÙ#ñÙ>ÚBTÚB—ÚÚÚ'úÚE"Û9hÛ4¢Û3×ÛJÜ(VÜ;Ü»Ü0ÚÜ.Ý,:Ý'gÝ6�Ý ÆÝ/çÝ4ÞNLÞª›ÞIFß9�ß3Êß¾þß<½à<úàF7áP~áoÏá>?âF~â`Åâ~&ãF¥ã‚ìã[oä3Ëä@ÿäM@åmŽå7üå#4æXæ(næ&—æ+¾æêæÿæ8ç"Lç$oç'”ç9¼çCöç!:è!\è*~è/©è1Ùè/é/;é0ké*œé0Çé<øéi5ê=ŸêBÝê= ë-^ë.Œë8»ë9ôëF.ì?uìVµì(í>5í;tí=°í#îíLî8_î+˜î8Äî2ýî90ï:jï3¥ï,Ùïuð |ð.�ð.ÌðKûð0GñBxñ/»ñ,ëñ'ò%@ò,fòN“òâòCüòJ@ó@‹óJÌó*ô%Bô<hô ¥ôlÆô<3õ<põ+­õÙõ,õõH"ö6köA¢öAäöJ&÷>q÷J°÷Jû÷<Fø.ƒø(²ølÛøvHùA¿ù6ú8ú4Vú0‹ú+¼úAèú3*û@^û!Ÿû#Áû.åûBüFWü4žü%Óü:ùü24ý*gý9’ýCÌýCþ:TþT�þJäþ5/ÿ4eÿ6šÿ/Ñÿ/&1&X5'µ0Ý5(D3m%¡&Çî'=6#t+˜3Ä(ø@!Cb5¦'Ü,g14™mÎA<@~H¿GKPIœLæH3C|YÀ50P4�M¶N	1S	)…	/¯	)ß	+	
-75
-3m
-6¡
-9Ø
-X[kCÇ6>B=�*¿.ê2
[L
&¨
-Ï
,ý
*E/`(�$¹0Þ'87"pA“)Õ=ÿ@=2~+±"Ý5<6's%›(ÁRê?=F}3Ä1øD*HoD¸KýaI`«sB€‚ÃTF=›bÙb<gŸg0o( 4É5þ34-h/–HÆF7VGŽ+Ö$2'.Z/‰+¹)å^KnFº"@5[(‘EºDDEFŠ_Ñ^1"�*³+Þ8
- :C '~ ;¦ 8â '!'C!3k!>Ÿ!-Þ!,"9"X"u".“"/Â"ò"$#37#k#F‰#&Ð#!÷#6$5P$+†$ ²$$Ó$.ø$.'%%V%)|%\¦%D&HH&D‘&LÖ&X#'H|')Å'*ï' (5;(9q(@«(+ì(6)AO).‘)3À)=ô)H2*<{*8¸*3ñ*4%+4Z+0�+@À+1,B3,Lv,AÃ,L-8R-B‹-+Î-2ú-<-.3j.Xž.P÷..H/`w/&Ø/\ÿ/X\0/µ0på0AV1+˜1KÄ1.2,?2%l2’23²22æ23493Wn3=Æ3*45/4%e4B‹4%Î44ô4>)5<h5C¥5Bé5;,63h6œ6¼6Ë6!à67$7=71P7V‚7IÙ7I#8<m8ª8½8Ñ8ã8ý8
9'9G9
S9a9%r9\˜9;õ91:C:Y:\:y:†:	Ÿ:©:»:Ì:,Ù:;;0;"L;o;(Œ;/µ;/å;1<8G<#€<'¤<2Ì<3ÿ<3=;C==†=Ž=£=³=º=Â=Ö=ë=>>%><>Y>k>‰>	¨>²>Ð>	å>"ï>?$?)@?/j?"š?½?Ô?Ý?é?í?@@$@'6@^@ {@#œ@À@Ú@ ì@
AH+A1tA#¦A,ÊAX÷AaPB:²B.íB7C1TC;†C(ÂC:ëC,&D-SD-�D¯D2ÎDEE&E;ERE)hE’E!¨E$ÊEIïE9F5VFŒF
-¡FC¬FIðF:GLGTG\G
zGˆGAšGÜG/øG+(H8TH�H$£H!ÈH1êHI;I+ZI†I
-šI¥IÄI%ÖIüIJ.,J-[JG‰J3ÑJK"$KGKYK$rK—K!´KÖK5èKL	0L:LLLbL‚LœL¸LÇLÙL	àLêLïLûL
-M!M=MSMeM…MžM¾MÒMäMüM-NHNZNlN€NšN'¯N×NæNøN
-OO!O:O:VO%‘O%·OÝOAöO;8PCtP=¸PCöP=:Q"xQ7›Q<ÓQ<R)MR5wR­R¶RvÑR*HSsS'…S­S¿SÆS
-ÍS(ØST'T;TXTpT�T#¨T$ÌT,ñT.U,MU.zU©U"ÆU,éU.V!EV1gV0™V2ÊV,ýV.*W#YW}W�W(±W/ÚW!
-X,X(IX#rX+–XÂX,ÛX Y)YBYbYvY–Y#µY-ÙY"Z*Z<ZOZ[ZpZ&‚Z	©ZF³Z/úZ*[J;[M†[Ô[ô[\\-;\i\r\z\A†\>È\]A]7[]B“]!Ö]ø]˜^±^Í^ß^ñ^2_.9_#h_Œ_™_¦_¶_¾_:×_+`#>`b`u`Ž`¦`,¾`:ë`&a	>adHa­a6ÀaM÷aMEb<“bgÐbb8c<›cEØc1d(Pd$ydžd/´d+äde,eFece>e<¾eûe4f'Lf$tf™fªfÂfÙfêfgg,g>gPgbg|g—g©gºgÒgñg2hCh']h7…h0½hDîh,3i'`iˆi¨iºi-Ôi+j+.j*Zj	…j	�j
-™j
-¤j¯jÄjÓjèj÷j1üj.k/Nk~k'�k"Åk&èk0l@l^lsl|l9šlÔl,él9m)PmCzmI¾mEnYNnY¨n;o;>oNzo/Éo5ùo:/p5jp4 p9Õp7q9GqD�qGÆqDrESrC™r4Ýr?s:RsG�s;ÕsAt9St*�t6¸t/ït;u3[u%�u1µuAçu!)vUKv\¡vAþv1@w?rw:²w7íw>%x$dxI‰xÓx/ðxO yPpy3Áy õy?z:Vz&‘z
-¸z0Ãz%ôz"{%={0c{!”{¶{Ï{ê{ÿ{|O|k|,Š|J·|7}
:}H}1W}‰}�}°}Ã})à}*
-~,5~6b~™~$¹~_Þ~">Aa£,Á2îH!€j€z€$‹€°€Ã€¼ã€¹ �Z‚/l‚œ‚·‚Õ‚*õ‚L ƒ2mƒ- ƒ)Îƒ"øƒ„.„C„X„4g„œ„0¤„%Õ„9û„5…G…X…r…z…‚…ž…H¥…î…4ñ…&†/†
-F†Q†2m†O †ð†‡"‡*7‡%b‡ ˆ‡©‡Ç‡Ï‡Cî‡¤2ˆ×ˆäˆ þˆ‰(‰<‰Q‰g‰}‰”‰±‰Â‰Ô‰è‰Nð‰[?Š›ŠAŸŠáŠ‹‹5‹6M‹„‹ ¤‹8Å‹+þ‹*Œ=ŒMŒUŒjŒ‚Œ–ŒªŒ¾ŒÑŒ
äŒòŒL� Y�Dz�P¿�Ž"Ž2=Ž$pŽ•ŽµŽ5ÈŽþŽ!�;�B�2J�F}�/Ä�ô�"�)�9�MH�9–�;Ð�7‘D‘\‘y‘ˆ‘,›‘$È‘Jí‘)8’ˆb’(ë’%“(:“c“
-“,Š“7·“ï“)	”3”Q”k”ƒ”‹”£”»”
Ñ”#ß”•'•C•T•j•„•¡•»•#Ç•%ë•–.–E–W–7n–¦–Â–â–û–—"—5—I—]—s—J‰—JÔ—J˜Ij˜:´˜ï˜-™;<™+x™@¤™<å™1"š8Tš8�š.Æš>õšI4›h~›yç›>aœN œIïœd9�0ž�;Ï�8žFDž5‹ž&Áž.èž-Ÿ.EŸ0tŸ<¥Ÿ!âŸ ! `? .  ,Ï hü Ee¡0«¡6Ü¡k¢E¢Å¢&ã¢I
-£#T£<x£<µ£eò£2X¤/‹¤/»¤4ë¤= ¥9^¥0˜¥7É¥'¦=)¦6g¦@ž¦ß¦ÿ¦,§0§
C©Q©f©"ƒ©W¦©Sþ©GRªšª³ªÇª&çª6«E«T«%t«š«œ«T®«(¬,¬G¬e¬€¬ �¬"±¬!Ô¬ö¬­+­;­VQ­¨­.À­>ï­A.®@p®±®PË®E¯>b¯B¡¯Dä¯.)°JX°V£°Oú°/J±Ez±EÀ±L²XS²/¬²LÜ²X)³‚³�³Q¸³E
-´ P´q´‡´›´µ´#Ì´7ð´(µ?µ=Qµ�µŸµ¯µ,Éµ,öµ,#¶#P¶t¶Ž¶—¶µ¶'Î¶=ö¶<4·"q·%”·%º·(à·K	¸9U¸�¸¨¸È¸å¸þ¸¹:¹T¹q¹‡¹¥¹¹¹Ð¹,ê¹º'º@º]ºxº‹º¢ºµºÏºæº6üº3»H»U»n»‰»*¢»8Í».¼<5¼r¼‡¼¡¼¼¼Ó¼ð¼	½ ½6½1M½½˜½'¸½à½)÷½!¾7¾L¾<e¾¢¾±¾
À¾Î¾ã¾ø¾(¿=¿X¿j¿Š¿ ¨¿É¿â¿ÀÀ*)ÀTÀfÀ,xÀ¥À0¹ÀêÀ'þÀ&Á7ÂDÂ#WÂ{Â”Â©ÂÂÂ$ÝÂÃ%Ã#<Ã#`Ã„Ã#˜Ã#¼ÃàÃïÃ
Ä,Ä2ÄAÄIÄ NÄ
-oÄzÄÄ$…Ä0ªÄÛÄàÄåÄþÄÅ<ÅAÅ^Å-cÅ‘Å¥Å¬Å²Å·Å¼ÅÂÅÆÅËÅçÅ$Æ%Æ*ÆIÆ"bÆ+…ÆD±ÆöÆÇÇÇ&Ç,Ç1ÇCÇJÇbÇ{Ç‚Ç Ç¹ÇÊÇÛÇìÇýÇÈ"È	6È
@È
NÈ
-\È
-gÈ
-rÈ	}È
-‡È0’È
-ÃÈ-ÎÈ
-üÈÉÉ*0É[ÉrÉƒÉ�É	£É­É
¿ÉÍÉÔÉîÉÊÊ-ÊLÊkÊ!Ê¡Ê®Ê"µÊØÊ8éÊA"ËdËvË2‰Ë¼ËAØËÌ5ÌOÌiÌ6‚Ì¹ÌÓÌèÌ1Í)4Í^Í9yÍ?³Í1óÍ)%Î,OÎ|Î"’Î%µÎ*ÛÎ6Ï…=ÏzÃÏy>Ð¸Ð>ÕÐÑF(ÑoÑ&�Ñ=¶ÑôÑ©ÒJ»Ò&Ó1-Ó0_Ó&�Ó#·Ó.ÛÓ,
-Ô37Ô%kÔ4‘Ô!ÆÔEèÔA.ÕBpÕ<³ÕBðÕ3Ö3PÖF„Ö)ËÖ"õÖ?×#X×(|×9¥×@ß×< Ø=]ØG›Ø:ãØ<ÙF[Ù<¢Ù:ßÙ:ÚQUÚX§ÚNÛ9OÛ2‰Û%¼ÛâÛ-Ü7.ÜfÜA�ÜAÃÜBÝ?HÝˆÝ7§Ý#ßÝ5Þ'9ÞYaÞ?»ÞEûÞ/Aß(qßMšßAèß4*àk_à6Ëà,á9/á,iá:–árÑáADâ †â^§âlã0sã*¤ã,Ïã[üãDXä;�ä7ÙäJå+\å&ˆå8¯åGèåF0æEwæN½æ(çj5ç[ çWüç9Tè5Žè/Äè1ôè)&é.Pé$éF¤éKëé>7ê'vê5žêOÔê7$ë2\ë1�ëZÁë0ìIMì"—ì5ºì0ðì.!í)Pí;zí)¶í5àíCîYZî°´îQeïB·ï=úïÆ8ðBÿðBBñM…ñTÓñ�(òGªòNòònAó–°óRGôŠšôf%õ4ŒõEÁõYözaö4Üö1÷C÷4`÷+•÷/Á÷ñ÷øCø)cø'�ø,µøDâøM'ù%uù%›ù.Áù3ðù5$ú3Zú4Žú8Ãú.üú8+û7dûoœû;üHHü;‘ü6Íü@ýBEý?ˆýMÈýFþ\]þ/ºþGêþA2ÿGtÿ#¼ÿKàÿ7,/dC”=ØDC[;Ÿ1ÛŽ
$œ4Á4öT+2€G³6û427g1Ÿ1ÑY ]K~XÊQ#]u2Ó)O0+€¬F,Fs(º ã2	I7	8�	Cº	Cþ	MB
-=�
-NÎ
-MRk1¾1ðs"}–G
>\
+›
6Ç
4þ
+3M_@­>î*-*X/ƒO³Z8^(—DÀ8->BlX¯XDaf¦P
4^6“@ÊB?N.Ž2½9ð/*8Z=“/Ñ8-:(h"‘-´Dâ)'2Q@„&ÅCìO09€&º1áw?‹rËL>J‹RÖQ)U{NÑa U‚OØj(H“9Ü;ZRW­;/A0q.¢2Ñ? :D = A½ dÿ gd!LÌ!="GW"AŸ"0á"3#7F#f~#1å#1$1I${$™$5·$0í$2%7Q%1‰%I»%$&L*&0w&A¨&Dê&3/'*c'+Ž'=º'Dø',=('j(0’(YÃ(G)Se)9¹):ó)I.*Px*IÉ*V+jj+kÕ+wA,J¹,�-_•-Gõ-m=.n«.r/t�/;0/>05n0A¤08æ0=14]1M’1Kà1A,2Wn26Æ25ý27330k35œ31Ò3.4h34Rœ4Iï495%X5~5=œ5+Ú5L6KS6KŸ6Më6f97e 7*83181e8?—8B×8199L9>†9+Å9.ñ9; :D\:1¡:4Ó:);!2;&T;:{;A¶;,ø;+%<9Q< ‹<N¬<6û<.2==a=FŸ=1æ=+>/D>:t>:¯>0ê>*?lF?M³?[@F]@T¤@Sù@[MA4©A+ÞA%
-B=0B=nBC¬B0ðB>!CJ`C,«C8ØCEDOWD4§D@ÜD3E<QE=ŽE4ÌENF0PF=�FG¿F<GHDG3�GNÁG3H8DHB}H8ÀHcùHY]I7·IfïI*VJi�JeëJ7QKw‰KDL/FLIvL4ÀL<õL)2M&\M7ƒM6»M-òM; N\\N=¹N1÷N<)O,fO>“O-ÒO9PC:PK~PRÊPOQHmQ;¶Q#òQ
R$R)8R bR%ƒR©R:¿RcúRV^SVµSITVTkT�T”T¯TÆT+ÓTÿTUU%+UbQU;´UðUVV%VAVPVkVzVŒV
�V,«VØVíVW""W$EW&jW4‘W8ÆW3ÿW=3X&qX*˜X6ÃX>úX9YBHY‹Y’YšY²YÁYÈYÐYäYùYZ Z3Z.IZxZ"“Z"¶Z
-ÙZ!äZ%[,[#;[_[ q[(’[.»[&ê[\1\=\I\M\j\|\Ž\0 \"Ñ\,ô\-!]"O]r]%‹]!±]IÓ]<^0Z^4‹^bÀ^f#_AŠ_3Ì_=`5>`Vt`4Ë`Ja&Ka)ra7œa"Ôa:÷a2b"Gb$jb�b¯b)Äbîb$c$(cDMc’c7°c!èc
-dIdUed»dÍdÕdÝdûdeQ e're1še1Ìe=þe<f+Xf-„f8²f$ëf&g17gig
-…g&�g·g)Égóg!h9'h6ahU˜hGîh-6i(di�i!Ÿi$Ái'æi!j0j:Bj}j	�j™j«j Åjæj k!k8kJk	Qk[kbkok„k™k¹kÑkäkll>lUlfl€l9 lÚlëlm!m8m,MmzmŠmœm®mµm&¼mãm>n*@n)kn•nJ´nHÿnCHoBŒoHÏo@p-Yp:‡pEÂpEq,Nq>{q	ºqÄq{Þq0Zr‹r$�rÂrÔrÛr
-âr4ír"s/4sds�s™s¹s#Òs$ös<t9Xt<’t9Ït'	u51u<gu9¤u0ÞuAv@Qv=’v<Ðv9
w.Gw!vw˜w(°w/Ùw-	x 7x,Xx&…x3¬xàx4ýx&2yYy!vy˜y%°y%Öyüy2z(Mzvzˆzœz­zÌz2Ûz{J{6b{™{a¯{b|'t|œ|²|!Ò|-ô|"}+}8}MI}D—}Ü}Hî}<7~It~&¾~&å~¢!¯Ñãõ4€.D€*s€ž€­€¼€	Ò€ Ü€Dý€5B�-x�¦�¼�Ö�î�2‚F;‚‚‚	 ‚gª‚ƒ>%ƒNdƒN³ƒA„tD„p¹„=*…Jh…6³…-ê…&†?†HX†4¡†Ö†ó†,‡,>‡Pk‡Q¼‡&ˆI5ˆ4ˆ2´ˆçˆüˆ‰7‰L‰l‰Š‰ ‰¶‰Ì‰!â‰Š#Š9ŠNŠ*kŠ'–Š5¾ŠôŠ1‹7B‹2z‹G­‹2õ‹-(Œ VŒwŒ#ŠŒ5®Œ3äŒ3�0L�	}�	‡�
-‘�
-œ�§�À�Ï�ä�ó�4ø�$-Ž9RŽ ŒŽ4­Ž)âŽ0�>=�|�š�¯�#¸�AÜ��-2�4`�(•�G¾�O‘VV‘]­‘]’?i’>©’Yè’,B“/o“7Ÿ“1×“1	”:;”4v”:«”Læ”F3•Hz•HÃ•J–<W–F”–4Û–B—BS—N–—@å—+&˜JR˜.�˜<Ì˜3	™$=™/b™D’™ ×™[ø™\TšN±š:›L;›9ˆ›:Â›@ý›(>œJgœ)²œ+Üœ]�Of�0¶�"ç�C
-ž>Nž-�ž»ž3Çž(ûž%$Ÿ(JŸ?sŸ³ŸÎŸ$ëŸ + A SS #§ 7Ë V¡AZ¡œ¡¬¡;½¡ù¡
¢ ¢3¢/R¢3‚¢+¶¢;â¢£&:£ha£$Ê£Mï£=¤1]¤7�¤OÇ¤¥(¥/:¥j¥#}¥Ñ¡¥Îs¦B§6W§&Ž§%µ§!Û§7ý§[5¨4‘¨IÆ¨5©.F©u©‹© ©¶©DÆ©ª7ª4Kª9€ªºªÎªàªÿª««+«\2«�«<”«Ñ«Ú«
ø«¬C#¬og¬×¬÷¬&þ¬1%­5W­#�­$±­
Ö­$ä­O	®¦Y®¯¯9*¯	d¯n¯‡¯¡¯¼¯×¯ ó¯°'°;°O°WW°k¯°±E±"e±ˆ±# ±!Ä±Bæ±")²&L²@s²5´²ê²ý²³³2³I³]³q³…³˜³«³¾³\Þ³$;´Y`´Zº´µ$&µ1Kµ)}µ'§µÏµ<ãµ! ¶1B¶t¶	}¶9‡¶JÁ¶;·H·.c·’·¢·N±·?¸7@¸Bx¸»¸ Ù¸ú¸
¹2 ¹,S¹X€¹4Ù¹Šº*™º%Äº6êº#!»
-E»2P»9ƒ»½»9Ü»$¼;¼X¼w¼„¼¢¼¿¼Ü¼/î¼ ½/?½o½…½ ½#¾½â½¾'¾*:¾$e¾Š¾¨¾½¾EÜ¾"¿*A¿l¿‰¿ž¿°¿Ã¿×¿ë¿ÀSÀXkÀRÄÀUÁEmÁ³Á-ÒÁ@Â+AÂCmÂ6±Â8èÂD!Ã2fÃ0™ÃEÊÃTÄueÄ†ÛÄEbÅZ¨ÅTÆxXÆ4ÑÆ?Ç:FÇF�Ç>ÈÇ*È12È4dÈ4™È5ÎÈ>É'CÉkÉ#ˆÉd¬É/Ê-AÊfoÊDÖÊ5Ë:QËiŒËDöË ;Ì(\ÌU…Ì#ÛÌBÿÌBBÍd…Í9êÍ4$Î6YÎ?�ÎFÐÎ:Ï8RÏ=‹Ï)ÉÏVóÏ9JÐH„ÐÍÐíÐ.ñÐßÎ¿Ciq¯ž$Š¨6¸ŒÔ9õ¹í¹Ä"Àg!f5Ý”­;›Î¬¾×Æ
-ƒTW­0§y2!'(ê�)Ý
-ªE69	Ç`Z‹—EÄÖê{8¦J5„÷”�ž‡I£r€dŠÊ<ÆxkUámÜ‚x´¡[×ºå§û8ÇR)Ä»°q�¿õÿU³�Û³÷ëÃ"D}sÖ/WòF[šƒ|y0Vôë,ëµäÕ²$².ÿ;Y}_Îó„¼Ê!Hø×<\Œð¤´Àsˆh¡…fæˆ«ÁÄÏÜ,*‘wØºúa:ë©Î„' ðí~Mà‚báZó
Èc:Q3(;ÿ÷4G&ÉCN±µÞ&"PL%‹Cç?æ‰
-æýµ”Õ‡r±Ê¡Y†`�”¥Uôa›BÉUÙðlñe/—lwÝæ6î“Ÿ¥õh›>Lþ�:’’øõ¢“#VÔ¸Ÿ¿pxŠÍ~­a·ÃxC•QSt#Ú<â¡ÒïÈé@»ã�eûPÔ—jˆËñ%‰	S~LÃ°ãXOù$,3{)ã@šnÅcËAŸ�5Œ3§‚åb×À3µÅ-ÈXŠuZ=©zRí0[FÔD:wºËaÞ›Õ=ú¨
¦®N9®ä �ñ¿5šÜ­Kn8¶¾ŸKäÊ½	.l2ÜŠBAtø?�öãm®ƒÆÖLëz !x–gW˜ùÖ¶ÉÌVÄøIZ¸4O™¶:»«þžŽ€Iåÿ=©ÝþÌc‰•N¡þí�ªù[‡V¥v¬xÆòñ‘³Y$Ž‡Ž˜D Ê…•J®Íg+†û²Ð¨·ÒèØ3é�ozŸÝeo2ŽV•Ñïn(·êi0¬#+°]Õèû`|iFeî�åªo<Mq6î*>Tà&§ìÎÀ6Ç‹€"o¸Eæ¶NY’½Žð7vKø{£Óë8‡@–ªÂý*„*?	1GAù 5uç‡_>úÂÐ#ìž«Kü™å9«ð¥Ï`…^B£7Ù¢ï£1žè2â>ÆþÅÐ¬¶ví–9'Å¹Ñz|ÜÛÁõµ¢ï-OÒÌh²ÂvW€U‘ÏËà+òA%Ç&œ´%z«S2#—¤Nsî¾d“?pÕ0ãbÍÈ³ãR¦H£“(—ÏÑAž¤	]r¢¹âjI:â�81GXÚ§-ô±
-‘wÈå^}°h¹4ù¥�—íPÂn¼è8pÌ1êf<ká]RX2[Ï#¼½vrÔª¹ß™,Ùü_mƒ¨Ãh�ôw@]¼‰	JÛO·Ê vQ¼†Ð”˜/g¥ƒç^œ©ÉÁÒWd^¤)Úi!üÞ–JmI;'¿ê ÿüÅ$
Ú•{;š
.5qÉy /öÓw¸qX�ûNö™†ÛE>k�Ëà=øþB©ÿ¸�´–ªuÖ-‰óÓsGŒÈý^4iâ¡ôùÐºY-Û/•�ç¦Bf%Üîõ,e»è	fE]|T½®FöfÌìkÇ´ý4ÙÝÑÏBtóÞ?éÍœ~ØF¯ÁSpQé ÓŸ�ì“(ˆÛT²Øèæ|³=÷k¯z·ö¨Ž_9W²mP_J¼Ó­Øáô &C/MDºJß](CÖÍK†sjE¿…lc\‹ä�@˜17ð}Éé F[OÓaÔ+òÐ»PºZX™ctM¢â„SŒj
-çKìo{p
-7œýÌHU+áYj‹³Ã¬äßMïÙR_.ns˜‚)$
?îG×�=.cœM´'ouk†L@±�yöÒ^T›Ú}�\*Á1¦¯0tšò÷yH±Ò…tg÷ý¤­‹‘4>…ÞbÑl¨u-ú‚g&óm°«A–{¾q §SR×”ï’›OQà¾‘ÃVD3Z¢6àeúPdÑç½"Daê~·7ÆÎj+Š£‰dn½b
Ú!»’‚Hñó\r
À¦üœ�Ë’ÇÍhyÂˆµ¤H\Áìr7~uˆL®€l™˜.Þñû�iéIÙá€ü)
-òÂ|šß¾Ä±“b„À\%�*TƒQ¶¬p�¯©d`}`;<ä�G¯úØÅ',°ÕŒ"ß Ñ'Ñ.Ñ„‰ ‰´‰È‰Ü‰ð‰ŠŠ,Š@ŠTŠhŠ|Š�Š¬ŠÀŠÔŠðŠ‹‹,‹@‹T‹h‹|‹�‹¤‹¸‹Ô‹è‹ü‹Œ<ŒPŒdŒxŒŒŒ¨Œ¼ŒÐŒäŒ��(�<�P�d�x�Œ� �´�Ð�ì�ŽŽ(Ž<ŽPŽdŽxŽ”Ž°ŽÌŽàŽôŽ��0�D�X�l�€�”�¨�¼�Ð�ä�ø�� �4�H�d�€�”�¨�Ä�Ø�ì�‘‘(‘<‘P‘d‘x‘”‘°‘Ä‘à‘ü‘’$’8’T’p’Œ’ ’´’Ð’ä’ø’“ “4“H“\“p“Œ“ “´“È“ä“ø“” ”4”`”t”�”¤”¸”Ì”à”ô”••0•D•X•l•€•œ•°•Ä•à•ô•––0–D–X–l–€–”–¨–Ä–Ø–ì–—,—@—T—h—|—˜—¬—À—Ô—ð—˜˜,˜@˜T˜h˜|˜�˜¤˜À˜Ü˜ð˜™™,™@™T™h™„™ ™¼™Ð™ä™ø™š š4šHš\špš„š˜š¬šÀšÔšèšüš›$›8›T›p›„›˜›´›È›Ü›ð›œœ,œ@œTœhœ„œ œ´œÐœìœ��(�D�`�|���¤�À�Ô�è�ü�ž$ž8žLž`ž|ž�ž¤ž¸žÔžèžüžŸ$ŸPŸ5ÑÿÿÿÿWÑ"ÿÿÿÿ�Ñ ÿÿÿÿ´Ñ5ÿÿÿÿðÑ%ÿÿÿÿÒ)ÿÿÿÿLÒ(ÿÿÿÿ{Ò/ÿÿÿÿ±ÒÿÿÿÿÍÒ'ÿÿÿÿûÒÿÿÿÿ&Ó-ÿÿÿÿTÓÿÿÿÿrÓ/ÿÿÿÿµÓÿÿÿÿÒÓ ÿÿÿÿúÓ%ÿÿÿÿ7ÔÿÿÿÿkÔ*ÿÿÿÿ–Ô.ÿÿÿÿÆÔ)1ÿÿÿÿ Õ%ÿÿÿÿFÕ1ÿÿÿÿxÕ
-2ÿÿÿÿ´Õ"ÿÿÿÿèÕ3ÿÿÿÿÖ3ÿÿÿÿPÖÿÿÿÿwÖ9ÿÿÿÿÇÖ%ÿÿÿÿúÖ
-HÿÿÿÿN×
-/ÿÿÿÿ¥×
-6ÿÿÿÿå×
->ÿÿÿÿ-Ø
-0ÿÿÿÿgØ
-Fÿÿÿÿ·Ø
-ÿÿÿÿùØ
-+ÿÿÿÿ.Ù
-ÿÿÿÿVÙ
-"ÿÿÿÿ‚Ù@)ÿÿÿÿñÙ
-/ÿÿÿÿ*Ú
- ÿÿÿÿTÚ-ÿÿÿÿ›Ú6ÿÿÿÿçÚ6ÿÿÿÿ2Û
-7ÿÿÿÿsÛ
-?ÿÿÿÿ¼Û
-ÿÿÿÿáÛ4ÿÿÿÿ.Ü+ÿÿÿÿfÜ-ÿÿÿÿ Ü3ÿÿÿÿÔÜ
--ÿÿÿÿÝ(ÿÿÿÿGÝ
--ÿÿÿÿ~Ýÿÿÿÿ°Ý6ÿÿÿÿíÝ>ÿÿÿÿ2Þ#ÿÿÿÿ]Þÿÿÿÿ™ÞÿÿÿÿÕÞ
-2ÿÿÿÿß
-.ÿÿÿÿIßFÿÿÿÿ�ß
-2ÿÿÿÿÌß
-2ÿÿÿÿà
-2ÿÿÿÿDà
-2ÿÿÿÿ€à
-2ÿÿÿÿ¼à
-2ÿÿÿÿøàFÿÿÿÿ?á
-9ÿÿÿÿ‚á
-7ÿÿÿÿÃá
-9ÿÿÿÿâFÿÿÿÿMâFÿÿÿÿ”â	2ÿÿÿÿÏâ+ÿÿÿÿã.ÿÿÿÿ6ã+ÿÿÿÿhã-ÿÿÿÿ�ã0ÿÿÿÿëã"ÿÿÿÿ*ä!ÿÿÿÿ]ä
-*ÿÿÿÿ“ä
-AÿÿÿÿÞä
-dÿÿÿÿLå
-$ÿÿÿÿzå1ÿÿÿÿ¶å1ÿÿÿÿèå
-ÿÿÿÿæ5ÿÿÿÿSæ&ÿÿÿÿ‡æ=ÿÿÿÿ×æ&ÿÿÿÿ+ç+ÿÿÿÿjçÿÿÿÿžç]ÿÿÿÿè!5ÿÿÿÿbèKÿÿÿÿ®è<"ÿÿÿÿé$ÿÿÿÿEé7
-ÿÿÿÿ‡éÿÿÿÿÏé;ÿÿÿÿ7ê?ÿÿÿÿ•êÿÿÿÿ¾ê2ÿÿÿÿøêÿÿÿÿ)ëÿÿÿÿ[ë=ÿÿÿÿªëIÿÿÿÿ
ì(ÿÿÿÿKìIÿÿÿÿ®ì!ÿÿÿÿäì!ÿÿÿÿíÿÿÿÿEí+ÿÿÿÿrí=ÿÿÿÿ°í5ÿÿÿÿæí@ÿÿÿÿ+î7ÿÿÿÿcî-ÿÿÿÿ‘îÿÿÿÿ®î-ÿÿÿÿëî
-"	ÿÿÿÿ>ï?ÿÿÿÿï!ÿÿÿÿ¦ï$ÿÿÿÿÞïÿÿÿÿð9ÿÿÿÿCð'ÿÿÿÿqð.ÿÿÿÿ¦ð)ÿÿÿÿÖð+ÿÿÿÿñÿÿÿÿ%ñ%ÿÿÿÿQñÿÿÿÿñ6ÿÿÿÿ¶ñ$ÿÿÿÿÛñ6ÿÿÿÿ*ò'ÿÿÿÿRò"ÿÿÿÿ|ò ÿÿÿÿ´ò!ÿÿÿÿòò*ÿÿÿÿ+ó>ÿÿÿÿkó7,ÿÿÿÿÎó6ÿÿÿÿô;ÿÿÿÿBô
-8ÿÿÿÿ„ô'ÿÿÿÿ¿ôEÿÿÿÿõFÿÿÿÿLõÿÿÿÿvõ<ÿÿÿÿÄõ)ÿÿÿÿþõ
-Uÿÿÿÿ_ö
-#5ÿÿÿÿÃö
-5ÿÿÿÿ÷
-AÿÿÿÿM÷
-;ÿÿÿÿ’÷
-Rÿÿÿÿî÷
-"ÿÿÿÿ5ø
-0ÿÿÿÿoø
- ÿÿÿÿ™ø
-%ÿÿÿÿÈøG6ÿÿÿÿKù
-3ÿÿÿÿˆù
-ÿÿÿÿ°ù2ÿÿÿÿú<ÿÿÿÿTú<ÿÿÿÿ¦ú
-=ÿÿÿÿíú
-Iÿÿÿÿ@û
- ÿÿÿÿjû4ÿÿÿÿ¸û2ÿÿÿÿ÷û4ÿÿÿÿ8ü7ÿÿÿÿpü
-+ÿÿÿÿ¥ü/ÿÿÿÿçü
-5ÿÿÿÿ&ýÿÿÿÿZý:ÿÿÿÿ›ýDÿÿÿÿæý*ÿÿÿÿþ$ÿÿÿÿ^þ$ÿÿÿÿ¤þ
->ÿÿÿÿìþ
-3ÿÿÿÿ)ÿRÿÿÿÿ|ÿ
-2ÿÿÿÿ¸ÿ
-2ÿÿÿÿôÿ
-2ÿÿÿÿ0
-2ÿÿÿÿl
-2ÿÿÿÿ¨
-2ÿÿÿÿäRÿÿÿÿ7
-9ÿÿÿÿz
-7ÿÿÿÿ»
-9ÿÿÿÿþRÿÿÿÿQRÿÿÿÿ¤	6ÿÿÿÿã/ÿÿÿÿ2ÿÿÿÿR/ÿÿÿÿˆ2ÿÿÿÿÂ+	ÿÿÿÿ!ÿÿÿÿO&ÿÿÿÿ†
-:ÿÿÿÿÌ
-Kÿÿÿÿ!
-tÿÿÿÿŸ
-*ÿÿÿÿÓ3ÿÿÿÿAÿÿÿÿS
-ÿÿÿÿw!=ÿÿÿÿÕ/ÿÿÿÿDÿÿÿÿj0!ÿÿÿÿË*ÿÿÿÿ(ÿÿÿÿOfÿÿÿÿÆ!;ÿÿÿÿ#	Sÿÿÿÿw	B+ÿÿÿÿä	-ÿÿÿÿ(
-Gÿÿÿÿ{
-)ÿÿÿÿÏ
-&GÿÿÿÿLDÿÿÿÿ¯ÿÿÿÿÖ9
-ÿÿÿÿÿÿÿÿMÿÿÿÿ�NÿÿÿÿâKÿÿÿÿI
(ÿÿÿÿˆ
Iÿÿÿÿí
,ÿÿÿÿ0+ÿÿÿÿl#ÿÿÿÿª-ÿÿÿÿÙFÿÿÿÿ =ÿÿÿÿ^Iÿÿÿÿ¬:ÿÿÿÿç0ÿÿÿÿÿÿÿÿ6,ÿÿÿÿt
-/ÿÿÿÿÐLÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
+Þ•–0à4w	�il�‚„�Œ‘ª
ª#ª7ªPªAoª?±ª:ñª,«C«V«$u«
š«¨«%È«î«ð«A¬&D¬k¬„¬�¬¶¬Æ¬ å¬­&­?­V­c­Pv­Ç­*ß­;
+®F®FX®6Ÿ®6Ö®:
¯5H¯,~¯D«¯Nð¯J?°)Š°G´°:ü°B7±Lz±)Ç±Bñ±L4²�²—²D®²Gó²;³Z³l³€³˜³­³3Ì³´´0)´Z´j´z´+”´+À´+ì´#µ<µTµ]µ{µ(’µ?»µ>ûµ%:¶&`¶(‡¶)°¶GÚ¶7"·Z·q·‘·®·Ç·â·¸¸6¸L¸d¸x¸�¸,©¸Ö¸æ¸ÿ¸¹.¹=¹S¹h¹‚¹™¹1®¹à¹ñ¹þ¹º0º#Hº+lº&˜º5¿ºõº
+»"»<»R»l»…»œ»²»$Ç»ì»¼%¼=¼$R¼w¼‹¼ ¼<¹¼ö¼½
½"½6½K½ c½„½Ÿ½¯½Ï½ë½¾$¾=¾P¾*c¾Ž¾ ¾&²¾Ù¾0í¾¿"2¿	U¿_¿#r¿–¿¯¿À¿Ù¿"ò¿À")À#LÀ#pÀ”À#©À#ÍÀñÀþÀÁ:Á@ÁMÁUÁZÁwÁ
+•Á Á¥Á!«Á ÍÁîÁóÁøÁÂ0ÂPÂUÂ!ZÂ|Â�Â”ÂšÂŸÂ¤ÂªÂ®Â"³ÂÖÂÛÂûÂÃ&/ÃBVÃ™Ã¹Ã¾ÃÃÃÊÃÐÃÕÃçÃîÃÄÄ!Ä:ÄNÄ_ÄpÄ�Ä’Ä£Ä»Ä	ÊÄ
ÔÄ
âÄ
+ðÄ
+ûÄ
+Å
+Å
+Å$'Å
+LÅ#WÅ
+{Å†Å˜Å!°ÅÒÅçÅ
+öÅ
Æ	ÆÆ
+*Æ5Æ<ÆTÆnÆ€Æ�Æ¦ÆÁÆÐÆéÆøÆÿÆÇ(/Ç/XÇLˆÇÕÇçÇ+öÇ"ÈA>È€ÈšÈ´ÈÎÈ8ãÈÉ4ÉIÉ&cÉŠÉ©É2ÄÉ?÷É&7Ê^Ê(}Ê¦Ê"¹ÊÜÊ*üÊ6'Ë{^ËrÚËxMÌÆÌeÜÌ7BÍ:zÍµÍ?ÇÍ@ÎUHÎ`žÎbÿÎqbÏÔÏôÏ&Ð9ÐœSÐ'ðÐ,Ñ1EÑ'wÑ$ŸÑ/ÄÑ-ôÑ0"Ò&SÒ8zÒ³Ò=ÓÒ9Ó:KÓ6†Ó6½ÓôÓ/Ô5DÔ+zÔ$¦Ô6ËÔ"Õ&%Õ6LÕ=ƒÕ:ÁÕ:üÕD7Ö8|Ö9µÖCïÖ:3×7n×8¦×@ß×G Ø9hØ,¢Ø0ÏØ#Ù$Ù=?Ù-}Ù6«ÙâÙ7þÙ;6Ú:rÚ"­Ú3ÐÚ%Û.*ÛYÛ0yÛ1ªÛ'ÜÛÜE"Ü8hÜ(¡ÜcÊÜ4.Ý&cÝ2ŠÝ&½ÝkäÝ*PÞ*{Þ4¦Þ]ÛÞ89ßrßO‘ßbáß,Dà+qà)�àYÇà0!á=Rá3�á2ÄáB÷áL:â‡â4¥â)Úâ$ã3)ã9]ã6—ã/ÎãDþã&CäWjäUÂä8å%Qå(wå& å,Çå#ôå>æBWæBšæÝæ'ýæE%ç9kç4¥ç3ÚçJè(Yè;‚è¾è0ÝèDé.Sé9‚é?¼é?üéG<ê?„ê2Äê8÷êS0ë'„ë.¬ë,Ûë'ì60ì gìYˆì/âì4íNGíª–íIAî9‹î3Åî¾ùî<¸ï<õïF2ðPyðoÊð>:ñFyñ`Àñ~!òF ò‚çò[jó3Æó@úóM;ôm‰ô7÷ô#/õSõ(iõ&’õI¹õWö+[ö5‡ö½öÒö8æö"÷$B÷'g÷9�÷CÉ÷!
ø!/ø*Qø/|ø1¬ø/Þø/ù0>ù*où0šù<Ëùiú=rúB°ú=óú-1û&_û.†û8µû:îûF)ü?püV°üBý(Jý>sý;²ý=îý!,þ4Nþƒþ#ŸþLÃþIÿ8Zÿ+“ÿ8¿ÿ2øÿ9+:e3 ,Ôu w.˜.ÇJö0ABr/µ,å'%:,`N�ÜCöJ:@…JÆ*%<<b1Ÿ Ñlò<_<œ+Ù,!HN6—AÎAJR>�JÜJ'	<r	<¯	.ì	(
+lD
+v±
+A(6j¡4¿0ô+%AQ3“@Ç!
#*
.N
B}
FÀ
4%<:b2�3Ð*9/Ci(­CÖ:TUJª5õ4+6`P—/è/&H&o5–'Ì0ô5%([3„%¸&Þ'%=M#‹+¯3Û(@8Cy5½'ó,gH4°måAS@•HÖGKgI³LýHJC“Y×510g4˜MÍN1j)œ)Æ/ð) +J7v3®6â9XS[¬C6L>ƒ=Â*.+2Z[�&é- ,> k † /¡ (Ñ $ú 0!'P!8x!"±!AÔ!)"=@"#~"@¢"2ã"+#"B#5e#<›#'Ø#%$(&$RO$?¢$Fâ$3)%1]%�%D®%Hó%D<&K�&aÍ&s/'B£'‚æ'Ti(=¾(bü(b_)gÂ)g**0’*(Ã*4ì*5!+)W+3�+-µ+/ã+H,F\,7£,GÛ,+#-$O-2t-5§-.Ý-/.+<.)h.-’.^À.K/Fk/²/"Î/ñ/50(B0Ek0D±0Dö0F;1_‚1^â1"A2*d2+�28»2:ô2'/3;W38“3'Ì3'ô334>P4-�4,½4ê4I	5S5p5.Ž5/½5í5$
6326f6F„6&Ë6!ò6675K7)�7«7Å7ä7+þ7 *8$K8.p8.Ÿ8%Î82ô83'9)[9\…9Dâ9H':Dp:Lµ:X;H[;)¤;*Î; ù;5<9P<@Š<+Ë<6÷<\.=A‹=.Í=Mü=3J>=~>H¼><?8B?3{?4¯?4ä?0@@J@1‹@B½@LAAMAL�A8ÜABB+XB2„B<·B3ôBX(CP�C.ÒC`D&bDP‰D\ÚDX7Ep�EAF+CFKoF.»F<êF,'GXTG,­GÚG"òG%H;H3[H2�HÂH4âHJI?bI@¢IWãI=;J*yJ5¤J%ÚJBK%CK4iK>žK<ÝKCLB^L;¡L3ÝL)M$;M!`M'‚M8ªMãMöNO(O7O!LOnO$„O©O1¼OVîOIEPI�P<ÙPQ)Q=QOQiQ
}Q'‹Q³Q
¿QÍQ%ÞQ\R;aR�R¯RÅRÈRåRòR	SS'S8S,ESrS†SœS6¸S2ïS0"T$ST6xTZ¯T6
+U(AU2jU3�U@ÑU:V.MV;|V"¸VÛV(øV/!W/QW1�W8³W#ìW'X28X3kXŸX;¯XëXòXúXYY&Y.YBYWYlY~Y‘Y¨Y¿YÑYïY	ZZ6Z	KZ"UZxZŠZ)¦Z/ÐZ"[#[:[C[O[S[f[x[Š['œ[Ä[ á[#\&\@\ R\s\H‘\1Ú\#],0]B]]X ]aù]:[^.–^7Å^1ý^;/_(k_:”_,Ï_-ü_E*`-p`ž`2½`ð`aa*aAa)Wa�a!—a$¹a,Þa(b-4bIbb¬b5Ébÿb
+cCcIcc­c¿cÇcÏc
ícûc>
d?LdAŒdÎd/êd+e8Fee$•e!ºe1Üef-f+LfxfŒf¥f
+²f½fBÜfg%1gWgig.‡g-¶gGäg3,h`h"h¢h³hÄhÖh$ïhi!1iSi5ei›i	­i·iÉißiÿij5jDjVj	]jgjljxj‡jžjºjÐjâjkk;kOkakyk-—kÅk×kékýkl',lTlclul‡lŽl!•l·l:Ól%m%4mZmAsm;µmCñm=5nCsn=·n"õn7o<Po<�o)Êo5ôo*p3pvNp*Åpðp'q*q<qCqJq
+Yq(dq�q'ŸqÇqäqüqr#4r$Xr,}r.ªr,Ùr.s5s"Rs,us.¢s!Ñs1ós0%t2Vt,‰t.¶t#åt	u)u(=u/fu!–u¸u(Õu#þu+"vNv,gv ”vµvÎvîvw"w#Aw-ew"“w¶wÈwÛwçwüw&x	5xF?x/†x¶x-ÇxJõxM@yŽy®yÅyØy-õy#z,z4zA@z>‚zÁzAÓz7{BM{!�{²{˜Ò{k|‡|™|«|#À|2ä|.}#F}j}w}„}”}œ}:µ}+ð}#~@~S~l~„~,œ~:É~	d&‹6žMÕM#€<q€g®€b�<y�1¶�(è�$‚6‚/L‚+|‚¨‚Ä‚Þ‚û‚>ƒ<Vƒ“ƒ4¯ƒ'äƒ$„61„h„y„‘„¨„¹„Ñ„é„û„
……1…K…f…x…‰…¡…À…2ß…†',†LT†4¡†7Ö†0‡'?‡g‡‡‡™‡-³‡+á‡+
ˆ*9ˆ	dˆ	nˆ
+xˆ
+ƒˆŽˆ£ˆ¾ˆÍˆâˆñˆ1öˆ(‰/H‰x‰—‰ ¨‰'É‰'ñ‰"Š&<Š0cŠ”Š²ŠÇŠÐŠ9îŠ(‹,=‹aj‹9Ì‹)ŒC0ŒItŒE¾ŒY�Y^�;¸�;ô�M0Ž/~Ž5®Ž:äŽ5�4U�9Š�7Ä�9ü�D6�G{�DÃ�E‘CN‘-’‘0À‘4ñ‘>&’;e’8¡’*Ú’6“/<“;l“3¨“%Ü“1”!4”VV”9­”\ç”AD•1†•?¸•:ø•73–>k–$ª–EÏ–I—_—Z|—/×—O˜PW˜3¨˜ Ü˜?ý˜:=™&x™
+Ÿ™0ª™%Û™"š%$š0Jš!{š�š¶šÑšæšóšO›R›,q›7ž›
Ö›ä›1ó›%œ9œLœ_œ)|œ*¦œ,Ñœ6þœ5�$U�_z�"Ú�(ý�A&žhž,†ž2³žHæž/Ÿ?Ÿ
+PŸ$[Ÿ€Ÿ“Ÿ³Ÿ¼ÉŸ¹† @¡/R¡‚¡�¡»¡*Û¡L¢2S¢-†¢)´¢"Þ¢££)£>£4M£‚£0Š£»£%Ö£9ü£6¤<H¤=…¤3Ã¤5÷¤2-¥7`¥B˜¥LÛ¥(¦9¦S¦[¦c¦¦H†¦Ï¦4Ò¦&§.§7§
+N§Y§2u§-¨§OÖ§&¨E¨"J¨*m¨%˜¨ ¾¨ß¨ý¨©C$©¤h©
ªª 4ªLUª¢ª«ª¿ªÔªêª««4«E«W«k«*s«Nž«[í«I¬AM¬�¬®¬Æ¬ã¬6û¬2­ R­8s­+¬­Ø­ë­û­®®0®D®X®l®®
’® ®Lº® ¯(¯DG¯PŒ¯Ý¯ï¯2
+°$=°b°‚°5•°Ë°!æ°±±2±FJ±J‘±/Ü±F²S²"e²ˆ²˜²M§²9õ²;/³7k³£³»³Ø³ç³,ú³$'´JL´)—´(Á´%ê´(µ9µ
+Uµ,`µ�µ)§µÑµïµ	¶!¶)¶A¶)Y¶ƒ¶
™¶#§¶Ë¶'ã¶··2·L·i·ƒ·#�·%³·Ù·ö·
¸¸76¸n¸Š¸£¸¸¸Ê¸Ý¸ñ¸¹¹J1¹J|¹JÇ¹Iº:\º—º-¶º;äº+ »@L»<�»8Ê»8¼5<¼8r¼U«¼.½>0½Io½h¹½y"¾>œ¾NÛ¾I*¿dt¿0Ù¿;
+À8FÀFÀ5ÆÀ&üÀ.#Á[RÁ-®Á.ÜÁ0Â<<Â!yÂ›Â!´Â)ÖÂIÃ`JÃG«Ã.óÃ,"ÄhOÄE¸Ä0þÄ6/ÅkfÅEÒÅÆ&6ÆS]ÆE±Æ#÷Æ<Ç<XÇe•ÇQûÇ2MÈ/€È/°È4àÈ=É9SÉ0�É7¾É%öÉ'Ê=DÊ6‚Ê@¹ÊúÊ2ËMË,QË~Ë
„Í’Í§Í"ÄÍWçÍS?ÎG“ÎÛÎôÎÏ&(ÏOÏ^Ï%~Ï¤Ï¦ÏT¸Ï(
Ð6ÐQÐoÐŠÐ šÐ"»Ð!ÞÐÑÑ5ÑEÑV[Ñ²Ñ.ÊÑ@ùÑ:ÒPTÒE¥Ò>ëÒB*ÓDmÓ.²ÓJáÓV,ÔOƒÔ/ÓÔEÕEIÕL�ÕXÜÕ/5ÖLeÖX²Ö×&×QA×E“× Ù×ú×Ø$Ø>Ø#UØ7yØ±ØÈØ=ÚØÙ(Ù8Ù,RÙ,Ù,¬Ù#ÙÙýÙÚ Ú>Ú'WÚ=Ú<½Ú"úÚ%Û%CÛ(iÛK’Û9ÞÛÜ1ÜQÜnÜ‡Ü£ÜÃÜÝÜúÜÝ.ÝBÝYÝ,sÝ Ý°ÝÉÝæÝÞÞ+Þ>ÞXÞoÞ6…Þ¼ÞÑÞÞÞ÷Þß*+ß8Vß.�ß<¾ßûßà*àEà\àyà’à©à¿à1Öàá!á'Aáiá)€áªáÀáÕá<îá+â:â
IâWâlâ�â(�âÆâáâóâã 1ãRãkã‹ãŸã*²ãÝãïã,ä.ä0Bäsä'‡ä¯ä¼ä#Ïäóäå!å:å$Uåzå%Žå#´å#Øåüå#æ#4æXægæ…æ¤æªæ¹æÁæ Ææ/çæ
+ç"ç'ç$-ç0Rçƒçˆç�ç¦çÅçäçéç-îçè0è7è=èBèGèMèQè$Vè{è€èŸè"¸è+ÛèDéLéképéué|é‚é‡é™é é¸éÑéØéöéê ê1êBêSêdêxê	Œê
–ê
¤ê
+²ê
+½ê
+Èê	Óê
+Ýê0èê
+ë-$ë
+Rë]ëoë*†ë±ëÈëÙëåë	ùëì
ì#ì*ìDìbìtìƒì¢ìÁì!Õì÷ìí"í.í8?íAxíQºíîî21îdîA€îÂîÝî÷îï6*ïaï{ï�ï1ªï)Üïð9!ð?[ð1›ð)Íð,÷ð$ñ":ñ%]ñ*ƒñ6®ñ…åñzkòyæò`óo}ó;íó>)ôhôF|ôHÃô`õgmõgÕõw=öµö&Õö=üö:÷©W÷&ø1(ø0Zø&‹ø#²ø.Öø,ù32ù%fù4Œù!ÁùEãùA)úBkú<®úBëú.û3KûFû)Æû"ðû?ü#Sü(wü9 ü@Úü<ý=XýG–ý:Þý<þFVþ<�þ:Úþ:ÿQPÿX¢ÿNûÿ9J2„%·Ý?û-;7i¡A¼AþB@ƒ7¢#Ú5þ'4?\/œ(ÌõMA`4¢k×6C,z9§,ár%�'§6ÏrAy »^Ül;0¨*Ù,	[1	9�	DÇ	;
+7H
+J€
+TË
+ =>+|&¨8ÏGFPE—NÝ(,
jU
[À
5/R1‚)´.Þ$
F2Ky>Å'5,Ob7²2ê1ZO0ªIÛ"%5HX~D×IQfP¸\	Tf=»MùkG7³0ë.)K;u)±rÛ5NC„YÈ°"QÓB%=hÆ¦BmB°MóTA�–GN`n¯–RµŠf“4úE/YuzÏ4J 1 ± 4Î +!T/!b„!/ç!9"Q"g"C")Ã"'í",#DB#M‡#%Õ#%û#.!$3P$5„$3º$4î$8#%.\%8‹%7Ä%oü%;l&H¨&;ñ&6-')d'@Ž'BÏ'I(M\(Fª(\ñ(IN)/˜)GÈ)A*GR*&š*;Á* ý*#+KB+JŽ+7Ù+/,CA,=…,DÃ,C-;L-1ˆ-Žº-$I.4n.4£.SØ.2,/G_/6§/4Þ/701K01}0Y¯0 	1K*1Xv1QÏ1]!222)²2OÜ29,3+f3{’3F4FU4(œ4 Å42æ4I58c5Cœ5Cà5M$6=r6N°6Mÿ6BM7R�71ã718sG8}»8G99>�9+À96ì94#:+X:M„:@Ò:>;*R;*};/¨;OØ;Z(<8ƒ<(¼<Då<8*==c=-¡=BÏ=X>&k>X’>Dë>f0?P—?4è?6@@T@`•@Bö@?9A.yA2¨A9ÛA/B8EB=~B/¼B8ìB-%C(SC"|C-ŸCDÍC)D2<D@oD&°DC×DOE9kE&¥E1ÌEwþE?vFr¶FL)GJvGRÁGQHUfHN¼HaIUmIOÃIjJH~J9ÇJ;KZ=KW˜K;ðK/,L/\L0ŒL.½L2ìL?M:_M=šMAØMdNgNLçN=4OGrOAºO0üO3-P7aPf™P1Q12Q1dQ–Q´Q5ÒQ0R29R7lR1¤RIÖR$ SLES0’SAÃS)TD/T3tT*¨T+ÓT=ÿTD=U,‚U'¯U0×UYVGbVSªV9þV:8W!sWI•WPßWI0XVzXjÑXw<YJ´Y�ÿY_�ZGðZm8[n¦[r\tˆ\;ý\/9]5i]AŸ].á]8^=I^4‡^M¼^K
+_AV_W˜_6ð_5'`7]`:•`0Ð`5a17a.ia6˜ahÏaR8bI‹bÕb%ôbc=8c+vcL¢cKïcK;dM‡dfÕde<e*¢e3Íe1f?3fBsf1¶f9èf>"g+ag.�g;¼gDøg1=h4oh)¤h[Îh!*i&Li:siA®i,ði+j9Ij ƒjN¤j6ój.*k=YkF—k3Þkl!/lQl1nl+ l/Ìl:ül:7m0rmB£mCæm**nlUnMÂn[oFloT³oSp[\p4¸p+íp%q=?q=}qC»q0ÿq>0r`orJÐr,sYHs8¢sEÛsO!t4qt@¦t3çt<u=Xu4–uNËu0v=KvG‰v<ÑvHw3WwN‹w3Úw8xBGx8ŠxcÃxY'y7�yf¹y* zWKzi£ze
{ws{Dë{/0|I`|4ª|Aß|<!}d^}:Ã}þ}+~)A~&k~7’~6Ê~-;/Ik@µ@ö\7€=”€1Ò€<�,A�>n�-­�9Û�C‚KY‚R¥‚Oø‚HHƒ;‘ƒ1Íƒ/ÿƒ#/„-S„<�„¾„#Ñ…õ…
††)*† T†%u†›†:±†cì†VP‡V§‡Iþ‡Hˆ]ˆsˆ†ˆ¡ˆ¸ˆ+Åˆñˆþˆ
‰%‰bC‰;¦‰â‰ó‰
+Š%
Š3ŠBŠ]ŠlŠ~Š
�Š,�ŠÊŠßŠ÷Š2‹6G‹0~‹'¯‹<×‹UŒ-jŒ-˜Œ,ÆŒ-óŒ=!�?_�3Ÿ�?Ó�"Ž$6Ž&[Ž4‚Ž8·Ž3ðŽ=$�&b�*‰�6´�>ë�*�B9�|�ƒ�‹�£�²�¹�Á�Õ�ê�ÿ�‘$‘:‘P‘"k‘"Ž‘
+±‘!¼‘%Þ‘’#’7’ I’(j’.“’&Â’é’	““!“%“B“T“f“0x“"©“,Ì“-ù“"'”J”%c”!‰”I«”<õ”02•4c•N˜•bç•fJ–A±–3ó–='—5e—V›—4ò—J'˜&r˜)™˜MÃ˜7™"I™:l™§™"¼™$ß™š$š)9šcš$xš$�š*Âš&íš+›D@›…›7£›!Û›ý›IœUXœ®œÀœÈœÐœîœ�=�>Q�Q��'â�1
+ž1<ž=nž¬ž+Èž-ôž8"Ÿ$[Ÿ&€Ÿ1§ŸÙŸõŸ 
+ &) PP ¡ )³ Ý !ï 9¡6K¡U‚¡GØ¡- ¢(N¢w¢‹¢Ÿ¢!±¢$Ó¢'ø¢! £B£:T£�£	¡£«£½£ ×£ø£ ¤3¤J¤\¤	c¤m¤t¤�¤–¤«¤Ë¤ã¤ö¤¥0¥P¥g¥x¥’¥9²¥ì¥ý¥¦!(¦J¦,_¦Œ¦œ¦®¦À¦Ç¦&Î¦õ¦>§*R§)}§§§JÆ§H¨CZ¨Bž¨Há¨@*©-k©:™©EÔ©Eª,`ª>�ª	ÌªÖª{ðª0l«�«$¯«Ô«æ«í«ô«
+¬4¬F¬/X¬ˆ¬¥¬½¬Ý¬#ö¬$­<?­9|­<¶­9ó­'-®5U®<‹®9È®0¯A3¯@u¯=¶¯<ô¯91°.k°!š°¼°(Ô°/ý°--± [±,|±&©±3Ð±²4!²&V²}²!š²¼²%Ô²%ú² ³2>³(q³š³¬³À³Ñ³ð³2ÿ³2´J;´6†´½´0Ó´aµbfµ'Éµñµ¶!'¶-I¶w¶€¶�¶Mž¶Dì¶1·HC·<Œ·IÉ·&¸&:¸¢a¸!¹&¹8¹J¹.d¹4“¹.È¹*÷¹"º1º@º	Vº `ºD�º5Æº-üº*»@»Z»r»2Œ»F¿»¼	$¼g.¼–¼>©¼Nè¼N7½A†½tÈ½p=¾=®¾6ì¾-#¿&Q¿x¿H‘¿4Ú¿À,À,JÀ,wÀP¤ÀQõÀ&GÁInÁ4¸Á2íÁA ÂbÂwÂ—Â²ÂÇÂçÂÃÃ1ÃGÃ!]ÃÃžÃ´ÃÉÃ*æÃ'Ä59ÄoÄ1‹ÄR½Ä=Å7NÅ2†Å-¹Å çÅÆ#Æ5?Æ3uÆ3©Æ0ÝÆ	Ç	Ç
+"Ç
+-Ç8Ç QÇrÇ�Ç–Ç¥Ç4ªÇ$ßÇ9È >È_È#qÈ•È4±È)æÈ0É>AÉ€ÉžÉ³É#¼ÉAàÉ"Ê-5ÊycÊ4ÝÊ(ËG;ËOƒËVÓË]*Ì]ˆÌ?æÌ>&ÍXeÍ,¾Í/ëÍ7Î1SÎ1…Î:·Î4òÎ:'ÏLbÏF¯ÏHöÏH?ÐJˆÐ3ÓÐ8Ñ<@ÑE}ÑBÃÑ?Ò+FÒJrÒ.½Ò<ìÒ3)Ó$]Ó/‚Ó ²Ó[ÓÓ3/Ô\cÔNÀÔ:ÕLJÕ9—Õ:ÑÕ@Ö(MÖMvÖJÄÖ)×_9×+™×]Å×O#Ø0sØ"¤ØCÇØ>Ù-JÙxÙ3„Ù(¸Ù%áÙ(Ú?0ÚpÚ‹Ú$¨ÚÍÚèÚþÚSÛ#dÛ7ˆÛAÀÛÜÜ;#Ü_ÜsÜ†Ü™Ü/¸Ü3èÜ+Ý;HÝ„Ý& ÝhÇÝ$0Þ,UÞM‚ÞÐÞ1ðÞ7"ßOZßªß»ßÍß/Úß
+à# àDàÑ`àÎ2áâ6â&Mâ%tâ!šâ7¼â[ôâ4PãI…ã5Ïã.ä4äJä_äuäD…äÊä7Òä*
+å45å9jå¤åS¸åOæD\æW¡æPùæIJçQ”çXæç?èQèpèxè€èœè\£èé<éBé^é"gé
Šé˜éCµé;ùéo5ê¥êÅê&Ìê1óê5%ë#[ë$ë
¤ë$²ëO×ë¦'ìÎìàì9øìX2í	‹í•í®íÈíãíþí î;îNîbîvî8~îW·îkï{ïEï"Åïèï#ð!$ðBFð"‰ð&¬ð@Óð5ñJñ]ñrñzñ’ñ©ñ½ñÑñåñøñòò\>ò$›ò)ÀòYêòZDóŸó$°ó1Õó)ô'1ôYô<mô!ªô1Ìôþô	õ9õJKõL–õ;ãõGögö.‚ö±öÁöNÐö?÷7_÷B—÷Ú÷ ø÷ø,ø2?ø,røXŸø4øø*-ù%Xù6~ù#µù
+Ùù2äùú96ú$pú•ú²úÑúÞúüú2ûLûiû/{û «û/Ìûüûü-ü#KüoüŽü'Ÿü*Çü$òüý5ýJýEiý¯ýÎýëýþþ%þ9þMþcþSyþXÍþR&ÿUyÿEÏÿ-4@b+£CÏ6DJ@�CÐ2UG0�EÎTui†ßEfZ¬Tx\4Õ?
+:JF…>Ì*16Wh4À4õ5*>`'ŸÇ#ä&	H/	dx	HÝ	/&
+-V
+f„
+Dë
+50:fi¡D P(qošO
+
#Z
B~
BÁ
dMi9·4ñ6&?]F�:ä8=X'–)¾Vè9?HyÂ8â.e1Ôé-i|‡§�óv™+]ü^:�çWJ\¾ÌÿRp®v
+ŠÍ%†rõ;‡/ö:Dv£úÁgÉ\ºlfÁ"µŽwj¿Ì©—À:Cz4­ª�2ƒ±{€QxHçâì™sÍiÑA6§HsÆà¢Gþ tdfšó'
+Ø ÄÃY³’6v<
ObãCŒ—’¹Å†C�×<ëÚkc¯lµB\(6“Ì~H…T~WØ“I„,ÛþfÖêøÔÌ-ù(Èš}WXm7ÓÑøC”e—p?”9!sã&7l•xýµÍ*$…´£`†¸÷8®oQ¹º”—7ô i8ŠŸ£`x¬ÝaŠÎ¶s·â6ð2´ÁrFA¦cò<„^±Âá¼¸+Ñ¶õ�_œæéˆIz0H'–tRg+…©‘?�ß"Œ¢¥ïåP¥p–žÀ&êy˜¨V�pìfœE£Ý@”!ú‰0ðÄ4j)¨qÝe@ú CDÞC·>=›K„V¯ú°7Ö˜‚¤Ê»Q…]>ÉôLÒKÆ›üéÐåÖÜ2+'„.y|:àŒRaég±k:&LÔá‚sÏK1¾kp³ŽÔÅa¸ÙŸ÷ª×Ã*‘×3þÐŠgqù=FÓDMÈEÞ)ˆ—jË8bË-žcˆû)ßÌú)j5kE¡�ÔÛD»¿S€„h5œoW¾A'§M3(m¹eÉ›âè(Ã,£j8©»ê
Ü2UænÙ´LÜ^‰ñõóPP¦Ÿùþ„o�	,ˆØ[�2uJÍçS_ùòHìEðÅÈ•OUGz �­Z°9‰XÒïy"¬Œ5¯dÕã´…àÁïµ&r~>�_AkûIÙ	nö¹fÃ¸@�àÝá°Æ]Yx«gn¢^~VRôF;>ÚtfO™Ï�LSè™‡í’S÷@¶+w@!J™ëì±4ƒ‚&q-mäOÖ=TPëbÉ
“šûõ?á9�ZÇöu/7G�E!%_N‹€ýkÊˆ¢~¥°˜jÚ?M!n&;Ëê€î]«†ø�²�ÑO[‘Æ¿%h+;a.ºÛÎ-«Mò{«}0eýY\-Pó[´Zhn1ç	æ•°õVhqg½•R§“)'³{–‡ÎÞ¡U…yÕ`‡§ÿ/iKl/² ïyÄU{Iï,TWæ{ÐÀåŠOëÇz%B4JGwáV/¼·
[™“ËzAæÓÄXÕB
¶–Œ1.5Èœº·ÐLÄK¡~0Fh?
‹"Úº†r‹?‚èÅÑÁÿsßŸÐªtlð¡ãŽêùÿÛÕ‚îdòƒî`Wy	^ú¿è)KœåJ‡¸ñÂ%ÏžI®ZšŸXÒ½íÑ ZÏbè"ˆuN(Ùµ–ë	3�¯D�Í×Žµ1
í	.X$Çž^¦å	üY¾ ­m¡!óš§^`Î!%çLj¢Z2i×0ìãU°Î1]ò€'Uß~ŒîÚ¤�Ø’¾H¬
+bîrFqäÀ�ËNÌ·Ðaðx‹K¼»EÞ q>ÞfÕûJNRž¶w÷9‘þåŽœÂçñq'`:Í½�QØ#¸É�{’"ioô.LÜ#4}8rDl,<ÂY±äÊ—†¼‰NntŠFÒ‡]Æ6‹á}3šƒäW8=wMNShÓÇ)½}ËaÓÅ÷,9�¯ƒug
+üb‹|+bd=ÁoD¤@©Y­»cdð6¥¿Ê¬5
+T»ét\vxíe|¦ ˜¬>w#‰9•ê@ÊiàÜâìEv”uQOÏ{]«[üÀa,kö6øä©¬ï­Üüã†_.„R³�‚$3›þÕz 5T²m³/¤T�3ØªU5}BƒyM7Hº9p¨˜”Ã*Û=e|÷Ów‹XÄ02JíÔ«¥ë*�3V#æ‰ô¦‘ý [c”ÖøÝ#|½u*ÊÉžMødQŠ`¥<•A¼î©_ý¯âÃ‘¨BöAÿ?�#&Ò7cß‚p¤;(È:…ª›=óz¿²íâvVt1Nª[oòŽB®ˆ²�ñÙnÞl*>/¹•õ“-®‘Å›*%F$sù¹
+u$¢¼ä–£$.r
+XÚG"I;�B­G²ýÇ½ÒÀThGdÏÝ’¡S·<m±ƒ’}–ÆPxà0ö¶QÖZô¨<Âß®m³(;PñÇÈYÛû4Ù¦€ÿ˜é¤ñ\“|oŸ ��_�´CŽcS#èûI‰×ÎÂ8\€Œ$¨¾4NU\”“°“Ä“Ø“ì“””(”<”P”d”x”Œ” ”¼”Ð”ì”••(•<•P•d•x•Œ• •¼•Ð•ä•–$–@–T–h–|–�–¬–À–Ô–è–——,—@—T—h—|—�—¤—¸—Ô—ð—˜˜<˜P˜d˜x˜Œ˜ ˜´˜Ð˜ì˜™™0™D™X™l™€™”™¨™¼™Ð™ä™ø™š š4šHš\špš„š š¼šÐšäš››(›<›P›d›x›Œ› ›´›Ð›ì›œœ8œLœ`œtœ�œ¬œÈœÜœðœ� �4�H�\�p�„�˜�¬�È�Ü�ð�ž ž4žHž\žpžŒž¸žÔžðžŸŸ,Ÿ@ŸTŸhŸ|Ÿ�Ÿ¤Ÿ¸ŸÌŸàŸüŸ , @ T h | � ¤ ¸ Ì à ü ¡$¡@¡d¡€¡”¡¨¡¼¡Ð¡ì¡¢¢(¢D¢X¢l¢€¢”¢¨¢¼¢Ð¢ä¢ø¢£0£D£X£|£�£¤£¸£Ì£à£ô£¤,¤H¤\¤p¤„¤˜¤¬¤À¤Ô¤è¤ü¤¥$¥8¥L¥`¥t¥ˆ¥œ¥°¥Ä¥à¥ü¥¦$¦@¦T¦h¦|¦�¦¤¦¸¦Ì¦à¦ô¦§,§@§\§x§Œ§ §´§Ð§ì§¨¨0¨L¨`¨t¨ˆ¨œ¨°¨Ä¨Ø¨ì¨©©0©D©`©t©ˆ©œ©°©Ì©ø©cÿÿÿÿ…"ÿÿÿÿ» ÿÿÿÿâ5ÿÿÿÿ%ÿÿÿÿJ)ÿÿÿÿz(ÿÿÿÿ©/ÿÿÿÿßÿÿÿÿû'ÿÿÿÿ)-ÿÿÿÿWÿÿÿÿtÿÿÿÿŸ $ÿÿÿÿë ÿÿÿÿ%ÿÿÿÿPÿÿÿÿ„*ÿÿÿÿ¯.ÿÿÿÿß)1ÿÿÿÿ9%ÿÿÿÿ_9ÿÿÿÿ™
+2ÿÿÿÿÕ"ÿÿÿÿ	3ÿÿÿÿ=ÿÿÿÿd9ÿÿÿÿ´%ÿÿÿÿç
+Hÿÿÿÿ;
+/ÿÿÿÿ’)ÿÿÿÿÓ
+6ÿÿÿÿ
+>ÿÿÿÿ[
+0ÿÿÿÿ•
+Fÿÿÿÿå
+ÿÿÿÿ'
++ÿÿÿÿ\
+ÿÿÿÿ„
+"ÿÿÿÿ°@)ÿÿÿÿ
+/ÿÿÿÿX
+ ÿÿÿÿ‚-ÿÿÿÿÉ6ÿÿÿÿ6ÿÿÿÿ`
+7ÿÿÿÿ¡
+?ÿÿÿÿê
+ÿÿÿÿ4ÿÿÿÿ\+ÿÿÿÿ”-ÿÿÿÿÎ3ÿÿÿÿ0ÿÿÿÿI 0ÿÿÿÿÉ
+-ÿÿÿÿ(ÿÿÿÿ<
+-ÿÿÿÿsÿÿÿÿ¥6ÿÿÿÿâ>ÿÿÿÿ' #ÿÿÿÿR ÿÿÿÿŽ ÿÿÿÿÊ 
+2ÿÿÿÿ!
+.ÿÿÿÿ>!Fÿÿÿÿ…!
+2ÿÿÿÿÁ!
+2ÿÿÿÿý!
+2ÿÿÿÿ9"
+2ÿÿÿÿu"
+2ÿÿÿÿ±"
+2ÿÿÿÿí"Fÿÿÿÿ4#
+9ÿÿÿÿw#
+7ÿÿÿÿ¸#
+9ÿÿÿÿû#FÿÿÿÿB$Fÿÿÿÿ‰$	2ÿÿÿÿÄ$+ÿÿÿÿö$.ÿÿÿÿ+%+ÿÿÿÿ]%-ÿÿÿÿ’%0ÿÿÿÿà%"ÿÿÿÿ&!ÿÿÿÿR&
+*ÿÿÿÿˆ&
+AÿÿÿÿÓ&
+dÿÿÿÿA'
+$ÿÿÿÿo'1ÿÿÿÿ«'1ÿÿÿÿÝ'
+ÿÿÿÿú'5ÿÿÿÿH(&ÿÿÿÿ|(=ÿÿÿÿÌ(&ÿÿÿÿ )+ÿÿÿÿ_)ÿÿÿÿ“)]ÿÿÿÿ*!5ÿÿÿÿW*Kÿÿÿÿ£*<"ÿÿÿÿ+$ÿÿÿÿ:+7
+ÿÿÿÿ|+ÿÿÿÿÄ+;ÿÿÿÿ,,?ÿÿÿÿŠ,ÿÿÿÿ³,2ÿÿÿÿí,ÿÿÿÿ-ÿÿÿÿP-=ÿÿÿÿŸ-Iÿÿÿÿ.(ÿÿÿÿ@.Iÿÿÿÿ£.!ÿÿÿÿÙ.!ÿÿÿÿ	/ÿÿÿÿ:/+ÿÿÿÿg/=ÿÿÿÿ¥/5ÿÿÿÿÛ/@ÿÿÿÿ 07ÿÿÿÿX0-ÿÿÿÿ†0ÿÿÿÿ£0-ÿÿÿÿà0B#$ÿÿÿÿi1
+"	ÿÿÿÿ¼1#&ÿÿÿÿ2!ÿÿÿÿ-2$ÿÿÿÿe2ÿÿÿÿŠ29ÿÿÿÿÊ2'ÿÿÿÿø2.ÿÿÿÿ-3)ÿÿÿÿ]3+ÿÿÿÿ�3ÿÿÿÿ¬3%ÿÿÿÿØ36ÿÿÿÿ4'ÿÿÿÿ74ÿÿÿÿe4&+ÿÿÿÿ¾4"ÿÿÿÿè4 ÿÿÿÿ 5!ÿÿÿÿ^5*ÿÿÿÿ—5>ÿÿÿÿ×57,ÿÿÿÿ:66ÿÿÿÿr6Kÿÿÿÿ¾6
+8ÿÿÿÿ7'ÿÿÿÿ;7Fÿÿÿÿ‚7ÿÿÿÿ¬7<ÿÿÿÿú7)ÿÿÿÿ48
+Uÿÿÿÿ•8
+#5ÿÿÿÿù82ÿÿÿÿ=9
+5ÿÿÿÿ|9
+AÿÿÿÿÇ9
+;ÿÿÿÿ:
+Rÿÿÿÿh:
+"ÿÿÿÿ¯:
+0ÿÿÿÿé:
+ ÿÿÿÿ;
+%ÿÿÿÿB;G6ÿÿÿÿÅ;
+3ÿÿÿÿ<
+ÿÿÿÿ*<2ÿÿÿÿ{<<ÿÿÿÿÎ<<ÿÿÿÿ =
+=ÿÿÿÿg=
+Iÿÿÿÿº=
+ ÿÿÿÿä=4ÿÿÿÿ2>2ÿÿÿÿq>4ÿÿÿÿ²>7ÿÿÿÿê>;ÿÿÿÿ=?6ÿÿÿÿ¿?
++ÿÿÿÿô?/ÿÿÿÿ6@
+5ÿÿÿÿu@ÿÿÿÿ©@:ÿÿÿÿê@Dÿÿÿÿ5A*ÿÿÿÿgA$ÿÿÿÿ­A$ÿÿÿÿóA
+>ÿÿÿÿ;B
+3ÿÿÿÿxBRÿÿÿÿËB
+2ÿÿÿÿC
+2ÿÿÿÿCC
+2ÿÿÿÿC
+2ÿÿÿÿ»C
+2ÿÿÿÿ÷C
+2ÿÿÿÿ3DRÿÿÿÿ†D
+9ÿÿÿÿÉD
+7ÿÿÿÿ
+E
+9ÿÿÿÿMERÿÿÿÿ ERÿÿÿÿóE	6ÿÿÿÿ2F/ÿÿÿÿhF2ÿÿÿÿ¡F/ÿÿÿÿ×F2ÿÿÿÿG+	ÿÿÿÿaG!ÿÿÿÿžG&ÿÿÿÿÕG
+:ÿÿÿÿH
+KÿÿÿÿpH
+tÿÿÿÿîH
+*ÿÿÿÿ"I3ÿÿÿÿ`IAÿÿÿÿ¢I
+ÿÿÿÿÆI!=ÿÿÿÿ$J/ÿÿÿÿaJDÿÿÿÿ¹J0!ÿÿÿÿK*ÿÿÿÿZK(ÿÿÿÿžKfÿÿÿÿL!;ÿÿÿÿrLSÿÿÿÿÆLB+ÿÿÿÿ3M-ÿÿÿÿwMGÿÿÿÿÊM)ÿÿÿÿN&Gÿÿÿÿ›NDÿÿÿÿþNÿÿÿÿ%O9
+ÿÿÿÿiOÿÿÿÿœOÿÿÿÿÐONÿÿÿÿ1PKÿÿÿÿ˜P(ÿÿÿÿ×PIÿÿÿÿ<Q,ÿÿÿÿQ+ÿÿÿÿ»Q#ÿÿÿÿùQ-ÿÿÿÿ(RFÿÿÿÿoR=ÿÿÿÿ­RIÿÿÿÿûR:ÿÿÿÿ6S0ÿÿÿÿgSÿÿÿÿ…S,ÿÿÿÿÃSE%ÿÿÿÿJT
+/ÿÿÿÿ¦T('ÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
 	Invalid Export Address Table rva (0x%lx) or entry count (0x%lx)
 	Invalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)
 	Invalid Ordinal Table rva (0x%lx) or entry count (0x%lx)
 	Name Pointer Table 			Ordinal Table 				[%4ld] <corrupt offset: %lx>
 	[Name Pointer/Ordinal] Table	%08lx
-	code-base %08lx toc (loadable/actual) %08lx/%08lx
 	non-TLS: %pA	reloc %4d offset %4x [%4lx] %s	vma:  Hint/Ord Member-Name Bound-To
 
 
@@ -169,10 +169,6 @@ Exec Auxiliary Header
 
 Export Address Table -- Ordinal Base %ld
 
-Function descriptor located at the start address: %04lx
-
-No reldata section! Function descriptor not decoded.
-
 Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Program Header:
@@ -321,19 +317,7 @@ ppcboot header:
   EGSD (len=%u):
   EGSD entry %2u (type: %u, len: %u):   EMH %u (len=%u):   base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x   base_va : 0x%08x
   bitcount: %u, base addr: 0x%08x
-  branch         %lu
-  branch toc adj %lu
-  branch notoc   %lu
-  branch both    %lu
-  long branch    %lu
-  long toc adj   %lu
-  long notoc     %lu
-  long both      %lu
-  plt call       %lu
-  plt call save  %lu
-  plt call notoc %lu
-  plt call both  %lu
-  global entry   %lu  calls:
+  calls:
   chgprtoff : %5u
   codeadroff: %5u, lpfixoff  : %5u
   fixuplnk: 0x%08x %08x
@@ -349,13 +333,13 @@ ppcboot header:
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   size : %u
-  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> BPAGE: %u COM COMM Change Protection (%u entries):
+  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> <Unrecognised flag bits set> BPAGE: %u COM COMM Change Protection (%u entries):
  Code Address Reference Fixups:
  DEF EXE FPU support required:  First address : 0x%08x 0x%08x
  Fourth address: 0x%08x 0x%08x
- GBL Glue code sequence LIB Linkage Pairs Reference Fixups:
+ GBL LIB Linkage Pairs Reference Fixups:
  MACH-O header:
- NOMOD NORM OVR PIC QVAL RD REL Register restore millicode Register save millicode Resources start at offset: %#03x
+ NOMOD NORM OVR PIC QVAL RD REL Resources start at offset: %#03x
  SHR Second address: 0x%08x 0x%08x
  Shareable images:
  Shared image  : 0x%08x 0x%08x
@@ -365,6 +349,7 @@ ppcboot header:
  UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [FDPIC ABI supplement] [FPA float format] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [g-float] [hard-float ABI] [interworking enabled] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] alignment of 8-byte entities:  corrupted GST
  debug module table : vbn: %u, size: %u
  debug symbol table : vbn: %u, size: %u (0x%x)
+ failed to convert GOTPCREL relocation against '%s'; relink with --no-relax
  fixup info rva:  flags: 0x%04x global symbol table: vbn: %u, records: %u
  ident: 0x%08x, name: %.*s
  ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u
@@ -390,14 +375,20 @@ ppcboot header:
      		Address  Length   Length   32b exc  Handler   Data
  vma:            Hint    Time      Forward  DLL       First
                  Table   Stamp     Chain    Name      Thunk
-#<invalid error code>%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
+#<invalid error code>%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC
+%%X%%P: unresolvable %s relocation against symbol `%s'
+%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
 %03x %*.s Entry: %C: warning: relocation to "%s" references a different segment
+%F%P: %pB(%pA): error: need linked-to section for --gc-sections
+%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed
+%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.
+%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.
+%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: auto overlay error: %E
 %F%P: can not build overlay stubs: %E
 %F%P: corrupt input: %pB
 %F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie
-%F%P: failed to convert GOTPCREL relocation; relink with --no-relax
 %F%P: failed to create BND PLT section
 %F%P: failed to create GNU property section
 %F%P: failed to create GOT PLT .eh_frame section
@@ -440,23 +431,22 @@ ppcboot header:
 %H: error: %s against `%s' not a multiple of %u
 %H: error: %s not a multiple of %u
 %H: fixup branch overflow
+%H: got/toc optimization is not supported for %s instruction
 %H: non-zero addend on %s reloc against `%s'
 %H: reloc against `%s' references a different segment
 %H: reloc against `%s': %s
 %H: relocation %s for indirect function %s unsupported
 %H: relocation references symbol not defined in the module
 %H: relocation to `%s+%v' may have caused the error above
-%H: toc optimization is not supported for %s instruction
 %H: unresolvable %s against `%pT'
 %H: unresolvable %s relocation against symbol `%s'
 %H: warning: %s unexpected insn %#x.
 %P%F: --relax and -r may not be used together
 %P%X: can not read symbols: %E
-%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC
 %P%X: read-only segment has dynamic relocations
-%P: %H: %s relocation unsupported for bss-plt
 %P: %H: error: %s with unexpected instruction %x
 %P: %pB: %s is not supported for `%pT'
+%P: %pB: warning: missing %s
 %P: %pB: warning: relocation against `%s' in read-only section `%pA'
 %P: %pB: warning: relocation in read-only section `%pA'
 %P: cannot find opd entry toc for `%pT'
@@ -465,7 +455,10 @@ ppcboot header:
 %P: linkage table error against `%pT'
 %P: multiple entry points: in modules %pB and %pB
 %P: relocatable link is not supported
-%P: warning: creating a DT_TEXTREL in a shared object
+%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s
+%P: warning: creating DT_TEXTREL in a PDE
+%P: warning: creating DT_TEXTREL in a PIE
+%P: warning: creating DT_TEXTREL in a shared object
 %P: warning: text relocations and GNU indirect functions may result in a segfault at runtime
 %X%C: relocation to "%s" references a different segment
 %X%H: @local call to ifunc %s
@@ -475,10 +468,14 @@ ppcboot header:
 %X%H: unsupported branch between ISA modes
 %X%H: unsupported bss-plt -fPIC ifunc %s
 %X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled
+%X%P: %H: %s relocation unsupported for bss-plt
 %X%P: %pB(%pA): error: relocation for offset %V has no value
 %X%P: %pB(%pA): relocation "%pR" goes out of range
 %X%P: %pB(%pA): relocation "%pR" is not supported
 %X%P: %pB(%pA): relocation "%pR" returns an unrecognized value %x
+%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation
+%X%P: %pB: error: missing %s
+%X%P: attempted static link of dynamic object `%pB'
 %X%P: internal error: out of range error
 %X%P: internal error: unknown error
 %X%P: internal error: unsupported relocation error
@@ -489,19 +486,22 @@ ppcboot header:
 %X%P: stack/lrlive analysis error: %E
 %X%P: text relocations and GNU indirect functions will result in a segfault at runtime
 %X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB
-%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections%pA has both ordered and unordered sections%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
+%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
 %pA:0x%v not found in function table
-%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
+%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): error: internal relocs missing for secondary reloc section%pB(%pA): error: reloc table entry %u is empty%pB(%pA): error: secondary reloc %u is of an unknown type%pB(%pA): error: secondary reloc %u references a deleted symbol%pB(%pA): error: secondary reloc %u references a missing symbol%pB(%pA): error: secondary reloc section has non-standard sized entries%pB(%pA): error: secondary reloc section has zero sized entries%pB(%pA): error: secondary reloc section is empty!%pB(%pA): error: secondary reloc section processed twice%pB(%pA): info section index cannot be set because the section is not in the output%pB(%pA): info section index is invalid%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): link section cannot be set because the output file does not have a symbol table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
 %pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s%pB, section %pA:
-  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s flag mismatch with previous modules%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
-  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: BE8 images only valid in big-endian mode%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS sections are not adjacent:%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: aout header specifies an invalid number of data-directory entries: %ld%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol definition: `Main' set to %s rather than the start address %s
+  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s (offset: 0x%s, info: 0x%s) against '%s' for section '%pA' in %pB
+%pB: %s (offset: 0x%s, info: 0x%s, addend: 0x%s) against '%s' for section '%pA' in %pB
+%pB: %s flag mismatch with previous modules%pB: %s local symbol at index %lu (>= sh_info of %lu)%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
+  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: BE8 images only valid in big-endian mode%pB: C_STAT isn't supported by XCOFF64%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Number of symbols in input file has increased from %lu to %u
+%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS local relocation at (0x%%pB: TLS relocation %s against undefined symbol `%s'%pB: TLS relocation at (0x%%pB: TLS sections are not adjacent:%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead.%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: aout header specifies an invalid number of data-directory entries: %u%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol definition: `Main' set to %s rather than the start address %s
 %pB: bad symbol index: %d%pB: base-plus-offset relocation against register symbol: %s in %pA%pB: base-plus-offset relocation against register symbol: (unknown) in %pA%pB: can not represent section `%pA' in a.out object file format%pB: can not represent section for symbol `%s' in a.out object file format%pB: can't link %s modules with %s modules%pB: can't link RVE with other target%pB: cannot allocate file name for file number %d, %d bytes
-%pB: cannot create stub entry %s%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
+%pB: cannot allocate memory for local GOT entries%pB: cannot create stub entry %s%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: conditional branch to undefined symbol `%s' not allowed%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
 %pB: csect `%s' not in enclosing section%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object%pB: directive LOCAL valid only with a register or absolute value%pB: dtp-relative relocation against dynamic symbol %s%pB: duplicate export stub %s%pB: duplicate section `%pA' has different contents
 %pB: duplicate section `%pA' has different size
 %pB: dynamic object with no .loader section%pB: dynamic relocation against `%pT' in read-only section `%pA'
 %pB: dynamic relocation in read-only section `%pA'
-%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
+%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: attribute section length too small: %ld%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 immediate 0x%%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: expected symbol index in range 0..%lu but found local symbol with index %lu%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
 %pB: illegal section name `%pA'%pB: illegal symbol index %ld in relocs%pB: incompatible machine type; output is 0x%x; input is 0x%x%pB: incorrect size for symbol `%s'%pB: indirect symbol `%s' to `%s' is a loop%pB: instruction set mismatch with previous modules%pB: internal error in ihex_read_section%pB: internal error, internal register section %pA had contents
 %pB: internal error, symbol table changed size from %d to %d words
 %pB: internal symbol `%s' in %pB is referenced by DSO%pB: internal symbol `%s' isn't defined%pB: invalid entry in SHT_GROUP section [%u]%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions%pB: invalid link %u for reloc section %s (index %u)%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
@@ -518,11 +518,23 @@ ppcboot header:
 %pB: invalid mmo file: lop_end not last item in file
 %pB: invalid mmo file: unsupported lopcode `%d'
 %pB: invalid sh_link field (%d) in section number %d%pB: invalid special symbol `%s'; it must be a global or weak function symbol%pB: invalid standard symbol `%s'; it must be a global or weak function symbol%pB: invalid symbol table: duplicate symbol `%s'
-%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no core to allocate section name %s%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
-%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: page size is too large (0x%x)%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to create fake empty section%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to initialize compress status for section %s%pB: unable to initialize decompress status for section %s%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type: %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
-%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number count (%#lx) exceeds section size (%#lx)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: sh_link not set for section `%pA'%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
-%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: will not resolve runtime TLS relocation%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
-%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%s defined on removed toc entry%s duplicated
+%pB: invalid version offset %lx (max %lx)%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no core to allocate section name %s%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
+%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: not enough version information%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: page size is too large (0x%x)%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocatation (%d) at (0x%%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section '%pA': corrupt VTENTRY entry%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: stripping non-representable symbol '%s' (value %%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: symbol indicates overlay (not supported)%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to create fake empty section%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to initialize compress status for section %s%pB: unable to initialize decompress status for section %s%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unhandled sparc machine value '%lu' detected during write processing%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported AOUT relocation size: %d%pB: unsupported arch %#x%pB: unsupported bfd mach %#lx%pB: unsupported mach %#x%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type: %#x%pB: unsupported swap_aux_in for storage class %#x%pB: unsupported swap_aux_out for storage class %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
+%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section.%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: Weak TLS is implementation defined and may not work as expected%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number count (%#lx) exceeds section size (%#lx)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: secondary relocation section '%s' for section %pA found - ignoring%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
+%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: warning: win32pstatus %s of size %lu bytes is too small%pB: will not resolve runtime TLS relocation%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u%pB: wrong auxtype %#x for storage class %#x%pB:%.8s: RVA truncated%pB:%.8s: section below image base%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
+%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: attempting to write into an unallocated compressed section%pB:%pA: error: attempting to write over the end of the section%pB:%pA: error: attempting to write section into an empty buffer%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%pB[%pA]: no output section for space %pA%pcrel_lo missing matching %pcrel_hi%pcrel_lo overflow with an addend%pcrel_lo section symbol with an addend%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20%s  branch         %lu
+  branch toc adj %lu
+  branch notoc   %lu
+  branch both    %lu
+  long branch    %lu
+  long toc adj   %lu
+  long notoc     %lu
+  long both      %lu
+  plt call       %lu
+  plt call save  %lu
+  plt call notoc %lu
+  plt call both  %lu
+  global entry   %lu%s defined on removed toc entry%s divide by zero%s duplicated
 %s duplicated in %s
 %s has both normal and TLS relocs%s in overlay section%s not defined in linker created %pA%s not implemented%s offset too large for .eh_frame sdata4 encoding%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA%s: TLS reference in %pB mismatches non-TLS reference in %pB%s: no such symbol%s: not implemented%s: not supported%s: undefined version: %s(at bit offset %u)
 (descriptor)
@@ -538,8 +550,8 @@ ppcboot header:
 *unknown**unknown*        , Value: %#08lx
 , alias: %u
 , ext fixup offset: %u, no_opt psect off: %u, subtype: %u (%s)
-, symbol vector rva: - %pB is 64-bit, %pB is not-mips32r2 -mfp64 (12 callee-saved).eh_frame_hdr entry overflow.eh_frame_hdr refers to overlapping FDEs.got section not immediately after .plt section.rsrc merge failure: a directory matches a leaf.rsrc merge failure: differing directory versions.rsrc merge failure: dirs with differing characteristics.rsrc merge failure: duplicate leaf.rsrc merge failure: duplicate leaf: %s.rsrc merge failure: duplicate string resource: %d.rsrc merge failure: multiple non-default manifests32-bit double, 32bits gp relative relocation occurs for an external symbol4-byte4-bytes64 bits *unhandled*
-64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC<Unrecognised flag bits set><corrupt info> %s<corrupt string length: %#x>
+, symbol vector rva: - %pB is 64-bit, %pB is not-march=%s: ISA string cannot contain uppercase letters-march=%s: ISA string must begin with rv32 or rv64-march=%s: duplicate prefixed ISA extension `%s'-march=%s: expect number after `%dp'-march=%s: first ISA extension must be `e', `i' or `g'-march=%s: prefixed ISA extension `%s' is not in expected order.  It must come before `%s'-march=%s: prefixed ISA extension must separate with _-march=%s: rv%de is not a valid base ISA-march=%s: rv32 does not support the `q' extension-march=%s: rv32e does not support the `f' extension-march=%s: standard ISA extension `%c' is not in canonical order-march=%s: unknown prefix class for the ISA extension `%s'-march=%s: unknown prefixed ISA extension `%s'-march=%s: unknown standard and prefixed ISA extension `%s'-mips32r2 -mfp64 (12 callee-saved).eh_frame_hdr entry overflow.eh_frame_hdr refers to overlapping FDEs.got section not immediately after .plt section.rsrc merge failure: a directory matches a leaf.rsrc merge failure: differing directory versions.rsrc merge failure: dirs with differing characteristics.rsrc merge failure: duplicate leaf.rsrc merge failure: duplicate leaf: %s.rsrc merge failure: duplicate string resource: %d.rsrc merge failure: multiple non-default manifests32-bit double, 32bits gp relative relocation occurs for an external symbol4-byte4-bytes64 bits *unhandled*
+64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC; recompile with -fPIE<corrupt info> %s<corrupt string length: %#x>
 <corrupt string offset: %#lx>
 <corrupt><unknown directory type: %d>
 <unknown mask flags><unknown>@pltoff reloc against local symbolBASE_IMAGE       BFD %s assertion fail %s:%dBFD %s internal error, aborting at %s:%d
@@ -552,15 +564,15 @@ ppcboot header:
 CTL_STLOC (set location)
 Copyright Header
 Corrupt .rsrc section detected!
-DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
+DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: could not find variable specification at offset 0x%lxDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)DWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
 Debug symbol table:
 Delay Import DirectoryDeprecated %s called
 Deprecated %s called at %s line %d in %s
 Description DirectoryEIHD: (size: %u, nbr blocks: %u)
 Entry offset        = 0x%.8lx (%ld)
-Error: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
+Error: %pB and %pB has different DSP versionError: %pB and %pB has different FPU ABIError: %pB and %pB has different VDSP versionError: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
 Export RVAFDE encoding in %pB(%pA) prevents .eh_frame_hdr table being createdFDPIC does not yet support %s relocation to become dynamic for executableFILES_VOLUMES    FPU-2.0FPU-3.0Flag field          = 0x%.2x
-Forwarder RVAGALAXY           GOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
+Forwarder RVAGALAXY           GNU_MBIND section is supported only by GNU and FreeBSD targetsGNU_RETAIN section is supported only by GNU and FreeBSD targetsGOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
 Hard float (32-bit CPU, 64-bit FPU)
 Hard float (32-bit CPU, Any FPU)
 Hard float (MIPS32r2 64-bit FPU 12 callee-saved)
@@ -568,13 +580,13 @@ ppcboot header:
 Hard float (single precision)
 Hard float compat (32-bit CPU, 64-bit FPU)
 Hard or soft float
-ID: %#08lxIDC - Ident Consistency check
-IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
+IBT and SHSTK propertiesIBT propertyID: %#08lxIDC - Ident Consistency check
+IFUNC symbol %s in dynamic symbol table - IFUNCS are not supportedIMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
 Image activator fixup: (major: %u, minor: %u)
 Image identification: (major: %u, minor: %u)
 Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)
 Image symbol & debug table: (major: %u, minor: %u)
-Import Address Table DirectoryImport Directory [parts of .idata]LOGICAL_NAMES    Language Processor Name
+Import Address Table DirectoryImport Directory [parts of .idata]LAM_U48 propertyLAM_U57 propertyLOGICAL_NAMES    Language Processor Name
 Length              = 0x%.8lx (%ld)
 Load Configuration DirectoryLocal IFUNC function `%s' in %pB
 MEMORY_MANAGEMENTMIPS16 and microMIPS functions cannot call each otherMISC             MMU use: MULTI_PROCESSING Major/Minor 			%d/%d
@@ -612,7 +624,7 @@ ppcboot header:
 Removed property %W to merge %pB (not found) and %pB (0x%v)
 Removed property %W to merge %pB and %pB
 Removed property %W to merge %pB and %pB (not found)
-ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSIMD use: SPSC - Shared Image Program section def
+ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSHSTK propertySIMD use: SPSC - Shared Image Program section def
 STABLE           STA_CKARG (compare procedure argument)
 STA_GBL (stack global) %.*s
 STA_LI (stack literal)
@@ -660,7 +672,7 @@ ppcboot header:
 Special DirectoryStack size for call graph root nodes.
 Strides:
 Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pBTLS relocation invalid without dynamic sectionsTable Addresses
-The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
+The addend isn't allowed for R_RISCV_GOT_HI20The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
 Thread Storage Directory [.tls]Time/Date stamp 		%lx
 Title Text Header
 Too many unwind codes (%ld)
@@ -672,14 +684,14 @@ ppcboot header:
 Warning: %s section size (%ld) is smaller than virtual size (%ld)
 Warning: %s section size is zero
 Writing updated armap timestampXGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code.[%u]: Lower: %u, upper: %u
-[abi=16-bit int, [abi=32-bit int, [whose name is lost]_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry functiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
+[abi=16-bit int, [abi=32-bit int, [whose name is lost]__tls_get_addr call offset overflow_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry functiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
 array, dim: %u, bitmap: arsize: %u, a0: 0x%08x
 atomic, type=0x%02x %s
 attempt to convert L32R/CALLX to CALL failedattempt to do relocatable link with %s input and %s outputbad section index in %sbad valuebanked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)base: %u, pos: %u
-bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_read_symtab_symbols: unable to allocate memory for symbolsbfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
+bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
 blkend: size: 0x%08x
 branch (PC rel16) to section (%s) not supportedbranch to a non-instruction-aligned addressbss-plt forced by profilingbss-plt forced due to %pBcan't build branch stub `%s'can't find branch stub `%s'cannot convert a branch to JALX for a non-word-aligned addresscannot convert a jump to JALX for a non-word-aligned addresscannot create stub entry %scannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
-cannot read DMT
+cannot find default versions of the ISA extension `%s'cannot read DMT
 cannot read DMT header
 cannot read DMT psect
 cannot read DST
@@ -697,36 +709,36 @@ ppcboot header:
 cannot read GST record header
 cannot read GST record length
 class: %u, dtype: %u, length: %u, pointer: 0x%08x
-corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EGSD record: size (%#x) is larger than remaining space (%#x)corrupt EGSD record: size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt vms valuecould not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]dangerous relocationdelta pc +%-4ddelta_pc_l: +0x%08x
+corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)corrupt EGSD record type %d: size (%#x) is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt vms valuecould not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]dangerous relocationdangerous relocation errordelta pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 descdimct: %u, aflags: 0x%02x, digits: %u, scale: %u
 discarded output section: `%pA'discarding zero address range FDE in %pB(%pA).
 discontiguous range (nbr: %u)
-dynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
+division by zerodst_define_location %u too largedynamic index information not availabledynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
 enumelt, name: %.*s
 enumend
 epilog: flags: %u, count: %u
-error in %pB(%pA); no .eh_frame_hdr table will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB does not use %s instructions, whereas %pB doeserror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack aligned.error: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s).error: %pB: Mis-matched ISA string to merge '%s' and '%s'.error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%derror: %pB: SB relative addressing conflicts with use of R9error: %pB: Unspported XLEN (%u), you mightusing wrong emulation.error: %pB: XLEN of input (%u) doesn't match output (%u).error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting priv spec version (major/minor/revision).error: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'.error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablefailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation at address 0x%08x when _gp not defined
-global pointer relative relocation when _gp not definedhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
+error in %pB(%pA); no .eh_frame_hdr table will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memoryerror: %pB does not use %s instructions, whereas %pB doeserror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack alignederror: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt AArch64 used size: 0x%x>error: %pB: <corrupt property (0x%x) size: 0x%x>error: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s)error: %pB: SB relative addressing conflicts with use of R9error: %pB: XLEN of input (%u) doesn't match output (%u)error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'error: %pB: mis-matched ISA string to merge '%s' and '%s'error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: %pB: unsupported XLEN (%u), you might be using wrong emulationerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spaceerror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablefailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation when _gp not definedhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
 indirect, defined at 0x%08x
-internal error: RL78 reloc stack overflowinternal error: RL78 reloc stack underflowinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol invalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
+internal error: RL78 reloc stack overflowinternal error: RL78 reloc stack underflowinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: relocation not supportedinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol invalid %sinvalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid dynamic indexinvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
 len: %2u, kind: %2u line num  (len: %u)
 linkable imagelinker stubs in %u group
 linker stubs in %u groups
-literalliteral relocation occurs for an external symbollong branch stub `%s' offset overflowmach-o: there are too many sections (%u) maximum is 255,
-malformed archivememory exhaustedmep: no reloc for code %dmodbeg
+literalliteral relocation occurs for an external symbollocal symbol index too biglong branch stub `%s' offset overflowmach-o: there are too many sections (%u) maximum is 255,
+malformed archivemalformed mach-o ARM half sectdiff reloc: invalid length: %dmalformed mach-o ARM local sectdiff reloc: invalid length: %dmalformed mach-o ARM reloc pair: invalid length: %dmalformed mach-o ARM reloc pair: reloc is first relocmalformed mach-o ARM reloc: unknown reloc type: %dmalformed mach-o ARM sectdiff reloc: invalid length: %dmalformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)malformed mach-o reloc: section index is greater than the number of sectionsmemory exhaustedmep: no reloc for code %dmodbeg
 modend
-name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno errorno more archived filesno symbolsnon-contiguous array of %s
-non-dynamic relocations refer to dynamic symbol %snon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
+name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno dynamic index information availableno errorno more archived filesno symbolsnon-contiguous array of %s
+non-dynamic relocations refer to dynamic symbol %snon-dynamic symbol %s in dynamic symbol tablenon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
 non-zero addend in @fptr relocnonenonrepresentable section on outputnot enough GOT space for local GOT entriesnot enough memory to sort relocationsnot mapping: data=%lx mapped=%d
 not mapping: env var not set
-not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowpointer
+not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowplugin framework: out of file descriptors. Try using fewer objects/archives
+pointer
 private flags = %lxprivate flags = %lx:private flags = %lx: private flags = 0x%lxprivate flags = 0x%lx:prolog: bkpt address 0x%08x
 protected symbolprotected symbol recbeg: name: %.*s
 recend
-reference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
+record is too small for symbol name lengthreference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
 reloc (%d) is *UNKNOWN*relocation for non-REL psectrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedremoving unused section '%pA' in file '%pB'reopening %pB: %s
 reserved cmd %drtnbeg
 rtnend: size 0x%08x
@@ -735,46 +747,45 @@ ppcboot header:
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-shared objectsize error in section %pAsmall-data section exceeds 64KB; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, no support for duplicate object files in auto-overlay script
+shared objectsize error in section %pAsmall-data section exceeds 64KB; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, cannot handle this filesorry, no support for duplicate object files in auto-overlay script
 sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands.source (len: %u)
 spurious ALPHA_R_BSR relocstack analysis will ignore the call from %s to %s
 stack overflow (%d) in _bfd_vms_pushstack underflow in _bfd_vms_popstandard data: %s
-start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol needs debug section which does not existsystem call errorsystem version array information:
+start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targetssymbol needs debug section which does not existsymbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targetssystem call errorsystem version array information:
 term(b): 0x%02xterm_w: 0x%04xthe bfin target does not currently support the generation of copy relocationsthere is a conflict merging the ELF header flags from %pBtoo many GOT entries for -fpic, please recompile with -fPICtry enabling relaxation to avoid relocation truncationstype spec for element:
 type spec for subscript %u:
 typed pointer
 typspec (len: %u)
-unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767
-unable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
-undefined undefined %s reference in complex symbol: %sunexpected STO_SH5_ISA32 on local symbol is not handledunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
+unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
+undefined undefined %s reference in complex symbol: %sunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
 unhandled emh subtype %u
-unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
-unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeunsupported relocation type %#xusing multiple gp valuesv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
+unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown attribute for symbol `%s': 0x%02xunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
+unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeusing multiple gp valuesv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
 warning, .pdata section size (%ld) is not a multiple of %d
-warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a corrupt section with a size (%warning: %pB has a corrupt string table index - ignoringwarning: %pB supports interworking, whereas %pB does notwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
+warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a corrupt string table index - ignoringwarning: %pB has a program header with invalid alignmentwarning: %pB has a section extending past end of filewarning: %pB supports interworking, whereas %pB does notwarning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%uwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%dwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
 warning: %s overlaps %s
-warning: %s section has zero sizewarning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
-warning: discarding dynamic section %swarning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
-yesyou are not allowed to define %s in a scriptProject-Id-Version: bfd-2.31.90
+warning: %s section has zero sizewarning: %s should be used rather than %swarning: --enable-non-contiguous-regions discards section `%s' from '%s'
+warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: --plt-localentry is incompatible with power10 pc-relative codewarning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
+warning: discarding dynamic section %swarning: file %pB's arch flag %s conflict with target %s,set target arch flag to %swarning: file %pB's arch flag %s conflicts with target ck%s, using %swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: privileged spec version 1.9.1 can not be linked with other spec versionswarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognised arch name '%#x'warning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
+x ISA extension `%s' must be set with the versionsyesyou are not allowed to define %s in a scriptProject-Id-Version: bfd-2.36.90
 Report-Msgid-Bugs-To: bug-binutils@gnu.org
-POT-Creation-Date: 2019-01-19 16:30+0000
-PO-Revision-Date: 2019-01-20 17:21+0000
-Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>
+POT-Creation-Date: 2021-07-03 15:02+0100
+PO-Revision-Date: 2021-07-07 07:29+0100
+Last-Translator: Pedro Albuquerque <pmra@protonmail.com>
 Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>
 Language: pt
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 X-Bugs: Report translation errors to the Language-Team address.
-Plural-Forms: nplurals=2; plural=n != 1;\n
-X-Generator: Gtranslator 2.91.7
+Plural-Forms: nplurals=2; plural=(n != 1);
+X-Generator: Poedit 2.3
 	    TLS: %pA	<corrupto: 0x%04lx>	Tabela end. exportaÃ§Ã£o 			Tabela end. exportaÃ§Ã£o 		%08lx
 	rva de tabela de end. de exportaÃ§Ã£o (0x%lx) ou total de entradas (0x%lx) invÃ¡lidos
 	rva de tabela de ponteiro de nome (0x%lx) ou total de entradas (0x%lx) invÃ¡lidos
 	rva de tabela ordinal (0x%lx) ou total de entradas (0x%lx) invÃ¡lidos
 	Tabela Nome Ponteiro 			Tabela ordinal 				[%4ld] <desvio corrupto: %lx>
 	[Nome Ponteiro/Ordinal] Tabela	%08lx
-	code-base %08lx toc (carregÃ¡vel/actual) %08lx/%08lx
 	nÃ£o-TLS: %pA	reloc %4d desvio %4x [%4lx] %s	vma:  Dica/Ord Nome-membro ligado a
 
 
@@ -805,10 +816,6 @@ Exec Auxiliary Header
 
 Tabela end. exportaÃ§Ã£o -- Base ordinal %ld
 
-Descritor de funÃ§Ã£o localizado no endereÃ§o inicial: %04lx
-
-Sem secÃ§Ã£o reldata! Descritor de funÃ§Ã£o nÃ£o descodificado.
-
 InÃ­cio da partiÃ§Ã£o[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 CabeÃ§alho do programa:
@@ -957,19 +964,7 @@ cabeÃ§alho ppcboot:
   EGSD (tam=%u):
   entrada EGSD %2u (tipo: %u, tamanho: %u):   EMH %u (tam=%u):   base: 0x%08x %08x, tam.: 0x%08x, prot: 0x%08x   base_va : 0x%08x
   bitcount: %u, endereÃ§o base: 0x%08x
-  branch         %lu
-  branch toc adj %lu
-  branch notoc   %lu
-  branch both    %lu
-  long branch    %lu
-  long toc adj   %lu
-  long notoc     %lu
-  long both      %lu
-  plt call       %lu
-  plt call save  %lu
-  plt call notoc %lu
-  plt call both  %lu
-  global entry   %lu  chamadas:
+  chamadas:
   chgprtoff : %5u
   codeadroff: %5u, lpfixoff  : %5u
   fixuplnk: 0x%08x %08x
@@ -985,13 +980,13 @@ cabeÃ§alho ppcboot:
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   tamanho: %u
-  bandeiras fich. entrada: %s  bandeiras fich. saÃ­da:   %s %08x<desconhecido> 0x%08x 64B <versÃ£o EABI nÃ£o reconhecida> BPAGE: %u COM COMM Alterar protecÃ§Ã£o (%u entradas):
+  bandeiras fich. entrada: %s  bandeiras fich. saÃ­da:   %s %08x<desconhecido> 0x%08x 64B <versÃ£o EABI nÃ£o reconhecida> <bits de bandeira definidos nÃ£o reconhecidos> BPAGE: %u COM COMM Alterar protecÃ§Ã£o (%u entradas):
  Fixups de referÃªncia de endereÃ§o de cÃ³digo:
  DEF EXE requerido suporte FPU:  1Âº endereÃ§o: 0x%08x 0x%08x
  4Âº endereÃ§o: 0x%08x 0x%08x
- GBL Colar sequÃªncia de cÃ³digo LIBFixups de referÃªncia de pares de ligaÃ§Ã£o:
+ GBL LIBFixups de referÃªncia de pares de ligaÃ§Ã£o:
 CabeÃ§alho MACH-0:
- NOMOD NORM OVR PIC QVAL RD REL Register restore millicode Register save millicode Recursos comeÃ§am no desvio: %#03x
+ NOMOD NORM OVR PIC QVAL RD REL Recursos comeÃ§am no desvio: %#03x
  SHR 2Âº endereÃ§o: 0x%08x 0x%08x
  Imagens partilhÃ¡veis:
  Imagem partilhada: 0x%08x 0x%08x
@@ -1001,6 +996,7 @@ cabeÃ§alho ppcboot:
  UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [suplemento FDPIC ABI] [formato flutuante FPA] [LE8] [formato flutuante Maverick] [formato flutuante VFP] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [desvio XGATE RAM] [abi desconhecida] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld [d-float] [sÃ­mbolos dinÃ¢micos usam Ã­ndice de segmento] [fix dep] [flutuantes passados em registos flutuantes] [g-float] [hard-float ABI] [interworking activo] [sÃ­mbolos de mapeamento precedem outros] [memÃ³ria=bank-model] [memÃ³ria=flat] [novo ABI] [sem abi definida] [nonpic] [nÃ£o 32bitmode] [ABI antigo] [pic] [posiÃ§Ã£o independente] [executÃ¡vel relocalizÃ¡vel] [soft-float ABI] [software FP] [tabela de sÃ­mbolo ordenada] [sÃ­mbolos tÃªm um prefixo _] [ISA desconhecida] [tabela de sÃ­mbolo desordenada] [v10 e v32] [v32] alinhamento de entidades 8-byte:  GST corrompido
  tabela de mÃ³dulo de depuraÃ§Ã£o: vbn: %u, tamanho: %u
  tabela de sÃ­mbolo de depuraÃ§Ã£o : vbn: %u, tamanho: %u (0x%x)
+ falha ao converter relocalizaÃ§Ã£o GOTPCREL contra "%s"; religue com --no-relax
  fixup info rva:  bandeiras: 0x%04x tabela de sÃ­mbolo global: vbn: %u, registos: %u
  ident: 0x%08x, nome: %.*s
  ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u
@@ -1026,14 +1022,20 @@ cabeÃ§alho ppcboot:
      		EndereÃ§o Tam.     Tam.     32b exc  Gestor    Dados
  vma:            Dica    Hora      AvanÃ§o   DLL       Prim.
                  Tabela  Selo      Cadeia   Nome      Thunk
-#<CÃ³digo de erro invÃ¡lido>%03x %*.s  Folha: End.: %#08lx, Tamanho: %#08lx, Codepage: %d
+#<CÃ³digo de erro invÃ¡lido>%%X%%P: relocalizaÃ§Ã£o %s contra "%s" nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC
+%%X%%P: relocalizaÃ§Ã£o %s insolÃºvel contra sÃ­mbolo "%s"
+%03x %*.s  Folha: End.: %#08lx, Tamanho: %#08lx, Codepage: %d
 %03x %*.s Entrada: %C: aviso: relocalizaÃ§Ã£o para "%s" referencia um segmento diferente
+%F%P: %pB(%pA): erro: necessÃ¡ria secÃ§Ã£o linked-to para --gc-sections
+%F%P: %pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo absoluto "%s" na secÃ§Ã£o "%pA" nÃ£o Ã© permitida
+%F%P: impossÃ­vel atribuir "%pA" a uma secÃ§Ã£o de saÃ­da. Repita sem --enable-non-contiguous-regions.
+%F%P: impossÃ­vel atribuir "%pA" a uma secÃ§Ã£o de saÃ­da. Repita sem --enable-non-contiguous-regions.
+%F%P: impossÃ­vel atribuir o grupo %pA, alvo %pA a uma secÃ§Ã£o de saÃ­da. Repita sem --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: erro de auto-sobreposiÃ§Ã£o: %E
 %F%P: impossÃ­vel construir fictÃ­cios de sobreposiÃ§Ã£o: %E
 %F%P: entrada corrupta: %pB
 %F%P: sÃ­mbolo "%s" STT_GNU_IFUNC dinÃ¢mico com igualdade de ponteiro em "%pB" nÃ£o pode ser usado ao fazer um executÃ¡vel; recompile com -fPIE e volte a ligar com -pie
-%F%P: falha ao converter relocalizaÃ§Ã£o GOTPCREL; religue com --no-relax
 %F%P: falha ao criar secÃ§Ã£o BND PLT
 %F%P: falha ao criar secÃ§Ã£o de propriedade GNU
 %F%P: falha ao criar secÃ§Ã£o GOT PLT .eh_frame
@@ -1076,23 +1078,22 @@ cabeÃ§alho ppcboot:
 %H: erro: %s contra "%s" nÃ£o Ã©  mÃºltiplo de %u
 %H: erro: %s nÃ£o Ã© mÃºltiplo de %u
 %H: transporte em ramo fixup
+%H: optimizaÃ§Ã£o got/toc nÃ£o suportada para a instruÃ§Ã£o %s
 %H: adenda nÃ£o-zero em reloc %s contra "%s"
 %H: reloc contra "%s" referencia um segmento diferente
 %H: reloc contra "%s": %s
 %H: relocalizaÃ§Ã£o %s para funÃ§Ã£o indirecta %s nÃ£o suportada
 %H: relocalizaÃ§Ã£o referencia sÃ­mbolo nÃ£o definido no mÃ³dulo
 %H: relocalizaÃ§Ã£o para "%s+%v" poderÃ¡ ter causado o erro acima
-%H: optimizaÃ§Ã£o toc nÃ£o Ã© suportada para instreuÃ§Ãµes %s.
 %H: %s insolÃºvel contra "%T"
 %H: relocalizaÃ§Ã£o %s insolÃºvel contra sÃ­mbolo "%s"
 %H: aviso: %s insn %#x inesperado.
 %P%F: --relax e -r nÃ£o podem ser usadas em conjunto
 %P%X: impossÃ­vel ler os sÃ­mbolos: %E
-%P%X: segmento sÃ³ de leitura tem relocalizaÃ§Ãµes dinÃ¢micas IFUNC; recompile com -fPIC
 %P%X: segmento sÃ³ de leitura tem relocalizaÃ§Ãµes dinÃ¢micas.
-%P: %pB: relocalizaÃ§Ã£o %s ainda nÃ£o Ã© suportada para sÃ­mbolo %s
 %P: %H: erro: %s com instruÃ§Ã£o inesperada %x
 %P: %pB: %s nÃ£o Ã© suportado para "%T"
+%P: %pB: aviso: %s em falta
 %P: %pB: aviso: relocalizaÃ§Ã£o contra "%s" em secÃ§Ã£o sÃ³ de leitura "%pA"
 %P: %pB: aviso: relocalizaÃ§Ã£o em secÃ§Ã£o sÃ³ de leitura "%pA"
 %P: impossÃ­vel encontrar entrada opd toc para "%T"
@@ -1101,7 +1102,10 @@ cabeÃ§alho ppcboot:
 %P: erro na tabela de ligaÃ§Ã£o contra "%T"
 %P: mÃºltiplos pontos de entrada: nos mÃ³dulos %pB e %pB
 %P: ligaÃ§Ã£o relocalizÃ¡vel nÃ£o suportada
-%P: aviso: a criar uma DT_TEXTREL num objecto partilhado.
+%P: warning: funÃ§Ãµes indirectas GNU com DT_TEXTREL podem resultar numa segfault na execuÃ§Ã£o; recompile com %s
+%P: aviso: a criar DT_TEXTREL em PDE
+%P: aviso: a criar DT_TEXTREL num PIE.
+%P: aviso: a criar DT_TEXTREL num objecto partilhado.
 %P: aviso: relocalizaÃ§Ãµes de texto e funÃ§Ãµes indirectas GNU podem resultar em segfault em tempo de execuÃ§Ã£o
 %X%C: relocalizaÃ§Ã£o para "%s" referencia um segmento diferente
 %X%H: chamada @local a ifunc %s
@@ -1111,10 +1115,14 @@ cabeÃ§alho ppcboot:
 %X%H: ramo nÃ£o suportado entre modos ISA
 %X%H: bss-plt -fPIC ifunc %s nÃ£o suportada
 %X%H: salto nÃ£o suportado entre modos ISA; considere recompilar com interlinking activado
+%X%P: %H: %s relocalizaÃ§Ã£o nÃ£o suportada para bss-plt
 %X%P: %pB(%pA): erro: relocalizaÃ§Ã£o para desvio %V nÃ£o tem valor
 %X%P: %pB(%pA): relocalizaÃ§Ã£o "%R" sai fora do intervalo
 %X%P: %pB(%pA): relocalizaÃ§Ã£o "%R" nÃ£o Ã© suportada
 %X%P: %pB(%pA): relocalizaÃ§Ã£o "%R" devolve um valor nÃ£o reconhecido %x
+%X%P: %pB: %s contra %pT nÃ£o Ã© suportado por glibc como relocalizaÃ§Ã£o dinÃ¢mica
+%X%P: %pB: erro: %s em falta
+%X%P: tentada ligaÃ§Ã£o estÃ¡tica de objecto dinÃ¢mico "%pB"
 %X%P: erro interno: erro fora do intervalo
 %X%P: erro interno: erro desconhecido
 %X%P: erro interno: erro relocalizaÃ§Ã£o nÃ£o suportada
@@ -1125,24 +1133,26 @@ cabeÃ§alho ppcboot:
 %X%P: erro de anÃ¡lise stack/lrlive: %E
 %X%P: relocalizaÃ§Ãµes de texto e funÃ§Ãµes indirectas GNU resultarÃ£o em segfault em tempo de execuÃ§Ã£o
 %X"%s" referenciado na secÃ§Ã£o "%pA" de %pB: definido em secÃ§Ã£o descartada "%pA" de %pB
-%pA tem secÃ§Ãµes ordenadas ["%pA" em %pB] e desordenadas ["%pA" em %pB] em simultÃ¢neo%pA tem secÃ§Ãµes ordenadas e desordenadas em simultÃ¢neo%pA:0x%v lrlive .brinfo (%u) difere da anÃ¡lise (%u)
+%pA:0x%v lrlive .brinfo (%u) difere da anÃ¡lise (%u)
 %pA:0x%v nÃ£o encontrado na tabela de funÃ§Ã£o
-%pB (%s): bandeira de secÃ§Ã£o %s (%#lx) ignorada%pB .opd nÃ£o permitida na versÃ£o ABI %d%pB e %pB sÃ£o para configuraÃ§Ãµes diferentes%pB e %pB sÃ£o para cores diferentes%pB contÃ©m cÃ³digo CRIS v32, incompatÃ­vel com os objectos anteriores%pB contÃ©m cÃ³digo nÃ£o-CRIS-v32, incompatÃ­vel com os objectos anteriores%pB tem ambos os atributos Tag_MPextension_use actual e legado%pB nÃ£o tem permissÃ£o para definir %s%pB secÃ§Ã£o %pA excede tamanho de grupo de fictÃ­cio%pB nÃºmero de sÃ­mbolo %lu referencia secÃ§Ã£o SHT_SYMTAB_SHNDX nÃ£o existente%pB usa 64-bit long double, %pB usa 128-bit long double%pB usa AltiVec vector ABI, %pB usa SPE vector ABI%pB usa IBM long double, %pB usa IEEE long double%pB usa vÃ­rgula rÃ­gida de precisÃ£o dupla, %pB usa vÃ­rgula rÃ­gida de precisÃ£o simples%pB usa vÃ­rgula rÃ­gida, %pB usa vÃ­rgula suave%pB usa r3/r4 para pequenas devoluÃ§Ãµes de estrutura, %pB usa a memÃ³ria%pB usa e_flags 0x%lx desconhecido%pB(%pA): erro: chamada a funÃ§Ã£o nÃ£o definida "%s"%pB(%pA): erro interno: relocalizaÃ§Ã£o perigosa%pB(%pA): erro interno: erro fora do intervalo%pB(%pA): erro interno: erro desconhecido%pB(%pA): erro interno: erro relocalizaÃ§Ã£o nÃ£o suportada%pB(%pA): tabela de propriedade invÃ¡lida%pB(%pA): mÃºltiplos modelos TLS nÃ£o sÃ£o suportados%pB(%pA): relocalizaÃ§Ã£o %d tem Ã­ndice de sÃ­mbolos invÃ¡lido %ld%pB(%pA): encontrado sÃ­mbolo de biblioteca partilhada %s ao realizar ligaÃ§Ã£o estÃ¡tica%pB(%pA): aviso: o uso de folhas de ramos longos na secÃ§Ã£o com atributo de secÃ§Ã£o SHF_ARM_PURECODE sÃ³ Ã© suportado para alvos M-profile que implementem a instruÃ§Ã£o movw.%pB(%pA): aviso: acesso nÃ£o alinhado ao sÃ­mbolo "%s" na Ã¡rea de dados pequenos%pB(%pA): aviso: acesso nÃ£o alinhado a dados pequenos de tipo %d.%pB(%pA+%#lx): entrada Stabs tem Ã­ndice de cadeia invÃ¡lido.%pB(%pA+%#x): erro: detectada mÃºltipla carga em bloco de instruÃ§Ã£o IT nÃ£o-Ãºltimo: impossÃ­vel gerar folha STM32L4XX.
+%pB (%s): bandeira de secÃ§Ã£o %s (%#lx) ignorada%pB .opd nÃ£o permitida na versÃ£o ABI %d%pB e %pB sÃ£o para configuraÃ§Ãµes diferentes%pB e %pB sÃ£o para cores diferentes%pB contÃ©m cÃ³digo CRIS v32, incompatÃ­vel com os objectos anteriores%pB contÃ©m cÃ³digo nÃ£o-CRIS-v32, incompatÃ­vel com os objectos anteriores%pB tem ambos os atributos Tag_MPextension_use actual e legado%pB nÃ£o tem permissÃ£o para definir %s%pB secÃ§Ã£o %pA excede tamanho de grupo de fictÃ­cio%pB nÃºmero de sÃ­mbolo %lu referencia secÃ§Ã£o SHT_SYMTAB_SHNDX nÃ£o existente%pB usa 64-bit long double, %pB usa 128-bit long double%pB usa AltiVec vector ABI, %pB usa SPE vector ABI%pB usa IBM long double, %pB usa IEEE long double%pB usa vÃ­rgula rÃ­gida de precisÃ£o dupla, %pB usa vÃ­rgula rÃ­gida de precisÃ£o simples%pB usa vÃ­rgula rÃ­gida, %pB usa vÃ­rgula suave%pB usa r3/r4 para pequenas devoluÃ§Ãµes de estrutura, %pB usa a memÃ³ria%pB usa e_flags 0x%lx desconhecido%pB(%pA): erro: chamada a funÃ§Ã£o nÃ£o definida "%s"%pB(%pA): erro: relocs internos em falta para a secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria %pB:%pA: erro: a entrada %u da tabela de relocalizaÃ§Ã£o estÃ¡ vazia%pB(%pA): erro: a relocalizaÃ§Ã£o secundÃ¡ria %u tem um tipo desconhecido%pB(%pA): erro: a relocalizaÃ§Ã£o secundÃ¡ria %u referencia um sÃ­mbolo eliminado%pB(%pA): erro: a relocalizaÃ§Ã£o secundÃ¡ria %u referencia um sÃ­mbolo em falta%pB(%pA): erro: secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria tem entradas de tamanho nÃ£o-padrÃ£o%pB(%pA): erro: secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria tem entradas de tamanho zero%pB(%pA): erro: secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria vazia%pB(%pA): erro: secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria processada duas vezes%pB(%pA): Ã­ndice da secÃ§Ã£o de informaÃ§Ã£o nÃ£o pode ser definido porque a secÃ§Ã£o nÃ£o estÃ¡ na saÃ­da%pB(%pA): Ã­ndice da secÃ§Ã£o de informaÃ§Ã£o invÃ¡lido%pB(%pA): erro interno: relocalizaÃ§Ã£o perigosa%pB(%pA): erro interno: erro fora do intervalo%pB(%pA): erro interno: erro desconhecido%pB(%pA): erro interno: erro relocalizaÃ§Ã£o nÃ£o suportada%pB(%pA): tabela de propriedade invÃ¡lida%pB(%pA): a secÃ§Ã£o ligaÃ§Ã£o nÃ£o pode ser definida porque o ficheiro de saÃ­da nÃ£o tem uma tabela de sÃ­mbolos%pB(%pA): mÃºltiplos modelos TLS nÃ£o sÃ£o suportados%pB(%pA): relocalizaÃ§Ã£o %d tem Ã­ndice de sÃ­mbolos invÃ¡lido %ld%pB(%pA): encontrado sÃ­mbolo de biblioteca partilhada %s ao realizar ligaÃ§Ã£o estÃ¡tica%pB(%pA): aviso: o uso de folhas de ramos longos na secÃ§Ã£o com atributo de secÃ§Ã£o SHF_ARM_PURECODE sÃ³ Ã© suportado para alvos M-profile que implementem a instruÃ§Ã£o movw.%pB(%pA): aviso: acesso nÃ£o alinhado ao sÃ­mbolo "%s" na Ã¡rea de dados pequenos%pB(%pA): aviso: acesso nÃ£o alinhado a dados pequenos de tipo %d.%pB(%pA+%#lx): entrada Stabs tem Ã­ndice de cadeia invÃ¡lido.%pB(%pA+%#x): erro: detectada mÃºltipla carga em bloco de instruÃ§Ã£o IT nÃ£o-Ãºltimo: impossÃ­vel gerar folha STM32L4XX.
 Use a opÃ§Ã£o gcc -mrestrict-it para gerar sÃ³ uma instruÃ§Ã£o por bloco IT.%pB(%pA+0x%lx): esperada relocalizaÃ§Ã£o estilo 16A em 0x%08x insn%pB(%pA+0x%lx): esperada relocalizaÃ§Ã£o estilo 16D em 0x%08x insn%pB(%pA+0x%v): chamada a secÃ§Ã£o nÃ£o-cÃ³digo %pB(%pA), anÃ¡lise incompleta
 %pB(%s): aviso: interworking nÃ£o activo; primeira ocorrÃªncia: %pB: chamada %s a %s%pB, secÃ§Ã£o %pA:
   relocalizaÃ§Ã£o %s invÃ¡lida em objecto partilhado; tipicamente uma mistura de opÃ§Ãµes, recompile com -fPIC%pB, secÃ§Ã£o %pA: sem PLT para relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s"%pB, secÃ§Ã£o %pA: sem PLT ou GOT para relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s"%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s tem referÃªncia nÃ£o definida a "%s", talvez uma declaraÃ§Ã£o misturada?%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s nÃ£o Ã© permitida para "%s", um sÃ­mbolo global com visibilidade predefinida, talvez uma declaraÃ§Ã£o misturada?%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s nÃ£o Ã© permitida para sÃ­mbolo global: "%s"%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s nÃ£o Ã© permitida para "%s", que estÃ¡ definido fora do programa, talvez uma declaraÃ§Ã£o misturada?%pB, secÃ§Ã£o %pA:
   relocalizaÃ§Ã£o %s nÃ£o deve ser usada em objecto partilhado; recompile com -fPIC%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s sem GOT criado%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o insolÃºvel %s contra sÃ­mbolo "%s"%pB, secÃ§Ã£o %pA:
   objecto compatÃ­vel v10/v32 nÃ£o deve conter uma relocalizaÃ§Ã£o PIC%pB, secÃ§Ã£o %pA, para sÃ­mbolo "%s":
-  relocalizaÃ§Ã£o %s nÃ£o deve ser usada em objecto partilhado; recompile com -fPIC%pB: reloc !samegp contra sÃ­mbolo sem .prologue: %s%pB: %pA tamanho invÃ¡lido de secÃ§Ã£o de entrada%pB: %pA nÃ£o estÃ¡ em ordem%pB: %pA aponta para lÃ¡ do fim da secÃ§Ã£o de texto%pB: %pA: transporte de reloc: %#x > 0xffff%pB: bandeira %strocada com mÃ³dulos anteriores%pB: %s nÃ£o absoluto%pB: %s: nÃ£o suportado%pB: %s acedido como sÃ­mbolo local normal e de fio, em simultÃ¢neo%pB: %s: versÃ£o necessÃ¡ria %d invÃ¡lida%pB: %s: versÃ£o %u invÃ¡lida (mÃ¡x %d)%pB: %s: transporte de reloc: 0x%lx > 0xffff%pB: "%s" acedido como sÃ­mbolo local normal e thread em simultÃ¢neo%pB: --in-implib sÃ³ Ã© suportado para bibliotecas importadas Secure Gateway.%pB: entrada .gnu.version_d invÃ¡lida%pB: entrada .gnu.version_r invÃ¡lida%pB: sub-segmento .got excede 64K (tamanho %d)%pB: .opd nÃ£o Ã© uma matriz normal de entradas opd%pB: secÃ§Ã£o .preinit_array nÃ£o Ã© permitida em DSO%pB: falha de uniÃ£o .rsrc: secÃ§Ã£o .rsrc corrupta%pB: falha de uniÃ£o .rsrc: tamanho .rsrc inesperado%pB: relocalizaÃ§Ã£o @gprel contra sÃ­mbolo dinÃ¢mico %s%pB: ramo @internal para sÃ­mbolo dinÃ¢mico %s%pB: relocalizaÃ§Ã£o @pcrel contra sÃ­mbolo dinÃ¢mico %s%pB: ABI incompatÃ­vel com a da emulaÃ§Ã£o seleccionada%pB: ABI Ã© incompatÃ­vel com aquele da emulaÃ§Ã£o seleccionada:
-  emulaÃ§Ã£o alvo "%s" nÃ£o corresponde a "%s"%pB: troca ABI: a ligar mÃ³dulo %s com mÃ³dulos prÃ©vios %s%pB: versÃ£o ABI %ld nÃ£o Ã© compatÃ­vel com a saÃ­da da versÃ£o ABI %ld%pB: troca ASE: a ligar mÃ³dulo %s com mÃ³dulos prÃ©vios %s%pB: imagens BE8 sÃ³ sÃ£o vÃ¡lidas em modo big-endian.%pB: impossÃ­vel gerir valor de tamanho de relocalizaÃ§Ã£o de %d%pB: relocalizaÃ§Ã£o de descritor de funÃ§Ã£o com adenda nÃ£o-zero%pB: secÃ§Ã£o "%pA" de GNU_MBIN tem campo sh_info invÃ¡lido: %d%pB: transporte GOT: nÃºmero de relocalizaÃ§Ãµes com desvio 8- ou 16-bit > %d%pB: transporte GOT: nÃºmero de relocalizaÃ§Ãµes com desvio 8-bit > %d%pB: tamanho do vector ISR trocado com mÃ³dulos anteriores, anterior %u-byte, actual %u-byte%pB: relocalizaÃ§Ãµes em ELF (EM: %d) genÃ©rico%pB: relocalizaÃ§Ã£o relativa a SB mas __c6xabi_DSBT_BASE nÃ£o definido%pB: secÃ§Ã£o SHT_GROUP [Ã­ndice %d] nÃ£o tem secÃ§Ãµes SHF_GROUP%pB: cÃ³digo exec TLS local nÃ£o pode ser ligado a objectos partilhados%pB: secÃ§Ãµes TLS nÃ£o adjacentes:%pB: a primeira secÃ§Ã£o no segmento PT_DYNAMIC nÃ£o Ã© a secÃ§Ã£o .dynamic%pB: objecto partilhado XCOFF sem produzir saÃ­da XCOFF%pB: __gp nÃ£o cobre o segmento de dados curtos%pB: "%s" acedido como sÃ­mbolo local FDPIC e thread em simultÃ¢neo%pB: "%s" acedido como sÃ­mbolo normal e FDPIC em simultÃ¢neo%pB: "%s" acedido como sÃ­mbolo local normal e thread em simultÃ¢neo%pB: "%s" e o seu sÃ­mbolo especial estÃ£o em secÃ§Ãµes diferentes.%pB: "%s" tem nÃºmeros de linha mas sem secÃ§Ã£o envolvente%pB: "%s" em reloc loader mas sem sÃ­mbolo loader%pB: "%s" reloc nÃ£o-PLT para sÃ­mbolo definido em biblioteca partilhada e acedido a partir de executÃ¡vel (reconstrua o ficheiro com -fPIC ?)%pB: sÃ­mbolo standard "%s" ausente.%pB: adenda devia ser zero para relocalizaÃ§Ãµes got%pB: adenda devia ser zero para relocalizaÃ§Ãµes plt%pB: cabeÃ§alho aout especifica um nÃºmero invÃ¡lido de entradas data-directory: %ld%pB: troca de arquitectura com mÃ³dulos anteriores%pB: tentativa de carregar cadeias de secÃ§Ã£o nÃ£o-cadeia (nÃºmero %d)%pB: tentativa de misturar objectos FDPIC e nÃ£o-FDPIC%pB tentativa de escrever tipo de reloc desconhecido%pB: registo de relocalizaÃ§Ã£o importado invÃ¡lido: %d%pB: mau nome de secÃ§Ã£o de relocalizaÃ§Ã£o "%s"%pB: mau tamanho de secÃ§Ã£o em ihex_read_section%pB: mÃ¡ definiÃ§Ã£o de sÃ­mbolo: "Main" definido como %s em vez do endereÃ§o inicial %s
+  relocalizaÃ§Ã£o %s nÃ£o deve ser usada em objecto partilhado; recompile com -fPIC%pB: reloc !samegp contra sÃ­mbolo sem .prologue: %s%pB: %pA tamanho invÃ¡lido de secÃ§Ã£o de entrada%pB: %pA nÃ£o estÃ¡ em ordem%pB: %pA aponta para lÃ¡ do fim da secÃ§Ã£o de texto%pB: %pA: transporte de reloc: %#x > 0xffff%pB: %s (desvio: 0x%s, informaÃ§Ã£o: 0x%s) contra "%s" para a secÃ§Ã£o "%pA" em %pB
+%pB: %s (desvio: 0x%s, informaÃ§Ã£o: 0x%s, adenda: 0x%s) contra "%s" para a secÃ§Ã£o "%pA" em %pB
+%pB: bandeira %strocada com mÃ³dulos anteriores%pB: %s sÃ­mbolo local no Ã­ndice %lu (>= sh_info de %lu)%pB: %s nÃ£o absoluto%pB: %s: nÃ£o suportado%pB: %s acedido como sÃ­mbolo local normal e de fio, em simultÃ¢neo%pB: %s: versÃ£o necessÃ¡ria %d invÃ¡lida%pB: %s: versÃ£o %u invÃ¡lida (mÃ¡x %d)%pB: %s: transporte de reloc: 0x%lx > 0xffff%pB: "%s" acedido como sÃ­mbolo local normal e thread em simultÃ¢neo%pB: --in-implib sÃ³ Ã© suportado para bibliotecas importadas Secure Gateway.%pB: entrada .gnu.version_d invÃ¡lida%pB: entrada .gnu.version_r invÃ¡lida%pB: sub-segmento .got excede 64K (tamanho %d)%pB: .opd nÃ£o Ã© uma matriz normal de entradas opd%pB: secÃ§Ã£o .preinit_array nÃ£o Ã© permitida em DSO%pB: falha de uniÃ£o .rsrc: secÃ§Ã£o .rsrc corrupta%pB: falha de uniÃ£o .rsrc: tamanho .rsrc inesperado%pB: relocalizaÃ§Ã£o @gprel contra sÃ­mbolo dinÃ¢mico %s%pB: ramo @internal para sÃ­mbolo dinÃ¢mico %s%pB: relocalizaÃ§Ã£o @pcrel contra sÃ­mbolo dinÃ¢mico %s%pB: ABI incompatÃ­vel com a da emulaÃ§Ã£o seleccionada%pB: ABI Ã© incompatÃ­vel com aquele da emulaÃ§Ã£o seleccionada:
+  emulaÃ§Ã£o alvo "%s" nÃ£o corresponde a "%s"%pB: troca ABI: a ligar mÃ³dulo %s com mÃ³dulos prÃ©vios %s%pB: versÃ£o ABI %ld nÃ£o Ã© compatÃ­vel com a saÃ­da da versÃ£o ABI %ld%pB: troca ASE: a ligar mÃ³dulo %s com mÃ³dulos prÃ©vios %s%pB: imagens BE8 sÃ³ sÃ£o vÃ¡lidas em modo big-endian.%pB: C_STAT nÃ£o Ã© suportado por XCOFF64%pB: impossÃ­vel gerir valor de tamanho de relocalizaÃ§Ã£o de %d%pB: relocalizaÃ§Ã£o de descritor de funÃ§Ã£o com adenda nÃ£o-zero%pB: secÃ§Ã£o "%pA" de GNU_MBIND tem um campo sh_info field invÃ¡lido: %d%pB: transporte GOT: nÃºmero de relocalizaÃ§Ãµes com desvio 8- ou 16-bit > %d%pB: transporte GOT: nÃºmero de relocalizaÃ§Ãµes com desvio 8-bit > %d%pB: tamanho do vector ISR trocado com mÃ³dulos anteriores, anterior %u-byte, actual %u-byte%pB: nÃºmero de sÃ­mbolos no ficheiro de entrada aumentou de %lu para %u
+%pB: relocalizaÃ§Ãµes em ELF (EM: %d) genÃ©rico%pB: relocalizaÃ§Ã£o relativa a SB mas __c6xabi_DSBT_BASE nÃ£o definido%pB: secÃ§Ã£o SHT_GROUP [Ã­ndice %d] nÃ£o tem secÃ§Ãµes SHF_GROUP%pB: cÃ³digo exec TLS local nÃ£o pode ser ligado a objectos partilhados%pB: relocalizaÃ§Ã£o TLS local em (0x%%pB: relocalizaÃ§Ã£o TLS %s contra sÃ­mbolo "%s" indefinido%pB: relocalizaÃ§Ã£o TLS em (0x%%pB: secÃ§Ãµes TLS nÃ£o adjacentes:%pB: a primeira secÃ§Ã£o no segmento PT_DYNAMIC nÃ£o Ã© a secÃ§Ã£o .dynamic%pB: impossÃ­vel gerir Ã­ndice de secÃ§Ã£o %x em sÃ­mbolo ELF. A usar ABS.%pB: objecto partilhado XCOFF sem produzir saÃ­da XCOFF%pB: __gp nÃ£o cobre o segmento de dados curtos%pB: "%s" acedido como sÃ­mbolo local FDPIC e thread em simultÃ¢neo%pB: "%s" acedido como sÃ­mbolo normal e FDPIC em simultÃ¢neo%pB: "%s" acedido como sÃ­mbolo local normal e thread em simultÃ¢neo%pB: "%s" e o seu sÃ­mbolo especial estÃ£o em secÃ§Ãµes diferentes.%pB: "%s" tem nÃºmeros de linha mas sem secÃ§Ã£o envolvente%pB: "%s" em reloc loader mas sem sÃ­mbolo loader%pB: "%s" reloc nÃ£o-PLT para sÃ­mbolo definido em biblioteca partilhada e acedido a partir de executÃ¡vel (reconstrua o ficheiro com -fPIC ?)%pB: sÃ­mbolo standard "%s" ausente.%pB: adenda devia ser zero para relocalizaÃ§Ãµes got%pB: adenda devia ser zero para relocalizaÃ§Ãµes plt%pB: cabeÃ§alho aout especifica um nÃºmero invÃ¡lido de entradas data-directory: %u%pB: troca de arquitectura com mÃ³dulos anteriores%pB: tentativa de carregar cadeias de secÃ§Ã£o nÃ£o-cadeia (nÃºmero %d)%pB: tentativa de misturar objectos FDPIC e nÃ£o-FDPIC%pB tentativa de escrever tipo de reloc desconhecido%pB: registo de relocalizaÃ§Ã£o importado invÃ¡lido: %d%pB: mau nome de secÃ§Ã£o de relocalizaÃ§Ã£o "%s"%pB: mau tamanho de secÃ§Ã£o em ihex_read_section%pB: mÃ¡ definiÃ§Ã£o de sÃ­mbolo: "Main" definido como %s em vez do endereÃ§o inicial %s
 %pB: mau Ã­ndice de sÃ­mbolo: %d%pB: relocalizaÃ§Ã£o base-plus-offset contra sÃ­mbolo de registo: %s em %pA%pB: relocalizaÃ§Ã£o base-plus-offset  contra sÃ­mbolo de registo: (desconhecido) em %pA%pB: impossÃ­vel representar secÃ§Ã£o "%pA" num formato de ficheiro objecto a.out%pB: impossÃ­vel representar secÃ§Ã£o para sÃ­mbolo"%s" num formato de ficheiro objecto a.out%pB: impossÃ­vel ligar mÃ³dulos %s com mÃ³dulos %s%pB: impossÃ­vel ligar RVE com outro alvo%pB: impossÃ­vel alocar nome de ficheiro para nÃºmero de ficheiro %d, %d bytes
-%pB: impossÃ­vel criar entrada fictÃ­cia %s%pB: impossÃ­vel gerir binÃ¡rios Alpha comprimidos.
-   Use bandeiras do compilador ou objZ para gerar binÃ¡rios descomprimidos.%pB: impossÃ­vel ligar ficheiro objecto fdpic a executÃ¡vel nÃ£o-fdpic%pB: impossÃ­vel ligar ficheiro objecto nÃ£o-fdpic a executÃ¡vel fdpic%pB: impossÃ­vel ligar objectos %s e %s.%pB: alteraÃ§Ã£o em gp: BRSGP %s%pB: classe %d sÃ­mbolo "%s" nÃ£o tem entradas aux%pB: compilado %s -mtune=%s e ligado com mÃ³dulos compilados %s -mtune=%s%pB: compilado para um sistema 64 bit e o alvo Ã© 32 bit%pB: compilado para um sistema big endian e o alvo Ã© little endian%pB: compilado para um sistema little endian e o alvo Ã© big endian%pB: compilado normalmente e ligado com mÃ³dulos compilados com -mrelocatable%pB: compilado com %s e ligado com mÃ³dulos compilados com %s%pB: compilado com %s e ligado com mÃ³dulos que usam relocalizaÃ§Ãµes nÃ£o-pic%pB: compilado com -mrelocatable e ligado com mÃ³dulos compilados normalmente%pB: impossÃ­vel encontrar a secÃ§Ã£o de saÃ­da %pA para a secÃ§Ã£o de entrada %pA%pB: impossÃ­vel ler conteÃºdo da secÃ§Ã£o "%pA"
+%pB: impossÃ­vel alocar memÃ³ria para entradas GOT locais%pB: impossÃ­vel criar entrada fictÃ­cia %s%pB: impossÃ­vel gerir binÃ¡rios Alpha comprimidos; use bandeiras do compilador ou objZ para gerar binÃ¡rios descomprimidos%pB: impossÃ­vel ligar ficheiro objecto fdpic a executÃ¡vel nÃ£o-fdpic%pB: impossÃ­vel ligar ficheiro objecto nÃ£o-fdpic a executÃ¡vel fdpic%pB: impossÃ­vel ligar objectos %s e %s.%pB: alteraÃ§Ã£o em gp: BRSGP %s%pB: classe %d sÃ­mbolo "%s" nÃ£o tem entradas aux%pB: compilado %s -mtune=%s e ligado com mÃ³dulos compilados %s -mtune=%s%pB: compilado para um sistema 64 bit e o alvo Ã© 32 bit%pB: compilado para um sistema big endian e o alvo Ã© little endian%pB: compilado para um sistema little endian e o alvo Ã© big endian%pB: compilado normalmente e ligado com mÃ³dulos compilados com -mrelocatable%pB: compilado com %s e ligado com mÃ³dulos compilados com %s%pB: compilado com %s e ligado com mÃ³dulos que usam relocalizaÃ§Ãµes nÃ£o-pic%pB: compilado com -mrelocatable e ligado com mÃ³dulos compilados normalmente%pB: ramo condicional para sÃ­mbolo "%s" indefinido nÃ£o permitido%pB: impossÃ­vel encontrar a secÃ§Ã£o de saÃ­da %pA para a secÃ§Ã£o de entrada %pA%pB: impossÃ­vel ler conteÃºdo da secÃ§Ã£o "%pA"
 %pB: csect "%s" nÃ£o estÃ¡ em secÃ§Ã£o envolvente%pB: relocalizaÃ§Ã£o GOT directa %s contra "%s" sem registo-base nÃ£o pode ser usada ao fazer um objecto partilhado%pB: relocalizaÃ§Ã£o GOT directa R_386_GOT32X contra "%s" sem registo-base nÃ£o pode ser usada ao fazer um objecto partilhado%pB: directiva LOCAL sÃ³ Ã© vÃ¡lida com um registo ou um valor absoluto%pB: relocalizaÃ§Ã£o dtp-relative contra sÃ­mbolo dinÃ¢mico %s%pB: fictÃ­cio de exportaÃ§Ã£o duplicado %s%pB: secÃ§Ã£o "%pA" duplicada tem conteÃºdo diferente
 %pB: secÃ§Ã£o "%pA" duplicada tem tamanho diferente
 %pB: objecto dinÃ¢mico sem secÃ§Ã£o .loader%pB: relocalizaÃ§Ã£o dinÃ¢mica contra "%pT" em secÃ§Ã£o sÃ³ de leitura "%pA"
 %pB: relocalizaÃ§Ã£o dinÃ¢mica em secÃ§Ã£o "%pA" sÃ³ de leitura
-%pB: endianness incompatÃ­vel com a da emulaÃ§Ã£o seleccionada%pB: funÃ§Ã£o de entrada "%s" estÃ¡ vazia.%pB: funÃ§Ã£o de entrada "%s" nÃ£o saÃ­da.%pB: erro: ABI trocado com mÃ³dulos anteriores.%pB: erro: errata Cortex-A8 fictÃ­cia estÃ¡ alocada a localizaÃ§Ã£o nÃ£o-segura%pB: erro: errata Cortex-A8 fictÃ­cia fora do intervalo (ficheiro de entrada muito grande)%pB: erro: segmento PHDR nÃ£o coberto pelo segmento LOAD%pB: erro: folha VFP11 fora do intervalo%pB: erro: poder de alinhamento %d da secÃ§Ã£o "%pA" Ã© muito grande%pB: erro: secÃ§Ã£o de atributo "%pA"muito grande: %#llx%pB: erro: impossÃ­vel criar folha STM32L4XX.%pB: erro: Debug Data termina apÃ³s o fim da pasta de depuraÃ§Ã£o.%pB: erro: Erratum 835769 fictÃ­cio fora do intervalo (ficheiro de entrada muito grande)%pB: erro: Erratum 843419 fictÃ­cio fora do intervalo (ficheiro de entrada muito grande)%pB: erro: conjunto de instruÃ§Ãµes trocado com mÃ³dulos anteriores.%pB: Erro: definiÃ§Ã£o mÃºltipla de "%s"; inÃ­cio de %s estÃ¡ definido num ficheiro previamente ligado%pB: erro: segmento %d nÃ£o carga inclui cabeÃ§alho de ficheiro e/ou de programa%pB: erro: search_nds32_elf_blank reporta nÃ³ errado%pB: erro: sÃ­mbolo "%s" inesperado em secÃ§Ã£o COMDAT%pB: erro: atributo de objecto EABI obrigatÃ³rio desconhecido %d%pB: falha ao procurar secÃ§Ã£o de informaÃ§Ã£o para a secÃ§Ã£o %d%pB: falha ao procurar secÃ§Ã£o de ligaÃ§Ã£o para a secÃ§Ã£o %d%pB: falha ao gerar biblioteca de importaÃ§Ã£o%pB: falha ao ler secÃ§Ã£o de dados de depuraÃ§Ã£o%pB: fatal: obtidos sÃ­mbolos genÃ©ricos antes de relaxar%pB: classe de ficheiro %s incompatÃ­vel com %s%pB: relocalizaÃ§Ã£o gotoff contra sÃ­mbolo dinÃ¢mico %s%pB: relocalizaÃ§Ã£o gp-relative contra sÃ­mbolo dinÃ¢mico %s%pB: secÃ§Ã£o de grupo "%pA" nÃ£o tem conteÃºdo%pB: sÃ­mbolo "%s" oculto em %pB Ã© referenciado por DSO%pB: sÃ­mbolo "%s" oculto nÃ£o estÃ¡ definido%pB: a ignorar secÃ§Ã£o "%pA" duplicada
+%pB: endianness incompatÃ­vel com a da emulaÃ§Ã£o seleccionada%pB: funÃ§Ã£o de entrada "%s" estÃ¡ vazia.%pB: funÃ§Ã£o de entrada "%s" nÃ£o saÃ­da.%pB: erro: ABI trocado com mÃ³dulos anteriores.%pB: erro: errata Cortex-A8 fictÃ­cia estÃ¡ alocada a localizaÃ§Ã£o nÃ£o-segura%pB: erro: errata Cortex-A8 fictÃ­cia fora do intervalo (ficheiro de entrada muito grande)%pB: erro: segmento PHDR nÃ£o coberto pelo segmento LOAD%pB: erro: folha VFP11 fora do intervalo%pB: erro: poder de alinhamento %d da secÃ§Ã£o "%pA" Ã© muito grande%pB: erro: secÃ§Ã£o de atributo "%pA"muito grande: %#llx%pB: erro: tamanho da secÃ§Ã£o de atributo muito pequeno: %ld%pB: erro: impossÃ­vel criar folha STM32L4XX.%pB: erro: Debug Data termina apÃ³s o fim da pasta de depuraÃ§Ã£o.%pB: erro: Erratum 835769 fictÃ­cio fora do intervalo (ficheiro de entrada muito grande)%pB: erro: erratum 843419 imediato 0x%%pB: erro: Erratum 843419 fictÃ­cio fora do intervalo (ficheiro de entrada muito grande)%pB: erro: conjunto de instruÃ§Ãµes trocado com mÃ³dulos anteriores.%pB: Erro: definiÃ§Ã£o mÃºltipla de "%s"; inÃ­cio de %s estÃ¡ definido num ficheiro previamente ligado%pB: erro: segmento %d nÃ£o carga inclui cabeÃ§alho de ficheiro e/ou de programa%pB: erro: search_nds32_elf_blank reporta nÃ³ errado%pB: erro: sÃ­mbolo "%s" inesperado em secÃ§Ã£o COMDAT%pB: erro: atributo de objecto EABI obrigatÃ³rio desconhecido %d%pB: esperado Ã­ndice de sÃ­mbolo no intervalo 0..%lu, encontrado sÃ­mbolo local com Ã­ndice %lu%pB: falha ao procurar secÃ§Ã£o de informaÃ§Ã£o para a secÃ§Ã£o %d%pB: falha ao procurar secÃ§Ã£o de ligaÃ§Ã£o para a secÃ§Ã£o %d%pB: falha ao gerar biblioteca de importaÃ§Ã£o%pB: falha ao ler secÃ§Ã£o de dados de depuraÃ§Ã£o%pB: fatal: obtidos sÃ­mbolos genÃ©ricos antes de relaxar%pB: classe de ficheiro %s incompatÃ­vel com %s%pB: relocalizaÃ§Ã£o gotoff contra sÃ­mbolo dinÃ¢mico %s%pB: relocalizaÃ§Ã£o gp-relative contra sÃ­mbolo dinÃ¢mico %s%pB: secÃ§Ã£o de grupo "%pA" nÃ£o tem conteÃºdo%pB: sÃ­mbolo "%s" oculto em %pB Ã© referenciado por DSO%pB: sÃ­mbolo "%s" oculto nÃ£o estÃ¡ definido%pB: a ignorar secÃ§Ã£o "%pA" duplicada
 %pB: nome de secÃ§Ã£o ilegal "%pA"%pB: Ã­ndice de sÃ­mbolo %ld ilegal em relocs%pB: tipo de mÃ¡quina incompatÃ­vel. SaÃ­da Ã© 0x%x. Entrada Ã© 0x%x%pB: tamanho incorrecto do sÃ­mbolo "%s".%pB: sÃ­mbolo indirecto "%s" para "%s" Ã© um ciclo%pB: conjunto de instruÃ§Ãµes trocado com os mÃ³dulos anteriores%pB: erro interno em ihex_read_section%pB: erro interno, secÃ§Ã£o de registo interna %pA tinha conteÃºdo
 %pB: erro interno, tabela de sÃ­mbolo alterou o tamanho de %d para %d palavras
 %pB: sÃ­mbolo "%s" interno em %pB Ã© referenciado por DSO%pB: sÃ­mbolo "%s" nÃ£o estÃ¡ definido%pB: entrada na secÃ§Ã£o [%u] SHT_GROUP invÃ¡lida%pB: entrada de biblioteca importada %s invÃ¡lida; o sÃ­mbolo deve ser absoluto, global e referir-se a funÃ§Ãµes Thumb.%pB: ligaÃ§Ã£o invÃ¡lida %u para secÃ§Ã£o reloc %s (Ã­ndice %u)%pB: ficheiro mmo invÃ¡lido: YZ de lop_end (%ld) nÃ£o igual ao nÃºmero de tetras para o lop_stab (%ld) precedente
@@ -1159,11 +1169,23 @@ Use a opÃ§Ã£o gcc -mrestrict-it para ger
 %pB: ficheiro mmo invÃ¡lido: lop_end nÃ£o Ã© o Ãºltimo item no ficheiro
 %pB: ficheiro mmo invÃ¡lido: lopcode "%d" nÃ£o suportado
 %pB: sh_link field (%d) invÃ¡lido no nÃºmero da secÃ§Ã£o %d%pB: sÃ³mbolo especial invÃ¡lido "%s"; tem de ser um sÃ­mbolo de funÃ§Ã£o global ou fraco.%pB: sÃ­mbolo padrÃ£o %s invÃ¡lido; tem de ser um sÃ­mbolo de funÃ§Ã£o global ou fraco.%pB: tabela de sÃ­mbolo invÃ¡lida: sÃ­mbolo duplicado "%s"
-%pB: transporte de nÂº de linha: 0x%lx > 0xffff%pB: a ligar mÃ³dulo %s com mÃ³dulos prÃ©vios %s%pB: a ligar cÃ³digo 32-bit com cÃ³digo 64-bit%pB: a ligar ficheiros 64-bit com ficheiros 32-bit%pB: a ligar especÃ­fico UltraSPARC com cÃ³digo especÃ­fico HAL%pB: a ligar ficheiros auto-pic com ficheiro nÃ£o auto-pic%pB: a ligar ficheiros big-endian com ficheiros little-endian%pB: a ligar ficheiros constant-gp com ficheiros nÃ£o constant-gp%pB: a ligar ficheiros compilados para inteiros de 16-bit (-mshort) e outros para inteiros de 32-bit%pB: a ligar ficheiros compilados para duplos de 32-bit (-fshort-double) e outros para duplos de 64-bit%pB: a ligar ficheiros compilados para HCS12 com outros compilados para HC12%pB: a ligar ficheiros little endian com ficheiros big endian%pB: a ligar cÃ³digo nÃ£o-pic num executÃ¡vel de posiÃ§Ã£o independente%pB: a ligar trap-on-NULL-dereference com ficheiros nÃ£o-trapping%pB: reloc loader em secÃ§Ã£o sÃ³ de leitura %pA%pB: reloc loader em secÃ§Ã£o "%s" nÃ£o reconhecida%pB: sÃ­mbolo "%s" local em %pB Ã© referenciado por DSO%pB: tabela de descritor de sÃ­mbolo local Ã© NULL ao aplicar relocalizaÃ§Ã£o %s contra sÃ­mbolo local%pB: conflito de bandeira de mÃ¡quina com destino%pB: reloc malformada detectada para secÃ§Ã£o %pA%pB: reloc mal formada detectada para secÃ§Ã£o %s%pB: XTY_LD "%s" mal colocado%pB: OMIT_FP aninhado em %pA.%pB: sem nÃºcleo para alocar um sÃ­mbolo com %d bytes%pB: sem nÃºcleo para alocar nome de secÃ§Ã£o %s%pB: sem informaÃ§Ã£o de grupo para secÃ§Ã£o "%pA"%pB: sem registos inicializados; tamanho de secÃ§Ã£o 0
-%pB: sem sÃ­mbolo para biblioteca de importaÃ§Ã£o%pB: sem secÃ§Ã£o de versÃ£o de sÃ­mbolo para o sÃ­mbolo com versÃ£o "%s"%pB: sem secÃ§Ãµes de grupo vÃ¡lidas%pB: cÃ³digo nÃ£o-pic com relocalizaÃ§Ã£o imm contra sÃ­mbolo dinÃ¢mico "%s"%pB: relocalizaÃ§Ã£o nÃ£o-pic contra sÃ­mbolo %s%pB: sem espaÃ§o para cabeÃ§alhos do programa, tente ligar com -N%pB: sÃ³ registos %%g[2367] podem ser declarados usando STT_REGISTER%pB: sem memÃ³ria ao criar nome para secÃ§Ã£o vazia%pB: sem memÃ³ria em _bfd_elf_get_property%pB: tamanho de pÃ¡gina muito grande (0x%x)%pB: relocalizaÃ§Ã£o pc-relative contra sÃ­mbolo dinÃ¢mico %s%pB: relocalizaÃ§Ã£o pc-relative contra sÃ­mbolo fraco %s indefinido%pB: extensÃ£o precisou de gerir objecto lto%pB: provavelmente compilado com -fPIC?%pB: sÃ­mbolo "%s" protegido nÃ£o estÃ¡ definido%pB: tipo de mÃ¡quina reconhecido mas nÃ£o gerido (0x%x) em arquivo Import Library Format%pB: relocalizaÃ§Ã£o de registo contra sÃ­mbolo nÃ£o-registo: %s em %pA%pB: relocalizaÃ§Ã£o de registo contra sÃ­mbolo nÃ£o-registo: (desconhecido) em %pA%pB: reloc contra Ã­ndice de sÃ­mbolo nÃ£o existente: %ld%pB: ligaÃ§Ã£o relocalizÃ¡vel de %s para %s nÃ£o suportado%pB: relocalizaÃ§Ã£o %s contra %s%s"%s" nÃ£o pode ser usada ao fazer %s%s%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo STT_GNU_IFUNC "%s" nÃ£o Ã© gerido por %s%pB: relocalizaÃ§Ã£o %s contra STT_GNU_IFUNC sÃ­mbolo "%s" nÃ£o suportada%pB: relocalizaÃ§Ã£o %s contra "%s" nÃ£o pode ser usada ao fazer um objecto partilhado%pB: relocalizaÃ§Ã£o %s contra "%s" nÃ£o pode ser usada a fazer um objecto partilhado; recompile com -fPIC%pB: relocalizaÃ§Ã£o %s contra "%s" nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" externo ou indefinido nÃ£o pode ser usada ao fazer %s; recompile com -fPIC%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" nÃ£o Ã© suportada em modo x32%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" que pode ligar externamente nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC%pB: relocalizaÃ§Ã£o %s nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC%pB: relocalizaÃ§Ã£o %s nÃ£o pode ser usada ao fazer objecto partilhado%pB: relocalizaÃ§Ã£o R_386_GOTOFF contra %s "%s" protegido nÃ£o pode ser usada ao fazer um objecto partilhado%pB: relocalizaÃ§Ã£o R_386_GOTOFF contra %s "%s" indefinido nÃ£o pode ser usada ao fazer um objecto partilhado%pB: relocalizaÃ§Ã£o R_X86_64_GOTOFF64 contra %s "%s" protegido nÃ£o pode ser usado ao fazer um objecto partilhado%pB: relocalizaÃ§Ã£o R_X86_64_GOTOFF64 contra  %s "%s" indefinido nÃ£o pode ser usado ao fazer um objecto partilhado%pB: tamanho de relocalizaÃ§Ã£o trocado na secÃ§Ã£o %pB %pA%pB: relocalizaÃ§Ãµes em ELF (EM: %d) genÃ©rico%pB: relocs na secÃ§Ã£o "%pA", mas nÃ£o tem conteÃºdo%pB: secÃ§Ã£o %pA: transporte na tabela de sÃ­mbolo no desvio %ld%pB: secÃ§Ã£o "%pA" nÃ£o pode ser alocada no segmento %d%pB: entrada do grupo de secÃ§Ã£o nÃºmero %u estÃ¡ corrompida%pB: sh_link [%d] na secÃ§Ã£o "%pA" estÃ¡ incorrecto%pB: sh_link da secÃ§Ã£o "%pA" aponta para secÃ§Ã£o descartada "%pA" de "%pB"%pB: sh_link da secÃ§Ã£o "%pA" aponta para secÃ§Ã£o removida "%pA" de "%pB"%pB: tamanho de campo Ã© zero em cabeÃ§alho Import Library Format%pB: sÃ­mbolo especial "%s" sÃ³ Ã© permitido para arquitecturas ARMv8-M ou posteriores.%pB: fixup de especulaÃ§Ã£o para sÃ­mbolo dinÃ¢mico %s%pB: tamanho de stack especificado e definido como %s%pB: cadeia nÃ£-null terminada em ficheiro objecto ILF.%pB: suporte a dinÃ¢mica local nÃ£o implementado%pB: sÃ­mbolo "%s" tem tipo csect %d nÃ£o reconhecido%pB: sÃ­mbolo "%s" tem smclas %d nÃ£o reconhecido%pB: sÃ­mbolo "%s" requerido mas nÃ£o presente%pB: tirar o endereÃ§o da funÃ§Ã£o protegida "%s" nÃ£o pode ser feito ao fazer uma biblioteca partilhada%pB: o alvo (%s) de uma relocalizaÃ§Ã£o %s estÃ¡ na secÃ§Ã£o de saÃ­da errada (%s)%pB: o alvo (%s) de uma relocalizaÃ§Ã£o %s estÃ¡ na secÃ§Ã£o errada (%pA)%pB: demasiadas secÃ§Ãµes (%d)%pB: demasiadas secÃ§Ãµes: %d (>= %d)%pB: demasiadas secÃ§Ãµes: %u%pB: relocalizaÃ§Ã£o tp-relative contra sÃ­mbolo dinÃ¢mico %s%pB: impossÃ­vel criar secÃ§Ã£o vazia falsa%pB: impossÃ­vel preencher DataDictionary[12] porque .idata$5 estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[1] porque .idata$2 estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[1] porque .idata$4 estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[9] porque __tls_used estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] porque .idata$6 estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] porque .idata$6 estÃ¡ em falta%pB: impossÃ­vel encontrar a folha %s "%s"%pB: impossÃ­vel encontrar nome para secÃ§Ã£o vazia%pB: impossÃ­vel obter secÃ§Ã£o %pA descomprimida%pB: impossÃ­vel inicializar estado comprimido para secÃ§Ã£o %s%pB: impossÃ­vel inicializar estado descomprimido para secÃ§Ã£o %s%pB: impossÃ­vel carregar nome de secÃ§Ã£o COMDAT%pB: impossÃ­vel ordenar relocs - tÃªm mais de um tamanho%pB: impossÃ­vel ordenar relocs - tÃªm um tamanho desconhecido%pB: referÃªncia indefinida a sÃ­mbolo "%s"%pB: sÃ­mbolo indefinido "%s" em secÃ§Ã£o .opd%pB: sÃ­mbolo indefinido em relocalizaÃ§Ã£o R_PPC64_TOCSAVE%pB: redefiniÃ§Ã£o de sÃ­mbolo com versÃ£o indirecto "%s" inesperada%pB: tipo de reloc inesperado %u em secÃ§Ã£o .opd%pB: relocalizaÃ§Ã£o dinÃ¢mica contra %s nÃ£o gerida%pB: tipo de importaÃ§Ã£o nÃ£o gerido; %x%pB: arquitectura desconhecida %s%pB: comando de carga %#x desconhecido%pB: atributo de objecto ARC %d obrigatÃ³rio desconhecido.Aviso: %pB: atributo de objecto EABI %d obrigatÃ³rio desconhecido%pB: tipo de relocalizaÃ§Ã£o %d desconhecido%pB: tipo desconhecido [%#x], secÃ§Ã£o "%s"%pB: secÃ§Ã£o tipo [%#x] "%s" desconhecida no grupo [%pA]%pB: OMIT_FP desirmanado em %pA.%pB: tipo de mÃ¡quina nÃ£o reconhecido (0x%x) em arquivo Import Library Format%pB: tipo de nome de importaÃ§Ã£o nÃ£o reconhecido; %x%pB: tipo de importaÃ§Ã£o nÃ£o reconhecido; %x%pB: relocalizaÃ§Ã£o nÃ£o reconhecida (%#x) na secÃ§Ã£o "%pA"%pB: classe de armazenamento %d nÃ£o reconhecida para %s sÃ­mbolo "%s"%pB: chamada nÃ£o-PIC a IFUNC "%s" nÃ£o suportada%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado%pB: tipo de relocalizaÃ§Ã£o %#x nÃ£o suportado%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado exportado: %#x%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado importado: %#x%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado: %#x%pB: transiÃ§Ã£o %s para %s nÃ£o suportada%pB: sequÃªncia de caracteres largos 0x%02X 0x%02X nÃ£o suportada apÃ³s nome de sÃ­mbolo comeÃ§ado por "%s"
-%pB: usa instruÃ§Ãµes %s enquanto os mÃ³dulos anteriores usam instruÃ§Ãµes %s%pB: usa sÃ­mbolos prefixados com _, mas o ficheiro serÃ¡ escrito com sÃ­mbolos sem prefixo%pB: usa campos e_flags diferentes (%#x) dos mÃ³dulos anteriores (%#x)%pB: usa campos e_flags (%#x) desconhecidos diferentes dos mÃ³dulos anteriores (%#x)%pB: usa instruÃ§Ãµes incompatÃ­veis com instruÃ§Ãµes usadas em mÃ³dulos anteriores%pB: usa sÃ­mbolos sem prefixo, mas o ficheiro serÃ¡ escrito com sÃ­mbolos prefixados com _%pB: nÃ³ de versÃ£o nÃ£o encontrado para sÃ­mbolo %s%pB: a visibilidade do sÃ­mbolo "%s" mudou.%pB: aviso: ficheiro nÃºcleo truncado%pB: aviso: %pA: transporte de nÃºmero de linha: %#x > 0xffff%pB: aviso: instruÃ§Ã£o %s BLX destina-se a funÃ§Ã£o %s "%s".%pB: aviso: relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" da secÃ§Ã£o %pA%pB: aviso: %s nÃ£o suportado em modo partilhado%pB: aviso: %s: transporte de nÃºmero de linha: 0x%lx > 0xffff%pB: aviso: sÃ­mbolo "%s" COMDAT nÃ£o corresponde ao nome de secÃ§Ã£o "%s"%pB: aviso: geraÃ§Ã£o RVE PLT nÃ£o suportada%pB: aviso: secÃ§Ã£o alocada "%s" nÃ£o estÃ¡ no segmento%pB: aviso: mau tamanho de opÃ§Ã£o "%s" %u menor que o seu cabeÃ§alho%pB: aviso: impossÃ­vel determinar a funÃ§Ã£o alvo para secÃ§Ã£o fictÃ­cia "%s"%pB: aviso: afirma ter 0xffff relocs, sem transporte%pB: aviso: informaÃ§Ã£o de nÃºmero de linha duplicada para "%s"%pB: aviso: Endian trocado com mÃ³dulos anteriores.%pB: aviso: a ignorar bandeira de secÃ§Ã£o %s na secÃ§Ã£o %s%pB: aviso: sÃ­mbolo ilegal em entrada de nÃºmero de linha %d%pB: aviso: Ã­ndice de sÃ­mbolo %ld ilegal em relocs%pB: aviso: Ã­ndice de sÃ­mbolo 0x%lx ilegal em entrada de nÃºmero de linha %d%pB: aviso: versÃµes elf %s e %s incompatÃ­veis.%pB: aviso: ASEs inconsistente entre e_flags e .MIPS.abiflags%pB: aviso: FP ABI inconsistente entre .gnu.attributes e .MIPS.abiflags%pB: aviso: ISA inconsistente entre e_flags e .MIPS.abiflags%pB: aviso: extensÃµes ISA inconsistentes entre e_flags e .MIPS.abiflags%pB: aviso: isymMax (%ld) Ã© maior que ifdMax (%ld)%pB: aviso: total de nÃºmero de linha (%#lx) excede tamanho de secÃ§Ã£o (%#lx)%pB: aviso: falha ao ler tabela de nÃºmero de linha%pB: aviso: a ligar ficheiros PIC com ficheiros nÃ£o-PIC%pB: aviso: a ligar ficheiros abicalls com ficheiros nÃ£o-abicalls%pB: aviso: detectado ciclo em dependÃªncias da secÃ§Ã£o%pB: aviso: detectadas mÃºltiplas tabelas de sÃ­mbolo dinÃ¢mico - a ignorar a tabela na secÃ§Ã£o %u%pB: aviso: detectadas mÃºltiplas tabelas de sÃ­mbolo - a ignorar a tabela na secÃ§Ã£o %u%pB: aviso: sÃ­mbolo para secÃ§Ã£o "%s" nÃ£o encontrado%pB: aviso: encontradas versÃµes anteriores do ficheiro objecto, recompile com as ferramentas actuais.%pB: aviso: falha ao relocalizar SDA_BASE.%pB: aviso: a soluÃ§Ã£o de errata STM32L4XX seleccionada nÃ£o Ã© necessÃ¡ria para arquitectura de destino%pB: aviso: a soluÃ§Ã£o de errata VFP11 seleccionada nÃ£o Ã© necessÃ¡ria para arquitectura de destino%pB: aviso: sh_link nÃ£o definido para a secÃ§Ã£o "%pA"%pB: aviso: tabela de simbolo muito grande para mmo, maior que palavras de 65535 32-bit: %d. SÃ³ "Main" serÃ¡ emitido.
-%pB: aviso: geraÃ§Ã£o PLT modo thumb-1 nÃ£o Ã© actualmente suportada%pB: aviso: acesso nÃ£o alinhado a entrada GOT.%pB: aviso: bandeira inesperada no campo flags2 de .MIPS.abiflags (0x%lx)%pB: aviso: atributo de objecto EABI desconhecido %d%pB: nÃ£o resolve relocalizaÃ§Ã£o TLS em tempo de execuÃ§Ã£o%pB:%d: mau checksum em ficheiro S-record%pB:%d: total de byte %d muito pequeno%pB:%d: carÃ¡cter "%s" inesperado em ficheiro Intel Hex%pB:%d: carÃ¡cter "%s" inesperado em ficheiro S-record%pB:%pA%s excede o tamanho de sobreposiÃ§Ã£o
-%pB:%pA: %s e %s tÃªm de estar na mesma secÃ§Ã£o de entrada%pB:%pA: erro: relocalizaÃ§Ã£o referencia sÃ­mbolo %s que foi removido pela recolha de lixo.%pB:%pA: erro: tente religar com --gc-keep-exported activado.%pB:%pA: tabela %s com correspondente %s em falta%pB:%pA: entrada de tabela %s nÃ£o alinhado dentro da tabela%pB:%pA: entrada de tabela %s fora da tabela%pB:%pA: aviso: reloc Red Hat obsoleta %s detectada contra: %s%pB:%s tem relocs normal e TLS em simultÃ¢neo%pB:%s secÃ§Ã£o %s: alinhamento 2**%u nÃ£o representÃ¡vel%pB:%u: mau checksum em ficheiro Intel Hex (esperado %u, obtido %u)%pB:%u: mau tamanho de registo de endereÃ§o estendido em ficheiro Intel Hex%pB:%u: mau tamanho de registo em endereÃ§o linear estendido em ficheiro Intel Hex%pB:%u: mau tamanho de endereÃ§o linear inicial estendido em ficheiro Intel Hex%pB:%u: mau tamanho de endereÃ§o inicial estendido em ficheiro Intel Hex%pB:%u: tipo ihex nÃ£o reconhecido %u em ficheiro Intel Hex%s defenido em entrada toc removida%s duplicado
+%pB: desvio de versÃ£o invÃ¡lido %lx (mÃ¡x %lx)%pB: transporte de nÂº de linha: 0x%lx > 0xffff%pB: a ligar mÃ³dulo %s com mÃ³dulos prÃ©vios %s%pB: a ligar cÃ³digo 32-bit com cÃ³digo 64-bit%pB: a ligar ficheiros 64-bit com ficheiros 32-bit%pB: a ligar especÃ­fico UltraSPARC com cÃ³digo especÃ­fico HAL%pB: a ligar ficheiros auto-pic com ficheiro nÃ£o auto-pic%pB: a ligar ficheiros big-endian com ficheiros little-endian%pB: a ligar ficheiros constant-gp com ficheiros nÃ£o constant-gp%pB: a ligar ficheiros compilados para inteiros de 16-bit (-mshort) e outros para inteiros de 32-bit%pB: a ligar ficheiros compilados para duplos de 32-bit (-fshort-double) e outros para duplos de 64-bit%pB: a ligar ficheiros compilados para HCS12 com outros compilados para HC12%pB: a ligar ficheiros little endian com ficheiros big endian%pB: a ligar cÃ³digo nÃ£o-pic num executÃ¡vel de posiÃ§Ã£o independente%pB: a ligar trap-on-NULL-dereference com ficheiros nÃ£o-trapping%pB: reloc loader em secÃ§Ã£o sÃ³ de leitura %pA%pB: reloc loader em secÃ§Ã£o "%s" nÃ£o reconhecida%pB: sÃ­mbolo "%s" local em %pB Ã© referenciado por DSO%pB: tabela de descritor de sÃ­mbolo local Ã© NULL ao aplicar relocalizaÃ§Ã£o %s contra sÃ­mbolo local%pB: conflito de bandeira de mÃ¡quina com destino%pB: reloc malformada detectada para secÃ§Ã£o %pA%pB: reloc mal formada detectada para secÃ§Ã£o %s%pB: XTY_LD "%s" mal colocado%pB: OMIT_FP aninhado em %pA.%pB: sem nÃºcleo para alocar um sÃ­mbolo com %d bytes%pB: sem nÃºcleo para alocar nome de secÃ§Ã£o %s%pB: sem informaÃ§Ã£o de grupo para secÃ§Ã£o "%pA"%pB: sem registos inicializados; tamanho de secÃ§Ã£o 0
+%pB: sem sÃ­mbolo para biblioteca de importaÃ§Ã£o%pB: sem secÃ§Ã£o de versÃ£o de sÃ­mbolo para o sÃ­mbolo com versÃ£o "%s"%pB: sem secÃ§Ãµes de grupo vÃ¡lidas%pB: cÃ³digo nÃ£o-pic com relocalizaÃ§Ã£o imm contra sÃ­mbolo dinÃ¢mico "%s"%pB: relocalizaÃ§Ã£o nÃ£o-pic contra sÃ­mbolo %s%pB: sem espaÃ§o para cabeÃ§alhos do programa, tente ligar com -N%pB: versÃ£o de informaÃ§Ã£o insuficiente%pB: sÃ³ registos %%g[2367] podem ser declarados usando STT_REGISTER%pB: sem memÃ³ria ao criar nome para secÃ§Ã£o vazia%pB: sem memÃ³ria em _bfd_elf_get_property%pB: tamanho de pÃ¡gina muito grande (0x%x)%pB: relocalizaÃ§Ã£o pc-relative contra sÃ­mbolo dinÃ¢mico %s%pB: relocalizaÃ§Ã£o pc-relative contra sÃ­mbolo fraco %s indefinido%pB: extensÃ£o precisou de gerir objecto lto%pB: provavelmente compilado com -fPIC?%pB: sÃ­mbolo "%s" protegido nÃ£o estÃ¡ definido%pB: tipo de mÃ¡quina reconhecido mas nÃ£o gerido (0x%x) em arquivo Import Library Format%pB: relocalizaÃ§Ã£o de registo contra sÃ­mbolo nÃ£o-registo: %s em %pA%pB: relocalizaÃ§Ã£o de registo contra sÃ­mbolo nÃ£o-registo: (desconhecido) em %pA%pB: reloc contra Ã­ndice de sÃ­mbolo nÃ£o existente: %ld%pB: ligaÃ§Ã£o relocalizÃ¡vel de %s para %s nÃ£o suportado%pB: relocalizaÃ§Ã£o (%d) em (0x%%pB: relocalizaÃ§Ã£o %s contra %s%s"%s" nÃ£o pode ser usada ao fazer %s%s%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo STT_GNU_IFUNC "%s" nÃ£o Ã© gerido por %s%pB: relocalizaÃ§Ã£o %s contra STT_GNU_IFUNC sÃ­mbolo "%s" nÃ£o suportada%pB: relocalizaÃ§Ã£o %s contra "%s" nÃ£o pode ser usada ao fazer um objecto partilhado%pB: relocalizaÃ§Ã£o %s contra "%s" nÃ£o pode ser usada a fazer um objecto partilhado; recompile com -fPIC%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" externo ou indefinido nÃ£o pode ser usada ao fazer %s; recompile com -fPIC%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" nÃ£o Ã© suportada em modo x32%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" que pode ligar externamente nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC%pB: relocalizaÃ§Ã£o %s nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC%pB: relocalizaÃ§Ã£o %s nÃ£o pode ser usada ao fazer objecto partilhado%pB: relocalizaÃ§Ã£o R_386_GOTOFF contra %s "%s" protegido nÃ£o pode ser usada ao fazer um objecto partilhado%pB: relocalizaÃ§Ã£o R_386_GOTOFF contra %s "%s" indefinido nÃ£o pode ser usada ao fazer um objecto partilhado%pB: relocalizaÃ§Ã£o R_X86_64_GOTOFF64 contra %s "%s" protegido nÃ£o pode ser usado ao fazer um objecto partilhado%pB: relocalizaÃ§Ã£o R_X86_64_GOTOFF64 contra  %s "%s" indefinido nÃ£o pode ser usado ao fazer um objecto partilhado%pB: tamanho de relocalizaÃ§Ã£o trocado na secÃ§Ã£o %pB %pA%pB: relocalizaÃ§Ãµes em ELF (EM: %d) genÃ©rico%pB: relocs na secÃ§Ã£o "%pA", mas nÃ£o tem conteÃºdo%pB: secÃ§Ã£o %pA: transporte na tabela de sÃ­mbolo no desvio %ld%pB: secÃ§Ã£o "%pA":entrada VTENTRY corrompida%pB: secÃ§Ã£o "%pA" nÃ£o pode ser alocada no segmento %d%pB: entrada do grupo de secÃ§Ã£o nÃºmero %u estÃ¡ corrompida%pB: sh_link [%d] na secÃ§Ã£o "%pA" estÃ¡ incorrecto%pB: sh_link da secÃ§Ã£o "%pA" aponta para secÃ§Ã£o descartada "%pA" de "%pB"%pB: sh_link da secÃ§Ã£o "%pA" aponta para secÃ§Ã£o removida "%pA" de "%pB"%pB: tamanho de campo Ã© zero em cabeÃ§alho Import Library Format%pB: sÃ­mbolo especial "%s" sÃ³ Ã© permitido para arquitecturas ARMv8-M ou posteriores.%pB: fixup de especulaÃ§Ã£o para sÃ­mbolo dinÃ¢mico %s%pB: tamanho de stack especificado e definido como %s%pB: cadeia nÃ£-null terminada em ficheiro objecto ILF.%pB: a eliminar sÃ­mbolo "%s" nÃ£o representÃ¡vel (valor %%pB: suporte a dinÃ¢mica local nÃ£o implementado%pB: sÃ­mbolo "%s" tem tipo csect %d nÃ£o reconhecido%pB: sÃ­mbolo "%s" tem smclas %d nÃ£o reconhecido%pB: sÃ­mbolo "%s" requerido mas nÃ£o presente%pB: o sÃ­mbolo indica sobreposiÃ§Ã£o (nÃ£o suportado)%pB: tirar o endereÃ§o da funÃ§Ã£o protegida "%s" nÃ£o pode ser feito ao fazer uma biblioteca partilhada%pB: o alvo (%s) de uma relocalizaÃ§Ã£o %s estÃ¡ na secÃ§Ã£o de saÃ­da errada (%s)%pB: o alvo (%s) de uma relocalizaÃ§Ã£o %s estÃ¡ na secÃ§Ã£o errada (%pA)%pB: demasiadas secÃ§Ãµes (%d)%pB: demasiadas secÃ§Ãµes: %d (>= %d)%pB: demasiadas secÃ§Ãµes: %u%pB: relocalizaÃ§Ã£o tp-relative contra sÃ­mbolo dinÃ¢mico %s%pB: impossÃ­vel criar secÃ§Ã£o vazia falsa%pB: impossÃ­vel preencher DataDictionary[12] porque .idata$5 estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[1] porque .idata$2 estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[1] porque .idata$4 estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[9] porque __tls_used estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] porque .idata$6 estÃ¡ em falta%pB: impossÃ­vel preencher DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] porque .idata$6 estÃ¡ em falta%pB: impossÃ­vel encontrar a folha %s "%s"%pB: impossÃ­vel encontrar nome para secÃ§Ã£o vazia%pB: impossÃ­vel obter secÃ§Ã£o %pA descomprimida%pB: impossÃ­vel inicializar estado comprimido para secÃ§Ã£o %s%pB: impossÃ­vel inicializar estado descomprimido para secÃ§Ã£o %s%pB: impossÃ­vel carregar nome de secÃ§Ã£o COMDAT%pB: impossÃ­vel ordenar relocs - tÃªm mais de um tamanho%pB: impossÃ­vel ordenar relocs - tÃªm um tamanho desconhecido%pB: referÃªncia indefinida a sÃ­mbolo "%s"%pB: sÃ­mbolo indefinido "%s" em secÃ§Ã£o .opd%pB: sÃ­mbolo indefinido em relocalizaÃ§Ã£o R_PPC64_TOCSAVE%pB: redefiniÃ§Ã£o de sÃ­mbolo com versÃ£o indirecto "%s" inesperada%pB: tipo de reloc inesperado %u em secÃ§Ã£o .opd%pB: relocalizaÃ§Ã£o dinÃ¢mica contra %s nÃ£o gerida%pB: tipo de importaÃ§Ã£o nÃ£o gerido; %x%pB: valor de mÃ¡quina sparc "%lu" nÃ£o gerido detectado durante o processamento de escrita%pB: arquitectura desconhecida %s%pB: comando de carga %#x desconhecido%pB: atributo de objecto ARC %d obrigatÃ³rio desconhecido.Aviso: %pB: atributo de objecto EABI %d obrigatÃ³rio desconhecido%pB: tipo de relocalizaÃ§Ã£o %d desconhecido%pB: tipo desconhecido [%#x], secÃ§Ã£o "%s"%pB: secÃ§Ã£o tipo [%#x] "%s" desconhecida no grupo [%pA]%pB: OMIT_FP desirmanado em %pA.%pB: tipo de mÃ¡quina nÃ£o reconhecido (0x%x) em arquivo Import Library Format%pB: tipo de nome de importaÃ§Ã£o nÃ£o reconhecido; %x%pB: tipo de importaÃ§Ã£o nÃ£o reconhecido; %x%pB: relocalizaÃ§Ã£o nÃ£o reconhecida (%#x) na secÃ§Ã£o "%pA"%pB: classe de armazenamento %d nÃ£o reconhecida para %s sÃ­mbolo "%s"%pB: tipo de relocalizaÃ§Ã£o AOUT nÃ£o suportado %d%pB: arch %#x nÃ£o suportado%pB: bfd mach %#lx nÃ£o suportado%pB: mach %#x nÃ£o suportado%pB: chamada nÃ£o-PIC a IFUNC "%s" nÃ£o suportada%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado%pB: tipo de relocalizaÃ§Ã£o %#x nÃ£o suportado%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado exportado: %#x%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado importado: %#x%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado: %#x%pB: swap_aux_in nÃ£o suportado para a classe de armazenamento %#x%pB: swap_aux_out nÃ£o suportado para a classe de armazenamento %#x%pB: transiÃ§Ã£o %s para %s nÃ£o suportada%pB: sequÃªncia de caracteres largos 0x%02X 0x%02X nÃ£o suportada apÃ³s nome de sÃ­mbolo comeÃ§ado por "%s"
+%pB: usa instruÃ§Ãµes %s enquanto os mÃ³dulos anteriores usam instruÃ§Ãµes %s%pB: usa sÃ­mbolos prefixados com _, mas o ficheiro serÃ¡ escrito com sÃ­mbolos sem prefixo%pB: usa campos e_flags diferentes (%#x) dos mÃ³dulos anteriores (%#x)%pB: usa campos e_flags (%#x) desconhecidos diferentes dos mÃ³dulos anteriores (%#x)%pB: usa instruÃ§Ãµes incompatÃ­veis com instruÃ§Ãµes usadas em mÃ³dulos anteriores%pB: usa sÃ­mbolos sem prefixo, mas o ficheiro serÃ¡ escrito com sÃ­mbolos prefixados com _%pB: nÃ³ de versÃ£o nÃ£o encontrado para sÃ­mbolo %s%pB: a visibilidade do sÃ­mbolo "%s" mudou.%pB: aviso: ficheiro nÃºcleo truncado%pB: aviso: %pA: transporte de nÃºmero de linha: %#x > 0xffff%pB: aviso: instruÃ§Ã£o %s BLX destina-se a funÃ§Ã£o %s "%s".%pB: aviso: relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" da secÃ§Ã£o %pA%pB: aviso: %s nÃ£o suportado em modo partilhado%pB: aviso: %s: transporte de nÃºmero de linha: 0x%lx > 0xffff%pB: aviso: BTI ligado por -z force-bti quando todas as entradas nÃ£o tÃªm BTI na secÃ§Ã£o NOTE.%pB: aviso: sÃ­mbolo "%s" COMDAT nÃ£o corresponde ao nome de secÃ§Ã£o "%s"%pB: aviso: geraÃ§Ã£o RVE PLT nÃ£o suportada%pB: aviso: Weak TLS Ã© definido pela implementaÃ§Ã£o e pode nÃ£o funcionar como esperado%pB: aviso: secÃ§Ã£o alocada "%s" nÃ£o estÃ¡ no segmento%pB: aviso: mau tamanho de opÃ§Ã£o "%s" %u menor que o seu cabeÃ§alho%pB: aviso: impossÃ­vel determinar a funÃ§Ã£o alvo para secÃ§Ã£o fictÃ­cia "%s"%pB: aviso: afirma ter 0xffff relocs, sem transporte%pB: aviso: informaÃ§Ã£o de nÃºmero de linha duplicada para "%s"%pB: aviso: Endian trocado com mÃ³dulos anteriores.%pB: aviso: a ignorar bandeira de secÃ§Ã£o %s na secÃ§Ã£o %s%pB: aviso: sÃ­mbolo ilegal em entrada de nÃºmero de linha %d%pB: aviso: Ã­ndice de sÃ­mbolo %ld ilegal em relocs%pB: aviso: Ã­ndice de sÃ­mbolo 0x%lx ilegal em entrada de nÃºmero de linha %d%pB: aviso: versÃµes elf %s e %s incompatÃ­veis.%pB: aviso: ASEs inconsistente entre e_flags e .MIPS.abiflags%pB: aviso: FP ABI inconsistente entre .gnu.attributes e .MIPS.abiflags%pB: aviso: ISA inconsistente entre e_flags e .MIPS.abiflags%pB: aviso: extensÃµes ISA inconsistentes entre e_flags e .MIPS.abiflags%pB: aviso: isymMax (%ld) Ã© maior que ifdMax (%ld)%pB: aviso: total de nÃºmero de linha (%#lx) excede tamanho de secÃ§Ã£o (%#lx)%pB: aviso: falha ao ler tabela de nÃºmero de linha%pB: aviso: a ligar ficheiros PIC com ficheiros nÃ£o-PIC%pB: aviso: a ligar ficheiros abicalls com ficheiros nÃ£o-abicalls%pB: aviso: detectado ciclo em dependÃªncias da secÃ§Ã£o%pB: aviso: detectadas mÃºltiplas tabelas de sÃ­mbolo dinÃ¢mico - a ignorar a tabela na secÃ§Ã£o %u%pB: aviso: detectadas mÃºltiplas tabelas de sÃ­mbolo - a ignorar a tabela na secÃ§Ã£o %u%pB: aviso: sÃ­mbolo para secÃ§Ã£o "%s" nÃ£o encontrado%pB: aviso: encontradas versÃµes anteriores do ficheiro objecto, recompile com as ferramentas actuais.%pB: aviso: falha ao relocalizar SDA_BASE.%pB: aviso: encontrada secÃ§Ã£o de relocalizaÃ§Ã£o "%s" para a secÃ§Ã£o %pA - a ignorar%pB: aviso: a soluÃ§Ã£o de errata STM32L4XX seleccionada nÃ£o Ã© necessÃ¡ria para arquitectura de destino%pB: aviso: a soluÃ§Ã£o de errata VFP11 seleccionada nÃ£o Ã© necessÃ¡ria para arquitectura de destino%pB: aviso: tabela de simbolo muito grande para mmo, maior que palavras de 65535 32-bit: %d. SÃ³ "Main" serÃ¡ emitido.
+%pB: aviso: geraÃ§Ã£o PLT modo thumb-1 nÃ£o Ã© actualmente suportada%pB: aviso: acesso nÃ£o alinhado a entrada GOT.%pB: aviso: bandeira inesperada no campo flags2 de .MIPS.abiflags (0x%lx)%pB: aviso: atributo de objecto EABI desconhecido %d%pB: aviso: win32pstatus %s de tamanho %lu bytes Ã© muito pequeno%pB: nÃ£o resolve relocalizaÃ§Ã£o TLS em tempo de execuÃ§Ã£o%pB: win32pstatus NOTE_INFO_MODULE de tamanho %lu Ã© muito pequeno para conter um nome de tamanho %u%pB: auxtype %#x errado para a classe de armazenamento %#x%pB:%.8s: RVA truncado%pB:%.8s: secÃ§Ã£o abaixo da base da imagem%pB:%d: mau checksum em ficheiro S-record%pB:%d: total de byte %d muito pequeno%pB:%d: carÃ¡cter "%s" inesperado em ficheiro Intel Hex%pB:%d: carÃ¡cter "%s" inesperado em ficheiro S-record%pB:%pA%s excede o tamanho de sobreposiÃ§Ã£o
+%pB:%pA: %s e %s tÃªm de estar na mesma secÃ§Ã£o de entrada%pB:%pA: erro: tentativa de escrita numa secÃ§Ã£o comprimida nÃ£o alocada%pB: %pA: erro: tentativa de escrita para lÃ¡ do fim da secÃ§Ã£o%pB:%pA: erro: tentativa de escrever a secÃ§Ã£o num buffer vazio%pB:%pA: erro: relocalizaÃ§Ã£o referencia sÃ­mbolo %s que foi removido pela recolha de lixo.%pB:%pA: erro: tente religar com --gc-keep-exported activado.%pB:%pA: tabela %s com correspondente %s em falta%pB:%pA: entrada de tabela %s nÃ£o alinhado dentro da tabela%pB:%pA: entrada de tabela %s fora da tabela%pB:%pA: aviso: reloc Red Hat obsoleta %s detectada contra: %s%pB:%s tem relocs normal e TLS em simultÃ¢neo%pB:%s secÃ§Ã£o %s: alinhamento 2**%u nÃ£o representÃ¡vel%pB:%u: mau checksum em ficheiro Intel Hex (esperado %u, obtido %u)%pB:%u: mau tamanho de registo de endereÃ§o estendido em ficheiro Intel Hex%pB:%u: mau tamanho de registo em endereÃ§o linear estendido em ficheiro Intel Hex%pB:%u: mau tamanho de endereÃ§o linear inicial estendido em ficheiro Intel Hex%pB:%u: mau tamanho de endereÃ§o inicial estendido em ficheiro Intel Hex%pB:%u: tipo ihex nÃ£o reconhecido %u em ficheiro Intel Hex%pB[%pA]: sem secÃ§Ã£o de saÃ­da para espaÃ§o %pA%pcrel_lo com %pcrel_hi correspondente em faltatransporte %pcrel_lo com uma adendasÃ­mbolo de secÃ§Ã£o %pcrel_lo com uma adenda%pcrel_lo com adenda nÃ£o Ã© permitido para R_RISCV_GOT_HI20%s  branch         %lu
+  branch toc adj %lu
+  branch notoc   %lu
+  branch both    %lu
+  long branch    %lu
+  long toc adj   %lu
+  long notoc     %lu
+  long both      %lu
+  plt call       %lu
+  plt call save  %lu
+  plt call notoc %lu
+  plt call both  %lu
+  global entry   %lu%s defenido em entrada toc removida%s divide por zero%s duplicado
 %s duplicado em %s
 %s tem relocs normal e TLS em simultÃ¢neo%s em secÃ§Ã£o de sobreposiÃ§Ã£o%s nÃ£o definido em linker criado %pA%s: nÃ£o implementadodesvio %s muito grande para codificaÃ§Ã£o .eh_frame sdata4%s: definiÃ§Ã£o TLS em secÃ§Ã£o %pB %pA nÃ£o corresponde a definiÃ§Ã£o nÃ£o-TLS em secÃ§Ã£o %pB %pA%s: definiÃ§Ã£o TLS em secÃ§Ã£o %pB %pA nÃ£o corresponde a referÃªncia nÃ£o-TLS em %pB%s: referÃªncia TLS em %pB nÃ£o corresponde a definiÃ§Ã£o nÃ£o-TLS em secÃ§Ã£o %pB %pA%s: referÃªncia TLS em %pB nÃ£o corresponde a referÃªncia nÃ£o-TLS em %pB%s: sem tal sÃ­mbolo%s: nÃ£o implementado%s: nÃ£o suportado%s: versÃ£o indefinida: %s(no desvio de bit %u)
 (descritor)
@@ -1179,8 +1201,8 @@ Use a opÃ§Ã£o gcc -mrestrict-it para ger
 *desconhecido**desconhecido*   , Valor: %#08lx
 , aliÃ¡s: %u
 , desvio ext fixup: %u, no_opt psect off: %u, sub-tipo: %u (%s)
-, vector sÃ­mbolo rva: - %pB Ã© 64-bit, %pB nÃ£o Ã©-mips32r2 -mfp64 (12 callee-saved)transporte na entrada .eh_frame_hdr..eh_frame_hdr refere FDEs sobrepostos.secÃ§Ã£o .got nÃ£o imediatamente apÃ³s secÃ§Ã£o .pltfalha de uniÃ£o .rsrc: uma pasta corresponde a uma folhafalha de uniÃ£o .rsrc: versÃµes de pasta diferentesfalha de uniÃ£o .rsrc: pastas com caracterÃ­sticas diferentesfalha de uniÃ£o .rsrc: folha duplicadafalha de uniÃ£o .rsrc: folha duplicada: %sfalha de uniÃ£o .rsrc: recurso de cadeia duplicado: %dfalha de uniÃ£o .rsrc: mÃºltiplos manifestos nÃ£o-predefinidos32-bit duplo, relocalizaÃ§Ã£o relativa 32bits gp ocorre para um sÃ­mbolo externo4-byte4-bytes64 bits *nÃ£o geridos*
-64-bit duplo, 8-byte8-bytes: instruÃ§Ãµes m32r: instruÃ§Ãµes m32r2: instruÃ§Ãµes m32rx: instruÃ§Ãµes n1: instruÃ§Ãµes n1h; recompile com -fPIC<bits de bandeira definidos nÃ£o reconhecidos><informaÃ§Ã£o corrupta> %s<tamanho de cadeia corrupto: %#x>
+, vector sÃ­mbolo rva: - %pB Ã© 64-bit, %pB nÃ£o Ã©-march=%s: cadeia ISA nÃ£o pode conter maiÃºsculas-march=%s: cadeia ISA tem de comeÃ§ar por rv32 ou rv64-march=%s: extensÃ£o antecipada ISA %s duplicada-march=%s: esperado nÃºmero apÃ³s "%dp"-march=%s: primeira extensÃ£o ISA tem de ser "e", "i" ou "g"-march=%s: extensÃ£o ISA %s nÃ£o estÃ¡ na ordem esperada: Tem de estar antes de "%s".-march=%s: extensÃ£o ISA tem de separar com _-march=%s: rv%de nÃ£o Ã© uma base ISA vÃ¡lida-march=%s: rv32 nÃ£o suporta a extensÃ£o "q"-march=%s: rv32e nÃ£o suporta a extensÃ£o "f"-march=%s: extensÃ£o padrÃ£o ISA "%c" fora da ordem canÃ³nica-march=%s: classe antecipada para extensÃ£o ISA %s desconhecida-march=%s: extensÃ£o antecipada ISA %s desconhecida-march=%s: extensÃ£o padrÃ£o e antecipada ISA "%s" desconhecida-mips32r2 -mfp64 (12 callee-saved)transporte na entrada .eh_frame_hdr..eh_frame_hdr refere FDEs sobrepostos.secÃ§Ã£o .got nÃ£o imediatamente apÃ³s secÃ§Ã£o .pltfalha de uniÃ£o .rsrc: uma pasta corresponde a uma folhafalha de uniÃ£o .rsrc: versÃµes de pasta diferentesfalha de uniÃ£o .rsrc: pastas com caracterÃ­sticas diferentesfalha de uniÃ£o .rsrc: folha duplicadafalha de uniÃ£o .rsrc: folha duplicada: %sfalha de uniÃ£o .rsrc: recurso de cadeia duplicado: %dfalha de uniÃ£o .rsrc: mÃºltiplos manifestos nÃ£o-predefinidos32-bit duplo, relocalizaÃ§Ã£o relativa 32bits gp ocorre para um sÃ­mbolo externo4-byte4-bytes64 bits *nÃ£o geridos*
+64-bit duplo, 8-byte8-bytes: instruÃ§Ãµes m32r: instruÃ§Ãµes m32r2: instruÃ§Ãµes m32rx: instruÃ§Ãµes n1: instruÃ§Ãµes n1h; recompile com -fPIC; recompile com -fPIE<informaÃ§Ã£o corrupta> %s<tamanho de cadeia corrupto: %#x>
 <desvio de cadeia corrupto: %#lx>
 <corrupto><tipo de pasta desconhecido: %d>
 <bandeiras de mÃ¡scara desconhecidas><desconhecido>reloc @pltoff contra sÃ­mbolo localBASE_IMAGE       BFD falha de asserÃ§Ã£o %s %s:%dBFD erro interno %s, a abortar em %s:%d
@@ -1193,15 +1215,15 @@ Use a opÃ§Ã£o gcc -mrestrict-it para ger
 CTL_STLOC (definir localizaÃ§Ã£o)
 CabeÃ§alho de copyright
 SecÃ§Ã£o .rsrc corrompida detectada!
-DSO em falta da linha de comandosErro Dwarf: encontrado atributo DW_AT_comp_dir com uma forma nÃ£o-cadeia.Erro Dwarf: detectada recursividade em instÃ¢ncia abstracta.Erro Dwarf: impossÃ­vel encontrar a secÃ§Ã£o %s.Erro Dwarf: impossÃ­vel encontrar nÃºmero abbrev %u.Erro Dwarf: encontrado tamanho de endereÃ§o "%u", este leitor nÃ£o gere tamanhos maiores que "%u".Erro Dwarf: encontrada versÃ£o dwarf "%u", este leitor sÃ³ gere informaÃ§Ã£o das versÃµes 2, 3, 4 e 5.Erro Dwarf: ponteiro de informaÃ§Ã£o excede o final dos atributosErro Dwarf: instÃ¢ncia DIE ref abstracta invÃ¡lida.Erro Dwarf: mÃ¡ximo de operaÃ§Ãµes por instruÃ§Ã£o invÃ¡lido.Erro Dwarf: valor FORM invÃ¡lido ou nÃ£o gerido: %#x.Erro Dwarf: tamanho %u do selector de segmento de informaÃ§Ã£o de linha nÃ£o suportadoErro Dwarf: secÃ§Ã£o de nÃºmero de linha modificada.Erro Dwarf: secÃ§Ã£o de nÃºmero de linha modificada (mau nÂº de ficheiro).Erro Dwarf: sem espaÃ§o ao ler opcodesErro Dwarf: sem espaÃ§o ao ler o prÃ³logoErro Dwarf: versÃ£o %d .debug_line version nÃ£o gerida.Erro Dwarf: total de formato zero.DW_EH_PE_datarel nÃ£o especificado para esta arquitectura.Pasta de depuraÃ§Ã£oTabela de mÃ³dulo de depuraÃ§Ã£o:
+DSO em falta da linha de comandosErro Dwarf: encontrado atributo DW_AT_comp_dir com uma forma nÃ£o-cadeia.Erro Dwarf: detectada recursividade em instÃ¢ncia abstracta.Erro Dwarf: impossÃ­vel encontrar a secÃ§Ã£o %s.Erro Dwarf: impossÃ­vel encontrar nÃºmero abbrev %u.Erro Dwarf: impossÃ­vel encontrar especificaÃ§Ã£o de variÃ¡vel no desvio 0x%lxErro Dwarf: encontrado tamanho de endereÃ§o "%u", este leitor nÃ£o gere tamanhos maiores que "%u".Erro Dwarf: encontrada versÃ£o dwarf "%u", este leitor sÃ³ gere informaÃ§Ã£o das versÃµes 2, 3, 4 e 5.Erro Dwarf: ponteiro de informaÃ§Ã£o excede o final dos atributosErro Dwarf: instÃ¢ncia DIE ref abstracta invÃ¡lida.Erro Dwarf: mÃ¡ximo de operaÃ§Ãµes por instruÃ§Ã£o invÃ¡lido.Erro Dwarf: valor FORM invÃ¡lido ou nÃ£o gerido: %#x.Erro Dwarf: tamanho %u do selector de segmento de informaÃ§Ã£o de linha nÃ£o suportadoErro Dwarf: secÃ§Ã£o de nÃºmero de linha modificada.Erro Dwarf: secÃ§Ã£o de nÃºmero de linha modificada (mau nÂº de ficheiro).Erro Dwarf: sem espaÃ§o ao ler opcodesErro Dwarf: sem espaÃ§o ao ler o prÃ³logoErro DWARF: secÃ§Ã£o %s maior que o seu tamanho de ficheiro! (0x%lx vs 0x%lx)Erro Dwarf: versÃ£o %d .debug_line version nÃ£o gerida.Erro Dwarf: total de formato zero.DW_EH_PE_datarel nÃ£o especificado para esta arquitectura.Pasta de depuraÃ§Ã£oTabela de mÃ³dulo de depuraÃ§Ã£o:
 Tabela de sÃ­mbolos de depuraÃ§Ã£o:
 Pasta de atraso de importaÃ§Ã£o%s obsoleto chamado
 %s obsoleto chamado em %s linha %d em %s
 Pasta de descriÃ§Ã£oEIHD: (tamanho: %u, nÂº blocos: %u)
 Desvio da entrada   = 0x%.8lx (%ld)
-Erro: %pB tem ambos os atributos Tag_MPextension_use actual e legadoPasta de excepÃ§Ãµes [.pdata]Pasta de exportaÃ§Ã£o [.edata (ou onde o encontrÃ¡mos)]Bandeiras de exportaÃ§Ã£o 			%lx
+Erro: %pB e %pB tÃªm versÃ£o DSP diferenteErro: %pB e %pB tÃªm FPU ABI diferenteErro: %pB e %pB tÃªm versÃ£o VDSP diferenteErro: %pB tem ambos os atributos Tag_MPextension_use actual e legadoPasta de excepÃ§Ãµes [.pdata]Pasta de exportaÃ§Ã£o [.edata (ou onde o encontrÃ¡mos)]Bandeiras de exportaÃ§Ã£o 			%lx
 ExportaÃ§Ã£o RVAcodificaÃ§Ã£o FDE em %pB(%pA) impede a criaÃ§Ã£o de tabela .eh_frame_hdr.FDPIC ainda nÃ£o suporta que a relocalizaÃ§Ã£o %s se torne dinÃ¢mica para executÃ¡velFILES_VOLUMES    FPU-2.0FPU-3.0Campo de bandeira   = 0x%.2x
-Reencaminhador RVAGALAXY           RelocalizaÃ§Ãµes GOT e PLT nÃ£o podem ser reparadas com um linker nÃ£o dinÃ¢mico.tamanho de tabela GOT fora do intervaloUsada relocalizaÃ§Ã£o relativa GP sem GP definidoRelocalizaÃ§Ã£o relativa GP com _gp nÃ£o definidorelocalizaÃ§Ã£o GPDISP nÃ£o encontrou instruÃ§Ãµes ldah e ldaTabela de sÃ­mbolo global:
+Reencaminhador RVAGALAXY           A secÃ§Ã£o GNU_MBIND sÃ³ Ã© suportada por alvos GNU e FreeBSDA secÃ§Ã£o GNU_RETAIN sÃ³ Ã© suportada por alvos GNU e FreeBSDRelocalizaÃ§Ãµes GOT e PLT nÃ£o podem ser reparadas com um linker nÃ£o dinÃ¢mico.tamanho de tabela GOT fora do intervaloUsada relocalizaÃ§Ã£o relativa GP sem GP definidoRelocalizaÃ§Ã£o relativa GP com _gp nÃ£o definidorelocalizaÃ§Ã£o GPDISP nÃ£o encontrou instruÃ§Ãµes ldah e ldaTabela de sÃ­mbolo global:
 Flutuante rÃ­gido (32-bit CPU, 64-bit FPU)
 Flutuante rÃ­gido (32-bit CPU, qualquer FPU)
 Flutuante rÃ­gido (MIPS32r2 64-bit FPU 12 callee-saved)
@@ -1209,13 +1231,13 @@ Use a opÃ§Ã£o gcc -mrestrict-it para ger
 Flutuante rÃ­gido (precisÃ£o simples)
 Comp. flutuante rÃ­gido (32-bit CPU, 64-bit FPU)
 Flutuante rÃ­gido ou suave
-ID: %#08lxIDC - verificaÃ§Ã£o Ident Consistency
-IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS nÃ£o sÃ£o suportadas.IO               ActivaÃ§Ã£o da imagem:  (tam=%u)
+propriedades IBT e SHSTKpropriedade IBTID: %#08lxIDC - verificaÃ§Ã£o Ident Consistency
+SÃ­mbolo IFUNC %s na tabela dinÃ¢mica de sÃ­mbolos - IFUNCS nÃ£o sÃ£o suportadosIMAGE_ACTIVATOR  INPUT_SECTION_FLAGS nÃ£o sÃ£o suportadas.IO               ActivaÃ§Ã£o da imagem:  (tam=%u)
 Fixup do activador de imagem: (principal: %u, menor: %u)
 IdentificaÃ§Ã£o da imagem: (principal: %u, menor: %u)
 Descritor de secÃ§Ã£o de imagem: (principal: %u, menor: %u, tamanho: %u, desvio: %u)
 Tabela de sÃ­mbolo de imagem e depuraÃ§Ã£o: (principal: %u, menor: %u)
-Pasta de tabela de endereÃ§os de importaÃ§Ã£oPasta de importaÃ§Ã£o [partes de .idata]LOGICAL_NAMES    Nome do processador de linguagem
+Pasta de tabela de endereÃ§os de importaÃ§Ã£oPasta de importaÃ§Ã£o [partes de .idata]propriedade LAM_U48propriedade LAM_U57LOGICAL_NAMES    Nome do processador de linguagem
 Tamanho             = 0x%.8lx (%ld)
 Pasta de configuraÃ§Ã£o de carregamentoFunÃ§Ã£o IFUNC local "%s" em %pB
 MEMORY_MANAGEMENTfunÃ§Ãµes MIPS16 e microMIPS nÃ£o se podem chamar entre siMISC             uso MMU: MULTI_PROCESSING Principal/Menor 			%d/%d
@@ -1253,7 +1275,7 @@ Use a opÃ§Ã£o gcc -mrestrict-it para ger
 Removida propriedade %W para unir %pB (nÃ£o encontrado) e %pB (0x%v)
 Removida propriedade %W para unir %pB e %pB
 Removida propriedade %W para unir %pB e %pB (nÃ£o encontrado)
-ReservadoPasta de recursos [.rsrc]endereÃ§o S12 (%lx) nÃ£o estÃ¡ dentro de RAM(0x2000-0x4000) partilhado, deve desviar manualmente o endereÃ§o no seu cÃ³digorelocalizaÃ§Ã£o SDA com _SDA_BASE_ nÃ£o definidoSECURITY         SEC_RELOC sem relocs na secÃ§Ã£o %pASHELL            SHRFXDSHRPICuso SIMD: SPSC - definiÃ§Ã£o de secÃ§Ã£o Shared Image Program
+ReservadoPasta de recursos [.rsrc]endereÃ§o S12 (%lx) nÃ£o estÃ¡ dentro de RAM(0x2000-0x4000) partilhado, deve desviar manualmente o endereÃ§o no seu cÃ³digorelocalizaÃ§Ã£o SDA com _SDA_BASE_ nÃ£o definidoSECURITY         SEC_RELOC sem relocs na secÃ§Ã£o %pASHELL            SHRFXDSHRPICpropriedade SHSTKuso SIMD: SPSC - definiÃ§Ã£o de secÃ§Ã£o Shared Image Program
 STABLE           STA_CKARG (comparar argumento de procedimento)
 STA_GBL (stack global) %.*s
 STA_LI (stack literal)
@@ -1301,7 +1323,7 @@ Use a opÃ§Ã£o gcc -mrestrict-it para ger
 Pasta especialTamanho de stack para chamar nÃ³s raiz grÃ¡ficos.
 Passos:
 SÃ­mbolo "%s" tem tipos diferentes: %s em %pB, previamente REGISTER em %pBrelocalizaÃ§Ã£o TLS invÃ¡lida sem secÃ§Ãµes dinÃ¢micasEndereÃ§os da tabela
-O campo de tamanho dos dados de depuraÃ§Ã£o na pasta de dados Ã© demasiado grande para a secÃ§Ã£oO tamanho da pasta de depuraÃ§Ã£o nÃ£o Ã© mÃºltiplo do tamanho da entrada da pasta de depuraÃ§Ã£o
+A adenda nÃ£o Ã© permitida para R_RISCV_GOT_HI20O campo de tamanho dos dados de depuraÃ§Ã£o na pasta de dados Ã© demasiado grande para a secÃ§Ã£oO tamanho da pasta de depuraÃ§Ã£o nÃ£o Ã© mÃºltiplo do tamanho da entrada da pasta de depuraÃ§Ã£o
 Pasta de armazenamento de Thread [.tls]Selo Hora/Data 		%lx
 CabeÃ§alho do texto de tÃ­tulo
 Demasiados cÃ³digos unwind (%ld)
@@ -1313,14 +1335,14 @@ Use a opÃ§Ã£o gcc -mrestrict-it para ger
 Aviso: tamanho de secÃ§Ã£o %s (%ld) Ã© menor que o tamanho virtual (%ld)
 Aviso: tamanho de secÃ§Ã£o %s Ã© zero
 A escrever dataÃ§Ã£o armap actualizadoO endereÃ§o XGATE (%lx) nÃ£o estÃ¡ dentro de RAM(0xE000-0xFFFF) partilhado, deve desviar manualmente o endereÃ§o e, possivelmente gerir a pÃ¡gina, no seu cÃ³digo.[%u]: inferior: %u, superior: %u
-[abi=16-bit int, [abi=32-bit int, 8cujo nome estÃ¡ perdido]_bfd_vms_output_counted chamado com demasiados bytes_bfd_vms_output_counted chamado com zero bytes"%s" refere-se a funÃ§Ã£o nÃ£o de entrada.um objecto PDEum objecto PIEum objecto partilhadoendereÃ§oendereÃ§o nÃ£o alinhado por wordencontrado cÃ³digo mÃ¡quina ELF alternativo (%d) em %pB, esperado %dArquivo sem Ã­ndice; execute ranlib para adicionar umFicheiro objecto de arquivo em formato erradodescritor de matriz:
+[abi=16-bit int, [abi=32-bit int, 8cujo nome estÃ¡ perdido]transporte de desvio de chamada __tls_get_addr_bfd_vms_output_counted chamado com demasiados bytes_bfd_vms_output_counted chamado com zero bytes"%s" refere-se a funÃ§Ã£o nÃ£o de entrada.um objecto PDEum objecto PIEum objecto partilhadoendereÃ§oendereÃ§o nÃ£o alinhado por wordencontrado cÃ³digo mÃ¡quina ELF alternativo (%d) em %pB, esperado %darquivo sem Ã­ndice; execute ranlib para adicionar umficheiro objecto de arquivo em formato erradodescritor de matriz:
 matriz, dim: %u, bitmap: arsize: %u, a0: 0x%08x
 atÃ³mico, tipo=0x%02x %s
-Tentativa de converter L32R/CALLX para CALL falhouTentativa de fazer ligaÃ§Ã£o relocalizÃ¡vel com entrada %s e saÃ­da %smau Ã­ndice de secÃ§Ã£o em %sMau valorendereÃ§o de banco [%lx:%04lx] (%lx) nÃ£o estÃ¡ no mesmo banco que o endereÃ§o actual [%lx:%04lx] (%lx)base: %u, pos: %u
-bfd_mach_o_canonicalize_symtab: impossÃ­vel carregar sÃ­mbolosbfd_mach_o_read_section_32: valor de alinhamento muito grande: %#lx, a usar 32bfd_mach_o_read_section_64: valor de alinhamento muito grande: %#lx, a usar 32bfd_mach_o_read_symtab_symbol: nome fora do intervalo (%lu >= %u)bfd_mach_o_read_symtab_symbol: sÃ­mbolo "%s" especificou secÃ§Ã£o invÃ¡lida %d (mÃ¡x %lu): a definir como indefinidabfd_mach_o_read_symtab_symbol: sÃ­mbolo "%s" especificou campo de tipo invÃ¡lido 0x%x: a definir como indefinidabfd_mach_o_read_symtab_symbol: impossÃ­vel ler %d bytes em %ubfd_mach_o_read_symtab_symbols: impossÃ­vel alocar memÃ³ria para sÃ­mbolosbfd_mach_o_scan: arquitectura desconhecida 0x%lx/0x%lxbfd_pef_scan: arquitectura desconhecida 0x%lxblkbeg: endereÃ§o: 0x%08x, nome: %.*s
+Tentativa de converter L32R/CALLX para CALL falhouTentativa de fazer ligaÃ§Ã£o relocalizÃ¡vel com entrada %s e saÃ­da %smau Ã­ndice de secÃ§Ã£o em %smau valorendereÃ§o de banco [%lx:%04lx] (%lx) nÃ£o estÃ¡ no mesmo banco que o endereÃ§o actual [%lx:%04lx] (%lx)base: %u, pos: %u
+bfd_mach_o_canonicalize_symtab: impossÃ­vel carregar sÃ­mbolosbfd_mach_o_read_section_32: valor de alinhamento muito grande: %#lx, a usar 32bfd_mach_o_read_section_64: valor de alinhamento muito grande: %#lx, a usar 32bfd_mach_o_read_symtab_symbol: nome fora do intervalo (%lu >= %u)bfd_mach_o_read_symtab_symbol: sÃ­mbolo "%s" especificou secÃ§Ã£o invÃ¡lida %d (mÃ¡x %lu): a definir como indefinidabfd_mach_o_read_symtab_symbol: sÃ­mbolo "%s" especificou campo de tipo invÃ¡lido 0x%x: a definir como indefinidabfd_mach_o_read_symtab_symbol: impossÃ­vel ler %d bytes em %ubfd_mach_o_scan: arquitectura desconhecida 0x%lx/0x%lxbfd_pef_scan: arquitectura desconhecida 0x%lxblkbeg: endereÃ§o: 0x%08x, nome: %.*s
 blkend: tamanho: 0x%08x
 Erro de ligaÃ§Ã£o BFD: ramo (PC rel16) para secÃ§Ã£o (%s) nÃ£o suportadoRamo para um endereÃ§o nÃ£o alinhado por instruÃ§Ã£obss-plt forÃ§ado pelo perfilbss-plt forÃ§ado devido a %pBimpossÃ­vel construir fictÃ­cio de ramo "%s"impossÃ­vel encontrar fictÃ­cio de ramo "%s"ImpossÃ­vel converter um ramo para JALX para um endereÃ§o nÃ£o alinhado por wordImpossÃ­vel converter um salto para JALX para um endereÃ§o nÃ£o alinhado por wordimpossÃ­vel criar entrada fictÃ­cia %simpossÃ­vel emitir relocalizaÃ§Ãµes dinÃ¢micas em secÃ§Ã£o sÃ³ de leituraimpossÃ­vel emitir fixups em secÃ§Ã£o sÃ³ de leituraimpossÃ­vel encontrar EMH no primeiro registo GST
-impossÃ­vel ler DMT
+impossÃ­vel encontrar versÃµes predefinidas da extensÃ£o ISA "%s"impossÃ­vel ler DMT
 impossÃ­vel ler cabeÃ§alho DMT
 impossÃ­vel ler psect DMT
 impossÃ­vel ler DST
@@ -1338,69 +1360,73 @@ Use a opÃ§Ã£o gcc -mrestrict-it para ger
 impossÃ­vel ler cabeÃ§alho de registo GST
 impossÃ­vel ler tamanho do registo GST
 classe: %u, dtype: %u, tamanho: %u, ponteiro: 0x%08x
-secÃ§Ã£o %s corrupta em %pBRegisto EEOM corrupto - tamanho demasiado pequenoRegisto EGSD corrupto: campo psindx muito grande (%#lx)Registo EGSD corrupto: tamanho (%#x) muito pequenoRegisto EGSD corrupto: tamanho (%#x) maior que o espaÃ§o restante (%#x)Registo EGSD corrupto: tamanho (%#x) muito pequenoRegisto EIHD corrupto - tamanho muito pequenoEncontrado registo ETIR corruptoValor vms corruptoimpossÃ­vel encontrar a secÃ§Ã£o %simpossÃ­vel localizar sÃ­mbolo linker especial __ctbpimpossÃ­vel localizar sÃ­mbolo linker especial __epimpossÃ­vel localizar sÃ­mbolo linker especial __gpimpossÃ­vel abrir imagem partilhada "%s" de "%s"cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]relocalizaÃ§Ã£o perigosadelta pc +%-4ddelta_pc_l: +0x%08x
+secÃ§Ã£o %s corrupta em %pBRegisto EEOM corrupto - tamanho demasiado pequenotipo de registo EGSD %d corrupto: tamanho (%#x) maior que o espaÃ§o restante (%#x)tipo de registo EGSD %d corrupto: tamanho (%#x) muito pequenoRegisto EGSD corrupto: campo psindx muito grande (%#lx)Registo EGSD corrupto: tamanho (%#x) muito pequenoRegisto EIHD corrupto - tamanho muito pequenoEncontrado registo ETIR corruptoValor vms corruptoimpossÃ­vel encontrar a secÃ§Ã£o %simpossÃ­vel localizar sÃ­mbolo linker especial __ctbpimpossÃ­vel localizar sÃ­mbolo linker especial __epimpossÃ­vel localizar sÃ­mbolo linker especial __gpimpossÃ­vel abrir imagem partilhada "%s" de "%s"cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]relocalizaÃ§Ã£o perigosaerro de relocalizaÃ§Ã£o perigosadelta pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 descdimct: %u, aflags: 0x%02x, dÃ­gitos: %u, escala: %u
 secÃ§Ã£o de saÃ­da descartada: "%pA"a descartar intervalo FDE de endereÃ§o zero em %pB(%pA).
 intervalo descontÃ­nuo (nr: %u)
-relocalizaÃ§Ã£o dinÃ¢mica em secÃ§Ã£o sÃ³ de leituravariÃ¡vel dinÃ¢mica "%s" tem tamanho zeroerro de contagem dynreloc para %pB, secÃ§Ã£o %pAFunÃ§Ã£o de entrada "%s" desapareceu do cÃ³digo de seguranÃ§a.enumbeg, tam: %u, nome: %.*s
+divisÃ£o por zerodst_define_location %u muito grandesem informaÃ§Ã£o de Ã­ndicerelocalizaÃ§Ã£o dinÃ¢mica em secÃ§Ã£o sÃ³ de leituravariÃ¡vel dinÃ¢mica "%s" tem tamanho zeroerro de contagem dynreloc para %pB, secÃ§Ã£o %pAFunÃ§Ã£o de entrada "%s" desapareceu do cÃ³digo de seguranÃ§a.enumbeg, tam: %u, nome: %.*s
 enumelt, nome: %.*s
 enumend
 epÃ­logo: bandeiras: %u, total: %u
-erro em %pB(%pA); nÃ£o serÃ¡ criada nenhuma tabela .eh_frame_hdr.Erro  ao ler %s: %serro ao ler tipo de cpu de dados privados elferro: %pB nÃ£o usa instruÃ§Ãµes %s, enquanto %pB simerro: %pB jÃ¡ estÃ¡ no formato final BE8erro: %pB estÃ¡ compilado para APCS-%d, enquanto o alvo %pB usa APCS-%derro: %pB estÃ¡ compilado para EP9312, enquanto %pB estÃ¡ compilado para XScaleerro: %pB precisa de alinhamento 8-byte mas %pB estÃ¡ definido para alinhamento 4-byteerro: %pB passa flutuantes em registos flutuantes, enquanto %pB os passa em registos inteiroserro: %pB passa flutuantes em registos inteiros, enquanto %pB os passa em registos flutuanteserro: %pB requer mais alinhamento de matriz do que %pB preservaerro: %pB requer mais alinhamento de stack do que %pB preservaerro: %pB usa alinhamento de pilha %u-byte mas a saÃ­da usa alinhamento de pilha %u-byte.erro: %pB usa instruÃ§Ãµes %s mas %pB usa %serro: %pB usa instruÃ§Ãµes%s, enquanto %pB nÃ£oerro: %pB usa doubles 64-bit mas %pB usa doubles 32-biterro: %pB usa FPU-3.0 mas %pB sÃ³ suporta FPU-2.0erro: %pB usa argumentos de registo VFP, %pB nÃ£oerro: %pB usa equipamento FP, enquanto %pB usa programa FPerro: %pB usa argumentos de registo iWMMXt, %pB nÃ£oerro: %pB usa programa FP, enquanto %pB usa equipamento FPerro: %pB usa o modelo de cÃ³digo %s enquanto %pB usa o modelo de cÃ³digo %serro: %pB usa o modelo de dados %s mas %pB sÃ³ usa instruÃ§Ãµes MSP430erro: %pB usa o modelo de dados %s enquanto %pB usa o modelo de dados %serro: %pB usa o modelo de cÃ³digo grande mas %pB usa instruÃ§Ãµes MSP430erro: %pB usa o modelo de cÃ³digo pequeno mas %pB usa o modelo de dados %serro: %pB: <propriedade x86 corrompida (0x%x) tamanho: 0x%x>erro: %pB: cadeia ISA de entrada (%s) nÃ£o corresponde Ã  saÃ­da (%s).erro: %pB: cadeia ISA trocada para unir "%s" e "%s".erro: %pB: versÃ£o ISA trocada para "%s" extensÃ£o. %d.%d vs %d.%derro: %pB: conflitos de endereÃ§amento relativo SB com o uso de R9erro: %pB: XLEN nÃ£o suportado (%u), poderÃ¡ estar a usar a emulaÃ§Ã£o errada.erro: %pB: XLEN de entrada (%u) nÃ£o corresponde Ã  saÃ­da (%u).erro: %pB: Big-endian R2 nÃ£o Ã© suportado.erro: %pB: impossÃ­vel misturar rf16 com conjunto de registo completo %pB.erro: %pB: arquitecturas CPU %d/%d em conflitoerro: %pB: conflito de atributos de extensÃ£o ISA %s com %s.erro: %pB: perfis de arquitectura %c/%c em conflitoerro: %pB: conflito de atributos %s.erro: %pB: conflito de atributos %s: %s com %s.erro: %pB: versÃ£o priv spec em conflito (principal/menor/revisÃ£o).erro: %pB: uso de R9 em conflitoerro: %pB: cadeia ISA "%s" corrompida. Primeira letra esperada era "i" ou "e", obtida "%s".erro: %pB: objecto tem conteÃºdo especifico do fabricante que tem de ser processado por "%s"erro: %pB: etiqueta do objecto "%d, %s" Ã© incompatÃ­vel com etiqueta "%d, %s"erro: %pB: detectado ficheiro objecto antigo incompatÃ­velerro: %pB: tamanho da secÃ§Ã£o %pA nÃ£o Ã© mÃºltiplo do tamanho do endereÃ§oerro: %pB: impossÃ­vel unir atributos base CPU %s com %s.erro: %pB: impossÃ­vel unir atributos de extensÃ£o ISA %s.erro: %pB: impossÃ­vel unir atributos de virtualizaÃ§Ã£o com %pBerro: %pB: arquitectura CPU desconhecidaERRO: tentativa de ligar %pB com um binÃ¡rio %pB de diferente arquitecturaerro: impossÃ­vel encontrar sÃ­mbolo: %s.erro: formato fp16 enganado entre %pB e %pBerro: tipo de relocalizaÃ§Ã£o inapropriado para biblioteca partilhada (esqueceu-se de -fpic?)erro: objecto fonte %pB tem versÃ£o EABI %d, mas o alvo %pB tem versÃ£o EABI %dErro: a arquitectura ARC4 jÃ¡ nÃ£o Ã© suportada.erro: sÃ­mbolo __rtinit indefinidoerro: valor Tag_ABI_array_object_align_expected desconhecido em %pBerro: valor Tag_ABI_array_object_alignment desconhecido em %pBEncontrados erros ao processar o ficheiro %pBexecutÃ¡velfalha ao alocar espaÃ§o para nova secÃ§Ã£o APUinfo.falha ao computar nova secÃ§Ã£o APUinfo.Falha ao procurar reloc HI16 anteriorfalha ao instalar nova secÃ§Ã£o APUinfo.Falha ao actualizar desvios de ficheiro na pasta de depuraÃ§Ã£oerro fatal ao criar .fixupFormato de ficheiro ambÃ­guoFormato de ficheiro nÃ£o reconhecidoFicheiro em formato erradoFicheiro muito grandeFicheiro truncadoemitidos mais avisos sobre a codificaÃ§Ã£o FDE impedir a geraÃ§Ã£o de .eh_frame_hdrlinker genÃ©rico nÃ£o pode gerir %sendereÃ§o relativo de ponteiro global fora do intervalorelocalizaÃ§Ã£o relativa de ponteiro global no endereÃ§o 0x%08x com _gp nÃ£o definido
-relocalizaÃ§Ã£o relativa de ponteiro global com _gp nÃ£o definidosÃ­mbolo ocultosÃ­mbolo oculto tipos de cpu incompatÃ­veis em ficheiros mach-0: %ld vs %ldincr_linum(b): +%u
+erro em %pB(%pA); nÃ£o serÃ¡ criada nenhuma tabela .eh_frame_hdr.erro ao ler %s: %serro ao ler tipo de cpu de dados privados elferro: %pB pode usar a regiÃ£o superior para dados, mas %pB assume que os dados estÃ£o exclusivamente na memÃ³ria inferiorerro: %pB nÃ£o usa instruÃ§Ãµes %s, enquanto %pB simerro: %pB jÃ¡ estÃ¡ no formato final BE8erro: %pB estÃ¡ compilado para APCS-%d, enquanto o alvo %pB usa APCS-%derro: %pB estÃ¡ compilado para EP9312, enquanto %pB estÃ¡ compilado para XScaleerro: %pB precisa de alinhamento 8-byte mas %pB estÃ¡ definido para alinhamento 4-byteerro: %pB passa flutuantes em registos flutuantes, enquanto %pB os passa em registos inteiroserro: %pB passa flutuantes em registos inteiros, enquanto %pB os passa em registos flutuanteserro: %pB requer mais alinhamento de matriz do que %pB preservaerro: %pB requer mais alinhamento de stack do que %pB preservaerro: %pB usa alinhamento de pilha %u-byte mas a saÃ­da usa alinhamento de pilha %u-byteerro: %pB usa instruÃ§Ãµes %s mas %pB usa %serro: %pB usa instruÃ§Ãµes%s, enquanto %pB nÃ£oerro: %pB usa doubles 64-bit mas %pB usa doubles 32-biterro: %pB usa FPU-3.0 mas %pB sÃ³ suporta FPU-2.0erro: %pB usa argumentos de registo VFP, %pB nÃ£oerro: %pB usa equipamento FP, enquanto %pB usa programa FPerro: %pB usa argumentos de registo iWMMXt, %pB nÃ£oerro: %pB usa programa FP, enquanto %pB usa equipamento FPerro: %pB usa o modelo de cÃ³digo %s enquanto %pB usa o modelo de cÃ³digo %serro: %pB usa o modelo de dados %s mas %pB sÃ³ usa instruÃ§Ãµes MSP430erro: %pB usa o modelo de dados %s enquanto %pB usa o modelo de dados %serro: %pB usa o modelo de cÃ³digo grande mas %pB usa instruÃ§Ãµes MSP430erro: %pB usa o modelo de cÃ³digo pequeno mas %pB usa o modelo de dados %serro: %pB: <tamanho AArch64 corrompido usado: 0x%x>erro: %pB: <propriedade corrompida (0x%x) tamanho: 0x%x>erro: %pB: <propriedade x86 corrompida (0x%x) tamanho: 0x%x>erro: %pB: cadeia ISA de entrada (%s) nÃ£o corresponde Ã  saÃ­da (%s)erro: %pB: conflitos de endereÃ§amento relativo SB com o uso de R9erro: %pB: XLEN de entrada (%u) nÃ£o corresponde Ã  saÃ­da (%u)erro: %pB: Big-endian R2 nÃ£o Ã© suportado.erro: %pB: impossÃ­vel misturar rf16 com conjunto de registo completo %pB.erro: %pB: arquitecturas CPU %d/%d em conflitoerro: %pB: conflito de atributos de extensÃ£o ISA %s com %s.erro: %pB: perfis de arquitectura %c/%c em conflitoerro: %pB: conflito de atributos %s.erro: %pB: conflito de atributos %s: %s com %s.erro: %pB: uso de R9 em conflitoerro: %pB: cadeia ISA "%s" corrompida. Primeira letra esperada era "i" ou "e", obtida "%s".erro: %pB: cadeia ISA trocada para unir "%s" e "%s"erro: %pB: objecto tem conteÃºdo especifico do fabricante que tem de ser processado por "%s"erro: %pB: etiqueta do objecto "%d, %s" Ã© incompatÃ­vel com etiqueta "%d, %s"erro: %pB: detectado ficheiro objecto antigo incompatÃ­velerro: %pB: tamanho da secÃ§Ã£o %pA nÃ£o Ã© mÃºltiplo do tamanho do endereÃ§oerro: %pB: impossÃ­vel unir atributos base CPU %s com %s.erro: %pB: impossÃ­vel unir atributos de extensÃ£o ISA %s.erro: %pB: impossÃ­vel unir atributos de virtualizaÃ§Ã£o com %pBerro: %pB: arquitectura CPU desconhecidaerro: %pB: XLEN nÃ£o suportado (%u), poderÃ¡ estar a usar a emulaÃ§Ã£o erradaERRO: tentativa de ligar %pB com um binÃ¡rio %pB de diferente arquitecturaerro: impossÃ­vel encontrar sÃ­mbolo: %s.erro: tamanho final de valor uleb128 no desvio 0x%lx em %pA de %pB excede o espaÃ§o disponÃ­velerro: formato fp16 enganado entre %pB e %pBerro: tipo de relocalizaÃ§Ã£o inapropriado para biblioteca partilhada (esqueceu-se de -fpic?)erro: objecto fonte %pB tem versÃ£o EABI %d, mas o alvo %pB tem versÃ£o EABI %dErro: a arquitectura ARC4 jÃ¡ nÃ£o Ã© suportada.erro: sÃ­mbolo __rtinit indefinidoerro: valor Tag_ABI_array_object_align_expected desconhecido em %pBerro: valor Tag_ABI_array_object_alignment desconhecido em %pBEncontrados erros ao processar o ficheiro %pBexecutÃ¡velfalha ao alocar espaÃ§o para nova secÃ§Ã£o APUinfo.falha ao computar nova secÃ§Ã£o APUinfo.Falha ao procurar reloc HI16 anteriorfalha ao instalar nova secÃ§Ã£o APUinfo.Falha ao actualizar desvios de ficheiro na pasta de depuraÃ§Ã£oerro fatal ao criar .fixupformato de ficheiro ambÃ­guoformato de ficheiro nÃ£o reconhecidoficheiro em formato erradoficheiro muito grandeficheiro truncadoemitidos mais avisos sobre a codificaÃ§Ã£o FDE impedir a geraÃ§Ã£o de .eh_frame_hdrlinker genÃ©rico nÃ£o pode gerir %sendereÃ§o relativo de ponteiro global fora do intervalorelocalizaÃ§Ã£o relativa de ponteiro global com _gp nÃ£o definidosÃ­mbolo ocultosÃ­mbolo oculto tipos de cpu incompatÃ­veis em ficheiros mach-0: %ld vs %ldincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
 indirecto, definido em 0x%08x
-Erro interno: transporte de stack em reloc RL78Erro interno: sub-transporte de stack em reloc RL78erro interno: adenda devia ser zero para %serro interno: detectado ramo/salto para um endereÃ§o Ã­mparerro interno: erro perigosoerro interno: relocalizaÃ§Ã£o perigosaerro interno: uniÃ£o da arquitectura "%s" com a arquitectura "%s" produziu uma arquitectura desconhecidaerro interno: erro fora do intervaloerro interno: tipo de relocalizaÃ§Ã£o suspeito usado em biblioteca partilhadaerro interno: erro desconhecidoerro interno: erro relocalizaÃ§Ã£o nÃ£o suportadainconsistÃªncia interna no tamanho da secÃ§Ã£o .got.locInconsistÃªncia interna: resta %lu != mÃ¡x %lu.
-  Por favor, reporte este erro.sÃ­mbolo internosÃ­mbolo interno Tipo de relocalizaÃ§Ã£o "%s" TARGET2 invÃ¡lido.Alvo bfd invÃ¡lidoConteÃºdo invÃ¡lido na secÃ§Ã£o %pARelocalizaÃ§Ã£o de entrada invÃ¡lida ao produzir saÃ­da de formato nÃ£o-ELF, nÃ£o-mmo.
+Erro interno: transporte de stack em reloc RL78Erro interno: sub-transporte de stack em reloc RL78erro interno: adenda devia ser zero para %serro interno: detectado ramo/salto para um endereÃ§o Ã­mparerro interno: erro perigosoerro interno: relocalizaÃ§Ã£o perigosaerro interno: uniÃ£o da arquitectura "%s" com a arquitectura "%s" produziu uma arquitectura desconhecidaerro interno: erro fora do intervaloerro interno: relocalizaÃ§Ã£o nÃ£o suportadaerro interno: tipo de relocalizaÃ§Ã£o suspeito usado em biblioteca partilhadaerro interno: erro desconhecidoerro interno: erro relocalizaÃ§Ã£o nÃ£o suportadainconsistÃªncia interna no tamanho da secÃ§Ã£o .got.locInconsistÃªncia interna: resta %lu != mÃ¡x %lu.
+  Por favor, reporte este erro.sÃ­mbolo internosÃ­mbolo interno %s invÃ¡lidoTipo de relocalizaÃ§Ã£o "%s" TARGET2 invÃ¡lido.destino bfd invÃ¡lidoConteÃºdo invÃ¡lido na secÃ§Ã£o %pAÃ­ndice dinÃ¢mico invÃ¡lidoRelocalizaÃ§Ã£o de entrada invÃ¡lida ao produzir saÃ­da de formato nÃ£o-ELF, nÃ£o-mmo.
  Por favor, use o programa objcopy para converter de ELF ou mmo,
  ou monte usando "-no-expand" (para gcc, "-Wa,-no-expand"RelocalizaÃ§Ã£o de entrada invÃ¡lida ao produzir saÃ­da de formato nÃ£o-ELF, nÃ£o-mmo.
  Por favor, use o programa objcopy para converter de ELF ou mmo,
-ou compile usando a opÃ§Ã£o gcc "-mno-base-addresses".OperaÃ§Ã£o invÃ¡lidaSecÃ§Ã£o de saÃ­da invÃ¡lida para .eh_frame_entry: %pAEndereÃ§o de relocalizaÃ§Ã£o invÃ¡lidoÃ�ndice de secÃ§Ã£o invÃ¡lido em ETIRuso invÃ¡lido de %s com contextosip2k relaxer: cabeÃ§alho da tabela de troca corrompido.ip2k relaxer: tabela de troca sem informaÃ§Ã£o completa de comparaÃ§Ã£o de relocalizaÃ§Ã£o.EstarÃ¡ esta versÃ£o do linker - %s - fora do prazo?Erro de ligaÃ§Ã£o BFD: salto (PC rel26) para secÃ§Ã£o (%s) nÃ£o suportadoSalto para um endereÃ§o nÃ£o alinhado por instruÃ§Ã£oSalto para um endereÃ§o nÃ£o alinhado por wordetiqueta, nome: %.*s
+ou compile usando a opÃ§Ã£o gcc "-mno-base-addresses".operaÃ§Ã£o invÃ¡lidaSecÃ§Ã£o de saÃ­da invÃ¡lida para .eh_frame_entry: %pAEndereÃ§o de relocalizaÃ§Ã£o invÃ¡lidoÃ�ndice de secÃ§Ã£o invÃ¡lido em ETIRuso invÃ¡lido de %s com contextosip2k relaxer: cabeÃ§alho da tabela de troca corrompido.ip2k relaxer: tabela de troca sem informaÃ§Ã£o completa de comparaÃ§Ã£o de relocalizaÃ§Ã£o.EstarÃ¡ esta versÃ£o do linker - %s - fora do prazo?Erro de ligaÃ§Ã£o BFD: salto (PC rel26) para secÃ§Ã£o (%s) nÃ£o suportadoSalto para um endereÃ§o nÃ£o alinhado por instruÃ§Ã£oSalto para um endereÃ§o nÃ£o alinhado por wordetiqueta, nome: %.*s
 tam: %2u, tipo: %2u nÂº linha  (tam: %u)
 imagem ligÃ¡velfictÃ­cios de linker em grupo %u
 fictÃ­cios de linker em grupos %u
-literalrelocalizaÃ§Ã£o literal ocorre para um sÃ­mbolo externotransporte em desvio "%s" em fictÃ­cio de ramo longomach-o: hÃ¡ demasiadas secÃ§Ãµes (%u), o mÃ¡ximo Ã© 255,
-Arquivo mal formadoMemÃ³ria esgotadamep: sem reloc para cÃ³digo %dmodbeg
+literalrelocalizaÃ§Ã£o literal ocorre para um sÃ­mbolo externoÃ­ndice de sÃ­mbolo local demasiado grandetransporte em desvio "%s" em fictÃ­cio de ramo longomach-o: hÃ¡ demasiadas secÃ§Ãµes (%u), o mÃ¡ximo Ã© 255,
+arquivo mal formadometade de sectdiff de relocalizaÃ§Ã£o mach-o ARM mal formado: tamanho invÃ¡lido: %dsectdiff de relocalizaÃ§Ã£o local mach-o ARM mal formado: tamanho invÃ¡lido: %dpar de relocalizaÃ§Ã£o mach-o ARM mal formado: tamanho invÃ¡lido: %dpar de relocalizaÃ§Ã£o mach-o ARM mal formado: relocalizaÃ§Ã£o Ã© a 1Âª relocalizaÃ§Ã£orelocalizaÃ§Ã£o mach-o ARM mal formada: tipo de relocalizaÃ§Ã£o desconhecido: %dsectdiff de relocalizaÃ§Ã£o mach-o ARM mal formado: tamanho invÃ¡lido: %drelocalizaÃ§Ã£o vanilla mach-o ARM mal formada: tamanho invÃ¡lido: %d (pcrel: %d)relocalizaÃ§Ã£o mach-o mal formada: Ã­ndice de secÃ§Ã£o maior que o nÃºmero de secÃ§ÃµesmemÃ³ria esgotadamep: sem reloc para cÃ³digo %dmodbeg
 modend
-nome: [val: %08lx tam %d]: nativointroduzidas novas funÃ§Ãµes de entrada mas nÃ£o especificou biblioteca importada de saÃ­da:nÃ£oSem endereÃ§o atribuÃ­do Ã  secÃ§Ã£o de saÃ­da das folhas %sSem erroSem mais ficheiros de arquivoSem sÃ­mbolosmatriz nÃ£o contÃ­nua de %s
-relocalizaÃ§Ãµes nÃ£o-dinÃ¢micas referem-se a sÃ­mbolo dinÃ¢mico %stamanho nÃ£o-sobreposiÃ§Ã£o de 0x%v mais o tamanho mÃ¡ximo de sobreposiÃ§Ã£o de 0x%v excede a capacidade local
-adenda nÃ£o-zero em reloc @fptrnenhumSecÃ§Ã£o nÃ£o representÃ¡vel na saÃ­daespaÃ§o GOT insuficiente para entradas GOT locaisSem memÃ³ria suficiente para ordenar relocalizaÃ§ÃµesnÃ£o mapeado: dados=%lx mapeado=%d
+nome: [val: %08lx tam %d]: nativointroduzidas novas funÃ§Ãµes de entrada mas nÃ£o especificou biblioteca importada de saÃ­da:nÃ£oSem endereÃ§o atribuÃ­do Ã  secÃ§Ã£o de saÃ­da das folhas %ssem informaÃ§Ã£o de Ã­ndicesem erronÃ£o hÃ¡ mais ficheiros arquivadossem sÃ­mbolosmatriz nÃ£o contÃ­nua de %s
+relocalizaÃ§Ãµes nÃ£o-dinÃ¢micas referem-se a sÃ­mbolo dinÃ¢mico %ssÃ­mbolo nÃ£o-dinÃ¢mico %s em tabela dinÃ¢mica de sÃ­mbolostamanho nÃ£o-sobreposiÃ§Ã£o de 0x%v mais o tamanho mÃ¡ximo de sobreposiÃ§Ã£o de 0x%v excede a capacidade local
+adenda nÃ£o-zero em reloc @fptrnenhumsecÃ§Ã£o nÃ£o representÃ¡vel na saÃ­daespaÃ§o GOT insuficiente para entradas GOT locaisSem memÃ³ria suficiente para ordenar relocalizaÃ§ÃµesnÃ£o mapeado: dados=%lx mapeado=%d
 nÃ£o mapeado: env var nÃ£o definida
-nÃ£o definidoMÃ³dulo objecto NÃƒO livre de erros!Desvio "%s" da folha para funÃ§Ã£o de entrada nÃ£o Ã© mÃºltiplo do seu tamanho.Uma causa possÃ­vel deste erro Ã© o sÃ­mbolo ser referenciado no cÃ³digo indicado como se tivesse um alinhamento maior do que aquele que foi declarado na definiÃ§Ã£o.fora do intervalotransporte apÃ³s relaxetransporte de relocalizaÃ§Ã£o fictÃ­cia de sobreposiÃ§Ã£oponteiro
+nÃ£o definidoMÃ³dulo objecto NÃƒO livre de erros!Desvio "%s" da folha para funÃ§Ã£o de entrada nÃ£o Ã© mÃºltiplo do seu tamanho.Uma causa possÃ­vel deste erro Ã© o sÃ­mbolo ser referenciado no cÃ³digo indicado como se tivesse um alinhamento maior do que aquele que foi declarado na definiÃ§Ã£o.fora do intervalotransporte apÃ³s relaxetransporte de relocalizaÃ§Ã£o fictÃ­cia de sobreposiÃ§Ã£oestrutura da extensÃ£o: sem descritores de ficheiro. Tente usar menos objectos/arquivos
+ponteiro
 bandeiras privadas = %lxbandeiras provadas = %lx:bandeiras privadas = %lx: bandeiras privadas = 0x%lxbandeiras privadas = 0x%lx:prÃ³logo: bkpt endereÃ§o 0x%08x
 sÃ­mbolo protegidosÃ­mbolo protegido recbeg: nome: %.*s
 recend
-referÃªncia a um endereÃ§o de banco [%lx:%04lx] no espaÃ§o de endereÃ§o normal em %04lxReferÃªncia ao sÃ­mbolo distante "%s" com uma relocalizaÃ§Ã£o errada pode resultar em execuÃ§Ã£o incorrectaregRegisto %%g%d usa incompatibilidade: %s em %pB, previamente %s em %pBSecÃ§Ã£o de registo tem conteÃºdo
+registo muito pequeno para o tamanho do nome do sÃ­mboloreferÃªncia a um endereÃ§o de banco [%lx:%04lx] no espaÃ§o de endereÃ§o normal em %04lxReferÃªncia ao sÃ­mbolo distante "%s" com uma relocalizaÃ§Ã£o errada pode resultar em execuÃ§Ã£o incorrectaregRegisto %%g%d usa incompatibilidade: %s em %pB, previamente %s em %pBSecÃ§Ã£o de registo tem conteÃºdo
 reloc (%d) Ã© *UNKNOWN*RelocalizaÃ§Ã£o para psect nÃ£o-RELrelocalizaÃ§Ã£o fora do intervalorelocalizaÃ§Ã£o referencia sÃ­mbolo ainda nÃ£o definido no mÃ³dulorelocalizaÃ§Ã£o requer adenda zeroa relocalizaÃ§Ã£o deve ser nÃºmero parrelocalizaÃ§Ãµes entre diferentes segmentos nÃ£o sÃ£o suportadasA remover secÃ§Ã£o "%pA" nÃ£o usada no ficheiro "%pB"a reabrir %pB: %s
 comando reservado %drtnbeg
 rtnend: tamanho 0x%08x
-SecÃ§Ã£o sem conteÃºdoseptyp, nome: %.*s
+secÃ§Ã£o sem conteÃºdoseptyp, nome: %.*s
 set_abs_pc: 0x%08x
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-objecto partilhadoErro de tamanho na secÃ§Ã£o %pAsecÃ§Ã£o small-data excede 64KB; baixe o limite de tamanho de small-data (veja a opÃ§Ã£o -G)som_sizeof_headers nÃ£o implementadodesculpe, sem suporte para ficheiros objecto duplicados no script de auto-sobreposiÃ§Ã£o
+objecto partilhadoErro de tamanho na secÃ§Ã£o %pAsecÃ§Ã£o small-data excede 64KB; baixe o limite de tamanho de small-data (veja a opÃ§Ã£o -G)som_sizeof_headers nÃ£o implementadodesculpe, impossÃ­vel gerir este ficheirodesculpe, sem suporte para ficheiros objecto duplicados no script de auto-sobreposiÃ§Ã£o
 desculpe: modtab, toc e extrefsyms ainda nÃ£o estÃ£o implementados para comandos dysymtab.fonte (tam: %u)
 RelocalizaÃ§Ã£o ALPHA_R_BSR espÃºriaAnÃ¡lise de stack ignorarÃ¡ a chamada de %s a %s
 Transporte de stack (%d) em _bfd_vms_pushSub-transporte de stack em _bfd_vms_popdados standard: %s
-EndereÃ§o inicial de "%s" Ã© diferente da ligaÃ§Ã£o prÃ©via.procedimento estÃ¡tico (sem nome)fictÃ­cios nÃ£o correspondem ao tamanho calculadosÃ­mbolosÃ­mbolo sÃ­mbolo "%s" tem st_other invÃ¡lido para a versÃ£o ABI 1SÃ­mbolo "%s" tem tipos diferentes: REGISTER em %pB, previamente %s em %pBSÃ­mbolo precisa de secÃ§Ã£o de depuraÃ§Ã£o que nÃ£o existeErro de chamada do sistemainformaÃ§Ã£o da matriz de versÃ£o do sistema:
+EndereÃ§o inicial de "%s" Ã© diferente da ligaÃ§Ã£o prÃ©via.procedimento estÃ¡tico (sem nome)fictÃ­cios nÃ£o correspondem ao tamanho calculadosÃ­mbolosÃ­mbolo sÃ­mbolo "%s" tem st_other invÃ¡lido para a versÃ£o ABI 1SÃ­mbolo "%s" tem tipos diferentes: REGISTER em %pB, previamente %s em %pBvÃ­nculo de sÃ­mbolo STB_GNU_UNIQUE sÃ³ Ã© suportada por alvos GNU e FreeBSDsÃ­mbolo precisa de secÃ§Ã£o de depuraÃ§Ã£o que nÃ£o existetipo de sÃ­mbolo STT_GNU_IFUNC sÃ³ Ã© suportada por alvos GNU e FreeBSDerro de chamada do sistemainformaÃ§Ã£o da matriz de versÃ£o do sistema:
 term(b): 0x%02xterm_w: 0x%04xo alvo bfin actualmente nÃ£o suporta a geraÃ§Ã£o de relocalizaÃ§Ãµes de cÃ³piaHÃ¡ um conflito na uniÃ£o das bandeira do cabeÃ§alho ELF de %pBDemasiadas entradas GOT para -fpic, recompile com -fPICTente activar relaxe para evitar truncamentos nas relocalizaÃ§Ãµestipo de  spec para elemento:
 tipo de spec para subscrito %u:
 ponteiro com tipo
 typspec (tam: %u)
-impossÃ­vel alocar dados para comando de carga %#ximpossÃ­vel encontrar cola %s "%s" para "%s"ImpossÃ­vel encontrar secÃ§Ã£o de saÃ­da equivalente para sÃ­mbolo "%s" da secÃ§Ã£o "%s"impossÃ­vel dispor comando de carga %#x desconhecidoImpossÃ­vel atingir %s (at 0x%08x) do ponteiro global (em 0x%08x) porque o desvio (%d) estÃ¡ fora do intervalo permitido, -32678 a 32767.
-ImpossÃ­vel ler registo EIHS no desvio %#ximpossÃ­vel ler na secÃ§Ã£o %s de %pBimpossÃ­vel escrever comando de carga %#x desconhecidocadeia de bits nÃ£o alinhada de %s
-indefinidoreferÃªncia %s indefinida em sÃ­mbolo complexo: %sSTO_SH5_ISA32 inesperado em sÃ­mbolo local nÃ£o Ã© geridoNÃºmero de mÃ¡quina inesperadoTipo de secÃ§Ã£o %d de ficheiro nÃºcleo OSF/1 nÃ£o geridatipo de entrada egsd %u nÃ£o gerida
+impossÃ­vel alocar dados para comando de carga %#ximpossÃ­vel encontrar cola %s "%s" para "%s"ImpossÃ­vel encontrar secÃ§Ã£o de saÃ­da equivalente para sÃ­mbolo "%s" da secÃ§Ã£o "%s"impossÃ­vel dispor comando de carga %#x desconhecidoImpossÃ­vel ler registo EIHS no desvio %#ximpossÃ­vel ler na secÃ§Ã£o %s de %pBimpossÃ­vel escrever comando de carga %#x desconhecidocadeia de bits nÃ£o alinhada de %s
+indefinidoreferÃªncia %s indefinida em sÃ­mbolo complexo: %sNÃºmero de mÃ¡quina inesperadoTipo de secÃ§Ã£o %d de ficheiro nÃºcleo OSF/1 nÃ£o geridatipo de entrada egsd %u nÃ£o gerida
 sub-tipo emh %u nÃ£o gerido
-RelocalizaÃ§Ã£o %s nÃ£o geridadesconhecidoSub-tipo EGSD %d desconhecidocomando ETIR %d desconhecidoTipo bÃ¡sico %d desconhecidoerro desconhecidovalor de cabeÃ§alho byte-order %#x desconhecidocomando de linha %d desconhecidooperador "%c" desconhecido em sÃ­mbolo complexoReloc %s desconhecidaReloc %s + %s desconhecidaComando fonte %d desconhecidoSÃ­mbolo desconhecido em comando %sarquitectura V850 desconhecidadesconhecido: %xINPUT_SECTION_FLAG %s nÃ£o reconhecida
-TI COFF id de alvo "0x%x" nÃ£o reconhecidaRelocalizaÃ§Ã£o .stab nÃ£o suportadacomando STA %s nÃ£o suportadoreloc nÃ£o suportadorelocalizaÃ§Ã£o nÃ£o suportadarelocalizaÃ§Ã£o nÃ£o suportada entre dados/espaÃ§os de endereÃ§o insnrelocalizaÃ§Ã£o nÃ£o suportadatipo de relocalizaÃ§Ã£o %#x nÃ£o suportadoa usar mÃºltiplos valores gparquitectura v850 E3arquitectura v850arquitectura v850earquitectura v850e1arquitectura v850e2arquitectura v850e2v3arquitectura v850e3v5VariÃ¡vel "%s" sÃ³ pode estar numa das regiÃµes de dados pequena, zero e minÃºsculaVariÃ¡vel "%s" nÃ£o pode estar nas regiÃµes de dados pequena e minÃºscula em simultÃ¢neoVariÃ¡vel "%s" nÃ£o pode estar nas regiÃµes de dados pequena e zero em simultÃ¢neoVariÃ¡vel "%s" nÃ£o pode estar nas regiÃµes de dados zero e minÃºscula em simultÃ¢neoVariÃ¡vel "%s" nÃ£o pode ocupar mÃºltiplas pequenas regiÃµes de dadosvflags: 0x%02x, valor: 0x%08x vma:			EndInicial  	 EndFinal  	 DadosUnwind
+RelocalizaÃ§Ã£o %s nÃ£o geridadesconhecidoSub-tipo EGSD %d desconhecidocomando ETIR %d desconhecidoatributo desconhecido para o sÃ­mbolo "%s": 0x%02xTipo bÃ¡sico %d desconhecidoerro desconhecidovalor de cabeÃ§alho byte-order %#x desconhecidocomando de linha %d desconhecidooperador "%c" desconhecido em sÃ­mbolo complexoReloc %s desconhecidaReloc %s + %s desconhecidaComando fonte %d desconhecidoSÃ­mbolo desconhecido em comando %sarquitectura V850 desconhecidadesconhecido: %xINPUT_SECTION_FLAG %s nÃ£o reconhecida
+TI COFF id de alvo "0x%x" nÃ£o reconhecidaRelocalizaÃ§Ã£o .stab nÃ£o suportadacomando STA %s nÃ£o suportadoreloc nÃ£o suportadorelocalizaÃ§Ã£o nÃ£o suportadarelocalizaÃ§Ã£o nÃ£o suportada entre dados/espaÃ§os de endereÃ§o insnrelocalizaÃ§Ã£o nÃ£o suportadaa usar mÃºltiplos valores gparquitectura v850 E3arquitectura v850arquitectura v850earquitectura v850e1arquitectura v850e2arquitectura v850e2v3arquitectura v850e3v5VariÃ¡vel "%s" sÃ³ pode estar numa das regiÃµes de dados pequena, zero e minÃºsculaVariÃ¡vel "%s" nÃ£o pode estar nas regiÃµes de dados pequena e minÃºscula em simultÃ¢neoVariÃ¡vel "%s" nÃ£o pode estar nas regiÃµes de dados pequena e zero em simultÃ¢neoVariÃ¡vel "%s" nÃ£o pode estar nas regiÃµes de dados zero e minÃºscula em simultÃ¢neoVariÃ¡vel "%s" nÃ£o pode ocupar mÃºltiplas pequenas regiÃµes de dadosvflags: 0x%02x, valor: 0x%08x vma:			EndInicial  	 EndFinal  	 DadosUnwind
 Aviso, .tamanho da secÃ§Ã£o pdata (%ld) nÃ£o Ã© mÃºltiplo de %d
-aviso: %pB e %pB diferem em tamanho wchar_taviso: %pB e %pB diferem sobre se o cÃ³digo foi compilado para DSBTAviso: %pB nÃ£o suporta interworking, enquanto %pB simaviso: %pB tem uma secÃ§Ã£o corrompida com um tamanho (%aviso: %pB tem um Ã­ndice de tabela de cadeia corrompido - a ignorarAviso: %pB suporta interworking, enquanto %pB nÃ£oAviso: %pB usa %s (definida por %pB), %pB usa %sAviso: %pB usa %s (definida por %pB), %pB usa MSA ABI %d desconhecidaAbiso: %pB usa %s (definida por %pB), %pB usa vÃ­rgula flutuante ABI %d desconhecidaaviso: %pB usa %s enums mas a saÃ­da deve usar %s enums; uso de valores enum atravÃ©s de vÃ¡rios objectos pode falharaviso: %pB usa %u-byte wchar_t mas a saÃ­da deve usar %u-byte wchar_t; uso de valores wchar_t atravÃ©s de vÃ¡rios objectos pode falharAviso: %pB usa MSA ABI %d desconhecida (definida por %pB), %pB usa %sAviso: %pB usa MSA ABI %d desconhecida (definida por %pB), %pB usa MSA ABI %d desconhecidaAviso: %pB usa vÃ­rgula flutuante ABI %d desconhecida (definida por %pB), %pB usa %sAviso: %pB usa vÃ­rgula flutuante ABI %d desconhecida (definida por %pB), %pB usa vÃ­rgula flutuante ABI %d desconhecidaAviso: %pB: configuraÃ§Ã£o de plataforma em conflitoAviso: %pB: conflito na configuraÃ§Ã£o de plataforma %s com %s.aviso: %pB: tamanho GNU_PROPERTY_TYPE (%ld) corrupto: %#lxaviso: %pB: GNU_PROPERTY_TYPE (%ld) corrupto ,tipo (0x%x) datasz: 0x%xaviso: %pB: tamanho corrupto de nÃ£o copiar se protegido: 0x%xaviso: %pB:tamanho de stack corrupto: 0x%xaviso: %pB: sÃ­mbolo local "%s" nÃ£o tem secÃ§Ã£oAviso: %pB: atributo de objecto ARC %d desconhecido.Aviso: %pB: atributo de objecto EABI %d desconhecidoAviso: %pB: atributo de objecto MSABI %d desconhecidoaviso: %pB: GNU_PROPERTY_TYPE (%ld) nÃ£o suportada, tipo: 0x%xaviso: %s excede o tamanho da secÃ§Ã£o
+aviso: %pB e %pB diferem em tamanho wchar_taviso: %pB e %pB diferem sobre se o cÃ³digo foi compilado para DSBTAviso: %pB nÃ£o suporta interworking, enquanto %pB simaviso: %pB tem um Ã­ndice de tabela de cadeia corrompido - a ignoraraviso: %pB tem um cabeÃ§alho de programa com argumento invÃ¡lidoaviso: %pB tem uma secÃ§Ã£o estendida para alÃ©m do fim do ficheiroAviso: %pB suporta interworking, enquanto %pB nÃ£oaviso: %pB usa versÃ£o spec privilegiada %u.%u.%u mas a saÃ­da usa a versÃ£o %u.%u.%uAviso: %pB usa %s (definida por %pB), %pB usa %sAviso: %pB usa %s (definida por %pB), %pB usa MSA ABI %d desconhecidaAbiso: %pB usa %s (definida por %pB), %pB usa vÃ­rgula flutuante ABI %d desconhecidaaviso: %pB usa %s enums mas a saÃ­da deve usar %s enums; uso de valores enum atravÃ©s de vÃ¡rios objectos pode falharaviso: %pB usa %u-byte wchar_t mas a saÃ­da deve usar %u-byte wchar_t; uso de valores wchar_t atravÃ©s de vÃ¡rios objectos pode falharAviso: %pB usa MSA ABI %d desconhecida (definida por %pB), %pB usa %sAviso: %pB usa MSA ABI %d desconhecida (definida por %pB), %pB usa MSA ABI %d desconhecidaAviso: %pB usa vÃ­rgula flutuante ABI %d desconhecida (definida por %pB), %pB usa %sAviso: %pB usa vÃ­rgula flutuante ABI %d desconhecida (definida por %pB), %pB usa vÃ­rgula flutuante ABI %d desconhecidaAviso: %pB: configuraÃ§Ã£o de plataforma em conflitoAviso: %pB: conflito na configuraÃ§Ã£o de plataforma %s com %s.aviso: %pB: tamanho GNU_PROPERTY_TYPE (%ld) corrupto: %#lxaviso: %pB: GNU_PROPERTY_TYPE (%ld) corrupto ,tipo (0x%x) datasz: 0x%xaviso: %pB: tamanho corrupto de nÃ£o copiar se protegido: 0x%xaviso: %pB:tamanho de stack corrupto: 0x%xaviso: %pB: sÃ­mbolo local "%s" nÃ£o tem secÃ§Ã£oaviso: %pB: versÃ£o ISA trocada %d.%d para extensÃ£o "%s", a versÃ£o de saÃ­da Ã© %d.%dAviso: %pB: atributo de objecto ARC %d desconhecido.Aviso: %pB: atributo de objecto EABI %d desconhecidoAviso: %pB: atributo de objecto MSABI %d desconhecidoaviso: %pB: GNU_PROPERTY_TYPE (%ld) nÃ£o suportada, tipo: 0x%xaviso: %s excede o tamanho da secÃ§Ã£o
 aviso: %s sobrepÃµe-se a %s
-aviso: secÃ§Ã£o %s tem tamanho zeroaviso: --plt-localentry Ã© particularmente perigosa sem suporte ld.so para detectar violaÃ§Ãµes ABI.Aviso: reloc RL78_SYM com sÃ­mbolo desconhecidoAviso: reloc RX_SYM com sÃ­mbolo desconhecidoAviso: alihamento %u de sÃ­mbolo comum "%s" em %pB Ã© maior que o alinhamento (%u) da sua secÃ§Ã£o %pAAviso: alinhamento %u do sÃ­mbolo "%s" em %pB Ã© menor que %u em %pBaviso: tentativa de exportar sÃ­mbolo "%s" indefinidoaviso: chamada a sÃ­mbolo nÃ£o-funÃ§Ã£o %s definida em %pBAviso: a limpar bandeira %pB de interworking devido a cÃ³digo nÃ£o interworking em %pB que lhe foi ligadoAviso: a limpar bandeira %pB de interworking devido a pedido externoaviso: dados unwind corrompidos
-aviso: a descartar secÃ§Ã£o dinÃ¢mica %saviso: bandeira arch do ficheiro %pB ck%s em conflito com o destino ck%s, a usar ck%sAviso: opÃ§Ã£o gc-sections ignoradaaviso: a gerar uma biblioteca partilhada contendo cÃ³digo nÃ£o PICaviso: a gerar uma biblioteca partilhada contendo cÃ³digo nÃ£o PIDAviso: bandeira %pB de interworking nÃ£o definida porque jÃ¡ foi especificada como nÃ£o-interworkingaviso: a relocalizaÃ§Ã£o referencia um segmento diferenteaviso: a secÃ§Ã£o "%s" estÃ¡ a ser tornada numa notaaviso: tipo da secÃ§Ã£o "%pA" alterou-se para PROGBITSAviso: sÃ­mbolo "%s" Ã© secÃ§Ã£o e nÃ£o-secÃ§Ã£o em simultÃ¢neoaviso: tipo e tamanho do sÃ­mbolo dinÃ¢mico "%s" nÃ£o estÃ£o definidosAviso: tipo de sÃ­mbolo "%s" alterado de %d para %d em %pBaviso: impossÃ­vel definir tamanho da secÃ§Ã£o %s em %pBaviso: impossÃ­vel actualizar conteÃºdo da secÃ§Ã£o %s em %pBaviso: eflag "%#lx" arch nÃ£o reconhecidaAviso: bandeiras nÃ£o definidas ou de arquitectura antiga. Use a mÃ¡quina predefinida.Aviso: escrita do arquivo lenta: a reescrever a dataÃ§Ã£oaviso: secÃ§Ã£o de escrita "%pA" em enorme (negativo) desvio de ficheiroaviso: secÃ§Ã£o xdata corrupta
-simnÃ£o tem permissÃ£o para definir %s num scriptPRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: bad reloc address %# in section `%pA'%pB: illegal relocation type %d at address %#%pB: corrupt symbol count: %#%pB: not enough memory to allocate space for %# symbols of size %#%pB: bad string table size %error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %%pB: error: attribute section length too small: %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: corrupt size field in group section header: %#%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
- linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: version count (%) does not match symbol count (%ld)warning: %pB is truncated: expected core file size >= %, found: %%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csectTOC overflow: %# > 0x10000; try -mminimal-toc when compiling%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%pB: Data Directory size (%lx) exceeds space left in section (%)%pB: desvio de cadeia invÃ¡lido % >= %%pB: reloc TOC em %# para sÃ­mbolo "%s" sem entrada TOC%pB: %#: aviso: mau desvio R_SH_USES%pB: %#: aviso: R_SH_USES aponta para insn %#x nÃ£o reconhecido%pB: %#: aviso: mau desvio de carga R_SH_USES%pB: %#: aviso: impossÃ­vel encontrar reloc esperado%pB: %#: aviso: sÃ­mbolo em secÃ§Ã£o inesperada%pB: %#: aviso: impossÃ­vel encontrar reloc COUNT%pB: %#: aviso: mÃ¡ contagem%pB: %#: fatal: transporte reloc ao relaxar%pB: mau endereÃ§o reloc %# na secÃ§Ã£o "%pA"%pB: tipo de relocalizaÃ§Ã£o %d ilegal no endereÃ§o %#%pB: total de sÃ­mbolos corrupto: %#%pB: memÃ³ria insuficiente para alocar espaÃ§o para %# sÃ­mbolos de tamanho %#%pB: mau tamanho de tabela de cadeias %erro: %pB(%pA) Ã© muito grande (%# bytes)Erro Dwarf: desvio (%) maior ou igual a tamanho %s (%).Erro Dwarf: total de dados (%) maior que o tamanho do buffer.Erro Dwarf: tipo de formato de conteÃºdo % desconhecido.Erro Dwarf: secÃ§Ã£o de informaÃ§Ã£o da linha muito pequena (%)Erro Dwarf: secÃ§Ã£o de informaÃ§Ã£o da linha maior (%#) que o espaÃ§o restante na secÃ§Ã£o (%#lx)Erro Dwarf:  impossÃ­vel ler referÃªncia alternativa %.%pB: erro: tamanho da secÃ§Ã£o de atributo muito pequeno: %%pB(%pA+%#): relocalizaÃ§Ã£o %s insolÃºvel contra o sÃ­mbolo "%s"%pB: desvio de cadeia invÃ¡lido %u >= % para secÃ§Ã£o "%s"%pB: campo de tamanho corrupto no cabeÃ§alho da secÃ§Ã£o de grupo: %#%pB: campo de tamanho invÃ¡lido no cabeÃ§alho da secÃ§Ã£o de grupo: %#%pB: secÃ§Ã£o %pA lma %# ajustada para %#%pB: aviso: detectado segmento carregÃ¡vel vazio em vaddr=%#, Ã© intencional?%pB: aviso: alinhamento do segmento de %# Ã© muito grande%pB(%pA+%#): relocalizaÃ§Ã£o CMEM para "%s" Ã© invÃ¡lida, 16 MSB deveria ser %#x (o valor Ã© %#)%pB(%pA+%#): relocalizaÃ§Ã£o CMEM para "%s+%#" Ã© invÃ¡lida, 16 MSB deveria ser %#x (o valor Ã© %#)%pB(%pA+%#): instruÃ§Ã£o %s "%#lx" inesperada em trampolim TLS%pB(%pA+%#): instruÃ§Ã£o %s "%#lx" inesperada referenciada por TLS_GOTDESC%pB(%pA+%#): relocalizaÃ§Ã£o %s nÃ£o permitida em objecto partilhado%pB(%pA+%#): sÃ³ sÃ£o permitidas instruÃ§Ãµes ADD ou SUB para relocalizaÃ§Ãµes de grupo ALU%pB(%pA+%#): transporte ao dividir %# para relocalizaÃ§Ã£o de grupo %s%pB(%pA+%#): relocalizaÃ§Ã£o %s contra secÃ§Ã£o SEC_MERGE%pB(%pA+%#): %s usado com sÃ­mbolo TLS %s%pB(%pA+%#): %s usado com sÃ­mbolo nÃ£o-TLS %s%pB(%#): erro: impossÃ­vel criar folha STM32L4XX. Sai fora do intervalo por % bytes. ImpossÃ­vel codificar a instruÃ§Ã£o do ramo. %pB(%pA+%#): relocalizaÃ§Ã£o insolÃºvel contra sÃ­mbolo "%s"%pB(%pA+%#): reloc contra "%s": erro %d%pB: relocalizaÃ§Ã£o em "%pA+%#" referencia o sÃ­mbolo "%s" com adenda nÃ£o-zero%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s com adenda nÃ£o-zero % contra sÃ­mbolo local%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s com adenda nÃ£o-zero % contra sÃ­mbolo "%s"%pB(%pA+%#): impossÃ­vel atingir %s, recompile com -ffunction-sections%pB(%pA+%#): %s fixup para insn %#x nÃ£o Ã© suportado em ligaÃ§Ã£o nÃ£o partilhada%pB(%pA+%#): impossÃ­vel gerir %s para %s%pB: transiÃ§Ã£o TLS de %s para %s contra "%s" em %# na secÃ§Ã£o "%pA" falhouip2k linker: pÃ¡gina de instruÃ§Ã£o em falta em %# (dest = %#)ip2k linker: pÃ¡gina de instruÃ§Ã£o redundante em %# (dest = %#)%pB: aviso: %s aponta para reloc nÃ£o reconhecida em %#%pB(%pA+%#): erro: %s com instruÃ§Ã£o inesperada %#x%pB(%pA): relocalizaÃ§Ã£o PID insegura %s em %# (contra %s em %s)%pB(%pA+%#): instruÃ§Ã£o invÃ¡lida para relocalizaÃ§Ã£o TLS %s%pB: reloc CALL15 em %# nÃ£o contra sÃ­mbolo global%pB: %#: aviso: R_SH_USES aponta para insn 0x%x nÃ£o reconhecido%pB: %#: fatal: ramo alvo nÃ£o alinhado para relocalizaÃ§Ã£o relax-support%pB: %#: fatal: relocalizaÃ§Ã£o %s desalinhada %#%pB: %#: fatal: R_SH_PSHA relocalizaÃ§Ã£o % fora do intervalo -32..32%pB: %#: fatal: R_SH_PSHL relocalizaÃ§Ã£o % fora do intervalo -32..32%pB(%pA+%#): impossÃ­vel emitir fixup a "%s" em secÃ§Ã£o sÃ³ de leitura%pB(%pA+%#): relocalizaÃ§Ã£o %s contra sÃ­mbolo externo "%s"%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o GD->LE Ã© muito pequeno: %#%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0xd4??)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0xc7??)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0xd1??)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x310c)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x410b)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x34cc)%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o IE->LE Ã© muito pequeno: %#%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0xd0??: mov.l)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x0?12: stc)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x0?ce: mov.l)%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o GD->IE Ã© muito pequeno: %#%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o LD->LE Ã© muito pequeno: %#%pB(%s+%#): relocalizaÃ§Ã£o %s insolÃºvel comtra sÃ­mbolo "%s"%pB: %#: aviso: %s aponta para insns nÃ£o reconhecido%pB: %#: aviso: %s aponta para insn %#x nÃ£o reconhecido%pB: %#: aviso: %s aponta para reloc nÃ£o reconhecida%pB: %#: aviso: %s aponta para reloc nÃ£o reconhecida  %#%pB: aviso: adenda GOT de %# a "%s" nÃ£o corresponde a adenda GOT de %# prÃ©via%pB: aviso: adenda PLT de %# a "%s" da secÃ§Ã£o %pA ignorada%pB: aviso: relocalizaÃ§Ã£o %s para %# da secÃ§Ã£o %pA%pB(%pA+%#): desvio de relocalizaÃ§Ã£o fora do intervalo (tamanho=%#)%pB(%pA+%#): impossÃ­vel descodificar instruÃ§Ã£o; possÃ­vel troca de configuraÃ§Ã£o%pB(%pA+%#): impossÃ­vel descodificar instruÃ§Ã£o para relocalizaÃ§Ã£o XTENSA_ASM_SIMPLIFY; possÃ­vel troca de configuraÃ§Ã£o%pB(%pA+%#): fix inesperado para relocalizaÃ§Ã£o %s%pB: %pA+%#: aviso: relocalizaÃ§Ã£o %s contra insn inesperadoentrada fictÃ­cia para %s nÃ£o pode carregar .plt, desvio dp = %#%pB(%pA+%#): impossÃ­vel atingir %s%pB: impossÃ­vel relaxar br em %# na secÃ§Ã£o "%pA". Por favor, use brl ou um ramo indirecto.%pB: transporte no segmento de dados curtos (%# >= 0x400000)%pB: secÃ§Ã£o TLS em falta para relocalizaÃ§Ã£o %s contra "%s" em %# na secÃ§Ã£o "%pA".%pB: impossÃ­vel relaxar br (%s) para "%s" em %# na secÃ§Ã£o "%pA" com tamanho %# (> 0x1000000).Aviso: tamanho do sÃ­mbolo "%s" mudou de % em %pB para % em %pB%pB(%pA): relocalizaÃ§Ã£o %# tem Ã­ndice de sÃ­mbolos invÃ¡lido %ld%pB: erro interno de inconsistÃªncia no valor para o
- registo global alocado para o linker: ligado: %# != relaxado: %#%pB: directiva LOCAL: registo $%# nÃ£o Ã© um registo local. O primeiro registo global Ã© $%#%pB: relocalizaÃ§Ã£o %s contra STT_GNU_IFUNC sÃ­mbolo "%s" tem adenda nÃ£o-zero: %#%pB: adenda %s%#x em relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" em %# na secÃ§Ã£o "%pA" estÃ¡ fora do intervalo%pB: nÂº de versÃ£o (%#) nÃ£o corresponde ao nÂº de sÃ­mbolos (%ld)aviso: %pB estÃ¡ truncado: esperado tamanho do ficheiro de nÃºcleo >= %, obtido: %%pB: mau Ã­ndice de sÃ­mbolo de reloc (%# >= %#lx) para desvio %# na secÃ§Ã£o "%pA"%pB: Ã­ndice de sÃ­mbolo nÃ£o-zero (%#) para desvio %# na secÃ§Ã£o "%pA" onde o ficheiro objecto nÃ£o tem tabela de sÃ­mboloerro: %pB contÃ©m uma reloc (%#) para a secÃ§Ã£o %pA que referencia um sÃ­mbolo global inexistente%pB: %pA+%#: sem sÃ­mbolo para INHERIT%pB: tamanho de secÃ§Ã£o "reginfo" incorrecto; esperado %, obtido %%pB: reloc GOT em %# nÃ£o esperada em executÃ¡veis%pB: reloc CALL16 em %# nÃ£o contra sÃ­mbolo global%pB: impossÃ­vel encontrar reloc LO16 correspondente contra "%s" para %s em %# na secÃ§Ã£o "%pA"%pB: entrada VMA "%pA" de %# fora do intervalo de 32-bitsuportado; considere usar "-Ttext-segment=..."%pB: desvio "%pA" de  % de "%pA" alÃ©m do intervalo de ADDIUPC%pB: inÃ­cio VMA "%pA" de %# fora do intervalo 32-bit suportado; considere usar "-Ttext-segment=..."endereÃ§o %pB 64-bit %# forta do intervalo para ficheiro Hex Intel%pB: endereÃ§o %# fora do intervalo para ficheiro Intel HexendereÃ§o de secÃ§Ã£o (%#) abaixo do inÃ­cio do segmento (%#)%pB: acesso alÃ©m do fim da secÃ§Ã£o unida (%)%pB: tentativa de emitir conteÃºdo em endereÃ§o nÃ£o mÃºltiplo de 4 %#%pB: demasiados registos inicializados; tamanho de secÃ§Ã£o %%pB: endereÃ§o inicial invÃ¡lido para registos inicializados de tamanho %: %#%pB: mau sÃ­mbolo XTY_ER "%s": classe %d scnum %d scnlen %%pB: XMC_TC0 sÃ­mbolo "%s" Ã© classe %d scnlen %%pB: reloc %s:% fora de csectTransporte TOC: %# > 0x10000; tente -mminimal-toc ao compilar%pB(%pA+%#): % bytes requeridos para alinhamento com limite %-byte, mas sÃ³ hÃ¡ % presentes%pB: tamanho da pasta de dados (%lx) excede o espaÃ§o deixado na secÃ§Ã£o (%)
\ No newline at end of file
+aviso: secÃ§Ã£o %s tem tamanho zeroaviso: deve ser usado %s, em vez de %saviso: --enable-non-contiguous-regions descarta a secÃ§Ã£o "%s" de "%s"
+aviso: --plt-localentry Ã© particularmente perigosa sem suporte ld.so para detectar violaÃ§Ãµes ABI.aviso: --plt-localentry Ã© incompatÃ­vel com cÃ³digo power10 pc-relativeAviso: reloc RL78_SYM com sÃ­mbolo desconhecidoAviso: reloc RX_SYM com sÃ­mbolo desconhecidoAviso: alihamento %u de sÃ­mbolo comum "%s" em %pB Ã© maior que o alinhamento (%u) da sua secÃ§Ã£o %pAAviso: alinhamento %u do sÃ­mbolo "%s" em %pB Ã© menor que %u em %pBaviso: tentativa de exportar sÃ­mbolo "%s" indefinidoaviso: chamada a sÃ­mbolo nÃ£o-funÃ§Ã£o %s definida em %pBAviso: a limpar bandeira %pB de interworking devido a cÃ³digo nÃ£o interworking em %pB que lhe foi ligadoAviso: a limpar bandeira %pB de interworking devido a pedido externoaviso: dados unwind corrompidos
+aviso: a descartar secÃ§Ã£o dinÃ¢mica %saviso: ficheiro %pB com bandeira arch %s em conflito com o destino %s, definir bandeira arch do destino como %saviso: bandeira arch do ficheiro %pB %s em conflito com o destino %s, a usar %sAviso: opÃ§Ã£o gc-sections ignoradaaviso: a gerar uma biblioteca partilhada contendo cÃ³digo nÃ£o PICaviso: a gerar uma biblioteca partilhada contendo cÃ³digo nÃ£o PIDAviso: bandeira %pB de interworking nÃ£o definida porque jÃ¡ foi especificada como nÃ£o-interworkingaviso: versÃ£o 1.9.1 privilegiada nÃ£o pode ser ligada a outras versÃµes specaviso: a relocalizaÃ§Ã£o referencia um segmento diferenteaviso: a secÃ§Ã£o "%s" estÃ¡ a ser tornada numa notaaviso: tipo da secÃ§Ã£o "%pA" alterou-se para PROGBITSAviso: sÃ­mbolo "%s" Ã© secÃ§Ã£o e nÃ£o-secÃ§Ã£o em simultÃ¢neoaviso: tipo e tamanho do sÃ­mbolo dinÃ¢mico "%s" nÃ£o estÃ£o definidosAviso: tipo de sÃ­mbolo "%s" alterado de %d para %d em %pBaviso: impossÃ­vel definir tamanho da secÃ§Ã£o %s em %pBaviso: impossÃ­vel actualizar conteÃºdo da secÃ§Ã£o %s em %pBaviso: nome arch "%#x" nÃ£o reconhecidoaviso: eflag "%#lx" arch nÃ£o reconhecidaAviso: bandeiras nÃ£o definidas ou de arquitectura antiga. Use a mÃ¡quina predefinida.aviso: escrita do arquivo lenta: a reescrever a dataÃ§Ã£oaviso: secÃ§Ã£o de escrita "%pA" em enorme (negativo) desvio de ficheiroaviso: secÃ§Ã£o xdata corrupta
+ExtensÃ£o x ISA "%s" tem de ser definida com as versÃµessimnÃ£o tem permissÃ£o para definir %s num scriptPRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: illegal relocation type %d at address %#%pB: bad string table size %%pB: bad reloc address %# in section `%pA'error: %pB(%pA) section size (%# bytes) is larger than file size (%# bytes)error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %DWARF error: unable to locate abstract instance DIE ref %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)ERROR: CMSE stub (%s section) too far (%#) from destination (%#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#global pointer relative relocation at address %# when _gp not defined
+unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767
+%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
+ linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: version count (%) does not match symbol count (%ld)warning: %pB is truncated: expected core file size >= %, found: %%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csectTOC overflow: %# > 0x10000; try -mminimal-toc when compiling%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x% without any addend, but may be 0x% after adding the %%pcrel_lo addend%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%pB: Data Directory (%lx bytes at %) extends across section boundary at %%pB: desvio de cadeia invÃ¡lido % >= %%pB: reloc TOC em %# para sÃ­mbolo "%s" sem entrada TOC%pB: %#: aviso: mau desvio R_SH_USES%pB: %#: aviso: R_SH_USES aponta para insn %#x nÃ£o reconhecido%pB: %#: aviso: mau desvio de carga R_SH_USES%pB: %#: aviso: impossÃ­vel encontrar reloc esperado%pB: %#: aviso: sÃ­mbolo em secÃ§Ã£o inesperada%pB: %#: aviso: impossÃ­vel encontrar reloc COUNT%pB: %#: aviso: mÃ¡ contagem%pB: %#: fatal: transporte reloc ao relaxar%pB: tipo de relocalizaÃ§Ã£o %d ilegal no endereÃ§o %#%pB: mau tamanho de tabela de cadeias %%pB: mau endereÃ§o reloc %# na secÃ§Ã£o "%pA"erro: %pB(%pA) tamanho de secÃ§Ã£o (%# bytes) maior que o tamanho do ficheiro (%# bytes)erro: %pB(%pA) Ã© muito grande (%# bytes)Erro Dwarf: desvio (%) maior ou igual a tamanho %s (%).Erro Dwarf: total de dados (%) maior que o tamanho do buffer.Erro Dwarf: tipo de formato de conteÃºdo % desconhecido.Erro Dwarf: secÃ§Ã£o de informaÃ§Ã£o da linha muito pequena (%)Erro Dwarf: secÃ§Ã£o de informaÃ§Ã£o da linha maior (%#) que o espaÃ§o restante na secÃ§Ã£o (%#lx)Erro Dwarf:  impossÃ­vel ler referÃªncia alternativa %.Erro Dwarf: impossÃ­vel localizar instÃ¢ncia DIE abstracta invÃ¡lida ref. %%pB(%pA+%#): relocalizaÃ§Ã£o %s insolÃºvel contra o sÃ­mbolo "%s"%pB: desvio de cadeia invÃ¡lido %u >= % para secÃ§Ã£o "%s"%pB: campo de tamanho invÃ¡lido no cabeÃ§alho da secÃ§Ã£o de grupo: %#%pB: secÃ§Ã£o %pA lma %# ajustada para %#%pB: aviso: detectado segmento carregÃ¡vel vazio em vaddr=%#, Ã© intencional?%pB: aviso: alinhamento do segmento de %# Ã© muito grande%pB(%pA+%#): relocalizaÃ§Ã£o CMEM para "%s" Ã© invÃ¡lida, 16 MSB deveria ser %#x (o valor Ã© %#)%pB(%pA+%#): relocalizaÃ§Ã£o CMEM para "%s+%#" Ã© invÃ¡lida, 16 MSB deveria ser %#x (o valor Ã© %#)ERRO: fictÃ­cio CMSE (secÃ§Ã£o %s) muito longe (%#) do destino (%#)%pB(%pA+%#): instruÃ§Ã£o %s "%#lx" inesperada em trampolim TLS%pB(%pA+%#): instruÃ§Ã£o %s "%#lx" inesperada referenciada por TLS_GOTDESC%pB(%pA+%#): relocalizaÃ§Ã£o %s nÃ£o permitida em objecto partilhado%pB(%pA+%#): sÃ³ sÃ£o permitidas instruÃ§Ãµes ADD ou SUB para relocalizaÃ§Ãµes de grupo ALU%pB(%pA+%#): transporte ao dividir %# para relocalizaÃ§Ã£o de grupo %s%pB(%pA+%#): relocalizaÃ§Ã£o %s contra secÃ§Ã£o SEC_MERGE%pB(%pA+%#): %s usado com sÃ­mbolo TLS %s%pB(%pA+%#): %s usado com sÃ­mbolo nÃ£o-TLS %s%pB(%#): erro: impossÃ­vel criar folha STM32L4XX. Sai fora do intervalo por % bytes. ImpossÃ­vel codificar a instruÃ§Ã£o do ramo. %pB(%pA+%#): relocalizaÃ§Ã£o insolÃºvel contra sÃ­mbolo "%s"%pB(%pA+%#): reloc contra "%s": erro %d%pB: relocalizaÃ§Ã£o em "%pA+%#" referencia o sÃ­mbolo "%s" com adenda nÃ£o-zero%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s com adenda nÃ£o-zero % contra sÃ­mbolo local%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s com adenda nÃ£o-zero % contra sÃ­mbolo "%s"%pB(%pA+%#): impossÃ­vel atingir %s, recompile com -ffunction-sections%pB(%pA+%#): %s fixup para insn %#x nÃ£o Ã© suportado em ligaÃ§Ã£o nÃ£o partilhada%pB(%pA+%#): impossÃ­vel gerir %s para %s%pB: transiÃ§Ã£o TLS de %s para %s contra "%s" em %# na secÃ§Ã£o "%pA" falhouip2k linker: pÃ¡gina de instruÃ§Ã£o em falta em %# (dest = %#)ip2k linker: pÃ¡gina de instruÃ§Ã£o redundante em %# (dest = %#)%pB: aviso: %s aponta para reloc nÃ£o reconhecida em %#relocalizaÃ§Ã£o relativa de ponteiro global no endereÃ§o %# com _gp nÃ£o definido
+ImpossÃ­vel atingir %s (em %#) do ponteiro global (em %#) porque o desvio (%) estÃ¡ fora do intervalo permitido, -32678 a 32767.
+%pB(%pA+%#): erro: %s com instruÃ§Ã£o inesperada %#x%pB(%pA): relocalizaÃ§Ã£o PID insegura %s em %# (contra %s em %s)%pB(%pA+%#): instruÃ§Ã£o invÃ¡lida para relocalizaÃ§Ã£o TLS %s%pB: reloc CALL15 em %# nÃ£o contra sÃ­mbolo global%pB: %#: aviso: R_SH_USES aponta para insn 0x%x nÃ£o reconhecido%pB: %#: fatal: ramo alvo nÃ£o alinhado para relocalizaÃ§Ã£o relax-support%pB: %#: fatal: relocalizaÃ§Ã£o %s desalinhada %#%pB: %#: fatal: R_SH_PSHA relocalizaÃ§Ã£o % fora do intervalo -32..32%pB: %#: fatal: R_SH_PSHL relocalizaÃ§Ã£o % fora do intervalo -32..32%pB(%pA+%#): impossÃ­vel emitir fixup a "%s" em secÃ§Ã£o sÃ³ de leitura%pB(%pA+%#): relocalizaÃ§Ã£o %s contra sÃ­mbolo externo "%s"%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o GD->LE Ã© muito pequeno: %#%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0xd4??)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0xc7??)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0xd1??)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x310c)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x410b)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x34cc)%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o IE->LE Ã© muito pequeno: %#%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0xd0??: mov.l)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x0?12: stc)%pB(%pA+%#): instruÃ§Ã£o inesperada %#04X (esperada 0x0?ce: mov.l)%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o GD->IE Ã© muito pequeno: %#%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o LD->LE Ã© muito pequeno: %#%pB(%s+%#): relocalizaÃ§Ã£o %s insolÃºvel comtra sÃ­mbolo "%s"%pB: %#: aviso: %s aponta para insns nÃ£o reconhecido%pB: %#: aviso: %s aponta para insn %#x nÃ£o reconhecido%pB: %#: aviso: %s aponta para reloc nÃ£o reconhecida%pB: %#: aviso: %s aponta para reloc nÃ£o reconhecida  %#%pB: aviso: adenda GOT de %# a "%s" nÃ£o corresponde a adenda GOT de %# prÃ©via%pB: aviso: adenda PLT de %# a "%s" da secÃ§Ã£o %pA ignorada%pB: aviso: relocalizaÃ§Ã£o %s para %# da secÃ§Ã£o %pA%pB(%pA+%#): desvio de relocalizaÃ§Ã£o fora do intervalo (tamanho=%#)%pB(%pA+%#): impossÃ­vel descodificar instruÃ§Ã£o; possÃ­vel troca de configuraÃ§Ã£o%pB(%pA+%#): impossÃ­vel descodificar instruÃ§Ã£o para relocalizaÃ§Ã£o XTENSA_ASM_SIMPLIFY; possÃ­vel troca de configuraÃ§Ã£o%pB(%pA+%#): fix inesperado para relocalizaÃ§Ã£o %s%pB: %pA+%#: aviso: relocalizaÃ§Ã£o %s contra insn inesperadoentrada fictÃ­cia para %s nÃ£o pode carregar .plt, desvio dp = %#%pB(%pA+%#): impossÃ­vel atingir %s%pB: impossÃ­vel relaxar br em %# na secÃ§Ã£o "%pA". Por favor, use brl ou um ramo indirecto.%pB: transporte no segmento de dados curtos (%# >= 0x400000)%pB: secÃ§Ã£o TLS em falta para relocalizaÃ§Ã£o %s contra "%s" em %# na secÃ§Ã£o "%pA".%pB: impossÃ­vel relaxar br (%s) para "%s" em %# na secÃ§Ã£o "%pA" com tamanho %# (> 0x1000000).Aviso: tamanho do sÃ­mbolo "%s" mudou de % em %pB para % em %pB%pB(%pA): relocalizaÃ§Ã£o %# tem Ã­ndice de sÃ­mbolos invÃ¡lido %ld%pB: erro interno de inconsistÃªncia no valor para o
+ registo global alocado para o linker: ligado: %# != relaxado: %#%pB: directiva LOCAL: registo $%# nÃ£o Ã© um registo local. O primeiro registo global Ã© $%#%pB: relocalizaÃ§Ã£o %s contra STT_GNU_IFUNC sÃ­mbolo "%s" tem adenda nÃ£o-zero: %#%pB: adenda %s%#x em relocalizaÃ§Ã£o %s contra sÃ­mbolo "%s" em %# na secÃ§Ã£o "%pA" estÃ¡ fora do intervalo%pB: nÂº de versÃ£o (%#) nÃ£o corresponde ao nÂº de sÃ­mbolos (%ld)aviso: %pB estÃ¡ truncado: esperado tamanho do ficheiro de nÃºcleo >= %, obtido: %%pB: mau Ã­ndice de sÃ­mbolo de reloc (%# >= %#lx) para desvio %# na secÃ§Ã£o "%pA"%pB: Ã­ndice de sÃ­mbolo nÃ£o-zero (%#) para desvio %# na secÃ§Ã£o "%pA" onde o ficheiro objecto nÃ£o tem tabela de sÃ­mboloerro: %pB contÃ©m uma reloc (%#) para a secÃ§Ã£o %pA que referencia um sÃ­mbolo global inexistente%pB: %pA+%#: sem sÃ­mbolo para INHERIT%pB: tamanho de secÃ§Ã£o "reginfo" incorrecto; esperado %, obtido %%pB: reloc GOT em %# nÃ£o esperada em executÃ¡veis%pB: reloc CALL16 em %# nÃ£o contra sÃ­mbolo global%pB: impossÃ­vel encontrar reloc LO16 correspondente contra "%s" para %s em %# na secÃ§Ã£o "%pA"%pB: entrada VMA "%pA" de %# fora do intervalo de 32-bitsuportado; considere usar "-Ttext-segment=..."%pB: desvio "%pA" de  % de "%pA" alÃ©m do intervalo de ADDIUPC%pB: inÃ­cio VMA "%pA" de %# fora do intervalo 32-bit suportado; considere usar "-Ttext-segment=..."endereÃ§o %pB 64-bit %# forta do intervalo para ficheiro Hex Intel%pB: endereÃ§o %# fora do intervalo para ficheiro Intel HexendereÃ§o de secÃ§Ã£o (%#) abaixo do inÃ­cio do segmento (%#)%pB: acesso alÃ©m do fim da secÃ§Ã£o unida (%)%pB: tentativa de emitir conteÃºdo em endereÃ§o nÃ£o mÃºltiplo de 4 %#%pB: demasiados registos inicializados; tamanho de secÃ§Ã£o %%pB: endereÃ§o inicial invÃ¡lido para registos inicializados de tamanho %: %#%pB: mau sÃ­mbolo XTY_ER "%s": classe %d scnum %d scnlen %%pB: XMC_TC0 sÃ­mbolo "%s" Ã© classe %d scnlen %%pB: reloc %s:% fora de csectTransporte TOC: %# > 0x10000; tente -mminimal-toc ao compilartransporte de %%pcrel_lo com uma adenda, o valor de %%pcrel_hi Ã© 0x% sem adenda, mas pode ser 0x% apÃ³s adicionar a adenda %%pcrel_lo%pB(%pA+%#): % bytes requeridos para alinhamento com limite %-byte, mas sÃ³ hÃ¡ % presentes%pB: tamanho da pasta de dados (%lx em %) estende-se para lÃ¡ da fronteira em %)
\ No newline at end of file
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/pt.po ./bfd/po/pt.po
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/pt.po	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/pt.po	2024-02-01 01:47:14.000000000 +0000
@@ -1,240 +1,254 @@
 # Portuguese translations for GNU binutils package.
 # Copyright (C) 2018 Free Software Foundation, Inc.
 # This file is distributed under the same license as the binutils package.
-# Pedro Albuquerque <palbuquerque73@gmail.com>, 2018, 2019.
+# Pedro Albuquerque <pmra@protonmail.com>, 2018, 2019, 2020, 2021.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd-2.31.90\n"
+"Project-Id-Version: bfd-2.36.90\n"
 "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2019-01-19 16:30+0000\n"
-"PO-Revision-Date: 2019-01-20 17:21+0000\n"
-"Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>\n"
+"POT-Creation-Date: 2021-07-03 15:02+0100\n"
+"PO-Revision-Date: 2021-07-07 07:29+0100\n"
+"Last-Translator: Pedro Albuquerque <pmra@protonmail.com>\n"
 "Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
 "Language: pt\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\\n\n"
-"X-Generator: Gtranslator 2.91.7\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.3\n"
 
-#: aout-cris.c:200
+#: aout-cris.c:196
 #, c-format
 msgid "%pB: unsupported relocation type exported: %#x"
 msgstr "%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado exportado: %#x"
 
-#: aout-cris.c:244
+#: aout-cris.c:242
 #, c-format
 msgid "%pB: unsupported relocation type imported: %#x"
 msgstr "%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado importado: %#x"
 
-#: aout-cris.c:256
+#: aout-cris.c:254
 #, c-format
 msgid "%pB: bad relocation record imported: %d"
 msgstr "%pB: registo de relocalizaÃ§Ã£o importado invÃ¡lido: %d"
 
-#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399
+#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1238 pdp11.c:1512
 #, c-format
 msgid "%pB: can not represent section `%pA' in a.out object file format"
 msgstr "%pB: impossÃ­vel representar secÃ§Ã£o \"%pA\" num formato de ficheiro objecto a.out"
 
-#: aoutx.h:1582 pdp11.c:1371
+#: aoutx.h:1577 pdp11.c:1484
 #, c-format
 msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
 msgstr "%pB: impossÃ­vel representar secÃ§Ã£o para sÃ­mbolo\"%s\" num formato de ficheiro objecto a.out"
 
-#: aoutx.h:1585 vms-alpha.c:7860
+#: aoutx.h:1580 vms-alpha.c:8038
 msgid "*unknown*"
 msgstr "*desconhecido*"
 
-#: aoutx.h:1721
+#: aoutx.h:1716 pdp11.c:1580
 #, c-format
 msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
 msgstr "%pB: desvio de cadeia invÃ¡lido %<PRIu64> >= %<PRIu64>"
 
-#: aoutx.h:2412 aoutx.h:2430
+#: aoutx.h:1963
+#, c-format
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr "%pB: tipo de relocalizaÃ§Ã£o AOUT nÃ£o suportado %d"
+
+#: aoutx.h:2412 aoutx.h:2430 pdp11.c:2060
 #, c-format
 msgid "%pB: attempt to write out unknown reloc type"
 msgstr "%pB tentativa de escrever tipo de reloc desconhecido"
 
-#: aoutx.h:4086
+#: aoutx.h:4085 pdp11.c:3441
 #, c-format
 msgid "%pB: unsupported relocation type"
 msgstr "%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado"
 
 #. Unknown relocation.
-#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772
+#: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1518 coff-rs6000.c:2916
 #: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798
-#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517
-#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698
-#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467
-#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522
-#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381
-#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302
-#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539
-#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417
-#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354
-#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692
-#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137
-#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236
-#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037
-#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420
-#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292
-#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508
-#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642
-#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270
-#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250
-#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459
-#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249
-#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958
-#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921
-#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378
-#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955
-#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2125
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2223
-#: elf32-ia64.c:210 elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862
+#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
+#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4687
+#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
+#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
+#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2559
+#: elf32-frv.c:6240 elf32-ft32.c:305 elf32-h8300.c:302 elf32-i386.c:400
+#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
+#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
+#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
+#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
+#: elf32-microblaze.c:961 elf32-mips.c:2231 elf32-moxie.c:137
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3237
+#: elf32-nds32.c:3263 elf32-nds32.c:5029 elf32-nios2.c:3019 elf32-or1k.c:1070
+#: elf32-pj.c:326 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2392 elf32-score7.c:2231 elf32-sh.c:437
+#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
+#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
+#: elf32-v850.c:1924 elf32-v850.c:4249 elf32-vax.c:289 elf32-visium.c:481
+#: elf32-wasm32.c:105 elf32-xc16x.c:250 elf32-xgate.c:418
+#: elf32-xstormy16.c:395 elf32-xtensa.c:522 elf32-xtensa.c:556 elf32-z80.c:331
+#: elf64-alpha.c:1114 elf64-alpha.c:4072 elf64-alpha.c:4220 elf64-bpf.c:325
+#: elf64-ia64-vms.c:255 elf64-ia64-vms.c:3431 elf64-mips.c:3958
+#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:1021
+#: elf64-ppc.c:1373 elf64-ppc.c:1382 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:279 elfn32-mips.c:3788 elfxx-ia64.c:324 elfxx-riscv.c:970
+#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947
+#: elfnn-aarch64.c:2215 elfnn-aarch64.c:2313 elfnn-ia64.c:214
+#: elfnn-ia64.c:3820
 #, c-format
 msgid "%pB: unsupported relocation type %#x"
 msgstr "%pB: tipo de relocalizaÃ§Ã£o %#x nÃ£o suportado"
 
-#: aoutx.h:5434 pdp11.c:3694
+#: aoutx.h:5432 pdp11.c:3864
 #, c-format
 msgid "%pB: relocatable link from %s to %s not supported"
 msgstr "%pB: ligaÃ§Ã£o relocalizÃ¡vel de %s para %s nÃ£o suportado"
 
-#: archive.c:2214
+#: arc-got.h:69
+#, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr "%pB: impossÃ­vel alocar memÃ³ria para entradas GOT locais"
+
+#: archive.c:2241
 msgid "warning: writing archive was slow: rewriting timestamp"
-msgstr "Aviso: escrita do arquivo lenta: a reescrever a dataÃ§Ã£o"
+msgstr "aviso: escrita do arquivo lenta: a reescrever a dataÃ§Ã£o"
 
-#: archive.c:2330 linker.c:1429
+#: archive.c:2308 archive.c:2368 elflink.c:4611 linker.c:1427
 #, c-format
 msgid "%pB: plugin needed to handle lto object"
 msgstr "%pB: extensÃ£o precisou de gerir objecto lto"
 
-#: archive.c:2559
+#: archive.c:2594
 msgid "Reading archive file mod timestamp"
 msgstr "A ler dataÃ§Ã£o de mod de ficheiro de arquivo"
 
-#: archive.c:2583
+#: archive.c:2618
 msgid "Writing updated armap timestamp"
 msgstr "A escrever dataÃ§Ã£o armap actualizado"
 
-#: bfd.c:449
+#: bfd.c:681
 msgid "no error"
-msgstr "Sem erro"
+msgstr "sem erro"
 
-#: bfd.c:450
+#: bfd.c:682
 msgid "system call error"
-msgstr "Erro de chamada do sistema"
+msgstr "erro de chamada do sistema"
 
-#: bfd.c:451
+#: bfd.c:683
 msgid "invalid bfd target"
-msgstr "Alvo bfd invÃ¡lido"
+msgstr "destino bfd invÃ¡lido"
 
-#: bfd.c:452
+#: bfd.c:684
 msgid "file in wrong format"
-msgstr "Ficheiro em formato errado"
+msgstr "ficheiro em formato errado"
 
-#: bfd.c:453
+#: bfd.c:685
 msgid "archive object file in wrong format"
-msgstr "Ficheiro objecto de arquivo em formato errado"
+msgstr "ficheiro objecto de arquivo em formato errado"
 
-#: bfd.c:454
+#: bfd.c:686
 msgid "invalid operation"
-msgstr "OperaÃ§Ã£o invÃ¡lida"
+msgstr "operaÃ§Ã£o invÃ¡lida"
 
-#: bfd.c:455
+#: bfd.c:687
 msgid "memory exhausted"
-msgstr "MemÃ³ria esgotada"
+msgstr "memÃ³ria esgotada"
 
-#: bfd.c:456
+#: bfd.c:688
 msgid "no symbols"
-msgstr "Sem sÃ­mbolos"
+msgstr "sem sÃ­mbolos"
 
-#: bfd.c:457
+#: bfd.c:689
 msgid "archive has no index; run ranlib to add one"
-msgstr "Arquivo sem Ã­ndice; execute ranlib para adicionar um"
+msgstr "arquivo sem Ã­ndice; execute ranlib para adicionar um"
 
-#: bfd.c:458
+#: bfd.c:690
 msgid "no more archived files"
-msgstr "Sem mais ficheiros de arquivo"
+msgstr "nÃ£o hÃ¡ mais ficheiros arquivados"
 
-#: bfd.c:459
+#: bfd.c:691
 msgid "malformed archive"
-msgstr "Arquivo mal formado"
+msgstr "arquivo mal formado"
 
-#: bfd.c:460
+#: bfd.c:692
 msgid "DSO missing from command line"
 msgstr "DSO em falta da linha de comandos"
 
-#: bfd.c:461
+#: bfd.c:693
 msgid "file format not recognized"
-msgstr "Formato de ficheiro nÃ£o reconhecido"
+msgstr "formato de ficheiro nÃ£o reconhecido"
 
-#: bfd.c:462
+#: bfd.c:694
 msgid "file format is ambiguous"
-msgstr "Formato de ficheiro ambÃ­guo"
+msgstr "formato de ficheiro ambÃ­guo"
 
-#: bfd.c:463
+#: bfd.c:695
 msgid "section has no contents"
-msgstr "SecÃ§Ã£o sem conteÃºdo"
+msgstr "secÃ§Ã£o sem conteÃºdo"
 
-#: bfd.c:464
+#: bfd.c:696
 msgid "nonrepresentable section on output"
-msgstr "SecÃ§Ã£o nÃ£o representÃ¡vel na saÃ­da"
+msgstr "secÃ§Ã£o nÃ£o representÃ¡vel na saÃ­da"
 
-#: bfd.c:465
+#: bfd.c:697
 msgid "symbol needs debug section which does not exist"
-msgstr "SÃ­mbolo precisa de secÃ§Ã£o de depuraÃ§Ã£o que nÃ£o existe"
+msgstr "sÃ­mbolo precisa de secÃ§Ã£o de depuraÃ§Ã£o que nÃ£o existe"
 
-#: bfd.c:466
+#: bfd.c:698
 msgid "bad value"
-msgstr "Mau valor"
+msgstr "mau valor"
 
-#: bfd.c:467
+#: bfd.c:699
 msgid "file truncated"
-msgstr "Ficheiro truncado"
+msgstr "ficheiro truncado"
 
-#: bfd.c:468
+#: bfd.c:700
 msgid "file too big"
-msgstr "Ficheiro muito grande"
+msgstr "ficheiro muito grande"
+
+#: bfd.c:701
+msgid "sorry, cannot handle this file"
+msgstr "desculpe, impossÃ­vel gerir este ficheiro"
 
-#: bfd.c:469
+#: bfd.c:702
 #, c-format
 msgid "error reading %s: %s"
-msgstr "Erro  ao ler %s: %s"
+msgstr "erro ao ler %s: %s"
 
-#: bfd.c:470
+#: bfd.c:703
 msgid "#<invalid error code>"
 msgstr "#<CÃ³digo de erro invÃ¡lido>"
 
-#: bfd.c:1429
+#: bfd.c:1640
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "BFD falha de asserÃ§Ã£o %s %s:%d"
 
-#: bfd.c:1442
+#: bfd.c:1653
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d in %s\n"
 msgstr "BFD erro interno %s, a abortar em %s:%d em %s\n"
 
-#: bfd.c:1447
+#: bfd.c:1658
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d\n"
 msgstr "BFD erro interno %s, a abortar em %s:%d\n"
 
-#: bfd.c:1449
+#: bfd.c:1660
 msgid "Please report this bug.\n"
 msgstr "Por favor, reporte este erro.\n"
 
-#: bfdwin.c:206
+#: bfdwin.c:207
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
 msgstr "nÃ£o mapeado: dados=%lx mapeado=%d\n"
 
-#: bfdwin.c:209
+#: bfdwin.c:210
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr "nÃ£o mapeado: env var nÃ£o definida\n"
@@ -252,122 +266,147 @@ msgstr "a reabrir %pB: %s\n"
 #: coff-alpha.c:450
 #, c-format
 msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
-msgstr ""
-"%pB: impossÃ­vel gerir binÃ¡rios Alpha comprimidos.\n"
-"   Use bandeiras do compilador ou objZ para gerar binÃ¡rios descomprimidos."
+msgstr "%pB: impossÃ­vel gerir binÃ¡rios Alpha comprimidos; use bandeiras do compilador ou objZ para gerar binÃ¡rios descomprimidos"
 
-#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950
+#: coff-alpha.c:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:953
 msgid "GP relative relocation used when GP not defined"
 msgstr "Usada relocalizaÃ§Ã£o relativa GP sem GP definido"
 
-#: coff-alpha.c:1443
+#: coff-alpha.c:1447
 msgid "using multiple gp values"
 msgstr "a usar mÃºltiplos valores gp"
 
-#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411
+#: coff-alpha.c:1505 coff-alpha.c:1511 elf.c:9463 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7614 elf32-ppc.c:8763 elf64-ppc.c:16242
 #, c-format
 msgid "%pB: %s unsupported"
 msgstr "%pB: %s: nÃ£o suportado"
 
-#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330
-#: elf64-mips.c:3451 elfn32-mips.c:3276
+#: coff-go32.c:156 coffswap.h:792
+#, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: aviso: %s: transporte de nÃºmero de linha: 0x%lx > 0xffff"
+
+#: coff-mips.c:643 elf32-mips.c:1744 elf32-score.c:433 elf32-score7.c:333
+#: elf64-mips.c:3451 elfn32-mips.c:3278
 msgid "GP relative relocation when _gp not defined"
 msgstr "RelocalizaÃ§Ã£o relativa GP com _gp nÃ£o definido"
 
-#: coff-rs6000.c:2858
+#: coff-rs6000.c:484 coff64-rs6000.c:377
+#, c-format
+msgid "%pB: unsupported swap_aux_in for storage class %#x"
+msgstr "%pB: swap_aux_in nÃ£o suportado para a classe de armazenamento %#x"
+
+#: coff-rs6000.c:570 coff64-rs6000.c:499
+#, c-format
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr "%pB: swap_aux_out nÃ£o suportado para a classe de armazenamento %#x"
+
+#: coff-rs6000.c:3002
 #, c-format
 msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
 msgstr "%pB: reloc TOC em %#<PRIx64> para sÃ­mbolo \"%s\" sem entrada TOC"
 
-#: coff-rs6000.c:3620 coff64-rs6000.c:2145
+#: coff-rs6000.c:3209 coff-rs6000.c:3220
+msgid "%pB: TLS relocation at (0x%"
+msgstr "%pB: relocalizaÃ§Ã£o TLS em (0x%"
+
+#: coff-rs6000.c:3234
+msgid "%pB: TLS local relocation at (0x%"
+msgstr "%pB: relocalizaÃ§Ã£o TLS local em (0x%"
+
+#: coff-rs6000.c:3642 coff64-rs6000.c:1573
+msgid "%pB: relocatation (%d) at (0x%"
+msgstr "%pB: relocalizaÃ§Ã£o (%d) em (0x%"
+
+#: coff-rs6000.c:3905 coff64-rs6000.c:2023
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized smclas %d"
 msgstr "%pB: sÃ­mbolo \"%s\" tem smclas %d nÃ£o reconhecido"
 
-#: coff-sh.c:780 elf32-sh.c:521
+#: coff-sh.c:778 elf32-sh.c:520
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES offset"
 msgstr "%pB: %#<PRIx64>: aviso: mau desvio R_SH_USES"
 
-#: coff-sh.c:791
+#: coff-sh.c:789
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn %#x"
 msgstr "%pB: %#<PRIx64>: aviso: R_SH_USES aponta para insn %#x nÃ£o reconhecido"
 
-#: coff-sh.c:809 elf32-sh.c:552
+#: coff-sh.c:807 elf32-sh.c:551
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
 msgstr "%pB: %#<PRIx64>: aviso: mau desvio de carga R_SH_USES"
 
-#: coff-sh.c:834 elf32-sh.c:568
+#: coff-sh.c:832 elf32-sh.c:567
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: could not find expected reloc"
 msgstr "%pB: %#<PRIx64>: aviso: impossÃ­vel encontrar reloc esperado"
 
-#: coff-sh.c:851 elf32-sh.c:597
+#: coff-sh.c:849 elf32-sh.c:596
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
 msgstr "%pB: %#<PRIx64>: aviso: sÃ­mbolo em secÃ§Ã£o inesperada"
 
-#: coff-sh.c:977 elf32-sh.c:727
+#: coff-sh.c:975 elf32-sh.c:726
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
 msgstr "%pB: %#<PRIx64>: aviso: impossÃ­vel encontrar reloc COUNT"
 
-#: coff-sh.c:987 elf32-sh.c:738
+#: coff-sh.c:985 elf32-sh.c:737
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad count"
 msgstr "%pB: %#<PRIx64>: aviso: mÃ¡ contagem"
 
-#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512
+#: coff-sh.c:1356 coff-sh.c:2644 elf32-sh.c:1137 elf32-sh.c:1504
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
 msgstr "%pB: %#<PRIx64>: fatal: transporte reloc ao relaxar"
 
-#: coff-sh.c:1454
+#: coff-sh.c:1451
 #, c-format
 msgid "%pB: fatal: generic symbols retrieved before relaxing"
 msgstr "%pB: fatal: obtidos sÃ­mbolos genÃ©ricos antes de relaxar"
 
-#: coff-sh.c:2785 cofflink.c:2965
+#: coff-sh.c:2781 cofflink.c:2959
 #, c-format
 msgid "%pB: illegal symbol index %ld in relocs"
 msgstr "%pB: Ã­ndice de sÃ­mbolo %ld ilegal em relocs"
 
-#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010
+#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5124
 #, c-format
 msgid "%pB: warning: illegal symbol index %ld in relocs"
 msgstr "%pB: aviso: Ã­ndice de sÃ­mbolo %ld ilegal em relocs"
 
-#: coff-tic80.c:441
+#: coff64-rs6000.c:449 coff64-rs6000.c:555
 #, c-format
-msgid "unsupported relocation type %#x"
-msgstr "tipo de relocalizaÃ§Ã£o %#x nÃ£o suportado"
+msgid "%pB: C_STAT isn't supported by XCOFF64"
+msgstr "%pB: C_STAT nÃ£o Ã© suportado por XCOFF64"
 
-#: coff-tic80.c:672 cofflink.c:3127
+#: coff64-rs6000.c:479
 #, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
-msgstr "%pB: mau endereÃ§o reloc %#<PRIx64> na secÃ§Ã£o \"%pA\""
+msgid "%pB: wrong auxtype %#x for storage class %#x"
+msgstr "%pB: auxtype %#x errado para a classe de armazenamento %#x"
 
-#: coffcode.h:954
+#: coffcode.h:986
 #, c-format
 msgid "%pB: unable to load COMDAT section name"
 msgstr "%pB: impossÃ­vel carregar nome de secÃ§Ã£o COMDAT"
 
 #. Malformed input files can trigger this test.
 #. cf PR 21781.
-#: coffcode.h:989
+#: coffcode.h:1021
 #, c-format
 msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
 msgstr "%pB: erro: sÃ­mbolo \"%s\" inesperado em secÃ§Ã£o COMDAT"
 
-#: coffcode.h:1001
+#: coffcode.h:1033
 #, c-format
 msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
 msgstr "%pB: aviso: sÃ­mbolo \"%s\" COMDAT nÃ£o corresponde ao nome de secÃ§Ã£o \"%s\""
 
-#: coffcode.h:1011
+#: coffcode.h:1043
 #, c-format
 msgid "%pB: warning: no symbol for section '%s' found"
 msgstr "%pB: aviso: sÃ­mbolo para secÃ§Ã£o \"%s\" nÃ£o encontrado"
@@ -375,311 +414,325 @@ msgstr "%pB: aviso: sÃ­mbolo para secÃ§Ã
 #. Generate a warning message rather using the 'unhandled'
 #. variable as this will allow some .sys files generate by
 #. other toolchains to be processed.  See bugzilla issue 196.
-#: coffcode.h:1237
+#: coffcode.h:1274
 #, c-format
 msgid "%pB: warning: ignoring section flag %s in section %s"
 msgstr "%pB: aviso: a ignorar bandeira de secÃ§Ã£o %s na secÃ§Ã£o %s"
 
-#: coffcode.h:1306
+#: coffcode.h:1343
 #, c-format
 msgid "%pB (%s): section flag %s (%#lx) ignored"
 msgstr "%pB (%s): bandeira de secÃ§Ã£o %s (%#lx) ignorada"
 
-#: coffcode.h:1917
+#: coffcode.h:1959 coffcode.h:2024
 #, c-format
 msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
 msgstr "%pB: aviso: afirma ter 0xffff relocs, sem transporte"
 
-#: coffcode.h:2315
+#: coffcode.h:2385
 #, c-format
 msgid "unrecognized TI COFF target id '0x%x'"
 msgstr "TI COFF id de alvo \"0x%x\" nÃ£o reconhecida"
 
-#: coffcode.h:2599
+#: coffcode.h:2663
 #, c-format
 msgid "%pB: reloc against a non-existent symbol index: %ld"
 msgstr "%pB: reloc contra Ã­ndice de sÃ­mbolo nÃ£o existente: %ld"
 
-#: coffcode.h:2910
+#: coffcode.h:2961
 #, c-format
 msgid "%pB: page size is too large (0x%x)"
 msgstr "%pB: tamanho de pÃ¡gina muito grande (0x%x)"
 
-#: coffcode.h:3070
+#: coffcode.h:3121
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr "%pB: demasiadas secÃ§Ãµes (%d)"
 
-#: coffcode.h:3489
+#: coffcode.h:3548
 #, c-format
 msgid "%pB: section %pA: string table overflow at offset %ld"
 msgstr "%pB: secÃ§Ã£o %pA: transporte na tabela de sÃ­mbolo no desvio %ld"
 
-#: coffcode.h:3589
+#: coffcode.h:3655
 #, c-format
 msgid "%pB:%s section %s: alignment 2**%u not representable"
 msgstr "%pB:%s secÃ§Ã£o %s: alinhamento 2**%u nÃ£o representÃ¡vel"
 
-#: coffcode.h:4276
+#: coffcode.h:4358
 #, c-format
 msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
 msgstr "%pB: aviso: total de nÃºmero de linha (%#lx) excede tamanho de secÃ§Ã£o (%#lx)"
 
-#: coffcode.h:4291
+#: coffcode.h:4378
 #, c-format
 msgid "%pB: warning: line number table read failed"
 msgstr "%pB: aviso: falha ao ler tabela de nÃºmero de linha"
 
-#: coffcode.h:4325 coffcode.h:4339
+#: coffcode.h:4412 coffcode.h:4426
 #, c-format
 msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
 msgstr "%pB: aviso: Ã­ndice de sÃ­mbolo 0x%lx ilegal em entrada de nÃºmero de linha %d"
 
-#: coffcode.h:4353
+#: coffcode.h:4440
 #, c-format
 msgid "%pB: warning: illegal symbol in line number entry %d"
 msgstr "%pB: aviso: sÃ­mbolo ilegal em entrada de nÃºmero de linha %d"
 
-#: coffcode.h:4366
+#: coffcode.h:4453
 #, c-format
 msgid "%pB: warning: duplicate line number information for `%s'"
 msgstr "%pB: aviso: informaÃ§Ã£o de nÃºmero de linha duplicada para \"%s\""
 
-#: coffcode.h:4774
+#: coffcode.h:4874
 #, c-format
 msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
 msgstr "%pB: classe de armazenamento %d nÃ£o reconhecida para %s sÃ­mbolo \"%s\""
 
-#: coffcode.h:4904
+#: coffcode.h:5014
 #, c-format
 msgid "warning: %pB: local symbol `%s' has no section"
 msgstr "aviso: %pB: sÃ­mbolo local \"%s\" nÃ£o tem secÃ§Ã£o"
 
-#: coffcode.h:5050
+#: coffcode.h:5164
 #, c-format
 msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
 msgstr "%pB: tipo de relocalizaÃ§Ã£o %d ilegal no endereÃ§o %#<PRIx64>"
 
-#: coffgen.c:178 elf.c:1216
+#: coffgen.c:179 elf.c:1239
 #, c-format
 msgid "%pB: unable to initialize compress status for section %s"
 msgstr "%pB: impossÃ­vel inicializar estado comprimido para secÃ§Ã£o %s"
 
-#: coffgen.c:202 elf.c:1227
+#: coffgen.c:203 elf.c:1250
 #, c-format
 msgid "%pB: unable to initialize decompress status for section %s"
 msgstr "%pB: impossÃ­vel inicializar estado descomprimido para secÃ§Ã£o %s"
 
-#: coffgen.c:1657
-#, c-format
-msgid "%pB: corrupt symbol count: %#<PRIx64>"
-msgstr "%pB: total de sÃ­mbolos corrupto: %#<PRIx64>"
-
-#. PR 21013: Provide an error message when the alloc fails.
-#: coffgen.c:1666
-#, c-format
-msgid "%pB: not enough memory to allocate space for %#<PRIx64> symbols of size %#<PRIx64>"
-msgstr "%pB: memÃ³ria insuficiente para alocar espaÃ§o para %#<PRIx64> sÃ­mbolos de tamanho %#<PRIx64>"
-
-#: coffgen.c:1735
+#: coffgen.c:1706
 #, c-format
 msgid "%pB: bad string table size %<PRIu64>"
 msgstr "%pB: mau tamanho de tabela de cadeias %<PRIu64>"
 
-#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882
-#: xcofflink.c:4505
+#: coffgen.c:1878 coffgen.c:1938 coffgen.c:1956 cofflink.c:2024 elf.c:1936
+#: xcofflink.c:4540
 msgid "<corrupt>"
 msgstr "<corrupto>"
 
-#: coffgen.c:2114
+#: coffgen.c:2087
 #, c-format
 msgid "<corrupt info> %s"
 msgstr "<informaÃ§Ã£o corrupta> %s"
 
-#: coffgen.c:2693 elflink.c:14322 linker.c:2959
+#: coffgen.c:2684 elflink.c:14829 linker.c:2965
 msgid "%F%P: already_linked_table: %E\n"
 msgstr "%F%P: already_linked_table: %E\n"
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3026 elflink.c:13816
 #, c-format
 msgid "removing unused section '%pA' in file '%pB'"
 msgstr "A remover secÃ§Ã£o \"%pA\" nÃ£o usada no ficheiro \"%pB\""
 
-#: coffgen.c:3111 elflink.c:13542
+#: coffgen.c:3103 elflink.c:14036
 msgid "warning: gc-sections option ignored"
 msgstr "Aviso: opÃ§Ã£o gc-sections ignorada"
 
-#: cofflink.c:352
+#: cofflink.c:366
 #, c-format
 msgid "warning: symbol `%s' is both section and non-section"
 msgstr "Aviso: sÃ­mbolo \"%s\" Ã© secÃ§Ã£o e nÃ£o-secÃ§Ã£o em simultÃ¢neo"
 
-#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953
+#: cofflink.c:471 elf64-ia64-vms.c:5202 elflink.c:5207
 #, c-format
 msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
 msgstr "Aviso: tipo de sÃ­mbolo \"%s\" alterado de %d para %d em %pB"
 
-#: cofflink.c:2373
+#: cofflink.c:2352
 #, c-format
 msgid "%pB: relocs in section `%pA', but it has no contents"
 msgstr "%pB: relocs na secÃ§Ã£o \"%pA\", mas nÃ£o tem conteÃºdo"
 
-#: cofflink.c:2436 elflink.c:10810
+#: cofflink.c:2415 elflink.c:11342
 #, c-format
 msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
 msgstr "%X\"%s\" referenciado na secÃ§Ã£o \"%pA\" de %pB: definido em secÃ§Ã£o descartada \"%pA\" de %pB\n"
 
-#: cofflink.c:2734
+#: cofflink.c:2610
+msgid "%pB: stripping non-representable symbol '%s' (value %"
+msgstr "%pB: a eliminar sÃ­mbolo \"%s\" nÃ£o representÃ¡vel (valor %"
+
+#: cofflink.c:2728
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr "%pB: %pA: transporte de reloc: %#x > 0xffff"
 
-#: cofflink.c:2742
+#: cofflink.c:2736
 #, c-format
 msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
 msgstr "%pB: aviso: %pA: transporte de nÃºmero de linha: %#x > 0xffff"
 
-#: coffswap.h:789
+#: cofflink.c:3127
 #, c-format
-msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
-msgstr "%pB: aviso: %s: transporte de nÃºmero de linha: 0x%lx > 0xffff"
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr "%pB: mau endereÃ§o reloc %#<PRIx64> na secÃ§Ã£o \"%pA\""
 
-#: coffswap.h:803
+#: coffswap.h:806
 #, c-format
 msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
 msgstr "%pB: %s: transporte de reloc: 0x%lx > 0xffff"
 
-#: compress.c:260
+#: compress.c:270
+#, c-format
+msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+msgstr "erro: %pB(%pA) tamanho de secÃ§Ã£o (%#<PRIx64> bytes) maior que o tamanho do ficheiro (%#<PRIx64> bytes)"
+
+#: compress.c:281
 #, c-format
 msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
 msgstr "erro: %pB(%pA) Ã© muito grande (%#<PRIx64> bytes)"
 
-#: cpu-arm.c:298 cpu-arm.c:310
+#: cpu-arm.c:307 cpu-arm.c:319
 #, c-format
 msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
 msgstr "erro: %pB estÃ¡ compilado para EP9312, enquanto %pB estÃ¡ compilado para XScale"
 
-#: cpu-arm.c:446
+#: cpu-arm.c:455
 #, c-format
 msgid "warning: unable to update contents of %s section in %pB"
 msgstr "aviso: impossÃ­vel actualizar conteÃºdo da secÃ§Ã£o %s em %pB"
 
-#: dwarf2.c:544
+#: dwarf2.c:552
 #, c-format
 msgid "DWARF error: can't find %s section."
 msgstr "Erro Dwarf: impossÃ­vel encontrar a secÃ§Ã£o %s."
 
-#: dwarf2.c:579
+#. PR 26946
+#: dwarf2.c:563
+#, c-format
+msgid "DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"
+msgstr "Erro DWARF: secÃ§Ã£o %s maior que o seu tamanho de ficheiro! (0x%lx vs 0x%lx)"
+
+#: dwarf2.c:598
 #, c-format
 msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
 msgstr "Erro Dwarf: desvio (%<PRIu64>) maior ou igual a tamanho %s (%<PRIu64>)."
 
-#: dwarf2.c:1107
+#: dwarf2.c:1201
 msgid "DWARF error: info pointer extends beyond end of attributes"
 msgstr "Erro Dwarf: ponteiro de informaÃ§Ã£o excede o final dos atributos"
 
-#: dwarf2.c:1275
+#: dwarf2.c:1349
 #, c-format
 msgid "DWARF error: invalid or unhandled FORM value: %#x"
 msgstr "Erro Dwarf: valor FORM invÃ¡lido ou nÃ£o gerido: %#x."
 
-#: dwarf2.c:1581
+#: dwarf2.c:1664
 msgid "DWARF error: mangled line number section (bad file number)"
 msgstr "Erro Dwarf: secÃ§Ã£o de nÃºmero de linha modificada (mau nÂº de ficheiro)."
 
-#: dwarf2.c:1926
+#: dwarf2.c:2007
 msgid "DWARF error: zero format count"
 msgstr "Erro Dwarf: total de formato zero."
 
-#: dwarf2.c:1936
+#: dwarf2.c:2017
 #, c-format
 msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
 msgstr "Erro Dwarf: total de dados (%<PRIx64>) maior que o tamanho do buffer."
 
-#: dwarf2.c:1977
+#: dwarf2.c:2056
 #, c-format
 msgid "DWARF error: unknown format content type %<PRIu64>"
 msgstr "Erro Dwarf: tipo de formato de conteÃºdo %<PRIu64> desconhecido."
 
-#: dwarf2.c:2057
+#: dwarf2.c:2126
 #, c-format
 msgid "DWARF error: line info section is too small (%<PRId64>)"
 msgstr "Erro Dwarf: secÃ§Ã£o de informaÃ§Ã£o da linha muito pequena (%<PRId64>)"
 
-#: dwarf2.c:2087
+#: dwarf2.c:2153
 #, c-format
 msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
 msgstr "Erro Dwarf: secÃ§Ã£o de informaÃ§Ã£o da linha maior (%#<PRIx64>) que o espaÃ§o restante na secÃ§Ã£o (%#lx)"
 
-#: dwarf2.c:2100
+#: dwarf2.c:2166
 #, c-format
 msgid "DWARF error: unhandled .debug_line version %d"
 msgstr "Erro Dwarf: versÃ£o %d .debug_line version nÃ£o gerida."
 
-#: dwarf2.c:2110
+#: dwarf2.c:2175
 msgid "DWARF error: ran out of room reading prologue"
 msgstr "Erro Dwarf: sem espaÃ§o ao ler o prÃ³logo"
 
-#: dwarf2.c:2128
+#: dwarf2.c:2191
 #, c-format
 msgid "DWARF error: line info unsupported segment selector size %u"
 msgstr "Erro Dwarf: tamanho %u do selector de segmento de informaÃ§Ã£o de linha nÃ£o suportado"
 
-#: dwarf2.c:2155
+#: dwarf2.c:2213
 msgid "DWARF error: invalid maximum operations per instruction"
 msgstr "Erro Dwarf: mÃ¡ximo de operaÃ§Ãµes por instruÃ§Ã£o invÃ¡lido."
 
-#: dwarf2.c:2174
+#: dwarf2.c:2225
 msgid "DWARF error: ran out of room reading opcodes"
 msgstr "Erro Dwarf: sem espaÃ§o ao ler opcodes"
 
-#: dwarf2.c:2347
+#: dwarf2.c:2393
 msgid "DWARF error: mangled line number section"
 msgstr "Erro Dwarf: secÃ§Ã£o de nÃºmero de linha modificada."
 
-#: dwarf2.c:2852 dwarf2.c:2913
+#: dwarf2.c:2881
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "Erro Dwarf: detectada recursividade em instÃ¢ncia abstracta."
+
+#: dwarf2.c:2915 dwarf2.c:3009
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr "Erro Dwarf: instÃ¢ncia DIE ref abstracta invÃ¡lida."
 
-#: dwarf2.c:2889
+#: dwarf2.c:2931
 #, c-format
 msgid "DWARF error: unable to read alt ref %<PRIu64>"
 msgstr "Erro Dwarf:  impossÃ­vel ler referÃªncia alternativa %<PRIu64>."
 
-#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457
+#: dwarf2.c:2987
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr "Erro Dwarf: impossÃ­vel localizar instÃ¢ncia DIE abstracta invÃ¡lida ref. %<PRIu64>"
+
+#: dwarf2.c:3024 dwarf2.c:3305 dwarf2.c:3750
 #, c-format
 msgid "DWARF error: could not find abbrev number %u"
 msgstr "Erro Dwarf: impossÃ­vel encontrar nÃºmero abbrev %u."
 
-#: dwarf2.c:2947
-msgid "DWARF error: abstract instance recursion detected"
-msgstr "Erro Dwarf: detectada recursividade em instÃ¢ncia abstracta."
+#: dwarf2.c:3538
+#, c-format
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
+msgstr "Erro Dwarf: impossÃ­vel encontrar especificaÃ§Ã£o de variÃ¡vel no desvio 0x%lx"
 
-#: dwarf2.c:3376
+#: dwarf2.c:3677
 #, c-format
 msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
 msgstr "Erro Dwarf: encontrada versÃ£o dwarf \"%u\", este leitor sÃ³ gere informaÃ§Ã£o das versÃµes 2, 3, 4 e 5."
 
-#: dwarf2.c:3420
+#: dwarf2.c:3714
 #, c-format
 msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
 msgstr "Erro Dwarf: encontrado tamanho de endereÃ§o \"%u\", este leitor nÃ£o gere tamanhos maiores que \"%u\"."
 
-#: dwarf2.c:3523
+#: dwarf2.c:3817
 msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
 msgstr "Erro Dwarf: encontrado atributo DW_AT_comp_dir com uma forma nÃ£o-cadeia."
 
-#: ecoff.c:971
+#: ecoff.c:940
 #, c-format
 msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
 msgstr "%pB: aviso: isymMax (%ld) Ã© maior que ifdMax (%ld)"
 
-#: ecoff.c:1268
+#: ecoff.c:1236
 #, c-format
 msgid "unknown basic type %d"
 msgstr "Tipo bÃ¡sico %d desconhecido"
 
-#: ecoff.c:1525
+#: ecoff.c:1492
 #, c-format
 msgid ""
 "\n"
@@ -688,7 +741,7 @@ msgstr ""
 "\n"
 "      SÃ­mbolo End+1: %ld"
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1499 ecoff.c:1502
 #, c-format
 msgid ""
 "\n"
@@ -697,7 +750,7 @@ msgstr ""
 "\n"
 "      Primeiro sÃ­mbolo: %ld"
 
-#: ecoff.c:1548
+#: ecoff.c:1517
 #, c-format
 msgid ""
 "\n"
@@ -706,7 +759,7 @@ msgstr ""
 "\n"
 "      SÃ­mbolo End+1: %-7ld   Tipo:  %s"
 
-#: ecoff.c:1555
+#: ecoff.c:1525
 #, c-format
 msgid ""
 "\n"
@@ -715,7 +768,7 @@ msgstr ""
 "\n"
 "      SÃ­mbolo local: %ld"
 
-#: ecoff.c:1563
+#: ecoff.c:1533
 #, c-format
 msgid ""
 "\n"
@@ -724,7 +777,7 @@ msgstr ""
 "\n"
 "      struct; sÃ­mbolo End+1: %ld"
 
-#: ecoff.c:1568
+#: ecoff.c:1538
 #, c-format
 msgid ""
 "\n"
@@ -733,7 +786,7 @@ msgstr ""
 "\n"
 "      union; sÃ­mbolo End+1: %ld"
 
-#: ecoff.c:1573
+#: ecoff.c:1543
 #, c-format
 msgid ""
 "\n"
@@ -742,7 +795,7 @@ msgstr ""
 "\n"
 "      enum; sÃ­mbolo End+1: %ld"
 
-#: ecoff.c:1579
+#: ecoff.c:1551
 #, c-format
 msgid ""
 "\n"
@@ -751,22 +804,22 @@ msgstr ""
 "\n"
 "      Tipo: %s"
 
-#: elf-attrs.c:446
+#: elf-attrs.c:477
 #, c-format
 msgid "%pB: error: attribute section '%pA' too big: %#llx"
 msgstr "%pB: erro: secÃ§Ã£o de atributo \"%pA\"muito grande: %#llx"
 
-#: elf-attrs.c:487
+#: elf-attrs.c:514
 #, c-format
-msgid "%pB: error: attribute section length too small: %<PRId64>"
-msgstr "%pB: erro: tamanho da secÃ§Ã£o de atributo muito pequeno: %<PRId64>"
+msgid "%pB: error: attribute section length too small: %ld"
+msgstr "%pB: erro: tamanho da secÃ§Ã£o de atributo muito pequeno: %ld"
 
-#: elf-attrs.c:615
+#: elf-attrs.c:644
 #, c-format
 msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain"
 msgstr "erro: %pB: objecto tem conteÃºdo especifico do fabricante que tem de ser processado por \"%s\""
 
-#: elf-attrs.c:625
+#: elf-attrs.c:654
 #, c-format
 msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
 msgstr "erro: %pB: etiqueta do objecto \"%d, %s\" Ã© incompatÃ­vel com etiqueta \"%d, %s\""
@@ -790,131 +843,127 @@ msgstr "codificaÃ§Ã£o FDE em %pB(%pA) im
 msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
 msgstr "emitidos mais avisos sobre a codificaÃ§Ã£o FDE impedir a geraÃ§Ã£o de .eh_frame_hdr"
 
-#: elf-eh-frame.c:1868
+#: elf-eh-frame.c:1866
 #, c-format
 msgid "%pB: %pA not in order"
 msgstr "%pB: %pA nÃ£o estÃ¡ em ordem"
 
-#: elf-eh-frame.c:1882
+#: elf-eh-frame.c:1880
 #, c-format
 msgid "%pB: %pA invalid input section size"
 msgstr "%pB: %pA tamanho invÃ¡lido de secÃ§Ã£o de entrada"
 
-#: elf-eh-frame.c:1890
+#: elf-eh-frame.c:1888
 #, c-format
 msgid "%pB: %pA points past end of text section"
 msgstr "%pB: %pA aponta para lÃ¡ do fim da secÃ§Ã£o de texto"
 
-#: elf-eh-frame.c:2139
+#: elf-eh-frame.c:2141
 msgid "DW_EH_PE_datarel unspecified for this architecture"
 msgstr "DW_EH_PE_datarel nÃ£o especificado para esta arquitectura."
 
-#: elf-eh-frame.c:2309
+#: elf-eh-frame.c:2312
 #, c-format
 msgid "invalid output section for .eh_frame_entry: %pA"
 msgstr "SecÃ§Ã£o de saÃ­da invÃ¡lida para .eh_frame_entry: %pA"
 
-#: elf-eh-frame.c:2332
+#: elf-eh-frame.c:2335
 #, c-format
 msgid "invalid contents in %pA section"
 msgstr "ConteÃºdo invÃ¡lido na secÃ§Ã£o %pA"
 
-#: elf-eh-frame.c:2488
+#: elf-eh-frame.c:2491
 msgid ".eh_frame_hdr entry overflow"
 msgstr "transporte na entrada .eh_frame_hdr."
 
-#: elf-eh-frame.c:2490
+#: elf-eh-frame.c:2493
 msgid ".eh_frame_hdr refers to overlapping FDEs"
 msgstr ".eh_frame_hdr refere FDEs sobrepostos."
 
-#: elf-ifunc.c:149
+#: elf-ifunc.c:144
 #, c-format
 msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
 msgstr "%F%P: sÃ­mbolo \"%s\" STT_GNU_IFUNC dinÃ¢mico com igualdade de ponteiro em \"%pB\" nÃ£o pode ser usado ao fazer um executÃ¡vel; recompile com -fPIE e volte a ligar com -pie\n"
 
-#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127
-#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925
-#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049
-#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693
-#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266
-#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631
-#: elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759
-#: elf32-score.c:2733 elf32-score7.c:2542 elf32-spu.c:5083
-#: elf32-tilepro.c:3506 elf32-v850.c:2291 elf32-visium.c:681
-#: elf32-xstormy16.c:931 elf64-mmix.c:1541 elfxx-tilegx.c:3870
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3131
+#: elf32-cr16.c:1432 elf32-cris.c:2034 elf32-crx.c:913 elf32-d10v.c:510
+#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:493
+#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1070
+#: elf32-m32c.c:624 elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522
+#: elf32-metag.c:1984 elf32-microblaze.c:1623 elf32-moxie.c:288 elf32-mt.c:402
+#: elf32-nds32.c:6044 elf32-or1k.c:1861 elf32-score.c:2743 elf32-score7.c:2552
+#: elf32-spu.c:5084 elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
+#: elf32-xstormy16.c:930 elf64-bpf.c:552 elf64-mmix.c:1541 elfxx-tilegx.c:3742
 msgid "internal error: out of range error"
 msgstr "erro interno: erro fora do intervalo"
 
-#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131
-#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929
-#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498
-#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628
-#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994
-#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362
-#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546
-#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685
-#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469
-#: elfxx-tilegx.c:3874
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-avr.c:1512 elf32-bfin.c:3135
+#: elf32-cr16.c:1436 elf32-cris.c:2038 elf32-crx.c:917 elf32-d10v.c:514
+#: elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:497 elf32-h8300.c:527
+#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
+#: elf32-m68hc1x.c:1275 elf32-mep.c:526 elf32-metag.c:1988
+#: elf32-microblaze.c:1627 elf32-moxie.c:292 elf32-msp430.c:1510
+#: elf32-nds32.c:6048 elf32-or1k.c:1865 elf32-score.c:2747 elf32-score7.c:2556
+#: elf32-spu.c:5088 elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684
+#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10558
+#: elfxx-tilegx.c:3746
 msgid "internal error: unsupported relocation error"
 msgstr "erro interno: erro relocalizaÃ§Ã£o nÃ£o suportada"
 
-#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933
-#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053
-#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197
-#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091
+#: elf-m10200.c:442 elf32-cr16.c:1440 elf32-crx.c:921 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
+#: elf32-microblaze.c:1631 elf32-nds32.c:6052 elf32-score.c:2751
+#: elf32-score7.c:2560 elf32-spu.c:5092
 msgid "internal error: dangerous error"
 msgstr "erro interno: erro perigoso"
 
-#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139
-#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937
-#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061
-#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705
-#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278
-#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643
-#: elf32-moxie.c:300 elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201
-#: elf32-or1k.c:1771 elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095
-#: elf32-tilepro.c:3518 elf32-v850.c:2315 elf32-visium.c:693
-#: elf32-xstormy16.c:943 elf64-mmix.c:1553 elfxx-tilegx.c:3882
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-avr.c:1520 elf32-bfin.c:3143
+#: elf32-cr16.c:1444 elf32-cris.c:2046 elf32-crx.c:925 elf32-d10v.c:522
+#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:505
+#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1082
+#: elf32-m32c.c:636 elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534
+#: elf32-metag.c:1996 elf32-microblaze.c:1635 elf32-moxie.c:300
+#: elf32-msp430.c:1518 elf32-mt.c:410 elf32-nds32.c:6056 elf32-or1k.c:1873
+#: elf32-score.c:2760 elf32-score7.c:2564 elf32-spu.c:5096
+#: elf32-tilepro.c:3384 elf32-v850.c:2318 elf32-visium.c:692
+#: elf32-xstormy16.c:942 elf64-bpf.c:565 elf64-mmix.c:1553 elfxx-tilegx.c:3754
 msgid "internal error: unknown error"
 msgstr "erro interno: erro desconhecido"
 
-#: elf-m10300.c:1029
+#: elf-m10300.c:1030
 #, c-format
 msgid "%pB: unsupported transition from %s to %s"
 msgstr "%pB: transiÃ§Ã£o %s para %s nÃ£o suportada"
 
-#: elf-m10300.c:1198
+#: elf-m10300.c:1197
 #, c-format
 msgid "%pB: %s' accessed both as normal and thread local symbol"
 msgstr "%pB: %s acedido como sÃ­mbolo local normal e de fio, em simultÃ¢neo"
 
-#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539
-#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409
-#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846
-#: elfxx-sparc.c:3906 elfxx-tilegx.c:3793
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5261
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6807
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2279
+#: elf-m10300.c:2093 elf32-arm.c:13376 elf32-i386.c:3426 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3671 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3024 elf64-s390.c:3029 elf64-x86-64.c:4082
+#: elfxx-sparc.c:2917 elfxx-sparc.c:3814 elfxx-tilegx.c:3665
+#: elfnn-aarch64.c:5501 elfnn-aarch64.c:7104
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr "%pB(%pA+%#<PRIx64>): relocalizaÃ§Ã£o %s insolÃºvel contra o sÃ­mbolo \"%s\""
 
-#: elf-m10300.c:2156
+#: elf-m10300.c:2155
 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
 msgstr "erro: tipo de relocalizaÃ§Ã£o inapropriado para biblioteca partilhada (esqueceu-se de -fpic?)"
 
-#: elf-m10300.c:2160
+#: elf-m10300.c:2159
 #, c-format
 msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library"
 msgstr "%pB: tirar o endereÃ§o da funÃ§Ã£o protegida \"%s\" nÃ£o pode ser feito ao fazer uma biblioteca partilhada"
 
-#: elf-m10300.c:2163
+#: elf-m10300.c:2162
 msgid "internal error: suspicious relocation type used in shared library"
 msgstr "erro interno: tipo de relocalizaÃ§Ã£o suspeito usado em biblioteca partilhada"
 
-#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364
-#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361
-#: elf64-ia64.c:361
+#: elf-m10300.c:2650 elf32-avr.c:2486 elf32-frv.c:5621 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8282 reloc16.c:155 elfnn-ia64.c:365
 msgid "%P%F: --relax and -r may not be used together\n"
 msgstr "%P%F: --relax e -r nÃ£o podem ser usadas em conjunto\n"
 
@@ -943,136 +992,131 @@ msgstr "aviso: %pB:tamanho de stack corr
 msgid "warning: %pB: corrupt no copy on protected size: 0x%x"
 msgstr "aviso: %pB: tamanho corrupto de nÃ£o copiar se protegido: 0x%x"
 
-#: elf-properties.c:186
+#: elf-properties.c:189
+#, c-format
+msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
+msgstr "erro: %pB: <propriedade corrompida (0x%x) tamanho: 0x%x>"
+
+#: elf-properties.c:205
 #, c-format
 msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
 msgstr "aviso: %pB: GNU_PROPERTY_TYPE (%ld) nÃ£o suportada, tipo: 0x%x"
 
-#: elf-properties.c:301
+#: elf-properties.c:391
 msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr "Removida propriedade %W para unir %pB (0x%v) e %pB (0x%v)\n"
 
-#: elf-properties.c:307
+#: elf-properties.c:397
 msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
 msgstr "Removida propriedade %W para unir %pB (0x%v) e %pB (nÃ£o encontrado)\n"
 
-#: elf-properties.c:316 elf-properties.c:396
+#: elf-properties.c:406 elf-properties.c:484
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr "Removida propriedade %W para unir %pB e %pB\n"
 
-#: elf-properties.c:320
+#: elf-properties.c:410
 msgid "Removed property %W to merge %pB and %pB (not found)\n"
 msgstr "Removida propriedade %W para unir %pB e %pB (nÃ£o encontrado)\n"
 
-#: elf-properties.c:339
+#: elf-properties.c:427
 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr "Actualizada propriedade %W (0x%v) para unir %pB (0x%v) e %pB (0x%v)\n"
 
-#: elf-properties.c:348
+#: elf-properties.c:436
 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
 msgstr "Actualizada propriedade %W (%v) para unir %pB (0x%v) e %pB (nÃ£o encontrada)\n"
 
-#: elf-properties.c:390
+#: elf-properties.c:478
 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
 msgstr "Removida propriedade %W para unir %pB (nÃ£o encontrado) e %pB (0x%v)\n"
 
 #. Merge .note.gnu.property sections.
-#: elf-properties.c:552 elf-properties.c:554
+#: elf-properties.c:640 elf-properties.c:642
 msgid "\n"
 msgstr "\n"
 
-#: elf-properties.c:553
+#: elf-properties.c:641
 msgid "Merging program properties\n"
 msgstr "A unir propriedades do programa\n"
 
 #. PR 17512: file: f057ec89.
-#: elf.c:345
+#: elf.c:337
 #, c-format
 msgid "%pB: attempt to load strings from a non-string section (number %d)"
 msgstr "%pB: tentativa de carregar cadeias de secÃ§Ã£o nÃ£o-cadeia (nÃºmero %d)"
 
-#: elf.c:360
+#: elf.c:362
 #, c-format
 msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
 msgstr "%pB: desvio de cadeia invÃ¡lido %u >= %<PRIu64> para secÃ§Ã£o \"%s\""
 
-#: elf.c:499 /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7891
+#: elf.c:514 elfnn-aarch64.c:8104
 #, c-format
 msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
 msgstr "%pB nÃºmero de sÃ­mbolo %lu referencia secÃ§Ã£o SHT_SYMTAB_SHNDX nÃ£o existente"
 
-#: elf.c:664
-#, c-format
-msgid "%pB: corrupt size field in group section header: %#<PRIx64>"
-msgstr "%pB: campo de tamanho corrupto no cabeÃ§alho da secÃ§Ã£o de grupo: %#<PRIx64>"
-
-#: elf.c:680
+#: elf.c:676
 #, c-format
 msgid "%pB: invalid size field in group section header: %#<PRIx64>"
 msgstr "%pB: campo de tamanho invÃ¡lido no cabeÃ§alho da secÃ§Ã£o de grupo: %#<PRIx64>"
 
-#: elf.c:728
+#: elf.c:721
 #, c-format
 msgid "%pB: invalid entry in SHT_GROUP section [%u]"
 msgstr "%pB: entrada na secÃ§Ã£o [%u] SHT_GROUP invÃ¡lida"
 
-#: elf.c:747
+#: elf.c:740
 #, c-format
 msgid "%pB: no valid group sections found"
 msgstr "%pB: sem secÃ§Ãµes de grupo vÃ¡lidas"
 
 #. See PR 21957 for a reproducer.
-#: elf.c:776
+#: elf.c:769
 #, c-format
 msgid "%pB: group section '%pA' has no contents"
 msgstr "%pB: secÃ§Ã£o de grupo \"%pA\" nÃ£o tem conteÃºdo"
 
-#: elf.c:837
+#: elf.c:830
 #, c-format
 msgid "%pB: no group info for section '%pA'"
 msgstr "%pB: sem informaÃ§Ã£o de grupo para secÃ§Ã£o \"%pA\""
 
-#: elf.c:868 elf.c:3886 elflink.c:11403
-#, c-format
-msgid "%pB: warning: sh_link not set for section `%pA'"
-msgstr "%pB: aviso: sh_link nÃ£o definido para a secÃ§Ã£o \"%pA\""
-
-#: elf.c:888
+#: elf.c:878
 #, c-format
 msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
 msgstr "%pB: sh_link [%d] na secÃ§Ã£o \"%pA\" estÃ¡ incorrecto"
 
-#: elf.c:901
+#: elf.c:891
 #, c-format
 msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
 msgstr "%pB: secÃ§Ã£o SHT_GROUP [Ã­ndice %d] nÃ£o tem secÃ§Ãµes SHF_GROUP"
 
-#: elf.c:922
+#: elf.c:912
 #, c-format
 msgid "%pB: section group entry number %u is corrupt"
 msgstr "%pB: entrada do grupo de secÃ§Ã£o nÃºmero %u estÃ¡ corrompida"
 
-#: elf.c:945
+#: elf.c:935
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
 msgstr "%pB: secÃ§Ã£o tipo [%#x] \"%s\" desconhecida no grupo [%pA]"
 
-#: elf.c:1408
+#: elf.c:1453
 #, c-format
 msgid "%pB: invalid sh_link field (%d) in section number %d"
 msgstr "%pB: sh_link field (%d) invÃ¡lido no nÃºmero da secÃ§Ã£o %d"
 
-#: elf.c:1424
+#: elf.c:1469
 #, c-format
 msgid "%pB: failed to find link section for section %d"
 msgstr "%pB: falha ao procurar secÃ§Ã£o de ligaÃ§Ã£o para a secÃ§Ã£o %d"
 
-#: elf.c:1451
+#: elf.c:1496
 #, c-format
 msgid "%pB: failed to find info section for section %d"
 msgstr "%pB: falha ao procurar secÃ§Ã£o de informaÃ§Ã£o para a secÃ§Ã£o %d"
 
-#: elf.c:1623
+#: elf.c:1668
 #, c-format
 msgid ""
 "\n"
@@ -1081,7 +1125,7 @@ msgstr ""
 "\n"
 "CabeÃ§alho do programa:\n"
 
-#: elf.c:1665
+#: elf.c:1710
 #, c-format
 msgid ""
 "\n"
@@ -1090,7 +1134,7 @@ msgstr ""
 "\n"
 "SecÃ§Ã£o dinÃ¢mica:\n"
 
-#: elf.c:1806
+#: elf.c:1851
 #, c-format
 msgid ""
 "\n"
@@ -1099,7 +1143,7 @@ msgstr ""
 "\n"
 "DefiniÃ§Ãµes da versÃ£o:\n"
 
-#: elf.c:1831
+#: elf.c:1876
 #, c-format
 msgid ""
 "\n"
@@ -1108,1002 +1152,1136 @@ msgstr ""
 "\n"
 "ReferÃªncias da versÃ£o:\n"
 
-#: elf.c:1836
+#: elf.c:1881
 #, c-format
 msgid "  required from %s:\n"
 msgstr "  requerido de %s:\n"
 
-#: elf.c:2037
+#: elf.c:2071
 #, c-format
 msgid "%pB: warning: loop in section dependencies detected"
 msgstr "%pB: aviso: detectado ciclo em dependÃªncias da secÃ§Ã£o"
 
-#: elf.c:2145
+#: elf.c:2178
 #, c-format
 msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: aviso: detectadas mÃºltiplas tabelas de sÃ­mbolo - a ignorar a tabela na secÃ§Ã£o %u"
 
-#: elf.c:2229
+#: elf.c:2262
 #, c-format
 msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: aviso: detectadas mÃºltiplas tabelas de sÃ­mbolo dinÃ¢mico - a ignorar a tabela na secÃ§Ã£o %u"
 
-#: elf.c:2342
+#: elf.c:2375
 #, c-format
 msgid "%pB: invalid link %u for reloc section %s (index %u)"
 msgstr "%pB: ligaÃ§Ã£o invÃ¡lida %u para secÃ§Ã£o reloc %s (Ã­ndice %u)"
 
-#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543
+#: elf.c:2466
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%pB: aviso: encontrada secÃ§Ã£o de relocalizaÃ§Ã£o \"%s\" para a secÃ§Ã£o %pA - a ignorar"
+
+#: elf.c:2552 elf.c:2567 elf.c:2578 elf.c:2591
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr "%pB: tipo desconhecido [%#x], secÃ§Ã£o \"%s\""
 
-#: elf.c:3248
+#: elf.c:3288
 #, c-format
 msgid "%pB: error: alignment power %d of section `%pA' is too big"
 msgstr "%pB: erro: poder de alinhamento %d da secÃ§Ã£o \"%pA\" Ã© muito grande"
 
-#: elf.c:3278
+#: elf.c:3321
 #, c-format
 msgid "warning: section `%pA' type changed to PROGBITS"
 msgstr "aviso: tipo da secÃ§Ã£o \"%pA\" alterou-se para PROGBITS"
 
-#: elf.c:3754
+#: elf.c:3805
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr "%pB: demasiadas secÃ§Ãµes: %u"
 
-#: elf.c:3839
+#: elf.c:3891
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
 msgstr "%pB: sh_link da secÃ§Ã£o \"%pA\" aponta para secÃ§Ã£o descartada \"%pA\" de \"%pB\""
 
-#: elf.c:3864
+#: elf.c:3909
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
 msgstr "%pB: sh_link da secÃ§Ã£o \"%pA\" aponta para secÃ§Ã£o removida \"%pA\" de \"%pB\""
 
-#: elf.c:4430
+#: elf.c:4471
 #, c-format
-msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d"
-msgstr "%pB: secÃ§Ã£o \"%pA\" de GNU_MBIN tem campo sh_info invÃ¡lido: %d"
+msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
+msgstr "%pB: secÃ§Ã£o \"%pA\" de GNU_MBIND tem um campo sh_info field invÃ¡lido: %d"
 
-#: elf.c:5013
+#: elf.c:5065
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr "%pB: secÃ§Ãµes TLS nÃ£o adjacentes:"
 
-#: elf.c:5020
+#: elf.c:5072
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr "\t    TLS: %pA"
 
-#: elf.c:5024
+#: elf.c:5076
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr "\tnÃ£o-TLS: %pA"
 
-#: elf.c:5538
+#: elf.c:5672
 #, c-format
 msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
 msgstr "%pB: a primeira secÃ§Ã£o no segmento PT_DYNAMIC nÃ£o Ã© a secÃ§Ã£o .dynamic"
 
-#: elf.c:5566
+#: elf.c:5698
 #, c-format
 msgid "%pB: not enough room for program headers, try linking with -N"
 msgstr "%pB: sem espaÃ§o para cabeÃ§alhos do programa, tente ligar com -N"
 
-#: elf.c:5654
+#: elf.c:5815
 #, c-format
 msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
 msgstr "%pB: secÃ§Ã£o %pA lma %#<PRIx64> ajustada para %#<PRIx64>"
 
-#: elf.c:5791
+#. The fix for this error is usually to edit the linker script being
+#. used and set up the program headers manually.  Either that or
+#. leave room for the headers at the start of the SECTIONS.
+#: elf.c:5952
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr "%pB: erro: segmento PHDR nÃ£o coberto pelo segmento LOAD"
+
+#: elf.c:5992
 #, c-format
 msgid "%pB: section `%pA' can't be allocated in segment %d"
 msgstr "%pB: secÃ§Ã£o \"%pA\" nÃ£o pode ser alocada no segmento %d"
 
-#: elf.c:5839
+#: elf.c:6129
 #, c-format
 msgid "%pB: warning: allocated section `%s' not in segment"
 msgstr "%pB: aviso: secÃ§Ã£o alocada \"%s\" nÃ£o estÃ¡ no segmento"
 
-#: elf.c:6072
+#: elf.c:6290
 #, c-format
 msgid "%pB: error: non-load segment %d includes file header and/or program header"
 msgstr "%pB: erro: segmento %d nÃ£o carga inclui cabeÃ§alho de ficheiro e/ou de programa"
 
-#. The fix for this error is usually to edit the linker script being
-#. used and set up the program headers manually.  Either that or
-#. leave room for the headers at the start of the SECTIONS.
-#: elf.c:6249
-#, c-format
-msgid "%pB: error: PHDR segment not covered by LOAD segment"
-msgstr "%pB: erro: segmento PHDR nÃ£o coberto pelo segmento LOAD"
-
-#: elf.c:6606
+#: elf.c:6799
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr "%pB: sÃ­mbolo \"%s\" requerido mas nÃ£o presente"
 
-#: elf.c:6949
+#: elf.c:7151
 #, c-format
 msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
 msgstr "%pB: aviso: detectado segmento carregÃ¡vel vazio em vaddr=%#<PRIx64>, Ã© intencional?"
 
-#: elf.c:7574
+#: elf.c:7779
 #, c-format
 msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
 msgstr "%pB: aviso: alinhamento do segmento de %#<PRIx64> Ã© muito grande"
 
-#: elf.c:8073
+#: elf.c:8292
+#, c-format
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr "%pB: impossÃ­vel gerir Ã­ndice de secÃ§Ã£o %x em sÃ­mbolo ELF. A usar ABS."
+
+#: elf.c:8322
 #, c-format
 msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
 msgstr "ImpossÃ­vel encontrar secÃ§Ã£o de saÃ­da equivalente para sÃ­mbolo \"%s\" da secÃ§Ã£o \"%s\""
 
-#: elf.c:8421
+#: elf.c:8735
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr "%pB: entrada .gnu.version_r invÃ¡lida"
 
-#: elf.c:8548
+#: elf.c:8868
 #, c-format
 msgid "%pB: .gnu.version_d invalid entry"
 msgstr "%pB: entrada .gnu.version_d invÃ¡lida"
 
-#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914
-#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841
-#: elf64-ppc.c:4950
+#: elf.c:9325
+#, c-format
+msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+msgstr "%pB:%pA: erro: tentativa de escrita numa secÃ§Ã£o comprimida nÃ£o alocada"
+
+#: elf.c:9334
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr "%pB: %pA: erro: tentativa de escrita para lÃ¡ do fim da secÃ§Ã£o"
+
+#: elf.c:9345
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr "%pB:%pA: erro: tentativa de escrever a secÃ§Ã£o num buffer vazio"
+
+#: elf.c:10246
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr "%pB: aviso: win32pstatus %s de tamanho %lu bytes Ã© muito pequeno"
+
+#: elf.c:10324
+#, c-format
+msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
+msgstr "%pB: win32pstatus NOTE_INFO_MODULE de tamanho %lu Ã© muito pequeno para conter um nome de tamanho %u"
+
+#: elf.c:12633
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr "A secÃ§Ã£o GNU_MBIND sÃ³ Ã© suportada por alvos GNU e FreeBSD"
+
+#: elf.c:12636
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr "tipo de sÃ­mbolo STT_GNU_IFUNC sÃ³ Ã© suportada por alvos GNU e FreeBSD"
+
+#: elf.c:12639
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr "vÃ­nculo de sÃ­mbolo STB_GNU_UNIQUE sÃ³ Ã© suportada por alvos GNU e FreeBSD"
+
+#: elf.c:12642
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr "A secÃ§Ã£o GNU_RETAIN sÃ³ Ã© suportada por alvos GNU e FreeBSD"
+
+#: elf.c:12850 elf64-sparc.c:123 elfcode.h:1504
+#, c-format
+msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
+msgstr "%pB(%pA): relocalizaÃ§Ã£o %d tem Ã­ndice de sÃ­mbolos invÃ¡lido %ld"
+
+#: elf.c:12925
+#, c-format
+msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
+msgstr "%pB(%pA): a secÃ§Ã£o ligaÃ§Ã£o nÃ£o pode ser definida porque o ficheiro de saÃ­da nÃ£o tem uma tabela de sÃ­mbolos"
+
+#: elf.c:12937
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): Ã­ndice da secÃ§Ã£o de informaÃ§Ã£o invÃ¡lido"
+
+#: elf.c:12951
+#, c-format
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr "%pB(%pA): Ã­ndice da secÃ§Ã£o de informaÃ§Ã£o nÃ£o pode ser definido porque a secÃ§Ã£o nÃ£o estÃ¡ na saÃ­da"
+
+#: elf.c:13026
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr "%pB(%pA): erro: secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria processada duas vezes"
+
+#: elf.c:13038
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr "%pB(%pA): erro: secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria tem entradas de tamanho zero"
+
+#: elf.c:13049
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr "%pB(%pA): erro: secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria tem entradas de tamanho nÃ£o-padrÃ£o"
+
+#: elf.c:13061
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr "%pB(%pA): erro: secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria vazia"
+
+#: elf.c:13084
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr "%pB(%pA): erro: relocs internos em falta para a secÃ§Ã£o de relocalizaÃ§Ã£o secundÃ¡ria "
+
+#: elf.c:13103
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %u is empty"
+msgstr "%pB:%pA: erro: a entrada %u da tabela de relocalizaÃ§Ã£o estÃ¡ vazia"
+
+#: elf.c:13128
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
+msgstr "%pB(%pA): erro: a relocalizaÃ§Ã£o secundÃ¡ria %u referencia um sÃ­mbolo em falta"
+
+#: elf.c:13145
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
+msgstr "%pB(%pA): erro: a relocalizaÃ§Ã£o secundÃ¡ria %u referencia um sÃ­mbolo eliminado"
+
+#: elf.c:13158
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
+msgstr "%pB(%pA): erro: a relocalizaÃ§Ã£o secundÃ¡ria %u tem um tipo desconhecido"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15047 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1260 elf32-rx.c:3206
+#: elf32-visium.c:844 elf64-ppc.c:5347 elfnn-aarch64.c:7334
 #, c-format
 msgid "private flags = 0x%lx:"
 msgstr "bandeiras privadas = 0x%lx:"
 
-#: elf32-arc.c:627
+#: elf32-arc.c:642
 #, c-format
 msgid "warning: %pB: conflicting platform configuration %s with %s"
 msgstr "Aviso: %pB: conflito na configuraÃ§Ã£o de plataforma %s com %s."
 
-#: elf32-arc.c:646
+#: elf32-arc.c:661
 #, c-format
 msgid "error: %pB: unable to merge CPU base attributes %s with %s"
 msgstr "erro: %pB: impossÃ­vel unir atributos base CPU %s com %s."
 
-#: elf32-arc.c:683
+#: elf32-arc.c:698
 #, c-format
 msgid "error: %pB: unable to merge ISA extension attributes %s"
 msgstr "erro: %pB: impossÃ­vel unir atributos de extensÃ£o ISA %s."
 
-#: elf32-arc.c:707
+#: elf32-arc.c:722
 #, c-format
 msgid "error: %pB: conflicting ISA extension attributes %s with %s"
 msgstr "erro: %pB: conflito de atributos de extensÃ£o ISA %s com %s."
 
-#: elf32-arc.c:747
+#: elf32-arc.c:762
 #, c-format
 msgid "error: %pB: cannot mix rf16 with full register set %pB"
 msgstr "erro: %pB: impossÃ­vel misturar rf16 com conjunto de registo completo %pB."
 
-#: elf32-arc.c:775
+#: elf32-arc.c:790
 #, c-format
 msgid "error: %pB: conflicting attributes %s: %s with %s"
 msgstr "erro: %pB: conflito de atributos %s: %s com %s."
 
-#: elf32-arc.c:802
+#: elf32-arc.c:817
 #, c-format
 msgid "error: %pB: conflicting attributes %s"
 msgstr "erro: %pB: conflito de atributos %s."
 
-#: elf32-arc.c:907
+#: elf32-arc.c:922
 #, c-format
 msgid "error: attempting to link %pB with a binary %pB of different architecture"
 msgstr "ERRO: tentativa de ligar %pB com um binÃ¡rio %pB de diferente arquitectura"
 
-#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385
-#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354
+#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
+#: elf32-ppc.c:3866 elf64-sparc.c:722 elfxx-mips.c:15568
 #, c-format
 msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: usa campos e_flags diferentes (%#x) dos mÃ³dulos anteriores (%#x)"
 
-#: elf32-arc.c:1012
+#: elf32-arc.c:1027
 msgid "error: the ARC4 architecture is no longer supported"
 msgstr "Erro: a arquitectura ARC4 jÃ¡ nÃ£o Ã© suportada."
 
-#: elf32-arc.c:1018
+#: elf32-arc.c:1033
 msgid "warning: unset or old architecture flags; use default machine"
 msgstr "Aviso: bandeiras nÃ£o definidas ou de arquitectura antiga. Use a mÃ¡quina predefinida."
 
-#: elf32-arc.c:1151
+#: elf32-arc.c:1159
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): relocalizaÃ§Ã£o CMEM para \"%s\" Ã© invÃ¡lida, 16 MSB deveria ser %#x (o valor Ã© %#<PRIx64>)"
 
-#: elf32-arc.c:1162
+#: elf32-arc.c:1170
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s+%#<PRIx64>' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): relocalizaÃ§Ã£o CMEM para \"%s+%#<PRIx64>\" Ã© invÃ¡lida, 16 MSB deveria ser %#x (o valor Ã© %#<PRIx64>)"
 
-#: elf32-arc.c:1876
+#: elf32-arc.c:1885
 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
 msgstr "RelocalizaÃ§Ãµes GOT e PLT nÃ£o podem ser reparadas com um linker nÃ£o dinÃ¢mico."
 
-#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470
+#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475
 #, c-format
 msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
 msgstr "%pB(%pA): aviso: acesso nÃ£o alinhado ao sÃ­mbolo \"%s\" na Ã¡rea de dados pequenos"
 
-#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475
+#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480
 #, c-format
 msgid "%pB(%pA): internal error: out of range error"
 msgstr "%pB(%pA): erro interno: erro fora do intervalo"
 
-#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480
+#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485
 #, c-format
 msgid "%pB(%pA): internal error: unsupported relocation error"
 msgstr "%pB(%pA): erro interno: erro relocalizaÃ§Ã£o nÃ£o suportada"
 
-#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485
+#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490
 #, c-format
 msgid "%pB(%pA): internal error: dangerous relocation"
 msgstr "%pB(%pA): erro interno: relocalizaÃ§Ã£o perigosa"
 
-#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490
+#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495
 #, c-format
 msgid "%pB(%pA): internal error: unknown error"
 msgstr "%pB(%pA): erro interno: erro desconhecido"
 
-#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7462
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:497
+#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15502 elf32-metag.c:2251
+#: elf32-nds32.c:5494 elfnn-aarch64.c:7741 elfnn-riscv.c:617
 #, c-format
 msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: relocalizaÃ§Ã£o %s contra \"%s\" nÃ£o pode ser usada a fazer um objecto partilhado; recompile com -fPIC"
 
-#: elf32-arc.c:2949
+#: elf32-arc.c:2910
 #, c-format
 msgid "%pB: unknown mandatory ARC object attribute %d"
 msgstr "%pB: atributo de objecto ARC %d obrigatÃ³rio desconhecido."
 
-#: elf32-arc.c:2957
+#: elf32-arc.c:2918
 #, c-format
 msgid "warning: %pB: unknown ARC object attribute %d"
 msgstr "Aviso: %pB: atributo de objecto ARC %d desconhecido."
 
-#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409
+#: elf32-arm.c:4333 elf32-arm.c:4367 elf32-arm.c:4386 elf32-arm.c:4438
 #, c-format
 msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction"
 msgstr "%pB(%pA): aviso: o uso de folhas de ramos longos na secÃ§Ã£o com atributo de secÃ§Ã£o SHF_ARM_PURECODE sÃ³ Ã© suportado para alvos M-profile que implementem a instruÃ§Ã£o movw."
 
-#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183
+#: elf32-arm.c:4398 elf32-arm.c:4452 elf32-arm.c:9141 elf32-arm.c:9231
 #, c-format
 msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
 msgstr "%pB(%s): aviso: interworking nÃ£o activo; primeira ocorrÃªncia: %pB: chamada %s a %s"
 
-#: elf32-arm.c:4697
+#: elf32-arm.c:4578
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr "ERRO: fictÃ­cio CMSE (secÃ§Ã£o %s) muito longe (%#<PRIx64>) do destino (%#<PRIx64>)"
+
+#: elf32-arm.c:4747
 #, c-format
 msgid "no address assigned to the veneers output section %s"
 msgstr "Sem endereÃ§o atribuÃ­do Ã  secÃ§Ã£o de saÃ­da das folhas %s"
 
-#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579
-#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3098
+#: elf32-arm.c:4822 elf32-arm.c:6968 elf32-csky.c:3400 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3827
+#: elf64-ppc.c:13638 elfnn-aarch64.c:3187
 #, c-format
 msgid "%pB: cannot create stub entry %s"
 msgstr "%pB: impossÃ­vel criar entrada fictÃ­cia %s"
 
-#: elf32-arm.c:5957
+#: elf32-arm.c:5043 elf32-csky.c:3742 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11473
+#: elfnn-aarch64.c:3256
+msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: impossÃ­vel atribuir \"%pA\" a uma secÃ§Ã£o de saÃ­da. Repita sem --enable-non-contiguous-regions.\n"
+
+#: elf32-arm.c:6011
 #, c-format
 msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
 msgstr "%pB: sÃ­mbolo especial \"%s\" sÃ³ Ã© permitido para arquitecturas ARMv8-M ou posteriores."
 
-#: elf32-arm.c:5966
+#: elf32-arm.c:6020
 #, c-format
 msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
 msgstr "%pB: sÃ³mbolo especial invÃ¡lido \"%s\"; tem de ser um sÃ­mbolo de funÃ§Ã£o global ou fraco."
 
-#: elf32-arm.c:6005
+#: elf32-arm.c:6059
 #, c-format
 msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
 msgstr "%pB: sÃ­mbolo padrÃ£o %s invÃ¡lido; tem de ser um sÃ­mbolo de funÃ§Ã£o global ou fraco."
 
-#: elf32-arm.c:6011
+#: elf32-arm.c:6065
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr "%pB: sÃ­mbolo standard \"%s\" ausente."
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6077
 #, c-format
 msgid "%pB: `%s' and its special symbol are in different sections"
 msgstr "%pB: \"%s\" e o seu sÃ­mbolo especial estÃ£o em secÃ§Ãµes diferentes."
 
-#: elf32-arm.c:6035
+#: elf32-arm.c:6089
 #, c-format
 msgid "%pB: entry function `%s' not output"
 msgstr "%pB: funÃ§Ã£o de entrada \"%s\" nÃ£o saÃ­da."
 
-#: elf32-arm.c:6042
+#: elf32-arm.c:6096
 #, c-format
 msgid "%pB: entry function `%s' is empty"
 msgstr "%pB: funÃ§Ã£o de entrada \"%s\" estÃ¡ vazia."
 
-#: elf32-arm.c:6171
+#: elf32-arm.c:6225
 #, c-format
 msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
 msgstr "%pB: --in-implib sÃ³ Ã© suportado para bibliotecas importadas Secure Gateway."
 
-#: elf32-arm.c:6217
+#: elf32-arm.c:6274
 #, c-format
 msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
 msgstr "%pB: entrada de biblioteca importada %s invÃ¡lida; o sÃ­mbolo deve ser absoluto, global e referir-se a funÃ§Ãµes Thumb."
 
-#: elf32-arm.c:6239
+#: elf32-arm.c:6296
 #, c-format
 msgid "entry function `%s' disappeared from secure code"
 msgstr "FunÃ§Ã£o de entrada \"%s\" desapareceu do cÃ³digo de seguranÃ§a."
 
-#: elf32-arm.c:6263
+#: elf32-arm.c:6320
 #, c-format
 msgid "`%s' refers to a non entry function"
 msgstr "\"%s\" refere-se a funÃ§Ã£o nÃ£o de entrada."
 
-#: elf32-arm.c:6278
+#: elf32-arm.c:6335
 #, c-format
 msgid "%pB: visibility of symbol `%s' has changed"
 msgstr "%pB: a visibilidade do sÃ­mbolo \"%s\" mudou."
 
-#: elf32-arm.c:6287
+#: elf32-arm.c:6344
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr "%pB: tamanho incorrecto do sÃ­mbolo \"%s\"."
 
-#: elf32-arm.c:6306
+#: elf32-arm.c:6363
 #, c-format
 msgid "offset of veneer for entry function `%s' not a multiple of its size"
 msgstr "Desvio \"%s\" da folha para funÃ§Ã£o de entrada nÃ£o Ã© mÃºltiplo do seu tamanho."
 
-#: elf32-arm.c:6326
+#: elf32-arm.c:6383
 msgid "new entry function(s) introduced but no output import library specified:"
 msgstr "introduzidas novas funÃ§Ãµes de entrada mas nÃ£o especificou biblioteca importada de saÃ­da:"
 
-#: elf32-arm.c:6334
+#: elf32-arm.c:6391
 #, c-format
 msgid "start address of `%s' is different from previous link"
 msgstr "EndereÃ§o inicial de \"%s\" Ã© diferente da ligaÃ§Ã£o prÃ©via."
 
-#: elf32-arm.c:7042 elf32-arm.c:7078
+#: elf32-arm.c:7101 elf32-arm.c:7136
 #, c-format
 msgid "unable to find %s glue '%s' for '%s'"
 msgstr "impossÃ­vel encontrar cola %s \"%s\" para \"%s\""
 
-#: elf32-arm.c:7793
+#: elf32-arm.c:7847
 #, c-format
 msgid "%pB: BE8 images only valid in big-endian mode"
 msgstr "%pB: imagens BE8 sÃ³ sÃ£o vÃ¡lidas em modo big-endian."
 
 #. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:8024
+#: elf32-arm.c:8074
 #, c-format
 msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
 msgstr "%pB: aviso: a soluÃ§Ã£o de errata VFP11 seleccionada nÃ£o Ã© necessÃ¡ria para arquitectura de destino"
 
-#: elf32-arm.c:8051
+#: elf32-arm.c:8101
 #, c-format
 msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
 msgstr "%pB: aviso: a soluÃ§Ã£o de errata STM32L4XX seleccionada nÃ£o Ã© necessÃ¡ria para arquitectura de destino"
 
-#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693
+#: elf32-arm.c:8637 elf32-arm.c:8657 elf32-arm.c:8724 elf32-arm.c:8743
 #, c-format
 msgid "%pB: unable to find %s veneer `%s'"
 msgstr "%pB: impossÃ­vel encontrar a folha %s \"%s\""
 
-#: elf32-arm.c:8900
+#: elf32-arm.c:8950
 #, c-format
 msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
 msgstr ""
 "%pB(%pA+%#x): erro: detectada mÃºltipla carga em bloco de instruÃ§Ã£o IT nÃ£o-Ãºltimo: impossÃ­vel gerar folha STM32L4XX.\n"
 "Use a opÃ§Ã£o gcc -mrestrict-it para gerar sÃ³ uma instruÃ§Ã£o por bloco IT."
 
-#: elf32-arm.c:9000
+#: elf32-arm.c:9048
 #, c-format
 msgid "invalid TARGET2 relocation type '%s'"
 msgstr "Tipo de relocalizaÃ§Ã£o \"%s\" TARGET2 invÃ¡lido."
 
 #. FIXME: We ought to be able to generate thumb-1 PLT
 #. instructions...
-#: elf32-arm.c:9802
+#: elf32-arm.c:9818
 #, c-format
 msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
 msgstr "%pB: aviso: geraÃ§Ã£o PLT modo thumb-1 nÃ£o Ã© actualmente suportada"
 
-#: elf32-arm.c:10106 elf32-arm.c:10148
+#: elf32-arm.c:10127 elf32-arm.c:10169
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o %s \"%#lx\" inesperada em trampolim TLS"
 
-#: elf32-arm.c:10492
+#: elf32-arm.c:10519
 msgid "shared object"
 msgstr "objecto partilhado"
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10522
 msgid "PIE executable"
 msgstr "ExecutÃ¡vel PIE"
 
-#: elf32-arm.c:10498
+#: elf32-arm.c:10525
 #, c-format
 msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
 msgstr "%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo \"%s\" externo ou indefinido nÃ£o pode ser usada ao fazer %s; recompile com -fPIC"
 
-#: elf32-arm.c:10635 elf32-arm.c:11062
+#: elf32-arm.c:10627 elf32-arm.c:11044
 #, c-format
 msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
 msgstr "%pB: aviso: instruÃ§Ã£o %s BLX destina-se a funÃ§Ã£o %s \"%s\"."
 
-#: elf32-arm.c:11975 elf32-arm.c:12001
+#: elf32-arm.c:11678
+#, c-format
+msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
+msgstr "%pB: esperado Ã­ndice de sÃ­mbolo no intervalo 0..%lu, encontrado sÃ­mbolo local com Ã­ndice %lu"
+
+#: elf32-arm.c:11953 elf32-arm.c:11979
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o %s \"%#lx\" inesperada referenciada por TLS_GOTDESC"
 
-#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919
-#: elf32-nios2.c:4366
+#: elf32-arm.c:12025 elf32-csky.c:4970 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-nios2.c:4382
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
 msgstr "%pB(%pA+%#<PRIx64>): relocalizaÃ§Ã£o %s nÃ£o permitida em objecto partilhado"
 
-#: elf32-arm.c:12261
+#: elf32-arm.c:12239
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
 msgstr "%pB(%pA+%#<PRIx64>): sÃ³ sÃ£o permitidas instruÃ§Ãµes ADD ou SUB para relocalizaÃ§Ãµes de grupo ALU"
 
-#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572
+#: elf32-arm.c:12280 elf32-arm.c:12372 elf32-arm.c:12460 elf32-arm.c:12550
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
 msgstr "%pB(%pA+%#<PRIx64>): transporte ao dividir %#<PRIx64> para relocalizaÃ§Ã£o de grupo %s"
 
-#: elf32-arm.c:13078 elf32-sh.c:3689
+#: elf32-arm.c:12608 elf32-arm.c:12767
+msgid "local symbol index too big"
+msgstr "Ã­ndice de sÃ­mbolo local demasiado grande"
+
+#: elf32-arm.c:12618 elf32-arm.c:12652
+msgid "no dynamic index information available"
+msgstr "sem informaÃ§Ã£o de Ã­ndice"
+
+#: elf32-arm.c:12660
+msgid "invalid dynamic index"
+msgstr "Ã­ndice dinÃ¢mico invÃ¡lido"
+
+#: elf32-arm.c:12777
+msgid "dynamic index information not available"
+msgstr "sem informaÃ§Ã£o de Ã­ndice"
+
+#: elf32-arm.c:13208 elf32-sh.c:3565
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
 msgstr "%pB(%pA+%#<PRIx64>): relocalizaÃ§Ã£o %s contra secÃ§Ã£o SEC_MERGE"
 
-#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6534
+#: elf32-arm.c:13321 elf32-m68k.c:3966 elf32-xtensa.c:2762
+#: elfnn-aarch64.c:6831
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
 msgstr "%pB(%pA+%#<PRIx64>): %s usado com sÃ­mbolo TLS %s"
 
-#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6536
+#: elf32-arm.c:13323 elf32-m68k.c:3968 elf32-xtensa.c:2764
+#: elfnn-aarch64.c:6833
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
 msgstr "%pB(%pA+%#<PRIx64>): %s usado com sÃ­mbolo nÃ£o-TLS %s"
 
-#: elf32-arm.c:13276 elf32-tic6x.c:2708
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6871
+#: elf32-arm.c:13406 elf32-tic6x.c:2649 elfnn-aarch64.c:7168
 msgid "out of range"
 msgstr "fora do intervalo"
 
-#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6875
+#: elf32-arm.c:13410 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7172
 msgid "unsupported relocation"
 msgstr "relocalizaÃ§Ã£o nÃ£o suportada"
 
-#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6883
+#: elf32-arm.c:13418 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7180
 msgid "unknown error"
 msgstr "erro desconhecido"
 
-#: elf32-arm.c:13764
+#: elf32-arm.c:13898
 #, c-format
 msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
 msgstr "Aviso: bandeira %pB de interworking nÃ£o definida porque jÃ¡ foi especificada como nÃ£o-interworking"
 
-#: elf32-arm.c:13768
+#: elf32-arm.c:13902
 #, c-format
 msgid "warning: clearing the interworking flag of %pB due to outside request"
 msgstr "Aviso: a limpar bandeira %pB de interworking devido a pedido externo"
 
-#: elf32-arm.c:13813
+#: elf32-arm.c:13947
 #, c-format
 msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
 msgstr "Aviso: a limpar bandeira %pB de interworking devido a cÃ³digo nÃ£o interworking em %pB que lhe foi ligado"
 
-#: elf32-arm.c:13900
+#: elf32-arm.c:14034
 #, c-format
 msgid "%pB: unknown mandatory EABI object attribute %d"
 msgstr "Aviso: %pB: atributo de objecto EABI %d obrigatÃ³rio desconhecido"
 
-#: elf32-arm.c:13908
+#: elf32-arm.c:14042
 #, c-format
 msgid "warning: %pB: unknown EABI object attribute %d"
 msgstr "Aviso: %pB: atributo de objecto EABI %d desconhecido"
 
-#: elf32-arm.c:14175
+#: elf32-arm.c:14342
 #, c-format
 msgid "error: %pB: unknown CPU architecture"
 msgstr "erro: %pB: arquitectura CPU desconhecida"
 
-#: elf32-arm.c:14213 elf32-nios2.c:2946
+#: elf32-arm.c:14380 elf32-nios2.c:2950
 #, c-format
 msgid "error: %pB: conflicting CPU architectures %d/%d"
 msgstr "erro: %pB: arquitecturas CPU %d/%d em conflito"
 
-#: elf32-arm.c:14310
+#: elf32-arm.c:14477
 #, c-format
 msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr "Erro: %pB tem ambos os atributos Tag_MPextension_use actual e legado"
 
-#: elf32-arm.c:14339
+#: elf32-arm.c:14506
 #, c-format
 msgid "error: %pB uses VFP register arguments, %pB does not"
 msgstr "erro: %pB usa argumentos de registo VFP, %pB nÃ£o"
 
-#: elf32-arm.c:14497
+#: elf32-arm.c:14665
 #, c-format
 msgid "error: %pB: unable to merge virtualization attributes with %pB"
 msgstr "erro: %pB: impossÃ­vel unir atributos de virtualizaÃ§Ã£o com %pB"
 
-#: elf32-arm.c:14523
+#: elf32-arm.c:14691
 #, c-format
 msgid "error: %pB: conflicting architecture profiles %c/%c"
 msgstr "erro: %pB: perfis de arquitectura %c/%c em conflito"
 
-#: elf32-arm.c:14662
+#: elf32-arm.c:14830
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr "Aviso: %pB: configuraÃ§Ã£o de plataforma em conflito"
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14839
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr "erro: %pB: uso de R9 em conflito"
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14851
 #, c-format
 msgid "error: %pB: SB relative addressing conflicts with use of R9"
 msgstr "erro: %pB: conflitos de endereÃ§amento relativo SB com o uso de R9"
 
-#: elf32-arm.c:14696
+#: elf32-arm.c:14864
 #, c-format
 msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
 msgstr "aviso: %pB usa %u-byte wchar_t mas a saÃ­da deve usar %u-byte wchar_t; uso de valores wchar_t atravÃ©s de vÃ¡rios objectos pode falhar"
 
-#: elf32-arm.c:14727
+#: elf32-arm.c:14895
 #, c-format
 msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
 msgstr "aviso: %pB usa %s enums mas a saÃ­da deve usar %s enums; uso de valores enum atravÃ©s de vÃ¡rios objectos pode falhar"
 
-#: elf32-arm.c:14739
+#: elf32-arm.c:14907
 #, c-format
 msgid "error: %pB uses iWMMXt register arguments, %pB does not"
 msgstr "erro: %pB usa argumentos de registo iWMMXt, %pB nÃ£o"
 
-#: elf32-arm.c:14756
+#: elf32-arm.c:14924
 #, c-format
 msgid "error: fp16 format mismatch between %pB and %pB"
 msgstr "erro: formato fp16 enganado entre %pB e %pB"
 
-#: elf32-arm.c:14792
+#: elf32-arm.c:14960
 #, c-format
 msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr "%pB tem ambos os atributos Tag_MPextension_use actual e legado"
 
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410
-#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537
-#: elf32-xgate.c:494 elfxx-mips.c:16037
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7037
-#, c-format
-msgid "private flags = %lx:"
-msgstr "bandeiras provadas = %lx:"
-
-#: elf32-arm.c:14888
+#: elf32-arm.c:15056
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [interworking activo]"
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15064
 #, c-format
 msgid " [VFP float format]"
 msgstr " [formato flutuante VFP]"
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15066
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [formato flutuante Maverick]"
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15068
 #, c-format
 msgid " [FPA float format]"
 msgstr " [formato flutuante FPA]"
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15071
 #, c-format
 msgid " [floats passed in float registers]"
 msgstr " [flutuantes passados em registos flutuantes]"
 
-#: elf32-arm.c:14906 elf32-arm.c:14992
+#: elf32-arm.c:15074 elf32-arm.c:15160
 #, c-format
 msgid " [position independent]"
 msgstr " [posiÃ§Ã£o independente]"
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15077
 #, c-format
 msgid " [new ABI]"
 msgstr " [novo ABI]"
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15080
 #, c-format
 msgid " [old ABI]"
 msgstr " [ABI antigo]"
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15083
 #, c-format
 msgid " [software FP]"
 msgstr " [software FP]"
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15092
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Version1 EABI]"
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15095 elf32-arm.c:15106
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [tabela de sÃ­mbolo ordenada]"
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15097 elf32-arm.c:15108
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [tabela de sÃ­mbolo desordenada]"
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15103
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Version2 EABI]"
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15111
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [sÃ­mbolos dinÃ¢micos usam Ã­ndice de segmento]"
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15114
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [sÃ­mbolos de mapeamento precedem outros]"
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15121
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Version3 EABI]"
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15125
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Version4 EABI]"
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15129
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Version5 EABI]"
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15132
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [soft-float ABI]"
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15135
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [hard-float ABI]"
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15141
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15144
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15150
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <versÃ£o EABI nÃ£o reconhecida>"
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15157
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [executÃ¡vel relocalizÃ¡vel]"
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15163
 #, c-format
 msgid " [FDPIC ABI supplement]"
 msgstr " [suplemento FDPIC ABI]"
 
-#: elf32-arm.c:15000
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7040
+#: elf32-arm.c:15168 elfnn-aarch64.c:7337
 #, c-format
-msgid "<Unrecognised flag bits set>"
-msgstr "<bits de bandeira definidos nÃ£o reconhecidos>"
+msgid " <Unrecognised flag bits set>"
+msgstr " <bits de bandeira definidos nÃ£o reconhecidos>"
 
-#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783
-#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882
-#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7329
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:539
+#: elf32-arm.c:15285 elf32-arm.c:15419 elf32-i386.c:1524 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1094
+#: elf64-s390.c:845 elf64-x86-64.c:1900 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfnn-aarch64.c:7608 elfnn-riscv.c:660
 #, c-format
 msgid "%pB: bad symbol index: %d"
 msgstr "%pB: mau Ã­ndice de sÃ­mbolo: %d"
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15675
 #, c-format
 msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
 msgstr "FDPIC ainda nÃ£o suporta que a relocalizaÃ§Ã£o %s se torne dinÃ¢mica para executÃ¡vel"
 
-#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998
-#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858
-#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252
-#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435
-#: elfxx-tilegx.c:2491 elfxx-x86.c:571
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:8677
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:1142
-#, c-format
-msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
-msgstr "%pB: relocalizaÃ§Ã£o dinÃ¢mica contra \"%pT\" em secÃ§Ã£o sÃ³ de leitura \"%pA\"\n"
-
-#: elf32-arm.c:16854
+#: elf32-arm.c:16936
 #, c-format
 msgid "errors encountered processing file %pB"
 msgstr "Encontrados erros ao processar o ficheiro %pB"
 
-#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603
+#: elf32-arm.c:17309 elflink.c:12991 elflink.c:13038
 #, c-format
 msgid "could not find section %s"
 msgstr "impossÃ­vel encontrar a secÃ§Ã£o %s"
 
-#: elf32-arm.c:18512
+#: elf32-arm.c:18230
+#, c-format
+msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
+msgstr "%pB: nÃºmero de sÃ­mbolos no ficheiro de entrada aumentou de %lu para %u\n"
+
+#: elf32-arm.c:18494
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
 msgstr "%pB: erro: errata Cortex-A8 fictÃ­cia estÃ¡ alocada a localizaÃ§Ã£o nÃ£o-segura"
 
 #. There's not much we can do apart from complain if this
 #. happens.
-#: elf32-arm.c:18539
+#: elf32-arm.c:18521
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
 msgstr "%pB: erro: errata Cortex-A8 fictÃ­cia fora do intervalo (ficheiro de entrada muito grande)"
 
-#: elf32-arm.c:19366 elf32-arm.c:19388
+#: elf32-arm.c:19348 elf32-arm.c:19370
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr "%pB: erro: folha VFP11 fora do intervalo"
 
-#: elf32-arm.c:19439
+#: elf32-arm.c:19421
 #, c-format
 msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
 msgstr "%pB(%#<PRIx64>): erro: impossÃ­vel criar folha STM32L4XX. Sai fora do intervalo por %<PRId64> bytes. ImpossÃ­vel codificar a instruÃ§Ã£o do ramo. "
 
-#: elf32-arm.c:19478
+#: elf32-arm.c:19460
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr "%pB: erro: impossÃ­vel criar folha STM32L4XX."
 
-#: elf32-arm.c:20567
+#: elf32-arm.c:20544
 #, c-format
 msgid "error: %pB is already in final BE8 format"
 msgstr "erro: %pB jÃ¡ estÃ¡ no formato final BE8"
 
-#: elf32-arm.c:20643
+#: elf32-arm.c:20620
 #, c-format
 msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
 msgstr "erro: objecto fonte %pB tem versÃ£o EABI %d, mas o alvo %pB tem versÃ£o EABI %d"
 
-#: elf32-arm.c:20658
+#: elf32-arm.c:20635
 #, c-format
 msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
 msgstr "erro: %pB estÃ¡ compilado para APCS-%d, enquanto o alvo %pB usa APCS-%d"
 
-#: elf32-arm.c:20668
+#: elf32-arm.c:20645
 #, c-format
 msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
 msgstr "erro: %pB passa flutuantes em registos flutuantes, enquanto %pB os passa em registos inteiros"
 
-#: elf32-arm.c:20672
+#: elf32-arm.c:20649
 #, c-format
 msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
 msgstr "erro: %pB passa flutuantes em registos inteiros, enquanto %pB os passa em registos flutuantes"
 
-#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696
+#: elf32-arm.c:20659 elf32-arm.c:20663 elf32-arm.c:20673
 #, c-format
 msgid "error: %pB uses %s instructions, whereas %pB does not"
 msgstr "erro: %pB usa instruÃ§Ãµes%s, enquanto %pB nÃ£o"
 
-#: elf32-arm.c:20700
+#: elf32-arm.c:20677
 #, c-format
 msgid "error: %pB does not use %s instructions, whereas %pB does"
 msgstr "erro: %pB nÃ£o usa instruÃ§Ãµes %s, enquanto %pB sim"
 
-#: elf32-arm.c:20719
+#: elf32-arm.c:20696
 #, c-format
 msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
 msgstr "erro: %pB usa programa FP, enquanto %pB usa equipamento FP"
 
-#: elf32-arm.c:20723
+#: elf32-arm.c:20700
 #, c-format
 msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
 msgstr "erro: %pB usa equipamento FP, enquanto %pB usa programa FP"
 
-#: elf32-arm.c:20737
+#: elf32-arm.c:20714
 #, c-format
 msgid "warning: %pB supports interworking, whereas %pB does not"
 msgstr "Aviso: %pB suporta interworking, enquanto %pB nÃ£o"
 
-#: elf32-arm.c:20743
+#: elf32-arm.c:20720
 #, c-format
 msgid "warning: %pB does not support interworking, whereas %pB does"
 msgstr "Aviso: %pB nÃ£o suporta interworking, enquanto %pB sim"
 
-#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577
-#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493
-#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998
-#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767
-#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689
-#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878
+#: elf32-avr.c:1516 elf32-bfin.c:3139 elf32-cris.c:2042 elf32-epiphany.c:573
+#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:501 elf32-ip2k.c:1488
+#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992
+#: elf32-moxie.c:296 elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1869
+#: elf32-tilepro.c:3380 elf32-v850.c:2302 elf32-visium.c:688
+#: elf32-xstormy16.c:938 elf64-bpf.c:561 elf64-mmix.c:1549 elfxx-tilegx.c:3750
 msgid "internal error: dangerous relocation"
 msgstr "erro interno: relocalizaÃ§Ã£o perigosa"
 
-#: elf32-avr.c:3327
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126
+#: elf32-avr.c:3324 elfnn-aarch64.c:3218
 #, c-format
 msgid "cannot create stub entry %s"
 msgstr "impossÃ­vel criar entrada fictÃ­cia %s"
 
-#: elf32-bfin.c:106 elf32-bfin.c:362
+#: elf32-bfin.c:107 elf32-bfin.c:363
 msgid "relocation should be even number"
 msgstr "a relocalizaÃ§Ã£o deve ser nÃºmero par"
 
-#: elf32-bfin.c:1585
+#: elf32-bfin.c:1587
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
 msgstr "%pB(%pA+%#<PRIx64>): relocalizaÃ§Ã£o insolÃºvel contra sÃ­mbolo \"%s\""
 
-#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269
-#: elf64-s390.c:3219 elf64-x86-64.c:3896
+#: elf32-bfin.c:1619 elf32-i386.c:3466 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4137
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
 msgstr "%pB(%pA+%#<PRIx64>): reloc contra \"%s\": erro %d"
 
-#: elf32-bfin.c:2638
+#: elf32-bfin.c:2645
 #, c-format
 msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
 msgstr "%pB: relocalizaÃ§Ã£o em \"%pA+%#<PRIx64>\" referencia o sÃ­mbolo \"%s\" com adenda nÃ£o-zero"
 
-#: elf32-bfin.c:2655
+#: elf32-bfin.c:2662
 msgid "relocation references symbol not defined in the module"
 msgstr "relocalizaÃ§Ã£o referencia sÃ­mbolo ainda nÃ£o definido no mÃ³dulo"
 
-#: elf32-bfin.c:2752
+#: elf32-bfin.c:2760
 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC referencia sÃ­mbolo dinÃ¢mico com adenda nÃ£o-zero"
 
-#: elf32-bfin.c:2793 elf32-bfin.c:2916
+#: elf32-bfin.c:2800 elf32-bfin.c:2921
 msgid "cannot emit fixups in read-only section"
 msgstr "impossÃ­vel emitir fixups em secÃ§Ã£o sÃ³ de leitura"
 
-#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511
+#: elf32-bfin.c:2830 elf32-bfin.c:2958 elf32-lm32.c:1007 elf32-sh.c:4383
 msgid "cannot emit dynamic relocations in read-only section"
 msgstr "impossÃ­vel emitir relocalizaÃ§Ãµes dinÃ¢micas em secÃ§Ã£o sÃ³ de leitura"
 
-#: elf32-bfin.c:2874
+#: elf32-bfin.c:2880
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC_VALUE referencia sÃ­mbolo dinÃ¢mico com adenda nÃ£o-zero"
 
-#: elf32-bfin.c:3039
+#: elf32-bfin.c:3043
 msgid "relocations between different segments are not supported"
 msgstr "relocalizaÃ§Ãµes entre diferentes segmentos nÃ£o sÃ£o suportadas"
 
-#: elf32-bfin.c:3040
+#: elf32-bfin.c:3044
 msgid "warning: relocation references a different segment"
 msgstr "aviso: a relocalizaÃ§Ã£o referencia um segmento diferente"
 
-#: elf32-bfin.c:4787 elf32-frv.c:6603
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-bfin.c:4729 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3996 elf32-score7.c:3801 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16254
+#, c-format
+msgid "private flags = %lx:"
+msgstr "bandeiras provadas = %lx:"
+
+#: elf32-bfin.c:4780 elf32-frv.c:6585
 #, c-format
 msgid "%pB: cannot link non-fdpic object file into fdpic executable"
 msgstr "%pB: impossÃ­vel ligar ficheiro objecto nÃ£o-fdpic a executÃ¡vel fdpic"
 
-#: elf32-bfin.c:4791 elf32-frv.c:6607
+#: elf32-bfin.c:4784 elf32-frv.c:6589
 #, c-format
 msgid "%pB: cannot link fdpic object file into non-fdpic executable"
 msgstr "%pB: impossÃ­vel ligar ficheiro objecto fdpic a executÃ¡vel nÃ£o-fdpic"
 
-#: elf32-bfin.c:4941
+#: elf32-bfin.c:4921
 #, c-format
 msgid "*** check this relocation %s"
 msgstr "*** verificar esta relocalizaÃ§Ã£o %s"
 
-#: elf32-bfin.c:5057
+#: elf32-bfin.c:5037
 msgid "the bfin target does not currently support the generation of copy relocations"
 msgstr "o alvo bfin actualmente nÃ£o suporta a geraÃ§Ã£o de relocalizaÃ§Ãµes de cÃ³pia"
 
-#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390
+#: elf32-bfin.c:5331 elf32-cr16.c:2713 elf32-m68k.c:4420
 msgid "unsupported relocation type"
 msgstr "relocalizaÃ§Ã£o nÃ£o suportada"
 
-#: elf32-cris.c:1119
+#: elf32-cris.c:1120
 #, c-format
 msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'"
 msgstr "%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o insolÃºvel %s contra sÃ­mbolo \"%s\""
 
-#: elf32-cris.c:1184
+#: elf32-cris.c:1185
 #, c-format
 msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'"
 msgstr "%pB, secÃ§Ã£o %pA: sem PLT ou GOT para relocalizaÃ§Ã£o %s contra sÃ­mbolo \"%s\""
 
-#: elf32-cris.c:1187
+#: elf32-cris.c:1188
 #, c-format
 msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'"
 msgstr "%pB, secÃ§Ã£o %pA: sem PLT para relocalizaÃ§Ã£o %s contra sÃ­mbolo \"%s\""
 
-#: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674
-#: elf32-cris.c:1827 elf32-tic6x.c:2619
+#: elf32-cris.c:1194 elf32-cris.c:1327 elf32-cris.c:1592 elf32-cris.c:1675
+#: elf32-cris.c:1828 elf32-tic6x.c:2560
 msgid "[whose name is lost]"
 msgstr "8cujo nome estÃ¡ perdido]"
 
-#: elf32-cris.c:1311 elf32-tic6x.c:2603
+#: elf32-cris.c:1312 elf32-tic6x.c:2544
 #, c-format
 msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against local symbol"
 msgstr "%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s com adenda nÃ£o-zero %<PRId64> contra sÃ­mbolo local"
 
-#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612
+#: elf32-cris.c:1321 elf32-cris.c:1669 elf32-cris.c:1822 elf32-tic6x.c:2553
 #, c-format
 msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against symbol `%s'"
 msgstr "%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s com adenda nÃ£o-zero %<PRId64> contra sÃ­mbolo \"%s\""
 
-#: elf32-cris.c:1347
+#: elf32-cris.c:1348
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'"
 msgstr "%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s nÃ£o Ã© permitida para sÃ­mbolo global: \"%s\""
 
-#: elf32-cris.c:1364
+#: elf32-cris.c:1365
 #, c-format
 msgid "%pB, section %pA: relocation %s with no GOT created"
 msgstr "%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s sem GOT criado"
 
 #. We shouldn't get here for GCC-emitted code.
-#: elf32-cris.c:1581
+#: elf32-cris.c:1582
 #, c-format
 msgid "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
 msgstr "%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s tem referÃªncia nÃ£o definida a \"%s\", talvez uma declaraÃ§Ã£o misturada?"
 
-#: elf32-cris.c:1584
+#: elf32-cris.c:1585
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?"
 msgstr "%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s nÃ£o Ã© permitida para \"%s\", um sÃ­mbolo global com visibilidade predefinida, talvez uma declaraÃ§Ã£o misturada?"
 
-#: elf32-cris.c:1955
+#: elf32-cris.c:1956
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
 msgstr "%pB, secÃ§Ã£o %pA: relocalizaÃ§Ã£o %s nÃ£o Ã© permitida para \"%s\", que estÃ¡ definido fora do programa, talvez uma declaraÃ§Ã£o misturada?"
 
-#: elf32-cris.c:2008
+#: elf32-cris.c:2009
 msgid "(too many global variables for -fpic: recompile with -fPIC)"
 msgstr "(muitas variÃ¡veis globais para -fpic: recompile com -fPIC)"
 
-#: elf32-cris.c:2015
+#: elf32-cris.c:2016
 msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)"
 msgstr "(dados thread-local muito grandes para -fpic ou -msmall-tls: recompile com -fPIC ou -mno-small-tls"
 
-#: elf32-cris.c:3050
+#: elf32-cris.c:3051
 #, c-format
 msgid "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation"
 msgstr ""
 "%pB, secÃ§Ã£o %pA:\n"
 "  objecto compatÃ­vel v10/v32 nÃ£o deve conter uma relocalizaÃ§Ã£o PIC"
 
-#: elf32-cris.c:3104
+#: elf32-cris.c:3105
 #, c-format
 msgid ""
 "%pB, section %pA:\n"
@@ -2112,80 +2290,106 @@ msgstr ""
 "%pB, secÃ§Ã£o %pA:\n"
 "  relocalizaÃ§Ã£o %s invÃ¡lida em objecto partilhado; tipicamente uma mistura de opÃ§Ãµes, recompile com -fPIC"
 
-#: elf32-cris.c:3322
+#: elf32-cris.c:3323
 #, c-format
 msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC"
 msgstr ""
 "%pB, secÃ§Ã£o %pA:\n"
 "  relocalizaÃ§Ã£o %s nÃ£o deve ser usada em objecto partilhado; recompile com -fPIC"
 
-#: elf32-cris.c:3747
+#: elf32-cris.c:3701
 #, c-format
 msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC"
 msgstr ""
 "%pB, secÃ§Ã£o %pA, para sÃ­mbolo \"%s\":\n"
 "  relocalizaÃ§Ã£o %s nÃ£o deve ser usada em objecto partilhado; recompile com -fPIC"
 
-#: elf32-cris.c:3860
+#: elf32-cris.c:3813
 msgid "unexpected machine number"
 msgstr "NÃºmero de mÃ¡quina inesperado"
 
-#: elf32-cris.c:3911
+#: elf32-cris.c:3865
 #, c-format
 msgid " [symbols have a _ prefix]"
 msgstr " [sÃ­mbolos tÃªm um prefixo _]"
 
-#: elf32-cris.c:3914
+#: elf32-cris.c:3868
 #, c-format
 msgid " [v10 and v32]"
 msgstr " [v10 e v32]"
 
-#: elf32-cris.c:3917
+#: elf32-cris.c:3871
 #, c-format
 msgid " [v32]"
 msgstr " [v32]"
 
-#: elf32-cris.c:3961
+#: elf32-cris.c:3915
 #, c-format
 msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
 msgstr "%pB: usa sÃ­mbolos prefixados com _, mas o ficheiro serÃ¡ escrito com sÃ­mbolos sem prefixo"
 
-#: elf32-cris.c:3962
+#: elf32-cris.c:3916
 #, c-format
 msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
 msgstr "%pB: usa sÃ­mbolos sem prefixo, mas o ficheiro serÃ¡ escrito com sÃ­mbolos prefixados com _"
 
-#: elf32-cris.c:3981
+#: elf32-cris.c:3935
 #, c-format
 msgid "%pB contains CRIS v32 code, incompatible with previous objects"
 msgstr "%pB contÃ©m cÃ³digo CRIS v32, incompatÃ­vel com os objectos anteriores"
 
-#: elf32-cris.c:3983
+#: elf32-cris.c:3937
 #, c-format
 msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
 msgstr "%pB contÃ©m cÃ³digo nÃ£o-CRIS-v32, incompatÃ­vel com os objectos anteriores"
 
-#: elf32-csky.c:2066
+#: elf32-csky.c:2019
 msgid "GOT table size out of range"
 msgstr "tamanho de tabela GOT fora do intervalo"
 
-#: elf32-csky.c:2917
+#: elf32-csky.c:2831
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
 msgstr "aviso: eflag \"%#lx\" arch nÃ£o reconhecida"
 
-#: elf32-csky.c:2977
+#: elf32-csky.c:2854
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "aviso: nome arch \"%#x\" nÃ£o reconhecido"
+
+#: elf32-csky.c:2928 elf32-csky.c:3086
 #, c-format
 msgid "%pB: machine flag conflict with target"
 msgstr "%pB: conflito de bandeira de mÃ¡quina com destino"
 
-#: elf32-csky.c:2990
+# space missing between '...%s,set...'
+#: elf32-csky.c:2941
+#, c-format
+msgid "warning: file %pB's arch flag %s conflict with target %s,set target arch flag to %s"
+msgstr "aviso: ficheiro %pB com bandeira arch %s em conflito com o destino %s, definir bandeira arch do destino como %s"
+
+#: elf32-csky.c:2970
+#, c-format
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr "Erro: %pB e %pB tÃªm versÃ£o VDSP diferente"
+
+#: elf32-csky.c:2987
+#, c-format
+msgid "Error: %pB and %pB has different DSP version"
+msgstr "Erro: %pB e %pB tÃªm versÃ£o DSP diferente"
+
+#: elf32-csky.c:3005
+#, c-format
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr "Erro: %pB e %pB tÃªm FPU ABI diferente"
+
+#: elf32-csky.c:3100
 #, c-format
-msgid "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s"
-msgstr "aviso: bandeira arch do ficheiro %pB ck%s em conflito com o destino ck%s, a usar ck%s"
+msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
+msgstr "aviso: bandeira arch do ficheiro %pB %s em conflito com o destino %s, a usar %s"
 
 #. The r_type is error, not support it.
-#: elf32-csky.c:4225 elf32-i386.c:351
+#: elf32-csky.c:4342 elf32-i386.c:350
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr "%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado: %#x"
@@ -2201,80 +2405,80 @@ msgid "jump (PC rel26) to section (%s) n
 msgstr "Erro de ligaÃ§Ã£o BFD: salto (PC rel26) para secÃ§Ã£o (%s) nÃ£o suportado"
 
 #. Only if it's not an unresolved symbol.
-#: elf32-epiphany.c:573 elf32-ip2k.c:1489
+#: elf32-epiphany.c:569 elf32-ip2k.c:1484
 msgid "unsupported relocation between data/insn address spaces"
 msgstr "relocalizaÃ§Ã£o nÃ£o suportada entre dados/espaÃ§os de endereÃ§o insn"
 
-#: elf32-frv.c:1452 elf32-frv.c:1603
+#: elf32-frv.c:1453 elf32-frv.c:1604
 msgid "relocation requires zero addend"
 msgstr "relocalizaÃ§Ã£o requer adenda zero"
 
-#: elf32-frv.c:2829
+#: elf32-frv.c:2833
 #, c-format
 msgid "%H: relocation to `%s+%v' may have caused the error above\n"
 msgstr "%H: relocalizaÃ§Ã£o para \"%s+%v\" poderÃ¡ ter causado o erro acima\n"
 
-#: elf32-frv.c:2846
+#: elf32-frv.c:2850
 msgid "%H: relocation references symbol not defined in the module\n"
 msgstr "%H: relocalizaÃ§Ã£o referencia sÃ­mbolo nÃ£o definido no mÃ³dulo\n"
 
-#: elf32-frv.c:2922
+#: elf32-frv.c:2926
 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
 msgstr "%H: R_FRV_GETTLSOFF nÃ£o aplicado a uma instruÃ§Ã£o call\n"
 
-#: elf32-frv.c:2963
+#: elf32-frv.c:2967
 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESC12 nÃ£o aplicado a uma instruÃ§Ã£o lddi\n"
 
-#: elf32-frv.c:3034
+#: elf32-frv.c:3038
 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESCHI nÃ£o aplicado a uma instruÃ§Ã£o sethi\n"
 
-#: elf32-frv.c:3071
+#: elf32-frv.c:3075
 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESCLO nÃ£o aplicado a uma instruÃ§Ã£o setlo ou setlos\n"
 
-#: elf32-frv.c:3118
+#: elf32-frv.c:3122
 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
 msgstr "%H: R_FRV_TLSDESC_RELAX nÃ£o aplicado a uma instruÃ§Ã£o ldd\n"
 
-#: elf32-frv.c:3202
+#: elf32-frv.c:3206
 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
 msgstr "%H: R_FRV_GETTLSOFF_RELAX nÃ£o aplicado a uma instruÃ§Ã£o calll\n"
 
-#: elf32-frv.c:3256
+#: elf32-frv.c:3260
 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFF12 nÃ£o aplicado a uma instruÃ§Ã£o ldi\n"
 
-#: elf32-frv.c:3286
+#: elf32-frv.c:3290
 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFFHI nÃ£o aplicado a uma instruÃ§Ã£o sethi\n"
 
-#: elf32-frv.c:3315
+#: elf32-frv.c:3319
 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFFLO nÃ£o aplicado a uma instruÃ§Ã£o setlo ou setlos\n"
 
-#: elf32-frv.c:3345
+#: elf32-frv.c:3349
 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
 msgstr "%H: R_FRV_TLSOFF_RELAX nÃ£o aplicado a uma instruÃ§Ã£o ld\n"
 
-#: elf32-frv.c:3390
+#: elf32-frv.c:3394
 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_TLSMOFFHI nÃ£o aplicado a uma instruÃ§Ã£o sethi\n"
 
-#: elf32-frv.c:3417
+#: elf32-frv.c:3421
 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "R_FRV_TLSMOFFLO nÃ£o aplicado a uma instruÃ§Ã£o setlo ou setlos\n"
 
-#: elf32-frv.c:3538 elf32-frv.c:3660
+#: elf32-frv.c:3542 elf32-frv.c:3662
 msgid "%H: %s references dynamic symbol with nonzero addend\n"
 msgstr "%H: R_FRV_FUNCDESC referencia sÃ­mbolo dinÃ¢mico com adenda nÃ£o zero\n"
 
-#: elf32-frv.c:3580 elf32-frv.c:3703
+#: elf32-frv.c:3583 elf32-frv.c:3704
 msgid "%H: cannot emit fixups in read-only section\n"
 msgstr "%H: impossÃ­vel emitir fixups em secÃ§Ã£o sÃ³ de leitura\n"
 
-#: elf32-frv.c:3611 elf32-frv.c:3746
+#: elf32-frv.c:3613 elf32-frv.c:3746
 msgid "%H: cannot emit dynamic relocations in read-only section\n"
 msgstr "%H: impossÃ­vel emitir relocalizaÃ§Ãµes dinÃ¢micas em secÃ§Ã£o sÃ³ de leitura\n"
 
@@ -2288,17 +2492,17 @@ msgstr "%H: reloc contra \"%s\" referenc
 msgid "%H: reloc against `%s': %s\n"
 msgstr "%H: reloc contra \"%s\": %s\n"
 
-#: elf32-frv.c:6514
+#: elf32-frv.c:6496
 #, c-format
 msgid "%pB: compiled with %s and linked with modules that use non-pic relocations"
 msgstr "%pB: compilado com %s e ligado com mÃ³dulos que usam relocalizaÃ§Ãµes nÃ£o-pic"
 
-#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876
+#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
 #, c-format
 msgid "%pB: compiled with %s and linked with modules compiled with %s"
 msgstr "%pB: compilado com %s e ligado com mÃ³dulos compilados com %s"
 
-#: elf32-frv.c:6581
+#: elf32-frv.c:6563
 #, c-format
 msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: usa campos e_flags (%#x) desconhecidos diferentes dos mÃ³dulos anteriores (%#x)"
@@ -2308,275 +2512,284 @@ msgstr "%pB: usa campos e_flags (%#x) de
 msgid "%pB: relocations in generic ELF (EM: %d)"
 msgstr "%pB: relocalizaÃ§Ãµes em ELF (EM: %d) genÃ©rico"
 
-#: elf32-hppa.c:834 elf32-hppa.c:3511
+#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:12022
+msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: impossÃ­vel atribuir \"%pA\" a uma secÃ§Ã£o de saÃ­da. Repita sem --enable-non-contiguous-regions.\n"
+
+#: elf32-hppa.c:863 elf32-hppa.c:3403
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
 msgstr "%pB(%pA+%#<PRIx64>): impossÃ­vel atingir %s, recompile com -ffunction-sections"
 
-#: elf32-hppa.c:1248
+#: elf32-hppa.c:1241
 #, c-format
 msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: relocalizaÃ§Ã£o %s nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC"
 
-#: elf32-hppa.c:2688
+#: elf32-hppa.c:2580
 #, c-format
 msgid "%pB: duplicate export stub %s"
 msgstr "%pB: fictÃ­cio de exportaÃ§Ã£o duplicado %s"
 
-#: elf32-hppa.c:3344
+#: elf32-hppa.c:3236
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s fixup for insn %#x is not supported in a non-shared link"
 msgstr "%pB(%pA+%#<PRIx64>): %s fixup para insn %#x nÃ£o Ã© suportado em ligaÃ§Ã£o nÃ£o partilhada"
 
-#: elf32-hppa.c:4140
+#: elf32-hppa.c:4032
 #, c-format
 msgid "%s has both normal and TLS relocs"
 msgstr "%s tem relocs normal e TLS em simultÃ¢neo"
 
-#: elf32-hppa.c:4158
+#: elf32-hppa.c:4050
 #, c-format
 msgid "%pB:%s has both normal and TLS relocs"
 msgstr "%pB:%s tem relocs normal e TLS em simultÃ¢neo"
 
-#: elf32-hppa.c:4217
+#: elf32-hppa.c:4109
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
 msgstr "%pB(%pA+%#<PRIx64>): impossÃ­vel gerir %s para %s"
 
-#: elf32-hppa.c:4521
+#: elf32-hppa.c:4413
 msgid ".got section not immediately after .plt section"
 msgstr "secÃ§Ã£o .got nÃ£o imediatamente apÃ³s secÃ§Ã£o .plt"
 
-#: elf32-i386.c:1178 elf64-x86-64.c:1377
+#: elf32-i386.c:1169 elf64-x86-64.c:1380
 #, c-format
 msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
 msgstr "%pB: transiÃ§Ã£o TLS de %s para %s contra \"%s\" em %#<PRIx64> na secÃ§Ã£o \"%pA\" falhou"
 
-#: elf32-i386.c:1269
+#: elf32-i386.c:1272
 #, c-format
 msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
 msgstr "%pB: relocalizaÃ§Ã£o GOT directa R_386_GOT32X contra \"%s\" sem registo-base nÃ£o pode ser usada ao fazer um objecto partilhado"
 
-#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592
-#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591
-#: elfxx-tilegx.c:1805
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:451
+#: elf32-i386.c:1721 elf32-s390.c:1151 elf32-sh.c:5488 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1266 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-riscv.c:568
 #, c-format
 msgid "%pB: `%s' accessed both as normal and thread local symbol"
 msgstr "%pB: \"%s\" acedido como sÃ­mbolo local normal e thread em simultÃ¢neo"
 
-#: elf32-i386.c:1798
+#: elf32-i386.c:1793
 #, c-format
 msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
 msgstr "%pB: chamada nÃ£o-PIC a IFUNC \"%s\" nÃ£o suportada"
 
-#: elf32-i386.c:2379 elf64-x86-64.c:2670
+#: elf32-i386.c:2373 elf64-x86-64.c:2721 elfnn-riscv.c:2284
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
 msgstr "%pB: relocalizaÃ§Ã£o %s contra STT_GNU_IFUNC sÃ­mbolo \"%s\" nÃ£o suportada"
 
-#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727
-#: elf64-x86-64.c:4069 elf64-x86-64.c:4225
+#: elf32-i386.c:2406 elf32-i386.c:3677 elf32-i386.c:3824 elf64-x86-64.c:2778
+#: elf64-x86-64.c:4310 elf64-x86-64.c:4472 elfnn-riscv.c:2157
+#: elfnn-riscv.c:2956 elfnn-riscv.c:3030
 #, c-format
 msgid "Local IFUNC function `%s' in %pB\n"
 msgstr "FunÃ§Ã£o IFUNC local \"%s\" em %pB\n"
 
-#: elf32-i386.c:2569
+#: elf32-i386.c:2575
 #, c-format
 msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
 msgstr "%pB: relocalizaÃ§Ã£o GOT directa %s contra \"%s\" sem registo-base nÃ£o pode ser usada ao fazer um objecto partilhado"
 
-#: elf32-i386.c:2604 elf64-x86-64.c:2919
+#: elf32-i386.c:2610 elf64-x86-64.c:2988
 msgid "hidden symbol"
 msgstr "sÃ­mbolo oculto"
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2613 elf64-x86-64.c:2991
 msgid "internal symbol"
 msgstr "sÃ­mbolo interno"
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2616 elf64-x86-64.c:2994
 msgid "protected symbol"
 msgstr "sÃ­mbolo protegido"
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2619 elf64-x86-64.c:2997
 msgid "symbol"
 msgstr "sÃ­mbolo"
 
-#: elf32-i386.c:2619
+#: elf32-i386.c:2625
 #, c-format
 msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
 msgstr "%pB: relocalizaÃ§Ã£o R_386_GOTOFF contra %s \"%s\" indefinido nÃ£o pode ser usada ao fazer um objecto partilhado"
 
-#: elf32-i386.c:2632
+#: elf32-i386.c:2638
 #, c-format
 msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
 msgstr "%pB: relocalizaÃ§Ã£o R_386_GOTOFF contra %s \"%s\" protegido nÃ£o pode ser usada ao fazer um objecto partilhado"
 
-#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935
+#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
 msgid "ip2k relaxer: switch table without complete matching relocation information."
 msgstr "ip2k relaxer: tabela de troca sem informaÃ§Ã£o completa de comparaÃ§Ã£o de relocalizaÃ§Ã£o."
 
-#: elf32-ip2k.c:879 elf32-ip2k.c:962
+#: elf32-ip2k.c:878 elf32-ip2k.c:961
 msgid "ip2k relaxer: switch table header corrupt."
 msgstr "ip2k relaxer: cabeÃ§alho da tabela de troca corrompido."
 
-#: elf32-ip2k.c:1302
+#: elf32-ip2k.c:1297
 #, c-format
 msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "ip2k linker: pÃ¡gina de instruÃ§Ã£o em falta em %#<PRIx64> (dest = %#<PRIx64>)"
 
-#: elf32-ip2k.c:1321
+#: elf32-ip2k.c:1316
 #, c-format
 msgid "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "ip2k linker: pÃ¡gina de instruÃ§Ã£o redundante em %#<PRIx64> (dest = %#<PRIx64>)"
 
-#: elf32-lm32.c:651 elf32-nios2.c:3141
+#: elf32-lm32.c:609 elf32-nios2.c:3145
 msgid "global pointer relative relocation when _gp not defined"
 msgstr "relocalizaÃ§Ã£o relativa de ponteiro global com _gp nÃ£o definido"
 
-#: elf32-lm32.c:706 elf32-nios2.c:3578
+#: elf32-lm32.c:664 elf32-nios2.c:3582
 msgid "global pointer relative address out of range"
 msgstr "endereÃ§o relativo de ponteiro global fora do intervalo"
 
-#: elf32-lm32.c:1002
+#: elf32-lm32.c:960
 #, c-format
 msgid "internal error: addend should be zero for %s"
 msgstr "erro interno: adenda devia ser zero para %s"
 
-#: elf32-m32r.c:1471
+#: elf32-m32r.c:1461
 msgid "SDA relocation when _SDA_BASE_ not defined"
 msgstr "relocalizaÃ§Ã£o SDA com _SDA_BASE_ nÃ£o definido"
 
-#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149
+#: elf32-m32r.c:2776 elf32-microblaze.c:1093 elf32-microblaze.c:1141
 #, c-format
 msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)"
 msgstr "%pB: o alvo (%s) de uma relocalizaÃ§Ã£o %s estÃ¡ na secÃ§Ã£o errada (%pA)"
 
-#: elf32-m32r.c:3487
+#: elf32-m32r.c:3279
 #, c-format
 msgid "%pB: instruction set mismatch with previous modules"
 msgstr "%pB: conjunto de instruÃ§Ãµes trocado com os mÃ³dulos anteriores"
 
-#: elf32-m32r.c:3508 elf32-nds32.c:6992
+#: elf32-m32r.c:3300 elf32-nds32.c:6851
 #, c-format
 msgid "private flags = %lx"
 msgstr "bandeiras privadas = %lx"
 
-#: elf32-m32r.c:3513
+#: elf32-m32r.c:3305
 #, c-format
 msgid ": m32r instructions"
 msgstr ": instruÃ§Ãµes m32r"
 
-#: elf32-m32r.c:3514
+#: elf32-m32r.c:3306
 #, c-format
 msgid ": m32rx instructions"
 msgstr ": instruÃ§Ãµes m32rx"
 
-#: elf32-m32r.c:3515
+#: elf32-m32r.c:3307
 #, c-format
 msgid ": m32r2 instructions"
 msgstr ": instruÃ§Ãµes m32r2"
 
-#: elf32-m68hc1x.c:1116
+#: elf32-m68hc1x.c:1135
 #, c-format
 msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
 msgstr "ReferÃªncia ao sÃ­mbolo distante \"%s\" com uma relocalizaÃ§Ã£o errada pode resultar em execuÃ§Ã£o incorrecta"
 
-#: elf32-m68hc1x.c:1150
+#: elf32-m68hc1x.c:1166
 #, c-format
 msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code."
 msgstr "O endereÃ§o XGATE (%lx) nÃ£o estÃ¡ dentro de RAM(0xE000-0xFFFF) partilhado, deve desviar manualmente o endereÃ§o e, possivelmente gerir a pÃ¡gina, no seu cÃ³digo."
 
-#: elf32-m68hc1x.c:1168
+#: elf32-m68hc1x.c:1182
 #, c-format
 msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)"
 msgstr "endereÃ§o de banco [%lx:%04lx] (%lx) nÃ£o estÃ¡ no mesmo banco que o endereÃ§o actual [%lx:%04lx] (%lx)"
 
-#: elf32-m68hc1x.c:1184
+#: elf32-m68hc1x.c:1197
 #, c-format
 msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx"
 msgstr "referÃªncia a um endereÃ§o de banco [%lx:%04lx] no espaÃ§o de endereÃ§o normal em %04lx"
 
-#: elf32-m68hc1x.c:1225
+#: elf32-m68hc1x.c:1233
 #, c-format
 msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code"
 msgstr "endereÃ§o S12 (%lx) nÃ£o estÃ¡ dentro de RAM(0x2000-0x4000) partilhado, deve desviar manualmente o endereÃ§o no seu cÃ³digo"
 
-#: elf32-m68hc1x.c:1352
+#: elf32-m68hc1x.c:1357
 #, c-format
 msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
 msgstr "%pB: a ligar ficheiros compilados para inteiros de 16-bit (-mshort) e outros para inteiros de 32-bit"
 
-#: elf32-m68hc1x.c:1359
+#: elf32-m68hc1x.c:1364
 #, c-format
 msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
 msgstr "%pB: a ligar ficheiros compilados para duplos de 32-bit (-fshort-double) e outros para duplos de 64-bit"
 
-#: elf32-m68hc1x.c:1368
+#: elf32-m68hc1x.c:1373
 #, c-format
 msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
 msgstr "%pB: a ligar ficheiros compilados para HCS12 com outros compilados para HC12"
 
-#: elf32-m68hc1x.c:1413 elf32-xgate.c:497
+#: elf32-m68hc1x.c:1418 elf32-xgate.c:497
 #, c-format
 msgid "[abi=32-bit int, "
 msgstr "[abi=32-bit int, "
 
-#: elf32-m68hc1x.c:1415 elf32-xgate.c:499
+#: elf32-m68hc1x.c:1420 elf32-xgate.c:499
 #, c-format
 msgid "[abi=16-bit int, "
 msgstr "[abi=16-bit int, "
 
-#: elf32-m68hc1x.c:1418 elf32-xgate.c:502
+#: elf32-m68hc1x.c:1423 elf32-xgate.c:502
 #, c-format
 msgid "64-bit double, "
 msgstr "64-bit duplo, "
 
-#: elf32-m68hc1x.c:1420 elf32-xgate.c:504
+#: elf32-m68hc1x.c:1425 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "32-bit duplo, "
 
-#: elf32-m68hc1x.c:1423
+#: elf32-m68hc1x.c:1428
 #, c-format
 msgid "cpu=HC11]"
 msgstr "cpu=HC11]"
 
-#: elf32-m68hc1x.c:1425
+#: elf32-m68hc1x.c:1430
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "cpu=HCS12]"
 
-#: elf32-m68hc1x.c:1427
+#: elf32-m68hc1x.c:1432
 #, c-format
 msgid "cpu=HC12]"
 msgstr "cpu=HC12]"
 
-#: elf32-m68hc1x.c:1430
+#: elf32-m68hc1x.c:1435
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [memÃ³ria=bank-model]"
 
-#: elf32-m68hc1x.c:1432
+#: elf32-m68hc1x.c:1437
 #, c-format
 msgid " [memory=flat]"
 msgstr " [memÃ³ria=flat]"
 
-#: elf32-m68hc1x.c:1435
+#: elf32-m68hc1x.c:1440
 #, c-format
 msgid " [XGATE RAM offsetting]"
 msgstr " [desvio XGATE RAM]"
 
-#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3582 elf32-ppc.c:3590
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr "%pB usa vÃ­rgula rÃ­gida, %pB usa vÃ­rgula suave"
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7662 vms-alpha.c:7678
 msgid "unknown"
 msgstr "desconhecido"
 
-#: elf32-m68k.c:1660
+#: elf32-m68k.c:1731
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d"
 msgstr "%pB: transporte GOT: nÃºmero de relocalizaÃ§Ãµes com desvio 8-bit > %d"
 
-#: elf32-m68k.c:1667
+#: elf32-m68k.c:1738
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
 msgstr "%pB: transporte GOT: nÃºmero de relocalizaÃ§Ãµes com desvio 8- ou 16-bit > %d"
@@ -2592,401 +2805,401 @@ msgstr "mep: sem reloc para cÃ³digo %d"
 msgid "MeP: howto %d has type %d"
 msgstr "MeP: howto %d tem tipo %d"
 
-#: elf32-mep.c:622
+#: elf32-mep.c:618
 #, c-format
 msgid "%pB and %pB are for different cores"
 msgstr "%pB e %pB sÃ£o para cores diferentes"
 
-#: elf32-mep.c:641
+#: elf32-mep.c:637
 #, c-format
 msgid "%pB and %pB are for different configurations"
 msgstr "%pB e %pB sÃ£o para configuraÃ§Ãµes diferentes"
 
-#: elf32-mep.c:679
+#: elf32-mep.c:675
 #, c-format
 msgid "private flags = 0x%lx"
 msgstr "bandeiras privadas = 0x%lx"
 
-#: elf32-metag.c:1863
+#: elf32-metag.c:1857
 #, c-format
 msgid "%pB(%pA): multiple TLS models are not supported"
 msgstr "%pB(%pA): mÃºltiplos modelos TLS nÃ£o sÃ£o suportados"
 
-#: elf32-metag.c:1866
+#: elf32-metag.c:1860
 #, c-format
 msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link"
 msgstr "%pB(%pA): encontrado sÃ­mbolo de biblioteca partilhada %s ao realizar ligaÃ§Ã£o estÃ¡tica"
 
-#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538
-#: elfxx-tilegx.c:3543
+#: elf32-microblaze.c:1536 elf32-tilepro.c:3021 elfxx-sparc.c:3446
+#: elfxx-tilegx.c:3415
 #, c-format
 msgid "%pB: probably compiled without -fPIC?"
 msgstr "%pB: provavelmente compilado com -fPIC?"
 
-#: elf32-mips.c:1775 elf64-mips.c:3516 elfn32-mips.c:3332
+#: elf32-mips.c:1777 elf64-mips.c:3516 elfn32-mips.c:3334
 msgid "literal relocation occurs for an external symbol"
 msgstr "relocalizaÃ§Ã£o literal ocorre para um sÃ­mbolo externo"
 
-#: elf32-mips.c:1822 elf32-score.c:569 elf32-score7.c:469 elf64-mips.c:3559
-#: elfn32-mips.c:3373
+#: elf32-mips.c:1824 elf32-score.c:572 elf32-score7.c:472 elf64-mips.c:3559
+#: elfn32-mips.c:3375
 msgid "32bits gp relative relocation occurs for an external symbol"
 msgstr "relocalizaÃ§Ã£o relativa 32bits gp ocorre para um sÃ­mbolo externo"
 
-#: elf32-msp430.c:837 elf32-msp430.c:1151
+#: elf32-msp430.c:914
+#, c-format
+msgid "error: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "erro: tamanho final de valor uleb128 no desvio 0x%lx em %pA de %pB excede o espaÃ§o disponÃ­vel"
+
+#: elf32-msp430.c:983 elf32-msp430.c:1297
 msgid "try enabling relaxation to avoid relocation truncations"
 msgstr "Tente activar relaxe para evitar truncamentos nas relocalizaÃ§Ãµes"
 
-#: elf32-msp430.c:1358
+#: elf32-msp430.c:1506
 msgid "internal error: branch/jump to an odd address detected"
 msgstr "erro interno: detectado ramo/salto para um endereÃ§o Ã­mpar"
 
-#: elf32-msp430.c:2357
+#: elf32-msp430.c:2671
 #, c-format
 msgid "warning: %pB: unknown MSPABI object attribute %d"
 msgstr "Aviso: %pB: atributo de objecto MSABI %d desconhecido"
 
-#: elf32-msp430.c:2456
+#: elf32-msp430.c:2772
 #, c-format
 msgid "error: %pB uses %s instructions but %pB uses %s"
 msgstr "erro: %pB usa instruÃ§Ãµes %s mas %pB usa %s"
 
-#: elf32-msp430.c:2468
+#: elf32-msp430.c:2784
 #, c-format
 msgid "error: %pB uses the %s code model whereas %pB uses the %s code model"
 msgstr "erro: %pB usa o modelo de cÃ³digo %s enquanto %pB usa o modelo de cÃ³digo %s"
 
-#: elf32-msp430.c:2480
+#: elf32-msp430.c:2797
 #, c-format
 msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
 msgstr "erro: %pB usa o modelo de cÃ³digo grande mas %pB usa instruÃ§Ãµes MSP430"
 
-#: elf32-msp430.c:2491
+#: elf32-msp430.c:2808
 #, c-format
 msgid "error: %pB uses the %s data model whereas %pB uses the %s data model"
 msgstr "erro: %pB usa o modelo de dados %s enquanto %pB usa o modelo de dados %s"
 
-#: elf32-msp430.c:2503
+#: elf32-msp430.c:2821
 #, c-format
 msgid "error: %pB uses the small code model but %pB uses the %s data model"
 msgstr "erro: %pB usa o modelo de cÃ³digo pequeno mas %pB usa o modelo de dados %s"
 
-#: elf32-msp430.c:2515
+#: elf32-msp430.c:2833
 #, c-format
 msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions"
 msgstr "erro: %pB usa o modelo de dados %s mas %pB sÃ³ usa instruÃ§Ãµes MSP430"
 
-#: elf32-nds32.c:3624
+#: elf32-msp430.c:2858
 #, c-format
-msgid "error: can't find symbol: %s"
-msgstr "erro: impossÃ­vel encontrar sÃ­mbolo: %s."
+msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
+msgstr "erro: %pB pode usar a regiÃ£o superior para dados, mas %pB assume que os dados estÃ£o exclusivamente na memÃ³ria inferior"
 
-#: elf32-nds32.c:5639
+#: elf32-nds32.c:3625
 #, c-format
-msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC"
-msgstr "%pB: relocalizaÃ§Ã£o %s contra \"%s\" nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC"
+msgid "error: can't find symbol: %s"
+msgstr "erro: impossÃ­vel encontrar sÃ­mbolo: %s."
 
-#: elf32-nds32.c:5669
+#: elf32-nds32.c:5524
 #, c-format
 msgid "%pB: warning: %s unsupported in shared mode"
 msgstr "%pB: aviso: %s nÃ£o suportado em modo partilhado"
 
-#: elf32-nds32.c:5795
+#: elf32-nds32.c:5650
 #, c-format
 msgid "%pB: warning: unaligned access to GOT entry"
 msgstr "%pB: aviso: acesso nÃ£o alinhado a entrada GOT."
 
-#: elf32-nds32.c:5836
+#: elf32-nds32.c:5691
 #, c-format
 msgid "%pB: warning: relocate SDA_BASE failed"
 msgstr "%pB: aviso: falha ao relocalizar SDA_BASE."
 
-#: elf32-nds32.c:5858
+#: elf32-nds32.c:5713
 #, c-format
 msgid "%pB(%pA): warning: unaligned small data access of type %d"
 msgstr "%pB(%pA): aviso: acesso nÃ£o alinhado a dados pequenos de tipo %d."
 
-#: elf32-nds32.c:6784
+#: elf32-nds32.c:6639
 #, c-format
 msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
 msgstr "%pB: tamanho do vector ISR trocado com mÃ³dulos anteriores, anterior %u-byte, actual %u-byte"
 
-#: elf32-nds32.c:6828
+#: elf32-nds32.c:6687
 #, c-format
 msgid "%pB: warning: endian mismatch with previous modules"
 msgstr "%pB: aviso: Endian trocado com mÃ³dulos anteriores."
 
-#: elf32-nds32.c:6842
+#: elf32-nds32.c:6701
 #, c-format
 msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
 msgstr "%pB: aviso: encontradas versÃµes anteriores do ficheiro objecto, recompile com as ferramentas actuais."
 
-#: elf32-nds32.c:6930
+#: elf32-nds32.c:6789
 #, c-format
 msgid "%pB: error: ABI mismatch with previous modules"
 msgstr "%pB: erro: ABI trocado com mÃ³dulos anteriores."
 
-#: elf32-nds32.c:6940
+#: elf32-nds32.c:6799
 #, c-format
 msgid "%pB: error: instruction set mismatch with previous modules"
 msgstr "%pB: erro: conjunto de instruÃ§Ãµes trocado com mÃ³dulos anteriores."
 
-#: elf32-nds32.c:6967
+#: elf32-nds32.c:6826
 #, c-format
 msgid "%pB: warning: incompatible elf-versions %s and %s"
 msgstr "%pB: aviso: versÃµes elf %s e %s incompatÃ­veis."
 
-#: elf32-nds32.c:6998
+#: elf32-nds32.c:6857
 #, c-format
 msgid ": n1 instructions"
 msgstr ": instruÃ§Ãµes n1"
 
-#: elf32-nds32.c:7001
+#: elf32-nds32.c:6860
 #, c-format
 msgid ": n1h instructions"
 msgstr ": instruÃ§Ãµes n1h"
 
-#: elf32-nds32.c:9462
+#: elf32-nds32.c:9313
 #, c-format
 msgid "%pB: error: search_nds32_elf_blank reports wrong node"
 msgstr "%pB: erro: search_nds32_elf_blank reporta nÃ³ errado"
 
-#: elf32-nds32.c:9722
+#: elf32-nds32.c:9577
 #, c-format
 msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
 msgstr "%pB: aviso: %s aponta para reloc nÃ£o reconhecida em %#<PRIx64>"
 
-#: elf32-nds32.c:12975
+#: elf32-nds32.c:12842
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr "%pB: OMIT_FP aninhado em %pA."
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12861
 #, c-format
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr "%pB: OMIT_FP desirmanado em %pA."
 
-#: elf32-nds32.c:13275 reloc.c:8410
+#: elf32-nds32.c:13143 elfxx-mips.c:13407 reloc.c:8508
 #, c-format
 msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
 msgstr "%X%P: %pB(%pA): relocalizaÃ§Ã£o \"%R\" sai fora do intervalo\n"
 
-#: elf32-nios2.c:2930
+#: elf32-nios2.c:2934
 #, c-format
 msgid "error: %pB: big-endian R2 is not supported"
 msgstr "erro: %pB: Big-endian R2 nÃ£o Ã© suportado."
 
-#: elf32-nios2.c:3822
+#: elf32-nios2.c:3826
 #, c-format
-msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n"
-msgstr "relocalizaÃ§Ã£o relativa de ponteiro global no endereÃ§o 0x%08x com _gp nÃ£o definido\n"
+msgid "global pointer relative relocation at address %#<PRIx64> when _gp not defined\n"
+msgstr "relocalizaÃ§Ã£o relativa de ponteiro global no endereÃ§o %#<PRIx64> com _gp nÃ£o definido\n"
 
-#: elf32-nios2.c:3842
+#: elf32-nios2.c:3856
 #, c-format
-msgid "unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767\n"
-msgstr "ImpossÃ­vel atingir %s (at 0x%08x) do ponteiro global (em 0x%08x) porque o desvio (%d) estÃ¡ fora do intervalo permitido, -32678 a 32767.\n"
+msgid "unable to reach %s (at %#<PRIx64>) from the global pointer (at %#<PRIx64>) because the offset (%<PRId64>) is out of the allowed range, -32678 to 32767\n"
+msgstr "ImpossÃ­vel atingir %s (em %#<PRIx64>) do ponteiro global (em %#<PRIx64>) porque o desvio (%<PRId64>) estÃ¡ fora do intervalo permitido, -32678 a 32767.\n"
 
-#: elf32-nios2.c:4495 elf32-pru.c:928
+#: elf32-nios2.c:4511 elf32-pru.c:931
 msgid "relocation out of range"
 msgstr "relocalizaÃ§Ã£o fora do intervalo"
 
-#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716
+#: elf32-nios2.c:4521 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr "relocalizaÃ§Ã£o perigosa"
 
-#: elf32-nios2.c:5378
+#: elf32-nios2.c:5364
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr "variÃ¡vel dinÃ¢mica \"%s\" tem tamanho zero"
 
-#: elf32-or1k.c:1177
+#: elf32-or1k.c:1241
 #, c-format
 msgid "%pB: Cannot handle relocation value size of %d"
 msgstr "%pB: impossÃ­vel gerir valor de tamanho de relocalizaÃ§Ã£o de %d"
 
-#: elf32-or1k.c:1286
+#: elf32-or1k.c:1349
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr "%pB: tipo de relocalizaÃ§Ã£o %d desconhecido"
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1403
 #, c-format
 msgid "%pB: addend should be zero for plt relocations"
 msgstr "%pB: adenda devia ser zero para relocalizaÃ§Ãµes plt"
 
-#: elf32-or1k.c:1445
+#: elf32-or1k.c:1520
 #, c-format
 msgid "%pB: addend should be zero for got relocations"
 msgstr "%pB: adenda devia ser zero para relocalizaÃ§Ãµes got"
 
-#: elf32-or1k.c:1462
+#: elf32-or1k.c:1537
 #, c-format
 msgid "%pB: gotoff relocation against dynamic symbol %s"
 msgstr "%pB: relocalizaÃ§Ã£o gotoff contra sÃ­mbolo dinÃ¢mico %s"
 
-#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599
+#: elf32-or1k.c:1554 elf64-alpha.c:4426 elf64-alpha.c:4570
 #, c-format
 msgid "%pB: pc-relative relocation against dynamic symbol %s"
 msgstr "%pB: relocalizaÃ§Ã£o pc-relative contra sÃ­mbolo dinÃ¢mico %s"
 
-#: elf32-or1k.c:1493
+#: elf32-or1k.c:1568
 #, c-format
 msgid "%pB: non-pic relocation against symbol %s"
 msgstr "%pB: relocalizaÃ§Ã£o nÃ£o-pic contra sÃ­mbolo %s"
 
-#: elf32-or1k.c:1577
+#: elf32-or1k.c:1652
 #, c-format
 msgid "%pB: support for local dynamic not implemented"
 msgstr "%pB: suporte a dinÃ¢mica local nÃ£o implementado"
 
-#: elf32-or1k.c:1729
+#: elf32-or1k.c:1831
 #, c-format
 msgid "%pB: will not resolve runtime TLS relocation"
 msgstr "%pB: nÃ£o resolve relocalizaÃ§Ã£o TLS em tempo de execuÃ§Ã£o"
 
-#: elf32-or1k.c:2074
+#: elf32-or1k.c:2165
 #, c-format
 msgid "%pB: bad relocation section name `%s'"
 msgstr "%pB: mau nome de secÃ§Ã£o de relocalizaÃ§Ã£o \"%s\""
 
-#: elf32-or1k.c:3218
+#: elf32-or1k.c:3279
 #, c-format
 msgid "%pB: %s flag mismatch with previous modules"
 msgstr "%pB: bandeira %strocada com mÃ³dulos anteriores"
 
-#: elf32-ppc.c:986
+#: elf32-ppc.c:987 elf64-ppc.c:1723
 #, c-format
 msgid "generic linker can't handle %s"
 msgstr "linker genÃ©rico nÃ£o pode gerir %s"
 
-#: elf32-ppc.c:1617
+#: elf32-ppc.c:1627
 #, c-format
 msgid "corrupt %s section in %pB"
 msgstr "secÃ§Ã£o %s corrupta em %pB"
 
-#: elf32-ppc.c:1637
+#: elf32-ppc.c:1646
 #, c-format
 msgid "unable to read in %s section from %pB"
 msgstr "impossÃ­vel ler na secÃ§Ã£o %s de %pB"
 
-#: elf32-ppc.c:1679
+#: elf32-ppc.c:1688
 #, c-format
 msgid "warning: unable to set size of %s section in %pB"
 msgstr "aviso: impossÃ­vel definir tamanho da secÃ§Ã£o %s em %pB"
 
-#: elf32-ppc.c:1729
+#: elf32-ppc.c:1737
 msgid "failed to allocate space for new APUinfo section"
 msgstr "falha ao alocar espaÃ§o para nova secÃ§Ã£o APUinfo."
 
-#: elf32-ppc.c:1748
+#: elf32-ppc.c:1756
 msgid "failed to compute new APUinfo section"
 msgstr "falha ao computar nova secÃ§Ã£o APUinfo."
 
-#: elf32-ppc.c:1751
+#: elf32-ppc.c:1759
 msgid "failed to install new APUinfo section"
 msgstr "falha ao instalar nova secÃ§Ã£o APUinfo."
 
-#: elf32-ppc.c:2853
+#: elf32-ppc.c:2858
 #, c-format
 msgid "%pB: relocation %s cannot be used when making a shared object"
 msgstr "%pB: relocalizaÃ§Ã£o %s nÃ£o pode ser usada ao fazer objecto partilhado"
 
-#: elf32-ppc.c:3587 elf32-ppc.c:3595
-#, c-format
-msgid "%pB uses hard float, %pB uses soft float"
-msgstr "%pB usa vÃ­rgula rÃ­gida, %pB usa vÃ­rgula suave"
-
-#: elf32-ppc.c:3603 elf32-ppc.c:3611
+#: elf32-ppc.c:3598 elf32-ppc.c:3606
 #, c-format
 msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
 msgstr "%pB usa vÃ­rgula rÃ­gida de precisÃ£o dupla, %pB usa vÃ­rgula rÃ­gida de precisÃ£o simples"
 
-#: elf32-ppc.c:3630 elf32-ppc.c:3638
+#: elf32-ppc.c:3628 elf32-ppc.c:3636
 #, c-format
 msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
 msgstr "%pB usa 64-bit long double, %pB usa 128-bit long double"
 
-#: elf32-ppc.c:3646 elf32-ppc.c:3654
+#: elf32-ppc.c:3644 elf32-ppc.c:3652
 #, c-format
 msgid "%pB uses IBM long double, %pB uses IEEE long double"
 msgstr "%pB usa IBM long double, %pB usa IEEE long double"
 
-#: elf32-ppc.c:3721 elf32-ppc.c:3730
+#: elf32-ppc.c:3719 elf32-ppc.c:3728
 #, c-format
 msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
 msgstr "%pB usa AltiVec vector ABI, %pB usa SPE vector ABI"
 
-#: elf32-ppc.c:3759 elf32-ppc.c:3768
+#: elf32-ppc.c:3757 elf32-ppc.c:3766
 #, c-format
 msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
 msgstr "%pB usa r3/r4 para pequenas devoluÃ§Ãµes de estrutura, %pB usa a memÃ³ria"
 
-#: elf32-ppc.c:3829
+#: elf32-ppc.c:3830
 #, c-format
 msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
 msgstr "%pB: compilado com -mrelocatable e ligado com mÃ³dulos compilados normalmente"
 
-#: elf32-ppc.c:3837
+#: elf32-ppc.c:3838
 #, c-format
 msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
 msgstr "%pB: compilado normalmente e ligado com mÃ³dulos compilados com -mrelocatable"
 
-#: elf32-ppc.c:3906
+#: elf32-ppc.c:3907
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
 msgstr "%pB(%pA+0x%lx): esperada relocalizaÃ§Ã£o estilo 16A em 0x%08x insn"
 
-#: elf32-ppc.c:3925
+#: elf32-ppc.c:3926
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
 msgstr "%pB(%pA+0x%lx): esperada relocalizaÃ§Ã£o estilo 16D em 0x%08x insn"
 
-#: elf32-ppc.c:4028
+#: elf32-ppc.c:4029
 #, c-format
 msgid "bss-plt forced due to %pB"
 msgstr "bss-plt forÃ§ado devido a %pB"
 
-#: elf32-ppc.c:4030
+#: elf32-ppc.c:4031
 msgid "bss-plt forced by profiling"
 msgstr "bss-plt forÃ§ado pelo perfil"
 
+#: elf32-ppc.c:4608 elf64-ppc.c:8317
+msgid "%H: warning: %s unexpected insn %#x.\n"
+msgstr "%H: aviso: %s insn %#x inesperado.\n"
+
 #. Uh oh, we didn't find the expected call.  We
 #. could just mark this symbol to exclude it
 #. from tls optimization but it's safer to skip
 #. the entire optimization.
-#: elf32-ppc.c:4606 elf64-ppc.c:7724
+#: elf32-ppc.c:4638 elf64-ppc.c:8382
 #, c-format
 msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
 msgstr "argumento %H perdeu __tls_get_addr, optimizaÃ§Ã£o TLS desactivada\n"
 
-#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534
-#: elfxx-tilegx.c:2579
+#: elf32-ppc.c:5564 elf32-sh.c:3017 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elfxx-tilegx.c:2494
 #, c-format
 msgid "%pB: dynamic relocation in read-only section `%pA'\n"
 msgstr "%pB: relocalizaÃ§Ã£o dinÃ¢mica em secÃ§Ã£o \"%pA\" sÃ³ de leitura\n"
 
-#: elf32-ppc.c:7457
+#: elf32-ppc.c:7407
 msgid "%P: %H: error: %s with unexpected instruction %x\n"
 msgstr "%P: %H: erro: %s com instruÃ§Ã£o inesperada %x\n"
 
-#: elf32-ppc.c:7494
+#: elf32-ppc.c:7444
 msgid "%H: fixup branch overflow\n"
 msgstr "%H: transporte em ramo fixup\n"
 
-#: elf32-ppc.c:7534 elf32-ppc.c:7570
+#: elf32-ppc.c:7484 elf32-ppc.c:7520
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
 msgstr "%pB(%pA+%#<PRIx64>): erro: %s com instruÃ§Ã£o inesperada %#x"
 
-#: elf32-ppc.c:7634
+#: elf32-ppc.c:7584
 #, c-format
 msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
 msgstr "%X%H: bss-plt -fPIC ifunc %s nÃ£o suportada\n"
 
-#: elf32-ppc.c:7673 elf64-ppc.c:15220
-msgid "%H: warning: %s unexpected insn %#x.\n"
-msgstr "%H: aviso: %s insn %#x inesperado.\n"
-
-#: elf32-ppc.c:7985
+#: elf32-ppc.c:7899
 #, c-format
 msgid "%H: non-zero addend on %s reloc against `%s'\n"
 msgstr "%H: adenda nÃ£o-zero em reloc %s contra \"%s\"\n"
@@ -2999,54 +3212,54 @@ msgstr "%H: adenda nÃ£o-zero em reloc %s
 #. local won't have the +32k reloc addend trick marking
 #. -fPIC code, so the linker won't know whether r30 is
 #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
-#: elf32-ppc.c:8017
+#: elf32-ppc.c:7931
 #, c-format
 msgid "%X%H: @local call to ifunc %s\n"
 msgstr "%X%H: chamada @local a ifunc %s\n"
 
-#: elf32-ppc.c:8187
+#: elf32-ppc.c:8109
 #, c-format
 msgid "%H: relocation %s for indirect function %s unsupported\n"
 msgstr "%H: relocalizaÃ§Ã£o %s para funÃ§Ã£o indirecta %s nÃ£o suportada\n"
 
-#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725
+#: elf32-ppc.c:8441 elf32-ppc.c:8472 elf32-ppc.c:8563 elf32-ppc.c:8659
 #, c-format
 msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
 msgstr "%pB: o alvo (%s) de uma relocalizaÃ§Ã£o %s estÃ¡ na secÃ§Ã£o de saÃ­da errada (%s)"
 
-#: elf32-ppc.c:8855 elf32-ppc.c:8873
-msgid "%P: %H: %s relocation unsupported for bss-plt\n"
-msgstr "%P: %pB: relocalizaÃ§Ã£o %s ainda nÃ£o Ã© suportada para sÃ­mbolo %s\n"
+#: elf32-ppc.c:8814 elf32-ppc.c:8832
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
+msgstr "%X%P: %H: %s relocalizaÃ§Ã£o nÃ£o suportada para bss-plt\n"
 
-#: elf32-ppc.c:8954
+#: elf32-ppc.c:8913
 #, c-format
 msgid "%H: error: %s against `%s' not a multiple of %u\n"
 msgstr "%H: erro: %s contra \"%s\" nÃ£o Ã©  mÃºltiplo de %u\n"
 
-#: elf32-ppc.c:8983
+#: elf32-ppc.c:8942
 #, c-format
 msgid "%H: unresolvable %s relocation against symbol `%s'\n"
 msgstr "%H: relocalizaÃ§Ã£o %s insolÃºvel contra sÃ­mbolo \"%s\"\n"
 
-#: elf32-ppc.c:9064
+#: elf32-ppc.c:9023
 #, c-format
 msgid "%H: %s reloc against `%s': error %d\n"
 msgstr "%H: %s reloc contra \"%s\": erro %d\n"
 
-#: elf32-ppc.c:9959 elf64-ppc.c:15715
+#: elf32-ppc.c:9904
 msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
 msgstr "%X%P: relocalizaÃ§Ãµes de texto e funÃ§Ãµes indirectas GNU resultarÃ£o em segfault em tempo de execuÃ§Ã£o\n"
 
-#: elf32-ppc.c:9963 elf64-ppc.c:15719
+#: elf32-ppc.c:9908 elf64-ppc.c:17667
 msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
 msgstr "%P: aviso: relocalizaÃ§Ãµes de texto e funÃ§Ãµes indirectas GNU podem resultar em segfault em tempo de execuÃ§Ã£o\n"
 
-#: elf32-ppc.c:10008
+#: elf32-ppc.c:9953
 #, c-format
 msgid "%s not defined in linker created %pA"
 msgstr "%s nÃ£o definido em linker criado %pA"
 
-#: elf32-pru.c:579 elf32-pru.c:1472
+#: elf32-pru.c:582 elf32-pru.c:1475
 #, c-format
 msgid "error: %pB: old incompatible object file detected"
 msgstr "erro: %pB: detectado ficheiro objecto antigo incompatÃ­vel"
@@ -3063,7 +3276,7 @@ msgstr "Erro interno: sub-transporte de
 msgid "warning: RL78_SYM reloc with an unknown symbol"
 msgstr "Aviso: reloc RL78_SYM com sÃ­mbolo desconhecido"
 
-#: elf32-rl78.c:1084 elf32-rx.c:1456
+#: elf32-rl78.c:1084 elf32-rx.c:1461
 #, c-format
 msgid "%pB(%pA): error: call to undefined function '%s'"
 msgstr "%pB(%pA): erro: chamada a funÃ§Ã£o nÃ£o definida \"%s\""
@@ -3092,17 +3305,17 @@ msgstr "- %pB Ã© 64-bit, %pB nÃ£o Ã©"
 msgid " [64-bit doubles]"
 msgstr " [64-bit doubles]"
 
-#: elf32-rx.c:605
+#: elf32-rx.c:607
 #, c-format
 msgid "%pB:%pA: table entry %s outside table"
 msgstr "%pB:%pA: entrada de tabela %s fora da tabela"
 
-#: elf32-rx.c:612
+#: elf32-rx.c:614
 #, c-format
 msgid "%pB:%pA: table entry %s not word-aligned within table"
 msgstr "%pB:%pA: entrada de tabela %s nÃ£o alinhado dentro da tabela"
 
-#: elf32-rx.c:684
+#: elf32-rx.c:689
 #, c-format
 msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
 msgstr "%pB:%pA: aviso: reloc Red Hat obsoleta %s detectada contra: %s"
@@ -3111,69 +3324,69 @@ msgstr "%pB:%pA: aviso: reloc Red Hat ob
 #. an absolute address is being computed.  There are special cases
 #. for relocs against symbols that are known to be referenced in
 #. crt0.o before the PID base address register has been initialised.
-#: elf32-rx.c:704
+#: elf32-rx.c:709
 #, c-format
 msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
 msgstr "%pB(%pA): relocalizaÃ§Ã£o PID insegura %s em %#<PRIx64> (contra %s em %s)"
 
-#: elf32-rx.c:1288
+#: elf32-rx.c:1293
 msgid "warning: RX_SYM reloc with an unknown symbol"
 msgstr "Aviso: reloc RX_SYM com sÃ­mbolo desconhecido"
 
-#: elf32-rx.c:3167
+#: elf32-rx.c:3173
 #, c-format
 msgid "there is a conflict merging the ELF header flags from %pB"
 msgstr "HÃ¡ um conflito na uniÃ£o das bandeira do cabeÃ§alho ELF de %pB"
 
-#: elf32-rx.c:3170
+#: elf32-rx.c:3176
 #, c-format
 msgid "  the input  file's flags: %s"
 msgstr "  bandeiras fich. entrada: %s"
 
-#: elf32-rx.c:3172
+#: elf32-rx.c:3178
 #, c-format
 msgid "  the output file's flags: %s"
 msgstr "  bandeiras fich. saÃ­da:   %s"
 
-#: elf32-rx.c:3792
+#: elf32-rx.c:3785
 #, c-format
 msgid "%pB:%pA: table %s missing corresponding %s"
 msgstr "%pB:%pA: tabela %s com correspondente %s em falta"
 
-#: elf32-rx.c:3800
+#: elf32-rx.c:3793
 #, c-format
 msgid "%pB:%pA: %s and %s must be in the same input section"
 msgstr "%pB:%pA: %s e %s tÃªm de estar na mesma secÃ§Ã£o de entrada"
 
-#: elf32-s390.c:2140 elf64-s390.c:2095
+#: elf32-s390.c:2009 elf64-s390.c:1963
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o invÃ¡lida para relocalizaÃ§Ã£o TLS %s"
 
-#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754
+#: elf32-score.c:1524 elf32-score7.c:1385 elfxx-mips.c:3798
 msgid "not enough GOT space for local GOT entries"
 msgstr "espaÃ§o GOT insuficiente para entradas GOT locais"
 
-#: elf32-score.c:2746
+#: elf32-score.c:2756
 msgid "address not word aligned"
 msgstr "endereÃ§o nÃ£o alinhado por word"
 
-#: elf32-score.c:2827 elf32-score7.c:2632
+#: elf32-score.c:2837 elf32-score7.c:2642
 #, c-format
 msgid "%pB: malformed reloc detected for section %pA"
 msgstr "%pB: reloc malformada detectada para secÃ§Ã£o %pA"
 
-#: elf32-score.c:2881 elf32-score7.c:2686
+#: elf32-score.c:2891 elf32-score7.c:2696
 #, c-format
 msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: reloc CALL15 em %#<PRIx64> nÃ£o contra sÃ­mbolo global"
 
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3999 elf32-score7.c:3804
 #, c-format
 msgid " [pic]"
 msgstr " [pic]"
 
-#: elf32-score.c:4007 elf32-score7.c:3812
+#: elf32-score.c:4003 elf32-score7.c:3808
 #, c-format
 msgid " [fix dep]"
 msgstr " [fix dep]"
@@ -3183,157 +3396,153 @@ msgstr " [fix dep]"
 msgid "%pB: warning: linking PIC files with non-PIC files"
 msgstr "%pB: aviso: a ligar ficheiros PIC com ficheiros nÃ£o-PIC"
 
-#: elf32-sh.c:533
+#: elf32-sh.c:532
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
 msgstr "%pB: %#<PRIx64>: aviso: R_SH_USES aponta para insn 0x%x nÃ£o reconhecido"
 
-#: elf32-sh.c:3633
-msgid "unexpected STO_SH5_ISA32 on local symbol is not handled"
-msgstr "STO_SH5_ISA32 inesperado em sÃ­mbolo local nÃ£o Ã© gerido"
-
-#: elf32-sh.c:3880
+#: elf32-sh.c:3752
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
 msgstr "%pB: %#<PRIx64>: fatal: ramo alvo nÃ£o alinhado para relocalizaÃ§Ã£o relax-support"
 
-#: elf32-sh.c:3910 elf32-sh.c:3926
+#: elf32-sh.c:3782 elf32-sh.c:3798
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: fatal: relocalizaÃ§Ã£o %s desalinhada %#<PRIx64>"
 
-#: elf32-sh.c:3942
+#: elf32-sh.c:3814
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocation %<PRId64> not in range -32..32"
 msgstr "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocalizaÃ§Ã£o %<PRId64> fora do intervalo -32..32"
 
-#: elf32-sh.c:3958
+#: elf32-sh.c:3830
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocation %<PRId64> not in range -32..32"
 msgstr "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocalizaÃ§Ã£o %<PRId64> fora do intervalo -32..32"
 
-#: elf32-sh.c:4088 elf32-sh.c:4483
+#: elf32-sh.c:3960 elf32-sh.c:4355
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot emit fixup to `%s' in read-only section"
 msgstr "%pB(%pA+%#<PRIx64>): impossÃ­vel emitir fixup a \"%s\" em secÃ§Ã£o sÃ³ de leitura"
 
-#: elf32-sh.c:4586
+#: elf32-sh.c:4458
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
 msgstr "%pB(%pA+%#<PRIx64>): relocalizaÃ§Ã£o %s contra sÃ­mbolo externo \"%s\""
 
-#: elf32-sh.c:4705
+#: elf32-sh.c:4577
 #, c-format
 msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o GD->LE Ã© muito pequeno: %#<PRIx64>"
 
 #. The backslash is to prevent bogus trigraph detection.
-#: elf32-sh.c:4723
+#: elf32-sh.c:4595
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o inesperada %#04X (esperada 0xd4??)"
 
-#: elf32-sh.c:4731
+#: elf32-sh.c:4603
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o inesperada %#04X (esperada 0xc7??)"
 
-#: elf32-sh.c:4738
+#: elf32-sh.c:4610
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o inesperada %#04X (esperada 0xd1??)"
 
-#: elf32-sh.c:4745
+#: elf32-sh.c:4617
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o inesperada %#04X (esperada 0x310c)"
 
-#: elf32-sh.c:4752
+#: elf32-sh.c:4624
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o inesperada %#04X (esperada 0x410b)"
 
-#: elf32-sh.c:4759
+#: elf32-sh.c:4631
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o inesperada %#04X (esperada 0x34cc)"
 
-#: elf32-sh.c:4794
+#: elf32-sh.c:4666
 #, c-format
 msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o IE->LE Ã© muito pequeno: %#<PRIx64>"
 
-#: elf32-sh.c:4812
+#: elf32-sh.c:4684
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o inesperada %#04X (esperada 0xd0??: mov.l)"
 
-#: elf32-sh.c:4821
+#: elf32-sh.c:4693
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o inesperada %#04X (esperada 0x0?12: stc)"
 
-#: elf32-sh.c:4828
+#: elf32-sh.c:4700
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
 msgstr "%pB(%pA+%#<PRIx64>): instruÃ§Ã£o inesperada %#04X (esperada 0x0?ce: mov.l)"
 
-#: elf32-sh.c:4943
+#: elf32-sh.c:4815
 #, c-format
 msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o GD->IE Ã© muito pequeno: %#<PRIx64>"
 
-#: elf32-sh.c:5011
+#: elf32-sh.c:4883
 #, c-format
 msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): desvio em relocalizaÃ§Ã£o para translacÃ§Ã£o LD->LE Ã© muito pequeno: %#<PRIx64>"
 
-#: elf32-sh.c:5139
+#: elf32-sh.c:5011
 #, c-format
 msgid "%X%C: relocation to \"%s\" references a different segment\n"
 msgstr "%X%C: relocalizaÃ§Ã£o para \"%s\" referencia um segmento diferente\n"
 
-#: elf32-sh.c:5146
+#: elf32-sh.c:5018
 #, c-format
 msgid "%C: warning: relocation to \"%s\" references a different segment\n"
 msgstr "%C: aviso: relocalizaÃ§Ã£o para \"%s\" referencia um segmento diferente\n"
 
-#: elf32-sh.c:5651 elf32-sh.c:5733
+#: elf32-sh.c:5477 elf32-sh.c:5559
 #, c-format
 msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
 msgstr "%pB: \"%s\" acedido como sÃ­mbolo normal e FDPIC em simultÃ¢neo"
 
-#: elf32-sh.c:5657 elf32-sh.c:5738
+#: elf32-sh.c:5483 elf32-sh.c:5564
 #, c-format
 msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
 msgstr "%pB: \"%s\" acedido como sÃ­mbolo local FDPIC e thread em simultÃ¢neo"
 
-#: elf32-sh.c:5688
+#: elf32-sh.c:5514
 #, c-format
 msgid "%pB: Function descriptor relocation with non-zero addend"
 msgstr "%pB: relocalizaÃ§Ã£o de descritor de funÃ§Ã£o com adenda nÃ£o-zero"
 
-#: elf32-sh.c:5895 elf64-alpha.c:4691
+#: elf32-sh.c:5721 elf64-alpha.c:4662
 #, c-format
 msgid "%pB: TLS local exec code cannot be linked into shared objects"
 msgstr "%pB: cÃ³digo exec TLS local nÃ£o pode ser ligado a objectos partilhados"
 
-#: elf32-sh.c:6010
+#: elf32-sh.c:5836
 #, c-format
 msgid "%pB: uses %s instructions while previous modules use %s instructions"
 msgstr "%pB: usa instruÃ§Ãµes %s enquanto os mÃ³dulos anteriores usam instruÃ§Ãµes %s"
 
-#: elf32-sh.c:6022
+#: elf32-sh.c:5848
 #, c-format
 msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture"
 msgstr "erro interno: uniÃ£o da arquitectura \"%s\" com a arquitectura \"%s\" produziu uma arquitectura desconhecida"
 
-#: elf32-sh.c:6059
+#: elf32-sh.c:5889
 #, c-format
 msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
 msgstr "%pB: usa instruÃ§Ãµes incompatÃ­veis com instruÃ§Ãµes usadas em mÃ³dulos anteriores"
 
-#: elf32-sh.c:6072
+#: elf32-sh.c:5902
 #, c-format
 msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
 msgstr "%pB: tentativa de misturar objectos FDPIC e nÃ£o-FDPIC"
@@ -3348,82 +3557,87 @@ msgstr "%pB: compilado para um sistema 6
 msgid "%pB: linking little endian files with big endian files"
 msgstr "%pB: a ligar ficheiros little endian com ficheiros big endian"
 
-#: elf32-spu.c:732
+#: elf32-sparc.c:157
+#, c-format
+msgid "%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr "%pB: valor de mÃ¡quina sparc \"%lu\" nÃ£o gerido detectado durante o processamento de escrita"
+
+#: elf32-spu.c:736
 msgid "%X%P: overlay section %pA does not start on a cache line\n"
 msgstr "%X%P: secÃ§Ã£o de sobreposiÃ§Ã£o %pA nÃ£o comeÃ§a numa linha de cache.\n"
 
-#: elf32-spu.c:740
+#: elf32-spu.c:744
 msgid "%X%P: overlay section %pA is larger than a cache line\n"
 msgstr "%X%P: secÃ§Ã£o de sobreposiÃ§Ã£o %pA Ã© maior que uma linha de cache.\n"
 
-#: elf32-spu.c:760
+#: elf32-spu.c:764
 msgid "%X%P: overlay section %pA is not in cache area\n"
 msgstr "%X%P: secÃ§Ã£o de sobreposiÃ§Ã£o %pA nÃ£o estÃ¡ numa Ã¡rea de cache.\n"
 
-#: elf32-spu.c:801
+#: elf32-spu.c:805
 #, c-format
 msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n"
 msgstr "%X%P: secÃ§Ãµes de sobreposiÃ§Ã£o %pA e %pA nÃ£o comeÃ§am no mesmo endereÃ§o.\n"
 
-#: elf32-spu.c:1027
+#: elf32-spu.c:1031
 #, c-format
 msgid "warning: call to non-function symbol %s defined in %pB"
 msgstr "aviso: chamada a sÃ­mbolo nÃ£o-funÃ§Ã£o %s definida em %pB"
 
-#: elf32-spu.c:1377
+#: elf32-spu.c:1381
 #, c-format
 msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
 msgstr "%pA:0x%v lrlive .brinfo (%u) difere da anÃ¡lise (%u)\n"
 
-#: elf32-spu.c:1909
+#: elf32-spu.c:1911
 #, c-format
 msgid "%pB is not allowed to define %s"
 msgstr "%pB nÃ£o tem permissÃ£o para definir %s"
 
-#: elf32-spu.c:1917
+#: elf32-spu.c:1919
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr "nÃ£o tem permissÃ£o para definir %s num script"
 
-#: elf32-spu.c:1951
+#: elf32-spu.c:1953
 #, c-format
 msgid "%s in overlay section"
 msgstr "%s em secÃ§Ã£o de sobreposiÃ§Ã£o"
 
-#: elf32-spu.c:1980
+#: elf32-spu.c:1982
 msgid "overlay stub relocation overflow"
 msgstr "transporte de relocalizaÃ§Ã£o fictÃ­cia de sobreposiÃ§Ã£o"
 
-#: elf32-spu.c:1989 elf64-ppc.c:13230
+#: elf32-spu.c:1991 elf64-ppc.c:14761
 msgid "stubs don't match calculated size"
 msgstr "fictÃ­cios nÃ£o correspondem ao tamanho calculado"
 
-#: elf32-spu.c:2572
+#: elf32-spu.c:2574
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr "aviso: %s sobrepÃµe-se a %s\n"
 
-#: elf32-spu.c:2588
+#: elf32-spu.c:2590
 #, c-format
 msgid "warning: %s exceeds section size\n"
 msgstr "aviso: %s excede o tamanho da secÃ§Ã£o\n"
 
-#: elf32-spu.c:2620
+#: elf32-spu.c:2622
 #, c-format
 msgid "%pA:0x%v not found in function table\n"
 msgstr "%pA:0x%v nÃ£o encontrado na tabela de funÃ§Ã£o\n"
 
-#: elf32-spu.c:2761
+#: elf32-spu.c:2763
 #, c-format
 msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n"
 msgstr "%pB(%pA+0x%v): chamada a secÃ§Ã£o nÃ£o-cÃ³digo %pB(%pA), anÃ¡lise incompleta\n"
 
-#: elf32-spu.c:3330
+#: elf32-spu.c:3329
 #, c-format
 msgid "stack analysis will ignore the call from %s to %s\n"
 msgstr "AnÃ¡lise de stack ignorarÃ¡ a chamada de %s a %s\n"
 
-#: elf32-spu.c:4027
+#: elf32-spu.c:4026
 msgid "  calls:\n"
 msgstr "  chamadas:\n"
 
@@ -3483,320 +3697,319 @@ msgstr "%F%P: impossÃ­vel construir fict
 msgid "fatal error while creating .fixup"
 msgstr "erro fatal ao criar .fixup"
 
-#: elf32-spu.c:5049
+#: elf32-spu.c:5050
 #, c-format
 msgid "%pB(%s+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr "%pB(%s+%#<PRIx64>): relocalizaÃ§Ã£o %s insolÃºvel comtra sÃ­mbolo \"%s\""
 
-#: elf32-tic6x.c:1628
+#: elf32-tic6x.c:1588
 msgid "warning: generating a shared library containing non-PIC code"
 msgstr "aviso: a gerar uma biblioteca partilhada contendo cÃ³digo nÃ£o PIC"
 
-#: elf32-tic6x.c:1633
+#: elf32-tic6x.c:1593
 msgid "warning: generating a shared library containing non-PID code"
 msgstr "aviso: a gerar uma biblioteca partilhada contendo cÃ³digo nÃ£o PID"
 
-#: elf32-tic6x.c:2493
+#: elf32-tic6x.c:2434
 #, c-format
 msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
 msgstr "%pB: relocalizaÃ§Ã£o relativa a SB mas __c6xabi_DSBT_BASE nÃ£o definido"
 
-#: elf32-tic6x.c:3629
+#: elf32-tic6x.c:3498
 #, c-format
 msgid "%pB: error: unknown mandatory EABI object attribute %d"
 msgstr "%pB: erro: atributo de objecto EABI obrigatÃ³rio desconhecido %d"
 
-#: elf32-tic6x.c:3638
+#: elf32-tic6x.c:3507
 #, c-format
 msgid "%pB: warning: unknown EABI object attribute %d"
 msgstr "%pB: aviso: atributo de objecto EABI desconhecido %d"
 
-#: elf32-tic6x.c:3752 elf32-tic6x.c:3761
+#: elf32-tic6x.c:3625 elf32-tic6x.c:3634
 #, c-format
 msgid "error: %pB requires more stack alignment than %pB preserves"
 msgstr "erro: %pB requer mais alinhamento de stack do que %pB preserva"
 
-#: elf32-tic6x.c:3771 elf32-tic6x.c:3780
+#: elf32-tic6x.c:3644 elf32-tic6x.c:3653
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_alignment value in %pB"
 msgstr "erro: valor Tag_ABI_array_object_alignment desconhecido em %pB"
 
-#: elf32-tic6x.c:3789 elf32-tic6x.c:3798
+#: elf32-tic6x.c:3662 elf32-tic6x.c:3671
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB"
 msgstr "erro: valor Tag_ABI_array_object_align_expected desconhecido em %pB"
 
-#: elf32-tic6x.c:3807 elf32-tic6x.c:3815
+#: elf32-tic6x.c:3680 elf32-tic6x.c:3688
 #, c-format
 msgid "error: %pB requires more array alignment than %pB preserves"
 msgstr "erro: %pB requer mais alinhamento de matriz do que %pB preserva"
 
-#: elf32-tic6x.c:3838
+#: elf32-tic6x.c:3711
 #, c-format
 msgid "warning: %pB and %pB differ in wchar_t size"
 msgstr "aviso: %pB e %pB diferem em tamanho wchar_t"
 
-#: elf32-tic6x.c:3857
+#: elf32-tic6x.c:3730
 #, c-format
 msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
 msgstr "aviso: %pB e %pB diferem sobre se o cÃ³digo foi compilado para DSBT"
 
-#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:9530
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2579
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:1397
+#: elfnn-aarch64.c:9711 elfnn-riscv.c:3253
 #, c-format
 msgid "discarded output section: `%pA'"
 msgstr "secÃ§Ã£o de saÃ­da descartada: \"%pA\""
 
-#: elf32-v850.c:153
+#: elf32-v850.c:152
 #, c-format
 msgid "variable `%s' cannot occupy in multiple small data regions"
 msgstr "VariÃ¡vel \"%s\" nÃ£o pode ocupar mÃºltiplas pequenas regiÃµes de dados"
 
-#: elf32-v850.c:156
+#: elf32-v850.c:155
 #, c-format
 msgid "variable `%s' can only be in one of the small, zero, and tiny data regions"
 msgstr "VariÃ¡vel \"%s\" sÃ³ pode estar numa das regiÃµes de dados pequena, zero e minÃºscula"
 
-#: elf32-v850.c:159
+#: elf32-v850.c:158
 #, c-format
 msgid "variable `%s' cannot be in both small and zero data regions simultaneously"
 msgstr "VariÃ¡vel \"%s\" nÃ£o pode estar nas regiÃµes de dados pequena e zero em simultÃ¢neo"
 
-#: elf32-v850.c:162
+#: elf32-v850.c:161
 #, c-format
 msgid "variable `%s' cannot be in both small and tiny data regions simultaneously"
 msgstr "VariÃ¡vel \"%s\" nÃ£o pode estar nas regiÃµes de dados pequena e minÃºscula em simultÃ¢neo"
 
-#: elf32-v850.c:165
+#: elf32-v850.c:164
 #, c-format
 msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously"
 msgstr "VariÃ¡vel \"%s\" nÃ£o pode estar nas regiÃµes de dados zero e minÃºscula em simultÃ¢neo"
 
-#: elf32-v850.c:463
+#: elf32-v850.c:466
 msgid "failed to find previous HI16 reloc"
 msgstr "Falha ao procurar reloc HI16 anterior"
 
-#: elf32-v850.c:2303
+#: elf32-v850.c:2306
 msgid "could not locate special linker symbol __gp"
 msgstr "impossÃ­vel localizar sÃ­mbolo linker especial __gp"
 
-#: elf32-v850.c:2307
+#: elf32-v850.c:2310
 msgid "could not locate special linker symbol __ep"
 msgstr "impossÃ­vel localizar sÃ­mbolo linker especial __ep"
 
-#: elf32-v850.c:2311
+#: elf32-v850.c:2314
 msgid "could not locate special linker symbol __ctbp"
 msgstr "impossÃ­vel localizar sÃ­mbolo linker especial __ctbp"
 
-#: elf32-v850.c:2532
+#: elf32-v850.c:2535
 #, c-format
 msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"
 msgstr "erro: %pB precisa de alinhamento 8-byte mas %pB estÃ¡ definido para alinhamento 4-byte"
 
-#: elf32-v850.c:2548
+#: elf32-v850.c:2551
 #, c-format
 msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles"
 msgstr "erro: %pB usa doubles 64-bit mas %pB usa doubles 32-bit"
 
-#: elf32-v850.c:2563
+#: elf32-v850.c:2566
 #, c-format
 msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
 msgstr "erro: %pB usa FPU-3.0 mas %pB sÃ³ suporta FPU-2.0"
 
-#: elf32-v850.c:2595
+#: elf32-v850.c:2598
 #, c-format
 msgid " alignment of 8-byte entities: "
 msgstr " alinhamento de entidades 8-byte: "
 
-#: elf32-v850.c:2598
+#: elf32-v850.c:2601
 #, c-format
 msgid "4-byte"
 msgstr "4-byte"
 
-#: elf32-v850.c:2599
+#: elf32-v850.c:2602
 #, c-format
 msgid "8-byte"
 msgstr "8-byte"
 
-#: elf32-v850.c:2600 elf32-v850.c:2612
+#: elf32-v850.c:2603 elf32-v850.c:2615
 #, c-format
 msgid "not set"
 msgstr "nÃ£o definido"
 
-#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636
-#: elf32-v850.c:2647 elf32-v850.c:2658
+#: elf32-v850.c:2604 elf32-v850.c:2616 elf32-v850.c:2628 elf32-v850.c:2639
+#: elf32-v850.c:2650 elf32-v850.c:2661
 #, c-format
 msgid "unknown: %x"
 msgstr "desconhecido: %x"
 
-#: elf32-v850.c:2607
+#: elf32-v850.c:2610
 #, c-format
 msgid " size of doubles: "
 msgstr " tamanho de doubles: "
 
-#: elf32-v850.c:2610
+#: elf32-v850.c:2613
 #, c-format
 msgid "4-bytes"
 msgstr "4-bytes"
 
-#: elf32-v850.c:2611
+#: elf32-v850.c:2614
 #, c-format
 msgid "8-bytes"
 msgstr "8-bytes"
 
-#: elf32-v850.c:2619
+#: elf32-v850.c:2622
 #, c-format
 msgid " FPU support required: "
 msgstr " requerido suporte FPU: "
 
-#: elf32-v850.c:2622
+#: elf32-v850.c:2625
 #, c-format
 msgid "FPU-2.0"
 msgstr "FPU-2.0"
 
-#: elf32-v850.c:2623
+#: elf32-v850.c:2626
 #, c-format
 msgid "FPU-3.0"
 msgstr "FPU-3.0"
 
-#: elf32-v850.c:2624
+#: elf32-v850.c:2627
 #, c-format
 msgid "none"
 msgstr "nenhum"
 
-#: elf32-v850.c:2631
+#: elf32-v850.c:2634
 #, c-format
 msgid "SIMD use: "
 msgstr "uso SIMD: "
 
-#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656
+#: elf32-v850.c:2637 elf32-v850.c:2648 elf32-v850.c:2659
 #, c-format
 msgid "yes"
 msgstr "sim"
 
-#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657
+#: elf32-v850.c:2638 elf32-v850.c:2649 elf32-v850.c:2660
 #, c-format
 msgid "no"
 msgstr "nÃ£o"
 
-#: elf32-v850.c:2642
+#: elf32-v850.c:2645
 #, c-format
 msgid "CACHE use: "
 msgstr "uso CACHE: "
 
-#: elf32-v850.c:2653
+#: elf32-v850.c:2656
 #, c-format
 msgid "MMU use: "
 msgstr "uso MMU: "
 
-#: elf32-v850.c:2820 elf32-v850.c:2876
+#: elf32-v850.c:2823 elf32-v850.c:2879
 #, c-format
 msgid "%pB: architecture mismatch with previous modules"
 msgstr "%pB: troca de arquitectura com mÃ³dulos anteriores"
 
 #. xgettext:c-format.
-#: elf32-v850.c:2894
+#: elf32-v850.c:2897
 #, c-format
 msgid "private flags = %lx: "
 msgstr "bandeiras privadas = %lx: "
 
-#: elf32-v850.c:2899
+#: elf32-v850.c:2902
 #, c-format
 msgid "unknown v850 architecture"
 msgstr "arquitectura V850 desconhecida"
 
-#: elf32-v850.c:2901
+#: elf32-v850.c:2904
 #, c-format
 msgid "v850 E3 architecture"
 msgstr "arquitectura v850 E3"
 
-#: elf32-v850.c:2903 elf32-v850.c:2910
+#: elf32-v850.c:2906 elf32-v850.c:2913
 #, c-format
 msgid "v850 architecture"
 msgstr "arquitectura v850"
 
-#: elf32-v850.c:2911
+#: elf32-v850.c:2914
 #, c-format
 msgid "v850e architecture"
 msgstr "arquitectura v850e"
 
-#: elf32-v850.c:2912
+#: elf32-v850.c:2915
 #, c-format
 msgid "v850e1 architecture"
 msgstr "arquitectura v850e1"
 
-#: elf32-v850.c:2913
+#: elf32-v850.c:2916
 #, c-format
 msgid "v850e2 architecture"
 msgstr "arquitectura v850e2"
 
-#: elf32-v850.c:2914
+#: elf32-v850.c:2917
 #, c-format
 msgid "v850e2v3 architecture"
 msgstr "arquitectura v850e2v3"
 
-#: elf32-v850.c:2915
+#: elf32-v850.c:2918
 #, c-format
 msgid "v850e3v5 architecture"
 msgstr "arquitectura v850e3v5"
 
-#: elf32-v850.c:3609 elf32-v850.c:3848
+#: elf32-v850.c:3591 elf32-v850.c:3830
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
 msgstr "%pB: %#<PRIx64>: aviso: %s aponta para insns nÃ£o reconhecido"
 
-#: elf32-v850.c:3619 elf32-v850.c:3858
+#: elf32-v850.c:3601 elf32-v850.c:3840
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
 msgstr "%pB: %#<PRIx64>: aviso: %s aponta para insn %#x nÃ£o reconhecido"
 
-#: elf32-v850.c:3665 elf32-v850.c:3893
+#: elf32-v850.c:3647 elf32-v850.c:3875
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
 msgstr "%pB: %#<PRIx64>: aviso: %s aponta para reloc nÃ£o reconhecida"
 
-#: elf32-v850.c:3705
+#: elf32-v850.c:3687
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: aviso: %s aponta para reloc nÃ£o reconhecida  %#<PRIx64>"
 
-#: elf32-vax.c:540
+#: elf32-vax.c:539
 #, c-format
 msgid " [nonpic]"
 msgstr " [nonpic]"
 
-#: elf32-vax.c:543
+#: elf32-vax.c:542
 #, c-format
 msgid " [d-float]"
 msgstr " [d-float]"
 
-#: elf32-vax.c:546
+#: elf32-vax.c:545
 #, c-format
 msgid " [g-float]"
 msgstr " [g-float]"
 
-#: elf32-vax.c:632
+#: elf32-vax.c:631
 #, c-format
 msgid "%pB: warning: GOT addend of %<PRId64> to `%s' does not match previous GOT addend of %<PRId64>"
 msgstr "%pB: aviso: adenda GOT de %#<PRId64> a \"%s\" nÃ£o corresponde a adenda GOT de %#<PRId64> prÃ©via"
 
-#: elf32-vax.c:1446
+#: elf32-vax.c:1388
 #, c-format
 msgid "%pB: warning: PLT addend of %<PRId64> to `%s' from %pA section ignored"
 msgstr "%pB: aviso: adenda PLT de %#<PRId64> a \"%s\" da secÃ§Ã£o %pA ignorada"
 
-#: elf32-vax.c:1572
+#: elf32-vax.c:1514
 #, c-format
 msgid "%pB: warning: %s relocation against symbol `%s' from %pA section"
 msgstr "%pB: aviso: relocalizaÃ§Ã£o %s contra sÃ­mbolo \"%s\" da secÃ§Ã£o %pA"
 
-#: elf32-vax.c:1579
+#: elf32-vax.c:1521
 #, c-format
 msgid "%pB: warning: %s relocation to %#<PRIx64> from %pA section"
 msgstr "%pB: aviso: relocalizaÃ§Ã£o %s para %#<PRIx64> da secÃ§Ã£o %pA"
 
-#: elf32-visium.c:821
+#: elf32-visium.c:824
 #, c-format
 msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
 msgstr "%pB: compilado %s -mtune=%s e ligado com mÃ³dulos compilados %s -mtune=%s"
@@ -3811,238 +4024,261 @@ msgstr "cpu=XGATE]"
 msgid "error reading cpu type from elf private data"
 msgstr "erro ao ler tipo de cpu de dados privados elf"
 
-#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353
-#: elf64-ia64.c:2353
+#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2076 elfnn-ia64.c:2345
 msgid "non-zero addend in @fptr reloc"
 msgstr "adenda nÃ£o-zero em reloc @fptr"
 
-#: elf32-xtensa.c:937
+#: elf32-xtensa.c:1002
 #, c-format
 msgid "%pB(%pA): invalid property table"
 msgstr "%pB(%pA): tabela de propriedade invÃ¡lida"
 
-#: elf32-xtensa.c:2675
+#: elf32-xtensa.c:2734
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): desvio de relocalizaÃ§Ã£o fora do intervalo (tamanho=%#<PRIx64>)"
 
-#: elf32-xtensa.c:2758 elf32-xtensa.c:2881
+#: elf32-xtensa.c:2817 elf32-xtensa.c:2940
 msgid "dynamic relocation in read-only section"
 msgstr "relocalizaÃ§Ã£o dinÃ¢mica em secÃ§Ã£o sÃ³ de leitura"
 
-#: elf32-xtensa.c:2858
+#: elf32-xtensa.c:2917
 msgid "TLS relocation invalid without dynamic sections"
 msgstr "relocalizaÃ§Ã£o TLS invÃ¡lida sem secÃ§Ãµes dinÃ¢micas"
 
-#: elf32-xtensa.c:3070
+#: elf32-xtensa.c:3130
 msgid "internal inconsistency in size of .got.loc section"
 msgstr "inconsistÃªncia interna no tamanho da secÃ§Ã£o .got.loc"
 
-#: elf32-xtensa.c:3377
+#: elf32-xtensa.c:3436
 #, c-format
 msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
 msgstr "%pB: tipo de mÃ¡quina incompatÃ­vel. SaÃ­da Ã© 0x%x. Entrada Ã© 0x%x"
 
-#: elf32-xtensa.c:4608 elf32-xtensa.c:4616
+#: elf32-xtensa.c:4735 elf32-xtensa.c:4743
 msgid "attempt to convert L32R/CALLX to CALL failed"
 msgstr "Tentativa de converter L32R/CALLX para CALL falhou"
 
-#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899
+#: elf32-xtensa.c:6571 elf32-xtensa.c:6650 elf32-xtensa.c:8076
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): impossÃ­vel descodificar instruÃ§Ã£o; possÃ­vel troca de configuraÃ§Ã£o"
 
-#: elf32-xtensa.c:7638
+#: elf32-xtensa.c:7817
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): impossÃ­vel descodificar instruÃ§Ã£o para relocalizaÃ§Ã£o XTENSA_ASM_SIMPLIFY; possÃ­vel troca de configuraÃ§Ã£o"
 
-#: elf32-xtensa.c:9493
+#: elf32-xtensa.c:9675
 msgid "invalid relocation address"
 msgstr "EndereÃ§o de relocalizaÃ§Ã£o invÃ¡lido"
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9766
 msgid "overflow after relaxation"
 msgstr "transporte apÃ³s relaxe"
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10912
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
 msgstr "%pB(%pA+%#<PRIx64>): fix inesperado para relocalizaÃ§Ã£o %s"
 
-#: elf64-alpha.c:472
+#: elf32-z80.c:473
+#, c-format
+msgid "%pB: unsupported bfd mach %#lx"
+msgstr "%pB: bfd mach %#lx nÃ£o suportado"
+
+#: elf32-z80.c:518
+#, c-format
+msgid "%pB: unsupported mach %#x"
+msgstr "%pB: mach %#x nÃ£o suportado"
+
+#: elf32-z80.c:546
+#, c-format
+msgid "%pB: unsupported arch %#x"
+msgstr "%pB: arch %#x nÃ£o suportado"
+
+#: elf64-alpha.c:474
 msgid "GPDISP relocation did not find ldah and lda instructions"
 msgstr "relocalizaÃ§Ã£o GPDISP nÃ£o encontrou instruÃ§Ãµes ldah e lda"
 
-#: elf64-alpha.c:2463
+#: elf64-alpha.c:2002 elf64-alpha.c:2697 elflink.c:15091
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%pB: relocalizaÃ§Ã£o dinÃ¢mica contra \"%pT\" em secÃ§Ã£o sÃ³ de leitura \"%pA\"\n"
+
+#: elf64-alpha.c:2454
 #, c-format
 msgid "%pB: .got subsegment exceeds 64K (size %d)"
 msgstr "%pB: sub-segmento .got excede 64K (tamanho %d)"
 
-#: elf64-alpha.c:3018 elf64-alpha.c:3214
+#: elf64-alpha.c:2992 elf64-alpha.c:3187
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
 msgstr "%pB: %pA+%#<PRIx64>: aviso: relocalizaÃ§Ã£o %s contra insn inesperado"
 
-#: elf64-alpha.c:4415 elf64-alpha.c:4428
+#: elf64-alpha.c:4386 elf64-alpha.c:4399
 #, c-format
 msgid "%pB: gp-relative relocation against dynamic symbol %s"
 msgstr "%pB: relocalizaÃ§Ã£o gp-relative contra sÃ­mbolo dinÃ¢mico %s"
 
-#: elf64-alpha.c:4484
+#: elf64-alpha.c:4455
 #, c-format
 msgid "%pB: change in gp: BRSGP %s"
 msgstr "%pB: alteraÃ§Ã£o em gp: BRSGP %s"
 
-#: elf64-alpha.c:4509 mach-o.c:615
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:499
+#: elf64-alpha.c:4480 mach-o.c:616 elfnn-riscv.c:619
 msgid "<unknown>"
 msgstr "<desconhecido>"
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4486
 #, c-format
 msgid "%pB: !samegp reloc against symbol without .prologue: %s"
 msgstr "%pB: reloc !samegp contra sÃ­mbolo sem .prologue: %s"
 
-#: elf64-alpha.c:4573
+#: elf64-alpha.c:4544
 #, c-format
 msgid "%pB: unhandled dynamic relocation against %s"
 msgstr "%pB: relocalizaÃ§Ã£o dinÃ¢mica contra %s nÃ£o gerida"
 
-#: elf64-alpha.c:4608
+#: elf64-alpha.c:4579
 #, c-format
 msgid "%pB: pc-relative relocation against undefined weak symbol %s"
 msgstr "%pB: relocalizaÃ§Ã£o pc-relative contra sÃ­mbolo fraco %s indefinido"
 
-#: elf64-alpha.c:4674
+#: elf64-alpha.c:4645
 #, c-format
 msgid "%pB: dtp-relative relocation against dynamic symbol %s"
 msgstr "%pB: relocalizaÃ§Ã£o dtp-relative contra sÃ­mbolo dinÃ¢mico %s"
 
-#: elf64-alpha.c:4699
+#: elf64-alpha.c:4670
 #, c-format
 msgid "%pB: tp-relative relocation against dynamic symbol %s"
 msgstr "%pB: relocalizaÃ§Ã£o tp-relative contra sÃ­mbolo dinÃ¢mico %s"
 
+#. Only if it's not an unresolved symbol.
+#: elf64-bpf.c:557
+msgid "internal error: relocation not supported"
+msgstr "erro interno: relocalizaÃ§Ã£o nÃ£o suportada"
+
 #: elf64-gen.c:71
 #, c-format
 msgid "%pB: Relocations in generic ELF (EM: %d)"
 msgstr "%pB: relocalizaÃ§Ãµes em ELF (EM: %d) genÃ©rico"
 
-#: elf64-hppa.c:2081
+#: elf64-hppa.c:2032
 #, c-format
 msgid "stub entry for %s cannot load .plt, dp offset = %<PRId64>"
 msgstr "entrada fictÃ­cia para %s nÃ£o pode carregar .plt, desvio dp = %#<PRId64>"
 
-#: elf64-hppa.c:3286
+#: elf64-hppa.c:3236
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot reach %s"
 msgstr "%pB(%pA+%#<PRIx64>): impossÃ­vel atingir %s"
 
-#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636
+#: elf64-ia64-vms.c:599 elfnn-ia64.c:640
 #, c-format
 msgid "%pB: can't relax br at %#<PRIx64> in section `%pA'; please use brl or indirect branch"
 msgstr "%pB: impossÃ­vel relaxar br em %#<PRIx64> na secÃ§Ã£o \"%pA\". Por favor, use brl ou um ramo indirecto."
 
-#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301
+#: elf64-ia64-vms.c:2031 elfnn-ia64.c:2293
 msgid "@pltoff reloc against local symbol"
 msgstr "reloc @pltoff contra sÃ­mbolo local"
 
-#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712
+#: elf64-ia64-vms.c:3283 elfnn-ia64.c:3670
 #, c-format
 msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
 msgstr "%pB: transporte no segmento de dados curtos (%#<PRIx64> >= 0x400000)"
 
-#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722
+#: elf64-ia64-vms.c:3293 elfnn-ia64.c:3680
 #, c-format
 msgid "%pB: __gp does not cover short data segment"
 msgstr "%pB: __gp nÃ£o cobre o segmento de dados curtos"
 
-#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996
+#: elf64-ia64-vms.c:3563 elfnn-ia64.c:3953
 #, c-format
 msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
 msgstr "%pB: cÃ³digo nÃ£o-pic com relocalizaÃ§Ã£o imm contra sÃ­mbolo dinÃ¢mico \"%s\""
 
-#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064
+#: elf64-ia64-vms.c:3627 elfnn-ia64.c:4021
 #, c-format
 msgid "%pB: @gprel relocation against dynamic symbol %s"
 msgstr "%pB: relocalizaÃ§Ã£o @gprel contra sÃ­mbolo dinÃ¢mico %s"
 
-#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127
+#: elf64-ia64-vms.c:3686 elfnn-ia64.c:4084
 #, c-format
 msgid "%pB: linking non-pic code in a position independent executable"
 msgstr "%pB: a ligar cÃ³digo nÃ£o-pic num executÃ¡vel de posiÃ§Ã£o independente"
 
-#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265
+#: elf64-ia64-vms.c:3788 elfnn-ia64.c:4222
 #, c-format
 msgid "%pB: @internal branch to dynamic symbol %s"
 msgstr "%pB: ramo @internal para sÃ­mbolo dinÃ¢mico %s"
 
-#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268
+#: elf64-ia64-vms.c:3791 elfnn-ia64.c:4225
 #, c-format
 msgid "%pB: speculation fixup to dynamic symbol %s"
 msgstr "%pB: fixup de especulaÃ§Ã£o para sÃ­mbolo dinÃ¢mico %s"
 
-#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271
+#: elf64-ia64-vms.c:3794 elfnn-ia64.c:4228
 #, c-format
 msgid "%pB: @pcrel relocation against dynamic symbol %s"
 msgstr "%pB: relocalizaÃ§Ã£o @pcrel contra sÃ­mbolo dinÃ¢mico %s"
 
-#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468
+#: elf64-ia64-vms.c:3918 elfnn-ia64.c:4425
 msgid "unsupported reloc"
 msgstr "reloc nÃ£o suportado"
 
-#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506
+#: elf64-ia64-vms.c:3955 elfnn-ia64.c:4463
 #, c-format
 msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
 msgstr "%pB: secÃ§Ã£o TLS em falta para relocalizaÃ§Ã£o %s contra \"%s\" em %#<PRIx64> na secÃ§Ã£o \"%pA\"."
 
-#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523
+#: elf64-ia64-vms.c:3972 elfnn-ia64.c:4480
 #, c-format
 msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
 msgstr "%pB: impossÃ­vel relaxar br (%s) para \"%s\" em %#<PRIx64> na secÃ§Ã£o \"%pA\" com tamanho %#<PRIx64> (> 0x1000000)."
 
-#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781
+#: elf64-ia64-vms.c:4268 elfnn-ia64.c:4741
 #, c-format
 msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
 msgstr "%pB: a ligar trap-on-NULL-dereference com ficheiros nÃ£o-trapping"
 
-#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790
+#: elf64-ia64-vms.c:4277 elfnn-ia64.c:4750
 #, c-format
 msgid "%pB: linking big-endian files with little-endian files"
 msgstr "%pB: a ligar ficheiros big-endian com ficheiros little-endian"
 
-#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799
+#: elf64-ia64-vms.c:4286 elfnn-ia64.c:4759
 #, c-format
 msgid "%pB: linking 64-bit files with 32-bit files"
 msgstr "%pB: a ligar ficheiros 64-bit com ficheiros 32-bit"
 
-#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808
+#: elf64-ia64-vms.c:4295 elfnn-ia64.c:4768
 #, c-format
 msgid "%pB: linking constant-gp files with non-constant-gp files"
 msgstr "%pB: a ligar ficheiros constant-gp com ficheiros nÃ£o constant-gp"
 
-#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818
+#: elf64-ia64-vms.c:4305 elfnn-ia64.c:4778
 #, c-format
 msgid "%pB: linking auto-pic files with non-auto-pic files"
 msgstr "%pB: a ligar ficheiros auto-pic com ficheiro nÃ£o auto-pic"
 
-#: elf64-ia64-vms.c:5153 elflink.c:4894
+#: elf64-ia64-vms.c:5152 elflink.c:5148
 #, c-format
 msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
 msgstr "Aviso: alihamento %u de sÃ­mbolo comum \"%s\" em %pB Ã© maior que o alinhamento (%u) da sua secÃ§Ã£o %pA"
 
-#: elf64-ia64-vms.c:5160 elflink.c:4901
+#: elf64-ia64-vms.c:5159 elflink.c:5155
 #, c-format
 msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
 msgstr "Aviso: alinhamento %u do sÃ­mbolo \"%s\" em %pB Ã© menor que %u em %pB"
 
-#: elf64-ia64-vms.c:5176 elflink.c:4918
+#: elf64-ia64-vms.c:5175 elflink.c:5172
 #, c-format
 msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
 msgstr "Aviso: tamanho do sÃ­mbolo \"%s\" mudou de %<PRIu64> em %pB para %<PRIu64> em %pB"
 
-#: elf64-mips.c:4098
+#: elf64-mips.c:4095
 #, c-format
 msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
 msgstr "%pB(%pA): relocalizaÃ§Ã£o %#<PRIu64> tem Ã­ndice de sÃ­mbolos invÃ¡lido %ld"
@@ -4095,159 +4331,183 @@ msgstr "%pB: relocalizaÃ§Ã£o de registo
 msgid "%pB: directive LOCAL valid only with a register or absolute value"
 msgstr "%pB: directiva LOCAL sÃ³ Ã© vÃ¡lida com um registo ou um valor absoluto"
 
-#: elf64-mmix.c:1744
+#: elf64-mmix.c:1742
 #, c-format
 msgid "%pB: LOCAL directive: register $%<PRId64> is not a local register; first global register is $%<PRId64>"
 msgstr "%pB: directiva LOCAL: registo $%#<PRId64> nÃ£o Ã© um registo local. O primeiro registo global Ã© $%#<PRId64>"
 
-#: elf64-mmix.c:2173
+#: elf64-mmix.c:2157
 #, c-format
 msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file"
 msgstr "%pB: Erro: definiÃ§Ã£o mÃºltipla de \"%s\"; inÃ­cio de %s estÃ¡ definido num ficheiro previamente ligado"
 
-#: elf64-mmix.c:2228
+#: elf64-mmix.c:2212
 msgid "register section has contents\n"
 msgstr "SecÃ§Ã£o de registo tem conteÃºdo\n"
 
-#: elf64-mmix.c:2418
+#: elf64-mmix.c:2402
 #, c-format
 msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
 msgstr ""
 "InconsistÃªncia interna: resta %lu != mÃ¡x %lu.\n"
 "  Por favor, reporte este erro."
 
-#: elf64-ppc.c:3827
+#: elf64-ppc.c:1349
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "aviso: deve ser usado %s, em vez de %s"
+
+#: elf64-ppc.c:4153
 #, c-format
 msgid "symbol '%s' has invalid st_other for ABI version 1"
 msgstr "sÃ­mbolo \"%s\" tem st_other invÃ¡lido para a versÃ£o ABI 1"
 
-#: elf64-ppc.c:4002
+#: elf64-ppc.c:4334
 #, c-format
 msgid "%pB .opd not allowed in ABI version %d"
 msgstr "%pB .opd nÃ£o permitida na versÃ£o ABI %d"
 
-#: elf64-ppc.c:4523
+#: elf64-ppc.c:4906
 #, c-format
 msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
 msgstr "%H: %s reloc nÃ£o suportada em bibliotecas partilhadas e PIEs.\n"
 
-#: elf64-ppc.c:4919
+#: elf64-ppc.c:5316
 #, c-format
 msgid "%pB uses unknown e_flags 0x%lx"
 msgstr "%pB usa e_flags 0x%lx desconhecido"
 
-#: elf64-ppc.c:4927
+#: elf64-ppc.c:5324
 #, c-format
 msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
 msgstr "%pB: versÃ£o ABI %ld nÃ£o Ã© compatÃ­vel com a saÃ­da da versÃ£o ABI %ld"
 
-#: elf64-ppc.c:4954
+#: elf64-ppc.c:5351
 #, c-format
 msgid " [abiv%ld]"
 msgstr " [abiv%ld"
 
-#: elf64-ppc.c:6145
+#: elf64-ppc.c:6649
 msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
 msgstr "%P: cÃ³pia da reloc contra \"%pT\" requer ligaÃ§Ã£o lazy plt; evite definir LD_BIND_NOW=1 ou actualize o gcc\n"
 
-#: elf64-ppc.c:6417
+#: elf64-ppc.c:6916
 #, c-format
 msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
 msgstr "%pB: sÃ­mbolo indefinido em relocalizaÃ§Ã£o R_PPC64_TOCSAVE"
 
-#: elf64-ppc.c:6644
+#: elf64-ppc.c:7164
 #, c-format
 msgid "dynreloc miscount for %pB, section %pA"
 msgstr "erro de contagem dynreloc para %pB, secÃ§Ã£o %pA"
 
-#: elf64-ppc.c:6733
+#: elf64-ppc.c:7253
 #, c-format
 msgid "%pB: .opd is not a regular array of opd entries"
 msgstr "%pB: .opd nÃ£o Ã© uma matriz normal de entradas opd"
 
-#: elf64-ppc.c:6743
+#: elf64-ppc.c:7263
 #, c-format
 msgid "%pB: unexpected reloc type %u in .opd section"
 msgstr "%pB: tipo de reloc inesperado %u em secÃ§Ã£o .opd"
 
-#: elf64-ppc.c:6765
+#: elf64-ppc.c:7285
 #, c-format
 msgid "%pB: undefined sym `%s' in .opd section"
 msgstr "%pB: sÃ­mbolo indefinido \"%s\" em secÃ§Ã£o .opd"
 
-#: elf64-ppc.c:7249
+#. The issue is that __glink_PLTresolve saves r2, which is done
+#. because glibc ld.so _dl_runtime_resolve restores r2 to support
+#. a glibc plt call optimisation where global entry code is
+#. skipped on calls that resolve to the same binary.  The
+#. __glink_PLTresolve save of r2 is incompatible with code
+#. making tail calls, because the tail call might go via the
+#. resolver and thus overwrite the proper saved r2.
+#: elf64-ppc.c:7779
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr "aviso: --plt-localentry Ã© incompatÃ­vel com cÃ³digo power10 pc-relative"
+
+#: elf64-ppc.c:7787
 msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
 msgstr "aviso: --plt-localentry Ã© particularmente perigosa sem suporte ld.so para detectar violaÃ§Ãµes ABI."
 
-#: elf64-ppc.c:7499
+#: elf64-ppc.c:8111
 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
 msgstr "%H __tls_get_addr perdeu arg, optimizaÃ§Ã£o TLS desactivada\n"
 
-#: elf64-ppc.c:7876 elf64-ppc.c:8513
+#: elf64-ppc.c:8546 elf64-ppc.c:9259
 #, c-format
 msgid "%s defined on removed toc entry"
 msgstr "%s defenido em entrada toc removida"
 
-#: elf64-ppc.c:8241
-#, c-format
-msgid "%H: toc optimization is not supported for %s instruction\n"
-msgstr "%H: optimizaÃ§Ã£o toc nÃ£o Ã© suportada para instreuÃ§Ãµes %s.\n"
-
-#: elf64-ppc.c:8470
+#: elf64-ppc.c:9216
 #, c-format
 msgid "%H: %s references optimized away TOC entry\n"
 msgstr "%H: %s referencia entrada TOC optimizada\n"
 
-#: elf64-ppc.c:9301
+#: elf64-ppc.c:9437
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%H: optimizaÃ§Ã£o got/toc nÃ£o suportada para a instruÃ§Ã£o %s\n"
+
+#: elf64-ppc.c:10282
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr "aviso: a descartar secÃ§Ã£o dinÃ¢mica %s"
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11433
 msgid "%P: cannot find opd entry toc for `%pT'\n"
 msgstr "%P: impossÃ­vel encontrar entrada opd toc para \"%T\"\n"
 
-#: elf64-ppc.c:10303
+#: elf64-ppc.c:11481 elf64-ppc.c:12030
+msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: impossÃ­vel atribuir o grupo %pA, alvo %pA a uma secÃ§Ã£o de saÃ­da. Repita sem --enable-non-contiguous-regions.\n"
+
+#: elf64-ppc.c:11542
 #, c-format
 msgid "long branch stub `%s' offset overflow"
 msgstr "transporte em desvio \"%s\" em fictÃ­cio de ramo longo"
 
-#: elf64-ppc.c:10330
+#: elf64-ppc.c:11569
 #, c-format
 msgid "can't find branch stub `%s'"
 msgstr "impossÃ­vel encontrar fictÃ­cio de ramo \"%s\""
 
-#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791
+#: elf64-ppc.c:11633 elf64-ppc.c:11898 elf64-ppc.c:14202
 #, c-format
 msgid "%P: linkage table error against `%pT'\n"
 msgstr "%P: erro na tabela de ligaÃ§Ã£o contra \"%T\"\n"
 
-#: elf64-ppc.c:10820
+#: elf64-ppc.c:12102
 #, c-format
 msgid "can't build branch stub `%s'"
 msgstr "impossÃ­vel construir fictÃ­cio de ramo \"%s\""
 
-#: elf64-ppc.c:11779
+#: elf64-ppc.c:13114
 #, c-format
 msgid "%pB section %pA exceeds stub group size"
 msgstr "%pB secÃ§Ã£o %pA excede tamanho de grupo de fictÃ­cio"
 
-#: elf64-ppc.c:13189 elf64-ppc.c:13208
+#: elf64-ppc.c:14381
+msgid "__tls_get_addr call offset overflow"
+msgstr "transporte de desvio de chamada __tls_get_addr"
+
+#: elf64-ppc.c:14720 elf64-ppc.c:14739
 #, c-format
 msgid "%s offset too large for .eh_frame sdata4 encoding"
 msgstr "desvio %s muito grande para codificaÃ§Ã£o .eh_frame sdata4"
 
-#: elf64-ppc.c:13244
+#: elf64-ppc.c:14771
 #, c-format
 msgid "linker stubs in %u group\n"
 msgid_plural "linker stubs in %u groups\n"
 msgstr[0] "fictÃ­cios de linker em grupo %u\n"
 msgstr[1] "fictÃ­cios de linker em grupos %u\n"
 
-#: elf64-ppc.c:13248
+#: elf64-ppc.c:14778
 #, c-format
 msgid ""
-"  branch         %lu\n"
+"%s  branch         %lu\n"
 "  branch toc adj %lu\n"
 "  branch notoc   %lu\n"
 "  branch both    %lu\n"
@@ -4261,7 +4521,7 @@ msgid ""
 "  plt call both  %lu\n"
 "  global entry   %lu"
 msgstr ""
-"  branch         %lu\n"
+"%s  branch         %lu\n"
 "  branch toc adj %lu\n"
 "  branch notoc   %lu\n"
 "  branch both    %lu\n"
@@ -4275,836 +4535,1043 @@ msgstr ""
 "  plt call both  %lu\n"
 "  global entry   %lu"
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:15178
 #, c-format
 msgid "%H: %s used with TLS symbol `%pT'\n"
 msgstr "%H: %s usado com sÃ­mbolo TLS \"%T\"\n"
 
-#: elf64-ppc.c:13585
+#: elf64-ppc.c:15180
 #, c-format
 msgid "%H: %s used with non-TLS symbol `%pT'\n"
 msgstr "%H: %s usado com sÃ­mbolo nÃ£o-TLS \"%T\"\n"
 
-#: elf64-ppc.c:14245
+#: elf64-ppc.c:15936
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
 msgstr "%H: chamada a \"%pT\" com nop em falta, impossÃ­vel restaurar toc; (plt call stub)\n"
 
-#: elf64-ppc.c:14251
+#: elf64-ppc.c:15942
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
 msgstr "%H: chamada a \"%pT\" com nop em falta, impossÃ­vel restaurar toc; (toc save/adjust stub)\n"
 
-#: elf64-ppc.c:14985
+#: elf64-ppc.c:16845
 #, c-format
 msgid "%H: %s for indirect function `%pT' unsupported\n"
 msgstr "%H: %s para funÃ§Ã£o indirecta \"%T\" nÃ£o suportado\n"
 
-#: elf64-ppc.c:15097
+#: elf64-ppc.c:16930
+#, c-format
+msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
+msgstr "%X%P: %pB: %s contra %pT nÃ£o Ã© suportado por glibc como relocalizaÃ§Ã£o dinÃ¢mica\n"
+
+#: elf64-ppc.c:16985
 #, c-format
 msgid "%P: %pB: %s is not supported for `%pT'\n"
 msgstr "%P: %pB: %s nÃ£o Ã© suportado para \"%T\"\n"
 
-#: elf64-ppc.c:15326
+#: elf64-ppc.c:17233
 #, c-format
 msgid "%H: error: %s not a multiple of %u\n"
 msgstr "%H: erro: %s nÃ£o Ã© mÃºltiplo de %u\n"
 
-#: elf64-ppc.c:15349
+#: elf64-ppc.c:17256
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr "%H: %s insolÃºvel contra \"%T\"\n"
 
-#: elf64-ppc.c:15446
+#: elf64-ppc.c:17400
 #, c-format
 msgid "%H: %s against `%pT': error %d\n"
 msgstr "%H: %s contra \"%T\": erro %d\n"
 
-#: elf64-s390.c:2576
+#: elf64-s390.c:2444
 #, c-format
 msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)"
 msgstr "%pB: \"%s\" reloc nÃ£o-PLT para sÃ­mbolo definido em biblioteca partilhada e acedido a partir de executÃ¡vel (reconstrua o ficheiro com -fPIC ?)"
 
-#: elf64-sparc.c:109 elfcode.h:1471
-#, c-format
-msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
-msgstr "%pB(%pA): relocalizaÃ§Ã£o %d tem Ã­ndice de sÃ­mbolos invÃ¡lido %ld"
-
-#: elf64-sparc.c:467
+#: elf64-sparc.c:478
 #, c-format
 msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
 msgstr "%pB: sÃ³ registos %%g[2367] podem ser declarados usando STT_REGISTER"
 
-#: elf64-sparc.c:488
+#: elf64-sparc.c:499
 #, c-format
 msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
 msgstr "Registo %%g%d usa incompatibilidade: %s em %pB, previamente %s em %pB"
 
-#: elf64-sparc.c:512
+#: elf64-sparc.c:523
 #, c-format
 msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
 msgstr "SÃ­mbolo \"%s\" tem tipos diferentes: REGISTER em %pB, previamente %s em %pB"
 
-#: elf64-sparc.c:559
+#: elf64-sparc.c:570
 #, c-format
 msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
 msgstr "SÃ­mbolo \"%s\" tem tipos diferentes: %s em %pB, previamente REGISTER em %pB"
 
-#: elf64-sparc.c:691
+#: elf64-sparc.c:702
 #, c-format
 msgid "%pB: linking UltraSPARC specific with HAL specific code"
 msgstr "%pB: a ligar especÃ­fico UltraSPARC com cÃ³digo especÃ­fico HAL"
 
-#: elf64-x86-64.c:1412
+#: elf64-x86-64.c:1415
 msgid "hidden symbol "
 msgstr "sÃ­mbolo oculto "
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1418
 msgid "internal symbol "
 msgstr "sÃ­mbolo interno "
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1421 elf64-x86-64.c:1425
 msgid "protected symbol "
 msgstr "sÃ­mbolo protegido "
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1427
 msgid "symbol "
 msgstr "sÃ­mbolo "
 
-#: elf64-x86-64.c:1425 elf64-x86-64.c:1435
-msgid "; recompile with -fPIC"
-msgstr "; recompile com -fPIC"
-
-#: elf64-x86-64.c:1430
+#: elf64-x86-64.c:1433
 msgid "undefined "
 msgstr "indefinido"
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1443
 msgid "a shared object"
 msgstr "um objecto partilhado"
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1445
+msgid "; recompile with -fPIC"
+msgstr "; recompile com -fPIC"
+
+#: elf64-x86-64.c:1450
 msgid "a PIE object"
 msgstr "um objecto PIE"
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1452
 msgid "a PDE object"
 msgstr "um objecto PDE"
 
-#: elf64-x86-64.c:1446
+#: elf64-x86-64.c:1454
+msgid "; recompile with -fPIE"
+msgstr "; recompile com -fPIE"
+
+#: elf64-x86-64.c:1458
 #, c-format
 msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
 msgstr "%pB: relocalizaÃ§Ã£o %s contra %s%s\"%s\" nÃ£o pode ser usada ao fazer %s%s"
 
-#: elf64-x86-64.c:1931
+#: elf64-x86-64.c:1966
 #, c-format
 msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
 msgstr "%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo \"%s\" nÃ£o Ã© suportada em modo x32"
 
-#: elf64-x86-64.c:2073
+#: elf64-x86-64.c:2122
 #, c-format
 msgid "%pB: '%s' accessed both as normal and thread local symbol"
 msgstr "%pB: \"%s\" acedido como sÃ­mbolo local normal e thread em simultÃ¢neo"
 
-#: elf64-x86-64.c:2696
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5302
+#: elf64-x86-64.c:2747 elfnn-aarch64.c:5542 elfnn-riscv.c:2124
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
 msgstr "%pB: relocalizaÃ§Ã£o %s contra STT_GNU_IFUNC sÃ­mbolo \"%s\" tem adenda nÃ£o-zero: %#<PRId64>"
 
-#: elf64-x86-64.c:2934
+#: elf64-x86-64.c:3003
 #, c-format
 msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
 msgstr "%pB: relocalizaÃ§Ã£o R_X86_64_GOTOFF64 contra  %s \"%s\" indefinido nÃ£o pode ser usado ao fazer um objecto partilhado"
 
-#: elf64-x86-64.c:2948
+#: elf64-x86-64.c:3017
 #, c-format
 msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
 msgstr "%pB: relocalizaÃ§Ã£o R_X86_64_GOTOFF64 contra %s \"%s\" protegido nÃ£o pode ser usado ao fazer um objecto partilhado"
 
-#: elf64-x86-64.c:3208
+#: elf64-x86-64.c:3297
 #, c-format
 msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
 msgstr "%pB: adenda %s%#x em relocalizaÃ§Ã£o %s contra sÃ­mbolo \"%s\" em %#<PRIx64> na secÃ§Ã£o \"%pA\" estÃ¡ fora do intervalo"
 
-#: elf64-x86-64.c:3885
-msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"
-msgstr "%F%P: falha ao converter relocalizaÃ§Ã£o GOTPCREL; religue com --no-relax\n"
+#: elf64-x86-64.c:3437 elflink.c:13453
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: entrada corrupta: %pB\n"
 
-#: elf64-x86-64.c:4043
+#: elf64-x86-64.c:4123
+#, c-format
+msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
+msgstr " falha ao converter relocalizaÃ§Ã£o GOTPCREL contra \"%s\"; religue com --no-relax\n"
+
+#: elf64-x86-64.c:4284
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
 msgstr "%F%pB: transporte de desvio PC-relative em entrada PLT para \"%s\"\n"
 
-#: elf64-x86-64.c:4106
+#: elf64-x86-64.c:4352
 #, c-format
 msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
 msgstr "%F%pB: transporte em deslocamento do ramo em entrada PLT para \"%s\n"
 
-#: elf64-x86-64.c:4159
+#: elf64-x86-64.c:4405
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
 msgstr "%F%pB: transporte de desvio PC-relative em entrada GOT PLT para \"%s\"\n"
 
-#: elfcode.h:323
-msgid "warning: %pB has a corrupt section with a size (%"
-msgstr "aviso: %pB tem uma secÃ§Ã£o corrompida com um tamanho (%"
+#: elfcode.h:329
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr "aviso: %pB tem uma secÃ§Ã£o estendida para alÃ©m do fim do ficheiro"
 
-#: elfcode.h:768
+#: elfcode.h:775
 #, c-format
 msgid "warning: %pB has a corrupt string table index - ignoring"
 msgstr "aviso: %pB tem um Ã­ndice de tabela de cadeia corrompido - a ignorar"
 
-#: elfcode.h:1212
+#: elfcode.h:819
+#, c-format
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr "aviso: %pB tem um cabeÃ§alho de programa com argumento invÃ¡lido"
+
+#: elfcode.h:1244
 #, c-format
 msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
 msgstr "%pB: nÂº de versÃ£o (%#<PRId64>) nÃ£o corresponde ao nÂº de sÃ­mbolos (%ld)"
 
-#: elfcore.h:300
+#: elfcore.h:308
 #, c-format
 msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
 msgstr "aviso: %pB estÃ¡ truncado: esperado tamanho do ficheiro de nÃºcleo >= %<PRIu64>, obtido: %<PRIu64>"
 
-#: elflink.c:1367
+#: elflink.c:1384
 #, c-format
 msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
 msgstr "%s: definiÃ§Ã£o TLS em secÃ§Ã£o %pB %pA nÃ£o corresponde a definiÃ§Ã£o nÃ£o-TLS em secÃ§Ã£o %pB %pA"
 
-#: elflink.c:1373
+#: elflink.c:1390
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
 msgstr "%s: referÃªncia TLS em %pB nÃ£o corresponde a referÃªncia nÃ£o-TLS em %pB"
 
-#: elflink.c:1379
+#: elflink.c:1396
 #, c-format
 msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
 msgstr "%s: definiÃ§Ã£o TLS em secÃ§Ã£o %pB %pA nÃ£o corresponde a referÃªncia nÃ£o-TLS em %pB"
 
-#: elflink.c:1385
+#: elflink.c:1402
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
 msgstr "%s: referÃªncia TLS em %pB nÃ£o corresponde a definiÃ§Ã£o nÃ£o-TLS em secÃ§Ã£o %pB %pA"
 
-#: elflink.c:2075
+#: elflink.c:2114
 #, c-format
 msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
 msgstr "%pB: redefiniÃ§Ã£o de sÃ­mbolo com versÃ£o indirecto \"%s\" inesperada"
 
-#: elflink.c:2452
+#: elflink.c:2496
 #, c-format
 msgid "%pB: version node not found for symbol %s"
 msgstr "%pB: nÃ³ de versÃ£o nÃ£o encontrado para sÃ­mbolo %s"
 
-#: elflink.c:2541
+#: elflink.c:2587
 #, c-format
 msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
 msgstr "%pB: mau Ã­ndice de sÃ­mbolo de reloc (%#<PRIx64> >= %#lx) para desvio %#<PRIx64> na secÃ§Ã£o \"%pA\""
 
-#: elflink.c:2553
+#: elflink.c:2599
 #, c-format
 msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
 msgstr "%pB: Ã­ndice de sÃ­mbolo nÃ£o-zero (%#<PRIx64>) para desvio %#<PRIx64> na secÃ§Ã£o \"%pA\" onde o ficheiro objecto nÃ£o tem tabela de sÃ­mbolo"
 
-#: elflink.c:2744
+#: elflink.c:2788
 #, c-format
 msgid "%pB: relocation size mismatch in %pB section %pA"
 msgstr "%pB: tamanho de relocalizaÃ§Ã£o trocado na secÃ§Ã£o %pB %pA"
 
-#: elflink.c:3066
+#: elflink.c:3117
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr "aviso: tipo e tamanho do sÃ­mbolo dinÃ¢mico \"%s\" nÃ£o estÃ£o definidos"
 
-#: elflink.c:3128
+#: elflink.c:3177
 msgid "%P: copy reloc against protected `%pT' is dangerous\n"
 msgstr "%P: cÃ³pia de reloc contra \"%T\" protegido Ã© perigosa\n"
 
-#: elflink.c:3932
+#: elflink.c:4117
 #, c-format
 msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
 msgstr "encontrado cÃ³digo mÃ¡quina ELF alternativo (%d) em %pB, esperado %d"
 
-#: elflink.c:4598
+#: elflink.c:4600
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: desvio de versÃ£o invÃ¡lido %lx (mÃ¡x %lx)"
+
+#: elflink.c:4668
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr "%pB: %s sÃ­mbolo local no Ã­ndice %lu (>= sh_info de %lu)"
+
+#: elflink.c:4816
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: versÃ£o de informaÃ§Ã£o insuficiente"
+
+#: elflink.c:4854
 #, c-format
 msgid "%pB: %s: invalid version %u (max %d)"
 msgstr "%pB: %s: versÃ£o %u invÃ¡lida (mÃ¡x %d)"
 
-#: elflink.c:4635
+#: elflink.c:4891
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr "%pB: %s: versÃ£o necessÃ¡ria %d invÃ¡lida"
 
-#: elflink.c:5054
+#: elflink.c:5309
 #, c-format
 msgid "%pB: undefined reference to symbol '%s'"
 msgstr "%pB: referÃªncia indefinida a sÃ­mbolo \"%s\""
 
-#: elflink.c:6130
+#: elflink.c:6375
 #, c-format
 msgid "%pB: stack size specified and %s set"
 msgstr "%pB: tamanho de stack especificado e definido como %s"
 
-#: elflink.c:6134
+#: elflink.c:6379
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr "%pB: %s nÃ£o absoluto"
 
-#: elflink.c:6331
+#: elflink.c:6576
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr "%s: versÃ£o indefinida: %s"
 
-#: elflink.c:6902
+#: elflink.c:7148
 #, c-format
 msgid "%pB: .preinit_array section is not allowed in DSO"
 msgstr "%pB: secÃ§Ã£o .preinit_array nÃ£o Ã© permitida em DSO"
 
-#: elflink.c:8359
+#: elflink.c:8740
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr "referÃªncia %s indefinida em sÃ­mbolo complexo: %s"
 
-#: elflink.c:8514
+#: elflink.c:8903 elflink.c:8911
+msgid "division by zero"
+msgstr "divisÃ£o por zero"
+
+#: elflink.c:8925
 #, c-format
 msgid "unknown operator '%c' in complex symbol"
 msgstr "operador \"%c\" desconhecido em sÃ­mbolo complexo"
 
 #. PR 21524: Let the user know if a symbol was removed by garbage collection.
-#: elflink.c:8852
+#: elflink.c:9263
 #, c-format
 msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
 msgstr "%pB:%pA: erro: relocalizaÃ§Ã£o referencia sÃ­mbolo %s que foi removido pela recolha de lixo."
 
-#: elflink.c:8855
+#: elflink.c:9266
 #, c-format
 msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
 msgstr "%pB:%pA: erro: tente religar com --gc-keep-exported activado."
 
-#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166
+#: elflink.c:9511 elflink.c:9529 elflink.c:9568 elflink.c:9586
 #, c-format
 msgid "%pB: unable to sort relocs - they are in more than one size"
 msgstr "%pB: impossÃ­vel ordenar relocs - tÃªm mais de um tamanho"
 
 #. The section size is not divisible by either -
 #. something is wrong.
-#: elflink.c:9125 elflink.c:9182
+#: elflink.c:9545 elflink.c:9602
 #, c-format
 msgid "%pB: unable to sort relocs - they are of an unknown size"
 msgstr "%pB: impossÃ­vel ordenar relocs - tÃªm um tamanho desconhecido"
 
-#: elflink.c:9234
+#: elflink.c:9654
 msgid "not enough memory to sort relocations"
 msgstr "Sem memÃ³ria suficiente para ordenar relocalizaÃ§Ãµes"
 
-#: elflink.c:9502
+#: elflink.c:9998
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr "%pB: demasiadas secÃ§Ãµes: %d (>= %d)"
 
-#: elflink.c:9782
+#: elflink.c:10274
 #, c-format
 msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: sÃ­mbolo \"%s\" interno em %pB Ã© referenciado por DSO"
 
-#: elflink.c:9785
+#: elflink.c:10277
 #, c-format
 msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: sÃ­mbolo \"%s\" oculto em %pB Ã© referenciado por DSO"
 
-#: elflink.c:9788
+#: elflink.c:10280
 #, c-format
 msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: sÃ­mbolo \"%s\" local em %pB Ã© referenciado por DSO"
 
-#: elflink.c:9874
+#: elflink.c:10366
 #, c-format
 msgid "%pB: could not find output section %pA for input section %pA"
 msgstr "%pB: impossÃ­vel encontrar a secÃ§Ã£o de saÃ­da %pA para a secÃ§Ã£o de entrada %pA"
 
-#: elflink.c:10028
+#: elflink.c:10520
 #, c-format
 msgid "%pB: protected symbol `%s' isn't defined"
 msgstr "%pB: sÃ­mbolo \"%s\" protegido nÃ£o estÃ¡ definido"
 
-#: elflink.c:10031
+#: elflink.c:10523
 #, c-format
 msgid "%pB: internal symbol `%s' isn't defined"
 msgstr "%pB: sÃ­mbolo \"%s\" nÃ£o estÃ¡ definido"
 
-#: elflink.c:10034
+#: elflink.c:10526
 #, c-format
 msgid "%pB: hidden symbol `%s' isn't defined"
 msgstr "%pB: sÃ­mbolo \"%s\" oculto nÃ£o estÃ¡ definido"
 
-#: elflink.c:10066
+#: elflink.c:10558
 #, c-format
 msgid "%pB: no symbol version section for versioned symbol `%s'"
 msgstr "%pB: sem secÃ§Ã£o de versÃ£o de sÃ­mbolo para o sÃ­mbolo com versÃ£o \"%s\""
 
-#: elflink.c:10679
+#: elflink.c:10957
+#, c-format
+msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
+msgstr "aviso: --enable-non-contiguous-regions descarta a secÃ§Ã£o \"%s\" de \"%s\"\n"
+
+#: elflink.c:11211
 #, c-format
 msgid "error: %pB: size of section %pA is not multiple of address size"
 msgstr "erro: %pB: tamanho da secÃ§Ã£o %pA nÃ£o Ã© mÃºltiplo do tamanho do endereÃ§o"
 
-#: elflink.c:10724
+#: elflink.c:11256
 #, c-format
 msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
 msgstr "erro: %pB contÃ©m uma reloc (%#<PRIx64>) para a secÃ§Ã£o %pA que referencia um sÃ­mbolo global inexistente"
 
-#: elflink.c:11484
-#, c-format
-msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
-msgstr "%pA tem secÃ§Ãµes ordenadas [\"%pA\" em %pB] e desordenadas [\"%pA\" em %pB] em simultÃ¢neo"
-
-#: elflink.c:11490
-#, c-format
-msgid "%pA has both ordered and unordered sections"
-msgstr "%pA tem secÃ§Ãµes ordenadas e desordenadas em simultÃ¢neo"
-
-#: elflink.c:11592
+#: elflink.c:11977
 #, c-format
 msgid "%pB: no symbol found for import library"
 msgstr "%pB: sem sÃ­mbolo para biblioteca de importaÃ§Ã£o"
 
-#: elflink.c:12225
+#: elflink.c:12620
 #, c-format
 msgid "%pB: file class %s incompatible with %s"
 msgstr "%pB: classe de ficheiro %s incompatÃ­vel com %s"
 
-#: elflink.c:12442
+#: elflink.c:12870
 #, c-format
 msgid "%pB: failed to generate import library"
 msgstr "%pB: falha ao gerar biblioteca de importaÃ§Ã£o"
 
-#: elflink.c:12561
+#: elflink.c:12996
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "aviso: secÃ§Ã£o %s tem tamanho zero"
 
-#: elflink.c:12609
+#: elflink.c:13044
 #, c-format
 msgid "warning: section '%s' is being made into a note"
 msgstr "aviso: a secÃ§Ã£o \"%s\" estÃ¡ a ser tornada numa nota"
 
-#: elflink.c:12701
+#: elflink.c:13137
 msgid "%P%X: read-only segment has dynamic relocations\n"
 msgstr "%P%X: segmento sÃ³ de leitura tem relocalizaÃ§Ãµes dinÃ¢micas.\n"
 
-#: elflink.c:12704
-msgid "%P: warning: creating a DT_TEXTREL in a shared object\n"
-msgstr "%P: aviso: a criar uma DT_TEXTREL num objecto partilhado.\n"
+#: elflink.c:13140
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
+msgstr "%P: aviso: a criar DT_TEXTREL num objecto partilhado.\n"
+
+#: elflink.c:13143
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr "%P: aviso: a criar DT_TEXTREL em PDE\n"
+
+#: elflink.c:13146
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr "%P: aviso: a criar DT_TEXTREL num PIE.\n"
 
-#: elflink.c:12829
+#: elflink.c:13279
 msgid "%P%X: can not read symbols: %E\n"
 msgstr "%P%X: impossÃ­vel ler os sÃ­mbolos: %E\n"
 
-#: elflink.c:13002
-msgid "%F%P: corrupt input: %pB\n"
-msgstr "%F%P: entrada corrupta: %pB\n"
+#: elflink.c:13699
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
+msgstr "%F%P: %pB(%pA): erro: necessÃ¡ria secÃ§Ã£o linked-to para --gc-sections\n"
 
-#: elflink.c:13668
+#: elflink.c:14165
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
 msgstr "%pB: %pA+%#<PRIx64>: sem sÃ­mbolo para INHERIT"
 
-#: elflink.c:13844
+#: elflink.c:14206
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: secÃ§Ã£o \"%pA\":entrada VTENTRY corrompida"
+
+#: elflink.c:14349
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr "INPUT_SECTION_FLAG %s nÃ£o reconhecida\n"
 
-#: elfxx-mips.c:1450
+#: elflink.c:15097
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%P: %pB: aviso: relocalizaÃ§Ã£o contra \"%s\" em secÃ§Ã£o sÃ³ de leitura \"%pA\"\n"
+
+#: elflink.c:15186
+msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
+msgstr "%P: warning: funÃ§Ãµes indirectas GNU com DT_TEXTREL podem resultar numa segfault na execuÃ§Ã£o; recompile com %s\n"
+
+#: elfxx-aarch64.c:477
+#, c-format
+msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr "%pB: aviso: Weak TLS Ã© definido pela implementaÃ§Ã£o e pode nÃ£o funcionar como esperado"
+
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:9909 elfnn-aarch64.c:9916
+#, c-format
+msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
+msgstr "%pB: aviso: BTI ligado por -z force-bti quando todas as entradas nÃ£o tÃªm BTI na secÃ§Ã£o NOTE."
+
+#: elfxx-aarch64.c:758 elfxx-x86.c:2695
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: falha ao criar secÃ§Ã£o de propriedade GNU\n"
+
+#: elfxx-aarch64.c:762 elfxx-x86.c:2700
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: falha ao alinhar secÃ§Ã£o\n"
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr "erro: %pB: <tamanho AArch64 corrompido usado: 0x%x>"
+
+#: elfxx-mips.c:1505
 msgid "static procedure (no name)"
 msgstr "procedimento estÃ¡tico (sem nome)"
 
-#: elfxx-mips.c:5718
+#: elfxx-mips.c:5780
 msgid "MIPS16 and microMIPS functions cannot call each other"
 msgstr "funÃ§Ãµes MIPS16 e microMIPS nÃ£o se podem chamar entre si"
 
-#: elfxx-mips.c:6485
+#: elfxx-mips.c:6545
 msgid "%X%H: unsupported JALX to the same ISA mode\n"
 msgstr "%X%H: JALX nÃ£o suportado para o mesmo modo ISA\n"
 
-#: elfxx-mips.c:6518
+#: elfxx-mips.c:6578
 msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n"
 msgstr "%X%H: salto nÃ£o suportado entre modos ISA; considere recompilar com interlinking activado\n"
 
-#: elfxx-mips.c:6563
+#: elfxx-mips.c:6623
 msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n"
 msgstr "%X%H: impossÃ­vel converter ramo entre modos ISA para JALX: relocalizaÃ§Ã£o fora do intervalo\n"
 
-#: elfxx-mips.c:6575
+#: elfxx-mips.c:6635
 msgid "%X%H: unsupported branch between ISA modes\n"
 msgstr "%X%H: ramo nÃ£o suportado entre modos ISA\n"
 
-#: elfxx-mips.c:7223
+#: elfxx-mips.c:7264
 #, c-format
 msgid "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
 msgstr "%pB: tamanho de secÃ§Ã£o \"reginfo\" incorrecto; esperado %<PRIu64>, obtido %<PRIu64>"
 
-#: elfxx-mips.c:7267 elfxx-mips.c:7502
+#: elfxx-mips.c:7308 elfxx-mips.c:7547
 #, c-format
 msgid "%pB: warning: bad `%s' option size %u smaller than its header"
 msgstr "%pB: aviso: mau tamanho de opÃ§Ã£o \"%s\" %u menor que o seu cabeÃ§alho"
 
-#: elfxx-mips.c:8300 elfxx-mips.c:8426
+#: elfxx-mips.c:8356 elfxx-mips.c:8482
 #, c-format
 msgid "%pB: warning: cannot determine the target function for stub section `%s'"
 msgstr "%pB: aviso: impossÃ­vel determinar a funÃ§Ã£o alvo para secÃ§Ã£o fictÃ­cia \"%s\""
 
-#: elfxx-mips.c:8558
+#: elfxx-mips.c:8614
 #, c-format
 msgid "%pB: malformed reloc detected for section %s"
 msgstr "%pB: reloc mal formada detectada para secÃ§Ã£o %s"
 
-#: elfxx-mips.c:8658
+#: elfxx-mips.c:8713
 #, c-format
 msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
 msgstr "%pB: reloc GOT em %#<PRIx64> nÃ£o esperada em executÃ¡veis"
 
-#: elfxx-mips.c:8796
+#: elfxx-mips.c:8853
 #, c-format
 msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: reloc CALL16 em %#<PRIx64> nÃ£o contra sÃ­mbolo global"
 
-#: elfxx-mips.c:9086
+#: elfxx-mips.c:9156
 #, c-format
 msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n"
 msgstr "%X%H: relocalizaÃ§Ã£o %s contra \"%s\" nÃ£o pode ser usada a fazer um objecto partilhado; recompile com -fPIC\n"
 
-#: elfxx-mips.c:9422
+#: elfxx-mips.c:9282
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr "SÃ­mbolo IFUNC %s na tabela dinÃ¢mica de sÃ­mbolos - IFUNCS nÃ£o sÃ£o suportados"
+
+#: elfxx-mips.c:9285
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr "sÃ­mbolo nÃ£o-dinÃ¢mico %s em tabela dinÃ¢mica de sÃ­mbolos"
+
+#: elfxx-mips.c:9505
 #, c-format
 msgid "non-dynamic relocations refer to dynamic symbol %s"
 msgstr "relocalizaÃ§Ãµes nÃ£o-dinÃ¢micas referem-se a sÃ­mbolo dinÃ¢mico %s"
 
-#: elfxx-mips.c:10350
+#: elfxx-mips.c:10439
 #, c-format
 msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %#<PRIx64> in section `%pA'"
 msgstr "%pB: impossÃ­vel encontrar reloc LO16 correspondente contra \"%s\" para %s em %#<PRIx64> na secÃ§Ã£o \"%pA\""
 
-#: elfxx-mips.c:10490
+#: elfxx-mips.c:10579
 msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
 msgstr "secÃ§Ã£o small-data excede 64KB; baixe o limite de tamanho de small-data (veja a opÃ§Ã£o -G)"
 
-#: elfxx-mips.c:10509
+#: elfxx-mips.c:10598
 msgid "cannot convert a jump to JALX for a non-word-aligned address"
 msgstr "ImpossÃ­vel converter um salto para JALX para um endereÃ§o nÃ£o alinhado por word"
 
-#: elfxx-mips.c:10512
+#: elfxx-mips.c:10601
 msgid "jump to a non-word-aligned address"
 msgstr "Salto para um endereÃ§o nÃ£o alinhado por word"
 
-#: elfxx-mips.c:10513
+#: elfxx-mips.c:10602
 msgid "jump to a non-instruction-aligned address"
 msgstr "Salto para um endereÃ§o nÃ£o alinhado por instruÃ§Ã£o"
 
-#: elfxx-mips.c:10516
+#: elfxx-mips.c:10605
 msgid "cannot convert a branch to JALX for a non-word-aligned address"
 msgstr "ImpossÃ­vel converter um ramo para JALX para um endereÃ§o nÃ£o alinhado por word"
 
-#: elfxx-mips.c:10518
+#: elfxx-mips.c:10607
 msgid "branch to a non-instruction-aligned address"
 msgstr "Ramo para um endereÃ§o nÃ£o alinhado por instruÃ§Ã£o"
 
-#: elfxx-mips.c:10520
+#: elfxx-mips.c:10609
 msgid "PC-relative load from unaligned address"
 msgstr "Carga PC-relative de endereÃ§o nÃ£o alinhado"
 
-#: elfxx-mips.c:10798
+#: elfxx-mips.c:10909
 #, c-format
 msgid "%pB: `%pA' entry VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
 msgstr "%pB: entrada VMA \"%pA\" de %#<PRIx64> fora do intervalo de 32-bitsuportado; considere usar \"-Ttext-segment=...\""
 
-#: elfxx-mips.c:10911 elfxx-mips.c:11484
+#: elfxx-mips.c:11024 elfxx-mips.c:11611
 #, c-format
 msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
 msgstr "%pB: desvio \"%pA\" de  %<PRId64> de \"%pA\" alÃ©m do intervalo de ADDIUPC"
 
-#: elfxx-mips.c:11456
+#: elfxx-mips.c:11583
 #, c-format
 msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
 msgstr "%pB: inÃ­cio VMA \"%pA\" de %#<PRIx64> fora do intervalo 32-bit suportado; considere usar \"-Ttext-segment=...\""
 
-#: elfxx-mips.c:14397
+#: elfxx-mips.c:13316 reloc.c:8430
+#, c-format
+msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgstr "%X%P: %pB(%pA): erro: relocalizaÃ§Ã£o para desvio %V nÃ£o tem valor\n"
+
+#: elfxx-mips.c:13417 reloc.c:8518
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr "%X%P: %pB(%pA): relocalizaÃ§Ã£o \"%R\" nÃ£o Ã© suportada\n"
+
+#: elfxx-mips.c:13426 reloc.c:8527
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr "%X%P: %pB(%pA): relocalizaÃ§Ã£o \"%R\" devolve um valor nÃ£o reconhecido %x\n"
+
+#: elfxx-mips.c:14611
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr "%pB: arquitectura desconhecida %s"
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15145
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr "%pB: nome de secÃ§Ã£o ilegal \"%pA\""
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15422
 #, c-format
 msgid "%pB: warning: linking abicalls files with non-abicalls files"
 msgstr "%pB: aviso: a ligar ficheiros abicalls com ficheiros nÃ£o-abicalls"
 
-#: elfxx-mips.c:15225
+#: elfxx-mips.c:15439
 #, c-format
 msgid "%pB: linking 32-bit code with 64-bit code"
 msgstr "%pB: a ligar cÃ³digo 32-bit com cÃ³digo 64-bit"
 
-#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338
+#: elfxx-mips.c:15471 elfxx-mips.c:15537 elfxx-mips.c:15552
 #, c-format
 msgid "%pB: linking %s module with previous %s modules"
 msgstr "%pB: a ligar mÃ³dulo %s com mÃ³dulos prÃ©vios %s"
 
-#: elfxx-mips.c:15281
+#: elfxx-mips.c:15495
 #, c-format
 msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
 msgstr "%pB: troca ABI: a ligar mÃ³dulo %s com mÃ³dulos prÃ©vios %s"
 
-#: elfxx-mips.c:15306
+#: elfxx-mips.c:15520
 #, c-format
 msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
 msgstr "%pB: troca ASE: a ligar mÃ³dulo %s com mÃ³dulos prÃ©vios %s"
 
-#: elfxx-mips.c:15440
+#: elfxx-mips.c:15654
 #, c-format
 msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
 msgstr "Aviso: %pB usa vÃ­rgula flutuante ABI %d desconhecida (definida por %pB), %pB usa vÃ­rgula flutuante ABI %d desconhecida"
 
-#: elfxx-mips.c:15446
+#: elfxx-mips.c:15660
 #, c-format
 msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
 msgstr "Aviso: %pB usa vÃ­rgula flutuante ABI %d desconhecida (definida por %pB), %pB usa %s"
 
-#: elfxx-mips.c:15452
+#: elfxx-mips.c:15666
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
 msgstr "Abiso: %pB usa %s (definida por %pB), %pB usa vÃ­rgula flutuante ABI %d desconhecida"
 
-#: elfxx-mips.c:15466
+#: elfxx-mips.c:15680
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
 msgstr "Aviso: %pB usa %s (definida por %pB), %pB usa %s"
 
-#: elfxx-mips.c:15485
+#: elfxx-mips.c:15699
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
 msgstr "Aviso: %pB usa %s (definida por %pB), %pB usa MSA ABI %d desconhecida"
 
-#: elfxx-mips.c:15497
+#: elfxx-mips.c:15711
 #, c-format
 msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
 msgstr "Aviso: %pB usa MSA ABI %d desconhecida (definida por %pB), %pB usa %s"
 
-#: elfxx-mips.c:15506
+#: elfxx-mips.c:15720
 #, c-format
 msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
 msgstr "Aviso: %pB usa MSA ABI %d desconhecida (definida por %pB), %pB usa MSA ABI %d desconhecida"
 
-#: elfxx-mips.c:15568
+#: elfxx-mips.c:15782
 #, c-format
 msgid "%pB: endianness incompatible with that of the selected emulation"
 msgstr "%pB: endianness incompatÃ­vel com a da emulaÃ§Ã£o seleccionada"
 
-#: elfxx-mips.c:15582
+#: elfxx-mips.c:15796
 #, c-format
 msgid "%pB: ABI is incompatible with that of the selected emulation"
 msgstr "%pB: ABI incompatÃ­vel com a da emulaÃ§Ã£o seleccionada"
 
-#: elfxx-mips.c:15634
+#: elfxx-mips.c:15849
 #, c-format
 msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
 msgstr "%pB: aviso: ISA inconsistente entre e_flags e .MIPS.abiflags"
 
-#: elfxx-mips.c:15639
+#: elfxx-mips.c:15854
 #, c-format
 msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
 msgstr "%pB: aviso: FP ABI inconsistente entre .gnu.attributes e .MIPS.abiflags"
 
-#: elfxx-mips.c:15643
+#: elfxx-mips.c:15858
 #, c-format
 msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
 msgstr "%pB: aviso: ASEs inconsistente entre e_flags e .MIPS.abiflags"
 
-#: elfxx-mips.c:15650
+#: elfxx-mips.c:15865
 #, c-format
 msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
 msgstr "%pB: aviso: extensÃµes ISA inconsistentes entre e_flags e .MIPS.abiflags"
 
-#: elfxx-mips.c:15654
+#: elfxx-mips.c:15869
 #, c-format
 msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
 msgstr "%pB: aviso: bandeira inesperada no campo flags2 de .MIPS.abiflags (0x%lx)"
 
-#: elfxx-mips.c:15843
+#: elfxx-mips.c:16060
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr "-mips32r2 -mfp64 (12 callee-saved)"
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16122 elfxx-mips.c:16133
 msgid "None"
 msgstr "Nenhum"
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16124 elfxx-mips.c:16193
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16204
 #, c-format
 msgid "Hard or soft float\n"
 msgstr "Flutuante rÃ­gido ou suave\n"
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16207
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr "Flutuante rÃ­gido (precisÃ£o dupla)\n"
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16210
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr "Flutuante rÃ­gido (precisÃ£o simples)\n"
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16213
 #, c-format
 msgid "Soft float\n"
 msgstr "Flutuante suave\n"
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16216
 #, c-format
 msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
 msgstr "Flutuante rÃ­gido (MIPS32r2 64-bit FPU 12 callee-saved)\n"
 
-#: elfxx-mips.c:16002
+#: elfxx-mips.c:16219
 #, c-format
 msgid "Hard float (32-bit CPU, Any FPU)\n"
 msgstr "Flutuante rÃ­gido (32-bit CPU, qualquer FPU)\n"
 
-#: elfxx-mips.c:16005
+#: elfxx-mips.c:16222
 #, c-format
 msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
 msgstr "Flutuante rÃ­gido (32-bit CPU, 64-bit FPU)\n"
 
-#: elfxx-mips.c:16008
+#: elfxx-mips.c:16225
 #, c-format
 msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
 msgstr "Comp. flutuante rÃ­gido (32-bit CPU, 64-bit FPU)\n"
 
-#: elfxx-mips.c:16040
+#: elfxx-mips.c:16257
 #, c-format
 msgid " [abi=O32]"
 msgstr " [abi=O32]"
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16259
 #, c-format
 msgid " [abi=O64]"
 msgstr " [abi=O64]"
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16261
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [abi=EABI32]"
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16263
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [abi=EABI64]"
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16265
 #, c-format
 msgid " [abi unknown]"
 msgstr " [abi desconhecida]"
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16267
 #, c-format
 msgid " [abi=N32]"
 msgstr " [abi=N32]"
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16269
 #, c-format
 msgid " [abi=64]"
 msgstr " [abi=64]"
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16271
 #, c-format
 msgid " [no abi set]"
 msgstr " [sem abi definida]"
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16296
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [ISA desconhecida]"
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16316
 #, c-format
 msgid " [not 32bitmode]"
 msgstr " [nÃ£o 32bitmode]"
 
-#: elfxx-sparc.c:3113
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5286
+#: elfxx-riscv.c:1383
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr "ExtensÃ£o x ISA \"%s\" tem de ser definida com as versÃµes"
+
+#: elfxx-riscv.c:1387
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr "impossÃ­vel encontrar versÃµes predefinidas da extensÃ£o ISA \"%s\""
+
+#: elfxx-riscv.c:1461
+#, c-format
+msgid "-march=%s: expect number after `%dp'"
+msgstr "-march=%s: esperado nÃºmero apÃ³s \"%dp\""
+
+#: elfxx-riscv.c:1544
+#, c-format
+msgid "-march=%s: rv%de is not a valid base ISA"
+msgstr "-march=%s: rv%de nÃ£o Ã© uma base ISA vÃ¡lida"
+
+#: elfxx-riscv.c:1573
+#, c-format
+msgid "-march=%s: first ISA extension must be `e', `i' or `g'"
+msgstr "-march=%s: primeira extensÃ£o ISA tem de ser \"e\", \"i\" ou \"g\""
+
+#: elfxx-riscv.c:1600
+#, c-format
+msgid "-march=%s: unknown standard and prefixed ISA extension `%s'"
+msgstr "-march=%s: extensÃ£o padrÃ£o e antecipada ISA \"%s\" desconhecida"
+
+#: elfxx-riscv.c:1604
+#, c-format
+msgid "-march=%s: standard ISA extension `%c' is not in canonical order"
+msgstr "-march=%s: extensÃ£o padrÃ£o ISA \"%c\" fora da ordem canÃ³nica"
+
+#: elfxx-riscv.c:1654
+#, c-format
+msgid "-march=%s: unknown prefix class for the ISA extension `%s'"
+msgstr "-march=%s: classe antecipada para extensÃ£o ISA %s desconhecida"
+
+#: elfxx-riscv.c:1688
+#, c-format
+msgid "-march=%s: unknown prefixed ISA extension `%s'"
+msgstr "-march=%s: extensÃ£o antecipada ISA %s desconhecida"
+
+#: elfxx-riscv.c:1699
+#, c-format
+msgid "-march=%s: duplicate prefixed ISA extension `%s'"
+msgstr "-march=%s: extensÃ£o antecipada ISA %s duplicada"
+
+#: elfxx-riscv.c:1709
+#, c-format
+msgid "-march=%s: prefixed ISA extension `%s' is not in expected order.  It must come before `%s'"
+msgstr "-march=%s: extensÃ£o ISA %s nÃ£o estÃ¡ na ordem esperada: Tem de estar antes de \"%s\"."
+
+#: elfxx-riscv.c:1725
+#, c-format
+msgid "-march=%s: prefixed ISA extension must separate with _"
+msgstr "-march=%s: extensÃ£o ISA tem de separar com _"
+
+#: elfxx-riscv.c:1773
+#, c-format
+msgid "-march=%s: ISA string cannot contain uppercase letters"
+msgstr "-march=%s: cadeia ISA nÃ£o pode conter maiÃºsculas"
+
+#: elfxx-riscv.c:1799
+#, c-format
+msgid "-march=%s: ISA string must begin with rv32 or rv64"
+msgstr "-march=%s: cadeia ISA tem de comeÃ§ar por rv32 ou rv64"
+
+#: elfxx-riscv.c:1832
+#, c-format
+msgid "-march=%s: rv32e does not support the `f' extension"
+msgstr "-march=%s: rv32e nÃ£o suporta a extensÃ£o \"f\""
+
+#: elfxx-riscv.c:1840
+#, c-format
+msgid "-march=%s: rv32 does not support the `q' extension"
+msgstr "-march=%s: rv32 nÃ£o suporta a extensÃ£o \"q\""
+
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5526
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
 msgstr "%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo STT_GNU_IFUNC \"%s\" nÃ£o Ã© gerido por %s"
 
-#: elfxx-tilegx.c:4254
+#: elfxx-tilegx.c:4126
 #, c-format
 msgid "%pB: cannot link together %s and %s objects"
 msgstr "%pB: impossÃ­vel ligar objectos %s e %s."
 
-#: elfxx-x86.c:578
+#: elfxx-x86.c:980
 #, c-format
-msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
-msgstr "%P: %pB: aviso: relocalizaÃ§Ã£o contra \"%s\" em secÃ§Ã£o sÃ³ de leitura \"%pA\"\n"
+msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
+msgstr "%F%P: %pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo absoluto \"%s\" na secÃ§Ã£o \"%pA\" nÃ£o Ã© permitida\n"
 
-#: elfxx-x86.c:1027
+#: elfxx-x86.c:1062
 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
 msgstr "%P: %pB: aviso: relocalizaÃ§Ã£o em secÃ§Ã£o sÃ³ de leitura \"%pA\"\n"
 
-#: elfxx-x86.c:1383
-msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n"
-msgstr "%P%X: segmento sÃ³ de leitura tem relocalizaÃ§Ãµes dinÃ¢micas IFUNC; recompile com -fPIC\n"
+#: elfxx-x86.c:1782
+#, c-format
+msgid "%pB: %s (offset: 0x%s, info: 0x%s, addend: 0x%s) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (desvio: 0x%s, informaÃ§Ã£o: 0x%s, adenda: 0x%s) contra \"%s\" para a secÃ§Ã£o \"%pA\" em %pB\n"
 
-#: elfxx-x86.c:2384
+#: elfxx-x86.c:1789
+#, c-format
+msgid "%pB: %s (offset: 0x%s, info: 0x%s) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (desvio: 0x%s, informaÃ§Ã£o: 0x%s) contra \"%s\" para a secÃ§Ã£o \"%pA\" em %pB\n"
+
+#: elfxx-x86.c:2367
 #, c-format
 msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
 msgstr "erro: %pB: <propriedade x86 corrompida (0x%x) tamanho: 0x%x>"
 
-#: elfxx-x86.c:2609
-msgid "%F%P: failed to create GNU property section\n"
-msgstr "%F%P: falha ao criar secÃ§Ã£o de propriedade GNU\n"
+#: elfxx-x86.c:2714
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: aviso: %s em falta\n"
+
+#: elfxx-x86.c:2715
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: erro: %s em falta\n"
+
+#: elfxx-x86.c:2778
+msgid "IBT and SHSTK properties"
+msgstr "propriedades IBT e SHSTK"
+
+#: elfxx-x86.c:2780
+msgid "IBT property"
+msgstr "propriedade IBT"
+
+#: elfxx-x86.c:2782
+msgid "SHSTK property"
+msgstr "propriedade SHSTK"
 
-#: elfxx-x86.c:2614
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: falha ao alinhar secÃ§Ã£o\n"
+#: elfxx-x86.c:2787
+msgid "LAM_U48 property"
+msgstr "propriedade LAM_U48"
+
+#: elfxx-x86.c:2792
+msgid "LAM_U57 property"
+msgstr "propriedade LAM_U57"
 
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:2936
 msgid "%F%P: failed to create VxWorks dynamic sections\n"
 msgstr "%F%P: falha ao criar secÃ§Ãµes dinÃ¢micas VxWorks \n"
 
-#: elfxx-x86.c:2769
+#: elfxx-x86.c:2945
 msgid "%F%P: failed to create GOT sections\n"
 msgstr "%F%P: falha ao criar secÃ§Ãµes GOT\n"
 
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:2963
 msgid "%F%P: failed to create ifunc sections\n"
 msgstr "%F%P: falha ao criar secÃ§Ãµes ifunc\n"
 
-#: elfxx-x86.c:2828
+#: elfxx-x86.c:3000
 msgid "%F%P: failed to create GOT PLT section\n"
 msgstr "%F%P: falha ao criar secÃ§Ã£o GOT PLT\n"
 
-#: elfxx-x86.c:2849
+#: elfxx-x86.c:3019
 msgid "%F%P: failed to create IBT-enabled PLT section\n"
 msgstr "%F%P: falha ao criar secÃ§Ã£o IBT-enabled PLT\n"
 
-#: elfxx-x86.c:2864
+#: elfxx-x86.c:3033
 msgid "%F%P: failed to create BND PLT section\n"
 msgstr "%F%P: falha ao criar secÃ§Ã£o BND PLT\n"
 
-#: elfxx-x86.c:2885
+#: elfxx-x86.c:3053
 msgid "%F%P: failed to create PLT .eh_frame section\n"
 msgstr "%F%P: falha ao criar secÃ§Ã£o PLT .eh_frame\n"
 
-#: elfxx-x86.c:2898
+#: elfxx-x86.c:3066
 msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
 msgstr "%F%P: falha ao criar secÃ§Ã£o GOT PLT .eh_frame\n"
 
-#: elfxx-x86.c:2912
+#: elfxx-x86.c:3080
 msgid "%F%P: failed to create the second PLT .eh_frame section\n"
 msgstr "%F%P: falha ao criar segunda secÃ§Ã£o PLT .eh_frame\n"
 
+#: elfxx-x86.c:3122
+msgid "%X%P: attempted static link of dynamic object `%pB'\n"
+msgstr "%X%P: tentada ligaÃ§Ã£o estÃ¡tica de objecto dinÃ¢mico \"%pB\"\n"
+
 #: ihex.c:230
 #, c-format
 msgid "%pB:%d: unexpected character `%s' in Intel Hex file"
@@ -5115,112 +5582,146 @@ msgstr "%pB:%d: carÃ¡cter \"%s\" inesper
 msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)"
 msgstr "%pB:%u: mau checksum em ficheiro Intel Hex (esperado %u, obtido %u)"
 
-#: ihex.c:394
+#: ihex.c:393
 #, c-format
 msgid "%pB:%u: bad extended address record length in Intel Hex file"
 msgstr "%pB:%u: mau tamanho de registo de endereÃ§o estendido em ficheiro Intel Hex"
 
-#: ihex.c:412
+#: ihex.c:411
 #, c-format
 msgid "%pB:%u: bad extended start address length in Intel Hex file"
 msgstr "%pB:%u: mau tamanho de endereÃ§o inicial estendido em ficheiro Intel Hex"
 
-#: ihex.c:430
+#: ihex.c:429
 #, c-format
 msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
 msgstr "%pB:%u: mau tamanho de registo em endereÃ§o linear estendido em ficheiro Intel Hex"
 
-#: ihex.c:448
+#: ihex.c:447
 #, c-format
 msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
 msgstr "%pB:%u: mau tamanho de endereÃ§o linear inicial estendido em ficheiro Intel Hex"
 
-#: ihex.c:466
+#: ihex.c:465
 #, c-format
 msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
 msgstr "%pB:%u: tipo ihex nÃ£o reconhecido %u em ficheiro Intel Hex"
 
-#: ihex.c:585
+#: ihex.c:581
 #, c-format
 msgid "%pB: internal error in ihex_read_section"
 msgstr "%pB: erro interno em ihex_read_section"
 
-#: ihex.c:619
+#: ihex.c:614
 #, c-format
 msgid "%pB: bad section length in ihex_read_section"
 msgstr "%pB: mau tamanho de secÃ§Ã£o em ihex_read_section"
 
-#: ihex.c:793
+#: ihex.c:785
 #, c-format
 msgid "%pB 64-bit address %#<PRIx64> out of range for Intel Hex file"
 msgstr "endereÃ§o %pB 64-bit %#<PRIx64> forta do intervalo para ficheiro Hex Intel"
 
-#: ihex.c:852
+#: ihex.c:843
 #, c-format
 msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
 msgstr "%pB: endereÃ§o %#<PRIx64> fora do intervalo para ficheiro Intel Hex"
 
-#: libbfd.c:937
+#: libbfd.c:969
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr "%pB: impossÃ­vel obter secÃ§Ã£o %pA descomprimida"
 
-#: libbfd.c:1101
+#: libbfd.c:1133
 #, c-format
 msgid "Deprecated %s called at %s line %d in %s\n"
 msgstr "%s obsoleto chamado em %s linha %d em %s\n"
 
-#: libbfd.c:1104
+#: libbfd.c:1136
 #, c-format
 msgid "Deprecated %s called\n"
 msgstr "%s obsoleto chamado\n"
 
-#: linker.c:1697
+#: linker.c:1706
 #, c-format
 msgid "%pB: indirect symbol `%s' to `%s' is a loop"
 msgstr "%pB: sÃ­mbolo indirecto \"%s\" para \"%s\" Ã© um ciclo"
 
-#: linker.c:2567
+#: linker.c:2577
 #, c-format
 msgid "attempt to do relocatable link with %s input and %s output"
 msgstr "Tentativa de fazer ligaÃ§Ã£o relocalizÃ¡vel com entrada %s e saÃ­da %s"
 
-#: linker.c:2853
+#: linker.c:2861
 #, c-format
 msgid "%pB: ignoring duplicate section `%pA'\n"
 msgstr "%pB: a ignorar secÃ§Ã£o \"%pA\" duplicada\n"
 
-#: linker.c:2863 linker.c:2873
+#: linker.c:2871 linker.c:2881
 #, c-format
 msgid "%pB: duplicate section `%pA' has different size\n"
 msgstr "%pB: secÃ§Ã£o \"%pA\" duplicada tem tamanho diferente\n"
 
-#: linker.c:2882 linker.c:2888
+#: linker.c:2890 linker.c:2896
 #, c-format
 msgid "%pB: could not read contents of section `%pA'\n"
 msgstr "%pB: impossÃ­vel ler conteÃºdo da secÃ§Ã£o \"%pA\"\n"
 
-#: linker.c:2893
+#: linker.c:2901
 #, c-format
 msgid "%pB: duplicate section `%pA' has different contents\n"
 msgstr "%pB: secÃ§Ã£o \"%pA\" duplicada tem conteÃºdo diferente\n"
 
-#: linker.c:3407
+#: linker.c:3419
 #, c-format
 msgid "%pB: compiled for a big endian system and target is little endian"
 msgstr "%pB: compilado para um sistema big endian e o alvo Ã© little endian"
 
-#: linker.c:3410
+#: linker.c:3422
 #, c-format
 msgid "%pB: compiled for a little endian system and target is big endian"
 msgstr "%pB: compilado para um sistema little endian e o alvo Ã© big endian"
 
-#: mach-o.c:632
+#: mach-o-arm.c:172
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr "par de relocalizaÃ§Ã£o mach-o ARM mal formado: relocalizaÃ§Ã£o Ã© a 1Âª relocalizaÃ§Ã£o"
+
+#: mach-o-arm.c:188
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr "par de relocalizaÃ§Ã£o mach-o ARM mal formado: tamanho invÃ¡lido: %d"
+
+#: mach-o-arm.c:203
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr "sectdiff de relocalizaÃ§Ã£o mach-o ARM mal formado: tamanho invÃ¡lido: %d"
+
+#: mach-o-arm.c:218
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr "sectdiff de relocalizaÃ§Ã£o local mach-o ARM mal formado: tamanho invÃ¡lido: %d"
+
+#: mach-o-arm.c:233
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr "metade de sectdiff de relocalizaÃ§Ã£o mach-o ARM mal formado: tamanho invÃ¡lido: %d"
+
+#: mach-o-arm.c:265
+#, c-format
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr "relocalizaÃ§Ã£o vanilla mach-o ARM mal formada: tamanho invÃ¡lido: %d (pcrel: %d)"
+
+#: mach-o-arm.c:329
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr "relocalizaÃ§Ã£o mach-o ARM mal formada: tipo de relocalizaÃ§Ã£o desconhecido: %d"
+
+#: mach-o.c:631
 #, c-format
 msgid "<unknown mask flags>"
 msgstr "<bandeiras de mÃ¡scara desconhecidas>"
 
-#: mach-o.c:687
+#: mach-o.c:686
 msgid " (<unknown>)"
 msgstr "<desconhecido>"
 
@@ -5279,215 +5780,215 @@ msgstr "tipos de cpu incompatÃ­veis em f
 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
 msgstr "bfd_mach_o_canonicalize_symtab: impossÃ­vel carregar sÃ­mbolos"
 
-#: mach-o.c:2108
+#: mach-o.c:1504
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr "relocalizaÃ§Ã£o mach-o mal formada: Ã­ndice de secÃ§Ã£o maior que o nÃºmero de secÃ§Ãµes"
+
+#: mach-o.c:2138
 msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands."
 msgstr "desculpe: modtab, toc e extrefsyms ainda nÃ£o estÃ£o implementados para comandos dysymtab."
 
-#: mach-o.c:2554
+#: mach-o.c:2586
 #, c-format
 msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
 msgstr "mach-o: hÃ¡ demasiadas secÃ§Ãµes (%u), o mÃ¡ximo Ã© 255,\n"
 
-#: mach-o.c:2661
+#: mach-o.c:2693
 #, c-format
 msgid "unable to allocate data for load command %#x"
 msgstr "impossÃ­vel alocar dados para comando de carga %#x"
 
-#: mach-o.c:2766
+#: mach-o.c:2798
 #, c-format
 msgid "unable to write unknown load command %#x"
 msgstr "impossÃ­vel escrever comando de carga %#x desconhecido"
 
-#: mach-o.c:2950
+#: mach-o.c:2982
 #, c-format
 msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
 msgstr "endereÃ§o de secÃ§Ã£o (%#<PRIx64>) abaixo do inÃ­cio do segmento (%#<PRIx64>)"
 
-#: mach-o.c:3092
+#: mach-o.c:3124
 #, c-format
 msgid "unable to layout unknown load command %#x"
 msgstr "impossÃ­vel dispor comando de carga %#x desconhecido"
 
-#: mach-o.c:3628
+#: mach-o.c:3659
 #, c-format
 msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead"
 msgstr "bfd_mach_o_read_section_32: valor de alinhamento muito grande: %#lx, a usar 32"
 
-#: mach-o.c:3671
+#: mach-o.c:3702
 #, c-format
 msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead"
 msgstr "bfd_mach_o_read_section_64: valor de alinhamento muito grande: %#lx, a usar 32"
 
-#: mach-o.c:3722
+#: mach-o.c:3753
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"
 msgstr "bfd_mach_o_read_symtab_symbol: impossÃ­vel ler %d bytes em %u"
 
-#: mach-o.c:3741
+#: mach-o.c:3772
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
 msgstr "bfd_mach_o_read_symtab_symbol: nome fora do intervalo (%lu >= %u)"
 
-#: mach-o.c:3824
+#: mach-o.c:3855
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: sÃ­mbolo \"%s\" especificou secÃ§Ã£o invÃ¡lida %d (mÃ¡x %lu): a definir como indefinida"
 
-#: mach-o.c:3843
+#: mach-o.c:3874
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: sÃ­mbolo \"%s\" especificou campo de tipo invÃ¡lido 0x%x: a definir como indefinida"
 
-#: mach-o.c:3920
-msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
-msgstr "bfd_mach_o_read_symtab_symbols: impossÃ­vel alocar memÃ³ria para sÃ­mbolos"
-
-#: mach-o.c:4931
+#: mach-o.c:5063
 #, c-format
 msgid "%pB: unknown load command %#x"
 msgstr "%pB: comando de carga %#x desconhecido"
 
-#: mach-o.c:5122
+#: mach-o.c:5262
 #, c-format
 msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
 msgstr "bfd_mach_o_scan: arquitectura desconhecida 0x%lx/0x%lx"
 
-#: mach-o.c:5227
+#: mach-o.c:5384
 #, c-format
 msgid "unknown header byte-order value %#x"
 msgstr "valor de cabeÃ§alho byte-order %#x desconhecido"
 
-#: merge.c:878
+#: merge.c:895
 #, c-format
 msgid "%pB: access beyond end of merged section (%<PRId64>)"
 msgstr "%pB: acesso alÃ©m do fim da secÃ§Ã£o unida (%<PRId64>)"
 
-#: mmo.c:476
+#: mmo.c:475
 #, c-format
 msgid "%pB: no core to allocate section name %s"
 msgstr "%pB: sem nÃºcleo para alocar nome de secÃ§Ã£o %s"
 
-#: mmo.c:541
+#: mmo.c:540
 #, c-format
 msgid "%pB: no core to allocate a symbol %d bytes long"
 msgstr "%pB: sem nÃºcleo para alocar um sÃ­mbolo com %d bytes"
 
-#: mmo.c:955
+#: mmo.c:951
 #, c-format
 msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
 msgstr "%pB: tentativa de emitir conteÃºdo em endereÃ§o nÃ£o mÃºltiplo de 4 %#<PRIx64>"
 
-#: mmo.c:1252
+#: mmo.c:1247
 #, c-format
 msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: valor de initializaÃ§Ã£o para $255 nÃ£o Ã© \"Main\"\n"
 
-#: mmo.c:1399
+#: mmo.c:1394
 #, c-format
 msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
 msgstr "%pB: sequÃªncia de caracteres largos 0x%02X 0x%02X nÃ£o suportada apÃ³s nome de sÃ­mbolo comeÃ§ado por \"%s\"\n"
 
-#: mmo.c:1633
+#: mmo.c:1627
 #, c-format
 msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: lopcode \"%d\" nÃ£o suportado\n"
 
-#: mmo.c:1644
+#: mmo.c:1638
 #, c-format
 msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: esperado YZ = 1, obtido YZ = %d para lop_quote\n"
 
-#: mmo.c:1682
+#: mmo.c:1678
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: esperado z = 1 ou z = 2, obtido z = %d para lop_loc\n"
 
-#: mmo.c:1733
+#: mmo.c:1729
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: esperado z = 1 ou z = 2, obtido z = %d para lop_fixo\n"
 
-#: mmo.c:1774
+#: mmo.c:1770
 #, c-format
 msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: esperado y = 0, obtido y = %d para lop_fixrx\n"
 
-#: mmo.c:1785
+#: mmo.c:1781
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: esperado z = 16 ou z = 24, obtido z = %d para lop_fixrx\n"
 
-#: mmo.c:1810
+#: mmo.c:1806
 #, c-format
 msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: byte inicial da palavra operando tem de ser 0 ou 1, obtido %d para lop_fixrx\n"
 
-#: mmo.c:1835
+#: mmo.c:1831
 #, c-format
 msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
 msgstr "%pB: impossÃ­vel alocar nome de ficheiro para nÃºmero de ficheiro %d, %d bytes\n"
 
-#: mmo.c:1857
+#: mmo.c:1853
 #, c-format
 msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: nÃºmero de ficheiro %d \"%s\", jÃ¡ foi inserido como \"%s\"\n"
 
-#: mmo.c:1871
+#: mmo.c:1867
 #, c-format
 msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: nome de ficheiro para nÃºmero %d nÃ£o foi especificado antes do uso\n"
 
-#: mmo.c:1978
+#: mmo.c:1974
 #, c-format
 msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: campos y e z de lop_stab nÃ£o-zero, y: %d, z: %d\n"
 
-#: mmo.c:2015
+#: mmo.c:2011
 #, c-format
 msgid "%pB: invalid mmo file: lop_end not last item in file\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: lop_end nÃ£o Ã© o Ãºltimo item no ficheiro\n"
 
-#: mmo.c:2029
+#: mmo.c:2025
 #, c-format
 msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
 msgstr "%pB: ficheiro mmo invÃ¡lido: YZ de lop_end (%ld) nÃ£o igual ao nÃºmero de tetras para o lop_stab (%ld) precedente\n"
 
-#: mmo.c:2740
+#: mmo.c:2734
 #, c-format
 msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
 msgstr "%pB: tabela de sÃ­mbolo invÃ¡lida: sÃ­mbolo duplicado \"%s\"\n"
 
-#: mmo.c:2983
+#: mmo.c:2978
 #, c-format
 msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n"
 msgstr "%pB: mÃ¡ definiÃ§Ã£o de sÃ­mbolo: \"Main\" definido como %s em vez do endereÃ§o inicial %s\n"
 
-#: mmo.c:3082
+#: mmo.c:3077
 #, c-format
 msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
 msgstr "%pB: aviso: tabela de simbolo muito grande para mmo, maior que palavras de 65535 32-bit: %d. SÃ³ \"Main\" serÃ¡ emitido.\n"
 
-#: mmo.c:3128
+#: mmo.c:3123
 #, c-format
 msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
 msgstr "%pB: erro interno, tabela de sÃ­mbolo alterou o tamanho de %d para %d palavras\n"
 
-#: mmo.c:3181
+#: mmo.c:3176
 #, c-format
 msgid "%pB: internal error, internal register section %pA had contents\n"
 msgstr "%pB: erro interno, secÃ§Ã£o de registo interna %pA tinha conteÃºdo\n"
 
-#: mmo.c:3232
+#: mmo.c:3227
 #, c-format
 msgid "%pB: no initialized registers; section length 0\n"
 msgstr "%pB: sem registos inicializados; tamanho de secÃ§Ã£o 0\n"
 
-#: mmo.c:3239
+#: mmo.c:3234
 #, c-format
 msgid "%pB: too many initialized registers; section length %<PRId64>"
 msgstr "%pB: demasiados registos inicializados; tamanho de secÃ§Ã£o %<PRId64>"
 
-#: mmo.c:3244
+#: mmo.c:3239
 #, c-format
 msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
 msgstr "%pB: endereÃ§o inicial invÃ¡lido para registos inicializados de tamanho %<PRId64>: %#<PRIx64>"
@@ -5497,48 +5998,55 @@ msgstr "%pB: endereÃ§o inicial invÃ¡lido
 msgid "unhandled OSF/1 core file section type %d"
 msgstr "Tipo de secÃ§Ã£o %d de ficheiro nÃºcleo OSF/1 nÃ£o gerida"
 
-#: pef.c:527
+#: pdp11.c:1590
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr "%pB: o sÃ­mbolo indica sobreposiÃ§Ã£o (nÃ£o suportado)"
+
+#: pef.c:530
 #, c-format
 msgid "bfd_pef_scan: unknown architecture 0x%lx"
 msgstr "bfd_pef_scan: arquitectura desconhecida 0x%lx"
 
-#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220
+#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 pei-x86_64.c:243
+#: pei-x86_64.c:253 pei-x86_64.c:278 pei-x86_64.c:290 pei-x86_64.c:304
+#: pei-x86_64.c:322 pei-x86_64.c:334 pei-x86_64.c:346
 #, c-format
 msgid "warning: corrupt unwind data\n"
 msgstr "aviso: dados unwind corrompidos\n"
 
 #. PR 17512: file: 2245-7442-0.004.
-#: pei-x86_64.c:315
+#: pei-x86_64.c:367
 #, c-format
 msgid "Unknown: %x"
 msgstr "Desconhecido: %x"
 
-#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384
+#: pei-x86_64.c:418 pei-x86_64.c:428 pei-x86_64.c:437
 #, c-format
 msgid "warning: xdata section corrupt\n"
 msgstr "aviso: secÃ§Ã£o xdata corrupta\n"
 
-#: pei-x86_64.c:439
+#: pei-x86_64.c:492
 #, c-format
 msgid "Too many unwind codes (%ld)\n"
 msgstr "Demasiados cÃ³digos unwind (%ld)\n"
 
-#: pei-x86_64.c:529
+#: pei-x86_64.c:582
 #, c-format
 msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
 msgstr "Aviso: tamanho de secÃ§Ã£o %s (%ld) nÃ£o Ã© mÃºltiplo de %d\n"
 
-#: pei-x86_64.c:536
+#: pei-x86_64.c:589
 #, c-format
 msgid "Warning: %s section size is zero\n"
 msgstr "Aviso: tamanho de secÃ§Ã£o %s Ã© zero\n"
 
-#: pei-x86_64.c:551
+#: pei-x86_64.c:604
 #, c-format
 msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
 msgstr "Aviso: tamanho de secÃ§Ã£o %s (%ld) Ã© menor que o tamanho virtual (%ld)\n"
 
-#: pei-x86_64.c:560
+#: pei-x86_64.c:613
 #, c-format
 msgid ""
 "\n"
@@ -5547,12 +6055,12 @@ msgstr ""
 "\n"
 "A tabela de funÃ§Ã£o (interpretado %s conteÃºdo de secÃ§Ã£o)\n"
 
-#: pei-x86_64.c:563
+#: pei-x86_64.c:616
 #, c-format
 msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
 msgstr "vma:\t\t\tEndInicial  \t EndFinal  \t DadosUnwind\n"
 
-#: pei-x86_64.c:692
+#: pei-x86_64.c:745
 #, c-format
 msgid ""
 "\n"
@@ -5562,46 +6070,50 @@ msgstr ""
 "Despejo de %s\n"
 
 #. XXX code yet to be written.
-#: peicode.h:775
+#: peicode.h:796
 #, c-format
 msgid "%pB: unhandled import type; %x"
 msgstr "%pB: tipo de importaÃ§Ã£o nÃ£o gerido; %x"
 
-#: peicode.h:781
+#: peicode.h:802
 #, c-format
 msgid "%pB: unrecognized import type; %x"
 msgstr "%pB: tipo de importaÃ§Ã£o nÃ£o reconhecido; %x"
 
-#: peicode.h:796
+#: peicode.h:817
 #, c-format
 msgid "%pB: unrecognized import name type; %x"
 msgstr "%pB: tipo de nome de importaÃ§Ã£o nÃ£o reconhecido; %x"
 
-#: peicode.h:1211
+#: peicode.h:1225
 #, c-format
 msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
 msgstr "%pB: tipo de mÃ¡quina nÃ£o reconhecido (0x%x) em arquivo Import Library Format"
 
-#: peicode.h:1224
+#: peicode.h:1238
 #, c-format
 msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
 msgstr "%pB: tipo de mÃ¡quina reconhecido mas nÃ£o gerido (0x%x) em arquivo Import Library Format"
 
-#: peicode.h:1242
+#: peicode.h:1256
 #, c-format
 msgid "%pB: size field is zero in Import Library Format header"
 msgstr "%pB: tamanho de campo Ã© zero em cabeÃ§alho Import Library Format"
 
-#: peicode.h:1274
+#: peicode.h:1282
 #, c-format
 msgid "%pB: string not null terminated in ILF object file"
 msgstr "%pB: cadeia nÃ£-null terminada em ficheiro objecto ILF."
 
-#: peicode.h:1330
+#: peicode.h:1338
 #, c-format
 msgid "%pB: error: debug data ends beyond end of debug directory"
 msgstr "%pB: erro: Debug Data termina apÃ³s o fim da pasta de depuraÃ§Ã£o."
 
+#: plugin.c:236
+msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr "estrutura da extensÃ£o: sem descritores de ficheiro. Tente usar menos objectos/arquivos\n"
+
 #: ppcboot.c:392
 #, c-format
 msgid ""
@@ -5655,42 +6167,33 @@ msgstr "Sector da partiÃ§Ã£o[%d] = 0x%.8
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
 msgstr "Tamanho da partiÃ§Ã£o[%d] = 0x%.8lx (%ld)\n"
 
-#: reloc.c:8232
+#: reloc.c:8329
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr "INPUT_SECTION_FLAGS nÃ£o sÃ£o suportadas."
 
-#: reloc.c:8333
-#, c-format
-msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
-msgstr "%X%P: %pB(%pA): erro: relocalizaÃ§Ã£o para desvio %V nÃ£o tem valor\n"
-
-#: reloc.c:8420
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
-msgstr "%X%P: %pB(%pA): relocalizaÃ§Ã£o \"%R\" nÃ£o Ã© suportada\n"
-
-#: reloc.c:8429
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
-msgstr "%X%P: %pB(%pA): relocalizaÃ§Ã£o \"%R\" devolve um valor nÃ£o reconhecido %x\n"
-
-#: reloc.c:8491
+#: reloc.c:8589
 #, c-format
 msgid "%pB: unrecognized relocation type %#x in section `%pA'"
 msgstr "%pB: relocalizaÃ§Ã£o nÃ£o reconhecida (%#x) na secÃ§Ã£o \"%pA\""
 
 #. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8495
+#: reloc.c:8593
 #, c-format
 msgid "is this version of the linker - %s - out of date ?"
 msgstr "EstarÃ¡ esta versÃ£o do linker - %s - fora do prazo?"
 
-#: rs6000-core.c:471
+#: rs6000-core.c:470
 #, c-format
 msgid "%pB: warning core file truncated"
 msgstr "%pB: aviso: ficheiro nÃºcleo truncado"
 
-#: som.c:5478
+#. User has specified a subspace without its containing space.
+#: som.c:5476
+#, c-format
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr "%pB[%pA]: sem secÃ§Ã£o de saÃ­da para espaÃ§o %pA"
+
+#: som.c:5522
 #, c-format
 msgid ""
 "\n"
@@ -5699,7 +6202,7 @@ msgstr ""
 "\n"
 "Exec Auxiliary Header\n"
 
-#: som.c:5787
+#: som.c:5831
 msgid "som_sizeof_headers unimplemented"
 msgstr "som_sizeof_headers nÃ£o implementado"
 
@@ -5713,7 +6216,7 @@ msgstr "%pB:%d: carÃ¡cter \"%s\" inesper
 msgid "%pB:%d: byte count %d too small"
 msgstr "%pB:%d: total de byte %d muito pequeno"
 
-#: srec.c:581 srec.c:615
+#: srec.c:580 srec.c:614
 #, c-format
 msgid "%pB:%d: bad checksum in S-record file"
 msgstr "%pB:%d: mau checksum em ficheiro S-record"
@@ -5723,73 +6226,82 @@ msgstr "%pB:%d: mau checksum em ficheiro
 msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
 msgstr "%pB(%pA+%#lx): entrada Stabs tem Ã­ndice de cadeia invÃ¡lido."
 
-#: syms.c:1091
+#: syms.c:1092
 msgid "unsupported .stab relocation"
 msgstr "RelocalizaÃ§Ã£o .stab nÃ£o suportada"
 
-#: vms-alpha.c:479
+#: vms-alpha.c:478
 msgid "corrupt EIHD record - size is too small"
 msgstr "Registo EIHD corrupto - tamanho muito pequeno"
 
-#: vms-alpha.c:660
+#: vms-alpha.c:664
 #, c-format
 msgid "unable to read EIHS record at offset %#x"
 msgstr "ImpossÃ­vel ler registo EIHS no desvio %#x"
 
-#: vms-alpha.c:1173
+#: vms-alpha.c:1156
+msgid "record is too small for symbol name length"
+msgstr "registo muito pequeno para o tamanho do nome do sÃ­mbolo"
+
+#: vms-alpha.c:1189
 #, c-format
 msgid "corrupt EGSD record: its size (%#x) is too small"
 msgstr "Registo EGSD corrupto: tamanho (%#x) muito pequeno"
 
-#: vms-alpha.c:1197
+#: vms-alpha.c:1213
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)"
-msgstr "Registo EGSD corrupto: tamanho (%#x) maior que o espaÃ§o restante (%#x)"
+msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
+msgstr "tipo de registo EGSD %d corrupto: tamanho (%#x) maior que o espaÃ§o restante (%#x)"
 
-#: vms-alpha.c:1205
+#: vms-alpha.c:1223
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is too small"
-msgstr "Registo EGSD corrupto: tamanho (%#x) muito pequeno"
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
+msgstr "tipo de registo EGSD %d corrupto: tamanho (%#x) muito pequeno"
 
-#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390
+#: vms-alpha.c:1365
 #, c-format
 msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
 msgstr "Registo EGSD corrupto: campo psindx muito grande (%#lx)"
 
-#: vms-alpha.c:1419
+#: vms-alpha.c:1440
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr "Sub-tipo EGSD %d desconhecido"
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1473
 #, c-format
 msgid "stack overflow (%d) in _bfd_vms_push"
 msgstr "Transporte de stack (%d) em _bfd_vms_push"
 
-#: vms-alpha.c:1465
+#: vms-alpha.c:1487
 msgid "stack underflow in _bfd_vms_pop"
 msgstr "Sub-transporte de stack em _bfd_vms_pop"
 
+#: vms-alpha.c:1561
+#, c-format
+msgid "dst_define_location %u too large"
+msgstr "dst_define_location %u muito grande"
+
 #. These names have not yet been added to this switch statement.
-#: vms-alpha.c:1707
+#: vms-alpha.c:1762
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr "comando ETIR %d desconhecido"
 
-#: vms-alpha.c:1738
+#: vms-alpha.c:1793
 msgid "corrupt vms value"
 msgstr "Valor vms corrupto"
 
-#: vms-alpha.c:1866
+#: vms-alpha.c:1924
 msgid "corrupt ETIR record encountered"
 msgstr "Encontrado registo ETIR corrupto"
 
-#: vms-alpha.c:1923
+#: vms-alpha.c:1986
 #, c-format
 msgid "bad section index in %s"
 msgstr "mau Ã­ndice de secÃ§Ã£o em %s"
 
-#: vms-alpha.c:1936
+#: vms-alpha.c:2000
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr "comando STA %s nÃ£o suportado"
@@ -5799,1468 +6311,1480 @@ msgstr "comando STA %s nÃ£o suportado"
 #. Rotate.
 #. Redefine symbol to current location.
 #. Define a literal.
-#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396
+#: vms-alpha.c:2208 vms-alpha.c:2239 vms-alpha.c:2334 vms-alpha.c:2554
 #, c-format
 msgid "%s: not supported"
 msgstr "%s: nÃ£o suportado"
 
-#: vms-alpha.c:2122
+#: vms-alpha.c:2214
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: nÃ£o implementado"
 
-#: vms-alpha.c:2380
+#: vms-alpha.c:2379 vms-alpha.c:2394
+#, c-format
+msgid "invalid %s"
+msgstr "%s invÃ¡lido"
+
+#. Divide by zero is supposed to give a result of zero,
+#. and a non-fatal warning message.
+#: vms-alpha.c:2454
+#, c-format
+msgid "%s divide by zero"
+msgstr "%s divide por zero"
+
+#: vms-alpha.c:2520
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr "uso invÃ¡lido de %s com contextos"
 
-#: vms-alpha.c:2414
+#: vms-alpha.c:2578
 #, c-format
 msgid "reserved cmd %d"
 msgstr "comando reservado %d"
 
-#: vms-alpha.c:2498
+#: vms-alpha.c:2662
 msgid "corrupt EEOM record - size is too small"
 msgstr "Registo EEOM corrupto - tamanho demasiado pequeno"
 
-#: vms-alpha.c:2507
+#: vms-alpha.c:2671
 msgid "object module not error-free !"
 msgstr "MÃ³dulo objecto NÃƒO livre de erros!"
 
-#: vms-alpha.c:3831
+#: vms-alpha.c:3999
 #, c-format
 msgid "SEC_RELOC with no relocs in section %pA"
 msgstr "SEC_RELOC sem relocs na secÃ§Ã£o %pA"
 
-#: vms-alpha.c:3883 vms-alpha.c:4097
+#: vms-alpha.c:4051 vms-alpha.c:4266
 #, c-format
 msgid "size error in section %pA"
 msgstr "Erro de tamanho na secÃ§Ã£o %pA"
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4211
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr "RelocalizaÃ§Ã£o ALPHA_R_BSR espÃºria"
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4252
 #, c-format
 msgid "unhandled relocation %s"
 msgstr "RelocalizaÃ§Ã£o %s nÃ£o gerida"
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4549
 #, c-format
 msgid "unknown source command %d"
 msgstr "Comando fonte %d desconhecido"
 
-#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456
-#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501
-#: vms-alpha.c:4507
+#: vms-alpha.c:4610 vms-alpha.c:4616 vms-alpha.c:4622 vms-alpha.c:4628
+#: vms-alpha.c:4634 vms-alpha.c:4661 vms-alpha.c:4667 vms-alpha.c:4673
+#: vms-alpha.c:4679
 #, c-format
 msgid "%s not implemented"
 msgstr "%s: nÃ£o implementado"
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4722
 #, c-format
 msgid "unknown line command %d"
 msgstr "comando de linha %d desconhecido"
 
-#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059
-#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097
+#: vms-alpha.c:5186 vms-alpha.c:5204 vms-alpha.c:5219 vms-alpha.c:5235
+#: vms-alpha.c:5248 vms-alpha.c:5260 vms-alpha.c:5273
 #, c-format
 msgid "unknown reloc %s + %s"
 msgstr "Reloc %s + %s desconhecida"
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5328
 #, c-format
 msgid "unknown reloc %s"
 msgstr "Reloc %s desconhecida"
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5342
 msgid "invalid section index in ETIR"
 msgstr "Ã�ndice de secÃ§Ã£o invÃ¡lido em ETIR"
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5351
 msgid "relocation for non-REL psect"
 msgstr "RelocalizaÃ§Ã£o para psect nÃ£o-REL"
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5400
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr "SÃ­mbolo desconhecido em comando %s"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:5814
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr "reloc (%d) Ã© *UNKNOWN*"
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:5930
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (tam=%u): "
 
-#: vms-alpha.c:5757
+#: vms-alpha.c:5935
 #, c-format
 msgid "   Error: The length is less than the length of an EMH record\n"
 msgstr "   Erro: o tamanho Ã© menor que o tamanho de um registo EMH\n"
 
-#: vms-alpha.c:5774
+#: vms-alpha.c:5952
 #, c-format
 msgid "   Error: The record length is less than the size of an EMH_MHD record\n"
 msgstr "   Erro: o tamanho do registo Ã© menor que o tamanho de um registo EMH_MHD\n"
 
-#: vms-alpha.c:5777
+#: vms-alpha.c:5955
 #, c-format
 msgid "Module header\n"
 msgstr "CabeÃ§alho de mÃ³dulo\n"
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:5956
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   nÃ­vel de estrutura: %u\n"
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:5957
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   tam. mÃ¡x registo: %u\n"
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:5963
 #, c-format
 msgid "   Error: The module name is missing\n"
 msgstr "   Erro: nome de mÃ³dulo em falta\n"
 
-#: vms-alpha.c:5791
+#: vms-alpha.c:5969
 #, c-format
 msgid "   Error: The module name is too long\n"
 msgstr "   Erro: nome de mÃ³dulo muito longo\n"
 
-#: vms-alpha.c:5794
+#: vms-alpha.c:5972
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   nome de mÃ³dulo : %.*s\n"
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:5976
 #, c-format
 msgid "   Error: The module version is missing\n"
 msgstr "   Erro: versÃ£o de mÃ³dulo em falta\n"
 
-#: vms-alpha.c:5804
+#: vms-alpha.c:5982
 #, c-format
 msgid "   Error: The module version is too long\n"
 msgstr "   Erro: versÃ£o de mÃ³dulo muito longa\n"
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:5985
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   versÃ£o de mÃ³dulo: %.*s\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:5988
 #, c-format
 msgid "   Error: The compile date is truncated\n"
 msgstr "   Erro: data de compilaÃ§Ã£o truncada\n"
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:5990
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   data compilaÃ§Ã£o: %.17s\n"
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:5995
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Nome do processador de linguagem\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:5996
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   nome linguagem: %.*s\n"
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6000
 #, c-format
 msgid "Source Files Header\n"
 msgstr "CabeÃ§alho de ficheiros fonte\n"
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6001
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   ficheiro: %.*s\n"
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6005
 #, c-format
 msgid "Title Text Header\n"
 msgstr "CabeÃ§alho do texto de tÃ­tulo\n"
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6006
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   tÃ­tulo: %.*s\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6010
 #, c-format
 msgid "Copyright Header\n"
 msgstr "CabeÃ§alho de copyright\n"
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6011
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   copyright: %.*s\n"
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6015
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr "sub-tipo emh %u nÃ£o gerido\n"
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6025
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (tam=%u):\n"
 
-#: vms-alpha.c:5852
+#: vms-alpha.c:6030
 #, c-format
 msgid "   Error: The length is less than the length of an EEOM record\n"
 msgstr "   Erro: o tamanho Ã© menor que o tamanho de um registo EEOM\n"
 
-#: vms-alpha.c:5856
+#: vms-alpha.c:6034
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr "   nÃºmero de pares de ligaÃ§Ã£o condicional: %u\n"
 
-#: vms-alpha.c:5858
+#: vms-alpha.c:6036
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   cÃ³digo de conclusÃ£o: %u\n"
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6040
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr "   transferir band end: 0x%02x\n"
 
-#: vms-alpha.c:5863
+#: vms-alpha.c:6041
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   transferir psect end.: %u\n"
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6043
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   transferir endereÃ§o: 0x%08x\n"
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6052
 msgid " WEAK"
 msgstr " WEAK"
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6054
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6056
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6058 vms-alpha.c:6079
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6060
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6062
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6064
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6066
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6073
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6075
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6077
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6081
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6083
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6085
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6087
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6089
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6091
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6093
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6095
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6097
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6106
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (tam=%u):\n"
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6119
 #, c-format
 msgid "  EGSD entry %2u (type: %u, len: %u): "
 msgstr "  entrada EGSD %2u (tipo: %u, tamanho: %u): "
 
-#: vms-alpha.c:5947 vms-alpha.c:6198
+#: vms-alpha.c:6125 vms-alpha.c:6376
 #, c-format
 msgid "   Error: length larger than remaining space in record\n"
 msgstr "   Erro: tamanho maior que o espaÃ§o restante no registo\n"
 
-#: vms-alpha.c:5959
+#: vms-alpha.c:6137
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr "PSC - definiÃ§Ã£o da secÃ§Ã£o Program\n"
 
-#: vms-alpha.c:5960 vms-alpha.c:5977
+#: vms-alpha.c:6138 vms-alpha.c:6155
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   alinhamento  : 2**%u\n"
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6139 vms-alpha.c:6156
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   bandeiras  : 0x%04x"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6143
 #, c-format
 msgid "   alloc (len): %u (0x%08x)\n"
 msgstr "   aloc. (tam): %u (0x%08x)\n"
 
-#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072
+#: vms-alpha.c:6144 vms-alpha.c:6201 vms-alpha.c:6250
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   nome       : %.*s\n"
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6154
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr "SPSC - definiÃ§Ã£o de secÃ§Ã£o Shared Image Program\n"
 
-#: vms-alpha.c:5982
+#: vms-alpha.c:6160
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   aloc. (tam)   : %u (0x%08x)\n"
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6161
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   desvio imagem : 0x%08x\n"
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6163
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   desvio symvec : 0x%08x\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6165
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   nome          : %.*s\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6178
 #, c-format
 msgid "SYM - Global symbol definition\n"
 msgstr "SYM - definiÃ§Ã£o de sÃ­mbolo Global\n"
 
-#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101
+#: vms-alpha.c:6179 vms-alpha.c:6239 vms-alpha.c:6260 vms-alpha.c:6279
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   bandeiras: 0x%04x"
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6182
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   desvio psect: 0x%08x\n"
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6186
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   end. de cÃ³d.: 0x%08x\n"
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6188
 #, c-format
 msgid "   psect index for entry point : %u\n"
 msgstr "   Ã­ndice psect do ponto de entrada: %u\n"
 
-#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108
+#: vms-alpha.c:6191 vms-alpha.c:6267 vms-alpha.c:6286
 #, c-format
 msgid "   psect index : %u\n"
 msgstr "   Ã­ndice psect : %u\n"
 
-#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110
+#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   nome        : %.*s\n"
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6200
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM - referÃªncia de sÃ­mbolo Global\n"
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6212
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr "IDC - verificaÃ§Ã£o Ident Consistency\n"
 
-#: vms-alpha.c:6035
+#: vms-alpha.c:6213
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   bandeiras     : 0x%08x"
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6217
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   comparaÃ§Ã£o id : %x\n"
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6219
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   severidade do erro: %x\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6222
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   nome entidade : %.*s\n"
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6224
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   nome objecto  : %.*s\n"
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6227
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   ident. binÃ¡ria: 0x%08x\n"
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6230
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   ident. ascii  : %.*s\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6238
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG - definiÃ§Ã£o Universal\n"
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6242
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr "   desvio do vector de sÃ­mbolo: 0x%08x\n"
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6244
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   ponto de entrada: 0x%08x\n"
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6246
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   descriÃ§Ã£o de procedimento: 0x%08x\n"
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6248
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   Ã­ndice psect: %u\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6259
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV - definiÃ§Ã£o de sÃ­mbolo Vectored\n"
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6263
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   vector      : 0x%08x\n"
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6265 vms-alpha.c:6284
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   desvio psect: %u\n"
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6278
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr "SYMM - definiÃ§Ã£o de sÃ­mbolo Global com versÃ£o\n"
 
-#: vms-alpha.c:6104
+#: vms-alpha.c:6282
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   mÃ¡scara de versÃ£o: 0x%08x\n"
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6293
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr "tipo de entrada egsd %u nÃ£o gerida\n"
 
-#: vms-alpha.c:6150
+#: vms-alpha.c:6328
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr "    Ã­ndice de ligaÃ§Ã£o: %u, insn de substituiÃ§Ã£o: 0x%08x\n"
 
-#: vms-alpha.c:6154
+#: vms-alpha.c:6332
 #, c-format
 msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
 msgstr "    Ã­nd psect 1: %u, desvio 1: 0x%08x %08x\n"
 
-#: vms-alpha.c:6159
+#: vms-alpha.c:6337
 #, c-format
 msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
 msgstr "    Ã­nd psect 2: %u, desvio 2: 0x%08x %08x\n"
 
-#: vms-alpha.c:6165
+#: vms-alpha.c:6343
 #, c-format
 msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
 msgstr "    Ã­nd psect 3: %u, desvio 3: 0x%08x %08x\n"
 
-#: vms-alpha.c:6170
+#: vms-alpha.c:6348
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "    nome global: %.*s\n"
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6359
 #, c-format
 msgid "  %s (len=%u+%u):\n"
 msgstr "  %s (tam=%u+%u):\n"
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6381
 #, c-format
 msgid "   (type: %3u, size: 4+%3u): "
 msgstr "   (tipo: %3u, tam.: 4+%3u): "
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6385
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr "STA_GBL (stack global) %.*s\n"
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6389
 #, c-format
 msgid "STA_LW (stack longword) 0x%08x\n"
 msgstr "STA_LW (stack longword) 0x%08x\n"
 
-#: vms-alpha.c:6215
+#: vms-alpha.c:6393
 #, c-format
 msgid "STA_QW (stack quadword) 0x%08x %08x\n"
 msgstr "STA_QW (stack quadword) 0x%08x %08x\n"
 
-#: vms-alpha.c:6220
+#: vms-alpha.c:6398
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr "STA_PQ (stack psect base + desvio)\n"
 
-#: vms-alpha.c:6222
+#: vms-alpha.c:6400
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr "    psect: %u, desvio: 0x%08x %08x\n"
 
-#: vms-alpha.c:6228
+#: vms-alpha.c:6406
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr "STA_LI (stack literal)\n"
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6409
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr "STA_MOD (stack mÃ³dulo)\n"
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6412
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr "STA_CKARG (comparar argumento de procedimento)\n"
 
-#: vms-alpha.c:6238
+#: vms-alpha.c:6416
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (armazenar byte)\n"
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6419
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (armazenar word)\n"
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6422
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (armazenar longword)\n"
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6425
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (armazenar quadword)\n"
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6431
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr "STO_IMMR (armazenar repetiÃ§Ã£o imediata) %u bytes\n"
 
-#: vms-alpha.c:6260
+#: vms-alpha.c:6438
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (armazenar global) %.*s\n"
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6442
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr "STO_CA (armazenar endereÃ§o de cÃ³digo) %.*s\n"
 
-#: vms-alpha.c:6268
+#: vms-alpha.c:6446
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (armazenar ramo relativo)\n"
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6449
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (armazenar ramo absoluto)\n"
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6452
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr "STO_OFF (armazenar desvio para psect)\n"
 
-#: vms-alpha.c:6280
+#: vms-alpha.c:6458
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr "STO_IMM (armazenar imediato) %u bytes\n"
 
-#: vms-alpha.c:6287
+#: vms-alpha.c:6465
 #, c-format
 msgid "STO_GBL_LW (store global longword) %.*s\n"
 msgstr "STO_GBL_LW (armazenar longword global) %.*s\n"
 
-#: vms-alpha.c:6291
+#: vms-alpha.c:6469
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr "STO_OFF ( global LP com assinatura de procedimento)\n"
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6472
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr "STO_BR_GBL ( global ramo global) *todo*\n"
 
-#: vms-alpha.c:6297
+#: vms-alpha.c:6475
 #, c-format
 msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
 msgstr "STO_BR_PS ( global ramo psect + desvio) *todo*\n"
 
-#: vms-alpha.c:6301
+#: vms-alpha.c:6479
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr "OPR_NOP (sem-operaÃ§Ã£o)\n"
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6482
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (adicionar)\n"
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6485
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (subtrair)\n"
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6488
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (multiplicar)\n"
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6491
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (dividir)\n"
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6494
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (e lÃ³gico)\n"
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6497
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (ou inclusivo lÃ³gico)\n"
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6500
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (ou exclusivo lÃ³gico)\n"
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6503
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (negar)\n"
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6506
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (complementar)\n"
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6509
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (inserir campo)\n"
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6512
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (mudanÃ§a aritmÃ©tica)\n"
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6515
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (mudanÃ§a nÃ£o assinada)\n"
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6518
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (rodar)\n"
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6521
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (seleccionar)\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6524
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr "OPR_REDEF (redefinir sÃ­mbolo para localizaÃ§Ã£o actual)\n"
 
-#: vms-alpha.c:6349
+#: vms-alpha.c:6527
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr "OPR_REDEF (definir um literal)\n"
 
-#: vms-alpha.c:6353
+#: vms-alpha.c:6531
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr "STC_LP (armazenar par de ligaÃ§Ã£o condicional)\n"
 
-#: vms-alpha.c:6357
+#: vms-alpha.c:6535
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr "STC_LP_PSB (armazenar par de ligaÃ§Ã£o condicional + assinatura)\n"
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:6537
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr "   Ã­ndice de ligaÃ£o: %u, procedimento: %.*s\n"
 
-#: vms-alpha.c:6362
+#: vms-alpha.c:6540
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   assinatura: %.*s\n"
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6543
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (armazenar global condicional)\n"
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6545
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr "   Ã­ndice de ligaÃ§Ã£o: %u, global: %.*s\n"
 
-#: vms-alpha.c:6371
+#: vms-alpha.c:6549
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr "STC_GCA (armazenar endereÃ§o de cÃ³digo condicional)\n"
 
-#: vms-alpha.c:6373
+#: vms-alpha.c:6551
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr "   Ã­ndice de ligaÃ§Ã£o: %u, nome do procedimento: %.*s\n"
 
-#: vms-alpha.c:6377
+#: vms-alpha.c:6555
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr "STC_PS (armazenar psect condicional + desvio)\n"
 
-#: vms-alpha.c:6380
+#: vms-alpha.c:6558
 #, c-format
 msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
 msgstr "   Ã­ndice de ligaÃ§Ã£o: %u, psect: %u, desvio: 0x%08x %08x\n"
 
-#: vms-alpha.c:6387
+#: vms-alpha.c:6565
 #, c-format
 msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
 msgstr "STC_NOP_GBL (armazenar NOP condicional em endereÃ§o global)\n"
 
-#: vms-alpha.c:6391
+#: vms-alpha.c:6569
 #, c-format
 msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
 msgstr "STC_NOP_PS (armazenar NOP condicional em psect + desvio)\n"
 
-#: vms-alpha.c:6395
+#: vms-alpha.c:6573
 #, c-format
 msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
 msgstr "STC_BSR_GBL (armazenar BSR condicional em endereÃ§o global)\n"
 
-#: vms-alpha.c:6399
+#: vms-alpha.c:6577
 #, c-format
 msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
 msgstr "STC_BSR_PS (armazenar BSR condicional em psect + desvio)\n"
 
-#: vms-alpha.c:6403
+#: vms-alpha.c:6581
 #, c-format
 msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
 msgstr "STC_LDA_GBL (armazenar LDA condicional em endereÃ§o global)\n"
 
-#: vms-alpha.c:6407
+#: vms-alpha.c:6585
 #, c-format
 msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
 msgstr "STC_LDA_PS (armazenar LDA condicional em psect + desvio)\n"
 
-#: vms-alpha.c:6411
+#: vms-alpha.c:6589
 #, c-format
 msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
 msgstr "STC_BOH_GBL (armazenar BOH condicional em endereÃ§o global)\n"
 
-#: vms-alpha.c:6415
+#: vms-alpha.c:6593
 #, c-format
 msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
 msgstr "STC_BOH_PS (armazenar BOH condicional em psect + desvio)\n"
 
-#: vms-alpha.c:6420
+#: vms-alpha.c:6598
 #, c-format
 msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
 msgstr "STC_NBH_GBL (armazenar condicional ou dica em endereÃ§o global)\n"
 
-#: vms-alpha.c:6424
+#: vms-alpha.c:6602
 #, c-format
 msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
 msgstr "STC_NBH_PS (armazenar condicional ou dica em psect + desvio)\n"
 
-#: vms-alpha.c:6428
+#: vms-alpha.c:6606
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr "CTL_SETRB (definir base de relocalizaÃ§Ã£o)\n"
 
-#: vms-alpha.c:6434
+#: vms-alpha.c:6612
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr "CTL_AUGRB (aumentar base de relocalizaÃ§Ã£o) %u\n"
 
-#: vms-alpha.c:6438
+#: vms-alpha.c:6616
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (definir localizaÃ§Ã£o)\n"
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6619
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (definir localizaÃ§Ã£o)\n"
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6622
 #, c-format
 msgid "CTL_STKDL (stack defined location)\n"
 msgstr "CTL_STKDL (localizaÃ§Ã£o definida por stack)\n"
 
-#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997
+#: vms-alpha.c:6625 vms-alpha.c:7049 vms-alpha.c:7175
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*nÃ£o gerido*\n"
 
-#: vms-alpha.c:6477 vms-alpha.c:6516
+#: vms-alpha.c:6655 vms-alpha.c:6694
 #, c-format
 msgid "cannot read GST record length\n"
 msgstr "impossÃ­vel ler tamanho do registo GST\n"
 
 #. Ill-formed.
-#: vms-alpha.c:6498
+#: vms-alpha.c:6676
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr "impossÃ­vel encontrar EMH no primeiro registo GST\n"
 
-#: vms-alpha.c:6524
+#: vms-alpha.c:6702
 #, c-format
 msgid "cannot read GST record header\n"
 msgstr "impossÃ­vel ler cabeÃ§alho de registo GST\n"
 
-#: vms-alpha.c:6537
+#: vms-alpha.c:6715
 #, c-format
 msgid " corrupted GST\n"
 msgstr " GST corrompido\n"
 
-#: vms-alpha.c:6545
+#: vms-alpha.c:6723
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "impossÃ­vel ler registo GST\n"
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:6752
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr " tipo de registo EOBJ %u nÃ£o gerido\n"
 
-#: vms-alpha.c:6598
+#: vms-alpha.c:6776
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr "  bitcount: %u, endereÃ§o base: 0x%08x\n"
 
-#: vms-alpha.c:6612
+#: vms-alpha.c:6790
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr "   bitmap: 0x%08x (total: %u):\n"
 
-#: vms-alpha.c:6619
+#: vms-alpha.c:6797
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:6823
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  imagem %u (%u entradas)\n"
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:6829
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr "   desvio: 0x%08x, val: 0x%08x\n"
 
-#: vms-alpha.c:6673
+#: vms-alpha.c:6851
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  imagem %u (%u entradas), desvios:\n"
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:6858
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:6980
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 bits *nÃ£o geridos*\n"
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:6985
 #, c-format
 msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
 msgstr "classe: %u, dtype: %u, tamanho: %u, ponteiro: 0x%08x\n"
 
-#: vms-alpha.c:6818
+#: vms-alpha.c:6996
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr "matriz nÃ£o contÃ­nua de %s\n"
 
-#: vms-alpha.c:6823
+#: vms-alpha.c:7001
 #, c-format
 msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
 msgstr "dimct: %u, aflags: 0x%02x, dÃ­gitos: %u, escala: %u\n"
 
-#: vms-alpha.c:6828
+#: vms-alpha.c:7006
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "arsize: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7010
 #, c-format
 msgid "Strides:\n"
 msgstr "Passos:\n"
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7020
 #, c-format
 msgid "Bounds:\n"
 msgstr "VÃ­nculos:\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7026
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr "[%u]: inferior: %u, superior: %u\n"
 
-#: vms-alpha.c:6860
+#: vms-alpha.c:7038
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr "cadeia de bits nÃ£o alinhada de %s\n"
 
-#: vms-alpha.c:6865
+#: vms-alpha.c:7043
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "base: %u, pos: %u\n"
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7064
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "vflags: 0x%02x, valor: 0x%08x "
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7070
 #, c-format
 msgid "(no value)\n"
 msgstr "(sem valor)\n"
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7073
 #, c-format
 msgid "(not active)\n"
 msgstr "(nÃ£o activo)\n"
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7076
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(nÃ£o alocada)\n"
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7079
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(descritor)\n"
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7083
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(valor inicial)\n"
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7086
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(spec de valor segue)\n"
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7089
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(no desvio de bit %u)\n"
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7093
 #, c-format
 msgid "(reg: %u, disp: %u, indir: %u, kind: "
 msgstr "(reg: %u, disp: %u, indir: %u, tipo: "
 
-#: vms-alpha.c:6922
+#: vms-alpha.c:7100
 msgid "literal"
 msgstr "literal"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7103
 msgid "address"
 msgstr "endereÃ§o"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7106
 msgid "desc"
 msgstr "desc"
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7109
 msgid "reg"
 msgstr "reg"
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7126
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr "tam: %2u, tipo: %2u "
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7132
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr "atÃ³mico, tipo=0x%02x %s\n"
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7136
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr "indirecto, definido em 0x%08x\n"
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7140
 #, c-format
 msgid "typed pointer\n"
 msgstr "ponteiro com tipo\n"
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7144
 #, c-format
 msgid "pointer\n"
 msgstr "ponteiro\n"
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7152
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr "matriz, dim: %u, bitmap: "
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7159
 #, c-format
 msgid "array descriptor:\n"
 msgstr "descritor de matriz:\n"
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7166
 #, c-format
 msgid "type spec for element:\n"
 msgstr "tipo de  spec para elemento:\n"
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7168
 #, c-format
 msgid "type spec for subscript %u:\n"
 msgstr "tipo de spec para subscrito %u:\n"
 
-#: vms-alpha.c:7008
+#: vms-alpha.c:7186
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Tabela de sÃ­mbolos de depuraÃ§Ã£o:\n"
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7197
 #, c-format
 msgid "cannot read DST header\n"
 msgstr "impossÃ­vel ler cabeÃ§alho DST\n"
 
-#: vms-alpha.c:7025
+#: vms-alpha.c:7203
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr " tipo: %3u, tam: %3u (em 0x%08x): "
 
-#: vms-alpha.c:7039
+#: vms-alpha.c:7217
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "impossÃ­vel ler sÃ­mbolo DST\n"
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7260
 #, c-format
 msgid "standard data: %s\n"
 msgstr "dados standard: %s\n"
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7263 vms-alpha.c:7351
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    nome: %.*s\n"
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7270
 #, c-format
 msgid "modbeg\n"
 msgstr "modbeg\n"
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7272
 #, c-format
 msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
 msgstr "   bands: %d, linguagem: %u, principal: %u, menor: %u\n"
 
-#: vms-alpha.c:7100 vms-alpha.c:7374
+#: vms-alpha.c:7278 vms-alpha.c:7552
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   nome mÃ³dulo: %.*s\n"
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7281
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   compilador : %.*s\n"
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7286
 #, c-format
 msgid "modend\n"
 msgstr "modend\n"
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7293
 msgid "rtnbeg\n"
 msgstr "rtnbeg\n"
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7295
 #, c-format
 msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
 msgstr "    bands: %u, endereÃ§o: 0x%08x, endereÃ§o pd: 0x%08x\n"
 
-#: vms-alpha.c:7122
+#: vms-alpha.c:7300
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    nome da rotina: %.*s\n"
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7308
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "rtnend: tamanho 0x%08x\n"
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7316
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr "prÃ³logo: bkpt endereÃ§o 0x%08x\n"
 
-#: vms-alpha.c:7147
+#: vms-alpha.c:7325
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "epÃ­logo: bandeiras: %u, total: %u\n"
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7335
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr "blkbeg: endereÃ§o: 0x%08x, nome: %.*s\n"
 
-#: vms-alpha.c:7166
+#: vms-alpha.c:7344
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "blkend: tamanho: 0x%08x\n"
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7350
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "typspec (tam: %u)\n"
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7357
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "septyp, nome: %.*s\n"
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7366
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "recbeg: nome: %.*s\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7368
 #, c-format
 msgid "    len: %u bits\n"
 msgstr "    tam: %u bits\n"
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7373
 #, c-format
 msgid "recend\n"
 msgstr "recend\n"
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7377
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr "enumbeg, tam: %u, nome: %.*s\n"
 
-#: vms-alpha.c:7203
+#: vms-alpha.c:7381
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "enumelt, nome: %.*s\n"
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7385
 #, c-format
 msgid "enumend\n"
 msgstr "enumend\n"
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7390
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr "etiqueta, nome: %.*s\n"
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7392
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr "    endereÃ§o: 0x%08x\n"
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7402
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "intervalo descontÃ­nuo (nr: %u)\n"
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7405
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    endereÃ§o: 0x%08x, tamanho: %u\n"
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7415
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "nÂº linha  (tam: %u)\n"
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7432
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7439
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7445
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7451
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7457
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7462
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7467
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7472
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7476
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7481
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7483
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7488
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7490
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7496
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "delta pc +%-4d"
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7500
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x line: %5u\n"
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7505
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    cmd *nÃ£o gerido* %u\n"
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7520
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "fonte (tam: %u)\n"
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7535
 #, c-format
 msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
 msgstr "   declfile: tam: %u, bands: %u, idfich: %u\n"
 
-#: vms-alpha.c:7362
+#: vms-alpha.c:7540
 #, c-format
 msgid "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 msgstr "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 
-#: vms-alpha.c:7371
+#: vms-alpha.c:7549
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   nomeficheiro: %.*s\n"
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7558
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7563 vms-alpha.c:7568
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7573 vms-alpha.c:7578
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:7583 vms-alpha.c:7588
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:7592
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:7596
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   cmd *nÃ£o gerido* %u\n"
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:7608
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "tipo DST *nÃ£o gerido* %u\n"
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:7640
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "impossÃ­vel ler EIHD\n"
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:7644
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr "EIHD: (tamanho: %u, nÂº blocos: %u)\n"
 
-#: vms-alpha.c:7470
+#: vms-alpha.c:7648
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " majorid: %u, minorid: %u\n"
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:7656
 msgid "executable"
 msgstr "executÃ¡vel"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:7659
 msgid "linkable image"
 msgstr "imagem ligÃ¡vel"
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:7666
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " tipo de imagem: %u (%s)"
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:7672
 msgid "native"
 msgstr "nativo"
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:7675
 msgid "CLI"
 msgstr "CLI"
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:7682
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", sub-tipo: %u (%s)\n"
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:7689
 #, c-format
 msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 msgstr " desvios: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 
-#: vms-alpha.c:7515
+#: vms-alpha.c:7693
 #, c-format
 msgid " fixup info rva: "
 msgstr " fixup info rva: "
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:7695
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", vector sÃ­mbolo rva: "
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:7698
 #, c-format
 msgid ""
 "\n"
@@ -7269,653 +7793,719 @@ msgstr ""
 "\n"
 " matriz de versÃ£o off: %u\n"
 
-#: vms-alpha.c:7525
+#: vms-alpha.c:7703
 #, c-format
 msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
 msgstr " total img I/O: %u, nÂº canais: %u, req pri: %08x%08x\n"
 
-#: vms-alpha.c:7531
+#: vms-alpha.c:7709
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " bands linker: %08x:"
 
-#: vms-alpha.c:7562
+#: vms-alpha.c:7740
 #, c-format
 msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
 msgstr " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
 
-#: vms-alpha.c:7568
+#: vms-alpha.c:7746
 #, c-format
 msgid " BPAGE: %u"
 msgstr " BPAGE: %u"
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:7753
 #, c-format
 msgid ", ext fixup offset: %u, no_opt psect off: %u"
 msgstr ", desvio ext fixup: %u, no_opt psect off: %u"
 
-#: vms-alpha.c:7578
+#: vms-alpha.c:7756
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", aliÃ¡s: %u\n"
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:7764
 #, c-format
 msgid "system version array information:\n"
 msgstr "informaÃ§Ã£o da matriz de versÃ£o do sistema:\n"
 
-#: vms-alpha.c:7590
+#: vms-alpha.c:7768
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr "impossÃ­vel ler cabeÃ§alho EIHVN\n"
 
-#: vms-alpha.c:7600
+#: vms-alpha.c:7778
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "impossÃ­vel ler versÃ£o EIHVN\n"
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:7781
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:7785
 msgid "BASE_IMAGE       "
 msgstr "BASE_IMAGE       "
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:7788
 msgid "MEMORY_MANAGEMENT"
 msgstr "MEMORY_MANAGEMENT"
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:7791
 msgid "IO               "
 msgstr "IO               "
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:7794
 msgid "FILES_VOLUMES    "
 msgstr "FILES_VOLUMES    "
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:7797
 msgid "PROCESS_SCHED    "
 msgstr "PROCESS_SCHED    "
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:7800
 msgid "SYSGEN           "
 msgstr "SYSGEN           "
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:7803
 msgid "CLUSTERS_LOCKMGR "
 msgstr "CLUSTERS_LOCKMGR "
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:7806
 msgid "LOGICAL_NAMES    "
 msgstr "LOGICAL_NAMES    "
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:7809
 msgid "SECURITY         "
 msgstr "SECURITY         "
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:7812
 msgid "IMAGE_ACTIVATOR  "
 msgstr "IMAGE_ACTIVATOR  "
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:7815
 msgid "NETWORKS         "
 msgstr "NETWORKS         "
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:7818
 msgid "COUNTERS         "
 msgstr "COUNTERS         "
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:7821
 msgid "STABLE           "
 msgstr "STABLE           "
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:7824
 msgid "MISC             "
 msgstr "MISC             "
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:7827
 msgid "CPU              "
 msgstr "CPU              "
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:7830
 msgid "VOLATILE         "
 msgstr "VOLATILE         "
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:7833
 msgid "SHELL            "
 msgstr "SHELL            "
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:7836
 msgid "POSIX            "
 msgstr "POSIX            "
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:7839
 msgid "MULTI_PROCESSING "
 msgstr "MULTI_PROCESSING "
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:7842
 msgid "GALAXY           "
 msgstr "GALAXY           "
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:7845
 msgid "*unknown*        "
 msgstr "*desconhecido*   "
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:7861 vms-alpha.c:8135
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "impossÃ­vel ler EIHA\n"
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:7864
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "ActivaÃ§Ã£o da imagem:  (tam=%u)\n"
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:7867
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr " 1Âº endereÃ§o: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7693
+#: vms-alpha.c:7871
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr " 2Âº endereÃ§o: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7697
+#: vms-alpha.c:7875
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr " 3Âº endereÃ§o: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:7879
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr " 4Âº endereÃ§o: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7705
+#: vms-alpha.c:7883
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr " Imagem partilhada: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7716
+#: vms-alpha.c:7894
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "impossÃ­vel ler EIHI\n"
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:7898
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr "IdentificaÃ§Ã£o da imagem: (principal: %u, menor: %u)\n"
 
-#: vms-alpha.c:7723
+#: vms-alpha.c:7901
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " nome da imagem   : %.*s\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:7903
 #, c-format
 msgid " link time        : %s\n"
 msgstr " hora de ligaÃ§Ã£o  : %s\n"
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:7905
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " ident imagem     : %.*s\n"
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:7907
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " ident linker     : %.*s\n"
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:7909
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " ident build imagem: %.*s\n"
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:7919
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "impossÃ­vel ler EIHS\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:7923
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr "Tabela de sÃ­mbolo de imagem e depuraÃ§Ã£o: (principal: %u, menor: %u)\n"
 
-#: vms-alpha.c:7751
+#: vms-alpha.c:7929
 #, c-format
 msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
 msgstr " tabela de sÃ­mbolo de depuraÃ§Ã£o : vbn: %u, tamanho: %u (0x%x)\n"
 
-#: vms-alpha.c:7756
+#: vms-alpha.c:7934
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr " tabela de sÃ­mbolo global: vbn: %u, registos: %u\n"
 
-#: vms-alpha.c:7761
+#: vms-alpha.c:7939
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr " tabela de mÃ³dulo de depuraÃ§Ã£o: vbn: %u, tamanho: %u\n"
 
-#: vms-alpha.c:7774
+#: vms-alpha.c:7952
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "impossÃ­vel ler EISD\n"
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:7963
 #, c-format
 msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
 msgstr "Descritor de secÃ§Ã£o de imagem: (principal: %u, menor: %u, tamanho: %u, desvio: %u)\n"
 
-#: vms-alpha.c:7793
+#: vms-alpha.c:7971
 #, c-format
 msgid " section: base: 0x%08x%08x size: 0x%08x\n"
 msgstr " secÃ§Ã£o: base: 0x%08x%08x tamanho: 0x%08x\n"
 
-#: vms-alpha.c:7798
+#: vms-alpha.c:7976
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " bandeiras: 0x%04x"
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8014
 #, c-format
 msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
 msgstr " vbn: %u, pfc: %u, matchctl: %u tipo: %u ("
 
-#: vms-alpha.c:7842
+#: vms-alpha.c:8020
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8023
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8026
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8029
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8032
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8035
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8041
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8044
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " ident: 0x%08x, nome: %.*s\n"
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8054
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "impossÃ­vel ler DMT\n"
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8058
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Tabela de mÃ³dulo de depuraÃ§Ã£o:\n"
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8067
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr "impossÃ­vel ler cabeÃ§alho DMT\n"
 
-#: vms-alpha.c:7895
+#: vms-alpha.c:8073
 #, c-format
 msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
 msgstr " desvio do mÃ³dulo: 0x%08x, tamanho: 0x%08x, (%u psects)\n"
 
-#: vms-alpha.c:7905
+#: vms-alpha.c:8083
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "impossÃ­vel ler psect DMT\n"
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8087
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr "  inÃ­cio psect: 0x%08x, tamanho: %u\n"
 
-#: vms-alpha.c:7922
+#: vms-alpha.c:8100
 #, c-format
 msgid "cannot read DST\n"
 msgstr "impossÃ­vel ler DST\n"
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8110
 #, c-format
 msgid "cannot read GST\n"
 msgstr "impossÃ­vel ler GST\n"
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8114
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Tabela de sÃ­mbolo global:\n"
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8141
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr "Fixup do activador de imagem: (principal: %u, menor: %u)\n"
 
-#: vms-alpha.c:7969
+#: vms-alpha.c:8145
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  iaflink : 0x%08x %08x\n"
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8149
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  fixuplnk: 0x%08x %08x\n"
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8152
 #, c-format
 msgid "  size : %u\n"
 msgstr "  tamanho: %u\n"
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8154
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  bandeiras: 0x%08x\n"
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8159
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8164
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8169
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8172
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8176
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8179
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8182
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8184
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8192
 #, c-format
 msgid " Shareable images:\n"
 msgstr " Imagens partilhÃ¡veis:\n"
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8197
 #, c-format
 msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
 msgstr "  %u: tam.: %u, bands: 0x%02x, nome: %.*s\n"
 
-#: vms-alpha.c:8028
+#: vms-alpha.c:8204
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " fixups de relocalizaÃ§Ã£o de quad-word:\n"
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8209
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " fixups de relocalizaÃ§Ã£o de long-word:\n"
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8214
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr " fixups de referÃªncia de .address de quad-word:\n"
 
-#: vms-alpha.c:8043
+#: vms-alpha.c:8219
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr " fixups de referÃªncia de .address de long-word:\n"
 
-#: vms-alpha.c:8048
+#: vms-alpha.c:8224
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr " Fixups de referÃªncia de endereÃ§o de cÃ³digo:\n"
 
-#: vms-alpha.c:8053
+#: vms-alpha.c:8229
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr "Fixups de referÃªncia de pares de ligaÃ§Ã£o:\n"
 
-#: vms-alpha.c:8062
+#: vms-alpha.c:8238
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " Alterar protecÃ§Ã£o (%u entradas):\n"
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8244
 #, c-format
 msgid "  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
 msgstr "  base: 0x%08x %08x, tam.: 0x%08x, prot: 0x%08x "
 
 #. FIXME: we do not yet support relocatable link.  It is not obvious
 #. how to do it for debug infos.
-#: vms-alpha.c:8908
+#: vms-alpha.c:9121
 msgid "%P: relocatable link is not supported\n"
 msgstr "%P: ligaÃ§Ã£o relocalizÃ¡vel nÃ£o suportada\n"
 
-#: vms-alpha.c:8979
+#: vms-alpha.c:9192
 #, c-format
 msgid "%P: multiple entry points: in modules %pB and %pB\n"
 msgstr "%P: mÃºltiplos pontos de entrada: nos mÃ³dulos %pB e %pB\n"
 
-#: vms-lib.c:1445
+#: vms-lib.c:1527
 #, c-format
 msgid "could not open shared image '%s' from '%s'"
 msgstr "impossÃ­vel abrir imagem partilhada \"%s\" de \"%s\""
 
-#: vms-misc.c:361
+#: vms-misc.c:370
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr "_bfd_vms_output_counted chamado com zero bytes"
 
-#: vms-misc.c:366
+#: vms-misc.c:375
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr "_bfd_vms_output_counted chamado com demasiados bytes"
 
-#: xcofflink.c:832
+#: xcofflink.c:835
 #, c-format
 msgid "%pB: XCOFF shared object when not producing XCOFF output"
 msgstr "%pB: objecto partilhado XCOFF sem produzir saÃ­da XCOFF"
 
-#: xcofflink.c:853
+#: xcofflink.c:856
 #, c-format
 msgid "%pB: dynamic object with no .loader section"
 msgstr "%pB: objecto dinÃ¢mico sem secÃ§Ã£o .loader"
 
-#: xcofflink.c:1413
+#: xcofflink.c:1420
 #, c-format
 msgid "%pB: `%s' has line numbers but no enclosing section"
 msgstr "%pB: \"%s\" tem nÃºmeros de linha mas sem secÃ§Ã£o envolvente"
 
-#: xcofflink.c:1466
+#: xcofflink.c:1473
 #, c-format
 msgid "%pB: class %d symbol `%s' has no aux entries"
 msgstr "%pB: classe %d sÃ­mbolo \"%s\" nÃ£o tem entradas aux"
 
-#: xcofflink.c:1489
+#: xcofflink.c:1496
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized csect type %d"
 msgstr "%pB: sÃ­mbolo \"%s\" tem tipo csect %d nÃ£o reconhecido"
 
-#: xcofflink.c:1502
+#: xcofflink.c:1509
 #, c-format
 msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
 msgstr "%pB: mau sÃ­mbolo XTY_ER \"%s\": classe %d scnum %d scnlen %<PRId64>"
 
-#: xcofflink.c:1533
+#: xcofflink.c:1540
 #, c-format
 msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
 msgstr "%pB: XMC_TC0 sÃ­mbolo \"%s\" Ã© classe %d scnlen %<PRId64>"
 
-#: xcofflink.c:1680
+#: xcofflink.c:1687
 #, c-format
 msgid "%pB: csect `%s' not in enclosing section"
 msgstr "%pB: csect \"%s\" nÃ£o estÃ¡ em secÃ§Ã£o envolvente"
 
-#: xcofflink.c:1788
+#: xcofflink.c:1795
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr "%pB: XTY_LD \"%s\" mal colocado"
 
-#: xcofflink.c:2109
+#: xcofflink.c:2122
 #, c-format
 msgid "%pB: reloc %s:%<PRId64> not in csect"
 msgstr "%pB: reloc %s:%<PRId64> fora de csect"
 
-#: xcofflink.c:3196
+#: xcofflink.c:3223
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: sem tal sÃ­mbolo"
 
-#: xcofflink.c:3301
+#: xcofflink.c:3334
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr "aviso: tentativa de exportar sÃ­mbolo \"%s\" indefinido"
 
-#: xcofflink.c:3680
+#: xcofflink.c:3713
 msgid "error: undefined symbol __rtinit"
 msgstr "erro: sÃ­mbolo __rtinit indefinido"
 
-#: xcofflink.c:4060
+#: xcofflink.c:4095
 #, c-format
 msgid "%pB: loader reloc in unrecognized section `%s'"
 msgstr "%pB: reloc loader em secÃ§Ã£o \"%s\" nÃ£o reconhecida"
 
-#: xcofflink.c:4072
+#: xcofflink.c:4107
 #, c-format
 msgid "%pB: `%s' in loader reloc but not loader sym"
 msgstr "%pB: \"%s\" em reloc loader mas sem sÃ­mbolo loader"
 
-#: xcofflink.c:4089
+#: xcofflink.c:4124
 #, c-format
 msgid "%pB: loader reloc in read-only section %pA"
 msgstr "%pB: reloc loader em secÃ§Ã£o sÃ³ de leitura %pA"
 
-#: xcofflink.c:5113
+#: xcofflink.c:5152
 #, c-format
 msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
 msgstr "Transporte TOC: %#<PRIx64> > 0x10000; tente -mminimal-toc ao compilar"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5031
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2869
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "atributo desconhecido para o sÃ­mbolo \"%s\": 0x%02x"
+
+#: elfnn-aarch64.c:5245
 #, c-format
 msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
 msgstr "%pB: erro: Erratum 835769 fictÃ­cio fora do intervalo (ficheiro de entrada muito grande)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5112
+#: elfnn-aarch64.c:5337
 #, c-format
 msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
 msgstr "%pB: erro: Erratum 843419 fictÃ­cio fora do intervalo (ficheiro de entrada muito grande)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5641
+#: elfnn-aarch64.c:5350
+msgid "%pB: error: erratum 843419 immediate 0x%"
+msgstr "%pB: erro: erratum 843419 imediato 0x%"
+
+#: elfnn-aarch64.c:5884
 #, c-format
 msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: relocalizaÃ§Ã£o %s contra sÃ­mbolo \"%s\" que pode ligar externamente nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5732
+#: elfnn-aarch64.c:5904
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr "%pB: ramo condicional para sÃ­mbolo \"%s\" indefinido nÃ£o permitido"
+
+#: elfnn-aarch64.c:5992
 #, c-format
 msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
 msgstr "%pB: tabela de descritor de sÃ­mbolo local Ã© NULL ao aplicar relocalizaÃ§Ã£o %s contra sÃ­mbolo local"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6830
+#: elfnn-aarch64.c:6105 elfnn-aarch64.c:6142
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%pB: relocalizaÃ§Ã£o TLS %s contra sÃ­mbolo \"%s\" indefinido"
+
+#: elfnn-aarch64.c:7127
 msgid "too many GOT entries for -fpic, please recompile with -fPIC"
 msgstr "Demasiadas entradas GOT para -fpic, recompile com -fPIC"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6858
+#: elfnn-aarch64.c:7155
 msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
 msgstr "Uma causa possÃ­vel deste erro Ã© o sÃ­mbolo ser referenciado no cÃ³digo indicado como se tivesse um alinhamento maior do que aquele que foi declarado na definiÃ§Ã£o."
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7443
+#: elfnn-aarch64.c:7722
 #, c-format
 msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
 msgstr "%pB: relocalizaÃ§Ã£o %s contra \"%s\" nÃ£o pode ser usada ao fazer um objecto partilhado"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:182
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:217
+#: elfnn-riscv.c:223 elfnn-riscv.c:258
 #, c-format
 msgid "%pB: warning: RVE PLT generation not supported"
 msgstr "%pB: aviso: geraÃ§Ã£o RVE PLT nÃ£o suportada"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311
+#: elfnn-riscv.c:1911
+#, c-format
+msgid "%pcrel_lo missing matching %pcrel_hi"
+msgstr "%pcrel_lo com %pcrel_hi correspondente em falta"
+
+#: elfnn-riscv.c:1914
+#, c-format
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "%pcrel_lo com adenda nÃ£o Ã© permitido para R_RISCV_GOT_HI20"
+
+#: elfnn-riscv.c:1920
+#, c-format
+msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
+msgstr "transporte de %%pcrel_lo com uma adenda, o valor de %%pcrel_hi Ã© 0x%<PRIx64> sem adenda, mas pode ser 0x%<PRIx64> apÃ³s adicionar a adenda %%pcrel_lo"
+
+#: elfnn-riscv.c:1927
+#, c-format
+msgid "%pcrel_lo overflow with an addend"
+msgstr "transporte %pcrel_lo com uma adenda"
+
+#: elfnn-riscv.c:2409
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "A adenda nÃ£o Ã© permitida para R_RISCV_GOT_HI20"
+
+#: elfnn-riscv.c:2553
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "sÃ­mbolo de secÃ§Ã£o %pcrel_lo com uma adenda"
+
+#: elfnn-riscv.c:2776
+#, c-format
+msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
+msgstr "%%X%%P: relocalizaÃ§Ã£o %s contra \"%s\" nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC\n"
+
+#: elfnn-riscv.c:2786
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%%X%%P: relocalizaÃ§Ã£o %s insolÃºvel contra sÃ­mbolo \"%s\"\n"
+
+#: elfnn-riscv.c:2826
 msgid "%X%P: internal error: out of range error\n"
 msgstr "%X%P: erro interno: erro fora do intervalo\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2315
+#: elfnn-riscv.c:2831
 msgid "%X%P: internal error: unsupported relocation error\n"
 msgstr "%X%P: erro interno: erro relocalizaÃ§Ã£o nÃ£o suportada\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2325
+#: elfnn-riscv.c:2837
+msgid "dangerous relocation error"
+msgstr "erro de relocalizaÃ§Ã£o perigosa"
+
+#: elfnn-riscv.c:2843
 msgid "%X%P: internal error: unknown error\n"
 msgstr "%X%P: erro interno: erro desconhecido\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2711
+#: elfnn-riscv.c:3384
 #, c-format
-msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d"
-msgstr "erro: %pB: versÃ£o ISA trocada para \"%s\" extensÃ£o. %d.%d vs %d.%d"
+msgid "warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%d"
+msgstr "aviso: %pB: versÃ£o ISA trocada %d.%d para extensÃ£o \"%s\", a versÃ£o de saÃ­da Ã© %d.%d"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729
+#: elfnn-riscv.c:3417
 #, c-format
-msgid "error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'."
+msgid "error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'"
 msgstr "erro: %pB: cadeia ISA \"%s\" corrompida. Primeira letra esperada era \"i\" ou \"e\", obtida \"%s\"."
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773
+#: elfnn-riscv.c:3460
 #, c-format
-msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'."
-msgstr "erro: %pB: cadeia ISA trocada para unir \"%s\" e \"%s\"."
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr "erro: %pB: cadeia ISA trocada para unir \"%s\" e \"%s\""
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2921
+#: elfnn-riscv.c:3617
 #, c-format
-msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)."
-msgstr "erro: %pB: cadeia ISA de entrada (%s) nÃ£o corresponde Ã  saÃ­da (%s)."
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr "erro: %pB: cadeia ISA de entrada (%s) nÃ£o corresponde Ã  saÃ­da (%s)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2946
+#: elfnn-riscv.c:3637
 #, c-format
-msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)."
-msgstr "erro: %pB: XLEN de entrada (%u) nÃ£o corresponde Ã  saÃ­da (%u)."
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr "erro: %pB: XLEN de entrada (%u) nÃ£o corresponde Ã  saÃ­da (%u)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2954
+#: elfnn-riscv.c:3645
 #, c-format
-msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation."
-msgstr "erro: %pB: XLEN nÃ£o suportado (%u), poderÃ¡ estar a usar a emulaÃ§Ã£o errada."
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr "erro: %pB: XLEN nÃ£o suportado (%u), poderÃ¡ estar a usar a emulaÃ§Ã£o errada"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3039
+#: elfnn-riscv.c:3759
 #, c-format
-msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
-msgstr "erro: %pB: versÃ£o priv spec em conflito (principal/menor/revisÃ£o)."
+msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "aviso: %pB usa versÃ£o spec privilegiada %u.%u.%u mas a saÃ­da usa a versÃ£o %u.%u.%u"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3055
+#: elfnn-riscv.c:3776
+msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
+msgstr "aviso: versÃ£o 1.9.1 privilegiada nÃ£o pode ser ligada a outras versÃµes spec"
+
+#: elfnn-riscv.c:3804
 #, c-format
-msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned."
-msgstr "erro: %pB usa alinhamento de pilha %u-byte mas a saÃ­da usa alinhamento de pilha %u-byte."
+msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
+msgstr "erro: %pB usa alinhamento de pilha %u-byte mas a saÃ­da usa alinhamento de pilha %u-byte"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3096
+#: elfnn-riscv.c:3845
 #, c-format
 msgid ""
 "%pB: ABI is incompatible with that of the selected emulation:\n"
@@ -7924,111 +8514,121 @@ msgstr ""
 "%pB: ABI Ã© incompatÃ­vel com aquele da emulaÃ§Ã£o seleccionada:\n"
 "  emulaÃ§Ã£o alvo \"%s\" nÃ£o corresponde a \"%s\""
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119
+#: elfnn-riscv.c:3901
 #, c-format
 msgid "%pB: can't link %s modules with %s modules"
 msgstr "%pB: impossÃ­vel ligar mÃ³dulos %s com mÃ³dulos %s"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3129
+#: elfnn-riscv.c:3911
 #, c-format
 msgid "%pB: can't link RVE with other target"
 msgstr "%pB: impossÃ­vel ligar RVE com outro alvo"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3630
+#: elfnn-riscv.c:4448
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
 msgstr "%pB(%pA+%#<PRIx64>): %<PRId64> bytes requeridos para alinhamento com limite %<PRId64>-byte, mas sÃ³ hÃ¡ %<PRId64> presentes"
 
-#: peigen.c:157 pepigen.c:157 pex64igen.c:157
+#: peXXigen.c:154
 #, c-format
 msgid "%pB: unable to find name for empty section"
 msgstr "%pB: impossÃ­vel encontrar nome para secÃ§Ã£o vazia"
 
-#: peigen.c:183 pepigen.c:183 pex64igen.c:183
+#: peXXigen.c:181
 #, c-format
 msgid "%pB: out of memory creating name for empty section"
 msgstr "%pB: sem memÃ³ria ao criar nome para secÃ§Ã£o vazia"
 
-#: peigen.c:194 pepigen.c:194 pex64igen.c:194
+#: peXXigen.c:191
 #, c-format
 msgid "%pB: unable to create fake empty section"
 msgstr "%pB: impossÃ­vel criar secÃ§Ã£o vazia falsa"
 
-#: peigen.c:532 pepigen.c:532 pex64igen.c:532
+#: peXXigen.c:523
 #, c-format
-msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld"
-msgstr "%pB: cabeÃ§alho aout especifica um nÃºmero invÃ¡lido de entradas data-directory: %ld"
+msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
+msgstr "%pB: cabeÃ§alho aout especifica um nÃºmero invÃ¡lido de entradas data-directory: %u"
 
-#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091
+#: peXXigen.c:934
+#, c-format
+msgid "%pB:%.8s: section below image base"
+msgstr "%pB:%.8s: secÃ§Ã£o abaixo da base da imagem"
+
+#: peXXigen.c:937
+#, c-format
+msgid "%pB:%.8s: RVA truncated"
+msgstr "%pB:%.8s: RVA truncado"
+
+#: peXXigen.c:1065
 #, c-format
 msgid "%pB: line number overflow: 0x%lx > 0xffff"
 msgstr "%pB: transporte de nÂº de linha: 0x%lx > 0xffff"
 
-#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235
+#: peXXigen.c:1218
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr "Pasta de exportaÃ§Ã£o [.edata (ou onde o encontrÃ¡mos)]"
 
-#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236
+#: peXXigen.c:1219
 msgid "Import Directory [parts of .idata]"
 msgstr "Pasta de importaÃ§Ã£o [partes de .idata]"
 
-#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237
+#: peXXigen.c:1220
 msgid "Resource Directory [.rsrc]"
 msgstr "Pasta de recursos [.rsrc]"
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1221
 msgid "Exception Directory [.pdata]"
 msgstr "Pasta de excepÃ§Ãµes [.pdata]"
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1222
 msgid "Security Directory"
 msgstr "Pasta de seguranÃ§a"
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1223
 msgid "Base Relocation Directory [.reloc]"
 msgstr "Pasta de relocalizaÃ§Ã£o base [.reloc]"
 
-#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241
+#: peXXigen.c:1224
 msgid "Debug Directory"
 msgstr "Pasta de depuraÃ§Ã£o"
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1225
 msgid "Description Directory"
 msgstr "Pasta de descriÃ§Ã£o"
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1226
 msgid "Special Directory"
 msgstr "Pasta especial"
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1227
 msgid "Thread Storage Directory [.tls]"
 msgstr "Pasta de armazenamento de Thread [.tls]"
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1228
 msgid "Load Configuration Directory"
 msgstr "Pasta de configuraÃ§Ã£o de carregamento"
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1229
 msgid "Bound Import Directory"
 msgstr "Pasta de importaÃ§Ã£o vinculada"
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1230
 msgid "Import Address Table Directory"
 msgstr "Pasta de tabela de endereÃ§os de importaÃ§Ã£o"
 
-#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248
+#: peXXigen.c:1231
 msgid "Delay Import Directory"
 msgstr "Pasta de atraso de importaÃ§Ã£o"
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1232
 msgid "CLR Runtime Header"
 msgstr "CabeÃ§alho de execuÃ§Ã£o CLR"
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1233
 msgid "Reserved"
 msgstr "Reservado"
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1280
 #, c-format
 msgid ""
 "\n"
@@ -8037,7 +8637,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma tabela de importaÃ§Ã£o, mas a secÃ§Ã£o que a contÃ©m nÃ£o pÃ´de ser encontrada\n"
 
-#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316
+#: peXXigen.c:1286
 #, c-format
 msgid ""
 "\n"
@@ -8046,7 +8646,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma tabela de importaÃ§Ã£o em %s, mas essa secÃ§Ã£o nÃ£o tem conteÃºdo\n"
 
-#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323
+#: peXXigen.c:1293
 #, c-format
 msgid ""
 "\n"
@@ -8055,30 +8655,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma tabela de importaÃ§Ã£o em %s em 0x%lx\n"
 
-#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365
-#, c-format
-msgid ""
-"\n"
-"Function descriptor located at the start address: %04lx\n"
-msgstr ""
-"\n"
-"Descritor de funÃ§Ã£o localizado no endereÃ§o inicial: %04lx\n"
-
-#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369
-#, c-format
-msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
-msgstr "\tcode-base %08lx toc (carregÃ¡vel/actual) %08lx/%08lx\n"
-
-#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377
-#, c-format
-msgid ""
-"\n"
-"No reldata section! Function descriptor not decoded.\n"
-msgstr ""
-"\n"
-"Sem secÃ§Ã£o reldata! Descritor de funÃ§Ã£o nÃ£o descodificado.\n"
-
-#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382
+#: peXXigen.c:1299
 #, c-format
 msgid ""
 "\n"
@@ -8087,7 +8664,7 @@ msgstr ""
 "\n"
 "As tabelas de importaÃ§Ã£o (interpretado %s conteÃºdo de secÃ§Ã£o)\n"
 
-#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385
+#: peXXigen.c:1302
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -8096,7 +8673,7 @@ msgstr ""
 " vma:            Dica    Hora      AvanÃ§o   DLL       Prim.\n"
 "                 Tabela  Selo      Cadeia   Nome      Thunk\n"
 
-#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435
+#: peXXigen.c:1351
 #, c-format
 msgid ""
 "\n"
@@ -8105,12 +8682,12 @@ msgstr ""
 "\n"
 "\tNome DLL: %.*s\n"
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1367
 #, c-format
 msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
 msgstr "\tvma:  Dica/Ord Nome-membro ligado a\n"
 
-#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476
+#: peXXigen.c:1392
 #, c-format
 msgid ""
 "\n"
@@ -8119,13 +8696,12 @@ msgstr ""
 "\n"
 "HÃ¡ um primeiro thunk, mas a secÃ§Ã£o que o contÃ©m nÃ£o pÃ´de ser encontrada\n"
 
-#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520
-#: pex64igen.c:1559
+#: peXXigen.c:1436 peXXigen.c:1475
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr "\t<corrupto: 0x%04lx>"
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1568
 #, c-format
 msgid ""
 "\n"
@@ -8134,7 +8710,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma tabela de exportaÃ§Ã£o, mas a secÃ§Ã£o que a contÃ©m nÃ£o pÃ´de ser encontrada\n"
 
-#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658
+#: peXXigen.c:1574
 #, c-format
 msgid ""
 "\n"
@@ -8143,7 +8719,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma tabela de exportaÃ§Ã£o em %s, mas essa secÃ§Ã£o nÃ£o tem conteÃºdo\n"
 
-#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669
+#: peXXigen.c:1585
 #, c-format
 msgid ""
 "\n"
@@ -8152,7 +8728,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma tabela de exportaÃ§Ã£o em %s, mas nÃ£o serve nessa secÃ§Ã£o\n"
 
-#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680
+#: peXXigen.c:1596
 #, c-format
 msgid ""
 "\n"
@@ -8161,7 +8737,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma tabela de exportaÃ§Ã£o em %s, mas Ã© demasiado pequena (%d)\n"
 
-#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686
+#: peXXigen.c:1602
 #, c-format
 msgid ""
 "\n"
@@ -8170,7 +8746,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma tabela de exportaÃ§Ã£o em %s em 0x%lx\n"
 
-#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714
+#: peXXigen.c:1630
 #, c-format
 msgid ""
 "\n"
@@ -8181,67 +8757,67 @@ msgstr ""
 "As tabelas de exportaÃ§Ã£o (interpretado %s conteÃºdo de secÃ§Ã£o)\n"
 "\n"
 
-#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718
+#: peXXigen.c:1634
 #, c-format
 msgid "Export Flags \t\t\t%lx\n"
 msgstr "Bandeiras de exportaÃ§Ã£o \t\t\t%lx\n"
 
-#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721
+#: peXXigen.c:1637
 #, c-format
 msgid "Time/Date stamp \t\t%lx\n"
 msgstr "Selo Hora/Data \t\t%lx\n"
 
-#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725
+#: peXXigen.c:1641
 #, c-format
 msgid "Major/Minor \t\t\t%d/%d\n"
 msgstr "Principal/Menor \t\t\t%d/%d\n"
 
-#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728
+#: peXXigen.c:1644
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr "Nome \t\t\t\t"
 
-#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739
+#: peXXigen.c:1655
 #, c-format
 msgid "Ordinal Base \t\t\t%ld\n"
 msgstr "Base ordinal \t\t\t%ld\n"
 
-#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742
+#: peXXigen.c:1658
 #, c-format
 msgid "Number in:\n"
 msgstr "NÃºmero em:\n"
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1661
 #, c-format
 msgid "\tExport Address Table \t\t%08lx\n"
 msgstr "\tTabela end. exportaÃ§Ã£o \t\t%08lx\n"
 
-#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749
+#: peXXigen.c:1665
 #, c-format
 msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
 msgstr "\t[Nome Ponteiro/Ordinal] Tabela\t%08lx\n"
 
-#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752
+#: peXXigen.c:1668
 #, c-format
 msgid "Table Addresses\n"
 msgstr "EndereÃ§os da tabela\n"
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1671
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr "\tTabela end. exportaÃ§Ã£o \t\t"
 
-#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760
+#: peXXigen.c:1676
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr "\tTabela Nome Ponteiro \t\t"
 
-#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765
+#: peXXigen.c:1681
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr "\tTabela ordinal \t\t\t"
 
-#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779
+#: peXXigen.c:1695
 #, c-format
 msgid ""
 "\n"
@@ -8250,20 +8826,20 @@ msgstr ""
 "\n"
 "Tabela end. exportaÃ§Ã£o -- Base ordinal %ld\n"
 
-#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788
+#: peXXigen.c:1704
 #, c-format
 msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\trva de tabela de end. de exportaÃ§Ã£o (0x%lx) ou total de entradas (0x%lx) invÃ¡lidos\n"
 
-#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807
+#: peXXigen.c:1723
 msgid "Forwarder RVA"
 msgstr "Reencaminhador RVA"
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1735
 msgid "Export RVA"
 msgstr "ExportaÃ§Ã£o RVA"
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1742
 #, c-format
 msgid ""
 "\n"
@@ -8272,29 +8848,27 @@ msgstr ""
 "\n"
 "Tabela [Ordinal/Nome Ponteiro]\n"
 
-#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834
+#: peXXigen.c:1750
 #, c-format
 msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\trva de tabela de ponteiro de nome (0x%lx) ou total de entradas (0x%lx) invÃ¡lidos\n"
 
-#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841
+#: peXXigen.c:1757
 #, c-format
 msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\trva de tabela ordinal (0x%lx) ou total de entradas (0x%lx) invÃ¡lidos\n"
 
-#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855
+#: peXXigen.c:1771
 #, c-format
 msgid "\t[%4ld] <corrupt offset: %lx>\n"
 msgstr "\t[%4ld] <desvio corrupto: %lx>\n"
 
-#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909
-#: pex64igen.c:2106
+#: peXXigen.c:1825 peXXigen.c:1994
 #, c-format
 msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
 msgstr "Aviso, .tamanho da secÃ§Ã£o pdata (%ld) nÃ£o Ã© mÃºltiplo de %d\n"
 
-#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913
-#: pex64igen.c:2110
+#: peXXigen.c:1829 peXXigen.c:1998
 #, c-format
 msgid ""
 "\n"
@@ -8303,12 +8877,12 @@ msgstr ""
 "\n"
 "A tabela de funÃ§Ã£o (interpretado conteÃºdo de secÃ§Ã£o .pdata)\n"
 
-#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916
+#: peXXigen.c:1832
 #, c-format
 msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
 msgstr " vma:\t\t\tEnd. inicial     End. final       Info Unwind\n"
 
-#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918
+#: peXXigen.c:1834
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -8317,27 +8891,12 @@ msgstr ""
 " vma:\t\tInÃ­cio   Fim      EH       EH       PrÃ³logFim  ExcepÃ§Ã£o\n"
 "     \t\tEndereÃ§o EndereÃ§o Gestor   Dados    EndereÃ§o   MÃ¡scara\n"
 
-#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931
+#: peXXigen.c:1847
 #, c-format
 msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
 msgstr "Tamanho virtual da secÃ§Ã£o .pdata (%ld) maior que o tamanho real (%ld)\n"
 
-#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001
-#, c-format
-msgid " Register save millicode"
-msgstr " Register save millicode"
-
-#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004
-#, c-format
-msgid " Register restore millicode"
-msgstr " Register restore millicode"
-
-#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007
-#, c-format
-msgid " Glue code sequence"
-msgstr " Colar sequÃªncia de cÃ³digo"
-
-#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112
+#: peXXigen.c:2000
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -8346,7 +8905,7 @@ msgstr ""
 " vma:\t\tInÃ­cio   PrÃ³logo  FunÃ§Ã£o   Bands    ExcepÃ§Ã£o  EH\n"
 "     \t\tEndereÃ§o Tam.     Tam.     32b exc  Gestor    Dados\n"
 
-#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234
+#: peXXigen.c:2121
 #, c-format
 msgid ""
 "\n"
@@ -8357,7 +8916,7 @@ msgstr ""
 "\n"
 "RelocalizaÃ§Ãµes base de ficheiros PE (interpretado conteÃºdo de secÃ§Ã£o .reloc)\n"
 
-#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264
+#: peXXigen.c:2150
 #, c-format
 msgid ""
 "\n"
@@ -8366,62 +8925,62 @@ msgstr ""
 "\n"
 "EndereÃ§o virtual: %08lx, tamanho do pedaÃ§o %ld (0x%lx), nÃºmero de fixups %ld\n"
 
-#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282
+#: peXXigen.c:2168
 #, c-format
 msgid "\treloc %4d offset %4x [%4lx] %s"
 msgstr "\treloc %4d desvio %4x [%4lx] %s"
 
-#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343
+#: peXXigen.c:2229
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr "%03x %*.s Entrada: "
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2253
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr "nome: [val: %08lx tam %d]: "
 
-#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387
+#: peXXigen.c:2273
 #, c-format
 msgid "<corrupt string length: %#x>\n"
 msgstr "<tamanho de cadeia corrupto: %#x>\n"
 
-#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397
+#: peXXigen.c:2283
 #, c-format
 msgid "<corrupt string offset: %#lx>\n"
 msgstr "<desvio de cadeia corrupto: %#lx>\n"
 
-#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402
+#: peXXigen.c:2288
 #, c-format
 msgid "ID: %#08lx"
 msgstr "ID: %#08lx"
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2291
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Valor: %#08lx\n"
 
-#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427
+#: peXXigen.c:2313
 #, c-format
 msgid "%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
 msgstr "%03x %*.s  Folha: End.: %#08lx, Tamanho: %#08lx, Codepage: %d\n"
 
-#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469
+#: peXXigen.c:2355
 #, c-format
 msgid "<unknown directory type: %d>\n"
 msgstr "<tipo de pasta desconhecido: %d>\n"
 
-#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477
+#: peXXigen.c:2363
 #, c-format
 msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
 msgstr " Tabela: Car.: %d, Hora: %08lx, Ver: %d/%d, Nomes NÃºm: %d, IDs: %d\n"
 
-#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566
+#: peXXigen.c:2451
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr "SecÃ§Ã£o .rsrc corrompida detectada!\n"
 
-#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590
+#: peXXigen.c:2475
 #, c-format
 msgid ""
 "\n"
@@ -8430,17 +8989,17 @@ msgstr ""
 "\n"
 "AVISO: dados extra em secÃ§Ã£o .rsrc - serÃ¡ ignorada pelo Windows:\n"
 
-#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596
+#: peXXigen.c:2481
 #, c-format
 msgid " String table starts at offset: %#03x\n"
 msgstr " Tabela de cadeia comeÃ§a no desvio: %#03x\n"
 
-#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599
+#: peXXigen.c:2484
 #, c-format
 msgid " Resources start at offset: %#03x\n"
 msgstr " Recursos comeÃ§am no desvio: %#03x\n"
 
-#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651
+#: peXXigen.c:2541
 #, c-format
 msgid ""
 "\n"
@@ -8449,7 +9008,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma pasta de depuraÃ§Ã£o, mas a secÃ§Ã£o que a contÃ©m nÃ£o pÃ´de ser encontrada\n"
 
-#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657
+#: peXXigen.c:2547
 #, c-format
 msgid ""
 "\n"
@@ -8458,7 +9017,7 @@ msgstr ""
 "\n"
 "HÃ¡ uma pasta de depuraÃ§Ã£o em %s, mas essa secÃ§Ã£o nÃ£o tem conteÃºdo\n"
 
-#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664
+#: peXXigen.c:2554
 #, c-format
 msgid ""
 "\n"
@@ -8467,7 +9026,7 @@ msgstr ""
 "\n"
 "Erro: secÃ§Ã£o %s contÃ©m o endereÃ§o dos dados de depuraÃ§Ã£o, mas Ã© muito pequena\n"
 
-#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669
+#: peXXigen.c:2559
 #, c-format
 msgid ""
 "\n"
@@ -8478,22 +9037,22 @@ msgstr ""
 "HÃ¡ uma pasta de depuraÃ§Ã£o em %s em 0x%lx\n"
 "\n"
 
-#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676
+#: peXXigen.c:2566
 #, c-format
 msgid "The debug data size field in the data directory is too big for the section"
 msgstr "O campo de tamanho dos dados de depuraÃ§Ã£o na pasta de dados Ã© demasiado grande para a secÃ§Ã£o"
 
-#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681
+#: peXXigen.c:2571
 #, c-format
 msgid "Type                Size     Rva      Offset\n"
 msgstr "Tipo                Tam.     Rva      Desvio\n"
 
-#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729
+#: peXXigen.c:2618
 #, c-format
 msgid "(format %c%c%c%c signature %s age %ld)\n"
 msgstr "(formato %c%c%c%c assinatura %s idade %ld)\n"
 
-#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737
+#: peXXigen.c:2628
 #, c-format
 msgid "The debug directory size is not a multiple of the debug directory entry size\n"
 msgstr "O tamanho da pasta de depuraÃ§Ã£o nÃ£o Ã© mÃºltiplo do tamanho da entrada da pasta de depuraÃ§Ã£o\n"
@@ -8501,7 +9060,7 @@ msgstr "O tamanho da pasta de depuraÃ§Ã£
 #. The MS dumpbin program reportedly ands with 0xff0f before
 #. printing the characteristics field.  Not sure why.  No reason to
 #. emulate it here.
-#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757
+#: peXXigen.c:2712
 #, c-format
 msgid ""
 "\n"
@@ -8510,97 +9069,174 @@ msgstr ""
 "\n"
 "CaracterÃ­sticas 0x%x\n"
 
-#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993
+#: peXXigen.c:2989
 #, c-format
-msgid "%pB: Data Directory size (%lx) exceeds space left in section (%<PRIx64>)"
-msgstr "%pB: tamanho da pasta de dados (%lx) excede o espaÃ§o deixado na secÃ§Ã£o (%<PRIx64>)"
+msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
+msgstr "%pB: tamanho da pasta de dados (%lx em %<PRIx64>) estende-se para lÃ¡ da fronteira em %<PRIx64>)"
 
-#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025
+#: peXXigen.c:3026
 msgid "failed to update file offsets in debug directory"
 msgstr "Falha ao actualizar desvios de ficheiro na pasta de depuraÃ§Ã£o"
 
-#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033
+#: peXXigen.c:3034
 #, c-format
 msgid "%pB: failed to read debug data section"
 msgstr "%pB: falha ao ler secÃ§Ã£o de dados de depuraÃ§Ã£o"
 
-#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849
+#: peXXigen.c:3833
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
 msgstr "falha de uniÃ£o .rsrc: recurso de cadeia duplicado: %d"
 
-#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984
+#: peXXigen.c:3968
 msgid ".rsrc merge failure: multiple non-default manifests"
 msgstr "falha de uniÃ£o .rsrc: mÃºltiplos manifestos nÃ£o-predefinidos"
 
-#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002
+#: peXXigen.c:3986
 msgid ".rsrc merge failure: a directory matches a leaf"
 msgstr "falha de uniÃ£o .rsrc: uma pasta corresponde a uma folha"
 
-#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044
+#: peXXigen.c:4028
 msgid ".rsrc merge failure: duplicate leaf"
 msgstr "falha de uniÃ£o .rsrc: folha duplicada"
 
-#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046
+#: peXXigen.c:4033
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
 msgstr "falha de uniÃ£o .rsrc: folha duplicada: %s"
 
-#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112
+#: peXXigen.c:4100
 msgid ".rsrc merge failure: dirs with differing characteristics"
 msgstr "falha de uniÃ£o .rsrc: pastas com caracterÃ­sticas diferentes"
 
-#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119
+#: peXXigen.c:4107
 msgid ".rsrc merge failure: differing directory versions"
 msgstr "falha de uniÃ£o .rsrc: versÃµes de pasta diferentes"
 
 #. Corrupted .rsrc section - cannot merge.
-#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236
+#: peXXigen.c:4224
 #, c-format
 msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
 msgstr "%pB: falha de uniÃ£o .rsrc: secÃ§Ã£o .rsrc corrupta"
 
-#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244
+#: peXXigen.c:4232
 #, c-format
 msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
 msgstr "%pB: falha de uniÃ£o .rsrc: tamanho .rsrc inesperado"
 
-#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383
+#: peXXigen.c:4371
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
 msgstr "%pB: impossÃ­vel preencher DataDictionary[1] porque .idata$2 estÃ¡ em falta"
 
-#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403
+#: peXXigen.c:4391
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
 msgstr "%pB: impossÃ­vel preencher DataDictionary[1] porque .idata$4 estÃ¡ em falta"
 
-#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424
+#: peXXigen.c:4412
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
 msgstr "%pB: impossÃ­vel preencher DataDictionary[12] porque .idata$5 estÃ¡ em falta"
 
-#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444
+#: peXXigen.c:4432
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
 msgstr "%pB: impossÃ­vel preencher DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] porque .idata$6 estÃ¡ em falta"
 
-#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486
+#: peXXigen.c:4474
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
 msgstr "%pB: impossÃ­vel preencher DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] porque .idata$6 estÃ¡ em falta"
 
-#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511
+#: peXXigen.c:4499
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
 msgstr "%pB: impossÃ­vel preencher DataDictionary[9] porque __tls_used estÃ¡ em falta"
 
+#~ msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
+#~ msgstr "%pA tem secÃ§Ãµes ordenadas [\"%pA\" em %pB] e desordenadas [\"%pA\" em %pB] em simultÃ¢neo"
+
+#~ msgid "%pA has both ordered and unordered sections"
+#~ msgstr "%pA tem secÃ§Ãµes ordenadas e desordenadas em simultÃ¢neo"
+
+#~ msgid "%F%P: %pA has ordered sections with incompatible alignments\n"
+#~ msgstr "%F%P: %pA tem secÃ§Ãµes ordenadas com alinhamentos incompatÃ­veis\n"
+
+#~ msgid "-march=%s: unexpected ISA string at end: %s"
+#~ msgstr "-march=%s: cadeia ISA inesperada no final: %s"
+
+#~ msgid "%pB: warning: sh_link not set for section `%pA'"
+#~ msgstr "%pB: aviso: sh_link nÃ£o definido para a secÃ§Ã£o \"%pA\""
+
+#~ msgid "-march=%s: unsupported ISA subset `%c'"
+#~ msgstr "-march=%s: sub-conjunto ISA \"%c\" nÃ£o suportado"
+
+#~ msgid "-march=%s: `d' extension requires `f' extension"
+#~ msgstr "-march=%s: extensÃ£o \"d\" requer a extensÃ£o \"f\""
+
+#~ msgid "-march=%s: `q' extension requires `d' extension"
+#~ msgstr "-march=%s: extensÃ£o \"q\" requer a extensÃ£o \"d\""
+
+#~ msgid ""
+#~ "\n"
+#~ "Function descriptor located at the start address: %04lx\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Descritor de funÃ§Ã£o localizado no endereÃ§o inicial: %04lx\n"
+
+#~ msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
+#~ msgstr "\tcode-base %08lx toc (carregÃ¡vel/actual) %08lx/%08lx\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "No reldata section! Function descriptor not decoded.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Sem secÃ§Ã£o reldata! Descritor de funÃ§Ã£o nÃ£o descodificado.\n"
+
+#~ msgid " Register save millicode"
+#~ msgstr " Register save millicode"
+
+#~ msgid " Register restore millicode"
+#~ msgstr " Register restore millicode"
+
+#~ msgid " Glue code sequence"
+#~ msgstr " Colar sequÃªncia de cÃ³digo"
+
+#~ msgid "%pB: corrupt symbol count: %#<PRIx64>"
+#~ msgstr "%pB: total de sÃ­mbolos corrupto: %#<PRIx64>"
+
+#~ msgid "%pB: not enough memory to allocate space for %#<PRIx64> symbols of size %#<PRIx64>"
+#~ msgstr "%pB: memÃ³ria insuficiente para alocar espaÃ§o para %#<PRIx64> sÃ­mbolos de tamanho %#<PRIx64>"
+
+#~ msgid "%pB: corrupt size field in group section header: %#<PRIx64>"
+#~ msgstr "%pB: campo de tamanho corrupto no cabeÃ§alho da secÃ§Ã£o de grupo: %#<PRIx64>"
+
+#~ msgid "error: %pB version reference section is too large (%#<PRIx64> bytes)"
+#~ msgstr "erro: secÃ§Ã£o de referÃªncia da versÃ£o %pB muito grande (%#<PRIx64> bytes)"
+
+#~ msgid "unexpected STO_SH5_ISA32 on local symbol is not handled"
+#~ msgstr "STO_SH5_ISA32 inesperado em sÃ­mbolo local nÃ£o Ã© gerido"
+
+#~ msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with %s\n"
+#~ msgstr "%P%X: segmento sÃ³ de leitura tem relocalizaÃ§Ãµes dinÃ¢micas IFUNC; recompile com %s\n"
+
+#~ msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
+#~ msgstr "bfd_mach_o_read_symtab_symbols: impossÃ­vel alocar memÃ³ria para sÃ­mbolos"
+
+#~ msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
+#~ msgstr "erro: %pB: versÃ£o priv spec em conflito (principal/menor/revisÃ£o)."
+
+#~ msgid "unsupported relocation type %#x"
+#~ msgstr "tipo de relocalizaÃ§Ã£o %#x nÃ£o suportado"
+
+#~ msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC"
+#~ msgstr "%pB: relocalizaÃ§Ã£o %s contra \"%s\" nÃ£o pode ser usada ao fazer um objecto partilhado; recompile com -fPIC"
+
 #~ msgid "%H: call to `%pT' lacks nop, can't restore toc; recompile with -fPIC\n"
 #~ msgstr "%H: chamada a \"%T\" com nop em falta, impossÃ­vel restaurar toc; recompile com -fPIC\n"
 
-#~ msgid "error: %pB: <corrupt x86 ISA used size: 0x%x>"
-#~ msgstr "erro: %pB: <tamanho ISA x86 corrupto: 0x%x>"
-
 #~ msgid "error: %pB: <corrupt x86 ISA needed size: 0x%x>"
 #~ msgstr "erro: %pB: <tamanho necessÃ¡rio x86 ISA corrupto: 0x%x>"
 
@@ -8691,9 +9327,6 @@ msgstr "%pB: impossÃ­vel preencher DataD
 #~ msgid "unsupported reloc type"
 #~ msgstr "tipo de reloc nÃ£o suportado"
 
-#~ msgid "SH Error: unknown reloc type %d"
-#~ msgstr "Erro SH: tipo de reloc %d nÃ£o suportado"
-
 #~ msgid "Unrecognized reloc type 0x%x"
 #~ msgstr "tipo de reloc 0x%x nÃ£o reconhecido"
 
@@ -8750,9 +9383,6 @@ msgstr "%pB: impossÃ­vel preencher DataD
 #~ msgid "%B: invalid AVR reloc number: %d"
 #~ msgstr "%B: nÃºmero de reloc AVR invÃ¡lido: %d"
 
-#~ msgid "%B: unsupported relocation type %d"
-#~ msgstr "%B: tipo de relocalizaÃ§Ã£o nÃ£o suportado %d"
-
 #~ msgid "Unsupported CR16 relocation type: 0x%x\n"
 #~ msgstr "Tipo de relocalizaÃ§Ã£o CR16 nÃ£o suportado: 0x%x\n"
 
@@ -8795,15 +9425,9 @@ msgstr "%pB: impossÃ­vel preencher DataD
 #~ msgid "%B: unrecognised I370 reloc number: %d"
 #~ msgstr "%B: nÃºmero de reloc I370 nÃ£o reconhecido: %d"
 
-#~ msgid "%B: unknown relocation type %d for symbol %s"
-#~ msgstr "%B: tipo de relocalizaÃ§Ã£o %d  nÃ£o desconhecido para sÃ­mbolo %s"
-
 #~ msgid "%B: Relocation %s is not yet supported for symbol %s."
 #~ msgstr "%B: RelocalizaÃ§Ã£o %s ainda nÃ£o suportada para sÃ­mbolo %s."
 
-#~ msgid "%B: invalid relocation type %d"
-#~ msgstr "%B: tipo de relocalizaÃ§Ã£o %d invÃ¡lido"
-
 #~ msgid "%B: invalid i960 reloc number: %d"
 #~ msgstr "%B: nÃºmero de reloc i960 invÃ¡lido: %d"
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ro.gmo ./bfd/po/ro.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ro.gmo	2019-12-11 01:53:31.000000000 +0000
+++ ./bfd/po/ro.gmo	2024-02-01 01:52:33.000000000 +0000
@@ -1,41 +1,177 @@
-Þ•Q¤,% 1¡1º1Ù1ð1$23(2\2%|2¢2A²2&ô2343M3f3v3 •3¶3Ö3í3*49+46e4;œ4Ø46ê4:!55\5J’5)Ý5L6)T6L~6Ë6á6Dø6=7\74n7)£7)Í7÷78)8=8Y8r88“8¬8À8Ñ8â8	ñ8
û8
	9
-9
-"9
--989M9
-V9$a9#†9%ª9
-Ð9Û9î9$:+:I:	c:!m:�:—:¬:	»:Å:Î:	×:á:í:ö:ÿ:	;
-;
;	+;5;
-F;Q;i;ƒ;’;©;Ä;Ó;6ì;{#<xŸ<=&.='U=2}=*°=-Û=+	>55>3k>uŸ>%?A;?}?7•?6Í?*@¨/@<Ø@9A[OA6«A-âA B71B3iB!�B#¿B&ãB)
-C.4C0cC/”CFÄC>D-JD(xD¡D7¿D1÷D0)E/ZE)ŠE/´E;äE< F/]F&�FM´F3GT6G2‹G2¾G|ñG4nH(£H(ÌH[õH+QIH}I/ÆI(öI?J<_J?œJQÜJ3.K'bK<ŠK6ÇKDþKCLaL1�L%³L ÙLEúL4@M;uM?±M7ñM-)N*WN8‚N2»N+îN/O3JO0~O7¯OçO+P$3P+XP„P¢PA»PHýP>FQ+…QI±Q;ûQ7RWR)rR+œR.ÈR.÷R5&S@\S@�SIÞS=(TIfTI°T$úT9U.YU/ˆU'¸U@àU5!VWV*tV)ŸV?ÉV-	W;7W4sW/¨WØW%öW*X'GX>oXB®XñX4
YlBY@¯Y?ðYG0ZFxZJ¿ZH
-[KS[GŸ[Bç[X*\4ƒ\/¸\è\N]4V]0‹]¼](Ó].ü](+^*T^6^2¶^5é^8_WX_Z°_B`5N`=„`,Â`<ï`(,a-Uaƒa �a/¾aîabb.bBb0Tb4…b$ºb=ßbDcbc$c0¤cSÕc<)d3fdHšd1ãd5eVKeN¢eMñe-?f2mf5 f6Öf*
g28g)kg.•g*Äg(ïgJh7ch4›h)Ðh+úh&&iMi&gi+Ži,ºiçi+j1j-Gjuj,”j'ÁjBéj?,k"lk&�k[¶kGlGZlO¢lGòl9:m>tm2³m5æmDnPan=²n2ðn7#o5[o/‘o1ÁooóoFcpKªpHöp2?q3rq=¦q;äqB rAcr:¥r3àr	ss/<sls;|s¸sÈsÜsñs	t"t+;t#gt:‹tÆt.ât4u	Fu"Pusu(Šu³uÃuÚu)ðuvS0v#„v.¨v,×v+w-0wV^w1µwOçwY7xV‘x;èx)$yZNyZ©yEzAJzPŒzGÝzW%{W}{4Õ{9
-|4D|7y|7±|$é|V}e}5‚}¸}
-Í}#Ø}ü}~0~E~R~a~
~/�~+½~8é~""AId®Á$Ó6ø/€L€b€t€…€•€	¥€¯€¸€Á€
-Ø€"ã€%�,�8�X�)m�/—�Ç�.æ�,‚B‚:^‚%™‚%¿‚å‚"þ‚[!ƒ?}ƒ½ƒÜƒåƒ*„&+„R„j„$}„¢„$´„Ù„!ù„…D5…Dz…/¿…ï…?†A†R†r†J‰†7Ô†*‡7‡O‡%e‡‹‡ž‡»‡JØ‡J#ˆJnˆI¹ˆ:‰;>‰:z‰6µ‰iì‰DVŠd›ŠF‹CG‹‹‹@ª‹8ë‹7$Œ\Œ|ŒŽŒ Œ2µŒ.èŒ�d/�”�%±�×�ô�7ŽHŽ!aŽ-ƒŽ+±Ž+ÝŽ		�	�
-� (�1I�&{�¢�&µ�Ü�û��$.�"S�v�,”�BÁ�D‘*I‘Lt‘ Á‘xâ‘[’q’‡’*¦’ Ñ’ò’“&“:“O“e“y“N�“!ß“””0”D”X” l”&�” ´”#Õ”(ù”9"•\•3w•!«•$Í•0ò•#–?–V–h–7–·–Ð–â–!õ–-—0E—=v—/´—6ä—�˜¬™"Ë™î™š%š5@š#vš(ššÃšBÓš)›@›]›w›�›"Ÿ›$Â›$ç›œ"œ17œ=iœF§œ:îœ)�<;�;x�=´�Hò�-;žJiž-´žPâž3ŸIŸJbŸ­ŸÍŸ@ßŸ8  8Y ’ £ À Ý ø ¡$¡8¡Q¡e¡x¡‹¡	�¡
§¡
µ¡
-Ã¡
-Î¡
-Ù¡ä¡ø¡
-¢1¢&>¢)e¢
-�¢š¢#²¢AÖ¢&£$?£	d£3n£¢£ª£¾£	×£á£ê£	ó£ý£	¤¤¤	$¤
-.¤9¤	H¤R¤c¤p¤Š¤¢¤±¤Ð¤í¤ ÿ¤: ¥}[¥zÙ¥T¦2m¦5 ¦6Ö¦>
§,L§)y§0£§:Ô§ƒ¨*“¨E¾¨©; ©;\©)˜©³Â©8vª5¯ªaåª3G«.{«$ª«XÏ«6(¬%_¬%…¬6«¬-â¬1­;B­A~­OÀ­D®<U®0’®3Ã®C÷®=;¯6y¯*°¯.Û¯+
-°76°>n°7­°2å°Q±8j±d£±3²A<²„~²=³(A³(j³]“³5ñ³T'´F|´?Ã´OµPSµC¤µUèµ.>¶$m¶D’¶D×¶B· _·"€·6£·"Ú·ý·@¸G\¸7¤¸;Ü¸0¹0I¹,z¹X§¹=º0>º0oºH ºIéº;3»"o»6’»'É»1ñ»$#¼!H¼?j¼Iª¼Jô¼1?½\q½HÎ½+¾C¾2a¾-”¾7Â¾7ú¾?2¿Er¿E¸¿Dþ¿7CÀG{ÀCÃÀ,ÁH4Á1}Á0¯Á0àÁJÂ4\Â(‘Â(ºÂDãÂ;(Ã/dÃ?”Ã+ÔÃ-Ä .Ä'OÄ3wÄ'«ÄEÓÄSÅmÅ?ŒÅiÌÅM6ÆK„ÆUÐÆT&ÇW{ÇRÓÇd&ÈN‹ÈKÚÈv&ÉB�É0àÉÊV0Ê9‡Ê7ÁÊ ùÊ2Ë4MË'‚Ë5ªË8àË5Ì7OÌ;‡Ì†ÃÌvJÍRÁÍ>ÎBSÎ:–Î=ÑÎ2Ï0BÏsÏ3ŠÏ8¾Ï÷ÏÐ.ÐIÐ[Ð:jÐ3¥Ð!ÙÐ;ûÐE7Ñ$}Ñ1¢Ñ7ÔÑYÒEfÒ0¬ÒMÝÒ6+Ó;bÓZžÓTùÓJNÔ8™Ô1ÒÔAÕAFÕ5ˆÕ.¾Õ+íÕ-Ö-GÖ.uÖL¤Ö;ñÖ3-×9a×;›×'××ÿ×(Ø*BØ2mØ Ø.¼ØëØ5Ù!7Ù4YÙ.ŽÙA½Ù>ÿÙ">Ú%aÚi‡ÚWñÚXIÛU¢ÛUøÛGNÜB–Ü7ÙÜFÝIXÝ\¢ÝEÿÝ:EÞE€Þ?ÆÞ7ß;>ß„zßYÿßLYàK¦à2òà4%áIZáJ¤áRïáKBâCŽâ3Òâã)ã5=ãsã8‡ãÀãÔãèã)ýã'ä 4ä@Uä%–ä>¼äûä1å7Må…å"•å$¸å0Ýåææ;æ*Qæ|æY�æ0éæ8ç6Sç4Šç9¿ç^ùçBXè[›èn÷èoféMÖé7$ê`\ê_½êMëKkë_·ëKì]cì_ÁìA!íFcíAªíBìíB/î&rîV™îðî4ï @ï
aï,oïœï'¼ïäïüï
ð ð?ð5Yð7�ð4Çð#üð& ñKGñ“ñ¦ñ%¸ñ<Þñò;òQò
cò
qòò	Œò–ò
ªò¸ò×ò#æò6
-ó
-AóLóeó<{óD¸óýó0ô.Nô}ô=˜ô$Öô+ûô'õ,FõasõHÕõ#öBöKö,dö'‘ö¹öÓö*çö÷/#÷,S÷5€÷¶÷HÒ÷Hø2dø—øTªøÿø'ù6ùYTùA®ù2ðù#ú>ú"Xú{úŒú¬úIÇúPûNbûP±û;üC>üG‚üGÊü‡ýfšý�þT�þPäþ55ÿRkÿ?¾ÿSþÿ#Rvˆš3¶-êf8Ÿ%¼+â"U1‡"¡6Ä4û40	e	o
-y!„8¦5ß,--Zˆ"œ$¿8ä".@JoKº;TB$—”¼Qe#y7�"Õ,ø%B`~�ºKÙ"%	H	c	x	�	¢	!·	'Ù	
-$!
-)F
-:p
-«
-DÉ
->'M4uªÈßô2Bar)„4®?ãF#
8j
J£
Á÷6éÇ™4,õ
¯a;ëçÚYªQ>®öe7K�1V°U$•	(½Ó
-ˆ¬Žhøn#SI�%Ú×ÀP±T‹}p‘¦5î+HBøW—S€¡‘!{F×³¢ÅXEµ#¤	‚±Æ)Œ %ÅÂ¶`ˆ.mÁg·w?(Ÿz+¸€
-À!) y|¥•Õ[úƒ½›[GDÿmç‰†YÈÝy6‹ot*tååðæßIºJ­E\ù¼AU³¼u6:ëzÔž†"¡„C¥ìnq­¶XÃ�¯o'«0Bí¹â|2�ï2J@ï5«õ:/V®
þx˜‡h/‚Lðc—?š‡O¿3ôú
²öªã“äjdD°ŽE�Ë=ùJ’š�]C}�\Î*ÏŠŠ<B‰·µ»àóK3_1v.^' ñÃM&ÿRk4ãýÑ£bÏè´9ûêìp§ÕAò!ÒL8Ô¾c˜¾TòF…Pá÷ÆÍô &ä2~vkZ1“i{Ùx$AÊL=)²M©W7íOÇÞHÖž´fé¦~–œI?0q’e›âÜ�b-9lêÌZ"7Ê”Œ$ÌG^ÄœÉý¤iÓÑàl]î¨:ó8™/9Q5sÜD`*@ËÐñÐG-©C-ÛP0NÎüRdrØ<>ujƒÒæ3ÈèOg¸¨,Þ('@�Ä
-K+%&a£	H=;N…ßÖ§8NºŸ„û¿<Û» ”,ÉM¬"r¹sþ�¢_áØF#Ý4ü;–QÍ.w>fÙÂ	Export Address Table 			Export Address Table 		%08lx
-	Name Pointer Table 			Ordinal Table 				[Name Pointer/Ordinal] Table	%08lx
-	code-base %08lx toc (loadable/actual) %08lx/%08lx
-	reloc %4d offset %4x [%4lx] %s	vma:  Hint/Ord Member-Name Bound-To
+Þ•	0x8
+Àp<™ŽT™Œ›4¶
5¶C¶W¶p¶A�¶?Ñ¶:·L·c·v·$•·
º·È·%è·¸¸A"¸&d¸‹¸¤¸½¸Ö¸æ¸ ¹&¹F¹_¹v¹ƒ¹P–¹ç¹*ÿ¹;*ºfºFxº6¿º6öº:-»5h»,ž»DË»N¼J_¼)ª¼=Ô¼:½LM½)š½BÄ½L¾T¾j¾D�¾GÆ¾¿-¿?¿S¿k¿€¿3Ÿ¿Ó¿ê¿0ü¿-À=ÀMÀ+gÀ+“À+¿À#ëÀÁ'Á0ÁLÁcÁ(xÁ?¡Á>áÁ% Â&FÂ(mÂ)–ÂGÀÂÃÃ?Ã\ÃuÃ�Ã°ÃÉÃäÃúÃÄ&Ä=Ä,WÄ„Ä”Ä­ÄÅÄÜÄëÄÅÅ0ÅGÅ1\ÅŽÅŸÅ¬ÅÃÅÞÅ#öÅ+Æ&FÆ5mÆ£Æ¸ÆÐÆêÆÇÇ3ÇJÇ`Ç$uÇšÇ³ÇÓÇëÇ$È%È9ÈNÈ<gÈ¤È³È
ÂÈÐÈäÈùÈ É2ÉMÉ]É}É™É¹ÉÒÉëÉþÉ*Ê9ÊKÊ&]Ê„Ê0˜ÊÉÊ"ÝÊ	Ë
+Ë#ËAËZËkË„Ë"�ËÀË"ÔË#÷Ë#Ì?Ì#TÌ#xÌœÌ©ÌÇÌåÌëÌøÌÍÍ"Í
+@ÍKÍPÍ!VÍ xÍ™ÍžÍ£Í»ÍÛÍûÍÎ!Î'Î8Î?ÎEÎJÎOÎUÎYÎ"^Î�Î†Î¦ÎºÎ&ÚÎBÏDÏdÏiÏnÏuÏ{Ï€Ï’Ï™Ï±ÏÅÏÌÏåÏùÏ
+ÐÐ,Ð=ÐNÐfÐ	uÐ
Ð
�Ð
+›Ð
+¦Ð
+±Ð
+¼Ð
+ÇÐ$ÒÐ
+÷Ð#Ñ
+&Ñ1ÑCÑ![Ñ}Ñ’Ñ
+¡Ñ
¬Ñ	ºÑÄÑ
+ÕÑàÑçÑÿÑÒ+Ò:ÒQÒlÒ{Ò”Ò£ÒªÒ(ÊÒ/óÒL#ÓpÓ‚Ó+‘Ó½ÓAÙÓÔ5ÔOÔiÔ8~Ô·ÔÏÔäÔ&þÔ%ÕDÕ2_Õ?’Õ&ÒÕùÕ(ÖAÖ"TÖwÖ*—Ö6ÂÖ{ùÖru×xè×aØwØ7÷Ø:/ÙjÙ@|Ù5½ÙFóÙM:Ú4ˆÚ4½Ú=òÚ70Û4hÛ1�ÛUÏÛU%Üb{ÜbÞÜAÝaÝ&Ý¦Ý&ÀÝœçÝ,„Þ1±Þ'ãÞ$ß/0ß-`ß+Žß0ºß&ëß2à8Eà*~à©à=Éà9á:Aá6|á6³á$êáâ//â_â5tâ+ªâ$Öâûâ6ã"Qã&tã6›ã=Òã:ä:KäD†ä8Ëä9åC>å:‚å7½å8õå@.æGoæ9·æ,ñæ0ç#Oçsç=Žç-Ìç6úç1è7Mè3…è;¹è:õè(0é"Yé3|é%°é?Öé.êEê0eê1–ê'ÈêVðêGëEeë8«ë(äëc
ì4qì&¦ì2Íì&ík'í*“í*¾í4éí]îA|î?¾îGþîFïOeïbµï8ð,Qð+~ð)ªðYÔð0.ñ=_ñ3�ñ2ÑñBò,Gò(tòL�òêò4ó)=ó$gó3Œó9Àó6úó/1ôDaô&¦ôWÍôU%õ8{õ%´õ(Úõ&ö,*ö#Wö>{öBºöBýö@÷'`÷Eˆ÷9Î÷4ø3=øJqø(¼ø;åø!ù0@ùDqù/¶ù:æù@!ú@búG£ú?ëú2+û8^ûS—û'ëû.ü,Bü'oü6—ü ÎüYïü/Iý4yý5®ýNäýª3þIÞþ9(ÿ3bÿ¾–ÿ<U<’FÏPog>×F`]~¾F=‚„[3c@—MØm&7”#Ìð(&/IVW +ø5$Zo8ƒ"¼$ß'9,Cf!ª!Ì*î/	1I	/{	/«	0Û	*
+07
+<h
+i¥
+=BM=�9Î-&6"].€8¯:èF#
?j
Vª
B(D>m;¬=è4&#[@LÀI
8W+�8¼2õ9(:b3�,Ñuþ t.•.Ä$ó'0@Bq/´,ä'%9,_ŒC¦Jê@5Jv*Á%ì%<81u §(Èlñ<^<›+Ø, HM6–AÍAJQ>œJÛJ&<q<®.ë(lCv°A'6i 4¾0ó+$APJ’3Ý@!R#t.˜BÇF
+4Q%†:¬2ç3 *N 9y C³ C÷ :;!Tv!JË!5"4L"6�"P¸"/	#/9#&i#&�#5·#'í#0$5F$(|$3¥$%Ù$&ÿ$&%'F%=n%#¬%+Ð%3ü%(0&@Y&Cš&5Þ&'' <',]'gŠ'4ò'm'(A•(@×(H)Ga)K©)Iõ)L?*HŒ*CÕ*Y+5s+0©+4Ú+M,N],1¬,)Þ,)-/2-)b-+Œ-7¸-3ð-6$.9[.X•.[î.CJ/6Ž/>Å/=0*B0.m02œ0[Ï0&+1-R1,€1­1È1/ã1$2082'i28‘2"Ê2Hí2A63)x3=¢3#à3@42E4+x4#¤45È4<þ4';5%c5(‰5R²5?6FE6Œ63§61Û6D
7HR7D›7Kà7a,8[Ž8sê8g^9gÆ9B.:‚q:Tô:=I;!‡;-©;b×;b:<g�<g=0m=(ž=4Ç=5ü=O2>)‚>3¬>-à>/?H>?F‡?7Î?G@+N@$z@2Ÿ@.Ò@/A+1A)]A-‡A/µA^åAKDBF�B×B"óBC51C"gC(ŠC$³CEØCDDDcDF¨D_ïD^OE"®E*ÑE+üE'(F;PF8ŒF'ÅF'íF3G>IG-ˆG,¶GãGIHLHiH.‡H/¶HæH$I3+I_IF}I&ÄI!ëI6
J5DJ)zJ¤J¾J(ÝJK+ K LK$mK#’K.¶K.åK%L2:L3mL)¡L\ËLD(MHmMD¶MLûMXHNH¡N)êN*O ?O5`O9–O@ÐO+P6=P\tPAÑP.Q]BQM Q3îQ="RH`R<©R8æR3S4SS4ˆS0½S@îS1/TBaTL¤TAñTL3U8€U+¹U2åU<V3UVX‰VPâV.3W`bW&ÃWPêW\;XX˜XpñXAbY#¤YEÈY+ZK:Z.†Z<µZ,òZX[,x[¥["½[%à[\3&\2Z\�\4­\?â\@"]Wc]=»]*ù]5$^%Z^B€^%Ã^4é^>_<]_Cš_BÞ_;!`3]`)‘`$»`!à`'a8*acaƒa•a¤a!¹aÛa)ña,b-Hb$vb›b1®b_àb@c/Uc+…cV±cIdIRd<œd.Ùd.e/7e;ge£e¶eÊe0Üe/
f=f'Wf7f·f
Ëf.Ùfg
g"g%3g\Yg;¶gòghhh:hGh	`hjh|h�h,šhÇhÛhñh"
i0i(Mi/vi/¦i1Öi8j#Aj'ej2�j3Àjôj;k@kGkOkdktk{kƒk—k¬kÁkÓkækýkl&lDl	clml‹l	 l"ªlÍlßl)ûl/%m"Umxm�m˜m¤m¨m»mÍmßm'ñmn 6n#Wn{n•n¯nÉnãnýno1o CodoH‚o1Ëo#ýo,!pBNpX‘paêp:Lq.‡q7¶q1îq; r(\r:…r,Àr-ír's"Cs-fs”s2³sæsöst t7t!Mt$ot,”t(Át-êtIubu5uµu
+ÊuCÕuIvcvuv}v…v
£v±v>Ãv?wABw„w/ w+Ðw8üw5x$Kx!px1’xÄxãx+y.yBy[y
+hysyB’yÕy%çy
zz.=z-lzGšz3âz{"5{X{u{†{—{©{$Â{ç{!|&|58|n|	€|Š|œ|²|Ò|ì|}})}X0}	‰}“}˜}¤}³}Ê}æ}ü}~.~G~g~{~�~¥~-Ã~ñ~)C'X€�¡³º!Áã:ÿ%:€%`€†€Ÿ€A¸€;ú€C6�z�#”�,¸�=å�C#‚=g‚"¥‚7È‚<ƒ<=ƒ)zƒ5¤ƒÚƒãƒvþƒ*u„ „'²„Ú„ì„ó„ú„
+	…(…=…'O…w…”…¬…Ä…#Ü…†,†.E†,t†.¡†Ð†"í†,‡.=‡!l‡1Ž‡0À‡2ñ‡,$ˆ.Qˆ#€ˆ¤ˆÄˆ(Øˆ/‰!1‰S‰(p‰#™‰+½‰é‰,Š /ŠPŠiŠ‰Š�Š½Š#ÜŠ-‹".‹Q‹c‹v‹‚‹—‹&©‹	Ð‹FÚ‹/!ŒEQŒ—Œ-¨ŒJÖŒM!�o���¦�¹�-Ö�Ž*
Ž8ŽVŽjŽrŽA~Ž>ÀŽÿŽA�7S�B‹�!Î�ð�˜�©�Å�×�é�:þ�#9‘2]‘.�‘#¿‘1ã‘9’O’\’i’y’�’:š’+Õ’#“%“8“Q“i“,�“:®“é“	”d”p”6ƒ”;º”;ö”<2•go•b×•<:–1w–(©–$Ò–÷–/
—+=—i—…—
+Ÿ—
+ª—
+µ—À—Ý—6ù—>0˜<o˜¬˜4È˜'ý˜$%™6J™�™’™ª™Á™Ò™ê™šš&š8šJšdšš‘š¢šºš2Ùš›'&›LN›4››7Ð›0œ'9œaœ�œ–œ¨œ·œ-Ñœ+ÿœ++�*W�	‚�	Œ�
+–�
+¡�¬�È�Ô�á�ö�ž ž5žDž1Iž{ž/›žËžêž ûž'Ÿ'DŸ"lŸ&�Ÿ0¶ŸçŸ  # A 9X -’ À ,Õ a¡9d¡2ž¡4Ñ¡)¢C0¢It¢E¾¢Y£Y^£;¸£;ô£M0¤/~¤5®¤:ä¤5¥4U¥9Š¥7Ä¥9ü¥D6¦G{¦DÃ¦E§CN§-’§0À§4ñ§>&¨;e¨8¡¨*Ú¨6©/<©;l©3¨©%Ü©1ª!4ªVVª9­ª\çªAD«1†«?¸«:ø«73¬>k¬$ª¬EÏ¬u­q‹­Iý­G®4d®O™®Zé®/D¯Ot¯PÄ¯3° I°?j°:ª°&å°
+±±3±0@±%q±"—±%º±0à±!²3²L²g²|²‰²S˜²Oì²<³,[³7ˆ³À³
Â³Ð³1ß³´%´8´K´Ch´O¬´,ü´6)µ`µ$€µ_¥µ"¶((¶AQ¶“¶,±¶2Þ¶H·Z·j·"{·
+ž·>©·$è·
¸ ¸@¸¼V¸¹¹Í¹/ß¹º*ºHº*hºL“º2àº-»)A»"k»Ž»¡»¶»Ë»2Ú»
¼0¼F¼%a¼‡¼9”¼Î¼<à¼=½3[½5�½2Å½7ø½B0¾Ls¾À¾Ñ¾ë¾ó¾û¾¿H¿g¿4j¿&Ÿ¿Æ¿Ï¿
+æ¿ñ¿2
À-@ÀOnÀ¾ÀÝÀ"âÀ*Á%0Á VÁwÁ•Á�ÁC¼Á¤Â¥Â²Â ÌÂLíÂ:ÃCÃWÃlÃ‚Ã˜Ã¯ÃÌÃÝÃïÃûÃÄÄ*$ÄNOÄ[žÄúÄAþÄ@Å_Å,wÅ¤ÅÁÅ6ÙÅÆ 0Æ8QÆ+ŠÆ¶ÆÈÆØÆàÆ'õÆ)Ç(GÇpÇˆÇœÇ°ÇÄÇ×Ç
êÇøÇIÈ \È}ÈDœÈPáÈ2ÉDÉ2_É$’É·É×É5êÉ Ê!;Ê]ÊdÊ2lÊFŸÊJæÊ/1ËFaË¨Ë"ºËÝËíËMüË9JÌ;„Ì7ÀÌøÌÍ-Í<Í,OÍ$|ÍJ¡Í)ìÍ(Î%?Î(eÎŽÎ
+ªÎ,µÎâÎ)üÎ&ÏDÏ^ÏvÏ~Ï–Ï/®Ï)ÞÏÐ
Ð#,ÐPÐ'hÐ�Ð¡Ð·ÐÑÐîÐÑ#Ñ%8Ñ^Ñ{Ñ’Ñ¤Ñ7»ÑóÑÒ%(ÒNÒhÒ}Ò�Ò¢Ò¶ÒÊÒàÒJöÒJAÓJŒÓI×Ó:!Ô\Ô-{Ô;©Ô+åÔ@Õ<RÕ4�Õ6ÄÕ-ûÕ8)Ö5bÖ5˜Ö8ÎÖU×.]×>Œ×IË×hØy~Ø>øØN7ÙI†ÙdÐÙ05Ú;fÚ8¢ÚFÛÚ5"Û&XÛ.Û-®Û.ÜÛ0Ü<<Ü!yÜ›Ü!´Ü)ÖÜEÝZFÝ`¡ÝGÞZJÞU¥Þ.ûÞ,*ßhWßjÀßE+à0qà6¢àkÙàEEá‹á&©áQÐáS"âEvâ#¼â<àâ<ãeZãQÀã2ä/Eä/uä4¥ä=Úä9å0Rå7ƒå%»å'áå=	æ6Gæ@~æ¿æ2ßæç,ç
Cç
Qç
_ç
mç!{ç
�ç"«çÎç
Ýç)ëç)è?è+Tè€è�è”è™èžè£èªè½èÄè=ÊèNé
Wëeëxë#–ëOºëQ
+ìF\ì£ìÃìÖì&õì
í%*í)Pízí|íLŽí+Ûíî&î@îYî$hî&�î%´î%Úîïï+ï]Bï$ ï2Åï>øï7ðfNðDµð=úðA8ñ?zñ1ºñMìñZ:òZ•ò,ðòOó;móS©ó0ýóH.ôWwôÏôéôYõ[]õ ¹õÚõëõÿõö /ö4Pö…öœö2³öæööö÷, ÷,M÷,z÷$§÷Ì÷ä÷í÷ø#ø.8øLgøK´ø&ù+'ù)Sù0}ùb®ùú!(úJúgúƒú)¡úËú%æúû$û>ûZûqû7‹ûÃûÓûñûü(ü:üTüjü‡üžü2³üæüúüý!ý?ý)[ý2…ý,¸ý<åý"þ#7þ#[þþ#”þ¸þÓþìþÿ.ÿFÿ!bÿ„ÿ¡ÿ.¸ÿçÿ<3p
Žœ±!Æ!è
+(+8'd+Œ¸Òëþ3CV)i“9¨â/ö&3#Fjƒ—°&Ìó%#-#Qu#†#ªÎ(Ý(/5EMR&r
+™¤©(¯0Ø	#)$Mrw7|´ÅÌÒ×Üâæ(ë#=#T/xG¨#ð%+0FMdx˜¬¿Òåø	%		7	
A	
O	
+]	
+h	
+s	
+~	
+‰	1”	Æ	Tâ	
+7
+B
+T
+6s
+ª
+À
+
+Ø
+ã
+	ô
+þ
++2Mfx‡#¥ÉÛû
+'99Csp·(
D
:V
‘
T­
 !# EfP|Íí 	8**cŽ8«Tä89*r2�Ð"ê*
.8:gƒ¢u&zœ¤0@Õ9PbdGÇMU]F³FúIAB‹BÎ7fIo°† †§.*N;yµ4ÒÒ6Ú5+G)s6�1Ô/66+m5™7Ï4&<PcL´J8LC…&É&ð9QBp5³0é* LE *’ .½ ?ì E,!?r!@²!Kó!=?"?}"J½"?#=H#=†#`Ä#l%$K’$AÞ$< %)]%)‡%D±%<ö%F3&%z&C &:ä&B'Bb'+¥'(Ñ'<ú'*7(Mb(J°('û(<#)6`).—)hÆ)#/*`S*M´*8+ˆ;+HÄ+5
,7C,.{,Žª,59-5o-A¥-…ç-Pm.N¾.U
/c/a‚/ä/Bd0.§0/Ö0(1|/1:¬1Kç1A328u2L®2.û21*3U\3 ²3FÓ354+P48|4Oµ4V5G\5K¤5-ð5z6™6[74u7/ª7,Ú7.8'68?^8Cž8Iâ8(,9CU9Q™9�ë9L{:AÈ:y
+;R„;V×;(.<7W<X�<Cè<E,=Mr=MÀ=Z>Ti>A¾>S?kT?8À?2ù?8,@.e@;”@(Ð@sù@/mA9�A:×AeBÒxBRKC>žC:ÝCúDKEK_EI«EcõE�YFPçFX8Go‘G“HT•H˜êHnƒI2òIL%JYrJŠÌJ7WK:�KÊK:æK0!LcRLt¶L7+M:cMžM¶MeÉM(/N'XN1€Nk²NYO%xO%žO8ÄO7ýO?5P7uP<­P3êP1Q4PQ9…Qu¿QI5RKRIËRDS;ZS'–S2¾S@ñS<2TCoTM³TDUxFUN¿U(VC7V?{VJ»V;W'BWOjWIºWiX<nX-«XdÙXF>Ye…YCëYC/ZUsZ–ÉZ$`[7…[7½[*õ[- \9N\Uˆ\9Þ\9]8R]5‹]:Á]$ü]J!^Tl^PÁ^d_-w_-¥_/Ó_P`;T`,�`2½`˜ð`G‰aIÑa5bQb:qbJ¬bL÷bGDcGŒcLÔc:!dK\dL¨dJõdR@e8“e8Ìeˆf™ŽfM(g:vg(±g;Úg>h,UhZ‚h`ÝhF>iB…i-Èi4öi9+jTejjºj>%k9dkIžk=èk;&l7bl[šlgölg^mLÆmtn^ˆn=çn>%o=doj¢oA
p@Op-�p5¾p>ôp33q3gq9›q2Õq@r-Ir0wr'¨r.ÐrIÿr3Is=}sD»s*tK+t]wt@Õt-u Du4eu‰šuI$vnnvPÝvO.wX~wW×w[/xV‹xiâx]LySªyzþyFyz6Àz:÷z_2{`’{:ó{0.|5_|8•|?Î|;}?J}9Š}<Ä}?~„A~vÆ~S=A‘MÓ@!€Hb€H«€?ô€}4�0²�Aã�@%‚#f‚Š‚E¨‚?î‚>.ƒ?mƒS­ƒ0„N2„E�„,Ç„ô„3t…H¨…Jñ…4<†;q†9­†Cç†9+‡*e‡/�‡bÀ‡B#ˆPfˆ&·ˆ;Þˆ=‰]X‰V¶‰O
Š_]Š~½Šq<‹‰®‹u8Œ~®ŒO-�©}�q'ŽM™Ž"çŽ3
+�}>�~¼�|;�|¸�A5‘(w‘D ‘Få‘\,’4‰’?¾’@þ’8?“cx“`Ü“P=”[Ž”3ê”5•<T•6‘•9È•1–84–5m–@£–{ä–S`—G´—ü—%˜A˜9_˜'™˜/Á˜)ñ˜G™Fc™Fª™Iñ™b;šažš3›64›5k›3¡›CÕ›Hœ1bœ2”œ3ÇœJûœ8F�3�"³�hÖ�!?ž-až4�ž5Äž"úž/Ÿ@MŸ#ŽŸS²Ÿ+ #2 ?V D– 2Û "¡1¡(O¡x¡2‘¡ Ä¡$å¡"
+¢.-¢.\¢%‹¢7±¢8é¢+"£pN£^¿£_¤S~¤_Ò¤k2¥bž¥:¦3<¦1p¦?¢¦Eâ¦N(§8w§F°§r÷§Zj¨6Å¨Šü¨s‡©Bû©\>ª^›ªGúªNB«M‘«Eß«D%¬;j¬S¦¬6ú¬I1­K{­DÇ­N®A[®?�®CÝ®I!¯@k¯h¬¯_°Ku°�Á°.O±q~±fð±bW²�º²PK³5œ³LÒ³1´NQ´6 ´M×´<%µrbµDÕµ¶(2¶<[¶,˜¶=Å¶<·0@·Hq·Hº·X¸|\¸[Ù¸/5¹Re¹1¸¹Xê¹<Cº;€º]¼ºT»\o»ZÌ»P'¼8x¼8±¼+ê¼ ½)7½9a½(›½Ä½Û½è½8ü½ 5¾1V¾;ˆ¾>Ä¾6¿:¿8K¿n„¿ó¿,À5=ÀhsÀYÜÀY6ÁJ�Á@ÛÁ@ÂC]ÂD¡ÂæÂÃÃ@)Ã1jÃœÃ.¹ÃDèÃ-Ä
IÄ5WÄ�ÄžÄ¯Ä$ÁÄ’æÄNyÅÈÅ#ÛÅÿÅ%Æ(Æ7ÆQÆ^ÆsÆ†Æ:“ÆÎÆâÆ%þÆ%$Ç#JÇ-nÇ9œÇ>ÖÇ8È>NÈ'�È+µÈ3áÈ9ÉOÉ:dÉ	ŸÉ	©É ³ÉÔÉ	éÉ	óÉýÉÊ(Ê>ÊQÊeÊƒÊ¡Ê"»Ê"ÞÊË!
+Ë ,ËMË(ZËƒË!•Ë.·Ë4æË$Ì@Ì^ÌgÌÌƒÌ—Ì©Ì»Ì,ÍÌ úÌ*Í*FÍ!qÍ“Í®ÍÉÍäÍÿÍÎ5Î,UÎ#‚ÎL¦ÎEóÎ,9Ï5fÏKœÏxèÏ‡aÐVéÐ>@ÑAÑ<ÁÑgþÑ:fÒV¡ÒEøÒ7>Ó,vÓ*£Ó2ÎÓ+Ô:-ÔhÔzÔ ˜Ô¹ÔÙÔ"ìÔ$Õ,4Õ&aÕ-ˆÕT¶ÕÖ6'Ö^Ö
vÖH„ÖRÍÖ ×2×:×B×
a×o×E�×GÇ×RØ+bØDŽØ:ÓØ7ÙFÙEcÙ?©ÙIéÙ/3Ú2cÚX–Ú'ïÚÛ3Û
+DÛ/OÛWÛ×Û&éÛÜ#Ü9AÜ-{ÜR©Ü@üÜ"=Ý(`Ý‰Ý§Ý¼ÝÑÝãÝ$Þ"'Þ(JÞsÞ:…ÞÀÞÒÞâÞôÞ"
+ß -ß(NßwßŠßœßp£ß	àà'à4àGà bàƒà™à#±àÕà#ðàá,á@á"\á7á·áÉáÞá òáâ7+âcârâ„â–â�â'¤âÌâ=éâ&'ã&Nãuã’ãM­ã]ûãQYä#«äEÏä,åJBåP�åDÞå3#æMWæ[¥æSç?UçT•çêçóç‹
è.™èÈè.Úè	éé"é)é<é>MéŒé/žéÎéîé 	ê*ê,Bê%oê<•ê>Òê<ë>Në*�ë1¸ë<êë>'ì4fìF›ìDâìF'í<ní>«í2êí#îAî?XîI˜î"âî ï4&ï'[ï2ƒï¶ï.Öï*ð'0ð#Xð|ð"•ð#¸ð&Üð0ñ'4ñ\ñnñ‚ñ�ñ¹ñJÊñ
òL#ò8pòy©ò#ó.4óecókÉó)5ô_ôxô)“ô.½ôìô8õô,.õ[õ
+võ�õ]�õQîõ@öYRöE¬ö_òö1R÷*„÷´¯÷'døŒø£øºøF×ø/ù5Nù.„ù>³ù8òù@+ú
lú
zúˆú›ú%¢úHÈúEû+Wûƒû˜û³ûËû6âûMü"güŠüi›üý=ýL\ýL©ýFöýr=þk°þ>ÿ6[ÿ-’ÿ+Àÿìÿ70Du’°ÀÐ5à0OGO—Mç'5B]; 2Ü?OeƒŸµÓò	 7N!n�§$½-â5F9dcžFAIG‹9Ó(
#6Zp |E�CãC'?k	«	µ
+¿
+Ê(Õþ	 	 7	X	g	|	‹	3�	-Ä	7ò	#*
+N
+ c
+8„
+6½
+1ô
+@&<g,¤ Ñò! )?J2Š½<Ö‚
I–
Nà
9/*iS”Qèa:„œ„!Q¦OøkH>´IóŠ=>È=JE@�JÑVYsZÍU(R~DÑDB[JžLéD6+{G§6ï;&@b,£6Ð)q1G£rëZ^A¹OûLK:˜@Ó*R?r’fMl&º5áfp~8ïr(W›6ó!* HL C• /Ù 
+	!(!=!:O!+Š!.¶!+å!N" `"!�"'£"Ë"å"÷"h	#ir#2Ü#?$KO$›$
�$«$Dº$ÿ$%&%9%KV%Z¢%:ý%F8&$&'¤&nÌ&.;'.j'L™'$æ'1(<=(Oz(
Ê(Ø("ç(
+
+)P))f)�)$¦)Ë)üá)òÞ*Ñ+:å+ ,#?,(c,3Œ,YÀ,D-5_-.•-(Ä-í-..6. K.ì.4ô. )/DJ/�/<¡/Þ/Hó/I<0H†0RÏ0G"1Cj1W®1a2h2%z2 2°2Á2Þ2mä2R3OU36¥3Ü3 é3

+449547o4~§4&&5M5&V5:}51¸51ê566S6'c6c‹6­ï6�7´76Í7z8
+8Š8¡8¹8Ò8ë89!919B9R9d9‚9A•9T×9x,:¥:R©:%ü:#";4F;{; š;=»;'ù;(!<7J<D‚<Ç<Ý<ø<"=!/=#Q="u=˜=´=É=Ý=ñ=>>''>ŽO>"Þ>)?b+?XŽ?ç?ý?/@<J@2‡@º@HÍ@!A@8AyA€A?ˆALÈAWB:mBL¨BõB2C>CNCF]CB¤CGçCJ/DzD—D¶D ÈD6éD5 EeVE;¼E4øE*-F9XF ’F
+³F3¾FòF7G#IGmGˆG
+£G®GÈGCæG3*H^HyH7�H!ÅH1çHI3IRI qI’I±I#ÀI8äIJ!:J\JsJBŠJÍJéJ4K#;K_KtK†K™K­KÁK×K\íKcJL^®Lc
M?qM ±M=ÒMKN8\NF•NKÜNS(O>|O8»O>ôOS3PR‡PGÚPz"QD�QUâQj8R—£R˜;SUÔSk*Tj–T‘U:“U@ÎUIVWYVN±V2W:3W9nW:¨W;ãW>X4^X#“X/·X7çXNYfnY…ÕY^[ZsºZu.[5¤[4Ú[w\‡\Y]@a]@¢]Žã]_r^+Ò^0þ^j/_¨š_pC`3´`Mè`M6a‚„asb8{bA´bDöbK;cO‡cI×cC!dFed8¬d:åd] eH~e\Çe'$f8Lf…f/ˆf¸fËfÞfðf.g1g/Cgsg‡g6šg6Ñgh8"h[hohthyh~hƒhŠh¢h©hQ¯h]›j7ìŸ±ß4¾ˆKi¿z¹Ò°ZÜÐ†©œË‹e£æÌµ Þ½W³1üÑÃO”�+·-Øˆæ>6ØK¹Å5.ŽÚÞüÙ-ÿ¨¡8éÊà”)é9hfBC”5ðpHÄ•ír~�}u‚N}lACˆÔHQ~à
+CÔõùÀáÖE�Pñ¤»Ãÿ±ë]ÈÚçi[3ªÆ3-Ph–ž‡Ïw“FR³âãk_é‰%$¡*—²5¨Q0q`µôŽQy”+“ùvå4GåìÄªÙõÓÞŽ+ÐæÁñÆàeøç{Dík-­PZ»)r
+Q:»‘Œ´@½ªJ(ˆSðTfŠÓ¡‘—ÏúM¼°ý#,#æÁ.z,¤_ÑbŠ¼úñ>—˜îµñ%„ÿŸÀ¶Y÷÷¤@¯wRO”À‹ÈTxëL0–‘Û�»ÁäŸ{lK ÐÍz#ÅxMH}õøÖd6ƒ0a‰L.‚*òøÝÚ¯ÐÂ¯ÂcÃ mg�°\è^wÂØaf…Fek_|YÊd±+x¹—v7¾˜%A<‚ÄÒ
+÷£�"àª5…È§�•„�×
+[nq@ÊýÔ…–IÙá]WÞ¬¥3�*™äï|˜Y­¹6ÇÑPÆW_ì"¸œòâ‘‰çµ$É}Á4Ì/Ì+,¯ÆMÑs‚àœŸÙt)Š¦C´žêþï×éV¿@‡É(Ø?¢B¥E©�íË2c	Óè}ŸC(ç?Ã†	îók�b§ãL	—kÚXö�	uK:±£ähmùß;’˜Î®ô™Rêp XËUqÊô÷Ÿg*=d•¬‡Gx�ScÁ�I«]&d¸à`1ÛðUò:ãäÜØÚ"=]h²°jÕ°.�Ö�HI=¬‡ì?…CÍê¦NîºNéWá7¸+I
+ë™>“Í/sŽšûi>Œ’“i4½!¤|!ÉšêäŒ¿>À²'pÕÛìn‡A6žK8ºy½¥~W'‹·ëheb’!÷«4Æ(s·L‹®Î·ø§¶¯`orfãa
ëöÎZFŠAGÚO©Ù='ËBLèE[ºÄB&$ÒRn¬/öa�¨ÿºkÝ~|-ý"ºÔ!Ãþú,9y%€É’Ú?õõüVêF›óKô&†TtE'¢m8Jœs‡ÝClO™²ˆU„›êŠ¢"âdS#�†ÓïèDÑÜw«VƒùÕMZ¶b&jžiÏÛ«’ÍB¿Å´Ý¢@V[(÷çúpôº]ÙÀ€¶Ä)mX@MŠmzÍtïÅcçÙ9‹ìl2$6ª�[ nžîµåH ÂP	�‘Ga€üâ%#»‚U•8Ýyó•t×éòšjj�³Š¼1Æ�=rªu<±Ô:ÍþGo�×nX~ržU:;vŸ±ð¸Q×A&$= ‡_ôÿÓ·tÑÇãÜVþ{g³4Äg,¸ŽG×¥�ö4���‰û¶‘è¸õ5£¾\â5Ž£åãÔƒ¯ñÃÂÈ%Ø½n";–î°ÈÿžSO}ÂÈìM(móÞ1á…û\«¢Õv¨·›´pÂ´Ï³\S_/«Zá{ý†ãÇOzæËf¼T•/—­ùg(ÒÊ¹8¦2H±þ…Üò1D%š\˜0½ß¤zÆEZ3ÐL¢R§EéW
+5;ÎyG:Ûe‰n‰^J<wÐö!N‹
•ÇÅö²üÏs'ÌƒXob×¬¬O1PI†o+íDþ¶ÕÜ<�iÕâN¼9î‘ÊLŽ­;ô)F¡r{]›ögßÖ#y8
<Y.*¨ÜcV°ý™™X„p¤qQ÷ ùNJˆ.¥Àètš^ÇFßhÝÝÊÎ a»
¦KþÖ{ð�£	¾œ2g`¡À­†¿á0¼�ctÈ€x“‚­ÿøz¨©Óål?fTƒ[®cuƒ)€¿SRÕDï¥l7 ³?ßYš3¤·–aqÅ*”§^ý_—ñ2$`}à;ÉËëçùëI/ób)oÓúƒ¡8ŒÛ&å!˜­U6¼ h\ºE¦o²òpÖNí>d�û¬�ýû`0ÅDX øw³v´®^v˜‹Á«¡`®ä&¦úÒÐ' M-¶!|óŒuRÞîï’äÞšT*J77sÎÉò99új¾	¦>y@Ì„„¢Ôœø#;Ã¥™dsAr=	Œ9q\¯B€/æÉü¸Òµ £Pœ…6Q�
Ò¾®F|?|{1ZHØvåSífuóêÇ[‰D~›Tˆ-:3Ñû€áæ,¹ÎÄ®m©oAü²„
©ujÏ©~¹ÖßËûâBw3xÛkð´õ<eÍï“<Y,YŒ§”Ìq§70’è
2ílÁ›»¿^Iñ¨ªµ�–W‚^UÇ“ðJ.ÌbÏVJ"½$
+2x–ie'¾�iiiÄ�à�ô�žž0žDžXžlž€ž”ž¨ž¼žÐžäžøžŸ Ÿ4ŸHŸdŸxŸŒŸ Ÿ´ŸÈŸÜŸðŸ  4 H \ x œ ¸ Ì à ô ¡$¡8¡L¡`¡|¡�¡¤¡¸¡Ì¡à¡ô¡¢¢0¢L¢h¢|¢�¢´¢È¢Ü¢ð¢££,£H£d£€£”£¨£¼£Ð£ä£ø£¤ ¤4¤H¤\¤p¤„¤˜¤¬¤À¤Ô¤è¤ü¤¥4¥H¥\¥x¥Œ¥ ¥´¥È¥Ü¥ð¥¦¦,¦H¦d¦x¦”¦°¦Ì¦à¦ô¦§$§@§\§p§„§ §´§È§Ü§ð§¨¨,¨@¨\¨p¨„¨ ¨´¨Ð¨ä¨ø¨© ©4©H©\©p©„©˜©Ä©à©ü©ª,ª@ªTªhª|ª�ª¤ª¸ªÌªàªôª««0«D«X«l«€«œ«°«Ä«Ø«ì«¬¬(¬<¬P¬l¬€¬”¬°¬Ô¬ð¬­­,­@­\­p­„­˜­´­È­Ü­ð­®®,®@®T®h®„® ®´®È®ì®¯¯(¯<¯P¯d¯€¯œ¯¸¯Ì¯à¯ô¯°°0°D°X°l°€°”°¨°¼°Ð°ä°ø°± ±4±P±l±€±”±°±Ä±Ø±ì±²²(²<²P²d²€²œ²°²Ì²è²³³,³H³\³x³”³¨³¼³Ø³ì³´´(´<´P´d´x´”´¨´¼´Ø´ì´µµ0µDµXµlµ€µ”µ¨µ¼µÐµüµ¶iÿÿÿÿ8i"ÿÿÿÿni ÿÿÿÿ¨i ÿÿÿÿâiÿÿÿÿj ÿÿÿÿ?j5ÿÿÿÿ{j%ÿÿÿÿ§j)ÿÿÿÿ×j(ÿÿÿÿk/ÿÿÿÿ<kÿÿÿÿXk'ÿÿÿÿ†kÿÿÿÿ¾k-ÿÿÿÿìkÿÿÿÿ	l7ÿÿÿÿBlÿÿÿÿml ÿÿÿÿ•l%ÿÿÿÿÒlÿÿÿÿm*ÿÿÿÿ1m.ÿÿÿÿam)1ÿÿÿÿ»m%ÿÿÿÿám9ÿÿÿÿn
+2ÿÿÿÿWn"ÿÿÿÿ‹n3ÿÿÿÿ¿nÿÿÿÿæn9ÿÿÿÿ6o%ÿÿÿÿio
+Hÿÿÿÿ½o
+/ÿÿÿÿp)ÿÿÿÿUp
+6ÿÿÿÿ•p
+>ÿÿÿÿÝp
+0ÿÿÿÿq
+Fÿÿÿÿgq
+ÿÿÿÿ©q
++ÿÿÿÿÞq
+ÿÿÿÿr
+"ÿÿÿÿ2r@)ÿÿÿÿ¡r
+/ÿÿÿÿÚr
+ ÿÿÿÿs-ÿÿÿÿKs6ÿÿÿÿ—s6ÿÿÿÿâs
+7ÿÿÿÿ#t
+?ÿÿÿÿlt
+ÿÿÿÿ‘t4ÿÿÿÿÞt+ÿÿÿÿu-ÿÿÿÿPu3ÿÿÿÿ„u0ÿÿÿÿËu 0ÿÿÿÿKv
+-ÿÿÿÿ‚v(ÿÿÿÿ¾v
+-ÿÿÿÿõvÿÿÿÿ'w6ÿÿÿÿdw>ÿÿÿÿ©w#ÿÿÿÿÔwÿÿÿÿxÿÿÿÿLx
+2ÿÿÿÿˆx
+.ÿÿÿÿÀxFÿÿÿÿy
+2ÿÿÿÿCy
+2ÿÿÿÿy
+2ÿÿÿÿ»y
+2ÿÿÿÿ÷y
+2ÿÿÿÿ3z
+2ÿÿÿÿozFÿÿÿÿ¶z
+9ÿÿÿÿùz
+7ÿÿÿÿ:{
+9ÿÿÿÿ}{FÿÿÿÿÄ{Fÿÿÿÿ|	2ÿÿÿÿF|+ÿÿÿÿx|.ÿÿÿÿ­|+ÿÿÿÿß|-ÿÿÿÿ}0ÿÿÿÿb}"ÿÿÿÿ¡}!ÿÿÿÿÔ}
+*ÿÿÿÿ
+~
+AÿÿÿÿU~
+dÿÿÿÿÃ~
+$ÿÿÿÿñ~1ÿÿÿÿ-1ÿÿÿÿ_
+ÿÿÿÿ|5ÿÿÿÿÊ&ÿÿÿÿþ=ÿÿÿÿN€&ÿÿÿÿ¢€+ÿÿÿÿá€ÿÿÿÿ�]ÿÿÿÿ‚�!5ÿÿÿÿÙ�
+ÿÿÿÿ‚Kÿÿÿÿ`‚<"ÿÿÿÿ¾‚
+ÿÿÿÿè‚$ÿÿÿÿ!ƒÿÿÿÿiƒ;ÿÿÿÿÑƒ?ÿÿÿÿ/„ÿÿÿÿX„2ÿÿÿÿ’„ÿÿÿÿÃ„ÿÿÿÿõ„=ÿÿÿÿD…Iÿÿÿÿ§…(ÿÿÿÿå…IÿÿÿÿH†!ÿÿÿÿ~†!ÿÿÿÿ®†ÿÿÿÿß†+ÿÿÿÿ‡=ÿÿÿÿJ‡+ ÿÿÿÿ—‡5ÿÿÿÿÍ‡@ÿÿÿÿˆ
+%ÿÿÿÿAˆ
+%ÿÿÿÿpˆ7ÿÿÿÿ¨ˆ-ÿÿÿÿÖˆÿÿÿÿóˆ<ÿÿÿÿ>‰-ÿÿÿÿ{‰(�ÿÿÿÿ0Š
+.ÿÿÿÿhŠ
ÿÿÿÿwŠ
+"	ÿÿÿÿÊŠB#$ÿÿÿÿS‹#&ÿÿÿÿ�‹ÿÿÿÿÁ‹3ÿÿÿÿŒ#ÿÿÿÿHŒ!ÿÿÿÿ†ŒÿÿÿÿÀŒ*ÿÿÿÿñŒ:ÿÿÿÿ2�9ÿÿÿÿr�9ÿÿÿÿ²�2ÿÿÿÿë�Jÿÿÿÿ<Ž.ÿÿÿÿqŽ5ÿÿÿÿ­ŽÿÿÿÿçŽ,ÿÿÿÿ�2ÿÿÿÿG�@ÿÿÿÿ‰�'ÿÿÿÿÊ�#
+ÿÿÿÿ÷�(ÿÿÿÿ9�#.ÿÿÿÿŠ�6ÿÿÿÿÁ�Gÿÿÿÿ
+‘B.ÿÿÿÿz‘8ÿÿÿÿ³‘Kÿÿÿÿÿ‘
+9ÿÿÿÿB’$ÿÿÿÿ‚’CÿÿÿÿÆ’ÿÿÿÿô’CÿÿÿÿU“-ÿÿÿÿ’“
+[ÿÿÿÿù“
+@ÿÿÿÿc”8ÿÿÿÿ¸”
+@ÿÿÿÿ•
+Oÿÿÿÿ[•
+8ÿÿÿÿ�•
+Uÿÿÿÿü•
+(ÿÿÿÿM–
+/ÿÿÿÿ†–
+"ÿÿÿÿ²–
+&ÿÿÿÿâ–P:ÿÿÿÿr—
+8ÿÿÿÿ´—
++ÿÿÿÿé—@ÿÿÿÿE˜Cÿÿÿÿ¢˜Cÿÿÿÿ™
+GÿÿÿÿS™
+Tÿÿÿÿ±™
+%ÿÿÿÿà™;#ÿÿÿÿ>šDÿÿÿÿ�šEÿÿÿÿáš=ÿÿÿÿ›7#ÿÿÿÿy›!=ÿÿÿÿ
œ
+2ÿÿÿÿIœ1ÿÿÿÿ�œ
+4ÿÿÿÿÍœÿÿÿÿ�?ÿÿÿÿM�KÿÿÿÿŸ�$ÿÿÿÿË�$ÿÿÿÿž$ÿÿÿÿ_ž
+Kÿÿÿÿ´ž
+3ÿÿÿÿñžLÿÿÿÿ>Ÿ
+:ÿÿÿÿ‚Ÿ
+:ÿÿÿÿÆŸ
+:ÿÿÿÿ
+ 
+:ÿÿÿÿN 
+:ÿÿÿÿ’ 
+:ÿÿÿÿÖ Lÿÿÿÿ#¡
+Aÿÿÿÿn¡
+?ÿÿÿÿ·¡
+Aÿÿÿÿ¢LÿÿÿÿO¢Lÿÿÿÿœ¢	;ÿÿÿÿà¢4ÿÿÿÿ£7ÿÿÿÿY£:ÿÿÿÿš£<ÿÿÿÿÞ£%AÿÿÿÿE¤%1ÿÿÿÿ›¤&ÿÿÿÿÕ¤
+=ÿÿÿÿ¥
+Rÿÿÿÿz¥
+zÿÿÿÿþ¥
+0ÿÿÿÿ8¦9ÿÿÿÿ|¦EÿÿÿÿÂ¦
+ÿÿÿÿå¦ NÿÿÿÿS§(ÿÿÿÿ‰§Kÿÿÿÿï§1+ÿÿÿÿ[¨A
	ÿÿÿÿ²¨!ÿÿÿÿé¨|ÿÿÿÿu©":ÿÿÿÿÒ©
+'ÿÿÿÿªXÿÿÿÿsªI6ÿÿÿÿòª
+ÿÿÿÿ«3ÿÿÿÿl«0ÿÿÿÿÒ«(KÿÿÿÿY¬$JÿÿÿÿÇ¬0ÿÿÿÿ­IÿÿÿÿZ­"ÿÿÿÿ•­!ÿÿÿÿÒ­VÿÿÿÿB®!lÿÿÿÿÏ®/ÿÿÿÿ¯.nÿÿÿÿ¸¯8ÿÿÿÿ°3ÿÿÿÿM° ÿÿÿÿ„°;ÿÿÿÿÁ°Mÿÿÿÿ±Dÿÿÿÿt±=ÿÿÿÿ²±Nÿÿÿÿ²
+9ÿÿÿÿH²
+/ÿÿÿÿ�²AÿÿÿÿÃ²5ÿÿÿÿù²ÿÿÿÿ³Pÿÿÿÿ…³*9ÿÿÿÿè³+ÂÿÿÿÿÕ´
+5ÿÿÿÿµ
ÿÿÿÿ#µ
+3ÿÿÿÿ‰µC''ÿÿÿÿ¶))ÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
+	Invalid Export Address Table rva (0x%lx) or entry count (0x%lx)
+	Invalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)
+	Invalid Ordinal Table rva (0x%lx) or entry count (0x%lx)
+	Name Pointer Table 			Ordinal Table 				[%4ld] <corrupt offset: %lx>
+	[Name Pointer/Ordinal] Table	%08lx
+	non-TLS: %pA	reloc %4d offset %4x [%4lx] %s	vma:  Hint/Ord Member-Name Bound-To
 
-	DLL Name: %s
+
+	DLL Name: %.*s
 
 
 PE File Base Relocations (interpreted .reloc section contents)
@@ -48,35 +184,56 @@ PE File Base Relocations (interpreted .r
       enum; End+1 symbol: %ld
       struct; End+1 symbol: %ld
       union; End+1 symbol: %ld
+ version array off: %u
+
 Characteristics 0x%x
 
+Dump of %s
+
 Dynamic Section:
 
-Export Address Table -- Ordinal Base %ld
+Error: section %s contains the debug data starting address but it is too small
 
-Function descriptor located at the start address: %04lx
+Exec Auxiliary Header
 
-No reldata section! Function descriptor not decoded.
+Export Address Table -- Ordinal Base %ld
 
 Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Program Header:
 
+Stack size for functions.  Annotations: '*' max stack, 't' tail call
+
 The Export Tables (interpreted %s section contents)
 
 
+The Function Table (interpreted %s section contents)
+
 The Function Table (interpreted .pdata section contents)
 
 The Import Tables (interpreted %s section contents)
 
+There is a debug directory in %s at 0x%lx
+
+
+There is a debug directory in %s, but that section has no contents
+
+There is a debug directory, but the section containing it could not be found
+
 There is a first thunk, but the section containing it could not be found
 
 There is an export table in %s at 0x%lx
 
+There is an export table in %s, but contents cannot be read
+
+There is an export table in %s, but it is too small (%d)
+
 There is an export table, but the section containing it could not be found
 
 There is an import table in %s at 0x%lx
 
+There is an import table in %s, but that section has no contents
+
 There is an import table, but the section containing it could not be found
 
 Version References:
@@ -85,246 +242,1230 @@ Version definitions:
 
 Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld
 
+WARNING: Extra data in .rsrc section - it will be ignored by Windows:
+
 [Ordinal/Name Pointer] Table
 
 ppcboot header:
-  consider relinking with --support-old-code enabled  first occurrence: %s: arm call to thumb  first occurrence: %s: thumb call to arm  required from %s:
- <EABI version unrecognised> Glue code sequence Register restore millicode Register save millicode [32bitmode] [FPA float format] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [absolute position] [cpu32] [d-float] [dynamic symbols use segment index] [floats passed in float registers] [floats passed in integer registers] [g-float] [has entry point] [interworking enabled] [interworking flag not initialised] [interworking not supported] [interworking supported] [m68000] [mapping symbols precede others] [mdmx] [memory=bank-model] [memory=flat] [mips16] [mips1] [mips2] [mips32] [mips32r2] [mips3] [mips4] [mips5] [mips64] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [position independent] [relocatable executable] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] vma:			Begin Address    End Address      Unwind Info
+        pc: 0x%08x
+    *unhandled* cmd %u
+    address: 0x%08x
+    address: 0x%08x, size: %u
+    flags: %u, address: 0x%08x, pd-address: 0x%08x
+    global name: %.*s
+    len: %u bits
+    linkage index: %u, replacement insn: 0x%08x
+    name: %.*s
+    pc: 0x%08x
+    pc: 0x%08x line: %5u
+    psect idx 1: %u, offset 1: 0x%08x %08x
+    psect idx 2: %u, offset 2: 0x%08x %08x
+    psect idx 3: %u, offset 3: 0x%08x %08x
+    psect: %u, offset: 0x%08x %08x
+    routine name: %.*s
+   %02u    (type: %3u, size: %3u):    *unhandled* cmd %u
+   Erroneous length
+   Error: The compile date is truncated
+   Error: The length is less than the length of an EEOM record
+   Error: The length is less than the length of an EMH record
+   Error: The module name is missing
+   Error: The module name is too long
+   Error: The module version is missing
+   Error: The module version is too long
+   Error: The record length is less than the size of an EMH_MHD record
+   alignment  : 2**%u
+   alloc (len)   : %u (0x%08x)
+   alloc (len): %u (0x%08x)
+   ascii ident   : %.*s
+   binary ident  : 0x%08x
+   bitmap: 0x%08x (count: %u):
+   code address: 0x%08x
+   compile date   : %.17s
+   compiler   : %.*s
+   completion code: %u
+   copyright: %.*s
+   cpusubtype: %#lx%s
+   cputype:    %#lx (%s)
+   declfile: len: %u, flags: %u, fileid: %u
+   deflines %u
+   entity name   : %.*s
+   entry point: 0x%08x
+   error severity: %x
+   file: %.*s
+   filename   : %.*s
+   filetype:   %#lx
+   flags         : 0x%08x   flags      : 0x%04x   flags:      %#lx
+   flags: %d, language: %u, major: %u, minor: %u
+   flags: 0x%04x   formfeed
+   id match      : %x
+   image offset  : 0x%08x
+   language name: %.*s
+   linkage index: %u, global: %.*s
+   linkage index: %u, procedure name: %.*s
+   linkage index: %u, procedure: %.*s
+   linkage index: %u, psect: %u, offset: 0x%08x %08x
+   magic:      %#lx
+   max record size: %u
+   module name    : %.*s
+   module name: %.*s
+   module version : %.*s
+   name          : %.*s
+   name        : %.*s
+   name       : %.*s
+   ncmds:      %#lx
+   number of cond linkage pairs: %u
+   object name   : %.*s
+   offset: 0x%08x, val: 0x%08x
+   proc descr : 0x%08x
+   psect index : %u
+   psect index for entry point : %u
+   psect index: %u
+   psect offset: %u
+   psect offset: 0x%08x
+   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u
+   setfile %u
+   setlnum %u
+   setrec %u
+   signature: %.*s
+   sizeocmds:  %#lx
+   structure level: %u
+   symbol vector offset: 0x%08x
+   symvec offset : 0x%08x
+   title: %.*s
+   transfer addr flags: 0x%02x
+   transfer addr psect: %u
+   transfer address   : 0x%08x
+   vector      : 0x%08x
+   version mask: 0x%08x
+   version:    %x
+  %s (len=%u):
+  %u: size: %u, flags: 0x%02x, name: %.*s
+  EEOM (len=%u):
+  EGSD (len=%u):
+  EGSD entry %2u (type: %u, len: %u):   EMH %u (len=%u):   base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x   base_va : 0x%08x
+  bitcount: %u, base addr: 0x%08x
+  calls:
+  chgprtoff : %5u
+  codeadroff: %5u, lpfixoff  : %5u
+  fixuplnk: 0x%08x %08x
+  flags: 0x%08x
+  iaflink : 0x%08x %08x
+  image %u (%u entries)
+  image %u (%u entries), offsets:
+  lppsbfixoff: %5u
+  psect start: 0x%08x, length: %u
+  qdotadroff: %5u, ldotadroff: %5u
+  qrelfixoff: %5u, lrelfixoff: %5u
+  required from %s:
+  shlextra  : %5u, permctx   : %5u
+  shlstoff  : %5u, shrimgcnt : %5u
+  size : %u
+  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> <Unrecognised flag bits set> BPAGE: %u COM COMM Change Protection (%u entries):
+ Code Address Reference Fixups:
+ DEF EXE FPU support required:  First address : 0x%08x 0x%08x
+ Fourth address: 0x%08x 0x%08x
+ GBL LIB Linkage Pairs Reference Fixups:
+ MACH-O header:
+ NOMOD NORM OVR PIC QVAL RD REL Resources start at offset: %#03x
+ SHR Second address: 0x%08x 0x%08x
+ Shareable images:
+ Shared image  : 0x%08x 0x%08x
+ String table starts at offset: %#03x
+ Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d
+ Third address : 0x%08x 0x%08x
+ UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [FDPIC ABI supplement] [FPA float format] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [g-float] [hard-float ABI] [interworking enabled] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] alignment of 8-byte entities:  debug module table : vbn: %u, size: %u
+ debug symbol table : vbn: %u, size: %u (0x%x)
+ failed to convert GOTPCREL relocation against '%s'; relink with --no-relax
+ fixup info rva:  flags: 0x%04x global symbol table: vbn: %u, records: %u
+ ident: 0x%08x, name: %.*s
+ ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u
+ image build ident: %.*s
+ image ident      : %.*s
+ image name       : %.*s
+ image type: %u (%s) img I/O count: %u, nbr channels: %u, req pri: %08x%08x
+ link time        : %s
+ linker flags: %08x: linker ident     : %.*s
+ long-word .address reference fixups:
+ long-word relocation fixups:
+ majorid: %u, minorid: %u
+ module offset: 0x%08x, size: 0x%08x, (%u psects)
+ offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u
+ quad-word .address reference fixups:
+ quad-word relocation fixups:
+ section: base: 0x%08x%08x size: 0x%08x
+ size of doubles:  type: %3u, len: %3u (at 0x%08x):  unhandled EOBJ record type %u
+ vbn: %u, pfc: %u, matchctl: %u type: %u ( vma:			Begin Address    End Address      Unwind Info
  vma:		Begin    End      EH       EH       PrologEnd  Exception
      		Address  Address  Handler  Data     Address    Mask
+ vma:		Begin    Prolog   Function Flags    Exception EH
+     		Address  Length   Length   32b exc  Handler   Data
  vma:            Hint    Time      Forward  DLL       First
                  Table   Stamp     Chain    Name      Thunk
-#<Invalid error code>%T: discarded in section `%s' from %s
-%s (%s): Section flag %s (0x%x) ignored%s(%s): relocation %d has invalid symbol index %ld%s(%s): warning: interworking not enabled.%s(%s+0x%lx): %s reloc against `%s': error %d%s(%s+0x%lx): %s reloc against local symbol%s(%s+0x%lx): %s relocation against SEC_MERGE section%s(%s+0x%lx): Stabs entry has invalid string index.%s(%s+0x%lx): automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc%s(%s+0x%lx): cannot handle %s for %s%s(%s+0x%lx): cannot reach %s, recompile with -ffunction-sections%s(%s+0x%lx): fixing %s%s(%s+0x%lx): invalid instruction for TLS relocation %s%s(%s+0x%lx): non-zero addend on %s reloc against `%s'%s(%s+0x%lx): reloc against `%s': error %d%s(%s+0x%lx): sibling call optimization to `%s' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `%s' extern%s(%s+0x%lx): unresolvable %s relocation against symbol `%s'%s(%s+0x%lx): unresolvable relocation against symbol `%s'%s, section %s:
-  relocation %s should not be used in a shared object; recompile with -fPIC%s: !samegp reloc against symbol without .prologue: %s%s: %s symbol `%s' in %s is referenced by DSO%s: %s symbol `%s' isn't defined%s: %s' accessed both as normal and thread local symbol%s: %s+0x%lx: jump to stub routine which is not jal%s: %s: invalid needed version %d%s: %s: invalid version %u (max %d)%s: %s: reloc overflow: 0x%lx > 0xffff%s: .got subsegment exceeds 64K (size %d)%s: .opd is not a regular array of opd entries%s: .preinit_array section is not allowed in DSO%s: 0x%lx: fatal: reloc overflow while relaxing%s: 0x%lx: fatal: unaligned branch target for relax-support relocation%s: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x%s: 0x%lx: warning: bad R_SH_USES load offset%s: 0x%lx: warning: bad R_SH_USES offset%s: 0x%lx: warning: bad count%s: 0x%lx: warning: could not find expected COUNT reloc%s: 0x%lx: warning: could not find expected reloc%s: 0x%lx: warning: symbol in unexpected section%s: @gprel relocation against dynamic symbol %s%s: @internal branch to dynamic symbol %s%s: @pcrel relocation against dynamic symbol %s%s: ABI is incompatible with that of the selected emulation%s: ABI mismatch: linking %s module with previous %s modules%s: Architecture mismatch with previous modules%s: Bad relocation record imported: %d%s: Bad symbol definition: `Main' set to %s rather than the start address %s
-%s: CALL16 reloc at 0x%lx not against global symbol%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file
-%s: GAS error: unexpected PTB insn with R_SH_PT_16%s: Instruction set mismatch with previous modules%s: Internal inconsistency error for value for
- linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx
-%s: Internal inconsistency; no relocation section %s%s: Invalid relocation type exported: %d%s: Invalid relocation type imported: %d%s: LOCAL directive: Register $%ld is not a local register.  First global register is $%ld.%s: Malformed reloc detected for section %s%s: No PLT nor GOT for relocation %s against symbol `%s' from %s section%s: No core to allocate a symbol %d bytes long
-%s: No core to allocate section name %s
-%s: Not enough room for program headers (allocated %u, need %u)%s: Not enough room for program headers, try linking with -N%s: Only registers %%g[2367] can be declared using STT_REGISTER%s: Recognised but unhandled machine type (0x%x) in Import Library Format archive%s: Relocation %s (%d) is not currently supported.
-%s: Relocations in generic ELF (EM: %d)%s: TLS local exec code cannot be linked into shared objects%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry%s: The target (%s) of an %s relocation is in the wrong section (%s)%s: Unhandled import type; %x%s: Unknown relocation type %d
-%s: Unknown section type in a.out.adobe file: %x
-%s: Unrecognised import name type; %x%s: Unrecognised import type; %x%s: Unrecognised machine type (0x%x) in Import Library Format archive%s: Unrecognized storage class %d for %s symbol `%s'%s: Warning: Arm BLX instruction targets Arm function '%s'.%s: Warning: Thumb BLX instruction targets thumb function '%s'.%s: XCOFF shared object when not producing XCOFF output%s: XMC_TC0 symbol `%s' is class %d scnlen %d%s: __gp does not cover short data segment%s: `%s' accessed both as normal and thread local symbol%s: `%s' has line numbers but no enclosing section%s: `%s' in loader reloc but not loader sym%s: `ld -r' not supported with PE MIPS objects
-%s: access beyond end of merged section (%ld + %ld)%s: address 0x%s out of range for Intel Hex file%s: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d%s: bad pair/reflo after refhi
-%s: bad reloc address 0x%lx in section `%s'%s: bad relocation section name `%s'%s: bad section length in ihex_read_section%s: bad string table size %lu%s: bad symbol index: %d%s: base-plus-offset relocation against register symbol: %s in %s%s: base-plus-offset relocation against register symbol: (unknown) in %s%s: can not represent section `%s' in a.out object file format%s: can not represent section `%s' in oasys%s: can not represent section for symbol `%s' in a.out object file format%s: cannot allocate file name for file number %d, %d bytes
-%s: cannot create stub entry %s%s: change in gp: BRSGP %s%s: check_relocs: unhandled reloc type %d%s: class %d symbol `%s' has no aux entries%s: compiled as 32-bit object and %s is 64-bit%s: compiled as 64-bit object and %s is 32-bit%s: compiled for a 64 bit system and target is 32 bit%s: compiled for a big endian system and target is little endian%s: compiled for a little endian system and target is big endian%s: compiled normally and linked with modules compiled with -mrelocatable%s: compiled with %s and linked with modules compiled with %s%s: compiled with %s and linked with modules that use non-pic relocations%s: compiled with -mrelocatable and linked with modules compiled normally%s: could not find output section %s%s: could not find output section %s for input section %s%s: could not write out added .cranges entries%s: could not write out sorted .cranges entries%s: csect `%s' not in enclosing section%s: directive LOCAL valid only with a register or absolute value%s: dtp-relative relocation against dynamic symbol %s%s: duplicate export stub %s%s: dynamic object with no .loader section%s: encountered datalabel symbol in input%s: endianness incompatible with that of the selected emulation%s: error: relocation %s not a multiple of %d%s: error: unaligned relocation type %d at %08x reloc %08x
-%s: gp-relative relocation against dynamic symbol %s%s: illegal relocation type %d at address 0x%lx%s: illegal section name `%s'%s: illegal symbol index in reloc: %d%s: indirect symbol `%s' to `%s' is a loop%s: internal error in ihex_read_section%s: internal error, internal register section %s had contents
-%s: internal error, symbol table changed size from %d to %d words
-%s: invalid SHT_GROUP entry%s: invalid link %lu for reloc section %s (index %u)%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
-%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote
-%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx
-%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo
-%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc
-%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx
-%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d
-%s: invalid mmo file: file name for number %d was not specified before use
-%s: invalid mmo file: file number %d `%s', was already entered as `%s'
-%s: invalid mmo file: initialization value for $255 is not `Main'
-%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx
-%s: invalid mmo file: lop_end not last item in file
-%s: invalid mmo file: unsupported lopcode `%d'
-%s: invalid relocation type %d%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx
-%s: invalid string offset %u >= %lu for section `%s'%s: invalid symbol table: duplicate symbol `%s'
-%s: jump too far away
-%s: line number overflow: 0x%lx > 0xffff%s: linking %s module with previous %s modules%s: linking 32-bit code with 64-bit code%s: linking 64-bit files with 32-bit files%s: linking UltraSPARC specific with HAL specific code%s: linking auto-pic files with non-auto-pic files%s: linking big-endian files with little-endian files%s: linking constant-gp files with non-constant-gp files%s: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%s: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%s: linking files compiled for HCS12 with others compiled for HC12%s: linking little endian files with big endian files%s: linking non-pic code in a position independent executable%s: linking non-pic code in a shared library%s: linking trap-on-NULL-dereference with non-trapping files%s: loader reloc in read-only section %s%s: loader reloc in unrecognized section `%s'%s: misplaced XTY_LD `%s'%s: no group info for section %s%s: no initialized registers; section length 0
-%s: no such symbol%s: no symbol "%s"%s: not fully implemented%s: not implemented%s: not supported%s: object size does not match that of target %s%s: pc-relative relocation against dynamic symbol %s%s: probably compiled without -fPIC?%s: register relocation against non-register symbol: %s in %s%s: register relocation against non-register symbol: (unknown) in %s%s: reloc %s:%d not in csect%s: reloc overflow 1: 0x%lx > 0xffff%s: relocatable link from %s to %s not supported%s: relocation %s can not be used when making a shared object; recompile with -fPIC%s: relocation %s cannot be used when making a shared object%s: relocation %s in section %s with no GOT created%s: relocation %s is not allowed for global symbol: `%s' from %s section%s: relocation %s is not supported for symbol %s.%s: relocation %s is not yet supported for symbol %s.%s: relocation %s should not be used when making a shared object; recompile with -fPIC%s: relocation %s with non-zero addend %d against local symbol from %s section%s: relocation %s with non-zero addend %d against symbol `%s' from %s section%s: relocation size mismatch in %s section %s%s: relocs in section `%s', but it has no contents%s: short data segment overflowed (0x%lx >= 0x400000)%s: size field is zero in Import Library Format header%s: speculation fixup to dynamic symbol %s%s: string not null terminated in ILF object file.%s: string too long (%d chars, max 65535)%s: symbol `%s' has unrecognized csect type %d%s: symbol `%s' has unrecognized smclas %d%s: symbol `%s' required but not present%s: the target (%s) of a %s relocation is in the wrong output section (%s)%s: too many initialized registers; section length %ld
-%s: tp-relative relocation against dynamic symbol %s%s: unable to find ARM glue '%s' for `%s'%s: unable to find THUMB glue '%s' for `%s'%s: undefined sym `%s' in .opd section%s: undefined version: %s%s: undefined versioned symbol name %s%s: unexpected ATN type %d in external part%s: unexpected reloc type %u in .opd section%s: unexpected type after ATN%s: unhandled dynamic relocation against %s%s: unimplemented %s
-%s: unimplemented ATI record %u for symbol %u%s: unknown relocation type %d%s: unknown relocation type %d for symbol %s%s: unrecognized symbol `%s' flags 0x%x%s: unresolvable relocation %s against symbol `%s' from %s section%s: unresolvable relocation against symbol `%s' from %s section%s: unsupported relocation type %s%s: unsupported relocation type 0x%02x%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
-%s: uses _-prefixed symbols, but writing file with non-prefixed symbols%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)%s: uses non-prefixed symbols, but writing file with _-prefixed symbols%s: version count (%ld) does not match symbol count (%ld)%s: warning: %s relocation against symbol `%s' from %s section%s: warning: %s relocation to 0x%x from %s section%s: warning: %s: line number overflow: 0x%lx > 0xffff%s: warning: Empty loadable segment detected, is this intentional ?
-%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld%s: warning: PLT addend of %d to `%s' from %s section ignored%s: warning: allocated section `%s' not in segment%s: warning: duplicate line number information for `%s'%s: warning: illegal symbol index %ld in line numbers%s: warning: illegal symbol index %ld in relocs%s: warning: linking PIC files with non-PIC files%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
-%s: warning: unexpected redefinition of indirect versioned symbol `%s'%s: warning: unresolvable relocation %d against symbol `%s' from %s section%s: warning: unresolvable relocation against symbol `%s' from %s section%s:%d: Unexpected character `%s' in S-record file
-%s:%d: unexpected character `%s' in Intel Hex file
-%s:%u: bad checksum in Intel Hex file (expected %u, found %u)%s:%u: bad extended address record length in Intel Hex file%s:%u: bad extended linear address record length in Intel Hex file%s:%u: bad extended linear start address length in Intel Hex file%s:%u: bad extended start address length in Intel Hex file%s:%u: unrecognized ihex type %u in Intel Hex file
-*unknown*.glink and .plt too far apart.got section not immediately after .plt section32-bit double, 32bits gp relative relocation occurs for an external symbol64-bit double, : m32r instructions: m32rx instructions<Unrecognised flag bits set><unknown>@pltoff reloc against local symbolArchive has no index; run ranlib to add oneArchive object file in wrong formatAttempt to do relocatable link with %s input and %s outputBFD %s assertion fail %s:%dBFD %s internal error, aborting at %s line %d
-BFD %s internal error, aborting at %s line %d in %s
-Bad valueBase Relocation Directory [.reloc]Bound Import DirectoryCould not find relocation section for %sDebug DirectoryDelay Import DirectoryDeprecated %s called
-Deprecated %s called at %s line %d in %s
-Description DirectoryDwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu).Dwarf Error: Bad abbrev number: %u.Dwarf Error: Can't find .debug_abbrev section.Dwarf Error: Can't find .debug_line section.Dwarf Error: Can't find .debug_str section.Dwarf Error: Could not find abbrev number %u.Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu).Dwarf Error: Invalid or unhandled FORM value: %u.Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu).Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'.Dwarf Error: found dwarf version '%u', this reader only handles version 2 information.Dwarf Error: mangled line number section (bad file number).Dwarf Error: mangled line number section.ERROR: %s is compiled as absolute position code, whereas target %s is position independentERROR: %s is compiled as position independent code, whereas target %s is absolute positionERROR: %s is compiled for APCS-%d, whereas %s is compiled for APCS-%dERROR: %s is compiled for APCS-%d, whereas target %s uses APCS-%dERROR: %s is compiled for EABI version %d, whereas %s is compiled for version %dERROR: %s is compiled for the EP9312, whereas %s is compiled for XScaleERROR: %s passes floats in float registers, whereas %s passes them in integer registersERROR: %s passes floats in integer registers, whereas %s passes them in float registersERROR: %s uses FPA instructions, whereas %s does notERROR: %s uses Maverick instructions, whereas %s does notERROR: %s uses VFP instructions, whereas %s does notERROR: %s uses hardware FP, whereas %s uses software FPERROR: %s uses software FP, whereas %s uses hardware FPEntry offset        = 0x%.8lx (%ld)
-Error: First section in segment (%s) starts at 0x%x whereas the segment starts at 0x%xException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
-Export RVAFAILED to find previous HI16 reloc
-File format is ambiguousFile format not recognizedFile in wrong formatFile too bigFile truncatedFlag field          = 0x%.2x
-Forwarder RVAGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsImport Address Table DirectoryImport Directory [parts of .idata]Internal inconsistency: remaining %u != max %u.
-  Please report this bug.Invalid bfd targetInvalid operationLength              = 0x%.8lx (%ld)
-Linking mips16 objects into %s format is not supportedLoad Configuration DirectoryMajor/Minor 			%d/%d
-Malformed archiveMemory exhaustedMissing IHCONSTMissing IHIHALFName 				No Mem !No errorNo more archived filesNo symbolsNonrepresentable section on outputNot enough memory to sort relocationsNumber in:
-Object module NOT error-free !
+#<invalid error code>%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC
+%%X%%P: unresolvable %s relocation against symbol `%s'
+%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
+%03x %*.s Entry: %F%P: %pB(%pA): error: need linked-to section for --gc-sections
+%F%P: %pB(%s): error opening thin archive member: %E
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s'
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB
+%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate compact relative reloc section
+%F%P: %pB: failed to allocate memory for section `%pA'
+%F%P: %pB: failed to allocate relative reloc record
+%F%P: %pB: failed to finish relative relocations
+%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed
+%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)
+%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.
+%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.
+%F%P: already_linked_table: %E
+%F%P: auto overlay error: %E
+%F%P: can not build overlay stubs: %E
+%F%P: corrupt input: %pB
+%F%P: discarded output section: `%pA'
+%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie
+%F%P: failed to create GNU property section
+%F%P: failed to create GOT PLT .eh_frame section
+%F%P: failed to create GOT PLT section
+%F%P: failed to create GOT sections
+%F%P: failed to create IBT-enabled PLT section
+%F%P: failed to create PLT .eh_frame section
+%F%P: failed to create PLT .sframe section
+%F%P: failed to create VxWorks dynamic sections
+%F%P: failed to create ifunc sections
+%F%P: failed to create second PLT .sframe section
+%F%P: failed to create the second PLT .eh_frame section
+%F%P: failed to size relative relocations
+%F%pA: failed to align section
+%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'
+%F%pB: PC-relative offset overflow in PLT entry for `%s'
+%F%pB: branch displacement overflow in PLT entry for `%s'
+%H __tls_get_addr lost arg, TLS optimization disabled
+%H arg lost __tls_get_addr, TLS optimization disabled
+%H: %s against %pT is not supported
+%H: %s against `%pT': error %d
+%H: %s for indirect function `%pT' unsupported
+%H: %s out of range
+%H: %s references dynamic symbol with nonzero addend
+%H: %s references optimized away TOC entry
+%H: %s reloc against `%s': error %d
+%H: %s reloc unsupported here
+%H: %s reloc unsupported in shared libraries and PIEs
+%H: %s used with TLS symbol `%pT'
+%H: %s used with non-TLS symbol `%pT'
+%H: R_FRV_GETTLSOFF not applied to a call instruction
+%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction
+%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction
+%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction
+%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction
+%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction
+%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction
+%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction
+%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction
+%H: R_FRV_TLSMOFFHI not applied to a sethi instruction
+%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction
+%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)
+%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)
+%H: cannot emit dynamic relocations in read-only section
+%H: cannot emit fixups in read-only section
+%H: error: %s against `%s' not a multiple of %u
+%H: error: %s not a multiple of %u
+%H: fixup branch overflow
+%H: got/toc optimization is not supported for %s instruction
+%H: non-zero addend on %s reloc against `%s'
+%H: reloc against `%s' references a different segment
+%H: reloc against `%s': %s
+%H: relocation %s for indirect function %s unsupported
+%H: relocation %s returns an unrecognized value %x
+%H: relocation references symbol not defined in the module
+%H: relocation to `%s+%v' may have caused the error above
+%H: relocation type %u is not supported
+%H: unresolvable %s against `%pT'
+%H: unresolvable %s relocation against symbol `%s'
+%H: warning: %s unexpected insn %#x.
+%H: warning: relocation to "%s" references a different segment
+%P%F: --relax and -r may not be used together
+%P%X: can not read symbols: %E
+%P%X: read-only segment has dynamic relocations
+%P: %H: error: %s with unexpected instruction %x
+%P: %pB: %s is not supported for `%pT'
+%P: %pB: note: the message above does not take linker garbage collection into account
+%P: %pB: warning: missing %s
+%P: %pB: warning: relocation against `%s' in read-only section `%pA'
+%P: %pB: warning: relocation in read-only section `%pA'
+%P: cannot find opd entry toc for `%pT'
+%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc
+%P: copy reloc against protected `%pT' is dangerous
+%P: linkage table error against `%pT'
+%P: multiple entry points: in modules %pB and %pB
+%P: relocatable link is not supported
+%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s
+%P: warning: creating DT_TEXTREL in a PDE
+%P: warning: creating DT_TEXTREL in a PIE
+%P: warning: creating DT_TEXTREL in a shared object
+%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime
+%X%H: %s against `%s': error: relocation applies outside section
+%X%H: %s against `%s': error: relocation target address is odd
+%X%H: %s against `%s': internal error: unexpected relocation result %d
+%X%H: @local call to ifunc %s
+%X%H: cannot convert branch between ISA modes to JALX: relocation out of range
+%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC
+%X%H: relocation to "%s" references a different segment
+%X%H: unsupported JALX to the same ISA mode
+%X%H: unsupported branch between ISA modes
+%X%H: unsupported bss-plt -fPIC ifunc %s
+%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled
+%X%P: %H: %s relocation unsupported for bss-plt
+%X%P: %pB(%pA): error: relocation for offset %V has no value
+%X%P: %pB(%pA): relocation "%pR" goes out of range
+%X%P: %pB(%pA): relocation "%pR" is not supported
+%X%P: %pB(%pA): relocation "%pR" returns an unrecognized value %x
+%X%P: %pB(%pA): relocation is not supported
+%X%P: %pB(%pA): relocation out of range
+%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation
+%X%P: %pB: error: missing %s
+%X%P: attempted static link of dynamic object `%pB'
+%X%P: internal error: out of range error
+%X%P: internal error: unknown error
+%X%P: internal error: unsupported relocation error
+%X%P: overlay section %pA does not start on a cache line
+%X%P: overlay section %pA is larger than a cache line
+%X%P: overlay section %pA is not in cache area
+%X%P: overlay sections %pA and %pA do not start at the same address
+%X%P: stack/lrlive analysis error: %E
+%X%P: text relocations and GNU indirect functions will result in a segfault at runtime
+%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB
+%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
+%pA:0x%v not found in function table
+%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): error: internal relocs missing for secondary reloc section%pB(%pA): error: reloc table entry %zu is empty%pB(%pA): error: secondary reloc %zu is of an unknown type%pB(%pA): error: secondary reloc %zu references a deleted symbol%pB(%pA): error: secondary reloc %zu references a missing symbol%pB(%pA): error: secondary reloc section has non-standard sized entries%pB(%pA): error: secondary reloc section has zero sized entries%pB(%pA): error: secondary reloc section is empty!%pB(%pA): error: secondary reloc section processed twice%pB(%pA): info section index cannot be set because the section is not in the output%pB(%pA): info section index is invalid%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): link section cannot be set because the output file does not have a symbol table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): relocation %zu has invalid symbol index %lu%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
+%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s%pB, section %pA:
+  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s flag mismatch with previous modules%pB: %s local symbol at index %lu (>= sh_info of %lu)%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
+  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: Adjusting branch at 0x%V towards "%s" in section %s
+%pB: BE8 images only valid in big-endian mode%pB: C_STAT isn't supported by XCOFF64%pB: Cannot create stub entry '%s'%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Number of symbols in input file has increased from %lu to %u
+%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS relocation %s against undefined symbol `%s'%pB: TLS sections are not adjacent:%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead.%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: adjusting invalid FileAlignment%pB: adjusting invalid SectionAlignment%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol index: %d%pB: base-plus-offset relocation against register symbol: %s in %pA%pB: base-plus-offset relocation against register symbol: (unknown) in %pA%pB: can not represent section `%pA' in a.out object file format%pB: can not represent section for symbol `%s' in a.out object file format%pB: can't link %s modules with %s modules%pB: can't link RVE with other target%pB: can't link different ABI object.%pB: cannot allocate file name for file number %d, %d bytes
+%pB: cannot allocate memory for local GOT entries%pB: cannot create stub entry %s%pB: cannot export internal symbol `%s`.%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: conditional branch to undefined symbol `%s' not allowed%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
+%pB: csect `%s' not in enclosing section%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object%pB: directive LOCAL valid only with a register or absolute value%pB: dtp-relative relocation against dynamic symbol %s%pB: duplicate export stub %s%pB: duplicate section `%pA' has different contents
+%pB: duplicate section `%pA' has different size
+%pB: dynamic object with no .loader section%pB: dynamic relocation against `%pT' in read-only section `%pA'
+%pB: dynamic relocation against a local symbol in read-only section `%pA'
+%pB: dynamic relocation in read-only section `%pA'
+%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: attribute section length too small: %ld%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: expected symbol index in range 0..%lu but found local symbol with index %lu%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
+%pB: illegal section name `%pA'%pB: illegal symbol index %ld in relocs%pB: incompatible machine type; output is 0x%x; input is 0x%x%pB: incorrect size for symbol `%s'%pB: indirect symbol `%s' to `%s' is a loop%pB: instruction set mismatch with previous modules%pB: internal error in ihex_read_section%pB: internal error, internal register section %pA had contents
+%pB: internal error, symbol table changed size from %d to %d words
+%pB: internal symbol `%s' in %pB is referenced by DSO%pB: internal symbol `%s' isn't defined%pB: invalid NumberOfRvaAndSizes%pB: invalid entry in SHT_GROUP section [%u]%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions%pB: invalid link %u for reloc section %s (index %u)%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
+%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote
+%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx
+%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo
+%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc
+%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx
+%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d
+%pB: invalid mmo file: file name for number %d was not specified before use
+%pB: invalid mmo file: file number %d `%s', was already entered as `%s'
+%pB: invalid mmo file: initialization value for $255 is not `Main'
+%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx
+%pB: invalid mmo file: lop_end not last item in file
+%pB: invalid mmo file: unsupported lopcode `%d'
+%pB: invalid sh_link field (%d) in section number %d%pB: invalid special symbol `%s'; it must be a global or weak function symbol%pB: invalid standard symbol `%s'; it must be a global or weak function symbol%pB: invalid symbol table: duplicate symbol `%s'
+%pB: invalid version offset %lx (max %lx)%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
+%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-canonical reference to canonical protected function `%s' in %pB%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: not enough version information%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: overflow reloc count too small%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc %#x unsupported%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation %s overflow 0x%lx%pB: relocation %s right shift %d error 0x%lx%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section %s is compressed with zstd, but BFD is not built with zstd support%pB: section '%pA': corrupt VTENTRY entry%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: symbol indicates overlay (not supported)%pB: symbol name exceeds given max length of %d%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to compress section %s%pB: unable to create fake empty section%pB: unable to decompress section %s%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unhandled sparc machine value '%lu' detected during write processing%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported AOUT relocation size: %d%pB: unsupported arch %#x%pB: unsupported bfd mach %#lx%pB: unsupported bfd relocation type %#x%pB: unsupported mach %#x%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type %s%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type: %#x%pB: unsupported swap_aux_in for storage class %#x%pB: unsupported swap_aux_out for storage class %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
+%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section.%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: R_RISCV_SUB_ULEB128 with non-zero addend, please rebuild by binutils 2.42 or up%pB: warning: Weak TLS is implementation defined and may not work as expected%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: secondary relocation section '%s' for section %pA found - ignoring%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
+%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: truncated `%s' option%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: warning: win32pstatus %s of size %lu bytes is too small%pB: will not resolve runtime TLS relocation%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u%pB: wrong auxtype %#x for storage class %#x%pB:%.8s: RVA truncated%pB:%.8s: section below image base%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
+%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: attempting to write over the end of the section%pB:%pA: error: attempting to write section into an empty buffer%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%pB[%pA]: no output section for space %pA%pcrel_lo missing matching %pcrel_hi%pcrel_lo overflow with an addend%pcrel_lo section symbol with an addend%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20%s defined on removed toc entry%s divide by zero%s duplicated
+%s duplicated in %s
+%s has both normal and TLS relocs%s in overlay section%s is defined but could not be loaded: %s%s is defined but plugin support is disabled%s is loaded but symbol "%s" is not found: %s%s not defined in linker created %pA%s not implemented%s offset too large for .eh_frame sdata4 encoding%s, iter %u
+  branch         %lu
+  long branch    %lu
+  plt call       %lu
+  global entry   %lu%s: Bad ELF id: `%d'%s: ISA string cannot contain uppercase letters%s: ISA string must begin with rv32 or rv64%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA%s: TLS reference in %pB mismatches non-TLS reference in %pB%s: compiled as 32-bit object and %s is 64-bit%s: compiled as 64-bit object and %s is 32-bit%s: first ISA extension must be `e', `i' or `g'%s: invalid prefixed ISA extension `%s' ends with <number>p%s: no such symbol%s: not implemented%s: not supported%s: object size does not match that of target %s%s: prefixed ISA extension must separate with _%s: undefined version: %s%s: unknown prefixed ISA extension `%s'%s: unknown standard ISA extension or prefix class `%c'(at bit offset %u)
+(descriptor)
+(format %c%c%c%c signature %s age %ld pdb %s)
+(no value)
+(not active)
+(not allocated)
+(reg: %u, disp: %u, indir: %u, kind: (thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)(too many global variables for -fpic: recompile with -fPIC)(trailing value)
+(value spec follows)
+)
+*** check this relocation %s*unhandled*
+*unhandled* dst type %u
+*unknown**unknown*        , Value: %#08lx
+, alias: %u
+, ext fixup offset: %u, no_opt psect off: %u, subtype: %u (%s)
+, symbol vector rva: - %pB is 64-bit, %pB is not-mips32r2 -mfp64 (12 callee-saved).eh_frame_hdr entry overflow.eh_frame_hdr refers to overlapping FDEs.got section not immediately after .plt section.rsrc merge failure: a directory matches a leaf.rsrc merge failure: differing directory versions.rsrc merge failure: dirs with differing characteristics.rsrc merge failure: duplicate leaf.rsrc merge failure: duplicate leaf: %s.rsrc merge failure: duplicate string resource: %d.rsrc merge failure: multiple non-default manifests32-bit double, 32bits gp relative relocation occurs for an external symbol4-byte4-bytes64 bits *unhandled*
+64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC; recompile with -fPIE<corrupt info> %s<corrupt string length: %#x>
+<corrupt string offset: %#lx>
+<corrupt><unknown directory type: %d>
+<unknown mask flags><unknown>@pltoff reloc against local symbolBASE_IMAGE       BFD %s assertion fail %s:%dBFD %s internal error, aborting at %s:%d
+BFD %s internal error, aborting at %s:%d in %s
+Base Relocation Directory [.reloc]Bound Import DirectoryBounds:
+CACHE use: CLICLR Runtime HeaderCLUSTERS_LOCKMGR COUNTERS         CPU              CTL_AUGRB (augment relocation base) %u
+CTL_DFLOC (define location)
+CTL_SETRB (set relocation base)
+CTL_STKDL (stack defined location)
+CTL_STLOC (set location)
+Coolidge (kv3) V1 32 bitsCoolidge (kv3) V1 64 bitsCoolidge (kv3) V2 32 bitsCoolidge (kv3) V2 64 bitsCoolidge (kv4) V1 32 bitsCoolidge (kv4) V1 64 bitsCopyright Header
+Corrupt .rsrc section detected!
+DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: could not find variable specification at offset 0x%lxDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: section %s has no contentsDWARF error: section %s is too bigDWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
+Debug symbol table:
+Delay Import DirectoryDescription DirectoryEIHD: (size: %u, nbr blocks: %u)
+Entry offset        = 0x%.8lx (%ld)
+Error: %pB and %pB has different DSP versionError: %pB and %pB has different FPU ABIError: %pB and %pB has different VDSP versionError: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
+Export RVAFDE encoding in %pB(%pA) prevents .eh_frame_hdr table being createdFDPIC does not yet support %s relocation to become dynamic for executableFILES_VOLUMES    FPU-2.0FPU-3.0Flag field          = 0x%.2x
+Forwarder RVAGALAXY           GNU_MBIND section is supported only by GNU and FreeBSD targetsGNU_RETAIN section is supported only by GNU and FreeBSD targetsGOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
+Hard float (32-bit CPU, 64-bit FPU)
+Hard float (32-bit CPU, Any FPU)
+Hard float (MIPS32r2 64-bit FPU 12 callee-saved)
+Hard float (double precision)
+Hard float (single precision)
+Hard float compat (32-bit CPU, 64-bit FPU)
+Hard or soft float
+IBT and SHSTK propertiesIBT propertyID: %#08lxIDC - Ident Consistency check
+IFUNC symbol %s in dynamic symbol table - IFUNCS are not supportedIMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
+Image activator fixup: (major: %u, minor: %u)
+Image identification: (major: %u, minor: %u)
+Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)
+Image symbol & debug table: (major: %u, minor: %u)
+Import Address Table DirectoryImport Directory [parts of .idata]Internal error: unreachable.LAM_U48 propertyLAM_U57 propertyLOGICAL_NAMES    Language Processor Name
+Length              = 0x%.8lx (%ld)
+Load Configuration DirectoryLocal IFUNC function `%s' in %pB
+MEMORY_MANAGEMENTMIPS16 and microMIPS functions cannot call each otherMISC             MMU use: MULTI_PROCESSING Major/Minor 			%d/%d
+Maximum stack required is 0x%v
+MeP: howto %d has type %dMerging program properties
+Module header
+NETWORKS         NORMALNOTE: This behaviour is deprecated and will be removed in a future version of the linkerName 				NoneNumber in:
+OPR_ADD (add)
+OPR_AND (logical and)
+OPR_ASH (arithmetic shift)
+OPR_COM (complement)
+OPR_DIV (divide)
+OPR_EOR (logical exclusive or)
+OPR_INSV (insert field)
+OPR_IOR (logical inclusive or)
+OPR_MUL (multiply)
+OPR_NEG (negate)
+OPR_NOP (no-operation)
+OPR_REDEF (define a literal)
+OPR_REDEF (redefine symbol to curr location)
+OPR_ROT (rotate)
+OPR_SEL (select)
+OPR_SUB (subtract)
+OPR_USH (unsigned shift)
 Ordinal Base 			%ld
-Output file requires shared library `%s'
-Output file requires shared library `%s.so.%s'
-PASSMECH not fully implementedPTA mismatch: a SHcompact address (bit 0 == 0)PTB mismatch: a SHmedia address (bit 0 == 1)Partition name      = "%s"
+PC-relative load from unaligned addressPIE executablePOSIX            PROCESS_SCHED    PRVFXDPRVPICPSC - Program section definition
+Partition name      = "%s"
 Partition[%d] end    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 Partition[%d] length = 0x%.8lx (%ld)
 Partition[%d] sector = 0x%.8lx (%ld)
 Please report this bug.
-Reading archive file mod timestampReference to the far symbol `%s' using a wrong relocation may result in incorrect executionRegister %%g%d used incompatibly: %s in %s, previously %s in %sRegister section has contents
-ReservedResource Directory [.rsrc]SDA relocation when _SDA_BASE_ not definedSEC_RELOC with no relocs in section %sSection has no contentsSecurity DirectorySize mismatch section %s=%lx, %s=%lxSpecial DirectoryStack overflow (%d) in _bfd_vms_pushStack underflow in _bfd_vms_popSymbol %s not defined for fixups
-Symbol %s replaced by %s
-Symbol `%s' has differing types: %s in %s, previously REGISTER in %sSymbol `%s' has differing types: REGISTER in %s, previously %s in %sSymbol needs debug section which does not existSystem call errorTOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compilingTable Addresses
+Private flags = 0x%lx : RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pBRL78 ABI conflict: cannot link %s file %pB with %s file %pBRL78 merge conflict: cannot link 32-bit and 64-bit objects togetherRL78 reloc divide by zeroRL78 reloc stack overflow/underflowR_AMD64_IMAGEBASE with __ImageBase undefinedR_BFIN_FUNCDESC references dynamic symbol with nonzero addendR_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addendR_FRV_TLSMOFFLO not applied to a setlo or setlos instruction
+Reading archive file mod timestampRemoved property %W to merge %pB (0x%v) and %pB (0x%v)
+Removed property %W to merge %pB (0x%v) and %pB (not found)
+Removed property %W to merge %pB (not found) and %pB (0x%v)
+Removed property %W to merge %pB and %pB
+Removed property %W to merge %pB and %pB (not found)
+ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSHSTK propertySIMD use: SPSC - Shared Image Program section def
+STABLE           STA_CKARG (compare procedure argument)
+STA_GBL (stack global) %.*s
+STA_LI (stack literal)
+STA_LW (stack longword)STA_MOD (stack module)
+STA_PQ (stack psect base + offset)
+STA_QW (stack quadword)STC_BOH_GBL (store cond BOH at global addr)
+STC_BOH_PS (store cond BOH at psect + offset)
+STC_BSR_GBL (store cond BSR at global addr)
+STC_BSR_PS (store cond BSR at psect + offset)
+STC_GBL (store cond global)
+STC_GCA (store cond code address)
+STC_LDA_GBL (store cond LDA at global addr)
+STC_LDA_PS (store cond LDA at psect + offset)
+STC_LP (store cond linkage pair)
+STC_LP_PSB (store cond linkage pair + signature)
+STC_NBH_GBL (store cond or hint at global addr)
+STC_NBH_PS (store cond or hint at psect + offset)
+STC_NOP_GBL (store cond NOP at global addr)
+STC_NOP_PS (store cond NOP at psect + offset)
+STC_PS (store cond psect + offset)
+STO_AB (store absolute branch)
+STO_B (store byte)
+STO_BR_GBL (store branch global) *todo*
+STO_BR_PS (store branch psect + offset) *todo*
+STO_CA (store code address) %.*s
+STO_GBL (store global) %.*s
+STO_GBL_LW (store global longword) %.*s
+STO_IMM (store immediate) %u bytes
+STO_IMMR (store immediate repeat) %u bytes
+STO_LW (store longword)
+STO_OFF (store LP with procedure signature)
+STO_OFF (store offset to psect)
+STO_QW (store quadword)
+STO_RB (store relative branch)
+STO_W (store word)
+SYM - Global symbol definition
+SYM - Global symbol reference
+SYMG - Universal symbol definition
+SYMM - Global symbol definition with version
+SYMV - Vectored symbol definition
+SYSGEN           Security DirectorySoft float
+Source Files Header
+Special DirectoryStack size for call graph root nodes.
+Strides:
+Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pBTLS relocation invalid without dynamic sectionsTOC overflow during stub generation; try -mminimal-toc when compilingTable Addresses
+The addend isn't allowed for R_RISCV_GOT_HI20The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
 Thread Storage Directory [.tls]Time/Date stamp 		%lx
-Unable to find equivalent output section for symbol '%s' from section '%s'Unexpected STO_SH5_ISA32 on local symbol is not handledUnhandled OSF/1 core file section type %d
-Unhandled relocation %sUnknown basic type %dUnrecognized TI COFF target id '0x%x'Unrecognized relocUnrecognized reloc type 0x%xUnsupported .stab relocationVariable `%s' can only be in one of the small, zero, and tiny data regionsVariable `%s' cannot be in both small and tiny data regions simultaneouslyVariable `%s' cannot be in both small and zero data regions simultaneouslyVariable `%s' cannot be in both zero and tiny data regions simultaneouslyVariable `%s' cannot occupy in multiple small data regionsWarning, .pdata section size (%ld) is not a multiple of %d
-Warning: %s does not support interworking, whereas %s doesWarning: %s supports interworking, whereas %s does notWarning: Clearing the interworking flag of %s because non-interworking code in %s has been linked with itWarning: Clearing the interworking flag of %s due to outside requestWarning: Not setting interworking flag of %s since it has already been specified as non-interworkingWarning: Writing section `%s' to huge (ie negative) file offset 0x%lx.Warning: alignment %u of symbol `%s' in %s is smaller than %u in %sWarning: fixup count mismatch
-Warning: size of symbol `%s' changed from %lu in %s to %lu in %sWarning: type of symbol `%s' changed from %d to %d in %sWarning: writing archive was slow: rewriting timestamp
-Writing updated armap timestamp[abi=16-bit int, [abi=32-bit int, [whose name is lost]_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytesbad section index in %sbanked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)bfd_make_section (%s) failedbfd_set_section_flags (%s, %x) failedcan't build branch stub `%s'can't find branch stub `%s'cannot handle R_MEM_INDIRECT reloc when using %s outputcorrupt %s section in %scorrupt or empty %s section in %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcpu=HC11]cpu=HC12]cpu=HCS12]error: undefined symbol __rtinitfailed to allocate space for new APUinfo section.failed to compute new APUinfo section.failed to enter %sfailed to install new APUinfo section.generic linker can't handle %signoring reloc %s
-internal error: dangerous errorinternal error: dangerous relocationinternal error: out of range errorinternal error: unknown errorinternal error: unsupported relocation errorip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx).ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx).ip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.linkage table error against `%s'linker stubs in %u groups
-  branch       %lu
-  toc adjust   %lu
-  long branch  %lu
-  long toc adj %lu
-  plt call     %lumissing IHCONST relocmissing IHIHALF relocnon-zero addend in @fptr relocnot enough GOT space for local GOT entriesnot mapping: data=%lx mapped=%d
+Title Text Header
+Too many unwind codes (%ld)
+Type                Size     Rva      Offset
+USRSTACKUnable to find the stub entry targeting %sUnable to link input file: %sUnable to load DLL.UnknownUnknown: %xUpdated property %W (%v) to merge %pB (0x%v) and %pB (not found)
+Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)
+VOLATILE         Virtual size of .pdata section (%ld) larger than real size (%ld)
+Warning: %s section size (%ld) is not a multiple of %d
+Warning: %s section size (%ld) is smaller than virtual size (%ld)
+Warning: %s section size is zero
+Writing updated armap timestampXGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code.[%u]: Lower: %u, upper: %u
+[abi=16-bit int, [abi=32-bit int, [whose name is lost]\%pB: warning: %s BLX instruction targets %s function '%s'__tls_get_addr call offset overflow_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry function`xtheadvector' is conflict with the `v' extension`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extensiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
+array, dim: %u, bitmap: arsize: %u, a0: 0x%08x
+atomic, type=0x%02x %s
+attempt to convert L32R/CALLX to CALL failedattempt to do relocatable link with %s input and %s outputbad section index in %sbad valuebanked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)base: %u, pos: %u
+bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lxbfd_mach_o_read_section_64: overlarge alignment value: %#lxbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
+blkend: size: 0x%08x
+branch (PC rel16) to section (%s) not supportedbranch to a non-instruction-aligned addressbss-plt forced by profilingbss-plt forced due to %pBc' or `zcac' or `zcdc' or `zcfcan't build branch stub `%s'can't find branch stub `%s'cannot + or - base extension `%s' in .option arch `%s'cannot convert a branch to JALX for a non-word-aligned addresscannot convert a jump to JALX for a non-word-aligned addresscannot create stub entry %scannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
+cannot find default versions of the ISA extension `%s'cannot read DMT
+cannot read DMT header
+cannot read DMT psect
+cannot read DST
+cannot read DST header
+cannot read DST symbol
+cannot read EIHA
+cannot read EIHD
+cannot read EIHI
+cannot read EIHS
+cannot read EIHVN header
+cannot read EIHVN version
+cannot read EISD
+cannot read GST
+cannot read GST record
+cannot read GST record header
+class: %u, dtype: %u, length: %u, pointer: 0x%08x
+corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)corrupt EGSD record type %d: size (%#x) is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt reloc recordcorrupt vms valuecorrupted GST
+could not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]d' and `c', or `d' and `zcdd' and `zfad' or `zdinxdangerous relocationdangerous relocation errordelta pc +%-4ddelta_pc_l: +0x%08x
+delta_pc_w %u
+descdimct: %u, aflags: 0x%02x, digits: %u, scale: %u
+discarded output section: `%pA'discarding zero address range FDE in %pB(%pA).
+discontiguous range (nbr: %u)
+division by zerodst_define_location %u too largedynamic index information not availabledynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
+enumelt, name: %.*s
+enumend
+epilog: flags: %u, count: %u
+error adding attributeerror in %pB(%pA); no .eh_frame_hdr table will be createderror in %pB(%pA); no .sframe will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memoryerror: %pB does not use %s instructions, whereas %pB doeserror: %pB has a LOAD segment with RWX permissionserror: %pB has a TLS segment with execute permissionerror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack alignederror: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt AArch64 used size: 0x%x>error: %pB: <corrupt property (0x%x) size: 0x%x>error: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s)error: %pB: SB relative addressing conflicts with use of R9error: %pB: XLEN of input (%u) doesn't match output (%u)error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'error: %pB: mis-matched ISA string to merge '%s' and '%s'error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: %pB: unsupported XLEN (%u), you might be using wrong emulationerror: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack sectionerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: conflicting CPU architectures %s vs %s in %pBerror: creating an executable stack because of -z execstack command line optionerror: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spaceerror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablef' and `c', or `f' and `zcff' or `zfinxfailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfinal size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spacefurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation when _gp not definedhhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
+incr_linum_l: +%u
+incr_linum_w: +%u
+indirect, defined at 0x%08x
+input SFrame sections with different abi prevent .sframe generationinput SFrame sections with different format versions prevent .sframe generationinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: relocation not supportedinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol internal: unreachable INSN_CLASS_*invalid %sinvalid ISA extension ends with <number>p in .option arch `%s'invalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid dynamic indexinvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
+len: %2u, kind: %2u line num  (len: %u)
+linkable imagelinker stubs in %u grouplinker stubs in %u groupsliteralliteral relocation occurs for an external symbollocal symbol index too biglong branch stub `%s' offset overflowm' or `zmmulmach-o: there are too many sections (%u) maximum is 255,
+malformed archivemalformed mach-o ARM half sectdiff reloc: invalid length: %dmalformed mach-o ARM local sectdiff reloc: invalid length: %dmalformed mach-o ARM reloc pair: invalid length: %dmalformed mach-o ARM reloc pair: reloc is first relocmalformed mach-o ARM reloc: unknown reloc type: %dmalformed mach-o ARM sectdiff reloc: invalid length: %dmalformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)malformed mach-o reloc: section index is greater than the number of sectionsmemory exhaustedmep: no reloc for code %dmodbeg
+modend
+name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno dynamic index information availableno errorno more archived filesno symbolsnon-contiguous array of %s
+non-dynamic relocations refer to dynamic symbol %snon-dynamic symbol %s in dynamic symbol tablenon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
+non-zero addend in @fptr relocnonenonrepresentable section on outputnot enough GOT space for local GOT entriesnot enough memory to sort relocationsnot mapping: data=%lx mapped=%d
 not mapping: env var not set
-obj code %d not foundprivate flags = %lxprivate flags = %lx:private flags = %lx: private flags = %x:private flags = 0x%lx:reference to a banked address [%lx:%04lx] in the normal address space at %04lxreloc against unsupported sectionreloc not properly alignedreserved CTL cmd %dreserved OPR cmd %dreserved STA cmd %dreserved STO cmd %dsom_sizeof_headers unimplementedstack-entry-mask not fully implementedstack-from-image not implementedstack-literal not fully implementedstack-local-symbol not fully implementedstack-local-symbol-entry-point-mask not fully implementedstatic procedure (no name)stub entry for %s cannot load .plt, dp offset = %ldstubs don't match calculated sizeunable to read in %s section from %suncertain calling convention for non-COFF symbolunknown gsd/egsd subtype %dunsupported STA cmd %sunsupported relocunsupported reloc typeunsupported relocation between data/insn address spacesusing multiple gp valuesv850 architecturev850e architecturewarning: %s section has zero sizewarning: %s: local symbol `%s' has no sectionwarning: attempt to export undefined symbol `%s'warning: type and size of dynamic symbol `%s' are not definedwarning: unable to set size of %s section in %swarning: unable to update contents of %s section in %sProject-Id-Version: bfd 2.14rel030712
-POT-Creation-Date: 2003-07-11 13:53+0930
-PO-Revision-Date: 2003-11-25 08:39+0200
-Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>
+not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowplugin framework: out of file descriptors. Try using fewer objects/archives
+pointer
+private flags = %lxprivate flags = %lx:private flags = %lx: private flags = 0x%lxprivate flags = 0x%lx:prolog: bkpt address 0x%08x
+protected symbolprotected symbol q' and `zfaq' or `zqinxrecbeg: name: %.*s
+recend
+record is too small for symbol name lengthreference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
+reloc (%d) is *UNKNOWN*relocation against `%s' has faulty GOT type relocation for non-REL psectrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedremoving unused section '%pA' in file '%pB'reopening %pB: %sreserved cmd %drtnbeg
+rtnend: size 0x%08x
+rv%d does not support the `q' extensionrv%d does not support the `zcf' extensionrv%de does not support the `h' extensionsection has no contentsseptyp, name: %.*s
+set_abs_pc: 0x%08x
+set_line_num(w) %u
+set_line_num_b %u
+set_line_num_l %u
+shared objectsize error in section %pAsmall-data section too large; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, cannot handle this filesorry, no support for duplicate object files in auto-overlay script
+sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands.source (len: %u)
+spurious ALPHA_R_BSR relocstack analysis will ignore the call from %s to %s
+stack overflow (%d) in _bfd_vms_pushstack underflow in _bfd_vms_popstandard data: %s
+start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targetssymbol needs debug section which does not existsymbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targetssystem call errorsystem version array information:
+term(b): 0x%02xterm_w: 0x%04xthe bfin target does not currently support the generation of copy relocationsthere is a conflict merging the ELF header flags from %pBtoo many GOT entries for -fpic, please recompile with -fPICtry enabling relaxation to avoid relocation truncationstype spec for element:
+type spec for subscript %u:
+typed pointer
+typspec (len: %u)
+unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
+undefined undefined %s reference in complex symbol: %sunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
+unhandled emh subtype %u
+unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown ISA extension `%s' in .option arch `%s'unknown attribute for symbol `%s': 0x%02xunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
+unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeusing multiple gp valuesv' or `zve64d' or `zve64f' or `zve32fv' or `zve64x' or `zve32xv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
+warning, .pdata section size (%ld) is not a multiple of %d
+warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a LOAD segment with RWX permissionswarning: %pB has a TLS segment with execute permissionwarning: %pB has a corrupt string table indexwarning: %pB has a program header with invalid alignmentwarning: %pB has a section extending past end of filewarning: %pB has a segment extending past end of filewarning: %pB supports interworking, whereas %pB does notwarning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%uwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
+warning: %s overlaps %s
+warning: %s section has zero sizewarning: %s should be used rather than %swarning: %s: missing .note.GNU-stack section implies executable stackwarning: %s: requires executable stack (because the .note.GNU-stack section is executable)warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: --plt-localentry is incompatible with power10 pc-relative codewarning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised.warning: NOTE: size discrepancies can cause real problems.  Investigation is advised.warning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pBwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
+warning: discarding dynamic section %swarning: enabling an executable stack because of -z execstack command line optionwarning: file %pB's arch flag %s conflict with target %s,set target arch flag to %swarning: file %pB's arch flag %s conflicts with target ck%s, using %swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: privileged spec version 1.9.1 can not be linked with other spec versionswarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognised arch name '%#x'warning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
+x ISA extension `%s' must be set with the versionsyesyou are not allowed to define %s in a scriptzbb' or `zbkbzbc' or `zbkczcb' and `zbazcb' and `zbbzcb' and `zmmul', or `zcb' and `mzfh' and `zfazfh' and `zfa', or `zvfh' and `zfazfh' or `zhinxzfh' or `zvfhzfhmin' and `d', or `zhinxmin' and `zdinxzfhmin' and `q', or `zhinxmin' and `zqinxzfhmin' or `zhinxminzihintntl' and `c', or `zihintntl' and `zcazknd' or `zknezvbbzvbczvkbzvkgzvknedzvknha' or `zvknhbzvksedzvkshzvl*b extensions need to enable either `v' or `zve' extensionProject-Id-Version: bfd 2.41.90
+Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/
+POT-Creation-Date: 2024-01-15 14:55+0000
+PO-Revision-Date: 2024-01-17 00:12+0100
+Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
 Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>
-X-Bugs: Report translation errors to the Language-Team address.
+Language: ro
 MIME-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-2
+Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
-	Tabelã Exportare de Adrese 			 Tabelã Exportare Adrese 		%08lx
-	Nume Pointer Tabelã 			Ordinal Tabelã 				Tabelã [Nume Pointer/Ordinal]	%08lx
-	code-base %08lx toc (încãrcabil/actual) %08lx/%08lx
-	relocarea %4d offset %4x [%4lx] %s	vma:  Sugestie/Ord Membru-Nume Salt-La
+Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);
+X-Bugs: Report translation errors to the Language-Team address.
+X-Generator: Poedit 3.2.2
+	    TLS: %pA	<corupt: 0x%04lx>	Tabel de adrese exportate 			Tabel de adrese exportate 		%08lx
+	Tabel de adrese de export rva (0x%lx) sau numÄƒr de intrÄƒri (0x%lx), nevalid
+	Tabel cu indicatori de nume rva (0x%lx) sau numÄƒr de intrÄƒri (0x%lx), nevalid
+	Tabelul ordinal rva (0x%lx) sau numÄƒrul de intrÄƒri (0x%lx) nevalid
+	Tabel cu indicatori de nume 			Tabel ordinal 				[%4ld] <decalaj corupt: %lx>
+	Tabel [nume indicator/ordinal]	%08lx
+	non-TLS: %pA	realocarea %4d decalaj %4x [%4lx] %s	vma:  Sugestie/Ord Nume-Membru Legat-de
+
 
-	Nume DLL: %s
+	Nume DLL: %.*s
 
 
-Relocãri Bazã Fiºier PE (interpretare conþinut secþiune .reloc)
+RealocÄƒri bazÄƒ de fiÈ™iere PE (interpretare conÈ›inut secÈ›iune .reloc)
 
-      Simbol Sfârºit+1: %-7ld   Tip:  %s
-      Simbol Sfârºit+1: %ld
+      Simbol SfÃ¢rÈ™it+1: %-7ld   Tip:  %s
+      Simbol SfÃ¢rÈ™it+1: %ld
       Primul simbol: %ld
       Simbol local: %ld
       Tip: %s
-      enum; Simbol Sfârºit+1: %ld
-      struct; Simbol Sfârºit+1: %ld
-      uniune; Simbol Sfârºit+1: %ld
+      enum; Simbol SfÃ¢rÈ™it+1: %ld
+      struct; Simbol SfÃ¢rÈ™it+1: %ld
+      union; Simbol SfÃ¢rÈ™it+1: %ld
+ decalajul matricei de versiuni: %u
+
 Caracteristici 0x%x
 
-Secþiune Dinamicã:
+DescÄƒrcare din %s
+
+SecÈ›iune dinamicÄƒ:
+
+Eroare: secÈ›iunea %s conÈ›ine adresa de pornire a datelor de depanare, dar este prea micÄƒ
 
-Tabelã Exportare de Adrese -- Bazã Ordinalã %ld
+Antetul auxiliar al executabilului
 
-Descriptorul de funcþie localizat la adresa de start: %04lx
+Tabel de adrese exportate -- BazÄƒ OrdinalÄƒ %ld
 
-Nu existã secþiune reldata! Descriptorul de funcþie nu este decodat.
+ÃŽnceput PartiÈ›ie[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
-Start Partiþie[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
+Antetul programului:
 
-Header Program:
+Dimensiunea stivei pentru funcÈ›ii.  AdnotÄƒri: â€ž*â€� stivÄƒ maximÄƒ, â€žtâ€� apel la coadÄƒ(tail)
 
-Tabelele de Exportare (interpretare conþinut secþiune %s)
+Tabelele de Exportare (s-a interpretat conÈ›inutul secÈ›iunii %s)
 
 
-Tabela de Funcþii (interpretare conþinut secþiune .pdata)
+Tabelul cu funcÈ›ii (interpretat conÈ›inutul secÈ›iunii %s)
 
-Tabelele de Importare (interpretat conþinutul secþiunii %s)
+Tabelul de funcÈ›ii (conÈ›inutul secÈ›iunii .pdata interpretat)
 
-Existã un prim thunk, dar secþiunea care îl conþine nu poate fi gãsitã
+Tabelele de Importare (interpretat conÈ›inutul secÈ›iunii %s)
 
-Existã o tabelã de exportare în %s la 0x%lx
+ExistÄƒ un director de depanare Ã®n %s la 0x%lx
 
-Existã o tabelã de export, dar secþiunea ce o conþine nu poate fi gãsitã
-
-Existã o tabelã de importare în %s la 0x%lx
-
-Existã o tabelã de importare, dar secþiunea care o conþine n-a putut fi gãsitã
-
-Referinþe Versiune:
-
-Definiþii de versiune:
-
-Adresã Virtualã: %08lx Mãrime Trunchiere %ld (0x%lx) Numãr acceptãri %ld
-
-[Ordinal/Nume Pointer] Tabelã
-
-header ppcboot:
-  luaþi în considerare relinkuirea cu --support-old-code activat  prima gãsire: %s: apelare braþ(arm) cãtre deget(thumb)  prima gãsire: %s: apelare deget(thumb) cãtre braþ(arm)  cerute de %s:
- <versiune necunoscutã EABI>Secvenþã de cod lipitã(glue)Registrul reface millicode Registrul salveazã millicode  [mod32biþi] [format float FPA] [format float Maverick] [format float VFP] [EABI Versiunea1] [EABI Versiunea2] [abi necunoscut] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [poziþie absolutã] [cpu32] [d-float] [simbolurile dinamice folosesc index de segment] [floats trecuþi în regiºtri de float] [floats trecuþi în regiºtrii de integer] [g-float] [are punct de intrare] [interlucru(interworking) activat] [marcajul(flag) de interlucru(interworking) nu este iniþializat] [interlucru(interworking) nesuportat] [interlucru(interworking) suportat] [m68000] [simbolurile de mapare le precedeazã pe celelalte] [mdmx] [memorie=mod-bank] [memorie=întinsã(flat)] [mips16] [mips1] [mips2] [mips32] [mips32r2] [mips3] [mips4] [mips5] [mips64] [ABI nou] [abi nesetat] [nonpic] [non-mod32biþi] [ABI vechi][ independent de poziþie] [executabil relocabil] [FP software] [tabelã sortatã de simboluri] [simbolurile au un _prefix] [ISA necunoscut] [tabelã de simboluri nesortatã] vma:			Adresã Început    Adresã Sfârºit      Info Unwind
- vma:		Început    Sfârºit    EH     EH     PrologSfârºit  Excepþii
-     		Adresã  Adresã  Manipulant  Date   Adresã    Mascã
- vma:          Sugestie   Timp      Înaintare  DLL     Primul
-                 Tabel   Marcaj     Lanþ    Nume      Thunk
-#<Cod invalid de eroare>%T: abandonat(discarded) în secþiunea `%s' din %s
-%s (%s): Marcajul(flag) de secþiune %s (0x%x) ignorat%s(%s): relocarea %d are indexul de simbol invalid %ld%s(%s): avertisment: interlucrul(interworking) nu este activat%s(%s+0x%lx):relocarea %s pe `%s': eroare %drelocare %s(%s+0x%lx): %s pe simbol local%s(%s+0x%lx): %s relocare pe secþiunea SEC_MERGE%s(%s+0x%lx): Intrarea bruscã(stab) are index ºir invalid.%s(%s+0x%lx): TOCuri multiple nu sunt suportateîn folosirea fiºierelor voastre crt; recompilaþi cu  -mminimal-toc sau upgradaþi gcc%s(%s+0x%lx): nu pot manipula %s pentru %s%s(%s+0x%lx): nu se poate gãsi %s, recompilaþi cu -ffunction-sections%s(%s+0x%lx): se fixeazã %s%s(%s+0x%lx): instrucþiune invalidã pentur relocarea TLS %s%s(%s+0x%lx): adãugare non-zero în relocarea %s pentru `%s'%s(%s+0x%lx): relocare pe `%s': eroare %d%s(%s+0 x%lx): optimizare apelare sibling pentru `%s' nu permite automatTOCuri multiple; recompilaþi cu -mminimal-toc sau -fno-optimize-sibling-calls, sau faceþi(make) `%s' extern%s(%s+0x%lx): relocare nerezolvabilã %s pe simbolul `%s'%s(%s+0x%lx): relocare nerezolvabilã pe simbolul `%s'%s, secþiunea %s:
-  relocarea %s n-ar trebui folositã într-un shared object; recompilaþi cu -fPIC%s: !samegp reloc apentru simbol fãrã .prologue: %s%s: %s simbolul `%s' în %s este referit de DSO%s: %s simbolul `%s' nu este definit%s: `%s' accesate ºi ca simboluri locale normale ºi ca simboluri locale pe fire (thread)%s: %s+0x%lx: salt la rutinã ciot(stub) ce nu este jal%s: %s: versiune necesarã %d invalidã%s: %s: versiune invalidã %u (max %d)%s: %s: depãºire(overflow) de relocãri: 0x%lx > 0xffff%s: .subsegmentul got depãseºte 64K (size %d)%s: .opd nu este un domeniu(array) de intrãri opd%s: secþiunea .preinit_array section nu este permisã în DSO%s: 0x%lx: fatal: relocare depãºitã(overflow) în timpul relaxãrii%s: 0x%lx: fatal: ramurã þintã nealiniatã pentru relocare cu suport de relaxare%s: 0x%lx: avertisment: R_SH_USES trimite cãtre insn necunoscut 0x%x%s: 0x%lx: avertisment:offset de încãrcare R_SH_USES invalid%s: 0x%lx: avertisment: offset R_SH_USES invalid%s: 0x%lx: avertisment: numãrãtoare(count) invalidã%s: 0x%lx: avertisment: nu s-a putut gãsi relocarea COUNT aºteptatã%s: 0x%lx: avertismetn: nu s-a putut gãsi relocarea aºteptatã%s: 0x%lx: avertisment: simbol în secþiune neaºteptatã%s: relocare @gprel pe simbolul dinamic %s%s: ramurã @internal cãtre simbolul dinamic %s%s: relocare @pcrell pe simbolul dinamic %s%s: ABI este incompatibil cu cel al emulaþiei selectate%s: nepotrivire ABI: linkuire modul %s cu module %s anterioare%s: Arhitectura nu se potriveºte cu modulele anterioare%s: Înregistrare de relocare greºitã importatã: %d%s: Definire invalidã de simbol: `Main' setat la %s în loc de adresa de start %s
-%s: relocarea CALL16 la 0x%lx nu este pe simbolul global%s: Eroare: definiþii multiple ale `%s'; începutul lui %s este setat într-un fiºierlinkuit anterior
-%s: eroare GASr:  PTB insn neaºteptat cu R_SH_PT_16%s: Setul de instrucþiuni nu se potriveºte cu modulele anterioare%s: eroare internã de inconsistenþã pentru valoarea
-registrului global alocat de linker: linkuit: 0x%lx%08lx != relaxat: 0x%lx%08lx
-%s: Inconsistenþã internã, nu existã secþiunea de relocare %s%s: Tip de relocare exportat invalid: %d%s: Tip de relocare importat invalid: %d%s: directivã LOCAL: Registrulr $%ld nu este un registru local.  Primul registru global $%ld.%s: Relocare malformatã detectatã pentru secþiunea %s%s:Nu existã nici PLT nici GOR pentru relocarea %s pe simbolul `%s' din secþiunea %s%s: Nu existã nucleu(core) pentru a aloca un simbol lung de %d octeþi
-%s:Nu existã nucleu(core) pentru a aloca numele de secþiune %s
-%s: Memorie insuficientã pentru headerele programului (alocatã %u, necesarã %u)%s: Memorie insuficientã pentru headerele programului, încercaþi linkuirea cu -N%s: Doar regiºtrii %%g[2367] pot fi declaraþi folosind STT_REGISTER%s: Tip de maºinã recunoscut dar nemanipulabil (0x%x) în arhiva Import Library Format%s: Relocarea %s (%d) nu este încã suportatã.
-%s: Relocãri în ELF generic (EM: %d)%s: codul local executabil TLS nu poate fi linkuit în shared objects%s: relocare TOC la 0x%x cãtre simbolul `%s' fãrã nici o intrare TOC%s: Þinta (%s) unei relocãri %s este în secþiunea nepotrivitã (%s)%s: Tip import nemanipulabil; %x%s: Tip necunoscut de relocare %d
-%s: Tip secþiune necunoscut în fiºier adobe a.out: %x
-%s: Tip nume import necunoscut; %x%s: Tip import necunoscut; %x%s: Tip maºinã necunoscut (0x%x) în arhiva Import Library Format%s: Clasã de depozitare(storage) %d necunoscutã pentru %s simbolul `%s'%s: Avertisment: BLX Arm are ca þintã funcþia Arm `%s'.%s: Avertisment: BLX Thumb are ca þintã funcþia thumb `%s'.%s: XCOFF shared object neproducând output XCOFF%s: simblul XMC_TC0 `%s' este clasa %d scnlen %d%s: __gp nu acoperã segmentul de date scurte%s: `%s' accesate ºi ca simboluri locale normale ºi ca simboluri locale pe fire (thread)%s: `%s' are numere de linii dar nici o secþiune de închidere%s: `%s' în relocare loader dar nu în loader sym%s: `ld -r' nu este suportat cu obiecte PE MIPS
-%s: acces dincolo de sfârºitul secþiunii concatenate(merged) (%ld + %ld)%s: adresa 0x%s este în afara domeniului(range) pentru fiºierul Intel Hex%s: simbol XTY_ER invalid `%s': clasa %d scnum %d scnlen %d%s: pair/reflo invalid dupã refhi
-%s: adresã eronatã de relocare 0x%lx în secþiunea `%s'%s: nume secþiune relocare invalid `%s'%s: mãrime secþiune invalidã în ihex_read_section%s: mãrime tabel ºiruri invalidã %lu%s:index de simboluri invalid: %d%s:relocare-offset-bazã-plus pentru simbolul registru: %s în %s%s:relocare-offset-bazã-plus pentru simbolul registru: (necunoscut) în %s%s: nu se poate reprezenta secþiunea `%s' în format de fiºier obiect a.out%s: nu se poate reprezenta secþiune `%s' în oasys%s: nu se poate reprezenta secþiunea pentru simbolul `%s' în formatul de fiºier obiect a.out%s: nu se poate aloca nume fiºier pentru fiºierul numãrul %d, %d octeþi
-%s: nu se poate crea intrarea trunchiatã %s%s: schimbare în gp: BRSGP %s%s: check_relocs: tip de relocare nemanipulabil %d%s: clasa %d simbolul `%s' nu are intrãri aux%s: compilat ca obiect pe 32-biþi ºi %s este pe 64-biþi%s: compilat ca obiect pe 64-biþi ºi %s este pe 32-biþi%s: compilat pentru un sistem 64 biþi ºi þinta fiind pe 32 biþi%s: compilat pentru un sistem big endiat iar þinta este little endian%s: compilat pentru un sistem little endiat iar þinta este big endian%s: compilat normal ºi linkuite cu module compilate cu -mrelocatable%s: compilat cu %s ºi linkuit cu module compilate cu %s%s: compilat cu %s ºi linkuit cu module care folosesc relocaþii non-pic%s: compilat cu -mrelocatable ºi linkuit cu module compilate normal%s: nu s-a putut gãsi secþiunea de output %s%s: nu am putut gãsi secþiunea de output %s pentru secþiunea de input %s%s: nu am putut scrie intrãrile .cranges adãugate%s: nu am putut scrie intrãrile .cranges sortate%s: csect `%s' nu este în secþiunea de închidere%s: directiva LOCAL este validã doar cu un registru sau o valoare absolutã%s: relocare relativã-dtp pentru simbolul dinamic %s%s: exportare de ciot(stub) duplicatã %s%s: obiect dinamic fãrã secþiune .loader%s: s-a întâlnit un simbol etichetãdate(datalabel) în intrare(input)%s: endianness incompatibilã cu aceea a emulaþiei selectate%s: eroare: relocarea %s nu este multiplu de %d%s: eroare: tip de reloare nealiniat %d la %08x relocarea %08x
-%s: relocare relativã-gp pentru simbolul %s%s: tip ilegal de relocare %d la adresa 0x%lx%s: nume ilegal de secþiune `%s'%s: index ilegal de simbol în reloc: %d%s: simbolul indirect `%s' pentru `%s' este o buclã%s: eroare internã în ihex_read_section%s: eroare internã, secþiunea de regiºtri internã %s nu are conþinut
-%s: eroare internã, tabela de simboluri ºi-a schimbat mãrimea din %d în %d cuvinte
-%s: intrare SHT_GROUP invalidã%s: link invalid %lu pentru secþiunea de relocare %s (index %u)%s: fiºier mmo invalid: YZ al lop_end (%ld) nu este egal cu numerele tetras ale lop_stab precedent (%ld)
-%s: fiºier mmo invalid: pentru lop_quote se aºtepta YZ = 1 s-a primit YZ= %d
-%s: fiºier mmo invalid: pentru lop_fixrx se aºtepta y =0 s-a primit y = %d
-%s: fiºier mmo invalid: pentru lop_fixo se aºtepta z =1 sau z =  2 s-a primit z = %d
-%s: fiºier mmo invalid: pentru lop_loc se aºtepta z =1 sau z =  2 s-a primit z = %d
-%s: fiºier mmo invalid: pentru lop_fixrx se aºtepta z =16 sau z = 24 s-a primit z = %d
-%s: fiºier mmo invalid: câmpurile y ºi z ale lop_stab sunt non-zero: y: %d, z: %d
-%s: fiºier mmo invalid: numele de fiºier pentru numãrul %d nu a fost specificat înainte de folosire
-%s: fiºier mmo invalid: fiºierul numãrul %d `%s' a fost deja introdus ca `%s'
-%s: fiºier mmo invalid: valoare de iniþializare pentru $255 nu este 'Main'
-%s: fiºier mmo invalid: pentru lop_fixrx octetul de înceout al operandului word trebuie sã fie 0 sau 1, s-a primit %d
-%s: fiºier mmo invalid: lop_end nu este ultimul element în fiºier
-%s: fiºier mmo invalid: lopcode `%d' nesuportat
-%s: tip de relocare invalid %d%s: adresã de start invalidã pentru regiºtrii iniþializaþi de lungime %ld: 0x%lx%08lx
-%s: offset de ºir invalid %u >= %lu pentru secþiunea `%s'%s: tabelã de simboluri invalidã: simbol `%s' duplicat
-%s: salt prea departe(far away)
-%s: depãºire(overflow) numãr linii: 0x%lx > 0xffff%s: linkuire a modulului %s cu modulele%s anterioare%s: linkuire cod 32-biþi cu cod 64-biþi%s: linkuire fiºiere pe 64-biþi cu fiºiere pe 32-biþi%s: linkuire cod specific UltraSPARC cu cod specific HAL%s: linkuire fiºiere auto-pic cu fiºiere non-auto-pic%s: linkuire fiºiere big-endiancu fiºiere little-endian%s: linkuire fiºiere constant-gp cu fiºiere non-constant-gp%s: linkuire a fiºierelor compilate pentru întregi(integers)  pe 16-biþi (-mshort) ºi a celorlalte pentru întregi(integers) pe 32-biþi%s: linkuire a fiºierelor compilate pentru double pe 32-biþi (-fshort-double) ºi a celorlalte pentru double pe 64-biþi%s:linkuire a fiºierelor compilate pentru HCS12 cu celelalte compilate pentru HC12%s: linkuire fiºiere little endian files cu fiºiere big endian%s: linkuire cod non-pic într-un executabil independent de poziþie%s: linkuire cod non-pic într-o bibliotecã globalã(shared)%s: linkuire trap-on-NULL-dereference cu fiºiere non-trapping%s: relocare loader în secþiunea doar-în-citire %s%s: relocare loader în secþiune necunoscutã `%s'%s:XTY_LD `%s' rãtãcit%s nu existã informaþii de grup pentru secþiunea %s%s: nu existã regiºtri iniþializaþi; lungime secþiune 0
-%s: nu existã acest simbol%s: nu existã simbolul "%s"%s: neimplementatã complet%s: neimplementat%s: nesuportat%s: mãrimea obiectului nu se potriveºte cu cea a þintei %s%s: relocare relativã pc pentru simbolul dinamic %s%s: probabil compilat fãrã -fPIC?%s:relocare registru pentru simbolul non-registru: %s în %s%s:relocare registru pentru simbolul non-registru: (necunoscut) în %s%s: relocarea %s:%d nu este în csect%s: depãºire(overflow) relocare 1: 0x%lx > 0xffff%s: legãtura relocalizabilã din %s cãtre %s nesuportatã%s: relocarea %s nu poate fi utilizatã când se face un shared object, recompilaþicu -fPIC%s: relocarea %s nu poate fi folositã când se creazã un shared object%s: relocarea %s din secþiunea %s fãrã GOT creat%s: relocarea %s nu este permisã pentru simbolul global `%s' din secþiunea %s%s: relocarea %s nu este suportatã pentru simbolul %s.%s: relocarea %s nu este încã suportatã pentru simbolul %s.%s: relocarea %s nu ar trebui utilizatã când se face un shared object, recompilaþicu -fPIC%s: relocarea %s cu adãugarea diferitã de zero %d pe simbolul local din secþiunea %s%s: relocarea %s cu adãugare non-zero %d pe simbolul `%s' din secþiunea %s%s: nepotrivire a mãrimii de relocare în %s secþiunea %s%s: relocãri în secþiunea `%s', dar fãrã conþinut%s: segment de date scurt depãºit(overflowed) (0x%lx >= 0x400000)%s: mãrimea câmpului din headerul Import Library Format este zero%s: rezolvare de speculaþie cãtre simbolul dinamic %s%s: ºirul nenul terminat în fiºier obiect ILF.%s: ºir prea lung (%d caractere, max 65535)%s: simbolul `%s' are tip necunoscut csect %d%s: simbolul `%s' are un smclas necunoscut %d%s: simbolul `%s' necesar, dar nu este prezent%s: þinta (%s) unei relocãri %s este într-o secþiune invalidã de output (%s)%s: prea mulþi regiºtri iniþializaþi; lungime secþiune %ld
-%s: relocare relativã-tp pentru simbolul dinamic %s%s: nu s-a putut gãsi legãtura(glue) ARM `%s' pentru `%s'%s: nu s-a putut gãsi legãtura(glue) THUMB `%s' pentru `%s'%s: sym nedefinit `%s' în secþiune .opd%s:versiune %s nedefinitã%s: nume de simbol versiune %s nedefinit%s: tip ATN neaºteptat %d în parte externã%s: tip de relocare neaºteptat %u în secþiune .opd%s: tip neaºteptat dupã ATN%s: relocare dinamicã nemanipulabilã pentru %s%s: %s neimplementat
-%s: înregistrare ATI neimplementatã %u pe simbolul %u%s: tip necunoscut de relocare %d%s: tip de relocare %d necunoscut pentru simbolul %s%s: simbol necunoscut `%s' marcaje(flags) 0x%x%s: relocare nerezolvabilã %s pe simbolul `%s' din secþiunea `%s'%s: relocare nerezolvabilã pe simbolul '%s' din secþiunea `%s'%s: tip de relocare nesuportat: %s%s: tip de relocare nesuportat 0x%02x%s: secvenþã mare(wide) de caractere 0x%02X 0x%02X nesuportatã dupã numele de simbol care începe cu `%s'
-%s: se folosesc simbolurile _-prefixate, dar se scrie fiºierul cu simboluri neprefixate%s: foloseºte câmpuri de marcaje e_flags (0x%lx) diferite de modulele anterioare (0x%lx)%s: foloseºte câmpuri marcaje e_flags (0x%lx) diferite de modulele anterioare (0x%lx)%s: se folosesc simboluri neprefixate, dar se scrie fiºierul cu simboluri _-prefixate%s: numãrul versiunii(%ld) nu se potriveºte cu numãrul simbolului (%ld)%s: avertisment: relocare %s pentru simbolul `%s' din secþiunea %s%s: avertisment: relocare %s spre 0x%x din secþiunea %s%s: avertisment: %s: depãºire(overflow) numãr de linii: 0x%lx > 0xffff%s: avertisment: S-a detectat segment încãrcabil vid, este intenþionat ?
-%s: avertisment: adãugarea GOT a %ld în `%s' nu se potriveºte adãugãrii GOT anterioare a %ld%s: avertisment: adãugarea PLT a %d în `%s' din secþiunea %s ignoratã%s: avertisment: secþiunea alocatã `%s' nu este în segment%s: avertisment: informaþie duplicat a numãrului de linii pentru `%s'%s: avertisment: index ilegal de simbol %ld în numãrul de linii%s: avertisment: index ilegal de simbol %ld în relocãri%s: avertisment: linkuire de fiºiere PIC cu fiºiere non-PIC%s: avertisment: tabela de simboluri prea mare pentru mmo, mai mare decâd 65535 cuvinte pe 32 de biþi: %d.  Doar 'Main' va fi emis.
-%s: avertisment: redefinire neaºteptatã a simbolului indirect cu versiune(versioned) `%s'%s: avertisment: relocare nerezolvabilã %d pe simbolul `%s' din secþiunea %s%s: avertisment: relocare nerezolvabilã pe simbolul `%s; din secþiunea `%s'%s:%d: Caracter neaºteptat `%s'în fiºier S-record
-%s:%d: caracter neaºteptat `%s' în fiºier Intel Hex
-%s:%u: checksum invalid în fiºier Intel Hex (se aºtepta %u, s-a gãsit %u)%s: %u: mãrime înregistrare a adresei extinse invalidã în fiºier Intel Hex%s: %u: mãrime înregistrare a adresei lineare extinse invalidã în fiºier Intel Hex%s: %u: mãrime adresã linearã de start extinsã invalidã în fiºier Intel Hex%s: %u: mãrime adresã de start extinsã invalidã în fiºier Intel Hex%s: %u: tip ihex necunoscut %u în fiºier Intel Hex
-*necunoscut*.glink ºi .plt prea departe unul de altulsecþiunea .got nu urmeazã imediat dupã secþiunea .pltdouble pe 32-biþi, relocarea relativã gp 32bits are loc pe un simbol externdouble pe 64-biþi, : instrucþiuni m32r: instrucþiuni m32rx<setare biþi de marcaj(flag) necunoscutã><necunoscut>relocare @pltoff pe simbol localArhiva nu are nici un index.; rulaþi ranlib pentru a adãuga unulFiºier obiect arhivã în format eronatÎncercare de a crea un link relocabil cu input %s ºi output %sAserþiunea BFD %s a eºuat %s:%dEroare internã BFD %s, se renunþã la %s linia %d
-Eroare interna BFD %s, se renunþã la %s linia %d în %s
-Valoare eronatãDirector Relocare de Bazã [.reloc]Director Importare de Graniþã(Bound)Nu se poate gãsi secþiunea de relocare pentru %sDirector DebugDirector Importare Întârziere%s învechitã apelatã
-%s învechitã apelatã la %s linia %d în %s
-Director DescriereEroare Pitic(Dwarf): Offset abbrev(%lu) mai mare sau egal cu mãrimea .debug_abbrev (%lu).Eroare Pitic(Dwarf): Numãr invalid de abbrev: %uEroare Pitic(Dwarf): Nu pot gãsi secþiunea debug_abbrev.Eroare Pitic(Dwarf): Nu pot gãsi secþiunea debug_line.Eroare Pitic(Dwarf): Nu pot gãsi secþiunea debug_strEroare Pitic(Dwarf): Nu am putut gãsi numãrul abbrev: %u.Eroare Pitic(Dwarf): DW_FORM_strp offset (%lu) mai mare sau egalã cu mãrimea .debug_str (%lu).Eroare Pitic(Dwarf): Valoare FORM invalidã sau nemanipulabilã: %u.Eroare Pitic(Dwarf): Offsetul de linie (%lu) mai mare sau egal cu mãrimea .debug_line (%lu)Eroare Pitic(Dwarf): s-a gãsit adresa mãrimea `%u', acest cititor nu poate manipula mãrimi mai mari decât `%u'Eroare Pitic(Dwarf): S-a gãsit dwarf versiunea `%u', acest cititor manipuleazã doar informaþii ale versiunii 2.Eroare Pitic(Dwarf): secþiune numãr de linii trunchiatã (numãr fiºier eronat)Eroare Pitic(Dwarf): secþiune trunchiatã numãr de liniiEROARE: %s este compilat ca ºi cod poziþie absolutã,pe când þinta %seste independentã de poziþieEROARE: %s este compilat ca ºi cod independent de poziþie,pe când þinta %seste poziþie absolutãEROARE: %s este compilat pentru APCS-%d, pe când %s e compilat pentru APCS-%dEROARE: %s este compilat pentru APCS-%d, pe când þinta %s foloseºte APCS-%dEROARE: %s este compilat pentru EABI versiunea %d, pe când %s este compilat pentru versiunea %dEROARE: %s este compilat pentru EP9312, pe când %s e compilat pentru XScaleEROARE: %s trimite float în regiºtrii de float, pe când %s îi trimite în regiºtrii de integerEROARE: %s trimite integer în regiºtrii de integer, pe când %s îi trimite în regiºtrii de floatEROARE: %s foloseºte instrucþiuni FPA, pe când %s nu le foloseºteEROARE: %s foloseºte instrucþiuni Maverick, pe când %s nu le foloseºteEROARE: %s foloseºte instrucþiuni VFP, pe când %s nu le foloseºteEROARE: %s foloseºte FP hardware, pe când %s foloseºte FP softwareEROARE: %s foloseºte FP software, pe când %s foloseºte FP hardwareOffset intrare        = 0x%.8lx (%ld)
-Eroare: prima secþiune în segment (%s) începe la 0x%x pe când segmentul începe la 0x%xDirector Excepþie [.pdata]Director Exportare [.edata (sau oriunde se gãseºte)]Marcaje(Flags) Exportare 			%lx
-Exportare RVAEªUARE în gãsirea relocãrii anterioare HI16
-Formatul de fiºier este ambiguuFormatul de fiºier nu a fost recunoscutFiºier în format eronatFiºier prea mareFiºier trunchiatCâmp Marcaj(Flag)      = 0x%.2x
-Trimiþãtor(Forwarder) RVARelocare relativã GP folositã când GP nu este definitRelocare relativã GP atâta timp cât _gp nu este definitrelocarea GPDISP nu a gãsit instrucþiuni ldah ºi ldaDirector Importare Tabelã de AdreseDirector Importare [ pãrþi ale .idata]Inconsistenþã internã: rãmâne %u ! = max %u
-  Vã rugãm raportaþi acest bug.Þintã bfd invalidãOperaþie invalidãLungime              = 0x%.8lx (%ld)
-Linkuirea obiectelor mips16 în formatul %s nu este suportatãDirector Încãrcare ConfiguraþieMajor/Minor 			%d/%d
-Arhivã malformatãMemorie plinãIHCONST lipsãIHHALF lipsãNume 				Nu mai existã Mem !Nici o eroareNu mai existã fiºiere arhivateNici un simbolSecþiune de output nereprezentabilãNu existã memorie suficientã pentru a sorta relocãrileNumãr în:
-Modul obiect CU erori !
-Bazã Ordinalã 			%ld
-Fiºierul de output necesitã biblioteca globalã(shared) `%s'
-Fiºierul de output necesitã biblioteca globalã(shared) `%s'.so.`%s'
-PASSMECH neimplementatã completnepotrivire PTA: o adresã SHcompact (bit 0 == 0)nepotrivire PTB: o adresã SHmedia (bit 0 == 1)Nume Partiþie      = "%s"
-Sfârºit Partiþie[%d]    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
-Mãrime Partiþie[%d] = 0x%.8lx (%ld)
-Sector Partiþie[%d] sector = 0x%.8lx (%ld)
-Vã rugãm raportaþi acest bug.
-Citirea fiºierului arhivã mod marcaj de timpReferinþa la simbolul depãrtat `%s' folosind o relocare invalidã poate duce la execuþie incorectãRegistrul %%g%d a folosit incompatibilitãþi: %s în %s, anterior %s în %sSecþiunea registru nu are conþinut
-RezervatDirector Resursã [.rsrc]Relocare SDA când _SDA_BASE_ nu este definitSEC_RELOC fãrã relocãri în secþiunea %sSecþiunea nu are conþinutDirector SecuritateMãrime nepotrivitã secþiune %s=%lx, %s=%lxDirector SpecialDepãºire(overflow) de stivã(%d) în bfd_vms_pushSubfolosire(underflow) a stivei _bfd_vms_popSimbolul %s nu este definit pentru acceptare(fixups)
-Simbolul %s înlocuit de %s
-Simbolul `%s' are tipuri diferenþiate: %s în %s, anterior REGISTER în %sSimbolul `%s' are tipuri diferenþiate: REGISTER în %s, anterior %s în %sSimbolul necesitã secþiune de debug care nu existãEroare apel sistemsuprasolicitare(overflow) TOC: 0x%lx > 0x10000; încercaþi -mminimal-toc la compilareAdrese Tabelã
-Director Depozitare Fire(Thread) [.tls]Marcaj(stamp) Orã/Datã 		%lx
-Nnu am putut gãsi secþiunea de output echivalentã pentru simbolul '%s' din secþiunea '%s'STO_SH5_ISA32 neaºteptat pe simbol local ce nu poate fi manipulatTip nemanipulabil %d de fiºier nucleu(core) OSF/1
-Relocare nemanipulabilã %sTip de bazã necunoscut %dId þintã TI COFF necunoscut `0x%x'Reloc necunoscutTip de relocare necunoscut 0x%xRelocare .stab nesuportatãVariabila `%s' nu poate sã fie în una din regiunile mici, zero sau micuþeVariabila `%s' nu poate fi simultan ºi în regiuni de date mici ºi de date micuþeVariabila `%s' nu poate fi simultan ºi în regiuni de date mici ºi de date zeroVariabila `%s' nu poate fi simultan ºi în regiuni de date zero ºi de date micuþeVariabila `%s' nu poate ocupa regiuni multiple de date miciAvertisment, mãrimea secþiunii .pdata (%ld) nu este multiplu de %d
-Avertisment: %s nu suportã interlucru(interworking), pe când %s suportãAvertisment: %s suportã interlucru(interworking), pe când %s nu suportãAvertisment: Se ºterge marcajul(flag) de interlucru(interworking) al %s deoarece împreunã cu el a fost linkuit cod non-interlucru în %sAvertisment: Se ºterge marcajul(flag) de interlucru(interworking) al %s datoritã unei cereri din afarãAvertisment: Nu se seteazã marcajul(flagu) de interlucru(interworking) al %s atâta timp cât a fost specificat ca non-interlucru(interworking)Avertisment: Scrierea secþiunii `%s' spre offset de fiºier imens (sau negativ) 0x%lxAvertisment: alinierea %u al simbolului `%s' din %s este mai micã decât %u în %sAvertisment: nepotrivire numãrãtori acceptare(fixup)
-Avertisment: mãrimea simbolului `%s' a fost schimbatã din %lu din %s în %lu din %sAvertisment: tipul de simbol `%s' schimbat de la %d la %d în %sAvertisment: scrierea arhivei a fost lentã: se rescrie marcajul de timp(timestamp)
-Scriere marcaj de timp armap înnoit[abi=16-bit int, [abi=32-bit int, [al cãrui nume s-a pierdut]_bfd_vms_output_counted apelat cu prea mulþi octeþi_bfd_vms_output_counted apelat cu zero octeþiindex de secþiune invalid în %sadresa banked [%lx:%04lx] (%lx) nu este în acelaºi bank precum adresa banked curentã [%lx:%04lx] (%lx)bfd_make_section (%s) eºuatãbfd_set_section_flags (%s, %x) eºuatãnu se poate construi ramura trunchiatã `%s'nu pot gãsi ramura trunchiatã `%s'nu am putut mainpula(handle) relocarea R_MEM_INDIRECT în folosirea ieºirii(output) %ssecþiune coruptã %s în %ssecþiune %s coruptã sau vidã în %snu am putut localiza simbolul special de linker __ctbpnu am putut localiza simbolul special de linker __epnu am putut localiza simbolul special de linker __gpcpu=HC11]cpu=HC12]cpu=HCS12]eroare: simbol __rtinit nedefinitnu s-a putut aloca spaþiu pentru secþiunea nouã APUinfo.nu s-a putut calcula(compute) secþiunea nouã APUinfo.Eºec în introducerea %snu s-a putut instala secþiunea APUinfo nouã.linkerul generic nu poate manipula(handle) %sse ignorã reloc %s
-eroare internã: eroare periculoasãeroare internã: relocare periculoasãeroare internã: eroare depãºire de domeniu(out of range)eroare internã: eroare necunoscutãeroare internã: eroare de relocare nesuportatãip2k linker: lipseºte instrucþiunea de paginã la 0x%08lx (dest = 0x%08lx).ip2k linker: instrucþiune redundantã de paginã la 0x%08lx (dest = 0x%08lx).ip2k relaxer: headerul tablelului de schimbare este corupt.ip2k relaxer: schimbare de tabel fãrã potrivirea completã a informaþiei de relocare.eroare tabel de linkuire pentru `%s'trunchieri(stubs) de linker în grupurile %u
-  ramurã       %lu
-  ajustare toc   %lu
-  ramurã lungã  %lu
-  ajust. lungã toc %lu
-  apelare plt     %luIHCONST reloc lipsãIHIHALF reloc lipsãadãugare non-zero în relocare @fptrnu existã destul spaþiu GOT pentru intrãrile GOT localenu se mapeazã: data=%lx mapat =%d
-nu se mapeazã: variabila env nu este setatã
-codul abj %d nu a fost gãsitmarcaje (flags) private = %lxmarcaje(flags) private = %lx:marcaje(flags) private=- %lx: marcaje(flags) private = %x:marcaje(flags) private = 0x%lxreferinþã la adresa banked [%lx:%04lx] în spaþiul normal de adresã la %04lxrelocare pe o secþiune nesuportatãrelocare incorect aliniatãcmd CTL %d rezervatãcmd OPR %d rezervatãcmd STA %d rezervatãcmd STO %d rezervatãsom_sizeof_headers neimplementatãstack-entry-mask neimplementatã completstack-from-image neimplementatãstack-literal neimplementatã completstack-local-symbol neimplementatã completstack-local-symbol-entry-point-mask neimplementatã completprocedurã staticã (fãrã nume)intrarea trunchiatã pentru %s nu poate încãrca .plt, offset dp = %ldtrunchierile(stubs) sunt în neconcordanþã cu mãrimea calculatãnu se poate citi în secþiunea %s din %sconvenþie de apelare nesigurã pentru simbol non-COFFsubtip %d gsd/egsd necunoscutcmd STA %s nesuportatãrelocare nesuportatãtip de relocare nesuportatrelocare nesuportatã între datã/spaþiu adresã insnfolosire de valori multiple gparhitecturã v850arhitecturã v850eavertisment: secþiunea %s are mãrime zeroavertisment: %s: simbolul local `%s' nu are secþiuneavertisment: încercare de exportare a simbolului nedefinit `%s'avertisment: tipul ºi mãrimea simbolului dinamic `%s' nu sunt definiteavertisment: nu se poate seta mãrimea secþiunii %s în %savertisment: imposibil de adus la zi(update) conþinutul secþiunii %s în %s
\ No newline at end of file
+ExistÄƒ un director de depanare Ã®n %s, dar acea secÈ›iune nu are conÈ›inut
+
+ExistÄƒ un director de depanare, dar secÈ›iunea care Ã®l conÈ›ine nu a putut fi gÄƒsitÄƒ
+
+ExistÄƒ o primÄƒ subrutinÄƒ( thunk), dar secÈ›iunea care o conÈ›ine nu poate fi gÄƒsitÄƒ
+
+ExistÄƒ un tabel de export Ã®n %s la 0x%lx
+
+ExistÄƒ un tabel de export Ã®n %s, dar conÈ›inutul acestuia nu poate fi citit
+
+ExistÄƒ un tabel de export Ã®n %s, dar este prea mic (%d)
+
+ExistÄƒ un tabel de export, dar secÈ›iunea care Ã®l conÈ›ine nu poate fi gÄƒsitÄƒ
+
+ExistÄƒ o tabelÄƒ de importare Ã®n %s la 0x%lx
+
+ExistÄƒ un tabel de import Ã®n %s, dar acea secÈ›iune nu are conÈ›inut
+
+ExistÄƒ un tabel de importare, dar secÈ›iunea care Ã®l conÈ›ine n-a putut fi gÄƒsitÄƒ
+
+ReferinÈ›e de versiune:
+
+DefiniÈ›ii de versiune:
+
+AdresÄƒ virtualÄƒ: %08lx Dimensiunea fragmentului %ld (0x%lx) NumÄƒrul de remedieri %ld
+
+AVERTISMENT: Date suplimentare Ã®n secÈ›iunea .rsrc - acestea vor fi ignorate de Windows:
+
+Tabel [ordinal/nume indicator]
+
+Antet ppcboot:
+        pc: 0x%08x
+    cmd *negestionatÄƒ* %u
+    adresa: 0x%08x
+    adresa: 0x%08x, dimens.: %u
+    fanioane: %u, adresa: 0x%08x, adresa-pd: 0x%08x
+    nume global: %.*s
+    lungime: %u biÈ›i
+    index legÄƒturÄƒ: %u, insn Ã®nlocuire: 0x%08x
+    nume: %.*s
+    pc: 0x%08x
+    pc: 0x%08x line: %5u
+    ind psect1 : %u, decalaj1 : 0x%08x %08x
+    ind psect 2: %u, decalaj 2: 0x%08x %08x
+    ind psect 3: %u, decalaj 3: 0x%08x %08x
+    psect: %u, decalaj: 0x%08x %08x
+    nume rutinÄƒ: %.*s
+   %02u    (tip: %3u, dim.: %3u):    cmd *negestionatÄƒ* %u
+   Lungime eronatÄƒ
+   Eroare: data de compilare este trunchiatÄƒ
+   Eroare: lungimea este mai micÄƒ decÃ¢t lungimea unei Ã®nregistrÄƒri EEOM
+   Eroare: lungimea este mai micÄƒ decÃ¢t lungimea unei Ã®nregistrÄƒri EMH
+   Eroare: numele modulului lipseÈ™te
+   Eroare: numele modulului este prea lung
+   Eroare: versiunea modulului lipseÈ™te
+   Eroare: versiunea modulului este prea lungÄƒ
+   Eroare: lungimea Ã®nregistrÄƒrii este mai micÄƒ decÃ¢t dimensiunea unei Ã®nregistrÄƒri EMH_MHD
+   alinierea  : 2**%u
+   aloc (lung)     : %u (0x%08x)
+   aloc (lung): %u (0x%08x)
+   ascii ident      : %.*s
+   ident binar      : 0x%08x
+   hartÄƒ de biÈ›i: 0x%08x (contor: %u):
+   adresa codului: 0x%08x
+   data compilÄƒrii          : %.17s
+   compilator   : %.*s
+   cod de completare: %u
+   drepturi de autor: %.*s
+   subtip cpu: %#lx%s
+   tip cpu:    %#lx (%s)
+   declfile: lungime: %u, fanioane: %u, id fiÈ™ier: %u
+   deflines %u
+   numele entitÄƒÈ›ii : %.*s
+   punct de intrare: 0x%08x
+   gravitatea erorii: %x
+   fiÈ™ier: %.*s
+   nume fiÈ™ier   : %.*s
+   tip fiÈ™ier: %#lx
+   fanioane         : 0x%08x   fanioane   : 0x%04x   fanioane:   %#lx
+   fanioane: %d, limbaj: %u, major: %u, minor: %u
+   fanioane: 0x%04x   formfeed
+   potrivire id     : %x
+   poziÈ›ie imagine : 0x%08x
+   numele limbajului: %.*s
+   index de legÄƒturÄƒ: %u, global: %.*s
+   index de legÄƒturÄƒ: %u, nume procedurÄƒ: %.*s
+   index de legÄƒturÄƒ: %u, procedura: %.*s
+   index de legÄƒturÄƒ: %u, psect: %u, decalaj: 0x%08x %08x
+   magic:      %#lx
+   dim. max. a Ã®nregistrÄƒrii: %u
+   numele modulului         : %.*s
+   nume modul: %.*s
+   versiunea modulului      : %.*s
+   nume            : %.*s
+   nume          : %.*s
+   nume       : %.*s
+   nr. cmds:   %#lx
+   numÄƒrul de perechi de legÄƒturÄƒ cond: %u
+   numele obiectului: %.*s
+   decalaj: 0x%08x, val: 0x%08x\
+   descr proc      : 0x%08x
+   index psect   : %u
+   index psect pentru punctul de intrare : %u
+   index psect     : %u
+   poziÈ›ie psect: %u
+   poziÈ›ie psect : 0x%08x
+   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u
+   setfile %u
+   setlnum %u
+   setrec %u
+   semnÄƒtura: %.*s
+   dim. cmds:  %#lx
+   nivelul structurii       : %u
+   decalaj vector simbol: 0x%08x
+   poziÈ›ie symvec  : 0x%08x
+   titlu: %.*s
+   fanioane de adresÄƒ de transfer: 0x%02x
+   psect de adresÄƒ de transfer   : %u
+   adresÄƒ de transfer            : 0x%08x
+   vector       : 0x%08x
+   masca vers  : 0x%08x
+   versiune:   %x
+  %s (lung=%u):
+  %u: dimensiune: %u, fanioane: 0x%02x, nume: %.*s
+  EEOM (lung=%u):
+  EGSD (lung=%u):
+  intrarea EGSD %2u (tip: %u, lung: %u):   EMH %u (lung=%u):   baza: 0x%08x %08x, dimens.: 0x%08x, protecÈ›ia: 0x%08x   base_va : 0x%08x
+  numÄƒr de biÈ›i: %u, adresa de bazÄƒ: 0x%08x
+  apelÄƒri:
+  chgprtoff : %5u
+  codeadroff: %5u, lpfixoff  : %5u
+  fixuplnk: 0x%08x %08x
+  fanioane: 0x%08x
+  iaflink : 0x%08x %08x
+  imagine %u (%u intrÄƒri)
+  imagine %u (%u intrÄƒri), decalaje:
+  lppsbfixoff: %5u
+  Ã®ncepe psect: 0x%08x, lungime: %u
+  qdotadroff: %5u, ldotadroff: %5u
+  qrelfixoff: %5u, lrelfixoff: %5u
+  cerute de %s:
+  shlextra  : %5u, permctx   : %5u
+  shlstoff  : %5u, shrimgcnt : %5u
+  dimens.: %u
+  fanioanele  fiÈ™ierului de intrare: %s  fanioanele  fiÈ™ierului de ieÈ™ire: %s %08x (<necunoscut>) 0x%08x 64B <versiune nerecunoscutÄƒ EABI> <set de biÈ›i de fanion nerecunoscut> BPAGE: %u COM COMM Modificarea protecÈ›iei (%u intrÄƒri):
+ Remedieri de referinÈ›e pentru adresa codului:
+ DEF EXE Suport FPU necesar:  Prima adresÄƒ     : 0x%08x 0x%08x
+ A patra adresÄƒ    : 0x%08x 0x%08x
+ GBL LIB CorecÈ›ii de referinÈ›Äƒ pentru perechi de legÄƒturi:
+  antet MACH-O:
+ NOMOD NORM OVR PIC QVAL RD REL Resursele Ã®ncep de la poziÈ›ia: %#03x
+ SHR A doua adresÄƒ    : 0x%08x 0x%08x
+ Imagini partajabile:
+ Imagine partajatÄƒ: 0x%08x 0x%08x
+ Tabelul de È™iruri Ã®ncepe la poziÈ›ia: %#03x
+ Tabel: Caracter: %d, Ora: %08lx, Ver: %d/%d, Num Nume: %d, ID-uri: %d
+ A treia adresÄƒ   : 0x%08x 0x%08x
+ UNI VEC VECEP WEAK WRT [double pe 64-biÈ›i] [BE8] [supliment FDPIC ABI] [format float FPA] [LE8] [format float Maverick] [format float VFP] [EABI Versiunea1] [EABI Versiunea2] [EABI Versiunea3] [EABI Versiunea4] [EABI Versiunea5] [poziÈ›ionare RAM XGATE] [abi necunoscut] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [simbolurile dinamice folosesc index de segment] [remediazÄƒ dependenÈ›ele] [valori Ã®n virgulÄƒ mobilÄƒ trecute Ã®n registrele de valori Ã®n virgulÄƒ mobilÄƒ] [g-float] [hard-float ABI] [interfuncÈ›ionare activatÄƒ] [simbolurile de cartografiere le preced pe celelalte] [memorie=model-bank] [memorie=planÄƒ(flat)] [ABI nou] [abi nedefinit] [nonpic] [nu este modul pe 32 de biÈ›i] [ABI vechi] [pic] [independent de poziÈ›ie] [executabil realocabil] [soft-float ABI] [FP software] [tabel de simboluri sortate] [simbolurile au un prefix â€ž_â€�] [ISA necunoscut] [tabel de simboluri nesortate] [v10 È™i v32] [v32] alinierea entitÄƒÈ›ilor de 8 octeÈ›i:  tabelul de module de depanare : vbn: %u, dimensiune: %u
+ tabelul de simboluri de depanare : vbn: %u, dimensiune: %u (0x%x)
+ nu s-a putut converti realocarea GOTPCREL faÈ›Äƒ de â€ž%sâ€�; editaÈ›i din nou legÄƒturile cu â€ž--no-relaxâ€�
+ reparare informaÈ›ii rva:  fanioane: 0x%04x tabelul global de simboluri: vbn: %u, Ã®nregistrÄƒri: %u
+ ident: 0x%08x, nume: %.*s
+ ident: 0x%08x, versiune sistem: 0x%08x, ctrl potriviri: %u, dimens-vect-simbol: %u
+ ident. constr. imagine  : %.*s
+ ora vinculÄƒrii          : %.*s
+ nume imagine            : %.*s
+ tip imagine: %u (%s) contor de In/IeÈ™ a imaginii: %u, numÄƒrul de canale: %u, prioritate: %08x%08x
+ ora vinculÄƒrii          : %s
+ fanioane vinculator: %08x: identificator vinculator: %.*s
+ remedieri ale referinÈ›elor .address de cuvinte lungi:
+ remedieri de realocare de cuvinte lungi:
+ id-major: %u, id-minor: %u
+ decalaj modul: 0x%08x, dimensiune: 0x%08x, (%u psects)
+ decalaje: isd: %u, activ: %u, simboluri depanare: %u, id imagine: %u, plasture: %u
+ remedieri ale referinÈ›elor .address de patru cuvinte:
+ remedieri de realocare de patru cuvinte:
+  secÈ›iune: bazÄƒ: 0x%08x%08x dimensiune: 0x%08x
+ dimensiunea de doubles:  tip: %3u, lung: %3u (la 0x%08x):  tip de Ã®nregistrare EOBJ negestionat %u
+ vbn: %u, pfc: %u, potrivire ctl: %u tip: %u ( vma:			AdresÄƒ ÃŽnceput  AdresÄƒ SfÃ¢rÈ™it   Info Unwind
+ vma:		ÃŽnceput  SfÃ¢rÈ™it  EH       EH       PrologFin. ExcepÈ›ii
+     		AdresÄƒ   AdresÄƒ  Manipulant Date    AdresÄƒ     MascÄƒ
+ vma:		ÃŽnceput  Prolog   FuncÈ›ia  Fanioane ExcepÈ›ie  EH
+     		Adresa   Lungime  Lungime  32b exc  Gestionar Date
+ vma:          Sugestie  Timp      ÃŽnainte  DLL      Primul
+                 Tabel   Marcaj    LanÈ›     Nume      Thunk
+#<cod de eroare nevalid>%%X%%P: realocarea %s faÈ›Äƒ de â€ž%sâ€� care se poate asocia extern nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�
+%%X%%P: realocare %s nerezolvabilÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�
+%03x %*.s  Foaie: Adr: %#08lx, Dim.: %#08lx, Pag.cod: %d
+%03x %*.s Intrare: %F%P: %pB(%pA): eroare: opÈ›iunea â€ž--gc-sectionsâ€� necesitÄƒ o secÈ›iune ataÈ™atÄƒ ca argument
+%F%P: %pB(%s): eroare la deschiderea membrului subÈ›ire al arhivei: %E
+%F%P: %pB: copiere realocare faÈ›Äƒ de simbolul protejat necopiabil â€ž%sâ€�
+%F%P: %pB: realocare copiere faÈ›Äƒ de simbolul protejat necopiabil â€ž%sâ€� din %pB
+%F%P: %pB: a eÈ™uat alocarea hÄƒrÈ›ii de biÈ›i DT_RELR pe 32 de biÈ›i
+%F%P: %pB: a eÈ™uat alocarea hÄƒrÈ›ii de biÈ›i DT_RELR pe 64 de biÈ›i
+%F%P: %pB: a eÈ™uat alocarea secÈ›iunii de realocare relativÄƒ compactÄƒ
+%F%P: %pB: a eÈ™uat alocarea memoriei pentru secÈ›iunea â€ž%pAâ€�
+%F%P: %pB: a eÈ™uat alocarea Ã®nregistrÄƒrii realocÄƒrii relative
+%F%P: %pB: eÈ™ec la finalizarea realocÄƒrilor relative
+%F%P: %pB: realocarea %s faÈ›Äƒ de simbolul absolut â€ž%sâ€� din secÈ›iunea â€ž%pAâ€� este interzisÄƒ
+%F%P: %pB: dimensiunea secÈ›iunii de realocare relativÄƒ compactÄƒ este schimbatÄƒ: nouÄƒ (%lu) != veche (%lu)
+%F%P: Nu s-a putut atribui â€ž%pAâ€� unei secÈ›iuni de ieÈ™ire. ReÃ®ncercaÈ›i fÄƒrÄƒ opÈ›iunea â€ž--enable-non-contiguous-regionsâ€�.
+%F%P: Nu s-a putut atribui â€ž%pAâ€� unei secÈ›iuni de ieÈ™ire. ReÃ®ncercaÈ›i fÄƒrÄƒ opÈ›iunea â€ž--enable-non-contiguous-regionsâ€�.
+%F%P: already_linked_table: %E
+%F%P: eroare de suprapunere automatÄƒ: %E
+%F%P: nu se pot construi cioturi(stubs) de suprapunere: %E
+%F%P: intrare coruptÄƒ: %pB
+%F%P: secÈ›iune de ieÈ™ire Ã®nlÄƒturatÄƒ: â€ž%pAâ€�
+%F%P: simbolul STT_GNU_IFUNC dinamic â€ž%sâ€� cu egalitatea indicatorului Ã®n â€ž%pBâ€� nu poate fi folosit cÃ¢nd se creeazÄƒ un executabil; recompilaÈ›i cu â€ž-fPIEâ€� È™i reeditaÈ›i legÄƒturile cu â€ž-pieâ€�
+%F%P: nu s-a putut crea secÈ›iunea de proprietate GNU
+%F%P: nu s-a putut crea secÈ›iunea .eh_frame PLT GOT
+%F%P: nu s-a putut crea secÈ›iunea GOT PLT
+%F%P: nu s-au putut crea secÈ›iunile GOT
+%F%P: nu s-a putut crea secÈ›iunea PLT cu IBT activat
+%F%P: nu s-a putut crea secÈ›iunea .eh_frame PLT
+%F%P: nu s-a putut crea secÈ›iunea .sframe PLT
+%F%P: nu s-au putut crea secÈ›iunile dinamice VxWorks
+%F%P: nu s-au putut crea secÈ›iunile ifunc
+%F%P: nu s-a putut crea a doua secÈ›iune .sframe PLT
+%F%P: nu s-a putut crea a doua secÈ›iune .eh_frame PLT
+%F%P: eÈ™ec la dimensionarea realocÄƒrilor relative
+%F%pA: nu s-a putut alinia secÈ›iunea
+%F%pB: depÄƒÈ™ire de decalaj relativ la PC Ã®n intrarea GOT PLT pentru â€ž%sâ€�
+%F%pB: depÄƒÈ™ire de decalaj relativ la PC Ã®n intrarea PLT pentru â€ž%sâ€�
+%F%pB: depÄƒÈ™ire de deplasare a ramurii Ã®n intrarea PLT pentru â€ž%sâ€�
+%H __tls_get_addr lost arg, optimizare TLS dezactivatÄƒ
+%H argument a pierdut __tls_get_addr, optimizarea TLS dezactivatÄƒ
+%H: %s faÈ›Äƒ de %pT nu este acceptat
+%H: %s faÈ›Äƒ de â€ž%pTâ€�: eroare %d
+%H: %s pentru funcÈ›ia indirectÄƒ â€ž%pTâ€� neacceptatÄƒ
+%H: %s Ã®n afara intervalului
+%H: %s face referire la simbolul dinamic cu adaos diferit de zero
+%H: %s referinÈ›e optimizate departe de intrarea TOC
+%H: %s realocarea faÈ›Äƒ de â€ž%sâ€�: eroare %d
+%H: realocarea %s nu este acceptatÄƒ aici
+%H: realocarea %s nu este acceptatÄƒ Ã®n bibliotecile partajate È™i PIE-uri
+%H: %s utilizat cu simbolul TLS â€ž%pTâ€�
+%H: %s utilizat cu simbolul non-TLS â€ž%pTâ€�
+%H: R_FRV_GETTLSOFF nu este aplicat unei instrucÈ›iuni de apel
+%H: R_FRV_GETTLSOFF_RELAX nu este aplicat unei instrucÈ›iuni de apel
+%H: R_FRV_GOTTLSDESC12 nu este aplicat unei instrucÈ›iuni lddi
+%H: R_FRV_GOTTLSDESCHI nu este aplicat unei instrucÈ›iuni sethi
+%H: R_FRV_GOTTLSDESCLO nu este aplicat unei instrucÈ›iuni setlo sau setlos
+%H: R_FRV_GOTTLSOFF12 nu este aplicat unei instrucÈ›iuni ldi
+%H: R_FRV_GOTTLSOFFHI nu este aplicat unei instrucÈ›iuni sethi
+%H: R_FRV_GOTTLSOFFLO nu este aplicat unei instrucÈ›iuni setlo sau setlos
+%H: R_FRV_TLSDESC_RELAX nu este aplicat unei instrucÈ›iuni ldd
+%H: R_FRV_TLSMOFFHI nu este aplicat unei instrucÈ›iuni sethi
+%H: R_FRV_TLSOFF_RELAX nu este aplicat unei instrucÈ›iuni ld
+%H: apelul la â€ž%pTâ€� este lipsit de nop, nu se poate restabili toc; (ciot(stub) de apel plt)
+%H: apelul la â€ž%pTâ€� este lipsit de nop, nu se poate restabili toc; (ciot(stub) de salvare/ajustare toc)
+%H: nu se pot emite realocÄƒri dinamice Ã®n secÈ›iunea numai-pentru-citire
+%H: nu se pot emite remedieri Ã®n secÈ›iunea numai-pentru-citire
+%H: eroare: %s faÈ›Äƒ de â€ž%sâ€� nu este un multiplu de %u
+%H: eroare: %s nu este un multiplu de %u
+%H: remediatÄƒ supraÃ®ncÄƒrcarea ramurii
+%H: optimizarea got/toc nu este acceptatÄƒ pentru instrucÈ›iunea %s
+%H: adÄƒugare non-zero Ã®n realocarea %s faÈ›Äƒ de â€ž%sâ€�
+%H: realocarea faÈ›Äƒ de â€ž%sâ€� face referire la un segment diferit
+%H: realocare faÈ›Äƒ de â€ž%sâ€�: %s
+%H: realocarea %s pentru funcÈ›ia indirectÄƒ %s nu este acceptatÄƒ
+%H: realocarea %s returneazÄƒ o valoare nerecunoscutÄƒ %x
+%H: simbolul referinÈ›elor de realocare nu este definit Ã®n modul
+%H: realocarea Ã®n â€ž%s+%vâ€� poate fi cauzat eroarea de mai sus
+%H: tipul de realocare %u nu este acceptat
+%H: %s nerezolvabil faÈ›Äƒ de â€ž%pTâ€�
+%H: realocare %s nerezolvabilÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�
+%H: avertisment: %s insn neaÈ™teptat %#x.
+%H: avertisment: realocarea din â€ž%sâ€� face referire la un segment diferit
+%P%F: opÈ›iunile â€ž--relaxâ€� È™i â€ž-râ€� nu pot fi folosite Ã®mpreunÄƒ
+%P%X: nu se poate citi simbolurile: %E
+%P%X: segmentul numai-pentru-citire are realocÄƒri dinamice
+%P: %H: eroare: %s cu instrucÈ›iunea neaÈ™teptatÄƒ %x
+%P: %pB: %s nu este acceptat pentru â€ž%pTâ€�
+%P: %pB: notÄƒ: mesajul de mai sus nu ia Ã®n considerare colectarea gunoiului din editorul de legÄƒturi
+%P: %pB: avertisment: lipseÈ™te %s
+%P: %pB: avertisment: realocare faÈ›Äƒ de â€ž%sâ€� Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�
+%P: %pB: avertisment: realocare Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�
+%P: nu se poate gÄƒsi intrarea opd toc pentru â€ž%pTâ€�
+%P: realocarea copiei faÈ›Äƒ de â€ž%pTâ€� necesitÄƒ o legÄƒturÄƒ plt leneÈ™Äƒ; evitaÈ›i configurarea LD_BIND_NOW=1 sau actualizaÈ›i gcc
+%P: copierea realocÄƒrii faÈ›Äƒ de â€ž%pTâ€� protejat este periculoasÄƒ
+%P: eroare de tabel de legÄƒturi faÈ›Äƒ de â€ž%pTâ€�
+%P: puncte de acces multiple: Ã®n modulele %pB È™i %pB
+%P: legÄƒtura realocabilÄƒ nu este acceptatÄƒ
+%P: avertisment: FuncÈ›iile indirecte GNU cu DT_TEXTREL pot avea ca rezultat o eroare de segmentare Ã®n timpul execuÈ›iei; recompilaÈ›i cu %s
+%P: avertisment: se creeazÄƒ DT_TEXTREL Ã®ntr-un PDE
+%P: avertisment: se creeazÄƒ DT_TEXTREL Ã®ntr-un PIE
+%P: avertisment: se creeazÄƒ DT_TEXTREL Ã®ntr-un obiect partajat
+%P: avertisment: realocÄƒrile de text È™i funcÈ›iile indirecte GNU pot avea ca rezultat o eroare de segmentare Ã®n timpul execuÈ›iei
+%X%H: %s faÈ›Äƒ de â€ž%sâ€�: eroare: realocarea se aplicÄƒ Ã®n afara secÈ›iunii
+%X%H: %s faÈ›Äƒ de â€ž%sâ€�: eroare: adresa È›intÄƒ de realocare este imparÄƒ
+%X%H: %s faÈ›Äƒ de â€ž%sâ€�: eroare internÄƒ: rezultat neaÈ™teptat al realocÄƒrii %d
+%X%H: apel @local la ifunc %s
+%X%H: nu se poate converti ramura dintre modurile ISA Ã®n JALX: realocare Ã®n afara intervalului
+%X%H: realocarea %s faÈ›Äƒ de â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�
+%X%H: realocarea din â€ž%sâ€� face referire la un segment diferit
+%X%H: JALX neacceptat pentru acelaÈ™i mod ISA
+%X%H: ramurÄƒ neacceptatÄƒ Ã®ntre modurile ISA
+%X%H: neacceptat bss-plt -fPIC ifunc %s
+%X%H: salt nesuportat Ã®ntre modurile ISA; luaÈ›i Ã®n considerare recompilarea cu inter-vincularea (interlinking) activatÄƒ
+%X%P: %H: realocarea %s nu este acceptatÄƒ pentru bss-plt
+%X%P: %pB(%pA): eroare: realocarea pentru poziÈ›ia %V nu are nicio valoare
+%X%P: %pB(%pA): realocarea â€ž%pRâ€� iese Ã®n afara intervalului
+%X%P: %pB(%pA): realocarea â€ž%pRâ€� nu este acceptatÄƒ
+%X%P: %pB(%pA): relocarea â€ž%pRâ€� returneazÄƒ o valoare nerecunoscutÄƒ %x
+%X%P: %pB(%pA): realocarea nu este acceptatÄƒ
+%X%P: %pB(%pA): realocare Ã®n afara intervalului
+%X%P: %pB: %s faÈ›Äƒ de %pT nu este acceptatÄƒ de â€žglibcâ€� ca realocare dinamicÄƒ
+%X%P: %pB: eroare: lipseÈ™te %s
+%X%P: Ã®ncercare de vinculare staticÄƒ a obiectului dinamic â€ž%pBâ€�
+%X%P: eroare internÄƒ: eroare Ã®n afara intervalului
+%X%P: eroare internÄƒ: eroare necunoscutÄƒ
+%X%P: eroare internÄƒ: eroare de realocare neacceptatÄƒ
+%X%P: secÈ›iunea de suprapunere %pA nu Ã®ncepe pe o linie de prestocare(cache)
+%X%P: secÈ›iunea de suprapunere %pA este mai mare decÃ¢t o linie de prestocare(cache)
+%X%P: secÈ›iunea de suprapunere %pA nu se aflÄƒ Ã®n zona de prestocare
+%X%P: secÈ›iunile de suprapunere %pA È™i %pA nu Ã®ncep la aceeaÈ™i adresÄƒ
+%X%P: eroare de analizÄƒ a stivei/lrlive: %E
+%X%P: realocÄƒrile de text È™i funcÈ›iile indirecte GNU vor avea ca rezultat o eroare de segmentare Ã®n timpul execuÈ›iei
+%Xâ€ž%sâ€� la care se face referire Ã®n secÈ›iunea â€ž%pAâ€� din %pB: este definit Ã®n secÈ›iunea eliminatÄƒ â€ž%pAâ€� din %pB
+%pA:0x%v .brinfo lrlive (%u) este diferit de ceea ce a fost determinat prin analizare (%u)
+%pA:0x%v nu a fost gÄƒsitÄƒ Ã®n tabelul de funcÈ›ii
+%pB (%s): fanion de secÈ›iune %s (%#lx) ignorat%pB .opd nu este permis Ã®n versiunea ABI %d%pB È™i %pB sunt pentru configuraÈ›ii diferite%pB È™i %pB sunt pentru nuclee diferite%pB conÈ›ine cod CRIS v32, incompatibil cu obiectele anterioare%pB conÈ›ine cod non-CRIS-v32, incompatibil cu obiectele anterioare%pB are atÃ¢t atributele Tag_MPextension_use actuale, cÃ¢t È™i cele vechi%pB nu este autorizat sÄƒ defineascÄƒ %s%pB secÈ›iunea %pA depÄƒÈ™eÈ™te dimensiunea grupului ciotului(stub)%pB numÄƒrul simbol %lu face referire la secÈ›iunea SHT_SYMTAB_SHNDX inexistentÄƒ%pB foloseÈ™te numere Ã®ntregi lungi cu precizie dublÄƒ de 64 de biÈ›i, %pB foloseÈ™te numere Ã®ntregi lungi cu precizie dublÄƒ de 128 de biÈ›i%pB utilizeazÄƒ ABI de vector AltiVec, iar %pB utilizeazÄƒ ABI de vector SPE%pB utilizeazÄƒ IBM long double, %pB utilizeazÄƒ IEEE long double%pB foloseÈ™te virgulÄƒ mobilÄƒ hardware cu precizie dublÄƒ, %pB foloseÈ™te virgulÄƒ mobilÄƒ hardware cu precizie simplÄƒ%pB foloseÈ™te virgulÄƒ mobilÄƒ hardware, %pB foloseÈ™te virgulÄƒ mobilÄƒ software%pB utilizeazÄƒ r3/r4 pentru returnÄƒri de structuri mici, iar %pB utilizeazÄƒ memoria%pB utilizeazÄƒ e_flags necunoscut 0x%lx%pB(%pA): eroare: apel la funcÈ›ia nedefinitÄƒ â€ž%sâ€�%pB(%pA): eroare: lipsesc realocÄƒrile interne pentru secÈ›iunea de realocare secundarÄƒ%pB(%pA): eroare: intrarea din tabelul de realocare %zu este goalÄƒ%pB(%pA): eroare: realocarea secundarÄƒ %zu este de un tip necunoscut%pB(%pA): eroare: realocarea secundarÄƒ %zu face referire la un simbol È™ters%pB(%pA): eroare: realocarea secundarÄƒ %zu face referire la un simbol lipsÄƒ%pB(%pA): eroare: secÈ›iunea de realocare secundarÄƒ are intrÄƒri de dimensiune nestandard%pB(%pA): eroare: secÈ›iunea de realocare secundarÄƒ are intrÄƒri de dimensiune zero%pB(%pA): eroare: secÈ›iunea de realocare secundarÄƒ este goalÄƒ!%pB(%pA): eroare: secÈ›iunea de realocare secundarÄƒ a fost procesatÄƒ de douÄƒ ori%pB(%pA): indexul secÈ›iunii de informaÈ›ii nu poate fi definit deoarece secÈ›iunea nu se aflÄƒ Ã®n ieÈ™ire%pB(%pA): indexul secÈ›iunii de informaÈ›ii este nevalid%pB(%pA):  eroare internÄƒ: realocare periculoasÄƒ%pB(%pA): eroare internÄƒ: eroare Ã®n afara intervalului%pB(%pA): eroare internÄƒ: eroare necunoscutÄƒ%pB(%pA): eroare internÄƒ: eroare de realocare neacceptatÄƒ%pB(%pA): tabel de proprietÄƒÈ›i nevalid%pB(%pA): secÈ›iunea de legÄƒturÄƒ nu poate fi definitÄƒ deoarece fiÈ™ierul de ieÈ™ire nu are un tabel de simboluri%pB(%pA): nu sunt acceptate multiple modele TLS%pB(%pA): realocarea %d are indexul de simbol nevalid %ld%pB(%pA): realocarea %zu are indexul de simbol nevalid %lu%pB(%pA): simbolul bibliotecii partajate %s Ã®ntÃ¢lnit Ã®n timpul efectuÄƒrii unei vinculÄƒri statice%pB(%pA): avertisment: faÈ›etele(veneers) de ramuri lungi utilizate Ã®n secÈ›iunea cu atributul secÈ›iunii SHF_ARM_PURECODE sunt acceptate numai pentru È›inte cu profil M care implementeazÄƒ instrucÈ›iunea movw%pB(%pA): avertisment: acces nealiniat la simbolul â€ž%sâ€� din zona de date micÄƒ%pB(%pA): avertisment: acces la date mici nealiniate de tip %d%pB(%pA+%#lx): intrarea stabs are un index de È™ir nevalid%pB(%pA+%#x): eroare: Ã®ncÄƒrcare multiplÄƒ detectatÄƒ Ã®n blocul de instrucÈ›iuni IT ce nu este ultimul: faÈ›eta(veneer) STM32L4XX nu poate fi generat; utilizaÈ›i opÈ›iunea â€žgcc -mrestrict-itâ€� pentru a genera o singurÄƒ instrucÈ›iune per bloc IT%pB(%pA+0x%lx): se aÈ™tepta o realocare de tip 16A la instrucÈ›iunea 0x%08x%pB(%pA+0x%lx): se aÈ™tepta o realocare de tip 16D la instrucÈ›iunea 0x%08x%pB(%pA+0x%v): apel la secÈ›iunea non-cod %pB(%pA), analizÄƒ incompletÄƒ
+%pB(%s): avertisment: interfuncÈ›ionarea nu este activatÄƒ; prima apariÈ›ie: %pB: apel %s cÄƒtre %s%pB, secÈ›iunea %pA:
+  realocarea %s nu este validÄƒ Ã®ntr-un obiect partajat; de obicei, o confuzie de opÈ›iuni, recompilaÈ›i cu â€ž-fPICâ€�%pB, secÈ›iunea %pA: fÄƒrÄƒ PLT pentru realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€�%pB, secÈ›iunea %pA: fÄƒrÄƒ PLT sau GOT pentru realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€�%pB, secÈ›iunea %pA: realocarea %s are o referinÈ›Äƒ nedefinitÄƒ la â€ž%sâ€�, poate o confuzie Ã®n declaraÈ›ii?%pB, secÈ›iunea %pA: realocarea %s nu este permisÄƒ pentru â€ž%sâ€�, un simbol global cu vizibilitate implicitÄƒ, poate o confuzie Ã®n declaraÈ›ii?%pB, secÈ›iunea %pA: realocarea %s nu este permisÄƒ pentru simbolul global: â€ž%sâ€�%pB, secÈ›iunea %pA: realocarea %s nu este permisÄƒ pentru simbolul: â€ž%sâ€� care este definit Ã®n afara programului, poate o confuzie Ã®n declaraÈ›ii?%pB, secÈ›iunea %pA: realocarea %s nu trebuie utilizatÄƒ Ã®ntr-un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�%pB, secÈ›iunea %pA: relaocare %s fÄƒrÄƒ GOT creat%pB, secÈ›iunea %pA: realocare nerezolvabilÄƒ %s faÈ›Äƒ de simbolul â€ž%sâ€�%pB, secÈ›iunea %pA: obiectul compatibil v10/v32 nu trebuie sÄƒ conÈ›inÄƒ o realocare PIC%pB, secÈ›iunea â€ž%pAâ€�, la simbolul â€ž%sâ€�: realocarea %s nu trebuie utilizatÄƒ Ã®ntr-un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�%pB: realocare !samegp cÄƒtre simbol fÄƒrÄƒ .prolog: %s%pB: %pA dimensiunea secÈ›iunii de intrare nu este validÄƒ%pB: %pA nu este Ã®n ordine%pB: %pA indicÄƒ dincolo de sfÃ¢rÈ™itul secÈ›iunii de text%pB: %pA: depÄƒÈ™ire de realocÄƒri: %#x > 0xffff%pB: %s (poziÈ›ie: 0x%v, informaÈ›ii: 0x%v) faÈ›Äƒ de â€ž%sâ€� pentru secÈ›iunea â€ž%pAâ€� Ã®n %pB
+%pB: %s (poziÈ›oe: 0x%v, informaÈ›ii: 0x%v, adÄƒugare: 0x%v) faÈ›Äƒ de â€ž%sâ€� pentru secÈ›iunea â€ž%pAâ€� Ã®n %pB
+%pB: nepotrivire a fanionului %s cu modulele anterioare%pB: simbolul local %s la indexul %lu (>= sh_info din %lu)%pB: %s nu este absolut%pB: %s neacceptat%pB: %s a fost accesat atÃ¢t ca simbol local normal, cÃ¢t È™i ca simbol local al firului de execuÈ›ie%pB: %s: versiune necesarÄƒ nevalidÄƒ %d%pB: %s: versiune nevalidÄƒ %u (max %d)%pB: %s: depÄƒÈ™ire de realocÄƒri: 0x%lx > 0xffff%pB: â€ž%sâ€� a fost accesat atÃ¢t ca simbol local normal, cÃ¢t È™i ca simbol local al firului de execuÈ›ie%pB: â€ž--in-implibâ€� este acceptatÄƒ numai pentru bibliotecile de import Secure Gateway%pB: intrare nevalidÄƒ .gnu.version_d%pB: intrare nevalidÄƒ .gnu.version_r%pB: subsegmentul .got depÄƒÈ™eÈ™te 64K (dimensiunea %d)%pB: .opd nu este o matrice obiÈ™nuitÄƒ de intrÄƒri opd%pB: secÈ›iunea .preinit_array section nu este permisÄƒ Ã®n DSO%pB: fuziunea .rsrc a eÈ™uat: secÈ›iunea .rsrc coruptÄƒ%pB: fuziunea .rsrc a eÈ™uat: dimensiune .rsrc neaÈ™teptatÄƒ%pB: realocare @gprel faÈ›Äƒ de simbolul dinamic %s%pB: ramurÄƒ @internal cÄƒtre simbolul dinamic %s%pB: realocare @pcrell faÈ›Äƒ de simbolul dinamic %s%pB: ABI este incompatibil cu cel al emulaÈ›iei selectate%pB: ABI este incompatibil cu cel al emulaÈ›iei selectate:
+  emulaÈ›ia È›intÄƒ â€ž%sâ€� nu se potriveÈ™te cu â€ž%sâ€�%pB: nepotrivire ABI: se vinculeazÄƒ modulul %s cu modulele %s anterioare%pB: versiunea ABI %ld nu este compatibilÄƒ cu versiunea ABI %ld de ieÈ™ire%pB: nepotrivire ASE: se vinculeazÄƒ modulul %s cu modulele %s anterioare%pB: Ajustarea ramurii de la 0x%V cÄƒtre â€ž%sâ€� Ã®n secÈ›iunea %s
+%pB: imaginile BE8 sunt valabile numai Ã®n modul big-endian%pB: C_STAT nu este acceptat de XCOFF64%pB: Nu se poate crea intrarea ciot(stub) â€ž%sâ€�%pB: nu se poate gestiona dimensiunea valorii de realocare de %d%pB: Realocarea descriptorului de funcÈ›ie cu adaos non-zero%pB: secÈ›iunea GNU_MBIND â€ž%pAâ€� are cÃ¢mpul sh_info nevalid: %d%pB: depÄƒÈ™ire GOT: numÄƒrul de realocÄƒri cu decalaj de 8 sau 16 biÈ›i > %d%pB: depÄƒÈ™ire GOT: numÄƒr de realocÄƒri cu decalaj pe 8 biÈ›i > %d%pB: dimensiunea vectorului ISR nu se potriveÈ™te cu modulele anterioare, %u-octeÈ›i cel anterior, %u-octeÈ›i cel actual%pB: NumÄƒrul de simboluri din fiÈ™ierul de intrare a crescut de la %lu la %u
+%pB: RealocÄƒri Ã®n ELF generic (EM: %d)%pB: realocare relativÄƒ SB, dar __c6xabi_DSBT_BASE nu este definit%pB: secÈ›iunea SHT_GROUP [index %d] nu are secÈ›iuni SHF_GROUP%pB: Codul executabil local TLS nu poate fi vinculat Ã®n obiecte partajate%pB: realocare TLS %s faÈ›Äƒ de simbolul nedefinit â€ž%sâ€�%pB: secÈ›iunile TLS nu sunt adiacente:%pB: intrarea TOC â€ž%sâ€� are o realocare R_TLSML care nu È›inteÈ™te spre sine%pB: prima secÈ›iune din segmentul PT_DYNAMIC nu este secÈ›iunea .dynamic%pB: Nu se poate gestiona indexul secÈ›iunii %x Ã®n simbolul ELF.  Se utilizeazÄƒ ABS Ã®n locul acestuia.%pB: obiect partajat XCOFF cÃ¢nd nu se produce ieÈ™ire XCOFF%pB: __gp nu acoperÄƒ segmentul de date scurt%pB: â€ž%sâ€� a fost accesat atÃ¢t ca simbol FDPIC, cÃ¢t È™i ca simbol local al firului de execuÈ›ie%pB: â€ž%sâ€� accesat atÃ¢t ca simbol normal, cÃ¢t È™i ca simbol FDPIC%pB: %s a fost accesat atÃ¢t ca simbol local normal, cÃ¢t È™i ca simbol local al firului de execuÈ›ie%pB: â€ž%sâ€� È™i simbolul sÄƒu special sunt Ã®n secÈ›iuni diferite%pB: â€ž%sâ€� are numere de linie, dar nu o secÈ›iune de Ã®nchidere%pB: â€ž%sâ€� Ã®n realocarea Ã®ncÄƒrcÄƒtorului, dar nu Ã®n simbolul Ã®ncÄƒrcÄƒtorului%pB: realocare non-PLT â€ž%sâ€� pentru simbolul definit Ã®n biblioteca partajatÄƒ È™i accesat din executabil (reconstruiÈ›i fiÈ™ierul cu â€ž-fPICâ€�?)%pB: simbol standard absent â€ž%sâ€�%pB: adaosul trebuie sÄƒ fie zero pentru realocÄƒri got%pB: adaosul trebuie sÄƒ fie zero pentru realocÄƒri plt%pB: se ajusteazÄƒ FileAlignment nevalidÄƒ%pB: se ajusteazÄƒ SectionAlignment nevalidÄƒ%pB: arhitectura nu se potriveÈ™te cu modulele anterioare%pB: Ã®ncercare de-a Ã®ncÄƒrca È™iruri dintr-o secÈ›iune fÄƒrÄƒ È™iruri (numÄƒrul %d)%pB: Ã®ncercare de a amesteca obiecte FDPIC È™i non-FDPIC%pB: Ã®ncercare de a scrie un tip de realocare necunoscut%pB: Ã®nregistrare de realocare greÈ™itÄƒ importatÄƒ: %d%pB: nume de secÈ›iune de realocare incorect â€ž%sâ€�%pB: lungime incorectÄƒ a secÈ›iunii Ã®n ihex_read_section%pB: index de simboluri incorect: %d%pB: realocare base-plus-offset faÈ›Äƒ de simbolul de registru: %s Ã®n %pA%pB: realocare base-plus-offset faÈ›Äƒ de simbolul de registru: (necunoscut) Ã®n %pA%pB: nu poate reprezenta secÈ›iunea â€ž%pAâ€� Ã®n format de fiÈ™ier obiect a.out%pB: nu se poate reprezenta secÈ›iunea pentru simbolul â€ž%sâ€� Ã®n formatul de fiÈ™ier obiect a.out%pB: nu se pot vincula %s module cu %s module%pB: nu se poate vincula RVE cu altÄƒ È›intÄƒ%pB: nu se poate vincula un obiect ABI diferit.%pB: nu se poate aloca nume de fiÈ™ier pentru fiÈ™ierul numÄƒrul %d, %d octeÈ›i
+%pB: nu se poate aloca memorie pentru intrÄƒrile GOT locale%pB: nu se poate crea intrarea ciot(stub) %s%pB: nu se poate exporta simbolul intern â€ž%sâ€�.%pB: nu se pot gestiona fiÈ™ierele binare Alpha comprimate; utilizaÈ›i opÈ›iunile compilatorului, sau objZ, pentru a genera fiÈ™iere binare necomprimate%pB: nu se poate vincula fiÈ™ierul obiect fdpic la executabil non-fdpic%pB: nu se poate vincula fiÈ™ierul obiect non-fdpic la executabilul fdpic%pB: nu se pot vincula Ã®mpreunÄƒ obiectele %s È™i %s%pB: schimbare Ã®n gp: BRSGP %s%pB: clasa %d simbolul â€ž%s'â€� nu are intrÄƒri auxiliare%pB: compilat %s -mtune=%s È™i vinculat cu modulele compilate %s -mtune=%s%pB: compilat pentru un sistem pe 64 de biÈ›i È™i È›inta este pe 32 de biÈ›i%pB: compilat pentru un sistem big-endian iar È›inta este little-endian%pB: compilat pentru un sistem little-endian iar È›inta este big-endian%pB: compilat normal È™i vinculat cu module compilate cu â€ž-mrelocatableâ€�%pB: compilat cu %s È™i vinculat cu module compilate cu %s%pB: compilat cu %s È™i vinculat cu module care folosesc realocÄƒri non-pic%pB: compilat cu â€ž-mrelocatableâ€� È™i vinculat cu module compilate normal%pB: ramura condiÈ›ionatÄƒ la simbolul nedefinit â€ž%sâ€� nu este permisÄƒ%pB: nu s-a putut gÄƒsi secÈ›iunea de ieÈ™ire %pA pentru secÈ›iunea de intrare %pA%pB: nu s-a putut citi conÈ›inutul secÈ›iunii â€ž%pAâ€�
+%pB: csect â€ž%sâ€� nu este Ã®n secÈ›iunea de Ã®nchidere%pB: realocarea GOT directÄƒ %s faÈ›Äƒ de â€ž%sâ€� fÄƒrÄƒ registrul de bazÄƒ nu poate fi utilizatÄƒ cÃ¢nd se creeazÄƒ un obiect partajat%pB: realocarea GOT directÄƒ, R_386_GOT32X faÈ›Äƒ de â€ž%sâ€� fÄƒrÄƒ registru de bazÄƒ nu poate fi utilizatÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat%pB: directiva LOCAL este validÄƒ doar cu un registru sau o valoare absolutÄƒ%pB: realocare relativÄƒ-dtp faÈ›Äƒ de simbolul dinamic %s%pB: ciot(stub) de exportare duplicat %s%pB: secÈ›iunea duplicatÄƒ â€ž%pAâ€� are conÈ›inut diferit
+%pB: secÈ›iunea duplicatÄƒ â€ž%pAâ€� are dimensiune diferitÄƒ
+%pB: obiect dinamic fÄƒrÄƒ secÈ›iune .loader%pB: realocare dinamicÄƒ faÈ›Äƒ de â€ž%pTâ€� Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�
+%pB: realocare dinamicÄƒ faÈ›Äƒ de un simbol local Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�
+%pB: realocare dinamicÄƒ Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�
+%pB: tip de endianness incompatibil cu cel al emulaÈ›iei selectate%pB: funcÈ›ia de intrare â€ž%sâ€� este goalÄƒ%pB: funcÈ›ia de intrare â€ž%sâ€� nu produce ieÈ™ire%pB: eroare: ABI nu se potriveÈ™te cu modulele anterioare%pB: eroare: ciotul(stub) de eroare Cortex-A8 este alocat Ã®ntr-o locaÈ›ie nesigurÄƒ%pB: eroare: ciotul(stub) de eroare Cortex-A8 Ã®n afara intervalului (fiÈ™ierul de intrare este prea mare)%pB: eroare: segmentul PHDR nu este acoperit de segmentul LOAD%pB: eroare: faÈ›eta(veneer) VFP11 Ã®n afara intervalului%pB: eroare: puterea de aliniere %d a secÈ›iunii â€ž%pAâ€� este prea mare%pB: eroare: secÈ›iunea de atribut â€ž%pAâ€� prea mare: %#llx%pB: eroare: lungimea secÈ›iunii de atribut prea micÄƒ: %ld%pB: eroare: nu se poate crea faÈ›eta(veneer) STM32L4XX%pB: eroare: datele de depanare se terminÄƒ dincolo de sfÃ¢rÈ™itul directorului de depanare%pB: eroare: Â«erratum 835769Â» ciot(stub) Ã®n afara intervalului (fiÈ™ierul de intrare este prea mare)%pB: eroare: Â«erratum 843419Â» ciot(stub) Ã®n afara intervalului (fiÈ™ierul de intrare este prea mare)%pB: eroare: setul de instrucÈ›iuni nu se potriveÈ™te cu modulele anterioare%pB: eroare: multiple definiÈ›ii pentru â€ž%sâ€�; Ã®nceputul lui %s este stabilit Ã®ntr-un fiÈ™ier vinculat anterior%pB: eroare: segmentul neÃ®ncÄƒrcat %d include antetul fiÈ™ierului È™i/sau antetul programului%pB: eroare: search_nds32_elf_blank raporteazÄƒ nodul greÈ™it%pB: eroare: simbol neaÈ™teptat â€ž%sâ€� Ã®n secÈ›iunea COMDAT%pB: eroare: atribut de obiect EABI obligatoriu necunoscut %d%pB: indicele de simbol aÈ™teptat Ã®n intervalul 0..%lu, dar a fost gÄƒsit un simbol local cu indicele %lu%pB: nu s-a gÄƒsit secÈ›iunea de informaÈ›ii pentru secÈ›iunea %d%pB: nu s-a gÄƒsit secÈ›iunea de legÄƒturÄƒ pentru secÈ›iunea %d%pB: eÈ™ec la generarea bibliotecii de import%pB: nu s-a putut citi secÈ›iunea de date de depanare%pB: fatal: simboluri generice recuperate Ã®nainte de relaxare%pB: clasa de fiÈ™iere %s este incompatibilÄƒ cu %s%pB: realocare gotoff faÈ›Äƒ de simbolul dinamic %s%pB: realocare relativÄƒ-gp faÈ›Äƒ de simbolul dinamic %s%pB: secÈ›iunea de grup â€ž%pAâ€� nu are conÈ›inut%pB: simbolul ascuns â€ž%sâ€� din %pB este referit de cÄƒtre DSO%pB: simbolul ascuns â€ž%sâ€� nu este definit%pB: se ignorÄƒ secÈ›iunea duplicatÄƒ â€ž%pAâ€�
+%pB: nume de secÈ›iune ilegal â€ž%pAâ€�%pB: index de simbol ilegal %ld Ã®n realocÄƒri%pB: tip de maÈ™inÄƒ incompatibil; ieÈ™irea este 0x%x; intrarea este 0x%x%pB: dimensiune incorectÄƒ pentru simbolul â€ž%sâ€�%pB: simbolul indirect â€ž%sâ€� pentru â€ž%sâ€� este o buclÄƒ%pB: setul de instrucÈ›iuni nu se potriveÈ™te cu modulele anterioare%pB: eroare internÄƒ Ã®n ihex_read_section%pB: eroare internÄƒ, secÈ›iunea de registru internÄƒ %pA nu are conÈ›inut
+%pB: eroare internÄƒ, tabelul de simboluri È™i-a schimbat dimensiunea de la %d la %d cuvinte
+%pB: simbolul intern â€ž%sâ€� din %pB este referit de cÄƒtre DSO%pB: simbolul intern â€ž%sâ€� nu este definit%pB: NumberOfRvaAndSizes nevalid%pB: intrare nevalidÄƒ Ã®n secÈ›iunea SHT_GROUP [%u]%pB: intrare in bibliotecÄƒ de import nevalidÄƒ: â€ž%sâ€�; simbolul trebuie sÄƒ fie absolut, global È™i sÄƒ se refere la funcÈ›iile Thumb%pB: legÄƒturÄƒ nevalidÄƒ %u pentru secÈ›iunea de realocare %s (index %u)%pB: fiÈ™ier mmo nevalid: YZ al lop_end (%ld) nu este egal cu numÄƒrul de tetras ale lop_stab precedent (%ld)
+%pB: fiÈ™ier mmo nevalid: pentru lop_quote se aÈ™tepta YZ = 1 s-a primit YZ= %d
+%pB: fiÈ™ier mmo nevalid: pentru lop_fixrx se aÈ™tepta y =0, s-a primit y = %d
+%pB: fiÈ™ier mmo nevalid: pentru lop_fixo se aÈ™tepta z =1 sau z = 2, s-a primit z = %d
+%pB: fiÈ™ier mmo nevalid: pentru lop_loc se aÈ™tepta z =1 sau z = 2, s-a primit z = %d
+%pB: fiÈ™ier mmo nevalid: pentru lop_fixrx se aÈ™tepta z =16 sau z = 24, s-a primit z = %d
+%pB: fiÈ™ier mmo nevalid: cÃ¢mpurile y È™i z ale lop_stab sunt non-zero: y: %d, z: %d
+%pB: fiÈ™ier mmo nevalid: numele de fiÈ™ier pentru numÄƒrul %d nu a fost specificat Ã®nainte de folosire
+%pB: fiÈ™ier mmo nevalid: numÄƒrul fiÈ™ierului %d â€ž%sâ€�, a fost deja introdus ca â€ž%sâ€�
+%pB: fiÈ™ier mmo nevalid: valoarea de iniÈ›ializare pentru $255 nu este â€žMainâ€�
+%pB: fiÈ™ier mmo nevalid: pentru lop_fixrx octetul de Ã®nceput al operandului word trebuie sÄƒ fie 0 sau 1, s-a primit %d
+%pB: fiÈ™ier mmo nevalid: lop_end nu este ultimul element din fiÈ™ier
+%pB: fiÈ™ier mmo nevalid: lopcode neacceptat â€ž%dâ€�
+%pB: cÃ¢mp sh_link nevalid (%d) Ã®n secÈ›iunea numÄƒrul %d%pB: simbol special nevalid â€ž%sâ€�; trebuie sÄƒ fie un simbol de funcÈ›ie globalÄƒ sau slabÄƒ%pB: simbol standard nevalid â€ž%sâ€�; trebuie sÄƒ fie un simbol de funcÈ›ie globalÄƒ sau slabÄƒ%pB: tabel de simboluri nevalid: simbol duplicat â€ž%sâ€�
+%pB: decalaj de versiune nevalid %lx (maxim %lx)%pB: depÄƒÈ™ire a numÄƒrului de linii: 0x%lx > 0xffff%pB: se vinculeazÄƒ modulul %s cu modulele %s anterioare%pB: se vinculeazÄƒ cod pe 32 de biÈ›i cu un cod pe 64 de biÈ›i%pB: vinculare fiÈ™iere pe 64-biÈ›i cu fiÈ™iere pe 32-biÈ›i%pB: se vinculeazÄƒ cod specific UltraSPARC cu cod specific HAL%pB: vinculare fiÈ™iere auto-pic cu fiÈ™iere non-auto-pic%pB: vinculare fiÈ™iere big-endian cu fiÈ™iere little-endian%pB: vinculare fiÈ™iere constant-gp cu fiÈ™iere non-constant-gp%pB: se vinculeazÄƒ fiÈ™iere compilate pentru numere Ã®ntregi pe 16 biÈ›i (-mshort) È™i altele pentru numere Ã®ntregi pe 32 de biÈ›i%pB: se vinculeazÄƒ fiÈ™iere compilate pentru double pe 32-biÈ›i (-fshort-double) È™i altele pentru double pe 64-biÈ›i%pB: se vinculeazÄƒ fiÈ™iere compilate pentru HCS12 cu altele compilate pentru HC12%pB: se vinculeazÄƒ fiÈ™iere little-endian cu fiÈ™iere big-endian%pB: se vinculeazÄƒ codul non-pic Ã®ntr-un executabil independent de poziÈ›ie%pB: vinculare trap-on-NULL-dereference cu fiÈ™iere non-trapping%pB: realocarea Ã®ncÄƒrcÄƒtorului Ã®n secÈ›iunea numai-pentru-citire %pA%pB: realocarea Ã®ncÄƒrcÄƒtorului Ã®n secÈ›iunea nerecunoscutÄƒ â€ž%sâ€�%pB: simbolul local â€ž%sâ€� din %pB este referit de cÄƒtre DSO%pB: tabelul de descriptori de simbol local poate sÄƒ fie NULL atunci cÃ¢nd se aplicÄƒ realocarea %s faÈ›Äƒ de simbolul local%pB: fanionul de maÈ™inÄƒ Ã®n conflict cu È›inta%pB: realocare incorect formatÄƒ detectatÄƒ pentru secÈ›iunea %pA%pB: realocare incorect formatÄƒ detectatÄƒ pentru secÈ›iunea %s%pB: XTY_LD â€ž%sâ€� plasat greÈ™it%pB: OMIT_FP imbricat Ã®n %pA%pB: nu existÄƒ un nucleu pentru a aloca un simbol lungime %d octeÈ›i%pB: nu existÄƒ informaÈ›ii de grup pentru secÈ›iunea â€ž%pAâ€�%pB: nu existÄƒ registre iniÈ›ializate; lungimea secÈ›iunii 0
+%pB: nu a fost gÄƒsit niciun simbol pentru biblioteca de import%pB: nicio secÈ›iune de versiune a simbolului pentru simbolul cu versiunea â€ž%sâ€�%pB: nu au fost gÄƒsite secÈ›iuni de grup valide%pB: referinÈ›Äƒ necanonicÄƒ la funcÈ›ia protejatÄƒ canonicÄƒ â€ž%sâ€� Ã®n %pB%pB: cod non-pic cu realocare imm faÈ›Äƒ de simbolul dinamic â€ž%sâ€�%pB: realocare non-pic faÈ›Äƒ de simbolul %s%pB: nu este suficient spaÈ›iu pentru antetele programului, Ã®ncercaÈ›i sÄƒ faceÈ›i editarea legÄƒturilor cu opÈ›iunea â€ž-Nâ€�%pB: nu sunt suficiente informaÈ›ii despre versiune%pB: numai registrele %%g[2367] pot fi declarate utilizÃ¢nd STT_REGISTER%pB: memorie insuficientÄƒ pentru crearea numelui pentru secÈ›iunea goalÄƒ%pB: memorie insuficientÄƒ Ã®n _bfd_elf_get_property%pB: pragul maxim al contorului de realocÄƒri este prea mic%pB: realocare relativÄƒ-pc faÈ›Äƒ de simbolul dinamic %s%pB: realocare relativÄƒ la pc faÈ™Äƒ de simbolul slab nedefinit %s%pB: este necesar un modul pentru a gestiona obiectul lto%pB: probabil compilat fÄƒrÄƒ â€ž-fPICâ€�?%pB: simbolul protejat â€ž%sâ€� nu este definit%pB: tip de maÈ™inÄƒ recunoscut, dar negestionat (0x%x) Ã®n arhiva Format de bibliotecÄƒ de import%pB:realocare de registru pentru simbolul non-registru: %s Ã®n %pA%pB: realocare de registru faÈ›Äƒ de simbolul non-registru: (necunoscut) Ã®n %pA%pB: realocarea %#x nu este acceptatÄƒ%pB: realocare faÈ›Äƒ de un index de simbol inexistent: %ld%pB: legÄƒtura realocabilÄƒ de la %s la %s nu este acceptatÄƒ%pB: realocarea %s faÈ›Äƒ de %s%sâ€ž%sâ€� nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ %s%s%pB: realocarea %s faÈ›Äƒ de simbolul STT_GNU_IFUNC â€ž%sâ€� nu este gestionatÄƒ de %s%pB: realocarea %s faÈ›Äƒ de simbolul STT_GNU_IFUNC â€ž%sâ€� nu este acceptatÄƒ%pB: relocarea %s faÈ›Äƒ de â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat%pB: realocarea %s faÈ›Äƒ de â€ž%sâ€� nu poate fi utilizatÄƒ cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�%pB: realocarea %s faÈ›Äƒ de simbolul absolut â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat%pB: realocarea %s faÈ›Äƒ de simbolul extern sau nedefinit â€ž%sâ€� nu poate fi folositÄƒ la crearea unui %s; recompilaÈ›i cu â€ž-fPICâ€�%pB: realocarea %s faÈ›Äƒ de simbolul non-absolut â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat%pB: realocarea %s faÈ›Äƒ de simbolul non-absolut â€ž%sâ€� nu poate fi folositÄƒ Ã®n RV64 cÃ¢nd se creeazÄƒ un obiect partajat%pB: realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€� nu este acceptatÄƒ Ã®n modul x32%pB: realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€� care se poate asocia extern nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�%pB: realocarea %s nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�%pB: realocarea %s nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat%pB: realocare %s depÄƒÈ™ire 0x%lx%pB: realocare %s deplasare dreapta %d eroare 0x%lx%pB: realocarea R_386_GOTOFF faÈ›Äƒ de %s protejat â€ž%sâ€� nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat%pB: realocarea R_386_GOTOFF faÈ›Äƒ de %s nedefinit â€ž%sâ€� nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat%pB: realocarea R_X86_64_GOTOFF64 faÈ›Äƒ de %s protejait â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat%pB: realocarea R_X86_64_GOTOFF64 faÈ›Äƒ de %s nedefinit â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat%pB: nepotrivire a dimensiunii realocÄƒrii din %pB secÈ›iunea %pA%pB: realocÄƒri Ã®n ELF generic (EM: %d)%pB: realocÄƒri in sectiunea â€ž%pAâ€�, dar aceasta nu are conÈ›inut%pB: secÈ›iunea %pA: depÄƒÈ™ire a tabelului de È™iruri la poziÈ›ia %ld%pB: secÈ›iunea %s este comprimatÄƒ cu zstd, dar BFD nu este construit cu suport pentru zstd%pB: secÈ›iunea â€ž%pAâ€�: intrarea VTENTRY coruptÄƒ%pB: secÈ›iunea â€ž%pAâ€� nu poate fi alocatÄƒ Ã®n segmentul %d%pB: numÄƒrul de intrare al grupului de secÈ›iune %u este corupt%pB: sh_link [%d] din secÈ›iunea â€ž%pAâ€� este incorect%pB: sh_link a secÈ›iunii â€ž%pAâ€� indicÄƒ cÄƒtre secÈ›iunea Ã®nlÄƒturatÄƒ â€ž%pAâ€� din â€ž%pBâ€�%pB: sh_link a secÈ›iunii â€ž%pAâ€� indicÄƒ cÄƒtre secÈ›iunea eliminatÄƒ â€ž%pAâ€� din â€ž%pBâ€�%pB: cÃ¢mpul de dimensiune este zero Ã®n antetul Format de bibliotecÄƒ de import%pB: simbolul special â€ž%sâ€� este permis doar pentru arhitectura ARMv8-M sau mai recentÄƒ%pB: remedierea speculaÈ›iei la simbolul dinamic %s%pB: dimensiunea stivei specificatÄƒ È™i %s definitÄƒ%pB: È™irul nu este terminat cu nul Ã®n fiÈ™ierul obiect ILF%pB: suportul pentru dinamic local nu este implementat%pB: simbolul â€ž%sâ€� are tipul de csect nerecunoscut %d%pB: simbolul â€ž%sâ€� are smclas nerecunoscut %d%pB: simbolul â€ž%sâ€� este necesar, dar nu este prezent%pB: simbolul indicÄƒ suprapunerea (nu este acceptat)%pB: numele simbolului depÄƒÈ™eÈ™te lungimea maximÄƒ datÄƒ de %d%pB: obÈ›inerea adresei funcÈ›iei protejate â€ž%sâ€� nu poate fi fÄƒcutÄƒ atunci cÃ¢nd se creeazÄƒ o bibliotecÄƒ partajatÄƒ%pB: È›inta (%s) a unei realocÄƒri %s este Ã®n secÈ›iunea de ieÈ™ire greÈ™itÄƒ (%s)%pB: È›inta (%s) unei realocÄƒri %s este Ã®n secÈ›iunea greÈ™itÄƒ (%pA)%pB: prea multe secÈ›iuni (%d)%pB: prea multe secÈ›iuni: %d (>= %d)%pB: prea multe secÈ›iuni: %u%pB: realocare relativÄƒ-tp faÈ›Äƒ de simbolul dinamic %s%pB: nu se poate comprima secÈ›iunea %s%pB: nu se poate crea o secÈ›iune goalÄƒ falsÄƒ%pB: nu se poate decomprima secÈ›iunea %s%pB: nu se poate completa DataDictionary[12] deoarece .data$5 lipseÈ™te%pB: nu se poate completa DataDictionary[1] deoarece .data$2 lipseÈ™te%pB: nu se poate completa DataDictionary[1] deoarece .data$4 lipseÈ™te%pB: nu se poate completa DataDictionary[9] deoarece __tls_used lipseÈ™te%pB: nu se poate completa DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] deoarece .idata$6 lipseÈ™te%pB: nu se poate completa DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] deoarece .idata$6 lipseÈ™te%pB: nu s-a putut gÄƒsi %s faÈ›eta(veneer) â€ž%sâ€�%pB: nu se poate gÄƒsi numele pentru secÈ›iunea goalÄƒ%pB: nu se poate obÈ›ine secÈ›iunea decomprimatÄƒ %pA%pB: nu se poate Ã®ncÄƒrca numele secÈ›iunii COMDAT%pB: nu se pot sorta realocÄƒrile - acestea au mai multe dimensiuni%pB: nu se pot sorta realocÄƒrile - acestea au o dimensiune necunoscutÄƒ%pB: referinÈ›Äƒ nedefinitÄƒ la simbolul â€ž%sâ€�%pB: simbol nedefinit â€ž%sâ€� Ã®n secÈ›iunea .opd%pB: simbol nedefinit la realocarea R_PPC64_TOCSAVE%pB: redefinire neaÈ™teptatÄƒ a simbolului cu versiune indirectÄƒ â€ž%sâ€�%pB: tip de realocare neaÈ™teptat %u Ã®n secÈ›iunea .opd%pB: realocare dinamicÄƒ negestionatÄƒ faÈ›Äƒ de %s%pB: tip de import negestionat; %x%pB: valoarea maÈ™inii sparc negestionatÄƒ â€ž%luâ€� a fost detectatÄƒ Ã®n timpul procesÄƒrii de scriere%pB: arhitecturÄƒ necunoscutÄƒ %s%pB: comandÄƒ de Ã®ncÄƒrcare necunoscutÄƒ %#x%pB: atribut de obiect ARC obligatoriu necunoscut %d%pB: atribut de obiect EABI obligatoriu necunoscut %d%pB tip necunoscut de realocare %d%pB: tip necunoscut [%#x] de secÈ›iune â€ž%sâ€�%pB: tip necunoscut [%#x] de secÈ›iune â€ž%sâ€� Ã®n grupul [%pA]%pB: OMIT_FP fÄƒrÄƒ pereche Ã®n %pA%pB: tip de maÈ™inÄƒ nerecunoscut (0x%x) Ã®n arhiva Format de bibliotecÄƒ de import%pB: tip de nume de import nerecunoscut; %x%pB: tip de import nerecunoscut; %x%pB: tip de realocare nerecunoscut %#x Ã®n secÈ›iunea â€ž%pAâ€�%pB: clasÄƒ de stocare nerecunoscutÄƒ %d pentru simbolul %s â€ž%sâ€�%pB: dimensiune de realocare AOUT neacceptatÄƒ: %d%pB: arhitecturÄƒ neacceptatÄƒ %#x%pB: mach bfd neacceptat %#lx%pB: tip de realocare bfd neacceptat %#x%pB: mach neacceptat %#x%pB: apel non-PIC neacceptat cÄƒtre IFUNC â€ž%sâ€�%pB: tip de realocare neacceptat%pB: tip de realocare neacceptat %#x%pB: tip de relocare neacceptat %s%pB: tip de realocare neacceptat exportat: %#x%pB: tip de realocare neacceptat importat: %#x%pB: tip de realocare neacceptat: %#x%pB: swap_aux_in neacceptat pentru clasa de stocare %#x%pB: swap_aux_out neacceptat pentru clasa de stocare %#x%pB: tranziÈ›ie neacceptatÄƒ de la %s la %s%pB: secvenÈ›Äƒ de caractere largÄƒ neacceptatÄƒ 0x%02X 0x%02X dupÄƒ numele simbolului care Ã®ncepe cu â€ž%sâ€�
+%pB: utilizeazÄƒ %s instrucÈ›iuni Ã®n timp ce modulele anterioare utilizeazÄƒ %s instrucÈ›iuni%pB: utilizeazÄƒ simboluri prefixate cu â€ž_â€�, dar scrie fiÈ™ierul cu simboluri fÄƒrÄƒ prefix%pB: foloseÈ™te cÃ¢mpuri e_flags (%#x) diferite faÈ›Äƒ de modulele anterioare (%#x)%pB: foloseÈ™te cÃ¢mpuri e_flags necunoscute (%#x) diferite faÈ›Äƒ de modulele anterioare (%#x)%pB: utilizeazÄƒ instrucÈ›iuni care sunt incompatibile cu instrucÈ›iunile utilizate Ã®n modulele anterioare%pB: utilizeazÄƒ simboluri fÄƒrÄƒ prefix, dar se scrie fiÈ™ierul cu simboluri prefixate cu â€ž_â€�%pB: nodul de versiune nu a fost gÄƒsit pentru simbolul %s%pB: vizibilitatea simbolului â€ž%sâ€� s-a schimbat%pB: avertisment: fiÈ™ierul core a fost trunchiat%pB: avertisment: %pA: depÄƒÈ™ire numÄƒr de linii: %#x > 0xffff%pB: avertisment: instrucÈ›iunea %s BLX vizeazÄƒ funcÈ›ia %s â€ž%sâ€�%pB: avertisment: realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€� din secÈ›iunea %pA%pB: avertisment: %s nu este acceptat Ã®n modul partajat%pB: avertisment: %s: depÄƒÈ™ire a numÄƒrului de linii: 0x%lx > 0xffff%pB: avertisment: BTI activat prin â€ž-z force-btiâ€� atunci cÃ¢nd toate intrÄƒrile nu au BTI Ã®n secÈ›iunea NOTE.%pB: avertisment: simbolul COMDAT â€ž%sâ€� nu se potriveÈ™te cu numele secÈ›iunii â€ž%sâ€�%pB: avertisment: generarea PLT RVE nu este acceptatÄƒ%pB: avertisment: R_R_RISCV_SUB_ULEB128 cu adaos diferit de zero, vÄƒ rugÄƒm sÄƒ reconstruiÈ›i cu binutils versiunea 2.42 sau mai recentÄƒ%pB: avertisment: TLS slab este definit de implementare È™i este posibil sÄƒ nu funcÈ›ioneze conform aÈ™teptÄƒrilor%pB: avertisment: secÈ›iunea alocatÄƒ â€ž%sâ€� nu este Ã®n segment%pB: avertisment: opÈ›iunea â€ž%sâ€� greÈ™itÄƒ, dimensiunea %u mai micÄƒ decÃ¢t antetul sÄƒu%pB: avertisment: nu se poate determina funcÈ›ia È›intÄƒ pentru secÈ›iunea ciot(stub) â€ž%sâ€�%pB: avertisment: pretinde cÄƒ are 0xffff realocÄƒri, fÄƒrÄƒ depÄƒÈ™ire%pB: avertisment: informaÈ›ii despre numÄƒrul liniei duplicate pentru â€ž%sâ€�%pB: avertisment: tipul de endianess nu se potriveÈ™te cu modulele anterioare%pB: avertisment: se ignorÄƒ fanionul secÈ›iunii %s Ã®n secÈ›iunea %s%pB: avertisment: simbol ilegal Ã®n intrarea cu numÄƒrul de linie %d%pB: avertisment: index de simbol ilegal %ld Ã®n realocÄƒri%pB: avertisment: index de simbol ilegal 0x%lx Ã®n intrarea cu numÄƒrul de linie %d%pB: avertisment: versiuni elf incompatibile %s È™i %s%pB: avertisment: ASE-uri inconsistente Ã®ntre e_flags È™i .MIPS.abiflags%pB: warning: ABI FP inconsistent Ã®ntre .gnu.attributes È™i .MIPS.abiflags%pB: avertisment: ISA inconsistent Ã®ntre e_flags È™i .MIPS.abiflags%pB: avertisment: extensii ISA inconsistente Ã®ntre e_flags È™i .MIPS.abiflags%pB: avertisment: isymMax (%ld) este mai mare decÃ¢t ifdMax (%ld)%pB: avertisment: citirea tabelului cu numere de linie a eÈ™uat%pB: avertisment: se vinculeazÄƒ fiÈ™ierele PIC cu fiÈ™iere non-PIC%pB: avertisment: se vinculeazÄƒ fiÈ™iere abicals cu fiÈ™iere non-abicals%pB: avertisment: buclÄƒ Ã®n dependenÈ›e de secÈ›iune detectatÄƒ%pB: avertisment: multiple tabele de simboluri dinamice detectate - se ignorÄƒ tabelul din secÈ›iunea %u%pB: avertisment: multiple tabele de simboluri detectate - se ignorÄƒ tabelul din secÈ›iunea %u%pB: avertisment: nu a fost gÄƒsit niciun simbol pentru secÈ›iunea â€ž%sâ€�%pB: avertisment: s-a Ã®ntÃ¢lnit o versiune mai veche a fiÈ™ierului obiect, se recomandÄƒ sÄƒ se recompileze cu lanÈ›ul de instrumente curent%pB: avertisment: realocarea SDA_BASE a eÈ™uat%pB: avertisment: secÈ›iunea secundarÄƒ de realocare â€ž%sâ€� pentru secÈ›iunea %pA, a fost gÄƒsitÄƒ - se ignorÄƒ%pB: avertisment: soluÈ›ia de eroare STM32L4XX selectatÄƒ nu este necesarÄƒ pentru arhitectura È›intÄƒ%pB: avertisment: soluÈ›ia de eroare VFP11 selectatÄƒ nu este necesarÄƒ pentru arhitectura È›intÄƒ%pB: avertisment: tabelul de simboluri este prea mare pentru mmo, mai mare de 65535 de cuvinte pe 32 de biÈ›i: %d.  Doar â€žMainâ€� va fi emis.
+%pB: avertisment: generarea PLT Ã®n modul thumb-1 nu este acceptatÄƒ Ã®n prezent%pB: avertisment: opÈ›iunea â€ž%sâ€� este trunchiatÄƒ%pB: avertisment: nu se poate aloca nicio secÈ›iune segmentului PT_GNU_RELRO%pB: avertisment: acces nealiniat la intrarea GOT%pB: warning: fanion neaÈ™teptat Ã®n cÃ¢mpul flags2 din .MIPS.abiflags (0x%lx)%pB: avertisment: atribut de obiect EABI necunoscut %d%pB: avertisment: win32pstatus %s cu dimensiunea de %lu octeÈ›i este prea mic%pB: nu se va rezolva realocarea TLS Ã®n timpul de execuÈ›ie%pB: win32pstatus NOTE_INFO_MODULE cu dimensiunea de %lu este prea mic pentru a conÈ›ine un nume de dimensiunea %u%pB: tip auxiliar greÈ™it (auxtype) %#x, pentru clasa de stocare %#x%pB:%.8s: RVA trunchiat%pB:%.8s: secÈ›iune de sub baza imaginii%pB:%d: sumÄƒ de verificare greÈ™itÄƒ Ã®n fiÈ™ierul S-record%pB:%d: numÄƒrul de octeÈ›i %d este prea mic%pB:%d: caracter neaÈ™teptat â€ž%sâ€� Ã®n fiÈ™ierul Intel Hex%pB:%d: caracter neaÈ™teptat â€ž%sâ€� Ã®n fiÈ™ierul S-record%pB:%pA%s depÄƒÈ™eÈ™te dimensiunea suprapunerii
+%pB:%pA: %s È™i %s trebuie sÄƒ se afle Ã®n aceeaÈ™i secÈ›iune de intrare%pB:%pA: eroare: Ã®ncercare de a scrie dincolo de sfÃ¢rÈ™itul secÈ›iunii%pB:%pA: eroare: Ã®ncercare de a scrie secÈ›iunea Ã®ntr-un fiÈ™ier de memorie tampon gol%pB:%pA: eroare: realocarea face referire la simbolul %s care a fost eliminat de colectarea deÈ™eurilor (garbage collection)%pB:%pA: eroare: Ã®ncercaÈ›i sÄƒ reeditaÈ›i legÄƒturile cu â€ž--gc-keep-exportedâ€� activat%pB:%pA: tabelul %s lipseÈ™te %s corespunzÄƒtor%pB:%pA: intrarea %s din tabel nu este aliniatÄƒ cu cuvÃ¢ntul Ã®n cadrul tabelului%pB:%pA: intrare Ã®n tabel %s Ã®n afara tabelului%pB:%pA: avertisment: realocarea Red Hat depreciatÄƒ %s a fost detectatÄƒ asupra lui: %s%pB:%s are atÃ¢t realocÄƒri normale, cÃ¢t È™i realocÄƒri TLS%pB:%s secÈ›iunea %s: aliniatul 2**%u nu este reprezentabil%pB:%u: sumÄƒ de verificare greÈ™itÄƒ Ã®n fiÈ™ierul Intel Hex (se aÈ™tepta %u, s-a gÄƒsit %u)%pB:%u: lungime incorectÄƒ a Ã®nregistrÄƒrii adresei extinse Ã®n fiÈ™ierul Intel Hex%pB:%u: lungime incorectÄƒ a Ã®nregistrÄƒrii adresei liniare extinse Ã®n fiÈ™ierul Intel Hex%pB:%u: lungime incorectÄƒ a adresei de Ã®nceput liniarÄƒ extinsÄƒ Ã®n fiÈ™ierul Intel Hex%pB:%u: lungime incorectÄƒ a adresei de Ã®nceput extinse Ã®n fiÈ™ierul Intel Hex%pB:%u: tip ihex nerecunoscut %u Ã®n fiÈ™ierul Intel Hex%pB[%pA]: nicio secÈ›iune de ieÈ™ire pentru spaÈ›iul %pA%pcrel_lo lipseÈ™te potrivirea cu %pcrel_hi%pcrel_lo depÄƒÈ™ire cu un adaossimbol de secÈ›iune %pcrel_lo cu un adaos%pcrel_lo cu adaos nu este permis pentru R_RISCV_GOT_HI20%s definitÄƒ Ã®n intrarea toc eliminatÄƒ%s Ã®mpÄƒrÈ›it la zero%s duplicat
+%s duplicat Ã®n %s
+%s are atÃ¢t realocÄƒri normale, cÃ¢t È™i realocÄƒri TLS%s Ã®n secÈ›iunea de suprapunere%s este definit, dar nu a putut fi Ã®ncÄƒrcat: %s%s este definit, dar suportul pentru module este dezactivat%s este Ã®ncÄƒrcat, dar simbolul â€ž%sâ€� nu a fost gÄƒsit: %s%s nu este definit Ã®n editorul de legÄƒturi creat %pA%s neimplementat%s decalaj prea mare pentru codificarea sdata4 .eh_frame%s, iteraÈ›ii %u
+  ramura           %lu
+  ramura lungÄƒ     %lu
+  apel plt         %lu
+  intrare globalÄƒ  %lu%s: id ELF greÈ™it: â€ž%dâ€�%s: È™irul ISA nu poate conÈ›ine litere mari%s: È™irul ISA trebuie sÄƒ Ã®nceapÄƒ cu rv32 sau rv64%s: definiÈ›ia TLS din secÈ›iunea %pB %pA nu se potriveÈ™te cu definiÈ›ia non-TLS din secÈ›iunea %pB %pA%s: definiÈ›ia TLS din secÈ›iunea %pB %pA nu se potriveÈ™te cu referinÈ›a non-TLS din %pB%s: referinÈ›a TLS din %pB nu se potriveÈ™te cu definiÈ›ia non-TLS din secÈ›iunea %pB %pA%s: referinÈ›a TLS din %pB nu se potriveÈ™te cu referinÈ›a non-TLS din %pB%s: compilat ca obiect pe 32 de biÈ›i È™i %s este pe 64 de biÈ›i%s: compilat ca obiect pe 64 de biÈ›i È™i %s este pe 32 de biÈ›i%s: prima extensie ISA trebuie sÄƒ fie â€žeâ€�, â€žiâ€� sau â€žgâ€�%s: extensia ISA cu prefix nevalid â€ž%sâ€� se terminÄƒ cu <numÄƒr>p%s: nu existÄƒ acest simbol%s: neimplementat%s: nu este acceptat%s: dimensiunea obiectului nu se potriveÈ™te cu cea a È›intei %s%s: extensia ISA cu prefix trebuie separatÄƒ cu _%s: versiune nedefinitÄƒ: %s%s: extensie ISA cu prefix necunoscut â€ž%sâ€�%s: extensie ISA standard sau clasÄƒ de prefix â€ž%câ€� necunoscutÄƒ(la decalajul de biÈ›i %u)
+(descriptor)
+(format %c%c%c%c semnÄƒturÄƒ %s vÃ¢rstÄƒ %ld pdb %s)
+(nicio valoare)
+(nu este activ)
+(nu este alocat)
+(reg: %u, disp: %u, indir: %u, gen: (datele de fire de execuÈ›ie locale sunt prea mari pentru â€ž-fpicâ€� sau â€ž-msmall-tlsâ€�: recompilaÈ›i cu â€ž-fPICâ€� sau â€ž-mno-small-tlsâ€�)(prea multe variabile globale pentru â€ž-fpicâ€�: recompilaÈ›i cu â€ž-fPICâ€�)(valoare finalÄƒ)
+(urmeazÄƒ specificaÈ›iile valorii)
+)
+*** verificaÈ›i aceastÄƒ realocare %s*negestionat*
+tip dst *negestionat* %u
+*necunoscut**necunoscut*        , Valoare: %#08lx
+, alias: %u
+, decalaj remediere extensie: %u, decalaj psect no_opt: %u, subtype: %u (%s)
+, vector de simboluri rva: - %pB este pe 64 de biÈ›i, iar %pB nu-mips32r2 -mfp64 (12 apeluri salvate)depÄƒÈ™ire de intrare .eh_frame_hdr.eh_frame_hdr se referÄƒ la FDE-uri suprapusesecÈ›iunea .got nu urmeazÄƒ imediat dupÄƒ secÈ›iunea .pltfuziunea .rsrc a eÈ™uat: un director se potriveÈ™te cu o foaiefuziunea .rsrc a eÈ™uat: versiuni diferite de directoarefuziunea .rsrc a eÈ™uat: directoare cu caracteristici diferitefuziunea .rsrc a eÈ™uat: foaie duplicatfuziunea .rsrc a eÈ™uat: foaie duplicat: %sfuziunea .rsrc a eÈ™uat: resursÄƒ È™ir duplicat: %dfuziunea .rsrc a eÈ™uat: multiple manifeste non-implicitedouble pe 32-biÈ›i, realocarea relativÄƒ gp 32bits are loc pe un simbol extern4-octeÈ›i4-octeÈ›i64 de biÈ›i *nu este gestionat*
+double pe 64-biÈ›i, 8-octeÈ›i8-octeÈ›i: instrucÈ›iuni m32r: instrucÈ›iuni m32r2: instrucÈ›iuni m32rx: instrucÈ›iuni n1: instrucÈ›iuni n1h; recompilaÈ›i cu â€ž-fPICâ€�; recompilaÈ›i cu â€ž-fPIEâ€�<informaÈ›ie coruptÄƒ> %s<lungimea È™irului coruptÄƒ: %#x>
+<decalajul È™irului corupt: %#lx>
+<corupt><tip de director necunoscut: %d>
+<fanioane de mascÄƒ necunoscute><necunoscut>realocare @pltoff faÈ›Äƒ de simbol localBASE_IMAGE       aserÈ›iunea BFD %s a eÈ™uat %s:%deroare internÄƒ BFD %s, se renunÈ›Äƒ la %s:%d
+eroare interna BFD %s, se renunÈ›Äƒ la %s:%d din %s
+Director Realocare de BazÄƒ [.reloc]Director Importare de LimitÄƒLimite:
+Utilizare â€žCACHEâ€�: CLIAntet de rulare CLRCLUSTERS_LOCKMGR COUNTERS         CPU              CTL_AUGRB ( mÄƒreÈ™te baza de realocare) %u
+CTL_DFLOC (defineÈ™te locaÈ›ia)
+CTL_SETRB (stabileÈ™te baza de realocare)
+CTL_STKDL (locaÈ›ia definitÄƒ Ã®n stivÄƒ)
+CTL_STLOC (stabileÈ™te locaÈ›ia)
+Coolidge (kv3) V1 32 biÈ›iCoolidge (kv3) V1 64 biÈ›iCoolidge (kv3) V2 32 biÈ›iCoolidge (kv3) V2 64 biÈ›iCoolidge (kv4) V1 32 biÈ›iCoolidge (kv4) V1 64 biÈ›iAntet pentru drepturi de autor
+SecÈ›iune .rsrc coruptÄƒ a fost detectatÄƒ!
+DSO lipseÈ™te din linia de comandÄƒeroare DWARF: atributul DW_AT_comp_dir a fost gÄƒsit cu o formÄƒ fÄƒrÄƒ È™ireroare DWARF: recursiune a unei instanÈ›e abstracte a fost detectatÄƒeroare DWARF: nu se gÄƒseÈ™te secÈ›iunea %s.eroare DWARF: nu s-a putut gÄƒsi numÄƒrul abreviat %ueroare DWARF: nu s-a putut gÄƒsi specificaÈ›ia variabilei la poziÈ›ia 0x%lxeroare DWARF: s-a gÄƒsit adresa cu dimensiunea â€ž%uâ€�, acest cititor nu poate gestiona dimensiuni mai mari de â€ž%uâ€�eroare DWARF: a fost gÄƒsit Â«dwarfÂ» versiunea â€ž%uâ€�, acest cititor gestioneazÄƒ doar informaÈ›iile despre versiunile 2, 3, 4 È™i 5eroare DWARF: indicatorul de informaÈ›ii se extinde dincolo de sfÃ¢rÈ™itul atributeloreroare DWARF: referinÈ›Äƒ DIE a instanÈ›ei abstracte nevalidÄƒeroare DWARF: maximul de operaÈ›ii pe instrucÈ›iune nu este valideroare DWARF: valoare FORM nevalidÄƒ sau neprocesabilÄƒ: %#xeroare DWARF: dimensiunea selectorului de segmente %u, nu este acceptatÄƒ pentru informaÈ›iile de linieeroare DWARF: secÈ›iunea cu numÄƒrul de linie deterioratÄƒeroare DWARF: secÈ›iune a numÄƒrului de linie deterioratÄƒ (numÄƒr de fiÈ™ier greÈ™it)eroare DWARF: s-a rÄƒmas fÄƒrÄƒ spaÈ›iu citind codurile operaÈ›ionaleeroare DWARF: s-a rÄƒmas fÄƒrÄƒ spaÈ›iu citind prologuleroare DWARF: secÈ›iunea %s nu are conÈ›inuteroare DWARF: secÈ›iunea %s este prea mareeroare DWARF: versiune .debug_line neprocesatÄƒ %deroare DWARF: numÄƒr(contor) de format zeroDW_EH_PE_datarel nespecificat pentru aceastÄƒ arhitecturÄƒDirector DepanareTabel cu module de depanare:
+Tabel cu simboluri de depanare:
+Director Importare ÃŽntÃ¢rziereDirector DescriereEIHD: (dim.: %u, nr. blocuri: %u)
+Decalaj intrare     = 0x%.8lx (%ld)
+Eroare: %pB È™i %pB au versiuni DSP diferiteEroare: %pB È™i %pB au ABI FPU diferitEroare: %pB È™i %pB au versiuni VDSP diferiteEroare: %pB are atÃ¢t atributele Tag_MPextension_use actuale, cÃ¢t È™i pe cele vechiDirector ExcepÈ›ii [.pdata]Director Exportare [.edata (sau oriunde se gÄƒseÈ™te)]Export fanioane 			%lx
+Exportare RVAcodificarea FDE Ã®n %pB(%pA) Ã®mpiedicÄƒ crearea tabelului .eh_frame_hdrFDPIC nu acceptÄƒ Ã®ncÄƒ realocarea %s pentru a deveni dinamicÄƒ pentru executabilFILES_VOLUMES    FPU-2.0FPU-3.0CÃ¢mp fanion         = 0x%.2x
+Expeditor RVAGALAXY           secÈ›iunea GNU_MBIND este acceptatÄƒ doar de È›intele GNU È™i FreeBSDsecÈ›iunea GNU_RETAIN este acceptatÄƒ numai de È›intele GNU È™i FreeBSDrealocÄƒrile GOT È™i PLT nu pot fi remediate cu un editor de legÄƒturi non-dinamicdimensiunea tabelului GOT Ã®n afara limiteirealocarea relativÄƒ a GP utilizatÄƒ atunci cÃ¢nd GP nu este definitrealocarea relativÄƒ a GP atunci cÃ¢nd _gp nu este definitrelocarea GPDISP nu a gÄƒsit instrucÈ›iuni ldah È™i ldaTabel cu simboluri globale:
+VirgulÄƒ mobilÄƒ hardware (procesor pe 32 de biÈ›i, FPU pe 64 biÈ›i)
+VirgulÄƒ mobilÄƒ hardware (procesor pe 32 de biÈ›i, orice FPU)
+VirgulÄƒ mobilÄƒ hardware (MIPS32r2 pe 64 de biÈ›i, FPU 12 callee-saved)
+VirgulÄƒ mobilÄƒ hardware (de precizie dublÄƒ)
+VirgulÄƒ flotantÄƒ hardware (de precizie simplÄƒ)
+VirgulÄƒ mobilÄƒ de compatibilitate hardware (procesor pe 32 de biÈ›i, FPU pe 64 biÈ›i)
+VirgulÄƒ mobilÄƒ hardware sau software
+proprietÄƒÈ›i IBT È™i SHSTKproprietatea IBTID: %#08lxIDC - Verificarea consistenÈ›ei identificÄƒrii
+Simbol IFUNC %s Ã®n tabelul dinamic de simboluri - simbolurile IFUNCS nu sunt acceptateIMAGE_ACTIVATOR  INPUT_SECTION_FLAGS nu sunt acceptatÄƒIn/IeÈ™           Activare imagine:  (dim.=%u)
+Fixarea activatorului de imagine: (major: %u, minor: %u)
+Identificare imagine: (major: %u, minor: %u)
+Descriptorul secÈ›iunii de imagine: (major: %u, minor: %u, size: %u, decalaj: %u)
+Simbol de imagine È™i tabel de depanare: (major: %u, minor: %u)
+Director Importare Tabel de AdreseDirector Importare [ pÄƒrÈ›i ale .idata]Eroare internÄƒ: inaccesibil.proprietatea LAM_U48proprietatea LAM_U57LOGICAL_NAMES    Numele procesorului de limbaj
+Lungime             = 0x%.8lx (%ld)
+Director ÃŽncÄƒrcare ConfiguraÈ›ieFuncÈ›ia IFUNC localÄƒ â€ž%sâ€� Ã®n %pB
+MEMORY_MANAGEMENTFuncÈ›iile MIPS16 È™i microMIPS nu se pot apela Ã®ntre eleMISC             Utilizare MMU: MULTI_PROCESSING Major/Minor 			%d/%d
+Stiva maximÄƒ necesarÄƒ este 0x%v
+MeP: â€žhowtoâ€� %d are tipul %dSe Ã®mbinÄƒ proprietÄƒÈ›ile programului
+Antetul modulului
+NETWORKS         NORMALNOTÄ‚: Acest comportament este depreciat È™i va fi eliminat Ã®ntr-o versiune viitoare a editorului de legÄƒturi.Nume 				NiciunulNumÄƒr Ã®n:
+OPR_ADD (adunare)
+OPR_AND (â€žÈ™iâ€� logic)
+OPR_ASH (deplasare aritmeticÄƒ)
+OPR_COM (complement)
+OPR_DIV (Ã®mpÄƒrÈ›ire)
+OPR_IOR (â€žsauâ€� exclusiv logic)
+OPR_INSV (inserare cÃ¢mp)
+OPR_IOR (â€žsauâ€� inclusiv logic)
+OPR_MUL (multiplicare)
+OPR_NEG (negaÈ›ie)
+OPR_NOP (fÄƒrÄƒ operaÈ›ie)
+OPR_REDEF (defineÈ™te un literal)
+OPR_REDEF (redefineÈ™te simbolul la locaÈ›ia actualÄƒ)
+OPR_ROT (rotire)
+OPR_SEL (selectare)
+OPR_SUB (scÄƒdere)
+OPR_USH (deplasare fÄƒrÄƒ semn)
+BazÄƒ ordinalÄƒ 			%ld
+Ã®ncÄƒrcare relativÄƒ la PC de la o adresÄƒ nealiniatÄƒexecutabil PIEPOSIX            PROCESS_SCHED    PRVFXDPRVPICPSC - Definirea secÈ›iunii programului
+Nume partiÈ›ie       = "%s"
+SfÃ¢rÈ™it PartiÈ›ie[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
+Lungime PartiÈ›ie[%d] = 0x%.8lx (%ld)
+Sector PartiÈ›ie[%d]  = 0x%.8lx (%ld)
+RaportaÈ›i aceastÄƒ eroare.
+fanioane private = 0x%lx: Conflict ABI RL78: fiÈ™ierul G10 %pB nu poate fi vinculat cu fiÈ™ierul %s %pBConflict ABI RL78: nu se poate realiza legÄƒtura %s Ã®ntre fiÈ™ierul %pB È™i %s fiÈ™ierul %pBConflict de fuziune RL78: nu se pot lega Ã®ntre ele obiecte pe 32 È™i 64 de biÈ›irealocare R78 Ã®mpÄƒrÈ›itÄƒ la zerodepÄƒÈ™ire a limitei superioare/inferioare a stivei de realocare RL78R_AMD64_IMAGEBASE cu __ImageBase nedefinitÄƒR_BFIN_FUNCDESC face referire la simbolul dinamic cu adaos diferit de zeroR_BFIN_FUNCDESC_VALUE face referire la simbolul dinamic cu adaos diferit de zeroR_FRV_TLSMOFFLO nu este aplicat unei instrucÈ›iuni setlo sau setlos
+Se citeÈ™te marcajul de timp al fiÈ™ierului arhiveiProprietatea %W a fost eliminatÄƒ pentru a fuziona %pB (0x%v) È™i %pB (0x%v)
+Proprietatea %W a fost eliminatÄƒ pentru a fuziona %pB (0x%v) È™i %pB (nu a fost gÄƒsitÄƒ)
+Proprietatea %W a fost eliminatÄƒ pentru a fuziona %pB (negÄƒsitÄƒ) È™i %pB (0x%v)
+Proprietatea %W a fost eliminatÄƒ pentru a fuziona %pB È™i %pB
+Proprietatea %W a fost eliminatÄƒ pentru a fuziona %pB È™i %pB (nu a fost gÄƒsitÄƒ)
+RezervatDirector ResursÄƒ [.rsrc]adresa S12 (%lx) nu se aflÄƒ Ã®n memoria RAM partajatÄƒ (0x2000-0x4000), prin urmare trebuie sÄƒ poziÈ›ionaÈ›i manual adresa Ã®n codul dvs.realocare SDA cÃ¢nd _SDA_BASE_ nu este definitSECURITY         SEC_RELOC fÄƒrÄƒ realocÄƒri Ã®n secÈ›iunea %pASHELL            SHRFXDSHRPICproprietatea SHSTKUtilizare SIMD: SPSC - Definirea secÈ›iunii programului de imagine partajatÄƒ
+STABLE           STA_CKARG (argumentul procedurii de comparare)
+STA_GBL (stivÄƒ globalÄƒ) %.*s
+STA_LI (stivÄƒ literalÄƒ)
+STA_LW (stivÄƒ de cuvinte lungi)STA_MOD (stivÄƒ modul)
+STA_PQ (stivÄƒ de bazÄƒ psect + deplasarea)
+STA_QW (stivÄƒ de cuvinte Ã®n catren)STC_BOH_GBL (stocare condiÈ›ionalÄƒ BOH la adresa globalÄƒ)
+STC_BOH_PS (stocare condiÈ›ionalÄƒ BOH la psect + deplasarea)
+STC_BSR_GBL (stocare condiÈ›ionalÄƒ BSR la adresa globalÄƒ)
+STC_BSR_PS (stocare condiÈ›ionalÄƒ BSR la psect + deplasarea)
+STC_GBL (stocare condiÈ›ionalÄƒ globalÄƒ)
+STC_GCA (adresa codului condiÈ›ional de stocare)
+STC_LDA_GBL (stocare condiÈ›ionalÄƒ LDA la adresa globalÄƒ)
+STC_LDA_PS (stocare condiÈ›ionalÄƒ LDA la psect + deplasarea)
+STC_LP (stocare pereche de legÄƒturi condiÈ›ionale)
+STC_LP_PSB (stocare pereche de legÄƒturi condiÈ›ionale + semnÄƒturÄƒ)
+STC_NBH_GBL (stocare condiÈ›ionalÄƒ sau indiciu la adresa globalÄƒ)
+STC_NBH_PS (stocare condiÈ›ionalÄƒ sau indiciu la psect + deplasarea)
+STC_NOP_GBL (stocare condiÈ›ionalÄƒ NOP la adresa globalÄƒ)
+STC_NOP_PS (stocare condiÈ›ionalÄƒ NOP la psect + deplasarea)
+STC_PS (stocare condiÈ›ionalÄƒ psect + deplasare)
+STO_RB (stocarea ramurii absolute)
+STO_B (stocare octet)
+STO_BR_GBL (stocarea ramurii globale) *neimplementatÄƒ Ã®ncÄƒ*
+STO_BR_PS (stocarea ramurii psect + deplasarea) *neimplementatÄƒ Ã®ncÄƒ*
+STO_CA (stocare adresÄƒ cod) %.*s
+STO_GBL (stocare globalÄƒ) %.*s
+STO_GBL_LW (stocare globalÄƒ de cuvinte lungi) %.*s
+STO_IMM (stocare imediatÄƒ) %u octeÈ›i
+STO_IMMR (stocare imediatÄƒ repetatÄƒ) %u octeÈ›i
+STO_LW (stocare cuvinte lungi)
+STO_OFF (stocare LP cu semnÄƒtura procedurii)
+STO_OFF (stocheazÄƒ deplasarea Ã®n psect)
+STA_QW (stocare de cuvinte Ã®n catren)
+STO_RB (stocarea ramurii relative)
+STO_B (stocare cuvinte)
+SYM - Definirea simbolului global
+SYM - ReferinÈ›Äƒ de simbol global
+SYMG - Definirea simbolului universal
+SYMM - Definirea simbolului global cu versiunea
+SYMV - Definirea simbolului vectorizat
+SYSGEN           Director SecuritateVirgulÄƒ mobilÄƒ software
+Antetul fiÈ™ierelor sursÄƒ
+Director SpecialDimensiunea stivei pentru nodurile rÄƒdÄƒcinÄƒ ale graficului de apeluri.
+PaÈ™i largi:
+Simbolul â€ž%sâ€� are tipuri diferite: %s Ã®n %pB, anterior REGISTER Ã®n %pBrealocarea TLS nu este validÄƒ fÄƒrÄƒ secÈ›iuni dinamiceDebordare a tabelului de intrÄƒri(TOC) Ã®n timpul generÄƒrii ciotului(stub); Ã®ncercaÈ›i â€ž-mminimal-tocâ€� la compilareTabel de adrese
+Adaosul nu este permis pentru R_RISCV_GOT_HI20CÃ¢mpul pentru dimensiunea datelor de depanare din directorul de date este prea mare pentru secÈ›iuneDimensiunea directorului de depanare nu este un multiplu al dimensiunii intrÄƒrii directorului de depanare
+Director Stocare fire de execuÈ›ie [.tls]Marcaj orÄƒ/datÄƒ 		%lx
+Antetul textului titlului
+Prea multe coduri de desfÄƒÈ™urare (%ld)
+Tip                 Dim.     Rva      Decalaj
+USRSTACKImposibil de gÄƒsit intrarea ciot(stub) care vizeazÄƒ %sNu se poate vincula fiÈ™ierul de intrare: %sNu se poate Ã®ncÄƒrca DLL.NecunoscutNecunoscut: %xS-a actualizat proprietatea %W (%v) pentru a fuziona %pB (0x%v) È™i %pB (nu a fost gÄƒsitÄƒ)
+S-a actualizat proprietatea %W (0x%v) pentru a fuziona %pB (0x%v) È™i %pB (0x%v)
+VOLATILE         Dimensiunea virtualÄƒ a secÈ›iunii .pdata (%ld) mai mare decÃ¢t dimensiunea realÄƒ (%ld)
+Avertisment: dimensiunea secÈ›iunii %s (%ld) nu este multiplu de %dn
+Avertisment: dimensiunea secÈ›iunii %s (%ld) este mai micÄƒ decÃ¢t dimensiunea virtualÄƒ (%ld)
+Avertisment: dimensiunea secÈ›iunii %s este zero
+Se scrie marcajul de timp armap actualizatadresa XGATE (%lx) nu se aflÄƒ Ã®n memoria RAM partajatÄƒ (0xE000-0xFFFF), prin urmare trebuie sÄƒ poziÈ›ionaÈ›i manual adresa È™i, eventual, sÄƒ gestionaÈ›i pagina, Ã®n codul dvs.[%u]: InferioarÄƒ: %u, superioarÄƒ: %u
+[abi=int pe 16-biÈ›i, [abi=int pe 32-biÈ›i, [al cÄƒrui nume s-a pierdut]\%pB: avertisment: instrucÈ›iunea %s BLX vizeazÄƒ funcÈ›ia %s â€ž%sâ€�depÄƒÈ™ire a decalajului de apel __tls_get_addr_bfd_vms_output_counted apelat cu prea mulÈ›i octeÈ›i_bfd_vms_output_counted apelat cu zero octeÈ›iâ€ž%sâ€� se referÄƒ la ceva care nu este o funcÈ›ie de intrareâ€žxtheadvectorâ€� este Ã®n conflict cu extensia â€žvâ€�â€žzfinxâ€� este Ã®n conflict cu extensia â€žf/d/q/zfh/zfhminâ€�un obiect PDEun obiect PIEun obiect partajatadresaadresa nu este aliniatÄƒ cu cuvinteles-a gÄƒsit codul de maÈ™inÄƒ ELF alternativ (%d) Ã®n %pB, se aÈ™tepta %darhiva nu are niciun index.; rulaÈ›i Â«ranlibÂ» pentru a adÄƒuga unulfiÈ™ier obiect de arhivÄƒ Ã®n format eronatdescriptor matrice:
+matrice, dim: %u, bitmap: arsize: %u, a0: 0x%08x
+atomic, tip=0x%02x %s
+Ã®ncercarea de a converti L32R/CALLX Ã®n CALL a eÈ™uatÃ®ncercare de a crea o legÄƒturÄƒ realocabilÄƒ cu intrarea %s È™i ieÈ™irea %sindex de secÈ›iune incorect Ã®n %svaloare eronatÄƒadresa grupatÄƒ [%lx:%04lx] (%lx) nu este Ã®n acelaÈ™i grup cu adresa curentÄƒ grupatÄƒ [%lx:%04lx] (%lx)bazÄƒ: %u, poziÈ›ie: %u
+bfd_mach_o_canonicalize_symtab: nu se pot Ã®ncÄƒrca simboluribfd_mach_o_read_section_32: valoare de aliniere peste mÄƒsurÄƒ de mare: %#lxbfd_mach_o_read_section_64: valoare de aliniere peste mÄƒsurÄƒ de mare: %#lxbfd_mach_o_read_symtab_symbol: nume Ã®n afara intervalului (%lu >= %u)bfd_mach_o_read_symtab_symbol: simbolul â€ž%sâ€� specificÄƒ secÈ›iunea nevalidÄƒ %d (max. %lu): se lasÄƒ nedefinitbfd_mach_o_read_symtab_symbol: simbolul â€ž%sâ€� specificÄƒ cÃ¢mpul de tip invalid 0x%x: se lasÄƒ nedefinitbfd_mach_o_read_symtab_symbol: nu se pot citi %d octeÈ›i la %ubfd_mach_o_scan: arhitecturÄƒ necunoscutÄƒ 0x%lx/0x%lxbfd_pef_scan: arhitecturÄƒ necunoscutÄƒ 0x%lxÃ®nceputul blk: adresa: 0x%08x, nume: %.*s
+sfÃ¢rÈ™it blk: dimens.: 0x%08x
+ramura (PC rel16) la secÈ›iunea (%s) nu este acceptatÄƒramura la o adresÄƒ nealiniatÄƒ la instrucÈ›iunibss-plt forÈ›at de profilarebss-plt forÈ›at din cauza %pBcâ€œ sau â€žzcacâ€œ sau â€žzcdcâ€œ sau â€žzcfnu se poate construi ciotul(stub) de ramurÄƒ â€ž%sâ€�nu se gÄƒseÈ™te ciotul(stub) de ramurÄƒ â€ž%sâ€�nu se poate + sau - extensia de bazÄƒ â€ž%sâ€� Ã®n .option arhitectura â€ž%sâ€�nu se poate converti o ramurÄƒ Ã®n JALX pentru o adresÄƒ nealiniatÄƒ la cuvintenu se poate converti un salt Ã®n JALX pentru o adresÄƒ nealiniatÄƒ la cuvintenu se poate crea intrarea ciot(stub) %snu se pot emite realocÄƒri dinamice Ã®n secÈ›iunea de numai-citirenu poate emite remedieri Ã®n secÈ›iunea numai-pentru-citirenu se poate gÄƒsi EMH Ã®n prima Ã®nregistrare GST
+nu se pot gÄƒsi versiunile implicite ale extensiei ISA â€ž%sâ€�nu se poate citi DMT
+nu se poate citi antetul DMT
+nu se poate citi psect DMT
+nu se poate citi DST
+nu se poate citi antetul DST
+nu se poate citi simbolul DST
+nu se poate citi EIHA
+nu se poate citi EIHD
+nu se poate citi EIHI
+nu se poate citi EIHS
+nu se poate citi antetul EIHVN
+nu se poate citi versiunea EIHVN
+nu se poate citi EISD
+nu se poate citi GST
+nu se poate citi Ã®nregistrarea GST
+nu se poate citi antetul Ã®nregistrÄƒrii GST
+clasa: %u, dtype: %u, lungime: %u, indicator: 0x%08x
+secÈ›iune %s coruptÄƒ Ã®n %pBÃ®nregistrare coruptÄƒ EEOM - dimensiunea este prea micÄƒtip de Ã®nregistrare EGSD coruptÄƒ %d: dimensiunea (%#x) este mai mare decÃ¢t spaÈ›iul rÄƒmas (%#x)tip de Ã®nregistrare EGSD corupt %d: dimensiunea (%#x) este prea micÄƒÃ®nregistrare EGSD coruptÄƒ: cÃ¢mpul psindx este prea mare (%#lx)Ã®nregistrare EGSD coruptÄƒ: dimensiunea acesteia (%#x) este prea micÄƒÃ®nregistrare EIHD coruptÄƒ - dimensiunea este prea micÄƒÃ®nregistrare ETIR coruptÄƒ Ã®ntÃ¢lnitÄƒÃ®nregistrare de realocare coruptÄƒvaloarea vms coruptÄƒGST corupt
+nu s-a putut gÄƒsi secÈ›iunea %snu s-a putut localiza simbolul special de editare de legÄƒturi __ctbpnu s-a putut localiza simbolul special de editare de legÄƒturi __epnu s-a putut localiza simbolul special de editare de legÄƒturi __gpnu s-a putut deschide imaginea partajatÄƒ â€ž%sâ€� din â€ž%sâ€�cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]dâ€œ È™i â€žcâ€œ, sau â€ždâ€œ È™i â€žzcddâ€œ È™i â€žzfadâ€œ sau â€žzdinxrealocare periculoasÄƒeroare de realocare periculoasÄƒdelta pc +%-4ddelta_pc_l: +0x%08x
+delta_pc_w %u
+descdimct: %u, aflags: 0x%02x, digiÈ›i: %u, scarÄƒ: %u
+secÈ›iune de ieÈ™ire Ã®nlÄƒturatÄƒ: â€ž%pAâ€�eliminÃ¢nd intervalul de adrese zero FDE Ã®n %pB(%pA).
+interval de Ã®ntrerupere (nbr: %u)
+Ã®mpÄƒrÈ›ire la zerodst_define_location %u prea mareinformaÈ›iile despre indexul dinamic nu sunt disponibilerealocare dinamicÄƒ Ã®n secÈ›iunea numai-pentru-citirevariabila dinamicÄƒ â€ž%sâ€� are dimensiunea zeronumÄƒr greÈ™it de realocÄƒri dinamice pentru %pB, secÈ›iunea %pAfuncÈ›ia de intrare â€ž%sâ€� a dispÄƒrut din codul securizatÃ®nceput enumerare, lungime: %u, nume: %.*s
+enumerare lelemente, nume: %.*s
+sfÃ¢rÈ™it enumerare
+epilog: fanioane: %u, numÄƒr: %u
+eroare la adÄƒugarea atributuluieroare Ã®n %pB(%pA); nu va fi creat nici un tabel .eh_frame_hdreroare Ã®n %pB(%pA); nu va fi creat niciun .sframeeroare la citirea %s: %seroare la citirea tipului de procesor din datele private elferoare: %pB poate utiliza regiunea superioarÄƒ pentru date, dar %pB presupune cÄƒ datele se aflÄƒ exclusiv Ã®n memoria inferioarÄƒeroare: %pB nu foloseÈ™te instrucÈ›iuni %s, Ã®n timp ce %pB le foloseÈ™teeroare: %pB are un segment LOAD cu permisiuni RWX(de citire-scriere-execuÈ›ie)eroare: %pB are un segment TLS cu permisiune de execuÈ›ieeroare: %pB este deja Ã®n format BE8 finaleroare: %pB este compilat pentru APCS-%d, Ã®n timp ce È›inta %pB foloseÈ™te APCS-%deroare: %pB este compilat pentru EP9312, pe cÃ¢nd %pB este compilat pentru XScaleeroare: %pB necesitÄƒ aliniere pe 8 octeÈ›i, dar %pB este configurat pentru aliniere pe 4 octeÈ›ieroare: %pB trece valorile Ã®n virgulÄƒ mobilÄƒ Ã®n registrele de virgulÄƒ mobilÄƒ, Ã®n timp ce %pB le trece Ã®n registrele Ã®ntregieroare: %pB trece valorile Ã®n virgulÄƒ mobilÄƒ Ã®n registrele Ã®ntregi, Ã®n timp ce %pB le trece Ã®n registrele de virgulÄƒ mobilÄƒeroare: %pB necesitÄƒ o aliniere a matricei mai mare decÃ¢t cea pÄƒstratÄƒ de %pBeroare: %pB necesitÄƒ o aliniere a stivei mai mare decÃ¢t cea pÄƒstratÄƒ de %pBeroare: %pB foloseÈ™te stiva aliniatÄƒ la %u-octeÈ›i, dar ieÈ™irea foloseÈ™te stiva aliniatÄƒ la %u-octeÈ›ieroare: %pB foloseÈ™te %s instrucÈ›iuni, dar %pB foloseÈ™te %seroare: %pB foloseÈ™te instrucÈ›iuni %s, Ã®n timp ce %pB nu le foloseÈ™teeroare: %pB utilizeazÄƒ numere reale de precizie dublÄƒ pe 64 de biÈ›i, dar %pB utilizeazÄƒ numere reale de precizie dublÄƒ pe 32 de biÈ›ieroare: %pB utilizeazÄƒ FPU-3.0, dar %pB suportÄƒ doar FPU-2.0eroare: %pB utilizeazÄƒ argumente de registru VFP, iar %pB nueroare: %pB foloseÈ™te FP hardware, Ã®n timp ce %pB foloseÈ™te FP softwareeroare: %pB utilizeazÄƒ argumente de registru iWMMXt, È™i %pB nueroare: %pB foloseÈ™te software FP, Ã®n timp ce %pB foloseÈ™te hardware FPeroare: %pB foloseÈ™te modelul de cod %s, Ã®n timp ce %pB foloseÈ™te modelul de cod %seroare: %pB utilizeazÄƒ modelul de date %s, dar %pB utilizeazÄƒ doar instrucÈ›iuni MSP430eroare: %pB utilizeazÄƒ modelul de date %s, Ã®n timp ce %pB utilizeazÄƒ modelul de date %seroare: %pB utilizeazÄƒ modelul de cod mare, dar %pB utilizeazÄƒ instrucÈ›iuni MSP430eroare: %pB utilizeazÄƒ modelul de cod mic, dar %pB utilizeazÄƒ modelul de date %seroare: %pB: <dimensiunea utilizatÄƒ de AArch64 este coruptÄƒ: 0x%x>eroare: %pB: <dimensiunea proprietÄƒÈ›ii (0x%x) este coruptÄƒ: 0x%x>eroare: %pB: <dimensiunea proprietÄƒÈ›ii x86 corupte (0x%x): 0x%x>eroare: %pB: È™irul ISA de intrare (%s) nu se potriveÈ™te cu ieÈ™irea (%s)eroare: %pB: adresarea relativÄƒ SB intrÄƒ Ã®n conflict cu utilizarea lui R9eroare: %pB: XLEN de intrare (%u) nu se potriveÈ™te cu ieÈ™irea (%u)eroare: %pB: R2 big-endian nu este acceptateroare: %pB: nu se poate amesteca rf16 cu setul de registru complet %pBeroare: %pB: arhitecturi CPU aflate Ã®n conflict %d/%deroare: %pB: atributele extensiei ISA Ã®n conflict %s cu %seroare: %pB: profiluri de arhitecturÄƒ aflate Ã®n conflict %c/%ceroare: %pB: atribute aflate Ã®n conflict %seroare: %pB: atribute aflate Ã®n conflict %s: %s cu %seroare: %pB: utilizare conflictualÄƒ a R9eroare: %pB: È™ir ISA corupt â€ž%sâ€�.  Prima litera ar trebui sÄƒ fie â€žiâ€� sau â€žeâ€�, dar a primit â€ž%sâ€�eroare: %pB: È™ir ISA nepotrivit pentru a fuziona â€ž%sâ€� È™i â€ž%sâ€�eroare: %pB: obiectul are conÈ›inut specific furnizorului care trebuie procesat de lanÈ›ul de instrumente â€ž%sâ€�eroare: %pB: eticheta obiectului â€ž%d, %sâ€� este incompatibilÄƒ cu eticheta â€ž%d, %sâ€�eroare: %pB: a fost detectat un fiÈ™ier obiect vechi incompatibileroare: %pB: dimensiunea secÈ›iunii %pA nu este multiplu al dimensiunii adreseieroare: %pB: nu se pot fuziona atributele de bazÄƒ ale procesorului %s cu %seroare: %pB: nu se pot fuziona atributele extensiei ISA %seroare: %pB: nu se pot fuziona atributele de virtualizare cu %pBeroare: %pB: arhitecturÄƒ CPU necunoscutÄƒeroare: %pB: XLEN neacceptat (%u), este posibil sÄƒ utilizaÈ›i o emulare greÈ™itÄƒeroare: %s: declanÈ™eazÄƒ generarea unei stive executabile (deoarece are o secÈ›iune executabilÄƒ .note.GNU-stack)eroare: %s: declanÈ™eazÄƒ generarea unei stive executabile deoarece nu are o secÈ›iune .note.GNU-stackeroare: Ã®ncercare de a vincula %pB cu un %pB binar de arhitecturÄƒ diferitÄƒeroare: nu se poate gÄƒsi simbolul: %seroare: arhitecturi CPU Ã®n conflict %s vs %s Ã®n %pBeroare: se creeazÄƒ o stivÄƒ executabilÄƒ datoritÄƒ opÈ›iunii din linia de comandÄƒ â€ž-z execstackâ€�eroare: dimensiunea finalÄƒ a valorii uleb128 la poziÈ›ia 0x%lx Ã®n %pA din %pB depÄƒÈ™eÈ™te spaÈ›iul disponibileroare: nepotrivire a formatului fp16 Ã®ntre %pB È™i %pBeroare: tip de realocare neadecvat pentru biblioteca partajatÄƒ (aÈ›i uitat sÄƒ adÄƒugaÈ›i opÈ›iunea â€ž-fpicâ€�?)eroare: obiectul sursÄƒ %pB are versiunea EABI %d, dar È›inta %pB are versiunea EABI %deroare: arhitectura ARC4 nu mai este demult acceptatÄƒeroare: simbol __rtinit nedefiniteroare: valoare Tag_ABI_array_object_align_expected necunoscutÄƒ Ã®n %pBeroare: valoare Tag_ABI_array_object_alignment necunoscutÄƒ Ã®n %pBerori Ã®ntÃ¢lnite la procesarea fiÈ™ierului %pBexecutabilfâ€œ È™i â€žcâ€œ, sau â€žfâ€œ È™i â€žzcffâ€œ sau â€žzfinxnu s-a putut aloca spaÈ›iu pentru secÈ›iunea nouÄƒ APUinfonu s-a putut calcula noua secÈ›iune APUinfonu s-a putut gÄƒsi realocarea anterioarÄƒ HI16nu s-a putut instala noua secÈ›iune APUinfonu s-a reuÈ™it actualizarea decalajelor fiÈ™ierelor din directorul de depanareeroare fatalÄƒ la crearea .fixupformatul fiÈ™ierului este ambiguuformatul fiÈ™ierului nu este recunoscutfiÈ™ier Ã®n format eronatfiÈ™ier prea marefiÈ™ier trunchiatdimensiunea finalÄƒ a valorii uleb128 la poziÈ›ia 0x%lx Ã®n %pA din %pB depÄƒÈ™eÈ™te spaÈ›iul disponibilavertismentele suplimentare despre codificarea FDE care Ã®mpiedicÄƒ generarea .eh_frame_hdr au fost omiseeditorul de legÄƒturi generic nu poate manipula %sadresÄƒ relativÄƒ a indicatorului global Ã®n afara intervaluluirealocare relativÄƒ a indicatorului global atunci cÃ¢nd _gp nu este definithsimbol ascunssimbol ascuns tipuri de procesoare incompatibile Ã®n fiÈ™ierele mach-o: %ld vs %ldincr_linum(b): +%u
+incr_linum_l: +%u
+incr_linum_w: +%u
+indirect, definit la 0x%08x
+secÈ›iunile de intrare SFrame cu abi diferite Ã®mpiedicÄƒ generarea .sframesecÈ›iunile de intrare SFrame cu versiuni de format diferite Ã®mpiedicÄƒ generarea .sframeeroare internÄƒ: adÄƒugarea trebuie sÄƒ fie zero pentru %seroare internÄƒ: a fost detectatÄƒ o ramurÄƒ/salt la o adresÄƒ imparÄƒeroare internÄƒ: eroare periculoasÄƒeroare internÄƒ: realocare periculoasÄƒeroare internÄƒ: Ã®mbinarea arhitecturii â€ž%sâ€� cu arhitectura â€ž%sâ€� a produs o arhitecturÄƒ necunoscutÄƒeroare internÄƒ: eroare Ã®n afara intervaluluieroare internÄƒ: realocarea nu este acceptatÄƒeroare internÄƒ: tip de realocare suspect utilizat Ã®n biblioteca partajatÄƒeroare internÄƒ: eroare necunoscutÄƒeroare internÄƒ: eroare de realocare neacceptatÄƒinconsistenÈ›Äƒ internÄƒ Ã®n dimensiunea secÈ›iunii .got.locinconsistenÈ›Äƒ internÄƒ: rÄƒmÃ¢ne %lu ! = max %lu\; raportaÈ›i aceastÄƒ eroaresimbol internsimbol intern intern: inaccesibilÄƒ INSN_CLASS_*%s nevalidextensia ISA nevalidÄƒ se terminÄƒ cu <numÄƒr>p Ã®n .option arhitectura â€ž%sâ€�tip de realocare TARGET2 nevalid â€ž%sâ€�È›intÄƒ bfd nevalidÄƒconÈ›inut nevalid Ã®n secÈ›iunea %pAindex dinamic nevalidrealocare nevalidÄƒ a intrÄƒrii atunci cÃ¢nd se produce o ieÈ™ire Ã®n format non-ELF, non-mmo; vÄƒ rugÄƒm sÄƒ utilizaÈ›i programul Â«objcopyÂ» pentru a converti din ELF sau mmo sau asamblaÈ›i folosind â€ž-no-expandâ€� (pentru gcc, â€ž-Wa,-no-expandâ€�)realocare nevalidÄƒ a intrÄƒrii atunci cÃ¢nd se produce o ieÈ™ire Ã®n format non-ELF, non-mmo; vÄƒ rugÄƒm sÄƒ utilizaÈ›i programul Â«objcopyÂ» pentru a converti din ELF sau mmo, sau compilaÈ›i folosind opÈ›iunea gcc â€ž-mno-base-addressesâ€�.operaÈ›ie nevalidÄƒsecÈ›iune de ieÈ™ire nevalidÄƒ pentru .eh_frame_entry: %pAadresÄƒ de realocare nevalidÄƒindex de secÈ›iune nevalid Ã®n ETIRutilizare nevalidÄƒ a lui %s cu contexterelaxer ip2k: antetul tabelului de comutare corupt.relaxer ip2k: tabel de comutare fÄƒrÄƒ potrivire completÄƒ a informaÈ›iilor de realocare.este aceastÄƒ versiune a editorului de legÄƒturi - %s - depÄƒÈ™itÄƒ?saltul (PC rel26) la secÈ›iunea (%s) nu este acceptatsalt la o adresÄƒ nealiniatÄƒ la instrucÈ›iunisalt la o adresÄƒ nealiniatÄƒ la cuvinteetichetÄƒ, nume: %.*s
+lung: %2u, gen: %2u numÄƒr linie  (lungime: %u)
+imagine vinculabilÄƒcioturi(stubs) de editor de legÄƒturi Ã®ntr-un grupcioturi(stubs) de editor de legÄƒturi Ã®n %u grupuricioturi(stubs) de editor de legÄƒturi Ã®n %u de grupuriliteralrealocarea literalÄƒ are loc pentru un simbol externindice de simbol local prea maredepÄƒÈ™ire de decalaj pentru ramura lungÄƒ a ciotului(stub) â€ž%sâ€�mâ€œ sau â€žzmmulmach-o: existÄƒ prea multe secÈ›iuni (%u) maximul este 255,
+arhivÄƒ defectuoasÄƒrealocare sectdiff half ARM mach-o prost formatÄƒ: lungime nevalidÄƒ: %drealocare sectdiff local ARM mach-o prost formatÄƒ: lungime nevalidÄƒ: %dpereche de realocare ARM mach-o incorect formatÄƒ: lungime nevalidÄƒ: %dpereche de realocare ARM mach-o incorect formatÄƒ: realocarea este prima realocarerealocare mach-o ARM incorect formatÄƒ: tip de realocare necunoscut: %drealocare sectdiff ARM mach-o prost formatÄƒ: lungime nevalidÄƒ: %drealocare sectdiff vanilla ARM mach-o prost formatÄƒ: lungime nevalidÄƒ: %d (pcrel: %d)realocare mach-o incorect formatÄƒ: indexul secÈ›iunii este mai mare decÃ¢t numÄƒrul de secÈ›iunimemorie epuizatÄƒmep: nici o realocare pentru codul %dÃ®nceput_modul
+sfÃ¢rÈ™it_modul
+nume: [val: %08lx lung %d]: nativau fost introduse funcÈ›ii de intrare noi, dar nu a fost specificatÄƒ nicio bibliotecÄƒ de import de ieÈ™ire:nunicio adresÄƒ nu este atribuitÄƒ secÈ›iunii de ieÈ™ire a faÈ›etelor(veneers) %snu sunt disponibile informaÈ›ii despre indexul dinamicnicio eroarenu mai existÄƒ fiÈ™iere arhivateniciun simbolmatrice non-contiguÄƒ de %s
+realocÄƒri non-dinamice se referÄƒ la simbolul dinamic %ssimbol non-dinamic %s Ã®n tabelul de simboluri dinamicedimensiunea fÄƒrÄƒ suprapunere de 0x%v plus dimensiunea maximÄƒ a suprapunerii de 0x%v depÄƒÈ™eÈ™te spaÈ›iul de stocare local
+adÄƒugare non-zero Ã®n realocare @fptrniciunulsecÈ›iune nereprezentabilÄƒ la ieÈ™irenu existÄƒ destul spaÈ›iu GOT pentru intrÄƒrile GOT localememorie insuficientÄƒ pentru a sorta realocÄƒrilenu se cartografiazÄƒ: date=%lx cartografiate =%d
+nu se cartografiazÄƒ: variabila env nu este definitÄƒ
+nu este definitmodulul obiect nu este lipsit de erori!decalajul faÈ›etei(veneer) pentru funcÈ›ia de intrare â€ž%sâ€� nu este un multiplu al mÄƒrimii saleo posibilÄƒ cauzÄƒ a acestei erori este cÄƒ simbolul este referit Ã®n codul indicat ca È™i cum ar avea o aliniere mai mare decÃ¢t a fost declaratÄƒ acolo unde a fost definitÃ®n afara intervaluluidebordare dupÄƒ relaxaredepÄƒÈ™ire a realocÄƒrii ciotului(stub) de suprapunerespaÈ›iu de lucru pentru modul: nu mai sunt descriptori de fiÈ™iere. ÃŽncercaÈ›i sÄƒ utilizaÈ›i mai puÈ›ine obiecte/arhive
+indicator
+fanioane private = %lxfanioane private = %lx:fanioane private = %lx: fanioane private = 0x%lxfanioane private = 0x%lx:prolog: adresa bkpt 0x%08x
+simbol protejatsimbol protejat qâ€œ È™i â€žzfaqâ€œ sau â€žzqinxÃ®nceput Ã®nreg.: nume: %.*s
+sfÃ¢rÈ™it Ã®nreg.
+Ã®nregistrarea este prea micÄƒ pentru lungimea numelui simboluluireferinÈ›Äƒ la o adresÄƒ grupatÄƒ [%lx:%04lx] Ã®n spaÈ›iul de adrese normal la %04lxreferirea la simbolul Ã®ndepÄƒrtat â€ž%sâ€� folosind o realocare greÈ™itÄƒ poate avea ca rezultat o execuÈ›ie incorectÄƒregregistrul %%g%d utilizat de formÄƒ incompatibilÄƒ: %s Ã®n %pB, anterior %s Ã®n %pBsecÈ›iunea de registru are conÈ›inut
+realocarea (%d) este *NECUNOSCUTÄ‚*realocarea faÈ›Äƒ de â€ž%sâ€� are un tip GOT defect realocare pentru psect non-RELrealocare Ã®n afara intervaluluisimbolul referinÈ›elor de realocare nu este definit Ã®n modulrealocarea necesitÄƒ adÄƒugarea de zerorealocarea trebuie sÄƒ fie un numÄƒr parrealocÄƒrile Ã®ntre diferite segmente nu sunt acceptatese eliminÄƒ secÈ›iunea â€ž%pAâ€� nefolositÄƒ din fiÈ™ierul â€ž%pBâ€�se redeschide %pB: %scomandÄƒ STA %d rezervatÄƒÃ®nceputul rutinei
+sfÃ¢rÈ™it rutinÄƒ: dimens. 0x%08x
+rv%d nu acceptÄƒ extensia â€žqâ€�rv%d nu acceptÄƒ extensia â€žzcfâ€�rv%de nu acceptÄƒ extensia â€žhâ€�secÈ›iunea nu are conÈ›inuttip sep, nume: %.*s
+set_abs_pc: 0x%08x
+set_line_num(w) %u
+set_line_num_b %u
+set_line_num_l %u
+obiect partajateroare de dimensiune Ã®n secÈ›iunea %pAsecÈ›iunea de date de mici dimensiuni este prea mare; reduceÈ›i limita dimensiunii datelor de mici dimensiuni (consultaÈ›i opÈ›iunea â€ž-Gâ€�)som_sizeof_headers neimplementatÄƒscuze, nu se poate gestiona acest fiÈ™ierscuze, nu existÄƒ suport pentru fiÈ™ierele obiect duplicate Ã®n scriptul de suprapunere automatÄƒ
+scuze: modtab, toc È™i extrefsyms nu sunt Ã®ncÄƒ implementate pentru comenzile dysymtab.sursÄƒ (lungime: %u)
+realocare ALPHA_R_BSR falsÄƒanaliza stivei va ignora apelul de la %s la %s
+depÄƒÈ™ire a stivei Ã®n partea de sus (%d) Ã®n _bfd_vms_pushdepÄƒÈ™ire a stivei Ã®n partea de jos _bfd_vms_popdate standard: %s
+adresa de pornire a lui â€ž%sâ€� este diferitÄƒ de legÄƒtura anterioarÄƒprocedurÄƒ staticÄƒ (fÄƒrÄƒ nume)cioturile(stubs) sunt Ã®n neconcordanÈ›Äƒ cu mÄƒrimea calculatÄƒsimbolsimbol simbolul â€ž%sâ€� are st_other nevalid pentru versiunea 1 a ABIsimbolul â€ž%sâ€� are tipuri diferite: REGISTER Ã®n %pB, anterior %s Ã®n %pBasocierea simbolurilor STB_GNU_UNIQUE este acceptatÄƒ numai de È›intele GNU È™i FreeBSDsimbolul necesitÄƒ o secÈ›iune de depanare care nu existÄƒtipul de simbol STT_GNU_IFUNC este acceptat doar de È›intele GNU È™i FreeBSDeroare apel de sisteminformaÈ›ii despre matricea versiunii sistemului:
+term(b): 0x%02xterm_w: 0x%04xÈ›inta bfin nu acceptÄƒ Ã®n prezent generarea de realocÄƒri de copiereexistÄƒ un conflict la fuzionarea fanioanelor de antet ELF din %pBprea multe intrÄƒri GOT pentru â€ž-fpicâ€�, recompilaÈ›i cu â€ž-fPICâ€�Ã®ncercaÈ›i sÄƒ activaÈ›i relaxarea pentru a evita trunchierea realocÄƒriispec de tip pentru element:
+spec de tip pentru indice %u:
+indicator tastat
+specificaÈ›ie tip (lungime: %u)
+nu se pot aloca date pentru comanda de Ã®ncÄƒrcare %#xnu se poate gÄƒsi %s liantul â€ž%sâ€� pentru â€ž%sâ€�nu se poate gÄƒsi secÈ›iunea de ieÈ™ire echivalentÄƒ pentru simbolul â€ž%sâ€� din secÈ›iunea â€ž%sâ€�nu se poate dispune comanda de Ã®ncÄƒrcare necunoscutÄƒ %#xnu se poate citi Ã®nregistrarea EIHS la poziÈ›ia %#xnu se poate citi Ã®n secÈ›iunea %s din %pBnu se poate scrie comanda de Ã®ncÄƒrcare necunoscutÄƒ %#xÈ™ir de biÈ›i nealiniaÈ›i de %s
+nedefinit referinÈ›Äƒ %s nedefinitÄƒ Ã®n simbolul complex: %snumÄƒr de maÈ™inÄƒ neaÈ™teptattipul de secÈ›iune de fiÈ™ier core OSF/1 %d negestionattip de intrare egsd negestionat %u
+subtip emh negestionat %u
+realocare negestionatÄƒ %snecunoscutsubtip EGSD necunoscut %dcomandÄƒ ETIR necunoscutÄƒ %dextensie ISA necunoscutÄƒ â€ž%sâ€� Ã®n .option arhitectura â€ž%sâ€�atribut necunoscut pentru simbolul â€ž%sâ€�: 0x%02xtip de bazÄƒ necunoscut %deroare necunoscutÄƒvaloare necunoscutÄƒ a ordinii octeÈ›ilor antetului %#xcomandÄƒ de linie necunoscutÄƒ %doperator necunoscut â€ž%câ€� Ã®n simbolul complexrealocare necunoscutÄƒ %srealocare necunoscutÄƒ %s + %scomanda sursÄƒ necunoscutÄƒ %dsimbol necunoscut Ã®n comanda %sarhitecturÄƒ v850 necunoscutÄƒnecunoscut: %xINPUT_SECTION_FLAG nerecunoscut %s
+identificator de È›intÄƒ TI COFF nerecunoscut â€ž0x%xâ€�realocare .stab neacceptatÄƒcomanda STA %s nu este acceptatÄƒrealocare neacceptatÄƒrealocare neacceptatÄƒrealocarea nu este acceptatÄƒ Ã®ntre spaÈ›iile de adrese date/insntip de realocare neacceptatfolosind mai multe valori gpvâ€œ sau â€žzve64dâ€œ sau â€žzve64fâ€œ sau â€žzve32fvâ€œ sau â€žzve64xâ€œ sau â€žzve32xarhitecturÄƒ v850 E3arhitecturÄƒ v850arhitecturÄƒ v850earhitecturÄƒ v850e1arhitecturÄƒ v850e2arhitecturÄƒ v850e2v3arhitecturÄƒ v850e3v5variabila â€ž%sâ€� poate fi doar Ã®ntr-una dintre regiunile de date mici, zero È™i minusculevariabila â€ž%sâ€� nu poate fi simultan È™i Ã®n regiunea de date mici È™i Ã®n cea de date minusculevariabila â€ž%sâ€� nu poate fi simultan È™i Ã®n regiunea de date mici È™i Ã®n cea de date zerovariabila â€ž%sâ€� nu poate fi simultan È™i Ã®n regiunea de date zero È™i Ã®n cea de date minusculevariabila â€ž%sâ€� nu poate ocupa regiuni multiple de date micivflags: 0x%02x, valoare: 0x%08x vma:			AdresÄƒ ÃŽnceput	 AdresÄƒ SfÃ¢rÈ™it	  DateDesf[;urate
+avertisment, dimensiunea secÈ›iunii .pdata (%ld) nu este un multiplu de %d
+avertisment: %pB È™i %pB diferÄƒ Ã®n dimensiunea wchar_tavertisment: %pB È™i %pB diferÄƒ dacÄƒ codul este compilat pentru DSBTavertisment: %pB nu acceptÄƒ interfuncÈ›ionarea, Ã®n timp ce %pB o acceptÄƒavertisment: %pB are un segment LOAD cu permisiuni RWX(de citire-scriere-execuÈ›ie)avertisment: %pB are un segment TLS cu permisiune de execuÈ›ieavertisment: %pB are un index de tabel de È™iruri coruptavertisment: %pB are un antet de program cu aliniere nevalidÄƒavertisment: %pB are o secÈ›iune care se extinde dincolo de sfÃ¢rÈ™itul fiÈ™ieruluiavertisment: %pB are un segment care se extinde dincolo de sfÃ¢rÈ™itul fiÈ™ieruluiavertisment: %pB acceptÄƒ interfuncÈ›ionarea, Ã®n timp ce %pB nu o faceavertisment: %pB foloseÈ™te versiunea cu specificaÈ›ii privilegiate %u.%u.%u, dar rezultatul foloseÈ™te versiunea %u.%u.%uavertisment: %pB foloseÈ™te %s (definitÄƒ de %pB), %pB foloseÈ™te %savertisment: %pB foloseÈ™te %s (definit de %pB), %pB foloseÈ™te ABI MSA necunoscut %davertisment: %pB foloseÈ™te %s (definitÄƒ de %pB), %pB foloseÈ™te ABI Ã®n virgulÄƒ mobilÄƒ necunoscutÄƒ %davertisment: %pB foloseÈ™te %s enumerÄƒri, dar rezultatul este sÄƒ foloseascÄƒ %s enumerÄƒri; utilizarea valorilor enumerate Ã®ntre obiecte poate eÈ™uaavertisment: %pB foloseÈ™te %u-byte wchar_t, dar rezultatul este sÄƒ foloseascÄƒ %u-byte wchar_t; folosirea valorilor wchar_t Ã®ntre obiecte poate eÈ™uaavertisment: %pB foloseÈ™te ABI MSA necunoscut %d (definit de %pB), %pB foloseÈ™te %savertisment: %pB foloseÈ™te ABI MSA necunoscut %d (definit de %pB) È™i %pB foloseÈ™te ABI MSA necunoscut %davertisment: %pB foloseÈ™te ABI Ã®n virgulÄƒ mobilÄƒ necunoscutÄƒ %d (definitÄƒ de %pB), %pB foloseÈ™te %savertisment: %pB foloseÈ™te ABI Ã®n virgulÄƒ mobilÄƒ necunoscutÄƒ %d (definitÄƒ de %pB), %pB utilizeazÄƒ ABI Ã®n virgulÄƒ mobilÄƒ necunoscutÄƒ %davertisment: %pB: configuraÈ›ie conflictualÄƒ a platformeiavertisment: %pB: configuraÈ›ia platformei %s Ã®n conflict cu %savertisment: %pB: dimensiunea GNU_PROPERTY_TYPE (%ld) este coruptÄƒ: %#lxavertisment: %pB: GNU_PROPERTY_TYPE corupt (%ld), tip (0x%x), dimensiunea datelor: 0x%xavertisment: %pB: corupt,  â€žnu este protejat la copiereâ€�, dimensiune: 0x%xavertisment: %pB: dimensiunea stivei corupte: 0x%xavertisment: %pB: simbolul local â€ž%sâ€� nu are secÈ›iuneavertisment: %pB: atribut al obiectului ARC necunoscut %davertisment: %pB: atribut necunoscut al obiectului EABI %davertizare: %pB: atribut necunoscut al obiectului MSPABI %davertisment: %pB: tip GNU_PROPERTY_TYPE (%ld) neacceptat: 0x%xavertisment: %s depÄƒÈ™eÈ™te dimensiunea secÈ›iunii
+avertisment: %s se suprapune pe %s
+avertisment: secÈ›iunea %s are dimensiunea zeroavertisment: %s ar trebui sÄƒ fie folosit Ã®n loc de %savertisment: %s: lipsa secÈ›iunii .note.GNU-stack implicÄƒ stivÄƒ executabilÄƒavertisment: %s: necesitÄƒ stivÄƒ executabilÄƒ (deoarece secÈ›iunea .note.GNU-stack este executabilÄƒ)avertisment: opÈ›iunea â€ž--plt-localentryâ€� este deosebit de periculoasÄƒ fÄƒrÄƒ suportul ld.so pentru a detecta Ã®ncÄƒlcÄƒrile ABIavertisment: opÈ›iunea â€ž--plt-localentryâ€� este incompatibilÄƒ cu codul pc-relative power10avertizare: NOTÄ‚: discrepanÈ›ele de aliniere pot cauza probleme reale.  Se recomandÄƒ efectuarea de investigaÈ›ii.avertizare: NOTÄ‚: discrepanÈ›ele de dimensiuni pot cauza probleme reale.  Se recomandÄƒ efectuarea de investigaÈ›ii.avertizare: relocare RL78_SYM cu un simbol necunoscutavertizare: realocare RX_SYM cu un simbol necunoscutavertisment: alinierea %u a simbolului comun â€ž%sâ€� Ã®n %pB este mai mare decÃ¢t alinierea (%u) a secÈ›iunii sale %pAavertisment: alinierea %u a simbolului normal â€ž%sâ€� Ã®n %pB este mai micÄƒ decÃ¢t %u folositÄƒ de definiÈ›ia comunÄƒ Ã®n %pBavertisment: alinierea %u a simbolului â€ž%sâ€� Ã®n %pB este mai micÄƒ decÃ¢t %u Ã®n %pBsavertisment: Ã®ncercare de exportare a simbolului nedefinit `%s'avertisment: apel la simbolul non-funcÈ›ional %s definit Ã®n %pBavertisment: se È™terge indicatorul de interfuncÈ›ionare din %pB, deoarece codul care nu interfuncÈ›ioneazÄƒ Ã®n %pB a fost vinculat cu acestaavertisment: se È™terge indicatorul de interfuncÈ›ionare din %pB din cauza solicitÄƒrii externeavertisment: date de desfÄƒÈ™urare corupte
+avertisment: se eliminÄƒ secÈ›iunea dinamicÄƒ %savertisment: activarea unei stive executabile datoritÄƒ opÈ›iunii din linia de comandÄƒ â€ž-z execstackâ€�avertisment: fanionul arhitecturii â€ž%2$sâ€� al fiÈ™ierului â€ž%1$pBâ€� intrÄƒ Ã®n conflict cu È›inta â€ž%3$sâ€�, definiÈ›i fanionul arhitecturii È›intÄƒ la â€ž%4$sâ€�avertisment: fanionul arhitecturii %2$s al fiÈ™ierului %1$pB intrÄƒ Ã®n conflict cu È›inta ck%3$s, folosind %4$savertisment: opÈ›iunea gc-sections a fost ignoratÄƒavertisment: se genereazÄƒ o bibliotecÄƒ partajatÄƒ care conÈ›ine cod non-PICavertisment: se genereazÄƒ o bibliotecÄƒ partajatÄƒ care conÈ›ine cod non-PIDavertisment: nu se stabileÈ™te indicatorul de interfuncÈ›ionare pentru %pB, deoarece a fost deja specificat ca neinterfuncÈ›ionareavertisment: versiunea cu specificaÈ›ii privilegiate 1.9.1 nu poate fi conectatÄƒ cu alte versiuni cu specificaÈ›iiavertisment: realocarea se referÄƒ la un segment diferitavertisment: secÈ›iunea â€ž%sâ€� este transformatÄƒ Ã®ntr-o notÄƒavertisment: tipul secÈ›iunii â€ž%pAâ€� a fost schimbat Ã®n PROGBITSavertisment: simbolul â€ž%sâ€� este atÃ¢t secÈ›iune, cÃ¢t È™i non-secÈ›iuneavertisment: tipul È™i dimensiunea simbolului dinamic â€ž%sâ€� nu sunt definiteavertisment: tipul de simbol â€ž%sâ€� s-a schimbat de la %d la %d Ã®n %pBavertisment: nu se poate stabilii dimensiunea secÈ›iunii %s Ã®n %pBavertisment: imposibil de actualizat conÈ›inutul secÈ›iunii %s din %pBavertisment: nume de arhitecturÄƒ nerecunoscut â€ž%#xâ€�avertisment: eflag de arhitecturÄƒ nerecunoscut â€ž%#lxâ€�avertisment: fanioane de arhitecturÄƒ nedefinite sau vechi; se utilizeazÄƒ maÈ™ina implicitÄƒavertisment: scrierea arhivei a fost lentÄƒ: se rescrie marcajul de timpavertisment: scrierea secÈ›iunii â€ž%pAâ€� la un decalaj uriaÈ™ (adicÄƒ negativ) Ã®n fiÈ™ieravertisment: secÈ›iunea xdata coruptÄƒ
+extensia x ISA â€ž%s'â€� trebuie definitÄƒ cu versiuniledanu aveÈ›i voie sÄƒ definiÈ›i %s Ã®ntr-un scriptzbbâ€œ sau â€žzbkbzbcâ€œ sau â€žzbkczcbâ€œ È™i â€žzbazcbâ€œ È™i â€žzbbzcbâ€œ È™i â€žzmmulâ€œ, sau â€žzcbâ€œ È™i â€žmzfhâ€œ È™i â€žzfazfhâ€œ È™i â€žzfaâ€œ, sau â€žzvfhâ€œ È™i â€žzfazfhâ€œ sau â€žzhinxzfhâ€œ sau â€žzvfhzfhminâ€œ È™i â€ždâ€œ, sau â€žzhinxminâ€œ È™i â€žzdinxzfhminâ€œ È™i â€žqâ€œ, sau â€žzhinxminâ€œ È™i â€žzqinxzfhminâ€œ sau â€žzhinxminzihintntlâ€œ È™i â€žcâ€œ, sau â€žzihintntlâ€œ È™i â€žzcazkndâ€œ sau â€žzknezvbbzvbczvkbzvkgzvknedzvknhaâ€œ sau â€žzvknhbzvksedzvkshextensiile zvl*b trebuie sÄƒ activeze fie extensia â€žvâ€� fie extensia â€žzveâ€�PRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: TLS relocation at 0x% over non-TLS symbol %s (0x%x)
+%pB: TLS local relocation at 0x% over imported symbol %s
+%pB: relocation (%d) at 0x% has wrong r_rsize (0x%x)
+%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: relocation (%d) at (0x%) has wrong r_rsize (0x%x)
+%pB: illegal relocation type %d at address %#%pB: bad string table size %%pB: stripping non-representable symbol '%s' (value 0x%)%pB: bad reloc address %# in section `%pA'error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %DWARF error: unable to locate abstract instance DIE ref %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)ERROR: CMSE stub (%s section) too far (%#) from destination (%#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#global pointer relative relocation at address %# when _gp not defined
+unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767
+%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
+ linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB(%pA+%#): misaligned symbol `%s' (%#) for relocation %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: %pA+%: relocation addend % too large%pB: version count (%) does not match symbol count (%ld)%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: bad symbol definition: `Main' set to % rather than the start address %
+%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB(%pA+%#): %s relocation offset out of order%pB(%pA+%#): %s relocation offset out of range%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csect%pB: Unable to find a stub csect in rangeof relocation at %# targeting'%s'TOC overflow: %# > 0x10000; try -mminimal-toc when compiling%pB: error: erratum 843419 immediate 0x% out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead%pB(%pA+%#): unresolvable %s relocation in section `%s'%# invaild imm%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x% without any addend, but may be 0x% after adding the %%pcrel_lo addend%pB: Data Directory (%lx bytes at %) extends across section boundary at %%pB: È™ir de decalaj nevalid % >= %%pB: realocare TOC la %# pentru simbolul â€ž%sâ€� fÄƒrÄƒ nicio intrare TOC%pB: realocare TLS la 0x% peste simbolul non-TLS %s (0x%x)
+%pB: realocare localÄƒ TLS la 0x% peste simbolul importat %s
+%pB: realocarea (%d) la 0x% are r_rsize greÈ™itÄƒ (0x%x)
+%pB: %#: avertisment: decalaj R_SH_USES incorect%pB: %#: avertisment: R_SH_USES indicÄƒ un insn nerecunoscut %#x%pB: %#: avertisment: decalaj de Ã®ncÄƒrcare R_SH_USES incorect%pB: %#: avertisment: nu s-a putut gÄƒsi realocarea aÈ™teptatÄƒ%pB: %#: avertisment: simbol Ã®n secÈ›iune neaÈ™teptatÄƒ%pB: %#: avertisment: nu s-a putut gÄƒsi realocarea COUNT(NUMÄ‚RUL)  aÈ™teptatÄƒ%pB: %#: avertisment: numÄƒrÄƒtoare(count) nevalidÄƒ%pB: %#: fatal: realocare depÄƒÈ™itÄƒ Ã®n timpul relaxÄƒrii%pB: realocarea (%d) la 0x% are r_rsize greÈ™itÄƒ (0x%x)
+%pB: tip de realocare ilegal %d la adresa %#%pB: dimensiune greÈ™itÄƒ a tabelului de È™iruri %%pB: eliminarea simbolului nereprezentabil â€ž%sâ€� (valoare 0x%)%pB: adresÄƒ de realocare incorectÄƒ %# Ã®n secÈ›iunea â€ž%pAâ€�eroare: %pB(%pA) este prea mare (%# octeÈ›i)eroare DWARF: decalaj (%) mai mare sau egal cu dimensiunea %s (%)eroare DWARF: cantitatea de date (%) mai mare decÃ¢t dimensiunea memoriei tamponeroare DWARF: tip de conÈ›inut Ã®n format necunoscut %eroare DWARF: secÈ›iunea de informaÈ›ii despre linie este prea micÄƒ (%)eroare DWARF: datele de informaÈ›ii despre linie sunt mai mari (%#) decÃ¢t spaÈ›iul rÄƒmas Ã®n secÈ›iune (%#lx)eroare DWARF: nu se poate citi referinÈ›a alternativÄƒ %eroare DWARF: nu se poate localiza referinÈ›a la instanÈ›a abstractÄƒ DIE %%pB(%pA+%#): realocare %s nerezolvatÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�%pB: decalaj de È™ir nevalid %u >= % pentru secÈ›iunea â€ž%sâ€�%pB: cÃ¢mp de dimensiune nevalid din antetul secÈ›iunii de grup: %#%pB: secÈ›iunea %pA cu lma %# ajustatÄƒ la %#%pB: avertisment: s-a detectat segment Ã®ncÄƒrcabil gol la vaddr=%#, este aceasta intenÈ›ionat ?%pB: avertisment: alinierea segmentului de %# este prea mare%pB(%pA+%#): realocarea CMEM la â€ž%sâ€� este nevalidÄƒ, 16 MSB trebuie sÄƒ fie %#x (valoarea este %#)%pB(%pA+%#): realocarea CMEM la â€ž%s+%#â€� este nevalidÄƒ, 16 MSB trebuie sÄƒ fie %#x (valoarea este %#)EROARE: ciot(stub) CMSE (secÈ›iunea %s) prea departe (%#) faÈ›Äƒ de destinaÈ›ie (%#)%pB(%pA+%#): instrucÈ›iune %s neaÈ™teptatÄƒ â€ž%#lxâ€� Ã®n trambulina TLS%pB(%pA+%#): instrucÈ›iune %s neaÈ™teptatÄƒ â€ž%#lxâ€� la care face referire TLS_GOTDESC%pB(%pA+%#): realocarea %s nu este permisÄƒ Ã®n obiectul partajat%pB(%pA+%#): numai instrucÈ›iunile ADD sau SUB sunt permise pentru realocÄƒri ale grupului ALU%pB(%pA+%#): depÄƒÈ™ire Ã®n timp ce se Ã®mparte %# pentru realocarea grupului %s%pB(%pA+%#): %s realocare faÈ›Äƒ de secÈ›iunea SEC_MERGE%pB(%pA+%#): %s utilizat cu simbolul TLS %s%pB(%pA+%#): %s utilizat cu simbolul non-TLS %s%pB(%#): eroare: nu se poate crea faÈ›eta(veneer) STM32L4XX; se iese din interval cu % octeÈ›i; nu se poate codifica instrucÈ›iunile de ramurÄƒ%pB(%pA+%#): realocare nerezolvabilÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�%pB(%pA+%#): realocare faÈ›Äƒ de â€ž%sâ€�: eroare %d%pB: realocarea la â€ž%pA+%#â€� face referire la simbolul â€ž%sâ€� cu adaos diferit de zero%pB, secÈ›iunea %pA: realocare %s cu adÄƒugarea diferitÄƒ de zero % faÈ›Äƒ de simbolul local%pB, secÈ›iunea %pA: realocare %s cu adÄƒugarea diferitÄƒ de zero % faÈ›Äƒ de simbolul â€ž%sâ€�%pB(%pA+%#): nu se poate ajunge la %s, recompilaÈ›i cu â€ž-ffunction-sectionsâ€�%pB(%pA+%#): remedierea %s pentru insn %#x nu este acceptatÄƒ Ã®ntr-o legÄƒturÄƒ nepartajatÄƒ%pB(%pA+%#): nu se poate gestiona %s pentru %s%pB: tranziÈ›ia TLS de la %s la %s faÈ›Äƒ de â€ž%sâ€� la %# din secÈ›iunea â€ž%pAâ€� a eÈ™uateditor de legÄƒturii ip2k: lipseÈ™te instrucÈ›iunea de paginÄƒ la %# (dest = %#)editor de legÄƒturii ip2k: instrucÈ›iune redundantÄƒ de paginÄƒ la %# (dest = %#)%pB: avertisment: %s indicÄƒ o realocare nerecunoscutÄƒ la %#realocare relativÄƒ a indicatorului global la adresa %# atunci cÃ¢nd _gp nu este definit
+nu se poate ajunge la %s (la %#) de la indicatorul global (la %#) deoarece decalajul (%) este Ã®n afara intervalului permis, de la -32678 la 32767
+%pB(%pA+%#): eroare: %s cu instrucÈ›iunea neaÈ™teptatÄƒ %#x%pB(%pA): realocare nesigurÄƒ a PID-ului %s la %# ( pentru %s Ã®n %s)%pB(%pA+%#): instrucÈ›iune nevalidÄƒ pentru realocarea TLS %s%pB: realocarea CALL15 la %# nu faÈ›Äƒ de simbolul global%pB: %#: avertisment: R_SH_USES indicÄƒ cÄƒtre insn nerecunoscut 0x%x%pB: %#: fatal: È›intÄƒ de ramurÄƒ nealiniatÄƒ pentru realocarea suportului-relax%pB: %#: fatal: realocare %s nealiniatÄƒ %#%pB: %#: fatal: realocarea R_SH_PSHA % nu se aflÄƒ Ã®n intervalul -32..32%pB: %#: fatal: realocarea R_SH_PSHL % nu se aflÄƒ Ã®n intervalul -32..32%pB(%pA+%#): nu poate emite remediere la â€ž%sâ€� Ã®n secÈ›iunea numai-pentru-citire%pB(%pA+%#): realocare %s faÈ›Äƒ de simbolul extern â€ž%sâ€�%pB(%pA): decalajul Ã®n realocarea pentru conversia GD->LE este prea mic: %#%pB(%pA+%#): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0xd4??)%pB(%pA+%#): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0xc7??)%pB(%pA+%#): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0xd1??)%pB(%pA+%#): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x310c)%pB(%pA+%#): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x410b)%pB(%pA+%#): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x34cc)%pB(%pA): decalajul Ã®n realocarea pentru conversia IE->LE este prea mic: %#%pB(%pA+%#): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0xd0??: mov.l)%pB(%pA+%#): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x0?12: stc)%pB(%pA+%#): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x0?ce: mov.l)%pB(%pA): decalajul Ã®n realocarea pentru conversia GD->IE este prea mic: %#%pB(%pA): decalajul Ã®n realocarea pentru conversia LD->LE este prea mic: %#%pB(%s+%#): realocare %s nerezolvabilÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�%pB: %#: avertisment: %s indicÄƒ cÄƒtre insns nerecunoscut%pB: %#: avertisment: %s indicÄƒ cÄƒtre insn nerecunoscut %#x%pB: %#: avertisment: %s indicÄƒ cÄƒtre realocare nerecunoscutÄƒ%pB: %#: avertisment: %s indicÄƒ cÄƒtre realocare nerecunoscutÄƒ %#%pB: avertisment: adÄƒugarea GOT de % la â€ž%sâ€� nu se potriveÈ™te cu adÄƒugarea GOT anterioarÄƒ de %%pB: avertisment: adÄƒugarea PLT de % la â€ž%sâ€� din secÈ›iunea %pA a fost ignoratÄƒ%pB: avertisment: realocarea %s Ã®n %# din secÈ›iunea %pA%pB(%pA+%#): decalaj de realocare Ã®n afara intervalului (dimensiune=%#)%pB(%pA+%#): nu a putut decodifica instrucÈ›iunea; posibilÄƒ neconcordanÈ›Äƒ de configurare%pB(%pA+%#): nu s-a putut decodifica instrucÈ›iunea pentru realocarea XTENSA_ASM_SIMPLIFY; posibilÄƒ neconcordanÈ›Äƒ de configurare%pB(%pA+%#): remediere neaÈ™teptatÄƒ pentru realocarea %s%pB: %pA+%#: avertisment: realocare %s faÈ›Äƒ de insn neaÈ™teptatÄƒintrarea ciot(stub) pentru %s nu poate Ã®ncÄƒrca .plt, decalaj dp = %%pB(%pA+%#): nu se poate atinge %s%pB: nu se poate relaxa br la %# Ã®n secÈ›iunea â€ž%pAâ€�; vÄƒ rugÄƒm sÄƒ folosiÈ›i brl sau ramura indirectÄƒ%pB: segment de date scurt depÄƒÈ™it (%# >= 0x400000)%pB: lipseÈ™te secÈ›iunea TLS pentru realocarea %s faÈ›Äƒ de â€ž%sâ€� la %# Ã®n secÈ›iunea â€ž%pAâ€�.%pB: Nu se poate relaxa br (%s) la â€ž%sâ€� la %# Ã®n secÈ›iunea â€ž%pAâ€� cu dimensiunea %# (> 0x1000000).avertisment: dimensiunea simbolului â€ž%sâ€� s-a schimbat de la % Ã®n %pB la % Ã®n %pB%pB(%pA): realocarea % are index de simbol nevalid %ld%pB: Eroare internÄƒ de inconsistenÈ›Äƒ pentru valoarea pentru registrul global
+alocat editorului de legÄƒturi: vinculat: %# != relaxat: %#%pB: directiva LOCAL: registrul $% nu este un registru local; primul registru global este $%%pB(%pA+%#): simbol incorect aliniat â€ž%sâ€� (%#) pentru realocarea %s%pB: realocarea %s faÈ›Äƒ de simbolul STT_GNU_IFUNC â€ž%sâ€� are o adÄƒugare non-zero: %%pB: adÄƒugarea %s%#x Ã®n realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€� la %# din secÈ›iunea â€ž%pAâ€� este Ã®n afara intervalului%pB: %pA+%: adaos de realocare % prea mare%pB: numÄƒrul de versiuni (%) nu se potriveÈ™te cu numÄƒrul de simboluri (%ld)%pB: index de simbol al realocÄƒrii incorect (%# >= %#lx) pentru poziÈ›ia %# din secÈ›iunea â€ž%pAâ€�%pB: index de simbol diferit de zero (%#) pentru poziÈ›ia %# din secÈ›iunea â€ž%pAâ€� cÃ¢nd fiÈ™ierul obiect nu are tabel de simbolurieroare: %pB conÈ›ine o realocare (%#) pentru secÈ›iunea %pA care face referire la un simbol global inexistent%pB: %pA+%#: nu a fost gÄƒsit niciun simbol pentru INHERIT%pB: dimensiunea secÈ›iunii â€ž.reginfoâ€� este incorectÄƒ; se aÈ™tepta %, s-a primit %%pB: realocarea GOT la %# nu se aÈ™teaptÄƒ Ã®n executabile%pB: realocarea CALL16 la %# nu este faÈ›Äƒ de simbol global%pB: nu se poate gÄƒsi realocarea LO16 care se potriveÈ™te cu â€ž%sâ€� pentru %s la %# Ã®n secÈ›iunea â€ž%pAâ€�%pB: intrarea â€ž%pAâ€� VMA de %# Ã®n afara intervalului de 32 de biÈ›i acceptat; luaÈ›i Ã®n considerare utilizarea â€ž-Ttext-segment=...â€�%pB: â€ž%pAâ€� decalajul lui % de la â€ž%pAâ€� dincolo de intervalul ADDIUPC%pB: Ã®nceputul lui â€ž%pAâ€� â€‹â€‹VMA din %# se aflÄƒ Ã®n afara intervalului de 32 de biÈ›i acceptat; Ã®ncercaÈ›i sÄƒ utilizaÈ›i â€ž-Ttext-segment=...â€�%pB adresa pe 64 de biÈ›i %# este Ã®n afara intervalului pentru fiÈ™ierul Intel Hex%pB: adresa %# Ã®n afara intervalului pentru fiÈ™ierul Intel Hexadresa secÈ›iunii (%#) sub Ã®nceputul segmentului (%#)%pB: acces dincolo de sfÃ¢rÈ™itul secÈ›iunii concatenate (%)%pB: Ã®ncercare de a emite conÈ›inut la o adresÄƒ ce nu este multiplu de 4 %#%pB: definiÈ›ie greÈ™itÄƒ a simbolului: â€žMainâ€� iniÈ›ializat la % Ã®n loc de adresa de pornire %
+%pB: prea multe registre iniÈ›ializate; lungimea secÈ›iunii %%pB: adresÄƒ de pornire nevalidÄƒ pentru registrele iniÈ›ializate de lungime %: %#%pB(%pA+%#): decalajul realocÄƒrii %s nu este Ã®n ordinea corectÄƒ%pB(%pA+%#): decalaj realocare %s Ã®n afara intervalului%pB: simbol XTY_ER defectuos â€ž%sâ€�: clasa %d scnum %d scnlen %%pB: simbolul XMC_TC0 â€ž%sâ€� este clasa %d scnlen %%pB: realocarea %s:% nu Ã®n csect%pB: Nu s-a putut gÄƒsi un ciot(stub) csect Ã®n intervalul de realocare de la %# care È›inteÈ™te â€ž%sâ€�Debordare a tabelului de intrÄƒri(TOC): %# > 0x10000; Ã®ncercaÈ›i â€ž-mminimal-tocâ€� la compilare%pB: eroare: Â«erratum 843419Â» imediat 0x% Ã®n afara intervalului pentru ADR (fiÈ™ier de intrare prea mare) È™i â€ž--fix-cortex-a53-843419=adrâ€�, utilizatÄƒ.  RulaÈ›i editorul de legÄƒturi cu â€ž--fix-cortex-a53-843419=fullâ€� Ã®n loc%pB(%pA+%#): realocare %s nerezolvatÄƒ Ã®n secÈ›iunea â€ž%sâ€�%# imm nevalid%pB(%pA+%#): % octeÈ›i sunt necesari pentru alinierea la limita %-octeÈ›i, dar numai % sunt prezenÈ›i%%pcrel_lo depÄƒÈ™ire cu un adaos, valoarea lui %%pcrel_hi este 0x% fÄƒrÄƒ nici un adaos, dar poate fi 0x% dupÄƒ adÄƒugarea adaosului %%pcrel_lo%pB: Directorul de date (%lx octeÈ›i la %) se extinde peste limita secÈ›iunii la %
\ No newline at end of file
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ro.po ./bfd/po/ro.po
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ro.po	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/ro.po	2024-02-01 01:47:14.000000000 +0000
@@ -1,530 +1,801 @@
-# Mesajele în limba românã pentru pachetul bfd.
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Translation of bfd to Romanian.
+# Mesajele Ã®n limba romÃ¢nÄƒ pentru pachetul bfd.
+# Copyright Â© 2003, 2022, 2023, 2024 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+#
 # Eugen Hoanca <eugenh@urban-grafx.ro>, 2003.
+# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022 - 2024.
+#
+# Cronologia traducerii fiÈ™ierului â€žbfdâ€�:
+# Traducerea iniÈ›ialÄƒ, fÄƒcutÄƒ de EH, pentru versiunea bfd 2.14rel030712
+# Actualizare a mesajelor, de la fiÈ™ierul â€žbfd-2.36.90.potâ€�.
+# Actualizare a codificÄƒrii caracterelor, la codificarea de caractere UTF-8.
+# Actualizare a diacriticelor de la â€žcu sedilÄƒâ€� la â€žcu virgulÄƒâ€�.
+# Actualizare a algoritmului formelor de plural (de la â€ždouÄƒâ€� la â€žtreiâ€�).
+# NU È™i a mesajelor traduse (acestea au rÄƒmas neschimbate).
+# Eliminare a mesajelor ce-au dispÄƒrut Ã®n ultima versiune.
+# ActualizÄƒri realizate de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 15.01.2022.
+# Actualizare a traducerii pentru versiunea 2.38.90, fÄƒcutÄƒ de R-GC, (33% - tradus), dec-2022.
+# Actualizare a traducerii pentru versiunea 2.39.90, fÄƒcutÄƒ de R-GC (80% - tradus), ian-2023.
+# Actualizare a traducerii pentru versiunea 2.40.90, fÄƒcutÄƒ de R-GC (100% - tradus), iul-2023.
+# Actualizare a traducerii pentru versiunea 2.41.90, fÄƒcutÄƒ de R-GC, ian-2024.
+# Actualizare a traducerii pentru versiunea Y, fÄƒcutÄƒ de X, Z(luna-anul).
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd 2.14rel030712\n"
-"POT-Creation-Date: 2003-07-11 13:53+0930\n"
-"PO-Revision-Date: 2003-11-25 08:39+0200\n"
-"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\n"
+"Project-Id-Version: bfd 2.41.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2024-01-15 14:55+0000\n"
+"PO-Revision-Date: 2024-01-17 00:12+0100\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Language: ro\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
 
-#: aout-adobe.c:204
-#, c-format
-msgid "%s: Unknown section type in a.out.adobe file: %x\n"
-msgstr "%s: Tip secþiune necunoscut în fiºier adobe a.out: %x\n"
-
-#: aout-cris.c:207
+#: aout-cris.c:196
 #, c-format
-msgid "%s: Invalid relocation type exported: %d"
-msgstr "%s: Tip de relocare exportat invalid: %d"
+msgid "%pB: unsupported relocation type exported: %#x"
+msgstr "%pB: tip de realocare neacceptat exportat: %#x"
 
-#: aout-cris.c:251
+#: aout-cris.c:242
 #, c-format
-msgid "%s: Invalid relocation type imported: %d"
-msgstr "%s: Tip de relocare importat invalid: %d"
+msgid "%pB: unsupported relocation type imported: %#x"
+msgstr "%pB: tip de realocare neacceptat importat: %#x"
 
-#: aout-cris.c:262
+#: aout-cris.c:254
 #, c-format
-msgid "%s: Bad relocation record imported: %d"
-msgstr "%s: Înregistrare de relocare greºitã importatã: %d"
+msgid "%pB: bad relocation record imported: %d"
+msgstr "%pB: Ã®nregistrare de realocare greÈ™itÄƒ importatÄƒ: %d"
 
-#: aoutx.h:1295 aoutx.h:1716
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1237 pdp11.c:1510
 #, c-format
-msgid "%s: can not represent section `%s' in a.out object file format"
-msgstr "%s: nu se poate reprezenta secþiunea `%s' în format de fiºier obiect a.out"
+msgid "%pB: can not represent section `%pA' in a.out object file format"
+msgstr "%pB: nu poate reprezenta secÈ›iunea â€ž%pAâ€� Ã®n format de fiÈ™ier obiect a.out"
 
-#: aoutx.h:1682
+#: aoutx.h:1576 pdp11.c:1482
 #, c-format
-msgid "%s: can not represent section for symbol `%s' in a.out object file format"
-msgstr "%s: nu se poate reprezenta secþiunea pentru simbolul `%s' în formatul de fiºier obiect a.out"
+msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
+msgstr "%pB: nu se poate reprezenta secÈ›iunea pentru simbolul â€ž%sâ€� Ã®n formatul de fiÈ™ier obiect a.out"
 
-#: aoutx.h:1684
+#: aoutx.h:1579 vms-alpha.c:8461
 msgid "*unknown*"
 msgstr "*necunoscut*"
 
-#: aoutx.h:3776
+#: aoutx.h:1715 pdp11.c:1578
 #, c-format
-msgid "%s: relocatable link from %s to %s not supported"
-msgstr "%s: legãtura relocalizabilã din %s cãtre %s nesuportatã"
+msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
+msgstr "%pB: È™ir de decalaj nevalid %<PRIu64> >= %<PRIu64>"
 
-#: archive.c:1751
-msgid "Warning: writing archive was slow: rewriting timestamp\n"
-msgstr "Avertisment: scrierea arhivei a fost lentã: se rescrie marcajul de timp(timestamp)\n"
+#: aoutx.h:1963
+#, c-format
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr "%pB: dimensiune de realocare AOUT neacceptatÄƒ: %d"
+
+#: aoutx.h:2407 aoutx.h:2425 pdp11.c:2059
+#, c-format
+msgid "%pB: attempt to write out unknown reloc type"
+msgstr "%pB: Ã®ncercare de a scrie un tip de realocare necunoscut"
+
+#: aoutx.h:4080 pdp11.c:3443
+#, c-format
+msgid "%pB: unsupported relocation type"
+msgstr "%pB: tip de realocare neacceptat"
+
+#. Unknown relocation.
+#: aoutx.h:4400 coff-alpha.c:601 coff-mips.c:356 coff-rs6000.c:3050
+#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:262 elf-hppa.h:798
+#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
+#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1063 elf32-bfin.c:4686
+#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
+#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
+#: elf32-dlx.c:546 elf32-epiphany.c:373 elf32-fr30.c:381 elf32-frv.c:2559
+#: elf32-frv.c:6240 elf32-ft32.c:304 elf32-h8300.c:302 elf32-i386.c:394
+#: elf32-ip2k.c:1241 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
+#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
+#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
+#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:708
+#: elf32-microblaze.c:1020 elf32-mips.c:2242 elf32-moxie.c:137
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3288
+#: elf32-nds32.c:3309 elf32-nds32.c:5078 elf32-nios2.c:3019 elf32-or1k.c:1087
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
+#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
+#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
+#: elf32-v850.c:1924 elf32-v850.c:4250 elf32-vax.c:289 elf32-visium.c:481
+#: elf32-wasm32.c:105 elf32-xgate.c:418 elf32-xstormy16.c:395
+#: elf32-xtensa.c:510 elf32-xtensa.c:544 elf32-z80.c:331 elf64-alpha.c:1114
+#: elf64-alpha.c:4056 elf64-alpha.c:4204 elf64-bpf.c:132 elf64-ia64-vms.c:255
+#: elf64-ia64-vms.c:3426 elf64-mips.c:3965 elf64-mips.c:3981 elf64-mmix.c:1264
+#: elf64-nfp.c:151 elf64-ppc.c:1031 elf64-ppc.c:1385 elf64-ppc.c:1394
+#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3799
+#: elfxx-ia64.c:324 elfxx-loongarch.c:1895 elfxx-riscv.c:989 elfxx-sparc.c:589
+#: elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3821 elfnn-kvx.c:259
+#, c-format
+msgid "%pB: unsupported relocation type %#x"
+msgstr "%pB: tip de realocare neacceptat %#x"
+
+#: aoutx.h:5427 pdp11.c:3866
+#, c-format
+msgid "%pB: relocatable link from %s to %s not supported"
+msgstr "%pB: legÄƒtura realocabilÄƒ de la %s la %s nu este acceptatÄƒ"
+
+#: arc-got.h:69
+#, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr "%pB: nu se poate aloca memorie pentru intrÄƒrile GOT locale"
+
+#: archive.c:753
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr "%F%P: %pB(%s): eroare la deschiderea membrului subÈ›ire al arhivei: %E\n"
+
+#: archive.c:2294
+msgid "warning: writing archive was slow: rewriting timestamp"
+msgstr "avertisment: scrierea arhivei a fost lentÄƒ: se rescrie marcajul de timp"
+
+#: archive.c:2362 archive.c:2423 elflink.c:4800 linker.c:1434
+#, c-format
+msgid "%pB: plugin needed to handle lto object"
+msgstr "%pB: este necesar un modul pentru a gestiona obiectul lto"
 
-#: archive.c:2014
+#: archive.c:2655
 msgid "Reading archive file mod timestamp"
-msgstr "Citirea fiºierului arhivã mod marcaj de timp"
+msgstr "Se citeÈ™te marcajul de timp al fiÈ™ierului arhivei"
 
-#: archive.c:2040
+#: archive.c:2686
 msgid "Writing updated armap timestamp"
-msgstr "Scriere marcaj de timp armap înnoit"
+msgstr "Se scrie marcajul de timp armap actualizat"
 
-#: bfd.c:280
-msgid "No error"
-msgstr "Nici o eroare"
+#: bfd.c:740
+msgid "no error"
+msgstr "nicio eroare"
 
-#: bfd.c:281
-msgid "System call error"
-msgstr "Eroare apel sistem"
+#: bfd.c:741
+msgid "system call error"
+msgstr "eroare apel de sistem"
 
-#: bfd.c:282
-msgid "Invalid bfd target"
-msgstr "Þintã bfd invalidã"
+#: bfd.c:742
+msgid "invalid bfd target"
+msgstr "È›intÄƒ bfd nevalidÄƒ"
 
-#: bfd.c:283
-msgid "File in wrong format"
-msgstr "Fiºier în format eronat"
+#: bfd.c:743
+msgid "file in wrong format"
+msgstr "fiÈ™ier Ã®n format eronat"
 
-#: bfd.c:284
-msgid "Archive object file in wrong format"
-msgstr "Fiºier obiect arhivã în format eronat"
+#: bfd.c:744
+msgid "archive object file in wrong format"
+msgstr "fiÈ™ier obiect de arhivÄƒ Ã®n format eronat"
 
-#: bfd.c:285
-msgid "Invalid operation"
-msgstr "Operaþie invalidã"
+#: bfd.c:745
+msgid "invalid operation"
+msgstr "operaÈ›ie nevalidÄƒ"
 
-#: bfd.c:286
-msgid "Memory exhausted"
-msgstr "Memorie plinã"
+#: bfd.c:746
+msgid "memory exhausted"
+msgstr "memorie epuizatÄƒ"
 
-#: bfd.c:287
-msgid "No symbols"
-msgstr "Nici un simbol"
+#: bfd.c:747
+msgid "no symbols"
+msgstr "niciun simbol"
 
-#: bfd.c:288
-msgid "Archive has no index; run ranlib to add one"
-msgstr "Arhiva nu are nici un index.; rulaþi ranlib pentru a adãuga unul"
+#: bfd.c:748
+msgid "archive has no index; run ranlib to add one"
+msgstr "arhiva nu are niciun index.; rulaÈ›i Â«ranlibÂ» pentru a adÄƒuga unul"
 
-#: bfd.c:289
-msgid "No more archived files"
-msgstr "Nu mai existã fiºiere arhivate"
+#: bfd.c:749
+msgid "no more archived files"
+msgstr "nu mai existÄƒ fiÈ™iere arhivate"
 
-#: bfd.c:290
-msgid "Malformed archive"
-msgstr "Arhivã malformatã"
+#: bfd.c:750
+msgid "malformed archive"
+msgstr "arhivÄƒ defectuoasÄƒ"
 
-#: bfd.c:291
-msgid "File format not recognized"
-msgstr "Formatul de fiºier nu a fost recunoscut"
+#: bfd.c:751
+msgid "DSO missing from command line"
+msgstr "DSO lipseÈ™te din linia de comandÄƒ"
 
-#: bfd.c:292
-msgid "File format is ambiguous"
-msgstr "Formatul de fiºier este ambiguu"
+#: bfd.c:752
+msgid "file format not recognized"
+msgstr "formatul fiÈ™ierului nu este recunoscut"
 
-#: bfd.c:293
-msgid "Section has no contents"
-msgstr "Secþiunea nu are conþinut"
+#: bfd.c:753
+msgid "file format is ambiguous"
+msgstr "formatul fiÈ™ierului este ambiguu"
 
-#: bfd.c:294
-msgid "Nonrepresentable section on output"
-msgstr "Secþiune de output nereprezentabilã"
+#: bfd.c:754
+msgid "section has no contents"
+msgstr "secÈ›iunea nu are conÈ›inut"
 
-#: bfd.c:295
-msgid "Symbol needs debug section which does not exist"
-msgstr "Simbolul necesitã secþiune de debug care nu existã"
+#: bfd.c:755
+msgid "nonrepresentable section on output"
+msgstr "secÈ›iune nereprezentabilÄƒ la ieÈ™ire"
 
-#: bfd.c:296
-msgid "Bad value"
-msgstr "Valoare eronatã"
+#: bfd.c:756
+msgid "symbol needs debug section which does not exist"
+msgstr "simbolul necesitÄƒ o secÈ›iune de depanare care nu existÄƒ"
 
-#: bfd.c:297
-msgid "File truncated"
-msgstr "Fiºier trunchiat"
+#: bfd.c:757
+msgid "bad value"
+msgstr "valoare eronatÄƒ"
 
-#: bfd.c:298
-msgid "File too big"
-msgstr "Fiºier prea mare"
+#: bfd.c:758
+msgid "file truncated"
+msgstr "fiÈ™ier trunchiat"
 
-#: bfd.c:299
-msgid "#<Invalid error code>"
-msgstr "#<Cod invalid de eroare>"
+#: bfd.c:759
+msgid "file too big"
+msgstr "fiÈ™ier prea mare"
 
-#: bfd.c:687
+#: bfd.c:760
+msgid "sorry, cannot handle this file"
+msgstr "scuze, nu se poate gestiona acest fiÈ™ier"
+
+#: bfd.c:761
+#, c-format
+msgid "error reading %s: %s"
+msgstr "eroare la citirea %s: %s"
+
+#: bfd.c:762
+msgid "#<invalid error code>"
+msgstr "#<cod de eroare nevalid>"
+
+#: bfd.c:2019
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
-msgstr "Aserþiunea BFD %s a eºuat %s:%d"
+msgstr "aserÈ›iunea BFD %s a eÈ™uat %s:%d"
 
-#: bfd.c:703
+#: bfd.c:2032
 #, c-format
-msgid "BFD %s internal error, aborting at %s line %d in %s\n"
-msgstr "Eroare interna BFD %s, se renunþã la %s linia %d în %s\n"
+msgid "BFD %s internal error, aborting at %s:%d in %s\n"
+msgstr "eroare interna BFD %s, se renunÈ›Äƒ la %s:%d din %s\n"
 
-#: bfd.c:707
+#: bfd.c:2037
 #, c-format
-msgid "BFD %s internal error, aborting at %s line %d\n"
-msgstr "Eroare internã BFD %s, se renunþã la %s linia %d\n"
+msgid "BFD %s internal error, aborting at %s:%d\n"
+msgstr "eroare internÄƒ BFD %s, se renunÈ›Äƒ la %s:%d\n"
 
-#: bfd.c:709
+#: bfd.c:2039
 msgid "Please report this bug.\n"
-msgstr "Vã rugãm raportaþi acest bug.\n"
+msgstr "RaportaÈ›i aceastÄƒ eroare.\n"
 
-#: bfdwin.c:202
+#: bfdwin.c:261
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
-msgstr "nu se mapeazã: data=%lx mapat =%d\n"
+msgstr "nu se cartografiazÄƒ: date=%lx cartografiate =%d\n"
 
-#: bfdwin.c:205
+#: bfdwin.c:264
+#, c-format
 msgid "not mapping: env var not set\n"
-msgstr "nu se mapeazã: variabila env nu este setatã\n"
+msgstr "nu se cartografiazÄƒ: variabila env nu este definitÄƒ\n"
 
-#: binary.c:306
+#: binary.c:277
 #, c-format
-msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx."
-msgstr "Avertisment: Scrierea secþiunii `%s' spre offset de fiºier imens (sau negativ) 0x%lx"
+msgid "warning: writing section `%pA' at huge (ie negative) file offset"
+msgstr "avertisment: scrierea secÈ›iunii â€ž%pAâ€� la un decalaj uriaÈ™ (adicÄƒ negativ) Ã®n fiÈ™ier"
 
-#: coff-a29k.c:120
-msgid "Missing IHCONST"
-msgstr "IHCONST lipsã"
+#: cache.c:275
+#, c-format
+msgid "reopening %pB: %s"
+msgstr "se redeschide %pB: %s"
 
-#: coff-a29k.c:181
-msgid "Missing IHIHALF"
-msgstr "IHHALF lipsã"
+#: coff-alpha.c:450
+#, c-format
+msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
+msgstr "%pB: nu se pot gestiona fiÈ™ierele binare Alpha comprimate; utilizaÈ›i opÈ›iunile compilatorului, sau objZ, pentru a genera fiÈ™iere binare necomprimate"
 
-#: coff-a29k.c:213 coff-or32.c:236
-msgid "Unrecognized reloc"
-msgstr "Reloc necunoscut"
+#: coff-alpha.c:867 coff-alpha.c:894 coff-alpha.c:2004 coff-mips.c:948
+msgid "GP relative relocation used when GP not defined"
+msgstr "realocarea relativÄƒ a GP utilizatÄƒ atunci cÃ¢nd GP nu este definit"
 
-#: coff-a29k.c:409
-msgid "missing IHCONST reloc"
-msgstr "IHCONST reloc lipsã"
+#: coff-alpha.c:1151 coff-z80.c:351 coff-z8k.c:214 elf32-nds32.c:13189
+#: elfxx-mips.c:13520 reloc.c:8683 reloc16.c:314
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgstr "%X%P: %pB(%pA): realocarea â€ž%pRâ€� iese Ã®n afara intervalului\n"
 
-#: coff-a29k.c:499
-msgid "missing IHIHALF reloc"
-msgstr "IHIHALF reloc lipsã"
+#: coff-alpha.c:1157 coff-z80.c:477 coff-z8k.c:378 elfxx-mips.c:13530
+#: reloc.c:8693
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr "%X%P: %pB(%pA): realocarea â€ž%pRâ€� nu este acceptatÄƒ\n"
 
-#: coff-alpha.c:884 coff-alpha.c:921 coff-alpha.c:1992 coff-mips.c:1397
-msgid "GP relative relocation used when GP not defined"
-msgstr "Relocare relativã GP folositã când GP nu este definit"
+#: coff-alpha.c:1163 elfxx-mips.c:13539 reloc.c:8702
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr "%X%P: %pB(%pA): relocarea â€ž%pRâ€� returneazÄƒ o valoare nerecunoscutÄƒ %x\n"
 
-#: coff-alpha.c:1488
+#: coff-alpha.c:1489
 msgid "using multiple gp values"
-msgstr "folosire de valori multiple gp"
+msgstr "folosind mai multe valori gp"
 
-#: coff-arm.c:1066 elf32-arm.h:294
+#: coff-alpha.c:1987
 #, c-format
-msgid "%s: unable to find THUMB glue '%s' for `%s'"
-msgstr "%s: nu s-a putut gãsi legãtura(glue) THUMB `%s' pentru `%s'"
+msgid "%X%P: %pB(%pA): relocation out of range\n"
+msgstr "%X%P: %pB(%pA): realocare Ã®n afara intervalului\n"
 
-#: coff-arm.c:1096 elf32-arm.h:329
+#: coff-alpha.c:1999
 #, c-format
-msgid "%s: unable to find ARM glue '%s' for `%s'"
-msgstr "%s: nu s-a putut gãsi legãtura(glue) ARM `%s' pentru `%s'"
+msgid "%X%P: %pB(%pA): relocation is not supported\n"
+msgstr "%X%P: %pB(%pA): realocarea nu este acceptatÄƒ\n"
 
-#: coff-arm.c:1394 coff-arm.c:1489 elf32-arm.h:892 elf32-arm.h:999
+#: coff-go32.c:167 coffswap.h:812
 #, c-format
-msgid "%s(%s): warning: interworking not enabled."
-msgstr "%s(%s): avertisment: interlucrul(interworking) nu este activat"
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: avertisment: %s: depÄƒÈ™ire a numÄƒrului de linii: 0x%lx > 0xffff"
 
-#: coff-arm.c:1398 elf32-arm.h:1002
+#: coff-mips.c:638 elf32-mips.c:1743 elf32-score.c:433 elf32-score7.c:333
+#: elf64-mips.c:3450 elfn32-mips.c:3277
+msgid "GP relative relocation when _gp not defined"
+msgstr "realocarea relativÄƒ a GP atunci cÃ¢nd _gp nu este definit"
+
+#: coff-rs6000.c:484 coff64-rs6000.c:377
 #, c-format
-msgid "  first occurrence: %s: arm call to thumb"
-msgstr "  prima gãsire: %s: apelare braþ(arm) cãtre deget(thumb)"
+msgid "%pB: unsupported swap_aux_in for storage class %#x"
+msgstr "%pB: swap_aux_in neacceptat pentru clasa de stocare %#x"
 
-#: coff-arm.c:1493 elf32-arm.h:895
+#: coff-rs6000.c:571 coff64-rs6000.c:497
 #, c-format
-msgid "  first occurrence: %s: thumb call to arm"
-msgstr "  prima gãsire: %s: apelare deget(thumb) cãtre braþ(arm)"
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr "%pB: swap_aux_out neacceptat pentru clasa de stocare %#x"
 
-#: coff-arm.c:1496
-msgid "  consider relinking with --support-old-code enabled"
-msgstr "  luaþi în considerare relinkuirea cu --support-old-code activat"
+#: coff-rs6000.c:3140
+#, c-format
+msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
+msgstr "%pB: realocare TOC la %#<PRIx64> pentru simbolul â€ž%sâ€� fÄƒrÄƒ nicio intrare TOC"
 
-#: coff-arm.c:1788 coff-tic80.c:687 cofflink.c:3038
+#: coff-rs6000.c:3264 coff64-rs6000.c:848
 #, c-format
-msgid "%s: bad reloc address 0x%lx in section `%s'"
-msgstr "%s: adresã eronatã de relocare 0x%lx în secþiunea `%s'"
+msgid "Unable to find the stub entry targeting %s"
+msgstr "Imposibil de gÄƒsit intrarea ciot(stub) care vizeazÄƒ %s"
 
-#: coff-arm.c:2132
+#: coff-rs6000.c:3379
 #, c-format
-msgid "%s: illegal symbol index in reloc: %d"
-msgstr "%s: index ilegal de simbol în reloc: %d"
+msgid "%pB: TLS relocation at 0x%<PRIx64> over non-TLS symbol %s (0x%x)\n"
+msgstr "%pB: realocare TLS la 0x%<PRIx64> peste simbolul non-TLS %s (0x%x)\n"
 
-#: coff-arm.c:2265
+#: coff-rs6000.c:3392
 #, c-format
-msgid "ERROR: %s is compiled for APCS-%d, whereas %s is compiled for APCS-%d"
-msgstr "EROARE: %s este compilat pentru APCS-%d, pe când %s e compilat pentru APCS-%d"
+msgid "%pB: TLS local relocation at 0x%<PRIx64> over imported symbol %s\n"
+msgstr "%pB: realocare localÄƒ TLS la 0x%<PRIx64> peste simbolul importat %s\n"
 
-#: coff-arm.c:2280 elf32-arm.h:2328
+#: coff-rs6000.c:3798
 #, c-format
-msgid "ERROR: %s passes floats in float registers, whereas %s passes them in integer registers"
-msgstr "EROARE: %s trimite float în regiºtrii de float, pe când %s îi trimite în regiºtrii de integer"
+msgid "%pB: relocation (%d) at 0x%<PRIx64> has wrong r_rsize (0x%x)\n"
+msgstr "%pB: realocarea (%d) la 0x%<PRIx64> are r_rsize greÈ™itÄƒ (0x%x)\n"
 
-#: coff-arm.c:2283 elf32-arm.h:2333
+#: coff-rs6000.c:4060 coff64-rs6000.c:2030
 #, c-format
-msgid "ERROR: %s passes floats in integer registers, whereas %s passes them in float registers"
-msgstr "EROARE: %s trimite integer în regiºtrii de integer, pe când %s îi trimite în regiºtrii de float"
+msgid "%pB: symbol `%s' has unrecognized smclas %d"
+msgstr "%pB: simbolul â€ž%sâ€� are smclas nerecunoscut %d"
 
-#: coff-arm.c:2298
+#: coff-sh.c:781 elf32-sh.c:521
 #, c-format
-msgid "ERROR: %s is compiled as position independent code, whereas target %s is absolute position"
-msgstr "EROARE: %s este compilat ca ºi cod independent de poziþie,pe când þinta %seste poziþie absolutã"
+msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES offset"
+msgstr "%pB: %#<PRIx64>: avertisment: decalaj R_SH_USES incorect"
 
-#: coff-arm.c:2301
+#: coff-sh.c:792
 #, c-format
-msgid "ERROR: %s is compiled as absolute position code, whereas target %s is position independent"
-msgstr "EROARE: %s este compilat ca ºi cod poziþie absolutã,pe când þinta %seste independentã de poziþie"
+msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn %#x"
+msgstr "%pB: %#<PRIx64>: avertisment: R_SH_USES indicÄƒ un insn nerecunoscut %#x"
 
-#: coff-arm.c:2330 elf32-arm.h:2405
+#: coff-sh.c:810 elf32-sh.c:552
 #, c-format
-msgid "Warning: %s supports interworking, whereas %s does not"
-msgstr "Avertisment: %s suportã interlucru(interworking), pe când %s nu suportã"
+msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
+msgstr "%pB: %#<PRIx64>: avertisment: decalaj de Ã®ncÄƒrcare R_SH_USES incorect"
 
-#: coff-arm.c:2333 elf32-arm.h:2412
+#: coff-sh.c:835 elf32-sh.c:568
 #, c-format
-msgid "Warning: %s does not support interworking, whereas %s does"
-msgstr "Avertisment: %s nu suportã interlucru(interworking), pe când %s suportã"
+msgid "%pB: %#<PRIx64>: warning: could not find expected reloc"
+msgstr "%pB: %#<PRIx64>: avertisment: nu s-a putut gÄƒsi realocarea aÈ™teptatÄƒ"
 
-#: coff-arm.c:2360
+#: coff-sh.c:852 elf32-sh.c:597
 #, c-format
-msgid "private flags = %x:"
-msgstr "marcaje(flags) private = %x:"
+msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
+msgstr "%pB: %#<PRIx64>: avertisment: simbol Ã®n secÈ›iune neaÈ™teptatÄƒ"
 
-#: coff-arm.c:2368 elf32-arm.h:2467
-msgid " [floats passed in float registers]"
-msgstr " [floats trecuþi în regiºtri de float]"
+#: coff-sh.c:973 elf32-sh.c:727
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
+msgstr "%pB: %#<PRIx64>: avertisment: nu s-a putut gÄƒsi realocarea COUNT(NUMÄ‚RUL)  aÈ™teptatÄƒ"
 
-#: coff-arm.c:2370
-msgid " [floats passed in integer registers]"
-msgstr " [floats trecuþi în regiºtrii de integer]"
+#: coff-sh.c:983 elf32-sh.c:738
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: bad count"
+msgstr "%pB: %#<PRIx64>: avertisment: numÄƒrÄƒtoare(count) nevalidÄƒ"
 
-#: coff-arm.c:2373 elf32-arm.h:2470
-msgid " [position independent]"
-msgstr "[ independent de poziþie]"
+#: coff-sh.c:1349 coff-sh.c:2636 elf32-sh.c:1138 elf32-sh.c:1506
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
+msgstr "%pB: %#<PRIx64>: fatal: realocare depÄƒÈ™itÄƒ Ã®n timpul relaxÄƒrii"
+
+#: coff-sh.c:1443
+#, c-format
+msgid "%pB: fatal: generic symbols retrieved before relaxing"
+msgstr "%pB: fatal: simboluri generice recuperate Ã®nainte de relaxare"
 
-#: coff-arm.c:2375
-msgid " [absolute position]"
-msgstr " [poziþie absolutã]"
+#: coff-sh.c:2773 cofflink.c:2947
+#, c-format
+msgid "%pB: illegal symbol index %ld in relocs"
+msgstr "%pB: index de simbol ilegal %ld Ã®n realocÄƒri"
+
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:338 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5314
+#, c-format
+msgid "%pB: warning: illegal symbol index %ld in relocs"
+msgstr "%pB: avertisment: index de simbol ilegal %ld Ã®n realocÄƒri"
 
-#: coff-arm.c:2379
-msgid " [interworking flag not initialised]"
-msgstr " [marcajul(flag) de interlucru(interworking) nu este iniþializat]"
+#: coff-x86_64.c:147
+msgid "R_AMD64_IMAGEBASE with __ImageBase undefined"
+msgstr "R_AMD64_IMAGEBASE cu __ImageBase nedefinitÄƒ"
+
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
+#, c-format
+msgid "%pB: C_STAT isn't supported by XCOFF64"
+msgstr "%pB: C_STAT nu este acceptat de XCOFF64"
 
-#: coff-arm.c:2381
-msgid " [interworking supported]"
-msgstr " [interlucru(interworking) suportat]"
+#: coff64-rs6000.c:477
+#, c-format
+msgid "%pB: wrong auxtype %#x for storage class %#x"
+msgstr "%pB: tip auxiliar greÈ™it (auxtype) %#x, pentru clasa de stocare %#x"
 
-#: coff-arm.c:2383
-msgid " [interworking not supported]"
-msgstr " [interlucru(interworking) nesuportat]"
+#: coff64-rs6000.c:1598
+#, c-format
+msgid "%pB: relocation (%d) at (0x%<PRIx64>) has wrong r_rsize (0x%x)\n"
+msgstr "%pB: realocarea (%d) la 0x%<PRIx64> are r_rsize greÈ™itÄƒ (0x%x)\n"
 
-#: coff-arm.c:2431 elf32-arm.h:2150
+#: coffcode.h:951
 #, c-format
-msgid "Warning: Not setting interworking flag of %s since it has already been specified as non-interworking"
-msgstr "Avertisment: Nu se seteazã marcajul(flagu) de interlucru(interworking) al %s atâta timp cât a fost specificat ca non-interlucru(interworking)"
+msgid "%pB: unable to load COMDAT section name"
+msgstr "%pB: nu se poate Ã®ncÄƒrca numele secÈ›iunii COMDAT"
 
-#: coff-arm.c:2435 elf32-arm.h:2154
+#: coffcode.h:976
 #, c-format
-msgid "Warning: Clearing the interworking flag of %s due to outside request"
-msgstr "Avertisment: Se ºterge marcajul(flag) de interlucru(interworking) al %s datoritã unei cereri din afarã"
+msgid "%pB: warning: no symbol for section '%s' found"
+msgstr "%pB: avertisment: nu a fost gÄƒsit niciun simbol pentru secÈ›iunea â€ž%sâ€�"
 
-#: coff-h8300.c:1096
+#: coffcode.h:1148
 #, c-format
-msgid "cannot handle R_MEM_INDIRECT reloc when using %s output"
-msgstr "nu am putut mainpula(handle) relocarea R_MEM_INDIRECT în folosirea ieºirii(output) %s"
+msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
+msgstr "%pB: eroare: simbol neaÈ™teptat â€ž%sâ€� Ã®n secÈ›iunea COMDAT"
 
-#: coff-i960.c:137 coff-i960.c:486
-msgid "uncertain calling convention for non-COFF symbol"
-msgstr "convenþie de apelare nesigurã pentru simbol non-COFF"
+#: coffcode.h:1159
+#, c-format
+msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
+msgstr "%pB: avertisment: simbolul COMDAT â€ž%sâ€� nu se potriveÈ™te cu numele secÈ›iunii â€ž%sâ€�"
 
-#: coff-m68k.c:482 coff-mips.c:2394 elf32-m68k.c:2193 elf32-mips.c:1783
-msgid "unsupported reloc type"
-msgstr "tip de relocare nesuportat"
+#. Generate a warning message rather using the 'unhandled'
+#. variable as this will allow some .sys files generate by
+#. other toolchains to be processed.  See bugzilla issue 196.
+#: coffcode.h:1267
+#, c-format
+msgid "%pB: warning: ignoring section flag %s in section %s"
+msgstr "%pB: avertisment: se ignorÄƒ fanionul secÈ›iunii %s Ã®n secÈ›iunea %s"
 
-#: coff-mips.c:839 elf32-mips.c:1088 elf64-mips.c:1590 elfn32-mips.c:1554
-msgid "GP relative relocation when _gp not defined"
-msgstr "Relocare relativã GP atâta timp cât _gp nu este definit"
+#: coffcode.h:1337
+#, c-format
+msgid "%pB (%s): section flag %s (%#lx) ignored"
+msgstr "%pB (%s): fanion de secÈ›iune %s (%#lx) ignorat"
 
-#. No other sections should appear in -membedded-pic
-#. code.
-#: coff-mips.c:2431
-msgid "reloc against unsupported section"
-msgstr "relocare pe o secþiune nesuportatã"
+#: coffcode.h:1954
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr "%pB: pragul maxim al contorului de realocÄƒri este prea mic"
 
-#: coff-mips.c:2439
-msgid "reloc not properly aligned"
-msgstr "relocare incorect aliniatã"
+#: coffcode.h:1963 coffcode.h:2028
+#, c-format
+msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
+msgstr "%pB: avertisment: pretinde cÄƒ are 0xffff realocÄƒri, fÄƒrÄƒ depÄƒÈ™ire"
 
-#: coff-rs6000.c:2790
+#: coffcode.h:2411
 #, c-format
-msgid "%s: unsupported relocation type 0x%02x"
-msgstr "%s: tip de relocare nesuportat 0x%02x"
+msgid "unrecognized TI COFF target id '0x%x'"
+msgstr "identificator de È›intÄƒ TI COFF nerecunoscut â€ž0x%xâ€�"
 
-#: coff-rs6000.c:2883
+#: coffcode.h:2690
 #, c-format
-msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry"
-msgstr "%s: relocare TOC la 0x%x cãtre simbolul `%s' fãrã nici o intrare TOC"
+msgid "%pB: reloc against a non-existent symbol index: %ld"
+msgstr "%pB: realocare faÈ›Äƒ de un index de simbol inexistent: %ld"
 
-#: coff-rs6000.c:3616 coff64-rs6000.c:2109
+#: coffcode.h:3162
 #, c-format
-msgid "%s: symbol `%s' has unrecognized smclas %d"
-msgstr "%s: simbolul `%s' are un smclas necunoscut %d"
+msgid "%pB: too many sections (%d)"
+msgstr "%pB: prea multe secÈ›iuni (%d)"
 
-#: coff-tic4x.c:170 coff-tic54x.c:288 coff-tic80.c:450
+#: coffcode.h:3690
 #, c-format
-msgid "Unrecognized reloc type 0x%x"
-msgstr "Tip de relocare necunoscut 0x%x"
+msgid "%pB: section %pA: string table overflow at offset %ld"
+msgstr "%pB: secÈ›iunea %pA: depÄƒÈ™ire a tabelului de È™iruri la poziÈ›ia %ld"
 
-#: coff-tic4x.c:218 coff-tic54x.c:373 coffcode.h:5045
+#: coffcode.h:3791
 #, c-format
-msgid "%s: warning: illegal symbol index %ld in relocs"
-msgstr "%s: avertisment: index ilegal de simbol %ld în relocãri"
+msgid "%pB:%s section %s: alignment 2**%u not representable"
+msgstr "%pB:%s secÈ›iunea %s: aliniatul 2**%u nu este reprezentabil"
 
-#: coff-w65.c:364
+#: coffcode.h:4532
 #, c-format
-msgid "ignoring reloc %s\n"
-msgstr "se ignorã reloc %s\n"
+msgid "%pB: warning: line number table read failed"
+msgstr "%pB: avertisment: citirea tabelului cu numere de linie a eÈ™uat"
 
-#: coffcode.h:1108
+#: coffcode.h:4578 coffcode.h:4592
 #, c-format
-msgid "%s (%s): Section flag %s (0x%x) ignored"
-msgstr "%s (%s): Marcajul(flag) de secþiune %s (0x%x) ignorat"
+msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
+msgstr "%pB: avertisment: index de simbol ilegal 0x%lx Ã®n intrarea cu numÄƒrul de linie %d"
 
-#: coffcode.h:2214
+#: coffcode.h:4606
 #, c-format
-msgid "Unrecognized TI COFF target id '0x%x'"
-msgstr "Id þintã TI COFF necunoscut `0x%x'"
+msgid "%pB: warning: illegal symbol in line number entry %d"
+msgstr "%pB: avertisment: simbol ilegal Ã®n intrarea cu numÄƒrul de linie %d"
 
-#: coffcode.h:4437
+#: coffcode.h:4619
 #, c-format
-msgid "%s: warning: illegal symbol index %ld in line numbers"
-msgstr "%s: avertisment: index ilegal de simbol %ld în numãrul de linii"
+msgid "%pB: warning: duplicate line number information for `%s'"
+msgstr "%pB: avertisment: informaÈ›ii despre numÄƒrul liniei duplicate pentru â€ž%sâ€�"
 
-#: coffcode.h:4451
+#: coffcode.h:5043
 #, c-format
-msgid "%s: warning: duplicate line number information for `%s'"
-msgstr "%s: avertisment: informaþie duplicat a numãrului de linii pentru `%s'"
+msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
+msgstr "%pB: clasÄƒ de stocare nerecunoscutÄƒ %d pentru simbolul %s â€ž%sâ€�"
 
-#: coffcode.h:4805
+#: coffcode.h:5183
 #, c-format
-msgid "%s: Unrecognized storage class %d for %s symbol `%s'"
-msgstr "%s: Clasã de depozitare(storage) %d necunoscutã pentru %s simbolul `%s'"
+msgid "warning: %pB: local symbol `%s' has no section"
+msgstr "avertisment: %pB: simbolul local â€ž%sâ€� nu are secÈ›iune"
 
-#: coffcode.h:4938
+#: coffcode.h:5354
 #, c-format
-msgid "warning: %s: local symbol `%s' has no section"
-msgstr "avertisment: %s: simbolul local `%s' nu are secþiune"
+msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
+msgstr "%pB: tip de realocare ilegal %d la adresa %#<PRIx64>"
 
-#: coffcode.h:5083
+#: coffgen.c:255 elf.c:1226
 #, c-format
-msgid "%s: illegal relocation type %d at address 0x%lx"
-msgstr "%s: tip ilegal de relocare %d la adresa 0x%lx"
+msgid "%pB: unable to compress section %s"
+msgstr "%pB: nu se poate comprima secÈ›iunea %s"
 
-#: coffgen.c:1666
+#: coffgen.c:265 elf.c:1236
 #, c-format
-msgid "%s: bad string table size %lu"
-msgstr "%s: mãrime tabel ºiruri invalidã %lu"
+msgid "%pB: unable to decompress section %s"
+msgstr "%pB: nu se poate decomprima secÈ›iunea %s"
 
-#: cofflink.c:538 elflink.h:1276
+#: coffgen.c:1781
 #, c-format
-msgid "Warning: type of symbol `%s' changed from %d to %d in %s"
-msgstr "Avertisment: tipul de simbol `%s' schimbat de la %d la %d în %s"
+msgid "%pB: bad string table size %<PRIu64>"
+msgstr "%pB: dimensiune greÈ™itÄƒ a tabelului de È™iruri %<PRIu64>"
 
-#: cofflink.c:2328
+#: coffgen.c:1931 coffgen.c:1981 coffgen.c:2031 coffgen.c:2050 cofflink.c:2012
+#: elf.c:2478 xcofflink.c:5532
+msgid "<corrupt>"
+msgstr "<corupt>"
+
+#: coffgen.c:2192
 #, c-format
-msgid "%s: relocs in section `%s', but it has no contents"
-msgstr "%s: relocãri în secþiunea `%s', dar fãrã conþinut"
+msgid "<corrupt info> %s"
+msgstr "<informaÈ›ie coruptÄƒ> %s"
+
+#: coffgen.c:2796 elflink.c:15219 linker.c:2985
+msgid "%F%P: already_linked_table: %E\n"
+msgstr "%F%P: already_linked_table: %E\n"
 
-#: cofflink.c:2671 coffswap.h:890
+#: coffgen.c:3138 elflink.c:14159
 #, c-format
-msgid "%s: %s: reloc overflow: 0x%lx > 0xffff"
-msgstr "%s: %s: depãºire(overflow) de relocãri: 0x%lx > 0xffff"
+msgid "removing unused section '%pA' in file '%pB'"
+msgstr "se eliminÄƒ secÈ›iunea â€ž%pAâ€� nefolositÄƒ din fiÈ™ierul â€ž%pBâ€�"
+
+#: coffgen.c:3215 elflink.c:14389
+msgid "warning: gc-sections option ignored"
+msgstr "avertisment: opÈ›iunea gc-sections a fost ignoratÄƒ"
 
-#: cofflink.c:2680 coffswap.h:876
+#: cofflink.c:398
 #, c-format
-msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff"
-msgstr "%s: avertisment: %s: depãºire(overflow) numãr de linii: 0x%lx > 0xffff"
+msgid "warning: symbol `%s' is both section and non-section"
+msgstr "avertisment: simbolul â€ž%sâ€� este atÃ¢t secÈ›iune, cÃ¢t È™i non-secÈ›iune"
 
-#: cpu-arm.c:196 cpu-arm.c:206
+#: cofflink.c:503 elf64-ia64-vms.c:5200 elflink.c:5407
 #, c-format
-msgid "ERROR: %s is compiled for the EP9312, whereas %s is compiled for XScale"
-msgstr "EROARE: %s este compilat pentru EP9312, pe când %s e compilat pentru XScale"
+msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
+msgstr "avertisment: tipul de simbol â€ž%sâ€� s-a schimbat de la %d la %d Ã®n %pB"
 
-#: cpu-arm.c:344
+#: cofflink.c:2340
 #, c-format
-msgid "warning: unable to update contents of %s section in %s"
-msgstr "avertisment: imposibil de adus la zi(update) conþinutul secþiunii %s în %s"
+msgid "%pB: relocs in section `%pA', but it has no contents"
+msgstr "%pB: realocÄƒri in sectiunea â€ž%pAâ€�, dar aceasta nu are conÈ›inut"
 
-#: dwarf2.c:380
-msgid "Dwarf Error: Can't find .debug_str section."
-msgstr "Eroare Pitic(Dwarf): Nu pot gãsi secþiunea debug_str"
+#: cofflink.c:2403 elflink.c:11600
+#, c-format
+msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
+msgstr "%Xâ€ž%sâ€� la care se face referire Ã®n secÈ›iunea â€ž%pAâ€� din %pB: este definit Ã®n secÈ›iunea eliminatÄƒ â€ž%pAâ€� din %pB\n"
+
+#: cofflink.c:2598
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%<PRIx64>)"
+msgstr "%pB: eliminarea simbolului nereprezentabil â€ž%sâ€� (valoare 0x%<PRIx64>)"
+
+#: cofflink.c:2716
+#, c-format
+msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
+msgstr "%pB: %pA: depÄƒÈ™ire de realocÄƒri: %#x > 0xffff"
+
+#: cofflink.c:2724
+#, c-format
+msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
+msgstr "%pB: avertisment: %pA: depÄƒÈ™ire numÄƒr de linii: %#x > 0xffff"
+
+#: cofflink.c:3118
+#, c-format
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr "%pB: adresÄƒ de realocare incorectÄƒ %#<PRIx64> Ã®n secÈ›iunea â€ž%pAâ€�"
+
+#: coffswap.h:826
+#, c-format
+msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
+msgstr "%pB: %s: depÄƒÈ™ire de realocÄƒri: 0x%lx > 0xffff"
+
+#: compress.c:744 compress.c:761
+#, c-format
+msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
+msgstr "eroare: %pB(%pA) este prea mare (%#<PRIx64> octeÈ›i)"
+
+#: cpu-arm.c:320 cpu-arm.c:332
+#, c-format
+msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
+msgstr "eroare: %pB este compilat pentru EP9312, pe cÃ¢nd %pB este compilat pentru XScale"
 
-#: dwarf2.c:397
+#: cpu-arm.c:469
 #, c-format
-msgid "Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."
-msgstr "Eroare Pitic(Dwarf): DW_FORM_strp offset (%lu) mai mare sau egalã cu mãrimea .debug_str (%lu)."
+msgid "warning: unable to update contents of %s section in %pB"
+msgstr "avertisment: imposibil de actualizat conÈ›inutul secÈ›iunii %s din %pB"
 
-#: dwarf2.c:541
-msgid "Dwarf Error: Can't find .debug_abbrev section."
-msgstr "Eroare Pitic(Dwarf): Nu pot gãsi secþiunea debug_abbrev."
+#: dwarf2.c:705
+#, c-format
+msgid "DWARF error: can't find %s section."
+msgstr "eroare DWARF: nu se gÄƒseÈ™te secÈ›iunea %s."
+
+#: dwarf2.c:713
+#, c-format
+msgid "DWARF error: section %s has no contents"
+msgstr "eroare DWARF: secÈ›iunea %s nu are conÈ›inut"
+
+#. PR 26946
+#: dwarf2.c:722
+#, c-format
+msgid "DWARF error: section %s is too big"
+msgstr "eroare DWARF: secÈ›iunea %s este prea mare"
+
+#: dwarf2.c:757
+#, c-format
+msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
+msgstr "eroare DWARF: decalaj (%<PRIu64>) mai mare sau egal cu dimensiunea %s (%<PRIu64>)"
+
+#: dwarf2.c:1504
+msgid "DWARF error: info pointer extends beyond end of attributes"
+msgstr "eroare DWARF: indicatorul de informaÈ›ii se extinde dincolo de sfÃ¢rÈ™itul atributelor"
+
+#: dwarf2.c:1696
+#, c-format
+msgid "DWARF error: invalid or unhandled FORM value: %#x"
+msgstr "eroare DWARF: valoare FORM nevalidÄƒ sau neprocesabilÄƒ: %#x"
+
+#: dwarf2.c:2043
+msgid "DWARF error: mangled line number section (bad file number)"
+msgstr "eroare DWARF: secÈ›iune a numÄƒrului de linie deterioratÄƒ (numÄƒr de fiÈ™ier greÈ™it)"
+
+#: dwarf2.c:2585
+msgid "DWARF error: zero format count"
+msgstr "eroare DWARF: numÄƒr(contor) de format zero"
+
+#: dwarf2.c:2595
+#, c-format
+msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
+msgstr "eroare DWARF: cantitatea de date (%<PRIx64>) mai mare decÃ¢t dimensiunea memoriei tampon"
+
+#: dwarf2.c:2634
+#, c-format
+msgid "DWARF error: unknown format content type %<PRIu64>"
+msgstr "eroare DWARF: tip de conÈ›inut Ã®n format necunoscut %<PRIu64>"
+
+#: dwarf2.c:2707
+#, c-format
+msgid "DWARF error: line info section is too small (%<PRId64>)"
+msgstr "eroare DWARF: secÈ›iunea de informaÈ›ii despre linie este prea micÄƒ (%<PRId64>)"
+
+#: dwarf2.c:2734
+#, c-format
+msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
+msgstr "eroare DWARF: datele de informaÈ›ii despre linie sunt mai mari (%#<PRIx64>) decÃ¢t spaÈ›iul rÄƒmas Ã®n secÈ›iune (%#lx)"
 
-#: dwarf2.c:556
+#: dwarf2.c:2747
 #, c-format
-msgid "Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."
-msgstr "Eroare Pitic(Dwarf): Offset abbrev(%lu) mai mare sau egal cu mãrimea .debug_abbrev (%lu)."
+msgid "DWARF error: unhandled .debug_line version %d"
+msgstr "eroare DWARF: versiune .debug_line neprocesatÄƒ %d"
 
-#: dwarf2.c:756
+#: dwarf2.c:2756
+msgid "DWARF error: ran out of room reading prologue"
+msgstr "eroare DWARF: s-a rÄƒmas fÄƒrÄƒ spaÈ›iu citind prologul"
+
+#: dwarf2.c:2772
 #, c-format
-msgid "Dwarf Error: Invalid or unhandled FORM value: %u."
-msgstr "Eroare Pitic(Dwarf): Valoare FORM invalidã sau nemanipulabilã: %u."
+msgid "DWARF error: line info unsupported segment selector size %u"
+msgstr "eroare DWARF: dimensiunea selectorului de segmente %u, nu este acceptatÄƒ pentru informaÈ›iile de linie"
+
+#: dwarf2.c:2794
+msgid "DWARF error: invalid maximum operations per instruction"
+msgstr "eroare DWARF: maximul de operaÈ›ii pe instrucÈ›iune nu este valid"
+
+#: dwarf2.c:2806
+msgid "DWARF error: ran out of room reading opcodes"
+msgstr "eroare DWARF: s-a rÄƒmas fÄƒrÄƒ spaÈ›iu citind codurile operaÈ›ionale"
 
-#: dwarf2.c:933
-msgid "Dwarf Error: mangled line number section (bad file number)."
-msgstr "Eroare Pitic(Dwarf): secþiune numãr de linii trunchiatã (numãr fiºier eronat)"
+#: dwarf2.c:2984
+msgid "DWARF error: mangled line number section"
+msgstr "eroare DWARF: secÈ›iunea cu numÄƒrul de linie deterioratÄƒ"
 
-#: dwarf2.c:1032
-msgid "Dwarf Error: Can't find .debug_line section."
-msgstr "Eroare Pitic(Dwarf): Nu pot gãsi secþiunea debug_line."
+#: dwarf2.c:3455
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "eroare DWARF: recursiune a unei instanÈ›e abstracte a fost detectatÄƒ"
 
-#: dwarf2.c:1049
+#: dwarf2.c:3489 dwarf2.c:3579
+msgid "DWARF error: invalid abstract instance DIE ref"
+msgstr "eroare DWARF: referinÈ›Äƒ DIE a instanÈ›ei abstracte nevalidÄƒ"
+
+#: dwarf2.c:3505
 #, c-format
-msgid "Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."
-msgstr "Eroare Pitic(Dwarf): Offsetul de linie (%lu) mai mare sau egal cu mãrimea .debug_line (%lu)"
+msgid "DWARF error: unable to read alt ref %<PRIu64>"
+msgstr "eroare DWARF: nu se poate citi referinÈ›a alternativÄƒ %<PRIu64>"
 
-#: dwarf2.c:1255
-msgid "Dwarf Error: mangled line number section."
-msgstr "Eroare Pitic(Dwarf): secþiune trunchiatã numãr de linii"
+#: dwarf2.c:3557
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr "eroare DWARF: nu se poate localiza referinÈ›a la instanÈ›a abstractÄƒ DIE %<PRIu64>"
 
-#: dwarf2.c:1470 dwarf2.c:1620
+#: dwarf2.c:3594 dwarf2.c:3910 dwarf2.c:4483
 #, c-format
-msgid "Dwarf Error: Could not find abbrev number %u."
-msgstr "Eroare Pitic(Dwarf): Nu am putut gãsi numãrul abbrev: %u."
+msgid "DWARF error: could not find abbrev number %u"
+msgstr "eroare DWARF: nu s-a putut gÄƒsi numÄƒrul abreviat %u"
 
-#: dwarf2.c:1581
+#: dwarf2.c:4183
 #, c-format
-msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."
-msgstr "Eroare Pitic(Dwarf): S-a gãsit dwarf versiunea `%u', acest cititor manipuleazã doar informaþii ale versiunii 2."
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
+msgstr "eroare DWARF: nu s-a putut gÄƒsi specificaÈ›ia variabilei la poziÈ›ia 0x%lx"
+
+#: dwarf2.c:4329 dwarf2.c:4583
+msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
+msgstr "eroare DWARF: atributul DW_AT_comp_dir a fost gÄƒsit cu o formÄƒ fÄƒrÄƒ È™ir"
 
-#: dwarf2.c:1588
+#: dwarf2.c:4400
 #, c-format
-msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."
-msgstr "Eroare Pitic(Dwarf): s-a gãsit adresa mãrimea `%u', acest cititor nu poate manipula mãrimi mai mari decât `%u'"
+msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
+msgstr "eroare DWARF: a fost gÄƒsit Â«dwarfÂ» versiunea â€ž%uâ€�, acest cititor gestioneazÄƒ doar informaÈ›iile despre versiunile 2, 3, 4 È™i 5"
 
-#: dwarf2.c:1611
+#: dwarf2.c:4447
 #, c-format
-msgid "Dwarf Error: Bad abbrev number: %u."
-msgstr "Eroare Pitic(Dwarf): Numãr invalid de abbrev: %u"
+msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
+msgstr "eroare DWARF: s-a gÄƒsit adresa cu dimensiunea â€ž%uâ€�, acest cititor nu poate gestiona dimensiuni mai mari de â€ž%uâ€�"
 
-#: ecoff.c:1339
+#: ecoff.c:1016
 #, c-format
-msgid "Unknown basic type %d"
-msgstr "Tip de bazã necunoscut %d"
+msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
+msgstr "%pB: avertisment: isymMax (%ld) este mai mare decÃ¢t ifdMax (%ld)"
 
-#: ecoff.c:1599
+#: ecoff.c:1312
+#, c-format
+msgid "unknown basic type %d"
+msgstr "tip de bazÄƒ necunoscut %d"
+
+#: ecoff.c:1568
 #, c-format
 msgid ""
 "\n"
 "      End+1 symbol: %ld"
 msgstr ""
 "\n"
-"      Simbol Sfârºit+1: %ld"
+"      Simbol SfÃ¢rÈ™it+1: %ld"
 
-#: ecoff.c:1606 ecoff.c:1609
+#: ecoff.c:1575 ecoff.c:1578
 #, c-format
 msgid ""
 "\n"
@@ -533,16 +804,16 @@ msgstr ""
 "\n"
 "      Primul simbol: %ld"
 
-#: ecoff.c:1621
+#: ecoff.c:1593
 #, c-format
 msgid ""
 "\n"
 "      End+1 symbol: %-7ld   Type:  %s"
 msgstr ""
 "\n"
-"      Simbol Sfârºit+1: %-7ld   Tip:  %s"
+"      Simbol SfÃ¢rÈ™it+1: %-7ld   Tip:  %s"
 
-#: ecoff.c:1628
+#: ecoff.c:1601
 #, c-format
 msgid ""
 "\n"
@@ -551,34 +822,34 @@ msgstr ""
 "\n"
 "      Simbol local: %ld"
 
-#: ecoff.c:1636
+#: ecoff.c:1609
 #, c-format
 msgid ""
 "\n"
 "      struct; End+1 symbol: %ld"
 msgstr ""
 "\n"
-"      struct; Simbol Sfârºit+1: %ld"
+"      struct; Simbol SfÃ¢rÈ™it+1: %ld"
 
-#: ecoff.c:1641
+#: ecoff.c:1614
 #, c-format
 msgid ""
 "\n"
 "      union; End+1 symbol: %ld"
 msgstr ""
 "\n"
-"      uniune; Simbol Sfârºit+1: %ld"
+"      union; Simbol SfÃ¢rÈ™it+1: %ld"
 
-#: ecoff.c:1646
+#: ecoff.c:1619
 #, c-format
 msgid ""
 "\n"
 "      enum; End+1 symbol: %ld"
 msgstr ""
 "\n"
-"      enum; Simbol Sfârºit+1: %ld"
+"      enum; Simbol SfÃ¢rÈ™it+1: %ld"
 
-#: ecoff.c:1652
+#: ecoff.c:1627
 #, c-format
 msgid ""
 "\n"
@@ -587,2247 +858,8507 @@ msgstr ""
 "\n"
 "      Tip: %s"
 
-#: elf-hppa.h:1458 elf-hppa.h:1491 elf-m10300.c:1628 elf64-sh64.c:1704
+#: elf-attrs.c:417 elf-attrs.c:447 elf-attrs.c:623
+msgid "error adding attribute"
+msgstr "eroare la adÄƒugarea atributului"
+
+#: elf-attrs.c:503
+#, c-format
+msgid "%pB: error: attribute section '%pA' too big: %#llx"
+msgstr "%pB: eroare: secÈ›iunea de atribut â€ž%pAâ€� prea mare: %#llx"
+
+#: elf-attrs.c:540
+#, c-format
+msgid "%pB: error: attribute section length too small: %ld"
+msgstr "%pB: eroare: lungimea secÈ›iunii de atribut prea micÄƒ: %ld"
+
+#: elf-attrs.c:673
+#, c-format
+msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain"
+msgstr "eroare: %pB: obiectul are conÈ›inut specific furnizorului care trebuie procesat de lanÈ›ul de instrumente â€ž%sâ€�"
+
+#: elf-attrs.c:683
+#, c-format
+msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
+msgstr "eroare: %pB: eticheta obiectului â€ž%d, %sâ€� este incompatibilÄƒ cu eticheta â€ž%d, %sâ€�"
+
+#: elf-eh-frame.c:945
+#, c-format
+msgid "discarding zero address range FDE in %pB(%pA).\n"
+msgstr "eliminÃ¢nd intervalul de adrese zero FDE Ã®n %pB(%pA).\n"
+
+#: elf-eh-frame.c:1050
+#, c-format
+msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
+msgstr "eroare Ã®n %pB(%pA); nu va fi creat nici un tabel .eh_frame_hdr"
+
+#: elf-eh-frame.c:1542
 #, c-format
-msgid "%s: warning: unresolvable relocation against symbol `%s' from %s section"
-msgstr "%s: avertisment: relocare nerezolvabilã pe simbolul `%s; din secþiunea `%s'"
+msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
+msgstr "codificarea FDE Ã®n %pB(%pA) Ã®mpiedicÄƒ crearea tabelului .eh_frame_hdr"
 
-#: elf-m10200.c:442 elf-m10300.c:1695 elf32-arm.h:2088 elf32-avr.c:812
-#: elf32-cris.c:1390 elf32-d10v.c:570 elf32-fr30.c:634 elf32-frv.c:815
-#: elf32-h8300.c:528 elf32-i860.c:1028 elf32-ip2k.c:1586 elf32-iq2000.c:699
-#: elf32-m32r.c:1283 elf32-m68hc1x.c:1305 elf32-msp430.c:510
-#: elf32-openrisc.c:436 elf32-v850.c:1777 elf32-xstormy16.c:976
-#: elf64-mmix.c:1332
+#: elf-eh-frame.c:1549
+msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
+msgstr "avertismentele suplimentare despre codificarea FDE care Ã®mpiedicÄƒ generarea .eh_frame_hdr au fost omise"
+
+#: elf-eh-frame.c:1868
+#, c-format
+msgid "%pB: %pA not in order"
+msgstr "%pB: %pA nu este Ã®n ordine"
+
+#: elf-eh-frame.c:1882
+#, c-format
+msgid "%pB: %pA invalid input section size"
+msgstr "%pB: %pA dimensiunea secÈ›iunii de intrare nu este validÄƒ"
+
+#: elf-eh-frame.c:1890
+#, c-format
+msgid "%pB: %pA points past end of text section"
+msgstr "%pB: %pA indicÄƒ dincolo de sfÃ¢rÈ™itul secÈ›iunii de text"
+
+#: elf-eh-frame.c:2143
+msgid "DW_EH_PE_datarel unspecified for this architecture"
+msgstr "DW_EH_PE_datarel nespecificat pentru aceastÄƒ arhitecturÄƒ"
+
+#: elf-eh-frame.c:2314
+#, c-format
+msgid "invalid output section for .eh_frame_entry: %pA"
+msgstr "secÈ›iune de ieÈ™ire nevalidÄƒ pentru .eh_frame_entry: %pA"
+
+#: elf-eh-frame.c:2337
+#, c-format
+msgid "invalid contents in %pA section"
+msgstr "conÈ›inut nevalid Ã®n secÈ›iunea %pA"
+
+#: elf-eh-frame.c:2493
+msgid ".eh_frame_hdr entry overflow"
+msgstr "depÄƒÈ™ire de intrare .eh_frame_hdr"
+
+#: elf-eh-frame.c:2495
+msgid ".eh_frame_hdr refers to overlapping FDEs"
+msgstr ".eh_frame_hdr se referÄƒ la FDE-uri suprapuse"
+
+#. xgettext:c-format.
+#: elf-ifunc.c:144 elfnn-loongarch.c:1427
+#, c-format
+msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
+msgstr "%F%P: simbolul STT_GNU_IFUNC dinamic â€ž%sâ€� cu egalitatea indicatorului Ã®n â€ž%pBâ€� nu poate fi folosit cÃ¢nd se creeazÄƒ un executabil; recompilaÈ›i cu â€ž-fPIEâ€� È™i reeditaÈ›i legÄƒturile cu â€ž-pieâ€�\n"
+
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-bfin.c:3133 elf32-cr16.c:1429
+#: elf32-cris.c:2034 elf32-crx.c:922 elf32-d10v.c:510 elf32-epiphany.c:563
+#: elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:492 elf32-h8300.c:523
+#: elf32-ip2k.c:1478 elf32-iq2000.c:691 elf32-lm32.c:1070 elf32-m32c.c:624
+#: elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522 elf32-metag.c:1984
+#: elf32-microblaze.c:1682 elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6093
+#: elf32-or1k.c:1897 elf32-score.c:2734 elf32-score7.c:2545 elf32-spu.c:5085
+#: elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
+#: elf32-xstormy16.c:930 elf64-bpf.c:339 elf64-mmix.c:1541 elfxx-tilegx.c:3742
 msgid "internal error: out of range error"
-msgstr "eroare internã: eroare depãºire de domeniu(out of range)"
+msgstr "eroare internÄƒ: eroare Ã®n afara intervalului"
 
-#: elf-m10200.c:446 elf-m10300.c:1699 elf32-arm.h:2092 elf32-avr.c:816
-#: elf32-cris.c:1394 elf32-d10v.c:574 elf32-fr30.c:638 elf32-frv.c:819
-#: elf32-h8300.c:532 elf32-i860.c:1032 elf32-iq2000.c:703 elf32-m32r.c:1287
-#: elf32-m68hc1x.c:1309 elf32-msp430.c:514 elf32-openrisc.c:440
-#: elf32-v850.c:1781 elf32-xstormy16.c:980 elf64-mmix.c:1336 elfxx-mips.c:6452
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-bfin.c:3137 elf32-cr16.c:1433
+#: elf32-cris.c:2038 elf32-crx.c:926 elf32-d10v.c:514 elf32-fr30.c:598
+#: elf32-frv.c:4053 elf32-ft32.c:496 elf32-h8300.c:527 elf32-iq2000.c:695
+#: elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841 elf32-m68hc1x.c:1275
+#: elf32-mep.c:526 elf32-metag.c:1988 elf32-microblaze.c:1686 elf32-moxie.c:292
+#: elf32-msp430.c:1510 elf32-nds32.c:6097 elf32-or1k.c:1901 elf32-score.c:2738
+#: elf32-score7.c:2549 elf32-spu.c:5089 elf32-tilepro.c:3376 elf32-v850.c:2298
+#: elf32-visium.c:684 elf32-xstormy16.c:934 elf64-mmix.c:1545
+#: elfxx-mips.c:10658 elfxx-tilegx.c:3746
 msgid "internal error: unsupported relocation error"
-msgstr "eroare internã: eroare de relocare nesuportatã"
+msgstr "eroare internÄƒ: eroare de realocare neacceptatÄƒ"
 
-#: elf-m10200.c:450 elf-m10300.c:1703 elf32-arm.h:2096 elf32-d10v.c:578
-#: elf32-h8300.c:536 elf32-m32r.c:1291 elf32-m68hc1x.c:1313
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:930 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
+#: elf32-microblaze.c:1690 elf32-nds32.c:6101 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5093
 msgid "internal error: dangerous error"
-msgstr "eroare internã: eroare periculoasã"
+msgstr "eroare internÄƒ: eroare periculoasÄƒ"
 
-#: elf-m10200.c:454 elf-m10300.c:1707 elf32-arm.h:2100 elf32-avr.c:824
-#: elf32-cris.c:1402 elf32-d10v.c:582 elf32-fr30.c:646 elf32-frv.c:827
-#: elf32-h8300.c:540 elf32-i860.c:1040 elf32-ip2k.c:1601 elf32-iq2000.c:711
-#: elf32-m32r.c:1295 elf32-m68hc1x.c:1317 elf32-msp430.c:522
-#: elf32-openrisc.c:448 elf32-v850.c:1801 elf32-xstormy16.c:988
-#: elf64-mmix.c:1344
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-bfin.c:3145 elf32-cr16.c:1441
+#: elf32-cris.c:2046 elf32-crx.c:934 elf32-d10v.c:522 elf32-epiphany.c:578
+#: elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:504 elf32-h8300.c:535
+#: elf32-ip2k.c:1493 elf32-iq2000.c:703 elf32-lm32.c:1082 elf32-m32c.c:636
+#: elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534 elf32-metag.c:1996
+#: elf32-microblaze.c:1694 elf32-moxie.c:300 elf32-msp430.c:1518 elf32-mt.c:410
+#: elf32-nds32.c:6105 elf32-or1k.c:1909 elf32-score.c:2751 elf32-score7.c:2557
+#: elf32-spu.c:5097 elf32-tilepro.c:3384 elf32-v850.c:2318 elf32-visium.c:692
+#: elf32-xstormy16.c:942 elf64-bpf.c:352 elf64-mmix.c:1553 elfxx-tilegx.c:3754
 msgid "internal error: unknown error"
-msgstr "eroare internã: eroare necunoscutã"
+msgstr "eroare internÄƒ: eroare necunoscutÄƒ"
+
+#: elf-m10300.c:1030
+#, c-format
+msgid "%pB: unsupported transition from %s to %s"
+msgstr "%pB: tranziÈ›ie neacceptatÄƒ de la %s la %s"
+
+#: elf-m10300.c:1197
+#, c-format
+msgid "%pB: %s' accessed both as normal and thread local symbol"
+msgstr "%pB: %s a fost accesat atÃ¢t ca simbol local normal, cÃ¢t È™i ca simbol local al firului de execuÈ›ie"
+
+#: elf-m10300.c:2093 elf32-arm.c:13398 elf32-i386.c:3494 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3023 elf64-s390.c:3042 elf64-x86-64.c:4369 elfxx-sparc.c:2917
+#: elfxx-sparc.c:3814 elfxx-tilegx.c:3665 elfnn-aarch64.c:5713
+#: elfnn-aarch64.c:7322 elfnn-kvx.c:2775
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
+msgstr "%pB(%pA+%#<PRIx64>): realocare %s nerezolvatÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�"
+
+#: elf-m10300.c:2155
+msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
+msgstr "eroare: tip de realocare neadecvat pentru biblioteca partajatÄƒ (aÈ›i uitat sÄƒ adÄƒugaÈ›i opÈ›iunea â€ž-fpicâ€�?)"
+
+#: elf-m10300.c:2159
+#, c-format
+msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library"
+msgstr "%pB: obÈ›inerea adresei funcÈ›iei protejate â€ž%sâ€� nu poate fi fÄƒcutÄƒ atunci cÃ¢nd se creeazÄƒ o bibliotecÄƒ partajatÄƒ"
+
+#: elf-m10300.c:2162
+msgid "internal error: suspicious relocation type used in shared library"
+msgstr "eroare internÄƒ: tip de realocare suspect utilizat Ã®n biblioteca partajatÄƒ"
+
+#: elf-m10300.c:2650 elf32-avr.c:2488 elf32-frv.c:5621 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8457 reloc16.c:155 elfnn-ia64.c:365
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: opÈ›iunile â€ž--relaxâ€� È™i â€ž-râ€� nu pot fi folosite Ã®mpreunÄƒ\n"
+
+#: elf-properties.c:65
+#, c-format
+msgid "%pB: out of memory in _bfd_elf_get_property"
+msgstr "%pB: memorie insuficientÄƒ Ã®n _bfd_elf_get_property"
+
+#: elf-properties.c:91
+#, c-format
+msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lx"
+msgstr "avertisment: %pB: dimensiunea GNU_PROPERTY_TYPE (%ld) este coruptÄƒ: %#lx"
+
+#: elf-properties.c:112
+#, c-format
+msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%x"
+msgstr "avertisment: %pB: GNU_PROPERTY_TYPE corupt (%ld), tip (0x%x), dimensiunea datelor: 0x%x"
+
+#: elf-properties.c:151
+#, c-format
+msgid "warning: %pB: corrupt stack size: 0x%x"
+msgstr "avertisment: %pB: dimensiunea stivei corupte: 0x%x"
+
+#: elf-properties.c:169
+#, c-format
+msgid "warning: %pB: corrupt no copy on protected size: 0x%x"
+msgstr "avertisment: %pB: corupt,  â€žnu este protejat la copiereâ€�, dimensiune: 0x%x"
+
+#: elf-properties.c:189
+#, c-format
+msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
+msgstr "eroare: %pB: <dimensiunea proprietÄƒÈ›ii (0x%x) este coruptÄƒ: 0x%x>"
+
+#: elf-properties.c:214
+#, c-format
+msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
+msgstr "avertisment: %pB: tip GNU_PROPERTY_TYPE (%ld) neacceptat: 0x%x"
+
+#: elf-properties.c:400
+msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
+msgstr "Proprietatea %W a fost eliminatÄƒ pentru a fuziona %pB (0x%v) È™i %pB (0x%v)\n"
+
+#: elf-properties.c:406
+msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
+msgstr "Proprietatea %W a fost eliminatÄƒ pentru a fuziona %pB (0x%v) È™i %pB (nu a fost gÄƒsitÄƒ)\n"
+
+#: elf-properties.c:415 elf-properties.c:493
+msgid "Removed property %W to merge %pB and %pB\n"
+msgstr "Proprietatea %W a fost eliminatÄƒ pentru a fuziona %pB È™i %pB\n"
+
+#: elf-properties.c:419
+msgid "Removed property %W to merge %pB and %pB (not found)\n"
+msgstr "Proprietatea %W a fost eliminatÄƒ pentru a fuziona %pB È™i %pB (nu a fost gÄƒsitÄƒ)\n"
+
+#: elf-properties.c:436
+msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
+msgstr "S-a actualizat proprietatea %W (0x%v) pentru a fuziona %pB (0x%v) È™i %pB (0x%v)\n"
+
+#: elf-properties.c:445
+msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
+msgstr "S-a actualizat proprietatea %W (%v) pentru a fuziona %pB (0x%v) È™i %pB (nu a fost gÄƒsitÄƒ)\n"
+
+#: elf-properties.c:487
+msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
+msgstr "Proprietatea %W a fost eliminatÄƒ pentru a fuziona %pB (negÄƒsitÄƒ) È™i %pB (0x%v)\n"
+
+#: elf-properties.c:668 elfxx-aarch64.c:758 elfxx-x86.c:4147
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: nu s-a putut crea secÈ›iunea de proprietate GNU\n"
+
+#: elf-properties.c:672 elfxx-aarch64.c:762 elfxx-x86.c:4152
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: nu s-a putut alinia secÈ›iunea\n"
+
+#. Merge .note.gnu.property sections.
+#: elf-properties.c:698 elf-properties.c:700
+msgid "\n"
+msgstr "\n"
+
+#: elf-properties.c:699
+msgid "Merging program properties\n"
+msgstr "Se Ã®mbinÄƒ proprietÄƒÈ›ile programului\n"
+
+#: elf-sframe.c:240
+#, c-format
+msgid "error in %pB(%pA); no .sframe will be created"
+msgstr "eroare Ã®n %pB(%pA); nu va fi creat niciun .sframe"
+
+#: elf-sframe.c:400
+msgid "input SFrame sections with different abi prevent .sframe generation"
+msgstr "secÈ›iunile de intrare SFrame cu abi diferite Ã®mpiedicÄƒ generarea .sframe"
+
+#: elf-sframe.c:411
+msgid "input SFrame sections with different format versions prevent .sframe generation"
+msgstr "secÈ›iunile de intrare SFrame cu versiuni de format diferite Ã®mpiedicÄƒ generarea .sframe"
+
+#. PR 17512: file: f057ec89.
+#: elf.c:328
+#, c-format
+msgid "%pB: attempt to load strings from a non-string section (number %d)"
+msgstr "%pB: Ã®ncercare de-a Ã®ncÄƒrca È™iruri dintr-o secÈ›iune fÄƒrÄƒ È™iruri (numÄƒrul %d)"
+
+#: elf.c:353
+#, c-format
+msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
+msgstr "%pB: decalaj de È™ir nevalid %u >= %<PRIu64> pentru secÈ›iunea â€ž%sâ€�"
 
-#: elf.c:372
+#: elf.c:517 elf32-arm.c:17731 elfnn-aarch64.c:8322 elfnn-loongarch.c:5102
 #, c-format
-msgid "%s: invalid string offset %u >= %lu for section `%s'"
-msgstr "%s: offset de ºir invalid %u >= %lu pentru secþiunea `%s'"
+msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
+msgstr "%pB numÄƒrul simbol %lu face referire la secÈ›iunea SHT_SYMTAB_SHNDX inexistentÄƒ"
 
-#: elf.c:624
+#: elf.c:679
 #, c-format
-msgid "%s: invalid SHT_GROUP entry"
-msgstr "%s: intrare SHT_GROUP invalidã"
+msgid "%pB: invalid size field in group section header: %#<PRIx64>"
+msgstr "%pB: cÃ¢mp de dimensiune nevalid din antetul secÈ›iunii de grup: %#<PRIx64>"
 
-#: elf.c:695
+#: elf.c:724
 #, c-format
-msgid "%s: no group info for section %s"
-msgstr "%s nu existã informaþii de grup pentru secþiunea %s"
+msgid "%pB: invalid entry in SHT_GROUP section [%u]"
+msgstr "%pB: intrare nevalidÄƒ Ã®n secÈ›iunea SHT_GROUP [%u]"
 
-#: elf.c:1055
+#: elf.c:743
+#, c-format
+msgid "%pB: no valid group sections found"
+msgstr "%pB: nu au fost gÄƒsite secÈ›iuni de grup valide"
+
+#. See PR 21957 for a reproducer.
+#: elf.c:772
+#, c-format
+msgid "%pB: group section '%pA' has no contents"
+msgstr "%pB: secÈ›iunea de grup â€ž%pAâ€� nu are conÈ›inut"
+
+#: elf.c:833
+#, c-format
+msgid "%pB: no group info for section '%pA'"
+msgstr "%pB: nu existÄƒ informaÈ›ii de grup pentru secÈ›iunea â€ž%pAâ€�"
+
+#: elf.c:885
+#, c-format
+msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
+msgstr "%pB: sh_link [%d] din secÈ›iunea â€ž%pAâ€� este incorect"
+
+#: elf.c:898
+#, c-format
+msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
+msgstr "%pB: secÈ›iunea SHT_GROUP [index %d] nu are secÈ›iuni SHF_GROUP"
+
+#: elf.c:920
+#, c-format
+msgid "%pB: section group entry number %u is corrupt"
+msgstr "%pB: numÄƒrul de intrare al grupului de secÈ›iune %u este corupt"
+
+#: elf.c:943
+#, c-format
+msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
+msgstr "%pB: tip necunoscut [%#x] de secÈ›iune â€ž%sâ€� Ã®n grupul [%pA]"
+
+#: elf.c:1244
+#, c-format
+msgid "%pB: section %s is compressed with zstd, but BFD is not built with zstd support"
+msgstr "%pB: secÈ›iunea %s este comprimatÄƒ cu zstd, dar BFD nu este construit cu suport pentru zstd"
+
+#: elf.c:1440
+#, c-format
+msgid "%pB: invalid sh_link field (%d) in section number %d"
+msgstr "%pB: cÃ¢mp sh_link nevalid (%d) Ã®n secÈ›iunea numÄƒrul %d"
+
+#: elf.c:1456
+#, c-format
+msgid "%pB: failed to find link section for section %d"
+msgstr "%pB: nu s-a gÄƒsit secÈ›iunea de legÄƒturÄƒ pentru secÈ›iunea %d"
+
+#: elf.c:1483
+#, c-format
+msgid "%pB: failed to find info section for section %d"
+msgstr "%pB: nu s-a gÄƒsit secÈ›iunea de informaÈ›ii pentru secÈ›iunea %d"
+
+#: elf.c:1660
+#, c-format
 msgid ""
 "\n"
 "Program Header:\n"
 msgstr ""
 "\n"
-"Header Program:\n"
+"Antetul programului:\n"
 
-#: elf.c:1106
+#: elf.c:1702
+#, c-format
 msgid ""
 "\n"
 "Dynamic Section:\n"
 msgstr ""
 "\n"
-"Secþiune Dinamicã:\n"
+"SecÈ›iune dinamicÄƒ:\n"
 
-#: elf.c:1235
+#: elf.c:1841
+#, c-format
 msgid ""
 "\n"
 "Version definitions:\n"
 msgstr ""
 "\n"
-"Definiþii de versiune:\n"
+"DefiniÈ›ii de versiune:\n"
 
-#: elf.c:1258
+#: elf.c:1866
+#, c-format
 msgid ""
 "\n"
 "Version References:\n"
 msgstr ""
 "\n"
-"Referinþe Versiune:\n"
+"ReferinÈ›e de versiune:\n"
 
-#: elf.c:1263
+#: elf.c:1871
 #, c-format
 msgid "  required from %s:\n"
 msgstr "  cerute de %s:\n"
 
-#: elf.c:1944
+#: elf.c:2614
+#, c-format
+msgid "%pB: warning: loop in section dependencies detected"
+msgstr "%pB: avertisment: buclÄƒ Ã®n dependenÈ›e de secÈ›iune detectatÄƒ"
+
+#: elf.c:2721
+#, c-format
+msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
+msgstr "%pB: avertisment: multiple tabele de simboluri detectate - se ignorÄƒ tabelul din secÈ›iunea %u"
+
+#: elf.c:2806
+#, c-format
+msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
+msgstr "%pB: avertisment: multiple tabele de simboluri dinamice detectate - se ignorÄƒ tabelul din secÈ›iunea %u"
+
+#: elf.c:2925
+#, c-format
+msgid "%pB: invalid link %u for reloc section %s (index %u)"
+msgstr "%pB: legÄƒturÄƒ nevalidÄƒ %u pentru secÈ›iunea de realocare %s (index %u)"
+
+#: elf.c:2982
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%pB: avertisment: secÈ›iunea secundarÄƒ de realocare â€ž%sâ€� pentru secÈ›iunea %pA, a fost gÄƒsitÄƒ - se ignorÄƒ"
+
+#: elf.c:3070 elf.c:3084 elf.c:3095 elf.c:3108
+#, c-format
+msgid "%pB: unknown type [%#x] section `%s'"
+msgstr "%pB: tip necunoscut [%#x] de secÈ›iune â€ž%sâ€�"
+
+#: elf.c:3770
+#, c-format
+msgid "%pB: error: alignment power %d of section `%pA' is too big"
+msgstr "%pB: eroare: puterea de aliniere %d a secÈ›iunii â€ž%pAâ€� este prea mare"
+
+#: elf.c:3805
+#, c-format
+msgid "warning: section `%pA' type changed to PROGBITS"
+msgstr "avertisment: tipul secÈ›iunii â€ž%pAâ€� a fost schimbat Ã®n PROGBITS"
+
+#: elf.c:4311
+#, c-format
+msgid "%pB: too many sections: %u"
+msgstr "%pB: prea multe secÈ›iuni: %u"
+
+#: elf.c:4397
 #, c-format
-msgid "%s: invalid link %lu for reloc section %s (index %u)"
-msgstr "%s: link invalid %lu pentru secþiunea de relocare %s (index %u)"
+msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
+msgstr "%pB: sh_link a secÈ›iunii â€ž%pAâ€� indicÄƒ cÄƒtre secÈ›iunea Ã®nlÄƒturatÄƒ â€ž%pAâ€� din â€ž%pBâ€�"
 
-#: elf.c:3686
+#: elf.c:4415
 #, c-format
-msgid "%s: Not enough room for program headers (allocated %u, need %u)"
-msgstr "%s: Memorie insuficientã pentru headerele programului (alocatã %u, necesarã %u)"
+msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
+msgstr "%pB: sh_link a secÈ›iunii â€ž%pAâ€� indicÄƒ cÄƒtre secÈ›iunea eliminatÄƒ â€ž%pAâ€� din â€ž%pBâ€�"
+
+#: elf.c:5009
+#, c-format
+msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
+msgstr "%pB: secÈ›iunea GNU_MBIND â€ž%pAâ€� are cÃ¢mpul sh_info nevalid: %d"
+
+#: elf.c:5192
+msgid "%F%P: failed to size relative relocations\n"
+msgstr "%F%P: eÈ™ec la dimensionarea realocÄƒrilor relative\n"
 
-#: elf.c:3791
+#: elf.c:5617
 #, c-format
-msgid "%s: Not enough room for program headers, try linking with -N"
-msgstr "%s: Memorie insuficientã pentru headerele programului, încercaþi linkuirea cu -N"
+msgid "%pB: TLS sections are not adjacent:"
+msgstr "%pB: secÈ›iunile TLS nu sunt adiacente:"
 
-#: elf.c:3922
+#: elf.c:5624
 #, c-format
-msgid "Error: First section in segment (%s) starts at 0x%x whereas the segment starts at 0x%x"
-msgstr "Eroare: prima secþiune în segment (%s) începe la 0x%x pe când segmentul începe la 0x%x"
+msgid "\t    TLS: %pA"
+msgstr "\t    TLS: %pA"
 
-#: elf.c:4242
+#: elf.c:5628
 #, c-format
-msgid "%s: warning: allocated section `%s' not in segment"
-msgstr "%s: avertisment: secþiunea alocatã `%s' nu este în segment"
+msgid "\tnon-TLS: %pA"
+msgstr "\tnon-TLS: %pA"
 
-#: elf.c:4566
+#: elf.c:6256
 #, c-format
-msgid "%s: symbol `%s' required but not present"
-msgstr "%s: simbolul `%s' necesar, dar nu este prezent"
+msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
+msgstr "%pB: prima secÈ›iune din segmentul PT_DYNAMIC nu este secÈ›iunea .dynamic"
 
-#: elf.c:4854
+#: elf.c:6282
 #, c-format
-msgid "%s: warning: Empty loadable segment detected, is this intentional ?\n"
-msgstr "%s: avertisment: S-a detectat segment încãrcabil vid, este intenþionat ?\n"
+msgid "%pB: not enough room for program headers, try linking with -N"
+msgstr "%pB: nu este suficient spaÈ›iu pentru antetele programului, Ã®ncercaÈ›i sÄƒ faceÈ›i editarea legÄƒturilor cu opÈ›iunea â€ž-Nâ€�"
 
-#: elf.c:5485
+#: elf.c:6399
 #, c-format
-msgid "Unable to find equivalent output section for symbol '%s' from section '%s'"
-msgstr "Nnu am putut gãsi secþiunea de output echivalentã pentru simbolul '%s' din secþiunea '%s'"
+msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
+msgstr "%pB: secÈ›iunea %pA cu lma %#<PRIx64> ajustatÄƒ la %#<PRIx64>"
 
-#: elf.c:6298
+#. The fix for this error is usually to edit the linker script being
+#. used and set up the program headers manually.  Either that or
+#. leave room for the headers at the start of the SECTIONS.
+#: elf.c:6539
 #, c-format
-msgid "%s: unsupported relocation type %s"
-msgstr "%s: tip de relocare nesuportat: %s"
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr "%pB: eroare: segmentul PHDR nu este acoperit de segmentul LOAD"
 
-#: elf32-arm.h:1228
+#: elf.c:6579
 #, c-format
-msgid "%s: Warning: Arm BLX instruction targets Arm function '%s'."
-msgstr "%s: Avertisment: BLX Arm are ca þintã funcþia Arm `%s'."
+msgid "%pB: section `%pA' can't be allocated in segment %d"
+msgstr "%pB: secÈ›iunea â€ž%pAâ€� nu poate fi alocatÄƒ Ã®n segmentul %d"
 
-#: elf32-arm.h:1424
+#: elf.c:6720
 #, c-format
-msgid "%s: Warning: Thumb BLX instruction targets thumb function '%s'."
-msgstr "%s: Avertisment: BLX Thumb are ca þintã funcþia thumb `%s'."
+msgid "%pB: warning: allocated section `%s' not in segment"
+msgstr "%pB: avertisment: secÈ›iunea alocatÄƒ â€ž%sâ€� nu este Ã®n segment"
 
-#: elf32-arm.h:1918 elf32-sh.c:4706 elf64-sh64.c:1613
+#: elf.c:6855
 #, c-format
-msgid "%s(%s+0x%lx): %s relocation against SEC_MERGE section"
-msgstr "%s(%s+0x%lx): %s relocare pe secþiunea SEC_MERGE"
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr "%pB: avertisment: nu se poate aloca nicio secÈ›iune segmentului PT_GNU_RELRO"
 
-#: elf32-arm.h:2012
+#: elf.c:6886
 #, c-format
-msgid "%s: warning: unresolvable relocation %d against symbol `%s' from %s section"
-msgstr "%s: avertisment: relocare nerezolvabilã %d pe simbolul `%s' din secþiunea %s"
+msgid "%pB: error: non-load segment %d includes file header and/or program header"
+msgstr "%pB: eroare: segmentul neÃ®ncÄƒrcat %d include antetul fiÈ™ierului È™i/sau antetul programului"
 
-#: elf32-arm.h:2202
+#: elf.c:7034
 #, c-format
-msgid "Warning: Clearing the interworking flag of %s because non-interworking code in %s has been linked with it"
-msgstr "Avertisment: Se ºterge marcajul(flag) de interlucru(interworking) al %s deoarece împreunã cu el a fost linkuit cod non-interlucru în %s"
+msgid "error: %pB has a TLS segment with execute permission"
+msgstr "eroare: %pB are un segment TLS cu permisiune de execuÈ›ie"
 
-#: elf32-arm.h:2302
+#: elf.c:7040
 #, c-format
-msgid "ERROR: %s is compiled for EABI version %d, whereas %s is compiled for version %d"
-msgstr "EROARE: %s este compilat pentru EABI versiunea %d, pe când %s este compilat pentru versiunea %d"
+msgid "warning: %pB has a TLS segment with execute permission"
+msgstr "avertisment: %pB are un segment TLS cu permisiune de execuÈ›ie"
 
-#: elf32-arm.h:2316
+#: elf.c:7055
 #, c-format
-msgid "ERROR: %s is compiled for APCS-%d, whereas target %s uses APCS-%d"
-msgstr "EROARE: %s este compilat pentru APCS-%d, pe când þinta %s foloseºte APCS-%d"
+msgid "error: %pB has a LOAD segment with RWX permissions"
+msgstr "eroare: %pB are un segment LOAD cu permisiuni RWX(de citire-scriere-execuÈ›ie)"
 
-#: elf32-arm.h:2344
+#: elf.c:7061
 #, c-format
-msgid "ERROR: %s uses VFP instructions, whereas %s does not"
-msgstr "EROARE: %s foloseºte instrucþiuni VFP, pe când %s nu le foloseºte"
+msgid "warning: %pB has a LOAD segment with RWX permissions"
+msgstr "avertisment: %pB are un segment LOAD cu permisiuni RWX(de citire-scriere-execuÈ›ie)"
 
-#: elf32-arm.h:2349
+#: elf.c:7454
 #, c-format
-msgid "ERROR: %s uses FPA instructions, whereas %s does not"
-msgstr "EROARE: %s foloseºte instrucþiuni FPA, pe când %s nu le foloseºte"
+msgid "%pB: symbol `%s' required but not present"
+msgstr "%pB: simbolul â€ž%sâ€� este necesar, dar nu este prezent"
 
-#: elf32-arm.h:2360 elf32-arm.h:2365
+#: elf.c:7832
 #, c-format
-msgid "ERROR: %s uses Maverick instructions, whereas %s does not"
-msgstr "EROARE: %s foloseºte instrucþiuni Maverick, pe când %s nu le foloseºte"
+msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
+msgstr "%pB: avertisment: s-a detectat segment Ã®ncÄƒrcabil gol la vaddr=%#<PRIx64>, este aceasta intenÈ›ionat ?"
 
-#: elf32-arm.h:2385
+#: elf.c:8492
 #, c-format
-msgid "ERROR: %s uses software FP, whereas %s uses hardware FP"
-msgstr "EROARE: %s foloseºte FP software, pe când %s foloseºte FP hardware"
+msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
+msgstr "%pB: avertisment: alinierea segmentului de %#<PRIx64> este prea mare"
 
-#: elf32-arm.h:2390
+#: elf.c:9000
 #, c-format
-msgid "ERROR: %s uses hardware FP, whereas %s uses software FP"
-msgstr "EROARE: %s foloseºte FP hardware, pe când %s foloseºte FP software"
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr "%pB: Nu se poate gestiona indexul secÈ›iunii %x Ã®n simbolul ELF.  Se utilizeazÄƒ ABS Ã®n locul acestuia."
+
+#: elf.c:9030
+#, c-format
+msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
+msgstr "nu se poate gÄƒsi secÈ›iunea de ieÈ™ire echivalentÄƒ pentru simbolul â€ž%sâ€� din secÈ›iunea â€ž%sâ€�"
+
+#: elf.c:9464
+#, c-format
+msgid "%pB: .gnu.version_r invalid entry"
+msgstr "%pB: intrare nevalidÄƒ .gnu.version_r"
+
+#: elf.c:9639
+#, c-format
+msgid "%pB: .gnu.version_d invalid entry"
+msgstr "%pB: intrare nevalidÄƒ .gnu.version_d"
+
+#: elf.c:10139
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr "%pB:%pA: eroare: Ã®ncercare de a scrie dincolo de sfÃ¢rÈ™itul secÈ›iunii"
+
+#: elf.c:10151
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr "%pB:%pA: eroare: Ã®ncercare de a scrie secÈ›iunea Ã®ntr-un fiÈ™ier de memorie tampon gol"
+
+#: elf.c:10266 elf32-mcore.c:100 elf32-mcore.c:455 elf32-ppc.c:7676
+#: elf32-ppc.c:8864 elf64-ppc.c:16839
+#, c-format
+msgid "%pB: %s unsupported"
+msgstr "%pB: %s neacceptat"
+
+#: elf.c:11079
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr "%pB: avertisment: win32pstatus %s cu dimensiunea de %lu octeÈ›i este prea mic"
+
+#: elf.c:11158
+#, c-format
+msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
+msgstr "%pB: win32pstatus NOTE_INFO_MODULE cu dimensiunea de %lu este prea mic pentru a conÈ›ine un nume de dimensiunea %u"
+
+#: elf.c:13796
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr "secÈ›iunea GNU_MBIND este acceptatÄƒ doar de È›intele GNU È™i FreeBSD"
+
+#: elf.c:13799
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr "tipul de simbol STT_GNU_IFUNC este acceptat doar de È›intele GNU È™i FreeBSD"
+
+#: elf.c:13802
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr "asocierea simbolurilor STB_GNU_UNIQUE este acceptatÄƒ numai de È›intele GNU È™i FreeBSD"
+
+#: elf.c:13805
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr "secÈ›iunea GNU_RETAIN este acceptatÄƒ numai de È›intele GNU È™i FreeBSD"
+
+#: elf.c:14023
+#, c-format
+msgid "%pB(%pA): relocation %zu has invalid symbol index %lu"
+msgstr "%pB(%pA): realocarea %zu are indexul de simbol nevalid %lu"
+
+#: elf.c:14099
+#, c-format
+msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
+msgstr "%pB(%pA): secÈ›iunea de legÄƒturÄƒ nu poate fi definitÄƒ deoarece fiÈ™ierul de ieÈ™ire nu are un tabel de simboluri"
+
+#: elf.c:14113
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): indexul secÈ›iunii de informaÈ›ii este nevalid"
+
+#: elf.c:14127
+#, c-format
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr "%pB(%pA): indexul secÈ›iunii de informaÈ›ii nu poate fi definit deoarece secÈ›iunea nu se aflÄƒ Ã®n ieÈ™ire"
+
+#: elf.c:14203
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr "%pB(%pA): eroare: secÈ›iunea de realocare secundarÄƒ a fost procesatÄƒ de douÄƒ ori"
+
+#: elf.c:14215
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr "%pB(%pA): eroare: secÈ›iunea de realocare secundarÄƒ are intrÄƒri de dimensiune zero"
+
+#: elf.c:14227
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr "%pB(%pA): eroare: secÈ›iunea de realocare secundarÄƒ are intrÄƒri de dimensiune nestandard"
+
+#: elf.c:14241
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr "%pB(%pA): eroare: secÈ›iunea de realocare secundarÄƒ este goalÄƒ!"
+
+#: elf.c:14264
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr "%pB(%pA): eroare: lipsesc realocÄƒrile interne pentru secÈ›iunea de realocare secundarÄƒ"
+
+#: elf.c:14284
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %zu is empty"
+msgstr "%pB(%pA): eroare: intrarea din tabelul de realocare %zu este goalÄƒ"
+
+#: elf.c:14309
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a missing symbol"
+msgstr "%pB(%pA): eroare: realocarea secundarÄƒ %zu face referire la un simbol lipsÄƒ"
+
+#: elf.c:14327
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a deleted symbol"
+msgstr "%pB(%pA): eroare: realocarea secundarÄƒ %zu face referire la un simbol È™ters"
+
+#: elf.c:14341
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu is of an unknown type"
+msgstr "%pB(%pA): eroare: realocarea secundarÄƒ %zu este de un tip necunoscut"
 
 #. Ignore init flag - it may not be set, despite the flags field
 #. containing valid data.
-#: elf32-arm.h:2443 elf32-cris.c:2975 elf32-m68hc1x.c:1459 elf32-m68k.c:397
-#: elf32-vax.c:546 elfxx-mips.c:9238
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15125 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3218
+#: elf32-visium.c:844 elf64-ppc.c:5513 elfnn-aarch64.c:7552
 #, c-format
-msgid "private flags = %lx:"
-msgstr "marcaje(flags) private = %lx:"
+msgid "private flags = 0x%lx:"
+msgstr "fanioane private = 0x%lx:"
+
+#: elf32-arc.c:642
+#, c-format
+msgid "warning: %pB: conflicting platform configuration %s with %s"
+msgstr "avertisment: %pB: configuraÈ›ia platformei %s Ã®n conflict cu %s"
+
+#: elf32-arc.c:661
+#, c-format
+msgid "error: %pB: unable to merge CPU base attributes %s with %s"
+msgstr "eroare: %pB: nu se pot fuziona atributele de bazÄƒ ale procesorului %s cu %s"
+
+#: elf32-arc.c:698
+#, c-format
+msgid "error: %pB: unable to merge ISA extension attributes %s"
+msgstr "eroare: %pB: nu se pot fuziona atributele extensiei ISA %s"
+
+#: elf32-arc.c:722
+#, c-format
+msgid "error: %pB: conflicting ISA extension attributes %s with %s"
+msgstr "eroare: %pB: atributele extensiei ISA Ã®n conflict %s cu %s"
+
+#: elf32-arc.c:762
+#, c-format
+msgid "error: %pB: cannot mix rf16 with full register set %pB"
+msgstr "eroare: %pB: nu se poate amesteca rf16 cu setul de registru complet %pB"
+
+#: elf32-arc.c:790
+#, c-format
+msgid "error: %pB: conflicting attributes %s: %s with %s"
+msgstr "eroare: %pB: atribute aflate Ã®n conflict %s: %s cu %s"
+
+#: elf32-arc.c:817
+#, c-format
+msgid "error: %pB: conflicting attributes %s"
+msgstr "eroare: %pB: atribute aflate Ã®n conflict %s"
+
+#: elf32-arc.c:922
+#, c-format
+msgid "error: attempting to link %pB with a binary %pB of different architecture"
+msgstr "eroare: Ã®ncercare de a vincula %pB cu un %pB binar de arhitecturÄƒ diferitÄƒ"
+
+#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
+#: elf32-ppc.c:3856 elf64-sparc.c:737 elfxx-mips.c:15692
+#, c-format
+msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
+msgstr "%pB: foloseÈ™te cÃ¢mpuri e_flags (%#x) diferite faÈ›Äƒ de modulele anterioare (%#x)"
+
+#: elf32-arc.c:1027
+msgid "error: the ARC4 architecture is no longer supported"
+msgstr "eroare: arhitectura ARC4 nu mai este demult acceptatÄƒ"
+
+#: elf32-arc.c:1033
+msgid "warning: unset or old architecture flags; use default machine"
+msgstr "avertisment: fanioane de arhitecturÄƒ nedefinite sau vechi; se utilizeazÄƒ maÈ™ina implicitÄƒ"
+
+#: elf32-arc.c:1159
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
+msgstr "%pB(%pA+%#<PRIx64>): realocarea CMEM la â€ž%sâ€� este nevalidÄƒ, 16 MSB trebuie sÄƒ fie %#x (valoarea este %#<PRIx64>)"
+
+#: elf32-arc.c:1170
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s+%#<PRIx64>' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
+msgstr "%pB(%pA+%#<PRIx64>): realocarea CMEM la â€ž%s+%#<PRIx64>â€� este nevalidÄƒ, 16 MSB trebuie sÄƒ fie %#x (valoarea este %#<PRIx64>)"
+
+#: elf32-arc.c:1898
+msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
+msgstr "realocÄƒrile GOT È™i PLT nu pot fi remediate cu un editor de legÄƒturi non-dinamic"
+
+#: elf32-arc.c:1922 elf32-rx.c:1486
+#, c-format
+msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
+msgstr "%pB(%pA): avertisment: acces nealiniat la simbolul â€ž%sâ€� din zona de date micÄƒ"
+
+#: elf32-arc.c:1927 elf32-rx.c:1491
+#, c-format
+msgid "%pB(%pA): internal error: out of range error"
+msgstr "%pB(%pA): eroare internÄƒ: eroare Ã®n afara intervalului"
+
+#: elf32-arc.c:1932 elf32-rx.c:1496
+#, c-format
+msgid "%pB(%pA): internal error: unsupported relocation error"
+msgstr "%pB(%pA): eroare internÄƒ: eroare de realocare neacceptatÄƒ"
+
+#: elf32-arc.c:1937 elf32-rx.c:1501
+#, c-format
+msgid "%pB(%pA): internal error: dangerous relocation"
+msgstr "%pB(%pA):  eroare internÄƒ: realocare periculoasÄƒ"
+
+#: elf32-arc.c:1942 elf32-rx.c:1506
+#, c-format
+msgid "%pB(%pA): internal error: unknown error"
+msgstr "%pB(%pA): eroare internÄƒ: eroare necunoscutÄƒ"
+
+#: elf32-arc.c:2036 elf32-arc.c:2104 elf32-arm.c:15580 elf32-metag.c:2251
+#: elf32-nds32.c:5543 elfnn-aarch64.c:7959 elfnn-riscv.c:720
+#, c-format
+msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
+msgstr "%pB: realocarea %s faÈ›Äƒ de â€ž%sâ€� nu poate fi utilizatÄƒ cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�"
+
+#: elf32-arc.c:2923
+#, c-format
+msgid "%pB: unknown mandatory ARC object attribute %d"
+msgstr "%pB: atribut de obiect ARC obligatoriu necunoscut %d"
+
+#: elf32-arc.c:2931
+#, c-format
+msgid "warning: %pB: unknown ARC object attribute %d"
+msgstr "avertisment: %pB: atribut al obiectului ARC necunoscut %d"
+
+#: elf32-arm.c:4346 elf32-arm.c:4380 elf32-arm.c:4399 elf32-arm.c:4451
+#, c-format
+msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction"
+msgstr "%pB(%pA): avertisment: faÈ›etele(veneers) de ramuri lungi utilizate Ã®n secÈ›iunea cu atributul secÈ›iunii SHF_ARM_PURECODE sunt acceptate numai pentru È›inte cu profil M care implementeazÄƒ instrucÈ›iunea movw"
+
+#: elf32-arm.c:4411 elf32-arm.c:4465 elf32-arm.c:9163 elf32-arm.c:9253
+#, c-format
+msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
+msgstr "%pB(%s): avertisment: interfuncÈ›ionarea nu este activatÄƒ; prima apariÈ›ie: %pB: apel %s cÄƒtre %s"
+
+#: elf32-arm.c:4591
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr "EROARE: ciot(stub) CMSE (secÈ›iunea %s) prea departe (%#<PRIx64>) faÈ›Äƒ de destinaÈ›ie (%#<PRIx64>)"
+
+#: elf32-arm.c:4760
+#, c-format
+msgid "no address assigned to the veneers output section %s"
+msgstr "nicio adresÄƒ nu este atribuitÄƒ secÈ›iunii de ieÈ™ire a faÈ›etelor(veneers) %s"
+
+#: elf32-arm.c:4835 elf32-arm.c:6984 elf32-csky.c:3389 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3907
+#: elf64-ppc.c:14157 elfnn-aarch64.c:3203 elfnn-kvx.c:895
+#, c-format
+msgid "%pB: cannot create stub entry %s"
+msgstr "%pB: nu se poate crea intrarea ciot(stub) %s"
+
+#: elf32-arm.c:5056 elf32-csky.c:3731 elf32-hppa.c:732 elf32-hppa.c:761
+#: elf32-hppa.c:842 elf32-m68hc11.c:422 elf32-m68hc12.c:542 elf32-metag.c:3345
+#: elf32-nios2.c:2494 elf64-ppc.c:12273 elf64-ppc.c:12281 xcofflink.c:4684
+#: elfnn-aarch64.c:3275
+msgid "%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: Nu s-a putut atribui â€ž%pAâ€� unei secÈ›iuni de ieÈ™ire. ReÃ®ncercaÈ›i fÄƒrÄƒ opÈ›iunea â€ž--enable-non-contiguous-regionsâ€�.\n"
+
+#: elf32-arm.c:6027
+#, c-format
+msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
+msgstr "%pB: simbolul special â€ž%sâ€� este permis doar pentru arhitectura ARMv8-M sau mai recentÄƒ"
+
+#: elf32-arm.c:6036
+#, c-format
+msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
+msgstr "%pB: simbol special nevalid â€ž%sâ€�; trebuie sÄƒ fie un simbol de funcÈ›ie globalÄƒ sau slabÄƒ"
+
+#: elf32-arm.c:6075
+#, c-format
+msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
+msgstr "%pB: simbol standard nevalid â€ž%sâ€�; trebuie sÄƒ fie un simbol de funcÈ›ie globalÄƒ sau slabÄƒ"
+
+#: elf32-arm.c:6081
+#, c-format
+msgid "%pB: absent standard symbol `%s'"
+msgstr "%pB: simbol standard absent â€ž%sâ€�"
+
+#: elf32-arm.c:6093
+#, c-format
+msgid "%pB: `%s' and its special symbol are in different sections"
+msgstr "%pB: â€ž%sâ€� È™i simbolul sÄƒu special sunt Ã®n secÈ›iuni diferite"
+
+#: elf32-arm.c:6105
+#, c-format
+msgid "%pB: entry function `%s' not output"
+msgstr "%pB: funcÈ›ia de intrare â€ž%sâ€� nu produce ieÈ™ire"
+
+#: elf32-arm.c:6112
+#, c-format
+msgid "%pB: entry function `%s' is empty"
+msgstr "%pB: funcÈ›ia de intrare â€ž%sâ€� este goalÄƒ"
 
-#: elf32-arm.h:2452
+#: elf32-arm.c:6241
+#, c-format
+msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
+msgstr "%pB: â€ž--in-implibâ€� este acceptatÄƒ numai pentru bibliotecile de import Secure Gateway"
+
+#: elf32-arm.c:6290
+#, c-format
+msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
+msgstr "%pB: intrare in bibliotecÄƒ de import nevalidÄƒ: â€ž%sâ€�; simbolul trebuie sÄƒ fie absolut, global È™i sÄƒ se refere la funcÈ›iile Thumb"
+
+#: elf32-arm.c:6312
+#, c-format
+msgid "entry function `%s' disappeared from secure code"
+msgstr "funcÈ›ia de intrare â€ž%sâ€� a dispÄƒrut din codul securizat"
+
+#: elf32-arm.c:6336
+#, c-format
+msgid "`%s' refers to a non entry function"
+msgstr "â€ž%sâ€� se referÄƒ la ceva care nu este o funcÈ›ie de intrare"
+
+#: elf32-arm.c:6351
+#, c-format
+msgid "%pB: visibility of symbol `%s' has changed"
+msgstr "%pB: vizibilitatea simbolului â€ž%sâ€� s-a schimbat"
+
+#: elf32-arm.c:6360
+#, c-format
+msgid "%pB: incorrect size for symbol `%s'"
+msgstr "%pB: dimensiune incorectÄƒ pentru simbolul â€ž%sâ€�"
+
+#: elf32-arm.c:6379
+#, c-format
+msgid "offset of veneer for entry function `%s' not a multiple of its size"
+msgstr "decalajul faÈ›etei(veneer) pentru funcÈ›ia de intrare â€ž%sâ€� nu este un multiplu al mÄƒrimii sale"
+
+#: elf32-arm.c:6399
+msgid "new entry function(s) introduced but no output import library specified:"
+msgstr "au fost introduse funcÈ›ii de intrare noi, dar nu a fost specificatÄƒ nicio bibliotecÄƒ de import de ieÈ™ire:"
+
+#: elf32-arm.c:6407
+#, c-format
+msgid "start address of `%s' is different from previous link"
+msgstr "adresa de pornire a lui â€ž%sâ€� este diferitÄƒ de legÄƒtura anterioarÄƒ"
+
+#: elf32-arm.c:7118 elf32-arm.c:7156
+#, c-format
+msgid "unable to find %s glue '%s' for '%s'"
+msgstr "nu se poate gÄƒsi %s liantul â€ž%sâ€� pentru â€ž%sâ€�"
+
+#: elf32-arm.c:7868
+#, c-format
+msgid "%pB: BE8 images only valid in big-endian mode"
+msgstr "%pB: imaginile BE8 sunt valabile numai Ã®n modul big-endian"
+
+#. Give a warning, but do as the user requests anyway.
+#: elf32-arm.c:8096
+#, c-format
+msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
+msgstr "%pB: avertisment: soluÈ›ia de eroare VFP11 selectatÄƒ nu este necesarÄƒ pentru arhitectura È›intÄƒ"
+
+#: elf32-arm.c:8123
+#, c-format
+msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
+msgstr "%pB: avertisment: soluÈ›ia de eroare STM32L4XX selectatÄƒ nu este necesarÄƒ pentru arhitectura È›intÄƒ"
+
+#: elf32-arm.c:8659 elf32-arm.c:8679 elf32-arm.c:8746 elf32-arm.c:8765
+#, c-format
+msgid "%pB: unable to find %s veneer `%s'"
+msgstr "%pB: nu s-a putut gÄƒsi %s faÈ›eta(veneer) â€ž%sâ€�"
+
+#: elf32-arm.c:8972
+#, c-format
+msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
+msgstr "%pB(%pA+%#x): eroare: Ã®ncÄƒrcare multiplÄƒ detectatÄƒ Ã®n blocul de instrucÈ›iuni IT ce nu este ultimul: faÈ›eta(veneer) STM32L4XX nu poate fi generat; utilizaÈ›i opÈ›iunea â€žgcc -mrestrict-itâ€� pentru a genera o singurÄƒ instrucÈ›iune per bloc IT"
+
+#: elf32-arm.c:9070
+#, c-format
+msgid "invalid TARGET2 relocation type '%s'"
+msgstr "tip de realocare TARGET2 nevalid â€ž%sâ€�"
+
+#. FIXME: We ought to be able to generate thumb-1 PLT
+#. instructions...
+#: elf32-arm.c:9840
+#, c-format
+msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
+msgstr "%pB: avertisment: generarea PLT Ã®n modul thumb-1 nu este acceptatÄƒ Ã®n prezent"
+
+#: elf32-arm.c:10149 elf32-arm.c:10191
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune %s neaÈ™teptatÄƒ â€ž%#lxâ€� Ã®n trambulina TLS"
+
+#: elf32-arm.c:10541
+msgid "shared object"
+msgstr "obiect partajat"
+
+#: elf32-arm.c:10544
+msgid "PIE executable"
+msgstr "executabil PIE"
+
+#: elf32-arm.c:10547
+#, c-format
+msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
+msgstr "%pB: realocarea %s faÈ›Äƒ de simbolul extern sau nedefinit â€ž%sâ€� nu poate fi folositÄƒ la crearea unui %s; recompilaÈ›i cu â€ž-fPICâ€�"
+
+#: elf32-arm.c:10649
+#, c-format
+msgid "\\%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr "\\%pB: avertisment: instrucÈ›iunea %s BLX vizeazÄƒ funcÈ›ia %s â€ž%sâ€�"
+
+#: elf32-arm.c:11066
+#, c-format
+msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr "%pB: avertisment: instrucÈ›iunea %s BLX vizeazÄƒ funcÈ›ia %s â€ž%sâ€�"
+
+#: elf32-arm.c:11700
+#, c-format
+msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
+msgstr "%pB: indicele de simbol aÈ™teptat Ã®n intervalul 0..%lu, dar a fost gÄƒsit un simbol local cu indicele %lu"
+
+#: elf32-arm.c:11975 elf32-arm.c:12001
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune %s neaÈ™teptatÄƒ â€ž%#lxâ€� la care face referire TLS_GOTDESC"
+
+#: elf32-arm.c:12047 elf32-csky.c:4959 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-nios2.c:4377
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
+msgstr "%pB(%pA+%#<PRIx64>): realocarea %s nu este permisÄƒ Ã®n obiectul partajat"
+
+#: elf32-arm.c:12261
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
+msgstr "%pB(%pA+%#<PRIx64>): numai instrucÈ›iunile ADD sau SUB sunt permise pentru realocÄƒri ale grupului ALU"
+
+#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): depÄƒÈ™ire Ã®n timp ce se Ã®mparte %#<PRIx64> pentru realocarea grupului %s"
+
+#: elf32-arm.c:12630 elf32-arm.c:12789
+msgid "local symbol index too big"
+msgstr "indice de simbol local prea mare"
+
+#: elf32-arm.c:12640 elf32-arm.c:12674
+msgid "no dynamic index information available"
+msgstr "nu sunt disponibile informaÈ›ii despre indexul dinamic"
+
+#: elf32-arm.c:12682
+msgid "invalid dynamic index"
+msgstr "index dinamic nevalid"
+
+#: elf32-arm.c:12799
+msgid "dynamic index information not available"
+msgstr "informaÈ›iile despre indexul dinamic nu sunt disponibile"
+
+#: elf32-arm.c:13230 elf32-sh.c:3567
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
+msgstr "%pB(%pA+%#<PRIx64>): %s realocare faÈ›Äƒ de secÈ›iunea SEC_MERGE"
+
+#: elf32-arm.c:13343 elf32-m68k.c:3966 elf32-xtensa.c:2761 elfnn-aarch64.c:7049
+#: elfnn-kvx.c:2571
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
+msgstr "%pB(%pA+%#<PRIx64>): %s utilizat cu simbolul TLS %s"
+
+#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2763 elfnn-aarch64.c:7051
+#: elfnn-kvx.c:2573
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
+msgstr "%pB(%pA+%#<PRIx64>): %s utilizat cu simbolul non-TLS %s"
+
+#: elf32-arm.c:13428 elf32-tic6x.c:2649 elfnn-aarch64.c:7386 elfnn-kvx.c:2800
+msgid "out of range"
+msgstr "Ã®n afara intervalului"
+
+#: elf32-arm.c:13432 elf32-nios2.c:4511 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7390 elfnn-kvx.c:2804
+msgid "unsupported relocation"
+msgstr "realocare neacceptatÄƒ"
+
+#: elf32-arm.c:13440 elf32-nios2.c:4521 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7398 elfnn-kvx.c:2812
+msgid "unknown error"
+msgstr "eroare necunoscutÄƒ"
+
+#: elf32-arm.c:13922
+#, c-format
+msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
+msgstr "avertisment: nu se stabileÈ™te indicatorul de interfuncÈ›ionare pentru %pB, deoarece a fost deja specificat ca neinterfuncÈ›ionare"
+
+#: elf32-arm.c:13926
+#, c-format
+msgid "warning: clearing the interworking flag of %pB due to outside request"
+msgstr "avertisment: se È™terge indicatorul de interfuncÈ›ionare din %pB din cauza solicitÄƒrii externe"
+
+#: elf32-arm.c:13971
+#, c-format
+msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
+msgstr "avertisment: se È™terge indicatorul de interfuncÈ›ionare din %pB, deoarece codul care nu interfuncÈ›ioneazÄƒ Ã®n %pB a fost vinculat cu acesta"
+
+#: elf32-arm.c:14058
+#, c-format
+msgid "%pB: unknown mandatory EABI object attribute %d"
+msgstr "%pB: atribut de obiect EABI obligatoriu necunoscut %d"
+
+#: elf32-arm.c:14066
+#, c-format
+msgid "warning: %pB: unknown EABI object attribute %d"
+msgstr "avertisment: %pB: atribut necunoscut al obiectului EABI %d"
+
+#: elf32-arm.c:14401
+#, c-format
+msgid "error: %pB: unknown CPU architecture"
+msgstr "eroare: %pB: arhitecturÄƒ CPU necunoscutÄƒ"
+
+#: elf32-arm.c:14439
+#, c-format
+msgid "error: conflicting CPU architectures %s vs %s in %pB"
+msgstr "eroare: arhitecturi CPU Ã®n conflict %s vs %s Ã®n %pB"
+
+#: elf32-arm.c:14536
+#, c-format
+msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr "Eroare: %pB are atÃ¢t atributele Tag_MPextension_use actuale, cÃ¢t È™i pe cele vechi"
+
+#: elf32-arm.c:14573
+#, c-format
+msgid "error: %pB uses VFP register arguments, %pB does not"
+msgstr "eroare: %pB utilizeazÄƒ argumente de registru VFP, iar %pB nu"
+
+#: elf32-arm.c:14743
+#, c-format
+msgid "error: %pB: unable to merge virtualization attributes with %pB"
+msgstr "eroare: %pB: nu se pot fuziona atributele de virtualizare cu %pB"
+
+#: elf32-arm.c:14769
+#, c-format
+msgid "error: %pB: conflicting architecture profiles %c/%c"
+msgstr "eroare: %pB: profiluri de arhitecturÄƒ aflate Ã®n conflict %c/%c"
+
+#: elf32-arm.c:14908
+#, c-format
+msgid "warning: %pB: conflicting platform configuration"
+msgstr "avertisment: %pB: configuraÈ›ie conflictualÄƒ a platformei"
+
+#: elf32-arm.c:14917
+#, c-format
+msgid "error: %pB: conflicting use of R9"
+msgstr "eroare: %pB: utilizare conflictualÄƒ a R9"
+
+#: elf32-arm.c:14929
+#, c-format
+msgid "error: %pB: SB relative addressing conflicts with use of R9"
+msgstr "eroare: %pB: adresarea relativÄƒ SB intrÄƒ Ã®n conflict cu utilizarea lui R9"
+
+#: elf32-arm.c:14942
+#, c-format
+msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
+msgstr "avertisment: %pB foloseÈ™te %u-byte wchar_t, dar rezultatul este sÄƒ foloseascÄƒ %u-byte wchar_t; folosirea valorilor wchar_t Ã®ntre obiecte poate eÈ™ua"
+
+#: elf32-arm.c:14973
+#, c-format
+msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
+msgstr "avertisment: %pB foloseÈ™te %s enumerÄƒri, dar rezultatul este sÄƒ foloseascÄƒ %s enumerÄƒri; utilizarea valorilor enumerate Ã®ntre obiecte poate eÈ™ua"
+
+#: elf32-arm.c:14985
+#, c-format
+msgid "error: %pB uses iWMMXt register arguments, %pB does not"
+msgstr "eroare: %pB utilizeazÄƒ argumente de registru iWMMXt, È™i %pB nu"
+
+#: elf32-arm.c:15002
+#, c-format
+msgid "error: fp16 format mismatch between %pB and %pB"
+msgstr "eroare: nepotrivire a formatului fp16 Ã®ntre %pB È™i %pB"
+
+#: elf32-arm.c:15038
+#, c-format
+msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr "%pB are atÃ¢t atributele Tag_MPextension_use actuale, cÃ¢t È™i cele vechi"
+
+#: elf32-arm.c:15134
+#, c-format
 msgid " [interworking enabled]"
-msgstr " [interlucru(interworking) activat]"
+msgstr " [interfuncÈ›ionare activatÄƒ]"
 
-#: elf32-arm.h:2460
+#: elf32-arm.c:15142
+#, c-format
 msgid " [VFP float format]"
 msgstr " [format float VFP]"
 
-#: elf32-arm.h:2462
+#: elf32-arm.c:15144
+#, c-format
 msgid " [Maverick float format]"
 msgstr " [format float Maverick]"
 
-#: elf32-arm.h:2464
+#: elf32-arm.c:15146
+#, c-format
 msgid " [FPA float format]"
 msgstr " [format float FPA]"
 
-#: elf32-arm.h:2473
+#: elf32-arm.c:15149
+#, c-format
+msgid " [floats passed in float registers]"
+msgstr " [valori Ã®n virgulÄƒ mobilÄƒ trecute Ã®n registrele de valori Ã®n virgulÄƒ mobilÄƒ]"
+
+#: elf32-arm.c:15152 elf32-arm.c:15238
+#, c-format
+msgid " [position independent]"
+msgstr " [independent de poziÈ›ie]"
+
+#: elf32-arm.c:15155
+#, c-format
 msgid " [new ABI]"
 msgstr " [ABI nou]"
 
-#: elf32-arm.h:2476
+#: elf32-arm.c:15158
+#, c-format
 msgid " [old ABI]"
 msgstr " [ABI vechi]"
 
-#: elf32-arm.h:2479
+#: elf32-arm.c:15161
+#, c-format
 msgid " [software FP]"
 msgstr " [FP software]"
 
-#: elf32-arm.h:2488
+#: elf32-arm.c:15170
+#, c-format
 msgid " [Version1 EABI]"
 msgstr " [EABI Versiunea1]"
 
-#: elf32-arm.h:2491 elf32-arm.h:2502
+#: elf32-arm.c:15173 elf32-arm.c:15184
+#, c-format
 msgid " [sorted symbol table]"
-msgstr " [tabelã sortatã de simboluri]"
+msgstr " [tabel de simboluri sortate]"
 
-#: elf32-arm.h:2493 elf32-arm.h:2504
+#: elf32-arm.c:15175 elf32-arm.c:15186
+#, c-format
 msgid " [unsorted symbol table]"
-msgstr " [tabelã de simboluri nesortatã]"
+msgstr " [tabel de simboluri nesortate]"
 
-#: elf32-arm.h:2499
+#: elf32-arm.c:15181
+#, c-format
 msgid " [Version2 EABI]"
 msgstr " [EABI Versiunea2]"
 
-#: elf32-arm.h:2507
+#: elf32-arm.c:15189
+#, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [simbolurile dinamice folosesc index de segment]"
 
-#: elf32-arm.h:2510
+#: elf32-arm.c:15192
+#, c-format
 msgid " [mapping symbols precede others]"
-msgstr " [simbolurile de mapare le precedeazã pe celelalte]"
+msgstr " [simbolurile de cartografiere le preced pe celelalte]"
 
-#: elf32-arm.h:2517
+#: elf32-arm.c:15199
+#, c-format
+msgid " [Version3 EABI]"
+msgstr " [EABI Versiunea3]"
+
+#: elf32-arm.c:15203
+#, c-format
+msgid " [Version4 EABI]"
+msgstr " [EABI Versiunea4]"
+
+#: elf32-arm.c:15207
+#, c-format
+msgid " [Version5 EABI]"
+msgstr " [EABI Versiunea5]"
+
+#: elf32-arm.c:15210
+#, c-format
+msgid " [soft-float ABI]"
+msgstr " [soft-float ABI]"
+
+#: elf32-arm.c:15213
+#, c-format
+msgid " [hard-float ABI]"
+msgstr " [hard-float ABI]"
+
+#: elf32-arm.c:15219
+#, c-format
+msgid " [BE8]"
+msgstr " [BE8]"
+
+#: elf32-arm.c:15222
+#, c-format
+msgid " [LE8]"
+msgstr " [LE8]"
+
+#: elf32-arm.c:15228
+#, c-format
 msgid " <EABI version unrecognised>"
-msgstr " <versiune necunoscutã EABI>"
+msgstr " <versiune nerecunoscutÄƒ EABI>"
 
-#: elf32-arm.h:2524
+#: elf32-arm.c:15235
+#, c-format
 msgid " [relocatable executable]"
-msgstr " [executabil relocabil]"
+msgstr " [executabil realocabil]"
+
+#: elf32-arm.c:15241
+#, c-format
+msgid " [FDPIC ABI supplement]"
+msgstr " [supliment FDPIC ABI]"
+
+#: elf32-arm.c:15246 elfnn-aarch64.c:7555
+#, c-format
+msgid " <Unrecognised flag bits set>"
+msgstr " <set de biÈ›i de fanion nerecunoscut>"
+
+#: elf32-arm.c:15363 elf32-arm.c:15497 elf32-i386.c:1535 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1090 elf64-s390.c:845
+#: elf64-x86-64.c:2050 elfxx-sparc.c:1386 elfxx-tilegx.c:1662 elfxx-x86.c:970
+#: elfnn-aarch64.c:7826 elfnn-kvx.c:3250 elfnn-loongarch.c:756
+#: elfnn-riscv.c:764
+#, c-format
+msgid "%pB: bad symbol index: %d"
+msgstr "%pB: index de simboluri incorect: %d"
+
+#: elf32-arm.c:15753
+#, c-format
+msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
+msgstr "FDPIC nu acceptÄƒ Ã®ncÄƒ realocarea %s pentru a deveni dinamicÄƒ pentru executabil"
+
+#: elf32-arm.c:17027
+#, c-format
+msgid "errors encountered processing file %pB"
+msgstr "erori Ã®ntÃ¢lnite la procesarea fiÈ™ierului %pB"
+
+#: elf32-arm.c:17400 elflink.c:13325 elflink.c:13372
+#, c-format
+msgid "could not find section %s"
+msgstr "nu s-a putut gÄƒsi secÈ›iunea %s"
+
+#: elf32-arm.c:18355
+#, c-format
+msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
+msgstr "%pB: NumÄƒrul de simboluri din fiÈ™ierul de intrare a crescut de la %lu la %u\n"
+
+#: elf32-arm.c:18619
+#, c-format
+msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
+msgstr "%pB: eroare: ciotul(stub) de eroare Cortex-A8 este alocat Ã®ntr-o locaÈ›ie nesigurÄƒ"
+
+#. There's not much we can do apart from complain if this
+#. happens.
+#: elf32-arm.c:18646
+#, c-format
+msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
+msgstr "%pB: eroare: ciotul(stub) de eroare Cortex-A8 Ã®n afara intervalului (fiÈ™ierul de intrare este prea mare)"
+
+#: elf32-arm.c:19473 elf32-arm.c:19495
+#, c-format
+msgid "%pB: error: VFP11 veneer out of range"
+msgstr "%pB: eroare: faÈ›eta(veneer) VFP11 Ã®n afara intervalului"
+
+#: elf32-arm.c:19546
+#, c-format
+msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
+msgstr "%pB(%#<PRIx64>): eroare: nu se poate crea faÈ›eta(veneer) STM32L4XX; se iese din interval cu %<PRId64> octeÈ›i; nu se poate codifica instrucÈ›iunile de ramurÄƒ"
+
+#: elf32-arm.c:19585
+#, c-format
+msgid "%pB: error: cannot create STM32L4XX veneer"
+msgstr "%pB: eroare: nu se poate crea faÈ›eta(veneer) STM32L4XX"
 
-#: elf32-arm.h:2527
-msgid " [has entry point]"
-msgstr " [are punct de intrare]"
-
-#: elf32-arm.h:2532
-msgid "<Unrecognised flag bits set>"
-msgstr "<setare biþi de marcaj(flag) necunoscutã>"
-
-#: elf32-avr.c:820 elf32-cris.c:1398 elf32-fr30.c:642 elf32-frv.c:823
-#: elf32-i860.c:1036 elf32-ip2k.c:1597 elf32-iq2000.c:707 elf32-msp430.c:518
-#: elf32-openrisc.c:444 elf32-v850.c:1785 elf32-xstormy16.c:984
-#: elf64-mmix.c:1340
+#: elf32-arm.c:20668
+#, c-format
+msgid "error: %pB is already in final BE8 format"
+msgstr "eroare: %pB este deja Ã®n format BE8 final"
+
+#: elf32-arm.c:20745
+#, c-format
+msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
+msgstr "eroare: obiectul sursÄƒ %pB are versiunea EABI %d, dar È›inta %pB are versiunea EABI %d"
+
+#: elf32-arm.c:20760
+#, c-format
+msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
+msgstr "eroare: %pB este compilat pentru APCS-%d, Ã®n timp ce È›inta %pB foloseÈ™te APCS-%d"
+
+#: elf32-arm.c:20770
+#, c-format
+msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
+msgstr "eroare: %pB trece valorile Ã®n virgulÄƒ mobilÄƒ Ã®n registrele de virgulÄƒ mobilÄƒ, Ã®n timp ce %pB le trece Ã®n registrele Ã®ntregi"
+
+#: elf32-arm.c:20774
+#, c-format
+msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
+msgstr "eroare: %pB trece valorile Ã®n virgulÄƒ mobilÄƒ Ã®n registrele Ã®ntregi, Ã®n timp ce %pB le trece Ã®n registrele de virgulÄƒ mobilÄƒ"
+
+#: elf32-arm.c:20784 elf32-arm.c:20788 elf32-arm.c:20798
+#, c-format
+msgid "error: %pB uses %s instructions, whereas %pB does not"
+msgstr "eroare: %pB foloseÈ™te instrucÈ›iuni %s, Ã®n timp ce %pB nu le foloseÈ™te"
+
+#: elf32-arm.c:20802
+#, c-format
+msgid "error: %pB does not use %s instructions, whereas %pB does"
+msgstr "eroare: %pB nu foloseÈ™te instrucÈ›iuni %s, Ã®n timp ce %pB le foloseÈ™te"
+
+#: elf32-arm.c:20821
+#, c-format
+msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
+msgstr "eroare: %pB foloseÈ™te software FP, Ã®n timp ce %pB foloseÈ™te hardware FP"
+
+#: elf32-arm.c:20825
+#, c-format
+msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
+msgstr "eroare: %pB foloseÈ™te FP hardware, Ã®n timp ce %pB foloseÈ™te FP software"
+
+#: elf32-arm.c:20839
+#, c-format
+msgid "warning: %pB supports interworking, whereas %pB does not"
+msgstr "avertisment: %pB acceptÄƒ interfuncÈ›ionarea, Ã®n timp ce %pB nu o face"
+
+#: elf32-arm.c:20845
+#, c-format
+msgid "warning: %pB does not support interworking, whereas %pB does"
+msgstr "avertisment: %pB nu acceptÄƒ interfuncÈ›ionarea, Ã®n timp ce %pB o acceptÄƒ"
+
+#: elf32-avr.c:1508
+msgid "%X%H: %s against `%s': error: relocation applies outside section\n"
+msgstr "%X%H: %s faÈ›Äƒ de â€ž%sâ€�: eroare: realocarea se aplicÄƒ Ã®n afara secÈ›iunii\n"
+
+#: elf32-avr.c:1516
+msgid "%X%H: %s against `%s': error: relocation target address is odd\n"
+msgstr "%X%H: %s faÈ›Äƒ de â€ž%sâ€�: eroare: adresa È›intÄƒ de realocare este imparÄƒ\n"
+
+#: elf32-avr.c:1524
+msgid "%X%H: %s against `%s': internal error: unexpected relocation result %d\n"
+msgstr "%X%H: %s faÈ›Äƒ de â€ž%sâ€�: eroare internÄƒ: rezultat neaÈ™teptat al realocÄƒrii %d\n"
+
+#: elf32-avr.c:3340 elfnn-aarch64.c:3234
+#, c-format
+msgid "cannot create stub entry %s"
+msgstr "nu se poate crea intrarea ciot(stub) %s"
+
+#: elf32-bfin.c:107 elf32-bfin.c:364
+msgid "relocation should be even number"
+msgstr "realocarea trebuie sÄƒ fie un numÄƒr par"
+
+#: elf32-bfin.c:1589
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
+msgstr "%pB(%pA+%#<PRIx64>): realocare nerezolvabilÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�"
+
+#: elf32-bfin.c:1621 elf32-i386.c:3534 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3118 elf64-x86-64.c:4424
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
+msgstr "%pB(%pA+%#<PRIx64>): realocare faÈ›Äƒ de â€ž%sâ€�: eroare %d"
+
+#: elf32-bfin.c:2647
+#, c-format
+msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
+msgstr "%pB: realocarea la â€ž%pA+%#<PRIx64>â€� face referire la simbolul â€ž%sâ€� cu adaos diferit de zero"
+
+#: elf32-bfin.c:2664
+msgid "relocation references symbol not defined in the module"
+msgstr "simbolul referinÈ›elor de realocare nu este definit Ã®n modul"
+
+#: elf32-bfin.c:2762
+msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
+msgstr "R_BFIN_FUNCDESC face referire la simbolul dinamic cu adaos diferit de zero"
+
+#: elf32-bfin.c:2802 elf32-bfin.c:2923
+msgid "cannot emit fixups in read-only section"
+msgstr "nu poate emite remedieri Ã®n secÈ›iunea numai-pentru-citire"
+
+#: elf32-bfin.c:2832 elf32-bfin.c:2960 elf32-lm32.c:1007 elf32-sh.c:4385
+msgid "cannot emit dynamic relocations in read-only section"
+msgstr "nu se pot emite realocÄƒri dinamice Ã®n secÈ›iunea de numai-citire"
+
+#: elf32-bfin.c:2882
+msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
+msgstr "R_BFIN_FUNCDESC_VALUE face referire la simbolul dinamic cu adaos diferit de zero"
+
+#: elf32-bfin.c:3045
+msgid "relocations between different segments are not supported"
+msgstr "realocÄƒrile Ã®ntre diferite segmente nu sunt acceptate"
+
+#: elf32-bfin.c:3046
+msgid "warning: relocation references a different segment"
+msgstr "avertisment: realocarea se referÄƒ la un segment diferit"
+
+#: elf32-bfin.c:3141 elf32-cris.c:2042 elf32-epiphany.c:574 elf32-fr30.c:602
+#: elf32-frv.c:4057 elf32-ft32.c:500 elf32-ip2k.c:1489 elf32-iq2000.c:699
+#: elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992 elf32-moxie.c:296
+#: elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1905 elf32-tilepro.c:3380
+#: elf32-v850.c:2302 elf32-visium.c:688 elf32-xstormy16.c:938 elf64-bpf.c:348
+#: elf64-mmix.c:1549 elfxx-tilegx.c:3750
 msgid "internal error: dangerous relocation"
-msgstr "eroare internã: relocare periculoasã"
+msgstr "eroare internÄƒ: realocare periculoasÄƒ"
 
-#: elf32-cris.c:931
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-bfin.c:4728 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16378
 #, c-format
-msgid "%s: unresolvable relocation %s against symbol `%s' from %s section"
-msgstr "%s: relocare nerezolvabilã %s pe simbolul `%s' din secþiunea `%s'"
+msgid "private flags = %lx:"
+msgstr "fanioane private = %lx:"
+
+#: elf32-bfin.c:4779 elf32-frv.c:6585
+#, c-format
+msgid "%pB: cannot link non-fdpic object file into fdpic executable"
+msgstr "%pB: nu se poate vincula fiÈ™ierul obiect non-fdpic la executabilul fdpic"
+
+#: elf32-bfin.c:4783 elf32-frv.c:6589
+#, c-format
+msgid "%pB: cannot link fdpic object file into non-fdpic executable"
+msgstr "%pB: nu se poate vincula fiÈ™ierul obiect fdpic la executabil non-fdpic"
+
+#: elf32-bfin.c:4920
+#, c-format
+msgid "*** check this relocation %s"
+msgstr "*** verificaÈ›i aceastÄƒ realocare %s"
+
+#: elf32-bfin.c:5035
+msgid "the bfin target does not currently support the generation of copy relocations"
+msgstr "È›inta bfin nu acceptÄƒ Ã®n prezent generarea de realocÄƒri de copiere"
+
+#: elf32-bfin.c:5329 elf32-cr16.c:2720 elf32-m68k.c:4420
+msgid "unsupported relocation type"
+msgstr "tip de realocare neacceptat"
+
+#: elf32-cris.c:1120
+#, c-format
+msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'"
+msgstr "%pB, secÈ›iunea %pA: realocare nerezolvabilÄƒ %s faÈ›Äƒ de simbolul â€ž%sâ€�"
 
-#: elf32-cris.c:993
+#: elf32-cris.c:1185
 #, c-format
-msgid "%s: No PLT nor GOT for relocation %s against symbol `%s' from %s section"
-msgstr "%s:Nu existã nici PLT nici GOR pentru relocarea %s pe simbolul `%s' din secþiunea %s"
+msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'"
+msgstr "%pB, secÈ›iunea %pA: fÄƒrÄƒ PLT sau GOT pentru realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€�"
 
-#: elf32-cris.c:996 elf32-cris.c:1122
+#: elf32-cris.c:1188
+#, c-format
+msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'"
+msgstr "%pB, secÈ›iunea %pA: fÄƒrÄƒ PLT pentru realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€�"
+
+#: elf32-cris.c:1194 elf32-cris.c:1327 elf32-cris.c:1592 elf32-cris.c:1675
+#: elf32-cris.c:1828 elf32-tic6x.c:2560
 msgid "[whose name is lost]"
-msgstr "[al cãrui nume s-a pierdut]"
+msgstr "[al cÄƒrui nume s-a pierdut]"
+
+#: elf32-cris.c:1312 elf32-tic6x.c:2544
+#, c-format
+msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against local symbol"
+msgstr "%pB, secÈ›iunea %pA: realocare %s cu adÄƒugarea diferitÄƒ de zero %<PRId64> faÈ›Äƒ de simbolul local"
+
+#: elf32-cris.c:1321 elf32-cris.c:1669 elf32-cris.c:1822 elf32-tic6x.c:2553
+#, c-format
+msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against symbol `%s'"
+msgstr "%pB, secÈ›iunea %pA: realocare %s cu adÄƒugarea diferitÄƒ de zero %<PRId64> faÈ›Äƒ de simbolul â€ž%sâ€�"
+
+#: elf32-cris.c:1348
+#, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'"
+msgstr "%pB, secÈ›iunea %pA: realocarea %s nu este permisÄƒ pentru simbolul global: â€ž%sâ€�"
 
-#: elf32-cris.c:1111
+#: elf32-cris.c:1365
 #, c-format
-msgid "%s: relocation %s with non-zero addend %d against local symbol from %s section"
-msgstr "%s: relocarea %s cu adãugarea diferitã de zero %d pe simbolul local din secþiunea %s"
+msgid "%pB, section %pA: relocation %s with no GOT created"
+msgstr "%pB, secÈ›iunea %pA: relaocare %s fÄƒrÄƒ GOT creat"
 
-#: elf32-cris.c:1118
+#. We shouldn't get here for GCC-emitted code.
+#: elf32-cris.c:1582
 #, c-format
-msgid "%s: relocation %s with non-zero addend %d against symbol `%s' from %s section"
-msgstr "%s: relocarea %s cu adãugare non-zero %d pe simbolul `%s' din secþiunea %s"
+msgid "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
+msgstr "%pB, secÈ›iunea %pA: realocarea %s are o referinÈ›Äƒ nedefinitÄƒ la â€ž%sâ€�, poate o confuzie Ã®n declaraÈ›ii?"
 
-#: elf32-cris.c:1143
+#: elf32-cris.c:1585
 #, c-format
-msgid "%s: relocation %s is not allowed for global symbol: `%s' from %s section"
-msgstr "%s: relocarea %s nu este permisã pentru simbolul global `%s' din secþiunea %s"
+msgid "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?"
+msgstr "%pB, secÈ›iunea %pA: realocarea %s nu este permisÄƒ pentru â€ž%sâ€�, un simbol global cu vizibilitate implicitÄƒ, poate o confuzie Ã®n declaraÈ›ii?"
 
-#: elf32-cris.c:1158
+#: elf32-cris.c:1956
 #, c-format
-msgid "%s: relocation %s in section %s with no GOT created"
-msgstr "%s: relocarea %s din secþiunea %s fãrã GOT creat"
+msgid "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
+msgstr "%pB, secÈ›iunea %pA: realocarea %s nu este permisÄƒ pentru simbolul: â€ž%sâ€� care este definit Ã®n afara programului, poate o confuzie Ã®n declaraÈ›ii?"
+
+#: elf32-cris.c:2009
+msgid "(too many global variables for -fpic: recompile with -fPIC)"
+msgstr "(prea multe variabile globale pentru â€ž-fpicâ€�: recompilaÈ›i cu â€ž-fPICâ€�)"
+
+#: elf32-cris.c:2016
+msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)"
+msgstr "(datele de fire de execuÈ›ie locale sunt prea mari pentru â€ž-fpicâ€� sau â€ž-msmall-tlsâ€�: recompilaÈ›i cu â€ž-fPICâ€� sau â€ž-mno-small-tlsâ€�)"
 
-#: elf32-cris.c:1277
+#: elf32-cris.c:3051
 #, c-format
-msgid "%s: Internal inconsistency; no relocation section %s"
-msgstr "%s: Inconsistenþã internã, nu existã secþiunea de relocare %s"
+msgid "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation"
+msgstr "%pB, secÈ›iunea %pA: obiectul compatibil v10/v32 nu trebuie sÄƒ conÈ›inÄƒ o realocare PIC"
 
-#: elf32-cris.c:2500
+#: elf32-cris.c:3105
 #, c-format
 msgid ""
-"%s, section %s:\n"
-"  relocation %s should not be used in a shared object; recompile with -fPIC"
+"%pB, section %pA:\n"
+"  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC"
 msgstr ""
-"%s, secþiunea %s:\n"
-"  relocarea %s n-ar trebui folositã într-un shared object; recompilaþi cu -fPIC"
+"%pB, secÈ›iunea %pA:\n"
+"  realocarea %s nu este validÄƒ Ã®ntr-un obiect partajat; de obicei, o confuzie de opÈ›iuni, recompilaÈ›i cu â€ž-fPICâ€�"
 
-#: elf32-cris.c:2978
+#: elf32-cris.c:3323
+#, c-format
+msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr "%pB, secÈ›iunea %pA: realocarea %s nu trebuie utilizatÄƒ Ã®ntr-un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�"
+
+#: elf32-cris.c:3701
+#, c-format
+msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr "%pB, secÈ›iunea â€ž%pAâ€�, la simbolul â€ž%sâ€�: realocarea %s nu trebuie utilizatÄƒ Ã®ntr-un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�"
+
+#: elf32-cris.c:3813
+msgid "unexpected machine number"
+msgstr "numÄƒr de maÈ™inÄƒ neaÈ™teptat"
+
+#: elf32-cris.c:3865
+#, c-format
 msgid " [symbols have a _ prefix]"
-msgstr " [simbolurile au un _prefix]"
+msgstr " [simbolurile au un prefix â€ž_â€�]"
 
-#: elf32-cris.c:3017
+#: elf32-cris.c:3868
 #, c-format
-msgid "%s: uses _-prefixed symbols, but writing file with non-prefixed symbols"
-msgstr "%s: se folosesc simbolurile _-prefixate, dar se scrie fiºierul cu simboluri neprefixate"
+msgid " [v10 and v32]"
+msgstr " [v10 È™i v32]"
 
-#: elf32-cris.c:3018
+#: elf32-cris.c:3871
 #, c-format
-msgid "%s: uses non-prefixed symbols, but writing file with _-prefixed symbols"
-msgstr "%s: se folosesc simboluri neprefixate, dar se scrie fiºierul cu simboluri _-prefixate"
+msgid " [v32]"
+msgstr " [v32]"
 
-#: elf32-frv.c:1223
+#: elf32-cris.c:3915
 #, c-format
-msgid "%s: compiled with %s and linked with modules that use non-pic relocations"
-msgstr "%s: compilat cu %s ºi linkuit cu module care folosesc relocaþii non-pic"
+msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
+msgstr "%pB: utilizeazÄƒ simboluri prefixate cu â€ž_â€�, dar scrie fiÈ™ierul cu simboluri fÄƒrÄƒ prefix"
 
-#: elf32-frv.c:1273 elf32-iq2000.c:895
+#: elf32-cris.c:3916
 #, c-format
-msgid "%s: compiled with %s and linked with modules compiled with %s"
-msgstr "%s: compilat cu %s ºi linkuit cu module compilate cu %s"
+msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
+msgstr "%pB: utilizeazÄƒ simboluri fÄƒrÄƒ prefix, dar se scrie fiÈ™ierul cu simboluri prefixate cu â€ž_â€�"
 
-#: elf32-frv.c:1285
+#: elf32-cris.c:3935
 #, c-format
-msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)"
-msgstr "%s: foloseºte câmpuri marcaje e_flags (0x%lx) diferite de modulele anterioare (0x%lx)"
+msgid "%pB contains CRIS v32 code, incompatible with previous objects"
+msgstr "%pB conÈ›ine cod CRIS v32, incompatibil cu obiectele anterioare"
 
-#: elf32-frv.c:1321 elf32-iq2000.c:933
+#: elf32-cris.c:3937
 #, c-format
-msgid "private flags = 0x%lx:"
-msgstr "marcaje(flags) private = 0x%lx"
+msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
+msgstr "%pB conÈ›ine cod non-CRIS-v32, incompatibil cu obiectele anterioare"
+
+#: elf32-csky.c:2018
+msgid "GOT table size out of range"
+msgstr "dimensiunea tabelului GOT Ã®n afara limitei"
+
+#: elf32-csky.c:2830
+#, c-format
+msgid "warning: unrecognized arch eflag '%#lx'"
+msgstr "avertisment: eflag de arhitecturÄƒ nerecunoscut â€ž%#lxâ€�"
 
-#: elf32-gen.c:83 elf64-gen.c:82
+#: elf32-csky.c:2853
 #, c-format
-msgid "%s: Relocations in generic ELF (EM: %d)"
-msgstr "%s: Relocãri în ELF generic (EM: %d)"
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "avertisment: nume de arhitecturÄƒ nerecunoscut â€ž%#xâ€�"
 
-#: elf32-hppa.c:672 elf32-m68hc1x.c:176 elf64-ppc.c:3118
+#: elf32-csky.c:2918 elf32-csky.c:3078
 #, c-format
-msgid "%s: cannot create stub entry %s"
-msgstr "%s: nu se poate crea intrarea trunchiatã %s"
+msgid "%pB: machine flag conflict with target"
+msgstr "%pB: fanionul de maÈ™inÄƒ Ã®n conflict cu È›inta"
 
-#: elf32-hppa.c:957 elf32-hppa.c:3538
+#: elf32-csky.c:2931
 #, c-format
-msgid "%s(%s+0x%lx): cannot reach %s, recompile with -ffunction-sections"
-msgstr "%s(%s+0x%lx): nu se poate gãsi %s, recompilaþi cu -ffunction-sections"
+msgid "warning: file %pB's arch flag %s conflict with target %s,set target arch flag to %s"
+msgstr "avertisment: fanionul arhitecturii â€ž%2$sâ€� al fiÈ™ierului â€ž%1$pBâ€� intrÄƒ Ã®n conflict cu È›inta â€ž%3$sâ€�, definiÈ›i fanionul arhitecturii È›intÄƒ la â€ž%4$sâ€�"
 
-#: elf32-hppa.c:1340 elf64-x86-64.c:672 elf64-x86-64.c:797
+#: elf32-csky.c:2960
 #, c-format
-msgid "%s: relocation %s can not be used when making a shared object; recompile with -fPIC"
-msgstr "%s: relocarea %s nu poate fi utilizatã când se face un shared object, recompilaþicu -fPIC"
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr "Eroare: %pB È™i %pB au versiuni VDSP diferite"
 
-#: elf32-hppa.c:1360
+#: elf32-csky.c:2977
 #, c-format
-msgid "%s: relocation %s should not be used when making a shared object; recompile with -fPIC"
-msgstr "%s: relocarea %s nu ar trebui utilizatã când se face un shared object, recompilaþicu -fPIC"
+msgid "Error: %pB and %pB has different DSP version"
+msgstr "Eroare: %pB È™i %pB au versiuni DSP diferite"
 
-#: elf32-hppa.c:1553
+#: elf32-csky.c:2995
 #, c-format
-msgid "Could not find relocation section for %s"
-msgstr "Nu se poate gãsi secþiunea de relocare pentru %s"
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr "Eroare: %pB È™i %pB au ABI FPU diferit"
 
-#: elf32-hppa.c:2828
+#: elf32-csky.c:3092
 #, c-format
-msgid "%s: duplicate export stub %s"
-msgstr "%s: exportare de ciot(stub) duplicatã %s"
+msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
+msgstr "avertisment: fanionul arhitecturii %2$s al fiÈ™ierului %1$pB intrÄƒ Ã®n conflict cu È›inta ck%3$s, folosind %4$s"
 
-#: elf32-hppa.c:3416
+#. The r_type is error, not support it.
+#: elf32-csky.c:4331 elf32-i386.c:344
 #, c-format
-msgid "%s(%s+0x%lx): fixing %s"
-msgstr "%s(%s+0x%lx): se fixeazã %s"
+msgid "%pB: unsupported relocation type: %#x"
+msgstr "%pB: tip de realocare neacceptat: %#x"
 
-#: elf32-hppa.c:4039
+#: elf32-dlx.c:141
 #, c-format
-msgid "%s(%s+0x%lx): cannot handle %s for %s"
-msgstr "%s(%s+0x%lx): nu pot manipula %s pentru %s"
+msgid "branch (PC rel16) to section (%s) not supported"
+msgstr "ramura (PC rel16) la secÈ›iunea (%s) nu este acceptatÄƒ"
+
+#: elf32-dlx.c:204
+#, c-format
+msgid "jump (PC rel26) to section (%s) not supported"
+msgstr "saltul (PC rel26) la secÈ›iunea (%s) nu este acceptat"
+
+#. Only if it's not an unresolved symbol.
+#: elf32-epiphany.c:570 elf32-ip2k.c:1485
+msgid "unsupported relocation between data/insn address spaces"
+msgstr "realocarea nu este acceptatÄƒ Ã®ntre spaÈ›iile de adrese date/insn"
+
+#: elf32-frv.c:1453 elf32-frv.c:1604
+msgid "relocation requires zero addend"
+msgstr "realocarea necesitÄƒ adÄƒugarea de zero"
+
+#: elf32-frv.c:2833
+#, c-format
+msgid "%H: relocation to `%s+%v' may have caused the error above\n"
+msgstr "%H: realocarea Ã®n â€ž%s+%vâ€� poate fi cauzat eroarea de mai sus\n"
+
+#: elf32-frv.c:2850
+msgid "%H: relocation references symbol not defined in the module\n"
+msgstr "%H: simbolul referinÈ›elor de realocare nu este definit Ã®n modul\n"
+
+#: elf32-frv.c:2926
+msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
+msgstr "%H: R_FRV_GETTLSOFF nu este aplicat unei instrucÈ›iuni de apel\n"
 
-#: elf32-hppa.c:4357
+#: elf32-frv.c:2967
+msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
+msgstr "%H: R_FRV_GOTTLSDESC12 nu este aplicat unei instrucÈ›iuni lddi\n"
+
+#: elf32-frv.c:3038
+msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
+msgstr "%H: R_FRV_GOTTLSDESCHI nu este aplicat unei instrucÈ›iuni sethi\n"
+
+#: elf32-frv.c:3075
+msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
+msgstr "%H: R_FRV_GOTTLSDESCLO nu este aplicat unei instrucÈ›iuni setlo sau setlos\n"
+
+#: elf32-frv.c:3122
+msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
+msgstr "%H: R_FRV_TLSDESC_RELAX nu este aplicat unei instrucÈ›iuni ldd\n"
+
+#: elf32-frv.c:3206
+msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
+msgstr "%H: R_FRV_GETTLSOFF_RELAX nu este aplicat unei instrucÈ›iuni de apel\n"
+
+#: elf32-frv.c:3260
+msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
+msgstr "%H: R_FRV_GOTTLSOFF12 nu este aplicat unei instrucÈ›iuni ldi\n"
+
+#: elf32-frv.c:3290
+msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
+msgstr "%H: R_FRV_GOTTLSOFFHI nu este aplicat unei instrucÈ›iuni sethi\n"
+
+#: elf32-frv.c:3319
+msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
+msgstr "%H: R_FRV_GOTTLSOFFLO nu este aplicat unei instrucÈ›iuni setlo sau setlos\n"
+
+#: elf32-frv.c:3349
+msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
+msgstr "%H: R_FRV_TLSOFF_RELAX nu este aplicat unei instrucÈ›iuni ld\n"
+
+#: elf32-frv.c:3394
+msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
+msgstr "%H: R_FRV_TLSMOFFHI nu este aplicat unei instrucÈ›iuni sethi\n"
+
+#: elf32-frv.c:3421
+msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
+msgstr "R_FRV_TLSMOFFLO nu este aplicat unei instrucÈ›iuni setlo sau setlos\n"
+
+#: elf32-frv.c:3542 elf32-frv.c:3662
+msgid "%H: %s references dynamic symbol with nonzero addend\n"
+msgstr "%H: %s face referire la simbolul dinamic cu adaos diferit de zero\n"
+
+#: elf32-frv.c:3583 elf32-frv.c:3704
+msgid "%H: cannot emit fixups in read-only section\n"
+msgstr "%H: nu se pot emite remedieri Ã®n secÈ›iunea numai-pentru-citire\n"
+
+#: elf32-frv.c:3613 elf32-frv.c:3746
+msgid "%H: cannot emit dynamic relocations in read-only section\n"
+msgstr "%H: nu se pot emite realocÄƒri dinamice Ã®n secÈ›iunea numai-pentru-citire\n"
+
+#: elf32-frv.c:3918
+#, c-format
+msgid "%H: reloc against `%s' references a different segment\n"
+msgstr "%H: realocarea faÈ›Äƒ de â€ž%sâ€� face referire la un segment diferit\n"
+
+#: elf32-frv.c:4069
+#, c-format
+msgid "%H: reloc against `%s': %s\n"
+msgstr "%H: realocare faÈ›Äƒ de â€ž%sâ€�: %s\n"
+
+#: elf32-frv.c:6496
+#, c-format
+msgid "%pB: compiled with %s and linked with modules that use non-pic relocations"
+msgstr "%pB: compilat cu %s È™i vinculat cu module care folosesc realocÄƒri non-pic"
+
+#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
+#, c-format
+msgid "%pB: compiled with %s and linked with modules compiled with %s"
+msgstr "%pB: compilat cu %s È™i vinculat cu module compilate cu %s"
+
+#: elf32-frv.c:6563
+#, c-format
+msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
+msgstr "%pB: foloseÈ™te cÃ¢mpuri e_flags necunoscute (%#x) diferite faÈ›Äƒ de modulele anterioare (%#x)"
+
+#: elf32-gen.c:71
+#, c-format
+msgid "%pB: relocations in generic ELF (EM: %d)"
+msgstr "%pB: realocÄƒri Ã®n ELF generic (EM: %d)"
+
+#: elf32-hppa.c:863 elf32-hppa.c:3403
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
+msgstr "%pB(%pA+%#<PRIx64>): nu se poate ajunge la %s, recompilaÈ›i cu â€ž-ffunction-sectionsâ€�"
+
+#: elf32-hppa.c:1241
+#, c-format
+msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"
+msgstr "%pB: realocarea %s nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�"
+
+#: elf32-hppa.c:2580
+#, c-format
+msgid "%pB: duplicate export stub %s"
+msgstr "%pB: ciot(stub) de exportare duplicat %s"
+
+#: elf32-hppa.c:3236
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s fixup for insn %#x is not supported in a non-shared link"
+msgstr "%pB(%pA+%#<PRIx64>): remedierea %s pentru insn %#x nu este acceptatÄƒ Ã®ntr-o legÄƒturÄƒ nepartajatÄƒ"
+
+#: elf32-hppa.c:4032
+#, c-format
+msgid "%s has both normal and TLS relocs"
+msgstr "%s are atÃ¢t realocÄƒri normale, cÃ¢t È™i realocÄƒri TLS"
+
+#: elf32-hppa.c:4050
+#, c-format
+msgid "%pB:%s has both normal and TLS relocs"
+msgstr "%pB:%s are atÃ¢t realocÄƒri normale, cÃ¢t È™i realocÄƒri TLS"
+
+#: elf32-hppa.c:4109
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
+msgstr "%pB(%pA+%#<PRIx64>): nu se poate gestiona %s pentru %s"
+
+#: elf32-hppa.c:4415
 msgid ".got section not immediately after .plt section"
-msgstr "secþiunea .got nu urmeazã imediat dupã secþiunea .plt"
+msgstr "secÈ›iunea .got nu urmeazÄƒ imediat dupÄƒ secÈ›iunea .plt"
 
-#: elf32-i386.c:326
+#: elf32-i386.c:1177 elf64-x86-64.c:1506
 #, c-format
-msgid "%s: invalid relocation type %d"
-msgstr "%s: tip de relocare invalid %d"
+msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
+msgstr "%pB: tranziÈ›ia TLS de la %s la %s faÈ›Äƒ de â€ž%sâ€� la %#<PRIx64> din secÈ›iunea â€ž%pAâ€� a eÈ™uat"
 
-#: elf32-i386.c:841 elf32-s390.c:990 elf32-sparc.c:887 elf32-xtensa.c:637
-#: elf64-s390.c:943 elf64-x86-64.c:650
+#: elf32-i386.c:1286
 #, c-format
-msgid "%s: bad symbol index: %d"
-msgstr "%s:index de simboluri invalid: %d"
+msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
+msgstr "%pB: realocarea GOT directÄƒ, R_386_GOT32X faÈ›Äƒ de â€ž%sâ€� fÄƒrÄƒ registru de bazÄƒ nu poate fi utilizatÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat"
 
-#: elf32-i386.c:949 elf32-s390.c:1168 elf32-sh.c:6426 elf32-sparc.c:1011
-#: elf64-s390.c:1129
+#: elf32-i386.c:1719 elf32-s390.c:1151 elf32-sh.c:5499 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1263 elf64-s390.c:1083 elfxx-sparc.c:1556 elfxx-tilegx.c:1767
+#: elfnn-loongarch.c:612 elfnn-riscv.c:671
 #, c-format
-msgid "%s: `%s' accessed both as normal and thread local symbol"
-msgstr "%s: `%s' accesate ºi ca simboluri locale normale ºi ca simboluri locale pe fire (thread)"
+msgid "%pB: `%s' accessed both as normal and thread local symbol"
+msgstr "%pB: %s a fost accesat atÃ¢t ca simbol local normal, cÃ¢t È™i ca simbol local al firului de execuÈ›ie"
 
-#: elf32-i386.c:1064 elf32-s390.c:1279 elf64-ppc.c:3929 elf64-s390.c:1243
-#: elf64-x86-64.c:886
+#: elf32-i386.c:1791
 #, c-format
-msgid "%s: bad relocation section name `%s'"
-msgstr "%s: nume secþiune relocare invalid `%s'"
+msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
+msgstr "%pB: apel non-PIC neacceptat cÄƒtre IFUNC â€ž%sâ€�"
 
-#: elf32-i386.c:2908 elf32-m68k.c:1757 elf32-s390.c:3022 elf32-sparc.c:2879
-#: elf32-xtensa.c:2193 elf64-s390.c:3018 elf64-sparc.c:2664
-#: elf64-x86-64.c:2452
+#: elf32-i386.c:1846 elf64-x86-64.c:2436
 #, c-format
-msgid "%s(%s+0x%lx): unresolvable relocation against symbol `%s'"
-msgstr "%s(%s+0x%lx): relocare nerezolvabilã pe simbolul `%s'"
+msgid "%pB: non-canonical reference to canonical protected function `%s' in %pB"
+msgstr "%pB: referinÈ›Äƒ necanonicÄƒ la funcÈ›ia protejatÄƒ canonicÄƒ â€ž%sâ€� Ã®n %pB"
 
-#: elf32-i386.c:2947 elf32-m68k.c:1796 elf32-s390.c:3072 elf64-s390.c:3068
-#: elf64-x86-64.c:2490
+#: elf32-i386.c:2410 elf64-x86-64.c:2900 elfnn-riscv.c:2455
 #, c-format
-msgid "%s(%s+0x%lx): reloc against `%s': error %d"
-msgstr "%s(%s+0x%lx): relocare pe `%s': eroare %d"
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
+msgstr "%pB: realocarea %s faÈ›Äƒ de simbolul STT_GNU_IFUNC â€ž%sâ€� nu este acceptatÄƒ"
 
-#: elf32-ip2k.c:565 elf32-ip2k.c:571 elf32-ip2k.c:734 elf32-ip2k.c:740
+#: elf32-i386.c:2443 elf32-i386.c:3745 elf32-i386.c:3893 elf64-x86-64.c:2957
+#: elf64-x86-64.c:4597 elf64-x86-64.c:4765 elfnn-riscv.c:2328
+#: elfnn-riscv.c:3184 elfnn-riscv.c:3258
+#, c-format
+msgid "Local IFUNC function `%s' in %pB\n"
+msgstr "FuncÈ›ia IFUNC localÄƒ â€ž%sâ€� Ã®n %pB\n"
+
+#: elf32-i386.c:2621
+#, c-format
+msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
+msgstr "%pB: realocarea GOT directÄƒ %s faÈ›Äƒ de â€ž%sâ€� fÄƒrÄƒ registrul de bazÄƒ nu poate fi utilizatÄƒ cÃ¢nd se creeazÄƒ un obiect partajat"
+
+#: elf32-i386.c:2656 elf64-x86-64.c:3174
+msgid "hidden symbol"
+msgstr "simbol ascuns"
+
+#: elf32-i386.c:2659 elf64-x86-64.c:3177
+msgid "internal symbol"
+msgstr "simbol intern"
+
+#: elf32-i386.c:2662 elf64-x86-64.c:3180
+msgid "protected symbol"
+msgstr "simbol protejat"
+
+#: elf32-i386.c:2665 elf64-x86-64.c:3183
+msgid "symbol"
+msgstr "simbol"
+
+#: elf32-i386.c:2671
+#, c-format
+msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
+msgstr "%pB: realocarea R_386_GOTOFF faÈ›Äƒ de %s nedefinit â€ž%sâ€� nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat"
+
+#: elf32-i386.c:2684
+#, c-format
+msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
+msgstr "%pB: realocarea R_386_GOTOFF faÈ›Äƒ de %s protejat â€ž%sâ€� nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat"
+
+#: elf32-i386.c:4096 elf64-x86-64.c:4976
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr "%F%P: secÈ›iune de ieÈ™ire Ã®nlÄƒturatÄƒ: â€ž%pAâ€�\n"
+
+#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
 msgid "ip2k relaxer: switch table without complete matching relocation information."
-msgstr "ip2k relaxer: schimbare de tabel fãrã potrivirea completã a informaþiei de relocare."
+msgstr "relaxer ip2k: tabel de comutare fÄƒrÄƒ potrivire completÄƒ a informaÈ›iilor de realocare."
 
-#: elf32-ip2k.c:588 elf32-ip2k.c:767
+#: elf32-ip2k.c:878 elf32-ip2k.c:961
 msgid "ip2k relaxer: switch table header corrupt."
-msgstr "ip2k relaxer: headerul tablelului de schimbare este corupt."
+msgstr "relaxer ip2k: antetul tabelului de comutare corupt."
 
-#: elf32-ip2k.c:1395
+#: elf32-ip2k.c:1298
 #, c-format
-msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)."
-msgstr "ip2k linker: lipseºte instrucþiunea de paginã la 0x%08lx (dest = 0x%08lx)."
+msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
+msgstr "editor de legÄƒturii ip2k: lipseÈ™te instrucÈ›iunea de paginÄƒ la %#<PRIx64> (dest = %#<PRIx64>)"
 
-#: elf32-ip2k.c:1409
+#: elf32-ip2k.c:1317
 #, c-format
-msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)."
-msgstr "ip2k linker: instrucþiune redundantã de paginã la 0x%08lx (dest = 0x%08lx)."
+msgid "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
+msgstr "editor de legÄƒturii ip2k: instrucÈ›iune redundantÄƒ de paginÄƒ la %#<PRIx64> (dest = %#<PRIx64>)"
 
-#. Only if it's not an unresolved symbol.
-#: elf32-ip2k.c:1593
-msgid "unsupported relocation between data/insn address spaces"
-msgstr "relocare nesuportatã între datã/spaþiu adresã insn"
+#: elf32-lm32.c:609 elf32-nios2.c:3145
+msgid "global pointer relative relocation when _gp not defined"
+msgstr "realocare relativÄƒ a indicatorului global atunci cÃ¢nd _gp nu este definit"
+
+#: elf32-lm32.c:664 elf32-nios2.c:3582
+msgid "global pointer relative address out of range"
+msgstr "adresÄƒ relativÄƒ a indicatorului global Ã®n afara intervalului"
 
-#: elf32-iq2000.c:907 elf32-m68hc1x.c:1431 elf32-ppc.c:2175 elf64-sparc.c:3072
-#: elfxx-mips.c:9195
+#: elf32-lm32.c:960
 #, c-format
-msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
-msgstr "%s: foloseºte câmpuri de marcaje e_flags (0x%lx) diferite de modulele anterioare (0x%lx)"
+msgid "internal error: addend should be zero for %s"
+msgstr "eroare internÄƒ: adÄƒugarea trebuie sÄƒ fie zero pentru %s"
 
-#: elf32-m32r.c:930
+#: elf32-m32r.c:1461
 msgid "SDA relocation when _SDA_BASE_ not defined"
-msgstr "Relocare SDA când _SDA_BASE_ nu este definit"
+msgstr "realocare SDA cÃ¢nd _SDA_BASE_ nu este definit"
 
-#: elf32-m32r.c:1018 elf64-alpha.c:4279 elf64-alpha.c:4407 elf32-ia64.c:3958
-#: elf64-ia64.c:3958
+#: elf32-m32r.c:2776 elf32-microblaze.c:1152 elf32-microblaze.c:1200
 #, c-format
-msgid "%s: unknown relocation type %d"
-msgstr "%s: tip necunoscut de relocare %d"
+msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)"
+msgstr "%pB: È›inta (%s) unei realocÄƒri %s este Ã®n secÈ›iunea greÈ™itÄƒ (%pA)"
 
-#: elf32-m32r.c:1226
+#: elf32-m32r.c:3279
 #, c-format
-msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)"
-msgstr "%s: Þinta (%s) unei relocãri %s este în secþiunea nepotrivitã (%s)"
+msgid "%pB: instruction set mismatch with previous modules"
+msgstr "%pB: setul de instrucÈ›iuni nu se potriveÈ™te cu modulele anterioare"
 
-#: elf32-m32r.c:1952
-#, c-format
-msgid "%s: Instruction set mismatch with previous modules"
-msgstr "%s: Setul de instrucþiuni nu se potriveºte cu modulele anterioare"
-
-#: elf32-m32r.c:1975
+#: elf32-m32r.c:3300 elf32-nds32.c:6900
 #, c-format
 msgid "private flags = %lx"
-msgstr "marcaje (flags) private = %lx"
+msgstr "fanioane private = %lx"
 
-#: elf32-m32r.c:1980
+#: elf32-m32r.c:3305
+#, c-format
 msgid ": m32r instructions"
-msgstr ": instrucþiuni m32r"
+msgstr ": instrucÈ›iuni m32r"
 
-#: elf32-m32r.c:1981
+#: elf32-m32r.c:3306
+#, c-format
 msgid ": m32rx instructions"
-msgstr ": instrucþiuni m32rx"
+msgstr ": instrucÈ›iuni m32rx"
+
+#: elf32-m32r.c:3307
+#, c-format
+msgid ": m32r2 instructions"
+msgstr ": instrucÈ›iuni m32r2"
+
+#: elf32-m68hc1x.c:1135
+#, c-format
+msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
+msgstr "referirea la simbolul Ã®ndepÄƒrtat â€ž%sâ€� folosind o realocare greÈ™itÄƒ poate avea ca rezultat o execuÈ›ie incorectÄƒ"
 
-#: elf32-m68hc1x.c:1217
+#: elf32-m68hc1x.c:1166
 #, c-format
-msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
-msgstr "Referinþa la simbolul depãrtat `%s' folosind o relocare invalidã poate duce la execuþie incorectã"
+msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code."
+msgstr "adresa XGATE (%lx) nu se aflÄƒ Ã®n memoria RAM partajatÄƒ (0xE000-0xFFFF), prin urmare trebuie sÄƒ poziÈ›ionaÈ›i manual adresa È™i, eventual, sÄƒ gestionaÈ›i pagina, Ã®n codul dvs."
 
-#: elf32-m68hc1x.c:1240
+#: elf32-m68hc1x.c:1182
 #, c-format
 msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)"
-msgstr "adresa banked [%lx:%04lx] (%lx) nu este în acelaºi bank precum adresa banked curentã [%lx:%04lx] (%lx)"
+msgstr "adresa grupatÄƒ [%lx:%04lx] (%lx) nu este Ã®n acelaÈ™i grup cu adresa curentÄƒ grupatÄƒ [%lx:%04lx] (%lx)"
 
-#: elf32-m68hc1x.c:1259
+#: elf32-m68hc1x.c:1197
 #, c-format
 msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx"
-msgstr "referinþã la adresa banked [%lx:%04lx] în spaþiul normal de adresã la %04lx"
+msgstr "referinÈ›Äƒ la o adresÄƒ grupatÄƒ [%lx:%04lx] Ã®n spaÈ›iul de adrese normal la %04lx"
+
+#: elf32-m68hc1x.c:1233
+#, c-format
+msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code"
+msgstr "adresa S12 (%lx) nu se aflÄƒ Ã®n memoria RAM partajatÄƒ (0x2000-0x4000), prin urmare trebuie sÄƒ poziÈ›ionaÈ›i manual adresa Ã®n codul dvs."
 
-#: elf32-m68hc1x.c:1396
+#: elf32-m68hc1x.c:1357
 #, c-format
-msgid "%s: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
-msgstr "%s: linkuire a fiºierelor compilate pentru întregi(integers)  pe 16-biþi (-mshort) ºi a celorlalte pentru întregi(integers) pe 32-biþi"
+msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
+msgstr "%pB: se vinculeazÄƒ fiÈ™iere compilate pentru numere Ã®ntregi pe 16 biÈ›i (-mshort) È™i altele pentru numere Ã®ntregi pe 32 de biÈ›i"
 
-#: elf32-m68hc1x.c:1404
+#: elf32-m68hc1x.c:1364
 #, c-format
-msgid "%s: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
-msgstr "%s: linkuire a fiºierelor compilate pentru double pe 32-biþi (-fshort-double) ºi a celorlalte pentru double pe 64-biþi"
+msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
+msgstr "%pB: se vinculeazÄƒ fiÈ™iere compilate pentru double pe 32-biÈ›i (-fshort-double) È™i altele pentru double pe 64-biÈ›i"
 
-#: elf32-m68hc1x.c:1414
+#: elf32-m68hc1x.c:1373
 #, c-format
-msgid "%s: linking files compiled for HCS12 with others compiled for HC12"
-msgstr "%s:linkuire a fiºierelor compilate pentru HCS12 cu celelalte compilate pentru HC12"
+msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
+msgstr "%pB: se vinculeazÄƒ fiÈ™iere compilate pentru HCS12 cu altele compilate pentru HC12"
 
-#: elf32-m68hc1x.c:1462
+#: elf32-m68hc1x.c:1418 elf32-xgate.c:497
+#, c-format
 msgid "[abi=32-bit int, "
-msgstr "[abi=32-bit int, "
+msgstr "[abi=int pe 32-biÈ›i, "
 
-#: elf32-m68hc1x.c:1464
+#: elf32-m68hc1x.c:1420 elf32-xgate.c:499
+#, c-format
 msgid "[abi=16-bit int, "
-msgstr "[abi=16-bit int, "
+msgstr "[abi=int pe 16-biÈ›i, "
 
-#: elf32-m68hc1x.c:1467
+#: elf32-m68hc1x.c:1423 elf32-xgate.c:502
+#, c-format
 msgid "64-bit double, "
-msgstr "double pe 64-biþi, "
+msgstr "double pe 64-biÈ›i, "
 
-#: elf32-m68hc1x.c:1469
+#: elf32-m68hc1x.c:1425 elf32-xgate.c:504
+#, c-format
 msgid "32-bit double, "
-msgstr "double pe 32-biþi, "
+msgstr "double pe 32-biÈ›i, "
 
-#: elf32-m68hc1x.c:1472
+#: elf32-m68hc1x.c:1428
+#, c-format
 msgid "cpu=HC11]"
 msgstr "cpu=HC11]"
 
-#: elf32-m68hc1x.c:1474
+#: elf32-m68hc1x.c:1430
+#, c-format
 msgid "cpu=HCS12]"
 msgstr "cpu=HCS12]"
 
-#: elf32-m68hc1x.c:1476
+#: elf32-m68hc1x.c:1432
+#, c-format
 msgid "cpu=HC12]"
 msgstr "cpu=HC12]"
 
-#: elf32-m68hc1x.c:1479
+#: elf32-m68hc1x.c:1435
+#, c-format
 msgid " [memory=bank-model]"
-msgstr " [memorie=mod-bank]"
+msgstr " [memorie=model-bank]"
 
-#: elf32-m68hc1x.c:1481
+#: elf32-m68hc1x.c:1437
+#, c-format
 msgid " [memory=flat]"
-msgstr " [memorie=întinsã(flat)]"
+msgstr " [memorie=planÄƒ(flat)]"
+
+#: elf32-m68hc1x.c:1440
+#, c-format
+msgid " [XGATE RAM offsetting]"
+msgstr " [poziÈ›ionare RAM XGATE]"
+
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3572 elf32-ppc.c:3580
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr "%pB foloseÈ™te virgulÄƒ mobilÄƒ hardware, %pB foloseÈ™te virgulÄƒ mobilÄƒ software"
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:8085 vms-alpha.c:8101
+msgid "unknown"
+msgstr "necunoscut"
+
+#: elf32-m68k.c:1731
+#, c-format
+msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d"
+msgstr "%pB: depÄƒÈ™ire GOT: numÄƒr de realocÄƒri cu decalaj pe 8 biÈ›i > %d"
+
+#: elf32-m68k.c:1738
+#, c-format
+msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
+msgstr "%pB: depÄƒÈ™ire GOT: numÄƒrul de realocÄƒri cu decalaj de 8 sau 16 biÈ›i > %d"
 
-#: elf32-m68k.c:400
-msgid " [cpu32]"
-msgstr " [cpu32]"
+#. Pacify gcc -Wall.
+#: elf32-mep.c:139
+#, c-format
+msgid "mep: no reloc for code %d"
+msgstr "mep: nici o realocare pentru codul %d"
+
+#: elf32-mep.c:146
+#, c-format
+msgid "MeP: howto %d has type %d"
+msgstr "MeP: â€žhowtoâ€� %d are tipul %d"
 
-#: elf32-m68k.c:403
-msgid " [m68000]"
-msgstr " [m68000]"
+#: elf32-mep.c:618
+#, c-format
+msgid "%pB and %pB are for different cores"
+msgstr "%pB È™i %pB sunt pentru nuclee diferite"
+
+#: elf32-mep.c:637
+#, c-format
+msgid "%pB and %pB are for different configurations"
+msgstr "%pB È™i %pB sunt pentru configuraÈ›ii diferite"
+
+#: elf32-mep.c:675
+#, c-format
+msgid "private flags = 0x%lx"
+msgstr "fanioane private = 0x%lx"
 
-#: elf32-mcore.c:353 elf32-mcore.c:456
+#: elf32-metag.c:1857
 #, c-format
-msgid "%s: Relocation %s (%d) is not currently supported.\n"
-msgstr "%s: Relocarea %s (%d) nu este încã suportatã.\n"
+msgid "%pB(%pA): multiple TLS models are not supported"
+msgstr "%pB(%pA): nu sunt acceptate multiple modele TLS"
 
-#: elf32-mcore.c:441
+#: elf32-metag.c:1860
 #, c-format
-msgid "%s: Unknown relocation type %d\n"
-msgstr "%s: Tip necunoscut de relocare %d\n"
+msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link"
+msgstr "%pB(%pA): simbolul bibliotecii partajate %s Ã®ntÃ¢lnit Ã®n timpul efectuÄƒrii unei vinculÄƒri statice"
 
-#: elf32-mips.c:1170 elf64-mips.c:1717 elfn32-mips.c:1664
+#: elf32-microblaze.c:1595 elf32-tilepro.c:3021 elfxx-sparc.c:3446
+#: elfxx-tilegx.c:3415
+#, c-format
+msgid "%pB: probably compiled without -fPIC?"
+msgstr "%pB: probabil compilat fÄƒrÄƒ â€ž-fPICâ€�?"
+
+#: elf32-mips.c:1776 elf64-mips.c:3515 elfn32-mips.c:3334
+msgid "literal relocation occurs for an external symbol"
+msgstr "realocarea literalÄƒ are loc pentru un simbol extern"
+
+#: elf32-mips.c:1827 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3558
+#: elfn32-mips.c:3376
 msgid "32bits gp relative relocation occurs for an external symbol"
-msgstr "relocarea relativã gp 32bits are loc pe un simbol extern"
+msgstr "realocarea relativÄƒ gp 32bits are loc pe un simbol extern"
+
+#: elf32-msp430.c:914
+#, c-format
+msgid "error: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "eroare: dimensiunea finalÄƒ a valorii uleb128 la poziÈ›ia 0x%lx Ã®n %pA din %pB depÄƒÈ™eÈ™te spaÈ›iul disponibil"
+
+#: elf32-msp430.c:983 elf32-msp430.c:1297
+msgid "try enabling relaxation to avoid relocation truncations"
+msgstr "Ã®ncercaÈ›i sÄƒ activaÈ›i relaxarea pentru a evita trunchierea realocÄƒrii"
+
+#: elf32-msp430.c:1506
+msgid "internal error: branch/jump to an odd address detected"
+msgstr "eroare internÄƒ: a fost detectatÄƒ o ramurÄƒ/salt la o adresÄƒ imparÄƒ"
+
+#: elf32-msp430.c:2673
+#, c-format
+msgid "warning: %pB: unknown MSPABI object attribute %d"
+msgstr "avertizare: %pB: atribut necunoscut al obiectului MSPABI %d"
+
+#: elf32-msp430.c:2774
+#, c-format
+msgid "error: %pB uses %s instructions but %pB uses %s"
+msgstr "eroare: %pB foloseÈ™te %s instrucÈ›iuni, dar %pB foloseÈ™te %s"
+
+#: elf32-msp430.c:2786
+#, c-format
+msgid "error: %pB uses the %s code model whereas %pB uses the %s code model"
+msgstr "eroare: %pB foloseÈ™te modelul de cod %s, Ã®n timp ce %pB foloseÈ™te modelul de cod %s"
+
+#: elf32-msp430.c:2799
+#, c-format
+msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
+msgstr "eroare: %pB utilizeazÄƒ modelul de cod mare, dar %pB utilizeazÄƒ instrucÈ›iuni MSP430"
+
+#: elf32-msp430.c:2810
+#, c-format
+msgid "error: %pB uses the %s data model whereas %pB uses the %s data model"
+msgstr "eroare: %pB utilizeazÄƒ modelul de date %s, Ã®n timp ce %pB utilizeazÄƒ modelul de date %s"
+
+#: elf32-msp430.c:2823
+#, c-format
+msgid "error: %pB uses the small code model but %pB uses the %s data model"
+msgstr "eroare: %pB utilizeazÄƒ modelul de cod mic, dar %pB utilizeazÄƒ modelul de date %s"
+
+#: elf32-msp430.c:2835
+#, c-format
+msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions"
+msgstr "eroare: %pB utilizeazÄƒ modelul de date %s, dar %pB utilizeazÄƒ doar instrucÈ›iuni MSP430"
+
+#: elf32-msp430.c:2860
+#, c-format
+msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
+msgstr "eroare: %pB poate utiliza regiunea superioarÄƒ pentru date, dar %pB presupune cÄƒ datele se aflÄƒ exclusiv Ã®n memoria inferioarÄƒ"
+
+#: elf32-nds32.c:3674
+#, c-format
+msgid "error: can't find symbol: %s"
+msgstr "eroare: nu se poate gÄƒsi simbolul: %s"
+
+#: elf32-nds32.c:5573
+#, c-format
+msgid "%pB: warning: %s unsupported in shared mode"
+msgstr "%pB: avertisment: %s nu este acceptat Ã®n modul partajat"
+
+#: elf32-nds32.c:5699
+#, c-format
+msgid "%pB: warning: unaligned access to GOT entry"
+msgstr "%pB: avertisment: acces nealiniat la intrarea GOT"
+
+#: elf32-nds32.c:5740
+#, c-format
+msgid "%pB: warning: relocate SDA_BASE failed"
+msgstr "%pB: avertisment: realocarea SDA_BASE a eÈ™uat"
+
+#: elf32-nds32.c:5762
+#, c-format
+msgid "%pB(%pA): warning: unaligned small data access of type %d"
+msgstr "%pB(%pA): avertisment: acces la date mici nealiniate de tip %d"
+
+#: elf32-nds32.c:6688
+#, c-format
+msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
+msgstr "%pB: dimensiunea vectorului ISR nu se potriveÈ™te cu modulele anterioare, %u-octeÈ›i cel anterior, %u-octeÈ›i cel actual"
+
+#: elf32-nds32.c:6736
+#, c-format
+msgid "%pB: warning: endian mismatch with previous modules"
+msgstr "%pB: avertisment: tipul de endianess nu se potriveÈ™te cu modulele anterioare"
+
+#: elf32-nds32.c:6750
+#, c-format
+msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
+msgstr "%pB: avertisment: s-a Ã®ntÃ¢lnit o versiune mai veche a fiÈ™ierului obiect, se recomandÄƒ sÄƒ se recompileze cu lanÈ›ul de instrumente curent"
+
+#: elf32-nds32.c:6838
+#, c-format
+msgid "%pB: error: ABI mismatch with previous modules"
+msgstr "%pB: eroare: ABI nu se potriveÈ™te cu modulele anterioare"
+
+#: elf32-nds32.c:6848
+#, c-format
+msgid "%pB: error: instruction set mismatch with previous modules"
+msgstr "%pB: eroare: setul de instrucÈ›iuni nu se potriveÈ™te cu modulele anterioare"
+
+#: elf32-nds32.c:6875
+#, c-format
+msgid "%pB: warning: incompatible elf-versions %s and %s"
+msgstr "%pB: avertisment: versiuni elf incompatibile %s È™i %s"
+
+#: elf32-nds32.c:6906
+#, c-format
+msgid ": n1 instructions"
+msgstr ": instrucÈ›iuni n1"
+
+#: elf32-nds32.c:6909
+#, c-format
+msgid ": n1h instructions"
+msgstr ": instrucÈ›iuni n1h"
+
+#: elf32-nds32.c:9358
+#, c-format
+msgid "%pB: error: search_nds32_elf_blank reports wrong node"
+msgstr "%pB: eroare: search_nds32_elf_blank raporteazÄƒ nodul greÈ™it"
+
+#: elf32-nds32.c:9622
+#, c-format
+msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
+msgstr "%pB: avertisment: %s indicÄƒ o realocare nerecunoscutÄƒ la %#<PRIx64>"
+
+#: elf32-nds32.c:12887
+#, c-format
+msgid "%pB: nested OMIT_FP in %pA"
+msgstr "%pB: OMIT_FP imbricat Ã®n %pA"
+
+#: elf32-nds32.c:12906
+#, c-format
+msgid "%pB: unmatched OMIT_FP in %pA"
+msgstr "%pB: OMIT_FP fÄƒrÄƒ pereche Ã®n %pA"
+
+#: elf32-nios2.c:2934
+#, c-format
+msgid "error: %pB: big-endian R2 is not supported"
+msgstr "eroare: %pB: R2 big-endian nu este acceptat"
+
+#: elf32-nios2.c:2950
+#, c-format
+msgid "error: %pB: conflicting CPU architectures %d/%d"
+msgstr "eroare: %pB: arhitecturi CPU aflate Ã®n conflict %d/%d"
+
+#: elf32-nios2.c:3825
+#, c-format
+msgid "global pointer relative relocation at address %#<PRIx64> when _gp not defined\n"
+msgstr "realocare relativÄƒ a indicatorului global la adresa %#<PRIx64> atunci cÃ¢nd _gp nu este definit\n"
+
+#: elf32-nios2.c:3852
+#, c-format
+msgid "unable to reach %s (at %#<PRIx64>) from the global pointer (at %#<PRIx64>) because the offset (%<PRId64>) is out of the allowed range, -32678 to 32767\n"
+msgstr "nu se poate ajunge la %s (la %#<PRIx64>) de la indicatorul global (la %#<PRIx64>) deoarece decalajul (%<PRId64>) este Ã®n afara intervalului permis, de la -32678 la 32767\n"
+
+#: elf32-nios2.c:4506 elf32-pru.c:931
+msgid "relocation out of range"
+msgstr "realocare Ã®n afara intervalului"
+
+#: elf32-nios2.c:4516 elf32-pru.c:941 elf32-tic6x.c:2657
+msgid "dangerous relocation"
+msgstr "realocare periculoasÄƒ"
+
+#: elf32-nios2.c:5354
+#, c-format
+msgid "dynamic variable `%s' is zero size"
+msgstr "variabila dinamicÄƒ â€ž%sâ€� are dimensiunea zero"
+
+#: elf32-or1k.c:1258
+#, c-format
+msgid "%pB: Cannot handle relocation value size of %d"
+msgstr "%pB: nu se poate gestiona dimensiunea valorii de realocare de %d"
 
-#: elf32-mips.c:1314 elf64-mips.c:1830 elfn32-mips.c:1783
+#: elf32-or1k.c:1377
 #, c-format
-msgid "Linking mips16 objects into %s format is not supported"
-msgstr "Linkuirea obiectelor mips16 în formatul %s nu este suportatã"
+msgid "%pB: unknown relocation type %d"
+msgstr "%pB tip necunoscut de realocare %d"
 
-#: elf32-ppc.c:2056
+#: elf32-or1k.c:1431
+#, c-format
+msgid "%pB: addend should be zero for plt relocations"
+msgstr "%pB: adaosul trebuie sÄƒ fie zero pentru realocÄƒri plt"
+
+#: elf32-or1k.c:1544
+#, c-format
+msgid "%pB: addend should be zero for got relocations"
+msgstr "%pB: adaosul trebuie sÄƒ fie zero pentru realocÄƒri got"
+
+#: elf32-or1k.c:1561
+#, c-format
+msgid "%pB: gotoff relocation against dynamic symbol %s"
+msgstr "%pB: realocare gotoff faÈ›Äƒ de simbolul dinamic %s"
+
+#: elf32-or1k.c:1575 elf32-or1k.c:1590 elf64-alpha.c:4410 elf64-alpha.c:4554
+#, c-format
+msgid "%pB: pc-relative relocation against dynamic symbol %s"
+msgstr "%pB: realocare relativÄƒ-pc faÈ›Äƒ de simbolul dinamic %s"
+
+#: elf32-or1k.c:1604
+#, c-format
+msgid "%pB: non-pic relocation against symbol %s"
+msgstr "%pB: realocare non-pic faÈ›Äƒ de simbolul %s"
+
+#: elf32-or1k.c:1688
+#, c-format
+msgid "%pB: support for local dynamic not implemented"
+msgstr "%pB: suportul pentru dinamic local nu este implementat"
+
+#: elf32-or1k.c:1867
+#, c-format
+msgid "%pB: will not resolve runtime TLS relocation"
+msgstr "%pB: nu se va rezolva realocarea TLS Ã®n timpul de execuÈ›ie"
+
+#: elf32-or1k.c:2201
+#, c-format
+msgid "%pB: bad relocation section name `%s'"
+msgstr "%pB: nume de secÈ›iune de realocare incorect â€ž%sâ€�"
+
+#: elf32-or1k.c:3315
+#, c-format
+msgid "%pB: %s flag mismatch with previous modules"
+msgstr "%pB: nepotrivire a fanionului %s cu modulele anterioare"
+
+#: elf32-ppc.c:990 elf64-ppc.c:1753
 #, c-format
 msgid "generic linker can't handle %s"
-msgstr "linkerul generic nu poate manipula(handle) %s"
+msgstr "editorul de legÄƒturi generic nu poate manipula %s"
 
-#: elf32-ppc.c:2138
+#: elf32-ppc.c:1628
 #, c-format
-msgid "%s: compiled with -mrelocatable and linked with modules compiled normally"
-msgstr "%s: compilat cu -mrelocatable ºi linkuit cu module compilate normal"
+msgid "corrupt %s section in %pB"
+msgstr "secÈ›iune %s coruptÄƒ Ã®n %pB"
 
-#: elf32-ppc.c:2147
+#: elf32-ppc.c:1647
 #, c-format
-msgid "%s: compiled normally and linked with modules compiled with -mrelocatable"
-msgstr "%s: compilat normal ºi linkuite cu module compilate cu -mrelocatable"
+msgid "unable to read in %s section from %pB"
+msgstr "nu se poate citi Ã®n secÈ›iunea %s din %pB"
 
-#: elf32-ppc.c:3413
+#: elf32-ppc.c:1689
 #, c-format
-msgid "%s: relocation %s cannot be used when making a shared object"
-msgstr "%s: relocarea %s nu poate fi folositã când se creazã un shared object"
+msgid "warning: unable to set size of %s section in %pB"
+msgstr "avertisment: nu se poate stabilii dimensiunea secÈ›iunii %s Ã®n %pB"
+
+#: elf32-ppc.c:1738
+msgid "failed to allocate space for new APUinfo section"
+msgstr "nu s-a putut aloca spaÈ›iu pentru secÈ›iunea nouÄƒ APUinfo"
+
+#: elf32-ppc.c:1757
+msgid "failed to compute new APUinfo section"
+msgstr "nu s-a putut calcula noua secÈ›iune APUinfo"
+
+#: elf32-ppc.c:1760
+msgid "failed to install new APUinfo section"
+msgstr "nu s-a putut instala noua secÈ›iune APUinfo"
 
-#. It does not make sense to have a procedure linkage
-#. table entry for a local symbol.
-#: elf32-ppc.c:3619
+#: elf32-ppc.c:2869
 #, c-format
-msgid "%s(%s+0x%lx): %s reloc against local symbol"
-msgstr "relocare %s(%s+0x%lx): %s pe simbol local"
+msgid "%pB: relocation %s cannot be used when making a shared object"
+msgstr "%pB: realocarea %s nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat"
 
-#: elf32-ppc.c:4862 elf64-ppc.c:7789
+#: elf32-ppc.c:3588 elf32-ppc.c:3596
 #, c-format
-msgid "%s: unknown relocation type %d for symbol %s"
-msgstr "%s: tip de relocare %d necunoscut pentru simbolul %s"
+msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
+msgstr "%pB foloseÈ™te virgulÄƒ mobilÄƒ hardware cu precizie dublÄƒ, %pB foloseÈ™te virgulÄƒ mobilÄƒ hardware cu precizie simplÄƒ"
 
-#: elf32-ppc.c:5113
+#: elf32-ppc.c:3618 elf32-ppc.c:3626
 #, c-format
-msgid "%s(%s+0x%lx): non-zero addend on %s reloc against `%s'"
-msgstr "%s(%s+0x%lx): adãugare non-zero în relocarea %s pentru `%s'"
+msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
+msgstr "%pB foloseÈ™te numere Ã®ntregi lungi cu precizie dublÄƒ de 64 de biÈ›i, %pB foloseÈ™te numere Ã®ntregi lungi cu precizie dublÄƒ de 128 de biÈ›i"
 
-#: elf32-ppc.c:5399 elf32-ppc.c:5425 elf32-ppc.c:5484
+#: elf32-ppc.c:3634 elf32-ppc.c:3642
 #, c-format
-msgid "%s: the target (%s) of a %s relocation is in the wrong output section (%s)"
-msgstr "%s: þinta (%s) unei relocãri %s este într-o secþiune invalidã de output (%s)"
+msgid "%pB uses IBM long double, %pB uses IEEE long double"
+msgstr "%pB utilizeazÄƒ IBM long double, %pB utilizeazÄƒ IEEE long double"
 
-#: elf32-ppc.c:5539
+#: elf32-ppc.c:3709 elf32-ppc.c:3718
 #, c-format
-msgid "%s: relocation %s is not yet supported for symbol %s."
-msgstr "%s: relocarea %s nu este încã suportatã pentru simbolul %s."
+msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
+msgstr "%pB utilizeazÄƒ ABI de vector AltiVec, iar %pB utilizeazÄƒ ABI de vector SPE"
 
-#: elf32-ppc.c:5594 elf64-ppc.c:8461
+#: elf32-ppc.c:3747 elf32-ppc.c:3756
 #, c-format
-msgid "%s(%s+0x%lx): unresolvable %s relocation against symbol `%s'"
-msgstr "%s(%s+0x%lx): relocare nerezolvabilã %s pe simbolul `%s'"
+msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
+msgstr "%pB utilizeazÄƒ r3/r4 pentru returnÄƒri de structuri mici, iar %pB utilizeazÄƒ memoria"
 
-#: elf32-ppc.c:5644 elf64-ppc.c:8507
+#: elf32-ppc.c:3820
 #, c-format
-msgid "%s(%s+0x%lx): %s reloc against `%s': error %d"
-msgstr "%s(%s+0x%lx):relocarea %s pe `%s': eroare %d"
+msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
+msgstr "%pB: compilat cu â€ž-mrelocatableâ€� È™i vinculat cu module compilate normal"
 
-#: elf32-ppc.c:5888
+#: elf32-ppc.c:3828
 #, c-format
-msgid "corrupt or empty %s section in %s"
-msgstr "secþiune %s coruptã sau vidã în %s"
+msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
+msgstr "%pB: compilat normal È™i vinculat cu module compilate cu â€ž-mrelocatableâ€�"
 
-#: elf32-ppc.c:5895
+#: elf32-ppc.c:3899
 #, c-format
-msgid "unable to read in %s section from %s"
-msgstr "nu se poate citi în secþiunea %s din %s"
+msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
+msgstr "%pB(%pA+0x%lx): se aÈ™tepta o realocare de tip 16A la instrucÈ›iunea 0x%08x"
 
-#: elf32-ppc.c:5901
+#: elf32-ppc.c:3918
 #, c-format
-msgid "corrupt %s section in %s"
-msgstr "secþiune coruptã %s în %s"
+msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
+msgstr "%pB(%pA+0x%lx): se aÈ™tepta o realocare de tip 16D la instrucÈ›iunea 0x%08x"
 
-#: elf32-ppc.c:5944
+#: elf32-ppc.c:4028
 #, c-format
-msgid "warning: unable to set size of %s section in %s"
-msgstr "avertisment: nu se poate seta mãrimea secþiunii %s în %s"
+msgid "bss-plt forced due to %pB"
+msgstr "bss-plt forÈ›at din cauza %pB"
 
-#: elf32-ppc.c:5994
-msgid "failed to allocate space for new APUinfo section."
-msgstr "nu s-a putut aloca spaþiu pentru secþiunea nouã APUinfo."
+#: elf32-ppc.c:4030
+msgid "bss-plt forced by profiling"
+msgstr "bss-plt forÈ›at de profilare"
 
-#: elf32-ppc.c:6013
-msgid "failed to compute new APUinfo section."
-msgstr "nu s-a putut calcula(compute) secþiunea nouã APUinfo."
+#: elf32-ppc.c:4608 elf64-ppc.c:8497
+msgid "%H: warning: %s unexpected insn %#x.\n"
+msgstr "%H: avertisment: %s insn neaÈ™teptat %#x.\n"
 
-#: elf32-ppc.c:6016
-msgid "failed to install new APUinfo section."
-msgstr "nu s-a putut instala secþiunea APUinfo nouã."
+#. Uh oh, we didn't find the expected call.  We
+#. could just mark this symbol to exclude it
+#. from tls optimization but it's safer to skip
+#. the entire optimization.
+#: elf32-ppc.c:4638 elf64-ppc.c:8562
+#, c-format
+msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
+msgstr "%H argument a pierdut __tls_get_addr, optimizarea TLS dezactivatÄƒ\n"
+
+#: elf32-ppc.c:5565 elf32-sh.c:3019 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elfxx-tilegx.c:2494
+#, c-format
+msgid "%pB: dynamic relocation in read-only section `%pA'\n"
+msgstr "%pB: realocare dinamicÄƒ Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�\n"
+
+#: elf32-ppc.c:6511
+msgid "%pB: Adjusting branch at 0x%V towards \"%s\" in section %s\n"
+msgstr "%pB: Ajustarea ramurii de la 0x%V cÄƒtre â€ž%sâ€� Ã®n secÈ›iunea %s\n"
+
+#: elf32-ppc.c:7464
+msgid "%P: %H: error: %s with unexpected instruction %x\n"
+msgstr "%P: %H: eroare: %s cu instrucÈ›iunea neaÈ™teptatÄƒ %x\n"
 
-#: elf32-s390.c:2256 elf64-s390.c:2226
+#: elf32-ppc.c:7502
+msgid "%H: fixup branch overflow\n"
+msgstr "%H: remediatÄƒ supraÃ®ncÄƒrcarea ramurii\n"
+
+#: elf32-ppc.c:7542 elf32-ppc.c:7580
 #, c-format
-msgid "%s(%s+0x%lx): invalid instruction for TLS relocation %s"
-msgstr "%s(%s+0x%lx): instrucþiune invalidã pentur relocarea TLS %s"
+msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
+msgstr "%pB(%pA+%#<PRIx64>): eroare: %s cu instrucÈ›iunea neaÈ™teptatÄƒ %#x"
 
-#: elf32-sh.c:2103
+#: elf32-ppc.c:7644
 #, c-format
-msgid "%s: 0x%lx: warning: bad R_SH_USES offset"
-msgstr "%s: 0x%lx: avertisment: offset R_SH_USES invalid"
+msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
+msgstr "%X%H: neacceptat bss-plt -fPIC ifunc %s\n"
 
-#: elf32-sh.c:2115
+#: elf32-ppc.c:7680
 #, c-format
-msgid "%s: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x"
-msgstr "%s: 0x%lx: avertisment: R_SH_USES trimite cãtre insn necunoscut 0x%x"
+msgid "%pB: reloc %#x unsupported"
+msgstr "%pB: realocarea %#x nu este acceptatÄƒ"
 
-#: elf32-sh.c:2132
+#: elf32-ppc.c:7963
 #, c-format
-msgid "%s: 0x%lx: warning: bad R_SH_USES load offset"
-msgstr "%s: 0x%lx: avertisment:offset de încãrcare R_SH_USES invalid"
+msgid "%H: non-zero addend on %s reloc against `%s'\n"
+msgstr "%H: adÄƒugare non-zero Ã®n realocarea %s faÈ›Äƒ de â€ž%sâ€�\n"
 
-#: elf32-sh.c:2147
+#. @local on an ifunc does not really make sense since
+#. the ifunc resolver can take you anywhere.  More
+#. seriously, calls to ifuncs must go through a plt call
+#. stub, and for pic the plt call stubs uses r30 to
+#. access the PLT.  The problem is that a call that is
+#. local won't have the +32k reloc addend trick marking
+#. -fPIC code, so the linker won't know whether r30 is
+#. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
+#: elf32-ppc.c:7995
 #, c-format
-msgid "%s: 0x%lx: warning: could not find expected reloc"
-msgstr "%s: 0x%lx: avertismetn: nu s-a putut gãsi relocarea aºteptatã"
+msgid "%X%H: @local call to ifunc %s\n"
+msgstr "%X%H: apel @local la ifunc %s\n"
 
-#: elf32-sh.c:2175
+#: elf32-ppc.c:8173
 #, c-format
-msgid "%s: 0x%lx: warning: symbol in unexpected section"
-msgstr "%s: 0x%lx: avertisment: simbol în secþiune neaºteptatã"
+msgid "%H: relocation %s for indirect function %s unsupported\n"
+msgstr "%H: realocarea %s pentru funcÈ›ia indirectÄƒ %s nu este acceptatÄƒ\n"
 
-#: elf32-sh.c:2300
+#: elf32-ppc.c:8511 elf32-ppc.c:8542 elf32-ppc.c:8645 elf32-ppc.c:8745
 #, c-format
-msgid "%s: 0x%lx: warning: could not find expected COUNT reloc"
-msgstr "%s: 0x%lx: avertisment: nu s-a putut gãsi relocarea COUNT aºteptatã"
+msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
+msgstr "%pB: È›inta (%s) a unei realocÄƒri %s este Ã®n secÈ›iunea de ieÈ™ire greÈ™itÄƒ (%s)"
+
+#: elf32-ppc.c:8923 elf32-ppc.c:8944
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
+msgstr "%X%P: %H: realocarea %s nu este acceptatÄƒ pentru bss-plt\n"
 
-#: elf32-sh.c:2309
+#: elf32-ppc.c:9026
 #, c-format
-msgid "%s: 0x%lx: warning: bad count"
-msgstr "%s: 0x%lx: avertisment: numãrãtoare(count) invalidã"
+msgid "%H: error: %s against `%s' not a multiple of %u\n"
+msgstr "%H: eroare: %s faÈ›Äƒ de â€ž%sâ€� nu este un multiplu de %u\n"
 
-#: elf32-sh.c:2712 elf32-sh.c:3088
+#: elf32-ppc.c:9055
 #, c-format
-msgid "%s: 0x%lx: fatal: reloc overflow while relaxing"
-msgstr "%s: 0x%lx: fatal: relocare depãºitã(overflow) în timpul relaxãrii"
+msgid "%H: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%H: realocare %s nerezolvabilÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�\n"
+
+#: elf32-ppc.c:9137
+#, c-format
+msgid "%H: %s reloc against `%s': error %d\n"
+msgstr "%H: %s realocarea faÈ›Äƒ de â€ž%sâ€�: eroare %d\n"
+
+#: elf32-ppc.c:10019
+msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
+msgstr "%X%P: realocÄƒrile de text È™i funcÈ›iile indirecte GNU vor avea ca rezultat o eroare de segmentare Ã®n timpul execuÈ›iei\n"
 
-#: elf32-sh.c:4654 elf64-sh64.c:1585
-msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled"
-msgstr "STO_SH5_ISA32 neaºteptat pe simbol local ce nu poate fi manipulat"
+#: elf32-ppc.c:10023 elf64-ppc.c:18302
+msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
+msgstr "%P: avertisment: realocÄƒrile de text È™i funcÈ›iile indirecte GNU pot avea ca rezultat o eroare de segmentare Ã®n timpul execuÈ›iei\n"
 
-#: elf32-sh.c:4809
+#: elf32-ppc.c:10068
 #, c-format
-msgid "%s: unresolvable relocation against symbol `%s' from %s section"
-msgstr "%s: relocare nerezolvabilã pe simbolul '%s' din secþiunea `%s'"
+msgid "%s not defined in linker created %pA"
+msgstr "%s nu este definit Ã®n editorul de legÄƒturi creat %pA"
 
-#: elf32-sh.c:4881
+#: elf32-pru.c:582 elf32-pru.c:1477
 #, c-format
-msgid "%s: 0x%lx: fatal: unaligned branch target for relax-support relocation"
-msgstr "%s: 0x%lx: fatal: ramurã þintã nealiniatã pentru relocare cu suport de relaxare"
+msgid "error: %pB: old incompatible object file detected"
+msgstr "eroare: %pB: a fost detectat un fiÈ™ier obiect vechi incompatibil"
 
-#: elf32-sh.c:6627 elf64-alpha.c:4848
+# R-GC, scrie:
+# am Ã®n vedere o traducere alternativÄƒ, a acestui
+# mesaj:
+# â€ždepÄƒÈ™ire/epuizare a stivei de realocare RL78â€�
+# ***
+# la acest moment, amÃ®ndouÄƒ sunt plauzibile, dar
+# cea prezentÄƒ Ã®n acest comentariu, mi se pare
+# mai puÈ›in plauzibilÄƒ decÃ®t cea adoptatÄƒ:
+# â€ždepÄƒÈ™ire (de jos sau de sus) a stivei de realocare RL78â€�.
+# ====
+# la actualizarea la versiunea â€ž2.40.90â€�,
+# am modificat traducerea la:
+# Â«depÄƒÈ™ire a limitei superioare/inferioare a stivei de realocare RL78Â»
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
+msgstr "depÄƒÈ™ire a limitei superioare/inferioare a stivei de realocare RL78"
+
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr "realocare R78 Ã®mpÄƒrÈ›itÄƒ la zero"
+
+#: elf32-rl78.c:1069
+msgid "warning: RL78_SYM reloc with an unknown symbol"
+msgstr "avertizare: relocare RL78_SYM cu un simbol necunoscut"
+
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr "%H: %s Ã®n afara intervalului\n"
+
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
+msgstr "%H: tipul de realocare %u nu este acceptat\n"
+
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr "%H: realocarea %s returneazÄƒ o valoare nerecunoscutÄƒ %x\n"
+
+#: elf32-rl78.c:1220
 #, c-format
-msgid "%s: TLS local exec code cannot be linked into shared objects"
-msgstr "%s: codul local executabil TLS nu poate fi linkuit în shared objects"
+msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
+msgstr "Conflict ABI RL78: fiÈ™ierul G10 %pB nu poate fi vinculat cu fiÈ™ierul %s %pB"
 
-#: elf32-sh64.c:221 elf64-sh64.c:2407
+#: elf32-rl78.c:1237
 #, c-format
-msgid "%s: compiled as 32-bit object and %s is 64-bit"
-msgstr "%s: compilat ca obiect pe 32-biþi ºi %s este pe 64-biþi"
+msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
+msgstr "Conflict ABI RL78: nu se poate realiza legÄƒtura %s Ã®ntre fiÈ™ierul %pB È™i %s fiÈ™ierul %pB"
+
+#: elf32-rl78.c:1246
+msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
+msgstr "Conflict de fuziune RL78: nu se pot lega Ã®ntre ele obiecte pe 32 È™i 64 de biÈ›i"
 
-#: elf32-sh64.c:224 elf64-sh64.c:2410
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
 #, c-format
-msgid "%s: compiled as 64-bit object and %s is 32-bit"
-msgstr "%s: compilat ca obiect pe 64-biþi ºi %s este pe 32-biþi"
+msgid "- %pB is 64-bit, %pB is not"
+msgstr "- %pB este pe 64 de biÈ›i, iar %pB nu"
 
-#: elf32-sh64.c:226 elf64-sh64.c:2412
+#: elf32-rl78.c:1281
 #, c-format
-msgid "%s: object size does not match that of target %s"
-msgstr "%s: mãrimea obiectului nu se potriveºte cu cea a þintei %s"
+msgid " [64-bit doubles]"
+msgstr " [double pe 64-biÈ›i]"
 
-#: elf32-sh64.c:461 elf64-sh64.c:2990
+#: elf32-rx.c:618
 #, c-format
-msgid "%s: encountered datalabel symbol in input"
-msgstr "%s: s-a întâlnit un simbol etichetãdate(datalabel) în intrare(input)"
+msgid "%pB:%pA: table entry %s outside table"
+msgstr "%pB:%pA: intrare Ã®n tabel %s Ã®n afara tabelului"
 
-#: elf32-sh64.c:544
-msgid "PTB mismatch: a SHmedia address (bit 0 == 1)"
-msgstr "nepotrivire PTB: o adresã SHmedia (bit 0 == 1)"
+#: elf32-rx.c:625
+#, c-format
+msgid "%pB:%pA: table entry %s not word-aligned within table"
+msgstr "%pB:%pA: intrarea %s din tabel nu este aliniatÄƒ cu cuvÃ¢ntul Ã®n cadrul tabelului"
 
-#: elf32-sh64.c:547
-msgid "PTA mismatch: a SHcompact address (bit 0 == 0)"
-msgstr "nepotrivire PTA: o adresã SHcompact (bit 0 == 0)"
+#: elf32-rx.c:700
+#, c-format
+msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
+msgstr "%pB:%pA: avertisment: realocarea Red Hat depreciatÄƒ %s a fost detectatÄƒ asupra lui: %s"
 
-#: elf32-sh64.c:565
+#. Check for unsafe relocs in PID mode.  These are any relocs where
+#. an absolute address is being computed.  There are special cases
+#. for relocs against symbols that are known to be referenced in
+#. crt0.o before the PID base address register has been initialised.
+#: elf32-rx.c:720
 #, c-format
-msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16"
-msgstr "%s: eroare GASr:  PTB insn neaºteptat cu R_SH_PT_16"
+msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
+msgstr "%pB(%pA): realocare nesigurÄƒ a PID-ului %s la %#<PRIx64> ( pentru %s Ã®n %s)"
+
+#: elf32-rx.c:1304
+msgid "warning: RX_SYM reloc with an unknown symbol"
+msgstr "avertizare: realocare RX_SYM cu un simbol necunoscut"
 
-#: elf32-sh64.c:614 elf64-sh64.c:1748
+#: elf32-rx.c:1472
 #, c-format
-msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n"
-msgstr "%s: eroare: tip de reloare nealiniat %d la %08x relocarea %08x\n"
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr "%pB(%pA): eroare: apel la funcÈ›ia nedefinitÄƒ â€ž%sâ€�"
 
-#: elf32-sh64.c:698
+#: elf32-rx.c:3185
 #, c-format
-msgid "%s: could not write out added .cranges entries"
-msgstr "%s: nu am putut scrie intrãrile .cranges adãugate"
+msgid "there is a conflict merging the ELF header flags from %pB"
+msgstr "existÄƒ un conflict la fuzionarea fanioanelor de antet ELF din %pB"
 
-#: elf32-sh64.c:760
+#: elf32-rx.c:3188
 #, c-format
-msgid "%s: could not write out sorted .cranges entries"
-msgstr "%s: nu am putut scrie intrãrile .cranges sortate"
+msgid "  the input  file's flags: %s"
+msgstr "  fanioanele  fiÈ™ierului de intrare: %s"
 
-#: elf32-sparc.c:2521 elf64-sparc.c:2314
+#: elf32-rx.c:3190
 #, c-format
-msgid "%s: probably compiled without -fPIC?"
-msgstr "%s: probabil compilat fãrã -fPIC?"
+msgid "  the output file's flags: %s"
+msgstr "  fanioanele  fiÈ™ierului de ieÈ™ire: %s"
 
-#: elf32-sparc.c:3348
+#: elf32-rx.c:3797
 #, c-format
-msgid "%s: compiled for a 64 bit system and target is 32 bit"
-msgstr "%s: compilat pentru un sistem 64 biþi ºi þinta fiind pe 32 biþi"
+msgid "%pB:%pA: table %s missing corresponding %s"
+msgstr "%pB:%pA: tabelul %s lipseÈ™te %s corespunzÄƒtor"
 
-#: elf32-sparc.c:3362
+#: elf32-rx.c:3805
 #, c-format
-msgid "%s: linking little endian files with big endian files"
-msgstr "%s: linkuire fiºiere little endian files cu fiºiere big endian"
+msgid "%pB:%pA: %s and %s must be in the same input section"
+msgstr "%pB:%pA: %s È™i %s trebuie sÄƒ se afle Ã®n aceeaÈ™i secÈ›iune de intrare"
 
-#: elf32-v850.c:753
+#: elf32-s390.c:2009 elf64-s390.c:1976
 #, c-format
-msgid "Variable `%s' cannot occupy in multiple small data regions"
-msgstr "Variabila `%s' nu poate ocupa regiuni multiple de date mici"
+msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune nevalidÄƒ pentru realocarea TLS %s"
+
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3875
+msgid "not enough GOT space for local GOT entries"
+msgstr "nu existÄƒ destul spaÈ›iu GOT pentru intrÄƒrile GOT locale"
+
+#: elf32-score.c:2747
+msgid "address not word aligned"
+msgstr "adresa nu este aliniatÄƒ cu cuvintele"
 
-#: elf32-v850.c:756
+#: elf32-score.c:2828 elf32-score7.c:2635
 #, c-format
-msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions"
-msgstr "Variabila `%s' nu poate sã fie în una din regiunile mici, zero sau micuþe"
+msgid "%pB: malformed reloc detected for section %pA"
+msgstr "%pB: realocare incorect formatÄƒ detectatÄƒ pentru secÈ›iunea %pA"
 
-#: elf32-v850.c:759
+#: elf32-score.c:2882 elf32-score7.c:2689
 #, c-format
-msgid "Variable `%s' cannot be in both small and zero data regions simultaneously"
-msgstr "Variabila `%s' nu poate fi simultan ºi în regiuni de date mici ºi de date zero"
+msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
+msgstr "%pB: realocarea CALL15 la %#<PRIx64> nu faÈ›Äƒ de simbolul global"
 
-#: elf32-v850.c:762
+#: elf32-score.c:3990 elf32-score7.c:3797
 #, c-format
-msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously"
-msgstr "Variabila `%s' nu poate fi simultan ºi în regiuni de date mici ºi de date micuþe"
+msgid " [pic]"
+msgstr " [pic]"
 
-#: elf32-v850.c:765
+#: elf32-score.c:3994 elf32-score7.c:3801
 #, c-format
-msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously"
-msgstr "Variabila `%s' nu poate fi simultan ºi în regiuni de date zero ºi de date micuþe"
+msgid " [fix dep]"
+msgstr " [remediazÄƒ dependenÈ›ele]"
 
-#: elf32-v850.c:1144
-msgid "FAILED to find previous HI16 reloc\n"
-msgstr "EªUARE în gãsirea relocãrii anterioare HI16\n"
+#: elf32-score.c:4041 elf32-score7.c:3848
+#, c-format
+msgid "%pB: warning: linking PIC files with non-PIC files"
+msgstr "%pB: avertisment: se vinculeazÄƒ fiÈ™ierele PIC cu fiÈ™iere non-PIC"
+
+#: elf32-sh.c:533
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
+msgstr "%pB: %#<PRIx64>: avertisment: R_SH_USES indicÄƒ cÄƒtre insn nerecunoscut 0x%x"
+
+#: elf32-sh.c:3754
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
+msgstr "%pB: %#<PRIx64>: fatal: È›intÄƒ de ramurÄƒ nealiniatÄƒ pentru realocarea suportului-relax"
+
+#: elf32-sh.c:3784 elf32-sh.c:3800
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
+msgstr "%pB: %#<PRIx64>: fatal: realocare %s nealiniatÄƒ %#<PRIx64>"
+
+#: elf32-sh.c:3816
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocation %<PRId64> not in range -32..32"
+msgstr "%pB: %#<PRIx64>: fatal: realocarea R_SH_PSHA %<PRId64> nu se aflÄƒ Ã®n intervalul -32..32"
+
+#: elf32-sh.c:3832
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocation %<PRId64> not in range -32..32"
+msgstr "%pB: %#<PRIx64>: fatal: realocarea R_SH_PSHL %<PRId64> nu se aflÄƒ Ã®n intervalul -32..32"
+
+#: elf32-sh.c:3962 elf32-sh.c:4357
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot emit fixup to `%s' in read-only section"
+msgstr "%pB(%pA+%#<PRIx64>): nu poate emite remediere la â€ž%sâ€� Ã®n secÈ›iunea numai-pentru-citire"
+
+#: elf32-sh.c:4460
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
+msgstr "%pB(%pA+%#<PRIx64>): realocare %s faÈ›Äƒ de simbolul extern â€ž%sâ€�"
+
+#: elf32-sh.c:4579
+#, c-format
+msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): decalajul Ã®n realocarea pentru conversia GD->LE este prea mic: %#<PRIx64>"
+
+#. The backslash is to prevent bogus trigraph detection.
+#: elf32-sh.c:4597
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0xd4??)"
+
+#: elf32-sh.c:4605
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0xc7??)"
+
+#: elf32-sh.c:4612
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0xd1??)"
+
+#: elf32-sh.c:4619
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x310c)"
+
+#: elf32-sh.c:4626
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x410b)"
+
+#: elf32-sh.c:4633
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x34cc)"
+
+#: elf32-sh.c:4668
+#, c-format
+msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): decalajul Ã®n realocarea pentru conversia IE->LE este prea mic: %#<PRIx64>"
+
+#: elf32-sh.c:4686
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0xd0??: mov.l)"
+
+#: elf32-sh.c:4695
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x0?12: stc)"
 
-#: elf32-v850.c:1789
+#: elf32-sh.c:4702
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
+msgstr "%pB(%pA+%#<PRIx64>): instrucÈ›iune neaÈ™teptatÄƒ %#04X (aÈ™teptatÄƒ 0x0?ce: mov.l)"
+
+#: elf32-sh.c:4817
+#, c-format
+msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): decalajul Ã®n realocarea pentru conversia GD->IE este prea mic: %#<PRIx64>"
+
+#: elf32-sh.c:4885
+#, c-format
+msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): decalajul Ã®n realocarea pentru conversia LD->LE este prea mic: %#<PRIx64>"
+
+#: elf32-sh.c:5013
+#, c-format
+msgid "%X%H: relocation to \"%s\" references a different segment\n"
+msgstr "%X%H: realocarea din â€ž%sâ€� face referire la un segment diferit\n"
+
+#: elf32-sh.c:5020
+#, c-format
+msgid "%H: warning: relocation to \"%s\" references a different segment\n"
+msgstr "%H: avertisment: realocarea din â€ž%sâ€� face referire la un segment diferit\n"
+
+#: elf32-sh.c:5488 elf32-sh.c:5570
+#, c-format
+msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
+msgstr "%pB: â€ž%sâ€� accesat atÃ¢t ca simbol normal, cÃ¢t È™i ca simbol FDPIC"
+
+#: elf32-sh.c:5494 elf32-sh.c:5575
+#, c-format
+msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
+msgstr "%pB: â€ž%sâ€� a fost accesat atÃ¢t ca simbol FDPIC, cÃ¢t È™i ca simbol local al firului de execuÈ›ie"
+
+#: elf32-sh.c:5525
+#, c-format
+msgid "%pB: Function descriptor relocation with non-zero addend"
+msgstr "%pB: Realocarea descriptorului de funcÈ›ie cu adaos non-zero"
+
+#: elf32-sh.c:5732 elf64-alpha.c:4646
+#, c-format
+msgid "%pB: TLS local exec code cannot be linked into shared objects"
+msgstr "%pB: Codul executabil local TLS nu poate fi vinculat Ã®n obiecte partajate"
+
+#: elf32-sh.c:5847
+#, c-format
+msgid "%pB: uses %s instructions while previous modules use %s instructions"
+msgstr "%pB: utilizeazÄƒ %s instrucÈ›iuni Ã®n timp ce modulele anterioare utilizeazÄƒ %s instrucÈ›iuni"
+
+#: elf32-sh.c:5859
+#, c-format
+msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture"
+msgstr "eroare internÄƒ: Ã®mbinarea arhitecturii â€ž%sâ€� cu arhitectura â€ž%sâ€� a produs o arhitecturÄƒ necunoscutÄƒ"
+
+#: elf32-sh.c:5900
+#, c-format
+msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
+msgstr "%pB: utilizeazÄƒ instrucÈ›iuni care sunt incompatibile cu instrucÈ›iunile utilizate Ã®n modulele anterioare"
+
+#: elf32-sh.c:5913
+#, c-format
+msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
+msgstr "%pB: Ã®ncercare de a amesteca obiecte FDPIC È™i non-FDPIC"
+
+#: elf32-sparc.c:89
+#, c-format
+msgid "%pB: compiled for a 64 bit system and target is 32 bit"
+msgstr "%pB: compilat pentru un sistem pe 64 de biÈ›i È™i È›inta este pe 32 de biÈ›i"
+
+#: elf32-sparc.c:102
+#, c-format
+msgid "%pB: linking little endian files with big endian files"
+msgstr "%pB: se vinculeazÄƒ fiÈ™iere little-endian cu fiÈ™iere big-endian"
+
+#: elf32-sparc.c:157
+#, c-format
+msgid "%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr "%pB: valoarea maÈ™inii sparc negestionatÄƒ â€ž%luâ€� a fost detectatÄƒ Ã®n timpul procesÄƒrii de scriere"
+
+#: elf32-spu.c:737
+msgid "%X%P: overlay section %pA does not start on a cache line\n"
+msgstr "%X%P: secÈ›iunea de suprapunere %pA nu Ã®ncepe pe o linie de prestocare(cache)\n"
+
+#: elf32-spu.c:745
+msgid "%X%P: overlay section %pA is larger than a cache line\n"
+msgstr "%X%P: secÈ›iunea de suprapunere %pA este mai mare decÃ¢t o linie de prestocare(cache)\n"
+
+#: elf32-spu.c:765
+msgid "%X%P: overlay section %pA is not in cache area\n"
+msgstr "%X%P: secÈ›iunea de suprapunere %pA nu se aflÄƒ Ã®n zona de prestocare\n"
+
+#: elf32-spu.c:806
+#, c-format
+msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n"
+msgstr "%X%P: secÈ›iunile de suprapunere %pA È™i %pA nu Ã®ncep la aceeaÈ™i adresÄƒ\n"
+
+#: elf32-spu.c:1032
+#, c-format
+msgid "warning: call to non-function symbol %s defined in %pB"
+msgstr "avertisment: apel la simbolul non-funcÈ›ional %s definit Ã®n %pB"
+
+#: elf32-spu.c:1382
+#, c-format
+msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
+msgstr "%pA:0x%v .brinfo lrlive (%u) este diferit de ceea ce a fost determinat prin analizare (%u)\n"
+
+#: elf32-spu.c:1912
+#, c-format
+msgid "%pB is not allowed to define %s"
+msgstr "%pB nu este autorizat sÄƒ defineascÄƒ %s"
+
+#: elf32-spu.c:1920
+#, c-format
+msgid "you are not allowed to define %s in a script"
+msgstr "nu aveÈ›i voie sÄƒ definiÈ›i %s Ã®ntr-un script"
+
+#: elf32-spu.c:1954
+#, c-format
+msgid "%s in overlay section"
+msgstr "%s Ã®n secÈ›iunea de suprapunere"
+
+#: elf32-spu.c:1983
+msgid "overlay stub relocation overflow"
+msgstr "depÄƒÈ™ire a realocÄƒrii ciotului(stub) de suprapunere"
+
+#: elf32-spu.c:1992 elf64-ppc.c:15341
+msgid "stubs don't match calculated size"
+msgstr "cioturile(stubs) sunt Ã®n neconcordanÈ›Äƒ cu mÄƒrimea calculatÄƒ"
+
+#: elf32-spu.c:2575
+#, c-format
+msgid "warning: %s overlaps %s\n"
+msgstr "avertisment: %s se suprapune pe %s\n"
+
+#: elf32-spu.c:2591
+#, c-format
+msgid "warning: %s exceeds section size\n"
+msgstr "avertisment: %s depÄƒÈ™eÈ™te dimensiunea secÈ›iunii\n"
+
+#: elf32-spu.c:2623
+#, c-format
+msgid "%pA:0x%v not found in function table\n"
+msgstr "%pA:0x%v nu a fost gÄƒsitÄƒ Ã®n tabelul de funcÈ›ii\n"
+
+#: elf32-spu.c:2764
+#, c-format
+msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n"
+msgstr "%pB(%pA+0x%v): apel la secÈ›iunea non-cod %pB(%pA), analizÄƒ incompletÄƒ\n"
+
+#: elf32-spu.c:3330
+#, c-format
+msgid "stack analysis will ignore the call from %s to %s\n"
+msgstr "analiza stivei va ignora apelul de la %s la %s\n"
+
+#: elf32-spu.c:4027
+msgid "  calls:\n"
+msgstr "  apelÄƒri:\n"
+
+#: elf32-spu.c:4342
+#, c-format
+msgid "%s duplicated in %s\n"
+msgstr "%s duplicat Ã®n %s\n"
+
+#: elf32-spu.c:4346
+#, c-format
+msgid "%s duplicated\n"
+msgstr "%s duplicat\n"
+
+#: elf32-spu.c:4353
+msgid "sorry, no support for duplicate object files in auto-overlay script\n"
+msgstr "scuze, nu existÄƒ suport pentru fiÈ™ierele obiect duplicate Ã®n scriptul de suprapunere automatÄƒ\n"
+
+#: elf32-spu.c:4395
+#, c-format
+msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n"
+msgstr "dimensiunea fÄƒrÄƒ suprapunere de 0x%v plus dimensiunea maximÄƒ a suprapunerii de 0x%v depÄƒÈ™eÈ™te spaÈ›iul de stocare local\n"
+
+#: elf32-spu.c:4551
+#, c-format
+msgid "%pB:%pA%s exceeds overlay size\n"
+msgstr "%pB:%pA%s depÄƒÈ™eÈ™te dimensiunea suprapunerii\n"
+
+#: elf32-spu.c:4692
+msgid "%F%P: auto overlay error: %E\n"
+msgstr "%F%P: eroare de suprapunere automatÄƒ: %E\n"
+
+#: elf32-spu.c:4713
+msgid "Stack size for call graph root nodes.\n"
+msgstr "Dimensiunea stivei pentru nodurile rÄƒdÄƒcinÄƒ ale graficului de apeluri.\n"
+
+#: elf32-spu.c:4714
+msgid ""
+"\n"
+"Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
+msgstr ""
+"\n"
+"Dimensiunea stivei pentru funcÈ›ii.  AdnotÄƒri: â€ž*â€� stivÄƒ maximÄƒ, â€žtâ€� apel la coadÄƒ(tail)\n"
+
+#: elf32-spu.c:4724
+msgid "Maximum stack required is 0x%v\n"
+msgstr "Stiva maximÄƒ necesarÄƒ este 0x%v\n"
+
+#: elf32-spu.c:4743
+msgid "%X%P: stack/lrlive analysis error: %E\n"
+msgstr "%X%P: eroare de analizÄƒ a stivei/lrlive: %E\n"
+
+#: elf32-spu.c:4746
+msgid "%F%P: can not build overlay stubs: %E\n"
+msgstr "%F%P: nu se pot construi cioturi(stubs) de suprapunere: %E\n"
+
+#: elf32-spu.c:4815
+msgid "fatal error while creating .fixup"
+msgstr "eroare fatalÄƒ la crearea .fixup"
+
+#: elf32-spu.c:5051
+#, c-format
+msgid "%pB(%s+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
+msgstr "%pB(%s+%#<PRIx64>): realocare %s nerezolvabilÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�"
+
+#: elf32-tic6x.c:1588
+msgid "warning: generating a shared library containing non-PIC code"
+msgstr "avertisment: se genereazÄƒ o bibliotecÄƒ partajatÄƒ care conÈ›ine cod non-PIC"
+
+#: elf32-tic6x.c:1593
+msgid "warning: generating a shared library containing non-PID code"
+msgstr "avertisment: se genereazÄƒ o bibliotecÄƒ partajatÄƒ care conÈ›ine cod non-PID"
+
+#: elf32-tic6x.c:2434
+#, c-format
+msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
+msgstr "%pB: realocare relativÄƒ SB, dar __c6xabi_DSBT_BASE nu este definit"
+
+# R-GC, scrie:
+# traducere alternativÄƒ:
+# â€ž%pB: eroare: atributul %d obligatoriu al obiectului EABI nu este cunoscutâ€�
+#: elf32-tic6x.c:3498
+#, c-format
+msgid "%pB: error: unknown mandatory EABI object attribute %d"
+msgstr "%pB: eroare: atribut de obiect EABI obligatoriu necunoscut %d"
+
+#: elf32-tic6x.c:3507
+#, c-format
+msgid "%pB: warning: unknown EABI object attribute %d"
+msgstr "%pB: avertisment: atribut de obiect EABI necunoscut %d"
+
+#: elf32-tic6x.c:3625 elf32-tic6x.c:3634
+#, c-format
+msgid "error: %pB requires more stack alignment than %pB preserves"
+msgstr "eroare: %pB necesitÄƒ o aliniere a stivei mai mare decÃ¢t cea pÄƒstratÄƒ de %pB"
+
+#: elf32-tic6x.c:3644 elf32-tic6x.c:3653
+#, c-format
+msgid "error: unknown Tag_ABI_array_object_alignment value in %pB"
+msgstr "eroare: valoare Tag_ABI_array_object_alignment necunoscutÄƒ Ã®n %pB"
+
+#: elf32-tic6x.c:3662 elf32-tic6x.c:3671
+#, c-format
+msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB"
+msgstr "eroare: valoare Tag_ABI_array_object_align_expected necunoscutÄƒ Ã®n %pB"
+
+#: elf32-tic6x.c:3680 elf32-tic6x.c:3688
+#, c-format
+msgid "error: %pB requires more array alignment than %pB preserves"
+msgstr "eroare: %pB necesitÄƒ o aliniere a matricei mai mare decÃ¢t cea pÄƒstratÄƒ de %pB"
+
+#: elf32-tic6x.c:3711
+#, c-format
+msgid "warning: %pB and %pB differ in wchar_t size"
+msgstr "avertisment: %pB È™i %pB diferÄƒ Ã®n dimensiunea wchar_t"
+
+#: elf32-tic6x.c:3730
+#, c-format
+msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
+msgstr "avertisment: %pB È™i %pB diferÄƒ dacÄƒ codul este compilat pentru DSBT"
+
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2729
+#: elfnn-aarch64.c:10030 elfnn-kvx.c:4636 elfnn-loongarch.c:5032
+#: elfnn-riscv.c:3481
+#, c-format
+msgid "discarded output section: `%pA'"
+msgstr "secÈ›iune de ieÈ™ire Ã®nlÄƒturatÄƒ: â€ž%pAâ€�"
+
+#: elf32-v850.c:152
+#, c-format
+msgid "variable `%s' cannot occupy in multiple small data regions"
+msgstr "variabila â€ž%sâ€� nu poate ocupa regiuni multiple de date mici"
+
+#: elf32-v850.c:155
+#, c-format
+msgid "variable `%s' can only be in one of the small, zero, and tiny data regions"
+msgstr "variabila â€ž%sâ€� poate fi doar Ã®ntr-una dintre regiunile de date mici, zero È™i minuscule"
+
+#: elf32-v850.c:158
+#, c-format
+msgid "variable `%s' cannot be in both small and zero data regions simultaneously"
+msgstr "variabila â€ž%sâ€� nu poate fi simultan È™i Ã®n regiunea de date mici È™i Ã®n cea de date zero"
+
+#: elf32-v850.c:161
+#, c-format
+msgid "variable `%s' cannot be in both small and tiny data regions simultaneously"
+msgstr "variabila â€ž%sâ€� nu poate fi simultan È™i Ã®n regiunea de date mici È™i Ã®n cea de date minuscule"
+
+#: elf32-v850.c:164
+#, c-format
+msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously"
+msgstr "variabila â€ž%sâ€� nu poate fi simultan È™i Ã®n regiunea de date zero È™i Ã®n cea de date minuscule"
+
+#: elf32-v850.c:466
+msgid "failed to find previous HI16 reloc"
+msgstr "nu s-a putut gÄƒsi realocarea anterioarÄƒ HI16"
+
+#: elf32-v850.c:2306
 msgid "could not locate special linker symbol __gp"
-msgstr "nu am putut localiza simbolul special de linker __gp"
+msgstr "nu s-a putut localiza simbolul special de editare de legÄƒturi __gp"
 
-#: elf32-v850.c:1793
+#: elf32-v850.c:2310
 msgid "could not locate special linker symbol __ep"
-msgstr "nu am putut localiza simbolul special de linker __ep"
+msgstr "nu s-a putut localiza simbolul special de editare de legÄƒturi __ep"
 
-#: elf32-v850.c:1797
+#: elf32-v850.c:2314
 msgid "could not locate special linker symbol __ctbp"
-msgstr "nu am putut localiza simbolul special de linker __ctbp"
+msgstr "nu s-a putut localiza simbolul special de editare de legÄƒturi __ctbp"
+
+#: elf32-v850.c:2535
+#, c-format
+msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"
+msgstr "eroare: %pB necesitÄƒ aliniere pe 8 octeÈ›i, dar %pB este configurat pentru aliniere pe 4 octeÈ›i"
 
-#: elf32-v850.c:1963
+#: elf32-v850.c:2551
 #, c-format
-msgid "%s: Architecture mismatch with previous modules"
-msgstr "%s: Arhitectura nu se potriveºte cu modulele anterioare"
+msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles"
+msgstr "eroare: %pB utilizeazÄƒ numere reale de precizie dublÄƒ pe 64 de biÈ›i, dar %pB utilizeazÄƒ numere reale de precizie dublÄƒ pe 32 de biÈ›i"
 
-#: elf32-v850.c:1983
+#: elf32-v850.c:2566
+#, c-format
+msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
+msgstr "eroare: %pB utilizeazÄƒ FPU-3.0, dar %pB suportÄƒ doar FPU-2.0"
+
+#: elf32-v850.c:2598
+#, c-format
+msgid " alignment of 8-byte entities: "
+msgstr " alinierea entitÄƒÈ›ilor de 8 octeÈ›i: "
+
+#: elf32-v850.c:2601
+#, c-format
+msgid "4-byte"
+msgstr "4-octeÈ›i"
+
+#: elf32-v850.c:2602
+#, c-format
+msgid "8-byte"
+msgstr "8-octeÈ›i"
+
+#: elf32-v850.c:2603 elf32-v850.c:2615
+#, c-format
+msgid "not set"
+msgstr "nu este definit"
+
+#: elf32-v850.c:2604 elf32-v850.c:2616 elf32-v850.c:2628 elf32-v850.c:2639
+#: elf32-v850.c:2650 elf32-v850.c:2661
+#, c-format
+msgid "unknown: %x"
+msgstr "necunoscut: %x"
+
+#: elf32-v850.c:2610
+#, c-format
+msgid " size of doubles: "
+msgstr " dimensiunea de doubles: "
+
+#: elf32-v850.c:2613
+#, c-format
+msgid "4-bytes"
+msgstr "4-octeÈ›i"
+
+#: elf32-v850.c:2614
+#, c-format
+msgid "8-bytes"
+msgstr "8-octeÈ›i"
+
+#: elf32-v850.c:2622
+#, c-format
+msgid " FPU support required: "
+msgstr " Suport FPU necesar: "
+
+#: elf32-v850.c:2625
+#, c-format
+msgid "FPU-2.0"
+msgstr "FPU-2.0"
+
+#: elf32-v850.c:2626
+#, c-format
+msgid "FPU-3.0"
+msgstr "FPU-3.0"
+
+#: elf32-v850.c:2627
+#, c-format
+msgid "none"
+msgstr "niciunul"
+
+#: elf32-v850.c:2634
+#, c-format
+msgid "SIMD use: "
+msgstr "Utilizare SIMD: "
+
+#: elf32-v850.c:2637 elf32-v850.c:2648 elf32-v850.c:2659
+#, c-format
+msgid "yes"
+msgstr "da"
+
+#: elf32-v850.c:2638 elf32-v850.c:2649 elf32-v850.c:2660
+#, c-format
+msgid "no"
+msgstr "nu"
+
+#: elf32-v850.c:2645
+#, c-format
+msgid "CACHE use: "
+msgstr "Utilizare â€žCACHEâ€�: "
+
+#: elf32-v850.c:2656
+#, c-format
+msgid "MMU use: "
+msgstr "Utilizare MMU: "
+
+#: elf32-v850.c:2823 elf32-v850.c:2879
+#, c-format
+msgid "%pB: architecture mismatch with previous modules"
+msgstr "%pB: arhitectura nu se potriveÈ™te cu modulele anterioare"
+
+#. xgettext:c-format.
+#: elf32-v850.c:2897
 #, c-format
 msgid "private flags = %lx: "
-msgstr "marcaje(flags) private=- %lx: "
+msgstr "fanioane private = %lx: "
+
+#: elf32-v850.c:2902
+#, c-format
+msgid "unknown v850 architecture"
+msgstr "arhitecturÄƒ v850 necunoscutÄƒ"
 
-#: elf32-v850.c:1988
+#: elf32-v850.c:2904
+#, c-format
+msgid "v850 E3 architecture"
+msgstr "arhitecturÄƒ v850 E3"
+
+#: elf32-v850.c:2906 elf32-v850.c:2913
+#, c-format
 msgid "v850 architecture"
-msgstr "arhitecturã v850"
+msgstr "arhitecturÄƒ v850"
 
-#: elf32-v850.c:1989
+#: elf32-v850.c:2914
+#, c-format
 msgid "v850e architecture"
-msgstr "arhitecturã v850e"
+msgstr "arhitecturÄƒ v850e"
 
-#: elf32-vax.c:549
+#: elf32-v850.c:2915
+#, c-format
+msgid "v850e1 architecture"
+msgstr "arhitecturÄƒ v850e1"
+
+#: elf32-v850.c:2916
+#, c-format
+msgid "v850e2 architecture"
+msgstr "arhitecturÄƒ v850e2"
+
+#: elf32-v850.c:2917
+#, c-format
+msgid "v850e2v3 architecture"
+msgstr "arhitecturÄƒ v850e2v3"
+
+#: elf32-v850.c:2918
+#, c-format
+msgid "v850e3v5 architecture"
+msgstr "arhitecturÄƒ v850e3v5"
+
+#: elf32-v850.c:3592 elf32-v850.c:3831
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
+msgstr "%pB: %#<PRIx64>: avertisment: %s indicÄƒ cÄƒtre insns nerecunoscut"
+
+#: elf32-v850.c:3602 elf32-v850.c:3841
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
+msgstr "%pB: %#<PRIx64>: avertisment: %s indicÄƒ cÄƒtre insn nerecunoscut %#x"
+
+#: elf32-v850.c:3648 elf32-v850.c:3876
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
+msgstr "%pB: %#<PRIx64>: avertisment: %s indicÄƒ cÄƒtre realocare nerecunoscutÄƒ"
+
+#: elf32-v850.c:3688
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
+msgstr "%pB: %#<PRIx64>: avertisment: %s indicÄƒ cÄƒtre realocare nerecunoscutÄƒ %#<PRIx64>"
+
+#: elf32-vax.c:539
+#, c-format
 msgid " [nonpic]"
 msgstr " [nonpic]"
 
-#: elf32-vax.c:552
+#: elf32-vax.c:542
+#, c-format
 msgid " [d-float]"
 msgstr " [d-float]"
 
-#: elf32-vax.c:555
+#: elf32-vax.c:545
+#, c-format
 msgid " [g-float]"
 msgstr " [g-float]"
 
-#: elf32-vax.c:663
+#: elf32-vax.c:631
 #, c-format
-msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld"
-msgstr "%s: avertisment: adãugarea GOT a %ld în `%s' nu se potriveºte adãugãrii GOT anterioare a %ld"
+msgid "%pB: warning: GOT addend of %<PRId64> to `%s' does not match previous GOT addend of %<PRId64>"
+msgstr "%pB: avertisment: adÄƒugarea GOT de %<PRId64> la â€ž%sâ€� nu se potriveÈ™te cu adÄƒugarea GOT anterioarÄƒ de %<PRId64>"
 
-#: elf32-vax.c:1667
+#: elf32-vax.c:1388
 #, c-format
-msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored"
-msgstr "%s: avertisment: adãugarea PLT a %d în `%s' din secþiunea %s ignoratã"
+msgid "%pB: warning: PLT addend of %<PRId64> to `%s' from %pA section ignored"
+msgstr "%pB: avertisment: adÄƒugarea PLT de %<PRId64> la â€ž%sâ€� din secÈ›iunea %pA a fost ignoratÄƒ"
 
-#: elf32-vax.c:1802
+#: elf32-vax.c:1514
 #, c-format
-msgid "%s: warning: %s relocation against symbol `%s' from %s section"
-msgstr "%s: avertisment: relocare %s pentru simbolul `%s' din secþiunea %s"
+msgid "%pB: warning: %s relocation against symbol `%s' from %pA section"
+msgstr "%pB: avertisment: realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€� din secÈ›iunea %pA"
 
-#: elf32-vax.c:1808
+#: elf32-vax.c:1521
 #, c-format
-msgid "%s: warning: %s relocation to 0x%x from %s section"
-msgstr "%s: avertisment: relocare %s spre 0x%x din secþiunea %s"
+msgid "%pB: warning: %s relocation to %#<PRIx64> from %pA section"
+msgstr "%pB: avertisment: realocarea %s Ã®n %#<PRIx64> din secÈ›iunea %pA"
 
-#: elf32-xstormy16.c:462 elf32-ia64.c:2450 elf64-ia64.c:2450
+#: elf32-visium.c:824
+#, c-format
+msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
+msgstr "%pB: compilat %s -mtune=%s È™i vinculat cu modulele compilate %s -mtune=%s"
+
+#: elf32-xgate.c:506
+#, c-format
+msgid "cpu=XGATE]"
+msgstr "cpu=XGATE]"
+
+#: elf32-xgate.c:508
+#, c-format
+msgid "error reading cpu type from elf private data"
+msgstr "eroare la citirea tipului de procesor din datele private elf"
+
+#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2077 elfnn-ia64.c:2346
 msgid "non-zero addend in @fptr reloc"
-msgstr "adãugare non-zero în relocare @fptr"
+msgstr "adÄƒugare non-zero Ã®n realocare @fptr"
+
+#: elf32-xtensa.c:998
+#, c-format
+msgid "%pB(%pA): invalid property table"
+msgstr "%pB(%pA): tabel de proprietÄƒÈ›i nevalid"
+
+#: elf32-xtensa.c:2733
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
+msgstr "%pB(%pA+%#<PRIx64>): decalaj de realocare Ã®n afara intervalului (dimensiune=%#<PRIx64>)"
+
+#: elf32-xtensa.c:2816 elf32-xtensa.c:2939
+msgid "dynamic relocation in read-only section"
+msgstr "realocare dinamicÄƒ Ã®n secÈ›iunea numai-pentru-citire"
+
+#: elf32-xtensa.c:2916
+msgid "TLS relocation invalid without dynamic sections"
+msgstr "realocarea TLS nu este validÄƒ fÄƒrÄƒ secÈ›iuni dinamice"
+
+#: elf32-xtensa.c:3129
+msgid "internal inconsistency in size of .got.loc section"
+msgstr "inconsistenÈ›Äƒ internÄƒ Ã®n dimensiunea secÈ›iunii .got.loc"
+
+#: elf32-xtensa.c:3435
+#, c-format
+msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
+msgstr "%pB: tip de maÈ™inÄƒ incompatibil; ieÈ™irea este 0x%x; intrarea este 0x%x"
+
+#: elf32-xtensa.c:4734 elf32-xtensa.c:4742
+msgid "attempt to convert L32R/CALLX to CALL failed"
+msgstr "Ã®ncercarea de a converti L32R/CALLX Ã®n CALL a eÈ™uat"
+
+#: elf32-xtensa.c:6574 elf32-xtensa.c:6653 elf32-xtensa.c:8079
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
+msgstr "%pB(%pA+%#<PRIx64>): nu a putut decodifica instrucÈ›iunea; posibilÄƒ neconcordanÈ›Äƒ de configurare"
+
+#: elf32-xtensa.c:7820
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
+msgstr "%pB(%pA+%#<PRIx64>): nu s-a putut decodifica instrucÈ›iunea pentru realocarea XTENSA_ASM_SIMPLIFY; posibilÄƒ neconcordanÈ›Äƒ de configurare"
+
+#: elf32-xtensa.c:9678
+msgid "invalid relocation address"
+msgstr "adresÄƒ de realocare nevalidÄƒ"
+
+#: elf32-xtensa.c:9769
+msgid "overflow after relaxation"
+msgstr "debordare dupÄƒ relaxare"
+
+#: elf32-xtensa.c:10915
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
+msgstr "%pB(%pA+%#<PRIx64>): remediere neaÈ™teptatÄƒ pentru realocarea %s"
+
+#: elf32-z80.c:473
+#, c-format
+msgid "%pB: unsupported bfd mach %#lx"
+msgstr "%pB: mach bfd neacceptat %#lx"
 
-#: elf64-alpha.c:1108
+#: elf32-z80.c:518
+#, c-format
+msgid "%pB: unsupported mach %#x"
+msgstr "%pB: mach neacceptat %#x"
+
+#: elf32-z80.c:546
+#, c-format
+msgid "%pB: unsupported arch %#x"
+msgstr "%pB: arhitecturÄƒ neacceptatÄƒ %#x"
+
+#: elf64-alpha.c:474
 msgid "GPDISP relocation did not find ldah and lda instructions"
-msgstr "relocarea GPDISP nu a gãsit instrucþiuni ldah ºi lda"
+msgstr "relocarea GPDISP nu a gÄƒsit instrucÈ›iuni ldah È™i lda"
+
+#: elf64-alpha.c:1985
+#, c-format
+msgid "%pB: dynamic relocation against a local symbol in read-only section `%pA'\n"
+msgstr "%pB: realocare dinamicÄƒ faÈ›Äƒ de un simbol local Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�\n"
+
+#: elf64-alpha.c:2437
+#, c-format
+msgid "%pB: .got subsegment exceeds 64K (size %d)"
+msgstr "%pB: subsegmentul .got depÄƒÈ™eÈ™te 64K (dimensiunea %d)"
 
-#: elf64-alpha.c:3731
+#: elf64-alpha.c:2680 elflink.c:15481 elfnn-kvx.c:4022 elfnn-loongarch.c:1715
 #, c-format
-msgid "%s: .got subsegment exceeds 64K (size %d)"
-msgstr "%s: .subsegmentul got depãseºte 64K (size %d)"
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%pB: realocare dinamicÄƒ faÈ›Äƒ de â€ž%pTâ€� Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�\n"
 
-#: elf64-alpha.c:4602 elf64-alpha.c:4614
+#: elf64-alpha.c:2975 elf64-alpha.c:3170
 #, c-format
-msgid "%s: gp-relative relocation against dynamic symbol %s"
-msgstr "%s: relocare relativã-gp pentru simbolul %s"
+msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
+msgstr "%pB: %pA+%#<PRIx64>: avertisment: realocare %s faÈ›Äƒ de insn neaÈ™teptatÄƒ"
 
-#: elf64-alpha.c:4640 elf64-alpha.c:4773
+#: elf64-alpha.c:4370 elf64-alpha.c:4383
 #, c-format
-msgid "%s: pc-relative relocation against dynamic symbol %s"
-msgstr "%s: relocare relativã pc pentru simbolul dinamic %s"
+msgid "%pB: gp-relative relocation against dynamic symbol %s"
+msgstr "%pB: realocare relativÄƒ-gp faÈ›Äƒ de simbolul dinamic %s"
 
-#: elf64-alpha.c:4668
+#: elf64-alpha.c:4439
 #, c-format
-msgid "%s: change in gp: BRSGP %s"
-msgstr "%s: schimbare în gp: BRSGP %s"
+msgid "%pB: change in gp: BRSGP %s"
+msgstr "%pB: schimbare Ã®n gp: BRSGP %s"
 
-#: elf64-alpha.c:4693
+#: elf64-alpha.c:4464 mach-o.c:625 elfnn-riscv.c:722 elfnn-riscv.c:921
+#: elfnn-riscv.c:963
 msgid "<unknown>"
 msgstr "<necunoscut>"
 
-#: elf64-alpha.c:4698
+#: elf64-alpha.c:4470
 #, c-format
-msgid "%s: !samegp reloc against symbol without .prologue: %s"
-msgstr "%s: !samegp reloc apentru simbol fãrã .prologue: %s"
+msgid "%pB: !samegp reloc against symbol without .prologue: %s"
+msgstr "%pB: realocare !samegp cÄƒtre simbol fÄƒrÄƒ .prolog: %s"
 
-#: elf64-alpha.c:4749
+#: elf64-alpha.c:4528
 #, c-format
-msgid "%s: unhandled dynamic relocation against %s"
-msgstr "%s: relocare dinamicã nemanipulabilã pentru %s"
+msgid "%pB: unhandled dynamic relocation against %s"
+msgstr "%pB: realocare dinamicÄƒ negestionatÄƒ faÈ›Äƒ de %s"
 
-#: elf64-alpha.c:4832
+#: elf64-alpha.c:4563
 #, c-format
-msgid "%s: dtp-relative relocation against dynamic symbol %s"
-msgstr "%s: relocare relativã-dtp pentru simbolul dinamic %s"
+msgid "%pB: pc-relative relocation against undefined weak symbol %s"
+msgstr "%pB: realocare relativÄƒ la pc faÈ™Äƒ de simbolul slab nedefinit %s"
 
-#: elf64-alpha.c:4855
+#: elf64-alpha.c:4629
 #, c-format
-msgid "%s: tp-relative relocation against dynamic symbol %s"
-msgstr "%s: relocare relativã-tp pentru simbolul dinamic %s"
+msgid "%pB: dtp-relative relocation against dynamic symbol %s"
+msgstr "%pB: realocare relativÄƒ-dtp faÈ›Äƒ de simbolul dinamic %s"
 
-#: elf64-hppa.c:2086
+#: elf64-alpha.c:4654
 #, c-format
-msgid "stub entry for %s cannot load .plt, dp offset = %ld"
-msgstr "intrarea trunchiatã pentru %s nu poate încãrca .plt, offset dp = %ld"
+msgid "%pB: tp-relative relocation against dynamic symbol %s"
+msgstr "%pB: realocare relativÄƒ-tp faÈ›Äƒ de simbolul dinamic %s"
 
-#: elf64-mmix.c:1032
+#. Only if it's not an unresolved symbol.
+#: elf64-bpf.c:344
+msgid "internal error: relocation not supported"
+msgstr "eroare internÄƒ: realocarea nu este acceptatÄƒ"
+
+#: elf64-gen.c:71
 #, c-format
-msgid ""
-"%s: Internal inconsistency error for value for\n"
-" linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx\n"
-msgstr ""
-"%s: eroare internã de inconsistenþã pentru valoarea\n"
-"registrului global alocat de linker: linkuit: 0x%lx%08lx != relaxat: 0x%lx%08lx\n"
+msgid "%pB: Relocations in generic ELF (EM: %d)"
+msgstr "%pB: RealocÄƒri Ã®n ELF generic (EM: %d)"
+
+#: elf64-hppa.c:2032
+#, c-format
+msgid "stub entry for %s cannot load .plt, dp offset = %<PRId64>"
+msgstr "intrarea ciot(stub) pentru %s nu poate Ã®ncÄƒrca .plt, decalaj dp = %<PRId64>"
 
-#: elf64-mmix.c:1416
+#: elf64-hppa.c:3236
 #, c-format
-msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s"
-msgstr "%s:relocare-offset-bazã-plus pentru simbolul registru: (necunoscut) în %s"
+msgid "%pB(%pA+%#<PRIx64>): cannot reach %s"
+msgstr "%pB(%pA+%#<PRIx64>): nu se poate atinge %s"
 
-#: elf64-mmix.c:1421
+#: elf64-ia64-vms.c:600 elfnn-ia64.c:641
 #, c-format
-msgid "%s: base-plus-offset relocation against register symbol: %s in %s"
-msgstr "%s:relocare-offset-bazã-plus pentru simbolul registru: %s în %s"
+msgid "%pB: can't relax br at %#<PRIx64> in section `%pA'; please use brl or indirect branch"
+msgstr "%pB: nu se poate relaxa br la %#<PRIx64> Ã®n secÈ›iunea â€ž%pAâ€�; vÄƒ rugÄƒm sÄƒ folosiÈ›i brl sau ramura indirectÄƒ"
+
+#: elf64-ia64-vms.c:2032 elfnn-ia64.c:2294
+msgid "@pltoff reloc against local symbol"
+msgstr "realocare @pltoff faÈ›Äƒ de simbol local"
 
-#: elf64-mmix.c:1465
+#: elf64-ia64-vms.c:3278 elfnn-ia64.c:3671
 #, c-format
-msgid "%s: register relocation against non-register symbol: (unknown) in %s"
-msgstr "%s:relocare registru pentru simbolul non-registru: (necunoscut) în %s"
+msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
+msgstr "%pB: segment de date scurt depÄƒÈ™it (%#<PRIx64> >= 0x400000)"
 
-#: elf64-mmix.c:1470
+#: elf64-ia64-vms.c:3288 elfnn-ia64.c:3681
 #, c-format
-msgid "%s: register relocation against non-register symbol: %s in %s"
-msgstr "%s:relocare registru pentru simbolul non-registru: %s în %s"
+msgid "%pB: __gp does not cover short data segment"
+msgstr "%pB: __gp nu acoperÄƒ segmentul de date scurt"
 
-#: elf64-mmix.c:1507
+#: elf64-ia64-vms.c:3558 elfnn-ia64.c:3954
 #, c-format
-msgid "%s: directive LOCAL valid only with a register or absolute value"
-msgstr "%s: directiva LOCAL este validã doar cu un registru sau o valoare absolutã"
+msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
+msgstr "%pB: cod non-pic cu realocare imm faÈ›Äƒ de simbolul dinamic â€ž%sâ€�"
 
-#: elf64-mmix.c:1535
+#: elf64-ia64-vms.c:3622 elfnn-ia64.c:4022
 #, c-format
-msgid "%s: LOCAL directive: Register $%ld is not a local register.  First global register is $%ld."
-msgstr "%s: directivã LOCAL: Registrulr $%ld nu este un registru local.  Primul registru global $%ld."
+msgid "%pB: @gprel relocation against dynamic symbol %s"
+msgstr "%pB: realocare @gprel faÈ›Äƒ de simbolul dinamic %s"
 
-#: elf64-mmix.c:1994
+#: elf64-ia64-vms.c:3681 elfnn-ia64.c:4085
 #, c-format
-msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n"
-msgstr "%s: Eroare: definiþii multiple ale `%s'; începutul lui %s este setat într-un fiºierlinkuit anterior\n"
+msgid "%pB: linking non-pic code in a position independent executable"
+msgstr "%pB: se vinculeazÄƒ codul non-pic Ã®ntr-un executabil independent de poziÈ›ie"
 
-#: elf64-mmix.c:2053
-msgid "Register section has contents\n"
-msgstr "Secþiunea registru nu are conþinut\n"
+#: elf64-ia64-vms.c:3783 elfnn-ia64.c:4223
+#, c-format
+msgid "%pB: @internal branch to dynamic symbol %s"
+msgstr "%pB: ramurÄƒ @internal cÄƒtre simbolul dinamic %s"
 
-#: elf64-mmix.c:2216
+#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4226
+#, c-format
+msgid "%pB: speculation fixup to dynamic symbol %s"
+msgstr "%pB: remedierea speculaÈ›iei la simbolul dinamic %s"
+
+#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4229
+#, c-format
+msgid "%pB: @pcrel relocation against dynamic symbol %s"
+msgstr "%pB: realocare @pcrell faÈ›Äƒ de simbolul dinamic %s"
+
+#: elf64-ia64-vms.c:3913 elfnn-ia64.c:4426
+msgid "unsupported reloc"
+msgstr "realocare neacceptatÄƒ"
+
+#: elf64-ia64-vms.c:3950 elfnn-ia64.c:4464
+#, c-format
+msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
+msgstr "%pB: lipseÈ™te secÈ›iunea TLS pentru realocarea %s faÈ›Äƒ de â€ž%sâ€� la %#<PRIx64> Ã®n secÈ›iunea â€ž%pAâ€�."
+
+#: elf64-ia64-vms.c:3967 elfnn-ia64.c:4481
+#, c-format
+msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
+msgstr "%pB: Nu se poate relaxa br (%s) la â€ž%sâ€� la %#<PRIx64> Ã®n secÈ›iunea â€ž%pAâ€� cu dimensiunea %#<PRIx64> (> 0x1000000)."
+
+#: elf64-ia64-vms.c:4263 elfnn-ia64.c:4742
+#, c-format
+msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
+msgstr "%pB: vinculare trap-on-NULL-dereference cu fiÈ™iere non-trapping"
+
+#: elf64-ia64-vms.c:4272 elfnn-ia64.c:4751
+#, c-format
+msgid "%pB: linking big-endian files with little-endian files"
+msgstr "%pB: vinculare fiÈ™iere big-endian cu fiÈ™iere little-endian"
+
+#: elf64-ia64-vms.c:4281 elfnn-ia64.c:4760
+#, c-format
+msgid "%pB: linking 64-bit files with 32-bit files"
+msgstr "%pB: vinculare fiÈ™iere pe 64-biÈ›i cu fiÈ™iere pe 32-biÈ›i"
+
+#: elf64-ia64-vms.c:4290 elfnn-ia64.c:4769
+#, c-format
+msgid "%pB: linking constant-gp files with non-constant-gp files"
+msgstr "%pB: vinculare fiÈ™iere constant-gp cu fiÈ™iere non-constant-gp"
+
+#: elf64-ia64-vms.c:4300 elfnn-ia64.c:4779
+#, c-format
+msgid "%pB: linking auto-pic files with non-auto-pic files"
+msgstr "%pB: vinculare fiÈ™iere auto-pic cu fiÈ™iere non-auto-pic"
+
+#: elf64-ia64-vms.c:5150 elflink.c:5338
+#, c-format
+msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
+msgstr "avertisment: alinierea %u a simbolului comun â€ž%sâ€� Ã®n %pB este mai mare decÃ¢t alinierea (%u) a secÈ›iunii sale %pA"
+
+#: elf64-ia64-vms.c:5157
+#, c-format
+msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
+msgstr "avertisment: alinierea %u a simbolului â€ž%sâ€� Ã®n %pB este mai micÄƒ decÃ¢t %u Ã®n %pBs"
+
+#: elf64-ia64-vms.c:5173 elflink.c:5367
+#, c-format
+msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
+msgstr "avertisment: dimensiunea simbolului â€ž%sâ€� s-a schimbat de la %<PRIu64> Ã®n %pB la %<PRIu64> Ã®n %pB"
+
+#: elf64-mips.c:4102
+#, c-format
+msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
+msgstr "%pB(%pA): realocarea %<PRIu64> are index de simbol nevalid %ld"
+
+#: elf64-mmix.c:984
+msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using \"-no-expand\" (for gcc, \"-Wa,-no-expand\""
+msgstr "realocare nevalidÄƒ a intrÄƒrii atunci cÃ¢nd se produce o ieÈ™ire Ã®n format non-ELF, non-mmo; vÄƒ rugÄƒm sÄƒ utilizaÈ›i programul Â«objcopyÂ» pentru a converti din ELF sau mmo sau asamblaÈ›i folosind â€ž-no-expandâ€� (pentru gcc, â€ž-Wa,-no-expandâ€�)"
+
+#: elf64-mmix.c:1168
+msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option \"-mno-base-addresses\"."
+msgstr "realocare nevalidÄƒ a intrÄƒrii atunci cÃ¢nd se produce o ieÈ™ire Ã®n format non-ELF, non-mmo; vÄƒ rugÄƒm sÄƒ utilizaÈ›i programul Â«objcopyÂ» pentru a converti din ELF sau mmo, sau compilaÈ›i folosind opÈ›iunea gcc â€ž-mno-base-addressesâ€�."
+
+#: elf64-mmix.c:1195
 #, c-format
 msgid ""
-"Internal inconsistency: remaining %u != max %u.\n"
-"  Please report this bug."
+"%pB: Internal inconsistency error for value for\n"
+" linker-allocated global register: linked: %#<PRIx64> != relaxed: %#<PRIx64>"
 msgstr ""
-"Inconsistenþã internã: rãmâne %u ! = max %u\n"
-"  Vã rugãm raportaþi acest bug."
+"%pB: Eroare internÄƒ de inconsistenÈ›Äƒ pentru valoarea pentru registrul global\n"
+"alocat editorului de legÄƒturi: vinculat: %#<PRIx64> != relaxat: %#<PRIx64>"
+
+#: elf64-mmix.c:1619
+#, c-format
+msgid "%pB: base-plus-offset relocation against register symbol: (unknown) in %pA"
+msgstr "%pB: realocare base-plus-offset faÈ›Äƒ de simbolul de registru: (necunoscut) Ã®n %pA"
 
-#: elf64-ppc.c:2388 libbfd.c:831
+#: elf64-mmix.c:1625
 #, c-format
-msgid "%s: compiled for a big endian system and target is little endian"
-msgstr "%s: compilat pentru un sistem big endiat iar þinta este little endian"
+msgid "%pB: base-plus-offset relocation against register symbol: %s in %pA"
+msgstr "%pB: realocare base-plus-offset faÈ›Äƒ de simbolul de registru: %s Ã®n %pA"
 
-#: elf64-ppc.c:2391 libbfd.c:833
+#: elf64-mmix.c:1670
 #, c-format
-msgid "%s: compiled for a little endian system and target is big endian"
-msgstr "%s: compilat pentru un sistem little endiat iar þinta este big endian"
+msgid "%pB: register relocation against non-register symbol: (unknown) in %pA"
+msgstr "%pB: realocare de registru faÈ›Äƒ de simbolul non-registru: (necunoscut) Ã®n %pA"
 
-#: elf64-ppc.c:4857
+#: elf64-mmix.c:1676
 #, c-format
-msgid "%s: unexpected reloc type %u in .opd section"
-msgstr "%s: tip de relocare neaºteptat %u în secþiune .opd"
+msgid "%pB: register relocation against non-register symbol: %s in %pA"
+msgstr "%pB:realocare de registru pentru simbolul non-registru: %s Ã®n %pA"
 
-#: elf64-ppc.c:4877
+#: elf64-mmix.c:1713
 #, c-format
-msgid "%s: .opd is not a regular array of opd entries"
-msgstr "%s: .opd nu este un domeniu(array) de intrãri opd"
+msgid "%pB: directive LOCAL valid only with a register or absolute value"
+msgstr "%pB: directiva LOCAL este validÄƒ doar cu un registru sau o valoare absolutÄƒ"
 
-#: elf64-ppc.c:4897
+#: elf64-mmix.c:1742
 #, c-format
-msgid "%s: undefined sym `%s' in .opd section"
-msgstr "%s: sym nedefinit `%s' în secþiune .opd"
+msgid "%pB: LOCAL directive: register $%<PRId64> is not a local register; first global register is $%<PRId64>"
+msgstr "%pB: directiva LOCAL: registrul $%<PRId64> nu este un registru local; primul registru global este $%<PRId64>"
 
-#: elf64-ppc.c:6136
+#: elf64-mmix.c:2157
+#, c-format
+msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file"
+msgstr "%pB: eroare: multiple definiÈ›ii pentru â€ž%sâ€�; Ã®nceputul lui %s este stabilit Ã®ntr-un fiÈ™ier vinculat anterior"
+
+#: elf64-mmix.c:2212
+msgid "register section has contents\n"
+msgstr "secÈ›iunea de registru are conÈ›inut\n"
+
+#: elf64-mmix.c:2402
+#, c-format
+msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
+msgstr "inconsistenÈ›Äƒ internÄƒ: rÄƒmÃ¢ne %lu ! = max %lu\\; raportaÈ›i aceastÄƒ eroare"
+
+#: elf64-ppc.c:1361
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "avertisment: %s ar trebui sÄƒ fie folosit Ã®n loc de %s"
+
+#: elf64-ppc.c:4307
+#, c-format
+msgid "symbol '%s' has invalid st_other for ABI version 1"
+msgstr "simbolul â€ž%sâ€� are st_other nevalid pentru versiunea 1 a ABI"
+
+#: elf64-ppc.c:4490
+#, c-format
+msgid "%pB .opd not allowed in ABI version %d"
+msgstr "%pB .opd nu este permis Ã®n versiunea ABI %d"
+
+#: elf64-ppc.c:5085
+#, c-format
+msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
+msgstr "%H: realocarea %s nu este acceptatÄƒ Ã®n bibliotecile partajate È™i PIE-uri\n"
+
+#: elf64-ppc.c:5255
+msgid "%H: %s reloc unsupported here\n"
+msgstr "%H: realocarea %s nu este acceptatÄƒ aici\n"
+
+#: elf64-ppc.c:5482
+#, c-format
+msgid "%pB uses unknown e_flags 0x%lx"
+msgstr "%pB utilizeazÄƒ e_flags necunoscut 0x%lx"
+
+#: elf64-ppc.c:5490
+#, c-format
+msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
+msgstr "%pB: versiunea ABI %ld nu este compatibilÄƒ cu versiunea ABI %ld de ieÈ™ire"
+
+#: elf64-ppc.c:5517
+#, c-format
+msgid " [abiv%ld]"
+msgstr " [abiv%ld]"
+
+#: elf64-ppc.c:6821
+msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
+msgstr "%P: realocarea copiei faÈ›Äƒ de â€ž%pTâ€� necesitÄƒ o legÄƒturÄƒ plt leneÈ™Äƒ; evitaÈ›i configurarea LD_BIND_NOW=1 sau actualizaÈ›i gcc\n"
+
+#: elf64-ppc.c:7088
+#, c-format
+msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
+msgstr "%pB: simbol nedefinit la realocarea R_PPC64_TOCSAVE"
+
+#: elf64-ppc.c:7343
+#, c-format
+msgid "dynreloc miscount for %pB, section %pA"
+msgstr "numÄƒr greÈ™it de realocÄƒri dinamice pentru %pB, secÈ›iunea %pA"
+
+#: elf64-ppc.c:7434
+#, c-format
+msgid "%pB: .opd is not a regular array of opd entries"
+msgstr "%pB: .opd nu este o matrice obiÈ™nuitÄƒ de intrÄƒri opd"
+
+#: elf64-ppc.c:7444
+#, c-format
+msgid "%pB: unexpected reloc type %u in .opd section"
+msgstr "%pB: tip de realocare neaÈ™teptat %u Ã®n secÈ›iunea .opd"
+
+#: elf64-ppc.c:7466
+#, c-format
+msgid "%pB: undefined sym `%s' in .opd section"
+msgstr "%pB: simbol nedefinit â€ž%sâ€� Ã®n secÈ›iunea .opd"
+
+#. The issue is that __glink_PLTresolve saves r2, which is done
+#. because glibc ld.so _dl_runtime_resolve restores r2 to support
+#. a glibc plt call optimisation where global entry code is
+#. skipped on calls that resolve to the same binary.  The
+#. __glink_PLTresolve save of r2 is incompatible with code
+#. making tail calls, because the tail call might go via the
+#. resolver and thus overwrite the proper saved r2.
+#: elf64-ppc.c:7967
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr "avertisment: opÈ›iunea â€ž--plt-localentryâ€� este incompatibilÄƒ cu codul pc-relative power10"
+
+#: elf64-ppc.c:7975
+msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
+msgstr "avertisment: opÈ›iunea â€ž--plt-localentryâ€� este deosebit de periculoasÄƒ fÄƒrÄƒ suportul ld.so pentru a detecta Ã®ncÄƒlcÄƒrile ABI"
+
+#: elf64-ppc.c:8291
+msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
+msgstr "%H __tls_get_addr lost arg, optimizare TLS dezactivatÄƒ\n"
+
+#: elf64-ppc.c:8726 elf64-ppc.c:9442
+#, c-format
+msgid "%s defined on removed toc entry"
+msgstr "%s definitÄƒ Ã®n intrarea toc eliminatÄƒ"
+
+#: elf64-ppc.c:9399
+#, c-format
+msgid "%H: %s references optimized away TOC entry\n"
+msgstr "%H: %s referinÈ›e optimizate departe de intrarea TOC\n"
+
+#: elf64-ppc.c:9620
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%H: optimizarea got/toc nu este acceptatÄƒ pentru instrucÈ›iunea %s\n"
+
+#: elf64-ppc.c:10515
+#, c-format
+msgid "warning: discarding dynamic section %s"
+msgstr "avertisment: se eliminÄƒ secÈ›iunea dinamicÄƒ %s"
+
+#: elf64-ppc.c:11668
+msgid "%P: cannot find opd entry toc for `%pT'\n"
+msgstr "%P: nu se poate gÄƒsi intrarea opd toc pentru â€ž%pTâ€�\n"
+
+#: elf64-ppc.c:11818
+#, c-format
+msgid "long branch stub `%s' offset overflow"
+msgstr "depÄƒÈ™ire de decalaj pentru ramura lungÄƒ a ciotului(stub) â€ž%sâ€�"
+
+#: elf64-ppc.c:11845
 #, c-format
 msgid "can't find branch stub `%s'"
-msgstr "nu pot gãsi ramura trunchiatã `%s'"
+msgstr "nu se gÄƒseÈ™te ciotul(stub) de ramurÄƒ â€ž%sâ€�"
 
-#: elf64-ppc.c:6175 elf64-ppc.c:6250
+#: elf64-ppc.c:11906 elf64-ppc.c:12158 elf64-ppc.c:14724
 #, c-format
-msgid "linkage table error against `%s'"
-msgstr "eroare tabel de linkuire pentru `%s'"
+msgid "%P: linkage table error against `%pT'\n"
+msgstr "%P: eroare de tabel de legÄƒturi faÈ›Äƒ de â€ž%pTâ€�\n"
 
-#: elf64-ppc.c:6340
+#: elf64-ppc.c:12357
 #, c-format
 msgid "can't build branch stub `%s'"
-msgstr "nu se poate construi ramura trunchiatã `%s'"
+msgstr "nu se poate construi ciotul(stub) de ramurÄƒ â€ž%sâ€�"
 
-#: elf64-ppc.c:7047
-msgid ".glink and .plt too far apart"
-msgstr ".glink ºi .plt prea departe unul de altul"
+#: elf64-ppc.c:13384
+#, c-format
+msgid "%pB section %pA exceeds stub group size"
+msgstr "%pB secÈ›iunea %pA depÄƒÈ™eÈ™te dimensiunea grupului ciotului(stub)"
 
-#: elf64-ppc.c:7135
-msgid "stubs don't match calculated size"
-msgstr "trunchierile(stubs) sunt în neconcordanþã cu mãrimea calculatã"
+#: elf64-ppc.c:14904
+msgid "__tls_get_addr call offset overflow"
+msgstr "depÄƒÈ™ire a decalajului de apel __tls_get_addr"
+
+#: elf64-ppc.c:15244 elf64-ppc.c:15263
+#, c-format
+msgid "%s offset too large for .eh_frame sdata4 encoding"
+msgstr "%s decalaj prea mare pentru codificarea sdata4 .eh_frame"
+
+#: elf64-ppc.c:15349
+#, c-format
+msgid "linker stubs in %u group"
+msgid_plural "linker stubs in %u groups"
+msgstr[0] "cioturi(stubs) de editor de legÄƒturi Ã®ntr-un grup"
+msgstr[1] "cioturi(stubs) de editor de legÄƒturi Ã®n %u grupuri"
+msgstr[2] "cioturi(stubs) de editor de legÄƒturi Ã®n %u de grupuri"
 
-#: elf64-ppc.c:7147
+#: elf64-ppc.c:15356
 #, c-format
 msgid ""
-"linker stubs in %u groups\n"
-"  branch       %lu\n"
-"  toc adjust   %lu\n"
-"  long branch  %lu\n"
-"  long toc adj %lu\n"
-"  plt call     %lu"
+"%s, iter %u\n"
+"  branch         %lu\n"
+"  long branch    %lu\n"
+"  plt call       %lu\n"
+"  global entry   %lu"
 msgstr ""
-"trunchieri(stubs) de linker în grupurile %u\n"
-"  ramurã       %lu\n"
-"  ajustare toc   %lu\n"
-"  ramurã lungã  %lu\n"
-"  ajust. lungã toc %lu\n"
-"  apelare plt     %lu"
+"%s, iteraÈ›ii %u\n"
+"  ramura           %lu\n"
+"  ramura lungÄƒ     %lu\n"
+"  apel plt         %lu\n"
+"  intrare globalÄƒ  %lu"
+
+#: elf64-ppc.c:15738
+#, c-format
+msgid "%H: %s used with TLS symbol `%pT'\n"
+msgstr "%H: %s utilizat cu simbolul TLS â€ž%pTâ€�\n"
+
+#: elf64-ppc.c:15740
+#, c-format
+msgid "%H: %s used with non-TLS symbol `%pT'\n"
+msgstr "%H: %s utilizat cu simbolul non-TLS â€ž%pTâ€�\n"
+
+#: elf64-ppc.c:16524
+#, c-format
+msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
+msgstr "%H: apelul la â€ž%pTâ€� este lipsit de nop, nu se poate restabili toc; (ciot(stub) de apel plt)\n"
+
+#: elf64-ppc.c:16530
+#, c-format
+msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
+msgstr "%H: apelul la â€ž%pTâ€� este lipsit de nop, nu se poate restabili toc; (ciot(stub) de salvare/ajustare toc)\n"
+
+#: elf64-ppc.c:17181
+#, c-format
+msgid "%H: %s against %pT is not supported\n"
+msgstr "%H: %s faÈ›Äƒ de %pT nu este acceptat\n"
+
+#: elf64-ppc.c:17457
+#, c-format
+msgid "%H: %s for indirect function `%pT' unsupported\n"
+msgstr "%H: %s pentru funcÈ›ia indirectÄƒ â€ž%pTâ€� neacceptatÄƒ\n"
+
+#: elf64-ppc.c:17545
+#, c-format
+msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
+msgstr "%X%P: %pB: %s faÈ›Äƒ de %pT nu este acceptatÄƒ de â€žglibcâ€� ca realocare dinamicÄƒ\n"
+
+#: elf64-ppc.c:17600
+#, c-format
+msgid "%P: %pB: %s is not supported for `%pT'\n"
+msgstr "%P: %pB: %s nu este acceptat pentru â€ž%pTâ€�\n"
+
+#: elf64-ppc.c:17869
+#, c-format
+msgid "%H: error: %s not a multiple of %u\n"
+msgstr "%H: eroare: %s nu este un multiplu de %u\n"
+
+#: elf64-ppc.c:17892
+#, c-format
+msgid "%H: unresolvable %s against `%pT'\n"
+msgstr "%H: %s nerezolvabil faÈ›Äƒ de â€ž%pTâ€�\n"
+
+#: elf64-ppc.c:18037
+#, c-format
+msgid "%H: %s against `%pT': error %d\n"
+msgstr "%H: %s faÈ›Äƒ de â€ž%pTâ€�: eroare %d\n"
+
+#: elf64-s390.c:2457
+#, c-format
+msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)"
+msgstr "%pB: realocare non-PLT â€ž%sâ€� pentru simbolul definit Ã®n biblioteca partajatÄƒ È™i accesat din executabil (reconstruiÈ›i fiÈ™ierul cu â€ž-fPICâ€�?)"
+
+#: elf64-s390.c:3066
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): misaligned symbol `%s' (%#<PRIx64>) for relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): simbol incorect aliniat â€ž%sâ€� (%#<PRIx64>) pentru realocarea %s"
+
+#: elf64-sparc.c:134 elfcode.h:1602
+#, c-format
+msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
+msgstr "%pB(%pA): realocarea %d are indexul de simbol nevalid %ld"
+
+#: elf64-sparc.c:493
+#, c-format
+msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
+msgstr "%pB: numai registrele %%g[2367] pot fi declarate utilizÃ¢nd STT_REGISTER"
+
+#: elf64-sparc.c:514
+#, c-format
+msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
+msgstr "registrul %%g%d utilizat de formÄƒ incompatibilÄƒ: %s Ã®n %pB, anterior %s Ã®n %pB"
+
+#: elf64-sparc.c:538
+#, c-format
+msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
+msgstr "simbolul â€ž%sâ€� are tipuri diferite: REGISTER Ã®n %pB, anterior %s Ã®n %pB"
+
+#: elf64-sparc.c:585
+#, c-format
+msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
+msgstr "Simbolul â€ž%sâ€� are tipuri diferite: %s Ã®n %pB, anterior REGISTER Ã®n %pB"
+
+#: elf64-sparc.c:717
+#, c-format
+msgid "%pB: linking UltraSPARC specific with HAL specific code"
+msgstr "%pB: se vinculeazÄƒ cod specific UltraSPARC cu cod specific HAL"
+
+#: elf64-x86-64.c:1537
+msgid "hidden symbol "
+msgstr "simbol ascuns "
+
+#: elf64-x86-64.c:1540
+msgid "internal symbol "
+msgstr "simbol intern "
+
+#: elf64-x86-64.c:1543 elf64-x86-64.c:1547
+msgid "protected symbol "
+msgstr "simbol protejat "
+
+#: elf64-x86-64.c:1549
+msgid "symbol "
+msgstr "simbol "
+
+#: elf64-x86-64.c:1555
+msgid "undefined "
+msgstr "nedefinit "
+
+#: elf64-x86-64.c:1565
+msgid "a shared object"
+msgstr "un obiect partajat"
+
+#: elf64-x86-64.c:1567
+msgid "; recompile with -fPIC"
+msgstr "; recompilaÈ›i cu â€ž-fPICâ€�"
+
+#: elf64-x86-64.c:1572
+msgid "a PIE object"
+msgstr "un obiect PIE"
+
+#: elf64-x86-64.c:1574
+msgid "a PDE object"
+msgstr "un obiect PDE"
+
+#: elf64-x86-64.c:1576
+msgid "; recompile with -fPIE"
+msgstr "; recompilaÈ›i cu â€ž-fPIEâ€�"
+
+#: elf64-x86-64.c:1580
+#, c-format
+msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
+msgstr "%pB: realocarea %s faÈ›Äƒ de %s%sâ€ž%sâ€� nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ %s%s"
+
+#: elf64-x86-64.c:2116
+#, c-format
+msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
+msgstr "%pB: realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€� nu este acceptatÄƒ Ã®n modul x32"
+
+#: elf64-x86-64.c:2266
+#, c-format
+msgid "%pB: '%s' accessed both as normal and thread local symbol"
+msgstr "%pB: â€ž%sâ€� a fost accesat atÃ¢t ca simbol local normal, cÃ¢t È™i ca simbol local al firului de execuÈ›ie"
+
+#: elf64-x86-64.c:2926 elfnn-aarch64.c:5754 elfnn-riscv.c:2295
+#, c-format
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
+msgstr "%pB: realocarea %s faÈ›Äƒ de simbolul STT_GNU_IFUNC â€ž%sâ€� are o adÄƒugare non-zero: %<PRId64>"
+
+#: elf64-x86-64.c:3189
+#, c-format
+msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
+msgstr "%pB: realocarea R_X86_64_GOTOFF64 faÈ›Äƒ de %s nedefinit â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat"
+
+#: elf64-x86-64.c:3203
+#, c-format
+msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
+msgstr "%pB: realocarea R_X86_64_GOTOFF64 faÈ›Äƒ de %s protejait â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat"
 
-#: elf64-ppc.c:7723
+#: elf64-x86-64.c:3493
 #, c-format
-msgid "%s(%s+0x%lx): automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc"
-msgstr "%s(%s+0x%lx): TOCuri multiple nu sunt suportateîn folosirea fiºierelor voastre crt; recompilaþi cu  -mminimal-toc sau upgradaþi gcc"
+msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
+msgstr "%pB: adÄƒugarea %s%#x Ã®n realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€� la %#<PRIx64> din secÈ›iunea â€ž%pAâ€� este Ã®n afara intervalului"
 
-#: elf64-ppc.c:7731
+#: elf64-x86-64.c:3643 elflink.c:13796
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: intrare coruptÄƒ: %pB\n"
+
+#: elf64-x86-64.c:4410
+#, c-format
+msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
+msgstr " nu s-a putut converti realocarea GOTPCREL faÈ›Äƒ de â€ž%sâ€�; editaÈ›i din nou legÄƒturile cu â€ž--no-relaxâ€�\n"
+
+#: elf64-x86-64.c:4571
 #, c-format
-msgid "%s(%s+0x%lx): sibling call optimization to `%s' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `%s' extern"
-msgstr "%s(%s+0 x%lx): optimizare apelare sibling pentru `%s' nu permite automatTOCuri multiple; recompilaþi cu -mminimal-toc sau -fno-optimize-sibling-calls, sau faceþi(make) `%s' extern"
+msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
+msgstr "%F%pB: depÄƒÈ™ire de decalaj relativ la PC Ã®n intrarea PLT pentru â€ž%sâ€�\n"
 
-#: elf64-ppc.c:8329
+#: elf64-x86-64.c:4644
 #, c-format
-msgid "%s: relocation %s is not supported for symbol %s."
-msgstr "%s: relocarea %s nu este suportatã pentru simbolul %s."
+msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
+msgstr "%F%pB: depÄƒÈ™ire de deplasare a ramurii Ã®n intrarea PLT pentru â€ž%sâ€�\n"
 
-#: elf64-ppc.c:8408
+#: elf64-x86-64.c:4697
 #, c-format
-msgid "%s: error: relocation %s not a multiple of %d"
-msgstr "%s: eroare: relocarea %s nu este multiplu de %d"
+msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
+msgstr "%F%pB: depÄƒÈ™ire de decalaj relativ la PC Ã®n intrarea GOT PLT pentru â€ž%sâ€�\n"
 
-#: elf64-sparc.c:1370
+#: elfcode.h:342
 #, c-format
-msgid "%s: check_relocs: unhandled reloc type %d"
-msgstr "%s: check_relocs: tip de relocare nemanipulabil %d"
+msgid "warning: %pB has a section extending past end of file"
+msgstr "avertisment: %pB are o secÈ›iune care se extinde dincolo de sfÃ¢rÈ™itul fiÈ™ierului"
 
-#: elf64-sparc.c:1407
+#: elfcode.h:790
 #, c-format
-msgid "%s: Only registers %%g[2367] can be declared using STT_REGISTER"
-msgstr "%s: Doar regiºtrii %%g[2367] pot fi declaraþi folosind STT_REGISTER"
+msgid "warning: %pB has a corrupt string table index"
+msgstr "avertisment: %pB are un index de tabel de È™iruri corupt"
 
-#: elf64-sparc.c:1427
+#: elfcode.h:838
 #, c-format
-msgid "Register %%g%d used incompatibly: %s in %s, previously %s in %s"
-msgstr "Registrul %%g%d a folosit incompatibilitãþi: %s în %s, anterior %s în %s"
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr "avertisment: %pB are un antet de program cu aliniere nevalidÄƒ"
 
-#: elf64-sparc.c:1450
+#: elfcode.h:1056
 #, c-format
-msgid "Symbol `%s' has differing types: REGISTER in %s, previously %s in %s"
-msgstr "Simbolul `%s' are tipuri diferenþiate: REGISTER în %s, anterior %s în %s"
+msgid "%pB: %pA+%<PRIx64>: relocation addend %<PRIx64> too large"
+msgstr "%pB: %pA+%<PRIx64>: adaos de realocare %<PRIx64> prea mare"
 
-#: elf64-sparc.c:1496
+#: elfcode.h:1322
 #, c-format
-msgid "Symbol `%s' has differing types: %s in %s, previously REGISTER in %s"
-msgstr "Simbolul `%s' are tipuri diferenþiate: %s în %s, anterior REGISTER în %s"
+msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
+msgstr "%pB: numÄƒrul de versiuni (%<PRId64>) nu se potriveÈ™te cu numÄƒrul de simboluri (%ld)"
 
-#: elf64-sparc.c:3053
+#: elfcore.h:280
 #, c-format
-msgid "%s: linking UltraSPARC specific with HAL specific code"
-msgstr "%s: linkuire cod specific UltraSPARC cu cod specific HAL"
+msgid "warning: %pB has a segment extending past end of file"
+msgstr "avertisment: %pB are un segment care se extinde dincolo de sfÃ¢rÈ™itul fiÈ™ierului"
 
-#: elf64-x86-64.c:739
+#: elflink.c:1397
 #, c-format
-msgid "%s: %s' accessed both as normal and thread local symbol"
-msgstr "%s: `%s' accesate ºi ca simboluri locale normale ºi ca simboluri locale pe fire (thread)"
+msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
+msgstr "%s: definiÈ›ia TLS din secÈ›iunea %pB %pA nu se potriveÈ™te cu definiÈ›ia non-TLS din secÈ›iunea %pB %pA"
 
-#: elfcode.h:1113
+#: elflink.c:1403
 #, c-format
-msgid "%s: version count (%ld) does not match symbol count (%ld)"
-msgstr "%s: numãrul versiunii(%ld) nu se potriveºte cu numãrul simbolului (%ld)"
+msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
+msgstr "%s: referinÈ›a TLS din %pB nu se potriveÈ™te cu referinÈ›a non-TLS din %pB"
 
-#: elfcode.h:1342
+#: elflink.c:1409
 #, c-format
-msgid "%s(%s): relocation %d has invalid symbol index %ld"
-msgstr "%s(%s): relocarea %d are indexul de simbol invalid %ld"
+msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
+msgstr "%s: definiÈ›ia TLS din secÈ›iunea %pB %pA nu se potriveÈ™te cu referinÈ›a non-TLS din %pB"
 
-#: elflink.c:1456
+#: elflink.c:1415
 #, c-format
-msgid "%s: warning: unexpected redefinition of indirect versioned symbol `%s'"
-msgstr "%s: avertisment: redefinire neaºteptatã a simbolului indirect cu versiune(versioned) `%s'"
+msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
+msgstr "%s: referinÈ›a TLS din %pB nu se potriveÈ™te cu definiÈ›ia non-TLS din secÈ›iunea %pB %pA"
 
-#: elflink.c:1807
+#: elflink.c:2127
 #, c-format
-msgid "%s: undefined versioned symbol name %s"
-msgstr "%s: nume de simbol versiune %s nedefinit"
+msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
+msgstr "%pB: redefinire neaÈ™teptatÄƒ a simbolului cu versiune indirectÄƒ â€ž%sâ€�"
 
-#: elflink.c:2142
+#: elflink.c:2626
 #, c-format
-msgid "%s: relocation size mismatch in %s section %s"
-msgstr "%s: nepotrivire a mãrimii de relocare în %s secþiunea %s"
+msgid "%pB: version node not found for symbol %s"
+msgstr "%pB: nodul de versiune nu a fost gÄƒsit pentru simbolul %s"
 
-#: elflink.c:2434
+#: elflink.c:2717
+#, c-format
+msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
+msgstr "%pB: index de simbol al realocÄƒrii incorect (%#<PRIx64> >= %#lx) pentru poziÈ›ia %#<PRIx64> din secÈ›iunea â€ž%pAâ€�"
+
+#: elflink.c:2729
+#, c-format
+msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
+msgstr "%pB: index de simbol diferit de zero (%#<PRIx64>) pentru poziÈ›ia %#<PRIx64> din secÈ›iunea â€ž%pAâ€� cÃ¢nd fiÈ™ierul obiect nu are tabel de simboluri"
+
+#: elflink.c:2940
+#, c-format
+msgid "%pB: relocation size mismatch in %pB section %pA"
+msgstr "%pB: nepotrivire a dimensiunii realocÄƒrii din %pB secÈ›iunea %pA"
+
+#: elflink.c:3269
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
-msgstr "avertisment: tipul ºi mãrimea simbolului dinamic `%s' nu sunt definite"
+msgstr "avertisment: tipul È™i dimensiunea simbolului dinamic â€ž%sâ€� nu sunt definite"
 
-#: elflink.h:1022
+#: elflink.c:3329
+msgid "%P: copy reloc against protected `%pT' is dangerous\n"
+msgstr "%P: copierea realocÄƒrii faÈ›Äƒ de â€ž%pTâ€� protejat este periculoasÄƒ\n"
+
+#: elflink.c:4306
 #, c-format
-msgid "%s: %s: invalid version %u (max %d)"
-msgstr "%s: %s: versiune invalidã %u (max %d)"
+msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
+msgstr "s-a gÄƒsit codul de maÈ™inÄƒ ELF alternativ (%d) Ã®n %pB, se aÈ™tepta %d"
 
-#: elflink.h:1063
+#: elflink.c:4789
 #, c-format
-msgid "%s: %s: invalid needed version %d"
-msgstr "%s: %s: versiune necesarã %d invalidã"
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: decalaj de versiune nevalid %lx (maxim %lx)"
 
-#: elflink.h:1238
+#: elflink.c:4857
 #, c-format
-msgid "Warning: alignment %u of symbol `%s' in %s is smaller than %u in %s"
-msgstr "Avertisment: alinierea %u al simbolului `%s' din %s este mai micã decât %u în %s"
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr "%pB: simbolul local %s la indexul %lu (>= sh_info din %lu)"
 
-#: elflink.h:1252
+#: elflink.c:5005
 #, c-format
-msgid "Warning: size of symbol `%s' changed from %lu in %s to %lu in %s"
-msgstr "Avertisment: mãrimea simbolului `%s' a fost schimbatã din %lu din %s în %lu din %s"
+msgid "%pB: not enough version information"
+msgstr "%pB: nu sunt suficiente informaÈ›ii despre versiune"
 
-#: elflink.h:2160
+#: elflink.c:5043
+#, c-format
+msgid "%pB: %s: invalid version %u (max %d)"
+msgstr "%pB: %s: versiune nevalidÄƒ %u (max %d)"
+
+#: elflink.c:5080
+#, c-format
+msgid "%pB: %s: invalid needed version %d"
+msgstr "%pB: %s: versiune necesarÄƒ nevalidÄƒ %d"
+
+#: elflink.c:5345
+#, c-format
+msgid "warning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pB"
+msgstr "avertisment: alinierea %u a simbolului normal â€ž%sâ€� Ã®n %pB este mai micÄƒ decÃ¢t %u folositÄƒ de definiÈ›ia comunÄƒ Ã®n %pB"
+
+#: elflink.c:5352
+msgid "warning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised."
+msgstr "avertizare: NOTÄ‚: discrepanÈ›ele de aliniere pot cauza probleme reale.  Se recomandÄƒ efectuarea de investigaÈ›ii."
+
+#: elflink.c:5374
+msgid "warning: NOTE: size discrepancies can cause real problems.  Investigation is advised."
+msgstr "avertizare: NOTÄ‚: discrepanÈ›ele de dimensiuni pot cauza probleme reale.  Se recomandÄƒ efectuarea de investigaÈ›ii."
+
+#: elflink.c:5516
+#, c-format
+msgid "%pB: undefined reference to symbol '%s'"
+msgstr "%pB: referinÈ›Äƒ nedefinitÄƒ la simbolul â€ž%sâ€�"
+
+#: elflink.c:6576
+#, c-format
+msgid "%pB: stack size specified and %s set"
+msgstr "%pB: dimensiunea stivei specificatÄƒ È™i %s definitÄƒ"
+
+#: elflink.c:6580
+#, c-format
+msgid "%pB: %s not absolute"
+msgstr "%pB: %s nu este absolut"
+
+#: elflink.c:6792
 #, c-format
 msgid "%s: undefined version: %s"
-msgstr "%s:versiune %s nedefinitã"
+msgstr "%s: versiune nedefinitÄƒ: %s"
+
+#: elflink.c:7181
+msgid "error: creating an executable stack because of -z execstack command line option"
+msgstr "eroare: se creeazÄƒ o stivÄƒ executabilÄƒ datoritÄƒ opÈ›iunii din linia de comandÄƒ â€ž-z execstackâ€�"
+
+#: elflink.c:7187
+msgid "warning: enabling an executable stack because of -z execstack command line option"
+msgstr "avertisment: activarea unei stive executabile datoritÄƒ opÈ›iunii din linia de comandÄƒ â€ž-z execstackâ€�"
+
+#: elflink.c:7249
+#, c-format
+msgid "error: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)"
+msgstr "eroare: %s: declanÈ™eazÄƒ generarea unei stive executabile (deoarece are o secÈ›iune executabilÄƒ .note.GNU-stack)"
+
+#: elflink.c:7255
+#, c-format
+msgid "warning: %s: requires executable stack (because the .note.GNU-stack section is executable)"
+msgstr "avertisment: %s: necesitÄƒ stivÄƒ executabilÄƒ (deoarece secÈ›iunea .note.GNU-stack este executabilÄƒ)"
+
+#: elflink.c:7263
+#, c-format
+msgid "error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack section"
+msgstr "eroare: %s: declanÈ™eazÄƒ generarea unei stive executabile deoarece nu are o secÈ›iune .note.GNU-stack"
+
+#: elflink.c:7269
+#, c-format
+msgid "warning: %s: missing .note.GNU-stack section implies executable stack"
+msgstr "avertisment: %s: lipsa secÈ›iunii .note.GNU-stack implicÄƒ stivÄƒ executabilÄƒ"
+
+#: elflink.c:7272
+msgid "NOTE: This behaviour is deprecated and will be removed in a future version of the linker"
+msgstr "NOTÄ‚: Acest comportament este depreciat È™i va fi eliminat Ã®ntr-o versiune viitoare a editorului de legÄƒturi."
+
+#: elflink.c:7426
+#, c-format
+msgid "%pB: .preinit_array section is not allowed in DSO"
+msgstr "%pB: secÈ›iunea .preinit_array section nu este permisÄƒ Ã®n DSO"
 
-#: elflink.h:2226
+#: elflink.c:9017
 #, c-format
-msgid "%s: .preinit_array section is not allowed in DSO"
-msgstr "%s: secþiunea .preinit_array section nu este permisã în DSO"
+msgid "undefined %s reference in complex symbol: %s"
+msgstr "referinÈ›Äƒ %s nedefinitÄƒ Ã®n simbolul complex: %s"
+
+#: elflink.c:9180 elflink.c:9188
+msgid "division by zero"
+msgstr "Ã®mpÄƒrÈ›ire la zero"
 
-#: elflink.h:3078
-msgid "Not enough memory to sort relocations"
-msgstr "Nu existã memorie suficientã pentru a sorta relocãrile"
+#: elflink.c:9202
+#, c-format
+msgid "unknown operator '%c' in complex symbol"
+msgstr "operator necunoscut â€ž%câ€� Ã®n simbolul complex"
+
+#. PR 21524: Let the user know if a symbol was removed by garbage collection.
+#: elflink.c:9538
+#, c-format
+msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
+msgstr "%pB:%pA: eroare: realocarea face referire la simbolul %s care a fost eliminat de colectarea deÈ™eurilor (garbage collection)"
 
-#: elflink.h:3958 elflink.h:4001
+#: elflink.c:9541
 #, c-format
-msgid "%s: could not find output section %s"
-msgstr "%s: nu s-a putut gãsi secþiunea de output %s"
+msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
+msgstr "%pB:%pA: eroare: Ã®ncercaÈ›i sÄƒ reeditaÈ›i legÄƒturile cu â€ž--gc-keep-exportedâ€� activat"
 
-#: elflink.h:3964
+#: elflink.c:9792 elflink.c:9810 elflink.c:9849 elflink.c:9867
+#, c-format
+msgid "%pB: unable to sort relocs - they are in more than one size"
+msgstr "%pB: nu se pot sorta realocÄƒrile - acestea au mai multe dimensiuni"
+
+#. The section size is not divisible by either -
+#. something is wrong.
+#: elflink.c:9826 elflink.c:9883
+#, c-format
+msgid "%pB: unable to sort relocs - they are of an unknown size"
+msgstr "%pB: nu se pot sorta realocÄƒrile - acestea au o dimensiune necunoscutÄƒ"
+
+#: elflink.c:9935
+msgid "not enough memory to sort relocations"
+msgstr "memorie insuficientÄƒ pentru a sorta realocÄƒrile"
+
+#: elflink.c:10273
+#, c-format
+msgid "%pB: too many sections: %d (>= %d)"
+msgstr "%pB: prea multe secÈ›iuni: %d (>= %d)"
+
+#: elflink.c:10549
+#, c-format
+msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
+msgstr "%pB: simbolul intern â€ž%sâ€� din %pB este referit de cÄƒtre DSO"
+
+#: elflink.c:10552
+#, c-format
+msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
+msgstr "%pB: simbolul ascuns â€ž%sâ€� din %pB este referit de cÄƒtre DSO"
+
+#: elflink.c:10555
+#, c-format
+msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
+msgstr "%pB: simbolul local â€ž%sâ€� din %pB este referit de cÄƒtre DSO"
+
+#: elflink.c:10641
+#, c-format
+msgid "%pB: could not find output section %pA for input section %pA"
+msgstr "%pB: nu s-a putut gÄƒsi secÈ›iunea de ieÈ™ire %pA pentru secÈ›iunea de intrare %pA"
+
+#: elflink.c:10795
+#, c-format
+msgid "%pB: protected symbol `%s' isn't defined"
+msgstr "%pB: simbolul protejat â€ž%sâ€� nu este definit"
+
+#: elflink.c:10798
+#, c-format
+msgid "%pB: internal symbol `%s' isn't defined"
+msgstr "%pB: simbolul intern â€ž%sâ€� nu este definit"
+
+#: elflink.c:10801
+#, c-format
+msgid "%pB: hidden symbol `%s' isn't defined"
+msgstr "%pB: simbolul ascuns â€ž%sâ€� nu este definit"
+
+#: elflink.c:10833
+#, c-format
+msgid "%pB: no symbol version section for versioned symbol `%s'"
+msgstr "%pB: nicio secÈ›iune de versiune a simbolului pentru simbolul cu versiunea â€ž%sâ€�"
+
+#: elflink.c:11514
+#, c-format
+msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
+msgstr "eroare: %pB conÈ›ine o realocare (%#<PRIx64>) pentru secÈ›iunea %pA care face referire la un simbol global inexistent"
+
+#: elflink.c:11984
+#, c-format
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "eroare: %pB: dimensiunea secÈ›iunii %pA nu este multiplu al dimensiunii adresei"
+
+#: elflink.c:12261
+#, c-format
+msgid "%pB: no symbol found for import library"
+msgstr "%pB: nu a fost gÄƒsit niciun simbol pentru biblioteca de import"
+
+#: elflink.c:12836
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr "%F%P: %pB: eÈ™ec la finalizarea realocÄƒrilor relative\n"
+
+#: elflink.c:12913
+#, c-format
+msgid "%pB: file class %s incompatible with %s"
+msgstr "%pB: clasa de fiÈ™iere %s este incompatibilÄƒ cu %s"
+
+#: elflink.c:13162
+#, c-format
+msgid "%pB: failed to generate import library"
+msgstr "%pB: eÈ™ec la generarea bibliotecii de import"
+
+#: elflink.c:13330
 #, c-format
 msgid "warning: %s section has zero size"
-msgstr "avertisment: secþiunea %s are mãrime zero"
+msgstr "avertisment: secÈ›iunea %s are dimensiunea zero"
 
-#: elflink.h:4483
+#: elflink.c:13378
 #, c-format
-msgid "%s: %s symbol `%s' in %s is referenced by DSO"
-msgstr "%s: %s simbolul `%s' în %s este referit de DSO"
+msgid "warning: section '%s' is being made into a note"
+msgstr "avertisment: secÈ›iunea â€ž%sâ€� este transformatÄƒ Ã®ntr-o notÄƒ"
+
+#: elflink.c:13472
+msgid "%P%X: read-only segment has dynamic relocations\n"
+msgstr "%P%X: segmentul numai-pentru-citire are realocÄƒri dinamice\n"
+
+#: elflink.c:13475
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
+msgstr "%P: avertisment: se creeazÄƒ DT_TEXTREL Ã®ntr-un obiect partajat\n"
 
-#: elflink.h:4564
+#: elflink.c:13478
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr "%P: avertisment: se creeazÄƒ DT_TEXTREL Ã®ntr-un PDE\n"
+
+#: elflink.c:13481
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr "%P: avertisment: se creeazÄƒ DT_TEXTREL Ã®ntr-un PIE\n"
+
+#: elflink.c:13617
+msgid "%P%X: can not read symbols: %E\n"
+msgstr "%P%X: nu se poate citi simbolurile: %E\n"
+
+#: elflink.c:14042
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
+msgstr "%F%P: %pB(%pA): eroare: opÈ›iunea â€ž--gc-sectionsâ€� necesitÄƒ o secÈ›iune ataÈ™atÄƒ ca argument\n"
+
+#: elflink.c:14520
 #, c-format
-msgid "%s: could not find output section %s for input section %s"
-msgstr "%s: nu am putut gãsi secþiunea de output %s pentru secþiunea de input %s"
+msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
+msgstr "%pB: %pA+%#<PRIx64>: nu a fost gÄƒsit niciun simbol pentru INHERIT"
 
-#: elflink.h:4666
+#: elflink.c:14561
 #, c-format
-msgid "%s: %s symbol `%s' isn't defined"
-msgstr "%s: %s simbolul `%s' nu este definit"
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: secÈ›iunea â€ž%pAâ€�: intrarea VTENTRY coruptÄƒ"
 
-#: elflink.h:5053 elflink.h:5095
-msgid "%T: discarded in section `%s' from %s\n"
-msgstr "%T: abandonat(discarded) în secþiunea `%s' din %s\n"
+#: elflink.c:14704
+#, c-format
+msgid "unrecognized INPUT_SECTION_FLAG %s\n"
+msgstr "INPUT_SECTION_FLAG nerecunoscut %s\n"
 
-#: elfxx-mips.c:887
+#: elflink.c:15487
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%P: %pB: avertisment: realocare faÈ›Äƒ de â€ž%sâ€� Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�\n"
+
+#: elflink.c:15576
+msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
+msgstr "%P: avertisment: FuncÈ›iile indirecte GNU cu DT_TEXTREL pot avea ca rezultat o eroare de segmentare Ã®n timpul execuÈ›iei; recompilaÈ›i cu %s\n"
+
+#: elfxx-aarch64.c:477
+#, c-format
+msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr "%pB: avertisment: TLS slab este definit de implementare È™i este posibil sÄƒ nu funcÈ›ioneze conform aÈ™teptÄƒrilor"
+
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:10231 elfnn-aarch64.c:10238
+#, c-format
+msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
+msgstr "%pB: avertisment: BTI activat prin â€ž-z force-btiâ€� atunci cÃ¢nd toate intrÄƒrile nu au BTI Ã®n secÈ›iunea NOTE."
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr "eroare: %pB: <dimensiunea utilizatÄƒ de AArch64 este coruptÄƒ: 0x%x>"
+
+#: elfxx-loongarch.c:1909
+#, c-format
+msgid "%pB: unsupported relocation type %s"
+msgstr "%pB: tip de relocare neacceptat %s"
+
+#: elfxx-loongarch.c:1937
+#, c-format
+msgid "%pB: unsupported bfd relocation type %#x"
+msgstr "%pB: tip de realocare bfd neacceptat %#x"
+
+#: elfxx-loongarch.c:2009
+#, c-format
+msgid "%pB: relocation %s right shift %d error 0x%lx"
+msgstr "%pB: realocare %s deplasare dreapta %d eroare 0x%lx"
+
+#: elfxx-loongarch.c:2028
+#, c-format
+msgid "%pB: relocation %s overflow 0x%lx"
+msgstr "%pB: realocare %s depÄƒÈ™ire 0x%lx"
+
+#: elfxx-mips.c:1541
 msgid "static procedure (no name)"
-msgstr "procedurã staticã (fãrã nume)"
+msgstr "procedurÄƒ staticÄƒ (fÄƒrÄƒ nume)"
 
-#: elfxx-mips.c:1897
-msgid "not enough GOT space for local GOT entries"
-msgstr "nu existã destul spaþiu GOT pentru intrãrile GOT locale"
+#: elfxx-mips.c:5857
+msgid "MIPS16 and microMIPS functions cannot call each other"
+msgstr "FuncÈ›iile MIPS16 È™i microMIPS nu se pot apela Ã®ntre ele"
+
+#: elfxx-mips.c:6627
+msgid "%X%H: unsupported JALX to the same ISA mode\n"
+msgstr "%X%H: JALX neacceptat pentru acelaÈ™i mod ISA\n"
+
+#: elfxx-mips.c:6660
+msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n"
+msgstr "%X%H: salt nesuportat Ã®ntre modurile ISA; luaÈ›i Ã®n considerare recompilarea cu inter-vincularea (interlinking) activatÄƒ\n"
+
+#: elfxx-mips.c:6705
+msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n"
+msgstr "%X%H: nu se poate converti ramura dintre modurile ISA Ã®n JALX: realocare Ã®n afara intervalului\n"
+
+#: elfxx-mips.c:6717
+msgid "%X%H: unsupported branch between ISA modes\n"
+msgstr "%X%H: ramurÄƒ neacceptatÄƒ Ã®ntre modurile ISA\n"
+
+#: elfxx-mips.c:7350
+#, c-format
+msgid "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
+msgstr "%pB: dimensiunea secÈ›iunii â€ž.reginfoâ€� este incorectÄƒ; se aÈ™tepta %<PRIu64>, s-a primit %<PRIu64>"
+
+#: elfxx-mips.c:7394
+#, c-format
+msgid "%pB: warning: bad `%s' option size %u smaller than its header"
+msgstr "%pB: avertisment: opÈ›iunea â€ž%sâ€� greÈ™itÄƒ, dimensiunea %u mai micÄƒ decÃ¢t antetul sÄƒu"
+
+#: elfxx-mips.c:7630
+#, c-format
+msgid "%pB: warning: truncated `%s' option"
+msgstr "%pB: avertisment: opÈ›iunea â€ž%sâ€� este trunchiatÄƒ"
+
+#: elfxx-mips.c:8454 elfxx-mips.c:8580
+#, c-format
+msgid "%pB: warning: cannot determine the target function for stub section `%s'"
+msgstr "%pB: avertisment: nu se poate determina funcÈ›ia È›intÄƒ pentru secÈ›iunea ciot(stub) â€ž%sâ€�"
+
+#: elfxx-mips.c:8712
+#, c-format
+msgid "%pB: malformed reloc detected for section %s"
+msgstr "%pB: realocare incorect formatÄƒ detectatÄƒ pentru secÈ›iunea %s"
+
+#: elfxx-mips.c:8812
+#, c-format
+msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
+msgstr "%pB: realocarea GOT la %#<PRIx64> nu se aÈ™teaptÄƒ Ã®n executabile"
+
+#: elfxx-mips.c:8952
+#, c-format
+msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
+msgstr "%pB: realocarea CALL16 la %#<PRIx64> nu este faÈ›Äƒ de simbol global"
+
+#: elfxx-mips.c:9255
+#, c-format
+msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n"
+msgstr "%X%H: realocarea %s faÈ›Äƒ de â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�\n"
+
+#: elfxx-mips.c:9381
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr "Simbol IFUNC %s Ã®n tabelul dinamic de simboluri - simbolurile IFUNCS nu sunt acceptate"
+
+#: elfxx-mips.c:9384
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr "simbol non-dinamic %s Ã®n tabelul de simboluri dinamice"
+
+#: elfxx-mips.c:9604
+#, c-format
+msgid "non-dynamic relocations refer to dynamic symbol %s"
+msgstr "realocÄƒri non-dinamice se referÄƒ la simbolul dinamic %s"
+
+#: elfxx-mips.c:10539
+#, c-format
+msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %#<PRIx64> in section `%pA'"
+msgstr "%pB: nu se poate gÄƒsi realocarea LO16 care se potriveÈ™te cu â€ž%sâ€� pentru %s la %#<PRIx64> Ã®n secÈ›iunea â€ž%pAâ€�"
+
+#: elfxx-mips.c:10679
+msgid "small-data section too large; lower small-data size limit (see option -G)"
+msgstr "secÈ›iunea de date de mici dimensiuni este prea mare; reduceÈ›i limita dimensiunii datelor de mici dimensiuni (consultaÈ›i opÈ›iunea â€ž-Gâ€�)"
+
+#: elfxx-mips.c:10698
+msgid "cannot convert a jump to JALX for a non-word-aligned address"
+msgstr "nu se poate converti un salt Ã®n JALX pentru o adresÄƒ nealiniatÄƒ la cuvinte"
+
+#: elfxx-mips.c:10701
+msgid "jump to a non-word-aligned address"
+msgstr "salt la o adresÄƒ nealiniatÄƒ la cuvinte"
+
+#: elfxx-mips.c:10702
+msgid "jump to a non-instruction-aligned address"
+msgstr "salt la o adresÄƒ nealiniatÄƒ la instrucÈ›iuni"
+
+#: elfxx-mips.c:10705
+msgid "cannot convert a branch to JALX for a non-word-aligned address"
+msgstr "nu se poate converti o ramurÄƒ Ã®n JALX pentru o adresÄƒ nealiniatÄƒ la cuvinte"
+
+#: elfxx-mips.c:10707
+msgid "branch to a non-instruction-aligned address"
+msgstr "ramura la o adresÄƒ nealiniatÄƒ la instrucÈ›iuni"
+
+#: elfxx-mips.c:10709
+msgid "PC-relative load from unaligned address"
+msgstr "Ã®ncÄƒrcare relativÄƒ la PC de la o adresÄƒ nealiniatÄƒ"
+
+#: elfxx-mips.c:11009
+#, c-format
+msgid "%pB: `%pA' entry VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
+msgstr "%pB: intrarea â€ž%pAâ€� VMA de %#<PRIx64> Ã®n afara intervalului de 32 de biÈ›i acceptat; luaÈ›i Ã®n considerare utilizarea â€ž-Ttext-segment=...â€�"
+
+#: elfxx-mips.c:11124 elfxx-mips.c:11711
+#, c-format
+msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
+msgstr "%pB: â€ž%pAâ€� decalajul lui %<PRId64> de la â€ž%pAâ€� dincolo de intervalul ADDIUPC"
+
+#: elfxx-mips.c:11683
+#, c-format
+msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
+msgstr "%pB: Ã®nceputul lui â€ž%pAâ€� â€‹â€‹VMA din %#<PRIx64> se aflÄƒ Ã®n afara intervalului de 32 de biÈ›i acceptat; Ã®ncercaÈ›i sÄƒ utilizaÈ›i â€ž-Ttext-segment=...â€�"
+
+#: elfxx-mips.c:13429 reloc.c:8605
+#, c-format
+msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgstr "%X%P: %pB(%pA): eroare: realocarea pentru poziÈ›ia %V nu are nicio valoare\n"
+
+#: elfxx-mips.c:14741
+#, c-format
+msgid "%pB: unknown architecture %s"
+msgstr "%pB: arhitecturÄƒ necunoscutÄƒ %s"
+
+#: elfxx-mips.c:15269
+#, c-format
+msgid "%pB: illegal section name `%pA'"
+msgstr "%pB: nume de secÈ›iune ilegal â€ž%pAâ€�"
+
+#: elfxx-mips.c:15546
+#, c-format
+msgid "%pB: warning: linking abicalls files with non-abicalls files"
+msgstr "%pB: avertisment: se vinculeazÄƒ fiÈ™iere abicals cu fiÈ™iere non-abicals"
+
+#: elfxx-mips.c:15563
+#, c-format
+msgid "%pB: linking 32-bit code with 64-bit code"
+msgstr "%pB: se vinculeazÄƒ cod pe 32 de biÈ›i cu un cod pe 64 de biÈ›i"
+
+#: elfxx-mips.c:15595 elfxx-mips.c:15661 elfxx-mips.c:15676
+#, c-format
+msgid "%pB: linking %s module with previous %s modules"
+msgstr "%pB: se vinculeazÄƒ modulul %s cu modulele %s anterioare"
+
+#: elfxx-mips.c:15619
+#, c-format
+msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
+msgstr "%pB: nepotrivire ABI: se vinculeazÄƒ modulul %s cu modulele %s anterioare"
+
+#: elfxx-mips.c:15644
+#, c-format
+msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
+msgstr "%pB: nepotrivire ASE: se vinculeazÄƒ modulul %s cu modulele %s anterioare"
+
+#: elfxx-mips.c:15778
+#, c-format
+msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
+msgstr "avertisment: %pB foloseÈ™te ABI Ã®n virgulÄƒ mobilÄƒ necunoscutÄƒ %d (definitÄƒ de %pB), %pB utilizeazÄƒ ABI Ã®n virgulÄƒ mobilÄƒ necunoscutÄƒ %d"
+
+#: elfxx-mips.c:15784
+#, c-format
+msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
+msgstr "avertisment: %pB foloseÈ™te ABI Ã®n virgulÄƒ mobilÄƒ necunoscutÄƒ %d (definitÄƒ de %pB), %pB foloseÈ™te %s"
+
+#: elfxx-mips.c:15790
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
+msgstr "avertisment: %pB foloseÈ™te %s (definitÄƒ de %pB), %pB foloseÈ™te ABI Ã®n virgulÄƒ mobilÄƒ necunoscutÄƒ %d"
+
+#: elfxx-mips.c:15804
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
+msgstr "avertisment: %pB foloseÈ™te %s (definitÄƒ de %pB), %pB foloseÈ™te %s"
 
-#: elfxx-mips.c:3691
+#: elfxx-mips.c:15823
 #, c-format
-msgid "%s: %s+0x%lx: jump to stub routine which is not jal"
-msgstr "%s: %s+0x%lx: salt la rutinã ciot(stub) ce nu este jal"
+msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
+msgstr "avertisment: %pB foloseÈ™te %s (definit de %pB), %pB foloseÈ™te ABI MSA necunoscut %d"
 
-#: elfxx-mips.c:5192
+#: elfxx-mips.c:15835
 #, c-format
-msgid "%s: Malformed reloc detected for section %s"
-msgstr "%s: Relocare malformatã detectatã pentru secþiunea %s"
+msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
+msgstr "avertisment: %pB foloseÈ™te ABI MSA necunoscut %d (definit de %pB), %pB foloseÈ™te %s"
 
-#: elfxx-mips.c:5266
+#: elfxx-mips.c:15844
 #, c-format
-msgid "%s: CALL16 reloc at 0x%lx not against global symbol"
-msgstr "%s: relocarea CALL16 la 0x%lx nu este pe simbolul global"
+msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
+msgstr "avertisment: %pB foloseÈ™te ABI MSA necunoscut %d (definit de %pB) È™i %pB foloseÈ™te ABI MSA necunoscut %d"
 
-#: elfxx-mips.c:8692
+#: elfxx-mips.c:15906
 #, c-format
-msgid "%s: illegal section name `%s'"
-msgstr "%s: nume ilegal de secþiune `%s'"
+msgid "%pB: endianness incompatible with that of the selected emulation"
+msgstr "%pB: tip de endianness incompatibil cu cel al emulaÈ›iei selectate"
 
-#: elfxx-mips.c:9025
+#: elfxx-mips.c:15920
 #, c-format
-msgid "%s: endianness incompatible with that of the selected emulation"
-msgstr "%s: endianness incompatibilã cu aceea a emulaþiei selectate"
+msgid "%pB: ABI is incompatible with that of the selected emulation"
+msgstr "%pB: ABI este incompatibil cu cel al emulaÈ›iei selectate"
 
-#: elfxx-mips.c:9037
+#: elfxx-mips.c:15973
 #, c-format
-msgid "%s: ABI is incompatible with that of the selected emulation"
-msgstr "%s: ABI este incompatibil cu cel al emulaþiei selectate"
+msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
+msgstr "%pB: avertisment: ISA inconsistent Ã®ntre e_flags È™i .MIPS.abiflags"
 
-#: elfxx-mips.c:9104
+#: elfxx-mips.c:15978
 #, c-format
-msgid "%s: warning: linking PIC files with non-PIC files"
-msgstr "%s: avertisment: linkuire de fiºiere PIC cu fiºiere non-PIC"
+msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
+msgstr "%pB: warning: ABI FP inconsistent Ã®ntre .gnu.attributes È™i .MIPS.abiflags"
 
-#: elfxx-mips.c:9121
+#: elfxx-mips.c:15982
 #, c-format
-msgid "%s: linking 32-bit code with 64-bit code"
-msgstr "%s: linkuire cod 32-biþi cu cod 64-biþi"
+msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
+msgstr "%pB: avertisment: ASE-uri inconsistente Ã®ntre e_flags È™i .MIPS.abiflags"
 
-#: elfxx-mips.c:9149
+#: elfxx-mips.c:15989
 #, c-format
-msgid "%s: linking %s module with previous %s modules"
-msgstr "%s: linkuire a modulului %s cu modulele%s anterioare"
+msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
+msgstr "%pB: avertisment: extensii ISA inconsistente Ã®ntre e_flags È™i .MIPS.abiflags"
 
-#: elfxx-mips.c:9172
+#: elfxx-mips.c:15993
 #, c-format
-msgid "%s: ABI mismatch: linking %s module with previous %s modules"
-msgstr "%s: nepotrivire ABI: linkuire modul %s cu module %s anterioare"
+msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
+msgstr "%pB: warning: fanion neaÈ™teptat Ã®n cÃ¢mpul flags2 din .MIPS.abiflags (0x%lx)"
+
+#: elfxx-mips.c:16184
+msgid "-mips32r2 -mfp64 (12 callee-saved)"
+msgstr "-mips32r2 -mfp64 (12 apeluri salvate)"
+
+#: elfxx-mips.c:16246 elfxx-mips.c:16257
+msgid "None"
+msgstr "Niciunul"
+
+#: elfxx-mips.c:16248 elfxx-mips.c:16317
+msgid "Unknown"
+msgstr "Necunoscut"
 
-#: elfxx-mips.c:9241
+#: elfxx-mips.c:16328
+#, c-format
+msgid "Hard or soft float\n"
+msgstr "VirgulÄƒ mobilÄƒ hardware sau software\n"
+
+#: elfxx-mips.c:16331
+#, c-format
+msgid "Hard float (double precision)\n"
+msgstr "VirgulÄƒ mobilÄƒ hardware (de precizie dublÄƒ)\n"
+
+#: elfxx-mips.c:16334
+#, c-format
+msgid "Hard float (single precision)\n"
+msgstr "VirgulÄƒ flotantÄƒ hardware (de precizie simplÄƒ)\n"
+
+#: elfxx-mips.c:16337
+#, c-format
+msgid "Soft float\n"
+msgstr "VirgulÄƒ mobilÄƒ software\n"
+
+#: elfxx-mips.c:16340
+#, c-format
+msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
+msgstr "VirgulÄƒ mobilÄƒ hardware (MIPS32r2 pe 64 de biÈ›i, FPU 12 callee-saved)\n"
+
+#: elfxx-mips.c:16343
+#, c-format
+msgid "Hard float (32-bit CPU, Any FPU)\n"
+msgstr "VirgulÄƒ mobilÄƒ hardware (procesor pe 32 de biÈ›i, orice FPU)\n"
+
+#: elfxx-mips.c:16346
+#, c-format
+msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
+msgstr "VirgulÄƒ mobilÄƒ hardware (procesor pe 32 de biÈ›i, FPU pe 64 biÈ›i)\n"
+
+#: elfxx-mips.c:16349
+#, c-format
+msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
+msgstr "VirgulÄƒ mobilÄƒ de compatibilitate hardware (procesor pe 32 de biÈ›i, FPU pe 64 biÈ›i)\n"
+
+#: elfxx-mips.c:16381
+#, c-format
 msgid " [abi=O32]"
 msgstr " [abi=O32]"
 
-#: elfxx-mips.c:9243
+#: elfxx-mips.c:16383
+#, c-format
 msgid " [abi=O64]"
 msgstr " [abi=O64]"
 
-#: elfxx-mips.c:9245
+#: elfxx-mips.c:16385
+#, c-format
 msgid " [abi=EABI32]"
 msgstr " [abi=EABI32]"
 
-#: elfxx-mips.c:9247
+#: elfxx-mips.c:16387
+#, c-format
 msgid " [abi=EABI64]"
 msgstr " [abi=EABI64]"
 
-#: elfxx-mips.c:9249
+#: elfxx-mips.c:16389
+#, c-format
 msgid " [abi unknown]"
 msgstr " [abi necunoscut]"
 
-#: elfxx-mips.c:9251
+#: elfxx-mips.c:16391
+#, c-format
 msgid " [abi=N32]"
 msgstr " [abi=N32]"
 
-#: elfxx-mips.c:9253
+#: elfxx-mips.c:16393
+#, c-format
 msgid " [abi=64]"
 msgstr " [abi=64]"
 
-#: elfxx-mips.c:9255
+#: elfxx-mips.c:16395
+#, c-format
 msgid " [no abi set]"
-msgstr " [abi nesetat]"
+msgstr " [abi nedefinit]"
+
+#: elfxx-mips.c:16420
+#, c-format
+msgid " [unknown ISA]"
+msgstr " [ISA necunoscut]"
+
+#: elfxx-mips.c:16440
+#, c-format
+msgid " [not 32bitmode]"
+msgstr " [nu este modul pe 32 de biÈ›i]"
+
+#: elfxx-riscv.c:1699
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr "extensia x ISA â€ž%s'â€� trebuie definitÄƒ cu versiunile"
+
+#: elfxx-riscv.c:1705
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr "nu se pot gÄƒsi versiunile implicite ale extensiei ISA â€ž%sâ€�"
 
-#: elfxx-mips.c:9258
-msgid " [mips1]"
-msgstr " [mips1]"
+#: elfxx-riscv.c:1811
+#, c-format
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr "%s: prima extensie ISA trebuie sÄƒ fie â€žeâ€�, â€žiâ€� sau â€žgâ€�"
 
-#: elfxx-mips.c:9260
-msgid " [mips2]"
-msgstr " [mips2]"
+#: elfxx-riscv.c:1835
+#, c-format
+msgid "%s: unknown standard ISA extension or prefix class `%c'"
+msgstr "%s: extensie ISA standard sau clasÄƒ de prefix â€ž%câ€� necunoscutÄƒ"
 
-#: elfxx-mips.c:9262
-msgid " [mips3]"
-msgstr " [mips3]"
+#: elfxx-riscv.c:1871
+#, c-format
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr "%s: extensia ISA cu prefix nevalid â€ž%sâ€� se terminÄƒ cu <numÄƒr>p"
 
-#: elfxx-mips.c:9264
-msgid " [mips4]"
-msgstr " [mips4]"
+#: elfxx-riscv.c:1895
+#, c-format
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr "%s: extensie ISA cu prefix necunoscut â€ž%sâ€�"
 
-#: elfxx-mips.c:9266
-msgid " [mips5]"
-msgstr " [mips5]"
+#: elfxx-riscv.c:1919
+#, c-format
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr "%s: extensia ISA cu prefix trebuie separatÄƒ cu _"
 
-#: elfxx-mips.c:9268
-msgid " [mips32]"
-msgstr " [mips32]"
+#: elfxx-riscv.c:1973
+#, c-format
+msgid "rv%de does not support the `h' extension"
+msgstr "rv%de nu acceptÄƒ extensia â€žhâ€�"
 
-#: elfxx-mips.c:9270
-msgid " [mips64]"
-msgstr " [mips64]"
+#: elfxx-riscv.c:1981
+#, c-format
+msgid "rv%d does not support the `q' extension"
+msgstr "rv%d nu acceptÄƒ extensia â€žqâ€�"
 
-#: elfxx-mips.c:9272
-msgid " [mips32r2]"
-msgstr " [mips32r2]"
+#: elfxx-riscv.c:1988
+#, c-format
+msgid "rv%d does not support the `zcf' extension"
+msgstr "rv%d nu acceptÄƒ extensia â€žzcfâ€�"
 
-#: elfxx-mips.c:9274
-msgid " [unknown ISA]"
-msgstr " [ISA necunoscut]"
+#: elfxx-riscv.c:1995
+msgid "`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"
+msgstr "â€žzfinxâ€� este Ã®n conflict cu extensia â€žf/d/q/zfh/zfhminâ€�"
 
-#: elfxx-mips.c:9277
-msgid " [mdmx]"
-msgstr " [mdmx]"
-
-#: elfxx-mips.c:9280
-msgid " [mips16]"
-msgstr " [mips16]"
-
-#: elfxx-mips.c:9283
-msgid " [32bitmode]"
-msgstr " [mod32biþi]"
+#: elfxx-riscv.c:2002
+msgid "`xtheadvector' is conflict with the `v' extension"
+msgstr "â€žxtheadvectorâ€� este Ã®n conflict cu extensia â€žvâ€�"
 
-#: elfxx-mips.c:9285
-msgid " [not 32bitmode]"
-msgstr " [non-mod32biþi]"
+#: elfxx-riscv.c:2023
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr "extensiile zvl*b trebuie sÄƒ activeze fie extensia â€žvâ€� fie extensia â€žzveâ€�"
+
+#: elfxx-riscv.c:2085
+#, c-format
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr "%s: È™irul ISA nu poate conÈ›ine litere mari"
+
+#: elfxx-riscv.c:2113
+#, c-format
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr "%s: È™irul ISA trebuie sÄƒ Ã®nceapÄƒ cu rv32 sau rv64"
 
-#: i386linux.c:457 m68klinux.c:461 sparclinux.c:458
+#: elfxx-riscv.c:2339
 #, c-format
-msgid "Output file requires shared library `%s'\n"
-msgstr "Fiºierul de output necesitã biblioteca globalã(shared) `%s'\n"
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr "extensia ISA nevalidÄƒ se terminÄƒ cu <numÄƒr>p Ã®n .option arhitectura â€ž%sâ€�"
 
-#: i386linux.c:465 m68klinux.c:469 sparclinux.c:466
+#: elfxx-riscv.c:2362
 #, c-format
-msgid "Output file requires shared library `%s.so.%s'\n"
-msgstr "Fiºierul de output necesitã biblioteca globalã(shared) `%s'.so.`%s'\n"
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr "extensie ISA necunoscutÄƒ â€ž%sâ€� Ã®n .option arhitectura â€ž%sâ€�"
 
-#: i386linux.c:654 i386linux.c:704 m68klinux.c:661 m68klinux.c:709
-#: sparclinux.c:656 sparclinux.c:706
+#: elfxx-riscv.c:2373
 #, c-format
-msgid "Symbol %s not defined for fixups\n"
-msgstr "Simbolul %s nu este definit pentru acceptare(fixups)\n"
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr "nu se poate + sau - extensia de bazÄƒ â€ž%sâ€� Ã®n .option arhitectura â€ž%sâ€�"
+
+#: elfxx-riscv.c:2613 elfxx-riscv.c:2861
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr "intern: inaccesibilÄƒ INSN_CLASS_*"
+
+#: elfxx-riscv.c:2648
+msgid "zihintntl' and `c', or `zihintntl' and `zca"
+msgstr "zihintntlâ€œ È™i â€žcâ€œ, sau â€žzihintntlâ€œ È™i â€žzca"
+
+#: elfxx-riscv.c:2653 elfxx-riscv.c:2671
+msgid "c' or `zca"
+msgstr "câ€œ sau â€žzca"
+
+#: elfxx-riscv.c:2659
+msgid "m' or `zmmul"
+msgstr "mâ€œ sau â€žzmmul"
+
+#: elfxx-riscv.c:2677
+msgid "f' and `c', or `f' and `zcf"
+msgstr "fâ€œ È™i â€žcâ€œ, sau â€žfâ€œ È™i â€žzcf"
+
+#: elfxx-riscv.c:2682
+msgid "c' or `zcf"
+msgstr "câ€œ sau â€žzcf"
+
+#: elfxx-riscv.c:2688
+msgid "d' and `c', or `d' and `zcd"
+msgstr "dâ€œ È™i â€žcâ€œ, sau â€ždâ€œ È™i â€žzcd"
+
+#: elfxx-riscv.c:2693
+msgid "c' or `zcd"
+msgstr "câ€œ sau â€žzcd"
+
+#: elfxx-riscv.c:2695
+msgid "f' or `zfinx"
+msgstr "fâ€œ sau â€žzfinx"
+
+#: elfxx-riscv.c:2697
+msgid "d' or `zdinx"
+msgstr "dâ€œ sau â€žzdinx"
+
+#: elfxx-riscv.c:2699
+msgid "q' or `zqinx"
+msgstr "qâ€œ sau â€žzqinx"
+
+#: elfxx-riscv.c:2701
+msgid "zfh' or `zhinx"
+msgstr "zfhâ€œ sau â€žzhinx"
+
+#: elfxx-riscv.c:2705
+msgid "zfhmin' or `zhinxmin"
+msgstr "zfhminâ€œ sau â€žzhinxmin"
+
+#: elfxx-riscv.c:2716
+msgid "zfhmin' and `d', or `zhinxmin' and `zdinx"
+msgstr "zfhminâ€œ È™i â€ždâ€œ, sau â€žzhinxminâ€œ È™i â€žzdinx"
+
+#: elfxx-riscv.c:2727
+msgid "zfhmin' and `q', or `zhinxmin' and `zqinx"
+msgstr "zfhminâ€œ È™i â€žqâ€œ, sau â€žzhinxminâ€œ È™i â€žzqinx"
+
+#: elfxx-riscv.c:2733
+msgid "d' and `zfa"
+msgstr "dâ€œ È™i â€žzfa"
+
+#: elfxx-riscv.c:2741
+msgid "q' and `zfa"
+msgstr "qâ€œ È™i â€žzfa"
+
+#: elfxx-riscv.c:2749
+msgid "zfh' and `zfa"
+msgstr "zfhâ€œ È™i â€žzfa"
+
+#: elfxx-riscv.c:2759
+msgid "zfh' and `zfa', or `zvfh' and `zfa"
+msgstr "zfhâ€œ È™i â€žzfaâ€œ, sau â€žzvfhâ€œ È™i â€žzfa"
+
+#: elfxx-riscv.c:2764
+msgid "zfh' or `zvfh"
+msgstr "zfhâ€œ sau â€žzvfh"
+
+#: elfxx-riscv.c:2780
+msgid "zbb' or `zbkb"
+msgstr "zbbâ€œ sau â€žzbkb"
+
+#: elfxx-riscv.c:2782
+msgid "zbc' or `zbkc"
+msgstr "zbcâ€œ sau â€žzbkc"
+
+#: elfxx-riscv.c:2790
+msgid "zknd' or `zkne"
+msgstr "zkndâ€œ sau â€žzkne"
+
+#: elfxx-riscv.c:2796
+msgid "v' or `zve64x' or `zve32x"
+msgstr "vâ€œ sau â€žzve64xâ€œ sau â€žzve32x"
+
+#: elfxx-riscv.c:2798
+msgid "v' or `zve64d' or `zve64f' or `zve32f"
+msgstr "vâ€œ sau â€žzve64dâ€œ sau â€žzve64fâ€œ sau â€žzve32f"
 
-#: i386linux.c:728 m68klinux.c:733 sparclinux.c:730
-msgid "Warning: fixup count mismatch\n"
-msgstr "Avertisment: nepotrivire numãrãtori acceptare(fixup)\n"
+#: elfxx-riscv.c:2800
+msgid "zvbb"
+msgstr "zvbb"
 
-#: ieee.c:293
+#: elfxx-riscv.c:2802
+msgid "zvbc"
+msgstr "zvbc"
+
+#: elfxx-riscv.c:2804
+msgid "zvkb"
+msgstr "zvkb"
+
+#: elfxx-riscv.c:2806
+msgid "zvkg"
+msgstr "zvkg"
+
+#: elfxx-riscv.c:2808
+msgid "zvkned"
+msgstr "zvkned"
+
+#: elfxx-riscv.c:2810
+msgid "zvknha' or `zvknhb"
+msgstr "zvknhaâ€œ sau â€žzvknhb"
+
+#: elfxx-riscv.c:2812
+msgid "zvksed"
+msgstr "zvksed"
+
+#: elfxx-riscv.c:2814
+msgid "zvksh"
+msgstr "zvksh"
+
+#: elfxx-riscv.c:2818
+msgid "zcb' and `zba"
+msgstr "zcbâ€œ È™i â€žzba"
+
+#: elfxx-riscv.c:2820
+msgid "zcb' and `zbb"
+msgstr "zcbâ€œ È™i â€žzbb"
+
+#: elfxx-riscv.c:2822
+msgid "zcb' and `zmmul', or `zcb' and `m"
+msgstr "zcbâ€œ È™i â€žzmmulâ€œ, sau â€žzcbâ€œ È™i â€žm"
+
+#: elfxx-riscv.c:2826
+msgid "h"
+msgstr "h"
+
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5738
 #, c-format
-msgid "%s: string too long (%d chars, max 65535)"
-msgstr "%s: ºir prea lung (%d caractere, max 65535)"
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
+msgstr "%pB: realocarea %s faÈ›Äƒ de simbolul STT_GNU_IFUNC â€ž%sâ€� nu este gestionatÄƒ de %s"
 
-#: ieee.c:428
+#: elfxx-tilegx.c:4126
 #, c-format
-msgid "%s: unrecognized symbol `%s' flags 0x%x"
-msgstr "%s: simbol necunoscut `%s' marcaje(flags) 0x%x"
+msgid "%pB: cannot link together %s and %s objects"
+msgstr "%pB: nu se pot vincula Ã®mpreunÄƒ obiectele %s È™i %s"
 
-#: ieee.c:938
+#: elfxx-x86.c:536 elfxx-x86.c:3440
 #, c-format
-msgid "%s: unimplemented ATI record %u for symbol %u"
-msgstr "%s: înregistrare ATI neimplementatã %u pe simbolul %u"
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB\n"
+msgstr "%F%P: %pB: realocare copiere faÈ›Äƒ de simbolul protejat necopiabil â€ž%sâ€� din %pB\n"
 
-#: ieee.c:963
+#: elfxx-x86.c:1043
 #, c-format
-msgid "%s: unexpected ATN type %d in external part"
-msgstr "%s: tip ATN neaºteptat %d în parte externã"
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr "%F%P: %pB: a eÈ™uat alocarea Ã®nregistrÄƒrii realocÄƒrii relative\n"
 
-#: ieee.c:985
+#: elfxx-x86.c:1399
 #, c-format
-msgid "%s: unexpected type after ATN"
-msgstr "%s: tip neaºteptat dupã ATN"
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: a eÈ™uat alocarea hÄƒrÈ›ii de biÈ›i DT_RELR pe 64 de biÈ›i\n"
 
-#: ihex.c:264
+#: elfxx-x86.c:1435
 #, c-format
-msgid "%s:%d: unexpected character `%s' in Intel Hex file\n"
-msgstr "%s:%d: caracter neaºteptat `%s' în fiºier Intel Hex\n"
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: a eÈ™uat alocarea hÄƒrÈ›ii de biÈ›i DT_RELR pe 32 de biÈ›i\n"
 
-#: ihex.c:372
+#: elfxx-x86.c:1574
 #, c-format
-msgid "%s:%u: bad checksum in Intel Hex file (expected %u, found %u)"
-msgstr "%s:%u: checksum invalid în fiºier Intel Hex (se aºtepta %u, s-a gãsit %u)"
+msgid "%F%P: %pB: failed to allocate memory for section `%pA'\n"
+msgstr "%F%P: %pB: a eÈ™uat alocarea memoriei pentru secÈ›iunea â€ž%pAâ€�\n"
 
-#: ihex.c:426
+#: elfxx-x86.c:1761
 #, c-format
-msgid "%s:%u: bad extended address record length in Intel Hex file"
-msgstr "%s: %u: mãrime înregistrare a adresei extinse invalidã în fiºier Intel Hex"
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr "%F%P: %pB: dimensiunea secÈ›iunii de realocare relativÄƒ compactÄƒ este schimbatÄƒ: nouÄƒ (%lu) != veche (%lu)\n"
 
-#: ihex.c:443
+#: elfxx-x86.c:1783
 #, c-format
-msgid "%s:%u: bad extended start address length in Intel Hex file"
-msgstr "%s: %u: mãrime adresã de start extinsã invalidã în fiºier Intel Hex"
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr "%F%P: %pB: a eÈ™uat alocarea secÈ›iunii de realocare relativÄƒ compactÄƒ\n"
 
-#: ihex.c:460
+#: elfxx-x86.c:2230
 #, c-format
-msgid "%s:%u: bad extended linear address record length in Intel Hex file"
-msgstr "%s: %u: mãrime înregistrare a adresei lineare extinse invalidã în fiºier Intel Hex"
+msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
+msgstr "%F%P: %pB: realocarea %s faÈ›Äƒ de simbolul absolut â€ž%sâ€� din secÈ›iunea â€ž%pAâ€� este interzisÄƒ\n"
 
-#: ihex.c:477
+#: elfxx-x86.c:2312
+msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
+msgstr "%P: %pB: avertisment: realocare Ã®n secÈ›iunea numai-pentru-citire â€ž%pAâ€�\n"
+
+#: elfxx-x86.c:3193
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (poziÈ›oe: 0x%v, informaÈ›ii: 0x%v, adÄƒugare: 0x%v) faÈ›Äƒ de â€ž%sâ€� pentru secÈ›iunea â€ž%pAâ€� Ã®n %pB\n"
+
+#: elfxx-x86.c:3199
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (poziÈ›ie: 0x%v, informaÈ›ii: 0x%v) faÈ›Äƒ de â€ž%sâ€� pentru secÈ›iunea â€ž%pAâ€� Ã®n %pB\n"
+
+#: elfxx-x86.c:3819
 #, c-format
-msgid "%s:%u: bad extended linear start address length in Intel Hex file"
-msgstr "%s: %u: mãrime adresã linearã de start extinsã invalidã în fiºier Intel Hex"
+msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
+msgstr "eroare: %pB: <dimensiunea proprietÄƒÈ›ii x86 corupte (0x%x): 0x%x>"
+
+#: elfxx-x86.c:4166
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: avertisment: lipseÈ™te %s\n"
+
+#: elfxx-x86.c:4167
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: eroare: lipseÈ™te %s\n"
+
+#: elfxx-x86.c:4230
+msgid "IBT and SHSTK properties"
+msgstr "proprietÄƒÈ›i IBT È™i SHSTK"
+
+#: elfxx-x86.c:4232
+msgid "IBT property"
+msgstr "proprietatea IBT"
+
+#: elfxx-x86.c:4234
+msgid "SHSTK property"
+msgstr "proprietatea SHSTK"
+
+#: elfxx-x86.c:4239
+msgid "LAM_U48 property"
+msgstr "proprietatea LAM_U48"
+
+#: elfxx-x86.c:4244
+msgid "LAM_U57 property"
+msgstr "proprietatea LAM_U57"
 
-#: ihex.c:494
+#: elfxx-x86.c:4413
+msgid "%F%P: failed to create VxWorks dynamic sections\n"
+msgstr "%F%P: nu s-au putut crea secÈ›iunile dinamice VxWorks\n"
+
+#: elfxx-x86.c:4422
+msgid "%F%P: failed to create GOT sections\n"
+msgstr "%F%P: nu s-au putut crea secÈ›iunile GOT\n"
+
+#: elfxx-x86.c:4440
+msgid "%F%P: failed to create ifunc sections\n"
+msgstr "%F%P: nu s-au putut crea secÈ›iunile ifunc\n"
+
+#: elfxx-x86.c:4477
+msgid "%F%P: failed to create GOT PLT section\n"
+msgstr "%F%P: nu s-a putut crea secÈ›iunea GOT PLT\n"
+
+#: elfxx-x86.c:4496
+msgid "%F%P: failed to create IBT-enabled PLT section\n"
+msgstr "%F%P: nu s-a putut crea secÈ›iunea PLT cu IBT activat\n"
+
+#: elfxx-x86.c:4516
+msgid "%F%P: failed to create PLT .eh_frame section\n"
+msgstr "%F%P: nu s-a putut crea secÈ›iunea .eh_frame PLT\n"
+
+#: elfxx-x86.c:4529
+msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
+msgstr "%F%P: nu s-a putut crea secÈ›iunea .eh_frame PLT GOT\n"
+
+#: elfxx-x86.c:4543
+msgid "%F%P: failed to create the second PLT .eh_frame section\n"
+msgstr "%F%P: nu s-a putut crea a doua secÈ›iune .eh_frame PLT\n"
+
+#: elfxx-x86.c:4563
+msgid "%F%P: failed to create PLT .sframe section\n"
+msgstr "%F%P: nu s-a putut crea secÈ›iunea .sframe PLT\n"
+
+#: elfxx-x86.c:4578
+msgid "%F%P: failed to create second PLT .sframe section\n"
+msgstr "%F%P: nu s-a putut crea a doua secÈ›iune .sframe PLT\n"
+
+#: elfxx-x86.c:4618
+msgid "%X%P: attempted static link of dynamic object `%pB'\n"
+msgstr "%X%P: Ã®ncercare de vinculare staticÄƒ a obiectului dinamic â€ž%pBâ€�\n"
+
+#: ihex.c:230
 #, c-format
-msgid "%s:%u: unrecognized ihex type %u in Intel Hex file\n"
-msgstr "%s: %u: tip ihex necunoscut %u în fiºier Intel Hex\n"
+msgid "%pB:%d: unexpected character `%s' in Intel Hex file"
+msgstr "%pB:%d: caracter neaÈ™teptat â€ž%sâ€� Ã®n fiÈ™ierul Intel Hex"
 
-#: ihex.c:619
+#: ihex.c:338
 #, c-format
-msgid "%s: internal error in ihex_read_section"
-msgstr "%s: eroare internã în ihex_read_section"
+msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)"
+msgstr "%pB:%u: sumÄƒ de verificare greÈ™itÄƒ Ã®n fiÈ™ierul Intel Hex (se aÈ™tepta %u, s-a gÄƒsit %u)"
 
-#: ihex.c:654
+#: ihex.c:393
 #, c-format
-msgid "%s: bad section length in ihex_read_section"
-msgstr "%s: mãrime secþiune invalidã în ihex_read_section"
+msgid "%pB:%u: bad extended address record length in Intel Hex file"
+msgstr "%pB:%u: lungime incorectÄƒ a Ã®nregistrÄƒrii adresei extinse Ã®n fiÈ™ierul Intel Hex"
 
-#: ihex.c:872
+#: ihex.c:411
 #, c-format
-msgid "%s: address 0x%s out of range for Intel Hex file"
-msgstr "%s: adresa 0x%s este în afara domeniului(range) pentru fiºierul Intel Hex"
+msgid "%pB:%u: bad extended start address length in Intel Hex file"
+msgstr "%pB:%u: lungime incorectÄƒ a adresei de Ã®nceput extinse Ã®n fiÈ™ierul Intel Hex"
 
-#: libbfd.c:861
+#: ihex.c:429
 #, c-format
-msgid "Deprecated %s called at %s line %d in %s\n"
-msgstr "%s învechitã apelatã la %s linia %d în %s\n"
+msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
+msgstr "%pB:%u: lungime incorectÄƒ a Ã®nregistrÄƒrii adresei liniare extinse Ã®n fiÈ™ierul Intel Hex"
 
-#: libbfd.c:864
+#: ihex.c:447
 #, c-format
-msgid "Deprecated %s called\n"
-msgstr "%s învechitã apelatã\n"
+msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
+msgstr "%pB:%u: lungime incorectÄƒ a adresei de Ã®nceput liniarÄƒ extinsÄƒ Ã®n fiÈ™ierul Intel Hex"
 
-#: linker.c:1829
+#: ihex.c:465
 #, c-format
-msgid "%s: indirect symbol `%s' to `%s' is a loop"
-msgstr "%s: simbolul indirect `%s' pentru `%s' este o buclã"
+msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
+msgstr "%pB:%u: tip ihex nerecunoscut %u Ã®n fiÈ™ierul Intel Hex"
 
-#: linker.c:2697
+#: ihex.c:581
 #, c-format
-msgid "Attempt to do relocatable link with %s input and %s output"
-msgstr "Încercare de a crea un link relocabil cu input %s ºi output %s"
+msgid "%pB: internal error in ihex_read_section"
+msgstr "%pB: eroare internÄƒ Ã®n ihex_read_section"
 
-#: merge.c:896
+#: ihex.c:614
 #, c-format
-msgid "%s: access beyond end of merged section (%ld + %ld)"
-msgstr "%s: acces dincolo de sfârºitul secþiunii concatenate(merged) (%ld + %ld)"
+msgid "%pB: bad section length in ihex_read_section"
+msgstr "%pB: lungime incorectÄƒ a secÈ›iunii Ã®n ihex_read_section"
 
-#: mmo.c:503
+#: ihex.c:785
 #, c-format
-msgid "%s: No core to allocate section name %s\n"
-msgstr "%s:Nu existã nucleu(core) pentru a aloca numele de secþiune %s\n"
+msgid "%pB 64-bit address %#<PRIx64> out of range for Intel Hex file"
+msgstr "%pB adresa pe 64 de biÈ›i %#<PRIx64> este Ã®n afara intervalului pentru fiÈ™ierul Intel Hex"
 
-#: mmo.c:579
+#: ihex.c:843
 #, c-format
-msgid "%s: No core to allocate a symbol %d bytes long\n"
-msgstr "%s: Nu existã nucleu(core) pentru a aloca un simbol lung de %d octeþi\n"
+msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
+msgstr "%pB: adresa %#<PRIx64> Ã®n afara intervalului pentru fiÈ™ierul Intel Hex"
 
-#: mmo.c:1287
+#: libbfd.c:1058
 #, c-format
-msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n"
-msgstr "%s: fiºier mmo invalid: valoare de iniþializare pentru $255 nu este 'Main'\n"
+msgid "%pB: unable to get decompressed section %pA"
+msgstr "%pB: nu se poate obÈ›ine secÈ›iunea decomprimatÄƒ %pA"
 
-#: mmo.c:1433
+#: linker.c:1713
 #, c-format
-msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
-msgstr "%s: secvenþã mare(wide) de caractere 0x%02X 0x%02X nesuportatã dupã numele de simbol care începe cu `%s'\n"
+msgid "%pB: indirect symbol `%s' to `%s' is a loop"
+msgstr "%pB: simbolul indirect â€ž%sâ€� pentru â€ž%sâ€� este o buclÄƒ"
+
+#: linker.c:1793
+msgid "%P: %pB: note: the message above does not take linker garbage collection into account\n"
+msgstr "%P: %pB: notÄƒ: mesajul de mai sus nu ia Ã®n considerare colectarea gunoiului din editorul de legÄƒturi\n"
 
-#: mmo.c:1674
+#: linker.c:2591
 #, c-format
-msgid "%s: invalid mmo file: unsupported lopcode `%d'\n"
-msgstr "%s: fiºier mmo invalid: lopcode `%d' nesuportat\n"
+msgid "attempt to do relocatable link with %s input and %s output"
+msgstr "Ã®ncercare de a crea o legÄƒturÄƒ realocabilÄƒ cu intrarea %s È™i ieÈ™irea %s"
 
-#: mmo.c:1684
+#: linker.c:2870
 #, c-format
-msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_quote se aºtepta YZ = 1 s-a primit YZ= %d\n"
+msgid "%pB: ignoring duplicate section `%pA'\n"
+msgstr "%pB: se ignorÄƒ secÈ›iunea duplicatÄƒ â€ž%pAâ€�\n"
 
-#: mmo.c:1720
+#: linker.c:2880 linker.c:2890
 #, c-format
-msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_loc se aºtepta z =1 sau z =  2 s-a primit z = %d\n"
+msgid "%pB: duplicate section `%pA' has different size\n"
+msgstr "%pB: secÈ›iunea duplicatÄƒ â€ž%pAâ€� are dimensiune diferitÄƒ\n"
 
-#: mmo.c:1766
+#: linker.c:2904 linker.c:2912
 #, c-format
-msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_fixo se aºtepta z =1 sau z =  2 s-a primit z = %d\n"
+msgid "%pB: could not read contents of section `%pA'\n"
+msgstr "%pB: nu s-a putut citi conÈ›inutul secÈ›iunii â€ž%pAâ€�\n"
 
-#: mmo.c:1805
+#: linker.c:2921
 #, c-format
-msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_fixrx se aºtepta y =0 s-a primit y = %d\n"
+msgid "%pB: duplicate section `%pA' has different contents\n"
+msgstr "%pB: secÈ›iunea duplicatÄƒ â€ž%pAâ€� are conÈ›inut diferit\n"
 
-#: mmo.c:1814
+#: linker.c:3440
 #, c-format
-msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_fixrx se aºtepta z =16 sau z = 24 s-a primit z = %d\n"
+msgid "%pB: compiled for a big endian system and target is little endian"
+msgstr "%pB: compilat pentru un sistem big-endian iar È›inta este little-endian"
 
-#: mmo.c:1837
+#: linker.c:3443
 #, c-format
-msgid "%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
-msgstr "%s: fiºier mmo invalid: pentru lop_fixrx octetul de înceout al operandului word trebuie sã fie 0 sau 1, s-a primit %d\n"
+msgid "%pB: compiled for a little endian system and target is big endian"
+msgstr "%pB: compilat pentru un sistem little-endian iar È›inta este big-endian"
+
+#: mach-o-arm.c:169 mach-o-arm.c:301
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr "pereche de realocare ARM mach-o incorect formatÄƒ: realocarea este prima realocare"
 
-#: mmo.c:1860
+#: mach-o-arm.c:185
 #, c-format
-msgid "%s: cannot allocate file name for file number %d, %d bytes\n"
-msgstr "%s: nu se poate aloca nume fiºier pentru fiºierul numãrul %d, %d octeþi\n"
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr "pereche de realocare ARM mach-o incorect formatÄƒ: lungime nevalidÄƒ: %d"
 
-#: mmo.c:1880
+#: mach-o-arm.c:200
 #, c-format
-msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
-msgstr "%s: fiºier mmo invalid: fiºierul numãrul %d `%s' a fost deja introdus ca `%s'\n"
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr "realocare sectdiff ARM mach-o prost formatÄƒ: lungime nevalidÄƒ: %d"
 
-#: mmo.c:1893
+#: mach-o-arm.c:215
 #, c-format
-msgid "%s: invalid mmo file: file name for number %d was not specified before use\n"
-msgstr "%s: fiºier mmo invalid: numele de fiºier pentru numãrul %d nu a fost specificat înainte de folosire\n"
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr "realocare sectdiff local ARM mach-o prost formatÄƒ: lungime nevalidÄƒ: %d"
 
-#: mmo.c:1999
+#: mach-o-arm.c:230
 #, c-format
-msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
-msgstr "%s: fiºier mmo invalid: câmpurile y ºi z ale lop_stab sunt non-zero: y: %d, z: %d\n"
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr "realocare sectdiff half ARM mach-o prost formatÄƒ: lungime nevalidÄƒ: %d"
 
-#: mmo.c:2035
+#: mach-o-arm.c:262
 #, c-format
-msgid "%s: invalid mmo file: lop_end not last item in file\n"
-msgstr "%s: fiºier mmo invalid: lop_end nu este ultimul element în fiºier\n"
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr "realocare sectdiff vanilla ARM mach-o prost formatÄƒ: lungime nevalidÄƒ: %d (pcrel: %d)"
 
-#: mmo.c:2048
+#: mach-o-arm.c:332
 #, c-format
-msgid "%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
-msgstr "%s: fiºier mmo invalid: YZ al lop_end (%ld) nu este egal cu numerele tetras ale lop_stab precedent (%ld)\n"
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr "realocare mach-o ARM incorect formatÄƒ: tip de realocare necunoscut: %d"
 
-#: mmo.c:2698
+#: mach-o.c:640
 #, c-format
-msgid "%s: invalid symbol table: duplicate symbol `%s'\n"
-msgstr "%s: tabelã de simboluri invalidã: simbol `%s' duplicat\n"
+msgid "<unknown mask flags>"
+msgstr "<fanioane de mascÄƒ necunoscute>"
 
-#: mmo.c:2949
+#: mach-o.c:695
+msgid " (<unknown>)"
+msgstr " (<necunoscut>)"
+
+# R-GC, scrie:
+# acest mesaj are un spaÈ›iu adiÈ›ional la
+# Ã®nceput faÈ›Äƒ de mesajul original,
+# pentru a se â€žaliniaâ€� cu mesajele
+# urmÄƒtoare.
+#: mach-o.c:707
 #, c-format
-msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n"
-msgstr "%s: Definire invalidã de simbol: `Main' setat la %s în loc de adresa de start %s\n"
+msgid " MACH-O header:\n"
+msgstr "  antet MACH-O:\n"
 
-#: mmo.c:3039
+#: mach-o.c:708
 #, c-format
-msgid "%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
-msgstr "%s: avertisment: tabela de simboluri prea mare pentru mmo, mai mare decâd 65535 cuvinte pe 32 de biþi: %d.  Doar 'Main' va fi emis.\n"
+msgid "   magic:      %#lx\n"
+msgstr "   magic:      %#lx\n"
 
-#: mmo.c:3084
+#: mach-o.c:709
 #, c-format
-msgid "%s: internal error, symbol table changed size from %d to %d words\n"
-msgstr "%s: eroare internã, tabela de simboluri ºi-a schimbat mãrimea din %d în %d cuvinte\n"
+msgid "   cputype:    %#lx (%s)\n"
+msgstr "   tip cpu:    %#lx (%s)\n"
 
-#: mmo.c:3139
+#: mach-o.c:711
 #, c-format
-msgid "%s: internal error, internal register section %s had contents\n"
-msgstr "%s: eroare internã, secþiunea de regiºtri internã %s nu are conþinut\n"
+msgid "   cpusubtype: %#lx%s\n"
+msgstr "   subtip cpu: %#lx%s\n"
 
-#: mmo.c:3191
+#: mach-o.c:713
 #, c-format
-msgid "%s: no initialized registers; section length 0\n"
-msgstr "%s: nu existã regiºtri iniþializaþi; lungime secþiune 0\n"
+msgid "   filetype:   %#lx\n"
+msgstr "   tip fiÈ™ier: %#lx\n"
 
-#: mmo.c:3197
+#: mach-o.c:714
 #, c-format
-msgid "%s: too many initialized registers; section length %ld\n"
-msgstr "%s: prea mulþi regiºtri iniþializaþi; lungime secþiune %ld\n"
+msgid "   ncmds:      %#lx\n"
+msgstr "   nr. cmds:   %#lx\n"
 
-#: mmo.c:3202
+#: mach-o.c:715
 #, c-format
-msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n"
-msgstr "%s: adresã de start invalidã pentru regiºtrii iniþializaþi de lungime %ld: 0x%lx%08lx\n"
+msgid "   sizeocmds:  %#lx\n"
+msgstr "   dim. cmds:  %#lx\n"
 
-#: oasys.c:1052
+#: mach-o.c:716
 #, c-format
-msgid "%s: can not represent section `%s' in oasys"
-msgstr "%s: nu se poate reprezenta secþiune `%s' în oasys"
+msgid "   flags:      %#lx\n"
+msgstr "   fanioane:   %#lx\n"
 
-#: osf-core.c:137
+#: mach-o.c:717
 #, c-format
-msgid "Unhandled OSF/1 core file section type %d\n"
-msgstr "Tip nemanipulabil %d de fiºier nucleu(core) OSF/1\n"
+msgid "   version:    %x\n"
+msgstr "   versiune:   %x\n"
 
-#: pe-mips.c:659
+#. Urg - what has happened ?
+#: mach-o.c:752
 #, c-format
-msgid "%s: `ld -r' not supported with PE MIPS objects\n"
-msgstr "%s: `ld -r' nu este suportat cu obiecte PE MIPS\n"
+msgid "incompatible cputypes in mach-o files: %ld vs %ld"
+msgstr "tipuri de procesoare incompatibile Ã®n fiÈ™ierele mach-o: %ld vs %ld"
 
-#. OK, at this point the following variables are set up:
-#. src = VMA of the memory we're fixing up
-#. mem = pointer to memory we're fixing up
-#. val = VMA of what we need to refer to
-#.
-#: pe-mips.c:795
+#: mach-o.c:921
+msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
+msgstr "bfd_mach_o_canonicalize_symtab: nu se pot Ã®ncÄƒrca simboluri"
+
+#: mach-o.c:1513
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr "realocare mach-o incorect formatÄƒ: indexul secÈ›iunii este mai mare decÃ¢t numÄƒrul de secÈ›iuni"
+
+#: mach-o.c:2155
+msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands."
+msgstr "scuze: modtab, toc È™i extrefsyms nu sunt Ã®ncÄƒ implementate pentru comenzile dysymtab."
+
+#: mach-o.c:2603
+#, c-format
+msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
+msgstr "mach-o: existÄƒ prea multe secÈ›iuni (%u) maximul este 255,\n"
+
+#: mach-o.c:2695
 #, c-format
-msgid "%s: unimplemented %s\n"
-msgstr "%s: %s neimplementat\n"
+msgid "unable to allocate data for load command %#x"
+msgstr "nu se pot aloca date pentru comanda de Ã®ncÄƒrcare %#x"
 
-#: pe-mips.c:821
+#: mach-o.c:2800
 #, c-format
-msgid "%s: jump too far away\n"
-msgstr "%s: salt prea departe(far away)\n"
+msgid "unable to write unknown load command %#x"
+msgstr "nu se poate scrie comanda de Ã®ncÄƒrcare necunoscutÄƒ %#x"
 
-#: pe-mips.c:848
+#: mach-o.c:2984
 #, c-format
-msgid "%s: bad pair/reflo after refhi\n"
-msgstr "%s: pair/reflo invalid dupã refhi\n"
+msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
+msgstr "adresa secÈ›iunii (%#<PRIx64>) sub Ã®nceputul segmentului (%#<PRIx64>)"
+
+#: mach-o.c:3126
+#, c-format
+msgid "unable to layout unknown load command %#x"
+msgstr "nu se poate dispune comanda de Ã®ncÄƒrcare necunoscutÄƒ %#x"
+
+#: mach-o.c:3661
+#, c-format
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: valoare de aliniere peste mÄƒsurÄƒ de mare: %#lx"
+
+#: mach-o.c:3704
+#, c-format
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_64: valoare de aliniere peste mÄƒsurÄƒ de mare: %#lx"
+
+#: mach-o.c:3755
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"
+msgstr "bfd_mach_o_read_symtab_symbol: nu se pot citi %d octeÈ›i la %u"
+
+#: mach-o.c:3774
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
+msgstr "bfd_mach_o_read_symtab_symbol: nume Ã®n afara intervalului (%lu >= %u)"
+
+#: mach-o.c:3857
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined"
+msgstr "bfd_mach_o_read_symtab_symbol: simbolul â€ž%sâ€� specificÄƒ secÈ›iunea nevalidÄƒ %d (max. %lu): se lasÄƒ nedefinit"
+
+#: mach-o.c:3876
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined"
+msgstr "bfd_mach_o_read_symtab_symbol: simbolul â€ž%sâ€� specificÄƒ cÃ¢mpul de tip invalid 0x%x: se lasÄƒ nedefinit"
+
+#: mach-o.c:5075
+#, c-format
+msgid "%pB: unknown load command %#x"
+msgstr "%pB: comandÄƒ de Ã®ncÄƒrcare necunoscutÄƒ %#x"
+
+#: mach-o.c:5274
+#, c-format
+msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
+msgstr "bfd_mach_o_scan: arhitecturÄƒ necunoscutÄƒ 0x%lx/0x%lx"
+
+#: mach-o.c:5396
+#, c-format
+msgid "unknown header byte-order value %#x"
+msgstr "valoare necunoscutÄƒ a ordinii octeÈ›ilor antetului %#x"
+
+#: merge.c:1118
+#, c-format
+msgid "%pB: access beyond end of merged section (%<PRId64>)"
+msgstr "%pB: acces dincolo de sfÃ¢rÈ™itul secÈ›iunii concatenate (%<PRId64>)"
+
+#: mmo.c:535
+#, c-format
+msgid "%pB: no core to allocate a symbol %d bytes long"
+msgstr "%pB: nu existÄƒ un nucleu pentru a aloca un simbol lungime %d octeÈ›i"
+
+#: mmo.c:956
+#, c-format
+msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
+msgstr "%pB: Ã®ncercare de a emite conÈ›inut la o adresÄƒ ce nu este multiplu de 4 %#<PRIx64>"
+
+#: mmo.c:1251
+#, c-format
+msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: valoarea de iniÈ›ializare pentru $255 nu este â€žMainâ€�\n"
+
+#: mmo.c:1398
+#, c-format
+msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
+msgstr "%pB: secvenÈ›Äƒ de caractere largÄƒ neacceptatÄƒ 0x%02X 0x%02X dupÄƒ numele simbolului care Ã®ncepe cu â€ž%sâ€�\n"
+
+#: mmo.c:1414
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr "%pB: numele simbolului depÄƒÈ™eÈ™te lungimea maximÄƒ datÄƒ de %d"
+
+#: mmo.c:1643
+#, c-format
+msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: lopcode neacceptat â€ž%dâ€�\n"
+
+#: mmo.c:1654
+#, c-format
+msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: pentru lop_quote se aÈ™tepta YZ = 1 s-a primit YZ= %d\n"
+
+#: mmo.c:1698
+#, c-format
+msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: pentru lop_loc se aÈ™tepta z =1 sau z = 2, s-a primit z = %d\n"
+
+#: mmo.c:1749
+#, c-format
+msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: pentru lop_fixo se aÈ™tepta z =1 sau z = 2, s-a primit z = %d\n"
+
+#: mmo.c:1798
+#, c-format
+msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: pentru lop_fixrx se aÈ™tepta y =0, s-a primit y = %d\n"
+
+#: mmo.c:1809
+#, c-format
+msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: pentru lop_fixrx se aÈ™tepta z =16 sau z = 24, s-a primit z = %d\n"
+
+#: mmo.c:1834
+#, c-format
+msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: pentru lop_fixrx octetul de Ã®nceput al operandului word trebuie sÄƒ fie 0 sau 1, s-a primit %d\n"
+
+#: mmo.c:1863
+#, c-format
+msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
+msgstr "%pB: nu se poate aloca nume de fiÈ™ier pentru fiÈ™ierul numÄƒrul %d, %d octeÈ›i\n"
+
+#: mmo.c:1885
+#, c-format
+msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: numÄƒrul fiÈ™ierului %d â€ž%sâ€�, a fost deja introdus ca â€ž%sâ€�\n"
+
+#: mmo.c:1900
+#, c-format
+msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: numele de fiÈ™ier pentru numÄƒrul %d nu a fost specificat Ã®nainte de folosire\n"
+
+#: mmo.c:2012
+#, c-format
+msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: cÃ¢mpurile y È™i z ale lop_stab sunt non-zero: y: %d, z: %d\n"
+
+#: mmo.c:2049
+#, c-format
+msgid "%pB: invalid mmo file: lop_end not last item in file\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: lop_end nu este ultimul element din fiÈ™ier\n"
+
+#: mmo.c:2063
+#, c-format
+msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
+msgstr "%pB: fiÈ™ier mmo nevalid: YZ al lop_end (%ld) nu este egal cu numÄƒrul de tetras ale lop_stab precedent (%ld)\n"
+
+#: mmo.c:2776
+#, c-format
+msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
+msgstr "%pB: tabel de simboluri nevalid: simbol duplicat â€ž%sâ€�\n"
+
+#: mmo.c:3015
+#, c-format
+msgid "%pB: bad symbol definition: `Main' set to %<PRIx64> rather than the start address %<PRIx64>\n"
+msgstr "%pB: definiÈ›ie greÈ™itÄƒ a simbolului: â€žMainâ€� iniÈ›ializat la %<PRIx64> Ã®n loc de adresa de pornire %<PRIx64>\n"
+
+#: mmo.c:3114
+#, c-format
+msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
+msgstr "%pB: avertisment: tabelul de simboluri este prea mare pentru mmo, mai mare de 65535 de cuvinte pe 32 de biÈ›i: %d.  Doar â€žMainâ€� va fi emis.\n"
+
+#: mmo.c:3160
+#, c-format
+msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
+msgstr "%pB: eroare internÄƒ, tabelul de simboluri È™i-a schimbat dimensiunea de la %d la %d cuvinte\n"
+
+#: mmo.c:3213
+#, c-format
+msgid "%pB: internal error, internal register section %pA had contents\n"
+msgstr "%pB: eroare internÄƒ, secÈ›iunea de registru internÄƒ %pA nu are conÈ›inut\n"
+
+#: mmo.c:3264
+#, c-format
+msgid "%pB: no initialized registers; section length 0\n"
+msgstr "%pB: nu existÄƒ registre iniÈ›ializate; lungimea secÈ›iunii 0\n"
+
+#: mmo.c:3271
+#, c-format
+msgid "%pB: too many initialized registers; section length %<PRId64>"
+msgstr "%pB: prea multe registre iniÈ›ializate; lungimea secÈ›iunii %<PRId64>"
+
+#: mmo.c:3276
+#, c-format
+msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
+msgstr "%pB: adresÄƒ de pornire nevalidÄƒ pentru registrele iniÈ›ializate de lungime %<PRId64>: %#<PRIx64>"
+
+#: osf-core.c:127
+#, c-format
+msgid "unhandled OSF/1 core file section type %d"
+msgstr "tipul de secÈ›iune de fiÈ™ier core OSF/1 %d negestionat"
+
+#: pdp11.c:1588
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr "%pB: simbolul indicÄƒ suprapunerea (nu este acceptat)"
+
+#: pef.c:531
+#, c-format
+msgid "bfd_pef_scan: unknown architecture 0x%lx"
+msgstr "bfd_pef_scan: arhitecturÄƒ necunoscutÄƒ 0x%lx"
+
+#: pei-x86_64.c:174 pei-x86_64.c:228 pei-x86_64.c:238 pei-x86_64.c:263
+#: pei-x86_64.c:275 pei-x86_64.c:289 pei-x86_64.c:307 pei-x86_64.c:319
+#: pei-x86_64.c:331
+#, c-format
+msgid "warning: corrupt unwind data\n"
+msgstr "avertisment: date de desfÄƒÈ™urare corupte\n"
+
+#. PR 17512: file: 2245-7442-0.004.
+#: pei-x86_64.c:352
+#, c-format
+msgid "Unknown: %x"
+msgstr "Necunoscut: %x"
+
+#: pei-x86_64.c:403 pei-x86_64.c:413 pei-x86_64.c:422
+#, c-format
+msgid "warning: xdata section corrupt\n"
+msgstr "avertisment: secÈ›iunea xdata coruptÄƒ\n"
+
+#: pei-x86_64.c:477
+#, c-format
+msgid "Too many unwind codes (%ld)\n"
+msgstr "Prea multe coduri de desfÄƒÈ™urare (%ld)\n"
+
+#: pei-x86_64.c:563
+#, c-format
+msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
+msgstr "Avertisment: dimensiunea secÈ›iunii %s (%ld) nu este multiplu de %dn\n"
+
+#: pei-x86_64.c:570
+#, c-format
+msgid "Warning: %s section size is zero\n"
+msgstr "Avertisment: dimensiunea secÈ›iunii %s este zero\n"
+
+#: pei-x86_64.c:585
+#, c-format
+msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
+msgstr "Avertisment: dimensiunea secÈ›iunii %s (%ld) este mai micÄƒ decÃ¢t dimensiunea virtualÄƒ (%ld)\n"
+
+#: pei-x86_64.c:594
+#, c-format
+msgid ""
+"\n"
+"The Function Table (interpreted %s section contents)\n"
+msgstr ""
+"\n"
+"Tabelul cu funcÈ›ii (interpretat conÈ›inutul secÈ›iunii %s)\n"
+
+#: pei-x86_64.c:597
+#, c-format
+msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
+msgstr "vma:\t\t\tAdresÄƒ ÃŽnceput\t AdresÄƒ SfÃ¢rÈ™it\t  DateDesf[;urate\n"
+
+#: pei-x86_64.c:722
+#, c-format
+msgid ""
+"\n"
+"Dump of %s\n"
+msgstr ""
+"\n"
+"DescÄƒrcare din %s\n"
 
 #. XXX code yet to be written.
-#: peicode.h:787
+#: peicode.h:820
+#, c-format
+msgid "%pB: unhandled import type; %x"
+msgstr "%pB: tip de import negestionat; %x"
+
+#: peicode.h:826
+#, c-format
+msgid "%pB: unrecognized import type; %x"
+msgstr "%pB: tip de import nerecunoscut; %x"
+
+#: peicode.h:841
+#, c-format
+msgid "%pB: unrecognized import name type; %x"
+msgstr "%pB: tip de nume de import nerecunoscut; %x"
+
+#: peicode.h:1280
+#, c-format
+msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
+msgstr "%pB: tip de maÈ™inÄƒ nerecunoscut (0x%x) Ã®n arhiva Format de bibliotecÄƒ de import"
+
+#: peicode.h:1293
 #, c-format
-msgid "%s: Unhandled import type; %x"
-msgstr "%s: Tip import nemanipulabil; %x"
+msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
+msgstr "%pB: tip de maÈ™inÄƒ recunoscut, dar negestionat (0x%x) Ã®n arhiva Format de bibliotecÄƒ de import"
 
-#: peicode.h:792
+#: peicode.h:1311
 #, c-format
-msgid "%s: Unrecognised import type; %x"
-msgstr "%s: Tip import necunoscut; %x"
+msgid "%pB: size field is zero in Import Library Format header"
+msgstr "%pB: cÃ¢mpul de dimensiune este zero Ã®n antetul Format de bibliotecÄƒ de import"
 
-#: peicode.h:806
+#: peicode.h:1337
 #, c-format
-msgid "%s: Unrecognised import name type; %x"
-msgstr "%s: Tip nume import necunoscut; %x"
+msgid "%pB: string not null terminated in ILF object file"
+msgstr "%pB: È™irul nu este terminat cu nul Ã®n fiÈ™ierul obiect ILF"
 
-#: peicode.h:1164
+#: peicode.h:1393
 #, c-format
-msgid "%s: Unrecognised machine type (0x%x) in Import Library Format archive"
-msgstr "%s: Tip maºinã necunoscut (0x%x) în arhiva Import Library Format"
+msgid "%pB: error: debug data ends beyond end of debug directory"
+msgstr "%pB: eroare: datele de depanare se terminÄƒ dincolo de sfÃ¢rÈ™itul directorului de depanare"
 
-#: peicode.h:1176
+#: peicode.h:1563
 #, c-format
-msgid "%s: Recognised but unhandled machine type (0x%x) in Import Library Format archive"
-msgstr "%s: Tip de maºinã recunoscut dar nemanipulabil (0x%x) în arhiva Import Library Format"
+msgid "%pB: adjusting invalid SectionAlignment"
+msgstr "%pB: se ajusteazÄƒ SectionAlignment nevalidÄƒ"
 
-#: peicode.h:1193
+#: peicode.h:1573
 #, c-format
-msgid "%s: size field is zero in Import Library Format header"
-msgstr "%s: mãrimea câmpului din headerul Import Library Format este zero"
+msgid "%pB: adjusting invalid FileAlignment"
+msgstr "%pB: se ajusteazÄƒ FileAlignment nevalidÄƒ"
 
-#: peicode.h:1224
+#: peicode.h:1581
 #, c-format
-msgid "%s: string not null terminated in ILF object file."
-msgstr "%s: ºirul nenul terminat în fiºier obiect ILF."
+msgid "%pB: invalid NumberOfRvaAndSizes"
+msgstr "%pB: NumberOfRvaAndSizes nevalid"
 
-#: ppcboot.c:416
+#: plugin.c:258
+msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr "spaÈ›iu de lucru pentru modul: nu mai sunt descriptori de fiÈ™iere. ÃŽncercaÈ›i sÄƒ utilizaÈ›i mai puÈ›ine obiecte/arhive\n"
+
+#: ppcboot.c:392
+#, c-format
 msgid ""
 "\n"
 "ppcboot header:\n"
 msgstr ""
 "\n"
-"header ppcboot:\n"
+"Antet ppcboot:\n"
 
-#: ppcboot.c:417
+#: ppcboot.c:393
 #, c-format
 msgid "Entry offset        = 0x%.8lx (%ld)\n"
-msgstr "Offset intrare        = 0x%.8lx (%ld)\n"
+msgstr "Decalaj intrare     = 0x%.8lx (%ld)\n"
 
-#: ppcboot.c:418
+#: ppcboot.c:395
 #, c-format
 msgid "Length              = 0x%.8lx (%ld)\n"
-msgstr "Lungime              = 0x%.8lx (%ld)\n"
+msgstr "Lungime             = 0x%.8lx (%ld)\n"
 
-#: ppcboot.c:421
+#: ppcboot.c:399
 #, c-format
 msgid "Flag field          = 0x%.2x\n"
-msgstr "Câmp Marcaj(Flag)      = 0x%.2x\n"
+msgstr "CÃ¢mp fanion         = 0x%.2x\n"
 
-#: ppcboot.c:427
+#: ppcboot.c:405
 #, c-format
 msgid "Partition name      = \"%s\"\n"
-msgstr "Nume Partiþie      = \"%s\"\n"
+msgstr "Nume partiÈ›ie       = \"%s\"\n"
 
-#: ppcboot.c:446
+#: ppcboot.c:425
 #, c-format
 msgid ""
 "\n"
 "Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
 msgstr ""
 "\n"
-"Start Partiþie[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+"ÃŽnceput PartiÈ›ie[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
 
-#: ppcboot.c:452
+#: ppcboot.c:432
 #, c-format
 msgid "Partition[%d] end    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
-msgstr "Sfârºit Partiþie[%d]    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+msgstr "SfÃ¢rÈ™it PartiÈ›ie[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
 
-#: ppcboot.c:458
+#: ppcboot.c:439
 #, c-format
 msgid "Partition[%d] sector = 0x%.8lx (%ld)\n"
-msgstr "Sector Partiþie[%d] sector = 0x%.8lx (%ld)\n"
+msgstr "Sector PartiÈ›ie[%d]  = 0x%.8lx (%ld)\n"
 
-#: ppcboot.c:459
+#: ppcboot.c:443
 #, c-format
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
-msgstr "Mãrime Partiþie[%d] = 0x%.8lx (%ld)\n"
+msgstr "Lungime PartiÈ›ie[%d] = 0x%.8lx (%ld)\n"
 
-#: som.c:5422
-msgid "som_sizeof_headers unimplemented"
-msgstr "som_sizeof_headers neimplementatã"
+#: reloc.c:8504
+msgid "INPUT_SECTION_FLAGS are not supported"
+msgstr "INPUT_SECTION_FLAGS nu sunt acceptatÄƒ"
 
-#: srec.c:302
+#: reloc.c:8770
 #, c-format
-msgid "%s:%d: Unexpected character `%s' in S-record file\n"
-msgstr "%s:%d: Caracter neaºteptat `%s'în fiºier S-record\n"
+msgid "%pB: unrecognized relocation type %#x in section `%pA'"
+msgstr "%pB: tip de realocare nerecunoscut %#x Ã®n secÈ›iunea â€ž%pAâ€�"
 
-#: stabs.c:319
+#. PR 21803: Suggest the most likely cause of this error.
+#: reloc.c:8774
 #, c-format
-msgid "%s(%s+0x%lx): Stabs entry has invalid string index."
-msgstr "%s(%s+0x%lx): Intrarea bruscã(stab) are index ºir invalid."
+msgid "is this version of the linker - %s - out of date ?"
+msgstr "este aceastÄƒ versiune a editorului de legÄƒturi - %s - depÄƒÈ™itÄƒ?"
 
-#: syms.c:1019
-msgid "Unsupported .stab relocation"
-msgstr "Relocare .stab nesuportatã"
+#: rs6000-core.c:471
+#, c-format
+msgid "%pB: warning core file truncated"
+msgstr "%pB: avertisment: fiÈ™ierul core a fost trunchiat"
 
-#: vms-gsd.c:356
+#: som.c:3002
 #, c-format
-msgid "bfd_make_section (%s) failed"
-msgstr "bfd_make_section (%s) eºuatã"
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of order"
+msgstr "%pB(%pA+%#<PRIx64>): decalajul realocÄƒrii %s nu este Ã®n ordinea corectÄƒ"
 
-#: vms-gsd.c:371
+#: som.c:3015
 #, c-format
-msgid "bfd_set_section_flags (%s, %x) failed"
-msgstr "bfd_set_section_flags (%s, %x) eºuatã"
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of range"
+msgstr "%pB(%pA+%#<PRIx64>): decalaj realocare %s Ã®n afara intervalului"
 
-#: vms-gsd.c:407
+#. User has specified a subspace without its containing space.
+#: som.c:5405
 #, c-format
-msgid "Size mismatch section %s=%lx, %s=%lx"
-msgstr "Mãrime nepotrivitã secþiune %s=%lx, %s=%lx"
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr "%pB[%pA]: nicio secÈ›iune de ieÈ™ire pentru spaÈ›iul %pA"
 
-#: vms-gsd.c:704
+#: som.c:5451
 #, c-format
-msgid "unknown gsd/egsd subtype %d"
-msgstr "subtip %d gsd/egsd necunoscut"
+msgid ""
+"\n"
+"Exec Auxiliary Header\n"
+msgstr ""
+"\n"
+"Antetul auxiliar al executabilului\n"
 
-#: vms-hdr.c:408
-msgid "Object module NOT error-free !\n"
-msgstr "Modul obiect CU erori !\n"
+#: som.c:5760
+msgid "som_sizeof_headers unimplemented"
+msgstr "som_sizeof_headers neimplementatÄƒ"
 
-#: vms-misc.c:541
+#: srec.c:260
 #, c-format
-msgid "Stack overflow (%d) in _bfd_vms_push"
-msgstr "Depãºire(overflow) de stivã(%d) în bfd_vms_push"
+msgid "%pB:%d: unexpected character `%s' in S-record file"
+msgstr "%pB:%d: caracter neaÈ™teptat â€ž%sâ€� Ã®n fiÈ™ierul S-record"
 
-#: vms-misc.c:559
-msgid "Stack underflow in _bfd_vms_pop"
-msgstr "Subfolosire(underflow) a stivei _bfd_vms_pop"
+#: srec.c:488
+#, c-format
+msgid "%pB:%d: byte count %d too small"
+msgstr "%pB:%d: numÄƒrul de octeÈ›i %d este prea mic"
 
-#: vms-misc.c:918
-msgid "_bfd_vms_output_counted called with zero bytes"
-msgstr "_bfd_vms_output_counted apelat cu zero octeþi"
+#: srec.c:580 srec.c:614
+#, c-format
+msgid "%pB:%d: bad checksum in S-record file"
+msgstr "%pB:%d: sumÄƒ de verificare greÈ™itÄƒ Ã®n fiÈ™ierul S-record"
 
-#: vms-misc.c:923
-msgid "_bfd_vms_output_counted called with too many bytes"
-msgstr "_bfd_vms_output_counted apelat cu prea mulþi octeþi"
+#: stabs.c:308
+#, c-format
+msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
+msgstr "%pB(%pA+%#lx): intrarea stabs are un index de È™ir nevalid"
+
+#: syms.c:1112
+msgid "unsupported .stab relocation"
+msgstr "realocare .stab neacceptatÄƒ"
+
+#: vms-alpha.c:479
+msgid "corrupt EIHD record - size is too small"
+msgstr "Ã®nregistrare EIHD coruptÄƒ - dimensiunea este prea micÄƒ"
+
+#: vms-alpha.c:665
+#, c-format
+msgid "unable to read EIHS record at offset %#x"
+msgstr "nu se poate citi Ã®nregistrarea EIHS la poziÈ›ia %#x"
+
+#: vms-alpha.c:1157
+msgid "record is too small for symbol name length"
+msgstr "Ã®nregistrarea este prea micÄƒ pentru lungimea numelui simbolului"
 
-#: vms-misc.c:1054
+#: vms-alpha.c:1190
 #, c-format
-msgid "Symbol %s replaced by %s\n"
-msgstr "Simbolul %s înlocuit de %s\n"
+msgid "corrupt EGSD record: its size (%#x) is too small"
+msgstr "Ã®nregistrare EGSD coruptÄƒ: dimensiunea acesteia (%#x) este prea micÄƒ"
 
-#: vms-misc.c:1117
+#: vms-alpha.c:1214
 #, c-format
-msgid "failed to enter %s"
-msgstr "Eºec în introducerea %s"
+msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
+msgstr "tip de Ã®nregistrare EGSD coruptÄƒ %d: dimensiunea (%#x) este mai mare decÃ¢t spaÈ›iul rÄƒmas (%#x)"
 
-#: vms-tir.c:102
-msgid "No Mem !"
-msgstr "Nu mai existã Mem !"
+#: vms-alpha.c:1224
+#, c-format
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
+msgstr "tip de Ã®nregistrare EGSD corupt %d: dimensiunea (%#x) este prea micÄƒ"
 
-#: vms-tir.c:383
+#: vms-alpha.c:1366
 #, c-format
-msgid "bad section index in %s"
-msgstr "index de secþiune invalid în %s"
+msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
+msgstr "Ã®nregistrare EGSD coruptÄƒ: cÃ¢mpul psindx este prea mare (%#lx)"
 
-#: vms-tir.c:396
+#: vms-alpha.c:1441
 #, c-format
-msgid "unsupported STA cmd %s"
-msgstr "cmd STA %s nesuportatã"
+msgid "unknown EGSD subtype %d"
+msgstr "subtip EGSD necunoscut %d"
+
+#: vms-alpha.c:1474
+#, c-format
+msgid "stack overflow (%d) in _bfd_vms_push"
+msgstr "depÄƒÈ™ire a stivei Ã®n partea de sus (%d) Ã®n _bfd_vms_push"
+
+#: vms-alpha.c:1488
+msgid "stack underflow in _bfd_vms_pop"
+msgstr "depÄƒÈ™ire a stivei Ã®n partea de jos _bfd_vms_pop"
+
+#: vms-alpha.c:1562
+#, c-format
+msgid "dst_define_location %u too large"
+msgstr "dst_define_location %u prea mare"
 
-#: vms-tir.c:401 vms-tir.c:1261
+#. These names have not yet been added to this switch statement.
+#: vms-alpha.c:1765
 #, c-format
-msgid "reserved STA cmd %d"
-msgstr "cmd STA %d rezervatã"
+msgid "unknown ETIR command %d"
+msgstr "comandÄƒ ETIR necunoscutÄƒ %d"
 
-#: vms-tir.c:512 vms-tir.c:535
+#: vms-alpha.c:1796
+msgid "corrupt vms value"
+msgstr "valoarea vms coruptÄƒ"
+
+#: vms-alpha.c:1927
+msgid "corrupt ETIR record encountered"
+msgstr "Ã®nregistrare ETIR coruptÄƒ Ã®ntÃ¢lnitÄƒ"
+
+#: vms-alpha.c:1989
+#, c-format
+msgid "bad section index in %s"
+msgstr "index de secÈ›iune incorect Ã®n %s"
+
+#: vms-alpha.c:2003
 #, c-format
-msgid "%s: no symbol \"%s\""
-msgstr "%s: nu existã simbolul \"%s\""
+msgid "unsupported STA cmd %s"
+msgstr "comanda STA %s nu este acceptatÄƒ"
 
-#. unsigned shift
-#. rotate
+#. Insert field.
+#. Unsigned shift.
+#. Rotate.
 #. Redefine symbol to current location.
 #. Define a literal.
-#: vms-tir.c:602 vms-tir.c:714 vms-tir.c:824 vms-tir.c:842 vms-tir.c:850
-#: vms-tir.c:859 vms-tir.c:1584
+#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557
 #, c-format
 msgid "%s: not supported"
-msgstr "%s: nesuportat"
+msgstr "%s: nu este acceptat"
 
-#: vms-tir.c:607 vms-tir.c:1439
+#: vms-alpha.c:2217
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: neimplementat"
 
-#: vms-tir.c:611 vms-tir.c:1443
+#: vms-alpha.c:2382 vms-alpha.c:2397
 #, c-format
-msgid "reserved STO cmd %d"
-msgstr "cmd STO %d rezervatã"
+msgid "invalid %s"
+msgstr "%s nevalid"
 
-#: vms-tir.c:729 vms-tir.c:1589
+#. Divide by zero is supposed to give a result of zero,
+#. and a non-fatal warning message.
+#: vms-alpha.c:2457
 #, c-format
-msgid "reserved OPR cmd %d"
-msgstr "cmd OPR %d rezervatã"
+msgid "%s divide by zero"
+msgstr "%s Ã®mpÄƒrÈ›it la zero"
 
-#: vms-tir.c:797 vms-tir.c:1653
+#: vms-alpha.c:2523
 #, c-format
-msgid "reserved CTL cmd %d"
-msgstr "cmd CTL %d rezervatã"
+msgid "invalid use of %s with contexts"
+msgstr "utilizare nevalidÄƒ a lui %s cu contexte"
 
-#. stack byte from image
-#. arg: none.
-#: vms-tir.c:1169
-msgid "stack-from-image not implemented"
-msgstr "stack-from-image neimplementatã"
+#: vms-alpha.c:2581
+#, c-format
+msgid "reserved cmd %d"
+msgstr "comandÄƒ STA %d rezervatÄƒ"
 
-#: vms-tir.c:1187
-msgid "stack-entry-mask not fully implemented"
-msgstr "stack-entry-mask neimplementatã complet"
+#: vms-alpha.c:2665
+msgid "corrupt EEOM record - size is too small"
+msgstr "Ã®nregistrare coruptÄƒ EEOM - dimensiunea este prea micÄƒ"
 
-#. compare procedure argument
-#. arg: cs	symbol name
-#. by	argument index
-#. da	argument descriptor
-#.
-#. compare argument descriptor with symbol argument (ARG$V_PASSMECH)
-#. and stack TRUE (args match) or FALSE (args dont match) value.
-#: vms-tir.c:1201
-msgid "PASSMECH not fully implemented"
-msgstr "PASSMECH neimplementatã complet"
+#: vms-alpha.c:2674
+msgid "object module not error-free !"
+msgstr "modulul obiect nu este lipsit de erori!"
+
+#: vms-alpha.c:4012
+#, c-format
+msgid "SEC_RELOC with no relocs in section %pA"
+msgstr "SEC_RELOC fÄƒrÄƒ realocÄƒri Ã®n secÈ›iunea %pA"
+
+#: vms-alpha.c:4064 vms-alpha.c:4292
+#, c-format
+msgid "size error in section %pA"
+msgstr "eroare de dimensiune Ã®n secÈ›iunea %pA"
+
+#: vms-alpha.c:4235
+msgid "spurious ALPHA_R_BSR reloc"
+msgstr "realocare ALPHA_R_BSR falsÄƒ"
+
+#: vms-alpha.c:4278
+#, c-format
+msgid "unhandled relocation %s"
+msgstr "realocare negestionatÄƒ %s"
+
+#: vms-alpha.c:4643
+#, c-format
+msgid "unknown source command %d"
+msgstr "comanda sursÄƒ necunoscutÄƒ %d"
+
+#: vms-alpha.c:4795 vms-alpha.c:4800 vms-alpha.c:4805 vms-alpha.c:4810
+#: vms-alpha.c:4815 vms-alpha.c:4838 vms-alpha.c:4843 vms-alpha.c:4848
+#: vms-alpha.c:4853
+#, c-format
+msgid "%s not implemented"
+msgstr "%s neimplementat"
+
+#: vms-alpha.c:4889
+#, c-format
+msgid "unknown line command %d"
+msgstr "comandÄƒ de linie necunoscutÄƒ %d"
+
+#: vms-alpha.c:5328
+msgid "corrupt reloc record"
+msgstr "Ã®nregistrare de realocare coruptÄƒ"
+
+#: vms-alpha.c:5358 vms-alpha.c:5376 vms-alpha.c:5393 vms-alpha.c:5411
+#: vms-alpha.c:5424 vms-alpha.c:5436 vms-alpha.c:5449
+#, c-format
+msgid "unknown reloc %s + %s"
+msgstr "realocare necunoscutÄƒ %s + %s"
+
+#: vms-alpha.c:5508
+#, c-format
+msgid "unknown reloc %s"
+msgstr "realocare necunoscutÄƒ %s"
+
+#: vms-alpha.c:5522
+msgid "invalid section index in ETIR"
+msgstr "index de secÈ›iune nevalid Ã®n ETIR"
+
+#: vms-alpha.c:5531
+msgid "relocation for non-REL psect"
+msgstr "realocare pentru psect non-REL"
+
+#: vms-alpha.c:5584
+#, c-format
+msgid "unknown symbol in command %s"
+msgstr "simbol necunoscut Ã®n comanda %s"
+
+#: vms-alpha.c:6003
+#, c-format
+msgid "reloc (%d) is *UNKNOWN*"
+msgstr "realocarea (%d) este *NECUNOSCUTÄ‚*"
+
+#: vms-alpha.c:6119
+#, c-format
+msgid "  EMH %u (len=%u): "
+msgstr "  EMH %u (lung=%u): "
+
+#: vms-alpha.c:6124
+#, c-format
+msgid "   Error: The length is less than the length of an EMH record\n"
+msgstr "   Eroare: lungimea este mai micÄƒ decÃ¢t lungimea unei Ã®nregistrÄƒri EMH\n"
+
+#: vms-alpha.c:6141
+#, c-format
+msgid "   Error: The record length is less than the size of an EMH_MHD record\n"
+msgstr "   Eroare: lungimea Ã®nregistrÄƒrii este mai micÄƒ decÃ¢t dimensiunea unei Ã®nregistrÄƒri EMH_MHD\n"
+
+#: vms-alpha.c:6144
+#, c-format
+msgid "Module header\n"
+msgstr "Antetul modulului\n"
+
+#: vms-alpha.c:6145
+#, c-format
+msgid "   structure level: %u\n"
+msgstr "   nivelul structurii       : %u\n"
+
+#: vms-alpha.c:6146
+#, c-format
+msgid "   max record size: %u\n"
+msgstr "   dim. max. a Ã®nregistrÄƒrii: %u\n"
+
+#: vms-alpha.c:6152
+#, c-format
+msgid "   Error: The module name is missing\n"
+msgstr "   Eroare: numele modulului lipseÈ™te\n"
+
+#: vms-alpha.c:6158
+#, c-format
+msgid "   Error: The module name is too long\n"
+msgstr "   Eroare: numele modulului este prea lung\n"
+
+#: vms-alpha.c:6161
+#, c-format
+msgid "   module name    : %.*s\n"
+msgstr "   numele modulului         : %.*s\n"
+
+#: vms-alpha.c:6165
+#, c-format
+msgid "   Error: The module version is missing\n"
+msgstr "   Eroare: versiunea modulului lipseÈ™te\n"
+
+#: vms-alpha.c:6171
+#, c-format
+msgid "   Error: The module version is too long\n"
+msgstr "   Eroare: versiunea modulului este prea lungÄƒ\n"
+
+#: vms-alpha.c:6174
+#, c-format
+msgid "   module version : %.*s\n"
+msgstr "   versiunea modulului      : %.*s\n"
+
+#: vms-alpha.c:6177
+#, c-format
+msgid "   Error: The compile date is truncated\n"
+msgstr "   Eroare: data de compilare este trunchiatÄƒ\n"
+
+#: vms-alpha.c:6179
+#, c-format
+msgid "   compile date   : %.17s\n"
+msgstr "   data compilÄƒrii          : %.17s\n"
+
+#: vms-alpha.c:6184
+#, c-format
+msgid "Language Processor Name\n"
+msgstr "Numele procesorului de limbaj\n"
+
+#: vms-alpha.c:6185
+#, c-format
+msgid "   language name: %.*s\n"
+msgstr "   numele limbajului: %.*s\n"
+
+#: vms-alpha.c:6189
+#, c-format
+msgid "Source Files Header\n"
+msgstr "Antetul fiÈ™ierelor sursÄƒ\n"
+
+#: vms-alpha.c:6190
+#, c-format
+msgid "   file: %.*s\n"
+msgstr "   fiÈ™ier: %.*s\n"
+
+#: vms-alpha.c:6194
+#, c-format
+msgid "Title Text Header\n"
+msgstr "Antetul textului titlului\n"
+
+#: vms-alpha.c:6195
+#, c-format
+msgid "   title: %.*s\n"
+msgstr "   titlu: %.*s\n"
+
+#: vms-alpha.c:6199
+#, c-format
+msgid "Copyright Header\n"
+msgstr "Antet pentru drepturi de autor\n"
+
+#: vms-alpha.c:6200
+#, c-format
+msgid "   copyright: %.*s\n"
+msgstr "   drepturi de autor: %.*s\n"
+
+#: vms-alpha.c:6204
+#, c-format
+msgid "unhandled emh subtype %u\n"
+msgstr "subtip emh negestionat %u\n"
+
+#: vms-alpha.c:6214
+#, c-format
+msgid "  EEOM (len=%u):\n"
+msgstr "  EEOM (lung=%u):\n"
+
+#: vms-alpha.c:6219
+#, c-format
+msgid "   Error: The length is less than the length of an EEOM record\n"
+msgstr "   Eroare: lungimea este mai micÄƒ decÃ¢t lungimea unei Ã®nregistrÄƒri EEOM\n"
+
+#: vms-alpha.c:6223
+#, c-format
+msgid "   number of cond linkage pairs: %u\n"
+msgstr "   numÄƒrul de perechi de legÄƒturÄƒ cond: %u\n"
+
+#: vms-alpha.c:6225
+#, c-format
+msgid "   completion code: %u\n"
+msgstr "   cod de completare: %u\n"
+
+#: vms-alpha.c:6229
+#, c-format
+msgid "   transfer addr flags: 0x%02x\n"
+msgstr "   fanioane de adresÄƒ de transfer: 0x%02x\n"
+
+#: vms-alpha.c:6230
+#, c-format
+msgid "   transfer addr psect: %u\n"
+msgstr "   psect de adresÄƒ de transfer   : %u\n"
+
+#: vms-alpha.c:6232
+#, c-format
+msgid "   transfer address   : 0x%08x\n"
+msgstr "   adresÄƒ de transfer            : 0x%08x\n"
+
+#: vms-alpha.c:6241
+msgid " WEAK"
+msgstr " WEAK"
+
+#: vms-alpha.c:6243
+msgid " DEF"
+msgstr " DEF"
+
+#: vms-alpha.c:6245
+msgid " UNI"
+msgstr " UNI"
+
+#: vms-alpha.c:6247 vms-alpha.c:6268
+msgid " REL"
+msgstr " REL"
+
+#: vms-alpha.c:6249
+msgid " COMM"
+msgstr " COMM"
+
+#: vms-alpha.c:6251
+msgid " VECEP"
+msgstr " VECEP"
+
+#: vms-alpha.c:6253
+msgid " NORM"
+msgstr " NORM"
+
+#: vms-alpha.c:6255
+msgid " QVAL"
+msgstr " QVAL"
+
+#: vms-alpha.c:6262
+msgid " PIC"
+msgstr " PIC"
+
+#: vms-alpha.c:6264
+msgid " LIB"
+msgstr " LIB"
+
+#: vms-alpha.c:6266
+msgid " OVR"
+msgstr " OVR"
+
+#: vms-alpha.c:6270
+msgid " GBL"
+msgstr " GBL"
+
+#: vms-alpha.c:6272
+msgid " SHR"
+msgstr " SHR"
+
+#: vms-alpha.c:6274
+msgid " EXE"
+msgstr " EXE"
+
+#: vms-alpha.c:6276
+msgid " RD"
+msgstr " RD"
+
+#: vms-alpha.c:6278
+msgid " WRT"
+msgstr " WRT"
+
+#: vms-alpha.c:6280
+msgid " VEC"
+msgstr " VEC"
+
+#: vms-alpha.c:6282
+msgid " NOMOD"
+msgstr " NOMOD"
+
+#: vms-alpha.c:6284
+msgid " COM"
+msgstr " COM"
+
+#: vms-alpha.c:6286
+msgid " 64B"
+msgstr " 64B"
+
+#: vms-alpha.c:6295
+#, c-format
+msgid "  EGSD (len=%u):\n"
+msgstr "  EGSD (lung=%u):\n"
+
+#: vms-alpha.c:6310
+#, c-format
+msgid "  EGSD entry %2u (type: %u, len: %u): "
+msgstr "  intrarea EGSD %2u (tip: %u, lung: %u): "
+
+#: vms-alpha.c:6316 vms-alpha.c:6611
+#, c-format
+msgid "   Erroneous length\n"
+msgstr "   Lungime eronatÄƒ\n"
+
+#: vms-alpha.c:6329
+#, c-format
+msgid "PSC - Program section definition\n"
+msgstr "PSC - Definirea secÈ›iunii programului\n"
+
+#: vms-alpha.c:6330 vms-alpha.c:6350
+#, c-format
+msgid "   alignment  : 2**%u\n"
+msgstr "   alinierea  : 2**%u\n"
+
+#: vms-alpha.c:6331 vms-alpha.c:6351
+#, c-format
+msgid "   flags      : 0x%04x"
+msgstr "   fanioane   : 0x%04x"
+
+#: vms-alpha.c:6335
+#, c-format
+msgid "   alloc (len): %u (0x%08x)\n"
+msgstr "   aloc (lung): %u (0x%08x)\n"
+
+#: vms-alpha.c:6337 vms-alpha.c:6403 vms-alpha.c:6471
+#, c-format
+msgid "   name       : %.*s\n"
+msgstr "   nume       : %.*s\n"
+
+#: vms-alpha.c:6349
+#, c-format
+msgid "SPSC - Shared Image Program section def\n"
+msgstr "SPSC - Definirea secÈ›iunii programului de imagine partajatÄƒ\n"
+
+#: vms-alpha.c:6355
+#, c-format
+msgid "   alloc (len)   : %u (0x%08x)\n"
+msgstr "   aloc (lung)     : %u (0x%08x)\n"
+
+#: vms-alpha.c:6356
+#, c-format
+msgid "   image offset  : 0x%08x\n"
+msgstr "   poziÈ›ie imagine : 0x%08x\n"
+
+#: vms-alpha.c:6358
+#, c-format
+msgid "   symvec offset : 0x%08x\n"
+msgstr "   poziÈ›ie symvec  : 0x%08x\n"
+
+#: vms-alpha.c:6361
+#, c-format
+msgid "   name          : %.*s\n"
+msgstr "   nume            : %.*s\n"
+
+#: vms-alpha.c:6377
+#, c-format
+msgid "SYM - Global symbol definition\n"
+msgstr "SYM - Definirea simbolului global\n"
+
+#: vms-alpha.c:6378 vms-alpha.c:6459 vms-alpha.c:6483 vms-alpha.c:6506
+#, c-format
+msgid "   flags: 0x%04x"
+msgstr "   fanioane: 0x%04x"
+
+#: vms-alpha.c:6381
+#, c-format
+msgid "   psect offset: 0x%08x\n"
+msgstr "   poziÈ›ie psect : 0x%08x\n"
+
+#: vms-alpha.c:6385
+#, c-format
+msgid "   code address: 0x%08x\n"
+msgstr "   adresa codului: 0x%08x\n"
+
+#: vms-alpha.c:6387
+#, c-format
+msgid "   psect index for entry point : %u\n"
+msgstr "   index psect pentru punctul de intrare : %u\n"
+
+#: vms-alpha.c:6390 vms-alpha.c:6490 vms-alpha.c:6513
+#, c-format
+msgid "   psect index : %u\n"
+msgstr "   index psect   : %u\n"
+
+#: vms-alpha.c:6393 vms-alpha.c:6493 vms-alpha.c:6516
+#, c-format
+msgid "   name        : %.*s\n"
+msgstr "   nume          : %.*s\n"
+
+#: vms-alpha.c:6401
+#, c-format
+msgid "SYM - Global symbol reference\n"
+msgstr "SYM - ReferinÈ›Äƒ de simbol global\n"
+
+#: vms-alpha.c:6416
+#, c-format
+msgid "IDC - Ident Consistency check\n"
+msgstr "IDC - Verificarea consistenÈ›ei identificÄƒrii\n"
+
+#: vms-alpha.c:6417
+#, c-format
+msgid "   flags         : 0x%08x"
+msgstr "   fanioane         : 0x%08x"
+
+#: vms-alpha.c:6421
+#, c-format
+msgid "   id match      : %x\n"
+msgstr "   potrivire id     : %x\n"
+
+#: vms-alpha.c:6423
+#, c-format
+msgid "   error severity: %x\n"
+msgstr "   gravitatea erorii: %x\n"
+
+#: vms-alpha.c:6427
+#, c-format
+msgid "   entity name   : %.*s\n"
+msgstr "   numele entitÄƒÈ›ii : %.*s\n"
+
+#: vms-alpha.c:6433
+#, c-format
+msgid "   object name   : %.*s\n"
+msgstr "   numele obiectului: %.*s\n"
+
+#: vms-alpha.c:6442
+#, c-format
+msgid "   binary ident  : 0x%08x\n"
+msgstr "   ident binar      : 0x%08x\n"
+
+#: vms-alpha.c:6446
+#, c-format
+msgid "   ascii ident   : %.*s\n"
+msgstr "   ascii ident      : %.*s\n"
+
+#: vms-alpha.c:6458
+#, c-format
+msgid "SYMG - Universal symbol definition\n"
+msgstr "SYMG - Definirea simbolului universal\n"
+
+#: vms-alpha.c:6462
+#, c-format
+msgid "   symbol vector offset: 0x%08x\n"
+msgstr "   decalaj vector simbol: 0x%08x\n"
+
+#: vms-alpha.c:6464
+#, c-format
+msgid "   entry point: 0x%08x\n"
+msgstr "   punct de intrare: 0x%08x\n"
+
+#: vms-alpha.c:6466
+#, c-format
+msgid "   proc descr : 0x%08x\n"
+msgstr "   descr proc      : 0x%08x\n"
+
+#: vms-alpha.c:6468
+#, c-format
+msgid "   psect index: %u\n"
+msgstr "   index psect     : %u\n"
+
+#: vms-alpha.c:6482
+#, c-format
+msgid "SYMV - Vectored symbol definition\n"
+msgstr "SYMV - Definirea simbolului vectorizat\n"
+
+#: vms-alpha.c:6486
+#, c-format
+msgid "   vector      : 0x%08x\n"
+msgstr "   vector       : 0x%08x\n"
+
+#: vms-alpha.c:6488 vms-alpha.c:6511
+#, c-format
+msgid "   psect offset: %u\n"
+msgstr "   poziÈ›ie psect: %u\n"
+
+#: vms-alpha.c:6505
+#, c-format
+msgid "SYMM - Global symbol definition with version\n"
+msgstr "SYMM - Definirea simbolului global cu versiunea\n"
+
+#: vms-alpha.c:6509
+#, c-format
+msgid "   version mask: 0x%08x\n"
+msgstr "   masca vers  : 0x%08x\n"
+
+#: vms-alpha.c:6522
+#, c-format
+msgid "unhandled egsd entry type %u\n"
+msgstr "tip de intrare egsd negestionat %u\n"
+
+#: vms-alpha.c:6561
+#, c-format
+msgid "    linkage index: %u, replacement insn: 0x%08x\n"
+msgstr "    index legÄƒturÄƒ: %u, insn Ã®nlocuire: 0x%08x\n"
+
+#: vms-alpha.c:6565
+#, c-format
+msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
+msgstr "    ind psect1 : %u, decalaj1 : 0x%08x %08x\n"
+
+#: vms-alpha.c:6570
+#, c-format
+msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
+msgstr "    ind psect 2: %u, decalaj 2: 0x%08x %08x\n"
+
+#: vms-alpha.c:6576
+#, c-format
+msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
+msgstr "    ind psect 3: %u, decalaj 3: 0x%08x %08x\n"
+
+#: vms-alpha.c:6581
+#, c-format
+msgid "    global name: %.*s\n"
+msgstr "    nume global: %.*s\n"
+
+#: vms-alpha.c:6593
+#, c-format
+msgid "  %s (len=%u):\n"
+msgstr "  %s (lung=%u):\n"
+
+#: vms-alpha.c:6616
+#, c-format
+msgid "   (type: %3u, size: %3u): "
+msgstr "   (tip: %3u, dim.: %3u): "
+
+#: vms-alpha.c:6622
+#, c-format
+msgid "STA_GBL (stack global) %.*s\n"
+msgstr "STA_GBL (stivÄƒ globalÄƒ) %.*s\n"
+
+#: vms-alpha.c:6626
+#, c-format
+msgid "STA_LW (stack longword)"
+msgstr "STA_LW (stivÄƒ de cuvinte lungi)"
+
+#: vms-alpha.c:6632
+#, c-format
+msgid "STA_QW (stack quadword)"
+msgstr "STA_QW (stivÄƒ de cuvinte Ã®n catren)"
+
+#: vms-alpha.c:6639
+#, c-format
+msgid "STA_PQ (stack psect base + offset)\n"
+msgstr "STA_PQ (stivÄƒ de bazÄƒ psect + deplasarea)\n"
+
+#: vms-alpha.c:6642
+#, c-format
+msgid "    psect: %u, offset: 0x%08x %08x\n"
+msgstr "    psect: %u, decalaj: 0x%08x %08x\n"
+
+#: vms-alpha.c:6648
+#, c-format
+msgid "STA_LI (stack literal)\n"
+msgstr "STA_LI (stivÄƒ literalÄƒ)\n"
+
+#: vms-alpha.c:6651
+#, c-format
+msgid "STA_MOD (stack module)\n"
+msgstr "STA_MOD (stivÄƒ modul)\n"
+
+#: vms-alpha.c:6654
+#, c-format
+msgid "STA_CKARG (compare procedure argument)\n"
+msgstr "STA_CKARG (argumentul procedurii de comparare)\n"
+
+#: vms-alpha.c:6658
+#, c-format
+msgid "STO_B (store byte)\n"
+msgstr "STO_B (stocare octet)\n"
+
+#: vms-alpha.c:6661
+#, c-format
+msgid "STO_W (store word)\n"
+msgstr "STO_B (stocare cuvinte)\n"
+
+#: vms-alpha.c:6664
+#, c-format
+msgid "STO_LW (store longword)\n"
+msgstr "STO_LW (stocare cuvinte lungi)\n"
+
+#: vms-alpha.c:6667
+#, c-format
+msgid "STO_QW (store quadword)\n"
+msgstr "STA_QW (stocare de cuvinte Ã®n catren)\n"
+
+#: vms-alpha.c:6674
+#, c-format
+msgid "STO_IMMR (store immediate repeat) %u bytes\n"
+msgstr "STO_IMMR (stocare imediatÄƒ repetatÄƒ) %u octeÈ›i\n"
+
+#: vms-alpha.c:6683
+#, c-format
+msgid "STO_GBL (store global) %.*s\n"
+msgstr "STO_GBL (stocare globalÄƒ) %.*s\n"
+
+#: vms-alpha.c:6688
+#, c-format
+msgid "STO_CA (store code address) %.*s\n"
+msgstr "STO_CA (stocare adresÄƒ cod) %.*s\n"
+
+#: vms-alpha.c:6692
+#, c-format
+msgid "STO_RB (store relative branch)\n"
+msgstr "STO_RB (stocarea ramurii relative)\n"
+
+#: vms-alpha.c:6695
+#, c-format
+msgid "STO_AB (store absolute branch)\n"
+msgstr "STO_RB (stocarea ramurii absolute)\n"
+
+#: vms-alpha.c:6698
+#, c-format
+msgid "STO_OFF (store offset to psect)\n"
+msgstr "STO_OFF (stocheazÄƒ deplasarea Ã®n psect)\n"
+
+#: vms-alpha.c:6705
+#, c-format
+msgid "STO_IMM (store immediate) %u bytes\n"
+msgstr "STO_IMM (stocare imediatÄƒ) %u octeÈ›i\n"
+
+#: vms-alpha.c:6714
+#, c-format
+msgid "STO_GBL_LW (store global longword) %.*s\n"
+msgstr "STO_GBL_LW (stocare globalÄƒ de cuvinte lungi) %.*s\n"
+
+#: vms-alpha.c:6718
+#, c-format
+msgid "STO_OFF (store LP with procedure signature)\n"
+msgstr "STO_OFF (stocare LP cu semnÄƒtura procedurii)\n"
+
+#: vms-alpha.c:6721
+#, c-format
+msgid "STO_BR_GBL (store branch global) *todo*\n"
+msgstr "STO_BR_GBL (stocarea ramurii globale) *neimplementatÄƒ Ã®ncÄƒ*\n"
+
+#: vms-alpha.c:6724
+#, c-format
+msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
+msgstr "STO_BR_PS (stocarea ramurii psect + deplasarea) *neimplementatÄƒ Ã®ncÄƒ*\n"
+
+#: vms-alpha.c:6728
+#, c-format
+msgid "OPR_NOP (no-operation)\n"
+msgstr "OPR_NOP (fÄƒrÄƒ operaÈ›ie)\n"
+
+#: vms-alpha.c:6731
+#, c-format
+msgid "OPR_ADD (add)\n"
+msgstr "OPR_ADD (adunare)\n"
+
+#: vms-alpha.c:6734
+#, c-format
+msgid "OPR_SUB (subtract)\n"
+msgstr "OPR_SUB (scÄƒdere)\n"
+
+#: vms-alpha.c:6737
+#, c-format
+msgid "OPR_MUL (multiply)\n"
+msgstr "OPR_MUL (multiplicare)\n"
+
+#: vms-alpha.c:6740
+#, c-format
+msgid "OPR_DIV (divide)\n"
+msgstr "OPR_DIV (Ã®mpÄƒrÈ›ire)\n"
+
+#: vms-alpha.c:6743
+#, c-format
+msgid "OPR_AND (logical and)\n"
+msgstr "OPR_AND (â€žÈ™iâ€� logic)\n"
+
+#: vms-alpha.c:6746
+#, c-format
+msgid "OPR_IOR (logical inclusive or)\n"
+msgstr "OPR_IOR (â€žsauâ€� inclusiv logic)\n"
+
+#: vms-alpha.c:6749
+#, c-format
+msgid "OPR_EOR (logical exclusive or)\n"
+msgstr "OPR_IOR (â€žsauâ€� exclusiv logic)\n"
+
+#: vms-alpha.c:6752
+#, c-format
+msgid "OPR_NEG (negate)\n"
+msgstr "OPR_NEG (negaÈ›ie)\n"
+
+#: vms-alpha.c:6755
+#, c-format
+msgid "OPR_COM (complement)\n"
+msgstr "OPR_COM (complement)\n"
+
+#: vms-alpha.c:6758
+#, c-format
+msgid "OPR_INSV (insert field)\n"
+msgstr "OPR_INSV (inserare cÃ¢mp)\n"
+
+#: vms-alpha.c:6761
+#, c-format
+msgid "OPR_ASH (arithmetic shift)\n"
+msgstr "OPR_ASH (deplasare aritmeticÄƒ)\n"
+
+#: vms-alpha.c:6764
+#, c-format
+msgid "OPR_USH (unsigned shift)\n"
+msgstr "OPR_USH (deplasare fÄƒrÄƒ semn)\n"
+
+#: vms-alpha.c:6767
+#, c-format
+msgid "OPR_ROT (rotate)\n"
+msgstr "OPR_ROT (rotire)\n"
+
+#: vms-alpha.c:6770
+#, c-format
+msgid "OPR_SEL (select)\n"
+msgstr "OPR_SEL (selectare)\n"
+
+#: vms-alpha.c:6773
+#, c-format
+msgid "OPR_REDEF (redefine symbol to curr location)\n"
+msgstr "OPR_REDEF (redefineÈ™te simbolul la locaÈ›ia actualÄƒ)\n"
+
+#: vms-alpha.c:6776
+#, c-format
+msgid "OPR_REDEF (define a literal)\n"
+msgstr "OPR_REDEF (defineÈ™te un literal)\n"
+
+#: vms-alpha.c:6780
+#, c-format
+msgid "STC_LP (store cond linkage pair)\n"
+msgstr "STC_LP (stocare pereche de legÄƒturi condiÈ›ionale)\n"
+
+#: vms-alpha.c:6784
+#, c-format
+msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
+msgstr "STC_LP_PSB (stocare pereche de legÄƒturi condiÈ›ionale + semnÄƒturÄƒ)\n"
+
+#: vms-alpha.c:6788
+#, c-format
+msgid "   linkage index: %u, procedure: %.*s\n"
+msgstr "   index de legÄƒturÄƒ: %u, procedura: %.*s\n"
+
+#: vms-alpha.c:6795
+#, c-format
+msgid "   signature: %.*s\n"
+msgstr "   semnÄƒtura: %.*s\n"
+
+#: vms-alpha.c:6801
+#, c-format
+msgid "STC_GBL (store cond global)\n"
+msgstr "STC_GBL (stocare condiÈ›ionalÄƒ globalÄƒ)\n"
+
+#: vms-alpha.c:6804
+#, c-format
+msgid "   linkage index: %u, global: %.*s\n"
+msgstr "   index de legÄƒturÄƒ: %u, global: %.*s\n"
+
+#: vms-alpha.c:6809
+#, c-format
+msgid "STC_GCA (store cond code address)\n"
+msgstr "STC_GCA (adresa codului condiÈ›ional de stocare)\n"
+
+#: vms-alpha.c:6812
+#, c-format
+msgid "   linkage index: %u, procedure name: %.*s\n"
+msgstr "   index de legÄƒturÄƒ: %u, nume procedurÄƒ: %.*s\n"
+
+#: vms-alpha.c:6817
+#, c-format
+msgid "STC_PS (store cond psect + offset)\n"
+msgstr "STC_PS (stocare condiÈ›ionalÄƒ psect + deplasare)\n"
+
+#: vms-alpha.c:6821
+#, c-format
+msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
+msgstr "   index de legÄƒturÄƒ: %u, psect: %u, decalaj: 0x%08x %08x\n"
+
+#: vms-alpha.c:6828
+#, c-format
+msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
+msgstr "STC_NOP_GBL (stocare condiÈ›ionalÄƒ NOP la adresa globalÄƒ)\n"
+
+#: vms-alpha.c:6832
+#, c-format
+msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
+msgstr "STC_NOP_PS (stocare condiÈ›ionalÄƒ NOP la psect + deplasarea)\n"
+
+#: vms-alpha.c:6836
+#, c-format
+msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
+msgstr "STC_BSR_GBL (stocare condiÈ›ionalÄƒ BSR la adresa globalÄƒ)\n"
+
+#: vms-alpha.c:6840
+#, c-format
+msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
+msgstr "STC_BSR_PS (stocare condiÈ›ionalÄƒ BSR la psect + deplasarea)\n"
+
+#: vms-alpha.c:6844
+#, c-format
+msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
+msgstr "STC_LDA_GBL (stocare condiÈ›ionalÄƒ LDA la adresa globalÄƒ)\n"
+
+#: vms-alpha.c:6848
+#, c-format
+msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
+msgstr "STC_LDA_PS (stocare condiÈ›ionalÄƒ LDA la psect + deplasarea)\n"
+
+#: vms-alpha.c:6852
+#, c-format
+msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
+msgstr "STC_BOH_GBL (stocare condiÈ›ionalÄƒ BOH la adresa globalÄƒ)\n"
+
+#: vms-alpha.c:6856
+#, c-format
+msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
+msgstr "STC_BOH_PS (stocare condiÈ›ionalÄƒ BOH la psect + deplasarea)\n"
+
+#: vms-alpha.c:6861
+#, c-format
+msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
+msgstr "STC_NBH_GBL (stocare condiÈ›ionalÄƒ sau indiciu la adresa globalÄƒ)\n"
+
+#: vms-alpha.c:6865
+#, c-format
+msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
+msgstr "STC_NBH_PS (stocare condiÈ›ionalÄƒ sau indiciu la psect + deplasarea)\n"
+
+#: vms-alpha.c:6869
+#, c-format
+msgid "CTL_SETRB (set relocation base)\n"
+msgstr "CTL_SETRB (stabileÈ™te baza de realocare)\n"
+
+#: vms-alpha.c:6875
+#, c-format
+msgid "CTL_AUGRB (augment relocation base) %u\n"
+msgstr "CTL_AUGRB ( mÄƒreÈ™te baza de realocare) %u\n"
+
+#: vms-alpha.c:6880
+#, c-format
+msgid "CTL_DFLOC (define location)\n"
+msgstr "CTL_DFLOC (defineÈ™te locaÈ›ia)\n"
+
+#: vms-alpha.c:6883
+#, c-format
+msgid "CTL_STLOC (set location)\n"
+msgstr "CTL_STLOC (stabileÈ™te locaÈ›ia)\n"
+
+#: vms-alpha.c:6886
+#, c-format
+msgid "CTL_STKDL (stack defined location)\n"
+msgstr "CTL_STKDL (locaÈ›ia definitÄƒ Ã®n stivÄƒ)\n"
+
+#: vms-alpha.c:6889 vms-alpha.c:7317 vms-alpha.c:7478
+#, c-format
+msgid "*unhandled*\n"
+msgstr "*negestionat*\n"
+
+#: vms-alpha.c:6914
+#, c-format
+msgid "cannot read GST record header\n"
+msgstr "nu se poate citi antetul Ã®nregistrÄƒrii GST\n"
+
+#. Ill-formed.
+#: vms-alpha.c:6937
+#, c-format
+msgid "cannot find EMH in first GST record\n"
+msgstr "nu se poate gÄƒsi EMH Ã®n prima Ã®nregistrare GST\n"
+
+#: vms-alpha.c:6961
+#, c-format
+msgid "corrupted GST\n"
+msgstr "GST corupt\n"
+
+#: vms-alpha.c:6974
+#, c-format
+msgid "cannot read GST record\n"
+msgstr "nu se poate citi Ã®nregistrarea GST\n"
 
-#: vms-tir.c:1220
-msgid "stack-local-symbol not fully implemented"
-msgstr "stack-local-symbol neimplementatã complet"
+#: vms-alpha.c:7001
+#, c-format
+msgid " unhandled EOBJ record type %u\n"
+msgstr " tip de Ã®nregistrare EOBJ negestionat %u\n"
+
+#: vms-alpha.c:7026
+#, c-format
+msgid "  bitcount: %u, base addr: 0x%08x\n"
+msgstr "  numÄƒr de biÈ›i: %u, adresa de bazÄƒ: 0x%08x\n"
+
+#: vms-alpha.c:7040
+#, c-format
+msgid "   bitmap: 0x%08x (count: %u):\n"
+msgstr "   hartÄƒ de biÈ›i: 0x%08x (contor: %u):\n"
+
+#: vms-alpha.c:7047
+#, c-format
+msgid " %08x"
+msgstr " %08x"
+
+#: vms-alpha.c:7074
+#, c-format
+msgid "  image %u (%u entries)\n"
+msgstr "  imagine %u (%u intrÄƒri)\n"
+
+#: vms-alpha.c:7080
+#, c-format
+msgid "   offset: 0x%08x, val: 0x%08x\n"
+msgstr "   decalaj: 0x%08x, val: 0x%08x\\\n"
+
+#: vms-alpha.c:7103
+#, c-format
+msgid "  image %u (%u entries), offsets:\n"
+msgstr "  imagine %u (%u intrÄƒri), decalaje:\n"
+
+#: vms-alpha.c:7110
+#, c-format
+msgid " 0x%08x"
+msgstr " 0x%08x"
+
+#. 64 bits.
+#: vms-alpha.c:7236
+#, c-format
+msgid "64 bits *unhandled*\n"
+msgstr "64 de biÈ›i *nu este gestionat*\n"
+
+#: vms-alpha.c:7241
+#, c-format
+msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
+msgstr "clasa: %u, dtype: %u, lungime: %u, indicator: 0x%08x\n"
+
+#: vms-alpha.c:7252
+#, c-format
+msgid "non-contiguous array of %s\n"
+msgstr "matrice non-contiguÄƒ de %s\n"
+
+#: vms-alpha.c:7259
+#, c-format
+msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
+msgstr "dimct: %u, aflags: 0x%02x, digiÈ›i: %u, scarÄƒ: %u\n"
+
+#: vms-alpha.c:7264
+#, c-format
+msgid "arsize: %u, a0: 0x%08x\n"
+msgstr "arsize: %u, a0: 0x%08x\n"
+
+#: vms-alpha.c:7268
+#, c-format
+msgid "Strides:\n"
+msgstr "PaÈ™i largi:\n"
+
+#: vms-alpha.c:7282
+#, c-format
+msgid "Bounds:\n"
+msgstr "Limite:\n"
+
+#: vms-alpha.c:7289
+#, c-format
+msgid "[%u]: Lower: %u, upper: %u\n"
+msgstr "[%u]: InferioarÄƒ: %u, superioarÄƒ: %u\n"
+
+#: vms-alpha.c:7303
+#, c-format
+msgid "unaligned bit-string of %s\n"
+msgstr "È™ir de biÈ›i nealiniaÈ›i de %s\n"
+
+#: vms-alpha.c:7310
+#, c-format
+msgid "base: %u, pos: %u\n"
+msgstr "bazÄƒ: %u, poziÈ›ie: %u\n"
+
+#: vms-alpha.c:7336
+#, c-format
+msgid "vflags: 0x%02x, value: 0x%08x "
+msgstr "vflags: 0x%02x, valoare: 0x%08x "
+
+#: vms-alpha.c:7343
+#, c-format
+msgid "(no value)\n"
+msgstr "(nicio valoare)\n"
+
+#: vms-alpha.c:7346
+#, c-format
+msgid "(not active)\n"
+msgstr "(nu este activ)\n"
+
+#: vms-alpha.c:7349
+#, c-format
+msgid "(not allocated)\n"
+msgstr "(nu este alocat)\n"
+
+#: vms-alpha.c:7352
+#, c-format
+msgid "(descriptor)\n"
+msgstr "(descriptor)\n"
+
+#: vms-alpha.c:7357
+#, c-format
+msgid "(trailing value)\n"
+msgstr "(valoare finalÄƒ)\n"
+
+#: vms-alpha.c:7360
+#, c-format
+msgid "(value spec follows)\n"
+msgstr "(urmeazÄƒ specificaÈ›iile valorii)\n"
+
+#: vms-alpha.c:7363
+#, c-format
+msgid "(at bit offset %u)\n"
+msgstr "(la decalajul de biÈ›i %u)\n"
+
+#: vms-alpha.c:7367
+#, c-format
+msgid "(reg: %u, disp: %u, indir: %u, kind: "
+msgstr "(reg: %u, disp: %u, indir: %u, gen: "
+
+#: vms-alpha.c:7374
+msgid "literal"
+msgstr "literal"
+
+#: vms-alpha.c:7377
+msgid "address"
+msgstr "adresa"
+
+#: vms-alpha.c:7380
+msgid "desc"
+msgstr "desc"
+
+#: vms-alpha.c:7383
+msgid "reg"
+msgstr "reg"
+
+#: vms-alpha.c:7404
+#, c-format
+msgid "len: %2u, kind: %2u "
+msgstr "lung: %2u, gen: %2u "
+
+#: vms-alpha.c:7412
+#, c-format
+msgid "atomic, type=0x%02x %s\n"
+msgstr "atomic, tip=0x%02x %s\n"
+
+#: vms-alpha.c:7417
+#, c-format
+msgid "indirect, defined at 0x%08x\n"
+msgstr "indirect, definit la 0x%08x\n"
+
+#: vms-alpha.c:7421
+#, c-format
+msgid "typed pointer\n"
+msgstr "indicator tastat\n"
+
+#: vms-alpha.c:7425
+#, c-format
+msgid "pointer\n"
+msgstr "indicator\n"
+
+#: vms-alpha.c:7436
+#, c-format
+msgid "array, dim: %u, bitmap: "
+msgstr "matrice, dim: %u, bitmap: "
+
+#: vms-alpha.c:7451
+#, c-format
+msgid "array descriptor:\n"
+msgstr "descriptor matrice:\n"
+
+#: vms-alpha.c:7462
+#, c-format
+msgid "type spec for element:\n"
+msgstr "spec de tip pentru element:\n"
+
+#: vms-alpha.c:7464
+#, c-format
+msgid "type spec for subscript %u:\n"
+msgstr "spec de tip pentru indice %u:\n"
+
+#: vms-alpha.c:7489
+#, c-format
+msgid "Debug symbol table:\n"
+msgstr "Tabel cu simboluri de depanare:\n"
+
+#: vms-alpha.c:7500
+#, c-format
+msgid "cannot read DST header\n"
+msgstr "nu se poate citi antetul DST\n"
+
+#: vms-alpha.c:7506
+#, c-format
+msgid " type: %3u, len: %3u (at 0x%08x): "
+msgstr " tip: %3u, lung: %3u (la 0x%08x): "
+
+#: vms-alpha.c:7523
+#, c-format
+msgid "cannot read DST symbol\n"
+msgstr "nu se poate citi simbolul DST\n"
+
+#: vms-alpha.c:7567
+#, c-format
+msgid "standard data: %s\n"
+msgstr "date standard: %s\n"
+
+#: vms-alpha.c:7571 vms-alpha.c:7695
+#, c-format
+msgid "    name: %.*s\n"
+msgstr "    nume: %.*s\n"
+
+#: vms-alpha.c:7579
+#, c-format
+msgid "modbeg\n"
+msgstr "Ã®nceput_modul\n"
+
+#: vms-alpha.c:7583
+#, c-format
+msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
+msgstr "   fanioane: %d, limbaj: %u, major: %u, minor: %u\n"
+
+#: vms-alpha.c:7593 vms-alpha.c:7959
+#, c-format
+msgid "   module name: %.*s\n"
+msgstr "   nume modul: %.*s\n"
+
+#: vms-alpha.c:7600
+#, c-format
+msgid "   compiler   : %.*s\n"
+msgstr "   compilator   : %.*s\n"
+
+#: vms-alpha.c:7607
+#, c-format
+msgid "modend\n"
+msgstr "sfÃ¢rÈ™it_modul\n"
+
+#: vms-alpha.c:7614
+msgid "rtnbeg\n"
+msgstr "Ã®nceputul rutinei\n"
+
+#: vms-alpha.c:7618
+#, c-format
+msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
+msgstr "    fanioane: %u, adresa: 0x%08x, adresa-pd: 0x%08x\n"
+
+#: vms-alpha.c:7627
+#, c-format
+msgid "    routine name: %.*s\n"
+msgstr "    nume rutinÄƒ: %.*s\n"
+
+#: vms-alpha.c:7638
+#, c-format
+msgid "rtnend: size 0x%08x\n"
+msgstr "sfÃ¢rÈ™it rutinÄƒ: dimens. 0x%08x\n"
+
+#: vms-alpha.c:7648
+#, c-format
+msgid "prolog: bkpt address 0x%08x\n"
+msgstr "prolog: adresa bkpt 0x%08x\n"
+
+#: vms-alpha.c:7658
+#, c-format
+msgid "epilog: flags: %u, count: %u\n"
+msgstr "epilog: fanioane: %u, numÄƒr: %u\n"
+
+#: vms-alpha.c:7673
+#, c-format
+msgid "blkbeg: address: 0x%08x, name: %.*s\n"
+msgstr "Ã®nceputul blk: adresa: 0x%08x, nume: %.*s\n"
+
+#: vms-alpha.c:7685
+#, c-format
+msgid "blkend: size: 0x%08x\n"
+msgstr "sfÃ¢rÈ™it blk: dimens.: 0x%08x\n"
+
+#: vms-alpha.c:7691
+#, c-format
+msgid "typspec (len: %u)\n"
+msgstr "specificaÈ›ie tip (lungime: %u)\n"
+
+#: vms-alpha.c:7707
+#, c-format
+msgid "septyp, name: %.*s\n"
+msgstr "tip sep, nume: %.*s\n"
+
+#: vms-alpha.c:7723
+#, c-format
+msgid "recbeg: name: %.*s\n"
+msgstr "Ã®nceput Ã®nreg.: nume: %.*s\n"
+
+#: vms-alpha.c:7727
+#, c-format
+msgid "    len: %u bits\n"
+msgstr "    lungime: %u biÈ›i\n"
+
+#: vms-alpha.c:7733
+#, c-format
+msgid "recend\n"
+msgstr "sfÃ¢rÈ™it Ã®nreg.\n"
+
+#: vms-alpha.c:7738
+#, c-format
+msgid "enumbeg, len: %u, name: %.*s\n"
+msgstr "Ã®nceput enumerare, lungime: %u, nume: %.*s\n"
+
+#: vms-alpha.c:7744
+#, c-format
+msgid "enumelt, name: %.*s\n"
+msgstr "enumerare lelemente, nume: %.*s\n"
 
-#: vms-tir.c:1233
-msgid "stack-literal not fully implemented"
-msgstr "stack-literal neimplementatã complet"
+#: vms-alpha.c:7750
+#, c-format
+msgid "enumend\n"
+msgstr "sfÃ¢rÈ™it enumerare\n"
+
+#: vms-alpha.c:7757
+#, c-format
+msgid "label, name: %.*s\n"
+msgstr "etichetÄƒ, nume: %.*s\n"
 
-#: vms-tir.c:1254
-msgid "stack-local-symbol-entry-point-mask not fully implemented"
-msgstr "stack-local-symbol-entry-point-mask neimplementatã complet"
+#: vms-alpha.c:7760
+#, c-format
+msgid "    address: 0x%08x\n"
+msgstr "    adresa: 0x%08x\n"
+
+#: vms-alpha.c:7772
+#, c-format
+msgid "discontiguous range (nbr: %u)\n"
+msgstr "interval de Ã®ntrerupere (nbr: %u)\n"
+
+#: vms-alpha.c:7779
+#, c-format
+msgid "    address: 0x%08x, size: %u\n"
+msgstr "    adresa: 0x%08x, dimens.: %u\n"
+
+#: vms-alpha.c:7790
+#, c-format
+msgid "line num  (len: %u)\n"
+msgstr "numÄƒr linie  (lungime: %u)\n"
+
+#: vms-alpha.c:7809
+#, c-format
+msgid "delta_pc_w %u\n"
+msgstr "delta_pc_w %u\n"
+
+#: vms-alpha.c:7818
+#, c-format
+msgid "incr_linum(b): +%u\n"
+msgstr "incr_linum(b): +%u\n"
+
+#: vms-alpha.c:7826
+#, c-format
+msgid "incr_linum_w: +%u\n"
+msgstr "incr_linum_w: +%u\n"
+
+#: vms-alpha.c:7834
+#, c-format
+msgid "incr_linum_l: +%u\n"
+msgstr "incr_linum_l: +%u\n"
+
+#: vms-alpha.c:7842
+#, c-format
+msgid "set_line_num(w) %u\n"
+msgstr "set_line_num(w) %u\n"
+
+#: vms-alpha.c:7849
+#, c-format
+msgid "set_line_num_b %u\n"
+msgstr "set_line_num_b %u\n"
+
+#: vms-alpha.c:7856
+#, c-format
+msgid "set_line_num_l %u\n"
+msgstr "set_line_num_l %u\n"
+
+#: vms-alpha.c:7863
+#, c-format
+msgid "set_abs_pc: 0x%08x\n"
+msgstr "set_abs_pc: 0x%08x\n"
+
+#: vms-alpha.c:7869
+#, c-format
+msgid "delta_pc_l: +0x%08x\n"
+msgstr "delta_pc_l: +0x%08x\n"
+
+#: vms-alpha.c:7876
+#, c-format
+msgid "term(b): 0x%02x"
+msgstr "term(b): 0x%02x"
+
+#: vms-alpha.c:7878
+#, c-format
+msgid "        pc: 0x%08x\n"
+msgstr "        pc: 0x%08x\n"
+
+#: vms-alpha.c:7885
+#, c-format
+msgid "term_w: 0x%04x"
+msgstr "term_w: 0x%04x"
+
+#: vms-alpha.c:7887
+#, c-format
+msgid "    pc: 0x%08x\n"
+msgstr "    pc: 0x%08x\n"
+
+#: vms-alpha.c:7893
+#, c-format
+msgid "delta pc +%-4d"
+msgstr "delta pc +%-4d"
 
-#: vms-tir.c:1531 vms-tir.c:1543 vms-tir.c:1555 vms-tir.c:1567 vms-tir.c:1632
-#: vms-tir.c:1640 vms-tir.c:1648
+#: vms-alpha.c:7897
 #, c-format
-msgid "%s: not fully implemented"
-msgstr "%s: neimplementatã complet"
+msgid "    pc: 0x%08x line: %5u\n"
+msgstr "    pc: 0x%08x line: %5u\n"
 
-#: vms-tir.c:1705
+#: vms-alpha.c:7902
 #, c-format
-msgid "obj code %d not found"
-msgstr "codul abj %d nu a fost gãsit"
+msgid "    *unhandled* cmd %u\n"
+msgstr "    cmd *negestionatÄƒ* %u\n"
 
-#: vms-tir.c:2043
+#: vms-alpha.c:7917
 #, c-format
-msgid "SEC_RELOC with no relocs in section %s"
-msgstr "SEC_RELOC fãrã relocãri în secþiunea %s"
+msgid "source (len: %u)\n"
+msgstr "sursÄƒ (lungime: %u)\n"
 
-#: vms-tir.c:2331
+#: vms-alpha.c:7936
 #, c-format
-msgid "Unhandled relocation %s"
-msgstr "Relocare nemanipulabilã %s"
+msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
+msgstr "   declfile: lungime: %u, fanioane: %u, id fiÈ™ier: %u\n"
 
-#: xcofflink.c:1244
+#: vms-alpha.c:7941
 #, c-format
-msgid "%s: `%s' has line numbers but no enclosing section"
-msgstr "%s: `%s' are numere de linii dar nici o secþiune de închidere"
+msgid "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
+msgstr "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 
-#: xcofflink.c:1297
+#: vms-alpha.c:7953
 #, c-format
-msgid "%s: class %d symbol `%s' has no aux entries"
-msgstr "%s: clasa %d simbolul `%s' nu are intrãri aux"
+msgid "   filename   : %.*s\n"
+msgstr "   nume fiÈ™ier   : %.*s\n"
 
-#: xcofflink.c:1320
+#: vms-alpha.c:7969
 #, c-format
-msgid "%s: symbol `%s' has unrecognized csect type %d"
-msgstr "%s: simbolul `%s' are tip necunoscut csect %d"
+msgid "   setfile %u\n"
+msgstr "   setfile %u\n"
 
-#: xcofflink.c:1332
+#: vms-alpha.c:7976 vms-alpha.c:7983
 #, c-format
-msgid "%s: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d"
-msgstr "%s: simbol XTY_ER invalid `%s': clasa %d scnum %d scnlen %d"
+msgid "   setrec %u\n"
+msgstr "   setrec %u\n"
 
-#: xcofflink.c:1368
+#: vms-alpha.c:7990 vms-alpha.c:7997
 #, c-format
-msgid "%s: XMC_TC0 symbol `%s' is class %d scnlen %d"
-msgstr "%s: simblul XMC_TC0 `%s' este clasa %d scnlen %d"
+msgid "   setlnum %u\n"
+msgstr "   setlnum %u\n"
 
-#: xcofflink.c:1520
+#: vms-alpha.c:8004 vms-alpha.c:8011
 #, c-format
-msgid "%s: csect `%s' not in enclosing section"
-msgstr "%s: csect `%s' nu este în secþiunea de închidere"
+msgid "   deflines %u\n"
+msgstr "   deflines %u\n"
 
-#: xcofflink.c:1627
+#: vms-alpha.c:8015
 #, c-format
-msgid "%s: misplaced XTY_LD `%s'"
-msgstr "%s:XTY_LD `%s' rãtãcit"
+msgid "   formfeed\n"
+msgstr "   formfeed\n"
 
-#: xcofflink.c:1958
+#: vms-alpha.c:8019
 #, c-format
-msgid "%s: reloc %s:%d not in csect"
-msgstr "%s: relocarea %s:%d nu este în csect"
+msgid "   *unhandled* cmd %u\n"
+msgstr "   cmd *negestionatÄƒ* %u\n"
 
-#: xcofflink.c:2095
+#: vms-alpha.c:8031
 #, c-format
-msgid "%s: XCOFF shared object when not producing XCOFF output"
-msgstr "%s: XCOFF shared object neproducând output XCOFF"
+msgid "*unhandled* dst type %u\n"
+msgstr "tip dst *negestionat* %u\n"
 
-#: xcofflink.c:2116
+#: vms-alpha.c:8063
 #, c-format
-msgid "%s: dynamic object with no .loader section"
-msgstr "%s: obiect dinamic fãrã secþiune .loader"
+msgid "cannot read EIHD\n"
+msgstr "nu se poate citi EIHD\n"
 
-#: xcofflink.c:2761
+#: vms-alpha.c:8067
+#, c-format
+msgid "EIHD: (size: %u, nbr blocks: %u)\n"
+msgstr "EIHD: (dim.: %u, nr. blocuri: %u)\n"
+
+#: vms-alpha.c:8071
+#, c-format
+msgid " majorid: %u, minorid: %u\n"
+msgstr " id-major: %u, id-minor: %u\n"
+
+#: vms-alpha.c:8079
+msgid "executable"
+msgstr "executabil"
+
+#: vms-alpha.c:8082
+msgid "linkable image"
+msgstr "imagine vinculabilÄƒ"
+
+#: vms-alpha.c:8089
+#, c-format
+msgid " image type: %u (%s)"
+msgstr " tip imagine: %u (%s)"
+
+#: vms-alpha.c:8095
+msgid "native"
+msgstr "nativ"
+
+#: vms-alpha.c:8098
+msgid "CLI"
+msgstr "CLI"
+
+#: vms-alpha.c:8105
+#, c-format
+msgid ", subtype: %u (%s)\n"
+msgstr ", subtype: %u (%s)\n"
+
+#: vms-alpha.c:8112
+#, c-format
+msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
+msgstr " decalaje: isd: %u, activ: %u, simboluri depanare: %u, id imagine: %u, plasture: %u\n"
+
+#: vms-alpha.c:8116
+#, c-format
+msgid " fixup info rva: "
+msgstr " reparare informaÈ›ii rva: "
+
+#: vms-alpha.c:8118
+#, c-format
+msgid ", symbol vector rva: "
+msgstr ", vector de simboluri rva: "
+
+#: vms-alpha.c:8121
+#, c-format
+msgid ""
+"\n"
+" version array off: %u\n"
+msgstr ""
+"\n"
+" decalajul matricei de versiuni: %u\n"
+
+#: vms-alpha.c:8126
+#, c-format
+msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
+msgstr " contor de In/IeÈ™ a imaginii: %u, numÄƒrul de canale: %u, prioritate: %08x%08x\n"
+
+#: vms-alpha.c:8132
+#, c-format
+msgid " linker flags: %08x:"
+msgstr " fanioane vinculator: %08x:"
+
+#: vms-alpha.c:8163
+#, c-format
+msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
+msgstr " ident: 0x%08x, versiune sistem: 0x%08x, ctrl potriviri: %u, dimens-vect-simbol: %u\n"
+
+#: vms-alpha.c:8169
+#, c-format
+msgid " BPAGE: %u"
+msgstr " BPAGE: %u"
+
+#: vms-alpha.c:8176
+#, c-format
+msgid ", ext fixup offset: %u, no_opt psect off: %u"
+msgstr ", decalaj remediere extensie: %u, decalaj psect no_opt: %u"
+
+#: vms-alpha.c:8179
+#, c-format
+msgid ", alias: %u\n"
+msgstr ", alias: %u\n"
+
+#: vms-alpha.c:8187
+#, c-format
+msgid "system version array information:\n"
+msgstr "informaÈ›ii despre matricea versiunii sistemului:\n"
+
+#: vms-alpha.c:8191
+#, c-format
+msgid "cannot read EIHVN header\n"
+msgstr "nu se poate citi antetul EIHVN\n"
+
+#: vms-alpha.c:8201
+#, c-format
+msgid "cannot read EIHVN version\n"
+msgstr "nu se poate citi versiunea EIHVN\n"
+
+#: vms-alpha.c:8204
+#, c-format
+msgid "   %02u "
+msgstr "   %02u "
+
+#: vms-alpha.c:8208
+msgid "BASE_IMAGE       "
+msgstr "BASE_IMAGE       "
+
+#: vms-alpha.c:8211
+msgid "MEMORY_MANAGEMENT"
+msgstr "MEMORY_MANAGEMENT"
+
+#: vms-alpha.c:8214
+msgid "IO               "
+msgstr "In/IeÈ™           "
+
+#: vms-alpha.c:8217
+msgid "FILES_VOLUMES    "
+msgstr "FILES_VOLUMES    "
+
+#: vms-alpha.c:8220
+msgid "PROCESS_SCHED    "
+msgstr "PROCESS_SCHED    "
+
+#: vms-alpha.c:8223
+msgid "SYSGEN           "
+msgstr "SYSGEN           "
+
+#: vms-alpha.c:8226
+msgid "CLUSTERS_LOCKMGR "
+msgstr "CLUSTERS_LOCKMGR "
+
+#: vms-alpha.c:8229
+msgid "LOGICAL_NAMES    "
+msgstr "LOGICAL_NAMES    "
+
+#: vms-alpha.c:8232
+msgid "SECURITY         "
+msgstr "SECURITY         "
+
+#: vms-alpha.c:8235
+msgid "IMAGE_ACTIVATOR  "
+msgstr "IMAGE_ACTIVATOR  "
+
+#: vms-alpha.c:8238
+msgid "NETWORKS         "
+msgstr "NETWORKS         "
+
+#: vms-alpha.c:8241
+msgid "COUNTERS         "
+msgstr "COUNTERS         "
+
+#: vms-alpha.c:8244
+msgid "STABLE           "
+msgstr "STABLE           "
+
+#: vms-alpha.c:8247
+msgid "MISC             "
+msgstr "MISC             "
+
+#: vms-alpha.c:8250
+msgid "CPU              "
+msgstr "CPU              "
+
+#: vms-alpha.c:8253
+msgid "VOLATILE         "
+msgstr "VOLATILE         "
+
+#: vms-alpha.c:8256
+msgid "SHELL            "
+msgstr "SHELL            "
+
+#: vms-alpha.c:8259
+msgid "POSIX            "
+msgstr "POSIX            "
+
+#: vms-alpha.c:8262
+msgid "MULTI_PROCESSING "
+msgstr "MULTI_PROCESSING "
+
+#: vms-alpha.c:8265
+msgid "GALAXY           "
+msgstr "GALAXY           "
+
+#: vms-alpha.c:8268
+msgid "*unknown*        "
+msgstr "*necunoscut*        "
+
+#: vms-alpha.c:8284 vms-alpha.c:8558
+#, c-format
+msgid "cannot read EIHA\n"
+msgstr "nu se poate citi EIHA\n"
+
+#: vms-alpha.c:8287
+#, c-format
+msgid "Image activation:  (size=%u)\n"
+msgstr "Activare imagine:  (dim.=%u)\n"
+
+#: vms-alpha.c:8290
+#, c-format
+msgid " First address : 0x%08x 0x%08x\n"
+msgstr " Prima adresÄƒ     : 0x%08x 0x%08x\n"
+
+#: vms-alpha.c:8294
+#, c-format
+msgid " Second address: 0x%08x 0x%08x\n"
+msgstr " A doua adresÄƒ    : 0x%08x 0x%08x\n"
+
+#: vms-alpha.c:8298
+#, c-format
+msgid " Third address : 0x%08x 0x%08x\n"
+msgstr " A treia adresÄƒ   : 0x%08x 0x%08x\n"
+
+#: vms-alpha.c:8302
+#, c-format
+msgid " Fourth address: 0x%08x 0x%08x\n"
+msgstr " A patra adresÄƒ    : 0x%08x 0x%08x\n"
+
+#: vms-alpha.c:8306
+#, c-format
+msgid " Shared image  : 0x%08x 0x%08x\n"
+msgstr " Imagine partajatÄƒ: 0x%08x 0x%08x\n"
+
+#: vms-alpha.c:8317
+#, c-format
+msgid "cannot read EIHI\n"
+msgstr "nu se poate citi EIHI\n"
+
+#: vms-alpha.c:8321
+#, c-format
+msgid "Image identification: (major: %u, minor: %u)\n"
+msgstr "Identificare imagine: (major: %u, minor: %u)\n"
+
+#: vms-alpha.c:8324
+#, c-format
+msgid " image name       : %.*s\n"
+msgstr " nume imagine            : %.*s\n"
+
+#: vms-alpha.c:8326
+#, c-format
+msgid " link time        : %s\n"
+msgstr " ora vinculÄƒrii          : %s\n"
+
+#: vms-alpha.c:8328
+#, c-format
+msgid " image ident      : %.*s\n"
+msgstr " ora vinculÄƒrii          : %.*s\n"
+
+#: vms-alpha.c:8330
+#, c-format
+msgid " linker ident     : %.*s\n"
+msgstr " identificator vinculator: %.*s\n"
+
+#: vms-alpha.c:8332
+#, c-format
+msgid " image build ident: %.*s\n"
+msgstr " ident. constr. imagine  : %.*s\n"
+
+#: vms-alpha.c:8342
+#, c-format
+msgid "cannot read EIHS\n"
+msgstr "nu se poate citi EIHS\n"
+
+#: vms-alpha.c:8346
+#, c-format
+msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
+msgstr "Simbol de imagine È™i tabel de depanare: (major: %u, minor: %u)\n"
+
+#: vms-alpha.c:8352
+#, c-format
+msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
+msgstr " tabelul de simboluri de depanare : vbn: %u, dimensiune: %u (0x%x)\n"
+
+#: vms-alpha.c:8357
+#, c-format
+msgid " global symbol table: vbn: %u, records: %u\n"
+msgstr " tabelul global de simboluri: vbn: %u, Ã®nregistrÄƒri: %u\n"
+
+#: vms-alpha.c:8362
+#, c-format
+msgid " debug module table : vbn: %u, size: %u\n"
+msgstr " tabelul de module de depanare : vbn: %u, dimensiune: %u\n"
+
+#: vms-alpha.c:8375
+#, c-format
+msgid "cannot read EISD\n"
+msgstr "nu se poate citi EISD\n"
+
+#: vms-alpha.c:8386
+#, c-format
+msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
+msgstr "Descriptorul secÈ›iunii de imagine: (major: %u, minor: %u, size: %u, decalaj: %u)\n"
+
+#: vms-alpha.c:8394
+#, c-format
+msgid " section: base: 0x%08x%08x size: 0x%08x\n"
+msgstr "  secÈ›iune: bazÄƒ: 0x%08x%08x dimensiune: 0x%08x\n"
+
+#: vms-alpha.c:8399
+#, c-format
+msgid " flags: 0x%04x"
+msgstr " fanioane: 0x%04x"
+
+#: vms-alpha.c:8437
+#, c-format
+msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
+msgstr " vbn: %u, pfc: %u, potrivire ctl: %u tip: %u ("
+
+#: vms-alpha.c:8443
+msgid "NORMAL"
+msgstr "NORMAL"
+
+#: vms-alpha.c:8446
+msgid "SHRFXD"
+msgstr "SHRFXD"
+
+#: vms-alpha.c:8449
+msgid "PRVFXD"
+msgstr "PRVFXD"
+
+#: vms-alpha.c:8452
+msgid "SHRPIC"
+msgstr "SHRPIC"
+
+#: vms-alpha.c:8455
+msgid "PRVPIC"
+msgstr "PRVPIC"
+
+#: vms-alpha.c:8458
+msgid "USRSTACK"
+msgstr "USRSTACK"
+
+#: vms-alpha.c:8464
+msgid ")\n"
+msgstr ")\n"
+
+#: vms-alpha.c:8467
+#, c-format
+msgid " ident: 0x%08x, name: %.*s\n"
+msgstr " ident: 0x%08x, nume: %.*s\n"
+
+#: vms-alpha.c:8477
+#, c-format
+msgid "cannot read DMT\n"
+msgstr "nu se poate citi DMT\n"
+
+#: vms-alpha.c:8481
+#, c-format
+msgid "Debug module table:\n"
+msgstr "Tabel cu module de depanare:\n"
+
+#: vms-alpha.c:8490
+#, c-format
+msgid "cannot read DMT header\n"
+msgstr "nu se poate citi antetul DMT\n"
+
+#: vms-alpha.c:8496
+#, c-format
+msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
+msgstr " decalaj modul: 0x%08x, dimensiune: 0x%08x, (%u psects)\n"
+
+#: vms-alpha.c:8506
+#, c-format
+msgid "cannot read DMT psect\n"
+msgstr "nu se poate citi psect DMT\n"
+
+#: vms-alpha.c:8510
+#, c-format
+msgid "  psect start: 0x%08x, length: %u\n"
+msgstr "  Ã®ncepe psect: 0x%08x, lungime: %u\n"
+
+#: vms-alpha.c:8523
+#, c-format
+msgid "cannot read DST\n"
+msgstr "nu se poate citi DST\n"
+
+#: vms-alpha.c:8533
+#, c-format
+msgid "cannot read GST\n"
+msgstr "nu se poate citi GST\n"
+
+#: vms-alpha.c:8537
+#, c-format
+msgid "Global symbol table:\n"
+msgstr "Tabel cu simboluri globale:\n"
+
+#: vms-alpha.c:8564
+#, c-format
+msgid "Image activator fixup: (major: %u, minor: %u)\n"
+msgstr "Fixarea activatorului de imagine: (major: %u, minor: %u)\n"
+
+#: vms-alpha.c:8568
+#, c-format
+msgid "  iaflink : 0x%08x %08x\n"
+msgstr "  iaflink : 0x%08x %08x\n"
+
+#: vms-alpha.c:8572
+#, c-format
+msgid "  fixuplnk: 0x%08x %08x\n"
+msgstr "  fixuplnk: 0x%08x %08x\n"
+
+#: vms-alpha.c:8575
+#, c-format
+msgid "  size : %u\n"
+msgstr "  dimens.: %u\n"
+
+#: vms-alpha.c:8577
+#, c-format
+msgid "  flags: 0x%08x\n"
+msgstr "  fanioane: 0x%08x\n"
+
+#: vms-alpha.c:8582
+#, c-format
+msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
+msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
+
+#: vms-alpha.c:8587
+#, c-format
+msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
+msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
+
+#: vms-alpha.c:8592
+#, c-format
+msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
+msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
+
+#: vms-alpha.c:8595
+#, c-format
+msgid "  chgprtoff : %5u\n"
+msgstr "  chgprtoff : %5u\n"
+
+#: vms-alpha.c:8599
+#, c-format
+msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
+msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
+
+#: vms-alpha.c:8602
+#, c-format
+msgid "  shlextra  : %5u, permctx   : %5u\n"
+msgstr "  shlextra  : %5u, permctx   : %5u\n"
+
+#: vms-alpha.c:8605
+#, c-format
+msgid "  base_va : 0x%08x\n"
+msgstr "  base_va : 0x%08x\n"
+
+#: vms-alpha.c:8607
+#, c-format
+msgid "  lppsbfixoff: %5u\n"
+msgstr "  lppsbfixoff: %5u\n"
+
+#: vms-alpha.c:8614
+#, c-format
+msgid " Shareable images:\n"
+msgstr " Imagini partajabile:\n"
+
+#: vms-alpha.c:8622
+#, c-format
+msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
+msgstr "  %u: dimensiune: %u, fanioane: 0x%02x, nume: %.*s\n"
+
+#: vms-alpha.c:8629
+#, c-format
+msgid " quad-word relocation fixups:\n"
+msgstr " remedieri de realocare de patru cuvinte:\n"
+
+#: vms-alpha.c:8635
+#, c-format
+msgid " long-word relocation fixups:\n"
+msgstr " remedieri de realocare de cuvinte lungi:\n"
+
+#: vms-alpha.c:8641
+#, c-format
+msgid " quad-word .address reference fixups:\n"
+msgstr " remedieri ale referinÈ›elor .address de patru cuvinte:\n"
+
+#: vms-alpha.c:8646
+#, c-format
+msgid " long-word .address reference fixups:\n"
+msgstr " remedieri ale referinÈ›elor .address de cuvinte lungi:\n"
+
+#: vms-alpha.c:8651
+#, c-format
+msgid " Code Address Reference Fixups:\n"
+msgstr " Remedieri de referinÈ›e pentru adresa codului:\n"
+
+#: vms-alpha.c:8656
+#, c-format
+msgid " Linkage Pairs Reference Fixups:\n"
+msgstr " CorecÈ›ii de referinÈ›Äƒ pentru perechi de legÄƒturi:\n"
+
+#: vms-alpha.c:8664
+#, c-format
+msgid " Change Protection (%u entries):\n"
+msgstr " Modificarea protecÈ›iei (%u intrÄƒri):\n"
+
+#: vms-alpha.c:8673
+#, c-format
+msgid "  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
+msgstr "  baza: 0x%08x %08x, dimens.: 0x%08x, protecÈ›ia: 0x%08x "
+
+#. FIXME: we do not yet support relocatable link.  It is not obvious
+#. how to do it for debug infos.
+#: vms-alpha.c:9550
+msgid "%P: relocatable link is not supported\n"
+msgstr "%P: legÄƒtura realocabilÄƒ nu este acceptatÄƒ\n"
+
+#: vms-alpha.c:9621
+#, c-format
+msgid "%P: multiple entry points: in modules %pB and %pB\n"
+msgstr "%P: puncte de acces multiple: Ã®n modulele %pB È™i %pB\n"
+
+#: vms-lib.c:1530
+#, c-format
+msgid "could not open shared image '%s' from '%s'"
+msgstr "nu s-a putut deschide imaginea partajatÄƒ â€ž%sâ€� din â€ž%sâ€�"
+
+#: vms-misc.c:374
+msgid "_bfd_vms_output_counted called with zero bytes"
+msgstr "_bfd_vms_output_counted apelat cu zero octeÈ›i"
+
+#: vms-misc.c:379
+msgid "_bfd_vms_output_counted called with too many bytes"
+msgstr "_bfd_vms_output_counted apelat cu prea mulÈ›i octeÈ›i"
+
+#: xcofflink.c:889
+#, c-format
+msgid "%pB: XCOFF shared object when not producing XCOFF output"
+msgstr "%pB: obiect partajat XCOFF cÃ¢nd nu se produce ieÈ™ire XCOFF"
+
+#: xcofflink.c:910
+#, c-format
+msgid "%pB: dynamic object with no .loader section"
+msgstr "%pB: obiect dinamic fÄƒrÄƒ secÈ›iune .loader"
+
+#: xcofflink.c:1492
+#, c-format
+msgid "%pB: `%s' has line numbers but no enclosing section"
+msgstr "%pB: â€ž%sâ€� are numere de linie, dar nu o secÈ›iune de Ã®nchidere"
+
+#: xcofflink.c:1548
+#, c-format
+msgid "%pB: class %d symbol `%s' has no aux entries"
+msgstr "%pB: clasa %d simbolul â€ž%s'â€� nu are intrÄƒri auxiliare"
+
+#: xcofflink.c:1571
+#, c-format
+msgid "%pB: symbol `%s' has unrecognized csect type %d"
+msgstr "%pB: simbolul â€ž%sâ€� are tipul de csect nerecunoscut %d"
+
+#: xcofflink.c:1584
+#, c-format
+msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
+msgstr "%pB: simbol XTY_ER defectuos â€ž%sâ€�: clasa %d scnum %d scnlen %<PRId64>"
+
+#: xcofflink.c:1615
+#, c-format
+msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRIu64>"
+msgstr "%pB: simbolul XMC_TC0 â€ž%sâ€� este clasa %d scnlen %<PRIu64>"
+
+#: xcofflink.c:1750
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr "%pB: intrarea TOC â€ž%sâ€� are o realocare R_TLSML care nu È›inteÈ™te spre sine"
+
+#: xcofflink.c:1784
+#, c-format
+msgid "%pB: csect `%s' not in enclosing section"
+msgstr "%pB: csect â€ž%sâ€� nu este Ã®n secÈ›iunea de Ã®nchidere"
+
+#: xcofflink.c:1893
+#, c-format
+msgid "%pB: misplaced XTY_LD `%s'"
+msgstr "%pB: XTY_LD â€ž%sâ€� plasat greÈ™it"
+
+#: xcofflink.c:2236
+#, c-format
+msgid "%pB: reloc %s:%<PRId64> not in csect"
+msgstr "%pB: realocarea %s:%<PRId64> nu Ã®n csect"
+
+#: xcofflink.c:3345
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr "%pB: nu se poate exporta simbolul intern â€ž%sâ€�."
+
+#: xcofflink.c:3393
 #, c-format
 msgid "%s: no such symbol"
-msgstr "%s: nu existã acest simbol"
+msgstr "%s: nu existÄƒ acest simbol"
+
+#: xcofflink.c:3502
+#, c-format
+msgid "warning: attempt to export undefined symbol `%s'"
+msgstr "avertisment: Ã®ncercare de exportare a simbolului nedefinit `%s'"
 
-#: xcofflink.c:2894
+#: xcofflink.c:3850
 msgid "error: undefined symbol __rtinit"
 msgstr "eroare: simbol __rtinit nedefinit"
 
-#: xcofflink.c:3455
+#: xcofflink.c:4863
 #, c-format
-msgid "warning: attempt to export undefined symbol `%s'"
-msgstr "avertisment: încercare de exportare a simbolului nedefinit `%s'"
+msgid "%pB: Unable to find a stub csect in rangeof relocation at %#<PRIx64> targeting'%s'"
+msgstr "%pB: Nu s-a putut gÄƒsi un ciot(stub) csect Ã®n intervalul de realocare de la %#<PRIx64> care È›inteÈ™te â€ž%sâ€�"
 
-#: xcofflink.c:4448
+#: xcofflink.c:4892
 #, c-format
-msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling"
-msgstr "suprasolicitare(overflow) TOC: 0x%lx > 0x10000; încercaþi -mminimal-toc la compilare"
+msgid "%pB: Cannot create stub entry '%s'"
+msgstr "%pB: Nu se poate crea intrarea ciot(stub) â€ž%sâ€�"
 
-#: xcofflink.c:5288 xcofflink.c:5755 xcofflink.c:5817 xcofflink.c:6119
+#: xcofflink.c:5012
+msgid "TOC overflow during stub generation; try -mminimal-toc when compiling"
+msgstr "Debordare a tabelului de intrÄƒri(TOC) Ã®n timpul generÄƒrii ciotului(stub); Ã®ncercaÈ›i â€ž-mminimal-tocâ€� la compilare"
+
+#: xcofflink.c:5080
 #, c-format
-msgid "%s: loader reloc in unrecognized section `%s'"
-msgstr "%s: relocare loader în secþiune necunoscutã `%s'"
+msgid "%pB: loader reloc in unrecognized section `%s'"
+msgstr "%pB: realocarea Ã®ncÄƒrcÄƒtorului Ã®n secÈ›iunea nerecunoscutÄƒ â€ž%sâ€�"
 
-#: xcofflink.c:5310 xcofflink.c:6130
+#: xcofflink.c:5092
 #, c-format
-msgid "%s: `%s' in loader reloc but not loader sym"
-msgstr "%s: `%s' în relocare loader dar nu în loader sym"
+msgid "%pB: `%s' in loader reloc but not loader sym"
+msgstr "%pB: â€ž%sâ€� Ã®n realocarea Ã®ncÄƒrcÄƒtorului, dar nu Ã®n simbolul Ã®ncÄƒrcÄƒtorului"
 
-#: xcofflink.c:5325
+#: xcofflink.c:5109
 #, c-format
-msgid "%s: loader reloc in read-only section %s"
-msgstr "%s: relocare loader în secþiunea doar-în-citire %s"
+msgid "%pB: loader reloc in read-only section %pA"
+msgstr "%pB: realocarea Ã®ncÄƒrcÄƒtorului Ã®n secÈ›iunea numai-pentru-citire %pA"
 
-#: elf32-ia64.c:2392 elf64-ia64.c:2392
-msgid "@pltoff reloc against local symbol"
-msgstr "relocare @pltoff pe simbol local"
+#: xcofflink.c:6182
+#, c-format
+msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
+msgstr "Debordare a tabelului de intrÄƒri(TOC): %#<PRIx64> > 0x10000; Ã®ncercaÈ›i â€ž-mminimal-tocâ€� la compilare"
 
-#: elf32-ia64.c:3804 elf64-ia64.c:3804
+#: xcofflink.c:7298
 #, c-format
-msgid "%s: short data segment overflowed (0x%lx >= 0x400000)"
-msgstr "%s: segment de date scurt depãºit(overflowed) (0x%lx >= 0x400000)"
+msgid "Unable to link input file: %s"
+msgstr "Nu se poate vincula fiÈ™ierul de intrare: %s"
+
+#: xtensa-dynconfig.c:60
+msgid "Unable to load DLL."
+msgstr "Nu se poate Ã®ncÄƒrca DLL."
 
-#: elf32-ia64.c:3815 elf64-ia64.c:3815
+#: xtensa-dynconfig.c:86
 #, c-format
-msgid "%s: __gp does not cover short data segment"
-msgstr "%s: __gp nu acoperã segmentul de date scurte"
+msgid "%s is defined but could not be loaded: %s"
+msgstr "%s este definit, dar nu a putut fi Ã®ncÄƒrcat: %s"
 
-#: elf32-ia64.c:4131 elf64-ia64.c:4131
+#: xtensa-dynconfig.c:102
 #, c-format
-msgid "%s: linking non-pic code in a shared library"
-msgstr "%s: linkuire cod non-pic într-o bibliotecã globalã(shared)"
+msgid "%s is loaded but symbol \"%s\" is not found: %s"
+msgstr "%s este Ã®ncÄƒrcat, dar simbolul â€ž%sâ€� nu a fost gÄƒsit: %s"
 
-#: elf32-ia64.c:4164 elf64-ia64.c:4164
+#: xtensa-dynconfig.c:115
 #, c-format
-msgid "%s: @gprel relocation against dynamic symbol %s"
-msgstr "%s: relocare @gprel pe simbolul dinamic %s"
+msgid "%s is defined but plugin support is disabled"
+msgstr "%s este definit, dar suportul pentru module este dezactivat"
 
-#: elf32-ia64.c:4224 elf64-ia64.c:4224
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2893 elfnn-riscv.c:5548
 #, c-format
-msgid "%s: linking non-pic code in a position independent executable"
-msgstr "%s: linkuire cod non-pic într-un executabil independent de poziþie"
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "atribut necunoscut pentru simbolul â€ž%sâ€�: 0x%02x"
 
-#: elf32-ia64.c:4363 elf64-ia64.c:4363
+#: elfnn-aarch64.c:5456
 #, c-format
-msgid "%s: @internal branch to dynamic symbol %s"
-msgstr "%s: ramurã @internal cãtre simbolul dinamic %s"
+msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
+msgstr "%pB: eroare: Â«erratum 835769Â» ciot(stub) Ã®n afara intervalului (fiÈ™ierul de intrare este prea mare)"
 
-#: elf32-ia64.c:4365 elf64-ia64.c:4365
+#: elfnn-aarch64.c:5548
 #, c-format
-msgid "%s: speculation fixup to dynamic symbol %s"
-msgstr "%s: rezolvare de speculaþie cãtre simbolul dinamic %s"
+msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
+msgstr "%pB: eroare: Â«erratum 843419Â» ciot(stub) Ã®n afara intervalului (fiÈ™ierul de intrare este prea mare)"
 
-#: elf32-ia64.c:4367 elf64-ia64.c:4367
+#: elfnn-aarch64.c:5561
 #, c-format
-msgid "%s: @pcrel relocation against dynamic symbol %s"
-msgstr "%s: relocare @pcrell pe simbolul dinamic %s"
+msgid "%pB: error: erratum 843419 immediate 0x%<PRIx64> out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr "%pB: eroare: Â«erratum 843419Â» imediat 0x%<PRIx64> Ã®n afara intervalului pentru ADR (fiÈ™ier de intrare prea mare) È™i â€ž--fix-cortex-a53-843419=adrâ€�, utilizatÄƒ.  RulaÈ›i editorul de legÄƒturi cu â€ž--fix-cortex-a53-843419=fullâ€� Ã®n loc"
 
-#: elf32-ia64.c:4579 elf64-ia64.c:4579
-msgid "unsupported reloc"
-msgstr "relocare nesuportatã"
+#: elfnn-aarch64.c:6096
+#, c-format
+msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
+msgstr "%pB: realocarea %s faÈ›Äƒ de simbolul â€ž%sâ€� care se poate asocia extern nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�"
+
+#: elfnn-aarch64.c:6116
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr "%pB: ramura condiÈ›ionatÄƒ la simbolul nedefinit â€ž%sâ€� nu este permisÄƒ"
+
+# R-GC, scrie:
+# trebuie vÄƒzut dacÄƒ corect este:
+# â€ž... poate fi/poate sÄƒ fie...â€�
+# â€ž... trebuie sÄƒ fie...â€�
+# â€ž... este ...â€�
+#: elfnn-aarch64.c:6204 elfnn-kvx.c:2384
+#, c-format
+msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
+msgstr "%pB: tabelul de descriptori de simbol local poate sÄƒ fie NULL atunci cÃ¢nd se aplicÄƒ realocarea %s faÈ›Äƒ de simbolul local"
+
+#: elfnn-aarch64.c:6317 elfnn-aarch64.c:6354
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%pB: realocare TLS %s faÈ›Äƒ de simbolul nedefinit â€ž%sâ€�"
+
+#: elfnn-aarch64.c:7345
+msgid "too many GOT entries for -fpic, please recompile with -fPIC"
+msgstr "prea multe intrÄƒri GOT pentru â€ž-fpicâ€�, recompilaÈ›i cu â€ž-fPICâ€�"
+
+#: elfnn-aarch64.c:7373
+msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
+msgstr "o posibilÄƒ cauzÄƒ a acestei erori este cÄƒ simbolul este referit Ã®n codul indicat ca È™i cum ar avea o aliniere mai mare decÃ¢t a fost declaratÄƒ acolo unde a fost definit"
+
+#: elfnn-aarch64.c:7940
+#, c-format
+msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
+msgstr "%pB: relocarea %s faÈ›Äƒ de â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat"
+
+#: elfnn-aarch64.c:9013
+#, c-format
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s'\n"
+msgstr "%F%P: %pB: copiere realocare faÈ›Äƒ de simbolul protejat necopiabil â€ž%sâ€�\n"
+
+#: elfnn-kvx.c:930
+msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: Nu s-a putut atribui â€ž%pAâ€� unei secÈ›iuni de ieÈ™ire. ReÃ®ncercaÈ›i fÄƒrÄƒ opÈ›iunea â€ž--enable-non-contiguous-regionsâ€�.\n"
+
+#: elfnn-kvx.c:2129
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation in section `%s'"
+msgstr "%pB(%pA+%#<PRIx64>): realocare %s nerezolvatÄƒ Ã®n secÈ›iunea â€ž%sâ€�"
+
+#: elfnn-kvx.c:2853
+#, c-format
+msgid "%s: Bad ELF id: `%d'"
+msgstr "%s: id ELF greÈ™it: â€ž%dâ€�"
+
+#: elfnn-kvx.c:2908
+#, c-format
+msgid "%s: compiled as 32-bit object and %s is 64-bit"
+msgstr "%s: compilat ca obiect pe 32 de biÈ›i È™i %s este pe 64 de biÈ›i"
+
+#: elfnn-kvx.c:2911
+#, c-format
+msgid "%s: compiled as 64-bit object and %s is 32-bit"
+msgstr "%s: compilat ca obiect pe 64 de biÈ›i È™i %s este pe 32 de biÈ›i"
+
+#: elfnn-kvx.c:2913
+#, c-format
+msgid "%s: object size does not match that of target %s"
+msgstr "%s: dimensiunea obiectului nu se potriveÈ™te cu cea a È›intei %s"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elfnn-kvx.c:3001
+#, c-format
+msgid "Private flags = 0x%lx : "
+msgstr "fanioane private = 0x%lx: "
+
+#: elfnn-kvx.c:3005
+#, c-format
+msgid "Coolidge (kv3) V1 64 bits"
+msgstr "Coolidge (kv3) V1 64 biÈ›i"
+
+#: elfnn-kvx.c:3007
+#, c-format
+msgid "Coolidge (kv3) V2 64 bits"
+msgstr "Coolidge (kv3) V2 64 biÈ›i"
+
+#: elfnn-kvx.c:3009
+#, c-format
+msgid "Coolidge (kv4) V1 64 bits"
+msgstr "Coolidge (kv4) V1 64 biÈ›i"
+
+#: elfnn-kvx.c:3014
+#, c-format
+msgid "Coolidge (kv3) V1 32 bits"
+msgstr "Coolidge (kv3) V1 32 biÈ›i"
+
+#: elfnn-kvx.c:3016
+#, c-format
+msgid "Coolidge (kv3) V2 32 bits"
+msgstr "Coolidge (kv3) V2 32 biÈ›i"
+
+#: elfnn-kvx.c:3018
+#, c-format
+msgid "Coolidge (kv4) V1 32 bits"
+msgstr "Coolidge (kv4) V1 32 biÈ›i"
+
+#: elfnn-kvx.c:3854
+#, c-format
+msgid "relocation against `%s' has faulty GOT type "
+msgstr "realocarea faÈ›Äƒ de â€ž%sâ€� are un tip GOT defect "
+
+# R-Gc, scrie:
+# dezvoltatori, typo!!!
+#: elfnn-loongarch.c:169 elfnn-loongarch.c:221
+#, c-format
+msgid "%#<PRIx64> invaild imm"
+msgstr "%#<PRIx64> imm nevalid"
+
+#: elfnn-loongarch.c:403 elfnn-riscv.c:4028
+#, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+"  target emulation `%s' does not match `%s'"
+msgstr ""
+"%pB: ABI este incompatibil cu cel al emulaÈ›iei selectate:\n"
+"  emulaÈ›ia È›intÄƒ â€ž%sâ€� nu se potriveÈ™te cu â€ž%sâ€�"
+
+#: elfnn-loongarch.c:458
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr "%pB: nu se poate vincula un obiect ABI diferit."
+
+#: elfnn-loongarch.c:600
+msgid "Internal error: unreachable."
+msgstr "Eroare internÄƒ: inaccesibil."
+
+#: elfnn-loongarch.c:4339 elfnn-riscv.c:4789
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
+msgstr "%pB(%pA+%#<PRIx64>): %<PRId64> octeÈ›i sunt necesari pentru alinierea la limita %<PRId64>-octeÈ›i, dar numai %<PRId64> sunt prezenÈ›i"
+
+#: elfnn-riscv.c:326 elfnn-riscv.c:361
+#, c-format
+msgid "%pB: warning: RVE PLT generation not supported"
+msgstr "%pB: avertisment: generarea PLT RVE nu este acceptatÄƒ"
+
+#: elfnn-riscv.c:919
+#, c-format
+msgid "%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object"
+msgstr "%pB: realocarea %s faÈ›Äƒ de simbolul absolut â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat"
+
+#: elfnn-riscv.c:961
+#, c-format
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object"
+msgstr "%pB: realocarea %s faÈ›Äƒ de simbolul non-absolut â€ž%sâ€� nu poate fi folositÄƒ cÃ¢nd se creeazÄƒ un obiect partajat"
+
+#: elfnn-riscv.c:1847
+#, c-format
+msgid "final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "dimensiunea finalÄƒ a valorii uleb128 la poziÈ›ia 0x%lx Ã®n %pA din %pB depÄƒÈ™eÈ™te spaÈ›iul disponibil"
+
+#: elfnn-riscv.c:2082
+#, c-format
+msgid "%pcrel_lo missing matching %pcrel_hi"
+msgstr "%pcrel_lo lipseÈ™te potrivirea cu %pcrel_hi"
+
+#: elfnn-riscv.c:2085
+#, c-format
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "%pcrel_lo cu adaos nu este permis pentru R_RISCV_GOT_HI20"
+
+#. Check the overflow when adding reloc addend.
+#: elfnn-riscv.c:2090
+#, c-format
+msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
+msgstr "%%pcrel_lo depÄƒÈ™ire cu un adaos, valoarea lui %%pcrel_hi este 0x%<PRIx64> fÄƒrÄƒ nici un adaos, dar poate fi 0x%<PRIx64> dupÄƒ adÄƒugarea adaosului %%pcrel_lo"
+
+#: elfnn-riscv.c:2098
+#, c-format
+msgid "%pcrel_lo overflow with an addend"
+msgstr "%pcrel_lo depÄƒÈ™ire cu un adaos"
+
+#: elfnn-riscv.c:2549
+#, c-format
+msgid "%pB: warning: R_RISCV_SUB_ULEB128 with non-zero addend, please rebuild by binutils 2.42 or up"
+msgstr "%pB: avertisment: R_R_RISCV_SUB_ULEB128 cu adaos diferit de zero, vÄƒ rugÄƒm sÄƒ reconstruiÈ›i cu binutils versiunea 2.42 sau mai recentÄƒ"
+
+#: elfnn-riscv.c:2629
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "Adaosul nu este permis pentru R_RISCV_GOT_HI20"
+
+#. PR 28509, when generating the shared object, these
+#. referenced symbols may bind externally, which means
+#. they will be exported to the dynamic symbol table,
+#. and are preemptible by default.  These symbols cannot
+#. be referenced by the non-pic relocations, like
+#. R_RISCV_JAL and R_RISCV_RVC_JUMP relocations.
+#.
+#. However, consider that linker may relax the R_RISCV_CALL
+#. relocations to R_RISCV_JAL or R_RISCV_RVC_JUMP, if
+#. these relocations are relocated to the plt entries,
+#. then we won't report error for them.
+#.
+#. Perhaps we also need the similar checks for the
+#. R_RISCV_BRANCH and R_RISCV_RVC_BRANCH relocations.
+#: elfnn-riscv.c:2730
+#, c-format
+msgid "%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC\n"
+msgstr "%%X%%P: realocarea %s faÈ›Äƒ de â€ž%sâ€� care se poate asocia extern nu poate fi folositÄƒ atunci cÃ¢nd se creeazÄƒ un obiect partajat; recompilaÈ›i cu â€ž-fPICâ€�\n"
+
+#: elfnn-riscv.c:2812
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "simbol de secÈ›iune %pcrel_lo cu un adaos"
+
+#: elfnn-riscv.c:3022
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%%X%%P: realocare %s nerezolvabilÄƒ faÈ›Äƒ de simbolul â€ž%sâ€�\n"
+
+#: elfnn-riscv.c:3057
+msgid "%X%P: internal error: out of range error\n"
+msgstr "%X%P: eroare internÄƒ: eroare Ã®n afara intervalului\n"
+
+#: elfnn-riscv.c:3062
+msgid "%X%P: internal error: unsupported relocation error\n"
+msgstr "%X%P: eroare internÄƒ: eroare de realocare neacceptatÄƒ\n"
+
+#: elfnn-riscv.c:3068
+msgid "dangerous relocation error"
+msgstr "eroare de realocare periculoasÄƒ"
+
+#: elfnn-riscv.c:3074
+msgid "%X%P: internal error: unknown error\n"
+msgstr "%X%P: eroare internÄƒ: eroare necunoscutÄƒ\n"
+
+#: elfnn-riscv.c:3620
+#, c-format
+msgid "error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'"
+msgstr "eroare: %pB: È™ir ISA corupt â€ž%sâ€�.  Prima litera ar trebui sÄƒ fie â€žiâ€� sau â€žeâ€�, dar a primit â€ž%sâ€�"
+
+#: elfnn-riscv.c:3663
+#, c-format
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr "eroare: %pB: È™ir ISA nepotrivit pentru a fuziona â€ž%sâ€� È™i â€ž%sâ€�"
+
+#: elfnn-riscv.c:3800
+#, c-format
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr "eroare: %pB: È™irul ISA de intrare (%s) nu se potriveÈ™te cu ieÈ™irea (%s)"
+
+#: elfnn-riscv.c:3820
+#, c-format
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr "eroare: %pB: XLEN de intrare (%u) nu se potriveÈ™te cu ieÈ™irea (%u)"
+
+#: elfnn-riscv.c:3828
+#, c-format
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr "eroare: %pB: XLEN neacceptat (%u), este posibil sÄƒ utilizaÈ›i o emulare greÈ™itÄƒ"
+
+#: elfnn-riscv.c:3942
+#, c-format
+msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "avertisment: %pB foloseÈ™te versiunea cu specificaÈ›ii privilegiate %u.%u.%u, dar rezultatul foloseÈ™te versiunea %u.%u.%u"
+
+#: elfnn-riscv.c:3959
+msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
+msgstr "avertisment: versiunea cu specificaÈ›ii privilegiate 1.9.1 nu poate fi conectatÄƒ cu alte versiuni cu specificaÈ›ii"
+
+#: elfnn-riscv.c:3987
+#, c-format
+msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
+msgstr "eroare: %pB foloseÈ™te stiva aliniatÄƒ la %u-octeÈ›i, dar ieÈ™irea foloseÈ™te stiva aliniatÄƒ la %u-octeÈ›i"
+
+#: elfnn-riscv.c:4084
+#, c-format
+msgid "%pB: can't link %s modules with %s modules"
+msgstr "%pB: nu se pot vincula %s module cu %s module"
 
-#: elf32-ia64.c:4858 elf64-ia64.c:4858
+#: elfnn-riscv.c:4094
 #, c-format
-msgid "%s: linking trap-on-NULL-dereference with non-trapping files"
-msgstr "%s: linkuire trap-on-NULL-dereference cu fiºiere non-trapping"
+msgid "%pB: can't link RVE with other target"
+msgstr "%pB: nu se poate vincula RVE cu altÄƒ È›intÄƒ"
 
-#: elf32-ia64.c:4867 elf64-ia64.c:4867
+#: elfnn-riscv.c:961
 #, c-format
-msgid "%s: linking big-endian files with little-endian files"
-msgstr "%s: linkuire fiºiere big-endiancu fiºiere little-endian"
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object"
+msgstr "%pB: realocarea %s faÈ›Äƒ de simbolul non-absolut â€ž%sâ€� nu poate fi folositÄƒ Ã®n RV64 cÃ¢nd se creeazÄƒ un obiect partajat"
 
-#: elf32-ia64.c:4876 elf64-ia64.c:4876
+#: peXXigen.c:161
 #, c-format
-msgid "%s: linking 64-bit files with 32-bit files"
-msgstr "%s: linkuire fiºiere pe 64-biþi cu fiºiere pe 32-biþi"
+msgid "%pB: unable to find name for empty section"
+msgstr "%pB: nu se poate gÄƒsi numele pentru secÈ›iunea goalÄƒ"
 
-#: elf32-ia64.c:4885 elf64-ia64.c:4885
+#: peXXigen.c:188
 #, c-format
-msgid "%s: linking constant-gp files with non-constant-gp files"
-msgstr "%s: linkuire fiºiere constant-gp cu fiºiere non-constant-gp"
+msgid "%pB: out of memory creating name for empty section"
+msgstr "%pB: memorie insuficientÄƒ pentru crearea numelui pentru secÈ›iunea goalÄƒ"
 
-#: elf32-ia64.c:4895 elf64-ia64.c:4895
+#: peXXigen.c:199
 #, c-format
-msgid "%s: linking auto-pic files with non-auto-pic files"
-msgstr "%s: linkuire fiºiere auto-pic cu fiºiere non-auto-pic"
+msgid "%pB: unable to create fake empty section"
+msgstr "%pB: nu se poate crea o secÈ›iune goalÄƒ falsÄƒ"
 
-#: peigen.c:985 pepigen.c:985
+#: peXXigen.c:924
 #, c-format
-msgid "%s: line number overflow: 0x%lx > 0xffff"
-msgstr "%s: depãºire(overflow) numãr linii: 0x%lx > 0xffff"
+msgid "%pB:%.8s: section below image base"
+msgstr "%pB:%.8s: secÈ›iune de sub baza imaginii"
 
-#: peigen.c:1002 pepigen.c:1002
+#: peXXigen.c:929
 #, c-format
-msgid "%s: reloc overflow 1: 0x%lx > 0xffff"
-msgstr "%s: depãºire(overflow) relocare 1: 0x%lx > 0xffff"
+msgid "%pB:%.8s: RVA truncated"
+msgstr "%pB:%.8s: RVA trunchiat"
 
-#: peigen.c:1016 pepigen.c:1016
+#: peXXigen.c:1060
+#, c-format
+msgid "%pB: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: depÄƒÈ™ire a numÄƒrului de linii: 0x%lx > 0xffff"
+
+#: peXXigen.c:1226
 msgid "Export Directory [.edata (or where ever we found it)]"
-msgstr "Director Exportare [.edata (sau oriunde se gãseºte)]"
+msgstr "Director Exportare [.edata (sau oriunde se gÄƒseÈ™te)]"
 
-#: peigen.c:1017 pepigen.c:1017
+#: peXXigen.c:1227
 msgid "Import Directory [parts of .idata]"
-msgstr "Director Importare [ pãrþi ale .idata]"
+msgstr "Director Importare [ pÄƒrÈ›i ale .idata]"
 
-#: peigen.c:1018 pepigen.c:1018
+#: peXXigen.c:1228
 msgid "Resource Directory [.rsrc]"
-msgstr "Director Resursã [.rsrc]"
+msgstr "Director ResursÄƒ [.rsrc]"
 
-#: peigen.c:1019 pepigen.c:1019
+#: peXXigen.c:1229
 msgid "Exception Directory [.pdata]"
-msgstr "Director Excepþie [.pdata]"
+msgstr "Director ExcepÈ›ii [.pdata]"
 
-#: peigen.c:1020 pepigen.c:1020
+#: peXXigen.c:1230
 msgid "Security Directory"
 msgstr "Director Securitate"
 
-#: peigen.c:1021 pepigen.c:1021
+#: peXXigen.c:1231
 msgid "Base Relocation Directory [.reloc]"
-msgstr "Director Relocare de Bazã [.reloc]"
+msgstr "Director Realocare de BazÄƒ [.reloc]"
 
-#: peigen.c:1022 pepigen.c:1022
+#: peXXigen.c:1232
 msgid "Debug Directory"
-msgstr "Director Debug"
+msgstr "Director Depanare"
 
-#: peigen.c:1023 pepigen.c:1023
+#: peXXigen.c:1233
 msgid "Description Directory"
 msgstr "Director Descriere"
 
-#: peigen.c:1024 pepigen.c:1024
+#: peXXigen.c:1234
 msgid "Special Directory"
 msgstr "Director Special"
 
-#: peigen.c:1025 pepigen.c:1025
+#: peXXigen.c:1235
 msgid "Thread Storage Directory [.tls]"
-msgstr "Director Depozitare Fire(Thread) [.tls]"
+msgstr "Director Stocare fire de execuÈ›ie [.tls]"
 
-#: peigen.c:1026 pepigen.c:1026
+#: peXXigen.c:1236
 msgid "Load Configuration Directory"
-msgstr "Director Încãrcare Configuraþie"
+msgstr "Director ÃŽncÄƒrcare ConfiguraÈ›ie"
 
-#: peigen.c:1027 pepigen.c:1027
+#: peXXigen.c:1237
 msgid "Bound Import Directory"
-msgstr "Director Importare de Graniþã(Bound)"
+msgstr "Director Importare de LimitÄƒ"
 
-#: peigen.c:1028 pepigen.c:1028
+#: peXXigen.c:1238
 msgid "Import Address Table Directory"
-msgstr "Director Importare Tabelã de Adrese"
+msgstr "Director Importare Tabel de Adrese"
 
-#: peigen.c:1029 pepigen.c:1029
+#: peXXigen.c:1239
 msgid "Delay Import Directory"
-msgstr "Director Importare Întârziere"
+msgstr "Director Importare ÃŽntÃ¢rziere"
+
+#: peXXigen.c:1240
+msgid "CLR Runtime Header"
+msgstr "Antet de rulare CLR"
 
-#: peigen.c:1030 peigen.c:1031 pepigen.c:1030 pepigen.c:1031
+#: peXXigen.c:1241
 msgid "Reserved"
 msgstr "Rezervat"
 
-#: peigen.c:1094 pepigen.c:1094
-msgid ""
-"\n"
-"There is an import table, but the section containing it could not be found\n"
-msgstr ""
-"\n"
-"Existã o tabelã de importare, dar secþiunea care o conþine n-a putut fi gãsitã\n"
-
-#: peigen.c:1099 pepigen.c:1099
+#: peXXigen.c:1306
 #, c-format
 msgid ""
 "\n"
-"There is an import table in %s at 0x%lx\n"
+"There is an import table, but the section containing it could not be found\n"
 msgstr ""
 "\n"
-"Existã o tabelã de importare în %s la 0x%lx\n"
+"ExistÄƒ un tabel de importare, dar secÈ›iunea care Ã®l conÈ›ine n-a putut fi gÄƒsitÄƒ\n"
 
-#: peigen.c:1136 pepigen.c:1136
+#: peXXigen.c:1312
 #, c-format
 msgid ""
 "\n"
-"Function descriptor located at the start address: %04lx\n"
+"There is an import table in %s, but that section has no contents\n"
 msgstr ""
 "\n"
-"Descriptorul de funcþie localizat la adresa de start: %04lx\n"
+"ExistÄƒ un tabel de import Ã®n %s, dar acea secÈ›iune nu are conÈ›inut\n"
 
-#: peigen.c:1139 pepigen.c:1139
+#: peXXigen.c:1319
 #, c-format
-msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
-msgstr "\tcode-base %08lx toc (încãrcabil/actual) %08lx/%08lx\n"
-
-#: peigen.c:1145 pepigen.c:1145
 msgid ""
 "\n"
-"No reldata section! Function descriptor not decoded.\n"
+"There is an import table in %s at 0x%lx\n"
 msgstr ""
 "\n"
-"Nu existã secþiune reldata! Descriptorul de funcþie nu este decodat.\n"
+"ExistÄƒ o tabelÄƒ de importare Ã®n %s la 0x%lx\n"
 
-#: peigen.c:1150 pepigen.c:1150
+#: peXXigen.c:1325
 #, c-format
 msgid ""
 "\n"
 "The Import Tables (interpreted %s section contents)\n"
 msgstr ""
 "\n"
-"Tabelele de Importare (interpretat conþinutul secþiunii %s)\n"
+"Tabelele de Importare (interpretat conÈ›inutul secÈ›iunii %s)\n"
 
-#: peigen.c:1153 pepigen.c:1153
+# R-GC, scrie:
+# â€žthunkâ€� = â€žsubrutinÄƒâ€�,
+# conform paginii web:
+# https://en.wikipedia.org/wiki/Thunk
+#: peXXigen.c:1328
+#, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
 "                 Table   Stamp     Chain    Name      Thunk\n"
 msgstr ""
-" vma:          Sugestie   Timp      Înaintare  DLL     Primul\n"
-"                 Tabel   Marcaj     Lanþ    Nume      Thunk\n"
+" vma:          Sugestie  Timp      ÃŽnainte  DLL      Primul\n"
+"                 Tabel   Marcaj    LanÈ›     Nume      Thunk\n"
 
-#: peigen.c:1204 pepigen.c:1204
+#: peXXigen.c:1377
 #, c-format
 msgid ""
 "\n"
-"\tDLL Name: %s\n"
+"\tDLL Name: %.*s\n"
 msgstr ""
 "\n"
-"\tNume DLL: %s\n"
+"\tNume DLL: %.*s\n"
 
-#: peigen.c:1215 pepigen.c:1215
+#: peXXigen.c:1393
+#, c-format
 msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
-msgstr "\tvma:  Sugestie/Ord Membru-Nume Salt-La\n"
+msgstr "\tvma:  Sugestie/Ord Nume-Membru Legat-de\n"
 
-#: peigen.c:1240 pepigen.c:1240
+# R-GC, scrie:
+# â€žthunkâ€� = â€žsubrutinÄƒâ€�,
+# conform paginii web:
+# https://en.wikipedia.org/wiki/Thunk
+#: peXXigen.c:1418
+#, c-format
 msgid ""
 "\n"
 "There is a first thunk, but the section containing it could not be found\n"
 msgstr ""
 "\n"
-"Existã un prim thunk, dar secþiunea care îl conþine nu poate fi gãsitã\n"
+"ExistÄƒ o primÄƒ subrutinÄƒ( thunk), dar secÈ›iunea care o conÈ›ine nu poate fi gÄƒsitÄƒ\n"
+
+#: peXXigen.c:1465 peXXigen.c:1504
+#, c-format
+msgid "\t<corrupt: 0x%04lx>"
+msgstr "\t<corupt: 0x%04lx>"
 
-#: peigen.c:1380 pepigen.c:1380
+#: peXXigen.c:1597
+#, c-format
 msgid ""
 "\n"
 "There is an export table, but the section containing it could not be found\n"
 msgstr ""
 "\n"
-"Existã o tabelã de export, dar secþiunea ce o conþine nu poate fi gãsitã\n"
+"ExistÄƒ un tabel de export, dar secÈ›iunea care Ã®l conÈ›ine nu poate fi gÄƒsitÄƒ\n"
+
+#: peXXigen.c:1610
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but it is too small (%d)\n"
+msgstr ""
+"\n"
+"ExistÄƒ un tabel de export Ã®n %s, dar este prea mic (%d)\n"
 
-#: peigen.c:1385 pepigen.c:1385
+#: peXXigen.c:1618
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but contents cannot be read\n"
+msgstr ""
+"\n"
+"ExistÄƒ un tabel de export Ã®n %s, dar conÈ›inutul acestuia nu poate fi citit\n"
+
+#: peXXigen.c:1624
 #, c-format
 msgid ""
 "\n"
 "There is an export table in %s at 0x%lx\n"
 msgstr ""
 "\n"
-"Existã o tabelã de exportare în %s la 0x%lx\n"
+"ExistÄƒ un tabel de export Ã®n %s la 0x%lx\n"
 
-#: peigen.c:1416 pepigen.c:1416
+#: peXXigen.c:1655
 #, c-format
 msgid ""
 "\n"
@@ -2835,126 +9366,159 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Tabelele de Exportare (interpretare conþinut secþiune %s)\n"
+"Tabelele de Exportare (s-a interpretat conÈ›inutul secÈ›iunii %s)\n"
 "\n"
 
-#: peigen.c:1420 pepigen.c:1420
+#: peXXigen.c:1659
 #, c-format
 msgid "Export Flags \t\t\t%lx\n"
-msgstr "Marcaje(Flags) Exportare \t\t\t%lx\n"
+msgstr "Export fanioane \t\t\t%lx\n"
 
-#: peigen.c:1423 pepigen.c:1423
+#: peXXigen.c:1662
 #, c-format
 msgid "Time/Date stamp \t\t%lx\n"
-msgstr "Marcaj(stamp) Orã/Datã \t\t%lx\n"
+msgstr "Marcaj orÄƒ/datÄƒ \t\t%lx\n"
 
-#: peigen.c:1426 pepigen.c:1426
+#: peXXigen.c:1666
 #, c-format
 msgid "Major/Minor \t\t\t%d/%d\n"
 msgstr "Major/Minor \t\t\t%d/%d\n"
 
-#: peigen.c:1429 pepigen.c:1429
+#: peXXigen.c:1669
+#, c-format
 msgid "Name \t\t\t\t"
 msgstr "Nume \t\t\t\t"
 
-#: peigen.c:1435 pepigen.c:1435
+#: peXXigen.c:1680
 #, c-format
 msgid "Ordinal Base \t\t\t%ld\n"
-msgstr "Bazã Ordinalã \t\t\t%ld\n"
+msgstr "BazÄƒ ordinalÄƒ \t\t\t%ld\n"
 
-#: peigen.c:1438 pepigen.c:1438
+#: peXXigen.c:1683
+#, c-format
 msgid "Number in:\n"
-msgstr "Numãr în:\n"
+msgstr "NumÄƒr Ã®n:\n"
 
-#: peigen.c:1441 pepigen.c:1441
+#: peXXigen.c:1686
 #, c-format
 msgid "\tExport Address Table \t\t%08lx\n"
-msgstr "\t Tabelã Exportare Adrese \t\t%08lx\n"
+msgstr "\tTabel de adrese exportate \t\t%08lx\n"
 
-#: peigen.c:1445 pepigen.c:1445
+#: peXXigen.c:1690
 #, c-format
 msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
-msgstr "\tTabelã [Nume Pointer/Ordinal]\t%08lx\n"
+msgstr "\tTabel [nume indicator/ordinal]\t%08lx\n"
 
-#: peigen.c:1448 pepigen.c:1448
+#: peXXigen.c:1693
+#, c-format
 msgid "Table Addresses\n"
-msgstr "Adrese Tabelã\n"
+msgstr "Tabel de adrese\n"
 
-#: peigen.c:1451 pepigen.c:1451
+#: peXXigen.c:1696
+#, c-format
 msgid "\tExport Address Table \t\t"
-msgstr "\tTabelã Exportare de Adrese \t\t"
+msgstr "\tTabel de adrese exportate \t\t"
 
-#: peigen.c:1456 pepigen.c:1456
+#: peXXigen.c:1701
+#, c-format
 msgid "\tName Pointer Table \t\t"
-msgstr "\tNume Pointer Tabelã \t\t"
+msgstr "\tTabel cu indicatori de nume \t\t"
 
-#: peigen.c:1461 pepigen.c:1461
+#: peXXigen.c:1706
+#, c-format
 msgid "\tOrdinal Table \t\t\t"
-msgstr "\tOrdinal Tabelã \t\t\t"
+msgstr "\tTabel ordinal \t\t\t"
 
-#: peigen.c:1476 pepigen.c:1476
+#: peXXigen.c:1720
 #, c-format
 msgid ""
 "\n"
 "Export Address Table -- Ordinal Base %ld\n"
 msgstr ""
 "\n"
-"Tabelã Exportare de Adrese -- Bazã Ordinalã %ld\n"
+"Tabel de adrese exportate -- BazÄƒ OrdinalÄƒ %ld\n"
+
+#: peXXigen.c:1729
+#, c-format
+msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr "\tTabel de adrese de export rva (0x%lx) sau numÄƒr de intrÄƒri (0x%lx), nevalid\n"
 
-#: peigen.c:1495 pepigen.c:1495
+#: peXXigen.c:1748
 msgid "Forwarder RVA"
-msgstr "Trimiþãtor(Forwarder) RVA"
+msgstr "Expeditor RVA"
 
-#: peigen.c:1506 pepigen.c:1506
+#: peXXigen.c:1760
 msgid "Export RVA"
 msgstr "Exportare RVA"
 
-#: peigen.c:1513 pepigen.c:1513
+#: peXXigen.c:1767
+#, c-format
 msgid ""
 "\n"
 "[Ordinal/Name Pointer] Table\n"
 msgstr ""
 "\n"
-"[Ordinal/Nume Pointer] Tabelã\n"
+"Tabel [ordinal/nume indicator]\n"
+
+#: peXXigen.c:1775
+#, c-format
+msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr "\tTabel cu indicatori de nume rva (0x%lx) sau numÄƒr de intrÄƒri (0x%lx), nevalid\n"
+
+#: peXXigen.c:1782
+#, c-format
+msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr "\tTabelul ordinal rva (0x%lx) sau numÄƒrul de intrÄƒri (0x%lx) nevalid\n"
+
+#: peXXigen.c:1796
+#, c-format
+msgid "\t[%4ld] <corrupt offset: %lx>\n"
+msgstr "\t[%4ld] <decalaj corupt: %lx>\n"
 
-#: peigen.c:1568 pepigen.c:1568
+#: peXXigen.c:1851 peXXigen.c:2021
 #, c-format
-msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n"
-msgstr "Avertisment, mãrimea secþiunii .pdata (%ld) nu este multiplu de %d\n"
+msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
+msgstr "avertisment, dimensiunea secÈ›iunii .pdata (%ld) nu este un multiplu de %d\n"
 
-#: peigen.c:1572 pepigen.c:1572
+#: peXXigen.c:1855 peXXigen.c:2025
+#, c-format
 msgid ""
 "\n"
 "The Function Table (interpreted .pdata section contents)\n"
 msgstr ""
 "\n"
-"Tabela de Funcþii (interpretare conþinut secþiune .pdata)\n"
+"Tabelul de funcÈ›ii (conÈ›inutul secÈ›iunii .pdata interpretat)\n"
 
-#: peigen.c:1575 pepigen.c:1575
+#: peXXigen.c:1858
+#, c-format
 msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
-msgstr " vma:\t\t\tAdresã Început    Adresã Sfârºit      Info Unwind\n"
+msgstr " vma:\t\t\tAdresÄƒ ÃŽnceput  AdresÄƒ SfÃ¢rÈ™it   Info Unwind\n"
 
-#: peigen.c:1577 pepigen.c:1577
+#: peXXigen.c:1860
+#, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
 "     \t\tAddress  Address  Handler  Data     Address    Mask\n"
 msgstr ""
-" vma:\t\tÎnceput    Sfârºit    EH     EH     PrologSfârºit  Excepþii\n"
-"     \t\tAdresã  Adresã  Manipulant  Date   Adresã    Mascã\n"
+" vma:\t\tÃŽnceput  SfÃ¢rÈ™it  EH       EH       PrologFin. ExcepÈ›ii\n"
+"     \t\tAdresÄƒ   AdresÄƒ  Manipulant Date    AdresÄƒ     MascÄƒ\n"
+
+#: peXXigen.c:1873
+#, c-format
+msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
+msgstr "Dimensiunea virtualÄƒ a secÈ›iunii .pdata (%ld) mai mare decÃ¢t dimensiunea realÄƒ (%ld)\n"
 
-#: peigen.c:1647 pepigen.c:1647
-msgid " Register save millicode"
-msgstr " Registrul salveazã millicode "
-
-#: peigen.c:1650 pepigen.c:1650
-msgid " Register restore millicode"
-msgstr "Registrul reface millicode"
-
-#: peigen.c:1653 pepigen.c:1653
-msgid " Glue code sequence"
-msgstr "Secvenþã de cod lipitã(glue)"
+#: peXXigen.c:2027
+#, c-format
+msgid ""
+" vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
+"     \t\tAddress  Length   Length   32b exc  Handler   Data\n"
+msgstr ""
+" vma:\t\tÃŽnceput  Prolog   FuncÈ›ia  Fanioane ExcepÈ›ie  EH\n"
+"     \t\tAdresa   Lungime  Lungime  32b exc  Gestionar Date\n"
 
-#: peigen.c:1705 pepigen.c:1705
+#: peXXigen.c:2152
+#, c-format
 msgid ""
 "\n"
 "\n"
@@ -2962,26 +9526,152 @@ msgid ""
 msgstr ""
 "\n"
 "\n"
-"Relocãri Bazã Fiºier PE (interpretare conþinut secþiune .reloc)\n"
+"RealocÄƒri bazÄƒ de fiÈ™iere PE (interpretare conÈ›inut secÈ›iune .reloc)\n"
 
-#: peigen.c:1735 pepigen.c:1735
+#: peXXigen.c:2181
 #, c-format
 msgid ""
 "\n"
 "Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"
 msgstr ""
 "\n"
-"Adresã Virtualã: %08lx Mãrime Trunchiere %ld (0x%lx) Numãr acceptãri %ld\n"
+"AdresÄƒ virtualÄƒ: %08lx Dimensiunea fragmentului %ld (0x%lx) NumÄƒrul de remedieri %ld\n"
 
-#: peigen.c:1748 pepigen.c:1748
+#: peXXigen.c:2199
 #, c-format
 msgid "\treloc %4d offset %4x [%4lx] %s"
-msgstr "\trelocarea %4d offset %4x [%4lx] %s"
+msgstr "\trealocarea %4d decalaj %4x [%4lx] %s"
+
+#: peXXigen.c:2260
+#, c-format
+msgid "%03x %*.s Entry: "
+msgstr "%03x %*.s Intrare: "
+
+#: peXXigen.c:2284
+#, c-format
+msgid "name: [val: %08lx len %d]: "
+msgstr "nume: [val: %08lx lung %d]: "
+
+#: peXXigen.c:2304
+#, c-format
+msgid "<corrupt string length: %#x>\n"
+msgstr "<lungimea È™irului coruptÄƒ: %#x>\n"
+
+#: peXXigen.c:2314
+#, c-format
+msgid "<corrupt string offset: %#lx>\n"
+msgstr "<decalajul È™irului corupt: %#lx>\n"
+
+#: peXXigen.c:2319
+#, c-format
+msgid "ID: %#08lx"
+msgstr "ID: %#08lx"
+
+#: peXXigen.c:2322
+#, c-format
+msgid ", Value: %#08lx\n"
+msgstr ", Valoare: %#08lx\n"
+
+#: peXXigen.c:2344
+#, c-format
+msgid "%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
+msgstr "%03x %*.s  Foaie: Adr: %#08lx, Dim.: %#08lx, Pag.cod: %d\n"
+
+#: peXXigen.c:2386
+#, c-format
+msgid "<unknown directory type: %d>\n"
+msgstr "<tip de director necunoscut: %d>\n"
+
+#: peXXigen.c:2394
+#, c-format
+msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
+msgstr " Tabel: Caracter: %d, Ora: %08lx, Ver: %d/%d, Num Nume: %d, ID-uri: %d\n"
+
+#: peXXigen.c:2482
+#, c-format
+msgid "Corrupt .rsrc section detected!\n"
+msgstr "SecÈ›iune .rsrc coruptÄƒ a fost detectatÄƒ!\n"
+
+#: peXXigen.c:2506
+#, c-format
+msgid ""
+"\n"
+"WARNING: Extra data in .rsrc section - it will be ignored by Windows:\n"
+msgstr ""
+"\n"
+"AVERTISMENT: Date suplimentare Ã®n secÈ›iunea .rsrc - acestea vor fi ignorate de Windows:\n"
+
+#: peXXigen.c:2512
+#, c-format
+msgid " String table starts at offset: %#03x\n"
+msgstr " Tabelul de È™iruri Ã®ncepe la poziÈ›ia: %#03x\n"
+
+#: peXXigen.c:2515
+#, c-format
+msgid " Resources start at offset: %#03x\n"
+msgstr " Resursele Ã®ncep de la poziÈ›ia: %#03x\n"
+
+#: peXXigen.c:2572
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory, but the section containing it could not be found\n"
+msgstr ""
+"\n"
+"ExistÄƒ un director de depanare, dar secÈ›iunea care Ã®l conÈ›ine nu a putut fi gÄƒsitÄƒ\n"
+
+#: peXXigen.c:2578
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory in %s, but that section has no contents\n"
+msgstr ""
+"\n"
+"ExistÄƒ un director de depanare Ã®n %s, dar acea secÈ›iune nu are conÈ›inut\n"
+
+#: peXXigen.c:2585
+#, c-format
+msgid ""
+"\n"
+"Error: section %s contains the debug data starting address but it is too small\n"
+msgstr ""
+"\n"
+"Eroare: secÈ›iunea %s conÈ›ine adresa de pornire a datelor de depanare, dar este prea micÄƒ\n"
+
+#: peXXigen.c:2590
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory in %s at 0x%lx\n"
+"\n"
+msgstr ""
+"\n"
+"ExistÄƒ un director de depanare Ã®n %s la 0x%lx\n"
+
+#: peXXigen.c:2597
+#, c-format
+msgid "The debug data size field in the data directory is too big for the section"
+msgstr "CÃ¢mpul pentru dimensiunea datelor de depanare din directorul de date este prea mare pentru secÈ›iune"
+
+#: peXXigen.c:2602
+#, c-format
+msgid "Type                Size     Rva      Offset\n"
+msgstr "Tip                 Dim.     Rva      Decalaj\n"
+
+#: peXXigen.c:2650
+#, c-format
+msgid "(format %c%c%c%c signature %s age %ld pdb %s)\n"
+msgstr "(format %c%c%c%c semnÄƒturÄƒ %s vÃ¢rstÄƒ %ld pdb %s)\n"
+
+#: peXXigen.c:2662
+#, c-format
+msgid "The debug directory size is not a multiple of the debug directory entry size\n"
+msgstr "Dimensiunea directorului de depanare nu este un multiplu al dimensiunii intrÄƒrii directorului de depanare\n"
 
 #. The MS dumpbin program reportedly ands with 0xff0f before
 #. printing the characteristics field.  Not sure why.  No reason to
 #. emulate it here.
-#: peigen.c:1788 pepigen.c:1788
+#: peXXigen.c:2746
 #, c-format
 msgid ""
 "\n"
@@ -2990,38 +9680,161 @@ msgstr ""
 "\n"
 "Caracteristici 0x%x\n"
 
-#~ msgid "%s: Unknown special linker type %d"
-#~ msgstr "%s: Tip special necunoscut de linker %d"
+#: peXXigen.c:3031
+#, c-format
+msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
+msgstr "%pB: Directorul de date (%lx octeÈ›i la %<PRIx64>) se extinde peste limita secÈ›iunii la %<PRIx64>"
+
+#: peXXigen.c:3072
+msgid "failed to update file offsets in debug directory"
+msgstr "nu s-a reuÈ™it actualizarea decalajelor fiÈ™ierelor din directorul de depanare"
+
+#: peXXigen.c:3081
+#, c-format
+msgid "%pB: failed to read debug data section"
+msgstr "%pB: nu s-a putut citi secÈ›iunea de date de depanare"
+
+#: peXXigen.c:3884
+#, c-format
+msgid ".rsrc merge failure: duplicate string resource: %d"
+msgstr "fuziunea .rsrc a eÈ™uat: resursÄƒ È™ir duplicat: %d"
+
+#: peXXigen.c:4019
+msgid ".rsrc merge failure: multiple non-default manifests"
+msgstr "fuziunea .rsrc a eÈ™uat: multiple manifeste non-implicite"
+
+#: peXXigen.c:4037
+msgid ".rsrc merge failure: a directory matches a leaf"
+msgstr "fuziunea .rsrc a eÈ™uat: un director se potriveÈ™te cu o foaie"
+
+#: peXXigen.c:4079
+msgid ".rsrc merge failure: duplicate leaf"
+msgstr "fuziunea .rsrc a eÈ™uat: foaie duplicat"
+
+#: peXXigen.c:4084
+#, c-format
+msgid ".rsrc merge failure: duplicate leaf: %s"
+msgstr "fuziunea .rsrc a eÈ™uat: foaie duplicat: %s"
+
+#: peXXigen.c:4151
+msgid ".rsrc merge failure: dirs with differing characteristics"
+msgstr "fuziunea .rsrc a eÈ™uat: directoare cu caracteristici diferite"
+
+#: peXXigen.c:4158
+msgid ".rsrc merge failure: differing directory versions"
+msgstr "fuziunea .rsrc a eÈ™uat: versiuni diferite de directoare"
+
+#. Corrupted .rsrc section - cannot merge.
+#: peXXigen.c:4270
+#, c-format
+msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
+msgstr "%pB: fuziunea .rsrc a eÈ™uat: secÈ›iunea .rsrc coruptÄƒ"
+
+#: peXXigen.c:4278
+#, c-format
+msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
+msgstr "%pB: fuziunea .rsrc a eÈ™uat: dimensiune .rsrc neaÈ™teptatÄƒ"
+
+#: peXXigen.c:4417
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
+msgstr "%pB: nu se poate completa DataDictionary[1] deoarece .data$2 lipseÈ™te"
+
+#: peXXigen.c:4437
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
+msgstr "%pB: nu se poate completa DataDictionary[1] deoarece .data$4 lipseÈ™te"
+
+#: peXXigen.c:4458
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
+msgstr "%pB: nu se poate completa DataDictionary[12] deoarece .data$5 lipseÈ™te"
+
+#: peXXigen.c:4478
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
+msgstr "%pB: nu se poate completa DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] deoarece .idata$6 lipseÈ™te"
+
+#: peXXigen.c:4520
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
+msgstr "%pB: nu se poate completa DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] deoarece .idata$6 lipseÈ™te"
+
+#: peXXigen.c:4545
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
+msgstr "%pB: nu se poate completa DataDictionary[9] deoarece __tls_used lipseÈ™te"
+
+#, c-format
+#~ msgid "%pB: unsupported relocation type name %s"
+#~ msgstr "%pB: nume de tip de realocare neacceptat %s"
+
+#~ msgid "f' and `c"
+#~ msgstr "fâ€œ È™i â€žc"
+
+#~ msgid "d' and `c"
+#~ msgstr "dâ€œ È™i â€žc"
+
+#~ msgid "zvknha"
+#~ msgstr "zvknha"
+
+#~ msgid "zvknhb"
+#~ msgstr "zvknhb"
+
+#~ msgid "Deprecated %s called at %s line %d in %s\n"
+#~ msgstr "%s Ã®nvechitÄƒ apelatÄƒ la %s linia %d Ã®n %s\n"
+
+#~ msgid "Deprecated %s called\n"
+#~ msgstr "%s Ã®nvechitÄƒ apelatÄƒ\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but that section has no contents\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ExistÄƒ un tabel de export Ã®n %s, dar acea secÈ›iune nu are conÈ›inut\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but it does not fit into that section\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ExistÄƒ un tabel de export Ã®n %s, dar nu se Ã®ncadreazÄƒ Ã®n acea secÈ›iune\n"
 
-#~ msgid "v850ea architecture"
-#~ msgstr "arhitecturã v850ea"
+#~ msgid "%pB: unable to initialize compress status for section %s"
+#~ msgstr "%pB: nu se poate iniÈ›ializa starea de comprimare pentru secÈ›iunea %s"
 
-#~ msgid "%s: Section %s is too large to add hole of %ld bytes"
-#~ msgstr "%s: Secþiunea %s este prea mare pentru a adãuga o gaurã de %ld octeþi"
+#~ msgid "%pB: unable to initialize decompress status for section %s"
+#~ msgstr "%pB: nu se poate iniÈ›ializa starea de decomprimare pentru secÈ›iunea %s"
 
-#~ msgid "Error: out of memory"
-#~ msgstr "Eroare: memorie plinã"
+#~ msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+#~ msgstr "eroare: dimensiunea secÈ›iunii %pB(%pA) (%#<PRIx64> octeÈ›i) este mai mare decÃ¢t dimensiunea fiÈ™ierului (%#<PRIx64> octeÈ›i)"
 
-#~ msgid "warning: relocation against removed section; zeroing"
-#~ msgstr "avertisment: relocare pe secþiune eliminatã; se umple cu zero(zeroing)"
+#~ msgid "DWARF error: section %s is larger than 10x its filesize! (0x%lx vs 0x%lx)"
+#~ msgstr "eroare DWARF: secÈ›iunea %s este mai mare de 10 ori decÃ¢t dimensiunea fiÈ™ierului sÄƒu! (0x%lx vs 0x%lx)"
 
-#~ msgid "warning: relocation against removed section"
-#~ msgstr "avertisment: relocare pe secþiune eliminatã"
+#~ msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+#~ msgstr "%pB:%pA: eroare: Ã®ncercare de a scrie Ã®ntr-o secÈ›iune comprimatÄƒ nealocatÄƒ"
 
-#~ msgid "local symbols in discarded section %s"
-#~ msgstr "simboluri locale în secþiunea îndepãrtatã(discarded) %s"
+#~ msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+#~ msgstr "%F%P: Nu s-a putut atribui %pA unei secÈ›iuni de ieÈ™ire. ReÃ®ncercaÈ›i fÄƒrÄƒ opÈ›iunea â€ž--enable-non-contiguous-regionsâ€�.\n"
 
-#~ msgid "%s: linking abicalls files with non-abicalls files"
-#~ msgstr "%s: linkuire fiºiere abicalls cu fiºiere non-abicalls"
+#, fuzzy
+#~ msgid "%F%P: failed to create BND PLT section\n"
+#~ msgstr "nu s-a putut calcula(compute) secÈ›iunea nouÄƒ APUinfo."
 
-#~ msgid "%s: ISA mismatch (-mips%d) with previous modules (-mips%d)"
-#~ msgstr "%s: nepotrivire ISA (-mips%d) cu modulele anterioare (-mips%d)"
+#, fuzzy
+#~ msgid "%pB: no core to allocate section name %s"
+#~ msgstr "%s:Nu existÄƒ nucleu(core) pentru a aloca numele de secÈ›iune %s\n"
 
-#~ msgid "%s: ISA mismatch (%d) with previous modules (%d)"
-#~ msgstr "%s: nepotrivire ISA (%d) cu modulele anterioare (%d)"
+#, fuzzy
+#~ msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
+#~ msgstr "%s: relocarea %s nu poate fi utilizatÄƒ cÃ¢nd se face un shared object, recompilaÈ›icu -fPIC"
 
-#~ msgid "%s: dynamic relocation against speculation fixup"
-#~ msgstr "%s: relocare dinamicã pe acceptare(fixup) speculativã"
+#, fuzzy
+#~ msgid "%s: duplicate prefixed ISA extension `%s'"
+#~ msgstr "%s: exportare de ciot(stub) duplicatÄƒ %s"
 
-#~ msgid "%s: speculation fixup against undefined weak symbol"
-#~ msgstr "%s: speculaþie acceptare(fixup) pe simbol ambiguu(weak) nedefinit"
+#, fuzzy
+#~ msgid "internal error: RL78 reloc stack overflow"
+#~ msgstr "eroare internÄƒ: eroare depÄƒÈ™ire de domeniu(out of range)"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ru.gmo ./bfd/po/ru.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ru.gmo	2019-12-11 01:53:30.000000000 +0000
+++ ./bfd/po/ru.gmo	2024-02-01 01:52:33.000000000 +0000
@@ -1,149 +1,163 @@
-Þ•01Ûbl…€„…„‡dŸ
eŸsŸ‡Ÿ ŸA¿Ÿ? :A | “ ¦ $Å 3ê 
¡,¡%L¡r¡t¡A†¡&È¡ï¡¢!¢:¢J¢ i¢Š¢ª¢Ã¢Ú¢ç¢Pú¢K£*c£9Ž£6È£;ÿ£;¤FM¤6”¤6Ë¤:¥5=¥,s¥D ¥Nå¥J4¦)¦G©¦:ñ¦B,§Lo§)¼§Bæ§L)¨v¨Œ¨D£¨Gè¨0©O©a©u©�©¢©3Á©õ©ª0ªOª_ªoª+‰ª+µª+áª#
«1«I«R«p«(‡«?°«>ð«%/¬&U¬(|¬)¥¬GÏ¬7­O­f­†­£­¼­×­÷­®+®A®Y®m®„®,ž®Ë®Û®ô®¯#¯2¯H¯]¯w¯Ž¯1£¯Õ¯æ¯ó¯
-°%°#=°+a°&�°5´°ê°ÿ°±1±G±a±z±‘±§±$¼±á±ú±²2²$G²l²€²•²<®²ë²ú²
	³³+³@³ X³y³”³¤³Ä³à³´´2´E´*X´ƒ´•´&§´Î´0â´µ"'µJµ	[¶e¶#x¶œ¶µ¶Æ¶ß¶"ø¶·"/·#R·#v·š·#¯·#Ó·÷·¸"¸@¸F¸S¸[¸`¸
-}¸ˆ¸�¸!“¸ µ¸Ö¸Û¸à¸ø¸¹8¹=¹Q¹!V¹x¹‰¹�¹–¹›¹ ¹¦¹ª¹¯¹Ë¹"ä¹ºº,º@º&`ºB‡ºÊºêºïºôºûº»»»»7»K»R»k»»�»¡»²»Ã»Ô»ì»	û»
¼
¼
-!¼
-,¼
-7¼
-B¼
-M¼$X¼
-}¼#ˆ¼
-¬¼·¼É¼!á¼½½
-'½
2½	@½J½
-[½f½m½…½Ÿ½±½À½×½ò½¾¾)¾0¾P¾(`¾/‰¾¹¾Ë¾+Ú¾¿A"¿d¿~¿˜¿²¿8Ç¿ÀÀ-À&GÀnÀ�À2¨À?ÛÀ&ÁBÁ(aÁŠÁ"�ÁÀÁ*àÁ6Â{BÂr¾Âx1ÃªÃ:ÀÃûÃ?
ÄMÄmÄ&‹Ä²ÄœÌÄDiÅ'®Å,ÖÅ1Æ'5Æ$]Æ/‚Æ-²Æ0àÆ&Ç88ÇqÇ=‘Ç9ÏÇ:	È6DÈ6{È²È/ÒÈ5É+8É$dÉ6‰É"ÀÉ&ãÉ6
-Ê=AÊ:Ê:ºÊDõÊ8:Ë9sËC­Ë:ñË7,Ì8dÌ@�ÌGÞÌ9&Í,`Í0�Í#¾ÍâÍ-ýÍ6+ÎbÎ7~Î;¶Î:òÎ9-Ï"gÏ3ŠÏ%¾Ï.äÏÐL3Ð0€Ð.±Ð1àÐ'ÑE:Ñ8€Ñ(¹ÑcâÑ4FÒ&{Ò2¢Ò&ÕÒ6üÒ]3Ó8‘ÓÊÓOéÓb9Ô,œÔ+ÉÔ)õÔYÕ=yÕ3·Õ2ëÕBÖ)aÖ$‹Ö3°Ö9äÖ6×/U×D…×&Ê×Wñ×UIØIŸØ+éØ8Ù%NÙ(tÙ&�Ù,ÄÙ#ñÙ>ÚBTÚB—ÚÚÚ'úÚE"Û9hÛ4¢Û3×ÛJÜ(VÜ;Ü»Ü0ÚÜ.Ý,:Ý'gÝ6�Ý ÆÝ/çÝ4ÞNLÞª›ÞIFß9�ß3Êß¾þß<½à<úàF7áP~áoÏá>?âF~â`Åâ~&ãF¥ã‚ìã[oä3Ëä@ÿäM@åmŽå7üå#4æXæ(næ&—æ+¾æêæÿæ8ç"Lç$oç'”ç9¼çCöç!:è!\è*~è/©è1Ùè/é/;é0ké*œé0Çé<øéi5ê=ŸêBÝê= ë-^ë.Œë8»ë9ôëF.ì?uìVµì(í>5í;tí=°í#îíLî8_î+˜î8Äî2ýî90ï:jï3¥ï,Ùïuð |ð.�ð.ÌðKûð0GñBxñ/»ñ,ëñ'ò%@ò,fòN“òâòCüòJ@ó@‹óJÌó*ô%Bô<hô ¥ôlÆô<3õ<põ+­õÙõ,õõH"ö6köA¢öAäöJ&÷>q÷J°÷Jû÷<Fø.ƒø(²ølÛøvHùA¿ù6ú8ú4Vú0‹ú+¼úAèú3*û@^û!Ÿû#Áû.åûBüFWü4žü%Óü:ùü24ý*gý9’ýCÌýCþ:TþT�þJäþ5/ÿ4eÿ6šÿ/Ñÿ/&1&X5'µ0Ý5(D3m%¡&Çî'=6#t+˜3Ä(ø@!Cb5¦'Ü,g14™mÎA<@~H¿GKPIœLæH3C|YÀ50P4�M¶N	1S	)…	/¯	)ß	+	
-75
-3m
-6¡
-9Ø
-X[kCÇ6>B=�*¿.ê2
[L
&¨
-Ï
,ý
*E/`(�$¹0Þ'87"pA“)Õ=ÿ@=2~+±"Ý5<6's%›(ÁRê?=F}3Ä1øD*HoD¸KýaI`«sB€‚ÃTF=›bÙb<gŸg0o( 4É5þ34-h/–HÆF7VGŽ+Ö$2'.Z/‰+¹)å^KnFº"@5[(‘EºDDEFŠ_Ñ^1"�*³+Þ8
- :C '~ ;¦ 8â '!'C!3k!>Ÿ!-Þ!,"9"X"u".“"/Â"ò"$#37#k#F‰#&Ð#!÷#6$5P$+†$ ²$$Ó$.ø$.'%%V%)|%\¦%D&HH&D‘&LÖ&X#'H|')Å'*ï' (5;(9q(@«(+ì(6)AO).‘)3À)=ô)H2*<{*8¸*3ñ*4%+4Z+0�+@À+1,B3,Lv,AÃ,L-8R-B‹-+Î-2ú-<-.3j.Xž.P÷..H/`w/&Ø/\ÿ/X\0/µ0på0AV1+˜1KÄ1.2,?2%l2’23²22æ23493Wn3=Æ3*45/4%e4B‹4%Î44ô4>)5<h5C¥5Bé5;,63h6œ6¼6Ë6!à67$7=71P7V‚7IÙ7I#8<m8ª8½8Ñ8ã8ý8
9'9G9
S9a9%r9\˜9;õ91:C:Y:\:y:†:	Ÿ:©:»:Ì:,Ù:;;0;"L;o;(Œ;/µ;/å;1<8G<#€<'¤<2Ì<3ÿ<3=;C==†=Ž=£=³=º=Â=Ö=ë=>>%><>Y>k>‰>	¨>²>Ð>	å>"ï>?$?)@?/j?"š?½?Ô?Ý?é?í?@@$@'6@^@ {@#œ@À@Ú@ ì@
AH+A1tA#¦A,ÊAX÷AaPB:²B.íB7C1TC;†C(ÂC:ëC,&D-SD-�D¯D2ÎDEE&E;ERE)hE’E!¨E$ÊEIïE9F5VFŒF
-¡FC¬FIðF:GLGTG\G
zGˆGAšGÜG/øG+(H8TH�H$£H!ÈH1êHI;I+ZI†I
-šI¥IÄI%ÖIüIJ.,J-[JG‰J3ÑJK"$KGKYK$rK—K!´KÖK5èKL	0L:LLLbL‚LœL¸LÇLÙL	àLêLïLûL
-M!M=MSMeM…MžM¾MÒMäMüM-NHNZNlN€NšN'¯N×NæNøN
-OO!O:O:VO%‘O%·OÝOAöO;8PCtP=¸PCöP=:Q"xQ7›Q<ÓQ<R)MR5wR­R¶RvÑR*HSsS'…S­S¿SÆS
-ÍS(ØST'T;TXTpT�T#¨T$ÌT,ñT.U,MU.zU©U"ÆU,éU.V!EV1gV0™V2ÊV,ýV.*W#YW}W�W(±W/ÚW!
-X,X(IX#rX+–XÂX,ÛX Y)YBYbYvY–Y#µY-ÙY"Z*Z<ZOZ[ZpZ&‚Z	©ZF³Z/úZ*[J;[M†[Ô[ô[\\-;\i\r\z\A†\>È\]A]7[]B“]!Ö]ø]˜^±^Í^ß^ñ^2_.9_#h_Œ_™_¦_¶_¾_:×_+`#>`b`u`Ž`¦`,¾`:ë`&a	>adHa­a6ÀaM÷aMEb<“bgÐbb8c<›cEØc1d(Pd$ydžd/´d+äde,eFece>e<¾eûe4f'Lf$tf™fªfÂfÙfêfgg,g>gPgbg|g—g©gºgÒgñg2hCh']h7…h0½hDîh,3i'`iˆi¨iºi-Ôi+j+.j*Zj	…j	�j
-™j
-¤j¯jÄjÓjèj÷j1üj.k/Nk~k'�k"Åk&èk0l@l^lsl|l9šlÔl,él9m)PmCzmI¾mEnYNnY¨n;o;>oNzo/Éo5ùo:/p5jp4 p9Õp7q9GqD�qGÆqDrESrC™r4Ýr?s:RsG�s;ÕsAt9St*�t6¸t/ït;u3[u%�u1µuAçu!)vUKv\¡vAþv1@w?rw:²w7íw>%x$dxI‰xÓx/ðxO yPpy3Áy õy?z:Vz&‘z
-¸z0Ãz%ôz"{%={0c{!”{¶{Ï{ê{ÿ{|O|k|,Š|J·|7}
:}H}1W}‰}�}°}Ã})à}*
-~,5~6b~™~$¹~_Þ~">Aa£,Á2îH!€j€z€$‹€°€Ã€¼ã€¹ �Z‚/l‚œ‚·‚Õ‚*õ‚L ƒ2mƒ- ƒ)Îƒ"øƒ„.„C„X„4g„œ„0¤„%Õ„9û„5…G…X…r…z…‚…ž…H¥…î…4ñ…&†/†
-F†Q†2m†O †ð†‡"‡*7‡%b‡ ˆ‡©‡Ç‡Ï‡Cî‡¤2ˆ×ˆäˆ þˆ‰(‰<‰Q‰g‰}‰”‰±‰Â‰Ô‰è‰Nð‰[?Š›ŠAŸŠáŠ‹‹5‹6M‹„‹ ¤‹8Å‹+þ‹*Œ=ŒMŒUŒjŒ‚Œ–ŒªŒ¾ŒÑŒ
äŒòŒL� Y�Dz�P¿�Ž"Ž2=Ž$pŽ•ŽµŽ5ÈŽþŽ!�;�B�2J�F}�/Ä�ô�"�)�9�MH�9–�;Ð�7‘D‘\‘y‘ˆ‘,›‘$È‘Jí‘)8’ˆb’(ë’%“(:“c“
-“,Š“7·“ï“)	”3”Q”k”ƒ”‹”£”»”
Ñ”#ß”•'•C•T•j•„•¡•»•#Ç•%ë•–.–E–W–7n–¦–Â–â–û–—"—5—I—]—s—J‰—JÔ—J˜Ij˜:´˜ï˜-™;<™+x™@¤™<å™1"š8Tš8�š.Æš>õšI4›h~›yç›>aœN œIïœd9�0ž�;Ï�8žFDž5‹ž&Áž.èž-Ÿ.EŸ0tŸ<¥Ÿ!âŸ ! `? .  ,Ï hü Ee¡0«¡6Ü¡k¢E¢Å¢&ã¢I
-£#T£<x£<µ£eò£2X¤/‹¤/»¤4ë¤= ¥9^¥0˜¥7É¥'¦=)¦6g¦@ž¦ß¦ÿ¦,§)0§
Z© h©>‰©DÈ©’
ª€ ªu!«0—«7È«5¬Z6¬K‘¬Ý¬:í¬<(­e­g­`{­.Ü­®%*®+P®|®$Ž®&³®%Ú®3¯#4¯
X¯(f¯˜�¯8(°va°HØ°_!±G�±(É±ò±Gr²]º²H³Da³S¦³zú³Œu´~µT�µ|ÖµpS¶vÄ¶Š;·LÆ·t¸ˆˆ¸¹$.¹zS¹˜Î¹Tgº¼ºÚº5îº$»);»>e»&¤»Ë»Mæ»4¼F¼!V¼Dx¼D½¼D½-G½$u½š½'£½4Ë½@¾FA¾Eˆ¾<Î¾C¿BO¿I’¿ZÜ¿i7À%¡ÀÇÀçÀ*Á7/Á(gÁ�Á,°Á!ÝÁ%ÿÁ'%Â MÂ nÂ8�ÂÈÂ-ØÂ!Ã+(ÃTÃgÃ†Ã¥ÃÄÃàÃHüÃEÄ[Ä$hÄ*�Ä*¸ÄEãÄJ)ÅCtÅS¸ÅÆ++Æ&WÆ~Æ)œÆÆÆáÆúÆÇ@.ÇoÇ6�ÇÆÇÞÇ7ùÇ1ÈLÈ"kÈ<ŽÈËÈÚÈ
éÈ÷ÈÉ+3ÉB_É#¢ÉÆÉ/âÉ)Ê*<ÊgÊ#†ÊªÊÊÊ9ÝÊË)Ë6;ËrË<†ËÃË?×ËéÌÏÏ#%ÏIÏbÏxÏ(‘Ï;ºÏöÏ-
-Ð#8Ð#\Ð€Ð#ŸÐ#ÃÐçÐ,ûÐ.(ÑWÑ]ÑuÑ}Ñ1‚Ñ
-´Ñ¿ÑÄÑ:ÊÑHÒNÒSÒ,XÒ(…Ò.®ÒÝÒCâÒ&ÓP+Ó|Ó™Ó Ó¦Ó«Ó°Ó¶ÓºÓ?¿Ó7ÿÓB7ÔzÔ(Ô¨Ô&ÃÔMêÔl8Õ(¥ÕÎÕÓÕØÕßÕåÕêÕÖ)
-Ö14ÖfÖ6mÖ1¤ÖÖÖìÖ××.×&D×k×	‡×
‘×
Ÿ×
-­×
-¸×
-Ã×
-Î×
-Ù×aä×
-FØ~QØ
-ÐØÛØ5íØN#Ù.rÙ¡ÙÀÙÒÙéÙ"õÙÚ,Ú.3Ú2bÚ•Ú§ÚAÄÚ3Û:ÛAXÛ
šÛ¨ÛA¯ÛñÛOÜX`Ü¹ÜËÜSßÜ#3ÝAWÝ/™Ý(ÉÝ"òÝÞ83Þ&lÞ+“Þ.¿ÞUîÞRDß—ßJ²ßHýßYFàV à9÷à1á-Há:vá,±ásÞáÜRâÁ/ã¼ñã'®äcÖä:å…UåÛåEûåNAæ-�æX¾æ�è>™èIØèH"é>ké<ªéVçéD>êYƒê>ÝêQë;në�ªë},ìjªì[íWqí'ÉíeñírWî`Êî=+ïliï@ÖïEðM]ðT«ðOñQPñ_¢ñNòPQò^¢òPóNRóN¡óŽðó¯ô—/õ„Çõ4Lö*�öE¬öWòögJ÷>²÷wñ÷miøo×ø`Gù>¨ùTçùJ<úG‡úAÏúÆû•ØûSnüMÂü=ýšNýyéýNcþ»²þ_nÿGÎÿKLb]¯á
iï!Y®{³*RÞZ1>Œ´Ëx€SùQMuŸ[Mqp¿[0IŒFÖr	?�	»Ð	‹Œ
-‚`›Yü>VD•2Ú7

'E
ym
~ç
zf3áZ{pkìhXwÁÜ9šƒ±N5U„RÚ^-PŒsÝ@QQ’gä”LGá’){¼a8ošm
-mxfæ›Màé[Êi&«�ç<}$ Ý¢ §€!P("by"‚Ü"Å_#N%$Yt$$Î$Gó$G;%Sƒ%2×%)
-&e4&Hš&?ã&H#'ll'rÙ';L(;ˆ(EÄ(V
-)Ca)T¥)fú)Va*Q¸*V
-+Ia+�«+u<,]²,u-P†-f×-n>.c­.‡/x™/¡0F´0jû0^f1ŒÅ1;R2mŽ2Mü2NJ3\™3Oö3lF4m³4c!5i…5ï5Fò6\97\–7†ó7zz8qõ8Eg9Y­9c:Uk:LÁ:‚;C‘;xÕ;ŒN<uÛ<ŠQ=lÜ=QI>€›>K?áh?�J@�Û@WlA'ÄAOìA‘<BbÎBœ1CœÎC®kD}EŸ˜E¯8FqèFwZG?ÒGÂHÌÕH‚¢In%J:”J€ÏJZPKH«K{ôKppL]áL4?MPtMuÅM;N¦»NZbOA½OtÿO_tPOÔP�$Q£¦Q£JR‘îR§€S¨(TWÑTV)Uh€UféUVPVc§VZWafW@ÈWV	Xm`XKÎXQY?lYN¬Y;ûY_7Zc—Z@ûZ]<[uš[;\L\‚Ì\WO]E§]Mí]ç;^o#_˜“_q,`ož`{azŠa~bo„b‘ôbu†c…üc¶‚di9e\£eUf«Vf«gn®gKhWihRÁhZidoiOÔi�$jUµjÍkÌÙk˜¦l©?mqémR[n{®nf*oU‘oÅçoC­p[ñpZMqD¨q&íqErGZrN¢rlñrS^sz²sI-tlwt=ät£"umÆuf4vC›vGßvm'w€•wQx9hxE¢xzèxpcy„ÔyjYzZÄzz{yš{i|�~|¸}¸Å}å~~qdùÖªÐ€{�¯û�¹«‚¶eƒ¾„ZÛ„F6…g}…cå…XI†T¢†D÷†t<‡p±‡Z"ˆ�}ˆ]ÿˆ:]‰a˜‰rú‰QmŠJ¿ŠM
-‹³X‹qŒW~Œ4ÖŒ;�3G�m{�Ué�n?Žm®Žm�oŠ�ˆú�‡ƒ�=‘HI‘K’‘lÞ‘pK’I¼’t“~{“Gú“LB”Z�”|ê”Sg•[»•;–5S–?‰–YÉ–Z#—<~—>»—Tú—,O˜f|˜Jã˜;.™Vj™_Á™F!šChšG¬šcôšaX›Iº›Bœ¸Gœ›�˜œ�œ5ž´Òž¶‡Ÿ˜> G× B¡=b¡h ¡o	¢qy¢bë¢iN£~¸£_7¤^—¤}ö¤žt¥‹¦}Ÿ¦}§k›§Ž¨}–¨”©W©©nªypªnêªƒY«RÝ«Ž0¬r¿¬z2­m­­}®¾™®¥X¯^þ¯Ê]°i(±œ’±˜/²XÈ²Ô!³|ö³bs´oÖ´_Fµ`¦µQ¶8Y¶J’¶IÝ¶9'·Sa·™µ·uO¸TÅ¸p¹R‹¹}Þ¹[\ºR¸ºŠ»v–»“
¼›¡¼~=½K¼½B¾K¾ f¾W‡¾%ß¾P¿V¿au¿�×¿rgÀrÚÀUMÁ&£ÁÊÁ%êÁ1Â,BÂoÂ=‡ÂÅÂàÂ÷Â%Ã¼6Ã’óÃ$†Ä7«ÄãÄ7æÄÅ>;ÅzÅ‘Å°ÅÌÅ,æÅÆ),Æ5VÆAŒÆ7ÎÆHÇXOÇ[¨Ç^ÈkcÈMÏÈQÉ\oÉnÌÉ;ÊTÊÔÊçÊ(úÊ#Ë<ËOËbË~Ë›Ë¸ËÒË@íË?.Ì3nÌ4¢Ì;×ÌÍ5*Í.`Í�ÍI¦ÍðÍNÎDQÎJ–Î?áÎ8!ÏZÏ"kÏŽÏ:’ÏÍÏßÏñÏDÐ6HÐ?ÐE¿Ð.Ñ34Ñ@hÑ8©ÑiâÑjLÒ8·Ò[ðÒÀLÓ£
Ôx±Ôj*Õ€•ÕnÖ•…ÖL×{h×dä×WIØR¡ØHôØQ=Ù�Ù4­Ù0âÙ4Ú/HÚYxÚÒÚ/òÚ5"ÛˆXÛ,áÛLÜ#[Ü Ül Ü›
Ý©Ý»ÝÃÝ'ËÝ óÝÞ�&ÞB´Þp÷ÞXhßYÁß6àcRà^¶à|áY’á]ìázJâUÅâ
-ãK&ãrã5„ãºã4ÌãgäRiäƒ¼äh@å;©å1ååæ7)æ)aæ8‹æ6ÄæûæW
çeç wç˜ç'ªçEÒç"è=;è yèšè¬è³è¿èÖèæè"é2%éXéxé@’é#Óé;÷é3êQê"mê4�ê[Åê,!ëNëdë,‚ë:¯ë\êëGìbìtì†ì�ìE”ì%ÚìEí0Fí1wíC©íxííyfîšàîz{ï€öïXwðWÐðZ(ñiƒñiíñLWòb¤òó'&óÙNóE(ônô=€ô¾ôÐô×ô!ÞôbõcõCuõ-¹õ#çõ1ö"=ö4`ö:•ö[ÐöO,÷[|÷OØ÷?(øBhø[«øOùIWùb¡ùoúctú[ØúO4ûB„ûBÇû"
-üM-üP{ü3Ìü5ýR6ýF‰ýVÐý4'þI\þ7¦þ>ÞþHÿ$fÿC‹ÿ9ÏÿJ	VTB«î'9(1b%”Tº
-ab|ßŽþ��3)Q1{D­Aò4=RrkeÞDxVXÏ~(Q§Cù=+V	‚	�	 ¸	eÙ	T?
-N”
-ã
-ô
-
-?(nhS×W+#ƒ(§Ð#èf
ks
2ß
)¤<!áV†Z†áKhÉ´ž~gj…JðA;)}§TÅkb†IéN3>‚›Á•]Fó’:ÍDM+’>¾1ý+/>[8š,Ó,,-,Z@‡:È,+08\K•CáF%/lMœ_êUJ} PMo?½)ý/'eWc½c! K… 
-Ñ 
-Ü ç ó %
!3!B!W!f!8o!=¨!Wæ!.>"bm"[Ð"C,#Xp#&É#ð#$1$UB$ ˜$^¹$w%?�%€Ð%‚Q&¡Ô&ïv'Ìf(„3)€¸)×9*u+d‡+}ì+‚j,cí,ŒQ-fÞ-ŒE.ŒÒ. _/”0�•0œ31\Ð1i-2l—2h3�m3”ï3l„4pñ4fb5_É5e)6_�6Eï6O57|…7M8 P8Ùñ8gË9i3:`�:kþ:hj;nÓ;YB<~œ<>=BZ=†�=€$>X¥>@þ>`??[ ?Jü?G@Z^@F¹@OAHPAo™AD	B0NB/B3¯B&ãB
-C¶ CW×Cg/D™—D{1E­EÉEKæE2FFFYF@lFq­F„Gb¤G|H>„HHÃH·ITÄI€JFšJiáJ^KK‚ªK!-L"OLErL¸LCÖLHMKcN!¯ORÑO:$P4_PP”P]åP�CQOÔQN$ResR[ÙR5SOS)dS!ŽS½°SnTi}TeçTdMU²U#ÒU5öU,V4V1<VnV“{VWWWnW2‚WµW#ÍWuñW¨gXGYXY>pYf¯YXZDoZF´ZûZ1[jB[$­[Ò\8ì\U%]{]'�](·])à])
-^*4^%_^!…^"§^Ê^à^“è^Á|_>`mE`M³`2a,4a;aah�aTbW[bm³bZ!c'|c)¤cÎcÖc3óc'd=dQdedxd‹d1£dvÕd,LeŒyenf"uf7˜f^Ðf9/gFig(°g`Ùg=:hXxhÑh
Þh`ìhaMiq¯i.!j?Pj�j j€¯ja0k}’k�l;’l7Îl0m7m\QmE®m„ômjynänSåo?9p`yp2Úp
qQ(qjzq2åqTr=mr1«r6Ýrs+)s-Us3ƒs#·sYÛs55tMkt0¹t5êt9 u8Zu2“uÆu3ßuQv=ev+£v7Ïv7w�?w>ÐwBx?Rx’x±xÍxêxy&yFy¦fy—
z“¥z“9{€Í{)N|Kx|\Ä|W!}my}™ç}X�~�Ú~‚\mßŒM€¦Ú€ñ��s‚Œ�ƒ«„¦É„ßp…eP†n¶†f%‡�Œ‡©ˆYÇˆh!‰^Š‰_é‰aIŠh«ŠP‹Be‹T¨‹�ý‹h›Œf�°k�uŽz’Žo
�É}��G�QØ�a*‘šŒ‘S'’u{’uñ’Ðg“h8”d¡”X•~_•}Þ•^\–d»–q —d’—¨÷—‡ ˜¼(™Då™*šJ/šßÎ¿Ciq¯ž$Š¨6¸ŒÔ9õ¹í¹Ä"Àg!f5Ý”­;›Î¬¾×Æ
-ƒTW­0§y2!'(ê�)Ý
-ªE69	Ç`Z‹—EÄÖê{8¦J5„÷”�ž‡I£r€dŠÊ<ÆxkUámÜ‚x´¡[×ºå§û8ÇR)Ä»°q�¿õÿU³�Û³÷ëÃ"D}sÖ/WòF[šƒ|y0Vôë,ëµäÕ²$².ÿ;Y}_Îó„¼Ê!Hø×<\Œð¤´Àsˆh¡…fæˆ«ÁÄÏÜ,*‘wØºúa:ë©Î„' ðí~Mà‚báZó
Èc:Q3(;ÿ÷4G&ÉCN±µÞ&"PL%‹Cç?æ‰
-æýµ”Õ‡r±Ê¡Y†`�”¥Uôa›BÉUÙðlñe/—lwÝæ6î“Ÿ¥õh›>Lþ�:’’øõ¢“#VÔ¸Ÿ¿pxŠÍ~­a·ÃxC•QSt#Ú<â¡ÒïÈé@»ã�eûPÔ—jˆËñ%‰	S~LÃ°ãXOù$,3{)ã@šnÅcËAŸ�5Œ3§‚åb×À3µÅ-ÈXŠuZ=©zRí0[FÔD:wºËaÞ›Õ=ú¨
¦®N9®ä �ñ¿5šÜ­Kn8¶¾ŸKäÊ½	.l2ÜŠBAtø?�öãm®ƒÆÖLëz !x–gW˜ùÖ¶ÉÌVÄøIZ¸4O™¶:»«þžŽ€Iåÿ=©ÝþÌc‰•N¡þí�ªù[‡V¥v¬xÆòñ‘³Y$Ž‡Ž˜D Ê…•J®Íg+†û²Ð¨·ÒèØ3é�ozŸÝeo2ŽV•Ñïn(·êi0¬#+°]Õèû`|iFeî�åªo<Mq6î*>Tà&§ìÎÀ6Ç‹€"o¸Eæ¶NY’½Žð7vKø{£Óë8‡@–ªÂý*„*?	1GAù 5uç‡_>úÂÐ#ìž«Kü™å9«ð¥Ï`…^B£7Ù¢ï£1žè2â>ÆþÅÐ¬¶ví–9'Å¹Ñz|ÜÛÁõµ¢ï-OÒÌh²ÂvW€U‘ÏËà+òA%Ç&œ´%z«S2#—¤Nsî¾d“?pÕ0ãbÍÈ³ãR¦H£“(—ÏÑAž¤	]r¢¹âjI:â�81GXÚ§-ô±
-‘wÈå^}°h¹4ù¥�—íPÂn¼è8pÌ1êf<ká]RX2[Ï#¼½vrÔª¹ß™,Ùü_mƒ¨Ãh�ôw@]¼‰	JÛO·Ê vQ¼†Ð”˜/g¥ƒç^œ©ÉÁÒWd^¤)Úi!üÞ–JmI;'¿ê ÿüÅ$
Ú•{;š
.5qÉy /öÓw¸qX�ûNö™†ÛE>k�Ëà=øþB©ÿ¸�´–ªuÖ-‰óÓsGŒÈý^4iâ¡ôùÐºY-Û/•�ç¦Bf%Üîõ,e»è	fE]|T½®FöfÌìkÇ´ý4ÙÝÑÏBtóÞ?éÍœ~ØF¯ÁSpQé ÓŸ�ì“(ˆÛT²Øèæ|³=÷k¯z·ö¨Ž_9W²mP_J¼Ó­Øáô &C/MDºJß](CÖÍK†sjE¿…lc\‹ä�@˜17ð}Éé F[OÓaÔ+òÐ»PºZX™ctM¢â„SŒj
-çKìo{p
-7œýÌHU+áYj‹³Ã¬äßMïÙR_.ns˜‚)$
?îG×�=.cœM´'ouk†L@±�yöÒ^T›Ú}�\*Á1¦¯0tšò÷yH±Ò…tg÷ý¤­‹‘4>…ÞbÑl¨u-ú‚g&óm°«A–{¾q §SR×”ï’›OQà¾‘ÃVD3Z¢6àeúPdÑç½"Daê~·7ÆÎj+Š£‰dn½b
Ú!»’‚Hñó\r
À¦üœ�Ë’ÇÍhyÂˆµ¤H\Áìr7~uˆL®€l™˜.Þñû�iéIÙá€ü)
-òÂ|šß¾Ä±“b„À\%�*TƒQ¶¬p�¯©d`}`;<ä�G¯úØÅ',°ÕŒ"ßzš�šˆš„‰ ‰´‰È‰Ü‰ð‰ŠŠ,Š@ŠTŠhŠ|Š�Š¬ŠÀŠÔŠðŠ‹‹,‹@‹T‹h‹|‹�‹¤‹¸‹Ô‹è‹ü‹Œ<ŒPŒdŒxŒŒŒ¨Œ¼ŒÐŒäŒ��(�<�P�d�x�Œ� �´�Ð�ì�ŽŽ(Ž<ŽPŽdŽxŽ”Ž°ŽÌŽàŽôŽ��0�D�X�l�€�”�¨�¼�Ð�ä�ø�� �4�H�d�€�”�¨�Ä�Ø�ì�‘‘(‘<‘P‘d‘x‘”‘°‘Ä‘à‘ü‘’$’8’T’p’Œ’ ’´’Ð’ä’ø’“ “4“H“\“p“Œ“ “´“È“ä“ø“” ”4”`”t”�”¤”¸”Ì”à”ô”••0•D•X•l•€•œ•°•Ä•à•ô•––0–D–X–l–€–”–¨–Ä–Ø–ì–—,—@—T—h—|—˜—¬—À—Ô—ð—˜˜,˜@˜T˜h˜|˜�˜¤˜À˜Ü˜ð˜™™,™@™T™h™„™ ™¼™Ð™ä™ø™š š4šHš\špš„š˜š¬šÀšÔšèšüš›$›8›T›p›„›˜›´›È›Ü›ð›œœ,œ@œTœhœ„œ œ´œÐœìœ��(�D�`�|���¤�À�Ô�è�ü�ž$ž8žLž`ž|ž�ž¤ž¸žÔžèžüžŸ$ŸPŸ�šÿÿÿÿ±š"ÿÿÿÿçš ÿÿÿÿ›5ÿÿÿÿJ›%ÿÿÿÿv›)ÿÿÿÿ¦›(ÿÿÿÿÕ›/ÿÿÿÿœÿÿÿÿ'œ'ÿÿÿÿUœÿÿÿÿ€œ-ÿÿÿÿ®œÿÿÿÿÌœ/ÿÿÿÿ�ÿÿÿÿ,� ÿÿÿÿT�%ÿÿÿÿ‘�ÿÿÿÿÅ�*ÿÿÿÿð�.ÿÿÿÿ ž)1ÿÿÿÿzž%ÿÿÿÿ ž1ÿÿÿÿÒž
-2ÿÿÿÿŸ"ÿÿÿÿBŸ3ÿÿÿÿvŸ3ÿÿÿÿªŸÿÿÿÿÑŸ9ÿÿÿÿ! %ÿÿÿÿT 
-Hÿÿÿÿ¨ 
-/ÿÿÿÿÿ 
-6ÿÿÿÿ?¡
->ÿÿÿÿ‡¡
-0ÿÿÿÿÁ¡
-Fÿÿÿÿ¢
-ÿÿÿÿS¢
-+ÿÿÿÿˆ¢
-ÿÿÿÿ°¢
-"ÿÿÿÿÜ¢@)ÿÿÿÿK£
-/ÿÿÿÿ„£
- ÿÿÿÿ®£-ÿÿÿÿõ£6ÿÿÿÿA¤6ÿÿÿÿŒ¤
-7ÿÿÿÿÍ¤
-?ÿÿÿÿ¥
-ÿÿÿÿ;¥4ÿÿÿÿˆ¥+ÿÿÿÿÀ¥-ÿÿÿÿú¥3ÿÿÿÿ.¦
--ÿÿÿÿe¦(ÿÿÿÿ¡¦
--ÿÿÿÿØ¦ÿÿÿÿ
-§6ÿÿÿÿG§>ÿÿÿÿŒ§#ÿÿÿÿ·§ÿÿÿÿó§ÿÿÿÿ/¨
-2ÿÿÿÿk¨
-.ÿÿÿÿ£¨Fÿÿÿÿê¨
-2ÿÿÿÿ&©
-2ÿÿÿÿb©
-2ÿÿÿÿž©
-2ÿÿÿÿÚ©
-2ÿÿÿÿª
-2ÿÿÿÿRªFÿÿÿÿ™ª
-9ÿÿÿÿÜª
-7ÿÿÿÿ«
-9ÿÿÿÿ`«Fÿÿÿÿ§«Fÿÿÿÿî«	2ÿÿÿÿ)¬+ÿÿÿÿ[¬.ÿÿÿÿ�¬+ÿÿÿÿÂ¬-ÿÿÿÿ÷¬0ÿÿÿÿE­"ÿÿÿÿ„­!ÿÿÿÿ·­
-*ÿÿÿÿí­
-Aÿÿÿÿ8®
-dÿÿÿÿ¦®
-$ÿÿÿÿÔ®1ÿÿÿÿ¯1ÿÿÿÿB¯
-ÿÿÿÿ_¯5ÿÿÿÿ­¯&ÿÿÿÿá¯=ÿÿÿÿ1°&ÿÿÿÿ…°+ÿÿÿÿÄ°ÿÿÿÿø°]ÿÿÿÿe±!5ÿÿÿÿ¼±Kÿÿÿÿ²<"ÿÿÿÿf²$ÿÿÿÿŸ²7
-ÿÿÿÿá²ÿÿÿÿ)³;ÿÿÿÿ‘³?ÿÿÿÿï³ÿÿÿÿ´2ÿÿÿÿR´ÿÿÿÿƒ´ÿÿÿÿµ´=ÿÿÿÿµIÿÿÿÿgµ(ÿÿÿÿ¥µIÿÿÿÿ¶!ÿÿÿÿ>¶!ÿÿÿÿn¶ÿÿÿÿŸ¶+ÿÿÿÿÌ¶=ÿÿÿÿ
-·5ÿÿÿÿ@·@ÿÿÿÿ…·7ÿÿÿÿ½·-ÿÿÿÿë·ÿÿÿÿ¸-ÿÿÿÿE¸
-"	ÿÿÿÿ˜¸?ÿÿÿÿÙ¸=ÿÿÿÿ¹46ÿÿÿÿ†¹Tÿÿÿÿá¹xÿÿÿÿ`ºkÿÿÿÿÒºjÿÿÿÿC»Vÿÿÿÿ »pÿÿÿÿ¼Hÿÿÿÿf¼^ÿÿÿÿË¼Bÿÿÿÿ(½Sÿÿÿÿ|½;ÿÿÿÿ¸½Y%ÿÿÿÿ7¾Gÿÿÿÿ¾6ÿÿÿÿÀ¾+6ÿÿÿÿ#¿6+ÿÿÿÿ„¿]ÿÿÿÿâ¿cÿÿÿÿGÀZQÿÿÿÿòÀjÿÿÿÿ]ÁZÿÿÿÿ¸Á
-eÿÿÿÿ'ÂCÿÿÿÿˆÂiÿÿÿÿòÂiÿÿÿÿ\Ã!ÿÿÿÿ—Ãv*ÿÿÿÿ7Ämÿÿÿÿ¥Ä
-ƒÿÿÿÿ4Å
-BDÿÿÿÿÆÅ
-Uÿÿÿÿ%Æ
-oÿÿÿÿžÆ
-RÿÿÿÿúÆ
-rÿÿÿÿvÇ
-C/ÿÿÿÿòÇ
-9ÿÿÿÿ5È
-:ÿÿÿÿyÈ
-?ÿÿÿÿÂÈ‚aÿÿÿÿ«É
-NÿÿÿÿÊ
-5ÿÿÿÿBÊ6\ÿÿÿÿÔÊ_(ÿÿÿÿ[Ë_ÿÿÿÿÔË
-cÿÿÿÿAÌ
-…ÿÿÿÿÐÌ
-:ÿÿÿÿÍH?ÿÿÿÿ›ÍnÿÿÿÿÎrÿÿÿÿ¥Î†ÿÿÿÿ,Ï
-IÿÿÿÿÏUÿÿÿÿçÏ
-VÿÿÿÿGÐ73ÿÿÿÿ±Ðyÿÿÿÿ1Ñ ÿÿÿÿØÑJÿÿÿÿ+Ò5#ÿÿÿÿŠÒ5#ÿÿÿÿéÒ
-�ÿÿÿÿ€Ó
-KÿÿÿÿÕÓsÿÿÿÿIÔ
-Qÿÿÿÿ¤Ô
-QÿÿÿÿÿÔ
-QÿÿÿÿZÕ
-QÿÿÿÿµÕ
-QÿÿÿÿÖ
-QÿÿÿÿkÖsÿÿÿÿßÖ
-XÿÿÿÿA×
-Vÿÿÿÿ¡×
-XÿÿÿÿØsÿÿÿÿwØsÿÿÿÿëØ	SÿÿÿÿGÙmÿÿÿÿ»Ùqÿÿÿÿ3Úoÿÿÿÿ©Úƒÿÿÿÿ4ÛB\ÿÿÿÿÓÛB<ÿÿÿÿQÜAÿÿÿÿ«Ü	Tÿÿÿÿ
-Ý
-ŠÿÿÿÿžÝ
-¼ÿÿÿÿdÞ
-Pÿÿÿÿ¾Þkÿÿÿÿ4ßkÿÿÿÿ ß
-3ÿÿÿÿÝßBdÿÿÿÿƒàRÿÿÿÿãàpÿÿÿÿoáS1ÿÿÿÿâXÿÿÿÿqâ"EÿÿÿÿØâÕÿÿÿÿÅã0rÿÿÿÿhäŠÿÿÿÿóänÿÿÿÿzå#GÿÿÿÿäåbÿÿÿÿZæX$ÿÿÿÿñæ7~ÿÿÿÿÂç=ƒÿÿÿÿ‚è0ÿÿÿÿ½èZÿÿÿÿ*é4@ÿÿÿÿžé73ÿÿÿÿê~ÿÿÿÿ¡ê4¬ÿÿÿÿ�ë&0ÿÿÿÿ×ëG¬ÿÿÿÿÊì"0ÿÿÿÿí0ÿÿÿÿ^í0ÿÿÿÿ­íNÿÿÿÿýíiÿÿÿÿhî~ÿÿÿÿçî‡ÿÿÿÿsïQÿÿÿÿÅïLÿÿÿÿð ÿÿÿÿAðOÿÿÿÿ¯ð
-0<ÿÿÿÿ=ñ}ÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
+Þ•å0X7ï	€n<–�T–ˆ˜³
³³'³@³A_³?¡³:á³´3´F´$e´
Š´˜´%¸´Þ´à´Aò´&4µ[µtµ�µ¦µ¶µ Õµöµ¶/¶F¶S¶Pf¶·¶*Ï¶;ú¶6·FH·6�·6Æ·:ý·58¸,n¸D›¸Nà¸J/¹)z¹=¤¹:â¹Lº)jºB”ºL×º$»:»DQ»G–»Þ»ý»¼#¼;¼P¼3o¼£¼º¼0Ì¼ý¼
½½+7½+c½+�½#»½ß½÷½¾¾3¾(H¾?q¾>±¾%ð¾&¿(=¿)f¿G�¿Ø¿ï¿À,ÀEÀ`À€À™À´ÀÊÀâÀöÀ
Á,'ÁTÁdÁ}Á•Á¬Á»ÁÑÁæÁÂÂ1,Â^ÂoÂ|Â“Â®Â#ÆÂ+êÂ&Ã5=ÃsÃˆÃ ÃºÃÐÃêÃÄÄ0Ä$EÄjÄƒÄ£Ä»Ä$ÐÄõÄ	ÅÅ<7ÅtÅƒÅ
’Å Å´ÅÉÅ áÅÆÆ-ÆMÆiÆ‰Æ¢Æ»ÆÎÆ*ÞÆ	ÇÇ&-ÇTÇ0hÇ™Ç"­Ç	ÐÇÚÇ#íÇÈ*È;ÈTÈ"mÈ�È"¤È#ÇÈ#ëÈÉ#$É#HÉlÉyÉ—ÉµÉ»ÉÈÉÐÉÕÉòÉ
+ÊÊ Ê!&Ê HÊiÊnÊsÊ‹Ê«ÊËÊÐÊ!ÕÊ÷ÊËËËËË%Ë)Ë".ËQËVËvËŠË&ªËBÑËÌ4Ì9Ì>ÌEÌKÌPÌbÌiÌ�Ì•ÌœÌµÌÉÌÚÌëÌüÌ
ÍÍ6Í	EÍ
OÍ
]Í
+kÍ
+vÍ
+�Í
+ŒÍ
+—Í$¢Í
+ÇÍ#ÒÍ
+öÍÎÎ!+ÎMÎbÎ
+qÎ
|Î	ŠÎ”Î
+¥Î°Î·ÎÏÎéÎûÎ
+Ï!Ï<ÏKÏdÏsÏzÏ(šÏ/ÃÏLóÏ@ÐRÐ+aÐ�ÐA©ÐëÐÑÑ9Ñ8NÑ‡ÑŸÑ´Ñ&ÎÑõÑÒ2/Ò?bÒ&¢ÒÉÒ(èÒÓ"$ÓGÓ*gÓ6’Ó{ÉÓrEÔx¸Ô1ÕGÕ7ÇÕ:ÿÕ:Ö?LÖ@ŒÖ5ÍÖF×MJ×4˜×4Í×=Ø7@Ø4xØ1­ØUßØU5Ùb‹ÙîÙÚ&,ÚSÚ&mÚœ”Ú,1Û1^Û'�Û$¸Û/ÝÛ-
Ü+;Ü0gÜ&˜Ü2¿Ü8òÜ*+ÝVÝ=vÝ9´Ý:îÝ6)Þ6`Þ$—Þ¼Þ/ÜÞß5!ß+Wß$ƒß¨ß6Çß"þß&!à6Hà=à:½à:øàD3á8xá9±áCëá:/â7jâ8¢â@ÛâGã9dã,žã0Ëã#üã ä=;ä-yä6§äÞä7úä32å;få:¢å(Ýå"æ3)æ%]æ.ƒæ²æ0Òæ1ç'5ç]çE{ç8Áç(úçc#è4‡è&¼è2ãè&ék=é*©é*Ôé4ÿé]4ê8’êAËê?
ëGMë•ëO´ëbì,gì+”ì)ÀìYêì0Dí=uí3³í2çíBîL]îªî4Èî)ýî$'ï3Lï9€ï6ºï/ñïD!ð&fðW�ðUåð8;ñ%tñ(šñ&Ãñ,êñ#ò>;òBzòB½òó' óEHó9Žó4Èó3ýóJ1ô(|ô;¥ôáô0õD1õ/võ:¦õ@áõ@"öGcö?«ö2ëö8÷SW÷'«÷.Ó÷,ø'/ø6Wø ŽøY¯ø/	ù49ù5nùN¤ùªóùIžú9èú3"û¾Vû<ü<RüF�üPÖüo'ý>—ýFÖý`þ~~þFýþ‚Dÿ[Çÿ3#@WM˜mæ7T#Œ°(Æ&ïIW`+¸5ä/8C"|$Ÿ'Ä9ìC&!j!Œ*®/Ù1	/;/k0›*Ì0÷<(ie=ÏB
=P-Ž&¼"ã.85:nF©?ðV0	B‡	(Ê	>ó	;2
+=n
+4¬
+#á
+@LFI“8Ý+8B2{9®:è3#
,W
u„
 ú
..J$y'ž0ÆB÷/:,j'—%¿,åC,Jp@»Jü*G%r%˜<¾1û -(Nlw<ä<!+^Š,¦HÓ6ASA•J×>"JaJ¬<÷<4.q( lÉv6A­6ï&4D0y+ªAÖ3@L!�#¯.ÓBFE4Œ%Á:ç2"3U*‰9´CîC2:vT±J5Q4‡6¼Pó/D/t&¤&Ë5ò'(0P5�(·3à% &: a '� =© #ç +!37!(k!@”!CÕ!5"'O" w",˜"gÅ"4-#mb#AÐ#@$HS$Gœ$Kä$I0%Lz%HÇ%C&YT&5®&0ä&4'MJ'N˜'1ç')()C(/m()�(+Ç(7ó(3+)6_)9–)XÐ)[)*C…*6É*>+=?+*}+.¨+2×+[
+,&f,-�,,»,è,-/-$N-0s-'¤-8Ì-".H(.Aq.)³.=Ý.#/@?/2€/+³/#ß/50<90'v0%ž0(Ä0Rí0?@1F€1Ç13â112DH2H�2DÖ2K3ag3[É3s%4g™4g5Bi5‚¬5T/6=„6!Â6-ä6b7bu7gØ7g@80¨8(Ù849579Om9)½93ç9-:/I:Hy:FÂ:7	;GA;+‰;$µ;2Ú;.
</<<+l<)˜<-Â</ð<^ =K=FË=>".>Q>5l>"¢>(Å>$î>E?DY?Dž?Fã?_*@^Š@"é@*A+7A'cA;‹A8ÇA'B'(B3PB>„B-ÃB,ñBCI=C‡C¤C.ÂC/ñC!D$AD3fDšDF¸D&ÿD!&E6HE5E)µEßEùE(FAF+[F ‡F$¨F#ÍF.ñF. G(OG%xG2žG3ÑG)H\/HDŒHHÑHDIL_IX¬IHJ)NJ*xJ £J5ÄJ9úJ@4K+uK6¡K\ØKA5L.wLM¦L3ôL=(MHfM<¯M8ìM3%N4YN4ŽN0ÃN@ôN15OBgOLªOA÷OL9P8†P+¿P2ëP<Q3[QX�QPèQ.9R`hR&ÉRPðR\ASXžSp÷SAhT#ªTEÎT+UK@U.ŒU<»U,øUX%V,~V«V"ÃV%æVW3,W2`W“W4³W?èW@(XWiX=ÁX*ÿX5*Y%`YB†Y%ÉY4ïY>$Z<cZC ZBäZ;'[3c[)—[$Á[!æ['\80\i\‰\›\ª\!¿\á\)÷\,!]-N]$|]¡]1´]_æ]/F^+v^V¢^Iù^IC_<�_/Ê_;ú_6`I`]`/o`Ÿ`'¹`7á`a
-a.;aja
va„a%•a\»a;bTbfb|bbœb©b	ÂbÌbÞbïb,üb)c=cSc"oc’c(¯c/Øc/d18d8jd#£d'Çd2ïd3"eVe;fe¢e©e±eÆeÖeÝeåeùef#f5fHf_fvfˆf¦f	ÅfÏfíf	g"g/gAg)]g/‡g"·gÚgñgúgh
+hh/hAh'Sh{h ˜h#¹hÝh÷h 	i*iHHi1‘i#Ãi,çiBjXWja°j:k.Mk7|k1´k;æk("l:Kl,†l-³l'ál"	m-,mZm2ym¬m¼mÑmæmým!n$5n,Zn(‡n-°nIÞn(o5Eo{o
+�oC›oIßo)p;pCpKp
ipwp>‰p?ÈpAqJq/fq+–q8Âqûq$r!6r1XrŠr©r+Èrôrs!s
+.s9sBXs›s%­sÓsås.t-2tG`t3¨tÜt"ûtu;uLu]uou$ˆu­u!Êuìu5þu4v	FvPvbvxv˜v²vÎvÝvïvXöv	OwYw^wjwyw�w¬wÂwÔwôw
x-xAxSxkx-‰x·xÉxÛxïx	y'yFyUygyyy€y!‡y©y:Åy%z%&zLzAez;§zCãz'{#A{,e{=’{CÐ{=|"R|7u|<­|<ê|)'}5Q}‡}�}v«}*"~M~'_~‡~™~ ~§~
+¶~(Á~ê~'ü~$AYq#‰­,Å.ò,!€.N€}€"š€,½€.ê€!�1;�0m�2ž�,Ñ�.þ�#-‚Q‚q‚(…‚/®‚!Þ‚ƒ(ƒ#Fƒ+jƒ–ƒ,¯ƒ Üƒýƒ„6„J„j„#‰„-­„"Û„þ„…#…/…D…&V…	}…F‡…/Î…Eþ…D†-U†Jƒ†MÎ†‡<‡S‡f‡-ƒ‡±‡*º‡å‡ˆˆˆA+ˆ>mˆ¬ˆA¾ˆ7‰B8‰!{‰�‰˜½‰VŠrŠ„Š–Š:«Š#æŠ2
+‹.=‹#l‹9�‹Ê‹×‹ä‹ô‹ü‹:Œ+PŒ#|Œ Œ³ŒÌŒäŒ,üŒ:)�d�	|�d†�ë�6þ�;5Ž;qŽ<­ŽgêŽbR�<µ�1ò�($�$M�r�/ˆ�+¸�ä�‘‘7‘6S‘>Š‘<É‘’4"’'W’$’6¤’Û’ì’““,“D“\“n“€“’“¤“¾“Ù“ë“ü“”23”f”'€”L¨”4õ”7*•0b•'“•»•Û•ð•––-+–+Y–+…–*±–	Ü–	æ–
+ð–
+û–	———)—>—Y—h—}—Œ—1‘—Ã—/ã—˜2˜ C˜'d˜'Œ˜"´˜&×˜0þ˜/™M™b™k™9‰™-Ã™ñ™,ša3š9•š)ÏšCùšI=›E‡›YÍ›Y'œ;�œ;½œMùœ/G�5w�:­�5è�4ž9Sž7�ž9ÅžDÿžGDŸDŒŸEÑŸC -[ 0‰ 4º >ï ;.¡8j¡*£¡6Î¡/¢;5¢3q¢%¥¢1Ë¢!ý¢V£9v£\°£A
¤1O¤?�¤:Á¤7ü¤>4¥$s¥E˜¥IÞ¥(¦ZE¦/ ¦OÐ¦P §3q§ ¥§?Æ§:¨&A¨
+h¨	s¨}¨0Š¨%»¨"á¨%©0*©![©}©–©±©Æ©Ó©Sâ©O6ª†ª,¥ª7Òª
+«
««1)«[«o«‚«•«C²«Oö«,F¬6s¬ª¬$Ê¬_ï¬"O­(r­A›­Ý­,û­2(®H[®¤®´®"Å®
+è®>ó®$2¯W¯j¯Š¯¼ ¯¹]°±/)±Y±t±’±*²±LÝ±2*²-]²)‹²"µ²Ø²ë²³³2$³W³0_³�³%«³Ñ³9Þ³´<*´=g´3¥´5Ù´2µ7BµBzµL½µ
+¶¶5¶=¶E¶a¶Hh¶±¶4´¶&é¶··
+0·;·2W·-Š·O¸·¸'¸",¸*O¸%z¸  ¸Á¸ß¸ç¸C¹¤J¹ï¹ü¹ ºL7º„º�º¡º¶ºÌºâºùº»'»9»E»R»f»*n»N™»[è»D¼AH¼Š¼©¼Á¼Þ¼6ö¼-½ M½8n½+§½Ó½å½õ½ý½'¾':¾b¾z¾Ž¾¢¾¶¾É¾
Ü¾ê¾L¿ Q¿r¿D‘¿PÖ¿'À9À2TÀ$‡À¬ÀÌÀ5ßÀÁ!0ÁRÁYÁ2aÁF”ÁJÛÁ/&ÂFVÂ�Â"¯ÂÒÂâÂMñÂ9?Ã;yÃ7µÃíÃÄ"Ä1Ä,DÄ$qÄJ–Ä)áÄ(Å%4Å(ZÅƒÅ
+ŸÅ,ªÅ×Å)ñÅÆ9ÆSÆkÆsÆ‹Æ/£Æ)ÓÆýÆ
Ç#!ÇEÇ']Ç…Ç–Ç¬ÇÆÇãÇýÇ#	È%-ÈSÈpÈ‡È™È7°ÈèÈÉ%ÉCÉ]ÉrÉ„É—É«É¿ÉÕÉJëÉJ6ÊJ�ÊIÌÊ:ËQË-pË;žË+ÚË@Ì<GÌ4„Ì6¹Ì-ðÌ8Í5WÍ5�Í8ÃÍUüÍ.RÎ>�ÎIÀÎh
+ÏysÏ>íÏN,ÐI{ÐdÅÐ0*Ñ;[Ñ8—ÑFÐÑ5Ò&MÒ.tÒ-£Ò.ÑÒ0Ó<1Ó!nÓ�Ó!©Ó)ËÓEõÓZ;Ô`–ÔG÷ÔZ?ÕUšÕ.ðÕ,ÖhLÖjµÖE ×0f×6—×kÎ×E:Ø€Ø&žØQÅØSÙEkÙ#±Ù<ÕÙ<ÚeOÚQµÚ2Û/:Û/jÛ4šÛ=ÏÛ9
Ü0GÜ7xÜ%°Ü'ÖÜ=þÜ6<Ý@sÝ´Ý2ÔÝÞ,Þ
8Þ
FÞ
TÞbÞ)qÞ)›ÞÅÞÚÞéÞîÞóÞøÞÿÞß
ßß=ß9Xß
’á  á>ÁáDâ’Eâ€ØâuYã0Ïã7ä58äZnäÉä:Ùä<åQåSå`gå.Èå÷å%æ+<æhæ$zæ&Ÿæ%Ææ3ìæ# ç
Dç(Rç˜{ç8èvMèGÄè(é5éGµé]ýéH[êD¤êSéêz=ëŒ¸ë~EìTÄì„ípžíŠîLšîtçîˆ\ïåï$ðz'ð˜¢ðT;ñ�ñ®ñ5Âñøñ)ò>9ò&xòŸòMºòóó!*óDLóD‘óDÖó-ô$Iônô%wô4�ô!Òô@ôôF5õE|õ<ÂõCÿõBCöI†öZÐö%+÷Q÷q÷*Ž÷7¹÷(ñ÷ø,:ø!gø%‰ø'¯ø ×ø øø8ùRù-bù!�ù+²ùÞùñùú/úNújúH†úÏúåú$òú*û*BûEmûJ³ûCþûSBü–ü+µü&áüý)&ýPýký„ýœý@¸ýùý6þPþhþ7ƒþ»þÖþ"õþ<ÿUÿdÿ
sÿ�ÿžÿ+½ÿBéÿ#,P/l)œ*Æñ#4T9k¥·6É<Q?e¥¶#Éí(5;^š-®#Ü#$#C#g‹,Ÿ.Ìû!1&@X
+™¤©:¯Hê38,=(j.“ÂÇPÌ:AGLQW[B`£(¨Ñ&ìMla(Î÷ü				,	)3	1]	�	6–	1Í	ÿ	
++
+A
+W
+&m
+”
+	°
+
º
+
È
+
+Ö
+
+á
+
+ì
+
+÷
+
+a

+o~z
+ù5NL.›Êéû
"
A
U
.\
2‹
¾
Ð
Aí
3/cA�
ÃÑAØOXj…ÃI[So#ÃAç/)(Y"‚¥8Ã&ü+#.OU~RÔ'JBH�YÖV09‡Á-Ø:,AsnÜâÁ¿¼�'>ýfXdc½!…<]Â_ �€ˆO‹OÛ„+[°xd…ê§j” § EÇ N
!-\!DŠ!XÏ!I(#Hr#>»#<ú#V7$DŽ$BÓ$Y%>p%O¯%Qÿ%WQ&;©&�å&}g'jå'[P(W¬(4)'9)ea)!Ç)ré)`\*=½*Kû*lG+@´+Eõ+M;,T‰,OÞ,Q.-_€-Nà-P/.^€.Pß.N0/N/ŽÎ/¯]0—
1„¥14*2*_2EŠ2dÐ2W53g�3>õ3w44^¬4m5oy5Né5>86Tw6JÌ6G7A_7•¡7M78=…8AÃ8š9y 9N:»i:_%;G…;KÍ;L<êf<GQ=G™=]á=á?>i!?f‹?jò?]@!Ý@®ÿ@³®ARbBZµB>C´OCUDxZDSÓDQ'EuyEwïE3gFs›F[GMkGp¹G[*HI†HFÐHrI?ŠI»ÊI‹†JYK>lKD«K2ðK7#L'[LyƒL~ýLz|M3÷MZ+N{†NkOhnOw×OÜOPš,QƒÇQNKRUšRœðRY�SgçS}OT…ÍTœSU�ðUX�VnÚVŸIWSéWR=X^�XPïXs@Y@´YœõYQ’ZgäZnL[”»[GP\’˜]{+^a§^o	_my`mç`fUa›¼aàXb[9ci•c«ÿcç«d}“eÝf§ïfP—gbèg‚KhÅÎhN”iYãi$=jGbjGªj_òj|RkSÏkS#l2wl)ªleÔlH:m?ƒmHÃmlnryn;ìn;(oEdoVªoCpTEpfšpVqQXqVªqIr�KruÜr]Rsu°sP&t8wtO°tfungudÖu‡;vxÃv¡<wpÞwFOxj–x^yŒ`y^íy;Lzxˆzm{”o{M|NR|\¡|Oþ|lN}m»}c)~i�~÷~Fú\A€\ž€Dû€G@�zˆ�q‚Eu‚Y»‚cƒUyƒLÏƒC„x`„ŒÙ„uf…ŠÜ…lg†QÔ†^&‡€…‡hˆKoˆ_»ˆá‰�ý‰�ŽŠW‹'w‹OŸ‹‘ï‹b�ŒœäŒœ��®Ž}ÍŽŸK�¯ë�q›�q
‘w‘?÷‘Â7’Ìú’‚Ç“nJ”:¹”€ô”Zu•HÐ•{–p•–]—4d—P™—uê—`˜¦à˜Z‡™Aâ™t$š_™š\ùšOV›�¦›£(œ£Ìœ‘p�§ž¨ªžWSŸV«Ÿh ›k f¡Vn¡cÅ¡Z)¢a„¢@æ¢V'£m~£Kì£Q8¤?Š¤NÊ¤;¥_U¥cµ¥@¦]Z¦u¸¦;.§j§‚ê§Wm¨EÅ¨B©MN©çœ©o„ª˜ôªq�«oÿ«{o¬zë¬~f­oå­‘U®uç®…]¯¶ã¯iš°\±Ua±«·±«c²n³N~³KÍ³W´Rq´ZÄ´dµO„µ�ÔµUe¶Í»¶Ì‰·˜V¸©ï¸q™¹Rº{^ºfÚºUA»Å—»C]¼[¡¼Zý¼DX½&�½EÄ½N
+¾lY¾SÆ¾z¿I•¿~ß¿l^À=ËÀ£	ÁB­ÁmðÁf^ÂCÅÂ]	ÃmgÃ€ÕÃQVÄ9¨ÄEâÄz(Åp£Å„ÆA™ÆjÛÆZFÇz¡ÇyÈi–È�É¸ŽÉ¬GÊåôÊ¹ÚË¹”ÌqNÍùÀÍªºÎeÏ=åÏk#Ð¯�Ð¹?Ñ¶ùÑ¾°ÒZoÓFÊÓgÔcyÔlÝÔJJÕX•ÕTîÕDCÖtˆÖpýÖZn×�É×]KØ:©ØaäØrFÙQ¹ÙJÚMVÚ\¤ÚrÛ³tÛq(ÜWšÜ4òÜ;'Ý3cÝm—Ý4ÞU:Þ8�ÞnÉÞm8ßm¦ßoàˆ„à‡
á=•áHÓáKâIhât²â~'ãG¦ãLîãZ;ä|–äSå[gå;Ãå˜ÿå5˜æ?ÎæYçZhç<Ãç>èT?è,”èfÁèJ(é;séV¯é_êRfê@¹ê?úêK:ë6†ëF½ëCìGHìF�ìc×ìa;íO�íIííZ7î[’îBîî¸1ï›êï˜†ðœñ´¼ñ¶qò˜(óGÁóB	ô=LôhŠôoóôqcõbÕõi8ö¬¢ö~O÷_Î÷¡.ø^Ðø}/ùž­ù‹Lú}Øú}VûkÔûŽ@ü}Ïü”MýWâýn:þy©þn#ÿƒ’ÿRrizÜmW}Å¾C¥^¨ÊiÒª<œç˜„Ô|òGoŒ·bD	o§	_
+ew
+`Ý
+‚>RÁN/Q~8ÐJ	
IT
9ž
SØ
Q,\~™ÛuuTëp@R±}[‚RÞŠ1v¼“3›Ç~cKâV.P…<Ö?LSB ã W?%—I½PAXPšëa
+ªleJ}�ÈrXrËU>Y”yî&h�%¯gÕ1=PotÀ,5bDz¿Úñ%
+ ¼0 ’í $€!7¥!Ý!7à!">5"t"‹"ª"Æ",à"
#)&#5P#A†#7È#H$XI$[¢$^þ$k]%MÉ%Q&\i&nÆ&5'N'Î'á'(ô'(6(I(\(x(•(²(Ì(@ç(@()3i)4�);Ò)*5%*.[*Š*I¡*ë*Ný*DL+J‘+?Ü+8,U,"f,‰,:�,È,Ú,ì,Dþ,6C-?z-Eº-..3/.@c.8¤.iÝ.jG/8²/[ë/vG0À¾0£1x#2jœ2€3nˆ3•÷3L�4{Ú4dV5W»5M6Da6R¦6Hù6QB7”74²70ç748M8/m85�89Ó80
9:>9ˆy9,:L/:#|:  :lÁ:›.;Ê;Ü;ä;'ì; <5<\G<]¤<�=B�=pÓ=XD>Y�>6÷>c.?^’?|ñ?Yn@]È@z&AU¡A÷AB
+*BK5B~�BC5CHC4ZCg�CR÷CƒJDhÎD;7E1sE@¥EæEÿEF7*F)bF8ŒF6ÅFüFWGfG xG™G'«GEÓG"H=<H zH›H­H“´HHITIkI{I"—I2ºIíI
J@'J#hJ;ŒJÈJæJ"K4%K[ZK,¶KãKùK,L:DL\LÜL÷L	MM"ME)M%oME•M0ÛM1NC>Nx‚NyûNšuO8PTIP8žPz×P€RQXÓQW,RZ„RißRiISL³SbTcT'‚TÙªTE„UÊU=ÜUV,V3V:V!QVbsVÖVCèV-,W#ZW)~W"¨W4ËW3X[4XO�X[àXO<Y?ŒYBÌY[ZOkZI»Zb[oh[cØ[[<\O˜\Bè\B+]"n]M‘]Pß]30^5d^Rš^Fí^V4_4‹_IÀ_7
+`>B`H�`$Ê`Cï`93aJmaV¸aBbRb'db9Œb1Æb%øbTc
+sca~cbàc‹CdÏd?îdŽ.e�½e3Mf)�f1«fDÝfA"gdgQmgI¿g,	h6hKhrdhe×h=ixOiXÈi~!jQ jCòj6k+Ol{l–l ±lpÒlECme‰mTïmNDnO“nãnôno
+o?(onhoS×oW+p#ƒp(§pÐp#èpfqksq2ßq)r¤<r!árVsiZsiÄsK.tÉztžDugãuJKvA–v)ØvwT wkuwbáwIDxNŽx>Ýx�y›ªy•FzFÜz’#{¶{D6|k{|+ç|>}1R}+„}>°}8ï},(~,U~,‚~,¯~@Ü~:,X+…8±KêF6€/}€M­€Žû€aŠ�_ì�UL‚M¢‚?ð‚<0ƒ)mƒ—ƒ/µƒeåƒcK„c¯„K…
+_…
+j…u…�…
+›…¦…³…%Æ…4ì…!†0†E†T†8]†=–†WÔ†.,‡[‡4x‡F­‡bô‡[WˆC³ˆX÷ˆ&P‰w‰Ž‰1—‰UÉ‰KŠ kŠ^ŒŠëëŠw×‹?OŒ€�Œ‚�¡“�ï5ŽÌ%�„ò�€w�Ôø�uÍ‘dC’}¨’‚&“c©“Œ
”fš”Œ•ŒŽ• –”¼–�Q—œï—cŒ˜Xð˜\I™u¦™�škžšp
+›f{›_â›eBœ_¨œE�ON�Mž�Ÿì�kŒžÙøžgÒŸi: `¤ k¡hq¡nÚ¡YI¢“£¢~7£>¶£¡õ£B—¤†Ú¤€a¥Xâ¥@;¦`|¦[Ý¦J9§„§
+›§¦§Z¹§F¨O[¨H«¨oô¨Dd©0©©/Ú©3
+ª&>ªeª“{ª¶«WÆ«g¬{†¬­­ ­K=­‰­�­°­@Ã­u®�z®b¯|{¯>ø¯H7°·€°T8±[�±€é±Fj²i±²^³‚z³!ý³"´7B´z´zŽ´E	µOµCmµ6±µHèµK1·!}¸RŸ¸:ò¸4-¹Pb¹]³¹�ºO¢ºNòºeA»[§»¼¼)2¼!\¼º~¼9½iH½N²½e¾g¾dz¾ß¾mÿ¾{m¿hé¿ŽRÀpáÀhRÁs»Á‚/Â#²Â5ÖÂÃÃ1ÃNÃ“[ÃïÃWöÃFNÄ•Ä2©ÄÜÄ#ôÄuÅiŽÅ¨øÅG¡ÆéÆ>Çf@ÇX§ÇDÈFEÈŒÈ1¡ÈjÓÈ$>ÉcÊ8}ÊU¶ÊÈËÕË'éË(Ì):Ì)dÌ*ŽÌ%¹Ì!ßÌ"Í$Í1ÍDÍZÍPbÍ“³ÍÁGÎ	ÏmÏM~Ï2ÌÏ,ÿÏ;,ÐhhÐTÑÐW&Ñm~ÑZìÑ&GÒ)nÒ˜Ò Ò=½Ò=ûÒ39ÓmÓƒÓ—Ó«Ó¾ÓÑÓ1éÓvÔ,’Ô;¿ÔŒûÔnˆÕ"÷Õ7Ö^RÖ9±ÖFëÖ(2×`[×=¼×Xú×SØ
`Ø`nØaÏØz1Ùq¬ÙoÚ.ŽÚ?½ÚýÚ
Û€Ûa�Û}ÿÛ�}Ü;ÿÜ7;Ý0sÝ¤Ý\¾ÝEÞ„aÞjæÞSQß?¥ß`åß2FàyàQ”à2æàTá=ná1¬á6Þáâ+*â-Vâf„âCëâ3/ã#cãY‡ã5áãMä0eä5–ä9Ìä8å2?årå3‹åQ¿å=æ+Oæ7{æ7³æ�ëæ>|ç?»ç7ûç%3èYèxè”è±èÏèíè
é¦-é—Ôé“lê“ë€”ë)ìK?ì\‹ìWèìm@í™®í\Hîq¥îdïo|ï`ìïbMð‚°ðÑ3ñmòŒsò¦óñ§ó™ôŒ¶õ«Cö¦ïöß–÷evønÜøfKù�²ù©CúYíúhGû^°û_üaoühÑüP:ýB‹ýTÎýP#þ�tþ˜ÿ�žÿy<æ¶Ü�hzfã°JÌûuÈz>o¹É)�óQ„aÖž8É×š¡	S<
+u�
+uÐ|ÚMh(
d‘
Xö
~O}Î^Ld«q`‚`ã¨D‡í¼uD2YwÑJÖ!5IX1m1ŸÑì%,q2“°U‹ÆšÍô‘�}&%ü@ Î›#Š×Ã¾’AÊWX†¯ä`NË:Þ@¹ÿŽ](IñÉÎâ`†ØãÕÊÀ…L�/¥£÷”Žf~¶oÅ–îe9ÂT®qmYÁ‡”–I[FZ½'ÝÚûÚÁêjcdËÁnA·äì®þ‘Ý?¸M7@FÇã7sãuÌÚ,ývÒH¶Î–ÆªÕSÂÜ}+O.u}f©ßÌ^òv3x²Ù~™ð¾X«²¼ðÒ»
¶Sá&)tV^ŒîÞ—È€d-<ªz¼,m“U¸—«¦ÅÓà�H{C=¬ÈRÑøƒdà[¸Û§¾·t÷hÓÇµ*žiòb�þL‡QUôlÔ¬›²öv>€«G@úöoMW'¹‡Šê#+*•1ÉE\°UÅhJÇ3Ï&«;gEÕE M7Ûõ{yc/Q.ÜÄ ©sÀaFkíÖG]´¦²£q�)÷£øáƒêûŠÓpZwö€ A¤#Rv—ßuKiˆ‘PNk¯jh¤·òç"GŒßå>ÍP±»úæ’YÈ]�zµWnt‚¬_6ë0yPq)¿N<´9¡ç¿ÿ\Ò“Ïii8®%©�Í‹W³]³<‰À_KƒÔ¤�­öw©ËEš*¾<x¨:.¬R4µsäš¶»‘!¨§ïObŽÃä\¨‹Â—S‹Ý™‘Ü¼J{RÑ¤ZÔDý
x÷™£{êýˆârŠ{?!C‚2ãIqW¶I¦’X|x¸g)˜›-ó•ï2™Ït³P@Â3ðªùˆ°O½ØqjU$èr¿:®žÁKk1ñ5§¤þ˜œV–ahiáâ%„U‘(„4I>~ò6K0ÅFcÔ	Ÿ®¥1v­ô¸Ñ)Èó0§5/ëp‰}ÿâ¡óDí„ÂëÏJ_ÖBø'EìÑÏ•Š„×F‰ï¸­	 “�(˜²r£õVåÌÛ„ôdåd$¡Q³¨õÀÙD�#\J.Ž~òT6‰±Ô«à+õÖ1u˜—ãM=%þ;–»pÑ•6Ò‚°Q‰B
+”¼–ŒÝg2Þl�QúÃ‹ù¡Q
ðiÈ,ÐÒCèÃqƒ³â'¹
+iã
8ª;"\¢§žìu¹�=¬C×ÝšHVúÐo…º±jØÜÆõ¯�ÏRÚ�ÐA›É¢ET�ù”mçoå+¾>Žwž"!r¾µŒw	03Xaf\”OÈœlRÎ6¼‰•ð€SØh�pæÃæßNÍƒàµ€Œ°²Å^Ãýá BéA|FÖYnÍSOK‹H´œ/KXõ´_MLe.â¯&YëÁ{+|é“áý±Œ]v9¤r�<çƒaŽÞ–×ÓÄÞGþÐf
¦:<|·.¦'XÄzažÝ%„m%M^$è
+s�køÊ?Úìá‹ÆÅÙÓ*5’ïºÜóËƒ‡îÓZxåµb¿n·­ÿ»-Ìr:¹>¶‚=ØwÉAûàÅZ8èµ?¢ª2I—a÷/�ÞÄVJL[17^èŒÍ­³€=4Õj¹«:†;j°º
+¤WÙ[!…™`»—_º‚y  Š¯(¥À÷Ç†´äfSwtÌbÊ³Æ}HäÁœ¯ñCsñ/ˆïyÌ{éËŸÙçß`½ü›l�­¹*1"+gŠæËnÎü(g‡zpyuÄ6k7±·f,lDa&åT"Ê·
+×;>ë_Mó8¦[®C¢ùJêñ5`ë…zfº 	$£ÙÉí'x=]7$›­†¢’8ÜNoGñg 9[Ñ�-›žîè3eŸØéqeã†	“œ™¨D˜�Î |×�ümÍQoøV½b=½¼¨ûÆzž [àîâ&8NÛHäsY�”¥OPê¿Ðš‡_;<4Ñ?d¨cÉ�å9í±GÂà�?$l$
+eXkb‰£?P€J~ÕI�!¼Ž T0á…&æ(B*Ü±¶Ì5ÚZönŸ¿
#4cOF¥òóÄ©¿˜šœ©ÖBSþ9+ºK|	¥�esÒÀüûôb‡PŸ™½`§.†A	LBHÃÝd}ì�-…é„ìœ�ˆ;²~¾RÕÊ-ª°4´CÈÕˆ’ŸùÿÐøL^m)DuzÖEl½¡¦0#§76wØüG«,ßÐeUÛÄp"cD9Ç2x® öÏïYkLth�2VÞo'»]#¡‚�¥T¬í-*ú0ÆYð2},Ê¢ÖyÛ�ô@¯ûÔy1@Np“Tt^"(©”í3ÇÔÀ×î%5cˆ!!ºÇhv…ß|4
+/’~mÛËn¸ýj:�r•)ÂÉªÿ˜´Òé3ù,ÎúçÚ�æ`>š‘‚8WÁ
¡Z¬•ÓÙg5¢\ŸB¤«²¼šØšìš››(›<›P›d›x›Œ› ›´›È›Ü›ð›œœ,œ@œ\œpœ„œ˜œ¬œÀœÔœèœüœ�,�@�T�p�”�°�Ä�Ø�ì�žž0žDžXžtžˆžœž°žÄžØžìžŸŸ(ŸDŸ`ŸtŸˆŸ¬ŸÀŸÔŸèŸüŸ $ @ \ x Œ   ´ È Ü ð ¡¡,¡@¡T¡h¡|¡�¡¤¡¸¡Ì¡à¡ô¡¢,¢@¢T¢p¢„¢˜¢¬¢À¢Ô¢è¢ü¢£$£@£\£p£Œ£¨£Ä£Ø£ì£¤¤8¤T¤h¤|¤˜¤¬¤À¤Ô¤è¤ü¤¥$¥8¥T¥h¥|¥˜¥¬¥È¥Ü¥ð¥¦¦,¦@¦T¦h¦|¦¨¦Ä¦à¦ü¦§$§8§L§`§t§ˆ§œ§°§Ä§Ø§ì§¨¨(¨<¨P¨d¨€¨”¨¨¨¼¨Ð¨ä¨ø¨© ©4©P©d©x©”©¸©Ô©è©ü©ª$ª@ªTªhª|ª˜ª¬ªÀªÔªèªüª«$«8«L«h«„«˜«¬«Ð«ä«ø«¬ ¬4¬H¬d¬€¬œ¬°¬Ä¬Ø¬ì¬­­(­<­P­d­x­Œ­ ­´­È­Ü­ð­®®4®P®d®x®”®¨®¼®Ð®ä®ø®¯ ¯4¯H¯d¯€¯”¯°¯Ì¯è¯ü¯°,°@°\°x°Œ° °¼°Ð°ä°ø°± ±4±H±\±x±Œ± ±¼±Ð±ì±²²(²<²P²d²x²Œ² ²Ì²è²¹ÿÿÿÿÛ"ÿÿÿÿ ÿÿÿÿK ÿÿÿÿ…ÿÿÿÿ» ÿÿÿÿâ5ÿÿÿÿ%ÿÿÿÿJ)ÿÿÿÿz(ÿÿÿÿ©/ÿÿÿÿßÿÿÿÿû'ÿÿÿÿ)ÿÿÿÿa-ÿÿÿÿ�ÿÿÿÿ¬7ÿÿÿÿåÿÿÿÿ ÿÿÿÿ8%ÿÿÿÿuÿÿÿÿ©*ÿÿÿÿÔ.ÿÿÿÿ)1ÿÿÿÿ^%ÿÿÿÿ„9ÿÿÿÿ¾
+2ÿÿÿÿú"ÿÿÿÿ.3ÿÿÿÿbÿÿÿÿ‰9ÿÿÿÿÙ%ÿÿÿÿ
+Hÿÿÿÿ`
+/ÿÿÿÿ·)ÿÿÿÿø
+6ÿÿÿÿ8
+>ÿÿÿÿ€
+0ÿÿÿÿº
+Fÿÿÿÿ
+
+ÿÿÿÿL
++ÿÿÿÿ�
+ÿÿÿÿ©
+"ÿÿÿÿÕ@)ÿÿÿÿD
+/ÿÿÿÿ}
+ ÿÿÿÿ§-ÿÿÿÿî6ÿÿÿÿ: 6ÿÿÿÿ… 
+7ÿÿÿÿÆ 
+?ÿÿÿÿ!
+ÿÿÿÿ4!4ÿÿÿÿ�!+ÿÿÿÿ¹!-ÿÿÿÿó!3ÿÿÿÿ'"0ÿÿÿÿn" 0ÿÿÿÿî"
+-ÿÿÿÿ%#(ÿÿÿÿa#
+-ÿÿÿÿ˜#ÿÿÿÿÊ#6ÿÿÿÿ$>ÿÿÿÿL$#ÿÿÿÿw$ÿÿÿÿ³$ÿÿÿÿï$
+2ÿÿÿÿ+%
+.ÿÿÿÿc%Fÿÿÿÿª%
+2ÿÿÿÿæ%
+2ÿÿÿÿ"&
+2ÿÿÿÿ^&
+2ÿÿÿÿš&
+2ÿÿÿÿÖ&
+2ÿÿÿÿ'FÿÿÿÿY'
+9ÿÿÿÿœ'
+7ÿÿÿÿÝ'
+9ÿÿÿÿ (Fÿÿÿÿg(Fÿÿÿÿ®(	2ÿÿÿÿé(+ÿÿÿÿ).ÿÿÿÿP)+ÿÿÿÿ‚)-ÿÿÿÿ·)0ÿÿÿÿ*"ÿÿÿÿD*!ÿÿÿÿw*
+*ÿÿÿÿ­*
+Aÿÿÿÿø*
+dÿÿÿÿf+
+$ÿÿÿÿ”+1ÿÿÿÿÐ+1ÿÿÿÿ,
+ÿÿÿÿ,5ÿÿÿÿm,&ÿÿÿÿ¡,=ÿÿÿÿñ,&ÿÿÿÿE-+ÿÿÿÿ„-ÿÿÿÿ¸-]ÿÿÿÿ%.!5ÿÿÿÿ|.
+ÿÿÿÿ·.Kÿÿÿÿ/<"ÿÿÿÿa/
+ÿÿÿÿ‹/$ÿÿÿÿÄ/ÿÿÿÿ0;ÿÿÿÿt0?ÿÿÿÿÒ0ÿÿÿÿû02ÿÿÿÿ51ÿÿÿÿf1ÿÿÿÿ˜1=ÿÿÿÿç1IÿÿÿÿJ2(ÿÿÿÿˆ2Iÿÿÿÿë2!ÿÿÿÿ!3!ÿÿÿÿQ3ÿÿÿÿ‚3+ÿÿÿÿ¯3=ÿÿÿÿí3+ ÿÿÿÿ:45ÿÿÿÿp4@ÿÿÿÿµ4
+%ÿÿÿÿä4
+%ÿÿÿÿ57ÿÿÿÿK5-ÿÿÿÿy5ÿÿÿÿ–5<ÿÿÿÿá5-ÿÿÿÿ6(�ÿÿÿÿÓ6
ÿÿÿÿâ6
+"	ÿÿÿÿ57B#$ÿÿÿÿ¾7#&ÿÿÿÿ8=ÿÿÿÿK846ÿÿÿÿµ85-ÿÿÿÿ9H<ÿÿÿÿ›965ÿÿÿÿ:Tÿÿÿÿa:xÿÿÿÿà:kÿÿÿÿR;jÿÿÿÿÃ;Vÿÿÿÿ <pÿÿÿÿ—<Hÿÿÿÿæ<^ÿÿÿÿK=76ÿÿÿÿ¸=Sÿÿÿÿ>GÿÿÿÿT>^ÿÿÿÿ´>Bÿÿÿÿ?6ÿÿÿÿR?+6ÿÿÿÿµ?6+ÿÿÿÿ@]ÿÿÿÿt@cÿÿÿÿÙ@ZQÿÿÿÿ„AjÿÿÿÿïAsÿÿÿÿcB
+eÿÿÿÿÒBCÿÿÿÿ3Ciÿÿÿÿ�C!ÿÿÿÿØCv*ÿÿÿÿxDmÿÿÿÿæD
+ƒÿÿÿÿuE
+BDÿÿÿÿFUÿÿÿÿ}F
+UÿÿÿÿÜF
+oÿÿÿÿUG
+Rÿÿÿÿ±G
+rÿÿÿÿ-H
+C/ÿÿÿÿ©H
+9ÿÿÿÿìH
+:ÿÿÿÿ0I
+?ÿÿÿÿyI‚aÿÿÿÿbJ
+NÿÿÿÿºJ
+5ÿÿÿÿùJ6\ÿÿÿÿ‹K_(ÿÿÿÿL_ÿÿÿÿ‹L
+cÿÿÿÿøL
+…ÿÿÿÿ‡M
+:ÿÿÿÿËMH?ÿÿÿÿRNnÿÿÿÿÕNrÿÿÿÿ\O†ÿÿÿÿãOp&ÿÿÿÿyP<4$Rÿÿÿÿ_Q
+Iÿÿÿÿ²QUÿÿÿÿR
+VÿÿÿÿzR73ÿÿÿÿäRyÿÿÿÿdS ÿÿÿÿTJÿÿÿÿ^T5#ÿÿÿÿ½T5#ÿÿÿÿU
+�ÿÿÿÿ³U
+KÿÿÿÿVsÿÿÿÿ|V
+Qÿÿÿÿ×V
+Qÿÿÿÿ2W
+Qÿÿÿÿ�W
+QÿÿÿÿèW
+QÿÿÿÿCX
+QÿÿÿÿžXsÿÿÿÿY
+XÿÿÿÿtY
+VÿÿÿÿÔY
+Xÿÿÿÿ6ZsÿÿÿÿªZsÿÿÿÿ[	Sÿÿÿÿz[mÿÿÿÿî[qÿÿÿÿf\oÿÿÿÿÜ\ƒÿÿÿÿg]B\ÿÿÿÿ^B<ÿÿÿÿ„^AÿÿÿÿÞ^	Tÿÿÿÿ=_
+ŠÿÿÿÿÑ_
+¼ÿÿÿÿ—`
+Pÿÿÿÿñ`kÿÿÿÿgakÿÿÿÿÓa
+3ÿÿÿÿbBdÿÿÿÿ¶bRÿÿÿÿcpÿÿÿÿ¢cS1ÿÿÿÿ6dXÿÿÿÿ¤d"EÿÿÿÿeÕÿÿÿÿøe0rÿÿÿÿ›f
+5#ÿÿÿÿýfŠÿÿÿÿˆgnÿÿÿÿh
+2ÿÿÿÿhh#GÿÿÿÿÒhX$ÿÿÿÿii7~ÿÿÿÿ:j=ƒÿÿÿÿúj0ÿÿÿÿ5kZÿÿÿÿ¢k4@ÿÿÿÿl73ÿÿÿÿ€l~ÿÿÿÿm4¬ÿÿÿÿùm&0ÿÿÿÿOnG¬ÿÿÿÿBo"0ÿÿÿÿ”o0ÿÿÿÿÖo0ÿÿÿÿ%pNÿÿÿÿupiÿÿÿÿàpR-ÿÿÿÿaq~ÿÿÿÿàq‡ÿÿÿÿlr
+Dÿÿÿÿºr
+HÿÿÿÿsQÿÿÿÿ^sLÿÿÿÿ«s ÿÿÿÿÚsr'ÿÿÿÿstOÿÿÿÿátXÿÿÿÿXvLÿÿÿÿ¦v
+0<ÿÿÿÿ4wi<CÿÿÿÿxBOÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
 	Invalid Export Address Table rva (0x%lx) or entry count (0x%lx)
 	Invalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)
 	Invalid Ordinal Table rva (0x%lx) or entry count (0x%lx)
 	Name Pointer Table 			Ordinal Table 				[%4ld] <corrupt offset: %lx>
 	[Name Pointer/Ordinal] Table	%08lx
-	code-base %08lx toc (loadable/actual) %08lx/%08lx
 	non-TLS: %pA	reloc %4d offset %4x [%4lx] %s	vma:  Hint/Ord Member-Name Bound-To
 
 
@@ -174,10 +188,6 @@ Exec Auxiliary Header
 
 Export Address Table -- Ordinal Base %ld
 
-Function descriptor located at the start address: %04lx
-
-No reldata section! Function descriptor not decoded.
-
 Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Program Header:
@@ -204,12 +214,10 @@ There is a first thunk, but the section
 
 There is an export table in %s at 0x%lx
 
-There is an export table in %s, but it does not fit into that section
+There is an export table in %s, but contents cannot be read
 
 There is an export table in %s, but it is too small (%d)
 
-There is an export table in %s, but that section has no contents
-
 There is an export table, but the section containing it could not be found
 
 There is an import table in %s at 0x%lx
@@ -245,7 +253,8 @@ ppcboot header:
     psect idx 3: %u, offset 3: 0x%08x %08x
     psect: %u, offset: 0x%08x %08x
     routine name: %.*s
-   %02u    (type: %3u, size: 4+%3u):    *unhandled* cmd %u
+   %02u    (type: %3u, size: %3u):    *unhandled* cmd %u
+   Erroneous length
    Error: The compile date is truncated
    Error: The length is less than the length of an EEOM record
    Error: The length is less than the length of an EMH record
@@ -254,7 +263,6 @@ ppcboot header:
    Error: The module version is missing
    Error: The module version is too long
    Error: The record length is less than the size of an EMH_MHD record
-   Error: length larger than remaining space in record
    alignment  : 2**%u
    alloc (len)   : %u (0x%08x)
    alloc (len): %u (0x%08x)
@@ -320,25 +328,13 @@ ppcboot header:
    vector      : 0x%08x
    version mask: 0x%08x
    version:    %x
-  %s (len=%u+%u):
+  %s (len=%u):
   %u: size: %u, flags: 0x%02x, name: %.*s
   EEOM (len=%u):
   EGSD (len=%u):
   EGSD entry %2u (type: %u, len: %u):   EMH %u (len=%u):   base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x   base_va : 0x%08x
   bitcount: %u, base addr: 0x%08x
-  branch         %lu
-  branch toc adj %lu
-  branch notoc   %lu
-  branch both    %lu
-  long branch    %lu
-  long toc adj   %lu
-  long notoc     %lu
-  long both      %lu
-  plt call       %lu
-  plt call save  %lu
-  plt call notoc %lu
-  plt call both  %lu
-  global entry   %lu  calls:
+  calls:
   chgprtoff : %5u
   codeadroff: %5u, lpfixoff  : %5u
   fixuplnk: 0x%08x %08x
@@ -354,22 +350,22 @@ ppcboot header:
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   size : %u
-  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> BPAGE: %u COM COMM Change Protection (%u entries):
+  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> <Unrecognised flag bits set> BPAGE: %u COM COMM Change Protection (%u entries):
  Code Address Reference Fixups:
  DEF EXE FPU support required:  First address : 0x%08x 0x%08x
  Fourth address: 0x%08x 0x%08x
- GBL Glue code sequence LIB Linkage Pairs Reference Fixups:
+ GBL LIB Linkage Pairs Reference Fixups:
  MACH-O header:
- NOMOD NORM OVR PIC QVAL RD REL Register restore millicode Register save millicode Resources start at offset: %#03x
+ NOMOD NORM OVR PIC QVAL RD REL Resources start at offset: %#03x
  SHR Second address: 0x%08x 0x%08x
  Shareable images:
  Shared image  : 0x%08x 0x%08x
  String table starts at offset: %#03x
  Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d
  Third address : 0x%08x 0x%08x
- UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [FDPIC ABI supplement] [FPA float format] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [g-float] [hard-float ABI] [interworking enabled] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] alignment of 8-byte entities:  corrupted GST
- debug module table : vbn: %u, size: %u
+ UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [FDPIC ABI supplement] [FPA float format] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [g-float] [hard-float ABI] [interworking enabled] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] alignment of 8-byte entities:  debug module table : vbn: %u, size: %u
  debug symbol table : vbn: %u, size: %u (0x%x)
+ failed to convert GOTPCREL relocation against '%s'; relink with --no-relax
  fixup info rva:  flags: 0x%04x global symbol table: vbn: %u, records: %u
  ident: 0x%08x, name: %.*s
  ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u
@@ -395,35 +391,55 @@ ppcboot header:
      		Address  Length   Length   32b exc  Handler   Data
  vma:            Hint    Time      Forward  DLL       First
                  Table   Stamp     Chain    Name      Thunk
-#<invalid error code>%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
+#<invalid error code>%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC
+%%X%%P: unresolvable %s relocation against symbol `%s'
+%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
 %03x %*.s Entry: %C: warning: relocation to "%s" references a different segment
+%F%P: %pB(%pA): error: need linked-to section for --gc-sections
+%F%P: %pB(%s): error opening thin archive member: %E
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s'
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB
+%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate compact relative reloc section
+%F%P: %pB: failed to allocate memory for section `%pA'
+%F%P: %pB: failed to allocate relative reloc record
+%F%P: %pB: failed to finish relative relocations
+%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed
+%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)
+%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: auto overlay error: %E
 %F%P: can not build overlay stubs: %E
 %F%P: corrupt input: %pB
+%F%P: discarded output section: `%pA'
 %F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie
-%F%P: failed to convert GOTPCREL relocation; relink with --no-relax
-%F%P: failed to create BND PLT section
 %F%P: failed to create GNU property section
 %F%P: failed to create GOT PLT .eh_frame section
 %F%P: failed to create GOT PLT section
 %F%P: failed to create GOT sections
 %F%P: failed to create IBT-enabled PLT section
 %F%P: failed to create PLT .eh_frame section
+%F%P: failed to create PLT .sframe section
 %F%P: failed to create VxWorks dynamic sections
 %F%P: failed to create ifunc sections
+%F%P: failed to create second PLT .sframe section
 %F%P: failed to create the second PLT .eh_frame section
+%F%P: failed to size relative relocations
 %F%pA: failed to align section
 %F%pB: PC-relative offset overflow in GOT PLT entry for `%s'
 %F%pB: PC-relative offset overflow in PLT entry for `%s'
 %F%pB: branch displacement overflow in PLT entry for `%s'
 %H __tls_get_addr lost arg, TLS optimization disabled
 %H arg lost __tls_get_addr, TLS optimization disabled
+%H: %s against %pT is not supported
 %H: %s against `%pT': error %d
 %H: %s for indirect function `%pT' unsupported
+%H: %s out of range
 %H: %s references dynamic symbol with nonzero addend
 %H: %s references optimized away TOC entry
 %H: %s reloc against `%s': error %d
+%H: %s reloc unsupported here
 %H: %s reloc unsupported in shared libraries and PIEs
 %H: %s used with TLS symbol `%pT'
 %H: %s used with non-TLS symbol `%pT'
@@ -445,23 +461,24 @@ ppcboot header:
 %H: error: %s against `%s' not a multiple of %u
 %H: error: %s not a multiple of %u
 %H: fixup branch overflow
+%H: got/toc optimization is not supported for %s instruction
 %H: non-zero addend on %s reloc against `%s'
 %H: reloc against `%s' references a different segment
 %H: reloc against `%s': %s
 %H: relocation %s for indirect function %s unsupported
+%H: relocation %s returns an unrecognized value %x
 %H: relocation references symbol not defined in the module
 %H: relocation to `%s+%v' may have caused the error above
-%H: toc optimization is not supported for %s instruction
+%H: relocation type %u is not supported
 %H: unresolvable %s against `%pT'
 %H: unresolvable %s relocation against symbol `%s'
 %H: warning: %s unexpected insn %#x.
 %P%F: --relax and -r may not be used together
 %P%X: can not read symbols: %E
-%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC
 %P%X: read-only segment has dynamic relocations
-%P: %H: %s relocation unsupported for bss-plt
 %P: %H: error: %s with unexpected instruction %x
 %P: %pB: %s is not supported for `%pT'
+%P: %pB: warning: missing %s
 %P: %pB: warning: relocation against `%s' in read-only section `%pA'
 %P: %pB: warning: relocation in read-only section `%pA'
 %P: cannot find opd entry toc for `%pT'
@@ -470,9 +487,15 @@ ppcboot header:
 %P: linkage table error against `%pT'
 %P: multiple entry points: in modules %pB and %pB
 %P: relocatable link is not supported
-%P: warning: creating a DT_TEXTREL in a shared object
+%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s
+%P: warning: creating DT_TEXTREL in a PDE
+%P: warning: creating DT_TEXTREL in a PIE
+%P: warning: creating DT_TEXTREL in a shared object
 %P: warning: text relocations and GNU indirect functions may result in a segfault at runtime
 %X%C: relocation to "%s" references a different segment
+%X%H: %s against `%s': error: relocation applies outside section
+%X%H: %s against `%s': error: relocation target address is odd
+%X%H: %s against `%s': internal error: unexpected relocation result %d
 %X%H: @local call to ifunc %s
 %X%H: cannot convert branch between ISA modes to JALX: relocation out of range
 %X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC
@@ -480,10 +503,14 @@ ppcboot header:
 %X%H: unsupported branch between ISA modes
 %X%H: unsupported bss-plt -fPIC ifunc %s
 %X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled
+%X%P: %H: %s relocation unsupported for bss-plt
 %X%P: %pB(%pA): error: relocation for offset %V has no value
 %X%P: %pB(%pA): relocation "%pR" goes out of range
 %X%P: %pB(%pA): relocation "%pR" is not supported
 %X%P: %pB(%pA): relocation "%pR" returns an unrecognized value %x
+%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation
+%X%P: %pB: error: missing %s
+%X%P: attempted static link of dynamic object `%pB'
 %X%P: internal error: out of range error
 %X%P: internal error: unknown error
 %X%P: internal error: unsupported relocation error
@@ -494,22 +521,24 @@ ppcboot header:
 %X%P: stack/lrlive analysis error: %E
 %X%P: text relocations and GNU indirect functions will result in a segfault at runtime
 %X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB
-%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections%pA has both ordered and unordered sections%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
+%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
 %pA:0x%v not found in function table
-%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
+%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): error: internal relocs missing for secondary reloc section%pB(%pA): error: reloc table entry %zu is empty%pB(%pA): error: secondary reloc %zu is of an unknown type%pB(%pA): error: secondary reloc %zu references a deleted symbol%pB(%pA): error: secondary reloc %zu references a missing symbol%pB(%pA): error: secondary reloc section has non-standard sized entries%pB(%pA): error: secondary reloc section has zero sized entries%pB(%pA): error: secondary reloc section is empty!%pB(%pA): error: secondary reloc section processed twice%pB(%pA): info section index cannot be set because the section is not in the output%pB(%pA): info section index is invalid%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): link section cannot be set because the output file does not have a symbol table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): relocation %zu has invalid symbol index %lu%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
 %pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s%pB, section %pA:
-  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s flag mismatch with previous modules%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
-  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: BE8 images only valid in big-endian mode%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS sections are not adjacent:%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: aout header specifies an invalid number of data-directory entries: %ld%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol definition: `Main' set to %s rather than the start address %s
-%pB: bad symbol index: %d%pB: base-plus-offset relocation against register symbol: %s in %pA%pB: base-plus-offset relocation against register symbol: (unknown) in %pA%pB: can not represent section `%pA' in a.out object file format%pB: can not represent section for symbol `%s' in a.out object file format%pB: can't link %s modules with %s modules%pB: can't link RVE with other target%pB: cannot allocate file name for file number %d, %d bytes
-%pB: cannot create stub entry %s%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
+  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s flag mismatch with previous modules%pB: %s local symbol at index %lu (>= sh_info of %lu)%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
+  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: BE8 images only valid in big-endian mode%pB: C_STAT isn't supported by XCOFF64%pB: Cannot create stub entry '%s'%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Number of symbols in input file has increased from %lu to %u
+%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS relocation %s against undefined symbol `%s'%pB: TLS sections are not adjacent:%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead.%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: adjusting invalid FileAlignment%pB: adjusting invalid SectionAlignment%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol index: %d%pB: base-plus-offset relocation against register symbol: %s in %pA%pB: base-plus-offset relocation against register symbol: (unknown) in %pA%pB: can not represent section `%pA' in a.out object file format%pB: can not represent section for symbol `%s' in a.out object file format%pB: can't link %s modules with %s modules%pB: can't link RVE with other target%pB: can't link different ABI object.%pB: cannot allocate file name for file number %d, %d bytes
+%pB: cannot allocate memory for local GOT entries%pB: cannot create stub entry %s%pB: cannot export internal symbol `%s`.%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: conditional branch to undefined symbol `%s' not allowed%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
 %pB: csect `%s' not in enclosing section%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object%pB: directive LOCAL valid only with a register or absolute value%pB: dtp-relative relocation against dynamic symbol %s%pB: duplicate export stub %s%pB: duplicate section `%pA' has different contents
 %pB: duplicate section `%pA' has different size
 %pB: dynamic object with no .loader section%pB: dynamic relocation against `%pT' in read-only section `%pA'
 %pB: dynamic relocation in read-only section `%pA'
-%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
+%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: attribute section length too small: %ld%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: expected symbol index in range 0..%lu but found local symbol with index %lu%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
 %pB: illegal section name `%pA'%pB: illegal symbol index %ld in relocs%pB: incompatible machine type; output is 0x%x; input is 0x%x%pB: incorrect size for symbol `%s'%pB: indirect symbol `%s' to `%s' is a loop%pB: instruction set mismatch with previous modules%pB: internal error in ihex_read_section%pB: internal error, internal register section %pA had contents
 %pB: internal error, symbol table changed size from %d to %d words
-%pB: internal symbol `%s' in %pB is referenced by DSO%pB: internal symbol `%s' isn't defined%pB: invalid entry in SHT_GROUP section [%u]%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions%pB: invalid link %u for reloc section %s (index %u)%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
+%pB: internal symbol `%s' in %pB is referenced by DSO%pB: internal symbol `%s' isn't defined%pB: invalid NumberOfRvaAndSizes%pB: invalid entry in SHT_GROUP section [%u]%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions%pB: invalid link %u for reloc section %s (index %u)%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
 %pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote
 %pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx
 %pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo
@@ -523,15 +552,19 @@ ppcboot header:
 %pB: invalid mmo file: lop_end not last item in file
 %pB: invalid mmo file: unsupported lopcode `%d'
 %pB: invalid sh_link field (%d) in section number %d%pB: invalid special symbol `%s'; it must be a global or weak function symbol%pB: invalid standard symbol `%s'; it must be a global or weak function symbol%pB: invalid symbol table: duplicate symbol `%s'
-%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no core to allocate section name %s%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
-%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: page size is too large (0x%x)%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to create fake empty section%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to initialize compress status for section %s%pB: unable to initialize decompress status for section %s%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type: %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
-%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number count (%#lx) exceeds section size (%#lx)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: sh_link not set for section `%pA'%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
-%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: will not resolve runtime TLS relocation%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
-%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%s defined on removed toc entry%s duplicated
+%pB: invalid version offset %lx (max %lx)%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
+%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-canonical reference to canonical protected function `%s' in %pB%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: not enough version information%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: overflow reloc count too small%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc %#x unsupported%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation %s overflow 0x%lx%pB: relocation %s right shift %d error 0x%lx%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section %s is compressed with zstd, but BFD is not built with zstd support%pB: section '%pA': corrupt VTENTRY entry%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: symbol indicates overlay (not supported)%pB: symbol name exceeds given max length of %d%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to compress section %s%pB: unable to create fake empty section%pB: unable to decompress section %s%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unhandled sparc machine value '%lu' detected during write processing%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported AOUT relocation size: %d%pB: unsupported arch %#x%pB: unsupported bfd mach %#lx%pB: unsupported bfd relocation type %#x%pB: unsupported mach %#x%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type %s%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type name %s%pB: unsupported relocation type: %#x%pB: unsupported swap_aux_in for storage class %#x%pB: unsupported swap_aux_out for storage class %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
+%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section.%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: Weak TLS is implementation defined and may not work as expected%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: secondary relocation section '%s' for section %pA found - ignoring%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
+%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: truncated `%s' option%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: warning: win32pstatus %s of size %lu bytes is too small%pB: will not resolve runtime TLS relocation%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u%pB: wrong auxtype %#x for storage class %#x%pB:%.8s: RVA truncated%pB:%.8s: section below image base%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
+%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: attempting to write over the end of the section%pB:%pA: error: attempting to write section into an empty buffer%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%pB[%pA]: no output section for space %pA%pcrel_lo missing matching %pcrel_hi%pcrel_lo overflow with an addend%pcrel_lo section symbol with an addend%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20%s defined on removed toc entry%s divide by zero%s duplicated
 %s duplicated in %s
-%s has both normal and TLS relocs%s in overlay section%s not defined in linker created %pA%s not implemented%s offset too large for .eh_frame sdata4 encoding%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA%s: TLS reference in %pB mismatches non-TLS reference in %pB%s: no such symbol%s: not implemented%s: not supported%s: undefined version: %s(at bit offset %u)
+%s has both normal and TLS relocs%s in overlay section%s is defined but could not be loaded: %s%s is defined but plugin support is disabled%s is loaded but symbol "%s" is not found: %s%s not defined in linker created %pA%s not implemented%s offset too large for .eh_frame sdata4 encoding%s, iter %u
+  branch         %lu
+  long branch    %lu
+  plt call       %lu
+  global entry   %lu%s: ISA string cannot contain uppercase letters%s: ISA string must begin with rv32 or rv64%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA%s: TLS reference in %pB mismatches non-TLS reference in %pB%s: first ISA extension must be `e', `i' or `g'%s: invalid prefixed ISA extension `%s' ends with <number>p%s: no such symbol%s: not implemented%s: not supported%s: prefixed ISA extension must separate with _%s: undefined version: %s%s: unknown prefixed ISA extension `%s'%s: unknown standard ISA extension or prefix class `%c'(at bit offset %u)
 (descriptor)
-(format %c%c%c%c signature %s age %ld)
+(format %c%c%c%c signature %s age %ld pdb %s)
 (no value)
 (not active)
 (not allocated)
@@ -544,7 +577,7 @@ ppcboot header:
 , alias: %u
 , ext fixup offset: %u, no_opt psect off: %u, subtype: %u (%s)
 , symbol vector rva: - %pB is 64-bit, %pB is not-mips32r2 -mfp64 (12 callee-saved).eh_frame_hdr entry overflow.eh_frame_hdr refers to overlapping FDEs.got section not immediately after .plt section.rsrc merge failure: a directory matches a leaf.rsrc merge failure: differing directory versions.rsrc merge failure: dirs with differing characteristics.rsrc merge failure: duplicate leaf.rsrc merge failure: duplicate leaf: %s.rsrc merge failure: duplicate string resource: %d.rsrc merge failure: multiple non-default manifests32-bit double, 32bits gp relative relocation occurs for an external symbol4-byte4-bytes64 bits *unhandled*
-64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC<Unrecognised flag bits set><corrupt info> %s<corrupt string length: %#x>
+64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC; recompile with -fPIE<corrupt info> %s<corrupt string length: %#x>
 <corrupt string offset: %#lx>
 <corrupt><unknown directory type: %d>
 <unknown mask flags><unknown>@pltoff reloc against local symbolBASE_IMAGE       BFD %s assertion fail %s:%dBFD %s internal error, aborting at %s:%d
@@ -557,15 +590,13 @@ ppcboot header:
 CTL_STLOC (set location)
 Copyright Header
 Corrupt .rsrc section detected!
-DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
+DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: could not find variable specification at offset 0x%lxDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: section %s has no contentsDWARF error: section %s is too bigDWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
 Debug symbol table:
-Delay Import DirectoryDeprecated %s called
-Deprecated %s called at %s line %d in %s
-Description DirectoryEIHD: (size: %u, nbr blocks: %u)
+Delay Import DirectoryDescription DirectoryEIHD: (size: %u, nbr blocks: %u)
 Entry offset        = 0x%.8lx (%ld)
-Error: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
+Error: %pB and %pB has different DSP versionError: %pB and %pB has different FPU ABIError: %pB and %pB has different VDSP versionError: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
 Export RVAFDE encoding in %pB(%pA) prevents .eh_frame_hdr table being createdFDPIC does not yet support %s relocation to become dynamic for executableFILES_VOLUMES    FPU-2.0FPU-3.0Flag field          = 0x%.2x
-Forwarder RVAGALAXY           GOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
+Forwarder RVAGALAXY           GNU_MBIND section is supported only by GNU and FreeBSD targetsGNU_RETAIN section is supported only by GNU and FreeBSD targetsGOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
 Hard float (32-bit CPU, 64-bit FPU)
 Hard float (32-bit CPU, Any FPU)
 Hard float (MIPS32r2 64-bit FPU 12 callee-saved)
@@ -573,20 +604,20 @@ ppcboot header:
 Hard float (single precision)
 Hard float compat (32-bit CPU, 64-bit FPU)
 Hard or soft float
-ID: %#08lxIDC - Ident Consistency check
-IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
+IBT and SHSTK propertiesIBT propertyID: %#08lxIDC - Ident Consistency check
+IFUNC symbol %s in dynamic symbol table - IFUNCS are not supportedIMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
 Image activator fixup: (major: %u, minor: %u)
 Image identification: (major: %u, minor: %u)
 Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)
 Image symbol & debug table: (major: %u, minor: %u)
-Import Address Table DirectoryImport Directory [parts of .idata]LOGICAL_NAMES    Language Processor Name
+Import Address Table DirectoryImport Directory [parts of .idata]Internal error: unreachable.LAM_U48 propertyLAM_U57 propertyLOGICAL_NAMES    Language Processor Name
 Length              = 0x%.8lx (%ld)
 Load Configuration DirectoryLocal IFUNC function `%s' in %pB
 MEMORY_MANAGEMENTMIPS16 and microMIPS functions cannot call each otherMISC             MMU use: MULTI_PROCESSING Major/Minor 			%d/%d
 Maximum stack required is 0x%v
 MeP: howto %d has type %dMerging program properties
 Module header
-NETWORKS         NORMALName 				NoneNumber in:
+NETWORKS         NORMALNOTE: This behaviour is deprecated and will be removed in a future version of the linkerName 				NoneNumber in:
 OPR_ADD (add)
 OPR_AND (logical and)
 OPR_ASH (arithmetic shift)
@@ -611,21 +642,19 @@ ppcboot header:
 Partition[%d] length = 0x%.8lx (%ld)
 Partition[%d] sector = 0x%.8lx (%ld)
 Please report this bug.
-RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pBRL78 ABI conflict: cannot link %s file %pB with %s file %pBRL78 merge conflict: cannot link 32-bit and 64-bit objects togetherR_BFIN_FUNCDESC references dynamic symbol with nonzero addendR_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addendR_FRV_TLSMOFFLO not applied to a setlo or setlos instruction
+RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pBRL78 ABI conflict: cannot link %s file %pB with %s file %pBRL78 merge conflict: cannot link 32-bit and 64-bit objects togetherRL78 reloc divide by zeroRL78 reloc stack overflow/underflowR_AMD64_IMAGEBASE with __ImageBase undefinedR_BFIN_FUNCDESC references dynamic symbol with nonzero addendR_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addendR_FRV_TLSMOFFLO not applied to a setlo or setlos instruction
 Reading archive file mod timestampRemoved property %W to merge %pB (0x%v) and %pB (0x%v)
 Removed property %W to merge %pB (0x%v) and %pB (not found)
 Removed property %W to merge %pB (not found) and %pB (0x%v)
 Removed property %W to merge %pB and %pB
 Removed property %W to merge %pB and %pB (not found)
-ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSIMD use: SPSC - Shared Image Program section def
+ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSHSTK propertySIMD use: SPSC - Shared Image Program section def
 STABLE           STA_CKARG (compare procedure argument)
 STA_GBL (stack global) %.*s
 STA_LI (stack literal)
-STA_LW (stack longword) 0x%08x
-STA_MOD (stack module)
+STA_LW (stack longword)STA_MOD (stack module)
 STA_PQ (stack psect base + offset)
-STA_QW (stack quadword) 0x%08x %08x
-STC_BOH_GBL (store cond BOH at global addr)
+STA_QW (stack quadword)STC_BOH_GBL (store cond BOH at global addr)
 STC_BOH_PS (store cond BOH at psect + offset)
 STC_BSR_GBL (store cond BSR at global addr)
 STC_BSR_PS (store cond BSR at psect + offset)
@@ -664,27 +693,27 @@ ppcboot header:
 Source Files Header
 Special DirectoryStack size for call graph root nodes.
 Strides:
-Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pBTLS relocation invalid without dynamic sectionsTable Addresses
-The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
+Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pBTLS relocation invalid without dynamic sectionsTOC overflow during stub generation; try -mminimal-toc when compilingTable Addresses
+The addend isn't allowed for R_RISCV_GOT_HI20The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
 Thread Storage Directory [.tls]Time/Date stamp 		%lx
 Title Text Header
 Too many unwind codes (%ld)
 Type                Size     Rva      Offset
-USRSTACKUnknownUnknown: %xUpdated property %W (%v) to merge %pB (0x%v) and %pB (not found)
+USRSTACKUnable to find the stub entry targeting %sUnable to link input file: %sUnable to load DLL.UnknownUnknown: %xUpdated property %W (%v) to merge %pB (0x%v) and %pB (not found)
 Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)
 VOLATILE         Virtual size of .pdata section (%ld) larger than real size (%ld)
 Warning: %s section size (%ld) is not a multiple of %d
 Warning: %s section size (%ld) is smaller than virtual size (%ld)
 Warning: %s section size is zero
 Writing updated armap timestampXGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code.[%u]: Lower: %u, upper: %u
-[abi=16-bit int, [abi=32-bit int, [whose name is lost]_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry functiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
+[abi=16-bit int, [abi=32-bit int, [whose name is lost]\%pB: warning: %s BLX instruction targets %s function '%s'__tls_get_addr call offset overflow_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry function`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extensiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
 array, dim: %u, bitmap: arsize: %u, a0: 0x%08x
 atomic, type=0x%02x %s
 attempt to convert L32R/CALLX to CALL failedattempt to do relocatable link with %s input and %s outputbad section index in %sbad valuebanked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)base: %u, pos: %u
-bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_read_symtab_symbols: unable to allocate memory for symbolsbfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
+bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lxbfd_mach_o_read_section_64: overlarge alignment value: %#lxbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
 blkend: size: 0x%08x
-branch (PC rel16) to section (%s) not supportedbranch to a non-instruction-aligned addressbss-plt forced by profilingbss-plt forced due to %pBcan't build branch stub `%s'can't find branch stub `%s'cannot convert a branch to JALX for a non-word-aligned addresscannot convert a jump to JALX for a non-word-aligned addresscannot create stub entry %scannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
-cannot read DMT
+branch (PC rel16) to section (%s) not supportedbranch to a non-instruction-aligned addressbss-plt forced by profilingbss-plt forced due to %pBcan't build branch stub `%s'can't find branch stub `%s'cannot + or - base extension `%s' in .option arch `%s'cannot convert a branch to JALX for a non-word-aligned addresscannot convert a jump to JALX for a non-word-aligned addresscannot create stub entry %scannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
+cannot find default versions of the ISA extension `%s'cannot read DMT
 cannot read DMT header
 cannot read DMT psect
 cannot read DST
@@ -700,70 +729,66 @@ ppcboot header:
 cannot read GST
 cannot read GST record
 cannot read GST record header
-cannot read GST record length
 class: %u, dtype: %u, length: %u, pointer: 0x%08x
-corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EGSD record: size (%#x) is larger than remaining space (%#x)corrupt EGSD record: size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt vms valuecould not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]dangerous relocationdelta pc +%-4ddelta_pc_l: +0x%08x
+corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)corrupt EGSD record type %d: size (%#x) is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt reloc recordcorrupt vms valuecorrupted GST
+could not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]d' and `cd' and `zfad' or `zdinxdangerous relocationdangerous relocation errordelta pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 descdimct: %u, aflags: 0x%02x, digits: %u, scale: %u
 discarded output section: `%pA'discarding zero address range FDE in %pB(%pA).
 discontiguous range (nbr: %u)
-dynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
+division by zerodst_define_location %u too largedynamic index information not availabledynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
 enumelt, name: %.*s
 enumend
 epilog: flags: %u, count: %u
-error in %pB(%pA); no .eh_frame_hdr table will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB does not use %s instructions, whereas %pB doeserror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack aligned.error: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s).error: %pB: Mis-matched ISA string to merge '%s' and '%s'.error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%derror: %pB: SB relative addressing conflicts with use of R9error: %pB: Unspported XLEN (%u), you mightusing wrong emulation.error: %pB: XLEN of input (%u) doesn't match output (%u).error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting priv spec version (major/minor/revision).error: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'.error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablefailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation at address 0x%08x when _gp not defined
-global pointer relative relocation when _gp not definedhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
+error in %pB(%pA); no .eh_frame_hdr table will be createderror in %pB(%pA); no .sframe will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memoryerror: %pB does not use %s instructions, whereas %pB doeserror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack alignederror: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt AArch64 used size: 0x%x>error: %pB: <corrupt property (0x%x) size: 0x%x>error: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s)error: %pB: SB relative addressing conflicts with use of R9error: %pB: XLEN of input (%u) doesn't match output (%u)error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'error: %pB: mis-matched ISA string to merge '%s' and '%s'error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: %pB: unsupported XLEN (%u), you might be using wrong emulationerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spaceerror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablef' and `cf' or `zfinxfailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfinal size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spacefurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation when _gp not definedhhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
 indirect, defined at 0x%08x
-internal error: RL78 reloc stack overflowinternal error: RL78 reloc stack underflowinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol invalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
+input SFrame sections with different abi prevent .sframe generationinput SFrame sections with different format versions prevent .sframe generationinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: relocation not supportedinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol internal: unreachable INSN_CLASS_*invalid %sinvalid ISA extension ends with <number>p in .option arch `%s'invalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid dynamic indexinvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
 len: %2u, kind: %2u line num  (len: %u)
-linkable imagelinker stubs in %u group
-linker stubs in %u groups
-literalliteral relocation occurs for an external symbollong branch stub `%s' offset overflowmach-o: there are too many sections (%u) maximum is 255,
-malformed archivememory exhaustedmep: no reloc for code %dmodbeg
+linkable imagelinker stubs in %u grouplinker stubs in %u groupsliteralliteral relocation occurs for an external symbollocal symbol index too biglong branch stub `%s' offset overflowm' or `zmmulmach-o: there are too many sections (%u) maximum is 255,
+malformed archivemalformed mach-o ARM half sectdiff reloc: invalid length: %dmalformed mach-o ARM local sectdiff reloc: invalid length: %dmalformed mach-o ARM reloc pair: invalid length: %dmalformed mach-o ARM reloc pair: reloc is first relocmalformed mach-o ARM reloc: unknown reloc type: %dmalformed mach-o ARM sectdiff reloc: invalid length: %dmalformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)malformed mach-o reloc: section index is greater than the number of sectionsmemory exhaustedmep: no reloc for code %dmodbeg
 modend
-name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno errorno more archived filesno symbolsnon-contiguous array of %s
-non-dynamic relocations refer to dynamic symbol %snon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
+name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno dynamic index information availableno errorno more archived filesno symbolsnon-contiguous array of %s
+non-dynamic relocations refer to dynamic symbol %snon-dynamic symbol %s in dynamic symbol tablenon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
 non-zero addend in @fptr relocnonenonrepresentable section on outputnot enough GOT space for local GOT entriesnot enough memory to sort relocationsnot mapping: data=%lx mapped=%d
 not mapping: env var not set
-not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowpointer
+not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowplugin framework: out of file descriptors. Try using fewer objects/archives
+pointer
 private flags = %lxprivate flags = %lx:private flags = %lx: private flags = 0x%lxprivate flags = 0x%lx:prolog: bkpt address 0x%08x
-protected symbolprotected symbol recbeg: name: %.*s
+protected symbolprotected symbol q' and `zfaq' or `zqinxrecbeg: name: %.*s
 recend
-reference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
-reloc (%d) is *UNKNOWN*relocation for non-REL psectrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedremoving unused section '%pA' in file '%pB'reopening %pB: %s
-reserved cmd %drtnbeg
+record is too small for symbol name lengthreference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
+reloc (%d) is *UNKNOWN*relocation for non-REL psectrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedremoving unused section '%pA' in file '%pB'reopening %pB: %sreserved cmd %drtnbeg
 rtnend: size 0x%08x
-section has no contentsseptyp, name: %.*s
+rv%d does not support the `e' extensionrv%d does not support the `q' extensionsection has no contentsseptyp, name: %.*s
 set_abs_pc: 0x%08x
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-shared objectsize error in section %pAsmall-data section exceeds 64KB; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, no support for duplicate object files in auto-overlay script
+shared objectsize error in section %pAsmall-data section exceeds 64KB; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, cannot handle this filesorry, no support for duplicate object files in auto-overlay script
 sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands.source (len: %u)
 spurious ALPHA_R_BSR relocstack analysis will ignore the call from %s to %s
 stack overflow (%d) in _bfd_vms_pushstack underflow in _bfd_vms_popstandard data: %s
-start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol needs debug section which does not existsystem call errorsystem version array information:
+start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targetssymbol needs debug section which does not existsymbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targetssystem call errorsystem version array information:
 term(b): 0x%02xterm_w: 0x%04xthe bfin target does not currently support the generation of copy relocationsthere is a conflict merging the ELF header flags from %pBtoo many GOT entries for -fpic, please recompile with -fPICtry enabling relaxation to avoid relocation truncationstype spec for element:
 type spec for subscript %u:
 typed pointer
 typspec (len: %u)
-unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767
-unable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
-undefined undefined %s reference in complex symbol: %sunexpected STO_SH5_ISA32 on local symbol is not handledunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
+unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
+undefined undefined %s reference in complex symbol: %sunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
 unhandled emh subtype %u
-unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
-unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeunsupported relocation type %#xusing multiple gp valuesv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
+unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown ISA extension `%s' in .option arch `%s'unknown attribute for symbol `%s': 0x%02xunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
+unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeusing multiple gp valuesv' or `zve64d' or `zve64f' or `zve32fv' or `zve64x' or `zve32xv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
 warning, .pdata section size (%ld) is not a multiple of %d
-warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a corrupt section with a size (%warning: %pB has a corrupt string table index - ignoringwarning: %pB supports interworking, whereas %pB does notwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
+warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a LOAD segment with RWX permissionswarning: %pB has a TLS segment with execute permissionwarning: %pB has a corrupt string table indexwarning: %pB has a program header with invalid alignmentwarning: %pB has a section extending past end of filewarning: %pB has a segment extending past end of filewarning: %pB supports interworking, whereas %pB does notwarning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%uwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
 warning: %s overlaps %s
-warning: %s section has zero sizewarning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
-warning: discarding dynamic section %swarning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
-yesyou are not allowed to define %s in a scriptProject-Id-Version: bfd 2.31.90
-Report-Msgid-Bugs-To: bug-binutils@gnu.org
-POT-Creation-Date: 2019-01-19 16:30+0000
-PO-Revision-Date: 2019-01-24 18:57+0300
+warning: %s section has zero sizewarning: %s should be used rather than %swarning: %s: missing .note.GNU-stack section implies executable stackwarning: %s: requires executable stack (because the .note.GNU-stack section is executable)warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: --plt-localentry is incompatible with power10 pc-relative codewarning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised.warning: NOTE: size discrepancies can cause real problems.  Investigation is advised.warning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pBwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
+warning: discarding dynamic section %swarning: enabling an executable stack because of -z execstack command line optionwarning: file %pB's arch flag %s conflict with target %s,set target arch flag to %swarning: file %pB's arch flag %s conflicts with target ck%s, using %swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: privileged spec version 1.9.1 can not be linked with other spec versionswarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognised arch name '%#x'warning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
+x ISA extension `%s' must be set with the versionsyesyou are not allowed to define %s in a scriptzbb' or `zbkbzbc' or `zbkczfh' and `zfazfh' or `zhinxzfhmin' and `d', or `zhinxmin' and `zdinxzfhmin' and `q', or `zhinxmin' and `zqinxzfhmin' or `zhinxminzknd' or `zknezvbbzvbczvkgzvknedzvknhazvknhbzvksedzvkshzvl*b extensions need to enable either `v' or `zve' extensionProject-Id-Version: bfd 2.40.90
+Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/
+POT-Creation-Date: 2023-07-03 11:31+0100
+PO-Revision-Date: 2023-08-06 11:16+0300
 Last-Translator: Yuri Kozlov <yuray@komyakino.ru>
 Language-Team: Russian <gnu@d07.ru>
 Language: ru
@@ -771,7 +796,7 @@ MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 X-Bugs: Report translation errors to the Language-Team address.
-X-Generator: Lokalize 2.0
+X-Generator: Lokalize 22.12.3
 Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
 	    TLS: %pA	<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾: 0x%04lx>	Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² 			Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² 		%08lx
 	Ð�ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² rva (0x%lx) Ð¸Ð»Ð¸ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² (0x%lx)
@@ -779,7 +804,6 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 	Ð�ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð¾Ð±Ñ‹Ñ‡Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° rva (0x%lx) Ð¸Ð»Ð¸ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² (0x%lx)
 	Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð¸Ð¼Ñ‘Ð½ 			Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ñ… Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² 				[%4ld] <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: %lx>
 	Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° [ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð¸Ð¼Ñ‘Ð½/Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ñ… Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð²]	%08lx
-	code-base %08lx toc (Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹/Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¹) %08lx/%08lx
 	 Ð½Ðµ-TLS: %pA	Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %4d Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %4x [%4lx] %s	vma:  Hint/Ord Ð˜Ð¼Ñ�-Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° ÐŸÑ€Ð¸Ð²Ñ�Ð·Ð°Ð½-Ðº
 
 
@@ -810,10 +834,6 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 
 Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² -- Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %ld
 
-Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸: %04lx
-
-Ð�ÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° reldata! ÐžÐ¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÑŒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ð½Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½.
-
 Ð�Ð°Ñ‡Ð°Ð»Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹:
@@ -840,12 +860,10 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 
 Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%lx
 
-Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ð¾Ð½Ð° Ð½Ðµ Ð¿Ð¾Ð¼ÐµÑ‰Ð°ÐµÑ‚Ñ�Ñ� Ð² Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ»
+Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ ÐµÑ‘ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ
 
 Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ð¾Ð½Ð° Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ� (%d)
 
-Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð±ÐµÐ· Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾
-
 Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð°, Ð½Ð¾ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð´ÐµÐ», Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼ Ð¾Ð½Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚Ñ�Ñ�
 
 Ð’ %s Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%lx
@@ -881,7 +899,8 @@ Plural-Forms:  nplurals=3; plural=(n%10=
     3-Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� psect: %u, 3-Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x %08x
     psect: %u, Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x %08x
     Ð¸Ð¼Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹: %.*s
-   %02u    (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð°Ð·Ð¼ÐµÑ€: 4+%3u):    *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ�* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u
+   %02u    (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %3u):    *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ�* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u
+   ÐžÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°
    ÐžÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ñ€ÐµÐ·Ð°Ð½Ð° Ð´Ð°Ñ‚Ð° ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ†Ð¸Ð¸
    ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð¼ÐµÐ½ÑŒÑˆÐµ Ð´Ð»Ð¸Ð½Ñ‹ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ EEOM
    ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð¼ÐµÐ½ÑŒÑˆÐµ Ð´Ð»Ð¸Ð½Ñ‹ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ EMH
@@ -890,7 +909,6 @@ Plural-Forms:  nplurals=3; plural=(n%10=
    ÐžÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�
    ÐžÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð»Ð¸Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�
    ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð¼ÐµÐ½ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ EMH_MHD
-   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐ³Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° Ð² Ð·Ð°Ð¿Ð¸Ñ�Ð¸
    Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ  : 2**%u
    alloc (len)   : %u (0x%08x)
    alloc (len): %u (0x%08x)
@@ -956,25 +974,13 @@ Plural-Forms:  nplurals=3; plural=(n%10=
    Ð²ÐµÐºÑ‚Ð¾Ñ€      : 0x%08x
    Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ñ�Ð¸Ð¸: 0x%08x
    Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ñ�Ð¸Ð¸: %x
-  %s (len=%u+%u):
+  %s (Ð´Ð»Ð¸Ð½Ð°=%u):
   %u: Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, Ñ„Ð»Ð°Ð³Ð¸: 0x%02x, Ð¸Ð¼Ñ�: %.*s
   EEOM (len=%u):
   EGSD (len=%u):
   Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD %2u (Ñ‚Ð¸Ð¿: %u, Ð´Ð»Ð¸Ð½Ð°: %u):   EMH %u (len=%u):   Ð±Ð°Ð·Ð°: 0x%08x %08x, Ñ€Ð°Ð·Ð¼ÐµÑ€: 0x%08x, prot: 0x%08x   base_va : 0x%08x
   Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð±Ð¸Ñ‚: %u, Ð±Ð°Ð·Ð¾Ð²Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x
-  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                            %lu
-  Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� toc            %lu
-  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ðµ toc                     %lu
-  Ð¾Ð±Ð° Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�                        %lu
-  Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                    %lu
-  Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� toc   %lu
-  Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ðµ toc             %lu
-  Ð¾Ð±Ð° Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�                %lu
-  plt-Ð²Ñ‹Ð·Ð¾Ð²                            %lu
-  Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ‘Ð½Ð½Ñ‹Ð¹ plt-Ð²Ñ‹Ð·Ð¾Ð²                %lu
-  plt-Ð²Ñ‹Ð·Ð¾Ð² Ð½Ðµ toc                     %lu
-  Ð¾Ð±Ð° plt-Ð²Ñ‹Ð·Ð¾Ð²Ð°                       %lu
-  Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚                   %lu  Ð²Ñ‹Ð·Ð¾Ð²Ñ‹:
+  Ð²Ñ‹Ð·Ð¾Ð²Ñ‹:
   chgprtoff : %5u
   codeadroff: %5u, lpfixoff  : %5u
   fixuplnk: 0x%08x %08x
@@ -990,22 +996,22 @@ Plural-Forms:  nplurals=3; plural=(n%10=
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   Ñ€Ð°Ð·Ð¼ÐµÑ€: %u
-  Ñ„Ð»Ð°Ð³Ð¸ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°: %s  Ñ„Ð»Ð°Ð³Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°: %s %08x (Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾) 0x%08x 64B <Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� EABI> BPAGE: %u COM COMM Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ (%u Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²):
+  Ñ„Ð»Ð°Ð³Ð¸ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°: %s  Ñ„Ð»Ð°Ð³Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°: %s %08x (Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾) 0x%08x 64B <Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� EABI> <Ð�ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð½Ð°Ð±Ð¾Ñ€ Ð±Ð¸Ñ‚Ð¾Ð² Ñ„Ð»Ð°Ð³Ð°> BPAGE: %u COM COMM Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ (%u Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²):
  Ð¡Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ðµ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð°Ð´Ñ€ÐµÑ�Ð° ÐºÐ¾Ð´Ð°:
  DEF EXE Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð°Ñ� Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° FPU:  ÐŸÐµÑ€Ð²Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x
  Ð§ÐµÑ‚Ð²Ñ‘Ñ€Ñ‚Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x
- GBL ÐŸÐ¾Ñ�Ð»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñ�Ñ‚ÑŒ Ñ�Ð²Ñ�Ð·ÑƒÑŽÑ‰ÐµÐ³Ð¾ ÐºÐ¾Ð´Ð° LIB Ð¡Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ðµ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ñ… Ð¿Ð°Ñ€:
+ GBL LIB Ð¡Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ðµ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ñ… Ð¿Ð°Ñ€:
  Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Mach-O:
- NOMOD NORM OVR PIC QVAL RD REL ÐœÐ¸Ð»Ð»Ð¸ÐºÐ¾Ð´ Ð²Ð¾Ñ�Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° ÐœÐ¸Ð»Ð»Ð¸ÐºÐ¾Ð´ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð ÐµÑ�ÑƒÑ€Ñ�Ñ‹ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#03x
+ NOMOD NORM OVR PIC QVAL RD REL Ð ÐµÑ�ÑƒÑ€Ñ�Ñ‹ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#03x
  SHR Ð’Ñ‚Ð¾Ñ€Ð¾Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x
  ÐžÐ±Ñ‰Ð¸Ðµ Ð¾Ð±Ñ€Ð°Ð·Ñ‹:
  ÐžÐ±Ñ‰Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·: 0x%08x 0x%08x
  Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ñ‚Ñ€Ð¾Ðº Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚Ñ�Ñ� Ñ�Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#03x
  Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð°: Ð¡Ð¸Ð¼Ð²Ð¾Ð»: %d, Ð’Ñ€ÐµÐ¼Ñ�: %08lx, Ð’ÐµÑ€Ñ�Ð¸Ñ�: %d/%d, ÐšÐ¾Ð»-Ð²Ð¾ Ð¸Ð¼Ñ‘Ð½: %d, ID: %d
  Ð¢Ñ€ÐµÑ‚Ð¸Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x
- UNI VEC VECEP WEAK WRT[64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ double] [BE8] [Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ FDPIC ABI] [FPA Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸] [LE8] [Maverick Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸] [VFP Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸] [Ð’ÐµÑ€Ñ�Ð¸Ñ�1 EABI] [Ð’ÐµÑ€Ñ�Ð¸Ñ�2 EABI] [Ð’ÐµÑ€Ñ�Ð¸Ñ�3 EABI] [Ð’ÐµÑ€Ñ�Ð¸Ñ�4 EABI] [Ð’ÐµÑ€Ñ�Ð¸Ñ�5 EABI] [Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ XGATE Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸] [abi Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚ÐµÐ½] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�] [fix dep] [Ñ‡Ð¸Ñ�Ð»Ð° Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¿ÐµÑ€ÐµÐ´Ð°ÑŽÑ‚Ñ�Ñ� Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹] [g-float] [hard-float ABI] [Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ€Ð°Ð±Ð¾Ñ‚Ð° Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°] [Ð¿Ñ€Ð¾ÐµÑ†Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ€Ð°Ð½ÑŒÑˆÐµ] [Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ=Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ñ� Ð±Ð°Ð½ÐºÐ°Ð¼Ð¸] [Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ=Ð¿Ð»Ð¾Ñ�ÐºÐ°Ñ�] [Ð½Ð¾Ð²Ñ‹Ð¹ ABI] [abi Ð½Ðµ Ð·Ð°Ð´Ð°Ð½] [Ð½Ðµ-pic] [Ð½Ðµ 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ñ€ÐµÐ¶Ð¸Ð¼] [Ñ�Ñ‚Ð°Ñ€Ñ‹Ð¹ ABI] [pic] [Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð¾-Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ñ‹Ð¹] [Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹] [soft-float ABI] [Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ� FP] [Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²] [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ� _] [Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ISA] [Ð½ÐµÑ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²] [v10 Ð¸ v32] [v32] Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²:  Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ GST
- Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹: vbn: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u
+ UNI VEC VECEP WEAK WRT[64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ double] [BE8] [Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ FDPIC ABI] [FPA Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸] [LE8] [Maverick Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸] [VFP Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸] [Ð’ÐµÑ€Ñ�Ð¸Ñ�1 EABI] [Ð’ÐµÑ€Ñ�Ð¸Ñ�2 EABI] [Ð’ÐµÑ€Ñ�Ð¸Ñ�3 EABI] [Ð’ÐµÑ€Ñ�Ð¸Ñ�4 EABI] [Ð’ÐµÑ€Ñ�Ð¸Ñ�5 EABI] [Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ XGATE Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸] [abi Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚ÐµÐ½] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�] [fix dep] [Ñ‡Ð¸Ñ�Ð»Ð° Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¿ÐµÑ€ÐµÐ´Ð°ÑŽÑ‚Ñ�Ñ� Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹] [g-float] [hard-float ABI] [Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ€Ð°Ð±Ð¾Ñ‚Ð° Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°] [Ð¿Ñ€Ð¾ÐµÑ†Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ€Ð°Ð½ÑŒÑˆÐµ] [Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ=Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ñ� Ð±Ð°Ð½ÐºÐ°Ð¼Ð¸] [Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ=Ð¿Ð»Ð¾Ñ�ÐºÐ°Ñ�] [Ð½Ð¾Ð²Ñ‹Ð¹ ABI] [abi Ð½Ðµ Ð·Ð°Ð´Ð°Ð½] [Ð½Ðµ-pic] [Ð½Ðµ 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ñ€ÐµÐ¶Ð¸Ð¼] [Ñ�Ñ‚Ð°Ñ€Ñ‹Ð¹ ABI] [pic] [Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð¾-Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ñ‹Ð¹] [Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹] [soft-float ABI] [Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ� FP] [Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²] [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ� _] [Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ISA] [Ð½ÐµÑ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²] [v10 Ð¸ v32] [v32] Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²:  Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹: vbn: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u
  Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: vbn: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u (0x%x)
+Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GOTPCREL Ð² Â«%sÂ»; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ñ� --no-relax
  fixup info rva:  Ñ„Ð»Ð°Ð³Ð¸: 0x%04x Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: vbn: %u, Ð·Ð°Ð¿Ð¸Ñ�ÐµÐ¹: %u
  Ð¸Ð´ÐµÐ½-Ñ€: 0x%08x, Ð¸Ð¼Ñ�: %.*s
  ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u
@@ -1031,35 +1037,55 @@ Plural-Forms:  nplurals=3; plural=(n%10=
      		Ð�Ð´Ñ€ÐµÑ�     ÐŸÑ€Ð¾Ð»Ð¾Ð³Ð°  Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¸ 32b exc     Ð˜Ñ�ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ Ð”Ð°Ð½Ð½Ñ‹Ðµ
  vma:            Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð°    ÐžÑ‚Ð¼ÐµÑ‚ÐºÐ°   Ð¦ÐµÐ¿Ð¾Ñ‡ÐºÐ°    Ð˜Ð¼Ñ�       ÐŸÐµÑ€Ð²Ñ‹Ð¹
                   Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ð¹  Ð’Ñ€ÐµÐ¼ÐµÐ½Ð¸   ÐŸÐµÑ€ÐµÑ�Ñ‹Ð»ÐºÐ¸  DLL       Ð¨Ð»ÑŽÐ·
-#<Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸>%03x %*.s  Ð»Ð¸Ñ�Ñ‚: Ð°Ð´Ñ€ÐµÑ�: %#08lx, Ñ€Ð°Ð·Ð¼ÐµÑ€: %#08lx, ÐºÐ¾Ð´Ð¾Ð²Ð°Ñ� Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð°: %d
+#<Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸>%%X%%P: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ», ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ñ€Ð¸Ð²Ñ�Ð·Ð°Ð½ Ð¸Ð·Ð²Ð½Ðµ, Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC
+%%X%%P: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»
+%03x %*.s  Ð»Ð¸Ñ�Ñ‚: Ð°Ð´Ñ€ÐµÑ�: %#08lx, Ñ€Ð°Ð·Ð¼ÐµÑ€: %#08lx, ÐºÐ¾Ð´Ð¾Ð²Ð°Ñ� Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð°: %d
 %03x %*.s Ð­Ð»ÐµÐ¼ÐµÐ½Ñ‚: %C: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ Â«%sÂ» Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
+%F%P: %pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� --gc-sections Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ» linked-to
+%F%P: %pB(%s): Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ð¸ Ñ‡Ð»ÐµÐ½Ð° Ñ‚Ð¾Ð½ÐºÐ¾Ð³Ð¾ Ð°Ñ€Ñ…Ð¸Ð²Ð°: %E
+%F%P: %pB: ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð½ÐµÐºÐ¾Ð¿Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»
+%F%P: %pB: ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð½ÐµÐºÐ¾Ð¿Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB
+%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ 32-Ð±Ð¸Ñ‚Ð½ÑƒÑŽ DT_RELR bitmap
+%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ 64-Ð±Ð¸Ñ‚Ð½ÑƒÑŽ DT_RELR bitmap
+%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ñ‹Ñ… Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹
+%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»
+%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð´Ð»Ñ� Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�
+%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�
+%F%P: %pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾
+%F%P: %pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ñ‹Ñ… Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½: Ð½Ð¾Ð²Ñ‹Ð¹ (%lu) != Ñ�Ñ‚Ð°Ñ€Ð¾Ð¼Ñƒ (%lu)
+%F%P: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ Â«%pAÂ» Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñƒ. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ðµ Ð±ÐµÐ· --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�: %E
 %F%P: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð±Ñ€Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�: %E
 %F%P: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ð²Ð²Ð¾Ð´: %pB
+%F%P: Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»: Â«%pAÂ»
 %F%P: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¼ Ð² Â«%pBÂ» Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIE Ð¸ Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -pie
-%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GOTPCREL; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ñ� --no-relax
-%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» BND PLT
 %F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð² GNU
 %F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» GOT PLT .eh_frame
 %F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» GOT PLT
 %F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ GOT
 %F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» PLT Ñ� Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼ IBT
 %F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» PLT .eh_frame
+%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» PLT .sframe
 %F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ VxWorks
 %F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ ifunc
+%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» PLT .sframe
 %F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» PLT .eh_frame
+%F%P: Ñ‡Ñ‚Ð¾-Ñ‚Ð¾ Ð½Ðµ Ñ‚Ð°Ðº Ñ� Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð¼Ð¸
 %F%pA: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ñ€Ð¾Ð²Ð½Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»
 %F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ PC Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ GOT PLT Ð´Ð»Ñ� Â«%sÂ»
 %F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ PC Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ PLT Ð´Ð»Ñ� Â«%sÂ»
 %F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð¸ Ð¿ÐµÑ€ÐµÑ�Ñ‚Ð°Ð½Ð¾Ð²ÐºÐ¸ Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ PLT Ð´Ð»Ñ� Â«%sÂ»
 %H __tls_get_addr Ð±ÐµÐ· Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°, Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� TLS Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°
 %H Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ lost __tls_get_addr, Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� TLS Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°
+%H: %s Ð´Ð»Ñ� %pT Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�
 %H: %s Ð´Ð»Ñ� Â«%pTÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ° %d
 %H: %s Ð´Ð»Ñ� Ð½ÐµÑ�Ð²Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%pTÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�
+%H: %s Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°
 %H: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼
 %H: %s Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ TOC
 %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ° %d
+%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð·Ð´ÐµÑ�ÑŒ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�
 %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¾Ð±Ñ‰Ð¸Ñ… Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°Ñ… Ð¸ PIE
 %H: %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%pTÂ»
 %H: %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� Ð½Ðµ TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%pTÂ»
@@ -1081,23 +1107,24 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 %H: Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ð² Â«%sÂ» Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾ %u
 %H: Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾ %u
 %H: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð¸ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹
+%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� got/toc Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s
 %H: Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ %s Ð´Ð»Ñ� Â«%sÂ»
 %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ Â«%sÂ» Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
 %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Â«%sÂ»: %s
 %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð½ÐµÑ�Ð²Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�
+%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð²ÐµÑ€Ð½ÑƒÐ»Ð¾ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %x
 %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð¼Ð¾Ð´ÑƒÐ»Ðµ
 %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Â«%s+%vÂ» Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð·Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹
-%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� toc Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s
+%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %u Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�
 %H: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%pTÂ»
 %H: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»
 %H: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %s Ð½Ðµ Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ insn %#x.
 %P%F: --relax Ð¸ -r Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²Ð¼ÐµÑ�Ñ‚Ðµ
 %P%X: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹: %E
-%P%X: Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ, Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð¼ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�, Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚Ñ�Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� IFUNC; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC
 %P%X: Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ, Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð¼ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�, Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚Ñ�Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�
-%P: %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� bss-plt
 %P: %H: Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ñ� Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹ %x
 %P: %pB: %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Â«%pTÂ»
+%P: %pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ %s
 %P: %pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»
 %P: %pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»
 %P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ opd Ñƒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° toc Ð´Ð»Ñ� Â«%pTÂ»
@@ -1106,9 +1133,15 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 %P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð´Ð»Ñ� Â«%pTÂ»
 %P: Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ñ‚Ð¾Ñ‡ÐµÐº Ð²Ñ…Ð¾Ð´Ð°: Ð² Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… %pB Ð¸ %pB
 %P: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�
+%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð²Ð½Ñ‹Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ GNU Ñ� DT_TEXTREL Ð¼Ð¾Ð³ÑƒÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� %s
+%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² PDE
+%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² PIE
 %P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ
 %P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð²Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð½ÐµÑ�Ð²Ð½Ñ‹Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ GNU Ð¼Ð¾Ð³ÑƒÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�
 %X%C: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ Â«%sÂ» Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
+%X%H: %s Ð´Ð»Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¾ Ð²Ð½Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°
+%X%H: %s Ð´Ð»Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÑ‡Ñ‘Ñ‚Ð½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ñ†ÐµÐ»ÐµÐ²Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�
+%X%H: %s Ð´Ð»Ñ� Â«%sÂ»: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d
 %X%H: @local Ð²Ñ‹Ð·Ð¾Ð² ifunc %s
 %X%H: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA Ð² JALX: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½
 %X%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC
@@ -1116,10 +1149,14 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 %X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA
 %X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� bss-plt -fPIC ifunc %s
 %X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¼ÐµÐ¶Ð´Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ð¾Ð¹ ÑƒÐ²Ñ�Ð·ÐºÐ¾Ð¹
+%X%P: %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� bss-plt
 %X%P: %pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %V
 %X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%RÂ» Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½
 %X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pRÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�
 %X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pRÂ» Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð¸Ð»Ð¾ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %x
+%X%P: %pB: %s Ñ� %pT Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² glibc ÐºÐ°Ðº Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ
+%X%P: %pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ %s
+%X%P: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° Â«%pBÂ»
 %X%P: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°
 %X%P: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°
 %X%P: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�
@@ -1130,21 +1167,23 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 %X%P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ Ñ�Ñ‚ÐµÐºÐ°/lrlive: %E
 %X%P:  Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð²Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð½ÐµÑ�Ð²Ð½Ñ‹Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ GNU Ð¿Ñ€Ð¸Ð²ÐµÐ´ÑƒÑ‚ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�
 %XÂ«%sÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð² Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð· %pB: Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½ Ð² Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ð¸Ð· %pB
-%pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ [Â«%pAÂ» Ð² %pB] Ð¸ Ð½ÐµÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ [Â«%pAÂ» Ð² %pB] Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹%pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ð¸ Ð½ÐµÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹%pA:0x%v lrlive .brinfo (%u) Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ð¾Ñ‚ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð³Ð¾ (%u)
+%pA:0x%v lrlive .brinfo (%u) Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ð¾Ñ‚ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð³Ð¾ (%u)
 %pA:0x%v Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹
-%pB (%s): Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%#lx)%pB .opd Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾ Ð² ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %d%pB Ð¸ %pB Ð´Ð»Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ñ… ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¹%pB Ð¸ %pB Ð´Ð»Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ�Ð´ÐµÑ€%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÐºÐ¾Ð´ CRIS v32, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÐºÐ¾Ð´ Ð½Ðµ CRIS v32, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾ Ð¸ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐ¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Tag_MPextension_use%pB Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�Ñ‚ÑŒ %s%pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %lu Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» SHT_SYMTAB_SHNDX%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ long double, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ 128-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ long double%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ ABI Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð² AltiVec, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ ABI Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð² SPE%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ long double Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ IBM, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ long double Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ IEEE%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð¾Ð¹ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ r3/r4 Ð´Ð»Ñ� Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¾Ð¹ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ñ‹, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ e_flags 0x%lx%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‹Ð·Ð¾Ð² Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ»%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�%pB(%pA): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²%pB(%pA): Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ TLS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %d Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %ld%pB(%pA): Ð¿Ñ€Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ð¸ Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�ÐºÐ»ÐµÐ¹ÐºÐ¸ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ð²ÐµÑ‚Ð²ÐµÐ¹, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° SHF_ARM_PURECODE, Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ†ÐµÐ»ÐµÐ¹ M-Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ�, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹ movw%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð² Ð¼Ð°Ð»Ð¾Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð´Ð°Ð½Ð½Ñ‹Ñ…%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ð¼Ð°Ð»Ñ‹Ð¼ Ð´Ð°Ð½Ð½Ñ‹Ð¼ Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d%pB(%pA+%#lx): Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ stabs Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸%pB(%pA+%#x): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ðº Ð² Ð½Ðµ Ð¿Ð¾Ñ�Ð»ÐµÐ´Ð½ÐµÐ¼ Ð±Ð»Ð¾ÐºÐµ IT: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gcc -mrestrict-it Ð´Ð»Ñ� Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð¾Ð´Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð² Ð±Ð»Ð¾ÐºÐµ IT%pB(%pA+0x%lx): Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ 16A Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x insn%pB(%pA+0x%lx): Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ 16D Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x insn%pB(%pA+0x%v): Ð²Ñ‹Ð·Ð¾Ð² Ð½Ðµ ÐºÐ¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pB(%pA), Ð°Ð½Ð°Ð»Ð¸Ð· Ð½Ðµ Ð¿Ð¾Ð»Ð¾Ð½
-%pB(%s): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ€Ð°Ð±Ð¾Ñ‚Ð° Ð½Ðµ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°; Ð¿ÐµÑ€Ð²Ð¾Ðµ ÑƒÐ¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ðµ: %pB: Ð²Ñ‹Ð·Ð¾Ð² %s Ð² %s%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð², Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð½ÐµÑ‚ PLT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð½ÐµÑ‚ Ð½Ð¸ PLT Ð½Ð¸ GOT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ Ð½Ð° Â«%sÂ»; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ð¹?%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð´Ð»Ñ� Â«%sÂ», Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ� Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ�Ñ‚ÑŒÑŽ Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ð¹?%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«%sÂ»%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«%sÂ», ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½ Ð²Ð½Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ð¹?%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð±ÐµÐ· Ñ�Ð¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ GOT%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: v10/v32 Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ Ð½Ðµ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ PIC%pB, Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ», Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ !samegp Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð±ÐµÐ· .prologue: %s%pB: %pA Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°%pB: %pA Ð½Ðµ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð¾%pB: %pA ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ‚ÐµÐºÑ�Ñ‚Ð°%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x > 0xffff%pB: Ñ„Ð»Ð°Ð³ %s Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: %s Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ñ‹Ð¼%pB: %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð¸Ñ‚Ð¸%pB: %s: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d%pB: %s: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %u (Ð¼Ð°ÐºÑ� %d)%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: 0x%lx > 0xffff%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð´Ð»Ñ� Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB: --in-implib Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐº Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Secure Gateway%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ .gnu.version_d%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ .gnu.version_r%pB: Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð´ÐµÐ» .got Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ 64K (Ñ€Ð°Ð·Ð¼ÐµÑ€ %d)%pB: .opd Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² opd%pB: Ñ€Ð°Ð·Ð´ÐµÐ» .preinit_array Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ°ÐµÑ‚Ñ�Ñ� Ð² DSO%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ñ€Ð°Ð·Ð´ÐµÐ» .rsrc Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ rsrc: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .rsrc%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @gprel Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ @internal Ðº Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @pcrel Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸ÐµÐ¹%pB: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸:
-  Ñ†ÐµÐ»ÑŒ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Â«%sÂ»%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ABI: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %ld Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð¾ Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð¾Ð¼ Ñ� ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %ld%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ASE: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: Ð¾Ð±Ñ€Ð°Ð·Ñ‹ BE8 Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ñ‹ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ big-endian%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼%pB: GNU_MBIN Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ sh_info: %d%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ GOT: ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ� 8-Ð¼Ð¸ Ð¸Ð»Ð¸ 16-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ > %d%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ GOT: ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ� 8-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ > %d%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° ISR Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð±Ñ‹Ð» %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹, Ñ�Ñ‚Ð°Ð» %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹%pB: ÐŸÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ð¾Ð¼ ELF (EM: %d)%pB: Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SB, Ð½Ð¾ __c6xabi_DSBT_BASE Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½%pB: Ñ€Ð°Ð·Ð´ÐµÐ» SHT_GROUP [Ð¸Ð½Ð´ÐµÐºÑ� %d] Ð½Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² SHF_GROUP%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ ÐºÐ¾Ð´ TLS Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¾Ð±Ñ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸%pB: Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ TLS Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ð½Ðµ Ñ€Ñ�Ð´Ð¾Ð¼:%pB: Ð¿ÐµÑ€Ð²Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ PT_DYNAMIC Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð¼ .dynamic%pB: Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ XCOFF Ð±ÐµÐ· Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð° XCOFF%pB: __gp Ð½Ðµ Ð¿Ð¾ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ñ…%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº FDPIC Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð¸Ñ‚Ð¸%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº FDPIC Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð´Ð»Ñ� Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB: Â«%sÂ» Ð¸ ÐµÐ³Ð¾ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð°Ñ…%pB: Â«%sÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾Ðº, Ð½Ð¾ Ð² Ð¾Ð±Ñ€Ð°Ð¼Ð»Ñ�ÑŽÑ‰ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ%pB: Â«%sÂ» Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ°, Ð½Ð¾ Ð½Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ°%pB: Ð½Ðµ PLT Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%sÂ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ð² Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ, Ðº ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼Ñƒ Ð¾Ð±Ñ€Ð°Ñ‰Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° (Ð¿ÐµÑ€ÐµÑ�Ð¾Ð±ÐµÑ€Ð¸Ñ‚Ðµ Ñ„Ð°Ð¹Ð» Ñ� -fPIC ?)%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ got%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ plt%pB: Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ aout ÑƒÐºÐ°Ð·Ð°Ð½ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ…: %ld%pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¹ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ Ð¸Ð· Ð½Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (Ð½Ð¾Ð¼ÐµÑ€ %d)%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�Ð¼ÐµÑˆÐ°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ FDPIC Ð¸ Ð½Ðµ FDPIC%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�%pB: Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸: %d%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ð¼Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² ihex_read_section%pB: Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«MainÂ» Ñ€Ð°Ð²ÐµÐ½ %s, Ð° Ð½Ðµ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %s
-%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�: %d%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð±Ð°Ð·Ð°-Ð¿Ð»ÑŽÑ�-Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: %s Ð² %pA%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð±Ð°Ð·Ð°-Ð¿Ð»ÑŽÑ�-Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: (Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾) Ð² %pA%pB: Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° a.out%pB: Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° a.out%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ RVE Ñ� Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ†ÐµÐ»ÑŒÑŽ%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð´Ð»Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ñ„Ð°Ð¹Ð»Ð° Ñ„Ð°Ð¹Ð»Ñƒ Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %d, %d Ð±Ð°Ð¹Ñ‚
-%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %s%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¶Ð°Ñ‚Ñ‹Ðµ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ„Ð°Ð¹Ð»Ñ‹ Alpha; Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ� Ð½ÐµÑ�Ð¶Ð°Ñ‚Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ‚Ð¾Ñ€Ð° Ð¸Ð»Ð¸ objZ.%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð», Ñ�Ð²Ð»Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� fdpic, Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ Ð½Ðµ fdpic%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð», Ð½Ðµ Ñ�Ð²Ð»Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� fdpic, Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ fdpic%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ %s Ð¸ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ%pB: Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ð² gp: BRSGP %s%pB: ÐºÐ»Ð°Ñ�Ñ� %d Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² aux%pB: ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ� %s -mtune=%s Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÑ‚Ñ�Ñ� Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� %s -mtune=%s%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� 64-Ð±Ð¸Ñ‚Ð½Ð¾Ð¹ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹, Ð° Ñ†ÐµÐ»ÑŒ 32-Ð±Ð¸Ñ‚Ð½Ð°Ñ�%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚, Ð° Ñ†ÐµÐ»ÑŒ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚, Ð° Ñ†ÐµÐ»ÑŒ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚%pB: Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ñ� %s Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� %s%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ñ� %s Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð½Ðµ-pic Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ�Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %pA Ð´Ð»Ñ� Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»
+%pB (%s): Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%#lx)%pB .opd Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾ Ð² ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %d%pB Ð¸ %pB Ð´Ð»Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ñ… ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¹%pB Ð¸ %pB Ð´Ð»Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ�Ð´ÐµÑ€%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÐºÐ¾Ð´ CRIS v32, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÐºÐ¾Ð´ Ð½Ðµ CRIS v32, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾ Ð¸ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐ¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Tag_MPextension_use%pB Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�Ñ‚ÑŒ %s%pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %lu Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» SHT_SYMTAB_SHNDX%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ long double, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ 128-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ long double%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ ABI Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð² AltiVec, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ ABI Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð² SPE%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ long double Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ IBM, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ long double Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ IEEE%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð¾Ð¹ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ r3/r4 Ð´Ð»Ñ� Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¾Ð¹ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ñ‹, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ e_flags 0x%lx%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‹Ð·Ð¾Ð² Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ»%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‚ Ð´Ð»Ñ� Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %zu Ð¿ÑƒÑ�Ñ‚%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %zu Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ð°%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %zu Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %zu Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ñ‹ Ð½ÐµÑ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ñ‹ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð¿ÑƒÑ�Ñ‚!%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ð´Ð²Ð°Ð¶Ð´Ñ‹%pB(%pA): Ð½ÐµÐ»ÑŒÐ·Ñ� Ð·Ð°Ð´Ð°Ñ‚ÑŒ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸, Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð² Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ðµ%pB(%pA): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�%pB(%pA): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²%pB(%pA): Ð½ÐµÐ»ÑŒÐ·Ñ� Ð·Ð°Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ñ�Ñ‹Ð»Ð¾Ðº, Ñ‚Ð°Ðº ÐºÐ°Ðº Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð» Ð½Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²%pB(%pA): Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ TLS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %d Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %ld%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %zu Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %lu%pB(%pA): Ð¿Ñ€Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ð¸ Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�ÐºÐ»ÐµÐ¹ÐºÐ¸ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ð²ÐµÑ‚Ð²ÐµÐ¹, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° SHF_ARM_PURECODE, Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ†ÐµÐ»ÐµÐ¹ M-Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ�, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹ movw%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð² Ð¼Ð°Ð»Ð¾Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð´Ð°Ð½Ð½Ñ‹Ñ…%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ð¼Ð°Ð»Ñ‹Ð¼ Ð´Ð°Ð½Ð½Ñ‹Ð¼ Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d%pB(%pA+%#lx): Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ stabs Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸%pB(%pA+%#x): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ðº Ð² Ð½Ðµ Ð¿Ð¾Ñ�Ð»ÐµÐ´Ð½ÐµÐ¼ Ð±Ð»Ð¾ÐºÐµ IT: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gcc -mrestrict-it Ð´Ð»Ñ� Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð¾Ð´Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð² Ð±Ð»Ð¾ÐºÐµ IT%pB(%pA+0x%lx): Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ 16A Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x insn%pB(%pA+0x%lx): Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ 16D Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x insn%pB(%pA+0x%v): Ð²Ñ‹Ð·Ð¾Ð² Ð½Ðµ ÐºÐ¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pB(%pA), Ð°Ð½Ð°Ð»Ð¸Ð· Ð½Ðµ Ð¿Ð¾Ð»Ð¾Ð½
+%pB(%s): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ€Ð°Ð±Ð¾Ñ‚Ð° Ð½Ðµ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°; Ð¿ÐµÑ€Ð²Ð¾Ðµ ÑƒÐ¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ðµ: %pB: Ð²Ñ‹Ð·Ð¾Ð² %s Ð² %s%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð², Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð½ÐµÑ‚ PLT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð½ÐµÑ‚ Ð½Ð¸ PLT Ð½Ð¸ GOT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ Ð½Ð° Â«%sÂ»; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ð¹?%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð´Ð»Ñ� Â«%sÂ», Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ� Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ�Ñ‚ÑŒÑŽ Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ð¹?%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«%sÂ»%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«%sÂ», ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½ Ð²Ð½Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ð¹?%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð±ÐµÐ· Ñ�Ð¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ GOT%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: v10/v32 Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ Ð½Ðµ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ PIC%pB, Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ», Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ !samegp Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð±ÐµÐ· .prologue: %s%pB: %pA Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°%pB: %pA Ð½Ðµ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð¾%pB: %pA ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ‚ÐµÐºÑ�Ñ‚Ð°%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x > 0xffff%pB: %s (Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: x%v, Ð¸Ð½Ñ„Ð¾: 0x%v) Ð² Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð² %pB
+%pB: %s (Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%v, Ð¸Ð½Ñ„Ð¾: 0x%v, Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ: 0x%v) Ð² Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð² %pB
+%pB: Ñ„Ð»Ð°Ð³ %s Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñ� Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu (>= sh_info Ñ� %lu)%pB: %s Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ñ‹Ð¼%pB: %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð¸Ñ‚Ð¸%pB: %s: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d%pB: %s: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %u (Ð¼Ð°ÐºÑ� %d)%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: 0x%lx > 0xffff%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð´Ð»Ñ� Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB: --in-implib Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐº Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Secure Gateway%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ .gnu.version_d%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ .gnu.version_r%pB: Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð´ÐµÐ» .got Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ 64K (Ñ€Ð°Ð·Ð¼ÐµÑ€ %d)%pB: .opd Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² opd%pB: Ñ€Ð°Ð·Ð´ÐµÐ» .preinit_array Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ°ÐµÑ‚Ñ�Ñ� Ð² DSO%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ñ€Ð°Ð·Ð´ÐµÐ» .rsrc Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ rsrc: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .rsrc%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @gprel Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ @internal Ðº Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @pcrel Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸ÐµÐ¹%pB: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸:
+  Ñ†ÐµÐ»ÑŒ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Â«%sÂ»%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ABI: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %ld Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð¾ Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð¾Ð¼ Ñ� ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %ld%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ASE: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: Ð¾Ð±Ñ€Ð°Ð·Ñ‹ BE8 Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ñ‹ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ big-endian%pB: C_STAT Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² XCOFF64%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Â«%sÂ»%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼%pB: GNU_MBIND Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ sh_info: %d%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ GOT: ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ� 8-Ð¼Ð¸ Ð¸Ð»Ð¸ 16-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ > %d%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ GOT: ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ� 8-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ > %d%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° ISR Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð±Ñ‹Ð» %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹, Ñ�Ñ‚Ð°Ð» %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹%pB: ÐšÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð²Ð¾ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ñ� %lu Ð´Ð¾ %u
+%pB: ÐŸÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ð¾Ð¼ ELF (EM: %d)%pB: Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SB, Ð½Ð¾ __c6xabi_DSBT_BASE Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½%pB: Ñ€Ð°Ð·Ð´ÐµÐ» SHT_GROUP [Ð¸Ð½Ð´ÐµÐºÑ� %d] Ð½Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² SHF_GROUP%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ ÐºÐ¾Ð´ TLS Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¾Ð±Ñ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS %s Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ TLS Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ð½Ðµ Ñ€Ñ�Ð´Ð¾Ð¼:%pB: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ TOC Â«%sÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_TLSML Ð½Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‰ÐµÐµ Ð½Ð° Ñ�ÐµÐ±Ñ�%pB: Ð¿ÐµÑ€Ð²Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ PT_DYNAMIC Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð¼ .dynamic%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %x Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ ELF. Ð’Ð¼ÐµÑ�Ñ‚Ð¾ Ð½ÐµÐ³Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼ ABS.%pB: Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ XCOFF Ð±ÐµÐ· Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð° XCOFF%pB: __gp Ð½Ðµ Ð¿Ð¾ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ñ…%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº FDPIC Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð¸Ñ‚Ð¸%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº FDPIC Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð´Ð»Ñ� Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB: Â«%sÂ» Ð¸ ÐµÐ³Ð¾ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð°Ñ…%pB: Â«%sÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾Ðº, Ð½Ð¾ Ð² Ð¾Ð±Ñ€Ð°Ð¼Ð»Ñ�ÑŽÑ‰ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ%pB: Â«%sÂ» Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ°, Ð½Ð¾ Ð½Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ°%pB: Ð½Ðµ PLT Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%sÂ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ð² Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ, Ðº ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼Ñƒ Ð¾Ð±Ñ€Ð°Ñ‰Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° (Ð¿ÐµÑ€ÐµÑ�Ð¾Ð±ÐµÑ€Ð¸Ñ‚Ðµ Ñ„Ð°Ð¹Ð» Ñ� -fPIC ?)%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ got%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ plt%pB: Ð¿Ð¾Ð´Ñ�Ñ‚Ñ€Ð°Ð¸Ð²Ð°ÐµÐ¼ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ FileAlignment%pB: Ð¿Ð¾Ð´Ñ�Ñ‚Ñ€Ð°Ð¸Ð²Ð°ÐµÐ¼ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ SectionAlignment%pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¹ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ Ð¸Ð· Ð½Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (Ð½Ð¾Ð¼ÐµÑ€ %d)%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�Ð¼ÐµÑˆÐ°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ FDPIC Ð¸ Ð½Ðµ FDPIC%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�%pB: Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸: %d%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ð¼Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² ihex_read_section%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�: %d%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð±Ð°Ð·Ð°-Ð¿Ð»ÑŽÑ�-Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: %s Ð² %pA%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð±Ð°Ð·Ð°-Ð¿Ð»ÑŽÑ�-Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: (Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾) Ð² %pA%pB: Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° a.out%pB: Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° a.out%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ RVE Ñ� Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ†ÐµÐ»ÑŒÑŽ%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ Ñ� Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ ABI.%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð´Ð»Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ñ„Ð°Ð¹Ð»Ð° Ñ„Ð°Ð¹Ð»Ñƒ Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %d, %d Ð±Ð°Ð¹Ñ‚
+%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² GOT%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %s%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¶Ð°Ñ‚Ñ‹Ðµ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ„Ð°Ð¹Ð»Ñ‹ Alpha; Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ� Ð½ÐµÑ�Ð¶Ð°Ñ‚Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ‚Ð¾Ñ€Ð° Ð¸Ð»Ð¸ objZ.%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð», Ñ�Ð²Ð»Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� fdpic, Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ Ð½Ðµ fdpic%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð», Ð½Ðµ Ñ�Ð²Ð»Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� fdpic, Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ fdpic%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ %s Ð¸ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ%pB: Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ð² gp: BRSGP %s%pB: ÐºÐ»Ð°Ñ�Ñ� %d Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² aux%pB: ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ� %s -mtune=%s Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÑ‚Ñ�Ñ� Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� %s -mtune=%s%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� 64-Ð±Ð¸Ñ‚Ð½Ð¾Ð¹ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹, Ð° Ñ†ÐµÐ»ÑŒ 32-Ð±Ð¸Ñ‚Ð½Ð°Ñ�%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚, Ð° Ñ†ÐµÐ»ÑŒ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚, Ð° Ñ†ÐµÐ»ÑŒ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚%pB: Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ñ� %s Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� %s%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ñ� %s Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð½Ðµ-pic Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ�Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾ ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %pA Ð´Ð»Ñ� Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»
 %pB: csect Â«%sÂ» Ð½Ðµ Ð² Ð¾Ð±Ñ€Ð°Ð¼Ð»Ñ�ÑŽÑ‰ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ%pB: Ð¿Ñ€Ñ�Ð¼Ð¾Ðµ GOT Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s c Â«%sÂ» Ð±ÐµÐ· Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿Ñ€Ñ�Ð¼Ð¾Ðµ GOT Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_386_GOT32X c Â«%sÂ» Ð±ÐµÐ· Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° LOCAL Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð¼ Ð¸Ð»Ð¸ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ñ‹Ð¼ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼%pB: dtp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ñ‹Ð¹ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %s%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð´Ñ€ÑƒÐ³Ð¾Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ
 %pB: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€
 %pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ Ð±ÐµÐ· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .loader%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Â«%pTÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»
 %pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»
-%pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸ÐµÐ¹%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¿ÑƒÑ�Ñ‚Ð°%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð² Ð²Ñ‹Ð²Ð¾Ð´Ðµ%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Cortex-A8 Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð° Ð² Ð½ÐµÐ±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð¼ Ð¼ÐµÑ�Ñ‚Ðµ%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Cortex-A8 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐºÐ»ÐµÐ¹ÐºÐ° VFP11 Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÑ€Ð°Ñ‚Ð½Ð¾Ñ�Ñ‚ÑŒ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ� %d Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ°%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Â«%pAÂ»: %#llx%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÐ¾Ð½ÐµÑ† Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð·Ð° Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸ÐµÐ¼ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 835769 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½Ð°Ð±Ð¾Ñ€ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¼Ð½Ð¾Ð¶ÐµÑ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»; Ð½Ð°Ñ‡Ð°Ð»Ð¾ %s ÑƒÑ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð² Ñ€Ð°Ð½ÐµÐµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ %d Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¸/Ð¸Ð»Ð¸ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ñ‹Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: search_nds32_elf_blank Ñ�Ð¾Ð¾Ð±Ñ‰Ð°ÐµÑ‚ Ð¾ Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ð¼ ÑƒÐ·Ð»Ðµ%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ COMDAT%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ñ�Ñ‹Ð»Ð¾Ðº Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼ÑƒÑŽ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ…%pB: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ´ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸ÐµÐ¼ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ñ‹ Ð¾Ð±Ñ‰Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹%pB: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ ÐºÐ»Ð°Ñ�Ñ� %s Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� %s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ gotoff Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: gp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Ð³Ñ€ÑƒÐ¿Ð¿ Â«%pAÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾%pB: Ð½Ð° Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO%pB: Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½%pB: Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ»
+%pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸ÐµÐ¹%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¿ÑƒÑ�Ñ‚Ð°%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð² Ð²Ñ‹Ð²Ð¾Ð´Ðµ%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Cortex-A8 Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð° Ð² Ð½ÐµÐ±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð¼ Ð¼ÐµÑ�Ñ‚Ðµ%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Cortex-A8 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐºÐ»ÐµÐ¹ÐºÐ° VFP11 Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÑ€Ð°Ñ‚Ð½Ð¾Ñ�Ñ‚ÑŒ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ� %d Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ°%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Â«%pAÂ»: %#llx%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð°: %ld%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÐ¾Ð½ÐµÑ† Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð·Ð° Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸ÐµÐ¼ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 835769 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½Ð°Ð±Ð¾Ñ€ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¼Ð½Ð¾Ð¶ÐµÑ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»; Ð½Ð°Ñ‡Ð°Ð»Ð¾ %s ÑƒÑ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð² Ñ€Ð°Ð½ÐµÐµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ %d Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¸/Ð¸Ð»Ð¸ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ñ‹Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: search_nds32_elf_blank Ñ�Ð¾Ð¾Ð±Ñ‰Ð°ÐµÑ‚ Ð¾ Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ð¼ ÑƒÐ·Ð»Ðµ%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ COMDAT%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d%pB: Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð² Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ðµ 0..%lu, Ð½Ð¾ Ð½Ð°Ð¹Ð´ÐµÐ½ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ñ�Ñ‹Ð»Ð¾Ðº Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼ÑƒÑŽ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ…%pB: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ´ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸ÐµÐ¼ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ñ‹ Ð¾Ð±Ñ‰Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹%pB: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ ÐºÐ»Ð°Ñ�Ñ� %s Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� %s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ gotoff Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: gp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Ð³Ñ€ÑƒÐ¿Ð¿ Â«%pAÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾%pB: Ð½Ð° Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO%pB: Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½%pB: Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ»
 %pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ð¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %ld Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ñ…%pB: Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿; Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ 0x%x; Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ 0x%x%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ðº Â«%sÂ» Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚ Ð·Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ðµ%pB: Ð½Ð°Ð±Ð¾Ñ€ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñƒ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² ihex_read_section%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°, Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² %pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ðµ
 %pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°, Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ� %d Ñ�Ð»Ð¾Ð² Ð´Ð¾ %d
-%pB: Ð½Ð° Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ SHT_GROUP [%u]%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸: Â«%sÂ»; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ñ‹Ð¼, Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¼ Ð¸Ð»Ð¸ Ñ�Ñ�Ñ‹Ð»Ð°Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Thumb%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° %u Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %s (Ð¸Ð½Ð´ÐµÐºÑ� %u)%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: YZ Ð² lop_end (%ld) Ð½Ðµ Ñ€Ð°Ð²Ð½Ð¾ Ñ‡Ð¸Ñ�Ð»Ñƒ Ñ‚ÐµÑ‚Ñ€Ð°Ð´ Ð² ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¹ Ñ€Ð°Ð½ÐµÐµ lop_stab (%ld)
+%pB: Ð½Ð° Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ NumberOfRvaAndSizes%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ SHT_GROUP [%u]%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸: Â«%sÂ»; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ñ‹Ð¼, Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¼ Ð¸Ð»Ð¸ Ñ�Ñ�Ñ‹Ð»Ð°Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Thumb%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° %u Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %s (Ð¸Ð½Ð´ÐµÐºÑ� %u)%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: YZ Ð² lop_end (%ld) Ð½Ðµ Ñ€Ð°Ð²Ð½Ð¾ Ñ‡Ð¸Ñ�Ð»Ñƒ Ñ‚ÐµÑ‚Ñ€Ð°Ð´ Ð² ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¹ Ñ€Ð°Ð½ÐµÐµ lop_stab (%ld)
 %pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð´Ð»Ñ� lop_quote Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ YZ = 1, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ YZ = %d
 %pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð´Ð»Ñ� lop_fixrx Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ y = 0, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ y = %d
 %pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð´Ð»Ñ� lop_fixo Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ z = 1 Ð¸Ð»Ð¸ z = 2, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ z = %d
@@ -1158,15 +1197,19 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 %pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: lop_end Ð½Ðµ Ð¿Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¸Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð² Ñ„Ð°Ð¹Ð»Ðµ
 %pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ lopcode Â«%dÂ»
 %pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ sh_link (%d) Ð² Ð½Ð¾Ð¼ÐµÑ€Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»; Ñ�Ñ‚Ð¾ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð»Ð¸ Ñ�Ð»Ð°Ð±Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»; Ñ�Ñ‚Ð¾ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð»Ð¸ Ñ�Ð»Ð°Ð±Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»
-%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ñ�Ñ‚Ñ€Ð¾Ðº: 0x%lx > 0xffff%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð° Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ ÐºÐ¾Ð´Ð¾Ð¼%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼Ð¸ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: UltraSPARC-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ� HAL-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ñ‹Ð¼ ÐºÐ¾Ð´Ð¾Ð¼%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° auto-pic Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-auto-pic Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚ Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° constant-gp Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-constant-gp Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð², Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð´Ð»Ñ� 16-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ†ÐµÐ»Ñ‹Ñ… (-mshort), Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ� 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ†ÐµÐ»Ñ‹Ñ…%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð², Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð´Ð»Ñ� 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… double (-fshort-double), Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… double%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð², Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð´Ð»Ñ� HCS12, Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ� HC12%pB: Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚ Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð½Ðµ-pic ÐºÐ¾Ð´Ð° Ð² Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð¾-Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° trap-on-NULL-dereference Ñ� Ð½Ðµ-trapping Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA, Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð¼ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ° Ð² Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%sÂ»%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO%pB: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð±ÑƒÐ´ÐµÑ‚ Ñ€Ð°Ð²Ð½Ð° NULL, ÐµÑ�Ð»Ð¸ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼%pB: Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ†ÐµÐ»ÑŒÑŽ%pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA%pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %s%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ð¹ XTY_LD Â«%sÂ»%pB: Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ðµ OMIT_FP Ð² %pA%pB: Ð½ÐµÑ‚ core Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� %d Ð±Ð°Ð¹Ñ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%pB: Ð½ÐµÑ‚ core Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s%pB: Ð½ÐµÑ‚ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð³Ñ€ÑƒÐ¿Ð¿Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»%pB: Ð½ÐµÑ‚ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²; Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ€Ð°Ð²Ð½Ð° 0
-%pB: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð²ÐµÑ€Ñ�Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð´Ð»Ñ� Ð²ÐµÑ€Ñ�Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² Ð³Ñ€ÑƒÐ¿Ð¿%pB: Ð½Ðµ-pic ÐºÐ¾Ð´ Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ imm Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð½Ðµ-pic Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð´Ð»Ñ� Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, Ð¿Ð¾Ð¿Ñ‹Ñ‚Ð°Ð¹Ñ‚ÐµÑ�ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -N%pB: Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ñ‹ %%g[2367] Ð¼Ð¾Ð³ÑƒÑ‚ Ð¾Ð±ÑŠÑ�Ð²Ð»Ñ�Ñ‚ÑŒÑ�Ñ� Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ STT_REGISTER%pB: Ð½Ðµ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ð¿ÑƒÑ�Ñ‚Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð² _bfd_elf_get_property%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ (0x%x)%pB: pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° lto Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¼Ð¾Ð´ÑƒÐ»ÑŒ%pB: Ð²ÐµÑ€Ð¾Ñ�Ñ‚Ð½Ð¾, ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ†Ð¸Ñ� Ð±ÐµÐ· -fPIC?%pB: Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½%pB: Ñ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½, Ð½Ð¾ Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ (0x%x) Ð² Ð°Ñ€Ñ…Ð¸Ð²Ðµ Import Library Format%pB: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½ÐµÑ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: %s Ð² %pA%pB: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½ÐµÑ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: (Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾) Ð² %pA%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰ÐµÐ¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¸Ð½Ð´ÐµÐºÑ�Ñƒ: %ld%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð¸Ð· %s Ð² %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� %s%sÂ«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ %s%s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ Ñ� STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ» Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� %s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ð¸Ð»Ð¸ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ %s; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ x32%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ», ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ñ€Ð¸Ð²Ñ�Ð·Ð°Ð½ Ð¸Ð·Ð²Ð½Ðµ, Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_386_GOTOFF Ð´Ð»Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð¹ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_386_GOTOFF Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_X86_64_GOTOFF64 Ð´Ð»Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_X86_64_GOTOFF64 Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ð¾Ð¼ ELF (EM: %d)%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ», Ð½Ð¾ Ð¾Ð½ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾%pB: Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ñ‚Ñ€Ð¾Ðº Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %ld%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ %d%pB: Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² %u Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ sh_link [%d] Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»%pB: sh_link Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð· Â«%pBÂ»%pB: sh_link Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð· Â«%pBÂ»%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿Ð¾Ð»Ñ� Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Import Library Format%pB: Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ€Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ ARMv8-M Ð¸ Ð½Ð¾Ð²ÐµÐµ%pB: Ð´Ð¾Ð³Ð°Ð´ÐºÐ° Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: ÑƒÐºÐ°Ð·Ð°Ð½ Ð¸ Ð·Ð°Ð´Ð°Ð½ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ° %s%pB: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ð½Ðµ Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð½ÑƒÐ»Ñ‘Ð¼ Ð² Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ ILF%pB: Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð°%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ csect: %d%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ smclas %d%pB: Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ð½Ð¾ Ð¾Ð½ Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚%pB: Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ðµ Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¾ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸%pB: Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ (%s) Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð² Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» (%s)%pB: Ñ†ÐµÐ»ÑŒ (%s) Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð² Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%pA)%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² (%d)%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²: %d (>= %d)%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²: %u%pB: tp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ„Ð¸ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¹ Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[12], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$5%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[1], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$2%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[1], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$4%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[9], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ __tls_used%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$6%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$6%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ»%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¸Ð¼Ñ� Ð¿ÑƒÑ�Ñ‚Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ Ñ€Ð°Ñ�Ð¶Ð°Ñ‚Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %pA%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð¸Ðµ Ñ�Ð¶Ð°Ñ‚Ð¸Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð¸Ðµ Ñ€Ð°Ð·Ð¶Ð°Ñ‚Ð¸Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ð¸Ð¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° COMDAT%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� â€” Ð¾Ð½Ð¸ Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð²%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� â€” Ð¾Ð½Ð¸ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .opd%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ R_PPC64_TOCSAVE%pB: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ€Ñ�Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %u Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .opd%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� %s%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %s%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° ARC %d%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ [%#x] Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ [%#x] Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ» Ð² Ð³Ñ€ÑƒÐ¿Ð¿Ðµ [%pA]%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ OMIT_FP Ð² %pA%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ (0x%x) Ð² Ð°Ñ€Ñ…Ð¸Ð²Ðµ Import Library Format%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¸Ð¼ÐµÐ½Ð½Ð¾Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %#x Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ ÐºÐ»Ð°Ñ�Ñ� Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %d Ð´Ð»Ñ� %s, Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð½Ðµ PIC Ð²Ñ‹Ð·Ð¾Ð² IFUNC Â«%sÂ»%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#x%pB: Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x%pB: Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� : %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ Ð¸Ð· %s Ð² %s%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� Ð¿Ð¾Ñ�Ð»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñ�Ñ‚ÑŒ ÑˆÐ¸Ñ€Ð¾ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² 0x%02X 0x%02X Ð¿Ð¾Ñ�Ð»Ðµ Ð¸Ð¼ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ� Ñ� Â«%sÂ»
-%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ñ…Ð¾Ñ‚Ñ� Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ð¸Ñ�ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ _, Ð½Ð¾ Ð² Ñ„Ð°Ð¹Ð» Ð·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð²%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‚Ñ�Ñ� Ð¾Ñ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ðµ Ð¿Ð¾Ð»Ñ� e_flags (%#x), Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð¾Ñ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸, Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ�Ð¼Ð¸, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð²ÑˆÐ¸Ð¼Ð¸Ñ�Ñ� Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð° _, Ð½Ð¾ Ð² Ñ„Ð°Ð¹Ð» Ð·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ _%pB: Ð²ÐµÑ€Ñ�Ð¸Ñ� ÑƒÐ·Ð»Ð° Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð°Ñ�ÑŒ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð» core ÑƒÑ�ÐµÑ‡Ñ‘Ð½%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#x > 0xffff%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� BLX %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ %s Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ñ€ÐµÐ¶Ð¸Ð¼Ðµ%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: 0x%lx > 0xffff%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² COMDAT Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� RVE PLT Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½ Ð½Ðµ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° Â«%sÂ» (%u) Ð¼ÐµÐ½ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ ÐµÐ³Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´Ð°ÐµÑ‚Ñ�Ñ�, Ñ‡Ñ‚Ð¾ ÐµÑ�Ñ‚ÑŒ 0xffff Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹, Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ� Ð¾ Ð½Ð¾Ð¼ÐµÑ€Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ Ð´Ð»Ñ� Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %s%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %d Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %ld Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ñ…%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� 0x%lx Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ %d%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ elf %s Ð¸ %s%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ ASE Ð¼ÐµÐ¶Ð´Ñƒ e_flags Ð¸ .MIPS.abiflags%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ FP ABI Ð¼ÐµÐ¶Ð´Ñƒ .gnu.attributes Ð¸ .MIPS.abiflags%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ ISA Ð¼ÐµÐ¶Ð´Ñƒ e_flags Ð¸ .MIPS.abiflags%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ð¹ ISA Ð¼ÐµÐ¶Ð´Ñƒ e_flags Ð¸ .MIPS.abiflags%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: isymMax (%ld) Ð±Ð¾Ð»ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ ifdMax (%ld)%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð° Ñ�Ñ‚Ñ€Ð¾Ðº (%#lx) Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#lx)%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñƒ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÑ‚Ñ�Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° PIC-Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-PIC Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² abicalls Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð½Ðµ-abicalls%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð·Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ðµ Ð² Ð·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ð¾Ñ�Ñ‚Ñ�Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿ÑƒÑ�Ñ‚Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %u%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿ÑƒÑ�Ñ‚Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %u%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ñ�Ñ‚Ð°Ñ€Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°, Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð²%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SDA_BASE%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¹ Ð¾Ð±Ñ…Ð¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ STM32L4XX Ð½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¹ Ð¾Ð±Ñ…Ð¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ VFP11 Ð½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð·Ð°Ð´Ð°Ð½ sh_link Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ� Ð´Ð»Ñ� mmo, Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ‡ÐµÐ¼ 65535 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²: %d. Ð‘ÑƒÐ´ÐµÑ‚ Ð²Ñ‹Ð´Ð°Ð½Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Â«MainÂ».
-%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� PLT Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ thumb-1 Ð¿Ð¾ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ñƒ GOT%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ Ð² Ð¿Ð¾Ð»Ðµ flags2 Ñƒ .MIPS.abiflags (0x%lx)%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ� Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚ Ñ€ÐµÑˆÐµÐ½Ð¾%pB:%d: Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ� Ñ�ÑƒÐ¼Ð¼Ð° Ð² Ñ„Ð°Ð¹Ð»Ðµ S-record%pB:%d: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð±Ð°Ð¹Ñ‚ %d Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»%pB:%d: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%d: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ„Ð°Ð¹Ð»Ðµ S-record%pB:%pA%s Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�
-%pB:%pA: %s Ð¸ %s Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¾Ð´Ð½Ð¾Ð¼ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð±Ñ‹Ð» ÑƒÐ´Ð°Ð»Ñ‘Ð½ Ñ�Ð±Ð¾Ñ€Ñ‰Ð¸ÐºÐ¾Ð¼ Ð¼ÑƒÑ�Ð¾Ñ€Ð°%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼ --gc-keep-exported%pB:%pA: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° %s, Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð°Ñ� %s%pB:%pA: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ %s Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½ Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð°%pB:%pA: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ %s Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹%pB:%pA: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐµÐµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Red Hat %s Ð´Ð»Ñ�: %s%pB:%s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� TLS%pB:%s Ñ€Ð°Ð·Ð´ÐµÐ» %s: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ 2**%u Ð½Ðµ Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ð¾%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ� Ñ�ÑƒÐ¼Ð¼Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ (Ð´Ð¾Ð»Ð¶Ð½Ð° Ð±Ñ‹Ñ‚ÑŒ %u, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð° %u)%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ñ�Ð¼Ð¾Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ñ�Ð¼Ð¾Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ð³Ð¾ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%u: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ ihex-Ñ‚Ð¸Ð¿ %u Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%s Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½ Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ toc%s Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÐµÑ‚Ñ�Ñ�
+%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ %lx (Ð¼Ð°ÐºÑ� %lx)%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ñ�Ñ‚Ñ€Ð¾Ðº: 0x%lx > 0xffff%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð° Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ ÐºÐ¾Ð´Ð¾Ð¼%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼Ð¸ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: UltraSPARC-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ� HAL-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ñ‹Ð¼ ÐºÐ¾Ð´Ð¾Ð¼%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° auto-pic Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-auto-pic Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚ Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° constant-gp Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-constant-gp Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð², Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð´Ð»Ñ� 16-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ†ÐµÐ»Ñ‹Ñ… (-mshort), Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ� 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ†ÐµÐ»Ñ‹Ñ…%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð², Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð´Ð»Ñ� 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… double (-fshort-double), Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… double%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð², Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð´Ð»Ñ� HCS12, Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ� HC12%pB: Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚ Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð½Ðµ-pic ÐºÐ¾Ð´Ð° Ð² Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð¾-Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° trap-on-NULL-dereference Ñ� Ð½Ðµ-trapping Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA, Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð¼ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ° Ð² Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%sÂ»%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO%pB: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð±ÑƒÐ´ÐµÑ‚ Ñ€Ð°Ð²Ð½Ð° NULL, ÐµÑ�Ð»Ð¸ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼%pB: Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ†ÐµÐ»ÑŒÑŽ%pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA%pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %s%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ð¹ XTY_LD Â«%sÂ»%pB: Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ðµ OMIT_FP Ð² %pA%pB: Ð½ÐµÑ‚ core Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� %d Ð±Ð°Ð¹Ñ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%pB: Ð½ÐµÑ‚ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð³Ñ€ÑƒÐ¿Ð¿Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»%pB: Ð½ÐµÑ‚ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²; Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ€Ð°Ð²Ð½Ð° 0
+%pB: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð²ÐµÑ€Ñ�Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð´Ð»Ñ� Ð²ÐµÑ€Ñ�Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² Ð³Ñ€ÑƒÐ¿Ð¿%pB: Ð½ÐµÐºÐ°Ð½Ð¾Ð½Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° ÐºÐ°Ð½Ð¾Ð½Ð¸Ñ‡ÐµÑ�ÐºÑƒÑŽ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½ÑƒÑŽ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ Â«%sÂ» Ð² %pB%pB: Ð½Ðµ-pic ÐºÐ¾Ð´ Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ imm Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð½Ðµ-pic Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð´Ð»Ñ� Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, Ð¿Ð¾Ð¿Ñ‹Ñ‚Ð°Ð¹Ñ‚ÐµÑ�ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -N%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð²ÐµÑ€Ñ�Ð¸Ð¸%pB: Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ñ‹ %%g[2367] Ð¼Ð¾Ð³ÑƒÑ‚ Ð¾Ð±ÑŠÑ�Ð²Ð»Ñ�Ñ‚ÑŒÑ�Ñ� Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ STT_REGISTER%pB: Ð½Ðµ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ð¿ÑƒÑ�Ñ‚Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð² _bfd_elf_get_property%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸ÐºÐ° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾%pB: pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° lto Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¼Ð¾Ð´ÑƒÐ»ÑŒ%pB: Ð²ÐµÑ€Ð¾Ñ�Ñ‚Ð½Ð¾, ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ†Ð¸Ñ� Ð±ÐµÐ· -fPIC?%pB: Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½%pB: Ñ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½, Ð½Ð¾ Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ (0x%x) Ð² Ð°Ñ€Ñ…Ð¸Ð²Ðµ Import Library Format%pB: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½ÐµÑ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: %s Ð² %pA%pB: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½ÐµÑ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: (Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾) Ð² %pA%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %#x Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰ÐµÐ¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¸Ð½Ð´ÐµÐºÑ�Ñƒ: %ld%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð¸Ð· %s Ð² %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� %s%sÂ«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ %s%s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ Ñ� STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ» Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� %s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ð¸Ð»Ð¸ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ %s; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² RV32 Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² RV64 Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ x32%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ», ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ñ€Ð¸Ð²Ñ�Ð·Ð°Ð½ Ð¸Ð·Ð²Ð½Ðµ, Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s 0x%lx%pB: Ð¿Ñ€Ð¸ Ñ�Ð´Ð²Ð¸Ð³Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð²Ð¿Ñ€Ð°Ð²Ð¾ Ð½Ð° %d Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð° Ð¾ÑˆÐ¸Ð±ÐºÐ° 0x%lx%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_386_GOTOFF Ð´Ð»Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð¹ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_386_GOTOFF Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_X86_64_GOTOFF64 Ð´Ð»Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_X86_64_GOTOFF64 Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ð¾Ð¼ ELF (EM: %d)%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ», Ð½Ð¾ Ð¾Ð½ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾%pB: Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ñ‚Ñ€Ð¾Ðº Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %ld%pB: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ñ�Ð¶Ð°Ñ‚ Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ zstd, Ð½Ð¾ BFD Ñ�Ð¾Ð±Ñ€Ð°Ð½Ð° Ð±ÐµÐ· Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ zstd%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pA:Â» Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ VTENTRY%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ %d%pB: Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² %u Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ sh_link [%d] Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»%pB: sh_link Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð· Â«%pBÂ»%pB: sh_link Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð· Â«%pBÂ»%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿Ð¾Ð»Ñ� Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Import Library Format%pB: Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ€Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ ARMv8-M Ð¸ Ð½Ð¾Ð²ÐµÐµ%pB: Ð´Ð¾Ð³Ð°Ð´ÐºÐ° Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: ÑƒÐºÐ°Ð·Ð°Ð½ Ð¸ Ð·Ð°Ð´Ð°Ð½ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ° %s%pB: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ð½Ðµ Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð½ÑƒÐ»Ñ‘Ð¼ Ð² Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ ILF%pB: Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð°%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ csect: %d%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ smclas %d%pB: Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ð½Ð¾ Ð¾Ð½ Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹ (Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�)%pB: Ð¸Ð¼Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð·Ð°Ð´Ð°Ð½Ð½ÑƒÑŽ Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½ÑƒÑŽ Ð´Ð»Ð¸Ð½Ñƒ Ñ€Ð°Ð²Ð½ÑƒÑŽ %d%pB: Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ðµ Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¾ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸%pB: Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ (%s) Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð² Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» (%s)%pB: Ñ†ÐµÐ»ÑŒ (%s) Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð² Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%pA)%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² (%d)%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²: %d (>= %d)%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²: %u%pB: tp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¶Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» %s%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ„Ð¸ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¹ Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ€Ð°Ñ�Ð¶Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» %s%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[12], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$5%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[1], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$2%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[1], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$4%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[9], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ __tls_used%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$6%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$6%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ»%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¸Ð¼Ñ� Ð¿ÑƒÑ�Ñ‚Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ Ñ€Ð°Ñ�Ð¶Ð°Ñ‚Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %pA%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ð¸Ð¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° COMDAT%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� â€” Ð¾Ð½Ð¸ Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð²%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� â€” Ð¾Ð½Ð¸ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .opd%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ R_PPC64_TOCSAVE%pB: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ€Ñ�Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %u Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .opd%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� %s%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x%pB: Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ sparc Â«%luÂ»%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %s%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° ARC %d%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ [%#x] Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ [%#x] Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ» Ð² Ð³Ñ€ÑƒÐ¿Ð¿Ðµ [%pA]%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ OMIT_FP Ð² %pA%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ (0x%x) Ð² Ð°Ñ€Ñ…Ð¸Ð²Ðµ Import Library Format%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¸Ð¼ÐµÐ½Ð½Ð¾Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %#x Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ ÐºÐ»Ð°Ñ�Ñ� Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %d Ð´Ð»Ñ� %s, Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� AOUT: %d%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ðµ bfd %#lx%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� bfd %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� Ð¼Ð°ÑˆÐ¸Ð½Ð° %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð½Ðµ PIC Ð²Ñ‹Ð·Ð¾Ð² IFUNC Â«%sÂ»%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s%pB: Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x%pB: Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¸Ð¼Ñ� Ñ‚Ð¸Ð¿Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� : %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ swap_aux_in Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð° Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ swap_aux_out Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð° Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ Ð¸Ð· %s Ð² %s%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� Ð¿Ð¾Ñ�Ð»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñ�Ñ‚ÑŒ ÑˆÐ¸Ñ€Ð¾ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² 0x%02X 0x%02X Ð¿Ð¾Ñ�Ð»Ðµ Ð¸Ð¼ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ� Ñ� Â«%sÂ»
+%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ñ…Ð¾Ñ‚Ñ� Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ð¸Ñ�ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ _, Ð½Ð¾ Ð² Ñ„Ð°Ð¹Ð» Ð·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð²%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‚Ñ�Ñ� Ð¾Ñ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ðµ Ð¿Ð¾Ð»Ñ� e_flags (%#x), Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð¾Ñ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸, Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ�Ð¼Ð¸, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð²ÑˆÐ¸Ð¼Ð¸Ñ�Ñ� Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð° _, Ð½Ð¾ Ð² Ñ„Ð°Ð¹Ð» Ð·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ _%pB: Ð²ÐµÑ€Ñ�Ð¸Ñ� ÑƒÐ·Ð»Ð° Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s%pB: Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð°Ñ�ÑŒ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð» core ÑƒÑ�ÐµÑ‡Ñ‘Ð½%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#x > 0xffff%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� BLX %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ %s Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ñ€ÐµÐ¶Ð¸Ð¼Ðµ%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: 0x%lx > 0xffff%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: BTI Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -z force-bti, Ð½Ð¾ Ð²Ñ�Ðµ Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð½Ðµ Ð¸Ð¼ÐµÑŽÑ‚ BTI Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ NOTE.%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² COMDAT Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� RVE PLT Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð»Ð°Ð±Ñ‹Ð¹ TLS Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�ÐµÑ‚Ñ�Ñ� Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸ÐµÐ¹ Ð¸ Ð¼Ð¾Ð¶ÐµÑ‚ Ð½Ðµ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ ÐºÐ°Ðº Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½ Ð½Ðµ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° Â«%sÂ» (%u) Ð¼ÐµÐ½ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ ÐµÐ³Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´Ð°ÐµÑ‚Ñ�Ñ�, Ñ‡Ñ‚Ð¾ ÐµÑ�Ñ‚ÑŒ 0xffff Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹, Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ� Ð¾ Ð½Ð¾Ð¼ÐµÑ€Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ Ð´Ð»Ñ� Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %s%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %d Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %ld Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ñ…%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� 0x%lx Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ %d%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ elf %s Ð¸ %s%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ ASE Ð¼ÐµÐ¶Ð´Ñƒ e_flags Ð¸ .MIPS.abiflags%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ FP ABI Ð¼ÐµÐ¶Ð´Ñƒ .gnu.attributes Ð¸ .MIPS.abiflags%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ ISA Ð¼ÐµÐ¶Ð´Ñƒ e_flags Ð¸ .MIPS.abiflags%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ð¹ ISA Ð¼ÐµÐ¶Ð´Ñƒ e_flags Ð¸ .MIPS.abiflags%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: isymMax (%ld) Ð±Ð¾Ð»ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ ifdMax (%ld)%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñƒ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÑ‚Ñ�Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° PIC-Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-PIC Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² abicalls Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð½Ðµ-abicalls%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð·Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ðµ Ð² Ð·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ð¾Ñ�Ñ‚Ñ�Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿ÑƒÑ�Ñ‚Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %u%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿ÑƒÑ�Ñ‚Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %u%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ñ�Ñ‚Ð°Ñ€Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°, Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð²%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SDA_BASE%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¹ Ð¾Ð±Ñ…Ð¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ STM32L4XX Ð½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¹ Ð¾Ð±Ñ…Ð¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ VFP11 Ð½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ� Ð´Ð»Ñ� mmo, Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ‡ÐµÐ¼ 65535 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²: %d. Ð‘ÑƒÐ´ÐµÑ‚ Ð²Ñ‹Ð´Ð°Ð½Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Â«MainÂ».
+%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� PLT Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ thumb-1 Ð¿Ð¾ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ Â«%sÂ» ÑƒÑ�ÐµÑ‡Ñ‘Ð½%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ ÐºÐ°ÐºÐ¸Ðµ-Ð»Ð¸Ð±Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ PT_GNU_RELRO%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ñƒ GOT%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ Ð² Ð¿Ð¾Ð»Ðµ flags2 Ñƒ .MIPS.abiflags (0x%lx)%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ win32pstatus %s Ð² %lu Ð±Ð°Ð¹Ñ‚ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ� Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚ Ñ€ÐµÑˆÐµÐ½Ð¾%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ win32pstatus NOTE_INFO_MODULE Ð² %lu Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð», Ñ‡Ñ‚Ð¾Ð±Ñ‹ Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÑŒ Ð¸Ð¼Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %u%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ auxtype %#x Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð° Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %#x%pB:%.8s: RVA ÑƒÑ�ÐµÑ‡Ñ‘Ð½%pB:%.8s: Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¸Ð¶Ðµ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°%pB:%d: Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ� Ñ�ÑƒÐ¼Ð¼Ð° Ð² Ñ„Ð°Ð¹Ð»Ðµ S-record%pB:%d: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð±Ð°Ð¹Ñ‚ %d Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»%pB:%d: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%d: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ„Ð°Ð¹Ð»Ðµ S-record%pB:%pA%s Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�
+%pB:%pA: %s Ð¸ %s Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¾Ð´Ð½Ð¾Ð¼ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ€Ð°Ð·Ð´ÐµÐ»Ð°%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ð±ÑƒÑ„ÐµÑ€%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð±Ñ‹Ð» ÑƒÐ´Ð°Ð»Ñ‘Ð½ Ñ�Ð±Ð¾Ñ€Ñ‰Ð¸ÐºÐ¾Ð¼ Ð¼ÑƒÑ�Ð¾Ñ€Ð°%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼ --gc-keep-exported%pB:%pA: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° %s, Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð°Ñ� %s%pB:%pA: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ %s Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½ Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð°%pB:%pA: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ %s Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹%pB:%pA: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐµÐµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Red Hat %s Ð´Ð»Ñ�: %s%pB:%s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� TLS%pB:%s Ñ€Ð°Ð·Ð´ÐµÐ» %s: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ 2**%u Ð½Ðµ Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ð¾%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ� Ñ�ÑƒÐ¼Ð¼Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ (Ð´Ð¾Ð»Ð¶Ð½Ð° Ð±Ñ‹Ñ‚ÑŒ %u, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð° %u)%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ñ�Ð¼Ð¾Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ñ�Ð¼Ð¾Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ð³Ð¾ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB:%u: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ ihex-Ñ‚Ð¸Ð¿ %u Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ%pB[%pA]: Ð½ÐµÑ‚ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð´Ð»Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° %pAÐ´Ð»Ñ� %pcrel_lo Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ %pcrel_hiÐ¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ %pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼%pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ Ð·Ð°Ð¿Ñ€ÐµÑ‰Ñ‘Ð½ Ð´Ð»Ñ� R_RISCV_GOT_HI20%s Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½ Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ toc%s Ð´ÐµÐ»Ð¸Ñ‚Ñ�Ñ� Ð½Ð° Ð½Ð¾Ð»ÑŒ%s Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÐµÑ‚Ñ�Ñ�
 %s Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÐµÑ‚Ñ�Ñ� Ð² %s
-%s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� TLS%s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐµÐ²%s Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ Ð² ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐµ, Ñ�Ð¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð¼ %pA%s Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐµ Ð´Ð»Ñ� ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� sdata4 Ð² .eh_frame%s: TLS-Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%s: TLS-Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ñ�Ñ�Ñ‹Ð»ÐºÐ¾Ð¹ Ð² %pB%s: TLS-Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð² %pB Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%s: TLS-Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð² %pB Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ñ�Ñ�Ñ‹Ð»ÐºÐ¾Ð¹ Ð² %pB%s: Ð½ÐµÑ‚ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%s: Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾%s: Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%s: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ�: %s(Ð¿Ð¾ Ð±Ð¸Ñ‚Ð¾Ð²Ð¾Ð¼Ñƒ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %u)
+%s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� TLS%s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐµÐ²%s Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½, Ð½Ð¾ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½: %s%s Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½, Ð½Ð¾ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°%s Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½, Ð½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "%s" Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½: %s%s Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ Ð² ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐµ, Ñ�Ð¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð¼ %pA%s Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐµ Ð´Ð»Ñ� ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� sdata4 Ð² .eh_frame%s, Ð¸Ñ‚ÐµÑ€Ð°Ñ†Ð¸Ñ� %u
+  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ          %lu
+  Ð´Ð°Ð»ÑŒÐ½ÐµÐµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ  %lu
+  Ð²Ñ‹Ð·Ð¾Ð² plt          %lu
+  Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ %lu%s: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚ÑŒ Ð±ÑƒÐºÐ²Ñ‹ Ð² Ð²ÐµÑ€Ñ…Ð½ÐµÐ¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ñ‹%s: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð´Ð¾Ð»Ð¶Ð½Ð° Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ‚ÑŒÑ�Ñ� Ñ� rv32 Ð¸Ð»Ð¸ rv64%s: TLS-Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%s: TLS-Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ñ�Ñ�Ñ‹Ð»ÐºÐ¾Ð¹ Ð² %pB%s: TLS-Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð² %pB Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%s: TLS-Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð² %pB Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ñ�Ñ�Ñ‹Ð»ÐºÐ¾Ð¹ Ð² %pB%s: Ð¿ÐµÑ€Ð²Ð¾Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Â«eÂ», Â«iÂ» Ð¸Ð»Ð¸ Â«gÂ»%s: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISA Â«%sÂ» Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° <Ð½Ð¾Ð¼ÐµÑ€>p%s: Ð½ÐµÑ‚ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%s: Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾%s: Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�%s: Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¾Ñ‚Ð´ÐµÐ»Ñ�Ñ‚ÑŒÑ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ _%s: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ�: %s%s: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ Â«%sÂ»%s: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ð¸Ð»Ð¸ ÐºÐ»Ð°Ñ�Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð° Â«%cÂ»(Ð¿Ð¾ Ð±Ð¸Ñ‚Ð¾Ð²Ð¾Ð¼Ñƒ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %u)
 (Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€)
-(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ð¾Ð´Ð¿Ð¸Ñ�ÑŒ %s Ð²Ð¾Ð·Ñ€Ð°Ñ�Ñ‚ %ld)
+(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ð¾Ð´Ð¿Ð¸Ñ�ÑŒ %s Ð²Ð¾Ð·Ñ€Ð°Ñ�Ñ‚ %ld pdb %s)
 (Ð½ÐµÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ�)
 (Ð½Ðµ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾)
 (Ð½Ðµ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¾)
@@ -1179,7 +1222,7 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 , Ð¿Ñ�ÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼: %u
 , ext fixup offset: %u, no_opt psect off: %u, Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿: %u (%s)
 , Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð²ÐµÐºÑ‚Ð¾Ñ€ rva: - %pB Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼, Ð° %pB Ð½ÐµÑ‚-mips32r2 -mfp64 (12 Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ�ÑŽÑ‚Ñ�Ñ� Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ñ‹Ð¼)Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° .eh_frame_hdr.eh_frame_hdr Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð¸ÐµÑ�Ñ� FDEÑ€Ð°Ð·Ð´ÐµÐ» .got Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ñ�Ñ‚Ð¾Ñ�Ñ‚ÑŒ Ñ�Ñ€Ð°Ð·Ñƒ Ð¿Ð¾Ñ�Ð»Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .pltÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð»Ð¸Ñ�Ñ‚Ð¾Ð¼Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð²ÐµÑ€Ñ�Ð¸Ð¸ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð² Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‚Ñ�Ñ�Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¸ Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ð¼ Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ°Ð¼Ð¸Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ð»Ð¸Ñ�Ñ‚Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ð»Ð¸Ñ�Ñ‚: %sÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ñ€ÐµÑ�ÑƒÑ€Ñ�Ð°: %dÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð°Ð½Ð¸Ñ„ÐµÑ�Ñ‚Ð¾Ð² Ð½Ðµ Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ32-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ double, Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ 32â€”Ð±Ð¸Ñ‚Ð½Ð¾Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ðµ64 Ð±Ð¸Ñ‚Ð° *Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð¾*
-64-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ double, 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ðµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32r: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32r2: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32rx: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ n1: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ n1h; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC<Ð�ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð½Ð°Ð±Ð¾Ñ€ Ð±Ð¸Ñ‚Ð¾Ð² Ñ„Ð»Ð°Ð³Ð°><Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ� Ð¾ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ð¸> %s<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ð´Ð»Ð¸Ð½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#x>
+64-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ double, 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ðµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32r: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32r2: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32rx: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ n1: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ n1h; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIE<Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ� Ð¾ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ð¸> %s<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ð´Ð»Ð¸Ð½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#x>
 <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#lx>
 <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾><Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°: %d>
 <Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ„Ð»Ð°Ð³Ð¸ Ð¼Ð°Ñ�ÐºÐ¸><Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾>Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @pltoff Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°BASE_IMAGE       ÐžÐ¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ� BFD %s Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶Ð¸Ð» Ð¾ÑˆÐ¸Ð±ÐºÑƒ %s:%dÐ’Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° BFD %s, Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð² Ð½Ð° %s:%d
@@ -1192,15 +1235,13 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 CTL_STLOC (Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ�)
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÐºÐ¾Ð³Ð¾ Ð¿Ñ€Ð°Ð²Ð°
 ÐžÐ±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» .rsrc!
-Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñ�Ñ‚Ñ€Ð¾ÐºÐµ Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ DSOÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð²Ñ�Ñ‚Ñ€ÐµÑ‡ÐµÐ½ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ DW_AT_comp_dir Ð² Ð½Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¾Ð²Ð¾Ð¼ Ð²Ð¸Ð´ÐµÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ñ€ÐµÐºÑƒÑ€Ñ�Ð¸Ñ� Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ ÑƒÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %uÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð°Ð´Ñ€ÐµÑ�Ð° Â«%uÂ», Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Ð½Ðµ ÑƒÐ¼ÐµÐµÑ‚ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°Ð¼Ð¸ Ð±Ð¾Ð»ÐµÐµ Ñ‡ÐµÐ¼ Â«%uÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð²ÐµÑ€Ñ�Ð¸Ñ� dwarf Â«%uÂ», Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð²ÐµÑ€Ñ�Ð¸Ð¸ 2, 3, 4 Ð¸ 5Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð²Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ñ‹Ð¹ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ DIEÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ðµ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ FORM: %#xÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ %u Ñ�ÐµÐ»ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð² Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ…Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº (Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð°)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð¿Ñ€Ð¸ Ñ‡Ñ‚ÐµÐ½Ð¸Ð¸ ÐºÐ¾Ð´Ð¾Ð² Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð¿Ñ€Ð¸ Ñ‡Ñ‚ÐµÐ½Ð¸Ð¸ Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d Ð² .debug_lineÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽDW_EH_PE_datarel Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° Ð´Ð»Ñ� Ñ�Ñ‚Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹:
+Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñ�Ñ‚Ñ€Ð¾ÐºÐµ Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ DSOÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð²Ñ�Ñ‚Ñ€ÐµÑ‡ÐµÐ½ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ DW_AT_comp_dir Ð² Ð½Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¾Ð²Ð¾Ð¼ Ð²Ð¸Ð´ÐµÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ñ€ÐµÐºÑƒÑ€Ñ�Ð¸Ñ� Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ ÑƒÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %uÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ 0x%lxÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð°Ð´Ñ€ÐµÑ�Ð° Â«%uÂ», Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Ð½Ðµ ÑƒÐ¼ÐµÐµÑ‚ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°Ð¼Ð¸ Ð±Ð¾Ð»ÐµÐµ Ñ‡ÐµÐ¼ Â«%uÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð²ÐµÑ€Ñ�Ð¸Ñ� dwarf Â«%uÂ», Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð²ÐµÑ€Ñ�Ð¸Ð¸ 2, 3, 4 Ð¸ 5Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð²Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ñ‹Ð¹ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ DIEÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ðµ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ FORM: %#xÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ %u Ñ�ÐµÐ»ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð² Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ…Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº (Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð°)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð¿Ñ€Ð¸ Ñ‡Ñ‚ÐµÐ½Ð¸Ð¸ ÐºÐ¾Ð´Ð¾Ð² Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð¿Ñ€Ð¸ Ñ‡Ñ‚ÐµÐ½Ð¸Ð¸ Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d Ð² .debug_lineÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽDW_EH_PE_datarel Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° Ð´Ð»Ñ� Ñ�Ñ‚Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹:
 Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸:
-ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s
-Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s Ñ€Ñ�Ð´Ð¾Ð¼ Ñ� %s Ð² Ñ�Ñ‚Ñ€Ð¾ÐºÐµ %d Ð² %s
-ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð¿Ð¸Ñ�Ð°Ð½Ð¸Ð¹EIHD: (Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, nbr Ð±Ð»Ð¾ÐºÐ¾Ð²: %u)
+ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð¿Ð¸Ñ�Ð°Ð½Ð¸Ð¹EIHD: (Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, nbr Ð±Ð»Ð¾ÐºÐ¾Ð²: %u)
 Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ  = 0x%.8lx (%ld)
-Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾ Ð¸ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐ¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Tag_MPextension_useÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¸Ñ�ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ [.pdata]ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° [.edata (Ð¸Ð»Ð¸ Ð³Ð´Ðµ Ð¾Ð½ Ð½Ð°ÑˆÑ‘Ð»Ñ�Ñ�)]Ð¤Ð»Ð°Ð³Ð¸ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° 			%lx
+ÐžÑˆÐ¸Ð±ÐºÐ°: Ñƒ %pB Ð¸ %pB Ñ€Ð°Ð·Ð½Ñ‹Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ DSPÐžÑˆÐ¸Ð±ÐºÐ°: Ñƒ %pB Ð¸ %pB Ñ€Ð°Ð·Ð½Ñ‹Ðµ FPU ABIÐžÑˆÐ¸Ð±ÐºÐ°: Ñƒ %pB Ð¸ %pB Ñ€Ð°Ð·Ð½Ñ‹Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ VDSPÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾ Ð¸ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐ¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Tag_MPextension_useÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¸Ñ�ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ [.pdata]ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° [.edata (Ð¸Ð»Ð¸ Ð³Ð´Ðµ Ð¾Ð½ Ð½Ð°ÑˆÑ‘Ð»Ñ�Ñ�)]Ð¤Ð»Ð°Ð³Ð¸ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° 			%lx
 Ð­ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ RVAÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ FDE Ð² %pB(%pA) Ð½Ðµ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñ�ÐµÑ‚ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ .eh_frame_hdrFDPIC Ð¿Ð¾ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %s Ð´Ð»Ñ� Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð²FILES_VOLUMES    FPU-2.0FPU-3.0ÐŸÐ¾Ð»Ðµ Ñ„Ð»Ð°Ð³Ð¾Ð²         = 0x%.2x
-ÐŸÐµÑ€ÐµÐ°Ð´Ñ€ÐµÑ�ÑƒÐµÐ¼Ñ‹Ð¹ RVAGALAXY           Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� GOT Ð¸ PLT Ð½Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� Ð½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ¾Ð¼Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ GOT Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¾ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ GP Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°ÐžÑ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°Ð�Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ‹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ldah Ð¸ lda Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� GPDISPÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²:
+ÐŸÐµÑ€ÐµÐ°Ð´Ñ€ÐµÑ�ÑƒÐµÐ¼Ñ‹Ð¹ RVAGALAXY           Ñ€Ð°Ð·Ð´ÐµÐ» GNU_MBIND Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ†ÐµÐ»Ñ�Ð¼Ð¸ GNU Ð¸ FreeBSDÑ€Ð°Ð·Ð´ÐµÐ» GNU_RETAIN Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ†ÐµÐ»Ñ�Ð¼Ð¸ GNU Ð¸ FreeBSDÐ¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� GOT Ð¸ PLT Ð½Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� Ð½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ¾Ð¼Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ GOT Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¾ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ GP Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°ÐžÑ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°Ð�Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ‹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ldah Ð¸ lda Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� GPDISPÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²:
 Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ FPU)
 Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, Ð»ÑŽÐ±Ð¾Ð¹ FPU)
 Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (MIPS32r2 64-bit FPU 12 Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ�ÑŽÑ‚Ñ�Ñ� Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ñ‹Ð¼)
@@ -1208,20 +1249,20 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð°Ñ� Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚ÑŒ)
 Ð¡Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ FPU)
 Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¸Ð»Ð¸ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ�
-ID: %#08lxIDC - Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° Ñ†ÐµÐ»Ð¾Ñ�Ñ‚Ð½Ð¾Ñ�Ñ‚Ð¸
-IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�IO               Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°:  (Ñ€Ð°Ð·Ð¼ÐµÑ€=%u)
+Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð° IBT Ð¸ SHSTKÐ¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ IBTID: %#08lxIDC - Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° Ñ†ÐµÐ»Ð¾Ñ�Ñ‚Ð½Ð¾Ñ�Ñ‚Ð¸
+Ð¡Ð¸Ð¼Ð²Ð¾Ð» IFUNC %s Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” IFUNCS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�IO               Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°:  (Ñ€Ð°Ð·Ð¼ÐµÑ€=%u)
 Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ‚Ð¾Ñ€ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u)
 Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u)
 Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: %u)
 Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² & Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u)
-ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾Ð²ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° [Ñ‡Ð°Ñ�Ñ‚ÑŒ .idata]LOGICAL_NAMES    Ð�Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð½Ð¾Ð³Ð¾ Ñ�Ð·Ñ‹ÐºÐ°
+ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾Ð²ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° [Ñ‡Ð°Ñ�Ñ‚ÑŒ .idata]Ð’Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð¸Ð¶Ð¸Ð¼Ð¾Ñ�Ñ‚ÑŒ.Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ LAM_U48Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ LAM_U57LOGICAL_NAMES    Ð�Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð½Ð¾Ð³Ð¾ Ñ�Ð·Ñ‹ÐºÐ°
 Ð”Ð»Ð¸Ð½Ð°               = 0x%.8lx (%ld)
 ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� IFUNC Â«%sÂ» Ð² %pB
 MEMORY_MANAGEMENTÐ¤ÑƒÐ½ÐºÑ†Ð¸Ð¸ MIPS16 Ð¸ microMIPS Ð½Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ð´Ñ€ÑƒÐ³ Ð´Ñ€ÑƒÐ³Ð°MISC             Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ MMU: MULTI_PROCESSING Ð¡Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹/ÐœÐ»Ð°Ð´ÑˆÐ¸Ð¹ 			%d/%d
 Ð”Ð»Ñ� Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ° Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� 0x%v
 MeP: howto %d Ð¸Ð¼ÐµÐµÑ‚ Ñ‚Ð¸Ð¿ %dÐžÐ±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ñ‹Ñ… Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¼Ð¾Ð´ÑƒÐ»Ñ�
-NETWORKS         NORMALÐ˜Ð¼Ñ� 				ÐžÑ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚Ð�Ð¾Ð¼ÐµÑ€ Ð²:
+NETWORKS         NORMALÐ—Ð�ÐœÐ•Ð§Ð�Ð�Ð˜Ð•: Ñ�Ñ‚Ð° Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ Ð¸ Ð±ÑƒÐ´ÐµÑ‚ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¾ Ð² Ð±ÑƒÐ´ÑƒÑ‰ÐµÐ¹ Ð²ÐµÑ€Ñ�Ð¸Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ°Ð˜Ð¼Ñ� 				ÐžÑ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚Ð�Ð¾Ð¼ÐµÑ€ Ð²:
 OPR_ADD (Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ)
 OPR_AND (Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¸)
 OPR_ASH (Ð°Ñ€Ð¸Ñ„Ð¼ÐµÑ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð´Ð²Ð¸Ð³)
@@ -1246,21 +1287,19 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 Ð”Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð°[%d]   = 0x%.8lx (%ld)
 Ð¡ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°[%d]  = 0x%.8lx (%ld)
 ÐŸÐ¾Ð¶Ð°Ð»ÑƒÐ¹Ñ�Ñ‚Ð°, Ñ�Ð¾Ð¾Ð±Ñ‰Ð¸Ñ‚Ðµ Ð¾Ð± Ñ�Ñ‚Ð¾Ð¹ Ð¾ÑˆÐ¸Ð±ÐºÐµ.
-ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ RL78 ABI: G10 Ð² Ñ„Ð°Ð¹Ð»Ðµ %pB Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� %s Ð¸Ð· Ñ„Ð°Ð¹Ð»Ð° %pBÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ RL78 ABI: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ %s Ð¸Ð· Ñ„Ð°Ð¹Ð»Ð° %pB Ñ� %s Ð¸Ð· Ñ„Ð°Ð¹Ð»Ð° %pBÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� RL78: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ Ð²Ð¼ÐµÑ�Ñ‚ÐµR_BFIN_FUNCDESC ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼R_BFIN_FUNCDESC_VALUE ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼R_FRV_TLSMOFFLO Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ setlo Ð¸Ð»Ð¸ setlos
+ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ RL78 ABI: G10 Ð² Ñ„Ð°Ð¹Ð»Ðµ %pB Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� %s Ð¸Ð· Ñ„Ð°Ð¹Ð»Ð° %pBÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ RL78 ABI: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ %s Ð¸Ð· Ñ„Ð°Ð¹Ð»Ð° %pB Ñ� %s Ð¸Ð· Ñ„Ð°Ð¹Ð»Ð° %pBÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� RL78: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ Ð²Ð¼ÐµÑ�Ñ‚ÐµÐ¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð´ÐµÐ»Ð¸Ñ‚Ñ�Ñ� Ð½Ð° Ð½Ð¾Ð»ÑŒÐ¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¾ Ð²Ñ‹Ñ…Ð¾Ð´ Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ Ñ�Ñ‚ÐµÐºÐ°R_AMD64_IMAGEBASE Ñ� __ImageBase Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½R_BFIN_FUNCDESC ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼R_BFIN_FUNCDESC_VALUE ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼R_FRV_TLSMOFFLO Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ setlo Ð¸Ð»Ð¸ setlos
 Ð§Ñ‚ÐµÐ½Ð¸Ðµ Ð¼ÐµÑ‚ÐºÐ¸ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ� Ð°Ñ€Ñ…Ð¸Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (0x%v) Ð¸ %pB (0x%v)
 Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (0x%v) Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)
 Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾) Ð¸ %pB (0x%v)
 Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB Ð¸ %pB
 Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)
-Ð—Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ€ÐµÑ�ÑƒÑ€Ñ�Ð¾Ð² [.rsrc]Ð�Ð´Ñ€ÐµÑ� S12 (%lx) Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð¾Ð±Ñ‰ÐµÐ¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð¹ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ (0x2000-0x4000), Ð¿Ð¾Ñ�Ñ‚Ð¾Ð¼Ñƒ Ð²Ñ‹ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ð°Ð´Ñ€ÐµÑ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² ÐºÐ¾Ð´ÐµÐ¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SDA, Ð½Ð¾ _SDA_BASE_ Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°SECURITY         SEC_RELOC Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pASHELL            SHRFXDSHRPICÐ˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ SIMD: SPSC â€” Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±Ñ€Ð°Ð·Ð°
+Ð—Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ€ÐµÑ�ÑƒÑ€Ñ�Ð¾Ð² [.rsrc]Ð�Ð´Ñ€ÐµÑ� S12 (%lx) Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð¾Ð±Ñ‰ÐµÐ¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð¹ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ (0x2000-0x4000), Ð¿Ð¾Ñ�Ñ‚Ð¾Ð¼Ñƒ Ð²Ñ‹ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ð°Ð´Ñ€ÐµÑ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² ÐºÐ¾Ð´ÐµÐ¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SDA, Ð½Ð¾ _SDA_BASE_ Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°SECURITY         SEC_RELOC Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pASHELL            SHRFXDSHRPICÐ¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ SHSTKÐ˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ SIMD: SPSC â€” Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±Ñ€Ð°Ð·Ð°
 STABLE           STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ Ñ�Ñ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ�)
 STA_GBL (Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ñ‚ÐµÐº) %.*s
 STA_LI (Ñ�Ñ‚ÐµÐº Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»Ð°)
-STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²) 0x%08x
-STA_MOD (Ñ�Ñ‚ÐµÐº Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹)
+STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²)STA_MOD (Ñ�Ñ‚ÐµÐº Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹)
 STA_PQ (Ñ�Ñ‚ÐµÐº psect Ð±Ð°Ð·Ð° + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)
-STA_QW (Ñ�Ñ‚ÐµÐº Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²) 0x%08x %08x
-STC_BOH_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ BOH Ð¿Ð¾ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ)
+STO_QW (Ñ�Ñ‚ÐµÐº ÑƒÑ‡ÐµÑ‚Ð²ÐµÑ€Ñ‘Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²)STC_BOH_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ BOH Ð¿Ð¾ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ)
 STC_BOH_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ BOH Ð¿Ð¾ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)
 STC_BSR_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ BSR Ð¿Ð¾ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ)
 STC_BSR_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ BSR Ð¿Ð¾ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)
@@ -1299,27 +1338,27 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¸Ñ�Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð²
 Ð¡Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ° Ð´Ð»Ñ� Ð²Ñ‹Ð·Ð¾Ð²Ð° Ð³Ñ€Ð°Ñ„Ð° ÐºÐ¾Ñ€Ð½ÐµÐ²Ñ‹Ñ… ÑƒÐ·Ð»Ð¾Ð².
 Ð¨Ð°Ð³Ð¸:
-Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ REGISTER Ð² %pBTLS-Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾Ð²
-ÐŸÐ¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ðµ Ð´Ð°Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð°Ð Ð°Ð·Ð¼ÐµÑ€ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°
+Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ REGISTER Ð² %pBTLS-Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ TOC Ð¿Ñ€Ð¸ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� -mminimal-tocÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾Ð²
+Ð”Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾ Ð´Ð»Ñ� R_RISCV_GOT_HI20ÐŸÐ¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ðµ Ð´Ð°Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð°Ð Ð°Ð·Ð¼ÐµÑ€ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°
 ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ð° Ð½Ð¸Ñ‚ÐµÐ¹ [.tls]ÐœÐµÑ‚ÐºÐ° Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸/Ð´Ð°Ñ‚Ñ‹ 		%lx
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ� Ñ‚ÐµÐºÑ�Ñ‚Ð°
 Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ñ�ÐºÑ€Ñ‹Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð° (%ld)
 Ð¢Ð¸Ð¿                Ð Ð°Ð·Ð¼ÐµÑ€     Rva      Ð¡Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ
-USRSTACKÐ�ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð�ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾: %xÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W (%v) Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (0x%v) Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)
+USRSTACKÐ�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚-Ð·Ð°Ð³Ð»ÑƒÑˆÐºÑƒ %sÐ�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»: %sÐ�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ DLL.Ð�ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð�ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾: %xÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W (%v) Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (0x%v) Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)
 ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W (0x%v) Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (0x%v) Ð¸ %pB (0x%v)
 VOLATILE         Ð’Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .pdata (%ld) Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ‡ÐµÐ¼ Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ (%ld)
 ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%ld) Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ %d
 ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%ld) Ð¼ÐµÐ½ÑŒÑˆÐµ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° (%ld)
 ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ
 Ð—Ð°Ð¿Ð¸Ñ�ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð»Ñ‘Ð½Ð½Ð¾Ð¹ Ð¼ÐµÑ‚ÐºÐ¸ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ armapÐ�Ð´Ñ€ÐµÑ� XGATE (%lx) Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð¾Ð±Ñ‰ÐµÐ¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð¹ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ (0xE000-0xFFFF), Ð¿Ð¾Ñ�Ñ‚Ð¾Ð¼Ñƒ Ð²Ñ‹ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ð°Ð´Ñ€ÐµÑ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸, Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ�Ñ‚ÑŒ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†ÐµÐ¹ Ð² ÐºÐ¾Ð´Ðµ.[%u]: Ð½Ð¸Ð¶Ð½Ñ�Ñ�: %u, Ð²ÐµÑ€Ñ…Ð½Ñ�Ñ�: %u
-[abi=16-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ int, [abi=32-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ int, [Ñ‡ÑŒÑ‘ Ð¸Ð¼Ñ� Ð¿Ð¾Ñ‚ÐµÑ€Ñ�Ð½Ð¾]Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ�Ð¾ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ� Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚Â«%sÂ» Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½Ðµ Ð¿ÑƒÑ�Ñ‚ÑƒÑŽ Ð²Ñ…Ð¾Ð´Ð½ÑƒÑŽ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽÐ¾Ð±ÑŠÐµÐºÑ‚ PDEÐ¾Ð±ÑŠÐµÐºÑ‚ PIEÐ¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð´Ñ€ÐµÑ�Ð°Ð´Ñ€ÐµÑ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð°Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ñ‹Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ ELF (%d) Ð² %pB, Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� %dÐ°Ñ€Ñ…Ð¸Ð² Ð±ÐµÐ· Ð¸Ð½Ð´ÐµÐºÑ�Ð°; Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚Ðµ ranlib Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ�Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð» Ð² Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÐµÐ¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÑŒ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð°:
+[abi=16-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ int, [abi=32-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ int, [Ñ‡ÑŒÑ‘ Ð¸Ð¼Ñ� Ð¿Ð¾Ñ‚ÐµÑ€Ñ�Ð½Ð¾]\%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� BLX %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ %s Â«%sÂ»__tls_get_addr Ð²Ñ‹Ð·Ð²Ð°Ð»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ�Ð¾ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ� Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚Â«%sÂ» Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½Ðµ Ð¿ÑƒÑ�Ñ‚ÑƒÑŽ Ð²Ñ…Ð¾Ð´Ð½ÑƒÑŽ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽÂ«zfinxÂ» ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÐµÐ¼ Â«f/d/q/zfh/zfhminÂ»Ð¾Ð±ÑŠÐµÐºÑ‚ PDEÐ¾Ð±ÑŠÐµÐºÑ‚ PIEÐ¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð´Ñ€ÐµÑ�Ð°Ð´Ñ€ÐµÑ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð°Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ñ‹Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ ELF (%d) Ð² %pB, Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� %dÐ°Ñ€Ñ…Ð¸Ð² Ð±ÐµÐ· Ð¸Ð½Ð´ÐµÐºÑ�Ð°; Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚Ðµ ranlib Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ�Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð» Ð² Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÐµÐ¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÑŒ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð°:
 Ð¼Ð°Ñ�Ñ�Ð¸Ð², Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, bitmap: arsize: %u, a0: 0x%08x
 Ð°Ñ‚Ð¾Ð¼Ð°Ñ€Ð½Ð¾, Ñ‚Ð¸Ð¿=0x%02x %s
 Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ� L32R/CALLX Ð² CALL Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð°Ñ�ÑŒ Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð¾Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ Ñ� Ð²Ñ…Ð¾Ð´Ð¾Ð¼ %s Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð¾Ð¼ %sÐ½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² %sÐ½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ±Ð°Ð½ÐºÐ¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� [%lx:%04lx] (%lx) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð±Ð°Ð½ÐºÐ¾Ð¼ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ Ð±Ð°Ð½ÐºÐ¸Ñ€ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx)Ð±Ð°Ð·Ð°: %u, Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ�: %u
-bfd_mach_o_canonicalize_symtab: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹bfd_mach_o_read_section_32: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ�: %#lx, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� 32bfd_mach_o_read_section_64: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ�: %#lx, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� 32bfd_mach_o_read_symtab_symbol: Ð¸Ð¼Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (%lu >= %u)bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %d (Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %lu): Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ° Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿Ð¾Ð»Ñ� 0x%x: Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ° Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°bfd_mach_o_read_symtab_symbol: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ %d Ð±Ð°Ð¹Ñ‚ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %ubfd_mach_o_read_symtab_symbols: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²bfd_mach_o_scan: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx/0x%lxbfd_pef_scan: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lxblkbeg: Ð°Ð´Ñ€ÐµÑ�: 0x%08x, Ð¸Ð¼Ñ�: %.*s
+bfd_mach_o_canonicalize_symtab: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹bfd_mach_o_read_section_32: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ�: %#lxbfd_mach_o_read_section_64: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ�: %#lxbfd_mach_o_read_symtab_symbol: Ð¸Ð¼Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (%lu >= %u)bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %d (Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %lu): Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ° Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿Ð¾Ð»Ñ� 0x%x: Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ° Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°bfd_mach_o_read_symtab_symbol: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ %d Ð±Ð°Ð¹Ñ‚ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %ubfd_mach_o_scan: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx/0x%lxbfd_pef_scan: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lxblkbeg: Ð°Ð´Ñ€ÐµÑ�: 0x%08x, Ð¸Ð¼Ñ�: %.*s
 blkend: Ñ€Ð°Ð·Ð¼ÐµÑ€: 0x%08x
-Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ (PC rel16) Ð² Ñ€Ð°Ð·Ð´ÐµÐ» (%s) Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð°Ð´Ñ€ÐµÑ�ÑƒÐ¿Ñ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� bss-plt Ð¸Ð·-Ð·Ð° Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ�Ð¿Ñ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� bss-plt Ð¸Ð·-Ð·Ð° %pBÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð±Ñ€Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÑƒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ðº JALX Ð´Ð»Ñ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ðº JALX Ð´Ð»Ñ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %sÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ EMH Ð² Ð¿ÐµÑ€Ð²Ð¾Ð¹ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST
-Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DMT
+Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ (PC rel16) Ð² Ñ€Ð°Ð·Ð´ÐµÐ» (%s) Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð°Ð´Ñ€ÐµÑ�ÑƒÐ¿Ñ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� bss-plt Ð¸Ð·-Ð·Ð° Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ�Ð¿Ñ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� bss-plt Ð¸Ð·-Ð·Ð° %pBÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð±Ñ€Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÑƒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ + Ð¸Ð»Ð¸ - Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� Â«%sÂ» Ð² .option Ð´Ð»Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ»Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ðº JALX Ð´Ð»Ñ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ðº JALX Ð´Ð»Ñ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %sÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ EMH Ð² Ð¿ÐµÑ€Ð²Ð¾Ð¹ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST
+Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ð¸ Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ Ð´Ð»Ñ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISA Â«%sÂ»Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DMT
 Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DMT
 Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DMT psect
 Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DST
@@ -1335,67 +1374,76 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ GST
 Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�ÑŒ GST
 Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST
-Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð´Ð»Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST
 ÐºÐ»Ð°Ñ�Ñ�: %u, dtype: %u, Ð´Ð»Ð¸Ð½Ð°: %u, ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ: 0x%08x
-Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð² %pBÐ·Ð°Ð¿Ð¸Ñ�ÑŒ EEOM Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° â€” Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: ÐµÑ‘ Ð¿Ð¾Ð»Ðµ psindx Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾ (%#lx)Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: ÐµÑ‘ Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐ³Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° (%#x)Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EIHD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° â€” Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ ETIRÐ·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ vms Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ» %sÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __ctbpÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __epÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __gpÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð· Â«%sÂ» Ð¸Ð· Â«%sÂ»Ð¦ÐŸ=HC11]Ð¦ÐŸ=HC12]Ð¦ÐŸ=HCS12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€=XGATE]Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµdelta pc +%-4ddelta_pc_l: +0x%08x
+Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð² %pBÐ·Ð°Ð¿Ð¸Ñ�ÑŒ EEOM Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° â€” Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐ³Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° (%#x)Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: ÐµÑ‘ Ð¿Ð¾Ð»Ðµ psindx Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾ (%#lx)Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: ÐµÑ‘ Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EIHD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° â€” Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ ETIRÐ¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ vms Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ GST
+Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ» %sÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __ctbpÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __epÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __gpÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð· Â«%sÂ» Ð¸Ð· Â«%sÂ»Ð¦ÐŸ=HC11]Ð¦ÐŸ=HC12]Ð¦ÐŸ=HCS12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€=XGATE]dÂ» Ð¸ Â«cdÂ» Ð¸ Â«zfadÂ» Ð¸Ð»Ð¸ Â«zdinxÐ¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�delta pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 Ð¾Ð¿Ð¸Ñ�dimct: %u, aflags: 0x%02x, Ñ†Ð¸Ñ„Ñ€: %u, ÑˆÐºÐ°Ð»Ð°: %u
 Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»: Â«%pAÂ»Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°ÐµÐ¼ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² FDE Ð² %pB(%pA).
 Ð½ÐµÑ�Ð¼ÐµÐ¶Ð½Ñ‹Ð¹ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ (nbr: %u)
-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð¸Ð¸ dynreloc %pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pAÐ²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¸Ñ�Ñ‡ÐµÐ·Ð»Ð° Ð¸Ð· Ð±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð°enumbeg, Ð´Ð»Ð¸Ð½Ð°: %u, Ð¸Ð¼Ñ�: %.*s
+Ð´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð½Ð° Ð½Ð¾Ð»ÑŒdst_define_location %u Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾ÐµÐ½ÐµÑ‚ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¼ Ð¸Ð½Ð´ÐµÐºÑ�ÐµÐ´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð¸Ð¸ dynreloc %pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pAÐ²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¸Ñ�Ñ‡ÐµÐ·Ð»Ð° Ð¸Ð· Ð±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð°enumbeg, Ð´Ð»Ð¸Ð½Ð°: %u, Ð¸Ð¼Ñ�: %.*s
 enumelt, Ð¸Ð¼Ñ�: %.*s
 enumend
 Ñ�Ð¿Ð¸Ð»Ð¾Ð³: Ñ„Ð»Ð°Ð³Ð¸: %u, Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº: %u
-Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² %pB(%pA); Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° .eh_frame_hdr Ñ�Ð¾Ð·Ð´Ð°Ð½Ð° Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� %s: %sÐ¾ÑˆÐ¸Ð±ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Ñ‚Ð¸Ð¿Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð° Ð¸Ð· Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… elfÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð½Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB ÑƒÐ¶Ðµ Ð² ÐºÐ¾Ð½ÐµÑ‡Ð½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ BE8Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� APCS-%d, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº Ñ†ÐµÐ»ÑŒ %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ APCS-%dÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� EP9312, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� XScaleÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ, Ð½Ð¾ Ð´Ð»Ñ� %pB Ð·Ð°Ð´Ð°Ð½Ð¾ 4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸ÐµÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ñ‡Ð¸Ñ�Ð»Ð° Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ð¸Ñ… Ð² Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ…Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ñ‡Ð¸Ñ�Ð»Ð° Ð² Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ…, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ð¸Ñ… Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð±Ð¾Ð»ÑŒÑˆÐµÐµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð°, Ñ‡ÐµÐ¼ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¾ Ð² %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð±Ð¾Ð»ÑŒÑˆÐµÐµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°, Ñ‡ÐµÐ¼ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¾ Ð² %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°, Ð½Ð¾ Ð´Ð»Ñ� Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð° Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°.Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð½ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð² %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ double, Ð½Ð¾ Ð² %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚ 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ doubleÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð² %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� FPU-3.0, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ FPU-2.0Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ñ‹Ðµ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹ VFP, Ð° %pB Ð½ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ FP, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ FPÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ñ‹Ðµ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹ iWMMXt, Ð° %pB Ð½ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ FP, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ FPÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ð° %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ð° %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ MSP430Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¾Ð³Ñ€Ð¾Ð¼Ð½ÑƒÑŽ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ð°, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ MSP430Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð°Ð»ÑƒÑŽ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ…, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð° x86 (0x%x): 0x%x>Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA (%s) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ (%s).Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ ISA Ð´Ð»Ñ� Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� Â«%sÂ» Ð¸ Â«%sÂ».Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ ISA Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� Â«%sÂ». %d.%d vs %d.%dÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰ÐµÐµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ Ð°Ð´Ñ€ÐµÑ�Ð°Ñ†Ð¸Ð¸ SB Ð¸ R9Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ XLEN (%u), Ð²Ñ‹Ñ€Ð¾Ñ�Ñ‚Ð½Ð¾, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ñ�.Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: XLEN Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… (%u) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ð¼Ð¸ (%u).Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð¾Ñ‚ Ñ�Ñ‚Ð°Ñ€ÑˆÐµÐ³Ð¾ Ðº Ð¼Ð»Ð°Ð´ÑˆÐµÐ¼Ñƒ R2 Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�error: %pB: Ð½ÐµÐ»ÑŒÐ·Ñ� Ñ�Ð¼ÐµÑˆÐ¸Ð²Ð°Ñ‚ÑŒ rf16 Ñ� Ð¿Ð¾Ð»Ð½Ñ‹Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ðµ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ %d/%dÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ Ñ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s Ñ� %s Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISAÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ðµ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ %c/%cÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s: %s Ñ� %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� priv spec (Ñ�Ñ‚Ð°Ñ€ÑˆÐ°Ñ�/Ð¼Ð»Ð°Ð´ÑˆÐ°Ñ�/Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ).Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰ÐµÐµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ R9Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Â«%sÂ». ÐŸÐµÑ€Ð²Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Â«iÂ» Ð¸Ð»Ð¸ Â«eÂ», Ð½Ð¾ Ð¸Ð¼ÐµÐµÐ¼ Â«%sÂ».Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±ÑŠÐµÐºÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ðµ, Ð·Ð°Ð´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÐµÐ¼, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ñ�Ð±Ð¾Ñ€ÐºÐ¸ Â«%sÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ‚ÐµÐ³ Â«%d, %sÂ» Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ñ‚ÐµÐ³Ð¾Ð¼ Â«%d, %sÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ñ�Ñ‚Ð°Ñ€Ñ‹Ð¹ Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð»Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ñ‹Ðµ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ Ð¦ÐŸ %s Ñ� %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISAÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ñ� %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ %pB Ñ� Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ %pB Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ fp16 Ñ€Ð°Ñ�Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð² %pB Ð¸ %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ (Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ -fpic?)Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±ÑŠÐµÐºÑ‚-Ð¸Ñ�Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº %pB Ð¸Ð¼ÐµÐµÑ‚ Ð²ÐµÑ€Ñ�Ð¸ÑŽ EABI %d, Ð° Ñ†ÐµÐ»ÑŒ %pB Ð¸Ð¼ÐµÐµÑ‚ Ð²ÐµÑ€Ñ�Ð¸ÑŽ EABI %dÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° ARC4 Ð±Ð¾Ð»ÑŒÑˆÐµ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» __rtinitÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Tag_ABI_array_object_align_expected Ð² %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Tag_ABI_array_object_alignment Ð² %pBÐ¿Ñ€Ð¸ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐµ Ñ„Ð°Ð¹Ð»Ð° %pB Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ñ‹ Ð¾ÑˆÐ¸Ð±ÐºÐ¸Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð´Ð»Ñ� Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° APUinfoÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»Ð¸Ñ‚ÑŒ Ð½Ð¾Ð²Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» APUinfoÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ HI16Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ ÑƒÑ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ð½Ð¾Ð²Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» APUinfoÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð¼ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ÐµÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð¸Ð¼Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ .fixupÑ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ Ñ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ñ„Ð°Ð¹Ð» Ð² Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÐµÑ„Ð°Ð¹Ð» Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹Ñ„Ð°Ð¹Ð» ÑƒÑ�ÐµÑ‡Ñ‘Ð½Ð² Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐ¼, Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ� Ð¾ Ð½Ðµ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ .eh_frame_hdr Ð¸Ð·-Ð·Ð° ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� FDE Ð±ÑƒÐ´ÑƒÑ‚ Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ�ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº Ð½Ðµ Ñ�Ð¼Ð¾Ð³ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ %sÐ³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°
-Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹ Ð¦ÐŸ Ð² Ñ„Ð°Ð¹Ð»Ð°Ñ… mach-o: %ld Ð¸ %ldincr_linum(b): +%u
+Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² %pB(%pA); Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° .eh_frame_hdr Ñ�Ð¾Ð·Ð´Ð°Ð½Ð° Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² %pB(%pA); Ñ€Ð°Ð·Ð´ÐµÐ» .sframe Ñ�Ð¾Ð·Ð´Ð°Ð½ Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� %s: %sÐ¾ÑˆÐ¸Ð±ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Ñ‚Ð¸Ð¿Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð° Ð¸Ð· Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… elfÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²ÐµÑ€Ñ…Ð½ÑŽÑŽ Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ð´Ð°Ð½Ð½Ñ‹Ñ…, Ð½Ð¾ %pB Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÑ‚, Ñ‡Ñ‚Ð¾ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð² Ð½Ð¸Ð¶Ð½ÐµÐ¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð½Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB ÑƒÐ¶Ðµ Ð² ÐºÐ¾Ð½ÐµÑ‡Ð½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ BE8Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� APCS-%d, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº Ñ†ÐµÐ»ÑŒ %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ APCS-%dÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� EP9312, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� XScaleÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ, Ð½Ð¾ Ð´Ð»Ñ� %pB Ð·Ð°Ð´Ð°Ð½Ð¾ 4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸ÐµÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ñ‡Ð¸Ñ�Ð»Ð° Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ð¸Ñ… Ð² Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ…Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ñ‡Ð¸Ñ�Ð»Ð° Ð² Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ…, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ð¸Ñ… Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð±Ð¾Ð»ÑŒÑˆÐµÐµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð°, Ñ‡ÐµÐ¼ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¾ Ð² %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð±Ð¾Ð»ÑŒÑˆÐµÐµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°, Ñ‡ÐµÐ¼ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¾ Ð² %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°, Ð½Ð¾ Ð´Ð»Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð½ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð² %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ double, Ð½Ð¾ Ð² %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚ 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ doubleÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð² %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� FPU-3.0, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ FPU-2.0Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ñ‹Ðµ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹ VFP, Ð° %pB Ð½ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ FP, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ FPÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ñ‹Ðµ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹ iWMMXt, Ð° %pB Ð½ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ FP, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ FPÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ð° %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ð° %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ MSP430Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¾Ð³Ñ€Ð¾Ð¼Ð½ÑƒÑŽ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ð°, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ MSP430Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð°Ð»ÑƒÑŽ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ…, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° AArch64: 0x%x>Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð° (0x%x): 0x%x>Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð° x86 (0x%x): 0x%x>Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… (%s) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ (%s)Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰ÐµÐµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ Ð°Ð´Ñ€ÐµÑ�Ð°Ñ†Ð¸Ð¸ SB Ð¸ R9Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: XLEN Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… (%u) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ð¼Ð¸ (%u)Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð¾Ñ‚ Ñ�Ñ‚Ð°Ñ€ÑˆÐµÐ³Ð¾ Ðº Ð¼Ð»Ð°Ð´ÑˆÐµÐ¼Ñƒ R2 Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�error: %pB: Ð½ÐµÐ»ÑŒÐ·Ñ� Ñ�Ð¼ÐµÑˆÐ¸Ð²Ð°Ñ‚ÑŒ rf16 Ñ� Ð¿Ð¾Ð»Ð½Ñ‹Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ðµ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ %d/%dÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ Ñ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s Ñ� %s Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISAÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ðµ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ %c/%cÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s: %s Ñ� %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰ÐµÐµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ R9Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Â«%sÂ». ÐŸÐµÑ€Ð²Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Â«iÂ» Ð¸Ð»Ð¸ Â«eÂ», Ð½Ð¾ Ð¸Ð¼ÐµÐµÐ¼ Â«%sÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ ISA Ð´Ð»Ñ� Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� Â«%sÂ» Ð¸ Â«%sÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±ÑŠÐµÐºÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ðµ, Ð·Ð°Ð´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÐµÐ¼, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ñ�Ð±Ð¾Ñ€ÐºÐ¸ Â«%sÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ‚ÐµÐ³ Â«%d, %sÂ» Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ñ‚ÐµÐ³Ð¾Ð¼ Â«%d, %sÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ñ�Ñ‚Ð°Ñ€Ñ‹Ð¹ Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð»Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ñ‹Ðµ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ Ð¦ÐŸ %s Ñ� %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISAÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ñ� %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ XLEN (%u), Ð²ÐµÑ€Ð¾Ñ�Ñ‚Ð½Ð¾, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ñ�Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ %pB Ñ� Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ %pB Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %sÐ¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� uleb128 Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ 0x%lx Ð² %pA Ð¸Ð· %pB Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ðµ Ð¼ÐµÑ�Ñ‚Ð¾Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ fp16 Ñ€Ð°Ñ�Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð² %pB Ð¸ %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ (Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ -fpic?)Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±ÑŠÐµÐºÑ‚-Ð¸Ñ�Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº %pB Ð¸Ð¼ÐµÐµÑ‚ Ð²ÐµÑ€Ñ�Ð¸ÑŽ EABI %d, Ð° Ñ†ÐµÐ»ÑŒ %pB Ð¸Ð¼ÐµÐµÑ‚ Ð²ÐµÑ€Ñ�Ð¸ÑŽ EABI %dÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° ARC4 Ð±Ð¾Ð»ÑŒÑˆÐµ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» __rtinitÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Tag_ABI_array_object_align_expected Ð² %pBÐ¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Tag_ABI_array_object_alignment Ð² %pBÐ¿Ñ€Ð¸ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐµ Ñ„Ð°Ð¹Ð»Ð° %pB Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ñ‹ Ð¾ÑˆÐ¸Ð±ÐºÐ¸Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹fÂ» Ð¸ Â«cfÂ» Ð¸Ð»Ð¸ Â«zfinxÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð´Ð»Ñ� Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° APUinfoÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»Ð¸Ñ‚ÑŒ Ð½Ð¾Ð²Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» APUinfoÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ HI16Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ ÑƒÑ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ð½Ð¾Ð²Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» APUinfoÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð¼ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ÐµÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð¸Ð¼Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ .fixupÑ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ Ñ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ñ„Ð°Ð¹Ð» Ð² Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÐµÑ„Ð°Ð¹Ð» Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹Ñ„Ð°Ð¹Ð» ÑƒÑ�ÐµÑ‡Ñ‘Ð½ÐºÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� uleb128 Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ 0x%lx Ð² %pA Ð¸Ð· %pB Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ðµ Ð¼ÐµÑ�Ñ‚Ð¾Ð² Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐ¼, Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ� Ð¾ Ð½Ðµ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ .eh_frame_hdr Ð¸Ð·-Ð·Ð° ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� FDE Ð±ÑƒÐ´ÑƒÑ‚ Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ�ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº Ð½Ðµ Ñ�Ð¼Ð¾Ð³ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ %sÐ³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°hÑ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹ Ð¦ÐŸ Ð² Ñ„Ð°Ð¹Ð»Ð°Ñ… mach-o: %ld Ð¸ %ldincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
 ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x
-Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¾ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¾ Ð²Ñ‹Ñ…Ð¾Ð´ Ð·Ð° Ð½Ð¸Ð¶Ð½ÑŽÑŽ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ Ñ�Ñ‚ÐµÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� %sÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ/Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ñ�Ñ‚Ñ€Ð°Ð½Ð½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�ÑƒÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ» Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¹ Â«%sÂ» Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€ÑƒÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð´Ð¾Ð·Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .got.locÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐµ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ðµ: Ð¾Ñ�Ñ‚Ð°Ñ‘Ñ‚Ñ�Ñ� %lu != Ð¼Ð°ÐºÑ� %lu; Ñ�Ð¾Ð¾Ð±Ñ‰Ð¸Ñ‚Ðµ Ð¾Ð± Ñ�Ñ‚Ð¾Ð¼ Ð´ÐµÑ„ÐµÐºÑ‚ÐµÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ TARGET2 Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Â«%sÂ»Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� Ñ†ÐµÐ»ÑŒ bfdÐ½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pAÐ½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð½Ðµ-ELF Ð¸ Ð½Ðµ-mmo; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñƒ objcopy Ð´Ð»Ñ� Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð¸Ð· ELF Ð¸Ð»Ð¸ mmo, Ð¸Ð»Ð¸ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Â«-no-expandÂ» (Ð´Ð»Ñ� gcc, Â«-Wa,-no-expandÂ»Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð½Ðµ-ELF Ð¸ Ð½Ðµ-mmo; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñƒ objcopy Ð´Ð»Ñ� Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð¸Ð· ELF Ð¸Ð»Ð¸ mmo, Ð¸Ð»Ð¸ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ gcc Â«-mno-base-addressesÂ».Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ�Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� .eh_frame_entry: %pAÐ½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² ETIRÐ½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ %s Ñ� ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð°Ð¼Ð¸ip2k relaxer: Ð¸Ñ�Ð¿Ð¾Ñ€Ñ‡ÐµÐ½ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹.ip2k relaxer: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ Ð±ÐµÐ· Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ Ñ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ� Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸.Ð´Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° â€” %s â€” ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ»Ð°?Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº (PC rel26) Ð² Ñ€Ð°Ð·Ð´ÐµÐ» (%s) Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð°Ð´Ñ€ÐµÑ�ÑƒÐ¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�ÑƒÐ¼ÐµÑ‚ÐºÐ°, Ð¸Ð¼Ñ�: %.*s
+Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ SFrame Ñ� Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸Ð¼Ñ�Ñ� abi Ð½Ðµ Ð´Ð°Ñ‘Ñ‚ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ .sframeÐ²Ñ…Ð¾Ð´Ð½Ñ‹Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ SFrame Ñ� Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸Ð¼Ð¸Ñ�Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ�Ð¼Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° Ð½Ðµ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñ�ÑŽÑ‚ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ .sframeÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� %sÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ/Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ñ�Ñ‚Ñ€Ð°Ð½Ð½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�ÑƒÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ» Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¹ Â«%sÂ» Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€ÑƒÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð´Ð¾Ð·Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .got.locÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐµ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ðµ: Ð¾Ñ�Ñ‚Ð°Ñ‘Ñ‚Ñ�Ñ� %lu != Ð¼Ð°ÐºÑ� %lu; Ñ�Ð¾Ð¾Ð±Ñ‰Ð¸Ñ‚Ðµ Ð¾Ð± Ñ�Ñ‚Ð¾Ð¼ Ð´ÐµÑ„ÐµÐºÑ‚ÐµÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÑƒÑ‚Ñ€Ñ�Ð½ÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð¸Ð¶Ð¸Ð¼Ñ‹Ð¹ INSN_CLASS_*Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ %sÐ½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ ÐºÐ¾Ð½ÐµÑ† Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISA <Ð½Ð¾Ð¼ÐµÑ€>p Ð² .option Ð´Ð»Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ»Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ TARGET2 Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Â«%sÂ»Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� Ñ†ÐµÐ»ÑŒ bfdÐ½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pAÐ½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð½Ðµ-ELF Ð¸ Ð½Ðµ-mmo; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñƒ objcopy Ð´Ð»Ñ� Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð¸Ð· ELF Ð¸Ð»Ð¸ mmo, Ð¸Ð»Ð¸ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Â«-no-expandÂ» (Ð´Ð»Ñ� gcc, Â«-Wa,-no-expandÂ»Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð½Ðµ-ELF Ð¸ Ð½Ðµ-mmo; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñƒ objcopy Ð´Ð»Ñ� Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð¸Ð· ELF Ð¸Ð»Ð¸ mmo, Ð¸Ð»Ð¸ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ gcc Â«-mno-base-addressesÂ».Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ�Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� .eh_frame_entry: %pAÐ½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² ETIRÐ½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ %s Ñ� ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð°Ð¼Ð¸ip2k relaxer: Ð¸Ñ�Ð¿Ð¾Ñ€Ñ‡ÐµÐ½ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹.ip2k relaxer: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ Ð±ÐµÐ· Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ Ñ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ� Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸.Ð´Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° â€” %s â€” ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ»Ð°?Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº (PC rel26) Ð² Ñ€Ð°Ð·Ð´ÐµÐ» (%s) Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð°Ð´Ñ€ÐµÑ�ÑƒÐ¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�ÑƒÐ¼ÐµÑ‚ÐºÐ°, Ð¸Ð¼Ñ�: %.*s
 len: %2u, kind: %2u Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ (Ð´Ð»Ð¸Ð½Ð°: %u)
-ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ð¹ Ð¾Ð±Ñ€Ð°Ð·Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ðµ
-Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…
-Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…
-Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ ÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»mach-o: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² (%u), Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½Ðµ Ð±Ð¾Ð»ÐµÐµ 255,
-Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ñ‹Ð¹ Ð°Ñ€Ñ…Ð¸Ð²Ð·Ð°ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð°Ñ�ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒmep: Ð½ÐµÑ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� ÐºÐ¾Ð´Ð° %dmodbeg
+ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ð¹ Ð¾Ð±Ñ€Ð°Ð·Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿ÐµÐ·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ ÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¸Ð½Ð´ÐµÐºÑ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»mÂ» Ð¸Ð»Ð¸ Â«zmmulmach-o: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² (%u), Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½Ðµ Ð±Ð¾Ð»ÐµÐµ 255,
+Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ñ‹Ð¹ Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ half sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %dÐ¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %dÐ¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð°Ñ� Ð¿Ð°Ñ€Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %dÐ¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð°Ñ� Ð¿Ð°Ñ€Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� mach-o ARM: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð¿ÐµÑ€Ð²Ñ‹Ð¼ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ mach-o ARM: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %dÐ¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %dÐ¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ vanilla mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d (pcrel: %d)Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ mach-o: Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð±Ð¾Ð»ÑŒÑˆÐµ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²Ð·Ð°ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð°Ñ�ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒmep: Ð½ÐµÑ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� ÐºÐ¾Ð´Ð° %dmodbeg
 modend
-Ð¸Ð¼Ñ�: [Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: %08lx Ð´Ð»Ð¸Ð½Ð° %d]: Ñ€Ð¾Ð´Ð½Ð¾Ð¹Ð¿Ð¾Ñ�Ð²Ð¸Ð»Ð°Ñ�ÑŒ Ð½Ð¾Ð²Ð°Ñ� Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ�(Ð¸), Ð½Ð¾ Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ Ð²Ñ‹Ð²Ð¾Ð´ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸:Ð½ÐµÑ‚Ð½Ðµ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½ Ð°Ð´Ñ€ÐµÑ� Ñ�ÐºÐ»ÐµÐ¹ÐºÐ°Ð¼ Ð² Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %sÐ½ÐµÑ‚ Ð¾ÑˆÐ¸Ð±ÐºÐ¸Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ðµ Ñ„Ð°Ð¹Ð»Ñ‹ Ð·Ð°ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¸Ñ�ÑŒÐ½ÐµÑ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²Ð½ÐµÑ�Ð²Ñ�Ð·Ð½Ñ‹Ð¹ Ð¼Ð°Ñ�Ñ�Ð¸Ð² %s
-Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %sÐ½Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ 0x%v Ð¿Ð»ÑŽÑ� Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¾Ð²ÐµÑ€Ð»ÐµÑ� 0x%v Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ðµ
+Ð¸Ð¼Ñ�: [Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: %08lx Ð´Ð»Ð¸Ð½Ð° %d]: Ñ€Ð¾Ð´Ð½Ð¾Ð¹Ð¿Ð¾Ñ�Ð²Ð¸Ð»Ð°Ñ�ÑŒ Ð½Ð¾Ð²Ð°Ñ� Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ�(Ð¸), Ð½Ð¾ Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ Ð²Ñ‹Ð²Ð¾Ð´ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸:Ð½ÐµÑ‚Ð½Ðµ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½ Ð°Ð´Ñ€ÐµÑ� Ñ�ÐºÐ»ÐµÐ¹ÐºÐ°Ð¼ Ð² Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %sÐ½ÐµÑ‚ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¼ Ð¸Ð½Ð´ÐµÐºÑ�ÐµÐ½ÐµÑ‚ Ð¾ÑˆÐ¸Ð±ÐºÐ¸Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ðµ Ñ„Ð°Ð¹Ð»Ñ‹ Ð·Ð°ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¸Ñ�ÑŒÐ½ÐµÑ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²Ð½ÐµÑ�Ð²Ñ�Ð·Ð½Ñ‹Ð¹ Ð¼Ð°Ñ�Ñ�Ð¸Ð² %s
+Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %sÐ½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²Ð½Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ 0x%v Ð¿Ð»ÑŽÑ� Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¾Ð²ÐµÑ€Ð»ÐµÑ� 0x%v Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ðµ
 Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @fptrÐ½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ�Ñ€Ð°Ð·Ð´ÐµÐ», Ð½ÐµÐ¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ñ‹Ð¹ Ð´Ð»Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð°Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° GOT Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² GOTÐ½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²ÐºÐ¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹Ð½Ðµ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð´Ð°Ð½Ð½Ñ‹Ðµ=%lx Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾=%d
 Ð½Ðµ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� env Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð°
- [Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð¾]Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ Ð�Ð• error-free !Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�ÐºÐ»ÐµÐ¹ÐºÐ¸ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾ ÐµÑ‘ Ñ€Ð°Ð·Ð¼ÐµÑ€ÑƒÐ¾Ð´Ð½Ð¾Ð¹ Ð¸Ð· Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ Ñ�Ñ‚Ð¾Ð¹ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾, Ñ‡Ñ‚Ð¾ Ð² ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼ ÐºÐ¾Ð´Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ñ� Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸ÐµÐ¼, Ñ‡ÐµÐ¼ Ð±Ñ‹Ð»Ð¾ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¾ Ð² ÐµÐ³Ð¾ Ð¼ÐµÑ�Ñ‚Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ�Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ñ�Ð»Ðµ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ�Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹Ð½Ð¾Ð¹ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ
+ [Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð¾]Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ Ð�Ð• error-free !Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�ÐºÐ»ÐµÐ¹ÐºÐ¸ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾ ÐµÑ‘ Ñ€Ð°Ð·Ð¼ÐµÑ€ÑƒÐ¾Ð´Ð½Ð¾Ð¹ Ð¸Ð· Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ Ñ�Ñ‚Ð¾Ð¹ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾, Ñ‡Ñ‚Ð¾ Ð² ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼ ÐºÐ¾Ð´Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ñ� Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸ÐµÐ¼, Ñ‡ÐµÐ¼ Ð±Ñ‹Ð»Ð¾ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¾ Ð² ÐµÐ³Ð¾ Ð¼ÐµÑ�Ñ‚Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ�Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ñ�Ð»Ðµ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ�Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹Ð½Ð¾Ð¹ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð¼Ð¾Ð´ÑƒÐ»ÑŒÐ½Ð°Ñ� Ð¸Ð½Ñ„Ñ€Ð°Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ð°: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¸Ñ�ÑŒ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ðµ Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ñ‹. ÐŸÐ¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÐ½ÑŒÑˆÐµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð²/Ð°Ñ€Ñ…Ð¸Ð²Ð¾Ð²
+ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ
 Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lxÑ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx:Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx: Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = 0x%lxÑ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = 0x%lx:Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð°Ð´Ñ€ÐµÑ� bkpt 0x%08x
-Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» recbeg: Ð¸Ð¼Ñ�: %.*s
+Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» qÂ» Ð¸ Â«zfaqÂ» Ð¸Ð»Ð¸ Â«zqinxrecbeg: Ð¸Ð¼Ñ�: %.*s
 recend
-Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð±Ð°Ð½ÐºÐ¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� [%lx:%04lx] Ð² Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð¼ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %04lxÑ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð´Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÑŽÑ€ÐµÐ³Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° %%g%d: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %pBÐ² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ
-Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) *Ð�Ð•Ð˜Ð—Ð’Ð•Ð¡Ð¢Ð�Ðž*Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½Ðµ-REL psectÐ¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ñ‡Ñ‘Ñ‚Ð½Ñ‹Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼ÐµÐ¶Ð´Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚Ñ�Ñ�ÑƒÐ´Ð°Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð² Ñ„Ð°Ð¹Ð»Ðµ Â«%pBÂ»Ð¿ÐµÑ€ÐµÐ¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� %pB: %s
-Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¹ cmd %drtnbeg
+Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð° Ð´Ð»Ñ� Ð´Ð»Ð¸Ð½Ñ‹ Ð¸Ð¼ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð±Ð°Ð½ÐºÐ¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� [%lx:%04lx] Ð² Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð¼ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %04lxÑ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð´Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÑŽÑ€ÐµÐ³Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° %%g%d: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %pBÐ² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ
+Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) *Ð�Ð•Ð˜Ð—Ð’Ð•Ð¡Ð¢Ð�Ðž*Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½Ðµ-REL psectÐ¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ñ‡Ñ‘Ñ‚Ð½Ñ‹Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼ÐµÐ¶Ð´Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚Ñ�Ñ�ÑƒÐ´Ð°Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð² Ñ„Ð°Ð¹Ð»Ðµ Â«%pBÂ»Ð¿ÐµÑ€ÐµÐ¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� %pB: %sÐ·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¹ cmd %drtnbeg
 rtnend: Ñ€Ð°Ð·Ð¼ÐµÑ€ 0x%08x
-Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾septyp, Ð¸Ð¼Ñ�: %.*s
+rv%d Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«eÂ»rv%d Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«qÂ»Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾septyp, Ð¸Ð¼Ñ�: %.*s
 set_abs_pc: 0x%08x
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pAÑ€Ð°Ð·Ð´ÐµÐ» small-data Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ 64ÐšÐ‘ â€” Ð½Ð¸Ð¶Ð½Ð¸Ð¹ Ð¿Ñ€ÐµÐ´ÐµÐ» small-data (Ñ�Ð¼. Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -G)som_sizeof_headers Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ñ…Ñ�Ñ� Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð² Ñ�Ñ†ÐµÐ½Ð°Ñ€Ð¸Ð¸ auto-overlay Ð¿Ð¾ÐºÐ° Ð½Ðµ Ñ�Ð´ÐµÐ»Ð°Ð½Ð°
+Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pAÑ€Ð°Ð·Ð´ÐµÐ» small-data Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ 64ÐšÐ‘ â€” Ð½Ð¸Ð¶Ð½Ð¸Ð¹ Ð¿Ñ€ÐµÐ´ÐµÐ» small-data (Ñ�Ð¼. Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -G)som_sizeof_headers Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ�Ñ‚Ð¾Ñ‚ Ñ„Ð°Ð¹Ð»Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ñ…Ñ�Ñ� Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð² Ñ�Ñ†ÐµÐ½Ð°Ñ€Ð¸Ð¸ auto-overlay Ð¿Ð¾ÐºÐ° Ð½Ðµ Ñ�Ð´ÐµÐ»Ð°Ð½Ð°
 Ð˜Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ: modtab, toc Ð¸ extrefsyms Ð¿Ð¾ÐºÐ° Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ‹ Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´ dysymtab.Ð¸Ñ�Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº (Ð´Ð»Ð¸Ð½Ð°: %u)
 Ð½ÐµÑ‚Ð¸Ð¿Ð¸Ñ‡Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ALPHA_R_BSRÐ² Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ Ñ�Ñ‚ÐµÐºÐ° Ð±ÑƒÐ´ÐµÑ‚ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð²Ñ‹Ð·Ð¾Ð² Ð¸Ð· %s Ð² %s
 Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ° (%d) Ð² _bfd_vms_pushÐ²Ñ‹Ñ…Ð¾Ð´ Ð·Ð° Ð½Ð¸Ð¶Ð½ÑŽÑŽ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ Ñ�Ñ‚ÐµÐºÐ° Ð² _bfd_vms_popÑ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ: %s
-Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Â«%sÂ» Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ð¾Ñ‚ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° (Ð±ÐµÐ· Ð¸Ð¼ÐµÐ½Ð¸)Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð½Ðµ Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð¼ÐµÑ€ÑƒÑ�Ð¸Ð¼Ð²Ð¾Ð»Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ st_other Ð´Ð»Ñ� ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ 1Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹: REGISTER Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %pBÐ´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ», Ð½Ð¾ ÐµÐ³Ð¾ Ð½Ðµ Ñ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð°Ð¼Ð°Ñ�Ñ�Ð¸Ð² Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹:
+Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Â«%sÂ» Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ð¾Ñ‚ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° (Ð±ÐµÐ· Ð¸Ð¼ÐµÐ½Ð¸)Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð½Ðµ Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð¼ÐµÑ€ÑƒÑ�Ð¸Ð¼Ð²Ð¾Ð»Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ st_other Ð´Ð»Ñ� ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ 1Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹: REGISTER Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %pBÑ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð°Ñ� Ð¿Ñ€Ð¸Ð²Ñ�Ð·ÐºÐ° STB_GNU_UNIQUE Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ†ÐµÐ»Ñ�Ð¼Ð¸ GNU Ð¸ FreeBSDÐ´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ», Ð½Ð¾ ÐµÐ³Ð¾ Ð½Ðµ Ñ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ STT_GNU_IFUNC Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ†ÐµÐ»Ñ�Ð¼Ð¸ GNU Ð¸ FreeBSDÐ¾ÑˆÐ¸Ð±ÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð°Ð¼Ð°Ñ�Ñ�Ð¸Ð² Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹:
 term(b): 0x%02xterm_w: 0x%04xÐ´Ð»Ñ� Ñ†ÐµÐ»Ð¸ bfin Ð¿Ð¾ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹Ð²Ð¾Ð·Ð½Ð¸Ðº ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� Ñ„Ð»Ð°Ð³Ð¾Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF Ð¸Ð· %pBÑ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² GOT Ð´Ð»Ñ� -fpic: Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPICÐ¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ðµ, Ñ‡Ñ‚Ð¾Ð±Ñ‹ Ð¸Ð·Ð±ÐµÐ¶Ð°Ñ‚ÑŒ Ð¾Ð±Ñ€ÐµÐ·Ð°Ð½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ� Ñ‚Ð¸Ð¿Ð° Ð´Ð»Ñ� Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð°:
 Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ� Ñ‚Ð¸Ð¿Ð° Ð´Ð»Ñ� subscript %u:
 Ñ‚Ð¸Ð¿Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ
 typspec (Ð´Ð»Ð¸Ð½Ð°: %u)
-Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#xÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ»Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰ÐµÐµ Ð¼ÐµÑ�Ñ‚Ð¾ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#xÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ñ�Ñ‚Ð¸Ñ‡ÑŒ %s (Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x) Ð¸Ð· Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ� (Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x), Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð¸Ð· Ñ€Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32678â€”32767
-Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EIHS Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %#xÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð¸Ð· %pBÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#xÐ½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ð±Ð¸Ñ‚ %s
-Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° %s Ð² Ñ�Ð»Ð¾Ð¶Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ: %sÐ½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ STO_SH5_ISA32 Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ðµ Ñ‡Ð¸Ñ�Ð»Ð¾Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð» Ñ�Ð´Ñ€Ð° OSF/1 Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %dÐ½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ egsd-Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð¸Ð¿Ð° %u
+Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#xÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ»Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰ÐµÐµ Ð¼ÐµÑ�Ñ‚Ð¾ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#xÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EIHS Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %#xÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð¸Ð· %pBÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#xÐ½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ð±Ð¸Ñ‚ %s
+Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° %s Ð² Ñ�Ð»Ð¾Ð¶Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ: %sÐ½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ðµ Ñ‡Ð¸Ñ�Ð»Ð¾Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð» Ñ�Ð´Ñ€Ð° OSF/1 Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %dÐ½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ egsd-Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð¸Ð¿Ð° %u
 Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿ emh %u
-Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %sÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿ EGSD %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� ETIR ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ° Ð±Ð°Ð¹Ñ‚ Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ %#xÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ '%c' Ð² Ñ�Ð»Ð¾Ð¶Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÐµÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %sÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s + %sÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¸Ñ�Ñ…Ð¾Ð´Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ %sÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾: %xÐ½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ INPUT_SECTION_FLAG %s
-Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ Ñ†ÐµÐ»Ð¸ TI COFF Â«0x%xÂ»Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ .stabÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ STA cmd %sÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð½Ñ‹Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð¾Ð¼ Ð´Ð°Ð½Ð½Ñ‹Ñ…/Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#xÐ¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ gpÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850 E3Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850eÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e1Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2v3Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e3v5Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð² Ð¾Ð´Ð½Ð¾Ð¼ Ð¸Ð· Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ…, Ð½ÑƒÐ»ÐµÐ²Ñ‹Ñ… Ð¸ ÐºÑ€Ð¾ÑˆÐµÑ‡Ð½Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð½Ñ‹Ñ…Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… Ð¸ ÐºÑ€Ð¾ÑˆÐµÑ‡Ð½Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ�Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… Ð¸ Ð½ÑƒÐ»ÐµÐ²Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ�Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð½ÑƒÐ»ÐµÐ²Ñ‹Ñ… Ð¸ ÐºÑ€Ð¾ÑˆÐµÑ‡Ð½Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ�Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð·Ð°Ð½Ð¸Ð¼Ð°Ñ‚ÑŒ Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð½Ñ‹Ñ…vflags: 0x%02x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: 0x%08x vma:			Ð�Ð°Ñ‡ Ð°Ð´Ñ€ÐµÑ�   	  ÐšÐ¾Ð½ Ð°Ð´Ñ€ÐµÑ�	   Ð Ð°Ñ�ÐºÑ€ Ð´Ð°Ð½Ð½Ñ‹Ðµ
+Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %sÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿ EGSD %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� ETIR ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Â«%sÂ» Ð² .option Ð´Ð»Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ»Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»: 0x%02xÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ° Ð±Ð°Ð¹Ñ‚ Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ %#xÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ '%c' Ð² Ñ�Ð»Ð¾Ð¶Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÐµÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %sÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s + %sÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¸Ñ�Ñ…Ð¾Ð´Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %dÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ %sÐ½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾: %xÐ½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ INPUT_SECTION_FLAG %s
+Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ Ñ†ÐµÐ»Ð¸ TI COFF Â«0x%xÂ»Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ .stabÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ STA cmd %sÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð½Ñ‹Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð¾Ð¼ Ð´Ð°Ð½Ð½Ñ‹Ñ…/Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ gpvÂ» Ð¸Ð»Ð¸ Â«zve64dÂ» Ð¸Ð»Ð¸ Â«zve64fÂ» Ð¸Ð»Ð¸ Â«zve32fvÂ« Ð¸Ð»Ð¸ Â«zve64xÂ» Ð¸Ð»Ð¸ Â«zve32xÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850 E3Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850eÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e1Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2v3Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e3v5Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð² Ð¾Ð´Ð½Ð¾Ð¼ Ð¸Ð· Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ…, Ð½ÑƒÐ»ÐµÐ²Ñ‹Ñ… Ð¸ ÐºÑ€Ð¾ÑˆÐµÑ‡Ð½Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð½Ñ‹Ñ…Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… Ð¸ ÐºÑ€Ð¾ÑˆÐµÑ‡Ð½Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ�Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… Ð¸ Ð½ÑƒÐ»ÐµÐ²Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ�Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð½ÑƒÐ»ÐµÐ²Ñ‹Ñ… Ð¸ ÐºÑ€Ð¾ÑˆÐµÑ‡Ð½Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ�Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð·Ð°Ð½Ð¸Ð¼Ð°Ñ‚ÑŒ Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð½Ñ‹Ñ…vflags: 0x%02x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: 0x%08x vma:			Ð�Ð°Ñ‡ Ð°Ð´Ñ€ÐµÑ�   	  ÐšÐ¾Ð½ Ð°Ð´Ñ€ÐµÑ�	   Ð Ð°Ñ�ÐºÑ€ Ð´Ð°Ð½Ð½Ñ‹Ðµ
 Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ, Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .pdata (%ld) Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ %d
-Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %pB Ð¸ %pB Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ wchar_tÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %pB Ð¸ %pB Ð¿Ð¾-Ñ€Ð°Ð·Ð½Ð¾Ð¼Ñƒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð´Ð»Ñ� DSBTÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚Ñƒ, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ %pB Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ (%Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ %pB Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚Ñƒ, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð½ÐµÑ‚Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s enum, Ñ…Ð¾Ñ‚Ñ� ÑƒÐ¶Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ñ�Ñ� %s enum; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ enum Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ñ… Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹ wchar_t, Ñ…Ð¾Ñ‚Ñ� ÑƒÐ¶Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹ wchar_t; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ wchar_t Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ñ… Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ð²Ñ‹Ðµ Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ð²Ñ‹Ðµ Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ %s Ñ� %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ GNU_PROPERTY_TYPE (%ld): %#lxÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ GNU_PROPERTY_TYPE (%ld), Ñ‚Ð¸Ð¿ (0x%x), Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð´Ð°Ð½Ð½Ñ‹Ñ…: 0x%xÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñƒ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ� ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹: 0x%xÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ°: 0x%xÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° ARC %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ MSPABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ GNU_PROPERTY_TYPE (%ld): 0x%xÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°
+Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %pB Ð¸ %pB Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ wchar_tÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %pB Ð¸ %pB Ð¿Ð¾-Ñ€Ð°Ð·Ð½Ð¾Ð¼Ñƒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð´Ð»Ñ� DSBTÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚Ñƒ, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ LOAD Ñ� Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ RWXÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ TLS Ñ� Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð½Ð° Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ %pB Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾ÐºÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ %pB Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» %pB Ñ€Ð°Ñ�ÑˆÐ¸Ñ€Ñ�ÐµÑ‚Ñ�Ñ� Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ„Ð°Ð¹Ð»Ð°Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ %pB Ñ€Ð°Ñ�ÑˆÐ¸Ñ€Ñ�ÐµÑ‚Ñ�Ñ� Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ„Ð°Ð¹Ð»Ð°Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚Ñƒ, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð½ÐµÑ‚Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½ÑƒÑŽ Ð²ÐµÑ€Ñ�Ð¸ÑŽ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ %u.%u.%u, Ð½Ð¾ Ð´Ð»Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %u.%u.%uÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s enum, Ñ…Ð¾Ñ‚Ñ� ÑƒÐ¶Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ñ�Ñ� %s enum; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ enum Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ñ… Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹ wchar_t, Ñ…Ð¾Ñ‚Ñ� ÑƒÐ¶Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹ wchar_t; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ wchar_t Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ñ… Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ð²Ñ‹Ðµ Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ð²Ñ‹Ðµ Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ %s Ñ� %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ GNU_PROPERTY_TYPE (%ld): %#lxÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ GNU_PROPERTY_TYPE (%ld), Ñ‚Ð¸Ð¿ (0x%x), Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð´Ð°Ð½Ð½Ñ‹Ñ…: 0x%xÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñƒ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ� ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹: 0x%xÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ°: 0x%xÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° ARC %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ MSPABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %dÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ GNU_PROPERTY_TYPE (%ld): 0x%xÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°
 Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ� %s
-Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð¸Ð¼ÐµÐµÑ‚ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: --plt-localentry Ð¾Ñ�Ð¾Ð±ÐµÐ½Ð½Ð¾ Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð±ÐµÐ· Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ Ð² ld.so Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð½Ð°Ñ€ÑƒÑˆÐµÐ½Ð¸Ð¹ ABIÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78_SYM Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RX_SYM Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ %u Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB Ð±Ð¾Ð»ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ (%u) ÐµÐ³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pAÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ %u Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB Ð¼ÐµÐ½ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ %u Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð·Ð¾Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ %s, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð±Ñ€Ð¾Ñ� Ñ„Ð»Ð°Ð³Ð° Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ %pB, Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ� Ð½Ð¸Ð¼ Ð±Ñ‹Ð» Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð±ÐµÐ· Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð¸Ð· %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‡Ð¸Ñ‰Ð°ÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð´Ð»Ñ� %pB Ð¸Ð·-Ð·Ð° Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ð·Ð°Ð¿Ñ€Ð¾Ñ�Ð°Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€Ð°Ð·Ð²Ñ‘Ñ€Ñ‚ÐºÐ¸
-Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ %pB Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ ck%s ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� ck%s Ñ†ÐµÐ»Ð¸, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼ ck%sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gc-sections Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‰ÐµÐ¹ Ð½Ðµ-PIC ÐºÐ¾Ð´Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‰ÐµÐ¹ Ð½Ðµ-PID ÐºÐ¾Ð´Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð»Ð°Ð³ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð´Ð»Ñ� %pB Ð½Ðµ ÑƒÑ�Ñ‚Ð°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�, Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ð½ ÑƒÐ¶Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚ÑƒÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·ÑƒÐµÑ‚Ñ�Ñ� Ð² Ð¿Ñ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸ÐµÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½ Ð½Ð° PROGBITSÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¸ Ð½Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ð¸ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½ Ñ� %d Ð½Ð° %d Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð·Ð°Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ð¹ eflag Â«%#lxÂ»Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ñ‹ Ð¸Ð»Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ»Ð¸ Ñ„Ð»Ð°Ð³Ð¸ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð¼Ð°ÑˆÐ¸Ð½Ð° Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð² Ð°Ñ€Ñ…Ð¸Ð²: Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð¼ÐµÑ‚ÐºÐ° Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÑ‚Ñ�Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð¿Ð¾ Ð¾Ð³Ñ€Ð¾Ð¼Ð½Ð¾Ð¼Ñƒ (Ñ‚. Ðµ., Ð¾Ñ‚Ñ€Ð¸Ñ†Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¼Ñƒ) Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¼Ñƒ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» xdata
-Ð´Ð°Ð²Ð°Ð¼ Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�Ñ‚ÑŒ %s Ð² Ñ�Ñ†ÐµÐ½Ð°Ñ€Ð¸Ð¸PRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: bad reloc address %# in section `%pA'%pB: illegal relocation type %d at address %#%pB: corrupt symbol count: %#%pB: not enough memory to allocate space for %# symbols of size %#%pB: bad string table size %error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %%pB: error: attribute section length too small: %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: corrupt size field in group section header: %#%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
- linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: version count (%) does not match symbol count (%ld)warning: %pB is truncated: expected core file size >= %, found: %%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csectTOC overflow: %# > 0x10000; try -mminimal-toc when compiling%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%pB: Data Directory size (%lx) exceeds space left in section (%)%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ % >= %%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TOC Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð±ÐµÐ· Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° TOC%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_USES%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: R_SH_USES ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½ÑƒÑŽ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ %#x%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ñ‡Ð½Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_USES%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ COUNT%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¿Ñ€Ð¸ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ð¸%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#%pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: %#%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð¼ÐµÑ�Ñ‚Ð° Ð´Ð»Ñ� %# Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %#%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ñ‚Ñ€Ð¾Ðº %#Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB(%pA) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾ (%# Ð±Ð°Ð¹Ñ‚)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%#) Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¸Ð»Ð¸ Ñ€Ð°Ð²Ð½Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ %s (%#)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð´Ð°Ð½Ð½Ñ‹Ñ… (%#) Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð±ÑƒÑ„ÐµÑ€Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ‚Ð¸Ð¿Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾ %#Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ… Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð» (%)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ… Ð±Ð¾Ð»ÑŒÑˆÐµ (%) Ñ‡ÐµÐ¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð¾, Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐµÑ�Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%#lx)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ %%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð°: %%pB(%pA+%#): Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ %u >= % Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð³Ñ€ÑƒÐ¿Ð¿: %#%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð³Ñ€ÑƒÐ¿Ð¿: %#%pB: Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA lma %# Ð¿Ð¾Ð´Ð¾Ð³Ð½Ð°Ð½Ð¾ Ðº %#%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð¿Ð¾ vaddr=%#, Ñ�Ñ‚Ð¾ Ñ‚Ð°Ðº Ð·Ð°Ð´ÑƒÐ¼Ñ‹Ð²Ð°Ð»Ð¾Ñ�ÑŒ?%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° %#%pB(%pA+%#): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CMEM Ð² Â«%sÂ», 16 MSB Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð²Ð½Ð¾ %#)%pB(%pA+%#): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CMEM Ð² Â«%s+%#Â», 16 MSB Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð²Ð½Ð¾ %#)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %s Â«%#lxÂ» Ð² Ñ‚Ñ€Ð°Ð¼Ð¿Ð»Ð¸Ð½Ðµ TLS%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %s Â«%#lxÂ», Ð½Ð° ÐºÐ¾Ñ‚Ð¾Ñ€ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� TLS_GOTDESC%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ%pB(%pA+%#): Ð² Ð³Ñ€ÑƒÐ¿Ð¿Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ ALU Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ñ‹ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ADD Ð¸Ð»Ð¸ SUB%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� %# Ð´Ð»Ñ� Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %s%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ SEC_MERGE%pB(%pA+%#): %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ %s%pB(%pA+%#): %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� Ð½Ðµ TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ %s%pB(%#): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX; Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ % Ð±Ð°Ð¹Ñ‚; Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�%pB(%pA+%#): Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ»%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ° %d%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ Â«%pA+%#Â» Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ % Ñƒ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ % Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ñ�Ñ‚Ð¸Ñ‡ÑŒ %s, Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -ffunction-sections%pB(%pA+%#): Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %#x Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð½Ðµ Ð¾Ð±Ñ‰ÐµÐ¹ Ñ�Ñ�Ñ‹Ð»ÐºÐµ%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ %s Ð´Ð»Ñ� %s%pB: TLS-Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ Ð¸Ð· %s Ð² %s Ð´Ð»Ñ� Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº ip2k: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# (Ð½Ð°Ð·Ð½Ð°Ñ‡ = %#)ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº ip2k: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# (Ð½Ð°Ð·Ð½Ð°Ñ‡ = %#)%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#%pB(%pA+%#): Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ñ� Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹ %#x%pB(%pA): Ð½ÐµÐ±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ PID %s Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# (Ð´Ð»Ñ� %s Ð² %s)%pB(%pA+%#): Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� Ð´Ð»Ñ� TLS-Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CALL15 Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð½Ðµ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: R_SH_USES ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½ÑƒÑŽ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ 0x%x%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ðµ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ� Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ�%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s (%#)%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_PSHA %# Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32..32%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_PSHL %# Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32..32%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ Ðº Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ GD->LE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd4??)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xc7??)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd1??)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x310c)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x410b)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x34cc)%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ IE->LE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd0??: mov.l)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x0?12: stc)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x0?ce: mov.l)%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ GD->IE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ LD->LE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#%pB(%s+%#): Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½ÑƒÑŽ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ %#x%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ GOT Ð¸Ð· % Ðº Â«%sÂ» Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ GOT Ð¸Ð· %%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ PLT Ð¸Ð· % Ðº Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ðº % Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%pB(%pA+%): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ€Ð°Ð·Ð¼ÐµÑ€=%)%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� XTENSA_ASM_SIMPLIFY; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s%pB: %pA+%#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð´Ð»Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ .plt, Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ dp = %#%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ð±Ñ€Ð°Ñ‚ÑŒÑ�Ñ� Ð´Ð¾ %s%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ�Ð»Ð°Ð±Ð¸Ñ‚ÑŒ br Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ brl Ð¸Ð»Ð¸ ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ… (%# >= 0x400000)%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ TLS-Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð´Ð»Ñ� Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ».%pB: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ�Ð»Ð°Ð±Ð¸Ñ‚ÑŒ br (%s) Ð´Ð¾ Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %# (> 0x1000000).Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ñ�Ñ� Ñ� % Ð² %pB Ð½Ð° % Ð² %pB%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ % Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %ld%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ Ð½ÐµÑ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²Ð¸Ñ� Ð´Ð»Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ�
- Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ¾Ð¼: Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½: % != Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½: %%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° LOCAL: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€ $% Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð¼; Ð¿ÐµÑ€Ð²Ñ‹Ð¹ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€: $%%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ Ñ� STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ: %%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ %s%#x Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ».%pB: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð²ÐµÑ€Ñ�Ð¸Ð¸ (%) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ�Ð¾ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%ld)Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB ÑƒÑ�ÐµÑ‡Ñ‘Ð½: Ð¾Ð¶Ð¸Ð´Ð°Ð»Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð° core >= %, Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾: %%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%# >= %#lx) Ð´Ð»Ñ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»%pB: Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%#) Ð´Ð»Ñ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ», Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº Ð² Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ Ð½ÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%#) Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB: %pA+%#: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð»Ñ� INHERIT%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«.reginfoÂ»; Ð¾Ð¶Ð¸Ð´Ð°Ð»Ñ�Ñ� %, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ %%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GOT Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð½Ðµ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð°Ñ…%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CALL16 Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð½Ðµ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰ÐµÐµ LO16 Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñƒ Â«%sÂ» Ð´Ð»Ñ� %s Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»%pB: VMA Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Â«%pAÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Â«-Ttext-segment=â€¦Â»%pB: Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pAÂ» Ð´Ð»Ñ� % Ð¸Ð· Â«%pAÂ» Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° ADDIUPC%pB: Ñ�Ñ‚Ð°Ñ€Ñ‚Ð¾Ð²Ñ‹Ð¹ VMA Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Â«%pAÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Â«-Ttext-segment=â€¦Â»%pB: 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� %# Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° Intel Hex Ñ„Ð°Ð¹Ð»Ð°%pB: Ð°Ð´Ñ€ÐµÑ� %# Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° Intel Hex Ñ„Ð°Ð¹Ð»Ð°Ð°Ð´Ñ€ÐµÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#) Ð¼ÐµÐ½ÑŒÑˆÐµ Ð½Ð°Ñ‡Ð°Ð»Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° (%#)%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%)%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð²Ñ‹Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ 4 (%#)%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²; Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ€Ð°Ð²Ð½Ð° %%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð´Ð»Ñ� Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² Ð´Ð»Ð¸Ð½Ñ‹ %: %#%pB: Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» XTY_ER Â«%sÂ»: ÐºÐ»Ð°Ñ�Ñ� %d scnum %d scnlen %%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð¾Ð¼ %d scnlen %%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s:% Ð½Ðµ Ð² csectÐ¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ TOC: % > 0x10000; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� -mminimal-toc%pB(%pA+%#): Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� % Ð±Ð°Ð¹Ñ‚ Ð´Ð»Ñ� Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ� Ð¿Ð¾ %-Ð±Ð°Ð¹Ñ‚Ð½Ð¾Ð¹ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ, Ð½Ð¾ ÐµÑ�Ñ‚ÑŒ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ %%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ… (%lx) Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐµÑ�Ñ� Ð¼ÐµÑ�Ñ‚Ð¾ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%)
\ No newline at end of file
+Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð¸Ð¼ÐµÐµÑ‚ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÑƒÐ¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ %s, Ð° Ð½Ðµ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²Ð¸Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .note.GNU-stack Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°ÐµÑ‚ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ Ñ�Ñ‚ÐµÐºÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s: Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ Ñ�Ñ‚ÐµÐº (Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ€Ð°Ð·Ð´ÐµÐ» .note.GNU-stack Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹)Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: --plt-localentry Ð¾Ñ�Ð¾Ð±ÐµÐ½Ð½Ð¾ Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð±ÐµÐ· Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ Ð² ld.so Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð½Ð°Ñ€ÑƒÑˆÐµÐ½Ð¸Ð¹ ABIÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: --plt-localentry Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ ÐºÐ¾Ð´Ð¾Ð¼ power10Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÐŸÐ Ð˜ÐœÐ•Ð§Ð�Ð�Ð˜Ð•: Ð¿Ñ€Ð¸ Ñ€Ð°Ñ�Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ�Ñ… Ð² Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ð¸ Ð¼Ð¾Ð³ÑƒÑ‚ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°Ñ‚ÑŒ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹. Ð ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð¾Ð±Ñ€Ð°Ñ‚ÑŒÑ�Ñ� Ñ� Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¾Ð¹.Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÐŸÐ Ð˜ÐœÐ•Ð§Ð�Ð�Ð˜Ð•: Ð¿Ñ€Ð¸ Ñ€Ð°Ñ�Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ�Ñ… Ð² Ñ€Ð°Ð·Ð¼ÐµÑ€Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°Ñ‚ÑŒ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹. Ð ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð¾Ð±Ñ€Ð°Ñ‚ÑŒÑ�Ñ� Ñ� Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¾Ð¹.Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78_SYM Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RX_SYM Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ %u Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB Ð±Ð¾Ð»ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ (%u) ÐµÐ³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pAÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ %u Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB Ð¼ÐµÐ½ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ %u, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ð¾Ð±Ñ‰Ð¸Ð¼ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ %u Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB Ð¼ÐµÐ½ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ %u Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð·Ð¾Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ %s, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð±Ñ€Ð¾Ñ� Ñ„Ð»Ð°Ð³Ð° Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ %pB, Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ� Ð½Ð¸Ð¼ Ð±Ñ‹Ð» Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð±ÐµÐ· Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð¸Ð· %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‡Ð¸Ñ‰Ð°ÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð´Ð»Ñ� %pB Ð¸Ð·-Ð·Ð° Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ð·Ð°Ð¿Ñ€Ð¾Ñ�Ð°Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€Ð°Ð·Ð²Ñ‘Ñ€Ñ‚ÐºÐ¸
+Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ° Ð¸Ð·-Ð·Ð° Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ -z execstackÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ %pB Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ %s ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ†ÐµÐ»ÐµÐ²Ñ‹Ð¼ %s, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼ Ñ„Ð»Ð°Ð³ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ %pB Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ %s ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ†ÐµÐ»ÐµÐ²Ñ‹Ð¼ %s, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gc-sections Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‰ÐµÐ¹ Ð½Ðµ-PIC ÐºÐ¾Ð´Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‰ÐµÐ¹ Ð½Ðµ-PID ÐºÐ¾Ð´Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð»Ð°Ð³ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð´Ð»Ñ� %pB Ð½Ðµ ÑƒÑ�Ñ‚Ð°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�, Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ð½ ÑƒÐ¶Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚ÑƒÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ 1.9.1 Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ� Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ñ�Ð¼Ð¸ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·ÑƒÐµÑ‚Ñ�Ñ� Ð² Ð¿Ñ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸ÐµÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½ Ð½Ð° PROGBITSÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¸ Ð½Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ð¸ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½ Ñ� %d Ð½Ð° %d Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð·Ð°Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² %pBÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¸Ð¼Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%#xÂ»Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ eflag Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%#lxÂ»Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ñ‹ Ð¸Ð»Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ»Ð¸ Ñ„Ð»Ð°Ð³Ð¸ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð¼Ð°ÑˆÐ¸Ð½Ð° Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð² Ð°Ñ€Ñ…Ð¸Ð²: Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð¼ÐµÑ‚ÐºÐ° Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÑ‚Ñ�Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð¿Ð¾ Ð¾Ð³Ñ€Ð¾Ð¼Ð½Ð¾Ð¼Ñƒ (Ñ‚. Ðµ., Ð¾Ñ‚Ñ€Ð¸Ñ†Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¼Ñƒ) Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¼Ñƒ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» xdata
+Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ x ISA Â«%sÂ» Ð´Ð¾Ð»Ð¶Ð½Ð¾ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ�Ð¼Ð¸Ð´Ð°Ð²Ð°Ð¼ Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�Ñ‚ÑŒ %s Ð² Ñ�Ñ†ÐµÐ½Ð°Ñ€Ð¸Ð¸zbbÂ» Ð¸Ð»Ð¸ Â«zbkbzbcÂ» Ð¸Ð»Ð¸ Â«zbkczfhÂ» Ð¸ Â«zfazfhÂ» Ð¸Ð»Ð¸ Â«zhinxzfhminÂ» Ð¸ Â«dÂ», Ð¸Ð»Ð¸ Â«zhinxminÂ» Ð¸ Â«zdinxzfhminÂ» Ð¸ Â«qÂ», Ð¸Ð»Ð¸ Â«zhinxminÂ» Ð¸ Â«zqinxzfhminÂ» Ð¸Ð»Ð¸ Â«zhinxminzkndÂ» Ð¸Ð»Ð¸ Â«zknezvbbzvbczvkgzvknedzvknhazvknhbzvksedzvkshÐ´Ð»Ñ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ð¹ zvl*b Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«vÂ» Ð¸Ð»Ð¸ Â«zveÂ»PRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: TLS relocation at 0x% over non-TLS symbol %s (0x%x)
+%pB: TLS local relocation at 0x% over imported symbol %s
+%pB: relocation (%d) at 0x% has wrong r_rsize (0x%x)
+%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: relocation (%d) at (0x%) has wrong r_rsize (0x%x)
+%pB: illegal relocation type %d at address %#%pB: bad string table size %%pB: stripping non-representable symbol '%s' (value 0x%)%pB: bad reloc address %# in section `%pA'error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %DWARF error: unable to locate abstract instance DIE ref %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)ERROR: CMSE stub (%s section) too far (%#) from destination (%#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#global pointer relative relocation at address %# when _gp not defined
+unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767
+%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
+ linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB(%pA+%#): misaligned symbol `%s' (%#) for relocation %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: %pA+%: relocation addend % too large%pB: version count (%) does not match symbol count (%ld)%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: bad symbol definition: `Main' set to % rather than the start address %
+%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB(%pA+%#): %s relocation offset out of order%pB(%pA+%#): %s relocation offset out of range%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csect%pB: Unable to find a stub csect in rangeof relocation at %# targeting'%s'TOC overflow: %# > 0x10000; try -mminimal-toc when compiling%pB: error: erratum 843419 immediate 0x% out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead%# invaild imm%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x% without any addend, but may be 0x% after adding the %%pcrel_lo addend%pB: Data Directory (%lx bytes at %) extends across section boundary at %%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ % >= %%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TOC Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð±ÐµÐ· Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° TOC%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x% Ð½Ð°Ð´ Ð½Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ TLS %s (0x%x)
+%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x% Ð½Ð°Ð´ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ %s
+%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x% Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ñ‹Ð¹ r_rsize (0x%x)
+%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_USES%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: R_SH_USES ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½ÑƒÑŽ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ %#x%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ñ‡Ð½Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_USES%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ COUNT%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¿Ñ€Ð¸ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ð¸%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ (0x%) Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ñ‹Ð¹ r_rsize (0x%x)
+%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ñ‚Ñ€Ð¾Ðº %#%pB: ÑƒÐ´Ð°Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ 0x%)%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB(%pA) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾ (%# Ð±Ð°Ð¹Ñ‚)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%#) Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¸Ð»Ð¸ Ñ€Ð°Ð²Ð½Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ %s (%#)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð´Ð°Ð½Ð½Ñ‹Ñ… (%#) Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð±ÑƒÑ„ÐµÑ€Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ‚Ð¸Ð¿Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾ %#Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ… Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð» (%)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ… Ð±Ð¾Ð»ÑŒÑˆÐµ (%) Ñ‡ÐµÐ¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð¾, Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐµÑ�Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%#lx)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ %Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ñ‹Ð¹ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ DIE %%pB(%pA+%#): Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ %u >= % Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð³Ñ€ÑƒÐ¿Ð¿: %#%pB: Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA lma %# Ð¿Ð¾Ð´Ð¾Ð³Ð½Ð°Ð½Ð¾ Ðº %#%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð¿Ð¾ vaddr=%#, Ñ�Ñ‚Ð¾ Ñ‚Ð°Ðº Ð·Ð°Ð´ÑƒÐ¼Ñ‹Ð²Ð°Ð»Ð¾Ñ�ÑŒ?%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° %#%pB(%pA+%#): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CMEM Ð² Â«%sÂ», 16 MSB Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð²Ð½Ð¾ %#)%pB(%pA+%#): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CMEM Ð² Â«%s+%#Â», 16 MSB Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð²Ð½Ð¾ %#)ÐžÐ¨Ð˜Ð‘ÐšÐ�: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° CMSE (Ñ€Ð°Ð·Ð´ÐµÐ» %s) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð°Ð»ÐµÐºÐ¾ (%#) Ð¾Ñ‚ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� (%#)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %s Â«%#lxÂ» Ð² Ñ‚Ñ€Ð°Ð¼Ð¿Ð»Ð¸Ð½Ðµ TLS%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %s Â«%#lxÂ», Ð½Ð° ÐºÐ¾Ñ‚Ð¾Ñ€ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� TLS_GOTDESC%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ%pB(%pA+%#): Ð² Ð³Ñ€ÑƒÐ¿Ð¿Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ ALU Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ñ‹ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ADD Ð¸Ð»Ð¸ SUB%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� %# Ð´Ð»Ñ� Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %s%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ SEC_MERGE%pB(%pA+%#): %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ %s%pB(%pA+%#): %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� Ð½Ðµ TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ %s%pB(%#): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX; Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ % Ð±Ð°Ð¹Ñ‚; Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�%pB(%pA+%#): Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ»%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ° %d%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ Â«%pA+%#Â» Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ % Ñƒ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ % Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ñ�Ñ‚Ð¸Ñ‡ÑŒ %s, Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -ffunction-sections%pB(%pA+%#): Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %#x Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð½Ðµ Ð¾Ð±Ñ‰ÐµÐ¹ Ñ�Ñ�Ñ‹Ð»ÐºÐµ%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ %s Ð´Ð»Ñ� %s%pB: TLS-Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ Ð¸Ð· %s Ð² %s Ð´Ð»Ñ� Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº ip2k: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# (Ð½Ð°Ð·Ð½Ð°Ñ‡ = %#)ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº ip2k: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# (Ð½Ð°Ð·Ð½Ð°Ñ‡ = %#)%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°
+Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ñ�Ñ‚Ð¸Ñ‡ÑŒ %s (Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#) Ð¸Ð· Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ� (%#), Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%) Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð¸Ð· Ñ€Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32678â€”32767
+%pB(%pA+%#): Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ñ� Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹ %#x%pB(%pA): Ð½ÐµÐ±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ PID %s Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# (Ð´Ð»Ñ� %s Ð² %s)%pB(%pA+%#): Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� Ð´Ð»Ñ� TLS-Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CALL15 Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð½Ðµ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: R_SH_USES ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½ÑƒÑŽ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ 0x%x%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ðµ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ� Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ�%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s (%#)%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_PSHA %# Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32..32%pB: %#: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_PSHL %# Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32..32%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ Ðº Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ GD->LE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd4??)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xc7??)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd1??)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x310c)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x410b)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x34cc)%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ IE->LE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd0??: mov.l)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x0?12: stc)%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x0?ce: mov.l)%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ GD->IE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ LD->LE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#%pB(%s+%#): Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½ÑƒÑŽ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ %#x%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ%pB: %#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ GOT Ð¸Ð· % Ðº Â«%sÂ» Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ GOT Ð¸Ð· %%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ PLT Ð¸Ð· % Ðº Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ðº % Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA%pB(%pA+%): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ€Ð°Ð·Ð¼ÐµÑ€=%)%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� XTENSA_ASM_SIMPLIFY; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s%pB: %pA+%#: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð´Ð»Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ .plt, Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ dp = %#%pB(%pA+%#): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ð±Ñ€Ð°Ñ‚ÑŒÑ�Ñ� Ð´Ð¾ %s%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ�Ð»Ð°Ð±Ð¸Ñ‚ÑŒ br Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ brl Ð¸Ð»Ð¸ ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ… (%# >= 0x400000)%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ TLS-Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð´Ð»Ñ� Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ».%pB: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ�Ð»Ð°Ð±Ð¸Ñ‚ÑŒ br (%s) Ð´Ð¾ Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %# (> 0x1000000).Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ñ�Ñ� Ñ� % Ð² %pB Ð½Ð° % Ð² %pB%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ % Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %ld%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ Ð½ÐµÑ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²Ð¸Ñ� Ð´Ð»Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ�
+ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ¾Ð¼: Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½: % != Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½: %%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° LOCAL: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€ $% Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð¼; Ð¿ÐµÑ€Ð²Ñ‹Ð¹ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€: $%%pB(%pA+%#): Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» (%#) Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ Ñ� STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ: %%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ %s%#x Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ».%pB: %pA+%: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ðº Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ % Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾%pB: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð²ÐµÑ€Ñ�Ð¸Ð¸ (%) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ�Ð¾ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%ld)%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%# >= %#lx) Ð´Ð»Ñ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»%pB: Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%#) Ð´Ð»Ñ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ», Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº Ð² Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ Ð½ÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%#) Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB: %pA+%#: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð»Ñ� INHERIT%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«.reginfoÂ»; Ð¾Ð¶Ð¸Ð´Ð°Ð»Ñ�Ñ� %, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ %%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GOT Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð½Ðµ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð°Ñ…%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CALL16 Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð½Ðµ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰ÐµÐµ LO16 Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñƒ Â«%sÂ» Ð´Ð»Ñ� %s Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»%pB: VMA Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Â«%pAÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Â«-Ttext-segment=â€¦Â»%pB: Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pAÂ» Ð´Ð»Ñ� % Ð¸Ð· Â«%pAÂ» Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° ADDIUPC%pB: Ñ�Ñ‚Ð°Ñ€Ñ‚Ð¾Ð²Ñ‹Ð¹ VMA Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Â«%pAÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %# Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Â«-Ttext-segment=â€¦Â»%pB: 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� %# Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° Intel Hex Ñ„Ð°Ð¹Ð»Ð°%pB: Ð°Ð´Ñ€ÐµÑ� %# Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° Intel Hex Ñ„Ð°Ð¹Ð»Ð°Ð°Ð´Ñ€ÐµÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#) Ð¼ÐµÐ½ÑŒÑˆÐµ Ð½Ð°Ñ‡Ð°Ð»Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° (%#)%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%)%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð²Ñ‹Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ 4 (%#)%pB: Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«MainÂ» Ñ€Ð°Ð²ÐµÐ½ %, Ð° Ð½Ðµ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %
+%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²; Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ€Ð°Ð²Ð½Ð° %%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð´Ð»Ñ� Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² Ð´Ð»Ð¸Ð½Ñ‹ %: %#%pB(%pA+%#): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð²Ð½Ðµ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ°%pB(%pA+%#): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°%pB: Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» XTY_ER Â«%sÂ»: ÐºÐ»Ð°Ñ�Ñ� %d scnum %d scnlen %%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð¾Ð¼ %d scnlen %%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s:% Ð½Ðµ Ð² csect%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÑƒ csect Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ rangeof Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#, ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‰ÐµÐ¼Ñƒ Ð½Ð° Â«%sÂ»Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ TOC: % > 0x10000; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� -mminimal-toc%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ñ…Ð¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ñ�Ñ‚Ð²ÐµÐ½Ð½Ð¾Ð³Ð¾ 0x% Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð°Ð¼Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° Ð´Ð»Ñ� ADR (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð») Ð¸ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� --fix-cortex-a53-843419=adr. Ð’Ð¼ÐµÑ�Ñ‚Ð¾ Ñ�Ñ‚Ð¾Ð³Ð¾ Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --fix-cortex-a53-843419=full%# Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ñ�Ñ‚Ð²ÐµÐ½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ%pB(%pA+%#): Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� % Ð±Ð°Ð¹Ñ‚ Ð´Ð»Ñ� Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ� Ð¿Ð¾ %-Ð±Ð°Ð¹Ñ‚Ð½Ð¾Ð¹ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ, Ð½Ð¾ ÐµÑ�Ñ‚ÑŒ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ %Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ %%pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %%pcrel_hi Ñ€Ð°Ð²Ð½Ð¾ 0x% Ð±ÐµÐ· Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ð¹, Ð½Ð¾ Ð¼Ð¾Ð¶ÐµÑ‚ Ñ�Ñ‚Ð°Ñ‚ÑŒ 0x% Ð¿Ð¾Ñ�Ð»Ðµ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ� %%pcrel_lo%pB: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ð°Ð½Ð½Ñ‹Ñ… (%lx Ð±Ð°Ð¹Ñ‚ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %) Ñ€Ð°Ñ�ÑˆÐ¸Ñ€Ñ�ÐµÑ‚Ñ�Ñ� Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %
\ No newline at end of file
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ru.po ./bfd/po/ru.po
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/ru.po	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/ru.po	2024-02-01 01:47:14.000000000 +0000
@@ -2,13 +2,13 @@
 # Copyright (C) 2003, 2005, 2006, 2009 Free Software Foundation, Inc.
 # This file is distributed under the same license as the binutils package.
 #
-# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2011, 2012, 2018, 2019.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2011, 2012, 2018, 2019, 2020, 2021, 2023.
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd 2.31.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2019-01-19 16:30+0000\n"
-"PO-Revision-Date: 2019-01-24 18:57+0300\n"
+"Project-Id-Version: bfd 2.40.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2023-07-03 11:31+0100\n"
+"PO-Revision-Date: 2023-08-06 11:16+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
 "Language: ru\n"
@@ -16,269 +16,322 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Lokalize 2.0\n"
+"X-Generator: Lokalize 22.12.3\n"
 "Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: aout-cris.c:200
+#: aout-cris.c:196
 #, c-format
 msgid "%pB: unsupported relocation type exported: %#x"
 msgstr "%pB: Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x"
 
-#: aout-cris.c:244
+#: aout-cris.c:242
 #, c-format
 msgid "%pB: unsupported relocation type imported: %#x"
 msgstr "%pB: Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x"
 
-#: aout-cris.c:256
+#: aout-cris.c:254
 #, c-format
 msgid "%pB: bad relocation record imported: %d"
 msgstr "%pB: Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸: %d"
 
-#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1238 pdp11.c:1511
 #, c-format
 msgid "%pB: can not represent section `%pA' in a.out object file format"
 msgstr "%pB: Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° a.out"
 
-#: aoutx.h:1582 pdp11.c:1371
+#: aoutx.h:1576 pdp11.c:1483
 #, c-format
 msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
 msgstr "%pB: Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° a.out"
 
-#: aoutx.h:1585 vms-alpha.c:7860
+#: aoutx.h:1579 vms-alpha.c:8437
 msgid "*unknown*"
 msgstr "*Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾*"
 
-#: aoutx.h:1721
+#: aoutx.h:1715 pdp11.c:1579
 #, c-format
 msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ %<PRIu64> >= %<PRIu64>"
 
-#: aoutx.h:2412 aoutx.h:2430
+#: aoutx.h:1963
+#, c-format
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� AOUT: %d"
+
+#: aoutx.h:2407 aoutx.h:2425 pdp11.c:2062
 #, c-format
 msgid "%pB: attempt to write out unknown reloc type"
 msgstr "%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: aoutx.h:4086
+#: aoutx.h:4080 pdp11.c:3446
 #, c-format
 msgid "%pB: unsupported relocation type"
 msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
 #. Unknown relocation.
-#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772
-#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798
-#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517
-#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698
-#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467
-#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522
-#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381
-#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302
-#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539
-#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417
-#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354
-#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692
-#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137
-#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236
-#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037
-#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420
-#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292
-#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508
-#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642
-#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270
-#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250
-#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459
-#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249
-#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958
-#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921
-#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378
-#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955
-#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2125
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2223
-#: elf32-ia64.c:210 elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862
+#: aoutx.h:4400 coff-alpha.c:601 coff-alpha.c:1521 coff-mips.c:356
+#: coff-rs6000.c:3029 coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:262
+#: elf-hppa.h:798 elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813
+#: elf32-arc.c:532 elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1063
+#: elf32-bfin.c:4686 elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467
+#: elf32-crx.c:429 elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522
+#: elf32-d30v.c:544 elf32-dlx.c:546 elf32-epiphany.c:373 elf32-fr30.c:381
+#: elf32-frv.c:2559 elf32-frv.c:6240 elf32-ft32.c:304 elf32-h8300.c:302
+#: elf32-i386.c:394 elf32-ip2k.c:1241 elf32-iq2000.c:442 elf32-lm32.c:496
+#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209
+#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354
+#: elf32-mcore.c:440 elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:690
+#: elf32-microblaze.c:1002 elf32-mips.c:2242 elf32-moxie.c:137
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3288
+#: elf32-nds32.c:3309 elf32-nds32.c:5078 elf32-nios2.c:3019 elf32-or1k.c:1087
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
+#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
+#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
+#: elf32-v850.c:1924 elf32-v850.c:4250 elf32-vax.c:289 elf32-visium.c:481
+#: elf32-wasm32.c:105 elf32-xgate.c:418 elf32-xstormy16.c:395
+#: elf32-xtensa.c:510 elf32-xtensa.c:544 elf32-z80.c:331 elf64-alpha.c:1114
+#: elf64-alpha.c:4056 elf64-alpha.c:4204 elf64-bpf.c:129 elf64-ia64-vms.c:255
+#: elf64-ia64-vms.c:3426 elf64-mips.c:3965 elf64-mips.c:3981 elf64-mmix.c:1264
+#: elf64-nfp.c:151 elf64-ppc.c:1031 elf64-ppc.c:1385 elf64-ppc.c:1394
+#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:269 elfn32-mips.c:3799
+#: elfxx-ia64.c:324 elfxx-loongarch.c:1574 elfxx-riscv.c:980 elfxx-sparc.c:589
+#: elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947
+#: elfnn-aarch64.c:2215 elfnn-aarch64.c:2313 elfnn-ia64.c:214
+#: elfnn-ia64.c:3821
 #, c-format
 msgid "%pB: unsupported relocation type %#x"
 msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#x"
 
-#: aoutx.h:5434 pdp11.c:3694
+#: aoutx.h:5427 pdp11.c:3869
 #, c-format
 msgid "%pB: relocatable link from %s to %s not supported"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð¸Ð· %s Ð² %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: archive.c:2214
+#: arc-got.h:69
+#, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² GOT"
+
+#: archive.c:753
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr "%F%P: %pB(%s): Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ð¸ Ñ‡Ð»ÐµÐ½Ð° Ñ‚Ð¾Ð½ÐºÐ¾Ð³Ð¾ Ð°Ñ€Ñ…Ð¸Ð²Ð°: %E\n"
+
+#: archive.c:2285
 msgid "warning: writing archive was slow: rewriting timestamp"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð² Ð°Ñ€Ñ…Ð¸Ð²: Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð¼ÐµÑ‚ÐºÐ° Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸"
 
-#: archive.c:2330 linker.c:1429
+#: archive.c:2353 archive.c:2414 elflink.c:4772 linker.c:1431
 #, c-format
 msgid "%pB: plugin needed to handle lto object"
 msgstr "%pB: Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° lto Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¼Ð¾Ð´ÑƒÐ»ÑŒ"
 
-#: archive.c:2559
+#: archive.c:2640
 msgid "Reading archive file mod timestamp"
 msgstr "Ð§Ñ‚ÐµÐ½Ð¸Ðµ Ð¼ÐµÑ‚ÐºÐ¸ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ� Ð°Ñ€Ñ…Ð¸Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°"
 
-#: archive.c:2583
+#: archive.c:2664
 msgid "Writing updated armap timestamp"
 msgstr "Ð—Ð°Ð¿Ð¸Ñ�ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð»Ñ‘Ð½Ð½Ð¾Ð¹ Ð¼ÐµÑ‚ÐºÐ¸ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ armap"
 
-#: bfd.c:449
+#: bfd.c:720
 msgid "no error"
 msgstr "Ð½ÐµÑ‚ Ð¾ÑˆÐ¸Ð±ÐºÐ¸"
 
-#: bfd.c:450
+#: bfd.c:721
 msgid "system call error"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð°"
 
-#: bfd.c:451
+#: bfd.c:722
 msgid "invalid bfd target"
 msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� Ñ†ÐµÐ»ÑŒ bfd"
 
-#: bfd.c:452
+#: bfd.c:723
 msgid "file in wrong format"
 msgstr "Ñ„Ð°Ð¹Ð» Ð² Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ"
 
-#: bfd.c:453
+#: bfd.c:724
 msgid "archive object file in wrong format"
 msgstr "Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð» Ð² Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ"
 
-#: bfd.c:454
+#: bfd.c:725
 msgid "invalid operation"
 msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ�"
 
-#: bfd.c:455
+#: bfd.c:726
 msgid "memory exhausted"
 msgstr "Ð·Ð°ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð°Ñ�ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ"
 
-#: bfd.c:456
+#: bfd.c:727
 msgid "no symbols"
 msgstr "Ð½ÐµÑ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²"
 
-#: bfd.c:457
+#: bfd.c:728
 msgid "archive has no index; run ranlib to add one"
 msgstr "Ð°Ñ€Ñ…Ð¸Ð² Ð±ÐµÐ· Ð¸Ð½Ð´ÐµÐºÑ�Ð°; Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚Ðµ ranlib Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ�"
 
-#: bfd.c:458
+#: bfd.c:729
 msgid "no more archived files"
 msgstr "Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ðµ Ñ„Ð°Ð¹Ð»Ñ‹ Ð·Ð°ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¸Ñ�ÑŒ"
 
-#: bfd.c:459
+#: bfd.c:730
 msgid "malformed archive"
 msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ñ‹Ð¹ Ð°Ñ€Ñ…Ð¸Ð²"
 
-#: bfd.c:460
+#: bfd.c:731
 msgid "DSO missing from command line"
 msgstr "Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñ�Ñ‚Ñ€Ð¾ÐºÐµ Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ DSO"
 
-#: bfd.c:461
+#: bfd.c:732
 msgid "file format not recognized"
 msgstr "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ Ñ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½"
 
-#: bfd.c:462
+#: bfd.c:733
 msgid "file format is ambiguous"
 msgstr "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½"
 
-#: bfd.c:463
+#: bfd.c:734
 msgid "section has no contents"
 msgstr "Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾"
 
-#: bfd.c:464
+#: bfd.c:735
 msgid "nonrepresentable section on output"
 msgstr "Ñ€Ð°Ð·Ð´ÐµÐ», Ð½ÐµÐ¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ñ‹Ð¹ Ð´Ð»Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð°"
 
-#: bfd.c:465
+#: bfd.c:736
 msgid "symbol needs debug section which does not exist"
 msgstr "Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ», Ð½Ð¾ ÐµÐ³Ð¾ Ð½Ðµ Ñ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚"
 
-#: bfd.c:466
+#: bfd.c:737
 msgid "bad value"
 msgstr "Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ"
 
-#: bfd.c:467
+#: bfd.c:738
 msgid "file truncated"
 msgstr "Ñ„Ð°Ð¹Ð» ÑƒÑ�ÐµÑ‡Ñ‘Ð½"
 
-#: bfd.c:468
+#: bfd.c:739
 msgid "file too big"
 msgstr "Ñ„Ð°Ð¹Ð» Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹"
 
-#: bfd.c:469
+#: bfd.c:740
+msgid "sorry, cannot handle this file"
+msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ�Ñ‚Ð¾Ñ‚ Ñ„Ð°Ð¹Ð»"
+
+#: bfd.c:741
 #, c-format
 msgid "error reading %s: %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� %s: %s"
 
-#: bfd.c:470
+#: bfd.c:742
 msgid "#<invalid error code>"
 msgstr "#<Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸>"
 
-#: bfd.c:1429
+#: bfd.c:1856
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ� BFD %s Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶Ð¸Ð» Ð¾ÑˆÐ¸Ð±ÐºÑƒ %s:%d"
 
-#: bfd.c:1442
+#: bfd.c:1869
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d in %s\n"
 msgstr "Ð’Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° BFD %s, Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð² Ð½Ð° %s:%d Ð² %s\n"
 
-#: bfd.c:1447
+#: bfd.c:1874
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d\n"
 msgstr "Ð’Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° BFD %s, Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð² Ð½Ð° %s:%d\n"
 
-#: bfd.c:1449
+#: bfd.c:1876
 msgid "Please report this bug.\n"
 msgstr "ÐŸÐ¾Ð¶Ð°Ð»ÑƒÐ¹Ñ�Ñ‚Ð°, Ñ�Ð¾Ð¾Ð±Ñ‰Ð¸Ñ‚Ðµ Ð¾Ð± Ñ�Ñ‚Ð¾Ð¹ Ð¾ÑˆÐ¸Ð±ÐºÐµ.\n"
 
-#: bfdwin.c:206
+#: bfdwin.c:261
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
 msgstr "Ð½Ðµ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð´Ð°Ð½Ð½Ñ‹Ðµ=%lx Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾=%d\n"
 
-#: bfdwin.c:209
+#: bfdwin.c:264
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr "Ð½Ðµ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� env Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð°\n"
 
-#: binary.c:276
+#: binary.c:277
 #, c-format
 msgid "warning: writing section `%pA' at huge (ie negative) file offset"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÑ‚Ñ�Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð¿Ð¾ Ð¾Ð³Ñ€Ð¾Ð¼Ð½Ð¾Ð¼Ñƒ (Ñ‚. Ðµ., Ð¾Ñ‚Ñ€Ð¸Ñ†Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¼Ñƒ) Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¼Ñƒ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ"
 
-#: cache.c:271
+#: cache.c:272
 #, c-format
-msgid "reopening %pB: %s\n"
-msgstr "Ð¿ÐµÑ€ÐµÐ¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� %pB: %s\n"
+msgid "reopening %pB: %s"
+msgstr "Ð¿ÐµÑ€ÐµÐ¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� %pB: %s"
 
 #: coff-alpha.c:450
 #, c-format
 msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¶Ð°Ñ‚Ñ‹Ðµ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ„Ð°Ð¹Ð»Ñ‹ Alpha; Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ� Ð½ÐµÑ�Ð¶Ð°Ñ‚Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ‚Ð¾Ñ€Ð° Ð¸Ð»Ð¸ objZ."
 
-#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950
+#: coff-alpha.c:857 coff-alpha.c:894 coff-alpha.c:1963 coff-mips.c:948
 msgid "GP relative relocation used when GP not defined"
 msgstr "Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¾ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ GP Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
 
-#: coff-alpha.c:1443
+#: coff-alpha.c:1450
 msgid "using multiple gp values"
 msgstr "Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ gp"
 
-#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411
+#: coff-alpha.c:1508 coff-alpha.c:1514 elf.c:10207 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7655 elf32-ppc.c:8850 elf64-ppc.c:16826
 #, c-format
 msgid "%pB: %s unsupported"
 msgstr "%pB: %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330
-#: elf64-mips.c:3451 elfn32-mips.c:3276
+#: coff-go32.c:167 coffswap.h:819
+#, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: 0x%lx > 0xffff"
+
+#: coff-mips.c:638 elf32-mips.c:1743 elf32-score.c:433 elf32-score7.c:333
+#: elf64-mips.c:3450 elfn32-mips.c:3277
 msgid "GP relative relocation when _gp not defined"
 msgstr "ÐžÑ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
 
-#: coff-rs6000.c:2858
+#: coff-rs6000.c:484 coff64-rs6000.c:377
+#, c-format
+msgid "%pB: unsupported swap_aux_in for storage class %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ swap_aux_in Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð° Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %#x"
+
+#: coff-rs6000.c:571 coff64-rs6000.c:497
+#, c-format
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ swap_aux_out Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð° Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %#x"
+
+#: coff-rs6000.c:3119
 #, c-format
 msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TOC Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð±ÐµÐ· Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° TOC"
 
-#: coff-rs6000.c:3620 coff64-rs6000.c:2145
+#: coff-rs6000.c:3243 coff64-rs6000.c:848
+#, c-format
+msgid "Unable to find the stub entry targeting %s"
+msgstr "Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚-Ð·Ð°Ð³Ð»ÑƒÑˆÐºÑƒ %s"
+
+#: coff-rs6000.c:3358
+#, c-format
+msgid "%pB: TLS relocation at 0x%<PRIx64> over non-TLS symbol %s (0x%x)\n"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%<PRIx64> Ð½Ð°Ð´ Ð½Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ TLS %s (0x%x)\n"
+
+#: coff-rs6000.c:3371
+#, c-format
+msgid "%pB: TLS local relocation at 0x%<PRIx64> over imported symbol %s\n"
+msgstr "%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%<PRIx64> Ð½Ð°Ð´ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ %s\n"
+
+#: coff-rs6000.c:3777
+#, c-format
+msgid "%pB: relocation (%d) at 0x%<PRIx64> has wrong r_rsize (0x%x)\n"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%<PRIx64> Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ñ‹Ð¹ r_rsize (0x%x)\n"
+
+#: coff-rs6000.c:4039 coff64-rs6000.c:2031
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized smclas %d"
 msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ smclas %d"
@@ -308,64 +361,85 @@ msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€Ð
 msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ"
 
-#: coff-sh.c:977 elf32-sh.c:727
+#: coff-sh.c:972 elf32-sh.c:727
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ COUNT"
 
-#: coff-sh.c:987 elf32-sh.c:738
+#: coff-sh.c:982 elf32-sh.c:738
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad count"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº"
 
-#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512
+#: coff-sh.c:1348 coff-sh.c:2635 elf32-sh.c:1138 elf32-sh.c:1506
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
 msgstr "%pB: %#<PRIx64>: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¿Ñ€Ð¸ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ð¸"
 
-#: coff-sh.c:1454
+#: coff-sh.c:1442
 #, c-format
 msgid "%pB: fatal: generic symbols retrieved before relaxing"
 msgstr "%pB: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ´ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸ÐµÐ¼ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ñ‹ Ð¾Ð±Ñ‰Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹"
 
-#: coff-sh.c:2785 cofflink.c:2965
+#: coff-sh.c:2772 cofflink.c:2947
 #, c-format
 msgid "%pB: illegal symbol index %ld in relocs"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %ld Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ñ…"
 
-#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:338 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5224
 #, c-format
 msgid "%pB: warning: illegal symbol index %ld in relocs"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %ld Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ñ…"
 
-#: coff-tic80.c:441
+#: coff-x86_64.c:152
+msgid "R_AMD64_IMAGEBASE with __ImageBase undefined"
+msgstr "R_AMD64_IMAGEBASE Ñ� __ImageBase Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
+
+#: coff-z80.c:351 coff-z8k.c:214 elf32-nds32.c:13189 elfxx-mips.c:13513
+#: reloc.c:8495 reloc16.c:314
 #, c-format
-msgid "unsupported relocation type %#x"
-msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#x"
+msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%RÂ» Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½\n"
 
-#: coff-tic80.c:672 cofflink.c:3127
+#: coff-z80.c:477 coff-z8k.c:378 elfxx-mips.c:13523 reloc.c:8505
 #, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
-msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»"
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pRÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
+
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
+#, c-format
+msgid "%pB: C_STAT isn't supported by XCOFF64"
+msgstr "%pB: C_STAT Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² XCOFF64"
 
-#: coffcode.h:954
+#: coff64-rs6000.c:477
+#, c-format
+msgid "%pB: wrong auxtype %#x for storage class %#x"
+msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ auxtype %#x Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð° Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %#x"
+
+#: coff64-rs6000.c:1598
+#, c-format
+msgid "%pB: relocation (%d) at (0x%<PRIx64>) has wrong r_rsize (0x%x)\n"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ (0x%<PRIx64>) Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ñ‹Ð¹ r_rsize (0x%x)\n"
+
+#: coffcode.h:935
 #, c-format
 msgid "%pB: unable to load COMDAT section name"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ð¸Ð¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° COMDAT"
 
 #. Malformed input files can trigger this test.
 #. cf PR 21781.
-#: coffcode.h:989
+#: coffcode.h:970
 #, c-format
 msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ COMDAT"
 
-#: coffcode.h:1001
+#: coffcode.h:982
 #, c-format
 msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² COMDAT Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
 
-#: coffcode.h:1011
+#: coffcode.h:1005
 #, c-format
 msgid "%pB: warning: no symbol for section '%s' found"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
@@ -373,311 +447,321 @@ msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ð
 #. Generate a warning message rather using the 'unhandled'
 #. variable as this will allow some .sys files generate by
 #. other toolchains to be processed.  See bugzilla issue 196.
-#: coffcode.h:1237
+#: coffcode.h:1214
 #, c-format
 msgid "%pB: warning: ignoring section flag %s in section %s"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %s"
 
-#: coffcode.h:1306
+#: coffcode.h:1284
 #, c-format
 msgid "%pB (%s): section flag %s (%#lx) ignored"
 msgstr "%pB (%s): Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%#lx)"
 
-#: coffcode.h:1917
+#: coffcode.h:1901
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸ÐºÐ° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾"
+
+#: coffcode.h:1910 coffcode.h:1975
 #, c-format
 msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´Ð°ÐµÑ‚Ñ�Ñ�, Ñ‡Ñ‚Ð¾ ÐµÑ�Ñ‚ÑŒ 0xffff Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹, Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�"
 
-#: coffcode.h:2315
+#: coffcode.h:2352
 #, c-format
 msgid "unrecognized TI COFF target id '0x%x'"
 msgstr "Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ Ñ†ÐµÐ»Ð¸ TI COFF Â«0x%xÂ»"
 
-#: coffcode.h:2599
+#: coffcode.h:2631
 #, c-format
 msgid "%pB: reloc against a non-existent symbol index: %ld"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰ÐµÐ¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¸Ð½Ð´ÐµÐºÑ�Ñƒ: %ld"
 
-#: coffcode.h:2910
-#, c-format
-msgid "%pB: page size is too large (0x%x)"
-msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ (0x%x)"
-
-#: coffcode.h:3070
+#: coffcode.h:3097
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² (%d)"
 
-#: coffcode.h:3489
+#: coffcode.h:3624
 #, c-format
 msgid "%pB: section %pA: string table overflow at offset %ld"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ñ‚Ñ€Ð¾Ðº Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %ld"
 
-#: coffcode.h:3589
+#: coffcode.h:3725
 #, c-format
 msgid "%pB:%s section %s: alignment 2**%u not representable"
 msgstr "%pB:%s Ñ€Ð°Ð·Ð´ÐµÐ» %s: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ 2**%u Ð½Ðµ Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ð¾"
 
-#: coffcode.h:4276
-#, c-format
-msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
-msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð° Ñ�Ñ‚Ñ€Ð¾Ðº (%#lx) Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#lx)"
-
-#: coffcode.h:4291
+#: coffcode.h:4449
 #, c-format
 msgid "%pB: warning: line number table read failed"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñƒ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº"
 
-#: coffcode.h:4325 coffcode.h:4339
+#: coffcode.h:4495 coffcode.h:4509
 #, c-format
 msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� 0x%lx Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ %d"
 
-#: coffcode.h:4353
+#: coffcode.h:4523
 #, c-format
 msgid "%pB: warning: illegal symbol in line number entry %d"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %d Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸"
 
-#: coffcode.h:4366
+#: coffcode.h:4536
 #, c-format
 msgid "%pB: warning: duplicate line number information for `%s'"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ� Ð¾ Ð½Ð¾Ð¼ÐµÑ€Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ Ð´Ð»Ñ� Â«%sÂ»"
 
-#: coffcode.h:4774
+#: coffcode.h:4960
 #, c-format
 msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
 msgstr "%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ ÐºÐ»Ð°Ñ�Ñ� Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %d Ð´Ð»Ñ� %s, Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: coffcode.h:4904
+#: coffcode.h:5100
 #, c-format
 msgid "warning: %pB: local symbol `%s' has no section"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°"
 
-#: coffcode.h:5050
+#: coffcode.h:5264
 #, c-format
 msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>"
 
-#: coffgen.c:178 elf.c:1216
-#, c-format
-msgid "%pB: unable to initialize compress status for section %s"
-msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð¸Ðµ Ñ�Ð¶Ð°Ñ‚Ð¸Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s"
-
-#: coffgen.c:202 elf.c:1227
+#: coffgen.c:255 elf.c:1226
 #, c-format
-msgid "%pB: unable to initialize decompress status for section %s"
-msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð¸Ðµ Ñ€Ð°Ð·Ð¶Ð°Ñ‚Ð¸Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s"
+msgid "%pB: unable to compress section %s"
+msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¶Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» %s"
 
-#: coffgen.c:1657
+#: coffgen.c:265 elf.c:1236
 #, c-format
-msgid "%pB: corrupt symbol count: %#<PRIx64>"
-msgstr "%pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: %#<PRIx64>"
+msgid "%pB: unable to decompress section %s"
+msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ€Ð°Ñ�Ð¶Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» %s"
 
-#. PR 21013: Provide an error message when the alloc fails.
-#: coffgen.c:1666
-#, c-format
-msgid "%pB: not enough memory to allocate space for %#<PRIx64> symbols of size %#<PRIx64>"
-msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð¼ÐµÑ�Ñ‚Ð° Ð´Ð»Ñ� %#<PRIx64> Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %#<PRIx64>"
-
-#: coffgen.c:1735
+#: coffgen.c:1786
 #, c-format
 msgid "%pB: bad string table size %<PRIu64>"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ñ‚Ñ€Ð¾Ðº %#<PRIu64>"
 
-#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882
-#: xcofflink.c:4505
+#: coffgen.c:1955 coffgen.c:2000 coffgen.c:2051 coffgen.c:2069 cofflink.c:2012
+#: elf.c:2476 xcofflink.c:5532
 msgid "<corrupt>"
 msgstr "<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾>"
 
-#: coffgen.c:2114
+#: coffgen.c:2207
 #, c-format
 msgid "<corrupt info> %s"
 msgstr "<Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ� Ð¾ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ð¸> %s"
 
-#: coffgen.c:2693 elflink.c:14322 linker.c:2959
+#: coffgen.c:2811 elflink.c:15165 linker.c:2974
 msgid "%F%P: already_linked_table: %E\n"
 msgstr "%F%P: already_linked_table: %E\n"
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3153 elflink.c:14105
 #, c-format
 msgid "removing unused section '%pA' in file '%pB'"
 msgstr "ÑƒÐ´Ð°Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð² Ñ„Ð°Ð¹Ð»Ðµ Â«%pBÂ»"
 
-#: coffgen.c:3111 elflink.c:13542
+#: coffgen.c:3230 elflink.c:14335
 msgid "warning: gc-sections option ignored"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gc-sections Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�"
 
-#: cofflink.c:352
+#: cofflink.c:398
 #, c-format
 msgid "warning: symbol `%s' is both section and non-section"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¸ Ð½Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾"
 
-#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953
+#: cofflink.c:503 elf64-ia64-vms.c:5197 elflink.c:5379
 #, c-format
 msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½ Ñ� %d Ð½Ð° %d Ð² %pB"
 
-#: cofflink.c:2373
+#: cofflink.c:2340
 #, c-format
 msgid "%pB: relocs in section `%pA', but it has no contents"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ», Ð½Ð¾ Ð¾Ð½ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾"
 
-#: cofflink.c:2436 elflink.c:10810
+#: cofflink.c:2403 elflink.c:11546
 #, c-format
 msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
 msgstr "%XÂ«%sÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð² Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð· %pB: Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½ Ð² Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ð¸Ð· %pB\n"
 
-#: cofflink.c:2734
+#: cofflink.c:2598
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%<PRIx64>)"
+msgstr "%pB: ÑƒÐ´Ð°Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ 0x%<PRIx64>)"
+
+#: cofflink.c:2716
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr "%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x > 0xffff"
 
-#: cofflink.c:2742
+#: cofflink.c:2724
 #, c-format
 msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#x > 0xffff"
 
-#: coffswap.h:789
+#: cofflink.c:3118
 #, c-format
-msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
-msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: 0x%lx > 0xffff"
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»"
 
-#: coffswap.h:803
+#: coffswap.h:833
 #, c-format
 msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
 msgstr "%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: 0x%lx > 0xffff"
 
-#: compress.c:260
+#: compress.c:744 compress.c:761
 #, c-format
 msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB(%pA) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾ (%#<PRIx64> Ð±Ð°Ð¹Ñ‚)"
 
-#: cpu-arm.c:298 cpu-arm.c:310
+#: cpu-arm.c:320 cpu-arm.c:332
 #, c-format
 msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� EP9312, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� XScale"
 
-#: cpu-arm.c:446
+#: cpu-arm.c:469
 #, c-format
 msgid "warning: unable to update contents of %s section in %pB"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² %pB"
 
-#: dwarf2.c:544
+#: dwarf2.c:705
 #, c-format
 msgid "DWARF error: can't find %s section."
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
 
-#: dwarf2.c:579
+#: dwarf2.c:713
+#, c-format
+msgid "DWARF error: section %s has no contents"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾"
+
+#. PR 26946
+#: dwarf2.c:722
+#, c-format
+msgid "DWARF error: section %s is too big"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹"
+
+#: dwarf2.c:757
 #, c-format
 msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%#<PRIu64>) Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¸Ð»Ð¸ Ñ€Ð°Ð²Ð½Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ %s (%#<PRIu64>)"
 
-#: dwarf2.c:1107
+#: dwarf2.c:1504
 msgid "DWARF error: info pointer extends beyond end of attributes"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð²"
 
-#: dwarf2.c:1275
+#: dwarf2.c:1696
 #, c-format
 msgid "DWARF error: invalid or unhandled FORM value: %#x"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ FORM: %#x"
 
-#: dwarf2.c:1581
+#: dwarf2.c:2043
 msgid "DWARF error: mangled line number section (bad file number)"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº (Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð°)"
 
-#: dwarf2.c:1926
+#: dwarf2.c:2585
 msgid "DWARF error: zero format count"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ"
 
-#: dwarf2.c:1936
+#: dwarf2.c:2595
 #, c-format
 msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð´Ð°Ð½Ð½Ñ‹Ñ… (%#<PRIx64>) Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð±ÑƒÑ„ÐµÑ€Ð°"
 
-#: dwarf2.c:1977
+#: dwarf2.c:2634
 #, c-format
 msgid "DWARF error: unknown format content type %<PRIu64>"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ‚Ð¸Ð¿Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾ %#<PRIu64>"
 
-#: dwarf2.c:2057
+#: dwarf2.c:2707
 #, c-format
 msgid "DWARF error: line info section is too small (%<PRId64>)"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ… Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð» (%<PRId64>)"
 
-#: dwarf2.c:2087
+#: dwarf2.c:2734
 #, c-format
 msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ… Ð±Ð¾Ð»ÑŒÑˆÐµ (%<PRIx64>) Ñ‡ÐµÐ¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð¾, Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐµÑ�Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%#lx)"
 
-#: dwarf2.c:2100
+#: dwarf2.c:2747
 #, c-format
 msgid "DWARF error: unhandled .debug_line version %d"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d Ð² .debug_line"
 
-#: dwarf2.c:2110
+#: dwarf2.c:2756
 msgid "DWARF error: ran out of room reading prologue"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð¿Ñ€Ð¸ Ñ‡Ñ‚ÐµÐ½Ð¸Ð¸ Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ð°"
 
-#: dwarf2.c:2128
+#: dwarf2.c:2772
 #, c-format
 msgid "DWARF error: line info unsupported segment selector size %u"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ %u Ñ�ÐµÐ»ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð² Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ…"
 
-#: dwarf2.c:2155
+#: dwarf2.c:2794
 msgid "DWARF error: invalid maximum operations per instruction"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ðµ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ"
 
-#: dwarf2.c:2174
+#: dwarf2.c:2806
 msgid "DWARF error: ran out of room reading opcodes"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð¿Ñ€Ð¸ Ñ‡Ñ‚ÐµÐ½Ð¸Ð¸ ÐºÐ¾Ð´Ð¾Ð² Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹"
 
-#: dwarf2.c:2347
+#: dwarf2.c:2984
 msgid "DWARF error: mangled line number section"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½"
 
-#: dwarf2.c:2852 dwarf2.c:2913
+#: dwarf2.c:3455
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ñ€ÐµÐºÑƒÑ€Ñ�Ð¸Ñ� Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð°"
+
+#: dwarf2.c:3489 dwarf2.c:3579
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ñ‹Ð¹ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ DIE"
 
-#: dwarf2.c:2889
+#: dwarf2.c:3505
 #, c-format
 msgid "DWARF error: unable to read alt ref %<PRIu64>"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ %<PRIu64>"
 
-#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457
+#: dwarf2.c:3557
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ñ‹Ð¹ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ DIE %<PRIu64>"
+
+#: dwarf2.c:3594 dwarf2.c:3910 dwarf2.c:4483
 #, c-format
 msgid "DWARF error: could not find abbrev number %u"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ ÑƒÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %u"
 
-#: dwarf2.c:2947
-msgid "DWARF error: abstract instance recursion detected"
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ñ€ÐµÐºÑƒÑ€Ñ�Ð¸Ñ� Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð°"
+#: dwarf2.c:4183
+#, c-format
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ 0x%lx"
+
+#: dwarf2.c:4329 dwarf2.c:4583
+msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð²Ñ�Ñ‚Ñ€ÐµÑ‡ÐµÐ½ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ DW_AT_comp_dir Ð² Ð½Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¾Ð²Ð¾Ð¼ Ð²Ð¸Ð´Ðµ"
 
-#: dwarf2.c:3376
+#: dwarf2.c:4400
 #, c-format
 msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð²ÐµÑ€Ñ�Ð¸Ñ� dwarf Â«%uÂ», Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð²ÐµÑ€Ñ�Ð¸Ð¸ 2, 3, 4 Ð¸ 5"
 
-#: dwarf2.c:3420
+#: dwarf2.c:4447
 #, c-format
 msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð°Ð´Ñ€ÐµÑ�Ð° Â«%uÂ», Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Ð½Ðµ ÑƒÐ¼ÐµÐµÑ‚ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°Ð¼Ð¸ Ð±Ð¾Ð»ÐµÐµ Ñ‡ÐµÐ¼ Â«%uÂ»"
 
-#: dwarf2.c:3523
-msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð²Ñ�Ñ‚Ñ€ÐµÑ‡ÐµÐ½ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ DW_AT_comp_dir Ð² Ð½Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¾Ð²Ð¾Ð¼ Ð²Ð¸Ð´Ðµ"
-
-#: ecoff.c:971
+#: ecoff.c:1016
 #, c-format
 msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: isymMax (%ld) Ð±Ð¾Ð»ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ ifdMax (%ld)"
 
-#: ecoff.c:1268
+#: ecoff.c:1312
 #, c-format
 msgid "unknown basic type %d"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ %d"
 
-#: ecoff.c:1525
+#: ecoff.c:1568
 #, c-format
 msgid ""
 "\n"
@@ -686,7 +770,7 @@ msgstr ""
 "\n"
 "      Ð¡Ð¸Ð¼Ð²Ð¾Ð» End+1: %ld"
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1575 ecoff.c:1578
 #, c-format
 msgid ""
 "\n"
@@ -695,7 +779,7 @@ msgstr ""
 "\n"
 "      ÐŸÐµÑ€Ð²Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %ld"
 
-#: ecoff.c:1548
+#: ecoff.c:1593
 #, c-format
 msgid ""
 "\n"
@@ -704,7 +788,7 @@ msgstr ""
 "\n"
 "      Ð¡Ð¸Ð¼Ð²Ð¾Ð» End+1: %-7ld   Ð¢Ð¸Ð¿:  %s"
 
-#: ecoff.c:1555
+#: ecoff.c:1601
 #, c-format
 msgid ""
 "\n"
@@ -713,7 +797,7 @@ msgstr ""
 "\n"
 "      Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %ld"
 
-#: ecoff.c:1563
+#: ecoff.c:1609
 #, c-format
 msgid ""
 "\n"
@@ -722,7 +806,7 @@ msgstr ""
 "\n"
 "      struct; Ñ�Ð¸Ð¼Ð²Ð¾Ð» End+1: %ld"
 
-#: ecoff.c:1568
+#: ecoff.c:1614
 #, c-format
 msgid ""
 "\n"
@@ -731,7 +815,7 @@ msgstr ""
 "\n"
 "      union; Ñ�Ð¸Ð¼Ð²Ð¾Ð» End+1: %ld"
 
-#: ecoff.c:1573
+#: ecoff.c:1619
 #, c-format
 msgid ""
 "\n"
@@ -740,7 +824,7 @@ msgstr ""
 "\n"
 "      enum; Ñ�Ð¸Ð¼Ð²Ð¾Ð» End+1: %ld"
 
-#: ecoff.c:1579
+#: ecoff.c:1627
 #, c-format
 msgid ""
 "\n"
@@ -749,42 +833,42 @@ msgstr ""
 "\n"
 "      Ð¢Ð¸Ð¿: %s"
 
-#: elf-attrs.c:446
+#: elf-attrs.c:477
 #, c-format
 msgid "%pB: error: attribute section '%pA' too big: %#llx"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Â«%pAÂ»: %#llx"
 
-#: elf-attrs.c:487
+#: elf-attrs.c:514
 #, c-format
-msgid "%pB: error: attribute section length too small: %<PRId64>"
-msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð°: %<PRId64>"
+msgid "%pB: error: attribute section length too small: %ld"
+msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð°: %ld"
 
-#: elf-attrs.c:615
+#: elf-attrs.c:644
 #, c-format
 msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±ÑŠÐµÐºÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ðµ, Ð·Ð°Ð´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÐµÐ¼, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ñ�Ð±Ð¾Ñ€ÐºÐ¸ Â«%sÂ»"
 
-#: elf-attrs.c:625
+#: elf-attrs.c:654
 #, c-format
 msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ‚ÐµÐ³ Â«%d, %sÂ» Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ñ‚ÐµÐ³Ð¾Ð¼ Â«%d, %sÂ»"
 
-#: elf-eh-frame.c:944
+#: elf-eh-frame.c:945
 #, c-format
 msgid "discarding zero address range FDE in %pB(%pA).\n"
 msgstr "Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°ÐµÐ¼ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² FDE Ð² %pB(%pA).\n"
 
-#: elf-eh-frame.c:1049
+#: elf-eh-frame.c:1050
 #, c-format
 msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² %pB(%pA); Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° .eh_frame_hdr Ñ�Ð¾Ð·Ð´Ð°Ð½Ð° Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚"
 
-#: elf-eh-frame.c:1539
+#: elf-eh-frame.c:1542
 #, c-format
 msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
 msgstr "ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ FDE Ð² %pB(%pA) Ð½Ðµ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñ�ÐµÑ‚ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ .eh_frame_hdr"
 
-#: elf-eh-frame.c:1546
+#: elf-eh-frame.c:1549
 msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
 msgstr "Ð² Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐ¼, Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ� Ð¾ Ð½Ðµ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ .eh_frame_hdr Ð¸Ð·-Ð·Ð° ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� FDE Ð±ÑƒÐ´ÑƒÑ‚ Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ�"
 
@@ -803,116 +887,113 @@ msgstr "%pB: %pA Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€
 msgid "%pB: %pA points past end of text section"
 msgstr "%pB: %pA ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ‚ÐµÐºÑ�Ñ‚Ð°"
 
-#: elf-eh-frame.c:2139
+#: elf-eh-frame.c:2143
 msgid "DW_EH_PE_datarel unspecified for this architecture"
 msgstr "DW_EH_PE_datarel Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° Ð´Ð»Ñ� Ñ�Ñ‚Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹"
 
-#: elf-eh-frame.c:2309
+#: elf-eh-frame.c:2314
 #, c-format
 msgid "invalid output section for .eh_frame_entry: %pA"
 msgstr "Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� .eh_frame_entry: %pA"
 
-#: elf-eh-frame.c:2332
+#: elf-eh-frame.c:2337
 #, c-format
 msgid "invalid contents in %pA section"
 msgstr "Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA"
 
-#: elf-eh-frame.c:2488
+#: elf-eh-frame.c:2493
 msgid ".eh_frame_hdr entry overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° .eh_frame_hdr"
 
-#: elf-eh-frame.c:2490
+#: elf-eh-frame.c:2495
 msgid ".eh_frame_hdr refers to overlapping FDEs"
 msgstr ".eh_frame_hdr Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð¸ÐµÑ�Ñ� FDE"
 
-#: elf-ifunc.c:149
+#. xgettext:c-format.
+#: elf-ifunc.c:144 elfnn-loongarch.c:1285
 #, c-format
 msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
 msgstr "%F%P: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¼ Ð² Â«%pBÂ» Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIE Ð¸ Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -pie\n"
 
-#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127
-#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925
-#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049
-#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693
-#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266
-#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631
-#: elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759
-#: elf32-score.c:2733 elf32-score7.c:2542 elf32-spu.c:5083
-#: elf32-tilepro.c:3506 elf32-v850.c:2291 elf32-visium.c:681
-#: elf32-xstormy16.c:931 elf64-mmix.c:1541 elfxx-tilegx.c:3870
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-bfin.c:3133 elf32-cr16.c:1429
+#: elf32-cris.c:2034 elf32-crx.c:922 elf32-d10v.c:510 elf32-epiphany.c:563
+#: elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:492 elf32-h8300.c:523
+#: elf32-ip2k.c:1478 elf32-iq2000.c:691 elf32-lm32.c:1070 elf32-m32c.c:624
+#: elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522 elf32-metag.c:1984
+#: elf32-microblaze.c:1664 elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6093
+#: elf32-or1k.c:1897 elf32-score.c:2734 elf32-score7.c:2545 elf32-spu.c:5085
+#: elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
+#: elf32-xstormy16.c:930 elf64-bpf.c:335 elf64-mmix.c:1541 elfxx-tilegx.c:3742
 msgid "internal error: out of range error"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
 
-#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131
-#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929
-#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498
-#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628
-#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994
-#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362
-#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546
-#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685
-#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469
-#: elfxx-tilegx.c:3874
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-bfin.c:3137 elf32-cr16.c:1433
+#: elf32-cris.c:2038 elf32-crx.c:926 elf32-d10v.c:514 elf32-fr30.c:598
+#: elf32-frv.c:4053 elf32-ft32.c:496 elf32-h8300.c:527 elf32-iq2000.c:695
+#: elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841 elf32-m68hc1x.c:1275
+#: elf32-mep.c:526 elf32-metag.c:1988 elf32-microblaze.c:1668
+#: elf32-moxie.c:292 elf32-msp430.c:1510 elf32-nds32.c:6097 elf32-or1k.c:1901
+#: elf32-score.c:2738 elf32-score7.c:2549 elf32-spu.c:5089
+#: elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684
+#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10651
+#: elfxx-tilegx.c:3746
 msgid "internal error: unsupported relocation error"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933
-#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053
-#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197
-#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:930 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
+#: elf32-microblaze.c:1672 elf32-nds32.c:6101 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5093
 msgid "internal error: dangerous error"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°"
 
-#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139
-#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937
-#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061
-#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705
-#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278
-#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643
-#: elf32-moxie.c:300 elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201
-#: elf32-or1k.c:1771 elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095
-#: elf32-tilepro.c:3518 elf32-v850.c:2315 elf32-visium.c:693
-#: elf32-xstormy16.c:943 elf64-mmix.c:1553 elfxx-tilegx.c:3882
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-bfin.c:3145 elf32-cr16.c:1441
+#: elf32-cris.c:2046 elf32-crx.c:934 elf32-d10v.c:522 elf32-epiphany.c:578
+#: elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:504 elf32-h8300.c:535
+#: elf32-ip2k.c:1493 elf32-iq2000.c:703 elf32-lm32.c:1082 elf32-m32c.c:636
+#: elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534 elf32-metag.c:1996
+#: elf32-microblaze.c:1676 elf32-moxie.c:300 elf32-msp430.c:1518
+#: elf32-mt.c:410 elf32-nds32.c:6105 elf32-or1k.c:1909 elf32-score.c:2751
+#: elf32-score7.c:2557 elf32-spu.c:5097 elf32-tilepro.c:3384 elf32-v850.c:2318
+#: elf32-visium.c:692 elf32-xstormy16.c:942 elf64-bpf.c:348 elf64-mmix.c:1553
+#: elfxx-tilegx.c:3754
 msgid "internal error: unknown error"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°"
 
-#: elf-m10300.c:1029
+#: elf-m10300.c:1030
 #, c-format
 msgid "%pB: unsupported transition from %s to %s"
 msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ Ð¸Ð· %s Ð² %s"
 
-#: elf-m10300.c:1198
+#: elf-m10300.c:1197
 #, c-format
 msgid "%pB: %s' accessed both as normal and thread local symbol"
 msgstr "%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð¸Ñ‚Ð¸"
 
-#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539
-#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409
-#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846
-#: elfxx-sparc.c:3906 elfxx-tilegx.c:3793
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5261
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6807
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2279
+#: elf-m10300.c:2093 elf32-arm.c:13398 elf32-i386.c:3484 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3023 elf64-s390.c:3042 elf64-x86-64.c:4209
+#: elfxx-sparc.c:2917 elfxx-sparc.c:3814 elfxx-tilegx.c:3665
+#: elfnn-aarch64.c:5682 elfnn-aarch64.c:7291
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf-m10300.c:2156
+#: elf-m10300.c:2155
 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ (Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ -fpic?)"
 
-#: elf-m10300.c:2160
+#: elf-m10300.c:2159
 #, c-format
 msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library"
 msgstr "%pB: Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ðµ Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¾ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸"
 
-#: elf-m10300.c:2163
+#: elf-m10300.c:2162
 msgid "internal error: suspicious relocation type used in shared library"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð´Ð¾Ð·Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ"
 
-#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364
-#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361
-#: elf64-ia64.c:361
+#: elf-m10300.c:2650 elf32-avr.c:2488 elf32-frv.c:5621 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8269 reloc16.c:155 elfnn-ia64.c:365
 msgid "%P%F: --relax and -r may not be used together\n"
 msgstr "%P%F: --relax Ð¸ -r Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²Ð¼ÐµÑ�Ñ‚Ðµ\n"
 
@@ -941,136 +1022,158 @@ msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %p
 msgid "warning: %pB: corrupt no copy on protected size: 0x%x"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñƒ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ� ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹: 0x%x"
 
-#: elf-properties.c:186
+#: elf-properties.c:189
+#, c-format
+msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð° (0x%x): 0x%x>"
+
+#: elf-properties.c:214
 #, c-format
 msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ GNU_PROPERTY_TYPE (%ld): 0x%x"
 
-#: elf-properties.c:301
+#: elf-properties.c:400
 msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (0x%v) Ð¸ %pB (0x%v)\n"
 
-#: elf-properties.c:307
+#: elf-properties.c:406
 msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
 msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (0x%v) Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)\n"
 
-#: elf-properties.c:316 elf-properties.c:396
+#: elf-properties.c:415 elf-properties.c:493
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB Ð¸ %pB\n"
 
-#: elf-properties.c:320
+#: elf-properties.c:419
 msgid "Removed property %W to merge %pB and %pB (not found)\n"
 msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)\n"
 
-#: elf-properties.c:339
+#: elf-properties.c:436
 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W (0x%v) Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (0x%v) Ð¸ %pB (0x%v)\n"
 
-#: elf-properties.c:348
+#: elf-properties.c:445
 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
 msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W (%v) Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (0x%v) Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)\n"
 
-#: elf-properties.c:390
+#: elf-properties.c:487
 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
 msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾) Ð¸ %pB (0x%v)\n"
 
+#: elf-properties.c:668 elfxx-aarch64.c:758 elfxx-x86.c:4103
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð² GNU\n"
+
+#: elf-properties.c:672 elfxx-aarch64.c:762 elfxx-x86.c:4108
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ñ€Ð¾Ð²Ð½Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»\n"
+
 #. Merge .note.gnu.property sections.
-#: elf-properties.c:552 elf-properties.c:554
+#: elf-properties.c:698 elf-properties.c:700
 msgid "\n"
 msgstr "\n"
 
-#: elf-properties.c:553
+#: elf-properties.c:699
 msgid "Merging program properties\n"
 msgstr "ÐžÐ±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ñ‹Ñ… Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²\n"
 
+#: elf-sframe.c:240
+#, c-format
+msgid "error in %pB(%pA); no .sframe will be created"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² %pB(%pA); Ñ€Ð°Ð·Ð´ÐµÐ» .sframe Ñ�Ð¾Ð·Ð´Ð°Ð½ Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚"
+
+#: elf-sframe.c:400
+msgid "input SFrame sections with different abi prevent .sframe generation"
+msgstr "Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ SFrame Ñ� Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸Ð¼Ñ�Ñ� abi Ð½Ðµ Ð´Ð°Ñ‘Ñ‚ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ .sframe"
+
+#: elf-sframe.c:411
+msgid "input SFrame sections with different format versions prevent .sframe generation"
+msgstr "Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ SFrame Ñ� Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸Ð¼Ð¸Ñ�Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ�Ð¼Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° Ð½Ðµ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñ�ÑŽÑ‚ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ .sframe"
+
 #. PR 17512: file: f057ec89.
-#: elf.c:345
+#: elf.c:328
 #, c-format
 msgid "%pB: attempt to load strings from a non-string section (number %d)"
 msgstr "%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ Ð¸Ð· Ð½Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (Ð½Ð¾Ð¼ÐµÑ€ %d)"
 
-#: elf.c:360
+#: elf.c:353
 #, c-format
 msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ %u >= %<PRIu64> Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
 
-#: elf.c:499 /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7891
+#: elf.c:517 elf32-arm.c:17730 elfnn-aarch64.c:8291 elfnn-loongarch.c:4391
 #, c-format
 msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
 msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %lu Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» SHT_SYMTAB_SHNDX"
 
-#: elf.c:664
-#, c-format
-msgid "%pB: corrupt size field in group section header: %#<PRIx64>"
-msgstr "%pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð³Ñ€ÑƒÐ¿Ð¿: %#<PRIx64>"
-
-#: elf.c:680
+#: elf.c:679
 #, c-format
 msgid "%pB: invalid size field in group section header: %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð³Ñ€ÑƒÐ¿Ð¿: %#<PRIx64>"
 
-#: elf.c:728
+#: elf.c:724
 #, c-format
 msgid "%pB: invalid entry in SHT_GROUP section [%u]"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ SHT_GROUP [%u]"
 
-#: elf.c:747
+#: elf.c:743
 #, c-format
 msgid "%pB: no valid group sections found"
 msgstr "%pB: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² Ð³Ñ€ÑƒÐ¿Ð¿"
 
 #. See PR 21957 for a reproducer.
-#: elf.c:776
+#: elf.c:772
 #, c-format
 msgid "%pB: group section '%pA' has no contents"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Ð³Ñ€ÑƒÐ¿Ð¿ Â«%pAÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾"
 
-#: elf.c:837
+#: elf.c:833
 #, c-format
 msgid "%pB: no group info for section '%pA'"
 msgstr "%pB: Ð½ÐµÑ‚ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð³Ñ€ÑƒÐ¿Ð¿Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»"
 
-#: elf.c:868 elf.c:3886 elflink.c:11403
-#, c-format
-msgid "%pB: warning: sh_link not set for section `%pA'"
-msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð·Ð°Ð´Ð°Ð½ sh_link Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»"
-
-#: elf.c:888
+#: elf.c:885
 #, c-format
 msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ sh_link [%d] Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»"
 
-#: elf.c:901
+#: elf.c:898
 #, c-format
 msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» SHT_GROUP [Ð¸Ð½Ð´ÐµÐºÑ� %d] Ð½Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² SHF_GROUP"
 
-#: elf.c:922
+#: elf.c:920
 #, c-format
 msgid "%pB: section group entry number %u is corrupt"
 msgstr "%pB: Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² %u Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½"
 
-#: elf.c:945
+#: elf.c:943
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ [%#x] Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ» Ð² Ð³Ñ€ÑƒÐ¿Ð¿Ðµ [%pA]"
 
-#: elf.c:1408
+#: elf.c:1244
+#, c-format
+msgid "%pB: section %s is compressed with zstd, but BFD is not built with zstd support"
+msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ñ�Ð¶Ð°Ñ‚ Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ zstd, Ð½Ð¾ BFD Ñ�Ð¾Ð±Ñ€Ð°Ð½Ð° Ð±ÐµÐ· Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ zstd"
+
+#: elf.c:1440
 #, c-format
 msgid "%pB: invalid sh_link field (%d) in section number %d"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ sh_link (%d) Ð² Ð½Ð¾Ð¼ÐµÑ€Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d"
 
-#: elf.c:1424
+#: elf.c:1456
 #, c-format
 msgid "%pB: failed to find link section for section %d"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ñ�Ñ‹Ð»Ð¾Ðº Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d"
 
-#: elf.c:1451
+#: elf.c:1483
 #, c-format
 msgid "%pB: failed to find info section for section %d"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d"
 
-#: elf.c:1623
+#: elf.c:1660
 #, c-format
 msgid ""
 "\n"
@@ -1079,7 +1182,7 @@ msgstr ""
 "\n"
 "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹:\n"
 
-#: elf.c:1665
+#: elf.c:1702
 #, c-format
 msgid ""
 "\n"
@@ -1088,7 +1191,7 @@ msgstr ""
 "\n"
 "Ð”Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»:\n"
 
-#: elf.c:1806
+#: elf.c:1841
 #, c-format
 msgid ""
 "\n"
@@ -1097,7 +1200,7 @@ msgstr ""
 "\n"
 "ÐžÐ±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ñ� Ð²ÐµÑ€Ñ�Ð¸Ð¹:\n"
 
-#: elf.c:1831
+#: elf.c:1866
 #, c-format
 msgid ""
 "\n"
@@ -1106,440 +1209,595 @@ msgstr ""
 "\n"
 "Ð’ÐµÑ€Ñ�Ð¸Ð¸ Ñ�Ñ�Ñ‹Ð»Ð¾Ðº:\n"
 
-#: elf.c:1836
+#: elf.c:1871
 #, c-format
 msgid "  required from %s:\n"
 msgstr "  Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¸Ð· %s:\n"
 
-#: elf.c:2037
+#: elf.c:2612
 #, c-format
 msgid "%pB: warning: loop in section dependencies detected"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð·Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ðµ Ð² Ð·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ð¾Ñ�Ñ‚Ñ�Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²"
 
-#: elf.c:2145
+#: elf.c:2719
 #, c-format
 msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿ÑƒÑ�Ñ‚Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %u"
 
-#: elf.c:2229
+#: elf.c:2804
 #, c-format
 msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿ÑƒÑ�Ñ‚Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %u"
 
-#: elf.c:2342
+#: elf.c:2923
 #, c-format
 msgid "%pB: invalid link %u for reloc section %s (index %u)"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° %u Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %s (Ð¸Ð½Ð´ÐµÐºÑ� %u)"
 
-#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543
+#: elf.c:2980
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�"
+
+#: elf.c:3068 elf.c:3082 elf.c:3093 elf.c:3106
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ [%#x] Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
 
-#: elf.c:3248
+#: elf.c:3766
 #, c-format
 msgid "%pB: error: alignment power %d of section `%pA' is too big"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÑ€Ð°Ñ‚Ð½Ð¾Ñ�Ñ‚ÑŒ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ� %d Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ°"
 
-#: elf.c:3278
+#: elf.c:3801
 #, c-format
 msgid "warning: section `%pA' type changed to PROGBITS"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½ Ð½Ð° PROGBITS"
 
-#: elf.c:3754
+#: elf.c:4307
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²: %u"
 
-#: elf.c:3839
+#: elf.c:4393
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
 msgstr "%pB: sh_link Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð· Â«%pBÂ»"
 
-#: elf.c:3864
+#: elf.c:4411
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
 msgstr "%pB: sh_link Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð· Â«%pBÂ»"
 
-#: elf.c:4430
+#: elf.c:5005
 #, c-format
-msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d"
-msgstr "%pB: GNU_MBIN Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ sh_info: %d"
+msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
+msgstr "%pB: GNU_MBIND Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ sh_info: %d"
 
-#: elf.c:5013
+#: elf.c:5188
+msgid "%F%P: failed to size relative relocations\n"
+msgstr "%F%P: Ñ‡Ñ‚Ð¾-Ñ‚Ð¾ Ð½Ðµ Ñ‚Ð°Ðº Ñ� Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð¼Ð¸\n"
+
+#: elf.c:5613
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ TLS Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ð½Ðµ Ñ€Ñ�Ð´Ð¾Ð¼:"
 
-#: elf.c:5020
+#: elf.c:5620
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr "\t    TLS: %pA"
 
-#: elf.c:5024
+#: elf.c:5624
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr "\t Ð½Ðµ-TLS: %pA"
 
-#: elf.c:5538
+#: elf.c:6252
 #, c-format
 msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
 msgstr "%pB: Ð¿ÐµÑ€Ð²Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ PT_DYNAMIC Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð¼ .dynamic"
 
-#: elf.c:5566
+#: elf.c:6278
 #, c-format
 msgid "%pB: not enough room for program headers, try linking with -N"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð´Ð»Ñ� Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, Ð¿Ð¾Ð¿Ñ‹Ñ‚Ð°Ð¹Ñ‚ÐµÑ�ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -N"
 
-#: elf.c:5654
+#: elf.c:6395
 #, c-format
 msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
 msgstr "%pB: Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA lma %#<PRIx64> Ð¿Ð¾Ð´Ð¾Ð³Ð½Ð°Ð½Ð¾ Ðº %#<PRIx64>"
 
-#: elf.c:5791
+#. The fix for this error is usually to edit the linker script being
+#. used and set up the program headers manually.  Either that or
+#. leave room for the headers at the start of the SECTIONS.
+#: elf.c:6535
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD"
+
+#: elf.c:6575
 #, c-format
 msgid "%pB: section `%pA' can't be allocated in segment %d"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ %d"
 
-#: elf.c:5839
+#: elf.c:6716
 #, c-format
 msgid "%pB: warning: allocated section `%s' not in segment"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½ Ð½Ðµ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ"
 
-#: elf.c:6072
+#: elf.c:6851
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ ÐºÐ°ÐºÐ¸Ðµ-Ð»Ð¸Ð±Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ PT_GNU_RELRO"
+
+#: elf.c:6882
 #, c-format
 msgid "%pB: error: non-load segment %d includes file header and/or program header"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ %d Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¸/Ð¸Ð»Ð¸ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ñ‹Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº"
 
-#. The fix for this error is usually to edit the linker script being
-#. used and set up the program headers manually.  Either that or
-#. leave room for the headers at the start of the SECTIONS.
-#: elf.c:6249
+#: elf.c:7022
 #, c-format
-msgid "%pB: error: PHDR segment not covered by LOAD segment"
-msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD"
+msgid "warning: %pB has a TLS segment with execute permission"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ TLS Ñ� Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð½Ð° Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ"
+
+#: elf.c:7028
+#, c-format
+msgid "warning: %pB has a LOAD segment with RWX permissions"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ LOAD Ñ� Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ RWX"
 
-#: elf.c:6606
+#: elf.c:7416
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr "%pB: Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ð½Ð¾ Ð¾Ð½ Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚"
 
-#: elf.c:6949
+#: elf.c:7794
 #, c-format
 msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð¿Ð¾ vaddr=%#<PRIx64>, Ñ�Ñ‚Ð¾ Ñ‚Ð°Ðº Ð·Ð°Ð´ÑƒÐ¼Ñ‹Ð²Ð°Ð»Ð¾Ñ�ÑŒ?"
 
-#: elf.c:7574
+#: elf.c:8454
 #, c-format
 msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° %#<PRIx64>"
 
-#: elf.c:8073
+#: elf.c:8962
+#, c-format
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %x Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ ELF. Ð’Ð¼ÐµÑ�Ñ‚Ð¾ Ð½ÐµÐ³Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼ ABS."
+
+#: elf.c:8992
 #, c-format
 msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰ÐµÐµ Ð¼ÐµÑ�Ñ‚Ð¾ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
 
-#: elf.c:8421
+#: elf.c:9426
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ .gnu.version_r"
 
-#: elf.c:8548
+#: elf.c:9587
 #, c-format
 msgid "%pB: .gnu.version_d invalid entry"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ .gnu.version_d"
 
-#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914
-#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841
-#: elf64-ppc.c:4950
+#: elf.c:10080
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr "%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ€Ð°Ð·Ð´ÐµÐ»Ð°"
+
+#: elf.c:10092
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr "%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ð±ÑƒÑ„ÐµÑ€"
+
+#: elf.c:10999
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ win32pstatus %s Ð² %lu Ð±Ð°Ð¹Ñ‚ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»"
+
+#: elf.c:11078
+#, c-format
+msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
+msgstr "%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ win32pstatus NOTE_INFO_MODULE Ð² %lu Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð», Ñ‡Ñ‚Ð¾Ð±Ñ‹ Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÑŒ Ð¸Ð¼Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %u"
+
+#: elf.c:13642
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr "Ñ€Ð°Ð·Ð´ÐµÐ» GNU_MBIND Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ†ÐµÐ»Ñ�Ð¼Ð¸ GNU Ð¸ FreeBSD"
+
+#: elf.c:13645
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ STT_GNU_IFUNC Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ†ÐµÐ»Ñ�Ð¼Ð¸ GNU Ð¸ FreeBSD"
+
+#: elf.c:13648
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð°Ñ� Ð¿Ñ€Ð¸Ð²Ñ�Ð·ÐºÐ° STB_GNU_UNIQUE Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ†ÐµÐ»Ñ�Ð¼Ð¸ GNU Ð¸ FreeBSD"
+
+#: elf.c:13651
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr "Ñ€Ð°Ð·Ð´ÐµÐ» GNU_RETAIN Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ†ÐµÐ»Ñ�Ð¼Ð¸ GNU Ð¸ FreeBSD"
+
+#: elf.c:13870
+#, c-format
+msgid "%pB(%pA): relocation %zu has invalid symbol index %lu"
+msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %zu Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %lu"
+
+#: elf.c:13946
+#, c-format
+msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
+msgstr "%pB(%pA): Ð½ÐµÐ»ÑŒÐ·Ñ� Ð·Ð°Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ñ�Ñ‹Ð»Ð¾Ðº, Ñ‚Ð°Ðº ÐºÐ°Ðº Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð» Ð½Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²"
+
+#: elf.c:13960
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸"
+
+#: elf.c:13974
+#, c-format
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr "%pB(%pA): Ð½ÐµÐ»ÑŒÐ·Ñ� Ð·Ð°Ð´Ð°Ñ‚ÑŒ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸, Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð² Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ðµ"
+
+#: elf.c:14050
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ð´Ð²Ð°Ð¶Ð´Ñ‹"
+
+#: elf.c:14062
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ñ‹ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°"
+
+#: elf.c:14074
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ñ‹ Ð½ÐµÑ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°"
+
+#: elf.c:14088
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð¿ÑƒÑ�Ñ‚!"
+
+#: elf.c:14111
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‚ Ð´Ð»Ñ� Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹"
+
+#: elf.c:14131
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %zu is empty"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %zu Ð¿ÑƒÑ�Ñ‚"
+
+#: elf.c:14156
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a missing symbol"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %zu Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
+
+#: elf.c:14174
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a deleted symbol"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %zu Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
+
+#: elf.c:14188
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu is of an unknown type"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %zu Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ð°"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15124 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3218
+#: elf32-visium.c:844 elf64-ppc.c:5513 elfnn-aarch64.c:7521
 #, c-format
 msgid "private flags = 0x%lx:"
 msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = 0x%lx:"
 
-#: elf32-arc.c:627
+#: elf32-arc.c:642
 #, c-format
 msgid "warning: %pB: conflicting platform configuration %s with %s"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ð²Ñ‹Ðµ Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ %s Ñ� %s"
 
-#: elf32-arc.c:646
+#: elf32-arc.c:661
 #, c-format
 msgid "error: %pB: unable to merge CPU base attributes %s with %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ñ‹Ðµ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ Ð¦ÐŸ %s Ñ� %s"
 
-#: elf32-arc.c:683
+#: elf32-arc.c:698
 #, c-format
 msgid "error: %pB: unable to merge ISA extension attributes %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISA"
 
-#: elf32-arc.c:707
+#: elf32-arc.c:722
 #, c-format
 msgid "error: %pB: conflicting ISA extension attributes %s with %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ Ñ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s Ñ� %s Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISA"
 
-#: elf32-arc.c:747
+#: elf32-arc.c:762
 #, c-format
 msgid "error: %pB: cannot mix rf16 with full register set %pB"
 msgstr "error: %pB: Ð½ÐµÐ»ÑŒÐ·Ñ� Ñ�Ð¼ÐµÑˆÐ¸Ð²Ð°Ñ‚ÑŒ rf16 Ñ� Ð¿Ð¾Ð»Ð½Ñ‹Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² %pB"
 
-#: elf32-arc.c:775
+#: elf32-arc.c:790
 #, c-format
 msgid "error: %pB: conflicting attributes %s: %s with %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s: %s Ñ� %s"
 
-#: elf32-arc.c:802
+#: elf32-arc.c:817
 #, c-format
 msgid "error: %pB: conflicting attributes %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s"
 
-#: elf32-arc.c:907
+#: elf32-arc.c:922
 #, c-format
 msgid "error: attempting to link %pB with a binary %pB of different architecture"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ %pB Ñ� Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ %pB Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹"
 
-#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385
-#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354
+#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
+#: elf32-ppc.c:3856 elf64-sparc.c:737 elfxx-mips.c:15685
 #, c-format
 msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‚Ñ�Ñ� Ð¾Ñ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)"
 
-#: elf32-arc.c:1012
+#: elf32-arc.c:1027
 msgid "error: the ARC4 architecture is no longer supported"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° ARC4 Ð±Ð¾Ð»ÑŒÑˆÐµ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: elf32-arc.c:1018
+#: elf32-arc.c:1033
 msgid "warning: unset or old architecture flags; use default machine"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ñ‹ Ð¸Ð»Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ»Ð¸ Ñ„Ð»Ð°Ð³Ð¸ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð¼Ð°ÑˆÐ¸Ð½Ð° Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ"
 
-#: elf32-arc.c:1151
+#: elf32-arc.c:1159
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CMEM Ð² Â«%sÂ», 16 MSB Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð²Ð½Ð¾ %#<PRIx64>)"
 
-#: elf32-arc.c:1162
+#: elf32-arc.c:1170
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s+%#<PRIx64>' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CMEM Ð² Â«%s+%#<PRIx64>Â», 16 MSB Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð²Ð½Ð¾ %#<PRIx64>)"
 
-#: elf32-arc.c:1876
+#: elf32-arc.c:1885
 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� GOT Ð¸ PLT Ð½Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� Ð½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ¾Ð¼"
 
-#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470
+#: elf32-arc.c:1909 elf32-rx.c:1486
 #, c-format
 msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
 msgstr "%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð² Ð¼Ð°Ð»Ð¾Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð´Ð°Ð½Ð½Ñ‹Ñ…"
 
-#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475
+#: elf32-arc.c:1914 elf32-rx.c:1491
 #, c-format
 msgid "%pB(%pA): internal error: out of range error"
 msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
 
-#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480
+#: elf32-arc.c:1919 elf32-rx.c:1496
 #, c-format
 msgid "%pB(%pA): internal error: unsupported relocation error"
 msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485
+#: elf32-arc.c:1924 elf32-rx.c:1501
 #, c-format
 msgid "%pB(%pA): internal error: dangerous relocation"
 msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490
+#: elf32-arc.c:1929 elf32-rx.c:1506
 #, c-format
 msgid "%pB(%pA): internal error: unknown error"
 msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°"
 
-#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7462
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:497
+#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15579 elf32-metag.c:2251
+#: elf32-nds32.c:5543 elfnn-aarch64.c:7928 elfnn-riscv.c:723
 #, c-format
 msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC"
 
-#: elf32-arc.c:2949
+#: elf32-arc.c:2910
 #, c-format
 msgid "%pB: unknown mandatory ARC object attribute %d"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° ARC %d"
 
-#: elf32-arc.c:2957
+#: elf32-arc.c:2918
 #, c-format
 msgid "warning: %pB: unknown ARC object attribute %d"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° ARC %d"
 
-#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409
+#: elf32-arm.c:4346 elf32-arm.c:4380 elf32-arm.c:4399 elf32-arm.c:4451
 #, c-format
 msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction"
 msgstr "%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�ÐºÐ»ÐµÐ¹ÐºÐ¸ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ð²ÐµÑ‚Ð²ÐµÐ¹, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° SHF_ARM_PURECODE, Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ†ÐµÐ»ÐµÐ¹ M-Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ�, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹ movw"
 
-#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183
+#: elf32-arm.c:4411 elf32-arm.c:4465 elf32-arm.c:9163 elf32-arm.c:9253
 #, c-format
 msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
 msgstr "%pB(%s): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ€Ð°Ð±Ð¾Ñ‚Ð° Ð½Ðµ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°; Ð¿ÐµÑ€Ð²Ð¾Ðµ ÑƒÐ¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ðµ: %pB: Ð²Ñ‹Ð·Ð¾Ð² %s Ð² %s"
 
-#: elf32-arm.c:4697
+#: elf32-arm.c:4591
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr "ÐžÐ¨Ð˜Ð‘ÐšÐ�: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° CMSE (Ñ€Ð°Ð·Ð´ÐµÐ» %s) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð°Ð»ÐµÐºÐ¾ (%#<PRIx64>) Ð¾Ñ‚ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� (%#<PRIx64>)"
+
+#: elf32-arm.c:4760
 #, c-format
 msgid "no address assigned to the veneers output section %s"
 msgstr "Ð½Ðµ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½ Ð°Ð´Ñ€ÐµÑ� Ñ�ÐºÐ»ÐµÐ¹ÐºÐ°Ð¼ Ð² Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %s"
 
-#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579
-#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3098
+#: elf32-arm.c:4835 elf32-arm.c:6984 elf32-csky.c:3389 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3907
+#: elf64-ppc.c:14142 elfnn-aarch64.c:3203
 #, c-format
 msgid "%pB: cannot create stub entry %s"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %s"
 
-#: elf32-arm.c:5957
+#: elf32-arm.c:5056 elf32-csky.c:3731 elf32-hppa.c:732 elf32-hppa.c:761
+#: elf32-hppa.c:842 elf32-m68hc11.c:422 elf32-m68hc12.c:542 elf32-metag.c:3345
+#: elf32-nios2.c:2494 elf64-ppc.c:12258 elf64-ppc.c:12266 xcofflink.c:4684
+#: elfnn-aarch64.c:3275
+msgid "%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ Â«%pAÂ» Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñƒ. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ðµ Ð±ÐµÐ· --enable-non-contiguous-regions.\n"
+
+#: elf32-arm.c:6027
 #, c-format
 msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
 msgstr "%pB: Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ€Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ ARMv8-M Ð¸ Ð½Ð¾Ð²ÐµÐµ"
 
-#: elf32-arm.c:5966
+#: elf32-arm.c:6036
 #, c-format
 msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»; Ñ�Ñ‚Ð¾ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð»Ð¸ Ñ�Ð»Ð°Ð±Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸"
 
-#: elf32-arm.c:6005
+#: elf32-arm.c:6075
 #, c-format
 msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»; Ñ�Ñ‚Ð¾ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð»Ð¸ Ñ�Ð»Ð°Ð±Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸"
 
-#: elf32-arm.c:6011
+#: elf32-arm.c:6081
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr "%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6093
 #, c-format
 msgid "%pB: `%s' and its special symbol are in different sections"
 msgstr "%pB: Â«%sÂ» Ð¸ ÐµÐ³Ð¾ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð°Ñ…"
 
-#: elf32-arm.c:6035
+#: elf32-arm.c:6105
 #, c-format
 msgid "%pB: entry function `%s' not output"
 msgstr "%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð² Ð²Ñ‹Ð²Ð¾Ð´Ðµ"
 
-#: elf32-arm.c:6042
+#: elf32-arm.c:6112
 #, c-format
 msgid "%pB: entry function `%s' is empty"
 msgstr "%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¿ÑƒÑ�Ñ‚Ð°"
 
-#: elf32-arm.c:6171
+#: elf32-arm.c:6241
 #, c-format
 msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
 msgstr "%pB: --in-implib Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐº Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Secure Gateway"
 
-#: elf32-arm.c:6217
+#: elf32-arm.c:6290
 #, c-format
 msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸: Â«%sÂ»; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ñ‹Ð¼, Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¼ Ð¸Ð»Ð¸ Ñ�Ñ�Ñ‹Ð»Ð°Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Thumb"
 
-#: elf32-arm.c:6239
+#: elf32-arm.c:6312
 #, c-format
 msgid "entry function `%s' disappeared from secure code"
 msgstr "Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¸Ñ�Ñ‡ÐµÐ·Ð»Ð° Ð¸Ð· Ð±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð°"
 
-#: elf32-arm.c:6263
+#: elf32-arm.c:6336
 #, c-format
 msgid "`%s' refers to a non entry function"
 msgstr "Â«%sÂ» Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½Ðµ Ð¿ÑƒÑ�Ñ‚ÑƒÑŽ Ð²Ñ…Ð¾Ð´Ð½ÑƒÑŽ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ"
 
-#: elf32-arm.c:6278
+#: elf32-arm.c:6351
 #, c-format
 msgid "%pB: visibility of symbol `%s' has changed"
 msgstr "%pB: Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð°Ñ�ÑŒ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-arm.c:6287
+#: elf32-arm.c:6360
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-arm.c:6306
+#: elf32-arm.c:6379
 #, c-format
 msgid "offset of veneer for entry function `%s' not a multiple of its size"
 msgstr "Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�ÐºÐ»ÐµÐ¹ÐºÐ¸ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾ ÐµÑ‘ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ"
 
-#: elf32-arm.c:6326
+#: elf32-arm.c:6399
 msgid "new entry function(s) introduced but no output import library specified:"
 msgstr "Ð¿Ð¾Ñ�Ð²Ð¸Ð»Ð°Ñ�ÑŒ Ð½Ð¾Ð²Ð°Ñ� Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ�(Ð¸), Ð½Ð¾ Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ Ð²Ñ‹Ð²Ð¾Ð´ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸:"
 
-#: elf32-arm.c:6334
+#: elf32-arm.c:6407
 #, c-format
 msgid "start address of `%s' is different from previous link"
 msgstr "Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Â«%sÂ» Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ð¾Ñ‚ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸"
 
-#: elf32-arm.c:7042 elf32-arm.c:7078
+#: elf32-arm.c:7118 elf32-arm.c:7156
 #, c-format
 msgid "unable to find %s glue '%s' for '%s'"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ»"
 
-#: elf32-arm.c:7793
+#: elf32-arm.c:7868
 #, c-format
 msgid "%pB: BE8 images only valid in big-endian mode"
 msgstr "%pB: Ð¾Ð±Ñ€Ð°Ð·Ñ‹ BE8 Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ñ‹ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ big-endian"
 
 #. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:8024
+#: elf32-arm.c:8096
 #, c-format
 msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¹ Ð¾Ð±Ñ…Ð¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ VFP11 Ð½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹"
 
-#: elf32-arm.c:8051
+#: elf32-arm.c:8123
 #, c-format
 msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¹ Ð¾Ð±Ñ…Ð¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ STM32L4XX Ð½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹"
 
-#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693
+#: elf32-arm.c:8659 elf32-arm.c:8679 elf32-arm.c:8746 elf32-arm.c:8765
 #, c-format
 msgid "%pB: unable to find %s veneer `%s'"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ»"
 
-#: elf32-arm.c:8900
+#: elf32-arm.c:8972
 #, c-format
 msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
 msgstr "%pB(%pA+%#x): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ðº Ð² Ð½Ðµ Ð¿Ð¾Ñ�Ð»ÐµÐ´Ð½ÐµÐ¼ Ð±Ð»Ð¾ÐºÐµ IT: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gcc -mrestrict-it Ð´Ð»Ñ� Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð¾Ð´Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð² Ð±Ð»Ð¾ÐºÐµ IT"
 
-#: elf32-arm.c:9000
+#: elf32-arm.c:9070
 #, c-format
 msgid "invalid TARGET2 relocation type '%s'"
 msgstr "Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ TARGET2 Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Â«%sÂ»"
 
 #. FIXME: We ought to be able to generate thumb-1 PLT
 #. instructions...
-#: elf32-arm.c:9802
+#: elf32-arm.c:9840
 #, c-format
 msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� PLT Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ thumb-1 Ð¿Ð¾ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: elf32-arm.c:10106 elf32-arm.c:10148
+#: elf32-arm.c:10149 elf32-arm.c:10191
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %s Â«%#lxÂ» Ð² Ñ‚Ñ€Ð°Ð¼Ð¿Ð»Ð¸Ð½Ðµ TLS"
 
-#: elf32-arm.c:10492
+#: elf32-arm.c:10541
 msgid "shared object"
 msgstr "Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚"
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10544
 msgid "PIE executable"
 msgstr "Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ PIE"
 
-#: elf32-arm.c:10498
+#: elf32-arm.c:10547
 #, c-format
 msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ð¸Ð»Ð¸ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ %s; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC"
 
-#: elf32-arm.c:10635 elf32-arm.c:11062
+#: elf32-arm.c:10649
+#, c-format
+msgid "\\%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr "\\%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� BLX %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ %s Â«%sÂ»"
+
+#: elf32-arm.c:11066
 #, c-format
 msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� BLX %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ %s Â«%sÂ»"
 
+#: elf32-arm.c:11700
+#, c-format
+msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
+msgstr "%pB: Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð² Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ðµ 0..%lu, Ð½Ð¾ Ð½Ð°Ð¹Ð´ÐµÐ½ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu"
+
 #: elf32-arm.c:11975 elf32-arm.c:12001
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %s Â«%#lxÂ», Ð½Ð° ÐºÐ¾Ñ‚Ð¾Ñ€ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� TLS_GOTDESC"
 
-#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919
-#: elf32-nios2.c:4366
+#: elf32-arm.c:12047 elf32-csky.c:4959 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-nios2.c:4377
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ"
@@ -1554,626 +1812,665 @@ msgstr "%pB(%pA+%#<PRIx64>): Ð² Ð³Ñ€ÑƒÐ¿
 msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� %#<PRIx64> Ð´Ð»Ñ� Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %s"
 
-#: elf32-arm.c:13078 elf32-sh.c:3689
+#: elf32-arm.c:12630 elf32-arm.c:12789
+msgid "local symbol index too big"
+msgstr "Ð¸Ð½Ð´ÐµÐºÑ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹"
+
+#: elf32-arm.c:12640 elf32-arm.c:12674
+msgid "no dynamic index information available"
+msgstr "Ð½ÐµÑ‚ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¼ Ð¸Ð½Ð´ÐµÐºÑ�Ðµ"
+
+#: elf32-arm.c:12682
+msgid "invalid dynamic index"
+msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�"
+
+#: elf32-arm.c:12799
+msgid "dynamic index information not available"
+msgstr "Ð½ÐµÑ‚ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¼ Ð¸Ð½Ð´ÐµÐºÑ�Ðµ"
+
+#: elf32-arm.c:13230 elf32-sh.c:3567
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ SEC_MERGE"
 
-#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6534
+#: elf32-arm.c:13343 elf32-m68k.c:3966 elf32-xtensa.c:2761
+#: elfnn-aarch64.c:7018
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
 msgstr "%pB(%pA+%#<PRIx64>): %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ %s"
 
-#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6536
+#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2763
+#: elfnn-aarch64.c:7020
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
 msgstr "%pB(%pA+%#<PRIx64>): %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� Ð½Ðµ TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ %s"
 
-#: elf32-arm.c:13276 elf32-tic6x.c:2708
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6871
+#: elf32-arm.c:13428 elf32-tic6x.c:2649 elfnn-aarch64.c:7355
 msgid "out of range"
 msgstr "Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
 
-#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6875
+#: elf32-arm.c:13432 elf32-nios2.c:4511 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7359
 msgid "unsupported relocation"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6883
+#: elf32-arm.c:13440 elf32-nios2.c:4521 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7367
 msgid "unknown error"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°"
 
-#: elf32-arm.c:13764
+#: elf32-arm.c:13922
 #, c-format
 msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð»Ð°Ð³ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð´Ð»Ñ� %pB Ð½Ðµ ÑƒÑ�Ñ‚Ð°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�, Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ð½ ÑƒÐ¶Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚Ñƒ"
 
-#: elf32-arm.c:13768
+#: elf32-arm.c:13926
 #, c-format
 msgid "warning: clearing the interworking flag of %pB due to outside request"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‡Ð¸Ñ‰Ð°ÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð´Ð»Ñ� %pB Ð¸Ð·-Ð·Ð° Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ð·Ð°Ð¿Ñ€Ð¾Ñ�Ð°"
 
-#: elf32-arm.c:13813
+#: elf32-arm.c:13971
 #, c-format
 msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð±Ñ€Ð¾Ñ� Ñ„Ð»Ð°Ð³Ð° Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ %pB, Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ� Ð½Ð¸Ð¼ Ð±Ñ‹Ð» Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð±ÐµÐ· Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð¸Ð· %pB"
 
-#: elf32-arm.c:13900
+#: elf32-arm.c:14058
 #, c-format
 msgid "%pB: unknown mandatory EABI object attribute %d"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d"
 
-#: elf32-arm.c:13908
+#: elf32-arm.c:14066
 #, c-format
 msgid "warning: %pB: unknown EABI object attribute %d"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d"
 
-#: elf32-arm.c:14175
+#: elf32-arm.c:14401
 #, c-format
 msgid "error: %pB: unknown CPU architecture"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°"
 
-#: elf32-arm.c:14213 elf32-nios2.c:2946
+#: elf32-arm.c:14439 elf32-nios2.c:2950
 #, c-format
 msgid "error: %pB: conflicting CPU architectures %d/%d"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ðµ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ %d/%d"
 
-#: elf32-arm.c:14310
+#: elf32-arm.c:14536
 #, c-format
 msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾ Ð¸ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐ¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Tag_MPextension_use"
 
-#: elf32-arm.c:14339
+#: elf32-arm.c:14573
 #, c-format
 msgid "error: %pB uses VFP register arguments, %pB does not"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ñ‹Ðµ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹ VFP, Ð° %pB Ð½ÐµÑ‚"
 
-#: elf32-arm.c:14497
+#: elf32-arm.c:14742
 #, c-format
 msgid "error: %pB: unable to merge virtualization attributes with %pB"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ñ� %pB"
 
-#: elf32-arm.c:14523
+#: elf32-arm.c:14768
 #, c-format
 msgid "error: %pB: conflicting architecture profiles %c/%c"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ðµ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ %c/%c"
 
-#: elf32-arm.c:14662
+#: elf32-arm.c:14907
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ð²Ñ‹Ðµ Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹"
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14916
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰ÐµÐµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ R9"
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14928
 #, c-format
 msgid "error: %pB: SB relative addressing conflicts with use of R9"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰ÐµÐµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ Ð°Ð´Ñ€ÐµÑ�Ð°Ñ†Ð¸Ð¸ SB Ð¸ R9"
 
-#: elf32-arm.c:14696
+#: elf32-arm.c:14941
 #, c-format
 msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹ wchar_t, Ñ…Ð¾Ñ‚Ñ� ÑƒÐ¶Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹ wchar_t; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ wchar_t Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ñ… Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ"
 
-#: elf32-arm.c:14727
+#: elf32-arm.c:14972
 #, c-format
 msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s enum, Ñ…Ð¾Ñ‚Ñ� ÑƒÐ¶Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ñ�Ñ� %s enum; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ enum Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ñ… Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ"
 
-#: elf32-arm.c:14739
+#: elf32-arm.c:14984
 #, c-format
 msgid "error: %pB uses iWMMXt register arguments, %pB does not"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ñ‹Ðµ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹ iWMMXt, Ð° %pB Ð½ÐµÑ‚"
 
-#: elf32-arm.c:14756
+#: elf32-arm.c:15001
 #, c-format
 msgid "error: fp16 format mismatch between %pB and %pB"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ fp16 Ñ€Ð°Ñ�Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð² %pB Ð¸ %pB"
 
-#: elf32-arm.c:14792
+#: elf32-arm.c:15037
 #, c-format
 msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr "%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾ Ð¸ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐ¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Tag_MPextension_use"
 
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410
-#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537
-#: elf32-xgate.c:494 elfxx-mips.c:16037
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7037
-#, c-format
-msgid "private flags = %lx:"
-msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx:"
-
-#: elf32-arm.c:14888
+#: elf32-arm.c:15133
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ€Ð°Ð±Ð¾Ñ‚Ð° Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°]"
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15141
 #, c-format
 msgid " [VFP float format]"
 msgstr " [VFP Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸]"
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15143
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [Maverick Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸]"
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15145
 #, c-format
 msgid " [FPA float format]"
 msgstr " [FPA Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸]"
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15148
 #, c-format
 msgid " [floats passed in float registers]"
 msgstr " [Ñ‡Ð¸Ñ�Ð»Ð° Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¿ÐµÑ€ÐµÐ´Ð°ÑŽÑ‚Ñ�Ñ� Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹]"
 
-#: elf32-arm.c:14906 elf32-arm.c:14992
+#: elf32-arm.c:15151 elf32-arm.c:15237
 #, c-format
 msgid " [position independent]"
 msgstr " [Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð¾-Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ñ‹Ð¹]"
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15154
 #, c-format
 msgid " [new ABI]"
 msgstr " [Ð½Ð¾Ð²Ñ‹Ð¹ ABI]"
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15157
 #, c-format
 msgid " [old ABI]"
 msgstr " [Ñ�Ñ‚Ð°Ñ€Ñ‹Ð¹ ABI]"
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15160
 #, c-format
 msgid " [software FP]"
 msgstr " [Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ� FP]"
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15169
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�1 EABI]"
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15172 elf32-arm.c:15183
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²]"
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15174 elf32-arm.c:15185
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [Ð½ÐµÑ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²]"
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15180
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�2 EABI]"
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15188
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�]"
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15191
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [Ð¿Ñ€Ð¾ÐµÑ†Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ€Ð°Ð½ÑŒÑˆÐµ]"
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15198
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�3 EABI]"
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15202
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�4 EABI]"
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15206
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�5 EABI]"
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15209
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [soft-float ABI]"
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15212
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [hard-float ABI]"
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15218
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15221
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15227
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� EABI>"
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15234
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹]"
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15240
 #, c-format
 msgid " [FDPIC ABI supplement]"
 msgstr " [Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ FDPIC ABI]"
 
-#: elf32-arm.c:15000
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7040
+#: elf32-arm.c:15245 elfnn-aarch64.c:7524
 #, c-format
-msgid "<Unrecognised flag bits set>"
-msgstr "<Ð�ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð½Ð°Ð±Ð¾Ñ€ Ð±Ð¸Ñ‚Ð¾Ð² Ñ„Ð»Ð°Ð³Ð°>"
+msgid " <Unrecognised flag bits set>"
+msgstr " <Ð�ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð½Ð°Ð±Ð¾Ñ€ Ð±Ð¸Ñ‚Ð¾Ð² Ñ„Ð»Ð°Ð³Ð°>"
 
-#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783
-#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882
-#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7329
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:539
+#: elf32-arm.c:15362 elf32-arm.c:15496 elf32-i386.c:1525 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1090
+#: elf64-s390.c:845 elf64-x86-64.c:1975 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfxx-x86.c:970 elfnn-aarch64.c:7795 elfnn-loongarch.c:637
+#: elfnn-riscv.c:767
 #, c-format
 msgid "%pB: bad symbol index: %d"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�: %d"
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15752
 #, c-format
 msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
 msgstr "FDPIC Ð¿Ð¾ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %s Ð´Ð»Ñ� Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð²"
 
-#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998
-#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858
-#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252
-#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435
-#: elfxx-tilegx.c:2491 elfxx-x86.c:571
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:8677
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:1142
-#, c-format
-msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
-msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Â«%pTÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»\n"
-
-#: elf32-arm.c:16854
+#: elf32-arm.c:17026
 #, c-format
 msgid "errors encountered processing file %pB"
 msgstr "Ð¿Ñ€Ð¸ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐµ Ñ„Ð°Ð¹Ð»Ð° %pB Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ñ‹ Ð¾ÑˆÐ¸Ð±ÐºÐ¸"
 
-#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603
+#: elf32-arm.c:17399 elflink.c:13271 elflink.c:13318
 #, c-format
 msgid "could not find section %s"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ» %s"
 
-#: elf32-arm.c:18512
+#: elf32-arm.c:18354
+#, c-format
+msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
+msgstr "%pB: ÐšÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð²Ð¾ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ñ� %lu Ð´Ð¾ %u\n"
+
+#: elf32-arm.c:18618
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Cortex-A8 Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð° Ð² Ð½ÐµÐ±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð¼ Ð¼ÐµÑ�Ñ‚Ðµ"
 
 #. There's not much we can do apart from complain if this
 #. happens.
-#: elf32-arm.c:18539
+#: elf32-arm.c:18645
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Cortex-A8 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)"
 
-#: elf32-arm.c:19366 elf32-arm.c:19388
+#: elf32-arm.c:19472 elf32-arm.c:19494
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐºÐ»ÐµÐ¹ÐºÐ° VFP11 Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
 
-#: elf32-arm.c:19439
+#: elf32-arm.c:19545
 #, c-format
 msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
 msgstr "%pB(%#<PRIx64>): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX; Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ %<PRId64> Ð±Ð°Ð¹Ñ‚; Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�"
 
-#: elf32-arm.c:19478
+#: elf32-arm.c:19584
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX"
 
-#: elf32-arm.c:20567
+#: elf32-arm.c:20659
 #, c-format
 msgid "error: %pB is already in final BE8 format"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB ÑƒÐ¶Ðµ Ð² ÐºÐ¾Ð½ÐµÑ‡Ð½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ BE8"
 
-#: elf32-arm.c:20643
+#: elf32-arm.c:20735
 #, c-format
 msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±ÑŠÐµÐºÑ‚-Ð¸Ñ�Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº %pB Ð¸Ð¼ÐµÐµÑ‚ Ð²ÐµÑ€Ñ�Ð¸ÑŽ EABI %d, Ð° Ñ†ÐµÐ»ÑŒ %pB Ð¸Ð¼ÐµÐµÑ‚ Ð²ÐµÑ€Ñ�Ð¸ÑŽ EABI %d"
 
-#: elf32-arm.c:20658
+#: elf32-arm.c:20750
 #, c-format
 msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ð´Ð»Ñ� APCS-%d, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº Ñ†ÐµÐ»ÑŒ %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ APCS-%d"
 
-#: elf32-arm.c:20668
+#: elf32-arm.c:20760
 #, c-format
 msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ñ‡Ð¸Ñ�Ð»Ð° Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ð¸Ñ… Ð² Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ…"
 
-#: elf32-arm.c:20672
+#: elf32-arm.c:20764
 #, c-format
 msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ñ‡Ð¸Ñ�Ð»Ð° Ð² Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ…, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‘Ñ‚ Ð¸Ñ… Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹"
 
-#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696
+#: elf32-arm.c:20774 elf32-arm.c:20778 elf32-arm.c:20788
 #, c-format
 msgid "error: %pB uses %s instructions, whereas %pB does not"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð½ÐµÑ‚"
 
-#: elf32-arm.c:20700
+#: elf32-arm.c:20792
 #, c-format
 msgid "error: %pB does not use %s instructions, whereas %pB does"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð½Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚"
 
-#: elf32-arm.c:20719
+#: elf32-arm.c:20811
 #, c-format
 msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ FP, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ FP"
 
-#: elf32-arm.c:20723
+#: elf32-arm.c:20815
 #, c-format
 msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ FP, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ FP"
 
-#: elf32-arm.c:20737
+#: elf32-arm.c:20829
 #, c-format
 msgid "warning: %pB supports interworking, whereas %pB does not"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚Ñƒ, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð½ÐµÑ‚"
 
-#: elf32-arm.c:20743
+#: elf32-arm.c:20835
 #, c-format
 msgid "warning: %pB does not support interworking, whereas %pB does"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚Ñƒ, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚"
 
-#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577
-#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493
-#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998
-#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767
-#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689
-#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878
-msgid "internal error: dangerous relocation"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
+#: elf32-avr.c:1508
+msgid "%X%H: %s against `%s': error: relocation applies outside section\n"
+msgstr "%X%H: %s Ð´Ð»Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¾ Ð²Ð½Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°\n"
+
+#: elf32-avr.c:1516
+msgid "%X%H: %s against `%s': error: relocation target address is odd\n"
+msgstr "%X%H: %s Ð´Ð»Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÑ‡Ñ‘Ñ‚Ð½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ñ†ÐµÐ»ÐµÐ²Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�\n"
+
+#: elf32-avr.c:1524
+msgid "%X%H: %s against `%s': internal error: unexpected relocation result %d\n"
+msgstr "%X%H: %s Ð´Ð»Ñ� Â«%sÂ»: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d\n"
 
-#: elf32-avr.c:3327
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126
+#: elf32-avr.c:3340 elfnn-aarch64.c:3234
 #, c-format
 msgid "cannot create stub entry %s"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %s"
 
-#: elf32-bfin.c:106 elf32-bfin.c:362
+#: elf32-bfin.c:107 elf32-bfin.c:364
 msgid "relocation should be even number"
 msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ñ‡Ñ‘Ñ‚Ð½Ñ‹Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼"
 
-#: elf32-bfin.c:1585
+#: elf32-bfin.c:1589
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ»"
 
-#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269
-#: elf64-s390.c:3219 elf64-x86-64.c:3896
+#: elf32-bfin.c:1621 elf32-i386.c:3524 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3118 elf64-x86-64.c:4264
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ° %d"
 
-#: elf32-bfin.c:2638
+#: elf32-bfin.c:2647
 #, c-format
 msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ Â«%pA+%#<PRIx64>Â» Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼"
 
-#: elf32-bfin.c:2655
+#: elf32-bfin.c:2664
 msgid "relocation references symbol not defined in the module"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð¼Ð¾Ð´ÑƒÐ»Ðµ"
 
-#: elf32-bfin.c:2752
+#: elf32-bfin.c:2762
 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼"
 
-#: elf32-bfin.c:2793 elf32-bfin.c:2916
+#: elf32-bfin.c:2802 elf32-bfin.c:2923
 msgid "cannot emit fixups in read-only section"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�"
 
-#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511
+#: elf32-bfin.c:2832 elf32-bfin.c:2960 elf32-lm32.c:1007 elf32-sh.c:4385
 msgid "cannot emit dynamic relocations in read-only section"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�"
 
-#: elf32-bfin.c:2874
+#: elf32-bfin.c:2882
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC_VALUE ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼"
 
-#: elf32-bfin.c:3039
+#: elf32-bfin.c:3045
 msgid "relocations between different segments are not supported"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼ÐµÐ¶Ð´Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚Ñ�Ñ�"
 
-#: elf32-bfin.c:3040
+#: elf32-bfin.c:3046
 msgid "warning: relocation references a different segment"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚"
 
-#: elf32-bfin.c:4787 elf32-frv.c:6603
+#: elf32-bfin.c:3141 elf32-cris.c:2042 elf32-epiphany.c:574 elf32-fr30.c:602
+#: elf32-frv.c:4057 elf32-ft32.c:500 elf32-ip2k.c:1489 elf32-iq2000.c:699
+#: elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992 elf32-moxie.c:296
+#: elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1905 elf32-tilepro.c:3380
+#: elf32-v850.c:2302 elf32-visium.c:688 elf32-xstormy16.c:938 elf64-bpf.c:344
+#: elf64-mmix.c:1549 elfxx-tilegx.c:3750
+msgid "internal error: dangerous relocation"
+msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
+
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-bfin.c:4728 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16371
+#, c-format
+msgid "private flags = %lx:"
+msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx:"
+
+#: elf32-bfin.c:4779 elf32-frv.c:6585
 #, c-format
 msgid "%pB: cannot link non-fdpic object file into fdpic executable"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð», Ð½Ðµ Ñ�Ð²Ð»Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� fdpic, Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ fdpic"
 
-#: elf32-bfin.c:4791 elf32-frv.c:6607
+#: elf32-bfin.c:4783 elf32-frv.c:6589
 #, c-format
 msgid "%pB: cannot link fdpic object file into non-fdpic executable"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð», Ñ�Ð²Ð»Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� fdpic, Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ Ð½Ðµ fdpic"
 
-#: elf32-bfin.c:4941
+#: elf32-bfin.c:4920
 #, c-format
 msgid "*** check this relocation %s"
 msgstr "*** Ð¿Ñ€Ð¾Ð²ÐµÑ€ÑŒÑ‚Ðµ Ñ�Ñ‚Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s"
 
-#: elf32-bfin.c:5057
+#: elf32-bfin.c:5035
 msgid "the bfin target does not currently support the generation of copy relocations"
 msgstr "Ð´Ð»Ñ� Ñ†ÐµÐ»Ð¸ bfin Ð¿Ð¾ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹"
 
-#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390
+#: elf32-bfin.c:5329 elf32-cr16.c:2720 elf32-m68k.c:4420
 msgid "unsupported relocation type"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: elf32-cris.c:1119
+#: elf32-cris.c:1120
 #, c-format
 msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-cris.c:1184
+#: elf32-cris.c:1185
 #, c-format
 msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð½ÐµÑ‚ Ð½Ð¸ PLT Ð½Ð¸ GOT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-cris.c:1187
+#: elf32-cris.c:1188
 #, c-format
 msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð½ÐµÑ‚ PLT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674
-#: elf32-cris.c:1827 elf32-tic6x.c:2619
+#: elf32-cris.c:1194 elf32-cris.c:1327 elf32-cris.c:1592 elf32-cris.c:1675
+#: elf32-cris.c:1828 elf32-tic6x.c:2560
 msgid "[whose name is lost]"
 msgstr "[Ñ‡ÑŒÑ‘ Ð¸Ð¼Ñ� Ð¿Ð¾Ñ‚ÐµÑ€Ñ�Ð½Ð¾]"
 
-#: elf32-cris.c:1311 elf32-tic6x.c:2603
+#: elf32-cris.c:1312 elf32-tic6x.c:2544
 #, c-format
 msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against local symbol"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ %<PRId64> Ñƒ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
 
-#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612
+#: elf32-cris.c:1321 elf32-cris.c:1669 elf32-cris.c:1822 elf32-tic6x.c:2553
 #, c-format
 msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against symbol `%s'"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ %<PRId64> Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-cris.c:1347
+#: elf32-cris.c:1348
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«%sÂ»"
 
-#: elf32-cris.c:1364
+#: elf32-cris.c:1365
 #, c-format
 msgid "%pB, section %pA: relocation %s with no GOT created"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð±ÐµÐ· Ñ�Ð¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ GOT"
 
 #. We shouldn't get here for GCC-emitted code.
-#: elf32-cris.c:1581
+#: elf32-cris.c:1582
 #, c-format
 msgid "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ Ð½Ð° Â«%sÂ»; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ð¹?"
 
-#: elf32-cris.c:1584
+#: elf32-cris.c:1585
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð´Ð»Ñ� Â«%sÂ», Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ� Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ�Ñ‚ÑŒÑŽ Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ð¹?"
 
-#: elf32-cris.c:1955
+#: elf32-cris.c:1956
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«%sÂ», ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½ Ð²Ð½Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ð¹?"
 
-#: elf32-cris.c:2008
+#: elf32-cris.c:2009
 msgid "(too many global variables for -fpic: recompile with -fPIC)"
 msgstr "(Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… Ð´Ð»Ñ� -fpic: Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC)"
 
-#: elf32-cris.c:2015
+#: elf32-cris.c:2016
 msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)"
 msgstr "(Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð½Ð¸Ñ‚Ð¸ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¸ Ð´Ð»Ñ� -fpic Ð¸Ð»Ð¸ -msmall-tls: Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC Ð¸Ð»Ð¸ -mno-small-tls)"
 
-#: elf32-cris.c:3050
+#: elf32-cris.c:3051
 #, c-format
 msgid "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: v10/v32 Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ Ð½Ðµ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ PIC"
 
-#: elf32-cris.c:3104
+#: elf32-cris.c:3105
 #, c-format
 msgid ""
 "%pB, section %pA:\n"
 "  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ�Ð¼ÐµÑˆÐµÐ½Ð¸Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð², Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC"
 
-#: elf32-cris.c:3322
+#: elf32-cris.c:3323
 #, c-format
 msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC"
 
-#: elf32-cris.c:3747
+#: elf32-cris.c:3701
 #, c-format
 msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC"
 msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ», Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC"
 
-#: elf32-cris.c:3860
+#: elf32-cris.c:3813
 msgid "unexpected machine number"
 msgstr "Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ðµ Ñ‡Ð¸Ñ�Ð»Ð¾"
 
-#: elf32-cris.c:3911
+#: elf32-cris.c:3865
 #, c-format
 msgid " [symbols have a _ prefix]"
 msgstr " [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ� _]"
 
-#: elf32-cris.c:3914
+#: elf32-cris.c:3868
 #, c-format
 msgid " [v10 and v32]"
 msgstr " [v10 Ð¸ v32]"
 
-#: elf32-cris.c:3917
+#: elf32-cris.c:3871
 #, c-format
 msgid " [v32]"
 msgstr " [v32]"
 
-#: elf32-cris.c:3961
+#: elf32-cris.c:3915
 #, c-format
 msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ _, Ð½Ð¾ Ð² Ñ„Ð°Ð¹Ð» Ð·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð²"
 
-#: elf32-cris.c:3962
+#: elf32-cris.c:3916
 #, c-format
 msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð° _, Ð½Ð¾ Ð² Ñ„Ð°Ð¹Ð» Ð·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ _"
 
-#: elf32-cris.c:3981
+#: elf32-cris.c:3935
 #, c-format
 msgid "%pB contains CRIS v32 code, incompatible with previous objects"
 msgstr "%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÐºÐ¾Ð´ CRIS v32, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸"
 
-#: elf32-cris.c:3983
+#: elf32-cris.c:3937
 #, c-format
 msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
 msgstr "%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÐºÐ¾Ð´ Ð½Ðµ CRIS v32, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸"
 
-#: elf32-csky.c:2066
+#: elf32-csky.c:2018
 msgid "GOT table size out of range"
 msgstr "Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ GOT Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹"
 
-#: elf32-csky.c:2917
+#: elf32-csky.c:2830
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
-msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ð¹ eflag Â«%#lxÂ»"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ eflag Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%#lxÂ»"
 
-#: elf32-csky.c:2977
+#: elf32-csky.c:2853
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¸Ð¼Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%#xÂ»"
+
+#: elf32-csky.c:2918 elf32-csky.c:3078
 #, c-format
 msgid "%pB: machine flag conflict with target"
 msgstr "%pB: Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ†ÐµÐ»ÑŒÑŽ"
 
-#: elf32-csky.c:2990
+#: elf32-csky.c:2931
+#, c-format
+msgid "warning: file %pB's arch flag %s conflict with target %s,set target arch flag to %s"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ %pB Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ %s ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ†ÐµÐ»ÐµÐ²Ñ‹Ð¼ %s, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼ Ñ„Ð»Ð°Ð³ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ %s"
+
+#: elf32-csky.c:2960
+#, c-format
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr "ÐžÑˆÐ¸Ð±ÐºÐ°: Ñƒ %pB Ð¸ %pB Ñ€Ð°Ð·Ð½Ñ‹Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ VDSP"
+
+#: elf32-csky.c:2977
+#, c-format
+msgid "Error: %pB and %pB has different DSP version"
+msgstr "ÐžÑˆÐ¸Ð±ÐºÐ°: Ñƒ %pB Ð¸ %pB Ñ€Ð°Ð·Ð½Ñ‹Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ DSP"
+
+#: elf32-csky.c:2995
 #, c-format
-msgid "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s"
-msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ %pB Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ ck%s ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� ck%s Ñ†ÐµÐ»Ð¸, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼ ck%s"
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr "ÐžÑˆÐ¸Ð±ÐºÐ°: Ñƒ %pB Ð¸ %pB Ñ€Ð°Ð·Ð½Ñ‹Ðµ FPU ABI"
+
+#: elf32-csky.c:3092
+#, c-format
+msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ %pB Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ %s ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ†ÐµÐ»ÐµÐ²Ñ‹Ð¼ %s, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼ %s"
 
 #. The r_type is error, not support it.
-#: elf32-csky.c:4225 elf32-i386.c:351
+#: elf32-csky.c:4331 elf32-i386.c:344
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� : %#x"
@@ -2189,80 +2486,80 @@ msgid "jump (PC rel26) to section (%s) n
 msgstr "Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº (PC rel26) Ð² Ñ€Ð°Ð·Ð´ÐµÐ» (%s) Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
 #. Only if it's not an unresolved symbol.
-#: elf32-epiphany.c:573 elf32-ip2k.c:1489
+#: elf32-epiphany.c:570 elf32-ip2k.c:1485
 msgid "unsupported relocation between data/insn address spaces"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð½Ñ‹Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð¾Ð¼ Ð´Ð°Ð½Ð½Ñ‹Ñ…/Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹"
 
-#: elf32-frv.c:1452 elf32-frv.c:1603
+#: elf32-frv.c:1453 elf32-frv.c:1604
 msgid "relocation requires zero addend"
 msgstr "Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ"
 
-#: elf32-frv.c:2829
+#: elf32-frv.c:2833
 #, c-format
 msgid "%H: relocation to `%s+%v' may have caused the error above\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Â«%s+%vÂ» Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð·Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹\n"
 
-#: elf32-frv.c:2846
+#: elf32-frv.c:2850
 msgid "%H: relocation references symbol not defined in the module\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð¼Ð¾Ð´ÑƒÐ»Ðµ\n"
 
-#: elf32-frv.c:2922
+#: elf32-frv.c:2926
 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
 msgstr "%H: R_FRV_GETTLSOFF Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ call\n"
 
-#: elf32-frv.c:2963
+#: elf32-frv.c:2967
 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
 msgstr "%H R_FRV_GOTTLSDESC12 Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ lddi\n"
 
-#: elf32-frv.c:3034
+#: elf32-frv.c:3038
 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESCHI Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ sethi\n"
 
-#: elf32-frv.c:3071
+#: elf32-frv.c:3075
 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESCLO Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ setlo Ð¸Ð»Ð¸ setlos\n"
 
-#: elf32-frv.c:3118
+#: elf32-frv.c:3122
 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
 msgstr "%H: R_FRV_TLSDESC_RELAX Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ldd\n"
 
-#: elf32-frv.c:3202
+#: elf32-frv.c:3206
 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
 msgstr "%H: R_FRV_GETTLSOFF_RELAX Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ calll\n"
 
-#: elf32-frv.c:3256
+#: elf32-frv.c:3260
 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFF12 Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ldi\n"
 
-#: elf32-frv.c:3286
+#: elf32-frv.c:3290
 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFFHI Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ sethi\n"
 
-#: elf32-frv.c:3315
+#: elf32-frv.c:3319
 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFFLO Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ setlo Ð¸Ð»Ð¸ setlos\n"
 
-#: elf32-frv.c:3345
+#: elf32-frv.c:3349
 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
 msgstr "%H: R_FRV_TLSOFF_RELAX Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ld\n"
 
-#: elf32-frv.c:3390
+#: elf32-frv.c:3394
 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_TLSMOFFHI Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ sethi\n"
 
-#: elf32-frv.c:3417
+#: elf32-frv.c:3421
 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "R_FRV_TLSMOFFLO Ð½Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ð¼Ð¾ Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ setlo Ð¸Ð»Ð¸ setlos\n"
 
-#: elf32-frv.c:3538 elf32-frv.c:3660
+#: elf32-frv.c:3542 elf32-frv.c:3662
 msgid "%H: %s references dynamic symbol with nonzero addend\n"
 msgstr "%H: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼\n"
 
-#: elf32-frv.c:3580 elf32-frv.c:3703
+#: elf32-frv.c:3583 elf32-frv.c:3704
 msgid "%H: cannot emit fixups in read-only section\n"
 msgstr "%H: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�\n"
 
-#: elf32-frv.c:3611 elf32-frv.c:3746
+#: elf32-frv.c:3613 elf32-frv.c:3746
 msgid "%H: cannot emit dynamic relocations in read-only section\n"
 msgstr "%H: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�\n"
 
@@ -2276,17 +2573,17 @@ msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ
 msgid "%H: reloc against `%s': %s\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Â«%sÂ»: %s\n"
 
-#: elf32-frv.c:6514
+#: elf32-frv.c:6496
 #, c-format
 msgid "%pB: compiled with %s and linked with modules that use non-pic relocations"
 msgstr "%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ñ� %s Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð½Ðµ-pic Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876
+#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
 #, c-format
 msgid "%pB: compiled with %s and linked with modules compiled with %s"
 msgstr "%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ Ñ� %s Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� %s"
 
-#: elf32-frv.c:6581
+#: elf32-frv.c:6563
 #, c-format
 msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ðµ Ð¿Ð¾Ð»Ñ� e_flags (%#x), Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð¾Ñ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)"
@@ -2296,275 +2593,289 @@ msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð½
 msgid "%pB: relocations in generic ELF (EM: %d)"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ð¾Ð¼ ELF (EM: %d)"
 
-#: elf32-hppa.c:834 elf32-hppa.c:3511
+#: elf32-hppa.c:863 elf32-hppa.c:3403
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ñ�Ñ‚Ð¸Ñ‡ÑŒ %s, Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -ffunction-sections"
 
-#: elf32-hppa.c:1248
+#: elf32-hppa.c:1241
 #, c-format
 msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC"
 
-#: elf32-hppa.c:2688
+#: elf32-hppa.c:2580
 #, c-format
 msgid "%pB: duplicate export stub %s"
 msgstr "%pB: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ñ‹Ð¹ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %s"
 
-#: elf32-hppa.c:3344
+#: elf32-hppa.c:3236
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s fixup for insn %#x is not supported in a non-shared link"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %#x Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð½Ðµ Ð¾Ð±Ñ‰ÐµÐ¹ Ñ�Ñ�Ñ‹Ð»ÐºÐµ"
 
-#: elf32-hppa.c:4140
+#: elf32-hppa.c:4032
 #, c-format
 msgid "%s has both normal and TLS relocs"
 msgstr "%s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� TLS"
 
-#: elf32-hppa.c:4158
+#: elf32-hppa.c:4050
 #, c-format
 msgid "%pB:%s has both normal and TLS relocs"
 msgstr "%pB:%s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� TLS"
 
-#: elf32-hppa.c:4217
+#: elf32-hppa.c:4109
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ %s Ð´Ð»Ñ� %s"
 
-#: elf32-hppa.c:4521
+#: elf32-hppa.c:4413
 msgid ".got section not immediately after .plt section"
 msgstr "Ñ€Ð°Ð·Ð´ÐµÐ» .got Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ñ�Ñ‚Ð¾Ñ�Ñ‚ÑŒ Ñ�Ñ€Ð°Ð·Ñƒ Ð¿Ð¾Ñ�Ð»Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .plt"
 
-#: elf32-i386.c:1178 elf64-x86-64.c:1377
+#: elf32-i386.c:1177 elf64-x86-64.c:1462
 #, c-format
 msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
 msgstr "%pB: TLS-Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ Ð¸Ð· %s Ð² %s Ð´Ð»Ñ� Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹"
 
-#: elf32-i386.c:1269
+#: elf32-i386.c:1280
 #, c-format
 msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
 msgstr "%pB: Ð¿Ñ€Ñ�Ð¼Ð¾Ðµ GOT Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_386_GOT32X c Â«%sÂ» Ð±ÐµÐ· Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
 
-#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592
-#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591
-#: elfxx-tilegx.c:1805
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:451
+#: elf32-i386.c:1709 elf32-s390.c:1151 elf32-sh.c:5499 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1263 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-loongarch.c:591 elfnn-riscv.c:674
 #, c-format
 msgid "%pB: `%s' accessed both as normal and thread local symbol"
 msgstr "%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð´Ð»Ñ� Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:1798
+#: elf32-i386.c:1781
 #, c-format
 msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
 msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð½Ðµ PIC Ð²Ñ‹Ð·Ð¾Ð² IFUNC Â«%sÂ»"
 
-#: elf32-i386.c:2379 elf64-x86-64.c:2670
+#: elf32-i386.c:1836 elf64-x86-64.c:2355
+#, c-format
+msgid "%pB: non-canonical reference to canonical protected function `%s' in %pB"
+msgstr "%pB: Ð½ÐµÐºÐ°Ð½Ð¾Ð½Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° ÐºÐ°Ð½Ð¾Ð½Ð¸Ñ‡ÐµÑ�ÐºÑƒÑŽ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½ÑƒÑŽ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ Â«%sÂ» Ð² %pB"
+
+#: elf32-i386.c:2400 elf64-x86-64.c:2818 elfnn-riscv.c:2458
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727
-#: elf64-x86-64.c:4069 elf64-x86-64.c:4225
+#: elf32-i386.c:2433 elf32-i386.c:3735 elf32-i386.c:3883 elf64-x86-64.c:2875
+#: elf64-x86-64.c:4437 elf64-x86-64.c:4600 elfnn-riscv.c:2331
+#: elfnn-riscv.c:3161 elfnn-riscv.c:3235
 #, c-format
 msgid "Local IFUNC function `%s' in %pB\n"
 msgstr "Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� IFUNC Â«%sÂ» Ð² %pB\n"
 
-#: elf32-i386.c:2569
+#: elf32-i386.c:2611
 #, c-format
 msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
 msgstr "%pB: Ð¿Ñ€Ñ�Ð¼Ð¾Ðµ GOT Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s c Â«%sÂ» Ð±ÐµÐ· Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
 
-#: elf32-i386.c:2604 elf64-x86-64.c:2919
+#: elf32-i386.c:2646 elf64-x86-64.c:3089
 msgid "hidden symbol"
 msgstr "Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2649 elf64-x86-64.c:3092
 msgid "internal symbol"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2652 elf64-x86-64.c:3095
 msgid "protected symbol"
 msgstr "Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2655 elf64-x86-64.c:3098
 msgid "symbol"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:2619
+#: elf32-i386.c:2661
 #, c-format
 msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_386_GOTOFF Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
 
-#: elf32-i386.c:2632
+#: elf32-i386.c:2674
 #, c-format
 msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_386_GOTOFF Ð´Ð»Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð¹ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
 
-#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935
+#: elf32-i386.c:4086 elf64-x86-64.c:4811
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr "%F%P: Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»: Â«%pAÂ»\n"
+
+#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
 msgid "ip2k relaxer: switch table without complete matching relocation information."
 msgstr "ip2k relaxer: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ Ð±ÐµÐ· Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ Ñ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ� Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸."
 
-#: elf32-ip2k.c:879 elf32-ip2k.c:962
+#: elf32-ip2k.c:878 elf32-ip2k.c:961
 msgid "ip2k relaxer: switch table header corrupt."
 msgstr "ip2k relaxer: Ð¸Ñ�Ð¿Ð¾Ñ€Ñ‡ÐµÐ½ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹."
 
-#: elf32-ip2k.c:1302
+#: elf32-ip2k.c:1298
 #, c-format
 msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº ip2k: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> (Ð½Ð°Ð·Ð½Ð°Ñ‡ = %#<PRIx64>)"
 
-#: elf32-ip2k.c:1321
+#: elf32-ip2k.c:1317
 #, c-format
 msgid "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº ip2k: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> (Ð½Ð°Ð·Ð½Ð°Ñ‡ = %#<PRIx64>)"
 
-#: elf32-lm32.c:651 elf32-nios2.c:3141
+#: elf32-lm32.c:609 elf32-nios2.c:3145
 msgid "global pointer relative relocation when _gp not defined"
 msgstr "Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
 
-#: elf32-lm32.c:706 elf32-nios2.c:3578
+#: elf32-lm32.c:664 elf32-nios2.c:3582
 msgid "global pointer relative address out of range"
 msgstr "Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
 
-#: elf32-lm32.c:1002
+#: elf32-lm32.c:960
 #, c-format
 msgid "internal error: addend should be zero for %s"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� %s"
 
-#: elf32-m32r.c:1471
+#: elf32-m32r.c:1461
 msgid "SDA relocation when _SDA_BASE_ not defined"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SDA, Ð½Ð¾ _SDA_BASE_ Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
 
-#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149
+#: elf32-m32r.c:2776 elf32-microblaze.c:1134 elf32-microblaze.c:1182
 #, c-format
 msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)"
 msgstr "%pB: Ñ†ÐµÐ»ÑŒ (%s) Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð² Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%pA)"
 
-#: elf32-m32r.c:3487
+#: elf32-m32r.c:3279
 #, c-format
 msgid "%pB: instruction set mismatch with previous modules"
 msgstr "%pB: Ð½Ð°Ð±Ð¾Ñ€ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñƒ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹"
 
-#: elf32-m32r.c:3508 elf32-nds32.c:6992
+#: elf32-m32r.c:3300 elf32-nds32.c:6900
 #, c-format
 msgid "private flags = %lx"
 msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx"
 
-#: elf32-m32r.c:3513
+#: elf32-m32r.c:3305
 #, c-format
 msgid ": m32r instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32r"
 
-#: elf32-m32r.c:3514
+#: elf32-m32r.c:3306
 #, c-format
 msgid ": m32rx instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32rx"
 
-#: elf32-m32r.c:3515
+#: elf32-m32r.c:3307
 #, c-format
 msgid ": m32r2 instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32r2"
 
-#: elf32-m68hc1x.c:1116
+#: elf32-m68hc1x.c:1135
 #, c-format
 msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
 msgstr "Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð´Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÑŽ"
 
-#: elf32-m68hc1x.c:1150
+#: elf32-m68hc1x.c:1166
 #, c-format
 msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code."
 msgstr "Ð�Ð´Ñ€ÐµÑ� XGATE (%lx) Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð¾Ð±Ñ‰ÐµÐ¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð¹ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ (0xE000-0xFFFF), Ð¿Ð¾Ñ�Ñ‚Ð¾Ð¼Ñƒ Ð²Ñ‹ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ð°Ð´Ñ€ÐµÑ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸, Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ�Ñ‚ÑŒ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†ÐµÐ¹ Ð² ÐºÐ¾Ð´Ðµ."
 
-#: elf32-m68hc1x.c:1168
+#: elf32-m68hc1x.c:1182
 #, c-format
 msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)"
 msgstr "Ð±Ð°Ð½ÐºÐ¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� [%lx:%04lx] (%lx) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð±Ð°Ð½ÐºÐ¾Ð¼ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ Ð±Ð°Ð½ÐºÐ¸Ñ€ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx)"
 
-#: elf32-m68hc1x.c:1184
+#: elf32-m68hc1x.c:1197
 #, c-format
 msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx"
 msgstr "Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð±Ð°Ð½ÐºÐ¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� [%lx:%04lx] Ð² Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð¼ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %04lx"
 
-#: elf32-m68hc1x.c:1225
+#: elf32-m68hc1x.c:1233
 #, c-format
 msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code"
 msgstr "Ð�Ð´Ñ€ÐµÑ� S12 (%lx) Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð¾Ð±Ñ‰ÐµÐ¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð¹ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ (0x2000-0x4000), Ð¿Ð¾Ñ�Ñ‚Ð¾Ð¼Ñƒ Ð²Ñ‹ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ð°Ð´Ñ€ÐµÑ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² ÐºÐ¾Ð´Ðµ"
 
-#: elf32-m68hc1x.c:1352
+#: elf32-m68hc1x.c:1357
 #, c-format
 msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð², Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð´Ð»Ñ� 16-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ†ÐµÐ»Ñ‹Ñ… (-mshort), Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ� 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ†ÐµÐ»Ñ‹Ñ…"
 
-#: elf32-m68hc1x.c:1359
+#: elf32-m68hc1x.c:1364
 #, c-format
 msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð², Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð´Ð»Ñ� 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… double (-fshort-double), Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… double"
 
-#: elf32-m68hc1x.c:1368
+#: elf32-m68hc1x.c:1373
 #, c-format
 msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð², Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð´Ð»Ñ� HCS12, Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ� HC12"
 
-#: elf32-m68hc1x.c:1413 elf32-xgate.c:497
+#: elf32-m68hc1x.c:1418 elf32-xgate.c:497
 #, c-format
 msgid "[abi=32-bit int, "
 msgstr "[abi=32-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ int, "
 
-#: elf32-m68hc1x.c:1415 elf32-xgate.c:499
+#: elf32-m68hc1x.c:1420 elf32-xgate.c:499
 #, c-format
 msgid "[abi=16-bit int, "
 msgstr "[abi=16-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ int, "
 
-#: elf32-m68hc1x.c:1418 elf32-xgate.c:502
+#: elf32-m68hc1x.c:1423 elf32-xgate.c:502
 #, c-format
 msgid "64-bit double, "
 msgstr "64-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ double, "
 
-#: elf32-m68hc1x.c:1420 elf32-xgate.c:504
+#: elf32-m68hc1x.c:1425 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "32-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ double, "
 
-#: elf32-m68hc1x.c:1423
+#: elf32-m68hc1x.c:1428
 #, c-format
 msgid "cpu=HC11]"
 msgstr "Ð¦ÐŸ=HC11]"
 
-#: elf32-m68hc1x.c:1425
+#: elf32-m68hc1x.c:1430
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "Ð¦ÐŸ=HCS12]"
 
-#: elf32-m68hc1x.c:1427
+#: elf32-m68hc1x.c:1432
 #, c-format
 msgid "cpu=HC12]"
 msgstr "Ð¦ÐŸ=HC12]"
 
-#: elf32-m68hc1x.c:1430
+#: elf32-m68hc1x.c:1435
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ=Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ñ� Ð±Ð°Ð½ÐºÐ°Ð¼Ð¸]"
 
-#: elf32-m68hc1x.c:1432
+#: elf32-m68hc1x.c:1437
 #, c-format
 msgid " [memory=flat]"
 msgstr " [Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ=Ð¿Ð»Ð¾Ñ�ÐºÐ°Ñ�]"
 
-#: elf32-m68hc1x.c:1435
+#: elf32-m68hc1x.c:1440
 #, c-format
 msgid " [XGATE RAM offsetting]"
 msgstr " [Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ XGATE Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸]"
 
-#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3572 elf32-ppc.c:3580
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ"
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:8061 vms-alpha.c:8077
 msgid "unknown"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾"
 
-#: elf32-m68k.c:1660
+#: elf32-m68k.c:1731
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ GOT: ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ� 8-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ > %d"
 
-#: elf32-m68k.c:1667
+#: elf32-m68k.c:1738
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ GOT: ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ� 8-Ð¼Ð¸ Ð¸Ð»Ð¸ 16-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ > %d"
@@ -2580,350 +2891,345 @@ msgstr "mep: Ð½ÐµÑ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸
 msgid "MeP: howto %d has type %d"
 msgstr "MeP: howto %d Ð¸Ð¼ÐµÐµÑ‚ Ñ‚Ð¸Ð¿ %d"
 
-#: elf32-mep.c:622
+#: elf32-mep.c:618
 #, c-format
 msgid "%pB and %pB are for different cores"
 msgstr "%pB Ð¸ %pB Ð´Ð»Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ�Ð´ÐµÑ€"
 
-#: elf32-mep.c:641
+#: elf32-mep.c:637
 #, c-format
 msgid "%pB and %pB are for different configurations"
 msgstr "%pB Ð¸ %pB Ð´Ð»Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ñ… ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¹"
 
-#: elf32-mep.c:679
+#: elf32-mep.c:675
 #, c-format
 msgid "private flags = 0x%lx"
 msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = 0x%lx"
 
-#: elf32-metag.c:1863
+#: elf32-metag.c:1857
 #, c-format
 msgid "%pB(%pA): multiple TLS models are not supported"
 msgstr "%pB(%pA): Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ TLS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: elf32-metag.c:1866
+#: elf32-metag.c:1860
 #, c-format
 msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link"
 msgstr "%pB(%pA): Ð¿Ñ€Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ð¸ Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸"
 
-#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538
-#: elfxx-tilegx.c:3543
+#: elf32-microblaze.c:1577 elf32-tilepro.c:3021 elfxx-sparc.c:3446
+#: elfxx-tilegx.c:3415
 #, c-format
 msgid "%pB: probably compiled without -fPIC?"
 msgstr "%pB: Ð²ÐµÑ€Ð¾Ñ�Ñ‚Ð½Ð¾, ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ†Ð¸Ñ� Ð±ÐµÐ· -fPIC?"
 
-#: elf32-mips.c:1775 elf64-mips.c:3516 elfn32-mips.c:3332
+#: elf32-mips.c:1776 elf64-mips.c:3515 elfn32-mips.c:3334
 msgid "literal relocation occurs for an external symbol"
 msgstr "Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ ÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-mips.c:1822 elf32-score.c:569 elf32-score7.c:469 elf64-mips.c:3559
-#: elfn32-mips.c:3373
+#: elf32-mips.c:1827 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3558
+#: elfn32-mips.c:3376
 msgid "32bits gp relative relocation occurs for an external symbol"
 msgstr "Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ 32â€”Ð±Ð¸Ñ‚Ð½Ð¾Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-msp430.c:837 elf32-msp430.c:1151
+#: elf32-msp430.c:914
+#, c-format
+msgid "error: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� uleb128 Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ 0x%lx Ð² %pA Ð¸Ð· %pB Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ðµ Ð¼ÐµÑ�Ñ‚Ð¾"
+
+#: elf32-msp430.c:983 elf32-msp430.c:1297
 msgid "try enabling relaxation to avoid relocation truncations"
 msgstr "Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ðµ, Ñ‡Ñ‚Ð¾Ð±Ñ‹ Ð¸Ð·Ð±ÐµÐ¶Ð°Ñ‚ÑŒ Ð¾Ð±Ñ€ÐµÐ·Ð°Ð½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹"
 
-#: elf32-msp430.c:1358
+#: elf32-msp430.c:1506
 msgid "internal error: branch/jump to an odd address detected"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ/Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ñ�Ñ‚Ñ€Ð°Ð½Ð½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ"
 
-#: elf32-msp430.c:2357
+#: elf32-msp430.c:2673
 #, c-format
 msgid "warning: %pB: unknown MSPABI object attribute %d"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ MSPABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d"
 
-#: elf32-msp430.c:2456
+#: elf32-msp430.c:2774
 #, c-format
 msgid "error: %pB uses %s instructions but %pB uses %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s"
 
-#: elf32-msp430.c:2468
+#: elf32-msp430.c:2786
 #, c-format
 msgid "error: %pB uses the %s code model whereas %pB uses the %s code model"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ð° %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ð° %s"
 
-#: elf32-msp430.c:2480
+#: elf32-msp430.c:2799
 #, c-format
 msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¾Ð³Ñ€Ð¾Ð¼Ð½ÑƒÑŽ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ð°, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ MSP430"
 
-#: elf32-msp430.c:2491
+#: elf32-msp430.c:2810
 #, c-format
 msgid "error: %pB uses the %s data model whereas %pB uses the %s data model"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %s"
 
-#: elf32-msp430.c:2503
+#: elf32-msp430.c:2823
 #, c-format
 msgid "error: %pB uses the small code model but %pB uses the %s data model"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð°Ð»ÑƒÑŽ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ…, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %s"
 
-#: elf32-msp430.c:2515
+#: elf32-msp430.c:2835
 #, c-format
 msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ñ… %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ MSP430"
 
-#: elf32-nds32.c:3624
+#: elf32-msp430.c:2860
 #, c-format
-msgid "error: can't find symbol: %s"
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %s"
+msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²ÐµÑ€Ñ…Ð½ÑŽÑŽ Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ð´Ð°Ð½Ð½Ñ‹Ñ…, Ð½Ð¾ %pB Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÑ‚, Ñ‡Ñ‚Ð¾ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð² Ð½Ð¸Ð¶Ð½ÐµÐ¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸"
 
-#: elf32-nds32.c:5639
+#: elf32-nds32.c:3674
 #, c-format
-msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC"
-msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC"
+msgid "error: can't find symbol: %s"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %s"
 
-#: elf32-nds32.c:5669
+#: elf32-nds32.c:5573
 #, c-format
 msgid "%pB: warning: %s unsupported in shared mode"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ñ€ÐµÐ¶Ð¸Ð¼Ðµ"
 
-#: elf32-nds32.c:5795
+#: elf32-nds32.c:5699
 #, c-format
 msgid "%pB: warning: unaligned access to GOT entry"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ñƒ GOT"
 
-#: elf32-nds32.c:5836
+#: elf32-nds32.c:5740
 #, c-format
 msgid "%pB: warning: relocate SDA_BASE failed"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SDA_BASE"
 
-#: elf32-nds32.c:5858
+#: elf32-nds32.c:5762
 #, c-format
 msgid "%pB(%pA): warning: unaligned small data access of type %d"
 msgstr "%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ð¼Ð°Ð»Ñ‹Ð¼ Ð´Ð°Ð½Ð½Ñ‹Ð¼ Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d"
 
-#: elf32-nds32.c:6784
+#: elf32-nds32.c:6688
 #, c-format
 msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
 msgstr "%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° ISR Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð±Ñ‹Ð» %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹, Ñ�Ñ‚Ð°Ð» %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ð¹"
 
-#: elf32-nds32.c:6828
+#: elf32-nds32.c:6736
 #, c-format
 msgid "%pB: warning: endian mismatch with previous modules"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: elf32-nds32.c:6842
+#: elf32-nds32.c:6750
 #, c-format
 msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ñ�Ñ‚Ð°Ñ€Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°, Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð²"
 
-#: elf32-nds32.c:6930
+#: elf32-nds32.c:6838
 #, c-format
 msgid "%pB: error: ABI mismatch with previous modules"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
-#: elf32-nds32.c:6940
+#: elf32-nds32.c:6848
 #, c-format
 msgid "%pB: error: instruction set mismatch with previous modules"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½Ð°Ð±Ð¾Ñ€ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
-#: elf32-nds32.c:6967
+#: elf32-nds32.c:6875
 #, c-format
 msgid "%pB: warning: incompatible elf-versions %s and %s"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ elf %s Ð¸ %s"
 
-#: elf32-nds32.c:6998
+#: elf32-nds32.c:6906
 #, c-format
 msgid ": n1 instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ n1"
 
-#: elf32-nds32.c:7001
+#: elf32-nds32.c:6909
 #, c-format
 msgid ": n1h instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ n1h"
 
-#: elf32-nds32.c:9462
+#: elf32-nds32.c:9358
 #, c-format
 msgid "%pB: error: search_nds32_elf_blank reports wrong node"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: search_nds32_elf_blank Ñ�Ð¾Ð¾Ð±Ñ‰Ð°ÐµÑ‚ Ð¾ Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ð¼ ÑƒÐ·Ð»Ðµ"
 
-#: elf32-nds32.c:9722
+#: elf32-nds32.c:9622
 #, c-format
 msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>"
 
-#: elf32-nds32.c:12975
+#: elf32-nds32.c:12887
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr "%pB: Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ðµ OMIT_FP Ð² %pA"
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12906
 #, c-format
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr "%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ OMIT_FP Ð² %pA"
 
-#: elf32-nds32.c:13275 reloc.c:8410
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
-msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%RÂ» Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½\n"
-
-#: elf32-nios2.c:2930
+#: elf32-nios2.c:2934
 #, c-format
 msgid "error: %pB: big-endian R2 is not supported"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð¾Ñ‚ Ñ�Ñ‚Ð°Ñ€ÑˆÐµÐ³Ð¾ Ðº Ð¼Ð»Ð°Ð´ÑˆÐµÐ¼Ñƒ R2 Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: elf32-nios2.c:3822
+#: elf32-nios2.c:3825
 #, c-format
-msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n"
-msgstr "Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°\n"
+msgid "global pointer relative relocation at address %#<PRIx64> when _gp not defined\n"
+msgstr "Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°\n"
 
-#: elf32-nios2.c:3842
+#: elf32-nios2.c:3852
 #, c-format
-msgid "unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767\n"
-msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ñ�Ñ‚Ð¸Ñ‡ÑŒ %s (Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x) Ð¸Ð· Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ� (Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x), Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð¸Ð· Ñ€Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32678â€”32767\n"
+msgid "unable to reach %s (at %#<PRIx64>) from the global pointer (at %#<PRIx64>) because the offset (%<PRId64>) is out of the allowed range, -32678 to 32767\n"
+msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ñ�Ñ‚Ð¸Ñ‡ÑŒ %s (Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>) Ð¸Ð· Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ� (%#<PRIx64>), Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%<PRId64>) Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð¸Ð· Ñ€Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32678â€”32767\n"
 
-#: elf32-nios2.c:4495 elf32-pru.c:928
+#: elf32-nios2.c:4506 elf32-pru.c:931
 msgid "relocation out of range"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½"
 
-#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716
+#: elf32-nios2.c:4516 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr "Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-nios2.c:5378
+#: elf32-nios2.c:5354
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€"
 
-#: elf32-or1k.c:1177
+#: elf32-or1k.c:1258
 #, c-format
 msgid "%pB: Cannot handle relocation value size of %d"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d"
 
-#: elf32-or1k.c:1286
+#: elf32-or1k.c:1377
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d"
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1431
 #, c-format
 msgid "%pB: addend should be zero for plt relocations"
 msgstr "%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ plt"
 
-#: elf32-or1k.c:1445
+#: elf32-or1k.c:1544
 #, c-format
 msgid "%pB: addend should be zero for got relocations"
 msgstr "%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ got"
 
-#: elf32-or1k.c:1462
+#: elf32-or1k.c:1561
 #, c-format
 msgid "%pB: gotoff relocation against dynamic symbol %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ gotoff Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599
+#: elf32-or1k.c:1575 elf32-or1k.c:1590 elf64-alpha.c:4410 elf64-alpha.c:4554
 #, c-format
 msgid "%pB: pc-relative relocation against dynamic symbol %s"
 msgstr "%pB: pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf32-or1k.c:1493
+#: elf32-or1k.c:1604
 #, c-format
 msgid "%pB: non-pic relocation against symbol %s"
 msgstr "%pB: Ð½Ðµ-pic Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf32-or1k.c:1577
+#: elf32-or1k.c:1688
 #, c-format
 msgid "%pB: support for local dynamic not implemented"
 msgstr "%pB: Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð°"
 
-#: elf32-or1k.c:1729
+#: elf32-or1k.c:1867
 #, c-format
 msgid "%pB: will not resolve runtime TLS relocation"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ� Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚ Ñ€ÐµÑˆÐµÐ½Ð¾"
 
-#: elf32-or1k.c:2074
+#: elf32-or1k.c:2201
 #, c-format
 msgid "%pB: bad relocation section name `%s'"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ð¼Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
 
-#: elf32-or1k.c:3218
+#: elf32-or1k.c:3315
 #, c-format
 msgid "%pB: %s flag mismatch with previous modules"
 msgstr "%pB: Ñ„Ð»Ð°Ð³ %s Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: elf32-ppc.c:986
+#: elf32-ppc.c:990 elf64-ppc.c:1753
 #, c-format
 msgid "generic linker can't handle %s"
 msgstr "ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº Ð½Ðµ Ñ�Ð¼Ð¾Ð³ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ %s"
 
-#: elf32-ppc.c:1617
+#: elf32-ppc.c:1628
 #, c-format
 msgid "corrupt %s section in %pB"
 msgstr "Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð² %pB"
 
-#: elf32-ppc.c:1637
+#: elf32-ppc.c:1647
 #, c-format
 msgid "unable to read in %s section from %pB"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð¸Ð· %pB"
 
-#: elf32-ppc.c:1679
+#: elf32-ppc.c:1689
 #, c-format
 msgid "warning: unable to set size of %s section in %pB"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð·Ð°Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² %pB"
 
-#: elf32-ppc.c:1729
+#: elf32-ppc.c:1738
 msgid "failed to allocate space for new APUinfo section"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð´Ð»Ñ� Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° APUinfo"
 
-#: elf32-ppc.c:1748
+#: elf32-ppc.c:1757
 msgid "failed to compute new APUinfo section"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»Ð¸Ñ‚ÑŒ Ð½Ð¾Ð²Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» APUinfo"
 
-#: elf32-ppc.c:1751
+#: elf32-ppc.c:1760
 msgid "failed to install new APUinfo section"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ ÑƒÑ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ð½Ð¾Ð²Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» APUinfo"
 
-#: elf32-ppc.c:2853
+#: elf32-ppc.c:2869
 #, c-format
 msgid "%pB: relocation %s cannot be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
 
-#: elf32-ppc.c:3587 elf32-ppc.c:3595
-#, c-format
-msgid "%pB uses hard float, %pB uses soft float"
-msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ"
-
-#: elf32-ppc.c:3603 elf32-ppc.c:3611
+#: elf32-ppc.c:3588 elf32-ppc.c:3596
 #, c-format
 msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
 msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð¾Ð¹ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#: elf32-ppc.c:3630 elf32-ppc.c:3638
+#: elf32-ppc.c:3618 elf32-ppc.c:3626
 #, c-format
 msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
 msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ long double, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ 128-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ long double"
 
-#: elf32-ppc.c:3646 elf32-ppc.c:3654
+#: elf32-ppc.c:3634 elf32-ppc.c:3642
 #, c-format
 msgid "%pB uses IBM long double, %pB uses IEEE long double"
 msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ long double Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ IBM, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ long double Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ IEEE"
 
-#: elf32-ppc.c:3721 elf32-ppc.c:3730
+#: elf32-ppc.c:3709 elf32-ppc.c:3718
 #, c-format
 msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
 msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ ABI Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð² AltiVec, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ ABI Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð² SPE"
 
-#: elf32-ppc.c:3759 elf32-ppc.c:3768
+#: elf32-ppc.c:3747 elf32-ppc.c:3756
 #, c-format
 msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
 msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ r3/r4 Ð´Ð»Ñ� Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¾Ð¹ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ñ‹, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ"
 
-#: elf32-ppc.c:3829
+#: elf32-ppc.c:3820
 #, c-format
 msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
 msgstr "%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ�Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: elf32-ppc.c:3837
+#: elf32-ppc.c:3828
 #, c-format
 msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
 msgstr "%pB: Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable"
 
-#: elf32-ppc.c:3906
+#: elf32-ppc.c:3899
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
 msgstr "%pB(%pA+0x%lx): Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ 16A Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x insn"
 
-#: elf32-ppc.c:3925
+#: elf32-ppc.c:3918
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
 msgstr "%pB(%pA+0x%lx): Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ 16D Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x insn"
@@ -2937,44 +3243,49 @@ msgstr "Ð¿Ñ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¸Ñ�Ð
 msgid "bss-plt forced by profiling"
 msgstr "Ð¿Ñ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� bss-plt Ð¸Ð·-Ð·Ð° Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ�"
 
+#: elf32-ppc.c:4608 elf64-ppc.c:8497
+msgid "%H: warning: %s unexpected insn %#x.\n"
+msgstr "%H: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %s Ð½Ðµ Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ insn %#x.\n"
+
 #. Uh oh, we didn't find the expected call.  We
 #. could just mark this symbol to exclude it
 #. from tls optimization but it's safer to skip
 #. the entire optimization.
-#: elf32-ppc.c:4606 elf64-ppc.c:7724
+#: elf32-ppc.c:4638 elf64-ppc.c:8562
 #, c-format
 msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
 msgstr "%H Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ lost __tls_get_addr, Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� TLS Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°\n"
 
-#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534
-#: elfxx-tilegx.c:2579
+#: elf32-ppc.c:5567 elf32-sh.c:3019 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elfxx-tilegx.c:2494
 #, c-format
 msgid "%pB: dynamic relocation in read-only section `%pA'\n"
 msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»\n"
 
-#: elf32-ppc.c:7457
+#: elf32-ppc.c:7443
 msgid "%P: %H: error: %s with unexpected instruction %x\n"
 msgstr "%P: %H: Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ñ� Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹ %x\n"
 
-#: elf32-ppc.c:7494
+#: elf32-ppc.c:7481
 msgid "%H: fixup branch overflow\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð¸ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹\n"
 
-#: elf32-ppc.c:7534 elf32-ppc.c:7570
+#: elf32-ppc.c:7521 elf32-ppc.c:7559
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ñ� Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹ %#x"
 
-#: elf32-ppc.c:7634
+#: elf32-ppc.c:7623
 #, c-format
 msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� bss-plt -fPIC ifunc %s\n"
 
-#: elf32-ppc.c:7673 elf64-ppc.c:15220
-msgid "%H: warning: %s unexpected insn %#x.\n"
-msgstr "%H: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %s Ð½Ðµ Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ insn %#x.\n"
+#: elf32-ppc.c:7659
+#, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %#x Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: elf32-ppc.c:7985
+#: elf32-ppc.c:7947
 #, c-format
 msgid "%H: non-zero addend on %s reloc against `%s'\n"
 msgstr "%H: Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ %s Ð´Ð»Ñ� Â«%sÂ»\n"
@@ -2987,110 +3298,117 @@ msgstr "%H: Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð
 #. local won't have the +32k reloc addend trick marking
 #. -fPIC code, so the linker won't know whether r30 is
 #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
-#: elf32-ppc.c:8017
+#: elf32-ppc.c:7979
 #, c-format
 msgid "%X%H: @local call to ifunc %s\n"
 msgstr "%X%H: @local Ð²Ñ‹Ð·Ð¾Ð² ifunc %s\n"
 
-#: elf32-ppc.c:8187
+#: elf32-ppc.c:8158
 #, c-format
 msgid "%H: relocation %s for indirect function %s unsupported\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð½ÐµÑ�Ð²Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
 
-#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725
+#: elf32-ppc.c:8497 elf32-ppc.c:8528 elf32-ppc.c:8631 elf32-ppc.c:8731
 #, c-format
 msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
 msgstr "%pB: Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ (%s) Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð² Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» (%s)"
 
-#: elf32-ppc.c:8855 elf32-ppc.c:8873
-msgid "%P: %H: %s relocation unsupported for bss-plt\n"
-msgstr "%P: %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� bss-plt\n"
+#: elf32-ppc.c:8909 elf32-ppc.c:8930
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
+msgstr "%X%P: %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� bss-plt\n"
 
-#: elf32-ppc.c:8954
+#: elf32-ppc.c:9012
 #, c-format
 msgid "%H: error: %s against `%s' not a multiple of %u\n"
 msgstr "%H: Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ð² Â«%sÂ» Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾ %u\n"
 
-#: elf32-ppc.c:8983
+#: elf32-ppc.c:9041
 #, c-format
 msgid "%H: unresolvable %s relocation against symbol `%s'\n"
 msgstr "%H: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»\n"
 
-#: elf32-ppc.c:9064
+#: elf32-ppc.c:9123
 #, c-format
 msgid "%H: %s reloc against `%s': error %d\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ° %d\n"
 
-#: elf32-ppc.c:9959 elf64-ppc.c:15715
+#: elf32-ppc.c:10004
 msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
 msgstr "%X%P:  Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð²Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð½ÐµÑ�Ð²Ð½Ñ‹Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ GNU Ð¿Ñ€Ð¸Ð²ÐµÐ´ÑƒÑ‚ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�\n"
 
-#: elf32-ppc.c:9963 elf64-ppc.c:15719
+#: elf32-ppc.c:10008 elf64-ppc.c:18302
 msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
 msgstr "%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð²Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð½ÐµÑ�Ð²Ð½Ñ‹Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ GNU Ð¼Ð¾Ð³ÑƒÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�\n"
 
-#: elf32-ppc.c:10008
+#: elf32-ppc.c:10053
 #, c-format
 msgid "%s not defined in linker created %pA"
 msgstr "%s Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ Ð² ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐµ, Ñ�Ð¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð¼ %pA"
 
-#: elf32-pru.c:579 elf32-pru.c:1472
+#: elf32-pru.c:582 elf32-pru.c:1477
 #, c-format
 msgid "error: %pB: old incompatible object file detected"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ñ�Ñ‚Ð°Ñ€Ñ‹Ð¹ Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð»"
 
-#: elf32-rl78.c:372
-msgid "internal error: RL78 reloc stack overflow"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¾ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°"
-
-#: elf32-rl78.c:383
-msgid "internal error: RL78 reloc stack underflow"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¾ Ð²Ñ‹Ñ…Ð¾Ð´ Ð·Ð° Ð½Ð¸Ð¶Ð½ÑŽÑŽ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ Ñ�Ñ‚ÐµÐºÐ°"
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
+msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¾ Ð²Ñ‹Ñ…Ð¾Ð´ Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ Ñ�Ñ‚ÐµÐºÐ°"
+
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð´ÐµÐ»Ð¸Ñ‚Ñ�Ñ� Ð½Ð° Ð½Ð¾Ð»ÑŒ"
 
-#: elf32-rl78.c:1053
+#: elf32-rl78.c:1069
 msgid "warning: RL78_SYM reloc with an unknown symbol"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78_SYM Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: elf32-rl78.c:1084 elf32-rx.c:1456
-#, c-format
-msgid "%pB(%pA): error: call to undefined function '%s'"
-msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‹Ð·Ð¾Ð² Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ»"
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr "%H: %s Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°\n"
+
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
+msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %u Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
+
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð²ÐµÑ€Ð½ÑƒÐ»Ð¾ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %x\n"
 
-#: elf32-rl78.c:1205
+#: elf32-rl78.c:1220
 #, c-format
 msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
 msgstr "ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ RL78 ABI: G10 Ð² Ñ„Ð°Ð¹Ð»Ðµ %pB Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� %s Ð¸Ð· Ñ„Ð°Ð¹Ð»Ð° %pB"
 
-#: elf32-rl78.c:1222
+#: elf32-rl78.c:1237
 #, c-format
 msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
 msgstr "ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ RL78 ABI: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ %s Ð¸Ð· Ñ„Ð°Ð¹Ð»Ð° %pB Ñ� %s Ð¸Ð· Ñ„Ð°Ð¹Ð»Ð° %pB"
 
-#: elf32-rl78.c:1231
+#: elf32-rl78.c:1246
 msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
 msgstr "ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� RL78: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ Ð²Ð¼ÐµÑ�Ñ‚Ðµ"
 
-#: elf32-rl78.c:1235 elf32-rl78.c:1239
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
 #, c-format
 msgid "- %pB is 64-bit, %pB is not"
 msgstr "- %pB Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼, Ð° %pB Ð½ÐµÑ‚"
 
-#: elf32-rl78.c:1266
+#: elf32-rl78.c:1281
 #, c-format
 msgid " [64-bit doubles]"
 msgstr "[64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ double]"
 
-#: elf32-rx.c:605
+#: elf32-rx.c:618
 #, c-format
 msgid "%pB:%pA: table entry %s outside table"
 msgstr "%pB:%pA: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ %s Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹"
 
-#: elf32-rx.c:612
+#: elf32-rx.c:625
 #, c-format
 msgid "%pB:%pA: table entry %s not word-aligned within table"
 msgstr "%pB:%pA: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ %s Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½ Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð°"
 
-#: elf32-rx.c:684
+#: elf32-rx.c:700
 #, c-format
 msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
 msgstr "%pB:%pA: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐµÐµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Red Hat %s Ð´Ð»Ñ�: %s"
@@ -3099,74 +3417,79 @@ msgstr "%pB:%pA: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ
 #. an absolute address is being computed.  There are special cases
 #. for relocs against symbols that are known to be referenced in
 #. crt0.o before the PID base address register has been initialised.
-#: elf32-rx.c:704
+#: elf32-rx.c:720
 #, c-format
 msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
 msgstr "%pB(%pA): Ð½ÐµÐ±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ PID %s Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> (Ð´Ð»Ñ� %s Ð² %s)"
 
-#: elf32-rx.c:1288
+#: elf32-rx.c:1304
 msgid "warning: RX_SYM reloc with an unknown symbol"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RX_SYM Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: elf32-rx.c:3167
+#: elf32-rx.c:1472
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‹Ð·Ð¾Ð² Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ»"
+
+#: elf32-rx.c:3185
 #, c-format
 msgid "there is a conflict merging the ELF header flags from %pB"
 msgstr "Ð²Ð¾Ð·Ð½Ð¸Ðº ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� Ñ„Ð»Ð°Ð³Ð¾Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF Ð¸Ð· %pB"
 
-#: elf32-rx.c:3170
+#: elf32-rx.c:3188
 #, c-format
 msgid "  the input  file's flags: %s"
 msgstr "  Ñ„Ð»Ð°Ð³Ð¸ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°: %s"
 
-#: elf32-rx.c:3172
+#: elf32-rx.c:3190
 #, c-format
 msgid "  the output file's flags: %s"
 msgstr "  Ñ„Ð»Ð°Ð³Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°: %s"
 
-#: elf32-rx.c:3792
+#: elf32-rx.c:3797
 #, c-format
 msgid "%pB:%pA: table %s missing corresponding %s"
 msgstr "%pB:%pA: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° %s, Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð°Ñ� %s"
 
-#: elf32-rx.c:3800
+#: elf32-rx.c:3805
 #, c-format
 msgid "%pB:%pA: %s and %s must be in the same input section"
 msgstr "%pB:%pA: %s Ð¸ %s Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¾Ð´Ð½Ð¾Ð¼ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ"
 
-#: elf32-s390.c:2140 elf64-s390.c:2095
+#: elf32-s390.c:2009 elf64-s390.c:1976
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� Ð´Ð»Ñ� TLS-Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s"
 
-#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3873
 msgid "not enough GOT space for local GOT entries"
 msgstr "Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° GOT Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² GOT"
 
-#: elf32-score.c:2746
+#: elf32-score.c:2747
 msgid "address not word aligned"
 msgstr "Ð°Ð´Ñ€ÐµÑ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð°"
 
-#: elf32-score.c:2827 elf32-score7.c:2632
+#: elf32-score.c:2828 elf32-score7.c:2635
 #, c-format
 msgid "%pB: malformed reloc detected for section %pA"
 msgstr "%pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA"
 
-#: elf32-score.c:2881 elf32-score7.c:2686
+#: elf32-score.c:2882 elf32-score7.c:2689
 #, c-format
 msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CALL15 Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð½Ðµ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
 
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3990 elf32-score7.c:3797
 #, c-format
 msgid " [pic]"
 msgstr " [pic]"
 
-#: elf32-score.c:4007 elf32-score7.c:3812
+#: elf32-score.c:3994 elf32-score7.c:3801
 #, c-format
 msgid " [fix dep]"
 msgstr " [fix dep]"
 
-#: elf32-score.c:4050 elf32-score7.c:3855
+#: elf32-score.c:4041 elf32-score7.c:3848
 #, c-format
 msgid "%pB: warning: linking PIC files with non-PIC files"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÑ‚Ñ�Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° PIC-Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-PIC Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸"
@@ -3176,152 +3499,148 @@ msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ð
 msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: R_SH_USES ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½ÑƒÑŽ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ 0x%x"
 
-#: elf32-sh.c:3633
-msgid "unexpected STO_SH5_ISA32 on local symbol is not handled"
-msgstr "Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ STO_SH5_ISA32 Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ�"
-
-#: elf32-sh.c:3880
+#: elf32-sh.c:3754
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
 msgstr "%pB: %#<PRIx64>: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ðµ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ� Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ�"
 
-#: elf32-sh.c:3910 elf32-sh.c:3926
+#: elf32-sh.c:3784 elf32-sh.c:3800
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s (%#<PRIx64>)"
 
-#: elf32-sh.c:3942
+#: elf32-sh.c:3816
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocation %<PRId64> not in range -32..32"
 msgstr "%pB: %#<PRIx64>: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_PSHA %#<PRId64> Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32..32"
 
-#: elf32-sh.c:3958
+#: elf32-sh.c:3832
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocation %<PRId64> not in range -32..32"
 msgstr "%pB: %#<PRIx64>: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_SH_PSHL %#<PRId64> Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° -32..32"
 
-#: elf32-sh.c:4088 elf32-sh.c:4483
+#: elf32-sh.c:3962 elf32-sh.c:4357
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot emit fixup to `%s' in read-only section"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ Ðº Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�"
 
-#: elf32-sh.c:4586
+#: elf32-sh.c:4460
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-sh.c:4705
+#: elf32-sh.c:4579
 #, c-format
 msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ GD->LE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#<PRIx64>"
 
 #. The backslash is to prevent bogus trigraph detection.
-#: elf32-sh.c:4723
+#: elf32-sh.c:4597
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd4??)"
 
-#: elf32-sh.c:4731
+#: elf32-sh.c:4605
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xc7??)"
 
-#: elf32-sh.c:4738
+#: elf32-sh.c:4612
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd1??)"
 
-#: elf32-sh.c:4745
+#: elf32-sh.c:4619
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x310c)"
 
-#: elf32-sh.c:4752
+#: elf32-sh.c:4626
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x410b)"
 
-#: elf32-sh.c:4759
+#: elf32-sh.c:4633
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x34cc)"
 
-#: elf32-sh.c:4794
+#: elf32-sh.c:4668
 #, c-format
 msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ IE->LE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#<PRIx64>"
 
-#: elf32-sh.c:4812
+#: elf32-sh.c:4686
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd0??: mov.l)"
 
-#: elf32-sh.c:4821
+#: elf32-sh.c:4695
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x0?12: stc)"
 
-#: elf32-sh.c:4828
+#: elf32-sh.c:4702
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x0?ce: mov.l)"
 
-#: elf32-sh.c:4943
+#: elf32-sh.c:4817
 #, c-format
 msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ GD->IE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#<PRIx64>"
 
-#: elf32-sh.c:5011
+#: elf32-sh.c:4885
 #, c-format
 msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ð¸Ð¸ LD->LE Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð¾: %#<PRIx64>"
 
-#: elf32-sh.c:5139
+#: elf32-sh.c:5013
 #, c-format
 msgid "%X%C: relocation to \"%s\" references a different segment\n"
 msgstr "%X%C: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ Â«%sÂ» Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
 
-#: elf32-sh.c:5146
+#: elf32-sh.c:5020
 #, c-format
 msgid "%C: warning: relocation to \"%s\" references a different segment\n"
 msgstr "%C: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ Â«%sÂ» Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
 
-#: elf32-sh.c:5651 elf32-sh.c:5733
+#: elf32-sh.c:5488 elf32-sh.c:5570
 #, c-format
 msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
 msgstr "%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº FDPIC Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-sh.c:5657 elf32-sh.c:5738
+#: elf32-sh.c:5494 elf32-sh.c:5575
 #, c-format
 msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
 msgstr "%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº FDPIC Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð¸Ñ‚Ð¸"
 
-#: elf32-sh.c:5688
+#: elf32-sh.c:5525
 #, c-format
 msgid "%pB: Function descriptor relocation with non-zero addend"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼"
 
-#: elf32-sh.c:5895 elf64-alpha.c:4691
+#: elf32-sh.c:5732 elf64-alpha.c:4646
 #, c-format
 msgid "%pB: TLS local exec code cannot be linked into shared objects"
 msgstr "%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ ÐºÐ¾Ð´ TLS Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¾Ð±Ñ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸"
 
-#: elf32-sh.c:6010
+#: elf32-sh.c:5847
 #, c-format
 msgid "%pB: uses %s instructions while previous modules use %s instructions"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ñ…Ð¾Ñ‚Ñ� Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ð¸Ñ�ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s"
 
-#: elf32-sh.c:6022
+#: elf32-sh.c:5859
 #, c-format
 msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ» Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¹ Â«%sÂ» Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
 
-#: elf32-sh.c:6059
+#: elf32-sh.c:5900
 #, c-format
 msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸, Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ�Ð¼Ð¸, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð²ÑˆÐ¸Ð¼Ð¸Ñ�Ñ� Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
-#: elf32-sh.c:6072
+#: elf32-sh.c:5913
 #, c-format
 msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
 msgstr "%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�Ð¼ÐµÑˆÐ°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ FDPIC Ð¸ Ð½Ðµ FDPIC"
@@ -3336,72 +3655,77 @@ msgstr "%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½
 msgid "%pB: linking little endian files with big endian files"
 msgstr "%pB: Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚ Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚"
 
-#: elf32-spu.c:732
+#: elf32-sparc.c:157
+#, c-format
+msgid "%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr "%pB: Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ sparc Â«%luÂ»"
+
+#: elf32-spu.c:737
 msgid "%X%P: overlay section %pA does not start on a cache line\n"
 msgstr "%X%P: Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ð²ÐµÑ€Ð»ÐµÑ� %pA Ð½Ðµ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚Ñ�Ñ� Ñ�Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ ÐºÑ�ÑˆÐ°\n"
 
-#: elf32-spu.c:740
+#: elf32-spu.c:745
 msgid "%X%P: overlay section %pA is larger than a cache line\n"
 msgstr "%X%P: Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ð²ÐµÑ€Ð»ÐµÑ� %pA Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ ÐºÑ�ÑˆÐ°\n"
 
-#: elf32-spu.c:760
+#: elf32-spu.c:765
 msgid "%X%P: overlay section %pA is not in cache area\n"
 msgstr "%X%P: Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ð²ÐµÑ€Ð»ÐµÑ� %pA Ð½Ðµ Ð² Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ ÐºÑ�ÑˆÐ°\n"
 
-#: elf32-spu.c:801
+#: elf32-spu.c:806
 #, c-format
 msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n"
 msgstr "%X%P: Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ Ð¾Ð²ÐµÑ€Ð»ÐµÐµÐ² %pA Ð¸ %pA Ð½Ðµ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‚Ñ�Ñ� Ñ� Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð°\n"
 
-#: elf32-spu.c:1027
+#: elf32-spu.c:1032
 #, c-format
 msgid "warning: call to non-function symbol %s defined in %pB"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð·Ð¾Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ %s, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ Ð² %pB"
 
-#: elf32-spu.c:1377
+#: elf32-spu.c:1382
 #, c-format
 msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
 msgstr "%pA:0x%v lrlive .brinfo (%u) Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ð¾Ñ‚ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð³Ð¾ (%u)\n"
 
-#: elf32-spu.c:1909
+#: elf32-spu.c:1912
 #, c-format
 msgid "%pB is not allowed to define %s"
 msgstr "%pB Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�Ñ‚ÑŒ %s"
 
-#: elf32-spu.c:1917
+#: elf32-spu.c:1920
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr "Ð²Ð°Ð¼ Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�Ñ‚ÑŒ %s Ð² Ñ�Ñ†ÐµÐ½Ð°Ñ€Ð¸Ð¸"
 
-#: elf32-spu.c:1951
+#: elf32-spu.c:1954
 #, c-format
 msgid "%s in overlay section"
 msgstr "%s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐµÐ²"
 
-#: elf32-spu.c:1980
+#: elf32-spu.c:1983
 msgid "overlay stub relocation overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹Ð½Ð¾Ð¹ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: elf32-spu.c:1989 elf64-ppc.c:13230
+#: elf32-spu.c:1992 elf64-ppc.c:15328
 msgid "stubs don't match calculated size"
 msgstr "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð½Ðµ Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ"
 
-#: elf32-spu.c:2572
+#: elf32-spu.c:2575
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ� %s\n"
 
-#: elf32-spu.c:2588
+#: elf32-spu.c:2591
 #, c-format
 msgid "warning: %s exceeds section size\n"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°\n"
 
-#: elf32-spu.c:2620
+#: elf32-spu.c:2623
 #, c-format
 msgid "%pA:0x%v not found in function table\n"
 msgstr "%pA:0x%v Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹\n"
 
-#: elf32-spu.c:2761
+#: elf32-spu.c:2764
 #, c-format
 msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n"
 msgstr "%pB(%pA+0x%v): Ð²Ñ‹Ð·Ð¾Ð² Ð½Ðµ ÐºÐ¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pB(%pA), Ð°Ð½Ð°Ð»Ð¸Ð· Ð½Ðµ Ð¿Ð¾Ð»Ð¾Ð½\n"
@@ -3415,39 +3739,39 @@ msgstr "Ð² Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ Ñ�Ñ‚ÐµÐºÐ° Ð±Ñ
 msgid "  calls:\n"
 msgstr "  Ð²Ñ‹Ð·Ð¾Ð²Ñ‹:\n"
 
-#: elf32-spu.c:4341
+#: elf32-spu.c:4342
 #, c-format
 msgid "%s duplicated in %s\n"
 msgstr "%s Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÐµÑ‚Ñ�Ñ� Ð² %s\n"
 
-#: elf32-spu.c:4345
+#: elf32-spu.c:4346
 #, c-format
 msgid "%s duplicated\n"
 msgstr "%s Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÐµÑ‚Ñ�Ñ�\n"
 
-#: elf32-spu.c:4352
+#: elf32-spu.c:4353
 msgid "sorry, no support for duplicate object files in auto-overlay script\n"
 msgstr "Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ñ…Ñ�Ñ� Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð² Ñ�Ñ†ÐµÐ½Ð°Ñ€Ð¸Ð¸ auto-overlay Ð¿Ð¾ÐºÐ° Ð½Ðµ Ñ�Ð´ÐµÐ»Ð°Ð½Ð°\n"
 
-#: elf32-spu.c:4394
+#: elf32-spu.c:4395
 #, c-format
 msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n"
 msgstr "Ð½Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ 0x%v Ð¿Ð»ÑŽÑ� Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¾Ð²ÐµÑ€Ð»ÐµÑ� 0x%v Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ðµ\n"
 
-#: elf32-spu.c:4550
+#: elf32-spu.c:4551
 #, c-format
 msgid "%pB:%pA%s exceeds overlay size\n"
 msgstr "%pB:%pA%s Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�\n"
 
-#: elf32-spu.c:4691
+#: elf32-spu.c:4692
 msgid "%F%P: auto overlay error: %E\n"
 msgstr "%F%P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�: %E\n"
 
-#: elf32-spu.c:4712
+#: elf32-spu.c:4713
 msgid "Stack size for call graph root nodes.\n"
 msgstr "Ð Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ° Ð´Ð»Ñ� Ð²Ñ‹Ð·Ð¾Ð²Ð° Ð³Ñ€Ð°Ñ„Ð° ÐºÐ¾Ñ€Ð½ÐµÐ²Ñ‹Ñ… ÑƒÐ·Ð»Ð¾Ð².\n"
 
-#: elf32-spu.c:4713
+#: elf32-spu.c:4714
 msgid ""
 "\n"
 "Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
@@ -3455,336 +3779,335 @@ msgstr ""
 "\n"
 "Ð Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ° Ð´Ð»Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹. ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ�: '*' Ð¼Ð°ÐºÑ� Ñ�Ñ‚ÐµÐº, 't' Ñ…Ð²Ð¾Ñ�Ñ‚Ð¾Ð²Ð¾Ð¹ Ð²Ñ‹Ð·Ð¾Ð²\n"
 
-#: elf32-spu.c:4723
+#: elf32-spu.c:4724
 msgid "Maximum stack required is 0x%v\n"
 msgstr "Ð”Ð»Ñ� Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ° Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� 0x%v\n"
 
-#: elf32-spu.c:4742
+#: elf32-spu.c:4743
 msgid "%X%P: stack/lrlive analysis error: %E\n"
 msgstr "%X%P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ Ñ�Ñ‚ÐµÐºÐ°/lrlive: %E\n"
 
-#: elf32-spu.c:4745
+#: elf32-spu.c:4746
 msgid "%F%P: can not build overlay stubs: %E\n"
 msgstr "%F%P: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð±Ñ€Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�: %E\n"
 
-#: elf32-spu.c:4814
+#: elf32-spu.c:4815
 msgid "fatal error while creating .fixup"
 msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð¸Ð¼Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ .fixup"
 
-#: elf32-spu.c:5049
+#: elf32-spu.c:5051
 #, c-format
 msgid "%pB(%s+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr "%pB(%s+%#<PRIx64>): Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-tic6x.c:1628
+#: elf32-tic6x.c:1588
 msgid "warning: generating a shared library containing non-PIC code"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‰ÐµÐ¹ Ð½Ðµ-PIC ÐºÐ¾Ð´"
 
-#: elf32-tic6x.c:1633
+#: elf32-tic6x.c:1593
 msgid "warning: generating a shared library containing non-PID code"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‰ÐµÐ¹ Ð½Ðµ-PID ÐºÐ¾Ð´"
 
-#: elf32-tic6x.c:2493
+#: elf32-tic6x.c:2434
 #, c-format
 msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
 msgstr "%pB: Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SB, Ð½Ð¾ __c6xabi_DSBT_BASE Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
 
-#: elf32-tic6x.c:3629
+#: elf32-tic6x.c:3498
 #, c-format
 msgid "%pB: error: unknown mandatory EABI object attribute %d"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d"
 
-#: elf32-tic6x.c:3638
+#: elf32-tic6x.c:3507
 #, c-format
 msgid "%pB: warning: unknown EABI object attribute %d"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d"
 
-#: elf32-tic6x.c:3752 elf32-tic6x.c:3761
+#: elf32-tic6x.c:3625 elf32-tic6x.c:3634
 #, c-format
 msgid "error: %pB requires more stack alignment than %pB preserves"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð±Ð¾Ð»ÑŒÑˆÐµÐµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°, Ñ‡ÐµÐ¼ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¾ Ð² %pB"
 
-#: elf32-tic6x.c:3771 elf32-tic6x.c:3780
+#: elf32-tic6x.c:3644 elf32-tic6x.c:3653
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_alignment value in %pB"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Tag_ABI_array_object_alignment Ð² %pB"
 
-#: elf32-tic6x.c:3789 elf32-tic6x.c:3798
+#: elf32-tic6x.c:3662 elf32-tic6x.c:3671
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Tag_ABI_array_object_align_expected Ð² %pB"
 
-#: elf32-tic6x.c:3807 elf32-tic6x.c:3815
+#: elf32-tic6x.c:3680 elf32-tic6x.c:3688
 #, c-format
 msgid "error: %pB requires more array alignment than %pB preserves"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð±Ð¾Ð»ÑŒÑˆÐµÐµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð°, Ñ‡ÐµÐ¼ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¾ Ð² %pB"
 
-#: elf32-tic6x.c:3838
+#: elf32-tic6x.c:3711
 #, c-format
 msgid "warning: %pB and %pB differ in wchar_t size"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %pB Ð¸ %pB Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ wchar_t"
 
-#: elf32-tic6x.c:3857
+#: elf32-tic6x.c:3730
 #, c-format
 msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %pB Ð¸ %pB Ð¿Ð¾-Ñ€Ð°Ð·Ð½Ð¾Ð¼Ñƒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð´Ð»Ñ� DSBT"
 
-#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:9530
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2579
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2710
+#: elfnn-aarch64.c:9999 elfnn-loongarch.c:4317 elfnn-riscv.c:3458
 #, c-format
 msgid "discarded output section: `%pA'"
 msgstr "Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ð¹ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»: Â«%pAÂ»"
 
-#: elf32-v850.c:153
+#: elf32-v850.c:152
 #, c-format
 msgid "variable `%s' cannot occupy in multiple small data regions"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð·Ð°Ð½Ð¸Ð¼Ð°Ñ‚ÑŒ Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð½Ñ‹Ñ…"
 
-#: elf32-v850.c:156
+#: elf32-v850.c:155
 #, c-format
 msgid "variable `%s' can only be in one of the small, zero, and tiny data regions"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð² Ð¾Ð´Ð½Ð¾Ð¼ Ð¸Ð· Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ…, Ð½ÑƒÐ»ÐµÐ²Ñ‹Ñ… Ð¸ ÐºÑ€Ð¾ÑˆÐµÑ‡Ð½Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð½Ñ‹Ñ…"
 
-#: elf32-v850.c:159
+#: elf32-v850.c:158
 #, c-format
 msgid "variable `%s' cannot be in both small and zero data regions simultaneously"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… Ð¸ Ð½ÑƒÐ»ÐµÐ²Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ�Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾"
 
-#: elf32-v850.c:162
+#: elf32-v850.c:161
 #, c-format
 msgid "variable `%s' cannot be in both small and tiny data regions simultaneously"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… Ð¸ ÐºÑ€Ð¾ÑˆÐµÑ‡Ð½Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ�Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾"
 
-#: elf32-v850.c:165
+#: elf32-v850.c:164
 #, c-format
 msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð½ÑƒÐ»ÐµÐ²Ñ‹Ñ… Ð¸ ÐºÑ€Ð¾ÑˆÐµÑ‡Ð½Ñ‹Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ�Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾"
 
-#: elf32-v850.c:463
+#: elf32-v850.c:466
 msgid "failed to find previous HI16 reloc"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ HI16"
 
-#: elf32-v850.c:2303
+#: elf32-v850.c:2306
 msgid "could not locate special linker symbol __gp"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __gp"
 
-#: elf32-v850.c:2307
+#: elf32-v850.c:2310
 msgid "could not locate special linker symbol __ep"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __ep"
 
-#: elf32-v850.c:2311
+#: elf32-v850.c:2314
 msgid "could not locate special linker symbol __ctbp"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __ctbp"
 
-#: elf32-v850.c:2532
+#: elf32-v850.c:2535
 #, c-format
 msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ, Ð½Ð¾ Ð´Ð»Ñ� %pB Ð·Ð°Ð´Ð°Ð½Ð¾ 4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ"
 
-#: elf32-v850.c:2548
+#: elf32-v850.c:2551
 #, c-format
 msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð² %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ double, Ð½Ð¾ Ð² %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚ 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ double"
 
-#: elf32-v850.c:2563
+#: elf32-v850.c:2566
 #, c-format
 msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð² %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� FPU-3.0, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ FPU-2.0"
 
-#: elf32-v850.c:2595
+#: elf32-v850.c:2598
 #, c-format
 msgid " alignment of 8-byte entities: "
 msgstr " Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²: "
 
-#: elf32-v850.c:2598
+#: elf32-v850.c:2601
 #, c-format
 msgid "4-byte"
 msgstr "4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ"
 
-#: elf32-v850.c:2599
+#: elf32-v850.c:2602
 #, c-format
 msgid "8-byte"
 msgstr "8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ"
 
-#: elf32-v850.c:2600 elf32-v850.c:2612
+#: elf32-v850.c:2603 elf32-v850.c:2615
 #, c-format
 msgid "not set"
 msgstr " [Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð¾]"
 
-#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636
-#: elf32-v850.c:2647 elf32-v850.c:2658
+#: elf32-v850.c:2604 elf32-v850.c:2616 elf32-v850.c:2628 elf32-v850.c:2639
+#: elf32-v850.c:2650 elf32-v850.c:2661
 #, c-format
 msgid "unknown: %x"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾: %x"
 
-#: elf32-v850.c:2607
+#: elf32-v850.c:2610
 #, c-format
 msgid " size of doubles: "
 msgstr " Ñ€Ð°Ð·Ð¼ÐµÑ€ double: "
 
-#: elf32-v850.c:2610
+#: elf32-v850.c:2613
 #, c-format
 msgid "4-bytes"
 msgstr "4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ðµ"
 
-#: elf32-v850.c:2611
+#: elf32-v850.c:2614
 #, c-format
 msgid "8-bytes"
 msgstr "8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ðµ"
 
-#: elf32-v850.c:2619
+#: elf32-v850.c:2622
 #, c-format
 msgid " FPU support required: "
 msgstr " Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð°Ñ� Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° FPU: "
 
-#: elf32-v850.c:2622
+#: elf32-v850.c:2625
 #, c-format
 msgid "FPU-2.0"
 msgstr "FPU-2.0"
 
-#: elf32-v850.c:2623
+#: elf32-v850.c:2626
 #, c-format
 msgid "FPU-3.0"
 msgstr "FPU-3.0"
 
-#: elf32-v850.c:2624
+#: elf32-v850.c:2627
 #, c-format
 msgid "none"
 msgstr "Ð½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ�"
 
-#: elf32-v850.c:2631
+#: elf32-v850.c:2634
 #, c-format
 msgid "SIMD use: "
 msgstr "Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ SIMD: "
 
-#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656
+#: elf32-v850.c:2637 elf32-v850.c:2648 elf32-v850.c:2659
 #, c-format
 msgid "yes"
 msgstr "Ð´Ð°"
 
-#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657
+#: elf32-v850.c:2638 elf32-v850.c:2649 elf32-v850.c:2660
 #, c-format
 msgid "no"
 msgstr "Ð½ÐµÑ‚"
 
-#: elf32-v850.c:2642
+#: elf32-v850.c:2645
 #, c-format
 msgid "CACHE use: "
 msgstr "Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ CACHE: "
 
-#: elf32-v850.c:2653
+#: elf32-v850.c:2656
 #, c-format
 msgid "MMU use: "
 msgstr "Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ MMU: "
 
-#: elf32-v850.c:2820 elf32-v850.c:2876
+#: elf32-v850.c:2823 elf32-v850.c:2879
 #, c-format
 msgid "%pB: architecture mismatch with previous modules"
 msgstr "%pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¹ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
 #. xgettext:c-format.
-#: elf32-v850.c:2894
+#: elf32-v850.c:2897
 #, c-format
 msgid "private flags = %lx: "
 msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx: "
 
-#: elf32-v850.c:2899
+#: elf32-v850.c:2902
 #, c-format
 msgid "unknown v850 architecture"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850"
 
-#: elf32-v850.c:2901
+#: elf32-v850.c:2904
 #, c-format
 msgid "v850 E3 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850 E3"
 
-#: elf32-v850.c:2903 elf32-v850.c:2910
+#: elf32-v850.c:2906 elf32-v850.c:2913
 #, c-format
 msgid "v850 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850"
 
-#: elf32-v850.c:2911
+#: elf32-v850.c:2914
 #, c-format
 msgid "v850e architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e"
 
-#: elf32-v850.c:2912
+#: elf32-v850.c:2915
 #, c-format
 msgid "v850e1 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e1"
 
-#: elf32-v850.c:2913
+#: elf32-v850.c:2916
 #, c-format
 msgid "v850e2 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2"
 
-#: elf32-v850.c:2914
+#: elf32-v850.c:2917
 #, c-format
 msgid "v850e2v3 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2v3"
 
-#: elf32-v850.c:2915
+#: elf32-v850.c:2918
 #, c-format
 msgid "v850e3v5 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e3v5"
 
-#: elf32-v850.c:3609 elf32-v850.c:3848
+#: elf32-v850.c:3592 elf32-v850.c:3831
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸"
 
-#: elf32-v850.c:3619 elf32-v850.c:3858
+#: elf32-v850.c:3602 elf32-v850.c:3841
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½ÑƒÑŽ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ %#x"
 
-#: elf32-v850.c:3665 elf32-v850.c:3893
+#: elf32-v850.c:3648 elf32-v850.c:3876
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-v850.c:3705
+#: elf32-v850.c:3688
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>"
 
-#: elf32-vax.c:540
+#: elf32-vax.c:539
 #, c-format
 msgid " [nonpic]"
 msgstr " [Ð½Ðµ-pic]"
 
-#: elf32-vax.c:543
+#: elf32-vax.c:542
 #, c-format
 msgid " [d-float]"
 msgstr " [d-float]"
 
-#: elf32-vax.c:546
+#: elf32-vax.c:545
 #, c-format
 msgid " [g-float]"
 msgstr " [g-float]"
 
-#: elf32-vax.c:632
+#: elf32-vax.c:631
 #, c-format
 msgid "%pB: warning: GOT addend of %<PRId64> to `%s' does not match previous GOT addend of %<PRId64>"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ GOT Ð¸Ð· %<PRId64> Ðº Â«%sÂ» Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ GOT Ð¸Ð· %<PRId64>"
 
-#: elf32-vax.c:1446
+#: elf32-vax.c:1388
 #, c-format
 msgid "%pB: warning: PLT addend of %<PRId64> to `%s' from %pA section ignored"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ PLT Ð¸Ð· %<PRId64> Ðº Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�"
 
-#: elf32-vax.c:1572
+#: elf32-vax.c:1514
 #, c-format
 msgid "%pB: warning: %s relocation against symbol `%s' from %pA section"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA"
 
-#: elf32-vax.c:1579
+#: elf32-vax.c:1521
 #, c-format
 msgid "%pB: warning: %s relocation to %#<PRIx64> from %pA section"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ðº %<PRIx64> Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA"
 
-#: elf32-visium.c:821
+#: elf32-visium.c:824
 #, c-format
 msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ� %s -mtune=%s Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÑ‚Ñ�Ñ� Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� %s -mtune=%s"
@@ -3799,238 +4122,263 @@ msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€=XGATE]"
 msgid "error reading cpu type from elf private data"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Ñ‚Ð¸Ð¿Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð° Ð¸Ð· Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… elf"
 
-#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353
-#: elf64-ia64.c:2353
+#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2077 elfnn-ia64.c:2346
 msgid "non-zero addend in @fptr reloc"
 msgstr "Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @fptr"
 
-#: elf32-xtensa.c:937
+#: elf32-xtensa.c:998
 #, c-format
 msgid "%pB(%pA): invalid property table"
 msgstr "%pB(%pA): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²"
 
-#: elf32-xtensa.c:2675
+#: elf32-xtensa.c:2733
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
 msgstr "%pB(%pA+%<PRIx64>): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ€Ð°Ð·Ð¼ÐµÑ€=%<PRIx64>)"
 
-#: elf32-xtensa.c:2758 elf32-xtensa.c:2881
+#: elf32-xtensa.c:2816 elf32-xtensa.c:2939
 msgid "dynamic relocation in read-only section"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�"
 
-#: elf32-xtensa.c:2858
+#: elf32-xtensa.c:2916
 msgid "TLS relocation invalid without dynamic sections"
 msgstr "TLS-Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²"
 
-#: elf32-xtensa.c:3070
+#: elf32-xtensa.c:3129
 msgid "internal inconsistency in size of .got.loc section"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .got.loc"
 
-#: elf32-xtensa.c:3377
+#: elf32-xtensa.c:3435
 #, c-format
 msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
 msgstr "%pB: Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿; Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ 0x%x; Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ 0x%x"
 
-#: elf32-xtensa.c:4608 elf32-xtensa.c:4616
+#: elf32-xtensa.c:4734 elf32-xtensa.c:4742
 msgid "attempt to convert L32R/CALLX to CALL failed"
 msgstr "Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ� L32R/CALLX Ð² CALL Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð°Ñ�ÑŒ Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð¾"
 
-#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899
+#: elf32-xtensa.c:6574 elf32-xtensa.c:6653 elf32-xtensa.c:8079
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸"
 
-#: elf32-xtensa.c:7638
+#: elf32-xtensa.c:7820
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� XTENSA_ASM_SIMPLIFY; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸"
 
-#: elf32-xtensa.c:9493
+#: elf32-xtensa.c:9678
 msgid "invalid relocation address"
 msgstr "Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9769
 msgid "overflow after relaxation"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ñ�Ð»Ðµ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ�"
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10915
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s"
 
-#: elf64-alpha.c:472
+#: elf32-z80.c:473
+#, c-format
+msgid "%pB: unsupported bfd mach %#lx"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ðµ bfd %#lx"
+
+#: elf32-z80.c:518
+#, c-format
+msgid "%pB: unsupported mach %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� Ð¼Ð°ÑˆÐ¸Ð½Ð° %#x"
+
+#: elf32-z80.c:546
+#, c-format
+msgid "%pB: unsupported arch %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %#x"
+
+#: elf64-alpha.c:474
 msgid "GPDISP relocation did not find ldah and lda instructions"
 msgstr "Ð�Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ‹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ldah Ð¸ lda Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� GPDISP"
 
-#: elf64-alpha.c:2463
+#: elf64-alpha.c:1985 elf64-alpha.c:2680 elflink.c:15427
+#: elfnn-loongarch.c:1573
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Â«%pTÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»\n"
+
+#: elf64-alpha.c:2437
 #, c-format
 msgid "%pB: .got subsegment exceeds 64K (size %d)"
 msgstr "%pB: Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð´ÐµÐ» .got Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ 64K (Ñ€Ð°Ð·Ð¼ÐµÑ€ %d)"
 
-#: elf64-alpha.c:3018 elf64-alpha.c:3214
+#: elf64-alpha.c:2975 elf64-alpha.c:3170
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
 msgstr "%pB: %pA+%#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹"
 
-#: elf64-alpha.c:4415 elf64-alpha.c:4428
+#: elf64-alpha.c:4370 elf64-alpha.c:4383
 #, c-format
 msgid "%pB: gp-relative relocation against dynamic symbol %s"
 msgstr "%pB: gp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf64-alpha.c:4484
+#: elf64-alpha.c:4439
 #, c-format
 msgid "%pB: change in gp: BRSGP %s"
 msgstr "%pB: Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ð² gp: BRSGP %s"
 
-#: elf64-alpha.c:4509 mach-o.c:615
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:499
+#: elf64-alpha.c:4464 mach-o.c:625 elfnn-riscv.c:725 elfnn-riscv.c:924
+#: elfnn-riscv.c:966
 msgid "<unknown>"
 msgstr "<Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾>"
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4470
 #, c-format
 msgid "%pB: !samegp reloc against symbol without .prologue: %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ !samegp Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð±ÐµÐ· .prologue: %s"
 
-#: elf64-alpha.c:4573
+#: elf64-alpha.c:4528
 #, c-format
 msgid "%pB: unhandled dynamic relocation against %s"
 msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� %s"
 
-#: elf64-alpha.c:4608
+#: elf64-alpha.c:4563
 #, c-format
 msgid "%pB: pc-relative relocation against undefined weak symbol %s"
 msgstr "%pB: pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf64-alpha.c:4674
+#: elf64-alpha.c:4629
 #, c-format
 msgid "%pB: dtp-relative relocation against dynamic symbol %s"
 msgstr "%pB: dtp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf64-alpha.c:4699
+#: elf64-alpha.c:4654
 #, c-format
 msgid "%pB: tp-relative relocation against dynamic symbol %s"
 msgstr "%pB: tp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
+#. Only if it's not an unresolved symbol.
+#: elf64-bpf.c:340
+msgid "internal error: relocation not supported"
+msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
+
 #: elf64-gen.c:71
 #, c-format
 msgid "%pB: Relocations in generic ELF (EM: %d)"
 msgstr "%pB: ÐŸÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ð¾Ð¼ ELF (EM: %d)"
 
-#: elf64-hppa.c:2081
+#: elf64-hppa.c:2032
 #, c-format
 msgid "stub entry for %s cannot load .plt, dp offset = %<PRId64>"
 msgstr "Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð´Ð»Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ .plt, Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ dp = %#<PRId64>"
 
-#: elf64-hppa.c:3286
+#: elf64-hppa.c:3236
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot reach %s"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´Ð¾Ð±Ñ€Ð°Ñ‚ÑŒÑ�Ñ� Ð´Ð¾ %s"
 
-#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636
+#: elf64-ia64-vms.c:600 elfnn-ia64.c:641
 #, c-format
 msgid "%pB: can't relax br at %#<PRIx64> in section `%pA'; please use brl or indirect branch"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ�Ð»Ð°Ð±Ð¸Ñ‚ÑŒ br Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»; Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐ¹Ñ‚Ðµ brl Ð¸Ð»Ð¸ ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ"
 
-#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301
+#: elf64-ia64-vms.c:2032 elfnn-ia64.c:2294
 msgid "@pltoff reloc against local symbol"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @pltoff Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
 
-#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712
+#: elf64-ia64-vms.c:3278 elfnn-ia64.c:3671
 #, c-format
 msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ… (%#<PRIx64> >= 0x400000)"
 
-#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722
+#: elf64-ia64-vms.c:3288 elfnn-ia64.c:3681
 #, c-format
 msgid "%pB: __gp does not cover short data segment"
 msgstr "%pB: __gp Ð½Ðµ Ð¿Ð¾ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ñ…"
 
-#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996
+#: elf64-ia64-vms.c:3558 elfnn-ia64.c:3954
 #, c-format
 msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
 msgstr "%pB: Ð½Ðµ-pic ÐºÐ¾Ð´ Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ imm Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064
+#: elf64-ia64-vms.c:3622 elfnn-ia64.c:4022
 #, c-format
 msgid "%pB: @gprel relocation against dynamic symbol %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @gprel Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127
+#: elf64-ia64-vms.c:3681 elfnn-ia64.c:4085
 #, c-format
 msgid "%pB: linking non-pic code in a position independent executable"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð½Ðµ-pic ÐºÐ¾Ð´Ð° Ð² Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð¾-Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹"
 
-#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265
+#: elf64-ia64-vms.c:3783 elfnn-ia64.c:4223
 #, c-format
 msgid "%pB: @internal branch to dynamic symbol %s"
 msgstr "%pB: Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ @internal Ðº Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268
+#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4226
 #, c-format
 msgid "%pB: speculation fixup to dynamic symbol %s"
 msgstr "%pB: Ð´Ð¾Ð³Ð°Ð´ÐºÐ° Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271
+#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4229
 #, c-format
 msgid "%pB: @pcrel relocation against dynamic symbol %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @pcrel Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468
+#: elf64-ia64-vms.c:3913 elfnn-ia64.c:4426
 msgid "unsupported reloc"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506
+#: elf64-ia64-vms.c:3950 elfnn-ia64.c:4464
 #, c-format
 msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
 msgstr "%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ TLS-Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð´Ð»Ñ� Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»."
 
-#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523
+#: elf64-ia64-vms.c:3967 elfnn-ia64.c:4481
 #, c-format
 msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
 msgstr "%pB: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ�Ð»Ð°Ð±Ð¸Ñ‚ÑŒ br (%s) Ð´Ð¾ Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %#<PRIx64> (> 0x1000000)."
 
-#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781
+#: elf64-ia64-vms.c:4263 elfnn-ia64.c:4742
 #, c-format
 msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° trap-on-NULL-dereference Ñ� Ð½Ðµ-trapping Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸"
 
-#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790
+#: elf64-ia64-vms.c:4272 elfnn-ia64.c:4751
 #, c-format
 msgid "%pB: linking big-endian files with little-endian files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚ Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚"
 
-#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799
+#: elf64-ia64-vms.c:4281 elfnn-ia64.c:4760
 #, c-format
 msgid "%pB: linking 64-bit files with 32-bit files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼Ð¸ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸"
 
-#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808
+#: elf64-ia64-vms.c:4290 elfnn-ia64.c:4769
 #, c-format
 msgid "%pB: linking constant-gp files with non-constant-gp files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° constant-gp Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-constant-gp Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸"
 
-#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818
+#: elf64-ia64-vms.c:4300 elfnn-ia64.c:4779
 #, c-format
 msgid "%pB: linking auto-pic files with non-auto-pic files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° auto-pic Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-auto-pic Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸"
 
-#: elf64-ia64-vms.c:5153 elflink.c:4894
+#: elf64-ia64-vms.c:5147 elflink.c:5310
 #, c-format
 msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ %u Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB Ð±Ð¾Ð»ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ (%u) ÐµÐ³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA"
 
-#: elf64-ia64-vms.c:5160 elflink.c:4901
+#: elf64-ia64-vms.c:5154
 #, c-format
 msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ %u Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB Ð¼ÐµÐ½ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ %u Ð² %pB"
 
-#: elf64-ia64-vms.c:5176 elflink.c:4918
+#: elf64-ia64-vms.c:5170 elflink.c:5339
 #, c-format
 msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ñ�Ñ� Ñ� %<PRIu64> Ð² %pB Ð½Ð° %<PRIu64> Ð² %pB"
 
-#: elf64-mips.c:4098
+#: elf64-mips.c:4102
 #, c-format
 msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
 msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %<PRIu64> Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %ld"
@@ -4077,1015 +4425,1444 @@ msgstr "%pB: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ðµ Ð¿Ðµ
 msgid "%pB: directive LOCAL valid only with a register or absolute value"
 msgstr "%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° LOCAL Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð¼ Ð¸Ð»Ð¸ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ñ‹Ð¼ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼"
 
-#: elf64-mmix.c:1744
+#: elf64-mmix.c:1742
 #, c-format
 msgid "%pB: LOCAL directive: register $%<PRId64> is not a local register; first global register is $%<PRId64>"
 msgstr "%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° LOCAL: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€ $%<PRId64> Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð¼; Ð¿ÐµÑ€Ð²Ñ‹Ð¹ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€: $%<PRId64>"
 
-#: elf64-mmix.c:2173
+#: elf64-mmix.c:2157
 #, c-format
 msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¼Ð½Ð¾Ð¶ÐµÑ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»; Ð½Ð°Ñ‡Ð°Ð»Ð¾ %s ÑƒÑ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð² Ñ€Ð°Ð½ÐµÐµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ"
 
-#: elf64-mmix.c:2228
+#: elf64-mmix.c:2212
 msgid "register section has contents\n"
 msgstr "Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ\n"
 
-#: elf64-mmix.c:2418
+#: elf64-mmix.c:2402
 #, c-format
 msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐµ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ðµ: Ð¾Ñ�Ñ‚Ð°Ñ‘Ñ‚Ñ�Ñ� %lu != Ð¼Ð°ÐºÑ� %lu; Ñ�Ð¾Ð¾Ð±Ñ‰Ð¸Ñ‚Ðµ Ð¾Ð± Ñ�Ñ‚Ð¾Ð¼ Ð´ÐµÑ„ÐµÐºÑ‚Ðµ"
 
-#: elf64-ppc.c:3827
+#: elf64-ppc.c:1361
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÑƒÐ¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ %s, Ð° Ð½Ðµ %s"
+
+#: elf64-ppc.c:4307
 #, c-format
 msgid "symbol '%s' has invalid st_other for ABI version 1"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ st_other Ð´Ð»Ñ� ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ 1"
 
-#: elf64-ppc.c:4002
+#: elf64-ppc.c:4490
 #, c-format
 msgid "%pB .opd not allowed in ABI version %d"
 msgstr "%pB .opd Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾ Ð² ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %d"
 
-#: elf64-ppc.c:4523
+#: elf64-ppc.c:5085
 #, c-format
 msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¾Ð±Ñ‰Ð¸Ñ… Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°Ñ… Ð¸ PIE\n"
 
-#: elf64-ppc.c:4919
+#: elf64-ppc.c:5255
+msgid "%H: %s reloc unsupported here\n"
+msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð·Ð´ÐµÑ�ÑŒ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
+
+#: elf64-ppc.c:5482
 #, c-format
 msgid "%pB uses unknown e_flags 0x%lx"
 msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ e_flags 0x%lx"
 
-#: elf64-ppc.c:4927
+#: elf64-ppc.c:5490
 #, c-format
 msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
 msgstr "%pB: ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %ld Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð¾ Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð¾Ð¼ Ñ� ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %ld"
 
-#: elf64-ppc.c:4954
+#: elf64-ppc.c:5517
 #, c-format
 msgid " [abiv%ld]"
 msgstr " [abiv%ld]"
 
-#: elf64-ppc.c:6145
+#: elf64-ppc.c:6821
 msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
 msgstr "%P: ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Â«%pTÂ» Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ Ð»ÐµÐ½Ð¸Ð²Ð¾Ð¹ plt-ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸; Ð½Ðµ Ð·Ð°Ð´Ð°Ð²Ð°Ð¹Ñ‚Ðµ LD_BIND_NOW=1 Ð¸Ð»Ð¸ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚Ðµ gcc\n"
 
-#: elf64-ppc.c:6417
+#: elf64-ppc.c:7088
 #, c-format
 msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
 msgstr "%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ R_PPC64_TOCSAVE"
 
-#: elf64-ppc.c:6644
+#: elf64-ppc.c:7343
 #, c-format
 msgid "dynreloc miscount for %pB, section %pA"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð¸Ð¸ dynreloc %pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA"
 
-#: elf64-ppc.c:6733
+#: elf64-ppc.c:7434
 #, c-format
 msgid "%pB: .opd is not a regular array of opd entries"
 msgstr "%pB: .opd Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² opd"
 
-#: elf64-ppc.c:6743
+#: elf64-ppc.c:7444
 #, c-format
 msgid "%pB: unexpected reloc type %u in .opd section"
 msgstr "%pB: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %u Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .opd"
 
-#: elf64-ppc.c:6765
+#: elf64-ppc.c:7466
 #, c-format
 msgid "%pB: undefined sym `%s' in .opd section"
 msgstr "%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .opd"
 
-#: elf64-ppc.c:7249
+#. The issue is that __glink_PLTresolve saves r2, which is done
+#. because glibc ld.so _dl_runtime_resolve restores r2 to support
+#. a glibc plt call optimisation where global entry code is
+#. skipped on calls that resolve to the same binary.  The
+#. __glink_PLTresolve save of r2 is incompatible with code
+#. making tail calls, because the tail call might go via the
+#. resolver and thus overwrite the proper saved r2.
+#: elf64-ppc.c:7967
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: --plt-localentry Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ ÐºÐ¾Ð´Ð¾Ð¼ power10"
+
+#: elf64-ppc.c:7975
 msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: --plt-localentry Ð¾Ñ�Ð¾Ð±ÐµÐ½Ð½Ð¾ Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð±ÐµÐ· Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ Ð² ld.so Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð½Ð°Ñ€ÑƒÑˆÐµÐ½Ð¸Ð¹ ABI"
 
-#: elf64-ppc.c:7499
+#: elf64-ppc.c:8291
 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
 msgstr "%H __tls_get_addr Ð±ÐµÐ· Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°, Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� TLS Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°\n"
 
-#: elf64-ppc.c:7876 elf64-ppc.c:8513
+#: elf64-ppc.c:8726 elf64-ppc.c:9442
 #, c-format
 msgid "%s defined on removed toc entry"
 msgstr "%s Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½ Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ toc"
 
-#: elf64-ppc.c:8241
-#, c-format
-msgid "%H: toc optimization is not supported for %s instruction\n"
-msgstr "%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� toc Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s\n"
-
-#: elf64-ppc.c:8470
+#: elf64-ppc.c:9399
 #, c-format
 msgid "%H: %s references optimized away TOC entry\n"
 msgstr "%H: %s Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ TOC\n"
 
-#: elf64-ppc.c:9301
+#: elf64-ppc.c:9620
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� got/toc Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s\n"
+
+#: elf64-ppc.c:10515
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %s"
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11650
 msgid "%P: cannot find opd entry toc for `%pT'\n"
 msgstr "%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ opd Ñƒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° toc Ð´Ð»Ñ� Â«%pTÂ»\n"
 
-#: elf64-ppc.c:10303
+#: elf64-ppc.c:11800
 #, c-format
 msgid "long branch stub `%s' offset overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»"
 
-#: elf64-ppc.c:10330
+#: elf64-ppc.c:11827
 #, c-format
 msgid "can't find branch stub `%s'"
 msgstr "Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»"
 
-#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791
+#: elf64-ppc.c:11891 elf64-ppc.c:12143 elf64-ppc.c:14709
 #, c-format
 msgid "%P: linkage table error against `%pT'\n"
 msgstr "%P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð´Ð»Ñ� Â«%pTÂ»\n"
 
-#: elf64-ppc.c:10820
+#: elf64-ppc.c:12342
 #, c-format
 msgid "can't build branch stub `%s'"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð±Ñ€Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÑƒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»"
 
-#: elf64-ppc.c:11779
+#: elf64-ppc.c:13369
 #, c-format
 msgid "%pB section %pA exceeds stub group size"
 msgstr "%pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸"
 
-#: elf64-ppc.c:13189 elf64-ppc.c:13208
+#: elf64-ppc.c:14891
+msgid "__tls_get_addr call offset overflow"
+msgstr "__tls_get_addr Ð²Ñ‹Ð·Ð²Ð°Ð»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
+
+#: elf64-ppc.c:15231 elf64-ppc.c:15250
 #, c-format
 msgid "%s offset too large for .eh_frame sdata4 encoding"
 msgstr "Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐµ Ð´Ð»Ñ� ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� sdata4 Ð² .eh_frame"
 
-#: elf64-ppc.c:13244
+#: elf64-ppc.c:15336
 #, c-format
-msgid "linker stubs in %u group\n"
-msgid_plural "linker stubs in %u groups\n"
-msgstr[0] "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ðµ\n"
-msgstr[1] "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…\n"
-msgstr[2] "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…\n"
+msgid "linker stubs in %u group"
+msgid_plural "linker stubs in %u groups"
+msgstr[0] "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ðµ"
+msgstr[1] "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…"
+msgstr[2] "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…"
 
-#: elf64-ppc.c:13248
+#: elf64-ppc.c:15343
 #, c-format
 msgid ""
+"%s, iter %u\n"
 "  branch         %lu\n"
-"  branch toc adj %lu\n"
-"  branch notoc   %lu\n"
-"  branch both    %lu\n"
 "  long branch    %lu\n"
-"  long toc adj   %lu\n"
-"  long notoc     %lu\n"
-"  long both      %lu\n"
 "  plt call       %lu\n"
-"  plt call save  %lu\n"
-"  plt call notoc %lu\n"
-"  plt call both  %lu\n"
 "  global entry   %lu"
 msgstr ""
-"  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                            %lu\n"
-"  Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� toc            %lu\n"
-"  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ðµ toc                     %lu\n"
-"  Ð¾Ð±Ð° Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�                        %lu\n"
-"  Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                    %lu\n"
-"  Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� toc   %lu\n"
-"  Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ðµ toc             %lu\n"
-"  Ð¾Ð±Ð° Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�                %lu\n"
-"  plt-Ð²Ñ‹Ð·Ð¾Ð²                            %lu\n"
-"  Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ‘Ð½Ð½Ñ‹Ð¹ plt-Ð²Ñ‹Ð·Ð¾Ð²                %lu\n"
-"  plt-Ð²Ñ‹Ð·Ð¾Ð² Ð½Ðµ toc                     %lu\n"
-"  Ð¾Ð±Ð° plt-Ð²Ñ‹Ð·Ð¾Ð²Ð°                       %lu\n"
-"  Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚                   %lu"
+"%s, Ð¸Ñ‚ÐµÑ€Ð°Ñ†Ð¸Ñ� %u\n"
+"  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ          %lu\n"
+"  Ð´Ð°Ð»ÑŒÐ½ÐµÐµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ  %lu\n"
+"  Ð²Ñ‹Ð·Ð¾Ð² plt          %lu\n"
+"  Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ %lu"
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:15725
 #, c-format
 msgid "%H: %s used with TLS symbol `%pT'\n"
 msgstr "%H: %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%pTÂ»\n"
 
-#: elf64-ppc.c:13585
+#: elf64-ppc.c:15727
 #, c-format
 msgid "%H: %s used with non-TLS symbol `%pT'\n"
 msgstr "%H: %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� Ð½Ðµ TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%pTÂ»\n"
 
-#: elf64-ppc.c:14245
+#: elf64-ppc.c:16511
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
 msgstr "%H: Ð²Ñ‹Ð·Ð¾Ð² Â«%pTÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½Ðµ nop, Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ð¾Ñ�Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ toc; (Ð²Ñ‹Ð·Ð¾Ð² Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ plt)\n"
 
-#: elf64-ppc.c:14251
+#: elf64-ppc.c:16517
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
 msgstr "%H: Ð²Ñ‹Ð·Ð¾Ð² Â«%pTÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½Ðµ nop, Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ð¾Ñ�Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ toc; (Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ�/Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ� toc)\n"
 
-#: elf64-ppc.c:14985
+#: elf64-ppc.c:17174
+#, c-format
+msgid "%H: %s against %pT is not supported\n"
+msgstr "%H: %s Ð´Ð»Ñ� %pT Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
+
+#: elf64-ppc.c:17450
 #, c-format
 msgid "%H: %s for indirect function `%pT' unsupported\n"
 msgstr "%H: %s Ð´Ð»Ñ� Ð½ÐµÑ�Ð²Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%pTÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
 
-#: elf64-ppc.c:15097
+#: elf64-ppc.c:17542
+#, c-format
+msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
+msgstr "%X%P: %pB: %s Ñ� %pT Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² glibc ÐºÐ°Ðº Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ\n"
+
+#: elf64-ppc.c:17597
 #, c-format
 msgid "%P: %pB: %s is not supported for `%pT'\n"
 msgstr "%P: %pB: %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Â«%pTÂ»\n"
 
-#: elf64-ppc.c:15326
+#: elf64-ppc.c:17866
 #, c-format
 msgid "%H: error: %s not a multiple of %u\n"
 msgstr "%H: Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾ %u\n"
 
-#: elf64-ppc.c:15349
+#: elf64-ppc.c:17889
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr "%H: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%pTÂ»\n"
 
-#: elf64-ppc.c:15446
+#: elf64-ppc.c:18034
 #, c-format
 msgid "%H: %s against `%pT': error %d\n"
 msgstr "%H: %s Ð´Ð»Ñ� Â«%pTÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ° %d\n"
 
-#: elf64-s390.c:2576
+#: elf64-s390.c:2457
 #, c-format
 msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)"
 msgstr "%pB: Ð½Ðµ PLT Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%sÂ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ð² Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ, Ðº ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼Ñƒ Ð¾Ð±Ñ€Ð°Ñ‰Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° (Ð¿ÐµÑ€ÐµÑ�Ð¾Ð±ÐµÑ€Ð¸Ñ‚Ðµ Ñ„Ð°Ð¹Ð» Ñ� -fPIC ?)"
 
-#: elf64-sparc.c:109 elfcode.h:1471
+#: elf64-s390.c:3066
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): misaligned symbol `%s' (%#<PRIx64>) for relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» (%#<PRIx64>) Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s"
+
+#: elf64-sparc.c:134 elfcode.h:1582
 #, c-format
 msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
 msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %d Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %ld"
 
-#: elf64-sparc.c:467
+#: elf64-sparc.c:493
 #, c-format
 msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
 msgstr "%pB: Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ñ‹ %%g[2367] Ð¼Ð¾Ð³ÑƒÑ‚ Ð¾Ð±ÑŠÑ�Ð²Ð»Ñ�Ñ‚ÑŒÑ�Ñ� Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ STT_REGISTER"
 
-#: elf64-sparc.c:488
+#: elf64-sparc.c:514
 #, c-format
 msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
 msgstr "Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° %%g%d: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %pB"
 
-#: elf64-sparc.c:512
+#: elf64-sparc.c:538
 #, c-format
 msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹: REGISTER Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %pB"
 
-#: elf64-sparc.c:559
+#: elf64-sparc.c:585
 #, c-format
 msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ REGISTER Ð² %pB"
 
-#: elf64-sparc.c:691
+#: elf64-sparc.c:717
 #, c-format
 msgid "%pB: linking UltraSPARC specific with HAL specific code"
 msgstr "%pB: UltraSPARC-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ� HAL-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ñ‹Ð¼ ÐºÐ¾Ð´Ð¾Ð¼"
 
-#: elf64-x86-64.c:1412
+#: elf64-x86-64.c:1493
 msgid "hidden symbol "
 msgstr "Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1496
 msgid "internal symbol "
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1499 elf64-x86-64.c:1503
 msgid "protected symbol "
 msgstr "Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1505
 msgid "symbol "
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1425 elf64-x86-64.c:1435
-msgid "; recompile with -fPIC"
-msgstr "; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC"
-
-#: elf64-x86-64.c:1430
+#: elf64-x86-64.c:1511
 msgid "undefined "
 msgstr "Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ "
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1521
 msgid "a shared object"
 msgstr "Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚"
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1523
+msgid "; recompile with -fPIC"
+msgstr "; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC"
+
+#: elf64-x86-64.c:1528
 msgid "a PIE object"
 msgstr "Ð¾Ð±ÑŠÐµÐºÑ‚ PIE"
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1530
 msgid "a PDE object"
 msgstr "Ð¾Ð±ÑŠÐµÐºÑ‚ PDE"
 
-#: elf64-x86-64.c:1446
+#: elf64-x86-64.c:1532
+msgid "; recompile with -fPIE"
+msgstr "; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIE"
+
+#: elf64-x86-64.c:1536
 #, c-format
 msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� %s%sÂ«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ %s%s"
 
-#: elf64-x86-64.c:1931
+#: elf64-x86-64.c:2041
 #, c-format
 msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ x32"
 
-#: elf64-x86-64.c:2073
+#: elf64-x86-64.c:2185
 #, c-format
 msgid "%pB: '%s' accessed both as normal and thread local symbol"
 msgstr "%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð´Ð»Ñ� Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf64-x86-64.c:2696
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5302
+#: elf64-x86-64.c:2844 elfnn-aarch64.c:5723 elfnn-riscv.c:2298
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ Ñ� STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ: %<PRId64>"
 
-#: elf64-x86-64.c:2934
+#: elf64-x86-64.c:3104
 #, c-format
 msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_X86_64_GOTOFF64 Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
 
-#: elf64-x86-64.c:2948
+#: elf64-x86-64.c:3118
 #, c-format
 msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_X86_64_GOTOFF64 Ð´Ð»Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
 
-#: elf64-x86-64.c:3208
+#: elf64-x86-64.c:3408
 #, c-format
 msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
 msgstr "%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ %s%#x Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»."
 
-#: elf64-x86-64.c:3885
-msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"
-msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GOTPCREL; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ñ� --no-relax\n"
+#: elf64-x86-64.c:3556 elflink.c:13742
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ð²Ð²Ð¾Ð´: %pB\n"
+
+#: elf64-x86-64.c:4250
+#, c-format
+msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
+msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GOTPCREL Ð² Â«%sÂ»; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ñ� --no-relax\n"
 
-#: elf64-x86-64.c:4043
+#: elf64-x86-64.c:4411
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
 msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ PC Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ PLT Ð´Ð»Ñ� Â«%sÂ»\n"
 
-#: elf64-x86-64.c:4106
+#: elf64-x86-64.c:4479
 #, c-format
 msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
 msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð¸ Ð¿ÐµÑ€ÐµÑ�Ñ‚Ð°Ð½Ð¾Ð²ÐºÐ¸ Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ PLT Ð´Ð»Ñ� Â«%sÂ»\n"
 
-#: elf64-x86-64.c:4159
+#: elf64-x86-64.c:4532
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
 msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ PC Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ GOT PLT Ð´Ð»Ñ� Â«%sÂ»\n"
 
-#: elfcode.h:323
-msgid "warning: %pB has a corrupt section with a size (%"
-msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ %pB Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ (%"
+#: elfcode.h:342
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» %pB Ñ€Ð°Ñ�ÑˆÐ¸Ñ€Ñ�ÐµÑ‚Ñ�Ñ� Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ„Ð°Ð¹Ð»Ð°"
+
+#: elfcode.h:790
+#, c-format
+msgid "warning: %pB has a corrupt string table index"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ %pB Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº"
+
+#: elfcode.h:837
+#, c-format
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ %pB Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½"
 
-#: elfcode.h:768
+#: elfcode.h:1039
 #, c-format
-msgid "warning: %pB has a corrupt string table index - ignoring"
-msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ %pB Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�"
+msgid "%pB: %pA+%<PRIx64>: relocation addend %<PRIx64> too large"
+msgstr "%pB: %pA+%<PRIx64>: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ðº Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %<PRIx64> Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾"
 
-#: elfcode.h:1212
+#: elfcode.h:1302
 #, c-format
 msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
 msgstr "%pB: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð²ÐµÑ€Ñ�Ð¸Ð¸ (%<PRId64>) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ�Ð¾ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%ld)"
 
-#: elfcore.h:300
+#: elfcore.h:280
 #, c-format
-msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
-msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB ÑƒÑ�ÐµÑ‡Ñ‘Ð½: Ð¾Ð¶Ð¸Ð´Ð°Ð»Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð° core >= %<PRIu64>, Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾: %<PRIu64>"
+msgid "warning: %pB has a segment extending past end of file"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ %pB Ñ€Ð°Ñ�ÑˆÐ¸Ñ€Ñ�ÐµÑ‚Ñ�Ñ� Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ„Ð°Ð¹Ð»Ð°"
 
-#: elflink.c:1367
+#: elflink.c:1410
 #, c-format
 msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
 msgstr "%s: TLS-Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA"
 
-#: elflink.c:1373
+#: elflink.c:1416
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
 msgstr "%s: TLS-Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð² %pB Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ñ�Ñ�Ñ‹Ð»ÐºÐ¾Ð¹ Ð² %pB"
 
-#: elflink.c:1379
+#: elflink.c:1422
 #, c-format
 msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
 msgstr "%s: TLS-Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ñ�Ñ�Ñ‹Ð»ÐºÐ¾Ð¹ Ð² %pB"
 
-#: elflink.c:1385
+#: elflink.c:1428
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
 msgstr "%s: TLS-Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð² %pB Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ðµ-TLS Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA"
 
-#: elflink.c:2075
+#: elflink.c:2140
 #, c-format
 msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ€Ñ�Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elflink.c:2452
+#: elflink.c:2601
 #, c-format
 msgid "%pB: version node not found for symbol %s"
 msgstr "%pB: Ð²ÐµÑ€Ñ�Ð¸Ñ� ÑƒÐ·Ð»Ð° Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elflink.c:2541
+#: elflink.c:2692
 #, c-format
 msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%#<PRIx64> >= %#lx) Ð´Ð»Ñ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»"
 
-#: elflink.c:2553
+#: elflink.c:2704
 #, c-format
 msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
 msgstr "%pB: Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%#<PRIx64>) Ð´Ð»Ñ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ», Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº Ð² Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ Ð½ÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²"
 
-#: elflink.c:2744
+#: elflink.c:2915
 #, c-format
 msgid "%pB: relocation size mismatch in %pB section %pA"
 msgstr "%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA"
 
-#: elflink.c:3066
+#: elflink.c:3244
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ð¸ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
 
-#: elflink.c:3128
+#: elflink.c:3304
 msgid "%P: copy reloc against protected `%pT' is dangerous\n"
 msgstr "%P: ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¼ Â«%pTÂ» Ð¾Ð¿Ð°Ñ�Ð½Ð¾\n"
 
-#: elflink.c:3932
+#: elflink.c:4278
 #, c-format
 msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
 msgstr "Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ñ‹Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ ELF (%d) Ð² %pB, Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� %d"
 
-#: elflink.c:4598
+#: elflink.c:4761
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ %lx (Ð¼Ð°ÐºÑ� %lx)"
+
+#: elflink.c:4829
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr "%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñ� Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu (>= sh_info Ñ� %lu)"
+
+#: elflink.c:4977
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð²ÐµÑ€Ñ�Ð¸Ð¸"
+
+#: elflink.c:5015
 #, c-format
 msgid "%pB: %s: invalid version %u (max %d)"
 msgstr "%pB: %s: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %u (Ð¼Ð°ÐºÑ� %d)"
 
-#: elflink.c:4635
+#: elflink.c:5052
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr "%pB: %s: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d"
 
-#: elflink.c:5054
+#: elflink.c:5317
+#, c-format
+msgid "warning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pB"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ %u Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB Ð¼ÐµÐ½ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ %u, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ð¾Ð±Ñ‰Ð¸Ð¼ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ð² %pB"
+
+#: elflink.c:5324
+msgid "warning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised."
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÐŸÐ Ð˜ÐœÐ•Ð§Ð�Ð�Ð˜Ð•: Ð¿Ñ€Ð¸ Ñ€Ð°Ñ�Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ�Ñ… Ð² Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ð¸ Ð¼Ð¾Ð³ÑƒÑ‚ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°Ñ‚ÑŒ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹. Ð ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð¾Ð±Ñ€Ð°Ñ‚ÑŒÑ�Ñ� Ñ� Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¾Ð¹."
+
+#: elflink.c:5346
+msgid "warning: NOTE: size discrepancies can cause real problems.  Investigation is advised."
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÐŸÐ Ð˜ÐœÐ•Ð§Ð�Ð�Ð˜Ð•: Ð¿Ñ€Ð¸ Ñ€Ð°Ñ�Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ�Ñ… Ð² Ñ€Ð°Ð·Ð¼ÐµÑ€Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°Ñ‚ÑŒ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹. Ð ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð¾Ð±Ñ€Ð°Ñ‚ÑŒÑ�Ñ� Ñ� Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¾Ð¹."
+
+#: elflink.c:5488
 #, c-format
 msgid "%pB: undefined reference to symbol '%s'"
 msgstr "%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: elflink.c:6130
+#: elflink.c:6548
 #, c-format
 msgid "%pB: stack size specified and %s set"
 msgstr "%pB: ÑƒÐºÐ°Ð·Ð°Ð½ Ð¸ Ð·Ð°Ð´Ð°Ð½ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ° %s"
 
-#: elflink.c:6134
+#: elflink.c:6552
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr "%pB: %s Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ñ‹Ð¼"
 
-#: elflink.c:6331
+#: elflink.c:6764
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr "%s: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ�: %s"
 
-#: elflink.c:6902
+#: elflink.c:7153
+msgid "warning: enabling an executable stack because of -z execstack command line option"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ° Ð¸Ð·-Ð·Ð° Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ -z execstack"
+
+#: elflink.c:7210
+#, c-format
+msgid "warning: %s: requires executable stack (because the .note.GNU-stack section is executable)"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s: Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ Ñ�Ñ‚ÐµÐº (Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ€Ð°Ð·Ð´ÐµÐ» .note.GNU-stack Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹)"
+
+#: elflink.c:7215
+#, c-format
+msgid "warning: %s: missing .note.GNU-stack section implies executable stack"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²Ð¸Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .note.GNU-stack Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°ÐµÑ‚ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ Ñ�Ñ‚ÐµÐº"
+
+#: elflink.c:7218
+msgid "NOTE: This behaviour is deprecated and will be removed in a future version of the linker"
+msgstr "Ð—Ð�ÐœÐ•Ð§Ð�Ð�Ð˜Ð•: Ñ�Ñ‚Ð° Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ Ð¸ Ð±ÑƒÐ´ÐµÑ‚ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¾ Ð² Ð±ÑƒÐ´ÑƒÑ‰ÐµÐ¹ Ð²ÐµÑ€Ñ�Ð¸Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ°"
+
+#: elflink.c:7372
 #, c-format
 msgid "%pB: .preinit_array section is not allowed in DSO"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» .preinit_array Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ°ÐµÑ‚Ñ�Ñ� Ð² DSO"
 
-#: elflink.c:8359
+#: elflink.c:8963
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr "Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° %s Ð² Ñ�Ð»Ð¾Ð¶Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ: %s"
 
-#: elflink.c:8514
+#: elflink.c:9126 elflink.c:9134
+msgid "division by zero"
+msgstr "Ð´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð½Ð° Ð½Ð¾Ð»ÑŒ"
+
+#: elflink.c:9148
 #, c-format
 msgid "unknown operator '%c' in complex symbol"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ '%c' Ð² Ñ�Ð»Ð¾Ð¶Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ"
 
 #. PR 21524: Let the user know if a symbol was removed by garbage collection.
-#: elflink.c:8852
+#: elflink.c:9484
 #, c-format
 msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
 msgstr "%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð±Ñ‹Ð» ÑƒÐ´Ð°Ð»Ñ‘Ð½ Ñ�Ð±Ð¾Ñ€Ñ‰Ð¸ÐºÐ¾Ð¼ Ð¼ÑƒÑ�Ð¾Ñ€Ð°"
 
-#: elflink.c:8855
+#: elflink.c:9487
 #, c-format
 msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
 msgstr "%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼ --gc-keep-exported"
 
-#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166
+#: elflink.c:9738 elflink.c:9756 elflink.c:9795 elflink.c:9813
 #, c-format
 msgid "%pB: unable to sort relocs - they are in more than one size"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� â€” Ð¾Ð½Ð¸ Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð²"
 
 #. The section size is not divisible by either -
 #. something is wrong.
-#: elflink.c:9125 elflink.c:9182
+#: elflink.c:9772 elflink.c:9829
 #, c-format
 msgid "%pB: unable to sort relocs - they are of an unknown size"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� â€” Ð¾Ð½Ð¸ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°"
 
-#: elflink.c:9234
+#: elflink.c:9881
 msgid "not enough memory to sort relocations"
 msgstr "Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²ÐºÐ¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹"
 
-#: elflink.c:9502
+#: elflink.c:10219
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²: %d (>= %d)"
 
-#: elflink.c:9782
+#: elflink.c:10495
 #, c-format
 msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO"
 
-#: elflink.c:9785
+#: elflink.c:10498
 #, c-format
 msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO"
 
-#: elflink.c:9788
+#: elflink.c:10501
 #, c-format
 msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO"
 
-#: elflink.c:9874
+#: elflink.c:10587
 #, c-format
 msgid "%pB: could not find output section %pA for input section %pA"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %pA Ð´Ð»Ñ� Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA"
 
-#: elflink.c:10028
+#: elflink.c:10741
 #, c-format
 msgid "%pB: protected symbol `%s' isn't defined"
 msgstr "%pB: Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
 
-#: elflink.c:10031
+#: elflink.c:10744
 #, c-format
 msgid "%pB: internal symbol `%s' isn't defined"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
 
-#: elflink.c:10034
+#: elflink.c:10747
 #, c-format
 msgid "%pB: hidden symbol `%s' isn't defined"
 msgstr "%pB: Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
 
-#: elflink.c:10066
+#: elflink.c:10779
 #, c-format
 msgid "%pB: no symbol version section for versioned symbol `%s'"
 msgstr "%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð²ÐµÑ€Ñ�Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð´Ð»Ñ� Ð²ÐµÑ€Ñ�Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elflink.c:10679
-#, c-format
-msgid "error: %pB: size of section %pA is not multiple of address size"
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð°"
-
-#: elflink.c:10724
+#: elflink.c:11460
 #, c-format
 msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%#<PRIx64>) Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elflink.c:11484
+#: elflink.c:11930
 #, c-format
-msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
-msgstr "%pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ [Â«%pAÂ» Ð² %pB] Ð¸ Ð½ÐµÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ [Â«%pAÂ» Ð² %pB] Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹"
-
-#: elflink.c:11490
-#, c-format
-msgid "%pA has both ordered and unordered sections"
-msgstr "%pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ð¸ Ð½ÐµÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹"
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: elflink.c:11592
+#: elflink.c:12207
 #, c-format
 msgid "%pB: no symbol found for import library"
 msgstr "%pB: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸"
 
-#: elflink.c:12225
+#: elflink.c:12782
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr "%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�\n"
+
+#: elflink.c:12859
 #, c-format
 msgid "%pB: file class %s incompatible with %s"
 msgstr "%pB: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ ÐºÐ»Ð°Ñ�Ñ� %s Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� %s"
 
-#: elflink.c:12442
+#: elflink.c:13108
 #, c-format
 msgid "%pB: failed to generate import library"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼ÑƒÑŽ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ"
 
-#: elflink.c:12561
+#: elflink.c:13276
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð¸Ð¼ÐµÐµÑ‚ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€"
 
-#: elflink.c:12609
+#: elflink.c:13324
 #, c-format
 msgid "warning: section '%s' is being made into a note"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·ÑƒÐµÑ‚Ñ�Ñ� Ð² Ð¿Ñ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ðµ"
 
-#: elflink.c:12701
+#: elflink.c:13418
 msgid "%P%X: read-only segment has dynamic relocations\n"
 msgstr "%P%X: Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ, Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð¼ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�, Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚Ñ�Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�\n"
 
-#: elflink.c:12704
-msgid "%P: warning: creating a DT_TEXTREL in a shared object\n"
+#: elflink.c:13421
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
 msgstr "%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ\n"
 
-#: elflink.c:12829
+#: elflink.c:13424
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr "%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² PDE\n"
+
+#: elflink.c:13427
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr "%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² PIE\n"
+
+#: elflink.c:13563
 msgid "%P%X: can not read symbols: %E\n"
 msgstr "%P%X: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹: %E\n"
 
-#: elflink.c:13002
-msgid "%F%P: corrupt input: %pB\n"
-msgstr "%F%P: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ð²Ð²Ð¾Ð´: %pB\n"
+#: elflink.c:13988
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
+msgstr "%F%P: %pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� --gc-sections Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ» linked-to\n"
 
-#: elflink.c:13668
+#: elflink.c:14466
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
 msgstr "%pB: %pA+%#<PRIx64>: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð»Ñ� INHERIT"
 
-#: elflink.c:13844
+#: elflink.c:14507
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pA:Â» Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ VTENTRY"
+
+#: elflink.c:14650
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr "Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ INPUT_SECTION_FLAG %s\n"
 
-#: elfxx-mips.c:1450
+#: elflink.c:15433
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%P: %pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»\n"
+
+#: elflink.c:15522
+msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
+msgstr "%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð²Ð½Ñ‹Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ GNU Ñ� DT_TEXTREL Ð¼Ð¾Ð³ÑƒÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� %s\n"
+
+#: elfxx-aarch64.c:477
+#, c-format
+msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð»Ð°Ð±Ñ‹Ð¹ TLS Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�ÐµÑ‚Ñ�Ñ� Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸ÐµÐ¹ Ð¸ Ð¼Ð¾Ð¶ÐµÑ‚ Ð½Ðµ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ ÐºÐ°Ðº Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ�"
+
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:10200 elfnn-aarch64.c:10207
+#, c-format
+msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
+msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: BTI Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -z force-bti, Ð½Ð¾ Ð²Ñ�Ðµ Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð½Ðµ Ð¸Ð¼ÐµÑŽÑ‚ BTI Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ NOTE."
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° AArch64: 0x%x>"
+
+#: elfxx-loongarch.c:1590
+#, c-format
+msgid "%pB: unsupported relocation type %s"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s"
+
+#: elfxx-loongarch.c:1619
+#, c-format
+msgid "%pB: unsupported bfd relocation type %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� bfd %#x"
+
+#: elfxx-loongarch.c:1638
+#, c-format
+msgid "%pB: unsupported relocation type name %s"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¸Ð¼Ñ� Ñ‚Ð¸Ð¿Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s"
+
+#: elfxx-loongarch.c:1689
+#, c-format
+msgid "%pB: relocation %s right shift %d error 0x%lx"
+msgstr "%pB: Ð¿Ñ€Ð¸ Ñ�Ð´Ð²Ð¸Ð³Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð²Ð¿Ñ€Ð°Ð²Ð¾ Ð½Ð° %d Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð° Ð¾ÑˆÐ¸Ð±ÐºÐ° 0x%lx"
+
+#: elfxx-loongarch.c:1699 elfxx-loongarch.c:1735 elfxx-loongarch.c:1770
+#: elfxx-loongarch.c:1807
+#, c-format
+msgid "%pB: relocation %s overflow 0x%lx"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s 0x%lx"
+
+#: elfxx-mips.c:1541
 msgid "static procedure (no name)"
 msgstr "Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° (Ð±ÐµÐ· Ð¸Ð¼ÐµÐ½Ð¸)"
 
-#: elfxx-mips.c:5718
+#: elfxx-mips.c:5855
 msgid "MIPS16 and microMIPS functions cannot call each other"
 msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¸ MIPS16 Ð¸ microMIPS Ð½Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ð´Ñ€ÑƒÐ³ Ð´Ñ€ÑƒÐ³Ð°"
 
-#: elfxx-mips.c:6485
+#: elfxx-mips.c:6622
 msgid "%X%H: unsupported JALX to the same ISA mode\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ JALX Ð´Ð»Ñ� Ñ‚Ð¾Ð³Ð¾ Ð¶Ðµ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ISA\n"
 
-#: elfxx-mips.c:6518
+#: elfxx-mips.c:6655
 msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¼ÐµÐ¶Ð´Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ð¾Ð¹ ÑƒÐ²Ñ�Ð·ÐºÐ¾Ð¹\n"
 
-#: elfxx-mips.c:6563
+#: elfxx-mips.c:6700
 msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n"
 msgstr "%X%H: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA Ð² JALX: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½\n"
 
-#: elfxx-mips.c:6575
+#: elfxx-mips.c:6712
 msgid "%X%H: unsupported branch between ISA modes\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA\n"
 
-#: elfxx-mips.c:7223
+#: elfxx-mips.c:7344
 #, c-format
 msgid "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«.reginfoÂ»; Ð¾Ð¶Ð¸Ð´Ð°Ð»Ñ�Ñ� %<PRIu64>, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ %<PRIu64>"
 
-#: elfxx-mips.c:7267 elfxx-mips.c:7502
+#: elfxx-mips.c:7388
 #, c-format
 msgid "%pB: warning: bad `%s' option size %u smaller than its header"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° Â«%sÂ» (%u) Ð¼ÐµÐ½ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ ÐµÐ³Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº"
 
-#: elfxx-mips.c:8300 elfxx-mips.c:8426
+#: elfxx-mips.c:7624
+#, c-format
+msgid "%pB: warning: truncated `%s' option"
+msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ Â«%sÂ» ÑƒÑ�ÐµÑ‡Ñ‘Ð½"
+
+#: elfxx-mips.c:8447 elfxx-mips.c:8573
 #, c-format
 msgid "%pB: warning: cannot determine the target function for stub section `%s'"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Â«%sÂ»"
 
-#: elfxx-mips.c:8558
+#: elfxx-mips.c:8705
 #, c-format
 msgid "%pB: malformed reloc detected for section %s"
 msgstr "%pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %s"
 
-#: elfxx-mips.c:8658
+#: elfxx-mips.c:8805
 #, c-format
 msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GOT Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð½Ðµ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð°Ñ…"
 
-#: elfxx-mips.c:8796
+#: elfxx-mips.c:8945
 #, c-format
 msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CALL16 Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð½Ðµ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
 
-#: elfxx-mips.c:9086
+#: elfxx-mips.c:9248
 #, c-format
 msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n"
 msgstr "%X%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC\n"
 
-#: elfxx-mips.c:9422
+#: elfxx-mips.c:9374
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr "Ð¡Ð¸Ð¼Ð²Ð¾Ð» IFUNC %s Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” IFUNCS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
+
+#: elfxx-mips.c:9377
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr "Ð½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²"
+
+#: elfxx-mips.c:9597
 #, c-format
 msgid "non-dynamic relocations refer to dynamic symbol %s"
 msgstr "Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s"
 
-#: elfxx-mips.c:10350
+#: elfxx-mips.c:10532
 #, c-format
 msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %#<PRIx64> in section `%pA'"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰ÐµÐµ LO16 Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñƒ Â«%sÂ» Ð´Ð»Ñ� %s Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»"
 
-#: elfxx-mips.c:10490
+#: elfxx-mips.c:10672
 msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
 msgstr "Ñ€Ð°Ð·Ð´ÐµÐ» small-data Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ 64ÐšÐ‘ â€” Ð½Ð¸Ð¶Ð½Ð¸Ð¹ Ð¿Ñ€ÐµÐ´ÐµÐ» small-data (Ñ�Ð¼. Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -G)"
 
-#: elfxx-mips.c:10509
+#: elfxx-mips.c:10691
 msgid "cannot convert a jump to JALX for a non-word-aligned address"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ðº JALX Ð´Ð»Ñ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: elfxx-mips.c:10512
+#: elfxx-mips.c:10694
 msgid "jump to a non-word-aligned address"
 msgstr "Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ"
 
-#: elfxx-mips.c:10513
+#: elfxx-mips.c:10695
 msgid "jump to a non-instruction-aligned address"
 msgstr "Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð°Ð´Ñ€ÐµÑ�Ñƒ"
 
-#: elfxx-mips.c:10516
+#: elfxx-mips.c:10698
 msgid "cannot convert a branch to JALX for a non-word-aligned address"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ðº JALX Ð´Ð»Ñ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: elfxx-mips.c:10518
+#: elfxx-mips.c:10700
 msgid "branch to a non-instruction-aligned address"
 msgstr "Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð°Ð´Ñ€ÐµÑ�Ñƒ"
 
-#: elfxx-mips.c:10520
+#: elfxx-mips.c:10702
 msgid "PC-relative load from unaligned address"
 msgstr "Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ PC Ð¸Ð· Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: elfxx-mips.c:10798
+#: elfxx-mips.c:11002
 #, c-format
 msgid "%pB: `%pA' entry VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
 msgstr "%pB: VMA Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Â«%pAÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Â«-Ttext-segment=â€¦Â»"
 
-#: elfxx-mips.c:10911 elfxx-mips.c:11484
+#: elfxx-mips.c:11117 elfxx-mips.c:11704
 #, c-format
 msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
 msgstr "%pB: Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pAÂ» Ð´Ð»Ñ� %<PRId64> Ð¸Ð· Â«%pAÂ» Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° ADDIUPC"
 
-#: elfxx-mips.c:11456
+#: elfxx-mips.c:11676
 #, c-format
 msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
 msgstr "%pB: Ñ�Ñ‚Ð°Ñ€Ñ‚Ð¾Ð²Ñ‹Ð¹ VMA Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Â«%pAÂ» Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ð¾ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Â«-Ttext-segment=â€¦Â»"
 
-#: elfxx-mips.c:14397
+#: elfxx-mips.c:13422 reloc.c:8417
+#, c-format
+msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgstr "%X%P: %pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %V\n"
+
+#: elfxx-mips.c:13532 reloc.c:8514
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pRÂ» Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð¸Ð»Ð¾ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %x\n"
+
+#: elfxx-mips.c:14734
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %s"
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15262
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ð¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»"
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15539
 #, c-format
 msgid "%pB: warning: linking abicalls files with non-abicalls files"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² abicalls Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð½Ðµ-abicalls"
 
-#: elfxx-mips.c:15225
+#: elfxx-mips.c:15556
 #, c-format
 msgid "%pB: linking 32-bit code with 64-bit code"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð° Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ ÐºÐ¾Ð´Ð¾Ð¼"
 
-#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338
+#: elfxx-mips.c:15588 elfxx-mips.c:15654 elfxx-mips.c:15669
 #, c-format
 msgid "%pB: linking %s module with previous %s modules"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s"
 
-#: elfxx-mips.c:15281
+#: elfxx-mips.c:15612
 #, c-format
 msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
 msgstr "%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ABI: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s"
 
-#: elfxx-mips.c:15306
+#: elfxx-mips.c:15637
 #, c-format
 msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
 msgstr "%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ASE: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s"
 
-#: elfxx-mips.c:15440
+#: elfxx-mips.c:15771
 #, c-format
 msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %d"
 
-#: elfxx-mips.c:15446
+#: elfxx-mips.c:15777
 #, c-format
 msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s"
 
-#: elfxx-mips.c:15452
+#: elfxx-mips.c:15783
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸ %d"
 
-#: elfxx-mips.c:15466
+#: elfxx-mips.c:15797
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s"
 
-#: elfxx-mips.c:15485
+#: elfxx-mips.c:15816
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %d"
 
-#: elfxx-mips.c:15497
+#: elfxx-mips.c:15828
 #, c-format
 msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s"
 
-#: elfxx-mips.c:15506
+#: elfxx-mips.c:15837
 #, c-format
 msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %d (Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ %pB), %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ABI MSA %d"
 
-#: elfxx-mips.c:15568
+#: elfxx-mips.c:15899
 #, c-format
 msgid "%pB: endianness incompatible with that of the selected emulation"
 msgstr "%pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸ÐµÐ¹"
 
-#: elfxx-mips.c:15582
+#: elfxx-mips.c:15913
 #, c-format
 msgid "%pB: ABI is incompatible with that of the selected emulation"
 msgstr "%pB: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸ÐµÐ¹"
 
-#: elfxx-mips.c:15634
+#: elfxx-mips.c:15966
 #, c-format
 msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ ISA Ð¼ÐµÐ¶Ð´Ñƒ e_flags Ð¸ .MIPS.abiflags"
 
-#: elfxx-mips.c:15639
+#: elfxx-mips.c:15971
 #, c-format
 msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ FP ABI Ð¼ÐµÐ¶Ð´Ñƒ .gnu.attributes Ð¸ .MIPS.abiflags"
 
-#: elfxx-mips.c:15643
+#: elfxx-mips.c:15975
 #, c-format
 msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ ASE Ð¼ÐµÐ¶Ð´Ñƒ e_flags Ð¸ .MIPS.abiflags"
 
-#: elfxx-mips.c:15650
+#: elfxx-mips.c:15982
 #, c-format
 msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ð¹ ISA Ð¼ÐµÐ¶Ð´Ñƒ e_flags Ð¸ .MIPS.abiflags"
 
-#: elfxx-mips.c:15654
+#: elfxx-mips.c:15986
 #, c-format
 msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ Ð² Ð¿Ð¾Ð»Ðµ flags2 Ñƒ .MIPS.abiflags (0x%lx)"
 
-#: elfxx-mips.c:15843
+#: elfxx-mips.c:16177
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr "-mips32r2 -mfp64 (12 Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ�ÑŽÑ‚Ñ�Ñ� Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ñ‹Ð¼)"
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16239 elfxx-mips.c:16250
 msgid "None"
 msgstr "ÐžÑ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚"
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16241 elfxx-mips.c:16310
 msgid "Unknown"
 msgstr "Ð�ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾"
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16321
 #, c-format
 msgid "Hard or soft float\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¸Ð»Ð¸ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ�\n"
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16324
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ� Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚ÑŒ)\n"
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16327
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð°Ñ� Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚ÑŒ)\n"
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16330
 #, c-format
 msgid "Soft float\n"
 msgstr "ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ�\n"
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16333
 #, c-format
 msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (MIPS32r2 64-bit FPU 12 Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ�ÑŽÑ‚Ñ�Ñ� Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ñ‹Ð¼)\n"
 
-#: elfxx-mips.c:16002
+#: elfxx-mips.c:16336
 #, c-format
 msgid "Hard float (32-bit CPU, Any FPU)\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, Ð»ÑŽÐ±Ð¾Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16005
+#: elfxx-mips.c:16339
 #, c-format
 msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16008
+#: elfxx-mips.c:16342
 #, c-format
 msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
 msgstr "Ð¡Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16040
+#: elfxx-mips.c:16374
 #, c-format
 msgid " [abi=O32]"
 msgstr " [abi=O32]"
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16376
 #, c-format
 msgid " [abi=O64]"
 msgstr " [abi=O64]"
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16378
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [abi=EABI32]"
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16380
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [abi=EABI64]"
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16382
 #, c-format
 msgid " [abi unknown]"
 msgstr " [abi Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚ÐµÐ½]"
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16384
 #, c-format
 msgid " [abi=N32]"
 msgstr " [abi=N32]"
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16386
 #, c-format
 msgid " [abi=64]"
 msgstr " [abi=64]"
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16388
 #, c-format
 msgid " [no abi set]"
 msgstr " [abi Ð½Ðµ Ð·Ð°Ð´Ð°Ð½]"
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16413
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ISA]"
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16433
 #, c-format
 msgid " [not 32bitmode]"
 msgstr " [Ð½Ðµ 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ñ€ÐµÐ¶Ð¸Ð¼]"
 
-#: elfxx-sparc.c:3113
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5286
+#: elfxx-riscv.c:1657
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr "Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ x ISA Â«%sÂ» Ð´Ð¾Ð»Ð¶Ð½Ð¾ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ�Ð¼Ð¸"
+
+#: elfxx-riscv.c:1663
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ð¸ Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ Ð´Ð»Ñ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISA Â«%sÂ»"
+
+#: elfxx-riscv.c:1769
+#, c-format
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr "%s: Ð¿ÐµÑ€Ð²Ð¾Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Â«eÂ», Â«iÂ» Ð¸Ð»Ð¸ Â«gÂ»"
+
+#: elfxx-riscv.c:1793
+#, c-format
+msgid "%s: unknown standard ISA extension or prefix class `%c'"
+msgstr "%s: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ð¸Ð»Ð¸ ÐºÐ»Ð°Ñ�Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð° Â«%cÂ»"
+
+#: elfxx-riscv.c:1829
+#, c-format
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr "%s: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISA Â«%sÂ» Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° <Ð½Ð¾Ð¼ÐµÑ€>p"
+
+#: elfxx-riscv.c:1853
+#, c-format
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr "%s: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ Â«%sÂ»"
+
+#: elfxx-riscv.c:1877
+#, c-format
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr "%s: Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¾Ñ‚Ð´ÐµÐ»Ñ�Ñ‚ÑŒÑ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ _"
+
+#: elfxx-riscv.c:1931
+#, c-format
+msgid "rv%d does not support the `e' extension"
+msgstr "rv%d Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«eÂ»"
+
+#: elfxx-riscv.c:1939
+#, c-format
+msgid "rv%d does not support the `q' extension"
+msgstr "rv%d Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«qÂ»"
+
+#: elfxx-riscv.c:1946
+msgid "`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"
+msgstr "Â«zfinxÂ» ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÐµÐ¼ Â«f/d/q/zfh/zfhminÂ»"
+
+#: elfxx-riscv.c:1967
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr "Ð´Ð»Ñ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ð¹ zvl*b Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«vÂ» Ð¸Ð»Ð¸ Â«zveÂ»"
+
+#: elfxx-riscv.c:2029
+#, c-format
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr "%s: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚ÑŒ Ð±ÑƒÐºÐ²Ñ‹ Ð² Ð²ÐµÑ€Ñ…Ð½ÐµÐ¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ñ‹"
+
+#: elfxx-riscv.c:2057
+#, c-format
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr "%s: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð´Ð¾Ð»Ð¶Ð½Ð° Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ‚ÑŒÑ�Ñ� Ñ� rv32 Ð¸Ð»Ð¸ rv64"
+
+#: elfxx-riscv.c:2283
+#, c-format
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr "Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ ÐºÐ¾Ð½ÐµÑ† Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISA <Ð½Ð¾Ð¼ÐµÑ€>p Ð² .option Ð´Ð»Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ»"
+
+#: elfxx-riscv.c:2306
+#, c-format
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Â«%sÂ» Ð² .option Ð´Ð»Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ»"
+
+#: elfxx-riscv.c:2317
+#, c-format
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr "Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ + Ð¸Ð»Ð¸ - Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� Â«%sÂ» Ð² .option Ð´Ð»Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ»"
+
+#: elfxx-riscv.c:2525 elfxx-riscv.c:2727
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr "Ð½ÑƒÑ‚Ñ€Ñ�Ð½ÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð¸Ð¶Ð¸Ð¼Ñ‹Ð¹ INSN_CLASS_*"
+
+#: elfxx-riscv.c:2558
+msgid "m' or `zmmul"
+msgstr "mÂ» Ð¸Ð»Ð¸ Â«zmmul"
+
+#: elfxx-riscv.c:2574
+msgid "f' and `c"
+msgstr "fÂ» Ð¸ Â«c"
+
+#: elfxx-riscv.c:2582
+msgid "d' and `c"
+msgstr "dÂ» Ð¸ Â«c"
+
+#: elfxx-riscv.c:2588
+msgid "f' or `zfinx"
+msgstr "fÂ» Ð¸Ð»Ð¸ Â«zfinx"
+
+#: elfxx-riscv.c:2590
+msgid "d' or `zdinx"
+msgstr "dÂ» Ð¸Ð»Ð¸ Â«zdinx"
+
+#: elfxx-riscv.c:2592
+msgid "q' or `zqinx"
+msgstr "qÂ» Ð¸Ð»Ð¸ Â«zqinx"
+
+#: elfxx-riscv.c:2594
+msgid "zfh' or `zhinx"
+msgstr "zfhÂ» Ð¸Ð»Ð¸ Â«zhinx"
+
+#: elfxx-riscv.c:2598
+msgid "zfhmin' or `zhinxmin"
+msgstr "zfhminÂ» Ð¸Ð»Ð¸ Â«zhinxmin"
+
+#: elfxx-riscv.c:2609
+msgid "zfhmin' and `d', or `zhinxmin' and `zdinx"
+msgstr "zfhminÂ» Ð¸ Â«dÂ», Ð¸Ð»Ð¸ Â«zhinxminÂ» Ð¸ Â«zdinx"
+
+#: elfxx-riscv.c:2620
+msgid "zfhmin' and `q', or `zhinxmin' and `zqinx"
+msgstr "zfhminÂ» Ð¸ Â«qÂ», Ð¸Ð»Ð¸ Â«zhinxminÂ» Ð¸ Â«zqinx"
+
+#: elfxx-riscv.c:2626
+msgid "d' and `zfa"
+msgstr "dÂ» Ð¸ Â«zfa"
+
+#: elfxx-riscv.c:2634
+msgid "q' and `zfa"
+msgstr "qÂ» Ð¸ Â«zfa"
+
+#: elfxx-riscv.c:2642
+msgid "zfh' and `zfa"
+msgstr "zfhÂ» Ð¸ Â«zfa"
+
+#: elfxx-riscv.c:2662
+msgid "zbb' or `zbkb"
+msgstr "zbbÂ» Ð¸Ð»Ð¸ Â«zbkb"
+
+#: elfxx-riscv.c:2664
+msgid "zbc' or `zbkc"
+msgstr "zbcÂ» Ð¸Ð»Ð¸ Â«zbkc"
+
+#: elfxx-riscv.c:2672
+msgid "zknd' or `zkne"
+msgstr "zkndÂ» Ð¸Ð»Ð¸ Â«zkne"
+
+#: elfxx-riscv.c:2678
+msgid "v' or `zve64x' or `zve32x"
+msgstr "vÂ« Ð¸Ð»Ð¸ Â«zve64xÂ» Ð¸Ð»Ð¸ Â«zve32x"
+
+#: elfxx-riscv.c:2680
+msgid "v' or `zve64d' or `zve64f' or `zve32f"
+msgstr "vÂ» Ð¸Ð»Ð¸ Â«zve64dÂ» Ð¸Ð»Ð¸ Â«zve64fÂ» Ð¸Ð»Ð¸ Â«zve32f"
+
+#: elfxx-riscv.c:2682
+msgid "zvbb"
+msgstr "zvbb"
+
+#: elfxx-riscv.c:2684
+msgid "zvbc"
+msgstr "zvbc"
+
+#: elfxx-riscv.c:2686
+msgid "zvkg"
+msgstr "zvkg"
+
+#: elfxx-riscv.c:2688
+msgid "zvkned"
+msgstr "zvkned"
+
+#: elfxx-riscv.c:2690
+msgid "zvknha"
+msgstr "zvknha"
+
+#: elfxx-riscv.c:2692
+msgid "zvknhb"
+msgstr "zvknhb"
+
+#: elfxx-riscv.c:2694
+msgid "zvksed"
+msgstr "zvksed"
+
+#: elfxx-riscv.c:2696
+msgid "zvksh"
+msgstr "zvksh"
+
+#: elfxx-riscv.c:2700
+msgid "h"
+msgstr "h"
+
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5707
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ Ñ� STT_GNU_IFUNC Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ» Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� %s"
 
-#: elfxx-tilegx.c:4254
+#: elfxx-tilegx.c:4126
 #, c-format
 msgid "%pB: cannot link together %s and %s objects"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ %s Ð¸ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ"
 
-#: elfxx-x86.c:578
+#: elfxx-x86.c:536 elfxx-x86.c:3401
 #, c-format
-msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
-msgstr "%P: %pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»\n"
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB\n"
+msgstr "%F%P: %pB: ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð½ÐµÐºÐ¾Ð¿Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² %pB\n"
+
+#: elfxx-x86.c:1043
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr "%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð´Ð»Ñ� Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�\n"
+
+#: elfxx-x86.c:1399
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ 64-Ð±Ð¸Ñ‚Ð½ÑƒÑŽ DT_RELR bitmap\n"
+
+#: elfxx-x86.c:1435
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ 32-Ð±Ð¸Ñ‚Ð½ÑƒÑŽ DT_RELR bitmap\n"
 
-#: elfxx-x86.c:1027
+#: elfxx-x86.c:1574
+#, c-format
+msgid "%F%P: %pB: failed to allocate memory for section `%pA'\n"
+msgstr "%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»\n"
+
+#: elfxx-x86.c:1761
+#, c-format
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr "%F%P: %pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ñ‹Ñ… Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½: Ð½Ð¾Ð²Ñ‹Ð¹ (%lu) != Ñ�Ñ‚Ð°Ñ€Ð¾Ð¼Ñƒ (%lu)\n"
+
+#: elfxx-x86.c:1783
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr "%F%P: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ñ‹Ñ… Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹\n"
+
+#: elfxx-x86.c:2230
+#, c-format
+msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
+msgstr "%F%P: %pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾\n"
+
+#: elfxx-x86.c:2312
 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
 msgstr "%P: %pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»\n"
 
-#: elfxx-x86.c:1383
-msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n"
-msgstr "%P%X: Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ, Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð¼ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�, Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚Ñ�Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� IFUNC; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC\n"
+#: elfxx-x86.c:3154
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%v, Ð¸Ð½Ñ„Ð¾: 0x%v, Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ: 0x%v) Ð² Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð² %pB\n"
+
+#: elfxx-x86.c:3160
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: x%v, Ð¸Ð½Ñ„Ð¾: 0x%v) Ð² Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð² %pB\n"
 
-#: elfxx-x86.c:2384
+#: elfxx-x86.c:3775
 #, c-format
 msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð° x86 (0x%x): 0x%x>"
 
-#: elfxx-x86.c:2609
-msgid "%F%P: failed to create GNU property section\n"
-msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð² GNU\n"
-
-#: elfxx-x86.c:2614
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ñ€Ð¾Ð²Ð½Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»\n"
+#: elfxx-x86.c:4122
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ %s\n"
+
+#: elfxx-x86.c:4123
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ %s\n"
+
+#: elfxx-x86.c:4186
+msgid "IBT and SHSTK properties"
+msgstr "Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð° IBT Ð¸ SHSTK"
+
+#: elfxx-x86.c:4188
+msgid "IBT property"
+msgstr "Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ IBT"
+
+#: elfxx-x86.c:4190
+msgid "SHSTK property"
+msgstr "Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ SHSTK"
+
+#: elfxx-x86.c:4195
+msgid "LAM_U48 property"
+msgstr "Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ LAM_U48"
+
+#: elfxx-x86.c:4200
+msgid "LAM_U57 property"
+msgstr "Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ LAM_U57"
 
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:4367
 msgid "%F%P: failed to create VxWorks dynamic sections\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ VxWorks\n"
 
-#: elfxx-x86.c:2769
+#: elfxx-x86.c:4376
 msgid "%F%P: failed to create GOT sections\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ GOT\n"
 
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:4394
 msgid "%F%P: failed to create ifunc sections\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ ifunc\n"
 
-#: elfxx-x86.c:2828
+#: elfxx-x86.c:4431
 msgid "%F%P: failed to create GOT PLT section\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» GOT PLT\n"
 
-#: elfxx-x86.c:2849
+#: elfxx-x86.c:4450
 msgid "%F%P: failed to create IBT-enabled PLT section\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» PLT Ñ� Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼ IBT\n"
 
-#: elfxx-x86.c:2864
-msgid "%F%P: failed to create BND PLT section\n"
-msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» BND PLT\n"
-
-#: elfxx-x86.c:2885
+#: elfxx-x86.c:4470
 msgid "%F%P: failed to create PLT .eh_frame section\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» PLT .eh_frame\n"
 
-#: elfxx-x86.c:2898
+#: elfxx-x86.c:4483
 msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» GOT PLT .eh_frame\n"
 
-#: elfxx-x86.c:2912
+#: elfxx-x86.c:4497
 msgid "%F%P: failed to create the second PLT .eh_frame section\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» PLT .eh_frame\n"
 
+#: elfxx-x86.c:4517
+msgid "%F%P: failed to create PLT .sframe section\n"
+msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» PLT .sframe\n"
+
+#: elfxx-x86.c:4532
+msgid "%F%P: failed to create second PLT .sframe section\n"
+msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» PLT .sframe\n"
+
+#: elfxx-x86.c:4572
+msgid "%X%P: attempted static link of dynamic object `%pB'\n"
+msgstr "%X%P: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° Â«%pBÂ»\n"
+
 #: ihex.c:230
 #, c-format
 msgid "%pB:%d: unexpected character `%s' in Intel Hex file"
@@ -5096,379 +5873,403 @@ msgstr "%pB:%d: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ
 msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)"
 msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ� Ñ�ÑƒÐ¼Ð¼Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ (Ð´Ð¾Ð»Ð¶Ð½Ð° Ð±Ñ‹Ñ‚ÑŒ %u, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð° %u)"
 
-#: ihex.c:394
+#: ihex.c:393
 #, c-format
 msgid "%pB:%u: bad extended address record length in Intel Hex file"
 msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ"
 
-#: ihex.c:412
+#: ihex.c:411
 #, c-format
 msgid "%pB:%u: bad extended start address length in Intel Hex file"
 msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ"
 
-#: ihex.c:430
+#: ihex.c:429
 #, c-format
 msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
 msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ñ�Ð¼Ð¾Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ"
 
-#: ihex.c:448
+#: ihex.c:447
 #, c-format
 msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
 msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ñ�Ð¼Ð¾Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ð³Ð¾ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ"
 
-#: ihex.c:466
+#: ihex.c:465
 #, c-format
 msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
 msgstr "%pB:%u: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ ihex-Ñ‚Ð¸Ð¿ %u Ð² Intel Hex Ñ„Ð°Ð¹Ð»Ðµ"
 
-#: ihex.c:585
+#: ihex.c:581
 #, c-format
 msgid "%pB: internal error in ihex_read_section"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² ihex_read_section"
 
-#: ihex.c:619
+#: ihex.c:614
 #, c-format
 msgid "%pB: bad section length in ihex_read_section"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² ihex_read_section"
 
-#: ihex.c:793
+#: ihex.c:785
 #, c-format
 msgid "%pB 64-bit address %#<PRIx64> out of range for Intel Hex file"
 msgstr "%pB: 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� %#<PRIx64> Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° Intel Hex Ñ„Ð°Ð¹Ð»Ð°"
 
-#: ihex.c:852
+#: ihex.c:843
 #, c-format
 msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
 msgstr "%pB: Ð°Ð´Ñ€ÐµÑ� %#<PRIx64> Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° Intel Hex Ñ„Ð°Ð¹Ð»Ð°"
 
-#: libbfd.c:937
+#: libbfd.c:1051
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ Ñ€Ð°Ñ�Ð¶Ð°Ñ‚Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %pA"
 
-#: libbfd.c:1101
-#, c-format
-msgid "Deprecated %s called at %s line %d in %s\n"
-msgstr "Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s Ñ€Ñ�Ð´Ð¾Ð¼ Ñ� %s Ð² Ñ�Ñ‚Ñ€Ð¾ÐºÐµ %d Ð² %s\n"
-
-#: libbfd.c:1104
-#, c-format
-msgid "Deprecated %s called\n"
-msgstr "Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s\n"
-
-#: linker.c:1697
+#: linker.c:1710
 #, c-format
 msgid "%pB: indirect symbol `%s' to `%s' is a loop"
 msgstr "%pB: ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ðº Â«%sÂ» Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚ Ð·Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ðµ"
 
-#: linker.c:2567
+#: linker.c:2580
 #, c-format
 msgid "attempt to do relocatable link with %s input and %s output"
 msgstr "Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ Ñ� Ð²Ñ…Ð¾Ð´Ð¾Ð¼ %s Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð¾Ð¼ %s"
 
-#: linker.c:2853
+#: linker.c:2859
 #, c-format
 msgid "%pB: ignoring duplicate section `%pA'\n"
 msgstr "%pB: Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ»\n"
 
-#: linker.c:2863 linker.c:2873
+#: linker.c:2869 linker.c:2879
 #, c-format
 msgid "%pB: duplicate section `%pA' has different size\n"
 msgstr "%pB: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€\n"
 
-#: linker.c:2882 linker.c:2888
+#: linker.c:2893 linker.c:2901
 #, c-format
 msgid "%pB: could not read contents of section `%pA'\n"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»\n"
 
-#: linker.c:2893
+#: linker.c:2910
 #, c-format
 msgid "%pB: duplicate section `%pA' has different contents\n"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð´Ñ€ÑƒÐ³Ð¾Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ\n"
 
-#: linker.c:3407
+#: linker.c:3429
 #, c-format
 msgid "%pB: compiled for a big endian system and target is little endian"
 msgstr "%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚, Ð° Ñ†ÐµÐ»ÑŒ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚"
 
-#: linker.c:3410
+#: linker.c:3432
 #, c-format
 msgid "%pB: compiled for a little endian system and target is big endian"
 msgstr "%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚, Ð° Ñ†ÐµÐ»ÑŒ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚"
 
-#: mach-o.c:632
+#: mach-o-arm.c:169 mach-o-arm.c:301
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð°Ñ� Ð¿Ð°Ñ€Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� mach-o ARM: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð¿ÐµÑ€Ð²Ñ‹Ð¼ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼"
+
+#: mach-o-arm.c:185
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð°Ñ� Ð¿Ð°Ñ€Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:200
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:215
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:230
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ half sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:262
+#, c-format
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ vanilla mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d (pcrel: %d)"
+
+#: mach-o-arm.c:332
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ mach-o ARM: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %d"
+
+#: mach-o.c:640
 #, c-format
 msgid "<unknown mask flags>"
 msgstr "<Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ„Ð»Ð°Ð³Ð¸ Ð¼Ð°Ñ�ÐºÐ¸>"
 
-#: mach-o.c:687
+#: mach-o.c:695
 msgid " (<unknown>)"
 msgstr " (Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾)"
 
-#: mach-o.c:698
+#: mach-o.c:707
 #, c-format
 msgid " MACH-O header:\n"
 msgstr " Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Mach-O:\n"
 
-#: mach-o.c:699
+#: mach-o.c:708
 #, c-format
 msgid "   magic:      %#lx\n"
 msgstr "   Ð¾Ñ‚Ð».Ð¿Ñ€Ð¸Ð·Ð½:    %#lx\n"
 
-#: mach-o.c:700
+#: mach-o.c:709
 #, c-format
 msgid "   cputype:    %#lx (%s)\n"
 msgstr "   Ñ‚Ð¸Ð¿ Ð¦ÐŸ:       %#lx (%s)\n"
 
-#: mach-o.c:702
+#: mach-o.c:711
 #, c-format
 msgid "   cpusubtype: %#lx%s\n"
 msgstr "   Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿ Ð¦ÐŸ:    %#lx%s\n"
 
-#: mach-o.c:704
+#: mach-o.c:713
 #, c-format
 msgid "   filetype:   %#lx\n"
 msgstr "   Ñ‚Ð¸Ð¿ Ñ„Ð°Ð¹Ð»Ð°:    %#lx\n"
 
-#: mach-o.c:705
+#: mach-o.c:714
 #, c-format
 msgid "   ncmds:      %#lx\n"
 msgstr "   Ñ‡_ÐºÐ¼Ð½Ð´:       %#lx\n"
 
-#: mach-o.c:706
+#: mach-o.c:715
 #, c-format
 msgid "   sizeocmds:  %#lx\n"
 msgstr "   Ñ€Ð°Ð·Ð¼_ÐºÐ¼Ð½Ð´:    %#lx\n"
 
-#: mach-o.c:707
+#: mach-o.c:716
 #, c-format
 msgid "   flags:      %#lx\n"
 msgstr "   Ñ„Ð»Ð°Ð³Ð¸:        %#lx\n"
 
-#: mach-o.c:708
+#: mach-o.c:717
 #, c-format
 msgid "   version:    %x\n"
 msgstr "   Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ñ�Ð¸Ð¸: %x\n"
 
 #. Urg - what has happened ?
-#: mach-o.c:743
+#: mach-o.c:752
 #, c-format
 msgid "incompatible cputypes in mach-o files: %ld vs %ld"
 msgstr "Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹ Ð¦ÐŸ Ð² Ñ„Ð°Ð¹Ð»Ð°Ñ… mach-o: %ld Ð¸ %ld"
 
-#: mach-o.c:912
+#: mach-o.c:921
 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
 msgstr "bfd_mach_o_canonicalize_symtab: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹"
 
-#: mach-o.c:2108
+#: mach-o.c:1513
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ mach-o: Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð±Ð¾Ð»ÑŒÑˆÐµ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²"
+
+#: mach-o.c:2155
 msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands."
 msgstr "Ð˜Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ: modtab, toc Ð¸ extrefsyms Ð¿Ð¾ÐºÐ° Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ‹ Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´ dysymtab."
 
-#: mach-o.c:2554
+#: mach-o.c:2603
 #, c-format
 msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
 msgstr "mach-o: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² (%u), Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½Ðµ Ð±Ð¾Ð»ÐµÐµ 255,\n"
 
-#: mach-o.c:2661
+#: mach-o.c:2695
 #, c-format
 msgid "unable to allocate data for load command %#x"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x"
 
-#: mach-o.c:2766
+#: mach-o.c:2800
 #, c-format
 msgid "unable to write unknown load command %#x"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x"
 
-#: mach-o.c:2950
+#: mach-o.c:2984
 #, c-format
 msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
 msgstr "Ð°Ð´Ñ€ÐµÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#<PRIx64>) Ð¼ÐµÐ½ÑŒÑˆÐµ Ð½Ð°Ñ‡Ð°Ð»Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° (%#<PRIx64>)"
 
-#: mach-o.c:3092
+#: mach-o.c:3126
 #, c-format
 msgid "unable to layout unknown load command %#x"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x"
 
-#: mach-o.c:3628
+#: mach-o.c:3661
 #, c-format
-msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_32: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ�: %#lx, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� 32"
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ�: %#lx"
 
-#: mach-o.c:3671
+#: mach-o.c:3704
 #, c-format
-msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_64: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ�: %#lx, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� 32"
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_64: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ�: %#lx"
 
-#: mach-o.c:3722
+#: mach-o.c:3755
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"
 msgstr "bfd_mach_o_read_symtab_symbol: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ %d Ð±Ð°Ð¹Ñ‚ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %u"
 
-#: mach-o.c:3741
+#: mach-o.c:3774
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
 msgstr "bfd_mach_o_read_symtab_symbol: Ð¸Ð¼Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (%lu >= %u)"
 
-#: mach-o.c:3824
+#: mach-o.c:3857
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %d (Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %lu): Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ° Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
 
-#: mach-o.c:3843
+#: mach-o.c:3876
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿Ð¾Ð»Ñ� 0x%x: Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ° Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
 
-#: mach-o.c:3920
-msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
-msgstr "bfd_mach_o_read_symtab_symbols: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²"
-
-#: mach-o.c:4931
+#: mach-o.c:5075
 #, c-format
 msgid "%pB: unknown load command %#x"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x"
 
-#: mach-o.c:5122
+#: mach-o.c:5274
 #, c-format
 msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
 msgstr "bfd_mach_o_scan: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx/0x%lx"
 
-#: mach-o.c:5227
+#: mach-o.c:5396
 #, c-format
 msgid "unknown header byte-order value %#x"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ° Ð±Ð°Ð¹Ñ‚ Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ %#x"
 
-#: merge.c:878
+#: merge.c:1100
 #, c-format
 msgid "%pB: access beyond end of merged section (%<PRId64>)"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%<PRId64>)"
 
-#: mmo.c:476
-#, c-format
-msgid "%pB: no core to allocate section name %s"
-msgstr "%pB: Ð½ÐµÑ‚ core Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s"
-
-#: mmo.c:541
+#: mmo.c:535
 #, c-format
 msgid "%pB: no core to allocate a symbol %d bytes long"
 msgstr "%pB: Ð½ÐµÑ‚ core Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� %d Ð±Ð°Ð¹Ñ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
 
-#: mmo.c:955
+#: mmo.c:956
 #, c-format
 msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
 msgstr "%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð²Ñ‹Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ 4 (%#<PRIx64>)"
 
-#: mmo.c:1252
+#: mmo.c:1251
 #, c-format
 msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� $255 Ð½Ðµ Ñ€Ð°Ð²Ð½Ð¾ Â«MainÂ»\n"
 
-#: mmo.c:1399
+#: mmo.c:1398
 #, c-format
 msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
 msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� Ð¿Ð¾Ñ�Ð»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñ�Ñ‚ÑŒ ÑˆÐ¸Ñ€Ð¾ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² 0x%02X 0x%02X Ð¿Ð¾Ñ�Ð»Ðµ Ð¸Ð¼ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ� Ñ� Â«%sÂ»\n"
 
-#: mmo.c:1633
+#: mmo.c:1414
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr "%pB: Ð¸Ð¼Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð·Ð°Ð´Ð°Ð½Ð½ÑƒÑŽ Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½ÑƒÑŽ Ð´Ð»Ð¸Ð½Ñƒ Ñ€Ð°Ð²Ð½ÑƒÑŽ %d"
+
+#: mmo.c:1643
 #, c-format
 msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ lopcode Â«%dÂ»\n"
 
-#: mmo.c:1644
+#: mmo.c:1654
 #, c-format
 msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð´Ð»Ñ� lop_quote Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ YZ = 1, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ YZ = %d\n"
 
-#: mmo.c:1682
+#: mmo.c:1698
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð´Ð»Ñ� lop_loc Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ z = 1 Ð¸Ð»Ð¸ z = 2, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ z = %d\n"
 
-#: mmo.c:1733
+#: mmo.c:1749
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð´Ð»Ñ� lop_fixo Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ z = 1 Ð¸Ð»Ð¸ z = 2, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ z = %d\n"
 
-#: mmo.c:1774
+#: mmo.c:1798
 #, c-format
 msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð´Ð»Ñ� lop_fixrx Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ y = 0, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ y = %d\n"
 
-#: mmo.c:1785
+#: mmo.c:1809
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð´Ð»Ñ� lop_fixrx Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ z = 16 Ð¸Ð»Ð¸ z = 24, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ z = %d\n"
 
-#: mmo.c:1810
+#: mmo.c:1834
 #, c-format
 msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð´Ð»Ñ� lop_fixrx Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð±Ð°Ð¹Ñ‚ Ñ�Ð»Ð¾Ð²Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ñ€Ð°Ð²ÐµÐ½ 0 Ð¸Ð»Ð¸ 1, Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ %d\n"
 
-#: mmo.c:1835
+#: mmo.c:1863
 #, c-format
 msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð´Ð»Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ñ„Ð°Ð¹Ð»Ð° Ñ„Ð°Ð¹Ð»Ñƒ Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %d, %d Ð±Ð°Ð¹Ñ‚\n"
 
-#: mmo.c:1857
+#: mmo.c:1885
 #, c-format
 msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð° %d Â«%sÂ» Ð±Ñ‹Ð» ÑƒÐ¶Ðµ Ð²Ð²ÐµÐ´Ñ‘Ð½ ÐºÐ°Ðº Â«%sÂ»\n"
 
-#: mmo.c:1871
+#: mmo.c:1900
 #, c-format
 msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð¸Ð¼Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° %d Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½Ð¾ Ð¿ÐµÑ€ÐµÐ´ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼\n"
 
-#: mmo.c:1978
+#: mmo.c:2012
 #, c-format
 msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð¿Ð¾Ð»Ñ� y Ð¸ z Ð² lop_stab Ð½Ðµ Ñ€Ð°Ð²Ð½Ñ‹ Ð½ÑƒÐ»ÑŽ, y: %d, z: %d\n"
 
-#: mmo.c:2015
+#: mmo.c:2049
 #, c-format
 msgid "%pB: invalid mmo file: lop_end not last item in file\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: lop_end Ð½Ðµ Ð¿Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¸Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð² Ñ„Ð°Ð¹Ð»Ðµ\n"
 
-#: mmo.c:2029
+#: mmo.c:2063
 #, c-format
 msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: YZ Ð² lop_end (%ld) Ð½Ðµ Ñ€Ð°Ð²Ð½Ð¾ Ñ‡Ð¸Ñ�Ð»Ñƒ Ñ‚ÐµÑ‚Ñ€Ð°Ð´ Ð² ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¹ Ñ€Ð°Ð½ÐµÐµ lop_stab (%ld)\n"
 
-#: mmo.c:2740
+#: mmo.c:2776
 #, c-format
 msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»\n"
 
-#: mmo.c:2983
+#: mmo.c:3015
 #, c-format
-msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n"
-msgstr "%pB: Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«MainÂ» Ñ€Ð°Ð²ÐµÐ½ %s, Ð° Ð½Ðµ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %s\n"
+msgid "%pB: bad symbol definition: `Main' set to %<PRIx64> rather than the start address %<PRIx64>\n"
+msgstr "%pB: Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«MainÂ» Ñ€Ð°Ð²ÐµÐ½ %<PRIx64>, Ð° Ð½Ðµ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %<PRIx64>\n"
 
-#: mmo.c:3082
+#: mmo.c:3114
 #, c-format
 msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ� Ð´Ð»Ñ� mmo, Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ‡ÐµÐ¼ 65535 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²: %d. Ð‘ÑƒÐ´ÐµÑ‚ Ð²Ñ‹Ð´Ð°Ð½Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Â«MainÂ».\n"
 
-#: mmo.c:3128
+#: mmo.c:3160
 #, c-format
 msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°, Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ� %d Ñ�Ð»Ð¾Ð² Ð´Ð¾ %d\n"
 
-#: mmo.c:3181
+#: mmo.c:3213
 #, c-format
 msgid "%pB: internal error, internal register section %pA had contents\n"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°, Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² %pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ðµ\n"
 
-#: mmo.c:3232
+#: mmo.c:3264
 #, c-format
 msgid "%pB: no initialized registers; section length 0\n"
 msgstr "%pB: Ð½ÐµÑ‚ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²; Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ€Ð°Ð²Ð½Ð° 0\n"
 
-#: mmo.c:3239
+#: mmo.c:3271
 #, c-format
 msgid "%pB: too many initialized registers; section length %<PRId64>"
 msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²; Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ€Ð°Ð²Ð½Ð° %<PRId64>"
 
-#: mmo.c:3244
+#: mmo.c:3276
 #, c-format
 msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð´Ð»Ñ� Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² Ð´Ð»Ð¸Ð½Ñ‹ %<PRId64>: %#<PRIx64>"
@@ -5478,48 +6279,55 @@ msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð½
 msgid "unhandled OSF/1 core file section type %d"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð» Ñ�Ð´Ñ€Ð° OSF/1 Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d"
 
-#: pef.c:527
+#: pdp11.c:1589
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹ (Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�)"
+
+#: pef.c:531
 #, c-format
 msgid "bfd_pef_scan: unknown architecture 0x%lx"
 msgstr "bfd_pef_scan: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx"
 
-#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220
+#: pei-x86_64.c:178 pei-x86_64.c:232 pei-x86_64.c:242 pei-x86_64.c:267
+#: pei-x86_64.c:279 pei-x86_64.c:293 pei-x86_64.c:311 pei-x86_64.c:323
+#: pei-x86_64.c:335
 #, c-format
 msgid "warning: corrupt unwind data\n"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€Ð°Ð·Ð²Ñ‘Ñ€Ñ‚ÐºÐ¸\n"
 
 #. PR 17512: file: 2245-7442-0.004.
-#: pei-x86_64.c:315
+#: pei-x86_64.c:356
 #, c-format
 msgid "Unknown: %x"
 msgstr "Ð�ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾: %x"
 
-#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384
+#: pei-x86_64.c:407 pei-x86_64.c:417 pei-x86_64.c:426
 #, c-format
 msgid "warning: xdata section corrupt\n"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» xdata\n"
 
-#: pei-x86_64.c:439
+#: pei-x86_64.c:481
 #, c-format
 msgid "Too many unwind codes (%ld)\n"
 msgstr "Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ñ�ÐºÑ€Ñ‹Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð° (%ld)\n"
 
-#: pei-x86_64.c:529
+#: pei-x86_64.c:567
 #, c-format
 msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
 msgstr "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%ld) Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ %d\n"
 
-#: pei-x86_64.c:536
+#: pei-x86_64.c:574
 #, c-format
 msgid "Warning: %s section size is zero\n"
 msgstr "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ\n"
 
-#: pei-x86_64.c:551
+#: pei-x86_64.c:589
 #, c-format
 msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
 msgstr "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%ld) Ð¼ÐµÐ½ÑŒÑˆÐµ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° (%ld)\n"
 
-#: pei-x86_64.c:560
+#: pei-x86_64.c:598
 #, c-format
 msgid ""
 "\n"
@@ -5528,12 +6336,12 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð¾ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s)\n"
 
-#: pei-x86_64.c:563
+#: pei-x86_64.c:601
 #, c-format
 msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
 msgstr "vma:\t\t\tÐ�Ð°Ñ‡ Ð°Ð´Ñ€ÐµÑ�   \t  ÐšÐ¾Ð½ Ð°Ð´Ñ€ÐµÑ�\t   Ð Ð°Ñ�ÐºÑ€ Ð´Ð°Ð½Ð½Ñ‹Ðµ\n"
 
-#: pei-x86_64.c:692
+#: pei-x86_64.c:726
 #, c-format
 msgid ""
 "\n"
@@ -5543,47 +6351,66 @@ msgstr ""
 "Ð”Ð°Ð¼Ð¿ %s\n"
 
 #. XXX code yet to be written.
-#: peicode.h:775
+#: peicode.h:822
 #, c-format
 msgid "%pB: unhandled import type; %x"
 msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x"
 
-#: peicode.h:781
+#: peicode.h:828
 #, c-format
 msgid "%pB: unrecognized import type; %x"
 msgstr "%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x"
 
-#: peicode.h:796
+#: peicode.h:843
 #, c-format
 msgid "%pB: unrecognized import name type; %x"
 msgstr "%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¸Ð¼ÐµÐ½Ð½Ð¾Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x"
 
-#: peicode.h:1211
+#: peicode.h:1274
 #, c-format
 msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
 msgstr "%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ (0x%x) Ð² Ð°Ñ€Ñ…Ð¸Ð²Ðµ Import Library Format"
 
-#: peicode.h:1224
+#: peicode.h:1287
 #, c-format
 msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
 msgstr "%pB: Ñ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½, Ð½Ð¾ Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ (0x%x) Ð² Ð°Ñ€Ñ…Ð¸Ð²Ðµ Import Library Format"
 
-#: peicode.h:1242
+#: peicode.h:1305
 #, c-format
 msgid "%pB: size field is zero in Import Library Format header"
 msgstr "%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿Ð¾Ð»Ñ� Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Import Library Format"
 
-#: peicode.h:1274
+#: peicode.h:1331
 #, c-format
 msgid "%pB: string not null terminated in ILF object file"
 msgstr "%pB: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ð½Ðµ Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð½ÑƒÐ»Ñ‘Ð¼ Ð² Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ ILF"
 
-#: peicode.h:1330
+#: peicode.h:1387
 #, c-format
 msgid "%pB: error: debug data ends beyond end of debug directory"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÐ¾Ð½ÐµÑ† Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð·Ð° Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸ÐµÐ¼ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°"
 
-#: ppcboot.c:392
+#: peicode.h:1559
+#, c-format
+msgid "%pB: adjusting invalid SectionAlignment"
+msgstr "%pB: Ð¿Ð¾Ð´Ñ�Ñ‚Ñ€Ð°Ð¸Ð²Ð°ÐµÐ¼ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ SectionAlignment"
+
+#: peicode.h:1569
+#, c-format
+msgid "%pB: adjusting invalid FileAlignment"
+msgstr "%pB: Ð¿Ð¾Ð´Ñ�Ñ‚Ñ€Ð°Ð¸Ð²Ð°ÐµÐ¼ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ FileAlignment"
+
+#: peicode.h:1577
+#, c-format
+msgid "%pB: invalid NumberOfRvaAndSizes"
+msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ NumberOfRvaAndSizes"
+
+#: plugin.c:258
+msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr "Ð¼Ð¾Ð´ÑƒÐ»ÑŒÐ½Ð°Ñ� Ð¸Ð½Ñ„Ñ€Ð°Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ð°: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¸Ñ�ÑŒ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ðµ Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ñ‹. ÐŸÐ¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÐ½ÑŒÑˆÐµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð²/Ð°Ñ€Ñ…Ð¸Ð²Ð¾Ð²\n"
+
+#: ppcboot.c:393
 #, c-format
 msgid ""
 "\n"
@@ -5592,27 +6419,27 @@ msgstr ""
 "\n"
 "Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº ppcboot:\n"
 
-#: ppcboot.c:393
+#: ppcboot.c:394
 #, c-format
 msgid "Entry offset        = 0x%.8lx (%ld)\n"
 msgstr "Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ  = 0x%.8lx (%ld)\n"
 
-#: ppcboot.c:395
+#: ppcboot.c:396
 #, c-format
 msgid "Length              = 0x%.8lx (%ld)\n"
 msgstr "Ð”Ð»Ð¸Ð½Ð°               = 0x%.8lx (%ld)\n"
 
-#: ppcboot.c:399
+#: ppcboot.c:400
 #, c-format
 msgid "Flag field          = 0x%.2x\n"
 msgstr "ÐŸÐ¾Ð»Ðµ Ñ„Ð»Ð°Ð³Ð¾Ð²         = 0x%.2x\n"
 
-#: ppcboot.c:405
+#: ppcboot.c:406
 #, c-format
 msgid "Partition name      = \"%s\"\n"
 msgstr "Ð˜Ð¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð°         = \"%s\"\n"
 
-#: ppcboot.c:425
+#: ppcboot.c:426
 #, c-format
 msgid ""
 "\n"
@@ -5621,47 +6448,32 @@ msgstr ""
 "\n"
 "Ð�Ð°Ñ‡Ð°Ð»Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
 
-#: ppcboot.c:432
+#: ppcboot.c:433
 #, c-format
 msgid "Partition[%d] end    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
 msgstr "ÐšÐ¾Ð½ÐµÑ† Ñ€Ð°Ð·Ð´ÐµÐ»Ð°[%d]   = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
 
-#: ppcboot.c:439
+#: ppcboot.c:440
 #, c-format
 msgid "Partition[%d] sector = 0x%.8lx (%ld)\n"
 msgstr "Ð¡ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°[%d]  = 0x%.8lx (%ld)\n"
 
-#: ppcboot.c:443
+#: ppcboot.c:444
 #, c-format
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
 msgstr "Ð”Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð°[%d]   = 0x%.8lx (%ld)\n"
 
-#: reloc.c:8232
+#: reloc.c:8316
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr "INPUT_SECTION_FLAGS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: reloc.c:8333
-#, c-format
-msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
-msgstr "%X%P: %pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %V\n"
-
-#: reloc.c:8420
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
-msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pRÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
-
-#: reloc.c:8429
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
-msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pRÂ» Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð¸Ð»Ð¾ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %x\n"
-
-#: reloc.c:8491
+#: reloc.c:8582
 #, c-format
 msgid "%pB: unrecognized relocation type %#x in section `%pA'"
 msgstr "%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %#x Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»"
 
 #. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8495
+#: reloc.c:8586
 #, c-format
 msgid "is this version of the linker - %s - out of date ?"
 msgstr "Ð´Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° â€” %s â€” ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ»Ð°?"
@@ -5671,7 +6483,23 @@ msgstr "Ð´Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� ÐºÐ¾Ð¼
 msgid "%pB: warning core file truncated"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð» core ÑƒÑ�ÐµÑ‡Ñ‘Ð½"
 
-#: som.c:5478
+#: som.c:3002
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of order"
+msgstr "%pB(%pA+%#<PRIx64>): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð²Ð½Ðµ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ°"
+
+#: som.c:3015
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of range"
+msgstr "%pB(%pA+%#<PRIx64>): Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %s Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
+
+#. User has specified a subspace without its containing space.
+#: som.c:5488
+#, c-format
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr "%pB[%pA]: Ð½ÐµÑ‚ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð´Ð»Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° %pA"
+
+#: som.c:5534
 #, c-format
 msgid ""
 "\n"
@@ -5680,7 +6508,7 @@ msgstr ""
 "\n"
 "Ð’Ñ�Ð¿Ð¾Ð¼Ð¾Ð³Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Exec\n"
 
-#: som.c:5787
+#: som.c:5843
 msgid "som_sizeof_headers unimplemented"
 msgstr "som_sizeof_headers Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½"
 
@@ -5694,17 +6522,17 @@ msgstr "%pB:%d: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ
 msgid "%pB:%d: byte count %d too small"
 msgstr "%pB:%d: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð±Ð°Ð¹Ñ‚ %d Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»"
 
-#: srec.c:581 srec.c:615
+#: srec.c:580 srec.c:614
 #, c-format
 msgid "%pB:%d: bad checksum in S-record file"
 msgstr "%pB:%d: Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ� Ñ�ÑƒÐ¼Ð¼Ð° Ð² Ñ„Ð°Ð¹Ð»Ðµ S-record"
 
-#: stabs.c:279
+#: stabs.c:308
 #, c-format
 msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
 msgstr "%pB(%pA+%#lx): Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ stabs Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸"
 
-#: syms.c:1091
+#: syms.c:1112
 msgid "unsupported .stab relocation"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ .stab"
 
@@ -5712,65 +6540,74 @@ msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ
 msgid "corrupt EIHD record - size is too small"
 msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EIHD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° â€” Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»"
 
-#: vms-alpha.c:660
+#: vms-alpha.c:665
 #, c-format
 msgid "unable to read EIHS record at offset %#x"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EIHS Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %#x"
 
-#: vms-alpha.c:1173
+#: vms-alpha.c:1157
+msgid "record is too small for symbol name length"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð° Ð´Ð»Ñ� Ð´Ð»Ð¸Ð½Ñ‹ Ð¸Ð¼ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
+
+#: vms-alpha.c:1190
 #, c-format
 msgid "corrupt EGSD record: its size (%#x) is too small"
 msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: ÐµÑ‘ Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»"
 
-#: vms-alpha.c:1197
+#: vms-alpha.c:1214
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)"
-msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐ³Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° (%#x)"
+msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐ³Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° (%#x)"
 
-#: vms-alpha.c:1205
+#: vms-alpha.c:1224
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is too small"
-msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»"
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»"
 
-#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390
+#: vms-alpha.c:1366
 #, c-format
 msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
 msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: ÐµÑ‘ Ð¿Ð¾Ð»Ðµ psindx Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾ (%#lx)"
 
-#: vms-alpha.c:1419
+#: vms-alpha.c:1441
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿ EGSD %d"
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1474
 #, c-format
 msgid "stack overflow (%d) in _bfd_vms_push"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ° (%d) Ð² _bfd_vms_push"
 
-#: vms-alpha.c:1465
+#: vms-alpha.c:1488
 msgid "stack underflow in _bfd_vms_pop"
 msgstr "Ð²Ñ‹Ñ…Ð¾Ð´ Ð·Ð° Ð½Ð¸Ð¶Ð½ÑŽÑŽ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ Ñ�Ñ‚ÐµÐºÐ° Ð² _bfd_vms_pop"
 
+#: vms-alpha.c:1562
+#, c-format
+msgid "dst_define_location %u too large"
+msgstr "dst_define_location %u Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ"
+
 #. These names have not yet been added to this switch statement.
-#: vms-alpha.c:1707
+#: vms-alpha.c:1765
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� ETIR ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %d"
 
-#: vms-alpha.c:1738
+#: vms-alpha.c:1796
 msgid "corrupt vms value"
 msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ vms Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾"
 
-#: vms-alpha.c:1866
+#: vms-alpha.c:1927
 msgid "corrupt ETIR record encountered"
 msgstr "Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ ETIR"
 
-#: vms-alpha.c:1923
+#: vms-alpha.c:1989
 #, c-format
 msgid "bad section index in %s"
 msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² %s"
 
-#: vms-alpha.c:1936
+#: vms-alpha.c:2003
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ STA cmd %s"
@@ -5780,1468 +6617,1479 @@ msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹
 #. Rotate.
 #. Redefine symbol to current location.
 #. Define a literal.
-#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396
+#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557
 #, c-format
 msgid "%s: not supported"
 msgstr "%s: Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: vms-alpha.c:2122
+#: vms-alpha.c:2217
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-#: vms-alpha.c:2380
+#: vms-alpha.c:2382 vms-alpha.c:2397
+#, c-format
+msgid "invalid %s"
+msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ %s"
+
+#. Divide by zero is supposed to give a result of zero,
+#. and a non-fatal warning message.
+#: vms-alpha.c:2457
+#, c-format
+msgid "%s divide by zero"
+msgstr "%s Ð´ÐµÐ»Ð¸Ñ‚Ñ�Ñ� Ð½Ð° Ð½Ð¾Ð»ÑŒ"
+
+#: vms-alpha.c:2523
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr "Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ %s Ñ� ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð°Ð¼Ð¸"
 
-#: vms-alpha.c:2414
+#: vms-alpha.c:2581
 #, c-format
 msgid "reserved cmd %d"
 msgstr "Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¹ cmd %d"
 
-#: vms-alpha.c:2498
+#: vms-alpha.c:2665
 msgid "corrupt EEOM record - size is too small"
 msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EEOM Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° â€” Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»"
 
-#: vms-alpha.c:2507
+#: vms-alpha.c:2674
 msgid "object module not error-free !"
 msgstr "Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ Ð�Ð• error-free !"
 
-#: vms-alpha.c:3831
+#: vms-alpha.c:4004
 #, c-format
 msgid "SEC_RELOC with no relocs in section %pA"
 msgstr "SEC_RELOC Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA"
 
-#: vms-alpha.c:3883 vms-alpha.c:4097
+#: vms-alpha.c:4056 vms-alpha.c:4271
 #, c-format
 msgid "size error in section %pA"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA"
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4216
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr "Ð½ÐµÑ‚Ð¸Ð¿Ð¸Ñ‡Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ALPHA_R_BSR"
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4257
 #, c-format
 msgid "unhandled relocation %s"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s"
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4619
 #, c-format
 msgid "unknown source command %d"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¸Ñ�Ñ…Ð¾Ð´Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %d"
 
-#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456
-#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501
-#: vms-alpha.c:4507
+#: vms-alpha.c:4771 vms-alpha.c:4776 vms-alpha.c:4781 vms-alpha.c:4786
+#: vms-alpha.c:4791 vms-alpha.c:4814 vms-alpha.c:4819 vms-alpha.c:4824
+#: vms-alpha.c:4829
 #, c-format
 msgid "%s not implemented"
 msgstr "%s Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4865
 #, c-format
 msgid "unknown line command %d"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ %d"
 
-#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059
-#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097
+#: vms-alpha.c:5304
+msgid "corrupt reloc record"
+msgstr "Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
+
+#: vms-alpha.c:5334 vms-alpha.c:5352 vms-alpha.c:5369 vms-alpha.c:5387
+#: vms-alpha.c:5400 vms-alpha.c:5412 vms-alpha.c:5425
 #, c-format
 msgid "unknown reloc %s + %s"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s + %s"
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5484
 #, c-format
 msgid "unknown reloc %s"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s"
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5498
 msgid "invalid section index in ETIR"
 msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² ETIR"
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5507
 msgid "relocation for non-REL psect"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½Ðµ-REL psect"
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5560
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ %s"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:5979
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) *Ð�Ð•Ð˜Ð—Ð’Ð•Ð¡Ð¢Ð�Ðž*"
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:6095
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (len=%u): "
 
-#: vms-alpha.c:5757
+#: vms-alpha.c:6100
 #, c-format
 msgid "   Error: The length is less than the length of an EMH record\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð¼ÐµÐ½ÑŒÑˆÐµ Ð´Ð»Ð¸Ð½Ñ‹ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ EMH\n"
 
-#: vms-alpha.c:5774
+#: vms-alpha.c:6117
 #, c-format
 msgid "   Error: The record length is less than the size of an EMH_MHD record\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð¼ÐµÐ½ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ EMH_MHD\n"
 
-#: vms-alpha.c:5777
+#: vms-alpha.c:6120
 #, c-format
 msgid "Module header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:6121
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   ÑƒÑ€Ð¾Ð²ÐµÐ½ÑŒ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ñ‹  : %u\n"
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:6122
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   Ð¼Ð°ÐºÑ�. Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð°Ð¿Ð¸Ñ�Ð¸: %u\n"
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:6128
 #, c-format
 msgid "   Error: The module name is missing\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð¸Ð¼Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5791
+#: vms-alpha.c:6134
 #, c-format
 msgid "   Error: The module name is too long\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð¸Ð¼Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5794
+#: vms-alpha.c:6137
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�         : %.*s\n"
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:6141
 #, c-format
 msgid "   Error: The module version is missing\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5804
+#: vms-alpha.c:6147
 #, c-format
 msgid "   Error: The module version is too long\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð»Ð¸Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:6150
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�      : %.*s\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:6153
 #, c-format
 msgid "   Error: The compile date is truncated\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ñ€ÐµÐ·Ð°Ð½Ð° Ð´Ð°Ñ‚Ð° ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ†Ð¸Ð¸\n"
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:6155
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   Ð´Ð°Ñ‚Ð° ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ†Ð¸Ð¸    : %.17s\n"
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:6160
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Ð�Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð½Ð¾Ð³Ð¾ Ñ�Ð·Ñ‹ÐºÐ°\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:6161
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ñ�Ð·Ñ‹ÐºÐ°     : %.*s\n"
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6165
 #, c-format
 msgid "Source Files Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¸Ñ�Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð²\n"
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6166
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   Ñ„Ð°Ð¹Ð»: %.*s\n"
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6170
 #, c-format
 msgid "Title Text Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ� Ñ‚ÐµÐºÑ�Ñ‚Ð°\n"
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6171
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ : %.*s\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6175
 #, c-format
 msgid "Copyright Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÐºÐ¾Ð³Ð¾ Ð¿Ñ€Ð°Ð²Ð°\n"
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6176
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÐºÐ¾Ðµ Ð¿Ñ€Ð°Ð²Ð¾: %.*s\n"
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6180
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿ emh %u\n"
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6190
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (len=%u):\n"
 
-#: vms-alpha.c:5852
+#: vms-alpha.c:6195
 #, c-format
 msgid "   Error: The length is less than the length of an EEOM record\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð¼ÐµÐ½ÑŒÑˆÐµ Ð´Ð»Ð¸Ð½Ñ‹ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ EEOM\n"
 
-#: vms-alpha.c:5856
+#: vms-alpha.c:6199
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr "   ÐºÐ¾Ð»-Ð²Ð¾ ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ñ… Ð¿Ð°Ñ€: %u\n"
 
-#: vms-alpha.c:5858
+#: vms-alpha.c:6201
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   Ð·Ð°Ð²ÐµÑ€ÑˆÑ‘Ð½Ð½Ñ‹Ð¹ ÐºÐ¾Ð´: %u\n"
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6205
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ flags: 0x%02x\n"
 
-#: vms-alpha.c:5863
+#: vms-alpha.c:6206
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ psect: %u\n"
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6208
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸   : 0x%08x\n"
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6217
 msgid " WEAK"
 msgstr " WEAK"
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6219
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6221
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6223 vms-alpha.c:6244
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6225
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6227
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6229
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6231
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6238
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6240
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6242
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6246
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6248
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6250
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6252
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6254
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6256
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6258
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6260
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6262
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6271
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (len=%u):\n"
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6286
 #, c-format
 msgid "  EGSD entry %2u (type: %u, len: %u): "
 msgstr "  Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD %2u (Ñ‚Ð¸Ð¿: %u, Ð´Ð»Ð¸Ð½Ð°: %u): "
 
-#: vms-alpha.c:5947 vms-alpha.c:6198
+#: vms-alpha.c:6292 vms-alpha.c:6587
 #, c-format
-msgid "   Error: length larger than remaining space in record\n"
-msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐ³Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° Ð² Ð·Ð°Ð¿Ð¸Ñ�Ð¸\n"
+msgid "   Erroneous length\n"
+msgstr "   ÐžÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°\n"
 
-#: vms-alpha.c:5959
+#: vms-alpha.c:6305
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr "PSC - Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°\n"
 
-#: vms-alpha.c:5960 vms-alpha.c:5977
+#: vms-alpha.c:6306 vms-alpha.c:6326
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ  : 2**%u\n"
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6307 vms-alpha.c:6327
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   Ñ„Ð»Ð°Ð³Ð¸      : 0x%04x"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6311
 #, c-format
 msgid "   alloc (len): %u (0x%08x)\n"
 msgstr "   alloc (len): %u (0x%08x)\n"
 
-#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072
+#: vms-alpha.c:6313 vms-alpha.c:6379 vms-alpha.c:6447
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ�       : %.*s\n"
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6325
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr "SPSC â€” Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±Ñ€Ð°Ð·Ð°\n"
 
-#: vms-alpha.c:5982
+#: vms-alpha.c:6331
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   alloc (len)   : %u (0x%08x)\n"
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6332
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¾Ð±Ñ€Ð°Ð·Ð° : 0x%08x\n"
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6334
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ symvec: 0x%08x\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6337
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ�          : %.*s\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6353
 #, c-format
 msgid "SYM - Global symbol definition\n"
 msgstr "SYM - Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²\n"
 
-#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101
+#: vms-alpha.c:6354 vms-alpha.c:6435 vms-alpha.c:6459 vms-alpha.c:6482
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   Ñ„Ð»Ð°Ð³Ð¸: 0x%04x"
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6357
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ psect: 0x%08x\n"
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6361
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ� ÐºÐ¾Ð´Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6363
 #, c-format
 msgid "   psect index for entry point : %u\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� psect Ð´Ð»Ñ� Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð²Ñ…Ð¾Ð´Ð°: %u\n"
 
-#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108
+#: vms-alpha.c:6366 vms-alpha.c:6466 vms-alpha.c:6489
 #, c-format
 msgid "   psect index : %u\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� psect: %u\n"
 
-#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110
+#: vms-alpha.c:6369 vms-alpha.c:6469 vms-alpha.c:6492
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ�        : %.*s\n"
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6377
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM - Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²\n"
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6392
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr "IDC - Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° Ñ†ÐµÐ»Ð¾Ñ�Ñ‚Ð½Ð¾Ñ�Ñ‚Ð¸\n"
 
-#: vms-alpha.c:6035
+#: vms-alpha.c:6393
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   Ñ„Ð»Ð°Ð³Ð¸         : 0x%08x"
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6397
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   id Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²Ð¸Ñ� : %x\n"
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6399
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   Ñ�ÐµÑ€ÑŒÑ‘Ð·Ð½Ð¾Ñ�Ñ‚ÑŒ Ð¾ÑˆÐ¸Ð±ÐºÐ¸: %x\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6403
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð¸: %.*s\n"
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6409
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ� Ð¾Ð±ÑŠÐµÐºÑ‚Ð°: %.*s\n"
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6418
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¹ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€: 0x%08x\n"
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6422
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   ascii-Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€: %.*s\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6434
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG - Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²\n"
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6438
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6440
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   Ñ‚Ð¾Ñ‡ÐºÐ° Ð²Ñ…Ð¾Ð´Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6442
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   proc descr : 0x%08x\n"
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6444
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� psect: %u\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6458
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV - Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²\n"
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6462
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   Ð²ÐµÐºÑ‚Ð¾Ñ€      : 0x%08x\n"
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6464 vms-alpha.c:6487
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ psect: %u\n"
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6481
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr "SYMM - Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ� Ð²ÐµÑ€Ñ�Ð¸ÐµÐ¹\n"
 
-#: vms-alpha.c:6104
+#: vms-alpha.c:6485
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ñ�Ð¸Ð¸: 0x%08x\n"
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6498
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ egsd-Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð¸Ð¿Ð° %u\n"
 
-#: vms-alpha.c:6150
+#: vms-alpha.c:6537
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr "    Ð¸Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ‚ÐµÐ»ÑŒ insn: 0x%08x\n"
 
-#: vms-alpha.c:6154
+#: vms-alpha.c:6541
 #, c-format
 msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
 msgstr "    1-Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� psect: %u, 1-Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x %08x\n"
 
-#: vms-alpha.c:6159
+#: vms-alpha.c:6546
 #, c-format
 msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
 msgstr "    2-Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� psect: %u, 2-Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x %08x\n"
 
-#: vms-alpha.c:6165
+#: vms-alpha.c:6552
 #, c-format
 msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
 msgstr "    3-Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� psect: %u, 3-Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x %08x\n"
 
-#: vms-alpha.c:6170
+#: vms-alpha.c:6557
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "    Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6569
 #, c-format
-msgid "  %s (len=%u+%u):\n"
-msgstr "  %s (len=%u+%u):\n"
+msgid "  %s (len=%u):\n"
+msgstr "  %s (Ð´Ð»Ð¸Ð½Ð°=%u):\n"
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6592
 #, c-format
-msgid "   (type: %3u, size: 4+%3u): "
-msgstr "   (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð°Ð·Ð¼ÐµÑ€: 4+%3u): "
+msgid "   (type: %3u, size: %3u): "
+msgstr "   (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %3u): "
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6598
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr "STA_GBL (Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ñ‚ÐµÐº) %.*s\n"
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6602
 #, c-format
-msgid "STA_LW (stack longword) 0x%08x\n"
-msgstr "STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²) 0x%08x\n"
+msgid "STA_LW (stack longword)"
+msgstr "STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²)"
 
-#: vms-alpha.c:6215
+#: vms-alpha.c:6608
 #, c-format
-msgid "STA_QW (stack quadword) 0x%08x %08x\n"
-msgstr "STA_QW (Ñ�Ñ‚ÐµÐº Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²) 0x%08x %08x\n"
+msgid "STA_QW (stack quadword)"
+msgstr "STO_QW (Ñ�Ñ‚ÐµÐº ÑƒÑ‡ÐµÑ‚Ð²ÐµÑ€Ñ‘Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²)"
 
-#: vms-alpha.c:6220
+#: vms-alpha.c:6615
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr "STA_PQ (Ñ�Ñ‚ÐµÐº psect Ð±Ð°Ð·Ð° + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6222
+#: vms-alpha.c:6618
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr "    psect: %u, Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x %08x\n"
 
-#: vms-alpha.c:6228
+#: vms-alpha.c:6624
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr "STA_LI (Ñ�Ñ‚ÐµÐº Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»Ð°)\n"
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6627
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr "STA_MOD (Ñ�Ñ‚ÐµÐº Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹)\n"
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6630
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr "STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ Ñ�Ñ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6238
+#: vms-alpha.c:6634
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ Ð±Ð°Ð¹Ñ‚)\n"
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6637
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾)\n"
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6640
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾)\n"
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6643
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ‡ÐµÑ‚Ð²ÐµÑ€Ñ‘Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾)\n"
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6650
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr "STO_IMMR (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ð¹ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€) %u Ð±Ð°Ð¹Ñ‚\n"
 
-#: vms-alpha.c:6260
+#: vms-alpha.c:6659
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ�) %.*s\n"
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6664
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr "STO_CA (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� ÐºÐ¾Ð´Ð°) %.*s\n"
 
-#: vms-alpha.c:6268
+#: vms-alpha.c:6668
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6671
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6674
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr "STO_OFF (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð½Ð° psect)\n"
 
-#: vms-alpha.c:6280
+#: vms-alpha.c:6681
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr "STO_IMM (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ñ�Ñ‚Ð²ÐµÐ½Ð½Ð¾) %u Ð±Ð°Ð¹Ñ‚\n"
 
-#: vms-alpha.c:6287
+#: vms-alpha.c:6690
 #, c-format
 msgid "STO_GBL_LW (store global longword) %.*s\n"
 msgstr "STO_GBL_LW (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾) %.*s\n"
 
-#: vms-alpha.c:6291
+#: vms-alpha.c:6694
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr "STO_OFF (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ LP Ñ� Ñ�Ð¸Ð³Ð½Ð°Ñ‚ÑƒÑ€Ð¾Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹)\n"
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6697
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr "STO_BR_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ) *todo*\n"
 
-#: vms-alpha.c:6297
+#: vms-alpha.c:6700
 #, c-format
 msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
 msgstr "STO_BR_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ) *todo*\n"
 
-#: vms-alpha.c:6301
+#: vms-alpha.c:6704
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr "OPR_NOP (Ð½ÐµÑ‚ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸)\n"
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6707
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6710
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (Ð²Ñ‹Ñ‡Ð¸Ñ‚Ð°Ð½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6713
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (ÑƒÐ¼Ð½Ð¾Ð¶ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6716
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (Ð´ÐµÐ»ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6719
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¸)\n"
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6722
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð²ÐºÐ»ÑŽÑ‡Ð°ÑŽÑ‰ÐµÐµ Ð¸Ð»Ð¸)\n"
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6725
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð½Ðµ Ð²ÐºÐ»ÑŽÑ‡Ð°ÑŽÑ‰ÐµÐµ Ð¸Ð»Ð¸)\n"
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6728
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (Ð¸Ð½Ð²ÐµÑ€Ñ�Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6731
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6734
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (Ð¿Ð¾Ð»Ðµ Ð²Ñ�Ñ‚Ð°Ð²ÐºÐ¸)\n"
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6737
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (Ð°Ñ€Ð¸Ñ„Ð¼ÐµÑ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð´Ð²Ð¸Ð³)\n"
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6740
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (Ð±ÐµÐ·Ð·Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¹ Ñ�Ð´Ð²Ð¸Ð³)\n"
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6743
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (Ñ†Ð¸ÐºÐ»Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð´Ð²Ð¸Ð³)\n"
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6746
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (Ð²Ñ‹Ð±Ð¾Ñ€)\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6749
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr "OPR_REDEF (Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð² Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸)\n"
 
-#: vms-alpha.c:6349
+#: vms-alpha.c:6752
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr "OPR_REDEF (Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»Ð°)\n"
 
-#: vms-alpha.c:6353
+#: vms-alpha.c:6756
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr "STC_LP (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ð°Ñ� Ð¿Ð°Ñ€Ð°)\n"
 
-#: vms-alpha.c:6357
+#: vms-alpha.c:6760
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr "STC_LP_PSB (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ð°Ñ� Ð¿Ð°Ñ€Ð° + Ñ�Ð¸Ð³Ð½Ð°Ñ‚ÑƒÑ€Ð°)\n"
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:6764
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð°: %.*s\n"
 
-#: vms-alpha.c:6362
+#: vms-alpha.c:6771
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   Ñ�Ð¸Ð³Ð½Ð°Ñ‚ÑƒÑ€Ð°: %.*s\n"
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6777
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6780
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹: %.*s\n"
 
-#: vms-alpha.c:6371
+#: vms-alpha.c:6785
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr "STC_GCA (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð°)\n"
 
-#: vms-alpha.c:6373
+#: vms-alpha.c:6788
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, Ð¸Ð¼Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹: %.*s\n"
 
-#: vms-alpha.c:6377
+#: vms-alpha.c:6793
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr "STC_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6380
+#: vms-alpha.c:6797
 #, c-format
 msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, psect: %u, Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x %08x\n"
 
-#: vms-alpha.c:6387
+#: vms-alpha.c:6804
 #, c-format
 msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
 msgstr "STC_NOP_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ NOP Ð¿Ð¾ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ)\n"
 
-#: vms-alpha.c:6391
+#: vms-alpha.c:6808
 #, c-format
 msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
 msgstr "STC_NOP_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ NOP Ð¿Ð¾ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6395
+#: vms-alpha.c:6812
 #, c-format
 msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
 msgstr "STC_BSR_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ BSR Ð¿Ð¾ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ)\n"
 
-#: vms-alpha.c:6399
+#: vms-alpha.c:6816
 #, c-format
 msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
 msgstr "STC_BSR_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ BSR Ð¿Ð¾ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6403
+#: vms-alpha.c:6820
 #, c-format
 msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
 msgstr "STC_LDA_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ LDA Ð¿Ð¾ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ)\n"
 
-#: vms-alpha.c:6407
+#: vms-alpha.c:6824
 #, c-format
 msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
 msgstr "STC_LDA_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ LDA Ð¿Ð¾ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6411
+#: vms-alpha.c:6828
 #, c-format
 msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
 msgstr "STC_BOH_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ BOH Ð¿Ð¾ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ)\n"
 
-#: vms-alpha.c:6415
+#: vms-alpha.c:6832
 #, c-format
 msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
 msgstr "STC_BOH_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ BOH Ð¿Ð¾ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6420
+#: vms-alpha.c:6837
 #, c-format
 msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
 msgstr "STC_NBH_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ Ð¸Ð»Ð¸ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ðµ Ð¿Ð¾ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ)\n"
 
-#: vms-alpha.c:6424
+#: vms-alpha.c:6841
 #, c-format
 msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
 msgstr "STC_NBH_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ Ð¸Ð»Ð¸ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ðµ Ð¿Ð¾ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6428
+#: vms-alpha.c:6845
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr "CTL_SETRB (ÑƒÑ�Ñ‚Ð°Ð½Ð¾Ð²ÐºÐ° Ð±Ð°Ð·Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6434
+#: vms-alpha.c:6851
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr "CTL_AUGRB (Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð±Ð°Ð·Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�) %u\n"
 
-#: vms-alpha.c:6438
+#: vms-alpha.c:6856
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6859
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6862
 #, c-format
 msgid "CTL_STKDL (stack defined location)\n"
 msgstr "CTL_STKDL (Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�ÐµÐ¼Ð¾Ðµ Ñ�Ñ‚ÐµÐºÐ¾Ð¼)\n"
 
-#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997
+#: vms-alpha.c:6865 vms-alpha.c:7293 vms-alpha.c:7454
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð¾*\n"
 
-#: vms-alpha.c:6477 vms-alpha.c:6516
+#: vms-alpha.c:6890
 #, c-format
-msgid "cannot read GST record length\n"
-msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð´Ð»Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST\n"
+msgid "cannot read GST record header\n"
+msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST\n"
 
 #. Ill-formed.
-#: vms-alpha.c:6498
+#: vms-alpha.c:6913
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ EMH Ð² Ð¿ÐµÑ€Ð²Ð¾Ð¹ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST\n"
 
-#: vms-alpha.c:6524
-#, c-format
-msgid "cannot read GST record header\n"
-msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST\n"
-
-#: vms-alpha.c:6537
+#: vms-alpha.c:6937
 #, c-format
-msgid " corrupted GST\n"
-msgstr " Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ GST\n"
+msgid "corrupted GST\n"
+msgstr "Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ GST\n"
 
-#: vms-alpha.c:6545
+#: vms-alpha.c:6950
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�ÑŒ GST\n"
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:6977
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr " Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ EOBJ %u\n"
 
-#: vms-alpha.c:6598
+#: vms-alpha.c:7002
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr "  Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð±Ð¸Ñ‚: %u, Ð±Ð°Ð·Ð¾Ð²Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x\n"
 
-#: vms-alpha.c:6612
+#: vms-alpha.c:7016
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr "   bitmap: 0x%08x (Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº: %u):\n"
 
-#: vms-alpha.c:6619
+#: vms-alpha.c:7023
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:7050
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  Ð¾Ð±Ñ€Ð°Ð· %u (%u Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²)\n"
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:7056
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: 0x%08x\n"
 
-#: vms-alpha.c:6673
+#: vms-alpha.c:7079
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  Ð¾Ð±Ñ€Ð°Ð· %u (%u Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²), Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�:\n"
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:7086
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:7212
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 Ð±Ð¸Ñ‚Ð° *Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð¾*\n"
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:7217
 #, c-format
 msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
 msgstr "ÐºÐ»Ð°Ñ�Ñ�: %u, dtype: %u, Ð´Ð»Ð¸Ð½Ð°: %u, ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ: 0x%08x\n"
 
-#: vms-alpha.c:6818
+#: vms-alpha.c:7228
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr "Ð½ÐµÑ�Ð²Ñ�Ð·Ð½Ñ‹Ð¹ Ð¼Ð°Ñ�Ñ�Ð¸Ð² %s\n"
 
-#: vms-alpha.c:6823
+#: vms-alpha.c:7235
 #, c-format
 msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
 msgstr "dimct: %u, aflags: 0x%02x, Ñ†Ð¸Ñ„Ñ€: %u, ÑˆÐºÐ°Ð»Ð°: %u\n"
 
-#: vms-alpha.c:6828
+#: vms-alpha.c:7240
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "arsize: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7244
 #, c-format
 msgid "Strides:\n"
 msgstr "Ð¨Ð°Ð³Ð¸:\n"
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7258
 #, c-format
 msgid "Bounds:\n"
 msgstr "Ð“Ñ€Ð°Ð½Ð¸Ñ†Ñ‹:\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7265
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr "[%u]: Ð½Ð¸Ð¶Ð½Ñ�Ñ�: %u, Ð²ÐµÑ€Ñ…Ð½Ñ�Ñ�: %u\n"
 
-#: vms-alpha.c:6860
+#: vms-alpha.c:7279
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr "Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ð±Ð¸Ñ‚ %s\n"
 
-#: vms-alpha.c:6865
+#: vms-alpha.c:7286
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "Ð±Ð°Ð·Ð°: %u, Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ�: %u\n"
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7312
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "vflags: 0x%02x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: 0x%08x "
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7319
 #, c-format
 msgid "(no value)\n"
 msgstr "(Ð½ÐµÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7322
 #, c-format
 msgid "(not active)\n"
 msgstr "(Ð½Ðµ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾)\n"
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7325
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(Ð½Ðµ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¾)\n"
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7328
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€)\n"
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7333
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(ÐºÐ¾Ð½ÐµÑ‡Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7336
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(Ð´Ð°Ð»ÐµÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸)\n"
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7339
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(Ð¿Ð¾ Ð±Ð¸Ñ‚Ð¾Ð²Ð¾Ð¼Ñƒ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %u)\n"
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7343
 #, c-format
 msgid "(reg: %u, disp: %u, indir: %u, kind: "
 msgstr "(reg: %u, disp: %u, indir: %u, kind: "
 
-#: vms-alpha.c:6922
+#: vms-alpha.c:7350
 msgid "literal"
 msgstr "Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7353
 msgid "address"
 msgstr "Ð°Ð´Ñ€ÐµÑ�"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7356
 msgid "desc"
 msgstr "Ð¾Ð¿Ð¸Ñ�"
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7359
 msgid "reg"
 msgstr "Ñ€ÐµÐ³"
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7380
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr "len: %2u, kind: %2u "
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7388
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr "Ð°Ñ‚Ð¾Ð¼Ð°Ñ€Ð½Ð¾, Ñ‚Ð¸Ð¿=0x%02x %s\n"
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7393
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr "ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x\n"
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7397
 #, c-format
 msgid "typed pointer\n"
 msgstr "Ñ‚Ð¸Ð¿Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ\n"
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7401
 #, c-format
 msgid "pointer\n"
 msgstr "ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ\n"
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7412
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr "Ð¼Ð°Ñ�Ñ�Ð¸Ð², Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, bitmap: "
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7427
 #, c-format
 msgid "array descriptor:\n"
 msgstr "Ð¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÑŒ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð°:\n"
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7438
 #, c-format
 msgid "type spec for element:\n"
 msgstr "Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ� Ñ‚Ð¸Ð¿Ð° Ð´Ð»Ñ� Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð°:\n"
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7440
 #, c-format
 msgid "type spec for subscript %u:\n"
 msgstr "Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ� Ñ‚Ð¸Ð¿Ð° Ð´Ð»Ñ� subscript %u:\n"
 
-#: vms-alpha.c:7008
+#: vms-alpha.c:7465
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸:\n"
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7476
 #, c-format
 msgid "cannot read DST header\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DST\n"
 
-#: vms-alpha.c:7025
+#: vms-alpha.c:7482
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr " Ñ‚Ð¸Ð¿: %3u, Ð´Ð»Ð¸Ð½Ð°: %3u (Ð¿Ð¾ 0x%08x): "
 
-#: vms-alpha.c:7039
+#: vms-alpha.c:7499
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð» DST\n"
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7543
 #, c-format
 msgid "standard data: %s\n"
 msgstr "Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ: %s\n"
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7547 vms-alpha.c:7671
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7555
 #, c-format
 msgid "modbeg\n"
 msgstr "modbeg\n"
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7559
 #, c-format
 msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
 msgstr "   Ñ„Ð»Ð°Ð³Ð¸: %d, Ñ�Ð·Ñ‹Ðº: %u, Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u\n"
 
-#: vms-alpha.c:7100 vms-alpha.c:7374
+#: vms-alpha.c:7569 vms-alpha.c:7935
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   Ð¸Ð¼Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�: %.*s\n"
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7576
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ‚Ð¾Ñ€   : %.*s\n"
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7583
 #, c-format
 msgid "modend\n"
 msgstr "modend\n"
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7590
 msgid "rtnbeg\n"
 msgstr "rtnbeg\n"
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7594
 #, c-format
 msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
 msgstr "    Ñ„Ð»Ð°Ð³Ð¸: %u, Ð°Ð´Ñ€ÐµÑ�: 0x%08x, pd-Ð°Ð´Ñ€ÐµÑ�: 0x%08x\n"
 
-#: vms-alpha.c:7122
+#: vms-alpha.c:7603
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    Ð¸Ð¼Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹: %.*s\n"
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7614
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "rtnend: Ñ€Ð°Ð·Ð¼ÐµÑ€ 0x%08x\n"
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7624
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr "Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð°Ð´Ñ€ÐµÑ� bkpt 0x%08x\n"
 
-#: vms-alpha.c:7147
+#: vms-alpha.c:7634
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "Ñ�Ð¿Ð¸Ð»Ð¾Ð³: Ñ„Ð»Ð°Ð³Ð¸: %u, Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº: %u\n"
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7649
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr "blkbeg: Ð°Ð´Ñ€ÐµÑ�: 0x%08x, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7166
+#: vms-alpha.c:7661
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "blkend: Ñ€Ð°Ð·Ð¼ÐµÑ€: 0x%08x\n"
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7667
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "typspec (Ð´Ð»Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7683
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "septyp, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7699
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "recbeg: Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7703
 #, c-format
 msgid "    len: %u bits\n"
 msgstr "    Ð´Ð»Ð¸Ð½Ð°: %u Ð±Ð¸Ñ‚\n"
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7709
 #, c-format
 msgid "recend\n"
 msgstr "recend\n"
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7714
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr "enumbeg, Ð´Ð»Ð¸Ð½Ð°: %u, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7203
+#: vms-alpha.c:7720
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "enumelt, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7726
 #, c-format
 msgid "enumend\n"
 msgstr "enumend\n"
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7733
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr "Ð¼ÐµÑ‚ÐºÐ°, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7736
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�: 0x%08x\n"
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7748
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "Ð½ÐµÑ�Ð¼ÐµÐ¶Ð½Ñ‹Ð¹ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ (nbr: %u)\n"
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7755
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    Ð°Ð´Ñ€ÐµÑ�: 0x%08x, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u\n"
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7766
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ (Ð´Ð»Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7785
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7794
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7802
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7810
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7818
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7825
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7832
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7839
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7845
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7852
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7854
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7861
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7863
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7869
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "delta pc +%-4d"
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7873
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x Ñ�Ñ‚Ñ€Ð¾ÐºÐ°: %5u\n"
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7878
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ�* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u\n"
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7893
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "Ð¸Ñ�Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº (Ð´Ð»Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7912
 #, c-format
 msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
 msgstr "   declfile: Ð´Ð»Ð¸Ð½Ð°: %u, Ñ„Ð»Ð°Ð³Ð¸: %u, fileid: %u\n"
 
-#: vms-alpha.c:7362
+#: vms-alpha.c:7917
 #, c-format
 msgid "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 msgstr "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 
-#: vms-alpha.c:7371
+#: vms-alpha.c:7929
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ� Ñ„Ð°Ð¹Ð»Ð°   : %.*s\n"
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7945
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7952 vms-alpha.c:7959
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7966 vms-alpha.c:7973
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:7980 vms-alpha.c:7987
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:7991
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:7995
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ�* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u\n"
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:8007
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "*Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹* Ñ‚Ð¸Ð¿ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� %u\n"
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:8039
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EIHD\n"
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:8043
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr "EIHD: (Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, nbr Ð±Ð»Ð¾ÐºÐ¾Ð²: %u)\n"
 
-#: vms-alpha.c:7470
+#: vms-alpha.c:8047
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " majorid: %u, minorid: %u\n"
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:8055
 msgid "executable"
 msgstr "Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:8058
 msgid "linkable image"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ð¹ Ð¾Ð±Ñ€Ð°Ð·"
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:8065
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " Ñ‚Ð¸Ð¿ Ð¾Ð±Ñ€Ð°Ð·Ð°: %u (%s)"
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:8071
 msgid "native"
 msgstr "Ñ€Ð¾Ð´Ð½Ð¾Ð¹"
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:8074
 msgid "CLI"
 msgstr "CLI"
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:8081
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿: %u (%s)\n"
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:8088
 #, c-format
 msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 msgstr " Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 
-#: vms-alpha.c:7515
+#: vms-alpha.c:8092
 #, c-format
 msgid " fixup info rva: "
 msgstr " fixup info rva: "
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:8094
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð²ÐµÐºÑ‚Ð¾Ñ€ rva: "
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:8097
 #, c-format
 msgid ""
 "\n"
@@ -7250,766 +8098,935 @@ msgstr ""
 "\n"
 " Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð° Ð²ÐµÑ€Ñ�Ð¸Ð¹: %u\n"
 
-#: vms-alpha.c:7525
+#: vms-alpha.c:8102
 #, c-format
 msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
 msgstr " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
 
-#: vms-alpha.c:7531
+#: vms-alpha.c:8108
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " Ñ„Ð»Ð°Ð³Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ°: %08x:"
 
-#: vms-alpha.c:7562
+#: vms-alpha.c:8139
 #, c-format
 msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
 msgstr " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
 
-#: vms-alpha.c:7568
+#: vms-alpha.c:8145
 #, c-format
 msgid " BPAGE: %u"
 msgstr " BPAGE: %u"
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:8152
 #, c-format
 msgid ", ext fixup offset: %u, no_opt psect off: %u"
 msgstr ", ext fixup offset: %u, no_opt psect off: %u"
 
-#: vms-alpha.c:7578
+#: vms-alpha.c:8155
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", Ð¿Ñ�ÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼: %u\n"
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:8163
 #, c-format
 msgid "system version array information:\n"
 msgstr "Ð¼Ð°Ñ�Ñ�Ð¸Ð² Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹:\n"
 
-#: vms-alpha.c:7590
+#: vms-alpha.c:8167
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº EIHVN\n"
 
-#: vms-alpha.c:7600
+#: vms-alpha.c:8177
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð²ÐµÑ€Ñ�Ð¸ÑŽ EIHVN\n"
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:8180
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:8184
 msgid "BASE_IMAGE       "
 msgstr "BASE_IMAGE       "
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:8187
 msgid "MEMORY_MANAGEMENT"
 msgstr "MEMORY_MANAGEMENT"
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:8190
 msgid "IO               "
 msgstr "IO               "
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:8193
 msgid "FILES_VOLUMES    "
 msgstr "FILES_VOLUMES    "
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:8196
 msgid "PROCESS_SCHED    "
 msgstr "PROCESS_SCHED    "
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:8199
 msgid "SYSGEN           "
 msgstr "SYSGEN           "
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:8202
 msgid "CLUSTERS_LOCKMGR "
 msgstr "CLUSTERS_LOCKMGR "
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:8205
 msgid "LOGICAL_NAMES    "
 msgstr "LOGICAL_NAMES    "
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:8208
 msgid "SECURITY         "
 msgstr "SECURITY         "
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:8211
 msgid "IMAGE_ACTIVATOR  "
 msgstr "IMAGE_ACTIVATOR  "
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:8214
 msgid "NETWORKS         "
 msgstr "NETWORKS         "
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:8217
 msgid "COUNTERS         "
 msgstr "COUNTERS         "
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:8220
 msgid "STABLE           "
 msgstr "STABLE           "
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:8223
 msgid "MISC             "
 msgstr "MISC             "
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:8226
 msgid "CPU              "
 msgstr "CPU              "
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:8229
 msgid "VOLATILE         "
 msgstr "VOLATILE         "
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:8232
 msgid "SHELL            "
 msgstr "SHELL            "
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:8235
 msgid "POSIX            "
 msgstr "POSIX            "
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:8238
 msgid "MULTI_PROCESSING "
 msgstr "MULTI_PROCESSING "
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:8241
 msgid "GALAXY           "
 msgstr "GALAXY           "
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:8244
 msgid "*unknown*        "
 msgstr "*Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾*        "
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:8260 vms-alpha.c:8534
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EIHA\n"
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:8263
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°:  (Ñ€Ð°Ð·Ð¼ÐµÑ€=%u)\n"
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:8266
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr " ÐŸÐµÑ€Ð²Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7693
+#: vms-alpha.c:8270
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr " Ð’Ñ‚Ð¾Ñ€Ð¾Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7697
+#: vms-alpha.c:8274
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr " Ð¢Ñ€ÐµÑ‚Ð¸Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:8278
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr " Ð§ÐµÑ‚Ð²Ñ‘Ñ€Ñ‚Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7705
+#: vms-alpha.c:8282
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr " ÐžÐ±Ñ‰Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7716
+#: vms-alpha.c:8293
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EIHI\n"
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:8297
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr "Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u)\n"
 
-#: vms-alpha.c:7723
+#: vms-alpha.c:8300
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " Ð¸Ð¼Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°       : %.*s\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:8302
 #, c-format
 msgid " link time        : %s\n"
 msgstr " Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ : %s\n"
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:8304
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " Ð¸Ð´ÐµÐ½Ñ‚-Ñ€ Ð¾Ð±Ñ€Ð°Ð·Ð°      : %.*s\n"
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:8306
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " Ð¸Ð´ÐµÐ½Ñ‚-Ñ€ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:8308
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " Ð¸Ð´ÐµÐ½Ñ‚-Ñ€ Ñ�Ð±Ð¾Ñ€ÐºÐ¸ Ð¾Ð±Ñ€Ð°Ð·Ð°: %.*s\n"
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:8318
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EIHS\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:8322
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² & Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u)\n"
 
-#: vms-alpha.c:7751
+#: vms-alpha.c:8328
 #, c-format
 msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
 msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: vbn: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u (0x%x)\n"
 
-#: vms-alpha.c:7756
+#: vms-alpha.c:8333
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr " Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: vbn: %u, Ð·Ð°Ð¿Ð¸Ñ�ÐµÐ¹: %u\n"
 
-#: vms-alpha.c:7761
+#: vms-alpha.c:8338
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹: vbn: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u\n"
 
-#: vms-alpha.c:7774
+#: vms-alpha.c:8351
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EISD\n"
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:8362
 #, c-format
 msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
 msgstr "Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: %u)\n"
 
-#: vms-alpha.c:7793
+#: vms-alpha.c:8370
 #, c-format
 msgid " section: base: 0x%08x%08x size: 0x%08x\n"
 msgstr " Ñ€Ð°Ð·Ð´ÐµÐ»: Ð±Ð°Ð·Ð°: 0x%08x%08x Ñ€Ð°Ð·Ð¼ÐµÑ€: 0x%08x\n"
 
-#: vms-alpha.c:7798
+#: vms-alpha.c:8375
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " Ñ„Ð»Ð°Ð³Ð¸: 0x%04x"
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8413
 #, c-format
 msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
 msgstr " vbn: %u, pfc: %u, matchctl: %u Ñ‚Ð¸Ð¿: %u ("
 
-#: vms-alpha.c:7842
+#: vms-alpha.c:8419
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8422
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8425
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8428
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8431
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8434
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8440
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8443
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " Ð¸Ð´ÐµÐ½-Ñ€: 0x%08x, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8453
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DMT\n"
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8457
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹:\n"
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8466
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DMT\n"
 
-#: vms-alpha.c:7895
+#: vms-alpha.c:8472
 #, c-format
 msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
 msgstr " Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¼Ð¾Ð´ÑƒÐ»Ñ�: 0x%08x, Ñ€Ð°Ð·Ð¼ÐµÑ€: 0x%08x, (%u psects)\n"
 
-#: vms-alpha.c:7905
+#: vms-alpha.c:8482
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DMT psect\n"
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8486
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr "  Ð½Ð°Ñ‡Ð°Ð»Ð¾ psect: 0x%08x, Ð´Ð»Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:7922
+#: vms-alpha.c:8499
 #, c-format
 msgid "cannot read DST\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DST\n"
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8509
 #, c-format
 msgid "cannot read GST\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ GST\n"
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8513
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²:\n"
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8540
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr "Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ‚Ð¾Ñ€ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u)\n"
 
-#: vms-alpha.c:7969
+#: vms-alpha.c:8544
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  iaflink : 0x%08x %08x\n"
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8548
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  fixuplnk: 0x%08x %08x\n"
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8551
 #, c-format
 msgid "  size : %u\n"
 msgstr "  Ñ€Ð°Ð·Ð¼ÐµÑ€: %u\n"
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8553
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  Ñ„Ð»Ð°Ð³Ð¸: 0x%08x\n"
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8558
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8563
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8568
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8571
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8575
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8578
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8581
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8583
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8590
 #, c-format
 msgid " Shareable images:\n"
 msgstr " ÐžÐ±Ñ‰Ð¸Ðµ Ð¾Ð±Ñ€Ð°Ð·Ñ‹:\n"
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8598
 #, c-format
 msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
 msgstr "  %u: Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, Ñ„Ð»Ð°Ð³Ð¸: 0x%02x, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:8028
+#: vms-alpha.c:8605
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ñ… Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹:\n"
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8611
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ñ… Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹:\n"
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8617
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr " Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾ Ñ�Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ .address:\n"
 
-#: vms-alpha.c:8043
+#: vms-alpha.c:8622
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr " Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾ Ñ�Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ .address:\n"
 
-#: vms-alpha.c:8048
+#: vms-alpha.c:8627
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr " Ð¡Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ðµ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð°Ð´Ñ€ÐµÑ�Ð° ÐºÐ¾Ð´Ð°:\n"
 
-#: vms-alpha.c:8053
+#: vms-alpha.c:8632
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr " Ð¡Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ðµ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ñ… Ð¿Ð°Ñ€:\n"
 
-#: vms-alpha.c:8062
+#: vms-alpha.c:8640
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ (%u Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²):\n"
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8649
 #, c-format
 msgid "  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
 msgstr "  Ð±Ð°Ð·Ð°: 0x%08x %08x, Ñ€Ð°Ð·Ð¼ÐµÑ€: 0x%08x, prot: 0x%08x "
 
 #. FIXME: we do not yet support relocatable link.  It is not obvious
 #. how to do it for debug infos.
-#: vms-alpha.c:8908
+#: vms-alpha.c:9526
 msgid "%P: relocatable link is not supported\n"
 msgstr "%P: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
 
-#: vms-alpha.c:8979
+#: vms-alpha.c:9597
 #, c-format
 msgid "%P: multiple entry points: in modules %pB and %pB\n"
 msgstr "%P: Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ñ‚Ð¾Ñ‡ÐµÐº Ð²Ñ…Ð¾Ð´Ð°: Ð² Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… %pB Ð¸ %pB\n"
 
-#: vms-lib.c:1445
+#: vms-lib.c:1530
 #, c-format
 msgid "could not open shared image '%s' from '%s'"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð· Â«%sÂ» Ð¸Ð· Â«%sÂ»"
 
-#: vms-misc.c:361
+#: vms-misc.c:370
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr "Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ� Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚"
 
-#: vms-misc.c:366
+#: vms-misc.c:375
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr "Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ�Ð¾ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚"
 
-#: xcofflink.c:832
+#: xcofflink.c:889
 #, c-format
 msgid "%pB: XCOFF shared object when not producing XCOFF output"
 msgstr "%pB: Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ XCOFF Ð±ÐµÐ· Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð° XCOFF"
 
-#: xcofflink.c:853
+#: xcofflink.c:910
 #, c-format
 msgid "%pB: dynamic object with no .loader section"
 msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ Ð±ÐµÐ· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .loader"
 
-#: xcofflink.c:1413
+#: xcofflink.c:1492
 #, c-format
 msgid "%pB: `%s' has line numbers but no enclosing section"
 msgstr "%pB: Â«%sÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾Ðº, Ð½Ð¾ Ð² Ð¾Ð±Ñ€Ð°Ð¼Ð»Ñ�ÑŽÑ‰ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ"
 
-#: xcofflink.c:1466
+#: xcofflink.c:1548
 #, c-format
 msgid "%pB: class %d symbol `%s' has no aux entries"
 msgstr "%pB: ÐºÐ»Ð°Ñ�Ñ� %d Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² aux"
 
-#: xcofflink.c:1489
+#: xcofflink.c:1571
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized csect type %d"
 msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ csect: %d"
 
-#: xcofflink.c:1502
+#: xcofflink.c:1584
 #, c-format
 msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
 msgstr "%pB: Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» XTY_ER Â«%sÂ»: ÐºÐ»Ð°Ñ�Ñ� %d scnum %d scnlen %<PRId64>"
 
-#: xcofflink.c:1533
+#: xcofflink.c:1615
 #, c-format
-msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
-msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð¾Ð¼ %d scnlen %<PRId64>"
+msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRIu64>"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð¾Ð¼ %d scnlen %<PRIu64>"
 
-#: xcofflink.c:1680
+#: xcofflink.c:1750
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr "%pB: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ TOC Â«%sÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ R_TLSML Ð½Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‰ÐµÐµ Ð½Ð° Ñ�ÐµÐ±Ñ�"
+
+#: xcofflink.c:1784
 #, c-format
 msgid "%pB: csect `%s' not in enclosing section"
 msgstr "%pB: csect Â«%sÂ» Ð½Ðµ Ð² Ð¾Ð±Ñ€Ð°Ð¼Ð»Ñ�ÑŽÑ‰ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ"
 
-#: xcofflink.c:1788
+#: xcofflink.c:1893
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ð¹ XTY_LD Â«%sÂ»"
 
-#: xcofflink.c:2109
+#: xcofflink.c:2236
 #, c-format
 msgid "%pB: reloc %s:%<PRId64> not in csect"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s:%<PRId64> Ð½Ðµ Ð² csect"
 
-#: xcofflink.c:3196
+#: xcofflink.c:3345
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
+
+#: xcofflink.c:3393
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: Ð½ÐµÑ‚ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
 
-#: xcofflink.c:3301
+#: xcofflink.c:3502
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: xcofflink.c:3680
+#: xcofflink.c:3850
 msgid "error: undefined symbol __rtinit"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» __rtinit"
 
-#: xcofflink.c:4060
+#: xcofflink.c:4863
+#, c-format
+msgid "%pB: Unable to find a stub csect in rangeof relocation at %#<PRIx64> targeting'%s'"
+msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÑƒ csect Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ rangeof Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>, ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‰ÐµÐ¼Ñƒ Ð½Ð° Â«%sÂ»"
+
+#: xcofflink.c:4892
+#, c-format
+msgid "%pB: Cannot create stub entry '%s'"
+msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Â«%sÂ»"
+
+#: xcofflink.c:5012
+msgid "TOC overflow during stub generation; try -mminimal-toc when compiling"
+msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ TOC Ð¿Ñ€Ð¸ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� -mminimal-toc"
+
+#: xcofflink.c:5080
 #, c-format
 msgid "%pB: loader reloc in unrecognized section `%s'"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ° Ð² Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%sÂ»"
 
-#: xcofflink.c:4072
+#: xcofflink.c:5092
 #, c-format
 msgid "%pB: `%s' in loader reloc but not loader sym"
 msgstr "%pB: Â«%sÂ» Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ°, Ð½Ð¾ Ð½Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ°"
 
-#: xcofflink.c:4089
+#: xcofflink.c:5109
 #, c-format
 msgid "%pB: loader reloc in read-only section %pA"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA, Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð¼ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�"
 
-#: xcofflink.c:5113
+#: xcofflink.c:6182
 #, c-format
 msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ TOC: %<PRIx64> > 0x10000; Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� -mminimal-toc"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5031
+#: xcofflink.c:7298
+#, c-format
+msgid "Unable to link input file: %s"
+msgstr "Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»: %s"
+
+#: xtensa-dynconfig.c:60
+msgid "Unable to load DLL."
+msgstr "Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ DLL."
+
+#: xtensa-dynconfig.c:86
+#, c-format
+msgid "%s is defined but could not be loaded: %s"
+msgstr "%s Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½, Ð½Ð¾ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½: %s"
+
+#: xtensa-dynconfig.c:102
+#, c-format
+msgid "%s is loaded but symbol \"%s\" is not found: %s"
+msgstr "%s Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½, Ð½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð» \"%s\" Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½: %s"
+
+#: xtensa-dynconfig.c:115
+#, c-format
+msgid "%s is defined but plugin support is disabled"
+msgstr "%s Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½, Ð½Ð¾ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°"
+
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2893 elfnn-riscv.c:5518
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»: 0x%02x"
+
+#: elfnn-aarch64.c:5425
 #, c-format
 msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 835769 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5112
+#: elfnn-aarch64.c:5517
 #, c-format
 msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5641
+#: elfnn-aarch64.c:5530
+#, c-format
+msgid "%pB: error: erratum 843419 immediate 0x%<PRIx64> out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ñ…Ð¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ñ�Ñ‚Ð²ÐµÐ½Ð½Ð¾Ð³Ð¾ 0x%<PRIx64> Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð°Ð¼Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° Ð´Ð»Ñ� ADR (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð») Ð¸ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� --fix-cortex-a53-843419=adr. Ð’Ð¼ÐµÑ�Ñ‚Ð¾ Ñ�Ñ‚Ð¾Ð³Ð¾ Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --fix-cortex-a53-843419=full"
+
+#: elfnn-aarch64.c:6065
 #, c-format
 msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ», ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ñ€Ð¸Ð²Ñ�Ð·Ð°Ð½ Ð¸Ð·Ð²Ð½Ðµ, Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5732
+#: elfnn-aarch64.c:6085
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr "%pB: Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾ ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
+
+#: elfnn-aarch64.c:6173
 #, c-format
 msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
 msgstr "%pB: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð±ÑƒÐ´ÐµÑ‚ Ñ€Ð°Ð²Ð½Ð° NULL, ÐµÑ�Ð»Ð¸ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6830
+#: elfnn-aarch64.c:6286 elfnn-aarch64.c:6323
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS %s Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
+
+#: elfnn-aarch64.c:7314
 msgid "too many GOT entries for -fpic, please recompile with -fPIC"
 msgstr "Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² GOT Ð´Ð»Ñ� -fpic: Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6858
+#: elfnn-aarch64.c:7342
 msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
 msgstr "Ð¾Ð´Ð½Ð¾Ð¹ Ð¸Ð· Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ Ñ�Ñ‚Ð¾Ð¹ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾, Ñ‡Ñ‚Ð¾ Ð² ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼ ÐºÐ¾Ð´Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ñ� Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸ÐµÐ¼, Ñ‡ÐµÐ¼ Ð±Ñ‹Ð»Ð¾ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¾ Ð² ÐµÐ³Ð¾ Ð¼ÐµÑ�Ñ‚Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ�"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7443
+#: elfnn-aarch64.c:7909
 #, c-format
 msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:182
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:217
+#: elfnn-aarch64.c:8982
+#, c-format
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s'\n"
+msgstr "%F%P: %pB: ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð½ÐµÐºÐ¾Ð¿Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»\n"
+
+#: elfnn-loongarch.c:153 elfnn-loongarch.c:205
+#, c-format
+msgid "%#<PRIx64> invaild imm"
+msgstr "%#<PRIx64> Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ñ�Ñ‚Ð²ÐµÐ½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ"
+
+#: elfnn-loongarch.c:387 elfnn-riscv.c:4005
+#, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+"  target emulation `%s' does not match `%s'"
+msgstr ""
+"%pB: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸:\n"
+"  Ñ†ÐµÐ»ÑŒ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Â«%sÂ»"
+
+#: elfnn-loongarch.c:442
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ Ñ� Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ ABI."
+
+#: elfnn-loongarch.c:583
+msgid "Internal error: unreachable."
+msgstr "Ð’Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð¸Ð¶Ð¸Ð¼Ð¾Ñ�Ñ‚ÑŒ."
+
+#: elfnn-loongarch.c:3809 elfnn-riscv.c:4766
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
+msgstr "%pB(%pA+%#<PRIx64>): Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� %<PRId64> Ð±Ð°Ð¹Ñ‚ Ð´Ð»Ñ� Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ� Ð¿Ð¾ %<PRId64>-Ð±Ð°Ð¹Ñ‚Ð½Ð¾Ð¹ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ, Ð½Ð¾ ÐµÑ�Ñ‚ÑŒ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ %<PRId64>"
+
+#: elfnn-riscv.c:329 elfnn-riscv.c:364
 #, c-format
 msgid "%pB: warning: RVE PLT generation not supported"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ� RVE PLT Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311
+#: elfnn-riscv.c:922
+#, c-format
+msgid "%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
+
+#: elfnn-riscv.c:964
+#, c-format
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² RV32 Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
+
+#: elfnn-riscv.c:1850
+#, c-format
+msgid "final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "ÐºÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� uleb128 Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ 0x%lx Ð² %pA Ð¸Ð· %pB Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ðµ Ð¼ÐµÑ�Ñ‚Ð¾"
+
+#: elfnn-riscv.c:2085
+#, c-format
+msgid "%pcrel_lo missing matching %pcrel_hi"
+msgstr "Ð´Ð»Ñ� %pcrel_lo Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ %pcrel_hi"
+
+#: elfnn-riscv.c:2088
+#, c-format
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "%pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ Ð·Ð°Ð¿Ñ€ÐµÑ‰Ñ‘Ð½ Ð´Ð»Ñ� R_RISCV_GOT_HI20"
+
+#. Check the overflow when adding reloc addend.
+#: elfnn-riscv.c:2093
+#, c-format
+msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
+msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ %%pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %%pcrel_hi Ñ€Ð°Ð²Ð½Ð¾ 0x%<PRIx64> Ð±ÐµÐ· Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ð¹, Ð½Ð¾ Ð¼Ð¾Ð¶ÐµÑ‚ Ñ�Ñ‚Ð°Ñ‚ÑŒ 0x%<PRIx64> Ð¿Ð¾Ñ�Ð»Ðµ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ� %%pcrel_lo"
+
+#: elfnn-riscv.c:2101
+#, c-format
+msgid "%pcrel_lo overflow with an addend"
+msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ %pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼"
+
+#: elfnn-riscv.c:2606
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "Ð”Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾ Ð´Ð»Ñ� R_RISCV_GOT_HI20"
+
+#. PR 28509, when generating the shared object, these
+#. referenced symbols may bind externally, which means
+#. they will be exported to the dynamic symbol table,
+#. and are preemptible by default.  These symbols cannot
+#. be referenced by the non-pic relocations, like
+#. R_RISCV_JAL and R_RISCV_RVC_JUMP relocations.
+#.
+#. However, consider that linker may relax the R_RISCV_CALL
+#. relocations to R_RISCV_JAL or R_RISCV_RVC_JUMP, if
+#. these relocations are relocated to the plt entries,
+#. then we won't report error for them.
+#.
+#. Perhaps we also need the similar checks for the
+#. R_RISCV_BRANCH and R_RISCV_RVC_BRANCH relocations.
+#: elfnn-riscv.c:2707
+#, c-format
+msgid "%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC\n"
+msgstr "%%X%%P: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ», ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ñ€Ð¸Ð²Ñ�Ð·Ð°Ð½ Ð¸Ð·Ð²Ð½Ðµ, Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC\n"
+
+#: elfnn-riscv.c:2789
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼"
+
+#: elfnn-riscv.c:2999
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%%X%%P: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»\n"
+
+#: elfnn-riscv.c:3034
 msgid "%X%P: internal error: out of range error\n"
 msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2315
+#: elfnn-riscv.c:3039
 msgid "%X%P: internal error: unsupported relocation error\n"
 msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2325
+#: elfnn-riscv.c:3045
+msgid "dangerous relocation error"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
+
+#: elfnn-riscv.c:3051
 msgid "%X%P: internal error: unknown error\n"
 msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2711
+#: elfnn-riscv.c:3597
 #, c-format
-msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d"
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ ISA Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� Â«%sÂ». %d.%d vs %d.%d"
+msgid "error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Â«%sÂ». ÐŸÐµÑ€Ð²Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Â«iÂ» Ð¸Ð»Ð¸ Â«eÂ», Ð½Ð¾ Ð¸Ð¼ÐµÐµÐ¼ Â«%sÂ»"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729
+#: elfnn-riscv.c:3640
 #, c-format
-msgid "error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'."
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Â«%sÂ». ÐŸÐµÑ€Ð²Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Â«iÂ» Ð¸Ð»Ð¸ Â«eÂ», Ð½Ð¾ Ð¸Ð¼ÐµÐµÐ¼ Â«%sÂ»."
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ ISA Ð´Ð»Ñ� Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� Â«%sÂ» Ð¸ Â«%sÂ»"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773
+#: elfnn-riscv.c:3777
 #, c-format
-msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'."
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ ISA Ð´Ð»Ñ� Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� Â«%sÂ» Ð¸ Â«%sÂ»."
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… (%s) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ (%s)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2921
+#: elfnn-riscv.c:3797
 #, c-format
-msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)."
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA (%s) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ (%s)."
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: XLEN Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… (%u) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ð¼Ð¸ (%u)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2946
+#: elfnn-riscv.c:3805
 #, c-format
-msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)."
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: XLEN Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… (%u) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ð¼Ð¸ (%u)."
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ XLEN (%u), Ð²ÐµÑ€Ð¾Ñ�Ñ‚Ð½Ð¾, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ñ�"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2954
+#: elfnn-riscv.c:3919
 #, c-format
-msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation."
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ XLEN (%u), Ð²Ñ‹Ñ€Ð¾Ñ�Ñ‚Ð½Ð¾, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ñ�."
+msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½ÑƒÑŽ Ð²ÐµÑ€Ñ�Ð¸ÑŽ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ %u.%u.%u, Ð½Ð¾ Ð´Ð»Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %u.%u.%u"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3039
-#, c-format
-msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� priv spec (Ñ�Ñ‚Ð°Ñ€ÑˆÐ°Ñ�/Ð¼Ð»Ð°Ð´ÑˆÐ°Ñ�/Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ)."
-
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3055
-#, c-format
-msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned."
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°, Ð½Ð¾ Ð´Ð»Ñ� Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð° Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°."
+#: elfnn-riscv.c:3936
+msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ 1.9.1 Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ� Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ñ�Ð¼Ð¸ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3096
+#: elfnn-riscv.c:3964
 #, c-format
-msgid ""
-"%pB: ABI is incompatible with that of the selected emulation:\n"
-"  target emulation `%s' does not match `%s'"
-msgstr ""
-"%pB: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸:\n"
-"  Ñ†ÐµÐ»ÑŒ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Â«%sÂ»"
+msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°, Ð½Ð¾ Ð´Ð»Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119
+#: elfnn-riscv.c:4061
 #, c-format
 msgid "%pB: can't link %s modules with %s modules"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3129
+#: elfnn-riscv.c:4071
 #, c-format
 msgid "%pB: can't link RVE with other target"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ RVE Ñ� Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ†ÐµÐ»ÑŒÑŽ"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3630
+#: elfnn-riscv.c:964
 #, c-format
-msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
-msgstr "%pB(%pA+%#<PRIx64>): Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� %<PRId64> Ð±Ð°Ð¹Ñ‚ Ð´Ð»Ñ� Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ� Ð¿Ð¾ %<PRId64>-Ð±Ð°Ð¹Ñ‚Ð½Ð¾Ð¹ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ, Ð½Ð¾ ÐµÑ�Ñ‚ÑŒ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ %<PRId64>"
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² RV64 Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
 
-#: peigen.c:157 pepigen.c:157 pex64igen.c:157
+#: peXXigen.c:159
 #, c-format
 msgid "%pB: unable to find name for empty section"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¸Ð¼Ñ� Ð¿ÑƒÑ�Ñ‚Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°"
 
-#: peigen.c:183 pepigen.c:183 pex64igen.c:183
+#: peXXigen.c:186
 #, c-format
 msgid "%pB: out of memory creating name for empty section"
 msgstr "%pB: Ð½Ðµ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ð¿ÑƒÑ�Ñ‚Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°"
 
-#: peigen.c:194 pepigen.c:194 pex64igen.c:194
+#: peXXigen.c:197
 #, c-format
 msgid "%pB: unable to create fake empty section"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ„Ð¸ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¹ Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»"
 
-#: peigen.c:532 pepigen.c:532 pex64igen.c:532
+#: peXXigen.c:920
+#, c-format
+msgid "%pB:%.8s: section below image base"
+msgstr "%pB:%.8s: Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¸Ð¶Ðµ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°"
+
+#: peXXigen.c:925
 #, c-format
-msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld"
-msgstr "%pB: Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ aout ÑƒÐºÐ°Ð·Ð°Ð½ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ…: %ld"
+msgid "%pB:%.8s: RVA truncated"
+msgstr "%pB:%.8s: RVA ÑƒÑ�ÐµÑ‡Ñ‘Ð½"
 
-#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091
+#: peXXigen.c:1056
 #, c-format
 msgid "%pB: line number overflow: 0x%lx > 0xffff"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ñ�Ñ‚Ñ€Ð¾Ðº: 0x%lx > 0xffff"
 
-#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235
+#: peXXigen.c:1222
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° [.edata (Ð¸Ð»Ð¸ Ð³Ð´Ðµ Ð¾Ð½ Ð½Ð°ÑˆÑ‘Ð»Ñ�Ñ�)]"
 
-#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236
+#: peXXigen.c:1223
 msgid "Import Directory [parts of .idata]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° [Ñ‡Ð°Ñ�Ñ‚ÑŒ .idata]"
 
-#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237
+#: peXXigen.c:1224
 msgid "Resource Directory [.rsrc]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ€ÐµÑ�ÑƒÑ€Ñ�Ð¾Ð² [.rsrc]"
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1225
 msgid "Exception Directory [.pdata]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¸Ñ�ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ [.pdata]"
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1226
 msgid "Security Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1227
 msgid "Base Relocation Directory [.reloc]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� [.reloc]"
 
-#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241
+#: peXXigen.c:1228
 msgid "Debug Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸"
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1229
 msgid "Description Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð¿Ð¸Ñ�Ð°Ð½Ð¸Ð¹"
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1230
 msgid "Special Directory"
 msgstr "Ð¡Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³"
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1231
 msgid "Thread Storage Directory [.tls]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ð° Ð½Ð¸Ñ‚ÐµÐ¹ [.tls]"
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1232
 msgid "Load Configuration Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸"
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1233
 msgid "Bound Import Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°"
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1234
 msgid "Import Address Table Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾Ð²"
 
-#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248
+#: peXXigen.c:1235
 msgid "Delay Import Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°"
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1236
 msgid "CLR Runtime Header"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ� CLR"
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1237
 msgid "Reserved"
 msgstr "Ð—Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾"
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1302
 #, c-format
 msgid ""
 "\n"
@@ -8018,7 +9035,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°, Ð½Ð¾ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð´ÐµÐ», Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼ Ð¾Ð½Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚Ñ�Ñ�\n"
 
-#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316
+#: peXXigen.c:1308
 #, c-format
 msgid ""
 "\n"
@@ -8027,7 +9044,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð±ÐµÐ· Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾\n"
 
-#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323
+#: peXXigen.c:1315
 #, c-format
 msgid ""
 "\n"
@@ -8036,30 +9053,7 @@ msgstr ""
 "\n"
 "Ð’ %s Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%lx\n"
 
-#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365
-#, c-format
-msgid ""
-"\n"
-"Function descriptor located at the start address: %04lx\n"
-msgstr ""
-"\n"
-"Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸: %04lx\n"
-
-#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369
-#, c-format
-msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
-msgstr "\tcode-base %08lx toc (Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹/Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¹) %08lx/%08lx\n"
-
-#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377
-#, c-format
-msgid ""
-"\n"
-"No reldata section! Function descriptor not decoded.\n"
-msgstr ""
-"\n"
-"Ð�ÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° reldata! ÐžÐ¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÑŒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ð½Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½.\n"
-
-#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382
+#: peXXigen.c:1321
 #, c-format
 msgid ""
 "\n"
@@ -8068,7 +9062,7 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» %s)\n"
 
-#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385
+#: peXXigen.c:1324
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -8077,7 +9071,7 @@ msgstr ""
 " vma:            Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð°    ÐžÑ‚Ð¼ÐµÑ‚ÐºÐ°   Ð¦ÐµÐ¿Ð¾Ñ‡ÐºÐ°    Ð˜Ð¼Ñ�       ÐŸÐµÑ€Ð²Ñ‹Ð¹\n"
 "                  Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ð¹  Ð’Ñ€ÐµÐ¼ÐµÐ½Ð¸   ÐŸÐµÑ€ÐµÑ�Ñ‹Ð»ÐºÐ¸  DLL       Ð¨Ð»ÑŽÐ·\n"
 
-#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435
+#: peXXigen.c:1373
 #, c-format
 msgid ""
 "\n"
@@ -8086,12 +9080,12 @@ msgstr ""
 "\n"
 "\tÐ˜Ð¼Ñ� DLL: %.*s\n"
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1389
 #, c-format
 msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
 msgstr "\tvma:  Hint/Ord Ð˜Ð¼Ñ�-Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° ÐŸÑ€Ð¸Ð²Ñ�Ð·Ð°Ð½-Ðº\n"
 
-#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476
+#: peXXigen.c:1414
 #, c-format
 msgid ""
 "\n"
@@ -8100,13 +9094,12 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ð¿ÐµÑ€Ð²Ñ‹Ð¹ ÑˆÐ»ÑŽÐ·, Ð½Ð¾ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð´ÐµÐ», Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼ Ð¾Ð½ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚Ñ�Ñ�\n"
 
-#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520
-#: pex64igen.c:1559
+#: peXXigen.c:1461 peXXigen.c:1500
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr "\t<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾: 0x%04lx>"
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1593
 #, c-format
 msgid ""
 "\n"
@@ -8115,34 +9108,25 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð°, Ð½Ð¾ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð´ÐµÐ», Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼ Ð¾Ð½Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚Ñ�Ñ�\n"
 
-#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658
+#: peXXigen.c:1606
 #, c-format
 msgid ""
 "\n"
-"There is an export table in %s, but that section has no contents\n"
-msgstr ""
-"\n"
-"Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð±ÐµÐ· Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾\n"
-
-#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669
-#, c-format
-msgid ""
-"\n"
-"There is an export table in %s, but it does not fit into that section\n"
+"There is an export table in %s, but it is too small (%d)\n"
 msgstr ""
 "\n"
-"Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ð¾Ð½Ð° Ð½Ðµ Ð¿Ð¾Ð¼ÐµÑ‰Ð°ÐµÑ‚Ñ�Ñ� Ð² Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ»\n"
+"Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ð¾Ð½Ð° Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ� (%d)\n"
 
-#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680
+#: peXXigen.c:1614
 #, c-format
 msgid ""
 "\n"
-"There is an export table in %s, but it is too small (%d)\n"
+"There is an export table in %s, but contents cannot be read\n"
 msgstr ""
 "\n"
-"Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ð¾Ð½Ð° Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ� (%d)\n"
+"Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ ÐµÑ‘ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ\n"
 
-#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686
+#: peXXigen.c:1620
 #, c-format
 msgid ""
 "\n"
@@ -8151,7 +9135,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%lx\n"
 
-#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714
+#: peXXigen.c:1651
 #, c-format
 msgid ""
 "\n"
@@ -8162,67 +9146,67 @@ msgstr ""
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» %s)\n"
 "\n"
 
-#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718
+#: peXXigen.c:1655
 #, c-format
 msgid "Export Flags \t\t\t%lx\n"
 msgstr "Ð¤Ð»Ð°Ð³Ð¸ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° \t\t\t%lx\n"
 
-#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721
+#: peXXigen.c:1658
 #, c-format
 msgid "Time/Date stamp \t\t%lx\n"
 msgstr "ÐœÐµÑ‚ÐºÐ° Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸/Ð´Ð°Ñ‚Ñ‹ \t\t%lx\n"
 
-#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725
+#: peXXigen.c:1662
 #, c-format
 msgid "Major/Minor \t\t\t%d/%d\n"
 msgstr "Ð¡Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹/ÐœÐ»Ð°Ð´ÑˆÐ¸Ð¹ \t\t\t%d/%d\n"
 
-#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728
+#: peXXigen.c:1665
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr "Ð˜Ð¼Ñ� \t\t\t\t"
 
-#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739
+#: peXXigen.c:1676
 #, c-format
 msgid "Ordinal Base \t\t\t%ld\n"
 msgstr "Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ \t\t\t%ld\n"
 
-#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742
+#: peXXigen.c:1679
 #, c-format
 msgid "Number in:\n"
 msgstr "Ð�Ð¾Ð¼ÐµÑ€ Ð²:\n"
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1682
 #, c-format
 msgid "\tExport Address Table \t\t%08lx\n"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² \t\t%08lx\n"
 
-#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749
+#: peXXigen.c:1686
 #, c-format
 msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° [ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð¸Ð¼Ñ‘Ð½/Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ñ… Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð²]\t%08lx\n"
 
-#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752
+#: peXXigen.c:1689
 #, c-format
 msgid "Table Addresses\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾Ð²\n"
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1692
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² \t\t"
 
-#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760
+#: peXXigen.c:1697
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð¸Ð¼Ñ‘Ð½ \t\t"
 
-#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765
+#: peXXigen.c:1702
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ñ… Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² \t\t\t"
 
-#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779
+#: peXXigen.c:1716
 #, c-format
 msgid ""
 "\n"
@@ -8231,20 +9215,20 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² -- Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %ld\n"
 
-#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788
+#: peXXigen.c:1725
 #, c-format
 msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\tÐ�ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² rva (0x%lx) Ð¸Ð»Ð¸ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² (0x%lx)\n"
 
-#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807
+#: peXXigen.c:1744
 msgid "Forwarder RVA"
 msgstr "ÐŸÐµÑ€ÐµÐ°Ð´Ñ€ÐµÑ�ÑƒÐµÐ¼Ñ‹Ð¹ RVA"
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1756
 msgid "Export RVA"
 msgstr "Ð­ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ RVA"
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1763
 #, c-format
 msgid ""
 "\n"
@@ -8253,29 +9237,27 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° [Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ñ… Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð²/ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð¸Ð¼Ñ‘Ð½]\n"
 
-#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834
+#: peXXigen.c:1771
 #, c-format
 msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\tÐ�ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð¸Ð¼Ñ‘Ð½ (0x%lx) Ð¸Ð»Ð¸ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² (0x%lx)\n"
 
-#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841
+#: peXXigen.c:1778
 #, c-format
 msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\tÐ�ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð¾Ð±Ñ‹Ñ‡Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° rva (0x%lx) Ð¸Ð»Ð¸ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² (0x%lx)\n"
 
-#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855
+#: peXXigen.c:1792
 #, c-format
 msgid "\t[%4ld] <corrupt offset: %lx>\n"
 msgstr "\t[%4ld] <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: %lx>\n"
 
-#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909
-#: pex64igen.c:2106
+#: peXXigen.c:1847 peXXigen.c:2017
 #, c-format
 msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ, Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .pdata (%ld) Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ %d\n"
 
-#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913
-#: pex64igen.c:2110
+#: peXXigen.c:1851 peXXigen.c:2021
 #, c-format
 msgid ""
 "\n"
@@ -8284,12 +9266,12 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» .pdata)\n"
 
-#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916
+#: peXXigen.c:1854
 #, c-format
 msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
 msgstr " vma:\t\t\tÐ�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�  ÐšÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�   Ð Ð°Ñ�ÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ�\n"
 
-#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918
+#: peXXigen.c:1856
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -8298,27 +9280,12 @@ msgstr ""
 " vma:\t\tÐ�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹  ÐšÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¹   EH          EH       Ð�Ð´Ñ€ÐµÑ�         ÐœÐ°Ñ�ÐºÐ°\n"
 "     \t\tÐ�Ð´Ñ€ÐµÑ�      Ð�Ð´Ñ€ÐµÑ�      ÐžÐ±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸Ðº  Ð”Ð°Ð½Ð½Ñ‹Ðµ   ÐšÐ¾Ð½Ñ†Ð°ÐŸÑ€Ð¾Ð»Ð¾Ð³Ð°  Ð˜Ñ�ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ�\n"
 
-#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931
+#: peXXigen.c:1869
 #, c-format
 msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
 msgstr "Ð’Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .pdata (%ld) Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ‡ÐµÐ¼ Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ (%ld)\n"
 
-#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001
-#, c-format
-msgid " Register save millicode"
-msgstr " ÐœÐ¸Ð»Ð»Ð¸ÐºÐ¾Ð´ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°"
-
-#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004
-#, c-format
-msgid " Register restore millicode"
-msgstr " ÐœÐ¸Ð»Ð»Ð¸ÐºÐ¾Ð´ Ð²Ð¾Ñ�Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°"
-
-#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007
-#, c-format
-msgid " Glue code sequence"
-msgstr " ÐŸÐ¾Ñ�Ð»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñ�Ñ‚ÑŒ Ñ�Ð²Ñ�Ð·ÑƒÑŽÑ‰ÐµÐ³Ð¾ ÐºÐ¾Ð´Ð°"
-
-#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112
+#: peXXigen.c:2023
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -8327,7 +9294,7 @@ msgstr ""
 " vma:\t\tÐ�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð”Ð»Ð¸Ð½Ð°    Ð”Ð»Ð¸Ð½Ð°   Ð¤Ð»Ð°Ð³Ð¸       ÐžÐ±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸Ðº EH\n"
 "     \t\tÐ�Ð´Ñ€ÐµÑ�     ÐŸÑ€Ð¾Ð»Ð¾Ð³Ð°  Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¸ 32b exc     Ð˜Ñ�ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ Ð”Ð°Ð½Ð½Ñ‹Ðµ\n"
 
-#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234
+#: peXXigen.c:2148
 #, c-format
 msgid ""
 "\n"
@@ -8338,7 +9305,7 @@ msgstr ""
 "\n"
 "Ð�Ð°Ñ‡Ð°Ð»Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð² PE-Ñ„Ð°Ð¹Ð»Ðµ (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» .reloc)\n"
 
-#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264
+#: peXXigen.c:2177
 #, c-format
 msgid ""
 "\n"
@@ -8347,62 +9314,62 @@ msgstr ""
 "\n"
 "Ð’Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: %08lx Ð Ð°Ð·Ð¼ÐµÑ€ Ð±Ð»Ð¾ÐºÐ° %ld (0x%lx) Ð§Ð¸Ñ�Ð»Ð¾ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ %ld\n"
 
-#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282
+#: peXXigen.c:2195
 #, c-format
 msgid "\treloc %4d offset %4x [%4lx] %s"
 msgstr "\tÐ¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %4d Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %4x [%4lx] %s"
 
-#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343
+#: peXXigen.c:2256
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr "%03x %*.s Ð­Ð»ÐµÐ¼ÐµÐ½Ñ‚: "
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2280
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr "Ð¸Ð¼Ñ�: [Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: %08lx Ð´Ð»Ð¸Ð½Ð° %d]: "
 
-#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387
+#: peXXigen.c:2300
 #, c-format
 msgid "<corrupt string length: %#x>\n"
 msgstr "<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ð´Ð»Ð¸Ð½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#x>\n"
 
-#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397
+#: peXXigen.c:2310
 #, c-format
 msgid "<corrupt string offset: %#lx>\n"
 msgstr "<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#lx>\n"
 
-#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402
+#: peXXigen.c:2315
 #, c-format
 msgid "ID: %#08lx"
 msgstr "ID: %#08lx"
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2318
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: %#08lx\n"
 
-#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427
+#: peXXigen.c:2340
 #, c-format
 msgid "%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
 msgstr "%03x %*.s  Ð»Ð¸Ñ�Ñ‚: Ð°Ð´Ñ€ÐµÑ�: %#08lx, Ñ€Ð°Ð·Ð¼ÐµÑ€: %#08lx, ÐºÐ¾Ð´Ð¾Ð²Ð°Ñ� Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð°: %d\n"
 
-#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469
+#: peXXigen.c:2382
 #, c-format
 msgid "<unknown directory type: %d>\n"
 msgstr "<Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°: %d>\n"
 
-#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477
+#: peXXigen.c:2390
 #, c-format
 msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
 msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð°: Ð¡Ð¸Ð¼Ð²Ð¾Ð»: %d, Ð’Ñ€ÐµÐ¼Ñ�: %08lx, Ð’ÐµÑ€Ñ�Ð¸Ñ�: %d/%d, ÐšÐ¾Ð»-Ð²Ð¾ Ð¸Ð¼Ñ‘Ð½: %d, ID: %d\n"
 
-#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566
+#: peXXigen.c:2478
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr "ÐžÐ±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» .rsrc!\n"
 
-#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590
+#: peXXigen.c:2502
 #, c-format
 msgid ""
 "\n"
@@ -8411,17 +9378,17 @@ msgstr ""
 "\n"
 "ÐŸÐ Ð•Ð”Ð£ÐŸÐ Ð•Ð–Ð”Ð•Ð�Ð˜Ð•: Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .rsrc â€” Ð±ÑƒÐ´ÑƒÑ‚ Ð¿Ñ€Ð¾Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ñ‹ Windows:\n"
 
-#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596
+#: peXXigen.c:2508
 #, c-format
 msgid " String table starts at offset: %#03x\n"
 msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ñ‚Ñ€Ð¾Ðº Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚Ñ�Ñ� Ñ�Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#03x\n"
 
-#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599
+#: peXXigen.c:2511
 #, c-format
 msgid " Resources start at offset: %#03x\n"
 msgstr " Ð ÐµÑ�ÑƒÑ€Ñ�Ñ‹ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#03x\n"
 
-#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651
+#: peXXigen.c:2568
 #, c-format
 msgid ""
 "\n"
@@ -8430,7 +9397,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³, Ð½Ð¾ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð´ÐµÐ», Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼ Ð¾Ð½ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚Ñ�Ñ�\n"
 
-#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657
+#: peXXigen.c:2574
 #, c-format
 msgid ""
 "\n"
@@ -8439,7 +9406,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð² %s, Ð½Ð¾ Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð±ÐµÐ· Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾\n"
 
-#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664
+#: peXXigen.c:2581
 #, c-format
 msgid ""
 "\n"
@@ -8448,7 +9415,7 @@ msgstr ""
 "\n"
 "ÐžÑˆÐ¸Ð±ÐºÐ°: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ� Ñ� Ð°Ð´Ñ€ÐµÑ�Ð°, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»\n"
 
-#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669
+#: peXXigen.c:2586
 #, c-format
 msgid ""
 "\n"
@@ -8459,22 +9426,22 @@ msgstr ""
 "Ð’ %s Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%lx\n"
 "\n"
 
-#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676
+#: peXXigen.c:2593
 #, c-format
 msgid "The debug data size field in the data directory is too big for the section"
 msgstr "ÐŸÐ¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ðµ Ð´Ð°Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð°"
 
-#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681
+#: peXXigen.c:2598
 #, c-format
 msgid "Type                Size     Rva      Offset\n"
 msgstr "Ð¢Ð¸Ð¿                Ð Ð°Ð·Ð¼ÐµÑ€     Rva      Ð¡Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ\n"
 
-#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729
+#: peXXigen.c:2646
 #, c-format
-msgid "(format %c%c%c%c signature %s age %ld)\n"
-msgstr "(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ð¾Ð´Ð¿Ð¸Ñ�ÑŒ %s Ð²Ð¾Ð·Ñ€Ð°Ñ�Ñ‚ %ld)\n"
+msgid "(format %c%c%c%c signature %s age %ld pdb %s)\n"
+msgstr "(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ð¾Ð´Ð¿Ð¸Ñ�ÑŒ %s Ð²Ð¾Ð·Ñ€Ð°Ñ�Ñ‚ %ld pdb %s)\n"
 
-#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737
+#: peXXigen.c:2658
 #, c-format
 msgid "The debug directory size is not a multiple of the debug directory entry size\n"
 msgstr "Ð Ð°Ð·Ð¼ÐµÑ€ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°\n"
@@ -8482,7 +9449,7 @@ msgstr "Ð Ð°Ð·Ð¼ÐµÑ€ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð
 #. The MS dumpbin program reportedly ands with 0xff0f before
 #. printing the characteristics field.  Not sure why.  No reason to
 #. emulate it here.
-#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757
+#: peXXigen.c:2742
 #, c-format
 msgid ""
 "\n"
@@ -8491,97 +9458,307 @@ msgstr ""
 "\n"
 "Ð¥Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ¸ 0x%x\n"
 
-#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993
+#: peXXigen.c:3027
 #, c-format
-msgid "%pB: Data Directory size (%lx) exceeds space left in section (%<PRIx64>)"
-msgstr "%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ… (%lx) Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐµÑ�Ñ� Ð¼ÐµÑ�Ñ‚Ð¾ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%<PRIx64>)"
+msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
+msgstr "%pB: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ð°Ð½Ð½Ñ‹Ñ… (%lx Ð±Ð°Ð¹Ñ‚ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %<PRIx64>) Ñ€Ð°Ñ�ÑˆÐ¸Ñ€Ñ�ÐµÑ‚Ñ�Ñ� Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %<PRIx64>"
 
-#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025
+#: peXXigen.c:3068
 msgid "failed to update file offsets in debug directory"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð¼ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ðµ"
 
-#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033
+#: peXXigen.c:3077
 #, c-format
 msgid "%pB: failed to read debug data section"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ…"
 
-#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849
+#: peXXigen.c:3880
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ñ€ÐµÑ�ÑƒÑ€Ñ�Ð°: %d"
 
-#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984
+#: peXXigen.c:4015
 msgid ".rsrc merge failure: multiple non-default manifests"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð°Ð½Ð¸Ñ„ÐµÑ�Ñ‚Ð¾Ð² Ð½Ðµ Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ"
 
-#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002
+#: peXXigen.c:4033
 msgid ".rsrc merge failure: a directory matches a leaf"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð»Ð¸Ñ�Ñ‚Ð¾Ð¼"
 
-#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044
+#: peXXigen.c:4075
 msgid ".rsrc merge failure: duplicate leaf"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ð»Ð¸Ñ�Ñ‚"
 
-#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046
+#: peXXigen.c:4080
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ð»Ð¸Ñ�Ñ‚: %s"
 
-#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112
+#: peXXigen.c:4147
 msgid ".rsrc merge failure: dirs with differing characteristics"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¸ Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ð¼ Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ°Ð¼Ð¸"
 
-#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119
+#: peXXigen.c:4154
 msgid ".rsrc merge failure: differing directory versions"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð²ÐµÑ€Ñ�Ð¸Ð¸ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð² Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‚Ñ�Ñ�"
 
 #. Corrupted .rsrc section - cannot merge.
-#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236
+#: peXXigen.c:4266
 #, c-format
 msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ñ€Ð°Ð·Ð´ÐµÐ» .rsrc Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½"
 
-#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244
+#: peXXigen.c:4274
 #, c-format
 msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ rsrc: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .rsrc"
 
-#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383
+#: peXXigen.c:4413
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[1], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$2"
 
-#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403
+#: peXXigen.c:4433
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[1], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$4"
 
-#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424
+#: peXXigen.c:4454
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[12], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$5"
 
-#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444
+#: peXXigen.c:4474
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$6"
 
-#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486
+#: peXXigen.c:4516
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ .idata$6"
 
-#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511
+#: peXXigen.c:4541
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[9], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ __tls_used"
 
+#~ msgid "Deprecated %s called at %s line %d in %s\n"
+#~ msgstr "Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s Ñ€Ñ�Ð´Ð¾Ð¼ Ñ� %s Ð² Ñ�Ñ‚Ñ€Ð¾ÐºÐµ %d Ð² %s\n"
+
+#~ msgid "Deprecated %s called\n"
+#~ msgstr "Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s\n"
+
+#~ msgid "cannot read GST record length\n"
+#~ msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð´Ð»Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but that section has no contents\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð±ÐµÐ· Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but it does not fit into that section\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ð¾Ð½Ð° Ð½Ðµ Ð¿Ð¾Ð¼ÐµÑ‰Ð°ÐµÑ‚Ñ�Ñ� Ð² Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ»\n"
+
+#~ msgid "%pB: TLS relocation at (0x%"
+#~ msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ (0x%"
+
+#~ msgid "%pB: page size is too large (0x%x)"
+#~ msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ (0x%x)"
+
+#~ msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
+#~ msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð° Ñ�Ñ‚Ñ€Ð¾Ðº (%#lx) Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#lx)"
+
+#~ msgid "%pB: unable to initialize compress status for section %s"
+#~ msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð¸Ðµ Ñ�Ð¶Ð°Ñ‚Ð¸Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s"
+
+#~ msgid "%pB: unable to initialize decompress status for section %s"
+#~ msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð¸Ðµ Ñ€Ð°Ð·Ð¶Ð°Ñ‚Ð¸Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s"
+
+#~ msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+#~ msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pB(%pA) Ñ€Ð°Ð²ÐµÐ½ %#<PRIx64>, Ñ�Ñ‚Ð¾ Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ„Ð°Ð¹Ð»Ð° (%#<PRIx64> Ð±Ð°Ð¹Ñ‚)"
+
+#~ msgid "DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"
+#~ msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° ÐµÐ³Ð¾ Ñ„Ð°Ð¹Ð»Ð°! (0x%lx Ð¸ 0x%lx)"
+
+#~ msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+#~ msgstr "%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð² Ð½ÐµÐ²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¹ Ñ�Ð¶Ð°Ñ‚Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»"
+
+#~ msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+#~ msgstr "%F%P: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ %pA Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñƒ. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ðµ Ð±ÐµÐ· --enable-non-contiguous-regions.\n"
+
+#~ msgid "internal error: RL78 reloc stack overflow"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¾ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°"
+
+#~ msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+#~ msgstr "%F%P: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ Ð³Ñ€ÑƒÐ¿Ð¿Ñƒ %pA Ñ†ÐµÐ»Ð¸ %pA Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñƒ. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ðµ Ð±ÐµÐ· --enable-non-contiguous-regions.\n"
+
+#~ msgid ""
+#~ "%s  branch         %lu\n"
+#~ "  branch toc adj %lu\n"
+#~ "  branch notoc   %lu\n"
+#~ "  branch both    %lu\n"
+#~ "  long branch    %lu\n"
+#~ "  long toc adj   %lu\n"
+#~ "  long notoc     %lu\n"
+#~ "  long both      %lu\n"
+#~ "  plt call       %lu\n"
+#~ "  plt call save  %lu\n"
+#~ "  plt call notoc %lu\n"
+#~ "  plt call both  %lu\n"
+#~ "  global entry   %lu"
+#~ msgstr ""
+#~ "%s  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                          %lu\n"
+#~ "  Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� toc            %lu\n"
+#~ "  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ðµ toc                     %lu\n"
+#~ "  Ð¾Ð±Ð° Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�                        %lu\n"
+#~ "  Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                    %lu\n"
+#~ "  Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� toc   %lu\n"
+#~ "  Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ðµ toc             %lu\n"
+#~ "  Ð¾Ð±Ð° Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�                %lu\n"
+#~ "  plt-Ð²Ñ‹Ð·Ð¾Ð²                            %lu\n"
+#~ "  Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ‘Ð½Ð½Ñ‹Ð¹ plt-Ð²Ñ‹Ð·Ð¾Ð²                %lu\n"
+#~ "  plt-Ð²Ñ‹Ð·Ð¾Ð² Ð½Ðµ toc                     %lu\n"
+#~ "  Ð¾Ð±Ð° plt-Ð²Ñ‹Ð·Ð¾Ð²Ð°                       %lu\n"
+#~ "  Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚                   %lu"
+
+#~ msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
+#~ msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB ÑƒÑ�ÐµÑ‡Ñ‘Ð½: Ð¾Ð¶Ð¸Ð´Ð°Ð»Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð° core >= %<PRIu64>, Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾: %<PRIu64>"
+
+#~ msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
+#~ msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: --enable-non-contiguous-regions Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°ÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð¸Ð· Â«%sÂ»\n"
+
+#~ msgid "-march=%s: expect number after `%dp'"
+#~ msgstr "-march=%s: Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ñ‡Ð¸Ñ�Ð»Ð¾ Ð¿Ð¾Ñ�Ð»Ðµ Â«%dpÂ»"
+
+#~ msgid "-march=%s: rv%de is not a valid base ISA"
+#~ msgstr "-march=%s: rv%de Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð±Ð°Ð·Ð° ISA"
+
+#~ msgid "-march=%s: standard ISA extension `%c' is not in canonical order"
+#~ msgstr "-march=%s: Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Â«%cÂ» Ð½Ðµ Ð² ÐºÐ°Ð½Ð¾Ð½Ð¸Ñ‡Ð½Ð¾Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐµ"
+
+#~ msgid "-march=%s: unknown prefix class for the ISA extension `%s'"
+#~ msgstr "-march=%s: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ÐºÐ»Ð°Ñ�Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð² Ð´Ð»Ñ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� ISA Â«%sÂ»"
+
+#~ msgid "-march=%s: duplicate prefixed ISA extension `%s'"
+#~ msgstr "-march=%s: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Â«%sÂ»"
+
+#~ msgid "-march=%s: prefixed ISA extension `%s' is not in expected order.  It must come before `%s'"
+#~ msgstr "-march=%s: Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Â«%sÂ» Ð½Ðµ Ð² Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐµ. Ð”Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ð´Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÐ´ Â«%sÂ»"
+
+#~ msgid "-march=%s: rv32e does not support the `f' extension"
+#~ msgstr "-march=%s: rv32e Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«fÂ»"
+
+#~ msgid "%F%P: failed to create BND PLT section\n"
+#~ msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» BND PLT\n"
+
+#~ msgid "%pB: no core to allocate section name %s"
+#~ msgstr "%pB: Ð½ÐµÑ‚ core Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s"
+
+#~ msgid "   Error: length larger than remaining space in record\n"
+#~ msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐ³Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° Ð² Ð·Ð°Ð¿Ð¸Ñ�Ð¸\n"
+
+#~ msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+#~ msgstr "STA_QW (Ñ�Ñ‚ÐµÐº Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²) 0x%08x %08x\n"
+
+#~ msgid "%pB: error: erratum 843419 immediate 0x%"
+#~ msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 Ð² 0x%"
+
+#~ msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
+#~ msgstr "%%X%%P: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC\n"
+
+#~ msgid "warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%d"
+#~ msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ ISA %d.%d Ð´Ð»Ñ� Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� Â«%sÂ», Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d.%d"
+
+#~ msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
+#~ msgstr "%pB: Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ aout ÑƒÐºÐ°Ð·Ð°Ð½ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ…: %u"
+
+#~ msgid "%pB: warning: sh_link not set for section `%pA'"
+#~ msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð·Ð°Ð´Ð°Ð½ sh_link Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»"
+
+#~ msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
+#~ msgstr "%pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ [Â«%pAÂ» Ð² %pB] Ð¸ Ð½ÐµÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ [Â«%pAÂ» Ð² %pB] Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹"
+
+#~ msgid "%pA has both ordered and unordered sections"
+#~ msgstr "%pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ð¸ Ð½ÐµÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹"
+
+#~ msgid "-march=%s: unsupported ISA subset `%c'"
+#~ msgstr "-march=%s: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð¿Ð¾Ð´Ð½Ð°Ð±Ð¾Ñ€ ISA Â«%cÂ»"
+
+#~ msgid "-march=%s: unexpected ISA string at end: %s"
+#~ msgstr "-march=%s: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð² ÐºÐ¾Ð½Ñ†Ðµ: %s"
+
+#~ msgid "-march=%s: `d' extension requires `f' extension"
+#~ msgstr "-march=%s: Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÑŽ Â«dÂ» Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«fÂ»"
+
+#~ msgid "-march=%s: `q' extension requires `d' extension"
+#~ msgstr "-march=%s: Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÑŽ Â«qÂ» Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«dÂ»"
+
+#~ msgid ""
+#~ "\n"
+#~ "Function descriptor located at the start address: %04lx\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸: %04lx\n"
+
+#~ msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
+#~ msgstr "\tcode-base %08lx toc (Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹/Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¹) %08lx/%08lx\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "No reldata section! Function descriptor not decoded.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ð�ÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° reldata! ÐžÐ¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÑŒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ð½Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½.\n"
+
+#~ msgid " Register save millicode"
+#~ msgstr " ÐœÐ¸Ð»Ð»Ð¸ÐºÐ¾Ð´ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°"
+
+#~ msgid " Register restore millicode"
+#~ msgstr " ÐœÐ¸Ð»Ð»Ð¸ÐºÐ¾Ð´ Ð²Ð¾Ñ�Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°"
+
+#~ msgid " Glue code sequence"
+#~ msgstr " ÐŸÐ¾Ñ�Ð»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñ�Ñ‚ÑŒ Ñ�Ð²Ñ�Ð·ÑƒÑŽÑ‰ÐµÐ³Ð¾ ÐºÐ¾Ð´Ð°"
+
+#~ msgid "%pB: corrupt symbol count: %#<PRIx64>"
+#~ msgstr "%pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: %#<PRIx64>"
+
+#~ msgid "%pB: not enough memory to allocate space for %#<PRIx64> symbols of size %#<PRIx64>"
+#~ msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð¼ÐµÑ�Ñ‚Ð° Ð´Ð»Ñ� %#<PRIx64> Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %#<PRIx64>"
+
+#~ msgid "%pB: corrupt size field in group section header: %#<PRIx64>"
+#~ msgstr "%pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð³Ñ€ÑƒÐ¿Ð¿: %#<PRIx64>"
+
+#~ msgid "error: %pB version reference section is too large (%#<PRIx64> bytes)"
+#~ msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ€Ð°Ð·Ð´ÐµÐ» Ð²ÐµÑ€Ñ�Ð¸Ð¹ Ñ�Ñ�Ñ‹Ð»Ð¾Ðº %pB Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸Ðº (%#<PRIx64> Ð±Ð°Ð¹Ñ‚)"
+
+#~ msgid "unexpected STO_SH5_ISA32 on local symbol is not handled"
+#~ msgstr "Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ STO_SH5_ISA32 Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ�"
+
+#~ msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with %s\n"
+#~ msgstr "%P%X: Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ, Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð¼ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�, Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚Ñ�Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� IFUNC; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� %s\n"
+
+#~ msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
+#~ msgstr "bfd_mach_o_read_symtab_symbols: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²"
+
+#~ msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
+#~ msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� priv spec (Ñ�Ñ‚Ð°Ñ€ÑˆÐ°Ñ�/Ð¼Ð»Ð°Ð´ÑˆÐ°Ñ�/Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ)."
+
+#~ msgid "unsupported relocation type %#x"
+#~ msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#x"
+
+#~ msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC"
+#~ msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC"
+
 #~ msgid "%H: call to `%pT' lacks nop, can't restore toc; recompile with -fPIC\n"
 #~ msgstr "%H: Ð²Ñ‹Ð·Ð¾Ð² Â«%pTÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½Ðµ nop, Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ð¾Ñ�Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ toc; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC\n"
 
-#~ msgid "error: %pB: <corrupt x86 ISA used size: 0x%x>"
-#~ msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° x86 ISA: 0x%x>"
-
 #~ msgid "error: %pB: <corrupt x86 ISA needed size: 0x%x>"
 #~ msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° x86 ISA: 0x%x>"
 
@@ -8672,9 +9849,6 @@ msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿
 #~ msgid "unsupported reloc type"
 #~ msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#~ msgid "SH Error: unknown reloc type %d"
-#~ msgstr "ÐžÑˆÐ¸Ð±ÐºÐ° SH: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d"
-
 #~ msgid "Unrecognized reloc type 0x%x"
 #~ msgstr "Ð�ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� 0x%x"
 
@@ -8731,9 +9905,6 @@ msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿
 #~ msgid "%B: invalid AVR reloc number: %d"
 #~ msgstr "%B: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� AVR: %d"
 
-#~ msgid "%B: unsupported relocation type %d"
-#~ msgstr "%B: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d"
-
 #~ msgid "Unsupported CR16 relocation type: 0x%x\n"
 #~ msgstr "Ð�ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� CR16: 0x%x\n"
 
@@ -8776,15 +9947,9 @@ msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿
 #~ msgid "%B: unrecognised I370 reloc number: %d"
 #~ msgstr "%B: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� I370: %d"
 
-#~ msgid "%B: unknown relocation type %d for symbol %s"
-#~ msgstr "%B: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
-
 #~ msgid "%B: Relocation %s is not yet supported for symbol %s."
 #~ msgstr "%B: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð¿Ð¾ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s."
 
-#~ msgid "%B: invalid relocation type %d"
-#~ msgstr "%B: Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d"
-
 #~ msgid "%B: invalid i960 reloc number: %d"
 #~ msgstr "%B: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� i960: %d"
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/SRC-POTFILES.in ./bfd/po/SRC-POTFILES.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/SRC-POTFILES.in	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/SRC-POTFILES.in	2024-02-01 01:47:14.000000000 +0000
@@ -1,9 +1,7 @@
-aix386-core.c
 aix5ppc-core.c
 aout-cris.c
 aout-ns32k.c
 aout-target.h
-aout-tic30.c
 aout32.c
 aout64.c
 aoutx.h
@@ -32,7 +30,6 @@ coff-stgo32.c
 coff-tic30.c
 coff-tic4x.c
 coff-tic54x.c
-coff-tic80.c
 coff-x86_64.c
 coff-z80.c
 coff-z8k.c
@@ -46,6 +43,7 @@ corefile.c
 cpu-aarch64.c
 cpu-aarch64.h
 cpu-alpha.c
+cpu-amdgcn.c
 cpu-arc.c
 cpu-arm.c
 cpu-arm.h
@@ -71,9 +69,9 @@ cpu-ia64.c
 cpu-iamcu.c
 cpu-ip2k.c
 cpu-iq2000.c
-cpu-k1om.c
-cpu-l1om.c
+cpu-kvx.c
 cpu-lm32.c
+cpu-loongarch.c
 cpu-m10200.c
 cpu-m10300.c
 cpu-m32c.c
@@ -100,10 +98,10 @@ cpu-ns32k.c
 cpu-or1k.c
 cpu-pdp11.c
 cpu-pj.c
-cpu-plugin.c
 cpu-powerpc.c
 cpu-pru.c
 cpu-riscv.c
+cpu-riscv.h
 cpu-rl78.c
 cpu-rs6000.c
 cpu-rx.c
@@ -117,7 +115,6 @@ cpu-tic30.c
 cpu-tic4x.c
 cpu-tic54x.c
 cpu-tic6x.c
-cpu-tic80.c
 cpu-tilegx.c
 cpu-tilepro.c
 cpu-v850.c
@@ -125,7 +122,6 @@ cpu-v850_rh850.c
 cpu-vax.c
 cpu-visium.c
 cpu-wasm32.c
-cpu-xc16x.c
 cpu-xgate.c
 cpu-xstormy16.c
 cpu-xtensa.c
@@ -150,6 +146,7 @@ elf-nacl.c
 elf-nacl.h
 elf-properties.c
 elf-s390.h
+elf-sframe.c
 elf-strtab.c
 elf-vxworks.c
 elf-vxworks.h
@@ -234,12 +231,13 @@ elf32-v850.h
 elf32-vax.c
 elf32-visium.c
 elf32-wasm32.c
-elf32-xc16x.c
 elf32-xgate.c
 elf32-xstormy16.c
 elf32-xtensa.c
+elf32-z80.c
 elf32.c
 elf64-alpha.c
+elf64-amdgcn.c
 elf64-bpf.c
 elf64-gen.c
 elf64-hppa.c
@@ -264,6 +262,9 @@ elfxx-aarch64.c
 elfxx-aarch64.h
 elfxx-ia64.c
 elfxx-ia64.h
+elfxx-kvx.c
+elfxx-loongarch.c
+elfxx-loongarch.h
 elfxx-mips.c
 elfxx-mips.h
 elfxx-riscv.c
@@ -273,7 +274,6 @@ elfxx-sparc.h
 elfxx-tilegx.c
 elfxx-tilegx.h
 elfxx-x86.c
-elfxx-x86.c
 elfxx-x86.h
 format.c
 genlink.h
@@ -285,7 +285,6 @@ i386bsd.c
 i386lynx.c
 i386msdos.c
 ihex.c
-init.c
 irix-core.c
 libaout.h
 libbfd.c
@@ -312,23 +311,26 @@ ns32knetbsd.c
 opncls.c
 osf-core.c
 pc532-mach.c
+pdb.c
 pdp11.c
+pe-aarch64.c
 pe-arm-wince.c
 pe-arm.c
 pe-i386.c
 pe-mcore.c
-pe-ppc.c
 pe-sh.c
 pe-x86_64.c
 pef-traceback.h
 pef.c
 pef.h
+pei-aarch64.c
 pei-arm-wince.c
 pei-arm.c
 pei-i386.c
 pei-ia64.c
+pei-loongarch64.c
 pei-mcore.c
-pei-ppc.c
+pei-riscv64.c
 pei-sh.c
 pei-x86_64.c
 peicode.h
@@ -338,7 +340,6 @@ ppcboot.c
 reloc.c
 reloc16.c
 rs6000-core.c
-sco5-core.c
 section.c
 simple.c
 som.c
@@ -365,5 +366,6 @@ xcofflink.c
 xcofflink.h
 xsym.c
 xsym.h
+xtensa-dynconfig.c
 xtensa-isa.c
 xtensa-modules.c
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/sr.gmo ./bfd/po/sr.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/sr.gmo	2019-12-11 01:53:31.000000000 +0000
+++ ./bfd/po/sr.gmo	2024-02-01 01:52:33.000000000 +0000
@@ -1,65 +1,157 @@
-Þ•wÔ+KŒW¸t¹tÆtßtþtu$(u3Mu�uŽu%®uÔuAäu&&vMvfvv˜v¨v Çvèvw!w8wKw*cw9Žw6Èw;ÿw;xFMx6”x:Ëx5yJ<y)‡yG±yLùy)FzLpz½zÓzDêzG/{w{–{¨{¼{Ô{3ó{'|0>|o||�|+©|+Õ|+}#-}Q}i}r}~}œ}³}Ê}ê}~ ~;~[~t~�~¥~½~,Ñ~þ~'?Ve{•1¬Þïü€.€#F€+j€&–€5½€ó€�%�;�U�n�…�$›�À�Ù�ù�‚$&‚K‚_‚t‚<�‚Ê‚Ù‚
è‚ö‚
-ƒ "ƒCƒ^ƒnƒŽƒªƒÊƒãƒüƒ„*„F„X„&j„‘„0¥„Ö„"ê„	
……#*…N…g…x…‘…"ª…Í…"á…#†#(†L†#a†#…†©†¶†¼†Ä†É†
-æ†ñ†ö†!ü† ‡?‡D‡I‡i‡‰‡Ž‡¢‡!§‡É‡Ð‡Ö‡Û‡à‡æ‡ê‡ï‡ˆ$ˆ)ˆIˆ]ˆB}ˆÀˆàˆåˆêˆñˆ÷ˆüˆ‰‰‰%‰>‰R‰c‰t‰…‰–‰§‰¿‰	Î‰
Ø‰
æ‰
-ô‰
-ÿ‰
-
-Š
-Š Š
-5Š$@Š
-eŠ#pŠ%”Š
-ºŠÅŠ×ŠêŠ$‹'‹E‹!_‹�‹–‹
-¥‹
°‹	¾‹È‹
-Ù‹ä‹ë‹ŒŒ/Œ>ŒUŒpŒŒ˜Œ§Œ®Œ(¾Œ/çŒ�)�+8�d�A€�Â�Ü�ö�Ž8%Ž^ŽvŽ‹Ž&¥ŽÌŽëŽ2�?9�&y� �(¿�"è��*+�6V�{��r	‘x|‘õ‘5’A’DN’*“’7¾’$ö’'“*C“!n“=�“AÎ“E”V”%u”D›”à”.þ”,-•*Z•%…•4«•à•>ÿ•Q>–G�–8Ø–	—J—5f—8œ—(Õ—,þ—P+˜E|˜FÂ˜F	™OP™H ™3é™<š%ZšA€šnÂšK1›7}›*µ›8à›.œ<Hœ9…œ@¿œH�BI�JŒ�B×�TžTožTÄž‰Ÿ<£ŸmàŸ[N Pª <û D8¡^}¡DÜ¡€!¢1¢¢JÔ¢I£>i£m¨£6¤aM¤¯¤·¤7Ë¤!¥#%¥8I¥)‚¥.¬¥0Û¥>¦>K¦/Š¦/º¦Fê¦>1§-p§(ž§Ç§7å§1¨0O¨/€¨)°¨/Ú¨;
-©<F©Aƒ©<Å©,ª//ª-_ª&�ª3´ª3èªO«Wl«OÄ«o¬+„¬5°¬#æ¬7
-­EB­>ˆ­2Ç­:ú­U5®2‹®(¾®+ç®¯7-¯<e¯?¢¯Qâ¯34°'h°=�°<Î°"±M.±K|±DÈ±!
²:/²7j²¢².À²ï²1³A³'^³%†³ ¬³EÍ³4´HH´?‘´<Ñ´Gµ>Vµ-•µ<Ãµ7¶18¶8j¶2£¶+Ö¶/·^2·]‘·7ï·'¸+G¸Ls¸+À¸ì¸
-¹#¹C¹+^¹5Š¹@À¹@ºIBºIŒº9Öº$»,5»'b»=Š»QÈ»D¼1_¼5‘¼Ç¼2ä¼.½?F½.†½ µ½AÖ½E¾:^¾$™¾9¾¾5ø¾&.¿&U¿4|¿1±¿$ã¿$À/-À%]À<ƒÀ*ÀÀ'ëÀ3Á&GÁnÁ4ŠÁ¿Á4ÞÁÂ.*Â(YÂ*‚Â6­Â2äÂ5Ã8MÃW†ÃZÞÃB9Ä5|Ä=²Ä<ðÄ(-Å-VÅ0„ÅµÅPÏÅ  Æ@AÆk‚Æ4îÆ;#Ç$_Ç'„Ç¬Ç2ÉÇOüÇKLÈG˜È`àÈAAÉYƒÉSÝÉ<1ÊgnÊaÖÊl8ËF¥Ë-ìË2Ì(MÌ3vÌ1ªÌ-ÜÌD
-ÍBOÍ6’Í*ÉÍ#ôÍ2Î.KÎ*zÎ(¥Î]ÎÎJ,ÏwÏ’Ï4¬ÏDáÏC&ÐCjÐE®Ð^ôÐ]SÑ)±Ñ+ÛÑ$Ò),Ò7VÒ9ŽÒ&ÈÒ&ïÒ2Ó+IÓ=uÓ,³ÓàÓ+þÓ*Ô-@Ô+nÔšÔ¹Ô*ØÔ2Õ"6Õ#YÕ"}Õ- Õ,ÎÕGûÕGCÖG‹Ö(ÓÖ@üÖD=×3‚×2¶×`é×2JØ7}Ø5µØ/ëØ*Ù1FÙ;xÙ&´ÙWÛÙ-3Ú+aÚ-�Ú»Ú)ÙÚ%Û2)Û2\Û=�Û;ÍÛB	ÜALÜ:ŽÜ2ÉÜ?üÜ<Ý›\Ý6øÝ6/ÞAfÞG¨Þ6ðÞ='ß:eß: ßDÛß8 à9YàC“à:×à7á8Já9ƒá,½á6êá!â;=â:yâ.´â/ãâã13ã%eã$‹ã9°ãOêã#:ä,^ä1‹äC½ä6å"8å2[å/Žå(¾å&çå%æ)4æ ^æHæ4Èæ'ýæ1%ç;Wç>“ç%Òç7øç(0è5Yè'�è8·è>ðè /éPé!né �é'±ébÙé)<ê=fêG¤ê%ìê*ë0=ë&në&•ë7¼ë7ôë8,ì0eì9–ì6Ðì/íC7íQ{íÍíííüíî2'î&Zî.�î°îM¿îT
ï2bï|•ï(ð[;ð+—ð/Ãð(óðRñFoñF¶ñ:ýñ68òDoò(´ò7Ýò*ó-@ó0nóAŸóHáó>*ô+iôI•ô;ßôõ;;õ;wõ.³õ.âõ=öIOö.™ö/Èö@øö*9÷)d÷;Ž÷Ê÷>è÷B'øljø@×ø?ùGXùF ùJçùH2úK{úGÇúBûXRû4«û/àûNü0_ü(�ü/¹üéüüüý0"ý=SýD‘ý0Öý5þ)=þ7gþŸþ¹þ'Øþ&ÿ['ÿGƒÿOËÿ9U>u2´5çP=n<¬/éo]‰ç
û	
#%4\Z;·ó;H	ak}•¦,³àô
-/!/Q2�9´#î'2:3m¡;±í/DYk~•²Ï	í"÷+#F,j:—Òä.	4/	?d	=¤		â	"ì	
-&
-/
-3
-F
-X
-j
-'|
-¤
- Á
-#â
-  2S$q$–'»%ã'	1Oo"�²Â×ì
)
C
#Y
#}
-¡
8Ï
2A;'}.¥YÔ_.;Ž)Ê!ô$;HP%™¿5Ü
-'"2Ug€›°½Ì
êø/
-+:8fŸ
-µÀß'ñ+.I-xG¦3î""AId%®Ôçù":L$e*Š+µáþ5FXj€’²ÌÝìþ	
-/":%]ƒ�žµÑçù2Rfx�-®Üî/O)d/Ž¾Ðâé!ð.,An:Š%Å%ëC*=nC¬=ð".[Q?­í))S\vw*î&+Rr„‹(’»'Íõ*J#b$†,«.Ø, .4 c "€ ,£ .Ð !ÿ 1!!0S!2„!,·!.ä!#"7"W"(k"/”"!Ä"æ"(##,#+P#|#,•# Â#ã#ü#$0$P$#o$-“$"Á$ä$ö$%!%:%O%a%2|%$¯%&Ô%û%	&!%&DG&DŒ&/Ñ&'/'?C'ƒ'”'´'Ë'7Þ'(J(‰j(7ô(,)*F)q)‰)¡)·)È)Þ)#û)%*E*X*u*’*J¤*Jï*J:+I…+:Ï+;
-,:F,E�,6Ç,+þ,;*-Ff-Q­-/ÿ-B/.@r.;³.Kï..;/Fj/a±/=0&Q0.x0/§0-×0/1i51DŸ1dä1.I2,x2F¥2fì2CS3—3#¶3@Ú3847T4Œ4˜¬4	E5O5k5}5�5<¤52á5.6C6K6b6z6d’6÷66
-7=A7g7bç7=J8Eˆ81Î8(9$)9N94d9'™9$Á97æ9:/:G:^:o:‡:Ÿ:±:Ã:Õ:ç:;;.;?;W;v;2•;È;-á;+<+;<*g<	’<	œ<
-¦<
-±<¼<Ñ<à<õ<=1	=;=Z='y="¡=Ä=â=÷=>,>]K>=©>(ç>Z?Zk?EÆ?A@GN@W–@Wî@9FA9€A-ºA4èA9B4WB2ŒB7¿B5÷B7-CBeCE¨CBîCC1DAuD.·D2æD E[:E@–E:×E#F=6F<tF%±FN×F-&GOTG;¤G àG>H9@H
-zH1…H&·H&ÞH!I'I,FIJsI7¾I
öIJJ+J>J7QJ6‰JÀJ$àJ"KA(KjK,ˆK2µKèK¾øK»·LsMŽM©MBÉMDN*QNL|NÉNÞNŒíNzO0‚O9³OíOPPP3P:P2VPO‰PÙP*øP #QDQbQoQ ‰QªQ¾QÓQéQýQR*RGRXRlRNtRÃR#ÇRëR6S:S ZS8{S´SÆSÖSÞSóSTT/TBTLUT ¢TDÃTPUYUkU~U3™U!ÍUïU"öUV)V8V%KV'qV$™V*¾VéV0W,6WcW�W›W£W
»W%ÉWïW'X/XIXcXzXŒX£X7ºXòXY Y2YEYYYmYƒY™Y-¸Y)æY>ZgOZx·Z-0[!^[7€[¸[!Ñ[;ó[0/\5`\<–\<Ó\2]/C].s]=¢]/à]6^,G^-t^¢`*²`0Ý`2a-AaNoam¾a,b6=bGtb¼b|Õb?Rc+’c!¾c'àcd1d3Pd2„d-·dåd"e0$e\Uea²e{fL�f$ÝfšgZ�gaøgWZh|²hA/isqixåi?^jvžjk$0krUk€Èk;Il!…l§l3»l/ïlLm lm_�mímnnF/nFvnF½n5o#:o^ogo/so2£oÖo.õo,$p(Qp.zp1©p!Ûp0ýp .q%Oq%uqI›qåq'õq!r'?rgr%‚r¨rÈrFèr/sOs%\s%‚s!¨s;ÊsLtASt[•t3ñt,%u,Ru-u­uÍuëu=v%Fv4lv*¡v%Ìv?òv$2w&Ww*~w<©wæwõw
xx,)x8Vx+�x»x:Òx4
y1Byty%’y¸yÔyIày*zEzG`z¨zNÅz{=({f{w{#Š{)®{Ø{ ø{ |1:|l|;€|#¼|#à|$}#)}#M}q}Š}�}˜}-�}Ë}ã}è}0î}4~T~Y~'^~-†~´~¹~Õ~@Ú~"(-28<+A)m—)œÆ+áj
€)x€¢€§€¬€³€¹€¾€7Å€ý€�<�7I�����¹�Õ�ñ�
‚!)‚K‚X‚i‚
z‚
ˆ‚
–‚
-¤‚$¯‚ Ô‚Qõ‚Gƒ~ZƒtÙƒ N„Co„³„/Ó„H…3L…/€…B°…)ó… †>†#T†x†$‡†¬†	Ä†-Î†&ü†C#‡-g‡/•‡9Å‡ÿ‡3ˆ
Pˆ^ˆeˆV‚ˆ`Ùˆ#:‰^‰H{‰,Ä‰�ñ‰4�Š*¶Š!áŠ‹P#‹#t‹/˜‹4È‹?ý‹:=Œ&xŒWŸŒp÷ŒEh�@®�Aï�51Ž6gŽAžŽ\àŽÆ=�Æ�·Ë�+ƒ‘`¯‘’r ’D“’SØ’E,“Rr“FÅ“>”{K”€Ç”dH•?­•`í•qN–>À–Xÿ–JX—@£—Hä—W-˜>…˜rÄ˜‡7™‰¿™tIš	¾švÈšW?›a—›[ù›`Uœ�¶œuF�x¼�x5ž�®žz0ŸZ«Ÿu G| |Ä ½A¡‰ÿ¡c‰¢Kí¢b9£Xœ£cõ£ZY¤r´¤'¥t§¥�¦lž¦œ§œ¨§—E¨Ý¨cá©×Eª¼«�Ú«}k¬‘é¬Ã{­�?®ùÁ®b»¯˜°�·°vH±Ú¿±bš²ºý²¸³(À³té³=^´;œ´tØ´XMµM¦µOôµrD¶r·¶q*·^œ·„û·e€¸Wæ¸D>¹.ƒ¹p²¹d#ºYˆºpâºPS»p¤»V¼|l¼Yé¼|C½UÀ½Y¾hp¾BÙ¾d¿d�¿¢æ¿�‰À˜Áÿ³ÁY³Âf
ÃXtÃbÍÃz0Äo«Ä]ÅlyÅªæÅb‘ÆPôÆTEÇ1šÇiÌÇ�6È~¸ÈŠ7ÉSÂÉ>ÊvUÊvÌÊ0CËˆtËaýË\_Ì-¼ÌsêÌg^Í2ÆÍ\ùÍ@VÎY—Î;ñÎ:-Ï9hÏ0¢ÏrÓÏ_FÐ…¦Ðs,Ñi Ñ
-ÒyŠÒPÓOUÓp¥ÓhÔtÔbôÔtWÕNÌÕ�Öœ¹ÖbV×5¹×Uï×EØNÅØ7Ù*LÙFwÙ)¾ÙNèÙS7Úq‹ÚqýÚœoÛœÜn©ÜFÝM_ÝN­ÝpüÝ‚mÞtðÞLeßm²ß= à\^à^»à`áX{áDÔá~â“˜âq,ãGžãzæãjaäNÌäPållåTÙåF.æJuæSÀæPçXeçL¾çKèVWèH®è1÷ès)éA�é]ßé.=ê^lêKËê_ëzwëxòë}kì�éì³zíº.î‰éî}sïhñïƒZðcÞð]BñR ñ7óñŠ+òC¶òxúò¸sól,ô™ôBõH\õ@¥õcæõªJö†õö…|÷ÑøvÔøÅKù¹ú‡ËúÄSû¾üÉ×üƒ¡ýa%þd‡þ@ìþc-ÿR‘ÿIäÿp.pŸjT{ZÐ_+X‹VäP;¸ŒmE&³%Úlymxçx`zÙ“T’èS{UÏG%	Rm	^À	d
-D„
-IÉ
-UPi†º^A: XÛ)4
P^
B¯
>ò
?1TqKÆFGY@¡EâD(›mu	›Jfšæh�Oêº:YõdOo´h$[�né€XRÙ‘,^¾Q_oKÏSLoT¼u’‡� ª¯Kžû~šo/‰8¹|ò |o!}ì!ƒj"_î"dN#`³#a$uv$^ì$`K%t¬%`!&^‚&^á&y@'pº'g+(5“(rÉ(n<)U«)Z*5\*^’*Fñ*K8+b„+rç+?Z,Rš,_í,ŒM-tÚ-:O._Š.|ê.Og/U·/O
0T]0A²0±ô0Z¦1B2bD2t§23?œ3^Ü3_;4^›4Hú4YC5n�5C6<P6K�6EÙ6j7ãŠ7on8zÞ8pY9KÊ9Z:Mq:<¿:Uü:`R;Z³;]<Gl<]´<[=Tn=mÃ=™1>cË>'/?3W?-‹?a¹?C@__@¿@—Î@§fAWBÛfBRBCœ•CT2D\‡DWäDš<Ez×EzRFZÍFŽ(G\·GHHh]HQÆHJIrcI‚ÖIŽYJ}èJPfK�·KsGLH»LtMtyM\îM\KN}¨NŠ&OL±OPþOˆOPGØPS QvtQ9ëQu%R›RºSuÖSsLT€ÀTAUƒÁUwEV’½V…PWwÖW¦NX~õXctY{ØYeTZBºZRýZ(P[y[™[\·[s\ˆ\W]_`]CÀ]Z^-_^?�^BÍ^?_�P_uà_ˆV`Uß`E5aw{aXóaZLbœ§b}DctÂch7d¿ dª`ef)f;fXfsfU�f¶æfw�g"h?8hxh;{h·h2Ïhii24igiƒif—iþi&j)BjNljf»jr"k€•kSlWjllÂly/m ©mqÊm(<n en†n#�n$³n$Øn!ýn"o2Bo;uo/±o0áopQ'pZypTÔpX)qz‚qýqAr\^rh»rf$sh‹s!ôsCt.Zt‰tšt,¡t.ÎtýtuB*u(mu?–uAÖu(v/AvAqv:³v6îv6%w9\w7–w9Îw/x18x1jx4œx1Ñx4y68y2oy0¢ySÓy#'z?KzN‹zUÚzv0{j§{Q|Vd|Q»|°
}›¾}pZ~MË~:0T&…r¬P€4p€d¥€&
-�1�XB�%›�/Á�7ñ�8)‚(b‚$‹‚*°‚Û‚ú‚Šƒ]£ƒd„*f„‘„?ž„Þ„5ü„2…8F…M…BÍ…o†_€†=à†9‡}X‡LÖ‡%#ˆ'Iˆ?qˆ?±ˆñˆ+‰*=‰dh‰cÍ‰@1Š%rŠj˜Š‹‹4‹P‹;f‹4¢‹(×‹ŒŒ3Œ:ŒJŒ9`ŒšŒR²ŒO�U�k�ƒ�, �Í�í�3Ž5Ž1UŽ‡Ž�Ž¹Ž2ÖŽU	�_�w�‹�'¥�;Í�,	�Z6�`‘�ò�#‘/‘6‘;=‘Jy‘HÄ‘-
’G;’4ƒ’4¸’(í’p“y‡“”k�”@í”¸.•†ç•4n–5£–XÙ–2—3I—¾}—S<˜�˜F®˜Võ˜L™e™l™Ts™È™?ä™1$š1Vš3ˆš(¼šJåš=0›Qn›WÀ›QœWjœ3Âœ:öœQ1�Wƒ�?Û�RžYnž_ÈžQ(ŸWzŸDÒŸ4 L Ek V± 1¡':¡:b¡:�¡NØ¡&'¢CN¢9’¢+Ì¢4ø¢-£9J£/„£F´£Nû£FJ¤*‘¤&¼¤/ã¤6¥/J¥-z¥7¨¥cà¥HD¦`�¦Bî¦1§H@§‰§	¨s‰¨.ý¨`,©”�©"ª9=ª/wª-§ª‚ÕªX«†a«áè«eÊ¬00­da­2Æ­+ù­5%®0[®5Œ®:Â®4ý®72¯'j¯7’¯:Ê¯°—#°�»°‰I±�Ó±uc²gÙ²pA³Œ²³p?´w°´˜(µ¼Áµæ~¶¦e·•¸Â¢¸˜e¹¹þ¹n¸º¼'»ä»‡æ¼]n½lÌ½T9¾_Ž¾aî¾ºP¿À±‹Àb=Á` ÁŽÂ°�Â{AÃD½ÃRÄ†UÄtÜÄeQÅ9·ÅñÅ	ùÆ#Ç''Ç'OÇ+wÇm£ÇTÈNfÈµÈ6ÂÈ&ùÈ, É�MÉ%ëÉRÊOdÊ±´Ê¤fËYÌfeÌFÌÌ=Í>QÍ*�Ít»Í]0ÎMŽÎ|ÜÎ(YÏ9‚Ï8¼Ï(õÏ9Ð5XÐ)ŽÐ)¸Ð)âÐ)Ñ;6Ñ7rÑ)ªÑ(ÔÑ3ýÑL1ÒB~ÒPÁÒ0Ó[CÓYŸÓYùÓPSÔ¤Ô»ÔÒÔêÔ!Õ$Õ3ÕHÕWÕR`Õ4³Õ,èÕRÖQhÖBºÖ2ýÖ0×3I×d}×§â×fŠØMñØ¨?Ù¢èÙu‹ÚxÛkzÛ×æÛ×¾Üp–ÝzÞm‚Þ\ðÞaMß\¯ßeà‹ràhþà‹gá~óá�râŽã‰�ã†äV äX÷äBPå«“åu?æzµæN0çpçmðçE^èš¤èO?é«�éo;êE«êgñêbYë¼ëbËëR.ìT�ìIÖìG íZhí”ÃízXîÓî5ñî'ï;ïNïjaïqÌï@>ðBð8ÂðŽûð@ŠñOËñ[òwòa—ò[ùó6Uõ=ŒõHÊõxötŒöh÷—j÷&ø)øEøMùZbùK½ù7	úAú^ú7uú­ú.¼úiëú¬UûBüWEü;�üYÙü3ý2KýO~ý)Îý*øý+#þ(Oþ+xþ,¤þ+Ñþýþ.ÿLÿvcÿÚÿ@áÿ-"jP=»<ùc6)š.Äó/.@oƒ—ª¯½4m˜¢„;À&ß7m>P¬ý7
-BR-aO�QßD1\v9ÓP
S^5²3è	//	_	T	5Ô	M
-
-7X
-4�
-6Å
-)ü
-4&)[g…Ví$D!i"‹#®#Ò%ö%
8B
\{
TØ
…-÷³«R®RrT7ÇJÿgJb²vmŒmú^hSÇ\}xjöfaUÈ�ÝgóAX]˜1Ð�rb:Yð
-kê4ÏrGJêæ‘(äOÒªqúçîß/ièB_Œ¾Snwx½RŽÐ	[ïÌT+‚ÿ| Ì¡†c2ºÐFÀí?\ÿJM>ŸAqÀŸ²VýIÔ^š­Ç/rÒä—Ô£HÈ®²è‡bHÔGûì¾Ãn™�®–%­ÊñIkc¶“2<Êº�¥Y´§X5“$
\7÷àã²©æEéãšz´V|ÓòˆK­˜EouÄ$VJK¡»†>Ûì¨
-èñ¢â&	¨k'¸sØv.9¤b†át ˜Ýioðõ[½ÖašŽœžÄQ8‘@ «³dÍ¬zØ8ÅêCt”idþBf–§ž*oÃìËEÞ—ôþ]ºcl0ÑÎ¹\8¼,)œ™�\PõíÁmT±ê�•¬BÇY‰;]¤0ayON£�X6³ÖSu:1r€3"‡n	ö±[rƒÓ=§^=IåMÄ$%X¶<¾”p-á:Á¬�Â@3üRÉOÅeÅµŸ¹ç{÷Œ^ñö›	¶¦¥=e´ç(UˆhD¸Üã5…27e*sôù.é4äMXW	OP_eÉQÛèjÅkLë‚Œ™©1SÅ½³6,Jœ:¿P.’Ö˜Ñ*ë¸ÝU}jt#Ùat~8<ÿ­0!¦uüVÆZ	;�Í³÷ù¬+`ø°`Ê@ÈØ¹ $µ°_Ö£G€‰lò~¯¹!ÞÙ{;…Àóq{M’ˆ¿¼URÇ(!¢C(þïv‹¿JLnIjÒskmswŠG#(?ë¥#"@q�¨Ü’÷+!„Ç‹J6ÒÎÈÚ]‡d'Ô„p¶OÂbîÂ]žÈ›Z
V�x\˜�¦·zur²Á‚Œ™GX;¼ÚˆS?&=xÕ-#©òHEoNcõgÁ¨pÞù*œ¾6«�óúF‡Æ1òdRÆ'
-ÖýeUWC·–>-ËNàÌzé›ZŽ»–K»•ƒi%`Ä¡Ã:h¤¤.k
-n KÛZ*¤w³(I&já ßí/º&A·L�+‘·�å—o4)%6žßûð"ú`‹vâû€ï9úZ}Õ‘,®vzø9+Žní…­â×š=
g)jÊtþUŒiw¿
-ƒ”‚QáW¸Ú2¡m«±!¥÷ûÚ>¢¾+°aYž’d_À€pý_Šæ„ôµ±Ÿ¯ÞÎgÔ½Ûô’gPÿ,•é?�à,Ù
‰ŸÌ§A@á�530^fÌ{¯ú<«×µ5ZRx�-hùBN)…PÒußR „å/�Amyv2€véD>ÝOøNýË8lº±´/›|$Á'D\œIÐ~ãø‹¦ï"V‹Ú;Qùf�l/Š-�Äh$Õ
pÇË—FðàfH"9hâg6ø4”ƒªª}×²Ù|S-°^9%õeØ�a<EWD<ÏÕÎ%•ÿ[puwèìÙh�ÈDyû!£Í:§†; Ym5·bß¥”}ÜÑªWÊÑ…Þöä¦¯8°qñ~]ŠAF)d«Y7M[là—Õ}4ëw�ÂKóC‰F¬ˆ„•"ë>fU3¢f3GØN*ÀÉô
`ñóÎ[îT¸ö¹b»–2FÃÉ7å|Ó.t†TÑ
-?T“Hi.M›µÓîìCEçƒLoòÐqs¢ËÆŽy&®#D™âõ‘'ý`{ðÝ0¯Âüa�x9BC½#¡‚BQÉ“ä¿&ŠªÃ×ÛLüþsLÍ¨y ãç1æ'31K´@QÏ5‡T4Ü©Ó)¶‰Wíl7ÏcH®©S_î¼Ü7æï×~ÍÏ^üåšm »“öPc=,?Æê0¼ j£	    TLS: %A	Export Address Table 			Export Address Table 		%08lx
-	Name Pointer Table 			Ordinal Table 				[Name Pointer/Ordinal] Table	%08lx
-	code-base %08lx toc (loadable/actual) %08lx/%08lx
-	non-TLS: %A	reloc %4d offset %4x [%4lx] %s	vma:  Hint/Ord Member-Name Bound-To
+Þ•	0x8
+Àp<™ŽT™Œ›4¶
5¶C¶W¶p¶A�¶?Ñ¶:·L·c·v·$•·
º·È·%è·¸¸A"¸&d¸‹¸¤¸½¸Ö¸æ¸ ¹&¹F¹_¹v¹ƒ¹P–¹ç¹*ÿ¹;*ºfºFxº6¿º6öº:-»5h»,ž»DË»N¼J_¼)ª¼=Ô¼:½LM½)š½BÄ½L¾T¾j¾D�¾GÆ¾¿-¿?¿S¿k¿€¿3Ÿ¿Ó¿ê¿0ü¿-À=ÀMÀ+gÀ+“À+¿À#ëÀÁ'Á0ÁLÁcÁ(xÁ?¡Á>áÁ% Â&FÂ(mÂ)–ÂGÀÂÃÃ?Ã\ÃuÃ�Ã°ÃÉÃäÃúÃÄ&Ä=Ä,WÄ„Ä”Ä­ÄÅÄÜÄëÄÅÅ0ÅGÅ1\ÅŽÅŸÅ¬ÅÃÅÞÅ#öÅ+Æ&FÆ5mÆ£Æ¸ÆÐÆêÆÇÇ3ÇJÇ`Ç$uÇšÇ³ÇÓÇëÇ$È%È9ÈNÈ<gÈ¤È³È
ÂÈÐÈäÈùÈ É2ÉMÉ]É}É™É¹ÉÒÉëÉþÉ*Ê9ÊKÊ&]Ê„Ê0˜ÊÉÊ"ÝÊ	Ë
+Ë#ËAËZËkË„Ë"�ËÀË"ÔË#÷Ë#Ì?Ì#TÌ#xÌœÌ©ÌÇÌåÌëÌøÌÍÍ"Í
+@ÍKÍPÍ!VÍ xÍ™ÍžÍ£Í»ÍÛÍûÍÎ!Î'Î8Î?ÎEÎJÎOÎUÎYÎ"^Î�Î†Î¦ÎºÎ&ÚÎBÏDÏdÏiÏnÏuÏ{Ï€Ï’Ï™Ï±ÏÅÏÌÏåÏùÏ
+ÐÐ,Ð=ÐNÐfÐ	uÐ
Ð
�Ð
+›Ð
+¦Ð
+±Ð
+¼Ð
+ÇÐ$ÒÐ
+÷Ð#Ñ
+&Ñ1ÑCÑ![Ñ}Ñ’Ñ
+¡Ñ
¬Ñ	ºÑÄÑ
+ÕÑàÑçÑÿÑÒ+Ò:ÒQÒlÒ{Ò”Ò£ÒªÒ(ÊÒ/óÒL#ÓpÓ‚Ó+‘Ó½ÓAÙÓÔ5ÔOÔiÔ8~Ô·ÔÏÔäÔ&þÔ%ÕDÕ2_Õ?’Õ&ÒÕùÕ(ÖAÖ"TÖwÖ*—Ö6ÂÖ{ùÖru×xè×aØwØ7÷Ø:/ÙjÙ@|Ù5½ÙFóÙM:Ú4ˆÚ4½Ú=òÚ70Û4hÛ1�ÛUÏÛU%Üb{ÜbÞÜAÝaÝ&Ý¦Ý&ÀÝœçÝ,„Þ1±Þ'ãÞ$ß/0ß-`ß+Žß0ºß&ëß2à8Eà*~à©à=Éà9á:Aá6|á6³á$êáâ//â_â5tâ+ªâ$Öâûâ6ã"Qã&tã6›ã=Òã:ä:KäD†ä8Ëä9åC>å:‚å7½å8õå@.æGoæ9·æ,ñæ0ç#Oçsç=Žç-Ìç6úç1è7Mè3…è;¹è:õè(0é"Yé3|é%°é?Öé.êEê0eê1–ê'ÈêVðêGëEeë8«ë(äëc
ì4qì&¦ì2Íì&ík'í*“í*¾í4éí]îA|î?¾îGþîFïOeïbµï8ð,Qð+~ð)ªðYÔð0.ñ=_ñ3�ñ2ÑñBò,Gò(tòL�òêò4ó)=ó$gó3Œó9Àó6úó/1ôDaô&¦ôWÍôU%õ8{õ%´õ(Úõ&ö,*ö#Wö>{öBºöBýö@÷'`÷Eˆ÷9Î÷4ø3=øJqø(¼ø;åø!ù0@ùDqù/¶ù:æù@!ú@búG£ú?ëú2+û8^ûS—û'ëû.ü,Bü'oü6—ü ÎüYïü/Iý4yý5®ýNäýª3þIÞþ9(ÿ3bÿ¾–ÿ<U<’FÏPog>×F`]~¾F=‚„[3c@—MØm&7”#Ìð(&/IVW +ø5$Zo8ƒ"¼$ß'9,Cf!ª!Ì*î/	1I	/{	/«	0Û	*
+07
+<h
+i¥
+=BM=�9Î-&6"].€8¯:èF#
?j
Vª
B(D>m;¬=è4&#[@LÀI
8W+�8¼2õ9(:b3�,Ñuþ t.•.Ä$ó'0@Bq/´,ä'%9,_ŒC¦Jê@5Jv*Á%ì%<81u §(Èlñ<^<›+Ø, HM6–AÍAJQ>œJÛJ&<q<®.ë(lCv°A'6i 4¾0ó+$APJ’3Ý@!R#t.˜BÇF
+4Q%†:¬2ç3 *N 9y C³ C÷ :;!Tv!JË!5"4L"6�"P¸"/	#/9#&i#&�#5·#'í#0$5F$(|$3¥$%Ù$&ÿ$&%'F%=n%#¬%+Ð%3ü%(0&@Y&Cš&5Þ&'' <',]'gŠ'4ò'm'(A•(@×(H)Ga)K©)Iõ)L?*HŒ*CÕ*Y+5s+0©+4Ú+M,N],1¬,)Þ,)-/2-)b-+Œ-7¸-3ð-6$.9[.X•.[î.CJ/6Ž/>Å/=0*B0.m02œ0[Ï0&+1-R1,€1­1È1/ã1$2082'i28‘2"Ê2Hí2A63)x3=¢3#à3@42E4+x4#¤45È4<þ4';5%c5(‰5R²5?6FE6Œ63§61Û6D
7HR7D›7Kà7a,8[Ž8sê8g^9gÆ9B.:‚q:Tô:=I;!‡;-©;b×;b:<g�<g=0m=(ž=4Ç=5ü=O2>)‚>3¬>-à>/?H>?F‡?7Î?G@+N@$z@2Ÿ@.Ò@/A+1A)]A-‡A/µA^åAKDBF�B×B"óBC51C"gC(ŠC$³CEØCDDDcDF¨D_ïD^OE"®E*ÑE+üE'(F;PF8ŒF'ÅF'íF3G>IG-ˆG,¶GãGIHLHiH.‡H/¶HæH$I3+I_IF}I&ÄI!ëI6
J5DJ)zJ¤J¾J(ÝJK+ K LK$mK#’K.¶K.åK%L2:L3mL)¡L\ËLD(MHmMD¶MLûMXHNH¡N)êN*O ?O5`O9–O@ÐO+P6=P\tPAÑP.Q]BQM Q3îQ="RH`R<©R8æR3S4SS4ˆS0½S@îS1/TBaTL¤TAñTL3U8€U+¹U2åU<V3UVX‰VPâV.3W`bW&ÃWPêW\;XX˜XpñXAbY#¤YEÈY+ZK:Z.†Z<µZ,òZX[,x[¥["½[%à[\3&\2Z\�\4­\?â\@"]Wc]=»]*ù]5$^%Z^B€^%Ã^4é^>_<]_Cš_BÞ_;!`3]`)‘`$»`!à`'a8*acaƒa•a¤a!¹aÛa)ña,b-Hb$vb›b1®b_àb@c/Uc+…cV±cIdIRd<œd.Ùd.e/7e;ge£e¶eÊe0Üe/
f=f'Wf7f·f
Ëf.Ùfg
g"g%3g\Yg;¶gòghhh:hGh	`hjh|h�h,šhÇhÛhñh"
i0i(Mi/vi/¦i1Öi8j#Aj'ej2�j3Àjôj;k@kGkOkdktk{kƒk—k¬kÁkÓkækýkl&lDl	clml‹l	 l"ªlÍlßl)ûl/%m"Umxm�m˜m¤m¨m»mÍmßm'ñmn 6n#Wn{n•n¯nÉnãnýno1o CodoH‚o1Ëo#ýo,!pBNpX‘paêp:Lq.‡q7¶q1îq; r(\r:…r,Àr-ír's"Cs-fs”s2³sæsöst t7t!Mt$ot,”t(Át-êtIubu5uµu
+ÊuCÕuIvcvuv}v…v
£v±v>Ãv?wABw„w/ w+Ðw8üw5x$Kx!px1’xÄxãx+y.yBy[y
+hysyB’yÕy%çy
zz.=z-lzGšz3âz{"5{X{u{†{—{©{$Â{ç{!|&|58|n|	€|Š|œ|²|Ò|ì|}})}X0}	‰}“}˜}¤}³}Ê}æ}ü}~.~G~g~{~�~¥~-Ã~ñ~)C'X€�¡³º!Áã:ÿ%:€%`€†€Ÿ€A¸€;ú€C6�z�#”�,¸�=å�C#‚=g‚"¥‚7È‚<ƒ<=ƒ)zƒ5¤ƒÚƒãƒvþƒ*u„ „'²„Ú„ì„ó„ú„
+	…(…=…'O…w…”…¬…Ä…#Ü…†,†.E†,t†.¡†Ð†"í†,‡.=‡!l‡1Ž‡0À‡2ñ‡,$ˆ.Qˆ#€ˆ¤ˆÄˆ(Øˆ/‰!1‰S‰(p‰#™‰+½‰é‰,Š /ŠPŠiŠ‰Š�Š½Š#ÜŠ-‹".‹Q‹c‹v‹‚‹—‹&©‹	Ð‹FÚ‹/!ŒEQŒ—Œ-¨ŒJÖŒM!�o���¦�¹�-Ö�Ž*
Ž8ŽVŽjŽrŽA~Ž>ÀŽÿŽA�7S�B‹�!Î�ð�˜�©�Å�×�é�:þ�#9‘2]‘.�‘#¿‘1ã‘9’O’\’i’y’�’:š’+Õ’#“%“8“Q“i“,�“:®“é“	”d”p”6ƒ”;º”;ö”<2•go•b×•<:–1w–(©–$Ò–÷–/
—+=—i—…—
+Ÿ—
+ª—
+µ—À—Ý—6ù—>0˜<o˜¬˜4È˜'ý˜$%™6J™�™’™ª™Á™Ò™ê™šš&š8šJšdšš‘š¢šºš2Ùš›'&›LN›4››7Ð›0œ'9œaœ�œ–œ¨œ·œ-Ñœ+ÿœ++�*W�	‚�	Œ�
+–�
+¡�¬�È�Ô�á�ö�ž ž5žDž1Iž{ž/›žËžêž ûž'Ÿ'DŸ"lŸ&�Ÿ0¶ŸçŸ  # A 9X -’ À ,Õ a¡9d¡2ž¡4Ñ¡)¢C0¢It¢E¾¢Y£Y^£;¸£;ô£M0¤/~¤5®¤:ä¤5¥4U¥9Š¥7Ä¥9ü¥D6¦G{¦DÃ¦E§CN§-’§0À§4ñ§>&¨;e¨8¡¨*Ú¨6©/<©;l©3¨©%Ü©1ª!4ªVVª9­ª\çªAD«1†«?¸«:ø«73¬>k¬$ª¬EÏ¬u­q‹­Iý­G®4d®O™®Zé®/D¯Ot¯PÄ¯3° I°?j°:ª°&å°
+±±3±0@±%q±"—±%º±0à±!²3²L²g²|²‰²S˜²Oì²<³,[³7ˆ³À³
Â³Ð³1ß³´%´8´K´Ch´O¬´,ü´6)µ`µ$€µ_¥µ"¶((¶AQ¶“¶,±¶2Þ¶H·Z·j·"{·
+ž·>©·$è·
¸ ¸@¸¼V¸¹¹Í¹/ß¹º*ºHº*hºL“º2àº-»)A»"k»Ž»¡»¶»Ë»2Ú»
¼0¼F¼%a¼‡¼9”¼Î¼<à¼=½3[½5�½2Å½7ø½B0¾Ls¾À¾Ñ¾ë¾ó¾û¾¿H¿g¿4j¿&Ÿ¿Æ¿Ï¿
+æ¿ñ¿2
À-@ÀOnÀ¾ÀÝÀ"âÀ*Á%0Á VÁwÁ•Á�ÁC¼Á¤Â¥Â²Â ÌÂLíÂ:ÃCÃWÃlÃ‚Ã˜Ã¯ÃÌÃÝÃïÃûÃÄÄ*$ÄNOÄ[žÄúÄAþÄ@Å_Å,wÅ¤ÅÁÅ6ÙÅÆ 0Æ8QÆ+ŠÆ¶ÆÈÆØÆàÆ'õÆ)Ç(GÇpÇˆÇœÇ°ÇÄÇ×Ç
êÇøÇIÈ \È}ÈDœÈPáÈ2ÉDÉ2_É$’É·É×É5êÉ Ê!;Ê]ÊdÊ2lÊFŸÊJæÊ/1ËFaË¨Ë"ºËÝËíËMüË9JÌ;„Ì7ÀÌøÌÍ-Í<Í,OÍ$|ÍJ¡Í)ìÍ(Î%?Î(eÎŽÎ
+ªÎ,µÎâÎ)üÎ&ÏDÏ^ÏvÏ~Ï–Ï/®Ï)ÞÏÐ
Ð#,ÐPÐ'hÐ�Ð¡Ð·ÐÑÐîÐÑ#Ñ%8Ñ^Ñ{Ñ’Ñ¤Ñ7»ÑóÑÒ%(ÒNÒhÒ}Ò�Ò¢Ò¶ÒÊÒàÒJöÒJAÓJŒÓI×Ó:!Ô\Ô-{Ô;©Ô+åÔ@Õ<RÕ4�Õ6ÄÕ-ûÕ8)Ö5bÖ5˜Ö8ÎÖU×.]×>Œ×IË×hØy~Ø>øØN7ÙI†ÙdÐÙ05Ú;fÚ8¢ÚFÛÚ5"Û&XÛ.Û-®Û.ÜÛ0Ü<<Ü!yÜ›Ü!´Ü)ÖÜEÝZFÝ`¡ÝGÞZJÞU¥Þ.ûÞ,*ßhWßjÀßE+à0qà6¢àkÙàEEá‹á&©áQÐáS"âEvâ#¼â<àâ<ãeZãQÀã2ä/Eä/uä4¥ä=Úä9å0Rå7ƒå%»å'áå=	æ6Gæ@~æ¿æ2ßæç,ç
Cç
Qç
_ç
mç!{ç
�ç"«çÎç
Ýç)ëç)è?è+Tè€è�è”è™èžè£èªè½èÄè=Êè9éBëSë*pë?›ërÛëzNìeÉì2/í-bí-�íN¾í
î6îGVîžî î|¾î?;ï+{ï!§ï'Éïñï1ð39ð2mð- ðÎðêð"ñ“(ñ0¼ñ\íñMJò$˜òš½òZXó]³óaôWsôZËô„&õ�«õ|<öA¹ösûöWo÷xÇ÷?@øa€øvâøYù$tùr™ù€ú;�ú!Éúëú3ÿú3û/MûL}û Êûëû_
+üjü€ü�üF¬üFóüF:ý5�ý#·ýÛý-äý2þ!EþCgþV«þUÿ<Xÿ;•ÿ>Ñÿ?jP».Ú,	(6._1Ž!À0â %4%Z%€%¦IÌ'&!N'p˜%³%Ùÿ!?Fa¨È%Õ%û!!;CLAÌ[j3‰,½,ê-Eeƒ! =Â%4&*[%†?¬$ì&	*8	<c	 	¯	
¾	Ì	"ã	,
+83
++l
+˜
+:¯
+4ê
+1Q%o•²IË0DK�N­ü=
N
_
#r
)–
À
 à
 1"T;h#¤#È$ì##5Y6r8©âè-
<;x�•0›4Ì1'=-e“˜@� Þÿ >%d)i“+®CÚj)‰³¸½ÄÊÏå!ì7F<M7ŠÂÞú2N!jŒ™ª
»
É
×
+å ðQc~v õC/ZBŠ)Í ÷#.R$a†	ž-¨&ÖCý-A/o9ŸÙ3ö
*85?Vu`Ì–-#ÄèH,N�{4*@!k�P­#þ/"4R?‡:Ç&W)p�Eò@8 Ay "» 5Þ 6!AK!\�!Æê!Æ±"·x#+0$\$^d%dÃ%(&nC&Z²&r
'€'`(`a(yÂ(b<)jŸ)]
+*“h*œü*Ÿ™+Ÿ9,/Ù,4	-W>-%–-<¼-9ù-W3/S‹/Mß/I-0gw0Sß0Q31^…1Kä1\02^�2Zì2@G3sˆ3oü3dl4|Ñ4N5@Î576\G6&¤6qË6x=7K¶7E8{H8OÄ8T9_i9dÉ9`.:a�:uñ:^g;`Æ;t'<`œ<^ý<^\=�»=”I>yÞ>pX?VÉ?> @2_@z’@^
AglA5ÔAp
+BX{BrÔBnGCE¶C<üCZ9DY”DoîDU^E5´E]êE_HF;¨F~äF9cG��Gu+Hk¡Hä
IfòILYJO¦J<öJ3KE4LEzLYÀLàMqûMomNƒÝN?aO’¡OÔ4P]	QEgQD­QJòQ¯=RUíRjCSJ®SIùSpCT?´T>ôT‡3U5»U]ñU?OVG�VV×V].W[ŒWTèWn=X9¬XÊæX�±YTOZF¤ZSëZF?[H†[@Ï[|\��\e]@u]b¶]r^sŒ^x_ky_Ôå_”º`ƒOa?ÓaZbŽnbXýbfVcq½cy/dŠ©d|4ea±erfŽ†fNgLdgB±gJôgY?h@™h˜ÚhCsic·idjŽ€j(k‹8luÄlZ:m€•maoaxopÚo“KpÙßp¹q“9rÅÍrû“sƒ�tûu¼vdÌvx1w‡ªwÚ2xc
yLqy)¾yMèyC6zfzz|áz_^{P¾{)|'9|ua|>×|<}DS}u˜}o~7~~7¶~Yî~NHP—[è[D€b €Q�bU�Z¸�²‚€Æ‚YGƒ€¡ƒZ"„h}„>æ„G%…jm…cØ…b<†{Ÿ†p‡«Œ‡e8ˆ?žˆwÞˆYV‰z°‰n+Š1šŠŽÌŠb[‹…¾‹iDŒR®Œq�is�uÝ�gSŽc»Žu�•�Bš�YÝ�Y7‘P‘‘Lâ‘Z/’dŠ’Zï’^J“C©“Aí“O/”+”„«”�0•Á•�A–[Ò–M.—S|—tÐ—`E˜G¦˜Pî˜ü?™u<šu²šY(›*‚›O­›’ý›T�œråœrX��Ë�~iž‹èž�tŸn q� Oó OC¡×“¡ák¢‰M£n×£BF¤^‰¤`è¤HI¥v’¥ƒ	¦\�¦aê¦9L§;†§[Â§¨”ž¨`3©H”©bÝ©U@ªX–ªUïªœE«†â«†i¬qð¬§b­™
+®c¤®\¯ke¯�Ñ¯]b°UÀ°R±ai±ZË±Q&²bx²mÛ²QI³V›³Gò³L:´;‡´UÃ´YµEsµM¹µc¶Lk¶w¸¶€0·X±·I
+¸=T¸G’¸ÎÚ¸s©¹»ºvÙºtP»�Å»€G¼„È¼xM½“Æ½†Z¾xá¾§Z¿Àd‚ÀSçÀ’;Á’ÎÁfaÂIÈÂCÃ_VÃL¶Ã`Ä{dÄpàÄ~QÅ‘ÐÅ´bÆ»ÇŠÓÇ~^ÈlÝÈ…JÉeÐÉ^6ÊT•ÊÃêÊI®ËVøËUOÌ8¥Ì2ÞÌ\ÍEnÍS´Í]ÎjfÎCÑÎpÏ|†ÏNÐ‚RÐ=ÕÐÑq“ÑFÒVLÒm£Ò€Ó^’ÓCñÓI5Ô‹ÔuÕ��Õ=ÖdAÖX¦Ö˜ÿÖ†˜×wØ —ØÒ8ÙÄÚùÐÚÖÊÛÖ¡ÜwxÝðÝºßˆ¾ß;GàNƒà¹Òà¿Œá¾LâÄãdÐã?5äfuäeÜä‰BåBÌåTæGdæK¬ætøætmçmâçŒPèUÝè[3éb�éVòéYIêW£êQûêUMë^£ë¹ìn¼ì^+í'Ší.²í&áímî@vîM·îBïzHïyÃïy=ð{·ð”3ñ“ÈñE\òL¢òTïòIDótŽóhôElôJ²ôVýô‡Tõ_ÜõY<ö3–ö—Êö7b÷Cš÷YÞ÷]8ø@–ø>×øRù<iùs¦ù:ú1UúU‡ú`ÝúN>û:�û>ÈûJü6RüM‰ü>×üHýG_ýT§ýRüý>OþXŽþYçþDAÿ�†ÿ‰œ¡r>…±«7œãK€EÌFZYm´y"Zœ[÷ S€ôQu ÇœhZ	j`	€Ë	hL
+eµ
+hq„nöietÏOD
j”
uÿ
duwÚRR\¥o�rdô¥Y�ÿe�ºöR±š–Ÿ’6ÀÉ|Š?{GQÃ{`‘kòW^”¶UK)¡9ËK8QvŠSMU]£\q^‰Ð~ZSÙk-@™|ÚJW Z¢ “ý �‘!¡""°Ä"Ÿu#$L•$Nâ$<1%?n%]®%c&p&'‡&3¯&Eã&-)'OW'c§'S([_($»(Zà(�;)É)Iç)J1*¤|*ƒ!+ƒ¥+b),\Œ,\é,UF-wœ-(.=.].\{.bØ.-;/Ni/n¸/'0E0CW0›0¸0Ó0Uð0¶F1wý1"u2?˜2Ø2;Û232/3b3!w3™3µ3fÉ304&M44t49©45ã4Q5Nk5aº5l6z‰6N7RS7g¦7t8 ƒ8q¤8
+9!9(.9 W9
+x9ƒ9#�9$´9$Ù9!þ9" :2C:2v:"©:0Ì:1ý:/;?B;2‚;µ;QÊ;#<A@<\‚<fß<CF=.Š=¹= Ê=ë=,ï=.>K>k>B‡>(Ê>?ó>A3?(u?ž?¼?Ú?ø?@4@/R@A‚@=Ä@sAjvANáAT0Bx…B¯þB�®CdLDi±DuEi‘E|ûELxFoÅFa5G]—GLõGEBHPˆH:ÙHSI1hI4šI6ÏI2J#9J:]J,˜JYÅJPKZpKsËK4?LdtL&ÙLMoM�‡M(N>NFN&NN"uN!˜N]ºN^O…wO@ýOŠ>PzÉPdDQ*©QkÔQo@Rh°RUSYoS€ÉSMJT)˜TÂTÝT?êT€*U%«U3ÑUV8 VMYVB§VoêV_ZW=ºW9øW62XiX€X&ŸX+ÆX&òX@YBZY*�YjÈY3ZQZ#pZ”Z;°Z4ìZ/![Q[p[Ž[’•[(\
+8\C\Y\q\,Ž\»\Û\3ï\#]1C]u]‹]§]2Ä]U÷]M^e^y^'“^,»^Mè^6_O_'n_–_�_;¤_)à_I
+`6T`6‹`(Â`-ë`Œa‹¦a„2b3·b^ëb@Jcy‹cdk…d@ñdd2eu—eu
fVƒfnÚfIg3`g¾”gVSh"ªhJÍhi7i>iEibiT‚i ×i?øi18j1jj+œj(ÈjJñj=<kQzkWÌkQ$lWvl3Îl:mQ=mW�m?çmR'nYzn_ÔnQ4oW†oDÞo4#pXpEwpV½p1q'Fq:nq:©qNäq&3rCZr9žr+Ør4s9s9Vs/�sFÀsNtFVt'�t/Åt1õt/'u-Wu`…uæu�õu`wv³ØvŒwD§wœìw¯‰x99y/sy-£y5ÑyEzMz]VzC´z$øz{0{zG{kÂ{".|}Q|cÏ|~3}K²}9þ}8~#@'d'Œ+´nàIO€T™€Nî€?=�I}�QÇ�‚2‚K‚g‚6t‚j«‚ZƒTqƒÆƒ.àƒ&„%6„V\„z³„,.…![…�}…%†RA†V”†Vë†NB‡±‘‡¤CˆXèˆFA‰=ˆ‰>Æ‰*ŠH0ŠMyŠ>ÇŠ8‹?‹R‹e‹Fx‹@¿‹yŒszŒqîŒB`�t£�]ŽMvŽ^ÄŽ(#�9L�8†�(¿�9è�5"�)X�)‚�)¬�)Ö�;‘7<‘)t‘(ž‘3Ç‘Lû‘PH’1™’OË’�“b©“k”_x”OØ”:(•2c•+–•Â•3Þ•[–Yn–YÈ–P"—s—Š—¡—¹—)Ñ—û—
+˜!˜!A˜c˜r˜‡˜–˜RŸ˜5ò˜S(™,|™©™4Á™Jö™RAšQ”šlæšYS›B­›2ð›#œ3<œ.pœvŸœT�&k�d’�Ò÷�bÊžs-Ÿa¡ŸN zR gÍ ~5¡Ù´¡ÙŽ¢rh£|Û£«X¤o¥]t¥qÒ¥mD¦g²¦�§j¨§�¨€¡¨�"©�²©‹CªˆÏª]X«T¶«X¬Yd¬{¾¬`:­S›­wï­Wg®f¿®Y&¯7€¯O¸¯C°œL°gé°¬Q±vþ±ju²rà²|S³cÐ³o4´O¤´zô´“oµ„¶†ˆ¶<·lL·ƒ¹·½=¸Qû¸«M¹œù¹R–ºEéºh/»c˜»Qü»N¼)]¼‡¼aœ¼Qþ¼XP½S©½‚ý½I€¾/Ê¾7ú¾82¿(k¿$”¿¯¹¿ŒiÀGöÀZ>Áz™ÁÂÂ4Â{SÂÏÂãÂöÂ3	Ãƒ=Ã”ÁÃ_VÄq¶Ä@(ÅBiÅ®¬Å8[ÆO”ÆŽäÆ@sÇO´Ç[Èv`È×È ÷È;ÉTÉƒrÉKöÉ%BÊ=hÊ4¦Ê_ÛÊY;Ì'•ÍN½Í6Î?CÎHƒÎhÌÎ—5Ï_ÍÏJ-ÐKxÐ=ÄÐÑ#"Ñ&FÑmÑž‰Ñ(ÒZ=ÒB˜ÒUÛÒ1ÓKFÓ’Ów¨Ó~ ÔZŸÔlúÔfgÕoÎÕn>Ör­Ö( ×7I×�×ž×7µ×í×�ü×ŒØi‘ØPûØLÙ9bÙœÙ.´ÙiãÙaMÚ¬¯ÚB\Û
+ŸÛRªÛWýÛOUÜ:¥ÜYàÜ:Ý:TÝr�ÝÞ	ß2!ßOTß±¤ßVà)jà*”à+¿à+ëà,á+Dápá �á±áÀá.ÕáâNâvjâ¸áâšãˆ¡ã4*ä3_äJ“ä8Þä-åjEå=°å<îåc+æZ�æ)êæ.çCç/`ç;�ç=Ìç<
+è&Gè.nè�è±èÅèØèëè7é©?é4ééPê˜oê„ë�ë7¬ëcäëHHìB‘ì&Ôìbûì7^íP–íçí
ôí[î�^îqàîsRïpÆï.7ð7fðžð®ðs½ðV1ñfˆñ‚ïñ/rò>¢ò"áò-óa2óH”ó†ÝóbdôUÇôEõ`cõ9ÄõþõSö,höc•ö5ùö3/÷2c÷–÷1©÷/Û÷cøBoø5²øèøXù5aùM—ù0åù5ú7Lú:„ú4¿úôú/û7;û5sû6©û)àû)
+üg4ü4œüVÑü=(ý)fý$�ý!µý"×ý#úý#þ%Bþ%hþ›Žþ‘*ÿ�¼ÿ“JyÞ8X\‘gîVV‡­r5y¨g"XŠwão[oËr;©®zX›ÓÂoø2	+
+›/¶ËÂ‚
+E
UPl¦^�rpôSeS¹Z
`hbÉ\,R‰7ÜJU_ˆµ†>¢ÅnhÆ×Äžbc`Æ²'ÅÚ} bw�¼ù€¶C7O{�ËéY±CRõmHm¶³$ šØ ^s!SÒ!]&"W„"}Ü"uZ#kÐ#a<$Pž$iï$’Y%dì%–Q&Dè&^-'Œ'U‘'ç'ý'($(/5(e(0v(§(¾(7Ô(7)D)9a)›)²)·)¼)Á)Æ)Í)è)ï)nõ)]›j7ìŸ±ß4¾ˆKi¿z¹Ò°ZÜÐ†©œË‹e£æÌµ Þ½W³1üÑÃO”�+·-Øˆæ>6ØK¹Å5.ŽÚÞüÙ-ÿ¨¡8éÊà”)é9hfBC”5ðpHÄ•ír~�}u‚N}lACˆÔHQ~à
+CÔõùÀáÖE�Pñ¤»Ãÿ±ë]ÈÚçi[3ªÆ3-Ph–ž‡Ïw“FR³âãk_é‰%$¡*—²5¨Q0q`µôŽQy”+“ùvå4GåìÄªÙõÓÞŽ+ÐæÁñÆàeøç{Dík-­PZ»)r
+Q:»‘Œ´@½ªJ(ˆSðTfŠÓ¡‘—ÏúM¼°ý#,#æÁ.z,¤_ÑbŠ¼úñ>—˜îµñ%„ÿŸÀ¶Y÷÷¤@¯wRO”À‹ÈTxëL0–‘Û�»ÁäŸ{lK ÐÍz#ÅxMH}õøÖd6ƒ0a‰L.‚*òøÝÚ¯ÐÂ¯ÂcÃ mg�°\è^wÂØaf…Fek_|YÊd±+x¹—v7¾˜%A<‚ÄÒ
+÷£�"àª5…È§�•„�×
+[nq@ÊýÔ…–IÙá]WÞ¬¥3�*™äï|˜Y­¹6ÇÑPÆW_ì"¸œòâ‘‰çµ$É}Á4Ì/Ì+,¯ÆMÑs‚àœŸÙt)Š¦C´žêþï×éV¿@‡É(Ø?¢B¥E©�íË2c	Óè}ŸC(ç?Ã†	îók�b§ãL	—kÚXö�	uK:±£ähmùß;’˜Î®ô™Rêp XËUqÊô÷Ÿg*=d•¬‡Gx�ScÁ�I«]&d¸à`1ÛðUò:ãäÜØÚ"=]h²°jÕ°.�Ö�HI=¬‡ì?…CÍê¦NîºNéWá7¸+I
+ë™>“Í/sŽšûi>Œ’“i4½!¤|!ÉšêäŒ¿>À²'pÕÛìn‡A6žK8ºy½¥~W'‹·ëheb’!÷«4Æ(s·L‹®Î·ø§¶¯`orfãa
ëöÎZFŠAGÚO©Ù='ËBLèE[ºÄB&$ÒRn¬/öa�¨ÿºkÝ~|-ý"ºÔ!Ãþú,9y%€É’Ú?õõüVêF›óKô&†TtE'¢m8Jœs‡ÝClO™²ˆU„›êŠ¢"âdS#�†ÓïèDÑÜw«VƒùÕMZ¶b&jžiÏÛ«’ÍB¿Å´Ý¢@V[(÷çúpôº]ÙÀ€¶Ä)mX@MŠmzÍtïÅcçÙ9‹ìl2$6ª�[ nžîµåH ÂP	�‘Ga€üâ%#»‚U•8Ýyó•t×éòšjj�³Š¼1Æ�=rªu<±Ô:ÍþGo�×nX~ržU:;vŸ±ð¸Q×A&$= ‡_ôÿÓ·tÑÇãÜVþ{g³4Äg,¸ŽG×¥�ö4���‰û¶‘è¸õ5£¾\â5Ž£åãÔƒ¯ñÃÂÈ%Ø½n";–î°ÈÿžSO}ÂÈìM(móÞ1á…û\«¢Õv¨·›´pÂ´Ï³\S_/«Zá{ý†ãÇOzæËf¼T•/—­ùg(ÒÊ¹8¦2H±þ…Üò1D%š\˜0½ß¤zÆEZ3ÐL¢R§EéW
+5;ÎyG:Ûe‰n‰^J<wÐö!N‹
•ÇÅö²üÏs'ÌƒXob×¬¬O1PI†o+íDþ¶ÕÜ<�iÕâN¼9î‘ÊLŽ­;ô)F¡r{]›ögßÖ#y8
<Y.*¨ÜcV°ý™™X„p¤qQ÷ ùNJˆ.¥Àètš^ÇFßhÝÝÊÎ a»
¦KþÖ{ð�£	¾œ2g`¡À­†¿á0¼�ctÈ€x“‚­ÿøz¨©Óål?fTƒ[®cuƒ)€¿SRÕDï¥l7 ³?ßYš3¤·–aqÅ*”§^ý_—ñ2$`}à;ÉËëçùëI/ób)oÓúƒ¡8ŒÛ&å!˜­U6¼ h\ºE¦o²òpÖNí>d�û¬�ýû`0ÅDX øw³v´®^v˜‹Á«¡`®ä&¦úÒÐ' M-¶!|óŒuRÞîï’äÞšT*J77sÎÉò99új¾	¦>y@Ì„„¢Ôœø#;Ã¥™dsAr=	Œ9q\¯B€/æÉü¸Òµ £Pœ…6Q�
Ò¾®F|?|{1ZHØvåSífuóêÇ[‰D~›Tˆ-:3Ñû€áæ,¹ÎÄ®m©oAü²„
©ujÏ©~¹ÖßËûâBw3xÛkð´õ<eÍï“<Y,YŒ§”Ìq§70’è
2ílÁ›»¿^Iñ¨ªµ�–W‚^UÇ“ðJ.ÌbÏVJ"½$
+2x–ie'¾�d*k*r*Ä�à�ô�žž0žDžXžlž€ž”ž¨ž¼žÐžäžøžŸ Ÿ4ŸHŸdŸxŸŒŸ Ÿ´ŸÈŸÜŸðŸ  4 H \ x œ ¸ Ì à ô ¡$¡8¡L¡`¡|¡�¡¤¡¸¡Ì¡à¡ô¡¢¢0¢L¢h¢|¢�¢´¢È¢Ü¢ð¢££,£H£d£€£”£¨£¼£Ð£ä£ø£¤ ¤4¤H¤\¤p¤„¤˜¤¬¤À¤Ô¤è¤ü¤¥4¥H¥\¥x¥Œ¥ ¥´¥È¥Ü¥ð¥¦¦,¦H¦d¦x¦”¦°¦Ì¦à¦ô¦§$§@§\§p§„§ §´§È§Ü§ð§¨¨,¨@¨\¨p¨„¨ ¨´¨Ð¨ä¨ø¨© ©4©H©\©p©„©˜©Ä©à©ü©ª,ª@ªTªhª|ª�ª¤ª¸ªÌªàªôª««0«D«X«l«€«œ«°«Ä«Ø«ì«¬¬(¬<¬P¬l¬€¬”¬°¬Ô¬ð¬­­,­@­\­p­„­˜­´­È­Ü­ð­®®,®@®T®h®„® ®´®È®ì®¯¯(¯<¯P¯d¯€¯œ¯¸¯Ì¯à¯ô¯°°0°D°X°l°€°”°¨°¼°Ð°ä°ø°± ±4±P±l±€±”±°±Ä±Ø±ì±²²(²<²P²d²€²œ²°²Ì²è²³³,³H³\³x³”³¨³¼³Ø³ì³´´(´<´P´d´x´”´¨´¼´Ø´ì´µµ0µDµXµlµ€µ”µ¨µ¼µÐµüµ¶y*ÿÿÿÿ›*"ÿÿÿÿÑ* ÿÿÿÿ+ ÿÿÿÿE+ÿÿÿÿ{+ ÿÿÿÿ¢+5ÿÿÿÿÞ+%ÿÿÿÿ
+,)ÿÿÿÿ:,(ÿÿÿÿi,/ÿÿÿÿŸ,ÿÿÿÿ»,'ÿÿÿÿé,ÿÿÿÿ!--ÿÿÿÿO-ÿÿÿÿl-7ÿÿÿÿ¥-ÿÿÿÿÐ- ÿÿÿÿø-%ÿÿÿÿ5.ÿÿÿÿi.*ÿÿÿÿ”..ÿÿÿÿÄ.)1ÿÿÿÿ/%ÿÿÿÿD/9ÿÿÿÿ~/
+2ÿÿÿÿº/"ÿÿÿÿî/3ÿÿÿÿ"0ÿÿÿÿI09ÿÿÿÿ™0%ÿÿÿÿÌ0
+Hÿÿÿÿ 1
+/ÿÿÿÿw1)ÿÿÿÿ¸1
+6ÿÿÿÿø1
+>ÿÿÿÿ@2
+0ÿÿÿÿz2
+FÿÿÿÿÊ2
+ÿÿÿÿ3
++ÿÿÿÿA3
+ÿÿÿÿi3
+"ÿÿÿÿ•3@)ÿÿÿÿ4
+/ÿÿÿÿ=4
+ ÿÿÿÿg4-ÿÿÿÿ®46ÿÿÿÿú46ÿÿÿÿE5
+7ÿÿÿÿ†5
+?ÿÿÿÿÏ5
+ÿÿÿÿô54ÿÿÿÿA6+ÿÿÿÿy6-ÿÿÿÿ³63ÿÿÿÿç60ÿÿÿÿ.7 0ÿÿÿÿ®7
+-ÿÿÿÿå7(ÿÿÿÿ!8
+-ÿÿÿÿX8ÿÿÿÿŠ86ÿÿÿÿÇ8>ÿÿÿÿ9#ÿÿÿÿ79ÿÿÿÿs9ÿÿÿÿ¯9
+2ÿÿÿÿë9
+.ÿÿÿÿ#:Fÿÿÿÿj:
+2ÿÿÿÿ¦:
+2ÿÿÿÿâ:
+2ÿÿÿÿ;
+2ÿÿÿÿZ;
+2ÿÿÿÿ–;
+2ÿÿÿÿÒ;Fÿÿÿÿ<
+9ÿÿÿÿ\<
+7ÿÿÿÿ�<
+9ÿÿÿÿà<Fÿÿÿÿ'=Fÿÿÿÿn=	2ÿÿÿÿ©=+ÿÿÿÿÛ=.ÿÿÿÿ>+ÿÿÿÿB>-ÿÿÿÿw>0ÿÿÿÿÅ>"ÿÿÿÿ?!ÿÿÿÿ7?
+*ÿÿÿÿm?
+Aÿÿÿÿ¸?
+dÿÿÿÿ&@
+$ÿÿÿÿT@1ÿÿÿÿ�@1ÿÿÿÿÂ@
+ÿÿÿÿß@5ÿÿÿÿ-A&ÿÿÿÿaA=ÿÿÿÿ±A&ÿÿÿÿB+ÿÿÿÿDBÿÿÿÿxB]ÿÿÿÿåB!5ÿÿÿÿ<C
+ÿÿÿÿwCKÿÿÿÿÃC<"ÿÿÿÿ!D
+ÿÿÿÿKD$ÿÿÿÿ„DÿÿÿÿÌD;ÿÿÿÿ4E?ÿÿÿÿ’Eÿÿÿÿ»E2ÿÿÿÿõEÿÿÿÿ&FÿÿÿÿXF=ÿÿÿÿ§FIÿÿÿÿ
+G(ÿÿÿÿHGIÿÿÿÿ«G!ÿÿÿÿáG!ÿÿÿÿHÿÿÿÿBH+ÿÿÿÿoH=ÿÿÿÿ­H+ ÿÿÿÿúH5ÿÿÿÿ0I@ÿÿÿÿuI
+%ÿÿÿÿ¤I
+%ÿÿÿÿÓI7ÿÿÿÿJ-ÿÿÿÿ9JÿÿÿÿVJ<ÿÿÿÿ¡J-ÿÿÿÿÞJ(�ÿÿÿÿ“K
+.ÿÿÿÿËK
ÿÿÿÿÚK
+"	ÿÿÿÿ-LB#$ÿÿÿÿ¶L#&ÿÿÿÿM8ÿÿÿÿAMBOÿÿÿÿÒM)8ÿÿÿÿ3N86ÿÿÿÿ¡N'6ÿÿÿÿþN<ÿÿÿÿAO\ÿÿÿÿ¤OOÿÿÿÿúO\ÿÿÿÿ]PQÿÿÿÿµPhÿÿÿÿ$Q&ÿÿÿÿQQiÿÿÿÿÁQ(7ÿÿÿÿ RQÿÿÿÿrR6ÿÿÿÿ©R`ÿÿÿÿS:ÿÿÿÿ`S2
ÿÿÿÿŸS+:ÿÿÿÿT6?ÿÿÿÿ{TZÿÿÿÿÙTWÿÿÿÿ2URDÿÿÿÿÈUTÿÿÿÿVzÿÿÿÿ˜V
+YÿÿÿÿûV>ÿÿÿÿXWcÿÿÿÿ¼WÿÿÿÿûW/ÿÿÿÿ©XEÿÿÿÿ
+Y
+•ÿÿÿÿ«Y
+0hÿÿÿÿOZdÿÿÿÿÒZ
+gÿÿÿÿC[
+tÿÿÿÿÁ[
+bÿÿÿÿ-\
+…ÿÿÿÿ¼\
+9/ÿÿÿÿ.]
+Mÿÿÿÿ…]
+Qÿÿÿÿà]
+Vÿÿÿÿ@^|Uÿÿÿÿ_
+Pÿÿÿÿq_
+Aÿÿÿÿ¼_(\ÿÿÿÿ@`j0ÿÿÿÿÚ`j(ÿÿÿÿla
+rÿÿÿÿèa
+kÿÿÿÿ]b
+=ÿÿÿÿ¤bmÿÿÿÿ,c_
ÿÿÿÿšc[
ÿÿÿÿdgÿÿÿÿld^3ÿÿÿÿýd71(HÿÿÿÿÕe
+[ÿÿÿÿ:fL'ÿÿÿÿ­f
+\ÿÿÿÿg.5ÿÿÿÿvghÿÿÿÿåg|ÿÿÿÿhhRÿÿÿÿÂhE%ÿÿÿÿ3iE%ÿÿÿÿ¤i
+kÿÿÿÿj
+Wÿÿÿÿzjgÿÿÿÿâj
+WÿÿÿÿCk
+Wÿÿÿÿ¤k
+Wÿÿÿÿl
+Yÿÿÿÿhl
+YÿÿÿÿËl
+Yÿÿÿÿ.mgÿÿÿÿ–m
+^ÿÿÿÿþm
+\ÿÿÿÿdn
+^ÿÿÿÿÌngÿÿÿÿ4ogÿÿÿÿœo	Yÿÿÿÿþo\ÿÿÿÿapfÿÿÿÿÎp]ÿÿÿÿ2qbÿÿÿÿŸq6]ÿÿÿÿ9r6Iÿÿÿÿ¸r<ÿÿÿÿs
+Tÿÿÿÿqs
+ÿÿÿÿús
+³ÿÿÿÿ·t
+Nÿÿÿÿugÿÿÿÿ�ukÿÿÿÿíu
+)ÿÿÿÿ v7`ÿÿÿÿ·vPÿÿÿÿwqÿÿÿÿ¢wH5ÿÿÿÿ/x\ÿÿÿÿ´x#@ÿÿÿÿy³ÿÿÿÿãy;Yÿÿÿÿ{z
+6%ÿÿÿÿàz†ÿÿÿÿg{i4ÿÿÿÿ|
+'ÿÿÿÿL|8ÿÿÿÿ¡|@ ÿÿÿÿ}4iÿÿÿÿÑ}=kÿÿÿÿy~GÿÿÿÿË~Tÿÿÿÿ5+1ÿÿÿÿ‘.5ÿÿÿÿô‡ÿÿÿÿ–€)hÿÿÿÿ'�2ÿÿÿÿx�/hÿÿÿÿ‚!^ÿÿÿÿŽ‚^ÿÿÿÿƒ3ÿÿÿÿTƒHÿÿÿÿžƒuÿÿÿÿ„a1ÿÿÿÿ®„Xÿÿÿÿ…mÿÿÿÿy…
+IÿÿÿÿÌ…
+Iÿÿÿÿ†bÿÿÿÿ‚†NÿÿÿÿÑ†! ÿÿÿÿ‡n)ÿÿÿÿ©‡8Zÿÿÿÿ;ˆCüÿÿÿÿz‰
+KÿÿÿÿÏ‰ ÿÿÿÿñ‰
+@/ÿÿÿÿ…ŠnC=ÿÿÿÿs‹ECÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
+	Invalid Export Address Table rva (0x%lx) or entry count (0x%lx)
+	Invalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)
+	Invalid Ordinal Table rva (0x%lx) or entry count (0x%lx)
+	Name Pointer Table 			Ordinal Table 				[%4ld] <corrupt offset: %lx>
+	[Name Pointer/Ordinal] Table	%08lx
+	non-TLS: %pA	reloc %4d offset %4x [%4lx] %s	vma:  Hint/Ord Member-Name Bound-To
+
 
-	DLL Name: %s
+	DLL Name: %.*s
 
 
 PE File Base Relocations (interpreted .reloc section contents)
@@ -76,16 +168,16 @@ PE File Base Relocations (interpreted .r
 
 Characteristics 0x%x
 
+Dump of %s
+
 Dynamic Section:
 
+Error: section %s contains the debug data starting address but it is too small
+
 Exec Auxiliary Header
 
 Export Address Table -- Ordinal Base %ld
 
-Function descriptor located at the start address: %04lx
-
-No reldata section! Function descriptor not decoded.
-
 Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Program Header:
@@ -95,20 +187,33 @@ Stack size for functions.  Annotations:
 The Export Tables (interpreted %s section contents)
 
 
+The Function Table (interpreted %s section contents)
+
 The Function Table (interpreted .pdata section contents)
 
 The Import Tables (interpreted %s section contents)
 
+There is a debug directory in %s at 0x%lx
+
+
+There is a debug directory in %s, but that section has no contents
+
+There is a debug directory, but the section containing it could not be found
+
 There is a first thunk, but the section containing it could not be found
 
 There is an export table in %s at 0x%lx
 
-There is an export table in %s, but it does not fit into that section
+There is an export table in %s, but contents cannot be read
+
+There is an export table in %s, but it is too small (%d)
 
 There is an export table, but the section containing it could not be found
 
 There is an import table in %s at 0x%lx
 
+There is an import table in %s, but that section has no contents
+
 There is an import table, but the section containing it could not be found
 
 Version References:
@@ -124,9 +229,11 @@ WARNING: Extra data in .rsrc section - i
 ppcboot header:
         pc: 0x%08x
     *unhandled* cmd %u
+    address: 0x%08x
     address: 0x%08x, size: %u
     flags: %u, address: 0x%08x, pd-address: 0x%08x
     global name: %.*s
+    len: %u bits
     linkage index: %u, replacement insn: 0x%08x
     name: %.*s
     pc: 0x%08x
@@ -136,8 +243,16 @@ ppcboot header:
     psect idx 3: %u, offset 3: 0x%08x %08x
     psect: %u, offset: 0x%08x %08x
     routine name: %.*s
-   %02u    %s%s %s
-   (type: %3u, size: 4+%3u):    *unhandled* cmd %u
+   %02u    (type: %3u, size: %3u):    *unhandled* cmd %u
+   Erroneous length
+   Error: The compile date is truncated
+   Error: The length is less than the length of an EEOM record
+   Error: The length is less than the length of an EMH record
+   Error: The module name is missing
+   Error: The module name is too long
+   Error: The module version is missing
+   Error: The module version is too long
+   Error: The record length is less than the size of an EMH_MHD record
    alignment  : 2**%u
    alloc (len)   : %u (0x%08x)
    alloc (len): %u (0x%08x)
@@ -149,6 +264,8 @@ ppcboot header:
    compiler   : %.*s
    completion code: %u
    copyright: %.*s
+   cpusubtype: %#lx%s
+   cputype:    %#lx (%s)
    declfile: len: %u, flags: %u, fileid: %u
    deflines %u
    entity name   : %.*s
@@ -156,7 +273,9 @@ ppcboot header:
    error severity: %x
    file: %.*s
    filename   : %.*s
-   flags         : 0x%08x   flags      : 0x%04x   flags: %d, language: %u, major: %u, minor: %u
+   filetype:   %#lx
+   flags         : 0x%08x   flags      : 0x%04x   flags:      %#lx
+   flags: %d, language: %u, major: %u, minor: %u
    flags: 0x%04x   formfeed
    id match      : %x
    image offset  : 0x%08x
@@ -165,6 +284,7 @@ ppcboot header:
    linkage index: %u, procedure name: %.*s
    linkage index: %u, procedure: %.*s
    linkage index: %u, psect: %u, offset: 0x%08x %08x
+   magic:      %#lx
    max record size: %u
    module name    : %.*s
    module name: %.*s
@@ -172,6 +292,7 @@ ppcboot header:
    name          : %.*s
    name        : %.*s
    name       : %.*s
+   ncmds:      %#lx
    number of cond linkage pairs: %u
    object name   : %.*s
    offset: 0x%08x, val: 0x%08x
@@ -186,6 +307,7 @@ ppcboot header:
    setlnum %u
    setrec %u
    signature: %.*s
+   sizeocmds:  %#lx
    structure level: %u
    symbol vector offset: 0x%08x
    symvec offset : 0x%08x
@@ -195,8 +317,8 @@ ppcboot header:
    transfer address   : 0x%08x
    vector      : 0x%08x
    version mask: 0x%08x
-  %s (len=%u+%u):
-  %s: 0x%v
+   version:    %x
+  %s (len=%u):
   %u: size: %u, flags: 0x%02x, name: %.*s
   EEOM (len=%u):
   EGSD (len=%u):
@@ -218,19 +340,22 @@ ppcboot header:
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   size : %u
- %08x 0x%08x 64B <EABI version unrecognised> BPAGE: %u COM COMM Change Protection (%u entries):
+  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> <Unrecognised flag bits set> BPAGE: %u COM COMM Change Protection (%u entries):
  Code Address Reference Fixups:
- DEF EXE First address : 0x%08x 0x%08x
+ DEF EXE FPU support required:  First address : 0x%08x 0x%08x
  Fourth address: 0x%08x 0x%08x
- GBL Glue code sequence LIB Linkage Pairs Reference Fixups:
- NOMOD NORM OVR PIC QVAL RD REL Register restore millicode Register save millicode SHR Second address: 0x%08x 0x%08x
+ GBL LIB Linkage Pairs Reference Fixups:
+ MACH-O header:
+ NOMOD NORM OVR PIC QVAL RD REL Resources start at offset: %#03x
+ SHR Second address: 0x%08x 0x%08x
  Shareable images:
  Shared image  : 0x%08x 0x%08x
+ String table starts at offset: %#03x
  Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d
  Third address : 0x%08x 0x%08x
- UNI VEC VECEP WEAK WRT [BE8] [FPA float format] [G10] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [absolute position] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [floats passed in integer registers] [g-float] [hard-float ABI] [has entry point] [interworking enabled] [interworking flag not initialised] [interworking not supported] [interworking supported] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] corrupted GST
- debug module table : vbn: %u, size: %u
+ UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [FDPIC ABI supplement] [FPA float format] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [g-float] [hard-float ABI] [interworking enabled] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] alignment of 8-byte entities:  debug module table : vbn: %u, size: %u
  debug symbol table : vbn: %u, size: %u (0x%x)
+ failed to convert GOTPCREL relocation against '%s'; relink with --no-relax
  fixup info rva:  flags: 0x%04x global symbol table: vbn: %u, records: %u
  ident: 0x%08x, name: %.*s
  ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u
@@ -248,7 +373,7 @@ ppcboot header:
  quad-word .address reference fixups:
  quad-word relocation fixups:
  section: base: 0x%08x%08x size: 0x%08x
- type: %3u, len: %3u (at 0x%08x):  unhandled EOBJ record type %u
+ size of doubles:  type: %3u, len: %3u (at 0x%08x):  unhandled EOBJ record type %u
  vbn: %u, pfc: %u, matchctl: %u type: %u ( vma:			Begin Address    End Address      Unwind Info
  vma:		Begin    End      EH       EH       PrologEnd  Exception
      		Address  Address  Handler  Data     Address    Mask
@@ -256,45 +381,58 @@ ppcboot header:
      		Address  Length   Length   32b exc  Handler   Data
  vma:            Hint    Time      Forward  DLL       First
                  Table   Stamp     Chain    Name      Thunk
-#<Invalid error code>%*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
-%*.s Entry: %A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections%A has both ordered and unordered sections%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)
-%A:0x%v not found in function table
-%B (%s): Section flag %s (0x%x) ignored%B and %B are for different configurations%B and %B are for different cores%B contains CRIS v32 code, incompatible with previous objects%B contains non-CRIS-v32 code, incompatible with previous objects%B has has both the current and legacy Tag_MPextension_use attributes%B is not allowed to define %s%B section %A exceeds stub group size%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%B uses unknown e_flags 0x%lx%B(%A): error: call to undefined function '%s'%B(%A): internal error: dangerous relocation%B(%A): internal error: out of range error%B(%A): internal error: unknown error%B(%A): internal error: unsupported relocation error%B(%A): invalid property table%B(%A): unsafe PID relocation %s at 0x%08lx (against %s in %s)%B(%A): warning: relax is suppressed for sections of alignment %d-bytes > 4-byte.%B(%A): warning: unaligned access to symbol '%s' in the small data area%B(%A): warning: unaligned small data access of type %d.%B(%A+0x%%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link%B(%A+0x%lx): %s relocation against SEC_MERGE section%B(%A+0x%lx): %s relocation against external symbol "%s"%B(%A+0x%lx): %s used with TLS symbol %s%B(%A+0x%lx): %s used with non-TLS symbol %s%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object%B(%A+0x%lx): R_METAG_TLS_LE/IENONPIC relocation not permitted in shared object%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not permitted in shared object%B(%A+0x%lx): Stabs entry has invalid string index.%B(%A+0x%lx): cannot emit fixup to `%s' in read-only section%B(%A+0x%lx): cannot handle %s for %s%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%B(%A+0x%lx): could not decode instruction; possible configuration mismatch%B(%A+0x%lx): invalid instruction for TLS relocation %s%B(%A+0x%lx): reloc against `%s': error %d%B(%A+0x%lx): relocation offset out of range (size=0x%x)%B(%A+0x%lx): unexpected fix for %s relocation%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'%B(%A+0x%lx): unresolvable relocation against symbol `%s'%B(%A+0x%lx):unexpected ARM instruction '0x%x' in TLS trampoline%B(%A+0x%lx):unexpected ARM instruction '0x%x' referenced by TLS_GOTDESC%B(%A+0x%lx):unexpected Thumb instruction '0x%x' in TLS trampoline%B(%A+0x%lx):unexpected Thumb instruction '0x%x' referenced by TLS_GOTDESC%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete
-%B(%s): warning: interworking not enabled.
-  first occurrence: %B: ARM call to Thumb%B(%s): warning: interworking not enabled.
-  first occurrence: %B: Thumb call to ARM%B(%s): warning: interworking not enabled.
-  first occurrence: %B: arm call to thumb%B(%s): warning: interworking not enabled.
-  first occurrence: %B: thumb call to arm
-  consider relinking with --support-old-code enabled%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'%B, section %A:
-  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%B, section %A:
-  relocation %s should not be used in a shared object; recompile with -fPIC%B, section %A:
-  v10/v32 compatible object %s must not contain a PIC relocation%B, section %A: No PLT for relocation %s against symbol `%s'%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'%B, section %A: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%B, section %A: relocation %s is not allowed for global symbol: `%s'%B, section %A: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%B, section %A: relocation %s with no GOT created%B, section %A: relocation %s with non-zero addend %d against local symbol%B, section %A: relocation %s with non-zero addend %d against symbol `%s'%B, section %A: unresolvable relocation %s against symbol `%s'%B, section `%A', to symbol `%s':
-  relocation %s should not be used in a shared object; recompile with -fPIC%B: !samegp reloc against symbol without .prologue: %s%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled.%B: %s
-%B: %s not absolute%B: %s' accessed both as normal and thread local symbol%B: %s: invalid needed version %d%B: %s: invalid version %u (max %d)%B: '%s' accessed both as normal and thread local symbol%B: .got subsegment exceeds 64K (size %d)%B: .opd is not a regular array of opd entries%B: .preinit_array section is not allowed in DSO%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32%B: 0x%lx: fatal: reloc overflow while relaxing%B: 0x%lx: fatal: unaligned %s relocation 0x%lx%B: 0x%lx: fatal: unaligned branch target for relax-support relocation%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x%B: 0x%lx: warning: bad R_SH_USES load offset%B: 0x%lx: warning: bad R_SH_USES offset%B: 0x%lx: warning: bad count%B: 0x%lx: warning: could not find expected COUNT reloc%B: 0x%lx: warning: could not find expected reloc%B: 0x%lx: warning: symbol in unexpected section%B: @gprel relocation against dynamic symbol %s%B: @internal branch to dynamic symbol %s%B: @pcrel relocation against dynamic symbol %s%B: ABI is incompatible with that of the selected emulation%B: ABI mismatch: linking %s module with previous %s modules%B: ABI version %ld is not compatible with ABI version %ld output%B: ASE mismatch: linking %s module with previous %s modules%B: Alignment mismatch with previous modules%B: Architecture mismatch with previous modules%B: BE8 images only valid in big-endian mode.%B: Bad relocation record imported: %d%B: CALL15 reloc at 0x%lx not against global symbol%B: CALL16 reloc at 0x%lx not against global symbol%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000).%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch.%B: Cannot handle compressed Alpha binaries.
-   Use compiler flags, or objZ, to generate uncompressed binaries.%B: Cannot link together %s and %s objects.%B: Corrupt size field in group section header: 0x%lx%B: Failed to add renamed symbol %s%B: Function descriptor relocation with non-zero addend%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d%B: GOT overflow: Number of relocations with 8-bit offset > %d%B: GOT reloc at 0x%lx not expected in executables%B: IMPORT AS directive for %s conceals previous IMPORT AS%B: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%B: Instruction set mismatch with previous modules%B: Invalid relocation type imported: %d%B: Malformed reloc detected for section %s%B: Nested OMIT_FP in %A.%B: No symbol version section for versioned symbol `%s'%B: Not enough room for program headers, try linking with -N%B: Only registers %%g[2367] can be declared using STT_REGISTER%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive%B: Relocation %s (%d) is not currently supported.
-%B: Relocations in generic ELF (EM: %d)%B: SB-relative relocation but __c6xabi_DSBT_BASE not defined%B: TLS local exec code cannot be linked into shared objects%B: TLS sections are not adjacent:%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed%B: The first section in the PT_DYNAMIC segment is not the .dynamic section%B: The target (%s) of an %s relocation is in the wrong section (%A)%B: Too many sections: %d (>= %d)%B: Unable to sort relocs - they are in more than one size%B: Unable to sort relocs - they are of an unknown size%B: Unhandled import type; %x%B: Unknown mandatory EABI object attribute %d%B: Unknown relocation type %d
-%B: Unknown section type in a.out.adobe file: %x
-%B: Unmatched OMIT_FP in %A.%B: Unrecognised .directive command: %s%B: Unrecognised import name type; %x%B: Unrecognised import type; %x%B: Unrecognised machine type (0x%x) in Import Library Format archive%B: Unrecognized storage class %d for %s symbol `%s'%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s%B: Warning: Thumb BLX instruction targets thumb function '%s'.%B: Warning: bad `%s' option size %u smaller than its header%B: Warning: cannot determine the target function for stub section `%s'%B: Warning: thumb mode PLT generation not currently supported%B: XMC_TC0 symbol `%s' is class %d scnlen %d%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC%B: `%s' accessed both as FDPIC and thread local symbol%B: `%s' accessed both as normal and FDPIC symbol%B: `%s' accessed both as normal and thread local symbol%B: `%s' has line numbers but no enclosing section%B: `%s' in loader reloc but not loader sym%B: `ld -r' not supported with PE MIPS objects
-%B: addend -0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range%B: addend 0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d%B: bad pair/reflo after refhi
-%B: bad reloc address 0x%lx in section `%A'%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'%B: bad section length in ihex_read_section%B: bad string table size %lu%B: bad symbol index: %d%B: cannot create stub entry %s%B: change in gp: BRSGP %s%B: class %d symbol `%s' has no aux entries%B: compiled for a 64 bit system and target is 32 bit%B: compiled for a big endian system and target is little endian%B: compiled for a little endian system and target is big endian%B: compiled normally and linked with modules compiled with -mrelocatable%B: compiled with -mrelocatable and linked with modules compiled normally%B: could not find output section %A for input section %A%B: could not find output section %s%B: could not read contents of section `%A'
-%B: csect `%s' not in enclosing section%B: don't know how to handle OS specific section `%s' [0x%8x]%B: don't know how to handle allocated, application specific section `%s' [0x%8x]%B: don't know how to handle processor specific section `%s' [0x%8x]%B: don't know how to handle section `%s' [0x%8x]%B: dtp-relative relocation against dynamic symbol %s%B: duplicate export stub %s%B: duplicate section `%A' has different contents
-%B: duplicate section `%A' has different size
-%B: endianness incompatible with that of the selected emulation%B: error: ABI mismatch with previous modules.%B: error: Cannot set _ITB_BASE_%B: error: Cortex-A8 erratum stub is allocated in unsafe location%B: error: Cortex-A8 erratum stub out of range (input file too large)%B: error: Instruction set mismatch with previous modules.%B: error: VFP11 veneer out of range%B: error: unaligned relocation type %d at %08x reloc %p
-%B: error: unknown mandatory EABI object attribute %d%B: error: unknown relocation type %d.%B: file class %s incompatible with %s%B: gp-relative relocation against dynamic symbol %s%B: hidden symbol `%s' in %B is referenced by DSO%B: hidden symbol `%s' isn't defined%B: ignoring duplicate section `%A'
-%B: illegal relocation type %d at address 0x%lx%B: illegal symbol index in reloc: %d%B: incompatible machine type. Output is 0x%x. Input is 0x%x%B: indirect symbol `%s' to `%s' is a loop%B: internal error in ihex_read_section%B: internal symbol `%s' in %B is referenced by DSO%B: internal symbol `%s' isn't defined%B: invalid SHT_GROUP entry%B: invalid link %lu for reloc section %s (index %u)%B: invalid relocation type %d%B: invalid string offset %u >= %lu for section `%s'%B: jump too far away
-%B: linking %s module with previous %s modules%B: linking 32-bit code with 64-bit code%B: linking 64-bit files with 32-bit files%B: linking UltraSPARC specific with HAL specific code%B: linking auto-pic files with non-auto-pic files%B: linking big-endian files with little-endian files%B: linking constant-gp files with non-constant-gp files%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%B: linking files compiled for HCS12 with others compiled for HC12%B: linking little endian files with big endian files%B: linking non-pic code in a position independent executable%B: linking trap-on-NULL-dereference with non-trapping files%B: loader reloc in read-only section %A%B: loader reloc in unrecognized section `%s'%B: local symbol `%s' in %B is referenced by DSO%B: misplaced XTY_LD `%s'%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'.%B: no group info for section %A%B: non-pic code with imm relocation against dynamic symbol `%s'%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A' when the object file has no symbol table%B: pc-relative relocation against dynamic symbol %s%B: pc-relative relocation against undefined weak symbol %s%B: probably compiled without -fPIC?%B: protected symbol `%s' isn't defined%B: reloc %s:%d not in csect%B: reloc against a non-existant symbol index: %ld%B: relocation %s against %s `%s' can not be used when making a shared object%s%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%B: relocation %s against symbol `%s' isn't supported in x32 mode%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s%B: relocation %s can not be used when making a shared object; recompile with -fPIC%B: relocation %s cannot be used when making a shared object%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend%B: relocation size mismatch in %B section %A%B: relocs in section `%A', but it has no contents%B: section %A lma %#lx adjusted to %#lx%B: section %s: string table overflow at offset %ld%B: section `%A' can't be allocated in segment %d%B: sh_link [%d] in section `%A' is incorrect%B: sh_link of section `%A' points to discarded section `%A' of `%B'%B: sh_link of section `%A' points to removed section `%A' of `%B'%B: size field is zero in Import Library Format header%B: speculation fixup to dynamic symbol %s%B: stack size specified and %s set%B: string not null terminated in ILF object file.%B: symbol `%s' has unrecognized csect type %d%B: symbol `%s' has unrecognized smclas %d%B: symbol `%s' required but not present%B: taking the address of protected function '%s' cannot be done when making a shared library%B: the target (%s) of a %s relocation is in the wrong output section (%s)%B: too many sections (%d)%B: too many sections: %u%B: tp-relative relocation against dynamic symbol %s%B: unable to fill in DataDictionary[12] because .idata$5 is missing%B: unable to fill in DataDictionary[1] because .idata$2 is missing%B: unable to fill in DataDictionary[1] because .idata$4 is missing%B: unable to fill in DataDictionary[9] because __tls_used is missing%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%B: unable to find ARM glue '%s' for `%s'%B: unable to find THUMB glue '%s' for `%s'%B: unable to find VFP11 veneer `%s'%B: unable to get decompressed section %A%B: unable to initialize compress status for section %s%B: unable to initialize decompress status for section %s%B: undefined reference to symbol '%s'%B: undefined sym `%s' in .opd section%B: undefined symbol on R_PPC64_TOCSAVE relocation%B: unexpected ATN type %d in external part%B: unexpected redefinition of indirect versioned symbol `%s'%B: unexpected reloc type %u in .opd section%B: unexpected type after ATN%B: unhandled dynamic relocation against %s%B: unimplemented %s
-%B: unimplemented ATI record %u for symbol %u%B: unknown [%d] section `%s' in group [%s]%B: unknown load command 0x%lx%B: unknown relocation type %d%B: unknown/unsupported relocation type %d%B: unrecognized relocation (0x%x) in section `%A'%B: unsupported relocation type %i%B: unsupported relocation type %i
-%B: unsupported relocation type %s%B: unsupported relocation: ALPHA_R_GPRELHIGH%B: unsupported relocation: ALPHA_R_GPRELLOW%B: uses _-prefixed symbols, but writing file with non-prefixed symbols%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)%B: uses non-prefixed symbols, but writing file with _-prefixed symbols%B: version node not found for symbol %s%B: warning: COMDAT symbol '%s' does not match section name '%s'%B: warning: Empty loadable segment detected, is this intentional ?
-%B: warning: Endian mismatch with previous modules.%B: warning: Incompatible elf-versions %s and  %s.%B: warning: Older version of object file encountered, Please recompile with current tool chain.%B: warning: allocated section `%s' not in segment%B: warning: duplicate line number information for `%s'%B: warning: illegal symbol index %ld in line numbers%B: warning: illegal symbol index %ld in relocs%B: warning: line number table read failed%B: warning: linking PIC files with non-PIC files%B: warning: linking abicalls files with non-abicalls files%B: warning: relocate SDA_BASE failed.%B: warning: selected VFP11 erratum workaround is not necessary for target architecture%B: warning: sh_link not set for section `%A'%B: warning: unaligned access to GOT entry.%B: warning: unknown EABI object attribute %d%B:%A%s exceeds overlay size
-%B:%A: Warning: deprecated Red Hat reloc %B:%d: Bad checksum in S-record file
-%B:%d: Unexpected character `%s' in S-record file
-%B:%d: unexpected character `%s' in Intel Hex file%B:%u: bad checksum in Intel Hex file (expected %u, found %u)%B:%u: bad extended address record length in Intel Hex file%B:%u: bad extended linear address record length in Intel Hex file%B:%u: bad extended linear start address length in Intel Hex file%B:%u: bad extended start address length in Intel Hex file%B:%u: unrecognized ihex type %u in Intel Hex file%C: warning: relocation to "%s" references a different segment
+#<invalid error code>%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC
+%%X%%P: unresolvable %s relocation against symbol `%s'
+%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
+%03x %*.s Entry: %F%P: %pB(%pA): error: need linked-to section for --gc-sections
+%F%P: %pB(%s): error opening thin archive member: %E
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s'
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB
+%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate compact relative reloc section
+%F%P: %pB: failed to allocate memory for section `%pA'
+%F%P: %pB: failed to allocate relative reloc record
+%F%P: %pB: failed to finish relative relocations
+%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed
+%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)
+%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.
+%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
-%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%B' can not be used when making an executable; recompile with -fPIE and relink with -pie
+%F%P: auto overlay error: %E
+%F%P: can not build overlay stubs: %E
+%F%P: corrupt input: %pB
+%F%P: discarded output section: `%pA'
+%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie
+%F%P: failed to create GNU property section
+%F%P: failed to create GOT PLT .eh_frame section
+%F%P: failed to create GOT PLT section
+%F%P: failed to create GOT sections
+%F%P: failed to create IBT-enabled PLT section
+%F%P: failed to create PLT .eh_frame section
+%F%P: failed to create PLT .sframe section
+%F%P: failed to create VxWorks dynamic sections
+%F%P: failed to create ifunc sections
+%F%P: failed to create second PLT .sframe section
+%F%P: failed to create the second PLT .eh_frame section
+%F%P: failed to size relative relocations
+%F%pA: failed to align section
+%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'
+%F%pB: PC-relative offset overflow in PLT entry for `%s'
+%F%pB: branch displacement overflow in PLT entry for `%s'
 %H __tls_get_addr lost arg, TLS optimization disabled
 %H arg lost __tls_get_addr, TLS optimization disabled
-%H: R_FRV_FUNCDESC references dynamic symbol with nonzero addend
-%H: R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend
+%H: %s against %pT is not supported
+%H: %s against `%pT': error %d
+%H: %s for indirect function `%pT' unsupported
+%H: %s out of range
+%H: %s references dynamic symbol with nonzero addend
+%H: %s references optimized away TOC entry
+%H: %s reloc against `%s': error %d
+%H: %s reloc unsupported here
+%H: %s reloc unsupported in shared libraries and PIEs
+%H: %s used with TLS symbol `%pT'
+%H: %s used with non-TLS symbol `%pT'
 %H: R_FRV_GETTLSOFF not applied to a call instruction
 %H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction
 %H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction
@@ -306,102 +444,123 @@ ppcboot header:
 %H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction
 %H: R_FRV_TLSMOFFHI not applied to a sethi instruction
 %H: R_FRV_TLSOFF_RELAX not applied to an ld instruction
+%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)
+%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)
 %H: cannot emit dynamic relocations in read-only section
 %H: cannot emit fixups in read-only section
+%H: error: %s against `%s' not a multiple of %u
+%H: error: %s not a multiple of %u
+%H: fixup branch overflow
+%H: got/toc optimization is not supported for %s instruction
+%H: non-zero addend on %s reloc against `%s'
 %H: reloc against `%s' references a different segment
 %H: reloc against `%s': %s
+%H: relocation %s for indirect function %s unsupported
+%H: relocation %s returns an unrecognized value %x
 %H: relocation references symbol not defined in the module
 %H: relocation to `%s+%v' may have caused the error above
+%H: relocation type %u is not supported
+%H: unresolvable %s against `%pT'
+%H: unresolvable %s relocation against symbol `%s'
+%H: warning: %s unexpected insn %#x.
+%H: warning: relocation to "%s" references a different segment
 %P%F: --relax and -r may not be used together
-%P%F: failed creating ex9.it %s hash table: %E
 %P%X: can not read symbols: %E
-%P%X: read-only segment has dynamic relocations.
-%P: %B: %s is not supported for `%T'
-%P: %B: cannot create stub entry %s
-%P: %B: relocation %s is not yet supported for symbol %s
-%P: %B: the target (%s) of a %s relocation is in the wrong output section (%s)
-%P: %B: unexpected relocation type
-%P: %B: unknown relocation type %d for `%T'
-%P: %B: unknown relocation type %d for symbol %s
-%P: %B: warning: relocation against `%s' in readonly section `%A'.
-%P: %B: warning: relocation in readonly section `%A'.
-%P: %H: %s against `%T': error %d
-%P: %H: %s for indirect function `%T' unsupported
-%P: %H: %s references optimized away TOC entry
-%P: %H: %s reloc against `%s': error %d
-%P: %H: %s reloc against local symbol
-%P: %H: %s used with TLS symbol `%T'
-%P: %H: %s used with non-TLS symbol `%T'
-%P: %H: @local call to ifunc %s
-%P: %H: call to `%T' lacks nop, can't restore toc; recompile with -fPIC
-%P: %H: error: %s against `%s' not a multiple of %u
-%P: %H: error: %s not a multiple of %u
-%P: %H: non-zero addend on %s reloc against `%s'
-%P: %H: relocation %s for indirect function %s unsupported
-%P: %H: toc optimization is not supported for %s instruction.
-%P: %H: unresolvable %s against `%T'
-%P: %H: unresolvable %s relocation against symbol `%s'
-%P: %s not defined in linker created %s
-%P: %s offset too large for .eh_frame sdata4 encoding%P: .opd not allowed in ABI version %d
-%P: DW_EH_PE_datarel unspecified for this architecture.
-%P: alternate ELF machine code found (%d) in %B, expecting %d
-%P: bss-plt forced by profiling
-%P: bss-plt forced due to %B
-%P: can't build branch stub `%s'
-%P: can't find branch stub `%s'
-%P: cannot find opd entry toc for `%T'
-%P: copy reloc against `%T' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc
-%P: dynreloc miscount for %B, section %A
-%P: error in %B(%A); no .eh_frame_hdr table will be created.
-%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.
-%P: linkage table error against `%T'
-%P: long branch stub `%s' offset overflow
-%P: multiple entry points: in modules %B and %B
+%P%X: read-only segment has dynamic relocations
+%P: %H: error: %s with unexpected instruction %x
+%P: %pB: %s is not supported for `%pT'
+%P: %pB: note: the message above does not take linker garbage collection into account
+%P: %pB: warning: missing %s
+%P: %pB: warning: relocation against `%s' in read-only section `%pA'
+%P: %pB: warning: relocation in read-only section `%pA'
+%P: cannot find opd entry toc for `%pT'
+%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc
+%P: copy reloc against protected `%pT' is dangerous
+%P: linkage table error against `%pT'
+%P: multiple entry points: in modules %pB and %pB
 %P: relocatable link is not supported
-%P: stubs don't match calculated size
-%P: symbol '%s' has invalid st_other for ABI version 1
-%P: warning: creating a DT_TEXTREL in a shared object.
-%X%C: relocation to "%s" references a different segment
-%X%P: %B(%A): relocation "%R" goes out of range
-%X%P: overlay section %A does not start on a cache line.
-%X%P: overlay section %A is larger than a cache line.
-%X%P: overlay section %A is not in cache area.
-%X%P: overlay sections %A and %A do not start at the same address.
-%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B
-%s defined on removed toc entry%s duplicated
+%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s
+%P: warning: creating DT_TEXTREL in a PDE
+%P: warning: creating DT_TEXTREL in a PIE
+%P: warning: creating DT_TEXTREL in a shared object
+%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime
+%X%H: %s against `%s': error: relocation applies outside section
+%X%H: %s against `%s': error: relocation target address is odd
+%X%H: %s against `%s': internal error: unexpected relocation result %d
+%X%H: @local call to ifunc %s
+%X%H: cannot convert branch between ISA modes to JALX: relocation out of range
+%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC
+%X%H: relocation to "%s" references a different segment
+%X%H: unsupported JALX to the same ISA mode
+%X%H: unsupported branch between ISA modes
+%X%H: unsupported bss-plt -fPIC ifunc %s
+%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled
+%X%P: %H: %s relocation unsupported for bss-plt
+%X%P: %pB(%pA): error: relocation for offset %V has no value
+%X%P: %pB(%pA): relocation "%pR" goes out of range
+%X%P: %pB(%pA): relocation "%pR" is not supported
+%X%P: %pB(%pA): relocation "%pR" returns an unrecognized value %x
+%X%P: %pB(%pA): relocation is not supported
+%X%P: %pB(%pA): relocation out of range
+%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation
+%X%P: %pB: error: missing %s
+%X%P: attempted static link of dynamic object `%pB'
+%X%P: internal error: out of range error
+%X%P: internal error: unknown error
+%X%P: internal error: unsupported relocation error
+%X%P: overlay section %pA does not start on a cache line
+%X%P: overlay section %pA is larger than a cache line
+%X%P: overlay section %pA is not in cache area
+%X%P: overlay sections %pA and %pA do not start at the same address
+%X%P: stack/lrlive analysis error: %E
+%X%P: text relocations and GNU indirect functions will result in a segfault at runtime
+%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB
+%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
+%pA:0x%v not found in function table
+%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): error: internal relocs missing for secondary reloc section%pB(%pA): error: reloc table entry %zu is empty%pB(%pA): error: secondary reloc %zu is of an unknown type%pB(%pA): error: secondary reloc %zu references a deleted symbol%pB(%pA): error: secondary reloc %zu references a missing symbol%pB(%pA): error: secondary reloc section has non-standard sized entries%pB(%pA): error: secondary reloc section has zero sized entries%pB(%pA): error: secondary reloc section is empty!%pB(%pA): error: secondary reloc section processed twice%pB(%pA): info section index cannot be set because the section is not in the output%pB(%pA): info section index is invalid%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): link section cannot be set because the output file does not have a symbol table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): relocation %zu has invalid symbol index %lu%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
+%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s%pB, section %pA:
+  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s flag mismatch with previous modules%pB: %s local symbol at index %lu (>= sh_info of %lu)%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
+  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: Adjusting branch at 0x%V towards "%s" in section %s
+%pB: BE8 images only valid in big-endian mode%pB: C_STAT isn't supported by XCOFF64%pB: Cannot create stub entry '%s'%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Number of symbols in input file has increased from %lu to %u
+%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS relocation %s against undefined symbol `%s'%pB: TLS sections are not adjacent:%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead.%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: adjusting invalid FileAlignment%pB: adjusting invalid SectionAlignment%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol index: %d%pB: base-plus-offset relocation against register symbol: %s in %pA%pB: base-plus-offset relocation against register symbol: (unknown) in %pA%pB: can not represent section `%pA' in a.out object file format%pB: can not represent section for symbol `%s' in a.out object file format%pB: can't link %s modules with %s modules%pB: can't link RVE with other target%pB: can't link different ABI object.%pB: cannot allocate file name for file number %d, %d bytes
+%pB: cannot allocate memory for local GOT entries%pB: cannot create stub entry %s%pB: cannot export internal symbol `%s`.%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: conditional branch to undefined symbol `%s' not allowed%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
+%pB: csect `%s' not in enclosing section%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object%pB: directive LOCAL valid only with a register or absolute value%pB: dtp-relative relocation against dynamic symbol %s%pB: duplicate export stub %s%pB: duplicate section `%pA' has different contents
+%pB: duplicate section `%pA' has different size
+%pB: dynamic object with no .loader section%pB: dynamic relocation against `%pT' in read-only section `%pA'
+%pB: dynamic relocation against a local symbol in read-only section `%pA'
+%pB: dynamic relocation in read-only section `%pA'
+%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: attribute section length too small: %ld%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: expected symbol index in range 0..%lu but found local symbol with index %lu%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
+%pB: illegal section name `%pA'%pB: illegal symbol index %ld in relocs%pB: incompatible machine type; output is 0x%x; input is 0x%x%pB: incorrect size for symbol `%s'%pB: indirect symbol `%s' to `%s' is a loop%pB: instruction set mismatch with previous modules%pB: internal error in ihex_read_section%pB: internal error, internal register section %pA had contents
+%pB: internal error, symbol table changed size from %d to %d words
+%pB: internal symbol `%s' in %pB is referenced by DSO%pB: internal symbol `%s' isn't defined%pB: invalid NumberOfRvaAndSizes%pB: invalid entry in SHT_GROUP section [%u]%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions%pB: invalid link %u for reloc section %s (index %u)%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
+%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote
+%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx
+%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo
+%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc
+%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx
+%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d
+%pB: invalid mmo file: file name for number %d was not specified before use
+%pB: invalid mmo file: file number %d `%s', was already entered as `%s'
+%pB: invalid mmo file: initialization value for $255 is not `Main'
+%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx
+%pB: invalid mmo file: lop_end not last item in file
+%pB: invalid mmo file: unsupported lopcode `%d'
+%pB: invalid sh_link field (%d) in section number %d%pB: invalid special symbol `%s'; it must be a global or weak function symbol%pB: invalid standard symbol `%s'; it must be a global or weak function symbol%pB: invalid symbol table: duplicate symbol `%s'
+%pB: invalid version offset %lx (max %lx)%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
+%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-canonical reference to canonical protected function `%s' in %pB%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: not enough version information%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: overflow reloc count too small%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc %#x unsupported%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation %s overflow 0x%lx%pB: relocation %s right shift %d error 0x%lx%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section %s is compressed with zstd, but BFD is not built with zstd support%pB: section '%pA': corrupt VTENTRY entry%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: symbol indicates overlay (not supported)%pB: symbol name exceeds given max length of %d%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to compress section %s%pB: unable to create fake empty section%pB: unable to decompress section %s%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unhandled sparc machine value '%lu' detected during write processing%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported AOUT relocation size: %d%pB: unsupported arch %#x%pB: unsupported bfd mach %#lx%pB: unsupported bfd relocation type %#x%pB: unsupported mach %#x%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type %s%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type: %#x%pB: unsupported swap_aux_in for storage class %#x%pB: unsupported swap_aux_out for storage class %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
+%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section.%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: R_RISCV_SUB_ULEB128 with non-zero addend, please rebuild by binutils 2.42 or up%pB: warning: Weak TLS is implementation defined and may not work as expected%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: secondary relocation section '%s' for section %pA found - ignoring%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
+%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: truncated `%s' option%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: warning: win32pstatus %s of size %lu bytes is too small%pB: will not resolve runtime TLS relocation%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u%pB: wrong auxtype %#x for storage class %#x%pB:%.8s: RVA truncated%pB:%.8s: section below image base%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
+%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: attempting to write over the end of the section%pB:%pA: error: attempting to write section into an empty buffer%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%pB[%pA]: no output section for space %pA%pcrel_lo missing matching %pcrel_hi%pcrel_lo overflow with an addend%pcrel_lo section symbol with an addend%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20%s defined on removed toc entry%s divide by zero%s duplicated
 %s duplicated in %s
-%s in overlay section%s(%s): relocation %d has invalid symbol index %ld%s: %s: reloc overflow: 0x%lx > 0xffff%s: .rsrc merge failure: corrupt .rsrc section%s: 0x%v 0x%v
-%s: Bad symbol definition: `Main' set to %s rather than the start address %s
-%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file
-%s: GAS error: unexpected PTB insn with R_SH_PT_16%s: Internal inconsistency error for value for
- linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx
-%s: Invalid relocation type exported: %d%s: LOCAL directive: Register $%ld is not a local register.  First global register is $%ld.%s: Malformed reloc detected for section %s%s: No core to allocate a symbol %d bytes long
-%s: No core to allocate section name %s
-%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A%s: TLS definition in %B section %A mismatches non-TLS reference in %B%s: TLS reference in %B mismatches non-TLS definition in %B section %A%s: TLS reference in %B mismatches non-TLS reference in %B%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry%s: The target (%s) of an %s relocation is in the wrong section (%s)%s: Unsupported transition from %s to %s%s: XCOFF shared object when not producing XCOFF output%s: __gp does not cover short data segment%s: access beyond end of merged section (%ld)%s: address 0x%s out of range for Intel Hex file%s: base-plus-offset relocation against register symbol: %s in %s%s: base-plus-offset relocation against register symbol: (unknown) in %s%s: can not represent section `%s' in a.out object file format%s: can not represent section `%s' in oasys%s: can not represent section for symbol `%s' in a.out object file format%s: cannot allocate file name for file number %d, %d bytes
-%s: cannot create stub entry %s%s: cannot link fdpic object file into non-fdpic executable%s: cannot link non-fdpic object file into fdpic executable%s: compiled as 32-bit object and %s is 64-bit%s: compiled as 64-bit object and %s is 32-bit%s: compiled with %s and linked with modules compiled with %s%s: compiled with %s and linked with modules that use non-pic relocations%s: could not write out added .cranges entries%s: could not write out sorted .cranges entries%s: directive LOCAL valid only with a register or absolute value%s: dynamic object with no .loader section%s: encountered datalabel symbol in input%s: error: unaligned relocation type %d at %08x reloc %08x
-%s: illegal section name `%s'%s: internal error, internal register section %s had contents
-%s: internal error, symbol table changed size from %d to %d words
-%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
-%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote
-%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx
-%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo
-%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc
-%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx
-%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d
-%s: invalid mmo file: file name for number %d was not specified before use
-%s: invalid mmo file: file number %d `%s', was already entered as `%s'
-%s: invalid mmo file: initialization value for $255 is not `Main'
-%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx
-%s: invalid mmo file: lop_end not last item in file
-%s: invalid mmo file: unsupported lopcode `%d'
-%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx
-%s: invalid symbol table: duplicate symbol `%s'
-%s: line number overflow: 0x%lx > 0xffff%s: no initialized registers; section length 0
-%s: no such symbol%s: not implemented%s: not supported%s: object size does not match that of target %s%s: register relocation against non-register symbol: %s in %s%s: register relocation against non-register symbol: (unknown) in %s%s: relocatable link from %s to %s not supported%s: short data segment overflowed (0x%lx >= 0x400000)%s: string too long (%d chars, max 65535)%s: too many initialized registers; section length %ld
-%s: undefined version: %s%s: unknown relocation type %d%s: unrecognized symbol `%s' flags 0x%x%s: unsupported relocation type 0x%02x%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
-%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)%s: version count (%ld) does not match symbol count (%ld)%s: warning core file truncated%s: warning: %s relocation against symbol `%s' from %s section%s: warning: %s relocation to 0x%x from %s section%s: warning: %s: line number overflow: 0x%lx > 0xffff%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld%s: warning: PLT addend of %d to `%s' from %s section ignored%s: warning: cannot deal R_NDS32_25_ABS_RELA in shared mode.%s: warning: illegal symbol index %ld in relocs%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
-%s: warning: unaligned small data access. For entry: {%d, %d, %d}, addr = 0x%x, align = 0x%x.(at bit offset %u)
+%s has both normal and TLS relocs%s in overlay section%s is defined but could not be loaded: %s%s is defined but plugin support is disabled%s is loaded but symbol "%s" is not found: %s%s not defined in linker created %pA%s not implemented%s offset too large for .eh_frame sdata4 encoding%s, iter %u
+  branch         %lu
+  long branch    %lu
+  plt call       %lu
+  global entry   %lu%s: Bad ELF id: `%d'%s: ISA string cannot contain uppercase letters%s: ISA string must begin with rv32 or rv64%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA%s: TLS reference in %pB mismatches non-TLS reference in %pB%s: compiled as 32-bit object and %s is 64-bit%s: compiled as 64-bit object and %s is 32-bit%s: first ISA extension must be `e', `i' or `g'%s: invalid prefixed ISA extension `%s' ends with <number>p%s: no such symbol%s: not implemented%s: not supported%s: object size does not match that of target %s%s: prefixed ISA extension must separate with _%s: undefined version: %s%s: unknown prefixed ISA extension `%s'%s: unknown standard ISA extension or prefix class `%c'(at bit offset %u)
 (descriptor)
+(format %c%c%c%c signature %s age %ld pdb %s)
 (no value)
 (not active)
 (not allocated)
@@ -410,48 +569,51 @@ ppcboot header:
 )
 *** check this relocation %s*unhandled*
 *unhandled* dst type %u
-*unknown**unknown*        , 8-byte data alignment, Value: %#08lx
+*unknown**unknown*        , Value: %#08lx
 , alias: %u
 , ext fixup offset: %u, no_opt psect off: %u, subtype: %u (%s)
-, symbol vector rva: - %s is G10, %s is not.got section not immediately after .plt section.rsrc merge failure: a directory matches a leaf.rsrc merge failure: differing directory versions
-.rsrc merge failure: dirs with differing characteristics
-.rsrc merge failure: duplicate leaf.rsrc merge failure: duplicate leaf: %s.rsrc merge failure: duplicate string resource: %d.rsrc merge failure: multiple non-default manifests32-bit double, 32bits gp relative relocation occurs for an external symbol64 bits *unhandled*
-64-bit double, : %u.%u
-: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC<Unrecognised flag bits set><corrupt string length: %#x><corrupt string offset: %#lx><unknown>@pltoff reloc against local symbolArchive has no index; run ranlib to add oneArchive object file in wrong formatAttempt to convert L32R/CALLX to CALL failedAttempt to do relocatable link with %s input and %s outputBASE_IMAGE       BFD %s assertion fail %s:%dBFD %s internal error, aborting at %s line %d
-BFD %s internal error, aborting at %s line %d in %s
-BFD Link Error: branch (PC rel16) to section (%s) not supportedBFD Link Error: jump (PC rel26) to section (%s) not supportedBad valueBase Relocation Directory [.reloc]Bound Import DirectoryBounds:
-CLICLR Runtime HeaderCLUSTERS_LOCKMGR COUNTERS         CPU              CTL_AUGRB (augment relocation base) %u
+, symbol vector rva: - %pB is 64-bit, %pB is not-mips32r2 -mfp64 (12 callee-saved).eh_frame_hdr entry overflow.eh_frame_hdr refers to overlapping FDEs.got section not immediately after .plt section.rsrc merge failure: a directory matches a leaf.rsrc merge failure: differing directory versions.rsrc merge failure: dirs with differing characteristics.rsrc merge failure: duplicate leaf.rsrc merge failure: duplicate leaf: %s.rsrc merge failure: duplicate string resource: %d.rsrc merge failure: multiple non-default manifests32-bit double, 32bits gp relative relocation occurs for an external symbol4-byte4-bytes64 bits *unhandled*
+64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC; recompile with -fPIE<corrupt info> %s<corrupt string length: %#x>
+<corrupt string offset: %#lx>
+<corrupt><unknown directory type: %d>
+<unknown mask flags><unknown>@pltoff reloc against local symbolBASE_IMAGE       BFD %s assertion fail %s:%dBFD %s internal error, aborting at %s:%d
+BFD %s internal error, aborting at %s:%d in %s
+Base Relocation Directory [.reloc]Bound Import DirectoryBounds:
+CACHE use: CLICLR Runtime HeaderCLUSTERS_LOCKMGR COUNTERS         CPU              CTL_AUGRB (augment relocation base) %u
 CTL_DFLOC (define location)
 CTL_SETRB (set relocation base)
 CTL_STKDL (stack defined location)
 CTL_STLOC (set location)
-Copyright Header
+Coolidge (kv3) V1 32 bitsCoolidge (kv3) V1 64 bitsCoolidge (kv3) V2 32 bitsCoolidge (kv3) V2 64 bitsCoolidge (kv4) V1 32 bitsCoolidge (kv4) V1 64 bitsCopyright Header
 Corrupt .rsrc section detected!
-DSO missing from command lineDST__K_BEG_STMT_MODE not implementedDST__K_END_STMT_MODE not implementedDST__K_RESET_LINUM_INCR not implementedDST__K_SET_LINUM_INCR not implementedDST__K_SET_LINUM_INCR_W not implementedDST__K_SET_PC not implementedDST__K_SET_PC_L not implementedDST__K_SET_PC_W not implementedDST__K_SET_STMTNUM not implementedDebug DirectoryDebug module table:
+DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: could not find variable specification at offset 0x%lxDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: section %s has no contentsDWARF error: section %s is too bigDWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
 Debug symbol table:
-Delay Import DirectoryDeprecated %s called
-Deprecated %s called at %s line %d in %s
-Description DirectoryDwarf Error: Bad abbrev number: %u.Dwarf Error: Can't find %s section.Dwarf Error: Could not find abbrev number %u.Dwarf Error: Invalid maximum operations per instruction.Dwarf Error: Invalid or unhandled FORM value: %#x.Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu).Dwarf Error: Unable to read alt ref %u.Dwarf Error: Unhandled .debug_line version %d.Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'.Dwarf Error: found dwarf version '%u', this reader only handles version 2, 3 and 4 information.Dwarf Error: mangled line number section (bad file number).Dwarf Error: mangled line number section.EIHD: (size: %u, nbr blocks: %u)
+Delay Import DirectoryDescription DirectoryEIHD: (size: %u, nbr blocks: %u)
 Entry offset        = 0x%.8lx (%ld)
-Error reading %s: %sError: %B has both the current and legacy Tag_MPextension_use attributesErrors encountered processing file %sException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
-Export RVAFAILED to find previous HI16 relocFILES_VOLUMES    File format is ambiguousFile format not recognizedFile in wrong formatFile too bigFile truncatedFlag field          = 0x%.2x
-Forwarder RVAGALAXY           GP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
-ID: %#08lxIDC - Ident Consistency check
-IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supported.
-IO               Image activation:  (size=%u)
+Error: %pB and %pB has different DSP versionError: %pB and %pB has different FPU ABIError: %pB and %pB has different VDSP versionError: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
+Export RVAFDE encoding in %pB(%pA) prevents .eh_frame_hdr table being createdFDPIC does not yet support %s relocation to become dynamic for executableFILES_VOLUMES    FPU-2.0FPU-3.0Flag field          = 0x%.2x
+Forwarder RVAGALAXY           GNU_MBIND section is supported only by GNU and FreeBSD targetsGNU_RETAIN section is supported only by GNU and FreeBSD targetsGOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
+Hard float (32-bit CPU, 64-bit FPU)
+Hard float (32-bit CPU, Any FPU)
+Hard float (MIPS32r2 64-bit FPU 12 callee-saved)
+Hard float (double precision)
+Hard float (single precision)
+Hard float compat (32-bit CPU, 64-bit FPU)
+Hard or soft float
+IBT and SHSTK propertiesIBT propertyID: %#08lxIDC - Ident Consistency check
+IFUNC symbol %s in dynamic symbol table - IFUNCS are not supportedIMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
 Image activator fixup: (major: %u, minor: %u)
 Image identification: (major: %u, minor: %u)
 Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)
 Image symbol & debug table: (major: %u, minor: %u)
-Import Address Table DirectoryImport Directory [parts of .idata]Internal inconsistency: remaining %u != max %u.
-  Please report this bug.Invalid TARGET2 relocation type '%s'.Invalid bfd targetInvalid operationInvalid section index in ETIRJALX to a non-word-aligned addressLOGICAL_NAMES    Language Processor Name
+Import Address Table DirectoryImport Directory [parts of .idata]Internal error: unreachable.LAM_U48 propertyLAM_U57 propertyLOGICAL_NAMES    Language Processor Name
 Length              = 0x%.8lx (%ld)
-Linker: cannot init ex9 hash table error 
-Linker: error cannot fixed ex9 relocation 
-Load Configuration DirectoryMEMORY_MANAGEMENTMIPS16 and microMIPS functions cannot call each otherMISC             MULTI_PROCESSING Major/Minor 			%d/%d
-Malformed archiveMaximum stack required is 0x%v
-MeP: howto %d has type %dMemory exhaustedModule header
-NETWORKS         NORMALName 				No errorNo more archived filesNo symbolsNonrepresentable section on outputNot enough memory to sort relocationsNumber in:
+Load Configuration DirectoryLocal IFUNC function `%s' in %pB
+MEMORY_MANAGEMENTMIPS16 and microMIPS functions cannot call each otherMISC             MMU use: MULTI_PROCESSING Major/Minor 			%d/%d
+Maximum stack required is 0x%v
+MeP: howto %d has type %dMerging program properties
+Module header
+NETWORKS         NORMALNOTE: This behaviour is deprecated and will be removed in a future version of the linkerName 				NoneNumber in:
 OPR_ADD (add)
 OPR_AND (logical and)
 OPR_ASH (arithmetic shift)
@@ -467,29 +629,28 @@ ppcboot header:
 OPR_REDEF (redefine symbol to curr location)
 OPR_ROT (rotate)
 OPR_SEL (select)
-OPR_SUB (substract)
+OPR_SUB (subtract)
 OPR_USH (unsigned shift)
-Object module NOT error-free !
 Ordinal Base 			%ld
-Output file requires shared library `%s'
-Output file requires shared library `%s.so.%s'
-POSIX            PROCESS_SCHED    PRVFXDPRVPICPSC - Program section definition
-PTA mismatch: a SHcompact address (bit 0 == 0)PTB mismatch: a SHmedia address (bit 0 == 1)Partition name      = "%s"
+PC-relative load from unaligned addressPIE executablePOSIX            PROCESS_SCHED    PRVFXDPRVPICPSC - Program section definition
+Partition name      = "%s"
 Partition[%d] end    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 Partition[%d] length = 0x%.8lx (%ld)
 Partition[%d] sector = 0x%.8lx (%ld)
 Please report this bug.
-RL78/G10 ABI conflict: cannot link G10 and non-G10 objects togetherR_BFIN_FUNCDESC references dynamic symbol with nonzero addendR_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addendR_FRV_TLSMOFFLO not applied to a setlo or setlos instruction
-Reading archive file mod timestampReference to the far symbol `%s' using a wrong relocation may result in incorrect executionRegister %%g%d used incompatibly: %s in %B, previously %s in %BRegister section has contents
-Relocation for non-REL psectRemoving unused section '%s' in file '%B'ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %sSH Error: unknown reloc type %dSHELL            SHRFXDSHRPICSPSC - Shared Image Program section def
+Private flags = 0x%lx : RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pBRL78 ABI conflict: cannot link %s file %pB with %s file %pBRL78 merge conflict: cannot link 32-bit and 64-bit objects togetherRL78 reloc divide by zeroRL78 reloc stack overflow/underflowR_AMD64_IMAGEBASE with __ImageBase undefinedR_BFIN_FUNCDESC references dynamic symbol with nonzero addendR_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addendR_FRV_TLSMOFFLO not applied to a setlo or setlos instruction
+Reading archive file mod timestampRemoved property %W to merge %pB (0x%v) and %pB (0x%v)
+Removed property %W to merge %pB (0x%v) and %pB (not found)
+Removed property %W to merge %pB (not found) and %pB (0x%v)
+Removed property %W to merge %pB and %pB
+Removed property %W to merge %pB and %pB (not found)
+ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSHSTK propertySIMD use: SPSC - Shared Image Program section def
 STABLE           STA_CKARG (compare procedure argument)
 STA_GBL (stack global) %.*s
 STA_LI (stack literal)
-STA_LW (stack longword) 0x%08x
-STA_MOD (stack module)
+STA_LW (stack longword)STA_MOD (stack module)
 STA_PQ (stack psect base + offset)
-STA_QW (stack quadword) 0x%08x %08x
-STC_BOH_GBL (store cond BOH at global addr)
+STA_QW (stack quadword)STC_BOH_GBL (store cond BOH at global addr)
 STC_BOH_PS (store cond BOH at psect + offset)
 STC_BSR_GBL (store cond BSR at global addr)
 STC_BSR_PS (store cond BSR at psect + offset)
@@ -524,28 +685,31 @@ ppcboot header:
 SYMG - Universal symbol definition
 SYMM - Global symbol definition with version
 SYMV - Vectored symbol definition
-SYSGEN           Section has no contentsSecurity DirectorySize error in section %sSource Files Header
-Special DirectorySpurious ALPHA_R_BSR relocStack analysis will ignore the call from %s to %s
-Stack overflow (%d) in _bfd_vms_pushStack size for call graph root nodes.
-Stack underflow in _bfd_vms_popStrides:
-Symbol %s not defined for fixups
-Symbol `%s' has differing types: %s in %B, previously REGISTER in %BSymbol `%s' has differing types: REGISTER in %B, previously %s in %BSymbol needs debug section which does not existSystem call errorTLS relocation invalid without dynamic sectionsTOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compilingTable Addresses
+SYSGEN           Security DirectorySoft float
+Source Files Header
+Special DirectoryStack size for call graph root nodes.
+Strides:
+Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pBTLS relocation invalid without dynamic sectionsTOC overflow during stub generation; try -mminimal-toc when compilingTable Addresses
+The addend isn't allowed for R_RISCV_GOT_HI20The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
 Thread Storage Directory [.tls]Time/Date stamp 		%lx
 Title Text Header
-Try enabling relaxation to avoid relocation truncationsUSRSTACKUnable to find equivalent output section for symbol '%s' from section '%s'Unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767.
-Unexpected STO_SH5_ISA32 on local symbol is not handledUnexpected machine numberUnhandled OSF/1 core file section type %d
-Unhandled relocation %sUnknown EGSD subtype %dUnknown basic type %dUnknown reloc %sUnknown reloc %s + %sUnknown symbol in command %sUnrecognized INPUT_SECTION_FLAG %s
-Unrecognized TI COFF target id '0x%x'Unrecognized relocUnrecognized reloc type 0x%xUnsupported .stab relocationVOLATILE         Variable `%s' can only be in one of the small, zero, and tiny data regionsVariable `%s' cannot be in both small and tiny data regions simultaneouslyVariable `%s' cannot be in both small and zero data regions simultaneouslyVariable `%s' cannot be in both zero and tiny data regions simultaneouslyVariable `%s' cannot occupy in multiple small data regionsWarning, .pdata section size (%ld) is not a multiple of %d
-Warning: %B does not support interworking, whereas %B doesWarning: %B is truncated: expected core file size >= %lu, found: %lu.Warning: %B supports interworking, whereas %B does notWarning: %B uses %s (set by %B), %B uses %sWarning: %B uses %s (set by %B), %B uses unknown MSA ABI %dWarning: %B uses %s (set by %B), %B uses unknown floating point ABI %dWarning: %B uses double-precision hard float, %B uses single-precision hard floatWarning: %B uses hard float, %B uses soft floatWarning: %B uses r3/r4 for small structure returns, %B uses memoryWarning: %B uses soft float, %B uses single-precision hard floatWarning: %B uses unknown MSA ABI %d (set by %B), %B uses %sWarning: %B uses unknown MSA ABI %d (set by %B), %B uses unknown MSA ABI %dWarning: %B uses unknown floating point ABI %dWarning: %B uses unknown floating point ABI %d (set by %B), %B uses %sWarning: %B uses unknown floating point ABI %d (set by %B), %B uses unknown floating point ABI %dWarning: %B uses unknown small structure return convention %dWarning: %B uses unknown vector ABI %dWarning: %B uses vector ABI "%s", %B uses "%s"Warning: %B: Conflicting platform configurationWarning: %B: Unknown EABI object attribute %dWarning: %B: Unknown MSPABI object attribute %dWarning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with itWarning: Clearing the interworking flag of %B due to outside requestWarning: Not setting interworking flag of %B since it has already been specified as non-interworkingWarning: RL78_SYM reloc with an unknown symbolWarning: RX_SYM reloc with an unknown symbolWarning: Writing section `%s' to huge (ie negative) file offset 0x%lx.Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %AWarning: alignment %u of symbol `%s' in %B is smaller than %u in %BWarning: fixup count mismatch
-Warning: gc-sections option ignoredWarning: size of symbol `%s' changed from %lu in %B to %lu in %BWarning: type of symbol `%s' changed from %d to %d in %BWarning: writing archive was slow: rewriting timestamp
-Writing updated armap timestampXGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code.[%u]: %u
-[%u]: Lower: %u, upper: %u
-[abi=16-bit int, [abi=32-bit int, [whose name is lost]\%B: Warning: Arm BLX instruction targets Arm function '%s'._bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytesaddressaddress not word alignarsize: %u, a0: 0x%08x
-bad section index in %sbanked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)base: %u, pos: %u
-bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %lu)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %lubfd_mach_o_read_symtab_symbols: unable to allocate memory for symbolsbfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
+Too many unwind codes (%ld)
+Type                Size     Rva      Offset
+USRSTACKUnable to find the stub entry targeting %sUnable to link input file: %sUnable to load DLL.UnknownUnknown: %xUpdated property %W (%v) to merge %pB (0x%v) and %pB (not found)
+Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)
+VOLATILE         Virtual size of .pdata section (%ld) larger than real size (%ld)
+Warning: %s section size (%ld) is not a multiple of %d
+Warning: %s section size (%ld) is smaller than virtual size (%ld)
+Warning: %s section size is zero
+Writing updated armap timestampXGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code.[%u]: Lower: %u, upper: %u
+[abi=16-bit int, [abi=32-bit int, [whose name is lost]\%pB: warning: %s BLX instruction targets %s function '%s'__tls_get_addr call offset overflow_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry function`xtheadvector' is conflict with the `v' extension`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extensiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
+array, dim: %u, bitmap: arsize: %u, a0: 0x%08x
+atomic, type=0x%02x %s
+attempt to convert L32R/CALLX to CALL failedattempt to do relocatable link with %s input and %s outputbad section index in %sbad valuebanked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)base: %u, pos: %u
+bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lxbfd_mach_o_read_section_64: overlarge alignment value: %#lxbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
 blkend: size: 0x%08x
-cannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
-cannot handle R_MEM_INDIRECT reloc when using %s outputcannot read DMT
+branch (PC rel16) to section (%s) not supportedbranch to a non-instruction-aligned addressbss-plt forced by profilingbss-plt forced due to %pBc' or `zcac' or `zcdc' or `zcfcan't build branch stub `%s'can't find branch stub `%s'cannot + or - base extension `%s' in .option arch `%s'cannot convert a branch to JALX for a non-word-aligned addresscannot convert a jump to JALX for a non-word-aligned addresscannot create stub entry %scannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
+cannot find default versions of the ISA extension `%s'cannot read DMT
 cannot read DMT header
 cannot read DMT psect
 cannot read DST
@@ -561,80 +725,84 @@ ppcboot header:
 cannot read GST
 cannot read GST record
 cannot read GST record header
-cannot read GST record length
 class: %u, dtype: %u, length: %u, pointer: 0x%08x
-corrupt %s section in %Bcould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]dangerous relocationdelta pc +%-4ddelta_pc_l: +0x%08x
+corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)corrupt EGSD record type %d: size (%#x) is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt reloc recordcorrupt vms valuecorrupted GST
+could not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]d' and `c', or `d' and `zcdd' and `zfad' or `zdinxdangerous relocationdangerous relocation errordelta pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 descdimct: %u, aflags: 0x%02x, digits: %u, scale: %u
-discarded output section: `%A'discontiguous range (nbr: %u)
-dynamic relocation in read-only sectiondynamic variable `%s' is zero sizeenumbeg, len: %u, name: %.*s
+discarded output section: `%pA'discarding zero address range FDE in %pB(%pA).
+discontiguous range (nbr: %u)
+division by zerodst_define_location %u too largedynamic index information not availabledynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
 enumelt, name: %.*s
 enumend
 epilog: flags: %u, count: %u
-error reading cpu type from elf private dataerror: %B contains a reloc (0x%s) for section %A that references a non-existent global symbolerror: %B does not use Maverick instructions, whereas %B doeserror: %B is already in final BE8 formaterror: %B is compiled as absolute position code, whereas target %B is position independenterror: %B is compiled as position independent code, whereas target %B is absolute positionerror: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%derror: %B is compiled for APCS-%d, whereas target %B uses APCS-%derror: %B is compiled for the EP9312, whereas %B is compiled for XScaleerror: %B passes floats in float registers, whereas %B passes them in integer registerserror: %B passes floats in integer registers, whereas %B passes them in float registerserror: %B requires more array alignment than %B preserveserror: %B requires more stack alignment than %B preserveserror: %B uses %s instructions but %B uses %serror: %B uses FPA instructions, whereas %B does noterror: %B uses Maverick instructions, whereas %B does noterror: %B uses VFP instructions, whereas %B does noterror: %B uses VFP register arguments, %B does noterror: %B uses hardware FP, whereas %B uses software FPerror: %B uses iWMMXt register arguments, %B does noterror: %B uses software FP, whereas %B uses hardware FPerror: %B uses the %s code model whereas %B uses the %s code modelerror: %B uses the %s data model but %B only uses MSP430 instructionserror: %B uses the %s data model whereas %B uses the %s data modelerror: %B uses the large code model but %B uses MSP430 instructionserror: %B uses the small code model but %B uses the %s data modelerror: %B: Conflicting CPU architectures %d/%derror: %B: Conflicting architecture profiles %c/%cerror: %B: Conflicting use of R9error: %B: Object has vendor-specific contents that must be processed by the '%s' toolchainerror: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'error: %B: SB relative addressing conflicts with use of R9error: %B: Unknown CPU architectureerror: %B: size of section %A is not multiple of address sizeerror: %B: unable to merge virtualization attributes with %Berror: Can't find symbol: _SDA_BASE_.error: Source object %B has EABI version %d, but target %B has EABI version %derror: fp16 format mismatch between %B and %Berror: inappropriate relocation type for shared library (did you forget -fpic?)error: required section '%s' not found in the linker scripterror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %Berror: unknown Tag_ABI_array_object_alignment value in %Bexecutablefailed to allocate space for new APUinfo section.failed to compute new APUinfo section.failed to install new APUinfo section.fatal error while creating .fixupgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation at address 0x%08x when _gp not defined
-global pointer relative relocation when _gp not definedhidden symbolignoring reloc %s
-incr_linum(b): +%u
+error adding attributeerror in %pB(%pA); no .eh_frame_hdr table will be createderror in %pB(%pA); no .sframe will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memoryerror: %pB does not use %s instructions, whereas %pB doeserror: %pB has a LOAD segment with RWX permissionserror: %pB has a TLS segment with execute permissionerror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack alignederror: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt AArch64 used size: 0x%x>error: %pB: <corrupt property (0x%x) size: 0x%x>error: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s)error: %pB: SB relative addressing conflicts with use of R9error: %pB: XLEN of input (%u) doesn't match output (%u)error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'error: %pB: mis-matched ISA string to merge '%s' and '%s'error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: %pB: unsupported XLEN (%u), you might be using wrong emulationerror: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack sectionerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: conflicting CPU architectures %s vs %s in %pBerror: creating an executable stack because of -z execstack command line optionerror: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spaceerror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablef' and `c', or `f' and `zcff' or `zfinxfailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfinal size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spacefurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation when _gp not definedhhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
-internal error: addend should be zero for R_LM32_16_GOTinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: out of range errorinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal symbolinvalid input relocation when producing non-ELF, non-mmo format output.
- Please use the objcopy program to convert from ELF or mmo,
- or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output.
- Please use the objcopy program to convert from ELF or mmo,
- or compile using the gcc-option "-mno-base-addresses".invalid relocation addressinvalid relocation type %dinvalid use of %s with contextsip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx).ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx).ip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.line num  (len: %u)
-linkable imagelinker stubs in %u group%s
-  branch       %lu
-  toc adjust   %lu
-  long branch  %lu
-  long toc adj %lu
-  plt call     %lu
-  plt call toc %luliteralliteral relocation occurs for an external symbolmach-o: there are too many sections (%d) maximum is 255,
-mep: no reloc for code %dmodbeg
+indirect, defined at 0x%08x
+input SFrame sections with different abi prevent .sframe generationinput SFrame sections with different format versions prevent .sframe generationinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: relocation not supportedinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol internal: unreachable INSN_CLASS_*invalid %sinvalid ISA extension ends with <number>p in .option arch `%s'invalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid dynamic indexinvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
+len: %2u, kind: %2u line num  (len: %u)
+linkable imagelinker stubs in %u grouplinker stubs in %u groupsliteralliteral relocation occurs for an external symbollocal symbol index too biglong branch stub `%s' offset overflowm' or `zmmulmach-o: there are too many sections (%u) maximum is 255,
+malformed archivemalformed mach-o ARM half sectdiff reloc: invalid length: %dmalformed mach-o ARM local sectdiff reloc: invalid length: %dmalformed mach-o ARM reloc pair: invalid length: %dmalformed mach-o ARM reloc pair: reloc is first relocmalformed mach-o ARM reloc: unknown reloc type: %dmalformed mach-o ARM sectdiff reloc: invalid length: %dmalformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)malformed mach-o reloc: section index is greater than the number of sectionsmemory exhaustedmep: no reloc for code %dmodbeg
 modend
-name: [val: %08lx len %d]: nativenon-contiguous array of %s
-non-dynamic relocations refer to dynamic symbol %snon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
-non-zero addend in @fptr relocnot enough GOT space for local GOT entriesnot mapping: data=%lx mapped=%d
+name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno dynamic index information availableno errorno more archived filesno symbolsnon-contiguous array of %s
+non-dynamic relocations refer to dynamic symbol %snon-dynamic symbol %s in dynamic symbol tablenon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
+non-zero addend in @fptr relocnonenonrepresentable section on outputnot enough GOT space for local GOT entriesnot enough memory to sort relocationsnot mapping: data=%lx mapped=%d
 not mapping: env var not set
-out of rangeoverflow after relaxationoverlay stub relocation overflowprivate flags = %lxprivate flags = %lx:private flags = %lx: private flags = %x:private flags = 0x%lxprivate flags = 0x%lx:prolog: bkpt address 0x%08x
-protected symbolrecbeg: name: %.*s
+not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowplugin framework: out of file descriptors. Try using fewer objects/archives
+pointer
+private flags = %lxprivate flags = %lx:private flags = %lx: private flags = 0x%lxprivate flags = 0x%lx:prolog: bkpt address 0x%08x
+protected symbolprotected symbol q' and `zfaq' or `zqinxrecbeg: name: %.*s
 recend
-reference to a banked address [%lx:%04lx] in the normal address space at %04lxregrelocation `%s' not yet implementedrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedreopening %B: %s
-reserved cmd %drtnbeg
+record is too small for symbol name lengthreference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
+reloc (%d) is *UNKNOWN*relocation against `%s' has faulty GOT type relocation for non-REL psectrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedremoving unused section '%pA' in file '%pB'reopening %pB: %sreserved cmd %drtnbeg
 rtnend: size 0x%08x
-septyp, name: %.*s
+rv%d does not support the `q' extensionrv%d does not support the `zcf' extensionrv%de does not support the `h' extensionsection has no contentsseptyp, name: %.*s
 set_abs_pc: 0x%08x
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-small-data section exceeds 64KB; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, no support for duplicate object files in auto-overlay script
+shared objectsize error in section %pAsmall-data section too large; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, cannot handle this filesorry, no support for duplicate object files in auto-overlay script
 sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands.source (len: %u)
-standard data: %s
-static procedure (no name)stub entry for %s cannot load .plt, dp offset = %ldstubs don't match calculated sizesymbolsystem version array information:
-term(b): 0x%02xterm_w: 0x%04xtypspec (len: %u)
-unable to find ARM glue '%s' for '%s'unable to find THUMB glue '%s' for '%s'unable to read in %s section from %Bunable to write unknown load command 0x%lxunaligned bit-string of %s
-uncertain calling convention for non-COFF symbolundefined %s reference in complex symbol: %sunhandled egsd entry type %u
+spurious ALPHA_R_BSR relocstack analysis will ignore the call from %s to %s
+stack overflow (%d) in _bfd_vms_pushstack underflow in _bfd_vms_popstandard data: %s
+start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targetssymbol needs debug section which does not existsymbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targetssystem call errorsystem version array information:
+term(b): 0x%02xterm_w: 0x%04xthe bfin target does not currently support the generation of copy relocationsthere is a conflict merging the ELF header flags from %pBtoo many GOT entries for -fpic, please recompile with -fPICtry enabling relaxation to avoid relocation truncationstype spec for element:
+type spec for subscript %u:
+typed pointer
+typspec (len: %u)
+unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
+undefined undefined %s reference in complex symbol: %sunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
 unhandled emh subtype %u
-unknownunknown ETIR command %dunknown errorunknown header byte-order value 0x%lxunknown line command %dunknown operator '%c' in complex symbolunknown source command %dunknown v850 architectureunsupported STA cmd %sunsupported relocunsupported reloc typeunsupported relocationunsupported relocation between data/insn address spacesusing multiple gp valuesv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
-warning: %B and %B differ in wchar_t sizewarning: %B and %B differ in whether code is compiled for DSBTwarning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %B: local symbol `%s' has no sectionwarning: %s exceeds section size
-warning: %s has a corrupt string table index - ignoringwarning: %s overlaps %s
-warning: %s section has zero sizewarning: .pdata section size (%ld) is not a multiple of %d
-warning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %Bwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%A' type changed to PROGBITSwarning: type and size of dynamic symbol `%s' are not definedwarning: unable to set size of %s section in %Bwarning: unable to update contents of %s section in %syou are not allowed to define %s in a scriptProject-Id-Version: bfd-2.24.90
-Report-Msgid-Bugs-To: bug-binutils@gnu.org
-POT-Creation-Date: 2014-02-10 09:42+1030
-PO-Revision-Date: 2016-05-29 17:48+0200
+unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown ISA extension `%s' in .option arch `%s'unknown attribute for symbol `%s': 0x%02xunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
+unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeusing multiple gp valuesv' or `zve64d' or `zve64f' or `zve32fv' or `zve64x' or `zve32xv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
+warning, .pdata section size (%ld) is not a multiple of %d
+warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a LOAD segment with RWX permissionswarning: %pB has a TLS segment with execute permissionwarning: %pB has a corrupt string table indexwarning: %pB has a program header with invalid alignmentwarning: %pB has a section extending past end of filewarning: %pB has a segment extending past end of filewarning: %pB supports interworking, whereas %pB does notwarning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%uwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
+warning: %s overlaps %s
+warning: %s section has zero sizewarning: %s should be used rather than %swarning: %s: missing .note.GNU-stack section implies executable stackwarning: %s: requires executable stack (because the .note.GNU-stack section is executable)warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: --plt-localentry is incompatible with power10 pc-relative codewarning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised.warning: NOTE: size discrepancies can cause real problems.  Investigation is advised.warning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pBwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
+warning: discarding dynamic section %swarning: enabling an executable stack because of -z execstack command line optionwarning: file %pB's arch flag %s conflict with target %s,set target arch flag to %swarning: file %pB's arch flag %s conflicts with target ck%s, using %swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: privileged spec version 1.9.1 can not be linked with other spec versionswarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognised arch name '%#x'warning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
+x ISA extension `%s' must be set with the versionsyesyou are not allowed to define %s in a scriptzbb' or `zbkbzbc' or `zbkczcb' and `zbazcb' and `zbbzcb' and `zmmul', or `zcb' and `mzfh' and `zfazfh' and `zfa', or `zvfh' and `zfazfh' or `zhinxzfh' or `zvfhzfhmin' and `d', or `zhinxmin' and `zdinxzfhmin' and `q', or `zhinxmin' and `zqinxzfhmin' or `zhinxminzihintntl' and `c', or `zihintntl' and `zcazknd' or `zknezvbbzvbczvkbzvkgzvknedzvknha' or `zvknhbzvksedzvkshzvl*b extensions need to enable either `v' or `zve' extensionProject-Id-Version: bfd-2.41.90
+Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/
+POT-Creation-Date: 2024-01-15 14:55+0000
+PO-Revision-Date: 2024-01-19 20:00+0100
 Last-Translator: ÐœÐ¸Ñ€Ð¾Ñ�Ð»Ð°Ð² Ð�Ð¸ÐºÐ¾Ð»Ð¸Ñ› <miroslavnikolic@rocketmail.com>
 Language-Team: Serbian <(nothing)>
 Language: sr
-X-Bugs: Report translation errors to the Language-Team address.
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
-	    Ð¢Ð›Ð¡: %A	Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° 			Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° 		%08lx
-	Ð¢Ð°Ð±ÐµÐ»Ð° Ð½Ð°Ð·Ð¸Ð²Ð° Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° 			Ð¢Ð°Ð±ÐµÐ»Ð° Ñ€ÐµÐ´Ð½Ð¸Ñ… Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð° 				Ð¢Ð°Ð±ÐµÐ»Ð° [Ð�Ð°Ð·Ð¸Ð² Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð°/Ñ€ÐµÐ´Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°]	%08lx
-	Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° %08lx ÐºÐ¾Ð´Ð½Ðµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ (ÑƒÑ‡Ð¸Ñ‚Ñ™Ð¸Ð²Ð°/Ð°ÐºÑ‚ÑƒÐµÐ»Ð½Ð°) %08lx/%08lx
-	Ð½Ðµ-Ð¢Ð›Ð¡: %A	Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ %4d Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %4x [%4lx] %s	vma:  Ð�Ð°Ñ˜Ð°Ð²Ð°/Ð ÐµÐ´Ð½Ð¸ Ð�Ð°Ð·Ð¸Ð² Ñ‡Ð»Ð°Ð½Ð° Ð¡Ð²ÐµÐ·Ð°Ð½-Ð·Ð°
+X-Bugs: Report translation errors to the Language-Team address.
+	    Ð¢Ð›Ð¡: %pA	<Ð¾ÑˆÑ‚ÐµÑ›ÐµÑšÐµ: 0x%04lx>	Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° 			Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° 	                %08lx
+	Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° â€žrvaâ€œ (0x%lx) Ð¸Ð»Ð¸ Ð±Ñ€Ð¾Ñ˜ ÑƒÐ½Ð¾Ñ�Ð° (0x%lx)
+	Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ð½Ð°Ð·Ð¸Ð²Ð° Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° â€žrvaâ€œ (0x%lx) Ð¸Ð»Ð¸ Ð±Ñ€Ð¾Ñ˜ ÑƒÐ½Ð¾Ñ�Ð° (0x%lx)
+	Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ€ÐµÐ´Ð½Ð¾Ð³ â€žrvaâ€œ (0x%lx) Ð¸Ð»Ð¸ Ð±Ñ€Ð¾Ñ˜ ÑƒÐ½Ð¾Ñ�Ð° (0x%lx)
+	Ð¢Ð°Ð±ÐµÐ»Ð° Ð½Ð°Ð·Ð¸Ð²Ð° Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° 			Ð¢Ð°Ð±ÐµÐ»Ð° Ñ€ÐµÐ´Ð½Ð¸Ñ… Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð° 				[%4ld] <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: %lx>
+	Ð¢Ð°Ð±ÐµÐ»Ð° [Ð�Ð°Ð·Ð¸Ð² Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð°/Ñ€ÐµÐ´Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°]	%08lx
+	Ð½Ðµ-Ð¢Ð›Ð¡: %pA	Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ %4d Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %4x [%4lx] %s	vma:  Ð�Ð°Ñ˜Ð°Ð²Ð°/Ð ÐµÐ´Ð½Ð¸ Ð�Ð°Ð·Ð¸Ð² Ñ‡Ð»Ð°Ð½Ð° Ð¡Ð²ÐµÐ·Ð°Ð½-Ð·Ð°
+
 
-	Ð”Ð›Ð› Ð½Ð°Ð·Ð¸Ð²: %s
+	â€žDLLâ€œ Ð½Ð°Ð·Ð¸Ð²: %.*s
 
 
 ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ ÐŸÐ• Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ â€ž.relocâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°)
@@ -651,17 +819,17 @@ Plural-Forms: nplurals=3; plural=(n%10==
 
 ÐžÑ�Ð¾Ð±ÐµÐ½Ð¾Ñ�Ñ‚Ð¸ 0x%x
 
+Ð˜Ð·Ð»Ð°Ð· Ð·Ð° â€ž%sâ€œ
+
 Ð”Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº:
 
+Ð“Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ð°Ð»Ð¸ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸
+
 ÐŸÐ¾Ð¼Ð¾Ñ›Ð½Ð¾ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ
 
 Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° â€”â€” ÐžÑ�Ð½Ð¾Ð²Ð° Ñ€ÐµÐ´Ð½Ð¸Ñ… Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð° %ld
 
-ÐžÐ¿Ð¸Ñ�Ð½Ð¸Ðº Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ð½Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸: %04lx
-
-Ð�ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°! ÐžÐ¿Ð¸Ñ�Ð½Ð¸Ðº Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð½.
-
-ÐŸÐ¾Ñ‡ÐµÑ‚Ð°Ðº Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
+ÐŸÐ¾Ñ‡ÐµÑ‚Ð°Ðº Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°:
 
@@ -670,20 +838,33 @@ Plural-Forms: nplurals=3; plural=(n%10==
 Ð¢Ð°Ð±ÐµÐ»Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)
 
 
+Ð¢Ð°Ð±ÐµÐ»Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)
+
 Ð¢Ð°Ð±ÐµÐ»Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ)
 
 Ð¢Ð°Ð±ÐµÐ»Ðµ ÑƒÐ²Ð¾Ð·Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)
 
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx
+
+
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ‚Ð°Ñ˜ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°
+
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð³Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸
+
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð¿Ñ€Ð²Ð¸ Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð³Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸
 
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx
 
-ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ�Ñ‚Ð°Ð½Ðµ Ñƒ Ñ‚Ð°Ñ˜ Ð¾Ð´ÐµÑ™Ð°Ðº
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸
+
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð° (%d)
 
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸
 
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx
 
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
+
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸
 
 Ð£Ð¿ÑƒÑ‚Ð° Ð¸Ð·Ð´Ð°ÑšÐ°:
@@ -699,9 +880,11 @@ Plural-Forms: nplurals=3; plural=(n%10==
 Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ â€žppcbootâ€œ:
         pc: 0x%08x
     *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%uâ€œ
+    Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x
     Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u
     Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %u, Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð¿Ð´-Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x
     Ð¾Ð¿ÑˆÑ‚Ð¸ Ð½Ð°Ð·Ð¸Ð²: %.*s
+    Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u Ð±Ð¸Ñ‚Ð°
     Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: 0x%08x
     Ð½Ð°Ð·Ð¸Ð²: %.*s
     pc: 0x%08x
@@ -711,8 +894,16 @@ Plural-Forms: nplurals=3; plural=(n%10==
     Ð¸Ð½Ð´ÐµÐºÑ� Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° 3: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ 3: 0x%08x %08x
     Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x %08x
     Ð½Ð°Ð·Ð¸Ð² Ñ€ÑƒÑ‚Ð¸Ð½Ðµ : %.*s
-   %02u    %s%s %s
-   (Ð²Ñ€Ñ�Ñ‚Ð°: %3u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 4+%3u):    *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%uâ€œ
+   %02u    (Ð²Ñ€Ñ�Ñ‚Ð°: %3u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %3u):    *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%uâ€œ
+   ÐŸÐ¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð”Ð°Ñ‚ÑƒÐ¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ° Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð´ÑƒÐ¶Ð¸Ð½Ðµ â€žEEOMâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð´ÑƒÐ¶Ð¸Ð½Ðµ â€žEMHâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³Ð¾
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ�Ð½Ð¸Ð¼ÐºÐ° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ â€žEMH_MHDâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°
    Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ : 2**%u
    Ð´Ð¾Ð´ÐµÐ»Ð° (Ð´ÑƒÐ¶Ð¸Ð½Ð°)  : %u (0x%08x)
    Ð´Ð¾Ð´ÐµÐ»Ð° (Ð´ÑƒÐ¶Ð¸Ð½Ð°): %u (0x%08x)
@@ -724,6 +915,8 @@ Plural-Forms: nplurals=3; plural=(n%10==
    Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð¸Ð»Ð°Ñ†  : %.*s
    Ð´Ð¾Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐµ ÐºÐ¾Ð´Ð°: %u
    Ð°ÑƒÑ‚Ð¾Ñ€Ñ�ÐºÐ° Ð¿Ñ€Ð°Ð²Ð°: %.*s
+   Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° Ñ†Ð¿Ñ˜:   %#lx%s
+   Ð²Ñ€Ñ�Ñ‚Ð° Ñ†Ð¿Ñ˜:      %#lx (%s)
    declfile: Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %u, Ð¸Ð´ Ð¿Ð¾Ñ™Ð°: %u
    deflines %u
    Ð½Ð°Ð·Ð¸Ð² ÐµÐ½Ñ‚Ð¸Ñ‚ÐµÑ‚Ð°  : %.*s
@@ -731,7 +924,9 @@ Plural-Forms: nplurals=3; plural=(n%10==
    Ð¾Ð·Ð±Ð¸Ñ™Ð½Ð¾Ñ�Ñ‚ Ð³Ñ€ÐµÑˆÐºÐµ: %x
    Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: %.*s
    Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %.*s
-   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%08x   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%04x   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %d, Ñ˜ÐµÐ·Ð¸Ðº: %u, Ð²ÐµÑ›Ð¸: %u, Ð¼Ð°ÑšÐ¸: %u
+   Ð²Ñ€Ñ�Ñ‚Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %#lx
+   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%08x   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%04x   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ:      %#lx
+   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %d, Ñ˜ÐµÐ·Ð¸Ðº: %u, Ð²ÐµÑ›Ð¸: %u, Ð¼Ð°ÑšÐ¸: %u
    Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%04x   formfeed
    Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð°ÑšÐµ Ð¸Ð´-Ð° : %x
    Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð»Ð¸ÐºÐµ: 0x%08x
@@ -740,6 +935,7 @@ Plural-Forms: nplurals=3; plural=(n%10==
    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð½Ð°Ð·Ð¸Ð² Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ°: %.*s
    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿Ð°Ðº: %.*s
    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x %08x
+   Ð¼Ð°Ð³Ð¸Ñ˜Ð°:         %#lx
    Ð½Ð°Ñ˜Ð². Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð±ÐµÐ»ÐµÐ¶ÐµÑšÐ°: %u
    Ð½Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð°           : %.*s
    Ð½Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð°           : %.*s
@@ -747,6 +943,7 @@ Plural-Forms: nplurals=3; plural=(n%10==
    Ð½Ð°Ð·Ð¸Ð²           : %.*s
    Ð½Ð°Ð·Ð¸Ð²         : %.*s
    Ð½Ð°Ð·Ð¸Ð²        : %.*s
+   Ð±Ñ€Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸:      %#lx
    Ð±Ñ€Ð¾Ñ˜ â€žcondâ€œ Ð¿Ð°Ñ€Ð¾Ð²Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u
    Ð½Ð°Ð·Ð¸Ð² Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°  : %.*s
    Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: 0x%08x
@@ -761,6 +958,7 @@ Plural-Forms: nplurals=3; plural=(n%10==
    setlnum %u
    setrec %u
    Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ�: %.*s
+   Ð²ÐµÐ»Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸:     %#lx
    Ð½Ð¸Ð²Ð¾ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ         : %u
    Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: 0x%08x
    Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð¸Ð¼Ð²ÐµÐº-Ð° : 0x%08x
@@ -770,12 +968,12 @@ Plural-Forms: nplurals=3; plural=(n%10==
    Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð°          : 0x%08x
    Ð²ÐµÐºÑ‚Ð¾Ñ€     : 0x%08x
    Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ: 0x%08x
-  %s (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u+%u):
-  %s: 0x%v
+   Ð¸Ð·Ð´Ð°ÑšÐµ:         %x
+  %s (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):
   %u: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: 0x%02x, Ð½Ð°Ð·Ð¸Ð²: %.*s
   EEOM (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):
   EGSD (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):
-  â€žEGSDâ€œ ÑƒÐ½Ð¾Ñ� â€ž%2uâ€œ (Ð²Ñ€Ñ�Ñ‚Ð°ype: %u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u):   EMH %u (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):   Ð¾Ñ�Ð½Ð¾Ð²Ð°: 0x%08x %08x, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%08x, Ð·Ð°ÑˆÑ‚Ð¸Ñ‚Ð°: 0x%08x   base_va : 0x%08x
+  â€žEGSDâ€œ ÑƒÐ½Ð¾Ñ� â€ž%2uâ€œ (Ð²Ñ€Ñ�Ñ‚Ð°: %u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u):   EMH %u (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):   Ð¾Ñ�Ð½Ð¾Ð²Ð°: 0x%08x %08x, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%08x, Ð·Ð°ÑˆÑ‚Ð¸Ñ‚Ð°: 0x%08x   base_va : 0x%08x
   Ð±Ñ€Ð¾Ñ˜ Ð±Ð¸Ñ‚Ð°: %u, Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x
   Ð¿Ð¾Ð·Ð¸Ð²Ð¸:
   chgprtoff : %5u
@@ -793,19 +991,22 @@ Plural-Forms: nplurals=3; plural=(n%10==
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° : %u
- %08x 0x%08x 64B <Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ> Ð‘Ð¡Ð¢Ð Ð�Ð�Ð˜Ð¦Ð�: %u COM COMM ÐŸÑ€Ð¾Ð¼ÐµÐ½Ð° Ð·Ð°ÑˆÑ‚Ð¸Ñ‚Ðµ (%u ÑƒÐ½Ð¾Ñ�Ð°):
+  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ ÑƒÐ»Ð°Ð·Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %s  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¸Ð·Ð»Ð°Ð·Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %s %08x (<Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾>) 0x%08x 64B <Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ> <Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ñ�ÐºÑƒÐ¿ Ð±Ð¸Ñ‚Ð¾Ð²Ð° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ> Ð‘Ð¡Ð¢Ð Ð�Ð�Ð˜Ð¦Ð�: %u COM COMM ÐŸÑ€Ð¾Ð¼ÐµÐ½Ð° Ð·Ð°ÑˆÑ‚Ð¸Ñ‚Ðµ (%u ÑƒÐ½Ð¾Ñ�Ð°):
  Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ ÑƒÐ¿ÑƒÑ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ ÐºÐ¾Ð´Ð°:
- DEF EXE ÐŸÑ€Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x
+ DEF EXE â€žFPUâ€œ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ° Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð°:  ÐŸÑ€Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x
  Ð§ÐµÑ‚Ð²Ñ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x
- GBL Ð�Ð¸Ð· ÐºÐ¾Ð´Ð° Ð»ÐµÐ¿ÐºÐ° LIB Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ ÑƒÐ¿ÑƒÑ‚Ðµ Ð¿Ð°Ñ€Ð¾Ð²Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°:
- NOMOD NORM OVR PIC QVAL RD REL Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ð²Ñ€Ð°Ñ›Ð° Ð¼Ð¸Ð»Ð¸ÐºÐ¾Ð´ Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ñ‡ÑƒÐ²Ð° Ð¼Ð¸Ð»Ð¸ÐºÐ¾Ð´ SHR Ð”Ñ€ÑƒÐ³Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x
+ GBL LIB Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ ÑƒÐ¿ÑƒÑ‚Ðµ Ð¿Ð°Ñ€Ð¾Ð²Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°:
+ â€žMACH-Oâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ:
+ NOMOD NORM OVR PIC QVAL RD REL Ð˜Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ð° Ð¿Ð¾Ñ‡Ð¸ÑšÑƒ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ: %#03x
+ SHR Ð”Ñ€ÑƒÐ³Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x
  Ð”ÐµÑ™Ð¸Ð²Ðµ Ñ�Ð»Ð¸ÐºÐµ:
  Ð”ÐµÑ™ÐµÐ½Ð° Ñ�Ð»Ð¸ÐºÐ°   : 0x%08x 0x%08x
+ Ð¢Ð°Ð±ÐµÐ»Ð° Ð½Ð¸Ñ�ÐºÐµ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ: %#03x
  Ð¢Ð°Ð±ÐµÐ»Ð°: Ð—Ð½Ð°Ðº: %d, Ð’Ñ€ÐµÐ¼Ðµ: %08lx, Ð˜Ð·Ð´: %d/%d, Ð‘Ñ€Ð¾Ñ˜ Ð½Ð°Ð·Ð¸Ð²Ð°: %d, Ð˜Ð”-Ð¾Ð²Ð¸: %d
  Ð¢Ñ€ÐµÑ›Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x
- UNI VEC VECEP WEAK WRT [BE8] [â€žFPAâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°] [Ð“10] [LE8] [â€žMaverickâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°] [â€žVFPâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°] [Ð˜Ð·Ð´Ð°ÑšÐµ1 â€žEABIâ€œ] [Ð˜Ð·Ð´Ð°ÑšÐµ2 â€žEABIâ€œ] [Ð˜Ð·Ð´Ð°ÑšÐµ3 â€žEABIâ€œ] [Ð˜Ð·Ð´Ð°ÑšÐµ4 â€žEABIâ€œ] [Ð˜Ð·Ð´Ð°ÑšÐµ5 â€žEABIâ€œ] [XGATE RAM Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜] [Ð°Ð±Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾] [Ð°Ð±Ð¸=64] [Ð°Ð±Ð¸=EABI32] [Ð°Ð±Ð¸=EABI64] [Ð°Ð±Ð¸=N32] [Ð°Ð±Ð¸=O32] [Ð°Ð±Ð¸=O64] [abiv%ld] [Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜] [d-Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·] [Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°] [Ñ„Ð¸ÐºÑ� Ð´ÑƒÐ±] [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸] [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸] [g-Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·] [â€žABIâ€œ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¾Ð³ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°] [Ð¸Ð¼Ð° Ñ‚Ð°Ñ‡ÐºÑƒ ÑƒÐ»Ð°Ð·Ð°] [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾] [Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð°] [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾] [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾] [Ð¼Ð°Ð¿Ð¸Ñ€Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð¸ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð°] [Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð°=Ð¼Ð¾Ð´ÐµÐ»-Ð³Ñ€ÑƒÐ¿Ðµ] [Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð°=Ð¾Ð±Ð¸Ñ‡Ð½Ð¾] [Ð½Ð¾Ð²Ð¸ â€žABIâ€œ] [Ð°Ð±Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾] [Ð½Ðµ-Ð¿Ð¸Ñ†] [Ð½Ð¸Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ€ÐµÐ¶Ð¸Ð¼] [Ñ�Ñ‚Ð°Ñ€Ð¸ â€žABIâ€œ] [Ð¿Ð¸Ðº] [Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°] [Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð°] [â€žABIâ€œ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¾Ð³ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°] [Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·] [Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ñ€ÐµÑ’ÐµÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°] [Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ðµ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ðµ â€ž _ â€œ] [Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð˜Ð¡Ð�] [Ñ‚Ð°Ð±ÐµÐ»Ð° Ð½ÐµÑ�Ñ€ÐµÑ’ÐµÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°] [v10 Ð¸ v32] [v32] Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGSTâ€œ
- Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°: Ð²Ð±Ð½: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u
+ UNI VEC VECEP WEAK WRT [doubles de 64 bits] [BE8] [â€žFDPIC ABIâ€œ Ð´Ð¾Ð´Ð°Ñ‚Ð°Ðº] [â€žFPAâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°] [LE8] [â€žMaverickâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°] [â€žVFPâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°] [Ð˜Ð·Ð´Ð°ÑšÐµ1 â€žEABIâ€œ] [Ð˜Ð·Ð´Ð°ÑšÐµ2 â€žEABIâ€œ] [Ð˜Ð·Ð´Ð°ÑšÐµ3 â€žEABIâ€œ] [Ð˜Ð·Ð´Ð°ÑšÐµ4 â€žEABIâ€œ] [Ð˜Ð·Ð´Ð°ÑšÐµ5 â€žEABIâ€œ] [XGATE RAM Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜] [Ð°Ð±Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾] [Ð°Ð±Ð¸=64] [Ð°Ð±Ð¸=EABI32] [Ð°Ð±Ð¸=EABI64] [Ð°Ð±Ð¸=N32] [Ð°Ð±Ð¸=O32] [Ð°Ð±Ð¸=O64] [abiv%ld] [d-Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·] [Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°] [Ñ„Ð¸ÐºÑ� Ð´ÑƒÐ±] [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸] [g-Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·] [â€žABIâ€œ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¾Ð³ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°] [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾] [Ð¼Ð°Ð¿Ð¸Ñ€Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð¸ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð°] [Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð°=Ð¼Ð¾Ð´ÐµÐ»-Ð³Ñ€ÑƒÐ¿Ðµ] [Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð°=Ð¾Ð±Ð¸Ñ‡Ð½Ð¾] [Ð½Ð¾Ð²Ð¸ â€žABIâ€œ] [Ð°Ð±Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾] [Ð½Ðµ-Ð¿Ð¸Ñ†] [Ð½Ð¸Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ€ÐµÐ¶Ð¸Ð¼] [Ñ�Ñ‚Ð°Ñ€Ð¸ â€žABIâ€œ] [Ð¿Ð¸Ðº] [Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°] [Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð°] [â€žABIâ€œ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¾Ð³ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°] [Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·] [Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ñ€ÐµÑ’ÐµÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°] [Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ðµ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ðµ â€ž _ â€œ] [Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð˜Ð¡Ð�] [Ñ‚Ð°Ð±ÐµÐ»Ð° Ð½ÐµÑ�Ñ€ÐµÑ’ÐµÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°] [v10 Ð¸ v32] [v32] Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ 8-Ð±Ð¸Ñ‚Ð½Ð¸Ñ… ÐµÐ½Ñ‚Ð¸Ñ‚ÐµÑ‚Ð°:  Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°: Ð²Ð±Ð½: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u
  Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° : Ð²Ð±Ð½: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u (0x%x)
+ Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žGOTPCRELâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° â€ž%sâ€œ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ñ�Ð° â€ž--no-relaxâ€œ
  Ð¿Ð¾Ð¿Ñ€Ð°Ð²ÐºÐ° Ð¸Ð½Ñ„Ð¾ Ñ€Ð²Ð°:  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ : 0x%04x Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: Ð²Ð±Ð½: %u, Ð·Ð°Ð¿Ð¸Ñ�Ð¸: %u
  ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ: 0x%08x, Ð½Ð°Ð·Ð¸Ð²: %.*s
  ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ: 0x%08x, Ð²ÐµÑ€Ð·Ð¸Ñ˜Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð°: 0x%08x, Ð¿Ð¾ÐºÐ»Ð¾Ð¿Ñ™ÐµÐ½Ð¾ ÐºÑ‚Ñ€Ð»: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¸Ð¼Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°: %u
@@ -823,7 +1024,7 @@ Plural-Forms: nplurals=3; plural=(n%10==
  Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ â€ž.addressâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾-Ñ€ÐµÑ‡Ð¸:
  Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾-Ñ€ÐµÑ‡Ð¸:
  Ð¾Ð´ÐµÑ™Ð°Ðº: Ð¾Ñ�Ð½Ð¾Ð²Ð°: 0x%08x%08x Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%08x
- Ð²Ñ€Ñ�Ñ‚Ð°: %3u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %3u (Ð¿Ñ€Ð¸ 0x%08x):  Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð² â€žEOBJâ€œ ÑƒÐ½Ð¾Ñ� Ð²Ñ€Ñ�Ñ‚Ðµ %u
+ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´ÑƒÐ±Ð»ÐµÑ€Ð°:  Ð²Ñ€Ñ�Ñ‚Ð°: %3u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %3u (Ð¿Ñ€Ð¸ 0x%08x):  Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð² â€žEOBJâ€œ ÑƒÐ½Ð¾Ñ� Ð²Ñ€Ñ�Ñ‚Ðµ %u
  Ð²Ð±Ð½: %u, Ð¿Ñ„Ñ†: %u, Ð¿Ð¾Ñ€ÐµÐ´Ð¸_Ñ†Ñ‚Ð»: %u Ð²Ñ€Ñ�Ñ‚Ð°: %u ( vma:			Ð�Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ°	 Ð�Ð´Ñ€ÐµÑ�Ð° ÐºÑ€Ð°Ñ˜Ð°		Ð˜Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸
  vma:		ÐŸÐ¾Ñ‡ÐµÑ‚Ð°Ðº    ÐšÑ€Ð°Ñ˜      EH       EH       ÐšÑ€Ð°Ñ˜ Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ð°  Ð˜Ð·ÑƒÐ·ÐµÑ‚Ð°Ðº
      		Ð�Ð´Ñ€ÐµÑ�Ð°  Ð�Ð´Ñ€ÐµÑ�Ð°  Ð ÑƒÐºÐ¾Ð²Ð°Ð»Ð°Ñ†  ÐŸÐ¾Ð´Ð°Ñ†Ð¸     Ð�Ð´Ñ€ÐµÑ�Ð°    ÐœÐ°Ñ�ÐºÐ°
@@ -831,45 +1032,58 @@ Plural-Forms: nplurals=3; plural=(n%10==
      		Ð�Ð´Ñ€ÐµÑ�Ð°  Ð”ÑƒÐ¶Ð¸Ð½Ð°   Ð”ÑƒÐ¶Ð¸Ð½Ð°   32b Ð¸Ð·Ð²Ñ€  Ð ÑƒÐºÐ¾Ð²Ð»Ð°Ñ†   ÐŸÐ¾Ð´Ð°Ñ†Ð¸
  vma:            Ð�Ð°Ñ˜Ð°Ð²Ð°    Ð’Ñ€ÐµÐ¼Ðµ     Ð�Ð°Ð¿Ñ€ÐµÐ´    Ð”Ð›Ð›       ÐŸÑ€Ð²Ð¸
                  Ð¢Ð°Ð±ÐµÐ»Ð°   ÐžÑ‚Ð¸Ñ�Ð°Ðº  Ð›Ð°Ð½Ð°Ñ†   Ð�Ð°Ð·Ð¸Ð²       ÐŸÐ¾Ñ‚Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼
-#<Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð³Ñ€ÐµÑˆÐºÐµ>%*.s  Ð›Ð¸Ñ�Ñ‚: Ð�Ð´Ñ€ÐµÑ�Ð°: %#08lx, Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %#08lx, ÐšÐ¾Ð´Ð½Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð°: %d
-%*.s ÑƒÐ½Ð¾Ñ�: â€ž%Aâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%Aâ€œ Ñƒ â€ž%Bâ€œ] Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%Aâ€œ Ñƒ â€ž%Bâ€œ] Ð¾Ð´ÐµÑ™Ð°Ðºâ€ž%Aâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº%A:0x%v â€žlrlive .brinfoâ€œ (%u) Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ (%u)
-â€ž%A:0x%vâ€œ Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ
-%B (%s): Ð—Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (0x%x) Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ Ñ�Ñƒ Ð·Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐ°â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ Ñ�Ñƒ Ð·Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð°â€ž%Bâ€ž Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žCRIS v32â€œ ÐºÐ¾Ð´ ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°â€ž%Bâ€ž Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-â€žCRIS-v32â€œ ÐºÐ¾Ð´ ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°â€ž%Bâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚â€ž%Bâ€œ Ð½ÐµÐ¼Ð° Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ â€ž%sâ€œâ€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð³Ñ€ÑƒÐ¿Ðµ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ°â€ž%Bâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð±Ñ€Ð¾Ñ˜ %lu ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žSHT_SYMTAB_SHNDXâ€œâ€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€že_flagsâ€œ 0x%lx%B(%A): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð·Ð¸Ð² Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%B(%A): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ð²Ð»Ð°Ñ�Ð½Ð¸ÑˆÑ‚Ð²Ð°%B(%A): Ð½ÐµÑ�Ð¸Ð³ÑƒÑ€Ð½Ð¾ ÐŸÐ˜Ð” Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð° 0x%08lx (Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñƒ â€ž%sâ€œ)%B(%A): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ð¸Ñ�Ð½ÑƒÑ‚Ð¾ Ð·Ð° Ð¾Ð´ÐµÑ™ÐºÐµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° %d-Ð±Ð°Ñ˜Ñ‚Ð° > 4-Ð±Ð°Ñ˜Ñ‚Ð°.%B(%A): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¸ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°%B(%A): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¸Ð¼ Ð¼Ð°Ð»Ð¸Ð¼ Ð¿Ð¾Ð´Ð°Ñ†Ð¸Ð¼Ð° Ð²Ñ€Ñ�Ñ‚Ðµ â€ž%dâ€œ.%B(%A+0x%%B(%A+0x%lx): Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° â€ž%sâ€œ Ð·Ð° â€žinsn 0x%xâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñƒ Ð½Ðµ-Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð²ÐµÐ·Ð¸%B(%A+0x%lx): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSEC_MERGEâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°%B(%A+0x%lx): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B(%A+0x%lx): â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ%B(%A+0x%lx): â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žÐ½Ðµ-TLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ%B(%A+0x%lx): Ð”Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ðµ Ñ�Ñƒ Ñ�Ð°Ð¼Ð¾ â€žADDâ€œ Ð¸Ð»Ð¸ â€žSUBâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€žALUâ€œ Ð³Ñ€ÑƒÐ¿Ðµ%B(%A+0x%lx): ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð´ÐµÑ™ÐµÑšÐ° 0x%lx Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð³Ñ€ÑƒÐ¿Ðµ â€ž%sâ€œ%B(%A+0x%lx): â€žR_68K_TLS_LE32â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°%B(%A+0x%lx): â€žR_ARM_TLS_LE32â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°%B(%A+0x%lx): â€žR_METAG_TLS_LE/IENONPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°%B(%A+0x%lx): â€žR_NIOS2_TLS_LE16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°%B(%A+0x%lx): Ð£Ð½Ð¾Ñ� Ð¾ÐºÑ€ÑšÐ°ÐºÐ° Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð½Ð¸Ñ�ÐºÐµ.%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° ÑƒÐ½ÐµÑ�ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-ffunction-sectionsâ€œ%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ Ð·Ð° â€žXTENSA_ASM_SIMPLIFYâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ; Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ; Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾%B(%A+0x%lx): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ð·Ð° Ð¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ%B(%A+0x%lx): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d%B(%A+0x%lx): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°=0x%x)%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° Ð·Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ%B(%A+0x%lx): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B(%A+0x%lx): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žARMâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ñƒ â€žTLSâ€œ Ñ‚Ñ€Ð°Ð¼Ð±ÑƒÐ»Ð¸Ð½Ð¸%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žARMâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ð½Ð° ÐºÐ¾Ñ˜Ñƒ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žTLS_GOTDESCâ€œ%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žThumbâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ñƒ â€žTLSâ€œ Ñ‚Ñ€Ð°Ð¼Ð±ÑƒÐ»Ð¸Ð½Ð¸%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žThumbâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ð½Ð° ÐºÐ¾Ñ˜Ñƒ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žTLS_GOTDESCâ€œ%B(%A+0x%v): Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-ÐºÐ¾Ð´Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%B(%A)â€œ, Ð°Ð½Ð°Ð»Ð¸Ð·Ð° Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ñ‚Ð¿ÑƒÐ½Ð°
-%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.
-  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žARMâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð½Ð° â€žThumbâ€œ%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.
-  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žThumbâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð½Ð° â€žARMâ€œ%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.
-  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žarmâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° â€žthumbâ€œ%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.
-  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žthumbâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° â€žarmâ€œ
-  Ñ€Ð°Ð·Ð¼Ð¾Ñ‚Ñ€Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ â€ž--support-old-codeâ€œ%B(%s+0x%lx): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ:
-  Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ñ‚Ð¸Ð¿Ð¸Ñ‡Ð½Ð¾ Ð¼ÐµÑˆÐ°ÑšÐµ Ð¾Ð¿Ñ†Ð¸Ñ˜Ð°, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ:
-  Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ðµ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ:
-  v10/v32 Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ â€ž%sâ€œ Ð½Ðµ Ñ�Ð¼Ðµ Ð´Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð�ÐµÐ¼Ð° â€žPLTâ€œ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð�ÐµÐ¼Ð° Ð½Ð¸ â€žPLTâ€œ Ð½Ð¸ â€žGOTâ€œ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ ÑƒÐ¿ÑƒÑ‚Ñƒ ÐºÐ° â€ž%sâ€œ, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: â€ž%sâ€œâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ, ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð¸Ð·Ð²Ð°Ð½ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð±ÐµÐ· Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð³ â€žGOTâ€œâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ %d Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ %d Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œâ€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ, ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ:
-  Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ðµ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ%B: â€ž!samegpâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð±ÐµÐ· â€ž.prologueâ€œ-Ð°: %s%B: %A+0x%lx: Ð�ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�ÐºÐ¾Ðº Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ð˜Ð¡Ð� Ñ€ÐµÐ¶Ð¸Ð¼Ð°; Ñ€Ð°Ð·Ð¼Ð¾Ñ‚Ñ€Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ Ð¼ÐµÑ’ÑƒÐ¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµÐ¼.%B: %s
-%B: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸%B: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %d%B: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %u (Ð½Ð°Ñ˜Ð². %d)%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸%B: Ð¿Ð¾Ð´-Ð¿Ð¾Ð´ÐµÐ¾Ðº â€ž.gotâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ 64K (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ %d)%B: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ñ€ÐµÐ³ÑƒÐ»Ð°Ñ€Ð°Ð½ Ð½Ð¸Ð· ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð°%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.preinit_arrayâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ñƒ â€žDSOâ€œ-Ñƒ%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: â€žR_SH_PSHAâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%dâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ -32..32%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: â€žR_SH_PSHLâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%dâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ -32..32%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ 0x%lx%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ñ†Ð¸Ñ™ Ð³Ñ€Ð°Ð½Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_SH_USESâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ â€žinsnâ€œ 0x%x%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€žR_SH_USESâ€œ%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ â€žR_SH_USESâ€œ%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žCOUNTâ€œ%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ˜Ðµ Ñƒ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ%B: â€ž@gprelâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: â€ž@internalâ€œ Ð³Ñ€Ð°Ð½Ð° ÐºÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ%B: â€ž@pcrelâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: Ð�Ð‘Ð˜ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ%B: Ð�Ð‘Ð˜ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°%B: Ð�Ð‘Ð˜ Ð¸Ð·Ð´Ð°ÑšÐµ %ld Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° Ð�Ð‘Ð˜-Ñ˜ÐµÐ¼ Ð¸Ð·Ð´Ð°ÑšÐ° %ld%B: Ð�Ð¡Ð• Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°%B: ÐŸÐ¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%B: Ð�Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%B: â€žBE8â€œ Ñ�Ð»Ð¸ÐºÐµ Ñ�Ñƒ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ðµ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸.%B: Ð£Ð²ÐµÐ·ÐµÐ½ Ñ˜Ðµ Ð»Ð¾Ñˆ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d%B: â€žCALL15â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x%lx Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°%B: â€žCALL16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x%lx Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÑƒÐ¿Ð¾Ñ€ÐµÑ’ÑƒÑ˜ÑƒÑ›Ðµ â€žLO16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼ â€žbrâ€œ (%s) Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¾Ð¼ 0x%lx (> 0x1000000).%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼ â€žbrâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ. ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€žbrlâ€œ Ð¸Ð»Ð¸ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ñƒ.%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ñ�Ð°Ð¶ÐµÑ‚Ð¸Ð¼ Ð±Ð¸Ð½Ð°Ñ€Ð½Ð¸Ð¼ Ð�Ð»Ñ„Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°.
-   ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð¸Ð¾Ñ†Ð°, Ð¸Ð»Ð¸ â€žobjZâ€œ, Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð½ÐµÑ�Ð°Ð¶ÐµÑ‚Ðµ Ð±Ð¸Ð½Ð°Ñ€Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ.%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ â€ž%sâ€œ Ð¸ â€ž%sâ€œ.%B: ÐžÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ: 0x%lx%B: Ð�Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´Ð°Ð¼ Ð¿Ñ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ%B: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼%B: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žGOTâ€œ: Ð‘Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð° 8- Ð¸Ð»Ð¸ 16-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ÐµÐ¼ > %d%B: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žGOTâ€œ: Ð‘Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð° 8-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ÐµÐ¼ > %d%B: â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x%lx Ð½Ð¸Ñ˜Ðµ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ñƒ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸Ð¼%B: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° Ð£Ð’Ð•Ð—Ð˜ ÐšÐ�Ðž Ð·Ð° â€ž%sâ€œ Ð·Ð°Ñ�ÐµÑšÑƒÑ˜Ðµ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ Ð£Ð’Ð•Ð—Ð˜ ÐšÐ�Ðž%B: Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° â€žISRâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°: Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð° %u Ð±Ð°Ñ˜Ñ‚Ð°; Ñ‚ÐµÐºÑƒÑ›Ð° %u Ð±Ð°Ñ˜Ñ‚Ð°%B: Ð¡ÐºÑƒÐ¿ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%B: Ð£Ð²ÐµÐ·ÐµÐ½Ð° Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d%B: ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%B: Ð£Ð³Ð½ÐµÐ¶Ñ’ÐµÐ½Ð¾ â€žOMIT_FPâ€œ Ñƒ â€ž%Aâ€œ.%B: Ð�ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¸Ð·Ð´Ð°ÑšÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð·Ð° Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ%B: Ð�ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð·Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÑ‚Ðµ Ñ�Ð° â€ž-Nâ€œ%B: Ð¡Ð°Ð¼Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¸ â€ž%%g[2367]â€œ Ð¼Ð¾Ð³Ñƒ Ð±Ð¸Ñ‚Ð¸ Ð´ÐµÐºÐ»Ð°Ñ€Ð¸Ñ�Ð°Ð½Ð¸ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žSTT_REGISTERâ€œ%B: ÐŸÐ¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°%B: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ (%d) Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾.
-%B: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð¿ÑˆÑ‚ÐµÐ¼ â€žELFâ€œ-Ñƒ (EM: %d)%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ðµ Ð¾Ð´Ð½Ð¾Ñ�Ð¸ Ð½Ð° â€žSBâ€œ Ð°Ð»Ð¸ â€ž__c6xabi_DSBT_BASEâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾%B: Ð¢Ð›Ð¡ Ð¼ÐµÑ�Ð½Ð¸ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸ ÐºÐ¾Ð´ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°%B: Ð¢Ð›Ð¡ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð½Ð¸Ñ�Ñƒ Ñ�ÑƒÑ�ÐµÐ´Ð½Ð¸:%B: Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ¾ â€žTLSâ€œ Ð¿Ñ€ÐµÐ»Ð°Ð· Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð¿Ñ€Ð¸ 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ%B: ÐŸÑ€Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ â€žPT_DYNAMICâ€œ Ð½Ð¸Ñ˜Ðµ â€ž.dynamicâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº%B: ÐœÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%A)%B: ÐŸÑ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %d (>= %d)%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð¸Ð¼Ð°Ñ˜Ñƒ Ð²Ð¸ÑˆÐµ Ð¾Ð´ Ñ˜ÐµÐ´Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ñ�Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ%B: Ð�ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x%B: ÐžÐ±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ
-%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€ža.out.adobeâ€œ: %x
-%B: Ð�ÐµÐ¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ â€žOMIT_FPâ€œ Ñƒ â€ž%Aâ€œ.%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž.directiveâ€œ: %s%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð½Ð°Ð·Ð¸Ð² Ð²Ñ€Ñ�Ñ‚Ðµ ÑƒÐ²Ð¾Ð·Ð°; %x%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° ÐºÐ»Ð°Ñ�Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° â€ž%dâ€œ Ð·Ð° â€ž%sâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð—Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€žIMAGE_SCN_MEM_NOT_PAGEDâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žThumb BLXâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ†Ð¸Ñ™Ð° Ð½Ð° â€žthumbâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ.%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð¿Ñ†Ð¸Ñ˜Ðµ â€ž%sâ€œ %u Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð°%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð´Ñ€ÐµÐ´Ð¸Ð¼ Ñ†Ð¸Ñ™Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žPLTâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ñƒ â€žthumbâ€œ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%B: â€žXMC_TC0â€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %d%B: â€ž%Aâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %ld Ð¸Ð· â€ž%Aâ€œ Ð¸Ð·Ð° Ð¾Ð¿Ñ�ÐµÐ³Ð° â€žADDIUPCâ€œ%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ â€žFDPICâ€œ-Ñƒ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€žFDPICâ€œ%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸%B: â€ž%sâ€œ Ð¸Ð¼Ð° Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ñ€ÐµÐ´Ð¾Ð²Ð° Ð°Ð»Ð¸ Ð½Ðµ Ð¸ Ð·Ð°Ñ‚Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº%B: â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð°%B: â€žld -râ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð° â€žPE MIPSâ€œ
-%B: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº -0x%x Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%B: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº 0x%x Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%B: Ð»Ð¾Ñˆ â€žXTY_ERâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ: ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð±Ñ€Ð¾Ñ˜ %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %d%B: Ð»Ð¾ÑˆÐµ â€žpair/refloâ€œ Ð½Ð°ÐºÐ¾Ð½ â€žrefhiâ€œ
-%B: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ%B: Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° (0x%lx >= 0x%lx) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ%B: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ%B: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ð·Ð° %lu%B: Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %d%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ%B: Ð¸Ð·Ð¼ÐµÐ½Ð° Ñƒ â€žgpâ€œ-Ñƒ: BRSGP %s%B: ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð¼Ð¾Ñ›Ð½Ð¸Ñ… ÑƒÐ½Ð¾Ñ�Ð°%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð¼Ð°Ð»Ð° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð²ÐµÐ»Ð¸ÐºÐ° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž-mrelocatableâ€œ%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž-mrelocatableâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð·Ð° ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ
-%B: Ñ†-Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð·Ð°Ñ‚Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›ÐµÐ¼ Ð¾Ð´ÐµÑ™ÐºÑƒ%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½, Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]%B: â€ždtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡Ð¸ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð¸Ð·Ð²Ð¾Ð·Ð° â€ž%sâ€œ%B: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
-%B: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ
-%B: ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ð‘Ð˜ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°.%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð´ÐµÑ�Ð¸Ð¼ â€ž_ITB_BASE_â€œ%B: Ð³Ñ€ÐµÑˆÐºÐ°: ÐžÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½ Ð½ÐµÐ±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ñ˜ Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñ˜Ð¸%B: Ð³Ñ€ÐµÑˆÐºÐ°: ÐžÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¡ÐºÑƒÐ¿ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°.%B: Ð³Ñ€ÐµÑˆÐºÐ°: â€žVFP11â€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð½Ð° %08x Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%pâ€œ
-%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ.%B: ÐºÐ»Ð°Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° â€ž%sâ€œ%B: â€žgpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: Ð½Ð° Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%Bâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ%B: Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½%B: Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ
-%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %d Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ 0x%lx%B: Ð½ÐµÐ´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ: %d%B: Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ. Ð˜Ð·Ð»Ð°Ð· Ñ˜Ðµ 0x%x, Ð° ÑƒÐ»Ð°Ð· 0x%x%B: Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÐºÐ° â€ž%sâ€œ Ñ˜Ðµ Ð¿ÐµÑ‚Ñ™Ð°%B: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ%B: Ð½Ð° ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%Bâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ%B: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ� â€žSHT_GROUPâ€œ%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ·Ð° â€ž%luâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ (Ð¸Ð½Ð´ÐµÐºÑ� â€ž%uâ€œ)%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ â€ž%u >= %luâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%B: Ñ�ÐºÐ¾Ðº Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð´Ð°Ð»ÐµÐºÐ¾
-%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ 32-Ð±Ð¸Ñ‚Ð½Ð¸ ÐºÐ¾Ð´ Ñ�Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ ÐºÐ¾Ð´Ð¾Ð¼%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ 64-Ð±Ð¸Ñ‚Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ð° 32-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ ÐºÐ¾Ð´ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ â€žUltraSPARCâ€œ-Ñƒ Ñ�Ð° ÐºÐ¾Ð´Ð¾Ð¼ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð¸Ð¼ â€žHALâ€œ-Ñƒ%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€žÐ°ÑƒÑ‚Ð¾-Ð¿Ð¸Ðºâ€œ-Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° â€žÐ½Ðµ-Ð°ÑƒÑ‚Ð¾-Ð¿Ð¸Ðºâ€œ-Ð°%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€žÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ð³-Ð³Ð¿â€œ-Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° â€žÐ½Ðµ-ÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ð³-Ð³Ð¿â€œ-Ð°%B: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 16 Ð±Ð¸Ñ‚Ð° (-mshort) Ð° Ð´Ñ€ÑƒÐ³Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 32 Ð±Ð¸Ñ‚Ð°%B: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 32 Ð±Ð¸Ñ‚Ð° (-fshort-double) Ð° Ð´Ñ€ÑƒÐ³Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 64 Ð±Ð¸Ñ‚Ð°%B: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° â€žHCS12â€œ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸Ð¼ Ð·Ð° â€žHC12â€œ%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð½Ðµ-Ð¿Ð¸Ðº ÐºÐ¾Ð´ Ñƒ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð¼ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð½Ð¾Ð¼ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ…Ð²Ð°Ñ‚-Ð½Ð°-Ð�Ð˜Ð¨Ð¢Ð�Ð’Ð�ÐžÐˆ-Ð´ÐµÑ€ÐµÑ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ�Ð° Ð½Ðµ-Ð·Ð°Ñ…Ð²Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ â€ž%Aâ€œ%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ%B: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%Bâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ%B: Ð»Ð¾ÑˆÐµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ â€žXTY_LDâ€œ â€ž%sâ€œ%B: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¢Ð›Ð¡ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ.%B: Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ%B: Ð½Ðµ-Ð¿Ð¸Ðº ÐºÐ¾Ð´ Ñ�Ð° â€žimmâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¼ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (0x%lx) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ ÐºÐ°Ð´Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½ÐµÐ¼Ð° Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°%B: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð»Ð°Ð±Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð±ÐµÐ· â€ž-fPICâ€œ?%B: Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s:%dâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ†-Ð¾Ð´ÐµÑ™ÐºÑƒ%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›ÐµÐ³ Ð¸Ð½Ð´ÐµÐºÑ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %ld%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%s%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð¸Ð¼Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº: %d%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ%B: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ x32%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ â€ž%sâ€œ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%s%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOTOFFâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOTOFFâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_X86_64_GOTOFF64â€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° â€ž%A+0x%xâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼%B: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ, Ð°Ð»Ð¸ Ð½ÐµÐ¼Ð° Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%A lma %#lxâ€œ Ñ˜Ðµ Ð´Ð¾Ñ‚ÐµÑ€Ð°Ð½ Ð½Ð° %#lx%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐ¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ %ld%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð´ÐµÐ»Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ %d%B: â€žsh_link [%d]â€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾%B: â€žsh_linkâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ ÑƒÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¾Ð´ â€ž%Bâ€œ%B: â€žsh_linkâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ ÑƒÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° ÑƒÐºÐ»Ð¾ÑšÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¾Ð´ â€ž%Bâ€œ%B: Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñ˜Ðµ Ð½ÑƒÐ»Ð° Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°%B: Ñ€Ð°Ð·Ð¼Ð°Ñ‚Ñ€Ð°Ð¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÑƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ð¸ â€ž%sâ€œ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð°%B: Ð½Ð¸Ñ�ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð° Ð½ÑƒÐ»Ð¾Ð¼ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ Ð˜Ð›Ð¤ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°.%B: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€Ñ�Ñ‚Ñƒ Ñ†Ñ�ÐµÐºÑ‚Ð¾Ñ€Ð° â€ž%dâ€œ%B: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ ÐºÐ»Ð°Ñ�Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%dâ€œ%B: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�ÑƒÑ‚Ð°Ð½%B: ÑƒÐ·Ð¸Ð¼Ð°ÑšÐµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ðµ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ%B: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)%B: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d)%B: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %u%B: â€žtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[12] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$5â€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$2â€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$4â€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[9] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž__tls_usedâ€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[PE_IMPORT_ADDRESS_TABLE (12)] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$6â€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[PE_IMPORT_ADDRESS_TABLE(12)] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$6â€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žARMâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žTHUMBâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€žVFP11â€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ â€ž%sâ€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ�Ð°Ð¶Ð¸Ð¼Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¸Ð²Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%B: Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° ÑƒÐ¿ÑƒÑ‚Ð° ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ%B: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž.opdâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ%B: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð° â€žR_PPC64_TOCSAVEâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð�Ð¢Ð� Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œ Ñƒ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð¼ Ð´ÐµÐ»Ñƒ%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°ÑšÐµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%uâ€œ Ñƒ â€ž.opdâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð½Ð°ÐºÐ¾Ð½ Ð�Ð¢Ð�-Ð°%B: Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ%B: Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ â€ž%sâ€œ
-%B: Ð½ÐµÐ¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¸ Ð�Ð¢Ð˜ Ð·Ð°Ð¿Ð¸Ñ� â€ž%uâ€œ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%uâ€œ%B: [%d] Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ð³Ñ€ÑƒÐ¿Ð¸ [%s]%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° 0x%lx%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð°/Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (0x%x) Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%iâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%iâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°
-%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %s Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°%B: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: â€žALPHA_R_GRELHIGHâ€œ%B: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: â€žALPHA_R_GRELLOWâ€œ%B: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ â€ž_â€œ, Ð°Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸Ð¼Ð° Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð°%B: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (0x%lx) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (0x%lx)%B: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð°, Ð°Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸Ð¼Ð° Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ â€ž_â€œ%B: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñ‡Ð²Ð¾Ñ€ Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žCOMDATâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð° Ñ�Ð° Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¿Ð¾Ð´ÐµÐ¾Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸, Ð´Ð° Ð»Ð¸ Ñ˜Ðµ Ñ‚Ð¾ Ð½Ð°Ð¼ÐµÑ€Ð°Ð²Ð°Ð½Ð¾ ?
-%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐšÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°.%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐµÐ»Ñ„ Ð¸Ð·Ð´Ð°ÑšÐ° %s Ð¸ %s Ð½Ð¸Ñ�Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð°.%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð�Ð°Ð¸ÑˆÐ°Ð¾ Ñ�Ð°Ð¼ Ð½Ð° Ñ�Ñ‚Ð°Ñ€Ð¸Ñ˜Ðµ Ð¸Ð·Ð´Ð°ÑšÐµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°, Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° Ñ‚ÐµÐºÑƒÑ›Ð¸Ð¼ Ð»Ð°Ð½Ñ†ÐµÐ¼ Ð°Ð»Ð°Ñ‚Ð°.%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº Ð¾ Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ€ÐµÐ´Ð° Ð·Ð° â€ž%sâ€œ%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð¸Ð¼Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ð° Ð½Ðµ-â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð½Ðµ-Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð°%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žSDA_BASEâ€œ.%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ð¾ Ñ€ÐµÑˆÐµÑšÐµ â€žVFP11â€œ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ñ†Ð¸Ñ™Ð½Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žsh_linkâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÑƒÐ½Ð¾Ñ�Ñƒ â€žGOTâ€œ.%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚â€ž%B:%A%sâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°
-%B:%A: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð ÐµÐ´ Ð¥ÐµÑ‚Ð° %B:%d: Ð›Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ Ð¡-Ð·Ð°Ð¿Ð¸Ñ�Ð°
-%B:%d: Ð�ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ Ð¡-Ð·Ð°Ð¿Ð¸Ñ�Ð°
-%B:%d: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%B:%u: Ð»Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… %u, Ð½Ð°Ñ’Ð¾Ñ… %u)%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%B:%u: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žihexâ€œ Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%C: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
+#<Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð³Ñ€ÐµÑˆÐºÐµ>%%X%%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ ÐºÐ¾Ñ˜Ð° Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ð²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð¿Ð¾Ñ™Ð° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ
+%%X%%P: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ
+%03x%*.s  Ð›Ð¸Ñ�Ñ‚: Ð�Ð´Ñ€ÐµÑ�Ð°: %#08lx, Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %#08lx, ÐšÐ¾Ð´Ð½Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð°: %d
+â€ž%03x %*.sâ€œ ÑƒÐ½Ð¾Ñ�: %F%P: %pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ˜Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½-Ð½Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° â€ž--gc-sectionsâ€œ
+%F%P: %pB(%s): Ð³Ñ€ÐµÑˆÐºÐ° Ð¾Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¾Ð³ Ñ‡Ð»Ð°Ð½Ð° Ð°Ñ€Ñ…Ð¸Ð²Ðµ: %E
+%F%P: %pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¼Ð½Ð¾ÑˆÐºÐ° Ð·Ð° Ð½ÐµÑƒÐ¼Ð½Ð¾Ð¶Ð¸Ð²Ð¸ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ
+%F%P: %pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¼Ð½Ð¾ÑˆÐºÐ° Ð·Ð° Ð½ÐµÑƒÐ¼Ð½Ð¾Ð¶Ð¸Ð²Ð¸ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ
+%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ 32-Ð±Ð¸Ñ‚Ð½Ñƒ â€žDT_RELRâ€œ Ð±Ð¸Ñ‚Ð¼Ð°Ð¿Ñƒ
+%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ 64-Ð±Ð¸Ñ‚Ð½Ñƒ â€žDT_RELRâ€œ Ð±Ð¸Ñ‚Ð¼Ð°Ð¿Ñƒ
+%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ñ�Ð°Ð¶ÐµÑ‚Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°
+%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ
+%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð·Ð°Ð¿Ð¸Ñ� Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°
+%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð²Ñ€ÑˆÐ¸Ð¼ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°
+%F%P: %pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ñ˜Ðµ Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½
+%F%P: %pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð°Ð¶ÐµÑ‚Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð¾: Ð½Ð¾Ð²Ð° (%lu) != Ñ�Ñ‚Ð°Ñ€Ð° (%lu)
+%F%P: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ â€ž%pAâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð±ÐµÐ· â€ž--enable-non-contiguous-regionsâ€œ.
+%F%P: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ â€ž%pAâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð±ÐµÐ· â€ž--enable-non-contiguous-regionsâ€œ.
 %F%P: Ð²ÐµÑ›_Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð°_Ñ‚Ð°Ð±ÐµÐ»Ð°: %E
-%F%P: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ð° Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ÑˆÑ›Ñƒ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ â€ž%Bâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ; Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-fPIEâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-pieâ€œ
+%F%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñ�Ð°Ð¼Ð¾Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°: %E
+%F%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐµ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Eâ€œ
+%F%P: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ ÑƒÐ½Ð¾Ñ�: %pB
+%F%P: Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð°: â€ž%pAâ€œ
+%F%P: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ð° Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ÑˆÑ›Ñƒ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ â€ž%pBâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ; Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-fPIEâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-pieâ€œ
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð“Ð�Ð£ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð°
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žGOT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žGOT PLTâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žGOTâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žIBTâ€œ-Ð¾Ð¼ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½ â€žPLTâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žPLT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ PLT â€ž.sframeâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žVxWorksâ€œ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐµ Ð¾Ð´ÐµÑ™ÐºÐµ
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žifuncâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð´Ñ€ÑƒÐ³Ð¸ PLT â€ž.sframeâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð´Ñ€ÑƒÐ³Ð¸ â€žPLT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°
+%F%pA: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº
+%F%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žPCâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ñƒ â€žGOT PLTâ€œ ÑƒÐ½Ð¾Ñ�Ñƒ Ð·Ð° â€ž%sâ€œ
+%F%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žPCâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ñƒ â€žPLTâ€œ ÑƒÐ½Ð¾Ñ�Ñƒ Ð·Ð° â€ž%sâ€œ
+%F%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ€Ð°Ð·Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð³Ñ€Ð°Ð½Ðµ Ñƒ â€žPLTâ€œ ÑƒÐ½Ð¾Ñ�Ñƒ Ð·Ð° â€ž%sâ€œ
 â€ž%Hâ€œ â€ž__tls_get_addrâ€œ Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ð¸Ð¾ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚, Ð¢Ð›Ð¡ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½Ð°
-Ð�Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ â€ž%Hâ€œ Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ð¸Ð¾ â€ž__tls_get_addrâ€œ, Ð¢Ð›Ð¡ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½Ð°
-%H: â€žR_FRV_FUNCDESCâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼
-%H: â€žR_FRV_FUNCDESC_VALUEâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼
+Ð�Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ â€ž%Hâ€œ Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ð¸Ð¾ â€ž__tls_get_addrâ€œ, â€žTLSâ€œ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½Ð°
+%H: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾
+%H: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d
+%H: â€ž%sâ€œ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%pTâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾
+%H: â€ž%sâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°
+%H: â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼
+%H: â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð¾Ð¼ Ð¾Ð´Ñ�Ñ‚Ñ€Ð°ÑšÐµÐ½Ð¸ ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°
+%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d
+%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¾Ð²Ð´Ðµ
+%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð¸ â€žPIEâ€œ-Ð¸Ð¼Ð°
+%H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%pTâ€œ
+%H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° Ð½Ðµ-â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%pTâ€œ
 %H: â€žR_FRV_GETTLSOFFâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ Ð¿Ð¾Ð·Ð¸Ð²Ð°
 %H: â€žR_FRV_GETTLSOFF_RELAXâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žcalllâ€œ
 %H: â€žR_FRV_GOTTLSDESC12â€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žlddiâ€œ
@@ -881,102 +1095,123 @@ Plural-Forms: nplurals=3; plural=(n%10==
 %H: â€žR_FRV_TLSDESC_RELAXâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žlddâ€œ
 %H: â€žR_FRV_TLSMOFFHIâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žsethiâ€œ
 %H: â€žR_FRV_TLSOFF_RELAXâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žldâ€œ
+%H: Ð¿Ð¾Ð·Ð¸Ð²Ñƒ Ð·Ð° â€ž%pTâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€žnopâ€œ, Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð²Ñ€Ð°Ñ‚Ð¸Ð¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°; (plt call stub)
+%H: Ð¿Ð¾Ð·Ð¸Ð²Ñƒ Ð·Ð° â€ž%pTâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€žnopâ€œ, Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð²Ñ€Ð°Ñ‚Ð¸Ð¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°; (toc save/adjust stub)
 %H: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ
 %H: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ
+%H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ
+%H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ
+%H: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žfixupâ€œ Ð³Ñ€Ð°Ð½Ðµ
+%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð·Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ
+%H: Ð½Ðµ Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ð½Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ
 %H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
 %H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: %s
+%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾
+%H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð´Ð°Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%xâ€œ
 %H: â€žÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñƒ
 %H: â€žÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%s+%vâ€œ Ñ˜Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð¿Ñ€Ð¾ÑƒÐ·Ñ€Ð¾ÐºÐ¾Ð²Ð°Ð»Ð¾ Ð³Ð¾Ñ€ÑšÑƒ Ð³Ñ€ÐµÑˆÐºÑƒ
+%H: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%uâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°
+%H: â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ
+%H: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ
+%H: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%#xâ€œ.
+%H: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
 %P%F: â€ž--relaxâ€œ Ð¸ â€ž-râ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾
-%P%F: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žex9.it %sâ€œ Ñ…ÐµÑˆ Ñ‚Ð°Ð±ÐµÐ»Ñƒ: %E
 %P%X: Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ‡Ð¸Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ: %E
-%P%X: Ð¾Ð´ÐµÑ™Ð°Ðº Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð¸Ð¼Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°.
-%P: %B: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%Tâ€œ
-%P: %B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ
-%P: %B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ˜Ð¾Ñˆ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ
-%P: %B: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)
-%P: %B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°
-%P: %B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð·Ð° â€ž%Tâ€œ
-%P: %B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ
-%P: %B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ.
-%P: %B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ.
-%P: %H: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%Tâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d
-%P: %H: â€ž%sâ€œ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%Tâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾
-%P: %H: â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð¾Ð¼ Ð¾Ð´Ñ�Ñ‚Ñ€Ð°ÑšÐµÐ½Ð¸ ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°
-%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d
-%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°
-%P: %H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° Ð¢Ð›Ð¡ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%Tâ€œ
-%P: %H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° Ð½Ðµ-Ð¢Ð›Ð¡ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%Tâ€œ
-%P: %H: Ð¿Ð¾Ð·Ð¸Ð² â€ž@localâ€œ Ð·Ð° i-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ
-%P: %H: Ð¿Ð¾Ð·Ð¸Ð²Ñƒ Ð·Ð° â€ž%Tâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€žnopâ€œ, Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð²Ñ€Ð°Ñ‚Ð¸Ð¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ
-%P: %H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ
-%P: %H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ
-%P: %H: Ð½Ðµ Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ð½Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ
-%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾
-%P: %H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð·Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ.
-%P: %H: â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%Tâ€œ
-%P: %H: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ
-%P: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñƒ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ñƒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼ â€ž%sâ€œ
-%P: â€ž%sâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº Ð·Ð° â€ž.eh_frame sdata4â€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ%P: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½ Ñƒ Ð�Ð‘Ð˜-Ñ˜Ñƒ Ð¸Ð·Ð´Ð°ÑšÐµ %d
-%P: â€žDW_EH_PE_datarelâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð²Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ.
-%P: Ð½Ð°Ñ’Ð¾Ñ… Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð¸ â€žELFâ€œ Ð¼Ð°ÑˆÐ¸Ð½Ñ�ÐºÐ¸ ÐºÐ¾Ð´ (%d) Ñƒ â€ž%Bâ€œ, Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… â€ž%dâ€œ
-%P: â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ�Ð°ÑšÐµÐ¼
-%P: â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð·Ð±Ð¾Ð³ â€ž%Bâ€œ
-%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ
-%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ
-%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð·Ð° â€ž%Tâ€œ
-%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ð²Ð°ÑšÐ° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%Tâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð»ÐµÑšÐ¾ â€žpltâ€œ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ; Ð¸Ð·Ð±ÐµÐ³Ð°Ð²Ð°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ â€žLD_BIND_NOW=1â€œ Ð¸Ð»Ð¸ Ð½Ð°Ð´Ð¾Ð³Ñ€Ð°Ð´Ð¸Ñ‚Ðµ Ð³Ñ†Ñ†
-%P: Ð³Ñ€ÐµÑˆÐºÐ° Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð·Ð° â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ
-%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€ž%B(%A)â€œ; Ð½ÐµÑ›Ðµ Ð±Ð¸Ñ‚Ð¸ Ð½Ð°Ð¿Ñ€Ð°Ð²Ñ™ÐµÐ½Ð° Ð½Ð¸Ñ˜ÐµÐ´Ð½Ð° â€ž.eh_frame_hdrâ€œ Ñ‚Ð°Ð±ÐµÐ»Ð°.
-%P: Ñ„Ð´Ðµ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ Ñƒ â€ž%B(%A)â€œ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ â€ž.eh_frame_hdrâ€œ Ñ‚Ð°Ð±ÐµÐ»Ðµ.
-%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%Tâ€œ
-%P: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ð´ÑƒÐ³Ð¾Ð³ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ
-%P: Ñ‚Ð°Ñ‡ÐºÐµ Ð²Ð¸ÑˆÐµ ÑƒÐ½Ð¾Ñ�Ð°: Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ
+%P%X: Ð¾Ð´ÐµÑ™Ð°Ðº Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð¸Ð¼Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°
+%P: %H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ñ�Ð° Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼ â€ž%xâ€œ
+%P: %pB: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° â€ž%pTâ€œ
+%P: %pB: Ð½Ð°Ð¿Ð¾Ð¼ÐµÐ½Ð°: Ð¿Ð¾Ñ€ÑƒÐºÐ° Ð¸Ð·Ð½Ð°Ð´ Ð½Ðµ ÑƒÐ·Ð¸Ð¼Ð° Ð·Ð±Ð¸Ñ€ÐºÑƒ Ñ’ÑƒÐ±Ñ€Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð½Ð°Ð»Ð¾Ð³
+%P: %pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž%sâ€œ
+%P: %pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ
+%P: %pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ
+%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð·Ð° â€ž%pTâ€œ
+%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ð²Ð°ÑšÐ° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð»ÐµÑšÐ¾ â€žpltâ€œ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ; Ð¸Ð·Ð±ÐµÐ³Ð°Ð²Ð°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ â€žLD_BIND_NOW=1â€œ Ð¸Ð»Ð¸ Ð½Ð°Ð´Ð¾Ð³Ñ€Ð°Ð´Ð¸Ñ‚Ðµ Ð³Ñ†Ñ†
+%P: ÑƒÐ¼Ð½Ð¾Ð¶Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ð³ â€ž%pTâ€œ Ñ˜Ðµ Ð¾Ð¿Ð°Ñ�Ð½Ð¾
+%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ
+%P: Ñ‚Ð°Ñ‡ÐºÐµ Ð²Ð¸ÑˆÐµ ÑƒÐ½Ð¾Ñ�Ð°: Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ
 %P: Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð²ÐµÐ·Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°
-%P: Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜Ñƒ Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ñ‚Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸
-%P: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ â€žst_otherâ€œ Ð·Ð° Ð�Ð‘Ð˜ Ð¸Ð·Ð´Ð°ÑšÐµ 1
-%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ.
-%X%C: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
-%X%P: %B(%A): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%Râ€œ Ð¸Ð´Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°
-%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ñƒ Ñ€ÐµÐ´Ñƒ Ð¾Ñ�Ñ‚Ð°Ð²Ðµ.
-%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ñ€ÐµÐ´Ð° Ð¾Ñ�Ñ‚Ð°Ð²Ðµ.
-%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ€ÐµÐ´Ñƒ Ð¾Ñ�Ñ‚Ð°Ð²Ðµ.
-%X%P: Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ð¸ â€ž%Aâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÑƒ Ð½Ð° Ð¸Ñ�Ñ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸.
-%Xâ€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿ÑƒÑ‚Ð½Ð¾ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ð¾Ð´ â€ž%Bâ€œ: Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñ˜Ðµ Ñƒ Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ð¾Ð´ â€ž%Bâ€œ
-â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð½Ð° ÑƒÐºÐ»Ð¾ÑšÐµÐ½Ð¾Ð¼ ÑƒÐ½Ð¾Ñ�Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¾
+%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° â€žDT_TEXTRELâ€œ Ð¼Ð¾Ð³Ñƒ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž%sâ€œ
+%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ â€žPDEâ€œ
+%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ â€žPIEâ€œ
+%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ
+%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð¸ Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ð¼Ð¾Ð³Ñƒ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°
+%X%H: %s Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÑƒÑ˜Ðµ Ð²Ð°Ð½ Ð¾Ð´ÐµÑ™ÐºÐ°
+%X%H: %s Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ°: Ð°Ð´Ñ€ÐµÑ�Ð° Ð¼ÐµÑ‚Ðµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð°
+%X%H: %s Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %d
+%X%H: Ð¿Ð¾Ð·Ð¸Ð² â€ž@localâ€œ Ð·Ð° i-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ
+%X%H: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð³Ñ€Ð°Ð½Ðµ Ð¸Ð·Ð¼ÐµÑ’Ñƒ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ñƒ â€žJALXâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°
+%X%H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ
+%X%H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
+%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žJALXâ€œ Ñƒ Ð¸Ñ�Ñ‚Ð¾Ð¼ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ
+%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð³Ñ€Ð°Ð½Ð° Ð¸Ð·Ð¼ÐµÑ’Ñƒ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ð°
+%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žbss-pltâ€œ â€ž-fPICâ€œ â€žifuncâ€œ â€ž%sâ€œ
+%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�ÐºÐ¾Ðº Ð¸Ð·Ð¼ÐµÑ’Ñƒ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ð°; Ñ€Ð°Ð·Ð¼Ð¾Ñ‚Ñ€Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ Ð¼ÐµÑ’ÑƒÐ¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµÐ¼
+%X%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° â€žbss-pltâ€œ
+%X%P: %pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ â€ž%Vâ€œ Ð½ÐµÐ¼Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚
+%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%pRâ€œ Ð¸Ð´Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°
+%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%pRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾
+%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%pRâ€œ Ñ˜Ðµ Ð²Ñ€Ð°Ñ‚Ð¸Ð»Ð¾ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%xâ€œ
+%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾
+%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°
+%X%P: %pB: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žglibcâ€œ-Ð¾Ð¼ ÐºÐ°Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ
+%X%P: %pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž%sâ€œ
+%X%P: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ… Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐºÑƒ Ð²ÐµÐ·Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€ž%pBâ€œ
+%X%P: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°
+%X%P: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°
+%X%P: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾
+%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ñƒ Ñ€ÐµÐ´Ñƒ Ð¾Ñ�Ñ‚Ð°Ð²Ðµ
+%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ñ€ÐµÐ´Ð° Ð¾Ñ�Ñ‚Ð°Ð²Ðµ
+%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ€ÐµÐ´Ñƒ Ð¾Ñ�Ñ‚Ð°Ð²Ðµ
+%X%P: Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ð¸ â€ž%pAâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÑƒ Ð½Ð° Ð¸Ñ�Ñ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸
+%X%P: Ð³Ñ€ÐµÑˆÐºÐ° â€žstack/lrliveâ€œ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ: %E
+%X%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð¸ Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ›Ðµ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°
+%Xâ€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿ÑƒÑ‚Ð½Ð¾ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ð¾Ð´ â€ž%pBâ€œ: Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñ˜Ðµ Ñƒ Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ð¾Ð´ â€ž%pBâ€œ
+%pA:0x%v â€žlrlive .brinfoâ€œ (%u) Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ (%u)
+â€ž%pA:0x%vâ€œ Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ
+%pB (%s): Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (%#lx) Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°%pB: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½ Ñƒ â€žABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %dâ€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ñ�Ñƒ Ð·Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐ°â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ñ�Ñƒ Ð·Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð°â€ž%pBâ€ž Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žCRIS v32â€œ ÐºÐ¾Ð´ ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°â€ž%pBâ€ž Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-â€žCRIS-v32â€œ ÐºÐ¾Ð´ ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°â€ž%pBâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚â€ž%pBâ€œ Ð½ÐµÐ¼Ð° Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ â€ž%sâ€œâ€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð³Ñ€ÑƒÐ¿Ðµ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ°â€ž%pBâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð±Ñ€Ð¾Ñ˜ %lu ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žSHT_SYMTAB_SHNDXâ€œâ€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð», â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 128-Ð±Ð¸Ñ‚Ð½Ð¸ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð»â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žAltiVecâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€ â€žABIâ€œ, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žSPEâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€ â€žABIâ€œâ€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žIBMâ€œ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð», â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žIEEEâ€œ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð»â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ñ˜ÐµÐ´Ð½Ðµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žr3/r4â€œ Ð·Ð° Ð¼Ð°Ð»Ðµ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚Ðµ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒâ€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€že_flagsâ€œ 0x%lx%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð·Ð¸Ð² Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð¸ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ñƒ Ð·Ð° Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð°%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° %zu Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜ %zu Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÑˆÑ‚Ð°Ñ˜ %zu ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð±Ñ€Ð¸Ñ�Ð°Ð½ Ñ�Ð¸Ð¼Ð±Ð¾Ð»%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÑˆÑ‚Ð°Ñ˜ %zu ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð¸Ð¼Ð° ÑƒÐ½Ð¾Ñ�Ðµ Ð½ÐµÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð¸Ð¼Ð° ÑƒÐ½Ð¾Ñ�Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½!%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ñ˜Ðµ Ð¾Ð±Ñ€Ð°Ñ’ÐµÐ½ Ð´Ð²Ð° Ð¿ÑƒÑ‚Ð°%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ñ‚Ð¸ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¸Ð·Ð»Ð°Ð·Ñƒ%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%pB(%pA): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ð²Ð»Ð°Ñ�Ð½Ð¸ÑˆÑ‚Ð²Ð°%pB(%pA): Ð¾Ð´ÐµÑ™Ð°Ðº Ð²ÐµÐ·Ðµ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ñ‚Ð¸ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð¸Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð½ÐµÐ¼Ð° Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°%pB(%pA): Ð²Ð¸ÑˆÐµ â€žTLSâ€œ Ð¼Ð¾Ð´ÐµÐ»Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%dâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld%pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%zuâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %lu%pB(%pA): Ð½Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð´ÐµÑ™ÐµÐ½Ðµ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð¾Ð±Ð°Ð²Ñ™Ð°ÑšÐ° Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐºÐµ Ð²ÐµÐ·Ðµ%pB(%pA): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð´ÑƒÐ³Ðµ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐµ Ð³Ñ€Ð°Ð½Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ðµ Ñ�Ñƒ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ â€žSHF_ARM_PURECODEâ€œ Ð¾Ð´ÐµÑ™ÐºÐ¾Ð¼ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ†Ð¸Ñ™ÐµÐ²Ðµ M-Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð° ÐºÐ¾Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÑƒÑ˜Ñƒ â€žmovwâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ%pB(%pA): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¸ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°%pB(%pA): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¸Ð¼ Ð¼Ð°Ð»Ð¸Ð¼ Ð¿Ð¾Ð´Ð°Ñ†Ð¸Ð¼Ð° Ð²Ñ€Ñ�Ñ‚Ðµ â€ž%dâ€œ%pB(%pA+%#lx): ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€ÑšÐ°ÐºÐ° Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð½Ð¸Ñ�ÐºÐµ%pB(%pA+%#x): Ð³Ñ€ÐµÑˆÐºÐ°: Ð²Ð¸ÑˆÐµÑ�Ñ‚Ñ€ÑƒÐºÐ¾ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐµ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñƒ Ð½Ðµ-Ð¿Ð¾Ñ�Ð»ÐµÐ´ÑšÐ¾Ñ˜ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¸ â€žITâ€œ Ð±Ð»Ð¾ÐºÐ°: â€žSTM32L4XXâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€žgccâ€œ Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-mrestrict-itâ€œ Ð·Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ñ�Ð°Ð¼Ð¾ Ñ˜ÐµÐ´Ð½Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ Ð¿Ð¾ â€žITâ€œ Ð±Ð»Ð¾ÐºÑƒ%pB(%pA+0x%lx): Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž16Aâ€œ Ñ�Ñ‚Ð¸Ð»Ð° Ð½Ð° â€ž0x%08x insnâ€œ%pB(%pA+0x%lx): Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž16Dâ€œ Ñ�Ñ‚Ð¸Ð»Ð° Ð½Ð° â€ž0x%08x insnâ€œ%pB(%pA+0x%v): Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-ÐºÐ¾Ð´Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pB(%pA)â€œ, Ð°Ð½Ð°Ð»Ð¸Ð·Ð° Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ñ‚Ð¿ÑƒÐ½Ð°
+%pB(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾; Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %pB: â€ž%sâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° â€ž%sâ€œâ€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ:
+  Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ñ‚Ð¸Ð¿Ð¸Ñ‡Ð½Ð¾ Ð¼ÐµÑˆÐ°ÑšÐµ Ð¾Ð¿Ñ†Ð¸Ñ˜Ð°, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œâ€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð½ÐµÐ¼Ð° â€žPLTâ€œ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œâ€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð½ÐµÐ¼Ð° Ð½Ð¸ â€žPLTâ€œ Ð½Ð¸ â€žGOTâ€œ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œâ€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ ÑƒÐ¿ÑƒÑ‚Ñƒ ÐºÐ° â€ž%sâ€œ, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ, ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð¸Ð·Ð²Ð°Ð½ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: â€ž%sâ€œâ€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ, ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð¸Ð·Ð²Ð°Ð½ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ðµ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œâ€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð±ÐµÐ· Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð³ â€žGOTâ€œâ€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œâ€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: v10/v32 Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð½Ðµ Ñ�Ð¼Ðµ Ð´Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµâ€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ, ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ðµ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ%pB: â€ž!samegpâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð±ÐµÐ· â€ž.prologueâ€œ-Ð°: %s%pB: â€ž%pAâ€œ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™Ð°Ðº ÑƒÐ»Ð°Ð·Ð°%pB: â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÑƒ%pB: â€ž%pAâ€œ Ñ‚Ð°Ñ‡Ð°ÐºÐ° Ð¿Ñ€ÐµÐ»Ð°Ð·Ð¸ ÐºÑ€Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ‚ÐµÐºÑ�Ñ‚Ð°%pB: %pA: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %#x > 0xffff%pB: %s (Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%v, Ð¸Ð½Ñ„Ð¾: 0x%v) Ð·Ð° â€ž%sâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ
+%pB: %s (Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%v, Ð¸Ð½Ñ„Ð¾: 0x%v, Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº: 0x%v) Ð·Ð° â€ž%sâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ
+%pB: â€ž%sâ€œ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%pB: â€ž%sâ€œ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñƒ Ð¸Ð½Ð´ÐµÐºÑ�Ñƒ %lu (>= sh_info %lu)%pB: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾%pB: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸%pB: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %d%pB: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %u (Ð½Ð°Ñ˜Ð². %d)%pB: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: 0x%lx > 0xffff%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸%pB: â€ž--in-implibâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð·Ð° â€žSecure Gatewayâ€œ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ½Ð¾Ñ�Ð°%pB: â€ž.gnu.version_dâ€œ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ�%pB: â€ž.gnu.version_râ€œ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ�%pB: Ð¿Ð¾Ð´-Ð¿Ð¾Ð´ÐµÐ¾Ðº â€ž.gotâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ 64K (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ %d)%pB: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ñ€ÐµÐ³ÑƒÐ»Ð°Ñ€Ð°Ð½ Ð½Ð¸Ð· ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð°%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.preinit_arrayâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ñƒ â€žDSOâ€œ-Ñƒ%pB: Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº%pB: Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº%pB: â€ž@gprelâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: â€ž@internalâ€œ Ð³Ñ€Ð°Ð½Ð° ÐºÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ%pB: â€ž@pcrelâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: â€žABIâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ%pB: â€žABIâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° Ð¾Ð½Ð¸Ð¼ Ð¸Ð· Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ:
+  Ñ†Ð¸Ñ™Ð½Ð° ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð° Ñ�Ð° â€ž%sâ€œ%pB: â€žABIâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°%pB: â€žABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %ld Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° â€žABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐ° %ld%pB: â€žASEâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°%pB: Ð”Ð¾Ñ‚ÐµÑ€ÑƒÑ˜ÐµÐ¼ Ð³Ñ€Ð°Ð½Ñƒ Ð½Ð° 0x%V Ð¿Ñ€ÐµÐ¼Ð° â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ
+%pB: â€žBE8â€œ Ñ�Ð»Ð¸ÐºÐµ Ñ�Ñƒ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ðµ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸%pB: â€žC_STATâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žXCOFF64â€œ-Ð¾Ð¼%pB: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¾Ð¼ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾Ð´ %d%pB: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼%pB: â€žGNU_MBINDâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ â€žsh_infoâ€œ Ð¿Ð¾Ñ™Ðµ: %d%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žGOTâ€œ: Ð±Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð° 8- Ð¸Ð»Ð¸ 16-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ÐµÐ¼ > %d%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žGOTâ€œ: Ð±Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð° 8-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ÐµÐ¼ > %d%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° â€žISRâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°: Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð° %u Ð±Ð°Ñ˜Ñ‚Ð°; Ñ‚ÐµÐºÑƒÑ›Ð° %u Ð±Ð°Ñ˜Ñ‚Ð°%pB: Ð‘Ñ€Ð¾Ñ˜ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ ÑƒÐ»Ð°Ð·Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ Ñ�Ðµ Ð¿Ð¾Ð²ÐµÑ›Ð°Ð¾ Ñ�Ð° %lu Ð½Ð° %u
+%pB: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð¿ÑˆÑ‚ÐµÐ¼ â€žELFâ€œ-Ñƒ (EM: %d)%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ðµ Ð¾Ð´Ð½Ð¾Ñ�Ð¸ Ð½Ð° â€žSBâ€œ Ð°Ð»Ð¸ â€ž__c6xabi_DSBT_BASEâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾%pB: â€žSHT_GROUPâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº [Ð¸Ð½Ð´ÐµÐºÑ� %d] Ð½ÐµÐ¼Ð° â€žSHF_GROUPâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ%pB: â€žTLSâ€œ Ð¼ÐµÑ�Ð½Ð¸ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸ ÐºÐ¾Ð´ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°%pB: â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð¢Ð›Ð¡ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð½Ð¸Ñ�Ñƒ Ñ�ÑƒÑ�ÐµÐ´Ð½Ð¸:%pB: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° â€ž%sâ€œ Ð¸Ð¼Ð° â€žR_TLSMLâ€œ-Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÐºÐ¾Ñ˜Ðµ Ð½Ðµ Ñ†Ð¸Ñ™Ð° Ð½Ð° Ñ�ÐµÐ±Ðµ Ñ�Ð°Ð¼Ð¾Ð³%pB: ÐŸÑ€Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ â€žPT_DYNAMICâ€œ Ð½Ð¸Ñ˜Ðµ â€ž.dynamicâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº%pB: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€ÑƒÐºÑƒÑ˜ÐµÐ¼ Ñ�Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° %x Ñƒ Ð•Ð›Ð¤ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ.  ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ›Ñƒ â€žABSâ€œ.%pB: â€žXCOFFâ€œ Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ ÐºÐ°Ð´Ð° Ñ�Ðµ Ð½Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸ â€žXCOFFâ€œ Ð¸Ð·Ð»Ð°Ð·%pB: â€ž__gpâ€œ Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ ÐºÑ€Ð°Ñ‚ÐºÐ¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ â€žFDPICâ€œ-Ñƒ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€žFDPICâ€œ%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸%pB: â€ž%sâ€œ Ð¸ ÑšÐµÐ½ Ñ�Ð¿ÐµÑ†Ð¸Ñ˜Ð°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ñƒ Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ñ†Ð¸Ð¼Ð°%pB: â€ž%sâ€œ Ð¸Ð¼Ð° Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ñ€ÐµÐ´Ð¾Ð²Ð° Ð°Ð»Ð¸ Ð½Ðµ Ð¸ Ð·Ð°Ñ‚Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº%pB: â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð°%pB: â€ž%sâ€œ Ð½Ðµ-â€žPLTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ†Ð¸ Ð¸ ÐºÐ¾Ð¼Ðµ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ñ™ÐµÐ½Ð¾ Ð¸Ð· Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð³ (Ð´Ð° Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° â€ž-fPICâ€œ ?)%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ%pB: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€žgotâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°%pB: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€žpltâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°%pB: Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ñ™Ð°Ð¼ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ%pB: Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ñ™Ð°Ð¼ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¾Ð´ÐµÑ™ÐºÐ°%pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð¼ Ð½Ð¸Ñ�ÐºÐµ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° Ð½Ðµ-Ð½Ð¸Ñ�ÐºÐµ (Ð±Ñ€Ð¾Ñ˜ %d)%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑˆÐ°Ð¼ â€žFDPICâ€œ Ð¸ Ð½Ðµ-â€žFDPICâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€Ñ�Ñ‚Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°%pB: ÑƒÐ²ÐµÐ·ÐµÐ½ Ñ˜Ðµ Ð»Ð¾Ñˆ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d%pB: Ð»Ð¾Ñˆ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ%pB: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ%pB: Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %d%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ð¿Ð»ÑƒÑ� Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: â€ž%sâ€œ Ñƒ â€ž%pAâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ð¿Ð»ÑƒÑ� Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: (Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾) Ñƒ â€ž%pAâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ â€ža.outâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ža.outâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ðµ Ñ�Ð° â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ â€žRVEâ€œ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¾Ð¼ Ð¼ÐµÑ‚Ð¾Ð¼%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ â€žABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚.%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð·Ð° Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %d, %d Ð±Ð°Ñ˜Ñ‚Ð°
+%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ â€žGOTâ€œ ÑƒÐ½Ð¾Ñ�Ðµ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð²ÐµÐ·ÐµÐ¼ ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ.%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ñ�Ð°Ð¶ÐµÑ‚Ð¸Ð¼ Ð±Ð¸Ð½Ð°Ñ€Ð½Ð¸Ð¼ Ð�Ð»Ñ„Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð¸Ð¾Ñ†Ð°, Ð¸Ð»Ð¸ â€žobjZâ€œ, Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð½ÐµÑ�Ð°Ð¶ÐµÑ‚Ðµ Ð±Ð¸Ð½Ð°Ñ€Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ â€žfdpicâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ Ð½Ðµ-â€žfdpicâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ñƒ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ð½Ðµ-â€žfdpicâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ â€žfdpicâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ñƒ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ â€ž%sâ€œ Ð¸ â€ž%sâ€œ%pB: Ð¸Ð·Ð¼ÐµÐ½Ð° Ñƒ â€žgpâ€œ-Ñƒ: BRSGP %s%pB: ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð¼Ð¾Ñ›Ð½Ð¸Ñ… ÑƒÐ½Ð¾Ñ�Ð°%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%s -mtune=%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž%s -mtune=%sâ€œ%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð¼Ð°Ð»Ð° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð²ÐµÐ»Ð¸ÐºÐ° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž-mrelocatableâ€œ%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž%sâ€œ%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð½Ðµ-â€žpicâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž-mrelocatableâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼%pB: ÑƒÑ�Ð»Ð¾Ð²Ð½Ð° Ð³Ñ€Ð°Ð½Ð° Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð°%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð·Ð° ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ
+%pB: Ñ†-Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð·Ð°Ñ‚Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›ÐµÐ¼ Ð¾Ð´ÐµÑ™ÐºÑƒ%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð±ÐµÐ· Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOT32Xâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð±ÐµÐ· Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° â€žLOCALâ€œ Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ñ�Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð¼ Ð¸Ð»Ð¸ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð¼ Ð²Ñ€ÐµÐ´Ð½Ð¾ÑˆÑ›Ñƒ%pB: â€ždtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð¸Ð·Ð²Ð¾Ð·Ð° â€ž%sâ€œ%pB: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
+%pB: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ
+%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð±ÐµÐ· â€ž.loaderâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ
+%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ
+%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ %pA
+%pB: ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ%pB: Ñ„ÑƒÐ½ÐºÑ†Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð½Ð°%pB: Ñ„ÑƒÐ½ÐºÑ†Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ð·Ð»Ð°Ð·%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žABIâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½ Ð½ÐµÐ±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ñ˜ Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñ˜Ð¸%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žPHDRâ€œ Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²ÐµÐ½ â€žLOADâ€œ Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ¾Ð¼%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žVFP11â€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð½Ð°Ð³Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° %d Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ðµ â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº: %#llx%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°: %ld%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žSTM32L4XXâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´Ð°Ñ†Ð¸ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñ�Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð°Ñ˜Ñƒ Ð¸Ð·Ð²Ð°Ð½ ÐºÑ€Ð°Ñ˜Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ 835769 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ 843419 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐºÑƒÐ¿ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð·Ð° â€ž%sâ€œ; Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½ Ñƒ Ñ€Ð°Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð½Ðµ-ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° %d ÑƒÐºÑ™ÑƒÑ‡ÑƒÑ˜Ðµ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¸/Ð¸Ð»Ð¸ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žsearch_nds32_elf_blankâ€œ Ð¸Ð·Ð²ÐµÑˆÑ‚Ð°Ð²Ð° Ð¾ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ñ‡Ð²Ð¾Ñ€Ñƒ%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€žCOMDATâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚%pB: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ 0..%lu Ð°Ð»Ð¸ Ð½Ð°Ñ’Ð¾Ñ… Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº %d%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð²ÐµÐ·Ðµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº %d%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ ÑƒÐ²Ð¾Ð·Ð½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°%pB: ÐºÐ¾Ð±Ð½Ð¾: Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ½Ð¸ Ð¿Ñ€Ðµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°%pB: ÐºÐ»Ð°Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° â€ž%sâ€œ%pB: â€žgotoffâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: â€žgpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð¾Ð´ÐµÑ™Ð°Ðº Ð³Ñ€ÑƒÐ¿Ðµ â€ž%pAâ€œ Ð½ÐµÐ¼Ð° Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°%pB: Ð½Ð° Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ%pB: Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½%pB: Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°%pB: Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ; Ð¸Ð·Ð»Ð°Ð· Ñ˜Ðµ 0x%x, Ð° ÑƒÐ»Ð°Ð· 0x%x%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ%pB: Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÐºÐ° â€ž%sâ€œ Ñ˜Ðµ Ð¿ÐµÑ‚Ñ™Ð°%pB: Ñ�ÐºÑƒÐ¿ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°, ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° â€ž%pAâ€œ Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
+%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°, Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¸Ð· %d Ñƒ %d Ñ€ÐµÑ‡Ð¸
+%pB: Ð½Ð° ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð±Ñ€Ð¾Ñ˜ Ð Ð²Ð° Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ� Ñƒ â€žSHT_GROUPâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ [%u]%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ� Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ½Ð¾Ñ�Ð°: â€ž%sâ€œ; Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸, Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¸ Ð´Ð° Ñ�Ðµ Ð¾Ð´Ð½Ð¾Ñ�Ð¸ Ð½Ð° â€žThumbâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ·Ð° â€ž%uâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ (Ð¸Ð½Ð´ÐµÐºÑ� â€ž%uâ€œ)%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: YZ â€žlop_endâ€œ-Ð° (%ld) Ð½Ð¸Ñ˜Ðµ Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ Ñ�Ð° Ð±Ñ€Ð¾Ñ˜ÐµÐ¼ Ñ‚ÐµÑ‚Ñ€Ð°Ñ�Ð° Ð´Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾Ð³ â€žlop_stabâ€œ-Ð° (%ld)
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… YZ = 1 Ð´Ð¾Ð±Ð¸Ñ… YZ = %d Ð·Ð° â€žlop_quoteâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… y = 0 Ð´Ð¾Ð±Ð¸Ñ… y = %d Ð·Ð° â€žlop_fixrxâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 1 Ð¸Ð»Ð¸ z = 2, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_fixoâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 1 Ð¸Ð»Ð¸ z = 2, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_locâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 16 Ð¸Ð»Ð¸ z = 24, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_fixrxâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¿Ð¾Ñ™Ðµ y Ð¸ z â€žlop_stabâ€œ-Ð° Ð½Ð¸Ñ˜Ðµ Ð½ÑƒÐ»Ð°, y: %d, z: %d
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð·Ð° Ð±Ñ€Ð¾Ñ˜ %d Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½ Ð¿Ñ€Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ðµ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %d â€ž%sâ€œ, Ñ˜Ðµ Ð²ÐµÑ› ÑƒÐ½ÐµÑˆÐµÐ½ ÐºÐ°Ð¾ â€ž%sâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° Ð·Ð° $255 Ð½Ð¸Ñ˜Ðµ â€žMainâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ð¾Ð´ÐµÑ›Ð¸ Ð±Ð°Ñ˜Ñ‚ Ñ€ÐµÑ‡Ð¸ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ 0 Ð¸Ð»Ð¸ 1, Ð´Ð¾Ð±Ð¸Ñ… %d Ð·Ð° â€žlop_fixrxâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: â€žlop_endâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ð»ÐµÐ´ÑšÐ° Ñ�Ñ‚Ð°Ð²ÐºÐ° Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð»Ð¾Ð¿ÐºÐ¾Ð´ â€ž%dâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ â€žsh_linkâ€œ Ð¿Ð¾Ñ™Ðµ (%d) Ñƒ Ð±Ñ€Ð¾Ñ˜Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° %d%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ�Ð¿ÐµÑ†Ð¸Ñ˜Ð°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ; Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¸Ð»Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð»Ð°Ð±Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ; Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¸Ð»Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð»Ð°Ð±Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¸Ð·Ð´Ð°ÑšÐ° %lx (Ð½Ð°Ñ˜Ð². %lx)%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ 32-Ð±Ð¸Ñ‚Ð½Ð¸ ÐºÐ¾Ð´ Ñ�Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ ÐºÐ¾Ð´Ð¾Ð¼%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ 64-Ð±Ð¸Ñ‚Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ð° 32-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ ÐºÐ¾Ð´ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ â€žUltraSPARCâ€œ-Ñƒ Ñ�Ð° ÐºÐ¾Ð´Ð¾Ð¼ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð¸Ð¼ â€žHALâ€œ-Ñƒ%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°ÑƒÑ‚Ð¾-â€žpicâ€œ-Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð½Ðµ-Ð°ÑƒÑ‚Ð¾-â€žpicâ€œ%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€žÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ð³-Ð³Ð¿â€œ-Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° â€žÐ½Ðµ-ÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ð³-Ð³Ð¿â€œ-Ð°%pB: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 16 Ð±Ð¸Ñ‚Ð° (-mshort) Ð° Ð´Ñ€ÑƒÐ³Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 32 Ð±Ð¸Ñ‚Ð°%pB: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 32 Ð±Ð¸Ñ‚Ð° (-fshort-double) Ð° Ð´Ñ€ÑƒÐ³Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 64 Ð±Ð¸Ñ‚Ð°%pB: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° â€žHCS12â€œ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸Ð¼ Ð·Ð° â€žHC12â€œ%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð½Ðµ-â€žpicâ€œ ÐºÐ¾Ð´ Ñƒ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð¼ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð½Ð¾Ð¼ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ…Ð²Ð°Ñ‚-Ð½Ð°-Ð�Ð˜Ð¨Ð¢Ð�Ð’Ð�ÐžÐˆ-Ð´ÐµÑ€ÐµÑ„ÐµÑ€ÐµÐ½Ñ†Ð¸ Ñ�Ð° Ð½Ðµ-Ð·Ð°Ñ…Ð²Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ â€ž%pAâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ%pB: Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð±Ð¸Ñ›Ðµ â€žNULLâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ðµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°%pB: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ñ†Ð¸Ñ™ÐµÐ¼%pB: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ%pB: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%pB: Ð»Ð¾ÑˆÐµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ â€žXTY_LDâ€œ â€ž%sâ€œ%pB: ÑƒÐ³Ð½ÐµÐ¶Ñ’ÐµÐ½Ð¾ â€žOMIT_FPâ€œ Ñƒ â€ž%pAâ€œ%pB: Ð½ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð´ÑƒÐ³Ð¾Ð³ %d Ð±Ð°Ñ˜Ñ‚Ð°%pB: Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ%pB: Ð½ÐµÐ¼Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° 0
+%pB: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð·Ð° ÑƒÐ²Ð¾Ð·Ð½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ%pB: Ð½ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¸Ð·Ð´Ð°ÑšÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð·Ð° Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ%pB: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ðµ Ð¾Ð´ÐµÑ™ÐºÐµ Ð³Ñ€ÑƒÐ¿Ðµ%pB: Ð½Ðµ-ÐºÐ°Ð½Ð¾Ð½Ñ�ÐºÐ° ÑƒÐ¿ÑƒÑ‚Ð° ÐºÐ° ÐºÐ°Ð½Ð¾Ð½Ñ�ÐºÐ¾Ñ˜ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ñ˜ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð¸ â€ž%sâ€œ %pB%pB: Ð½Ðµ-â€žpicâ€œ ÐºÐ¾Ð´ Ñ�Ð° â€žimmâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¼ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: â€žnon-picâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð·Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÑ‚Ðµ Ñ�Ð° â€ž-Nâ€œ%pB: Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¾ Ð¸Ð·Ð´Ð°ÑšÑƒ%pB: Ñ�Ð°Ð¼Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¸ â€ž%%g[2367]â€œ Ð¼Ð¾Ð³Ñƒ Ð±Ð¸Ñ‚Ð¸ Ð´ÐµÐºÐ»Ð°Ñ€Ð¸Ñ�Ð°Ð½Ð¸ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žSTT_REGISTERâ€œ%pB: Ð¿Ð¾Ð½ÐµÑ�Ñ‚Ð°Ð»Ð¾ Ñ˜Ðµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÑƒ Ð½Ð°Ð·Ð¸Ð²Ð° Ð·Ð° Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº%pB: Ð½ÐµÐ¼Ð° Ð²Ð¸ÑˆÐµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ñƒ â€ž_bfd_elf_get_propertyâ€œ%pB: Ð±Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¼Ð°Ð»Ð¸%pB: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð»Ð°Ð±Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ˜Ðµ Ð¿Ñ€Ð¸ÐºÑ™ÑƒÑ‡Ð°Ðº Ð·Ð° Ñ€ÑƒÐºÐ¾Ð²Ð°ÑšÐµ â€žltoâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¾Ð¼%pB: Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð±ÐµÐ· â€ž-fPICâ€œ?%pB: Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½%pB: Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð½Ðµ-Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: â€ž%sâ€œ Ñƒ â€ž%pAâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð½Ðµ-Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: (Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾) Ñƒ â€ž%pAâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%#xâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›ÐµÐ³ Ð¸Ð½Ð´ÐµÐºÑ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %ld%pB: Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð²ÐµÐ·Ð° Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%s%sâ€œ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€ž%s%sâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ð¸Ð»Ð¸ Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€ž%sâ€œ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ â€žRV32â€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ â€žRV64â€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%pB: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ x32%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ ÐºÐ¾Ñ˜Ð° Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ð²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð¿Ð¾Ñ™Ð° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¿ÑƒÑšÐ°Ð²Ð° 0x%lx%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð´ÐµÑ�Ð½Ð¸ Ð¿Ð¾Ð¼Ð°Ðº %d Ð³Ñ€ÐµÑˆÐºÐ° 0x%lx%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOTOFFâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOTOFFâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_X86_64_GOTOFF64â€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_X86_64_GOTOFF64â€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð¿ÑˆÑ‚ÐµÐ¼ â€žELFâ€œ-Ñƒ (EM: %d)%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ, Ð°Ð»Ð¸ Ð½ÐµÐ¼Ð° Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐ¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ %ld%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð·Ð°Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½ Ñ�Ð° â€žzstdâ€œ, Ð°Ð»Ð¸ BFD Ð½Ð¸Ñ˜Ðµ Ð¸Ð·Ð³Ñ€Ð°Ñ’ÐµÐ½ Ñ�Ð° â€žzstdâ€œ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ¾Ð¼%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žVTENTRYâ€œ ÑƒÐ½Ð¾Ñ�%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð´ÐµÐ»Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ %d%pB: Ð±Ñ€Ð¾Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° ÑƒÐ½Ð¾Ñ�Ð° Ð³Ñ€ÑƒÐ¿Ðµ %u Ñ˜Ðµ Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½%pB: â€žsh_link [%d]â€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾%pB: â€žsh_linkâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ ÑƒÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¾Ð´ â€ž%pBâ€œ%pB: â€žsh_linkâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ ÑƒÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° ÑƒÐºÐ»Ð¾ÑšÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¾Ð´ â€ž%pBâ€œ%pB: Ð¿Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñ˜Ðµ Ð½ÑƒÐ»Ð° Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°%pB: Ñ�Ð¿ÐµÑ†Ð¸Ñ˜Ð°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ñ�Ð°Ð¼Ð¾ Ð·Ð° â€žARMv8-Mâ€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ Ð¸Ð»Ð¸ Ð½Ð¾Ð²Ð¸Ñ˜Ñƒ%pB: Ñ€Ð°Ð·Ð¼Ð°Ñ‚Ñ€Ð°Ð¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÑƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ð¸ â€ž%sâ€œ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð°%pB: Ð½Ð¸Ñ�ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð° Ð½ÑƒÐ»Ð¾Ð¼ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€žILFâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%pB: Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ° Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð°%pB: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€Ñ�Ñ‚Ñƒ Ñ†Ñ�ÐµÐºÑ‚Ð¾Ñ€Ð° â€ž%dâ€œ%pB: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ ÐºÐ»Ð°Ñ�Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%dâ€œ%pB: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�ÑƒÑ‚Ð°Ð½%pB: Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¾Ð·Ð½Ð°Ñ‡Ð°Ð²Ð° Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ (Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾)%pB: Ð½Ð°Ð·Ð¸Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÐ¼Ð°ÑˆÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ñƒ Ð½Ð°Ñ˜Ð²ÐµÑ›Ñƒ Ð´ÑƒÐ¶Ð¸Ð½Ñƒ Ð¾Ð´ %d%pB: ÑƒÐ·Ð¸Ð¼Ð°ÑšÐµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ðµ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ%pB: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)%pB: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%pA)%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d)%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %d (>= %d)%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %u%pB: â€žtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð°ÐºÑƒÑ˜ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð»Ð°Ð¶Ð½Ð¸ Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ñ�Ð¿Ð°ÐºÑƒÑ˜ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[12] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$5â€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$2â€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$4â€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[9] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž__tls_usedâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[PE_IMPORT_ADDRESS_TABLE (12)] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$6â€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[PE_IMPORT_ADDRESS_TABLE(12)] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$6â€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€ž%sâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ â€ž%sâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ð·Ð¸Ð² Ð·Ð° Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð¼ â€žCOMDATâ€œ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ°%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð¸Ð¼Ð°Ñ˜Ñƒ Ð²Ð¸ÑˆÐµ Ð¾Ð´ Ñ˜ÐµÐ´Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ñ�Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ%pB: Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° ÑƒÐ¿ÑƒÑ‚Ð° ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ%pB: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž.opdâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ%pB: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð° â€žR_PPC64_TOCSAVEâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ%pB: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°ÑšÐµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%uâ€œ Ñƒ â€ž.opdâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žsparcâ€œ Ð¼Ð°ÑˆÐ¸Ð½Ðµ â€ž%luâ€œ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð° Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð¾Ð±Ñ€Ð°Ñ’Ð¸Ð²Ð°ÑšÐ° Ð¿Ð¸Ñ�Ð°ÑšÐ°%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€ž%sâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€ž%dâ€œ Ð¾Ð±Ð°Ð²ÐµÐ·Ð½Ð¾Ð³ â€žARCâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%pB: Ð¾Ð±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° [%#x] Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° [%#x] Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ð³Ñ€ÑƒÐ¿Ð¸ [%pA]%pB: Ð½ÐµÐ¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ â€žOMIT_FPâ€œ Ñƒ â€ž%pAâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð½Ð°Ð·Ð¸Ð² Ð²Ñ€Ñ�Ñ‚Ðµ ÑƒÐ²Ð¾Ð·Ð°; %x%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %#x Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° ÐºÐ»Ð°Ñ�Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° â€ž%dâ€œ Ð·Ð° â€ž%sâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žAOUTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€ž%#xâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð±Ñ„Ð´ Ð¿Ð¾ÐºÐ»Ð°Ð¿Ð°ÑšÐµ â€ž%#lxâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð±Ñ„Ð´ Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%#xâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ð¾ÐºÐ»Ð°Ð¿Ð°ÑšÐµ â€ž%#xâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¸ Ð½Ðµ-â€žPICâ€œ Ð¿Ð¾Ð·Ð¸Ð² Ð·Ð° â€žIFUNCâ€œ â€ž%sâ€œ%pB: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°%pB: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€ž%#xâ€œ%pB: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€ž%sâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð¸Ð·Ð²ÐµÐ·ÐµÐ½Ð°: %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ ÑƒÐ²ÐµÐ·ÐµÐ½Ð°: %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %#x%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žswap_aux_inâ€œ Ð·Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð½Ñƒ ÐºÐ»Ð°Ñ�Ñƒ â€ž%#xâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žswap_aux_outâ€œ Ð·Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð½Ñƒ ÐºÐ»Ð°Ñ�Ñƒ â€ž%#xâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ð¿Ñ€ÐµÐ»Ð°Ð·Ð°Ðº Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ ÑˆÐ¸Ñ€Ð¾ÐºÐ¸ Ð½Ð¸Ð· Ð·Ð½Ð°ÐºÐ° 0x%02X 0x%02X Ð½Ð°ÐºÐ¾Ð½ Ð½Ð°Ð·Ð¸Ð²Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° ÐºÐ¾Ñ˜Ð¸ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ñ�Ð° â€ž%sâ€œ
+%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ Ð´Ð¾Ðº Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ â€ž_â€œ, Ð°Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸Ð¼Ð° Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð°%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (%#x) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (%#x)%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (%#x) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (%#x)%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ ÐºÐ¾Ñ˜Ðµ Ð½Ð¸Ñ�Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ðµ Ñ�Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð°Ð¼Ð° ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¸Ð¼ Ñƒ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð°, Ð°Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸Ð¼Ð° Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ â€ž_â€œ%pB: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñ‡Ð²Ð¾Ñ€ Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ%pB: Ð²Ð¸Ð´Ñ™Ð¸Ð²Ð¾Ñ�Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pA: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: %#x > 0xffff%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%s BLXâ€œ Ñ†Ð¸Ñ™Ð° Ð½Ð° â€ž%sâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žBTIâ€œ Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾ â€ž-z force-btiâ€œ-Ñ˜ÐµÐ¼ ÐºÐ°Ð´Ð° Ñ�Ð²Ð¸ ÑƒÐ½Ð¾Ñ�Ð¸ Ð½ÐµÐ¼Ð°Ñ˜Ñƒ â€žBTIâ€œ Ñƒ â€žNOTEâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ.%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žCOMDATâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð° Ñ�Ð° Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRVE PLTâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_RISCV_SUB_ULEB128â€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð¼, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ñ‚Ðµ binutils-Ð¾Ð¼ 2.42 Ð¸Ð»Ð¸ Ð²ÐµÑ›Ð¸Ð¼%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð»Ð°Ð±Ð¾ â€žTLSâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð° Ð¸ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ Ñ€Ð°Ð´Ð¸Ñ‚Ð¸ ÐºÐ°Ð¾ ÑˆÑ‚Ð¾ Ñ�Ðµ Ð¾Ñ‡ÐµÐºÑƒÑ˜Ðµ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð¿Ñ†Ð¸Ñ˜Ðµ â€ž%sâ€œ %u Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð´Ñ€ÐµÐ´Ð¸Ð¼ Ñ†Ð¸Ñ™Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ñ‚Ð²Ñ€Ñ’ÑƒÑ˜ÐµÐ¼ 0xffff Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°, Ð±ÐµÐ· Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐ°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº Ð¾ Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ€ÐµÐ´Ð° Ð·Ð° â€ž%sâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ ÑƒÐ½Ð¾Ñ�Ñƒ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° %d%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° 0x%lx Ñƒ ÑƒÐ½Ð¾Ñ�Ñƒ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° %d%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐµÐ»Ñ„ Ð¸Ð·Ð´Ð°ÑšÐ° %s Ð¸ %s Ð½Ð¸Ñ�Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾ â€žASEâ€œ Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€že_flagsâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾ â€žFP ABIâ€œ Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€ž.gnu.attributesâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾ ISA Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€že_flagsâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð° ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€že_flagsâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žisymMaxâ€œ (%ld) Ñ˜Ðµ Ð²ÐµÑ›Ðµ Ð¾Ð´ â€žifdMaxâ€œ (%ld)%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ð° Ð½Ðµ-â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð½Ðµ-Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿ÐµÑ‚Ñ™Ð° Ñƒ Ð·Ð°Ð²Ð¸Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸Ð¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð²Ð¸ÑˆÐµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ñ… Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€“ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ %u%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð²Ð¸ÑˆÐµ Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€“ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ %u%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð°Ð¸ÑˆÐ°Ð¾ Ñ�Ð°Ð¼ Ð½Ð° Ñ�Ñ‚Ð°Ñ€Ð¸Ñ˜Ðµ Ð¸Ð·Ð´Ð°ÑšÐµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°, Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° Ñ‚ÐµÐºÑƒÑ›Ð¸Ð¼ Ð»Ð°Ð½Ñ†ÐµÐ¼ Ð°Ð»Ð°Ñ‚Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žSDA_BASEâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð°Ñ’Ð¾Ñ… Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ â€“ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ð¾ Ñ€ÐµÑˆÐµÑšÐµ â€žSTM32L4XXâ€œ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ñ†Ð¸Ñ™Ð½Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ð¾ Ñ€ÐµÑˆÐµÑšÐµ â€žVFP11â€œ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ñ†Ð¸Ñ™Ð½Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð²ÐµÐ»Ð¸ÐºÐ° Ð·Ð° â€žmmoâ€œ, Ð²ÐµÑ›Ð° Ð¾Ð´ 65535 32-Ð±Ð¸Ñ‚Ð½Ð¸Ñ… Ñ€ÐµÑ‡Ð¸: %d.  Ð¡Ð°Ð¼Ð¾ â€žMainâ€œ Ð±Ð¸Ñ›Ðµ Ð´Ð°Ñ‚Ð¾.
+%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žPLTâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ñƒ â€žthumb-1â€œ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð° Ð¾Ð¿Ñ†Ð¸Ñ˜Ð° â€ž%sâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð½Ð¸Ñ˜ÐµÐ´Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½Ð° â€žPT_GNU_RELROâ€œ Ð¿Ð¾Ð´ÐµÐ¾Ðº%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÑƒÐ½Ð¾Ñ�Ñƒ â€žGOTâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ñƒ â€žflags2â€œ Ð¿Ð¾Ñ™Ñƒ â€ž.MIPS.abiflagsâ€œ-Ð° (0x%lx)%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žwin32pstatus %sâ€œ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %lu Ð±Ð°Ñ˜Ñ‚Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¼Ð°Ð»Ð¾%pB: Ð½ÐµÑ›Ñƒ Ñ€ÐµÑˆÐ¸Ñ‚Ð¸ Ð²Ñ€ÐµÐ¼Ðµ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°%pB: â€žwin32pstatus NOTE_INFO_MODULEâ€œ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %lu Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¼Ð°Ð»Ð¾ Ð´Ð° Ð±Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ð»Ð¾ Ð½Ð°Ð·Ð¸Ð² Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %u%pB: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° â€žauxâ€œ Ð²Ñ€Ñ�Ñ‚Ð° %#x Ð·Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð½Ñƒ ÐºÐ»Ð°Ñ�Ñƒ %#x%pB:%.8s: â€žRVAâ€œ Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¾%pB:%.8s: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ñ�Ð¿Ð¾Ð´ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ñ�Ð»Ð¸ÐºÐµ%pB:%d: Ð»Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ S-Ð·Ð°Ð¿Ð¸Ñ�Ð°%pB:%d: Ð±Ñ€Ð¾Ñ˜ Ð±Ð°Ñ˜Ñ‚Ð° â€ž%dâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸%pB:%d: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%pB:%d: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ S-Ð·Ð°Ð¿Ð¸Ñ�Ð°â€ž%pB:%pA%sâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°
+%pB:%pA: â€ž%sâ€œ Ð¸ â€ž%sâ€œ Ð¼Ð¾Ñ€Ð°Ñ˜Ñƒ Ð±Ð¸Ñ‚Ð¸ Ñƒ Ð¸Ñ�Ñ‚Ð¾Ð¼ ÑƒÐ»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¿Ð¸ÑˆÐµÐ¼ Ð¿Ñ€ÐµÐºÐ¾ ÐºÑ€Ð°Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ°%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÐ¿Ð¸ÑˆÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ Ð¿Ñ€Ð°Ð·Ð½Ñƒ Ð¼ÐµÑ’ÑƒÐ¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÐ¿ÑƒÑ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ ÑƒÐºÐ»Ð¾ÑšÐµÐ½ Ñ�ÐºÑƒÐ¿Ñ™Ð°ÑšÐµÐ¼ Ð¾Ñ‚Ð¿Ð°Ð´Ð°%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ â€ž--gc-keep-exportedâ€œ%pB:%pA: Ñ‚Ð°Ð±ÐµÐ»Ð¸ â€ž%sâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ â€ž%sâ€œ%pB:%pA: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ¼ Ñ€ÐµÑ‡Ð¸ ÑƒÐ½ÑƒÑ‚Ð°Ñ€ Ñ‚Ð°Ð±ÐµÐ»Ðµ%pB:%pA: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ â€ž%sâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ñ‚Ð°Ð±ÐµÐ»Ðµ%pB:%pA: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð ÐµÐ´ Ð¥ÐµÑ‚Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñƒ: %s%pB: â€ž%sâ€œ Ð¸Ð¼Ð° Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾ Ð¸ â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ%pB:%s Ð¾Ð´ÐµÑ™Ð°Ðº %s: Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ 2**%u Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚Ð¸%pB:%u: Ð»Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… %u, Ð½Ð°Ñ’Ð¾Ñ… %u)%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%pB:%u: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žihexâ€œ Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%pB[%pA]: Ð½ÐµÐ¼Ð° Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° Ð·Ð° Ñ€Ð°Ð·Ð¼Ð°Ðº â€ž%pAâ€œâ€ž%pcrel_loâ€œ-Ñƒ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ â€ž%pcrel_hiâ€œâ€ž%pcrel_loâ€œ Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%pcrel_loâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼â€ž%pcrel_loâ€œ Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° â€žR_RISCV_GOT_HI20â€œâ€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð½Ð° ÑƒÐºÐ»Ð¾ÑšÐµÐ½Ð¾Ð¼ ÑƒÐ½Ð¾Ñ�Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°%s Ð´ÐµÐ»Ð¸ Ð½ÑƒÐ»Ð¾Ð¼â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¾
 â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¾ Ñƒ â€ž%sâ€œ
-â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°%s(%s): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%dâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld%s: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: 0x%lx > 0xffff%s: Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº%s: 0x%v 0x%v
-%s: Ð›Ð¾ÑˆÐ° Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: â€žMainâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð½Ð° â€ž%sâ€œ ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%sâ€œ
-%s: Ð“Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð·Ð° â€ž%sâ€œ; Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½ Ñƒ Ñ€Ð°Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸
-%s: Ð“Ð�Ð¡ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ ÐŸÐ¢Ð‘ â€žinsnâ€œ Ñ�Ð° â€žR_SH_PT_16â€œ%s: Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð·Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð·Ð°
- Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡ÐµÐ¼: Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾: 0x%lx%08lx != Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾: 0x%lx%08lx
-%s: Ð˜Ð·Ð²ÐµÐ·ÐµÐ½Ð° Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d%s: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° â€žLOCALâ€œ: Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ â€ž$%ldâ€œ Ð½Ð¸Ñ˜Ðµ Ð¼ÐµÑ�Ð½Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€.  ÐŸÑ€Ð²Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ñ˜Ðµ â€ž$%ldâ€œ.%s: ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%s: Ð�ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð´ÑƒÐ³Ð¾Ð³ %d Ð±Ð°Ñ˜Ñ‚Ð°
-%s: Ð�ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ð½Ð°Ð·Ð¸Ð²Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ
-%s: Ð¢Ð›Ð¡ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-Ð¢Ð›Ð¡ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¸ Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ%s: Ð¢Ð›Ð¡ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-Ð¢Ð›Ð¡ ÑƒÐ¿ÑƒÑ‚Ð¸ Ñƒ â€ž%Bâ€œ%s: Ð¢Ð›Ð¡ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ â€ž%Bâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-Ð¢Ð›Ð¡ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¸ Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ%s: Ð¢Ð›Ð¡ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ â€ž%Bâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-Ð¢Ð›Ð¡ ÑƒÐ¿ÑƒÑ‚Ð¸ Ñƒ â€ž%Bâ€œ%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð½Ð° 0x%x Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÐºÐ¾Ñ˜Ð¸ Ð½Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² ÑƒÐ½Ð¾Ñ�%s: ÐœÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)%s: ÐŸÑ€ÐµÐ»Ð°Ð·Ð°Ðº Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½%s: â€žXCOFFâ€œ Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ ÐºÐ°Ð´Ð° Ñ�Ðµ Ð½Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸ â€žXCOFFâ€œ Ð¸Ð·Ð»Ð°Ð·%s: â€ž__gpâ€œ Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ ÐºÑ€Ð°Ñ‚ÐºÐ¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°%s: Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð¸Ð·Ð° ÐºÑ€Ð°Ñ˜Ð° Ñ�Ñ‚Ð¾Ð¿Ñ™ÐµÐ½Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° (%ld)%s: Ð°Ð´Ñ€ÐµÑ�Ð° 0x%s Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ð¿Ð»ÑƒÑ� Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: â€ž%sâ€œ Ñƒ â€ž%sâ€œ%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ð¿Ð»ÑƒÑ� Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: (Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾) Ñƒ â€ž%sâ€œ%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ â€ža.outâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ â€žoasysâ€œ%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ža.outâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð·Ð° Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %d, %d Ð±Ð°Ñ˜Ñ‚Ð°
-%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð¿Ñ€Ð¸Ð²Ð¸Ð´Ð½Ð¸ ÑƒÐ½Ð¾Ñ� â€ž%sâ€œ%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ â€žfdpicâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ Ð½Ðµ-â€žfdpicâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ñƒ%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ð½Ðµ-â€žfdpicâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ â€žfdpicâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ñƒ%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 64-Ð±Ð¸Ñ‚Ð½Ð¸%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž%sâ€œ%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð½Ðµ-â€žPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð´Ð¾Ð´Ð°Ñ‚Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð½Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ%s: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° â€žLOCALâ€œ Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ñ�Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð¼ Ð¸Ð»Ð¸ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð¼ Ð²Ñ€ÐµÐ´Ð½Ð¾ÑˆÑ›Ñƒ%s: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð±ÐµÐ· â€ž.loaderâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°%s: Ð½Ð°Ð¸ÑˆÐ°Ð¾ Ñ�Ð°Ð¼ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð°Ñ‚Ð¿Ð¸Ñ�Ð° Ð´Ð°Ñ‚ÑƒÐ¼Ð° Ñƒ ÑƒÐ»Ð°Ð·Ñƒ%s: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð½Ð° %08x Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ %08x
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ%s: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°, ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° â€ž%sâ€œ Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
-%s: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°, Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¸Ð· %d Ñƒ %d Ñ€ÐµÑ‡Ð¸
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: YZ â€žlop_endâ€œ-Ð° (%ld) Ð½Ð¸Ñ˜Ðµ Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ Ñ�Ð° Ð±Ñ€Ð¾Ñ˜ÐµÐ¼ Ñ‚ÐµÑ‚Ñ€Ð°Ñ�Ð° Ð´Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾Ð³ â€žlop_stabâ€œ-Ð° (%ld)
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… YZ = 1 Ð´Ð¾Ð±Ð¸Ñ… YZ = %d Ð·Ð° â€žlop_quoteâ€œ
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… y = 0 Ð´Ð¾Ð±Ð¸Ñ… y = %d Ð·Ð° â€žlop_fixrxâ€œ
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 1 Ð¸Ð»Ð¸ z = 2, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_fixoâ€œ
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 1 Ð¸Ð»Ð¸ z = 2, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_locâ€œ
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 16 Ð¸Ð»Ð¸ z = 24, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_fixrxâ€œ
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¿Ð¾Ñ™Ðµ y Ð¸ z â€žlop_stabâ€œ-Ð° Ð½Ð¸Ñ˜Ðµ Ð½ÑƒÐ»Ð°, y: %d, z: %d
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð·Ð° Ð±Ñ€Ð¾Ñ˜ %d Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½ Ð¿Ñ€Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ðµ
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %d â€ž%sâ€œ, Ñ˜Ðµ Ð²ÐµÑ› ÑƒÐ½ÐµÑˆÐµÐ½ ÐºÐ°Ð¾ â€ž%sâ€œ
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° Ð·Ð° $255 Ð½Ð¸Ñ˜Ðµ â€žMainâ€œ
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ð¾Ð´ÐµÑ›Ð¸ Ð±Ð°Ñ˜Ñ‚ Ñ€ÐµÑ‡Ð¸ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ 0 Ð¸Ð»Ð¸ 1, Ð´Ð¾Ð±Ð¸Ñ… %d Ð·Ð° â€žlop_fixrxâ€œ
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: â€žlop_endâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ð»ÐµÐ´ÑšÐ° Ñ�Ñ‚Ð°Ð²ÐºÐ° Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð»Ð¾Ð¿ÐºÐ¾Ð´ â€ž%dâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÑƒÐ¶Ð¸Ð½Ðµ %ld: 0x%lx%08lx
-%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ
-%s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff%s: Ð½ÐµÐ¼Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° 0
-%s: Ð½ÐµÐ¼Ð° Ñ‚Ð°ÐºÐ²Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°%s: Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾%s: Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%s: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ñ†Ð¸Ñ™Ð° â€ž%sâ€œ%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð½Ðµ-Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: â€ž%sâ€œ Ñƒ â€ž%sâ€œ%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð½Ðµ-Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: (Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾) Ñƒ â€ž%sâ€œ%s: Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð²ÐµÐ·Ð° Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°%s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° ÐºÑ€Ð°Ñ‚ÐºÐ¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (0x%lx >= 0x400000)%s: Ð½Ð¸Ñ�ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³Ð° (%d Ð·Ð½Ð°ÐºÐ°, Ð½Ð°Ñ˜Ð². 65535)%s: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° %ld
-%s: Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ: %s%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ 0x%x%s: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%02x%s: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ ÑˆÐ¸Ñ€Ð¾ÐºÐ¸ Ð½Ð¸Ð· Ð·Ð½Ð°ÐºÐ° 0x%02X 0x%02X Ð½Ð°ÐºÐ¾Ð½ Ð½Ð°Ð·Ð¸Ð²Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° ÐºÐ¾Ñ˜Ð¸ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ñ�Ð° â€ž%sâ€œ
-%s: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (0x%lx) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (0x%lx)%s: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (0x%lx) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (0x%lx)%s: Ð±Ñ€Ð¾Ñ˜ Ð¸Ð·Ð´Ð°ÑšÐ° (%ld) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (%ld)%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð°%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ 0x%x Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žGOTâ€œ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº â€ž%ldâ€œ-Ð° Ð·Ð° â€ž%sâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾Ð¼ â€žGOTâ€œ Ñ�Ð°Ð±Ð¸Ñ€ÐºÑƒ â€ž%ldâ€œ-Ð°%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žPLTâ€œ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº â€ž%dâ€œ-Ð° Ð·Ð° â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€žR_NDS32_25_ABS_RELAâ€œ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ.%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð²ÐµÐ»Ð¸ÐºÐ° Ð·Ð° â€žmmoâ€œ, Ð²ÐµÑ›Ð° Ð¾Ð´ 65535 32-Ð±Ð¸Ñ‚Ð½Ð¸Ñ… Ñ€ÐµÑ‡Ð¸: %d.  Ð¡Ð°Ð¼Ð¾ â€žMainâ€œ Ð±Ð¸Ñ›Ðµ Ð´Ð°Ñ‚Ð¾.
-%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°. Ð—Ð° ÑƒÐ½Ð¾Ñ�: {%d, %d, %d}, Ð°Ð´Ñ€ÐµÑ�Ð° = 0x%x, Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ = 0x%x.(Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð±Ð¸Ñ‚Ð° %u)
+â€ž%sâ€œ Ð¸Ð¼Ð° Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾ Ð¸ â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµâ€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð°Ð»Ð¸ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸: %sâ€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð°Ð»Ð¸ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ° Ð¿Ñ€Ð¸ÐºÑ™ÑƒÑ‡ÐºÐ° Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½Ð°â€ž%sâ€œ Ñ˜Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ð½Ð¾ Ð°Ð»Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾: %sâ€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñƒ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ñƒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼ â€ž%pAâ€œâ€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€ž%sâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº Ð·Ð° â€ž.eh_frame sdata4â€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ%s, Ð¿Ð¾Ð½Ð°Ð²Ñ™Ð°ÑšÐµ %u
+  Ð³Ñ€Ð°Ð½Ð°          %lu
+  Ð´ÑƒÐ³Ð° Ð³Ñ€Ð°Ð½Ð°     %lu
+  â€žpltâ€œ Ð¿Ð¾Ð·Ð¸Ð²    %lu
+  Ð¾Ð¿ÑˆÑ‚Ð¸ ÑƒÐ½Ð¾Ñ�     %lu%s: Ð›Ð¾Ñˆ ELF Ð¸Ð´: â€ž%dâ€œ%s: ISA Ð½Ð¸Ñ�ÐºÐ° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ‚Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ° Ñ�Ð»Ð¾Ð²Ð°%s: ISA Ð½Ð¸Ñ�ÐºÐ° Ð¼Ð¾Ñ€Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð¸ Ñ�Ð° â€žrv32â€œ Ð¸Ð»Ð¸ â€žrv64â€œ%s: â€žTLSâ€œ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-â€žTLSâ€œ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¸ Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ%s: â€žTLSâ€œ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð¸ Ñƒ â€ž%pBâ€œ%s: â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ â€ž%pBâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-â€žTLSâ€œ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¸ Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ%s: â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ â€ž%pBâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð¸ Ñƒ â€ž%pBâ€œ%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 64-Ð±Ð¸Ñ‚Ð½Ð¸%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸%s: Ð¿Ñ€Ð²Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ â€žeâ€œ, â€žiâ€œ Ð¸Ð»Ð¸ â€žgâ€œ%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð° Ñ�Ð° <Ð±Ñ€Ð¾Ñ˜>p%s: Ð½ÐµÐ¼Ð° Ñ‚Ð°ÐºÐ²Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°%s: Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾%s: Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾%s: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ñ†Ð¸Ñ™Ð° â€ž%sâ€œ%s: Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ñ�Ðµ Ð¼Ð¾Ñ€Ð° Ñ€Ð°Ð·Ð´Ð²Ð¾Ñ˜Ð¸Ñ‚Ð¸ Ñ�Ð° â€ž_â€œ%s: Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ: %s%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ð¸Ð»Ð¸ ÐºÐ»Ð°Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð° â€ž%câ€œ(Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð±Ð¸Ñ‚Ð° %u)
 (Ð¾Ð¿Ð¸Ñ�Ð½Ð¸Ðº)
+(Ð·Ð°Ð¿Ð¸Ñ� %c%c%c%c Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ� %s Ñ�Ñ‚Ð°Ñ€Ð¾Ñ�Ñ‚ %ld Ð¿Ð´Ð± %s)
 (Ð±ÐµÐ· Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸)
 (Ð½Ð¸Ñ˜Ðµ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾)
 (Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¾)
@@ -985,48 +1220,51 @@ Plural-Forms: nplurals=3; plural=(n%10==
 )
 *** Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð°Ð²Ð° Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ*Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð¾*
 *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð´Ñ�Ñ‚ Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ
-*Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾**Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾*        , 8-Ð±Ð¸Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°, Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: %#08lx
+*Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾**Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾*             , Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: %#08lx
 , Ð°Ð»Ð¸Ñ˜Ð°Ñ�: %u
 , Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð¿Ð¾Ñ™Ð½Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° â€žno_optâ€œ-Ð°: %u, Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð°: %u (%s)
-, Ð²ÐµÐºÑ‚Ð¾Ñ€ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€Ð²Ð°: â€” â€ž%sâ€œ Ñ˜Ðµ Ð“10, â€ž%sâ€œ Ð½Ð¸Ñ˜ÐµÐ¾Ð´ÐµÑ™Ð°Ðº â€ž.gotâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ð¼Ð°Ñ… Ð½Ð°ÐºÐ¾Ð½ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pltâ€œÐ�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð»Ð¸Ñ�Ñ‚ÑƒÐ�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¸Ð·Ð´Ð°ÑšÐ° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ñƒ
-Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð¸ Ñ�Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¾Ñ�Ð¾Ð±ÐµÐ½Ð¾Ñ�Ñ‚Ð¸Ð¼Ð°
-Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚: %sÐ�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¸Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ðµ Ð½Ð¸Ñ�ÐºÐµ: %dÐ�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð½Ðµ-Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°Ð½Ð¸Ñ… Ð¸Ñ�Ð¿Ð¾Ñ™Ð°Ð²Ð°ÑšÐ°32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¼ÐµÑˆÐ¾Ð²Ð¸Ñ‚Ð¸, Ð´Ð¾ÑˆÐ»Ð¾ Ñ˜Ðµ Ð´Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³ Ð³Ð¿ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°64 Ð±Ð¸Ñ‚Ð° *Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾*
-64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¼ÐµÑˆÐ¾Ð²Ð¸Ñ‚Ð¸, : %u.%u
-: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žm32râ€œ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žm32r2â€œ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žm32rxâ€œ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žn1â€œ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žn1hâ€œ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ<Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ñ�ÐºÑƒÐ¿ Ð±Ð¸Ñ‚Ð¾Ð²Ð° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ><Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð½Ð¸Ñ�ÐºÐµ: %#x><Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ: %#lx><Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾>â€ž@pltoffâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°Ð�Ñ€Ñ…Ð¸Ð²Ð° Ð½ÐµÐ¼Ð° Ð¸Ð½Ð´ÐµÐºÑ�; Ð¿Ð¾ÐºÑ€ÐµÐ½Ð¸Ñ‚Ðµ â€žranlibâ€œ Ð´Ð° Ð³Ð° Ð´Ð¾Ð´Ð°Ñ‚ÐµÐ”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð°Ñ€Ñ…Ð¸Ð²Ðµ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜ Ð¿Ñ€ÐµÑ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€žL32R/CALLXâ€œ Ñƒ â€žCALLâ€œ Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ÐŸÐ¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ñƒ Ð²ÐµÐ·Ñƒ Ñ�Ð° â€ž%sâ€œ ÑƒÐ»Ð°Ð·Ð¾Ð¼ Ð¸ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·Ð¾Ð¼Ð¡Ð›Ð˜ÐšÐ�_ÐžÐ¡Ð�ÐžÐ’Ð•       â€žBFDâ€œ â€ž%sâ€œ Ñ‚Ð²Ñ€Ð´ÑšÐ° Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð° â€ž%sâ€œ:%dÐ£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ð‘Ð¤Ð”-Ð° %s, Ð¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð¼ Ð¿Ñ€Ð¸ â€ž%sâ€œ %d. Ñ€ÐµÐ´Ñƒ
-Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ð‘Ð¤Ð”-Ð° %s, Ð¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð¼ Ð¿Ñ€Ð¸ â€ž%sâ€œ %d. Ñ€ÐµÐ´Ñƒ Ñƒ â€ž%sâ€œ
-Ð³Ñ€ÐµÑˆÐºÐ° Ð‘Ð¤Ð” Ð²ÐµÐ·Ðµ: Ð³Ñ€Ð°Ð½Ð°ÑšÐµ (PC rel16) Ñƒ Ð¾Ð´ÐµÑ™Ð°Ðº (%s) Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾Ð³Ñ€ÐµÑˆÐºÐ° Ð‘Ð¤Ð” Ð²ÐµÐ·Ðµ: ÑƒÑ�ÐºÐ°ÐºÐ°ÑšÐµ (PC rel26) Ñƒ Ð¾Ð´ÐµÑ™Ð°Ðº (%s) Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ÐŸÐ¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾Ñ�Ð½Ð¾Ð²Ðµ [.reloc]Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ ÑƒÐ²Ð¾Ð·Ð° Ñ�Ð²ÐµÐ·Ð°Ð“Ñ€Ð°Ð½Ð¸Ñ†Ðµ:
-ÐšÐ›Ð˜Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¦Ð›Ð  Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°ÐœÐ“Ð Ð—Ð�ÐšÐ‰Ð£Ð§Ð�Ð’Ð�ÐŠÐ•_ÐšÐ›Ð�Ð¡Ð¢Ð•Ð Ð� Ð‘Ð ÐžÐˆÐ�Ð§Ð˜         Ð¦ÐŸÐ£              CTL_AUGRB (Ð¿Ð¾Ð²ÐµÑ›Ð°Ð²Ð° Ð¾Ñ�Ð½Ð¾Ð²Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°) %u
+, Ð²ÐµÐºÑ‚Ð¾Ñ€ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€Ð²Ð°: â€” â€ž%pBâ€œ Ñ˜Ðµ 64-Ð±Ð¸Ñ‚Ð½Ð¾, â€ž%pBâ€œ Ð½Ð¸Ñ˜Ðµ-mips32r2 -mfp64 (12 Ð¿Ð¾Ð·Ð¸Ð²Ð°Ð¾Ñ†Ð°-Ñ�Ð°Ñ‡ÑƒÐ²Ð°Ð½Ð¾)Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€ž.eh_frame_hdrâ€œ ÑƒÐ½Ð¾Ñ�Ð°â€ž.eh_frame_hdrâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°Ñ˜ÑƒÑ›Ðµ â€žFDEâ€œ-Ð¾Ð²ÐµÐ¾Ð´ÐµÑ™Ð°Ðº â€ž.gotâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ð¼Ð°Ñ… Ð½Ð°ÐºÐ¾Ð½ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pltâ€œÐ½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð»Ð¸Ñ�Ñ‚ÑƒÐ½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¸Ð·Ð´Ð°ÑšÐ° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜ÑƒÐ½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð¸ Ñ�Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¾Ñ�Ð¾Ð±ÐµÐ½Ð¾Ñ�Ñ‚Ð¸Ð¼Ð°Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚: %sÐ½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¸Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ðµ Ð½Ð¸Ñ�ÐºÐµ: %dÐ½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð½Ðµ-Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°Ð½Ð¸Ñ… Ð¸Ñ�Ð¿Ð¾Ñ™Ð°Ð²Ð°ÑšÐ°32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¼ÐµÑˆÐ¾Ð²Ð¸Ñ‚Ð¸, Ð´Ð¾ÑˆÐ»Ð¾ Ñ˜Ðµ Ð´Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³ Ð³Ð¿ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°4-Ð±Ð¸Ñ‚Ð°4-Ð±Ð°Ñ˜Ñ‚Ð°64 Ð±Ð¸Ñ‚Ð° *Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾*
+64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¼ÐµÑˆÐ¾Ð²Ð¸Ñ‚Ð¸, 8-Ð±Ð¸Ñ‚Ð°8-Ð±Ð°Ñ˜Ñ‚Ð°: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žm32râ€œ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žm32r2â€œ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žm32rxâ€œ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žn1â€œ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žn1hâ€œ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPIEâ€œ<Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸> %s<Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð½Ð¸Ñ�ÐºÐµ: %#x>
+<Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ: %#lx>
+<Ð¾ÑˆÑ‚ÐµÑ›ÐµÑšÐµ><Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð°: %d>
+<Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¼Ð°Ñ�ÐºÐµ><Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾>â€ž@pltoffâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°Ð¡Ð›Ð˜ÐšÐ�_ÐžÐ¡Ð�ÐžÐ’Ð•            â€žBFDâ€œ â€ž%sâ€œ Ñ‚Ð²Ñ€Ð´ÑšÐ° Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð° â€ž%sâ€œ:%dÐ£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° â€žBFDâ€œ %s, Ð¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð¼ Ð¿Ñ€Ð¸ â€ž%sâ€œ %d. Ñ€ÐµÐ´Ñƒ
+Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° â€žBFDâ€œ %s, Ð¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð¼ Ð½Ð° â€ž%sâ€œ %d. Ñ€ÐµÐ´Ñƒ Ñƒ â€ž%sâ€œ
+Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾Ñ�Ð½Ð¾Ð²Ðµ [.reloc]Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ ÑƒÐ²Ð¾Ð·Ð° Ñ�Ð²ÐµÐ·Ð°Ð“Ñ€Ð°Ð½Ð¸Ñ†Ðµ:
+â€žCACHEâ€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ: CLIÐ—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¦Ð›Ð  Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°ÐœÐ“Ð Ð—Ð�ÐšÐ‰Ð£Ð§Ð�Ð’Ð�ÐŠÐ•_ÐšÐ›Ð�Ð¡Ð¢Ð•Ð Ð� Ð‘Ð ÐžÐˆÐ�Ð§Ð˜                 Ð¦ÐŸÐˆ                     CTL_AUGRB (Ð¿Ð¾Ð²ÐµÑ›Ð°Ð²Ð° Ð¾Ñ�Ð½Ð¾Ð²Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°) %u
 CTL_DFLOC (Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ Ð¼ÐµÑ�Ñ‚Ð¾)
 CTL_SETRB (Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð° Ð¾Ñ�Ð½Ð¾Ð²Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°)
 CTL_STKDL (Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ¾Ð¼ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð¾)
 CTL_STLOC (Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð° Ð¼ÐµÑ�Ñ‚Ð¾)
-Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð°ÑƒÑ‚Ð¾Ñ€Ñ�ÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²Ð°
+Coolidge (kv3) V1 32 Ð±Ð¸Ñ‚Ð°Coolidge (kv3) V1 64 Ð±Ð¸Ñ‚Ð°Coolidge (kv3) V2 32 Ð±Ð¸Ñ‚Ð°Coolidge (kv3) V2 64 Ð±Ð¸Ñ‚Ð°Coolidge (kv4) V1 32 Ð±Ð¸Ñ‚Ð°Coolidge (kv4) V1 64 Ð±Ð¸Ñ‚Ð°Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð°ÑƒÑ‚Ð¾Ñ€Ñ�ÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²Ð°
 ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº!
-Ð”Ð¡Ðž Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð½Ð° Ð»Ð¸Ð½Ð¸Ñ˜Ð¸ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸â€žDST__K_BEG_STMT_MODEâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€žDST__K_END_STMT_MODEâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€žDST__K_RESET_LINUM_INCRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€žDST__K_SET_LINUM_INCRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€žDST__K_SET_LINUM_INCR_Wâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€žDST__K_SET_PCâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€žDST__K_SET_PC_Lâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€žDST__K_SET_PC_Wâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€žDST__K_SET_STMTNUMâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°Ð¢Ð°Ð±ÐµÐ»Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°:
+â€žDSOâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð½Ð° Ð»Ð¸Ð½Ð¸Ñ˜Ð¸ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ð° â€žDW_AT_comp_dirâ€œ Ñ˜Ðµ Ð½Ð°Ñ’ÐµÐ½Ð° Ñ�Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¾Ð¼ Ð½Ðµ-Ð½Ð¸Ñ�ÐºÐµâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ±Ð°Ñ‡ÐµÑšÐµ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¾Ð³ Ð¿Ñ€Ð¸Ð¼ÐµÑ€ÐºÐ° Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜ %uâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´Ñ€ÐµÐ´Ð±Ñƒ Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ðµ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ 0Ã—%lxâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ð°Ñ’Ð¾Ñ… Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%uâ€œ, Ð¾Ð²Ð°Ñ˜ Ñ‡Ð¸Ñ‚Ð°Ñ‡ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ€Ð°Ð´Ð¸ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°Ð¼Ð° Ð²ÐµÑ›Ð¸Ð¼ Ð¾Ð´ â€ž%uâ€œâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ð°Ñ’Ð¾Ñ… â€žDWARFâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%uâ€œ, Ð¾Ð²Ð°Ñ˜ Ñ‡Ð¸Ñ‚Ð°Ñ‡ Ñ€Ð°Ð´Ð¸ Ñ�Ð°Ð¼Ð¾ Ñ�Ð° Ð¿Ð¾Ð´Ð°Ñ†Ð¸Ð¼Ð° Ð¸Ð·Ð´Ð°ÑšÐ° 2, 3, 4 Ð¸ 5â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð½Ñ„Ð¾ ÑƒÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ ÐºÑ€Ð°Ñ˜ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð°Ð½ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ðº â€žDIEâ€œ ÑƒÐ¿ÑƒÑ‚Ðµâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð° Ð¿Ð¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¸â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žFORMâ€œ: %#xâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¸Ð·Ð±Ð¸Ñ€Ð°Ñ‡Ð° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° %uâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½ (Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ)â€žDWARFÐ´ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð½ÐµÑ�Ñ‚Ð°Ð»Ð¾ Ñ˜Ðµ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ñ‡Ð¸Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ð¾Ð¿ÐºÐ¾Ð´Ð¾Ð²Ðµâ€žDWARFÐ´ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð½ÐµÑ�Ñ‚Ð°Ð»Ð¾ Ñ˜Ðµ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ñ‡Ð¸Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ð¿Ñ€Ð¾Ð»Ð¾Ð³â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ð¸ÑˆÑ‚Ð°â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðºâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ â€ž.debug_lineâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %dâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÑƒÐ»Ñ‚Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð·Ð°Ð¿Ð¸Ñ�Ð°â€žDW_EH_PE_datarelâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð²Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€ÑƒÐ”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°Ð¢Ð°Ð±ÐµÐ»Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°:
 Ð¢Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°:
-Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð·Ð°Ñ�Ñ‚Ð¾Ñ˜Ð° ÑƒÐ²Ð¾Ð·Ð°Ð—Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾
-Ð—Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñƒ â€ž%sâ€œ %d. Ñ€ÐµÐ´ Ñƒ â€ž%sâ€œ
-Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð¿Ð¸Ñ�Ð°â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð›Ð¾Ñˆ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜: %u.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜ %u.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð° Ð¿Ð¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¸.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žFORMâ€œ: %#x.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜ (%lu) Ñ˜Ðµ >= Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ %s (%lu).â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žaltâ€œ ÑƒÐ¿ÑƒÑ‚Ñƒ %u.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ â€ž.debug_lineâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ñ’Ð¾Ñ… Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%uâ€œ, Ð¾Ð²Ð°Ñ˜ Ñ‡Ð¸Ñ‚Ð°Ñ‡ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ€Ð°Ð´Ð¸ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°Ð¼Ð° Ð²ÐµÑ›Ð¸Ð¼ Ð¾Ð´ â€ž%uâ€œ.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ñ’Ð¾Ñ… â€žDWARFâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%uâ€œ, Ð¾Ð²Ð°Ñ˜ Ñ‡Ð¸Ñ‚Ð°Ñ‡ Ñ€Ð°Ð´Ð¸ Ñ�Ð°Ð¼Ð¾ Ñ�Ð° Ð¿Ð¾Ð´Ð°Ñ†Ð¸Ð¼Ð° Ð¸Ð·Ð´Ð°ÑšÐ° 2, 3 Ð¸ 4.â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð‘Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½ (Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ).â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð‘Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½.EIHD: (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð±Ñ€Ð¾Ñ˜ Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°: %u)
-ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÐ½Ð¾Ñ�Ð°       = 0x%.8lx (%ld)
-Ð“Ñ€ÐµÑˆÐºÐ° Ñ‡Ð¸Ñ‚Ð°ÑšÐ° â€ž%sâ€œ: %sÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð�Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐµ Ñ‚Ð¾ÐºÐ¾Ð¼ Ð¾Ð±Ñ€Ð°Ð´Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œÐ”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·ÑƒÐ·ÐµÑ‚Ð°ÐºÐ° [.pdata]Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·Ð²Ð¾Ð·Ð° [â€ž.edataâ€œ (Ð¸Ð»Ð¸ Ñ‚Ð°Ð¼Ð¾ Ð³Ð´Ðµ Ñ�Ð¼Ð¾ Ð³Ð° Ð½Ð°ÑˆÐ»Ð¸)]Ð—Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° 		%lx
-RVA Ð¸Ð·Ð²Ð¾Ð·Ð°Ð�Ð˜Ð¡Ð�Ðœ Ð£Ð¡ÐŸÐ•Ðž Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žHI16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ’ÐžÐ›Ð£ÐœÐ•Ð�Ð˜_Ð”Ð�Ð¢ÐžÐ¢Ð•ÐšÐ�    Ð—Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜Ðµ Ð½ÐµÑ˜Ð°Ñ�Ð°Ð½Ð—Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°Ð”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¾ÐºÑ€ÑšÐµÐ½Ð°ÐŸÐ¾Ñ™Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ      = 0x%.2x
-RVA Ð¿Ñ€ÐµÐ¾Ñ�Ð»ÐµÑ’Ð¸Ð²Ð°Ñ‡Ð°Ð“Ð�Ð›Ð�ÐšÐ¡Ð˜ÐˆÐ�           Ð£Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ˜Ðµ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð“ÐŸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾â€žGPDISPâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð½Ð°ÑˆÐ»Ð¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žldahâ€œ Ð¸ â€žldaâ€œÐ¢Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿ÑˆÑ‚Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°:
-Ð˜Ð”: %#08lxIDC â€” ÐŸÑ€Ð¾Ð²ÐµÑ€Ð° Ð´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐ°
-ÐŸÐžÐšÐ Ð•Ð¢Ð�Ð§_Ð¡Ð›Ð˜ÐšÐ•  â€žINPUT_SECTION_FLAGSâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾.
-Ð£Ð˜               Ð�ÐºÑ‚Ð¸Ð²Ð¸Ñ€Ð°ÑšÐµ Ñ�Ð»Ð¸ÐºÐµ:  (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°=%u)
+Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð·Ð°Ñ�Ñ‚Ð¾Ñ˜Ð° ÑƒÐ²Ð¾Ð·Ð°Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð¿Ð¸Ñ�Ð°EIHD: (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð±Ñ€Ð¾Ñ˜ Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°: %u)
+ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÐ½Ð¾Ñ�Ð°   = 0x%.8lx (%ld)
+Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° â€žDSPâ€œ Ð¸Ð·Ð´Ð°ÑšÐ°Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ðµ â€žFPU ABIâ€œÐ“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° â€žVDSPâ€œ Ð¸Ð·Ð´Ð°ÑšÐ°Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·ÑƒÐ·ÐµÑ‚Ð°ÐºÐ° [.pdata]Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·Ð²Ð¾Ð·Ð° [â€ž.edataâ€œ (Ð¸Ð»Ð¸ Ñ‚Ð°Ð¼Ð¾ Ð³Ð´Ðµ Ñ�Ð¼Ð¾ Ð³Ð° Ð½Ð°ÑˆÐ»Ð¸)]Ð—Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° 		%lx
+â€žRVAâ€œ Ð¸Ð·Ð²Ð¾Ð·Ð°â€žFDEâ€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ Ñƒ â€ž%pB(%pA)â€œ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ â€ž.eh_frame_hdrâ€œ Ñ‚Ð°Ð±ÐµÐ»Ðµâ€žFDPICâ€œ Ñ˜Ð¾Ñˆ ÑƒÐ²ÐµÐº Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð´Ð° Ð±Ð¸ Ð¿Ð¾Ñ�Ñ‚Ð°Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð·Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½ÐµÐ’ÐžÐ›Ð£ÐœÐ•Ð�Ð˜_Ð”Ð�Ð¢ÐžÐ¢Ð•ÐšÐ�       FPU-2.0FPU-3.0ÐŸÐ¾Ñ™Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  = 0x%.2x
+â€žRVAâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’Ð¸Ð²Ð°Ñ‡Ð°Ð“Ð�Ð›Ð�ÐšÐ¡Ð˜ÐˆÐ�               â€žGNU_MBINDâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°â€žGNU_RETAINâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°â€žGOTâ€œ Ð¸ â€žPLTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ð¸Ñ‚Ð¸ Ñ�Ð° Ð½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ð¼ ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ÐµÐ¼Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žGOTâ€œ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ˜Ðµ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾â€žGPDISPâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð½Ð°ÑˆÐ»Ð¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žldahâ€œ Ð¸ â€žldaâ€œÐ¢Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿ÑˆÑ‚Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°:
+Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ð¸Ñ‚Ð½Ð¸ â€žFPUâ€œ)
+Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, Ð±Ð¸Ð»Ð¾ ÐºÐ¾Ñ˜Ð¸ â€žFPUâ€œ)
+Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (â€žMIPS32r2â€œ 64-Ð±Ð¸Ñ‚Ð° â€žFPU 12 callee-savedâ€œ)
+Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ° Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚)
+Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (Ñ˜ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ° Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚)
+Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¾ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð¼ Ð·Ð°Ñ€ÐµÐ·Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ (32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ð¸Ñ‚Ð½Ð¸ â€žFPUâ€œ)
+Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¸Ð»Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·
+â€žIBTâ€œ Ð¸ â€žSHSTKâ€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð°â€žIBTâ€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾Ð˜Ð”: %#08lxIDC â€” ÐŸÑ€Ð¾Ð²ÐµÑ€Ð° Ð´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐ°
+â€žIFUNCâ€ž Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€“ â€žIFUNCSâ€œ Ð½Ð¸Ñ�Ñƒ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ÐµÐŸÐžÐšÐ Ð•Ð¢Ð�Ð§_Ð¡Ð›Ð˜ÐšÐ•          â€žINPUT_SECTION_FLAGSâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾Ð£Ð˜                      Ð�ÐºÑ‚Ð¸Ð²Ð¸Ñ€Ð°ÑšÐµ Ñ�Ð»Ð¸ÐºÐµ:  (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°=%u)
 Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°Ñ‡Ð° Ñ�Ð»Ð¸ÐºÐµ: (Ð²ÐµÑ›Ð¸: %u, Ð¼Ð°ÑšÐ¸: %u)
 ÐŸÑ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°ÑšÐµ Ñ�Ð»Ð¸ÐºÐµ: (Ð²ÐµÑ›Ðµ: %u, Ð¼Ð°ÑšÐµ: %u)
 ÐžÐ¿Ð¸Ñ�Ð½Ð¸Ðº Ð¾Ð´ÐµÑ™ÐºÐ° Ñ�Ð»Ð¸ÐºÐµ: (Ð²ÐµÑ›Ð¸: %u, Ð¼Ð°ÑšÐ¸: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: %u)
 Ð¡Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð»Ð¸ÐºÐµ Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°: (Ð²ÐµÑ›Ðµ: %u, Ð¼Ð°ÑšÐµ: %u)
-Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ðµ ÑƒÐ²Ð¾Ð·Ð° Ð°Ð´Ñ€ÐµÑ�ÐµÐ”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ ÑƒÐ²Ð¾Ð·Ð° [Ð´ÐµÐ¾ â€ž.idataâ€œ]Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚: Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ñ˜Ðµ %u != Ð½Ð°Ñ˜Ð². %u.
-  ÐŸÑ€Ð¸Ñ˜Ð°Ð²Ð¸Ñ‚Ðµ Ð¾Ð²Ñƒ Ð³Ñ€ÐµÑˆÐºÑƒ.Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žTARGET2â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ.Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ†Ð¸Ñ™ Ð±Ñ„Ð´-Ð°Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð°Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žETIRâ€œ-Ñƒâ€žJALXâ€œ Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜ÑƒÐ›ÐžÐ“Ð˜Ð§ÐšÐ˜_Ð�Ð�Ð—Ð˜Ð’Ð˜    Ð�Ð°Ð·Ð¸Ð² Ñ˜ÐµÐ·Ð¸ÐºÐ° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°
-Ð”ÑƒÐ¶Ð¸Ð½Ð°              = 0x%.8lx (%ld)
-ÐŸÐ¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ð³Ñ€ÐµÑˆÐºÑƒ â€žex9â€œ Ñ…ÐµÑˆ Ñ‚Ð°Ð±ÐµÐ»Ðµ 
-ÐŸÐ¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡: Ð³Ñ€ÐµÑˆÐºÐ° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ð¸ â€žex9â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ 
-Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐ° ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ°Ð£ÐŸÐ Ð�Ð’Ð‰Ð�ÐŠÐ•_ÐœÐ•ÐœÐžÐ Ð˜ÐˆÐžÐœÐ¤ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€žMIPS16â€œ Ð¸ â€žmicroMIPSâ€œ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð·Ð¸Ð²Ð°Ñ˜Ñƒ Ñ˜ÐµÐ´Ð½Ð° Ð´Ñ€ÑƒÐ³ÑƒÐ Ð�Ð—Ð�Ðž             Ð’Ð˜Ð¨Ð•_ÐžÐ‘Ð Ð�Ð”Ð�Ðž Ð’ÐµÑ›Ð¸/ÐœÐ°ÑšÐ¸ 			%d/%d
-Ð›Ð¾ÑˆÐ° Ð°Ñ€Ñ…Ð¸Ð²Ð°Ð�Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ñ˜Ðµ 0x%v
-MeP: â€žhowtoâ€œ â€ž%dâ€œ Ð¸Ð¼Ð° Ð²Ñ€Ñ�Ñ‚Ñƒ â€ž%dâ€œÐœÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�Ñ†Ñ€Ð¿Ñ™ÐµÐ½Ð°Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¼Ð¾Ð´ÑƒÐ»Ð°
-ÐœÐ Ð•Ð–Ð•         NORMALÐ�Ð°Ð·Ð¸Ð² 				Ð�ÐµÐ¼Ð° Ð³Ñ€ÐµÑˆÐºÐµÐ�ÐµÐ¼Ð° Ð²Ð¸ÑˆÐµ Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ€Ð°Ð½Ð¸Ñ… Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð�ÐµÐ¼Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°Ð�Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸ÐºÐ°Ð·Ð°Ñ‚Ð¸Ð�ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð·Ð° Ñ€ÐµÑ’Ð°ÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°Ð‘Ñ€Ð¾Ñ˜ ÑƒÐ»Ð°Ð·Ð°:
+Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ðµ ÑƒÐ²Ð¾Ð·Ð° Ð°Ð´Ñ€ÐµÑ�ÐµÐ”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ ÑƒÐ²Ð¾Ð·Ð° [Ð´ÐµÐ¾ â€ž.idataâ€œ]Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð¸Ð¶Ð½Ð¾.â€žLAM_U48â€œ propertyâ€žLAM_U57â€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾Ð›ÐžÐ“Ð˜Ð§ÐšÐ˜_Ð�Ð�Ð—Ð˜Ð’Ð˜           Ð�Ð°Ð·Ð¸Ð² Ñ˜ÐµÐ·Ð¸ÐºÐ° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°
+Ð”ÑƒÐ¶Ð¸Ð½Ð°          = 0x%.8lx (%ld)
+Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐ° ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ°Ð›Ð¾ÐºÐ°Ð»Ð½Ð° â€žIFUNCâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ
+Ð£ÐŸÐ Ð�Ð’Ð‰Ð�ÐŠÐ•_ÐœÐ•ÐœÐžÐ Ð˜ÐˆÐžÐœ     Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€žMIPS16â€œ Ð¸ â€žmicroMIPSâ€œ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð·Ð¸Ð²Ð°Ñ˜Ñƒ Ñ˜ÐµÐ´Ð½Ð° Ð´Ñ€ÑƒÐ³ÑƒÐ Ð�Ð—Ð�Ðž                   â€žMMUâ€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ: Ð’Ð˜Ð¨Ð•_ÐžÐ‘Ð Ð�Ð”Ð�Ðž            Ð’ÐµÑ›Ð¸/ÐœÐ°ÑšÐ¸ 			%d/%d
+Ð�Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ñ˜Ðµ 0x%v
+MeP: â€žhowtoâ€œ â€ž%dâ€œ Ð¸Ð¼Ð° Ð²Ñ€Ñ�Ñ‚Ñƒ â€ž%dâ€œÐ¡Ñ‚Ð°Ð¿Ð°Ð¼ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°
+Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¼Ð¾Ð´ÑƒÐ»Ð°
+ÐœÐ Ð•Ð–Ð•                   NORMALÐ�Ð�ÐŸÐžÐœÐ•Ð�Ð�: ÐžÐ²Ð¾ Ð¿Ð¾Ð½Ð°ÑˆÐ°ÑšÐµ Ñ˜Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ Ð¸ Ð±Ð¸Ñ›Ðµ ÑƒÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñƒ Ð±ÑƒÐ´ÑƒÑ›ÐµÐ¼ Ð¸Ð·Ð´Ð°ÑšÑƒ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð�Ð°Ð·Ð¸Ð² 				Ð�Ð¸ÑˆÑ‚Ð°Ð‘Ñ€Ð¾Ñ˜ ÑƒÐ»Ð°Ð·Ð°:
 OPR_ADD (Ð·Ð±Ñ€Ð°Ñ˜Ð°)
 OPR_AND (Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¾ Ð˜)
 OPR_ASH (Ð°Ñ€Ð¸Ñ‚Ð¼ÐµÑ‚Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾Ð¼Ð°Ðº)
@@ -1044,27 +1282,26 @@ Plural-Forms: nplurals=3; plural=(n%10==
 OPR_SEL (Ð±Ð¸Ñ€Ð°)
 OPR_SUB (Ð¾Ð´ÑƒÐ·Ð¸Ð¼Ð°)
 OPR_USH (Ð¿Ð¾Ð¼Ð°Ðº Ð±ÐµÐ· Ð·Ð½Ð°ÐºÐ°)
-ÐœÐ¾Ð´ÑƒÐ» Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð�Ð˜ÐˆÐ• Ð±ÐµÐ· Ð³Ñ€ÐµÑˆÐ°ÐºÐ° !
 Ñ�ÐžÑ�Ð½Ð¾Ð²Ð° Ñ€ÐµÐ´Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°		%ld
-Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%sâ€œ
-Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%s.so.%sâ€œ
-ÐŸÐžÐ¡Ð˜ÐšÐ¡            Ð—Ð�ÐšÐ�Ð—Ð�Ð�Ð˜_ÐŸÐ ÐžÐ¦Ð•Ð¡Ð˜    PRVFXDPRVPICPSC â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°
-ÐŸÐ¢Ð� Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHcompactâ€œ (Ð±Ð¸Ñ‚ 0 == 0)ÐŸÐ¢Ð‘ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHmediaâ€œ (Ð±Ð¸Ñ‚ 0 == 1)Ð�Ð°Ð·Ð¸Ð² Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ     = â€ž%sâ€œ
-ÐšÑ€Ð°Ñ˜ Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]   = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
-Ð”ÑƒÐ¶Ð¸Ð½Ð° Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d] = 0x%.8lx (%ld)
-ÐžÐ´ÐµÑ™Ð°Ðº Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d] = 0x%.8lx (%ld)
+â€žPCâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¸ ÑƒÑ‚Ð¾Ð²Ð°Ñ€ Ð¸Ð· Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµâ€žPIEâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð°ÐŸÐžÐ¡Ð˜ÐšÐ¡                  Ð—Ð�ÐšÐ�Ð—Ð�Ð�Ð˜_ÐŸÐ ÐžÐ¦Ð•Ð¡Ð˜        PRVFXDPRVPICPSC â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°
+Ð�Ð°Ð·Ð¸Ð² Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ = â€ž%sâ€œ
+ÐšÑ€Ð°Ñ˜ Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]     = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
+Ð”ÑƒÐ¶Ð¸Ð½Ð° Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]   = 0x%.8lx (%ld)
+ÐžÐ´ÐµÑ™Ð°Ðº Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]   = 0x%.8lx (%ld)
 ÐŸÑ€Ð¸Ñ˜Ð°Ð²Ð¸Ñ‚Ðµ Ð¾Ð²Ñƒ Ð³Ñ€ÐµÑˆÐºÑƒ.
-â€žABI RL78/G10â€œ Ñ�ÑƒÐºÐ¾Ð±: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ Ð“10 Ð¸ Ð½Ðµ-Ð“10 Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµâ€žR_BFIN_FUNCDESCâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼â€žR_BFIN_FUNCDESC_VALUEâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼R_FRV_TLSMOFFLOâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žsetloâ€œ Ð¸Ð»Ð¸ â€žsetlosâ€œ
-Ð§Ð¸Ñ‚Ð°Ð¼ Ð²Ñ€ÐµÐ¼Ðµ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ñ€Ñ…Ð¸Ð²ÐµÐ£Ð¿ÑƒÑ›Ð¸Ð²Ð°ÑšÐµ Ð½Ð° Ð´Ð°Ð»ÐµÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¾Ð¼ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð¾Ð³ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ â€ž%%g%dâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½ Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾: â€ž%sâ€œ Ñƒ â€ž%Bâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%Bâ€œÐžÐ´ÐµÑ™Ð°Ðº Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
-ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð½Ðµ-Ð Ð•Ð› Ð¿-Ð¾Ð´ÐµÑ™Ð°ÐºÐ£ÐºÐ»Ð°ÑšÐ°Ð¼ Ð½ÐµÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€ž%Bâ€œÐ ÐµÐ·ÐµÑ€Ð²Ð¸Ñ�Ð°Ð½Ð¾Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ð° [.rsrc]Ð�Ð´Ñ€ÐµÑ�Ð° â€žS12â€œ (%lx) Ð½Ð¸Ñ˜Ðµ ÑƒÐ½ÑƒÑ‚Ð°Ñ€ Ð´ÐµÑ™ÐµÐ½Ðµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ (0x2000-0x4000), Ñ�Ñ‚Ð¾Ð³Ð° Ð¼Ð¾Ñ€Ð°Ñ‚Ðµ Ñ€ÑƒÑ‡Ð½Ð¾ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð¸Ñ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ñƒ Ñƒ Ð²Ð°ÑˆÐµÐ¼ ÐºÐ¾Ð´ÑƒÐ¡Ð”Ð� Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÐºÐ°Ð´Ð° â€ž_SDA_BASE_â€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð‘Ð•Ð—Ð‘Ð•Ð”Ð�ÐžÐ¡Ð¢         â€žSEC_RELOCâ€œ Ð½ÐµÐ¼Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œÐ“Ñ€ÐµÑˆÐºÐ° ÑˆÐºÐ¾Ñ™ÐºÐµ: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œÐ¨ÐšÐžÐ‰ÐšÐ�            SHRFXDSHRPICSPSC â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ð´ÐµÑ™ÐµÐ½Ðµ Ñ�Ð»Ð¸ÐºÐµ
-Ð¡Ð¢Ð�Ð‘Ð˜Ð›Ð�Ðž           STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ° Ð¿Ð¾Ñ€ÐµÑ’ÐµÑšÐ°)
+ÐŸÑ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lx: â€žRL78 ABIâ€œ Ñ�ÑƒÐºÐ¾Ð±: â€žG10â€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° â€ž%pBâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÐ²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð° â€ž%sâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ¾Ð¼ â€ž%pBâ€œâ€žABI RL78â€œ Ñ�ÑƒÐºÐ¾Ð±: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ â€ž%sâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ â€ž%pBâ€œ Ñ�Ð° â€ž%sâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ¾Ð¼ â€ž%pBâ€œâ€žRL78â€œ Ñ�ÑƒÐºÐ¾Ð± Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ðµ Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ðµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµâ€žRL78â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð´ÐµÐ»Ð¸ Ð½ÑƒÐ»Ð¾Ð¼Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ/Ð¿Ð¾Ñ‚ÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° â€žRL78â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°R_AMD64_IMAGEBASE Ñ�Ð° __ImageBase Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾â€žR_BFIN_FUNCDESCâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼â€žR_BFIN_FUNCDESC_VALUEâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼R_FRV_TLSMOFFLOâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žsetloâ€œ Ð¸Ð»Ð¸ â€žsetlosâ€œ
+Ð§Ð¸Ñ‚Ð°Ð¼ Ð²Ñ€ÐµÐ¼Ðµ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ñ€Ñ…Ð¸Ð²ÐµÐ£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (0x%v) Ð¸ â€ž%pBâ€œ (0x%v)
+Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (0x%v) Ð¸ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾)
+Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾) Ð¸ â€ž%pBâ€œ (0x%v)
+Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ
+Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾)
+Ð ÐµÐ·ÐµÑ€Ð²Ð¸Ñ�Ð°Ð½Ð¾Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ð° [.rsrc]Ð�Ð´Ñ€ÐµÑ�Ð° â€žS12â€œ (%lx) Ð½Ð¸Ñ˜Ðµ ÑƒÐ½ÑƒÑ‚Ð°Ñ€ Ð´ÐµÑ™ÐµÐ½Ðµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ (0x2000-0x4000), Ñ�Ñ‚Ð¾Ð³Ð° Ð¼Ð¾Ñ€Ð°Ñ‚Ðµ Ñ€ÑƒÑ‡Ð½Ð¾ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð¸Ñ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ñƒ Ñƒ Ð²Ð°ÑˆÐµÐ¼ ÐºÐ¾Ð´Ñƒâ€žSDAâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÐºÐ°Ð´Ð° â€ž_SDA_BASE_â€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð‘Ð•Ð—Ð‘Ð•Ð”Ð�ÐžÐ¡Ð¢              â€žSEC_RELOCâ€œ Ñ˜Ðµ Ð±ÐµÐ· Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œÐ¨ÐšÐžÐ‰ÐšÐ�                  SHRFXDSHRPICâ€žSHSTKâ€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾â€žSIMDâ€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ: SPSC â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ð´ÐµÑ™ÐµÐ½Ðµ Ñ�Ð»Ð¸ÐºÐµ
+Ð¡Ð¢Ð�Ð‘Ð˜Ð›Ð�Ðž                STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ° Ð¿Ð¾Ñ€ÐµÑ’ÐµÑšÐ°)
 STA_GBL (Ð¾Ð¿ÑˆÑ‚Ð¾Ñ�Ñ‚ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) %.*s
 STA_LI (Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)
-STA_LW (Ð´ÑƒÐ³Ð° Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) 0x%08x
-STA_MOD (Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)
+STA_LW (Ð´ÑƒÐ³Ð° Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)STA_MOD (Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)
 STA_PQ (Ð¾Ñ�Ð½Ð¾Ð²Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)
-STA_QW (Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) 0x%08x %08x
-STC_BOH_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žBOHâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸)
+STA_QW (Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ° Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)STC_BOH_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žBOHâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸)
 STC_BOH_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žBOHâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÑƒ + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)
 STC_BSR_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žBSRâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸)
 STC_BSR_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žBSRâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÑƒ + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)
@@ -1099,28 +1336,31 @@ Plural-Forms: nplurals=3; plural=(n%10==
 SYMG â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° ÑƒÐ½Ð¸Ð²ÐµÑ€Ð·Ð°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°
 SYMM â€” ÐžÐ¿ÑˆÑ‚Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ð¾Ð¼
 SYMV â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°
-Ð¡Ð¢Ð’Ð�Ð Ð�ÐŠÐ•_Ð¡Ð˜Ð¡Ð¢Ð•ÐœÐ�           ÐžÐ´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ÐµÐ”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸Ð“Ñ€ÐµÑˆÐºÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œÐ—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¸Ð·Ð²Ð¾Ñ€Ð°
-Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ñ�ÐµÐ±Ð½Ð¾Ñ�Ñ‚Ð¸ÐŸÑ€Ð¸Ð²Ð¸Ð´Ð½Ð¾ â€žALPHA_R_BSRâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ�Ð½Ð°Ð»Ð¸Ð·Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ›Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€Ð¸Ñ‚Ð¸ Ð¿Ð¾Ð·Ð¸Ð² Ð¾Ð´ â€ž%sâ€œ Ð´Ð¾ â€ž%sâ€œ
-ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° (%d) Ñƒ â€ž_bfd_vms_pushâ€œ-ÑƒÐ’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð·Ð° Ð¿Ð¾Ð·Ð¸Ð² Ñ‡Ð²Ð¾Ñ€Ð¾Ð²Ð° ÐºÐ¾Ñ€ÐµÐ½Ð° Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ°.
-ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñƒ â€ž_bfd_vms_popâ€œ-ÑƒÐšÐ¾Ñ€Ð°Ñ†Ð¸:
-Ð¡Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð·Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ
-Ð¡Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€ž%sâ€œ Ñƒ â€ž%Bâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žREGISTERâ€œ Ñƒ â€ž%Bâ€œÐ¡Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€žREGISTERâ€œ Ñƒ â€ž%Bâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%Bâ€œÐ¡Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° ÑƒÐºÐ»Ð°ÑšÐ°ÑšÐµ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° ÐºÐ¾Ñ˜Ð¸ Ð½Ðµ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜Ð¸Ð“Ñ€ÐµÑˆÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ�ÐºÐ¾Ð³ Ð¿Ð¾Ð·Ð¸Ð²Ð°Ð¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ñ… Ð¾Ð´ÐµÑ™Ð°ÐºÐ°ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°: 0x%lx > 0x10000; Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ñ�Ð° â€ž-mminimal-tocâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð°
+Ð¡Ð¢Ð’Ð�Ð Ð�ÐŠÐ•_Ð¡Ð˜Ð¡Ð¢Ð•ÐœÐ�        Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸Ð¡Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·
+Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¸Ð·Ð²Ð¾Ñ€Ð°
+Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ñ�ÐµÐ±Ð½Ð¾Ñ�Ñ‚Ð¸Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð·Ð° Ð¿Ð¾Ð·Ð¸Ð² Ñ‡Ð²Ð¾Ñ€Ð¾Ð²Ð° ÐºÐ¾Ñ€ÐµÐ½Ð° Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ°.
+ÐšÐ¾Ñ€Ð°Ñ†Ð¸:
+Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€ž%sâ€œ Ñƒ â€ž%pBâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žREGISTERâ€œ Ñƒ â€ž%pBâ€œÐ¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ñ… Ð¾Ð´ÐµÑ™Ð°ÐºÐ°ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ°; Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ñ�Ð° â€ž-mminimal-tocâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð°
+Ð¡Ð°Ð±Ð¸Ñ€Ð°Ðº Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ð·Ð° â€žR_RISCV_GOT_HI20â€œÐŸÐ¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ñƒ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°ÐºÐ’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ ÑƒÐ½Ð¾Ñ�Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°
 Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð½Ð¸Ñ‚Ð¸ [.tls]ÐžÑ‚Ð¸Ñ�Ð°Ðº Ð²Ñ€ÐµÐ¼ÐµÐ½Ð°/Ð´Ð°Ñ‚ÑƒÐ¼Ð° 		%lx
 Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð½Ð°Ñ�Ð»Ð¾Ð²Ð°
-ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð´Ð° ÑƒÐºÑ™ÑƒÑ‡Ð¸Ñ‚Ðµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐµ Ð´Ð° Ð±Ð¸Ñ�Ñ‚Ðµ Ð¸Ð·Ð±ÐµÐ³Ð»Ð¸ Ñ�ÐºÑ€Ð°Ñ›Ð¸Ð²Ð°ÑšÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°USRSTACKÐ�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÐµÐºÐ²Ð¸Ð²Ð°Ð»ÐµÐ½Ñ‚Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œÐ�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ (Ð½Ð° 0x%08x) Ð¸Ð· Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° (Ð½Ð° 0x%08x) Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ (%d) Ð¸Ð·Ð²Ð°Ð½ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾Ð³ Ð¾Ð¿Ñ�ÐµÐ³Ð°, Ð¾Ð´ -32678 Ð´Ð¾ 32767.
-Ð�ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ â€žSTO_SH5_ISA32â€œ Ð½Ð° Ð¼ÐµÑ�Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€Ð°Ñ’ÐµÐ½Ð¾Ð�ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð¼Ð°ÑˆÐ¸Ð½Ñ�ÐºÐ¸ Ð±Ñ€Ð¾Ñ˜Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð²Ñ€Ñ�Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° %d Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ OSF/1 Ñ˜ÐµÐ·Ð³Ñ€Ð°
-Ð�ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œÐ�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° EGSD Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° %dÐ�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œÐ�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œÐ�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s + %sâ€œÐ�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸ â€ž%sâ€œâ€žINPUT_SECTION_FLAG %sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾
-Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¸Ð´ â€žTI COFFâ€œ Ñ†Ð¸Ñ™Ð° â€ž0x%xâ€œÐ�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%xÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž.stabâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ÐŸÐ ÐžÐœÐ•Ð�Ð‰Ð˜Ð’Ðž         Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ˜ÐµÐ´Ð½Ð¾Ð¼ Ð¾Ð´ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸  Ð¼Ð°Ð»Ð¸Ñ…, Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð¼Ð°Ð»Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð¼Ð°Ð»Ð¸Ñ… Ð¸ Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð·Ð°ÑƒÐ·Ð¼Ðµ Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d
-Ð£ÐŸÐžÐ—ÐžÐ Ð•ÐŠÐ•: â€ž%Bâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%Bâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¾: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð° >= %lu, Ð½Ð°Ñ’Ð¾Ñ…: %lu.Ð£ÐŸÐžÐ—ÐžÐ Ð•ÐŠÐ•: â€ž%Bâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%Bâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ÐœÐ¡Ð� Ð�Ð‘Ð˜ â€ž%dâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð�Ð‘Ð˜ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ñ˜ÐµÐ´Ð½Ðµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žr3/r4â€œ Ð·Ð° Ð¼Ð°Ð»Ðµ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚Ðµ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜ÑƒÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ñ˜ÐµÐ´Ð½Ðµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ÐœÐ¡Ð� Ð�Ð‘Ð˜ â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ÐœÐ¡Ð� Ð�Ð‘Ð˜ â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ÐœÐ¡Ð� Ð�Ð‘Ð˜ â€ž%dâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%dâ€œ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð�Ð‘Ð˜ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð�Ð‘Ð˜ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð�Ð‘Ð˜ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ€ Ð¼Ð°Ð»Ð¾Ð³ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚Ð° Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ â€ž%dâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%dâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%sâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: ÐŸÐ¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ðµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±ÑƒÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žMSPABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð§Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%Bâ€œ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð½ÐµÐ¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¸ ÐºÐ¾Ð´ Ñƒ â€ž%Bâ€œ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñ�Ð° ÑšÐ¸Ð¼Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð£ÐºÐ»Ð°ÑšÐ°Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%Bâ€œ ÑƒÑ�Ð»ÐµÐ´ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ñ�Ð¿Ð¾Ñ™Ð°Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð�Ð¸Ñ�Ð°Ð¼ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%Bâ€œ Ð¿Ð¾ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð²ÐµÑ› Ð½Ð°Ð²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ Ð½ÐµÐ¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¾Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRL78_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRX_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð£Ð¿Ð¸Ñ� Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº (Ð½Ð¿Ñ€. Ð½ÐµÐ³Ð°Ñ‚Ð¸Ð²Ð°Ð½) Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ 0x%lx.Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%Bâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ðµ Ð¾Ð´ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° (%u) ÑšÐµÐ³Ð¾Ð²Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%Bâ€œ Ñ˜Ðµ Ð¼Ð°ÑšÐµ Ð¾Ð´ â€ž%uâ€œ Ñƒ â€ž%Bâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð±Ñ€Ð¾Ñ˜ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°
-Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð¿Ñ†Ð¸Ñ˜Ð° â€žgcâ€œ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ð¸Ð· â€ž%luâ€œ Ñƒ â€ž%Bâ€œ Ñƒ â€ž%luâ€œ Ñƒ â€ž%Bâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ð¸Ð· â€ž%dâ€œ Ñƒ â€ž%dâ€œ Ð·Ð° â€ž%Bâ€œÐ£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ¿Ð¸Ñ� Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ñƒ Ñ˜Ðµ Ñ�Ð¿Ð¾Ñ€: Ð¿Ð¾Ð½Ð¾Ð²Ð¾ ÑƒÐ¿Ð¸Ñ�ÑƒÑ˜ÐµÐ¼ Ð²Ñ€ÐµÐ¼Ðµ
-Ð£Ð¿Ð¸Ñ�ÑƒÑ˜ÐµÐ¼ Ð¾Ñ�Ð²ÐµÐ¶ÐµÐ½Ð¾ Ð²Ñ€ÐµÐ¼Ðµ Ð°Ñ€Ð¼Ð°Ð¿Ð°Ð�Ð´Ñ€ÐµÑ�Ð° â€žXGATEâ€œ (%lx) Ð½Ð¸Ñ˜Ðµ ÑƒÐ½ÑƒÑ‚Ð°Ñ€ Ð´ÐµÑ™ÐµÐ½Ðµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ (0xE000-0xFFFF), Ñ�Ñ‚Ð¾Ð³Ð° Ð¼Ð¾Ñ€Ð°Ñ‚Ðµ Ñ€ÑƒÑ‡Ð½Ð¾ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð¸Ñ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ñƒ, Ð¸ Ð¿Ð¾ Ð¼Ð¾Ð³ÑƒÑ›Ñ�Ñ‚Ð²Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ñ‚Ðµ Ñ�Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð¾Ð¼ Ñƒ Ð²Ð°ÑˆÐµÐ¼ ÐºÐ¾Ð´Ñƒ.[%u]: %u
-[%u]: Ð”Ð¾ÑšÐ°: %u, Ð³Ð¾Ñ€ÑšÐ°: %u
-[Ð°Ð±Ð¸=16-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ†ÐµÐ¾ Ð±Ñ€Ð¾Ñ˜, [Ð°Ð±Ð¸=32-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ†ÐµÐ¾ Ð±Ñ€Ð¾Ñ˜, [Ñ‡Ð¸Ñ˜Ð¸ Ð½Ð°Ð·Ð¸Ð² Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ñ™ÐµÐ½]\%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€žArm BLXâ€œ Ñ†Ð¸Ñ™Ð° Ð½Ð° Ð�Ñ€Ð¼ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ.â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð½ÑƒÐ»Ð° Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°Ð°Ð´Ñ€ÐµÑ�Ð°Ð°Ð´Ñ€ÐµÑ�Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð¿Ð¾ Ñ€ÐµÑ‡Ð¸Ð°Ñ€-Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, a0: 0x%08x
-Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€ž%sâ€œÐ³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx) Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¸Ñ�Ñ‚Ð¾Ñ˜ Ð³Ñ€ÑƒÐ¿Ð¸ ÐºÐ°Ð¾ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð° Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx)Ð¾Ñ�Ð½Ð¾Ð²Ð°: %u, Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜: %u
-bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµbfd_mach_o_read_symtab_symbol: Ð½Ð°Ð·Ð¸Ð² Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (%lu >= %lu)bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ¾ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%dâ€œ (Ð½Ð°Ñ˜Ð². %lu): Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð°Ð¼ Ð½Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ¾ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ™Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ 0x%x: Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð°Ð¼ Ð½Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾bfd_mach_o_read_symtab_symbol: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ %d Ð±Ð°Ñ˜Ñ‚Ð° Ð½Ð° %lubfd_mach_o_read_symtab_symbols: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµbfd_mach_o_scan: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx/0x%lxbfd_pef_scan: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lxÐ±Ð»Ðº Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº: Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð½Ð°Ð·Ð¸Ð²: %.*s
+ÐŸÑ€ÐµÐ²Ð¸ÑˆÐµ Ð¸Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ… ÐºÐ¾Ð´Ð¾Ð²Ð° (%ld)
+Ð’Ñ€Ñ�Ñ‚Ð°              Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°     Rva      ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜
+USRSTACKÐ�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° â€ž%sâ€œÐ�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ ÑƒÐ»Ð°Ð·Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ: %sÐ�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð¼ DLL.Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾: %xÐžÑ�Ð²ÐµÐ¶ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ (%v) Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (0x%v) Ð¸ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾)
+ÐžÑ�Ð²ÐµÐ¶ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ (0x%v) Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (0x%v) Ð¸ â€ž%pBâ€œ (0x%v)
+ÐŸÐ ÐžÐœÐ•Ð�Ð‰Ð˜Ð’Ðž              Ð’Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€ž.pdataâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° (%ld) Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ñ�Ñ‚Ð²Ð°Ñ€Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ (%ld)
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (%ld) Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð²Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ (%ld)
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ
+Ð£Ð¿Ð¸Ñ�ÑƒÑ˜ÐµÐ¼ Ð¾Ñ�Ð²ÐµÐ¶ÐµÐ½Ð¾ Ð²Ñ€ÐµÐ¼Ðµ Ð°Ñ€Ð¼Ð°Ð¿Ð°Ð�Ð´Ñ€ÐµÑ�Ð° â€žXGATEâ€œ (%lx) Ð½Ð¸Ñ˜Ðµ ÑƒÐ½ÑƒÑ‚Ð°Ñ€ Ð´ÐµÑ™ÐµÐ½Ðµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ (0xE000-0xFFFF), Ñ�Ñ‚Ð¾Ð³Ð° Ð¼Ð¾Ñ€Ð°Ñ‚Ðµ Ñ€ÑƒÑ‡Ð½Ð¾ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð¸Ñ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ñƒ, Ð¸ Ð¿Ð¾ Ð¼Ð¾Ð³ÑƒÑ›Ñ�Ñ‚Ð²Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ñ‚Ðµ Ñ�Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð¾Ð¼ Ñƒ Ð²Ð°ÑˆÐµÐ¼ ÐºÐ¾Ð´Ñƒ.[%u]: Ð”Ð¾ÑšÐ°: %u, Ð³Ð¾Ñ€ÑšÐ°: %u
+[Ð°Ð±Ð¸=16-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ†ÐµÐ¾ Ð±Ñ€Ð¾Ñ˜, [Ð°Ð±Ð¸=32-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ†ÐµÐ¾ Ð±Ñ€Ð¾Ñ˜, [Ñ‡Ð¸Ñ˜Ð¸ Ð½Ð°Ð·Ð¸Ð² Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ñ™ÐµÐ½]\%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%s BLXâ€œ Ñ†Ð¸Ñ™Ð° Ð½Ð° â€ž%sâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œÐ¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° â€ž__tls_get_addrâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð°â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð½ÑƒÐ»Ð° Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½Ðµ ÑƒÐ»Ð°Ð·Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒâ€žxtheadvectorâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµÐ¼ â€žvâ€œâ€žzfinxâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµÐ¼ â€žf/d/q/zfh/zfhminâ€œâ€žPDEâ€œ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚â€žPIEâ€œ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚Ð°Ð´Ñ€ÐµÑ�Ð°Ð°Ð´Ñ€ÐµÑ�Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð¿Ð¾ Ñ€ÐµÑ‡Ð¸Ð½Ð°Ñ’Ð¾Ñ… Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð¸ â€žELFâ€œ Ð¼Ð°ÑˆÐ¸Ð½Ñ�ÐºÐ¸ ÐºÐ¾Ð´ (%d) Ñƒ â€ž%pBâ€œ, Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… â€ž%dâ€œÐ°Ñ€Ñ…Ð¸Ð²Ð° Ð½ÐµÐ¼Ð° Ð¸Ð½Ð´ÐµÐºÑ�; Ð¿Ð¾ÐºÑ€ÐµÐ½Ð¸Ñ‚Ðµ â€žranlibâ€œ Ð´Ð° Ð³Ð° Ð´Ð¾Ð´Ð°Ñ‚ÐµÐ´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð°Ñ€Ñ…Ð¸Ð²Ðµ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ¾Ð¿Ð¸Ñ�Ð½Ð¸Ðº Ð½Ð¸Ð·Ð°:
+Ð½Ð¸Ð·, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð±Ð¸Ñ‚Ð¼Ð°Ð¿Ð°: Ð°Ñ€-Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, a0: 0x%08x
+Ð°Ñ‚Ð¾Ð¼Ñ�ÐºÐ¸, Ð²Ñ€Ñ�Ñ‚Ð°=0x%02x %s
+Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜ Ð¿Ñ€ÐµÑ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€žL32R/CALLXâ€œ Ñƒ â€žCALLâ€œ Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ¾Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ñƒ Ð²ÐµÐ·Ñƒ Ñ�Ð° â€ž%sâ€œ ÑƒÐ»Ð°Ð·Ð¾Ð¼ Ð¸ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·Ð¾Ð¼Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€ž%sâ€œÐ¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx) Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¸Ñ�Ñ‚Ð¾Ñ˜ Ð³Ñ€ÑƒÐ¿Ð¸ ÐºÐ°Ð¾ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð° Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx)Ð¾Ñ�Ð½Ð¾Ð²Ð°: %u, Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜: %u
+bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµbfd_mach_o_read_section_32: Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€Ð°Ð²Ð°ÑšÐ°: %#lxbfd_mach_o_read_section_64: Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€Ð°Ð²Ð°ÑšÐ°: %#lxbfd_mach_o_read_symtab_symbol: Ð½Ð°Ð·Ð¸Ð² Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (%lu >= %u)bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ¾ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%dâ€œ (Ð½Ð°Ñ˜Ð². %lu): Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð°Ð¼ Ð½Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ¾ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ™Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ 0x%x: Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð°Ð¼ Ð½Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾bfd_mach_o_read_symtab_symbol: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ %d Ð±Ð°Ñ˜Ñ‚Ð° Ð½Ð° %ubfd_mach_o_scan: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx/0x%lxbfd_pef_scan: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lxÐ±Ð»Ðº Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº: Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð½Ð°Ð·Ð¸Ð²: %.*s
 Ð±Ð»Ðº ÐºÑ€Ð°Ñ˜: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%08x
-Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€žEMHâ€œ Ñƒ Ð¿Ñ€Ð²Ð¾Ð¼ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ
-Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€žR_MEM_INDIRECTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¼ ÐºÐ°Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ
+Ð³Ñ€Ð°Ð½Ð°ÑšÐµ (PC rel16) Ñƒ Ð¾Ð´ÐµÑ™Ð°Ðº (%s) Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾Ð³Ñ€Ð°Ð½Ð° Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ�Ð°ÑšÐµÐ¼â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð·Ð±Ð¾Ð³ â€ž%pBâ€œcâ€œ Ð¸Ð»Ð¸ â€žzcacâ€œ Ð¸Ð»Ð¸ â€žzcdcâ€œ Ð¸Ð»Ð¸ â€žzcfÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° + Ð¸Ð»Ð¸ - Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ñƒ â€ž.optionâ€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð³Ñ€Ð°Ð½Ñƒ Ñƒ â€žJALXâ€œ Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜ÑƒÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ñ�ÐºÐ¾Ðº Ñƒ â€žJALXâ€œ Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜ÑƒÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€žEMHâ€œ Ñƒ Ð¿Ñ€Ð²Ð¾Ð¼ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ
+Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDSTâ€œ
@@ -1136,60 +1376,76 @@ Plural-Forms: nplurals=3; plural=(n%10==
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žGSTâ€œ
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð°
-Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð´ÑƒÐ¶Ð¸Ð½Ñƒ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð°
 ÐºÐ»Ð°Ñ�Ð°: %u, Ð´-Ð²Ñ€Ñ�Ñ‚Ð°: %u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡: 0x%08x
-Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€ž%sâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ â€ž%Bâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__ctbpâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__epâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__gpâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ñ�Ð»Ð¸ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%sâ€œÐ¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=XGATE]Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµdelta pc +%-4ddelta_pc_l: +0x%08x
+Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€ž%sâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ â€ž%pBâ€œÐ¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žEEOMâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº â€“ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ° %d: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° (%#x) Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° (%#x)Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ° %d: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° (%#x) Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº: ÑšÐµÐ³Ð¾Ð²Ð¾ â€žpsindxâ€œ Ð¿Ð¾Ñ™Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ (%#lx)Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº: ÑšÐµÐ³Ð¾Ð²Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° (%#x) Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žEIHDâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº â€“ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°Ð½Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€žETIRâ€œ Ñ�Ð½Ð¸Ð¼Ð°ÐºÐ¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° â€žvmsâ€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGSTâ€œ
+Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__ctbpâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__epâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__gpâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ñ�Ð»Ð¸ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%sâ€œÐ¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=XGATE]dâ€œ Ð¸ â€žcâ€œ, Ð¸Ð»Ð¸ â€ždâ€œ Ð¸ â€žzcddâ€œ Ð¸ â€žzfadâ€œ Ð¸Ð»Ð¸ â€žzdinxÐ¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµdelta pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 Ð¾Ð¿Ð¸Ñ�Ð´Ð¸Ð¼Ñ†Ñ‚: %u, Ð°-Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: 0x%02x, Ñ†Ð¸Ñ„Ñ€Ðµ: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°: %u
-Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð°: â€ž%Aâ€œÐ½ÐµÐ¿Ñ€ÐµÐºÐ¸Ð´Ð½Ð¸ Ð¾Ð¿Ñ�ÐµÐ³ (Ð±Ñ€.: %u)
-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµÐ´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½ÐµÐ¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð½Ð°Ð·Ð¸Ð²: %.*s
+Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð°: â€ž%pAâ€œÐ¾Ð´Ð±Ð°Ñ†ÑƒÑ˜ÐµÐ¼ Ð½ÑƒÐ»Ñ‚Ð¸ Ð¾Ð¿Ñ�ÐµÐ³ Ð°Ð´Ñ€ÐµÑ�Ðµ â€žFDEâ€œ Ñƒ â€ž%pB(%pA)â€œ.
+Ð½ÐµÐ¿Ñ€ÐµÐºÐ¸Ð´Ð½Ð¸ Ð¾Ð¿Ñ�ÐµÐ³ (Ð±Ñ€.: %u)
+Ð´ÐµÑ™ÐµÑšÐµ Ð½ÑƒÐ»Ð¾Ð¼â€ždst_define_location %uâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾Ð¿Ð¾Ð´Ð°Ñ†Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¸Ð½Ð´ÐµÐºÑ�Ð° Ð½Ð¸Ñ�Ñƒ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµÐ´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ° Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð·Ð° â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œÑ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÑ�Ñ‚Ð°Ð»Ð° Ð¸Ð· Ð±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ð³ ÐºÐ¾Ð´Ð°Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð½Ð°Ð·Ð¸Ð²: %.*s
 ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð¸ Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°, Ð½Ð°Ð·Ð¸Ð²: %.*s
 ÐºÑ€Ð°Ñ˜ Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°
 ÐµÐ¿Ð¸Ð»Ð¾Ð³: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %u, Ð±Ñ€Ð¾Ñ˜: %u
-Ð³Ñ€ÐµÑˆÐºÐ° Ñ‡Ð¸Ñ‚Ð°ÑšÐ° Ð²Ñ€Ñ�Ñ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ð¸Ð· Ð»Ð¸Ñ‡Ð½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° ÐµÐ»Ñ„-Ð°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (0x%s) Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ ÐºÐ¾Ñ˜Ð¸ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½Ðµ-Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð½Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žMaverickâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð´Ð°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð²ÐµÑ› Ñƒ Ð·Ð°Ð²Ñ€ÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ â€žBE8â€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ ÐºÐ¾Ð´ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°, Ð´Ð¾Ðº Ñ˜Ðµ Ñ†Ð¸Ñ™ â€ž%Bâ€œ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ ÐºÐ¾Ð´ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°, Ð´Ð¾Ðº Ñ˜Ðµ Ñ†Ð¸Ñ™ â€ž%Bâ€œ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° Ð�ÐŸÐ¦Ð¡-%d, Ð´Ð¾Ðº Ñ˜Ðµ â€ž%Bâ€œ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° Ð�ÐŸÐ¦Ð¡-%dÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žAPCS-%dâ€œ, Ð´Ð¾Ðº Ñ†Ð¸Ñ™Ð½Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žAPCS-%dâ€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° EP9312, Ð´Ð¾Ðº Ñ˜Ðµ â€ž%Bâ€œ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° XScaleÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½Ð¸Ð·Ð° Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ â€ž%Bâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ â€ž%Bâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ð°Ð»Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žFPAâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žMaverickâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žVFPâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žVFPâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%Bâ€œ Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žiWMMXtâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%Bâ€œ Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ ÐºÐ¾Ð´Ð° Ð´Ð¾Ðº â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ ÐºÐ¾Ð´Ð°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð°Ð»Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žMSP430â€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð´Ð¾Ðº â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ¸ Ð¼Ð¾Ð´ÐµÐ» ÐºÐ¾Ð´Ð° Ð°Ð»Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žMSP430â€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸ Ð¼Ð¾Ð´ÐµÐ» ÐºÐ¾Ð´Ð° Ð°Ð»Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð�Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° %d/%d Ñ�Ñƒ Ñƒ Ñ�ÑƒÐºÐ¾Ð±ÑƒÐ³Ñ€ÐµÑˆÐºÐ°: %B: Ð£ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%c/%câ€œÐ³Ñ€ÐµÑˆÐºÐ°: %B: Ð£ Ñ�Ð¸ÐºÐ¾Ð±Ñƒ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ â€žR9â€œÐ³Ñ€ÐµÑˆÐºÐ°: %B: ÐžÐ±Ñ˜ÐµÐºÐ°Ñ‚ Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¿Ñ€Ð¾Ð´Ð°Ð²Ñ†Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ ÐºÐ¾Ñ˜Ð¸ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ñ€Ð°Ñ’ÐµÐ½ Ð°Ð»Ð°Ñ‚Ð½Ð¸Ð¼ Ð»Ð°Ð½Ñ†ÐµÐ¼ â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %B: ÐžÐ·Ð½Ð°ÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€ž%d, %sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼ â€ž%d, %sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %B: Ð ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ â€žSBâ€œ Ð°Ð´Ñ€ÐµÑ�Ð¸Ñ€Ð°ÑšÐµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žR9â€œÐ³Ñ€ÐµÑˆÐºÐ°: %B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�ÐµÐ³Ñ€ÐµÑˆÐºÐ°: %B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ð¿Ð¾Ñ˜Ð¸Ð¼ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ðµ Ð²Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ðµ Ñ�Ð° â€ž%Bâ€œÐ³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: _SDA_BASE_.Ð³Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð²Ð¾Ñ€Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ â€ž%Bâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d, Ð°Ð»Ð¸ Ñ†Ð¸Ñ™Ð½Ð¸ â€ž%Bâ€œ Ð¸Ð¼Ð° â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %dÐ³Ñ€ÐµÑˆÐºÐ°: â€žfp16â€œ Ð·Ð°Ð¿Ð¸Ñ� Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ñ‚Ð¸ Ð·Ð° â€ž%Bâ€œ Ð¸ â€ž%Bâ€œÐ³Ñ€ÐµÑˆÐºÐ°: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð° Ð·Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ (Ð´Ð° Ð»Ð¸ Ñ�Ñ‚Ðµ Ð·Ð°Ð±Ð¾Ñ€Ð°Ð²Ð¸Ð»Ð¸ â€ž-fpicâ€œ?)Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž__rtinitâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žTag_ABI_array_object_align_expectedâ€œ Ñƒ â€ž%Bâ€œÐ³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žTag_ABI_array_object_alignmentâ€œ Ñƒ â€ž%Bâ€œÐ¸Ð·Ð²Ñ€ÑˆÐ½Ð°Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€ Ð·Ð° Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ.Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ.Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð½Ñ�Ñ‚Ð°Ð»Ð¸Ñ€Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ.ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€ž.fixupâ€œ-Ð°Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ€Ð°Ð´Ð¸ Ñ�Ð° â€ž%sâ€œÑ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ 0x%08x ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾
-Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ
-incr_linum(b): +%u
+Ð³Ñ€ÐµÑˆÐºÐ° Ð´Ð¾Ð´Ð°Ð²Ð°ÑšÐ° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€ž%pB(%pA)â€œ; Ð½ÐµÑ›Ðµ Ð±Ð¸Ñ‚Ð¸ Ð½Ð°Ð¿Ñ€Ð°Ð²Ñ™ÐµÐ½Ð° Ð½Ð¸Ñ˜ÐµÐ´Ð½Ð° â€ž.eh_frame_hdrâ€œ Ñ‚Ð°Ð±ÐµÐ»Ð°Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€ž%pB(%pA)â€œ; Ð½ÐµÑ›Ðµ Ð±Ð¸Ñ‚Ð¸ Ð½Ð°Ð¿Ñ€Ð°Ð²Ñ™ÐµÐ½Ð¾ â€ž.sframeâ€œÐ³Ñ€ÐµÑˆÐºÐ° Ñ‡Ð¸Ñ‚Ð°ÑšÐ° â€ž%sâ€œ: %sÐ³Ñ€ÐµÑˆÐºÐ° Ñ‡Ð¸Ñ‚Ð°ÑšÐ° Ð²Ñ€Ñ�Ñ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ð¸Ð· Ð»Ð¸Ñ‡Ð½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° ÐµÐ»Ñ„-Ð°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¼Ð¾Ð¶Ðµ Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð³Ð¾Ñ€ÑšÑƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚ Ð·Ð° Ð¿Ð¾Ð´Ð°Ñ‚ÐºÐµ, Ð°Ð»Ð¸ â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð° Ð´Ð° Ñ�Ñƒ Ð¿Ð¾Ð´Ð°Ñ†Ð¸ Ð¸Ñ�ÐºÑ™ÑƒÑ‡Ð¸Ð²Ð¾ Ñƒ Ð´Ð¾ÑšÐ¾Ñ˜ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð½Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%pBâ€œ Ð´Ð°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð£Ð§Ð˜Ð¢Ð�Ðˆ Ñ�Ð° Ð¾Ð²Ð»Ð°ÑˆÑ›ÐµÑšÐ¸Ð¼Ð° Ð¿Ð¸Ñ�Ð°ÑšÐ° Ð¸ Ð±Ñ€Ð¸Ñ�Ð°ÑšÐ°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¢Ð›Ð¡ Ð¿Ð¾Ð´ÐµÐ¾Ðº Ñ�Ð° Ð¾Ð²Ð»Ð°ÑˆÑ›ÐµÑšÐµÐ¼ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ñ˜Ðµ Ð²ÐµÑ› Ñƒ Ð·Ð°Ð²Ñ€ÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ â€žBE8â€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žAPCS-%dâ€œ, Ð´Ð¾Ðº Ñ†Ð¸Ñ™Ð½Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žAPCS-%dâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° EP9312, Ð´Ð¾Ðº Ñ˜Ðµ %pB Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žXScaleâ€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBÐ´ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° 8-Ð±Ð¸Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð°Ð»Ð¸ Ñ˜Ðµ â€ž%pBâ€œ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ð½Ð° 4-Ð±Ð¸Ñ‚Ð½Ð¾Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½Ð¸Ð·Ð° Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ â€ž%pBâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ â€ž%pBâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ð½ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ð°Ð»Ð¸ Ð¸Ð·Ð»Ð°Ð· ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ð½ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%pBâ€œ Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ðµ Ð´ÑƒÐ±Ð»ÐµÑ€Ðµ Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 32-Ð±Ð¸Ñ‚Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žFPU-3.0â€œ Ð°Ð»Ð¸ â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ñ�Ð°Ð¼Ð¾ â€žFPU-2.0â€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žVFPâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%pBâ€œ Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žiWMMXtâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%pBâ€œ Ð½ÐµÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ ÐºÐ¾Ð´Ð° Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ ÐºÐ¾Ð´Ð°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žMSP430â€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ¸ Ð¼Ð¾Ð´ÐµÐ» ÐºÐ¾Ð´Ð° Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žMSP430â€œÐ³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸ Ð¼Ð¾Ð´ÐµÐ» ÐºÐ¾Ð´Ð° Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð³Ñ€ÐµÑˆÐºÐ°: %pB: <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° â€žAArch64â€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%x>Ð³Ñ€ÐµÑˆÐºÐ°: %pB: <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ (0x%x) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ: 0x%x>Ð³Ñ€ÐµÑˆÐºÐ°: %pB: <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ x86 Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ (0x%x) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ: 0x%x>Ð³Ñ€ÐµÑˆÐºÐ°: %pB: ISA Ð½Ð¸Ñ�ÐºÐ° ÑƒÐ»Ð°Ð·Ð° (%s) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ (%s)Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ â€žSBâ€œ Ð°Ð´Ñ€ÐµÑ�Ð¸Ñ€Ð°ÑšÐµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žR9â€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: â€žXLENâ€œ Ð½Ð¸Ñ�ÐºÐ° ÑƒÐ»Ð°Ð·Ð° (%u) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ (%u)Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð²ÐµÐ»Ð¸ÐºÐ° ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ â€žR2â€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑˆÐ°Ð¼ â€žrf16â€œ Ñ�Ð° Ð¿ÑƒÐ½Ð¸Ð¼ Ñ�ÐºÑƒÐ¿Ð¾Ð¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° â€ž%pBâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° %d/%d Ñ�Ñƒ Ñƒ Ñ�ÑƒÐºÐ¾Ð±ÑƒÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° â€ž%sâ€œ Ñ�Ð° â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð£ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%c/%câ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ�ÑƒÐºÐ¾Ð± Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ�ÑƒÐºÐ¾Ð± Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° â€ž%sâ€œ: â€ž%sâ€œ Ñ�Ð° â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ â€žR9â€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° ISA Ð½Ð¸Ñ�ÐºÐ° â€ž%sâ€œ.  ÐŸÑ€Ð²Ð¾ Ñ�Ð»Ð¾Ð²Ð¾ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ â€žiâ€œ Ð¸Ð»Ð¸ â€žeâ€œ Ð°Ð»Ð¸ Ð´Ð¾Ð±Ð¸Ñ… â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½ÐµÐ¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð° ISA Ð½Ð¸Ñ�ÐºÐ° Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%sâ€œ Ð¸ â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¿Ñ€Ð¾Ð´Ð°Ð²Ñ†Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ ÐºÐ¾Ñ˜Ð¸ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ñ€Ð°Ñ’ÐµÐ½ Ð°Ð»Ð°Ñ‚Ð½Ð¸Ð¼ Ð»Ð°Ð½Ñ†ÐµÐ¼ â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð¾Ð·Ð½Ð°ÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€ž%d, %sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼ â€ž%d, %sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ�Ñ‚Ð°Ñ€Ð° Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð°Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�ÐµÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ð¿Ð¾Ñ˜Ð¸Ð¼ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ðµ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° â€ž%sâ€œ Ñ�Ð° â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ð¿Ð¾Ñ˜Ð¸Ð¼ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ðµ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° â€ž%sâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ð¿Ð¾Ñ˜Ð¸Ð¼ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ðµ Ð²Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ðµ Ñ�Ð° â€ž%pBâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žXLENâ€œ (%u), Ð¼Ð¾Ð¶Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜ÑƒÐ³Ñ€ÐµÑˆÐºÐ°: %s: Ð¾ÐºÐ¸Ð´Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð³ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° (Ñ˜ÐµÑ€ Ð¸Ð¼Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ¸Ð² â€ž.note.GNU-stackâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº)Ð³Ñ€ÐµÑˆÐºÐ°: %s: Ð¾ÐºÐ¸Ð´Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð³ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ˜ÐµÑ€ Ð½ÐµÐ¼Ð° â€ž.note.GNU-stackâ€œ Ð¾Ð´ÐµÑ™Ð°ÐºÐ³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÐ²ÐµÐ¶ÐµÐ¼ â€ž%pBâ€œ Ñ�Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð¼ â€ž%pBâ€œ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€ÐµÐ³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %sÐ³Ñ€ÐµÑˆÐºÐ°: Ñ�ÑƒÐºÐ¾Ð±Ñ™ÐµÐ½Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° â€ž%sâ€œ Ð¸ â€ž%sâ€œ Ñƒ â€ž%pBâ€œÐ³Ñ€ÐµÑˆÐºÐ°: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ Ð¸Ð·Ð²Ñ€ÑˆÐ¸Ð²Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ð·Ð±Ð¾Ð³ â€ž-z execstackâ€œ Ð¾Ð¿Ñ†Ð¸Ñ˜Ðµ Ð»Ð¸Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸Ð³Ñ€ÐµÑˆÐºÐ°: ÐºÑ€Ð°Ñ˜ÑšÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žuleb128â€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ 0x%lx Ñƒ â€ž%pAâ€œ Ð¸Ð· â€ž%pBâ€œ Ð¿Ñ€ÐµÐ¼Ð°ÑˆÑƒÑ˜Ðµ Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ð²Ð¸ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð³Ñ€ÐµÑˆÐºÐ°: â€žfp16â€œ Ð·Ð°Ð¿Ð¸Ñ� Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ñ‚Ð¸ Ð·Ð° â€ž%pBâ€œ Ð¸ â€ž%pBâ€œÐ³Ñ€ÐµÑˆÐºÐ°: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð° Ð·Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ (Ð´Ð° Ð»Ð¸ Ñ�Ñ‚Ðµ Ð·Ð°Ð±Ð¾Ñ€Ð°Ð²Ð¸Ð»Ð¸ â€ž-fpicâ€œ?)Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð¾Ñ€Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ â€ž%pBâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d, Ð°Ð»Ð¸ Ñ†Ð¸Ñ™Ð½Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð° â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %dÐ³Ñ€ÐµÑˆÐºÐ°: â€žARC4â€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð²Ð¸ÑˆÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž__rtinitâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žTag_ABI_array_object_align_expectedâ€œ Ñƒ â€ž%pBâ€œÐ³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žTag_ABI_array_object_alignmentâ€œ Ñƒ â€ž%pBâ€œÐ½Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐµ Ñ‚Ð¾ÐºÐ¾Ð¼ Ð¾Ð±Ñ€Ð°Ð´Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%pBâ€œÐ¸Ð·Ð²Ñ€ÑˆÐ½Ð°fâ€œ Ð¸ â€žcâ€œ, Ð¸Ð»Ð¸ â€žfâ€œ Ð¸ â€žzcffâ€œ Ð¸Ð»Ð¸ â€žzfinxÐ½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€ Ð·Ð° Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œÐ½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œÐ½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žHI16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð½Ñ�Ñ‚Ð°Ð»Ð¸Ñ€Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œÐ½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñƒ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ñƒ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€ž.fixupâ€œ-Ð°Ð·Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜Ðµ Ð½ÐµÑ˜Ð°Ñ�Ð°Ð½Ð·Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¾ÐºÑ€ÑšÐµÐ½Ð°ÐºÑ€Ð°Ñ˜ÑšÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žuleb128â€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ 0x%lx Ñƒ â€ž%pAâ€œ Ð¸Ð· â€ž%pBâ€œ Ð¿Ñ€ÐµÐ¼Ð°ÑˆÑƒÑ˜Ðµ Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ð²Ð¸ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð±ÑƒÐ´ÑƒÑ›Ð° ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐ° Ð¾ â€žFDEâ€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÑƒ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð° Ð¾Ð´Ð±Ð°Ñ†Ð¸Ð²Ð°ÑšÐµ â€ž.eh_frame_hdrâ€œ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ˜ÐµÐ¾Ð¿ÑˆÑ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ€Ð°Ð´Ð¸ Ñ�Ð° â€ž%sâ€œÑ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾hÑ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ñƒ â€žmach-oâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°: â€ž%ldâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%ldâ€œincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
-ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€žR_LM32_16_GOTâ€œÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð³Ñ€Ð°Ð½Ð°ÑšÐµ/Ñ�ÐºÐ¾Ðº Ð½Ð° Ð½ÐµÐ¿Ð°Ñ€Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�ÑƒÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð³Ñ€ÐµÑˆÐºÐ° Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÑƒÐ¼ÑšÐ¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð° Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ†Ð¸ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.got.locâ€œÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ»Ð°Ð·Ð° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð´Ð°Ð²Ð°ÑšÐ° Ð½Ðµ-â€žELFâ€œ, Ð½Ðµ-â€žmmoâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¸Ð·Ð»Ð°Ð·Ð°.
- ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ â€žobjcopyâ€œ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð¸Ð· â€žELFâ€œ-Ð° Ð¸Ð»Ð¸ â€žmmoâ€œ-Ð°,
- Ð¸Ð»Ð¸ Ñ�Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÐµÑ›Ð¸ â€ž-no-expandâ€œ (Ð·Ð° Ð³Ñ†Ñ†, â€ž-Wa,-no-expandâ€œ)Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ»Ð°Ð·Ð° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð´Ð°Ð²Ð°ÑšÐ° Ð½Ðµ-â€žELFâ€œ, Ð½Ðµ-â€žmmoâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¸Ð·Ð»Ð°Ð·Ð°.
- ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ â€žobjcopyâ€œ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð¸Ð· â€žELFâ€œ-Ð° Ð¸Ð»Ð¸ â€žmmoâ€œ-Ð°,
- Ð¸Ð»Ð¸ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÐµÑ›Ð¸ Ð³Ñ†Ñ†-Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-mno-base-addressesâ€œ.Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð° â€ž%sâ€œ Ñ�Ð° ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð¼ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° 0x%08lx (Ñ†Ð¸Ñ™ = 0x%08lx).ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ñ�ÑƒÐ²Ð¸ÑˆÐ½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° 0x%08lx (Ñ†Ð¸Ñ™ = 0x%08lx).Ñ€ÐµÐ»Ð°ÐºÑ�ÐµÑ€ â€žip2kâ€œ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ Ñ˜Ðµ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ñ€ÐµÐ±Ð°Ñ†Ð¸Ð²Ð°Ñ‡Ð°.Ñ€ÐµÐ»Ð°ÐºÑ�ÐµÑ€ â€žip2kâ€œ: Ð¿Ñ€ÐµÐ±Ð°Ñ†Ð¸Ð²Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð±ÐµÐ· Ð¿Ð¾Ñ‚Ð¿ÑƒÐ½Ð¾Ð³ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð°ÑšÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ.Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð°  (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)
-Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð° Ñ�Ð»Ð¸ÐºÐ°Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ â€ž%uâ€œ Ð³Ñ€ÑƒÐ¿Ð° â€ž%sâ€œ
-  Ð³Ñ€Ð°Ð½Ð°            %lu
-  Ñ‚Ð°Ñ� ÑƒÑ€ÐµÑ’ÐµÑšÐµ      %lu
-  Ð´ÑƒÐ³Ð° Ð±Ñ€Ð°Ð½Ð°       %lu
-  ÑƒÑ€ÐµÑ’ÐµÑšÐµ Ð´ÑƒÐ³Ðµ Ñ‚Ð°Ñ� %lu
-  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð²        %lu
-  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ñ‚Ð°Ñ�   %luÐ´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚Ð´Ð¾ÑˆÐ»Ð¾ Ñ˜Ðµ Ð´Ð¾ Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°mach-o: Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d) Ð½Ð°Ñ˜Ð²Ð¸ÑˆÐµ Ñ˜Ðµ 255,
-mep: Ð½ÐµÐ¼Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð·Ð° ÐºÐ¾Ð´ â€ž%dâ€œÐ¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð¼Ð¾Ð´ÑƒÐ»Ð°
+Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ð½Ð¾, Ð¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ Ð½Ð° 0x%08x
+ÑƒÐ»Ð°Ð·Ð½Ð¸ â€žSFrameâ€œ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ñ�Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ â€žabiâ€œ-ÐµÐ¼ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð°Ñ˜Ñƒ â€ž.sframeâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµÑƒÐ»Ð°Ð·Ð½Ð¸ â€žSFrameâ€œ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ñ�Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¸Ð·Ð´Ð°ÑšÐ¸Ð¼Ð° Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð°Ñ˜Ñƒ â€ž.sframeâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€ž%sâ€œÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð³Ñ€Ð°Ð½Ð°ÑšÐµ/Ñ�ÐºÐ¾Ðº Ð½Ð° Ð½ÐµÐ¿Ð°Ñ€Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�ÑƒÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð³Ñ€ÐµÑˆÐºÐ° Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%sâ€œ Ñ�Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¼ â€ž%sâ€œ Ñ˜Ðµ Ð´Ð°Ð»Ð¾ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€ÑƒÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÑƒÐ¼ÑšÐ¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð° Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ†Ð¸ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.got.locâ€œÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚: Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ñ˜Ðµ %lu != max %lu; Ð¿Ñ€Ð¸Ñ˜Ð°Ð²Ð¸Ñ‚Ðµ Ð¾Ð²Ñƒ Ð³Ñ€ÐµÑˆÐºÑƒÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð¸Ð¶Ð½Ð° â€žINSN_CLASS_*â€œÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ â€ž%sâ€œÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ñ�Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð° Ñ�Ð° <Ð±Ñ€Ð¾Ñ˜>p Ñƒ â€ž.optionâ€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ â€ž%sâ€œÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žTARGET2â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ†Ð¸Ñ™ Ð±Ñ„Ð´-Ð°Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¸Ð½Ð´ÐµÐºÑ�Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ»Ð°Ð·Ð° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð´Ð°Ð²Ð°ÑšÐ° Ð½Ðµ-â€žELFâ€œ, Ð½Ðµ-â€žmmoâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¸Ð·Ð»Ð°Ð·Ð°; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ â€žobjcopyâ€œ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð¸Ð· â€žELFâ€œ-Ð° Ð¸Ð»Ð¸ â€žmmoâ€œ-Ð°, Ð¸Ð»Ð¸ Ñ�Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÐµÑ›Ð¸ â€ž-no-expandâ€œ (Ð·Ð° Ð³Ñ†Ñ†, â€ž-Wa,-no-expandâ€œ)Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ»Ð°Ð·Ð° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð´Ð°Ð²Ð°ÑšÐ° Ð½Ðµ-â€žELFâ€œ, Ð½Ðµ-â€žmmoâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¸Ð·Ð»Ð°Ð·Ð°; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ â€žobjcopyâ€œ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð¸Ð· â€žELFâ€œ-Ð° Ð¸Ð»Ð¸ â€žmmoâ€œ-Ð°, Ð¸Ð»Ð¸ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÐµÑ›Ð¸ Ð³Ñ†Ñ†-Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-mno-base-addressesâ€œ.Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð°Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð° Ð·Ð° â€ž.eh_frame_entryâ€œ: %pAÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žETIRâ€œ-ÑƒÐ½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð° â€ž%sâ€œ Ñ�Ð° ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð¼Ñ€ÐµÐ»Ð°ÐºÑ�ÐµÑ€ â€žip2kâ€œ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ Ñ˜Ðµ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ñ€ÐµÐ±Ð°Ñ†Ð¸Ð²Ð°Ñ‡Ð°.Ñ€ÐµÐ»Ð°ÐºÑ�ÐµÑ€ â€žip2kâ€œ: Ð¿Ñ€ÐµÐ±Ð°Ñ†Ð¸Ð²Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð±ÐµÐ· Ð¿Ð¾Ñ‚Ð¿ÑƒÐ½Ð¾Ð³ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð°ÑšÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ.Ð´Ð° Ð½Ð¸Ñ˜Ðµ Ð¾Ð²Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° â€“ %s â€“ Ð¼Ð°Ð»Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ ?ÑƒÑ�ÐºÐ°ÐºÐ°ÑšÐµ (PC rel26) Ñƒ Ð¾Ð´ÐµÑ™Ð°Ðº (%s) Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾Ñ�ÐºÐ¾Ðº Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼Ñ�ÐºÐ¾Ðº Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜ÑƒÐ½Ð°Ñ‚Ð¿Ð¸Ñ�, Ð½Ð°Ð·Ð¸Ð²: %.*s
+Ð´ÑƒÐ¶Ð¸Ð½Ð°: %2u, Ð²Ñ€Ñ�Ñ‚Ð°: %2u Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð°  (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)
+Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð° Ñ�Ð»Ð¸ÐºÐ°Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð¸Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ %u Ð³Ñ€ÑƒÐ¿ÐµÐ¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚Ð´Ð¾ÑˆÐ»Ð¾ Ñ˜Ðµ Ð´Ð¾ Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°Ð¸Ð½Ð´ÐµÐºÑ� Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ð´ÑƒÐ³Ð¾Ð³ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œmâ€œ Ð¸Ð»Ð¸ â€žzmmulmach-o: Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%u) Ð½Ð°Ñ˜Ð²Ð¸ÑˆÐµ Ñ˜Ðµ 255,
+Ð»Ð¾ÑˆÐ° Ð°Ñ€Ñ…Ð¸Ð²Ð°Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð¿Ð¾Ð»ÑƒÑ�ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %dÐ»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %dÐ»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð¿Ð°Ñ€ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %dÐ»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð¿Ð°Ñ€ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð¿Ñ€Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ»Ð¾ÑˆÐµ â€žmach-o ARMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %dÐ»Ð¾Ñˆ â€žmach-o ARMâ€œ Ñ�ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %dÐ»Ð¾ÑˆÐµ â€žmach-o ARMâ€œ Ð²Ð°Ð½Ð¸Ð»Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d (pcrel: %d)Ð»Ð¾ÑˆÐµ â€žmach-oâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ð±Ñ€Ð¾Ñ˜Ð° Ð¾Ð´ÐµÑ™Ð°ÐºÐ°Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�Ñ†Ñ€Ð¿Ñ™ÐµÐ½Ð°mep: Ð½ÐµÐ¼Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð·Ð° ÐºÐ¾Ð´ â€ž%dâ€œÐ¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð¼Ð¾Ð´ÑƒÐ»Ð°
 ÐºÑ€Ð°Ñ˜ Ð¼Ð¾Ð´ÑƒÐ»Ð°
-Ð½Ð°Ð·Ð¸Ð²: [Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: %08lx Ð´ÑƒÐ¶Ð¸Ð½Ð° %d]: Ð¸Ð·Ð²Ð¾Ñ€Ð½Ð°Ð½Ð¸Ð· â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð½ÐµÐ¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð½
-Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ñƒ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œÐ½Ðµ-Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°Ñ˜ÑƒÑ›Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° 0x%v Ð¿Ð»ÑƒÑ� Ð½Ð°Ñ˜Ð²ÐµÑ›Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° 0x%v Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ðµ Ð¼ÐµÑ�Ð½Ð¾ Ñ�Ð¿Ñ€ÐµÐ¼Ð¸ÑˆÑ‚Ðµ
-Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñƒ â€ž@fptrâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒÐ½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ â€žGOTâ€œ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ð·Ð° Ð¼ÐµÑ�Ð½Ðµ ÑƒÐ½Ð¾Ñ�Ðµ â€žGOTâ€œÐ½Ðµ Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð¼: Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº=%lx  Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð½=%d
+Ð½Ð°Ð·Ð¸Ð²: [Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: %08lx Ð´ÑƒÐ¶Ð¸Ð½Ð° %d]: Ð¸Ð·Ð²Ð¾Ñ€Ð½Ð°Ð½Ð¾Ð²Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚Ð¸Ð³Ð»Ð° Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾ ÑƒÐ»Ð°Ð·Ð½Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°:Ð½ÐµÐ½Ð¸Ñ˜ÐµÐ´Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐµ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œÐ½ÐµÐ¼Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¸Ð½Ð´ÐµÐºÑ�Ð°Ð½ÐµÐ¼Ð° Ð³Ñ€ÐµÑˆÐºÐµÐ½ÐµÐ¼Ð° Ð²Ð¸ÑˆÐµ Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ€Ð°Ð½Ð¸Ñ… Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð½ÐµÐ¼Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°Ð½Ð¸Ð· â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð½ÐµÐ¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð½
+Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ñƒ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œÐ½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°Ð½Ðµ-Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°Ñ˜ÑƒÑ›Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° 0x%v Ð¿Ð»ÑƒÑ� Ð½Ð°Ñ˜Ð²ÐµÑ›Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° 0x%v Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ðµ Ð¼ÐµÑ�Ð½Ð¾ Ñ�Ð¿Ñ€ÐµÐ¼Ð¸ÑˆÑ‚Ðµ
+Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñƒ â€ž@fptrâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒÐ½Ð¸ÑˆÑ‚Ð°Ð½Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸ÐºÐ°Ð·Ð°Ñ‚Ð¸Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ â€žGOTâ€œ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ð·Ð° Ð¼ÐµÑ�Ð½Ðµ ÑƒÐ½Ð¾Ñ�Ðµ â€žGOTâ€œÐ½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð·Ð° Ñ€ÐµÑ’Ð°ÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°Ð½Ðµ Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð¼: Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº=%lx Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð½=%d
 Ð½Ðµ Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð¼: Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° Ð¾ÐºÑ€ÑƒÐ¶ÐµÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð°
-Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð½Ð°ÐºÐ¾Ð½ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð¿Ñ€ÐµÐºÑ€Ð¸Ð²Ð°ÑšÐ°Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lxÐ¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lx:Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lx: Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ =%x:Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lxÐ¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lx:Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð±ÐºÐ¿Ñ‚ Ð°Ð´Ñ€ÐµÑ�Ð° 0x%08x
-Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð°: Ð½Ð°Ð·Ð¸Ð²: %.*s
+Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾Ð¼Ð¾Ð´ÑƒÐ» Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð±ÐµÐ· Ð³Ñ€ÐµÑˆÐ°ÐºÐ° !Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐµ Ð·Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ðº Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½ÐµÑ˜ÐµÐ´Ð°Ð½ Ð¾Ð´ Ð¼Ð¾Ð³ÑƒÑ›Ð¸Ñ… Ñ€Ð°Ð·Ð»Ð¾Ð³Ð° Ð¾Ð²Ðµ Ð³Ñ€ÐµÑˆÐºÐµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð´Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÐ¿ÑƒÑ‚Ð°Ð½ Ñƒ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼ ÐºÐ¾Ð´Ñƒ Ð¸Ð¼Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð¾Ð±Ñ˜Ð°Ð²Ñ™ÐµÐ½Ð¾ Ñ‚Ð°Ð¼Ð¾ Ð³Ð´Ðµ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð½Ð°ÐºÐ¾Ð½ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð¿Ñ€ÐµÐºÑ€Ð¸Ð²Ð°ÑšÐ°Ñ€Ð°Ð´Ð½Ð¸ Ð¾ÐºÐ²Ð¸Ñ€ Ð¿Ñ€Ð¸ÐºÑ™ÑƒÑ‡ÐºÐ°: Ð½ÐµÐ¼Ð° Ð²Ð¸ÑˆÐµ Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¼Ð°ÑšÐµ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚Ð°/Ð°Ñ€Ñ…Ð¸Ð²Ð°
+Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡
+Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lxÐ¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lx:Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lx: Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lxÐ¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lx:Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð±ÐºÐ¿Ñ‚ Ð°Ð´Ñ€ÐµÑ�Ð° 0x%08x
+Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» qâ€œ Ð¸ â€žzfaqâ€œ Ð¸Ð»Ð¸ â€žzqinxÐ¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð°: Ð½Ð°Ð·Ð¸Ð²: %.*s
 ÐºÑ€Ð°Ñ˜ Ð·Ð°Ð¿Ð¸Ñ�Ð°
-ÑƒÐ¿ÑƒÑ‚Ð° Ð½Ð° Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð¾Ð±Ð¸Ñ‡Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð½Ð° %04lxÑ€ÐµÐ³Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ˜Ð¾Ñˆ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»ÑƒÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°ÐºÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ñ€ÐµÐ±Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ð°Ñ€Ð°Ð½ Ð±Ñ€Ð¾Ñ˜Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ñ… Ñ�ÐµÐ³Ð¼ÐµÐ½Ð°Ñ‚Ð° Ð½Ð¸Ñ�Ñƒ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¾Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€ž%Bâ€œ: %s
-Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ�Ð°Ð½Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%dâ€œÐ¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ñ€ÑƒÑ‚Ð¸Ð½Ðµ
+Ñ�Ð½Ð¸Ð¼Ð°Ðº Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸ Ð·Ð° Ð´ÑƒÐ¶Ð¸Ð½Ñƒ Ð½Ð°Ð·Ð¸Ð²Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°ÑƒÐ¿ÑƒÑ‚Ð° Ð½Ð° Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð¾Ð±Ð¸Ñ‡Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð½Ð° %04lxÑƒÐ¿ÑƒÑ›Ð¸Ð²Ð°ÑšÐµ Ð½Ð° Ð´Ð°Ð»ÐµÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¾Ð¼ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð¾Ð³ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°Ñ€ÐµÐ³Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ â€ž%%g%dâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½ Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾: â€ž%sâ€œ Ñƒ â€ž%pBâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%pBâ€œÐ¾Ð´ÐµÑ™Ð°Ðº Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
+Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%d) Ñ˜Ðµ *Ð�Ð•ÐŸÐžÐ—Ð�Ð�Ð¢Ðž*Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° â€ž%sâ€œ Ð¸Ð¼Ð° Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ GOT Ð²Ñ€Ñ�Ñ‚Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð½Ðµ-â€žRELâ€œ Ð¿-Ð¾Ð´ÐµÑ™Ð°ÐºÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»ÑƒÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°ÐºÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ñ€ÐµÐ±Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ð°Ñ€Ð°Ð½ Ð±Ñ€Ð¾Ñ˜Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ñ… Ñ�ÐµÐ³Ð¼ÐµÐ½Ð°Ñ‚Ð° Ð½Ð¸Ñ�Ñƒ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°ÑƒÐºÐ»Ð°ÑšÐ°Ð¼ Ð½ÐµÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€ž%pBâ€œÐ¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¾Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€ž%pBâ€œ: %sÑ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ�Ð°Ð½Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%dâ€œÐ¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ñ€ÑƒÑ‚Ð¸Ð½Ðµ
 ÐºÑ€Ð°Ñ˜ Ñ€ÑƒÑ‚Ð¸Ð½Ðµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° 0x%08x
-Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²ÐºÐµ, Ð½Ð°Ð·Ð¸Ð²: %.*s
+â€žrv%dâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žqâ€œâ€žrv%dâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žzcfâ€œâ€žrv%deâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žhâ€œÐ¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ÐµÐ²Ñ€Ñ�Ñ‚Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²ÐºÐµ, Ð½Ð°Ð·Ð¸Ð²: %.*s
 set_abs_pc: 0x%08x
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-Ð¾Ð´ÐµÑ™Ð°Ðº Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ 64KB; Ð´Ð¾ÑšÐ° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (Ð²Ð¸Ð´Ð¸Ñ‚Ðµ Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-Gâ€œ)â€žsom_sizeof_headersâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾Ð¸Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ, Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð·Ð° ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸ Ñ�Ð°Ð¼Ð¾-Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°
+Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚Ð³Ñ€ÐµÑˆÐºÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œÐ¾Ð´ÐµÑ™Ð°Ðº Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº; Ð´Ð¾ÑšÐ° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (Ð²Ð¸Ð´Ð¸Ñ‚Ðµ Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-Gâ€œ)â€žsom_sizeof_headersâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾Ð¸Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ, Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð¾Ð²Ð¾Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ¾Ð¼Ð¸Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ, Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð·Ð° ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸ Ñ�Ð°Ð¼Ð¾-Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°
 Ð¸Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ: â€žmodtabâ€œ, â€žtocâ€œ Ð¸ â€žextrefsymsâ€œ Ñ˜Ð¾Ñˆ Ð½Ð¸Ñ�Ñƒ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¸ Ð·Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ðµ â€ždysymtabâ€œ.Ð¸Ð·Ð²Ð¾Ñ€ (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)
-Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸: %s
-Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿Ð°Ðº (Ð±ÐµÐ· Ð½Ð°Ð·Ð¸Ð²Ð°)ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð·Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð° â€ž.pltâ€œ, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ â€ždpâ€œ = %ldÐ¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜Ñƒ Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ñ‚Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð½Ð¸Ð· Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð°:
-term(b): 0x%02xterm_w: 0x%04xÐ¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)
-Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žARMâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žTHUMBâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%Bâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° 0x%lxÐ½Ð¸Ñ�ÐºÐ° Ð±Ð¸Ñ‚Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð°
-Ð½ÐµÑ�Ð¸Ð³ÑƒÑ€Ð°Ð½ Ð´Ð¾Ð³Ð¾Ð²Ð¾Ñ€ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð·Ð° Ð½Ðµ-â€žCOFFâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° â€ž%sâ€œ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ: %sÐ½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð² â€žegsdâ€œ ÑƒÐ½Ð¾Ñ� Ð²Ñ€Ñ�Ñ‚Ðµ %u
+Ð¿Ñ€Ð¸Ð²Ð¸Ð´Ð½Ð¾ â€žALPHA_R_BSRâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ°Ð½Ð°Ð»Ð¸Ð·Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ›Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€Ð¸Ñ‚Ð¸ Ð¿Ð¾Ð·Ð¸Ð² Ð¾Ð´ â€ž%sâ€œ Ð´Ð¾ â€ž%sâ€œ
+Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° (%d) Ñƒ â€ž_bfd_vms_pushâ€œ-ÑƒÐ¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñƒ â€ž_bfd_vms_popâ€œ-ÑƒÑ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸: %s
+Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð° â€ž%sâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ðµ Ð²ÐµÐ·ÐµÑ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿Ð°Ðº (Ð±ÐµÐ· Ð½Ð°Ð·Ð¸Ð²Ð°)Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜Ñƒ Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ñ‚Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ â€žst_otherâ€œ Ð·Ð° Ð�Ð‘Ð˜ Ð¸Ð·Ð´Ð°ÑšÐµ 1Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€žREGISTERâ€œ Ñƒ â€ž%pBâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%pBâ€œÑ�Ð²ÐµÐ·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€žSTB_GNU_UNIQUEâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° ÑƒÐºÐ»Ð°ÑšÐ°ÑšÐµ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° ÐºÐ¾Ñ˜Ð¸ Ð½Ðµ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜Ð¸Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€žSTT_GNU_IFUNCâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°Ð³Ñ€ÐµÑˆÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ�ÐºÐ¾Ð³ Ð¿Ð¾Ð·Ð¸Ð²Ð°Ð½Ð¸Ð· Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð°:
+term(b): 0x%02xterm_w: 0x%04xâ€žbfinâ€œ Ñ†Ð¸Ñ™ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ð²Ð°ÑšÐ°Ñ�ÑƒÐºÐ¾Ð± Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐ° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° â€žELFâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð° Ð¸Ð· â€ž%pBâ€œÐ¿Ñ€ÐµÐ²Ð¸ÑˆÐµ â€žGOTâ€œ ÑƒÐ½Ð¾Ñ�Ð° Ð·Ð° â€ž-fpicâ€œ, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œÐ¿Ð¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð´Ð° ÑƒÐºÑ™ÑƒÑ‡Ð¸Ñ‚Ðµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐµ Ð´Ð° Ð±Ð¸Ñ�Ñ‚Ðµ Ð¸Ð·Ð±ÐµÐ³Ð»Ð¸ Ñ�ÐºÑ€Ð°Ñ›Ð¸Ð²Ð°ÑšÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°Ð¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ Ð·Ð° ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚:
+Ð¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ Ð·Ð° Ð¿Ð¾Ð´Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñƒ â€ž%uâ€œ:
+ÑƒÐºÑƒÑ†Ð°Ð½Ð¸ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡
+Ð¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)
+Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¿Ð¾Ð´Ð°Ñ‚ÐºÐµ Ð·Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€ž%sâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÐµÐºÐ²Ð¸Ð²Ð°Ð»ÐµÐ½Ñ‚Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¸ÐºÐ°Ð¶ÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHSâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ â€ž%#xâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%pBâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œÐ½Ð¸Ñ�ÐºÐ° Ð±Ð¸Ñ‚Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð°
+Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° â€ž%sâ€œ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ: %sÐ½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð¼Ð°ÑˆÐ¸Ð½ÐµÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð²Ñ€Ñ�Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° %d Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ OSF/1 Ñ˜ÐµÐ·Ð³Ñ€Ð°Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð² â€žegsdâ€œ ÑƒÐ½Ð¾Ñ� Ð²Ñ€Ñ�Ñ‚Ðµ %u
 Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° emh Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ
-Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žETIRâ€œ Ð½Ð°Ñ€ÐµÐ´Ð±Ð° %dÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÐ° Ð±Ð°Ñ˜Ñ‚Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð° 0x%lxÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ñ€ÐµÐ´Ð½Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%dâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ â€ž%câ€œ Ñƒ Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»ÑƒÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° Ð¸Ð·Ð²Ð¾Ñ€Ð° â€ž%dâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850â€œÐ½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€žSTAâ€œ Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%sâ€œÐ½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ñ€Ð°Ð·Ð¼Ð°ÐºÐ° Ð°Ð´Ñ€ÐµÑ�Ðµ â€ždata/insnâ€œÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð°Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850 E3â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850eâ€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e1â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e2â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e2v3â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e3v5â€œÐ²-Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: 0x%02x, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: 0x%08x vma:			Ð�Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ°	 Ð�Ð´Ñ€ÐµÑ�Ð° ÐºÑ€Ð°Ñ˜Ð°	  Ð˜Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸
-ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ðµ â€žwchar_tâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ñƒ Ð¿Ð¾ Ñ‚Ð¾Ð¼Ðµ Ð´Ð° Ð»Ð¸ Ñ˜Ðµ ÐºÐ¾Ð´ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žDSBTâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %s Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ° Ð¾Ð½Ð´Ð° Ñ›Ðµ Ð¸Ð·Ð»Ð°Ð· Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %s Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ°. ÐšÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ° ÐºÑ€Ð¾Ð· Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ ÑƒÑ�Ð¿ÐµÑ‚Ð¸ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¸ â€žwchar_tâ€œ Ð¾Ð½Ð´Ð° Ñ›Ðµ Ð¸Ð·Ð»Ð°Ð· Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¸ â€žwchar_tâ€œ. ÐšÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ â€žwchar_tâ€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ ÐºÑ€Ð¾Ð· Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ ÑƒÑ�Ð¿ÐµÑ‚Ð¸ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™Ð°ÐºÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ°
-ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¸Ð¼Ð° Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐµ â€” Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð° â€ž%sâ€œ
-ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½ÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d
-ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜ Ð¸Ð·Ð²Ð¾Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñ�ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ â€ž%Bâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ ÐºÐ¾Ñ˜Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-ÐŸÐ˜Ð¦ ÐºÐ¾Ð´ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ ÐºÐ¾Ñ˜Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-ÐŸÐ˜Ð” ÐºÐ¾Ð´ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½ Ñƒ Ð±ÐµÐ»ÐµÑˆÐºÑƒÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° â€ž%Aâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ñƒ â€žPROGBITSâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð¸Ñ�Ñƒ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñƒ â€ž%Bâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ â€ž%sâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€ž%sâ€œÐ²Ð¸ Ð½ÐµÐ¼Ð°Ñ‚Ðµ Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµÑ‚Ðµ â€ž%sâ€œ Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸
\ No newline at end of file
+Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žEGSDâ€œ Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° %dÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žETIRâ€œ Ð½Ð°Ñ€ÐµÐ´Ð±Ð° %dÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ñƒ â€ž.optionâ€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ â€ž%sâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ: 0x%02xÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÐ° Ð±Ð°Ñ˜Ñ‚Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð° â€ž%#xâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ñ€ÐµÐ´Ð½Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%dâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ â€ž%câ€œ Ñƒ Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»ÑƒÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s + %sâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° Ð¸Ð·Ð²Ð¾Ñ€Ð° â€ž%dâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸ â€ž%sâ€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850â€œÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾: %xÐ½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žINPUT_SECTION_FLAG %sâ€œ
+Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¸Ð´ â€žTI COFFâ€œ Ñ†Ð¸Ñ™Ð° â€ž0x%xâ€œÐ½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€ž.stabâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€žSTAâ€œ Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%sâ€œÐ½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ñ€Ð°Ð·Ð¼Ð°ÐºÐ° Ð°Ð´Ñ€ÐµÑ�Ðµ â€ždata/insnâ€œÐ½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð°vâ€œ Ð¸Ð»Ð¸ â€žzve64dâ€œ Ð¸Ð»Ð¸ â€žzve64fâ€œ Ð¸Ð»Ð¸ â€žzve32fvâ€œ Ð¸Ð»Ð¸ â€žzve64xâ€œ Ð¸Ð»Ð¸ â€žzve32xÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850 E3â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850eâ€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e1â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e2â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e2v3â€œÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e3v5â€œÐ¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ˜ÐµÐ´Ð½Ð¾Ð¼ Ð¾Ð´ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸  Ð¼Ð°Ð»Ð¸Ñ…, Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð¼Ð°Ð»Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð¼Ð°Ð»Ð¸Ñ… Ð¸ Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð·Ð°ÑƒÐ·Ð¼Ðµ Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°Ð²-Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: 0x%02x, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: 0x%08x vma:			Ð�Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ°	 Ð�Ð´Ñ€ÐµÑ�Ð° ÐºÑ€Ð°Ñ˜Ð°	  Ð˜Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ðµ â€žwchar_tâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ñƒ Ð¿Ð¾ Ñ‚Ð¾Ð¼Ðµ Ð´Ð° Ð»Ð¸ Ñ˜Ðµ ÐºÐ¾Ð´ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žDSBTâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð£Ð§Ð˜Ð¢Ð�Ðˆ Ñ�Ð° Ð¾Ð²Ð»Ð°ÑˆÑ›ÐµÑšÐ¸Ð¼Ð° Ð¿Ð¸Ñ�Ð°ÑšÐ° Ð¸ Ð±Ñ€Ð¸Ñ�Ð°ÑšÐ°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¢Ð›Ð¡ Ð¿Ð¾Ð´ÐµÐ¾Ðº Ñ�Ð° Ð¾Ð²Ð»Ð°ÑˆÑ›ÐµÑšÐµÐ¼ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ñ�Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµÐ¼ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ ÑˆÐ¸Ñ€Ð¸ Ð¿Ñ€ÐµÐºÐ¾ ÐºÑ€Ð°Ñ˜Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¿Ð¾Ð´ÐµÐ¾Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ ÑˆÐ¸Ñ€Ð¸ Ð¿Ñ€ÐµÐºÐ¾ ÐºÑ€Ð°Ñ˜Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%pBâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¾Ð²Ð°Ð½Ð¾ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%u.%u.%uâ€œ Ð°Ð»Ð¸ Ð¸Ð·Ð»Ð°Ð· ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%u.%u.%uâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žMSA ABIâ€œ â€ž%dâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ â€žABIâ€œ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %s Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ° Ð¾Ð½Ð´Ð° Ñ›Ðµ Ð¸Ð·Ð»Ð°Ð· Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %s Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ°; ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ° ÐºÑ€Ð¾Ð· Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ ÑƒÑ�Ð¿ÐµÑ‚Ð¸ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¸ â€žwchar_tâ€œ Ð¾Ð½Ð´Ð° Ñ›Ðµ Ð¸Ð·Ð»Ð°Ð· Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¸ â€žwchar_tâ€œ; ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ â€žwchar_tâ€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ ÐºÑ€Ð¾Ð· Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ ÑƒÑ�Ð¿ÐµÑ‚Ð¸ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žMSA ABIâ€œ â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žMSA ABIâ€œ â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žMSA ABI %dâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ â€žABIâ€œ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ â€žABIâ€œ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ â€žABIâ€œ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ðµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±ÑƒÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ðµ â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGNU_PROPERTY_TYPEâ€œ (%ld) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ: %#lxÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGNU_PROPERTY_TYPEâ€œ (%ld) Ð²Ñ€Ñ�Ñ‚Ð° (0x%x) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°: 0x%xÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÑšÐµ Ð½Ðµ ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ð²Ð° Ð½Ð° Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ: 0x%xÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°: 0x%xÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™Ð°ÐºÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€ž%dâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€žARCâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žMSPABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žGNU_PROPERTY_TYPEâ€œ (%ld) Ð²Ñ€Ñ�Ñ‚Ð°: 0x%xÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ°
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð° â€ž%sâ€œ
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½ÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ñ�Ðµ Ñ‚Ñ€ÐµÐ±Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %s: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.note.GNU-stackâ€œ Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %s: Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº (Ñ˜ÐµÑ€ Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.note.GNU-stackâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ¸Ð²)ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--plt-localentryâ€œ Ñ˜Ðµ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð¾ Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð±ÐµÐ· â€žld.soâ€œ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð·Ð° Ð¾Ñ‚ÐºÑ€Ð¸Ð²Ð°ÑšÐµ â€žABIâ€œ Ð¿Ñ€ÐµÑ�Ñ‚ÑƒÐ¿Ð°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--plt-localentryâ€œ Ñ˜Ðµ Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° â€žpower10 pc-relativeâ€œ ÐºÐ¾Ð´Ð¾Ð¼ÑƒÐ¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð�Ð�ÐŸÐžÐœÐ•Ð�Ð�: Ð½ÐµÐ¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° Ð¼Ð¾Ð³Ñƒ Ð´Ð¾Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¾Ð·Ð±Ð¸Ñ™Ð½Ð¸Ñ… Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°.  Ð˜Ñ�Ð¿Ð¸Ñ‚Ð¸Ð²Ð°ÑšÐµ Ñ�Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ñ€ÑƒÑ‡ÑƒÑ˜Ðµ.ÑƒÐ¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð�Ð�ÐŸÐžÐœÐ•Ð�Ð�: Ð½ÐµÐ¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð½Ð¾Ñ�Ñ‚Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð¾Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¾Ð·Ð±Ð¸Ñ™Ð½Ð¸Ñ… Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°.  Ð˜Ñ�Ð¿Ð¸Ñ‚Ð¸Ð²Ð°ÑšÐµ Ñ�Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ñ€ÑƒÑ‡ÑƒÑ˜Ðµ.ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRL78_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRX_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ðµ Ð¾Ð´ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° (%u) ÑšÐµÐ³Ð¾Ð²Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¾Ð±Ð¸Ñ‡Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ Ñ˜Ðµ Ð¼Ð°ÑšÐµ Ð¾Ð´ â€ž%uâ€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾Ð³ Ð¾Ð¿ÑˆÑ‚Ð¾Ð¼ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¾Ð¼ Ñƒ â€ž%pBâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ Ñ˜Ðµ Ð¼Ð°ÑšÐµ Ð¾Ð´ â€ž%uâ€œ Ñƒ â€ž%pBâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜ Ð¸Ð·Ð²Ð¾Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñ�ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ â€ž%pBâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ‡Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%pBâ€œ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð½ÐµÐ¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¸ ÐºÐ¾Ð´ Ñƒ â€ž%pBâ€œ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñ�Ð° ÑšÐ¸Ð¼ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐºÐ»Ð°ÑšÐ°Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%pBâ€œ ÑƒÑ�Ð»ÐµÐ´ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ñ�Ð¿Ð¾Ñ™Ð°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ Ð¸Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´Ð±Ð°Ñ†ÑƒÑ˜ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐºÑ™ÑƒÑ‡ÑƒÑ˜ÐµÐ¼ Ð¸Ð·Ð²Ñ€ÑˆÐ¸Ð²Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ð·Ð±Ð¾Ð³ â€ž-z execstackâ€œ Ð¾Ð¿Ñ†Ð¸Ñ˜Ðµ Ð»Ð¸Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€œ%pBâ€œ-Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ñ†Ð¸Ñ™Ð½Ð¸Ð¼ â€ž%sâ€œ, Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ Ð¼ÐµÑ‚Ðµ Ð½Ð° â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€œ%pBâ€œ-Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ñ†Ð¸Ñ™Ð½Ð¸Ð¼ â€žck%sâ€œ, ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð¿Ñ†Ð¸Ñ˜Ð° â€žgcâ€œ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ ÐºÐ¾Ñ˜Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-ÐŸÐ˜Ð¦ ÐºÐ¾Ð´ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ ÐºÐ¾Ñ˜Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-ÐŸÐ˜Ð” ÐºÐ¾Ð´ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ�Ð°Ð¼ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%pBâ€œ Ð¿Ð¾ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð²ÐµÑ› Ð½Ð°Ð²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ Ð½Ðµ-Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¾ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¾Ð²Ð°Ð½Ð¾ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐµ 1.9.1 Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¸Ð¼ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐ¸Ð¼Ð°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½ Ñƒ Ð±ÐµÐ»ÐµÑˆÐºÑƒÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° â€ž%pAâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ñƒ â€žPROGBITSâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°ÐºÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð¸Ñ�Ñƒ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ð¸Ð· â€ž%dâ€œ Ñƒ â€ž%dâ€œ Ð·Ð° â€ž%pBâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñƒ â€ž%pBâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ â€ž%sâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ %pBÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð½Ð°Ð·Ð¸Ð² Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%#xâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žeâ€œ-Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%#lxâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ð´ÐµÑˆÐµÐ½Ðµ Ð¸Ð»Ð¸ Ñ�Ñ‚Ð°Ñ€Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ñƒ Ð¼Ð°ÑˆÐ¸Ð½ÑƒÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ¿Ð¸Ñ� Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ñƒ Ñ˜Ðµ Ñ�Ð¿Ð¾Ñ€: Ð¿Ð¾Ð½Ð¾Ð²Ð¾ ÑƒÐ¿Ð¸Ñ�ÑƒÑ˜ÐµÐ¼ Ð²Ñ€ÐµÐ¼ÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº ÑƒÐ¿Ð¸Ñ�Ð¸Ð²Ð°ÑšÐ° â€ž%pAâ€œ Ð½Ð° Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾Ð¼ (Ð½Ð¿Ñ€. Ð½ÐµÐ³Ð°Ñ‚Ð¸Ð²Ð°Ð½) Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ…-Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°
+x ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ñ�Ð° Ð¸Ð·Ð´Ð°ÑšÐ¸Ð¼Ð°Ð´Ð°Ð²Ð¸ Ð½ÐµÐ¼Ð°Ñ‚Ðµ Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµÑ‚Ðµ â€ž%sâ€œ Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸zbbâ€œ Ð¸Ð»Ð¸ â€žzbkbzbcâ€œ Ð¸Ð»Ð¸ â€žzbkczcbâ€œ Ð¸ â€žzbazcbâ€œ Ð¸ â€žzbbzcbâ€œ Ð¸ â€žzmmulâ€œ, Ð¸Ð»Ð¸ â€žzcbâ€œ Ð¸ â€žmzfhâ€œ Ð¸ â€žzfazfhâ€œ Ð¸ â€žzfaâ€œ, Ð¸Ð»Ð¸ â€žzvfhâ€œ Ð¸ â€žzfazfhâ€œ Ð¸Ð»Ð¸ â€žzhinxzfhâ€œ Ð¸Ð»Ð¸ â€žzvfhzfhminâ€œ Ð¸ â€ždâ€œ, Ð¸Ð»Ð¸ â€žzhinxminâ€œ Ð¸ â€žzdinxzfhminâ€œ Ð¸ â€žqâ€œ, Ð¸Ð»Ð¸ â€žzhinxminâ€œ Ð¸ â€žzqinxzfhminâ€œ Ð¸Ð»Ð¸ â€žzhinxminzihintntlâ€œ Ð¸ â€žcâ€œ, Ð¸Ð»Ð¸ â€žzihintntlâ€œ Ð¸ â€žzcazkndâ€œ Ð¸Ð»Ð¸ â€žzknezvbbzvbczvkbzvkgzvknedzvknhaâ€œ Ð¸Ð»Ð¸ â€žzvknhbzvksedzvkshâ€žzvl*bâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° ÑƒÐºÑ™ÑƒÑ‡Ðµ Ð¸Ð»Ð¸ â€žvâ€œ Ð¸Ð»Ð¸ â€žzveâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµPRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: TLS relocation at 0x% over non-TLS symbol %s (0x%x)
+%pB: TLS local relocation at 0x% over imported symbol %s
+%pB: relocation (%d) at 0x% has wrong r_rsize (0x%x)
+%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: relocation (%d) at (0x%) has wrong r_rsize (0x%x)
+%pB: illegal relocation type %d at address %#%pB: bad string table size %%pB: stripping non-representable symbol '%s' (value 0x%)%pB: bad reloc address %# in section `%pA'error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %DWARF error: unable to locate abstract instance DIE ref %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)ERROR: CMSE stub (%s section) too far (%#) from destination (%#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#global pointer relative relocation at address %# when _gp not defined
+unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767
+%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
+ linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB(%pA+%#): misaligned symbol `%s' (%#) for relocation %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: %pA+%: relocation addend % too large%pB: version count (%) does not match symbol count (%ld)%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: bad symbol definition: `Main' set to % rather than the start address %
+%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB(%pA+%#): %s relocation offset out of order%pB(%pA+%#): %s relocation offset out of range%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csect%pB: Unable to find a stub csect in rangeof relocation at %# targeting'%s'TOC overflow: %# > 0x10000; try -mminimal-toc when compiling%pB: error: erratum 843419 immediate 0x% out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead%pB(%pA+%#): unresolvable %s relocation in section `%s'%# invaild imm%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x% without any addend, but may be 0x% after adding the %%pcrel_lo addend%pB: Data Directory (%lx bytes at %) extends across section boundary at %%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ â€ž% >= %â€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ñ�Ð° â€ž%#â€œ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð±ÐµÐ· ÑƒÐ½Ð¾Ñ�Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°%pB: Ð¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x% Ð¿Ñ€ÐµÐºÐ¾ Ð½Ðµ-Ð¢Ð›Ð¡ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ (0x%x)
+%pB: Ð¢Ð›Ð¡ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x% Ð¿Ñ€ÐµÐºÐ¾ ÑƒÐ²ÐµÐ·ÐµÐ½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ
+%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%d) Ð½Ð° 0x% Ð¸Ð¼Ð° Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ r_r-Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ (0x%x)
+%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ â€žR_SH_USESâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_SH_USESâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ â€žinsnâ€œ %#x%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€žR_SH_USESâ€œ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ˜Ðµ Ñƒ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žCOUNTâ€œ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜%pB: %#: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%d) Ð½Ð° (0x%) Ð¸Ð¼Ð° Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ r_r-Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ (0x%x)
+%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %d Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ %#%pB: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ð·Ð° %%pB: ÑƒÐºÐ»Ð°ÑšÐ°Ð¼ Ð½ÐµÐ¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ñ™Ð°Ñ˜ÑƒÑ›Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ (Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ 0x%)%pB: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB(%pA) Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ (%# Ð±Ð°Ñ˜Ñ‚Ð°)â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ (%) Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¸Ð»Ð¸ Ñ˜ÐµÐ´Ð½Ð°Ðº Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ %s (%)â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (%) Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼ÐµÑ’ÑƒÐ¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° â€ž%â€œâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸ (%)â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° Ñ˜Ðµ Ð²ÐµÑ›Ð¸ (%#) Ð¾Ð´ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ (%#lx)â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žaltâ€œ ÑƒÐ¿ÑƒÑ‚Ñƒ %â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ðº â€žDIEâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ %%pB(%pA+%#): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ â€ž%u >= %â€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ: %#%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pA lma %#â€œ Ñ˜Ðµ Ð´Ð¾Ñ‚ÐµÑ€Ð°Ð½ Ð½Ð° %#%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¿Ð¾Ð´ÐµÐ¾Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð½Ð° â€žvaddr=%#â€œ, Ð´Ð° Ð»Ð¸ Ñ˜Ðµ Ñ‚Ð¾ Ð½Ð°Ð¼ÐµÑ€Ð°Ð²Ð°Ð½Ð¾?%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° Ð·Ð° â€ž%#â€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾%pB(%pA+%#): â€žCMEMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾, â€ž16 MSBâ€œ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ â€ž%#xâ€œ (Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ñ˜Ðµ %#)%pB(%pA+%#): â€žCMEMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° â€ž%s+%#â€œ Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾, â€ž16 MSBâ€œ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ â€ž%#xâ€œ (Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ñ˜Ðµ %#)Ð“Ð Ð•Ð¨ÐšÐ�: â€žCMSEâ€œ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº (Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ) Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð´Ð°Ð»ÐµÐºÐ¾ (%#) Ð¾Ð´ Ð¿Ð´Ñ€ÐµÐ´Ð¸ÑˆÑ‚Ð° (%#)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#lxâ€œ Ñƒ â€žTLSâ€œ Ñ‚Ñ€Ð°Ð¼Ð±ÑƒÐ»Ð¸Ð½Ð¸%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#lxâ€œ Ð½Ð° ÐºÐ¾Ñ˜Ñƒ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žTLS_GOTDESCâ€œ%pB(%pA+%#): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°%pB(%pA+%#): Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ðµ Ñ�Ñƒ Ñ�Ð°Ð¼Ð¾ â€žADDâ€œ Ð¸Ð»Ð¸ â€žSUBâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€žALUâ€œ Ð³Ñ€ÑƒÐ¿Ðµ%pB(%pA+%#): Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð´ÐµÑ™ÐµÑšÐ° %# Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð³Ñ€ÑƒÐ¿Ðµ â€ž%sâ€œ%pB(%pA+%#): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSEC_MERGEâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°%pB(%pA+%#): â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ%pB(%pA+%#): â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žÐ½Ðµ-TLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ%pB(%#): Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žSTM32L4XXâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ; Ð¸Ñ�ÐºÐ¾Ñ‡Ð¸Ñ… Ð¸Ð· Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° % Ð±Ð°Ñ˜Ñ‚Ð°; Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ Ð³Ñ€Ð°Ð½Ðµ%pB(%pA+%#): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB(%pA+%#): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° â€ž%pA+%#â€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ % Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ % Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB(%pA+%#): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-ffunction-sectionsâ€œ%pB(%pA+%#): Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° â€ž%sâ€œ Ð·Ð° â€žinsn %#xâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñƒ Ð½Ðµ-Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð²ÐµÐ·Ð¸%pB(%pA+%#): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ%pB: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ¾ â€žTLSâ€œ Ð¿Ñ€ÐµÐ»Ð°Ð· Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð¿Ñ€Ð¸ %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° %# (Ñ†Ð¸Ñ™ = %#)ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ñ�ÑƒÐ²Ð¸ÑˆÐ½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° %# (Ñ†Ð¸Ñ™ = %#)%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %#Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ %# ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾
+Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ (Ð½Ð° %#) Ð¸Ð· Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° (Ð½Ð° %#) Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ (%) Ð¸Ð·Ð²Ð°Ð½ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾Ð³ Ð¾Ð¿Ñ�ÐµÐ³Ð°, Ð¾Ð´ -32678 Ð´Ð¾ 32767
+%pB(%pA+%#): Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ñ�Ð° Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼ â€ž%#xâ€œ%pB(%pA): Ð½ÐµÑ�Ð¸Ð³ÑƒÑ€Ð½Ð¾ â€žPIDâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð° %# (Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñƒ â€ž%sâ€œ)%pB(%pA+%#): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ð·Ð° â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ%pB: â€žCALL15â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %# Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_SH_USESâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð»Ð°Ðº 0x%x%pB: %#: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ñ†Ð¸Ñ™ Ð³Ñ€Ð°Ð½Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°%pB: %#: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ %#%pB: %#: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: â€žR_SH_PSHAâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%#â€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ -32..32%pB: %#: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: â€žR_SH_PSHLâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%#â€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ -32..32%pB(%pA+%#): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° ÑƒÐ½ÐµÑ�ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ%pB(%pA+%#): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žGD->LEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xd4??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xc7??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xd1??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x310c??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x410b??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x34cc??)%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žIE->LEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xd0??: mov.l)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x0?12: stc)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x0?ce: mov.l)%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žGD->IEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žLD->LEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#%pB(%s+%#): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð½Ð°Ðº%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%#xâ€œ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%#â€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žGOTâ€œ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº â€ž%â€œ-Ð° Ð·Ð° â€ž%sâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾Ð¼ â€žGOTâ€œ Ñ�Ð°Ð±Ð¸Ñ€ÐºÑƒ â€ž%â€œ-Ð°%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žPLTâ€œ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº â€ž%â€œ-Ð° Ð·Ð° â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ %# Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ%pB(%pA+%#): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°=%#)%pB(%pA+%#): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ; Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾%pB(%pA+%#): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ Ð·Ð° â€žXTENSA_ASM_SIMPLIFYâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ; Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° Ð·Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ%pB: %pA+%#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð³ ÑƒÐ»Ð°Ð·Ð½Ð¾Ð³ Ð·Ð½Ð°ÐºÐ°ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð·Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð° â€ž.pltâ€œ, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ â€ždpâ€œ = %%pB(%pA+%#): Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ñ�Ñ‚Ð¸Ñ›Ð¸ â€ž%sâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼ â€žbrâ€œ Ð½Ð° %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€žbrlâ€œ Ð¸Ð»Ð¸ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ñƒ%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° ÐºÑ€Ð°Ñ‚ÐºÐ¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (%# >= 0x400000)%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€žTLSâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð½Ð° %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ.%pB: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼ â€žbrâ€œ (%s) Ñƒ â€ž%sâ€œ Ð½Ð° %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¾Ð¼ %# (> 0x1000000).ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ð¸Ð· â€ž%â€œ Ñƒ â€ž%pBâ€œ Ñƒ â€ž%â€œ Ñƒ â€ž%pBâ€œ%pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%â€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld%pB: Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð·Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð·Ð°
+ Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡ÐµÐ¼: Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾: %# != Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾: %#%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° â€žLOCALâ€œ: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ â€ž$%â€œ Ð½Ð¸Ñ˜Ðµ Ð¼ÐµÑ�Ð½Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€; Ð¿Ñ€Ð²Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ñ˜Ðµ â€ž$%â€œ%pB(%pA+%#): Ð»Ð¾ÑˆÐµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ (%#) Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð¸Ð¼Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº: %%pB: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº %s%#x Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð° %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%pB: %pA+%: Ð´Ð¾Ð´Ð°Ñ‚Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° % Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº%pB: Ð±Ñ€Ð¾Ñ˜ Ð¸Ð·Ð´Ð°ÑšÐ° (%) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (%ld)%pB: Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° (%# >= %#lx) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ%pB: Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (%#) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ°Ð´Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½ÐµÐ¼Ð° Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%#) Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½Ðµ-Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»%pB: %pA+%#: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð·Ð° â€žINHERITâ€œ%pB: Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€ž.reginfoâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°; Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… %, Ð°Ð»Ð¸ Ð´Ð¾Ð±Ð¸Ñ… %%pB: â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %# Ð½Ð¸Ñ˜Ðµ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ñƒ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸Ð¼%pB: â€žCALL16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %# Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÑƒÐ¿Ð¾Ñ€ÐµÑ’ÑƒÑ˜ÑƒÑ›Ðµ â€žLO16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ Ð½Ð° %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ%pB: â€ž%pAâ€œ ÑƒÐ½Ð¾Ñ� â€žVMAâ€œ Ð¾Ð´ %# Ð²Ð°Ð½ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€ž-Ttext-segment=...â€œ%pB: â€ž%pAâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ % Ð¸Ð· â€ž%pAâ€œ Ð¸Ð·Ð° Ð¾Ð¿Ñ�ÐµÐ³Ð° â€žADDIUPCâ€œ%pB: â€ž%pAâ€œ Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº â€žVMAâ€œ Ð¾Ð´ %# Ð²Ð°Ð½ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€ž-Ttext-segment=...â€œ%pB 64-Ð±Ð¸Ñ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° %# Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ%pB: Ð°Ð´Ñ€ÐµÑ�Ð° %# Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒÐ°Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° (%#) Ñ˜Ðµ Ð¸Ñ�Ð¿Ð¾Ð´ Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° (%#)%pB: Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð¸Ð·Ð° ÐºÑ€Ð°Ñ˜Ð° Ñ�Ñ‚Ð¾Ð¿Ñ™ÐµÐ½Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° (%)%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ… Ð´Ð° ÐµÐ¼Ð¸Ñ‚ÑƒÑ˜ÐµÐ¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ ÐºÐ¾Ñ˜Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ 4 â€ž%#â€œ%pB: Ð»Ð¾ÑˆÐ° Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: â€žMainâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð½Ð° â€ž%â€œ ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%â€œ
+%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° %%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÑƒÐ¶Ð¸Ð½Ðµ %: %#%pB(%pA+%#): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%pB(%pA+%#): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%pB: Ð»Ð¾Ñˆ â€žXTY_ERâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ: ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð±Ñ€Ð¾Ñ˜ %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %%pB: â€žXMC_TC0â€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ ÐºÐ»Ð°Ñ�Ð° %d scn-Ð´ÑƒÐ¶Ð¸Ð½Ðµ %%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s:%â€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ†-Ð¾Ð´ÐµÑ™ÐºÑƒ%pB: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ñ†-Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð½Ð° %# ÐºÐ¾Ñ˜Ð¸ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° â€ž%sâ€œÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°: %# > 0x10000; Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ñ�Ð° â€ž-mminimal-tocâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐºÐ° 843419 Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ð½Ð¾ 0x% Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð�Ð”Ð  (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°) Ð¸ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ˜Ðµ â€ž--fix-cortex-a53-843419=Ð°Ð´Ñ€â€œ.  Ð¢Ð°ÐºÐ¾ Ð´Ð° Ð¿Ð¾ÐºÑ€ÐµÑ›ÐµÐ¼ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñ�Ð° â€ž--fix-cortex-a53-843419=fullâ€œ%pB(%pA+%#): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ%# Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ â€žimmâ€œ%pB(%pA+%#): % Ð±Ð°Ñ˜Ñ‚Ð° Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½Ð° %-Ð±Ð°Ñ˜Ñ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ, Ð°Ð»Ð¸ Ñ�Ð°Ð¼Ð¾ % Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�ÑƒÑ‚Ð½Ð¾â€ž%%pcrel_loâ€œ Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð·Ð° â€ž%%pcrel_hiâ€œ Ñ˜Ðµ 0x% Ð±ÐµÐ· Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ°, Ð°Ð»Ð¸ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ 0x% Ð½Ð°ÐºÐ¾Ð½ Ð´Ð¾Ð´Ð°Ð²Ð°ÑšÐ° â€ž%%pcrel_loâ€œ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ°%pB: Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (%lx Ð±Ð°Ñ˜Ñ‚Ð° Ð½Ð° %) Ñ�Ðµ Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð¸ Ð¿Ñ€ÐµÐºÐ¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¾Ð´ÐµÑ™ÐºÐ° Ð½Ð° %
\ No newline at end of file
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/sr.po ./bfd/po/sr.po
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/sr.po	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/sr.po	2024-02-01 01:47:14.000000000 +0000
@@ -1,594 +1,773 @@
-# Messages franÃ§ais pour GNU concernant bfd.
-# Copyright (C) 2014 Free Software Foundation, Inc.
+# Serbian  translation of bfd.
+# Copyright Â© 2014 Free Software Foundation, Inc.
 # This file is distributed under the same license as the binutils package.
-# ÐœÐ¸Ñ€Ð¾Ñ�Ð»Ð°Ð² Ð�Ð¸ÐºÐ¾Ð»Ð¸Ñ› <miroslavnikolic@rocketmail.com>, 2016.
+# ÐœÐ¸Ñ€Ð¾Ñ�Ð»Ð°Ð² Ð�Ð¸ÐºÐ¾Ð»Ð¸Ñ› <miroslavnikolic@rocketmail.com>, 2016-2024.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd-2.24.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2014-02-10 09:42+1030\n"
-"PO-Revision-Date: 2016-05-29 17:48+0200\n"
+"Project-Id-Version: bfd-2.41.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2024-01-15 14:55+0000\n"
+"PO-Revision-Date: 2024-01-19 20:00+0100\n"
 "Last-Translator: ÐœÐ¸Ñ€Ð¾Ñ�Ð»Ð°Ð² Ð�Ð¸ÐºÐ¾Ð»Ð¸Ñ› <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
 "Language: sr\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: aout-cris.c:196
+#, c-format
+msgid "%pB: unsupported relocation type exported: %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð¸Ð·Ð²ÐµÐ·ÐµÐ½Ð°: %#x"
 
-#: aout-adobe.c:127
-msgid "%B: Unknown section type in a.out.adobe file: %x\n"
-msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€ža.out.adobeâ€œ: %x\n"
-
-#: aout-cris.c:200
-#, c-format
-msgid "%s: Invalid relocation type exported: %d"
-msgstr "%s: Ð˜Ð·Ð²ÐµÐ·ÐµÐ½Ð° Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
-
-#: aout-cris.c:243
-msgid "%B: Invalid relocation type imported: %d"
-msgstr "%B: Ð£Ð²ÐµÐ·ÐµÐ½Ð° Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
+#: aout-cris.c:242
+#, c-format
+msgid "%pB: unsupported relocation type imported: %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ ÑƒÐ²ÐµÐ·ÐµÐ½Ð°: %#x"
 
 #: aout-cris.c:254
-msgid "%B: Bad relocation record imported: %d"
-msgstr "%B: Ð£Ð²ÐµÐ·ÐµÐ½ Ñ˜Ðµ Ð»Ð¾Ñˆ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
+#, c-format
+msgid "%pB: bad relocation record imported: %d"
+msgstr "%pB: ÑƒÐ²ÐµÐ·ÐµÐ½ Ñ˜Ðµ Ð»Ð¾Ñˆ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
 
-#: aoutx.h:1273 aoutx.h:1611
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1237 pdp11.c:1510
 #, c-format
-msgid "%s: can not represent section `%s' in a.out object file format"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ â€ža.outâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+msgid "%pB: can not represent section `%pA' in a.out object file format"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ â€ža.outâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
 
-#: aoutx.h:1577
+#: aoutx.h:1576 pdp11.c:1482
 #, c-format
-msgid "%s: can not represent section for symbol `%s' in a.out object file format"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ža.outâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ža.outâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
 
-#: aoutx.h:1579 vms-alpha.c:7564
+#: aoutx.h:1579 vms-alpha.c:8461
 msgid "*unknown*"
 msgstr "*Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾*"
 
-#: aoutx.h:4018 aoutx.h:4344
-msgid "%P: %B: unexpected relocation type\n"
-msgstr "%P: %B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°\n"
+#: aoutx.h:1715 pdp11.c:1578
+#, c-format
+msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ â€ž%<PRIu64> >= %<PRIu64>â€œ"
+
+#: aoutx.h:1963
+#, c-format
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žAOUTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
+
+#: aoutx.h:2407 aoutx.h:2425 pdp11.c:2059
+#, c-format
+msgid "%pB: attempt to write out unknown reloc type"
+msgstr "%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€Ñ�Ñ‚Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
 
-#: aoutx.h:5375
+#: aoutx.h:4080 pdp11.c:3443
 #, c-format
-msgid "%s: relocatable link from %s to %s not supported"
-msgstr "%s: Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð²ÐµÐ·Ð° Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+msgid "%pB: unsupported relocation type"
+msgstr "%pB: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+
+#. Unknown relocation.
+#: aoutx.h:4400 coff-alpha.c:601 coff-mips.c:356 coff-rs6000.c:3050
+#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:262 elf-hppa.h:798
+#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
+#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1063 elf32-bfin.c:4686
+#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
+#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
+#: elf32-dlx.c:546 elf32-epiphany.c:373 elf32-fr30.c:381 elf32-frv.c:2559
+#: elf32-frv.c:6240 elf32-ft32.c:304 elf32-h8300.c:302 elf32-i386.c:394
+#: elf32-ip2k.c:1241 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
+#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
+#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
+#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:708
+#: elf32-microblaze.c:1020 elf32-mips.c:2242 elf32-moxie.c:137
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3288
+#: elf32-nds32.c:3309 elf32-nds32.c:5078 elf32-nios2.c:3019 elf32-or1k.c:1087
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
+#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
+#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
+#: elf32-v850.c:1924 elf32-v850.c:4250 elf32-vax.c:289 elf32-visium.c:481
+#: elf32-wasm32.c:105 elf32-xgate.c:418 elf32-xstormy16.c:395
+#: elf32-xtensa.c:510 elf32-xtensa.c:544 elf32-z80.c:331 elf64-alpha.c:1114
+#: elf64-alpha.c:4056 elf64-alpha.c:4204 elf64-bpf.c:132 elf64-ia64-vms.c:255
+#: elf64-ia64-vms.c:3426 elf64-mips.c:3965 elf64-mips.c:3981 elf64-mmix.c:1264
+#: elf64-nfp.c:151 elf64-ppc.c:1031 elf64-ppc.c:1385 elf64-ppc.c:1394
+#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3799
+#: elfxx-ia64.c:324 elfxx-loongarch.c:1895 elfxx-riscv.c:989 elfxx-sparc.c:589
+#: elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3821 elfnn-kvx.c:259
+#, c-format
+msgid "%pB: unsupported relocation type %#x"
+msgstr "%pB: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€ž%#xâ€œ"
+
+#: aoutx.h:5427 pdp11.c:3866
+#, c-format
+msgid "%pB: relocatable link from %s to %s not supported"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð²ÐµÐ·Ð° Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+
+#: arc-got.h:69
+#, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ â€žGOTâ€œ ÑƒÐ½Ð¾Ñ�Ðµ"
+
+#: archive.c:753
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr "%F%P: %pB(%s): Ð³Ñ€ÐµÑˆÐºÐ° Ð¾Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¾Ð³ Ñ‡Ð»Ð°Ð½Ð° Ð°Ñ€Ñ…Ð¸Ð²Ðµ: %E\n"
+
+#: archive.c:2294
+msgid "warning: writing archive was slow: rewriting timestamp"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ¿Ð¸Ñ� Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ñƒ Ñ˜Ðµ Ñ�Ð¿Ð¾Ñ€: Ð¿Ð¾Ð½Ð¾Ð²Ð¾ ÑƒÐ¿Ð¸Ñ�ÑƒÑ˜ÐµÐ¼ Ð²Ñ€ÐµÐ¼Ðµ"
 
-#: archive.c:2249
-msgid "Warning: writing archive was slow: rewriting timestamp\n"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ¿Ð¸Ñ� Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ñƒ Ñ˜Ðµ Ñ�Ð¿Ð¾Ñ€: Ð¿Ð¾Ð½Ð¾Ð²Ð¾ ÑƒÐ¿Ð¸Ñ�ÑƒÑ˜ÐµÐ¼ Ð²Ñ€ÐµÐ¼Ðµ\n"
+#: archive.c:2362 archive.c:2423 elflink.c:4800 linker.c:1434
+#, c-format
+msgid "%pB: plugin needed to handle lto object"
+msgstr "%pB: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ˜Ðµ Ð¿Ñ€Ð¸ÐºÑ™ÑƒÑ‡Ð°Ðº Ð·Ð° Ñ€ÑƒÐºÐ¾Ð²Ð°ÑšÐµ â€žltoâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¾Ð¼"
 
-#: archive.c:2549
+#: archive.c:2655
 msgid "Reading archive file mod timestamp"
 msgstr "Ð§Ð¸Ñ‚Ð°Ð¼ Ð²Ñ€ÐµÐ¼Ðµ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ñ€Ñ…Ð¸Ð²Ðµ"
 
-#: archive.c:2573
+#: archive.c:2686
 msgid "Writing updated armap timestamp"
 msgstr "Ð£Ð¿Ð¸Ñ�ÑƒÑ˜ÐµÐ¼ Ð¾Ñ�Ð²ÐµÐ¶ÐµÐ½Ð¾ Ð²Ñ€ÐµÐ¼Ðµ Ð°Ñ€Ð¼Ð°Ð¿Ð°"
 
-#: bfd.c:411
-msgid "No error"
-msgstr "Ð�ÐµÐ¼Ð° Ð³Ñ€ÐµÑˆÐºÐµ"
-
-#: bfd.c:412
-msgid "System call error"
-msgstr "Ð“Ñ€ÐµÑˆÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ�ÐºÐ¾Ð³ Ð¿Ð¾Ð·Ð¸Ð²Ð°"
-
-#: bfd.c:413
-msgid "Invalid bfd target"
-msgstr "Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ†Ð¸Ñ™ Ð±Ñ„Ð´-Ð°"
-
-#: bfd.c:414
-msgid "File in wrong format"
-msgstr "Ð”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ"
-
-#: bfd.c:415
-msgid "Archive object file in wrong format"
-msgstr "Ð”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð°Ñ€Ñ…Ð¸Ð²Ðµ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ"
-
-#: bfd.c:416
-msgid "Invalid operation"
-msgstr "Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð°"
-
-#: bfd.c:417
-msgid "Memory exhausted"
-msgstr "ÐœÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�Ñ†Ñ€Ð¿Ñ™ÐµÐ½Ð°"
-
-#: bfd.c:418
-msgid "No symbols"
-msgstr "Ð�ÐµÐ¼Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
-
-#: bfd.c:419
-msgid "Archive has no index; run ranlib to add one"
-msgstr "Ð�Ñ€Ñ…Ð¸Ð²Ð° Ð½ÐµÐ¼Ð° Ð¸Ð½Ð´ÐµÐºÑ�; Ð¿Ð¾ÐºÑ€ÐµÐ½Ð¸Ñ‚Ðµ â€žranlibâ€œ Ð´Ð° Ð³Ð° Ð´Ð¾Ð´Ð°Ñ‚Ðµ"
-
-#: bfd.c:420
-msgid "No more archived files"
-msgstr "Ð�ÐµÐ¼Ð° Ð²Ð¸ÑˆÐµ Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ€Ð°Ð½Ð¸Ñ… Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°"
-
-#: bfd.c:421
-msgid "Malformed archive"
-msgstr "Ð›Ð¾ÑˆÐ° Ð°Ñ€Ñ…Ð¸Ð²Ð°"
+#: bfd.c:740
+msgid "no error"
+msgstr "Ð½ÐµÐ¼Ð° Ð³Ñ€ÐµÑˆÐºÐµ"
+
+#: bfd.c:741
+msgid "system call error"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ�ÐºÐ¾Ð³ Ð¿Ð¾Ð·Ð¸Ð²Ð°"
+
+#: bfd.c:742
+msgid "invalid bfd target"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ†Ð¸Ñ™ Ð±Ñ„Ð´-Ð°"
+
+#: bfd.c:743
+msgid "file in wrong format"
+msgstr "Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ"
+
+#: bfd.c:744
+msgid "archive object file in wrong format"
+msgstr "Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð°Ñ€Ñ…Ð¸Ð²Ðµ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ"
+
+#: bfd.c:745
+msgid "invalid operation"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð°"
+
+#: bfd.c:746
+msgid "memory exhausted"
+msgstr "Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�Ñ†Ñ€Ð¿Ñ™ÐµÐ½Ð°"
+
+#: bfd.c:747
+msgid "no symbols"
+msgstr "Ð½ÐµÐ¼Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: bfd.c:748
+msgid "archive has no index; run ranlib to add one"
+msgstr "Ð°Ñ€Ñ…Ð¸Ð²Ð° Ð½ÐµÐ¼Ð° Ð¸Ð½Ð´ÐµÐºÑ�; Ð¿Ð¾ÐºÑ€ÐµÐ½Ð¸Ñ‚Ðµ â€žranlibâ€œ Ð´Ð° Ð³Ð° Ð´Ð¾Ð´Ð°Ñ‚Ðµ"
+
+#: bfd.c:749
+msgid "no more archived files"
+msgstr "Ð½ÐµÐ¼Ð° Ð²Ð¸ÑˆÐµ Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ€Ð°Ð½Ð¸Ñ… Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°"
+
+#: bfd.c:750
+msgid "malformed archive"
+msgstr "Ð»Ð¾ÑˆÐ° Ð°Ñ€Ñ…Ð¸Ð²Ð°"
 
-#: bfd.c:422
+#: bfd.c:751
 msgid "DSO missing from command line"
-msgstr "Ð”Ð¡Ðž Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð½Ð° Ð»Ð¸Ð½Ð¸Ñ˜Ð¸ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸"
+msgstr "â€žDSOâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð½Ð° Ð»Ð¸Ð½Ð¸Ñ˜Ð¸ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸"
 
-#: bfd.c:423
-msgid "File format not recognized"
-msgstr "Ð—Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚"
+#: bfd.c:752
+msgid "file format not recognized"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚"
 
-#: bfd.c:424
-msgid "File format is ambiguous"
-msgstr "Ð—Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜Ðµ Ð½ÐµÑ˜Ð°Ñ�Ð°Ð½"
+#: bfd.c:753
+msgid "file format is ambiguous"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜Ðµ Ð½ÐµÑ˜Ð°Ñ�Ð°Ð½"
 
-#: bfd.c:425
-msgid "Section has no contents"
-msgstr "ÐžÐ´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ðµ"
+#: bfd.c:754
+msgid "section has no contents"
+msgstr "Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ðµ"
 
-#: bfd.c:426
-msgid "Nonrepresentable section on output"
-msgstr "Ð�Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸ÐºÐ°Ð·Ð°Ñ‚Ð¸"
+#: bfd.c:755
+msgid "nonrepresentable section on output"
+msgstr "Ð½Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸ÐºÐ°Ð·Ð°Ñ‚Ð¸"
 
-#: bfd.c:427
-msgid "Symbol needs debug section which does not exist"
-msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° ÑƒÐºÐ»Ð°ÑšÐ°ÑšÐµ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° ÐºÐ¾Ñ˜Ð¸ Ð½Ðµ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜Ð¸"
+#: bfd.c:756
+msgid "symbol needs debug section which does not exist"
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° ÑƒÐºÐ»Ð°ÑšÐ°ÑšÐµ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° ÐºÐ¾Ñ˜Ð¸ Ð½Ðµ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜Ð¸"
 
-#: bfd.c:428
-msgid "Bad value"
-msgstr "ÐŸÐ¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚"
+#: bfd.c:757
+msgid "bad value"
+msgstr "Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚"
 
-#: bfd.c:429
-msgid "File truncated"
-msgstr "Ð”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¾ÐºÑ€ÑšÐµÐ½Ð°"
+#: bfd.c:758
+msgid "file truncated"
+msgstr "Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¾ÐºÑ€ÑšÐµÐ½Ð°"
 
-#: bfd.c:430
-msgid "File too big"
-msgstr "Ð”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°"
+#: bfd.c:759
+msgid "file too big"
+msgstr "Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°"
 
-#: bfd.c:431
+#: bfd.c:760
+msgid "sorry, cannot handle this file"
+msgstr "Ð¸Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ, Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð¾Ð²Ð¾Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ¾Ð¼"
+
+#: bfd.c:761
 #, c-format
-msgid "Error reading %s: %s"
-msgstr "Ð“Ñ€ÐµÑˆÐºÐ° Ñ‡Ð¸Ñ‚Ð°ÑšÐ° â€ž%sâ€œ: %s"
+msgid "error reading %s: %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ñ‡Ð¸Ñ‚Ð°ÑšÐ° â€ž%sâ€œ: %s"
 
-#: bfd.c:432
-msgid "#<Invalid error code>"
-msgstr "#<Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð³Ñ€ÐµÑˆÐºÐµ>"
+#: bfd.c:762
+msgid "#<invalid error code>"
+msgstr "#<Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð³Ñ€ÐµÑˆÐºÐµ>"
 
-#: bfd.c:1046
+#: bfd.c:2019
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "â€žBFDâ€œ â€ž%sâ€œ Ñ‚Ð²Ñ€Ð´ÑšÐ° Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð° â€ž%sâ€œ:%d"
 
-#: bfd.c:1058
+#: bfd.c:2032
 #, c-format
-msgid "BFD %s internal error, aborting at %s line %d in %s\n"
-msgstr "Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ð‘Ð¤Ð”-Ð° %s, Ð¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð¼ Ð¿Ñ€Ð¸ â€ž%sâ€œ %d. Ñ€ÐµÐ´Ñƒ Ñƒ â€ž%sâ€œ\n"
+msgid "BFD %s internal error, aborting at %s:%d in %s\n"
+msgstr "Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° â€žBFDâ€œ %s, Ð¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð¼ Ð½Ð° â€ž%sâ€œ %d. Ñ€ÐµÐ´Ñƒ Ñƒ â€ž%sâ€œ\n"
 
-#: bfd.c:1062
+#: bfd.c:2037
 #, c-format
-msgid "BFD %s internal error, aborting at %s line %d\n"
-msgstr "Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ð‘Ð¤Ð”-Ð° %s, Ð¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð¼ Ð¿Ñ€Ð¸ â€ž%sâ€œ %d. Ñ€ÐµÐ´Ñƒ\n"
+msgid "BFD %s internal error, aborting at %s:%d\n"
+msgstr "Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° â€žBFDâ€œ %s, Ð¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð¼ Ð¿Ñ€Ð¸ â€ž%sâ€œ %d. Ñ€ÐµÐ´Ñƒ\n"
 
-#: bfd.c:1064
+#: bfd.c:2039
 msgid "Please report this bug.\n"
 msgstr "ÐŸÑ€Ð¸Ñ˜Ð°Ð²Ð¸Ñ‚Ðµ Ð¾Ð²Ñƒ Ð³Ñ€ÐµÑˆÐºÑƒ.\n"
 
-#: bfdwin.c:206
+#: bfdwin.c:261
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
-msgstr "Ð½Ðµ Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð¼: Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº=%lx  Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð½=%d\n"
+msgstr "Ð½Ðµ Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð¼: Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº=%lx Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð½=%d\n"
 
-#: bfdwin.c:209
+#: bfdwin.c:264
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr "Ð½Ðµ Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð¼: Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° Ð¾ÐºÑ€ÑƒÐ¶ÐµÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð°\n"
 
-#: binary.c:271
+#: binary.c:277
 #, c-format
-msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx."
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð£Ð¿Ð¸Ñ� Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº (Ð½Ð¿Ñ€. Ð½ÐµÐ³Ð°Ñ‚Ð¸Ð²Ð°Ð½) Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ 0x%lx."
+msgid "warning: writing section `%pA' at huge (ie negative) file offset"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº ÑƒÐ¿Ð¸Ñ�Ð¸Ð²Ð°ÑšÐ° â€ž%pAâ€œ Ð½Ð° Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾Ð¼ (Ð½Ð¿Ñ€. Ð½ÐµÐ³Ð°Ñ‚Ð¸Ð²Ð°Ð½) Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ"
 
-#: bout.c:1146 elf-m10300.c:2665 elf32-avr.c:1706 elf32-frv.c:5641
-#: elf64-ia64-vms.c:354 elfxx-sparc.c:2869 reloc.c:7324 reloc16.c:160
-#: elf32-ia64.c:351 elf64-ia64.c:351
-msgid "%P%F: --relax and -r may not be used together\n"
-msgstr "%P%F: â€ž--relaxâ€œ Ð¸ â€ž-râ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾\n"
+#: cache.c:275
+#, c-format
+msgid "reopening %pB: %s"
+msgstr "Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¾Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€ž%pBâ€œ: %s"
 
-#: cache.c:253
-msgid "reopening %B: %s\n"
-msgstr "Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¾Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€ž%Bâ€œ: %s\n"
+#: coff-alpha.c:450
+#, c-format
+msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ñ�Ð°Ð¶ÐµÑ‚Ð¸Ð¼ Ð±Ð¸Ð½Ð°Ñ€Ð½Ð¸Ð¼ Ð�Ð»Ñ„Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð¸Ð¾Ñ†Ð°, Ð¸Ð»Ð¸ â€žobjZâ€œ, Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð½ÐµÑ�Ð°Ð¶ÐµÑ‚Ðµ Ð±Ð¸Ð½Ð°Ñ€Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ"
 
-#: coff-alpha.c:452
-msgid ""
-"%B: Cannot handle compressed Alpha binaries.\n"
-"   Use compiler flags, or objZ, to generate uncompressed binaries."
-msgstr ""
-"%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ñ�Ð°Ð¶ÐµÑ‚Ð¸Ð¼ Ð±Ð¸Ð½Ð°Ñ€Ð½Ð¸Ð¼ Ð�Ð»Ñ„Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°.\n"
-"   ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð¸Ð¾Ñ†Ð°, Ð¸Ð»Ð¸ â€žobjZâ€œ, Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð½ÐµÑ�Ð°Ð¶ÐµÑ‚Ðµ Ð±Ð¸Ð½Ð°Ñ€Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ."
+#: coff-alpha.c:867 coff-alpha.c:894 coff-alpha.c:2004 coff-mips.c:948
+msgid "GP relative relocation used when GP not defined"
+msgstr "ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ˜Ðµ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
 
-#: coff-alpha.c:603
-msgid "%B: unknown/unsupported relocation type %d"
-msgstr "%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð°/Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+#: coff-alpha.c:1151 coff-z80.c:351 coff-z8k.c:214 elf32-nds32.c:13189
+#: elfxx-mips.c:13520 reloc.c:8683 reloc16.c:314
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%pRâ€œ Ð¸Ð´Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°\n"
 
-#: coff-alpha.c:852 coff-alpha.c:889 coff-alpha.c:1973 coff-mips.c:946
-msgid "GP relative relocation used when GP not defined"
-msgstr "Ð£Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ˜Ðµ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+#: coff-alpha.c:1157 coff-z80.c:477 coff-z8k.c:378 elfxx-mips.c:13530
+#: reloc.c:8693
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%pRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
+
+#: coff-alpha.c:1163 elfxx-mips.c:13539 reloc.c:8702
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%pRâ€œ Ñ˜Ðµ Ð²Ñ€Ð°Ñ‚Ð¸Ð»Ð¾ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%xâ€œ\n"
 
-#: coff-alpha.c:1450
+#: coff-alpha.c:1489
 msgid "using multiple gp values"
 msgstr "ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð°"
 
-#: coff-alpha.c:1509
-msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH"
-msgstr "%B: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: â€žALPHA_R_GRELHIGHâ€œ"
+#: coff-alpha.c:1987
+#, c-format
+msgid "%X%P: %pB(%pA): relocation out of range\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°\n"
+
+#: coff-alpha.c:1999
+#, c-format
+msgid "%X%P: %pB(%pA): relocation is not supported\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
 
-#: coff-alpha.c:1516
-msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW"
-msgstr "%B: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: â€žALPHA_R_GRELLOWâ€œ"
+#: coff-go32.c:167 coffswap.h:812
+#, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff"
 
-#: coff-alpha.c:1523 elf32-m32r.c:2443 elf64-alpha.c:4083 elf64-alpha.c:4233
-#: elf64-ia64-vms.c:3429 elf32-ia64.c:3836 elf64-ia64.c:3836
-msgid "%B: unknown relocation type %d"
-msgstr "%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+#: coff-mips.c:638 elf32-mips.c:1743 elf32-score.c:433 elf32-score7.c:333
+#: elf64-mips.c:3450 elfn32-mips.c:3277
+msgid "GP relative relocation when _gp not defined"
+msgstr "Ð ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
 
-#: coff-arm.c:1034
+#: coff-rs6000.c:484 coff64-rs6000.c:377
 #, c-format
-msgid "%B: unable to find THUMB glue '%s' for `%s'"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žTHUMBâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+msgid "%pB: unsupported swap_aux_in for storage class %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žswap_aux_inâ€œ Ð·Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð½Ñƒ ÐºÐ»Ð°Ñ�Ñƒ â€ž%#xâ€œ"
 
-#: coff-arm.c:1063
+#: coff-rs6000.c:571 coff64-rs6000.c:497
 #, c-format
-msgid "%B: unable to find ARM glue '%s' for `%s'"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žARMâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žswap_aux_outâ€œ Ð·Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð½Ñƒ ÐºÐ»Ð°Ñ�Ñƒ â€ž%#xâ€œ"
 
-#: coff-arm.c:1365 elf32-arm.c:7141
+#: coff-rs6000.c:3140
 #, c-format
-msgid ""
-"%B(%s): warning: interworking not enabled.\n"
-"  first occurrence: %B: arm call to thumb"
-msgstr ""
-"%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.\n"
-"  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žarmâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° â€žthumbâ€œ"
+msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ñ�Ð° â€ž%#<PRIx64>â€œ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð±ÐµÐ· ÑƒÐ½Ð¾Ñ�Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°"
 
-#: coff-arm.c:1455
+#: coff-rs6000.c:3264 coff64-rs6000.c:848
 #, c-format
-msgid ""
-"%B(%s): warning: interworking not enabled.\n"
-"  first occurrence: %B: thumb call to arm\n"
-"  consider relinking with --support-old-code enabled"
-msgstr ""
-"%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.\n"
-"  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žthumbâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° â€žarmâ€œ\n"
-"  Ñ€Ð°Ð·Ð¼Ð¾Ñ‚Ñ€Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ â€ž--support-old-codeâ€œ"
+msgid "Unable to find the stub entry targeting %s"
+msgstr "Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° â€ž%sâ€œ"
 
-#: coff-arm.c:1750 coff-tic80.c:673 cofflink.c:3168
-msgid "%B: bad reloc address 0x%lx in section `%A'"
-msgstr "%B: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ"
+#: coff-rs6000.c:3379
+#, c-format
+msgid "%pB: TLS relocation at 0x%<PRIx64> over non-TLS symbol %s (0x%x)\n"
+msgstr "%pB: Ð¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x%<PRIx64> Ð¿Ñ€ÐµÐºÐ¾ Ð½Ðµ-Ð¢Ð›Ð¡ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ (0x%x)\n"
 
-#: coff-arm.c:2075
-msgid "%B: illegal symbol index in reloc: %d"
-msgstr "%B: Ð½ÐµÐ´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ: %d"
+#: coff-rs6000.c:3392
+#, c-format
+msgid "%pB: TLS local relocation at 0x%<PRIx64> over imported symbol %s\n"
+msgstr "%pB: Ð¢Ð›Ð¡ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x%<PRIx64> Ð¿Ñ€ÐµÐºÐ¾ ÑƒÐ²ÐµÐ·ÐµÐ½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ\n"
 
-#: coff-arm.c:2206
+#: coff-rs6000.c:3798
 #, c-format
-msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° Ð�ÐŸÐ¦Ð¡-%d, Ð´Ð¾Ðº Ñ˜Ðµ â€ž%Bâ€œ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° Ð�ÐŸÐ¦Ð¡-%d"
+msgid "%pB: relocation (%d) at 0x%<PRIx64> has wrong r_rsize (0x%x)\n"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%d) Ð½Ð° 0x%<PRIx64> Ð¸Ð¼Ð° Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ r_r-Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ (0x%x)\n"
 
-#: coff-arm.c:2222 elf32-arm.c:16123
+#: coff-rs6000.c:4060 coff64-rs6000.c:2030
 #, c-format
-msgid "error: %B passes floats in float registers, whereas %B passes them in integer registers"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸"
+msgid "%pB: symbol `%s' has unrecognized smclas %d"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ ÐºÐ»Ð°Ñ�Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%dâ€œ"
 
-#: coff-arm.c:2225 elf32-arm.c:16127
+#: coff-sh.c:781 elf32-sh.c:521
 #, c-format
-msgid "error: %B passes floats in integer registers, whereas %B passes them in float registers"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸"
+msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES offset"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ â€žR_SH_USESâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜"
 
-#: coff-arm.c:2239
+#: coff-sh.c:792
 #, c-format
-msgid "error: %B is compiled as position independent code, whereas target %B is absolute position"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ ÐºÐ¾Ð´ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°, Ð´Ð¾Ðº Ñ˜Ðµ Ñ†Ð¸Ñ™ â€ž%Bâ€œ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜"
+msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn %#x"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_SH_USESâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ â€žinsnâ€œ %#x"
 
-#: coff-arm.c:2242
+#: coff-sh.c:810 elf32-sh.c:552
 #, c-format
-msgid "error: %B is compiled as absolute position code, whereas target %B is position independent"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ ÐºÐ¾Ð´ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°, Ð´Ð¾Ðº Ñ˜Ðµ Ñ†Ð¸Ñ™ â€ž%Bâ€œ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°"
+msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€žR_SH_USESâ€œ"
 
-#: coff-arm.c:2270 elf32-arm.c:16192
+#: coff-sh.c:835 elf32-sh.c:568
 #, c-format
-msgid "Warning: %B supports interworking, whereas %B does not"
-msgstr "Ð£ÐŸÐžÐ—ÐžÐ Ð•ÐŠÐ•: â€ž%Bâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%Bâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°"
+msgid "%pB: %#<PRIx64>: warning: could not find expected reloc"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: coff-arm.c:2273 elf32-arm.c:16198
+#: coff-sh.c:852 elf32-sh.c:597
 #, c-format
-msgid "Warning: %B does not support interworking, whereas %B does"
-msgstr "Ð£ÐŸÐžÐ—ÐžÐ Ð•ÐŠÐ•: â€ž%Bâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%Bâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°"
+msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ˜Ðµ Ñƒ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
 
-#: coff-arm.c:2297
+#: coff-sh.c:973 elf32-sh.c:727
 #, c-format
-msgid "private flags = %x:"
-msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ =%x:"
+msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žCOUNTâ€œ"
 
-#: coff-arm.c:2305 elf32-arm.c:12119
+#: coff-sh.c:983 elf32-sh.c:738
 #, c-format
-msgid " [floats passed in float registers]"
-msgstr " [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸]"
+msgid "%pB: %#<PRIx64>: warning: bad count"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜"
 
-#: coff-arm.c:2307
+#: coff-sh.c:1349 coff-sh.c:2636 elf32-sh.c:1138 elf32-sh.c:1506
 #, c-format
-msgid " [floats passed in integer registers]"
-msgstr " [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸]"
+msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
+msgstr "%pB: %#<PRIx64>: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
 
-#: coff-arm.c:2310 elf32-arm.c:12122
+#: coff-sh.c:1443
 #, c-format
-msgid " [position independent]"
-msgstr " [Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°]"
+msgid "%pB: fatal: generic symbols retrieved before relaxing"
+msgstr "%pB: ÐºÐ¾Ð±Ð½Ð¾: Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ½Ð¸ Ð¿Ñ€Ðµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
 
-#: coff-arm.c:2312
+#: coff-sh.c:2773 cofflink.c:2947
 #, c-format
-msgid " [absolute position]"
-msgstr " [Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜]"
+msgid "%pB: illegal symbol index %ld in relocs"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°"
 
-#: coff-arm.c:2316
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:338 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5314
 #, c-format
-msgid " [interworking flag not initialised]"
-msgstr " [Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð°]"
+msgid "%pB: warning: illegal symbol index %ld in relocs"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°"
 
-#: coff-arm.c:2318
+#: coff-x86_64.c:147
+msgid "R_AMD64_IMAGEBASE with __ImageBase undefined"
+msgstr "R_AMD64_IMAGEBASE Ñ�Ð° __ImageBase Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
+
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
 #, c-format
-msgid " [interworking supported]"
-msgstr " [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾]"
+msgid "%pB: C_STAT isn't supported by XCOFF64"
+msgstr "%pB: â€žC_STATâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žXCOFF64â€œ-Ð¾Ð¼"
 
-#: coff-arm.c:2320
+#: coff64-rs6000.c:477
 #, c-format
-msgid " [interworking not supported]"
-msgstr " [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾]"
+msgid "%pB: wrong auxtype %#x for storage class %#x"
+msgstr "%pB: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° â€žauxâ€œ Ð²Ñ€Ñ�Ñ‚Ð° %#x Ð·Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð½Ñƒ ÐºÐ»Ð°Ñ�Ñƒ %#x"
 
-#: coff-arm.c:2366 elf32-arm.c:11104
+#: coff64-rs6000.c:1598
 #, c-format
-msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð�Ð¸Ñ�Ð°Ð¼ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%Bâ€œ Ð¿Ð¾ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð²ÐµÑ› Ð½Ð°Ð²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ Ð½ÐµÐ¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¾"
+msgid "%pB: relocation (%d) at (0x%<PRIx64>) has wrong r_rsize (0x%x)\n"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%d) Ð½Ð° (0x%<PRIx64>) Ð¸Ð¼Ð° Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ r_r-Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ (0x%x)\n"
 
-#: coff-arm.c:2370 elf32-arm.c:11108
+#: coffcode.h:951
 #, c-format
-msgid "Warning: Clearing the interworking flag of %B due to outside request"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð£ÐºÐ»Ð°ÑšÐ°Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%Bâ€œ ÑƒÑ�Ð»ÐµÐ´ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ñ�Ð¿Ð¾Ñ™Ð°"
+msgid "%pB: unable to load COMDAT section name"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð¼ â€žCOMDATâ€œ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ°"
 
-#: coff-h8300.c:1096
+#: coffcode.h:976
 #, c-format
-msgid "cannot handle R_MEM_INDIRECT reloc when using %s output"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€žR_MEM_INDIRECTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¼ ÐºÐ°Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·"
+msgid "%pB: warning: no symbol for section '%s' found"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#: coff-i860.c:147
+#: coffcode.h:1148
 #, c-format
-msgid "relocation `%s' not yet implemented"
-msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ˜Ð¾Ñˆ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€žCOMDATâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ"
 
-#: coff-i860.c:605 coff-tic54x.c:365 coffcode.h:5209
-msgid "%B: warning: illegal symbol index %ld in relocs"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°"
+#: coffcode.h:1159
+#, c-format
+msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žCOMDATâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð° Ñ�Ð° Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
 
-#: coff-i960.c:124 coff-i960.c:480
-msgid "uncertain calling convention for non-COFF symbol"
-msgstr "Ð½ÐµÑ�Ð¸Ð³ÑƒÑ€Ð°Ð½ Ð´Ð¾Ð³Ð¾Ð²Ð¾Ñ€ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð·Ð° Ð½Ðµ-â€žCOFFâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
+#. Generate a warning message rather using the 'unhandled'
+#. variable as this will allow some .sys files generate by
+#. other toolchains to be processed.  See bugzilla issue 196.
+#: coffcode.h:1267
+#, c-format
+msgid "%pB: warning: ignoring section flag %s in section %s"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
 
-#: coff-m68k.c:484 elf32-bfin.c:5556 elf32-cr16.c:2853 elf32-m68k.c:4632
-msgid "unsupported reloc type"
-msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+#: coffcode.h:1337
+#, c-format
+msgid "%pB (%s): section flag %s (%#lx) ignored"
+msgstr "%pB (%s): Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (%#lx) Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°"
 
-#: coff-mips.c:636 elf32-mips.c:1637 elf32-score.c:431 elf32-score7.c:330
-#: elf64-mips.c:2925 elfn32-mips.c:2737
-msgid "GP relative relocation when _gp not defined"
-msgstr "Ð ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð“ÐŸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
+#: coffcode.h:1954
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr "%pB: Ð±Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¼Ð°Ð»Ð¸"
 
-#: coff-or32.c:216
-msgid "Unrecognized reloc"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: coffcode.h:1963 coffcode.h:2028
+#, c-format
+msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ñ‚Ð²Ñ€Ñ’ÑƒÑ˜ÐµÐ¼ 0xffff Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°, Ð±ÐµÐ· Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐ°"
 
-#: coff-rs6000.c:2802
+#: coffcode.h:2411
 #, c-format
-msgid "%s: unsupported relocation type 0x%02x"
-msgstr "%s: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%02x"
+msgid "unrecognized TI COFF target id '0x%x'"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¸Ð´ â€žTI COFFâ€œ Ñ†Ð¸Ñ™Ð° â€ž0x%xâ€œ"
 
-#: coff-rs6000.c:2887
+#: coffcode.h:2690
 #, c-format
-msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry"
-msgstr "%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð½Ð° 0x%x Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÐºÐ¾Ñ˜Ð¸ Ð½Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² ÑƒÐ½Ð¾Ñ�"
+msgid "%pB: reloc against a non-existent symbol index: %ld"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›ÐµÐ³ Ð¸Ð½Ð´ÐµÐºÑ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %ld"
 
-#: coff-rs6000.c:3638 coff64-rs6000.c:2117
-msgid "%B: symbol `%s' has unrecognized smclas %d"
-msgstr "%B: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ ÐºÐ»Ð°Ñ�Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%dâ€œ"
+#: coffcode.h:3162
+#, c-format
+msgid "%pB: too many sections (%d)"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d)"
 
-#: coff-sh.c:506
+#: coffcode.h:3690
 #, c-format
-msgid "SH Error: unknown reloc type %d"
-msgstr "Ð“Ñ€ÐµÑˆÐºÐ° ÑˆÐºÐ¾Ñ™ÐºÐµ: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+msgid "%pB: section %pA: string table overflow at offset %ld"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐ¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ %ld"
 
-#: coff-tic4x.c:184 coff-tic54x.c:279 coff-tic80.c:440
+#: coffcode.h:3791
 #, c-format
-msgid "Unrecognized reloc type 0x%x"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%x"
+msgid "%pB:%s section %s: alignment 2**%u not representable"
+msgstr "%pB:%s Ð¾Ð´ÐµÑ™Ð°Ðº %s: Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ 2**%u Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚Ð¸"
 
-#: coff-tic4x.c:227
+#: coffcode.h:4532
 #, c-format
-msgid "%s: warning: illegal symbol index %ld in relocs"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°"
+msgid "%pB: warning: line number table read failed"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ"
 
-#: coff-w65.c:355
+#: coffcode.h:4578 coffcode.h:4592
 #, c-format
-msgid "ignoring reloc %s\n"
-msgstr "Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ\n"
+msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° 0x%lx Ñƒ ÑƒÐ½Ð¾Ñ�Ñƒ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° %d"
 
-#: coffcode.h:1005
-msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žCOMDATâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð° Ñ�Ð° Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+#: coffcode.h:4606
+#, c-format
+msgid "%pB: warning: illegal symbol in line number entry %d"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ ÑƒÐ½Ð¾Ñ�Ñƒ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° %d"
 
-#. Generate a warning message rather using the 'unhandled'
-#. variable as this will allow some .sys files generate by
-#. other toolchains to be processed.  See bugzilla issue 196.
-#: coffcode.h:1230
-msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s"
-msgstr "%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð—Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€žIMAGE_SCN_MEM_NOT_PAGEDâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
+#: coffcode.h:4619
+#, c-format
+msgid "%pB: warning: duplicate line number information for `%s'"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº Ð¾ Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ€ÐµÐ´Ð° Ð·Ð° â€ž%sâ€œ"
 
-#: coffcode.h:1297
-msgid "%B (%s): Section flag %s (0x%x) ignored"
-msgstr "%B (%s): Ð—Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (0x%x) Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°"
+#: coffcode.h:5043
+#, c-format
+msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° ÐºÐ»Ð°Ñ�Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° â€ž%dâ€œ Ð·Ð° â€ž%sâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
 
-#: coffcode.h:2439
+#: coffcode.h:5183
 #, c-format
-msgid "Unrecognized TI COFF target id '0x%x'"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¸Ð´ â€žTI COFFâ€œ Ñ†Ð¸Ñ™Ð° â€ž0x%xâ€œ"
+msgid "warning: %pB: local symbol `%s' has no section"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: coffcode.h:2753
-msgid "%B: reloc against a non-existant symbol index: %ld"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›ÐµÐ³ Ð¸Ð½Ð´ÐµÐºÑ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %ld"
+#: coffcode.h:5354
+#, c-format
+msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %d Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ %#<PRIx64>"
+
+#: coffgen.c:255 elf.c:1226
+#, c-format
+msgid "%pB: unable to compress section %s"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð°ÐºÑƒÑ˜ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#: coffcode.h:3311
-msgid "%B: too many sections (%d)"
-msgstr "%B: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d)"
+#: coffgen.c:265 elf.c:1236
+#, c-format
+msgid "%pB: unable to decompress section %s"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ñ�Ð¿Ð°ÐºÑƒÑ˜ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#: coffcode.h:3729
-msgid "%B: section %s: string table overflow at offset %ld"
-msgstr "%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐ¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ %ld"
+#: coffgen.c:1781
+#, c-format
+msgid "%pB: bad string table size %<PRIu64>"
+msgstr "%pB: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ð·Ð° %<PRIu64>"
 
-#: coffcode.h:4534
-msgid "%B: warning: line number table read failed"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ"
+#: coffgen.c:1931 coffgen.c:1981 coffgen.c:2031 coffgen.c:2050 cofflink.c:2012
+#: elf.c:2478 xcofflink.c:5532
+msgid "<corrupt>"
+msgstr "<Ð¾ÑˆÑ‚ÐµÑ›ÐµÑšÐµ>"
 
-#: coffcode.h:4564
-msgid "%B: warning: illegal symbol index %ld in line numbers"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð¸Ð¼Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°"
+#: coffgen.c:2192
+#, c-format
+msgid "<corrupt info> %s"
+msgstr "<Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸> %s"
 
-#: coffcode.h:4578
-msgid "%B: warning: duplicate line number information for `%s'"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº Ð¾ Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ€ÐµÐ´Ð° Ð·Ð° â€ž%sâ€œ"
+#: coffgen.c:2796 elflink.c:15219 linker.c:2985
+msgid "%F%P: already_linked_table: %E\n"
+msgstr "%F%P: Ð²ÐµÑ›_Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð°_Ñ‚Ð°Ð±ÐµÐ»Ð°: %E\n"
 
-#: coffcode.h:4978
-msgid "%B: Unrecognized storage class %d for %s symbol `%s'"
-msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° ÐºÐ»Ð°Ñ�Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° â€ž%dâ€œ Ð·Ð° â€ž%sâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+#: coffgen.c:3138 elflink.c:14159
+#, c-format
+msgid "removing unused section '%pA' in file '%pB'"
+msgstr "ÑƒÐºÐ»Ð°ÑšÐ°Ð¼ Ð½ÐµÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€ž%pBâ€œ"
 
-#: coffcode.h:5104
-msgid "warning: %B: local symbol `%s' has no section"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™Ð°Ðº"
+#: coffgen.c:3215 elflink.c:14389
+msgid "warning: gc-sections option ignored"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð¿Ñ†Ð¸Ñ˜Ð° â€žgcâ€œ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°"
 
-#: coffcode.h:5248
-msgid "%B: illegal relocation type %d at address 0x%lx"
-msgstr "%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %d Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ 0x%lx"
+#: cofflink.c:398
+#, c-format
+msgid "warning: symbol `%s' is both section and non-section"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: coffgen.c:179 elf.c:1030
-msgid "%B: unable to initialize compress status for section %s"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ�Ð°Ð¶Ð¸Ð¼Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+#: cofflink.c:503 elf64-ia64-vms.c:5200 elflink.c:5407
+#, c-format
+msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ð¸Ð· â€ž%dâ€œ Ñƒ â€ž%dâ€œ Ð·Ð° â€ž%pBâ€œ"
 
-#: coffgen.c:199 elf.c:1050
-msgid "%B: unable to initialize decompress status for section %s"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¸Ð²Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+#: cofflink.c:2340
+#, c-format
+msgid "%pB: relocs in section `%pA', but it has no contents"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ, Ð°Ð»Ð¸ Ð½ÐµÐ¼Ð° Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°"
 
-#: coffgen.c:1685
-msgid "%B: bad string table size %lu"
-msgstr "%B: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ð·Ð° %lu"
+#: cofflink.c:2403 elflink.c:11600
+#, c-format
+msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
+msgstr "%Xâ€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿ÑƒÑ‚Ð½Ð¾ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ð¾Ð´ â€ž%pBâ€œ: Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñ˜Ðµ Ñƒ Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ð¾Ð´ â€ž%pBâ€œ\n"
 
-#: coffgen.c:2608 elflink.c:12906 linker.c:3136
-msgid "%F%P: already_linked_table: %E\n"
-msgstr "%F%P: Ð²ÐµÑ›_Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð°_Ñ‚Ð°Ð±ÐµÐ»Ð°: %E\n"
+#: cofflink.c:2598
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%<PRIx64>)"
+msgstr "%pB: ÑƒÐºÐ»Ð°ÑšÐ°Ð¼ Ð½ÐµÐ¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ñ™Ð°Ñ˜ÑƒÑ›Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ (Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ 0x%<PRIx64>)"
 
-#: cofflink.c:533 elf64-ia64-vms.c:5173 elflink.c:4356
-msgid "Warning: type of symbol `%s' changed from %d to %d in %B"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ð¸Ð· â€ž%dâ€œ Ñƒ â€ž%dâ€œ Ð·Ð° â€ž%Bâ€œ"
+#: cofflink.c:2716
+#, c-format
+msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
+msgstr "%pB: %pA: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %#x > 0xffff"
 
-#: cofflink.c:2416
-msgid "%B: relocs in section `%A', but it has no contents"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ, Ð°Ð»Ð¸ Ð½ÐµÐ¼Ð° Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°"
+#: cofflink.c:2724
+#, c-format
+msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pA: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: %#x > 0xffff"
 
-#: cofflink.c:2478 elflink.c:9711
-msgid "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n"
-msgstr "%Xâ€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿ÑƒÑ‚Ð½Ð¾ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ð¾Ð´ â€ž%Bâ€œ: Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñ˜Ðµ Ñƒ Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ð¾Ð´ â€ž%Bâ€œ\n"
+#: cofflink.c:3118
+#, c-format
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr "%pB: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
 
-#: cofflink.c:2777 coffswap.h:826
+#: coffswap.h:826
 #, c-format
-msgid "%s: %s: reloc overflow: 0x%lx > 0xffff"
-msgstr "%s: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: 0x%lx > 0xffff"
+msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
+msgstr "%pB: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: 0x%lx > 0xffff"
 
-#: cofflink.c:2786 coffswap.h:812
+#: compress.c:744 compress.c:761
 #, c-format
-msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff"
+msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB(%pA) Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ (%#<PRIx64> Ð±Ð°Ñ˜Ñ‚Ð°)"
 
-#: cpu-arm.c:190 cpu-arm.c:201
-msgid "error: %B is compiled for the EP9312, whereas %B is compiled for XScale"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° EP9312, Ð´Ð¾Ðº Ñ˜Ðµ â€ž%Bâ€œ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° XScale"
+#: cpu-arm.c:320 cpu-arm.c:332
+#, c-format
+msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° EP9312, Ð´Ð¾Ðº Ñ˜Ðµ %pB Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žXScaleâ€œ"
 
-#: cpu-arm.c:334
+#: cpu-arm.c:469
 #, c-format
-msgid "warning: unable to update contents of %s section in %s"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ â€ž%sâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€ž%sâ€œ"
+msgid "warning: unable to update contents of %s section in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ â€ž%sâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ %pB"
 
-#: dwarf2.c:514
+#: dwarf2.c:705
 #, c-format
-msgid "Dwarf Error: Can't find %s section."
+msgid "DWARF error: can't find %s section."
 msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ."
 
-#: dwarf2.c:543
+#: dwarf2.c:713
+#, c-format
+msgid "DWARF error: section %s has no contents"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ð¸ÑˆÑ‚Ð°"
+
+#. PR 26946
+#: dwarf2.c:722
+#, c-format
+msgid "DWARF error: section %s is too big"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº"
+
+#: dwarf2.c:757
 #, c-format
-msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜ (%lu) Ñ˜Ðµ >= Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ %s (%lu)."
+msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ (%<PRIu64>) Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¸Ð»Ð¸ Ñ˜ÐµÐ´Ð½Ð°Ðº Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ %s (%<PRIu64>)"
+
+#: dwarf2.c:1504
+msgid "DWARF error: info pointer extends beyond end of attributes"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð½Ñ„Ð¾ ÑƒÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ ÐºÑ€Ð°Ñ˜ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°"
 
-#: dwarf2.c:1071
+#: dwarf2.c:1696
 #, c-format
-msgid "Dwarf Error: Invalid or unhandled FORM value: %#x."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žFORMâ€œ: %#x."
+msgid "DWARF error: invalid or unhandled FORM value: %#x"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žFORMâ€œ: %#x"
 
-#: dwarf2.c:1332
-msgid "Dwarf Error: mangled line number section (bad file number)."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð‘Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½ (Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ)."
+#: dwarf2.c:2043
+msgid "DWARF error: mangled line number section (bad file number)"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½ (Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ)"
 
-#: dwarf2.c:1590
+#: dwarf2.c:2585
+msgid "DWARF error: zero format count"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÑƒÐ»Ñ‚Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð·Ð°Ð¿Ð¸Ñ�Ð°"
+
+#: dwarf2.c:2595
 #, c-format
-msgid "Dwarf Error: Unhandled .debug_line version %d."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ â€ž.debug_lineâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d."
+msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (%<PRIx64>) Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼ÐµÑ’ÑƒÐ¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ"
 
-#: dwarf2.c:1612
-msgid "Dwarf Error: Invalid maximum operations per instruction."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð° Ð¿Ð¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¸."
+#: dwarf2.c:2634
+#, c-format
+msgid "DWARF error: unknown format content type %<PRIu64>"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° â€ž%<PRIu64>â€œ"
 
-#: dwarf2.c:1807
-msgid "Dwarf Error: mangled line number section."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð‘Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½."
+#: dwarf2.c:2707
+#, c-format
+msgid "DWARF error: line info section is too small (%<PRId64>)"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸ (%<PRId64>)"
 
-#: dwarf2.c:2160
+#: dwarf2.c:2734
 #, c-format
-msgid "Dwarf Error: Unable to read alt ref %u."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žaltâ€œ ÑƒÐ¿ÑƒÑ‚Ñƒ %u."
+msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° Ñ˜Ðµ Ð²ÐµÑ›Ð¸ (%#<PRIx64>) Ð¾Ð´ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ (%#lx)"
 
-#: dwarf2.c:2179 dwarf2.c:2299 dwarf2.c:2595
+#: dwarf2.c:2747
 #, c-format
-msgid "Dwarf Error: Could not find abbrev number %u."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜ %u."
+msgid "DWARF error: unhandled .debug_line version %d"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ â€ž.debug_lineâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d"
+
+#: dwarf2.c:2756
+msgid "DWARF error: ran out of room reading prologue"
+msgstr "â€žDWARFÐ´ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð½ÐµÑ�Ñ‚Ð°Ð»Ð¾ Ñ˜Ðµ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ñ‡Ð¸Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ð¿Ñ€Ð¾Ð»Ð¾Ð³"
 
-#: dwarf2.c:2551
+#: dwarf2.c:2772
 #, c-format
-msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2, 3 and 4 information."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ñ’Ð¾Ñ… â€žDWARFâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%uâ€œ, Ð¾Ð²Ð°Ñ˜ Ñ‡Ð¸Ñ‚Ð°Ñ‡ Ñ€Ð°Ð´Ð¸ Ñ�Ð°Ð¼Ð¾ Ñ�Ð° Ð¿Ð¾Ð´Ð°Ñ†Ð¸Ð¼Ð° Ð¸Ð·Ð´Ð°ÑšÐ° 2, 3 Ð¸ 4."
+msgid "DWARF error: line info unsupported segment selector size %u"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¸Ð·Ð±Ð¸Ñ€Ð°Ñ‡Ð° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° %u"
+
+#: dwarf2.c:2794
+msgid "DWARF error: invalid maximum operations per instruction"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð° Ð¿Ð¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¸"
+
+#: dwarf2.c:2806
+msgid "DWARF error: ran out of room reading opcodes"
+msgstr "â€žDWARFÐ´ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð½ÐµÑ�Ñ‚Ð°Ð»Ð¾ Ñ˜Ðµ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ñ‡Ð¸Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ð¾Ð¿ÐºÐ¾Ð´Ð¾Ð²Ðµ"
 
-#: dwarf2.c:2560
+#: dwarf2.c:2984
+msgid "DWARF error: mangled line number section"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½"
+
+#: dwarf2.c:3455
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ±Ð°Ñ‡ÐµÑšÐµ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¾Ð³ Ð¿Ñ€Ð¸Ð¼ÐµÑ€ÐºÐ° Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾"
+
+#: dwarf2.c:3489 dwarf2.c:3579
+msgid "DWARF error: invalid abstract instance DIE ref"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð°Ð½ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ðº â€žDIEâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ"
+
+#: dwarf2.c:3505
 #, c-format
-msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ñ’Ð¾Ñ… Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%uâ€œ, Ð¾Ð²Ð°Ñ˜ Ñ‡Ð¸Ñ‚Ð°Ñ‡ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ€Ð°Ð´Ð¸ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°Ð¼Ð° Ð²ÐµÑ›Ð¸Ð¼ Ð¾Ð´ â€ž%uâ€œ."
+msgid "DWARF error: unable to read alt ref %<PRIu64>"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žaltâ€œ ÑƒÐ¿ÑƒÑ‚Ñƒ %<PRIu64>"
 
-#: dwarf2.c:2586
+#: dwarf2.c:3557
 #, c-format
-msgid "Dwarf Error: Bad abbrev number: %u."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð›Ð¾Ñˆ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜: %u."
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ðº â€žDIEâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ %<PRIu64>"
 
-#: ecoff.c:1233
+#: dwarf2.c:3594 dwarf2.c:3910 dwarf2.c:4483
 #, c-format
-msgid "Unknown basic type %d"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œ"
+msgid "DWARF error: could not find abbrev number %u"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜ %u"
 
-#: ecoff.c:1490
+#: dwarf2.c:4183
+#, c-format
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´Ñ€ÐµÐ´Ð±Ñƒ Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ðµ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ 0Ã—%lx"
+
+#: dwarf2.c:4329 dwarf2.c:4583
+msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ð° â€žDW_AT_comp_dirâ€œ Ñ˜Ðµ Ð½Ð°Ñ’ÐµÐ½Ð° Ñ�Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¾Ð¼ Ð½Ðµ-Ð½Ð¸Ñ�ÐºÐµ"
+
+#: dwarf2.c:4400
+#, c-format
+msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ð°Ñ’Ð¾Ñ… â€žDWARFâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%uâ€œ, Ð¾Ð²Ð°Ñ˜ Ñ‡Ð¸Ñ‚Ð°Ñ‡ Ñ€Ð°Ð´Ð¸ Ñ�Ð°Ð¼Ð¾ Ñ�Ð° Ð¿Ð¾Ð´Ð°Ñ†Ð¸Ð¼Ð° Ð¸Ð·Ð´Ð°ÑšÐ° 2, 3, 4 Ð¸ 5"
+
+#: dwarf2.c:4447
+#, c-format
+msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ð°Ñ’Ð¾Ñ… Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%uâ€œ, Ð¾Ð²Ð°Ñ˜ Ñ‡Ð¸Ñ‚Ð°Ñ‡ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ€Ð°Ð´Ð¸ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°Ð¼Ð° Ð²ÐµÑ›Ð¸Ð¼ Ð¾Ð´ â€ž%uâ€œ"
+
+#: ecoff.c:1016
+#, c-format
+msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žisymMaxâ€œ (%ld) Ñ˜Ðµ Ð²ÐµÑ›Ðµ Ð¾Ð´ â€žifdMaxâ€œ (%ld)"
+
+#: ecoff.c:1312
+#, c-format
+msgid "unknown basic type %d"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œ"
+
+#: ecoff.c:1568
 #, c-format
 msgid ""
 "\n"
@@ -597,7 +776,7 @@ msgstr ""
 "\n"
 "      ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1497 ecoff.c:1500
+#: ecoff.c:1575 ecoff.c:1578
 #, c-format
 msgid ""
 "\n"
@@ -606,7 +785,7 @@ msgstr ""
 "\n"
 "      ÐŸÑ€Ð²Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1512
+#: ecoff.c:1593
 #, c-format
 msgid ""
 "\n"
@@ -615,7 +794,7 @@ msgstr ""
 "\n"
 "      ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %-7ld   Ð’Ñ€Ñ�Ñ‚Ð°:  %s"
 
-#: ecoff.c:1519
+#: ecoff.c:1601
 #, c-format
 msgid ""
 "\n"
@@ -624,7 +803,7 @@ msgstr ""
 "\n"
 "      Ð›Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1527
+#: ecoff.c:1609
 #, c-format
 msgid ""
 "\n"
@@ -633,7 +812,7 @@ msgstr ""
 "\n"
 "      struct; ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1532
+#: ecoff.c:1614
 #, c-format
 msgid ""
 "\n"
@@ -642,7 +821,7 @@ msgstr ""
 "\n"
 "      union; ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1537
+#: ecoff.c:1619
 #, c-format
 msgid ""
 "\n"
@@ -651,7 +830,7 @@ msgstr ""
 "\n"
 "      enum; ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1543
+#: ecoff.c:1627
 #, c-format
 msgid ""
 "\n"
@@ -660,138 +839,349 @@ msgstr ""
 "\n"
 "      Ð’Ñ€Ñ�Ñ‚Ð°: %s"
 
-#: elf-attrs.c:573
-msgid "error: %B: Object has vendor-specific contents that must be processed by the '%s' toolchain"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: ÐžÐ±Ñ˜ÐµÐºÐ°Ñ‚ Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¿Ñ€Ð¾Ð´Ð°Ð²Ñ†Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ ÐºÐ¾Ñ˜Ð¸ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ñ€Ð°Ñ’ÐµÐ½ Ð°Ð»Ð°Ñ‚Ð½Ð¸Ð¼ Ð»Ð°Ð½Ñ†ÐµÐ¼ â€ž%sâ€œ"
-
-#: elf-attrs.c:582
-msgid "error: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: ÐžÐ·Ð½Ð°ÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€ž%d, %sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼ â€ž%d, %sâ€œ"
-
-#: elf-eh-frame.c:921
-msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n"
-msgstr "%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€ž%B(%A)â€œ; Ð½ÐµÑ›Ðµ Ð±Ð¸Ñ‚Ð¸ Ð½Ð°Ð¿Ñ€Ð°Ð²Ñ™ÐµÐ½Ð° Ð½Ð¸Ñ˜ÐµÐ´Ð½Ð° â€ž.eh_frame_hdrâ€œ Ñ‚Ð°Ð±ÐµÐ»Ð°.\n"
-
-#: elf-eh-frame.c:1193
-msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n"
-msgstr "%P: Ñ„Ð´Ðµ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ Ñƒ â€ž%B(%A)â€œ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ â€ž.eh_frame_hdrâ€œ Ñ‚Ð°Ð±ÐµÐ»Ðµ.\n"
-
-#: elf-eh-frame.c:1612
-msgid "%P: DW_EH_PE_datarel unspecified for this architecture.\n"
-msgstr "%P: â€žDW_EH_PE_datarelâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð²Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ.\n"
-
-#: elf-ifunc.c:135
-msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%B' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
-msgstr "%F%P: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ð° Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ÑˆÑ›Ñƒ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ â€ž%Bâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ; Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-fPIEâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-pieâ€œ\n"
-
-#: elf-m10200.c:430 elf-m10300.c:2164 elf32-avr.c:1256 elf32-bfin.c:3220
-#: elf32-cr16.c:1484 elf32-cr16c.c:780 elf32-cris.c:2016 elf32-crx.c:922
-#: elf32-d10v.c:513 elf32-epiphany.c:557 elf32-fr30.c:589 elf32-frv.c:4039
-#: elf32-h8300.c:525 elf32-i860.c:1212 elf32-ip2k.c:1468 elf32-iq2000.c:688
-#: elf32-lm32.c:1160 elf32-m32c.c:553 elf32-m32r.c:3066 elf32-m68hc1x.c:1283
-#: elf32-mep.c:535 elf32-metag.c:1992 elf32-microblaze.c:1560
-#: elf32-moxie.c:282 elf32-mt.c:395 elf32-nds32.c:4910 elf32-openrisc.c:404
-#: elf32-score.c:2729 elf32-score7.c:2537 elf32-spu.c:5041
-#: elf32-tilepro.c:3666 elf32-v850.c:2281 elf32-xstormy16.c:936
-#: elf64-mmix.c:1538 elfxx-tilegx.c:4051
+#: elf-attrs.c:417 elf-attrs.c:447 elf-attrs.c:623
+msgid "error adding attribute"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ð´Ð¾Ð´Ð°Ð²Ð°ÑšÐ° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°"
+
+#: elf-attrs.c:503
+#, c-format
+msgid "%pB: error: attribute section '%pA' too big: %#llx"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ðµ â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº: %#llx"
+
+#: elf-attrs.c:540
+#, c-format
+msgid "%pB: error: attribute section length too small: %ld"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°: %ld"
+
+#: elf-attrs.c:673
+#, c-format
+msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¿Ñ€Ð¾Ð´Ð°Ð²Ñ†Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ ÐºÐ¾Ñ˜Ð¸ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ñ€Ð°Ñ’ÐµÐ½ Ð°Ð»Ð°Ñ‚Ð½Ð¸Ð¼ Ð»Ð°Ð½Ñ†ÐµÐ¼ â€ž%sâ€œ"
+
+#: elf-attrs.c:683
+#, c-format
+msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð¾Ð·Ð½Ð°ÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€ž%d, %sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼ â€ž%d, %sâ€œ"
+
+#: elf-eh-frame.c:945
+#, c-format
+msgid "discarding zero address range FDE in %pB(%pA).\n"
+msgstr "Ð¾Ð´Ð±Ð°Ñ†ÑƒÑ˜ÐµÐ¼ Ð½ÑƒÐ»Ñ‚Ð¸ Ð¾Ð¿Ñ�ÐµÐ³ Ð°Ð´Ñ€ÐµÑ�Ðµ â€žFDEâ€œ Ñƒ â€ž%pB(%pA)â€œ.\n"
+
+#: elf-eh-frame.c:1050
+#, c-format
+msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€ž%pB(%pA)â€œ; Ð½ÐµÑ›Ðµ Ð±Ð¸Ñ‚Ð¸ Ð½Ð°Ð¿Ñ€Ð°Ð²Ñ™ÐµÐ½Ð° Ð½Ð¸Ñ˜ÐµÐ´Ð½Ð° â€ž.eh_frame_hdrâ€œ Ñ‚Ð°Ð±ÐµÐ»Ð°"
+
+#: elf-eh-frame.c:1542
+#, c-format
+msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
+msgstr "â€žFDEâ€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ Ñƒ â€ž%pB(%pA)â€œ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ â€ž.eh_frame_hdrâ€œ Ñ‚Ð°Ð±ÐµÐ»Ðµ"
+
+#: elf-eh-frame.c:1549
+msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
+msgstr "Ð±ÑƒÐ´ÑƒÑ›Ð° ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐ° Ð¾ â€žFDEâ€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÑƒ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð° Ð¾Ð´Ð±Ð°Ñ†Ð¸Ð²Ð°ÑšÐµ â€ž.eh_frame_hdrâ€œ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ðµ"
+
+#: elf-eh-frame.c:1868
+#, c-format
+msgid "%pB: %pA not in order"
+msgstr "%pB: â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÑƒ"
+
+#: elf-eh-frame.c:1882
+#, c-format
+msgid "%pB: %pA invalid input section size"
+msgstr "%pB: â€ž%pAâ€œ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™Ð°Ðº ÑƒÐ»Ð°Ð·Ð°"
+
+#: elf-eh-frame.c:1890
+#, c-format
+msgid "%pB: %pA points past end of text section"
+msgstr "%pB: â€ž%pAâ€œ Ñ‚Ð°Ñ‡Ð°ÐºÐ° Ð¿Ñ€ÐµÐ»Ð°Ð·Ð¸ ÐºÑ€Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ‚ÐµÐºÑ�Ñ‚Ð°"
+
+#: elf-eh-frame.c:2143
+msgid "DW_EH_PE_datarel unspecified for this architecture"
+msgstr "â€žDW_EH_PE_datarelâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð²Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
+
+#: elf-eh-frame.c:2314
+#, c-format
+msgid "invalid output section for .eh_frame_entry: %pA"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð° Ð·Ð° â€ž.eh_frame_entryâ€œ: %pA"
+
+#: elf-eh-frame.c:2337
+#, c-format
+msgid "invalid contents in %pA section"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
+
+#: elf-eh-frame.c:2493
+msgid ".eh_frame_hdr entry overflow"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€ž.eh_frame_hdrâ€œ ÑƒÐ½Ð¾Ñ�Ð°"
+
+#: elf-eh-frame.c:2495
+msgid ".eh_frame_hdr refers to overlapping FDEs"
+msgstr "â€ž.eh_frame_hdrâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°Ñ˜ÑƒÑ›Ðµ â€žFDEâ€œ-Ð¾Ð²Ðµ"
+
+#. xgettext:c-format.
+#: elf-ifunc.c:144 elfnn-loongarch.c:1427
+#, c-format
+msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
+msgstr "%F%P: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ð° Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ÑˆÑ›Ñƒ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ â€ž%pBâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ; Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-fPIEâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-pieâ€œ\n"
+
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-bfin.c:3133 elf32-cr16.c:1429
+#: elf32-cris.c:2034 elf32-crx.c:922 elf32-d10v.c:510 elf32-epiphany.c:563
+#: elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:492 elf32-h8300.c:523
+#: elf32-ip2k.c:1478 elf32-iq2000.c:691 elf32-lm32.c:1070 elf32-m32c.c:624
+#: elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522 elf32-metag.c:1984
+#: elf32-microblaze.c:1682 elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6093
+#: elf32-or1k.c:1897 elf32-score.c:2734 elf32-score7.c:2545 elf32-spu.c:5085
+#: elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
+#: elf32-xstormy16.c:930 elf64-bpf.c:339 elf64-mmix.c:1541 elfxx-tilegx.c:3742
 msgid "internal error: out of range error"
 msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
 
-#: elf-m10200.c:434 elf-m10300.c:2168 elf32-avr.c:1260 elf32-bfin.c:3224
-#: elf32-cr16.c:1488 elf32-cr16c.c:784 elf32-cris.c:2020 elf32-crx.c:926
-#: elf32-d10v.c:517 elf32-fr30.c:593 elf32-frv.c:4043 elf32-h8300.c:529
-#: elf32-i860.c:1216 elf32-iq2000.c:692 elf32-lm32.c:1164 elf32-m32c.c:557
-#: elf32-m32r.c:3070 elf32-m68hc1x.c:1287 elf32-mep.c:539 elf32-metag.c:1996
-#: elf32-microblaze.c:1564 elf32-moxie.c:286 elf32-msp430.c:1321
-#: elf32-nds32.c:4914 elf32-openrisc.c:408 elf32-score.c:2733
-#: elf32-score7.c:2541 elf32-spu.c:5045 elf32-tilepro.c:3670 elf32-v850.c:2285
-#: elf32-xstormy16.c:940 elf64-mmix.c:1542 elfxx-mips.c:9995
-#: elfxx-tilegx.c:4055
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-bfin.c:3137 elf32-cr16.c:1433
+#: elf32-cris.c:2038 elf32-crx.c:926 elf32-d10v.c:514 elf32-fr30.c:598
+#: elf32-frv.c:4053 elf32-ft32.c:496 elf32-h8300.c:527 elf32-iq2000.c:695
+#: elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841 elf32-m68hc1x.c:1275
+#: elf32-mep.c:526 elf32-metag.c:1988 elf32-microblaze.c:1686 elf32-moxie.c:292
+#: elf32-msp430.c:1510 elf32-nds32.c:6097 elf32-or1k.c:1901 elf32-score.c:2738
+#: elf32-score7.c:2549 elf32-spu.c:5089 elf32-tilepro.c:3376 elf32-v850.c:2298
+#: elf32-visium.c:684 elf32-xstormy16.c:934 elf64-mmix.c:1545
+#: elfxx-mips.c:10658 elfxx-tilegx.c:3746
 msgid "internal error: unsupported relocation error"
 msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
 
-#: elf-m10200.c:438 elf32-cr16.c:1492 elf32-cr16c.c:788 elf32-crx.c:930
-#: elf32-d10v.c:521 elf32-h8300.c:533 elf32-lm32.c:1168 elf32-m32r.c:3074
-#: elf32-m68hc1x.c:1291 elf32-microblaze.c:1568 elf32-nds32.c:4918
-#: elf32-score.c:2737 elf32-score7.c:2545 elf32-spu.c:5049
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:930 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
+#: elf32-microblaze.c:1690 elf32-nds32.c:6101 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5093
 msgid "internal error: dangerous error"
 msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð³Ñ€ÐµÑˆÐºÐ° Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#: elf-m10200.c:442 elf-m10300.c:2184 elf32-avr.c:1268 elf32-bfin.c:3232
-#: elf32-cr16.c:1496 elf32-cr16c.c:792 elf32-cris.c:2028 elf32-crx.c:934
-#: elf32-d10v.c:525 elf32-epiphany.c:572 elf32-fr30.c:601 elf32-frv.c:4051
-#: elf32-h8300.c:537 elf32-i860.c:1224 elf32-ip2k.c:1483 elf32-iq2000.c:700
-#: elf32-lm32.c:1172 elf32-m32c.c:565 elf32-m32r.c:3078 elf32-m68hc1x.c:1295
-#: elf32-mep.c:547 elf32-metag.c:2004 elf32-microblaze.c:1572
-#: elf32-moxie.c:294 elf32-msp430.c:1329 elf32-mt.c:403 elf32-nds32.c:4922
-#: elf32-openrisc.c:416 elf32-score.c:2746 elf32-score7.c:2549
-#: elf32-spu.c:5053 elf32-tilepro.c:3678 elf32-v850.c:2305
-#: elf32-xstormy16.c:948 elf64-mmix.c:1550 elfxx-tilegx.c:4063
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-bfin.c:3145 elf32-cr16.c:1441
+#: elf32-cris.c:2046 elf32-crx.c:934 elf32-d10v.c:522 elf32-epiphany.c:578
+#: elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:504 elf32-h8300.c:535
+#: elf32-ip2k.c:1493 elf32-iq2000.c:703 elf32-lm32.c:1082 elf32-m32c.c:636
+#: elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534 elf32-metag.c:1996
+#: elf32-microblaze.c:1694 elf32-moxie.c:300 elf32-msp430.c:1518 elf32-mt.c:410
+#: elf32-nds32.c:6105 elf32-or1k.c:1909 elf32-score.c:2751 elf32-score7.c:2557
+#: elf32-spu.c:5097 elf32-tilepro.c:3384 elf32-v850.c:2318 elf32-visium.c:692
+#: elf32-xstormy16.c:942 elf64-bpf.c:352 elf64-mmix.c:1553 elfxx-tilegx.c:3754
 msgid "internal error: unknown error"
 msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°"
 
-#: elf-m10300.c:1021
+#: elf-m10300.c:1030
+#, c-format
+msgid "%pB: unsupported transition from %s to %s"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ð¿Ñ€ÐµÐ»Ð°Ð·Ð°Ðº Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ"
+
+#: elf-m10300.c:1197
 #, c-format
-msgid "%s: Unsupported transition from %s to %s"
-msgstr "%s: ÐŸÑ€ÐµÐ»Ð°Ð·Ð°Ðº Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½"
+msgid "%pB: %s' accessed both as normal and thread local symbol"
+msgstr "%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
 
-#: elf-m10300.c:1213
-msgid "%B: %s' accessed both as normal and thread local symbol"
-msgstr "%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
-
-#: elf-m10300.c:2108 elf32-arm.c:10632 elf32-i386.c:4363 elf32-m32r.c:2558
-#: elf32-m68k.c:4120 elf32-s390.c:3303 elf32-sh.c:4109 elf32-tilepro.c:3569
-#: elf32-xtensa.c:3063 elf64-s390.c:3229 elf64-sh64.c:1640 elf64-x86-64.c:4463
-#: elfxx-sparc.c:3904 elfxx-tilegx.c:3974
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4450
-msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"
-msgstr "%B(%A+0x%lx): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf-m10300.c:2093 elf32-arm.c:13398 elf32-i386.c:3494 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3023 elf64-s390.c:3042 elf64-x86-64.c:4369 elfxx-sparc.c:2917
+#: elfxx-sparc.c:3814 elfxx-tilegx.c:3665 elfnn-aarch64.c:5713
+#: elfnn-aarch64.c:7322 elfnn-kvx.c:2775
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf-m10300.c:2173
+#: elf-m10300.c:2155
 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
 msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð° Ð·Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ (Ð´Ð° Ð»Ð¸ Ñ�Ñ‚Ðµ Ð·Ð°Ð±Ð¾Ñ€Ð°Ð²Ð¸Ð»Ð¸ â€ž-fpicâ€œ?)"
 
-#: elf-m10300.c:2176
-msgid "%B: taking the address of protected function '%s' cannot be done when making a shared library"
-msgstr "%B: ÑƒÐ·Ð¸Ð¼Ð°ÑšÐµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ðµ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ"
+#: elf-m10300.c:2159
+#, c-format
+msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library"
+msgstr "%pB: ÑƒÐ·Ð¸Ð¼Ð°ÑšÐµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ðµ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ"
 
-#: elf-m10300.c:2179
+#: elf-m10300.c:2162
 msgid "internal error: suspicious relocation type used in shared library"
 msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÑƒÐ¼ÑšÐ¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð° Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: elf.c:343
-msgid "%B: invalid string offset %u >= %lu for section `%s'"
-msgstr "%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ â€ž%u >= %luâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
-
-#: elf.c:455
-msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
-msgstr "â€ž%Bâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð±Ñ€Ð¾Ñ˜ %lu ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žSHT_SYMTAB_SHNDXâ€œ"
-
-#: elf.c:611
-msgid "%B: Corrupt size field in group section header: 0x%lx"
-msgstr "%B: ÐžÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ: 0x%lx"
-
-#: elf.c:647
-msgid "%B: invalid SHT_GROUP entry"
-msgstr "%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ� â€žSHT_GROUPâ€œ"
-
-#: elf.c:717
-msgid "%B: no group info for section %A"
-msgstr "%B: Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
-
-#: elf.c:746 elf.c:3144 elflink.c:10290
-msgid "%B: warning: sh_link not set for section `%A'"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žsh_linkâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
-
-#: elf.c:765
-msgid "%B: sh_link [%d] in section `%A' is incorrect"
-msgstr "%B: â€žsh_link [%d]â€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾"
-
-#: elf.c:800
-msgid "%B: unknown [%d] section `%s' in group [%s]"
-msgstr "%B: [%d] Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ð³Ñ€ÑƒÐ¿Ð¸ [%s]"
+#: elf-m10300.c:2650 elf32-avr.c:2488 elf32-frv.c:5621 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8457 reloc16.c:155 elfnn-ia64.c:365
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: â€ž--relaxâ€œ Ð¸ â€ž-râ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾\n"
+
+#: elf-properties.c:65
+#, c-format
+msgid "%pB: out of memory in _bfd_elf_get_property"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð²Ð¸ÑˆÐµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ñƒ â€ž_bfd_elf_get_propertyâ€œ"
+
+#: elf-properties.c:91
+#, c-format
+msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lx"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGNU_PROPERTY_TYPEâ€œ (%ld) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ: %#lx"
+
+#: elf-properties.c:112
+#, c-format
+msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%x"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGNU_PROPERTY_TYPEâ€œ (%ld) Ð²Ñ€Ñ�Ñ‚Ð° (0x%x) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°: 0x%x"
+
+#: elf-properties.c:151
+#, c-format
+msgid "warning: %pB: corrupt stack size: 0x%x"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°: 0x%x"
+
+#: elf-properties.c:169
+#, c-format
+msgid "warning: %pB: corrupt no copy on protected size: 0x%x"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÑšÐµ Ð½Ðµ ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ð²Ð° Ð½Ð° Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ: 0x%x"
+
+#: elf-properties.c:189
+#, c-format
+msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ (0x%x) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ: 0x%x>"
+
+#: elf-properties.c:214
+#, c-format
+msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žGNU_PROPERTY_TYPEâ€œ (%ld) Ð²Ñ€Ñ�Ñ‚Ð°: 0x%x"
+
+#: elf-properties.c:400
+msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
+msgstr "Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (0x%v) Ð¸ â€ž%pBâ€œ (0x%v)\n"
+
+#: elf-properties.c:406
+msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
+msgstr "Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (0x%v) Ð¸ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾)\n"
+
+#: elf-properties.c:415 elf-properties.c:493
+msgid "Removed property %W to merge %pB and %pB\n"
+msgstr "Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ\n"
+
+#: elf-properties.c:419
+msgid "Removed property %W to merge %pB and %pB (not found)\n"
+msgstr "Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾)\n"
+
+#: elf-properties.c:436
+msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
+msgstr "ÐžÑ�Ð²ÐµÐ¶ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ (0x%v) Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (0x%v) Ð¸ â€ž%pBâ€œ (0x%v)\n"
+
+#: elf-properties.c:445
+msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
+msgstr "ÐžÑ�Ð²ÐµÐ¶ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ (%v) Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (0x%v) Ð¸ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾)\n"
+
+#: elf-properties.c:487
+msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
+msgstr "Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾) Ð¸ â€ž%pBâ€œ (0x%v)\n"
+
+#: elf-properties.c:668 elfxx-aarch64.c:758 elfxx-x86.c:4147
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð“Ð�Ð£ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð°\n"
+
+#: elf-properties.c:672 elfxx-aarch64.c:762 elfxx-x86.c:4152
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#. Merge .note.gnu.property sections.
+#: elf-properties.c:698 elf-properties.c:700
+msgid "\n"
+msgstr "\n"
+
+#: elf-properties.c:699
+msgid "Merging program properties\n"
+msgstr "Ð¡Ñ‚Ð°Ð¿Ð°Ð¼ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°\n"
+
+#: elf-sframe.c:240
+#, c-format
+msgid "error in %pB(%pA); no .sframe will be created"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€ž%pB(%pA)â€œ; Ð½ÐµÑ›Ðµ Ð±Ð¸Ñ‚Ð¸ Ð½Ð°Ð¿Ñ€Ð°Ð²Ñ™ÐµÐ½Ð¾ â€ž.sframeâ€œ"
+
+#: elf-sframe.c:400
+msgid "input SFrame sections with different abi prevent .sframe generation"
+msgstr "ÑƒÐ»Ð°Ð·Ð½Ð¸ â€žSFrameâ€œ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ñ�Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ â€žabiâ€œ-ÐµÐ¼ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð°Ñ˜Ñƒ â€ž.sframeâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ"
+
+#: elf-sframe.c:411
+msgid "input SFrame sections with different format versions prevent .sframe generation"
+msgstr "ÑƒÐ»Ð°Ð·Ð½Ð¸ â€žSFrameâ€œ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ñ�Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¸Ð·Ð´Ð°ÑšÐ¸Ð¼Ð° Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð°Ñ˜Ñƒ â€ž.sframeâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ"
+
+#. PR 17512: file: f057ec89.
+#: elf.c:328
+#, c-format
+msgid "%pB: attempt to load strings from a non-string section (number %d)"
+msgstr "%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð¼ Ð½Ð¸Ñ�ÐºÐµ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° Ð½Ðµ-Ð½Ð¸Ñ�ÐºÐµ (Ð±Ñ€Ð¾Ñ˜ %d)"
+
+#: elf.c:353
+#, c-format
+msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ â€ž%u >= %<PRIu64>â€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+
+#: elf.c:517 elf32-arm.c:17731 elfnn-aarch64.c:8322 elfnn-loongarch.c:5102
+#, c-format
+msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
+msgstr "â€ž%pBâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð±Ñ€Ð¾Ñ˜ %lu ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žSHT_SYMTAB_SHNDXâ€œ"
+
+#: elf.c:679
+#, c-format
+msgid "%pB: invalid size field in group section header: %#<PRIx64>"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ: %#<PRIx64>"
+
+#: elf.c:724
+#, c-format
+msgid "%pB: invalid entry in SHT_GROUP section [%u]"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ� Ñƒ â€žSHT_GROUPâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ [%u]"
+
+#: elf.c:743
+#, c-format
+msgid "%pB: no valid group sections found"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ðµ Ð¾Ð´ÐµÑ™ÐºÐµ Ð³Ñ€ÑƒÐ¿Ðµ"
+
+#. See PR 21957 for a reproducer.
+#: elf.c:772
+#, c-format
+msgid "%pB: group section '%pA' has no contents"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº Ð³Ñ€ÑƒÐ¿Ðµ â€ž%pAâ€œ Ð½ÐµÐ¼Ð° Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°"
+
+#: elf.c:833
+#, c-format
+msgid "%pB: no group info for section '%pA'"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
+
+#: elf.c:885
+#, c-format
+msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
+msgstr "%pB: â€žsh_link [%d]â€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾"
+
+#: elf.c:898
+#, c-format
+msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
+msgstr "%pB: â€žSHT_GROUPâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº [Ð¸Ð½Ð´ÐµÐºÑ� %d] Ð½ÐµÐ¼Ð° â€žSHF_GROUPâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ"
+
+#: elf.c:920
+#, c-format
+msgid "%pB: section group entry number %u is corrupt"
+msgstr "%pB: Ð±Ñ€Ð¾Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° ÑƒÐ½Ð¾Ñ�Ð° Ð³Ñ€ÑƒÐ¿Ðµ %u Ñ˜Ðµ Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½"
+
+#: elf.c:943
+#, c-format
+msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° [%#x] Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ð³Ñ€ÑƒÐ¿Ð¸ [%pA]"
+
+#: elf.c:1244
+#, c-format
+msgid "%pB: section %s is compressed with zstd, but BFD is not built with zstd support"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð·Ð°Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½ Ñ�Ð° â€žzstdâ€œ, Ð°Ð»Ð¸ BFD Ð½Ð¸Ñ˜Ðµ Ð¸Ð·Ð³Ñ€Ð°Ñ’ÐµÐ½ Ñ�Ð° â€žzstdâ€œ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ¾Ð¼"
+
+#: elf.c:1440
+#, c-format
+msgid "%pB: invalid sh_link field (%d) in section number %d"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ â€žsh_linkâ€œ Ð¿Ð¾Ñ™Ðµ (%d) Ñƒ Ð±Ñ€Ð¾Ñ˜Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° %d"
+
+#: elf.c:1456
+#, c-format
+msgid "%pB: failed to find link section for section %d"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð²ÐµÐ·Ðµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº %d"
+
+#: elf.c:1483
+#, c-format
+msgid "%pB: failed to find info section for section %d"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº %d"
 
-#: elf.c:1174
+#: elf.c:1660
 #, c-format
 msgid ""
 "\n"
@@ -800,7 +1190,7 @@ msgstr ""
 "\n"
 "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°:\n"
 
-#: elf.c:1216
+#: elf.c:1702
 #, c-format
 msgid ""
 "\n"
@@ -809,7 +1199,7 @@ msgstr ""
 "\n"
 "Ð”Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº:\n"
 
-#: elf.c:1352
+#: elf.c:1841
 #, c-format
 msgid ""
 "\n"
@@ -818,7 +1208,7 @@ msgstr ""
 "\n"
 "Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¸Ð·Ð´Ð°ÑšÐ°:\n"
 
-#: elf.c:1377
+#: elf.c:1866
 #, c-format
 msgid ""
 "\n"
@@ -827,1797 +1217,2596 @@ msgstr ""
 "\n"
 "Ð£Ð¿ÑƒÑ‚Ð° Ð¸Ð·Ð´Ð°ÑšÐ°:\n"
 
-#: elf.c:1382
+#: elf.c:1871
 #, c-format
 msgid "  required from %s:\n"
 msgstr "  Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð°Ð½Ð¾ Ð¸Ð· â€ž%sâ€œ:\n"
 
-#: elf.c:1807
-msgid "%B: invalid link %lu for reloc section %s (index %u)"
-msgstr "%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ·Ð° â€ž%luâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ (Ð¸Ð½Ð´ÐµÐºÑ� â€ž%uâ€œ)"
+#: elf.c:2614
+#, c-format
+msgid "%pB: warning: loop in section dependencies detected"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿ÐµÑ‚Ñ™Ð° Ñƒ Ð·Ð°Ð²Ð¸Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸Ð¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð°"
 
-#: elf.c:1977
-msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]"
-msgstr "%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½, Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]"
+#: elf.c:2721
+#, c-format
+msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð²Ð¸ÑˆÐµ Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€“ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ %u"
 
-#: elf.c:1989
-msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]"
-msgstr "%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]"
+#: elf.c:2806
+#, c-format
+msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð²Ð¸ÑˆÐµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ñ… Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€“ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ %u"
 
-#: elf.c:2000
-msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]"
-msgstr "%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]"
+#: elf.c:2925
+#, c-format
+msgid "%pB: invalid link %u for reloc section %s (index %u)"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ·Ð° â€ž%uâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ (Ð¸Ð½Ð´ÐµÐºÑ� â€ž%uâ€œ)"
 
-#: elf.c:2010
-msgid "%B: don't know how to handle section `%s' [0x%8x]"
-msgstr "%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]"
+#: elf.c:2982
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð°Ñ’Ð¾Ñ… Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ â€“ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼"
 
-#: elf.c:2648
+#: elf.c:3070 elf.c:3084 elf.c:3095 elf.c:3108
 #, c-format
-msgid "warning: section `%A' type changed to PROGBITS"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° â€ž%Aâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ñƒ â€žPROGBITSâ€œ"
+msgid "%pB: unknown type [%#x] section `%s'"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° [%#x] Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#: elf.c:3015
-msgid "%B: too many sections: %u"
-msgstr "%B: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %u"
+#: elf.c:3770
+#, c-format
+msgid "%pB: error: alignment power %d of section `%pA' is too big"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð½Ð°Ð³Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° %d Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°"
 
-#: elf.c:3101
-msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'"
-msgstr "%B: â€žsh_linkâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ ÑƒÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¾Ð´ â€ž%Bâ€œ"
+#: elf.c:3805
+#, c-format
+msgid "warning: section `%pA' type changed to PROGBITS"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° â€ž%pAâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ñƒ â€žPROGBITSâ€œ"
 
-#: elf.c:3124
-msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'"
-msgstr "%B: â€žsh_linkâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ ÑƒÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° ÑƒÐºÐ»Ð¾ÑšÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¾Ð´ â€ž%Bâ€œ"
+#: elf.c:4311
+#, c-format
+msgid "%pB: too many sections: %u"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %u"
 
-#: elf.c:4126
-msgid "%B: TLS sections are not adjacent:"
-msgstr "%B: Ð¢Ð›Ð¡ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð½Ð¸Ñ�Ñƒ Ñ�ÑƒÑ�ÐµÐ´Ð½Ð¸:"
+#: elf.c:4397
+#, c-format
+msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
+msgstr "%pB: â€žsh_linkâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ ÑƒÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¾Ð´ â€ž%pBâ€œ"
 
-#: elf.c:4133
+#: elf.c:4415
 #, c-format
-msgid "\t    TLS: %A"
-msgstr "\t    Ð¢Ð›Ð¡: %A"
+msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
+msgstr "%pB: â€žsh_linkâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ ÑƒÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° ÑƒÐºÐ»Ð¾ÑšÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¾Ð´ â€ž%pBâ€œ"
 
-#: elf.c:4137
+#: elf.c:5009
 #, c-format
-msgid "\tnon-TLS: %A"
-msgstr "\tÐ½Ðµ-Ð¢Ð›Ð¡: %A"
+msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
+msgstr "%pB: â€žGNU_MBINDâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ â€žsh_infoâ€œ Ð¿Ð¾Ñ™Ðµ: %d"
 
-#: elf.c:4596
-msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section"
-msgstr "%B: ÐŸÑ€Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ â€žPT_DYNAMICâ€œ Ð½Ð¸Ñ˜Ðµ â€ž.dynamicâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
+#: elf.c:5192
+msgid "%F%P: failed to size relative relocations\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°\n"
 
-#: elf.c:4621
-msgid "%B: Not enough room for program headers, try linking with -N"
-msgstr "%B: Ð�ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð·Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÑ‚Ðµ Ñ�Ð° â€ž-Nâ€œ"
+#: elf.c:5617
+#, c-format
+msgid "%pB: TLS sections are not adjacent:"
+msgstr "%pB: Ð¢Ð›Ð¡ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð½Ð¸Ñ�Ñƒ Ñ�ÑƒÑ�ÐµÐ´Ð½Ð¸:"
 
-#: elf.c:4707
-msgid "%B: section %A lma %#lx adjusted to %#lx"
-msgstr "%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%A lma %#lxâ€œ Ñ˜Ðµ Ð´Ð¾Ñ‚ÐµÑ€Ð°Ð½ Ð½Ð° %#lx"
+#: elf.c:5624
+#, c-format
+msgid "\t    TLS: %pA"
+msgstr "\t    Ð¢Ð›Ð¡: %pA"
 
-#: elf.c:4843
-msgid "%B: section `%A' can't be allocated in segment %d"
-msgstr "%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð´ÐµÐ»Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ %d"
+#: elf.c:5628
+#, c-format
+msgid "\tnon-TLS: %pA"
+msgstr "\tÐ½Ðµ-Ð¢Ð›Ð¡: %pA"
 
-#: elf.c:4892
-msgid "%B: warning: allocated section `%s' not in segment"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ"
+#: elf.c:6256
+#, c-format
+msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
+msgstr "%pB: ÐŸÑ€Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ â€žPT_DYNAMICâ€œ Ð½Ð¸Ñ˜Ðµ â€ž.dynamicâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: elf.c:5473
-msgid "%B: symbol `%s' required but not present"
-msgstr "%B: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�ÑƒÑ‚Ð°Ð½"
+#: elf.c:6282
+#, c-format
+msgid "%pB: not enough room for program headers, try linking with -N"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð·Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÑ‚Ðµ Ñ�Ð° â€ž-Nâ€œ"
 
-#: elf.c:5811
-msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¿Ð¾Ð´ÐµÐ¾Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸, Ð´Ð° Ð»Ð¸ Ñ˜Ðµ Ñ‚Ð¾ Ð½Ð°Ð¼ÐµÑ€Ð°Ð²Ð°Ð½Ð¾ ?\n"
+#: elf.c:6399
+#, c-format
+msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pA lma %#<PRIx64>â€œ Ñ˜Ðµ Ð´Ð¾Ñ‚ÐµÑ€Ð°Ð½ Ð½Ð° %#<PRIx64>"
 
-#: elf.c:6867
+#. The fix for this error is usually to edit the linker script being
+#. used and set up the program headers manually.  Either that or
+#. leave room for the headers at the start of the SECTIONS.
+#: elf.c:6539
 #, c-format
-msgid "Unable to find equivalent output section for symbol '%s' from section '%s'"
-msgstr "Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÐµÐºÐ²Ð¸Ð²Ð°Ð»ÐµÐ½Ñ‚Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žPHDRâ€œ Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²ÐµÐ½ â€žLOADâ€œ Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ¾Ð¼"
 
-#: elf.c:7915
-msgid "%B: unsupported relocation type %s"
-msgstr "%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %s Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+#: elf.c:6579
+#, c-format
+msgid "%pB: section `%pA' can't be allocated in segment %d"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð´ÐµÐ»Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ %d"
 
-#: elf32-arm.c:3722 elf32-arm.c:7051
-msgid ""
-"%B(%s): warning: interworking not enabled.\n"
-"  first occurrence: %B: Thumb call to ARM"
-msgstr ""
-"%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.\n"
-"  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žThumbâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð½Ð° â€žARMâ€œ"
+#: elf.c:6720
+#, c-format
+msgid "%pB: warning: allocated section `%s' not in segment"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ"
 
-#: elf32-arm.c:3769
-msgid ""
-"%B(%s): warning: interworking not enabled.\n"
-"  first occurrence: %B: ARM call to Thumb"
-msgstr ""
-"%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.\n"
-"  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žARMâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð½Ð° â€žThumbâ€œ"
+#: elf.c:6855
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð½Ð¸Ñ˜ÐµÐ´Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½Ð° â€žPT_GNU_RELROâ€œ Ð¿Ð¾Ð´ÐµÐ¾Ðº"
+
+#: elf.c:6886
+#, c-format
+msgid "%pB: error: non-load segment %d includes file header and/or program header"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð½Ðµ-ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° %d ÑƒÐºÑ™ÑƒÑ‡ÑƒÑ˜Ðµ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¸/Ð¸Ð»Ð¸ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°"
+
+#: elf.c:7034
+#, c-format
+msgid "error: %pB has a TLS segment with execute permission"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¢Ð›Ð¡ Ð¿Ð¾Ð´ÐµÐ¾Ðº Ñ�Ð° Ð¾Ð²Ð»Ð°ÑˆÑ›ÐµÑšÐµÐ¼ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°"
+
+#: elf.c:7040
+#, c-format
+msgid "warning: %pB has a TLS segment with execute permission"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¢Ð›Ð¡ Ð¿Ð¾Ð´ÐµÐ¾Ðº Ñ�Ð° Ð¾Ð²Ð»Ð°ÑˆÑ›ÐµÑšÐµÐ¼ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°"
+
+#: elf.c:7055
+#, c-format
+msgid "error: %pB has a LOAD segment with RWX permissions"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð£Ð§Ð˜Ð¢Ð�Ðˆ Ñ�Ð° Ð¾Ð²Ð»Ð°ÑˆÑ›ÐµÑšÐ¸Ð¼Ð° Ð¿Ð¸Ñ�Ð°ÑšÐ° Ð¸ Ð±Ñ€Ð¸Ñ�Ð°ÑšÐ°"
+
+#: elf.c:7061
+#, c-format
+msgid "warning: %pB has a LOAD segment with RWX permissions"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð£Ð§Ð˜Ð¢Ð�Ðˆ Ñ�Ð° Ð¾Ð²Ð»Ð°ÑˆÑ›ÐµÑšÐ¸Ð¼Ð° Ð¿Ð¸Ñ�Ð°ÑšÐ° Ð¸ Ð±Ñ€Ð¸Ñ�Ð°ÑšÐ°"
 
-#: elf32-arm.c:3988 elf32-arm.c:5433
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:2324
+#: elf.c:7454
 #, c-format
-msgid "%s: cannot create stub entry %s"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð¿Ñ€Ð¸Ð²Ð¸Ð´Ð½Ð¸ ÑƒÐ½Ð¾Ñ� â€ž%sâ€œ"
+msgid "%pB: symbol `%s' required but not present"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�ÑƒÑ‚Ð°Ð½"
 
-#: elf32-arm.c:5549
+#: elf.c:7832
 #, c-format
-msgid "unable to find THUMB glue '%s' for '%s'"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žTHUMBâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¿Ð¾Ð´ÐµÐ¾Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð½Ð° â€žvaddr=%#<PRIx64>â€œ, Ð´Ð° Ð»Ð¸ Ñ˜Ðµ Ñ‚Ð¾ Ð½Ð°Ð¼ÐµÑ€Ð°Ð²Ð°Ð½Ð¾?"
 
-#: elf32-arm.c:5585
+#: elf.c:8492
 #, c-format
-msgid "unable to find ARM glue '%s' for '%s'"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žARMâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° Ð·Ð° â€ž%#<PRIx64>â€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾"
 
-#: elf32-arm.c:6123
-msgid "%B: BE8 images only valid in big-endian mode."
-msgstr "%B: â€žBE8â€œ Ñ�Ð»Ð¸ÐºÐµ Ñ�Ñƒ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ðµ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸."
+#: elf.c:9000
+#, c-format
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr "%pB: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€ÑƒÐºÑƒÑ˜ÐµÐ¼ Ñ�Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° %x Ñƒ Ð•Ð›Ð¤ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ.  ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ›Ñƒ â€žABSâ€œ."
+
+#: elf.c:9030
+#, c-format
+msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÐµÐºÐ²Ð¸Ð²Ð°Ð»ÐµÐ½Ñ‚Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+
+#: elf.c:9464
+#, c-format
+msgid "%pB: .gnu.version_r invalid entry"
+msgstr "%pB: â€ž.gnu.version_râ€œ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ�"
+
+#: elf.c:9639
+#, c-format
+msgid "%pB: .gnu.version_d invalid entry"
+msgstr "%pB: â€ž.gnu.version_dâ€œ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ�"
+
+#: elf.c:10139
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¿Ð¸ÑˆÐµÐ¼ Ð¿Ñ€ÐµÐºÐ¾ ÐºÑ€Ð°Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ°"
+
+#: elf.c:10151
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÐ¿Ð¸ÑˆÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ Ð¿Ñ€Ð°Ð·Ð½Ñƒ Ð¼ÐµÑ’ÑƒÐ¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ"
+
+#: elf.c:10266 elf32-mcore.c:100 elf32-mcore.c:455 elf32-ppc.c:7676
+#: elf32-ppc.c:8864 elf64-ppc.c:16839
+#, c-format
+msgid "%pB: %s unsupported"
+msgstr "%pB: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elf.c:11079
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žwin32pstatus %sâ€œ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %lu Ð±Ð°Ñ˜Ñ‚Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¼Ð°Ð»Ð¾"
+
+#: elf.c:11158
+#, c-format
+msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
+msgstr "%pB: â€žwin32pstatus NOTE_INFO_MODULEâ€œ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %lu Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¼Ð°Ð»Ð¾ Ð´Ð° Ð±Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ð»Ð¾ Ð½Ð°Ð·Ð¸Ð² Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %u"
+
+#: elf.c:13796
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr "â€žGNU_MBINDâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°"
+
+#: elf.c:13799
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr "Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€žSTT_GNU_IFUNCâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°"
+
+#: elf.c:13802
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr "Ñ�Ð²ÐµÐ·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€žSTB_GNU_UNIQUEâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°"
+
+#: elf.c:13805
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr "â€žGNU_RETAINâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°"
+
+#: elf.c:14023
+#, c-format
+msgid "%pB(%pA): relocation %zu has invalid symbol index %lu"
+msgstr "%pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%zuâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %lu"
+
+#: elf.c:14099
+#, c-format
+msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
+msgstr "%pB(%pA): Ð¾Ð´ÐµÑ™Ð°Ðº Ð²ÐµÐ·Ðµ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ñ‚Ð¸ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð¸Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð½ÐµÐ¼Ð° Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: elf.c:14113
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½"
+
+#: elf.c:14127
+#, c-format
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr "%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ñ‚Ð¸ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¸Ð·Ð»Ð°Ð·Ñƒ"
+
+#: elf.c:14203
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ñ˜Ðµ Ð¾Ð±Ñ€Ð°Ñ’ÐµÐ½ Ð´Ð²Ð° Ð¿ÑƒÑ‚Ð°"
+
+#: elf.c:14215
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð¸Ð¼Ð° ÑƒÐ½Ð¾Ñ�Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+
+#: elf.c:14227
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð¸Ð¼Ð° ÑƒÐ½Ð¾Ñ�Ðµ Ð½ÐµÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+
+#: elf.c:14241
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½!"
+
+#: elf.c:14264
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð¸ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ñƒ Ð·Ð° Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð°"
+
+#: elf.c:14284
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %zu is empty"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° %zu Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½"
+
+#: elf.c:14309
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a missing symbol"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÑˆÑ‚Ð°Ñ˜ %zu ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
+
+#: elf.c:14327
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a deleted symbol"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÑˆÑ‚Ð°Ñ˜ %zu ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð±Ñ€Ð¸Ñ�Ð°Ð½ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
+
+#: elf.c:14341
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu is of an unknown type"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜ %zu Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15125 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3218
+#: elf32-visium.c:844 elf64-ppc.c:5513 elfnn-aarch64.c:7552
+#, c-format
+msgid "private flags = 0x%lx:"
+msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lx:"
+
+#: elf32-arc.c:642
+#, c-format
+msgid "warning: %pB: conflicting platform configuration %s with %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ðµ â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° â€ž%sâ€œ"
+
+#: elf32-arc.c:661
+#, c-format
+msgid "error: %pB: unable to merge CPU base attributes %s with %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ð¿Ð¾Ñ˜Ð¸Ð¼ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ðµ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° â€ž%sâ€œ Ñ�Ð° â€ž%sâ€œ"
+
+#: elf32-arc.c:698
+#, c-format
+msgid "error: %pB: unable to merge ISA extension attributes %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ð¿Ð¾Ñ˜Ð¸Ð¼ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ðµ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° â€ž%sâ€œ"
+
+#: elf32-arc.c:722
+#, c-format
+msgid "error: %pB: conflicting ISA extension attributes %s with %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° â€ž%sâ€œ Ñ�Ð° â€ž%sâ€œ"
+
+#: elf32-arc.c:762
+#, c-format
+msgid "error: %pB: cannot mix rf16 with full register set %pB"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑˆÐ°Ð¼ â€žrf16â€œ Ñ�Ð° Ð¿ÑƒÐ½Ð¸Ð¼ Ñ�ÐºÑƒÐ¿Ð¾Ð¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° â€ž%pBâ€œ"
+
+#: elf32-arc.c:790
+#, c-format
+msgid "error: %pB: conflicting attributes %s: %s with %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ�ÑƒÐºÐ¾Ð± Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° â€ž%sâ€œ: â€ž%sâ€œ Ñ�Ð° â€ž%sâ€œ"
+
+#: elf32-arc.c:817
+#, c-format
+msgid "error: %pB: conflicting attributes %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ�ÑƒÐºÐ¾Ð± Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° â€ž%sâ€œ"
+
+#: elf32-arc.c:922
+#, c-format
+msgid "error: attempting to link %pB with a binary %pB of different architecture"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÐ²ÐµÐ¶ÐµÐ¼ â€ž%pBâ€œ Ñ�Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð¼ â€ž%pBâ€œ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ"
+
+#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
+#: elf32-ppc.c:3856 elf64-sparc.c:737 elfxx-mips.c:15692
+#, c-format
+msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (%#x) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (%#x)"
+
+#: elf32-arc.c:1027
+msgid "error: the ARC4 architecture is no longer supported"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€žARC4â€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð²Ð¸ÑˆÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+
+#: elf32-arc.c:1033
+msgid "warning: unset or old architecture flags; use default machine"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ð´ÐµÑˆÐµÐ½Ðµ Ð¸Ð»Ð¸ Ñ�Ñ‚Ð°Ñ€Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ñƒ Ð¼Ð°ÑˆÐ¸Ð½Ñƒ"
+
+#: elf32-arc.c:1159
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
+msgstr "%pB(%pA+%#<PRIx64>): â€žCMEMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾, â€ž16 MSBâ€œ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ â€ž%#xâ€œ (Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ñ˜Ðµ %#<PRIx64>)"
+
+#: elf32-arc.c:1170
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s+%#<PRIx64>' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
+msgstr "%pB(%pA+%#<PRIx64>): â€žCMEMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° â€ž%s+%#<PRIx64>â€œ Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾, â€ž16 MSBâ€œ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ â€ž%#xâ€œ (Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ñ˜Ðµ %#<PRIx64>)"
+
+#: elf32-arc.c:1898
+msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
+msgstr "â€žGOTâ€œ Ð¸ â€žPLTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ð¸Ñ‚Ð¸ Ñ�Ð° Ð½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ð¼ ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ÐµÐ¼"
+
+#: elf32-arc.c:1922 elf32-rx.c:1486
+#, c-format
+msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
+msgstr "%pB(%pA): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¸ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+
+#: elf32-arc.c:1927 elf32-rx.c:1491
+#, c-format
+msgid "%pB(%pA): internal error: out of range error"
+msgstr "%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+
+#: elf32-arc.c:1932 elf32-rx.c:1496
+#, c-format
+msgid "%pB(%pA): internal error: unsupported relocation error"
+msgstr "%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elf32-arc.c:1937 elf32-rx.c:1501
+#, c-format
+msgid "%pB(%pA): internal error: dangerous relocation"
+msgstr "%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elf32-arc.c:1942 elf32-rx.c:1506
+#, c-format
+msgid "%pB(%pA): internal error: unknown error"
+msgstr "%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°"
+
+#: elf32-arc.c:2036 elf32-arc.c:2104 elf32-arm.c:15580 elf32-metag.c:2251
+#: elf32-nds32.c:5543 elfnn-aarch64.c:7959 elfnn-riscv.c:720
+#, c-format
+msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+
+#: elf32-arc.c:2923
+#, c-format
+msgid "%pB: unknown mandatory ARC object attribute %d"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€ž%dâ€œ Ð¾Ð±Ð°Ð²ÐµÐ·Ð½Ð¾Ð³ â€žARCâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: elf32-arc.c:2931
+#, c-format
+msgid "warning: %pB: unknown ARC object attribute %d"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€ž%dâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€žARCâ€œ"
+
+#: elf32-arm.c:4346 elf32-arm.c:4380 elf32-arm.c:4399 elf32-arm.c:4451
+#, c-format
+msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction"
+msgstr "%pB(%pA): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð´ÑƒÐ³Ðµ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐµ Ð³Ñ€Ð°Ð½Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ðµ Ñ�Ñƒ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ â€žSHF_ARM_PURECODEâ€œ Ð¾Ð´ÐµÑ™ÐºÐ¾Ð¼ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ†Ð¸Ñ™ÐµÐ²Ðµ M-Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð° ÐºÐ¾Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÑƒÑ˜Ñƒ â€žmovwâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ"
+
+#: elf32-arm.c:4411 elf32-arm.c:4465 elf32-arm.c:9163 elf32-arm.c:9253
+#, c-format
+msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
+msgstr "%pB(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾; Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %pB: â€ž%sâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° â€ž%sâ€œ"
+
+#: elf32-arm.c:4591
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr "Ð“Ð Ð•Ð¨ÐšÐ�: â€žCMSEâ€œ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº (Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ) Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð´Ð°Ð»ÐµÐºÐ¾ (%#<PRIx64>) Ð¾Ð´ Ð¿Ð´Ñ€ÐµÐ´Ð¸ÑˆÑ‚Ð° (%#<PRIx64>)"
+
+#: elf32-arm.c:4760
+#, c-format
+msgid "no address assigned to the veneers output section %s"
+msgstr "Ð½Ð¸Ñ˜ÐµÐ´Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐµ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+
+#: elf32-arm.c:4835 elf32-arm.c:6984 elf32-csky.c:3389 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3907
+#: elf64-ppc.c:14157 elfnn-aarch64.c:3203 elfnn-kvx.c:895
+#, c-format
+msgid "%pB: cannot create stub entry %s"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ"
+
+#: elf32-arm.c:5056 elf32-csky.c:3731 elf32-hppa.c:732 elf32-hppa.c:761
+#: elf32-hppa.c:842 elf32-m68hc11.c:422 elf32-m68hc12.c:542 elf32-metag.c:3345
+#: elf32-nios2.c:2494 elf64-ppc.c:12273 elf64-ppc.c:12281 xcofflink.c:4684
+#: elfnn-aarch64.c:3275
+msgid "%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ â€ž%pAâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð±ÐµÐ· â€ž--enable-non-contiguous-regionsâ€œ.\n"
+
+#: elf32-arm.c:6027
+#, c-format
+msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
+msgstr "%pB: Ñ�Ð¿ÐµÑ†Ð¸Ñ˜Ð°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ñ�Ð°Ð¼Ð¾ Ð·Ð° â€žARMv8-Mâ€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ Ð¸Ð»Ð¸ Ð½Ð¾Ð²Ð¸Ñ˜Ñƒ"
+
+#: elf32-arm.c:6036
+#, c-format
+msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ�Ð¿ÐµÑ†Ð¸Ñ˜Ð°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ; Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¸Ð»Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð»Ð°Ð±Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ"
+
+#: elf32-arm.c:6075
+#, c-format
+msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ; Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¸Ð»Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð»Ð°Ð±Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ"
+
+#: elf32-arm.c:6081
+#, c-format
+msgid "%pB: absent standard symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+
+#: elf32-arm.c:6093
+#, c-format
+msgid "%pB: `%s' and its special symbol are in different sections"
+msgstr "%pB: â€ž%sâ€œ Ð¸ ÑšÐµÐ½ Ñ�Ð¿ÐµÑ†Ð¸Ñ˜Ð°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ñƒ Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ñ†Ð¸Ð¼Ð°"
+
+#: elf32-arm.c:6105
+#, c-format
+msgid "%pB: entry function `%s' not output"
+msgstr "%pB: Ñ„ÑƒÐ½ÐºÑ†Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ð·Ð»Ð°Ð·"
+
+#: elf32-arm.c:6112
+#, c-format
+msgid "%pB: entry function `%s' is empty"
+msgstr "%pB: Ñ„ÑƒÐ½ÐºÑ†Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð½Ð°"
+
+#: elf32-arm.c:6241
+#, c-format
+msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
+msgstr "%pB: â€ž--in-implibâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð·Ð° â€žSecure Gatewayâ€œ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ½Ð¾Ñ�Ð°"
+
+#: elf32-arm.c:6290
+#, c-format
+msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ� Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ½Ð¾Ñ�Ð°: â€ž%sâ€œ; Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸, Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¸ Ð´Ð° Ñ�Ðµ Ð¾Ð´Ð½Ð¾Ñ�Ð¸ Ð½Ð° â€žThumbâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ"
+
+#: elf32-arm.c:6312
+#, c-format
+msgid "entry function `%s' disappeared from secure code"
+msgstr "Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÑ�Ñ‚Ð°Ð»Ð° Ð¸Ð· Ð±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ð³ ÐºÐ¾Ð´Ð°"
+
+#: elf32-arm.c:6336
+#, c-format
+msgid "`%s' refers to a non entry function"
+msgstr "â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½Ðµ ÑƒÐ»Ð°Ð·Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ"
+
+#: elf32-arm.c:6351
+#, c-format
+msgid "%pB: visibility of symbol `%s' has changed"
+msgstr "%pB: Ð²Ð¸Ð´Ñ™Ð¸Ð²Ð¾Ñ�Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð°"
+
+#: elf32-arm.c:6360
+#, c-format
+msgid "%pB: incorrect size for symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+
+#: elf32-arm.c:6379
+#, c-format
+msgid "offset of veneer for entry function `%s' not a multiple of its size"
+msgstr "Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐµ Ð·Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ðº Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+
+#: elf32-arm.c:6399
+msgid "new entry function(s) introduced but no output import library specified:"
+msgstr "Ð½Ð¾Ð²Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚Ð¸Ð³Ð»Ð° Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾ ÑƒÐ»Ð°Ð·Ð½Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°:"
+
+#: elf32-arm.c:6407
+#, c-format
+msgid "start address of `%s' is different from previous link"
+msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð° â€ž%sâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ðµ Ð²ÐµÐ·Ðµ"
+
+#: elf32-arm.c:7118 elf32-arm.c:7156
+#, c-format
+msgid "unable to find %s glue '%s' for '%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€ž%sâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+
+#: elf32-arm.c:7868
+#, c-format
+msgid "%pB: BE8 images only valid in big-endian mode"
+msgstr "%pB: â€žBE8â€œ Ñ�Ð»Ð¸ÐºÐµ Ñ�Ñƒ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ðµ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸"
 
 #. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:6353
-msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ð¾ Ñ€ÐµÑˆÐµÑšÐµ â€žVFP11â€œ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ñ†Ð¸Ñ™Ð½Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
+#: elf32-arm.c:8096
+#, c-format
+msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ð¾ Ñ€ÐµÑˆÐµÑšÐµ â€žVFP11â€œ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ñ†Ð¸Ñ™Ð½Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
 
-#: elf32-arm.c:6897 elf32-arm.c:6917
-msgid "%B: unable to find VFP11 veneer `%s'"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€žVFP11â€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ â€ž%sâ€œ"
+#: elf32-arm.c:8123
+#, c-format
+msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ð¾ Ñ€ÐµÑˆÐµÑšÐµ â€žSTM32L4XXâ€œ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ñ†Ð¸Ñ™Ð½Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
 
-#: elf32-arm.c:6966
+#: elf32-arm.c:8659 elf32-arm.c:8679 elf32-arm.c:8746 elf32-arm.c:8765
 #, c-format
-msgid "Invalid TARGET2 relocation type '%s'."
-msgstr "Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žTARGET2â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ."
+msgid "%pB: unable to find %s veneer `%s'"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€ž%sâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ â€ž%sâ€œ"
 
-#. PR ld/16017: Do not generate ARM instructions for
-#. the PLT if compiling for a thumb-only target.
-#.
-#. FIXME: We ought to be able to generate thumb PLT instructions...
-#: elf32-arm.c:7696
-msgid "%B: Warning: thumb mode PLT generation not currently supported"
-msgstr "%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žPLTâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ñƒ â€žthumbâ€œ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
-
-#: elf32-arm.c:7909
-msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' in TLS trampoline"
-msgstr "%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žThumbâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ñƒ â€žTLSâ€œ Ñ‚Ñ€Ð°Ð¼Ð±ÑƒÐ»Ð¸Ð½Ð¸"
-
-#: elf32-arm.c:7948
-msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' in TLS trampoline"
-msgstr "%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žARMâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ñƒ â€žTLSâ€œ Ñ‚Ñ€Ð°Ð¼Ð±ÑƒÐ»Ð¸Ð½Ð¸"
-
-#: elf32-arm.c:8412
-msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'."
-msgstr "\\%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€žArm BLXâ€œ Ñ†Ð¸Ñ™Ð° Ð½Ð° Ð�Ñ€Ð¼ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ."
-
-#: elf32-arm.c:8831
-msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'."
-msgstr "%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žThumb BLXâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ†Ð¸Ñ™Ð° Ð½Ð° â€žthumbâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ."
-
-#: elf32-arm.c:9672
-msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' referenced by TLS_GOTDESC"
-msgstr "%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žThumbâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ð½Ð° ÐºÐ¾Ñ˜Ñƒ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žTLS_GOTDESCâ€œ"
-
-#: elf32-arm.c:9695
-msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' referenced by TLS_GOTDESC"
-msgstr "%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žARMâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ð½Ð° ÐºÐ¾Ñ˜Ñƒ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žTLS_GOTDESCâ€œ"
-
-#: elf32-arm.c:9724
-msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object"
-msgstr "%B(%A+0x%lx): â€žR_ARM_TLS_LE32â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
-
-#: elf32-arm.c:9937
-msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations"
-msgstr "%B(%A+0x%lx): Ð”Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ðµ Ñ�Ñƒ Ñ�Ð°Ð¼Ð¾ â€žADDâ€œ Ð¸Ð»Ð¸ â€žSUBâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€žALUâ€œ Ð³Ñ€ÑƒÐ¿Ðµ"
-
-#: elf32-arm.c:9977 elf32-arm.c:10065 elf32-arm.c:10149 elf32-arm.c:10235
-msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s"
-msgstr "%B(%A+0x%lx): ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð´ÐµÑ™ÐµÑšÐ° 0x%lx Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð³Ñ€ÑƒÐ¿Ðµ â€ž%sâ€œ"
-
-#: elf32-arm.c:10474 elf32-sh.c:3994 elf64-sh64.c:1544
-msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section"
-msgstr "%B(%A+0x%lx): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSEC_MERGEâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°"
-
-#: elf32-arm.c:10585 elf32-m68k.c:4155 elf32-xtensa.c:2799
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4192
-msgid "%B(%A+0x%lx): %s used with TLS symbol %s"
-msgstr "%B(%A+0x%lx): â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ"
-
-#: elf32-arm.c:10586 elf32-m68k.c:4156 elf32-xtensa.c:2800
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4193
-msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s"
-msgstr "%B(%A+0x%lx): â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žÐ½Ðµ-TLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ"
+#: elf32-arm.c:8972
+#, c-format
+msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
+msgstr "%pB(%pA+%#x): Ð³Ñ€ÐµÑˆÐºÐ°: Ð²Ð¸ÑˆÐµÑ�Ñ‚Ñ€ÑƒÐºÐ¾ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐµ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñƒ Ð½Ðµ-Ð¿Ð¾Ñ�Ð»ÐµÐ´ÑšÐ¾Ñ˜ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¸ â€žITâ€œ Ð±Ð»Ð¾ÐºÐ°: â€žSTM32L4XXâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€žgccâ€œ Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-mrestrict-itâ€œ Ð·Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ñ�Ð°Ð¼Ð¾ Ñ˜ÐµÐ´Ð½Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ Ð¿Ð¾ â€žITâ€œ Ð±Ð»Ð¾ÐºÑƒ"
+
+#: elf32-arm.c:9070
+#, c-format
+msgid "invalid TARGET2 relocation type '%s'"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žTARGET2â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ"
+
+#. FIXME: We ought to be able to generate thumb-1 PLT
+#. instructions...
+#: elf32-arm.c:9840
+#, c-format
+msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žPLTâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ñƒ â€žthumb-1â€œ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elf32-arm.c:10149 elf32-arm.c:10191
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#lxâ€œ Ñƒ â€žTLSâ€œ Ñ‚Ñ€Ð°Ð¼Ð±ÑƒÐ»Ð¸Ð½Ð¸"
+
+#: elf32-arm.c:10541
+msgid "shared object"
+msgstr "Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
+
+#: elf32-arm.c:10544
+msgid "PIE executable"
+msgstr "â€žPIEâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð°"
+
+#: elf32-arm.c:10547
+#, c-format
+msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ð¸Ð»Ð¸ Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€ž%sâ€œ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+
+#: elf32-arm.c:10649
+#, c-format
+msgid "\\%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr "\\%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%s BLXâ€œ Ñ†Ð¸Ñ™Ð° Ð½Ð° â€ž%sâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ"
+
+#: elf32-arm.c:11066
+#, c-format
+msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%s BLXâ€œ Ñ†Ð¸Ñ™Ð° Ð½Ð° â€ž%sâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ"
+
+#: elf32-arm.c:11700
+#, c-format
+msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
+msgstr "%pB: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ 0..%lu Ð°Ð»Ð¸ Ð½Ð°Ñ’Ð¾Ñ… Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu"
+
+#: elf32-arm.c:11975 elf32-arm.c:12001
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#lxâ€œ Ð½Ð° ÐºÐ¾Ñ˜Ñƒ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žTLS_GOTDESCâ€œ"
+
+#: elf32-arm.c:12047 elf32-csky.c:4959 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-nios2.c:4377
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
+msgstr "%pB(%pA+%#<PRIx64>): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
+
+#: elf32-arm.c:12261
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
+msgstr "%pB(%pA+%#<PRIx64>): Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ðµ Ñ�Ñƒ Ñ�Ð°Ð¼Ð¾ â€žADDâ€œ Ð¸Ð»Ð¸ â€žSUBâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€žALUâ€œ Ð³Ñ€ÑƒÐ¿Ðµ"
+
+#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð´ÐµÑ™ÐµÑšÐ° %#<PRIx64> Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð³Ñ€ÑƒÐ¿Ðµ â€ž%sâ€œ"
+
+#: elf32-arm.c:12630 elf32-arm.c:12789
+msgid "local symbol index too big"
+msgstr "Ð¸Ð½Ð´ÐµÐºÑ� Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº"
+
+#: elf32-arm.c:12640 elf32-arm.c:12674
+msgid "no dynamic index information available"
+msgstr "Ð½ÐµÐ¼Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¸Ð½Ð´ÐµÐºÑ�Ð°"
+
+#: elf32-arm.c:12682
+msgid "invalid dynamic index"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¸Ð½Ð´ÐµÐºÑ�"
 
-#: elf32-arm.c:10666 elf32-tic6x.c:2736
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4481
+#: elf32-arm.c:12799
+msgid "dynamic index information not available"
+msgstr "Ð¿Ð¾Ð´Ð°Ñ†Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¸Ð½Ð´ÐµÐºÑ�Ð° Ð½Ð¸Ñ�Ñƒ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸"
+
+#: elf32-arm.c:13230 elf32-sh.c:3567
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
+msgstr "%pB(%pA+%#<PRIx64>): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSEC_MERGEâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°"
+
+#: elf32-arm.c:13343 elf32-m68k.c:3966 elf32-xtensa.c:2761 elfnn-aarch64.c:7049
+#: elfnn-kvx.c:2571
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
+msgstr "%pB(%pA+%#<PRIx64>): â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ"
+
+#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2763 elfnn-aarch64.c:7051
+#: elfnn-kvx.c:2573
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
+msgstr "%pB(%pA+%#<PRIx64>): â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žÐ½Ðµ-TLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ"
+
+#: elf32-arm.c:13428 elf32-tic6x.c:2649 elfnn-aarch64.c:7386 elfnn-kvx.c:2800
 msgid "out of range"
 msgstr "Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
 
-#: elf32-arm.c:10670 elf32-nios2.c:3525 elf32-tic6x.c:2740
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4485
+#: elf32-arm.c:13432 elf32-nios2.c:4511 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7390 elfnn-kvx.c:2804
 msgid "unsupported relocation"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: elf32-arm.c:10678 elf32-nios2.c:3535 elf32-tic6x.c:2748
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4493
+#: elf32-arm.c:13440 elf32-nios2.c:4521 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7398 elfnn-kvx.c:2812
 msgid "unknown error"
 msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°"
 
-#: elf32-arm.c:11153
-msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð§Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%Bâ€œ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð½ÐµÐ¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¸ ÐºÐ¾Ð´ Ñƒ â€ž%Bâ€œ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñ�Ð° ÑšÐ¸Ð¼"
-
-#: elf32-arm.c:11240
-msgid "%B: Unknown mandatory EABI object attribute %d"
-msgstr "%B: ÐžÐ±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
-
-#: elf32-arm.c:11248
-msgid "Warning: %B: Unknown EABI object attribute %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
-
-#: elf32-arm.c:11449
-msgid "error: %B: Unknown CPU architecture"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°"
-
-#: elf32-arm.c:11487
-msgid "error: %B: Conflicting CPU architectures %d/%d"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð�Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° %d/%d Ñ�Ñƒ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ"
-
-#: elf32-arm.c:11576
-msgid "Error: %B has both the current and legacy Tag_MPextension_use attributes"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚"
-
-#: elf32-arm.c:11601
-msgid "error: %B uses VFP register arguments, %B does not"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žVFPâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%Bâ€œ Ð½Ðµ"
-
-#: elf32-arm.c:11747
-msgid "error: %B: unable to merge virtualization attributes with %B"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ð¿Ð¾Ñ˜Ð¸Ð¼ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ðµ Ð²Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ðµ Ñ�Ð° â€ž%Bâ€œ"
-
-#: elf32-arm.c:11773
-msgid "error: %B: Conflicting architecture profiles %c/%c"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð£ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%c/%câ€œ"
-
-#: elf32-arm.c:11877
-msgid "Warning: %B: Conflicting platform configuration"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: ÐŸÐ¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ðµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ"
-
-#: elf32-arm.c:11886
-msgid "error: %B: Conflicting use of R9"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð£ Ñ�Ð¸ÐºÐ¾Ð±Ñƒ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ â€žR9â€œ"
-
-#: elf32-arm.c:11898
-msgid "error: %B: SB relative addressing conflicts with use of R9"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ â€žSBâ€œ Ð°Ð´Ñ€ÐµÑ�Ð¸Ñ€Ð°ÑšÐµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žR9â€œ"
-
-#: elf32-arm.c:11911
-msgid "warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¸ â€žwchar_tâ€œ Ð¾Ð½Ð´Ð° Ñ›Ðµ Ð¸Ð·Ð»Ð°Ð· Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¸ â€žwchar_tâ€œ. ÐšÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ â€žwchar_tâ€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ ÐºÑ€Ð¾Ð· Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ ÑƒÑ�Ð¿ÐµÑ‚Ð¸"
-
-#: elf32-arm.c:11942
-msgid "warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %s Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ° Ð¾Ð½Ð´Ð° Ñ›Ðµ Ð¸Ð·Ð»Ð°Ð· Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %s Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ°. ÐšÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ° ÐºÑ€Ð¾Ð· Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ ÑƒÑ�Ð¿ÐµÑ‚Ð¸"
-
-#: elf32-arm.c:11954
-msgid "error: %B uses iWMMXt register arguments, %B does not"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žiWMMXtâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%Bâ€œ Ð½Ðµ"
-
-#: elf32-arm.c:11971
-msgid "error: fp16 format mismatch between %B and %B"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€žfp16â€œ Ð·Ð°Ð¿Ð¸Ñ� Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ñ‚Ð¸ Ð·Ð° â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ"
-
-#: elf32-arm.c:12007
-msgid "%B has has both the current and legacy Tag_MPextension_use attributes"
-msgstr "â€ž%Bâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚"
+#: elf32-arm.c:13922
+#, c-format
+msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ�Ð°Ð¼ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%pBâ€œ Ð¿Ð¾ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð²ÐµÑ› Ð½Ð°Ð²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ Ð½Ðµ-Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¾"
 
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#: elf32-arm.c:12095 elf32-bfin.c:4949 elf32-cris.c:4139 elf32-m68hc1x.c:1427
-#: elf32-m68k.c:1195 elf32-score.c:4004 elf32-score7.c:3808 elf32-vax.c:529
-#: elf32-xgate.c:674 elfxx-mips.c:14955
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4645
+#: elf32-arm.c:13926
 #, c-format
-msgid "private flags = %lx:"
-msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lx:"
+msgid "warning: clearing the interworking flag of %pB due to outside request"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐºÐ»Ð°ÑšÐ°Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%pBâ€œ ÑƒÑ�Ð»ÐµÐ´ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ñ�Ð¿Ð¾Ñ™Ð°"
+
+#: elf32-arm.c:13971
+#, c-format
+msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ‡Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%pBâ€œ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð½ÐµÐ¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¸ ÐºÐ¾Ð´ Ñƒ â€ž%pBâ€œ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñ�Ð° ÑšÐ¸Ð¼"
+
+#: elf32-arm.c:14058
+#, c-format
+msgid "%pB: unknown mandatory EABI object attribute %d"
+msgstr "%pB: Ð¾Ð±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
+
+#: elf32-arm.c:14066
+#, c-format
+msgid "warning: %pB: unknown EABI object attribute %d"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
+
+#: elf32-arm.c:14401
+#, c-format
+msgid "error: %pB: unknown CPU architecture"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°"
+
+#: elf32-arm.c:14439
+#, c-format
+msgid "error: conflicting CPU architectures %s vs %s in %pB"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÑƒÐºÐ¾Ð±Ñ™ÐµÐ½Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° â€ž%sâ€œ Ð¸ â€ž%sâ€œ Ñƒ â€ž%pBâ€œ"
+
+#: elf32-arm.c:14536
+#, c-format
+msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr "Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚"
+
+#: elf32-arm.c:14573
+#, c-format
+msgid "error: %pB uses VFP register arguments, %pB does not"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žVFPâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%pBâ€œ Ð½Ðµ"
+
+#: elf32-arm.c:14743
+#, c-format
+msgid "error: %pB: unable to merge virtualization attributes with %pB"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ð¿Ð¾Ñ˜Ð¸Ð¼ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ðµ Ð²Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ðµ Ñ�Ð° â€ž%pBâ€œ"
 
-#: elf32-arm.c:12104
+#: elf32-arm.c:14769
+#, c-format
+msgid "error: %pB: conflicting architecture profiles %c/%c"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð£ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%c/%câ€œ"
+
+#: elf32-arm.c:14908
+#, c-format
+msgid "warning: %pB: conflicting platform configuration"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ðµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ"
+
+#: elf32-arm.c:14917
+#, c-format
+msgid "error: %pB: conflicting use of R9"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ â€žR9â€œ"
+
+#: elf32-arm.c:14929
+#, c-format
+msgid "error: %pB: SB relative addressing conflicts with use of R9"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ â€žSBâ€œ Ð°Ð´Ñ€ÐµÑ�Ð¸Ñ€Ð°ÑšÐµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žR9â€œ"
+
+#: elf32-arm.c:14942
+#, c-format
+msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¸ â€žwchar_tâ€œ Ð¾Ð½Ð´Ð° Ñ›Ðµ Ð¸Ð·Ð»Ð°Ð· Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¸ â€žwchar_tâ€œ; ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ â€žwchar_tâ€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ ÐºÑ€Ð¾Ð· Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ ÑƒÑ�Ð¿ÐµÑ‚Ð¸"
+
+#: elf32-arm.c:14973
+#, c-format
+msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %s Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ° Ð¾Ð½Ð´Ð° Ñ›Ðµ Ð¸Ð·Ð»Ð°Ð· Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %s Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ°; ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð½Ð°Ð±Ñ€Ð°Ñ˜Ð°ÑšÐ° ÐºÑ€Ð¾Ð· Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ ÑƒÑ�Ð¿ÐµÑ‚Ð¸"
+
+#: elf32-arm.c:14985
+#, c-format
+msgid "error: %pB uses iWMMXt register arguments, %pB does not"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žiWMMXtâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%pBâ€œ Ð½Ðµ"
+
+#: elf32-arm.c:15002
+#, c-format
+msgid "error: fp16 format mismatch between %pB and %pB"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€žfp16â€œ Ð·Ð°Ð¿Ð¸Ñ� Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ñ‚Ð¸ Ð·Ð° â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ"
+
+#: elf32-arm.c:15038
+#, c-format
+msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr "â€ž%pBâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚"
+
+#: elf32-arm.c:15134
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾]"
 
-#: elf32-arm.c:12112
+#: elf32-arm.c:15142
 #, c-format
 msgid " [VFP float format]"
 msgstr " [â€žVFPâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°]"
 
-#: elf32-arm.c:12114
+#: elf32-arm.c:15144
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [â€žMaverickâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°]"
 
-#: elf32-arm.c:12116
+#: elf32-arm.c:15146
 #, c-format
 msgid " [FPA float format]"
 msgstr " [â€žFPAâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°]"
 
-#: elf32-arm.c:12125
+#: elf32-arm.c:15149
+#, c-format
+msgid " [floats passed in float registers]"
+msgstr " [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸]"
+
+#: elf32-arm.c:15152 elf32-arm.c:15238
+#, c-format
+msgid " [position independent]"
+msgstr " [Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°]"
+
+#: elf32-arm.c:15155
 #, c-format
 msgid " [new ABI]"
 msgstr " [Ð½Ð¾Ð²Ð¸ â€žABIâ€œ]"
 
-#: elf32-arm.c:12128
+#: elf32-arm.c:15158
 #, c-format
 msgid " [old ABI]"
 msgstr " [Ñ�Ñ‚Ð°Ñ€Ð¸ â€žABIâ€œ]"
 
-#: elf32-arm.c:12131
+#: elf32-arm.c:15161
 #, c-format
 msgid " [software FP]"
 msgstr " [Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·]"
 
-#: elf32-arm.c:12140
+#: elf32-arm.c:15170
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ1 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12143 elf32-arm.c:12154
+#: elf32-arm.c:15173 elf32-arm.c:15184
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ñ€ÐµÑ’ÐµÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°]"
 
-#: elf32-arm.c:12145 elf32-arm.c:12156
+#: elf32-arm.c:15175 elf32-arm.c:15186
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [Ñ‚Ð°Ð±ÐµÐ»Ð° Ð½ÐµÑ�Ñ€ÐµÑ’ÐµÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°]"
 
-#: elf32-arm.c:12151
+#: elf32-arm.c:15181
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ2 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12159
+#: elf32-arm.c:15189
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°]"
 
-#: elf32-arm.c:12162
+#: elf32-arm.c:15192
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [Ð¼Ð°Ð¿Ð¸Ñ€Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð¸ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð°]"
 
-#: elf32-arm.c:12169
+#: elf32-arm.c:15199
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ3 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12173
+#: elf32-arm.c:15203
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ4 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12177
+#: elf32-arm.c:15207
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ5 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12180
+#: elf32-arm.c:15210
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [â€žABIâ€œ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¾Ð³ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°]"
 
-#: elf32-arm.c:12183
+#: elf32-arm.c:15213
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [â€žABIâ€œ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¾Ð³ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°]"
 
-#: elf32-arm.c:12189
+#: elf32-arm.c:15219
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:12192
+#: elf32-arm.c:15222
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:12198
+#: elf32-arm.c:15228
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ>"
 
-#: elf32-arm.c:12205
+#: elf32-arm.c:15235
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð°]"
 
-#: elf32-arm.c:12208
+#: elf32-arm.c:15241
 #, c-format
-msgid " [has entry point]"
-msgstr " [Ð¸Ð¼Ð° Ñ‚Ð°Ñ‡ÐºÑƒ ÑƒÐ»Ð°Ð·Ð°]"
+msgid " [FDPIC ABI supplement]"
+msgstr " [â€žFDPIC ABIâ€œ Ð´Ð¾Ð´Ð°Ñ‚Ð°Ðº]"
 
-#: elf32-arm.c:12213 /src/binutils-gdb/bfd/elfnn-aarch64.c:4648
+#: elf32-arm.c:15246 elfnn-aarch64.c:7555
 #, c-format
-msgid "<Unrecognised flag bits set>"
-msgstr "<Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ñ�ÐºÑƒÐ¿ Ð±Ð¸Ñ‚Ð¾Ð²Ð° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ>"
+msgid " <Unrecognised flag bits set>"
+msgstr " <Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ñ�ÐºÑƒÐ¿ Ð±Ð¸Ñ‚Ð¾Ð²Ð° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ>"
 
-#: elf32-arm.c:12522 elf32-i386.c:1452 elf32-s390.c:1005 elf32-tic6x.c:2812
-#: elf32-tilepro.c:1511 elf32-xtensa.c:999 elf64-s390.c:927
-#: elf64-x86-64.c:1467 elfxx-sparc.c:1415 elfxx-tilegx.c:1728
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:5038
-msgid "%B: bad symbol index: %d"
-msgstr "%B: Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %d"
+#: elf32-arm.c:15363 elf32-arm.c:15497 elf32-i386.c:1535 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1090 elf64-s390.c:845
+#: elf64-x86-64.c:2050 elfxx-sparc.c:1386 elfxx-tilegx.c:1662 elfxx-x86.c:970
+#: elfnn-aarch64.c:7826 elfnn-kvx.c:3250 elfnn-loongarch.c:756
+#: elfnn-riscv.c:764
+#, c-format
+msgid "%pB: bad symbol index: %d"
+msgstr "%pB: Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %d"
 
-#: elf32-arm.c:12674 elf32-metag.c:2283 elf64-x86-64.c:1593
-#: elf64-x86-64.c:1771 elfxx-mips.c:8482
-msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+#: elf32-arm.c:15753
+#, c-format
+msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
+msgstr "â€žFDPICâ€œ Ñ˜Ð¾Ñˆ ÑƒÐ²ÐµÐº Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð´Ð° Ð±Ð¸ Ð¿Ð¾Ñ�Ñ‚Ð°Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð·Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ"
 
-#: elf32-arm.c:13796
+#: elf32-arm.c:17027
 #, c-format
-msgid "Errors encountered processing file %s"
-msgstr "Ð�Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐµ Ñ‚Ð¾ÐºÐ¾Ð¼ Ð¾Ð±Ñ€Ð°Ð´Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ"
+msgid "errors encountered processing file %pB"
+msgstr "Ð½Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐµ Ñ‚Ð¾ÐºÐ¾Ð¼ Ð¾Ð±Ñ€Ð°Ð´Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%pBâ€œ"
 
-#: elf32-arm.c:14230
+#: elf32-arm.c:17400 elflink.c:13325 elflink.c:13372
 #, c-format
-msgid "error: required section '%s' not found in the linker script"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°"
+msgid "could not find section %s"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#: elf32-arm.c:15252
-msgid "%B: error: Cortex-A8 erratum stub is allocated in unsafe location"
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: ÐžÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½ Ð½ÐµÐ±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ñ˜ Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñ˜Ð¸"
+#: elf32-arm.c:18355
+#, c-format
+msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
+msgstr "%pB: Ð‘Ñ€Ð¾Ñ˜ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ ÑƒÐ»Ð°Ð·Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ Ñ�Ðµ Ð¿Ð¾Ð²ÐµÑ›Ð°Ð¾ Ñ�Ð° %lu Ð½Ð° %u\n"
+
+#: elf32-arm.c:18619
+#, c-format
+msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½ Ð½ÐµÐ±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ñ˜ Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñ˜Ð¸"
 
 #. There's not much we can do apart from complain if this
 #. happens.
-#: elf32-arm.c:15279
-msgid "%B: error: Cortex-A8 erratum stub out of range (input file too large)"
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: ÐžÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)"
-
-#: elf32-arm.c:15373 elf32-arm.c:15395
-msgid "%B: error: VFP11 veneer out of range"
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: â€žVFP11â€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
-
-#: elf32-arm.c:16020
-msgid "error: %B is already in final BE8 format"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð²ÐµÑ› Ñƒ Ð·Ð°Ð²Ñ€ÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ â€žBE8â€œ"
-
-#: elf32-arm.c:16096
-msgid "error: Source object %B has EABI version %d, but target %B has EABI version %d"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð²Ð¾Ñ€Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ â€ž%Bâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d, Ð°Ð»Ð¸ Ñ†Ð¸Ñ™Ð½Ð¸ â€ž%Bâ€œ Ð¸Ð¼Ð° â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d"
-
-#: elf32-arm.c:16112
-msgid "error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žAPCS-%dâ€œ, Ð´Ð¾Ðº Ñ†Ð¸Ñ™Ð½Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žAPCS-%dâ€œ"
-
-#: elf32-arm.c:16137
-msgid "error: %B uses VFP instructions, whereas %B does not"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žVFPâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð½Ðµ"
-
-#: elf32-arm.c:16141
-msgid "error: %B uses FPA instructions, whereas %B does not"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žFPAâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð½Ðµ"
-
-#: elf32-arm.c:16151
-msgid "error: %B uses Maverick instructions, whereas %B does not"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žMaverickâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð½Ðµ"
-
-#: elf32-arm.c:16155
-msgid "error: %B does not use Maverick instructions, whereas %B does"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð½Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žMaverickâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð´Ð°"
-
-#: elf32-arm.c:16174
-msgid "error: %B uses software FP, whereas %B uses hardware FP"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸"
-
-#: elf32-arm.c:16178
-msgid "error: %B uses hardware FP, whereas %B uses software FP"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸"
-
-#: elf32-avr.c:1264 elf32-bfin.c:3228 elf32-cris.c:2024 elf32-epiphany.c:568
-#: elf32-fr30.c:597 elf32-frv.c:4047 elf32-i860.c:1220 elf32-ip2k.c:1479
-#: elf32-iq2000.c:696 elf32-m32c.c:561 elf32-mep.c:543 elf32-metag.c:2000
-#: elf32-moxie.c:290 elf32-msp430.c:1325 elf32-mt.c:399 elf32-openrisc.c:412
-#: elf32-tilepro.c:3674 elf32-v850.c:2289 elf32-xstormy16.c:944
-#: elf64-mmix.c:1546 elfxx-tilegx.c:4059
-msgid "internal error: dangerous relocation"
-msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: elf32-arm.c:18646
+#, c-format
+msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)"
+
+#: elf32-arm.c:19473 elf32-arm.c:19495
+#, c-format
+msgid "%pB: error: VFP11 veneer out of range"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žVFP11â€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+
+#: elf32-arm.c:19546
+#, c-format
+msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
+msgstr "%pB(%#<PRIx64>): Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žSTM32L4XXâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ; Ð¸Ñ�ÐºÐ¾Ñ‡Ð¸Ñ… Ð¸Ð· Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° %<PRId64> Ð±Ð°Ñ˜Ñ‚Ð°; Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ Ð³Ñ€Ð°Ð½Ðµ"
+
+#: elf32-arm.c:19585
+#, c-format
+msgid "%pB: error: cannot create STM32L4XX veneer"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žSTM32L4XXâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ"
+
+#: elf32-arm.c:20668
+#, c-format
+msgid "error: %pB is already in final BE8 format"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ñ˜Ðµ Ð²ÐµÑ› Ñƒ Ð·Ð°Ð²Ñ€ÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ â€žBE8â€œ"
+
+#: elf32-arm.c:20745
+#, c-format
+msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð¾Ñ€Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ â€ž%pBâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d, Ð°Ð»Ð¸ Ñ†Ð¸Ñ™Ð½Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð° â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d"
+
+#: elf32-arm.c:20760
+#, c-format
+msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žAPCS-%dâ€œ, Ð´Ð¾Ðº Ñ†Ð¸Ñ™Ð½Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žAPCS-%dâ€œ"
+
+#: elf32-arm.c:20770
+#, c-format
+msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸"
+
+#: elf32-arm.c:20774
+#, c-format
+msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸"
+
+#: elf32-arm.c:20784 elf32-arm.c:20788 elf32-arm.c:20798
+#, c-format
+msgid "error: %pB uses %s instructions, whereas %pB does not"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%pBâ€œ Ð½Ðµ"
+
+#: elf32-arm.c:20802
+#, c-format
+msgid "error: %pB does not use %s instructions, whereas %pB does"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð½Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%pBâ€œ Ð´Ð°"
+
+#: elf32-arm.c:20821
+#, c-format
+msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸"
+
+#: elf32-arm.c:20825
+#, c-format
+msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸"
+
+#: elf32-arm.c:20839
+#, c-format
+msgid "warning: %pB supports interworking, whereas %pB does not"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%pBâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°"
+
+#: elf32-arm.c:20845
+#, c-format
+msgid "warning: %pB does not support interworking, whereas %pB does"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°"
 
-#: elf32-avr.c:2476 elf32-hppa.c:578 elf32-m68hc1x.c:160 elf32-metag.c:1197
-#: elf32-nios2.c:1357
-msgid "%B: cannot create stub entry %s"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ"
+#: elf32-avr.c:1508
+msgid "%X%H: %s against `%s': error: relocation applies outside section\n"
+msgstr "%X%H: %s Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÑƒÑ˜Ðµ Ð²Ð°Ð½ Ð¾Ð´ÐµÑ™ÐºÐ°\n"
 
-#: elf32-bfin.c:107 elf32-bfin.c:363
+#: elf32-avr.c:1516
+msgid "%X%H: %s against `%s': error: relocation target address is odd\n"
+msgstr "%X%H: %s Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ°: Ð°Ð´Ñ€ÐµÑ�Ð° Ð¼ÐµÑ‚Ðµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð°\n"
+
+#: elf32-avr.c:1524
+msgid "%X%H: %s against `%s': internal error: unexpected relocation result %d\n"
+msgstr "%X%H: %s Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %d\n"
+
+#: elf32-avr.c:3340 elfnn-aarch64.c:3234
+#, c-format
+msgid "cannot create stub entry %s"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ"
+
+#: elf32-bfin.c:107 elf32-bfin.c:364
 msgid "relocation should be even number"
 msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ñ€ÐµÐ±Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ð°Ñ€Ð°Ð½ Ð±Ñ€Ð¾Ñ˜"
 
-#: elf32-bfin.c:1601
-msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'"
-msgstr "%B(%A+0x%lx): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
-
-#: elf32-bfin.c:1634 elf32-i386.c:4406 elf32-m68k.c:4197 elf32-s390.c:3364
-#: elf64-s390.c:3290 elf64-x86-64.c:4506
-msgid "%B(%A+0x%lx): reloc against `%s': error %d"
-msgstr "%B(%A+0x%lx): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d"
-
-#: elf32-bfin.c:2732
-msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° â€ž%A+0x%xâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
+#: elf32-bfin.c:1589
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-bfin.c:1621 elf32-i386.c:3534 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3118 elf64-x86-64.c:4424
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d"
+
+#: elf32-bfin.c:2647
+#, c-format
+msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° â€ž%pA+%#<PRIx64>â€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
 
-#: elf32-bfin.c:2748
+#: elf32-bfin.c:2664
 msgid "relocation references symbol not defined in the module"
 msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñƒ"
 
-#: elf32-bfin.c:2845
+#: elf32-bfin.c:2762
 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
 msgstr "â€žR_BFIN_FUNCDESCâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
 
-#: elf32-bfin.c:2886 elf32-bfin.c:3009
+#: elf32-bfin.c:2802 elf32-bfin.c:2923
 msgid "cannot emit fixups in read-only section"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ"
 
-#: elf32-bfin.c:2917 elf32-bfin.c:3047 elf32-lm32.c:1095 elf32-sh.c:4913
+#: elf32-bfin.c:2832 elf32-bfin.c:2960 elf32-lm32.c:1007 elf32-sh.c:4385
 msgid "cannot emit dynamic relocations in read-only section"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ"
 
-#: elf32-bfin.c:2967
+#: elf32-bfin.c:2882
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr "â€žR_BFIN_FUNCDESC_VALUEâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
 
-#: elf32-bfin.c:3132
+#: elf32-bfin.c:3045
 msgid "relocations between different segments are not supported"
 msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ñ… Ñ�ÐµÐ³Ð¼ÐµÐ½Ð°Ñ‚Ð° Ð½Ð¸Ñ�Ñƒ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
 
-#: elf32-bfin.c:3133
+#: elf32-bfin.c:3046
 msgid "warning: relocation references a different segment"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚"
 
-#: elf32-bfin.c:4907
-msgid "%B: unsupported relocation type %i"
-msgstr "%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%iâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+#: elf32-bfin.c:3141 elf32-cris.c:2042 elf32-epiphany.c:574 elf32-fr30.c:602
+#: elf32-frv.c:4057 elf32-ft32.c:500 elf32-ip2k.c:1489 elf32-iq2000.c:699
+#: elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992 elf32-moxie.c:296
+#: elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1905 elf32-tilepro.c:3380
+#: elf32-v850.c:2302 elf32-visium.c:688 elf32-xstormy16.c:938 elf64-bpf.c:348
+#: elf64-mmix.c:1549 elfxx-tilegx.c:3750
+msgid "internal error: dangerous relocation"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-bfin.c:4728 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16378
+#, c-format
+msgid "private flags = %lx:"
+msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lx:"
 
-#: elf32-bfin.c:4995 elf32-frv.c:6600
+#: elf32-bfin.c:4779 elf32-frv.c:6585
 #, c-format
-msgid "%s: cannot link non-fdpic object file into fdpic executable"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ð½Ðµ-â€žfdpicâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ â€žfdpicâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ñƒ"
+msgid "%pB: cannot link non-fdpic object file into fdpic executable"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ð½Ðµ-â€žfdpicâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ â€žfdpicâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ñƒ"
 
-#: elf32-bfin.c:4999 elf32-frv.c:6604
+#: elf32-bfin.c:4783 elf32-frv.c:6589
 #, c-format
-msgid "%s: cannot link fdpic object file into non-fdpic executable"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ â€žfdpicâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ Ð½Ðµ-â€žfdpicâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ñƒ"
+msgid "%pB: cannot link fdpic object file into non-fdpic executable"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ â€žfdpicâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ Ð½Ðµ-â€žfdpicâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ñƒ"
 
-#: elf32-bfin.c:5153
+#: elf32-bfin.c:4920
 #, c-format
 msgid "*** check this relocation %s"
 msgstr "*** Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð°Ð²Ð° Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
 
-#: elf32-cris.c:1110
-msgid "%B, section %A: unresolvable relocation %s against symbol `%s'"
-msgstr "â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
-
-#: elf32-cris.c:1172
-msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'"
-msgstr "â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð�ÐµÐ¼Ð° Ð½Ð¸ â€žPLTâ€œ Ð½Ð¸ â€žGOTâ€œ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
-
-#: elf32-cris.c:1174
-msgid "%B, section %A: No PLT for relocation %s against symbol `%s'"
-msgstr "â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð�ÐµÐ¼Ð° â€žPLTâ€œ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf32-bfin.c:5035
+msgid "the bfin target does not currently support the generation of copy relocations"
+msgstr "â€žbfinâ€œ Ñ†Ð¸Ñ™ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ð²Ð°ÑšÐ°"
 
-#: elf32-cris.c:1180 elf32-cris.c:1313 elf32-cris.c:1573 elf32-cris.c:1656
-#: elf32-cris.c:1809 elf32-tic6x.c:2645
+#: elf32-bfin.c:5329 elf32-cr16.c:2720 elf32-m68k.c:4420
+msgid "unsupported relocation type"
+msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#: elf32-cris.c:1120
+#, c-format
+msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-cris.c:1185
+#, c-format
+msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð½ÐµÐ¼Ð° Ð½Ð¸ â€žPLTâ€œ Ð½Ð¸ â€žGOTâ€œ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-cris.c:1188
+#, c-format
+msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð½ÐµÐ¼Ð° â€žPLTâ€œ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-cris.c:1194 elf32-cris.c:1327 elf32-cris.c:1592 elf32-cris.c:1675
+#: elf32-cris.c:1828 elf32-tic6x.c:2560
 msgid "[whose name is lost]"
 msgstr "[Ñ‡Ð¸Ñ˜Ð¸ Ð½Ð°Ð·Ð¸Ð² Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ñ™ÐµÐ½]"
 
-#: elf32-cris.c:1299 elf32-tic6x.c:2630
-msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol"
-msgstr "â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ %d Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
-
-#: elf32-cris.c:1307 elf32-cris.c:1650 elf32-cris.c:1803 elf32-tic6x.c:2638
-msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'"
-msgstr "â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ %d Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
-
-#: elf32-cris.c:1333
-msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'"
-msgstr "â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: â€ž%sâ€œ"
-
-#: elf32-cris.c:1349
-msgid "%B, section %A: relocation %s with no GOT created"
-msgstr "â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð±ÐµÐ· Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð³ â€žGOTâ€œ"
+#: elf32-cris.c:1312 elf32-tic6x.c:2544
+#, c-format
+msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against local symbol"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ %<PRId64> Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: elf32-cris.c:1321 elf32-cris.c:1669 elf32-cris.c:1822 elf32-tic6x.c:2553
+#, c-format
+msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against symbol `%s'"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ %<PRId64> Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-cris.c:1348
+#, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: â€ž%sâ€œ"
+
+#: elf32-cris.c:1365
+#, c-format
+msgid "%pB, section %pA: relocation %s with no GOT created"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð±ÐµÐ· Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð³ â€žGOTâ€œ"
 
 #. We shouldn't get here for GCC-emitted code.
-#: elf32-cris.c:1564
-msgid "%B, section %A: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
-msgstr "â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ ÑƒÐ¿ÑƒÑ‚Ñƒ ÐºÐ° â€ž%sâ€œ, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?"
-
-#: elf32-cris.c:1937
-msgid "%B, section %A: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
-msgstr "â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ, ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð¸Ð·Ð²Ð°Ð½ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?"
+#: elf32-cris.c:1582
+#, c-format
+msgid "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ ÑƒÐ¿ÑƒÑ‚Ñƒ ÐºÐ° â€ž%sâ€œ, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?"
 
-#: elf32-cris.c:1990
+#: elf32-cris.c:1585
+#, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ, ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð¸Ð·Ð²Ð°Ð½ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?"
+
+#: elf32-cris.c:1956
+#, c-format
+msgid "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ, ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð¸Ð·Ð²Ð°Ð½ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°, Ð¼Ð¾Ð¶Ð´Ð° Ñ˜Ðµ Ð´Ð¾ÑˆÐ»Ð¾ Ð´Ð¾ Ð¼ÐµÑˆÐ°ÑšÐ° Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ?"
+
+#: elf32-cris.c:2009
 msgid "(too many global variables for -fpic: recompile with -fPIC)"
 msgstr "(Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð¿ÑˆÑ‚Ð¸Ñ… Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð¸Ñ… Ð·Ð° â€ž-fpicâ€œ: Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ)"
 
-#: elf32-cris.c:1997
+#: elf32-cris.c:2016
 msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)"
 msgstr "(Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸ Ð½Ð¸Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¸ Ð·Ð° â€ž-fpicâ€œ Ð¸Ð»Ð¸ â€ž-msmall-tlsâ€œ: Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ Ð¸Ð»Ð¸ â€ž-mno-small-tlsâ€œ)"
 
-#: elf32-cris.c:3234
-msgid ""
-"%B, section %A:\n"
-"  v10/v32 compatible object %s must not contain a PIC relocation"
-msgstr ""
-"â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ:\n"
-"  v10/v32 Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ â€ž%sâ€œ Ð½Ðµ Ñ�Ð¼Ðµ Ð´Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: elf32-cris.c:3051
+#, c-format
+msgid "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: v10/v32 Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð½Ðµ Ñ�Ð¼Ðµ Ð´Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: elf32-cris.c:3342
+#: elf32-cris.c:3105
+#, c-format
 msgid ""
-"%B, section %A:\n"
+"%pB, section %pA:\n"
 "  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC"
 msgstr ""
-"â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ:\n"
+"â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ:\n"
 "  Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ñ‚Ð¸Ð¿Ð¸Ñ‡Ð½Ð¾ Ð¼ÐµÑˆÐ°ÑšÐµ Ð¾Ð¿Ñ†Ð¸Ñ˜Ð°, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
 
-#: elf32-cris.c:3556
-msgid ""
-"%B, section %A:\n"
-"  relocation %s should not be used in a shared object; recompile with -fPIC"
-msgstr ""
-"â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ:\n"
-"  Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ðµ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+#: elf32-cris.c:3323
+#, c-format
+msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ðµ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
 
-#: elf32-cris.c:3978
-msgid ""
-"%B, section `%A', to symbol `%s':\n"
-"  relocation %s should not be used in a shared object; recompile with -fPIC"
-msgstr ""
-"â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ, ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ:\n"
-"  Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ðµ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+#: elf32-cris.c:3701
+#, c-format
+msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr "â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ, ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ðµ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
 
-#: elf32-cris.c:4091
-msgid "Unexpected machine number"
-msgstr "Ð�ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð¼Ð°ÑˆÐ¸Ð½Ñ�ÐºÐ¸ Ð±Ñ€Ð¾Ñ˜"
+#: elf32-cris.c:3813
+msgid "unexpected machine number"
+msgstr "Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð¼Ð°ÑˆÐ¸Ð½Ðµ"
 
-#: elf32-cris.c:4142
+#: elf32-cris.c:3865
 #, c-format
 msgid " [symbols have a _ prefix]"
 msgstr " [Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ðµ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ðµ â€ž _ â€œ]"
 
-#: elf32-cris.c:4145
+#: elf32-cris.c:3868
 #, c-format
 msgid " [v10 and v32]"
 msgstr " [v10 Ð¸ v32]"
 
-#: elf32-cris.c:4148
+#: elf32-cris.c:3871
 #, c-format
 msgid " [v32]"
 msgstr " [v32]"
 
-#: elf32-cris.c:4191
-msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols"
-msgstr "%B: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ â€ž_â€œ, Ð°Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸Ð¼Ð° Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð°"
-
-#: elf32-cris.c:4192
-msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols"
-msgstr "%B: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð°, Ð°Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸Ð¼Ð° Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ â€ž_â€œ"
-
-#: elf32-cris.c:4211
-msgid "%B contains CRIS v32 code, incompatible with previous objects"
-msgstr "â€ž%Bâ€ž Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žCRIS v32â€œ ÐºÐ¾Ð´ ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
-
-#: elf32-cris.c:4213
-msgid "%B contains non-CRIS-v32 code, incompatible with previous objects"
-msgstr "â€ž%Bâ€ž Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-â€žCRIS-v32â€œ ÐºÐ¾Ð´ ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
+#: elf32-cris.c:3915
+#, c-format
+msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ â€ž_â€œ, Ð°Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸Ð¼Ð° Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð°"
+
+#: elf32-cris.c:3916
+#, c-format
+msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð°, Ð°Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸Ð¼Ð° Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ â€ž_â€œ"
+
+#: elf32-cris.c:3935
+#, c-format
+msgid "%pB contains CRIS v32 code, incompatible with previous objects"
+msgstr "â€ž%pBâ€ž Ñ�Ð°Ð´Ñ€Ð¶Ð¸ â€žCRIS v32â€œ ÐºÐ¾Ð´ ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
+
+#: elf32-cris.c:3937
+#, c-format
+msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
+msgstr "â€ž%pBâ€ž Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-â€žCRIS-v32â€œ ÐºÐ¾Ð´ ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð°Ð½ Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
+
+#: elf32-csky.c:2018
+msgid "GOT table size out of range"
+msgstr "Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žGOTâ€œ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+
+#: elf32-csky.c:2830
+#, c-format
+msgid "warning: unrecognized arch eflag '%#lx'"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žeâ€œ-Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%#lxâ€œ"
+
+#: elf32-csky.c:2853
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð½Ð°Ð·Ð¸Ð² Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%#xâ€œ"
+
+#: elf32-csky.c:2918 elf32-csky.c:3078
+#, c-format
+msgid "%pB: machine flag conflict with target"
+msgstr "%pB: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ñ†Ð¸Ñ™ÐµÐ¼"
+
+#: elf32-csky.c:2931
+#, c-format
+msgid "warning: file %pB's arch flag %s conflict with target %s,set target arch flag to %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€œ%pBâ€œ-Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ñ†Ð¸Ñ™Ð½Ð¸Ð¼ â€ž%sâ€œ, Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ Ð¼ÐµÑ‚Ðµ Ð½Ð° â€ž%sâ€œ"
+
+#: elf32-csky.c:2960
+#, c-format
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr "Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° â€žVDSPâ€œ Ð¸Ð·Ð´Ð°ÑšÐ°"
+
+#: elf32-csky.c:2977
+#, c-format
+msgid "Error: %pB and %pB has different DSP version"
+msgstr "Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° â€žDSPâ€œ Ð¸Ð·Ð´Ð°ÑšÐ°"
+
+#: elf32-csky.c:2995
+#, c-format
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr "Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ðµ â€žFPU ABIâ€œ"
+
+#: elf32-csky.c:3092
+#, c-format
+msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€œ%pBâ€œ-Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ñ†Ð¸Ñ™Ð½Ð¸Ð¼ â€žck%sâ€œ, ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ â€ž%sâ€œ"
+
+#. The r_type is error, not support it.
+#: elf32-csky.c:4331 elf32-i386.c:344
+#, c-format
+msgid "%pB: unsupported relocation type: %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %#x"
 
-#: elf32-dlx.c:142
+#: elf32-dlx.c:141
 #, c-format
-msgid "BFD Link Error: branch (PC rel16) to section (%s) not supported"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ð‘Ð¤Ð” Ð²ÐµÐ·Ðµ: Ð³Ñ€Ð°Ð½Ð°ÑšÐµ (PC rel16) Ñƒ Ð¾Ð´ÐµÑ™Ð°Ðº (%s) Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+msgid "branch (PC rel16) to section (%s) not supported"
+msgstr "Ð³Ñ€Ð°Ð½Ð°ÑšÐµ (PC rel16) Ñƒ Ð¾Ð´ÐµÑ™Ð°Ðº (%s) Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
 
 #: elf32-dlx.c:204
 #, c-format
-msgid "BFD Link Error: jump (PC rel26) to section (%s) not supported"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ð‘Ð¤Ð” Ð²ÐµÐ·Ðµ: ÑƒÑ�ÐºÐ°ÐºÐ°ÑšÐµ (PC rel26) Ñƒ Ð¾Ð´ÐµÑ™Ð°Ðº (%s) Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+msgid "jump (PC rel26) to section (%s) not supported"
+msgstr "ÑƒÑ�ÐºÐ°ÐºÐ°ÑšÐµ (PC rel26) Ñƒ Ð¾Ð´ÐµÑ™Ð°Ðº (%s) Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
 
 #. Only if it's not an unresolved symbol.
-#: elf32-epiphany.c:564 elf32-ip2k.c:1475
+#: elf32-epiphany.c:570 elf32-ip2k.c:1485
 msgid "unsupported relocation between data/insn address spaces"
 msgstr "Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ñ€Ð°Ð·Ð¼Ð°ÐºÐ° Ð°Ð´Ñ€ÐµÑ�Ðµ â€ždata/insnâ€œ"
 
-#: elf32-frv.c:1460 elf32-frv.c:1609
+#: elf32-frv.c:1453 elf32-frv.c:1604
 msgid "relocation requires zero addend"
 msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº"
 
-#: elf32-frv.c:2822
+#: elf32-frv.c:2833
+#, c-format
 msgid "%H: relocation to `%s+%v' may have caused the error above\n"
 msgstr "%H: â€žÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%s+%vâ€œ Ñ˜Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð¿Ñ€Ð¾ÑƒÐ·Ñ€Ð¾ÐºÐ¾Ð²Ð°Ð»Ð¾ Ð³Ð¾Ñ€ÑšÑƒ Ð³Ñ€ÐµÑˆÐºÑƒ\n"
 
-#: elf32-frv.c:2839
+#: elf32-frv.c:2850
 msgid "%H: relocation references symbol not defined in the module\n"
 msgstr "%H: â€žÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñƒ\n"
 
-#: elf32-frv.c:2915
+#: elf32-frv.c:2926
 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
 msgstr "%H: â€žR_FRV_GETTLSOFFâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ Ð¿Ð¾Ð·Ð¸Ð²Ð°\n"
 
-#: elf32-frv.c:2956
+#: elf32-frv.c:2967
 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
 msgstr "%H: â€žR_FRV_GOTTLSDESC12â€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žlddiâ€œ\n"
 
-#: elf32-frv.c:3027
+#: elf32-frv.c:3038
 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
 msgstr "%H: â€žR_FRV_GOTTLSDESCHIâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žsethiâ€œ\n"
 
-#: elf32-frv.c:3064
+#: elf32-frv.c:3075
 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: â€žR_FRV_GOTTLSDESCLOâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žsetloâ€œ Ð¸Ð»Ð¸ â€žsetlosâ€œ\n"
 
-#: elf32-frv.c:3111
+#: elf32-frv.c:3122
 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
 msgstr "%H: â€žR_FRV_TLSDESC_RELAXâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žlddâ€œ\n"
 
-#: elf32-frv.c:3195
+#: elf32-frv.c:3206
 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
 msgstr "%H: â€žR_FRV_GETTLSOFF_RELAXâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žcalllâ€œ\n"
 
-#: elf32-frv.c:3249
+#: elf32-frv.c:3260
 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
 msgstr "%H: â€žR_FRV_GOTTLSOFF12â€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žldiâ€œ\n"
 
-#: elf32-frv.c:3279
+#: elf32-frv.c:3290
 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
 msgstr "%H: â€žR_FRV_GOTTLSOFFHIâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žsethiâ€œ\n"
 
-#: elf32-frv.c:3308
+#: elf32-frv.c:3319
 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: â€žR_FRV_GOTTLSOFFLOâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žsetloâ€œ Ð¸Ð»Ð¸ â€žsetlosâ€œ\n"
 
-#: elf32-frv.c:3338
+#: elf32-frv.c:3349
 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
 msgstr "%H: â€žR_FRV_TLSOFF_RELAXâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žldâ€œ\n"
 
-#: elf32-frv.c:3383
+#: elf32-frv.c:3394
 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
 msgstr "%H: â€žR_FRV_TLSMOFFHIâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žsethiâ€œ\n"
 
-#: elf32-frv.c:3410
+#: elf32-frv.c:3421
 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "R_FRV_TLSMOFFLOâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€žsetloâ€œ Ð¸Ð»Ð¸ â€žsetlosâ€œ\n"
 
-#: elf32-frv.c:3531
-msgid "%H: R_FRV_FUNCDESC references dynamic symbol with nonzero addend\n"
-msgstr "%H: â€žR_FRV_FUNCDESCâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼\n"
+#: elf32-frv.c:3542 elf32-frv.c:3662
+msgid "%H: %s references dynamic symbol with nonzero addend\n"
+msgstr "%H: â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼\n"
 
-#: elf32-frv.c:3572 elf32-frv.c:3694
+#: elf32-frv.c:3583 elf32-frv.c:3704
 msgid "%H: cannot emit fixups in read-only section\n"
 msgstr "%H: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ\n"
 
-#: elf32-frv.c:3603 elf32-frv.c:3737
+#: elf32-frv.c:3613 elf32-frv.c:3746
 msgid "%H: cannot emit dynamic relocations in read-only section\n"
 msgstr "%H: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ\n"
 
-#: elf32-frv.c:3652
-msgid "%H: R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend\n"
-msgstr "%H: â€žR_FRV_FUNCDESC_VALUEâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼\n"
-
-#: elf32-frv.c:3908
+#: elf32-frv.c:3918
+#, c-format
 msgid "%H: reloc against `%s' references a different segment\n"
 msgstr "%H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
 
-#: elf32-frv.c:4058
+#: elf32-frv.c:4069
+#, c-format
 msgid "%H: reloc against `%s': %s\n"
 msgstr "%H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: %s\n"
 
-#: elf32-frv.c:6265
-msgid "%B: unsupported relocation type %i\n"
-msgstr "%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%iâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°\n"
+#: elf32-frv.c:6496
+#, c-format
+msgid "%pB: compiled with %s and linked with modules that use non-pic relocations"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð½Ðµ-â€žpicâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
 
-#: elf32-frv.c:6514
+#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
 #, c-format
-msgid "%s: compiled with %s and linked with modules that use non-pic relocations"
-msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð½Ðµ-â€žPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+msgid "%pB: compiled with %s and linked with modules compiled with %s"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž%sâ€œ"
 
-#: elf32-frv.c:6567 elf32-iq2000.c:828 elf32-m32c.c:812
+#: elf32-frv.c:6563
 #, c-format
-msgid "%s: compiled with %s and linked with modules compiled with %s"
-msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž%sâ€œ"
+msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (%#x) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (%#x)"
 
-#: elf32-frv.c:6579
+#: elf32-gen.c:71
 #, c-format
-msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)"
-msgstr "%s: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (0x%lx) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (0x%lx)"
+msgid "%pB: relocations in generic ELF (EM: %d)"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð¿ÑˆÑ‚ÐµÐ¼ â€žELFâ€œ-Ñƒ (EM: %d)"
 
-#: elf32-frv.c:6627 elf32-iq2000.c:865 elf32-m32c.c:848 elf32-mt.c:561
-#: elf32-rl78.c:1069 elf32-rx.c:3040 elf64-ppc.c:5839
+#: elf32-hppa.c:863 elf32-hppa.c:3403
 #, c-format
-msgid "private flags = 0x%lx:"
-msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lx:"
+msgid "%pB(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-ffunction-sectionsâ€œ"
 
-#: elf32-gen.c:69 elf64-gen.c:69
-msgid "%B: Relocations in generic ELF (EM: %d)"
-msgstr "%B: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð¿ÑˆÑ‚ÐµÐ¼ â€žELFâ€œ-Ñƒ (EM: %d)"
-
-#: elf32-hppa.c:830 elf32-hppa.c:3592
-msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections"
-msgstr "%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-ffunction-sectionsâ€œ"
-
-#: elf32-hppa.c:1268
-msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
-
-#: elf32-hppa.c:2781
-msgid "%B: duplicate export stub %s"
-msgstr "%B: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡Ð¸ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð¸Ð·Ð²Ð¾Ð·Ð° â€ž%sâ€œ"
-
-#: elf32-hppa.c:3427
-msgid "%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link"
-msgstr "%B(%A+0x%lx): Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° â€ž%sâ€œ Ð·Ð° â€žinsn 0x%xâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñƒ Ð½Ðµ-Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð²ÐµÐ·Ð¸"
-
-#: elf32-hppa.c:4279
-msgid "%B(%A+0x%lx): cannot handle %s for %s"
-msgstr "%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+#: elf32-hppa.c:1241
+#, c-format
+msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+
+#: elf32-hppa.c:2580
+#, c-format
+msgid "%pB: duplicate export stub %s"
+msgstr "%pB: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð¸Ð·Ð²Ð¾Ð·Ð° â€ž%sâ€œ"
+
+#: elf32-hppa.c:3236
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s fixup for insn %#x is not supported in a non-shared link"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° â€ž%sâ€œ Ð·Ð° â€žinsn %#xâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñƒ Ð½Ðµ-Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð²ÐµÐ·Ð¸"
+
+#: elf32-hppa.c:4032
+#, c-format
+msgid "%s has both normal and TLS relocs"
+msgstr "â€ž%sâ€œ Ð¸Ð¼Ð° Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾ Ð¸ â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elf32-hppa.c:4050
+#, c-format
+msgid "%pB:%s has both normal and TLS relocs"
+msgstr "%pB: â€ž%sâ€œ Ð¸Ð¼Ð° Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾ Ð¸ â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elf32-hppa.c:4109
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
 
-#: elf32-hppa.c:4598
+#: elf32-hppa.c:4415
 msgid ".got section not immediately after .plt section"
 msgstr "Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.gotâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ð¼Ð°Ñ… Ð½Ð°ÐºÐ¾Ð½ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pltâ€œ"
 
-#. Unknown relocation.
-#: elf32-i386.c:380 elf32-m68k.c:353 elf32-ppc.c:2035 elf32-s390.c:345
-#: elf32-tic6x.c:2667 elf64-ppc.c:2427 elf64-s390.c:371 elf64-x86-64.c:281
-msgid "%B: invalid relocation type %d"
-msgstr "%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
-
-#: elf32-i386.c:1394 elf64-x86-64.c:1410
-msgid "%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed"
-msgstr "%B: Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ¾ â€žTLSâ€œ Ð¿Ñ€ÐµÐ»Ð°Ð· Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð¿Ñ€Ð¸ 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ"
-
-#: elf32-i386.c:1642 elf32-s390.c:1233 elf32-sh.c:6263 elf32-tilepro.c:1627
-#: elf32-xtensa.c:1176 elf64-s390.c:1166 elfxx-sparc.c:1596
-#: elfxx-tilegx.c:1836
-msgid "%B: `%s' accessed both as normal and thread local symbol"
-msgstr "%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
-
-#: elf32-i386.c:2500 elf64-x86-64.c:2582
-msgid "%P: %B: warning: relocation against `%s' in readonly section `%A'.\n"
-msgstr "%P: %B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ.\n"
-
-#: elf32-i386.c:2740 elf64-x86-64.c:2820
-msgid "%P: %B: warning: relocation in readonly section `%A'.\n"
-msgstr "%P: %B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ.\n"
-
-#: elf32-i386.c:3207 elf32-tilepro.c:2873 elf64-x86-64.c:3275
-#: elfxx-tilegx.c:3172 /src/binutils-gdb/bfd/elfnn-aarch64.c:4099
-msgid "%B: unrecognized relocation (0x%x) in section `%A'"
-msgstr "%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (0x%x) Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ"
-
-#: elf32-i386.c:3368 elf64-x86-64.c:3380 elfxx-sparc.c:3150
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:3496
-msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸"
+#: elf32-i386.c:1177 elf64-x86-64.c:1506
+#, c-format
+msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
+msgstr "%pB: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ¾ â€žTLSâ€œ Ð¿Ñ€ÐµÐ»Ð°Ð· Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð¿Ñ€Ð¸ %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
+
+#: elf32-i386.c:1286
+#, c-format
+msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
+msgstr "%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOT32Xâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð±ÐµÐ· Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
 
-#: elf32-i386.c:3610 elf64-x86-64.c:3777
+#: elf32-i386.c:1719 elf32-s390.c:1151 elf32-sh.c:5499 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1263 elf64-s390.c:1083 elfxx-sparc.c:1556 elfxx-tilegx.c:1767
+#: elfnn-loongarch.c:612 elfnn-riscv.c:671
+#, c-format
+msgid "%pB: `%s' accessed both as normal and thread local symbol"
+msgstr "%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
+
+#: elf32-i386.c:1791
+#, c-format
+msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¸ Ð½Ðµ-â€žPICâ€œ Ð¿Ð¾Ð·Ð¸Ð² Ð·Ð° â€žIFUNCâ€œ â€ž%sâ€œ"
+
+#: elf32-i386.c:1846 elf64-x86-64.c:2436
+#, c-format
+msgid "%pB: non-canonical reference to canonical protected function `%s' in %pB"
+msgstr "%pB: Ð½Ðµ-ÐºÐ°Ð½Ð¾Ð½Ñ�ÐºÐ° ÑƒÐ¿ÑƒÑ‚Ð° ÐºÐ° ÐºÐ°Ð½Ð¾Ð½Ñ�ÐºÐ¾Ñ˜ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ñ˜ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð¸ â€ž%sâ€œ %pB"
+
+#: elf32-i386.c:2410 elf64-x86-64.c:2900 elfnn-riscv.c:2455
+#, c-format
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elf32-i386.c:2443 elf32-i386.c:3745 elf32-i386.c:3893 elf64-x86-64.c:2957
+#: elf64-x86-64.c:4597 elf64-x86-64.c:4765 elfnn-riscv.c:2328
+#: elfnn-riscv.c:3184 elfnn-riscv.c:3258
+#, c-format
+msgid "Local IFUNC function `%s' in %pB\n"
+msgstr "Ð›Ð¾ÐºÐ°Ð»Ð½Ð° â€žIFUNCâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ\n"
+
+#: elf32-i386.c:2621
+#, c-format
+msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
+msgstr "%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð±ÐµÐ· Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
+
+#: elf32-i386.c:2656 elf64-x86-64.c:3174
 msgid "hidden symbol"
 msgstr "Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
 
-#: elf32-i386.c:3613 elf64-x86-64.c:3780
+#: elf32-i386.c:2659 elf64-x86-64.c:3177
 msgid "internal symbol"
 msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
 
-#: elf32-i386.c:3616 elf64-x86-64.c:3783
+#: elf32-i386.c:2662 elf64-x86-64.c:3180
 msgid "protected symbol"
 msgstr "Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
 
-#: elf32-i386.c:3619 elf64-x86-64.c:3786
+#: elf32-i386.c:2665 elf64-x86-64.c:3183
 msgid "symbol"
 msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
 
-#: elf32-i386.c:3624
-msgid "%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOTOFFâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
-
-#: elf32-i386.c:3635
-msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOTOFFâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
+#: elf32-i386.c:2671
+#, c-format
+msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOTOFFâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
 
-#: elf32-i386.c:4923 elf32-tilepro.c:3923 elf64-x86-64.c:4964
-#: elfxx-tilegx.c:4326 /src/binutils-gdb/bfd/elfnn-aarch64.c:7105
+#: elf32-i386.c:2684
 #, c-format
-msgid "discarded output section: `%A'"
-msgstr "Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð°: â€ž%Aâ€œ"
+msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOTOFFâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
+
+#: elf32-i386.c:4096 elf64-x86-64.c:4976
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr "%F%P: Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð°: â€ž%pAâ€œ\n"
 
-#: elf32-ip2k.c:857 elf32-ip2k.c:863 elf32-ip2k.c:930 elf32-ip2k.c:936
+#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
 msgid "ip2k relaxer: switch table without complete matching relocation information."
 msgstr "Ñ€ÐµÐ»Ð°ÐºÑ�ÐµÑ€ â€žip2kâ€œ: Ð¿Ñ€ÐµÐ±Ð°Ñ†Ð¸Ð²Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð±ÐµÐ· Ð¿Ð¾Ñ‚Ð¿ÑƒÐ½Ð¾Ð³ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð°ÑšÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ."
 
-#: elf32-ip2k.c:880 elf32-ip2k.c:963
+#: elf32-ip2k.c:878 elf32-ip2k.c:961
 msgid "ip2k relaxer: switch table header corrupt."
 msgstr "Ñ€ÐµÐ»Ð°ÐºÑ�ÐµÑ€ â€žip2kâ€œ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ Ñ˜Ðµ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ñ€ÐµÐ±Ð°Ñ†Ð¸Ð²Ð°Ñ‡Ð°."
 
-#: elf32-ip2k.c:1292
-#, c-format
-msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)."
-msgstr "ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° 0x%08lx (Ñ†Ð¸Ñ™ = 0x%08lx)."
-
-#: elf32-ip2k.c:1308
+#: elf32-ip2k.c:1298
 #, c-format
-msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)."
-msgstr "ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ñ�ÑƒÐ²Ð¸ÑˆÐ½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° 0x%08lx (Ñ†Ð¸Ñ™ = 0x%08lx)."
+msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
+msgstr "ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° %#<PRIx64> (Ñ†Ð¸Ñ™ = %#<PRIx64>)"
 
-#: elf32-iq2000.c:841 elf32-m32c.c:824
+#: elf32-ip2k.c:1317
 #, c-format
-msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
-msgstr "%s: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (0x%lx) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (0x%lx)"
+msgid "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
+msgstr "ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ñ�ÑƒÐ²Ð¸ÑˆÐ½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° %#<PRIx64> (Ñ†Ð¸Ñ™ = %#<PRIx64>)"
 
-#: elf32-lm32.c:698 elf32-nios2.c:2191
+#: elf32-lm32.c:609 elf32-nios2.c:3145
 msgid "global pointer relative relocation when _gp not defined"
 msgstr "Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
 
-#: elf32-lm32.c:753 elf32-nios2.c:2623
+#: elf32-lm32.c:664 elf32-nios2.c:3582
 msgid "global pointer relative address out of range"
 msgstr "Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
 
-#: elf32-lm32.c:1049
-msgid "internal error: addend should be zero for R_LM32_16_GOT"
-msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€žR_LM32_16_GOTâ€œ"
+#: elf32-lm32.c:960
+#, c-format
+msgid "internal error: addend should be zero for %s"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€ž%sâ€œ"
 
-#: elf32-m32r.c:1453
+#: elf32-m32r.c:1461
 msgid "SDA relocation when _SDA_BASE_ not defined"
-msgstr "Ð¡Ð”Ð� Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÐºÐ°Ð´Ð° â€ž_SDA_BASE_â€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
+msgstr "â€žSDAâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÐºÐ°Ð´Ð° â€ž_SDA_BASE_â€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
 
-#: elf32-m32r.c:3003
-msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)"
-msgstr "%B: ÐœÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%A)"
+#: elf32-m32r.c:2776 elf32-microblaze.c:1152 elf32-microblaze.c:1200
+#, c-format
+msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)"
+msgstr "%pB: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%pA)"
 
-#: elf32-m32r.c:3529
-msgid "%B: Instruction set mismatch with previous modules"
-msgstr "%B: Ð¡ÐºÑƒÐ¿ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
+#: elf32-m32r.c:3279
+#, c-format
+msgid "%pB: instruction set mismatch with previous modules"
+msgstr "%pB: Ñ�ÐºÑƒÐ¿ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
 
-#: elf32-m32r.c:3550 elf32-nds32.c:5636
+#: elf32-m32r.c:3300 elf32-nds32.c:6900
 #, c-format
 msgid "private flags = %lx"
 msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lx"
 
-#: elf32-m32r.c:3555
+#: elf32-m32r.c:3305
 #, c-format
 msgid ": m32r instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žm32râ€œ"
 
-#: elf32-m32r.c:3556
+#: elf32-m32r.c:3306
 #, c-format
 msgid ": m32rx instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žm32rxâ€œ"
 
-#: elf32-m32r.c:3557
+#: elf32-m32r.c:3307
 #, c-format
 msgid ": m32r2 instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žm32r2â€œ"
 
-#: elf32-m68hc1x.c:1114
+#: elf32-m68hc1x.c:1135
 #, c-format
-msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
-msgstr "Ð£Ð¿ÑƒÑ›Ð¸Ð²Ð°ÑšÐµ Ð½Ð° Ð´Ð°Ð»ÐµÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¾Ð¼ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð¾Ð³ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°"
+msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
+msgstr "ÑƒÐ¿ÑƒÑ›Ð¸Ð²Ð°ÑšÐµ Ð½Ð° Ð´Ð°Ð»ÐµÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¾Ð¼ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð¾Ð³ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°"
 
-#: elf32-m68hc1x.c:1150
+#: elf32-m68hc1x.c:1166
 #, c-format
 msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code."
 msgstr "Ð�Ð´Ñ€ÐµÑ�Ð° â€žXGATEâ€œ (%lx) Ð½Ð¸Ñ˜Ðµ ÑƒÐ½ÑƒÑ‚Ð°Ñ€ Ð´ÐµÑ™ÐµÐ½Ðµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ (0xE000-0xFFFF), Ñ�Ñ‚Ð¾Ð³Ð° Ð¼Ð¾Ñ€Ð°Ñ‚Ðµ Ñ€ÑƒÑ‡Ð½Ð¾ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð¸Ñ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ñƒ, Ð¸ Ð¿Ð¾ Ð¼Ð¾Ð³ÑƒÑ›Ñ�Ñ‚Ð²Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ñ‚Ðµ Ñ�Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð¾Ð¼ Ñƒ Ð²Ð°ÑˆÐµÐ¼ ÐºÐ¾Ð´Ñƒ."
 
-#: elf32-m68hc1x.c:1170
+#: elf32-m68hc1x.c:1182
 #, c-format
 msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)"
 msgstr "Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx) Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¸Ñ�Ñ‚Ð¾Ñ˜ Ð³Ñ€ÑƒÐ¿Ð¸ ÐºÐ°Ð¾ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð° Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx)"
 
-#: elf32-m68hc1x.c:1190
+#: elf32-m68hc1x.c:1197
 #, c-format
 msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx"
 msgstr "ÑƒÐ¿ÑƒÑ‚Ð° Ð½Ð° Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð¾Ð±Ð¸Ñ‡Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð½Ð° %04lx"
 
-#: elf32-m68hc1x.c:1237
+#: elf32-m68hc1x.c:1233
 #, c-format
 msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code"
 msgstr "Ð�Ð´Ñ€ÐµÑ�Ð° â€žS12â€œ (%lx) Ð½Ð¸Ñ˜Ðµ ÑƒÐ½ÑƒÑ‚Ð°Ñ€ Ð´ÐµÑ™ÐµÐ½Ðµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ (0x2000-0x4000), Ñ�Ñ‚Ð¾Ð³Ð° Ð¼Ð¾Ñ€Ð°Ñ‚Ðµ Ñ€ÑƒÑ‡Ð½Ð¾ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð¸Ñ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ñƒ Ñƒ Ð²Ð°ÑˆÐµÐ¼ ÐºÐ¾Ð´Ñƒ"
 
-#: elf32-m68hc1x.c:1370
-msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
-msgstr "%B: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 16 Ð±Ð¸Ñ‚Ð° (-mshort) Ð° Ð´Ñ€ÑƒÐ³Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 32 Ð±Ð¸Ñ‚Ð°"
-
-#: elf32-m68hc1x.c:1377
-msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
-msgstr "%B: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 32 Ð±Ð¸Ñ‚Ð° (-fshort-double) Ð° Ð´Ñ€ÑƒÐ³Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 64 Ð±Ð¸Ñ‚Ð°"
-
-#: elf32-m68hc1x.c:1386
-msgid "%B: linking files compiled for HCS12 with others compiled for HC12"
-msgstr "%B: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° â€žHCS12â€œ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸Ð¼ Ð·Ð° â€žHC12â€œ"
-
-#: elf32-m68hc1x.c:1402 elf32-ppc.c:4776 elf64-sparc.c:706 elfxx-mips.c:14817
-msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
-msgstr "%B: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (0x%lx) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (0x%lx)"
+#: elf32-m68hc1x.c:1357
+#, c-format
+msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
+msgstr "%pB: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 16 Ð±Ð¸Ñ‚Ð° (-mshort) Ð° Ð´Ñ€ÑƒÐ³Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 32 Ð±Ð¸Ñ‚Ð°"
+
+#: elf32-m68hc1x.c:1364
+#, c-format
+msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
+msgstr "%pB: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 32 Ð±Ð¸Ñ‚Ð° (-fshort-double) Ð° Ð´Ñ€ÑƒÐ³Ðµ Ð·Ð° Ñ†ÐµÐ»Ðµ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ð¾Ð´ 64 Ð±Ð¸Ñ‚Ð°"
+
+#: elf32-m68hc1x.c:1373
+#, c-format
+msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
+msgstr "%pB: Ñ�Ð²ÐµÐ·ÑƒÑ˜ÑƒÑ›Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ðµ Ð·Ð° â€žHCS12â€œ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸Ð¼ Ð·Ð° â€žHC12â€œ"
 
-#: elf32-m68hc1x.c:1430 elf32-xgate.c:677
+#: elf32-m68hc1x.c:1418 elf32-xgate.c:497
 #, c-format
 msgid "[abi=32-bit int, "
 msgstr "[Ð°Ð±Ð¸=32-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ†ÐµÐ¾ Ð±Ñ€Ð¾Ñ˜, "
 
-#: elf32-m68hc1x.c:1432 elf32-xgate.c:679
+#: elf32-m68hc1x.c:1420 elf32-xgate.c:499
 #, c-format
 msgid "[abi=16-bit int, "
 msgstr "[Ð°Ð±Ð¸=16-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ†ÐµÐ¾ Ð±Ñ€Ð¾Ñ˜, "
 
-#: elf32-m68hc1x.c:1435 elf32-xgate.c:682
+#: elf32-m68hc1x.c:1423 elf32-xgate.c:502
 #, c-format
 msgid "64-bit double, "
 msgstr "64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¼ÐµÑˆÐ¾Ð²Ð¸Ñ‚Ð¸, "
 
-#: elf32-m68hc1x.c:1437 elf32-xgate.c:684
+#: elf32-m68hc1x.c:1425 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¼ÐµÑˆÐ¾Ð²Ð¸Ñ‚Ð¸, "
 
-#: elf32-m68hc1x.c:1440
+#: elf32-m68hc1x.c:1428
 #, c-format
 msgid "cpu=HC11]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]"
 
-#: elf32-m68hc1x.c:1442
+#: elf32-m68hc1x.c:1430
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]"
 
-#: elf32-m68hc1x.c:1444
+#: elf32-m68hc1x.c:1432
 #, c-format
 msgid "cpu=HC12]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]"
 
-#: elf32-m68hc1x.c:1447
+#: elf32-m68hc1x.c:1435
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð°=Ð¼Ð¾Ð´ÐµÐ»-Ð³Ñ€ÑƒÐ¿Ðµ]"
 
-#: elf32-m68hc1x.c:1449
+#: elf32-m68hc1x.c:1437
 #, c-format
 msgid " [memory=flat]"
 msgstr " [Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð°=Ð¾Ð±Ð¸Ñ‡Ð½Ð¾]"
 
-#: elf32-m68hc1x.c:1452
+#: elf32-m68hc1x.c:1440
 #, c-format
 msgid " [XGATE RAM offsetting]"
 msgstr " [XGATE RAM Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜]"
 
-#: elf32-m68k.c:1210 elf32-m68k.c:1211 vms-alpha.c:7207 vms-alpha.c:7222
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3572 elf32-ppc.c:3580
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·"
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:8085 vms-alpha.c:8101
 msgid "unknown"
 msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾"
 
-#: elf32-m68k.c:1674
-msgid "%B: GOT overflow: Number of relocations with 8-bit offset > %d"
-msgstr "%B: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žGOTâ€œ: Ð‘Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð° 8-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ÐµÐ¼ > %d"
-
-#: elf32-m68k.c:1680
-msgid "%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d"
-msgstr "%B: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žGOTâ€œ: Ð‘Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð° 8- Ð¸Ð»Ð¸ 16-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ÐµÐ¼ > %d"
-
-#: elf32-m68k.c:3921
-msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object"
-msgstr "%B(%A+0x%lx): â€žR_68K_TLS_LE32â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
-
-#: elf32-mcore.c:99 elf32-mcore.c:442
-msgid "%B: Relocation %s (%d) is not currently supported.\n"
-msgstr "%B: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ (%d) Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾.\n"
-
-#: elf32-mcore.c:428
-msgid "%B: Unknown relocation type %d\n"
-msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ\n"
+#: elf32-m68k.c:1731
+#, c-format
+msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d"
+msgstr "%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žGOTâ€œ: Ð±Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð° 8-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ÐµÐ¼ > %d"
+
+#: elf32-m68k.c:1738
+#, c-format
+msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
+msgstr "%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žGOTâ€œ: Ð±Ñ€Ð¾Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð° 8- Ð¸Ð»Ð¸ 16-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ÐµÐ¼ > %d"
 
 #. Pacify gcc -Wall.
-#: elf32-mep.c:157
+#: elf32-mep.c:139
 #, c-format
 msgid "mep: no reloc for code %d"
 msgstr "mep: Ð½ÐµÐ¼Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð·Ð° ÐºÐ¾Ð´ â€ž%dâ€œ"
 
-#: elf32-mep.c:163
+#: elf32-mep.c:146
 #, c-format
 msgid "MeP: howto %d has type %d"
 msgstr "MeP: â€žhowtoâ€œ â€ž%dâ€œ Ð¸Ð¼Ð° Ð²Ñ€Ñ�Ñ‚Ñƒ â€ž%dâ€œ"
 
-#: elf32-mep.c:632
-msgid "%B and %B are for different cores"
-msgstr "â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ Ñ�Ñƒ Ð·Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð°"
-
-#: elf32-mep.c:649
-msgid "%B and %B are for different configurations"
-msgstr "â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ Ñ�Ñƒ Ð·Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐ°"
+#: elf32-mep.c:618
+#, c-format
+msgid "%pB and %pB are for different cores"
+msgstr "â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ñ�Ñƒ Ð·Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð°"
+
+#: elf32-mep.c:637
+#, c-format
+msgid "%pB and %pB are for different configurations"
+msgstr "â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ñ�Ñƒ Ð·Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐ°"
 
-#: elf32-mep.c:686
+#: elf32-mep.c:675
 #, c-format
 msgid "private flags = 0x%lx"
 msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lx"
 
-#: elf32-metag.c:1921
-msgid "%B(%A+0x%lx): R_METAG_TLS_LE/IENONPIC relocation not permitted in shared object"
-msgstr "%B(%A+0x%lx): â€žR_METAG_TLS_LE/IENONPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
-
-#: elf32-microblaze.c:950
+#: elf32-metag.c:1857
 #, c-format
-msgid "%s: unknown relocation type %d"
-msgstr "%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+msgid "%pB(%pA): multiple TLS models are not supported"
+msgstr "%pB(%pA): Ð²Ð¸ÑˆÐµ â€žTLSâ€œ Ð¼Ð¾Ð´ÐµÐ»Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
 
-#: elf32-microblaze.c:1076 elf32-microblaze.c:1121
+#: elf32-metag.c:1860
 #, c-format
-msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)"
-msgstr "%s: ÐœÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)"
+msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link"
+msgstr "%pB(%pA): Ð½Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð´ÐµÑ™ÐµÐ½Ðµ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð¾Ð±Ð°Ð²Ñ™Ð°ÑšÐ° Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐºÐµ Ð²ÐµÐ·Ðµ"
 
-#: elf32-microblaze.c:1484 elf32-tilepro.c:3320 elfxx-sparc.c:3526
-#: elfxx-tilegx.c:3729
-msgid "%B: probably compiled without -fPIC?"
-msgstr "%B: Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð±ÐµÐ· â€ž-fPICâ€œ?"
+#: elf32-microblaze.c:1595 elf32-tilepro.c:3021 elfxx-sparc.c:3446
+#: elfxx-tilegx.c:3415
+#, c-format
+msgid "%pB: probably compiled without -fPIC?"
+msgstr "%pB: Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð±ÐµÐ· â€ž-fPICâ€œ?"
 
-#: elf32-mips.c:1670 elf64-mips.c:2990 elfn32-mips.c:2793
+#: elf32-mips.c:1776 elf64-mips.c:3515 elfn32-mips.c:3334
 msgid "literal relocation occurs for an external symbol"
 msgstr "Ð´Ð¾ÑˆÐ»Ð¾ Ñ˜Ðµ Ð´Ð¾ Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
 
-#: elf32-mips.c:1717 elf32-score.c:570 elf32-score7.c:469 elf64-mips.c:3033
-#: elfn32-mips.c:2834
+#: elf32-mips.c:1827 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3558
+#: elfn32-mips.c:3376
 msgid "32bits gp relative relocation occurs for an external symbol"
 msgstr "Ð´Ð¾ÑˆÐ»Ð¾ Ñ˜Ðµ Ð´Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³ Ð³Ð¿ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
 
-#: elf32-msp430.c:801 elf32-msp430.c:1109
-msgid "Try enabling relaxation to avoid relocation truncations"
-msgstr "ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð´Ð° ÑƒÐºÑ™ÑƒÑ‡Ð¸Ñ‚Ðµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐµ Ð´Ð° Ð±Ð¸Ñ�Ñ‚Ðµ Ð¸Ð·Ð±ÐµÐ³Ð»Ð¸ Ñ�ÐºÑ€Ð°Ñ›Ð¸Ð²Ð°ÑšÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+#: elf32-msp430.c:914
+#, c-format
+msgid "error: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: ÐºÑ€Ð°Ñ˜ÑšÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žuleb128â€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ 0x%lx Ñƒ â€ž%pAâ€œ Ð¸Ð· â€ž%pBâ€œ Ð¿Ñ€ÐµÐ¼Ð°ÑˆÑƒÑ˜Ðµ Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ð²Ð¸ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€"
+
+#: elf32-msp430.c:983 elf32-msp430.c:1297
+msgid "try enabling relaxation to avoid relocation truncations"
+msgstr "Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð´Ð° ÑƒÐºÑ™ÑƒÑ‡Ð¸Ñ‚Ðµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐµ Ð´Ð° Ð±Ð¸Ñ�Ñ‚Ðµ Ð¸Ð·Ð±ÐµÐ³Ð»Ð¸ Ñ�ÐºÑ€Ð°Ñ›Ð¸Ð²Ð°ÑšÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
 
-#: elf32-msp430.c:1317
+#: elf32-msp430.c:1506
 msgid "internal error: branch/jump to an odd address detected"
 msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð³Ñ€Ð°Ð½Ð°ÑšÐµ/Ñ�ÐºÐ¾Ðº Ð½Ð° Ð½ÐµÐ¿Ð°Ñ€Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ"
 
-#: elf32-msp430.c:2221
-msgid "Warning: %B: Unknown MSPABI object attribute %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žMSPABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
+#: elf32-msp430.c:2673
+#, c-format
+msgid "warning: %pB: unknown MSPABI object attribute %d"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žMSPABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
 
-#: elf32-msp430.c:2312
-msgid "error: %B uses %s instructions but %B uses %s"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ð°Ð»Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
+#: elf32-msp430.c:2774
+#, c-format
+msgid "error: %pB uses %s instructions but %pB uses %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
 
-#: elf32-msp430.c:2324
-msgid "error: %B uses the %s code model whereas %B uses the %s code model"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ ÐºÐ¾Ð´Ð° Ð´Ð¾Ðº â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ ÐºÐ¾Ð´Ð°"
+#: elf32-msp430.c:2786
+#, c-format
+msgid "error: %pB uses the %s code model whereas %pB uses the %s code model"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ ÐºÐ¾Ð´Ð° Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ ÐºÐ¾Ð´Ð°"
 
-#: elf32-msp430.c:2336
-msgid "error: %B uses the large code model but %B uses MSP430 instructions"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ¸ Ð¼Ð¾Ð´ÐµÐ» ÐºÐ¾Ð´Ð° Ð°Ð»Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žMSP430â€œ"
+#: elf32-msp430.c:2799
+#, c-format
+msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ¸ Ð¼Ð¾Ð´ÐµÐ» ÐºÐ¾Ð´Ð° Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žMSP430â€œ"
 
-#: elf32-msp430.c:2346
-msgid "error: %B uses the %s data model whereas %B uses the %s data model"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð´Ð¾Ðº â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+#: elf32-msp430.c:2810
+#, c-format
+msgid "error: %pB uses the %s data model whereas %pB uses the %s data model"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
 
-#: elf32-msp430.c:2358
-msgid "error: %B uses the small code model but %B uses the %s data model"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸ Ð¼Ð¾Ð´ÐµÐ» ÐºÐ¾Ð´Ð° Ð°Ð»Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+#: elf32-msp430.c:2823
+#, c-format
+msgid "error: %pB uses the small code model but %pB uses the %s data model"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸ Ð¼Ð¾Ð´ÐµÐ» ÐºÐ¾Ð´Ð° Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
 
-#: elf32-msp430.c:2369
-msgid "error: %B uses the %s data model but %B only uses MSP430 instructions"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð°Ð»Ð¸ â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žMSP430â€œ"
+#: elf32-msp430.c:2835
+#, c-format
+msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼Ð¾Ð´ÐµÐ» â€ž%sâ€œ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žMSP430â€œ"
 
-#: elf32-nds32.c:2921
-msgid "error: Can't find symbol: _SDA_BASE_."
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: _SDA_BASE_."
+#: elf32-msp430.c:2860
+#, c-format
+msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¼Ð¾Ð¶Ðµ Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð³Ð¾Ñ€ÑšÑƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚ Ð·Ð° Ð¿Ð¾Ð´Ð°Ñ‚ÐºÐµ, Ð°Ð»Ð¸ â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð° Ð´Ð° Ñ�Ñƒ Ð¿Ð¾Ð´Ð°Ñ†Ð¸ Ð¸Ñ�ÐºÑ™ÑƒÑ‡Ð¸Ð²Ð¾ Ñƒ Ð´Ð¾ÑšÐ¾Ñ˜ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð¸"
 
-#: elf32-nds32.c:4142
-msgid "%B: error: unknown relocation type %d."
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ."
+#: elf32-nds32.c:3674
+#, c-format
+msgid "error: can't find symbol: %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %s"
 
-#: elf32-nds32.c:4584
+#: elf32-nds32.c:5573
 #, c-format
-msgid "%s: warning: cannot deal R_NDS32_25_ABS_RELA in shared mode."
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€žR_NDS32_25_ABS_RELAâ€œ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ."
+msgid "%pB: warning: %s unsupported in shared mode"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ"
 
-#: elf32-nds32.c:4716
-msgid "%B: warning: unaligned access to GOT entry."
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÑƒÐ½Ð¾Ñ�Ñƒ â€žGOTâ€œ."
+#: elf32-nds32.c:5699
+#, c-format
+msgid "%pB: warning: unaligned access to GOT entry"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÑƒÐ½Ð¾Ñ�Ñƒ â€žGOTâ€œ"
 
-#: elf32-nds32.c:4758
-msgid "%B: warning: relocate SDA_BASE failed."
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žSDA_BASEâ€œ."
+#: elf32-nds32.c:5740
+#, c-format
+msgid "%pB: warning: relocate SDA_BASE failed"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žSDA_BASEâ€œ"
 
-#: elf32-nds32.c:4779
-msgid "%B(%A): warning: unaligned small data access of type %d."
-msgstr "%B(%A): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¸Ð¼ Ð¼Ð°Ð»Ð¸Ð¼ Ð¿Ð¾Ð´Ð°Ñ†Ð¸Ð¼Ð° Ð²Ñ€Ñ�Ñ‚Ðµ â€ž%dâ€œ."
+#: elf32-nds32.c:5762
+#, c-format
+msgid "%pB(%pA): warning: unaligned small data access of type %d"
+msgstr "%pB(%pA): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¸Ð¼ Ð¼Ð°Ð»Ð¸Ð¼ Ð¿Ð¾Ð´Ð°Ñ†Ð¸Ð¼Ð° Ð²Ñ€Ñ�Ñ‚Ðµ â€ž%dâ€œ"
 
-#: elf32-nds32.c:5446
-msgid "%B: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
-msgstr "%B: Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° â€žISRâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°: Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð° %u Ð±Ð°Ñ˜Ñ‚Ð°; Ñ‚ÐµÐºÑƒÑ›Ð° %u Ð±Ð°Ñ˜Ñ‚Ð°"
+#: elf32-nds32.c:6688
+#, c-format
+msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
+msgstr "%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° â€žISRâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°: Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð° %u Ð±Ð°Ñ˜Ñ‚Ð°; Ñ‚ÐµÐºÑƒÑ›Ð° %u Ð±Ð°Ñ˜Ñ‚Ð°"
 
-#: elf32-nds32.c:5489
-msgid "%B: warning: Endian mismatch with previous modules."
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐšÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°."
+#: elf32-nds32.c:6736
+#, c-format
+msgid "%pB: warning: endian mismatch with previous modules"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
 
-#: elf32-nds32.c:5499
-msgid "%B: warning: Older version of object file encountered, Please recompile with current tool chain."
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð�Ð°Ð¸ÑˆÐ°Ð¾ Ñ�Ð°Ð¼ Ð½Ð° Ñ�Ñ‚Ð°Ñ€Ð¸Ñ˜Ðµ Ð¸Ð·Ð´Ð°ÑšÐµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°, Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° Ñ‚ÐµÐºÑƒÑ›Ð¸Ð¼ Ð»Ð°Ð½Ñ†ÐµÐ¼ Ð°Ð»Ð°Ñ‚Ð°."
+#: elf32-nds32.c:6750
+#, c-format
+msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð°Ð¸ÑˆÐ°Ð¾ Ñ�Ð°Ð¼ Ð½Ð° Ñ�Ñ‚Ð°Ñ€Ð¸Ñ˜Ðµ Ð¸Ð·Ð´Ð°ÑšÐµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°, Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° Ñ‚ÐµÐºÑƒÑ›Ð¸Ð¼ Ð»Ð°Ð½Ñ†ÐµÐ¼ Ð°Ð»Ð°Ñ‚Ð°"
 
-#: elf32-nds32.c:5577
-msgid "%B: error: ABI mismatch with previous modules."
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ð‘Ð˜ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°."
+#: elf32-nds32.c:6838
+#, c-format
+msgid "%pB: error: ABI mismatch with previous modules"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žABIâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
 
-#: elf32-nds32.c:5588
-msgid "%B: error: Instruction set mismatch with previous modules."
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¡ÐºÑƒÐ¿ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°."
+#: elf32-nds32.c:6848
+#, c-format
+msgid "%pB: error: instruction set mismatch with previous modules"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐºÑƒÐ¿ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
 
-#: elf32-nds32.c:5612
-msgid "%B: warning: Incompatible elf-versions %s and  %s."
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐµÐ»Ñ„ Ð¸Ð·Ð´Ð°ÑšÐ° %s Ð¸ %s Ð½Ð¸Ñ�Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð°."
+#: elf32-nds32.c:6875
+#, c-format
+msgid "%pB: warning: incompatible elf-versions %s and %s"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐµÐ»Ñ„ Ð¸Ð·Ð´Ð°ÑšÐ° %s Ð¸ %s Ð½Ð¸Ñ�Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð°"
 
-#: elf32-nds32.c:5642
+#: elf32-nds32.c:6906
 #, c-format
 msgid ": n1 instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žn1â€œ"
 
-#: elf32-nds32.c:5645
+#: elf32-nds32.c:6909
 #, c-format
 msgid ": n1h instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žn1hâ€œ"
 
-#: elf32-nds32.c:8147
-msgid "%B: %s\n"
-msgstr "%B: %s\n"
-
-#: elf32-nds32.c:8449
-msgid "%B(%A): warning: relax is suppressed for sections of alignment %d-bytes > 4-byte."
-msgstr "%B(%A): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ð¸Ñ�Ð½ÑƒÑ‚Ð¾ Ð·Ð° Ð¾Ð´ÐµÑ™ÐºÐµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° %d-Ð±Ð°Ñ˜Ñ‚Ð° > 4-Ð±Ð°Ñ˜Ñ‚Ð°."
-
-#: elf32-nds32.c:8502
-msgid "%B: error: Cannot set _ITB_BASE_"
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð´ÐµÑ�Ð¸Ð¼ â€ž_ITB_BASE_â€œ"
-
-#: elf32-nds32.c:11384
-msgid "%B: Nested OMIT_FP in %A."
-msgstr "%B: Ð£Ð³Ð½ÐµÐ¶Ñ’ÐµÐ½Ð¾ â€žOMIT_FPâ€œ Ñƒ â€ž%Aâ€œ."
-
-#: elf32-nds32.c:11401
-msgid "%B: Unmatched OMIT_FP in %A."
-msgstr "%B: Ð�ÐµÐ¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ â€žOMIT_FPâ€œ Ñƒ â€ž%Aâ€œ."
+#: elf32-nds32.c:9358
+#, c-format
+msgid "%pB: error: search_nds32_elf_blank reports wrong node"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žsearch_nds32_elf_blankâ€œ Ð¸Ð·Ð²ÐµÑˆÑ‚Ð°Ð²Ð° Ð¾ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ñ‡Ð²Ð¾Ñ€Ñƒ"
 
-#: elf32-nds32.c:13357
-msgid "Linker: cannot init ex9 hash table error \n"
-msgstr "ÐŸÐ¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ð³Ñ€ÐµÑˆÐºÑƒ â€žex9â€œ Ñ…ÐµÑˆ Ñ‚Ð°Ð±ÐµÐ»Ðµ \n"
+#: elf32-nds32.c:9622
+#, c-format
+msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %#<PRIx64>"
 
-#: elf32-nds32.c:13790 elf32-nds32.c:13804
-msgid "Linker: error cannot fixed ex9 relocation \n"
-msgstr "ÐŸÐ¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡: Ð³Ñ€ÐµÑˆÐºÐ° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ð¸ â€žex9â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ \n"
+#: elf32-nds32.c:12887
+#, c-format
+msgid "%pB: nested OMIT_FP in %pA"
+msgstr "%pB: ÑƒÐ³Ð½ÐµÐ¶Ñ’ÐµÐ½Ð¾ â€žOMIT_FPâ€œ Ñƒ â€ž%pAâ€œ"
 
-#: elf32-nds32.c:14015
+#: elf32-nds32.c:12906
 #, c-format
-msgid "%s: warning: unaligned small data access. For entry: {%d, %d, %d}, addr = 0x%x, align = 0x%x."
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°. Ð—Ð° ÑƒÐ½Ð¾Ñ�: {%d, %d, %d}, Ð°Ð´Ñ€ÐµÑ�Ð° = 0x%x, Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ = 0x%x."
+msgid "%pB: unmatched OMIT_FP in %pA"
+msgstr "%pB: Ð½ÐµÐ¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ â€žOMIT_FPâ€œ Ñƒ â€ž%pAâ€œ"
 
-#: elf32-nds32.c:14047
-msgid "%P%F: failed creating ex9.it %s hash table: %E\n"
-msgstr "%P%F: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žex9.it %sâ€œ Ñ…ÐµÑˆ Ñ‚Ð°Ð±ÐµÐ»Ñƒ: %E\n"
+#: elf32-nios2.c:2934
+#, c-format
+msgid "error: %pB: big-endian R2 is not supported"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð²ÐµÐ»Ð¸ÐºÐ° ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ â€žR2â€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
 
-#: elf32-nios2.c:2861
+#: elf32-nios2.c:2950
 #, c-format
-msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n"
-msgstr "Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ 0x%08x ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾\n"
+msgid "error: %pB: conflicting CPU architectures %d/%d"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° %d/%d Ñ�Ñƒ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ"
 
-#: elf32-nios2.c:2878
+#: elf32-nios2.c:3825
 #, c-format
-msgid "Unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767.\n"
-msgstr "Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ (Ð½Ð° 0x%08x) Ð¸Ð· Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° (Ð½Ð° 0x%08x) Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ (%d) Ð¸Ð·Ð²Ð°Ð½ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾Ð³ Ð¾Ð¿Ñ�ÐµÐ³Ð°, Ð¾Ð´ -32678 Ð´Ð¾ 32767.\n"
+msgid "global pointer relative relocation at address %#<PRIx64> when _gp not defined\n"
+msgstr "Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ %#<PRIx64> ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾\n"
 
-#: elf32-nios2.c:3392
-msgid "%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not permitted in shared object"
-msgstr "%B(%A+0x%lx): â€žR_NIOS2_TLS_LE16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
+#: elf32-nios2.c:3852
+#, c-format
+msgid "unable to reach %s (at %#<PRIx64>) from the global pointer (at %#<PRIx64>) because the offset (%<PRId64>) is out of the allowed range, -32678 to 32767\n"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ (Ð½Ð° %#<PRIx64>) Ð¸Ð· Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° (Ð½Ð° %#<PRIx64>) Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ (%<PRId64>) Ð¸Ð·Ð²Ð°Ð½ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾Ð³ Ð¾Ð¿Ñ�ÐµÐ³Ð°, Ð¾Ð´ -32678 Ð´Ð¾ 32767\n"
 
-#: elf32-nios2.c:3520
+#: elf32-nios2.c:4506 elf32-pru.c:931
 msgid "relocation out of range"
 msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
 
-#: elf32-nios2.c:3530 elf32-tic6x.c:2744
+#: elf32-nios2.c:4516 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr "Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: elf32-nios2.c:4529
+#: elf32-nios2.c:5354
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
 
-#: elf32-ppc.c:2100
+#: elf32-or1k.c:1258
+#, c-format
+msgid "%pB: Cannot handle relocation value size of %d"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¾Ð¼ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾Ð´ %d"
+
+#: elf32-or1k.c:1377
+#, c-format
+msgid "%pB: unknown relocation type %d"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+
+#: elf32-or1k.c:1431
+#, c-format
+msgid "%pB: addend should be zero for plt relocations"
+msgstr "%pB: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€žpltâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#: elf32-or1k.c:1544
+#, c-format
+msgid "%pB: addend should be zero for got relocations"
+msgstr "%pB: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€žgotâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#: elf32-or1k.c:1561
+#, c-format
+msgid "%pB: gotoff relocation against dynamic symbol %s"
+msgstr "%pB: â€žgotoffâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-or1k.c:1575 elf32-or1k.c:1590 elf64-alpha.c:4410 elf64-alpha.c:4554
+#, c-format
+msgid "%pB: pc-relative relocation against dynamic symbol %s"
+msgstr "%pB: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-or1k.c:1604
+#, c-format
+msgid "%pB: non-pic relocation against symbol %s"
+msgstr "%pB: â€žnon-picâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-or1k.c:1688
+#, c-format
+msgid "%pB: support for local dynamic not implemented"
+msgstr "%pB: Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ° Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð°"
+
+#: elf32-or1k.c:1867
+#, c-format
+msgid "%pB: will not resolve runtime TLS relocation"
+msgstr "%pB: Ð½ÐµÑ›Ñƒ Ñ€ÐµÑˆÐ¸Ñ‚Ð¸ Ð²Ñ€ÐµÐ¼Ðµ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#: elf32-or1k.c:2201
+#, c-format
+msgid "%pB: bad relocation section name `%s'"
+msgstr "%pB: Ð»Ð¾Ñˆ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ"
+
+#: elf32-or1k.c:3315
+#, c-format
+msgid "%pB: %s flag mismatch with previous modules"
+msgstr "%pB: â€ž%sâ€œ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
+
+#: elf32-ppc.c:990 elf64-ppc.c:1753
 #, c-format
 msgid "generic linker can't handle %s"
 msgstr "Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ€Ð°Ð´Ð¸ Ñ�Ð° â€ž%sâ€œ"
 
-#: elf32-ppc.c:2642
-msgid "corrupt %s section in %B"
-msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€ž%sâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ â€ž%Bâ€œ"
-
-#: elf32-ppc.c:2661
-msgid "unable to read in %s section from %B"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%Bâ€œ"
-
-#: elf32-ppc.c:2702
-msgid "warning: unable to set size of %s section in %B"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñƒ â€ž%Bâ€œ"
-
-#: elf32-ppc.c:2752
-msgid "failed to allocate space for new APUinfo section."
-msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€ Ð·Ð° Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ."
-
-#: elf32-ppc.c:2771
-msgid "failed to compute new APUinfo section."
-msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ."
-
-#: elf32-ppc.c:2774
-msgid "failed to install new APUinfo section."
-msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð½Ñ�Ñ‚Ð°Ð»Ð¸Ñ€Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ."
-
-#: elf32-ppc.c:3844
-msgid "%B: relocation %s cannot be used when making a shared object"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
-
-#. It does not make sense to have a procedure linkage
-#. table entry for a local symbol.
-#: elf32-ppc.c:4218
-msgid "%P: %H: %s reloc against local symbol\n"
-msgstr "%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
-
-#: elf32-ppc.c:4299
-msgid "%P: %H: @local call to ifunc %s\n"
-msgstr "%P: %H: Ð¿Ð¾Ð·Ð¸Ð² â€ž@localâ€œ Ð·Ð° i-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ\n"
-
-#: elf32-ppc.c:4588 elf32-ppc.c:4603
-msgid "Warning: %B uses hard float, %B uses soft float"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·"
-
-#: elf32-ppc.c:4591 elf32-ppc.c:4595
-msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ñ˜ÐµÐ´Ð½Ðµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸"
-
-#: elf32-ppc.c:4599
-msgid "Warning: %B uses soft float, %B uses single-precision hard float"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ñ˜ÐµÐ´Ð½Ðµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸"
-
-#: elf32-ppc.c:4606 elf32-ppc.c:4610
-msgid "Warning: %B uses unknown floating point ABI %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%dâ€œ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°"
-
-#: elf32-ppc.c:4652 elf32-ppc.c:4656
-msgid "Warning: %B uses unknown vector ABI %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%dâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°"
-
-#: elf32-ppc.c:4660
-msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\""
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%sâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
-
-#: elf32-ppc.c:4677 elf32-ppc.c:4680
-msgid "Warning: %B uses r3/r4 for small structure returns, %B uses memory"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žr3/r4â€œ Ð·Ð° Ð¼Ð°Ð»Ðµ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚Ðµ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ"
-
-#: elf32-ppc.c:4683 elf32-ppc.c:4687
-msgid "Warning: %B uses unknown small structure return convention %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ€ Ð¼Ð°Ð»Ð¾Ð³ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚Ð° Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ â€ž%dâ€œ"
-
-#: elf32-ppc.c:4741
-msgid "%B: compiled with -mrelocatable and linked with modules compiled normally"
-msgstr "%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž-mrelocatableâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼"
-
-#: elf32-ppc.c:4749
-msgid "%B: compiled normally and linked with modules compiled with -mrelocatable"
-msgstr "%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž-mrelocatableâ€œ"
-
-#: elf32-ppc.c:4872
-msgid "%P: bss-plt forced due to %B\n"
-msgstr "%P: â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð·Ð±Ð¾Ð³ â€ž%Bâ€œ\n"
-
-#: elf32-ppc.c:4875
-msgid "%P: bss-plt forced by profiling\n"
-msgstr "%P: â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ�Ð°ÑšÐµÐ¼\n"
+#: elf32-ppc.c:1628
+#, c-format
+msgid "corrupt %s section in %pB"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€ž%sâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ â€ž%pBâ€œ"
+
+#: elf32-ppc.c:1647
+#, c-format
+msgid "unable to read in %s section from %pB"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%pBâ€œ"
+
+#: elf32-ppc.c:1689
+#, c-format
+msgid "warning: unable to set size of %s section in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ"
+
+#: elf32-ppc.c:1738
+msgid "failed to allocate space for new APUinfo section"
+msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€ Ð·Ð° Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ"
+
+#: elf32-ppc.c:1757
+msgid "failed to compute new APUinfo section"
+msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ"
+
+#: elf32-ppc.c:1760
+msgid "failed to install new APUinfo section"
+msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð½Ñ�Ñ‚Ð°Ð»Ð¸Ñ€Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ"
+
+#: elf32-ppc.c:2869
+#, c-format
+msgid "%pB: relocation %s cannot be used when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: elf32-ppc.c:3588 elf32-ppc.c:3596
+#, c-format
+msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ñ˜ÐµÐ´Ð½Ðµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸"
+
+#: elf32-ppc.c:3618 elf32-ppc.c:3626
+#, c-format
+msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð», â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 128-Ð±Ð¸Ñ‚Ð½Ð¸ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð»"
+
+#: elf32-ppc.c:3634 elf32-ppc.c:3642
+#, c-format
+msgid "%pB uses IBM long double, %pB uses IEEE long double"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žIBMâ€œ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð», â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žIEEEâ€œ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð»"
+
+#: elf32-ppc.c:3709 elf32-ppc.c:3718
+#, c-format
+msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žAltiVecâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€ â€žABIâ€œ, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žSPEâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€ â€žABIâ€œ"
+
+#: elf32-ppc.c:3747 elf32-ppc.c:3756
+#, c-format
+msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žr3/r4â€œ Ð·Ð° Ð¼Ð°Ð»Ðµ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚Ðµ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ"
+
+#: elf32-ppc.c:3820
+#, c-format
+msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž-mrelocatableâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼"
+
+#: elf32-ppc.c:3828
+#, c-format
+msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž-mrelocatableâ€œ"
+
+#: elf32-ppc.c:3899
+#, c-format
+msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
+msgstr "%pB(%pA+0x%lx): Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž16Aâ€œ Ñ�Ñ‚Ð¸Ð»Ð° Ð½Ð° â€ž0x%08x insnâ€œ"
+
+#: elf32-ppc.c:3918
+#, c-format
+msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
+msgstr "%pB(%pA+0x%lx): Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž16Dâ€œ Ñ�Ñ‚Ð¸Ð»Ð° Ð½Ð° â€ž0x%08x insnâ€œ"
+
+#: elf32-ppc.c:4028
+#, c-format
+msgid "bss-plt forced due to %pB"
+msgstr "â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð·Ð±Ð¾Ð³ â€ž%pBâ€œ"
+
+#: elf32-ppc.c:4030
+msgid "bss-plt forced by profiling"
+msgstr "â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ�Ð°ÑšÐµÐ¼"
+
+#: elf32-ppc.c:4608 elf64-ppc.c:8497
+msgid "%H: warning: %s unexpected insn %#x.\n"
+msgstr "%H: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%#xâ€œ.\n"
 
 #. Uh oh, we didn't find the expected call.  We
 #. could just mark this symbol to exclude it
 #. from tls optimization but it's safer to skip
 #. the entire optimization.
-#: elf32-ppc.c:5369 elf64-ppc.c:8371
+#: elf32-ppc.c:4638 elf64-ppc.c:8562
+#, c-format
 msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
-msgstr "Ð�Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ â€ž%Hâ€œ Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ð¸Ð¾ â€ž__tls_get_addrâ€œ, Ð¢Ð›Ð¡ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½Ð°\n"
+msgstr "Ð�Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ â€ž%Hâ€œ Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ð¸Ð¾ â€ž__tls_get_addrâ€œ, â€žTLSâ€œ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½Ð°\n"
+
+#: elf32-ppc.c:5565 elf32-sh.c:3019 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elfxx-tilegx.c:2494
+#, c-format
+msgid "%pB: dynamic relocation in read-only section `%pA'\n"
+msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ %pA\n"
+
+#: elf32-ppc.c:6511
+msgid "%pB: Adjusting branch at 0x%V towards \"%s\" in section %s\n"
+msgstr "%pB: Ð”Ð¾Ñ‚ÐµÑ€ÑƒÑ˜ÐµÐ¼ Ð³Ñ€Ð°Ð½Ñƒ Ð½Ð° 0x%V Ð¿Ñ€ÐµÐ¼Ð° â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ\n"
+
+#: elf32-ppc.c:7464
+msgid "%P: %H: error: %s with unexpected instruction %x\n"
+msgstr "%P: %H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ñ�Ð° Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼ â€ž%xâ€œ\n"
+
+#: elf32-ppc.c:7502
+msgid "%H: fixup branch overflow\n"
+msgstr "%H: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žfixupâ€œ Ð³Ñ€Ð°Ð½Ðµ\n"
 
-#: elf32-ppc.c:7927
-msgid "%P: %B: unknown relocation type %d for symbol %s\n"
-msgstr "%P: %B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ\n"
+#: elf32-ppc.c:7542 elf32-ppc.c:7580
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
+msgstr "%pB(%pA+%#<PRIx64>): Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ñ�Ð° Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼ â€ž%#xâ€œ"
+
+#: elf32-ppc.c:7644
+#, c-format
+msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
+msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žbss-pltâ€œ â€ž-fPICâ€œ â€žifuncâ€œ â€ž%sâ€œ\n"
+
+#: elf32-ppc.c:7680
+#, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%#xâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elf32-ppc.c:7963
+#, c-format
+msgid "%H: non-zero addend on %s reloc against `%s'\n"
+msgstr "%H: Ð½Ðµ Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ð½Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ\n"
 
-#: elf32-ppc.c:8191
-msgid "%P: %H: non-zero addend on %s reloc against `%s'\n"
-msgstr "%P: %H: Ð½Ðµ Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ð½Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ\n"
+#. @local on an ifunc does not really make sense since
+#. the ifunc resolver can take you anywhere.  More
+#. seriously, calls to ifuncs must go through a plt call
+#. stub, and for pic the plt call stubs uses r30 to
+#. access the PLT.  The problem is that a call that is
+#. local won't have the +32k reloc addend trick marking
+#. -fPIC code, so the linker won't know whether r30 is
+#. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
+#: elf32-ppc.c:7995
+#, c-format
+msgid "%X%H: @local call to ifunc %s\n"
+msgstr "%X%H: Ð¿Ð¾Ð·Ð¸Ð² â€ž@localâ€œ Ð·Ð° i-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ\n"
 
-#: elf32-ppc.c:8389
-msgid "%P: %H: relocation %s for indirect function %s unsupported\n"
-msgstr "%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
+#: elf32-ppc.c:8173
+#, c-format
+msgid "%H: relocation %s for indirect function %s unsupported\n"
+msgstr "%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
 
-#: elf32-ppc.c:8646 elf32-ppc.c:8676 elf32-ppc.c:8767
-msgid "%P: %B: the target (%s) of a %s relocation is in the wrong output section (%s)\n"
-msgstr "%P: %B: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)\n"
+#: elf32-ppc.c:8511 elf32-ppc.c:8542 elf32-ppc.c:8645 elf32-ppc.c:8745
+#, c-format
+msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
+msgstr "%pB: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)"
 
-#: elf32-ppc.c:8854
-msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)"
-msgstr "%B: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)"
+#: elf32-ppc.c:8923 elf32-ppc.c:8944
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
+msgstr "%X%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° â€žbss-pltâ€œ\n"
 
-#: elf32-ppc.c:8958
-msgid "%P: %B: relocation %s is not yet supported for symbol %s\n"
-msgstr "%P: %B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ˜Ð¾Ñˆ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ\n"
+#: elf32-ppc.c:9026
+#, c-format
+msgid "%H: error: %s against `%s' not a multiple of %u\n"
+msgstr "%H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ\n"
 
-#: elf32-ppc.c:9038
-msgid "%P: %H: error: %s against `%s' not a multiple of %u\n"
-msgstr "%P: %H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ\n"
+#: elf32-ppc.c:9055
+#, c-format
+msgid "%H: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%H: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ\n"
 
-#: elf32-ppc.c:9067
-msgid "%P: %H: unresolvable %s relocation against symbol `%s'\n"
-msgstr "%P: %H: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ\n"
+#: elf32-ppc.c:9137
+#, c-format
+msgid "%H: %s reloc against `%s': error %d\n"
+msgstr "%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d\n"
 
-#: elf32-ppc.c:9114
-msgid "%P: %H: %s reloc against `%s': error %d\n"
-msgstr "%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d\n"
+#: elf32-ppc.c:10019
+msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
+msgstr "%X%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð¸ Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ›Ðµ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°\n"
 
-#: elf32-ppc.c:9750
-msgid "%P: %s not defined in linker created %s\n"
-msgstr "%P: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñƒ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ñƒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼ â€ž%sâ€œ\n"
+#: elf32-ppc.c:10023 elf64-ppc.c:18302
+msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
+msgstr "%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð¸ Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ð¼Ð¾Ð³Ñƒ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°\n"
 
-#: elf32-rl78.c:784
-msgid "Warning: RL78_SYM reloc with an unknown symbol"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRL78_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼"
+#: elf32-ppc.c:10068
+#, c-format
+msgid "%s not defined in linker created %pA"
+msgstr "â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñƒ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ñƒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼ â€ž%pAâ€œ"
 
-#: elf32-rl78.c:952 elf32-rx.c:1324
-msgid "%B(%A): error: call to undefined function '%s'"
-msgstr "%B(%A): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð·Ð¸Ð² Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ"
+#: elf32-pru.c:582 elf32-pru.c:1477
+#, c-format
+msgid "error: %pB: old incompatible object file detected"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ�Ñ‚Ð°Ñ€Ð° Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð°"
 
-#: elf32-rl78.c:966 elf32-rx.c:1338
-msgid "%B(%A): warning: unaligned access to symbol '%s' in the small data area"
-msgstr "%B(%A): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¸ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ/Ð¿Ð¾Ñ‚ÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° â€žRL78â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
 
-#: elf32-rl78.c:970 elf32-rx.c:1342
-msgid "%B(%A): internal error: out of range error"
-msgstr "%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr "â€žRL78â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð´ÐµÐ»Ð¸ Ð½ÑƒÐ»Ð¾Ð¼"
 
-#: elf32-rl78.c:974 elf32-rx.c:1346
-msgid "%B(%A): internal error: unsupported relocation error"
-msgstr "%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+#: elf32-rl78.c:1069
+msgid "warning: RL78_SYM reloc with an unknown symbol"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRL78_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼"
 
-#: elf32-rl78.c:978 elf32-rx.c:1350
-msgid "%B(%A): internal error: dangerous relocation"
-msgstr "%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr "%H: â€ž%sâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°\n"
 
-#: elf32-rl78.c:982 elf32-rx.c:1354
-msgid "%B(%A): internal error: unknown error"
-msgstr "%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°"
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
+msgstr "%H: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%uâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°\n"
 
-#: elf32-rl78.c:1043
-msgid "RL78/G10 ABI conflict: cannot link G10 and non-G10 objects together"
-msgstr "â€žABI RL78/G10â€œ Ñ�ÑƒÐºÐ¾Ð±: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ Ð“10 Ð¸ Ð½Ðµ-Ð“10 Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ"
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr "%H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð´Ð°Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%xâ€œ\n"
 
-#: elf32-rl78.c:1046 elf32-rl78.c:1049
+#: elf32-rl78.c:1220
 #, c-format
-msgid "- %s is G10, %s is not"
-msgstr "â€” â€ž%sâ€œ Ñ˜Ðµ Ð“10, â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ"
+msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
+msgstr "â€žRL78 ABIâ€œ Ñ�ÑƒÐºÐ¾Ð±: â€žG10â€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° â€ž%pBâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÐ²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð° â€ž%sâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ¾Ð¼ â€ž%pBâ€œ"
 
-#: elf32-rl78.c:1072
+#: elf32-rl78.c:1237
 #, c-format
-msgid " [G10]"
-msgstr " [Ð“10]"
+msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
+msgstr "â€žABI RL78â€œ Ñ�ÑƒÐºÐ¾Ð±: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ â€ž%sâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ â€ž%pBâ€œ Ñ�Ð° â€ž%sâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ¾Ð¼ â€ž%pBâ€œ"
 
-#: elf32-rx.c:563
-msgid "%B:%A: Warning: deprecated Red Hat reloc "
-msgstr "%B:%A: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð ÐµÐ´ Ð¥ÐµÑ‚Ð° "
+#: elf32-rl78.c:1246
+msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
+msgstr "â€žRL78â€œ Ñ�ÑƒÐºÐ¾Ð± Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ðµ Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ðµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ"
+
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
+#, c-format
+msgid "- %pB is 64-bit, %pB is not"
+msgstr "â€” â€ž%pBâ€œ Ñ˜Ðµ 64-Ð±Ð¸Ñ‚Ð½Ð¾, â€ž%pBâ€œ Ð½Ð¸Ñ˜Ðµ"
+
+#: elf32-rl78.c:1281
+#, c-format
+msgid " [64-bit doubles]"
+msgstr " [doubles de 64 bits]"
+
+#: elf32-rx.c:618
+#, c-format
+msgid "%pB:%pA: table entry %s outside table"
+msgstr "%pB:%pA: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ â€ž%sâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ñ‚Ð°Ð±ÐµÐ»Ðµ"
+
+#: elf32-rx.c:625
+#, c-format
+msgid "%pB:%pA: table entry %s not word-aligned within table"
+msgstr "%pB:%pA: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ¼ Ñ€ÐµÑ‡Ð¸ ÑƒÐ½ÑƒÑ‚Ð°Ñ€ Ñ‚Ð°Ð±ÐµÐ»Ðµ"
+
+#: elf32-rx.c:700
+#, c-format
+msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
+msgstr "%pB:%pA: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð ÐµÐ´ Ð¥ÐµÑ‚Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñƒ: %s"
 
 #. Check for unsafe relocs in PID mode.  These are any relocs where
 #. an absolute address is being computed.  There are special cases
 #. for relocs against symbols that are known to be referenced in
 #. crt0.o before the PID base address register has been initialised.
-#: elf32-rx.c:581
-msgid "%B(%A): unsafe PID relocation %s at 0x%08lx (against %s in %s)"
-msgstr "%B(%A): Ð½ÐµÑ�Ð¸Ð³ÑƒÑ€Ð½Ð¾ ÐŸÐ˜Ð” Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð° 0x%08lx (Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñƒ â€ž%sâ€œ)"
-
-#: elf32-rx.c:1157
-msgid "Warning: RX_SYM reloc with an unknown symbol"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRX_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼"
-
-#: elf32-s390.c:2292 elf64-s390.c:2244
-msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s"
-msgstr "%B(%A+0x%lx): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ð·Ð° Ð¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
+#: elf32-rx.c:720
+#, c-format
+msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
+msgstr "%pB(%pA): Ð½ÐµÑ�Ð¸Ð³ÑƒÑ€Ð½Ð¾ â€žPIDâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð° %#<PRIx64> (Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñƒ â€ž%sâ€œ)"
+
+#: elf32-rx.c:1304
+msgid "warning: RX_SYM reloc with an unknown symbol"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRX_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼"
+
+#: elf32-rx.c:1472
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð·Ð¸Ð² Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ"
+
+#: elf32-rx.c:3185
+#, c-format
+msgid "there is a conflict merging the ELF header flags from %pB"
+msgstr "Ñ�ÑƒÐºÐ¾Ð± Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐ° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° â€žELFâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð° Ð¸Ð· â€ž%pBâ€œ"
 
-#: elf32-score.c:1520 elf32-score7.c:1379 elfxx-mips.c:3642
+#: elf32-rx.c:3188
+#, c-format
+msgid "  the input  file's flags: %s"
+msgstr "  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ ÑƒÐ»Ð°Ð·Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %s"
+
+#: elf32-rx.c:3190
+#, c-format
+msgid "  the output file's flags: %s"
+msgstr "  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¸Ð·Ð»Ð°Ð·Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %s"
+
+#: elf32-rx.c:3797
+#, c-format
+msgid "%pB:%pA: table %s missing corresponding %s"
+msgstr "%pB:%pA: Ñ‚Ð°Ð±ÐµÐ»Ð¸ â€ž%sâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ â€ž%sâ€œ"
+
+#: elf32-rx.c:3805
+#, c-format
+msgid "%pB:%pA: %s and %s must be in the same input section"
+msgstr "%pB:%pA: â€ž%sâ€œ Ð¸ â€ž%sâ€œ Ð¼Ð¾Ñ€Ð°Ñ˜Ñƒ Ð±Ð¸Ñ‚Ð¸ Ñƒ Ð¸Ñ�Ñ‚Ð¾Ð¼ ÑƒÐ»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
+
+#: elf32-s390.c:2009 elf64-s390.c:1976
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ð·Ð° â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
+
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3875
 msgid "not enough GOT space for local GOT entries"
 msgstr "Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ â€žGOTâ€œ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ð·Ð° Ð¼ÐµÑ�Ð½Ðµ ÑƒÐ½Ð¾Ñ�Ðµ â€žGOTâ€œ"
 
-#: elf32-score.c:2742
-msgid "address not word align"
+#: elf32-score.c:2747
+msgid "address not word aligned"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð¿Ð¾ Ñ€ÐµÑ‡Ð¸"
 
-#: elf32-score.c:2827 elf32-score7.c:2631
+#: elf32-score.c:2828 elf32-score7.c:2635
 #, c-format
-msgid "%s: Malformed reloc detected for section %s"
-msgstr "%s: ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+msgid "%pB: malformed reloc detected for section %pA"
+msgstr "%pB: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
 
-#: elf32-score.c:2882 elf32-score7.c:2686
-msgid "%B: CALL15 reloc at 0x%lx not against global symbol"
-msgstr "%B: â€žCALL15â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x%lx Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+#: elf32-score.c:2882 elf32-score7.c:2689
+#, c-format
+msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
+msgstr "%pB: â€žCALL15â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %#<PRIx64> Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
 
-#: elf32-score.c:4007 elf32-score7.c:3811
+#: elf32-score.c:3990 elf32-score7.c:3797
 #, c-format
 msgid " [pic]"
 msgstr " [Ð¿Ð¸Ðº]"
 
-#: elf32-score.c:4011 elf32-score7.c:3815
+#: elf32-score.c:3994 elf32-score7.c:3801
 #, c-format
 msgid " [fix dep]"
 msgstr " [Ñ„Ð¸ÐºÑ� Ð´ÑƒÐ±]"
 
-#: elf32-score.c:4053 elf32-score7.c:3857
-msgid "%B: warning: linking PIC files with non-PIC files"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ð° Ð½Ðµ-â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°"
-
-#: elf32-sh-symbian.c:130
-msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS"
-msgstr "%B: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° Ð£Ð’Ð•Ð—Ð˜ ÐšÐ�Ðž Ð·Ð° â€ž%sâ€œ Ð·Ð°Ñ�ÐµÑšÑƒÑ˜Ðµ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ Ð£Ð’Ð•Ð—Ð˜ ÐšÐ�Ðž"
-
-#: elf32-sh-symbian.c:383
-msgid "%B: Unrecognised .directive command: %s"
-msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž.directiveâ€œ: %s"
-
-#: elf32-sh-symbian.c:500
-msgid "%B: Failed to add renamed symbol %s"
-msgstr "%B: Ð�Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´Ð°Ð¼ Ð¿Ñ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+#: elf32-score.c:4041 elf32-score7.c:3848
+#, c-format
+msgid "%pB: warning: linking PIC files with non-PIC files"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ð° Ð½Ðµ-â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°"
 
-#: elf32-sh.c:569
-msgid "%B: 0x%lx: warning: bad R_SH_USES offset"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ â€žR_SH_USESâ€œ"
+#: elf32-sh.c:533
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_SH_USESâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð»Ð°Ðº 0x%x"
 
-#: elf32-sh.c:581
-msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_SH_USESâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ â€žinsnâ€œ 0x%x"
+#: elf32-sh.c:3754
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
+msgstr "%pB: %#<PRIx64>: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ñ†Ð¸Ñ™ Ð³Ñ€Ð°Ð½Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
 
-#: elf32-sh.c:598
-msgid "%B: 0x%lx: warning: bad R_SH_USES load offset"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€žR_SH_USESâ€œ"
+#: elf32-sh.c:3784 elf32-sh.c:3800
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
+msgstr "%pB: %#<PRIx64>: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ %#<PRIx64>"
 
-#: elf32-sh.c:613
-msgid "%B: 0x%lx: warning: could not find expected reloc"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: elf32-sh.c:3816
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocation %<PRId64> not in range -32..32"
+msgstr "%pB: %#<PRIx64>: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: â€žR_SH_PSHAâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%#<PRId64>â€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ -32..32"
 
-#: elf32-sh.c:641
-msgid "%B: 0x%lx: warning: symbol in unexpected section"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ˜Ðµ Ñƒ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
+#: elf32-sh.c:3832
+#, c-format
+msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocation %<PRId64> not in range -32..32"
+msgstr "%pB: %#<PRIx64>: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: â€žR_SH_PSHLâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%#<PRId64>â€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ -32..32"
 
-#: elf32-sh.c:767
-msgid "%B: 0x%lx: warning: could not find expected COUNT reloc"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žCOUNTâ€œ"
+#: elf32-sh.c:3962 elf32-sh.c:4357
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot emit fixup to `%s' in read-only section"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° ÑƒÐ½ÐµÑ�ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ"
 
-#: elf32-sh.c:776
-msgid "%B: 0x%lx: warning: bad count"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜"
+#: elf32-sh.c:4460
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
+msgstr "%pB(%pA+%#<PRIx64>): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf32-sh.c:1180 elf32-sh.c:1550
-msgid "%B: 0x%lx: fatal: reloc overflow while relaxing"
-msgstr "%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
+#: elf32-sh.c:4579
+#, c-format
+msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žGD->LEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#<PRIx64>"
 
-#: elf32-sh.c:3939 elf64-sh64.c:1514
-msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled"
-msgstr "Ð�ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ â€žSTO_SH5_ISA32â€œ Ð½Ð° Ð¼ÐµÑ�Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€Ð°Ñ’ÐµÐ½Ð¾"
+#. The backslash is to prevent bogus trigraph detection.
+#: elf32-sh.c:4597
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xd4??)"
 
-#: elf32-sh.c:4190
-msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation"
-msgstr "%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ñ†Ð¸Ñ™ Ð³Ñ€Ð°Ð½Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
+#: elf32-sh.c:4605
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xc7??)"
 
-#: elf32-sh.c:4223 elf32-sh.c:4238
-msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx"
-msgstr "%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ 0x%lx"
+#: elf32-sh.c:4612
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xd1??)"
 
-#: elf32-sh.c:4252
-msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32"
-msgstr "%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: â€žR_SH_PSHAâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%dâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ -32..32"
+#: elf32-sh.c:4619
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x310c??)"
 
-#: elf32-sh.c:4266
-msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32"
-msgstr "%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: â€žR_SH_PSHLâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%dâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ñƒ -32..32"
+#: elf32-sh.c:4626
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x410b??)"
 
-#: elf32-sh.c:4410 elf32-sh.c:4886
-msgid "%B(%A+0x%lx): cannot emit fixup to `%s' in read-only section"
-msgstr "%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° ÑƒÐ½ÐµÑ�ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ"
+#: elf32-sh.c:4633
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x34cc??)"
 
-#: elf32-sh.c:4993
-msgid "%B(%A+0x%lx): %s relocation against external symbol \"%s\""
-msgstr "%B(%A+0x%lx): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf32-sh.c:4668
+#, c-format
+msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žIE->LEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#<PRIx64>"
 
-#: elf32-sh.c:5466
+#: elf32-sh.c:4686
 #, c-format
-msgid "%X%C: relocation to \"%s\" references a different segment\n"
-msgstr "%X%C: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xd0??: mov.l)"
 
-#: elf32-sh.c:5472
+#: elf32-sh.c:4695
 #, c-format
-msgid "%C: warning: relocation to \"%s\" references a different segment\n"
-msgstr "%C: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x0?12: stc)"
 
-#: elf32-sh.c:6254 elf32-sh.c:6337
-msgid "%B: `%s' accessed both as normal and FDPIC symbol"
-msgstr "%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€žFDPICâ€œ"
+#: elf32-sh.c:4702
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x0?ce: mov.l)"
 
-#: elf32-sh.c:6259 elf32-sh.c:6341
-msgid "%B: `%s' accessed both as FDPIC and thread local symbol"
-msgstr "%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ â€žFDPICâ€œ-Ñƒ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
+#: elf32-sh.c:4817
+#, c-format
+msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žGD->IEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#<PRIx64>"
 
-#: elf32-sh.c:6289
-msgid "%B: Function descriptor relocation with non-zero addend"
-msgstr "%B: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
+#: elf32-sh.c:4885
+#, c-format
+msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žLD->LEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#<PRIx64>"
 
-#: elf32-sh.c:6525 elf64-alpha.c:4661
-msgid "%B: TLS local exec code cannot be linked into shared objects"
-msgstr "%B: Ð¢Ð›Ð¡ Ð¼ÐµÑ�Ð½Ð¸ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸ ÐºÐ¾Ð´ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
+#: elf32-sh.c:5013
+#, c-format
+msgid "%X%H: relocation to \"%s\" references a different segment\n"
+msgstr "%X%H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
 
-#: elf32-sh64.c:224 elf64-sh64.c:2318
+#: elf32-sh.c:5020
 #, c-format
-msgid "%s: compiled as 32-bit object and %s is 64-bit"
-msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 64-Ð±Ð¸Ñ‚Ð½Ð¸"
+msgid "%H: warning: relocation to \"%s\" references a different segment\n"
+msgstr "%H: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
 
-#: elf32-sh64.c:227 elf64-sh64.c:2321
+#: elf32-sh.c:5488 elf32-sh.c:5570
 #, c-format
-msgid "%s: compiled as 64-bit object and %s is 32-bit"
-msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸"
+msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
+msgstr "%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€žFDPICâ€œ"
 
-#: elf32-sh64.c:229 elf64-sh64.c:2323
+#: elf32-sh.c:5494 elf32-sh.c:5575
 #, c-format
-msgid "%s: object size does not match that of target %s"
-msgstr "%s: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ñ†Ð¸Ñ™Ð° â€ž%sâ€œ"
+msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
+msgstr "%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ â€žFDPICâ€œ-Ñƒ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
 
-#: elf32-sh64.c:452 elf64-sh64.c:2839
+#: elf32-sh.c:5525
 #, c-format
-msgid "%s: encountered datalabel symbol in input"
-msgstr "%s: Ð½Ð°Ð¸ÑˆÐ°Ð¾ Ñ�Ð°Ð¼ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð°Ñ‚Ð¿Ð¸Ñ�Ð° Ð´Ð°Ñ‚ÑƒÐ¼Ð° Ñƒ ÑƒÐ»Ð°Ð·Ñƒ"
+msgid "%pB: Function descriptor relocation with non-zero addend"
+msgstr "%pB: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
 
-#: elf32-sh64.c:529
-msgid "PTB mismatch: a SHmedia address (bit 0 == 1)"
-msgstr "ÐŸÐ¢Ð‘ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHmediaâ€œ (Ð±Ð¸Ñ‚ 0 == 1)"
+#: elf32-sh.c:5732 elf64-alpha.c:4646
+#, c-format
+msgid "%pB: TLS local exec code cannot be linked into shared objects"
+msgstr "%pB: â€žTLSâ€œ Ð¼ÐµÑ�Ð½Ð¸ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸ ÐºÐ¾Ð´ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
 
-#: elf32-sh64.c:532
-msgid "PTA mismatch: a SHcompact address (bit 0 == 0)"
-msgstr "ÐŸÐ¢Ð� Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHcompactâ€œ (Ð±Ð¸Ñ‚ 0 == 0)"
+#: elf32-sh.c:5847
+#, c-format
+msgid "%pB: uses %s instructions while previous modules use %s instructions"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ Ð´Ð¾Ðº Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ"
 
-#: elf32-sh64.c:550
+#: elf32-sh.c:5859
 #, c-format
-msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16"
-msgstr "%s: Ð“Ð�Ð¡ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ ÐŸÐ¢Ð‘ â€žinsnâ€œ Ñ�Ð° â€žR_SH_PT_16â€œ"
+msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%sâ€œ Ñ�Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¼ â€ž%sâ€œ Ñ˜Ðµ Ð´Ð°Ð»Ð¾ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
 
-#: elf32-sh64.c:599
-msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n"
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð½Ð° %08x Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%pâ€œ\n"
+#: elf32-sh.c:5900
+#, c-format
+msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ ÐºÐ¾Ñ˜Ðµ Ð½Ð¸Ñ�Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ðµ Ñ�Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð°Ð¼Ð° ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¸Ð¼ Ñƒ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
 
-#: elf32-sh64.c:675
+#: elf32-sh.c:5913
 #, c-format
-msgid "%s: could not write out added .cranges entries"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð´Ð¾Ð´Ð°Ñ‚Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ"
+msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
+msgstr "%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑˆÐ°Ð¼ â€žFDPICâ€œ Ð¸ Ð½Ðµ-â€žFDPICâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ"
 
-#: elf32-sh64.c:735
+#: elf32-sparc.c:89
 #, c-format
-msgid "%s: could not write out sorted .cranges entries"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð½Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ"
+msgid "%pB: compiled for a 64 bit system and target is 32 bit"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸"
 
-#: elf32-sparc.c:90
-msgid "%B: compiled for a 64 bit system and target is 32 bit"
-msgstr "%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸"
+#: elf32-sparc.c:102
+#, c-format
+msgid "%pB: linking little endian files with big endian files"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸"
 
-#: elf32-sparc.c:103
-msgid "%B: linking little endian files with big endian files"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸"
+#: elf32-sparc.c:157
+#, c-format
+msgid "%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žsparcâ€œ Ð¼Ð°ÑˆÐ¸Ð½Ðµ â€ž%luâ€œ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð° Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð¾Ð±Ñ€Ð°Ñ’Ð¸Ð²Ð°ÑšÐ° Ð¿Ð¸Ñ�Ð°ÑšÐ°"
 
-#: elf32-spu.c:716
-msgid "%X%P: overlay section %A does not start on a cache line.\n"
-msgstr "%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ñƒ Ñ€ÐµÐ´Ñƒ Ð¾Ñ�Ñ‚Ð°Ð²Ðµ.\n"
+#: elf32-spu.c:737
+msgid "%X%P: overlay section %pA does not start on a cache line\n"
+msgstr "%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ñƒ Ñ€ÐµÐ´Ñƒ Ð¾Ñ�Ñ‚Ð°Ð²Ðµ\n"
 
-#: elf32-spu.c:724
-msgid "%X%P: overlay section %A is larger than a cache line.\n"
-msgstr "%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ñ€ÐµÐ´Ð° Ð¾Ñ�Ñ‚Ð°Ð²Ðµ.\n"
+#: elf32-spu.c:745
+msgid "%X%P: overlay section %pA is larger than a cache line\n"
+msgstr "%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ñ€ÐµÐ´Ð° Ð¾Ñ�Ñ‚Ð°Ð²Ðµ\n"
 
-#: elf32-spu.c:744
-msgid "%X%P: overlay section %A is not in cache area.\n"
-msgstr "%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ€ÐµÐ´Ñƒ Ð¾Ñ�Ñ‚Ð°Ð²Ðµ.\n"
+#: elf32-spu.c:765
+msgid "%X%P: overlay section %pA is not in cache area\n"
+msgstr "%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ€ÐµÐ´Ñƒ Ð¾Ñ�Ñ‚Ð°Ð²Ðµ\n"
 
-#: elf32-spu.c:784
-msgid "%X%P: overlay sections %A and %A do not start at the same address.\n"
-msgstr "%X%P: Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ð¸ â€ž%Aâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÑƒ Ð½Ð° Ð¸Ñ�Ñ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸.\n"
+#: elf32-spu.c:806
+#, c-format
+msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n"
+msgstr "%X%P: Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ð¸ â€ž%pAâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÑƒ Ð½Ð° Ð¸Ñ�Ñ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸\n"
 
-#: elf32-spu.c:1008
-msgid "warning: call to non-function symbol %s defined in %B"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñ�ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ â€ž%Bâ€œ"
+#: elf32-spu.c:1032
+#, c-format
+msgid "warning: call to non-function symbol %s defined in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñ�ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ â€ž%pBâ€œ"
 
-#: elf32-spu.c:1358
-msgid "%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
-msgstr "%A:0x%v â€žlrlive .brinfoâ€œ (%u) Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ (%u)\n"
+#: elf32-spu.c:1382
+#, c-format
+msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
+msgstr "%pA:0x%v â€žlrlive .brinfoâ€œ (%u) Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ (%u)\n"
 
-#: elf32-spu.c:1877
-msgid "%B is not allowed to define %s"
-msgstr "â€ž%Bâ€œ Ð½ÐµÐ¼Ð° Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ â€ž%sâ€œ"
+#: elf32-spu.c:1912
+#, c-format
+msgid "%pB is not allowed to define %s"
+msgstr "â€ž%pBâ€œ Ð½ÐµÐ¼Ð° Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ â€ž%sâ€œ"
 
-#: elf32-spu.c:1885
+#: elf32-spu.c:1920
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr "Ð²Ð¸ Ð½ÐµÐ¼Ð°Ñ‚Ðµ Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµÑ‚Ðµ â€ž%sâ€œ Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸"
 
-#: elf32-spu.c:1919
+#: elf32-spu.c:1954
 #, c-format
 msgid "%s in overlay section"
 msgstr "â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°"
 
-#: elf32-spu.c:1948
+#: elf32-spu.c:1983
 msgid "overlay stub relocation overflow"
 msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð¿Ñ€ÐµÐºÑ€Ð¸Ð²Ð°ÑšÐ°"
 
-#: elf32-spu.c:1957
+#: elf32-spu.c:1992 elf64-ppc.c:15341
 msgid "stubs don't match calculated size"
 msgstr "Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜Ñƒ Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ñ‚Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸"
 
-#: elf32-spu.c:2539
+#: elf32-spu.c:2575
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð° â€ž%sâ€œ\n"
 
-#: elf32-spu.c:2555
+#: elf32-spu.c:2591
 #, c-format
 msgid "warning: %s exceeds section size\n"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ°\n"
 
-#: elf32-spu.c:2586
-msgid "%A:0x%v not found in function table\n"
-msgstr "â€ž%A:0x%vâ€œ Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ\n"
-
-#: elf32-spu.c:2726
-msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n"
-msgstr "%B(%A+0x%v): Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-ÐºÐ¾Ð´Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%B(%A)â€œ, Ð°Ð½Ð°Ð»Ð¸Ð·Ð° Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ñ‚Ð¿ÑƒÐ½Ð°\n"
-
-#: elf32-spu.c:3294
+#: elf32-spu.c:2623
 #, c-format
-msgid "Stack analysis will ignore the call from %s to %s\n"
-msgstr "Ð�Ð½Ð°Ð»Ð¸Ð·Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ›Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€Ð¸Ñ‚Ð¸ Ð¿Ð¾Ð·Ð¸Ð² Ð¾Ð´ â€ž%sâ€œ Ð´Ð¾ â€ž%sâ€œ\n"
+msgid "%pA:0x%v not found in function table\n"
+msgstr "â€ž%pA:0x%vâ€œ Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ\n"
 
-#: elf32-spu.c:3985
-msgid "  %s: 0x%v\n"
-msgstr "  %s: 0x%v\n"
+#: elf32-spu.c:2764
+#, c-format
+msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n"
+msgstr "%pB(%pA+0x%v): Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-ÐºÐ¾Ð´Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pB(%pA)â€œ, Ð°Ð½Ð°Ð»Ð¸Ð·Ð° Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ñ‚Ð¿ÑƒÐ½Ð°\n"
 
-#: elf32-spu.c:3986
-msgid "%s: 0x%v 0x%v\n"
-msgstr "%s: 0x%v 0x%v\n"
+#: elf32-spu.c:3330
+#, c-format
+msgid "stack analysis will ignore the call from %s to %s\n"
+msgstr "Ð°Ð½Ð°Ð»Ð¸Ð·Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ›Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€Ð¸Ñ‚Ð¸ Ð¿Ð¾Ð·Ð¸Ð² Ð¾Ð´ â€ž%sâ€œ Ð´Ð¾ â€ž%sâ€œ\n"
 
-#: elf32-spu.c:3991
+#: elf32-spu.c:4027
 msgid "  calls:\n"
 msgstr "  Ð¿Ð¾Ð·Ð¸Ð²Ð¸:\n"
 
-#: elf32-spu.c:3999
-#, c-format
-msgid "   %s%s %s\n"
-msgstr "   %s%s %s\n"
-
-#: elf32-spu.c:4304
+#: elf32-spu.c:4342
 #, c-format
 msgid "%s duplicated in %s\n"
 msgstr "â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¾ Ñƒ â€ž%sâ€œ\n"
 
-#: elf32-spu.c:4308
+#: elf32-spu.c:4346
 #, c-format
 msgid "%s duplicated\n"
 msgstr "â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¾\n"
 
-#: elf32-spu.c:4315
+#: elf32-spu.c:4353
 msgid "sorry, no support for duplicate object files in auto-overlay script\n"
 msgstr "Ð¸Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ, Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð·Ð° ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸ Ñ�Ð°Ð¼Ð¾-Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°\n"
 
-#: elf32-spu.c:4356
+#: elf32-spu.c:4395
+#, c-format
 msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n"
 msgstr "Ð½Ðµ-Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°Ñ˜ÑƒÑ›Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° 0x%v Ð¿Ð»ÑƒÑ� Ð½Ð°Ñ˜Ð²ÐµÑ›Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° 0x%v Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ðµ Ð¼ÐµÑ�Ð½Ð¾ Ñ�Ð¿Ñ€ÐµÐ¼Ð¸ÑˆÑ‚Ðµ\n"
 
-#: elf32-spu.c:4511
-msgid "%B:%A%s exceeds overlay size\n"
-msgstr "â€ž%B:%A%sâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°\n"
+#: elf32-spu.c:4551
+#, c-format
+msgid "%pB:%pA%s exceeds overlay size\n"
+msgstr "â€ž%pB:%pA%sâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°\n"
+
+#: elf32-spu.c:4692
+msgid "%F%P: auto overlay error: %E\n"
+msgstr "%F%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñ�Ð°Ð¼Ð¾Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°: %E\n"
 
-#: elf32-spu.c:4673
+#: elf32-spu.c:4713
 msgid "Stack size for call graph root nodes.\n"
 msgstr "Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð·Ð° Ð¿Ð¾Ð·Ð¸Ð² Ñ‡Ð²Ð¾Ñ€Ð¾Ð²Ð° ÐºÐ¾Ñ€ÐµÐ½Ð° Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ°.\n"
 
-#: elf32-spu.c:4674
+#: elf32-spu.c:4714
 msgid ""
 "\n"
 "Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
@@ -2625,1477 +3814,2695 @@ msgstr ""
 "\n"
 "Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð·Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ.  Ð�Ð°Ð¿Ð¾Ð¼ÐµÐ½Ðµ: â€ž*â€œ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº, â€žtâ€œ Ð¿Ð¾Ð·Ð¸Ð² Ð¾Ñ�Ñ‚Ð°Ñ‚ÐºÐ°\n"
 
-#: elf32-spu.c:4684
+#: elf32-spu.c:4724
 msgid "Maximum stack required is 0x%v\n"
 msgstr "Ð�Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ñ˜Ðµ 0x%v\n"
 
-#: elf32-spu.c:4775
+#: elf32-spu.c:4743
+msgid "%X%P: stack/lrlive analysis error: %E\n"
+msgstr "%X%P: Ð³Ñ€ÐµÑˆÐºÐ° â€žstack/lrliveâ€œ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ: %E\n"
+
+#: elf32-spu.c:4746
+msgid "%F%P: can not build overlay stubs: %E\n"
+msgstr "%F%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐµ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Eâ€œ\n"
+
+#: elf32-spu.c:4815
 msgid "fatal error while creating .fixup"
 msgstr "ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€ž.fixupâ€œ-Ð°"
 
-#: elf32-spu.c:5005
-msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'"
-msgstr "%B(%s+0x%lx): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf32-spu.c:5051
+#, c-format
+msgid "%pB(%s+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
+msgstr "%pB(%s+%#<PRIx64>): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf32-tic6x.c:1600
+#: elf32-tic6x.c:1588
 msgid "warning: generating a shared library containing non-PIC code"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ ÐºÐ¾Ñ˜Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-ÐŸÐ˜Ð¦ ÐºÐ¾Ð´"
 
-#: elf32-tic6x.c:1605
+#: elf32-tic6x.c:1593
 msgid "warning: generating a shared library containing non-PID code"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ ÐºÐ¾Ñ˜Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ðµ-ÐŸÐ˜Ð” ÐºÐ¾Ð´"
 
-#: elf32-tic6x.c:2524
-msgid "%B: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ðµ Ð¾Ð´Ð½Ð¾Ñ�Ð¸ Ð½Ð° â€žSBâ€œ Ð°Ð»Ð¸ â€ž__c6xabi_DSBT_BASEâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
+#: elf32-tic6x.c:2434
+#, c-format
+msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ðµ Ð¾Ð´Ð½Ð¾Ñ�Ð¸ Ð½Ð° â€žSBâ€œ Ð°Ð»Ð¸ â€ž__c6xabi_DSBT_BASEâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
+
+#: elf32-tic6x.c:3498
+#, c-format
+msgid "%pB: error: unknown mandatory EABI object attribute %d"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
 
-#: elf32-tic6x.c:3648
-msgid "%B: error: unknown mandatory EABI object attribute %d"
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
+#: elf32-tic6x.c:3507
+#, c-format
+msgid "%pB: warning: unknown EABI object attribute %d"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
 
-#: elf32-tic6x.c:3656
-msgid "%B: warning: unknown EABI object attribute %d"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
+#: elf32-tic6x.c:3625 elf32-tic6x.c:3634
+#, c-format
+msgid "error: %pB requires more stack alignment than %pB preserves"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ â€ž%pBâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸"
 
-#: elf32-tic6x.c:3768 elf32-tic6x.c:3776
-msgid "error: %B requires more stack alignment than %B preserves"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ â€ž%Bâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸"
+#: elf32-tic6x.c:3644 elf32-tic6x.c:3653
+#, c-format
+msgid "error: unknown Tag_ABI_array_object_alignment value in %pB"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žTag_ABI_array_object_alignmentâ€œ Ñƒ â€ž%pBâ€œ"
 
-#: elf32-tic6x.c:3786 elf32-tic6x.c:3795
-msgid "error: unknown Tag_ABI_array_object_alignment value in %B"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žTag_ABI_array_object_alignmentâ€œ Ñƒ â€ž%Bâ€œ"
+#: elf32-tic6x.c:3662 elf32-tic6x.c:3671
+#, c-format
+msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žTag_ABI_array_object_align_expectedâ€œ Ñƒ â€ž%pBâ€œ"
 
-#: elf32-tic6x.c:3804 elf32-tic6x.c:3813
-msgid "error: unknown Tag_ABI_array_object_align_expected value in %B"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žTag_ABI_array_object_align_expectedâ€œ Ñƒ â€ž%Bâ€œ"
+#: elf32-tic6x.c:3680 elf32-tic6x.c:3688
+#, c-format
+msgid "error: %pB requires more array alignment than %pB preserves"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½Ð¸Ð·Ð° Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ â€ž%pBâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸"
 
-#: elf32-tic6x.c:3821 elf32-tic6x.c:3828
-msgid "error: %B requires more array alignment than %B preserves"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½Ð¸Ð·Ð° Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ â€ž%Bâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸"
+#: elf32-tic6x.c:3711
+#, c-format
+msgid "warning: %pB and %pB differ in wchar_t size"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ðµ â€žwchar_tâ€œ"
 
-#: elf32-tic6x.c:3850
-msgid "warning: %B and %B differ in wchar_t size"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ðµ â€žwchar_tâ€œ"
+#: elf32-tic6x.c:3730
+#, c-format
+msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ñƒ Ð¿Ð¾ Ñ‚Ð¾Ð¼Ðµ Ð´Ð° Ð»Ð¸ Ñ˜Ðµ ÐºÐ¾Ð´ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žDSBTâ€œ"
 
-#: elf32-tic6x.c:3868
-msgid "warning: %B and %B differ in whether code is compiled for DSBT"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ñƒ Ð¿Ð¾ Ñ‚Ð¾Ð¼Ðµ Ð´Ð° Ð»Ð¸ Ñ˜Ðµ ÐºÐ¾Ð´ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žDSBTâ€œ"
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2729
+#: elfnn-aarch64.c:10030 elfnn-kvx.c:4636 elfnn-loongarch.c:5032
+#: elfnn-riscv.c:3481
+#, c-format
+msgid "discarded output section: `%pA'"
+msgstr "Ð¾Ð´Ð±Ð°Ñ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð°: â€ž%pAâ€œ"
 
-#: elf32-v850.c:157
+#: elf32-v850.c:152
 #, c-format
-msgid "Variable `%s' cannot occupy in multiple small data regions"
-msgstr "Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð·Ð°ÑƒÐ·Ð¼Ðµ Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+msgid "variable `%s' cannot occupy in multiple small data regions"
+msgstr "Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð·Ð°ÑƒÐ·Ð¼Ðµ Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
 
-#: elf32-v850.c:160
+#: elf32-v850.c:155
 #, c-format
-msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions"
-msgstr "Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ˜ÐµÐ´Ð½Ð¾Ð¼ Ð¾Ð´ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸  Ð¼Ð°Ð»Ð¸Ñ…, Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+msgid "variable `%s' can only be in one of the small, zero, and tiny data regions"
+msgstr "Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ˜ÐµÐ´Ð½Ð¾Ð¼ Ð¾Ð´ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸  Ð¼Ð°Ð»Ð¸Ñ…, Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
 
-#: elf32-v850.c:163
+#: elf32-v850.c:158
 #, c-format
-msgid "Variable `%s' cannot be in both small and zero data regions simultaneously"
-msgstr "Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð¼Ð°Ð»Ð¸Ñ… Ð¸ Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+msgid "variable `%s' cannot be in both small and zero data regions simultaneously"
+msgstr "Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð¼Ð°Ð»Ð¸Ñ… Ð¸ Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
 
-#: elf32-v850.c:166
+#: elf32-v850.c:161
 #, c-format
-msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously"
-msgstr "Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð¼Ð°Ð»Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+msgid "variable `%s' cannot be in both small and tiny data regions simultaneously"
+msgstr "Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð¼Ð°Ð»Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
 
-#: elf32-v850.c:169
+#: elf32-v850.c:164
 #, c-format
-msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously"
-msgstr "Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously"
+msgstr "Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¸Ñ�Ñ‚Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¾ Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸Ð¼Ð° Ð½ÑƒÐ»Ñ‚Ð¸Ñ… Ð¸ Ð¼Ð°Ñ˜ÑƒÑˆÐ½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
 
-#: elf32-v850.c:467
-msgid "FAILED to find previous HI16 reloc"
-msgstr "Ð�Ð˜Ð¡Ð�Ðœ Ð£Ð¡ÐŸÐ•Ðž Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žHI16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: elf32-v850.c:466
+msgid "failed to find previous HI16 reloc"
+msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žHI16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: elf32-v850.c:2293
+#: elf32-v850.c:2306
 msgid "could not locate special linker symbol __gp"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__gpâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°"
 
-#: elf32-v850.c:2297
+#: elf32-v850.c:2310
 msgid "could not locate special linker symbol __ep"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__epâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°"
 
-#: elf32-v850.c:2301
+#: elf32-v850.c:2314
 msgid "could not locate special linker symbol __ctbp"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__ctbpâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°"
 
-#: elf32-v850.c:2471 elf32-v850.c:2534
-msgid "%B: Architecture mismatch with previous modules"
-msgstr "%B: Ð�Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
-
-#: elf32-v850.c:2478
-msgid "%B: Alignment mismatch with previous modules"
-msgstr "%B: ÐŸÐ¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
+#: elf32-v850.c:2535
+#, c-format
+msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBÐ´ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° 8-Ð±Ð¸Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð°Ð»Ð¸ Ñ˜Ðµ â€ž%pBâ€œ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ð½Ð° 4-Ð±Ð¸Ñ‚Ð½Ð¾"
+
+#: elf32-v850.c:2551
+#, c-format
+msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ðµ Ð´ÑƒÐ±Ð»ÐµÑ€Ðµ Ð°Ð»Ð¸ â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 32-Ð±Ð¸Ñ‚Ð½Ðµ"
+
+#: elf32-v850.c:2566
+#, c-format
+msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žFPU-3.0â€œ Ð°Ð»Ð¸ â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ñ�Ð°Ð¼Ð¾ â€žFPU-2.0â€œ"
+
+#: elf32-v850.c:2598
+#, c-format
+msgid " alignment of 8-byte entities: "
+msgstr " Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ 8-Ð±Ð¸Ñ‚Ð½Ð¸Ñ… ÐµÐ½Ñ‚Ð¸Ñ‚ÐµÑ‚Ð°: "
+
+#: elf32-v850.c:2601
+#, c-format
+msgid "4-byte"
+msgstr "4-Ð±Ð¸Ñ‚Ð°"
+
+#: elf32-v850.c:2602
+#, c-format
+msgid "8-byte"
+msgstr "8-Ð±Ð¸Ñ‚Ð°"
+
+#: elf32-v850.c:2603 elf32-v850.c:2615
+#, c-format
+msgid "not set"
+msgstr "Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾"
+
+#: elf32-v850.c:2604 elf32-v850.c:2616 elf32-v850.c:2628 elf32-v850.c:2639
+#: elf32-v850.c:2650 elf32-v850.c:2661
+#, c-format
+msgid "unknown: %x"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾: %x"
+
+#: elf32-v850.c:2610
+#, c-format
+msgid " size of doubles: "
+msgstr " Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´ÑƒÐ±Ð»ÐµÑ€Ð°: "
+
+#: elf32-v850.c:2613
+#, c-format
+msgid "4-bytes"
+msgstr "4-Ð±Ð°Ñ˜Ñ‚Ð°"
+
+#: elf32-v850.c:2614
+#, c-format
+msgid "8-bytes"
+msgstr "8-Ð±Ð°Ñ˜Ñ‚Ð°"
+
+#: elf32-v850.c:2622
+#, c-format
+msgid " FPU support required: "
+msgstr " â€žFPUâ€œ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ° Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð°: "
+
+#: elf32-v850.c:2625
+#, c-format
+msgid "FPU-2.0"
+msgstr "FPU-2.0"
+
+#: elf32-v850.c:2626
+#, c-format
+msgid "FPU-3.0"
+msgstr "FPU-3.0"
+
+#: elf32-v850.c:2627
+#, c-format
+msgid "none"
+msgstr "Ð½Ð¸ÑˆÑ‚Ð°"
+
+#: elf32-v850.c:2634
+#, c-format
+msgid "SIMD use: "
+msgstr "â€žSIMDâ€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ: "
+
+#: elf32-v850.c:2637 elf32-v850.c:2648 elf32-v850.c:2659
+#, c-format
+msgid "yes"
+msgstr "Ð´Ð°"
+
+#: elf32-v850.c:2638 elf32-v850.c:2649 elf32-v850.c:2660
+#, c-format
+msgid "no"
+msgstr "Ð½Ðµ"
+
+#: elf32-v850.c:2645
+#, c-format
+msgid "CACHE use: "
+msgstr "â€žCACHEâ€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ: "
+
+#: elf32-v850.c:2656
+#, c-format
+msgid "MMU use: "
+msgstr "â€žMMUâ€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ: "
+
+#: elf32-v850.c:2823 elf32-v850.c:2879
+#, c-format
+msgid "%pB: architecture mismatch with previous modules"
+msgstr "%pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
 
 #. xgettext:c-format.
-#: elf32-v850.c:2553
+#: elf32-v850.c:2897
 #, c-format
 msgid "private flags = %lx: "
 msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lx: "
 
-#: elf32-v850.c:2558
+#: elf32-v850.c:2902
 #, c-format
 msgid "unknown v850 architecture"
 msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850â€œ"
 
-#: elf32-v850.c:2560
+#: elf32-v850.c:2904
 #, c-format
 msgid "v850 E3 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850 E3â€œ"
 
-#: elf32-v850.c:2562 elf32-v850.c:2572
+#: elf32-v850.c:2906 elf32-v850.c:2913
 #, c-format
 msgid "v850 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850â€œ"
 
-#: elf32-v850.c:2565
-#, c-format
-msgid ", 8-byte data alignment"
-msgstr ", 8-Ð±Ð¸Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
-
-#: elf32-v850.c:2573
+#: elf32-v850.c:2914
 #, c-format
 msgid "v850e architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850eâ€œ"
 
-#: elf32-v850.c:2574
+#: elf32-v850.c:2915
 #, c-format
 msgid "v850e1 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e1â€œ"
 
-#: elf32-v850.c:2575
+#: elf32-v850.c:2916
 #, c-format
 msgid "v850e2 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e2â€œ"
 
-#: elf32-v850.c:2576
+#: elf32-v850.c:2917
 #, c-format
 msgid "v850e2v3 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e2v3â€œ"
 
-#: elf32-v850.c:2577
+#: elf32-v850.c:2918
 #, c-format
 msgid "v850e3v5 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€žv850e3v5â€œ"
 
-#: elf32-vax.c:532
+#: elf32-v850.c:3592 elf32-v850.c:3831
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð½Ð°Ðº"
+
+#: elf32-v850.c:3602 elf32-v850.c:3841
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%#xâ€œ"
+
+#: elf32-v850.c:3648 elf32-v850.c:3876
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elf32-v850.c:3688
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%#<PRIx64>â€œ"
+
+#: elf32-vax.c:539
 #, c-format
 msgid " [nonpic]"
 msgstr " [Ð½Ðµ-Ð¿Ð¸Ñ†]"
 
-#: elf32-vax.c:535
+#: elf32-vax.c:542
 #, c-format
 msgid " [d-float]"
 msgstr " [d-Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·]"
 
-#: elf32-vax.c:538
+#: elf32-vax.c:545
 #, c-format
 msgid " [g-float]"
 msgstr " [g-Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·]"
 
-#: elf32-vax.c:656
+#: elf32-vax.c:631
 #, c-format
-msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žGOTâ€œ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº â€ž%ldâ€œ-Ð° Ð·Ð° â€ž%sâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾Ð¼ â€žGOTâ€œ Ñ�Ð°Ð±Ð¸Ñ€ÐºÑƒ â€ž%ldâ€œ-Ð°"
+msgid "%pB: warning: GOT addend of %<PRId64> to `%s' does not match previous GOT addend of %<PRId64>"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žGOTâ€œ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº â€ž%<PRId64>â€œ-Ð° Ð·Ð° â€ž%sâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾Ð¼ â€žGOTâ€œ Ñ�Ð°Ð±Ð¸Ñ€ÐºÑƒ â€ž%<PRId64>â€œ-Ð°"
 
-#: elf32-vax.c:1543
+#: elf32-vax.c:1388
 #, c-format
-msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žPLTâ€œ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº â€ž%dâ€œ-Ð° Ð·Ð° â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½"
+msgid "%pB: warning: PLT addend of %<PRId64> to `%s' from %pA section ignored"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žPLTâ€œ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº â€ž%<PRId64>â€œ-Ð° Ð·Ð° â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½"
 
-#: elf32-vax.c:1668
+#: elf32-vax.c:1514
 #, c-format
-msgid "%s: warning: %s relocation against symbol `%s' from %s section"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+msgid "%pB: warning: %s relocation against symbol `%s' from %pA section"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ"
 
-#: elf32-vax.c:1674
+#: elf32-vax.c:1521
 #, c-format
-msgid "%s: warning: %s relocation to 0x%x from %s section"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ 0x%x Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+msgid "%pB: warning: %s relocation to %#<PRIx64> from %pA section"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ %#<PRIx64> Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ"
 
-#: elf32-xgate.c:686
+#: elf32-visium.c:824
+#, c-format
+msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%s -mtune=%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž%s -mtune=%sâ€œ"
+
+#: elf32-xgate.c:506
 #, c-format
 msgid "cpu=XGATE]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=XGATE]"
 
-#: elf32-xgate.c:688
+#: elf32-xgate.c:508
 #, c-format
 msgid "error reading cpu type from elf private data"
 msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ñ‡Ð¸Ñ‚Ð°ÑšÐ° Ð²Ñ€Ñ�Ñ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ð¸Ð· Ð»Ð¸Ñ‡Ð½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° ÐµÐ»Ñ„-Ð°"
 
-#: elf32-xstormy16.c:455 elf64-ia64-vms.c:2072 elf32-ia64.c:2330
-#: elf64-ia64.c:2330
+#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2077 elfnn-ia64.c:2346
 msgid "non-zero addend in @fptr reloc"
 msgstr "Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñƒ â€ž@fptrâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ"
 
-#: elf32-xtensa.c:908
-msgid "%B(%A): invalid property table"
-msgstr "%B(%A): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ð²Ð»Ð°Ñ�Ð½Ð¸ÑˆÑ‚Ð²Ð°"
-
-#: elf32-xtensa.c:2774
-msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)"
-msgstr "%B(%A+0x%lx): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°=0x%x)"
+#: elf32-xtensa.c:998
+#, c-format
+msgid "%pB(%pA): invalid property table"
+msgstr "%pB(%pA): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ð²Ð»Ð°Ñ�Ð½Ð¸ÑˆÑ‚Ð²Ð°"
 
-#: elf32-xtensa.c:2853 elf32-xtensa.c:2974
+#: elf32-xtensa.c:2733
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°=%#<PRIx64>)"
+
+#: elf32-xtensa.c:2816 elf32-xtensa.c:2939
 msgid "dynamic relocation in read-only section"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ"
 
-#: elf32-xtensa.c:2950
+#: elf32-xtensa.c:2916
 msgid "TLS relocation invalid without dynamic sections"
 msgstr "Ð¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ñ… Ð¾Ð´ÐµÑ™Ð°ÐºÐ°"
 
-#: elf32-xtensa.c:3169
+#: elf32-xtensa.c:3129
 msgid "internal inconsistency in size of .got.loc section"
 msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.got.locâ€œ"
 
-#: elf32-xtensa.c:3482
-msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x"
-msgstr "%B: Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ. Ð˜Ð·Ð»Ð°Ð· Ñ˜Ðµ 0x%x, Ð° ÑƒÐ»Ð°Ð· 0x%x"
-
-#: elf32-xtensa.c:4713 elf32-xtensa.c:4721
-msgid "Attempt to convert L32R/CALLX to CALL failed"
-msgstr "ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜ Ð¿Ñ€ÐµÑ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€žL32R/CALLXâ€œ Ñƒ â€žCALLâ€œ Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾"
-
-#: elf32-xtensa.c:6330 elf32-xtensa.c:6406 elf32-xtensa.c:7522
-msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch"
-msgstr "%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ; Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾"
-
-#: elf32-xtensa.c:7262
-msgid "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
-msgstr "%B(%A+0x%lx): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ Ð·Ð° â€žXTENSA_ASM_SIMPLIFYâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ; Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾"
+#: elf32-xtensa.c:3435
+#, c-format
+msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
+msgstr "%pB: Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ; Ð¸Ð·Ð»Ð°Ð· Ñ˜Ðµ 0x%x, Ð° ÑƒÐ»Ð°Ð· 0x%x"
+
+#: elf32-xtensa.c:4734 elf32-xtensa.c:4742
+msgid "attempt to convert L32R/CALLX to CALL failed"
+msgstr "Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜ Ð¿Ñ€ÐµÑ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€žL32R/CALLXâ€œ Ñƒ â€žCALLâ€œ Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ¾"
+
+#: elf32-xtensa.c:6574 elf32-xtensa.c:6653 elf32-xtensa.c:8079
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ; Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾"
+
+#: elf32-xtensa.c:7820
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ Ð·Ð° â€žXTENSA_ASM_SIMPLIFYâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ; Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾"
 
-#: elf32-xtensa.c:9022
+#: elf32-xtensa.c:9678
 msgid "invalid relocation address"
 msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
 
-#: elf32-xtensa.c:9071
+#: elf32-xtensa.c:9769
 msgid "overflow after relaxation"
 msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð½Ð°ÐºÐ¾Ð½ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
 
-#: elf32-xtensa.c:10203
-msgid "%B(%A+0x%lx): unexpected fix for %s relocation"
-msgstr "%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° Ð·Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: elf32-xtensa.c:10915
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° Ð·Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elf32-z80.c:473
+#, c-format
+msgid "%pB: unsupported bfd mach %#lx"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð±Ñ„Ð´ Ð¿Ð¾ÐºÐ»Ð°Ð¿Ð°ÑšÐµ â€ž%#lxâ€œ"
+
+#: elf32-z80.c:518
+#, c-format
+msgid "%pB: unsupported mach %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ð¾ÐºÐ»Ð°Ð¿Ð°ÑšÐµ â€ž%#xâ€œ"
+
+#: elf32-z80.c:546
+#, c-format
+msgid "%pB: unsupported arch %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€ž%#xâ€œ"
 
 #: elf64-alpha.c:474
 msgid "GPDISP relocation did not find ldah and lda instructions"
 msgstr "â€žGPDISPâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð½Ð°ÑˆÐ»Ð¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žldahâ€œ Ð¸ â€žldaâ€œ"
 
-#: elf64-alpha.c:2503
-msgid "%B: .got subsegment exceeds 64K (size %d)"
-msgstr "%B: Ð¿Ð¾Ð´-Ð¿Ð¾Ð´ÐµÐ¾Ðº â€ž.gotâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ 64K (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ %d)"
-
-#: elf64-alpha.c:4396 elf64-alpha.c:4408
-msgid "%B: gp-relative relocation against dynamic symbol %s"
-msgstr "%B: â€žgpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
-
-#: elf64-alpha.c:4434 elf64-alpha.c:4574
-msgid "%B: pc-relative relocation against dynamic symbol %s"
-msgstr "%B: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
-
-#: elf64-alpha.c:4462
-msgid "%B: change in gp: BRSGP %s"
-msgstr "%B: Ð¸Ð·Ð¼ÐµÐ½Ð° Ñƒ â€žgpâ€œ-Ñƒ: BRSGP %s"
+#: elf64-alpha.c:1985
+#, c-format
+msgid "%pB: dynamic relocation against a local symbol in read-only section `%pA'\n"
+msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ\n"
+
+#: elf64-alpha.c:2437
+#, c-format
+msgid "%pB: .got subsegment exceeds 64K (size %d)"
+msgstr "%pB: Ð¿Ð¾Ð´-Ð¿Ð¾Ð´ÐµÐ¾Ðº â€ž.gotâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ 64K (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ %d)"
+
+#: elf64-alpha.c:2680 elflink.c:15481 elfnn-kvx.c:4022 elfnn-loongarch.c:1715
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ\n"
+
+#: elf64-alpha.c:2975 elf64-alpha.c:3170
+#, c-format
+msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
+msgstr "%pB: %pA+%#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð³ ÑƒÐ»Ð°Ð·Ð½Ð¾Ð³ Ð·Ð½Ð°ÐºÐ°"
+
+#: elf64-alpha.c:4370 elf64-alpha.c:4383
+#, c-format
+msgid "%pB: gp-relative relocation against dynamic symbol %s"
+msgstr "%pB: â€žgpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf64-alpha.c:4439
+#, c-format
+msgid "%pB: change in gp: BRSGP %s"
+msgstr "%pB: Ð¸Ð·Ð¼ÐµÐ½Ð° Ñƒ â€žgpâ€œ-Ñƒ: BRSGP %s"
 
-#: elf64-alpha.c:4487
+#: elf64-alpha.c:4464 mach-o.c:625 elfnn-riscv.c:722 elfnn-riscv.c:921
+#: elfnn-riscv.c:963
 msgid "<unknown>"
 msgstr "<Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾>"
 
-#: elf64-alpha.c:4492
-msgid "%B: !samegp reloc against symbol without .prologue: %s"
-msgstr "%B: â€ž!samegpâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð±ÐµÐ· â€ž.prologueâ€œ-Ð°: %s"
+#: elf64-alpha.c:4470
+#, c-format
+msgid "%pB: !samegp reloc against symbol without .prologue: %s"
+msgstr "%pB: â€ž!samegpâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð±ÐµÐ· â€ž.prologueâ€œ-Ð°: %s"
 
-#: elf64-alpha.c:4549
-msgid "%B: unhandled dynamic relocation against %s"
-msgstr "%B: Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ"
+#: elf64-alpha.c:4528
+#, c-format
+msgid "%pB: unhandled dynamic relocation against %s"
+msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ"
 
-#: elf64-alpha.c:4581
-msgid "%B: pc-relative relocation against undefined weak symbol %s"
-msgstr "%B: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð»Ð°Ð±Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-alpha.c:4563
+#, c-format
+msgid "%pB: pc-relative relocation against undefined weak symbol %s"
+msgstr "%pB: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð»Ð°Ð±Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-alpha.c:4645
-msgid "%B: dtp-relative relocation against dynamic symbol %s"
-msgstr "%B: â€ždtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-alpha.c:4629
+#, c-format
+msgid "%pB: dtp-relative relocation against dynamic symbol %s"
+msgstr "%pB: â€ždtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-alpha.c:4668
-msgid "%B: tp-relative relocation against dynamic symbol %s"
-msgstr "%B: â€žtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-alpha.c:4654
+#, c-format
+msgid "%pB: tp-relative relocation against dynamic symbol %s"
+msgstr "%pB: â€žtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-hppa.c:2084
+#. Only if it's not an unresolved symbol.
+#: elf64-bpf.c:344
+msgid "internal error: relocation not supported"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elf64-gen.c:71
+#, c-format
+msgid "%pB: Relocations in generic ELF (EM: %d)"
+msgstr "%pB: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð¿ÑˆÑ‚ÐµÐ¼ â€žELFâ€œ-Ñƒ (EM: %d)"
+
+#: elf64-hppa.c:2032
 #, c-format
-msgid "stub entry for %s cannot load .plt, dp offset = %ld"
-msgstr "ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð·Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð° â€ž.pltâ€œ, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ â€ždpâ€œ = %ld"
+msgid "stub entry for %s cannot load .plt, dp offset = %<PRId64>"
+msgstr "ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð·Ð° â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð° â€ž.pltâ€œ, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ â€ždpâ€œ = %<PRId64>"
 
-#: elf64-hppa.c:3280
-msgid "%B(%A+0x%"
-msgstr "%B(%A+0x%"
+#: elf64-hppa.c:3236
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot reach %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ñ�Ñ‚Ð¸Ñ›Ð¸ â€ž%sâ€œ"
 
-#: elf64-ia64-vms.c:587 elf32-ia64.c:619 elf64-ia64.c:619
-msgid "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch."
-msgstr "%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼ â€žbrâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ. ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€žbrlâ€œ Ð¸Ð»Ð¸ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ñƒ."
+#: elf64-ia64-vms.c:600 elfnn-ia64.c:641
+#, c-format
+msgid "%pB: can't relax br at %#<PRIx64> in section `%pA'; please use brl or indirect branch"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼ â€žbrâ€œ Ð½Ð° %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€žbrlâ€œ Ð¸Ð»Ð¸ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ñƒ"
 
-#: elf64-ia64-vms.c:2027 elf32-ia64.c:2278 elf64-ia64.c:2278
+#: elf64-ia64-vms.c:2032 elfnn-ia64.c:2294
 msgid "@pltoff reloc against local symbol"
 msgstr "â€ž@pltoffâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
 
-#: elf64-ia64-vms.c:3279 elf32-ia64.c:3684 elf64-ia64.c:3684
+#: elf64-ia64-vms.c:3278 elfnn-ia64.c:3671
 #, c-format
-msgid "%s: short data segment overflowed (0x%lx >= 0x400000)"
-msgstr "%s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° ÐºÑ€Ð°Ñ‚ÐºÐ¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (0x%lx >= 0x400000)"
+msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
+msgstr "%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° ÐºÑ€Ð°Ñ‚ÐºÐ¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (%#<PRIx64> >= 0x400000)"
 
-#: elf64-ia64-vms.c:3290 elf32-ia64.c:3695 elf64-ia64.c:3695
+#: elf64-ia64-vms.c:3288 elfnn-ia64.c:3681
 #, c-format
-msgid "%s: __gp does not cover short data segment"
-msgstr "%s: â€ž__gpâ€œ Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ ÐºÑ€Ð°Ñ‚ÐºÐ¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+msgid "%pB: __gp does not cover short data segment"
+msgstr "%pB: â€ž__gpâ€œ Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ ÐºÑ€Ð°Ñ‚ÐºÐ¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
 
-#: elf64-ia64-vms.c:3555 elf32-ia64.c:3962 elf64-ia64.c:3962
-msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'"
-msgstr "%B: Ð½Ðµ-Ð¿Ð¸Ðº ÐºÐ¾Ð´ Ñ�Ð° â€žimmâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¼ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-ia64-vms.c:3558 elfnn-ia64.c:3954
+#, c-format
+msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
+msgstr "%pB: Ð½Ðµ-â€žpicâ€œ ÐºÐ¾Ð´ Ñ�Ð° â€žimmâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¼ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-ia64-vms.c:3617 elf32-ia64.c:4029 elf64-ia64.c:4029
-msgid "%B: @gprel relocation against dynamic symbol %s"
-msgstr "%B: â€ž@gprelâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-ia64-vms.c:3622 elfnn-ia64.c:4022
+#, c-format
+msgid "%pB: @gprel relocation against dynamic symbol %s"
+msgstr "%pB: â€ž@gprelâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-ia64-vms.c:3676 elf32-ia64.c:4092 elf64-ia64.c:4092
-msgid "%B: linking non-pic code in a position independent executable"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð½Ðµ-Ð¿Ð¸Ðº ÐºÐ¾Ð´ Ñƒ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð¼ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð½Ð¾Ð¼ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°"
+#: elf64-ia64-vms.c:3681 elfnn-ia64.c:4085
+#, c-format
+msgid "%pB: linking non-pic code in a position independent executable"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð½Ðµ-â€žpicâ€œ ÐºÐ¾Ð´ Ñƒ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð¼ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð½Ð¾Ð¼ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°"
 
-#: elf64-ia64-vms.c:3777 elf32-ia64.c:4229 elf64-ia64.c:4229
-msgid "%B: @internal branch to dynamic symbol %s"
-msgstr "%B: â€ž@internalâ€œ Ð³Ñ€Ð°Ð½Ð° ÐºÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ"
+#: elf64-ia64-vms.c:3783 elfnn-ia64.c:4223
+#, c-format
+msgid "%pB: @internal branch to dynamic symbol %s"
+msgstr "%pB: â€ž@internalâ€œ Ð³Ñ€Ð°Ð½Ð° ÐºÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ"
 
-#: elf64-ia64-vms.c:3779 elf32-ia64.c:4231 elf64-ia64.c:4231
-msgid "%B: speculation fixup to dynamic symbol %s"
-msgstr "%B: Ñ€Ð°Ð·Ð¼Ð°Ñ‚Ñ€Ð°Ð¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÑƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4226
+#, c-format
+msgid "%pB: speculation fixup to dynamic symbol %s"
+msgstr "%pB: Ñ€Ð°Ð·Ð¼Ð°Ñ‚Ñ€Ð°Ð¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÑƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-ia64-vms.c:3781 elf32-ia64.c:4233 elf64-ia64.c:4233
-msgid "%B: @pcrel relocation against dynamic symbol %s"
-msgstr "%B: â€ž@pcrelâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4229
+#, c-format
+msgid "%pB: @pcrel relocation against dynamic symbol %s"
+msgstr "%pB: â€ž@pcrelâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-ia64-vms.c:3905 elf32-ia64.c:4430 elf64-ia64.c:4430
+#: elf64-ia64-vms.c:3913 elfnn-ia64.c:4426
 msgid "unsupported reloc"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: elf64-ia64-vms.c:3942 elf32-ia64.c:4468 elf64-ia64.c:4468
-msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'."
-msgstr "%B: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¢Ð›Ð¡ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ."
+#: elf64-ia64-vms.c:3950 elfnn-ia64.c:4464
+#, c-format
+msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
+msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€žTLSâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð½Ð° %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ."
 
-#: elf64-ia64-vms.c:3957 elf32-ia64.c:4483 elf64-ia64.c:4483
-msgid "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)."
-msgstr "%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼ â€žbrâ€œ (%s) Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¾Ð¼ 0x%lx (> 0x1000000)."
+#: elf64-ia64-vms.c:3967 elfnn-ia64.c:4481
+#, c-format
+msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
+msgstr "%pB: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼ â€žbrâ€œ (%s) Ñƒ â€ž%sâ€œ Ð½Ð° %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¾Ð¼ %#<PRIx64> (> 0x1000000)."
 
-#: elf64-ia64-vms.c:4246 elf32-ia64.c:4745 elf64-ia64.c:4745
-msgid "%B: linking trap-on-NULL-dereference with non-trapping files"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ…Ð²Ð°Ñ‚-Ð½Ð°-Ð�Ð˜Ð¨Ð¢Ð�Ð’Ð�ÐžÐˆ-Ð´ÐµÑ€ÐµÑ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ�Ð° Ð½Ðµ-Ð·Ð°Ñ…Ð²Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°"
+#: elf64-ia64-vms.c:4263 elfnn-ia64.c:4742
+#, c-format
+msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ…Ð²Ð°Ñ‚-Ð½Ð°-Ð�Ð˜Ð¨Ð¢Ð�Ð’Ð�ÐžÐˆ-Ð´ÐµÑ€ÐµÑ„ÐµÑ€ÐµÐ½Ñ†Ð¸ Ñ�Ð° Ð½Ðµ-Ð·Ð°Ñ…Ð²Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°"
 
-#: elf64-ia64-vms.c:4255 elf32-ia64.c:4754 elf64-ia64.c:4754
-msgid "%B: linking big-endian files with little-endian files"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸"
+#: elf64-ia64-vms.c:4272 elfnn-ia64.c:4751
+#, c-format
+msgid "%pB: linking big-endian files with little-endian files"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸"
 
-#: elf64-ia64-vms.c:4264 elf32-ia64.c:4763 elf64-ia64.c:4763
-msgid "%B: linking 64-bit files with 32-bit files"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ 64-Ð±Ð¸Ñ‚Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ð° 32-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°"
+#: elf64-ia64-vms.c:4281 elfnn-ia64.c:4760
+#, c-format
+msgid "%pB: linking 64-bit files with 32-bit files"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ 64-Ð±Ð¸Ñ‚Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ð° 32-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°"
 
-#: elf64-ia64-vms.c:4273 elf32-ia64.c:4772 elf64-ia64.c:4772
-msgid "%B: linking constant-gp files with non-constant-gp files"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€žÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ð³-Ð³Ð¿â€œ-Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° â€žÐ½Ðµ-ÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ð³-Ð³Ð¿â€œ-Ð°"
+#: elf64-ia64-vms.c:4290 elfnn-ia64.c:4769
+#, c-format
+msgid "%pB: linking constant-gp files with non-constant-gp files"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€žÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ð³-Ð³Ð¿â€œ-Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° â€žÐ½Ðµ-ÐºÐ¾Ð½Ñ�Ñ‚Ð°Ð½Ñ‚Ð½Ð¾Ð³-Ð³Ð¿â€œ-Ð°"
 
-#: elf64-ia64-vms.c:4283 elf32-ia64.c:4782 elf64-ia64.c:4782
-msgid "%B: linking auto-pic files with non-auto-pic files"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€žÐ°ÑƒÑ‚Ð¾-Ð¿Ð¸Ðºâ€œ-Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° â€žÐ½Ðµ-Ð°ÑƒÑ‚Ð¾-Ð¿Ð¸Ðºâ€œ-Ð°"
+#: elf64-ia64-vms.c:4300 elfnn-ia64.c:4779
+#, c-format
+msgid "%pB: linking auto-pic files with non-auto-pic files"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°ÑƒÑ‚Ð¾-â€žpicâ€œ-Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð½Ðµ-Ð°ÑƒÑ‚Ð¾-â€žpicâ€œ"
 
-#: elf64-ia64-vms.c:5125 elflink.c:4299
-msgid "Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %A"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%Bâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ðµ Ð¾Ð´ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° (%u) ÑšÐµÐ³Ð¾Ð²Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ"
+#: elf64-ia64-vms.c:5150 elflink.c:5338
+#, c-format
+msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ðµ Ð¾Ð´ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° (%u) ÑšÐµÐ³Ð¾Ð²Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ"
 
-#: elf64-ia64-vms.c:5131 elflink.c:4305
-msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%Bâ€œ Ñ˜Ðµ Ð¼Ð°ÑšÐµ Ð¾Ð´ â€ž%uâ€œ Ñƒ â€ž%Bâ€œ"
+#: elf64-ia64-vms.c:5157
+#, c-format
+msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ Ñ˜Ðµ Ð¼Ð°ÑšÐµ Ð¾Ð´ â€ž%uâ€œ Ñƒ â€ž%pBâ€œ"
 
-#: elf64-ia64-vms.c:5146 elflink.c:4321
-msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ð¸Ð· â€ž%luâ€œ Ñƒ â€ž%Bâ€œ Ñƒ â€ž%luâ€œ Ñƒ â€ž%Bâ€œ"
+#: elf64-ia64-vms.c:5173 elflink.c:5367
+#, c-format
+msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ð¸Ð· â€ž%<PRIx64>â€œ Ñƒ â€ž%pBâ€œ Ñƒ â€ž%<PRIx64>â€œ Ñƒ â€ž%pBâ€œ"
 
-#: elf64-mmix.c:986
-msgid ""
-"invalid input relocation when producing non-ELF, non-mmo format output.\n"
-" Please use the objcopy program to convert from ELF or mmo,\n"
-" or assemble using \"-no-expand\" (for gcc, \"-Wa,-no-expand\""
-msgstr ""
-"Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ»Ð°Ð·Ð° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð´Ð°Ð²Ð°ÑšÐ° Ð½Ðµ-â€žELFâ€œ, Ð½Ðµ-â€žmmoâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¸Ð·Ð»Ð°Ð·Ð°.\n"
-" ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ â€žobjcopyâ€œ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð¸Ð· â€žELFâ€œ-Ð° Ð¸Ð»Ð¸ â€žmmoâ€œ-Ð°,\n"
-" Ð¸Ð»Ð¸ Ñ�Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÐµÑ›Ð¸ â€ž-no-expandâ€œ (Ð·Ð° Ð³Ñ†Ñ†, â€ž-Wa,-no-expandâ€œ)"
+#: elf64-mips.c:4102
+#, c-format
+msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
+msgstr "%pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%<PRIx64>â€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld"
 
-#: elf64-mmix.c:1170
-msgid ""
-"invalid input relocation when producing non-ELF, non-mmo format output.\n"
-" Please use the objcopy program to convert from ELF or mmo,\n"
-" or compile using the gcc-option \"-mno-base-addresses\"."
-msgstr ""
-"Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ»Ð°Ð·Ð° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð´Ð°Ð²Ð°ÑšÐ° Ð½Ðµ-â€žELFâ€œ, Ð½Ðµ-â€žmmoâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¸Ð·Ð»Ð°Ð·Ð°.\n"
-" ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ â€žobjcopyâ€œ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð¸Ð· â€žELFâ€œ-Ð° Ð¸Ð»Ð¸ â€žmmoâ€œ-Ð°,\n"
-" Ð¸Ð»Ð¸ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÐµÑ›Ð¸ Ð³Ñ†Ñ†-Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-mno-base-addressesâ€œ."
+#: elf64-mmix.c:984
+msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using \"-no-expand\" (for gcc, \"-Wa,-no-expand\""
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ»Ð°Ð·Ð° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð´Ð°Ð²Ð°ÑšÐ° Ð½Ðµ-â€žELFâ€œ, Ð½Ðµ-â€žmmoâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¸Ð·Ð»Ð°Ð·Ð°; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ â€žobjcopyâ€œ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð¸Ð· â€žELFâ€œ-Ð° Ð¸Ð»Ð¸ â€žmmoâ€œ-Ð°, Ð¸Ð»Ð¸ Ñ�Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÐµÑ›Ð¸ â€ž-no-expandâ€œ (Ð·Ð° Ð³Ñ†Ñ†, â€ž-Wa,-no-expandâ€œ)"
 
-#: elf64-mmix.c:1196
+#: elf64-mmix.c:1168
+msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option \"-mno-base-addresses\"."
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ»Ð°Ð·Ð° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð´Ð°Ð²Ð°ÑšÐ° Ð½Ðµ-â€žELFâ€œ, Ð½Ðµ-â€žmmoâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¸Ð·Ð»Ð°Ð·Ð°; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ â€žobjcopyâ€œ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð¸Ð· â€žELFâ€œ-Ð° Ð¸Ð»Ð¸ â€žmmoâ€œ-Ð°, Ð¸Ð»Ð¸ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÐµÑ›Ð¸ Ð³Ñ†Ñ†-Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-mno-base-addressesâ€œ."
+
+#: elf64-mmix.c:1195
 #, c-format
 msgid ""
-"%s: Internal inconsistency error for value for\n"
-" linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx\n"
+"%pB: Internal inconsistency error for value for\n"
+" linker-allocated global register: linked: %#<PRIx64> != relaxed: %#<PRIx64>"
 msgstr ""
-"%s: Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð·Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð·Ð°\n"
-" Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡ÐµÐ¼: Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾: 0x%lx%08lx != Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾: 0x%lx%08lx\n"
+"%pB: Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð·Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð·Ð°\n"
+" Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡ÐµÐ¼: Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾: %#<PRIx64> != Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾: %#<PRIx64>"
 
-#: elf64-mmix.c:1618
+#: elf64-mmix.c:1619
 #, c-format
-msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s"
-msgstr "%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ð¿Ð»ÑƒÑ� Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: (Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾) Ñƒ â€ž%sâ€œ"
+msgid "%pB: base-plus-offset relocation against register symbol: (unknown) in %pA"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ð¿Ð»ÑƒÑ� Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: (Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾) Ñƒ â€ž%pAâ€œ"
 
-#: elf64-mmix.c:1623
+#: elf64-mmix.c:1625
 #, c-format
-msgid "%s: base-plus-offset relocation against register symbol: %s in %s"
-msgstr "%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ð¿Ð»ÑƒÑ� Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: â€ž%sâ€œ Ñƒ â€ž%sâ€œ"
+msgid "%pB: base-plus-offset relocation against register symbol: %s in %pA"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ð¿Ð»ÑƒÑ� Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: â€ž%sâ€œ Ñƒ â€ž%pAâ€œ"
 
-#: elf64-mmix.c:1667
+#: elf64-mmix.c:1670
 #, c-format
-msgid "%s: register relocation against non-register symbol: (unknown) in %s"
-msgstr "%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð½Ðµ-Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: (Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾) Ñƒ â€ž%sâ€œ"
+msgid "%pB: register relocation against non-register symbol: (unknown) in %pA"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð½Ðµ-Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: (Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾) Ñƒ â€ž%pAâ€œ"
 
-#: elf64-mmix.c:1672
+#: elf64-mmix.c:1676
 #, c-format
-msgid "%s: register relocation against non-register symbol: %s in %s"
-msgstr "%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð½Ðµ-Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: â€ž%sâ€œ Ñƒ â€ž%sâ€œ"
+msgid "%pB: register relocation against non-register symbol: %s in %pA"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð½Ðµ-Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°: â€ž%sâ€œ Ñƒ â€ž%pAâ€œ"
 
-#: elf64-mmix.c:1709
+#: elf64-mmix.c:1713
 #, c-format
-msgid "%s: directive LOCAL valid only with a register or absolute value"
-msgstr "%s: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° â€žLOCALâ€œ Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ñ�Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð¼ Ð¸Ð»Ð¸ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð¼ Ð²Ñ€ÐµÐ´Ð½Ð¾ÑˆÑ›Ñƒ"
+msgid "%pB: directive LOCAL valid only with a register or absolute value"
+msgstr "%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° â€žLOCALâ€œ Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ñ�Ð° Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð¼ Ð¸Ð»Ð¸ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð¼ Ð²Ñ€ÐµÐ´Ð½Ð¾ÑˆÑ›Ñƒ"
 
-#: elf64-mmix.c:1739
+#: elf64-mmix.c:1742
 #, c-format
-msgid "%s: LOCAL directive: Register $%ld is not a local register.  First global register is $%ld."
-msgstr "%s: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° â€žLOCALâ€œ: Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ â€ž$%ldâ€œ Ð½Ð¸Ñ˜Ðµ Ð¼ÐµÑ�Ð½Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€.  ÐŸÑ€Ð²Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ñ˜Ðµ â€ž$%ldâ€œ."
+msgid "%pB: LOCAL directive: register $%<PRId64> is not a local register; first global register is $%<PRId64>"
+msgstr "%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° â€žLOCALâ€œ: Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ â€ž$%<PRId64>â€œ Ð½Ð¸Ñ˜Ðµ Ð¼ÐµÑ�Ð½Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€; Ð¿Ñ€Ð²Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ñ˜Ðµ â€ž$%<PRId64>â€œ"
 
-#: elf64-mmix.c:2198
+#: elf64-mmix.c:2157
 #, c-format
-msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n"
-msgstr "%s: Ð“Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð·Ð° â€ž%sâ€œ; Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½ Ñƒ Ñ€Ð°Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸\n"
+msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð·Ð° â€ž%sâ€œ; Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½ Ñƒ Ñ€Ð°Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: elf64-mmix.c:2252
-msgid "Register section has contents\n"
-msgstr "ÐžÐ´ÐµÑ™Ð°Ðº Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
+#: elf64-mmix.c:2212
+msgid "register section has contents\n"
+msgstr "Ð¾Ð´ÐµÑ™Ð°Ðº Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
 
-#: elf64-mmix.c:2441
+#: elf64-mmix.c:2402
 #, c-format
-msgid ""
-"Internal inconsistency: remaining %u != max %u.\n"
-"  Please report this bug."
-msgstr ""
-"Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚: Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ñ˜Ðµ %u != Ð½Ð°Ñ˜Ð². %u.\n"
-"  ÐŸÑ€Ð¸Ñ˜Ð°Ð²Ð¸Ñ‚Ðµ Ð¾Ð²Ñƒ Ð³Ñ€ÐµÑˆÐºÑƒ."
+msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚: Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ñ˜Ðµ %lu != max %lu; Ð¿Ñ€Ð¸Ñ˜Ð°Ð²Ð¸Ñ‚Ðµ Ð¾Ð²Ñƒ Ð³Ñ€ÐµÑˆÐºÑƒ"
 
-#: elf64-ppc.c:4463
-msgid "%P: %B: cannot create stub entry %s\n"
-msgstr "%P: %B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ\n"
+#: elf64-ppc.c:1361
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ñ�Ðµ Ñ‚Ñ€ÐµÐ±Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ â€ž%sâ€œ"
 
-#: elf64-ppc.c:4810
-msgid "%P: symbol '%s' has invalid st_other for ABI version 1\n"
-msgstr "%P: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ â€žst_otherâ€œ Ð·Ð° Ð�Ð‘Ð˜ Ð¸Ð·Ð´Ð°ÑšÐµ 1\n"
+#: elf64-ppc.c:4307
+#, c-format
+msgid "symbol '%s' has invalid st_other for ABI version 1"
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ â€žst_otherâ€œ Ð·Ð° Ð�Ð‘Ð˜ Ð¸Ð·Ð´Ð°ÑšÐµ 1"
 
-#: elf64-ppc.c:5170
-msgid "%P: .opd not allowed in ABI version %d\n"
-msgstr "%P: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½ Ñƒ Ð�Ð‘Ð˜-Ñ˜Ñƒ Ð¸Ð·Ð´Ð°ÑšÐµ %d\n"
+#: elf64-ppc.c:4490
+#, c-format
+msgid "%pB .opd not allowed in ABI version %d"
+msgstr "%pB: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½ Ñƒ â€žABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d"
+
+#: elf64-ppc.c:5085
+#, c-format
+msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
+msgstr "%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð¸ â€žPIEâ€œ-Ð¸Ð¼Ð°\n"
+
+#: elf64-ppc.c:5255
+msgid "%H: %s reloc unsupported here\n"
+msgstr "%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¾Ð²Ð´Ðµ\n"
 
-#: elf64-ppc.c:5809
-msgid "%B uses unknown e_flags 0x%lx"
-msgstr "â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€že_flagsâ€œ 0x%lx"
+#: elf64-ppc.c:5482
+#, c-format
+msgid "%pB uses unknown e_flags 0x%lx"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€že_flagsâ€œ 0x%lx"
 
-#: elf64-ppc.c:5816
-msgid "%B: ABI version %ld is not compatible with ABI version %ld output"
-msgstr "%B: Ð�Ð‘Ð˜ Ð¸Ð·Ð´Ð°ÑšÐµ %ld Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° Ð�Ð‘Ð˜-Ñ˜ÐµÐ¼ Ð¸Ð·Ð´Ð°ÑšÐ° %ld"
+#: elf64-ppc.c:5490
+#, c-format
+msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
+msgstr "%pB: â€žABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %ld Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° â€žABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐ° %ld"
 
-#: elf64-ppc.c:5843
+#: elf64-ppc.c:5517
 #, c-format
 msgid " [abiv%ld]"
 msgstr " [abiv%ld]"
 
-#: elf64-ppc.c:7007
-msgid "%P: copy reloc against `%T' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
-msgstr "%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ð²Ð°ÑšÐ° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%Tâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð»ÐµÑšÐ¾ â€žpltâ€œ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ; Ð¸Ð·Ð±ÐµÐ³Ð°Ð²Ð°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ â€žLD_BIND_NOW=1â€œ Ð¸Ð»Ð¸ Ð½Ð°Ð´Ð¾Ð³Ñ€Ð°Ð´Ð¸Ñ‚Ðµ Ð³Ñ†Ñ†\n"
-
-#: elf64-ppc.c:7270
-msgid "%B: undefined symbol on R_PPC64_TOCSAVE relocation"
-msgstr "%B: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð° â€žR_PPC64_TOCSAVEâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ"
-
-#: elf64-ppc.c:7499
-msgid "%P: dynreloc miscount for %B, section %A\n"
-msgstr "%P: Ð³Ñ€ÐµÑˆÐºÐ° Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð·Ð° â€ž%Bâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ\n"
-
-#: elf64-ppc.c:7583
-msgid "%B: .opd is not a regular array of opd entries"
-msgstr "%B: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ñ€ÐµÐ³ÑƒÐ»Ð°Ñ€Ð°Ð½ Ð½Ð¸Ð· ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð°"
-
-#: elf64-ppc.c:7592
-msgid "%B: unexpected reloc type %u in .opd section"
-msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%uâ€œ Ñƒ â€ž.opdâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ"
-
-#: elf64-ppc.c:7613
-msgid "%B: undefined sym `%s' in .opd section"
-msgstr "%B: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž.opdâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ"
+#: elf64-ppc.c:6821
+msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
+msgstr "%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ð²Ð°ÑšÐ° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð»ÐµÑšÐ¾ â€žpltâ€œ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ; Ð¸Ð·Ð±ÐµÐ³Ð°Ð²Ð°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ â€žLD_BIND_NOW=1â€œ Ð¸Ð»Ð¸ Ð½Ð°Ð´Ð¾Ð³Ñ€Ð°Ð´Ð¸Ñ‚Ðµ Ð³Ñ†Ñ†\n"
+
+#: elf64-ppc.c:7088
+#, c-format
+msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
+msgstr "%pB: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð° â€žR_PPC64_TOCSAVEâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ"
+
+#: elf64-ppc.c:7343
+#, c-format
+msgid "dynreloc miscount for %pB, section %pA"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð·Ð° â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
+
+#: elf64-ppc.c:7434
+#, c-format
+msgid "%pB: .opd is not a regular array of opd entries"
+msgstr "%pB: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ñ€ÐµÐ³ÑƒÐ»Ð°Ñ€Ð°Ð½ Ð½Ð¸Ð· ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð°"
+
+#: elf64-ppc.c:7444
+#, c-format
+msgid "%pB: unexpected reloc type %u in .opd section"
+msgstr "%pB: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%uâ€œ Ñƒ â€ž.opdâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ"
+
+#: elf64-ppc.c:7466
+#, c-format
+msgid "%pB: undefined sym `%s' in .opd section"
+msgstr "%pB: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž.opdâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ"
 
-#: elf64-ppc.c:8177
+#. The issue is that __glink_PLTresolve saves r2, which is done
+#. because glibc ld.so _dl_runtime_resolve restores r2 to support
+#. a glibc plt call optimisation where global entry code is
+#. skipped on calls that resolve to the same binary.  The
+#. __glink_PLTresolve save of r2 is incompatible with code
+#. making tail calls, because the tail call might go via the
+#. resolver and thus overwrite the proper saved r2.
+#: elf64-ppc.c:7967
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--plt-localentryâ€œ Ñ˜Ðµ Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° â€žpower10 pc-relativeâ€œ ÐºÐ¾Ð´Ð¾Ð¼"
+
+#: elf64-ppc.c:7975
+msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--plt-localentryâ€œ Ñ˜Ðµ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð¾ Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð±ÐµÐ· â€žld.soâ€œ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð·Ð° Ð¾Ñ‚ÐºÑ€Ð¸Ð²Ð°ÑšÐµ â€žABIâ€œ Ð¿Ñ€ÐµÑ�Ñ‚ÑƒÐ¿Ð°"
+
+#: elf64-ppc.c:8291
 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
 msgstr "â€ž%Hâ€œ â€ž__tls_get_addrâ€œ Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ð¸Ð¾ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚, Ð¢Ð›Ð¡ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½Ð°\n"
 
-#: elf64-ppc.c:8516 elf64-ppc.c:9139
+#: elf64-ppc.c:8726 elf64-ppc.c:9442
 #, c-format
 msgid "%s defined on removed toc entry"
 msgstr "â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð½Ð° ÑƒÐºÐ»Ð¾ÑšÐµÐ½Ð¾Ð¼ ÑƒÐ½Ð¾Ñ�Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°"
 
-#: elf64-ppc.c:8868
-msgid "%P: %H: toc optimization is not supported for %s instruction.\n"
-msgstr "%P: %H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð·Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ.\n"
-
-#: elf64-ppc.c:9096
-msgid "%P: %H: %s references optimized away TOC entry\n"
-msgstr "%P: %H: â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð¾Ð¼ Ð¾Ð´Ñ�Ñ‚Ñ€Ð°ÑšÐµÐ½Ð¸ ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°\n"
-
-#: elf64-ppc.c:10394
-msgid "%P: cannot find opd entry toc for `%T'\n"
-msgstr "%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð·Ð° â€ž%Tâ€œ\n"
-
-#: elf64-ppc.c:10479
-msgid "%P: long branch stub `%s' offset overflow\n"
-msgstr "%P: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ð´ÑƒÐ³Ð¾Ð³ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ\n"
-
-#: elf64-ppc.c:10538
-msgid "%P: can't find branch stub `%s'\n"
-msgstr "%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ\n"
-
-#: elf64-ppc.c:10602 elf64-ppc.c:10749 elf64-ppc.c:12416
-msgid "%P: linkage table error against `%T'\n"
-msgstr "%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%Tâ€œ\n"
-
-#: elf64-ppc.c:10940
-msgid "%P: can't build branch stub `%s'\n"
-msgstr "%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ\n"
-
-#: elf64-ppc.c:11748
-msgid "%B section %A exceeds stub group size"
-msgstr "â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð³Ñ€ÑƒÐ¿Ðµ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ°"
-
-#: elf64-ppc.c:12662 elf64-ppc.c:12697
-msgid "%P: %s offset too large for .eh_frame sdata4 encoding"
-msgstr "%P: â€ž%sâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº Ð·Ð° â€ž.eh_frame sdata4â€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ"
-
-#: elf64-ppc.c:12758
-msgid "%P: stubs don't match calculated size\n"
-msgstr "%P: Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜Ñƒ Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ñ‚Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸\n"
-
-#: elf64-ppc.c:12770
-#, c-format
-msgid ""
-"linker stubs in %u group%s\n"
-"  branch       %lu\n"
-"  toc adjust   %lu\n"
-"  long branch  %lu\n"
-"  long toc adj %lu\n"
-"  plt call     %lu\n"
-"  plt call toc %lu"
-msgstr ""
-"Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ â€ž%uâ€œ Ð³Ñ€ÑƒÐ¿Ð° â€ž%sâ€œ\n"
-"  Ð³Ñ€Ð°Ð½Ð°            %lu\n"
-"  Ñ‚Ð°Ñ� ÑƒÑ€ÐµÑ’ÐµÑšÐµ      %lu\n"
-"  Ð´ÑƒÐ³Ð° Ð±Ñ€Ð°Ð½Ð°       %lu\n"
-"  ÑƒÑ€ÐµÑ’ÐµÑšÐµ Ð´ÑƒÐ³Ðµ Ñ‚Ð°Ñ� %lu\n"
-"  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð²        %lu\n"
-"  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ñ‚Ð°Ñ�   %lu"
-
-#: elf64-ppc.c:13096
-msgid "%P: %H: %s used with TLS symbol `%T'\n"
-msgstr "%P: %H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° Ð¢Ð›Ð¡ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%Tâ€œ\n"
-
-#: elf64-ppc.c:13097
-msgid "%P: %H: %s used with non-TLS symbol `%T'\n"
-msgstr "%P: %H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° Ð½Ðµ-Ð¢Ð›Ð¡ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%Tâ€œ\n"
-
-#: elf64-ppc.c:13675
-msgid "%P: %H: call to `%T' lacks nop, can't restore toc; recompile with -fPIC\n"
-msgstr "%P: %H: Ð¿Ð¾Ð·Ð¸Ð²Ñƒ Ð·Ð° â€ž%Tâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€žnopâ€œ, Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð²Ñ€Ð°Ñ‚Ð¸Ð¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ\n"
-
-#: elf64-ppc.c:13793
-msgid "%P: %B: unknown relocation type %d for `%T'\n"
-msgstr "%P: %B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð·Ð° â€ž%Tâ€œ\n"
-
-#: elf64-ppc.c:14310
-msgid "%P: %H: %s for indirect function `%T' unsupported\n"
-msgstr "%P: %H: â€ž%sâ€œ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%Tâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
-
-#: elf64-ppc.c:14417
-msgid "%P: %B: %s is not supported for `%T'\n"
-msgstr "%P: %B: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%Tâ€œ\n"
-
-#: elf64-ppc.c:14565
-msgid "%P: %H: error: %s not a multiple of %u\n"
-msgstr "%P: %H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ\n"
-
-#: elf64-ppc.c:14586
-msgid "%P: %H: unresolvable %s against `%T'\n"
-msgstr "%P: %H: â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%Tâ€œ\n"
-
-#: elf64-ppc.c:14644
-msgid "%P: %H: %s against `%T': error %d\n"
-msgstr "%P: %H: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%Tâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d\n"
-
-#: elf64-sh64.c:1686
-#, c-format
-msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n"
-msgstr "%s: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð½Ð° %08x Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ %08x\n"
-
-#: elf64-sparc.c:446
-msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER"
-msgstr "%B: Ð¡Ð°Ð¼Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¸ â€ž%%g[2367]â€œ Ð¼Ð¾Ð³Ñƒ Ð±Ð¸Ñ‚Ð¸ Ð´ÐµÐºÐ»Ð°Ñ€Ð¸Ñ�Ð°Ð½Ð¸ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žSTT_REGISTERâ€œ"
-
-#: elf64-sparc.c:466
-msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B"
-msgstr "Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ â€ž%%g%dâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½ Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾: â€ž%sâ€œ Ñƒ â€ž%Bâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%Bâ€œ"
-
-#: elf64-sparc.c:489
-msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B"
-msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€žREGISTERâ€œ Ñƒ â€ž%Bâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%Bâ€œ"
-
-#: elf64-sparc.c:534
-msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B"
-msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€ž%sâ€œ Ñƒ â€ž%Bâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žREGISTERâ€œ Ñƒ â€ž%Bâ€œ"
-
-#: elf64-sparc.c:687
-msgid "%B: linking UltraSPARC specific with HAL specific code"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ ÐºÐ¾Ð´ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ â€žUltraSPARCâ€œ-Ñƒ Ñ�Ð° ÐºÐ¾Ð´Ð¾Ð¼ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð¸Ð¼ â€žHALâ€œ-Ñƒ"
-
-#: elf64-x86-64.c:1530
-msgid "%B: relocation %s against symbol `%s' isn't supported in x32 mode"
-msgstr "%B: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ x32"
-
-#: elf64-x86-64.c:1688
-msgid "%B: '%s' accessed both as normal and thread local symbol"
-msgstr "%B: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
-
-#: elf64-x86-64.c:3405 /src/binutils-gdb/bfd/elfnn-aarch64.c:3511
-msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð¸Ð¼Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº: %d"
-
-#: elf64-x86-64.c:3667
-msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_X86_64_GOTOFF64â€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
+#: elf64-ppc.c:9399
+#, c-format
+msgid "%H: %s references optimized away TOC entry\n"
+msgstr "%H: â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð¾Ð¼ Ð¾Ð´Ñ�Ñ‚Ñ€Ð°ÑšÐµÐ½Ð¸ ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°\n"
+
+#: elf64-ppc.c:9620
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð·Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ\n"
+
+#: elf64-ppc.c:10515
+#, c-format
+msgid "warning: discarding dynamic section %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´Ð±Ð°Ñ†ÑƒÑ˜ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+
+#: elf64-ppc.c:11668
+msgid "%P: cannot find opd entry toc for `%pT'\n"
+msgstr "%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð·Ð° â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:11818
+#, c-format
+msgid "long branch stub `%s' offset overflow"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ð´ÑƒÐ³Ð¾Ð³ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ"
+
+#: elf64-ppc.c:11845
+#, c-format
+msgid "can't find branch stub `%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ"
+
+#: elf64-ppc.c:11906 elf64-ppc.c:12158 elf64-ppc.c:14724
+#, c-format
+msgid "%P: linkage table error against `%pT'\n"
+msgstr "%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:12357
+#, c-format
+msgid "can't build branch stub `%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ"
+
+#: elf64-ppc.c:13384
+#, c-format
+msgid "%pB section %pA exceeds stub group size"
+msgstr "â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð³Ñ€ÑƒÐ¿Ðµ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ°"
+
+#: elf64-ppc.c:14904
+msgid "__tls_get_addr call offset overflow"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° â€ž__tls_get_addrâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð°"
+
+#: elf64-ppc.c:15244 elf64-ppc.c:15263
+#, c-format
+msgid "%s offset too large for .eh_frame sdata4 encoding"
+msgstr "â€ž%sâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº Ð·Ð° â€ž.eh_frame sdata4â€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ"
+
+#: elf64-ppc.c:15349
+#, c-format
+msgid "linker stubs in %u group"
+msgid_plural "linker stubs in %u groups"
+msgstr[0] "Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð¸"
+msgstr[1] "Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ %u Ð³Ñ€ÑƒÐ¿Ðµ"
+msgstr[2] "Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°"
+
+#: elf64-ppc.c:15356
+#, c-format
+msgid ""
+"%s, iter %u\n"
+"  branch         %lu\n"
+"  long branch    %lu\n"
+"  plt call       %lu\n"
+"  global entry   %lu"
+msgstr ""
+"%s, Ð¿Ð¾Ð½Ð°Ð²Ñ™Ð°ÑšÐµ %u\n"
+"  Ð³Ñ€Ð°Ð½Ð°          %lu\n"
+"  Ð´ÑƒÐ³Ð° Ð³Ñ€Ð°Ð½Ð°     %lu\n"
+"  â€žpltâ€œ Ð¿Ð¾Ð·Ð¸Ð²    %lu\n"
+"  Ð¾Ð¿ÑˆÑ‚Ð¸ ÑƒÐ½Ð¾Ñ�     %lu"
+
+#: elf64-ppc.c:15738
+#, c-format
+msgid "%H: %s used with TLS symbol `%pT'\n"
+msgstr "%H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:15740
+#, c-format
+msgid "%H: %s used with non-TLS symbol `%pT'\n"
+msgstr "%H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° Ð½Ðµ-â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:16524
+#, c-format
+msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
+msgstr "%H: Ð¿Ð¾Ð·Ð¸Ð²Ñƒ Ð·Ð° â€ž%pTâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€žnopâ€œ, Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð²Ñ€Ð°Ñ‚Ð¸Ð¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°; (plt call stub)\n"
+
+#: elf64-ppc.c:16530
+#, c-format
+msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
+msgstr "%H: Ð¿Ð¾Ð·Ð¸Ð²Ñƒ Ð·Ð° â€ž%pTâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€žnopâ€œ, Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð²Ñ€Ð°Ñ‚Ð¸Ð¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°; (toc save/adjust stub)\n"
+
+#: elf64-ppc.c:17181
+#, c-format
+msgid "%H: %s against %pT is not supported\n"
+msgstr "%H: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
+
+#: elf64-ppc.c:17457
+#, c-format
+msgid "%H: %s for indirect function `%pT' unsupported\n"
+msgstr "%H: â€ž%sâ€œ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%pTâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
+
+#: elf64-ppc.c:17545
+#, c-format
+msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
+msgstr "%X%P: %pB: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žglibcâ€œ-Ð¾Ð¼ ÐºÐ°Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ\n"
+
+#: elf64-ppc.c:17600
+#, c-format
+msgid "%P: %pB: %s is not supported for `%pT'\n"
+msgstr "%P: %pB: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:17869
+#, c-format
+msgid "%H: error: %s not a multiple of %u\n"
+msgstr "%H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ\n"
+
+#: elf64-ppc.c:17892
+#, c-format
+msgid "%H: unresolvable %s against `%pT'\n"
+msgstr "%H: â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:18037
+#, c-format
+msgid "%H: %s against `%pT': error %d\n"
+msgstr "%H: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d\n"
+
+#: elf64-s390.c:2457
+#, c-format
+msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)"
+msgstr "%pB: â€ž%sâ€œ Ð½Ðµ-â€žPLTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ†Ð¸ Ð¸ ÐºÐ¾Ð¼Ðµ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ñ™ÐµÐ½Ð¾ Ð¸Ð· Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð³ (Ð´Ð° Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° â€ž-fPICâ€œ ?)"
+
+#: elf64-s390.c:3066
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): misaligned symbol `%s' (%#<PRIx64>) for relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð»Ð¾ÑˆÐµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ (%#<PRIx64>) Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
+
+#: elf64-sparc.c:134 elfcode.h:1602
+#, c-format
+msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
+msgstr "%pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%dâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld"
+
+#: elf64-sparc.c:493
+#, c-format
+msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
+msgstr "%pB: Ñ�Ð°Ð¼Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¸ â€ž%%g[2367]â€œ Ð¼Ð¾Ð³Ñƒ Ð±Ð¸Ñ‚Ð¸ Ð´ÐµÐºÐ»Ð°Ñ€Ð¸Ñ�Ð°Ð½Ð¸ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žSTT_REGISTERâ€œ"
+
+#: elf64-sparc.c:514
+#, c-format
+msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
+msgstr "Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ â€ž%%g%dâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½ Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾: â€ž%sâ€œ Ñƒ â€ž%pBâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%pBâ€œ"
+
+#: elf64-sparc.c:538
+#, c-format
+msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€žREGISTERâ€œ Ñƒ â€ž%pBâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%pBâ€œ"
+
+#: elf64-sparc.c:585
+#, c-format
+msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€ž%sâ€œ Ñƒ â€ž%pBâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žREGISTERâ€œ Ñƒ â€ž%pBâ€œ"
+
+#: elf64-sparc.c:717
+#, c-format
+msgid "%pB: linking UltraSPARC specific with HAL specific code"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ ÐºÐ¾Ð´ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ â€žUltraSPARCâ€œ-Ñƒ Ñ�Ð° ÐºÐ¾Ð´Ð¾Ð¼ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð¸Ð¼ â€žHALâ€œ-Ñƒ"
+
+#: elf64-x86-64.c:1537
+msgid "hidden symbol "
+msgstr "Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» "
+
+#: elf64-x86-64.c:1540
+msgid "internal symbol "
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» "
+
+#: elf64-x86-64.c:1543 elf64-x86-64.c:1547
+msgid "protected symbol "
+msgstr "Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» "
+
+#: elf64-x86-64.c:1549
+msgid "symbol "
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð» "
+
+#: elf64-x86-64.c:1555
+msgid "undefined "
+msgstr "Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ "
 
-#: elf64-x86-64.c:3787
+#: elf64-x86-64.c:1565
+msgid "a shared object"
+msgstr "Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
+
+#: elf64-x86-64.c:1567
 msgid "; recompile with -fPIC"
 msgstr "; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
 
-#: elf64-x86-64.c:3792
-msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%s"
+#: elf64-x86-64.c:1572
+msgid "a PIE object"
+msgstr "â€žPIEâ€œ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
 
-#: elf64-x86-64.c:3794
-msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ â€ž%sâ€œ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%s"
+#: elf64-x86-64.c:1574
+msgid "a PDE object"
+msgstr "â€žPDEâ€œ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
 
-#: elf64-x86-64.c:3900
-msgid "%B: addend -0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range"
-msgstr "%B: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº -0x%x Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+#: elf64-x86-64.c:1576
+msgid "; recompile with -fPIE"
+msgstr "; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPIEâ€œ"
 
-#: elf64-x86-64.c:3908
-msgid "%B: addend 0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range"
-msgstr "%B: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº 0x%x Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+#: elf64-x86-64.c:1580
+#, c-format
+msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%s%sâ€œ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€ž%s%sâ€œ"
 
-#: elfcode.h:760
+#: elf64-x86-64.c:2116
 #, c-format
-msgid "warning: %s has a corrupt string table index - ignoring"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¸Ð¼Ð° Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐµ â€” Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼"
+msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
+msgstr "%pB: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ x32"
 
-#: elfcode.h:1186
+#: elf64-x86-64.c:2266
 #, c-format
-msgid "%s: version count (%ld) does not match symbol count (%ld)"
-msgstr "%s: Ð±Ñ€Ð¾Ñ˜ Ð¸Ð·Ð´Ð°ÑšÐ° (%ld) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (%ld)"
+msgid "%pB: '%s' accessed both as normal and thread local symbol"
+msgstr "%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
 
-#: elfcode.h:1440
+#: elf64-x86-64.c:2926 elfnn-aarch64.c:5754 elfnn-riscv.c:2295
 #, c-format
-msgid "%s(%s): relocation %d has invalid symbol index %ld"
-msgstr "%s(%s): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%dâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld"
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð¸Ð¼Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº: %<PRId64>"
 
-#: elfcore.h:305
-msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu."
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¾: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð° >= %lu, Ð½Ð°Ñ’Ð¾Ñ…: %lu."
+#: elf64-x86-64.c:3189
+#, c-format
+msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_X86_64_GOTOFF64â€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
 
-#: elflink.c:1143
-msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A"
-msgstr "%s: Ð¢Ð›Ð¡ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-Ð¢Ð›Ð¡ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¸ Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
+#: elf64-x86-64.c:3203
+#, c-format
+msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_X86_64_GOTOFF64â€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ð³ %s â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
 
-#: elflink.c:1148
-msgid "%s: TLS reference in %B mismatches non-TLS reference in %B"
-msgstr "%s: Ð¢Ð›Ð¡ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ â€ž%Bâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-Ð¢Ð›Ð¡ ÑƒÐ¿ÑƒÑ‚Ð¸ Ñƒ â€ž%Bâ€œ"
+#: elf64-x86-64.c:3493
+#, c-format
+msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
+msgstr "%pB: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº %s%#x Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð° %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
 
-#: elflink.c:1153
-msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B"
-msgstr "%s: Ð¢Ð›Ð¡ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-Ð¢Ð›Ð¡ ÑƒÐ¿ÑƒÑ‚Ð¸ Ñƒ â€ž%Bâ€œ"
+#: elf64-x86-64.c:3643 elflink.c:13796
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ ÑƒÐ½Ð¾Ñ�: %pB\n"
 
-#: elflink.c:1158
-msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A"
-msgstr "%s: Ð¢Ð›Ð¡ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ â€ž%Bâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-Ð¢Ð›Ð¡ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¸ Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
+#: elf64-x86-64.c:4410
+#, c-format
+msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
+msgstr " Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žGOTPCRELâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° â€ž%sâ€œ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ñ�Ð° â€ž--no-relaxâ€œ\n"
 
-#: elflink.c:1763
-msgid "%B: unexpected redefinition of indirect versioned symbol `%s'"
-msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°ÑšÐµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-x86-64.c:4571
+#, c-format
+msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
+msgstr "%F%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žPCâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ñƒ â€žPLTâ€œ ÑƒÐ½Ð¾Ñ�Ñƒ Ð·Ð° â€ž%sâ€œ\n"
 
-#: elflink.c:2066
-msgid "%B: version node not found for symbol %s"
-msgstr "%B: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñ‡Ð²Ð¾Ñ€ Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+#: elf64-x86-64.c:4644
+#, c-format
+msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
+msgstr "%F%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ€Ð°Ð·Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð³Ñ€Ð°Ð½Ðµ Ñƒ â€žPLTâ€œ ÑƒÐ½Ð¾Ñ�Ñƒ Ð·Ð° â€ž%sâ€œ\n"
 
-#: elflink.c:2157
-msgid "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'"
-msgstr "%B: Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° (0x%lx >= 0x%lx) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ"
+#: elf64-x86-64.c:4697
+#, c-format
+msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
+msgstr "%F%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žPCâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ñƒ â€žGOT PLTâ€œ ÑƒÐ½Ð¾Ñ�Ñƒ Ð·Ð° â€ž%sâ€œ\n"
+
+#: elfcode.h:342
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ ÑˆÐ¸Ñ€Ð¸ Ð¿Ñ€ÐµÐºÐ¾ ÐºÑ€Ð°Ñ˜Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ"
+
+#: elfcode.h:790
+#, c-format
+msgid "warning: %pB has a corrupt string table index"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐµ"
+
+#: elfcode.h:838
+#, c-format
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ñ�Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµÐ¼"
+
+#: elfcode.h:1056
+#, c-format
+msgid "%pB: %pA+%<PRIx64>: relocation addend %<PRIx64> too large"
+msgstr "%pB: %pA+%<PRIx64>: Ð´Ð¾Ð´Ð°Ñ‚Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %<PRIx64> Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº"
+
+#: elfcode.h:1322
+#, c-format
+msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
+msgstr "%pB: Ð±Ñ€Ð¾Ñ˜ Ð¸Ð·Ð´Ð°ÑšÐ° (%<PRId64>) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (%ld)"
+
+#: elfcore.h:280
+#, c-format
+msgid "warning: %pB has a segment extending past end of file"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¿Ð¾Ð´ÐµÐ¾Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ ÑˆÐ¸Ñ€Ð¸ Ð¿Ñ€ÐµÐºÐ¾ ÐºÑ€Ð°Ñ˜Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ"
 
-#: elflink.c:2168
-msgid "%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A' when the object file has no symbol table"
-msgstr "%B: Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (0x%lx) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ ÐºÐ°Ð´Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½ÐµÐ¼Ð° Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+#: elflink.c:1397
+#, c-format
+msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
+msgstr "%s: â€žTLSâ€œ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-â€žTLSâ€œ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¸ Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
 
-#: elflink.c:2358
-msgid "%B: relocation size mismatch in %B section %A"
-msgstr "%B: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
+#: elflink.c:1403
+#, c-format
+msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
+msgstr "%s: â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ â€ž%pBâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð¸ Ñƒ â€ž%pBâ€œ"
 
-#: elflink.c:2640
+#: elflink.c:1409
+#, c-format
+msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
+msgstr "%s: â€žTLSâ€œ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð¸ Ñƒ â€ž%pBâ€œ"
+
+#: elflink.c:1415
+#, c-format
+msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
+msgstr "%s: â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ â€ž%pBâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-â€žTLSâ€œ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¸ Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
+
+#: elflink.c:2127
+#, c-format
+msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°ÑšÐµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elflink.c:2626
+#, c-format
+msgid "%pB: version node not found for symbol %s"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñ‡Ð²Ð¾Ñ€ Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+
+#: elflink.c:2717
+#, c-format
+msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
+msgstr "%pB: Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° (%#<PRIx64> >= %#lx) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
+
+#: elflink.c:2729
+#, c-format
+msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
+msgstr "%pB: Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (%#<PRIx64>) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ°Ð´Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½ÐµÐ¼Ð° Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: elflink.c:2940
+#, c-format
+msgid "%pB: relocation size mismatch in %pB section %pA"
+msgstr "%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
+
+#: elflink.c:3269
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½Ð¸Ñ�Ñƒ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ðµ"
 
-#: elflink.c:3403
-msgid "%P: alternate ELF machine code found (%d) in %B, expecting %d\n"
-msgstr "%P: Ð½Ð°Ñ’Ð¾Ñ… Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð¸ â€žELFâ€œ Ð¼Ð°ÑˆÐ¸Ð½Ñ�ÐºÐ¸ ÐºÐ¾Ð´ (%d) Ñƒ â€ž%Bâ€œ, Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… â€ž%dâ€œ\n"
-
-#: elflink.c:4032
-msgid "%B: %s: invalid version %u (max %d)"
-msgstr "%B: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %u (Ð½Ð°Ñ˜Ð². %d)"
-
-#: elflink.c:4068
-msgid "%B: %s: invalid needed version %d"
-msgstr "%B: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %d"
-
-#: elflink.c:4452
-msgid "%B: undefined reference to symbol '%s'"
-msgstr "%B: Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° ÑƒÐ¿ÑƒÑ‚Ð° ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ"
-
-#: elflink.c:5523
-msgid "%B: stack size specified and %s set"
-msgstr "%B: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ð¸ â€ž%sâ€œ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð°"
-
-#: elflink.c:5526
-msgid "%B: %s not absolute"
-msgstr "%B: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾"
+#: elflink.c:3329
+msgid "%P: copy reloc against protected `%pT' is dangerous\n"
+msgstr "%P: ÑƒÐ¼Ð½Ð¾Ð¶Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ð³ â€ž%pTâ€œ Ñ˜Ðµ Ð¾Ð¿Ð°Ñ�Ð½Ð¾\n"
+
+#: elflink.c:4306
+#, c-format
+msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
+msgstr "Ð½Ð°Ñ’Ð¾Ñ… Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð¸ â€žELFâ€œ Ð¼Ð°ÑˆÐ¸Ð½Ñ�ÐºÐ¸ ÐºÐ¾Ð´ (%d) Ñƒ â€ž%pBâ€œ, Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… â€ž%dâ€œ"
+
+#: elflink.c:4789
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¸Ð·Ð´Ð°ÑšÐ° %lx (Ð½Ð°Ñ˜Ð². %lx)"
+
+#: elflink.c:4857
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr "%pB: â€ž%sâ€œ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñƒ Ð¸Ð½Ð´ÐµÐºÑ�Ñƒ %lu (>= sh_info %lu)"
+
+#: elflink.c:5005
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¾ Ð¸Ð·Ð´Ð°ÑšÑƒ"
+
+#: elflink.c:5043
+#, c-format
+msgid "%pB: %s: invalid version %u (max %d)"
+msgstr "%pB: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %u (Ð½Ð°Ñ˜Ð². %d)"
+
+#: elflink.c:5080
+#, c-format
+msgid "%pB: %s: invalid needed version %d"
+msgstr "%pB: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %d"
+
+#: elflink.c:5345
+#, c-format
+msgid "warning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¾Ð±Ð¸Ñ‡Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ Ñ˜Ðµ Ð¼Ð°ÑšÐµ Ð¾Ð´ â€ž%uâ€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾Ð³ Ð¾Ð¿ÑˆÑ‚Ð¾Ð¼ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð¾Ð¼ Ñƒ â€ž%pBâ€œ"
+
+#: elflink.c:5352
+msgid "warning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised."
+msgstr "ÑƒÐ¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð�Ð�ÐŸÐžÐœÐ•Ð�Ð�: Ð½ÐµÐ¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° Ð¼Ð¾Ð³Ñƒ Ð´Ð¾Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¾Ð·Ð±Ð¸Ñ™Ð½Ð¸Ñ… Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°.  Ð˜Ñ�Ð¿Ð¸Ñ‚Ð¸Ð²Ð°ÑšÐµ Ñ�Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ñ€ÑƒÑ‡ÑƒÑ˜Ðµ."
+
+#: elflink.c:5374
+msgid "warning: NOTE: size discrepancies can cause real problems.  Investigation is advised."
+msgstr "ÑƒÐ¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð�Ð�ÐŸÐžÐœÐ•Ð�Ð�: Ð½ÐµÐ¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð½Ð¾Ñ�Ñ‚Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð¾Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¾Ð·Ð±Ð¸Ñ™Ð½Ð¸Ñ… Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°.  Ð˜Ñ�Ð¿Ð¸Ñ‚Ð¸Ð²Ð°ÑšÐµ Ñ�Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ñ€ÑƒÑ‡ÑƒÑ˜Ðµ."
+
+#: elflink.c:5516
+#, c-format
+msgid "%pB: undefined reference to symbol '%s'"
+msgstr "%pB: Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° ÑƒÐ¿ÑƒÑ‚Ð° ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ"
+
+#: elflink.c:6576
+#, c-format
+msgid "%pB: stack size specified and %s set"
+msgstr "%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ð¸ â€ž%sâ€œ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð°"
+
+#: elflink.c:6580
+#, c-format
+msgid "%pB: %s not absolute"
+msgstr "%pB: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾"
 
-#: elflink.c:5824
+#: elflink.c:6792
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr "%s: Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ: %s"
 
-#: elflink.c:5892
-msgid "%B: .preinit_array section is not allowed in DSO"
-msgstr "%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.preinit_arrayâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ñƒ â€žDSOâ€œ-Ñƒ"
+#: elflink.c:7181
+msgid "error: creating an executable stack because of -z execstack command line option"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ Ð¸Ð·Ð²Ñ€ÑˆÐ¸Ð²Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ð·Ð±Ð¾Ð³ â€ž-z execstackâ€œ Ð¾Ð¿Ñ†Ð¸Ñ˜Ðµ Ð»Ð¸Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸"
+
+#: elflink.c:7187
+msgid "warning: enabling an executable stack because of -z execstack command line option"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐºÑ™ÑƒÑ‡ÑƒÑ˜ÐµÐ¼ Ð¸Ð·Ð²Ñ€ÑˆÐ¸Ð²Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ð·Ð±Ð¾Ð³ â€ž-z execstackâ€œ Ð¾Ð¿Ñ†Ð¸Ñ˜Ðµ Ð»Ð¸Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸"
+
+#: elflink.c:7249
+#, c-format
+msgid "error: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %s: Ð¾ÐºÐ¸Ð´Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð³ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° (Ñ˜ÐµÑ€ Ð¸Ð¼Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ¸Ð² â€ž.note.GNU-stackâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº)"
+
+#: elflink.c:7255
+#, c-format
+msgid "warning: %s: requires executable stack (because the .note.GNU-stack section is executable)"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %s: Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº (Ñ˜ÐµÑ€ Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.note.GNU-stackâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ¸Ð²)"
+
+#: elflink.c:7263
+#, c-format
+msgid "error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack section"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %s: Ð¾ÐºÐ¸Ð´Ð° Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð³ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ˜ÐµÑ€ Ð½ÐµÐ¼Ð° â€ž.note.GNU-stackâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: elflink.c:7269
+#, c-format
+msgid "warning: %s: missing .note.GNU-stack section implies executable stack"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %s: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.note.GNU-stackâ€œ Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº"
+
+#: elflink.c:7272
+msgid "NOTE: This behaviour is deprecated and will be removed in a future version of the linker"
+msgstr "Ð�Ð�ÐŸÐžÐœÐ•Ð�Ð�: ÐžÐ²Ð¾ Ð¿Ð¾Ð½Ð°ÑˆÐ°ÑšÐµ Ñ˜Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ Ð¸ Ð±Ð¸Ñ›Ðµ ÑƒÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñƒ Ð±ÑƒÐ´ÑƒÑ›ÐµÐ¼ Ð¸Ð·Ð´Ð°ÑšÑƒ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°"
 
-#: elflink.c:7657
+#: elflink.c:7426
+#, c-format
+msgid "%pB: .preinit_array section is not allowed in DSO"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.preinit_arrayâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ñƒ â€žDSOâ€œ-Ñƒ"
+
+#: elflink.c:9017
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr "Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° â€ž%sâ€œ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ: %s"
 
-#: elflink.c:7811
+#: elflink.c:9180 elflink.c:9188
+msgid "division by zero"
+msgstr "Ð´ÐµÑ™ÐµÑšÐµ Ð½ÑƒÐ»Ð¾Ð¼"
+
+#: elflink.c:9202
 #, c-format
 msgid "unknown operator '%c' in complex symbol"
 msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ â€ž%câ€œ Ñƒ Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ"
 
-#: elflink.c:8165 elflink.c:8182 elflink.c:8219 elflink.c:8236
-msgid "%B: Unable to sort relocs - they are in more than one size"
-msgstr "%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð¸Ð¼Ð°Ñ˜Ñƒ Ð²Ð¸ÑˆÐµ Ð¾Ð´ Ñ˜ÐµÐ´Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
-
-#: elflink.c:8196 elflink.c:8250
-msgid "%B: Unable to sort relocs - they are of an unknown size"
-msgstr "%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ñ�Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
-
-#: elflink.c:8301
-msgid "Not enough memory to sort relocations"
-msgstr "Ð�ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð·Ð° Ñ€ÐµÑ’Ð°ÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
-
-#: elflink.c:8494
-msgid "%B: Too many sections: %d (>= %d)"
-msgstr "%B: ÐŸÑ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %d (>= %d)"
-
-#: elflink.c:8775
-msgid "%B: internal symbol `%s' in %B is referenced by DSO"
-msgstr "%B: Ð½Ð° ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%Bâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
-
-#: elflink.c:8777
-msgid "%B: hidden symbol `%s' in %B is referenced by DSO"
-msgstr "%B: Ð½Ð° Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%Bâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
-
-#: elflink.c:8779
-msgid "%B: local symbol `%s' in %B is referenced by DSO"
-msgstr "%B: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%Bâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
-
-#: elflink.c:8890
-msgid "%B: could not find output section %A for input section %A"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð·Ð° ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
-
-#: elflink.c:9013
-msgid "%B: protected symbol `%s' isn't defined"
-msgstr "%B: Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
-
-#: elflink.c:9015
-msgid "%B: internal symbol `%s' isn't defined"
-msgstr "%B: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+#. PR 21524: Let the user know if a symbol was removed by garbage collection.
+#: elflink.c:9538
+#, c-format
+msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
+msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÐ¿ÑƒÑ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ ÑƒÐºÐ»Ð¾ÑšÐµÐ½ Ñ�ÐºÑƒÐ¿Ñ™Ð°ÑšÐµÐ¼ Ð¾Ñ‚Ð¿Ð°Ð´Ð°"
 
-#: elflink.c:9017
-msgid "%B: hidden symbol `%s' isn't defined"
-msgstr "%B: Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+#: elflink.c:9541
+#, c-format
+msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
+msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ â€ž--gc-keep-exportedâ€œ"
+
+#: elflink.c:9792 elflink.c:9810 elflink.c:9849 elflink.c:9867
+#, c-format
+msgid "%pB: unable to sort relocs - they are in more than one size"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð¸Ð¼Ð°Ñ˜Ñƒ Ð²Ð¸ÑˆÐµ Ð¾Ð´ Ñ˜ÐµÐ´Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+
+#. The section size is not divisible by either -
+#. something is wrong.
+#: elflink.c:9826 elflink.c:9883
+#, c-format
+msgid "%pB: unable to sort relocs - they are of an unknown size"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ñ�Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+
+#: elflink.c:9935
+msgid "not enough memory to sort relocations"
+msgstr "Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð·Ð° Ñ€ÐµÑ’Ð°ÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
 
-#: elflink.c:9043
-msgid "%B: No symbol version section for versioned symbol `%s'"
-msgstr "%B: Ð�ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¸Ð·Ð´Ð°ÑšÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð·Ð° Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+#: elflink.c:10273
+#, c-format
+msgid "%pB: too many sections: %d (>= %d)"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %d (>= %d)"
 
-#: elflink.c:9598
-msgid "error: %B: size of section %A is not multiple of address size"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ"
+#: elflink.c:10549
+#, c-format
+msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
+msgstr "%pB: Ð½Ð° ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
 
-#: elflink.c:9645
-msgid "error: %B contains a reloc (0x%s) for section %A that references a non-existent global symbol"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (0x%s) Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ ÐºÐ¾Ñ˜Ð¸ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½Ðµ-Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
+#: elflink.c:10552
+#, c-format
+msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
+msgstr "%pB: Ð½Ð° Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
 
-#: elflink.c:10369
-msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"
-msgstr "â€ž%Aâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%Aâ€œ Ñƒ â€ž%Bâ€œ] Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%Aâ€œ Ñƒ â€ž%Bâ€œ] Ð¾Ð´ÐµÑ™Ð°Ðº"
+#: elflink.c:10555
+#, c-format
+msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
+msgstr "%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
 
-#: elflink.c:10374
+#: elflink.c:10641
 #, c-format
-msgid "%A has both ordered and unordered sections"
-msgstr "â€ž%Aâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº"
+msgid "%pB: could not find output section %pA for input section %pA"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð·Ð° ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
 
-#: elflink.c:10982
-msgid "%B: file class %s incompatible with %s"
-msgstr "%B: ÐºÐ»Ð°Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° â€ž%sâ€œ"
+#: elflink.c:10795
+#, c-format
+msgid "%pB: protected symbol `%s' isn't defined"
+msgstr "%pB: Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
 
-#: elflink.c:11303 elflink.c:11347
-msgid "%B: could not find output section %s"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+#: elflink.c:10798
+#, c-format
+msgid "%pB: internal symbol `%s' isn't defined"
+msgstr "%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+
+#: elflink.c:10801
+#, c-format
+msgid "%pB: hidden symbol `%s' isn't defined"
+msgstr "%pB: Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+
+#: elflink.c:10833
+#, c-format
+msgid "%pB: no symbol version section for versioned symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¸Ð·Ð´Ð°ÑšÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð·Ð° Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+
+#: elflink.c:11514
+#, c-format
+msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%#<PRIx64>) Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½Ðµ-Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
+
+#: elflink.c:11984
+#, c-format
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ"
+
+#: elflink.c:12261
+#, c-format
+msgid "%pB: no symbol found for import library"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð·Ð° ÑƒÐ²Ð¾Ð·Ð½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ"
+
+#: elflink.c:12836
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr "%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð²Ñ€ÑˆÐ¸Ð¼ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°\n"
+
+#: elflink.c:12913
+#, c-format
+msgid "%pB: file class %s incompatible with %s"
+msgstr "%pB: ÐºÐ»Ð°Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° â€ž%sâ€œ"
+
+#: elflink.c:13162
+#, c-format
+msgid "%pB: failed to generate import library"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ ÑƒÐ²Ð¾Ð·Ð½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ"
 
-#: elflink.c:11308
+#: elflink.c:13330
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
 
-#: elflink.c:11353
+#: elflink.c:13378
 #, c-format
 msgid "warning: section '%s' is being made into a note"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½ Ñƒ Ð±ÐµÐ»ÐµÑˆÐºÑƒ"
 
-#: elflink.c:11419
-msgid "%P%X: read-only segment has dynamic relocations.\n"
-msgstr "%P%X: Ð¾Ð´ÐµÑ™Ð°Ðº Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð¸Ð¼Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°.\n"
-
-#: elflink.c:11422
-msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n"
-msgstr "%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ.\n"
+#: elflink.c:13472
+msgid "%P%X: read-only segment has dynamic relocations\n"
+msgstr "%P%X: Ð¾Ð´ÐµÑ™Ð°Ðº Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð¸Ð¼Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°\n"
+
+#: elflink.c:13475
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
+msgstr "%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ\n"
+
+#: elflink.c:13478
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr "%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ â€žPDEâ€œ\n"
+
+#: elflink.c:13481
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr "%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ â€žPIEâ€œ\n"
 
-#: elflink.c:11545
+#: elflink.c:13617
 msgid "%P%X: can not read symbols: %E\n"
 msgstr "%P%X: Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ‡Ð¸Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ: %E\n"
 
-#: elflink.c:11989
-msgid "Removing unused section '%s' in file '%B'"
-msgstr "Ð£ÐºÐ»Ð°ÑšÐ°Ð¼ Ð½ÐµÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€ž%Bâ€œ"
+#: elflink.c:14042
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
+msgstr "%F%P: %pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ˜Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½-Ð½Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° â€ž--gc-sectionsâ€œ\n"
 
-#: elflink.c:12200
-msgid "Warning: gc-sections option ignored"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð¿Ñ†Ð¸Ñ˜Ð° â€žgcâ€œ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°"
+#: elflink.c:14520
+#, c-format
+msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
+msgstr "%pB: %pA+%#<PRIx64>: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð·Ð° â€žINHERITâ€œ"
+
+#: elflink.c:14561
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žVTENTRYâ€œ ÑƒÐ½Ð¾Ñ�"
+
+#: elflink.c:14704
+#, c-format
+msgid "unrecognized INPUT_SECTION_FLAG %s\n"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žINPUT_SECTION_FLAG %sâ€œ\n"
+
+#: elflink.c:15487
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%P: %pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ\n"
+
+#: elflink.c:15576
+msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
+msgstr "%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° â€žDT_TEXTRELâ€œ Ð¼Ð¾Ð³Ñƒ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž%sâ€œ\n"
+
+#: elfxx-aarch64.c:477
+#, c-format
+msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð»Ð°Ð±Ð¾ â€žTLSâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð° Ð¸ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ Ñ€Ð°Ð´Ð¸Ñ‚Ð¸ ÐºÐ°Ð¾ ÑˆÑ‚Ð¾ Ñ�Ðµ Ð¾Ñ‡ÐµÐºÑƒÑ˜Ðµ"
+
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:10231 elfnn-aarch64.c:10238
+#, c-format
+msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žBTIâ€œ Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾ â€ž-z force-btiâ€œ-Ñ˜ÐµÐ¼ ÐºÐ°Ð´Ð° Ñ�Ð²Ð¸ ÑƒÐ½Ð¾Ñ�Ð¸ Ð½ÐµÐ¼Ð°Ñ˜Ñƒ â€žBTIâ€œ Ñƒ â€žNOTEâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ."
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° â€žAArch64â€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%x>"
+
+#: elfxx-loongarch.c:1909
+#, c-format
+msgid "%pB: unsupported relocation type %s"
+msgstr "%pB: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€ž%sâ€œ"
 
-#: elflink.c:12489
+#: elfxx-loongarch.c:1937
 #, c-format
-msgid "Unrecognized INPUT_SECTION_FLAG %s\n"
-msgstr "â€žINPUT_SECTION_FLAG %sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾\n"
+msgid "%pB: unsupported bfd relocation type %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð±Ñ„Ð´ Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%#xâ€œ"
 
-#: elfxx-mips.c:1419
+#: elfxx-loongarch.c:2009
+#, c-format
+msgid "%pB: relocation %s right shift %d error 0x%lx"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð´ÐµÑ�Ð½Ð¸ Ð¿Ð¾Ð¼Ð°Ðº %d Ð³Ñ€ÐµÑˆÐºÐ° 0x%lx"
+
+#: elfxx-loongarch.c:2028
+#, c-format
+msgid "%pB: relocation %s overflow 0x%lx"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¿ÑƒÑšÐ°Ð²Ð° 0x%lx"
+
+#: elfxx-mips.c:1541
 msgid "static procedure (no name)"
 msgstr "Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿Ð°Ðº (Ð±ÐµÐ· Ð½Ð°Ð·Ð¸Ð²Ð°)"
 
-#: elfxx-mips.c:5476
+#: elfxx-mips.c:5857
 msgid "MIPS16 and microMIPS functions cannot call each other"
 msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€žMIPS16â€œ Ð¸ â€žmicroMIPSâ€œ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð·Ð¸Ð²Ð°Ñ˜Ñƒ Ñ˜ÐµÐ´Ð½Ð° Ð´Ñ€ÑƒÐ³Ñƒ"
 
-#: elfxx-mips.c:6087
-msgid "%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."
-msgstr "%B: %A+0x%lx: Ð�ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�ÐºÐ¾Ðº Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ð˜Ð¡Ð� Ñ€ÐµÐ¶Ð¸Ð¼Ð°; Ñ€Ð°Ð·Ð¼Ð¾Ñ‚Ñ€Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ Ð¼ÐµÑ’ÑƒÐ¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµÐ¼."
-
-#: elfxx-mips.c:6756 elfxx-mips.c:6979
-msgid "%B: Warning: bad `%s' option size %u smaller than its header"
-msgstr "%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð¿Ñ†Ð¸Ñ˜Ðµ â€ž%sâ€œ %u Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð°"
-
-#: elfxx-mips.c:7734 elfxx-mips.c:7859
-msgid "%B: Warning: cannot determine the target function for stub section `%s'"
-msgstr "%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð´Ñ€ÐµÐ´Ð¸Ð¼ Ñ†Ð¸Ñ™Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ"
-
-#: elfxx-mips.c:7990
-msgid "%B: Malformed reloc detected for section %s"
-msgstr "%B: ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
-
-#: elfxx-mips.c:8065
-msgid "%B: GOT reloc at 0x%lx not expected in executables"
-msgstr "%B: â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x%lx Ð½Ð¸Ñ˜Ðµ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ñƒ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸Ð¼"
-
-#: elfxx-mips.c:8199
-msgid "%B: CALL16 reloc at 0x%lx not against global symbol"
-msgstr "%B: â€žCALL16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° 0x%lx Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+#: elfxx-mips.c:6627
+msgid "%X%H: unsupported JALX to the same ISA mode\n"
+msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žJALXâ€œ Ñƒ Ð¸Ñ�Ñ‚Ð¾Ð¼ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ\n"
+
+#: elfxx-mips.c:6660
+msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n"
+msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�ÐºÐ¾Ðº Ð¸Ð·Ð¼ÐµÑ’Ñƒ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ð°; Ñ€Ð°Ð·Ð¼Ð¾Ñ‚Ñ€Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ Ð¼ÐµÑ’ÑƒÐ¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµÐ¼\n"
+
+#: elfxx-mips.c:6705
+msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n"
+msgstr "%X%H: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð³Ñ€Ð°Ð½Ðµ Ð¸Ð·Ð¼ÐµÑ’Ñƒ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ñƒ â€žJALXâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°\n"
+
+#: elfxx-mips.c:6717
+msgid "%X%H: unsupported branch between ISA modes\n"
+msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð³Ñ€Ð°Ð½Ð° Ð¸Ð·Ð¼ÐµÑ’Ñƒ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ð°\n"
+
+#: elfxx-mips.c:7350
+#, c-format
+msgid "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
+msgstr "%pB: Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€ž.reginfoâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°; Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… %<PRIu64>, Ð°Ð»Ð¸ Ð´Ð¾Ð±Ð¸Ñ… %<PRIu64>"
+
+#: elfxx-mips.c:7394
+#, c-format
+msgid "%pB: warning: bad `%s' option size %u smaller than its header"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð¿Ñ†Ð¸Ñ˜Ðµ â€ž%sâ€œ %u Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð°"
+
+#: elfxx-mips.c:7630
+#, c-format
+msgid "%pB: warning: truncated `%s' option"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð° Ð¾Ð¿Ñ†Ð¸Ñ˜Ð° â€ž%sâ€œ"
+
+#: elfxx-mips.c:8454 elfxx-mips.c:8580
+#, c-format
+msgid "%pB: warning: cannot determine the target function for stub section `%s'"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð´Ñ€ÐµÐ´Ð¸Ð¼ Ñ†Ð¸Ñ™Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ"
 
-#: elfxx-mips.c:8977
+#: elfxx-mips.c:8712
+#, c-format
+msgid "%pB: malformed reloc detected for section %s"
+msgstr "%pB: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+
+#: elfxx-mips.c:8812
+#, c-format
+msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
+msgstr "%pB: â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %#<PRIx64> Ð½Ð¸Ñ˜Ðµ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ñƒ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸Ð¼"
+
+#: elfxx-mips.c:8952
+#, c-format
+msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
+msgstr "%pB: â€žCALL16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %#<PRIx64> Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: elfxx-mips.c:9255
+#, c-format
+msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n"
+msgstr "%X%H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ\n"
+
+#: elfxx-mips.c:9381
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr "â€žIFUNCâ€ž Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€“ â€žIFUNCSâ€œ Ð½Ð¸Ñ�Ñƒ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ðµ"
+
+#: elfxx-mips.c:9384
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr "Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: elfxx-mips.c:9604
 #, c-format
 msgid "non-dynamic relocations refer to dynamic symbol %s"
 msgstr "Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ñƒ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
 
-#: elfxx-mips.c:9877
-msgid "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"
-msgstr "%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÑƒÐ¿Ð¾Ñ€ÐµÑ’ÑƒÑ˜ÑƒÑ›Ðµ â€žLO16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ Ð½Ð° 0x%lx Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ"
-
-#: elfxx-mips.c:10016
-msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
-msgstr "Ð¾Ð´ÐµÑ™Ð°Ðº Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ 64KB; Ð´Ð¾ÑšÐ° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (Ð²Ð¸Ð´Ð¸Ñ‚Ðµ Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-Gâ€œ)"
-
-#: elfxx-mips.c:10035
-msgid "JALX to a non-word-aligned address"
-msgstr "â€žJALXâ€œ Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜Ñƒ"
-
-#: elfxx-mips.c:10402 elfxx-mips.c:10966
-msgid "%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"
-msgstr "%B: â€ž%Aâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %ld Ð¸Ð· â€ž%Aâ€œ Ð¸Ð·Ð° Ð¾Ð¿Ñ�ÐµÐ³Ð° â€žADDIUPCâ€œ"
-
-#: elfxx-mips.c:13990
-#, c-format
-msgid "%s: illegal section name `%s'"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
-
-#: elfxx-mips.c:14375 elfxx-mips.c:14381 elfxx-mips.c:14387 elfxx-mips.c:14407
-#: elfxx-mips.c:14413 elfxx-mips.c:14419 elfxx-mips.c:14441 elfxx-mips.c:14460
-#: elfxx-mips.c:14467 elfxx-mips.c:14474
-msgid "Warning: %B uses %s (set by %B), %B uses %s"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
-
-#: elfxx-mips.c:14394 elfxx-mips.c:14426 elfxx-mips.c:14447 elfxx-mips.c:14480
-msgid "Warning: %B uses %s (set by %B), %B uses unknown floating point ABI %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð�Ð‘Ð˜ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ"
-
-#: elfxx-mips.c:14493 elfxx-mips.c:14501 elfxx-mips.c:14509 elfxx-mips.c:14517
-msgid "Warning: %B uses unknown floating point ABI %d (set by %B), %B uses %s"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð�Ð‘Ð˜ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
-
-#: elfxx-mips.c:14525
-msgid "Warning: %B uses unknown floating point ABI %d (set by %B), %B uses unknown floating point ABI %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð�Ð‘Ð˜ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð�Ð‘Ð˜ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ"
-
-#: elfxx-mips.c:14548
-msgid "Warning: %B uses %s (set by %B), %B uses unknown MSA ABI %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ÐœÐ¡Ð� Ð�Ð‘Ð˜ â€ž%dâ€œ"
-
-#: elfxx-mips.c:14559
-msgid "Warning: %B uses unknown MSA ABI %d (set by %B), %B uses %s"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ÐœÐ¡Ð� Ð�Ð‘Ð˜ â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
-
-#: elfxx-mips.c:14567
-msgid "Warning: %B uses unknown MSA ABI %d (set by %B), %B uses unknown MSA ABI %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ÐœÐ¡Ð� Ð�Ð‘Ð˜ â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%Bâ€œ), â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ÐœÐ¡Ð� Ð�Ð‘Ð˜ â€ž%dâ€œ"
-
-#: elfxx-mips.c:14599
-msgid "%B: endianness incompatible with that of the selected emulation"
-msgstr "%B: ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ"
-
-#: elfxx-mips.c:14610
-msgid "%B: ABI is incompatible with that of the selected emulation"
-msgstr "%B: Ð�Ð‘Ð˜ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ"
-
-#: elfxx-mips.c:14694
-msgid "%B: warning: linking abicalls files with non-abicalls files"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð½Ðµ-Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð°"
-
-#: elfxx-mips.c:14711
-msgid "%B: linking 32-bit code with 64-bit code"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ 32-Ð±Ð¸Ñ‚Ð½Ð¸ ÐºÐ¾Ð´ Ñ�Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ ÐºÐ¾Ð´Ð¾Ð¼"
-
-#: elfxx-mips.c:14739 elfxx-mips.c:14802
-msgid "%B: linking %s module with previous %s modules"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
-
-#: elfxx-mips.c:14762
-msgid "%B: ABI mismatch: linking %s module with previous %s modules"
-msgstr "%B: Ð�Ð‘Ð˜ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
-
-#: elfxx-mips.c:14786
-msgid "%B: ASE mismatch: linking %s module with previous %s modules"
-msgstr "%B: Ð�Ð¡Ð• Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
+#: elfxx-mips.c:10539
+#, c-format
+msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %#<PRIx64> in section `%pA'"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÑƒÐ¿Ð¾Ñ€ÐµÑ’ÑƒÑ˜ÑƒÑ›Ðµ â€žLO16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ Ð½Ð° %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
+
+#: elfxx-mips.c:10679
+msgid "small-data section too large; lower small-data size limit (see option -G)"
+msgstr "Ð¾Ð´ÐµÑ™Ð°Ðº Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº; Ð´Ð¾ÑšÐ° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (Ð²Ð¸Ð´Ð¸Ñ‚Ðµ Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-Gâ€œ)"
+
+#: elfxx-mips.c:10698
+msgid "cannot convert a jump to JALX for a non-word-aligned address"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ñ�ÐºÐ¾Ðº Ñƒ â€žJALXâ€œ Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜Ñƒ"
+
+#: elfxx-mips.c:10701
+msgid "jump to a non-word-aligned address"
+msgstr "Ñ�ÐºÐ¾Ðº Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜Ñƒ"
+
+#: elfxx-mips.c:10702
+msgid "jump to a non-instruction-aligned address"
+msgstr "Ñ�ÐºÐ¾Ðº Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼"
+
+#: elfxx-mips.c:10705
+msgid "cannot convert a branch to JALX for a non-word-aligned address"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð³Ñ€Ð°Ð½Ñƒ Ñƒ â€žJALXâ€œ Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜Ñƒ"
+
+#: elfxx-mips.c:10707
+msgid "branch to a non-instruction-aligned address"
+msgstr "Ð³Ñ€Ð°Ð½Ð° Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼"
+
+#: elfxx-mips.c:10709
+msgid "PC-relative load from unaligned address"
+msgstr "â€žPCâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¸ ÑƒÑ‚Ð¾Ð²Ð°Ñ€ Ð¸Ð· Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ"
+
+#: elfxx-mips.c:11009
+#, c-format
+msgid "%pB: `%pA' entry VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
+msgstr "%pB: â€ž%pAâ€œ ÑƒÐ½Ð¾Ñ� â€žVMAâ€œ Ð¾Ð´ %#<PRIx64> Ð²Ð°Ð½ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€ž-Ttext-segment=...â€œ"
+
+#: elfxx-mips.c:11124 elfxx-mips.c:11711
+#, c-format
+msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
+msgstr "%pB: â€ž%pAâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %<PRId64> Ð¸Ð· â€ž%pAâ€œ Ð¸Ð·Ð° Ð¾Ð¿Ñ�ÐµÐ³Ð° â€žADDIUPCâ€œ"
+
+#: elfxx-mips.c:11683
+#, c-format
+msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
+msgstr "%pB: â€ž%pAâ€œ Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº â€žVMAâ€œ Ð¾Ð´ %#<PRIx64> Ð²Ð°Ð½ 32-Ð±Ð¸Ñ‚Ð½Ð¾Ð³ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€ž-Ttext-segment=...â€œ"
+
+#: elfxx-mips.c:13429 reloc.c:8605
+#, c-format
+msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgstr "%X%P: %pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ â€ž%Vâ€œ Ð½ÐµÐ¼Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚\n"
+
+#: elfxx-mips.c:14741
+#, c-format
+msgid "%pB: unknown architecture %s"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€ž%sâ€œ"
+
+#: elfxx-mips.c:15269
+#, c-format
+msgid "%pB: illegal section name `%pA'"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ"
+
+#: elfxx-mips.c:15546
+#, c-format
+msgid "%pB: warning: linking abicalls files with non-abicalls files"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð½Ðµ-Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð°"
+
+#: elfxx-mips.c:15563
+#, c-format
+msgid "%pB: linking 32-bit code with 64-bit code"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ 32-Ð±Ð¸Ñ‚Ð½Ð¸ ÐºÐ¾Ð´ Ñ�Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ ÐºÐ¾Ð´Ð¾Ð¼"
+
+#: elfxx-mips.c:15595 elfxx-mips.c:15661 elfxx-mips.c:15676
+#, c-format
+msgid "%pB: linking %s module with previous %s modules"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
+
+#: elfxx-mips.c:15619
+#, c-format
+msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
+msgstr "%pB: â€žABIâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
+
+#: elfxx-mips.c:15644
+#, c-format
+msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
+msgstr "%pB: â€žASEâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
+
+#: elfxx-mips.c:15778
+#, c-format
+msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ â€žABIâ€œ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ â€žABIâ€œ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ"
+
+#: elfxx-mips.c:15784
+#, c-format
+msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ â€žABIâ€œ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
+
+#: elfxx-mips.c:15790
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ â€žABIâ€œ Ñ‚Ð°Ñ‡ÐºÑƒ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð° â€ž%dâ€œ"
+
+#: elfxx-mips.c:15804
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
+
+#: elfxx-mips.c:15823
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žMSA ABIâ€œ â€ž%dâ€œ"
+
+#: elfxx-mips.c:15835
+#, c-format
+msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žMSA ABIâ€œ â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
+
+#: elfxx-mips.c:15844
+#, c-format
+msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žMSA ABIâ€œ â€ž%dâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žMSA ABI %dâ€œ"
+
+#: elfxx-mips.c:15906
+#, c-format
+msgid "%pB: endianness incompatible with that of the selected emulation"
+msgstr "%pB: ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ"
+
+#: elfxx-mips.c:15920
+#, c-format
+msgid "%pB: ABI is incompatible with that of the selected emulation"
+msgstr "%pB: â€žABIâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ"
+
+#: elfxx-mips.c:15973
+#, c-format
+msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾ ISA Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€že_flagsâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ"
+
+#: elfxx-mips.c:15978
+#, c-format
+msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾ â€žFP ABIâ€œ Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€ž.gnu.attributesâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ"
 
-#: elfxx-mips.c:14958
+#: elfxx-mips.c:15982
+#, c-format
+msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾ â€žASEâ€œ Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€že_flagsâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ"
+
+#: elfxx-mips.c:15989
+#, c-format
+msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð° ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€že_flagsâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ"
+
+#: elfxx-mips.c:15993
+#, c-format
+msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ñƒ â€žflags2â€œ Ð¿Ð¾Ñ™Ñƒ â€ž.MIPS.abiflagsâ€œ-Ð° (0x%lx)"
+
+#: elfxx-mips.c:16184
+msgid "-mips32r2 -mfp64 (12 callee-saved)"
+msgstr "-mips32r2 -mfp64 (12 Ð¿Ð¾Ð·Ð¸Ð²Ð°Ð¾Ñ†Ð°-Ñ�Ð°Ñ‡ÑƒÐ²Ð°Ð½Ð¾)"
+
+#: elfxx-mips.c:16246 elfxx-mips.c:16257
+msgid "None"
+msgstr "Ð�Ð¸ÑˆÑ‚Ð°"
+
+#: elfxx-mips.c:16248 elfxx-mips.c:16317
+msgid "Unknown"
+msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾"
+
+#: elfxx-mips.c:16328
+#, c-format
+msgid "Hard or soft float\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¸Ð»Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·\n"
+
+#: elfxx-mips.c:16331
+#, c-format
+msgid "Hard float (double precision)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ° Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚)\n"
+
+#: elfxx-mips.c:16334
+#, c-format
+msgid "Hard float (single precision)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (Ñ˜ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ° Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚)\n"
+
+#: elfxx-mips.c:16337
+#, c-format
+msgid "Soft float\n"
+msgstr "Ð¡Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·\n"
+
+#: elfxx-mips.c:16340
+#, c-format
+msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (â€žMIPS32r2â€œ 64-Ð±Ð¸Ñ‚Ð° â€žFPU 12 callee-savedâ€œ)\n"
+
+#: elfxx-mips.c:16343
+#, c-format
+msgid "Hard float (32-bit CPU, Any FPU)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, Ð±Ð¸Ð»Ð¾ ÐºÐ¾Ñ˜Ð¸ â€žFPUâ€œ)\n"
+
+#: elfxx-mips.c:16346
+#, c-format
+msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ð¸Ñ‚Ð½Ð¸ â€žFPUâ€œ)\n"
+
+#: elfxx-mips.c:16349
+#, c-format
+msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¾ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð¼ Ð·Ð°Ñ€ÐµÐ·Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ (32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ð¸Ñ‚Ð½Ð¸ â€žFPUâ€œ)\n"
+
+#: elfxx-mips.c:16381
 #, c-format
 msgid " [abi=O32]"
 msgstr " [Ð°Ð±Ð¸=O32]"
 
-#: elfxx-mips.c:14960
+#: elfxx-mips.c:16383
 #, c-format
 msgid " [abi=O64]"
 msgstr " [Ð°Ð±Ð¸=O64]"
 
-#: elfxx-mips.c:14962
+#: elfxx-mips.c:16385
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [Ð°Ð±Ð¸=EABI32]"
 
-#: elfxx-mips.c:14964
+#: elfxx-mips.c:16387
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [Ð°Ð±Ð¸=EABI64]"
 
-#: elfxx-mips.c:14966
+#: elfxx-mips.c:16389
 #, c-format
 msgid " [abi unknown]"
 msgstr " [Ð°Ð±Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾]"
 
-#: elfxx-mips.c:14968
+#: elfxx-mips.c:16391
 #, c-format
 msgid " [abi=N32]"
 msgstr " [Ð°Ð±Ð¸=N32]"
 
-#: elfxx-mips.c:14970
+#: elfxx-mips.c:16393
 #, c-format
 msgid " [abi=64]"
 msgstr " [Ð°Ð±Ð¸=64]"
 
-#: elfxx-mips.c:14972
+#: elfxx-mips.c:16395
 #, c-format
 msgid " [no abi set]"
 msgstr " [Ð°Ð±Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾]"
 
-#: elfxx-mips.c:14993
+#: elfxx-mips.c:16420
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð˜Ð¡Ð�]"
 
-#: elfxx-mips.c:15013
+#: elfxx-mips.c:16440
 #, c-format
 msgid " [not 32bitmode]"
 msgstr " [Ð½Ð¸Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ€ÐµÐ¶Ð¸Ð¼]"
 
-#: elfxx-sparc.c:640
+#: elfxx-riscv.c:1699
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr "x ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ñ�Ð° Ð¸Ð·Ð´Ð°ÑšÐ¸Ð¼Ð°"
+
+#: elfxx-riscv.c:1705
 #, c-format
-msgid "invalid relocation type %d"
-msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ"
 
-#: elfxx-tilegx.c:4433
-msgid "%B: Cannot link together %s and %s objects."
-msgstr "%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ â€ž%sâ€œ Ð¸ â€ž%sâ€œ."
+#: elfxx-riscv.c:1811
+#, c-format
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr "%s: Ð¿Ñ€Ð²Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ â€žeâ€œ, â€žiâ€œ Ð¸Ð»Ð¸ â€žgâ€œ"
 
-#: i386linux.c:418 m68klinux.c:421 sparclinux.c:414
+#: elfxx-riscv.c:1835
 #, c-format
-msgid "Output file requires shared library `%s'\n"
-msgstr "Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%sâ€œ\n"
+msgid "%s: unknown standard ISA extension or prefix class `%c'"
+msgstr "%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ð¸Ð»Ð¸ ÐºÐ»Ð°Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð° â€ž%câ€œ"
 
-#: i386linux.c:426 m68klinux.c:429 sparclinux.c:422
+#: elfxx-riscv.c:1871
 #, c-format
-msgid "Output file requires shared library `%s.so.%s'\n"
-msgstr "Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%s.so.%sâ€œ\n"
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð° Ñ�Ð° <Ð±Ñ€Ð¾Ñ˜>p"
 
-#: i386linux.c:613 i386linux.c:663 m68klinux.c:618 m68klinux.c:666
-#: sparclinux.c:609 sparclinux.c:659
+#: elfxx-riscv.c:1895
 #, c-format
-msgid "Symbol %s not defined for fixups\n"
-msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð·Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ\n"
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr "%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ"
 
-#: i386linux.c:687 m68klinux.c:690 sparclinux.c:683
-msgid "Warning: fixup count mismatch\n"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð±Ñ€Ð¾Ñ˜ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°\n"
+#: elfxx-riscv.c:1919
+#, c-format
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr "%s: Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ñ�Ðµ Ð¼Ð¾Ñ€Ð° Ñ€Ð°Ð·Ð´Ð²Ð¾Ñ˜Ð¸Ñ‚Ð¸ Ñ�Ð° â€ž_â€œ"
+
+#: elfxx-riscv.c:1973
+#, c-format
+msgid "rv%de does not support the `h' extension"
+msgstr "â€žrv%deâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žhâ€œ"
 
-#: ieee.c:158
+#: elfxx-riscv.c:1981
 #, c-format
-msgid "%s: string too long (%d chars, max 65535)"
-msgstr "%s: Ð½Ð¸Ñ�ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³Ð° (%d Ð·Ð½Ð°ÐºÐ°, Ð½Ð°Ñ˜Ð². 65535)"
+msgid "rv%d does not support the `q' extension"
+msgstr "â€žrv%dâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žqâ€œ"
 
-#: ieee.c:285
+#: elfxx-riscv.c:1988
 #, c-format
-msgid "%s: unrecognized symbol `%s' flags 0x%x"
-msgstr "%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ 0x%x"
+msgid "rv%d does not support the `zcf' extension"
+msgstr "â€žrv%dâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žzcfâ€œ"
 
-#: ieee.c:791
-msgid "%B: unimplemented ATI record %u for symbol %u"
-msgstr "%B: Ð½ÐµÐ¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¸ Ð�Ð¢Ð˜ Ð·Ð°Ð¿Ð¸Ñ� â€ž%uâ€œ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%uâ€œ"
+#: elfxx-riscv.c:1995
+msgid "`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"
+msgstr "â€žzfinxâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµÐ¼ â€žf/d/q/zfh/zfhminâ€œ"
 
-#: ieee.c:815
-msgid "%B: unexpected ATN type %d in external part"
-msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð�Ð¢Ð� Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œ Ñƒ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð¼ Ð´ÐµÐ»Ñƒ"
+#: elfxx-riscv.c:2002
+msgid "`xtheadvector' is conflict with the `v' extension"
+msgstr "â€žxtheadvectorâ€œ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµÐ¼ â€žvâ€œ"
 
-#: ieee.c:837
-msgid "%B: unexpected type after ATN"
-msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð½Ð°ÐºÐ¾Ð½ Ð�Ð¢Ð�-Ð°"
+#: elfxx-riscv.c:2023
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr "â€žzvl*bâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° ÑƒÐºÑ™ÑƒÑ‡Ðµ Ð¸Ð»Ð¸ â€žvâ€œ Ð¸Ð»Ð¸ â€žzveâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ"
+
+#: elfxx-riscv.c:2085
+#, c-format
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr "%s: ISA Ð½Ð¸Ñ�ÐºÐ° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ‚Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ° Ñ�Ð»Ð¾Ð²Ð°"
+
+#: elfxx-riscv.c:2113
+#, c-format
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr "%s: ISA Ð½Ð¸Ñ�ÐºÐ° Ð¼Ð¾Ñ€Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð¸ Ñ�Ð° â€žrv32â€œ Ð¸Ð»Ð¸ â€žrv64â€œ"
+
+#: elfxx-riscv.c:2339
+#, c-format
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ñ�Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð° Ñ�Ð° <Ð±Ñ€Ð¾Ñ˜>p Ñƒ â€ž.optionâ€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ â€ž%sâ€œ"
+
+#: elfxx-riscv.c:2362
+#, c-format
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ñƒ â€ž.optionâ€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ â€ž%sâ€œ"
+
+#: elfxx-riscv.c:2373
+#, c-format
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° + Ð¸Ð»Ð¸ - Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ñƒ â€ž.optionâ€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ â€ž%sâ€œ"
+
+#: elfxx-riscv.c:2613 elfxx-riscv.c:2861
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð¸Ð¶Ð½Ð° â€žINSN_CLASS_*â€œ"
+
+#: elfxx-riscv.c:2648
+msgid "zihintntl' and `c', or `zihintntl' and `zca"
+msgstr "zihintntlâ€œ Ð¸ â€žcâ€œ, Ð¸Ð»Ð¸ â€žzihintntlâ€œ Ð¸ â€žzca"
+
+#: elfxx-riscv.c:2653 elfxx-riscv.c:2671
+msgid "c' or `zca"
+msgstr "câ€œ Ð¸Ð»Ð¸ â€žzca"
+
+#: elfxx-riscv.c:2659
+msgid "m' or `zmmul"
+msgstr "mâ€œ Ð¸Ð»Ð¸ â€žzmmul"
+
+#: elfxx-riscv.c:2677
+msgid "f' and `c', or `f' and `zcf"
+msgstr "fâ€œ Ð¸ â€žcâ€œ, Ð¸Ð»Ð¸ â€žfâ€œ Ð¸ â€žzcf"
+
+#: elfxx-riscv.c:2682
+msgid "c' or `zcf"
+msgstr "câ€œ Ð¸Ð»Ð¸ â€žzcf"
+
+#: elfxx-riscv.c:2688
+msgid "d' and `c', or `d' and `zcd"
+msgstr "dâ€œ Ð¸ â€žcâ€œ, Ð¸Ð»Ð¸ â€ždâ€œ Ð¸ â€žzcd"
+
+#: elfxx-riscv.c:2693
+msgid "c' or `zcd"
+msgstr "câ€œ Ð¸Ð»Ð¸ â€žzcd"
+
+#: elfxx-riscv.c:2695
+msgid "f' or `zfinx"
+msgstr "fâ€œ Ð¸Ð»Ð¸ â€žzfinx"
+
+#: elfxx-riscv.c:2697
+msgid "d' or `zdinx"
+msgstr "dâ€œ Ð¸Ð»Ð¸ â€žzdinx"
+
+#: elfxx-riscv.c:2699
+msgid "q' or `zqinx"
+msgstr "qâ€œ Ð¸Ð»Ð¸ â€žzqinx"
+
+#: elfxx-riscv.c:2701
+msgid "zfh' or `zhinx"
+msgstr "zfhâ€œ Ð¸Ð»Ð¸ â€žzhinx"
+
+#: elfxx-riscv.c:2705
+msgid "zfhmin' or `zhinxmin"
+msgstr "zfhminâ€œ Ð¸Ð»Ð¸ â€žzhinxmin"
+
+#: elfxx-riscv.c:2716
+msgid "zfhmin' and `d', or `zhinxmin' and `zdinx"
+msgstr "zfhminâ€œ Ð¸ â€ždâ€œ, Ð¸Ð»Ð¸ â€žzhinxminâ€œ Ð¸ â€žzdinx"
+
+#: elfxx-riscv.c:2727
+msgid "zfhmin' and `q', or `zhinxmin' and `zqinx"
+msgstr "zfhminâ€œ Ð¸ â€žqâ€œ, Ð¸Ð»Ð¸ â€žzhinxminâ€œ Ð¸ â€žzqinx"
+
+#: elfxx-riscv.c:2733
+msgid "d' and `zfa"
+msgstr "dâ€œ Ð¸ â€žzfa"
+
+#: elfxx-riscv.c:2741
+msgid "q' and `zfa"
+msgstr "qâ€œ Ð¸ â€žzfa"
+
+#: elfxx-riscv.c:2749
+msgid "zfh' and `zfa"
+msgstr "zfhâ€œ Ð¸ â€žzfa"
+
+#: elfxx-riscv.c:2759
+msgid "zfh' and `zfa', or `zvfh' and `zfa"
+msgstr "zfhâ€œ Ð¸ â€žzfaâ€œ, Ð¸Ð»Ð¸ â€žzvfhâ€œ Ð¸ â€žzfa"
+
+#: elfxx-riscv.c:2764
+msgid "zfh' or `zvfh"
+msgstr "zfhâ€œ Ð¸Ð»Ð¸ â€žzvfh"
+
+#: elfxx-riscv.c:2780
+msgid "zbb' or `zbkb"
+msgstr "zbbâ€œ Ð¸Ð»Ð¸ â€žzbkb"
+
+#: elfxx-riscv.c:2782
+msgid "zbc' or `zbkc"
+msgstr "zbcâ€œ Ð¸Ð»Ð¸ â€žzbkc"
+
+#: elfxx-riscv.c:2790
+msgid "zknd' or `zkne"
+msgstr "zkndâ€œ Ð¸Ð»Ð¸ â€žzkne"
+
+#: elfxx-riscv.c:2796
+msgid "v' or `zve64x' or `zve32x"
+msgstr "vâ€œ Ð¸Ð»Ð¸ â€žzve64xâ€œ Ð¸Ð»Ð¸ â€žzve32x"
+
+#: elfxx-riscv.c:2798
+msgid "v' or `zve64d' or `zve64f' or `zve32f"
+msgstr "vâ€œ Ð¸Ð»Ð¸ â€žzve64dâ€œ Ð¸Ð»Ð¸ â€žzve64fâ€œ Ð¸Ð»Ð¸ â€žzve32f"
+
+#: elfxx-riscv.c:2800
+msgid "zvbb"
+msgstr "zvbb"
+
+#: elfxx-riscv.c:2802
+msgid "zvbc"
+msgstr "zvbc"
+
+#: elfxx-riscv.c:2804
+msgid "zvkb"
+msgstr "zvkb"
+
+#: elfxx-riscv.c:2806
+msgid "zvkg"
+msgstr "zvkg"
+
+#: elfxx-riscv.c:2808
+msgid "zvkned"
+msgstr "zvkned"
+
+#: elfxx-riscv.c:2810
+msgid "zvknha' or `zvknhb"
+msgstr "zvknhaâ€œ Ð¸Ð»Ð¸ â€žzvknhb"
+
+#: elfxx-riscv.c:2812
+msgid "zvksed"
+msgstr "zvksed"
+
+#: elfxx-riscv.c:2814
+msgid "zvksh"
+msgstr "zvksh"
+
+#: elfxx-riscv.c:2818
+msgid "zcb' and `zba"
+msgstr "zcbâ€œ Ð¸ â€žzba"
+
+#: elfxx-riscv.c:2820
+msgid "zcb' and `zbb"
+msgstr "zcbâ€œ Ð¸ â€žzbb"
+
+#: elfxx-riscv.c:2822
+msgid "zcb' and `zmmul', or `zcb' and `m"
+msgstr "zcbâ€œ Ð¸ â€žzmmulâ€œ, Ð¸Ð»Ð¸ â€žzcbâ€œ Ð¸ â€žm"
+
+#: elfxx-riscv.c:2826
+msgid "h"
+msgstr "h"
+
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5738
+#, c-format
+msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸"
+
+#: elfxx-tilegx.c:4126
+#, c-format
+msgid "%pB: cannot link together %s and %s objects"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ â€ž%sâ€œ Ð¸ â€ž%sâ€œ"
+
+#: elfxx-x86.c:536 elfxx-x86.c:3440
+#, c-format
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB\n"
+msgstr "%F%P: %pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¼Ð½Ð¾ÑˆÐºÐ° Ð·Ð° Ð½ÐµÑƒÐ¼Ð½Ð¾Ð¶Ð¸Ð²Ð¸ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ\n"
+
+#: elfxx-x86.c:1043
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr "%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð·Ð°Ð¿Ð¸Ñ� Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°\n"
+
+#: elfxx-x86.c:1399
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ 64-Ð±Ð¸Ñ‚Ð½Ñƒ â€žDT_RELRâ€œ Ð±Ð¸Ñ‚Ð¼Ð°Ð¿Ñƒ\n"
+
+#: elfxx-x86.c:1435
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ 32-Ð±Ð¸Ñ‚Ð½Ñƒ â€žDT_RELRâ€œ Ð±Ð¸Ñ‚Ð¼Ð°Ð¿Ñƒ\n"
+
+#: elfxx-x86.c:1574
+#, c-format
+msgid "%F%P: %pB: failed to allocate memory for section `%pA'\n"
+msgstr "%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ\n"
+
+#: elfxx-x86.c:1761
+#, c-format
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr "%F%P: %pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð°Ð¶ÐµÑ‚Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð¾: Ð½Ð¾Ð²Ð° (%lu) != Ñ�Ñ‚Ð°Ñ€Ð° (%lu)\n"
+
+#: elfxx-x86.c:1783
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr "%F%P: %pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ñ�Ð°Ð¶ÐµÑ‚Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°\n"
+
+#: elfxx-x86.c:2230
+#, c-format
+msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
+msgstr "%F%P: %pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ñ˜Ðµ Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½\n"
+
+#: elfxx-x86.c:2312
+msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
+msgstr "%P: %pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ\n"
+
+#: elfxx-x86.c:3193
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%v, Ð¸Ð½Ñ„Ð¾: 0x%v, Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº: 0x%v) Ð·Ð° â€ž%sâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ\n"
+
+#: elfxx-x86.c:3199
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%v, Ð¸Ð½Ñ„Ð¾: 0x%v) Ð·Ð° â€ž%sâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ\n"
+
+#: elfxx-x86.c:3819
+#, c-format
+msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ x86 Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ (0x%x) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ: 0x%x>"
+
+#: elfxx-x86.c:4166
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž%sâ€œ\n"
+
+#: elfxx-x86.c:4167
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž%sâ€œ\n"
+
+#: elfxx-x86.c:4230
+msgid "IBT and SHSTK properties"
+msgstr "â€žIBTâ€œ Ð¸ â€žSHSTKâ€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð°"
+
+#: elfxx-x86.c:4232
+msgid "IBT property"
+msgstr "â€žIBTâ€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾"
+
+#: elfxx-x86.c:4234
+msgid "SHSTK property"
+msgstr "â€žSHSTKâ€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾"
+
+#: elfxx-x86.c:4239
+msgid "LAM_U48 property"
+msgstr "â€žLAM_U48â€œ property"
+
+#: elfxx-x86.c:4244
+msgid "LAM_U57 property"
+msgstr "â€žLAM_U57â€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾"
+
+#: elfxx-x86.c:4413
+msgid "%F%P: failed to create VxWorks dynamic sections\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žVxWorksâ€œ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐµ Ð¾Ð´ÐµÑ™ÐºÐµ\n"
+
+#: elfxx-x86.c:4422
+msgid "%F%P: failed to create GOT sections\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žGOTâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ\n"
+
+#: elfxx-x86.c:4440
+msgid "%F%P: failed to create ifunc sections\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žifuncâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ\n"
+
+#: elfxx-x86.c:4477
+msgid "%F%P: failed to create GOT PLT section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žGOT PLTâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#: elfxx-x86.c:4496
+msgid "%F%P: failed to create IBT-enabled PLT section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žIBTâ€œ-Ð¾Ð¼ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½ â€žPLTâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#: elfxx-x86.c:4516
+msgid "%F%P: failed to create PLT .eh_frame section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žPLT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#: elfxx-x86.c:4529
+msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žGOT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#: elfxx-x86.c:4543
+msgid "%F%P: failed to create the second PLT .eh_frame section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð´Ñ€ÑƒÐ³Ð¸ â€žPLT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#: elfxx-x86.c:4563
+msgid "%F%P: failed to create PLT .sframe section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ PLT â€ž.sframeâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#: elfxx-x86.c:4578
+msgid "%F%P: failed to create second PLT .sframe section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð´Ñ€ÑƒÐ³Ð¸ PLT â€ž.sframeâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#: elfxx-x86.c:4618
+msgid "%X%P: attempted static link of dynamic object `%pB'\n"
+msgstr "%X%P: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ… Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐºÑƒ Ð²ÐµÐ·Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€ž%pBâ€œ\n"
 
 #: ihex.c:230
-msgid "%B:%d: unexpected character `%s' in Intel Hex file"
-msgstr "%B:%d: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#, c-format
+msgid "%pB:%d: unexpected character `%s' in Intel Hex file"
+msgstr "%pB:%d: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: ihex.c:337
-msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… %u, Ð½Ð°Ñ’Ð¾Ñ… %u)"
+#: ihex.c:338
+#, c-format
+msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)"
+msgstr "%pB:%u: Ð»Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… %u, Ð½Ð°Ñ’Ð¾Ñ… %u)"
 
-#: ihex.c:392
-msgid "%B:%u: bad extended address record length in Intel Hex file"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: ihex.c:393
+#, c-format
+msgid "%pB:%u: bad extended address record length in Intel Hex file"
+msgstr "%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: ihex.c:409
-msgid "%B:%u: bad extended start address length in Intel Hex file"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: ihex.c:411
+#, c-format
+msgid "%pB:%u: bad extended start address length in Intel Hex file"
+msgstr "%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: ihex.c:426
-msgid "%B:%u: bad extended linear address record length in Intel Hex file"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: ihex.c:429
+#, c-format
+msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
+msgstr "%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: ihex.c:443
-msgid "%B:%u: bad extended linear start address length in Intel Hex file"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: ihex.c:447
+#, c-format
+msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
+msgstr "%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+
+#: ihex.c:465
+#, c-format
+msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
+msgstr "%pB:%u: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žihexâ€œ Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: ihex.c:460
-msgid "%B:%u: unrecognized ihex type %u in Intel Hex file"
-msgstr "%B:%u: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žihexâ€œ Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: ihex.c:581
+#, c-format
+msgid "%pB: internal error in ihex_read_section"
+msgstr "%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ"
 
-#: ihex.c:579
-msgid "%B: internal error in ihex_read_section"
-msgstr "%B: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ"
+#: ihex.c:614
+#, c-format
+msgid "%pB: bad section length in ihex_read_section"
+msgstr "%pB: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ"
 
-#: ihex.c:613
-msgid "%B: bad section length in ihex_read_section"
-msgstr "%B: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ"
+#: ihex.c:785
+#, c-format
+msgid "%pB 64-bit address %#<PRIx64> out of range for Intel Hex file"
+msgstr "%pB 64-Ð±Ð¸Ñ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° %#<PRIx64> Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ"
 
-#: ihex.c:826
+#: ihex.c:843
 #, c-format
-msgid "%s: address 0x%s out of range for Intel Hex file"
-msgstr "%s: Ð°Ð´Ñ€ÐµÑ�Ð° 0x%s Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ"
+msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
+msgstr "%pB: Ð°Ð´Ñ€ÐµÑ�Ð° %#<PRIx64> Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ"
 
-#: libbfd.c:863
-msgid "%B: unable to get decompressed section %A"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
+#: libbfd.c:1058
+#, c-format
+msgid "%pB: unable to get decompressed section %pA"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
 
-#: libbfd.c:1012
-msgid "%B: compiled for a big endian system and target is little endian"
-msgstr "%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð¼Ð°Ð»Ð° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚"
+#: linker.c:1713
+#, c-format
+msgid "%pB: indirect symbol `%s' to `%s' is a loop"
+msgstr "%pB: Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÐºÐ° â€ž%sâ€œ Ñ˜Ðµ Ð¿ÐµÑ‚Ñ™Ð°"
 
-#: libbfd.c:1014
-msgid "%B: compiled for a little endian system and target is big endian"
-msgstr "%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð²ÐµÐ»Ð¸ÐºÐ° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚"
+#: linker.c:1793
+msgid "%P: %pB: note: the message above does not take linker garbage collection into account\n"
+msgstr "%P: %pB: Ð½Ð°Ð¿Ð¾Ð¼ÐµÐ½Ð°: Ð¿Ð¾Ñ€ÑƒÐºÐ° Ð¸Ð·Ð½Ð°Ð´ Ð½Ðµ ÑƒÐ·Ð¸Ð¼Ð° Ð·Ð±Ð¸Ñ€ÐºÑƒ Ñ’ÑƒÐ±Ñ€Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð½Ð°Ð»Ð¾Ð³\n"
 
-#: libbfd.c:1043
+#: linker.c:2591
 #, c-format
-msgid "Deprecated %s called at %s line %d in %s\n"
-msgstr "Ð—Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñƒ â€ž%sâ€œ %d. Ñ€ÐµÐ´ Ñƒ â€ž%sâ€œ\n"
+msgid "attempt to do relocatable link with %s input and %s output"
+msgstr "Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ñƒ Ð²ÐµÐ·Ñƒ Ñ�Ð° â€ž%sâ€œ ÑƒÐ»Ð°Ð·Ð¾Ð¼ Ð¸ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·Ð¾Ð¼"
 
-#: libbfd.c:1046
+#: linker.c:2870
 #, c-format
-msgid "Deprecated %s called\n"
-msgstr "Ð—Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾\n"
+msgid "%pB: ignoring duplicate section `%pA'\n"
+msgstr "%pB: Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ\n"
 
-#: linker.c:1873
-msgid "%B: indirect symbol `%s' to `%s' is a loop"
-msgstr "%B: Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÐºÐ° â€ž%sâ€œ Ñ˜Ðµ Ð¿ÐµÑ‚Ñ™Ð°"
+#: linker.c:2880 linker.c:2890
+#, c-format
+msgid "%pB: duplicate section `%pA' has different size\n"
+msgstr "%pB: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ\n"
 
-#: linker.c:2750
+#: linker.c:2904 linker.c:2912
 #, c-format
-msgid "Attempt to do relocatable link with %s input and %s output"
-msgstr "ÐŸÐ¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ñƒ Ð²ÐµÐ·Ñƒ Ñ�Ð° â€ž%sâ€œ ÑƒÐ»Ð°Ð·Ð¾Ð¼ Ð¸ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·Ð¾Ð¼"
+msgid "%pB: could not read contents of section `%pA'\n"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ\n"
 
-#: linker.c:3035
-msgid "%B: ignoring duplicate section `%A'\n"
-msgstr "%B: Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ\n"
+#: linker.c:2921
+#, c-format
+msgid "%pB: duplicate section `%pA' has different contents\n"
+msgstr "%pB: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
 
-#: linker.c:3044 linker.c:3053
-msgid "%B: duplicate section `%A' has different size\n"
-msgstr "%B: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ\n"
+#: linker.c:3440
+#, c-format
+msgid "%pB: compiled for a big endian system and target is little endian"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð¼Ð°Ð»Ð° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚"
 
-#: linker.c:3061 linker.c:3066
-msgid "%B: could not read contents of section `%A'\n"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ\n"
+#: linker.c:3443
+#, c-format
+msgid "%pB: compiled for a little endian system and target is big endian"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð²ÐµÐ»Ð¸ÐºÐ° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚"
 
-#: linker.c:3070
-msgid "%B: duplicate section `%A' has different contents\n"
-msgstr "%B: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
+#: mach-o-arm.c:169 mach-o-arm.c:301
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð¿Ð°Ñ€ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð¿Ñ€Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: mach-o.c:648
-msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
-msgstr "bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ"
+#: mach-o-arm.c:185
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð¿Ð°Ñ€ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d"
 
-#: mach-o.c:1918
+#: mach-o-arm.c:200
 #, c-format
-msgid "mach-o: there are too many sections (%d) maximum is 255,\n"
-msgstr "mach-o: Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d) Ð½Ð°Ñ˜Ð²Ð¸ÑˆÐµ Ñ˜Ðµ 255,\n"
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ñ�ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d"
 
-#: mach-o.c:2017
+#: mach-o-arm.c:215
 #, c-format
-msgid "unable to write unknown load command 0x%lx"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° 0x%lx"
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d"
 
-#: mach-o.c:2272
+#: mach-o-arm.c:230
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð¿Ð¾Ð»ÑƒÑ�ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:262
+#, c-format
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr "Ð»Ð¾ÑˆÐµ â€žmach-o ARMâ€œ Ð²Ð°Ð½Ð¸Ð»Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d (pcrel: %d)"
+
+#: mach-o-arm.c:332
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr "Ð»Ð¾ÑˆÐµ â€žmach-o ARMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
+
+#: mach-o.c:640
+#, c-format
+msgid "<unknown mask flags>"
+msgstr "<Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¼Ð°Ñ�ÐºÐµ>"
+
+#: mach-o.c:695
+msgid " (<unknown>)"
+msgstr " (<Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾>)"
+
+#: mach-o.c:707
+#, c-format
+msgid " MACH-O header:\n"
+msgstr " â€žMACH-Oâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ:\n"
+
+#: mach-o.c:708
+#, c-format
+msgid "   magic:      %#lx\n"
+msgstr "   Ð¼Ð°Ð³Ð¸Ñ˜Ð°:         %#lx\n"
+
+#: mach-o.c:709
+#, c-format
+msgid "   cputype:    %#lx (%s)\n"
+msgstr "   Ð²Ñ€Ñ�Ñ‚Ð° Ñ†Ð¿Ñ˜:      %#lx (%s)\n"
+
+#: mach-o.c:711
+#, c-format
+msgid "   cpusubtype: %#lx%s\n"
+msgstr "   Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° Ñ†Ð¿Ñ˜:   %#lx%s\n"
+
+#: mach-o.c:713
+#, c-format
+msgid "   filetype:   %#lx\n"
+msgstr "   Ð²Ñ€Ñ�Ñ‚Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %#lx\n"
+
+#: mach-o.c:714
+#, c-format
+msgid "   ncmds:      %#lx\n"
+msgstr "   Ð±Ñ€Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸:      %#lx\n"
+
+#: mach-o.c:715
+#, c-format
+msgid "   sizeocmds:  %#lx\n"
+msgstr "   Ð²ÐµÐ»Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸:     %#lx\n"
+
+#: mach-o.c:716
+#, c-format
+msgid "   flags:      %#lx\n"
+msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ:      %#lx\n"
+
+#: mach-o.c:717
+#, c-format
+msgid "   version:    %x\n"
+msgstr "   Ð¸Ð·Ð´Ð°ÑšÐµ:         %x\n"
+
+#. Urg - what has happened ?
+#: mach-o.c:752
+#, c-format
+msgid "incompatible cputypes in mach-o files: %ld vs %ld"
+msgstr "Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ñƒ â€žmach-oâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°: â€ž%ldâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%ldâ€œ"
+
+#: mach-o.c:921
+msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
+msgstr "bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ"
+
+#: mach-o.c:1513
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr "Ð»Ð¾ÑˆÐµ â€žmach-oâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ð±Ñ€Ð¾Ñ˜Ð° Ð¾Ð´ÐµÑ™Ð°ÐºÐ°"
+
+#: mach-o.c:2155
 msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands."
 msgstr "Ð¸Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ: â€žmodtabâ€œ, â€žtocâ€œ Ð¸ â€žextrefsymsâ€œ Ñ˜Ð¾Ñˆ Ð½Ð¸Ñ�Ñƒ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¸ Ð·Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ðµ â€ždysymtabâ€œ."
 
-#: mach-o.c:2898
+#: mach-o.c:2603
+#, c-format
+msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
+msgstr "mach-o: Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%u) Ð½Ð°Ñ˜Ð²Ð¸ÑˆÐµ Ñ˜Ðµ 255,\n"
+
+#: mach-o.c:2695
+#, c-format
+msgid "unable to allocate data for load command %#x"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¿Ð¾Ð´Ð°Ñ‚ÐºÐµ Ð·Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œ"
+
+#: mach-o.c:2800
+#, c-format
+msgid "unable to write unknown load command %#x"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œ"
+
+#: mach-o.c:2984
+#, c-format
+msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
+msgstr "Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° (%#<PRIx64>) Ñ˜Ðµ Ð¸Ñ�Ð¿Ð¾Ð´ Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° (%#<PRIx64>)"
+
+#: mach-o.c:3126
+#, c-format
+msgid "unable to layout unknown load command %#x"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¸ÐºÐ°Ð¶ÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œ"
+
+#: mach-o.c:3661
+#, c-format
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€Ð°Ð²Ð°ÑšÐ°: %#lx"
+
+#: mach-o.c:3704
+#, c-format
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_64: Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€Ð°Ð²Ð°ÑšÐ°: %#lx"
+
+#: mach-o.c:3755
 #, c-format
-msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %lu"
-msgstr "bfd_mach_o_read_symtab_symbol: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ %d Ð±Ð°Ñ˜Ñ‚Ð° Ð½Ð° %lu"
+msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"
+msgstr "bfd_mach_o_read_symtab_symbol: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ %d Ð±Ð°Ñ˜Ñ‚Ð° Ð½Ð° %u"
 
-#: mach-o.c:2916
+#: mach-o.c:3774
 #, c-format
-msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %lu)"
-msgstr "bfd_mach_o_read_symtab_symbol: Ð½Ð°Ð·Ð¸Ð² Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (%lu >= %lu)"
+msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
+msgstr "bfd_mach_o_read_symtab_symbol: Ð½Ð°Ð·Ð¸Ð² Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (%lu >= %u)"
 
-#: mach-o.c:2997
+#: mach-o.c:3857
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ¾ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%dâ€œ (Ð½Ð°Ñ˜Ð². %lu): Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð°Ð¼ Ð½Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
 
-#: mach-o.c:3013
+#: mach-o.c:3876
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ¾ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ™Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ 0x%x: Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð°Ð¼ Ð½Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
 
-#: mach-o.c:3085
-msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
-msgstr "bfd_mach_o_read_symtab_symbols: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ"
-
-#: mach-o.c:3915
-msgid "%B: unknown load command 0x%lx"
-msgstr "%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° 0x%lx"
+#: mach-o.c:5075
+#, c-format
+msgid "%pB: unknown load command %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œ"
 
-#: mach-o.c:4107
+#: mach-o.c:5274
 #, c-format
 msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
 msgstr "bfd_mach_o_scan: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx/0x%lx"
 
-#: mach-o.c:4204
+#: mach-o.c:5396
 #, c-format
-msgid "unknown header byte-order value 0x%lx"
-msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÐ° Ð±Ð°Ñ˜Ñ‚Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð° 0x%lx"
+msgid "unknown header byte-order value %#x"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÐ° Ð±Ð°Ñ˜Ñ‚Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð° â€ž%#xâ€œ"
 
-#: merge.c:832
+#: merge.c:1118
 #, c-format
-msgid "%s: access beyond end of merged section (%ld)"
-msgstr "%s: Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð¸Ð·Ð° ÐºÑ€Ð°Ñ˜Ð° Ñ�Ñ‚Ð¾Ð¿Ñ™ÐµÐ½Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° (%ld)"
+msgid "%pB: access beyond end of merged section (%<PRId64>)"
+msgstr "%pB: Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð¸Ð·Ð° ÐºÑ€Ð°Ñ˜Ð° Ñ�Ñ‚Ð¾Ð¿Ñ™ÐµÐ½Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° (%<PRId64>)"
 
-#: mmo.c:455
+#: mmo.c:535
 #, c-format
-msgid "%s: No core to allocate section name %s\n"
-msgstr "%s: Ð�ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ð½Ð°Ð·Ð¸Ð²Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ\n"
+msgid "%pB: no core to allocate a symbol %d bytes long"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð´ÑƒÐ³Ð¾Ð³ %d Ð±Ð°Ñ˜Ñ‚Ð°"
 
-#: mmo.c:530
+#: mmo.c:956
 #, c-format
-msgid "%s: No core to allocate a symbol %d bytes long\n"
-msgstr "%s: Ð�ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð´ÑƒÐ³Ð¾Ð³ %d Ð±Ð°Ñ˜Ñ‚Ð°\n"
+msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
+msgstr "%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ… Ð´Ð° ÐµÐ¼Ð¸Ñ‚ÑƒÑ˜ÐµÐ¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ ÐºÐ¾Ñ˜Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ 4 â€ž%#<PRIx64>â€œ"
 
-#: mmo.c:1189
+#: mmo.c:1251
 #, c-format
-msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° Ð·Ð° $255 Ð½Ð¸Ñ˜Ðµ â€žMainâ€œ\n"
+msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° Ð·Ð° $255 Ð½Ð¸Ñ˜Ðµ â€žMainâ€œ\n"
 
-#: mmo.c:1334
+#: mmo.c:1398
 #, c-format
-msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
-msgstr "%s: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ ÑˆÐ¸Ñ€Ð¾ÐºÐ¸ Ð½Ð¸Ð· Ð·Ð½Ð°ÐºÐ° 0x%02X 0x%02X Ð½Ð°ÐºÐ¾Ð½ Ð½Ð°Ð·Ð¸Ð²Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° ÐºÐ¾Ñ˜Ð¸ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ñ�Ð° â€ž%sâ€œ\n"
+msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ ÑˆÐ¸Ñ€Ð¾ÐºÐ¸ Ð½Ð¸Ð· Ð·Ð½Ð°ÐºÐ° 0x%02X 0x%02X Ð½Ð°ÐºÐ¾Ð½ Ð½Ð°Ð·Ð¸Ð²Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° ÐºÐ¾Ñ˜Ð¸ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ñ�Ð° â€ž%sâ€œ\n"
 
-#: mmo.c:1568
+#: mmo.c:1414
 #, c-format
-msgid "%s: invalid mmo file: unsupported lopcode `%d'\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð»Ð¾Ð¿ÐºÐ¾Ð´ â€ž%dâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½\n"
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr "%pB: Ð½Ð°Ð·Ð¸Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÐ¼Ð°ÑˆÑƒÑ˜Ðµ Ð´Ð°Ñ‚Ñƒ Ð½Ð°Ñ˜Ð²ÐµÑ›Ñƒ Ð´ÑƒÐ¶Ð¸Ð½Ñƒ Ð¾Ð´ %d"
 
-#: mmo.c:1578
+#: mmo.c:1643
 #, c-format
-msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… YZ = 1 Ð´Ð¾Ð±Ð¸Ñ… YZ = %d Ð·Ð° â€žlop_quoteâ€œ\n"
+msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð»Ð¾Ð¿ÐºÐ¾Ð´ â€ž%dâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½\n"
 
-#: mmo.c:1614
+#: mmo.c:1654
 #, c-format
-msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 1 Ð¸Ð»Ð¸ z = 2, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_locâ€œ\n"
+msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… YZ = 1 Ð´Ð¾Ð±Ð¸Ñ… YZ = %d Ð·Ð° â€žlop_quoteâ€œ\n"
 
-#: mmo.c:1660
+#: mmo.c:1698
 #, c-format
-msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 1 Ð¸Ð»Ð¸ z = 2, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_fixoâ€œ\n"
+msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 1 Ð¸Ð»Ð¸ z = 2, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_locâ€œ\n"
 
-#: mmo.c:1699
+#: mmo.c:1749
 #, c-format
-msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… y = 0 Ð´Ð¾Ð±Ð¸Ñ… y = %d Ð·Ð° â€žlop_fixrxâ€œ\n"
+msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 1 Ð¸Ð»Ð¸ z = 2, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_fixoâ€œ\n"
 
-#: mmo.c:1708
+#: mmo.c:1798
 #, c-format
-msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 16 Ð¸Ð»Ð¸ z = 24, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_fixrxâ€œ\n"
+msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… y = 0 Ð´Ð¾Ð±Ð¸Ñ… y = %d Ð·Ð° â€žlop_fixrxâ€œ\n"
 
-#: mmo.c:1731
+#: mmo.c:1809
 #, c-format
-msgid "%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ð¾Ð´ÐµÑ›Ð¸ Ð±Ð°Ñ˜Ñ‚ Ñ€ÐµÑ‡Ð¸ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ 0 Ð¸Ð»Ð¸ 1, Ð´Ð¾Ð±Ð¸Ñ… %d Ð·Ð° â€žlop_fixrxâ€œ\n"
+msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… z = 16 Ð¸Ð»Ð¸ z = 24, Ð´Ð¾Ð±Ð¸Ñ… z = %d Ð·Ð° â€žlop_fixrxâ€œ\n"
 
-#: mmo.c:1754
+#: mmo.c:1834
 #, c-format
-msgid "%s: cannot allocate file name for file number %d, %d bytes\n"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð·Ð° Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %d, %d Ð±Ð°Ñ˜Ñ‚Ð°\n"
+msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ð¾Ð´ÐµÑ›Ð¸ Ð±Ð°Ñ˜Ñ‚ Ñ€ÐµÑ‡Ð¸ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ 0 Ð¸Ð»Ð¸ 1, Ð´Ð¾Ð±Ð¸Ñ… %d Ð·Ð° â€žlop_fixrxâ€œ\n"
 
-#: mmo.c:1774
+#: mmo.c:1863
 #, c-format
-msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %d â€ž%sâ€œ, Ñ˜Ðµ Ð²ÐµÑ› ÑƒÐ½ÐµÑˆÐµÐ½ ÐºÐ°Ð¾ â€ž%sâ€œ\n"
+msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð·Ð° Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %d, %d Ð±Ð°Ñ˜Ñ‚Ð°\n"
 
-#: mmo.c:1787
+#: mmo.c:1885
 #, c-format
-msgid "%s: invalid mmo file: file name for number %d was not specified before use\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð·Ð° Ð±Ñ€Ð¾Ñ˜ %d Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½ Ð¿Ñ€Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ðµ\n"
+msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ %d â€ž%sâ€œ, Ñ˜Ðµ Ð²ÐµÑ› ÑƒÐ½ÐµÑˆÐµÐ½ ÐºÐ°Ð¾ â€ž%sâ€œ\n"
 
-#: mmo.c:1893
+#: mmo.c:1900
 #, c-format
-msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¿Ð¾Ñ™Ðµ y Ð¸ z â€žlop_stabâ€œ-Ð° Ð½Ð¸Ñ˜Ðµ Ð½ÑƒÐ»Ð°, y: %d, z: %d\n"
+msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð·Ð° Ð±Ñ€Ð¾Ñ˜ %d Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½ Ð¿Ñ€Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ðµ\n"
 
-#: mmo.c:1929
+#: mmo.c:2012
 #, c-format
-msgid "%s: invalid mmo file: lop_end not last item in file\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: â€žlop_endâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ð»ÐµÐ´ÑšÐ° Ñ�Ñ‚Ð°Ð²ÐºÐ° Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸\n"
+msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð¿Ð¾Ñ™Ðµ y Ð¸ z â€žlop_stabâ€œ-Ð° Ð½Ð¸Ñ˜Ðµ Ð½ÑƒÐ»Ð°, y: %d, z: %d\n"
 
-#: mmo.c:1942
+#: mmo.c:2049
 #, c-format
-msgid "%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: YZ â€žlop_endâ€œ-Ð° (%ld) Ð½Ð¸Ñ˜Ðµ Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ Ñ�Ð° Ð±Ñ€Ð¾Ñ˜ÐµÐ¼ Ñ‚ÐµÑ‚Ñ€Ð°Ñ�Ð° Ð´Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾Ð³ â€žlop_stabâ€œ-Ð° (%ld)\n"
+msgid "%pB: invalid mmo file: lop_end not last item in file\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: â€žlop_endâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ð»ÐµÐ´ÑšÐ° Ñ�Ñ‚Ð°Ð²ÐºÐ° Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸\n"
 
-#: mmo.c:2652
+#: mmo.c:2063
 #, c-format
-msgid "%s: invalid symbol table: duplicate symbol `%s'\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ\n"
+msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: YZ â€žlop_endâ€œ-Ð° (%ld) Ð½Ð¸Ñ˜Ðµ Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ Ñ�Ð° Ð±Ñ€Ð¾Ñ˜ÐµÐ¼ Ñ‚ÐµÑ‚Ñ€Ð°Ñ�Ð° Ð´Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾Ð³ â€žlop_stabâ€œ-Ð° (%ld)\n"
 
-#: mmo.c:2892
+#: mmo.c:2776
 #, c-format
-msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n"
-msgstr "%s: Ð›Ð¾ÑˆÐ° Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: â€žMainâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð½Ð° â€ž%sâ€œ ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%sâ€œ\n"
+msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ\n"
 
-#: mmo.c:2984
+#: mmo.c:3015
 #, c-format
-msgid "%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð²ÐµÐ»Ð¸ÐºÐ° Ð·Ð° â€žmmoâ€œ, Ð²ÐµÑ›Ð° Ð¾Ð´ 65535 32-Ð±Ð¸Ñ‚Ð½Ð¸Ñ… Ñ€ÐµÑ‡Ð¸: %d.  Ð¡Ð°Ð¼Ð¾ â€žMainâ€œ Ð±Ð¸Ñ›Ðµ Ð´Ð°Ñ‚Ð¾.\n"
+msgid "%pB: bad symbol definition: `Main' set to %<PRIx64> rather than the start address %<PRIx64>\n"
+msgstr "%pB: Ð»Ð¾ÑˆÐ° Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: â€žMainâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð½Ð° â€ž%<PRIx64>â€œ ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%<PRIx64>â€œ\n"
 
-#: mmo.c:3029
+#: mmo.c:3114
 #, c-format
-msgid "%s: internal error, symbol table changed size from %d to %d words\n"
-msgstr "%s: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°, Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¸Ð· %d Ñƒ %d Ñ€ÐµÑ‡Ð¸\n"
+msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð²ÐµÐ»Ð¸ÐºÐ° Ð·Ð° â€žmmoâ€œ, Ð²ÐµÑ›Ð° Ð¾Ð´ 65535 32-Ð±Ð¸Ñ‚Ð½Ð¸Ñ… Ñ€ÐµÑ‡Ð¸: %d.  Ð¡Ð°Ð¼Ð¾ â€žMainâ€œ Ð±Ð¸Ñ›Ðµ Ð´Ð°Ñ‚Ð¾.\n"
 
-#: mmo.c:3081
+#: mmo.c:3160
 #, c-format
-msgid "%s: internal error, internal register section %s had contents\n"
-msgstr "%s: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°, ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° â€ž%sâ€œ Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
+msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
+msgstr "%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°, Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¸Ð· %d Ñƒ %d Ñ€ÐµÑ‡Ð¸\n"
 
-#: mmo.c:3132
+#: mmo.c:3213
 #, c-format
-msgid "%s: no initialized registers; section length 0\n"
-msgstr "%s: Ð½ÐµÐ¼Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° 0\n"
+msgid "%pB: internal error, internal register section %pA had contents\n"
+msgstr "%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°, ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° â€ž%pAâ€œ Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
 
-#: mmo.c:3138
+#: mmo.c:3264
 #, c-format
-msgid "%s: too many initialized registers; section length %ld\n"
-msgstr "%s: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° %ld\n"
+msgid "%pB: no initialized registers; section length 0\n"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° 0\n"
 
-#: mmo.c:3143
+#: mmo.c:3271
 #, c-format
-msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÑƒÐ¶Ð¸Ð½Ðµ %ld: 0x%lx%08lx\n"
+msgid "%pB: too many initialized registers; section length %<PRId64>"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° %<PRId64>"
 
-#: oasys.c:881
+#: mmo.c:3276
 #, c-format
-msgid "%s: can not represent section `%s' in oasys"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ â€žoasysâ€œ"
+msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÑƒÐ¶Ð¸Ð½Ðµ %<PRId64>: %#<PRIx64>"
 
-#: osf-core.c:128
+#: osf-core.c:127
 #, c-format
-msgid "Unhandled OSF/1 core file section type %d\n"
-msgstr "Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð²Ñ€Ñ�Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° %d Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ OSF/1 Ñ˜ÐµÐ·Ð³Ñ€Ð°\n"
+msgid "unhandled OSF/1 core file section type %d"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð²Ñ€Ñ�Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° %d Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ OSF/1 Ñ˜ÐµÐ·Ð³Ñ€Ð°"
 
-#: pe-mips.c:607
-msgid "%B: `ld -r' not supported with PE MIPS objects\n"
-msgstr "%B: â€žld -râ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð° â€žPE MIPSâ€œ\n"
+#: pdp11.c:1588
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¾Ð·Ð½Ð°Ñ‡Ð°Ð²Ð° Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ (Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾)"
 
-#. OK, at this point the following variables are set up:
-#. src = VMA of the memory we're fixing up
-#. mem = pointer to memory we're fixing up
-#. val = VMA of what we need to refer to.
-#: pe-mips.c:719
-msgid "%B: unimplemented %s\n"
-msgstr "%B: Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ â€ž%sâ€œ\n"
+#: pef.c:531
+#, c-format
+msgid "bfd_pef_scan: unknown architecture 0x%lx"
+msgstr "bfd_pef_scan: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx"
 
-#: pe-mips.c:745
-msgid "%B: jump too far away\n"
-msgstr "%B: Ñ�ÐºÐ¾Ðº Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð´Ð°Ð»ÐµÐºÐ¾\n"
+#: pei-x86_64.c:174 pei-x86_64.c:228 pei-x86_64.c:238 pei-x86_64.c:263
+#: pei-x86_64.c:275 pei-x86_64.c:289 pei-x86_64.c:307 pei-x86_64.c:319
+#: pei-x86_64.c:331
+#, c-format
+msgid "warning: corrupt unwind data\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ Ð¸Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸\n"
 
-#: pe-mips.c:771
-msgid "%B: bad pair/reflo after refhi\n"
-msgstr "%B: Ð»Ð¾ÑˆÐµ â€žpair/refloâ€œ Ð½Ð°ÐºÐ¾Ð½ â€žrefhiâ€œ\n"
+#. PR 17512: file: 2245-7442-0.004.
+#: pei-x86_64.c:352
+#, c-format
+msgid "Unknown: %x"
+msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾: %x"
 
-#: pef.c:522
+#: pei-x86_64.c:403 pei-x86_64.c:413 pei-x86_64.c:422
 #, c-format
-msgid "bfd_pef_scan: unknown architecture 0x%lx"
-msgstr "bfd_pef_scan: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx"
+msgid "warning: xdata section corrupt\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ…-Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°\n"
 
-#: pei-x86_64.c:469
+#: pei-x86_64.c:477
 #, c-format
-msgid "warning: .pdata section size (%ld) is not a multiple of %d\n"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d\n"
+msgid "Too many unwind codes (%ld)\n"
+msgstr "ÐŸÑ€ÐµÐ²Ð¸ÑˆÐµ Ð¸Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ… ÐºÐ¾Ð´Ð¾Ð²Ð° (%ld)\n"
 
-#: pei-x86_64.c:474 peigen.c:1626 peigen.c:1809 pepigen.c:1626 pepigen.c:1809
-#: pex64igen.c:1626 pex64igen.c:1809
+#: pei-x86_64.c:563
+#, c-format
+msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d\n"
+
+#: pei-x86_64.c:570
+#, c-format
+msgid "Warning: %s section size is zero\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ\n"
+
+#: pei-x86_64.c:585
+#, c-format
+msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (%ld) Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð²Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ (%ld)\n"
+
+#: pei-x86_64.c:594
 #, c-format
 msgid ""
 "\n"
-"The Function Table (interpreted .pdata section contents)\n"
+"The Function Table (interpreted %s section contents)\n"
 msgstr ""
 "\n"
-"Ð¢Ð°Ð±ÐµÐ»Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ)\n"
+"Ð¢Ð°Ð±ÐµÐ»Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)\n"
 
-#: pei-x86_64.c:476
+#: pei-x86_64.c:597
 #, c-format
 msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
 msgstr "vma:\t\t\tÐ�Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ°\t Ð�Ð´Ñ€ÐµÑ�Ð° ÐºÑ€Ð°Ñ˜Ð°\t  Ð˜Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸\n"
 
+#: pei-x86_64.c:722
+#, c-format
+msgid ""
+"\n"
+"Dump of %s\n"
+msgstr ""
+"\n"
+"Ð˜Ð·Ð»Ð°Ð· Ð·Ð° â€ž%sâ€œ\n"
+
 #. XXX code yet to be written.
-#: peicode.h:758
-msgid "%B: Unhandled import type; %x"
-msgstr "%B: Ð�ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x"
-
-#: peicode.h:763
-msgid "%B: Unrecognised import type; %x"
-msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x"
-
-#: peicode.h:777
-msgid "%B: Unrecognised import name type; %x"
-msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð½Ð°Ð·Ð¸Ð² Ð²Ñ€Ñ�Ñ‚Ðµ ÑƒÐ²Ð¾Ð·Ð°; %x"
-
-#: peicode.h:1173
-msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive"
-msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°"
-
-#: peicode.h:1185
-msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive"
-msgstr "%B: ÐŸÐ¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°"
-
-#: peicode.h:1203
-msgid "%B: size field is zero in Import Library Format header"
-msgstr "%B: Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñ˜Ðµ Ð½ÑƒÐ»Ð° Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°"
-
-#: peicode.h:1234
-msgid "%B: string not null terminated in ILF object file."
-msgstr "%B: Ð½Ð¸Ñ�ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð° Ð½ÑƒÐ»Ð¾Ð¼ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ Ð˜Ð›Ð¤ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°."
+#: peicode.h:820
+#, c-format
+msgid "%pB: unhandled import type; %x"
+msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x"
+
+#: peicode.h:826
+#, c-format
+msgid "%pB: unrecognized import type; %x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x"
+
+#: peicode.h:841
+#, c-format
+msgid "%pB: unrecognized import name type; %x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð½Ð°Ð·Ð¸Ð² Ð²Ñ€Ñ�Ñ‚Ðµ ÑƒÐ²Ð¾Ð·Ð°; %x"
+
+#: peicode.h:1280
+#, c-format
+msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°"
+
+#: peicode.h:1293
+#, c-format
+msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
+msgstr "%pB: Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°"
 
-#: ppcboot.c:391
+#: peicode.h:1311
+#, c-format
+msgid "%pB: size field is zero in Import Library Format header"
+msgstr "%pB: Ð¿Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñ˜Ðµ Ð½ÑƒÐ»Ð° Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°"
+
+#: peicode.h:1337
+#, c-format
+msgid "%pB: string not null terminated in ILF object file"
+msgstr "%pB: Ð½Ð¸Ñ�ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð° Ð½ÑƒÐ»Ð¾Ð¼ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€žILFâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: peicode.h:1393
+#, c-format
+msgid "%pB: error: debug data ends beyond end of debug directory"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´Ð°Ñ†Ð¸ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñ�Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð°Ñ˜Ñƒ Ð¸Ð·Ð²Ð°Ð½ ÐºÑ€Ð°Ñ˜Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°"
+
+#: peicode.h:1563
+#, c-format
+msgid "%pB: adjusting invalid SectionAlignment"
+msgstr "%pB: Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ñ™Ð°Ð¼ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¾Ð´ÐµÑ™ÐºÐ°"
+
+#: peicode.h:1573
+#, c-format
+msgid "%pB: adjusting invalid FileAlignment"
+msgstr "%pB: Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ñ™Ð°Ð¼ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ"
+
+#: peicode.h:1581
+#, c-format
+msgid "%pB: invalid NumberOfRvaAndSizes"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð±Ñ€Ð¾Ñ˜ Ð Ð²Ð° Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°"
+
+#: plugin.c:258
+msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr "Ñ€Ð°Ð´Ð½Ð¸ Ð¾ÐºÐ²Ð¸Ñ€ Ð¿Ñ€Ð¸ÐºÑ™ÑƒÑ‡ÐºÐ°: Ð½ÐµÐ¼Ð° Ð²Ð¸ÑˆÐµ Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¼Ð°ÑšÐµ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚Ð°/Ð°Ñ€Ñ…Ð¸Ð²Ð°\n"
+
+#: ppcboot.c:392
 #, c-format
 msgid ""
 "\n"
@@ -4104,64 +6511,87 @@ msgstr ""
 "\n"
 "Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ â€žppcbootâ€œ:\n"
 
-#: ppcboot.c:392
+#: ppcboot.c:393
 #, c-format
 msgid "Entry offset        = 0x%.8lx (%ld)\n"
-msgstr "ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÐ½Ð¾Ñ�Ð°       = 0x%.8lx (%ld)\n"
+msgstr "ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÐ½Ð¾Ñ�Ð°   = 0x%.8lx (%ld)\n"
 
-#: ppcboot.c:394
+#: ppcboot.c:395
 #, c-format
 msgid "Length              = 0x%.8lx (%ld)\n"
-msgstr "Ð”ÑƒÐ¶Ð¸Ð½Ð°              = 0x%.8lx (%ld)\n"
+msgstr "Ð”ÑƒÐ¶Ð¸Ð½Ð°          = 0x%.8lx (%ld)\n"
 
-#: ppcboot.c:398
+#: ppcboot.c:399
 #, c-format
 msgid "Flag field          = 0x%.2x\n"
-msgstr "ÐŸÐ¾Ñ™Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ      = 0x%.2x\n"
+msgstr "ÐŸÐ¾Ñ™Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  = 0x%.2x\n"
 
-#: ppcboot.c:404
+#: ppcboot.c:405
 #, c-format
 msgid "Partition name      = \"%s\"\n"
-msgstr "Ð�Ð°Ð·Ð¸Ð² Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ     = â€ž%sâ€œ\n"
+msgstr "Ð�Ð°Ð·Ð¸Ð² Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ = â€ž%sâ€œ\n"
 
-#: ppcboot.c:423
+#: ppcboot.c:425
 #, c-format
 msgid ""
 "\n"
 "Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
 msgstr ""
 "\n"
-"ÐŸÐ¾Ñ‡ÐµÑ‚Ð°Ðº Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+"ÐŸÐ¾Ñ‡ÐµÑ‚Ð°Ðº Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
 
-#: ppcboot.c:429
+#: ppcboot.c:432
 #, c-format
 msgid "Partition[%d] end    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
-msgstr "ÐšÑ€Ð°Ñ˜ Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]   = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+msgstr "ÐšÑ€Ð°Ñ˜ Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]     = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
 
-#: ppcboot.c:435
+#: ppcboot.c:439
 #, c-format
 msgid "Partition[%d] sector = 0x%.8lx (%ld)\n"
-msgstr "ÐžÐ´ÐµÑ™Ð°Ðº Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d] = 0x%.8lx (%ld)\n"
+msgstr "ÐžÐ´ÐµÑ™Ð°Ðº Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]   = 0x%.8lx (%ld)\n"
 
-#: ppcboot.c:437
+#: ppcboot.c:443
 #, c-format
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
-msgstr "Ð”ÑƒÐ¶Ð¸Ð½Ð° Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d] = 0x%.8lx (%ld)\n"
+msgstr "Ð”ÑƒÐ¶Ð¸Ð½Ð° Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜Ðµ[%d]   = 0x%.8lx (%ld)\n"
 
-#: reloc.c:7371
-msgid "INPUT_SECTION_FLAGS are not supported.\n"
-msgstr "â€žINPUT_SECTION_FLAGSâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾.\n"
+#: reloc.c:8504
+msgid "INPUT_SECTION_FLAGS are not supported"
+msgstr "â€žINPUT_SECTION_FLAGSâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
 
-#: reloc.c:7526
-msgid "%X%P: %B(%A): relocation \"%R\" goes out of range\n"
-msgstr "%X%P: %B(%A): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%Râ€œ Ð¸Ð´Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°\n"
+#: reloc.c:8770
+#, c-format
+msgid "%pB: unrecognized relocation type %#x in section `%pA'"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %#x Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
 
-#: rs6000-core.c:448
+#. PR 21803: Suggest the most likely cause of this error.
+#: reloc.c:8774
 #, c-format
-msgid "%s: warning core file truncated"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð°"
+msgid "is this version of the linker - %s - out of date ?"
+msgstr "Ð´Ð° Ð½Ð¸Ñ˜Ðµ Ð¾Ð²Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° â€“ %s â€“ Ð¼Ð°Ð»Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ ?"
 
-#: som.c:5471
+#: rs6000-core.c:471
+#, c-format
+msgid "%pB: warning core file truncated"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð°"
+
+#: som.c:3002
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of order"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+
+#: som.c:3015
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of range"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+
+#. User has specified a subspace without its containing space.
+#: som.c:5405
+#, c-format
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr "%pB[%pA]: Ð½ÐµÐ¼Ð° Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° Ð·Ð° Ñ€Ð°Ð·Ð¼Ð°Ðº â€ž%pAâ€œ"
+
+#: som.c:5451
 #, c-format
 msgid ""
 "\n"
@@ -4170,52 +6600,106 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ð¼Ð¾Ñ›Ð½Ð¾ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ\n"
 
-#: som.c:5776
+#: som.c:5760
 msgid "som_sizeof_headers unimplemented"
 msgstr "â€žsom_sizeof_headersâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#: srec.c:261
-msgid "%B:%d: Unexpected character `%s' in S-record file\n"
-msgstr "%B:%d: Ð�ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ Ð¡-Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
+#: srec.c:260
+#, c-format
+msgid "%pB:%d: unexpected character `%s' in S-record file"
+msgstr "%pB:%d: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ S-Ð·Ð°Ð¿Ð¸Ñ�Ð°"
+
+#: srec.c:488
+#, c-format
+msgid "%pB:%d: byte count %d too small"
+msgstr "%pB:%d: Ð±Ñ€Ð¾Ñ˜ Ð±Ð°Ñ˜Ñ‚Ð° â€ž%dâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸"
+
+#: srec.c:580 srec.c:614
+#, c-format
+msgid "%pB:%d: bad checksum in S-record file"
+msgstr "%pB:%d: Ð»Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ S-Ð·Ð°Ð¿Ð¸Ñ�Ð°"
+
+#: stabs.c:308
+#, c-format
+msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
+msgstr "%pB(%pA+%#lx): ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€ÑšÐ°ÐºÐ° Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð½Ð¸Ñ�ÐºÐµ"
+
+#: syms.c:1112
+msgid "unsupported .stab relocation"
+msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€ž.stabâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: vms-alpha.c:479
+msgid "corrupt EIHD record - size is too small"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žEIHDâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº â€“ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°"
+
+#: vms-alpha.c:665
+#, c-format
+msgid "unable to read EIHS record at offset %#x"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHSâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ â€ž%#xâ€œ"
+
+#: vms-alpha.c:1157
+msgid "record is too small for symbol name length"
+msgstr "Ñ�Ð½Ð¸Ð¼Ð°Ðº Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸ Ð·Ð° Ð´ÑƒÐ¶Ð¸Ð½Ñƒ Ð½Ð°Ð·Ð¸Ð²Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: vms-alpha.c:1190
+#, c-format
+msgid "corrupt EGSD record: its size (%#x) is too small"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº: ÑšÐµÐ³Ð¾Ð²Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° (%#x) Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°"
 
-#: srec.c:567 srec.c:600
-msgid "%B:%d: Bad checksum in S-record file\n"
-msgstr "%B:%d: Ð›Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ Ð¡-Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
+#: vms-alpha.c:1214
+#, c-format
+msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ° %d: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° (%#x) Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° (%#x)"
 
-#: stabs.c:279
-msgid "%B(%A+0x%lx): Stabs entry has invalid string index."
-msgstr "%B(%A+0x%lx): Ð£Ð½Ð¾Ñ� Ð¾ÐºÑ€ÑšÐ°ÐºÐ° Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð½Ð¸Ñ�ÐºÐµ."
+#: vms-alpha.c:1224
+#, c-format
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ° %d: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° (%#x) Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°"
 
-#: syms.c:1079
-msgid "Unsupported .stab relocation"
-msgstr "ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž.stabâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+#: vms-alpha.c:1366
+#, c-format
+msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº: ÑšÐµÐ³Ð¾Ð²Ð¾ â€žpsindxâ€œ Ð¿Ð¾Ñ™Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ (%#lx)"
 
-#: vms-alpha.c:1294
+#: vms-alpha.c:1441
 #, c-format
-msgid "Unknown EGSD subtype %d"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° EGSD Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° %d"
+msgid "unknown EGSD subtype %d"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žEGSDâ€œ Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° %d"
 
-#: vms-alpha.c:1325
+#: vms-alpha.c:1474
 #, c-format
-msgid "Stack overflow (%d) in _bfd_vms_push"
-msgstr "ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° (%d) Ñƒ â€ž_bfd_vms_pushâ€œ-Ñƒ"
+msgid "stack overflow (%d) in _bfd_vms_push"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° (%d) Ñƒ â€ž_bfd_vms_pushâ€œ-Ñƒ"
 
-#: vms-alpha.c:1338
-msgid "Stack underflow in _bfd_vms_pop"
-msgstr "ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñƒ â€ž_bfd_vms_popâ€œ-Ñƒ"
+#: vms-alpha.c:1488
+msgid "stack underflow in _bfd_vms_pop"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñƒ â€ž_bfd_vms_popâ€œ-Ñƒ"
+
+#: vms-alpha.c:1562
+#, c-format
+msgid "dst_define_location %u too large"
+msgstr "â€ždst_define_location %uâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾"
 
 #. These names have not yet been added to this switch statement.
-#: vms-alpha.c:1575
+#: vms-alpha.c:1765
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žETIRâ€œ Ð½Ð°Ñ€ÐµÐ´Ð±Ð° %d"
 
-#: vms-alpha.c:1762
+#: vms-alpha.c:1796
+msgid "corrupt vms value"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° â€žvmsâ€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚"
+
+#: vms-alpha.c:1927
+msgid "corrupt ETIR record encountered"
+msgstr "Ð½Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€žETIRâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº"
+
+#: vms-alpha.c:1989
 #, c-format
 msgid "bad section index in %s"
 msgstr "Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€ž%sâ€œ"
 
-#: vms-alpha.c:1775
+#: vms-alpha.c:2003
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€žSTAâ€œ Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%sâ€œ"
@@ -4225,1388 +6709,1479 @@ msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€žSTAâ€œ Ð
 #. Rotate.
 #. Redefine symbol to current location.
 #. Define a literal.
-#: vms-alpha.c:1951 vms-alpha.c:1982 vms-alpha.c:2229
+#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557
 #, c-format
 msgid "%s: not supported"
 msgstr "%s: Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
 
-#: vms-alpha.c:1957
+#: vms-alpha.c:2217
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#: vms-alpha.c:2213
+#: vms-alpha.c:2382 vms-alpha.c:2397
+#, c-format
+msgid "invalid %s"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ â€ž%sâ€œ"
+
+#. Divide by zero is supposed to give a result of zero,
+#. and a non-fatal warning message.
+#: vms-alpha.c:2457
+#, c-format
+msgid "%s divide by zero"
+msgstr "%s Ð´ÐµÐ»Ð¸ Ð½ÑƒÐ»Ð¾Ð¼"
+
+#: vms-alpha.c:2523
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð° â€ž%sâ€œ Ñ�Ð° ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð¼"
 
-#: vms-alpha.c:2247
+#: vms-alpha.c:2581
 #, c-format
 msgid "reserved cmd %d"
 msgstr "Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ�Ð°Ð½Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%dâ€œ"
 
-#: vms-alpha.c:2332
-msgid "Object module NOT error-free !\n"
-msgstr "ÐœÐ¾Ð´ÑƒÐ» Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð�Ð˜ÐˆÐ• Ð±ÐµÐ· Ð³Ñ€ÐµÑˆÐ°ÐºÐ° !\n"
+#: vms-alpha.c:2665
+msgid "corrupt EEOM record - size is too small"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žEEOMâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº â€“ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°"
+
+#: vms-alpha.c:2674
+msgid "object module not error-free !"
+msgstr "Ð¼Ð¾Ð´ÑƒÐ» Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð±ÐµÐ· Ð³Ñ€ÐµÑˆÐ°ÐºÐ° !"
 
-#: vms-alpha.c:3657
+#: vms-alpha.c:4012
 #, c-format
-msgid "SEC_RELOC with no relocs in section %s"
-msgstr "â€žSEC_RELOCâ€œ Ð½ÐµÐ¼Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
+msgid "SEC_RELOC with no relocs in section %pA"
+msgstr "â€žSEC_RELOCâ€œ Ñ˜Ðµ Ð±ÐµÐ· Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
 
-#: vms-alpha.c:3709 vms-alpha.c:3922
+#: vms-alpha.c:4064 vms-alpha.c:4292
 #, c-format
-msgid "Size error in section %s"
-msgstr "Ð“Ñ€ÐµÑˆÐºÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
+msgid "size error in section %pA"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
 
-#: vms-alpha.c:3868
-msgid "Spurious ALPHA_R_BSR reloc"
-msgstr "ÐŸÑ€Ð¸Ð²Ð¸Ð´Ð½Ð¾ â€žALPHA_R_BSRâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: vms-alpha.c:4235
+msgid "spurious ALPHA_R_BSR reloc"
+msgstr "Ð¿Ñ€Ð¸Ð²Ð¸Ð´Ð½Ð¾ â€žALPHA_R_BSRâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: vms-alpha.c:3909
+#: vms-alpha.c:4278
 #, c-format
-msgid "Unhandled relocation %s"
-msgstr "Ð�ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
+msgid "unhandled relocation %s"
+msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
 
-#: vms-alpha.c:4199
+#: vms-alpha.c:4643
 #, c-format
 msgid "unknown source command %d"
 msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° Ð¸Ð·Ð²Ð¾Ñ€Ð° â€ž%dâ€œ"
 
-#: vms-alpha.c:4260
-msgid "DST__K_SET_LINUM_INCR not implemented"
-msgstr "â€žDST__K_SET_LINUM_INCRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
-
-#: vms-alpha.c:4266
-msgid "DST__K_SET_LINUM_INCR_W not implemented"
-msgstr "â€žDST__K_SET_LINUM_INCR_Wâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
-
-#: vms-alpha.c:4272
-msgid "DST__K_RESET_LINUM_INCR not implemented"
-msgstr "â€žDST__K_RESET_LINUM_INCRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
-
-#: vms-alpha.c:4278
-msgid "DST__K_BEG_STMT_MODE not implemented"
-msgstr "â€žDST__K_BEG_STMT_MODEâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
-
-#: vms-alpha.c:4284
-msgid "DST__K_END_STMT_MODE not implemented"
-msgstr "â€žDST__K_END_STMT_MODEâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
-
-#: vms-alpha.c:4311
-msgid "DST__K_SET_PC not implemented"
-msgstr "â€žDST__K_SET_PCâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
-
-#: vms-alpha.c:4317
-msgid "DST__K_SET_PC_W not implemented"
-msgstr "â€žDST__K_SET_PC_Wâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
-
-#: vms-alpha.c:4323
-msgid "DST__K_SET_PC_L not implemented"
-msgstr "â€žDST__K_SET_PC_Lâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
-
-#: vms-alpha.c:4329
-msgid "DST__K_SET_STMTNUM not implemented"
-msgstr "â€žDST__K_SET_STMTNUMâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+#: vms-alpha.c:4795 vms-alpha.c:4800 vms-alpha.c:4805 vms-alpha.c:4810
+#: vms-alpha.c:4815 vms-alpha.c:4838 vms-alpha.c:4843 vms-alpha.c:4848
+#: vms-alpha.c:4853
+#, c-format
+msgid "%s not implemented"
+msgstr "â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#: vms-alpha.c:4372
+#: vms-alpha.c:4889
 #, c-format
 msgid "unknown line command %d"
 msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ñ€ÐµÐ´Ð½Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%dâ€œ"
 
-#: vms-alpha.c:4846 vms-alpha.c:4863 vms-alpha.c:4877 vms-alpha.c:4892
-#: vms-alpha.c:4904 vms-alpha.c:4915 vms-alpha.c:4927
+#: vms-alpha.c:5328
+msgid "corrupt reloc record"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#: vms-alpha.c:5358 vms-alpha.c:5376 vms-alpha.c:5393 vms-alpha.c:5411
+#: vms-alpha.c:5424 vms-alpha.c:5436 vms-alpha.c:5449
 #, c-format
-msgid "Unknown reloc %s + %s"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s + %sâ€œ"
+msgid "unknown reloc %s + %s"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s + %sâ€œ"
 
-#: vms-alpha.c:4982
+#: vms-alpha.c:5508
 #, c-format
-msgid "Unknown reloc %s"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
+msgid "unknown reloc %s"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
 
-#: vms-alpha.c:4995
-msgid "Invalid section index in ETIR"
-msgstr "Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žETIRâ€œ-Ñƒ"
+#: vms-alpha.c:5522
+msgid "invalid section index in ETIR"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žETIRâ€œ-Ñƒ"
 
-#: vms-alpha.c:5002
-msgid "Relocation for non-REL psect"
-msgstr "ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð½Ðµ-Ð Ð•Ð› Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº"
+#: vms-alpha.c:5531
+msgid "relocation for non-REL psect"
+msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð½Ðµ-â€žRELâ€œ Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: vms-alpha.c:5049
+#: vms-alpha.c:5584
 #, c-format
-msgid "Unknown symbol in command %s"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸ â€ž%sâ€œ"
+msgid "unknown symbol in command %s"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸ â€ž%sâ€œ"
 
-#: vms-alpha.c:5564
+#: vms-alpha.c:6003
+#, c-format
+msgid "reloc (%d) is *UNKNOWN*"
+msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%d) Ñ˜Ðµ *Ð�Ð•ÐŸÐžÐ—Ð�Ð�Ð¢Ðž*"
+
+#: vms-alpha.c:6119
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u): "
 
-#: vms-alpha.c:5573
+#: vms-alpha.c:6124
+#, c-format
+msgid "   Error: The length is less than the length of an EMH record\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð´ÑƒÐ¶Ð¸Ð½Ðµ â€žEMHâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°\n"
+
+#: vms-alpha.c:6141
+#, c-format
+msgid "   Error: The record length is less than the size of an EMH_MHD record\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ�Ð½Ð¸Ð¼ÐºÐ° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ â€žEMH_MHDâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°\n"
+
+#: vms-alpha.c:6144
 #, c-format
 msgid "Module header\n"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¼Ð¾Ð´ÑƒÐ»Ð°\n"
 
-#: vms-alpha.c:5574
+#: vms-alpha.c:6145
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   Ð½Ð¸Ð²Ð¾ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ         : %u\n"
 
-#: vms-alpha.c:5575
+#: vms-alpha.c:6146
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   Ð½Ð°Ñ˜Ð². Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð±ÐµÐ»ÐµÐ¶ÐµÑšÐ°: %u\n"
 
-#: vms-alpha.c:5578
+#: vms-alpha.c:6152
+#, c-format
+msgid "   Error: The module name is missing\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ\n"
+
+#: vms-alpha.c:6158
+#, c-format
+msgid "   Error: The module name is too long\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³\n"
+
+#: vms-alpha.c:6161
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð°           : %.*s\n"
 
-#: vms-alpha.c:5580
+#: vms-alpha.c:6165
+#, c-format
+msgid "   Error: The module version is missing\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ\n"
+
+#: vms-alpha.c:6171
+#, c-format
+msgid "   Error: The module version is too long\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³Ð¾\n"
+
+#: vms-alpha.c:6174
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   Ð¸Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð°          : %.*s\n"
 
-#: vms-alpha.c:5582
+#: vms-alpha.c:6177
+#, c-format
+msgid "   Error: The compile date is truncated\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð”Ð°Ñ‚ÑƒÐ¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ° Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½\n"
+
+#: vms-alpha.c:6179
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   Ð´Ð°Ñ‚ÑƒÐ¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°        : %.17s\n"
 
-#: vms-alpha.c:5587
+#: vms-alpha.c:6184
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Ð�Ð°Ð·Ð¸Ð² Ñ˜ÐµÐ·Ð¸ÐºÐ° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°\n"
 
-#: vms-alpha.c:5588
+#: vms-alpha.c:6185
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ñ˜ÐµÐ·Ð¸ÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:5595
+#: vms-alpha.c:6189
 #, c-format
 msgid "Source Files Header\n"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¸Ð·Ð²Ð¾Ñ€Ð°\n"
 
-#: vms-alpha.c:5596
+#: vms-alpha.c:6190
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:5603
+#: vms-alpha.c:6194
 #, c-format
 msgid "Title Text Header\n"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð½Ð°Ñ�Ð»Ð¾Ð²Ð°\n"
 
-#: vms-alpha.c:5604
+#: vms-alpha.c:6195
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   Ð½Ð°Ñ�Ð»Ð¾Ð²: %.*s\n"
 
-#: vms-alpha.c:5611
+#: vms-alpha.c:6199
 #, c-format
 msgid "Copyright Header\n"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð°ÑƒÑ‚Ð¾Ñ€Ñ�ÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²Ð°\n"
 
-#: vms-alpha.c:5612
+#: vms-alpha.c:6200
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   Ð°ÑƒÑ‚Ð¾Ñ€Ñ�ÐºÐ° Ð¿Ñ€Ð°Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:5618
+#: vms-alpha.c:6204
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° emh Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ\n"
 
-#: vms-alpha.c:5628
+#: vms-alpha.c:6214
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):\n"
 
-#: vms-alpha.c:5629
+#: vms-alpha.c:6219
+#, c-format
+msgid "   Error: The length is less than the length of an EEOM record\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð´ÑƒÐ¶Ð¸Ð½Ðµ â€žEEOMâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°\n"
+
+#: vms-alpha.c:6223
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr "   Ð±Ñ€Ð¾Ñ˜ â€žcondâ€œ Ð¿Ð°Ñ€Ð¾Ð²Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u\n"
 
-#: vms-alpha.c:5631
+#: vms-alpha.c:6225
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   Ð´Ð¾Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐµ ÐºÐ¾Ð´Ð°: %u\n"
 
-#: vms-alpha.c:5635
+#: vms-alpha.c:6229
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð°: 0x%02x\n"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:6230
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº Ð°Ð´Ñ€ÐµÑ�Ðµ Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð° : %u\n"
 
-#: vms-alpha.c:5638
+#: vms-alpha.c:6232
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð°          : 0x%08x\n"
 
-#: vms-alpha.c:5647
+#: vms-alpha.c:6241
 msgid " WEAK"
 msgstr " WEAK"
 
-#: vms-alpha.c:5649
+#: vms-alpha.c:6243
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5651
+#: vms-alpha.c:6245
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5653 vms-alpha.c:5674
+#: vms-alpha.c:6247 vms-alpha.c:6268
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5655
+#: vms-alpha.c:6249
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5657
+#: vms-alpha.c:6251
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5659
+#: vms-alpha.c:6253
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5661
+#: vms-alpha.c:6255
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5668
+#: vms-alpha.c:6262
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5670
+#: vms-alpha.c:6264
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5672
+#: vms-alpha.c:6266
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5676
+#: vms-alpha.c:6270
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5678
+#: vms-alpha.c:6272
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5680
+#: vms-alpha.c:6274
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5682
+#: vms-alpha.c:6276
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5684
+#: vms-alpha.c:6278
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5686
+#: vms-alpha.c:6280
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5688
+#: vms-alpha.c:6282
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5690
+#: vms-alpha.c:6284
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5692
+#: vms-alpha.c:6286
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5701
+#: vms-alpha.c:6295
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):\n"
 
-#: vms-alpha.c:5713
+#: vms-alpha.c:6310
 #, c-format
 msgid "  EGSD entry %2u (type: %u, len: %u): "
-msgstr "  â€žEGSDâ€œ ÑƒÐ½Ð¾Ñ� â€ž%2uâ€œ (Ð²Ñ€Ñ�Ñ‚Ð°ype: %u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u): "
+msgstr "  â€žEGSDâ€œ ÑƒÐ½Ð¾Ñ� â€ž%2uâ€œ (Ð²Ñ€Ñ�Ñ‚Ð°: %u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u): "
 
-#: vms-alpha.c:5725
+#: vms-alpha.c:6316 vms-alpha.c:6611
+#, c-format
+msgid "   Erroneous length\n"
+msgstr "   ÐŸÐ¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°\n"
+
+#: vms-alpha.c:6329
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr "PSC â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°\n"
 
-#: vms-alpha.c:5726 vms-alpha.c:5743
+#: vms-alpha.c:6330 vms-alpha.c:6350
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ : 2**%u\n"
 
-#: vms-alpha.c:5727 vms-alpha.c:5744
+#: vms-alpha.c:6331 vms-alpha.c:6351
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%04x"
 
-#: vms-alpha.c:5731
+#: vms-alpha.c:6335
 #, c-format
 msgid "   alloc (len): %u (0x%08x)\n"
 msgstr "   Ð´Ð¾Ð´ÐµÐ»Ð° (Ð´ÑƒÐ¶Ð¸Ð½Ð°): %u (0x%08x)\n"
 
-#: vms-alpha.c:5732 vms-alpha.c:5789 vms-alpha.c:5838
+#: vms-alpha.c:6337 vms-alpha.c:6403 vms-alpha.c:6471
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð²        : %.*s\n"
 
-#: vms-alpha.c:5742
+#: vms-alpha.c:6349
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr "SPSC â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ð´ÐµÑ™ÐµÐ½Ðµ Ñ�Ð»Ð¸ÐºÐµ\n"
 
-#: vms-alpha.c:5748
+#: vms-alpha.c:6355
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   Ð´Ð¾Ð´ÐµÐ»Ð° (Ð´ÑƒÐ¶Ð¸Ð½Ð°)  : %u (0x%08x)\n"
 
-#: vms-alpha.c:5749
+#: vms-alpha.c:6356
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð»Ð¸ÐºÐµ: 0x%08x\n"
 
-#: vms-alpha.c:5751
+#: vms-alpha.c:6358
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð¸Ð¼Ð²ÐµÐº-Ð° : 0x%08x\n"
 
-#: vms-alpha.c:5753
+#: vms-alpha.c:6361
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð²           : %.*s\n"
 
-#: vms-alpha.c:5766
+#: vms-alpha.c:6377
 #, c-format
 msgid "SYM - Global symbol definition\n"
 msgstr "SYM â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
 
-#: vms-alpha.c:5767 vms-alpha.c:5827 vms-alpha.c:5848 vms-alpha.c:5867
+#: vms-alpha.c:6378 vms-alpha.c:6459 vms-alpha.c:6483 vms-alpha.c:6506
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%04x"
 
-#: vms-alpha.c:5770
+#: vms-alpha.c:6381
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ°: 0x%08x\n"
 
-#: vms-alpha.c:5774
+#: vms-alpha.c:6385
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° ÐºÐ¾Ð´Ð°: 0x%08x\n"
 
-#: vms-alpha.c:5776
+#: vms-alpha.c:6387
 #, c-format
 msgid "   psect index for entry point : %u\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° Ð·Ð° Ñ‚Ð°Ñ‡ÐºÑƒ ÑƒÐ½Ð¾Ñ�Ð°: %u\n"
 
-#: vms-alpha.c:5779 vms-alpha.c:5855 vms-alpha.c:5874
+#: vms-alpha.c:6390 vms-alpha.c:6490 vms-alpha.c:6513
 #, c-format
 msgid "   psect index : %u\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° : %u\n"
 
-#: vms-alpha.c:5781 vms-alpha.c:5857 vms-alpha.c:5876
+#: vms-alpha.c:6393 vms-alpha.c:6493 vms-alpha.c:6516
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð²         : %.*s\n"
 
-#: vms-alpha.c:5788
+#: vms-alpha.c:6401
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM â€” Ð£Ð¿ÑƒÑ‚Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
 
-#: vms-alpha.c:5800
+#: vms-alpha.c:6416
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr "IDC â€” ÐŸÑ€Ð¾Ð²ÐµÑ€Ð° Ð´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐ°\n"
 
-#: vms-alpha.c:5801
+#: vms-alpha.c:6417
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%08x"
 
-#: vms-alpha.c:5805
+#: vms-alpha.c:6421
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð°ÑšÐµ Ð¸Ð´-Ð° : %x\n"
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:6423
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   Ð¾Ð·Ð±Ð¸Ñ™Ð½Ð¾Ñ�Ñ‚ Ð³Ñ€ÐµÑˆÐºÐµ: %x\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:6427
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² ÐµÐ½Ñ‚Ð¸Ñ‚ÐµÑ‚Ð°  : %.*s\n"
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:6433
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°  : %.*s\n"
 
-#: vms-alpha.c:5815
+#: vms-alpha.c:6442
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ Ð±Ð¸Ð½Ð°Ñ€Ð½Ð¾Ð³ : 0x%08x\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:6446
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   Ð°Ñ�ÐºÑ€Ð¸ ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ   : %.*s\n"
 
-#: vms-alpha.c:5826
+#: vms-alpha.c:6458
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° ÑƒÐ½Ð¸Ð²ÐµÑ€Ð·Ð°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
 
-#: vms-alpha.c:5830
+#: vms-alpha.c:6462
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: 0x%08x\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6464
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   Ñ‚Ð°Ñ‡ÐºÐ° ÑƒÐ½Ð¾Ñ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:5834
+#: vms-alpha.c:6466
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   Ð¾Ð¿Ð¸Ñ�Ð½Ð¸Ðº Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð° : 0x%08x\n"
 
-#: vms-alpha.c:5836
+#: vms-alpha.c:6468
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ°: %u\n"
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6482
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
 
-#: vms-alpha.c:5851
+#: vms-alpha.c:6486
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   Ð²ÐµÐºÑ‚Ð¾Ñ€     : 0x%08x\n"
 
-#: vms-alpha.c:5853 vms-alpha.c:5872
+#: vms-alpha.c:6488 vms-alpha.c:6511
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ°: %u\n"
 
-#: vms-alpha.c:5866
+#: vms-alpha.c:6505
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr "SYMM â€” ÐžÐ¿ÑˆÑ‚Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ð¾Ð¼\n"
 
-#: vms-alpha.c:5870
+#: vms-alpha.c:6509
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ: 0x%08x\n"
 
-#: vms-alpha.c:5881
+#: vms-alpha.c:6522
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð² â€žegsdâ€œ ÑƒÐ½Ð¾Ñ� Ð²Ñ€Ñ�Ñ‚Ðµ %u\n"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6561
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr "    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: 0x%08x\n"
 
-#: vms-alpha.c:5918
+#: vms-alpha.c:6565
 #, c-format
 msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
 msgstr "    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° 1: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ 1: 0x%08x %08x\n"
 
-#: vms-alpha.c:5922
+#: vms-alpha.c:6570
 #, c-format
 msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
 msgstr "    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° 2: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ 2: 0x%08x %08x\n"
 
-#: vms-alpha.c:5927
+#: vms-alpha.c:6576
 #, c-format
 msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
 msgstr "    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° 3: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ 3: 0x%08x %08x\n"
 
-#: vms-alpha.c:5932
+#: vms-alpha.c:6581
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "    Ð¾Ð¿ÑˆÑ‚Ð¸ Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:5942
+#: vms-alpha.c:6593
 #, c-format
-msgid "  %s (len=%u+%u):\n"
-msgstr "  %s (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u+%u):\n"
+msgid "  %s (len=%u):\n"
+msgstr "  %s (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):\n"
 
-#: vms-alpha.c:5957
+#: vms-alpha.c:6616
 #, c-format
-msgid "   (type: %3u, size: 4+%3u): "
-msgstr "   (Ð²Ñ€Ñ�Ñ‚Ð°: %3u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 4+%3u): "
+msgid "   (type: %3u, size: %3u): "
+msgstr "   (Ð²Ñ€Ñ�Ñ‚Ð°: %3u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %3u): "
 
-#: vms-alpha.c:5961
+#: vms-alpha.c:6622
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr "STA_GBL (Ð¾Ð¿ÑˆÑ‚Ð¾Ñ�Ñ‚ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) %.*s\n"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6626
 #, c-format
-msgid "STA_LW (stack longword) 0x%08x\n"
-msgstr "STA_LW (Ð´ÑƒÐ³Ð° Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) 0x%08x\n"
+msgid "STA_LW (stack longword)"
+msgstr "STA_LW (Ð´ÑƒÐ³Ð° Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)"
 
-#: vms-alpha.c:5969
+#: vms-alpha.c:6632
 #, c-format
-msgid "STA_QW (stack quadword) 0x%08x %08x\n"
-msgstr "STA_QW (Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) 0x%08x %08x\n"
+msgid "STA_QW (stack quadword)"
+msgstr "STA_QW (Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ° Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)"
 
-#: vms-alpha.c:5974
+#: vms-alpha.c:6639
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr "STA_PQ (Ð¾Ñ�Ð½Ð¾Ð²Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)\n"
 
-#: vms-alpha.c:5975
+#: vms-alpha.c:6642
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr "    Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x %08x\n"
 
-#: vms-alpha.c:5981
+#: vms-alpha.c:6648
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr "STA_LI (Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)\n"
 
-#: vms-alpha.c:5984
+#: vms-alpha.c:6651
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr "STA_MOD (Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6654
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr "STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ° Ð¿Ð¾Ñ€ÐµÑ’ÐµÑšÐ°)\n"
 
-#: vms-alpha.c:5991
+#: vms-alpha.c:6658
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð±Ð°Ñ˜Ñ‚)\n"
 
-#: vms-alpha.c:5994
+#: vms-alpha.c:6661
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ñ€ÐµÑ‡)\n"
 
-#: vms-alpha.c:5997
+#: vms-alpha.c:6664
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð´ÑƒÐ³Ñƒ Ñ€ÐµÑ‡)\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6667
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾Ñ€ÐµÑ‡)\n"
 
-#: vms-alpha.c:6006
+#: vms-alpha.c:6674
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr "STO_IMMR (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð°Ð»Ð½Ð¾ Ð¿Ð¾Ð½Ð°Ð²Ñ™Ð°ÑšÐµ) %u Ð±Ð°Ñ˜Ñ‚Ð°\n"
 
-#: vms-alpha.c:6013
+#: vms-alpha.c:6683
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¾Ð¿ÑˆÑ‚Ðµ) %.*s\n"
 
-#: vms-alpha.c:6017
+#: vms-alpha.c:6688
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr "STO_CA (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ ÐºÐ¾Ð´Ð°) %.*s\n"
 
-#: vms-alpha.c:6021
+#: vms-alpha.c:6692
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ñƒ Ð³Ñ€Ð°Ð½Ñƒ)\n"
 
-#: vms-alpha.c:6024
+#: vms-alpha.c:6695
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ñƒ)\n"
 
-#: vms-alpha.c:6027
+#: vms-alpha.c:6698
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr "STO_OFF (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº)\n"
 
-#: vms-alpha.c:6033
+#: vms-alpha.c:6705
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr "STO_IMM (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð°Ð»Ð½Ð¾) %u Ð±Ð°Ñ˜Ñ‚Ð°\n"
 
-#: vms-alpha.c:6040
+#: vms-alpha.c:6714
 #, c-format
 msgid "STO_GBL_LW (store global longword) %.*s\n"
 msgstr "STO_GBL_LW (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¾Ð¿ÑˆÑ‚Ñƒ Ð´ÑƒÐ³Ñƒ Ñ€ÐµÑ‡) %.*s\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6718
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr "STO_OFF (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð›ÐŸ Ñ�Ð° Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ�Ð¾Ð¼ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ°)\n"
 
-#: vms-alpha.c:6047
+#: vms-alpha.c:6721
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr "STO_BR_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ�Ñ‚ Ð³Ñ€Ð°Ð½Ðµ) *ÑƒÑ€Ð°Ð´Ð¸Ñ‚Ð¸*\n"
 
-#: vms-alpha.c:6050
+#: vms-alpha.c:6724
 #, c-format
 msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
 msgstr "STO_BR_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð³Ñ€Ð°Ð½Ðµ) *ÑƒÑ€Ð°Ð´Ð¸Ñ‚Ð¸*\n"
 
-#: vms-alpha.c:6054
+#: vms-alpha.c:6728
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr "OPR_NOP (Ð±ÐµÐ· Ñ€Ð°Ð´ÑšÐµ)\n"
 
-#: vms-alpha.c:6057
+#: vms-alpha.c:6731
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (Ð·Ð±Ñ€Ð°Ñ˜Ð°)\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6734
 #, c-format
-msgid "OPR_SUB (substract)\n"
+msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (Ð¾Ð´ÑƒÐ·Ð¸Ð¼Ð°)\n"
 
-#: vms-alpha.c:6063
+#: vms-alpha.c:6737
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (Ð¼Ð½Ð¾Ð¶Ð¸)\n"
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6740
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (Ð´ÐµÐ»Ð¸)\n"
 
-#: vms-alpha.c:6069
+#: vms-alpha.c:6743
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¾ Ð˜)\n"
 
-#: vms-alpha.c:6072
+#: vms-alpha.c:6746
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¾ ÑƒÐºÑ™ÑƒÑ‡Ð¸Ð²Ð¾ Ð˜Ð›Ð˜)\n"
 
-#: vms-alpha.c:6075
+#: vms-alpha.c:6749
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¾ Ð¸Ñ�ÐºÑ™ÑƒÑ‡Ð¸Ð²Ð¾ Ð˜Ð›Ð˜)\n"
 
-#: vms-alpha.c:6078
+#: vms-alpha.c:6752
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (Ð½ÐµÐ³Ð°Ñ†Ð¸Ñ˜Ð°)\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6755
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (ÐºÐ¾Ð¼Ð¿Ð»ÐµÐ¼ÐµÐ½Ñ‚)\n"
 
-#: vms-alpha.c:6084
+#: vms-alpha.c:6758
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (ÑƒÐ¼ÐµÑ›Ðµ Ð¿Ð¾Ñ™Ðµ)\n"
 
-#: vms-alpha.c:6087
+#: vms-alpha.c:6761
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (Ð°Ñ€Ð¸Ñ‚Ð¼ÐµÑ‚Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾Ð¼Ð°Ðº)\n"
 
-#: vms-alpha.c:6090
+#: vms-alpha.c:6764
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (Ð¿Ð¾Ð¼Ð°Ðº Ð±ÐµÐ· Ð·Ð½Ð°ÐºÐ°)\n"
 
-#: vms-alpha.c:6093
+#: vms-alpha.c:6767
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (Ð¾ÐºÑ€ÐµÑ›Ðµ)\n"
 
-#: vms-alpha.c:6096
+#: vms-alpha.c:6770
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (Ð±Ð¸Ñ€Ð°)\n"
 
-#: vms-alpha.c:6099
+#: vms-alpha.c:6773
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr "OPR_REDEF (Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ‚ÐµÐºÑƒÑ›Ðµ Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñ˜Ðµ)\n"
 
-#: vms-alpha.c:6102
+#: vms-alpha.c:6776
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr "OPR_REDEF (Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚)\n"
 
-#: vms-alpha.c:6106
+#: vms-alpha.c:6780
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr "STC_LP (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿Ð°Ñ€ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ° ÑƒÑ�Ð»Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6110
+#: vms-alpha.c:6784
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr "STC_LP_PSB (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿Ð°Ñ€ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ° ÑƒÑ�Ð»Ð¾Ð²Ð° + Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6111
+#: vms-alpha.c:6788
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿Ð°Ðº: %.*s\n"
 
-#: vms-alpha.c:6114
+#: vms-alpha.c:6795
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ�: %.*s\n"
 
-#: vms-alpha.c:6117
+#: vms-alpha.c:6801
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ�Ñ‚ ÑƒÑ�Ð»Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6118
+#: vms-alpha.c:6804
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¾Ð¿ÑˆÑ‚Ðµ: %.*s\n"
 
-#: vms-alpha.c:6122
+#: vms-alpha.c:6809
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr "STC_GCA (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ ÐºÐ¾Ð´Ð° ÑƒÑ�Ð»Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6123
+#: vms-alpha.c:6812
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð½Ð°Ð·Ð¸Ð² Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:6127
+#: vms-alpha.c:6817
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr "STC_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÑ�Ð»Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6129
+#: vms-alpha.c:6821
 #, c-format
 msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x %08x\n"
 
-#: vms-alpha.c:6136
+#: vms-alpha.c:6828
 #, c-format
 msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
 msgstr "STC_NOP_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žNOPâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸)\n"
 
-#: vms-alpha.c:6140
+#: vms-alpha.c:6832
 #, c-format
 msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
 msgstr "STC_NOP_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žNOPâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÑƒ + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)\n"
 
-#: vms-alpha.c:6144
+#: vms-alpha.c:6836
 #, c-format
 msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
 msgstr "STC_BSR_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žBSRâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸)\n"
 
-#: vms-alpha.c:6148
+#: vms-alpha.c:6840
 #, c-format
 msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
 msgstr "STC_BSR_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žBSRâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÑƒ + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)\n"
 
-#: vms-alpha.c:6152
+#: vms-alpha.c:6844
 #, c-format
 msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
 msgstr "STC_LDA_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žLDAâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸)\n"
 
-#: vms-alpha.c:6156
+#: vms-alpha.c:6848
 #, c-format
 msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
 msgstr "STC_LDA_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žLDAâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÑƒ + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)\n"
 
-#: vms-alpha.c:6160
+#: vms-alpha.c:6852
 #, c-format
 msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
 msgstr "STC_BOH_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žBOHâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸)\n"
 
-#: vms-alpha.c:6164
+#: vms-alpha.c:6856
 #, c-format
 msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
 msgstr "STC_BOH_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° â€žBOHâ€œ ÑƒÑ�Ð»Ð¾Ð²Ð° Ð½Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÑƒ + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)\n"
 
-#: vms-alpha.c:6169
+#: vms-alpha.c:6861
 #, c-format
 msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
 msgstr "STC_NBH_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° ÑƒÑ�Ð»Ð¾Ð² Ð¸Ð»Ð¸ Ð½Ð°Ñ˜Ð°Ð²Ñƒ Ð½Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸)\n"
 
-#: vms-alpha.c:6173
+#: vms-alpha.c:6865
 #, c-format
 msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
 msgstr "STC_NBH_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° ÑƒÑ�Ð»Ð¾Ð² Ð¸Ð»Ð¸ Ð½Ð°Ñ˜Ð°Ð²Ñƒ Ð½Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÑƒ + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)\n"
 
-#: vms-alpha.c:6177
+#: vms-alpha.c:6869
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr "CTL_SETRB (Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð° Ð¾Ñ�Ð½Ð¾Ð²Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°)\n"
 
-#: vms-alpha.c:6183
+#: vms-alpha.c:6875
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr "CTL_AUGRB (Ð¿Ð¾Ð²ÐµÑ›Ð°Ð²Ð° Ð¾Ñ�Ð½Ð¾Ð²Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°) %u\n"
 
-#: vms-alpha.c:6187
+#: vms-alpha.c:6880
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ Ð¼ÐµÑ�Ñ‚Ð¾)\n"
 
-#: vms-alpha.c:6190
+#: vms-alpha.c:6883
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð° Ð¼ÐµÑ�Ñ‚Ð¾)\n"
 
-#: vms-alpha.c:6193
+#: vms-alpha.c:6886
 #, c-format
 msgid "CTL_STKDL (stack defined location)\n"
 msgstr "CTL_STKDL (Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ¾Ð¼ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð¾)\n"
 
-#: vms-alpha.c:6196 vms-alpha.c:6610
+#: vms-alpha.c:6889 vms-alpha.c:7317 vms-alpha.c:7478
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð¾*\n"
 
-#: vms-alpha.c:6226 vms-alpha.c:6265
+#: vms-alpha.c:6914
 #, c-format
-msgid "cannot read GST record length\n"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð´ÑƒÐ¶Ð¸Ð½Ñƒ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
+msgid "cannot read GST record header\n"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
 
 #. Ill-formed.
-#: vms-alpha.c:6247
+#: vms-alpha.c:6937
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€žEMHâ€œ Ñƒ Ð¿Ñ€Ð²Ð¾Ð¼ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ\n"
 
-#: vms-alpha.c:6273
+#: vms-alpha.c:6961
 #, c-format
-msgid "cannot read GST record header\n"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
-
-#: vms-alpha.c:6286
-#, c-format
-msgid " corrupted GST\n"
-msgstr " Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGSTâ€œ\n"
+msgid "corrupted GST\n"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGSTâ€œ\n"
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6974
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�\n"
 
-#: vms-alpha.c:6323
+#: vms-alpha.c:7001
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr " Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð² â€žEOBJâ€œ ÑƒÐ½Ð¾Ñ� Ð²Ñ€Ñ�Ñ‚Ðµ %u\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:7026
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr "  Ð±Ñ€Ð¾Ñ˜ Ð±Ð¸Ñ‚Ð°: %u, Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:7040
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr "   Ð¼Ð°Ð¿Ð° Ð±Ð¸Ñ‚Ð°: 0x%08x (ÑƒÐºÑƒÐ¿Ð½Ð¾: %u):\n"
 
-#: vms-alpha.c:6366
+#: vms-alpha.c:7047
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6391
+#: vms-alpha.c:7074
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  Ñ�Ð»Ð¸ÐºÐ° %u (%u ÑƒÐ½Ð¾Ñ�Ð°)\n"
 
-#: vms-alpha.c:6396
+#: vms-alpha.c:7080
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: 0x%08x\n"
 
-#: vms-alpha.c:6417
+#: vms-alpha.c:7103
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  Ñ�Ð»Ð¸ÐºÐ° %u (%u ÑƒÐ½Ð¾Ñ�Ð°), Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜:\n"
 
-#: vms-alpha.c:6424
+#: vms-alpha.c:7110
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6546
+#: vms-alpha.c:7236
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 Ð±Ð¸Ñ‚Ð° *Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾*\n"
 
-#: vms-alpha.c:6550
+#: vms-alpha.c:7241
 #, c-format
 msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
 msgstr "ÐºÐ»Ð°Ñ�Ð°: %u, Ð´-Ð²Ñ€Ñ�Ñ‚Ð°: %u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡: 0x%08x\n"
 
-#: vms-alpha.c:6561
+#: vms-alpha.c:7252
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr "Ð½Ð¸Ð· â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð½ÐµÐ¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð½\n"
 
-#: vms-alpha.c:6565
+#: vms-alpha.c:7259
 #, c-format
 msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
 msgstr "Ð´Ð¸Ð¼Ñ†Ñ‚: %u, Ð°-Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: 0x%02x, Ñ†Ð¸Ñ„Ñ€Ðµ: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°: %u\n"
 
-#: vms-alpha.c:6569
+#: vms-alpha.c:7264
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "Ð°Ñ€-Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6573
+#: vms-alpha.c:7268
 #, c-format
 msgid "Strides:\n"
 msgstr "ÐšÐ¾Ñ€Ð°Ñ†Ð¸:\n"
 
-#: vms-alpha.c:6578
-#, c-format
-msgid "[%u]: %u\n"
-msgstr "[%u]: %u\n"
-
-#: vms-alpha.c:6583
+#: vms-alpha.c:7282
 #, c-format
 msgid "Bounds:\n"
 msgstr "Ð“Ñ€Ð°Ð½Ð¸Ñ†Ðµ:\n"
 
-#: vms-alpha.c:6588
+#: vms-alpha.c:7289
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr "[%u]: Ð”Ð¾ÑšÐ°: %u, Ð³Ð¾Ñ€ÑšÐ°: %u\n"
 
-#: vms-alpha.c:6600
+#: vms-alpha.c:7303
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr "Ð½Ð¸Ñ�ÐºÐ° Ð±Ð¸Ñ‚Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð°\n"
 
-#: vms-alpha.c:6604
+#: vms-alpha.c:7310
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "Ð¾Ñ�Ð½Ð¾Ð²Ð°: %u, Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜: %u\n"
 
-#: vms-alpha.c:6624
+#: vms-alpha.c:7336
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "Ð²-Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: 0x%02x, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: 0x%08x "
 
-#: vms-alpha.c:6630
+#: vms-alpha.c:7343
 #, c-format
 msgid "(no value)\n"
 msgstr "(Ð±ÐµÐ· Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸)\n"
 
-#: vms-alpha.c:6633
+#: vms-alpha.c:7346
 #, c-format
 msgid "(not active)\n"
 msgstr "(Ð½Ð¸Ñ˜Ðµ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾)\n"
 
-#: vms-alpha.c:6636
+#: vms-alpha.c:7349
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¾)\n"
 
-#: vms-alpha.c:6639
+#: vms-alpha.c:7352
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(Ð¾Ð¿Ð¸Ñ�Ð½Ð¸Ðº)\n"
 
-#: vms-alpha.c:6643
+#: vms-alpha.c:7357
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(Ð¿Ñ€Ð°Ñ‚ÐµÑ›Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚)\n"
 
-#: vms-alpha.c:6646
+#: vms-alpha.c:7360
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ˜Ð° Ñ�Ð»ÐµÐ´ÐµÑ›Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸)\n"
 
-#: vms-alpha.c:6649
+#: vms-alpha.c:7363
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð±Ð¸Ñ‚Ð° %u)\n"
 
-#: vms-alpha.c:6652
+#: vms-alpha.c:7367
 #, c-format
 msgid "(reg: %u, disp: %u, indir: %u, kind: "
 msgstr "(Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€: %u, Ñ€Ð°Ð·Ð¼ÐµÑˆÑ‚Ð°Ñ˜: %u, Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾: %u, Ð²Ñ€Ñ�Ñ‚Ð°: "
 
-#: vms-alpha.c:6659
+#: vms-alpha.c:7374
 msgid "literal"
 msgstr "Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚"
 
-#: vms-alpha.c:6662
+#: vms-alpha.c:7377
 msgid "address"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: vms-alpha.c:6665
+#: vms-alpha.c:7380
 msgid "desc"
 msgstr "Ð¾Ð¿Ð¸Ñ�"
 
-#: vms-alpha.c:6668
+#: vms-alpha.c:7383
 msgid "reg"
 msgstr "Ñ€ÐµÐ³"
 
-#: vms-alpha.c:6743
+#: vms-alpha.c:7404
+#, c-format
+msgid "len: %2u, kind: %2u "
+msgstr "Ð´ÑƒÐ¶Ð¸Ð½Ð°: %2u, Ð²Ñ€Ñ�Ñ‚Ð°: %2u "
+
+#: vms-alpha.c:7412
+#, c-format
+msgid "atomic, type=0x%02x %s\n"
+msgstr "Ð°Ñ‚Ð¾Ð¼Ñ�ÐºÐ¸, Ð²Ñ€Ñ�Ñ‚Ð°=0x%02x %s\n"
+
+#: vms-alpha.c:7417
+#, c-format
+msgid "indirect, defined at 0x%08x\n"
+msgstr "Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ð½Ð¾, Ð¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ Ð½Ð° 0x%08x\n"
+
+#: vms-alpha.c:7421
+#, c-format
+msgid "typed pointer\n"
+msgstr "ÑƒÐºÑƒÑ†Ð°Ð½Ð¸ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡\n"
+
+#: vms-alpha.c:7425
+#, c-format
+msgid "pointer\n"
+msgstr "Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡\n"
+
+#: vms-alpha.c:7436
+#, c-format
+msgid "array, dim: %u, bitmap: "
+msgstr "Ð½Ð¸Ð·, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð±Ð¸Ñ‚Ð¼Ð°Ð¿Ð°: "
+
+#: vms-alpha.c:7451
+#, c-format
+msgid "array descriptor:\n"
+msgstr "Ð¾Ð¿Ð¸Ñ�Ð½Ð¸Ðº Ð½Ð¸Ð·Ð°:\n"
+
+#: vms-alpha.c:7462
+#, c-format
+msgid "type spec for element:\n"
+msgstr "Ð¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ Ð·Ð° ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚:\n"
+
+#: vms-alpha.c:7464
+#, c-format
+msgid "type spec for subscript %u:\n"
+msgstr "Ð¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ Ð·Ð° Ð¿Ð¾Ð´Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñƒ â€ž%uâ€œ:\n"
+
+#: vms-alpha.c:7489
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Ð¢Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°:\n"
 
-#: vms-alpha.c:6754
+#: vms-alpha.c:7500
 #, c-format
 msgid "cannot read DST header\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žGSTâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ\n"
 
-#: vms-alpha.c:6759
+#: vms-alpha.c:7506
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr " Ð²Ñ€Ñ�Ñ‚Ð°: %3u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %3u (Ð¿Ñ€Ð¸ 0x%08x): "
 
-#: vms-alpha.c:6773
+#: vms-alpha.c:7523
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDSTâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»\n"
 
-#: vms-alpha.c:6816
+#: vms-alpha.c:7567
 #, c-format
 msgid "standard data: %s\n"
 msgstr "Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸: %s\n"
 
-#: vms-alpha.c:6819 vms-alpha.c:6903
+#: vms-alpha.c:7571 vms-alpha.c:7695
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6826
+#: vms-alpha.c:7579
 #, c-format
 msgid "modbeg\n"
 msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð¼Ð¾Ð´ÑƒÐ»Ð°\n"
 
-#: vms-alpha.c:6827
+#: vms-alpha.c:7583
 #, c-format
 msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
 msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %d, Ñ˜ÐµÐ·Ð¸Ðº: %u, Ð²ÐµÑ›Ð¸: %u, Ð¼Ð°ÑšÐ¸: %u\n"
 
-#: vms-alpha.c:6833 vms-alpha.c:7099
+#: vms-alpha.c:7593 vms-alpha.c:7959
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð°           : %.*s\n"
 
-#: vms-alpha.c:6836
+#: vms-alpha.c:7600
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð¸Ð»Ð°Ñ†  : %.*s\n"
 
-#: vms-alpha.c:6841
+#: vms-alpha.c:7607
 #, c-format
 msgid "modend\n"
 msgstr "ÐºÑ€Ð°Ñ˜ Ð¼Ð¾Ð´ÑƒÐ»Ð°\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7614
 msgid "rtnbeg\n"
 msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ñ€ÑƒÑ‚Ð¸Ð½Ðµ\n"
 
-#: vms-alpha.c:6849
+#: vms-alpha.c:7618
 #, c-format
 msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
 msgstr "    Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %u, Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð¿Ð´-Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6854
+#: vms-alpha.c:7627
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    Ð½Ð°Ð·Ð¸Ð² Ñ€ÑƒÑ‚Ð¸Ð½Ðµ : %.*s\n"
 
-#: vms-alpha.c:6862
+#: vms-alpha.c:7638
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "ÐºÑ€Ð°Ñ˜ Ñ€ÑƒÑ‚Ð¸Ð½Ðµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° 0x%08x\n"
 
-#: vms-alpha.c:6870
+#: vms-alpha.c:7648
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr "Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð±ÐºÐ¿Ñ‚ Ð°Ð´Ñ€ÐµÑ�Ð° 0x%08x\n"
 
-#: vms-alpha.c:6878
+#: vms-alpha.c:7658
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "ÐµÐ¿Ð¸Ð»Ð¾Ð³: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %u, Ð±Ñ€Ð¾Ñ˜: %u\n"
 
-#: vms-alpha.c:6887
+#: vms-alpha.c:7673
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr "Ð±Ð»Ðº Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº: Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6896
+#: vms-alpha.c:7685
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "Ð±Ð»Ðº ÐºÑ€Ð°Ñ˜: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6902
+#: vms-alpha.c:7691
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "Ð¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:6909
+#: vms-alpha.c:7707
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²ÐºÐµ, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6918
+#: vms-alpha.c:7723
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð°: Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7727
+#, c-format
+msgid "    len: %u bits\n"
+msgstr "    Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u Ð±Ð¸Ñ‚Ð°\n"
+
+#: vms-alpha.c:7733
 #, c-format
 msgid "recend\n"
 msgstr "ÐºÑ€Ð°Ñ˜ Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7738
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6932
+#: vms-alpha.c:7744
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð¸ Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6936
+#: vms-alpha.c:7750
 #, c-format
 msgid "enumend\n"
 msgstr "ÐºÑ€Ð°Ñ˜ Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°\n"
 
-#: vms-alpha.c:6953
+#: vms-alpha.c:7757
+#, c-format
+msgid "label, name: %.*s\n"
+msgstr "Ð½Ð°Ñ‚Ð¿Ð¸Ñ�, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
+
+#: vms-alpha.c:7760
+#, c-format
+msgid "    address: 0x%08x\n"
+msgstr "    Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
+
+#: vms-alpha.c:7772
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "Ð½ÐµÐ¿Ñ€ÐµÐºÐ¸Ð´Ð½Ð¸ Ð¾Ð¿Ñ�ÐµÐ³ (Ð±Ñ€.: %u)\n"
 
-#: vms-alpha.c:6955
+#: vms-alpha.c:7779
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:6965
+#: vms-alpha.c:7790
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð°  (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:6982
+#: vms-alpha.c:7809
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:6989
+#: vms-alpha.c:7818
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:6995
+#: vms-alpha.c:7826
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7001
+#: vms-alpha.c:7834
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7007
+#: vms-alpha.c:7842
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7012
+#: vms-alpha.c:7849
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7017
+#: vms-alpha.c:7856
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7022
+#: vms-alpha.c:7863
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7026
+#: vms-alpha.c:7869
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7031
+#: vms-alpha.c:7876
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7033
+#: vms-alpha.c:7878
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7038
+#: vms-alpha.c:7885
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7040
+#: vms-alpha.c:7887
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7046
+#: vms-alpha.c:7893
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "delta pc +%-4d"
 
-#: vms-alpha.c:7049
+#: vms-alpha.c:7897
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x Ñ€ÐµÐ´: %5u\n"
 
-#: vms-alpha.c:7054
+#: vms-alpha.c:7902
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%uâ€œ\n"
 
-#: vms-alpha.c:7069
+#: vms-alpha.c:7917
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "Ð¸Ð·Ð²Ð¾Ñ€ (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7083
+#: vms-alpha.c:7936
 #, c-format
 msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
 msgstr "   declfile: Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %u, Ð¸Ð´ Ð¿Ð¾Ñ™Ð°: %u\n"
 
-#: vms-alpha.c:7087
+#: vms-alpha.c:7941
 #, c-format
 msgid "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 msgstr "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 
-#: vms-alpha.c:7096
+#: vms-alpha.c:7953
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %.*s\n"
 
-#: vms-alpha.c:7105
+#: vms-alpha.c:7969
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7110 vms-alpha.c:7115
+#: vms-alpha.c:7976 vms-alpha.c:7983
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7120 vms-alpha.c:7125
+#: vms-alpha.c:7990 vms-alpha.c:7997
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7130 vms-alpha.c:7135
+#: vms-alpha.c:8004 vms-alpha.c:8011
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7139
+#: vms-alpha.c:8015
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7143
+#: vms-alpha.c:8019
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%uâ€œ\n"
 
-#: vms-alpha.c:7155
+#: vms-alpha.c:8031
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "*Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð´Ñ�Ñ‚ Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ\n"
 
-#: vms-alpha.c:7187
+#: vms-alpha.c:8063
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHDâ€œ\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:8067
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr "EIHD: (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð±Ñ€Ð¾Ñ˜ Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°: %u)\n"
 
-#: vms-alpha.c:7193
+#: vms-alpha.c:8071
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " Ð²ÐµÑ›Ð¸ Ð¸Ð´: %u, Ð¼Ð°ÑšÐ¸ Ð¸Ð´: %u\n"
 
-#: vms-alpha.c:7201
+#: vms-alpha.c:8079
 msgid "executable"
 msgstr "Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð°"
 
-#: vms-alpha.c:7204
+#: vms-alpha.c:8082
 msgid "linkable image"
 msgstr "Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð° Ñ�Ð»Ð¸ÐºÐ°"
 
-#: vms-alpha.c:7210
+#: vms-alpha.c:8089
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð»Ð¸ÐºÐµ: %u (%s)"
 
-#: vms-alpha.c:7216
+#: vms-alpha.c:8095
 msgid "native"
 msgstr "Ð¸Ð·Ð²Ð¾Ñ€Ð½Ð°"
 
-#: vms-alpha.c:7219
+#: vms-alpha.c:8098
 msgid "CLI"
-msgstr "ÐšÐ›Ð˜"
+msgstr "CLI"
 
-#: vms-alpha.c:7225
+#: vms-alpha.c:8105
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð°: %u (%s)\n"
 
-#: vms-alpha.c:7231
+#: vms-alpha.c:8112
 #, c-format
 msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 msgstr " Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð¸: Ð¸Ñ�Ð´: %u, Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾: %u, Ð¿Ñ€Ð¾Ñ‡ Ñ�Ð¸Ð¼Ð±: %u, Ð¸Ð´ Ñ�Ð»Ð¸ÐºÐµ: %u, Ð·Ð°ÐºÑ€Ð¿Ð°: %u\n"
 
-#: vms-alpha.c:7235
+#: vms-alpha.c:8116
 #, c-format
 msgid " fixup info rva: "
 msgstr " Ð¿Ð¾Ð¿Ñ€Ð°Ð²ÐºÐ° Ð¸Ð½Ñ„Ð¾ Ñ€Ð²Ð°: "
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:8118
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", Ð²ÐµÐºÑ‚Ð¾Ñ€ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€Ð²Ð°: "
 
-#: vms-alpha.c:7240
+#: vms-alpha.c:8121
 #, c-format
 msgid ""
 "\n"
@@ -5615,624 +8190,1011 @@ msgstr ""
 "\n"
 " Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ð·Ð° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ: %u\n"
 
-#: vms-alpha.c:7244
+#: vms-alpha.c:8126
 #, c-format
 msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
 msgstr " Ð±Ñ€Ð¾Ñ˜ Ð£/Ð˜ Ñ�Ð»Ð¸ÐºÐµ: %u, Ð±Ñ€. ÐºÐ°Ð½Ð°Ð»Ð°: %u, Ñ€ÐµÐº Ð¿Ñ€Ð¸: %08x%08x\n"
 
-#: vms-alpha.c:7250
+#: vms-alpha.c:8132
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°: %08x:"
 
-#: vms-alpha.c:7280
+#: vms-alpha.c:8163
 #, c-format
 msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
 msgstr " ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ: 0x%08x, Ð²ÐµÑ€Ð·Ð¸Ñ˜Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð°: 0x%08x, Ð¿Ð¾ÐºÐ»Ð¾Ð¿Ñ™ÐµÐ½Ð¾ ÐºÑ‚Ñ€Ð»: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¸Ð¼Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°: %u\n"
 
-#: vms-alpha.c:7286
+#: vms-alpha.c:8169
 #, c-format
 msgid " BPAGE: %u"
 msgstr " Ð‘Ð¡Ð¢Ð Ð�Ð�Ð˜Ð¦Ð�: %u"
 
-#: vms-alpha.c:7292
+#: vms-alpha.c:8176
 #, c-format
 msgid ", ext fixup offset: %u, no_opt psect off: %u"
 msgstr ", Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð¿Ð¾Ñ™Ð½Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° â€žno_optâ€œ-Ð°: %u"
 
-#: vms-alpha.c:7295
+#: vms-alpha.c:8179
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", Ð°Ð»Ð¸Ñ˜Ð°Ñ�: %u\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:8187
 #, c-format
 msgid "system version array information:\n"
 msgstr "Ð½Ð¸Ð· Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð°:\n"
 
-#: vms-alpha.c:7307
+#: vms-alpha.c:8191
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHVNâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ\n"
 
-#: vms-alpha.c:7317
+#: vms-alpha.c:8201
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHVNâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ\n"
 
-#: vms-alpha.c:7320
+#: vms-alpha.c:8204
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7324
+#: vms-alpha.c:8208
 msgid "BASE_IMAGE       "
-msgstr "Ð¡Ð›Ð˜ÐšÐ�_ÐžÐ¡Ð�ÐžÐ’Ð•       "
+msgstr "Ð¡Ð›Ð˜ÐšÐ�_ÐžÐ¡Ð�ÐžÐ’Ð•            "
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:8211
 msgid "MEMORY_MANAGEMENT"
-msgstr "Ð£ÐŸÐ Ð�Ð’Ð‰Ð�ÐŠÐ•_ÐœÐ•ÐœÐžÐ Ð˜ÐˆÐžÐœ"
+msgstr "Ð£ÐŸÐ Ð�Ð’Ð‰Ð�ÐŠÐ•_ÐœÐ•ÐœÐžÐ Ð˜ÐˆÐžÐœ     "
 
-#: vms-alpha.c:7330
+#: vms-alpha.c:8214
 msgid "IO               "
-msgstr "Ð£Ð˜               "
+msgstr "Ð£Ð˜                      "
 
-#: vms-alpha.c:7333
+#: vms-alpha.c:8217
 msgid "FILES_VOLUMES    "
-msgstr "Ð’ÐžÐ›Ð£ÐœÐ•Ð�Ð˜_Ð”Ð�Ð¢ÐžÐ¢Ð•ÐšÐ�    "
+msgstr "Ð’ÐžÐ›Ð£ÐœÐ•Ð�Ð˜_Ð”Ð�Ð¢ÐžÐ¢Ð•ÐšÐ�       "
 
-#: vms-alpha.c:7336
+#: vms-alpha.c:8220
 msgid "PROCESS_SCHED    "
-msgstr "Ð—Ð�ÐšÐ�Ð—Ð�Ð�Ð˜_ÐŸÐ ÐžÐ¦Ð•Ð¡Ð˜    "
+msgstr "Ð—Ð�ÐšÐ�Ð—Ð�Ð�Ð˜_ÐŸÐ ÐžÐ¦Ð•Ð¡Ð˜        "
 
-#: vms-alpha.c:7339
+#: vms-alpha.c:8223
 msgid "SYSGEN           "
-msgstr "Ð¡Ð¢Ð’Ð�Ð Ð�ÐŠÐ•_Ð¡Ð˜Ð¡Ð¢Ð•ÐœÐ�           "
+msgstr "Ð¡Ð¢Ð’Ð�Ð Ð�ÐŠÐ•_Ð¡Ð˜Ð¡Ð¢Ð•ÐœÐ�        "
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:8226
 msgid "CLUSTERS_LOCKMGR "
 msgstr "ÐœÐ“Ð Ð—Ð�ÐšÐ‰Ð£Ð§Ð�Ð’Ð�ÐŠÐ•_ÐšÐ›Ð�Ð¡Ð¢Ð•Ð Ð� "
 
-#: vms-alpha.c:7345
+#: vms-alpha.c:8229
 msgid "LOGICAL_NAMES    "
-msgstr "Ð›ÐžÐ“Ð˜Ð§ÐšÐ˜_Ð�Ð�Ð—Ð˜Ð’Ð˜    "
+msgstr "Ð›ÐžÐ“Ð˜Ð§ÐšÐ˜_Ð�Ð�Ð—Ð˜Ð’Ð˜           "
 
-#: vms-alpha.c:7348
+#: vms-alpha.c:8232
 msgid "SECURITY         "
-msgstr "Ð‘Ð•Ð—Ð‘Ð•Ð”Ð�ÐžÐ¡Ð¢         "
+msgstr "Ð‘Ð•Ð—Ð‘Ð•Ð”Ð�ÐžÐ¡Ð¢              "
 
-#: vms-alpha.c:7351
+#: vms-alpha.c:8235
 msgid "IMAGE_ACTIVATOR  "
-msgstr "ÐŸÐžÐšÐ Ð•Ð¢Ð�Ð§_Ð¡Ð›Ð˜ÐšÐ•  "
+msgstr "ÐŸÐžÐšÐ Ð•Ð¢Ð�Ð§_Ð¡Ð›Ð˜ÐšÐ•          "
 
-#: vms-alpha.c:7354
+#: vms-alpha.c:8238
 msgid "NETWORKS         "
-msgstr "ÐœÐ Ð•Ð–Ð•         "
+msgstr "ÐœÐ Ð•Ð–Ð•                   "
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:8241
 msgid "COUNTERS         "
-msgstr "Ð‘Ð ÐžÐˆÐ�Ð§Ð˜         "
+msgstr "Ð‘Ð ÐžÐˆÐ�Ð§Ð˜                 "
 
-#: vms-alpha.c:7360
+#: vms-alpha.c:8244
 msgid "STABLE           "
-msgstr "Ð¡Ð¢Ð�Ð‘Ð˜Ð›Ð�Ðž           "
+msgstr "Ð¡Ð¢Ð�Ð‘Ð˜Ð›Ð�Ðž                "
 
-#: vms-alpha.c:7363
+#: vms-alpha.c:8247
 msgid "MISC             "
-msgstr "Ð Ð�Ð—Ð�Ðž             "
+msgstr "Ð Ð�Ð—Ð�Ðž                   "
 
-#: vms-alpha.c:7366
+#: vms-alpha.c:8250
 msgid "CPU              "
-msgstr "Ð¦ÐŸÐ£              "
+msgstr "Ð¦ÐŸÐˆ                     "
 
-#: vms-alpha.c:7369
+#: vms-alpha.c:8253
 msgid "VOLATILE         "
-msgstr "ÐŸÐ ÐžÐœÐ•Ð�Ð‰Ð˜Ð’Ðž         "
+msgstr "ÐŸÐ ÐžÐœÐ•Ð�Ð‰Ð˜Ð’Ðž              "
 
-#: vms-alpha.c:7372
+#: vms-alpha.c:8256
 msgid "SHELL            "
-msgstr "Ð¨ÐšÐžÐ‰ÐšÐ�            "
+msgstr "Ð¨ÐšÐžÐ‰ÐšÐ�                  "
 
-#: vms-alpha.c:7375
+#: vms-alpha.c:8259
 msgid "POSIX            "
-msgstr "ÐŸÐžÐ¡Ð˜ÐšÐ¡            "
+msgstr "ÐŸÐžÐ¡Ð˜ÐšÐ¡                  "
 
-#: vms-alpha.c:7378
+#: vms-alpha.c:8262
 msgid "MULTI_PROCESSING "
-msgstr "Ð’Ð˜Ð¨Ð•_ÐžÐ‘Ð Ð�Ð”Ð�Ðž "
+msgstr "Ð’Ð˜Ð¨Ð•_ÐžÐ‘Ð Ð�Ð”Ð�Ðž            "
 
-#: vms-alpha.c:7381
+#: vms-alpha.c:8265
 msgid "GALAXY           "
-msgstr "Ð“Ð�Ð›Ð�ÐšÐ¡Ð˜ÐˆÐ�           "
+msgstr "Ð“Ð�Ð›Ð�ÐšÐ¡Ð˜ÐˆÐ�               "
 
-#: vms-alpha.c:7384
+#: vms-alpha.c:8268
 msgid "*unknown*        "
-msgstr "*Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾*        "
+msgstr "*Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾*             "
 
-#: vms-alpha.c:7387
-#, c-format
-msgid ": %u.%u\n"
-msgstr ": %u.%u\n"
-
-#: vms-alpha.c:7400 vms-alpha.c:7659
+#: vms-alpha.c:8284 vms-alpha.c:8558
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHAâ€œ\n"
 
-#: vms-alpha.c:7403
+#: vms-alpha.c:8287
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "Ð�ÐºÑ‚Ð¸Ð²Ð¸Ñ€Ð°ÑšÐµ Ñ�Ð»Ð¸ÐºÐµ:  (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°=%u)\n"
 
-#: vms-alpha.c:7405
+#: vms-alpha.c:8290
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr " ÐŸÑ€Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7408
+#: vms-alpha.c:8294
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr " Ð”Ñ€ÑƒÐ³Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7411
+#: vms-alpha.c:8298
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr " Ð¢Ñ€ÐµÑ›Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:8302
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr " Ð§ÐµÑ‚Ð²Ñ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7417
+#: vms-alpha.c:8306
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr " Ð”ÐµÑ™ÐµÐ½Ð° Ñ�Ð»Ð¸ÐºÐ°   : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7428
+#: vms-alpha.c:8317
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHIâ€œ\n"
 
-#: vms-alpha.c:7431
+#: vms-alpha.c:8321
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr "ÐŸÑ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°ÑšÐµ Ñ�Ð»Ð¸ÐºÐµ: (Ð²ÐµÑ›Ðµ: %u, Ð¼Ð°ÑšÐµ: %u)\n"
 
-#: vms-alpha.c:7434
+#: vms-alpha.c:8324
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " Ð½Ð°Ð·Ð¸Ð² Ñ�Ð»Ð¸ÐºÐµ    : %.*s\n"
 
-#: vms-alpha.c:7436
+#: vms-alpha.c:8326
 #, c-format
 msgid " link time        : %s\n"
 msgstr " Ð²Ñ€ÐµÐ¼Ðµ Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°  : %s\n"
 
-#: vms-alpha.c:7438
+#: vms-alpha.c:8328
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ Ñ�Ð»Ð¸ÐºÐµ       : %.*s\n"
 
-#: vms-alpha.c:7440
+#: vms-alpha.c:8330
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°       : %.*s\n"
 
-#: vms-alpha.c:7442
+#: vms-alpha.c:8332
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ Ð¸Ð·Ð³Ñ€Ð°Ð´ÑšÐµ Ñ�Ð»Ð¸ÐºÐµ: %.*s\n"
 
-#: vms-alpha.c:7452
+#: vms-alpha.c:8342
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHSâ€œ\n"
 
-#: vms-alpha.c:7455
+#: vms-alpha.c:8346
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð»Ð¸ÐºÐµ Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°: (Ð²ÐµÑ›Ðµ: %u, Ð¼Ð°ÑšÐµ: %u)\n"
 
-#: vms-alpha.c:7460
+#: vms-alpha.c:8352
 #, c-format
 msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
 msgstr " Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° : Ð²Ð±Ð½: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u (0x%x)\n"
 
-#: vms-alpha.c:7464
+#: vms-alpha.c:8357
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr " Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: Ð²Ð±Ð½: %u, Ð·Ð°Ð¿Ð¸Ñ�Ð¸: %u\n"
 
-#: vms-alpha.c:7468
+#: vms-alpha.c:8362
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr " Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°: Ð²Ð±Ð½: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:8375
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEISDâ€œ\n"
 
-#: vms-alpha.c:7491
+#: vms-alpha.c:8386
 #, c-format
 msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
 msgstr "ÐžÐ¿Ð¸Ñ�Ð½Ð¸Ðº Ð¾Ð´ÐµÑ™ÐºÐ° Ñ�Ð»Ð¸ÐºÐµ: (Ð²ÐµÑ›Ð¸: %u, Ð¼Ð°ÑšÐ¸: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: %u)\n"
 
-#: vms-alpha.c:7498
+#: vms-alpha.c:8394
 #, c-format
 msgid " section: base: 0x%08x%08x size: 0x%08x\n"
 msgstr " Ð¾Ð´ÐµÑ™Ð°Ðº: Ð¾Ñ�Ð½Ð¾Ð²Ð°: 0x%08x%08x Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%08x\n"
 
-#: vms-alpha.c:7503
+#: vms-alpha.c:8399
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ : 0x%04x"
 
-#: vms-alpha.c:7540
+#: vms-alpha.c:8437
 #, c-format
 msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
 msgstr " Ð²Ð±Ð½: %u, Ð¿Ñ„Ñ†: %u, Ð¿Ð¾Ñ€ÐµÐ´Ð¸_Ñ†Ñ‚Ð»: %u Ð²Ñ€Ñ�Ñ‚Ð°: %u ("
 
-#: vms-alpha.c:7546
+#: vms-alpha.c:8443
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7549
+#: vms-alpha.c:8446
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7552
+#: vms-alpha.c:8449
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7555
+#: vms-alpha.c:8452
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7558
+#: vms-alpha.c:8455
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7561
+#: vms-alpha.c:8458
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7567
+#: vms-alpha.c:8464
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7569
+#: vms-alpha.c:8467
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ: 0x%08x, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:7579
+#: vms-alpha.c:8477
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ\n"
 
-#: vms-alpha.c:7583
+#: vms-alpha.c:8481
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Ð¢Ð°Ð±ÐµÐ»Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°:\n"
 
-#: vms-alpha.c:7592
+#: vms-alpha.c:8490
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ\n"
 
-#: vms-alpha.c:7597
+#: vms-alpha.c:8496
 #, c-format
 msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
 msgstr " Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¼Ð¾Ð´ÑƒÐ»Ð°: 0x%08x, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%08x, (%u Ð¿-Ð¾Ð´ÐµÑ™Ð°ÐºÐ°)\n"
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:8506
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº\n"
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:8510
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr "  Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ°: 0x%08x, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:7623
+#: vms-alpha.c:8523
 #, c-format
 msgid "cannot read DST\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDSTâ€œ\n"
 
-#: vms-alpha.c:7633
+#: vms-alpha.c:8533
 #, c-format
 msgid "cannot read GST\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žGSTâ€œ\n"
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:8537
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Ð¢Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿ÑˆÑ‚Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°:\n"
 
-#: vms-alpha.c:7665
+#: vms-alpha.c:8564
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr "Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°Ñ‡Ð° Ñ�Ð»Ð¸ÐºÐµ: (Ð²ÐµÑ›Ð¸: %u, Ð¼Ð°ÑšÐ¸: %u)\n"
 
-#: vms-alpha.c:7668
+#: vms-alpha.c:8568
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  Ð¸Ð°Ñ„ Ð²ÐµÐ·Ð° : 0x%08x %08x\n"
 
-#: vms-alpha.c:7671
+#: vms-alpha.c:8572
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  Ð²ÐµÐ·Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ: 0x%08x %08x\n"
 
-#: vms-alpha.c:7674
+#: vms-alpha.c:8575
 #, c-format
 msgid "  size : %u\n"
 msgstr "  Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° : %u\n"
 
-#: vms-alpha.c:7676
+#: vms-alpha.c:8577
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%08x\n"
 
-#: vms-alpha.c:7680
+#: vms-alpha.c:8582
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7684
+#: vms-alpha.c:8587
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7688
+#: vms-alpha.c:8592
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7691
+#: vms-alpha.c:8595
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:7694
+#: vms-alpha.c:8599
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:7696
+#: vms-alpha.c:8602
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:7699
+#: vms-alpha.c:8605
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:8607
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:7709
+#: vms-alpha.c:8614
 #, c-format
 msgid " Shareable images:\n"
 msgstr " Ð”ÐµÑ™Ð¸Ð²Ðµ Ñ�Ð»Ð¸ÐºÐµ:\n"
 
-#: vms-alpha.c:7713
+#: vms-alpha.c:8622
 #, c-format
 msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
 msgstr "  %u: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: 0x%02x, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:8629
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾-Ñ€ÐµÑ‡Ð¸:\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:8635
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð´ÑƒÐ³Ðµ-Ñ€ÐµÑ‡Ð¸:\n"
 
-#: vms-alpha.c:7730
+#: vms-alpha.c:8641
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr " Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ â€ž.addressâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾-Ñ€ÐµÑ‡Ð¸:\n"
 
-#: vms-alpha.c:7735
+#: vms-alpha.c:8646
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr " Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ â€ž.addressâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ Ð´ÑƒÐ³Ðµ-Ñ€ÐµÑ‡Ð¸:\n"
 
-#: vms-alpha.c:7740
+#: vms-alpha.c:8651
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr " Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ ÑƒÐ¿ÑƒÑ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ ÐºÐ¾Ð´Ð°:\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:8656
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr " Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ ÑƒÐ¿ÑƒÑ‚Ðµ Ð¿Ð°Ñ€Ð¾Ð²Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°:\n"
 
-#: vms-alpha.c:7754
+#: vms-alpha.c:8664
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " ÐŸÑ€Ð¾Ð¼ÐµÐ½Ð° Ð·Ð°ÑˆÑ‚Ð¸Ñ‚Ðµ (%u ÑƒÐ½Ð¾Ñ�Ð°):\n"
 
-#: vms-alpha.c:7759
+#: vms-alpha.c:8673
 #, c-format
 msgid "  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
 msgstr "  Ð¾Ñ�Ð½Ð¾Ð²Ð°: 0x%08x %08x, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%08x, Ð·Ð°ÑˆÑ‚Ð¸Ñ‚Ð°: 0x%08x "
 
 #. FIXME: we do not yet support relocatable link.  It is not obvious
 #. how to do it for debug infos.
-#: vms-alpha.c:8599
+#: vms-alpha.c:9550
 msgid "%P: relocatable link is not supported\n"
 msgstr "%P: Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð²ÐµÐ·Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°\n"
 
-#: vms-alpha.c:8669
-msgid "%P: multiple entry points: in modules %B and %B\n"
-msgstr "%P: Ñ‚Ð°Ñ‡ÐºÐµ Ð²Ð¸ÑˆÐµ ÑƒÐ½Ð¾Ñ�Ð°: Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° â€ž%Bâ€œ Ð¸ â€ž%Bâ€œ\n"
+#: vms-alpha.c:9621
+#, c-format
+msgid "%P: multiple entry points: in modules %pB and %pB\n"
+msgstr "%P: Ñ‚Ð°Ñ‡ÐºÐµ Ð²Ð¸ÑˆÐµ ÑƒÐ½Ð¾Ñ�Ð°: Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ\n"
 
-#: vms-lib.c:1444
+#: vms-lib.c:1530
 #, c-format
 msgid "could not open shared image '%s' from '%s'"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ñ�Ð»Ð¸ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%sâ€œ"
 
-#: vms-misc.c:360
+#: vms-misc.c:374
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr "â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð½ÑƒÐ»Ð° Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°"
 
-#: vms-misc.c:365
+#: vms-misc.c:379
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr "â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°"
 
-#: xcofflink.c:824
+#: xcofflink.c:889
 #, c-format
-msgid "%s: XCOFF shared object when not producing XCOFF output"
-msgstr "%s: â€žXCOFFâ€œ Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ ÐºÐ°Ð´Ð° Ñ�Ðµ Ð½Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸ â€žXCOFFâ€œ Ð¸Ð·Ð»Ð°Ð·"
+msgid "%pB: XCOFF shared object when not producing XCOFF output"
+msgstr "%pB: â€žXCOFFâ€œ Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ ÐºÐ°Ð´Ð° Ñ�Ðµ Ð½Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸ â€žXCOFFâ€œ Ð¸Ð·Ð»Ð°Ð·"
 
-#: xcofflink.c:845
+#: xcofflink.c:910
 #, c-format
-msgid "%s: dynamic object with no .loader section"
-msgstr "%s: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð±ÐµÐ· â€ž.loaderâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°"
+msgid "%pB: dynamic object with no .loader section"
+msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð±ÐµÐ· â€ž.loaderâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°"
 
-#: xcofflink.c:1404
-msgid "%B: `%s' has line numbers but no enclosing section"
-msgstr "%B: â€ž%sâ€œ Ð¸Ð¼Ð° Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ñ€ÐµÐ´Ð¾Ð²Ð° Ð°Ð»Ð¸ Ð½Ðµ Ð¸ Ð·Ð°Ñ‚Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº"
+#: xcofflink.c:1492
+#, c-format
+msgid "%pB: `%s' has line numbers but no enclosing section"
+msgstr "%pB: â€ž%sâ€œ Ð¸Ð¼Ð° Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ðµ Ñ€ÐµÐ´Ð¾Ð²Ð° Ð°Ð»Ð¸ Ð½Ðµ Ð¸ Ð·Ð°Ñ‚Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: xcofflink.c:1456
-msgid "%B: class %d symbol `%s' has no aux entries"
-msgstr "%B: ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð¼Ð¾Ñ›Ð½Ð¸Ñ… ÑƒÐ½Ð¾Ñ�Ð°"
+#: xcofflink.c:1548
+#, c-format
+msgid "%pB: class %d symbol `%s' has no aux entries"
+msgstr "%pB: ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð¼Ð¾Ñ›Ð½Ð¸Ñ… ÑƒÐ½Ð¾Ñ�Ð°"
 
-#: xcofflink.c:1478
-msgid "%B: symbol `%s' has unrecognized csect type %d"
-msgstr "%B: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€Ñ�Ñ‚Ñƒ Ñ†Ñ�ÐµÐºÑ‚Ð¾Ñ€Ð° â€ž%dâ€œ"
+#: xcofflink.c:1571
+#, c-format
+msgid "%pB: symbol `%s' has unrecognized csect type %d"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€Ñ�Ñ‚Ñƒ Ñ†Ñ�ÐµÐºÑ‚Ð¾Ñ€Ð° â€ž%dâ€œ"
 
-#: xcofflink.c:1490
-msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d"
-msgstr "%B: Ð»Ð¾Ñˆ â€žXTY_ERâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ: ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð±Ñ€Ð¾Ñ˜ %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %d"
+#: xcofflink.c:1584
+#, c-format
+msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
+msgstr "%pB: Ð»Ð¾Ñˆ â€žXTY_ERâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ: ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð±Ñ€Ð¾Ñ˜ %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %<PRId64>"
+
+#: xcofflink.c:1615
+#, c-format
+msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRIu64>"
+msgstr "%pB: â€žXMC_TC0â€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ ÐºÐ»Ð°Ñ�Ð° %d scn-Ð´ÑƒÐ¶Ð¸Ð½Ðµ %<PRIu64>"
 
-#: xcofflink.c:1519
-msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d"
-msgstr "%B: â€žXMC_TC0â€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %d"
+#: xcofflink.c:1750
+#, c-format
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr "%pB: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° â€ž%sâ€œ Ð¸Ð¼Ð° â€žR_TLSMLâ€œ-Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÐºÐ¾Ñ˜Ðµ Ð½Ðµ Ñ†Ð¸Ñ™Ð° Ð½Ð° Ñ�ÐµÐ±Ðµ Ñ�Ð°Ð¼Ð¾Ð³"
 
-#: xcofflink.c:1665
-msgid "%B: csect `%s' not in enclosing section"
-msgstr "%B: Ñ†-Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð·Ð°Ñ‚Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›ÐµÐ¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
+#: xcofflink.c:1784
+#, c-format
+msgid "%pB: csect `%s' not in enclosing section"
+msgstr "%pB: Ñ†-Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð·Ð°Ñ‚Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›ÐµÐ¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
 
-#: xcofflink.c:1772
-msgid "%B: misplaced XTY_LD `%s'"
-msgstr "%B: Ð»Ð¾ÑˆÐµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ â€žXTY_LDâ€œ â€ž%sâ€œ"
+#: xcofflink.c:1893
+#, c-format
+msgid "%pB: misplaced XTY_LD `%s'"
+msgstr "%pB: Ð»Ð¾ÑˆÐµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ â€žXTY_LDâ€œ â€ž%sâ€œ"
 
-#: xcofflink.c:2091
-msgid "%B: reloc %s:%d not in csect"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s:%dâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ†-Ð¾Ð´ÐµÑ™ÐºÑƒ"
+#: xcofflink.c:2236
+#, c-format
+msgid "%pB: reloc %s:%<PRId64> not in csect"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s:%<PRId64>â€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ†-Ð¾Ð´ÐµÑ™ÐºÑƒ"
 
-#: xcofflink.c:3182
+#: xcofflink.c:3345
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð²ÐµÐ·ÐµÐ¼ ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ."
+
+#: xcofflink.c:3393
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: Ð½ÐµÐ¼Ð° Ñ‚Ð°ÐºÐ²Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
 
-#: xcofflink.c:3287
+#: xcofflink.c:3502
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜ Ð¸Ð·Ð²Ð¾Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: xcofflink.c:3666
+#: xcofflink.c:3850
 msgid "error: undefined symbol __rtinit"
 msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž__rtinitâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
 
-#: xcofflink.c:4045
-msgid "%B: loader reloc in unrecognized section `%s'"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
+#: xcofflink.c:4863
+#, c-format
+msgid "%pB: Unable to find a stub csect in rangeof relocation at %#<PRIx64> targeting'%s'"
+msgstr "%pB: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ñ†-Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ñƒ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð½Ð° %#<PRIx64> ÐºÐ¾Ñ˜Ð¸ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° â€ž%sâ€œ"
+
+#: xcofflink.c:4892
+#, c-format
+msgid "%pB: Cannot create stub entry '%s'"
+msgstr "%pB: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ"
+
+#: xcofflink.c:5012
+msgid "TOC overflow during stub generation; try -mminimal-toc when compiling"
+msgstr "ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ°; Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ñ�Ð° â€ž-mminimal-tocâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°"
+
+#: xcofflink.c:5080
+#, c-format
+msgid "%pB: loader reloc in unrecognized section `%s'"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
+
+#: xcofflink.c:5092
+#, c-format
+msgid "%pB: `%s' in loader reloc but not loader sym"
+msgstr "%pB: â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð°"
+
+#: xcofflink.c:5109
+#, c-format
+msgid "%pB: loader reloc in read-only section %pA"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ â€ž%pAâ€œ"
+
+#: xcofflink.c:6182
+#, c-format
+msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
+msgstr "ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°: %#<PRIx64> > 0x10000; Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ñ�Ð° â€ž-mminimal-tocâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°"
+
+#: xcofflink.c:7298
+#, c-format
+msgid "Unable to link input file: %s"
+msgstr "Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ ÑƒÐ»Ð°Ð·Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ: %s"
+
+#: xtensa-dynconfig.c:60
+msgid "Unable to load DLL."
+msgstr "Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð¼ DLL."
+
+#: xtensa-dynconfig.c:86
+#, c-format
+msgid "%s is defined but could not be loaded: %s"
+msgstr "â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð°Ð»Ð¸ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸: %s"
+
+#: xtensa-dynconfig.c:102
+#, c-format
+msgid "%s is loaded but symbol \"%s\" is not found: %s"
+msgstr "â€ž%sâ€œ Ñ˜Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ð½Ð¾ Ð°Ð»Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾: %s"
+
+#: xtensa-dynconfig.c:115
+#, c-format
+msgid "%s is defined but plugin support is disabled"
+msgstr "â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð°Ð»Ð¸ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ° Ð¿Ñ€Ð¸ÐºÑ™ÑƒÑ‡ÐºÐ° Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½Ð°"
+
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2893 elfnn-riscv.c:5548
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ: 0x%02x"
+
+#: elfnn-aarch64.c:5456
+#, c-format
+msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ 835769 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)"
+
+#: elfnn-aarch64.c:5548
+#, c-format
+msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ 843419 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)"
+
+#: elfnn-aarch64.c:5561
+#, c-format
+msgid "%pB: error: erratum 843419 immediate 0x%<PRIx64> out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐºÐ° 843419 Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ð½Ð¾ 0x%<PRIx64> Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð�Ð”Ð  (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°) Ð¸ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ˜Ðµ â€ž--fix-cortex-a53-843419=Ð°Ð´Ñ€â€œ.  Ð¢Ð°ÐºÐ¾ Ð´Ð° Ð¿Ð¾ÐºÑ€ÐµÑ›ÐµÐ¼ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° Ñ�Ð° â€ž--fix-cortex-a53-843419=fullâ€œ"
+
+#: elfnn-aarch64.c:6096
+#, c-format
+msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ ÐºÐ¾Ñ˜Ð° Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ð²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð¿Ð¾Ñ™Ð° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+
+#: elfnn-aarch64.c:6116
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr "%pB: ÑƒÑ�Ð»Ð¾Ð²Ð½Ð° Ð³Ñ€Ð°Ð½Ð° Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð°"
+
+#: elfnn-aarch64.c:6204 elfnn-kvx.c:2384
+#, c-format
+msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
+msgstr "%pB: Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð±Ð¸Ñ›Ðµ â€žNULLâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ðµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: elfnn-aarch64.c:6317 elfnn-aarch64.c:6354
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%pB: â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elfnn-aarch64.c:7345
+msgid "too many GOT entries for -fpic, please recompile with -fPIC"
+msgstr "Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ â€žGOTâ€œ ÑƒÐ½Ð¾Ñ�Ð° Ð·Ð° â€ž-fpicâ€œ, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+
+#: elfnn-aarch64.c:7373
+msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
+msgstr "Ñ˜ÐµÐ´Ð°Ð½ Ð¾Ð´ Ð¼Ð¾Ð³ÑƒÑ›Ð¸Ñ… Ñ€Ð°Ð·Ð»Ð¾Ð³Ð° Ð¾Ð²Ðµ Ð³Ñ€ÐµÑˆÐºÐµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð´Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÐ¿ÑƒÑ‚Ð°Ð½ Ñƒ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼ ÐºÐ¾Ð´Ñƒ Ð¸Ð¼Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð¾Ð±Ñ˜Ð°Ð²Ñ™ÐµÐ½Ð¾ Ñ‚Ð°Ð¼Ð¾ Ð³Ð´Ðµ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+
+#: elfnn-aarch64.c:7940
+#, c-format
+msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: elfnn-aarch64.c:9013
+#, c-format
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s'\n"
+msgstr "%F%P: %pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¼Ð½Ð¾ÑˆÐºÐ° Ð·Ð° Ð½ÐµÑƒÐ¼Ð½Ð¾Ð¶Ð¸Ð²Ð¸ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ\n"
+
+#: elfnn-kvx.c:930
+msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ â€ž%pAâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð±ÐµÐ· â€ž--enable-non-contiguous-regionsâ€œ.\n"
+
+#: elfnn-kvx.c:2129
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation in section `%s'"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
+
+#: elfnn-kvx.c:2853
+#, c-format
+msgid "%s: Bad ELF id: `%d'"
+msgstr "%s: Ð›Ð¾Ñˆ ELF Ð¸Ð´: â€ž%dâ€œ"
+
+#: elfnn-kvx.c:2908
+#, c-format
+msgid "%s: compiled as 32-bit object and %s is 64-bit"
+msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 64-Ð±Ð¸Ñ‚Ð½Ð¸"
+
+#: elfnn-kvx.c:2911
+#, c-format
+msgid "%s: compiled as 64-bit object and %s is 32-bit"
+msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸"
+
+#: elfnn-kvx.c:2913
+#, c-format
+msgid "%s: object size does not match that of target %s"
+msgstr "%s: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ñ†Ð¸Ñ™Ð° â€ž%sâ€œ"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elfnn-kvx.c:3001
+#, c-format
+msgid "Private flags = 0x%lx : "
+msgstr "ÐŸÑ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lx: "
+
+#: elfnn-kvx.c:3005
+#, c-format
+msgid "Coolidge (kv3) V1 64 bits"
+msgstr "Coolidge (kv3) V1 64 Ð±Ð¸Ñ‚Ð°"
+
+#: elfnn-kvx.c:3007
+#, c-format
+msgid "Coolidge (kv3) V2 64 bits"
+msgstr "Coolidge (kv3) V2 64 Ð±Ð¸Ñ‚Ð°"
+
+#: elfnn-kvx.c:3009
+#, c-format
+msgid "Coolidge (kv4) V1 64 bits"
+msgstr "Coolidge (kv4) V1 64 Ð±Ð¸Ñ‚Ð°"
+
+#: elfnn-kvx.c:3014
+#, c-format
+msgid "Coolidge (kv3) V1 32 bits"
+msgstr "Coolidge (kv3) V1 32 Ð±Ð¸Ñ‚Ð°"
+
+#: elfnn-kvx.c:3016
+#, c-format
+msgid "Coolidge (kv3) V2 32 bits"
+msgstr "Coolidge (kv3) V2 32 Ð±Ð¸Ñ‚Ð°"
+
+#: elfnn-kvx.c:3018
+#, c-format
+msgid "Coolidge (kv4) V1 32 bits"
+msgstr "Coolidge (kv4) V1 32 Ð±Ð¸Ñ‚Ð°"
+
+#: elfnn-kvx.c:3854
+#, c-format
+msgid "relocation against `%s' has faulty GOT type "
+msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° â€ž%sâ€œ Ð¸Ð¼Ð° Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ GOT Ð²Ñ€Ñ�Ñ‚Ñƒ "
+
+#: elfnn-loongarch.c:169 elfnn-loongarch.c:221
+#, c-format
+msgid "%#<PRIx64> invaild imm"
+msgstr "%#<PRIx64> Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ â€žimmâ€œ"
+
+#: elfnn-loongarch.c:403 elfnn-riscv.c:4028
+#, c-format
+msgid ""
+"%pB: ABI is incompatible with that of the selected emulation:\n"
+"  target emulation `%s' does not match `%s'"
+msgstr ""
+"%pB: â€žABIâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° Ð¾Ð½Ð¸Ð¼ Ð¸Ð· Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ:\n"
+"  Ñ†Ð¸Ñ™Ð½Ð° ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð° Ñ�Ð° â€ž%sâ€œ"
+
+#: elfnn-loongarch.c:458
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ â€žABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚."
+
+#: elfnn-loongarch.c:600
+msgid "Internal error: unreachable."
+msgstr "Ð£Ð½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð¸Ð¶Ð½Ð¾."
+
+#: elfnn-loongarch.c:4339 elfnn-riscv.c:4789
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
+msgstr "%pB(%pA+%#<PRIx64>): %<PRId64> Ð±Ð°Ñ˜Ñ‚Ð° Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½Ð° %<PRId64>-Ð±Ð°Ñ˜Ñ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ, Ð°Ð»Ð¸ Ñ�Ð°Ð¼Ð¾ %<PRId64> Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�ÑƒÑ‚Ð½Ð¾"
+
+#: elfnn-riscv.c:326 elfnn-riscv.c:361
+#, c-format
+msgid "%pB: warning: RVE PLT generation not supported"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRVE PLTâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elfnn-riscv.c:919
+#, c-format
+msgid "%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: elfnn-riscv.c:961
+#, c-format
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ â€žRV32â€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: elfnn-riscv.c:1847
+#, c-format
+msgid "final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "ÐºÑ€Ð°Ñ˜ÑšÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žuleb128â€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ 0x%lx Ñƒ â€ž%pAâ€œ Ð¸Ð· â€ž%pBâ€œ Ð¿Ñ€ÐµÐ¼Ð°ÑˆÑƒÑ˜Ðµ Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ð²Ð¸ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€"
+
+#: elfnn-riscv.c:2082
+#, c-format
+msgid "%pcrel_lo missing matching %pcrel_hi"
+msgstr "â€ž%pcrel_loâ€œ-Ñƒ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ â€ž%pcrel_hiâ€œ"
+
+#: elfnn-riscv.c:2085
+#, c-format
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "â€ž%pcrel_loâ€œ Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð¾ Ð·Ð° â€žR_RISCV_GOT_HI20â€œ"
+
+#. Check the overflow when adding reloc addend.
+#: elfnn-riscv.c:2090
+#, c-format
+msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
+msgstr "â€ž%%pcrel_loâ€œ Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð·Ð° â€ž%%pcrel_hiâ€œ Ñ˜Ðµ 0x%<PRIx64> Ð±ÐµÐ· Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ°, Ð°Ð»Ð¸ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ 0x%<PRIx64> Ð½Ð°ÐºÐ¾Ð½ Ð´Ð¾Ð´Ð°Ð²Ð°ÑšÐ° â€ž%%pcrel_loâ€œ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ°"
+
+#: elfnn-riscv.c:2098
+#, c-format
+msgid "%pcrel_lo overflow with an addend"
+msgstr "â€ž%pcrel_loâ€œ Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
+
+#: elfnn-riscv.c:2549
+#, c-format
+msgid "%pB: warning: R_RISCV_SUB_ULEB128 with non-zero addend, please rebuild by binutils 2.42 or up"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_RISCV_SUB_ULEB128â€œ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð¼, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ñ‚Ðµ binutils-Ð¾Ð¼ 2.42 Ð¸Ð»Ð¸ Ð²ÐµÑ›Ð¸Ð¼"
+
+#: elfnn-riscv.c:2629
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "Ð¡Ð°Ð±Ð¸Ñ€Ð°Ðº Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ð·Ð° â€žR_RISCV_GOT_HI20â€œ"
+
+#. PR 28509, when generating the shared object, these
+#. referenced symbols may bind externally, which means
+#. they will be exported to the dynamic symbol table,
+#. and are preemptible by default.  These symbols cannot
+#. be referenced by the non-pic relocations, like
+#. R_RISCV_JAL and R_RISCV_RVC_JUMP relocations.
+#.
+#. However, consider that linker may relax the R_RISCV_CALL
+#. relocations to R_RISCV_JAL or R_RISCV_RVC_JUMP, if
+#. these relocations are relocated to the plt entries,
+#. then we won't report error for them.
+#.
+#. Perhaps we also need the similar checks for the
+#. R_RISCV_BRANCH and R_RISCV_RVC_BRANCH relocations.
+#: elfnn-riscv.c:2730
+#, c-format
+msgid "%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC\n"
+msgstr "%%X%%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ ÐºÐ¾Ñ˜Ð° Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ð²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð¿Ð¾Ñ™Ð° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ\n"
+
+#: elfnn-riscv.c:2812
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%pcrel_loâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
+
+#: elfnn-riscv.c:3022
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%%X%%P: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ\n"
+
+#: elfnn-riscv.c:3057
+msgid "%X%P: internal error: out of range error\n"
+msgstr "%X%P: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°\n"
+
+#: elfnn-riscv.c:3062
+msgid "%X%P: internal error: unsupported relocation error\n"
+msgstr "%X%P: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
+
+#: elfnn-riscv.c:3068
+msgid "dangerous relocation error"
+msgstr "Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elfnn-riscv.c:3074
+msgid "%X%P: internal error: unknown error\n"
+msgstr "%X%P: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°\n"
+
+#: elfnn-riscv.c:3620
+#, c-format
+msgid "error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° ISA Ð½Ð¸Ñ�ÐºÐ° â€ž%sâ€œ.  ÐŸÑ€Ð²Ð¾ Ñ�Ð»Ð¾Ð²Ð¾ Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ â€žiâ€œ Ð¸Ð»Ð¸ â€žeâ€œ Ð°Ð»Ð¸ Ð´Ð¾Ð±Ð¸Ñ… â€ž%sâ€œ"
+
+#: elfnn-riscv.c:3663
+#, c-format
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½ÐµÐ¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð° ISA Ð½Ð¸Ñ�ÐºÐ° Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%sâ€œ Ð¸ â€ž%sâ€œ"
+
+#: elfnn-riscv.c:3800
+#, c-format
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: ISA Ð½Ð¸Ñ�ÐºÐ° ÑƒÐ»Ð°Ð·Ð° (%s) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ (%s)"
+
+#: elfnn-riscv.c:3820
+#, c-format
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: â€žXLENâ€œ Ð½Ð¸Ñ�ÐºÐ° ÑƒÐ»Ð°Ð·Ð° (%u) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ (%u)"
+
+#: elfnn-riscv.c:3828
+#, c-format
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žXLENâ€œ (%u), Ð¼Ð¾Ð¶Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ñƒ"
+
+#: elfnn-riscv.c:3942
+#, c-format
+msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¾Ð²Ð°Ð½Ð¾ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%u.%u.%uâ€œ Ð°Ð»Ð¸ Ð¸Ð·Ð»Ð°Ð· ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%u.%u.%uâ€œ"
+
+#: elfnn-riscv.c:3959
+msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¾Ð²Ð°Ð½Ð¾ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐµ 1.9.1 Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¸Ð¼ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐ¸Ð¼Ð°"
+
+#: elfnn-riscv.c:3987
+#, c-format
+msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ð½ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ð°Ð»Ð¸ Ð¸Ð·Ð»Ð°Ð· ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ %u-Ð±Ð°Ñ˜Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ð½ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº"
+
+#: elfnn-riscv.c:4084
+#, c-format
+msgid "%pB: can't link %s modules with %s modules"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ðµ Ñ�Ð° â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
+
+#: elfnn-riscv.c:4094
+#, c-format
+msgid "%pB: can't link RVE with other target"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ â€žRVEâ€œ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¾Ð¼ Ð¼ÐµÑ‚Ð¾Ð¼"
+
+#: elfnn-riscv.c:961
+#, c-format
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ â€žRV64â€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: peXXigen.c:161
+#, c-format
+msgid "%pB: unable to find name for empty section"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ð·Ð¸Ð² Ð·Ð° Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: peXXigen.c:188
+#, c-format
+msgid "%pB: out of memory creating name for empty section"
+msgstr "%pB: Ð¿Ð¾Ð½ÐµÑ�Ñ‚Ð°Ð»Ð¾ Ñ˜Ðµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÑƒ Ð½Ð°Ð·Ð¸Ð²Ð° Ð·Ð° Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: xcofflink.c:4056
-msgid "%B: `%s' in loader reloc but not loader sym"
-msgstr "%B: â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð°"
+#: peXXigen.c:199
+#, c-format
+msgid "%pB: unable to create fake empty section"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð»Ð°Ð¶Ð½Ð¸ Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: xcofflink.c:4072
-msgid "%B: loader reloc in read-only section %A"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ â€ž%Aâ€œ"
+#: peXXigen.c:924
+#, c-format
+msgid "%pB:%.8s: section below image base"
+msgstr "%pB:%.8s: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ñ�Ð¿Ð¾Ð´ Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ñ�Ð»Ð¸ÐºÐµ"
 
-#: xcofflink.c:5094
+#: peXXigen.c:929
 #, c-format
-msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling"
-msgstr "ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°: 0x%lx > 0x10000; Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ñ�Ð° â€ž-mminimal-tocâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°"
+msgid "%pB:%.8s: RVA truncated"
+msgstr "%pB:%.8s: â€žRVAâ€œ Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¾"
 
-#: peigen.c:1009 pepigen.c:1009 pex64igen.c:1009
+#: peXXigen.c:1060
 #, c-format
-msgid "%s: line number overflow: 0x%lx > 0xffff"
-msgstr "%s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff"
+msgid "%pB: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff"
 
-#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036
+#: peXXigen.c:1226
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·Ð²Ð¾Ð·Ð° [â€ž.edataâ€œ (Ð¸Ð»Ð¸ Ñ‚Ð°Ð¼Ð¾ Ð³Ð´Ðµ Ñ�Ð¼Ð¾ Ð³Ð° Ð½Ð°ÑˆÐ»Ð¸)]"
 
-#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037
+#: peXXigen.c:1227
 msgid "Import Directory [parts of .idata]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ ÑƒÐ²Ð¾Ð·Ð° [Ð´ÐµÐ¾ â€ž.idataâ€œ]"
 
-#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038
+#: peXXigen.c:1228
 msgid "Resource Directory [.rsrc]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ð° [.rsrc]"
 
-#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039
+#: peXXigen.c:1229
 msgid "Exception Directory [.pdata]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·ÑƒÐ·ÐµÑ‚Ð°ÐºÐ° [.pdata]"
 
-#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040
+#: peXXigen.c:1230
 msgid "Security Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041
+#: peXXigen.c:1231
 msgid "Base Relocation Directory [.reloc]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾Ñ�Ð½Ð¾Ð²Ðµ [.reloc]"
 
-#: peigen.c:1042 pepigen.c:1042 pex64igen.c:1042
+#: peXXigen.c:1232
 msgid "Debug Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°"
 
-#: peigen.c:1043 pepigen.c:1043 pex64igen.c:1043
+#: peXXigen.c:1233
 msgid "Description Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð¿Ð¸Ñ�Ð°"
 
-#: peigen.c:1044 pepigen.c:1044 pex64igen.c:1044
+#: peXXigen.c:1234
 msgid "Special Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ñ�ÐµÐ±Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#: peigen.c:1045 pepigen.c:1045 pex64igen.c:1045
+#: peXXigen.c:1235
 msgid "Thread Storage Directory [.tls]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð½Ð¸Ñ‚Ð¸ [.tls]"
 
-#: peigen.c:1046 pepigen.c:1046 pex64igen.c:1046
+#: peXXigen.c:1236
 msgid "Load Configuration Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐ° ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ°"
 
-#: peigen.c:1047 pepigen.c:1047 pex64igen.c:1047
+#: peXXigen.c:1237
 msgid "Bound Import Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ ÑƒÐ²Ð¾Ð·Ð° Ñ�Ð²ÐµÐ·Ð°"
 
-#: peigen.c:1048 pepigen.c:1048 pex64igen.c:1048
+#: peXXigen.c:1238
 msgid "Import Address Table Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ðµ ÑƒÐ²Ð¾Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ðµ"
 
-#: peigen.c:1049 pepigen.c:1049 pex64igen.c:1049
+#: peXXigen.c:1239
 msgid "Delay Import Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð·Ð°Ñ�Ñ‚Ð¾Ñ˜Ð° ÑƒÐ²Ð¾Ð·Ð°"
 
-#: peigen.c:1050 pepigen.c:1050 pex64igen.c:1050
+#: peXXigen.c:1240
 msgid "CLR Runtime Header"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¦Ð›Ð  Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°"
 
-#: peigen.c:1051 pepigen.c:1051 pex64igen.c:1051
+#: peXXigen.c:1241
 msgid "Reserved"
 msgstr "Ð ÐµÐ·ÐµÑ€Ð²Ð¸Ñ�Ð°Ð½Ð¾"
 
-#: peigen.c:1111 pepigen.c:1111 pex64igen.c:1111
+#: peXXigen.c:1306
 #, c-format
 msgid ""
 "\n"
@@ -6241,39 +9203,25 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸\n"
 
-#: peigen.c:1116 pepigen.c:1116 pex64igen.c:1116
-#, c-format
-msgid ""
-"\n"
-"There is an import table in %s at 0x%lx\n"
-msgstr ""
-"\n"
-"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx\n"
-
-#: peigen.c:1158 pepigen.c:1158 pex64igen.c:1158
+#: peXXigen.c:1312
 #, c-format
 msgid ""
 "\n"
-"Function descriptor located at the start address: %04lx\n"
+"There is an import table in %s, but that section has no contents\n"
 msgstr ""
 "\n"
-"ÐžÐ¿Ð¸Ñ�Ð½Ð¸Ðº Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ð½Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸: %04lx\n"
-
-#: peigen.c:1161 pepigen.c:1161 pex64igen.c:1161
-#, c-format
-msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
-msgstr "\tÑ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° %08lx ÐºÐ¾Ð´Ð½Ðµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ (ÑƒÑ‡Ð¸Ñ‚Ñ™Ð¸Ð²Ð°/Ð°ÐºÑ‚ÑƒÐµÐ»Ð½Ð°) %08lx/%08lx\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
 
-#: peigen.c:1169 pepigen.c:1169 pex64igen.c:1169
+#: peXXigen.c:1319
 #, c-format
 msgid ""
 "\n"
-"No reldata section! Function descriptor not decoded.\n"
+"There is an import table in %s at 0x%lx\n"
 msgstr ""
 "\n"
-"Ð�ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°! ÐžÐ¿Ð¸Ñ�Ð½Ð¸Ðº Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð½.\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx\n"
 
-#: peigen.c:1174 pepigen.c:1174 pex64igen.c:1174
+#: peXXigen.c:1325
 #, c-format
 msgid ""
 "\n"
@@ -6282,7 +9230,7 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±ÐµÐ»Ðµ ÑƒÐ²Ð¾Ð·Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)\n"
 
-#: peigen.c:1177 pepigen.c:1177 pex64igen.c:1177
+#: peXXigen.c:1328
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -6291,21 +9239,21 @@ msgstr ""
 " vma:            Ð�Ð°Ñ˜Ð°Ð²Ð°    Ð’Ñ€ÐµÐ¼Ðµ     Ð�Ð°Ð¿Ñ€ÐµÐ´    Ð”Ð›Ð›       ÐŸÑ€Ð²Ð¸\n"
 "                 Ð¢Ð°Ð±ÐµÐ»Ð°   ÐžÑ‚Ð¸Ñ�Ð°Ðº  Ð›Ð°Ð½Ð°Ñ†   Ð�Ð°Ð·Ð¸Ð²       ÐŸÐ¾Ñ‚Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼\n"
 
-#: peigen.c:1225 pepigen.c:1225 pex64igen.c:1225
+#: peXXigen.c:1377
 #, c-format
 msgid ""
 "\n"
-"\tDLL Name: %s\n"
+"\tDLL Name: %.*s\n"
 msgstr ""
 "\n"
-"\tÐ”Ð›Ð› Ð½Ð°Ð·Ð¸Ð²: %s\n"
+"\tâ€žDLLâ€œ Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236
+#: peXXigen.c:1393
 #, c-format
 msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
 msgstr "\tvma:  Ð�Ð°Ñ˜Ð°Ð²Ð°/Ð ÐµÐ´Ð½Ð¸ Ð�Ð°Ð·Ð¸Ð² Ñ‡Ð»Ð°Ð½Ð° Ð¡Ð²ÐµÐ·Ð°Ð½-Ð·Ð°\n"
 
-#: peigen.c:1261 pepigen.c:1261 pex64igen.c:1261
+#: peXXigen.c:1418
 #, c-format
 msgid ""
 "\n"
@@ -6314,7 +9262,12 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð¿Ñ€Ð²Ð¸ Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð³Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸\n"
 
-#: peigen.c:1423 pepigen.c:1423 pex64igen.c:1423
+#: peXXigen.c:1465 peXXigen.c:1504
+#, c-format
+msgid "\t<corrupt: 0x%04lx>"
+msgstr "\t<Ð¾ÑˆÑ‚ÐµÑ›ÐµÑšÐµ: 0x%04lx>"
+
+#: peXXigen.c:1597
 #, c-format
 msgid ""
 "\n"
@@ -6323,16 +9276,25 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸\n"
 
-#: peigen.c:1432 pepigen.c:1432 pex64igen.c:1432
+#: peXXigen.c:1610
 #, c-format
 msgid ""
 "\n"
-"There is an export table in %s, but it does not fit into that section\n"
+"There is an export table in %s, but it is too small (%d)\n"
 msgstr ""
 "\n"
-"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ�Ñ‚Ð°Ð½Ðµ Ñƒ Ñ‚Ð°Ñ˜ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð° (%d)\n"
 
-#: peigen.c:1438 pepigen.c:1438 pex64igen.c:1438
+#: peXXigen.c:1618
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but contents cannot be read\n"
+msgstr ""
+"\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸\n"
+
+#: peXXigen.c:1624
 #, c-format
 msgid ""
 "\n"
@@ -6341,7 +9303,7 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx\n"
 
-#: peigen.c:1466 pepigen.c:1466 pex64igen.c:1466
+#: peXXigen.c:1655
 #, c-format
 msgid ""
 "\n"
@@ -6352,67 +9314,67 @@ msgstr ""
 "Ð¢Ð°Ð±ÐµÐ»Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)\n"
 "\n"
 
-#: peigen.c:1470 pepigen.c:1470 pex64igen.c:1470
+#: peXXigen.c:1659
 #, c-format
 msgid "Export Flags \t\t\t%lx\n"
 msgstr "Ð—Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° \t\t%lx\n"
 
-#: peigen.c:1473 pepigen.c:1473 pex64igen.c:1473
+#: peXXigen.c:1662
 #, c-format
 msgid "Time/Date stamp \t\t%lx\n"
 msgstr "ÐžÑ‚Ð¸Ñ�Ð°Ðº Ð²Ñ€ÐµÐ¼ÐµÐ½Ð°/Ð´Ð°Ñ‚ÑƒÐ¼Ð° \t\t%lx\n"
 
-#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476
+#: peXXigen.c:1666
 #, c-format
 msgid "Major/Minor \t\t\t%d/%d\n"
 msgstr "Ð’ÐµÑ›Ð¸/ÐœÐ°ÑšÐ¸ \t\t\t%d/%d\n"
 
-#: peigen.c:1479 pepigen.c:1479 pex64igen.c:1479
+#: peXXigen.c:1669
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr "Ð�Ð°Ð·Ð¸Ð² \t\t\t\t"
 
-#: peigen.c:1485 pepigen.c:1485 pex64igen.c:1485
+#: peXXigen.c:1680
 #, c-format
 msgid "Ordinal Base \t\t\t%ld\n"
 msgstr "Ñ�ÐžÑ�Ð½Ð¾Ð²Ð° Ñ€ÐµÐ´Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°\t\t%ld\n"
 
-#: peigen.c:1488 pepigen.c:1488 pex64igen.c:1488
+#: peXXigen.c:1683
 #, c-format
 msgid "Number in:\n"
 msgstr "Ð‘Ñ€Ð¾Ñ˜ ÑƒÐ»Ð°Ð·Ð°:\n"
 
-#: peigen.c:1491 pepigen.c:1491 pex64igen.c:1491
+#: peXXigen.c:1686
 #, c-format
 msgid "\tExport Address Table \t\t%08lx\n"
-msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° \t\t%08lx\n"
+msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° \t                %08lx\n"
 
-#: peigen.c:1495 pepigen.c:1495 pex64igen.c:1495
+#: peXXigen.c:1690
 #, c-format
 msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
 msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° [Ð�Ð°Ð·Ð¸Ð² Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð°/Ñ€ÐµÐ´Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°]\t%08lx\n"
 
-#: peigen.c:1498 pepigen.c:1498 pex64igen.c:1498
+#: peXXigen.c:1693
 #, c-format
 msgid "Table Addresses\n"
 msgstr "Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð°\n"
 
-#: peigen.c:1501 pepigen.c:1501 pex64igen.c:1501
+#: peXXigen.c:1696
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° \t\t"
 
-#: peigen.c:1506 pepigen.c:1506 pex64igen.c:1506
+#: peXXigen.c:1701
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° Ð½Ð°Ð·Ð¸Ð²Ð° Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° \t\t"
 
-#: peigen.c:1511 pepigen.c:1511 pex64igen.c:1511
+#: peXXigen.c:1706
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° Ñ€ÐµÐ´Ð½Ð¸Ñ… Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð° \t\t\t"
 
-#: peigen.c:1525 pepigen.c:1525 pex64igen.c:1525
+#: peXXigen.c:1720
 #, c-format
 msgid ""
 "\n"
@@ -6421,15 +9383,20 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° â€”â€” ÐžÑ�Ð½Ð¾Ð²Ð° Ñ€ÐµÐ´Ð½Ð¸Ñ… Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð° %ld\n"
 
-#: peigen.c:1544 pepigen.c:1544 pex64igen.c:1544
+#: peXXigen.c:1729
+#, c-format
+msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr "\tÐ�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° â€žrvaâ€œ (0x%lx) Ð¸Ð»Ð¸ Ð±Ñ€Ð¾Ñ˜ ÑƒÐ½Ð¾Ñ�Ð° (0x%lx)\n"
+
+#: peXXigen.c:1748
 msgid "Forwarder RVA"
-msgstr "RVA Ð¿Ñ€ÐµÐ¾Ñ�Ð»ÐµÑ’Ð¸Ð²Ð°Ñ‡Ð°"
+msgstr "â€žRVAâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’Ð¸Ð²Ð°Ñ‡Ð°"
 
-#: peigen.c:1555 pepigen.c:1555 pex64igen.c:1555
+#: peXXigen.c:1760
 msgid "Export RVA"
-msgstr "RVA Ð¸Ð·Ð²Ð¾Ð·Ð°"
+msgstr "â€žRVAâ€œ Ð¸Ð·Ð²Ð¾Ð·Ð°"
 
-#: peigen.c:1562 pepigen.c:1562 pex64igen.c:1562
+#: peXXigen.c:1767
 #, c-format
 msgid ""
 "\n"
@@ -6438,18 +9405,41 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±ÐµÐ»Ð° [Ð ÐµÐ´Ð½Ð¸/Ð�Ð°Ð·Ð¸Ð² Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð°]\n"
 
-#: peigen.c:1622 peigen.c:1805 pepigen.c:1622 pepigen.c:1805 pex64igen.c:1622
-#: pex64igen.c:1805
+#: peXXigen.c:1775
+#, c-format
+msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr "\tÐ�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ð½Ð°Ð·Ð¸Ð²Ð° Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° â€žrvaâ€œ (0x%lx) Ð¸Ð»Ð¸ Ð±Ñ€Ð¾Ñ˜ ÑƒÐ½Ð¾Ñ�Ð° (0x%lx)\n"
+
+#: peXXigen.c:1782
+#, c-format
+msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
+msgstr "\tÐ�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ€ÐµÐ´Ð½Ð¾Ð³ â€žrvaâ€œ (0x%lx) Ð¸Ð»Ð¸ Ð±Ñ€Ð¾Ñ˜ ÑƒÐ½Ð¾Ñ�Ð° (0x%lx)\n"
+
+#: peXXigen.c:1796
+#, c-format
+msgid "\t[%4ld] <corrupt offset: %lx>\n"
+msgstr "\t[%4ld] <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: %lx>\n"
+
+#: peXXigen.c:1851 peXXigen.c:2021
 #, c-format
-msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d\n"
+msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d\n"
 
-#: peigen.c:1629 pepigen.c:1629 pex64igen.c:1629
+#: peXXigen.c:1855 peXXigen.c:2025
+#, c-format
+msgid ""
+"\n"
+"The Function Table (interpreted .pdata section contents)\n"
+msgstr ""
+"\n"
+"Ð¢Ð°Ð±ÐµÐ»Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ)\n"
+
+#: peXXigen.c:1858
 #, c-format
 msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
 msgstr " vma:\t\t\tÐ�Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ°\t Ð�Ð´Ñ€ÐµÑ�Ð° ÐºÑ€Ð°Ñ˜Ð°\t\tÐ˜Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸\n"
 
-#: peigen.c:1631 pepigen.c:1631 pex64igen.c:1631
+#: peXXigen.c:1860
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -6458,22 +9448,12 @@ msgstr ""
 " vma:\t\tÐŸÐ¾Ñ‡ÐµÑ‚Ð°Ðº    ÐšÑ€Ð°Ñ˜      EH       EH       ÐšÑ€Ð°Ñ˜ Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ð°  Ð˜Ð·ÑƒÐ·ÐµÑ‚Ð°Ðº\n"
 "     \t\tÐ�Ð´Ñ€ÐµÑ�Ð°  Ð�Ð´Ñ€ÐµÑ�Ð°  Ð ÑƒÐºÐ¾Ð²Ð°Ð»Ð°Ñ†  ÐŸÐ¾Ð´Ð°Ñ†Ð¸     Ð�Ð´Ñ€ÐµÑ�Ð°    ÐœÐ°Ñ�ÐºÐ°\n"
 
-#: peigen.c:1705 pepigen.c:1705 pex64igen.c:1705
-#, c-format
-msgid " Register save millicode"
-msgstr " Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ñ‡ÑƒÐ²Ð° Ð¼Ð¸Ð»Ð¸ÐºÐ¾Ð´"
-
-#: peigen.c:1708 pepigen.c:1708 pex64igen.c:1708
+#: peXXigen.c:1873
 #, c-format
-msgid " Register restore millicode"
-msgstr " Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ð²Ñ€Ð°Ñ›Ð° Ð¼Ð¸Ð»Ð¸ÐºÐ¾Ð´"
+msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
+msgstr "Ð’Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€ž.pdataâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° (%ld) Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ñ�Ñ‚Ð²Ð°Ñ€Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ (%ld)\n"
 
-#: peigen.c:1711 pepigen.c:1711 pex64igen.c:1711
-#, c-format
-msgid " Glue code sequence"
-msgstr " Ð�Ð¸Ð· ÐºÐ¾Ð´Ð° Ð»ÐµÐ¿ÐºÐ°"
-
-#: peigen.c:1811 pepigen.c:1811 pex64igen.c:1811
+#: peXXigen.c:2027
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -6482,7 +9462,7 @@ msgstr ""
 " vma:\t\tÐŸÐ¾Ñ‡ÐµÑ‚Ð°Ðº    ÐŸÑ€Ð¾Ð»Ð¾Ð³   Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° Ð—Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ    Ð˜Ð·ÑƒÐ·ÐµÑ‚Ð°Ðº Ð•Ð¥\n"
 "     \t\tÐ�Ð´Ñ€ÐµÑ�Ð°  Ð”ÑƒÐ¶Ð¸Ð½Ð°   Ð”ÑƒÐ¶Ð¸Ð½Ð°   32b Ð¸Ð·Ð²Ñ€  Ð ÑƒÐºÐ¾Ð²Ð»Ð°Ñ†   ÐŸÐ¾Ð´Ð°Ñ†Ð¸\n"
 
-#: peigen.c:1937 pepigen.c:1937 pex64igen.c:1937
+#: peXXigen.c:2152
 #, c-format
 msgid ""
 "\n"
@@ -6493,7 +9473,7 @@ msgstr ""
 "\n"
 "ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ ÐŸÐ• Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ â€ž.relocâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°)\n"
 
-#: peigen.c:1966 pepigen.c:1966 pex64igen.c:1966
+#: peXXigen.c:2181
 #, c-format
 msgid ""
 "\n"
@@ -6502,57 +9482,62 @@ msgstr ""
 "\n"
 "Ð’Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: %08lx Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´Ð»Ð¾Ð¼ÐºÐ° %ld (0x%lx) Ð‘Ñ€Ð¾Ñ˜ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ¸ %ld\n"
 
-#: peigen.c:1979 pepigen.c:1979 pex64igen.c:1979
+#: peXXigen.c:2199
 #, c-format
 msgid "\treloc %4d offset %4x [%4lx] %s"
 msgstr "\tÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ %4d Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %4x [%4lx] %s"
 
-#: peigen.c:2023 pepigen.c:2023 pex64igen.c:2023
+#: peXXigen.c:2260
 #, c-format
-msgid "%*.s Entry: "
-msgstr "%*.s ÑƒÐ½Ð¾Ñ�: "
+msgid "%03x %*.s Entry: "
+msgstr "â€ž%03x %*.sâ€œ ÑƒÐ½Ð¾Ñ�: "
 
-#: peigen.c:2043 pepigen.c:2043 pex64igen.c:2043
+#: peXXigen.c:2284
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr "Ð½Ð°Ð·Ð¸Ð²: [Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: %08lx Ð´ÑƒÐ¶Ð¸Ð½Ð° %d]: "
 
-#: peigen.c:2054 pepigen.c:2054 pex64igen.c:2054
+#: peXXigen.c:2304
 #, c-format
-msgid "<corrupt string length: %#x>"
-msgstr "<Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð½Ð¸Ñ�ÐºÐµ: %#x>"
+msgid "<corrupt string length: %#x>\n"
+msgstr "<Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð½Ð¸Ñ�ÐºÐµ: %#x>\n"
 
-#: peigen.c:2057 pepigen.c:2057 pex64igen.c:2057
+#: peXXigen.c:2314
 #, c-format
-msgid "<corrupt string offset: %#lx>"
-msgstr "<Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ: %#lx>"
+msgid "<corrupt string offset: %#lx>\n"
+msgstr "<Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ: %#lx>\n"
 
-#: peigen.c:2060 pepigen.c:2060 pex64igen.c:2060
+#: peXXigen.c:2319
 #, c-format
 msgid "ID: %#08lx"
 msgstr "Ð˜Ð”: %#08lx"
 
-#: peigen.c:2063 pepigen.c:2063 pex64igen.c:2063
+#: peXXigen.c:2322
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: %#08lx\n"
 
-#: peigen.c:2074 pepigen.c:2074 pex64igen.c:2074
+#: peXXigen.c:2344
+#, c-format
+msgid "%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
+msgstr "%03x%*.s  Ð›Ð¸Ñ�Ñ‚: Ð�Ð´Ñ€ÐµÑ�Ð°: %#08lx, Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %#08lx, ÐšÐ¾Ð´Ð½Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð°: %d\n"
+
+#: peXXigen.c:2386
 #, c-format
-msgid "%*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
-msgstr "%*.s  Ð›Ð¸Ñ�Ñ‚: Ð�Ð´Ñ€ÐµÑ�Ð°: %#08lx, Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %#08lx, ÐšÐ¾Ð´Ð½Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð°: %d\n"
+msgid "<unknown directory type: %d>\n"
+msgstr "<Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð°: %d>\n"
 
-#: peigen.c:2116 pepigen.c:2116 pex64igen.c:2116
+#: peXXigen.c:2394
 #, c-format
 msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
 msgstr " Ð¢Ð°Ð±ÐµÐ»Ð°: Ð—Ð½Ð°Ðº: %d, Ð’Ñ€ÐµÐ¼Ðµ: %08lx, Ð˜Ð·Ð´: %d/%d, Ð‘Ñ€Ð¾Ñ˜ Ð½Ð°Ð·Ð¸Ð²Ð°: %d, Ð˜Ð”-Ð¾Ð²Ð¸: %d\n"
 
-#: peigen.c:2204 pepigen.c:2204 pex64igen.c:2204
+#: peXXigen.c:2482
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr "ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº!\n"
 
-#: peigen.c:2220 pepigen.c:2220 pex64igen.c:2220
+#: peXXigen.c:2506
 #, c-format
 msgid ""
 "\n"
@@ -6561,10 +9546,78 @@ msgstr ""
 "\n"
 "Ð£ÐŸÐžÐ—ÐžÐ Ð•ÐŠÐ•: Ð’Ð¸ÑˆÐ°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñƒ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ â€“ Ð’Ð¸Ð½Ð´Ð¾ÑƒÐ· Ñ›Ðµ Ð¸Ñ… Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€Ð¸Ñ‚Ð¸:\n"
 
+#: peXXigen.c:2512
+#, c-format
+msgid " String table starts at offset: %#03x\n"
+msgstr " Ð¢Ð°Ð±ÐµÐ»Ð° Ð½Ð¸Ñ�ÐºÐµ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ: %#03x\n"
+
+#: peXXigen.c:2515
+#, c-format
+msgid " Resources start at offset: %#03x\n"
+msgstr " Ð˜Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ð° Ð¿Ð¾Ñ‡Ð¸ÑšÑƒ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ: %#03x\n"
+
+#: peXXigen.c:2572
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory, but the section containing it could not be found\n"
+msgstr ""
+"\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð³Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸\n"
+
+#: peXXigen.c:2578
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory in %s, but that section has no contents\n"
+msgstr ""
+"\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ‚Ð°Ñ˜ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°\n"
+
+#: peXXigen.c:2585
+#, c-format
+msgid ""
+"\n"
+"Error: section %s contains the debug data starting address but it is too small\n"
+msgstr ""
+"\n"
+"Ð“Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ð°Ð»Ð¸ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸\n"
+
+#: peXXigen.c:2590
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory in %s at 0x%lx\n"
+"\n"
+msgstr ""
+"\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx\n"
+"\n"
+
+#: peXXigen.c:2597
+#, c-format
+msgid "The debug data size field in the data directory is too big for the section"
+msgstr "ÐŸÐ¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ñƒ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: peXXigen.c:2602
+#, c-format
+msgid "Type                Size     Rva      Offset\n"
+msgstr "Ð’Ñ€Ñ�Ñ‚Ð°              Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°     Rva      ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜\n"
+
+#: peXXigen.c:2650
+#, c-format
+msgid "(format %c%c%c%c signature %s age %ld pdb %s)\n"
+msgstr "(Ð·Ð°Ð¿Ð¸Ñ� %c%c%c%c Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ� %s Ñ�Ñ‚Ð°Ñ€Ð¾Ñ�Ñ‚ %ld Ð¿Ð´Ð± %s)\n"
+
+#: peXXigen.c:2662
+#, c-format
+msgid "The debug directory size is not a multiple of the debug directory entry size\n"
+msgstr "Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ ÑƒÐ½Ð¾Ñ�Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°\n"
+
 #. The MS dumpbin program reportedly ands with 0xff0f before
 #. printing the characteristics field.  Not sure why.  No reason to
 #. emulate it here.
-#: peigen.c:2243 pepigen.c:2243 pex64igen.c:2243
+#: peXXigen.c:2746
 #, c-format
 msgid ""
 "\n"
@@ -6573,240 +9626,675 @@ msgstr ""
 "\n"
 "ÐžÑ�Ð¾Ð±ÐµÐ½Ð¾Ñ�Ñ‚Ð¸ 0x%x\n"
 
-#: peigen.c:3194 pepigen.c:3194 pex64igen.c:3194
+#: peXXigen.c:3031
+#, c-format
+msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
+msgstr "%pB: Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (%lx Ð±Ð°Ñ˜Ñ‚Ð° Ð½Ð° %<PRIx64>) Ñ�Ðµ Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð¸ Ð¿Ñ€ÐµÐºÐ¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¾Ð´ÐµÑ™ÐºÐ° Ð½Ð° %<PRIx64>"
+
+#: peXXigen.c:3072
+msgid "failed to update file offsets in debug directory"
+msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñƒ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ñƒ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°"
+
+#: peXXigen.c:3081
+#, c-format
+msgid "%pB: failed to read debug data section"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°"
+
+#: peXXigen.c:3884
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¸Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ðµ Ð½Ð¸Ñ�ÐºÐµ: %d"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¸Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ðµ Ð½Ð¸Ñ�ÐºÐµ: %d"
 
-#: peigen.c:3329 pepigen.c:3329 pex64igen.c:3329
+#: peXXigen.c:4019
 msgid ".rsrc merge failure: multiple non-default manifests"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð½Ðµ-Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°Ð½Ð¸Ñ… Ð¸Ñ�Ð¿Ð¾Ñ™Ð°Ð²Ð°ÑšÐ°"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð½Ðµ-Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°Ð½Ð¸Ñ… Ð¸Ñ�Ð¿Ð¾Ñ™Ð°Ð²Ð°ÑšÐ°"
 
-#: peigen.c:3347 pepigen.c:3347 pex64igen.c:3347
+#: peXXigen.c:4037
 msgid ".rsrc merge failure: a directory matches a leaf"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð»Ð¸Ñ�Ñ‚Ñƒ"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð»Ð¸Ñ�Ñ‚Ñƒ"
 
-#: peigen.c:3389 pepigen.c:3389 pex64igen.c:3389
+#: peXXigen.c:4079
 msgid ".rsrc merge failure: duplicate leaf"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚"
 
-#: peigen.c:3391 pepigen.c:3391 pex64igen.c:3391
+#: peXXigen.c:4084
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚: %s"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚: %s"
 
-#: peigen.c:3457 pepigen.c:3457 pex64igen.c:3457
-msgid ".rsrc merge failure: dirs with differing characteristics\n"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð¸ Ñ�Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¾Ñ�Ð¾Ð±ÐµÐ½Ð¾Ñ�Ñ‚Ð¸Ð¼Ð°\n"
-
-#: peigen.c:3464 pepigen.c:3464 pex64igen.c:3464
-msgid ".rsrc merge failure: differing directory versions\n"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¸Ð·Ð´Ð°ÑšÐ° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ñƒ\n"
+#: peXXigen.c:4151
+msgid ".rsrc merge failure: dirs with differing characteristics"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð¸ Ñ�Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¾Ñ�Ð¾Ð±ÐµÐ½Ð¾Ñ�Ñ‚Ð¸Ð¼Ð°"
+
+#: peXXigen.c:4158
+msgid ".rsrc merge failure: differing directory versions"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¸Ð·Ð´Ð°ÑšÐ° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ñƒ"
 
 #. Corrupted .rsrc section - cannot merge.
-#: peigen.c:3537 pepigen.c:3537 pex64igen.c:3537
+#: peXXigen.c:4270
+#, c-format
+msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
+msgstr "%pB: Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: peXXigen.c:4278
+#, c-format
+msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
+msgstr "%pB: Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: peXXigen.c:4417
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$2â€œ"
+
+#: peXXigen.c:4437
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$4â€œ"
+
+#: peXXigen.c:4458
 #, c-format
-msgid "%s: .rsrc merge failure: corrupt .rsrc section"
-msgstr "%s: Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
+msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[12] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$5â€œ"
 
-#: peigen.c:3673 pepigen.c:3673 pex64igen.c:3673
-msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$2â€œ"
-
-#: peigen.c:3693 pepigen.c:3693 pex64igen.c:3693
-msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$4â€œ"
-
-#: peigen.c:3714 pepigen.c:3714 pex64igen.c:3714
-msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[12] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$5â€œ"
-
-#: peigen.c:3734 pepigen.c:3734 pex64igen.c:3734
-msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[PE_IMPORT_ADDRESS_TABLE (12)] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$6â€œ"
-
-#: peigen.c:3776 pepigen.c:3776 pex64igen.c:3776
-msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[PE_IMPORT_ADDRESS_TABLE(12)] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$6â€œ"
-
-#: peigen.c:3801 pepigen.c:3801 pex64igen.c:3801
-msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[9] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž__tls_usedâ€œ"
+#: peXXigen.c:4478
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[PE_IMPORT_ADDRESS_TABLE (12)] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$6â€œ"
+
+#: peXXigen.c:4520
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[PE_IMPORT_ADDRESS_TABLE(12)] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$6â€œ"
+
+#: peXXigen.c:4545
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[9] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž__tls_usedâ€œ"
+
+#, c-format
+#~ msgid "%pB: unsupported relocation type name %s"
+#~ msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¸Ð¼ÐµÐ½Ð° â€ž%sâ€œ"
+
+#~ msgid "f' and `c"
+#~ msgstr "fâ€œ Ð¸ â€žc"
+
+#~ msgid "d' and `c"
+#~ msgstr "dâ€œ Ð¸ â€žc"
+
+#~ msgid "zvknha"
+#~ msgstr "zvknha"
+
+#~ msgid "zvknhb"
+#~ msgstr "zvknhb"
+
+#~ msgid "Deprecated %s called at %s line %d in %s\n"
+#~ msgstr "Ð—Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñƒ â€ž%sâ€œ %d. Ñ€ÐµÐ´ Ñƒ â€ž%sâ€œ\n"
+
+#~ msgid "Deprecated %s called\n"
+#~ msgstr "Ð—Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾\n"
+
+#~ msgid "cannot read GST record length\n"
+#~ msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð´ÑƒÐ¶Ð¸Ð½Ñƒ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but that section has no contents\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but it does not fit into that section\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ�Ñ‚Ð°Ð½Ðµ Ñƒ Ñ‚Ð°Ñ˜ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#~ msgid "%pB: unable to initialize compress status for section %s"
+#~ msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ�Ð°Ð¶Ð¸Ð¼Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+
+#~ msgid "%pB: unable to initialize decompress status for section %s"
+#~ msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¸Ð²Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+
+#~ msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+#~ msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB(%pA) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° (%#<PRIx64> Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°) Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ (%#<PRIx64> Ð±Ð°Ñ˜Ñ‚Ð°)"
+
+#~ msgid "DWARF error: section %s is larger than 10x its filesize! (0x%lx vs 0x%lx)"
+#~ msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ð¸ 10x Ð¾Ð´ Ñ�Ð²Ð¾Ñ˜Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ! (0x%lx vs 0x%lx)"
+
+#~ msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+#~ msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¿Ð¸ÑˆÐµÐ¼ Ñƒ Ð½ÐµÐ´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ñ�Ð°Ð¶ÐµÑ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
+
+#~ msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+#~ msgstr "%F%P: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ â€ž%pAâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð±ÐµÐ· â€ž--enable-non-contiguous-regionsâ€œ.\n"
+
+#~ msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+#~ msgstr "%F%P: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð³Ñ€ÑƒÐ¿Ðµ â€ž%pAâ€œ Ð¼ÐµÑ‚Ñƒ â€ž%pAâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð±ÐµÐ· â€ž--enable-non-contiguous-regionsâ€œ.\n"
+
+#~ msgid "%pB: %pA+%"
+#~ msgstr "%pB: %pA+%"
+
+#~ msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
+#~ msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--enable-non-contiguous-regionsâ€œ Ð¾Ð´Ð±Ð°Ñ†ÑƒÑ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð¸Ð· â€ž%sâ€œ\n"
+
+#~ msgid "%s: standard ISA extension `%c' is not in canonical order"
+#~ msgstr "%s: Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%câ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ ÐºÐ°Ð½Ð¾Ð½Ñ�ÐºÐ¾Ð¼ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÑƒ"
+
+#~ msgid "%s: unknown prefix class for the ISA extension `%s'"
+#~ msgstr "%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° ÐºÐ»Ð°Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð° Ð·Ð° ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ"
+
+#~ msgid "rv32e does not support the `f' extension"
+#~ msgstr "â€žrv32eâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žfâ€œ"
+
+#~ msgid "%F%P: failed to create BND PLT section\n"
+#~ msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žBND PLTâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#~ msgid "%pB: no core to allocate section name %s"
+#~ msgstr "%pB: Ð½ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ð½Ð°Ð·Ð¸Ð²Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+
+#~ msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
+#~ msgstr "%%X%%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ\n"
+
+#~ msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
+#~ msgstr "%pB: â€žaoutâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð½Ð°Ð²Ð¾Ð´Ð¸ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ°Ð½ Ð±Ñ€Ð¾Ñ˜ ÑƒÐ½Ð¾Ñ�Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°: %u"
+
+#~ msgid "%pB: page size is too large (0x%x)"
+#~ msgstr "%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° (0x%x)"
+
+#~ msgid "%s: duplicate prefixed ISA extension `%s'"
+#~ msgstr "%s: Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ¾ Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ"
+
+#~ msgid "%s: prefixed ISA extension `%s' is not in expected order.  It must come before `%s'"
+#~ msgstr "%s: Ñ�Ð° Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÑƒ.  ÐœÐ¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ñ€Ðµ â€ž%sâ€œ"
+
+#~ msgid "warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%d"
+#~ msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð½ÐµÐ¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ ISA Ð¸Ð·Ð´Ð°ÑšÐµ %d.%d Ð·Ð° â€ž%sâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ, Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ Ñ˜Ðµ %d.%d"
+
+#~ msgid "%pB: TLS relocation at (0x%"
+#~ msgstr "%pB: Ð¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° (0x%"
+
+#~ msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
+#~ msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð¾Ð²Ð° (%#lx) Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° (%#lx)"
+
+#~ msgid "internal error: RL78 reloc stack overflow"
+#~ msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žRL78â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°"
+
+#~ msgid ""
+#~ "%s  branch         %lu\n"
+#~ "  branch toc adj %lu\n"
+#~ "  branch notoc   %lu\n"
+#~ "  branch both    %lu\n"
+#~ "  long branch    %lu\n"
+#~ "  long toc adj   %lu\n"
+#~ "  long notoc     %lu\n"
+#~ "  long both      %lu\n"
+#~ "  plt call       %lu\n"
+#~ "  plt call save  %lu\n"
+#~ "  plt call notoc %lu\n"
+#~ "  plt call both  %lu\n"
+#~ "  global entry   %lu"
+#~ msgstr ""
+#~ "%s  Ð³Ñ€Ð°Ð½Ð°                %lu\n"
+#~ "  Ð³Ñ€Ð°Ð½Ð° Ñ�Ð°Ð´Ñ€. Ð¿Ð¾Ñ€Ð°Ð².   %lu\n"
+#~ "  Ð³Ñ€Ð°Ð½Ð° Ð½Ðµ-Ñ�Ð°Ð´Ñ€.       %lu\n"
+#~ "  Ð³Ñ€Ð°Ð½Ð° Ð¾Ð±Ð°            %lu\n"
+#~ "  Ð´ÑƒÐ³Ð¾ Ð³Ñ€Ð°Ð½Ð°           %lu\n"
+#~ "  Ð´ÑƒÐ³Ð¾ Ñ�Ð°Ð´Ñ€. Ð¿Ð¾Ñ€Ð°Ð².    %lu\n"
+#~ "  Ð´ÑƒÐ³Ð¾ Ð½Ðµ-Ñ�Ð°Ð´Ñ€.        %lu\n"
+#~ "  Ð´ÑƒÐ³Ð¾ Ð¾Ð±Ð°             %lu\n"
+#~ "  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð²            %lu\n"
+#~ "  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð² Ñ�Ð°Ñ‡ÑƒÐ²Ð°Ñ˜    %lu\n"
+#~ "  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-Ñ�Ð°Ð´Ñ€.   %lu\n"
+#~ "  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð² Ð¾Ð±Ð°        %lu\n"
+#~ "  Ð¾Ð¿ÑˆÑ‚Ð¸ ÑƒÐ½Ð¾Ñ�           %lu"
+
+#~ msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
+#~ msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¾: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð° >= %<PRIx64>, Ð½Ð°Ñ’Ð¾Ñ…: %<PRIx64>"
+
+#~ msgid "-march=%s: expect number after `%dp'"
+#~ msgstr "-march=%s: Ð¾Ñ‡ÐµÐºÑƒÑ˜ÐµÐ¼ Ð±Ñ€Ð¾Ñ˜ Ð½Ð°ÐºÐ¾Ð½ â€ž%dpâ€œ"
+
+#~ msgid "-march=%s: rv%de is not a valid base ISA"
+#~ msgstr "-march=%s: â€žrv%deâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð±Ð°Ð·Ð° ISA"
+
+#~ msgid "   Error: length larger than remaining space in record\n"
+#~ msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ñƒ Ñ�Ð½Ð¸Ð¼ÐºÑƒ\n"
+
+#~ msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+#~ msgstr "STA_QW (Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) 0x%08x %08x\n"
+
+#~ msgid "%pB: error: erratum 843419 immediate 0x%"
+#~ msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð³Ñ€ÐµÑˆÐºÐ° 843419 Ð¸Ð·Ñ€Ð°Ð²Ð½Ð¾ 0x%"
+
+#~ msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
+#~ msgstr "â€ž%pAâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ] Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ] Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#~ msgid "%pA has both ordered and unordered sections"
+#~ msgstr "â€ž%pAâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#~ msgid "%F%P: %pA has ordered sections with incompatible alignments\n"
+#~ msgstr "%F%P: â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¾ Ð¾Ð´ÐµÑ™ÐºÐµ Ñ�Ð° Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµÐ¼\n"
+
+#~ msgid "-march=%s: unexpected ISA string at end: %s"
+#~ msgstr "-march=%s: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° ISA Ð½Ð¸Ñ�ÐºÐ° Ð½Ð° ÐºÑ€Ð°Ñ˜Ñƒ: %s"
+
+#~ msgid "%pB: warning: sh_link not set for section `%pA'"
+#~ msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žsh_linkâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
+
+#~ msgid "-march=%s: unsupported ISA subset `%c'"
+#~ msgstr "-march=%s: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ â€žISAâ€œ Ð¿Ð¾Ð´Ñ�ÐºÑƒÐ¿ â€ž%câ€œ"
+
+#~ msgid "-march=%s: `d' extension requires `f' extension"
+#~ msgstr "-march=%s: â€ždâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žfâ€œ"
+
+#~ msgid "-march=%s: `q' extension requires `d' extension"
+#~ msgstr "-march=%s: â€žqâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ždâ€œ"
+
+#~ msgid ""
+#~ "\n"
+#~ "Function descriptor located at the start address: %04lx\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ÐžÐ¿Ð¸Ñ�Ð½Ð¸Ðº Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ð½Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸: %04lx\n"
+
+#~ msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
+#~ msgstr "\tÑ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° %08lx ÐºÐ¾Ð´Ð½Ðµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ (ÑƒÑ‡Ð¸Ñ‚Ñ™Ð¸Ð²Ð°/Ð°ÐºÑ‚ÑƒÐµÐ»Ð½Ð°) %08lx/%08lx\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "No reldata section! Function descriptor not decoded.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ð�ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°! ÐžÐ¿Ð¸Ñ�Ð½Ð¸Ðº Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð½.\n"
+
+#~ msgid " Register save millicode"
+#~ msgstr " Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ñ‡ÑƒÐ²Ð° Ð¼Ð¸Ð»Ð¸ÐºÐ¾Ð´"
+
+#~ msgid " Register restore millicode"
+#~ msgstr " Ð ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ Ð²Ñ€Ð°Ñ›Ð° Ð¼Ð¸Ð»Ð¸ÐºÐ¾Ð´"
+
+#~ msgid " Glue code sequence"
+#~ msgstr " Ð�Ð¸Ð· ÐºÐ¾Ð´Ð° Ð»ÐµÐ¿ÐºÐ°"
+
+#~ msgid "%pB: corrupt symbol count: %#<PRIx64>"
+#~ msgstr "%pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð±Ñ€Ð¾Ñ˜ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %#<PRIx64>"
+
+#~ msgid "%pB: not enough memory to allocate space for %#<PRIx64> symbols of size %#<PRIx64>"
+#~ msgstr "%pB: Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ð·Ð° %#<PRIx64> Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %#<PRIx64>"
+
+#~ msgid "%pB: corrupt size field in group section header: %#<PRIx64>"
+#~ msgstr "%pB: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ Ð¿Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ: %#<PRIx64>"
+
+#~ msgid "error: %pB version reference section is too large (%#<PRIx64> bytes)"
+#~ msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº ÑƒÐ¿ÑƒÑ‚Ðµ Ð¸Ð·Ð´Ð°ÑšÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº (%#<PRIx64> Ð±Ð°Ñ˜Ñ‚Ð°)"
+
+#~ msgid "unexpected STO_SH5_ISA32 on local symbol is not handled"
+#~ msgstr "Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ â€žSTO_SH5_ISA32â€œ Ð½Ð° Ð¼ÐµÑ�Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€Ð°Ñ’ÐµÐ½Ð¾"
+
+#~ msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with %s\n"
+#~ msgstr "%P%X: Ð¾Ð´ÐµÑ™Ð°Ðº Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð¸Ð¼Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° â€žIFUNCâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž%sâ€œ\n"
+
+#~ msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
+#~ msgstr "bfd_mach_o_read_symtab_symbols: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ"
+
+#~ msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
+#~ msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ�ÑƒÐºÐ¾Ð±Ñ™Ð°Ð²Ð°Ñ˜ÑƒÑ›Ðµ Ð»Ð¸Ñ‡Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ Ð¾Ð´Ñ€ÐµÐ´Ð±Ðµ (major/minor/revision)."
+
+#~ msgid "%B: Unknown section type in a.out.adobe file: %x\n"
+#~ msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€ža.out.adobeâ€œ: %x\n"
+
+#~ msgid "%s: Invalid relocation type exported: %d"
+#~ msgstr "%s: Ð˜Ð·Ð²ÐµÐ·ÐµÐ½Ð° Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
+
+#~ msgid "%B: Invalid relocation type imported: %d"
+#~ msgstr "%B: Ð£Ð²ÐµÐ·ÐµÐ½Ð° Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
+
+#~ msgid "%P: %B: unexpected relocation type\n"
+#~ msgstr "%P: %B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°\n"
+
+#~ msgid "%B: unknown/unsupported relocation type %d"
+#~ msgstr "%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð°/Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+
+#~ msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH"
+#~ msgstr "%B: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: â€žALPHA_R_GRELHIGHâ€œ"
+
+#~ msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW"
+#~ msgstr "%B: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: â€žALPHA_R_GRELLOWâ€œ"
+
+#~ msgid "%B: unable to find THUMB glue '%s' for `%s'"
+#~ msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žTHUMBâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+
+#~ msgid "%B: unable to find ARM glue '%s' for `%s'"
+#~ msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žARMâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+
+#~ msgid ""
+#~ "%B(%s): warning: interworking not enabled.\n"
+#~ "  first occurrence: %B: thumb call to arm\n"
+#~ "  consider relinking with --support-old-code enabled"
+#~ msgstr ""
+#~ "%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.\n"
+#~ "  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žthumbâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° â€žarmâ€œ\n"
+#~ "  Ñ€Ð°Ð·Ð¼Ð¾Ñ‚Ñ€Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ â€ž--support-old-codeâ€œ"
+
+#~ msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d"
+#~ msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° Ð�ÐŸÐ¦Ð¡-%d, Ð´Ð¾Ðº Ñ˜Ðµ â€ž%Bâ€œ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° Ð�ÐŸÐ¦Ð¡-%d"
+
+#~ msgid "error: %B is compiled as position independent code, whereas target %B is absolute position"
+#~ msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ ÐºÐ¾Ð´ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°, Ð´Ð¾Ðº Ñ˜Ðµ Ñ†Ð¸Ñ™ â€ž%Bâ€œ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜"
+
+#~ msgid "error: %B is compiled as absolute position code, whereas target %B is position independent"
+#~ msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ ÐºÐ¾Ð´ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°, Ð´Ð¾Ðº Ñ˜Ðµ Ñ†Ð¸Ñ™ â€ž%Bâ€œ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°"
+
+#~ msgid "private flags = %x:"
+#~ msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ =%x:"
+
+#~ msgid " [floats passed in integer registers]"
+#~ msgstr " [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸]"
+
+#~ msgid " [absolute position]"
+#~ msgstr " [Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜]"
+
+#~ msgid " [interworking flag not initialised]"
+#~ msgstr " [Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð°]"
+
+#~ msgid " [interworking supported]"
+#~ msgstr " [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾]"
+
+#~ msgid " [interworking not supported]"
+#~ msgstr " [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾]"
+
+#~ msgid "cannot handle R_MEM_INDIRECT reloc when using %s output"
+#~ msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€žR_MEM_INDIRECTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¼ ÐºÐ°Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·"
+
+#~ msgid "relocation `%s' not yet implemented"
+#~ msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ˜Ð¾Ñˆ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "uncertain calling convention for non-COFF symbol"
+#~ msgstr "Ð½ÐµÑ�Ð¸Ð³ÑƒÑ€Ð°Ð½ Ð´Ð¾Ð³Ð¾Ð²Ð¾Ñ€ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð·Ð° Ð½Ðµ-â€žCOFFâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
+
+#~ msgid "unsupported reloc type"
+#~ msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#~ msgid "Unrecognized reloc"
+#~ msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#~ msgid "%s: unsupported relocation type 0x%02x"
+#~ msgstr "%s: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%02x"
+
+#~ msgid "Unrecognized reloc type 0x%x"
+#~ msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%x"
+
+#~ msgid "%s: warning: illegal symbol index %ld in relocs"
+#~ msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°"
+
+#~ msgid "ignoring reloc %s\n"
+#~ msgstr "Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ\n"
+
+#~ msgid "Dwarf Error: Bad abbrev number: %u."
+#~ msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð›Ð¾Ñˆ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜: %u."
+
+#~ msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]"
+#~ msgstr "%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½, Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]"
+
+#~ msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]"
+#~ msgstr "%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]"
+
+#~ msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]"
+#~ msgstr "%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]"
+
+#~ msgid "%B: don't know how to handle section `%s' [0x%8x]"
+#~ msgstr "%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]"
+
+#~ msgid ""
+#~ "%B(%s): warning: interworking not enabled.\n"
+#~ "  first occurrence: %B: Thumb call to ARM"
+#~ msgstr ""
+#~ "%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.\n"
+#~ "  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žThumbâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð½Ð° â€žARMâ€œ"
 
 #~ msgid ""
 #~ "%B(%s): warning: interworking not enabled.\n"
-#~ "  first occurrence: %B: thumb call to arm"
+#~ "  first occurrence: %B: ARM call to Thumb"
 #~ msgstr ""
-#~ "%B(%s): attention: l'inter-rÃ©seautage n'est pas activÃ©.\n"
-#~ "  premiÃ¨re occurrence: %B: appel de repÃ¨re vers arm"
+#~ "%B(%s): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾.\n"
+#~ "  Ð¿Ñ€Ð²Ð¾ Ð¿Ð¾Ñ˜Ð°Ð²Ñ™Ð¸Ð²Ð°ÑšÐµ: %B: â€žARMâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð½Ð° â€žThumbâ€œ"
+
+#~ msgid "unable to find THUMB glue '%s' for '%s'"
+#~ msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žTHUMBâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+
+#~ msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' in TLS trampoline"
+#~ msgstr "%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žThumbâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ñƒ â€žTLSâ€œ Ñ‚Ñ€Ð°Ð¼Ð±ÑƒÐ»Ð¸Ð½Ð¸"
+
+#~ msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'."
+#~ msgstr "%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žThumb BLXâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ†Ð¸Ñ™Ð° Ð½Ð° â€žthumbâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ."
+
+#~ msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' referenced by TLS_GOTDESC"
+#~ msgstr "%B(%A+0x%lx): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€žThumbâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž0x%xâ€œ Ð½Ð° ÐºÐ¾Ñ˜Ñƒ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žTLS_GOTDESCâ€œ"
+
+#~ msgid " [has entry point]"
+#~ msgstr " [Ð¸Ð¼Ð° Ñ‚Ð°Ñ‡ÐºÑƒ ÑƒÐ»Ð°Ð·Ð°]"
+
+#~ msgid "error: required section '%s' not found in the linker script"
+#~ msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°"
+
+#~ msgid "error: %B uses FPA instructions, whereas %B does not"
+#~ msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žFPAâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð½Ðµ"
+
+#~ msgid "error: %B uses Maverick instructions, whereas %B does not"
+#~ msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žMaverickâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%Bâ€œ Ð½Ðµ"
+
+#~ msgid "%B: unsupported relocation type %i"
+#~ msgstr "%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%iâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+
+#~ msgid "%H: R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend\n"
+#~ msgstr "%H: â€žR_FRV_FUNCDESC_VALUEâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼\n"
+
+#~ msgid "%B: unsupported relocation type %i\n"
+#~ msgstr "%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%iâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°\n"
+
+#~ msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
+#~ msgstr "%s: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (0x%lx) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (0x%lx)"
+
+#~ msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object"
+#~ msgstr "%B(%A+0x%lx): â€žR_68K_TLS_LE32â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
+
+#~ msgid "%B: Relocation %s (%d) is not currently supported.\n"
+#~ msgstr "%B: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ (%d) Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾.\n"
+
+#~ msgid "%B: Unknown relocation type %d\n"
+#~ msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ\n"
+
+#~ msgid "%B(%A+0x%lx): R_METAG_TLS_LE/IENONPIC relocation not permitted in shared object"
+#~ msgstr "%B(%A+0x%lx): â€žR_METAG_TLS_LE/IENONPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
+
+#~ msgid "%s: unknown relocation type %d"
+#~ msgstr "%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+
+#~ msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)"
+#~ msgstr "%s: ÐœÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)"
+
+#~ msgid "%B: %s\n"
+#~ msgstr "%B: %s\n"
+
+#~ msgid "%B(%A): warning: relax is suppressed for sections of alignment %d-bytes > 4-byte."
+#~ msgstr "%B(%A): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ð¸Ñ�Ð½ÑƒÑ‚Ð¾ Ð·Ð° Ð¾Ð´ÐµÑ™ÐºÐµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° %d-Ð±Ð°Ñ˜Ñ‚Ð° > 4-Ð±Ð°Ñ˜Ñ‚Ð°."
+
+#~ msgid "%B: error: Cannot set _ITB_BASE_"
+#~ msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð´ÐµÑ�Ð¸Ð¼ â€ž_ITB_BASE_â€œ"
+
+#~ msgid "Linker: cannot init ex9 hash table error \n"
+#~ msgstr "ÐŸÐ¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ð³Ñ€ÐµÑˆÐºÑƒ â€žex9â€œ Ñ…ÐµÑˆ Ñ‚Ð°Ð±ÐµÐ»Ðµ \n"
+
+#~ msgid "Linker: error cannot fixed ex9 relocation \n"
+#~ msgstr "ÐŸÐ¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡: Ð³Ñ€ÐµÑˆÐºÐ° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ð¸ â€žex9â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ \n"
 
-#~ msgid "DIV usage mismatch between %B and %B"
-#~ msgstr "incohÃ©rence d'utilisation de DIV entre %B et %B"
+#~ msgid "%s: warning: unaligned small data access. For entry: {%d, %d, %d}, addr = 0x%x, align = 0x%x."
+#~ msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°. Ð—Ð° ÑƒÐ½Ð¾Ñ�: {%d, %d, %d}, Ð°Ð´Ñ€ÐµÑ�Ð° = 0x%x, Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ = 0x%x."
 
-#~ msgid "%B: bad relocation section name `%s'"
-#~ msgstr "%B: nom de section de rÃ©adressage erronÃ© Â«Â %sÂ Â»"
+#~ msgid "%P%F: failed creating ex9.it %s hash table: %E\n"
+#~ msgstr "%P%F: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žex9.it %sâ€œ Ñ…ÐµÑˆ Ñ‚Ð°Ð±ÐµÐ»Ñƒ: %E\n"
 
-#~ msgid "%P: dynamic variable `%s' is zero size\n"
-#~ msgstr "%P: la variable dynamique Â«Â %sÂ Â» a une taille nulle\n"
+#~ msgid "%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not permitted in shared object"
+#~ msgstr "%B(%A+0x%lx): â€žR_NIOS2_TLS_LE16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
 
-#~ msgid " [64-bit doubles]"
-#~ msgstr " [doubles de 64 bits]"
+#~ msgid "%P: %H: %s reloc against local symbol\n"
+#~ msgstr "%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
 
-#~ msgid " [dsp]"
-#~ msgstr " [dsp]"
+#~ msgid "Warning: %B uses soft float, %B uses single-precision hard float"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ñ˜ÐµÐ´Ð½Ðµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#~ msgid "%P: %H: automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc\n"
-#~ msgstr "%P: %H: TOC multiples et automatiques non supportÃ©es utilisant votre fichier crt; recompilez avec -mminimal-toc ou mettez Ã  jour gcc\n"
+#~ msgid "Warning: %B uses unknown floating point ABI %d"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%dâ€œ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°"
 
-#~ msgid "%P: %H: sibling call optimization to `%s' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `%s' extern\n"
-#~ msgstr "%P: %H: l'optimisation sÅ“urs des appels vers Â«Â %sÂ Â» n'autorise pas de TOC multiples et automatiques; recompilez avec -mminimal-toc ou -fno-optimize-sibling-calls, ou rendez Â«Â %sÂ Â» externe\n"
+#~ msgid "Warning: %B uses unknown vector ABI %d"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%dâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°"
 
-#~ msgid "note: '%s' is defined in DSO %B so try adding it to the linker command line"
-#~ msgstr "note: Â«%sÂ» est dÃ©fini dans le DSO %B donc essayez de l'ajouter Ã  la ligne de commande du lieur"
+#~ msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\""
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%sâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
 
-#~ msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float"
-#~ msgstr "Attention: %B utilise -msingle-float, %B utilise -mdouble-float"
+#~ msgid "Warning: %B uses unknown small structure return convention %d"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ€ Ð¼Ð°Ð»Ð¾Ð³ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚Ð° Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ â€ž%dâ€œ"
 
-#~ msgid "Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"
-#~ msgstr "Attention: %B utilise -msingle-float, %B utilise -mips32r2 -mfp64"
+#~ msgid "%P: %B: the target (%s) of a %s relocation is in the wrong output section (%s)\n"
+#~ msgstr "%P: %B: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)\n"
 
-#~ msgid "Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"
-#~ msgstr "Attention: %B utilise -mdouble-float, %B utilise -mips32r2 -mfp64"
+#~ msgid " [G10]"
+#~ msgstr " [Ð“10]"
 
-#~ msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" is unsupported 'indirect' reference: setting to undefined"
-#~ msgstr "bfd_mach_o_read_symtab_symbol: symbole Â«Â %sÂ Â» a la rÃ©fÃ©rence non supportÃ©e Â«Â indirectÂ Â»: laissÃ© non dÃ©fini"
+#~ msgid "%s: Malformed reloc detected for section %s"
+#~ msgstr "%s: ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#~ msgid "bfd_mach_o_read_dysymtab_symbol: unable to read %lu bytes at %lu"
-#~ msgstr "bfd_mach_o_read_dysymtab_symbol: impossible de lire %lu octets Ã  %lu"
+#~ msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS"
+#~ msgstr "%B: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° Ð£Ð’Ð•Ð—Ð˜ ÐšÐ�Ðž Ð·Ð° â€ž%sâ€œ Ð·Ð°Ñ�ÐµÑšÑƒÑ˜Ðµ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ Ð£Ð’Ð•Ð—Ð˜ ÐšÐ�Ðž"
 
-#~ msgid "Mach-O header:\n"
-#~ msgstr "En-tÃªte Mach-O:\n"
+#~ msgid "%B: Unrecognised .directive command: %s"
+#~ msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž.directiveâ€œ: %s"
 
-#~ msgid " magic     : %08lx\n"
-#~ msgstr " magique    : %08lx\n"
+#~ msgid "%s: encountered datalabel symbol in input"
+#~ msgstr "%s: Ð½Ð°Ð¸ÑˆÐ°Ð¾ Ñ�Ð°Ð¼ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð°Ñ‚Ð¿Ð¸Ñ�Ð° Ð´Ð°Ñ‚ÑƒÐ¼Ð° Ñƒ ÑƒÐ»Ð°Ð·Ñƒ"
 
-#~ msgid " cputype   : %08lx (%s)\n"
-#~ msgstr " typecpu    : %08lx (%s)\n"
+#~ msgid "PTB mismatch: a SHmedia address (bit 0 == 1)"
+#~ msgstr "ÐŸÐ¢Ð‘ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHmediaâ€œ (Ð±Ð¸Ñ‚ 0 == 1)"
 
-#~ msgid " filetype  : %08lx (%s)\n"
-#~ msgstr " typefichier: %08lx (%s)\n"
+#~ msgid "PTA mismatch: a SHcompact address (bit 0 == 0)"
+#~ msgstr "ÐŸÐ¢Ð� Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHcompactâ€œ (Ð±Ð¸Ñ‚ 0 == 0)"
 
-#~ msgid " ncmds     : %08lx (%lu)\n"
-#~ msgstr " ncmds     : %08lx (%lu)\n"
+#~ msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16"
+#~ msgstr "%s: Ð“Ð�Ð¡ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ ÐŸÐ¢Ð‘ â€žinsnâ€œ Ñ�Ð° â€žR_SH_PT_16â€œ"
 
-#~ msgid " sizeofcmds: %08lx\n"
-#~ msgstr " taillecmds: %08lx\n"
+#~ msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n"
+#~ msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð½Ð° %08x Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%pâ€œ\n"
 
-#~ msgid " flags     : %08lx ("
-#~ msgstr " fanions   : %08lx ("
+#~ msgid "%s: could not write out added .cranges entries"
+#~ msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð´Ð¾Ð´Ð°Ñ‚Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ"
 
-#~ msgid " reserved  : %08x\n"
-#~ msgstr " rÃ©servÃ©   : %08x\n"
+#~ msgid "%s: could not write out sorted .cranges entries"
+#~ msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð½Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ"
 
-#~ msgid "Segments and Sections:\n"
-#~ msgstr "Segments et Sections:\n"
+#~ msgid "  %s: 0x%v\n"
+#~ msgstr "  %s: 0x%v\n"
 
-#~ msgid " #: Segment name     Section name     Address\n"
-#~ msgstr " #: Nom segment      Nom section      Adresse\n"
+#~ msgid "%s: 0x%v 0x%v\n"
+#~ msgstr "%s: 0x%v 0x%v\n"
 
-#~ msgid "Symbol %s replaced by %s\n"
-#~ msgstr "Symbole %s remplacÃ© par %s\n"
+#~ msgid "   %s%s %s\n"
+#~ msgstr "   %s%s %s\n"
 
-#~ msgid "%B(%A+0x%lx): cannot reach %s"
-#~ msgstr "%B(%A+0x%lx): ne peut atteindre %s"
+#~ msgid ", 8-byte data alignment"
+#~ msgstr ", 8-Ð±Ð¸Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
 
-#~ msgid "%B: warning: ignoring duplicate section `%A'\n"
-#~ msgstr "%B: attention: ignore la section dupliquÃ©e Â«%AÂ»\n"
+#~ msgid "%B(%A+0x%"
+#~ msgstr "%B(%A+0x%"
 
-#~ msgid "%B: warning: duplicate section `%A' has different size\n"
-#~ msgstr "%B: attention: section dupliquÃ©e Â«%AÂ» avec des tailles diffÃ©rentes\n"
+#~ msgid "%P: %B: cannot create stub entry %s\n"
+#~ msgstr "%P: %B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ\n"
 
-#~ msgid "relocation references a different segment"
-#~ msgstr "la relocalisation fait rÃ©fÃ©rence Ã  un segment diffÃ©rent"
+#~ msgid "%P: stubs don't match calculated size\n"
+#~ msgstr "%P: Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜Ñƒ Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ñ‚Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸\n"
 
-#~ msgid "%B: relocation type %d not implemented"
-#~ msgstr "%B: relocalisation de type %d pas implÃ©mentÃ©e"
+#~ msgid "%P: %B: unknown relocation type %d for `%T'\n"
+#~ msgstr "%P: %B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð·Ð° â€ž%Tâ€œ\n"
 
-#~ msgid "warning: %B and %B differ in position-dependence of data addressing"
-#~ msgstr "attention: %B et %B divergent sur la dÃ©pendance de la position de l'adressage des donnÃ©es"
+#~ msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n"
+#~ msgstr "%s: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð½Ð° %08x Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ %08x\n"
 
-#~ msgid "warning: %B and %B differ in position-dependence of code addressing"
-#~ msgstr "attention: %B et %B divergent sur la dÃ©pendance de la position de l'adressage du code"
+#~ msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s"
+#~ msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ â€ž%sâ€œ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°%s"
 
-#~ msgid "Can't Make it a Short Jump"
-#~ msgstr "Impossible d'en faire un Saut Court"
+#~ msgid "invalid relocation type %d"
+#~ msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
 
-#~ msgid "Exceeds Long Jump Range"
-#~ msgstr "PortÃ©e dÃ©passÃ©e pour le Saut Long"
+#~ msgid "Output file requires shared library `%s'\n"
+#~ msgstr "Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%sâ€œ\n"
 
-#~ msgid "Absolute address Exceeds 16 bit Range"
-#~ msgstr "L'adresse absolue dÃ©borde sur 16 bits"
+#~ msgid "Output file requires shared library `%s.so.%s'\n"
+#~ msgstr "Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%s.so.%sâ€œ\n"
 
-#~ msgid "Absolute address Exceeds 8 bit Range"
-#~ msgstr "L'adresse absolue dÃ©borde sur 8 bits"
+#~ msgid "Symbol %s not defined for fixups\n"
+#~ msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð·Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ\n"
 
-#~ msgid "Unrecognized Reloc Type"
-#~ msgstr "Type de relocalisation non reconnu"
+#~ msgid "Warning: fixup count mismatch\n"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð±Ñ€Ð¾Ñ˜ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°\n"
 
-#~ msgid "corrupt or empty %s section in %B"
-#~ msgstr "section %s vide ou corrompue dans %B"
+#~ msgid "%s: string too long (%d chars, max 65535)"
+#~ msgstr "%s: Ð½Ð¸Ñ�ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³Ð° (%d Ð·Ð½Ð°ÐºÐ°, Ð½Ð°Ñ˜Ð². 65535)"
 
-#~ msgid "%s: invalid DSO for symbol `%s' definition"
-#~ msgstr "%s: DSO incorrect pour la dÃ©finition du symbole Â«%sÂ»"
+#~ msgid "%s: unrecognized symbol `%s' flags 0x%x"
+#~ msgstr "%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ 0x%x"
 
-#~ msgid "%B: %A+0x%lx: jump to stub routine which is not jal"
-#~ msgstr "%B: %A+0x%lx: saut vers la routine dans la partie de l'Ã©bauche (stub) qui n'est pas jal"
+#~ msgid "%B: unimplemented ATI record %u for symbol %u"
+#~ msgstr "%B: Ð½ÐµÐ¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¸ Ð�Ð¢Ð˜ Ð·Ð°Ð¿Ð¸Ñ� â€ž%uâ€œ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%uâ€œ"
 
-#~ msgid "bfd_make_section (%s) failed"
-#~ msgstr "Ã‰chec de bfd_make_section (%s)"
+#~ msgid "%B: unexpected ATN type %d in external part"
+#~ msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð�Ð¢Ð� Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œ Ñƒ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð¼ Ð´ÐµÐ»Ñƒ"
 
-#~ msgid "bfd_set_section_flags (%s, %x) failed"
-#~ msgstr "bfd_set_section_flags (%s, %x) a Ã©chouÃ©"
+#~ msgid "%B: unexpected type after ATN"
+#~ msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð½Ð°ÐºÐ¾Ð½ Ð�Ð¢Ð�-Ð°"
 
-#~ msgid "Size mismatch section %s=%lx, %s=%lx"
-#~ msgstr "Taille de section ne concorde pas %s=%lx, %s=%lx"
+#~ msgid "%s: can not represent section `%s' in oasys"
+#~ msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ â€žoasysâ€œ"
 
-#~ msgid "failed to enter %s"
-#~ msgstr "Ã©chec d'insertion de %s"
+#~ msgid "%B: `ld -r' not supported with PE MIPS objects\n"
+#~ msgstr "%B: â€žld -râ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð° â€žPE MIPSâ€œ\n"
 
-#~ msgid "No Mem !"
-#~ msgstr "MÃ©moire Ã©puisÃ©e!"
+#~ msgid "%B: unimplemented %s\n"
+#~ msgstr "%B: Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ â€ž%sâ€œ\n"
 
-#~ msgid "reserved STO cmd %d"
-#~ msgstr "commande STO %d rÃ©servÃ©e"
+#~ msgid "%B: jump too far away\n"
+#~ msgstr "%B: Ñ�ÐºÐ¾Ðº Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð´Ð°Ð»ÐµÐºÐ¾\n"
 
-#~ msgid "reserved OPR cmd %d"
-#~ msgstr "commande OPR %d rÃ©servÃ©e"
+#~ msgid "%B: bad pair/reflo after refhi\n"
+#~ msgstr "%B: Ð»Ð¾ÑˆÐµ â€žpair/refloâ€œ Ð½Ð°ÐºÐ¾Ð½ â€žrefhiâ€œ\n"
 
-#~ msgid "reserved CTL cmd %d"
-#~ msgstr "commande CTL %d rÃ©servÃ©e"
+#~ msgid "DST__K_SET_LINUM_INCR not implemented"
+#~ msgstr "â€žDST__K_SET_LINUM_INCRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#~ msgid "reserved STC cmd %d"
-#~ msgstr "commande STC %d rÃ©servÃ©e"
+#~ msgid "DST__K_SET_LINUM_INCR_W not implemented"
+#~ msgstr "â€žDST__K_SET_LINUM_INCR_Wâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#~ msgid "stack-from-image not implemented"
-#~ msgstr "pile depuis l'image non implÃ©mentÃ©e"
+#~ msgid "DST__K_RESET_LINUM_INCR not implemented"
+#~ msgstr "â€žDST__K_RESET_LINUM_INCRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#~ msgid "stack-entry-mask not fully implemented"
-#~ msgstr "masque de pile d'entrÃ©e pas complÃ¨tement implÃ©mentÃ©"
+#~ msgid "DST__K_BEG_STMT_MODE not implemented"
+#~ msgstr "â€žDST__K_BEG_STMT_MODEâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#~ msgid "PASSMECH not fully implemented"
-#~ msgstr "PASSMECH pas complÃ¨tement implÃ©mentÃ©"
+#~ msgid "DST__K_END_STMT_MODE not implemented"
+#~ msgstr "â€žDST__K_END_STMT_MODEâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#~ msgid "stack-local-symbol not fully implemented"
-#~ msgstr "symbole local de pile pas complÃ¨tement implÃ©mentÃ©"
+#~ msgid "DST__K_SET_PC not implemented"
+#~ msgstr "â€žDST__K_SET_PCâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#~ msgid "stack-literal not fully implemented"
-#~ msgstr "litÃ©ral de pile pas complÃ¨tement implÃ©mentÃ©"
+#~ msgid "DST__K_SET_PC_W not implemented"
+#~ msgstr "â€žDST__K_SET_PC_Wâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#~ msgid "stack-local-symbol-entry-point-mask not fully implemented"
-#~ msgstr "masque du symbole local de point d'entrÃ©e de pile pas complÃ¨tement implÃ©mentÃ©"
+#~ msgid "DST__K_SET_PC_L not implemented"
+#~ msgstr "â€žDST__K_SET_PC_Lâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#~ msgid "%s: not fully implemented"
-#~ msgstr "%s: pas complÃ¨tement implÃ©mentÃ©"
+#~ msgid "DST__K_SET_STMTNUM not implemented"
+#~ msgstr "â€žDST__K_SET_STMTNUMâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#~ msgid "obj code %d not found"
-#~ msgstr "code objet %d non repÃ©rÃ©"
+#~ msgid "[%u]: %u\n"
+#~ msgstr "[%u]: %u\n"
 
-#~ msgid "Reloc size error in section %s"
-#~ msgstr "Erreur de taille de relocalisation dans la section %s"
+#~ msgid ": %u.%u\n"
+#~ msgstr ": %u.%u\n"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/uk.gmo ./bfd/po/uk.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/uk.gmo	2019-12-11 01:53:31.000000000 +0000
+++ ./bfd/po/uk.gmo	2024-02-01 01:52:33.000000000 +0000
@@ -1,140 +1,161 @@
-Þ•01Ûbl…€„…„‡dŸ
eŸsŸ‡Ÿ ŸA¿Ÿ? :A | “ ¦ $Å 3ê 
¡,¡%L¡r¡t¡A†¡&È¡ï¡¢!¢:¢J¢ i¢Š¢ª¢Ã¢Ú¢ç¢Pú¢K£*c£9Ž£6È£;ÿ£;¤FM¤6”¤6Ë¤:¥5=¥,s¥D ¥Nå¥J4¦)¦G©¦:ñ¦B,§Lo§)¼§Bæ§L)¨v¨Œ¨D£¨Gè¨0©O©a©u©�©¢©3Á©õ©ª0ªOª_ªoª+‰ª+µª+áª#
«1«I«R«p«(‡«?°«>ð«%/¬&U¬(|¬)¥¬GÏ¬7­O­f­†­£­¼­×­÷­®+®A®Y®m®„®,ž®Ë®Û®ô®¯#¯2¯H¯]¯w¯Ž¯1£¯Õ¯æ¯ó¯
-°%°#=°+a°&�°5´°ê°ÿ°±1±G±a±z±‘±§±$¼±á±ú±²2²$G²l²€²•²<®²ë²ú²
	³³+³@³ X³y³”³¤³Ä³à³´´2´E´*X´ƒ´•´&§´Î´0â´µ"'µJµ	[¶e¶#x¶œ¶µ¶Æ¶ß¶"ø¶·"/·#R·#v·š·#¯·#Ó·÷·¸"¸@¸F¸S¸[¸`¸
-}¸ˆ¸�¸!“¸ µ¸Ö¸Û¸à¸ø¸¹8¹=¹Q¹!V¹x¹‰¹�¹–¹›¹ ¹¦¹ª¹¯¹Ë¹"ä¹ºº,º@º&`ºB‡ºÊºêºïºôºûº»»»»7»K»R»k»»�»¡»²»Ã»Ô»ì»	û»
¼
¼
-!¼
-,¼
-7¼
-B¼
-M¼$X¼
-}¼#ˆ¼
-¬¼·¼É¼!á¼½½
-'½
2½	@½J½
-[½f½m½…½Ÿ½±½À½×½ò½¾¾)¾0¾P¾(`¾/‰¾¹¾Ë¾+Ú¾¿A"¿d¿~¿˜¿²¿8Ç¿ÀÀ-À&GÀnÀ�À2¨À?ÛÀ&ÁBÁ(aÁŠÁ"�ÁÀÁ*àÁ6Â{BÂr¾Âx1ÃªÃ:ÀÃûÃ?
ÄMÄmÄ&‹Ä²ÄœÌÄDiÅ'®Å,ÖÅ1Æ'5Æ$]Æ/‚Æ-²Æ0àÆ&Ç88ÇqÇ=‘Ç9ÏÇ:	È6DÈ6{È²È/ÒÈ5É+8É$dÉ6‰É"ÀÉ&ãÉ6
-Ê=AÊ:Ê:ºÊDõÊ8:Ë9sËC­Ë:ñË7,Ì8dÌ@�ÌGÞÌ9&Í,`Í0�Í#¾ÍâÍ-ýÍ6+ÎbÎ7~Î;¶Î:òÎ9-Ï"gÏ3ŠÏ%¾Ï.äÏÐL3Ð0€Ð.±Ð1àÐ'ÑE:Ñ8€Ñ(¹ÑcâÑ4FÒ&{Ò2¢Ò&ÕÒ6üÒ]3Ó8‘ÓÊÓOéÓb9Ô,œÔ+ÉÔ)õÔYÕ=yÕ3·Õ2ëÕBÖ)aÖ$‹Ö3°Ö9äÖ6×/U×D…×&Ê×Wñ×UIØIŸØ+éØ8Ù%NÙ(tÙ&�Ù,ÄÙ#ñÙ>ÚBTÚB—ÚÚÚ'úÚE"Û9hÛ4¢Û3×ÛJÜ(VÜ;Ü»Ü0ÚÜ.Ý,:Ý'gÝ6�Ý ÆÝ/çÝ4ÞNLÞª›ÞIFß9�ß3Êß¾þß<½à<úàF7áP~áoÏá>?âF~â`Åâ~&ãF¥ã‚ìã[oä3Ëä@ÿäM@åmŽå7üå#4æXæ(næ&—æ+¾æêæÿæ8ç"Lç$oç'”ç9¼çCöç!:è!\è*~è/©è1Ùè/é/;é0ké*œé0Çé<øéi5ê=ŸêBÝê= ë-^ë.Œë8»ë9ôëF.ì?uìVµì(í>5í;tí=°í#îíLî8_î+˜î8Äî2ýî90ï:jï3¥ï,Ùïuð |ð.�ð.ÌðKûð0GñBxñ/»ñ,ëñ'ò%@ò,fòN“òâòCüòJ@ó@‹óJÌó*ô%Bô<hô ¥ôlÆô<3õ<põ+­õÙõ,õõH"ö6köA¢öAäöJ&÷>q÷J°÷Jû÷<Fø.ƒø(²ølÛøvHùA¿ù6ú8ú4Vú0‹ú+¼úAèú3*û@^û!Ÿû#Áû.åûBüFWü4žü%Óü:ùü24ý*gý9’ýCÌýCþ:TþT�þJäþ5/ÿ4eÿ6šÿ/Ñÿ/&1&X5'µ0Ý5(D3m%¡&Çî'=6#t+˜3Ä(ø@!Cb5¦'Ü,g14™mÎA<@~H¿GKPIœLæH3C|YÀ50P4�M¶N	1S	)…	/¯	)ß	+	
-75
-3m
-6¡
-9Ø
-X[kCÇ6>B=�*¿.ê2
[L
&¨
-Ï
,ý
*E/`(�$¹0Þ'87"pA“)Õ=ÿ@=2~+±"Ý5<6's%›(ÁRê?=F}3Ä1øD*HoD¸KýaI`«sB€‚ÃTF=›bÙb<gŸg0o( 4É5þ34-h/–HÆF7VGŽ+Ö$2'.Z/‰+¹)å^KnFº"@5[(‘EºDDEFŠ_Ñ^1"�*³+Þ8
- :C '~ ;¦ 8â '!'C!3k!>Ÿ!-Þ!,"9"X"u".“"/Â"ò"$#37#k#F‰#&Ð#!÷#6$5P$+†$ ²$$Ó$.ø$.'%%V%)|%\¦%D&HH&D‘&LÖ&X#'H|')Å'*ï' (5;(9q(@«(+ì(6)AO).‘)3À)=ô)H2*<{*8¸*3ñ*4%+4Z+0�+@À+1,B3,Lv,AÃ,L-8R-B‹-+Î-2ú-<-.3j.Xž.P÷..H/`w/&Ø/\ÿ/X\0/µ0på0AV1+˜1KÄ1.2,?2%l2’23²22æ23493Wn3=Æ3*45/4%e4B‹4%Î44ô4>)5<h5C¥5Bé5;,63h6œ6¼6Ë6!à67$7=71P7V‚7IÙ7I#8<m8ª8½8Ñ8ã8ý8
9'9G9
S9a9%r9\˜9;õ91:C:Y:\:y:†:	Ÿ:©:»:Ì:,Ù:;;0;"L;o;(Œ;/µ;/å;1<8G<#€<'¤<2Ì<3ÿ<3=;C==†=Ž=£=³=º=Â=Ö=ë=>>%><>Y>k>‰>	¨>²>Ð>	å>"ï>?$?)@?/j?"š?½?Ô?Ý?é?í?@@$@'6@^@ {@#œ@À@Ú@ ì@
AH+A1tA#¦A,ÊAX÷AaPB:²B.íB7C1TC;†C(ÂC:ëC,&D-SD-�D¯D2ÎDEE&E;ERE)hE’E!¨E$ÊEIïE9F5VFŒF
-¡FC¬FIðF:GLGTG\G
zGˆGAšGÜG/øG+(H8TH�H$£H!ÈH1êHI;I+ZI†I
-šI¥IÄI%ÖIüIJ.,J-[JG‰J3ÑJK"$KGKYK$rK—K!´KÖK5èKL	0L:LLLbL‚LœL¸LÇLÙL	àLêLïLûL
-M!M=MSMeM…MžM¾MÒMäMüM-NHNZNlN€NšN'¯N×NæNøN
-OO!O:O:VO%‘O%·OÝOAöO;8PCtP=¸PCöP=:Q"xQ7›Q<ÓQ<R)MR5wR­R¶RvÑR*HSsS'…S­S¿SÆS
-ÍS(ØST'T;TXTpT�T#¨T$ÌT,ñT.U,MU.zU©U"ÆU,éU.V!EV1gV0™V2ÊV,ýV.*W#YW}W�W(±W/ÚW!
-X,X(IX#rX+–XÂX,ÛX Y)YBYbYvY–Y#µY-ÙY"Z*Z<ZOZ[ZpZ&‚Z	©ZF³Z/úZ*[J;[M†[Ô[ô[\\-;\i\r\z\A†\>È\]A]7[]B“]!Ö]ø]˜^±^Í^ß^ñ^2_.9_#h_Œ_™_¦_¶_¾_:×_+`#>`b`u`Ž`¦`,¾`:ë`&a	>adHa­a6ÀaM÷aMEb<“bgÐbb8c<›cEØc1d(Pd$ydžd/´d+äde,eFece>e<¾eûe4f'Lf$tf™fªfÂfÙfêfgg,g>gPgbg|g—g©gºgÒgñg2hCh']h7…h0½hDîh,3i'`iˆi¨iºi-Ôi+j+.j*Zj	…j	�j
-™j
-¤j¯jÄjÓjèj÷j1üj.k/Nk~k'�k"Åk&èk0l@l^lsl|l9šlÔl,él9m)PmCzmI¾mEnYNnY¨n;o;>oNzo/Éo5ùo:/p5jp4 p9Õp7q9GqD�qGÆqDrESrC™r4Ýr?s:RsG�s;ÕsAt9St*�t6¸t/ït;u3[u%�u1µuAçu!)vUKv\¡vAþv1@w?rw:²w7íw>%x$dxI‰xÓx/ðxO yPpy3Áy õy?z:Vz&‘z
-¸z0Ãz%ôz"{%={0c{!”{¶{Ï{ê{ÿ{|O|k|,Š|J·|7}
:}H}1W}‰}�}°}Ã})à}*
-~,5~6b~™~$¹~_Þ~">Aa£,Á2îH!€j€z€$‹€°€Ã€¼ã€¹ �Z‚/l‚œ‚·‚Õ‚*õ‚L ƒ2mƒ- ƒ)Îƒ"øƒ„.„C„X„4g„œ„0¤„%Õ„9û„5…G…X…r…z…‚…ž…H¥…î…4ñ…&†/†
-F†Q†2m†O †ð†‡"‡*7‡%b‡ ˆ‡©‡Ç‡Ï‡Cî‡¤2ˆ×ˆäˆ þˆ‰(‰<‰Q‰g‰}‰”‰±‰Â‰Ô‰è‰Nð‰[?Š›ŠAŸŠáŠ‹‹5‹6M‹„‹ ¤‹8Å‹+þ‹*Œ=ŒMŒUŒjŒ‚Œ–ŒªŒ¾ŒÑŒ
äŒòŒL� Y�Dz�P¿�Ž"Ž2=Ž$pŽ•ŽµŽ5ÈŽþŽ!�;�B�2J�F}�/Ä�ô�"�)�9�MH�9–�;Ð�7‘D‘\‘y‘ˆ‘,›‘$È‘Jí‘)8’ˆb’(ë’%“(:“c“
-“,Š“7·“ï“)	”3”Q”k”ƒ”‹”£”»”
Ñ”#ß”•'•C•T•j•„•¡•»•#Ç•%ë•–.–E–W–7n–¦–Â–â–û–—"—5—I—]—s—J‰—JÔ—J˜Ij˜:´˜ï˜-™;<™+x™@¤™<å™1"š8Tš8�š.Æš>õšI4›h~›yç›>aœN œIïœd9�0ž�;Ï�8žFDž5‹ž&Áž.èž-Ÿ.EŸ0tŸ<¥Ÿ!âŸ ! `? .  ,Ï hü Ee¡0«¡6Ü¡k¢E¢Å¢&ã¢I
-£#T£<x£<µ£eò£2X¤/‹¤/»¤4ë¤= ¥9^¥0˜¥7É¥'¦=)¦6g¦@ž¦ß¦ÿ¦,§S0§
„© ’©8³©>ì©ˆ+ª‰´ª‚>«9Á«"û«/¬\N¬[«¬­8­NO­ž­ ­u¸­:.®*i®%”®+º®æ®0ø®2)¯1\¯/Ž¯#¾¯
â¯$ð¯©°<¿°pü°km±gÙ±IA²&‹²§²²_Z³Sº³W´]f´YÄ´kµ}Šµ‚¶S‹¶•ß¶yu·oï·ˆ_¸Qè¸m:¹{¨¹'$º$Lº…qº}÷º]u»Ó»ñ»-¼3¼+M¼Hy¼&Â¼"é¼]½j½€½�½7°½7è½7 ¾%X¾(~¾§¾'°¾,Ø¾>¿XD¿W�¿?õ¿F5ÀA|ÀH¾ÀfÁinÁ#ØÁ'üÁ'$ÂLÂ$jÂ?�Â!ÏÂ&ñÂÃ#8Ã'\Ã#„Ã¨ÃLÇÃÄ%$Ä!JÄ-lÄšÄ­ÄÍÄ!èÄ
-Å*ÅPDÅ•Å±Å(¾Å'çÅ ÆG0ÆVxÆGÏÆOÇgÇ(|Ç$¥Ç!ÊÇ%ìÇÈ0ÈLÈgÈKƒÈ%ÏÈ4õÈ&*ÉQÉ?lÉ¬ÉÇÉ äÉ<ÊBÊQÊ
`ÊnÊ…Ê#¡Ê4ÅÊúÊË@6Ë1wË0©ËÚË#ùËÌ6ÌCNÌ’Ì©Ì2ÀÌóÌ;ÍHÍG\Í,¤ÍÑÎäÎ#÷ÎÏ4ÏPÏ$iÏ7ŽÏÆÏ3ÚÏ#Ð#2ÐVÐ#nÐ#’Ð¶Ð;ÊÐ8Ñ?ÑEÑ[ÑcÑ-hÑ
-–Ñ¡Ñ¦Ñ.¬Ñ*ÛÑÒÒ*Ò(;Ò.dÒ“ÒB˜ÒÛÒNàÒ/ÓKÓRÓXÓ]ÓbÓhÓlÓ7qÓ5©ÓIßÓ)Ô(.Ô;WÔ,“ÔVÀÔkÕ(ƒÕ¬Õ±Õ¶Õ½ÕÃÕÈÕâÕ!éÕÖ%Ö,ÖKÖeÖ{Ö‘Ö§Ö½Ö6ÓÖ
-×	$×
.×
<×
-J×
-U×
-`×
-k×
-v×_�×á×{ø×
-tØ5Ø1µØHçØ10Ù,bÙ�Ù"¡ÙÄÙÐÙíÙÚ-ÚQ6Ú7ˆÚÀÚ;ÙÚ1ÛGÛ?aÛ¡Û±Û=¸ÛöÛQÜ^eÜ,ÄÜñÜQÝ6]ÝA”Ý@ÖÝ#Þ$;Þ`Þ�~Þ&ß73ß,kßI˜ßDâß'àGBàBŠàKÍàFá=`ážá1µáIçá,1âP^â¹¯â¸iã­"ä/Ðäfågåw�åùå6æMPæ6žæ\Õæˆ2è@»èUüèJRé@�é>ÞéZêFxêU¿ê@ëSVë;ªëeæëaLìd®ìaíouí+åísîn…îrôîAgïš©ïHDðQ�ð\ßðR<ñN�ñOÞñ].òLŒòNÙò\(óN…óLÔóL!ô‘nôŽõ¨�õ�8öDÖö6÷bR÷Wµ÷a
ø/oø~Ÿøvù›•ùm1ú0ŸúUÐúS&ûVzû@Ñû¸ü†Ëü`RýS³ýJþ˜Rþ‰ëþKuÿÏÁÿu‘OQW{©{%î¡_�#ðÂæ×V¾X:nÈ©irzÜ^Wm¶U$	Iz	lÄ	e1
-]—
-eõ
-|[:ØË‡ß�g
kõ
wa@ÙPNkLº<mDŠ²o='­TÕw*›¢t>ƒ³7‡?³ÇL{UÈXXwLÐoF�^Ôj3ºž:YŒ”p!l’oÿmomÝ|K�ÈäV e;!t¡!¶"÷Í"ˆÅ#äN$¬3%Pà%g1&u™&É'PÙ'U*(*€(]«(U	)[_)$»)6à)²*MÊ*H+Va+³¸+…l,5ò,5(-]^-F¼-V.]Z._¸.T/Um/TÃ/I0�b0ó0`s1Ô1KT2c 2j3do3�Ô3vV4ÌÍ4<š5b×5T:6¡�6317_e7^Å7L$8®q8| 9½�9p[:zÌ:zG;Â;?á<T!=Tv=�Ë=cM>r±>S$?Sx?VÌ?V#@Jz@’Å@9XAt’A„B~ŒB“CUŸCJõC|@DJ½DE‚F‚‘FLGaGU�Gq×GzIH¼ÄH¾�I�@JcÎJ—2K�ÊKŠXLNãLC2MüvM
-sN³~Ob2PF•PJÜPL'QEtQ“ºQ‚NR{ÑR=MSH‹SbÔSš7TÞÒT^±UIVsZVqÎVT@W�•WÛ%XÛY§ÝY�…Z¢#[gÆ[Z.\k‰\Sõ\]I]W§]^ÿ]�^^;à^T_aq_IÓ_^`E|`@Â`<aW@ar˜a>bUJb— b;8cytc{îc^jdEÉdGeÖWeq.fž fs?go³g}#h|¡h€ikŸi’j~žj�k®ŸkhNlh·lV m¡wm²nfÌnI3oW}oZÕob0pl“p‚q¢ƒqh&r²�rBs_Ot ¯t‰PuoÚu†JvlÑv\>wÄ›w[`xq¼xp.y>Ÿy%ÞyfzSkzL¿zt{`�{kâ{IN|j˜|V}—Z}oò}žb~SCUa™vûLr€2¿€Cò€™6�‡Ð�—X‚\ð‚�MƒˆÏƒlX„zÅ„»@…äü…äá†ïÆ‡€¶ˆ27‰ÔjŠª?‹Úê‹äÅŒßª�éŠŽct�<Ø�r�gˆ�^ð�WO‘E§‘gí‘eU’\»’¯“qÈ“J:”w…”^ý”]\•Uº•E–ÔV–Ž+—|º—67˜2n˜4¡˜aÖ˜Z8™o“™nšnršpáš‰R›ˆÜ›@eœT¦œSûœjO�tº�P/ž~€žrÿžGrŸIºŸT ‡Y Wá c9¡S�¡/ñ¡B!¢Yd¢Z¾¢8£=R£P�£4á£j¤E�¤CÇ¤[¥cg¥HË¥A¦EV¦_œ¦]ü¦EZ§@ §¬á§ŸŽ¨µ.©yä©Š^ª¶éª» «K\¬<¨¬=å¬b#­`†­uç­s]®cÑ®t5¯hª¯�°z•°˜±p©±q²†Œ²k³m³qí³‚_´Nâ´\1µgŽµ\öµoS¶LÃ¶®·j¿·}*¸o¨¸n¹°‡¹›8º`Ôºô5»M*¼ºx¼¶3½`ê½âK¾�.¿ZÌ¿t'ÀYœÀgöÀW^ÁC¶ÁiúÁSdÂ;¸ÂjôÂ¬_Ã‘ÄDžÄxãÄ?\Å‚œÅhÆnˆÆž÷Æ�–Çž$È¦ÃÈ•jÉ^Ê>_ÊžÊ"·ÊdÚÊ%?ËVeË¼ËYÛË�5ÌxÃÌx<ÍcµÍ*ÎDÎ2dÎ+—Î+ÃÎïÎ3Ï;ÏXÏnÏ*‰Ï«´Ï€`Ð$áÐ3Ñ:Ñ6=ÑtÑ;�ÑËÑÞÑøÑÒK.ÒzÒ%“Ò+¹ÒSåÒ39ÓRmÓQÀÓaÔjtÔrßÔRRÕV¥ÕfüÕgcÖËÖ€äÖe×x×,‰×¶×Ï×â×ó×	Ø Ø7ØQØ?lØE¬Ø"òØ:Ù;PÙŒÙ1£Ù8ÕÙÚK!ÚmÚRÚWÒÚ]*Û?ˆÛ<ÈÛ
-Ü Ü1Ü+5ÜaÜsÜ…ÜH—Ü8àÜIÝFcÝ4ªÝ1ßÝ<Þ9NÞkˆÞeôÞGZßY¢ßÆüßÁÃàl…ápòáocâuÓâŠIãUÔã‚*äv­äg$å[ŒåHèåO1æ%�æ<§æ<äæ@!ç)bçDŒçÑç>íç0,è]è*Ýèoé1xéªéiÉé²3êæêøêë*ë 3ëTë�fëa÷ëgYìNÁìVí4gígœígî£lîOïO`ï€°ïE1ð
wðQ…ð×ðBéð,ñ4>ñusñTéñ‰>òxÈòAAó?ƒóÃó'Õó+ýó>)ô4hô�ôY¯ô	õõ:õ/LõM|õ/Êõ<úõ 7öXöjöqö
-€ö‹ö›ö ¹ö,Úö÷'÷5A÷)w÷3¡÷Õ÷!ñ÷"ø26ø]iø&Çøîøù*$ù1OùU�ù#×ùûù
úú&ú=-ú'kúG“ú2Ûú2û>Aûf€ûfçû†NüvÕü|LýVÉýP þ_qþpÑþpBÿQ³ÿio'Šæ²A™Û;í);BIdiÎEà+&%R/x"¨0Ë:ü]7K•]áK?9‹DÅ]
-GhO°bkcYÏ])K‡>ÓH	&[	m‚	nð	7_
-5—
-?Í
-:
RH%›MÁ7%GFm&´AÛ@
H^
T§
Lü
I[+y)¥!Ï\ñNl[aÈ*¦I•ð9†(À5é96Y�™¬uÃf9 w²^*~‰MOV4¦'Û#$CohbØC;�Ÿ¼?Ép	fzVá#8A\ž%¶XÜr54¨#ÝÌ%ÎYôžNžíoŒ¹ü´¶[k {Ç EC!<‰!/Æ!ö!\"`q"HÒ"@#U\#M²#™$�š$E*%£p%˜&H­&+ö&>"'1a'+“'>¿'8þ',7(,d(,‘(,¾(@ë(:,),g)+”)6À)K÷)GC*H‹*-Ô*M+oP+\À+q,S�,Mã,71-)i-0“-jÄ-h/.h˜.l/n/…/œ/´/+Ì/ø/0%0408=0Fv0W½0.1tD1K¹1q2Pw2.È2÷23;3XW32°3€ã3dd4`É4e*5U�5¤æ5«‹6¦77}Þ7{\8ÙØ8l²9]:˜}:v;s�;p<vr<pé<ŠZ=˜å=Ž~>�
?‹ž?`*@�‹@tA}‘AŒB¦œB“CCw×C�ODUÝD[3ER�E;âEEFŠdFDïF˜4GÏÍGh�HjIlqIvÞIiUJr¿JO2Kˆ‚KALpML¦¾L¯eMQN>gN\¦NWOJ[O¦OH½OFPOMPH�PeæPTLQ5¡Q1×Q1	R%;RaR•{ROS�aS”òSq‡T%ùT"USBU–UªU½UBÐU`V\tV\ÑV….WF´WNûWÌJXNY�fYBZeGZ]­Z˜['¤["Ì[Gï[/7\7g\§Ÿ\¨G^ð__`8l`8¥`JÞ`w)a¨¡a`Jbc«bVcLfc³cÑc,îc#do?d¯eo¾eX.fˆ‡f?g Pg9qg«g³g9»gõg«h¸h`½hi;4ipi!Œio®iÏjCîj
-2kI=kX‡kaàkDBl_‡lçlHmuLm>ÂmoIo]ioÇo%Ûo&p'(p'Pp(xp'¡p#Ép ípq(qŒ0qÑ½q�r|–rAs3Us9‰s7ÃsqûsNmtO¼tpub}u,àu,
v:vBv%_v…vŸv³vÇvÚvív6
-w¦Aw.èw¸x‹Ðx$\y3�ygµy9z3Wz"‹zc®z7{RJ{�{
¬{cº{l|_‹|2ë|<}[}k}Žz}}	~o‡~�÷~4…Kº*€1€dJ€G¯€˜÷€h��ù�Lƒ=eƒb£ƒ6„=„YW„v±„0(…ZY…H´…@ý…B>†�†(’†(»†-ä†‡X2‡1‹‡S½‡*ˆ/<ˆ5lˆ4¢ˆ,×ˆ‰2‰^L‰9«‰3å‰3Š3MŠi�Š<ëŠ@(‹Ci‹­‹Ì‹è‹Œ#ŒAŒaŒž�Œ� �‡®�“6ŽhÊŽ)3�H]�b¦�]	�zg�|â�b_‘zÂ‘z=’z¸’–3“ÙÊ“(¤”-Í•—û–±“—ÓE˜™W8ša�š_òšwR›tÊ›Q?œ`‘œWòœXJ�Z£�bþ�Laž5®žLäž¼1Ÿ`îŸ^O ´® qc¡rÕ¡{H¢äÄ¢�©£O9¤S‰¤ÃÝ¤Q¡¥¬ó¥¬ ¦ðM§v>¨Xµ¨T©_c©uÃ©Z9ª”ª`«ju«Ðà«“±¬³E­Bù­<®7C®ßÎ¿Ciq¯ž$Š¨6¸ŒÔ9õ¹í¹Ä"Àg!f5Ý”­;›Î¬¾×Æ
-ƒTW­0§y2!'(ê�)Ý
-ªE69	Ç`Z‹—EÄÖê{8¦J5„÷”�ž‡I£r€dŠÊ<ÆxkUámÜ‚x´¡[×ºå§û8ÇR)Ä»°q�¿õÿU³�Û³÷ëÃ"D}sÖ/WòF[šƒ|y0Vôë,ëµäÕ²$².ÿ;Y}_Îó„¼Ê!Hø×<\Œð¤´Àsˆh¡…fæˆ«ÁÄÏÜ,*‘wØºúa:ë©Î„' ðí~Mà‚báZó
Èc:Q3(;ÿ÷4G&ÉCN±µÞ&"PL%‹Cç?æ‰
-æýµ”Õ‡r±Ê¡Y†`�”¥Uôa›BÉUÙðlñe/—lwÝæ6î“Ÿ¥õh›>Lþ�:’’øõ¢“#VÔ¸Ÿ¿pxŠÍ~­a·ÃxC•QSt#Ú<â¡ÒïÈé@»ã�eûPÔ—jˆËñ%‰	S~LÃ°ãXOù$,3{)ã@šnÅcËAŸ�5Œ3§‚åb×À3µÅ-ÈXŠuZ=©zRí0[FÔD:wºËaÞ›Õ=ú¨
¦®N9®ä �ñ¿5šÜ­Kn8¶¾ŸKäÊ½	.l2ÜŠBAtø?�öãm®ƒÆÖLëz !x–gW˜ùÖ¶ÉÌVÄøIZ¸4O™¶:»«þžŽ€Iåÿ=©ÝþÌc‰•N¡þí�ªù[‡V¥v¬xÆòñ‘³Y$Ž‡Ž˜D Ê…•J®Íg+†û²Ð¨·ÒèØ3é�ozŸÝeo2ŽV•Ñïn(·êi0¬#+°]Õèû`|iFeî�åªo<Mq6î*>Tà&§ìÎÀ6Ç‹€"o¸Eæ¶NY’½Žð7vKø{£Óë8‡@–ªÂý*„*?	1GAù 5uç‡_>úÂÐ#ìž«Kü™å9«ð¥Ï`…^B£7Ù¢ï£1žè2â>ÆþÅÐ¬¶ví–9'Å¹Ñz|ÜÛÁõµ¢ï-OÒÌh²ÂvW€U‘ÏËà+òA%Ç&œ´%z«S2#—¤Nsî¾d“?pÕ0ãbÍÈ³ãR¦H£“(—ÏÑAž¤	]r¢¹âjI:â�81GXÚ§-ô±
-‘wÈå^}°h¹4ù¥�—íPÂn¼è8pÌ1êf<ká]RX2[Ï#¼½vrÔª¹ß™,Ùü_mƒ¨Ãh�ôw@]¼‰	JÛO·Ê vQ¼†Ð”˜/g¥ƒç^œ©ÉÁÒWd^¤)Úi!üÞ–JmI;'¿ê ÿüÅ$
Ú•{;š
.5qÉy /öÓw¸qX�ûNö™†ÛE>k�Ëà=øþB©ÿ¸�´–ªuÖ-‰óÓsGŒÈý^4iâ¡ôùÐºY-Û/•�ç¦Bf%Üîõ,e»è	fE]|T½®FöfÌìkÇ´ý4ÙÝÑÏBtóÞ?éÍœ~ØF¯ÁSpQé ÓŸ�ì“(ˆÛT²Øèæ|³=÷k¯z·ö¨Ž_9W²mP_J¼Ó­Øáô &C/MDºJß](CÖÍK†sjE¿…lc\‹ä�@˜17ð}Éé F[OÓaÔ+òÐ»PºZX™ctM¢â„SŒj
-çKìo{p
-7œýÌHU+áYj‹³Ã¬äßMïÙR_.ns˜‚)$
?îG×�=.cœM´'ouk†L@±�yöÒ^T›Ú}�\*Á1¦¯0tšò÷yH±Ò…tg÷ý¤­‹‘4>…ÞbÑl¨u-ú‚g&óm°«A–{¾q §SR×”ï’›OQà¾‘ÃVD3Z¢6àeúPdÑç½"Daê~·7ÆÎj+Š£‰dn½b
Ú!»’‚Hñó\r
À¦üœ�Ë’ÇÍhyÂˆµ¤H\Áìr7~uˆL®€l™˜.Þñû�iéIÙá€ü)
-òÂ|šß¾Ä±“b„À\%�*TƒQ¶¬p�¯©d`}`;<ä�G¯úØÅ',°ÕŒ"ß{®‚®‰®„‰ ‰´‰È‰Ü‰ð‰ŠŠ,Š@ŠTŠhŠ|Š�Š¬ŠÀŠÔŠðŠ‹‹,‹@‹T‹h‹|‹�‹¤‹¸‹Ô‹è‹ü‹Œ<ŒPŒdŒxŒŒŒ¨Œ¼ŒÐŒäŒ��(�<�P�d�x�Œ� �´�Ð�ì�ŽŽ(Ž<ŽPŽdŽxŽ”Ž°ŽÌŽàŽôŽ��0�D�X�l�€�”�¨�¼�Ð�ä�ø�� �4�H�d�€�”�¨�Ä�Ø�ì�‘‘(‘<‘P‘d‘x‘”‘°‘Ä‘à‘ü‘’$’8’T’p’Œ’ ’´’Ð’ä’ø’“ “4“H“\“p“Œ“ “´“È“ä“ø“” ”4”`”t”�”¤”¸”Ì”à”ô”••0•D•X•l•€•œ•°•Ä•à•ô•––0–D–X–l–€–”–¨–Ä–Ø–ì–—,—@—T—h—|—˜—¬—À—Ô—ð—˜˜,˜@˜T˜h˜|˜�˜¤˜À˜Ü˜ð˜™™,™@™T™h™„™ ™¼™Ð™ä™ø™š š4šHš\špš„š˜š¬šÀšÔšèšüš›$›8›T›p›„›˜›´›È›Ü›ð›œœ,œ@œTœhœ„œ œ´œÐœìœ��(�D�`�|���¤�À�Ô�è�ü�ž$ž8žLž`ž|ž�ž¤ž¸žÔžèžüžŸ$ŸPŸ�®ÿÿÿÿ²®"ÿÿÿÿè® ÿÿÿÿ¯5ÿÿÿÿK¯%ÿÿÿÿw¯)ÿÿÿÿ§¯(ÿÿÿÿÖ¯/ÿÿÿÿ°ÿÿÿÿ(°'ÿÿÿÿV°ÿÿÿÿ�°-ÿÿÿÿ¯°ÿÿÿÿÍ°/ÿÿÿÿ±ÿÿÿÿ-± ÿÿÿÿU±%ÿÿÿÿ’±ÿÿÿÿÆ±*ÿÿÿÿñ±.ÿÿÿÿ!²)1ÿÿÿÿ{²%ÿÿÿÿ¡²1ÿÿÿÿÓ²
-2ÿÿÿÿ³"ÿÿÿÿC³3ÿÿÿÿw³3ÿÿÿÿ«³ÿÿÿÿÒ³9ÿÿÿÿ"´%ÿÿÿÿU´
-Hÿÿÿÿ©´
-/ÿÿÿÿµ
-6ÿÿÿÿ@µ
->ÿÿÿÿˆµ
-0ÿÿÿÿÂµ
-Fÿÿÿÿ¶
-ÿÿÿÿT¶
-+ÿÿÿÿ‰¶
-ÿÿÿÿ±¶
-"ÿÿÿÿÝ¶@)ÿÿÿÿL·
-/ÿÿÿÿ…·
- ÿÿÿÿ¯·-ÿÿÿÿö·6ÿÿÿÿB¸6ÿÿÿÿ�¸
-7ÿÿÿÿÎ¸
-?ÿÿÿÿ¹
-ÿÿÿÿ<¹4ÿÿÿÿ‰¹+ÿÿÿÿÁ¹-ÿÿÿÿû¹3ÿÿÿÿ/º
--ÿÿÿÿfº(ÿÿÿÿ¢º
--ÿÿÿÿÙºÿÿÿÿ»6ÿÿÿÿH»>ÿÿÿÿ�»#ÿÿÿÿ¸»ÿÿÿÿô»ÿÿÿÿ0¼
-2ÿÿÿÿl¼
-.ÿÿÿÿ¤¼Fÿÿÿÿë¼
-2ÿÿÿÿ'½
-2ÿÿÿÿc½
-2ÿÿÿÿŸ½
-2ÿÿÿÿÛ½
-2ÿÿÿÿ¾
-2ÿÿÿÿS¾Fÿÿÿÿš¾
-9ÿÿÿÿÝ¾
-7ÿÿÿÿ¿
-9ÿÿÿÿa¿Fÿÿÿÿ¨¿Fÿÿÿÿï¿	2ÿÿÿÿ*À+ÿÿÿÿ\À.ÿÿÿÿ‘À+ÿÿÿÿÃÀ-ÿÿÿÿøÀ0ÿÿÿÿFÁ"ÿÿÿÿ…Á!ÿÿÿÿ¸Á
-*ÿÿÿÿîÁ
-Aÿÿÿÿ9Â
-dÿÿÿÿ§Â
-$ÿÿÿÿÕÂ1ÿÿÿÿÃ1ÿÿÿÿCÃ
-ÿÿÿÿ`Ã5ÿÿÿÿ®Ã&ÿÿÿÿâÃ=ÿÿÿÿ2Ä&ÿÿÿÿ†Ä+ÿÿÿÿÅÄÿÿÿÿùÄ]ÿÿÿÿfÅ!5ÿÿÿÿ½ÅKÿÿÿÿ	Æ<"ÿÿÿÿgÆ$ÿÿÿÿ Æ7
-ÿÿÿÿâÆÿÿÿÿ*Ç;ÿÿÿÿ’Ç?ÿÿÿÿðÇÿÿÿÿÈ2ÿÿÿÿSÈÿÿÿÿ„Èÿÿÿÿ¶È=ÿÿÿÿÉIÿÿÿÿhÉ(ÿÿÿÿ¦ÉIÿÿÿÿ	Ê!ÿÿÿÿ?Ê!ÿÿÿÿoÊÿÿÿÿ Ê+ÿÿÿÿÍÊ=ÿÿÿÿË5ÿÿÿÿAË@ÿÿÿÿ†Ë7ÿÿÿÿ¾Ë-ÿÿÿÿìËÿÿÿÿ	Ì-ÿÿÿÿFÌ
-"	ÿÿÿÿ™Ì?ÿÿÿÿÚÌ2ÿÿÿÿÍ6Eÿÿÿÿ�ÍJÿÿÿÿÞÍjÿÿÿÿOÎcÿÿÿÿ¹Îgÿÿÿÿ'ÏVÿÿÿÿ„ÏmÿÿÿÿøÏDÿÿÿÿCÐ‡ÿÿÿÿÑÐ>ÿÿÿÿ*ÑSÿÿÿÿ~ÑAÿÿÿÿÀÑX#ÿÿÿÿ<ÒDÿÿÿÿ�Ò9ÿÿÿÿÉÒ'?ÿÿÿÿ2ÓI/ÿÿÿÿªÓMÿÿÿÿøÓ_ÿÿÿÿYÔLDÿÿÿÿéÔlÿÿÿÿVÕaÿÿÿÿ¸Õ
-TÿÿÿÿÖ>ÿÿÿÿsÖlÿÿÿÿàÖlÿÿÿÿM×ÿÿÿÿ‹×~ÿÿÿÿ!ØKÿÿÿÿŠØ
-uÿÿÿÿÙ
-+Mÿÿÿÿ�Ù
-RÿÿÿÿëÙ
-fÿÿÿÿ[Ú
-qÿÿÿÿÖÚ
-}ÿÿÿÿ]Û
-F<ÿÿÿÿéÛ
-?ÿÿÿÿ2Ü
-Bÿÿÿÿ~Ü
-KÿÿÿÿÓÜ£dÿÿÿÿàÝ
-Qÿÿÿÿ;Þ
-=ÿÿÿÿ‚Þ'\ÿÿÿÿß\/ÿÿÿÿ�ß\!ÿÿÿÿ
à
-aÿÿÿÿxà
-ÀÿÿÿÿBá
-5ÿÿÿÿ�áC9ÿÿÿÿýámÿÿÿÿŠâbÿÿÿÿãcÿÿÿÿqã
-OÿÿÿÿÊãDÿÿÿÿ#ä
-Rÿÿÿÿä(;ÿÿÿÿâäkÿÿÿÿTåÄÿÿÿÿæWÿÿÿÿ~æE$ÿÿÿÿîæE$ÿÿÿÿ^ç
-¨ÿÿÿÿè
-MÿÿÿÿgèrÿÿÿÿÚè
-Pÿÿÿÿ4é
-PÿÿÿÿŽé
-Pÿÿÿÿèé
-PÿÿÿÿBê
-Pÿÿÿÿœê
-Pÿÿÿÿöêrÿÿÿÿië
-WÿÿÿÿÊë
-Uÿÿÿÿ)ì
-WÿÿÿÿŠìrÿÿÿÿýìrÿÿÿÿpí	TÿÿÿÿÍí_ÿÿÿÿ3îcÿÿÿÿ�îYÿÿÿÿýî`ÿÿÿÿeï3Tÿÿÿÿíï3>ÿÿÿÿ^ð@ÿÿÿÿµð
-Wÿÿÿÿñ
-‰ÿÿÿÿ«ñ
-»ÿÿÿÿpò
-RÿÿÿÿÌòmÿÿÿÿDójÿÿÿÿ¯ó
-)ÿÿÿÿâóK„ÿÿÿÿ±ôJÿÿÿÿ	õuÿÿÿÿšõ\1ÿÿÿÿ7öPÿÿÿÿ�ö"Hÿÿÿÿ÷ã ÿÿÿÿø0hÿÿÿÿ¥øƒÿÿÿÿ)ùlpÿÿÿÿú'KÿÿÿÿwútÿÿÿÿûP$ÿÿÿÿ‘û9rÿÿÿÿXü=|ÿÿÿÿý6ÿÿÿÿRýUÿÿÿÿ¶ý%Dÿÿÿÿþ(;ÿÿÿÿ‚þvÿÿÿÿÿ�ÿÿÿÿÎÿPÿÿÿÿ="�ÿÿÿÿü$XÿÿÿÿxXÿÿÿÿä4ÿÿÿÿ8Mÿÿÿÿ‡ZÿÿÿÿâwÿÿÿÿZƒÿÿÿÿâ€ÿÿÿÿcTÿÿÿÿ¸ ÿÿÿÿç ]ÿÿÿÿd
-49ÿÿÿÿñŒÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
+Þ•	0x8
+Àp<™ŽT™Œ›4¶
5¶C¶W¶p¶A�¶?Ñ¶:·L·c·v·$•·
º·È·%è·¸¸A"¸&d¸‹¸¤¸½¸Ö¸æ¸ ¹&¹F¹_¹v¹ƒ¹P–¹ç¹*ÿ¹;*ºfºFxº6¿º6öº:-»5h»,ž»DË»N¼J_¼)ª¼=Ô¼:½LM½)š½BÄ½L¾T¾j¾D�¾GÆ¾¿-¿?¿S¿k¿€¿3Ÿ¿Ó¿ê¿0ü¿-À=ÀMÀ+gÀ+“À+¿À#ëÀÁ'Á0ÁLÁcÁ(xÁ?¡Á>áÁ% Â&FÂ(mÂ)–ÂGÀÂÃÃ?Ã\ÃuÃ�Ã°ÃÉÃäÃúÃÄ&Ä=Ä,WÄ„Ä”Ä­ÄÅÄÜÄëÄÅÅ0ÅGÅ1\ÅŽÅŸÅ¬ÅÃÅÞÅ#öÅ+Æ&FÆ5mÆ£Æ¸ÆÐÆêÆÇÇ3ÇJÇ`Ç$uÇšÇ³ÇÓÇëÇ$È%È9ÈNÈ<gÈ¤È³È
ÂÈÐÈäÈùÈ É2ÉMÉ]É}É™É¹ÉÒÉëÉþÉ*Ê9ÊKÊ&]Ê„Ê0˜ÊÉÊ"ÝÊ	Ë
+Ë#ËAËZËkË„Ë"�ËÀË"ÔË#÷Ë#Ì?Ì#TÌ#xÌœÌ©ÌÇÌåÌëÌøÌÍÍ"Í
+@ÍKÍPÍ!VÍ xÍ™ÍžÍ£Í»ÍÛÍûÍÎ!Î'Î8Î?ÎEÎJÎOÎUÎYÎ"^Î�Î†Î¦ÎºÎ&ÚÎBÏDÏdÏiÏnÏuÏ{Ï€Ï’Ï™Ï±ÏÅÏÌÏåÏùÏ
+ÐÐ,Ð=ÐNÐfÐ	uÐ
Ð
�Ð
+›Ð
+¦Ð
+±Ð
+¼Ð
+ÇÐ$ÒÐ
+÷Ð#Ñ
+&Ñ1ÑCÑ![Ñ}Ñ’Ñ
+¡Ñ
¬Ñ	ºÑÄÑ
+ÕÑàÑçÑÿÑÒ+Ò:ÒQÒlÒ{Ò”Ò£ÒªÒ(ÊÒ/óÒL#ÓpÓ‚Ó+‘Ó½ÓAÙÓÔ5ÔOÔiÔ8~Ô·ÔÏÔäÔ&þÔ%ÕDÕ2_Õ?’Õ&ÒÕùÕ(ÖAÖ"TÖwÖ*—Ö6ÂÖ{ùÖru×xè×aØwØ7÷Ø:/ÙjÙ@|Ù5½ÙFóÙM:Ú4ˆÚ4½Ú=òÚ70Û4hÛ1�ÛUÏÛU%Üb{ÜbÞÜAÝaÝ&Ý¦Ý&ÀÝœçÝ,„Þ1±Þ'ãÞ$ß/0ß-`ß+Žß0ºß&ëß2à8Eà*~à©à=Éà9á:Aá6|á6³á$êáâ//â_â5tâ+ªâ$Öâûâ6ã"Qã&tã6›ã=Òã:ä:KäD†ä8Ëä9åC>å:‚å7½å8õå@.æGoæ9·æ,ñæ0ç#Oçsç=Žç-Ìç6úç1è7Mè3…è;¹è:õè(0é"Yé3|é%°é?Öé.êEê0eê1–ê'ÈêVðêGëEeë8«ë(äëc
ì4qì&¦ì2Íì&ík'í*“í*¾í4éí]îA|î?¾îGþîFïOeïbµï8ð,Qð+~ð)ªðYÔð0.ñ=_ñ3�ñ2ÑñBò,Gò(tòL�òêò4ó)=ó$gó3Œó9Àó6úó/1ôDaô&¦ôWÍôU%õ8{õ%´õ(Úõ&ö,*ö#Wö>{öBºöBýö@÷'`÷Eˆ÷9Î÷4ø3=øJqø(¼ø;åø!ù0@ùDqù/¶ù:æù@!ú@búG£ú?ëú2+û8^ûS—û'ëû.ü,Bü'oü6—ü ÎüYïü/Iý4yý5®ýNäýª3þIÞþ9(ÿ3bÿ¾–ÿ<U<’FÏPog>×F`]~¾F=‚„[3c@—MØm&7”#Ìð(&/IVW +ø5$Zo8ƒ"¼$ß'9,Cf!ª!Ì*î/	1I	/{	/«	0Û	*
+07
+<h
+i¥
+=BM=�9Î-&6"].€8¯:èF#
?j
Vª
B(D>m;¬=è4&#[@LÀI
8W+�8¼2õ9(:b3�,Ñuþ t.•.Ä$ó'0@Bq/´,ä'%9,_ŒC¦Jê@5Jv*Á%ì%<81u §(Èlñ<^<›+Ø, HM6–AÍAJQ>œJÛJ&<q<®.ë(lCv°A'6i 4¾0ó+$APJ’3Ý@!R#t.˜BÇF
+4Q%†:¬2ç3 *N 9y C³ C÷ :;!Tv!JË!5"4L"6�"P¸"/	#/9#&i#&�#5·#'í#0$5F$(|$3¥$%Ù$&ÿ$&%'F%=n%#¬%+Ð%3ü%(0&@Y&Cš&5Þ&'' <',]'gŠ'4ò'm'(A•(@×(H)Ga)K©)Iõ)L?*HŒ*CÕ*Y+5s+0©+4Ú+M,N],1¬,)Þ,)-/2-)b-+Œ-7¸-3ð-6$.9[.X•.[î.CJ/6Ž/>Å/=0*B0.m02œ0[Ï0&+1-R1,€1­1È1/ã1$2082'i28‘2"Ê2Hí2A63)x3=¢3#à3@42E4+x4#¤45È4<þ4';5%c5(‰5R²5?6FE6Œ63§61Û6D
7HR7D›7Kà7a,8[Ž8sê8g^9gÆ9B.:‚q:Tô:=I;!‡;-©;b×;b:<g�<g=0m=(ž=4Ç=5ü=O2>)‚>3¬>-à>/?H>?F‡?7Î?G@+N@$z@2Ÿ@.Ò@/A+1A)]A-‡A/µA^åAKDBF�B×B"óBC51C"gC(ŠC$³CEØCDDDcDF¨D_ïD^OE"®E*ÑE+üE'(F;PF8ŒF'ÅF'íF3G>IG-ˆG,¶GãGIHLHiH.‡H/¶HæH$I3+I_IF}I&ÄI!ëI6
J5DJ)zJ¤J¾J(ÝJK+ K LK$mK#’K.¶K.åK%L2:L3mL)¡L\ËLD(MHmMD¶MLûMXHNH¡N)êN*O ?O5`O9–O@ÐO+P6=P\tPAÑP.Q]BQM Q3îQ="RH`R<©R8æR3S4SS4ˆS0½S@îS1/TBaTL¤TAñTL3U8€U+¹U2åU<V3UVX‰VPâV.3W`bW&ÃWPêW\;XX˜XpñXAbY#¤YEÈY+ZK:Z.†Z<µZ,òZX[,x[¥["½[%à[\3&\2Z\�\4­\?â\@"]Wc]=»]*ù]5$^%Z^B€^%Ã^4é^>_<]_Cš_BÞ_;!`3]`)‘`$»`!à`'a8*acaƒa•a¤a!¹aÛa)ña,b-Hb$vb›b1®b_àb@c/Uc+…cV±cIdIRd<œd.Ùd.e/7e;ge£e¶eÊe0Üe/
f=f'Wf7f·f
Ëf.Ùfg
g"g%3g\Yg;¶gòghhh:hGh	`hjh|h�h,šhÇhÛhñh"
i0i(Mi/vi/¦i1Öi8j#Aj'ej2�j3Àjôj;k@kGkOkdktk{kƒk—k¬kÁkÓkækýkl&lDl	clml‹l	 l"ªlÍlßl)ûl/%m"Umxm�m˜m¤m¨m»mÍmßm'ñmn 6n#Wn{n•n¯nÉnãnýno1o CodoH‚o1Ëo#ýo,!pBNpX‘paêp:Lq.‡q7¶q1îq; r(\r:…r,Àr-ír's"Cs-fs”s2³sæsöst t7t!Mt$ot,”t(Át-êtIubu5uµu
+ÊuCÕuIvcvuv}v…v
£v±v>Ãv?wABw„w/ w+Ðw8üw5x$Kx!px1’xÄxãx+y.yBy[y
+hysyB’yÕy%çy
zz.=z-lzGšz3âz{"5{X{u{†{—{©{$Â{ç{!|&|58|n|	€|Š|œ|²|Ò|ì|}})}X0}	‰}“}˜}¤}³}Ê}æ}ü}~.~G~g~{~�~¥~-Ã~ñ~)C'X€�¡³º!Áã:ÿ%:€%`€†€Ÿ€A¸€;ú€C6�z�#”�,¸�=å�C#‚=g‚"¥‚7È‚<ƒ<=ƒ)zƒ5¤ƒÚƒãƒvþƒ*u„ „'²„Ú„ì„ó„ú„
+	…(…=…'O…w…”…¬…Ä…#Ü…†,†.E†,t†.¡†Ð†"í†,‡.=‡!l‡1Ž‡0À‡2ñ‡,$ˆ.Qˆ#€ˆ¤ˆÄˆ(Øˆ/‰!1‰S‰(p‰#™‰+½‰é‰,Š /ŠPŠiŠ‰Š�Š½Š#ÜŠ-‹".‹Q‹c‹v‹‚‹—‹&©‹	Ð‹FÚ‹/!ŒEQŒ—Œ-¨ŒJÖŒM!�o���¦�¹�-Ö�Ž*
Ž8ŽVŽjŽrŽA~Ž>ÀŽÿŽA�7S�B‹�!Î�ð�˜�©�Å�×�é�:þ�#9‘2]‘.�‘#¿‘1ã‘9’O’\’i’y’�’:š’+Õ’#“%“8“Q“i“,�“:®“é“	”d”p”6ƒ”;º”;ö”<2•go•b×•<:–1w–(©–$Ò–÷–/
—+=—i—…—
+Ÿ—
+ª—
+µ—À—Ý—6ù—>0˜<o˜¬˜4È˜'ý˜$%™6J™�™’™ª™Á™Ò™ê™šš&š8šJšdšš‘š¢šºš2Ùš›'&›LN›4››7Ð›0œ'9œaœ�œ–œ¨œ·œ-Ñœ+ÿœ++�*W�	‚�	Œ�
+–�
+¡�¬�È�Ô�á�ö�ž ž5žDž1Iž{ž/›žËžêž ûž'Ÿ'DŸ"lŸ&�Ÿ0¶ŸçŸ  # A 9X -’ À ,Õ a¡9d¡2ž¡4Ñ¡)¢C0¢It¢E¾¢Y£Y^£;¸£;ô£M0¤/~¤5®¤:ä¤5¥4U¥9Š¥7Ä¥9ü¥D6¦G{¦DÃ¦E§CN§-’§0À§4ñ§>&¨;e¨8¡¨*Ú¨6©/<©;l©3¨©%Ü©1ª!4ªVVª9­ª\çªAD«1†«?¸«:ø«73¬>k¬$ª¬EÏ¬u­q‹­Iý­G®4d®O™®Zé®/D¯Ot¯PÄ¯3° I°?j°:ª°&å°
+±±3±0@±%q±"—±%º±0à±!²3²L²g²|²‰²S˜²Oì²<³,[³7ˆ³À³
Â³Ð³1ß³´%´8´K´Ch´O¬´,ü´6)µ`µ$€µ_¥µ"¶((¶AQ¶“¶,±¶2Þ¶H·Z·j·"{·
+ž·>©·$è·
¸ ¸@¸¼V¸¹¹Í¹/ß¹º*ºHº*hºL“º2àº-»)A»"k»Ž»¡»¶»Ë»2Ú»
¼0¼F¼%a¼‡¼9”¼Î¼<à¼=½3[½5�½2Å½7ø½B0¾Ls¾À¾Ñ¾ë¾ó¾û¾¿H¿g¿4j¿&Ÿ¿Æ¿Ï¿
+æ¿ñ¿2
À-@ÀOnÀ¾ÀÝÀ"âÀ*Á%0Á VÁwÁ•Á�ÁC¼Á¤Â¥Â²Â ÌÂLíÂ:ÃCÃWÃlÃ‚Ã˜Ã¯ÃÌÃÝÃïÃûÃÄÄ*$ÄNOÄ[žÄúÄAþÄ@Å_Å,wÅ¤ÅÁÅ6ÙÅÆ 0Æ8QÆ+ŠÆ¶ÆÈÆØÆàÆ'õÆ)Ç(GÇpÇˆÇœÇ°ÇÄÇ×Ç
êÇøÇIÈ \È}ÈDœÈPáÈ2ÉDÉ2_É$’É·É×É5êÉ Ê!;Ê]ÊdÊ2lÊFŸÊJæÊ/1ËFaË¨Ë"ºËÝËíËMüË9JÌ;„Ì7ÀÌøÌÍ-Í<Í,OÍ$|ÍJ¡Í)ìÍ(Î%?Î(eÎŽÎ
+ªÎ,µÎâÎ)üÎ&ÏDÏ^ÏvÏ~Ï–Ï/®Ï)ÞÏÐ
Ð#,ÐPÐ'hÐ�Ð¡Ð·ÐÑÐîÐÑ#Ñ%8Ñ^Ñ{Ñ’Ñ¤Ñ7»ÑóÑÒ%(ÒNÒhÒ}Ò�Ò¢Ò¶ÒÊÒàÒJöÒJAÓJŒÓI×Ó:!Ô\Ô-{Ô;©Ô+åÔ@Õ<RÕ4�Õ6ÄÕ-ûÕ8)Ö5bÖ5˜Ö8ÎÖU×.]×>Œ×IË×hØy~Ø>øØN7ÙI†ÙdÐÙ05Ú;fÚ8¢ÚFÛÚ5"Û&XÛ.Û-®Û.ÜÛ0Ü<<Ü!yÜ›Ü!´Ü)ÖÜEÝZFÝ`¡ÝGÞZJÞU¥Þ.ûÞ,*ßhWßjÀßE+à0qà6¢àkÙàEEá‹á&©áQÐáS"âEvâ#¼â<àâ<ãeZãQÀã2ä/Eä/uä4¥ä=Úä9å0Rå7ƒå%»å'áå=	æ6Gæ@~æ¿æ2ßæç,ç
Cç
Qç
_ç
mç!{ç
�ç"«çÎç
Ýç)ëç)è?è+Tè€è�è”è™èžè£èªè½èÄè=ÊèZé
cë që8’ë>Ëëˆ
+ì‰“ì‚í9 í"Úí/ýí\-îŠî8™îNÒî!ï#ïu;ï:±ï*ìï%ð+=ðið0{ð2¬ð1ßð/ñ#Añ
eñ$sñ©˜ñ<BòpòIðò&:ó§aó_	ôSiôW½ô]õYsõkÍõ}9ö‚·öS:÷„Ž÷yøˆ�øQùmhù{Öù'Rú$zú…Ÿú}%û]£ûüü-3üaü+{üH§ü&ðü"ý]:ý˜ý®ý¾ý7Þý7þ7Nþ%†þ(¬þÕþ%Þþ,ÿ%1ÿ>WÿX–ÿWïÿ?GF‡AÎHfY#À'ä'4$R?w!·&Ù# 'D#l�L¯ü%!2-T‚•µ!ÐòP,}™(¦'Ï ÷GV`G·OÿO(d$�!²%Ôú4OKk%·4Ý&	9	?T	”	¯	 Ì	<í	*
+9
+
H
+V
+m
+#‰
+4­
+â
+@1_0‘Â#áC3wŽ2¥Ø;ñ-
GA
‰
œ
#¯
Ó
ì
$!7F~3’#Æ#ê#&#Jn;‚8¾÷ý- FN
+• ¥.«*Ú
+*(:.c’—Nœë$(I-w(|;¥,áVke(Ñúÿ0!7Ysz™³Éßõ6!X	r
|
Š
+˜
+£
+®
+¹
+Ä_Ï/{F
+Â5Í1H51~,°Ý"ï;O-VQ„7Ö;'1c•?¯ïÿ=QD^–“õ,‰¶QÐ6"AY@›#Ü$%�C&Ñ7ø,0I]D§ìGBOK’FÞ=% c 1z I¬ ,ö P#!¹t!¸."­ç"/•#'Å#Yí$fG%®%tÈ%y=&¥·&¬]'W
+(Wb(„º(Z?)kš)Z*Ša*¡ì*™Ž+™(,Â,6â,M-6g-Mž-\ì-UI/JŸ/@ê/>+0Zj0FÅ0D1UQ1@§1Qè1S:2SŽ2;â2e3a„3dæ3aK4o­4C5+a5s�5<6n>6r­6A 7Tb7š·7HR8Q›8\í8RJ9N�9Oì9]<:Lš:Nç:\6;N“;Lâ;L/<‘|<Ž=¨�=�F>Dä>6)?b`?qÃ?W5@a�@/ï@~A\žAvûA›rBVC0eCU–CSìCw@DV¸D@E†PES×EJ+F¶vF9-G˜gG‰HKŠHÏÖHu¦IOJQlJ{¾Jþ:KC9LC}L{ÁLî=Mx,Nk¥NƒO#•OÂ¹Oæ|P_cQVÃQXR:sRÈ®RbwSiÚSzDT^¿TmUVŒUrãU†VV1ÝVnWU~WIÔWlXe‹X]ñXeOY|µY:2ZËmZ‡9[wÁ[@9\Pz\NË\L]<g]m¤]Š^o�^'
_T5_wŠ_›`tž`ƒa—a‡Ÿb³'cLÛcU(d”~d`eyte‰îe…xf–þfŒ•gc"hl†h¢óhH–iXßiX8jL‘joÞjFNk¼•k^Rlj±lkmºˆm:CnŒ~oppl|poépmYrmÇr|5s�²sä@te%ut‹u¶v÷·vˆ¯wä8x¬yPÊygzuƒzÉùzPÃ{U|*j|]•|Uó|hI}~²}[1~R�~$à~6²<MïH=€V†€³Ý€…‘�5‚5M‚]ƒ‚Fá‚V(ƒ]ƒ_ÝƒT=„U’„Tè„I=…�‡…†`˜†ù†Ny‡KÈ‡EˆJZˆc¥ˆj	‰et‰�Ú‰v\ŠÌÓŠs ‹<ŒbQŒT´Œ¡	�m«�3ŽŠMŽ_ØŽ›8�^Ô�L3�®€�|/‘½¬‘pj’zÛ’zV“Ñ“?ð”T0•T…•:Ú•=–cS–r·–S*—S~—VÒ—V)˜J€˜9Ë˜t™„z™~ÿ™“~šU›Jh›I³›|ý›`zœJÛœW&�~�‚„ž‚ŸLŠŸ×ŸU÷ŸqM z¿ ¼:¡¾÷¡�¶¢cD£—¨£�@¤�Î¤ŠP¥NÛ¥C*¦ün¦
+k§³v¨b*©F�©JÔ©LªElª“²ª¯F«‚ö«{y¬=õ¬H3­b|­šß­Þz®^Y¯I¸¯s°qv°cè°TL±�¡±Û1²Û
³§é³�‘´¢/µgÒµZ:¶k•¶Ç·SÉ·]¸W{¸^Ó¸�2¹;´¹Tð¹aEºI§º^ñºEP»@–»<×»W¼rl¼>ß¼U½—t½;¾yH¾{Â¾^>¿E�¿-ã¿GÀÖYÀq0Áž¢ÁsAÂoµÂ}%Ã|£Ã€ Äk¡Ä’
Å~ Å�Æ®¡ÆhPÇh¹ÇV"È¡yÈ²ÉfÎÉg5ÊI�ÊWçÊZ?ËbšËlýË‚jÌ¢íÌh�Í²ùÍ¬Î_¹Ï Ð‰ºÐoDÑ†´Ñl;Ò\¨ÒÄÓ[ÊÓq&Ôp˜Ô>	Õ%HÕfnÕLÕÕt"Ö`—ÖkøÖId×t®×j#ØVŽØ—åØB}ÙoÀÙž0ÚSÏÚs#Ûa—ÛvùÛLpÜ2½ÜCðÜ™4Ý‡ÎÝ—VÞ<îÞ\+ß�ˆßˆ
+àl“àzá»{áä7âáãïþãíîäíÜå€Êæ2KçÔ~èªSé=þéR<êÚ�êäjëßOìé/ícî<}îrºîg-ï|•ïDð^WðW¶ðEñgTñe¼ñ\"ò¯òq/óJ¡ówìó^dô]ÃôU!õEwõe½õj#öÔŽöŽc÷|ò÷6oø2¦ø4Ùøaù9pùZªù?úoEúnµún$ûp“û‰üˆŽü@ýTXýS­ýPþ~RþrÑþGDÿIŒÿTÖÿ‡+W³cSo™Ã/]B�YÐZ*8…=¾Pü4Mj‚EíC3[wcÓP7<ˆ@ÅI;PHŒAÕED]_¢]	E`	i¦	j
+@{
+¬¼
+Ÿiµ	y¿Š9
¶Ä
»{K7<ƒ=Àbþ`auÂs8c¬—t¨hÂ†ÌI�z˜˜p¬q†�km‚qð‚bNå\4g‘\ùoVLÆj}~oünl°Û›Œ`(ô‰M~ œÌ ºi!¶$"âÛ"�¾#I\$†¦$Z-%tˆ%Yý%jW&gÂ&‚*'d­'(91(Wk(CÃ(i)Sq);Å)j*Sl*hÀ*¬)+‘Ö+Dh,x­,?&-‚f-hé-nR.žÁ.�`/žî/¦�0•41^Ê1T)2:~2C¹2;ý2f93> 3ß3ÿ3"4d;4% 4LÆ4R5Qf5V¸56Y.6Šˆ6?7aS7Bµ7�ø7x†8xÿ8cx9QÜ9Q.:U€:zÖ:*Q;|;2œ;hÏ;o8<+¨<GÔ<j=+‡=³=:Ë=>#>9>*T>«>€+?$¬?3Ñ?@6@?@;Z@–@©@Ã@ß@Kù@EA%^A+„AS°A3BR8BQ‹BaÝBj?CrªCRDVpDfÇDg.E–E€¯E0FCF,TF�FšF­F¾FÔFëFGG?7G?wG"·G:ÚG;HQH1hH8šHÓHKæH2IRDIW—I]ïI?MJ<�J
+ÊJ ÕJöJ+úJ&K8KJKH\K8¥KIÞKF(L4oL¤LÂLàLþLM:M1XM<ŠM9ÇMkNemNGÓNYOvuOÆìOÁ³PluQpâQoSRuÃRŠ9SUÄS‚Tv�TgU>|UB»U[þUHZVO£V%óV<W<VW@“WÔW>ðW0/X=`XªžX>IYˆY*Zo3Z1£ZÕZiôZ²^[\#\+\*3\ ^\\l‘\mþ\�l]aý]g_^NÇ^V_4m_g¢_g
+`£r`OaOfa€¶aE7b#}b¡b
¼bQÊb‡c¤cB¶cùc4du@dT¶d‰ex•eAf?Pf>�fÏfîf
g'g+Gg>sg4²gçgYùgSheh„h/–hMÆh/i<Di �i¢i´i¹»iuj
+„j�jŸj ½j,Þjk+k5Ek){k3¥kÙk!õk"l2:l]ml&Ëlòlm*(m1SmU…m#Ûmÿmn#n*n=1n'onG—n2ßn2o>Eo*„of¯ofp†}p;qY@q9šqvÔq|KrVÈrPs_pspÐspAtQ²tiunu'‰uæ±uA˜vÚv;ìv(w:wAwHwewd…wêwEüw+Bx%nx'”x"¼x0ßx&y]7yK•y]áyK?z9‹zDÅz]
+{Gh{O°{b|kc|YÏ|])}K‡}>Ó}H~&[~m‚~nð~7_5—?Í:
€RH€%›€MÁ€7�%G�Fm�&´�AÛ�@‚H^‚T§‚Lü‚Iƒ[ƒ+yƒ)¥ƒ!Ïƒ\ñƒN„l[„aÈ„­*…Ø…U÷…¦M†•ô†9Š‡(Ä‡5í‡9#ˆ6]ˆ”ˆY�ˆS÷ˆ/K‰{‰Ž‰u¥‰fŠ‚Šw”Š^‹~k‹Mê‹O8Œ4ˆŒ'½�å�Ž$%ŽaJŽY¬Žo�bv�CÙ�G�Oe�µ�Å�Õ�ò�?ÿ�p?‘f°‘V’#n’A’’Ô’%ì’X“rk“4Þ“#”Ì7”%•Y*•c„•cè•oL–¹¼–´v—[+˜E‡˜<Í˜/
+™:™\X™`µ™Hš@_š š±šÂšUÓšM)›�w›™œ�¡œE1�£w�˜žH´žZýž+XŸ>„Ÿ1ÃŸ+õŸ>! 8` ,™ ,Æ ,ó , ¡@M¡:Ž¡,É¡+ö¡6"¢KY¢H¥¢-î¢M£}j£_è£oH¤\¸¤M¥7c¥8›¥)Ô¥þ¥0¦jK¦h¶¦h§lˆ§õ§¨#¨;¨"S¨v¨ƒ¨+–¨:Â¨ý¨©*©9©8B©F{©WÂ©.ªIª3fªGšªtâªKW«q£«P¬.f¬•¬°¬;¹¬Eõ¬X;­R”­2ç­€®á›®d}¯]â¯n@°`¯°e±Uv±¤Ì±«q²¦³}Ä³{B´Ø¾´l—µ]¶˜b¶vû¶sr·pæ·vW¸pÎ¸Š?¹˜Ê¹Žcº�òº‹ƒ»c¼\s¼`Ð¼�1½ŒÁ½’N¾wá¾�Y¿Uç¿[=ÀR™À;ìÀE(ÁDnÁ—³ÁsKÂÏ¿Âh�ÃjøÃlcÄvÐÄiGÅr±ÅO$Æ¥tÆ¬ÇšÇÇˆbÈAëÈ`-É»ŽÉÀJÊpË¦|Ë¯#ÌQÓÌ>%Í\dÍWÁÍJÎdÎ"{ÎžÎH±ÎFúÎOAÏH‘ÏeÚÏT@Ð5•Ð1ËÐ1ýÐ%/ÑUÑ°oÑ• ÒO¶Ò�Óq—Ó	Ô%Ô"1ÔSTÔ¨Ô¼ÔÏÔBâÔd%Õ„ŠÕ\Ö…lÖFòÖN9×Ìˆ×NUØh¤Ø�
ÙB«ÙeîÙ]TÚ˜²Ú'KÛ"sÛ7–ÛÎÛ‚èÛGkÜ/³Ü7ãÜ8Ý§TÝ¨üÞ¥à_Áà8!á8ZáJ“áwÞá¨Vâ`ÿâc`ãVÄãLähä†ä,£ä#Ðäkôä`æooæMßæX-ç†çˆ—ç? è–`è”÷è}Œéq
+êƒ|êë“€ë�ì ²ì9Óì
íí9íWí«níî`îR€îÓî;éî%ï!Aïocï`ÓïÏ4ðCñ
+HñISñX�ñaöñDXò_�òýòHóubó>ØóõI5õ]õ½Ýõ›ö%¯ö&Õö'üö'$÷(L÷'u÷#�÷ Á÷â÷ï÷øøS$øŒxøÑù×ù|ÞùA[ú3�úMÑú9û7Yûq‘ûNüORüp¢übý+vý,¢ýÏý×ýQôýSFþRšþ%íþÿ-ÿAÿUÿhÿ{ÿ6˜ÿ²Ïÿ.‚D±¸ö‹¯$;3`g”9ü36"jc�7ñR)|
‹c™lý€j_ë‡K2Ó<CSŽb}ñoo�ß4m	K¢	*î	
+d2
+G—
+˜ß
+hxLá=.bl6Ï
Y 
0z
Z«
H@OB�Ó(ä(
Y6A�-ÒX 1yS«*ÿ/*5Z4�,Åò2^:9™3Ó33;io<ÙC:Z'•½Üø3Qqž‘�0‡¾“FhÚ)CHmb¶]zw|ògox×_P‡°x8z±z,ø§z –Ù²(Œ -µ!—ã"±{#Ó-$%W &ax&_Ú&w:'t²'Q'(`y(WÚ(X2)Z‹)bæ)LI*5–*LÌ*P+ j+œ,¼¨,œe-Ø.ÎÛ.`ª/^0´j0Ò1qò1rd2{×2äS3�84OÈ4S5Ãl5â06¿7QÓ7¬%8¬Ò8ð9Ûp:vL;XÃ;T<_q<uÑ<ZG=¢=`">Tƒ>jØ>ÐC?“@³¨@B\A^ŸAþA7B=BQBeBtB(ƒB¬B)»BåBúB0C0?CpC2‹C¾CÓCØCÝCâCçCîCDD^D]›j7ìŸ±ß4¾ˆKi¿z¹Ò°ZÜÐ†©œË‹e£æÌµ Þ½W³1üÑÃO”�+·-Øˆæ>6ØK¹Å5.ŽÚÞüÙ-ÿ¨¡8éÊà”)é9hfBC”5ðpHÄ•ír~�}u‚N}lACˆÔHQ~à
+CÔõùÀáÖE�Pñ¤»Ãÿ±ë]ÈÚçi[3ªÆ3-Ph–ž‡Ïw“FR³âãk_é‰%$¡*—²5¨Q0q`µôŽQy”+“ùvå4GåìÄªÙõÓÞŽ+ÐæÁñÆàeøç{Dík-­PZ»)r
+Q:»‘Œ´@½ªJ(ˆSðTfŠÓ¡‘—ÏúM¼°ý#,#æÁ.z,¤_ÑbŠ¼úñ>—˜îµñ%„ÿŸÀ¶Y÷÷¤@¯wRO”À‹ÈTxëL0–‘Û�»ÁäŸ{lK ÐÍz#ÅxMH}õøÖd6ƒ0a‰L.‚*òøÝÚ¯ÐÂ¯ÂcÃ mg�°\è^wÂØaf…Fek_|YÊd±+x¹—v7¾˜%A<‚ÄÒ
+÷£�"àª5…È§�•„�×
+[nq@ÊýÔ…–IÙá]WÞ¬¥3�*™äï|˜Y­¹6ÇÑPÆW_ì"¸œòâ‘‰çµ$É}Á4Ì/Ì+,¯ÆMÑs‚àœŸÙt)Š¦C´žêþï×éV¿@‡É(Ø?¢B¥E©�íË2c	Óè}ŸC(ç?Ã†	îók�b§ãL	—kÚXö�	uK:±£ähmùß;’˜Î®ô™Rêp XËUqÊô÷Ÿg*=d•¬‡Gx�ScÁ�I«]&d¸à`1ÛðUò:ãäÜØÚ"=]h²°jÕ°.�Ö�HI=¬‡ì?…CÍê¦NîºNéWá7¸+I
+ë™>“Í/sŽšûi>Œ’“i4½!¤|!ÉšêäŒ¿>À²'pÕÛìn‡A6žK8ºy½¥~W'‹·ëheb’!÷«4Æ(s·L‹®Î·ø§¶¯`orfãa
ëöÎZFŠAGÚO©Ù='ËBLèE[ºÄB&$ÒRn¬/öa�¨ÿºkÝ~|-ý"ºÔ!Ãþú,9y%€É’Ú?õõüVêF›óKô&†TtE'¢m8Jœs‡ÝClO™²ˆU„›êŠ¢"âdS#�†ÓïèDÑÜw«VƒùÕMZ¶b&jžiÏÛ«’ÍB¿Å´Ý¢@V[(÷çúpôº]ÙÀ€¶Ä)mX@MŠmzÍtïÅcçÙ9‹ìl2$6ª�[ nžîµåH ÂP	�‘Ga€üâ%#»‚U•8Ýyó•t×éòšjj�³Š¼1Æ�=rªu<±Ô:ÍþGo�×nX~ržU:;vŸ±ð¸Q×A&$= ‡_ôÿÓ·tÑÇãÜVþ{g³4Äg,¸ŽG×¥�ö4���‰û¶‘è¸õ5£¾\â5Ž£åãÔƒ¯ñÃÂÈ%Ø½n";–î°ÈÿžSO}ÂÈìM(móÞ1á…û\«¢Õv¨·›´pÂ´Ï³\S_/«Zá{ý†ãÇOzæËf¼T•/—­ùg(ÒÊ¹8¦2H±þ…Üò1D%š\˜0½ß¤zÆEZ3ÐL¢R§EéW
+5;ÎyG:Ûe‰n‰^J<wÐö!N‹
•ÇÅö²üÏs'ÌƒXob×¬¬O1PI†o+íDþ¶ÕÜ<�iÕâN¼9î‘ÊLŽ­;ô)F¡r{]›ögßÖ#y8
<Y.*¨ÜcV°ý™™X„p¤qQ÷ ùNJˆ.¥Àètš^ÇFßhÝÝÊÎ a»
¦KþÖ{ð�£	¾œ2g`¡À­†¿á0¼�ctÈ€x“‚­ÿøz¨©Óål?fTƒ[®cuƒ)€¿SRÕDï¥l7 ³?ßYš3¤·–aqÅ*”§^ý_—ñ2$`}à;ÉËëçùëI/ób)oÓúƒ¡8ŒÛ&å!˜­U6¼ h\ºE¦o²òpÖNí>d�û¬�ýû`0ÅDX øw³v´®^v˜‹Á«¡`®ä&¦úÒÐ' M-¶!|óŒuRÞîï’äÞšT*J77sÎÉò99új¾	¦>y@Ì„„¢Ôœø#;Ã¥™dsAr=	Œ9q\¯B€/æÉü¸Òµ £Pœ…6Q�
Ò¾®F|?|{1ZHØvåSífuóêÇ[‰D~›Tˆ-:3Ñû€áæ,¹ÎÄ®m©oAü²„
©ujÏ©~¹ÖßËûâBw3xÛkð´õ<eÍï“<Y,YŒ§”Ìq§70’è
2ílÁ›»¿^Iñ¨ªµ�–W‚^UÇ“ðJ.ÌbÏVJ"½$
+2x–ie'¾�sDzD�DÄ�à�ô�žž0žDžXžlž€ž”ž¨ž¼žÐžäžøžŸ Ÿ4ŸHŸdŸxŸŒŸ Ÿ´ŸÈŸÜŸðŸ  4 H \ x œ ¸ Ì à ô ¡$¡8¡L¡`¡|¡�¡¤¡¸¡Ì¡à¡ô¡¢¢0¢L¢h¢|¢�¢´¢È¢Ü¢ð¢££,£H£d£€£”£¨£¼£Ð£ä£ø£¤ ¤4¤H¤\¤p¤„¤˜¤¬¤À¤Ô¤è¤ü¤¥4¥H¥\¥x¥Œ¥ ¥´¥È¥Ü¥ð¥¦¦,¦H¦d¦x¦”¦°¦Ì¦à¦ô¦§$§@§\§p§„§ §´§È§Ü§ð§¨¨,¨@¨\¨p¨„¨ ¨´¨Ð¨ä¨ø¨© ©4©H©\©p©„©˜©Ä©à©ü©ª,ª@ªTªhª|ª�ª¤ª¸ªÌªàªôª««0«D«X«l«€«œ«°«Ä«Ø«ì«¬¬(¬<¬P¬l¬€¬”¬°¬Ô¬ð¬­­,­@­\­p­„­˜­´­È­Ü­ð­®®,®@®T®h®„® ®´®È®ì®¯¯(¯<¯P¯d¯€¯œ¯¸¯Ì¯à¯ô¯°°0°D°X°l°€°”°¨°¼°Ð°ä°ø°± ±4±P±l±€±”±°±Ä±Ø±ì±²²(²<²P²d²€²œ²°²Ì²è²³³,³H³\³x³”³¨³¼³Ø³ì³´´(´<´P´d´x´”´¨´¼´Ø´ì´µµ0µDµXµlµ€µ”µ¨µ¼µÐµüµ¶ˆDÿÿÿÿªD"ÿÿÿÿàD ÿÿÿÿE ÿÿÿÿTEÿÿÿÿŠE ÿÿÿÿ±E5ÿÿÿÿíE%ÿÿÿÿF)ÿÿÿÿIF(ÿÿÿÿxF/ÿÿÿÿ®FÿÿÿÿÊF'ÿÿÿÿøFÿÿÿÿ0G-ÿÿÿÿ^Gÿÿÿÿ{G7ÿÿÿÿ´GÿÿÿÿßG ÿÿÿÿH%ÿÿÿÿDHÿÿÿÿxH*ÿÿÿÿ£H.ÿÿÿÿÓH)1ÿÿÿÿ-I%ÿÿÿÿSI9ÿÿÿÿ�I
+2ÿÿÿÿÉI"ÿÿÿÿýI3ÿÿÿÿ1JÿÿÿÿXJ9ÿÿÿÿ¨J%ÿÿÿÿÛJ
+Hÿÿÿÿ/K
+/ÿÿÿÿ†K)ÿÿÿÿÇK
+6ÿÿÿÿL
+>ÿÿÿÿOL
+0ÿÿÿÿ‰L
+FÿÿÿÿÙL
+ÿÿÿÿM
++ÿÿÿÿPM
+ÿÿÿÿxM
+"ÿÿÿÿ¤M@)ÿÿÿÿN
+/ÿÿÿÿLN
+ ÿÿÿÿvN-ÿÿÿÿ½N6ÿÿÿÿ	O6ÿÿÿÿTO
+7ÿÿÿÿ•O
+?ÿÿÿÿÞO
+ÿÿÿÿP4ÿÿÿÿPP+ÿÿÿÿˆP-ÿÿÿÿÂP3ÿÿÿÿöP0ÿÿÿÿ=Q 0ÿÿÿÿ½Q
+-ÿÿÿÿôQ(ÿÿÿÿ0R
+-ÿÿÿÿgRÿÿÿÿ™R6ÿÿÿÿÖR>ÿÿÿÿS#ÿÿÿÿFSÿÿÿÿ‚Sÿÿÿÿ¾S
+2ÿÿÿÿúS
+.ÿÿÿÿ2TFÿÿÿÿyT
+2ÿÿÿÿµT
+2ÿÿÿÿñT
+2ÿÿÿÿ-U
+2ÿÿÿÿiU
+2ÿÿÿÿ¥U
+2ÿÿÿÿáUFÿÿÿÿ(V
+9ÿÿÿÿkV
+7ÿÿÿÿ¬V
+9ÿÿÿÿïVFÿÿÿÿ6WFÿÿÿÿ}W	2ÿÿÿÿ¸W+ÿÿÿÿêW.ÿÿÿÿX+ÿÿÿÿQX-ÿÿÿÿ†X0ÿÿÿÿÔX"ÿÿÿÿY!ÿÿÿÿFY
+*ÿÿÿÿ|Y
+AÿÿÿÿÇY
+dÿÿÿÿ5Z
+$ÿÿÿÿcZ1ÿÿÿÿŸZ1ÿÿÿÿÑZ
+ÿÿÿÿîZ5ÿÿÿÿ<[&ÿÿÿÿp[=ÿÿÿÿÀ[&ÿÿÿÿ\+ÿÿÿÿS\ÿÿÿÿ‡\]ÿÿÿÿô\!5ÿÿÿÿK]
+ÿÿÿÿ†]KÿÿÿÿÒ]<"ÿÿÿÿ0^
+ÿÿÿÿZ^$ÿÿÿÿ“^ÿÿÿÿÛ^;ÿÿÿÿC_?ÿÿÿÿ¡_ÿÿÿÿÊ_2ÿÿÿÿ`ÿÿÿÿ5`ÿÿÿÿg`=ÿÿÿÿ¶`Iÿÿÿÿa(ÿÿÿÿWaIÿÿÿÿºa!ÿÿÿÿða!ÿÿÿÿ bÿÿÿÿQb+ÿÿÿÿ~b=ÿÿÿÿ¼b+ ÿÿÿÿ	c5ÿÿÿÿ?c@ÿÿÿÿ„c
+%ÿÿÿÿ³c
+%ÿÿÿÿâc7ÿÿÿÿd-ÿÿÿÿHdÿÿÿÿed<ÿÿÿÿ°d-ÿÿÿÿíd(�ÿÿÿÿ¢e
+.ÿÿÿÿÚe
ÿÿÿÿée
+"	ÿÿÿÿ<fB#$ÿÿÿÿÅf#&ÿÿÿÿg2ÿÿÿÿGg6EÿÿÿÿÂg&+ÿÿÿÿh70ÿÿÿÿzh*&ÿÿÿÿÊhJÿÿÿÿijÿÿÿÿŒicÿÿÿÿöigÿÿÿÿdjVÿÿÿÿÁjmÿÿÿÿ5kDÿÿÿÿ€k‡ÿÿÿÿl+'ÿÿÿÿ`lSÿÿÿÿ´lDÿÿÿÿùlvÿÿÿÿqm>ÿÿÿÿÊm9ÿÿÿÿn'?ÿÿÿÿ{nI/ÿÿÿÿónMÿÿÿÿAo_ÿÿÿÿ¢oLDÿÿÿÿ2plÿÿÿÿŸp�ÿÿÿÿ=q
+Tÿÿÿÿ›q>ÿÿÿÿøqlÿÿÿÿerÿÿÿÿ£r~ÿÿÿÿ9sKÿÿÿÿ¢s
+uÿÿÿÿ#t
++Mÿÿÿÿ§tX#ÿÿÿÿ$u
+Rÿÿÿÿ€u
+fÿÿÿÿðu
+qÿÿÿÿkv
+}ÿÿÿÿòv
+F<ÿÿÿÿ~w
+?ÿÿÿÿÇw
+Bÿÿÿÿx
+Kÿÿÿÿhx£dÿÿÿÿuy
+QÿÿÿÿÐy
+=ÿÿÿÿz'\ÿÿÿÿšz\/ÿÿÿÿ%{\!ÿÿÿÿ¢{
+aÿÿÿÿ
|
+Àÿÿÿÿ×|
+5ÿÿÿÿ}C9ÿÿÿÿ’}mÿÿÿÿ~bÿÿÿÿ¡~cÿÿÿÿh)ÿÿÿÿ—<H(kÿÿÿÿ®€
+Oÿÿÿÿ�Dÿÿÿÿ`�
+Rÿÿÿÿ¼�(;ÿÿÿÿ‚kÿÿÿÿ‘‚Äÿÿÿÿ\ƒWÿÿÿÿ»ƒE$ÿÿÿÿ+„E$ÿÿÿÿ›„
+¨ÿÿÿÿM…
+Mÿÿÿÿ¤…rÿÿÿÿ†
+Pÿÿÿÿq†
+PÿÿÿÿË†
+Pÿÿÿÿ%‡
+Pÿÿÿÿ‡
+PÿÿÿÿÙ‡
+Pÿÿÿÿ3ˆrÿÿÿÿ¦ˆ
+Wÿÿÿÿ‰
+Uÿÿÿÿf‰
+WÿÿÿÿÇ‰rÿÿÿÿ:Šrÿÿÿÿ­Š	Tÿÿÿÿ
+‹_ÿÿÿÿp‹cÿÿÿÿÚ‹Yÿÿÿÿ:Œ`ÿÿÿÿ¢Œ3Tÿÿÿÿ*�3>ÿÿÿÿ›�@ÿÿÿÿò�
+WÿÿÿÿUŽ
+‰ÿÿÿÿèŽ
+»ÿÿÿÿ­�
+Rÿÿÿÿ	�mÿÿÿÿ��jÿÿÿÿì�
+)ÿÿÿÿ‘K„ÿÿÿÿî‘JÿÿÿÿF’uÿÿÿÿ×’\1ÿÿÿÿt“PÿÿÿÿÚ“"HÿÿÿÿD”ã ÿÿÿÿH•0hÿÿÿÿâ•
+B#ÿÿÿÿQ–ƒÿÿÿÿÕ–lpÿÿÿÿ±—
+)ÿÿÿÿ˜'Kÿÿÿÿt˜P$ÿÿÿÿ™9rÿÿÿÿÊ™=|ÿÿÿÿƒš6ÿÿÿÿÄšUÿÿÿÿ(›%Dÿÿÿÿ‘›(;ÿÿÿÿô›vÿÿÿÿ…œ�ÿÿÿÿ@�Pÿÿÿÿ¯�"�ÿÿÿÿnž$XÿÿÿÿêžXÿÿÿÿVŸ4ÿÿÿÿªŸMÿÿÿÿùŸZÿÿÿÿT a.ÿÿÿÿå wÿÿÿÿ]¡ƒÿÿÿÿå¡
+@ÿÿÿÿ/¢
+[ÿÿÿÿ”¢€ÿÿÿÿ£Tÿÿÿÿj£ ÿÿÿÿ™£w ÿÿÿÿ0¤ ]ÿÿÿÿ­¤‹ìÿÿÿÿ$¦
+Nÿÿÿÿ|¦ÿÿÿÿš¦
+49ÿÿÿÿ'§vA*ÿÿÿÿ¨F4ÿÿÿÿ	    TLS: %pA	<corrupt: 0x%04lx>	Export Address Table 			Export Address Table 		%08lx
 	Invalid Export Address Table rva (0x%lx) or entry count (0x%lx)
 	Invalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)
 	Invalid Ordinal Table rva (0x%lx) or entry count (0x%lx)
 	Name Pointer Table 			Ordinal Table 				[%4ld] <corrupt offset: %lx>
 	[Name Pointer/Ordinal] Table	%08lx
-	code-base %08lx toc (loadable/actual) %08lx/%08lx
 	non-TLS: %pA	reloc %4d offset %4x [%4lx] %s	vma:  Hint/Ord Member-Name Bound-To
 
 
@@ -165,10 +186,6 @@ Exec Auxiliary Header
 
 Export Address Table -- Ordinal Base %ld
 
-Function descriptor located at the start address: %04lx
-
-No reldata section! Function descriptor not decoded.
-
 Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Program Header:
@@ -195,12 +212,10 @@ There is a first thunk, but the section
 
 There is an export table in %s at 0x%lx
 
-There is an export table in %s, but it does not fit into that section
+There is an export table in %s, but contents cannot be read
 
 There is an export table in %s, but it is too small (%d)
 
-There is an export table in %s, but that section has no contents
-
 There is an export table, but the section containing it could not be found
 
 There is an import table in %s at 0x%lx
@@ -236,7 +251,8 @@ ppcboot header:
     psect idx 3: %u, offset 3: 0x%08x %08x
     psect: %u, offset: 0x%08x %08x
     routine name: %.*s
-   %02u    (type: %3u, size: 4+%3u):    *unhandled* cmd %u
+   %02u    (type: %3u, size: %3u):    *unhandled* cmd %u
+   Erroneous length
    Error: The compile date is truncated
    Error: The length is less than the length of an EEOM record
    Error: The length is less than the length of an EMH record
@@ -245,7 +261,6 @@ ppcboot header:
    Error: The module version is missing
    Error: The module version is too long
    Error: The record length is less than the size of an EMH_MHD record
-   Error: length larger than remaining space in record
    alignment  : 2**%u
    alloc (len)   : %u (0x%08x)
    alloc (len): %u (0x%08x)
@@ -311,25 +326,13 @@ ppcboot header:
    vector      : 0x%08x
    version mask: 0x%08x
    version:    %x
-  %s (len=%u+%u):
+  %s (len=%u):
   %u: size: %u, flags: 0x%02x, name: %.*s
   EEOM (len=%u):
   EGSD (len=%u):
   EGSD entry %2u (type: %u, len: %u):   EMH %u (len=%u):   base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x   base_va : 0x%08x
   bitcount: %u, base addr: 0x%08x
-  branch         %lu
-  branch toc adj %lu
-  branch notoc   %lu
-  branch both    %lu
-  long branch    %lu
-  long toc adj   %lu
-  long notoc     %lu
-  long both      %lu
-  plt call       %lu
-  plt call save  %lu
-  plt call notoc %lu
-  plt call both  %lu
-  global entry   %lu  calls:
+  calls:
   chgprtoff : %5u
   codeadroff: %5u, lpfixoff  : %5u
   fixuplnk: 0x%08x %08x
@@ -345,22 +348,22 @@ ppcboot header:
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   size : %u
-  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> BPAGE: %u COM COMM Change Protection (%u entries):
+  the input  file's flags: %s  the output file's flags: %s %08x (<unknown>) 0x%08x 64B <EABI version unrecognised> <Unrecognised flag bits set> BPAGE: %u COM COMM Change Protection (%u entries):
  Code Address Reference Fixups:
  DEF EXE FPU support required:  First address : 0x%08x 0x%08x
  Fourth address: 0x%08x 0x%08x
- GBL Glue code sequence LIB Linkage Pairs Reference Fixups:
+ GBL LIB Linkage Pairs Reference Fixups:
  MACH-O header:
- NOMOD NORM OVR PIC QVAL RD REL Register restore millicode Register save millicode Resources start at offset: %#03x
+ NOMOD NORM OVR PIC QVAL RD REL Resources start at offset: %#03x
  SHR Second address: 0x%08x 0x%08x
  Shareable images:
  Shared image  : 0x%08x 0x%08x
  String table starts at offset: %#03x
  Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d
  Third address : 0x%08x 0x%08x
- UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [FDPIC ABI supplement] [FPA float format] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [g-float] [hard-float ABI] [interworking enabled] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] alignment of 8-byte entities:  corrupted GST
- debug module table : vbn: %u, size: %u
+ UNI VEC VECEP WEAK WRT [64-bit doubles] [BE8] [FDPIC ABI supplement] [FPA float format] [LE8] [Maverick float format] [VFP float format] [Version1 EABI] [Version2 EABI] [Version3 EABI] [Version4 EABI] [Version5 EABI] [XGATE RAM offsetting] [abi unknown] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [dynamic symbols use segment index] [fix dep] [floats passed in float registers] [g-float] [hard-float ABI] [interworking enabled] [mapping symbols precede others] [memory=bank-model] [memory=flat] [new ABI] [no abi set] [nonpic] [not 32bitmode] [old ABI] [pic] [position independent] [relocatable executable] [soft-float ABI] [software FP] [sorted symbol table] [symbols have a _ prefix] [unknown ISA] [unsorted symbol table] [v10 and v32] [v32] alignment of 8-byte entities:  debug module table : vbn: %u, size: %u
  debug symbol table : vbn: %u, size: %u (0x%x)
+ failed to convert GOTPCREL relocation against '%s'; relink with --no-relax
  fixup info rva:  flags: 0x%04x global symbol table: vbn: %u, records: %u
  ident: 0x%08x, name: %.*s
  ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u
@@ -386,35 +389,55 @@ ppcboot header:
      		Address  Length   Length   32b exc  Handler   Data
  vma:            Hint    Time      Forward  DLL       First
                  Table   Stamp     Chain    Name      Thunk
-#<invalid error code>%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
-%03x %*.s Entry: %C: warning: relocation to "%s" references a different segment
+#<invalid error code>%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC
+%%X%%P: unresolvable %s relocation against symbol `%s'
+%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d
+%03x %*.s Entry: %F%P: %pB(%pA): error: need linked-to section for --gc-sections
+%F%P: %pB(%s): error opening thin archive member: %E
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s'
+%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB
+%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap
+%F%P: %pB: failed to allocate compact relative reloc section
+%F%P: %pB: failed to allocate memory for section `%pA'
+%F%P: %pB: failed to allocate relative reloc record
+%F%P: %pB: failed to finish relative relocations
+%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed
+%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)
+%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.
+%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: auto overlay error: %E
 %F%P: can not build overlay stubs: %E
 %F%P: corrupt input: %pB
+%F%P: discarded output section: `%pA'
 %F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie
-%F%P: failed to convert GOTPCREL relocation; relink with --no-relax
-%F%P: failed to create BND PLT section
 %F%P: failed to create GNU property section
 %F%P: failed to create GOT PLT .eh_frame section
 %F%P: failed to create GOT PLT section
 %F%P: failed to create GOT sections
 %F%P: failed to create IBT-enabled PLT section
 %F%P: failed to create PLT .eh_frame section
+%F%P: failed to create PLT .sframe section
 %F%P: failed to create VxWorks dynamic sections
 %F%P: failed to create ifunc sections
+%F%P: failed to create second PLT .sframe section
 %F%P: failed to create the second PLT .eh_frame section
+%F%P: failed to size relative relocations
 %F%pA: failed to align section
 %F%pB: PC-relative offset overflow in GOT PLT entry for `%s'
 %F%pB: PC-relative offset overflow in PLT entry for `%s'
 %F%pB: branch displacement overflow in PLT entry for `%s'
 %H __tls_get_addr lost arg, TLS optimization disabled
 %H arg lost __tls_get_addr, TLS optimization disabled
+%H: %s against %pT is not supported
 %H: %s against `%pT': error %d
 %H: %s for indirect function `%pT' unsupported
+%H: %s out of range
 %H: %s references dynamic symbol with nonzero addend
 %H: %s references optimized away TOC entry
 %H: %s reloc against `%s': error %d
+%H: %s reloc unsupported here
 %H: %s reloc unsupported in shared libraries and PIEs
 %H: %s used with TLS symbol `%pT'
 %H: %s used with non-TLS symbol `%pT'
@@ -436,23 +459,26 @@ ppcboot header:
 %H: error: %s against `%s' not a multiple of %u
 %H: error: %s not a multiple of %u
 %H: fixup branch overflow
+%H: got/toc optimization is not supported for %s instruction
 %H: non-zero addend on %s reloc against `%s'
 %H: reloc against `%s' references a different segment
 %H: reloc against `%s': %s
 %H: relocation %s for indirect function %s unsupported
+%H: relocation %s returns an unrecognized value %x
 %H: relocation references symbol not defined in the module
 %H: relocation to `%s+%v' may have caused the error above
-%H: toc optimization is not supported for %s instruction
+%H: relocation type %u is not supported
 %H: unresolvable %s against `%pT'
 %H: unresolvable %s relocation against symbol `%s'
 %H: warning: %s unexpected insn %#x.
+%H: warning: relocation to "%s" references a different segment
 %P%F: --relax and -r may not be used together
 %P%X: can not read symbols: %E
-%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC
 %P%X: read-only segment has dynamic relocations
-%P: %H: %s relocation unsupported for bss-plt
 %P: %H: error: %s with unexpected instruction %x
 %P: %pB: %s is not supported for `%pT'
+%P: %pB: note: the message above does not take linker garbage collection into account
+%P: %pB: warning: missing %s
 %P: %pB: warning: relocation against `%s' in read-only section `%pA'
 %P: %pB: warning: relocation in read-only section `%pA'
 %P: cannot find opd entry toc for `%pT'
@@ -461,20 +487,32 @@ ppcboot header:
 %P: linkage table error against `%pT'
 %P: multiple entry points: in modules %pB and %pB
 %P: relocatable link is not supported
-%P: warning: creating a DT_TEXTREL in a shared object
+%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s
+%P: warning: creating DT_TEXTREL in a PDE
+%P: warning: creating DT_TEXTREL in a PIE
+%P: warning: creating DT_TEXTREL in a shared object
 %P: warning: text relocations and GNU indirect functions may result in a segfault at runtime
-%X%C: relocation to "%s" references a different segment
+%X%H: %s against `%s': error: relocation applies outside section
+%X%H: %s against `%s': error: relocation target address is odd
+%X%H: %s against `%s': internal error: unexpected relocation result %d
 %X%H: @local call to ifunc %s
 %X%H: cannot convert branch between ISA modes to JALX: relocation out of range
 %X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC
+%X%H: relocation to "%s" references a different segment
 %X%H: unsupported JALX to the same ISA mode
 %X%H: unsupported branch between ISA modes
 %X%H: unsupported bss-plt -fPIC ifunc %s
 %X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled
+%X%P: %H: %s relocation unsupported for bss-plt
 %X%P: %pB(%pA): error: relocation for offset %V has no value
 %X%P: %pB(%pA): relocation "%pR" goes out of range
 %X%P: %pB(%pA): relocation "%pR" is not supported
 %X%P: %pB(%pA): relocation "%pR" returns an unrecognized value %x
+%X%P: %pB(%pA): relocation is not supported
+%X%P: %pB(%pA): relocation out of range
+%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation
+%X%P: %pB: error: missing %s
+%X%P: attempted static link of dynamic object `%pB'
 %X%P: internal error: out of range error
 %X%P: internal error: unknown error
 %X%P: internal error: unsupported relocation error
@@ -485,22 +523,26 @@ ppcboot header:
 %X%P: stack/lrlive analysis error: %E
 %X%P: text relocations and GNU indirect functions will result in a segfault at runtime
 %X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB
-%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections%pA has both ordered and unordered sections%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
+%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)
 %pA:0x%v not found in function table
-%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
+%pB (%s): section flag %s (%#lx) ignored%pB .opd not allowed in ABI version %d%pB and %pB are for different configurations%pB and %pB are for different cores%pB contains CRIS v32 code, incompatible with previous objects%pB contains non-CRIS-v32 code, incompatible with previous objects%pB has both the current and legacy Tag_MPextension_use attributes%pB is not allowed to define %s%pB section %pA exceeds stub group size%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section%pB uses 64-bit long double, %pB uses 128-bit long double%pB uses AltiVec vector ABI, %pB uses SPE vector ABI%pB uses IBM long double, %pB uses IEEE long double%pB uses double-precision hard float, %pB uses single-precision hard float%pB uses hard float, %pB uses soft float%pB uses r3/r4 for small structure returns, %pB uses memory%pB uses unknown e_flags 0x%lx%pB(%pA): error: call to undefined function '%s'%pB(%pA): error: internal relocs missing for secondary reloc section%pB(%pA): error: reloc table entry %zu is empty%pB(%pA): error: secondary reloc %zu is of an unknown type%pB(%pA): error: secondary reloc %zu references a deleted symbol%pB(%pA): error: secondary reloc %zu references a missing symbol%pB(%pA): error: secondary reloc section has non-standard sized entries%pB(%pA): error: secondary reloc section has zero sized entries%pB(%pA): error: secondary reloc section is empty!%pB(%pA): error: secondary reloc section processed twice%pB(%pA): info section index cannot be set because the section is not in the output%pB(%pA): info section index is invalid%pB(%pA): internal error: dangerous relocation%pB(%pA): internal error: out of range error%pB(%pA): internal error: unknown error%pB(%pA): internal error: unsupported relocation error%pB(%pA): invalid property table%pB(%pA): link section cannot be set because the output file does not have a symbol table%pB(%pA): multiple TLS models are not supported%pB(%pA): relocation %d has invalid symbol index %ld%pB(%pA): relocation %zu has invalid symbol index %lu%pB(%pA): shared library symbol %s encountered whilst performing a static link%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction%pB(%pA): warning: unaligned access to symbol '%s' in the small data area%pB(%pA): warning: unaligned small data access of type %d%pB(%pA+%#lx): stabs entry has invalid string index%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete
 %pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s%pB, section %pA:
-  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s flag mismatch with previous modules%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
-  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: BE8 images only valid in big-endian mode%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS sections are not adjacent:%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: aout header specifies an invalid number of data-directory entries: %ld%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol definition: `Main' set to %s rather than the start address %s
-%pB: bad symbol index: %d%pB: base-plus-offset relocation against register symbol: %s in %pA%pB: base-plus-offset relocation against register symbol: (unknown) in %pA%pB: can not represent section `%pA' in a.out object file format%pB: can not represent section for symbol `%s' in a.out object file format%pB: can't link %s modules with %s modules%pB: can't link RVE with other target%pB: cannot allocate file name for file number %d, %d bytes
-%pB: cannot create stub entry %s%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
+  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC%pB, section %pA: no PLT for relocation %s against symbol `%s'%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?%pB, section %pA: relocation %s is not allowed for global symbol: `%s'%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC%pB, section %pA: relocation %s with no GOT created%pB, section %pA: unresolvable relocation %s against symbol `%s'%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC%pB: !samegp reloc against symbol without .prologue: %s%pB: %pA invalid input section size%pB: %pA not in order%pB: %pA points past end of text section%pB: %pA: reloc overflow: %#x > 0xffff%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB
+%pB: %s flag mismatch with previous modules%pB: %s local symbol at index %lu (>= sh_info of %lu)%pB: %s not absolute%pB: %s unsupported%pB: %s' accessed both as normal and thread local symbol%pB: %s: invalid needed version %d%pB: %s: invalid version %u (max %d)%pB: %s: reloc overflow: 0x%lx > 0xffff%pB: '%s' accessed both as normal and thread local symbol%pB: --in-implib only supported for Secure Gateway import libraries%pB: .gnu.version_d invalid entry%pB: .gnu.version_r invalid entry%pB: .got subsegment exceeds 64K (size %d)%pB: .opd is not a regular array of opd entries%pB: .preinit_array section is not allowed in DSO%pB: .rsrc merge failure: corrupt .rsrc section%pB: .rsrc merge failure: unexpected .rsrc size%pB: @gprel relocation against dynamic symbol %s%pB: @internal branch to dynamic symbol %s%pB: @pcrel relocation against dynamic symbol %s%pB: ABI is incompatible with that of the selected emulation%pB: ABI is incompatible with that of the selected emulation:
+  target emulation `%s' does not match `%s'%pB: ABI mismatch: linking %s module with previous %s modules%pB: ABI version %ld is not compatible with ABI version %ld output%pB: ASE mismatch: linking %s module with previous %s modules%pB: Adjusting branch at 0x%V towards "%s" in section %s
+%pB: BE8 images only valid in big-endian mode%pB: C_STAT isn't supported by XCOFF64%pB: Cannot create stub entry '%s'%pB: Cannot handle relocation value size of %d%pB: Function descriptor relocation with non-zero addend%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d%pB: GOT overflow: number of relocations with 8-bit offset > %d%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte%pB: Number of symbols in input file has increased from %lu to %u
+%pB: Relocations in generic ELF (EM: %d)%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections%pB: TLS local exec code cannot be linked into shared objects%pB: TLS relocation %s against undefined symbol `%s'%pB: TLS sections are not adjacent:%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead.%pB: XCOFF shared object when not producing XCOFF output%pB: __gp does not cover short data segment%pB: `%s' accessed both as FDPIC and thread local symbol%pB: `%s' accessed both as normal and FDPIC symbol%pB: `%s' accessed both as normal and thread local symbol%pB: `%s' and its special symbol are in different sections%pB: `%s' has line numbers but no enclosing section%pB: `%s' in loader reloc but not loader sym%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)%pB: absent standard symbol `%s'%pB: addend should be zero for got relocations%pB: addend should be zero for plt relocations%pB: adjusting invalid FileAlignment%pB: adjusting invalid SectionAlignment%pB: architecture mismatch with previous modules%pB: attempt to load strings from a non-string section (number %d)%pB: attempt to mix FDPIC and non-FDPIC objects%pB: attempt to write out unknown reloc type%pB: bad relocation record imported: %d%pB: bad relocation section name `%s'%pB: bad section length in ihex_read_section%pB: bad symbol index: %d%pB: base-plus-offset relocation against register symbol: %s in %pA%pB: base-plus-offset relocation against register symbol: (unknown) in %pA%pB: can not represent section `%pA' in a.out object file format%pB: can not represent section for symbol `%s' in a.out object file format%pB: can't link %s modules with %s modules%pB: can't link RVE with other target%pB: can't link different ABI object.%pB: cannot allocate file name for file number %d, %d bytes
+%pB: cannot allocate memory for local GOT entries%pB: cannot create stub entry %s%pB: cannot export internal symbol `%s`.%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries%pB: cannot link fdpic object file into non-fdpic executable%pB: cannot link non-fdpic object file into fdpic executable%pB: cannot link together %s and %s objects%pB: change in gp: BRSGP %s%pB: class %d symbol `%s' has no aux entries%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s%pB: compiled for a 64 bit system and target is 32 bit%pB: compiled for a big endian system and target is little endian%pB: compiled for a little endian system and target is big endian%pB: compiled normally and linked with modules compiled with -mrelocatable%pB: compiled with %s and linked with modules compiled with %s%pB: compiled with %s and linked with modules that use non-pic relocations%pB: compiled with -mrelocatable and linked with modules compiled normally%pB: conditional branch to undefined symbol `%s' not allowed%pB: could not find output section %pA for input section %pA%pB: could not read contents of section `%pA'
 %pB: csect `%s' not in enclosing section%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object%pB: directive LOCAL valid only with a register or absolute value%pB: dtp-relative relocation against dynamic symbol %s%pB: duplicate export stub %s%pB: duplicate section `%pA' has different contents
 %pB: duplicate section `%pA' has different size
 %pB: dynamic object with no .loader section%pB: dynamic relocation against `%pT' in read-only section `%pA'
+%pB: dynamic relocation against a local symbol in read-only section `%pA'
 %pB: dynamic relocation in read-only section `%pA'
-%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
+%pB: endianness incompatible with that of the selected emulation%pB: entry function `%s' is empty%pB: entry function `%s' not output%pB: error: ABI mismatch with previous modules%pB: error: Cortex-A8 erratum stub is allocated in unsafe location%pB: error: Cortex-A8 erratum stub out of range (input file too large)%pB: error: PHDR segment not covered by LOAD segment%pB: error: VFP11 veneer out of range%pB: error: alignment power %d of section `%pA' is too big%pB: error: attribute section '%pA' too big: %#llx%pB: error: attribute section length too small: %ld%pB: error: cannot create STM32L4XX veneer%pB: error: debug data ends beyond end of debug directory%pB: error: erratum 835769 stub out of range (input file too large)%pB: error: erratum 843419 stub out of range (input file too large)%pB: error: instruction set mismatch with previous modules%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file%pB: error: non-load segment %d includes file header and/or program header%pB: error: search_nds32_elf_blank reports wrong node%pB: error: unexpected symbol '%s' in COMDAT section%pB: error: unknown mandatory EABI object attribute %d%pB: expected symbol index in range 0..%lu but found local symbol with index %lu%pB: failed to find info section for section %d%pB: failed to find link section for section %d%pB: failed to generate import library%pB: failed to read debug data section%pB: fatal: generic symbols retrieved before relaxing%pB: file class %s incompatible with %s%pB: gotoff relocation against dynamic symbol %s%pB: gp-relative relocation against dynamic symbol %s%pB: group section '%pA' has no contents%pB: hidden symbol `%s' in %pB is referenced by DSO%pB: hidden symbol `%s' isn't defined%pB: ignoring duplicate section `%pA'
 %pB: illegal section name `%pA'%pB: illegal symbol index %ld in relocs%pB: incompatible machine type; output is 0x%x; input is 0x%x%pB: incorrect size for symbol `%s'%pB: indirect symbol `%s' to `%s' is a loop%pB: instruction set mismatch with previous modules%pB: internal error in ihex_read_section%pB: internal error, internal register section %pA had contents
 %pB: internal error, symbol table changed size from %d to %d words
-%pB: internal symbol `%s' in %pB is referenced by DSO%pB: internal symbol `%s' isn't defined%pB: invalid entry in SHT_GROUP section [%u]%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions%pB: invalid link %u for reloc section %s (index %u)%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
+%pB: internal symbol `%s' in %pB is referenced by DSO%pB: internal symbol `%s' isn't defined%pB: invalid NumberOfRvaAndSizes%pB: invalid entry in SHT_GROUP section [%u]%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions%pB: invalid link %u for reloc section %s (index %u)%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)
 %pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote
 %pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx
 %pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo
@@ -514,15 +556,19 @@ ppcboot header:
 %pB: invalid mmo file: lop_end not last item in file
 %pB: invalid mmo file: unsupported lopcode `%d'
 %pB: invalid sh_link field (%d) in section number %d%pB: invalid special symbol `%s'; it must be a global or weak function symbol%pB: invalid standard symbol `%s'; it must be a global or weak function symbol%pB: invalid symbol table: duplicate symbol `%s'
-%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no core to allocate section name %s%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
-%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: page size is too large (0x%x)%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to create fake empty section%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to initialize compress status for section %s%pB: unable to initialize decompress status for section %s%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type: %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
-%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number count (%#lx) exceeds section size (%#lx)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: sh_link not set for section `%pA'%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
-%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: will not resolve runtime TLS relocation%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
-%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%s defined on removed toc entry%s duplicated
+%pB: invalid version offset %lx (max %lx)%pB: line number overflow: 0x%lx > 0xffff%pB: linking %s module with previous %s modules%pB: linking 32-bit code with 64-bit code%pB: linking 64-bit files with 32-bit files%pB: linking UltraSPARC specific with HAL specific code%pB: linking auto-pic files with non-auto-pic files%pB: linking big-endian files with little-endian files%pB: linking constant-gp files with non-constant-gp files%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double%pB: linking files compiled for HCS12 with others compiled for HC12%pB: linking little endian files with big endian files%pB: linking non-pic code in a position independent executable%pB: linking trap-on-NULL-dereference with non-trapping files%pB: loader reloc in read-only section %pA%pB: loader reloc in unrecognized section `%s'%pB: local symbol `%s' in %pB is referenced by DSO%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol%pB: machine flag conflict with target%pB: malformed reloc detected for section %pA%pB: malformed reloc detected for section %s%pB: misplaced XTY_LD `%s'%pB: nested OMIT_FP in %pA%pB: no core to allocate a symbol %d bytes long%pB: no group info for section '%pA'%pB: no initialized registers; section length 0
+%pB: no symbol found for import library%pB: no symbol version section for versioned symbol `%s'%pB: no valid group sections found%pB: non-canonical reference to canonical protected function `%s' in %pB%pB: non-pic code with imm relocation against dynamic symbol `%s'%pB: non-pic relocation against symbol %s%pB: not enough room for program headers, try linking with -N%pB: not enough version information%pB: only registers %%g[2367] can be declared using STT_REGISTER%pB: out of memory creating name for empty section%pB: out of memory in _bfd_elf_get_property%pB: overflow reloc count too small%pB: pc-relative relocation against dynamic symbol %s%pB: pc-relative relocation against undefined weak symbol %s%pB: plugin needed to handle lto object%pB: probably compiled without -fPIC?%pB: protected symbol `%s' isn't defined%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive%pB: register relocation against non-register symbol: %s in %pA%pB: register relocation against non-register symbol: (unknown) in %pA%pB: reloc %#x unsupported%pB: reloc against a non-existent symbol index: %ld%pB: relocatable link from %s to %s not supported%pB: relocation %s against %s%s`%s' can not be used when making %s%s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported%pB: relocation %s against `%s' can not be used when making a shared object%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object%pB: relocation %s against symbol `%s' isn't supported in x32 mode%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC%pB: relocation %s can not be used when making a shared object; recompile with -fPIC%pB: relocation %s cannot be used when making a shared object%pB: relocation %s overflow 0x%lx%pB: relocation %s right shift %d error 0x%lx%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object%pB: relocation size mismatch in %pB section %pA%pB: relocations in generic ELF (EM: %d)%pB: relocs in section `%pA', but it has no contents%pB: section %pA: string table overflow at offset %ld%pB: section %s is compressed with zstd, but BFD is not built with zstd support%pB: section '%pA': corrupt VTENTRY entry%pB: section `%pA' can't be allocated in segment %d%pB: section group entry number %u is corrupt%pB: sh_link [%d] in section `%pA' is incorrect%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'%pB: size field is zero in Import Library Format header%pB: special symbol `%s' only allowed for ARMv8-M architecture or later%pB: speculation fixup to dynamic symbol %s%pB: stack size specified and %s set%pB: string not null terminated in ILF object file%pB: support for local dynamic not implemented%pB: symbol `%s' has unrecognized csect type %d%pB: symbol `%s' has unrecognized smclas %d%pB: symbol `%s' required but not present%pB: symbol indicates overlay (not supported)%pB: symbol name exceeds given max length of %d%pB: taking the address of protected function '%s' cannot be done when making a shared library%pB: the target (%s) of a %s relocation is in the wrong output section (%s)%pB: the target (%s) of an %s relocation is in the wrong section (%pA)%pB: too many sections (%d)%pB: too many sections: %d (>= %d)%pB: too many sections: %u%pB: tp-relative relocation against dynamic symbol %s%pB: unable to compress section %s%pB: unable to create fake empty section%pB: unable to decompress section %s%pB: unable to fill in DataDictionary[12] because .idata$5 is missing%pB: unable to fill in DataDictionary[1] because .idata$2 is missing%pB: unable to fill in DataDictionary[1] because .idata$4 is missing%pB: unable to fill in DataDictionary[9] because __tls_used is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing%pB: unable to find %s veneer `%s'%pB: unable to find name for empty section%pB: unable to get decompressed section %pA%pB: unable to load COMDAT section name%pB: unable to sort relocs - they are in more than one size%pB: unable to sort relocs - they are of an unknown size%pB: undefined reference to symbol '%s'%pB: undefined sym `%s' in .opd section%pB: undefined symbol on R_PPC64_TOCSAVE relocation%pB: unexpected redefinition of indirect versioned symbol `%s'%pB: unexpected reloc type %u in .opd section%pB: unhandled dynamic relocation against %s%pB: unhandled import type; %x%pB: unhandled sparc machine value '%lu' detected during write processing%pB: unknown architecture %s%pB: unknown load command %#x%pB: unknown mandatory ARC object attribute %d%pB: unknown mandatory EABI object attribute %d%pB: unknown relocation type %d%pB: unknown type [%#x] section `%s'%pB: unknown type [%#x] section `%s' in group [%pA]%pB: unmatched OMIT_FP in %pA%pB: unrecognised machine type (0x%x) in Import Library Format archive%pB: unrecognized import name type; %x%pB: unrecognized import type; %x%pB: unrecognized relocation type %#x in section `%pA'%pB: unrecognized storage class %d for %s symbol `%s'%pB: unsupported AOUT relocation size: %d%pB: unsupported arch %#x%pB: unsupported bfd mach %#lx%pB: unsupported bfd relocation type %#x%pB: unsupported mach %#x%pB: unsupported non-PIC call to IFUNC `%s'%pB: unsupported relocation type%pB: unsupported relocation type %#x%pB: unsupported relocation type %s%pB: unsupported relocation type exported: %#x%pB: unsupported relocation type imported: %#x%pB: unsupported relocation type: %#x%pB: unsupported swap_aux_in for storage class %#x%pB: unsupported swap_aux_out for storage class %#x%pB: unsupported transition from %s to %s%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'
+%pB: uses %s instructions while previous modules use %s instructions%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols%pB: uses different e_flags (%#x) fields than previous modules (%#x)%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)%pB: uses instructions which are incompatible with instructions used in previous modules%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols%pB: version node not found for symbol %s%pB: visibility of symbol `%s' has changed%pB: warning core file truncated%pB: warning: %pA: line number overflow: %#x > 0xffff%pB: warning: %s BLX instruction targets %s function '%s'%pB: warning: %s relocation against symbol `%s' from %pA section%pB: warning: %s unsupported in shared mode%pB: warning: %s: line number overflow: 0x%lx > 0xffff%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section.%pB: warning: COMDAT symbol '%s' does not match section name '%s'%pB: warning: RVE PLT generation not supported%pB: warning: R_RISCV_SUB_ULEB128 with non-zero addend, please rebuild by binutils 2.42 or up%pB: warning: Weak TLS is implementation defined and may not work as expected%pB: warning: allocated section `%s' not in segment%pB: warning: bad `%s' option size %u smaller than its header%pB: warning: cannot determine the target function for stub section `%s'%pB: warning: claims to have 0xffff relocs, without overflow%pB: warning: duplicate line number information for `%s'%pB: warning: endian mismatch with previous modules%pB: warning: ignoring section flag %s in section %s%pB: warning: illegal symbol in line number entry %d%pB: warning: illegal symbol index %ld in relocs%pB: warning: illegal symbol index 0x%lx in line number entry %d%pB: warning: incompatible elf-versions %s and %s%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)%pB: warning: line number table read failed%pB: warning: linking PIC files with non-PIC files%pB: warning: linking abicalls files with non-abicalls files%pB: warning: loop in section dependencies detected%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u%pB: warning: multiple symbol tables detected - ignoring the table in section %u%pB: warning: no symbol for section '%s' found%pB: warning: older version of object file encountered, please recompile with current tool chain%pB: warning: relocate SDA_BASE failed%pB: warning: secondary relocation section '%s' for section %pA found - ignoring%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.
+%pB: warning: thumb-1 mode PLT generation not currently supported%pB: warning: truncated `%s' option%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment%pB: warning: unaligned access to GOT entry%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)%pB: warning: unknown EABI object attribute %d%pB: warning: win32pstatus %s of size %lu bytes is too small%pB: will not resolve runtime TLS relocation%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u%pB: wrong auxtype %#x for storage class %#x%pB:%.8s: RVA truncated%pB:%.8s: section below image base%pB:%d: bad checksum in S-record file%pB:%d: byte count %d too small%pB:%d: unexpected character `%s' in Intel Hex file%pB:%d: unexpected character `%s' in S-record file%pB:%pA%s exceeds overlay size
+%pB:%pA: %s and %s must be in the same input section%pB:%pA: error: attempting to write over the end of the section%pB:%pA: error: attempting to write section into an empty buffer%pB:%pA: error: relocation references symbol %s which was removed by garbage collection%pB:%pA: error: try relinking with --gc-keep-exported enabled%pB:%pA: table %s missing corresponding %s%pB:%pA: table entry %s not word-aligned within table%pB:%pA: table entry %s outside table%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s%pB:%s has both normal and TLS relocs%pB:%s section %s: alignment 2**%u not representable%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)%pB:%u: bad extended address record length in Intel Hex file%pB:%u: bad extended linear address record length in Intel Hex file%pB:%u: bad extended linear start address length in Intel Hex file%pB:%u: bad extended start address length in Intel Hex file%pB:%u: unrecognized ihex type %u in Intel Hex file%pB[%pA]: no output section for space %pA%pcrel_lo missing matching %pcrel_hi%pcrel_lo overflow with an addend%pcrel_lo section symbol with an addend%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20%s defined on removed toc entry%s divide by zero%s duplicated
 %s duplicated in %s
-%s has both normal and TLS relocs%s in overlay section%s not defined in linker created %pA%s not implemented%s offset too large for .eh_frame sdata4 encoding%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA%s: TLS reference in %pB mismatches non-TLS reference in %pB%s: no such symbol%s: not implemented%s: not supported%s: undefined version: %s(at bit offset %u)
+%s has both normal and TLS relocs%s in overlay section%s is defined but could not be loaded: %s%s is defined but plugin support is disabled%s is loaded but symbol "%s" is not found: %s%s not defined in linker created %pA%s not implemented%s offset too large for .eh_frame sdata4 encoding%s, iter %u
+  branch         %lu
+  long branch    %lu
+  plt call       %lu
+  global entry   %lu%s: Bad ELF id: `%d'%s: ISA string cannot contain uppercase letters%s: ISA string must begin with rv32 or rv64%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA%s: TLS reference in %pB mismatches non-TLS reference in %pB%s: compiled as 32-bit object and %s is 64-bit%s: compiled as 64-bit object and %s is 32-bit%s: first ISA extension must be `e', `i' or `g'%s: invalid prefixed ISA extension `%s' ends with <number>p%s: no such symbol%s: not implemented%s: not supported%s: object size does not match that of target %s%s: prefixed ISA extension must separate with _%s: undefined version: %s%s: unknown prefixed ISA extension `%s'%s: unknown standard ISA extension or prefix class `%c'(at bit offset %u)
 (descriptor)
-(format %c%c%c%c signature %s age %ld)
+(format %c%c%c%c signature %s age %ld pdb %s)
 (no value)
 (not active)
 (not allocated)
@@ -535,7 +581,7 @@ ppcboot header:
 , alias: %u
 , ext fixup offset: %u, no_opt psect off: %u, subtype: %u (%s)
 , symbol vector rva: - %pB is 64-bit, %pB is not-mips32r2 -mfp64 (12 callee-saved).eh_frame_hdr entry overflow.eh_frame_hdr refers to overlapping FDEs.got section not immediately after .plt section.rsrc merge failure: a directory matches a leaf.rsrc merge failure: differing directory versions.rsrc merge failure: dirs with differing characteristics.rsrc merge failure: duplicate leaf.rsrc merge failure: duplicate leaf: %s.rsrc merge failure: duplicate string resource: %d.rsrc merge failure: multiple non-default manifests32-bit double, 32bits gp relative relocation occurs for an external symbol4-byte4-bytes64 bits *unhandled*
-64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC<Unrecognised flag bits set><corrupt info> %s<corrupt string length: %#x>
+64-bit double, 8-byte8-bytes: m32r instructions: m32r2 instructions: m32rx instructions: n1 instructions: n1h instructions; recompile with -fPIC; recompile with -fPIE<corrupt info> %s<corrupt string length: %#x>
 <corrupt string offset: %#lx>
 <corrupt><unknown directory type: %d>
 <unknown mask flags><unknown>@pltoff reloc against local symbolBASE_IMAGE       BFD %s assertion fail %s:%dBFD %s internal error, aborting at %s:%d
@@ -546,17 +592,15 @@ ppcboot header:
 CTL_SETRB (set relocation base)
 CTL_STKDL (stack defined location)
 CTL_STLOC (set location)
-Copyright Header
+Coolidge (kv3) V1 32 bitsCoolidge (kv3) V1 64 bitsCoolidge (kv3) V2 32 bitsCoolidge (kv3) V2 64 bitsCoolidge (kv4) V1 32 bitsCoolidge (kv4) V1 64 bitsCopyright Header
 Corrupt .rsrc section detected!
-DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
+DSO missing from command lineDWARF error: DW_AT_comp_dir attribute encountered with a non-string formDWARF error: abstract instance recursion detectedDWARF error: can't find %s section.DWARF error: could not find abbrev number %uDWARF error: could not find variable specification at offset 0x%lxDWARF error: found address size '%u', this reader can not handle sizes greater than '%u'DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 informationDWARF error: info pointer extends beyond end of attributesDWARF error: invalid abstract instance DIE refDWARF error: invalid maximum operations per instructionDWARF error: invalid or unhandled FORM value: %#xDWARF error: line info unsupported segment selector size %uDWARF error: mangled line number sectionDWARF error: mangled line number section (bad file number)DWARF error: ran out of room reading opcodesDWARF error: ran out of room reading prologueDWARF error: section %s has no contentsDWARF error: section %s is too bigDWARF error: unhandled .debug_line version %dDWARF error: zero format countDW_EH_PE_datarel unspecified for this architectureDebug DirectoryDebug module table:
 Debug symbol table:
-Delay Import DirectoryDeprecated %s called
-Deprecated %s called at %s line %d in %s
-Description DirectoryEIHD: (size: %u, nbr blocks: %u)
+Delay Import DirectoryDescription DirectoryEIHD: (size: %u, nbr blocks: %u)
 Entry offset        = 0x%.8lx (%ld)
-Error: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
+Error: %pB and %pB has different DSP versionError: %pB and %pB has different FPU ABIError: %pB and %pB has different VDSP versionError: %pB has both the current and legacy Tag_MPextension_use attributesException Directory [.pdata]Export Directory [.edata (or where ever we found it)]Export Flags 			%lx
 Export RVAFDE encoding in %pB(%pA) prevents .eh_frame_hdr table being createdFDPIC does not yet support %s relocation to become dynamic for executableFILES_VOLUMES    FPU-2.0FPU-3.0Flag field          = 0x%.2x
-Forwarder RVAGALAXY           GOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
+Forwarder RVAGALAXY           GNU_MBIND section is supported only by GNU and FreeBSD targetsGNU_RETAIN section is supported only by GNU and FreeBSD targetsGOT and PLT relocations cannot be fixed with a non dynamic linkerGOT table size out of rangeGP relative relocation used when GP not definedGP relative relocation when _gp not definedGPDISP relocation did not find ldah and lda instructionsGlobal symbol table:
 Hard float (32-bit CPU, 64-bit FPU)
 Hard float (32-bit CPU, Any FPU)
 Hard float (MIPS32r2 64-bit FPU 12 callee-saved)
@@ -564,20 +608,20 @@ ppcboot header:
 Hard float (single precision)
 Hard float compat (32-bit CPU, 64-bit FPU)
 Hard or soft float
-ID: %#08lxIDC - Ident Consistency check
-IMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
+IBT and SHSTK propertiesIBT propertyID: %#08lxIDC - Ident Consistency check
+IFUNC symbol %s in dynamic symbol table - IFUNCS are not supportedIMAGE_ACTIVATOR  INPUT_SECTION_FLAGS are not supportedIO               Image activation:  (size=%u)
 Image activator fixup: (major: %u, minor: %u)
 Image identification: (major: %u, minor: %u)
 Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)
 Image symbol & debug table: (major: %u, minor: %u)
-Import Address Table DirectoryImport Directory [parts of .idata]LOGICAL_NAMES    Language Processor Name
+Import Address Table DirectoryImport Directory [parts of .idata]Internal error: unreachable.LAM_U48 propertyLAM_U57 propertyLOGICAL_NAMES    Language Processor Name
 Length              = 0x%.8lx (%ld)
 Load Configuration DirectoryLocal IFUNC function `%s' in %pB
 MEMORY_MANAGEMENTMIPS16 and microMIPS functions cannot call each otherMISC             MMU use: MULTI_PROCESSING Major/Minor 			%d/%d
 Maximum stack required is 0x%v
 MeP: howto %d has type %dMerging program properties
 Module header
-NETWORKS         NORMALName 				NoneNumber in:
+NETWORKS         NORMALNOTE: This behaviour is deprecated and will be removed in a future version of the linkerName 				NoneNumber in:
 OPR_ADD (add)
 OPR_AND (logical and)
 OPR_ASH (arithmetic shift)
@@ -602,21 +646,19 @@ ppcboot header:
 Partition[%d] length = 0x%.8lx (%ld)
 Partition[%d] sector = 0x%.8lx (%ld)
 Please report this bug.
-RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pBRL78 ABI conflict: cannot link %s file %pB with %s file %pBRL78 merge conflict: cannot link 32-bit and 64-bit objects togetherR_BFIN_FUNCDESC references dynamic symbol with nonzero addendR_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addendR_FRV_TLSMOFFLO not applied to a setlo or setlos instruction
+Private flags = 0x%lx : RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pBRL78 ABI conflict: cannot link %s file %pB with %s file %pBRL78 merge conflict: cannot link 32-bit and 64-bit objects togetherRL78 reloc divide by zeroRL78 reloc stack overflow/underflowR_AMD64_IMAGEBASE with __ImageBase undefinedR_BFIN_FUNCDESC references dynamic symbol with nonzero addendR_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addendR_FRV_TLSMOFFLO not applied to a setlo or setlos instruction
 Reading archive file mod timestampRemoved property %W to merge %pB (0x%v) and %pB (0x%v)
 Removed property %W to merge %pB (0x%v) and %pB (not found)
 Removed property %W to merge %pB (not found) and %pB (0x%v)
 Removed property %W to merge %pB and %pB
 Removed property %W to merge %pB and %pB (not found)
-ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSIMD use: SPSC - Shared Image Program section def
+ReservedResource Directory [.rsrc]S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your codeSDA relocation when _SDA_BASE_ not definedSECURITY         SEC_RELOC with no relocs in section %pASHELL            SHRFXDSHRPICSHSTK propertySIMD use: SPSC - Shared Image Program section def
 STABLE           STA_CKARG (compare procedure argument)
 STA_GBL (stack global) %.*s
 STA_LI (stack literal)
-STA_LW (stack longword) 0x%08x
-STA_MOD (stack module)
+STA_LW (stack longword)STA_MOD (stack module)
 STA_PQ (stack psect base + offset)
-STA_QW (stack quadword) 0x%08x %08x
-STC_BOH_GBL (store cond BOH at global addr)
+STA_QW (stack quadword)STC_BOH_GBL (store cond BOH at global addr)
 STC_BOH_PS (store cond BOH at psect + offset)
 STC_BSR_GBL (store cond BSR at global addr)
 STC_BSR_PS (store cond BSR at psect + offset)
@@ -655,27 +697,27 @@ ppcboot header:
 Source Files Header
 Special DirectoryStack size for call graph root nodes.
 Strides:
-Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pBTLS relocation invalid without dynamic sectionsTable Addresses
-The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
+Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pBTLS relocation invalid without dynamic sectionsTOC overflow during stub generation; try -mminimal-toc when compilingTable Addresses
+The addend isn't allowed for R_RISCV_GOT_HI20The debug data size field in the data directory is too big for the sectionThe debug directory size is not a multiple of the debug directory entry size
 Thread Storage Directory [.tls]Time/Date stamp 		%lx
 Title Text Header
 Too many unwind codes (%ld)
 Type                Size     Rva      Offset
-USRSTACKUnknownUnknown: %xUpdated property %W (%v) to merge %pB (0x%v) and %pB (not found)
+USRSTACKUnable to find the stub entry targeting %sUnable to link input file: %sUnable to load DLL.UnknownUnknown: %xUpdated property %W (%v) to merge %pB (0x%v) and %pB (not found)
 Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)
 VOLATILE         Virtual size of .pdata section (%ld) larger than real size (%ld)
 Warning: %s section size (%ld) is not a multiple of %d
 Warning: %s section size (%ld) is smaller than virtual size (%ld)
 Warning: %s section size is zero
 Writing updated armap timestampXGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code.[%u]: Lower: %u, upper: %u
-[abi=16-bit int, [abi=32-bit int, [whose name is lost]_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry functiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
+[abi=16-bit int, [abi=32-bit int, [whose name is lost]\%pB: warning: %s BLX instruction targets %s function '%s'__tls_get_addr call offset overflow_bfd_vms_output_counted called with too many bytes_bfd_vms_output_counted called with zero bytes`%s' refers to a non entry function`xtheadvector' is conflict with the `v' extension`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extensiona PDE objecta PIE objecta shared objectaddressaddress not word alignedalternate ELF machine code found (%d) in %pB, expecting %darchive has no index; run ranlib to add onearchive object file in wrong formatarray descriptor:
 array, dim: %u, bitmap: arsize: %u, a0: 0x%08x
 atomic, type=0x%02x %s
 attempt to convert L32R/CALLX to CALL failedattempt to do relocatable link with %s input and %s outputbad section index in %sbad valuebanked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)base: %u, pos: %u
-bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 insteadbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_read_symtab_symbols: unable to allocate memory for symbolsbfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
+bfd_mach_o_canonicalize_symtab: unable to load symbolsbfd_mach_o_read_section_32: overlarge alignment value: %#lxbfd_mach_o_read_section_64: overlarge alignment value: %#lxbfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)bfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid section %d (max %lu): setting to undefinedbfd_mach_o_read_symtab_symbol: symbol "%s" specified invalid type field 0x%x: setting to undefinedbfd_mach_o_read_symtab_symbol: unable to read %d bytes at %ubfd_mach_o_scan: unknown architecture 0x%lx/0x%lxbfd_pef_scan: unknown architecture 0x%lxblkbeg: address: 0x%08x, name: %.*s
 blkend: size: 0x%08x
-branch (PC rel16) to section (%s) not supportedbranch to a non-instruction-aligned addressbss-plt forced by profilingbss-plt forced due to %pBcan't build branch stub `%s'can't find branch stub `%s'cannot convert a branch to JALX for a non-word-aligned addresscannot convert a jump to JALX for a non-word-aligned addresscannot create stub entry %scannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
-cannot read DMT
+branch (PC rel16) to section (%s) not supportedbranch to a non-instruction-aligned addressbss-plt forced by profilingbss-plt forced due to %pBc' or `zcac' or `zcdc' or `zcfcan't build branch stub `%s'can't find branch stub `%s'cannot + or - base extension `%s' in .option arch `%s'cannot convert a branch to JALX for a non-word-aligned addresscannot convert a jump to JALX for a non-word-aligned addresscannot create stub entry %scannot emit dynamic relocations in read-only sectioncannot emit fixups in read-only sectioncannot find EMH in first GST record
+cannot find default versions of the ISA extension `%s'cannot read DMT
 cannot read DMT header
 cannot read DMT psect
 cannot read DST
@@ -691,86 +733,81 @@ ppcboot header:
 cannot read GST
 cannot read GST record
 cannot read GST record header
-cannot read GST record length
 class: %u, dtype: %u, length: %u, pointer: 0x%08x
-corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EGSD record: size (%#x) is larger than remaining space (%#x)corrupt EGSD record: size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt vms valuecould not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]dangerous relocationdelta pc +%-4ddelta_pc_l: +0x%08x
+corrupt %s section in %pBcorrupt EEOM record - size is too smallcorrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)corrupt EGSD record type %d: size (%#x) is too smallcorrupt EGSD record: its psindx field is too big (%#lx)corrupt EGSD record: its size (%#x) is too smallcorrupt EIHD record - size is too smallcorrupt ETIR record encounteredcorrupt reloc recordcorrupt vms valuecorrupted GST
+could not find section %scould not locate special linker symbol __ctbpcould not locate special linker symbol __epcould not locate special linker symbol __gpcould not open shared image '%s' from '%s'cpu=HC11]cpu=HC12]cpu=HCS12]cpu=XGATE]d' and `c', or `d' and `zcdd' and `zfad' or `zdinxdangerous relocationdangerous relocation errordelta pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 descdimct: %u, aflags: 0x%02x, digits: %u, scale: %u
 discarded output section: `%pA'discarding zero address range FDE in %pB(%pA).
 discontiguous range (nbr: %u)
-dynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
+division by zerodst_define_location %u too largedynamic index information not availabledynamic relocation in read-only sectiondynamic variable `%s' is zero sizedynreloc miscount for %pB, section %pAentry function `%s' disappeared from secure codeenumbeg, len: %u, name: %.*s
 enumelt, name: %.*s
 enumend
 epilog: flags: %u, count: %u
-error in %pB(%pA); no .eh_frame_hdr table will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB does not use %s instructions, whereas %pB doeserror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack aligned.error: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s).error: %pB: Mis-matched ISA string to merge '%s' and '%s'.error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%derror: %pB: SB relative addressing conflicts with use of R9error: %pB: Unspported XLEN (%u), you mightusing wrong emulation.error: %pB: XLEN of input (%u) doesn't match output (%u).error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting priv spec version (major/minor/revision).error: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'.error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablefailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation at address 0x%08x when _gp not defined
-global pointer relative relocation when _gp not definedhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
+error adding attributeerror in %pB(%pA); no .eh_frame_hdr table will be createderror in %pB(%pA); no .sframe will be createderror reading %s: %serror reading cpu type from elf private dataerror: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memoryerror: %pB does not use %s instructions, whereas %pB doeserror: %pB has a LOAD segment with RWX permissionserror: %pB has a TLS segment with execute permissionerror: %pB is already in final BE8 formaterror: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%derror: %pB is compiled for the EP9312, whereas %pB is compiled for XScaleerror: %pB needs 8-byte alignment but %pB is set for 4-byte alignmenterror: %pB passes floats in float registers, whereas %pB passes them in integer registerserror: %pB passes floats in integer registers, whereas %pB passes them in float registerserror: %pB requires more array alignment than %pB preserveserror: %pB requires more stack alignment than %pB preserveserror: %pB use %u-byte stack aligned but the output use %u-byte stack alignederror: %pB uses %s instructions but %pB uses %serror: %pB uses %s instructions, whereas %pB does noterror: %pB uses 64-bit doubles but %pB uses 32-bit doubleserror: %pB uses FPU-3.0 but %pB only supports FPU-2.0error: %pB uses VFP register arguments, %pB does noterror: %pB uses hardware FP, whereas %pB uses software FPerror: %pB uses iWMMXt register arguments, %pB does noterror: %pB uses software FP, whereas %pB uses hardware FPerror: %pB uses the %s code model whereas %pB uses the %s code modelerror: %pB uses the %s data model but %pB only uses MSP430 instructionserror: %pB uses the %s data model whereas %pB uses the %s data modelerror: %pB uses the large code model but %pB uses MSP430 instructionserror: %pB uses the small code model but %pB uses the %s data modelerror: %pB: <corrupt AArch64 used size: 0x%x>error: %pB: <corrupt property (0x%x) size: 0x%x>error: %pB: <corrupt x86 property (0x%x) size: 0x%x>error: %pB: ISA string of input (%s) doesn't match output (%s)error: %pB: SB relative addressing conflicts with use of R9error: %pB: XLEN of input (%u) doesn't match output (%u)error: %pB: big-endian R2 is not supportederror: %pB: cannot mix rf16 with full register set %pBerror: %pB: conflicting CPU architectures %d/%derror: %pB: conflicting ISA extension attributes %s with %serror: %pB: conflicting architecture profiles %c/%cerror: %pB: conflicting attributes %serror: %pB: conflicting attributes %s: %s with %serror: %pB: conflicting use of R9error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'error: %pB: mis-matched ISA string to merge '%s' and '%s'error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchainerror: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'error: %pB: old incompatible object file detectederror: %pB: size of section %pA is not multiple of address sizeerror: %pB: unable to merge CPU base attributes %s with %serror: %pB: unable to merge ISA extension attributes %serror: %pB: unable to merge virtualization attributes with %pBerror: %pB: unknown CPU architectureerror: %pB: unsupported XLEN (%u), you might be using wrong emulationerror: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack sectionerror: attempting to link %pB with a binary %pB of different architectureerror: can't find symbol: %serror: conflicting CPU architectures %s vs %s in %pBerror: creating an executable stack because of -z execstack command line optionerror: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spaceerror: fp16 format mismatch between %pB and %pBerror: inappropriate relocation type for shared library (did you forget -fpic?)error: source object %pB has EABI version %d, but target %pB has EABI version %derror: the ARC4 architecture is no longer supportederror: undefined symbol __rtiniterror: unknown Tag_ABI_array_object_align_expected value in %pBerror: unknown Tag_ABI_array_object_alignment value in %pBerrors encountered processing file %pBexecutablef' and `c', or `f' and `zcff' or `zfinxfailed to allocate space for new APUinfo sectionfailed to compute new APUinfo sectionfailed to find previous HI16 relocfailed to install new APUinfo sectionfailed to update file offsets in debug directoryfatal error while creating .fixupfile format is ambiguousfile format not recognizedfile in wrong formatfile too bigfile truncatedfinal size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available spacefurther warnings about FDE encoding preventing .eh_frame_hdr generation droppedgeneric linker can't handle %sglobal pointer relative address out of rangeglobal pointer relative relocation when _gp not definedhhidden symbolhidden symbol incompatible cputypes in mach-o files: %ld vs %ldincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
 indirect, defined at 0x%08x
-internal error: RL78 reloc stack overflowinternal error: RL78 reloc stack underflowinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol invalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
+input SFrame sections with different abi prevent .sframe generationinput SFrame sections with different format versions prevent .sframe generationinternal error: addend should be zero for %sinternal error: branch/jump to an odd address detectedinternal error: dangerous errorinternal error: dangerous relocationinternal error: merge of architecture '%s' with architecture '%s' produced unknown architectureinternal error: out of range errorinternal error: relocation not supportedinternal error: suspicious relocation type used in shared libraryinternal error: unknown errorinternal error: unsupported relocation errorinternal inconsistency in size of .got.loc sectioninternal inconsistency: remaining %lu != max %lu; please report this buginternal symbolinternal symbol internal: unreachable INSN_CLASS_*invalid %sinvalid ISA extension ends with <number>p in .option arch `%s'invalid TARGET2 relocation type '%s'invalid bfd targetinvalid contents in %pA sectioninvalid dynamic indexinvalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using "-no-expand" (for gcc, "-Wa,-no-expand"invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option "-mno-base-addresses".invalid operationinvalid output section for .eh_frame_entry: %pAinvalid relocation addressinvalid section index in ETIRinvalid use of %s with contextsip2k relaxer: switch table header corrupt.ip2k relaxer: switch table without complete matching relocation information.is this version of the linker - %s - out of date ?jump (PC rel26) to section (%s) not supportedjump to a non-instruction-aligned addressjump to a non-word-aligned addresslabel, name: %.*s
 len: %2u, kind: %2u line num  (len: %u)
-linkable imagelinker stubs in %u group
-linker stubs in %u groups
-literalliteral relocation occurs for an external symbollong branch stub `%s' offset overflowmach-o: there are too many sections (%u) maximum is 255,
-malformed archivememory exhaustedmep: no reloc for code %dmodbeg
+linkable imagelinker stubs in %u grouplinker stubs in %u groupsliteralliteral relocation occurs for an external symbollocal symbol index too biglong branch stub `%s' offset overflowm' or `zmmulmach-o: there are too many sections (%u) maximum is 255,
+malformed archivemalformed mach-o ARM half sectdiff reloc: invalid length: %dmalformed mach-o ARM local sectdiff reloc: invalid length: %dmalformed mach-o ARM reloc pair: invalid length: %dmalformed mach-o ARM reloc pair: reloc is first relocmalformed mach-o ARM reloc: unknown reloc type: %dmalformed mach-o ARM sectdiff reloc: invalid length: %dmalformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)malformed mach-o reloc: section index is greater than the number of sectionsmemory exhaustedmep: no reloc for code %dmodbeg
 modend
-name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno errorno more archived filesno symbolsnon-contiguous array of %s
-non-dynamic relocations refer to dynamic symbol %snon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
+name: [val: %08lx len %d]: nativenew entry function(s) introduced but no output import library specified:nono address assigned to the veneers output section %sno dynamic index information availableno errorno more archived filesno symbolsnon-contiguous array of %s
+non-dynamic relocations refer to dynamic symbol %snon-dynamic symbol %s in dynamic symbol tablenon-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store
 non-zero addend in @fptr relocnonenonrepresentable section on outputnot enough GOT space for local GOT entriesnot enough memory to sort relocationsnot mapping: data=%lx mapped=%d
 not mapping: env var not set
-not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowpointer
+not setobject module not error-free !offset of veneer for entry function `%s' not a multiple of its sizeone possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was definedout of rangeoverflow after relaxationoverlay stub relocation overflowplugin framework: out of file descriptors. Try using fewer objects/archives
+pointer
 private flags = %lxprivate flags = %lx:private flags = %lx: private flags = 0x%lxprivate flags = 0x%lx:prolog: bkpt address 0x%08x
-protected symbolprotected symbol recbeg: name: %.*s
+protected symbolprotected symbol q' and `zfaq' or `zqinxrecbeg: name: %.*s
 recend
-reference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
-reloc (%d) is *UNKNOWN*relocation for non-REL psectrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedremoving unused section '%pA' in file '%pB'reopening %pB: %s
-reserved cmd %drtnbeg
+record is too small for symbol name lengthreference to a banked address [%lx:%04lx] in the normal address space at %04lxreference to the far symbol `%s' using a wrong relocation may result in incorrect executionregregister %%g%d used incompatibly: %s in %pB, previously %s in %pBregister section has contents
+reloc (%d) is *UNKNOWN*relocation against `%s' has faulty GOT type relocation for non-REL psectrelocation out of rangerelocation references symbol not defined in the modulerelocation requires zero addendrelocation should be even numberrelocations between different segments are not supportedremoving unused section '%pA' in file '%pB'reopening %pB: %sreserved cmd %drtnbeg
 rtnend: size 0x%08x
-section has no contentsseptyp, name: %.*s
+rv%d does not support the `q' extensionrv%d does not support the `zcf' extensionrv%de does not support the `h' extensionsection has no contentsseptyp, name: %.*s
 set_abs_pc: 0x%08x
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-shared objectsize error in section %pAsmall-data section exceeds 64KB; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, no support for duplicate object files in auto-overlay script
+shared objectsize error in section %pAsmall-data section too large; lower small-data size limit (see option -G)som_sizeof_headers unimplementedsorry, cannot handle this filesorry, no support for duplicate object files in auto-overlay script
 sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands.source (len: %u)
 spurious ALPHA_R_BSR relocstack analysis will ignore the call from %s to %s
 stack overflow (%d) in _bfd_vms_pushstack underflow in _bfd_vms_popstandard data: %s
-start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol needs debug section which does not existsystem call errorsystem version array information:
+start address of `%s' is different from previous linkstatic procedure (no name)stubs don't match calculated sizesymbolsymbol symbol '%s' has invalid st_other for ABI version 1symbol `%s' has differing types: REGISTER in %pB, previously %s in %pBsymbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targetssymbol needs debug section which does not existsymbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targetssystem call errorsystem version array information:
 term(b): 0x%02xterm_w: 0x%04xthe bfin target does not currently support the generation of copy relocationsthere is a conflict merging the ELF header flags from %pBtoo many GOT entries for -fpic, please recompile with -fPICtry enabling relaxation to avoid relocation truncationstype spec for element:
 type spec for subscript %u:
 typed pointer
 typspec (len: %u)
-unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767
-unable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
-undefined undefined %s reference in complex symbol: %sunexpected STO_SH5_ISA32 on local symbol is not handledunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
+unable to allocate data for load command %#xunable to find %s glue '%s' for '%s'unable to find equivalent output section for symbol '%s' from section '%s'unable to layout unknown load command %#xunable to read EIHS record at offset %#xunable to read in %s section from %pBunable to write unknown load command %#xunaligned bit-string of %s
+undefined undefined %s reference in complex symbol: %sunexpected machine numberunhandled OSF/1 core file section type %dunhandled egsd entry type %u
 unhandled emh subtype %u
-unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
-unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeunsupported relocation type %#xusing multiple gp valuesv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
+unhandled relocation %sunknownunknown EGSD subtype %dunknown ETIR command %dunknown ISA extension `%s' in .option arch `%s'unknown attribute for symbol `%s': 0x%02xunknown basic type %dunknown errorunknown header byte-order value %#xunknown line command %dunknown operator '%c' in complex symbolunknown reloc %sunknown reloc %s + %sunknown source command %dunknown symbol in command %sunknown v850 architectureunknown: %xunrecognized INPUT_SECTION_FLAG %s
+unrecognized TI COFF target id '0x%x'unsupported .stab relocationunsupported STA cmd %sunsupported relocunsupported relocationunsupported relocation between data/insn address spacesunsupported relocation typeusing multiple gp valuesv' or `zve64d' or `zve64f' or `zve32fv' or `zve64x' or `zve32xv850 E3 architecturev850 architecturev850e architecturev850e1 architecturev850e2 architecturev850e2v3 architecturev850e3v5 architecturevariable `%s' can only be in one of the small, zero, and tiny data regionsvariable `%s' cannot be in both small and tiny data regions simultaneouslyvariable `%s' cannot be in both small and zero data regions simultaneouslyvariable `%s' cannot be in both zero and tiny data regions simultaneouslyvariable `%s' cannot occupy in multiple small data regionsvflags: 0x%02x, value: 0x%08x vma:			BeginAddress	 EndAddress	  UnwindData
 warning, .pdata section size (%ld) is not a multiple of %d
-warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a corrupt section with a size (%warning: %pB has a corrupt string table index - ignoringwarning: %pB supports interworking, whereas %pB does notwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
+warning: %pB and %pB differ in wchar_t sizewarning: %pB and %pB differ in whether code is compiled for DSBTwarning: %pB does not support interworking, whereas %pB doeswarning: %pB has a LOAD segment with RWX permissionswarning: %pB has a TLS segment with execute permissionwarning: %pB has a corrupt string table indexwarning: %pB has a program header with invalid alignmentwarning: %pB has a section extending past end of filewarning: %pB has a segment extending past end of filewarning: %pB supports interworking, whereas %pB does notwarning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%uwarning: %pB uses %s (set by %pB), %pB uses %swarning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may failwarning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may failwarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %dwarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %swarning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %dwarning: %pB: conflicting platform configurationwarning: %pB: conflicting platform configuration %s with %swarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lxwarning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%xwarning: %pB: corrupt no copy on protected size: 0x%xwarning: %pB: corrupt stack size: 0x%xwarning: %pB: local symbol `%s' has no sectionwarning: %pB: unknown ARC object attribute %dwarning: %pB: unknown EABI object attribute %dwarning: %pB: unknown MSPABI object attribute %dwarning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%xwarning: %s exceeds section size
 warning: %s overlaps %s
-warning: %s section has zero sizewarning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
-warning: discarding dynamic section %swarning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
-yesyou are not allowed to define %s in a scriptProject-Id-Version: bfd 2.31.90
-Report-Msgid-Bugs-To: bug-binutils@gnu.org
-POT-Creation-Date: 2019-01-19 16:30+0000
-PO-Revision-Date: 2019-01-20 11:34+0200
+warning: %s section has zero sizewarning: %s should be used rather than %swarning: %s: missing .note.GNU-stack section implies executable stackwarning: %s: requires executable stack (because the .note.GNU-stack section is executable)warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violationswarning: --plt-localentry is incompatible with power10 pc-relative codewarning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised.warning: NOTE: size discrepancies can cause real problems.  Investigation is advised.warning: RL78_SYM reloc with an unknown symbolwarning: RX_SYM reloc with an unknown symbolwarning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pAwarning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pBwarning: alignment %u of symbol `%s' in %pB is smaller than %u in %pBwarning: attempt to export undefined symbol `%s'warning: call to non-function symbol %s defined in %pBwarning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with itwarning: clearing the interworking flag of %pB due to outside requestwarning: corrupt unwind data
+warning: discarding dynamic section %swarning: enabling an executable stack because of -z execstack command line optionwarning: file %pB's arch flag %s conflict with target %s,set target arch flag to %swarning: file %pB's arch flag %s conflicts with target ck%s, using %swarning: gc-sections option ignoredwarning: generating a shared library containing non-PIC codewarning: generating a shared library containing non-PID codewarning: not setting interworking flag of %pB since it has already been specified as non-interworkingwarning: privileged spec version 1.9.1 can not be linked with other spec versionswarning: relocation references a different segmentwarning: section '%s' is being made into a notewarning: section `%pA' type changed to PROGBITSwarning: symbol `%s' is both section and non-sectionwarning: type and size of dynamic symbol `%s' are not definedwarning: type of symbol `%s' changed from %d to %d in %pBwarning: unable to set size of %s section in %pBwarning: unable to update contents of %s section in %pBwarning: unrecognised arch name '%#x'warning: unrecognized arch eflag '%#lx'warning: unset or old architecture flags; use default machinewarning: writing archive was slow: rewriting timestampwarning: writing section `%pA' at huge (ie negative) file offsetwarning: xdata section corrupt
+x ISA extension `%s' must be set with the versionsyesyou are not allowed to define %s in a scriptzbb' or `zbkbzbc' or `zbkczcb' and `zbazcb' and `zbbzcb' and `zmmul', or `zcb' and `mzfh' and `zfazfh' and `zfa', or `zvfh' and `zfazfh' or `zhinxzfh' or `zvfhzfhmin' and `d', or `zhinxmin' and `zdinxzfhmin' and `q', or `zhinxmin' and `zqinxzfhmin' or `zhinxminzihintntl' and `c', or `zihintntl' and `zcazknd' or `zknezvbbzvbczvkbzvkgzvknedzvknha' or `zvknhbzvksedzvkshzvl*b extensions need to enable either `v' or `zve' extensionProject-Id-Version: bfd 2.41.90
+Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/
+POT-Creation-Date: 2024-01-15 14:55+0000
+PO-Revision-Date: 2024-01-16 23:32+0200
 Last-Translator: Yuri Chornoivan <yurchor@ukr.net>
-Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>
+Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>
 Language: uk
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 X-Bugs: Report translation errors to the Language-Team address.
 Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
-X-Generator: Lokalize 2.0
+X-Generator: Lokalize 23.04.1
 	    TLS: %pA	<Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾: 0x%04lx>	Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ð°Ð´Ñ€ÐµÑ� 			Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ð°Ð´Ñ€ÐµÑ� 		%08lx
 	Ð�ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ rva (0x%lx) Ð°Ð±Ð¾ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² (0x%lx) Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð°Ð´Ñ€ÐµÑ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�
 	Ð�ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ rva (0x%lx) Ð°Ð±Ð¾ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² (0x%lx) Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ð½Ð° Ð½Ð°Ð·Ð²Ð¸
 	Ð�ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ rva (0x%lx) Ð°Ð±Ð¾ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² (0x%lx) Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…
 	Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ð½Ð° Ð½Ð°Ð·Ð²Ð¸ 			Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² 				[%4ld] <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ñ�ÑƒÐ²: %lx>
 	Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� [Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ð½Ð°Ð·Ð²/Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð²]	%08lx
-	toc Ð¾Ñ�Ð½Ð¾Ð²Ð¸ ÐºÐ¾Ð´Ñƒ %08lx (Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð½Ð¸Ð¹/Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ð¹) %08lx/%08lx
 	Ð½Ðµ-TLS: %pA	Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %4d Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ %4x [%4lx] %s	vma:  Ð’ÐºÐ°Ð·/ÐŸÐ¾Ñ€ Ð�Ð°Ð·Ð²Ð°-ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð° ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·Ð°Ð½Ð¾-Ð´Ð¾
 
 
@@ -801,10 +838,6 @@ X-Generator: Lokalize 2.0
 
 Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ð°Ð´Ñ€ÐµÑ� â€” Ð¾Ñ�Ð½Ð¾Ð²Ð° Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð²: %ld
 
-Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð¾ Ð·Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %04lx
-
-Ð�ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ reldata! Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾.
-
 ÐŸÐ¾Ñ‡Ð°Ñ‚Ð¾Ðº Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸:
@@ -830,12 +863,10 @@ X-Generator: Lokalize 2.0
 
 Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ 0x%lx
 
-Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñ—Ñ— Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–
+Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ð²Ð¼Ñ–Ñ�Ñ‚ Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸
 
 Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ð²Ð¾Ð½Ð° Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ (%d)
 
-Ð£ %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ…
-
 Ð†Ñ�Ð½ÑƒÑ” Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ‰Ð¾ Ñ—Ñ— Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾
 
 Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ 0x%lx
@@ -871,7 +902,8 @@ X-Generator: Lokalize 2.0
     Ñ–Ð½Ð´. psect 3: %u, Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ 3: 0x%08x %08x
     psect: %u, Ð·Ñ�ÑƒÐ²: 0x%08x %08x
     Ð½Ð°Ð·Ð²Ð° Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð¸: %.*s
-   %02u    (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 4+%3u):    *Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð°* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u
+   %02u    (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %3u):    *Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð°* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u
+   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°
    ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð°Ñ‚Ñƒ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾
    ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ” Ð¼ÐµÐ½ÑˆÐ¾ÑŽ Ð·Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ EEOM
    ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ” Ð¼ÐµÐ½ÑˆÐ¾ÑŽ Ð·Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ EMH
@@ -880,7 +912,6 @@ X-Generator: Lokalize 2.0
    ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ð¼Ð¾Ð´ÑƒÐ»Ñ�
    ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð²ÐµÑ€Ñ�Ñ–Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð´Ð¾Ð²Ð³Ð¾ÑŽ
    ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ” Ð¼ÐµÐ½ÑˆÐ¾ÑŽ Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ EMH_MHD
-   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¼Ñ–Ñ�Ñ†Ðµ, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–
    Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: 2**%u
    alloc (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°): %u (0x%08x)
    alloc (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°): %u (0x%08x)
@@ -946,25 +977,13 @@ X-Generator: Lokalize 2.0
    Ð²ÐµÐºÑ‚Ð¾Ñ€      : 0x%08x
    Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ñ�Ñ–Ñ—: 0x%08x
   Ð²ÐµÑ€Ñ�Ñ–Ñ�:      %x
-  %s (Ð´Ð¾Ð²Ð¶=%u+%u):
+  %s (Ð´Ð¾Ð²Ð¶=%u):
   %u: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u, Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: 0x%02x, Ð½Ð°Ð·Ð²Ð°: %.*s
   EEOM (Ð´Ð¾Ð²Ð¶=%u):
   EGSD (Ð´Ð¾Ð²Ð¶=%u):
   Ð·Ð°Ð¿Ð¸Ñ� EGSD %2u (Ñ‚Ð¸Ð¿: %u, Ð´Ð¾Ð²Ð¶: %u):   EMH %u (Ð´Ð¾Ð²Ð¶=%u):   Ð¾Ñ�Ð½.: 0x%08x %08x, Ñ€Ð¾Ð·Ð¼: 0x%08x,  Ð·Ð°Ñ….: 0x%08x   base_va : 0x%08x
   ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ñ–Ñ‚Ñ–Ð²: %u, Ð±Ð°Ð·Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x
-  Ð³Ñ–Ð»ÐºÐ°          %lu
-  toc adj Ð³Ñ–Ð»ÐºÐ¸  %lu
-  notoc Ð³Ñ–Ð»ÐºÐ¸    %lu
-  both Ð³Ñ–Ð»ÐºÐ¸     %lu
-  long branch    %lu
-  long toc adj   %lu
-  long notoc     %lu
-  long both      %lu
-  plt call       %lu
-  plt call save  %lu
-  plt call notoc %lu
-  plt call both  %lu
-  Ð·Ð°Ð³. Ð·Ð°Ð¿Ð¸Ñ�     %lu  Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸:
+  Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸:
   chgprtoff : %5u
   codeadroff: %5u, lpfixoff  : %5u
   fixuplnk: 0x%08x %08x
@@ -980,22 +999,22 @@ X-Generator: Lokalize 2.0
   shlextra  : %5u, permctx   : %5u
   shlstoff  : %5u, shrimgcnt : %5u
   Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u
-  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ñ„Ð°Ð¹Ð»Ð° Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…: %s  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ñ„Ð°Ð¹Ð»Ð° Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð²: %s %08x (<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾>) 0x%08x 64B <Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ� EABI> BPAGE: %u COM COMM Ð—Ð¼Ñ–Ð½Ð° Ð·Ð°Ñ…Ð¸Ñ�Ñ‚Ñƒ (%u Ð·Ð°Ð¿Ð¸Ñ�Ð¸):
+  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ñ„Ð°Ð¹Ð»Ð° Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…: %s  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ñ„Ð°Ð¹Ð»Ð° Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð²: %s %08x (<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾>) 0x%08x 64B <Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ� EABI> <Ð�ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ð½Ð°Ð±Ñ–Ñ€ Ð±Ñ–Ñ‚Ñ–Ð² Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð²> BPAGE: %u COM COMM Ð—Ð¼Ñ–Ð½Ð° Ð·Ð°Ñ…Ð¸Ñ�Ñ‚Ñƒ (%u Ð·Ð°Ð¿Ð¸Ñ�Ð¸):
  ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð°Ð´Ñ€ÐµÑ� ÐºÐ¾Ð´Ñƒ:
  DEF EXE ÐŸÐ¾Ñ‚Ñ€Ñ–Ð±Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° FPU:  ÐŸÐµÑ€ÑˆÐ° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x
  Ð§ÐµÑ‚Ð²ÐµÑ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x
- GBL ÐŸÐ¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ð·â€™Ñ”Ð´Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ LIB ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ Ð½Ð° Ð¿Ð°Ñ€Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�:
+ GBL LIB ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ Ð½Ð° Ð¿Ð°Ñ€Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�:
 Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº MACH-O:
- NOMOD NORM OVR PIC QVAL RD REL ÐœÑ–Ð»Ñ–ÐºÐ¾Ð´ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð° ÐœÑ–Ð»Ñ–ÐºÐ¾Ð´ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð° Ð ÐµÑ�ÑƒÑ€Ñ�Ð¸ Ð¿Ð¾Ñ‡Ð¸Ð½Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð· Ñ‚Ð°ÐºÐ¸Ð¼ Ð·Ñ�ÑƒÐ²Ð¾Ð¼: %#03x
+ NOMOD NORM OVR PIC QVAL RD REL Ð ÐµÑ�ÑƒÑ€Ñ�Ð¸ Ð¿Ð¾Ñ‡Ð¸Ð½Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð· Ñ‚Ð°ÐºÐ¸Ð¼ Ð·Ñ�ÑƒÐ²Ð¾Ð¼: %#03x
  SHR Ð”Ñ€ÑƒÐ³Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x
  ÐžÐ±Ñ€Ð°Ð·Ð¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�:
  Ð¡Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·: 0x%08x 0x%08x
  Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ€Ñ�Ð´ÐºÑ–Ð² Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ‚Ð°ÐºÐ¸Ð¼ Ð·Ñ�ÑƒÐ²Ð¾Ð¼: %#03x
  Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ�: Ñ…Ð°Ñ€.: %d, Ñ‡Ð°Ñ�: %08lx, Ð²ÐµÑ€Ñ�Ñ–Ñ�: %d/%d, Ñ‡Ð¸Ñ�Ð»Ð¾Ð²Ñ– Ð½Ð°Ð·Ð²Ð¸: %d, Ñ–Ð´.: %d
  Ð¢Ñ€ÐµÑ‚Ñ� Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x
- UNI VEC VECEP WEAK WRT [64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– double] [BE8] [Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� ABI FDPIC] [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float FPA] [LE8] [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float Maverick] [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float VFP] [Ð’ÐµÑ€Ñ�Ñ–Ñ�1 EABI] [Ð’ÐµÑ€Ñ�Ñ–Ñ�2 EABI] [Ð’ÐµÑ€Ñ�Ñ–Ñ�3 EABI] [Ð’ÐµÑ€Ñ�Ñ–Ñ�4 EABI] [Ð’ÐµÑ€Ñ�Ñ–Ñ�5 EABI] [Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ RAM XGATE] [Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ abi] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°] [Ñ„Ñ–ÐºÑ�. Ñ€Ð¾Ð·Ñ‚.] [Ñ‡Ð¸Ñ�Ð»Ð° Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ Ð¿ÐµÑ€ÐµÐ´Ð°Ð½Ð¾ Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ] [g-float] [ABI Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸] [ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ] [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÐ´ÑƒÑŽÑ‚ÑŒ Ñ–Ð½ÑˆÐ¸Ð¼] [Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ=Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð· Ð±Ð°Ð½ÐºÐ°Ð¼Ð¸] [Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ=Ð¿Ð»Ð¾Ñ�ÐºÐ° Ð¼Ð¾Ð´ÐµÐ»ÑŒ] [Ð½Ð¾Ð²Ð¸Ð¹ ABI] [Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ abi] [Ð½Ðµ-pic] [Ð½Ðµ 32-Ð±Ñ–Ñ‚.Ñ€ÐµÐ¶Ð¸Ð¼] [Ñ�Ñ‚Ð°Ñ€Ð¸Ð¹ ABI] [pic] [Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¹ Ð²Ñ–Ð´ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ—] [Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»] [ABI Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸] [Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð° FP] [Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²] [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ� _] [Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ISA] [Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²] [v10 Ñ‚Ð° v32] [v32] Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²:  Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ GST
- Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²: vbn: %u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u
+ UNI VEC VECEP WEAK WRT [64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– double] [BE8] [Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� ABI FDPIC] [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float FPA] [LE8] [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float Maverick] [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float VFP] [Ð’ÐµÑ€Ñ�Ñ–Ñ�1 EABI] [Ð’ÐµÑ€Ñ�Ñ–Ñ�2 EABI] [Ð’ÐµÑ€Ñ�Ñ–Ñ�3 EABI] [Ð’ÐµÑ€Ñ�Ñ–Ñ�4 EABI] [Ð’ÐµÑ€Ñ�Ñ–Ñ�5 EABI] [Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ RAM XGATE] [Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ abi] [abi=64] [abi=EABI32] [abi=EABI64] [abi=N32] [abi=O32] [abi=O64] [abiv%ld] [d-float] [Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°] [Ñ„Ñ–ÐºÑ�. Ñ€Ð¾Ð·Ñ‚.] [Ñ‡Ð¸Ñ�Ð»Ð° Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ Ð¿ÐµÑ€ÐµÐ´Ð°Ð½Ð¾ Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ] [g-float] [ABI Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸] [ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ] [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÐ´ÑƒÑŽÑ‚ÑŒ Ñ–Ð½ÑˆÐ¸Ð¼] [Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ=Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð· Ð±Ð°Ð½ÐºÐ°Ð¼Ð¸] [Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ=Ð¿Ð»Ð¾Ñ�ÐºÐ° Ð¼Ð¾Ð´ÐµÐ»ÑŒ] [Ð½Ð¾Ð²Ð¸Ð¹ ABI] [Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ abi] [Ð½Ðµ-pic] [Ð½Ðµ 32-Ð±Ñ–Ñ‚.Ñ€ÐµÐ¶Ð¸Ð¼] [Ñ�Ñ‚Ð°Ñ€Ð¸Ð¹ ABI] [pic] [Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¹ Ð²Ñ–Ð´ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ—] [Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»] [ABI Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸] [Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð° FP] [Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²] [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ� _] [Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ISA] [Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²] [v10 Ñ‚Ð° v32] [v32] Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²:  Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²: vbn: %u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u
  Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: vbn: %u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u (0x%x)
+ Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOTPCREL Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ð· --no-relax
  Ð´Ð°Ð½Ñ– Ñ‰Ð¾Ð´Ð¾ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ rva:  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: 0x%04x Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: vbn: %u, Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²: %u
  Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€: 0x%08x, Ð½Ð°Ð·Ð²Ð°: %.*s
  ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u
@@ -1021,35 +1040,55 @@ X-Generator: Lokalize 2.0
      		Ð°Ð´Ñ€ÐµÑ�Ð°   Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ñƒ  Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—  32Ð± Ð²Ð¸Ðº. Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½ÑŒ EH
  vma:            Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð§Ð°Ñ�Ð¾Ð²Ð°    Ð›Ð°Ð½Ñ†ÑŽÐ¶Ð¾Ðº Ð�Ð°Ð·Ð²Ð°     ÐŸÐµÑ€ÑˆÐ¸Ð¹
                  Ð²ÐºÐ°Ð·.   ÐŸÐ¾Ð·Ð½Ð°Ñ‡ÐºÐ°  Ñ�Ð¿Ñ€Ñ�Ð¼.   DLL       ÑˆÐ»ÑŽÐ·
-#<Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ ÐºÐ¾Ð´ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸>%03x Ð›Ð¸Ñ�Ñ‚Ð¾Ðº %*.s: Ð°Ð´Ñ€ÐµÑ�Ð°: %#08lx, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %#08lx, ÐºÐ¾Ð´Ð¾Ð²Ð° Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ°: %d
-Ð’Ñ…Ñ–Ð´ Ð´Ð¾ %03x %*.s: %C: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚
+#<Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ ÐºÐ¾Ð´ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸>%%X%%P: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÑƒÐ²Ð°Ñ‚Ð¸Ñ�Ñ� Ð·Ð·Ð¾Ð²Ð½Ñ–, Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC
+%%X%%P: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»
+%03x Ð›Ð¸Ñ�Ñ‚Ð¾Ðº %*.s: Ð°Ð´Ñ€ÐµÑ�Ð°: %#08lx, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %#08lx, ÐºÐ¾Ð´Ð¾Ð²Ð° Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ°: %d
+Ð’Ñ…Ñ–Ð´ Ð´Ð¾ %03x %*.s: %F%P: %pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð»Ñ� --gc-sections Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð¸Ð¹ (linked-to) Ñ€Ð¾Ð·Ð´Ñ–Ð»
+%F%P: %pB(%s): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð¾Ð½ÐºÐ¾Ð³Ð¾ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ: %E
+%F%P: %pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»
+%F%P: %pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB
+%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ñƒ ÐºÐ°Ñ€Ñ‚Ñƒ DT_RELR
+%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñƒ ÐºÐ°Ñ€Ñ‚Ñƒ DT_RELR
+%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�
+%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ»
+%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�
+%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�
+%F%P: %pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾
+%F%P: %pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾: Ð½Ð¾Ð²Ð¸Ð¹ (%lu) != Ñ�Ñ‚Ð°Ñ€Ð¸Ð¹ (%lu)
+%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ Â«%pAÂ» Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.
+%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ Â«%pAÂ» Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð°Ð²Ñ‚Ð¾Ð½Ð°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ�: %E
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ð½Ð°ÐºÐ»Ð°Ð´Ð½Ñ– ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸: %E
 %F%P: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ–: %pB
+%F%P: Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…: Â«%pAÂ»
 %F%P: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» STT_GNU_IFUNC Â«%sÂ» Ð· Ñ€Ñ–Ð²Ð½Ñ–Ñ�Ñ‚ÑŽ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ñƒ Â«%pBÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ñƒ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñ�Ñ†Ñ–ÑŽ Ð· -fPIE Ñ– Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� -pie
-%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOTPCREL; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ð· --no-relax
-%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT BND
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚ÐµÐ¹ GNU
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .eh_frame PLT GOT
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT GOT
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ GOT
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT Ñ–Ð· ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼ IBT
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .eh_frame PLT
+%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .sframe PLT
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ VxWorks
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ ifunc
+%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .sframe PLT
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .eh_frame PLT
+%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð¼Ñ–Ñ€Ñ�Ñ‚Ð¸ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�
 %F%pA: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€
 %F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ñ�ÑƒÐ²Ñƒ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ PC Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– PLT GOT Ð´Ð»Ñ� Â«%sÂ»
 %F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ñ�ÑƒÐ²Ñƒ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ PC Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– PLT Ð´Ð»Ñ� Â«%sÂ»
 %F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� Ð³Ñ–Ð»Ð¾Ðº Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– PLT Ð´Ð»Ñ� Â«%sÂ»
 %H __tls_get_addr Ð²Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð¾ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚, Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–ÑŽ TLS Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾
 %H: Ñƒ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” __tls_get_addr, Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–ÑŽ TLS Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾.
+%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ñ‰Ð¾Ð´Ð¾ %pT Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
 %H: %s Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %d
 %H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ð´Ð»Ñ� Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%pTÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
+%H: %s Ð¿Ð¾Ð·Ð° Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼
 %H: %s Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼
 %H: %s Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° ÑƒÑ�ÑƒÐ½ÑƒÑ‚Ð¸Ð¹ Ñƒ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ– Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð·Ð°Ð¿Ð¸Ñ� TOC
 %H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %d
+%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‚ÑƒÑ‚ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
 %H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ°Ñ… Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– PIE
 %H: %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ TLS Â«%pTÂ»
 %H: %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð¿Ð¾Ð·Ð° TLS Â«%pTÂ»
@@ -1071,23 +1110,26 @@ X-Generator: Lokalize 2.0
 %H: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %u
 %H: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %u
 %H: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ñ–Ð· Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾ÑŽ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¾ÑŽ
+%H: Ð´Ð»Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— got/toc
 %H: Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ñ‚Ð¾Ðº Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»
 %H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚
 %H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: %s
 %H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
+%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿Ð¾Ð²ÐµÑ€Ñ‚Ð°Ñ” Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %x
 %H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ–
 %H: Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ� Ð¿Ñ€Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ, Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ðµ Ð²Ð¸Ñ‰Ðµ, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ñ�Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ÐµÐ½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼ Ð´Ð¾ Â«%s+%vÂ»
-%H: Ð´Ð»Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— toc
+%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ‚Ð¸Ð¿Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %u Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
 %H: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ %s Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»
 %H: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»
 %H: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s, Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#x.
+%H: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚
 %P%F: --relax Ñ– -r Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾
 %P%X: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸: %E
-%P%X: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�, Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� IFUNC. Ð¡Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ð· -fPIC
 %P%X: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�, Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�
-%P: %H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� bss-plt Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
 %P: %H: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ñ–Ð· Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾ÑŽ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ %x
 %P: %pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ð´Ð»Ñ� Â«%pTÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
+%P: %pB: Ð·Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ�: Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ðµ Ð²Ð¸Ñ‰Ðµ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ� Ð½Ðµ Ð±ÐµÑ€Ðµ Ð´Ð¾ ÑƒÐ²Ð°Ð³Ð¸ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ñ�Ð¼Ñ–Ñ‚Ñ‚Ñ� Ð·Ð°Ñ�Ð¾Ð±Ð¾Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�
+%P: %pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ %s
 %P: %pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ñƒ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»
 %P: %pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Â«%pAÂ»
 `%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� opd Ñƒ toc Ð´Ð»Ñ� Â«%pTÂ»
@@ -1096,20 +1138,32 @@ X-Generator: Lokalize 2.0
 %P: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»
 %P: Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð¾Ñ‡Ð¾Ðº Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… %pB Ñ– %pB
 %P: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ–Ñ�Ñ‚ÑŽ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
+%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ… Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ GNU Ñ–Ð· DT_TEXTREL Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ— Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿ÑƒÑ�ÐºÑƒ; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· %s
+%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ PDE
+%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ PIE
 %P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�
 %P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚ÐµÐºÑ�Ñ‚Ñƒ Ñ– Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ… Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ GNU Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ— Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿ÑƒÑ�ÐºÑƒ
-%X%C: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚
+%X%H: %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð¿Ð¾Ð·Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼
+%X%H: %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð°Ð´Ñ€ÐµÑ�Ð° Ñ†Ñ–Ð»Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ” Ð½ÐµÐ¿Ð°Ñ€Ð½Ð¾ÑŽ
+%X%H: %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� %d
 %X%H: Ð²Ð¸ÐºÐ»Ð¸Ðº @local ifunc %s
 %X%H: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÑŽÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA Ð½Ð° JALX: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ
 %X%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC
+%X%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚
 %X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ JALX Ð´Ð¾ Ñ‚Ð¾Ð³Ð¾ Ñ�Ð°Ð¼Ð¾Ð³Ð¾ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ ISA
 %X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA
 %X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° bss-plt -fPIC ifunc %s
 %X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð¼Ñ–Ð¶ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ð· ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼ Ð²Ð·Ð°Ñ”Ð¼Ð½Ð¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼
+%X%P: %H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� bss-plt Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
 %X%P: %pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð·Ñ�ÑƒÐ²Ñƒ %V Ð½Ðµ Ð¼Ð°Ñ” Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�
 %X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ
 %X%P: %pB(%pA): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
 %X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð¿Ð¾Ð²ÐµÑ€Ñ‚Ð°Ñ” Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %x
+%X%P: %pB(%pA): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
+%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ
+%X%P: %pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ñ‰Ð¾Ð´Ð¾ %pT Ñ�Ðº Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ glibc
+%X%P: %pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ %s
+%X%P: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¾Ð±'Ñ”ÐºÑ‚Ð° Â«%pBÂ»
 %X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ
 %X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°
 %X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�
@@ -1120,23 +1174,27 @@ X-Generator: Lokalize 2.0
 %X%P: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ Ñ�Ñ‚ÐµÐºÐ°/lrlive: %E
 %X%P: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚ÐµÐºÑ�Ñ‚Ñƒ Ñ– Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ… Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ GNU Ð¿Ñ€Ð¸Ð·Ð²ÐµÐ´Ðµ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ— Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿ÑƒÑ�ÐºÑƒ
 Ð�Ð° %XÂ«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» %pB: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» %pB
-%pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ [Â«%pAÂ» Ñƒ %pB] Ñ– Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ [Â«%pAÂ» Ñƒ %pB] Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸%pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ– Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸%pA:0x%v .brinfo lrlive (%u) Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�Ñ”Ñ‚ÑŒÑ�Ñ� Ð²Ñ–Ð´ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ ÑˆÐ»Ñ�Ñ…Ð¾Ð¼ Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ (%u)
+%pA:0x%v .brinfo lrlive (%u) Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�Ñ”Ñ‚ÑŒÑ�Ñ� Ð²Ñ–Ð´ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ ÑˆÐ»Ñ�Ñ…Ð¾Ð¼ Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ (%u)
 %pA:0x%v Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹
-%pB (%s): Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%#lx) Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾.opd %pB Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ— ABI %d%pB Ñ– %pB Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ€Ñ–Ð·Ð½Ð¸Ñ… ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹%pB Ñ– %pB Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ�Ð´ÐµÑ€Ñƒ %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´ v32 CRIS, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸Ñƒ %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ñ” ÐºÐ¾Ð´Ð¾Ð¼ v32 CRIS, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸Ð´Ð»Ñ� %pB Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð¾Ð±Ð¸Ð´Ð²Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Tag_MPextension_use, current Ñ– legacy%pB Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ‚Ð¸ %sÐ Ð¾Ð·Ð´Ñ–Ð» %pB, %pA, Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð³Ñ€ÑƒÐ¿Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð²%pB Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %lu Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð» SHT_SYMTAB_SHNDX, Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð´Ð¾Ð²Ð³Ñ– Ñ†Ñ–Ð»Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ–Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ, Ð° Ñƒ %pB â€” 128-Ð±Ñ–Ñ‚Ð¾Ð²Ñ–%pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð¸Ð¹ ABI AltiVec, %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð¸Ð¹ ABI SPEÑƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð´Ð¾Ð²Ð³Ñ– Ñ†Ñ–Ð»Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ–Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ IBM, Ð° Ñƒ %pB â€” IEEEÑƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ, Ð° Ñƒ %pB â€” Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ð»Ñ� Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽÑƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ», Ð° Ñƒ %pB â€” Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð°Ñƒ %pB r3/r4 Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð´Ð»Ñ� Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ� Ð¼Ð°Ð»Ð¸Ñ… Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€, Ð° Ñƒ %pB Ð´Ð»Ñ� Ñ†ÑŒÐ¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ%pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� e_flags 0x%lx%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ»%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB(%pA): Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚ÐµÐ¹%pB(%pA): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ¾Ñ… Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ TLS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %ld%pB(%pA): Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� %s%pB(%pA): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð´Ð¾Ð²Ð³Ð¸Ñ… Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ–Ñ… Ð³Ñ–Ð»Ð¾Ðº Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð°Ñ… Ñ–Ð· Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ SHF_ARM_PURECODE Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ†Ñ–Ð»ÐµÐ¹ Ð· Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÐµÐ¼ M, Ñƒ Ñ�ÐºÐ¸Ñ… Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ movw.%pB(%pA): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ…%pB(%pA): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñƒ %d%pB(%pA+%#lx): Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– stabs Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ñ�Ð´ÐºÐ°%pB(%pA+%#x): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½ÑŒ Ñƒ Ð½ÐµÐ¾Ñ�Ñ‚Ð°Ð½Ð½Ñ–Ð¹ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ð±Ð»Ð¾ÐºÑƒ IT: Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾. Ð¡ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ gcc -mrestrict-it, Ñ‰Ð¾Ð± Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ð¾Ð´Ð½Ñƒ  Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ Ð½Ð° Ð±Ð»Ð¾Ðº IT.%pB(%pA+0x%lx): Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð¸Ð»ÑŽ 16A Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— 0x%08x%pB(%pA+0x%lx): Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð¸Ð»ÑŽ 16D Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— 0x%08x%pB(%pA+0x%v): Ð²Ð¸ÐºÐ»Ð¸Ðº Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, %pB(%pA), Ð°Ð½Ð°Ð»Ñ–Ð· Ñ” Ð½ÐµÐ¿Ð¾Ð²Ð½Ð¸Ð¼
+%pB (%s): Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%#lx) Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾.opd %pB Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ— ABI %d%pB Ñ– %pB Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ€Ñ–Ð·Ð½Ð¸Ñ… ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹%pB Ñ– %pB Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ�Ð´ÐµÑ€Ñƒ %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´ v32 CRIS, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸Ñƒ %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ñ” ÐºÐ¾Ð´Ð¾Ð¼ v32 CRIS, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸Ð´Ð»Ñ� %pB Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð¾Ð±Ð¸Ð´Ð²Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Tag_MPextension_use, current Ñ– legacy%pB Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ‚Ð¸ %sÐ Ð¾Ð·Ð´Ñ–Ð» %pB, %pA, Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð³Ñ€ÑƒÐ¿Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð²%pB Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %lu Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð» SHT_SYMTAB_SHNDX, Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð´Ð¾Ð²Ð³Ñ– Ñ†Ñ–Ð»Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ–Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ, Ð° Ñƒ %pB â€” 128-Ð±Ñ–Ñ‚Ð¾Ð²Ñ–%pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð¸Ð¹ ABI AltiVec, %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð¸Ð¹ ABI SPEÑƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð´Ð¾Ð²Ð³Ñ– Ñ†Ñ–Ð»Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ–Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ IBM, Ð° Ñƒ %pB â€” IEEEÑƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ, Ð° Ñƒ %pB â€” Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ð»Ñ� Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽÑƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ», Ð° Ñƒ %pB â€” Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð°Ñƒ %pB r3/r4 Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð´Ð»Ñ� Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ� Ð¼Ð°Ð»Ð¸Ñ… Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€, Ð° Ñƒ %pB Ð´Ð»Ñ� Ñ†ÑŒÐ¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ%pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� e_flags 0x%lx%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ»%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ %zu Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¼%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %zu Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %zu Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %zu Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¾Ð³Ð¾ Ð½ÐµÐ¼Ð°Ñ”%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð½ÐµÑ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¼!%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾ Ð´Ð²Ñ–Ñ‡Ñ–%pB(%pA): Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÐ²Ð°Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ info, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ñ†ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð½ÐµÐ¼Ð°Ñ” Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ–%pB(%pA): Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸Ðº Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ info Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB(%pA): Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚ÐµÐ¹%pB(%pA): Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð² Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²%pB(%pA): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ¾Ñ… Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ TLS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %ld%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %zu Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %lu%pB(%pA): Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� %s%pB(%pA): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð´Ð¾Ð²Ð³Ð¸Ñ… Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ–Ñ… Ð³Ñ–Ð»Ð¾Ðº Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð°Ñ… Ñ–Ð· Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ SHF_ARM_PURECODE Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ†Ñ–Ð»ÐµÐ¹ Ð· Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÐµÐ¼ M, Ñƒ Ñ�ÐºÐ¸Ñ… Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ movw.%pB(%pA): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ…%pB(%pA): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñƒ %d%pB(%pA+%#lx): Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– stabs Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ñ�Ð´ÐºÐ°%pB(%pA+%#x): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½ÑŒ Ñƒ Ð½ÐµÐ¾Ñ�Ñ‚Ð°Ð½Ð½Ñ–Ð¹ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ð±Ð»Ð¾ÐºÑƒ IT: Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾. Ð¡ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ gcc -mrestrict-it, Ñ‰Ð¾Ð± Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ð¾Ð´Ð½Ñƒ  Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ Ð½Ð° Ð±Ð»Ð¾Ðº IT.%pB(%pA+0x%lx): Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð¸Ð»ÑŽ 16A Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— 0x%08x%pB(%pA+0x%lx): Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð¸Ð»ÑŽ 16D Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— 0x%08x%pB(%pA+0x%v): Ð²Ð¸ÐºÐ»Ð¸Ðº Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, %pB(%pA), Ð°Ð½Ð°Ð»Ñ–Ð· Ñ” Ð½ÐµÐ¿Ð¾Ð²Ð½Ð¸Ð¼
 %pB(%s): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ð½Ðµ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾; Ð¿ÐµÑ€ÑˆÐ° Ð·Ð³Ð°Ð´ÐºÐ°: %pB: Ð²Ð¸ÐºÐ»Ð¸Ðº %s Ð´Ð¾ %s%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA:
   Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ñ” ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–; Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾ÑŽ Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¾ÑŽ Ñ” ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð², Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ñ–Ð»ÑŽÐ¹Ñ‚Ðµ Ð· -fPIC%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½ÐµÐ¼Ð°Ñ” PLT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½ÐµÐ¼Ð°Ñ” Ð½Ñ– PLT, Ð½Ñ– GOT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– %s Ñ” Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Â«%sÂ», Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ð°Ð´Ñ€ÐµÑ�Ð½Ð° Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ° Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ�?%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ–Ð· Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾ÑŽ Ð²Ð¸Ð´Ð¸Ð¼Ñ–Ñ�Ñ‚ÑŽ. ÐœÐ¾Ð¶Ð»Ð¸Ð²Ð¾, Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ–?%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: Â«%sÂ»%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ð¾Ð·Ð° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¾ÑŽ. ÐœÐ¾Ð¶Ð»Ð¸Ð²Ð¾, Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ–?%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA:
-  Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ñ�Ð»Ñ–Ð´ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ñ–Ð»ÑŽÐ¹Ñ‚Ðµ Ð· -fPIC%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð±ÐµÐ· Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð³Ð¾ GOT%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¾Ð±â€™Ñ”ÐºÑ‚ Ð²ÐµÑ€Ñ�Ñ–Ñ— 10/32 Ð½Ðµ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� PIC%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ñ�Ð»Ñ–Ð´ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ñ–Ð»ÑŽÐ¹Ñ‚Ðµ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� !samegp Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð±ÐµÐ· .prologue: %s%pB: %pA Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…%pB: %pA Ñ” Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¼%pB: %pA Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x > 0xffff%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ� %s Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼%pB: %s Ð½Ðµ Ñ” Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¸Ð¼%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ‚Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: %s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ñ— Ð²ÐµÑ€Ñ�Ñ–Ñ— %d%pB: %s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ�, %u (Ð¼Ð°ÐºÑ�Ð¸Ð¼ÑƒÐ¼ â€” %d)%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: 0x%lx > 0xffff'%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ‚Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ --in-implib Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐº Secure Gateway%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� .gnu.version_d%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� .gnu.version_r%pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿Ñ–Ð´Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° .got Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 64ÐºÐ‘ (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ â€” %d)%pB: .opd Ð½Ðµ Ñ” Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¸Ð¼ Ð¼Ð°Ñ�Ð¸Ð²Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² opd%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .preinit_array Ñƒ DSO%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .rsrc%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ .rsrc%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� @gprel Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� @internal Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� @pcrel Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: ABI Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· ABI Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—%pB: ABI Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ñ–Ð· Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾ÑŽ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ”ÑŽ:
-  Ñ†Ñ–Ð»ÑŒ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—, Â«%sÂ», Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Â«%sÂ»%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ABI: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: Ð²ÐµÑ€Ñ�Ñ–Ñ� ABI %ld Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾ÑŽ Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ ABI %ld Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ASE: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: Ð¾Ð±Ñ€Ð°Ð·Ð¸ BE8 Ñ” Ñ‡Ð¸Ð½Ð½Ð¸Ð¼Ð¸ Ð»Ð¸ÑˆÐµ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– big-endian%pB: Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ %d%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼%pB: Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– GNU_MBIN Â«%pAÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ð»Ðµ sh_info: %d%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� GOT: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð· 8- Ð°Ð±Ð¾ 16-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ > %d%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� GOT: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð· 8-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ > %d%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ð²ÐµÐºÑ‚Ð¾Ñ€Ñ–Ð² ISR Ñ–Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ– Ñ” %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸, Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ– Ñ” %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð¼Ñƒ ELF (EM: %d)%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ SB, Ð°Ð»Ðµ __c6xabi_DSBT_BASE Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» SHT_GROUP [Ñ–Ð½Ð´ÐµÐºÑ� %d] Ð½Ðµ Ð¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² SHF_GROUP%pB: Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ ÐºÐ¾Ð´ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ TLS Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ TLS Ð½Ðµ Ñ” Ñ�ÑƒÑ�Ñ–Ð´Ð½Ñ–Ð¼Ð¸:%pB: Ð¿ÐµÑ€ÑˆÐ¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ñƒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ– PT_DYNAMIC Ð½Ðµ Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ .dynamic%pB: Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚ XCOFF, Ñ…Ð¾Ñ‡Ð° Ð´Ð°Ð½Ñ– XCOFF Ð½Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑŽÑ‚ÑŒÑ�Ñ�%pB: __gp Ð½Ðµ Ð²ÐºÑ€Ð¸Ð²Ð°Ñ” ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð´Ð°Ð½Ð¸Ñ…%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ FDPIC, Ñ‚Ð°Ðº Ñ– Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ‚Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ FDPIC%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ñ‚Ð°Ðº Ñ– Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: Â«%sÂ» Ñ– Ñ—Ñ— Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°ÑŽÑ‚ÑŒ Ñƒ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð°Ñ….%pB: Â«%sÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ð¾Ð¼ÐµÑ€Ð¸ Ñ€Ñ�Ð´ÐºÑ–Ð², Ð°Ð»Ðµ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: Â«%sÂ» Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð°, Ð°Ð»Ðµ Ð½Ðµ Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ñ… Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-PLT Â«%sÂ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÑ†Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ– Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð· Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° (Ñ�Ð»Ñ–Ð´ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ñ„Ð°Ð¹Ð» Ñ–Ð· -fPIC ?)%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ».%pB: Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ got Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼%pB: Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ plt Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼%pB: Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº aout Ð²ÐºÐ°Ð·ÑƒÑ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñƒ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ð°Ð½Ð¸Ñ…: %ld%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ–Ð· Ð½ÐµÑ€Ñ�Ð´ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (Ð½Ð¾Ð¼ÐµÑ€ %d)%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ�ÑƒÐ¼Ñ–Ñˆ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–Ð² FDPIC Ñ– Ð½Ðµ-FDPIC%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð²Ð¸Ð¿Ð¸Ñ�Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %d%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð½Ð°Ð·Ð²Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%sÂ»%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ ihex_read_section%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: Â«MainÂ» Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñƒ %s, Ð° Ð½Ðµ Ñƒ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %s
-%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: %d%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¾Ñ�Ð½Ð¾Ð²Ð°-Ð¿Ð»ÑŽÑ�-Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñƒ: %s Ñƒ %pA%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¾Ñ�Ð½Ð¾Ð²Ð°-Ð¿Ð»ÑŽÑ�-Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñƒ: (Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ) Ñƒ %pA%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² a.out Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² a.out Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ%pB: Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ– %s Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ RVE Ñ–Ð· Ñ–Ð½ÑˆÐ¾ÑŽ Ñ†Ñ–Ð»Ð»ÑŽ%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð· Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %d, %d Ð±Ð°Ð¹Ñ‚Ñ–Ð²
-%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %s%pB: Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ° Ñ�Ñ‚Ð¸Ñ�Ð½ÑƒÑ‚Ð¸Ñ… Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Alpha Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð°. Ð¡ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ�Ð¼Ð¸ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñ�Ñ‚Ð¾Ñ€Ð° Ð°Ð±Ð¾ objZ Ð´Ð»Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð½ÐµÑ�Ñ‚Ð¸Ñ�Ð½ÐµÐ½Ð¸Ñ… Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð².%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» fdpic Ð´Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ-fdpic%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» Ð½Ðµ-fdpic Ð´Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° fdpic%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸ %s Ñ‚Ð° %s%pB: Ð·Ð¼Ñ–Ð½Ð° Ñƒ gp: BRSGP %s%pB: ÐºÐ»Ð°Ñ� %d, Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¼Ð°Ñ” Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ %s -mtune=%s Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ %s -mtune=%s%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¾Ñ— Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸, Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¾ÑŽ Ð¶ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ” 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð°%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸ Ð· Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð², Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ñ” Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð° Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸ Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð², Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ñ” Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð° Ð·Ñ– Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ð· -mrelocatable%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· %s Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ð· %s%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· %s Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñƒ Ñ�ÐºÐ¸Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· -mrelocatable Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %pA Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %pA%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»
+  Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ñ�Ð»Ñ–Ð´ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ñ–Ð»ÑŽÐ¹Ñ‚Ðµ Ð· -fPIC%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð±ÐµÐ· Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð³Ð¾ GOT%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¾Ð±â€™Ñ”ÐºÑ‚ Ð²ÐµÑ€Ñ�Ñ–Ñ— 10/32 Ð½Ðµ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� PIC%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ñ�Ð»Ñ–Ð´ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ñ–Ð»ÑŽÐ¹Ñ‚Ðµ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� !samegp Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð±ÐµÐ· .prologue: %s%pB: %pA Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…%pB: %pA Ñ” Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¼%pB: %pA Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x > 0xffff%pB: %s (Ð·Ñ�ÑƒÐ²: 0x%v, Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñ�Ñ‚Ñ–: 0x%v) Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñƒ %pB
+%pB: %s (Ð·Ñ�ÑƒÐ²: 0x%v, Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñ�Ñ‚Ñ–: 0x%v, Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº: 0x%v) Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñƒ %pB
+%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ� %s Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñ–Ð· Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu (>= sh_info %lu)%pB: %s Ð½Ðµ Ñ” Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¸Ð¼%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ‚Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: %s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ñ— Ð²ÐµÑ€Ñ�Ñ–Ñ— %d%pB: %s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ�, %u (Ð¼Ð°ÐºÑ�Ð¸Ð¼ÑƒÐ¼ â€” %d)%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: 0x%lx > 0xffff'%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ‚Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ --in-implib Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐº Secure Gateway%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� .gnu.version_d%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� .gnu.version_r%pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿Ñ–Ð´Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° .got Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 64ÐºÐ‘ (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ â€” %d)%pB: .opd Ð½Ðµ Ñ” Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¸Ð¼ Ð¼Ð°Ñ�Ð¸Ð²Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² opd%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .preinit_array Ñƒ DSO%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .rsrc%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ .rsrc%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� @gprel Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� @internal Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� @pcrel Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: ABI Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· ABI Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—%pB: ABI Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ñ–Ð· Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾ÑŽ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ”ÑŽ:
+  Ñ†Ñ–Ð»ÑŒ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—, Â«%sÂ», Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Â«%sÂ»%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ABI: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: Ð²ÐµÑ€Ñ�Ñ–Ñ� ABI %ld Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾ÑŽ Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ ABI %ld Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ASE: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: ÐºÐ¾Ñ€Ð¸Ð³ÑƒÑ”Ð¼Ð¾ Ð³Ñ–Ð»ÐºÑƒ Ð½Ð° 0x%V Ð´Ð¾ Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s
+%pB: Ð¾Ð±Ñ€Ð°Ð·Ð¸ BE8 Ñ” Ñ‡Ð¸Ð½Ð½Ð¸Ð¼Ð¸ Ð»Ð¸ÑˆÐµ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– big-endian%pB: Ñƒ XCOFF64 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ C_STAT%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %s%pB: Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ %d%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼%pB: Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– GNU_MBIND Â«%pAÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ð»Ðµ sh_info: %d%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� GOT: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð· 8- Ð°Ð±Ð¾ 16-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ > %d%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� GOT: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð· 8-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ > %d%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ð²ÐµÐºÑ‚Ð¾Ñ€Ñ–Ð² ISR Ñ–Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ– Ñ” %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸, Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ– Ñ” %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸%pB: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð¾ Ð· %lu Ð´Ð¾ %u
+%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð¼Ñƒ ELF (EM: %d)%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ SB, Ð°Ð»Ðµ __c6xabi_DSBT_BASE Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» SHT_GROUP [Ñ–Ð½Ð´ÐµÐºÑ� %d] Ð½Ðµ Ð¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² SHF_GROUP%pB: Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ ÐºÐ¾Ð´ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ TLS Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ TLS Ð½Ðµ Ñ” Ñ�ÑƒÑ�Ñ–Ð´Ð½Ñ–Ð¼Ð¸:%pB: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð·Ð¼Ñ–Ñ�Ñ‚Ñƒ Â«%sÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_TLSML, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ�ÐµÐ±Ðµ%pB: Ð¿ÐµÑ€ÑˆÐ¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ñƒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ– PT_DYNAMIC Ð½Ðµ Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ .dynamic%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %x Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ– ELF. Ð’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ Ð½ÑŒÐ¾Ð³Ð¾ ABS.%pB: Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚ XCOFF, Ñ…Ð¾Ñ‡Ð° Ð´Ð°Ð½Ñ– XCOFF Ð½Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑŽÑ‚ÑŒÑ�Ñ�%pB: __gp Ð½Ðµ Ð²ÐºÑ€Ð¸Ð²Ð°Ñ” ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð´Ð°Ð½Ð¸Ñ…%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ FDPIC, Ñ‚Ð°Ðº Ñ– Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ‚Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ FDPIC%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ñ‚Ð°Ðº Ñ– Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: Â«%sÂ» Ñ– Ñ—Ñ— Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°ÑŽÑ‚ÑŒ Ñƒ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð°Ñ….%pB: Â«%sÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ð¾Ð¼ÐµÑ€Ð¸ Ñ€Ñ�Ð´ÐºÑ–Ð², Ð°Ð»Ðµ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: Â«%sÂ» Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð°, Ð°Ð»Ðµ Ð½Ðµ Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ñ… Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-PLT Â«%sÂ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÑ†Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ– Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð· Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° (Ñ�Ð»Ñ–Ð´ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ñ„Ð°Ð¹Ð» Ñ–Ð· -fPIC ?)%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ».%pB: Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ got Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼%pB: Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ plt Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼%pB: ÐºÐ¾Ñ€Ð¸Ð³ÑƒÑ”Ð¼Ð¾ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ FileAlignment%pB: ÐºÐ¾Ñ€Ð¸Ð³ÑƒÑ”Ð¼Ð¾ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñƒ SectionAlignment%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ–Ð· Ð½ÐµÑ€Ñ�Ð´ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (Ð½Ð¾Ð¼ÐµÑ€ %d)%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ�ÑƒÐ¼Ñ–Ñˆ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–Ð² FDPIC Ñ– Ð½Ðµ-FDPIC%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð²Ð¸Ð¿Ð¸Ñ�Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %d%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð½Ð°Ð·Ð²Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%sÂ»%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ ihex_read_section%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: %d%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¾Ñ�Ð½Ð¾Ð²Ð°-Ð¿Ð»ÑŽÑ�-Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñƒ: %s Ñƒ %pA%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¾Ñ�Ð½Ð¾Ð²Ð°-Ð¿Ð»ÑŽÑ�-Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñƒ: (Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ) Ñƒ %pA%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² a.out Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² a.out Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ%pB: Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ– %s Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ RVE Ñ–Ð· Ñ–Ð½ÑˆÐ¾ÑŽ Ñ†Ñ–Ð»Ð»ÑŽ%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±'Ñ”ÐºÑ‚ Ñ–Ð½ÑˆÐ¾Ð³Ð¾ ABI.%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð· Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %d, %d Ð±Ð°Ð¹Ñ‚Ñ–Ð²
+%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ– Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GOT%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %s%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ».%pB: Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ° Ñ�Ñ‚Ð¸Ñ�Ð½ÑƒÑ‚Ð¸Ñ… Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Alpha Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð°. Ð¡ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ�Ð¼Ð¸ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñ�Ñ‚Ð¾Ñ€Ð° Ð°Ð±Ð¾ objZ Ð´Ð»Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð½ÐµÑ�Ñ‚Ð¸Ñ�Ð½ÐµÐ½Ð¸Ñ… Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð².%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» fdpic Ð´Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ-fdpic%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» Ð½Ðµ-fdpic Ð´Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° fdpic%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸ %s Ñ‚Ð° %s%pB: Ð·Ð¼Ñ–Ð½Ð° Ñƒ gp: BRSGP %s%pB: ÐºÐ»Ð°Ñ� %d, Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¼Ð°Ñ” Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ %s -mtune=%s Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ %s -mtune=%s%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¾Ñ— Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸, Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¾ÑŽ Ð¶ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ” 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð°%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸ Ð· Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð², Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ñ” Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð° Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸ Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð², Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ñ” Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð° Ð·Ñ– Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ð· -mrelocatable%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· %s Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ð· %s%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· %s Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñƒ Ñ�ÐºÐ¸Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· -mrelocatable Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ ÑƒÐ¼Ð¾Ð²Ð½Ñƒ Ð³Ñ–Ð»ÐºÑƒ Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %pA Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %pA%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»
 %pB: csect Â«%sÂ» Ð½Ðµ Ñƒ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–%pB: Ð±ÐµÐ·Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´Ð½Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð±ÐµÐ· Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð° Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð±ÐµÐ·Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´Ð½Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOT R_386_GOT32X Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð±ÐµÐ· Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð° Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ñƒ LOCAL Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ð·Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼Ð¸ Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð°Ñ… Ð°Ð±Ð¾ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¸Ð¼Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼Ð¸%pB: dtp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� %s%pB: Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð¼Ð°Ñ” Ñ–Ð½ÑˆÐ¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚
 %pB: Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð¼Ð°Ñ” Ñ–Ð½ÑˆÐ¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€
 %pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚ Ð±ÐµÐ· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .loader%pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�
+%pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�
 %pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�
-%pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—%pB: Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾ÑŽ%pB: Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð¸Ñ…%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ABI Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Cortex-A8 Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð¾ Ð·Ð° Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Cortex-A8 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÐ° VFP11 Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ñ‚ÐµÐ¿Ñ–Ð½ÑŒ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %d Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Â«%pAÂ» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ: %#llx%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ñ– Ð´Ð°Ð½Ñ– Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 835769 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 843419 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð½Ð°Ð±Ð¾Ñ€Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ñ†ÑŒÐ¾Ð³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ ÐºÐ¾Ð¼Ð°Ð½Ð´ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ Â«%sÂ»; Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº %s Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñƒ Ñ€Ð°Ð½Ñ–ÑˆÐµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ %d Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ” Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ„Ð°Ð¹Ð»Ð° Ñ–/Ð°Ð±Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: search_nds32_elf_blank Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»Ñ�Ñ” Ð¿Ñ€Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð²ÑƒÐ·Ð¾Ð»%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– COMDAT%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI, %d%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð·Ð²â€™Ñ�Ð·ÐºÑ–Ð² Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÑƒ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…%pB: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð´Ð¾ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ%pB: ÐºÐ»Ð°Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² %s Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· %s%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� gotoff Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: gp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð¸Ñ…%pB: Ð½Ð° Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO%pB: Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾%pB: Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»
+%pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—%pB: Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾ÑŽ%pB: Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð¸Ñ…%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ABI Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Cortex-A8 Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð¾ Ð·Ð° Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Cortex-A8 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÐ° VFP11 Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ñ‚ÐµÐ¿Ñ–Ð½ÑŒ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %d Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Â«%pAÂ» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ: %#llx%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ: %ld%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ñ– Ð´Ð°Ð½Ñ– Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 835769 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 843419 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð½Ð°Ð±Ð¾Ñ€Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ñ†ÑŒÐ¾Ð³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ ÐºÐ¾Ð¼Ð°Ð½Ð´ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ Â«%sÂ»; Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº %s Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñƒ Ñ€Ð°Ð½Ñ–ÑˆÐµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ %d Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ” Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ„Ð°Ð¹Ð»Ð° Ñ–/Ð°Ð±Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: search_nds32_elf_blank Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»Ñ�Ñ” Ð¿Ñ€Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð²ÑƒÐ·Ð¾Ð»%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– COMDAT%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI, %d%pB: Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñƒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ– Ð²Ñ–Ð´ 0 Ð´Ð¾ %lu, Ð²Ñ‚Ñ–Ð¼, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ–Ð· Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð·Ð²â€™Ñ�Ð·ÐºÑ–Ð² Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÑƒ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…%pB: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð´Ð¾ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ%pB: ÐºÐ»Ð°Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² %s Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· %s%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� gotoff Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: gp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð¸Ñ…%pB: Ð½Ð° Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO%pB: Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾%pB: Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»
 %pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð½Ð°Ð·Ð²Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Â«%pAÂ»%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %ld Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ñ…%pB: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ‚Ð¸Ð¿Ð¸ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€. Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� â€” 0x%x. Ð’Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ– â€” 0x%x%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ» Ñ” Ñ†Ð¸ÐºÐ»Ð¾Ð¼%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð½Ð°Ð±Ð¾Ñ€Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ñ†ÑŒÐ¾Ð³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ ÐºÐ¾Ð¼Ð°Ð½Ð´ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ ihex_read_section%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², %pA, Ð¼Ñ–Ñ�Ñ‚Ð¸Ð² Ð´Ð°Ð½Ñ–
 %pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð· %d Ð´Ð¾ %d Ñ�Ð»Ñ–Ð²
-%pB: Ð½Ð° Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– SHT_GROUP [%u]%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸: Â«%sÂ»; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¸Ð¼, Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¼ Ñ– Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ‚Ð¸Ñ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Thumb.%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� %u Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s (Ñ–Ð½Ð´ÐµÐºÑ� %u)%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: YZ lop_end (%ld) Ð½Ðµ Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ñ‚ÐµÑ‚Ñ€Ð°Ð´ Ð´Ð¾ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ lop_stab (%ld)
+%pB: Ð½Ð° Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ NumberOfRvaAndSizes%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– SHT_GROUP [%u]%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸: Â«%sÂ»; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¸Ð¼, Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¼ Ñ– Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ‚Ð¸Ñ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Thumb.%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� %u Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s (Ñ–Ð½Ð´ÐµÐºÑ� %u)%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: YZ lop_end (%ld) Ð½Ðµ Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ñ‚ÐµÑ‚Ñ€Ð°Ð´ Ð´Ð¾ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ lop_stab (%ld)
 %pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� YZ = 1, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ YZ = %d Ð´Ð»Ñ� lop_quote
 %pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� y=0, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ y = %d Ð´Ð»Ñ� lop_fixrx
 %pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� z = 1 Ð°Ð±Ð¾ z = 2, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ z = %d Ð´Ð»Ñ� lop_fixo
@@ -1150,15 +1208,19 @@ X-Generator: Lokalize 2.0
 %pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: lop_end Ð½Ðµ Ñ” Ð¾Ñ�Ñ‚Ð°Ð½Ð½Ñ–Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ð¾Ð¼ Ñƒ Ñ„Ð°Ð¹Ð»Ñ–
 %pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� lopcode, Â«%dÂ»
 %pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ð»Ðµ sh_link (%d) Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð· Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %d%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»; Ñ†Ðµ Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ñ— Ð°Ð±Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»; Ñ†Ðµ Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ (global) Ð°Ð±Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¸Ð¹ (weak) Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—.%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»
-%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²; 0x%lx > 0xffff%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÑ”Ð¼Ð¾ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ Ð· 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ ÐºÐ¾Ð´Ð¾Ð¼%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð· 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� UltraSPARC-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ‚Ð° HAL-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð· Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¸Ð¼ pic Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ pic%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð·Ñ– Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð·Ñ– Ñ�Ñ‚Ð°Ð»Ð¸Ð¼ gp Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð·Ñ– Ð·Ð¼Ñ–Ð½Ð½Ð¸Ð¼ gp%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ñ– Ñ„Ð°Ð¹Ð»Ð¸ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� 16-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ†Ñ–Ð»Ð¸Ñ… (-mshort), Ð° Ñ€ÐµÑˆÑ‚Ñƒ Ñ„Ð°Ð¹Ð»Ñ–Ð² â€” Ð´Ð»Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ†Ñ–Ð»Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ»%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ñ– Ñ„Ð°Ð¹Ð»Ð¸ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ (-fshort-double), Ð° Ñ–Ð½ÑˆÑ– â€” Ð´Ð»Ñ� 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ.%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ñ– Ñ„Ð°Ð¹Ð»Ð¸ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� HCS12, Ñ–Ð½ÑˆÑ– Ð¶ â€” Ð´Ð»Ñ� HC12%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð· Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic ÐºÐ¾Ð´Ñƒ Ñƒ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð· Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¼ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� trap-on-NULL-dereference Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· Ð·Ð°Ñ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ� (trapping)%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�, %pA%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%sÂ»%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ñ–Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ” NULL Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ñ�Ñ‚Ð¾Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ–Ð· Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼%pB: Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ– Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ�%pB: Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ– Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ�%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ� XTY_LD Â«%sÂ»%pB: Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ðµ OMIT_FP Ñƒ %pA.%pB: Ð½ÐµÐ¼Ð°Ñ” Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¾ÑŽ %d Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: Ð½ÐµÐ¼Ð°Ñ” Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð½Ð°Ð·Ð²Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s%pB: Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð³Ñ€ÑƒÐ¿Ð¸ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 0
-%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ Â«%sÂ»%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ð³Ñ€ÑƒÐ¿Ð¸%pB: Ð½Ðµ-pic ÐºÐ¾Ð´ Ð· Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼ imm Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¼Ñ–Ñ�Ñ†Ñ� Ð´Ð»Ñ� Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸, Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· -N%pB: Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ STT_REGISTER Ð¼Ð¾Ð¶Ð½Ð° Ð¾Ð³Ð¾Ð»Ð¾ÑˆÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ %%g[2367]%pB: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ð´Ð»Ñ� Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð»Ñ�Ð½ÐºÐ¸ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ñƒ _bfd_elf_get_property%pB: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ (0x%x)%pB: pc-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: pc-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¾Ð±'Ñ”ÐºÑ‚Ð° lto Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð´Ð¾Ð´Ð°Ñ‚Ð¾Ðº%pB: Ð¹Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð±ÐµÐ· -fPIC?%pB: Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾%pB: Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹, Ð°Ð»Ðµ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ (0x%x) Ñƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Import Library Format%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–: %s Ñƒ %pA%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–: (Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ) Ñƒ %pA%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð½ÐµÑ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¸Ð¼ Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: %ld%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ñ… Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ Ð· %s Ð´Ð¾ %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ %s%sÂ«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� %s%s%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ STT_GNU_IFUNC Â«%sÂ» Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ”Ñ‚ÑŒÑ�Ñ� %s%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ STT_GNU_IFUNC Â«%sÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ð°Ð±Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� %s; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– x32 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÑƒÐ²Ð°Ñ‚Ð¸Ñ�Ñ� Ð·Ð·Ð¾Ð²Ð½Ñ–, Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ R_386_GOTOFF Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— %s Â«%sÂ» Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_386_GOTOFF Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ %s, Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ R_X86_64_GOTOFF64 Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— %s Â«%sÂ» Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_X86_64_GOTOFF64 Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ %s, Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð¼Ñƒ ELF (EM: %d)%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð·Ð¼Ñ–Ñ�Ñ‚Ñƒ%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² Ð·Ð° Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ %ld%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¾ Ñƒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ– %d%pB: Ð·Ð°Ð¿Ð¸Ñ� Ð³Ñ€ÑƒÐ¿Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ñ–Ð· Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %u Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾%pB: sh_link [%d] Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼%pB: sh_link Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Â«%pBÂ»%pB: sh_link Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Â«%pBÂ»%pB: Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Import Library Format Ð¿Ð¾Ð»Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼%pB: Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ ARMv8-M Ñ– Ð½Ð¾Ð²Ñ–ÑˆÐ¸Ñ… Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€%pB: Ð·Ð´Ð¾Ð³Ð°Ð´ÐºÐ° Ñ‰Ð¾Ð´Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ñ— Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ñ�Ñ‚ÐµÐºÐ° Ñ– Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %s%pB: Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– ILF Ñ€Ñ�Ð´Ð¾Ðº Ð½Ðµ Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ñ— Ð´Ð¸Ð½Ð°Ð¼Ñ–ÐºÐ¸ Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ csect %d%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð³Ð¾ smclas %d%pB: Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ð°Ð»Ðµ Ð¹Ð¾Ð³Ð¾ Ð½ÐµÐ¼Ð°Ñ”%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ» Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� (%s) Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� (%s)%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� (%s) Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– (%pA)%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² (%d)%pB: Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²: %d (>= %d)%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² %u%pB: tp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[12], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$5%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$2%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$4%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[9], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” __tls_used%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$6%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ .idata$6 Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ”%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ %s Â«%sÂ»%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð°Ð½ Ñ�Ñ‚Ð¸Ñ�ÐºÐ°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð°Ð½ Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ COMDAT%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: Ñ—Ñ…Ð½Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð½Ðµ Ñ” Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ð¸Ð¼Ð¸%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: Ñ—Ñ…Ð½Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ–%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– .opd%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– R_PPC64_TOCSAVE%pB: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð½ÐµÐ¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð²ÐµÑ€Ñ�Ñ–Ñ—, Â«%sÂ»%pB: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�, %u, Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– .opd%pB: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ %s%pB: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %s%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#x%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° ARC %d%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI %d%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ [%#x], Â«%sÂ»%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿, [%#x], Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ» Ñƒ Ð³Ñ€ÑƒÐ¿Ñ– [%pA]%pB: OMIT_FP Ð±ÐµÐ· Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¸ÐºÐ° Ñƒ %pA.%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ (0x%x) Ñƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Import Library Format%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð° Ð½Ð°Ð·Ð²Ð° Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚Ð¸Ð¿Ñƒ %#x Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ÐºÐ»Ð°Ñ� Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %d Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s Â«%sÂ»%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð²Ð¸ÐºÐ»Ð¸Ðº Ð±ÐµÐ· PIC IFUNC Â«%sÂ»%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x%pB: ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¾ Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x%pB: Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¾ Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð· %s Ð´Ð¾ %s%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° ÑˆÐ¸Ñ€Ð¾ÐºÐ° Ð¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² 0x%02X 0x%02X Ð¿Ñ–Ñ�Ð»Ñ� Ð½Ð°Ð·Ð²Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ð¿Ð¾Ñ‡Ð¸Ð½Ð°ÑŽÑ‡Ð¸ Ð· Â«%sÂ»
-%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð¾Ð¼ Â«_Â», Ð°Ð»Ðµ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ð¿Ð¸Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ñ–Ð²%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½ÑˆÑ– Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð½Ñ–Ð¶ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½ÑˆÑ– Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ– Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð½Ñ–Ð¶ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—, Ñ�ÐºÑ– Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ–Ð· Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ�Ð¼Ð¸, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¸Ð¼Ð¸ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð° Â«_Â», Ð°Ð»Ðµ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ð¿Ð¸Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ð¼Ð¸ Ð· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð°Ð¼Ð¸ Â«_Â»%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ð²ÑƒÐ·Ð»Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ— Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð²Ð¸Ð´Ð¸Ð¼Ñ–Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ„Ð°Ð¹Ð» core Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ°: %#x > 0xffff%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s BLX Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ %s Â«%sÂ».%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ°: 0x%lx > 0xffff%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» COMDAT Â«%sÂ» Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð½Ð°Ð·Ð²Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� PLT RVE Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Â«%sÂ», %u, Ð¼ÐµÐ½ÑˆÐ¸Ð¹ Ð·Ð° Ð¹Ð¾Ð³Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°, Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð¼Ð¾Ð³Ð° Ñ‰Ð¾Ð´Ð¾ 0xffff Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ�%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð² Ð´Ð»Ñ� Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ–Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ° %d%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %ld Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ñ…%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ 0x%lx Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ° %d%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ð²ÐµÑ€Ñ�Ñ–Ñ— elf, %s Ñ‚Ð° %s%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ ASE Ð¼Ñ–Ð¶ e_flags Ñ– .MIPS.abiflags%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ ABI FP Ð¼Ñ–Ð¶ .gnu.attributes Ñ– .MIPS.abiflags%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ ISA Ð¼Ñ–Ð¶ e_flags Ñ– .MIPS.abiflags%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½ÑŒ ISA Ð¼Ñ–Ð¶ e_flags Ñ– .MIPS.abiflags%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: isymMax (%ld) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” ifdMax (%ld)%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² (%#lx) Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð¼Ñ–Ñ�Ñ†Ðµ Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%#lx)%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð· Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² PIC Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÑ– Ð½Ðµ Ñ” Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ PIC%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² abicalls Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· abicalls%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ†Ð¸ÐºÐ»ÐµÐ½Ñ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñ�Ñ‚ÐµÐ¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %u%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %u%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ�Ñ‚Ð°Ñ€Ñ–ÑˆÑƒ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¸Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð².%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� SDA_BASE%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ð¹ Ñ�Ð¿Ð¾Ñ�Ñ–Ð± ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ STM32L4XX Ð½Ðµ Ñ” Ð½ÐµÐ¾Ð±Ñ…Ñ–Ð´Ð½Ð¸Ð¼ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ð¹ Ñ�Ð¿Ð¾Ñ�Ñ–Ð± ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ VFP11 Ð½Ðµ Ñ” Ð½ÐµÐ¾Ð±Ñ…Ñ–Ð´Ð½Ð¸Ð¼ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ sh_link Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ Ð´Ð»Ñ� mmo, Ñ—Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 65535 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ�Ð»Ð¾Ð²Ð°: %d. Ð‘ÑƒÐ´Ðµ Ð²Ð¸Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Â«MainÂ».
-%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ–Ð¹ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� PLT Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– thumb-1%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GOT%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñƒ Ð¿Ð¾Ð»Ñ– flags2 .MIPS.abiflags (0x%lx)%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI, %d%pB: Ð½Ðµ Ð±ÑƒÐ´Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–%pB:%d: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð° Ñ�ÑƒÐ¼Ð° Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² S%pB:%d: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² %d Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ%pB:%d: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%d: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² S%pB:%pA%s Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸
-%pB:%pA: %s Ñ– %s Ð¼Ð°ÑŽÑ‚ÑŒ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s, Ñ�ÐºÐ¸Ð¹ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð·Ð°Ñ�Ð¾Ð±Ð¾Ð¼ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ñ�Ð¼Ñ–Ñ‚Ñ‚Ñ�%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼ --gc-keep-exported%pB:%pA: Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð½ÐµÐ¼Ð°Ñ” Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ %s%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð° Ð²Ñ�ÐµÑ€ÐµÐ´Ð¸Ð½Ñ– Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ–%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð¿Ð¾Ð·Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÐµÑŽ%pB:%pA: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¸Ð¹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Red Hat %s, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´Ð»Ñ� %s%pB:%s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS%pB:%s Ñ€Ð¾Ð·Ð´Ñ–Ð» %s: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� 2**%u Ð½Ðµ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð»Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ�%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð° Ñ�ÑƒÐ¼Ð° Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel (Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� %u, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ %u)%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð»Ñ–Ð½Ñ–Ð¹Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð»Ñ–Ð½Ñ–Ð¹Ð½Ð¾Ñ— Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%u: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ ihex %u Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%s Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– toc%s Ð´ÑƒÐ±Ð»ÑŒÐ¾Ð²Ð°Ð½Ð¾
+%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ² Ð²ÐµÑ€Ñ�Ñ–Ñ— %lx (Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¹ â€” %lx)%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²; 0x%lx > 0xffff%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÑ”Ð¼Ð¾ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ Ð· 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ ÐºÐ¾Ð´Ð¾Ð¼%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð· 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� UltraSPARC-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ‚Ð° HAL-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð· Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¸Ð¼ pic Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ pic%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð·Ñ– Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð·Ñ– Ñ�Ñ‚Ð°Ð»Ð¸Ð¼ gp Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð·Ñ– Ð·Ð¼Ñ–Ð½Ð½Ð¸Ð¼ gp%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ñ– Ñ„Ð°Ð¹Ð»Ð¸ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� 16-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ†Ñ–Ð»Ð¸Ñ… (-mshort), Ð° Ñ€ÐµÑˆÑ‚Ñƒ Ñ„Ð°Ð¹Ð»Ñ–Ð² â€” Ð´Ð»Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ†Ñ–Ð»Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ»%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ñ– Ñ„Ð°Ð¹Ð»Ð¸ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ (-fshort-double), Ð° Ñ–Ð½ÑˆÑ– â€” Ð´Ð»Ñ� 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ.%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ñ– Ñ„Ð°Ð¹Ð»Ð¸ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� HCS12, Ñ–Ð½ÑˆÑ– Ð¶ â€” Ð´Ð»Ñ� HC12%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð· Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic ÐºÐ¾Ð´Ñƒ Ñƒ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð· Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¼ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� trap-on-NULL-dereference Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· Ð·Ð°Ñ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ� (trapping)%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�, %pA%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%sÂ»%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ñ–Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ” NULL Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ñ�Ñ‚Ð¾Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ–Ð· Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼%pB: Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ– Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ�%pB: Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ– Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ�%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ� XTY_LD Â«%sÂ»%pB: Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ðµ OMIT_FP Ñƒ %pA.%pB: Ð½ÐµÐ¼Ð°Ñ” Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¾ÑŽ %d Ð±Ð°Ð¹Ñ‚Ñ–Ð²%pB: Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð³Ñ€ÑƒÐ¿Ð¸ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 0
+%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ Â«%sÂ»%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ð³Ñ€ÑƒÐ¿Ð¸%pB: Ð½ÐµÐºÐ°Ð½Ð¾Ð½Ñ–Ñ‡Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° ÐºÐ°Ð½Ð¾Ð½Ñ–Ñ‡Ð½Ñƒ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Â«%sÂ» Ñƒ %pB%pB: Ð½Ðµ-pic ÐºÐ¾Ð´ Ð· Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼ imm Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¼Ñ–Ñ�Ñ†Ñ� Ð´Ð»Ñ� Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸, Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· -N%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½Ñ– Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñ�Ñ‚Ñ– Ñ‰Ð¾Ð´Ð¾ Ð²ÐµÑ€Ñ�Ñ–Ñ—%pB: Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ STT_REGISTER Ð¼Ð¾Ð¶Ð½Ð° Ð¾Ð³Ð¾Ð»Ð¾ÑˆÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ %%g[2367]%pB: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ð´Ð»Ñ� Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð»Ñ�Ð½ÐºÐ¸ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ñƒ _bfd_elf_get_property%pB: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�%pB: pc-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: pc-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¾Ð±'Ñ”ÐºÑ‚Ð° lto Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð´Ð¾Ð´Ð°Ñ‚Ð¾Ðº%pB: Ð¹Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð±ÐµÐ· -fPIC?%pB: Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾%pB: Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹, Ð°Ð»Ðµ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ (0x%x) Ñƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Import Library Format%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–: %s Ñƒ %pA%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–: (Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ) Ñƒ %pA%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð½ÐµÑ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¸Ð¼ Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: %ld%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ñ… Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ Ð· %s Ð´Ð¾ %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ %s%sÂ«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� %s%s%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ STT_GNU_IFUNC Â«%sÂ» Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ”Ñ‚ÑŒÑ�Ñ� %s%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ STT_GNU_IFUNC Â«%sÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ð°Ð±Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� %s; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ RV32 Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ RV64 Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– x32 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÑƒÐ²Ð°Ñ‚Ð¸Ñ�Ñ� Ð·Ð·Ð¾Ð²Ð½Ñ–, Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s 0x%lx%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s, Ð·Ñ�ÑƒÐ² Ð¿Ñ€Ð°Ð²Ð¾Ñ€ÑƒÑ‡ %d, Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° 0x%lx%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ R_386_GOTOFF Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— %s Â«%sÂ» Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_386_GOTOFF Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ %s, Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ R_X86_64_GOTOFF64 Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— %s Â«%sÂ» Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_X86_64_GOTOFF64 Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ %s, Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð¼Ñƒ ELF (EM: %d)%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð·Ð¼Ñ–Ñ�Ñ‚Ñƒ%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² Ð·Ð° Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ %ld%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñ�Ñ‚Ð¸Ñ�Ð½ÐµÐ½Ð¾ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ zstd, Ð°Ð±Ð¾ BFD Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð±ÐµÐ· Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ zstd%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ»: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� VTENTRY%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¾ Ñƒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ– %d%pB: Ð·Ð°Ð¿Ð¸Ñ� Ð³Ñ€ÑƒÐ¿Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ñ–Ð· Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %u Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾%pB: sh_link [%d] Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼%pB: sh_link Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Â«%pBÂ»%pB: sh_link Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Â«%pBÂ»%pB: Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Import Library Format Ð¿Ð¾Ð»Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼%pB: Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ ARMv8-M Ñ– Ð½Ð¾Ð²Ñ–ÑˆÐ¸Ñ… Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€%pB: Ð·Ð´Ð¾Ð³Ð°Ð´ÐºÐ° Ñ‰Ð¾Ð´Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ñ— Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ñ�Ñ‚ÐµÐºÐ° Ñ– Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %s%pB: Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– ILF Ñ€Ñ�Ð´Ð¾Ðº Ð½Ðµ Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ñ— Ð´Ð¸Ð½Ð°Ð¼Ñ–ÐºÐ¸ Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ csect %d%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð³Ð¾ smclas %d%pB: Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ð°Ð»Ðµ Ð¹Ð¾Ð³Ð¾ Ð½ÐµÐ¼Ð°Ñ”%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½Ð°ÐºÐ»Ð°Ð´ÐºÑƒ (Ð½ÐµÐ¼Ð°Ñ” Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð½Ð°ÐºÐ»Ð°Ð´Ð¾Ðº)%pB: Ð½Ð°Ð·Ð²Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð·Ð°Ð´Ð°Ð½Ñƒ Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñƒ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ñƒ %d%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ» Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� (%s) Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� (%s)%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� (%s) Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– (%pA)%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² (%d)%pB: Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²: %d (>= %d)%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² %u%pB: tp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð¸Ñ�Ð½ÑƒÑ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[12], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$5%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$2%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$4%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[9], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” __tls_used%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$6%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ .idata$6 Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ”%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ %s Â«%sÂ»%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ COMDAT%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: Ñ—Ñ…Ð½Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð½Ðµ Ñ” Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ð¸Ð¼Ð¸%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: Ñ—Ñ…Ð½Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ–%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– .opd%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– R_PPC64_TOCSAVE%pB: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð½ÐµÐ¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð²ÐµÑ€Ñ�Ñ–Ñ—, Â«%sÂ»%pB: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�, %u, Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– .opd%pB: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ %s%pB: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x%pB: Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ sparc Â«%luÂ»%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %s%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#x%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° ARC %d%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI %d%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ [%#x], Â«%sÂ»%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿, [%#x], Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ» Ñƒ Ð³Ñ€ÑƒÐ¿Ñ– [%pA]%pB: OMIT_FP Ð±ÐµÐ· Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¸ÐºÐ° Ñƒ %pA.%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ (0x%x) Ñƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Import Library Format%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð° Ð½Ð°Ð·Ð²Ð° Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚Ð¸Ð¿Ñƒ %#x Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ÐºÐ»Ð°Ñ� Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %d Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s Â«%sÂ»%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� AOUT: %d%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %#x%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� mach bfd %#lx%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ bfd Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x%pB: Ð½Ð°Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� mach %#x%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð²Ð¸ÐºÐ»Ð¸Ðº Ð±ÐµÐ· PIC IFUNC Â«%sÂ»%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s%pB: ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¾ Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x%pB: Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¾ Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� swap_aux_in Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñƒ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� %#x%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� swap_aux_out Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñƒ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� %#x%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð· %s Ð´Ð¾ %s%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° ÑˆÐ¸Ñ€Ð¾ÐºÐ° Ð¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² 0x%02X 0x%02X Ð¿Ñ–Ñ�Ð»Ñ� Ð½Ð°Ð·Ð²Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ð¿Ð¾Ñ‡Ð¸Ð½Ð°ÑŽÑ‡Ð¸ Ð· Â«%sÂ»
+%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð¾Ð¼ Â«_Â», Ð°Ð»Ðµ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ð¿Ð¸Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ñ–Ð²%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½ÑˆÑ– Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð½Ñ–Ð¶ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½ÑˆÑ– Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ– Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð½Ñ–Ð¶ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—, Ñ�ÐºÑ– Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ–Ð· Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ�Ð¼Ð¸, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¸Ð¼Ð¸ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð° Â«_Â», Ð°Ð»Ðµ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ð¿Ð¸Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ð¼Ð¸ Ð· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð°Ð¼Ð¸ Â«_Â»%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ð²ÑƒÐ·Ð»Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ— Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s%pB: Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð²Ð¸Ð´Ð¸Ð¼Ñ–Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ„Ð°Ð¹Ð» core Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ°: %#x > 0xffff%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s BLX Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ %s Â«%sÂ».%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ°: 0x%lx > 0xffff%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: BTI Ð²Ð¼Ð¸ÐºÐ°Ñ”Ñ‚ÑŒÑ�Ñ� -z force-bti, Ñ�ÐºÑ‰Ð¾ ÑƒÑ�Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ– Ð½Ðµ Ð¼Ð°ÑŽÑ‚ÑŒ BTI Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– NOTE.%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» COMDAT Â«%sÂ» Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð½Ð°Ð·Ð²Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� PLT RVE Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: R_RISCV_SUB_ULEB128 Ñ–Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð¼, Ð±ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð¿ÐµÑ€ÐµÐ·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ñ–Ð· binutils 2.42 Ð°Ð±Ð¾ Ð½Ð¾Ð²Ñ–ÑˆÐ¾ÑŽ Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð»Ð°Ð±ÐºÐ¸Ñ… TLS Ð·Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð²Ñ–Ð´ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ– Ð¼Ð¾Ð¶Ðµ Ð½Ðµ Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ñ‚Ð¸ Ñ‚Ð°Ðº, Ñ�Ðº Ð²Ð¸ Ð½Ð° Ñ‚Ðµ Ñ�Ð¿Ð¾Ð´Ñ–Ð²Ð°Ñ”Ñ‚ÐµÑ�Ñ�%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Â«%sÂ», %u, Ð¼ÐµÐ½ÑˆÐ¸Ð¹ Ð·Ð° Ð¹Ð¾Ð³Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°, Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð¼Ð¾Ð³Ð° Ñ‰Ð¾Ð´Ð¾ 0xffff Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ�%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð² Ð´Ð»Ñ� Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ–Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ° %d%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %ld Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ñ…%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ 0x%lx Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ° %d%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ð²ÐµÑ€Ñ�Ñ–Ñ— elf, %s Ñ‚Ð° %s%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ ASE Ð¼Ñ–Ð¶ e_flags Ñ– .MIPS.abiflags%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ ABI FP Ð¼Ñ–Ð¶ .gnu.attributes Ñ– .MIPS.abiflags%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ ISA Ð¼Ñ–Ð¶ e_flags Ñ– .MIPS.abiflags%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½ÑŒ ISA Ð¼Ñ–Ð¶ e_flags Ñ– .MIPS.abiflags%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: isymMax (%ld) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” ifdMax (%ld)%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð· Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² PIC Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÑ– Ð½Ðµ Ñ” Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ PIC%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² abicalls Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· abicalls%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ†Ð¸ÐºÐ»ÐµÐ½Ñ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñ�Ñ‚ÐµÐ¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %u%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %u%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ�Ñ‚Ð°Ñ€Ñ–ÑˆÑƒ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¸Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð².%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� SDA_BASE%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ð¹ Ñ�Ð¿Ð¾Ñ�Ñ–Ð± ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ STM32L4XX Ð½Ðµ Ñ” Ð½ÐµÐ¾Ð±Ñ…Ñ–Ð´Ð½Ð¸Ð¼ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ð¹ Ñ�Ð¿Ð¾Ñ�Ñ–Ð± ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ VFP11 Ð½Ðµ Ñ” Ð½ÐµÐ¾Ð±Ñ…Ñ–Ð´Ð½Ð¸Ð¼ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ Ð´Ð»Ñ� mmo, Ñ—Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 65535 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ�Ð»Ð¾Ð²Ð°: %d. Ð‘ÑƒÐ´Ðµ Ð²Ð¸Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Â«MainÂ».
+%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ–Ð¹ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� PLT Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– thumb-1%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¸Ð¹ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¶Ð¾Ð´Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ñƒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ– PT_GNU_RELRO%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GOT%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñƒ Ð¿Ð¾Ð»Ñ– flags2 .MIPS.abiflags (0x%lx)%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI, %d%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: win32pstatus %s Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ %lu Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼%pB: Ð½Ðµ Ð±ÑƒÐ´Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–%pB: win32pstatus NOTE_INFO_MODULE Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ %lu Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼, Ñ‰Ð¾Ð± Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ %u%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ %#x Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñƒ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� %#x%pB:%.8s: RVA Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾%pB:%.8s: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð¿Ñ–Ð´ Ð¾Ñ�Ð½Ð¾Ð²Ð¾ÑŽ Ð¾Ð±Ñ€Ð°Ð·Ñƒ%pB:%d: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð° Ñ�ÑƒÐ¼Ð° Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² S%pB:%d: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² %d Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ%pB:%d: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%d: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² S%pB:%pA%s Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸
+%pB:%pA: %s Ñ– %s Ð¼Ð°ÑŽÑ‚ÑŒ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð¾ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ð±ÑƒÑ„ÐµÑ€Ð°%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s, Ñ�ÐºÐ¸Ð¹ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð·Ð°Ñ�Ð¾Ð±Ð¾Ð¼ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ñ�Ð¼Ñ–Ñ‚Ñ‚Ñ�%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼ --gc-keep-exported%pB:%pA: Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð½ÐµÐ¼Ð°Ñ” Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ %s%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð° Ð²Ñ�ÐµÑ€ÐµÐ´Ð¸Ð½Ñ– Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ–%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð¿Ð¾Ð·Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÐµÑŽ%pB:%pA: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¸Ð¹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Red Hat %s, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´Ð»Ñ� %s%pB:%s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS%pB:%s Ñ€Ð¾Ð·Ð´Ñ–Ð» %s: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� 2**%u Ð½Ðµ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð»Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ�%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð° Ñ�ÑƒÐ¼Ð° Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel (Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� %u, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ %u)%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð»Ñ–Ð½Ñ–Ð¹Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð»Ñ–Ð½Ñ–Ð¹Ð½Ð¾Ñ— Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB:%u: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ ihex %u Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel%pB[%pA]: Ð½ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ Ð´Ð»Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ %pAÐ£ %pcrel_lo Ð½ÐµÐ¼Ð°Ñ” Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ %pcrel_hiÐ¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� %pcrel_lo Ñ€Ð°Ð·Ð¾Ð¼ Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pcrel_lo Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼%pcrel_lo Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼ Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð»Ñ� R_RISCV_GOT_HI20%s Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– toc%s Ð´Ñ–Ð»ÐµÐ½Ð½Ñ� Ð½Ð° Ð½ÑƒÐ»ÑŒ%s Ð´ÑƒÐ±Ð»ÑŒÐ¾Ð²Ð°Ð½Ð¾
 %s Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑŽÑ”Ñ‚ÑŒÑ�Ñ� Ñƒ %s
-%s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS%s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸%s Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÑƒ, Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼Ñƒ %pA%s Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ %s Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ Ð´Ð»Ñ� ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� sdata4 .eh_frame%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TLS Ñƒ %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA, Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TLS Ñƒ %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA, Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ %pB%s: Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� TLS Ñƒ %pB Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA%s: Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� TLS Ñƒ %pB Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ %pB%s: Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%s: Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾%s: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%s: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ�: %s(Ð·Ð° Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ Ñƒ Ð±Ñ–Ñ‚Ð°Ñ… %u)
+%s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS%s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸%s Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾, Ð°Ð»Ðµ Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸: %s%s Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾, Ð°Ð»Ðµ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð´Ð¾Ð´Ð°Ñ‚ÐºÑ–Ð² Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾%s Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð¾, Ð°Ð»Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾: %s%s Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÑƒ, Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼Ñƒ %pA%s Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ %s Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ Ð´Ð»Ñ� ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� sdata4 .eh_frame%s, Ñ–Ñ‚ÐµÑ€ %u
+  Ð³Ñ–Ð»ÐºÐ°           %lu
+  Ð´Ð¾Ð²Ð³Ð° Ð³Ñ–Ð»ÐºÐ°     %lu
+  Ð²Ð¸ÐºÐ»Ð¸Ðº plt      %lu
+  Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %lu%s: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€ ELF: Â«%dÂ»%s: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð»Ñ–Ñ‚ÐµÑ€ Ñƒ Ð²ÐµÑ€Ñ…Ð½ÑŒÐ¾Ð¼Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–%s: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð¼Ð°Ñ” Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ‚Ð¸Ñ�Ñ� Ð· rv32 Ð°Ð±Ð¾ rv64%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TLS Ñƒ %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA, Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TLS Ñƒ %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA, Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ %pB%s: Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� TLS Ñƒ %pB Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA%s: Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� TLS Ñƒ %pB Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ %pB%s: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ñ�Ðº 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚, Ð° %s Ñ” 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼%s: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ñ�Ðº 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚, Ð° %s Ñ” 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼%s: Ð¿ÐµÑ€ÑˆÐ¸Ð¼ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ�Ð¼ ISA Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Â«eÂ», Â«iÂ» Ð°Ð±Ð¾ Â«gÂ»%s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Ð· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð¾Ð¼ ISA Â«%sÂ» Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° <Ñ‡Ð¸Ñ�Ð»Ð¾>p%s: Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%s: Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾%s: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%s: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %s%s: Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Ñ�Ð»Ñ–Ð´ Ð²Ñ–Ð´Ð¾ÐºÑ€ÐµÐ¼Ð»ÑŽÐ²Ð°Ñ‚Ð¸ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ _%s: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ�: %s%s: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ»%s: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Ð°Ð±Ð¾ ÐºÐ»Ð°Ñ� Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð° Â«%cÂ»(Ð·Ð° Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ Ñƒ Ð±Ñ–Ñ‚Ð°Ñ… %u)
 (Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€)
-(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ñ–Ð´Ð¿Ð¸Ñ� %s Ð²Ñ–Ðº %ld)
+(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ñ–Ð´Ð¿Ð¸Ñ� %s Ð²Ñ–Ðº %ld pdb %s)
 (Ð½ÐµÐ¼Ð° Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�)
 (Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ðµ)
 (Ð½Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð¾)
@@ -1171,7 +1233,7 @@ X-Generator: Lokalize 2.0
 , Ð¿Ñ�ÐµÐ²Ð´Ð¾Ð½Ñ–Ð¼: %u
 , Ð·Ñ�ÑƒÐ² Ñ€Ð¾Ð·ÑˆÐ¸Ñ€. Ð¿Ñ€Ð¸Ð²â€™Ð·Ñ�ÐºÐ¸: %u, Ð·Ñ�ÑƒÐ² psect no_opt: %u, Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿: %u (%s)
 , Ð²ÐµÐºÑ‚Ð¾Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² rva: - %pB Ñ” 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼, Ð° %pB â€” Ð½Ñ–-mips32r2 -mfp64 (12 Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ñ… Ð´Ð»Ñ� Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð²)Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ñƒ .eh_frame_hdr.eh_frame_hdr Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° FDE, Ñ�ÐºÑ– Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°ÑŽÑ‚ÑŒÑ�Ñ�Ð Ð¾Ð·Ð´Ñ–Ð» .got Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ .pltÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð»Ð¸Ñ�Ñ‚Ð¾ÐºÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð²Ñ–Ð´Ð¼Ñ–Ð½Ð½Ð¾Ñ�Ñ‚Ñ– Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ�Ñ… ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð²Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¸ Ð· Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ°Ð¼Ð¸Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð»Ð¸Ñ�Ñ‚ÐºÑ–Ð²Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð»Ð¸Ñ�Ñ‚ÐºÑ–Ð²: %sÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ñ€ÐµÑ�ÑƒÑ€Ñ� Ð· Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ€Ñ�Ð´ÐºÑ–Ð²: %dÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð½ÐµÑ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… Ð¼Ð°Ð½Ñ–Ñ„ÐµÑ�Ñ‚Ñ–Ð²32-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ double, Ð²Ñ–Ð´Ð±ÑƒÐ²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ gp-Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ–64 Ð±Ñ–Ñ‚Ð¸ *Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ”Ñ‚ÑŒÑ�Ñ�*
-64-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ double, 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ–: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ m32r: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ m32r2: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ m32rx: Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— n1: Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— n1h; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIC<Ð�ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ð½Ð°Ð±Ñ–Ñ€ Ð±Ñ–Ñ‚Ñ–Ð² Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð²><Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð´Ð°Ð½Ñ–> %s<Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ°: %#x>
+64-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ double, 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ–: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ m32r: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ m32r2: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ m32rx: Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— n1: Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— n1h; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIC; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIE<Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð´Ð°Ð½Ñ–> %s<Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ°: %#x>
 <Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ°: %#lx>
 <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾><Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ: %d>
 <Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ð¼Ð°Ñ�ÐºÑƒÐ²Ð°Ð½Ð½Ñ�><Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð°>Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� @pltoff Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒBASE_IMAGE       ÐžÐ¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŽ BFD %s Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ %s:%dÐ’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° BFD %s, Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ñ”Ð¼Ð¾ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %s:%d
@@ -1182,17 +1244,15 @@ X-Generator: Lokalize 2.0
 CTL_SETRB (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�)
 CTL_STKDL (Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ�, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ñ�Ñ‚ÐµÐºÐ¾Ð¼)
 CTL_STLOC (Ð²ÐºÐ°Ð·Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ�)
-Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÑŒÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²
+Coolidge (kv3) V1 32 Ð±Ñ–Ñ‚Ð¸Coolidge (kv3) V1 64 Ð±Ñ–Ñ‚Ð¸Coolidge (kv3) V2 32 Ð±Ñ–Ñ‚Ð¸Coolidge (kv3) V2 64 Ð±Ñ–Ñ‚Ð¸Coolidge (kv4) V1 32 Ð±Ñ–Ñ‚Ð¸Coolidge (kv4) V1 64 Ð±Ñ–Ñ‚Ð¸Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÑŒÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²
 Ð’Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .rsrc!
-Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ñ�Ð´ÐºÑƒ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ DSOÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ DW_AT_comp_dir Ñ–Ð· Ð½ÐµÑ€Ñ�Ð´ÐºÐ¾Ð²Ð¾ÑŽ Ñ„Ð¾Ñ€Ð¼Ð¾ÑŽÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ€ÐµÐºÑƒÑ€Ñ�Ñ–ÑŽ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¼ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð¾Ð¼ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s.ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %uÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð°Ð´Ñ€ÐµÑ�Ð¸ Â«%uÂ», Ð²Ñ‚Ñ–Ð¼ Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð², Ñ‰Ð¾ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑŽÑ‚ÑŒ Â«%uÂ»ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð²ÐµÑ€Ñ�Ñ–ÑŽ DWARF Â«%uÂ», Ð°Ð»Ðµ Ñƒ Ñ†Ñ–Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÑƒ Ð»Ð¸ÑˆÐµ Ð²ÐµÑ€Ñ�Ñ–Ð¹ Ð´Ð°Ð½Ð¸Ñ… 2, 3 Ñ– 4ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº Ð½Ð° Ð´Ð°Ð½Ñ– Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° ÐºÑ–Ð½ÐµÑ†ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð²ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¹ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ DIEÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð° ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð´Ñ–Ð¹ Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´ÑƒÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð°Ð±Ð¾ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� FORM: %#xÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð²Ð°Ñ€Ñ–Ð°Ð½Ñ‚Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ–Ð² %u Ñƒ Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÐ°ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð² (Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð°)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� ÐºÐ¾Ð´Ñ–Ð² Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð²Ñ�Ñ‚ÑƒÐ¿ÑƒÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð° Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð²ÐµÑ€Ñ�Ñ–Ñ� .debug_line, %dÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒDW_EH_PE_datarel Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ†Ñ–Ñ”Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²:
+Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ñ�Ð´ÐºÑƒ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ DSOÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ DW_AT_comp_dir Ñ–Ð· Ð½ÐµÑ€Ñ�Ð´ÐºÐ¾Ð²Ð¾ÑŽ Ñ„Ð¾Ñ€Ð¼Ð¾ÑŽÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ€ÐµÐºÑƒÑ€Ñ�Ñ–ÑŽ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¼ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð¾Ð¼ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s.ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %uÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–ÑŽ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ… Ð·Ñ– Ð·Ñ�ÑƒÐ²Ð¾Ð¼ 0x%lxÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð°Ð´Ñ€ÐµÑ�Ð¸ Â«%uÂ», Ð²Ñ‚Ñ–Ð¼ Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð², Ñ‰Ð¾ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑŽÑ‚ÑŒ Â«%uÂ»ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð²ÐµÑ€Ñ�Ñ–ÑŽ DWARF Â«%uÂ», Ð°Ð»Ðµ Ñƒ Ñ†Ñ–Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÑƒ Ð»Ð¸ÑˆÐµ Ð²ÐµÑ€Ñ�Ñ–Ð¹ Ð´Ð°Ð½Ð¸Ñ… 2, 3 Ñ– 4ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº Ð½Ð° Ð´Ð°Ð½Ñ– Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° ÐºÑ–Ð½ÐµÑ†ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð²ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¹ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ DIEÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð° ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð´Ñ–Ð¹ Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´ÑƒÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð°Ð±Ð¾ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� FORM: %#xÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð²Ð°Ñ€Ñ–Ð°Ð½Ñ‚Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ–Ð² %u Ñƒ Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÐ°ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð² (Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð°)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� ÐºÐ¾Ð´Ñ–Ð² Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð²Ñ�Ñ‚ÑƒÐ¿ÑƒÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ð½Ðµ Ð¼Ð°Ñ” Ð²Ð¼Ñ–Ñ�Ñ‚ÑƒÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð° Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð²ÐµÑ€Ñ�Ñ–Ñ� .debug_line, %dÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒDW_EH_PE_datarel Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ†Ñ–Ñ”Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²:
 Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ�:
-ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ñ–Ð´ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð³Ð¾ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s
-Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s Ñƒ %s, Ñ€Ñ�Ð´Ð¾Ðº %d Ñƒ %s
-ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð¿Ð¸Ñ�Ñ–Ð²EIHD: (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u, ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ð»Ð¾ÐºÑ–Ð²: %u)
+ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ñ–Ð´ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð³Ð¾ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð¿Ð¸Ñ�Ñ–Ð²EIHD: (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u, ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ð»Ð¾ÐºÑ–Ð²: %u)
 Ð’Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð²Ñ…Ð¾Ð´Ñƒ       = 0x%.8lx (%ld)
-ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð»Ñ� %pB Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð¾Ð±Ð¸Ð´Ð²Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Tag_MPextension_use, current Ñ– legacyÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½ÑŒ [.pdata]ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� [.edata (Ð°Ð±Ð¾ Ñ–Ð½ÑˆÐµ Ð¼Ñ–Ñ�Ñ†Ðµ, Ð´Ðµ Ð¹Ð¾Ð³Ð¾ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)]ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�		%lx
+ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð²ÐµÑ€Ñ�Ñ–Ñ— DSP %pB Ñ– %pB Ñ” Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ñ– %pB Ð¼Ð°ÑŽÑ‚ÑŒ Ñ€Ñ–Ð·Ð½Ñ– Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ñ– Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ�Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°-Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ñ‡Ð¸Ñ�ÐµÐ» Ñ–Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð²ÐµÑ€Ñ�Ñ–Ñ— VDSP %pB Ñ– %pB Ñ” Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð»Ñ� %pB Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð¾Ð±Ð¸Ð´Ð²Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Tag_MPextension_use, current Ñ– legacyÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½ÑŒ [.pdata]ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� [.edata (Ð°Ð±Ð¾ Ñ–Ð½ÑˆÐµ Ð¼Ñ–Ñ�Ñ†Ðµ, Ð´Ðµ Ð¹Ð¾Ð³Ð¾ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)]ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�		%lx
 Ð•ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ð¹ RVAÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� FDE Ñƒ %pB(%pA) Ð¿ÐµÑ€ÐµÑˆÐºÐ¾Ð´Ð¶Ð°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– .eh_frame_hdrÐ£ FDPIC Ñ‰Ðµ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð´Ð»Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð²FILES_VOLUMES    FPU-2.0FPU-3.0ÐŸÐ¾Ð»Ðµ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð²      = 0x%.2x
-ÐŸÐµÑ€ÐµÑ�Ð¿Ñ€Ñ�Ð¼Ð¾Ð²Ð½Ð¸Ð¹ RVAGALAXY           ÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOT Ñ– PLT Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¾, Ñ�ÐºÑ‰Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ñ” Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¼Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– GOT Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GP, Ð²Ñ‚Ñ–Ð¼, GP Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GP, Ð°Ð»Ðµ _gp Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼ GPDISP Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— ldah Ñ– ldaÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²:
+ÐŸÐµÑ€ÐµÑ�Ð¿Ñ€Ñ�Ð¼Ð¾Ð²Ð½Ð¸Ð¹ RVAGALAXY           Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ GNU_MBIND Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ†Ñ–Ð»ÐµÐ¹ GNU Ñ– FreeBSDÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ GNU_RETAIN Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ†Ñ–Ð»ÐµÐ¹ GNU Ñ– FreeBSDÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOT Ñ– PLT Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¾, Ñ�ÐºÑ‰Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ñ” Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¼Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– GOT Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GP, Ð²Ñ‚Ñ–Ð¼, GP Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GP, Ð°Ð»Ðµ _gp Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼ GPDISP Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— ldah Ñ– ldaÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²:
 Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ FPU)
 Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, Ð±ÑƒÐ´ÑŒ-Ñ�ÐºÐ¸Ð¹ FPU)
 Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ñ�Ð¿Ñ–Ð²Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€ MIPS32r2, 12 Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ñ… Ð´Ð»Ñ� Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð²)
@@ -1200,20 +1260,20 @@ X-Generator: Lokalize 2.0
 Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð° Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŒ)
 Ð¡ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸ (32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ FPU)
 Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð°Ð±Ð¾ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ°
-Ð†Ð´.: %#08lxIDC â€” Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ° ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ�Ñ‚Ñ– Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ñ–Ð²
-IMAGE_ACTIVATOR  ÐŸÑ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ INPUT_SECTION_FLAGS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾IO               Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ:  (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€=%u)
+Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– IBT Ñ– SHSTKÐ²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ IBTÐ†Ð´.: %#08lxIDC â€” Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ° ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ�Ñ‚Ñ– Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ñ–Ð²
+Ð¡Ð¸Ð¼Ð²Ð¾Ð» IFUNC %s Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ IFUNCS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾IMAGE_ACTIVATOR  ÐŸÑ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ INPUT_SECTION_FLAGS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾IO               Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ:  (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€=%u)
 ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ° Ð°Ð´Ñ€ÐµÑ�Ð¸ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°: %u, Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�: %u)
 Ð†Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð¾Ð»Ð¾Ð´ÑˆÐ¸Ð¹: %u)
 Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°: %u, Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�: %u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u, Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿: %u)
 Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð¾Ð±Ñ€Ð°Ð·Ñƒ (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°: %u, Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�: %u)
-ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð°Ð´Ñ€ÐµÑ�ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� [Ñ‡Ð°Ñ�Ñ‚Ð¸Ð½Ð¸ .idata]LOGICAL_NAMES    Ð�Ð°Ð·Ð²Ð° Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¼Ð¾Ð²Ð¸
+ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð°Ð´Ñ€ÐµÑ�ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� [Ñ‡Ð°Ñ�Ñ‚Ð¸Ð½Ð¸ .idata]Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ñ–Ñ�Ñ‚ÑŒ.Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ LAM_U48Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ LAM_U57LOGICAL_NAMES    Ð�Ð°Ð·Ð²Ð° Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¼Ð¾Ð²Ð¸
 Ð”Ð¾Ð²Ð¶Ð¸Ð½Ð°             = 0x%.8lx (%ld)
 ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒÐ›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� IFUNC Â«%sÂ» Ñƒ %pB
 MEMORY_MANAGEMENTÐ¤ÑƒÐ½ÐºÑ†Ñ–Ñ— MIPS16 Ñ– microMIPS Ð½Ðµ Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ‚Ð¸ Ð¾Ð´Ð½Ð° Ð¾Ð´Ð½ÑƒMISC             Ð’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� MMU: MULTI_PROCESSING ÐžÑ�Ð½Ð¾Ð²Ð½Ð°/ÐœÐ¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� 			%d/%d
 ÐœÐ°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚ÐµÐºÐ° â€” 0x%v
 MeP: howto %d Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ñ‚Ð¸Ð¿Ñƒ %dÐ’Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ�
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¼Ð¾Ð´ÑƒÐ»Ñ�
-NETWORKS         NORMALÐ�Ð°Ð·Ð²Ð°				Ð�ÐµÐ¼Ð°Ñ”Ð�Ð¾Ð¼ÐµÑ€ Ñƒ:
+NETWORKS         NORMALÐ—Ð�Ð£Ð’Ð�Ð–Ð•Ð�Ð�Ð¯: Ñ†Ñ� Ð¿Ð¾Ð²ÐµÐ´Ñ–Ð½ÐºÐ° Ð²Ð²Ð°Ð¶Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¾ÑŽ, Ñ—Ñ— Ð±ÑƒÐ´Ðµ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ñƒ Ð½Ð°Ñ�Ñ‚ÑƒÐ¿Ð½Ñ–Ð¹ Ð²ÐµÑ€Ñ�Ñ–Ñ— ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ°Ð�Ð°Ð·Ð²Ð°				Ð�ÐµÐ¼Ð°Ñ”Ð�Ð¾Ð¼ÐµÑ€ Ñƒ:
 OPR_ADD (Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ�)
 OPR_AND (Ð»Ð¾Ð³Ñ–Ñ‡Ð½Ðµ Â«Ð†Â»)
 OPR_ASH (Ð°Ñ€Ð¸Ñ„Ð¼ÐµÑ‚Ð¸Ñ‡Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ²)
@@ -1238,21 +1298,19 @@ X-Generator: Lokalize 2.0
 Ð”Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ[%d] = 0x%.8lx (%ld)
 Ð¡ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ[%d]   = 0x%.8lx (%ld)
 Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ñ‚Ðµ Ð¿Ñ€Ð¾ Ñ†ÑŽ Ð²Ð°Ð´Ñƒ.
-ÐšÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ ABI RL78: Ñ„Ð°Ð¹Ð» G10 %pB Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð· %s, Ñ„Ð°Ð¹Ð» %pBÐšÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ ABI RL78: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ %s, Ñ„Ð°Ð¹Ð» %pB Ð· %s, Ñ„Ð°Ð¹Ð» %pBÐšÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� RL78: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ñ– 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸R_BFIN_FUNCDESC Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼R_BFIN_FUNCDESC_VALUE Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼R_FRV_TLSMOFFLO Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ setlo Ð°Ð±Ð¾ setlos
+Ð—Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = 0x%lx : ÐšÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ ABI RL78: Ñ„Ð°Ð¹Ð» G10 %pB Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð· %s, Ñ„Ð°Ð¹Ð» %pBÐšÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ ABI RL78: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ %s, Ñ„Ð°Ð¹Ð» %pB Ð· %s, Ñ„Ð°Ð¹Ð» %pBÐšÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� RL78: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ñ– 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸Ð”Ñ–Ð»ÐµÐ½Ð½Ñ� Ð½Ð° Ð½ÑƒÐ»ÑŒ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– RL78Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð°Ð±Ð¾ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ RL78R_AMD64_IMAGEBASE Ð· Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¼ __ImageBaseR_BFIN_FUNCDESC Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼R_BFIN_FUNCDESC_VALUE Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼R_FRV_TLSMOFFLO Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ setlo Ð°Ð±Ð¾ setlos
 Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñ‡Ð°Ñ�Ð¾Ð²Ð¾Ñ— Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ¸ mod Ð°Ñ€Ñ…Ñ–Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (0x%v) Ð· %pB (0x%v)
 Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (0x%v) Ð· %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)
 Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾) Ð· %pB (0x%v)
 Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB Ð· %pB
 Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB Ð· %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)
-Ð—Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¾Ð²Ð°Ð½Ð¾ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ€ÐµÑ�ÑƒÑ€Ñ�Ñ–Ð² [.rsrc]Ð�Ð´Ñ€ÐµÑ�Ð° S12 (%lx) Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð° Ð¿Ð¾Ð·Ð° RAM Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� (0x2000-x4000), Ñ‚Ð¾Ð¼Ñƒ Ð²Ð°Ð¼ Ñ�Ð»Ñ–Ð´ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ Ð²Ð°ÑˆÐ¾Ð¼Ñƒ ÐºÐ¾Ð´Ñ–Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� SDA Ð±ÐµÐ· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� _SDA_BASE_SECURITY         SEC_RELOC Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pASHELL            SHRFXDSHRPICÐ’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� SIMD: SPSC â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¾Ð±Ñ€Ð°Ð·Ñƒ
+Ð—Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¾Ð²Ð°Ð½Ð¾ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ€ÐµÑ�ÑƒÑ€Ñ�Ñ–Ð² [.rsrc]Ð�Ð´Ñ€ÐµÑ�Ð° S12 (%lx) Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð° Ð¿Ð¾Ð·Ð° RAM Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� (0x2000-x4000), Ñ‚Ð¾Ð¼Ñƒ Ð²Ð°Ð¼ Ñ�Ð»Ñ–Ð´ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ Ð²Ð°ÑˆÐ¾Ð¼Ñƒ ÐºÐ¾Ð´Ñ–Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� SDA Ð±ÐµÐ· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� _SDA_BASE_SECURITY         SEC_RELOC Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pASHELL            SHRFXDSHRPICÐ²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ SHSTKÐ’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� SIMD: SPSC â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¾Ð±Ñ€Ð°Ð·Ñƒ
 STABLE           STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð¸ Ð¿Ð¾Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð½Ñ�)
 STA_GBL (Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ñ‚ÐµÐº) %.*s
 STA_LI (Ñ�Ñ‚ÐµÐº Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ñ–Ð²)
-STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð¾Ð²Ð³Ð¸Ñ… Ñ�Ð»Ñ–Ð²) 0x%08x
-STA_MOD (Ñ�Ñ‚ÐµÐº Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²)
+STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð¾Ð²Ð³Ð¸Ñ… Ñ�Ð»Ñ–Ð²)STA_MOD (Ñ�Ñ‚ÐµÐº Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²)
 STA_PQ (Ñ�Ñ‚ÐµÐº Ð¾Ñ�Ð½Ð¾Ð²Ð¸ psect + Ð·Ñ�ÑƒÐ²)
-STA_QW (Ñ�Ñ‚ÐµÐº Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ð¸Ñ… Ñ�Ð»Ñ–Ð²) 0x%08x %08x
-STC_BOH_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ BOH Ð·Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ)
+STA_QW (Ñ�Ñ‚ÐµÐº ÐºÐ²Ð°Ð´Ñ€Ð¾Ñ�Ð»Ñ–Ð²)STC_BOH_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ BOH Ð·Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ)
 STC_BOH_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ BOH Ð·Ð° psect + Ð·Ñ�ÑƒÐ²)
 STC_BSR_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ BSR Ð·Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ)
 STC_BSR_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ BSR Ð·Ð° psect + Ð·Ñ�ÑƒÐ²)
@@ -1291,27 +1349,27 @@ X-Generator: Lokalize 2.0
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ„Ð°Ð¹Ð»Ñ–Ð² ÐºÐ¾Ð´Ñƒ
 ÐžÑ�Ð¾Ð±Ð»Ð¸Ð²Ð¸Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚ÐµÐºÐ° Ð´Ð»Ñ� ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¸Ñ… Ð²ÑƒÐ·Ð»Ñ–Ð² Ð³Ñ€Ð°Ñ„Ñƒ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð².
 ÐšÑ€Ð¾ÐºÐ¸:
-Ð¡Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñ–Ð²: %s Ñƒ %pB Ñ– REGISTER Ñ€Ð°Ð½Ñ–ÑˆÐµ Ñƒ %pBÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²Ð¢Ð°Ð±Ð»Ð¸Ñ‡Ð½Ñ– Ð°Ð´Ñ€ÐµÑ�Ð¸
-ÐŸÐ¾Ð»Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð·Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ Ð´Ð»Ñ� Ñ†ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»ÑƒÐ Ð¾Ð·Ð¼Ñ–Ñ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸
+Ð¡Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñ–Ð²: %s Ñƒ %pB Ñ– REGISTER Ñ€Ð°Ð½Ñ–ÑˆÐµ Ñƒ %pBÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� TOC Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -mminimal-toc Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ�Ð¢Ð°Ð±Ð»Ð¸Ñ‡Ð½Ñ– Ð°Ð´Ñ€ÐµÑ�Ð¸
+Ð�Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¸ Ð´Ð»Ñ� R_RISCV_GOT_HI20ÐŸÐ¾Ð»Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð·Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ Ð´Ð»Ñ� Ñ†ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»ÑƒÐ Ð¾Ð·Ð¼Ñ–Ñ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸
 ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑ–Ð² [.tls]ÐŸÐ¾Ð·Ð½Ð°Ñ‡ÐºÐ° Ñ‡Ð°Ñ�Ñƒ/Ð´Ð°Ñ‚Ð¸		%lx
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ‚Ð¸Ñ‚ÑƒÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ñ‚ÐµÐºÑ�Ñ‚Ñƒ
 Ð—Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ ÐºÐ¾Ð´Ñ–Ð² Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ� (%ld)
 Ð¢Ð¸Ð¿                 Ð Ð¾Ð·Ð¼     Rva      Ð—Ñ�ÑƒÐ²
-USRSTACKÐ�ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹Ð�ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹: %xÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W (%v) Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (0x%v) Ð· %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)
+USRSTACKÐ�Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ�, Ñ‰Ð¾ Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° %sÐ�Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…: %sÐ�Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ DLL.Ð�ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹Ð�ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹: %xÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W (%v) Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (0x%v) Ð· %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)
 ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W (0x%v) Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (0x%v) Ð· %pB (0x%v)
 VOLATILE         Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .pdata (%ld) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%ld)
 ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%ld) Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %d
 ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%ld) Ñ” Ð¼ÐµÐ½ÑˆÐ¸Ð¼ Ð·Ð° Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%ld)
 ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼
 Ð—Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾Ñ— Ñ‡Ð°Ñ�Ð¾Ð²Ð¾Ñ— Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ¸ armapÐ�Ð´Ñ€ÐµÑ�Ð° XGATE (%lx) Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð° Ð¿Ð¾Ð·Ð° RAM Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� (0xE000-0xFFFF), Ñ‚Ð¾Ð¼Ñƒ Ð²Ð°Ð¼ Ñ�Ð»Ñ–Ð´ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñ–, Ð¹Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾, ÐºÐµÑ€ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¾ÑŽ Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ñƒ Ð²Ð°ÑˆÐ¾Ð¼Ñƒ ÐºÐ¾Ð´Ñ–.[%u]: Ð½Ð¸Ð¶Ð½Ñ�: %u, Ð²ÐµÑ€Ñ…Ð½Ñ�: %u
-[abi=16-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ Ñ†Ñ–Ð»Ðµ, [abi=32-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ Ñ†Ñ–Ð»Ðµ, [Ñ‡Ð¸ÑŽ Ð½Ð°Ð·Ð²Ñƒ Ð²Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð¾]_bfd_vms_output_counted Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð´Ð»Ñ� Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ— ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ð±Ð°Ð¹Ñ‚Ñ–Ð²_bfd_vms_output_counted Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð´Ð»Ñ� Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ñ— ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ð±Ð°Ð¹Ñ‚Ñ–Ð²Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Ð±ÐµÐ· Ð²Ñ…Ð¾Ð´ÑƒÐ¾Ð±'Ñ”ÐºÑ‚ PDEÐ¾Ð±'Ñ”ÐºÑ‚ PIEÑ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð°Ð´Ñ€ÐµÑ�Ð°Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð·Ð° Ð¼ÐµÐ¶ÐµÑŽ Ñ�Ð»Ð¾Ð²Ð°Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¸Ð¹ ÐºÐ¾Ð´ ELF (%d) Ñƒ %pB, Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� %dÑƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ°; Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ñ–Ñ‚ÑŒ ranlib, Ñ‰Ð¾Ð± Ð¹Ð¾Ð³Ð¾ Ð´Ð¾Ð´Ð°Ñ‚Ð¸Ð°Ñ€Ñ…Ñ–Ð²Ð½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ð¼Ð°Ñ�Ð¸Ð²Ñƒ:
+[abi=16-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ Ñ†Ñ–Ð»Ðµ, [abi=32-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ Ñ†Ñ–Ð»Ðµ, [Ñ‡Ð¸ÑŽ Ð½Ð°Ð·Ð²Ñƒ Ð²Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð¾]\%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s BLX Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ %s Â«%sÂ».Ð²Ð¸ÐºÐ»Ð¸Ðº __tls_get_addr Ð¿Ñ€Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ñ�ÑƒÐ²Ñƒ_bfd_vms_output_counted Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð´Ð»Ñ� Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ— ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ð±Ð°Ð¹Ñ‚Ñ–Ð²_bfd_vms_output_counted Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð´Ð»Ñ� Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ñ— ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ð±Ð°Ð¹Ñ‚Ñ–Ð²Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Ð±ÐµÐ· Ð²Ñ…Ð¾Ð´ÑƒÂ«xtheadvectorÂ» ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ�Ð¼ Â«vÂ»Â«zfinxÂ» ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ�Ð¼ Â«f/d/q/zfh/zfhminÂ»Ð¾Ð±'Ñ”ÐºÑ‚ PDEÐ¾Ð±'Ñ”ÐºÑ‚ PIEÑ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð°Ð´Ñ€ÐµÑ�Ð°Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð·Ð° Ð¼ÐµÐ¶ÐµÑŽ Ñ�Ð»Ð¾Ð²Ð°Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¸Ð¹ ÐºÐ¾Ð´ ELF (%d) Ñƒ %pB, Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� %dÑƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ°; Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ñ–Ñ‚ÑŒ ranlib, Ñ‰Ð¾Ð± Ð¹Ð¾Ð³Ð¾ Ð´Ð¾Ð´Ð°Ñ‚Ð¸Ð°Ñ€Ñ…Ñ–Ð²Ð½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ð¼Ð°Ñ�Ð¸Ð²Ñƒ:
 Ð¼Ð°Ñ�Ð¸Ð², Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð½Ñ–Ñ�Ñ‚ÑŒ: %u, Ð±Ñ–Ñ‚Ð¾Ð²Ð° ÐºÐ°Ñ€Ñ‚Ð°: arsize: %u, a0: 0x%08x
 Ð°Ñ‚Ð¾Ð¼Ð°Ñ€Ð½Ð¸Ð¹, Ñ‚Ð¸Ð¿=0x%02x %s
 Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� L32R/CALLX Ð½Ð° CALL Ð·Ð°Ð·Ð½Ð°Ð»Ð° Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð·Ð²â€™Ñ�Ð·ÐºÑƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð²Ñ…Ñ–Ð´Ð½Ð¸Ð¼ %s Ñ– Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ð¼ %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð·Ð°Ð½ÐµÑ�ÐµÐ½Ð° Ð´Ð¾ Ð±Ð°Ð½ÐºÑƒ Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx) Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ð±Ð°Ð½ÐºÑƒ Ð· Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ, Ð·Ð°Ð½ÐµÑ�ÐµÐ½Ð¾ÑŽ Ð´Ð¾ Ð±Ð°Ð½ÐºÑƒ, [%lx:%04lx] (%lx)Ð¾Ñ�Ð½Ð¾Ð²Ð°: %u, Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ�: %u
-bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸bfd_mach_o_read_section_32: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lx, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ Ð½ÑŒÐ¾Ð³Ð¾ 32bfd_mach_o_read_section_32: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lx, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ Ð½ÑŒÐ¾Ð³Ð¾ 32bfd_mach_o_read_symtab_symbol: Ð½Ð°Ð·Ð²Ð° Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ (%lu >= %u)bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %d (max %lu): Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÑ”Ð¼Ð¾ Ñƒ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿Ð¾Ð»Ñ� 0x%x: Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÑ”Ð¼Ð¾ Ñƒ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�bfd_mach_o_read_symtab_symbol: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %d Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñƒ %ubfd_mach_o_read_symtab_symbols: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÑŒ Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²bfd_mach_o_scan: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°, 0x%lx/0x%lxbfd_pef_scan: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°, 0x%lxblkbeg: Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð½Ð°Ð·Ð²Ð°: %.*s
+bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸bfd_mach_o_read_section_32: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lxbfd_mach_o_read_section_32: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lxbfd_mach_o_read_symtab_symbol: Ð½Ð°Ð·Ð²Ð° Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ (%lu >= %u)bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %d (max %lu): Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÑ”Ð¼Ð¾ Ñƒ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿Ð¾Ð»Ñ� 0x%x: Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÑ”Ð¼Ð¾ Ñƒ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�bfd_mach_o_read_symtab_symbol: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %d Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñƒ %ubfd_mach_o_scan: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°, 0x%lx/0x%lxbfd_pef_scan: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°, 0x%lxblkbeg: Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð½Ð°Ð·Ð²Ð°: %.*s
 blkend: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 0x%08x
-Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� (PC rel16) Ð´Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%s) Ð½Ðµ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÑ”Ñ‚ÑŒÑ�Ñ�Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ð¿Ñ€Ð¸Ð¼ÑƒÑ�Ð¾Ð²Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ bss-pltÐ¿Ñ€Ð¸Ð¼ÑƒÑ�Ð¾Ð²Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ bss-plt Ñ‡ÐµÑ€ÐµÐ· %pBÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Â«%sÂ»Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Â«%sÂ»Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð½Ð° JALX Ð´Ð»Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸, Ñ�ÐºÑƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð°Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð½Ð° JALX Ð´Ð»Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸, Ñ�ÐºÑƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð°Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %sÐ½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ñƒ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÑƒ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ EMH Ñƒ Ð¿ÐµÑ€ÑˆÐ¾Ð¼Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– GST
-Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DMT
+Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� (PC rel16) Ð´Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%s) Ð½Ðµ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÑ”Ñ‚ÑŒÑ�Ñ�Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ð¿Ñ€Ð¸Ð¼ÑƒÑ�Ð¾Ð²Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ bss-pltÐ¿Ñ€Ð¸Ð¼ÑƒÑ�Ð¾Ð²Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ bss-plt Ñ‡ÐµÑ€ÐµÐ· %pBcÂ» Ð°Ð±Ð¾ Â«zcacÂ» Ð°Ð±Ð¾ Â«zcdcÂ» Ð°Ð±Ð¾ Â«zcfÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Â«%sÂ»Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Â«%sÂ»Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ + Ð°Ð±Ð¾ - Ð±Ð°Ð·Ð¾Ð²Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ» Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ– .option Â«%sÂ»Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð½Ð° JALX Ð´Ð»Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸, Ñ�ÐºÑƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð°Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð½Ð° JALX Ð´Ð»Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸, Ñ�ÐºÑƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð°Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %sÐ½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ñƒ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÑƒ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ EMH Ñƒ Ð¿ÐµÑ€ÑˆÐ¾Ð¼Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– GST
+Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ‚Ð¸Ð¿Ð¾Ð²Ñ– Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ»Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DMT
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DMT
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ psect DMT
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DST
@@ -1327,68 +1385,76 @@ X-Generator: Lokalize 2.0
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ GST
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� GST
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GST
-Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GST
 ÐºÐ»Ð°Ñ�: %u, dtype: %u, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u, Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº: 0x%08x
-Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñƒ %pBÐ¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EEOM: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ð²Ð¼Ñ–Ñ�Ñ‚ Ð¹Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ� psindx Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (%#lx)Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ð¹Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð·Ð° Ð·Ð°Ð»Ð¸ÑˆÐ¾Ðº Ð¼Ñ–Ñ�Ñ†Ñ� (%#x)Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EIHD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� ETIRÐ¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� vmsÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %sÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __ctbpÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __epÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __gpÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ñ€Ð°Ð· Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Â«%sÂ» Ð· Â«%sÂ»Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=XGATE]Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¿Ñ€Ð¸Ñ€Ñ–Ñ�Ñ‚ pc +%-4ddelta_pc_l: +0x%08x
+Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñƒ %pBÐ¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EEOM: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð¸Ð¿Ñƒ %d EGSD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð·Ð° Ð·Ð°Ð»Ð¸ÑˆÐ¾Ðº Ð¼Ñ–Ñ�Ñ†Ñ� (%#x)Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð¸Ð¿Ñƒ %d EGSD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ð²Ð¼Ñ–Ñ�Ñ‚ Ð¹Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ� psindx Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (%#lx)Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ð¹Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EIHD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� ETIRÐ¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� vmsÐ¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ GST
+Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %sÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __ctbpÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __epÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __gpÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ñ€Ð°Ð· Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Â«%sÂ» Ð· Â«%sÂ»Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=XGATE]dÂ» Ñ– Â«cÂ» Ð°Ð±Ð¾ Â«dÂ» Ñ– Â«zcddÂ» Ñ– Â«zfadÂ» Ð°Ð±Ð¾ Â«zdinxÐ½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¿Ñ€Ð¸Ñ€Ñ–Ñ�Ñ‚ pc +%-4ddelta_pc_l: +0x%08x
 delta_pc_w %u
 Ð´ÐµÑ�Ðºdimct: %u, aflags: 0x%02x, Ñ†Ð¸Ñ„Ñ€: %u, ÑˆÐºÐ°Ð»Ð°: %u
 Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…: Â«%pAÂ»Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ”Ð¼Ð¾ FDE Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ� Ñƒ %pB(%pA).
 Ñ€Ð¾Ð·Ñ€Ð¸Ð²Ð½Ð¸Ð¹ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ (nbr: %u)
-Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð° Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð¼Ð°Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñƒ Ð¾Ð±Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pAÐ²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ð·Ð½Ð¸ÐºÐ»Ð° Ð· Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒenumbeg, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u, Ð½Ð°Ð·Ð²Ð°: %.*s
+Ð´Ñ–Ð»ÐµÐ½Ð½Ñ� Ð½Ð° Ð½ÑƒÐ»ÑŒdst_define_location %u Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼Ð´Ð°Ð½Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ° Ð½ÐµÐ´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ñ–Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð° Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð¼Ð°Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñƒ Ð¾Ð±Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pAÐ²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ð·Ð½Ð¸ÐºÐ»Ð° Ð· Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒenumbeg, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u, Ð½Ð°Ð·Ð²Ð°: %.*s
 enumelt, Ð½Ð°Ð·Ð²Ð°: %.*s
 enumend
 ÐµÐ¿Ñ–Ð»Ð¾Ð³: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: %u, Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº: %u
- Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ %pB(%pA); Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ .eh_frame_hdr Ð½Ðµ Ð±ÑƒÐ´Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� %s: %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ‚Ð¸Ð¿Ñƒ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ð· Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… elfÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, Ð° Ñƒ %pB â€” Ñ‚Ð°ÐºÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñƒ Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– BE8Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� APCS-%d, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” APCS-%dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� EP9312, Ð° %pB Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� XScaleÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ %pB Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð½Ð¾ Ð½Ð° 4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ‡Ð¸Ñ�Ð»Ð° Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð° %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ—Ñ… Ñƒ Ñ†Ñ–Ð»Ð¾Ñ‡Ð¸Ñ�ÐµÐ»ÑŒÐ½Ñ– Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ†Ñ–Ð»Ñ– Ñ‡Ð¸Ñ�Ð»Ð° Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð° %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ—Ñ… Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ð±Ñ–Ð»ÑŒÑˆÐ¾Ð³Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ�Ð¸Ð²Ñƒ, Ð½Ñ–Ð¶ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾ Ñƒ %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ð±Ñ–Ð»ÑŒÑˆÐ¾Ð³Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ°, Ð½Ñ–Ð¶ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾ Ñƒ %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°, Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°.Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s, Ð°Ð»Ðµ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, Ð° Ñƒ %pB â€” Ð½Ñ–Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð´Ñ–Ð¹Ñ�Ð½Ñ– Ñ‡Ð¸Ñ�Ð»Ð° Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾Ñ— Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ñ–, Ð° Ñƒ %pB â€” 32-Ð±Ñ–Ñ‚Ð¾Ð²Ñ–Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ FPU-3.0, Ð°Ð»Ðµ Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð»Ð¸ÑˆÐµ FPU-2.0Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ VFP, Ð° Ñƒ %pB â€” Ð½Ñ–Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ– FP, Ð° Ñƒ %pB â€” Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ñ– FPÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸-Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ iWMMXt, Ð° Ñƒ %pB â€” Ð½Ñ–Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ñ– FP, Ð° Ñƒ %pB â€” Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ– FPÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ñƒ %s, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ñƒ %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s, Ð° Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð»Ð¸ÑˆÐµ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— MSP430Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð²ÐµÐ»Ð¸ÐºÐ¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ, Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— MSP430Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¼Ð°Ð»Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ, Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– (0x%x) x86: 0x%x>Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%s) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ–Ð· Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%s).Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð±Ñ–Ð¶Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ñ�Ð´ÐºÐ°Ñ… ISA Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½ÑŽ Â«%sÂ» Ð· Â«%sÂ».Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð²ÐµÑ€Ñ�Ñ–Ñ— ISA Ð´Ð»Ñ� Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«%sÂ». %d.%d, Ð° Ð½Ðµ %d.%dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð°Ñ†Ñ–Ñ— SB ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ð· Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð¼ R9Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� XLEN (%u). Ð™Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾, Ð²Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚Ðµ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ñƒ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–ÑŽ.Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: XLEN Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð·Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð´Ð»Ñ� Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u).Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² R2 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ rf16 Ñ– Ð¿Ð¾Ð²Ð½Ð¸Ð¹ Ð½Ð°Ð±Ñ–Ñ€ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð² %d/%dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA, %s Ð· %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»Ñ–Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€, %c/%cÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² %s: %s Ð· %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð²ÐµÑ€Ñ�Ñ–Ð¹ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— priv (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°/Ð¿Ñ€Ð¾Ð¼Ñ–Ð¶Ð½Ð°/Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�).Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ñƒ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ– R9Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº ISA Â«%sÂ». ÐŸÐµÑ€ÑˆÐ¾ÑŽ Ð»Ñ–Ñ‚ÐµÑ€Ð¾ÑŽ Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Â«iÂ» Ð°Ð±Ð¾ Â«eÂ», Ð° Ð¼Ð°Ñ”Ð¼Ð¾ Â«%sÂ».Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð´Ð°Ð½Ñ– Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–, Ñ†Ñ– Ð´Ð°Ð½Ñ– Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² Â«%sÂ»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¼Ñ–Ñ‚ÐºÐ° Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Â«%d, %sÂ» Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð° Ð· Ð¼Ñ–Ñ‚ÐºÐ¾ÑŽ Â«%d, %sÂ»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¸Ð¹ Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ Ð±Ð°Ð·Ð¾Ð²Ñ– Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° %s Ð· %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð· %pB Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²ÐµÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� %pB Ð·Ñ– Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¼ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ %pB Ñ–Ð½ÑˆÐ¾Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð±Ñ–Ð¶Ð½Ð¾Ñ�Ñ‚Ñ– Ñƒ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ– Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� fp16 Ð¼Ñ–Ð¶ %pB Ñ‚Ð° %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� (Ð·Ð°Ð±ÑƒÐ»Ð¸ -fpic?)Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±â€™Ñ”ÐºÑ‚-Ð´Ð¶ÐµÑ€ÐµÐ»Ð¾, %pB, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÑ€Ñ�Ñ–ÑŽ EABI %d, Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�, %pB, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÑ€Ñ�Ñ–ÑŽ EABI %dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ ARC4 Ð¿Ñ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð¾Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» __rtinitÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Tag_ABI_array_object_align_expected Ñƒ %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Tag_ABI_array_object_alignment Ñƒ %pBÐ¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ„Ð°Ð¹Ð»Ð° Ñ�Ñ‚Ð°Ð»Ð¸Ñ�Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, %pBÐ²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfoÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ‡Ð¸Ñ�Ð»Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfoÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� HI16Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfoÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ñ�ÑƒÐ²Ð¸ Ñ„Ð°Ð¹Ð»Ñ–Ð² Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð·Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� .fixupÑ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ñ” Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¸Ð¼Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ñ„Ð°Ð¹Ð» Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–Ñ„Ð°Ð¹Ð» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼Ñ„Ð°Ð¹Ð» Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÑ– Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� FDE, Ñ�ÐºÐµ Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ .eh_frame_hdr, Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ‚Ð¸ %sÐ²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ 0x%08x, Ð²Ñ‚Ñ–Ð¼, _gp Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾
-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð±ÐµÐ· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� _gpÐ¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ‚Ð¸Ð¿Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð² Ñƒ Ñ„Ð°Ð¹Ð»Ð°Ñ… mach-o: %ld Ñ– %ldincr_linum(b): +%u
+Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ %pB(%pA); Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ .eh_frame_hdr Ð½Ðµ Ð±ÑƒÐ´Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ %pB(%pA); Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ .sframe Ð½Ðµ Ð±ÑƒÐ´Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� %s: %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ‚Ð¸Ð¿Ñƒ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ð· Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… elfÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¼Ð¾Ð¶Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð²ÐµÑ€Ñ…Ð½ÑŽ Ð´Ñ–Ð»Ñ�Ð½ÐºÑƒ Ð´Ð°Ð½Ð¸Ñ…, Ð°Ð»Ðµ %pB Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ‚Ðµ, Ñ‰Ð¾ Ð´Ð°Ð½Ñ– Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð¾ Ð»Ð¸ÑˆÐµ Ñƒ Ð½Ð¸Ð¶Ð½Ñ–Ð¹ Ð´Ñ–Ð»Ñ�Ð½Ñ†Ñ– Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ–Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, Ð° Ñƒ %pB â€” Ñ‚Ð°ÐºÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ LOAD Ñ–Ð· Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ RWXÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ TLS Ð· Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñƒ Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– BE8Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� APCS-%d, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” APCS-%dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� EP9312, Ð° %pB Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� XScaleÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ %pB Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð½Ð¾ Ð½Ð° 4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ‡Ð¸Ñ�Ð»Ð° Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð° %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ—Ñ… Ñƒ Ñ†Ñ–Ð»Ð¾Ñ‡Ð¸Ñ�ÐµÐ»ÑŒÐ½Ñ– Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ†Ñ–Ð»Ñ– Ñ‡Ð¸Ñ�Ð»Ð° Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð° %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ—Ñ… Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ð±Ñ–Ð»ÑŒÑˆÐ¾Ð³Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ�Ð¸Ð²Ñƒ, Ð½Ñ–Ð¶ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾ Ñƒ %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ð±Ñ–Ð»ÑŒÑˆÐ¾Ð³Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ°, Ð½Ñ–Ð¶ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾ Ñƒ %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°, Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s, Ð°Ð»Ðµ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, Ð° Ñƒ %pB â€” Ð½Ñ–Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð´Ñ–Ð¹Ñ�Ð½Ñ– Ñ‡Ð¸Ñ�Ð»Ð° Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾Ñ— Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ñ–, Ð° Ñƒ %pB â€” 32-Ð±Ñ–Ñ‚Ð¾Ð²Ñ–Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ FPU-3.0, Ð°Ð»Ðµ Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð»Ð¸ÑˆÐµ FPU-2.0Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ VFP, Ð° Ñƒ %pB â€” Ð½Ñ–Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ– FP, Ð° Ñƒ %pB â€” Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ñ– FPÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸-Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ iWMMXt, Ð° Ñƒ %pB â€” Ð½Ñ–Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ñ– FP, Ð° Ñƒ %pB â€” Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ– FPÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ñƒ %s, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ñƒ %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s, Ð° Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð»Ð¸ÑˆÐµ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— MSP430Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð²ÐµÐ»Ð¸ÐºÐ¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ, Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— MSP430Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¼Ð°Ð»Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ, Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾Ð³Ð¾ AArch64: 0x%x>Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– (0x%x): 0x%x>Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– (0x%x) x86: 0x%x>Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%s) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ–Ð· Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%s)Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð°Ñ†Ñ–Ñ— SB ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ð· Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð¼ R9Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: XLEN Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð·Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð´Ð»Ñ� Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u)Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² R2 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ rf16 Ñ– Ð¿Ð¾Ð²Ð½Ð¸Ð¹ Ð½Ð°Ð±Ñ–Ñ€ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð² %d/%dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA, %s Ð· %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»Ñ–Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€, %c/%cÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² %s: %s Ð· %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ñƒ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ– R9Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº ISA Â«%sÂ». ÐŸÐµÑ€ÑˆÐ¾ÑŽ Ð»Ñ–Ñ‚ÐµÑ€Ð¾ÑŽ Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Â«iÂ» Ð°Ð±Ð¾ Â«eÂ», Ð° Ð¼Ð°Ñ”Ð¼Ð¾ Â«%sÂ»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð±Ñ–Ð¶Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ñ�Ð´ÐºÐ°Ñ… ISA Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½ÑŽ Â«%sÂ» Ð· Â«%sÂ»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð´Ð°Ð½Ñ– Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–, Ñ†Ñ– Ð´Ð°Ð½Ñ– Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² Â«%sÂ»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¼Ñ–Ñ‚ÐºÐ° Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Â«%d, %sÂ» Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð° Ð· Ð¼Ñ–Ñ‚ÐºÐ¾ÑŽ Â«%d, %sÂ»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¸Ð¹ Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ Ð±Ð°Ð·Ð¾Ð²Ñ– Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° %s Ð· %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð· %pB Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²ÐµÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� XLEN (%u). Ð™Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾, Ð²Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚Ðµ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ñƒ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–ÑŽÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ð²Ð¼Ð¸ÐºÐ°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ° (Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .note.GNU-stack)Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ð²Ð¼Ð¸ÐºÐ°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ°, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ note.GNU-stackÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� %pB Ð·Ñ– Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¼ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ %pB Ñ–Ð½ÑˆÐ¾Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %sÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð², %s Ð°Ð±Ð¾ %s, Ñƒ %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ñ‚ÐµÐº, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ° -z Ñ�Ñ‚ÐµÐº Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� uleb128 Ð· Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ 0x%lx Ñƒ %pA Ð· %pB Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€ÑƒÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð±Ñ–Ð¶Ð½Ð¾Ñ�Ñ‚Ñ– Ñƒ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ– Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� fp16 Ð¼Ñ–Ð¶ %pB Ñ‚Ð° %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� (Ð·Ð°Ð±ÑƒÐ»Ð¸ -fpic?)Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±â€™Ñ”ÐºÑ‚-Ð´Ð¶ÐµÑ€ÐµÐ»Ð¾, %pB, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÑ€Ñ�Ñ–ÑŽ EABI %d, Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�, %pB, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÑ€Ñ�Ñ–ÑŽ EABI %dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ ARC4 Ð¿Ñ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð¾Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» __rtinitÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Tag_ABI_array_object_align_expected Ñƒ %pBÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Tag_ABI_array_object_alignment Ñƒ %pBÐ¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ„Ð°Ð¹Ð»Ð° Ñ�Ñ‚Ð°Ð»Ð¸Ñ�Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, %pBÐ²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹fÂ» Ñ– Â«cÂ» Ð°Ð±Ð¾ Â«fÂ» Ñ– Â«zcffÂ» Ð°Ð±Ð¾ Â«zfinxÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfoÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ‡Ð¸Ñ�Ð»Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfoÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� HI16Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfoÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ñ�ÑƒÐ²Ð¸ Ñ„Ð°Ð¹Ð»Ñ–Ð² Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð·Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� .fixupÑ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ñ” Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¸Ð¼Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ñ„Ð°Ð¹Ð» Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–Ñ„Ð°Ð¹Ð» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼Ñ„Ð°Ð¹Ð» Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� uleb128 Ð· Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ 0x%lx Ñƒ %pA Ð· %pB Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€ÑƒÐ¿Ð¾Ð´Ð°Ð»ÑŒÑˆÑ– Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� FDE, Ñ�ÐºÐµ Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ .eh_frame_hdr, Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ‚Ð¸ %sÐ²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð±ÐµÐ· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� _gphÐ¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ‚Ð¸Ð¿Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð² Ñƒ Ñ„Ð°Ð¹Ð»Ð°Ñ… mach-o: %ld Ñ– %ldincr_linum(b): +%u
 incr_linum_l: +%u
 incr_linum_w: +%u
 Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñ‚ÑƒÑ‚: 0x%08x
-Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ RL78Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ RL78Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð»Ñ� %sÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð°Ð±Ð¾ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½ÐµÐ¿Ð°Ñ€Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Â«%sÂ» Ð· Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾ÑŽ Â«%sÂ» Ð¿Ñ€Ð¸Ð·Ð²ÐµÐ»Ð¾ Ð´Ð¾ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ð¾Ð·Ñ€Ñ–Ð»Ð¸Ð²Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÑ†Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð½ÐµÐ¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð°Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .got.locÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð½ÐµÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ñ–Ñ�Ñ‚ÑŒ: Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� %lu != Ð¼Ð°ÐºÑ�. %lu; Ð±ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ñ‚Ðµ Ð¿Ñ€Ð¾ Ñ†ÑŽ Ð²Ð°Ð´ÑƒÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ TARGET2, Â«%sÂ»Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� bfdÐ½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pAÐ½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð²Ñ…Ñ–Ð´Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð½Ðµ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– ELF Ñ– Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð½Ðµ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– mmo. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¾ÑŽ objcopy Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð· ELF Ð°Ð±Ð¾ mmo Ð°Ð±Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð¼ Â«-no-expandÂ» (Ð´Ð»Ñ� gcc Â«-Wa,-no-expandÂ»)Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð²Ñ…Ñ–Ð´Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð½Ðµ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– ELF Ñ– Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð½Ðµ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– mmo. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¾ÑŽ objcopy Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð· ELF Ð°Ð±Ð¾ mmo Ð°Ð±Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð¼ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° gcc Â«-mno-base-addressesÂ».Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ñ–Ñ�Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ñƒ .eh_frame_entry: %pAÐ½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ ETIRÐ½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� %s Ð· ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð°Ð¼Ð¸ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ ip2k: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½ÑŒÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ ip2k: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½ÑŒ Ð±ÐµÐ· Ð¿Ð¾Ð²Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ñ�Ñ‚Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ.Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ñ†Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° - %s - Ñ” Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¾ÑŽ?Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ (PC rel26) Ð´Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%s)Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ�Ð»Ð¾Ð²Ð¾Ð¼ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð¼Ñ–Ñ‚ÐºÐ°, Ð½Ð°Ð·Ð²Ð°: %.*s
+Ð²Ñ…Ñ–Ð´Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ SFrame Ñ–Ð· Ñ–Ð½ÑˆÐ¸Ð¼ abi Ð·Ð°Ð²Ð°Ð¶Ð°ÑŽÑ‚ÑŒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ .sframeÐ²Ñ…Ñ–Ð´Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ SFrame Ñ–Ð· Ñ–Ð½ÑˆÐ¸Ð¼Ð¸ Ð²ÐµÑ€Ñ�Ñ–Ñ�Ð¼Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–Ð² Ð·Ð°Ð²Ð°Ð¶Ð°ÑŽÑ‚ÑŒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ .sframeÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð»Ñ� %sÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð°Ð±Ð¾ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½ÐµÐ¿Ð°Ñ€Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Â«%sÂ» Ð· Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾ÑŽ Â«%sÂ» Ð¿Ñ€Ð¸Ð·Ð²ÐµÐ»Ð¾ Ð´Ð¾ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ð¾Ð·Ñ€Ñ–Ð»Ð¸Ð²Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÑ†Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð½ÐµÐ¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð°Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .got.locÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð½ÐµÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ñ–Ñ�Ñ‚ÑŒ: Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� %lu != Ð¼Ð°ÐºÑ�. %lu; Ð±ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ñ‚Ðµ Ð¿Ñ€Ð¾ Ñ†ÑŽ Ð²Ð°Ð´ÑƒÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ�: Ð½ÐµÐ´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¹ INSN_CLASS_*Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ %sÐ½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° <Ð½Ð¾Ð¼ÐµÑ€>p Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ– .option Â«%sÂ»Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ TARGET2, Â«%sÂ»Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� bfdÐ½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pAÐ½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ�Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð²Ñ…Ñ–Ð´Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð½Ðµ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– ELF Ñ– Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð½Ðµ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– mmo. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¾ÑŽ objcopy Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð· ELF Ð°Ð±Ð¾ mmo Ð°Ð±Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð¼ Â«-no-expandÂ» (Ð´Ð»Ñ� gcc Â«-Wa,-no-expandÂ»)Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð²Ñ…Ñ–Ð´Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð½Ðµ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– ELF Ñ– Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð½Ðµ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– mmo. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¾ÑŽ objcopy Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð· ELF Ð°Ð±Ð¾ mmo Ð°Ð±Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð¼ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° gcc Â«-mno-base-addressesÂ».Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ñ–Ñ�Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ñƒ .eh_frame_entry: %pAÐ½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ ETIRÐ½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� %s Ð· ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð°Ð¼Ð¸ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ ip2k: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½ÑŒÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ ip2k: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½ÑŒ Ð±ÐµÐ· Ð¿Ð¾Ð²Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ñ�Ñ‚Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ.Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ñ†Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° - %s - Ñ” Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¾ÑŽ?Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ (PC rel26) Ð´Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%s)Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ�Ð»Ð¾Ð²Ð¾Ð¼ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð¼Ñ–Ñ‚ÐºÐ°, Ð½Ð°Ð·Ð²Ð°: %.*s
 Ð´Ð¾Ð²Ð¶.: %2u, Ñ‚Ð¸Ð¿: %2u Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ñ�Ð´ÐºÐ°  (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u)
-ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ñ–
-ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ñ…
-ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ñ…
-ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ñ–
-Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ð²Ñ–Ð´Ð±ÑƒÐ²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð±ÑƒÐºÐ²Ð°Ð»ÑŒÐ½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð´Ð¾Ð²Ð³Ð¾Ñ— Ð³Ñ–Ð»ÐºÐ¸, Â«%sÂ»mach-o: Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² (%u), Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð° ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 255,
-Ð°Ñ€Ñ…Ñ–Ð² Ð· Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼Ð¿Ð°Ð¼'Ñ�Ñ‚ÑŒ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð¾mep: Ð½ÐµÐ¼Ð°Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� ÐºÐ¾Ð´Ñƒ %dmodbeg
+ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ñ–ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ñ…ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ñ…ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ñ–Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ð²Ñ–Ð´Ð±ÑƒÐ²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð±ÑƒÐºÐ²Ð°Ð»ÑŒÐ½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÑ–Ð½Ð´ÐµÐºÑ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð´Ð¾Ð²Ð³Ð¾Ñ— Ð³Ñ–Ð»ÐºÐ¸, Â«%sÂ»m' Ð°Ð±Ð¾ `zmmulmach-o: Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² (%u), Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð° ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 255,
+Ð°Ñ€Ñ…Ñ–Ð² Ð· Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð°Ñ€Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð°Ñ€Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ mach-o ARM: reloc Ñ” Ð¿ÐµÑ€ÑˆÐ¸Ð¼ relocÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� mach-o ARM: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %dÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d (pcrel: %d)Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� mach-o: Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²Ð¿Ð°Ð¼'Ñ�Ñ‚ÑŒ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð¾mep: Ð½ÐµÐ¼Ð°Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� ÐºÐ¾Ð´Ñƒ %dmodbeg
 modend
-Ð½Ð°Ð·Ð²Ð°: [Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: %08lx Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° %d]: Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ð¹Ð²Ð¿Ñ€Ð¾Ð²Ð°Ð´Ð¶ÐµÐ½Ð¾ Ð½Ð¾Ð²Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—, Ð°Ð»Ðµ Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…:Ð½Ñ–Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð½Ð°Ð·Ð¾Ð²Ð½Ñ– %s Ð½Ðµ Ð¿Ð¾Ð²â€™Ñ�Ð·Ð°Ð½Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð±ÐµÐ· Ð¿Ð¾Ð¼Ð¸Ð»Ð¾ÐºÐ±Ñ–Ð»ÑŒÑˆÐµ Ð°Ñ€Ñ…Ñ–Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð½ÐµÐ¼Ð°Ñ”Ð½ÐµÐ¼Ð°Ñ” Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²Ñ€Ð¾Ð·Ñ€Ð¸Ð²Ð½Ð¸Ð¹ Ð¼Ð°Ñ�Ð¸Ð² %s
-Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», %sÑ�ÑƒÐ¼Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ 0x%v Ð±ÐµÐ· Ð¾Ð²ÐµÑ€Ð»ÐµÑŽ Ñ‚Ð° Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¾Ð²ÐµÑ€Ð»ÐµÑŽ 0x%v Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑŽÑ‚ÑŒ Ð¼Ñ–Ñ�Ñ‚ÐºÑ–Ñ�Ñ‚ÑŒ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ñ…Ð¾Ð²Ð¸Ñ‰Ð° Ð´Ð°Ð½Ð¸Ñ…
+Ð½Ð°Ð·Ð²Ð°: [Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: %08lx Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° %d]: Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ð¹Ð²Ð¿Ñ€Ð¾Ð²Ð°Ð´Ð¶ÐµÐ½Ð¾ Ð½Ð¾Ð²Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—, Ð°Ð»Ðµ Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…:Ð½Ñ–Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð½Ð°Ð·Ð¾Ð²Ð½Ñ– %s Ð½Ðµ Ð¿Ð¾Ð²â€™Ñ�Ð·Ð°Ð½Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð¸Ð½ÐµÐ¼Ð°Ñ” Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ°Ð±ÐµÐ· Ð¿Ð¾Ð¼Ð¸Ð»Ð¾ÐºÐ±Ñ–Ð»ÑŒÑˆÐµ Ð°Ñ€Ñ…Ñ–Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð½ÐµÐ¼Ð°Ñ”Ð½ÐµÐ¼Ð°Ñ” Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²Ñ€Ð¾Ð·Ñ€Ð¸Ð²Ð½Ð¸Ð¹ Ð¼Ð°Ñ�Ð¸Ð² %s
+Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», %sÐ½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²Ñ�ÑƒÐ¼Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ 0x%v Ð±ÐµÐ· Ð¾Ð²ÐµÑ€Ð»ÐµÑŽ Ñ‚Ð° Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¾Ð²ÐµÑ€Ð»ÐµÑŽ 0x%v Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑŽÑ‚ÑŒ Ð¼Ñ–Ñ�Ñ‚ÐºÑ–Ñ�Ñ‚ÑŒ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ñ…Ð¾Ð²Ð¸Ñ‰Ð° Ð´Ð°Ð½Ð¸Ñ…
 Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– @fptrÐ½ÐµÐ¼Ð°Ñ”Ñ€Ð¾Ð·Ð´Ñ–Ð», Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð»Ñ� Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ GOT Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² GOTÐ½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ð´Ð»Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒÐ½Ðµ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð´Ð°Ð½Ñ–=%lx Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾=%d
 Ð½Ðµ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð·Ð¼Ñ–Ð½Ð½Ñƒ Ñ�ÐµÑ€ÐµÐ´Ð¾Ð²Ð¸Ñ‰Ð° var
-Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ– Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸!Ð·Ñ�ÑƒÐ² Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÐ¸ Ð´Ð»Ñ� Ð²Ñ…Ñ–Ð´Ð½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ» Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ—Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ÑƒÐ¾Ð´Ð½Ñ–Ñ”ÑŽ Ñ–Ð· Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ñ… Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ Ñ†Ñ–Ñ”Ñ— Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ” Ñ‚Ðµ, Ñ‰Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ ÐºÐ¾Ð´Ñ– Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ðº, Ð½Ð°Ñ‡Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¼Ð°Ñ” Ð±Ñ–Ð»ÑŒÑˆÐµ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�, Ð½Ñ–Ð¶ Ð±ÑƒÐ»Ð¾ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð¾ Ñ‚Ð°Ð¼, Ð´Ðµ Ð¹Ð¾Ð³Ð¾ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ñ�Ð»Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ÑƒÐ¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº
+Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ– Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸!Ð·Ñ�ÑƒÐ² Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÐ¸ Ð´Ð»Ñ� Ð²Ñ…Ñ–Ð´Ð½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ» Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ—Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ÑƒÐ¾Ð´Ð½Ñ–Ñ”ÑŽ Ñ–Ð· Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ñ… Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ Ñ†Ñ–Ñ”Ñ— Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ” Ñ‚Ðµ, Ñ‰Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ ÐºÐ¾Ð´Ñ– Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ðº, Ð½Ð°Ñ‡Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¼Ð°Ñ” Ð±Ñ–Ð»ÑŒÑˆÐµ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�, Ð½Ñ–Ð¶ Ð±ÑƒÐ»Ð¾ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð¾ Ñ‚Ð°Ð¼, Ð´Ðµ Ð¹Ð¾Ð³Ð¾ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ñ�Ð»Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ÑƒÐ¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ð´Ð¾Ð´Ð°Ñ‚ÐºÑ–Ð²: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ñ–Ð² Ñ„Ð°Ð¹Ð»Ñ–Ð². Ð¡Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð·Ð¼ÐµÐ½ÑˆÐ¸Ñ‚Ð¸ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¾Ð±'Ñ”ÐºÑ‚Ñ–Ð²/Ð°Ñ€Ñ…Ñ–Ð²Ñ–Ð²
+Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº
 Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lxÐ·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lx:Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lx: Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = 0x%lxÐ·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = 0x%lx:Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð°Ð´Ñ€ÐµÑ�Ð° bkpt 0x%08x
-Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» recbeg: Ð½Ð°Ð·Ð²Ð°: %.*s
+Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» qÂ» Ñ– Â«zfaqÂ» Ð°Ð±Ð¾ Â«zqinxrecbeg: Ð½Ð°Ð·Ð²Ð°: %.*s
 recend
-Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð·Ð°Ð½ÐµÑ�ÐµÐ½Ñƒ Ð´Ð¾ Ð±Ð°Ð½ÐºÑƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñ– Ð°Ð´Ñ€ÐµÑ�, %04lxÐ¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ñ‰Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº Ñƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ–.Ñ€ÐµÐ³Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñƒ %%g%d: %s Ñƒ %pB, Ñ€Ð°Ð½Ñ–ÑˆÐµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %s Ñƒ %pBÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð´Ð°Ð½Ñ–
-Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%d) Ñ” *Ð�Ð•Ð’Ð†Ð”ÐžÐœÐ˜Ðœ*Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� psect, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ñ” RELÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾ÐºÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð¿Ð°Ñ€Ð½Ð¸Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð²Ð¸Ð»ÑƒÑ‡Ð°Ñ”Ð¼Ð¾ Ð½ÐµÐ²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Â«%pBÂ»Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ� %pB: %s
-Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¾Ð²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %drtnbeg
+Ð·Ð°Ð¿Ð¸Ñ� Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼ Ð´Ð»Ñ� Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ Ð½Ð°Ð·Ð²Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð·Ð°Ð½ÐµÑ�ÐµÐ½Ñƒ Ð´Ð¾ Ð±Ð°Ð½ÐºÑƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñ– Ð°Ð´Ñ€ÐµÑ�, %04lxÐ¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ñ‰Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº Ñƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ–.Ñ€ÐµÐ³Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñƒ %%g%d: %s Ñƒ %pB, Ñ€Ð°Ð½Ñ–ÑˆÐµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %s Ñƒ %pBÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð´Ð°Ð½Ñ–
+Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%d) Ñ” *Ð�Ð•Ð’Ð†Ð”ÐžÐœÐ˜Ðœ*Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð¼Ð°Ñ” Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ‚Ð¸Ð¿ GOTÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� psect, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ñ” RELÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾ÐºÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð¿Ð°Ñ€Ð½Ð¸Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð²Ð¸Ð»ÑƒÑ‡Ð°Ñ”Ð¼Ð¾ Ð½ÐµÐ²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Â«%pBÂ»Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ� %pB: %sÐ·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¾Ð²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %drtnbeg
 rtnend: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ 0x%08x
-Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ðµ Ð¼Ð°Ñ” Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒseptyp, Ð½Ð°Ð·Ð²Ð°: %.*s
+Ñƒ rv%d Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«qÂ»Ñƒ rv%d Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«zcfÂ»Ñƒ rv%de Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«hÂ»Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ðµ Ð¼Ð°Ñ” Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒseptyp, Ð½Ð°Ð·Ð²Ð°: %.*s
 set_abs_pc: 0x%08x
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ– Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pAÑ€Ð¾Ð·Ð´Ñ–Ð» Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 64 ÐºÐ‘; Ð½Ð¸Ð¶Ñ‡Ð¸Ð¹ Ð·Ð° Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (Ð´Ð¸Ð². Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -G)som_sizeof_headers Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾Ð²Ð¸Ð±Ð°Ñ‡Ñ‚Ðµ, Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñ– Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ Ð½Ð°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð².
+Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ– Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pAÑ€Ð¾Ð·Ð´Ñ–Ð» Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼; Ð·Ñ€Ð¾Ð±Ñ–Ñ‚ÑŒ Ð½Ð¸Ð¶Ñ‡Ð¸Ð¼ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (Ð´Ð¸Ð². Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -G)som_sizeof_headers Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾Ð²Ð¸Ð±Ð°Ñ‡Ñ‚Ðµ, Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ†ÐµÐ¹ Ñ„Ð°Ð¹Ð»Ð²Ð¸Ð±Ð°Ñ‡Ñ‚Ðµ, Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñ– Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ Ð½Ð°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð².
 Ð²Ð¸Ð±ÐµÑ‡Ñ‚Ðµ, modtab, toc Ñ‚Ð° extrefsyms Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´ dysymtab Ñƒ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ–Ð¹ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ‰Ðµ Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾.Ð´Ð¶ÐµÑ€ÐµÐ»Ð¾ (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u)
 Ñ„Ð°Ð»ÑŒÑˆÐ¸Ð²Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ALPHA_R_BSRÐ¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ Ñ�Ñ‚ÐµÐºÐ° Ð±ÑƒÐ´Ðµ Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð²Ð¸ÐºÐ»Ð¸Ðº Ð· %s Ð´Ð¾ %s
 Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° (%d) Ñƒ _bfd_vms_pushÐ¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ñƒ _bfd_vms_popÑ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ– Ð´Ð°Ð½Ñ–: %s
-Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Â«%sÂ» Ñ” Ñ–Ð½ÑˆÐ¾ÑŽ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° (Ð±ÐµÐ· Ð½Ð°Ð·Ð²Ð¸)ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸ Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°ÑŽÑ‚ÑŒ Ð¾Ð±Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ÑƒÑ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÑ�Ð¸Ð¼Ð²Ð¾Ð» Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¼Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� st_other Ð´Ð»Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ— ABI 1Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñ–Ð²: REGISTER Ñƒ %pB Ñ– %s Ñ€Ð°Ð½Ñ–ÑˆÐµ Ñƒ %pBÑ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸, Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒÐ¼Ð°Ñ�Ð¸Ð² Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸:
+Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Â«%sÂ» Ñ” Ñ–Ð½ÑˆÐ¾ÑŽ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° (Ð±ÐµÐ· Ð½Ð°Ð·Ð²Ð¸)ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸ Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°ÑŽÑ‚ÑŒ Ð¾Ð±Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ÑƒÑ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÑ�Ð¸Ð¼Ð²Ð¾Ð» Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¼Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� st_other Ð´Ð»Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ— ABI 1Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñ–Ð²: REGISTER Ñƒ %pB Ñ– %s Ñ€Ð°Ð½Ñ–ÑˆÐµ Ñƒ %pBÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð¿Ñ€Ð¸Ð²'Ñ�Ð·ÐºÐ¸ STB_GNU_UNIQUE Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU Ñ‚Ð° FreeBSDÑ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸, Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ñ‚Ð¸Ð¿Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² STT_GNU_IFUNC Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU Ñ‚Ð° FreeBSDÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒÐ¼Ð°Ñ�Ð¸Ð² Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸:
 term(b): 0x%02xterm_w: 0x%04xÑƒ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ–Ð¹ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ†Ñ–Ð»Ñ– bfin Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF Ð· %pB Ð²Ð¸Ð½Ð¸Ðº ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² GOT Ð´Ð»Ñ� -fpic. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð· -fPICÑ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–ÑŽ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð´Ð»Ñ� ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ� Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒÑ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ñ‚Ð¸Ð¿Ñƒ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°:
 Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ñ‚Ð¸Ð¿Ñƒ Ð´Ð»Ñ� Ñ�Ð¿Ð¸Ñ�ÐºÑƒ Ñ–Ð½Ð´ÐµÐºÑ�Ñ–Ð² %u:
 Ñ‚Ð¸Ð¿Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº
 typspec (Ð´Ð¾Ð²Ð¶.: %u)
-Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð´Ð°Ð½Ñ– Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� %#xÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ»Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ñ–Ð²Ð½Ð¾Ñ†Ñ–Ð½Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#xÐ½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s (Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ 0x%08x) Ñ–Ð· Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° (Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ 0x%08x), Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� (%d) Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ, Ð²Ñ–Ð´ -32678 Ð´Ð¾ 32767.
-Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� EIHS Ð·Ñ– Ð·Ñ�ÑƒÐ²Ð¾Ð¼ %#xÑ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ Ð· %pBÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#xÐ½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº %s
-Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�, %s, Ñƒ Ñ�ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–: %sÐ½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ STO_SH5_ISA32 Ð½Ð°Ð´ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ„Ð°Ð¹Ð»Ð° core OSF/1, %dÐ½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ egsd, %u
+Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð´Ð°Ð½Ñ– Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� %#xÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ»Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ñ–Ð²Ð½Ð¾Ñ†Ñ–Ð½Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#xÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� EIHS Ð·Ñ– Ð·Ñ�ÑƒÐ²Ð¾Ð¼ %#xÑ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ Ð· %pBÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#xÐ½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº %s
+Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�, %s, Ñƒ Ñ�ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–: %sÐ½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ„Ð°Ð¹Ð»Ð° core OSF/1, %dÐ½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ egsd, %u
 Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿ emh, %u
-Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %sÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿ EGSD, %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ETIR, %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ, %#xÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€, Â«%cÂ», Ñƒ Ñ�ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %sÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s + %sÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ– %sÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾: %xÐ½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ INPUT_SECTION_FLAG, %s
-Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TI COFF, Â«0x%xÂ»Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� .stabÐ½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° STA, %sÐ½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ñ–Ð¶ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð°Ð¼Ð¸ Ð°Ð´Ñ€ÐµÑ� data Ñ‚Ð° insnÐ½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#xÐ²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ gpÐ°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850 E3Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850eÐ°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e1Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2v3Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e3v5Ð·Ð¼Ñ–Ð½Ð½Ñƒ Â«%sÂ» Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ñƒ Ð¾Ð´Ð½Ñ–Ð¹ Ð· Ð¼Ð°Ð»Ð¸Ñ…, Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ñ… Ñ– Ð¼Ð°Ð»ÑŽÑ�Ñ–Ð½ÑŒÐºÐ¸Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð¸Ñ…Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸Ñ�Ñ� Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ñ– Ð¼Ð°Ð»ÑŽÑ�Ñ–Ð½ÑŒÐºÑ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ… Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸Ñ�Ñ� Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ñ– Ð½ÑƒÐ»ÑŒÐ¾Ð²Ñ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ… Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸Ñ�Ñ� Ñƒ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ñ–Ð¹ Ñ– Ð¼Ð°Ð»ÑŽÑ�Ñ–Ð½ÑŒÐºÑ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ… Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð°Ð¹Ð¼Ð°Ñ‚Ð¸ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð¼Ð°Ð»Ð¸Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð¸Ñ…vflags: 0x%02x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: 0x%08x vma:			ÐŸÐ¾Ñ‡Ð°Ñ‚ÐºÐ�Ð´Ñ€ÐµÑ�Ð°	 ÐšÑ–Ð½Ñ†Ð�Ð´Ñ€ÐµÑ�Ð°s	  Ð”Ð°Ð½Ñ–Unwind
+Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %sÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿ EGSD, %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ETIR, %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ» Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ– .option Â«%sÂ»Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»: 0x%02xÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ, %#xÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€, Â«%cÂ», Ñƒ Ñ�ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %sÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s + %sÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %dÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ– %sÐ½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾: %xÐ½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ INPUT_SECTION_FLAG, %s
+Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TI COFF, Â«0x%xÂ»Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� .stabÐ½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° STA, %sÐ½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ñ–Ð¶ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð°Ð¼Ð¸ Ð°Ð´Ñ€ÐµÑ� data Ñ‚Ð° insnÐ½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ gpvÂ», Ð°Ð±Ð¾ Â«zve64dÂ», Ð°Ð±Ð¾ Â«zve64fÂ», Ð°Ð±Ð¾ Â«zve32fvÂ», Ð°Ð±Ð¾ Â«zve64xÂ», Ð°Ð±Ð¾ Â«zve32xÐ°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850 E3Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850eÐ°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e1Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2v3Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e3v5Ð·Ð¼Ñ–Ð½Ð½Ñƒ Â«%sÂ» Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ñƒ Ð¾Ð´Ð½Ñ–Ð¹ Ð· Ð¼Ð°Ð»Ð¸Ñ…, Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ñ… Ñ– Ð¼Ð°Ð»ÑŽÑ�Ñ–Ð½ÑŒÐºÐ¸Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð¸Ñ…Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸Ñ�Ñ� Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ñ– Ð¼Ð°Ð»ÑŽÑ�Ñ–Ð½ÑŒÐºÑ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ… Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸Ñ�Ñ� Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ñ– Ð½ÑƒÐ»ÑŒÐ¾Ð²Ñ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ… Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸Ñ�Ñ� Ñƒ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ñ–Ð¹ Ñ– Ð¼Ð°Ð»ÑŽÑ�Ñ–Ð½ÑŒÐºÑ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ… Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð°Ð¹Ð¼Ð°Ñ‚Ð¸ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð¼Ð°Ð»Ð¸Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð¸Ñ…vflags: 0x%02x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: 0x%08x vma:			ÐŸÐ¾Ñ‡Ð°Ñ‚ÐºÐ�Ð´Ñ€ÐµÑ�Ð°	 ÐšÑ–Ð½Ñ†Ð�Ð´Ñ€ÐµÑ�Ð°s	  Ð”Ð°Ð½Ñ–Unwind
 Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .pdata (%ld) Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %d
-Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ñ– %pB Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�ÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ wchar_tÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ñ– %pB Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�ÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° Ñ‚Ð¸Ð¼, Ñ‡Ð¸ Ð±ÑƒÐ»Ð¾ Ñ—Ñ… Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� DSBTÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸, Ð° Ñƒ %pB Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ (%Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸Ðº Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² %pB Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ñ‚ÑŒÑ�Ñ�Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ, Ð° Ñƒ %pB Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA, %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ð´Ð»Ñ� Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ð· Ñ‡Ð¸Ñ�Ð»Ð°Ð¼Ð¸ Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s; Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÑ–Ð² Ð¼Ñ–Ð¶ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸ Ð¼Ð¾Ð¶Ðµ Ð·Ð°Ð·Ð½Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹ wchar_t, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹ wchar_t; Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ wchar_t Ð¼Ñ–Ð¶ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸ Ð¼Ð¾Ð¶Ðµ Ð·Ð°Ð·Ð½Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA, %d, (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA %d (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA, %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ð· Ñ‡Ð¸Ñ�Ð»Ð°Ð¼Ð¸ Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %d, (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ð· Ñ‡Ð¸Ñ�Ð»Ð°Ð¼Ð¸ Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %d, (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ð´Ð»Ñ� Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼, %s Ð· %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ GNU_PROPERTY_TYPE (%ld), Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %#lxÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ GNU_PROPERTY_TYPE (%ld), Ñ‚Ð¸Ð¿ (0x%x), Ð¾Ð±Ñ�Ñ�Ð³ Ð´Ð°Ð½Ð¸Ñ…: 0x%xÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Â«Ð½Ðµ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ñ‚Ð¸ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½ÐµÂ», Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 0x%xÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚ÐµÐºÐ°: 0x%xÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»ÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° ARC %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° MSPABI %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ GNU_PROPERTY_TYPE (%ld): 0x%xÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ
+Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ñ– %pB Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�ÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ wchar_tÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ñ– %pB Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�ÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° Ñ‚Ð¸Ð¼, Ñ‡Ð¸ Ð±ÑƒÐ»Ð¾ Ñ—Ñ… Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� DSBTÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸, Ð° Ñƒ %pB Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ LOAD Ñ–Ð· Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ RWXÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ TLS Ð· Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸Ðº Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² %pB Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Ñ–Ð· Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð», Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– ÐºÑ–Ð½Ñ†Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚, Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– ÐºÑ–Ð½Ñ†Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ, Ð° Ñƒ %pB Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¿Ñ€Ð¸Ð²Ñ–Ð»ÐµÐ¹Ð¾Ð²Ð°Ð½Ñƒ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— Ð¿Ñ€Ð°Ð² Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ %u.%u.%u, Ð°Ð»Ðµ Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ� %u.%u.%uÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA, %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ð´Ð»Ñ� Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ð· Ñ‡Ð¸Ñ�Ð»Ð°Ð¼Ð¸ Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s; Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÑ–Ð² Ð¼Ñ–Ð¶ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸ Ð¼Ð¾Ð¶Ðµ Ð·Ð°Ð·Ð½Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹ wchar_t, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹ wchar_t; Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ wchar_t Ð¼Ñ–Ð¶ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸ Ð¼Ð¾Ð¶Ðµ Ð·Ð°Ð·Ð½Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA, %d, (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA %d (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA, %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ð· Ñ‡Ð¸Ñ�Ð»Ð°Ð¼Ð¸ Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %d, (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ð· Ñ‡Ð¸Ñ�Ð»Ð°Ð¼Ð¸ Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %d, (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ð´Ð»Ñ� Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼, %s Ð· %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ GNU_PROPERTY_TYPE (%ld), Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %#lxÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ GNU_PROPERTY_TYPE (%ld), Ñ‚Ð¸Ð¿ (0x%x), Ð¾Ð±Ñ�Ñ�Ð³ Ð´Ð°Ð½Ð¸Ñ…: 0x%xÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Â«Ð½Ðµ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ñ‚Ð¸ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½ÐµÂ», Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 0x%xÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚ÐµÐºÐ°: 0x%xÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»ÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° ARC %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° MSPABI %dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ GNU_PROPERTY_TYPE (%ld): 0x%xÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ
 Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°Ñ” %s
-Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --plt-localentry Ð¾Ñ�Ð¾Ð±Ð»Ð¸Ð²Ð¾ Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ð¹, Ñ�ÐºÑ‰Ð¾ Ñƒ ld.so Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð½Ñ� Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½ÑŒ ABIÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RL78_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RX_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� (%u) Ð¹Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pAÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ñ” Ð¼ÐµÐ½ÑˆÐ¸Ð¼ Ð·Ð° %u Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¿Ñ€Ð¾Ð±Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÑ„ÑƒÐ½ÐºÑ†Ñ–Ð¾Ð½Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %s, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð· Ð½Ð¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´, Ñ�ÐºÐ¸Ð¹ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸, Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB Ñƒ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´ÑŒ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚ Ð·Ð·Ð¾Ð²Ð½Ñ–Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð´Ð°Ð½Ñ– Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ�
-Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ”Ð¼Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ„Ð°Ð¹Ð»Ð° %pB ck%s ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†ÐµÐ¼ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� ck%s, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ ck%sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gc-sections Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ñ‚ÑŒÑ�Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ�ÐºÐ° Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· PICÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ñ‚ÑŒÑ�Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ�ÐºÐ° Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· PIDÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð¹Ð¾Ð³Ð¾ Ð²Ð¶Ðµ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñ‚Ð°Ðº, Ñ‰Ð¾Ð± Ð²Ñ–Ð½ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½Ñ�Ð² Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚ÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾ Ð½Ð° Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð½Ð° PROGBITSÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ” Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ñ– Ð¿Ð¾Ð·Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð· %d Ð½Ð° %d Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ e-Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸, Â«%#lxÂ»Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ð°Ð±Ð¾ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñ–; Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ñ‚Ð¸Ð¿Ð¾Ð²Ñƒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ð²Ñƒ Ð±ÑƒÐ»Ð¾ Ð¿Ð¾Ð²Ñ–Ð»ÑŒÐ½Ð¸Ð¼: Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ�ÑƒÑ”Ð¼Ð¾ Ñ‡Ð°Ñ�Ð¾Ð²Ñƒ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ð¿Ð¸Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð·Ð° Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (Ñ‚Ð¾Ð±Ñ‚Ð¾ Ð²Ñ–Ð´â€™Ñ”Ð¼Ð½Ð¸Ð¼) Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ Ñƒ Ñ„Ð°Ð¹Ð»Ñ–Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» xdata
-Ñ‚Ð°ÐºÐ½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ‚Ð¸ %s Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñ–PRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: bad reloc address %# in section `%pA'%pB: illegal relocation type %d at address %#%pB: corrupt symbol count: %#%pB: not enough memory to allocate space for %# symbols of size %#%pB: bad string table size %error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %%pB: error: attribute section length too small: %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: corrupt size field in group section header: %#%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
- linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: version count (%) does not match symbol count (%ld)warning: %pB is truncated: expected core file size >= %, found: %%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csectTOC overflow: %# > 0x10000; try -mminimal-toc when compiling%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%pB: Data Directory size (%lx) exceeds space left in section (%)%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ² Ñ€Ñ�Ð´ÐºÐ°, % >= %%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TOC Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð½ÐµÐ¼Ð°Ñ” Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñƒ TOC%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ R_SH_USES%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: R_SH_USES Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñƒ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ %#x%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� R_SH_USES%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� COUNT%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#%pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: %#%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð¼Ñ–Ñ�Ñ†Ñ� Ð´Ð»Ñ� %# Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ %#%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² %Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB(%pA) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (%# Ð±Ð°Ð¹Ñ‚Ñ–Ð²)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ (%) Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð°Ð±Ð¾ Ñ€Ñ–Ð²Ð½Ð¸Ð¼ Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ %s (%).ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð´Ð°Ð½Ð¸Ñ… (%) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð±ÑƒÑ„ÐµÑ€Ð°ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ %ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼ (%)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð´Ð°Ð½Ñ– Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼Ð¸ (%#) Ð·Ð° Ð¼Ñ–Ñ�Ñ†Ðµ, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– (%#lx)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� %%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ: %%pB(%pA+%#): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñ€Ñ�Ð´ÐºÐ°, %u >= %, Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»%pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð´Ð°Ð½Ñ– Ð¿Ð¾Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð³Ñ€ÑƒÐ¿: %#%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñ– Ð´Ð°Ð½Ñ– Ð¿Ð¾Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð³Ñ€ÑƒÐ¿: %#%pB: (Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA) lma %# Ñ�ÐºÐ¾Ñ€Ð¸Ð³Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð¾ %#%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¹ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð·Ð° vaddr=%#, Ñ‚Ð°Ðº Ñ– Ñ‚Ñ€ÐµÐ±Ð°?%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° %# Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CMEM Ð´Ð¾ Â«%sÂ» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼, 16 MSB Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %#)%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CMEM Ð´Ð¾ Â«%s+%#Â» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼, 16 MSB Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %#)%pB(%pA+%#):  Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s, Â«%#lxÂ», Ñƒ Ñ‚Ñ€Ð°Ð¼Ð¿Ð»Ñ–Ð½Ñ– TLS%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s, Â«%#lxÂ», Ð½Ð° Ñ�ÐºÑƒ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� TLS_GOTDESC%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾%pB(%pA+%#): Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð³Ñ€ÑƒÐ¿ ALU Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ADD Ð°Ð±Ð¾ SUB%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð¿Ð¾Ð´Ñ–Ð»Ñƒ %# Ð· Ð¼ÐµÑ‚Ð¾ÑŽ Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ SEC_MERGE%pB(%pA+%#): %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ TLS %s%pB(%pA+%#): %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð¿Ð¾Ð·Ð° TLS %s%pB(%#): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX. ÐŸÐµÑ€ÐµÑ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ Ð½Ð° % Ð±Ð°Ð¹Ñ‚Ñ–Ð². ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ.%pB(%pA+%#): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %d%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Â«%pA+%#Â» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼, %, Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼, %, Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s, Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -ffunction-sections%pB(%pA+%#): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ñ— Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ %s Ð´Ð»Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %#x Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ– Ð½ÐµÑ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ� %s%pB: Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� TLS Ð· %s Ð´Ð¾ %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ñƒ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð·Ð°Ð·Ð½Ð°Ð»Ð¾ Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº ip2k: Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ñ‰Ð¾Ð´Ð¾ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ Ñƒ %# (Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� = %#).ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº ip2k: Ð·Ð°Ð¹Ð²Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� Ñ‰Ð¾Ð´Ð¾ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ Ñƒ %# (Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� = %#).%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¾ %#.%pB(%pA+%#): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ñ–Ð· Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾ÑŽ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ %#x%pB(%pA): Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� PID %s Ð´Ð¾ %# (Ñ‰Ð¾Ð´Ð¾ %s Ñƒ %s)%pB(%pA+%#): Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS %s%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CALL15 Ñƒ %# Ð½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: R_SH_USES Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñƒ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ 0x%x%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ðµ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¾ÑŽ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s, %#%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_SH_PSHA % Ð½Ðµ Ñƒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ– -32..32%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_SH_PSHL % Ð½Ðµ Ñƒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ– -32..32%pB(%pA+%#): Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ñƒ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÑƒ Ð´Ð¾ Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð·Ð° Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ–Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ»%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— GD->LE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xd4??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xc7??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xd1??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x310c)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x410b)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x34cc)%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— IE->LE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xd0??: mov.l)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x0?12: stc)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x0?ce: mov.l)%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— GD->IE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— LD->LE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#%pB(%s+%#): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñ– Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñƒ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ %#x%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¾ %#%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº GOT % Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð¼Ñƒ Ð´Ð¾Ð´Ð°Ð½ÐºÑƒ GOT %%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº PLT % Ð´Ð¾ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð¾ %# Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA%pB(%pA+%#): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€=%#)%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð° Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� XTENSA_ASM_SIMPLIFY, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð° Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s%pB: %pA+%#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾Ñ— Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—ÑˆÐ°Ð±Ð»Ð¾Ð½ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð»Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‚Ð¸ .plt, Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ dp = %%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ». Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� brl Ð°Ð±Ð¾ Ð½ÐµÐ¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�Ð¼.%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð¾ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð´Ð°Ð½Ð¸Ñ… (%# >= 0x400000)%pB: Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ TLS Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ».%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br (%s) Ð´Ð¾ Â«%sÂ» Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð· Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ %# (> 0x1000000).Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð· % Ñƒ %pB Ð½Ð° % Ñƒ %pB%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� % Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %ld%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡ÐµÑ€ÐµÐ· Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŽ Ð½ÐµÐ¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�
- Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ¾Ð¼ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð°: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾: %# != Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾: %#%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° LOCAL: Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€ $% Ð½Ðµ Ñ” Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¼ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¾Ð¼. ÐŸÐµÑ€ÑˆÐ¸Ð¼ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¼ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¾Ð¼ Ñ” $%.%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ STT_GNU_IFUNC, Â«%sÂ», Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº: %%pB: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº %s%#x Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ%pB: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ð²ÐµÑ€Ñ�Ñ–Ñ— (%) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ (%ld)Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° >= %, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾: %.%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%# >= %#lx) Ð´Ð»Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»%pB: Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ (%#) Ð´Ð»Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð°Ð»Ðµ Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%#) Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA, Ñ�ÐºÐµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”%pB: %pA+%#: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð»Ñ� INHERIT%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«.reginfoÂ»; Ð¼Ð°Ð² Ð±ÑƒÑ‚Ð¸ %, Ð¼Ð°Ñ”Ð¼Ð¾ %%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOT Ñƒ %# Ñ” Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¼ Ñƒ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ð°Ñ…%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CALL16 Ñƒ %# Ð½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� LO16 Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð´Ð»Ñ� %s Ñƒ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»%pB: Ð·Ð°Ð¿Ð¸Ñ� Â«%pAÂ» VMA %# Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¼ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ�Ñ� Â«-Ttext-segment=...Â»%pB: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� Â«%pAÂ» % Ð· Â«%pAÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ ADDIUPC%pB: Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº Â«%pAÂ» VMA %# Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¼ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ�Ñ� Â«-Ttext-segment=...Â»%pB: 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° %# Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° Intel%pB: Ð°Ð´Ñ€ÐµÑ�Ð° %# Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° IntelÐ°Ð´Ñ€ÐµÑ�Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%) Ð½Ð¸Ð¶Ñ‡Ðµ Ð·Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° (%)%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%)%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð½Ð°Ð´Ñ–Ñ�Ð»Ð°Ñ‚Ð¸ Ð´Ð°Ð½Ñ– Ð½Ð° Ð½ÐµÐºÑ€Ð°Ñ‚Ð½Ñƒ Ð´Ð¾ 4 Ð°Ð´Ñ€ÐµÑ�Ñƒ %#%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð²; Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ â€” %%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð´Ð»Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ %: %#%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» XTY_ER Â«%sÂ»: ÐºÐ»Ð°Ñ� %d, Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ” ÐºÐ»Ð°Ñ�Ð¾Ð¼ %d, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s:% Ð½Ðµ Ñƒ csectÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� TOC: %# > 0x10000; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -mminimal-toc Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ�%pB(%pA+%#): Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ñ– % Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð´Ð»Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ð½Ð° %-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ð¼ÐµÐ¶Ñƒ, Ð²Ñ‚Ñ–Ð¼, Ð¼Ð°Ñ”Ð¼Ð¾ Ð»Ð¸ÑˆÐµ %%pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ð°Ð½Ð¸Ñ… (%lx) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¼Ñ–Ñ�Ñ†Ñ�, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– (%)
\ No newline at end of file
+Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð»Ñ–Ð´ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ %s, Ð° Ð½Ðµ %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .note.GNU-stack Ð½ÐµÑ�Ð²Ð½Ð¸Ð¼ Ñ‡Ð¸Ð½Ð¾Ð¼ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ�Ñ‚ÐµÐºÐ°Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ° (Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .note.GNU-stack Ñ” Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¼)Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --plt-localentry Ð¾Ñ�Ð¾Ð±Ð»Ð¸Ð²Ð¾ Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ð¹, Ñ�ÐºÑ‰Ð¾ Ñƒ ld.so Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð½Ñ� Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½ÑŒ ABIÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --plt-localentry Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ñ–Ð· Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¸Ð¼ Ñ‰Ð¾Ð´Ð¾ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ ÐºÐ¾Ð´Ð¾Ð¼ power10Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ� Ñƒ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ– Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ Ñ�Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¿Ñ€Ð°Ð²Ð¶Ð½Ñ– Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸. Ð Ð°Ð´Ð¸Ð¼Ð¾ Ð²Ð¸Ð²Ñ‡Ð¸Ñ‚Ð¸ Ñ†Ðµ Ð¿Ð¸Ñ‚Ð°Ð½Ð½Ñ�.Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ– Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ Ñ�Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¿Ñ€Ð°Ð²Ð¶Ð½Ñ– Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸. Ð Ð°Ð´Ð¸Ð¼Ð¾ Ð²Ð¸Ð²Ñ‡Ð¸Ñ‚Ð¸ Ñ†Ðµ Ð¿Ð¸Ñ‚Ð°Ð½Ð½Ñ�.Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RL78_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RX_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� (%u) Ð¹Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pAÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ñ” Ð¼ÐµÐ½ÑˆÐ¸Ð¼ Ð·Ð° %u, Ñ‰Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ñƒ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ– Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ñ” Ð¼ÐµÐ½ÑˆÐ¸Ð¼ Ð·Ð° %u Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¿Ñ€Ð¾Ð±Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÑ„ÑƒÐ½ÐºÑ†Ñ–Ð¾Ð½Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %s, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð· Ð½Ð¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´, Ñ�ÐºÐ¸Ð¹ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸, Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB Ñƒ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´ÑŒ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚ Ð·Ð·Ð¾Ð²Ð½Ñ–Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð´Ð°Ð½Ñ– Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ�
+Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ”Ð¼Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¼Ð¸ÐºÐ°Ñ”Ð¼Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ñ‚ÐµÐº, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ° -z Ñ�Ñ‚ÐµÐº Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ„Ð°Ð¹Ð»Ð° %pB %s ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ %s, Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ñ–Ñ‚ÑŒ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñƒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ„Ð°Ð¹Ð»Ð° %pB %s ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†ÐµÐ¼ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� ck%s, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gc-sections Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ñ‚ÑŒÑ�Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ�ÐºÐ° Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· PICÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ñ‚ÑŒÑ�Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ�ÐºÐ° Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· PIDÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð¹Ð¾Ð³Ð¾ Ð²Ð¶Ðµ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñ‚Ð°Ðº, Ñ‰Ð¾Ð± Ð²Ñ–Ð½ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½Ñ�Ð² Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚ÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð¸Ð²Ñ–Ð»ÐµÐ¹Ð¾Ð²Ð°Ð½Ñƒ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— Ð¿Ñ€Ð°Ð² Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ 1.9.1 Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ñ–Ð· Ñ–Ð½ÑˆÐ¸Ð¼Ð¸ Ð²ÐµÑ€Ñ�Ñ–Ñ�Ð¼Ð¸ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ð¹Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾ Ð½Ð° Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð½Ð° PROGBITSÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ” Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ñ– Ð¿Ð¾Ð·Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð· %d Ð½Ð° %d Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð½Ð°Ð·Ð²Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Â«%#xÂ»Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ e-Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸, Â«%#lxÂ»Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ð°Ð±Ð¾ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñ–; Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ñ‚Ð¸Ð¿Ð¾Ð²Ñƒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ð²Ñƒ Ð±ÑƒÐ»Ð¾ Ð¿Ð¾Ð²Ñ–Ð»ÑŒÐ½Ð¸Ð¼: Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ�ÑƒÑ”Ð¼Ð¾ Ñ‡Ð°Ñ�Ð¾Ð²Ñƒ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÑƒÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ð¿Ð¸Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð·Ð° Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (Ñ‚Ð¾Ð±Ñ‚Ð¾ Ð²Ñ–Ð´â€™Ñ”Ð¼Ð½Ð¸Ð¼) Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ Ñƒ Ñ„Ð°Ð¹Ð»Ñ–Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» xdata
+Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� x ISA Â«%sÂ» Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñ–Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ�Ð¼Ð¸Ñ‚Ð°ÐºÐ½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ‚Ð¸ %s Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñ–zbbÂ» Ð°Ð±Ð¾ Â«zbkbzbcÂ» Ð°Ð±Ð¾ Â«zbkczcbÂ» Ñ– Â«zbazcbÂ» Ñ– Â«zbbzcbÂ» Ñ– Â«zmmulÂ» Ð°Ð±Ð¾ Â«zcbÂ» Ñ– Â«mzfhÂ» Ñ– Â«zfazfhÂ» Ñ– Â«zfaÂ» Ð°Ð±Ð¾ Â«zvfhÂ» Ñ– Â«zfazfhÂ» Ð°Ð±Ð¾ Â«zhinxzfhÂ» Ð°Ð±Ð¾ Â«zvfhzfhminÂ» Ñ– Â«dÂ» Ð°Ð±Ð¾ Â«zhinxminÂ» Ñ– Â«zdinxzfhminÂ» Ñ– Â«qÂ» Ð°Ð±Ð¾ Â«zhinxminÂ» Ñ– Â«zqinxzfhminÂ» Ð°Ð±Ð¾ Â«zhinxminzihintntlÂ» Ñ– Â«cÂ» Ð°Ð±Ð¾ Â«zihintntlÂ» Ñ– Â«zcazkndÂ» Ð°Ð±Ð¾ Â«zknezvbbzvbczvkbzvkgzvknedzvknhaÂ» Ð°Ð±Ð¾ Â«zvknhbzvksedzvkshÐ Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� zvl*b Ð¼Ð°ÑŽÑ‚ÑŒ Ð²Ð¼Ð¸ÐºÐ°Ñ‚Ð¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«vÂ» Ð°Ð±Ð¾ Â«zveÂ»PRIu64PRIx64PRId64%pB: invalid string offset % >= %%pB: TOC reloc at %# to symbol `%s' with no TOC entry%pB: TLS relocation at 0x% over non-TLS symbol %s (0x%x)
+%pB: TLS local relocation at 0x% over imported symbol %s
+%pB: relocation (%d) at 0x% has wrong r_rsize (0x%x)
+%pB: %#: warning: bad R_SH_USES offset%pB: %#: warning: R_SH_USES points to unrecognized insn %#x%pB: %#: warning: bad R_SH_USES load offset%pB: %#: warning: could not find expected reloc%pB: %#: warning: symbol in unexpected section%pB: %#: warning: could not find expected COUNT reloc%pB: %#: warning: bad count%pB: %#: fatal: reloc overflow while relaxing%pB: relocation (%d) at (0x%) has wrong r_rsize (0x%x)
+%pB: illegal relocation type %d at address %#%pB: bad string table size %%pB: stripping non-representable symbol '%s' (value 0x%)%pB: bad reloc address %# in section `%pA'error: %pB(%pA) is too large (%# bytes)DWARF error: offset (%) greater than or equal to %s size (%)DWARF error: data count (%) larger than buffer sizeDWARF error: unknown format content type %DWARF error: line info section is too small (%)DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)DWARF error: unable to read alt ref %DWARF error: unable to locate abstract instance DIE ref %%pB(%pA+%#): unresolvable %s relocation against symbol `%s'%pB: invalid string offset %u >= % for section `%s'%pB: invalid size field in group section header: %#%pB: section %pA lma %# adjusted to %#%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?%pB: warning: segment alignment of %# is too large%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)ERROR: CMSE stub (%s section) too far (%#) from destination (%#)%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC%pB(%pA+%#): %s relocation not permitted in shared object%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations%pB(%pA+%#): overflow whilst splitting %# for group relocation %s%pB(%pA+%#): %s relocation against SEC_MERGE section%pB(%pA+%#): %s used with TLS symbol %s%pB(%pA+%#): %s used with non-TLS symbol %s%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction%pB(%pA+%#): unresolvable relocation against symbol `%s'%pB(%pA+%#): reloc against `%s': error %d%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend%pB, section %pA: relocation %s with non-zero addend % against local symbol%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link%pB(%pA+%#): cannot handle %s for %s%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failedip2k linker: missing page instruction at %# (dest = %#)ip2k linker: redundant page instruction at %# (dest = %#)%pB: warning: %s points to unrecognized reloc at %#global pointer relative relocation at address %# when _gp not defined
+unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767
+%pB(%pA+%#): error: %s with unexpected instruction %#x%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)%pB(%pA+%#): invalid instruction for TLS relocation %s%pB: CALL15 reloc at %# not against global symbol%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x%pB: %#: fatal: unaligned branch target for relax-support relocation%pB: %#: fatal: unaligned %s relocation %#%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32%pB(%pA+%#): cannot emit fixup to `%s' in read-only section%pB(%pA+%#): %s relocation against external symbol "%s"%pB(%pA): offset in relocation for GD->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)%pB(%pA): offset in relocation for IE->LE translation is too small: %#%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)%pB(%pA): offset in relocation for GD->IE translation is too small: %#%pB(%pA): offset in relocation for LD->LE translation is too small: %#%pB(%s+%#): unresolvable %s relocation against symbol `%s'%pB: %#: warning: %s points to unrecognized insns%pB: %#: warning: %s points to unrecognized insn %#x%pB: %#: warning: %s points to unrecognized reloc%pB: %#: warning: %s points to unrecognized reloc %#%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %%pB: warning: PLT addend of % to `%s' from %pA section ignored%pB: warning: %s relocation to %# from %pA section%pB(%pA+%#): relocation offset out of range (size=%#)%pB(%pA+%#): could not decode instruction; possible configuration mismatch%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch%pB(%pA+%#): unexpected fix for %s relocation%pB: %pA+%#: warning: %s relocation against unexpected insnstub entry for %s cannot load .plt, dp offset = %%pB(%pA+%#): cannot reach %s%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch%pB: short data segment overflowed (%# >= 0x400000)%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'.%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000).warning: size of symbol `%s' changed from % in %pB to % in %pB%pB(%pA): relocation % has invalid symbol index %ld%pB: Internal inconsistency error for value for
+ linker-allocated global register: linked: %# != relaxed: %#%pB: LOCAL directive: register $% is not a local register; first global register is $%%pB(%pA+%#): misaligned symbol `%s' (%#) for relocation %s%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range%pB: %pA+%: relocation addend % too large%pB: version count (%) does not match symbol count (%ld)%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol tableerror: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol%pB: %pA+%#: no symbol found for INHERIT%pB: incorrect `.reginfo' section size; expected %, got %%pB: GOT reloc at %# not expected in executables%pB: CALL16 reloc at %# not against global symbol%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'%pB 64-bit address %# out of range for Intel Hex file%pB: address %# out of range for Intel Hex filesection address (%#) below start of segment (%#)%pB: access beyond end of merged section (%)%pB: attempt to emit contents at non-multiple-of-4 address %#%pB: bad symbol definition: `Main' set to % rather than the start address %
+%pB: too many initialized registers; section length %%pB: invalid start address for initialized registers of length %: %#%pB(%pA+%#): %s relocation offset out of order%pB(%pA+%#): %s relocation offset out of range%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %%pB: XMC_TC0 symbol `%s' is class %d scnlen %%pB: reloc %s:% not in csect%pB: Unable to find a stub csect in rangeof relocation at %# targeting'%s'TOC overflow: %# > 0x10000; try -mminimal-toc when compiling%pB: error: erratum 843419 immediate 0x% out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead%pB(%pA+%#): unresolvable %s relocation in section `%s'%# invaild imm%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x% without any addend, but may be 0x% after adding the %%pcrel_lo addend%pB: Data Directory (%lx bytes at %) extends across section boundary at %%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ² Ñ€Ñ�Ð´ÐºÐ°, % >= %%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TOC Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð½ÐµÐ¼Ð°Ñ” Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñƒ TOC%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ 0x% Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾Ð·Ð° TLS %s (0x%x)
+%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ 0x% Ð½Ð° Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s
+%pB: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%d) Ñƒ 0x% Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ r_rsize (0x%x)
+%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ R_SH_USES%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: R_SH_USES Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñƒ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ %#x%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� R_SH_USES%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� COUNT%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ%pB: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%d) Ñƒ (0x%) Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ r_rsize (0x%x)
+%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² %%pB: Ð¿Ñ€Ð¸Ð±Ð¸Ñ€Ð°Ñ”Ð¼Ð¾ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� 0x%)%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB(%pA) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (%# Ð±Ð°Ð¹Ñ‚Ñ–Ð²)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ (%) Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð°Ð±Ð¾ Ñ€Ñ–Ð²Ð½Ð¸Ð¼ Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ %s (%).ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð´Ð°Ð½Ð¸Ñ… (%) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð±ÑƒÑ„ÐµÑ€Ð°ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ %ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼ (%)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð´Ð°Ð½Ñ– Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼Ð¸ (%#) Ð·Ð° Ð¼Ñ–Ñ�Ñ†Ðµ, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– (%#lx)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� %ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¹ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ DIE %%pB(%pA+%#): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñ€Ñ�Ð´ÐºÐ°, %u >= %, Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñ– Ð´Ð°Ð½Ñ– Ð¿Ð¾Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð³Ñ€ÑƒÐ¿: %#%pB: (Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA) lma %# Ñ�ÐºÐ¾Ñ€Ð¸Ð³Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð¾ %#%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¹ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð·Ð° vaddr=%#, Ñ‚Ð°Ðº Ñ– Ñ‚Ñ€ÐµÐ±Ð°?%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° %# Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CMEM Ð´Ð¾ Â«%sÂ» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼, 16 MSB Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %#)%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CMEM Ð´Ð¾ Â«%s+%#Â» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼, 16 MSB Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %#)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº CMSE (Ñ€Ð¾Ð·Ð´Ñ–Ð» %s) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð´Ð°Ð»ÐµÐºÐ¸Ð¼ (%#) Ð²Ñ–Ð´ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� (%#)%pB(%pA+%#):  Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s, Â«%#lxÂ», Ñƒ Ñ‚Ñ€Ð°Ð¼Ð¿Ð»Ñ–Ð½Ñ– TLS%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s, Â«%#lxÂ», Ð½Ð° Ñ�ÐºÑƒ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� TLS_GOTDESC%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾%pB(%pA+%#): Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð³Ñ€ÑƒÐ¿ ALU Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ADD Ð°Ð±Ð¾ SUB%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð¿Ð¾Ð´Ñ–Ð»Ñƒ %# Ð· Ð¼ÐµÑ‚Ð¾ÑŽ Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ SEC_MERGE%pB(%pA+%#): %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ TLS %s%pB(%pA+%#): %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð¿Ð¾Ð·Ð° TLS %s%pB(%#): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX. ÐŸÐµÑ€ÐµÑ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ Ð½Ð° % Ð±Ð°Ð¹Ñ‚Ñ–Ð². ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ.%pB(%pA+%#): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %d%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Â«%pA+%#Â» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼, %, Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼, %, Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s, Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -ffunction-sections%pB(%pA+%#): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ñ— Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ %s Ð´Ð»Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %#x Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ– Ð½ÐµÑ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ� %s%pB: Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� TLS Ð· %s Ð´Ð¾ %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ñƒ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð·Ð°Ð·Ð½Ð°Ð»Ð¾ Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº ip2k: Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ñ‰Ð¾Ð´Ð¾ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ Ñƒ %# (Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� = %#).ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº ip2k: Ð·Ð°Ð¹Ð²Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� Ñ‰Ð¾Ð´Ð¾ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ Ñƒ %# (Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� = %#).%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¾ %#.Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#, Ð²Ñ‚Ñ–Ð¼, _gp Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾
+Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s (Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#) Ñ–Ð· Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° (Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#), Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� (%#) Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ, Ð²Ñ–Ð´ -32678 Ð´Ð¾ 32767.
+%pB(%pA+%#): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ñ–Ð· Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾ÑŽ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ %#x%pB(%pA): Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� PID %s Ð´Ð¾ %# (Ñ‰Ð¾Ð´Ð¾ %s Ñƒ %s)%pB(%pA+%#): Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS %s%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CALL15 Ñƒ %# Ð½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: R_SH_USES Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñƒ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ 0x%x%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ðµ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¾ÑŽ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s, %#%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_SH_PSHA % Ð½Ðµ Ñƒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ– -32..32%pB: %#: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_SH_PSHL % Ð½Ðµ Ñƒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ– -32..32%pB(%pA+%#): Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ñƒ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÑƒ Ð´Ð¾ Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�%pB(%pA+%#): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð·Ð° Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ–Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ»%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— GD->LE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xd4??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xc7??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xd1??)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x310c)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x410b)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x34cc)%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— IE->LE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xd0??: mov.l)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x0?12: stc)%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x0?ce: mov.l)%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— GD->IE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— LD->LE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#%pB(%s+%#): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñ– Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñƒ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ %#x%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�%pB: %#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¾ %#%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº GOT % Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð¼Ñƒ Ð´Ð¾Ð´Ð°Ð½ÐºÑƒ GOT %%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº PLT % Ð´Ð¾ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð¾ %# Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA%pB(%pA+%#): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€=%#)%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð° Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� XTENSA_ASM_SIMPLIFY, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð° Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹%pB(%pA+%#): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s%pB: %pA+%#: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾Ñ— Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—ÑˆÐ°Ð±Ð»Ð¾Ð½ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð»Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‚Ð¸ .plt, Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ dp = %%pB(%pA+%#): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ». Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� brl Ð°Ð±Ð¾ Ð½ÐµÐ¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�Ð¼.%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð¾ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð´Ð°Ð½Ð¸Ñ… (%# >= 0x400000)%pB: Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ TLS Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ».%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br (%s) Ð´Ð¾ Â«%sÂ» Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð· Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ %# (> 0x1000000).Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð· % Ñƒ %pB Ð½Ð° % Ñƒ %pB%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� % Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %ld%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡ÐµÑ€ÐµÐ· Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŽ Ð½ÐµÐ¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�
+ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ¾Ð¼ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð°: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾: %# != Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾: %#%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° LOCAL: Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€ $% Ð½Ðµ Ñ” Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¼ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¾Ð¼. ÐŸÐµÑ€ÑˆÐ¸Ð¼ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¼ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¾Ð¼ Ñ” $%.%pB(%pA+%#): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» (%#) Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ STT_GNU_IFUNC, Â«%sÂ», Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº: %%pB: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº %s%#x Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ%pB: %pA+%: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� % Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼%pB: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ð²ÐµÑ€Ñ�Ñ–Ñ— (%) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ (%ld)%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%# >= %#lx) Ð´Ð»Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»%pB: Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ (%#) Ð´Ð»Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð°Ð»Ðµ Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%#) Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA, Ñ�ÐºÐµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”%pB: %pA+%#: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð»Ñ� INHERIT%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«.reginfoÂ»; Ð¼Ð°Ð² Ð±ÑƒÑ‚Ð¸ %, Ð¼Ð°Ñ”Ð¼Ð¾ %%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOT Ñƒ %# Ñ” Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¼ Ñƒ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ð°Ñ…%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CALL16 Ñƒ %# Ð½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� LO16 Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð´Ð»Ñ� %s Ñƒ %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»%pB: Ð·Ð°Ð¿Ð¸Ñ� Â«%pAÂ» VMA %# Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¼ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ�Ñ� Â«-Ttext-segment=...Â»%pB: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� Â«%pAÂ» % Ð· Â«%pAÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ ADDIUPC%pB: Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº Â«%pAÂ» VMA %# Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¼ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ�Ñ� Â«-Ttext-segment=...Â»%pB: 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° %# Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° Intel%pB: Ð°Ð´Ñ€ÐµÑ�Ð° %# Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° IntelÐ°Ð´Ñ€ÐµÑ�Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%) Ð½Ð¸Ð¶Ñ‡Ðµ Ð·Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° (%)%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%)%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð½Ð°Ð´Ñ–Ñ�Ð»Ð°Ñ‚Ð¸ Ð´Ð°Ð½Ñ– Ð½Ð° Ð½ÐµÐºÑ€Ð°Ñ‚Ð½Ñƒ Ð´Ð¾ 4 Ð°Ð´Ñ€ÐµÑ�Ñƒ %#%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: Â«MainÂ» Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñƒ %, Ð° Ð½Ðµ Ñƒ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %
+%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð²; Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ â€” %%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð´Ð»Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ %: %#%pB(%pA+%#): %s Ð·Ñ�ÑƒÐ² Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð·Ð° Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼%pB(%pA+%#): Ð·Ñ�ÑƒÐ² Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿Ð¾Ð·Ð° Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» XTY_ER Â«%sÂ»: ÐºÐ»Ð°Ñ� %d, Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ” ÐºÐ»Ð°Ñ�Ð¾Ð¼ %d, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s:% Ð½Ðµ Ñƒ csect%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹ csect Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– rangeof Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#, Ñ‰Ð¾ Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Â«%sÂ»ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� TOC: %# > 0x10000; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -mminimal-toc Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ�%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ Ð·Ñ– Ð·Ð²Ñ–Ñ‚Ñƒ 843419 Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ 0x% Ð´Ð»Ñ� ADR (Ð²Ñ…Ñ–Ð´Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼) Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ --fix-cortex-a53-843419=adr. Ð’Ð°Ñ€Ñ‚Ð¾ Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ñ–Ð· Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --fix-cortex-a53-843419=full%pB(%pA+%#): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%sÂ»%# Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ imm%pB(%pA+%#): Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ñ– % Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð´Ð»Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ð½Ð° %-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ð¼ÐµÐ¶Ñƒ, Ð²Ñ‚Ñ–Ð¼, Ð¼Ð°Ñ”Ð¼Ð¾ Ð»Ð¸ÑˆÐµ %Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� %%pcrel_lo Ñ€Ð°Ð·Ð¾Ð¼ Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %%pcrel_hi Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 0x% Ð±ÐµÐ· Ð´Ð¾Ð´Ð°Ð½ÐºÐ°, Ð°Ð»Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ñ€Ñ–Ð²Ð½Ð¸Ð¼ 0x% Ð¿Ñ–Ñ�Ð»Ñ� Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ� %%pcrel_lo%pB: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ð°Ð½Ð¸Ñ… (%lx Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %) Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ %
\ No newline at end of file
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/uk.po ./bfd/po/uk.po
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/po/uk.po	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/po/uk.po	2024-02-01 01:47:14.000000000 +0000
@@ -2,682 +2,773 @@
 # Copyright (C) 2012 Free Software Foundation, Inc.
 # This file is distributed under the same license as the binutils package.
 #
-# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2014, 2017, 2018, 2019.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2014, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024.
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd 2.31.90\n"
-"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2019-01-19 16:30+0000\n"
-"PO-Revision-Date: 2019-01-20 11:34+0200\n"
+"Project-Id-Version: bfd 2.41.90\n"
+"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
+"POT-Creation-Date: 2024-01-15 14:55+0000\n"
+"PO-Revision-Date: 2024-01-16 23:32+0200\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
-"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Lokalize 2.0\n"
+"X-Generator: Lokalize 23.04.1\n"
 
-#: aout-cris.c:200
+#: aout-cris.c:196
 #, c-format
 msgid "%pB: unsupported relocation type exported: %#x"
 msgstr "%pB: ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¾ Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x"
 
-#: aout-cris.c:244
+#: aout-cris.c:242
 #, c-format
 msgid "%pB: unsupported relocation type imported: %#x"
 msgstr "%pB: Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¾ Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x"
 
-#: aout-cris.c:256
+#: aout-cris.c:254
 #, c-format
 msgid "%pB: bad relocation record imported: %d"
 msgstr "%pB: Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %d"
 
-#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399
+#: aoutx.h:1265 aoutx.h:1612 pdp11.c:1237 pdp11.c:1510
 #, c-format
 msgid "%pB: can not represent section `%pA' in a.out object file format"
 msgstr "%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² a.out Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ"
 
-#: aoutx.h:1582 pdp11.c:1371
+#: aoutx.h:1576 pdp11.c:1482
 #, c-format
 msgid "%pB: can not represent section for symbol `%s' in a.out object file format"
 msgstr "%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² a.out Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ"
 
-#: aoutx.h:1585 vms-alpha.c:7860
+#: aoutx.h:1579 vms-alpha.c:8461
 msgid "*unknown*"
 msgstr "*Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾*"
 
-#: aoutx.h:1721
+#: aoutx.h:1715 pdp11.c:1578
 #, c-format
 msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ² Ñ€Ñ�Ð´ÐºÐ°, %<PRIu64> >= %<PRIu64>"
 
-#: aoutx.h:2412 aoutx.h:2430
+#: aoutx.h:1963
+#, c-format
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� AOUT: %d"
+
+#: aoutx.h:2407 aoutx.h:2425 pdp11.c:2059
 #, c-format
 msgid "%pB: attempt to write out unknown reloc type"
 msgstr "%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð²Ð¸Ð¿Ð¸Ñ�Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: aoutx.h:4086
+#: aoutx.h:4080 pdp11.c:3443
 #, c-format
 msgid "%pB: unsupported relocation type"
 msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
 #. Unknown relocation.
-#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772
-#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798
-#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517
-#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698
-#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467
-#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522
-#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381
-#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302
-#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539
-#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417
-#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354
-#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692
-#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137
-#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236
-#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037
-#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420
-#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292
-#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508
-#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642
-#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270
-#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250
-#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459
-#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249
-#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958
-#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921
-#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378
-#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955
-#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2125
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2223
-#: elf32-ia64.c:210 elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862
+#: aoutx.h:4400 coff-alpha.c:601 coff-mips.c:356 coff-rs6000.c:3050
+#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:262 elf-hppa.h:798
+#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:813 elf32-arc.c:532
+#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1063 elf32-bfin.c:4686
+#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
+#: elf32-csky.c:991 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544
+#: elf32-dlx.c:546 elf32-epiphany.c:373 elf32-fr30.c:381 elf32-frv.c:2559
+#: elf32-frv.c:6240 elf32-ft32.c:304 elf32-h8300.c:302 elf32-i386.c:394
+#: elf32-ip2k.c:1241 elf32-iq2000.c:442 elf32-lm32.c:496 elf32-m32c.c:305
+#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2209 elf32-m68hc11.c:390
+#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
+#: elf32-mep.c:385 elf32-metag.c:871 elf32-microblaze.c:708
+#: elf32-microblaze.c:1020 elf32-mips.c:2242 elf32-moxie.c:137
+#: elf32-msp430.c:737 elf32-msp430.c:747 elf32-mt.c:241 elf32-nds32.c:3288
+#: elf32-nds32.c:3309 elf32-nds32.c:5078 elf32-nios2.c:3019 elf32-or1k.c:1087
+#: elf32-pj.c:326 elf32-ppc.c:900 elf32-ppc.c:913 elf32-pru.c:423
+#: elf32-rl78.c:291 elf32-rx.c:324 elf32-rx.c:333 elf32-s12z.c:296
+#: elf32-s390.c:347 elf32-score.c:2383 elf32-score7.c:2224 elf32-sh.c:437
+#: elf32-spu.c:163 elf32-tic6x.c:1498 elf32-tic6x.c:1508 elf32-tic6x.c:1527
+#: elf32-tic6x.c:1537 elf32-tic6x.c:2583 elf32-tilepro.c:792 elf32-v850.c:1902
+#: elf32-v850.c:1924 elf32-v850.c:4250 elf32-vax.c:289 elf32-visium.c:481
+#: elf32-wasm32.c:105 elf32-xgate.c:418 elf32-xstormy16.c:395
+#: elf32-xtensa.c:510 elf32-xtensa.c:544 elf32-z80.c:331 elf64-alpha.c:1114
+#: elf64-alpha.c:4056 elf64-alpha.c:4204 elf64-bpf.c:132 elf64-ia64-vms.c:255
+#: elf64-ia64-vms.c:3426 elf64-mips.c:3965 elf64-mips.c:3981 elf64-mmix.c:1264
+#: elf64-nfp.c:151 elf64-ppc.c:1031 elf64-ppc.c:1385 elf64-ppc.c:1394
+#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3799
+#: elfxx-ia64.c:324 elfxx-loongarch.c:1895 elfxx-riscv.c:989 elfxx-sparc.c:589
+#: elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3821 elfnn-kvx.c:259
 #, c-format
 msgid "%pB: unsupported relocation type %#x"
 msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x"
 
-#: aoutx.h:5434 pdp11.c:3694
+#: aoutx.h:5427 pdp11.c:3866
 #, c-format
 msgid "%pB: relocatable link from %s to %s not supported"
 msgstr "%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ñ… Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ Ð· %s Ð´Ð¾ %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: archive.c:2214
+#: arc-got.h:69
+#, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ– Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GOT"
+
+#: archive.c:753
+msgid "%F%P: %pB(%s): error opening thin archive member: %E\n"
+msgstr "%F%P: %pB(%s): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð¾Ð½ÐºÐ¾Ð³Ð¾ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ: %E\n"
+
+#: archive.c:2294
 msgid "warning: writing archive was slow: rewriting timestamp"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ð²Ñƒ Ð±ÑƒÐ»Ð¾ Ð¿Ð¾Ð²Ñ–Ð»ÑŒÐ½Ð¸Ð¼: Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ�ÑƒÑ”Ð¼Ð¾ Ñ‡Ð°Ñ�Ð¾Ð²Ñƒ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÑƒ"
 
-#: archive.c:2330 linker.c:1429
+#: archive.c:2362 archive.c:2423 elflink.c:4800 linker.c:1434
 #, c-format
 msgid "%pB: plugin needed to handle lto object"
 msgstr "%pB: Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¾Ð±'Ñ”ÐºÑ‚Ð° lto Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð´Ð¾Ð´Ð°Ñ‚Ð¾Ðº"
 
-#: archive.c:2559
+#: archive.c:2655
 msgid "Reading archive file mod timestamp"
 msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñ‡Ð°Ñ�Ð¾Ð²Ð¾Ñ— Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ¸ mod Ð°Ñ€Ñ…Ñ–Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°"
 
-#: archive.c:2583
+#: archive.c:2686
 msgid "Writing updated armap timestamp"
 msgstr "Ð—Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾Ñ— Ñ‡Ð°Ñ�Ð¾Ð²Ð¾Ñ— Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ¸ armap"
 
-#: bfd.c:449
+#: bfd.c:740
 msgid "no error"
 msgstr "Ð±ÐµÐ· Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº"
 
-#: bfd.c:450
+#: bfd.c:741
 msgid "system call error"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ"
 
-#: bfd.c:451
+#: bfd.c:742
 msgid "invalid bfd target"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� bfd"
 
-#: bfd.c:452
+#: bfd.c:743
 msgid "file in wrong format"
 msgstr "Ñ„Ð°Ð¹Ð» Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–"
 
-#: bfd.c:453
+#: bfd.c:744
 msgid "archive object file in wrong format"
 msgstr "Ð°Ñ€Ñ…Ñ–Ð²Ð½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–"
 
-#: bfd.c:454
+#: bfd.c:745
 msgid "invalid operation"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ñ–Ñ�"
 
-#: bfd.c:455
+#: bfd.c:746
 msgid "memory exhausted"
 msgstr "Ð¿Ð°Ð¼'Ñ�Ñ‚ÑŒ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð¾"
 
-#: bfd.c:456
+#: bfd.c:747
 msgid "no symbols"
 msgstr "Ð½ÐµÐ¼Ð°Ñ” Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²"
 
-#: bfd.c:457
+#: bfd.c:748
 msgid "archive has no index; run ranlib to add one"
 msgstr "Ñƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ°; Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ñ–Ñ‚ÑŒ ranlib, Ñ‰Ð¾Ð± Ð¹Ð¾Ð³Ð¾ Ð´Ð¾Ð´Ð°Ñ‚Ð¸"
 
-#: bfd.c:458
+#: bfd.c:749
 msgid "no more archived files"
 msgstr "Ð±Ñ–Ð»ÑŒÑˆÐµ Ð°Ñ€Ñ…Ñ–Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð½ÐµÐ¼Ð°Ñ”"
 
-#: bfd.c:459
+#: bfd.c:750
 msgid "malformed archive"
 msgstr "Ð°Ñ€Ñ…Ñ–Ð² Ð· Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼"
 
-#: bfd.c:460
+#: bfd.c:751
 msgid "DSO missing from command line"
 msgstr "Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ñ�Ð´ÐºÑƒ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ DSO"
 
-#: bfd.c:461
+#: bfd.c:752
 msgid "file format not recognized"
 msgstr "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾"
 
-#: bfd.c:462
+#: bfd.c:753
 msgid "file format is ambiguous"
 msgstr "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ñ” Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¸Ð¼"
 
-#: bfd.c:463
+#: bfd.c:754
 msgid "section has no contents"
 msgstr "Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ðµ Ð¼Ð°Ñ” Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒ"
 
-#: bfd.c:464
+#: bfd.c:755
 msgid "nonrepresentable section on output"
 msgstr "Ñ€Ð¾Ð·Ð´Ñ–Ð», Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð»Ñ� Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…"
 
-#: bfd.c:465
+#: bfd.c:756
 msgid "symbol needs debug section which does not exist"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸, Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”"
 
-#: bfd.c:466
+#: bfd.c:757
 msgid "bad value"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�"
 
-#: bfd.c:467
+#: bfd.c:758
 msgid "file truncated"
 msgstr "Ñ„Ð°Ð¹Ð» Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾"
 
-#: bfd.c:468
+#: bfd.c:759
 msgid "file too big"
 msgstr "Ñ„Ð°Ð¹Ð» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼"
 
-#: bfd.c:469
+#: bfd.c:760
+msgid "sorry, cannot handle this file"
+msgstr "Ð²Ð¸Ð±Ð°Ñ‡Ñ‚Ðµ, Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ†ÐµÐ¹ Ñ„Ð°Ð¹Ð»"
+
+#: bfd.c:761
 #, c-format
 msgid "error reading %s: %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� %s: %s"
 
-#: bfd.c:470
+#: bfd.c:762
 msgid "#<invalid error code>"
 msgstr "#<Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ ÐºÐ¾Ð´ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸>"
 
-#: bfd.c:1429
+#: bfd.c:2019
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŽ BFD %s Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ %s:%d"
 
-#: bfd.c:1442
+#: bfd.c:2032
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d in %s\n"
 msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° BFD %s, Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ñ”Ð¼Ð¾ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %s:%d Ñƒ %s\n"
 
-#: bfd.c:1447
+#: bfd.c:2037
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d\n"
 msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° BFD %s, Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ñ”Ð¼Ð¾ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %s:%d\n"
 
-#: bfd.c:1449
+#: bfd.c:2039
 msgid "Please report this bug.\n"
 msgstr "Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ñ‚Ðµ Ð¿Ñ€Ð¾ Ñ†ÑŽ Ð²Ð°Ð´Ñƒ.\n"
 
-#: bfdwin.c:206
+#: bfdwin.c:261
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
 msgstr "Ð½Ðµ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð´Ð°Ð½Ñ–=%lx Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾=%d\n"
 
-#: bfdwin.c:209
+#: bfdwin.c:264
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr "Ð½Ðµ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð·Ð¼Ñ–Ð½Ð½Ñƒ Ñ�ÐµÑ€ÐµÐ´Ð¾Ð²Ð¸Ñ‰Ð° var\n"
 
-#: binary.c:276
+#: binary.c:277
 #, c-format
 msgid "warning: writing section `%pA' at huge (ie negative) file offset"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ð¿Ð¸Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð·Ð° Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (Ñ‚Ð¾Ð±Ñ‚Ð¾ Ð²Ñ–Ð´â€™Ñ”Ð¼Ð½Ð¸Ð¼) Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ Ñƒ Ñ„Ð°Ð¹Ð»Ñ–"
 
-#: cache.c:271
+#: cache.c:275
 #, c-format
-msgid "reopening %pB: %s\n"
-msgstr "Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ� %pB: %s\n"
+msgid "reopening %pB: %s"
+msgstr "Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ� %pB: %s"
 
 #: coff-alpha.c:450
 #, c-format
 msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries"
 msgstr "%pB: Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ° Ñ�Ñ‚Ð¸Ñ�Ð½ÑƒÑ‚Ð¸Ñ… Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Alpha Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð°. Ð¡ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ�Ð¼Ð¸ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñ�Ñ‚Ð¾Ñ€Ð° Ð°Ð±Ð¾ objZ Ð´Ð»Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð½ÐµÑ�Ñ‚Ð¸Ñ�Ð½ÐµÐ½Ð¸Ñ… Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð²."
 
-#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950
+#: coff-alpha.c:867 coff-alpha.c:894 coff-alpha.c:2004 coff-mips.c:948
 msgid "GP relative relocation used when GP not defined"
 msgstr "Ð’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GP, Ð²Ñ‚Ñ–Ð¼, GP Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: coff-alpha.c:1443
+#: coff-alpha.c:1151 coff-z80.c:351 coff-z8k.c:214 elf32-nds32.c:13189
+#: elfxx-mips.c:13520 reloc.c:8683 reloc16.c:314
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ\n"
+
+#: coff-alpha.c:1157 coff-z80.c:477 coff-z8k.c:378 elfxx-mips.c:13530
+#: reloc.c:8693
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
+
+#: coff-alpha.c:1163 elfxx-mips.c:13539 reloc.c:8702
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð¿Ð¾Ð²ÐµÑ€Ñ‚Ð°Ñ” Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %x\n"
+
+#: coff-alpha.c:1489
 msgid "using multiple gp values"
 msgstr "Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ gp"
 
-#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411
+#: coff-alpha.c:1987
 #, c-format
-msgid "%pB: %s unsupported"
-msgstr "%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
+msgid "%X%P: %pB(%pA): relocation out of range\n"
+msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ\n"
+
+#: coff-alpha.c:1999
+#, c-format
+msgid "%X%P: %pB(%pA): relocation is not supported\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
+
+#: coff-go32.c:167 coffswap.h:812
+#, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ°: 0x%lx > 0xffff"
 
-#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330
-#: elf64-mips.c:3451 elfn32-mips.c:3276
+#: coff-mips.c:638 elf32-mips.c:1743 elf32-score.c:433 elf32-score7.c:333
+#: elf64-mips.c:3450 elfn32-mips.c:3277
 msgid "GP relative relocation when _gp not defined"
 msgstr "Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GP, Ð°Ð»Ðµ _gp Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: coff-rs6000.c:2858
+#: coff-rs6000.c:484 coff64-rs6000.c:377
+#, c-format
+msgid "%pB: unsupported swap_aux_in for storage class %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� swap_aux_in Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñƒ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� %#x"
+
+#: coff-rs6000.c:571 coff64-rs6000.c:497
+#, c-format
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� swap_aux_out Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñƒ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� %#x"
+
+#: coff-rs6000.c:3140
 #, c-format
 msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TOC Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64> Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð½ÐµÐ¼Ð°Ñ” Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñƒ TOC"
 
-#: coff-rs6000.c:3620 coff64-rs6000.c:2145
+#: coff-rs6000.c:3264 coff64-rs6000.c:848
+#, c-format
+msgid "Unable to find the stub entry targeting %s"
+msgstr "Ð�Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ�, Ñ‰Ð¾ Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° %s"
+
+#: coff-rs6000.c:3379
+#, c-format
+msgid "%pB: TLS relocation at 0x%<PRIx64> over non-TLS symbol %s (0x%x)\n"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ 0x%<PRIx64> Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾Ð·Ð° TLS %s (0x%x)\n"
+
+#: coff-rs6000.c:3392
+#, c-format
+msgid "%pB: TLS local relocation at 0x%<PRIx64> over imported symbol %s\n"
+msgstr "%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ 0x%<PRIx64> Ð½Ð° Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s\n"
+
+#: coff-rs6000.c:3798
+#, c-format
+msgid "%pB: relocation (%d) at 0x%<PRIx64> has wrong r_rsize (0x%x)\n"
+msgstr "%pB: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%d) Ñƒ 0x%<PRIx64> Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ r_rsize (0x%x)\n"
+
+#: coff-rs6000.c:4060 coff64-rs6000.c:2030
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized smclas %d"
 msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð³Ð¾ smclas %d"
 
-#: coff-sh.c:780 elf32-sh.c:521
+#: coff-sh.c:781 elf32-sh.c:521
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES offset"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ R_SH_USES"
 
-#: coff-sh.c:791
+#: coff-sh.c:792
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn %#x"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: R_SH_USES Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñƒ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ %#x"
 
-#: coff-sh.c:809 elf32-sh.c:552
+#: coff-sh.c:810 elf32-sh.c:552
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� R_SH_USES"
 
-#: coff-sh.c:834 elf32-sh.c:568
+#: coff-sh.c:835 elf32-sh.c:568
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: could not find expected reloc"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: coff-sh.c:851 elf32-sh.c:597
+#: coff-sh.c:852 elf32-sh.c:597
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–"
 
-#: coff-sh.c:977 elf32-sh.c:727
+#: coff-sh.c:973 elf32-sh.c:727
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� COUNT"
 
-#: coff-sh.c:987 elf32-sh.c:738
+#: coff-sh.c:983 elf32-sh.c:738
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad count"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº"
 
-#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512
+#: coff-sh.c:1349 coff-sh.c:2636 elf32-sh.c:1138 elf32-sh.c:1506
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
 msgstr "%pB: %#<PRIx64>: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: coff-sh.c:1454
+#: coff-sh.c:1443
 #, c-format
 msgid "%pB: fatal: generic symbols retrieved before relaxing"
 msgstr "%pB: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð´Ð¾ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: coff-sh.c:2785 cofflink.c:2965
+#: coff-sh.c:2773 cofflink.c:2947
 #, c-format
 msgid "%pB: illegal symbol index %ld in relocs"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %ld Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ñ…"
 
-#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010
+#: coff-tic30.c:172 coff-tic4x.c:228 coff-tic54x.c:338 coff-z80.c:325
+#: coff-z8k.c:188 coffcode.h:5314
 #, c-format
 msgid "%pB: warning: illegal symbol index %ld in relocs"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %ld Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ñ…"
 
-#: coff-tic80.c:441
+#: coff-x86_64.c:147
+msgid "R_AMD64_IMAGEBASE with __ImageBase undefined"
+msgstr "R_AMD64_IMAGEBASE Ð· Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¼ __ImageBase"
+
+#: coff64-rs6000.c:447 coff64-rs6000.c:554
 #, c-format
-msgid "unsupported relocation type %#x"
-msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x"
+msgid "%pB: C_STAT isn't supported by XCOFF64"
+msgstr "%pB: Ñƒ XCOFF64 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ C_STAT"
 
-#: coff-tic80.c:672 cofflink.c:3127
+#: coff64-rs6000.c:477
 #, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
-msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»"
+msgid "%pB: wrong auxtype %#x for storage class %#x"
+msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ %#x Ð´Ð»Ñ� ÐºÐ»Ð°Ñ�Ñƒ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� %#x"
+
+#: coff64-rs6000.c:1598
+#, c-format
+msgid "%pB: relocation (%d) at (0x%<PRIx64>) has wrong r_rsize (0x%x)\n"
+msgstr "%pB: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%d) Ñƒ (0x%<PRIx64>) Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ r_rsize (0x%x)\n"
 
-#: coffcode.h:954
+#: coffcode.h:951
 #, c-format
 msgid "%pB: unable to load COMDAT section name"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ COMDAT"
 
-#. Malformed input files can trigger this test.
-#. cf PR 21781.
-#: coffcode.h:989
+#: coffcode.h:976
+#, c-format
+msgid "%pB: warning: no symbol for section '%s' found"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»"
+
+#: coffcode.h:1148
 #, c-format
 msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– COMDAT"
 
-#: coffcode.h:1001
+#: coffcode.h:1159
 #, c-format
 msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» COMDAT Â«%sÂ» Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð½Ð°Ð·Ð²Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»"
 
-#: coffcode.h:1011
-#, c-format
-msgid "%pB: warning: no symbol for section '%s' found"
-msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»"
-
 #. Generate a warning message rather using the 'unhandled'
 #. variable as this will allow some .sys files generate by
 #. other toolchains to be processed.  See bugzilla issue 196.
-#: coffcode.h:1237
+#: coffcode.h:1267
 #, c-format
 msgid "%pB: warning: ignoring section flag %s in section %s"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s"
 
-#: coffcode.h:1306
+#: coffcode.h:1337
 #, c-format
 msgid "%pB (%s): section flag %s (%#lx) ignored"
 msgstr "%pB (%s): Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%#lx) Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾"
 
-#: coffcode.h:1917
+#: coffcode.h:1954
+#, c-format
+msgid "%pB: overflow reloc count too small"
+msgstr "%pB: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�"
+
+#: coffcode.h:1963 coffcode.h:2028
 #, c-format
 msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð¼Ð¾Ð³Ð° Ñ‰Ð¾Ð´Ð¾ 0xffff Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ�"
 
-#: coffcode.h:2315
+#: coffcode.h:2411
 #, c-format
 msgid "unrecognized TI COFF target id '0x%x'"
 msgstr "Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TI COFF, Â«0x%xÂ»"
 
-#: coffcode.h:2599
+#: coffcode.h:2690
 #, c-format
 msgid "%pB: reloc against a non-existent symbol index: %ld"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð½ÐµÑ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¸Ð¼ Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: %ld"
 
-#: coffcode.h:2910
-#, c-format
-msgid "%pB: page size is too large (0x%x)"
-msgstr "%pB: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ (0x%x)"
-
-#: coffcode.h:3070
+#: coffcode.h:3162
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr "%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² (%d)"
 
-#: coffcode.h:3489
+#: coffcode.h:3690
 #, c-format
 msgid "%pB: section %pA: string table overflow at offset %ld"
 msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² Ð·Ð° Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ %ld"
 
-#: coffcode.h:3589
+#: coffcode.h:3791
 #, c-format
 msgid "%pB:%s section %s: alignment 2**%u not representable"
 msgstr "%pB:%s Ñ€Ð¾Ð·Ð´Ñ–Ð» %s: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� 2**%u Ð½Ðµ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð»Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ�"
 
-#: coffcode.h:4276
-#, c-format
-msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
-msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² (%#lx) Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð¼Ñ–Ñ�Ñ†Ðµ Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%#lx)"
-
-#: coffcode.h:4291
+#: coffcode.h:4532
 #, c-format
 msgid "%pB: warning: line number table read failed"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð· Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²"
 
-#: coffcode.h:4325 coffcode.h:4339
+#: coffcode.h:4578 coffcode.h:4592
 #, c-format
 msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ 0x%lx Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ° %d"
 
-#: coffcode.h:4353
+#: coffcode.h:4606
 #, c-format
 msgid "%pB: warning: illegal symbol in line number entry %d"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ° %d"
 
-#: coffcode.h:4366
+#: coffcode.h:4619
 #, c-format
 msgid "%pB: warning: duplicate line number information for `%s'"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð² Ð´Ð»Ñ� Â«%sÂ»"
 
-#: coffcode.h:4774
+#: coffcode.h:5043
 #, c-format
 msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ÐºÐ»Ð°Ñ� Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %d Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s Â«%sÂ»"
 
-#: coffcode.h:4904
+#: coffcode.h:5183
 #, c-format
 msgid "warning: %pB: local symbol `%s' has no section"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: coffcode.h:5050
+#: coffcode.h:5354
 #, c-format
 msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64>"
 
-#: coffgen.c:178 elf.c:1216
-#, c-format
-msgid "%pB: unable to initialize compress status for section %s"
-msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð°Ð½ Ñ�Ñ‚Ð¸Ñ�ÐºÐ°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
-
-#: coffgen.c:202 elf.c:1227
+#: coffgen.c:255 elf.c:1226
 #, c-format
-msgid "%pB: unable to initialize decompress status for section %s"
-msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð°Ð½ Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
+msgid "%pB: unable to compress section %s"
+msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð¸Ñ�Ð½ÑƒÑ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s"
 
-#: coffgen.c:1657
+#: coffgen.c:265 elf.c:1236
 #, c-format
-msgid "%pB: corrupt symbol count: %#<PRIx64>"
-msgstr "%pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: %#<PRIx64>"
+msgid "%pB: unable to decompress section %s"
+msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s"
 
-#. PR 21013: Provide an error message when the alloc fails.
-#: coffgen.c:1666
-#, c-format
-msgid "%pB: not enough memory to allocate space for %#<PRIx64> symbols of size %#<PRIx64>"
-msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð¼Ñ–Ñ�Ñ†Ñ� Ð´Ð»Ñ� %#<PRIx64> Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ %#<PRIx64>"
-
-#: coffgen.c:1735
+#: coffgen.c:1781
 #, c-format
 msgid "%pB: bad string table size %<PRIu64>"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² %<PRIu64>"
 
-#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882
-#: xcofflink.c:4505
+#: coffgen.c:1931 coffgen.c:1981 coffgen.c:2031 coffgen.c:2050 cofflink.c:2012
+#: elf.c:2478 xcofflink.c:5532
 msgid "<corrupt>"
 msgstr "<Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾>"
 
-#: coffgen.c:2114
+#: coffgen.c:2192
 #, c-format
 msgid "<corrupt info> %s"
 msgstr "<Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð´Ð°Ð½Ñ–> %s"
 
-#: coffgen.c:2693 elflink.c:14322 linker.c:2959
+#: coffgen.c:2796 elflink.c:15219 linker.c:2985
 msgid "%F%P: already_linked_table: %E\n"
 msgstr "%F%P: already_linked_table: %E\n"
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3138 elflink.c:14159
 #, c-format
 msgid "removing unused section '%pA' in file '%pB'"
 msgstr "Ð²Ð¸Ð»ÑƒÑ‡Ð°Ñ”Ð¼Ð¾ Ð½ÐµÐ²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Â«%pBÂ»"
 
-#: coffgen.c:3111 elflink.c:13542
+#: coffgen.c:3215 elflink.c:14389
 msgid "warning: gc-sections option ignored"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gc-sections Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾"
 
-#: cofflink.c:352
+#: cofflink.c:398
 #, c-format
 msgid "warning: symbol `%s' is both section and non-section"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ” Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ñ– Ð¿Ð¾Ð·Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼"
 
-#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953
+#: cofflink.c:503 elf64-ia64-vms.c:5200 elflink.c:5407
 #, c-format
 msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð· %d Ð½Ð° %d Ñƒ %pB"
 
-#: cofflink.c:2373
+#: cofflink.c:2340
 #, c-format
 msgid "%pB: relocs in section `%pA', but it has no contents"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð·Ð¼Ñ–Ñ�Ñ‚Ñƒ"
 
-#: cofflink.c:2436 elflink.c:10810
+#: cofflink.c:2403 elflink.c:11600
 #, c-format
 msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n"
 msgstr "Ð�Ð° %XÂ«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» %pB: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» %pB\n"
 
-#: cofflink.c:2734
+#: cofflink.c:2598
+#, c-format
+msgid "%pB: stripping non-representable symbol '%s' (value 0x%<PRIx64>)"
+msgstr "%pB: Ð¿Ñ€Ð¸Ð±Ð¸Ñ€Ð°Ñ”Ð¼Ð¾ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� 0x%<PRIx64>)"
+
+#: cofflink.c:2716
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr "%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x > 0xffff"
 
-#: cofflink.c:2742
+#: cofflink.c:2724
 #, c-format
 msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ°: %#x > 0xffff"
 
-#: coffswap.h:789
+#: cofflink.c:3118
 #, c-format
-msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
-msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ°: 0x%lx > 0xffff"
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»"
 
-#: coffswap.h:803
+#: coffswap.h:826
 #, c-format
 msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
 msgstr "%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: 0x%lx > 0xffff"
 
-#: compress.c:260
+#: compress.c:744 compress.c:761
 #, c-format
 msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB(%pA) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (%#<PRIx64> Ð±Ð°Ð¹Ñ‚Ñ–Ð²)"
 
-#: cpu-arm.c:298 cpu-arm.c:310
+#: cpu-arm.c:320 cpu-arm.c:332
 #, c-format
 msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� EP9312, Ð° %pB Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� XScale"
 
-#: cpu-arm.c:446
+#: cpu-arm.c:469
 #, c-format
 msgid "warning: unable to update contents of %s section in %pB"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñƒ %pB"
 
-#: dwarf2.c:544
+#: dwarf2.c:705
 #, c-format
 msgid "DWARF error: can't find %s section."
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s."
 
-#: dwarf2.c:579
+#: dwarf2.c:713
+#, c-format
+msgid "DWARF error: section %s has no contents"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ð½Ðµ Ð¼Ð°Ñ” Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒ"
+
+#. PR 26946
+#: dwarf2.c:722
+#, c-format
+msgid "DWARF error: section %s is too big"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼"
+
+#: dwarf2.c:757
 #, c-format
 msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ (%<PRIu64>) Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð°Ð±Ð¾ Ñ€Ñ–Ð²Ð½Ð¸Ð¼ Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ %s (%<PRIu64>)."
 
-#: dwarf2.c:1107
+#: dwarf2.c:1504
 msgid "DWARF error: info pointer extends beyond end of attributes"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº Ð½Ð° Ð´Ð°Ð½Ñ– Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° ÐºÑ–Ð½ÐµÑ†ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð²"
 
-#: dwarf2.c:1275
+#: dwarf2.c:1696
 #, c-format
 msgid "DWARF error: invalid or unhandled FORM value: %#x"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð°Ð±Ð¾ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� FORM: %#x"
 
-#: dwarf2.c:1581
+#: dwarf2.c:2043
 msgid "DWARF error: mangled line number section (bad file number)"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð² (Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð°)"
 
-#: dwarf2.c:1926
+#: dwarf2.c:2585
 msgid "DWARF error: zero format count"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ"
 
-#: dwarf2.c:1936
+#: dwarf2.c:2595
 #, c-format
 msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð´Ð°Ð½Ð¸Ñ… (%<PRIx64>) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð±ÑƒÑ„ÐµÑ€Ð°"
 
-#: dwarf2.c:1977
+#: dwarf2.c:2634
 #, c-format
 msgid "DWARF error: unknown format content type %<PRIu64>"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ %<PRIu64>"
 
-#: dwarf2.c:2057
+#: dwarf2.c:2707
 #, c-format
 msgid "DWARF error: line info section is too small (%<PRId64>)"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼ (%<PRId64>)"
 
-#: dwarf2.c:2087
+#: dwarf2.c:2734
 #, c-format
 msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð´Ð°Ð½Ñ– Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼Ð¸ (%#<PRIx64>) Ð·Ð° Ð¼Ñ–Ñ�Ñ†Ðµ, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– (%#lx)"
 
-#: dwarf2.c:2100
+#: dwarf2.c:2747
 #, c-format
 msgid "DWARF error: unhandled .debug_line version %d"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð° Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð²ÐµÑ€Ñ�Ñ–Ñ� .debug_line, %d"
 
-#: dwarf2.c:2110
+#: dwarf2.c:2756
 msgid "DWARF error: ran out of room reading prologue"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð²Ñ�Ñ‚ÑƒÐ¿Ñƒ"
 
-#: dwarf2.c:2128
+#: dwarf2.c:2772
 #, c-format
 msgid "DWARF error: line info unsupported segment selector size %u"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð²Ð°Ñ€Ñ–Ð°Ð½Ñ‚Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ–Ð² %u Ñƒ Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÐ°"
 
-#: dwarf2.c:2155
+#: dwarf2.c:2794
 msgid "DWARF error: invalid maximum operations per instruction"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð° ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð´Ñ–Ð¹ Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ"
 
-#: dwarf2.c:2174
+#: dwarf2.c:2806
 msgid "DWARF error: ran out of room reading opcodes"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� ÐºÐ¾Ð´Ñ–Ð² Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹"
 
-#: dwarf2.c:2347
+#: dwarf2.c:2984
 msgid "DWARF error: mangled line number section"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²"
 
-#: dwarf2.c:2852 dwarf2.c:2913
+#: dwarf2.c:3455
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ€ÐµÐºÑƒÑ€Ñ�Ñ–ÑŽ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¼ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð¾Ð¼"
+
+#: dwarf2.c:3489 dwarf2.c:3579
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¹ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ DIE"
 
-#: dwarf2.c:2889
+#: dwarf2.c:3505
 #, c-format
 msgid "DWARF error: unable to read alt ref %<PRIu64>"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� %<PRIu64>"
 
-#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457
+#: dwarf2.c:3557
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¹ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ DIE %<PRIu64>"
+
+#: dwarf2.c:3594 dwarf2.c:3910 dwarf2.c:4483
 #, c-format
 msgid "DWARF error: could not find abbrev number %u"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %u"
 
-#: dwarf2.c:2947
-msgid "DWARF error: abstract instance recursion detected"
-msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ€ÐµÐºÑƒÑ€Ñ�Ñ–ÑŽ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¼ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð¾Ð¼"
+#: dwarf2.c:4183
+#, c-format
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–ÑŽ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ… Ð·Ñ– Ð·Ñ�ÑƒÐ²Ð¾Ð¼ 0x%lx"
+
+#: dwarf2.c:4329 dwarf2.c:4583
+msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ DW_AT_comp_dir Ñ–Ð· Ð½ÐµÑ€Ñ�Ð´ÐºÐ¾Ð²Ð¾ÑŽ Ñ„Ð¾Ñ€Ð¼Ð¾ÑŽ"
 
-#: dwarf2.c:3376
+#: dwarf2.c:4400
 #, c-format
 msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð²ÐµÑ€Ñ�Ñ–ÑŽ DWARF Â«%uÂ», Ð°Ð»Ðµ Ñƒ Ñ†Ñ–Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÑƒ Ð»Ð¸ÑˆÐµ Ð²ÐµÑ€Ñ�Ñ–Ð¹ Ð´Ð°Ð½Ð¸Ñ… 2, 3 Ñ– 4"
 
-#: dwarf2.c:3420
+#: dwarf2.c:4447
 #, c-format
 msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð°Ð´Ñ€ÐµÑ�Ð¸ Â«%uÂ», Ð²Ñ‚Ñ–Ð¼ Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð², Ñ‰Ð¾ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑŽÑ‚ÑŒ Â«%uÂ»"
 
-#: dwarf2.c:3523
-msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
-msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ DW_AT_comp_dir Ñ–Ð· Ð½ÐµÑ€Ñ�Ð´ÐºÐ¾Ð²Ð¾ÑŽ Ñ„Ð¾Ñ€Ð¼Ð¾ÑŽ"
-
-#: ecoff.c:971
+#: ecoff.c:1016
 #, c-format
 msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: isymMax (%ld) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” ifdMax (%ld)"
 
-#: ecoff.c:1268
+#: ecoff.c:1312
 #, c-format
 msgid "unknown basic type %d"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ %d"
 
-#: ecoff.c:1525
+#: ecoff.c:1568
 #, c-format
 msgid ""
 "\n"
@@ -686,7 +777,7 @@ msgstr ""
 "\n"
 "      Ð¡Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %ld"
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1575 ecoff.c:1578
 #, c-format
 msgid ""
 "\n"
@@ -695,7 +786,7 @@ msgstr ""
 "\n"
 "      ÐŸÐµÑ€ÑˆÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %ld"
 
-#: ecoff.c:1548
+#: ecoff.c:1593
 #, c-format
 msgid ""
 "\n"
@@ -704,7 +795,7 @@ msgstr ""
 "\n"
 "      Ð¡Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %-7ld   Ð¢Ð¸Ð¿:  %s"
 
-#: ecoff.c:1555
+#: ecoff.c:1601
 #, c-format
 msgid ""
 "\n"
@@ -713,7 +804,7 @@ msgstr ""
 "\n"
 "      Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %ld"
 
-#: ecoff.c:1563
+#: ecoff.c:1609
 #, c-format
 msgid ""
 "\n"
@@ -722,7 +813,7 @@ msgstr ""
 "\n"
 "      struct; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %ld"
 
-#: ecoff.c:1568
+#: ecoff.c:1614
 #, c-format
 msgid ""
 "\n"
@@ -731,7 +822,7 @@ msgstr ""
 "\n"
 "      union; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %ld"
 
-#: ecoff.c:1573
+#: ecoff.c:1619
 #, c-format
 msgid ""
 "\n"
@@ -740,7 +831,7 @@ msgstr ""
 "\n"
 "      enum; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %ld"
 
-#: ecoff.c:1579
+#: ecoff.c:1627
 #, c-format
 msgid ""
 "\n"
@@ -749,42 +840,46 @@ msgstr ""
 "\n"
 "      Ð¢Ð¸Ð¿: %s"
 
-#: elf-attrs.c:446
+#: elf-attrs.c:417 elf-attrs.c:447 elf-attrs.c:623
+msgid "error adding attribute"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚"
+
+#: elf-attrs.c:503
 #, c-format
 msgid "%pB: error: attribute section '%pA' too big: %#llx"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Â«%pAÂ» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ: %#llx"
 
-#: elf-attrs.c:487
+#: elf-attrs.c:540
 #, c-format
-msgid "%pB: error: attribute section length too small: %<PRId64>"
-msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ: %<PRId64>"
+msgid "%pB: error: attribute section length too small: %ld"
+msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ: %ld"
 
-#: elf-attrs.c:615
+#: elf-attrs.c:673
 #, c-format
 msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð´Ð°Ð½Ñ– Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–, Ñ†Ñ– Ð´Ð°Ð½Ñ– Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² Â«%sÂ»"
 
-#: elf-attrs.c:625
+#: elf-attrs.c:683
 #, c-format
 msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¼Ñ–Ñ‚ÐºÐ° Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Â«%d, %sÂ» Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð° Ð· Ð¼Ñ–Ñ‚ÐºÐ¾ÑŽ Â«%d, %sÂ»"
 
-#: elf-eh-frame.c:944
+#: elf-eh-frame.c:945
 #, c-format
 msgid "discarding zero address range FDE in %pB(%pA).\n"
 msgstr "Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ”Ð¼Ð¾ FDE Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ� Ñƒ %pB(%pA).\n"
 
-#: elf-eh-frame.c:1049
+#: elf-eh-frame.c:1050
 #, c-format
 msgid "error in %pB(%pA); no .eh_frame_hdr table will be created"
 msgstr " Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ %pB(%pA); Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ .eh_frame_hdr Ð½Ðµ Ð±ÑƒÐ´Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾"
 
-#: elf-eh-frame.c:1539
+#: elf-eh-frame.c:1542
 #, c-format
 msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created"
 msgstr "ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� FDE Ñƒ %pB(%pA) Ð¿ÐµÑ€ÐµÑˆÐºÐ¾Ð´Ð¶Ð°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– .eh_frame_hdr"
 
-#: elf-eh-frame.c:1546
+#: elf-eh-frame.c:1549
 msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
 msgstr "Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÑ– Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� FDE, Ñ�ÐºÐµ Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ .eh_frame_hdr, Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾"
 
@@ -803,116 +898,111 @@ msgstr "%pB: %pA Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ…
 msgid "%pB: %pA points past end of text section"
 msgstr "%pB: %pA Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: elf-eh-frame.c:2139
+#: elf-eh-frame.c:2143
 msgid "DW_EH_PE_datarel unspecified for this architecture"
 msgstr "DW_EH_PE_datarel Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ†Ñ–Ñ”Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸"
 
-#: elf-eh-frame.c:2309
+#: elf-eh-frame.c:2314
 #, c-format
 msgid "invalid output section for .eh_frame_entry: %pA"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ñƒ .eh_frame_entry: %pA"
 
-#: elf-eh-frame.c:2332
+#: elf-eh-frame.c:2337
 #, c-format
 msgid "invalid contents in %pA section"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pA"
 
-#: elf-eh-frame.c:2488
+#: elf-eh-frame.c:2493
 msgid ".eh_frame_hdr entry overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ñƒ .eh_frame_hdr"
 
-#: elf-eh-frame.c:2490
+#: elf-eh-frame.c:2495
 msgid ".eh_frame_hdr refers to overlapping FDEs"
 msgstr ".eh_frame_hdr Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° FDE, Ñ�ÐºÑ– Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°ÑŽÑ‚ÑŒÑ�Ñ�"
 
-#: elf-ifunc.c:149
+#. xgettext:c-format.
+#: elf-ifunc.c:144 elfnn-loongarch.c:1427
 #, c-format
 msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
 msgstr "%F%P: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» STT_GNU_IFUNC Â«%sÂ» Ð· Ñ€Ñ–Ð²Ð½Ñ–Ñ�Ñ‚ÑŽ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ñƒ Â«%pBÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ñƒ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñ�Ñ†Ñ–ÑŽ Ð· -fPIE Ñ– Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� -pie\n"
 
-#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127
-#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925
-#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049
-#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693
-#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266
-#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631
-#: elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759
-#: elf32-score.c:2733 elf32-score7.c:2542 elf32-spu.c:5083
-#: elf32-tilepro.c:3506 elf32-v850.c:2291 elf32-visium.c:681
-#: elf32-xstormy16.c:931 elf64-mmix.c:1541 elfxx-tilegx.c:3870
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-bfin.c:3133 elf32-cr16.c:1429
+#: elf32-cris.c:2034 elf32-crx.c:922 elf32-d10v.c:510 elf32-epiphany.c:563
+#: elf32-fr30.c:594 elf32-frv.c:4049 elf32-ft32.c:492 elf32-h8300.c:523
+#: elf32-ip2k.c:1478 elf32-iq2000.c:691 elf32-lm32.c:1070 elf32-m32c.c:624
+#: elf32-m32r.c:2837 elf32-m68hc1x.c:1271 elf32-mep.c:522 elf32-metag.c:1984
+#: elf32-microblaze.c:1682 elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6093
+#: elf32-or1k.c:1897 elf32-score.c:2734 elf32-score7.c:2545 elf32-spu.c:5085
+#: elf32-tilepro.c:3372 elf32-v850.c:2294 elf32-visium.c:680
+#: elf32-xstormy16.c:930 elf64-bpf.c:339 elf64-mmix.c:1541 elfxx-tilegx.c:3742
 msgid "internal error: out of range error"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ"
 
-#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131
-#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929
-#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498
-#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628
-#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994
-#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362
-#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546
-#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685
-#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469
-#: elfxx-tilegx.c:3874
+#: elf-m10200.c:438 elf-m10300.c:2150 elf32-bfin.c:3137 elf32-cr16.c:1433
+#: elf32-cris.c:2038 elf32-crx.c:926 elf32-d10v.c:514 elf32-fr30.c:598
+#: elf32-frv.c:4053 elf32-ft32.c:496 elf32-h8300.c:527 elf32-iq2000.c:695
+#: elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841 elf32-m68hc1x.c:1275
+#: elf32-mep.c:526 elf32-metag.c:1988 elf32-microblaze.c:1686 elf32-moxie.c:292
+#: elf32-msp430.c:1510 elf32-nds32.c:6097 elf32-or1k.c:1901 elf32-score.c:2738
+#: elf32-score7.c:2549 elf32-spu.c:5089 elf32-tilepro.c:3376 elf32-v850.c:2298
+#: elf32-visium.c:684 elf32-xstormy16.c:934 elf64-mmix.c:1545
+#: elfxx-mips.c:10658 elfxx-tilegx.c:3746
 msgid "internal error: unsupported relocation error"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933
-#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053
-#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197
-#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091
+#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:930 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1279
+#: elf32-microblaze.c:1690 elf32-nds32.c:6101 elf32-score.c:2742
+#: elf32-score7.c:2553 elf32-spu.c:5093
 msgid "internal error: dangerous error"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
 
-#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139
-#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937
-#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061
-#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705
-#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278
-#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643
-#: elf32-moxie.c:300 elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201
-#: elf32-or1k.c:1771 elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095
-#: elf32-tilepro.c:3518 elf32-v850.c:2315 elf32-visium.c:693
-#: elf32-xstormy16.c:943 elf64-mmix.c:1553 elfxx-tilegx.c:3882
+#: elf-m10200.c:446 elf-m10300.c:2167 elf32-bfin.c:3145 elf32-cr16.c:1441
+#: elf32-cris.c:2046 elf32-crx.c:934 elf32-d10v.c:522 elf32-epiphany.c:578
+#: elf32-fr30.c:606 elf32-frv.c:4061 elf32-ft32.c:504 elf32-h8300.c:535
+#: elf32-ip2k.c:1493 elf32-iq2000.c:703 elf32-lm32.c:1082 elf32-m32c.c:636
+#: elf32-m32r.c:2849 elf32-m68hc1x.c:1283 elf32-mep.c:534 elf32-metag.c:1996
+#: elf32-microblaze.c:1694 elf32-moxie.c:300 elf32-msp430.c:1518 elf32-mt.c:410
+#: elf32-nds32.c:6105 elf32-or1k.c:1909 elf32-score.c:2751 elf32-score7.c:2557
+#: elf32-spu.c:5097 elf32-tilepro.c:3384 elf32-v850.c:2318 elf32-visium.c:692
+#: elf32-xstormy16.c:942 elf64-bpf.c:352 elf64-mmix.c:1553 elfxx-tilegx.c:3754
 msgid "internal error: unknown error"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
 
-#: elf-m10300.c:1029
+#: elf-m10300.c:1030
 #, c-format
 msgid "%pB: unsupported transition from %s to %s"
 msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð· %s Ð´Ð¾ %s"
 
-#: elf-m10300.c:1198
+#: elf-m10300.c:1197
 #, c-format
 msgid "%pB: %s' accessed both as normal and thread local symbol"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ‚Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539
-#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409
-#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846
-#: elfxx-sparc.c:3906 elfxx-tilegx.c:3793
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5261
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6807
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2279
+#: elf-m10300.c:2093 elf32-arm.c:13398 elf32-i386.c:3494 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3023 elf64-s390.c:3042 elf64-x86-64.c:4369 elfxx-sparc.c:2917
+#: elfxx-sparc.c:3814 elfxx-tilegx.c:3665 elfnn-aarch64.c:5713
+#: elfnn-aarch64.c:7322 elfnn-kvx.c:2775
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf-m10300.c:2156
+#: elf-m10300.c:2155
 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� (Ð·Ð°Ð±ÑƒÐ»Ð¸ -fpic?)"
 
-#: elf-m10300.c:2160
+#: elf-m10300.c:2159
 #, c-format
 msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library"
 msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ» Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf-m10300.c:2163
+#: elf-m10300.c:2162
 msgid "internal error: suspicious relocation type used in shared library"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ð¾Ð·Ñ€Ñ–Ð»Ð¸Ð²Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÑ†Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364
-#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361
-#: elf64-ia64.c:361
+#: elf-m10300.c:2650 elf32-avr.c:2488 elf32-frv.c:5621 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8457 reloc16.c:155 elfnn-ia64.c:365
 msgid "%P%F: --relax and -r may not be used together\n"
 msgstr "%P%F: --relax Ñ– -r Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾\n"
 
@@ -941,136 +1031,158 @@ msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð
 msgid "warning: %pB: corrupt no copy on protected size: 0x%x"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Â«Ð½Ðµ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ñ‚Ð¸ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½ÐµÂ», Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 0x%x"
 
-#: elf-properties.c:186
+#: elf-properties.c:189
+#, c-format
+msgid "error: %pB: <corrupt property (0x%x) size: 0x%x>"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– (0x%x): 0x%x>"
+
+#: elf-properties.c:214
 #, c-format
 msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ GNU_PROPERTY_TYPE (%ld): 0x%x"
 
-#: elf-properties.c:301
+#: elf-properties.c:400
 msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (0x%v) Ð· %pB (0x%v)\n"
 
-#: elf-properties.c:307
+#: elf-properties.c:406
 msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n"
 msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (0x%v) Ð· %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)\n"
 
-#: elf-properties.c:316 elf-properties.c:396
+#: elf-properties.c:415 elf-properties.c:493
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB Ð· %pB\n"
 
-#: elf-properties.c:320
+#: elf-properties.c:419
 msgid "Removed property %W to merge %pB and %pB (not found)\n"
 msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB Ð· %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)\n"
 
-#: elf-properties.c:339
+#: elf-properties.c:436
 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W (0x%v) Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (0x%v) Ð· %pB (0x%v)\n"
 
-#: elf-properties.c:348
+#: elf-properties.c:445
 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
 msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W (%v) Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (0x%v) Ð· %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)\n"
 
-#: elf-properties.c:390
+#: elf-properties.c:487
 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
 msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾) Ð· %pB (0x%v)\n"
 
+#: elf-properties.c:668 elfxx-aarch64.c:758 elfxx-x86.c:4147
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚ÐµÐ¹ GNU\n"
+
+#: elf-properties.c:672 elfxx-aarch64.c:762 elfxx-x86.c:4152
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€\n"
+
 #. Merge .note.gnu.property sections.
-#: elf-properties.c:552 elf-properties.c:554
+#: elf-properties.c:698 elf-properties.c:700
 msgid "\n"
 msgstr "\n"
 
-#: elf-properties.c:553
+#: elf-properties.c:699
 msgid "Merging program properties\n"
 msgstr "Ð’Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ�\n"
 
+#: elf-sframe.c:240
+#, c-format
+msgid "error in %pB(%pA); no .sframe will be created"
+msgstr " Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ %pB(%pA); Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ .sframe Ð½Ðµ Ð±ÑƒÐ´Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾"
+
+#: elf-sframe.c:400
+msgid "input SFrame sections with different abi prevent .sframe generation"
+msgstr "Ð²Ñ…Ñ–Ð´Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ SFrame Ñ–Ð· Ñ–Ð½ÑˆÐ¸Ð¼ abi Ð·Ð°Ð²Ð°Ð¶Ð°ÑŽÑ‚ÑŒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ .sframe"
+
+#: elf-sframe.c:411
+msgid "input SFrame sections with different format versions prevent .sframe generation"
+msgstr "Ð²Ñ…Ñ–Ð´Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ SFrame Ñ–Ð· Ñ–Ð½ÑˆÐ¸Ð¼Ð¸ Ð²ÐµÑ€Ñ�Ñ–Ñ�Ð¼Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–Ð² Ð·Ð°Ð²Ð°Ð¶Ð°ÑŽÑ‚ÑŒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ .sframe"
+
 #. PR 17512: file: f057ec89.
-#: elf.c:345
+#: elf.c:328
 #, c-format
 msgid "%pB: attempt to load strings from a non-string section (number %d)"
 msgstr "%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ–Ð· Ð½ÐµÑ€Ñ�Ð´ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (Ð½Ð¾Ð¼ÐµÑ€ %d)"
 
-#: elf.c:360
+#: elf.c:353
 #, c-format
 msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñ€Ñ�Ð´ÐºÐ°, %u >= %<PRIu64>, Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»"
 
-#: elf.c:499 /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7891
+#: elf.c:517 elf32-arm.c:17731 elfnn-aarch64.c:8322 elfnn-loongarch.c:5102
 #, c-format
 msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
 msgstr "%pB Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %lu Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð» SHT_SYMTAB_SHNDX, Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”"
 
-#: elf.c:664
-#, c-format
-msgid "%pB: corrupt size field in group section header: %#<PRIx64>"
-msgstr "%pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð´Ð°Ð½Ñ– Ð¿Ð¾Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð³Ñ€ÑƒÐ¿: %#<PRIx64>"
-
-#: elf.c:680
+#: elf.c:679
 #, c-format
 msgid "%pB: invalid size field in group section header: %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñ– Ð´Ð°Ð½Ñ– Ð¿Ð¾Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð³Ñ€ÑƒÐ¿: %#<PRIx64>"
 
-#: elf.c:728
+#: elf.c:724
 #, c-format
 msgid "%pB: invalid entry in SHT_GROUP section [%u]"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– SHT_GROUP [%u]"
 
-#: elf.c:747
+#: elf.c:743
 #, c-format
 msgid "%pB: no valid group sections found"
 msgstr "%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ð³Ñ€ÑƒÐ¿Ð¸"
 
 #. See PR 21957 for a reproducer.
-#: elf.c:776
+#: elf.c:772
 #, c-format
 msgid "%pB: group section '%pA' has no contents"
 msgstr "%pB: Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf.c:837
+#: elf.c:833
 #, c-format
 msgid "%pB: no group info for section '%pA'"
 msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð³Ñ€ÑƒÐ¿Ð¸ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»"
 
-#: elf.c:868 elf.c:3886 elflink.c:11403
-#, c-format
-msgid "%pB: warning: sh_link not set for section `%pA'"
-msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ sh_link Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»"
-
-#: elf.c:888
+#: elf.c:885
 #, c-format
 msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
 msgstr "%pB: sh_link [%d] Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼"
 
-#: elf.c:901
+#: elf.c:898
 #, c-format
 msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
 msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» SHT_GROUP [Ñ–Ð½Ð´ÐµÐºÑ� %d] Ð½Ðµ Ð¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² SHF_GROUP"
 
-#: elf.c:922
+#: elf.c:920
 #, c-format
 msgid "%pB: section group entry number %u is corrupt"
 msgstr "%pB: Ð·Ð°Ð¿Ð¸Ñ� Ð³Ñ€ÑƒÐ¿Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ñ–Ð· Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %u Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾"
 
-#: elf.c:945
+#: elf.c:943
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿, [%#x], Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ» Ñƒ Ð³Ñ€ÑƒÐ¿Ñ– [%pA]"
 
-#: elf.c:1408
+#: elf.c:1244
+#, c-format
+msgid "%pB: section %s is compressed with zstd, but BFD is not built with zstd support"
+msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñ�Ñ‚Ð¸Ñ�Ð½ÐµÐ½Ð¾ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ zstd, Ð°Ð±Ð¾ BFD Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð±ÐµÐ· Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ zstd"
+
+#: elf.c:1440
 #, c-format
 msgid "%pB: invalid sh_link field (%d) in section number %d"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ð»Ðµ sh_link (%d) Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð· Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %d"
 
-#: elf.c:1424
+#: elf.c:1456
 #, c-format
 msgid "%pB: failed to find link section for section %d"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð·Ð²â€™Ñ�Ð·ÐºÑ–Ð² Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d"
 
-#: elf.c:1451
+#: elf.c:1483
 #, c-format
 msgid "%pB: failed to find info section for section %d"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d"
 
-#: elf.c:1623
+#: elf.c:1660
 #, c-format
 msgid ""
 "\n"
@@ -1079,7 +1191,7 @@ msgstr ""
 "\n"
 "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸:\n"
 
-#: elf.c:1665
+#: elf.c:1702
 #, c-format
 msgid ""
 "\n"
@@ -1088,7 +1200,7 @@ msgstr ""
 "\n"
 "Ð”Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»:\n"
 
-#: elf.c:1806
+#: elf.c:1841
 #, c-format
 msgid ""
 "\n"
@@ -1097,7 +1209,7 @@ msgstr ""
 "\n"
 "Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²ÐµÑ€Ñ�Ñ–Ð¹:\n"
 
-#: elf.c:1831
+#: elf.c:1866
 #, c-format
 msgid ""
 "\n"
@@ -1106,440 +1218,611 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ—:\n"
 
-#: elf.c:1836
+#: elf.c:1871
 #, c-format
 msgid "  required from %s:\n"
 msgstr "  Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ñ– %s:\n"
 
-#: elf.c:2037
+#: elf.c:2614
 #, c-format
 msgid "%pB: warning: loop in section dependencies detected"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ†Ð¸ÐºÐ»ÐµÐ½Ñ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñ�Ñ‚ÐµÐ¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: elf.c:2145
+#: elf.c:2721
 #, c-format
 msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %u"
 
-#: elf.c:2229
+#: elf.c:2806
 #, c-format
 msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %u"
 
-#: elf.c:2342
+#: elf.c:2925
 #, c-format
 msgid "%pB: invalid link %u for reloc section %s (index %u)"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� %u Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s (Ñ–Ð½Ð´ÐµÐºÑ� %u)"
 
-#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543
+#: elf.c:2982
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾"
+
+#: elf.c:3070 elf.c:3084 elf.c:3095 elf.c:3108
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ [%#x], Â«%sÂ»"
 
-#: elf.c:3248
+#: elf.c:3770
 #, c-format
 msgid "%pB: error: alignment power %d of section `%pA' is too big"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ñ‚ÐµÐ¿Ñ–Ð½ÑŒ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %d Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ"
 
-#: elf.c:3278
+#: elf.c:3805
 #, c-format
 msgid "warning: section `%pA' type changed to PROGBITS"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð½Ð° PROGBITS"
 
-#: elf.c:3754
+#: elf.c:4311
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr "%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² %u"
 
-#: elf.c:3839
+#: elf.c:4397
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
 msgstr "%pB: sh_link Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Â«%pBÂ»"
 
-#: elf.c:3864
+#: elf.c:4415
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
 msgstr "%pB: sh_link Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Â«%pBÂ»"
 
-#: elf.c:4430
+#: elf.c:5009
 #, c-format
-msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d"
-msgstr "%pB: Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– GNU_MBIN Â«%pAÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ð»Ðµ sh_info: %d"
+msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d"
+msgstr "%pB: Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– GNU_MBIND Â«%pAÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ð»Ðµ sh_info: %d"
+
+#: elf.c:5192
+msgid "%F%P: failed to size relative relocations\n"
+msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð¼Ñ–Ñ€Ñ�Ñ‚Ð¸ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�\n"
 
-#: elf.c:5013
+#: elf.c:5617
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ TLS Ð½Ðµ Ñ” Ñ�ÑƒÑ�Ñ–Ð´Ð½Ñ–Ð¼Ð¸:"
 
-#: elf.c:5020
+#: elf.c:5624
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr "\t    TLS: %pA"
 
-#: elf.c:5024
+#: elf.c:5628
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr "\tÐ½Ðµ-TLS: %pA"
 
-#: elf.c:5538
+#: elf.c:6256
 #, c-format
 msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
 msgstr "%pB: Ð¿ÐµÑ€ÑˆÐ¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ñƒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ– PT_DYNAMIC Ð½Ðµ Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ .dynamic"
 
-#: elf.c:5566
+#: elf.c:6282
 #, c-format
 msgid "%pB: not enough room for program headers, try linking with -N"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¼Ñ–Ñ�Ñ†Ñ� Ð´Ð»Ñ� Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸, Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· -N"
 
-#: elf.c:5654
+#: elf.c:6399
 #, c-format
 msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
 msgstr "%pB: (Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA) lma %#<PRIx64> Ñ�ÐºÐ¾Ñ€Ð¸Ð³Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð¾ %#<PRIx64>"
 
-#: elf.c:5791
+#. The fix for this error is usually to edit the linker script being
+#. used and set up the program headers manually.  Either that or
+#. leave room for the headers at the start of the SECTIONS.
+#: elf.c:6539
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD"
+
+#: elf.c:6579
 #, c-format
 msgid "%pB: section `%pA' can't be allocated in segment %d"
 msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¾ Ñƒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ– %d"
 
-#: elf.c:5839
+#: elf.c:6720
 #, c-format
 msgid "%pB: warning: allocated section `%s' not in segment"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°"
 
-#: elf.c:6072
+#: elf.c:6855
+#, c-format
+msgid "%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¶Ð¾Ð´Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ñƒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ– PT_GNU_RELRO"
+
+#: elf.c:6886
 #, c-format
 msgid "%pB: error: non-load segment %d includes file header and/or program header"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ %d Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ” Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ„Ð°Ð¹Ð»Ð° Ñ–/Ð°Ð±Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸"
 
-#. The fix for this error is usually to edit the linker script being
-#. used and set up the program headers manually.  Either that or
-#. leave room for the headers at the start of the SECTIONS.
-#: elf.c:6249
+#: elf.c:7034
 #, c-format
-msgid "%pB: error: PHDR segment not covered by LOAD segment"
-msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD"
+msgid "error: %pB has a TLS segment with execute permission"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ TLS Ð· Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�"
+
+#: elf.c:7040
+#, c-format
+msgid "warning: %pB has a TLS segment with execute permission"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ TLS Ð· Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�"
+
+#: elf.c:7055
+#, c-format
+msgid "error: %pB has a LOAD segment with RWX permissions"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ LOAD Ñ–Ð· Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ RWX"
+
+#: elf.c:7061
+#, c-format
+msgid "warning: %pB has a LOAD segment with RWX permissions"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ LOAD Ñ–Ð· Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ RWX"
 
-#: elf.c:6606
+#: elf.c:7454
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr "%pB: Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ð°Ð»Ðµ Ð¹Ð¾Ð³Ð¾ Ð½ÐµÐ¼Ð°Ñ”"
 
-#: elf.c:6949
+#: elf.c:7832
 #, c-format
 msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¹ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð·Ð° vaddr=%#<PRIx64>, Ñ‚Ð°Ðº Ñ– Ñ‚Ñ€ÐµÐ±Ð°?"
 
-#: elf.c:7574
+#: elf.c:8492
 #, c-format
 msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° %#<PRIx64> Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼"
 
-#: elf.c:8073
+#: elf.c:9000
+#, c-format
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %x Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ– ELF. Ð’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ Ð½ÑŒÐ¾Ð³Ð¾ ABS."
+
+#: elf.c:9030
 #, c-format
 msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ñ–Ð²Ð½Ð¾Ñ†Ñ–Ð½Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»"
 
-#: elf.c:8421
+#: elf.c:9464
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� .gnu.version_r"
 
-#: elf.c:8548
+#: elf.c:9639
 #, c-format
 msgid "%pB: .gnu.version_d invalid entry"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� .gnu.version_d"
 
-#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914
-#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841
-#: elf64-ppc.c:4950
+#: elf.c:10139
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr "%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
+
+#: elf.c:10151
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr "%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð¾ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ð±ÑƒÑ„ÐµÑ€Ð°"
+
+#: elf.c:10266 elf32-mcore.c:100 elf32-mcore.c:455 elf32-ppc.c:7676
+#: elf32-ppc.c:8864 elf64-ppc.c:16839
+#, c-format
+msgid "%pB: %s unsupported"
+msgstr "%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
+
+#: elf.c:11079
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: win32pstatus %s Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ %lu Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
+
+#: elf.c:11158
+#, c-format
+msgid "%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"
+msgstr "%pB: win32pstatus NOTE_INFO_MODULE Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ %lu Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼, Ñ‰Ð¾Ð± Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ %u"
+
+#: elf.c:13796
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ GNU_MBIND Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ†Ñ–Ð»ÐµÐ¹ GNU Ñ– FreeBSD"
+
+#: elf.c:13799
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ñ‚Ð¸Ð¿Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² STT_GNU_IFUNC Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU Ñ‚Ð° FreeBSD"
+
+#: elf.c:13802
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð¿Ñ€Ð¸Ð²'Ñ�Ð·ÐºÐ¸ STB_GNU_UNIQUE Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU Ñ‚Ð° FreeBSD"
+
+#: elf.c:13805
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ GNU_RETAIN Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ†Ñ–Ð»ÐµÐ¹ GNU Ñ– FreeBSD"
+
+#: elf.c:14023
+#, c-format
+msgid "%pB(%pA): relocation %zu has invalid symbol index %lu"
+msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %zu Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %lu"
+
+#: elf.c:14099
+#, c-format
+msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table"
+msgstr "%pB(%pA): Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð² Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²"
+
+#: elf.c:14113
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸Ðº Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ info Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼"
+
+#: elf.c:14127
+#, c-format
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr "%pB(%pA): Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÐ²Ð°Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ info, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ñ†ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð½ÐµÐ¼Ð°Ñ” Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ–"
+
+#: elf.c:14203
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾ Ð´Ð²Ñ–Ñ‡Ñ–"
+
+#: elf.c:14215
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
+
+#: elf.c:14227
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð½ÐµÑ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
+
+#: elf.c:14241
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¼!"
+
+#: elf.c:14264
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ"
+
+#: elf.c:14284
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %zu is empty"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ %zu Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¼"
+
+#: elf.c:14309
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a missing symbol"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %zu Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¾Ð³Ð¾ Ð½ÐµÐ¼Ð°Ñ”"
+
+#: elf.c:14327
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu references a deleted symbol"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %zu Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾"
+
+#: elf.c:14341
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %zu is of an unknown type"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %zu Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15125 elf32-frv.c:6612 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3218
+#: elf32-visium.c:844 elf64-ppc.c:5513 elfnn-aarch64.c:7552
 #, c-format
 msgid "private flags = 0x%lx:"
 msgstr "Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = 0x%lx:"
 
-#: elf32-arc.c:627
+#: elf32-arc.c:642
 #, c-format
 msgid "warning: %pB: conflicting platform configuration %s with %s"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼, %s Ð· %s"
 
-#: elf32-arc.c:646
+#: elf32-arc.c:661
 #, c-format
 msgid "error: %pB: unable to merge CPU base attributes %s with %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ Ð±Ð°Ð·Ð¾Ð²Ñ– Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° %s Ð· %s"
 
-#: elf32-arc.c:683
+#: elf32-arc.c:698
 #, c-format
 msgid "error: %pB: unable to merge ISA extension attributes %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %s"
 
-#: elf32-arc.c:707
+#: elf32-arc.c:722
 #, c-format
 msgid "error: %pB: conflicting ISA extension attributes %s with %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA, %s Ð· %s"
 
-#: elf32-arc.c:747
+#: elf32-arc.c:762
 #, c-format
 msgid "error: %pB: cannot mix rf16 with full register set %pB"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ rf16 Ñ– Ð¿Ð¾Ð²Ð½Ð¸Ð¹ Ð½Ð°Ð±Ñ–Ñ€ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² %pB"
 
-#: elf32-arc.c:775
+#: elf32-arc.c:790
 #, c-format
 msgid "error: %pB: conflicting attributes %s: %s with %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² %s: %s Ð· %s"
 
-#: elf32-arc.c:802
+#: elf32-arc.c:817
 #, c-format
 msgid "error: %pB: conflicting attributes %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² %s"
 
-#: elf32-arc.c:907
+#: elf32-arc.c:922
 #, c-format
 msgid "error: attempting to link %pB with a binary %pB of different architecture"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� %pB Ð·Ñ– Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¼ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ %pB Ñ–Ð½ÑˆÐ¾Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸"
 
-#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385
-#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354
+#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390
+#: elf32-ppc.c:3856 elf64-sparc.c:737 elfxx-mips.c:15692
 #, c-format
 msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½ÑˆÑ– Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð½Ñ–Ð¶ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)"
 
-#: elf32-arc.c:1012
+#: elf32-arc.c:1027
 msgid "error: the ARC4 architecture is no longer supported"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ ARC4 Ð¿Ñ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð¾"
 
-#: elf32-arc.c:1018
+#: elf32-arc.c:1033
 msgid "warning: unset or old architecture flags; use default machine"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ð°Ð±Ð¾ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñ–; Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ñ‚Ð¸Ð¿Ð¾Ð²Ñƒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
 
-#: elf32-arc.c:1151
+#: elf32-arc.c:1159
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CMEM Ð´Ð¾ Â«%sÂ» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼, 16 MSB Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %#<PRIx64>)"
 
-#: elf32-arc.c:1162
+#: elf32-arc.c:1170
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): CMEM relocation to `%s+%#<PRIx64>' is invalid, 16 MSB should be %#x (value is %#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CMEM Ð´Ð¾ Â«%s+%#<PRIx64>Â» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼, 16 MSB Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %#<PRIx64>)"
 
-#: elf32-arc.c:1876
+#: elf32-arc.c:1898
 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
 msgstr "ÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOT Ñ– PLT Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¾, Ñ�ÐºÑ‰Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ñ” Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¼"
 
-#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470
+#: elf32-arc.c:1922 elf32-rx.c:1486
 #, c-format
 msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"
 msgstr "%pB(%pA): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475
+#: elf32-arc.c:1927 elf32-rx.c:1491
 #, c-format
 msgid "%pB(%pA): internal error: out of range error"
 msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ"
 
-#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480
+#: elf32-arc.c:1932 elf32-rx.c:1496
 #, c-format
 msgid "%pB(%pA): internal error: unsupported relocation error"
 msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485
+#: elf32-arc.c:1937 elf32-rx.c:1501
 #, c-format
 msgid "%pB(%pA): internal error: dangerous relocation"
 msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490
+#: elf32-arc.c:1942 elf32-rx.c:1506
 #, c-format
 msgid "%pB(%pA): internal error: unknown error"
 msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
 
-#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7462
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:497
+#: elf32-arc.c:2036 elf32-arc.c:2104 elf32-arm.c:15580 elf32-metag.c:2251
+#: elf32-nds32.c:5543 elfnn-aarch64.c:7959 elfnn-riscv.c:720
 #, c-format
 msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC"
 
-#: elf32-arc.c:2949
+#: elf32-arc.c:2923
 #, c-format
 msgid "%pB: unknown mandatory ARC object attribute %d"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° ARC %d"
 
-#: elf32-arc.c:2957
+#: elf32-arc.c:2931
 #, c-format
 msgid "warning: %pB: unknown ARC object attribute %d"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° ARC %d"
 
-#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409
+#: elf32-arm.c:4346 elf32-arm.c:4380 elf32-arm.c:4399 elf32-arm.c:4451
 #, c-format
 msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction"
 msgstr "%pB(%pA): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð´Ð¾Ð²Ð³Ð¸Ñ… Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ–Ñ… Ð³Ñ–Ð»Ð¾Ðº Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð°Ñ… Ñ–Ð· Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ SHF_ARM_PURECODE Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ†Ñ–Ð»ÐµÐ¹ Ð· Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÐµÐ¼ M, Ñƒ Ñ�ÐºÐ¸Ñ… Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ movw."
 
-#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183
+#: elf32-arm.c:4411 elf32-arm.c:4465 elf32-arm.c:9163 elf32-arm.c:9253
 #, c-format
 msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s"
 msgstr "%pB(%s): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ð½Ðµ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾; Ð¿ÐµÑ€ÑˆÐ° Ð·Ð³Ð°Ð´ÐºÐ°: %pB: Ð²Ð¸ÐºÐ»Ð¸Ðº %s Ð´Ð¾ %s"
 
-#: elf32-arm.c:4697
+#: elf32-arm.c:4591
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº CMSE (Ñ€Ð¾Ð·Ð´Ñ–Ð» %s) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð´Ð°Ð»ÐµÐºÐ¸Ð¼ (%#<PRIx64>) Ð²Ñ–Ð´ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� (%#<PRIx64>)"
+
+#: elf32-arm.c:4760
 #, c-format
 msgid "no address assigned to the veneers output section %s"
 msgstr "Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð½Ð°Ð·Ð¾Ð²Ð½Ñ– %s Ð½Ðµ Ð¿Ð¾Ð²â€™Ñ�Ð·Ð°Ð½Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579
-#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3098
+#: elf32-arm.c:4835 elf32-arm.c:6984 elf32-csky.c:3389 elf32-hppa.c:582
+#: elf32-m68hc1x.c:164 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3907
+#: elf64-ppc.c:14157 elfnn-aarch64.c:3203 elfnn-kvx.c:895
 #, c-format
 msgid "%pB: cannot create stub entry %s"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %s"
 
-#: elf32-arm.c:5957
+#: elf32-arm.c:5056 elf32-csky.c:3731 elf32-hppa.c:732 elf32-hppa.c:761
+#: elf32-hppa.c:842 elf32-m68hc11.c:422 elf32-m68hc12.c:542 elf32-metag.c:3345
+#: elf32-nios2.c:2494 elf64-ppc.c:12273 elf64-ppc.c:12281 xcofflink.c:4684
+#: elfnn-aarch64.c:3275
+msgid "%F%P: Could not assign `%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ Â«%pAÂ» Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.\n"
+
+#: elf32-arm.c:6027
 #, c-format
 msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
 msgstr "%pB: Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ ARMv8-M Ñ– Ð½Ð¾Ð²Ñ–ÑˆÐ¸Ñ… Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€"
 
-#: elf32-arm.c:5966
+#: elf32-arm.c:6036
 #, c-format
 msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»; Ñ†Ðµ Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ñ— Ð°Ð±Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—"
 
-#: elf32-arm.c:6005
+#: elf32-arm.c:6075
 #, c-format
 msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»; Ñ†Ðµ Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ (global) Ð°Ð±Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¸Ð¹ (weak) Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—."
 
-#: elf32-arm.c:6011
+#: elf32-arm.c:6081
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»."
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6093
 #, c-format
 msgid "%pB: `%s' and its special symbol are in different sections"
 msgstr "%pB: Â«%sÂ» Ñ– Ñ—Ñ— Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°ÑŽÑ‚ÑŒ Ñƒ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð°Ñ…."
 
-#: elf32-arm.c:6035
+#: elf32-arm.c:6105
 #, c-format
 msgid "%pB: entry function `%s' not output"
 msgstr "%pB: Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf32-arm.c:6042
+#: elf32-arm.c:6112
 #, c-format
 msgid "%pB: entry function `%s' is empty"
 msgstr "%pB: Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾ÑŽ"
 
-#: elf32-arm.c:6171
+#: elf32-arm.c:6241
 #, c-format
 msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
 msgstr "%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ --in-implib Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐº Secure Gateway"
 
-#: elf32-arm.c:6217
+#: elf32-arm.c:6290
 #, c-format
 msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸: Â«%sÂ»; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¸Ð¼, Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¼ Ñ– Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ‚Ð¸Ñ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Thumb."
 
-#: elf32-arm.c:6239
+#: elf32-arm.c:6312
 #, c-format
 msgid "entry function `%s' disappeared from secure code"
 msgstr "Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ð·Ð½Ð¸ÐºÐ»Ð° Ð· Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ"
 
-#: elf32-arm.c:6263
+#: elf32-arm.c:6336
 #, c-format
 msgid "`%s' refers to a non entry function"
 msgstr "Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Ð±ÐµÐ· Ð²Ñ…Ð¾Ð´Ñƒ"
 
-#: elf32-arm.c:6278
+#: elf32-arm.c:6351
 #, c-format
 msgid "%pB: visibility of symbol `%s' has changed"
 msgstr "%pB: Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð²Ð¸Ð´Ð¸Ð¼Ñ–Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-arm.c:6287
+#: elf32-arm.c:6360
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-arm.c:6306
+#: elf32-arm.c:6379
 #, c-format
 msgid "offset of veneer for entry function `%s' not a multiple of its size"
 msgstr "Ð·Ñ�ÑƒÐ² Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÐ¸ Ð´Ð»Ñ� Ð²Ñ…Ñ–Ð´Ð½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ» Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ—Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: elf32-arm.c:6326
+#: elf32-arm.c:6399
 msgid "new entry function(s) introduced but no output import library specified:"
 msgstr "Ð²Ð¿Ñ€Ð¾Ð²Ð°Ð´Ð¶ÐµÐ½Ð¾ Ð½Ð¾Ð²Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—, Ð°Ð»Ðµ Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…:"
 
-#: elf32-arm.c:6334
+#: elf32-arm.c:6407
 #, c-format
 msgid "start address of `%s' is different from previous link"
 msgstr "Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Â«%sÂ» Ñ” Ñ–Ð½ÑˆÐ¾ÑŽ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�"
 
-#: elf32-arm.c:7042 elf32-arm.c:7078
+#: elf32-arm.c:7118 elf32-arm.c:7156
 #, c-format
 msgid "unable to find %s glue '%s' for '%s'"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ»"
 
-#: elf32-arm.c:7793
+#: elf32-arm.c:7868
 #, c-format
 msgid "%pB: BE8 images only valid in big-endian mode"
 msgstr "%pB: Ð¾Ð±Ñ€Ð°Ð·Ð¸ BE8 Ñ” Ñ‡Ð¸Ð½Ð½Ð¸Ð¼Ð¸ Ð»Ð¸ÑˆÐµ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– big-endian"
 
 #. Give a warning, but do as the user requests anyway.
-#: elf32-arm.c:8024
+#: elf32-arm.c:8096
 #, c-format
 msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ð¹ Ñ�Ð¿Ð¾Ñ�Ñ–Ð± ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ VFP11 Ð½Ðµ Ñ” Ð½ÐµÐ¾Ð±Ñ…Ñ–Ð´Ð½Ð¸Ð¼ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�"
 
-#: elf32-arm.c:8051
+#: elf32-arm.c:8123
 #, c-format
 msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ð¹ Ñ�Ð¿Ð¾Ñ�Ñ–Ð± ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ STM32L4XX Ð½Ðµ Ñ” Ð½ÐµÐ¾Ð±Ñ…Ñ–Ð´Ð½Ð¸Ð¼ Ð´Ð»Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�"
 
-#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693
+#: elf32-arm.c:8659 elf32-arm.c:8679 elf32-arm.c:8746 elf32-arm.c:8765
 #, c-format
 msgid "%pB: unable to find %s veneer `%s'"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ %s Â«%sÂ»"
 
-#: elf32-arm.c:8900
+#: elf32-arm.c:8972
 #, c-format
 msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block"
 msgstr "%pB(%pA+%#x): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½ÑŒ Ñƒ Ð½ÐµÐ¾Ñ�Ñ‚Ð°Ð½Ð½Ñ–Ð¹ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ð±Ð»Ð¾ÐºÑƒ IT: Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾. Ð¡ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ gcc -mrestrict-it, Ñ‰Ð¾Ð± Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ð¾Ð´Ð½Ñƒ  Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ Ð½Ð° Ð±Ð»Ð¾Ðº IT."
 
-#: elf32-arm.c:9000
+#: elf32-arm.c:9070
 #, c-format
 msgid "invalid TARGET2 relocation type '%s'"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ TARGET2, Â«%sÂ»"
 
 #. FIXME: We ought to be able to generate thumb-1 PLT
 #. instructions...
-#: elf32-arm.c:9802
+#: elf32-arm.c:9840
 #, c-format
 msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ–Ð¹ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� PLT Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– thumb-1"
 
-#: elf32-arm.c:10106 elf32-arm.c:10148
+#: elf32-arm.c:10149 elf32-arm.c:10191
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
 msgstr "%pB(%pA+%#<PRIx64>):  Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s, Â«%#lxÂ», Ñƒ Ñ‚Ñ€Ð°Ð¼Ð¿Ð»Ñ–Ð½Ñ– TLS"
 
-#: elf32-arm.c:10492
+#: elf32-arm.c:10541
 msgid "shared object"
 msgstr "Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚"
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10544
 msgid "PIE executable"
 msgstr "Ð’Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» PIE"
 
-#: elf32-arm.c:10498
+#: elf32-arm.c:10547
 #, c-format
 msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ð°Ð±Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� %s; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC"
 
-#: elf32-arm.c:10635 elf32-arm.c:11062
+#: elf32-arm.c:10649
+#, c-format
+msgid "\\%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr "\\%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s BLX Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ %s Â«%sÂ»."
+
+#: elf32-arm.c:11066
 #, c-format
 msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s BLX Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ %s Â«%sÂ»."
 
+#: elf32-arm.c:11700
+#, c-format
+msgid "%pB: expected symbol index in range 0..%lu but found local symbol with index %lu"
+msgstr "%pB: Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñƒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ– Ð²Ñ–Ð´ 0 Ð´Ð¾ %lu, Ð²Ñ‚Ñ–Ð¼, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ–Ð· Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu"
+
 #: elf32-arm.c:11975 elf32-arm.c:12001
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s, Â«%#lxÂ», Ð½Ð° Ñ�ÐºÑƒ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� TLS_GOTDESC"
 
-#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919
-#: elf32-nios2.c:4366
+#: elf32-arm.c:12047 elf32-csky.c:4959 elf32-m68k.c:3733 elf32-metag.c:1913
+#: elf32-nios2.c:4377
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾"
@@ -1554,550 +1837,564 @@ msgstr "%pB(%pA+%#<PRIx64>): Ð´Ð»Ñ� Ð¿Ðµ
 msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð¿Ð¾Ð´Ñ–Ð»Ñƒ %#<PRIx64> Ð· Ð¼ÐµÑ‚Ð¾ÑŽ Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
 
-#: elf32-arm.c:13078 elf32-sh.c:3689
+#: elf32-arm.c:12630 elf32-arm.c:12789
+msgid "local symbol index too big"
+msgstr "Ñ–Ð½Ð´ÐµÐºÑ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼"
+
+#: elf32-arm.c:12640 elf32-arm.c:12674
+msgid "no dynamic index information available"
+msgstr "Ð½ÐµÐ¼Ð°Ñ” Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ°"
+
+#: elf32-arm.c:12682
+msgid "invalid dynamic index"
+msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ�"
+
+#: elf32-arm.c:12799
+msgid "dynamic index information not available"
+msgstr "Ð´Ð°Ð½Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ° Ð½ÐµÐ´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ñ–"
+
+#: elf32-arm.c:13230 elf32-sh.c:3567
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ SEC_MERGE"
 
-#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6534
+#: elf32-arm.c:13343 elf32-m68k.c:3966 elf32-xtensa.c:2761 elfnn-aarch64.c:7049
+#: elfnn-kvx.c:2571
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
 msgstr "%pB(%pA+%#<PRIx64>): %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ TLS %s"
 
-#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6536
+#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2763 elfnn-aarch64.c:7051
+#: elfnn-kvx.c:2573
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
 msgstr "%pB(%pA+%#<PRIx64>): %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð¿Ð¾Ð·Ð° TLS %s"
 
-#: elf32-arm.c:13276 elf32-tic6x.c:2708
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6871
+#: elf32-arm.c:13428 elf32-tic6x.c:2649 elfnn-aarch64.c:7386 elfnn-kvx.c:2800
 msgid "out of range"
 msgstr "Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼"
 
-#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6875
+#: elf32-arm.c:13432 elf32-nios2.c:4511 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7390 elfnn-kvx.c:2804
 msgid "unsupported relocation"
 msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6883
+#: elf32-arm.c:13440 elf32-nios2.c:4521 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7398 elfnn-kvx.c:2812
 msgid "unknown error"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
 
-#: elf32-arm.c:13764
+#: elf32-arm.c:13922
 #, c-format
 msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð¹Ð¾Ð³Ð¾ Ð²Ð¶Ðµ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñ‚Ð°Ðº, Ñ‰Ð¾Ð± Ð²Ñ–Ð½ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½Ñ�Ð² Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ"
 
-#: elf32-arm.c:13768
+#: elf32-arm.c:13926
 #, c-format
 msgid "warning: clearing the interworking flag of %pB due to outside request"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB Ñƒ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´ÑŒ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚ Ð·Ð·Ð¾Ð²Ð½Ñ–"
 
-#: elf32-arm.c:13813
+#: elf32-arm.c:13971
 #, c-format
 msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð· Ð½Ð¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´, Ñ�ÐºÐ¸Ð¹ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸, Ñƒ %pB"
 
-#: elf32-arm.c:13900
+#: elf32-arm.c:14058
 #, c-format
 msgid "%pB: unknown mandatory EABI object attribute %d"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI %d"
 
-#: elf32-arm.c:13908
+#: elf32-arm.c:14066
 #, c-format
 msgid "warning: %pB: unknown EABI object attribute %d"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI %d"
 
-#: elf32-arm.c:14175
+#: elf32-arm.c:14401
 #, c-format
 msgid "error: %pB: unknown CPU architecture"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°"
 
-#: elf32-arm.c:14213 elf32-nios2.c:2946
+#: elf32-arm.c:14439
 #, c-format
-msgid "error: %pB: conflicting CPU architectures %d/%d"
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð² %d/%d"
+msgid "error: conflicting CPU architectures %s vs %s in %pB"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð², %s Ð°Ð±Ð¾ %s, Ñƒ %pB"
 
-#: elf32-arm.c:14310
+#: elf32-arm.c:14536
 #, c-format
 msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð»Ñ� %pB Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð¾Ð±Ð¸Ð´Ð²Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Tag_MPextension_use, current Ñ– legacy"
 
-#: elf32-arm.c:14339
+#: elf32-arm.c:14573
 #, c-format
 msgid "error: %pB uses VFP register arguments, %pB does not"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ VFP, Ð° Ñƒ %pB â€” Ð½Ñ–"
 
-#: elf32-arm.c:14497
+#: elf32-arm.c:14743
 #, c-format
 msgid "error: %pB: unable to merge virtualization attributes with %pB"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð· %pB Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ"
 
-#: elf32-arm.c:14523
+#: elf32-arm.c:14769
 #, c-format
 msgid "error: %pB: conflicting architecture profiles %c/%c"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»Ñ–Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€, %c/%c"
 
-#: elf32-arm.c:14662
+#: elf32-arm.c:14908
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼"
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14917
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ñƒ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ– R9"
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14929
 #, c-format
 msgid "error: %pB: SB relative addressing conflicts with use of R9"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð°Ñ†Ñ–Ñ— SB ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ð· Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð¼ R9"
 
-#: elf32-arm.c:14696
+#: elf32-arm.c:14942
 #, c-format
 msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹ wchar_t, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹ wchar_t; Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ wchar_t Ð¼Ñ–Ð¶ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸ Ð¼Ð¾Ð¶Ðµ Ð·Ð°Ð·Ð½Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–"
 
-#: elf32-arm.c:14727
+#: elf32-arm.c:14973
 #, c-format
 msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s; Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÑ–Ð² Ð¼Ñ–Ð¶ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸ Ð¼Ð¾Ð¶Ðµ Ð·Ð°Ð·Ð½Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–"
 
-#: elf32-arm.c:14739
+#: elf32-arm.c:14985
 #, c-format
 msgid "error: %pB uses iWMMXt register arguments, %pB does not"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸-Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ iWMMXt, Ð° Ñƒ %pB â€” Ð½Ñ–"
 
-#: elf32-arm.c:14756
+#: elf32-arm.c:15002
 #, c-format
 msgid "error: fp16 format mismatch between %pB and %pB"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð±Ñ–Ð¶Ð½Ð¾Ñ�Ñ‚Ñ– Ñƒ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ– Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� fp16 Ð¼Ñ–Ð¶ %pB Ñ‚Ð° %pB"
 
-#: elf32-arm.c:14792
+#: elf32-arm.c:15038
 #, c-format
 msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr "Ð´Ð»Ñ� %pB Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð¾Ð±Ð¸Ð´Ð²Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Tag_MPextension_use, current Ñ– legacy"
 
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#. Ignore init flag - it may not be set, despite the flags field
-#. containing valid data.
-#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410
-#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537
-#: elf32-xgate.c:494 elfxx-mips.c:16037
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7037
-#, c-format
-msgid "private flags = %lx:"
-msgstr "Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lx:"
-
-#: elf32-arm.c:14888
+#: elf32-arm.c:15134
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ]"
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15142
 #, c-format
 msgid " [VFP float format]"
 msgstr " [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float VFP]"
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15144
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float Maverick]"
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15146
 #, c-format
 msgid " [FPA float format]"
 msgstr " [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float FPA]"
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15149
 #, c-format
 msgid " [floats passed in float registers]"
 msgstr " [Ñ‡Ð¸Ñ�Ð»Ð° Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ Ð¿ÐµÑ€ÐµÐ´Ð°Ð½Ð¾ Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ]"
 
-#: elf32-arm.c:14906 elf32-arm.c:14992
+#: elf32-arm.c:15152 elf32-arm.c:15238
 #, c-format
 msgid " [position independent]"
 msgstr " [Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¹ Ð²Ñ–Ð´ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ—]"
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15155
 #, c-format
 msgid " [new ABI]"
 msgstr " [Ð½Ð¾Ð²Ð¸Ð¹ ABI]"
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15158
 #, c-format
 msgid " [old ABI]"
 msgstr " [Ñ�Ñ‚Ð°Ñ€Ð¸Ð¹ ABI]"
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15161
 #, c-format
 msgid " [software FP]"
 msgstr " [Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð° FP]"
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15170
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�1 EABI]"
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15173 elf32-arm.c:15184
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²]"
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15175 elf32-arm.c:15186
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²]"
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15181
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�2 EABI]"
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15189
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°]"
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15192
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÐ´ÑƒÑŽÑ‚ÑŒ Ñ–Ð½ÑˆÐ¸Ð¼]"
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15199
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�3 EABI]"
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15203
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�4 EABI]"
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15207
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�5 EABI]"
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15210
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [ABI Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸]"
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15213
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [ABI Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸]"
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15219
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15222
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15228
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ� EABI>"
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15235
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»]"
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15241
 #, c-format
 msgid " [FDPIC ABI supplement]"
 msgstr " [Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� ABI FDPIC]"
 
-#: elf32-arm.c:15000
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7040
+#: elf32-arm.c:15246 elfnn-aarch64.c:7555
 #, c-format
-msgid "<Unrecognised flag bits set>"
-msgstr "<Ð�ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ð½Ð°Ð±Ñ–Ñ€ Ð±Ñ–Ñ‚Ñ–Ð² Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð²>"
+msgid " <Unrecognised flag bits set>"
+msgstr " <Ð�ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ð½Ð°Ð±Ñ–Ñ€ Ð±Ñ–Ñ‚Ñ–Ð² Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð²>"
 
-#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783
-#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882
-#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7329
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:539
+#: elf32-arm.c:15363 elf32-arm.c:15497 elf32-i386.c:1535 elf32-s390.c:923
+#: elf32-tic6x.c:2724 elf32-tilepro.c:1435 elf32-xtensa.c:1090 elf64-s390.c:845
+#: elf64-x86-64.c:2050 elfxx-sparc.c:1386 elfxx-tilegx.c:1662 elfxx-x86.c:970
+#: elfnn-aarch64.c:7826 elfnn-kvx.c:3250 elfnn-loongarch.c:756
+#: elfnn-riscv.c:764
 #, c-format
 msgid "%pB: bad symbol index: %d"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: %d"
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15753
 #, c-format
 msgid "FDPIC does not yet support %s relocation to become dynamic for executable"
 msgstr "Ð£ FDPIC Ñ‰Ðµ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð´Ð»Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð²"
 
-#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998
-#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858
-#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252
-#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435
-#: elfxx-tilegx.c:2491 elfxx-x86.c:571
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:8677
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:1142
-#, c-format
-msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
-msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�\n"
-
-#: elf32-arm.c:16854
+#: elf32-arm.c:17027
 #, c-format
 msgid "errors encountered processing file %pB"
 msgstr "Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ„Ð°Ð¹Ð»Ð° Ñ�Ñ‚Ð°Ð»Ð¸Ñ�Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, %pB"
 
-#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603
+#: elf32-arm.c:17400 elflink.c:13325 elflink.c:13372
 #, c-format
 msgid "could not find section %s"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s"
 
-#: elf32-arm.c:18512
+#: elf32-arm.c:18355
+#, c-format
+msgid "%pB: Number of symbols in input file has increased from %lu to %u\n"
+msgstr "%pB: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð¾ Ð· %lu Ð´Ð¾ %u\n"
+
+#: elf32-arm.c:18619
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Cortex-A8 Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð¾ Ð·Ð° Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ"
 
 #. There's not much we can do apart from complain if this
 #. happens.
-#: elf32-arm.c:18539
+#: elf32-arm.c:18646
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Cortex-A8 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)"
 
-#: elf32-arm.c:19366 elf32-arm.c:19388
+#: elf32-arm.c:19473 elf32-arm.c:19495
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÐ° VFP11 Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼"
 
-#: elf32-arm.c:19439
+#: elf32-arm.c:19546
 #, c-format
 msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range by %<PRId64> bytes; cannot encode branch instruction"
 msgstr "%pB(%#<PRIx64>): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX. ÐŸÐµÑ€ÐµÑ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ Ð½Ð° %<PRId64> Ð±Ð°Ð¹Ñ‚Ñ–Ð². ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ."
 
-#: elf32-arm.c:19478
+#: elf32-arm.c:19585
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX"
 
-#: elf32-arm.c:20567
+#: elf32-arm.c:20668
 #, c-format
 msgid "error: %pB is already in final BE8 format"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñƒ Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– BE8"
 
-#: elf32-arm.c:20643
+#: elf32-arm.c:20745
 #, c-format
 msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±â€™Ñ”ÐºÑ‚-Ð´Ð¶ÐµÑ€ÐµÐ»Ð¾, %pB, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÑ€Ñ�Ñ–ÑŽ EABI %d, Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�, %pB, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÑ€Ñ�Ñ–ÑŽ EABI %d"
 
-#: elf32-arm.c:20658
+#: elf32-arm.c:20760
 #, c-format
 msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� APCS-%d, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” APCS-%d"
 
-#: elf32-arm.c:20668
+#: elf32-arm.c:20770
 #, c-format
 msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ‡Ð¸Ñ�Ð»Ð° Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð° %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ—Ñ… Ñƒ Ñ†Ñ–Ð»Ð¾Ñ‡Ð¸Ñ�ÐµÐ»ÑŒÐ½Ñ– Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸"
 
-#: elf32-arm.c:20672
+#: elf32-arm.c:20774
 #, c-format
 msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ†Ñ–Ð»Ñ– Ñ‡Ð¸Ñ�Ð»Ð° Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð° %pB Ð¿ÐµÑ€ÐµÐ´Ð°Ñ” Ñ—Ñ… Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ"
 
-#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696
+#: elf32-arm.c:20784 elf32-arm.c:20788 elf32-arm.c:20798
 #, c-format
 msgid "error: %pB uses %s instructions, whereas %pB does not"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, Ð° Ñƒ %pB â€” Ð½Ñ–"
 
-#: elf32-arm.c:20700
+#: elf32-arm.c:20802
 #, c-format
 msgid "error: %pB does not use %s instructions, whereas %pB does"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, Ð° Ñƒ %pB â€” Ñ‚Ð°Ðº"
 
-#: elf32-arm.c:20719
+#: elf32-arm.c:20821
 #, c-format
 msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ñ– FP, Ð° Ñƒ %pB â€” Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ– FP"
 
-#: elf32-arm.c:20723
+#: elf32-arm.c:20825
 #, c-format
 msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ– FP, Ð° Ñƒ %pB â€” Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ñ– FP"
 
-#: elf32-arm.c:20737
+#: elf32-arm.c:20839
 #, c-format
 msgid "warning: %pB supports interworking, whereas %pB does not"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ, Ð° Ñƒ %pB Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-arm.c:20743
+#: elf32-arm.c:20845
 #, c-format
 msgid "warning: %pB does not support interworking, whereas %pB does"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸, Ð° Ñƒ %pB Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577
-#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493
-#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998
-#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767
-#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689
-#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878
-msgid "internal error: dangerous relocation"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
+#: elf32-avr.c:1508
+msgid "%X%H: %s against `%s': error: relocation applies outside section\n"
+msgstr "%X%H: %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð¿Ð¾Ð·Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼\n"
+
+#: elf32-avr.c:1516
+msgid "%X%H: %s against `%s': error: relocation target address is odd\n"
+msgstr "%X%H: %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð°Ð´Ñ€ÐµÑ�Ð° Ñ†Ñ–Ð»Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ” Ð½ÐµÐ¿Ð°Ñ€Ð½Ð¾ÑŽ\n"
+
+#: elf32-avr.c:1524
+msgid "%X%H: %s against `%s': internal error: unexpected relocation result %d\n"
+msgstr "%X%H: %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� %d\n"
 
-#: elf32-avr.c:3327
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126
+#: elf32-avr.c:3340 elfnn-aarch64.c:3234
 #, c-format
 msgid "cannot create stub entry %s"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %s"
 
-#: elf32-bfin.c:106 elf32-bfin.c:362
+#: elf32-bfin.c:107 elf32-bfin.c:364
 msgid "relocation should be even number"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð¿Ð°Ñ€Ð½Ð¸Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼"
 
-#: elf32-bfin.c:1585
+#: elf32-bfin.c:1589
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269
-#: elf64-s390.c:3219 elf64-x86-64.c:3896
+#: elf32-bfin.c:1621 elf32-i386.c:3534 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3118 elf64-x86-64.c:4424
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %d"
 
-#: elf32-bfin.c:2638
+#: elf32-bfin.c:2647
 #, c-format
 msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero addend"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Â«%pA+%#<PRIx64>Â» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
 
-#: elf32-bfin.c:2655
+#: elf32-bfin.c:2664
 msgid "relocation references symbol not defined in the module"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ–"
 
-#: elf32-bfin.c:2752
+#: elf32-bfin.c:2762
 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
 
-#: elf32-bfin.c:2793 elf32-bfin.c:2916
+#: elf32-bfin.c:2802 elf32-bfin.c:2923
 msgid "cannot emit fixups in read-only section"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ñƒ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÑƒ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511
+#: elf32-bfin.c:2832 elf32-bfin.c:2960 elf32-lm32.c:1007 elf32-sh.c:4385
 msgid "cannot emit dynamic relocations in read-only section"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-bfin.c:2874
+#: elf32-bfin.c:2882
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC_VALUE Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
 
-#: elf32-bfin.c:3039
+#: elf32-bfin.c:3045
 msgid "relocations between different segments are not supported"
 msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-bfin.c:3040
+#: elf32-bfin.c:3046
 msgid "warning: relocation references a different segment"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚"
 
-#: elf32-bfin.c:4787 elf32-frv.c:6603
+#: elf32-bfin.c:3141 elf32-cris.c:2042 elf32-epiphany.c:574 elf32-fr30.c:602
+#: elf32-frv.c:4057 elf32-ft32.c:500 elf32-ip2k.c:1489 elf32-iq2000.c:699
+#: elf32-m32c.c:632 elf32-mep.c:530 elf32-metag.c:1992 elf32-moxie.c:296
+#: elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1905 elf32-tilepro.c:3380
+#: elf32-v850.c:2302 elf32-visium.c:688 elf32-xstormy16.c:938 elf64-bpf.c:348
+#: elf64-mmix.c:1549 elfxx-tilegx.c:3750
+msgid "internal error: dangerous relocation"
+msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
+
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-bfin.c:4728 elf32-cris.c:3862 elf32-m68hc1x.c:1415 elf32-m68k.c:1265
+#: elf32-score.c:3987 elf32-score7.c:3794 elf32-vax.c:536 elf32-xgate.c:494
+#: elfxx-mips.c:16378
+#, c-format
+msgid "private flags = %lx:"
+msgstr "Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lx:"
+
+#: elf32-bfin.c:4779 elf32-frv.c:6585
 #, c-format
 msgid "%pB: cannot link non-fdpic object file into fdpic executable"
 msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» Ð½Ðµ-fdpic Ð´Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° fdpic"
 
-#: elf32-bfin.c:4791 elf32-frv.c:6607
+#: elf32-bfin.c:4783 elf32-frv.c:6589
 #, c-format
 msgid "%pB: cannot link fdpic object file into non-fdpic executable"
 msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» fdpic Ð´Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ-fdpic"
 
-#: elf32-bfin.c:4941
+#: elf32-bfin.c:4920
 #, c-format
 msgid "*** check this relocation %s"
 msgstr "*** Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ñ‚Ðµ Ñ†Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %s"
 
-#: elf32-bfin.c:5057
+#: elf32-bfin.c:5035
 msgid "the bfin target does not currently support the generation of copy relocations"
 msgstr "Ñƒ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ–Ð¹ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ†Ñ–Ð»Ñ– bfin Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390
+#: elf32-bfin.c:5329 elf32-cr16.c:2720 elf32-m68k.c:4420
 msgid "unsupported relocation type"
 msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-cris.c:1119
+#: elf32-cris.c:1120
 #, c-format
 msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-cris.c:1184
+#: elf32-cris.c:1185
 #, c-format
 msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½ÐµÐ¼Ð°Ñ” Ð½Ñ– PLT, Ð½Ñ– GOT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-cris.c:1187
+#: elf32-cris.c:1188
 #, c-format
 msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½ÐµÐ¼Ð°Ñ” PLT Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674
-#: elf32-cris.c:1827 elf32-tic6x.c:2619
+#: elf32-cris.c:1194 elf32-cris.c:1327 elf32-cris.c:1592 elf32-cris.c:1675
+#: elf32-cris.c:1828 elf32-tic6x.c:2560
 msgid "[whose name is lost]"
 msgstr "[Ñ‡Ð¸ÑŽ Ð½Ð°Ð·Ð²Ñƒ Ð²Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð¾]"
 
-#: elf32-cris.c:1311 elf32-tic6x.c:2603
+#: elf32-cris.c:1312 elf32-tic6x.c:2544
 #, c-format
 msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against local symbol"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼, %<PRId64>, Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612
+#: elf32-cris.c:1321 elf32-cris.c:1669 elf32-cris.c:1822 elf32-tic6x.c:2553
 #, c-format
 msgid "%pB, section %pA: relocation %s with non-zero addend %<PRId64> against symbol `%s'"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼, %<PRId64>, Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-cris.c:1347
+#: elf32-cris.c:1348
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: Â«%sÂ»"
 
-#: elf32-cris.c:1364
+#: elf32-cris.c:1365
 #, c-format
 msgid "%pB, section %pA: relocation %s with no GOT created"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð±ÐµÐ· Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð³Ð¾ GOT"
 
 #. We shouldn't get here for GCC-emitted code.
-#: elf32-cris.c:1581
+#: elf32-cris.c:1582
 #, c-format
 msgid "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– %s Ñ” Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Â«%sÂ», Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ð°Ð´Ñ€ÐµÑ�Ð½Ð° Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ° Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ�?"
 
-#: elf32-cris.c:1584
+#: elf32-cris.c:1585
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ–Ð· Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾ÑŽ Ð²Ð¸Ð´Ð¸Ð¼Ñ–Ñ�Ñ‚ÑŽ. ÐœÐ¾Ð¶Ð»Ð¸Ð²Ð¾, Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ–?"
 
-#: elf32-cris.c:1955
+#: elf32-cris.c:1956
 #, c-format
 msgid "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ð¾Ð·Ð° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¾ÑŽ. ÐœÐ¾Ð¶Ð»Ð¸Ð²Ð¾, Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ–?"
 
-#: elf32-cris.c:2008
+#: elf32-cris.c:2009
 msgid "(too many global variables for -fpic: recompile with -fPIC)"
 msgstr "(Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ… Ð´Ð»Ñ� -fpic: Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIC)"
 
-#: elf32-cris.c:2015
+#: elf32-cris.c:2016
 msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)"
 msgstr "(Ð´Ð°Ð½Ñ– Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼Ð¸ Ð´Ð»Ñ� -fpic Ð°Ð±Ð¾ -msmall-tls: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC Ð°Ð±Ð¾ -mno-small-tls)"
 
-#: elf32-cris.c:3050
+#: elf32-cris.c:3051
 #, c-format
 msgid "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¾Ð±â€™Ñ”ÐºÑ‚ Ð²ÐµÑ€Ñ�Ñ–Ñ— 10/32 Ð½Ðµ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� PIC"
 
-#: elf32-cris.c:3104
+#: elf32-cris.c:3105
 #, c-format
 msgid ""
 "%pB, section %pA:\n"
@@ -2106,78 +2403,103 @@ msgstr ""
 "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA:\n"
 "  Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ñ” ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–; Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾ÑŽ Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¾ÑŽ Ñ” ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð², Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ñ–Ð»ÑŽÐ¹Ñ‚Ðµ Ð· -fPIC"
 
-#: elf32-cris.c:3322
+#: elf32-cris.c:3323
 #, c-format
 msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC"
 msgstr ""
 "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA:\n"
 "  Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ñ�Ð»Ñ–Ð´ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ñ–Ð»ÑŽÐ¹Ñ‚Ðµ Ð· -fPIC"
 
-#: elf32-cris.c:3747
+#: elf32-cris.c:3701
 #, c-format
 msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC"
 msgstr "%pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ñ�Ð»Ñ–Ð´ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ñ–Ð»ÑŽÐ¹Ñ‚Ðµ Ð· -fPIC"
 
-#: elf32-cris.c:3860
+#: elf32-cris.c:3813
 msgid "unexpected machine number"
 msgstr "Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ð¼Ð°ÑˆÐ¸Ð½Ð¸"
 
-#: elf32-cris.c:3911
+#: elf32-cris.c:3865
 #, c-format
 msgid " [symbols have a _ prefix]"
 msgstr " [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ� _]"
 
-#: elf32-cris.c:3914
+#: elf32-cris.c:3868
 #, c-format
 msgid " [v10 and v32]"
 msgstr " [v10 Ñ‚Ð° v32]"
 
-#: elf32-cris.c:3917
+#: elf32-cris.c:3871
 #, c-format
 msgid " [v32]"
 msgstr " [v32]"
 
-#: elf32-cris.c:3961
+#: elf32-cris.c:3915
 #, c-format
 msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð¾Ð¼ Â«_Â», Ð°Ð»Ðµ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ð¿Ð¸Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ñ–Ð²"
 
-#: elf32-cris.c:3962
+#: elf32-cris.c:3916
 #, c-format
 msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð° Â«_Â», Ð°Ð»Ðµ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ð¿Ð¸Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ð¼Ð¸ Ð· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð°Ð¼Ð¸ Â«_Â»"
 
-#: elf32-cris.c:3981
+#: elf32-cris.c:3935
 #, c-format
 msgid "%pB contains CRIS v32 code, incompatible with previous objects"
 msgstr "Ñƒ %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´ v32 CRIS, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸"
 
-#: elf32-cris.c:3983
+#: elf32-cris.c:3937
 #, c-format
 msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
 msgstr "Ñƒ %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ñ” ÐºÐ¾Ð´Ð¾Ð¼ v32 CRIS, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°Ð¼Ð¸"
 
-#: elf32-csky.c:2066
+#: elf32-csky.c:2018
 msgid "GOT table size out of range"
 msgstr "Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– GOT Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ"
 
-#: elf32-csky.c:2917
+#: elf32-csky.c:2830
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ e-Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸, Â«%#lxÂ»"
 
-#: elf32-csky.c:2977
+#: elf32-csky.c:2853
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð½Ð°Ð·Ð²Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Â«%#xÂ»"
+
+#: elf32-csky.c:2918 elf32-csky.c:3078
 #, c-format
 msgid "%pB: machine flag conflict with target"
 msgstr "%pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ–Ð· Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼"
 
-#: elf32-csky.c:2990
+#: elf32-csky.c:2931
 #, c-format
-msgid "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s"
-msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ„Ð°Ð¹Ð»Ð° %pB ck%s ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†ÐµÐ¼ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� ck%s, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ ck%s"
+msgid "warning: file %pB's arch flag %s conflict with target %s,set target arch flag to %s"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ„Ð°Ð¹Ð»Ð° %pB %s ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ %s, Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ñ–Ñ‚ÑŒ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñƒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %s"
+
+#: elf32-csky.c:2960
+#, c-format
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð²ÐµÑ€Ñ�Ñ–Ñ— VDSP %pB Ñ– %pB Ñ” Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸"
+
+#: elf32-csky.c:2977
+#, c-format
+msgid "Error: %pB and %pB has different DSP version"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð²ÐµÑ€Ñ�Ñ–Ñ— DSP %pB Ñ– %pB Ñ” Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸"
+
+#: elf32-csky.c:2995
+#, c-format
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ñ– %pB Ð¼Ð°ÑŽÑ‚ÑŒ Ñ€Ñ–Ð·Ð½Ñ– Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ñ– Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ�Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°-Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ñ‡Ð¸Ñ�ÐµÐ» Ñ–Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ"
+
+#: elf32-csky.c:3092
+#, c-format
+msgid "warning: file %pB's arch flag %s conflicts with target ck%s, using %s"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ„Ð°Ð¹Ð»Ð° %pB %s ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†ÐµÐ¼ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� ck%s, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ %s"
 
 #. The r_type is error, not support it.
-#: elf32-csky.c:4225 elf32-i386.c:351
+#: elf32-csky.c:4331 elf32-i386.c:344
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x"
@@ -2193,80 +2515,80 @@ msgid "jump (PC rel26) to section (%s) n
 msgstr "Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ (PC rel26) Ð´Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%s)"
 
 #. Only if it's not an unresolved symbol.
-#: elf32-epiphany.c:573 elf32-ip2k.c:1489
+#: elf32-epiphany.c:570 elf32-ip2k.c:1485
 msgid "unsupported relocation between data/insn address spaces"
 msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ñ–Ð¶ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð°Ð¼Ð¸ Ð°Ð´Ñ€ÐµÑ� data Ñ‚Ð° insn"
 
-#: elf32-frv.c:1452 elf32-frv.c:1603
+#: elf32-frv.c:1453 elf32-frv.c:1604
 msgid "relocation requires zero addend"
 msgstr "Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº"
 
-#: elf32-frv.c:2829
+#: elf32-frv.c:2833
 #, c-format
 msgid "%H: relocation to `%s+%v' may have caused the error above\n"
 msgstr "%H: Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ� Ð¿Ñ€Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ, Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ðµ Ð²Ð¸Ñ‰Ðµ, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ñ�Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ÐµÐ½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼ Ð´Ð¾ Â«%s+%vÂ»\n"
 
-#: elf32-frv.c:2846
+#: elf32-frv.c:2850
 msgid "%H: relocation references symbol not defined in the module\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ–\n"
 
-#: elf32-frv.c:2922
+#: elf32-frv.c:2926
 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
 msgstr "%H: R_FRV_GETTLSOFF Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ (call)\n"
 
-#: elf32-frv.c:2963
+#: elf32-frv.c:2967
 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESC12 Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ lddi\n"
 
-#: elf32-frv.c:3034
+#: elf32-frv.c:3038
 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESCHI Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ sethi\n"
 
-#: elf32-frv.c:3071
+#: elf32-frv.c:3075
 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: R_FRV_GOTTLSDESCLO Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ setlo Ð°Ð±Ð¾ setlos\n"
 
-#: elf32-frv.c:3118
+#: elf32-frv.c:3122
 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
 msgstr "%H: R_FRV_TLSDESC_RELAX Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ldd\n"
 
-#: elf32-frv.c:3202
+#: elf32-frv.c:3206
 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
 msgstr "%H: R_FRV_GETTLSOFF_RELAX Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ calll\n"
 
-#: elf32-frv.c:3256
+#: elf32-frv.c:3260
 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFF12 Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ldi\n"
 
-#: elf32-frv.c:3286
+#: elf32-frv.c:3290
 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFFHI Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ sethi\n"
 
-#: elf32-frv.c:3315
+#: elf32-frv.c:3319
 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "%H: R_FRV_GOTTLSOFFLO Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ setlo Ð°Ð±Ð¾ setlos\n"
 
-#: elf32-frv.c:3345
+#: elf32-frv.c:3349
 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
 msgstr "%H: R_FRV_TLSOFF_RELAX Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ld\n"
 
-#: elf32-frv.c:3390
+#: elf32-frv.c:3394
 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
 msgstr "%H: R_FRV_TLSMOFFHI Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ sethi\n"
 
-#: elf32-frv.c:3417
+#: elf32-frv.c:3421
 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
 msgstr "R_FRV_TLSMOFFLO Ñ” Ð½ÐµÐ·Ð°Ñ�Ñ‚Ð¾Ñ�Ð¾Ð²Ð½Ð¸Ð¼ Ð´Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ setlo Ð°Ð±Ð¾ setlos\n"
 
-#: elf32-frv.c:3538 elf32-frv.c:3660
+#: elf32-frv.c:3542 elf32-frv.c:3662
 msgid "%H: %s references dynamic symbol with nonzero addend\n"
 msgstr "%H: %s Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼\n"
 
-#: elf32-frv.c:3580 elf32-frv.c:3703
+#: elf32-frv.c:3583 elf32-frv.c:3704
 msgid "%H: cannot emit fixups in read-only section\n"
 msgstr "%H: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ñƒ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÑƒ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�\n"
 
-#: elf32-frv.c:3611 elf32-frv.c:3746
+#: elf32-frv.c:3613 elf32-frv.c:3746
 msgid "%H: cannot emit dynamic relocations in read-only section\n"
 msgstr "%H: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�\n"
 
@@ -2280,17 +2602,17 @@ msgstr "%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð
 msgid "%H: reloc against `%s': %s\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: %s\n"
 
-#: elf32-frv.c:6514
+#: elf32-frv.c:6496
 #, c-format
 msgid "%pB: compiled with %s and linked with modules that use non-pic relocations"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· %s Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñƒ Ñ�ÐºÐ¸Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic"
 
-#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876
+#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
 #, c-format
 msgid "%pB: compiled with %s and linked with modules compiled with %s"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· %s Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ð· %s"
 
-#: elf32-frv.c:6581
+#: elf32-frv.c:6563
 #, c-format
 msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½ÑˆÑ– Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ– Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð½Ñ–Ð¶ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)"
@@ -2300,275 +2622,289 @@ msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚Ñ
 msgid "%pB: relocations in generic ELF (EM: %d)"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð¼Ñƒ ELF (EM: %d)"
 
-#: elf32-hppa.c:834 elf32-hppa.c:3511
+#: elf32-hppa.c:863 elf32-hppa.c:3403
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s, Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -ffunction-sections"
 
-#: elf32-hppa.c:1248
+#: elf32-hppa.c:1241
 #, c-format
 msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC"
 
-#: elf32-hppa.c:2688
+#: elf32-hppa.c:2580
 #, c-format
 msgid "%pB: duplicate export stub %s"
 msgstr "%pB: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
 
-#: elf32-hppa.c:3344
+#: elf32-hppa.c:3236
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s fixup for insn %#x is not supported in a non-shared link"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ñ— Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ %s Ð´Ð»Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %#x Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ– Ð½ÐµÑ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-hppa.c:4140
+#: elf32-hppa.c:4032
 #, c-format
 msgid "%s has both normal and TLS relocs"
 msgstr "%s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS"
 
-#: elf32-hppa.c:4158
+#: elf32-hppa.c:4050
 #, c-format
 msgid "%pB:%s has both normal and TLS relocs"
 msgstr "%pB:%s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS"
 
-#: elf32-hppa.c:4217
+#: elf32-hppa.c:4109
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ� %s"
 
-#: elf32-hppa.c:4521
+#: elf32-hppa.c:4415
 msgid ".got section not immediately after .plt section"
 msgstr "Ð Ð¾Ð·Ð´Ñ–Ð» .got Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ .plt"
 
-#: elf32-i386.c:1178 elf64-x86-64.c:1377
+#: elf32-i386.c:1177 elf64-x86-64.c:1506
 #, c-format
 msgid "%pB: TLS transition from %s to %s against `%s' at %#<PRIx64> in section `%pA' failed"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� TLS Ð· %s Ð´Ð¾ %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ñƒ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð·Ð°Ð·Ð½Ð°Ð»Ð¾ Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–"
 
-#: elf32-i386.c:1269
+#: elf32-i386.c:1286
 #, c-format
 msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object"
 msgstr "%pB: Ð±ÐµÐ·Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´Ð½Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOT R_386_GOT32X Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð±ÐµÐ· Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð° Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592
-#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591
-#: elfxx-tilegx.c:1805
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:451
+#: elf32-i386.c:1719 elf32-s390.c:1151 elf32-sh.c:5499 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1263 elf64-s390.c:1083 elfxx-sparc.c:1556 elfxx-tilegx.c:1767
+#: elfnn-loongarch.c:612 elfnn-riscv.c:671
 #, c-format
 msgid "%pB: `%s' accessed both as normal and thread local symbol"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ñ‚Ð°Ðº Ñ– Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:1798
+#: elf32-i386.c:1791
 #, c-format
 msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
 msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð²Ð¸ÐºÐ»Ð¸Ðº Ð±ÐµÐ· PIC IFUNC Â«%sÂ»"
 
-#: elf32-i386.c:2379 elf64-x86-64.c:2670
+#: elf32-i386.c:1846 elf64-x86-64.c:2436
+#, c-format
+msgid "%pB: non-canonical reference to canonical protected function `%s' in %pB"
+msgstr "%pB: Ð½ÐµÐºÐ°Ð½Ð¾Ð½Ñ–Ñ‡Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° ÐºÐ°Ð½Ð¾Ð½Ñ–Ñ‡Ð½Ñƒ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Â«%sÂ» Ñƒ %pB"
+
+#: elf32-i386.c:2410 elf64-x86-64.c:2900 elfnn-riscv.c:2455
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported"
 msgstr "%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ STT_GNU_IFUNC Â«%sÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727
-#: elf64-x86-64.c:4069 elf64-x86-64.c:4225
+#: elf32-i386.c:2443 elf32-i386.c:3745 elf32-i386.c:3893 elf64-x86-64.c:2957
+#: elf64-x86-64.c:4597 elf64-x86-64.c:4765 elfnn-riscv.c:2328
+#: elfnn-riscv.c:3184 elfnn-riscv.c:3258
 #, c-format
 msgid "Local IFUNC function `%s' in %pB\n"
 msgstr "Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� IFUNC Â«%sÂ» Ñƒ %pB\n"
 
-#: elf32-i386.c:2569
+#: elf32-i386.c:2621
 #, c-format
 msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object"
 msgstr "%pB: Ð±ÐµÐ·Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´Ð½Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð±ÐµÐ· Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð° Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-i386.c:2604 elf64-x86-64.c:2919
+#: elf32-i386.c:2656 elf64-x86-64.c:3174
 msgid "hidden symbol"
 msgstr "Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2659 elf64-x86-64.c:3177
 msgid "internal symbol"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2662 elf64-x86-64.c:3180
 msgid "protected symbol"
 msgstr "Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2665 elf64-x86-64.c:3183
 msgid "symbol"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:2619
+#: elf32-i386.c:2671
 #, c-format
 msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_386_GOTOFF Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ %s, Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-i386.c:2632
+#: elf32-i386.c:2684
 #, c-format
 msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object"
 msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ R_386_GOTOFF Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— %s Â«%sÂ» Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935
+#: elf32-i386.c:4096 elf64-x86-64.c:4976
+msgid "%F%P: discarded output section: `%pA'\n"
+msgstr "%F%P: Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…: Â«%pAÂ»\n"
+
+#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934
 msgid "ip2k relaxer: switch table without complete matching relocation information."
 msgstr "ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ ip2k: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½ÑŒ Ð±ÐµÐ· Ð¿Ð¾Ð²Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ñ�Ñ‚Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ."
 
-#: elf32-ip2k.c:879 elf32-ip2k.c:962
+#: elf32-ip2k.c:878 elf32-ip2k.c:961
 msgid "ip2k relaxer: switch table header corrupt."
 msgstr "ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ ip2k: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½ÑŒ"
 
-#: elf32-ip2k.c:1302
+#: elf32-ip2k.c:1298
 #, c-format
 msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº ip2k: Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ñ‰Ð¾Ð´Ð¾ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ Ñƒ %#<PRIx64> (Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� = %#<PRIx64>)."
 
-#: elf32-ip2k.c:1321
+#: elf32-ip2k.c:1317
 #, c-format
 msgid "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº ip2k: Ð·Ð°Ð¹Ð²Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� Ñ‰Ð¾Ð´Ð¾ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ Ñƒ %#<PRIx64> (Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� = %#<PRIx64>)."
 
-#: elf32-lm32.c:651 elf32-nios2.c:3141
+#: elf32-lm32.c:609 elf32-nios2.c:3145
 msgid "global pointer relative relocation when _gp not defined"
 msgstr "Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð±ÐµÐ· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� _gp"
 
-#: elf32-lm32.c:706 elf32-nios2.c:3578
+#: elf32-lm32.c:664 elf32-nios2.c:3582
 msgid "global pointer relative address out of range"
 msgstr "Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ"
 
-#: elf32-lm32.c:1002
+#: elf32-lm32.c:960
 #, c-format
 msgid "internal error: addend should be zero for %s"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð»Ñ� %s"
 
-#: elf32-m32r.c:1471
+#: elf32-m32r.c:1461
 msgid "SDA relocation when _SDA_BASE_ not defined"
 msgstr "Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� SDA Ð±ÐµÐ· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� _SDA_BASE_"
 
-#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149
+#: elf32-m32r.c:2776 elf32-microblaze.c:1152 elf32-microblaze.c:1200
 #, c-format
 msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)"
 msgstr "%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� (%s) Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– (%pA)"
 
-#: elf32-m32r.c:3487
+#: elf32-m32r.c:3279
 #, c-format
 msgid "%pB: instruction set mismatch with previous modules"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð½Ð°Ð±Ð¾Ñ€Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ñ†ÑŒÐ¾Ð³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ ÐºÐ¾Ð¼Ð°Ð½Ð´ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²"
 
-#: elf32-m32r.c:3508 elf32-nds32.c:6992
+#: elf32-m32r.c:3300 elf32-nds32.c:6900
 #, c-format
 msgid "private flags = %lx"
 msgstr "Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lx"
 
-#: elf32-m32r.c:3513
+#: elf32-m32r.c:3305
 #, c-format
 msgid ": m32r instructions"
 msgstr ": ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ m32r"
 
-#: elf32-m32r.c:3514
+#: elf32-m32r.c:3306
 #, c-format
 msgid ": m32rx instructions"
 msgstr ": ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ m32rx"
 
-#: elf32-m32r.c:3515
+#: elf32-m32r.c:3307
 #, c-format
 msgid ": m32r2 instructions"
 msgstr ": ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ m32r2"
 
-#: elf32-m68hc1x.c:1116
+#: elf32-m68hc1x.c:1135
 #, c-format
 msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
 msgstr "Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ñ‰Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº Ñƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ–."
 
-#: elf32-m68hc1x.c:1150
+#: elf32-m68hc1x.c:1166
 #, c-format
 msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code."
 msgstr "Ð�Ð´Ñ€ÐµÑ�Ð° XGATE (%lx) Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð° Ð¿Ð¾Ð·Ð° RAM Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� (0xE000-0xFFFF), Ñ‚Ð¾Ð¼Ñƒ Ð²Ð°Ð¼ Ñ�Ð»Ñ–Ð´ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñ–, Ð¹Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾, ÐºÐµÑ€ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¾ÑŽ Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ñƒ Ð²Ð°ÑˆÐ¾Ð¼Ñƒ ÐºÐ¾Ð´Ñ–."
 
-#: elf32-m68hc1x.c:1168
+#: elf32-m68hc1x.c:1182
 #, c-format
 msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)"
 msgstr "Ð·Ð°Ð½ÐµÑ�ÐµÐ½Ð° Ð´Ð¾ Ð±Ð°Ð½ÐºÑƒ Ð°Ð´Ñ€ÐµÑ�Ð° [%lx:%04lx] (%lx) Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ð±Ð°Ð½ÐºÑƒ Ð· Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ, Ð·Ð°Ð½ÐµÑ�ÐµÐ½Ð¾ÑŽ Ð´Ð¾ Ð±Ð°Ð½ÐºÑƒ, [%lx:%04lx] (%lx)"
 
-#: elf32-m68hc1x.c:1184
+#: elf32-m68hc1x.c:1197
 #, c-format
 msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx"
 msgstr "Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð·Ð°Ð½ÐµÑ�ÐµÐ½Ñƒ Ð´Ð¾ Ð±Ð°Ð½ÐºÑƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñ– Ð°Ð´Ñ€ÐµÑ�, %04lx"
 
-#: elf32-m68hc1x.c:1225
+#: elf32-m68hc1x.c:1233
 #, c-format
 msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code"
 msgstr "Ð�Ð´Ñ€ÐµÑ�Ð° S12 (%lx) Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð° Ð¿Ð¾Ð·Ð° RAM Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� (0x2000-x4000), Ñ‚Ð¾Ð¼Ñƒ Ð²Ð°Ð¼ Ñ�Ð»Ñ–Ð´ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ Ð²Ð°ÑˆÐ¾Ð¼Ñƒ ÐºÐ¾Ð´Ñ–"
 
-#: elf32-m68hc1x.c:1352
+#: elf32-m68hc1x.c:1357
 #, c-format
 msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ñ– Ñ„Ð°Ð¹Ð»Ð¸ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� 16-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ†Ñ–Ð»Ð¸Ñ… (-mshort), Ð° Ñ€ÐµÑˆÑ‚Ñƒ Ñ„Ð°Ð¹Ð»Ñ–Ð² â€” Ð´Ð»Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ†Ñ–Ð»Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ»"
 
-#: elf32-m68hc1x.c:1359
+#: elf32-m68hc1x.c:1364
 #, c-format
 msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ñ– Ñ„Ð°Ð¹Ð»Ð¸ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ (-fshort-double), Ð° Ñ–Ð½ÑˆÑ– â€” Ð´Ð»Ñ� 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ."
 
-#: elf32-m68hc1x.c:1368
+#: elf32-m68hc1x.c:1373
 #, c-format
 msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ñ– Ñ„Ð°Ð¹Ð»Ð¸ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� HCS12, Ñ–Ð½ÑˆÑ– Ð¶ â€” Ð´Ð»Ñ� HC12"
 
-#: elf32-m68hc1x.c:1413 elf32-xgate.c:497
+#: elf32-m68hc1x.c:1418 elf32-xgate.c:497
 #, c-format
 msgid "[abi=32-bit int, "
 msgstr "[abi=32-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ Ñ†Ñ–Ð»Ðµ, "
 
-#: elf32-m68hc1x.c:1415 elf32-xgate.c:499
+#: elf32-m68hc1x.c:1420 elf32-xgate.c:499
 #, c-format
 msgid "[abi=16-bit int, "
 msgstr "[abi=16-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ Ñ†Ñ–Ð»Ðµ, "
 
-#: elf32-m68hc1x.c:1418 elf32-xgate.c:502
+#: elf32-m68hc1x.c:1423 elf32-xgate.c:502
 #, c-format
 msgid "64-bit double, "
 msgstr "64-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ double, "
 
-#: elf32-m68hc1x.c:1420 elf32-xgate.c:504
+#: elf32-m68hc1x.c:1425 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "32-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ double, "
 
-#: elf32-m68hc1x.c:1423
+#: elf32-m68hc1x.c:1428
 #, c-format
 msgid "cpu=HC11]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]"
 
-#: elf32-m68hc1x.c:1425
+#: elf32-m68hc1x.c:1430
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]"
 
-#: elf32-m68hc1x.c:1427
+#: elf32-m68hc1x.c:1432
 #, c-format
 msgid "cpu=HC12]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]"
 
-#: elf32-m68hc1x.c:1430
+#: elf32-m68hc1x.c:1435
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ=Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð· Ð±Ð°Ð½ÐºÐ°Ð¼Ð¸]"
 
-#: elf32-m68hc1x.c:1432
+#: elf32-m68hc1x.c:1437
 #, c-format
 msgid " [memory=flat]"
 msgstr " [Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ=Ð¿Ð»Ð¾Ñ�ÐºÐ° Ð¼Ð¾Ð´ÐµÐ»ÑŒ]"
 
-#: elf32-m68hc1x.c:1435
+#: elf32-m68hc1x.c:1440
 #, c-format
 msgid " [XGATE RAM offsetting]"
 msgstr " [Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ RAM XGATE]"
 
-#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500
+#: elf32-m68k.c:1157 elf32-m68k.c:1165 elf32-ppc.c:3572 elf32-ppc.c:3580
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr "Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ», Ð° Ñƒ %pB â€” Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð°"
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:8085 vms-alpha.c:8101
 msgid "unknown"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾"
 
-#: elf32-m68k.c:1660
+#: elf32-m68k.c:1731
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� GOT: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð· 8-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ > %d"
 
-#: elf32-m68k.c:1667
+#: elf32-m68k.c:1738
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� GOT: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð· 8- Ð°Ð±Ð¾ 16-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ > %d"
@@ -2584,350 +2920,350 @@ msgstr "mep: Ð½ÐµÐ¼Ð°Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°
 msgid "MeP: howto %d has type %d"
 msgstr "MeP: howto %d Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ñ‚Ð¸Ð¿Ñƒ %d"
 
-#: elf32-mep.c:622
+#: elf32-mep.c:618
 #, c-format
 msgid "%pB and %pB are for different cores"
 msgstr "%pB Ñ– %pB Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ�Ð´ÐµÑ€"
 
-#: elf32-mep.c:641
+#: elf32-mep.c:637
 #, c-format
 msgid "%pB and %pB are for different configurations"
 msgstr "%pB Ñ– %pB Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ€Ñ–Ð·Ð½Ð¸Ñ… ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹"
 
-#: elf32-mep.c:679
+#: elf32-mep.c:675
 #, c-format
 msgid "private flags = 0x%lx"
 msgstr "Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = 0x%lx"
 
-#: elf32-metag.c:1863
+#: elf32-metag.c:1857
 #, c-format
 msgid "%pB(%pA): multiple TLS models are not supported"
 msgstr "%pB(%pA): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ¾Ñ… Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ TLS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-metag.c:1866
+#: elf32-metag.c:1860
 #, c-format
 msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link"
 msgstr "%pB(%pA): Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� %s"
 
-#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538
-#: elfxx-tilegx.c:3543
+#: elf32-microblaze.c:1595 elf32-tilepro.c:3021 elfxx-sparc.c:3446
+#: elfxx-tilegx.c:3415
 #, c-format
 msgid "%pB: probably compiled without -fPIC?"
 msgstr "%pB: Ð¹Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð±ÐµÐ· -fPIC?"
 
-#: elf32-mips.c:1775 elf64-mips.c:3516 elfn32-mips.c:3332
+#: elf32-mips.c:1776 elf64-mips.c:3515 elfn32-mips.c:3334
 msgid "literal relocation occurs for an external symbol"
 msgstr "Ð²Ñ–Ð´Ð±ÑƒÐ²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð±ÑƒÐºÐ²Ð°Ð»ÑŒÐ½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-mips.c:1822 elf32-score.c:569 elf32-score7.c:469 elf64-mips.c:3559
-#: elfn32-mips.c:3373
+#: elf32-mips.c:1827 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3558
+#: elfn32-mips.c:3376
 msgid "32bits gp relative relocation occurs for an external symbol"
 msgstr "Ð²Ñ–Ð´Ð±ÑƒÐ²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ gp-Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-msp430.c:837 elf32-msp430.c:1151
+#: elf32-msp430.c:914
+#, c-format
+msgid "error: final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� uleb128 Ð· Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ 0x%lx Ñƒ %pA Ð· %pB Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ"
+
+#: elf32-msp430.c:983 elf32-msp430.c:1297
 msgid "try enabling relaxation to avoid relocation truncations"
 msgstr "Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–ÑŽ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð´Ð»Ñ� ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ� Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ"
 
-#: elf32-msp430.c:1358
+#: elf32-msp430.c:1506
 msgid "internal error: branch/jump to an odd address detected"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð°Ð±Ð¾ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½ÐµÐ¿Ð°Ñ€Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elf32-msp430.c:2357
+#: elf32-msp430.c:2673
 #, c-format
 msgid "warning: %pB: unknown MSPABI object attribute %d"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° MSPABI %d"
 
-#: elf32-msp430.c:2456
+#: elf32-msp430.c:2774
 #, c-format
 msgid "error: %pB uses %s instructions but %pB uses %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s, Ð°Ð»Ðµ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s"
 
-#: elf32-msp430.c:2468
+#: elf32-msp430.c:2786
 #, c-format
 msgid "error: %pB uses the %s code model whereas %pB uses the %s code model"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ñƒ %s, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ñƒ %s"
 
-#: elf32-msp430.c:2480
+#: elf32-msp430.c:2799
 #, c-format
 msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð²ÐµÐ»Ð¸ÐºÐ¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ, Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— MSP430"
 
-#: elf32-msp430.c:2491
+#: elf32-msp430.c:2810
 #, c-format
 msgid "error: %pB uses the %s data model whereas %pB uses the %s data model"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s"
 
-#: elf32-msp430.c:2503
+#: elf32-msp430.c:2823
 #, c-format
 msgid "error: %pB uses the small code model but %pB uses the %s data model"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¼Ð°Ð»Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ, Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s"
 
-#: elf32-msp430.c:2515
+#: elf32-msp430.c:2835
 #, c-format
 msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s, Ð° Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð»Ð¸ÑˆÐµ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— MSP430"
 
-#: elf32-nds32.c:3624
+#: elf32-msp430.c:2860
 #, c-format
-msgid "error: can't find symbol: %s"
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %s"
+msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¼Ð¾Ð¶Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð²ÐµÑ€Ñ…Ð½ÑŽ Ð´Ñ–Ð»Ñ�Ð½ÐºÑƒ Ð´Ð°Ð½Ð¸Ñ…, Ð°Ð»Ðµ %pB Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ‚Ðµ, Ñ‰Ð¾ Ð´Ð°Ð½Ñ– Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð¾ Ð»Ð¸ÑˆÐµ Ñƒ Ð½Ð¸Ð¶Ð½Ñ–Ð¹ Ð´Ñ–Ð»Ñ�Ð½Ñ†Ñ– Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ–"
 
-#: elf32-nds32.c:5639
+#: elf32-nds32.c:3674
 #, c-format
-msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC"
-msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC"
+msgid "error: can't find symbol: %s"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %s"
 
-#: elf32-nds32.c:5669
+#: elf32-nds32.c:5573
 #, c-format
 msgid "%pB: warning: %s unsupported in shared mode"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-nds32.c:5795
+#: elf32-nds32.c:5699
 #, c-format
 msgid "%pB: warning: unaligned access to GOT entry"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GOT"
 
-#: elf32-nds32.c:5836
+#: elf32-nds32.c:5740
 #, c-format
 msgid "%pB: warning: relocate SDA_BASE failed"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� SDA_BASE"
 
-#: elf32-nds32.c:5858
+#: elf32-nds32.c:5762
 #, c-format
 msgid "%pB(%pA): warning: unaligned small data access of type %d"
 msgstr "%pB(%pA): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñƒ %d"
 
-#: elf32-nds32.c:6784
+#: elf32-nds32.c:6688
 #, c-format
 msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ð²ÐµÐºÑ‚Ð¾Ñ€Ñ–Ð² ISR Ñ–Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ– Ñ” %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸, Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ– Ñ” %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸"
 
-#: elf32-nds32.c:6828
+#: elf32-nds32.c:6736
 #, c-format
 msgid "%pB: warning: endian mismatch with previous modules"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ–Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: elf32-nds32.c:6842
+#: elf32-nds32.c:6750
 #, c-format
 msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ�Ñ‚Ð°Ñ€Ñ–ÑˆÑƒ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¸Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð²."
 
-#: elf32-nds32.c:6930
+#: elf32-nds32.c:6838
 #, c-format
 msgid "%pB: error: ABI mismatch with previous modules"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ABI Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: elf32-nds32.c:6940
+#: elf32-nds32.c:6848
 #, c-format
 msgid "%pB: error: instruction set mismatch with previous modules"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð½Ð°Ð±Ð¾Ñ€Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ñ†ÑŒÐ¾Ð³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ ÐºÐ¾Ð¼Ð°Ð½Ð´ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²"
 
-#: elf32-nds32.c:6967
+#: elf32-nds32.c:6875
 #, c-format
 msgid "%pB: warning: incompatible elf-versions %s and %s"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ð²ÐµÑ€Ñ�Ñ–Ñ— elf, %s Ñ‚Ð° %s"
 
-#: elf32-nds32.c:6998
+#: elf32-nds32.c:6906
 #, c-format
 msgid ": n1 instructions"
 msgstr ": Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— n1"
 
-#: elf32-nds32.c:7001
+#: elf32-nds32.c:6909
 #, c-format
 msgid ": n1h instructions"
 msgstr ": Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— n1h"
 
-#: elf32-nds32.c:9462
+#: elf32-nds32.c:9358
 #, c-format
 msgid "%pB: error: search_nds32_elf_blank reports wrong node"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: search_nds32_elf_blank Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»Ñ�Ñ” Ð¿Ñ€Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð²ÑƒÐ·Ð¾Ð»"
 
-#: elf32-nds32.c:9722
+#: elf32-nds32.c:9622
 #, c-format
 msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¾ %#<PRIx64>."
 
-#: elf32-nds32.c:12975
+#: elf32-nds32.c:12887
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr "%pB: Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ðµ OMIT_FP Ñƒ %pA."
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12906
 #, c-format
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr "%pB: OMIT_FP Ð±ÐµÐ· Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¸ÐºÐ° Ñƒ %pA."
 
-#: elf32-nds32.c:13275 reloc.c:8410
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
-msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ\n"
-
-#: elf32-nios2.c:2930
+#: elf32-nios2.c:2934
 #, c-format
 msgid "error: %pB: big-endian R2 is not supported"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² R2 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-nios2.c:3822
+#: elf32-nios2.c:2950
 #, c-format
-msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n"
-msgstr "Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ 0x%08x, Ð²Ñ‚Ñ–Ð¼, _gp Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾\n"
+msgid "error: %pB: conflicting CPU architectures %d/%d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð² %d/%d"
+
+#: elf32-nios2.c:3825
+#, c-format
+msgid "global pointer relative relocation at address %#<PRIx64> when _gp not defined\n"
+msgstr "Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64>, Ð²Ñ‚Ñ–Ð¼, _gp Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾\n"
 
-#: elf32-nios2.c:3842
+#: elf32-nios2.c:3852
 #, c-format
-msgid "unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767\n"
-msgstr "Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s (Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ 0x%08x) Ñ–Ð· Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° (Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ 0x%08x), Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� (%d) Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ, Ð²Ñ–Ð´ -32678 Ð´Ð¾ 32767.\n"
+msgid "unable to reach %s (at %#<PRIx64>) from the global pointer (at %#<PRIx64>) because the offset (%<PRId64>) is out of the allowed range, -32678 to 32767\n"
+msgstr "Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s (Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64>) Ñ–Ð· Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° (Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64>), Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� (%#<PRId64>) Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ, Ð²Ñ–Ð´ -32678 Ð´Ð¾ 32767.\n"
 
-#: elf32-nios2.c:4495 elf32-pru.c:928
+#: elf32-nios2.c:4506 elf32-pru.c:931
 msgid "relocation out of range"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ"
 
-#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716
+#: elf32-nios2.c:4516 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr "Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-nios2.c:5378
+#: elf32-nios2.c:5354
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð° Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð¼Ð°Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€"
 
-#: elf32-or1k.c:1177
+#: elf32-or1k.c:1258
 #, c-format
 msgid "%pB: Cannot handle relocation value size of %d"
 msgstr "%pB: Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ %d"
 
-#: elf32-or1k.c:1286
+#: elf32-or1k.c:1377
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d"
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1431
 #, c-format
 msgid "%pB: addend should be zero for plt relocations"
 msgstr "%pB: Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ plt Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼"
 
-#: elf32-or1k.c:1445
+#: elf32-or1k.c:1544
 #, c-format
 msgid "%pB: addend should be zero for got relocations"
 msgstr "%pB: Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ got Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼"
 
-#: elf32-or1k.c:1462
+#: elf32-or1k.c:1561
 #, c-format
 msgid "%pB: gotoff relocation against dynamic symbol %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� gotoff Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599
+#: elf32-or1k.c:1575 elf32-or1k.c:1590 elf64-alpha.c:4410 elf64-alpha.c:4554
 #, c-format
 msgid "%pB: pc-relative relocation against dynamic symbol %s"
 msgstr "%pB: pc-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf32-or1k.c:1493
+#: elf32-or1k.c:1604
 #, c-format
 msgid "%pB: non-pic relocation against symbol %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf32-or1k.c:1577
+#: elf32-or1k.c:1688
 #, c-format
 msgid "%pB: support for local dynamic not implemented"
 msgstr "%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ñ— Ð´Ð¸Ð½Ð°Ð¼Ñ–ÐºÐ¸ Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-#: elf32-or1k.c:1729
+#: elf32-or1k.c:1867
 #, c-format
 msgid "%pB: will not resolve runtime TLS relocation"
 msgstr "%pB: Ð½Ðµ Ð±ÑƒÐ´Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–"
 
-#: elf32-or1k.c:2074
+#: elf32-or1k.c:2201
 #, c-format
 msgid "%pB: bad relocation section name `%s'"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð½Ð°Ð·Ð²Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%sÂ»"
 
-#: elf32-or1k.c:3218
+#: elf32-or1k.c:3315
 #, c-format
 msgid "%pB: %s flag mismatch with previous modules"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ� %s Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼"
 
-#: elf32-ppc.c:986
+#: elf32-ppc.c:990 elf64-ppc.c:1753
 #, c-format
 msgid "generic linker can't handle %s"
 msgstr "Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ‚Ð¸ %s"
 
-#: elf32-ppc.c:1617
+#: elf32-ppc.c:1628
 #, c-format
 msgid "corrupt %s section in %pB"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñƒ %pB"
 
-#: elf32-ppc.c:1637
+#: elf32-ppc.c:1647
 #, c-format
 msgid "unable to read in %s section from %pB"
 msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ Ð· %pB"
 
-#: elf32-ppc.c:1679
+#: elf32-ppc.c:1689
 #, c-format
 msgid "warning: unable to set size of %s section in %pB"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %pB"
 
-#: elf32-ppc.c:1729
+#: elf32-ppc.c:1738
 msgid "failed to allocate space for new APUinfo section"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfo"
 
-#: elf32-ppc.c:1748
+#: elf32-ppc.c:1757
 msgid "failed to compute new APUinfo section"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ‡Ð¸Ñ�Ð»Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfo"
 
-#: elf32-ppc.c:1751
+#: elf32-ppc.c:1760
 msgid "failed to install new APUinfo section"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfo"
 
-#: elf32-ppc.c:2853
+#: elf32-ppc.c:2869
 #, c-format
 msgid "%pB: relocation %s cannot be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-ppc.c:3587 elf32-ppc.c:3595
-#, c-format
-msgid "%pB uses hard float, %pB uses soft float"
-msgstr "Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ», Ð° Ñƒ %pB â€” Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð°"
-
-#: elf32-ppc.c:3603 elf32-ppc.c:3611
+#: elf32-ppc.c:3588 elf32-ppc.c:3596
 #, c-format
 msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
 msgstr "Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ, Ð° Ñƒ %pB â€” Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° Ð´Ð»Ñ� Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ñ… Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ"
 
-#: elf32-ppc.c:3630 elf32-ppc.c:3638
+#: elf32-ppc.c:3618 elf32-ppc.c:3626
 #, c-format
 msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
 msgstr "Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð´Ð¾Ð²Ð³Ñ– Ñ†Ñ–Ð»Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ–Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ, Ð° Ñƒ %pB â€” 128-Ð±Ñ–Ñ‚Ð¾Ð²Ñ–"
 
-#: elf32-ppc.c:3646 elf32-ppc.c:3654
+#: elf32-ppc.c:3634 elf32-ppc.c:3642
 #, c-format
 msgid "%pB uses IBM long double, %pB uses IEEE long double"
 msgstr "Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð´Ð¾Ð²Ð³Ñ– Ñ†Ñ–Ð»Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ–Ð· Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾ÑŽ Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŽ IBM, Ð° Ñƒ %pB â€” IEEE"
 
-#: elf32-ppc.c:3721 elf32-ppc.c:3730
+#: elf32-ppc.c:3709 elf32-ppc.c:3718
 #, c-format
 msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
 msgstr "%pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð¸Ð¹ ABI AltiVec, %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð¸Ð¹ ABI SPE"
 
-#: elf32-ppc.c:3759 elf32-ppc.c:3768
+#: elf32-ppc.c:3747 elf32-ppc.c:3756
 #, c-format
 msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
 msgstr "Ñƒ %pB r3/r4 Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð´Ð»Ñ� Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ� Ð¼Ð°Ð»Ð¸Ñ… Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€, Ð° Ñƒ %pB Ð´Ð»Ñ� Ñ†ÑŒÐ¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ"
 
-#: elf32-ppc.c:3829
+#: elf32-ppc.c:3820
 #, c-format
 msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· -mrelocatable Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–"
 
-#: elf32-ppc.c:3837
+#: elf32-ppc.c:3828
 #, c-format
 msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ð· -mrelocatable"
 
-#: elf32-ppc.c:3906
+#: elf32-ppc.c:3899
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
 msgstr "%pB(%pA+0x%lx): Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð¸Ð»ÑŽ 16A Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— 0x%08x"
 
-#: elf32-ppc.c:3925
+#: elf32-ppc.c:3918
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
 msgstr "%pB(%pA+0x%lx): Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð¸Ð»ÑŽ 16D Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— 0x%08x"
@@ -2941,44 +3277,53 @@ msgstr "Ð¿Ñ€Ð¸Ð¼ÑƒÑ�Ð¾Ð²Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ
 msgid "bss-plt forced by profiling"
 msgstr "Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ð¿Ñ€Ð¸Ð¼ÑƒÑ�Ð¾Ð²Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ bss-plt"
 
+#: elf32-ppc.c:4608 elf64-ppc.c:8497
+msgid "%H: warning: %s unexpected insn %#x.\n"
+msgstr "%H: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s, Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#x.\n"
+
 #. Uh oh, we didn't find the expected call.  We
 #. could just mark this symbol to exclude it
 #. from tls optimization but it's safer to skip
 #. the entire optimization.
-#: elf32-ppc.c:4606 elf64-ppc.c:7724
+#: elf32-ppc.c:4638 elf64-ppc.c:8562
 #, c-format
 msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
 msgstr "%H: Ñƒ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” __tls_get_addr, Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–ÑŽ TLS Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾.\n"
 
-#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534
-#: elfxx-tilegx.c:2579
+#: elf32-ppc.c:5565 elf32-sh.c:3019 elf32-tilepro.c:2248 elfxx-sparc.c:2454
+#: elfxx-tilegx.c:2494
 #, c-format
 msgid "%pB: dynamic relocation in read-only section `%pA'\n"
 msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�\n"
 
-#: elf32-ppc.c:7457
+#: elf32-ppc.c:6511
+msgid "%pB: Adjusting branch at 0x%V towards \"%s\" in section %s\n"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ð³ÑƒÑ”Ð¼Ð¾ Ð³Ñ–Ð»ÐºÑƒ Ð½Ð° 0x%V Ð´Ð¾ Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s\n"
+
+#: elf32-ppc.c:7464
 msgid "%P: %H: error: %s with unexpected instruction %x\n"
 msgstr "%P: %H: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ñ–Ð· Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾ÑŽ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ %x\n"
 
-#: elf32-ppc.c:7494
+#: elf32-ppc.c:7502
 msgid "%H: fixup branch overflow\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ñ–Ð· Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾ÑŽ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¾ÑŽ\n"
 
-#: elf32-ppc.c:7534 elf32-ppc.c:7570
+#: elf32-ppc.c:7542 elf32-ppc.c:7580
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ñ–Ð· Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾ÑŽ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ %#x"
 
-#: elf32-ppc.c:7634
+#: elf32-ppc.c:7644
 #, c-format
 msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° bss-plt -fPIC ifunc %s\n"
 
-#: elf32-ppc.c:7673 elf64-ppc.c:15220
-msgid "%H: warning: %s unexpected insn %#x.\n"
-msgstr "%H: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s, Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#x.\n"
+#: elf32-ppc.c:7680
+#, c-format
+msgid "%pB: reloc %#x unsupported"
+msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x"
 
-#: elf32-ppc.c:7985
+#: elf32-ppc.c:7963
 #, c-format
 msgid "%H: non-zero addend on %s reloc against `%s'\n"
 msgstr "%H: Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ñ‚Ð¾Ðº Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»\n"
@@ -2991,110 +3336,117 @@ msgstr "%H: Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð
 #. local won't have the +32k reloc addend trick marking
 #. -fPIC code, so the linker won't know whether r30 is
 #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section.
-#: elf32-ppc.c:8017
+#: elf32-ppc.c:7995
 #, c-format
 msgid "%X%H: @local call to ifunc %s\n"
 msgstr "%X%H: Ð²Ð¸ÐºÐ»Ð¸Ðº @local ifunc %s\n"
 
-#: elf32-ppc.c:8187
+#: elf32-ppc.c:8173
 #, c-format
 msgid "%H: relocation %s for indirect function %s unsupported\n"
 msgstr "%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
 
-#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725
+#: elf32-ppc.c:8511 elf32-ppc.c:8542 elf32-ppc.c:8645 elf32-ppc.c:8745
 #, c-format
 msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)"
 msgstr "%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� (%s) Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� (%s)"
 
-#: elf32-ppc.c:8855 elf32-ppc.c:8873
-msgid "%P: %H: %s relocation unsupported for bss-plt\n"
-msgstr "%P: %H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� bss-plt Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
+#: elf32-ppc.c:8923 elf32-ppc.c:8944
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
+msgstr "%X%P: %H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð»Ñ� bss-plt Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
 
-#: elf32-ppc.c:8954
+#: elf32-ppc.c:9026
 #, c-format
 msgid "%H: error: %s against `%s' not a multiple of %u\n"
 msgstr "%H: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ð´Ð»Ñ� Â«%sÂ» Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %u\n"
 
-#: elf32-ppc.c:8983
+#: elf32-ppc.c:9055
 #, c-format
 msgid "%H: unresolvable %s relocation against symbol `%s'\n"
 msgstr "%H: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»\n"
 
-#: elf32-ppc.c:9064
+#: elf32-ppc.c:9137
 #, c-format
 msgid "%H: %s reloc against `%s': error %d\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %d\n"
 
-#: elf32-ppc.c:9959 elf64-ppc.c:15715
+#: elf32-ppc.c:10019
 msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
 msgstr "%X%P: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚ÐµÐºÑ�Ñ‚Ñƒ Ñ– Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ… Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ GNU Ð¿Ñ€Ð¸Ð·Ð²ÐµÐ´Ðµ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ— Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿ÑƒÑ�ÐºÑƒ\n"
 
-#: elf32-ppc.c:9963 elf64-ppc.c:15719
+#: elf32-ppc.c:10023 elf64-ppc.c:18302
 msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
 msgstr "%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚ÐµÐºÑ�Ñ‚Ñƒ Ñ– Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ… Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ GNU Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ— Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿ÑƒÑ�ÐºÑƒ\n"
 
-#: elf32-ppc.c:10008
+#: elf32-ppc.c:10068
 #, c-format
 msgid "%s not defined in linker created %pA"
 msgstr "%s Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÑƒ, Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼Ñƒ %pA"
 
-#: elf32-pru.c:579 elf32-pru.c:1472
+#: elf32-pru.c:582 elf32-pru.c:1477
 #, c-format
 msgid "error: %pB: old incompatible object file detected"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¸Ð¹ Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»"
 
-#: elf32-rl78.c:372
-msgid "internal error: RL78 reloc stack overflow"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ RL78"
-
-#: elf32-rl78.c:383
-msgid "internal error: RL78 reloc stack underflow"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ RL78"
+#: elf32-rl78.c:551
+msgid "RL78 reloc stack overflow/underflow"
+msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð°Ð±Ð¾ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ RL78"
+
+#: elf32-rl78.c:555
+msgid "RL78 reloc divide by zero"
+msgstr "Ð”Ñ–Ð»ÐµÐ½Ð½Ñ� Ð½Ð° Ð½ÑƒÐ»ÑŒ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– RL78"
 
-#: elf32-rl78.c:1053
+#: elf32-rl78.c:1069
 msgid "warning: RL78_SYM reloc with an unknown symbol"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RL78_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: elf32-rl78.c:1084 elf32-rx.c:1456
-#, c-format
-msgid "%pB(%pA): error: call to undefined function '%s'"
-msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ»"
+#: elf32-rl78.c:1115
+msgid "%H: %s out of range\n"
+msgstr "%H: %s Ð¿Ð¾Ð·Ð° Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼\n"
+
+#: elf32-rl78.c:1122
+msgid "%H: relocation type %u is not supported\n"
+msgstr "%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ‚Ð¸Ð¿Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %u Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
+
+#: elf32-rl78.c:1134
+msgid "%H: relocation %s returns an unrecognized value %x\n"
+msgstr "%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿Ð¾Ð²ÐµÑ€Ñ‚Ð°Ñ” Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %x\n"
 
-#: elf32-rl78.c:1205
+#: elf32-rl78.c:1220
 #, c-format
 msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB"
 msgstr "ÐšÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ ABI RL78: Ñ„Ð°Ð¹Ð» G10 %pB Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð· %s, Ñ„Ð°Ð¹Ð» %pB"
 
-#: elf32-rl78.c:1222
+#: elf32-rl78.c:1237
 #, c-format
 msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB"
 msgstr "ÐšÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ ABI RL78: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ %s, Ñ„Ð°Ð¹Ð» %pB Ð· %s, Ñ„Ð°Ð¹Ð» %pB"
 
-#: elf32-rl78.c:1231
+#: elf32-rl78.c:1246
 msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
 msgstr "ÐšÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� RL78: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ñ– 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸"
 
-#: elf32-rl78.c:1235 elf32-rl78.c:1239
+#: elf32-rl78.c:1250 elf32-rl78.c:1254
 #, c-format
 msgid "- %pB is 64-bit, %pB is not"
 msgstr "- %pB Ñ” 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼, Ð° %pB â€” Ð½Ñ–"
 
-#: elf32-rl78.c:1266
+#: elf32-rl78.c:1281
 #, c-format
 msgid " [64-bit doubles]"
 msgstr " [64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– double]"
 
-#: elf32-rx.c:605
+#: elf32-rx.c:618
 #, c-format
 msgid "%pB:%pA: table entry %s outside table"
 msgstr "%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð¿Ð¾Ð·Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÐµÑŽ"
 
-#: elf32-rx.c:612
+#: elf32-rx.c:625
 #, c-format
 msgid "%pB:%pA: table entry %s not word-aligned within table"
 msgstr "%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð° Ð²Ñ�ÐµÑ€ÐµÐ´Ð¸Ð½Ñ– Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ–"
 
-#: elf32-rx.c:684
+#: elf32-rx.c:700
 #, c-format
 msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
 msgstr "%pB:%pA: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¸Ð¹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Red Hat %s, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´Ð»Ñ� %s"
@@ -3103,74 +3455,79 @@ msgstr "%pB:%pA: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ
 #. an absolute address is being computed.  There are special cases
 #. for relocs against symbols that are known to be referenced in
 #. crt0.o before the PID base address register has been initialised.
-#: elf32-rx.c:704
+#: elf32-rx.c:720
 #, c-format
 msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
 msgstr "%pB(%pA): Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� PID %s Ð´Ð¾ %#<PRIx64> (Ñ‰Ð¾Ð´Ð¾ %s Ñƒ %s)"
 
-#: elf32-rx.c:1288
+#: elf32-rx.c:1304
 msgid "warning: RX_SYM reloc with an unknown symbol"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RX_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: elf32-rx.c:3167
+#: elf32-rx.c:1472
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ»"
+
+#: elf32-rx.c:3185
 #, c-format
 msgid "there is a conflict merging the ELF header flags from %pB"
 msgstr "Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF Ð· %pB Ð²Ð¸Ð½Ð¸Ðº ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚"
 
-#: elf32-rx.c:3170
+#: elf32-rx.c:3188
 #, c-format
 msgid "  the input  file's flags: %s"
 msgstr "  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ñ„Ð°Ð¹Ð»Ð° Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…: %s"
 
-#: elf32-rx.c:3172
+#: elf32-rx.c:3190
 #, c-format
 msgid "  the output file's flags: %s"
 msgstr "  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ñ„Ð°Ð¹Ð»Ð° Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð²: %s"
 
-#: elf32-rx.c:3792
+#: elf32-rx.c:3797
 #, c-format
 msgid "%pB:%pA: table %s missing corresponding %s"
 msgstr "%pB:%pA: Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð½ÐµÐ¼Ð°Ñ” Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ %s"
 
-#: elf32-rx.c:3800
+#: elf32-rx.c:3805
 #, c-format
 msgid "%pB:%pA: %s and %s must be in the same input section"
 msgstr "%pB:%pA: %s Ñ– %s Ð¼Ð°ÑŽÑ‚ÑŒ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf32-s390.c:2140 elf64-s390.c:2095
+#: elf32-s390.c:2009 elf64-s390.c:1976
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS %s"
 
-#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754
+#: elf32-score.c:1515 elf32-score7.c:1378 elfxx-mips.c:3875
 msgid "not enough GOT space for local GOT entries"
 msgstr "Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ GOT Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² GOT"
 
-#: elf32-score.c:2746
+#: elf32-score.c:2747
 msgid "address not word aligned"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð·Ð° Ð¼ÐµÐ¶ÐµÑŽ Ñ�Ð»Ð¾Ð²Ð°"
 
-#: elf32-score.c:2827 elf32-score7.c:2632
+#: elf32-score.c:2828 elf32-score7.c:2635
 #, c-format
 msgid "%pB: malformed reloc detected for section %pA"
 msgstr "%pB: Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ– Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ�"
 
-#: elf32-score.c:2881 elf32-score7.c:2686
+#: elf32-score.c:2882 elf32-score7.c:2689
 #, c-format
 msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CALL15 Ñƒ %#<PRIx64> Ð½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3990 elf32-score7.c:3797
 #, c-format
 msgid " [pic]"
 msgstr " [pic]"
 
-#: elf32-score.c:4007 elf32-score7.c:3812
+#: elf32-score.c:3994 elf32-score7.c:3801
 #, c-format
 msgid " [fix dep]"
 msgstr " [Ñ„Ñ–ÐºÑ�. Ñ€Ð¾Ð·Ñ‚.]"
 
-#: elf32-score.c:4050 elf32-score7.c:3855
+#: elf32-score.c:4041 elf32-score7.c:3848
 #, c-format
 msgid "%pB: warning: linking PIC files with non-PIC files"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² PIC Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñ�ÐºÑ– Ð½Ðµ Ñ” Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ PIC"
@@ -3180,152 +3537,148 @@ msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð
 msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: R_SH_USES Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñƒ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ 0x%x"
 
-#: elf32-sh.c:3633
-msgid "unexpected STO_SH5_ISA32 on local symbol is not handled"
-msgstr "Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ STO_SH5_ISA32 Ð½Ð°Ð´ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾"
-
-#: elf32-sh.c:3880
+#: elf32-sh.c:3754
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
 msgstr "%pB: %#<PRIx64>: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ðµ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¾ÑŽ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: elf32-sh.c:3910 elf32-sh.c:3926
+#: elf32-sh.c:3784 elf32-sh.c:3800
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s, %#<PRIx64>"
 
-#: elf32-sh.c:3942
+#: elf32-sh.c:3816
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHA relocation %<PRId64> not in range -32..32"
 msgstr "%pB: %#<PRIx64>: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_SH_PSHA %<PRId64> Ð½Ðµ Ñƒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ– -32..32"
 
-#: elf32-sh.c:3958
+#: elf32-sh.c:3832
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: R_SH_PSHL relocation %<PRId64> not in range -32..32"
 msgstr "%pB: %#<PRIx64>: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_SH_PSHL %<PRId64> Ð½Ðµ Ñƒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ– -32..32"
 
-#: elf32-sh.c:4088 elf32-sh.c:4483
+#: elf32-sh.c:3962 elf32-sh.c:4357
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot emit fixup to `%s' in read-only section"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð°Ð´Ñ€ÐµÑ�Ð½Ñƒ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÑƒ Ð´Ð¾ Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-sh.c:4586
+#: elf32-sh.c:4460
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð·Ð° Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ–Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%sÂ»"
 
-#: elf32-sh.c:4705
+#: elf32-sh.c:4579
 #, c-format
 msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— GD->LE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#<PRIx64>"
 
 #. The backslash is to prevent bogus trigraph detection.
-#: elf32-sh.c:4723
+#: elf32-sh.c:4597
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xd4??)"
 
-#: elf32-sh.c:4731
+#: elf32-sh.c:4605
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xc7??)"
 
-#: elf32-sh.c:4738
+#: elf32-sh.c:4612
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xd1??)"
 
-#: elf32-sh.c:4745
+#: elf32-sh.c:4619
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x310c)"
 
-#: elf32-sh.c:4752
+#: elf32-sh.c:4626
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x410b)"
 
-#: elf32-sh.c:4759
+#: elf32-sh.c:4633
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x34cc)"
 
-#: elf32-sh.c:4794
+#: elf32-sh.c:4668
 #, c-format
 msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— IE->LE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#<PRIx64>"
 
-#: elf32-sh.c:4812
+#: elf32-sh.c:4686
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0xd0??: mov.l)"
 
-#: elf32-sh.c:4821
+#: elf32-sh.c:4695
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x0?12: stc)"
 
-#: elf32-sh.c:4828
+#: elf32-sh.c:4702
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#04X (Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ 0x0?ce: mov.l)"
 
-#: elf32-sh.c:4943
+#: elf32-sh.c:4817
 #, c-format
 msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— GD->IE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#<PRIx64>"
 
-#: elf32-sh.c:5011
+#: elf32-sh.c:4885
 #, c-format
 msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#<PRIx64>"
 msgstr "%pB(%pA): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð´Ð»Ñ� Ñ‚Ñ€Ð°Ð½Ñ�Ð»Ñ�Ñ†Ñ–Ñ— LD->LE Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼: %#<PRIx64>"
 
-#: elf32-sh.c:5139
+#: elf32-sh.c:5013
 #, c-format
-msgid "%X%C: relocation to \"%s\" references a different segment\n"
-msgstr "%X%C: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚\n"
+msgid "%X%H: relocation to \"%s\" references a different segment\n"
+msgstr "%X%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚\n"
 
-#: elf32-sh.c:5146
+#: elf32-sh.c:5020
 #, c-format
-msgid "%C: warning: relocation to \"%s\" references a different segment\n"
-msgstr "%C: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚\n"
+msgid "%H: warning: relocation to \"%s\" references a different segment\n"
+msgstr "%H: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚\n"
 
-#: elf32-sh.c:5651 elf32-sh.c:5733
+#: elf32-sh.c:5488 elf32-sh.c:5570
 #, c-format
 msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ‚Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ FDPIC"
 
-#: elf32-sh.c:5657 elf32-sh.c:5738
+#: elf32-sh.c:5494 elf32-sh.c:5575
 #, c-format
 msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ FDPIC, Ñ‚Ð°Ðº Ñ– Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-sh.c:5688
+#: elf32-sh.c:5525
 #, c-format
 msgid "%pB: Function descriptor relocation with non-zero addend"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
 
-#: elf32-sh.c:5895 elf64-alpha.c:4691
+#: elf32-sh.c:5732 elf64-alpha.c:4646
 #, c-format
 msgid "%pB: TLS local exec code cannot be linked into shared objects"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ ÐºÐ¾Ð´ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ TLS Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-sh.c:6010
+#: elf32-sh.c:5847
 #, c-format
 msgid "%pB: uses %s instructions while previous modules use %s instructions"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s"
 
-#: elf32-sh.c:6022
+#: elf32-sh.c:5859
 #, c-format
 msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Â«%sÂ» Ð· Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾ÑŽ Â«%sÂ» Ð¿Ñ€Ð¸Ð·Ð²ÐµÐ»Ð¾ Ð´Ð¾ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸"
 
-#: elf32-sh.c:6059
+#: elf32-sh.c:5900
 #, c-format
 msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—, Ñ�ÐºÑ– Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ–Ð· Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ�Ð¼Ð¸, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¸Ð¼Ð¸ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
-#: elf32-sh.c:6072
+#: elf32-sh.c:5913
 #, c-format
 msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
 msgstr "%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ�ÑƒÐ¼Ñ–Ñˆ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–Ð² FDPIC Ñ– Ð½Ðµ-FDPIC"
@@ -3340,72 +3693,77 @@ msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� 64-Ð±
 msgid "%pB: linking little endian files with big endian files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð· Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
-#: elf32-spu.c:732
+#: elf32-sparc.c:157
+#, c-format
+msgid "%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr "%pB: Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ sparc Â«%luÂ»"
+
+#: elf32-spu.c:737
 msgid "%X%P: overlay section %pA does not start on a cache line\n"
 msgstr "%X%P: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸ %pA Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ€Ñ�Ð´ÐºÐ° ÐºÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ�\n"
 
-#: elf32-spu.c:740
+#: elf32-spu.c:745
 msgid "%X%P: overlay section %pA is larger than a cache line\n"
 msgstr "%X%P: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸ %pA Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð·Ð° Ñ€Ñ�Ð´Ð¾Ðº ÐºÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ�\n"
 
-#: elf32-spu.c:760
+#: elf32-spu.c:765
 msgid "%X%P: overlay section %pA is not in cache area\n"
 msgstr "%X%P: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸ %pA Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– ÐºÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ�\n"
 
-#: elf32-spu.c:801
+#: elf32-spu.c:806
 #, c-format
 msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n"
 msgstr "%X%P: Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸, Ñ‰Ð¾ Ð½Ð°ÐºÐ»Ð°Ð´Ð°ÑŽÑ‚ÑŒÑ�Ñ�, %pA Ñ– %pA, Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸Ð½Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° Ð¾Ð´Ð½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ\n"
 
-#: elf32-spu.c:1027
+#: elf32-spu.c:1032
 #, c-format
 msgid "warning: call to non-function symbol %s defined in %pB"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÑ„ÑƒÐ½ÐºÑ†Ñ–Ð¾Ð½Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %s, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñƒ %pB"
 
-#: elf32-spu.c:1377
+#: elf32-spu.c:1382
 #, c-format
 msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
 msgstr "%pA:0x%v .brinfo lrlive (%u) Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�Ñ”Ñ‚ÑŒÑ�Ñ� Ð²Ñ–Ð´ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ ÑˆÐ»Ñ�Ñ…Ð¾Ð¼ Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ (%u)\n"
 
-#: elf32-spu.c:1909
+#: elf32-spu.c:1912
 #, c-format
 msgid "%pB is not allowed to define %s"
 msgstr "%pB Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ‚Ð¸ %s"
 
-#: elf32-spu.c:1917
+#: elf32-spu.c:1920
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ‚Ð¸ %s Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñ–"
 
-#: elf32-spu.c:1951
+#: elf32-spu.c:1954
 #, c-format
 msgid "%s in overlay section"
 msgstr "%s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸"
 
-#: elf32-spu.c:1980
+#: elf32-spu.c:1983
 msgid "overlay stub relocation overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸"
 
-#: elf32-spu.c:1989 elf64-ppc.c:13230
+#: elf32-spu.c:1992 elf64-ppc.c:15341
 msgid "stubs don't match calculated size"
 msgstr "ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸ Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°ÑŽÑ‚ÑŒ Ð¾Ð±Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: elf32-spu.c:2572
+#: elf32-spu.c:2575
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°Ñ” %s\n"
 
-#: elf32-spu.c:2588
+#: elf32-spu.c:2591
 #, c-format
 msgid "warning: %s exceeds section size\n"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ\n"
 
-#: elf32-spu.c:2620
+#: elf32-spu.c:2623
 #, c-format
 msgid "%pA:0x%v not found in function table\n"
 msgstr "%pA:0x%v Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹\n"
 
-#: elf32-spu.c:2761
+#: elf32-spu.c:2764
 #, c-format
 msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n"
 msgstr "%pB(%pA+0x%v): Ð²Ð¸ÐºÐ»Ð¸Ðº Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, %pB(%pA), Ð°Ð½Ð°Ð»Ñ–Ð· Ñ” Ð½ÐµÐ¿Ð¾Ð²Ð½Ð¸Ð¼\n"
@@ -3419,39 +3777,39 @@ msgstr "Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ Ñ�Ñ
 msgid "  calls:\n"
 msgstr "  Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸:\n"
 
-#: elf32-spu.c:4341
+#: elf32-spu.c:4342
 #, c-format
 msgid "%s duplicated in %s\n"
 msgstr "%s Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑŽÑ”Ñ‚ÑŒÑ�Ñ� Ñƒ %s\n"
 
-#: elf32-spu.c:4345
+#: elf32-spu.c:4346
 #, c-format
 msgid "%s duplicated\n"
 msgstr "%s Ð´ÑƒÐ±Ð»ÑŒÐ¾Ð²Ð°Ð½Ð¾\n"
 
-#: elf32-spu.c:4352
+#: elf32-spu.c:4353
 msgid "sorry, no support for duplicate object files in auto-overlay script\n"
 msgstr "Ð²Ð¸Ð±Ð°Ñ‡Ñ‚Ðµ, Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñ– Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ Ð½Ð°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð².\n"
 
-#: elf32-spu.c:4394
+#: elf32-spu.c:4395
 #, c-format
 msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n"
 msgstr "Ñ�ÑƒÐ¼Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ 0x%v Ð±ÐµÐ· Ð¾Ð²ÐµÑ€Ð»ÐµÑŽ Ñ‚Ð° Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¾Ð²ÐµÑ€Ð»ÐµÑŽ 0x%v Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑŽÑ‚ÑŒ Ð¼Ñ–Ñ�Ñ‚ÐºÑ–Ñ�Ñ‚ÑŒ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ñ…Ð¾Ð²Ð¸Ñ‰Ð° Ð´Ð°Ð½Ð¸Ñ…\n"
 
-#: elf32-spu.c:4550
+#: elf32-spu.c:4551
 #, c-format
 msgid "%pB:%pA%s exceeds overlay size\n"
 msgstr "%pB:%pA%s Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸\n"
 
-#: elf32-spu.c:4691
+#: elf32-spu.c:4692
 msgid "%F%P: auto overlay error: %E\n"
 msgstr "%F%P: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð°Ð²Ñ‚Ð¾Ð½Ð°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ�: %E\n"
 
-#: elf32-spu.c:4712
+#: elf32-spu.c:4713
 msgid "Stack size for call graph root nodes.\n"
 msgstr "Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚ÐµÐºÐ° Ð´Ð»Ñ� ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¸Ñ… Ð²ÑƒÐ·Ð»Ñ–Ð² Ð³Ñ€Ð°Ñ„Ñƒ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð².\n"
 
-#: elf32-spu.c:4713
+#: elf32-spu.c:4714
 msgid ""
 "\n"
 "Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
@@ -3459,336 +3817,336 @@ msgstr ""
 "\n"
 "Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚ÐµÐºÐ° Ð´Ð»Ñ� Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹. ÐŸÐ¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: Â«*Â» Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð° Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ� Ñƒ Ñ�Ñ‚ÐµÐºÑƒ, Â«tÂ» Ñ…Ð²Ð¾Ñ�Ñ‚Ð¾Ð²Ð¸Ð¹ Ð²Ð¸ÐºÐ»Ð¸Ðº\n"
 
-#: elf32-spu.c:4723
+#: elf32-spu.c:4724
 msgid "Maximum stack required is 0x%v\n"
 msgstr "ÐœÐ°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚ÐµÐºÐ° â€” 0x%v\n"
 
-#: elf32-spu.c:4742
+#: elf32-spu.c:4743
 msgid "%X%P: stack/lrlive analysis error: %E\n"
 msgstr "%X%P: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ Ñ�Ñ‚ÐµÐºÐ°/lrlive: %E\n"
 
-#: elf32-spu.c:4745
+#: elf32-spu.c:4746
 msgid "%F%P: can not build overlay stubs: %E\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ð½Ð°ÐºÐ»Ð°Ð´Ð½Ñ– ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸: %E\n"
 
-#: elf32-spu.c:4814
+#: elf32-spu.c:4815
 msgid "fatal error while creating .fixup"
 msgstr "ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� .fixup"
 
-#: elf32-spu.c:5049
+#: elf32-spu.c:5051
 #, c-format
 msgid "%pB(%s+%#<PRIx64>): unresolvable %s relocation against symbol `%s'"
 msgstr "%pB(%s+%#<PRIx64>): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-tic6x.c:1628
+#: elf32-tic6x.c:1588
 msgid "warning: generating a shared library containing non-PIC code"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ñ‚ÑŒÑ�Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ�ÐºÐ° Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· PIC"
 
-#: elf32-tic6x.c:1633
+#: elf32-tic6x.c:1593
 msgid "warning: generating a shared library containing non-PID code"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ñ‚ÑŒÑ�Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ�ÐºÐ° Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð· PID"
 
-#: elf32-tic6x.c:2493
+#: elf32-tic6x.c:2434
 #, c-format
 msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ SB, Ð°Ð»Ðµ __c6xabi_DSBT_BASE Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-tic6x.c:3629
+#: elf32-tic6x.c:3498
 #, c-format
 msgid "%pB: error: unknown mandatory EABI object attribute %d"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI, %d"
 
-#: elf32-tic6x.c:3638
+#: elf32-tic6x.c:3507
 #, c-format
 msgid "%pB: warning: unknown EABI object attribute %d"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI, %d"
 
-#: elf32-tic6x.c:3752 elf32-tic6x.c:3761
+#: elf32-tic6x.c:3625 elf32-tic6x.c:3634
 #, c-format
 msgid "error: %pB requires more stack alignment than %pB preserves"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ð±Ñ–Ð»ÑŒÑˆÐ¾Ð³Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ°, Ð½Ñ–Ð¶ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾ Ñƒ %pB"
 
-#: elf32-tic6x.c:3771 elf32-tic6x.c:3780
+#: elf32-tic6x.c:3644 elf32-tic6x.c:3653
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_alignment value in %pB"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Tag_ABI_array_object_alignment Ñƒ %pB"
 
-#: elf32-tic6x.c:3789 elf32-tic6x.c:3798
+#: elf32-tic6x.c:3662 elf32-tic6x.c:3671
 #, c-format
 msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Tag_ABI_array_object_align_expected Ñƒ %pB"
 
-#: elf32-tic6x.c:3807 elf32-tic6x.c:3815
+#: elf32-tic6x.c:3680 elf32-tic6x.c:3688
 #, c-format
 msgid "error: %pB requires more array alignment than %pB preserves"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ð±Ñ–Ð»ÑŒÑˆÐ¾Ð³Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ�Ð¸Ð²Ñƒ, Ð½Ñ–Ð¶ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾ Ñƒ %pB"
 
-#: elf32-tic6x.c:3838
+#: elf32-tic6x.c:3711
 #, c-format
 msgid "warning: %pB and %pB differ in wchar_t size"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ñ– %pB Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�ÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ wchar_t"
 
-#: elf32-tic6x.c:3857
+#: elf32-tic6x.c:3730
 #, c-format
 msgid "warning: %pB and %pB differ in whether code is compiled for DSBT"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ñ– %pB Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�ÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° Ñ‚Ð¸Ð¼, Ñ‡Ð¸ Ð±ÑƒÐ»Ð¾ Ñ—Ñ… Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� DSBT"
 
-#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:9530
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2579
+#: elf32-tilepro.c:3627 elfxx-tilegx.c:4017 elfxx-x86.c:2729
+#: elfnn-aarch64.c:10030 elfnn-kvx.c:4636 elfnn-loongarch.c:5032
+#: elfnn-riscv.c:3481
 #, c-format
 msgid "discarded output section: `%pA'"
 msgstr "Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…: Â«%pAÂ»"
 
-#: elf32-v850.c:153
+#: elf32-v850.c:152
 #, c-format
 msgid "variable `%s' cannot occupy in multiple small data regions"
 msgstr "Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð°Ð¹Ð¼Ð°Ñ‚Ð¸ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð¼Ð°Ð»Ð¸Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf32-v850.c:156
+#: elf32-v850.c:155
 #, c-format
 msgid "variable `%s' can only be in one of the small, zero, and tiny data regions"
 msgstr "Ð·Ð¼Ñ–Ð½Ð½Ñƒ Â«%sÂ» Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ñƒ Ð¾Ð´Ð½Ñ–Ð¹ Ð· Ð¼Ð°Ð»Ð¸Ñ…, Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ñ… Ñ– Ð¼Ð°Ð»ÑŽÑ�Ñ–Ð½ÑŒÐºÐ¸Ñ… Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÐµÐ¹ Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf32-v850.c:159
+#: elf32-v850.c:158
 #, c-format
 msgid "variable `%s' cannot be in both small and zero data regions simultaneously"
 msgstr "Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸Ñ�Ñ� Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ñ– Ð½ÑƒÐ»ÑŒÐ¾Ð²Ñ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ… Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾"
 
-#: elf32-v850.c:162
+#: elf32-v850.c:161
 #, c-format
 msgid "variable `%s' cannot be in both small and tiny data regions simultaneously"
 msgstr "Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸Ñ�Ñ� Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ñ– Ð¼Ð°Ð»ÑŽÑ�Ñ–Ð½ÑŒÐºÑ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ… Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾"
 
-#: elf32-v850.c:165
+#: elf32-v850.c:164
 #, c-format
 msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously"
 msgstr "Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ‚Ð¸Ñ�Ñ� Ñƒ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ñ–Ð¹ Ñ– Ð¼Ð°Ð»ÑŽÑ�Ñ–Ð½ÑŒÐºÑ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ… Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñ�Ð½Ð¾"
 
-#: elf32-v850.c:463
+#: elf32-v850.c:466
 msgid "failed to find previous HI16 reloc"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� HI16"
 
-#: elf32-v850.c:2303
+#: elf32-v850.c:2306
 msgid "could not locate special linker symbol __gp"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __gp"
 
-#: elf32-v850.c:2307
+#: elf32-v850.c:2310
 msgid "could not locate special linker symbol __ep"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __ep"
 
-#: elf32-v850.c:2311
+#: elf32-v850.c:2314
 msgid "could not locate special linker symbol __ctbp"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __ctbp"
 
-#: elf32-v850.c:2532
+#: elf32-v850.c:2535
 #, c-format
 msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ %pB Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð½Ð¾ Ð½Ð° 4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-v850.c:2548
+#: elf32-v850.c:2551
 #, c-format
 msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð´Ñ–Ð¹Ñ�Ð½Ñ– Ñ‡Ð¸Ñ�Ð»Ð° Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾Ñ— Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ñ–, Ð° Ñƒ %pB â€” 32-Ð±Ñ–Ñ‚Ð¾Ð²Ñ–"
 
-#: elf32-v850.c:2563
+#: elf32-v850.c:2566
 #, c-format
 msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ FPU-3.0, Ð°Ð»Ðµ Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð»Ð¸ÑˆÐµ FPU-2.0"
 
-#: elf32-v850.c:2595
+#: elf32-v850.c:2598
 #, c-format
 msgid " alignment of 8-byte entities: "
 msgstr " Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²: "
 
-#: elf32-v850.c:2598
+#: elf32-v850.c:2601
 #, c-format
 msgid "4-byte"
 msgstr "4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹"
 
-#: elf32-v850.c:2599
+#: elf32-v850.c:2602
 #, c-format
 msgid "8-byte"
 msgstr "8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¹"
 
-#: elf32-v850.c:2600 elf32-v850.c:2612
+#: elf32-v850.c:2603 elf32-v850.c:2615
 #, c-format
 msgid "not set"
 msgstr "Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾"
 
-#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636
-#: elf32-v850.c:2647 elf32-v850.c:2658
+#: elf32-v850.c:2604 elf32-v850.c:2616 elf32-v850.c:2628 elf32-v850.c:2639
+#: elf32-v850.c:2650 elf32-v850.c:2661
 #, c-format
 msgid "unknown: %x"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾: %x"
 
-#: elf32-v850.c:2607
+#: elf32-v850.c:2610
 #, c-format
 msgid " size of doubles: "
 msgstr " Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ double: "
 
-#: elf32-v850.c:2610
+#: elf32-v850.c:2613
 #, c-format
 msgid "4-bytes"
 msgstr "4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ–"
 
-#: elf32-v850.c:2611
+#: elf32-v850.c:2614
 #, c-format
 msgid "8-bytes"
 msgstr "8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ–"
 
-#: elf32-v850.c:2619
+#: elf32-v850.c:2622
 #, c-format
 msgid " FPU support required: "
 msgstr " ÐŸÐ¾Ñ‚Ñ€Ñ–Ð±Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° FPU: "
 
-#: elf32-v850.c:2622
+#: elf32-v850.c:2625
 #, c-format
 msgid "FPU-2.0"
 msgstr "FPU-2.0"
 
-#: elf32-v850.c:2623
+#: elf32-v850.c:2626
 #, c-format
 msgid "FPU-3.0"
 msgstr "FPU-3.0"
 
-#: elf32-v850.c:2624
+#: elf32-v850.c:2627
 #, c-format
 msgid "none"
 msgstr "Ð½ÐµÐ¼Ð°Ñ”"
 
-#: elf32-v850.c:2631
+#: elf32-v850.c:2634
 #, c-format
 msgid "SIMD use: "
 msgstr "Ð’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� SIMD: "
 
-#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656
+#: elf32-v850.c:2637 elf32-v850.c:2648 elf32-v850.c:2659
 #, c-format
 msgid "yes"
 msgstr "Ñ‚Ð°Ðº"
 
-#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657
+#: elf32-v850.c:2638 elf32-v850.c:2649 elf32-v850.c:2660
 #, c-format
 msgid "no"
 msgstr "Ð½Ñ–"
 
-#: elf32-v850.c:2642
+#: elf32-v850.c:2645
 #, c-format
 msgid "CACHE use: "
 msgstr "Ð’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� CACHE: "
 
-#: elf32-v850.c:2653
+#: elf32-v850.c:2656
 #, c-format
 msgid "MMU use: "
 msgstr "Ð’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� MMU: "
 
-#: elf32-v850.c:2820 elf32-v850.c:2876
+#: elf32-v850.c:2823 elf32-v850.c:2879
 #, c-format
 msgid "%pB: architecture mismatch with previous modules"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€ Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
 #. xgettext:c-format.
-#: elf32-v850.c:2894
+#: elf32-v850.c:2897
 #, c-format
 msgid "private flags = %lx: "
 msgstr "Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lx: "
 
-#: elf32-v850.c:2899
+#: elf32-v850.c:2902
 #, c-format
 msgid "unknown v850 architecture"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850"
 
-#: elf32-v850.c:2901
+#: elf32-v850.c:2904
 #, c-format
 msgid "v850 E3 architecture"
 msgstr "Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850 E3"
 
-#: elf32-v850.c:2903 elf32-v850.c:2910
+#: elf32-v850.c:2906 elf32-v850.c:2913
 #, c-format
 msgid "v850 architecture"
 msgstr "Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850"
 
-#: elf32-v850.c:2911
+#: elf32-v850.c:2914
 #, c-format
 msgid "v850e architecture"
 msgstr "Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e"
 
-#: elf32-v850.c:2912
+#: elf32-v850.c:2915
 #, c-format
 msgid "v850e1 architecture"
 msgstr "Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e1"
 
-#: elf32-v850.c:2913
+#: elf32-v850.c:2916
 #, c-format
 msgid "v850e2 architecture"
 msgstr "Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2"
 
-#: elf32-v850.c:2914
+#: elf32-v850.c:2917
 #, c-format
 msgid "v850e2v3 architecture"
 msgstr "Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2v3"
 
-#: elf32-v850.c:2915
+#: elf32-v850.c:2918
 #, c-format
 msgid "v850e3v5 architecture"
 msgstr "Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e3v5"
 
-#: elf32-v850.c:3609 elf32-v850.c:3848
+#: elf32-v850.c:3592 elf32-v850.c:3831
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñ– Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—"
 
-#: elf32-v850.c:3619 elf32-v850.c:3858
+#: elf32-v850.c:3602 elf32-v850.c:3841
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ñƒ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ %#x"
 
-#: elf32-v850.c:3665 elf32-v850.c:3893
+#: elf32-v850.c:3648 elf32-v850.c:3876
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-v850.c:3705
+#: elf32-v850.c:3688
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¾ %#<PRIx64>"
 
-#: elf32-vax.c:540
+#: elf32-vax.c:539
 #, c-format
 msgid " [nonpic]"
 msgstr " [Ð½Ðµ-pic]"
 
-#: elf32-vax.c:543
+#: elf32-vax.c:542
 #, c-format
 msgid " [d-float]"
 msgstr " [d-float]"
 
-#: elf32-vax.c:546
+#: elf32-vax.c:545
 #, c-format
 msgid " [g-float]"
 msgstr " [g-float]"
 
-#: elf32-vax.c:632
+#: elf32-vax.c:631
 #, c-format
 msgid "%pB: warning: GOT addend of %<PRId64> to `%s' does not match previous GOT addend of %<PRId64>"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº GOT %<PRId64> Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð¼Ñƒ Ð´Ð¾Ð´Ð°Ð½ÐºÑƒ GOT %<PRId64>"
 
-#: elf32-vax.c:1446
+#: elf32-vax.c:1388
 #, c-format
 msgid "%pB: warning: PLT addend of %<PRId64> to `%s' from %pA section ignored"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº PLT %<PRId64> Ð´Ð¾ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾"
 
-#: elf32-vax.c:1572
+#: elf32-vax.c:1514
 #, c-format
 msgid "%pB: warning: %s relocation against symbol `%s' from %pA section"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA"
 
-#: elf32-vax.c:1579
+#: elf32-vax.c:1521
 #, c-format
 msgid "%pB: warning: %s relocation to %#<PRIx64> from %pA section"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð´Ð¾ %#<PRIx64> Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA"
 
-#: elf32-visium.c:821
+#: elf32-visium.c:824
 #, c-format
 msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ %s -mtune=%s Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ %s -mtune=%s"
@@ -3803,238 +4161,267 @@ msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=XGATE]"
 msgid "error reading cpu type from elf private data"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ‚Ð¸Ð¿Ñƒ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ð· Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… elf"
 
-#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353
-#: elf64-ia64.c:2353
+#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2077 elfnn-ia64.c:2346
 msgid "non-zero addend in @fptr reloc"
 msgstr "Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– @fptr"
 
-#: elf32-xtensa.c:937
+#: elf32-xtensa.c:998
 #, c-format
 msgid "%pB(%pA): invalid property table"
 msgstr "%pB(%pA): Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚ÐµÐ¹"
 
-#: elf32-xtensa.c:2675
+#: elf32-xtensa.c:2733
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€=%#<PRIx64>)"
 
-#: elf32-xtensa.c:2758 elf32-xtensa.c:2881
+#: elf32-xtensa.c:2816 elf32-xtensa.c:2939
 msgid "dynamic relocation in read-only section"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-xtensa.c:2858
+#: elf32-xtensa.c:2916
 msgid "TLS relocation invalid without dynamic sections"
 msgstr "ÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²"
 
-#: elf32-xtensa.c:3070
+#: elf32-xtensa.c:3129
 msgid "internal inconsistency in size of .got.loc section"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð½ÐµÐ¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð°Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .got.loc"
 
-#: elf32-xtensa.c:3377
+#: elf32-xtensa.c:3435
 #, c-format
 msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
 msgstr "%pB: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ‚Ð¸Ð¿Ð¸ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€. Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� â€” 0x%x. Ð’Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ– â€” 0x%x"
 
-#: elf32-xtensa.c:4608 elf32-xtensa.c:4616
+#: elf32-xtensa.c:4734 elf32-xtensa.c:4742
 msgid "attempt to convert L32R/CALLX to CALL failed"
 msgstr "Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� L32R/CALLX Ð½Ð° CALL Ð·Ð°Ð·Ð½Ð°Ð»Ð° Ð½ÐµÐ²Ð´Ð°Ñ‡Ñ–"
 
-#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899
+#: elf32-xtensa.c:6574 elf32-xtensa.c:6653 elf32-xtensa.c:8079
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð° Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹"
 
-#: elf32-xtensa.c:7638
+#: elf32-xtensa.c:7820
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� XTENSA_ASM_SIMPLIFY, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð° Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹"
 
-#: elf32-xtensa.c:9493
+#: elf32-xtensa.c:9678
 msgid "invalid relocation address"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9769
 msgid "overflow after relaxation"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ñ�Ð»Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10915
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected fix for %s relocation"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
 
-#: elf64-alpha.c:472
+#: elf32-z80.c:473
+#, c-format
+msgid "%pB: unsupported bfd mach %#lx"
+msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� mach bfd %#lx"
+
+#: elf32-z80.c:518
+#, c-format
+msgid "%pB: unsupported mach %#x"
+msgstr "%pB: Ð½Ð°Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� mach %#x"
+
+#: elf32-z80.c:546
+#, c-format
+msgid "%pB: unsupported arch %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %#x"
+
+#: elf64-alpha.c:474
 msgid "GPDISP relocation did not find ldah and lda instructions"
 msgstr "ÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼ GPDISP Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— ldah Ñ– lda"
 
-#: elf64-alpha.c:2463
+#: elf64-alpha.c:1985
+#, c-format
+msgid "%pB: dynamic relocation against a local symbol in read-only section `%pA'\n"
+msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�\n"
+
+#: elf64-alpha.c:2437
 #, c-format
 msgid "%pB: .got subsegment exceeds 64K (size %d)"
 msgstr "%pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿Ñ–Ð´Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° .got Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 64ÐºÐ‘ (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ â€” %d)"
 
-#: elf64-alpha.c:3018 elf64-alpha.c:3214
+#: elf64-alpha.c:2680 elflink.c:15481 elfnn-kvx.c:4022 elfnn-loongarch.c:1715
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�\n"
+
+#: elf64-alpha.c:2975 elf64-alpha.c:3170
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
 msgstr "%pB: %pA+%#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾Ñ— Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—"
 
-#: elf64-alpha.c:4415 elf64-alpha.c:4428
+#: elf64-alpha.c:4370 elf64-alpha.c:4383
 #, c-format
 msgid "%pB: gp-relative relocation against dynamic symbol %s"
 msgstr "%pB: gp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-alpha.c:4484
+#: elf64-alpha.c:4439
 #, c-format
 msgid "%pB: change in gp: BRSGP %s"
 msgstr "%pB: Ð·Ð¼Ñ–Ð½Ð° Ñƒ gp: BRSGP %s"
 
-#: elf64-alpha.c:4509 mach-o.c:615
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:499
+#: elf64-alpha.c:4464 mach-o.c:625 elfnn-riscv.c:722 elfnn-riscv.c:921
+#: elfnn-riscv.c:963
 msgid "<unknown>"
 msgstr "<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð°>"
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4470
 #, c-format
 msgid "%pB: !samegp reloc against symbol without .prologue: %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� !samegp Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð±ÐµÐ· .prologue: %s"
 
-#: elf64-alpha.c:4573
+#: elf64-alpha.c:4528
 #, c-format
 msgid "%pB: unhandled dynamic relocation against %s"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ %s"
 
-#: elf64-alpha.c:4608
+#: elf64-alpha.c:4563
 #, c-format
 msgid "%pB: pc-relative relocation against undefined weak symbol %s"
 msgstr "%pB: pc-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-alpha.c:4674
+#: elf64-alpha.c:4629
 #, c-format
 msgid "%pB: dtp-relative relocation against dynamic symbol %s"
 msgstr "%pB: dtp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-alpha.c:4699
+#: elf64-alpha.c:4654
 #, c-format
 msgid "%pB: tp-relative relocation against dynamic symbol %s"
 msgstr "%pB: tp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
+#. Only if it's not an unresolved symbol.
+#: elf64-bpf.c:344
+msgid "internal error: relocation not supported"
+msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
+
 #: elf64-gen.c:71
 #, c-format
 msgid "%pB: Relocations in generic ELF (EM: %d)"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð¼Ñƒ ELF (EM: %d)"
 
-#: elf64-hppa.c:2081
+#: elf64-hppa.c:2032
 #, c-format
 msgid "stub entry for %s cannot load .plt, dp offset = %<PRId64>"
 msgstr "ÑˆÐ°Ð±Ð»Ð¾Ð½ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð»Ñ� %s Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‚Ð¸ .plt, Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ dp = %<PRId64>"
 
-#: elf64-hppa.c:3286
+#: elf64-hppa.c:3236
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot reach %s"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %s"
 
-#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636
+#: elf64-ia64-vms.c:600 elfnn-ia64.c:641
 #, c-format
 msgid "%pB: can't relax br at %#<PRIx64> in section `%pA'; please use brl or indirect branch"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ». Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� brl Ð°Ð±Ð¾ Ð½ÐµÐ¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�Ð¼."
 
-#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301
+#: elf64-ia64-vms.c:2032 elfnn-ia64.c:2294
 msgid "@pltoff reloc against local symbol"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� @pltoff Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712
+#: elf64-ia64-vms.c:3278 elfnn-ia64.c:3671
 #, c-format
 msgid "%pB: short data segment overflowed (%#<PRIx64> >= 0x400000)"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð¾ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð´Ð°Ð½Ð¸Ñ… (%#<PRIx64> >= 0x400000)"
 
-#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722
+#: elf64-ia64-vms.c:3288 elfnn-ia64.c:3681
 #, c-format
 msgid "%pB: __gp does not cover short data segment"
 msgstr "%pB: __gp Ð½Ðµ Ð²ÐºÑ€Ð¸Ð²Ð°Ñ” ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996
+#: elf64-ia64-vms.c:3558 elfnn-ia64.c:3954
 #, c-format
 msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'"
 msgstr "%pB: Ð½Ðµ-pic ÐºÐ¾Ð´ Ð· Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼ imm Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064
+#: elf64-ia64-vms.c:3622 elfnn-ia64.c:4022
 #, c-format
 msgid "%pB: @gprel relocation against dynamic symbol %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� @gprel Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127
+#: elf64-ia64-vms.c:3681 elfnn-ia64.c:4085
 #, c-format
 msgid "%pB: linking non-pic code in a position independent executable"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic ÐºÐ¾Ð´Ñƒ Ñƒ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð· Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¼ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼"
 
-#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265
+#: elf64-ia64-vms.c:3783 elfnn-ia64.c:4223
 #, c-format
 msgid "%pB: @internal branch to dynamic symbol %s"
 msgstr "%pB: Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� @internal Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268
+#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4226
 #, c-format
 msgid "%pB: speculation fixup to dynamic symbol %s"
 msgstr "%pB: Ð·Ð´Ð¾Ð³Ð°Ð´ÐºÐ° Ñ‰Ð¾Ð´Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ñ— Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271
+#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4229
 #, c-format
 msgid "%pB: @pcrel relocation against dynamic symbol %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� @pcrel Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468
+#: elf64-ia64-vms.c:3913 elfnn-ia64.c:4426
 msgid "unsupported reloc"
 msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506
+#: elf64-ia64-vms.c:3950 elfnn-ia64.c:4464
 #, c-format
 msgid "%pB: missing TLS section for relocation %s against `%s' at %#<PRIx64> in section `%pA'."
 msgstr "%pB: Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ TLS Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»."
 
-#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523
+#: elf64-ia64-vms.c:3967 elfnn-ia64.c:4481
 #, c-format
 msgid "%pB: Can't relax br (%s) to `%s' at %#<PRIx64> in section `%pA' with size %#<PRIx64> (> 0x1000000)."
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br (%s) Ð´Ð¾ Â«%sÂ» Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð· Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ %#<PRIx64> (> 0x1000000)."
 
-#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781
+#: elf64-ia64-vms.c:4263 elfnn-ia64.c:4742
 #, c-format
 msgid "%pB: linking trap-on-NULL-dereference with non-trapping files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� trap-on-NULL-dereference Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· Ð·Ð°Ñ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ� (trapping)"
 
-#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790
+#: elf64-ia64-vms.c:4272 elfnn-ia64.c:4751
 #, c-format
 msgid "%pB: linking big-endian files with little-endian files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð·Ñ– Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
-#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799
+#: elf64-ia64-vms.c:4281 elfnn-ia64.c:4760
 #, c-format
 msgid "%pB: linking 64-bit files with 32-bit files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð· 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸"
 
-#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808
+#: elf64-ia64-vms.c:4290 elfnn-ia64.c:4769
 #, c-format
 msgid "%pB: linking constant-gp files with non-constant-gp files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð·Ñ– Ñ�Ñ‚Ð°Ð»Ð¸Ð¼ gp Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð·Ñ– Ð·Ð¼Ñ–Ð½Ð½Ð¸Ð¼ gp"
 
-#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818
+#: elf64-ia64-vms.c:4300 elfnn-ia64.c:4779
 #, c-format
 msgid "%pB: linking auto-pic files with non-auto-pic files"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð· Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¸Ð¼ pic Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ pic"
 
-#: elf64-ia64-vms.c:5153 elflink.c:4894
+#: elf64-ia64-vms.c:5150 elflink.c:5338
 #, c-format
 msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� (%u) Ð¹Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA"
 
-#: elf64-ia64-vms.c:5160 elflink.c:4901
+#: elf64-ia64-vms.c:5157
 #, c-format
 msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ñ” Ð¼ÐµÐ½ÑˆÐ¸Ð¼ Ð·Ð° %u Ñƒ %pB"
 
-#: elf64-ia64-vms.c:5176 elflink.c:4918
+#: elf64-ia64-vms.c:5173 elflink.c:5367
 #, c-format
 msgid "warning: size of symbol `%s' changed from %<PRIu64> in %pB to %<PRIu64> in %pB"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð· %<PRIu64> Ñƒ %pB Ð½Ð° %<PRIu64> Ñƒ %pB"
 
-#: elf64-mips.c:4098
+#: elf64-mips.c:4102
 #, c-format
 msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
 msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %<PRIu64> Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %ld"
@@ -4081,1016 +4468,1493 @@ msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ€Ðµ
 msgid "%pB: directive LOCAL valid only with a register or absolute value"
 msgstr "%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ñƒ LOCAL Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ð·Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼Ð¸ Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð°Ñ… Ð°Ð±Ð¾ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¸Ð¼Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼Ð¸"
 
-#: elf64-mmix.c:1744
+#: elf64-mmix.c:1742
 #, c-format
 msgid "%pB: LOCAL directive: register $%<PRId64> is not a local register; first global register is $%<PRId64>"
 msgstr "%pB: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° LOCAL: Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€ $%<PRId64> Ð½Ðµ Ñ” Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¼ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¾Ð¼. ÐŸÐµÑ€ÑˆÐ¸Ð¼ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¼ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¾Ð¼ Ñ” $%<PRId64>."
 
-#: elf64-mmix.c:2173
+#: elf64-mmix.c:2157
 #, c-format
 msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ Â«%sÂ»; Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº %s Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñƒ Ñ€Ð°Ð½Ñ–ÑˆÐµ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»"
 
-#: elf64-mmix.c:2228
+#: elf64-mmix.c:2212
 msgid "register section has contents\n"
 msgstr "Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð´Ð°Ð½Ñ–\n"
 
-#: elf64-mmix.c:2418
+#: elf64-mmix.c:2402
 #, c-format
 msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð½ÐµÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ñ–Ñ�Ñ‚ÑŒ: Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� %lu != Ð¼Ð°ÐºÑ�. %lu; Ð±ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ñ‚Ðµ Ð¿Ñ€Ð¾ Ñ†ÑŽ Ð²Ð°Ð´Ñƒ"
 
-#: elf64-ppc.c:3827
+#: elf64-ppc.c:1361
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð»Ñ–Ð´ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ %s, Ð° Ð½Ðµ %s"
+
+#: elf64-ppc.c:4307
 #, c-format
 msgid "symbol '%s' has invalid st_other for ABI version 1"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¼Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� st_other Ð´Ð»Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ— ABI 1"
 
-#: elf64-ppc.c:4002
+#: elf64-ppc.c:4490
 #, c-format
 msgid "%pB .opd not allowed in ABI version %d"
 msgstr ".opd %pB Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ— ABI %d"
 
-#: elf64-ppc.c:4523
+#: elf64-ppc.c:5085
 #, c-format
 msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
 msgstr "%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ°Ñ… Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– PIE\n"
 
-#: elf64-ppc.c:4919
+#: elf64-ppc.c:5255
+msgid "%H: %s reloc unsupported here\n"
+msgstr "%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‚ÑƒÑ‚ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
+
+#: elf64-ppc.c:5482
 #, c-format
 msgid "%pB uses unknown e_flags 0x%lx"
 msgstr "%pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� e_flags 0x%lx"
 
-#: elf64-ppc.c:4927
+#: elf64-ppc.c:5490
 #, c-format
 msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
 msgstr "%pB: Ð²ÐµÑ€Ñ�Ñ–Ñ� ABI %ld Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾ÑŽ Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ ABI %ld Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ"
 
-#: elf64-ppc.c:4954
+#: elf64-ppc.c:5517
 #, c-format
 msgid " [abiv%ld]"
 msgstr " [abiv%ld]"
 
-#: elf64-ppc.c:6145
+#: elf64-ppc.c:6821
 msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
 msgstr "%P: ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ» Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ð²Ñ–Ð´ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� plt; Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÐ¹Ñ‚Ðµ LD_BIND_NOW=1 Ð°Ð±Ð¾ Ð¾Ð½Ð¾Ð²Ñ–Ñ‚ÑŒ gcc\n"
 
-#: elf64-ppc.c:6417
+#: elf64-ppc.c:7088
 #, c-format
 msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
 msgstr "%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– R_PPC64_TOCSAVE"
 
-#: elf64-ppc.c:6644
+#: elf64-ppc.c:7343
 #, c-format
 msgid "dynreloc miscount for %pB, section %pA"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñƒ Ð¾Ð±Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA"
 
-#: elf64-ppc.c:6733
+#: elf64-ppc.c:7434
 #, c-format
 msgid "%pB: .opd is not a regular array of opd entries"
 msgstr "%pB: .opd Ð½Ðµ Ñ” Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¸Ð¼ Ð¼Ð°Ñ�Ð¸Ð²Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² opd"
 
-#: elf64-ppc.c:6743
+#: elf64-ppc.c:7444
 #, c-format
 msgid "%pB: unexpected reloc type %u in .opd section"
 msgstr "%pB: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�, %u, Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– .opd"
 
-#: elf64-ppc.c:6765
+#: elf64-ppc.c:7466
 #, c-format
 msgid "%pB: undefined sym `%s' in .opd section"
 msgstr "%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– .opd"
 
-#: elf64-ppc.c:7249
+#. The issue is that __glink_PLTresolve saves r2, which is done
+#. because glibc ld.so _dl_runtime_resolve restores r2 to support
+#. a glibc plt call optimisation where global entry code is
+#. skipped on calls that resolve to the same binary.  The
+#. __glink_PLTresolve save of r2 is incompatible with code
+#. making tail calls, because the tail call might go via the
+#. resolver and thus overwrite the proper saved r2.
+#: elf64-ppc.c:7967
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --plt-localentry Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ñ–Ð· Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¸Ð¼ Ñ‰Ð¾Ð´Ð¾ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ ÐºÐ¾Ð´Ð¾Ð¼ power10"
+
+#: elf64-ppc.c:7975
 msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --plt-localentry Ð¾Ñ�Ð¾Ð±Ð»Ð¸Ð²Ð¾ Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ð¹, Ñ�ÐºÑ‰Ð¾ Ñƒ ld.so Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð½Ñ� Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½ÑŒ ABI"
 
-#: elf64-ppc.c:7499
+#: elf64-ppc.c:8291
 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
 msgstr "%H __tls_get_addr Ð²Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð¾ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚, Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–ÑŽ TLS Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾\n"
 
-#: elf64-ppc.c:7876 elf64-ppc.c:8513
+#: elf64-ppc.c:8726 elf64-ppc.c:9442
 #, c-format
 msgid "%s defined on removed toc entry"
 msgstr "%s Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– toc"
 
-#: elf64-ppc.c:8241
-#, c-format
-msgid "%H: toc optimization is not supported for %s instruction\n"
-msgstr "%H: Ð´Ð»Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— toc\n"
-
-#: elf64-ppc.c:8470
+#: elf64-ppc.c:9399
 #, c-format
 msgid "%H: %s references optimized away TOC entry\n"
 msgstr "%H: %s Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° ÑƒÑ�ÑƒÐ½ÑƒÑ‚Ð¸Ð¹ Ñƒ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ– Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð·Ð°Ð¿Ð¸Ñ� TOC\n"
 
-#: elf64-ppc.c:9301
+#: elf64-ppc.c:9620
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%H: Ð´Ð»Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— got/toc\n"
+
+#: elf64-ppc.c:10515
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ”Ð¼Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s"
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11668
 msgid "%P: cannot find opd entry toc for `%pT'\n"
 msgstr "`%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� opd Ñƒ toc Ð´Ð»Ñ� Â«%pTÂ»\n"
 
-#: elf64-ppc.c:10303
+#: elf64-ppc.c:11818
 #, c-format
 msgid "long branch stub `%s' offset overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð´Ð¾Ð²Ð³Ð¾Ñ— Ð³Ñ–Ð»ÐºÐ¸, Â«%sÂ»"
 
-#: elf64-ppc.c:10330
+#: elf64-ppc.c:11845
 #, c-format
 msgid "can't find branch stub `%s'"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Â«%sÂ»"
 
-#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791
+#: elf64-ppc.c:11906 elf64-ppc.c:12158 elf64-ppc.c:14724
 #, c-format
 msgid "%P: linkage table error against `%pT'\n"
 msgstr "%P: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»\n"
 
-#: elf64-ppc.c:10820
+#: elf64-ppc.c:12357
 #, c-format
 msgid "can't build branch stub `%s'"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Â«%sÂ»"
 
-#: elf64-ppc.c:11779
+#: elf64-ppc.c:13384
 #, c-format
 msgid "%pB section %pA exceeds stub group size"
 msgstr "Ð Ð¾Ð·Ð´Ñ–Ð» %pB, %pA, Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð³Ñ€ÑƒÐ¿Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð²"
 
-#: elf64-ppc.c:13189 elf64-ppc.c:13208
+#: elf64-ppc.c:14904
+msgid "__tls_get_addr call offset overflow"
+msgstr "Ð²Ð¸ÐºÐ»Ð¸Ðº __tls_get_addr Ð¿Ñ€Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ñ�ÑƒÐ²Ñƒ"
+
+#: elf64-ppc.c:15244 elf64-ppc.c:15263
 #, c-format
 msgid "%s offset too large for .eh_frame sdata4 encoding"
 msgstr "Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ %s Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ Ð´Ð»Ñ� ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� sdata4 .eh_frame"
 
-#: elf64-ppc.c:13244
+#: elf64-ppc.c:15349
 #, c-format
-msgid "linker stubs in %u group\n"
-msgid_plural "linker stubs in %u groups\n"
-msgstr[0] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ñ–\n"
-msgstr[1] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ñ…\n"
-msgstr[2] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ñ…\n"
-msgstr[3] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ñ–\n"
+msgid "linker stubs in %u group"
+msgid_plural "linker stubs in %u groups"
+msgstr[0] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ñ–"
+msgstr[1] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ñ…"
+msgstr[2] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ñ…"
+msgstr[3] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ñ–"
 
-#: elf64-ppc.c:13248
+#: elf64-ppc.c:15356
 #, c-format
 msgid ""
+"%s, iter %u\n"
 "  branch         %lu\n"
-"  branch toc adj %lu\n"
-"  branch notoc   %lu\n"
-"  branch both    %lu\n"
 "  long branch    %lu\n"
-"  long toc adj   %lu\n"
-"  long notoc     %lu\n"
-"  long both      %lu\n"
 "  plt call       %lu\n"
-"  plt call save  %lu\n"
-"  plt call notoc %lu\n"
-"  plt call both  %lu\n"
 "  global entry   %lu"
 msgstr ""
-"  Ð³Ñ–Ð»ÐºÐ°          %lu\n"
-"  toc adj Ð³Ñ–Ð»ÐºÐ¸  %lu\n"
-"  notoc Ð³Ñ–Ð»ÐºÐ¸    %lu\n"
-"  both Ð³Ñ–Ð»ÐºÐ¸     %lu\n"
-"  long branch    %lu\n"
-"  long toc adj   %lu\n"
-"  long notoc     %lu\n"
-"  long both      %lu\n"
-"  plt call       %lu\n"
-"  plt call save  %lu\n"
-"  plt call notoc %lu\n"
-"  plt call both  %lu\n"
-"  Ð·Ð°Ð³. Ð·Ð°Ð¿Ð¸Ñ�     %lu"
+"%s, Ñ–Ñ‚ÐµÑ€ %u\n"
+"  Ð³Ñ–Ð»ÐºÐ°           %lu\n"
+"  Ð´Ð¾Ð²Ð³Ð° Ð³Ñ–Ð»ÐºÐ°     %lu\n"
+"  Ð²Ð¸ÐºÐ»Ð¸Ðº plt      %lu\n"
+"  Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %lu"
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:15738
 #, c-format
 msgid "%H: %s used with TLS symbol `%pT'\n"
 msgstr "%H: %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ TLS Â«%pTÂ»\n"
 
-#: elf64-ppc.c:13585
+#: elf64-ppc.c:15740
 #, c-format
 msgid "%H: %s used with non-TLS symbol `%pT'\n"
 msgstr "%H: %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð¿Ð¾Ð·Ð° TLS Â«%pTÂ»\n"
 
-#: elf64-ppc.c:14245
+#: elf64-ppc.c:16524
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n"
 msgstr "%P: %H: Ñƒ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ Â«%pTÂ» Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” nop, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� toc Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ (Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð²Ð¸ÐºÐ»Ð¸Ðº plt)\n"
 
-#: elf64-ppc.c:14251
+#: elf64-ppc.c:16530
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
 msgstr "%P: %H: Ñƒ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ Â«%pTÂ» Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” nop, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� toc Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ (Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ðµ save/adjust toc)\n"
 
-#: elf64-ppc.c:14985
+#: elf64-ppc.c:17181
+#, c-format
+msgid "%H: %s against %pT is not supported\n"
+msgstr "%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ñ‰Ð¾Ð´Ð¾ %pT Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
+
+#: elf64-ppc.c:17457
 #, c-format
 msgid "%H: %s for indirect function `%pT' unsupported\n"
 msgstr "%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ð´Ð»Ñ� Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%pTÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
 
-#: elf64-ppc.c:15097
+#: elf64-ppc.c:17545
+#, c-format
+msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n"
+msgstr "%X%P: %pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ñ‰Ð¾Ð´Ð¾ %pT Ñ�Ðº Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ glibc\n"
+
+#: elf64-ppc.c:17600
 #, c-format
 msgid "%P: %pB: %s is not supported for `%pT'\n"
 msgstr "%P: %pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ð´Ð»Ñ� Â«%pTÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
 
-#: elf64-ppc.c:15326
+#: elf64-ppc.c:17869
 #, c-format
 msgid "%H: error: %s not a multiple of %u\n"
 msgstr "%H: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %u\n"
 
-#: elf64-ppc.c:15349
+#: elf64-ppc.c:17892
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr "%H: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ %s Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»\n"
 
-#: elf64-ppc.c:15446
+#: elf64-ppc.c:18037
 #, c-format
 msgid "%H: %s against `%pT': error %d\n"
 msgstr "%H: %s Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %d\n"
 
-#: elf64-s390.c:2576
+#: elf64-s390.c:2457
 #, c-format
 msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-PLT Â«%sÂ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÑ†Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ– Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð· Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° (Ñ�Ð»Ñ–Ð´ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ñ„Ð°Ð¹Ð» Ñ–Ð· -fPIC ?)"
 
-#: elf64-sparc.c:109 elfcode.h:1471
+#: elf64-s390.c:3066
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): misaligned symbol `%s' (%#<PRIx64>) for relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» (%#<PRIx64>) Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
+
+#: elf64-sparc.c:134 elfcode.h:1602
 #, c-format
 msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
 msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %ld"
 
-#: elf64-sparc.c:467
+#: elf64-sparc.c:493
 #, c-format
 msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
 msgstr "%pB: Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ STT_REGISTER Ð¼Ð¾Ð¶Ð½Ð° Ð¾Ð³Ð¾Ð»Ð¾ÑˆÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ %%g[2367]"
 
-#: elf64-sparc.c:488
+#: elf64-sparc.c:514
 #, c-format
 msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
 msgstr "Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñƒ %%g%d: %s Ñƒ %pB, Ñ€Ð°Ð½Ñ–ÑˆÐµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %s Ñƒ %pB"
 
-#: elf64-sparc.c:512
+#: elf64-sparc.c:538
 #, c-format
 msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñ–Ð²: REGISTER Ñƒ %pB Ñ– %s Ñ€Ð°Ð½Ñ–ÑˆÐµ Ñƒ %pB"
 
-#: elf64-sparc.c:559
+#: elf64-sparc.c:585
 #, c-format
 msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
 msgstr "Ð¡Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñ–Ð²: %s Ñƒ %pB Ñ– REGISTER Ñ€Ð°Ð½Ñ–ÑˆÐµ Ñƒ %pB"
 
-#: elf64-sparc.c:691
+#: elf64-sparc.c:717
 #, c-format
 msgid "%pB: linking UltraSPARC specific with HAL specific code"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� UltraSPARC-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ‚Ð° HAL-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ"
 
-#: elf64-x86-64.c:1412
+#: elf64-x86-64.c:1537
 msgid "hidden symbol "
 msgstr "Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1540
 msgid "internal symbol "
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1543 elf64-x86-64.c:1547
 msgid "protected symbol "
 msgstr "Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1549
 msgid "symbol "
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1425 elf64-x86-64.c:1435
-msgid "; recompile with -fPIC"
-msgstr "; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIC"
-
-#: elf64-x86-64.c:1430
+#: elf64-x86-64.c:1555
 msgid "undefined "
 msgstr "Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ "
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1565
 msgid "a shared object"
 msgstr "Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚"
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1567
+msgid "; recompile with -fPIC"
+msgstr "; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIC"
+
+#: elf64-x86-64.c:1572
 msgid "a PIE object"
 msgstr "Ð¾Ð±'Ñ”ÐºÑ‚ PIE"
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1574
 msgid "a PDE object"
 msgstr "Ð¾Ð±'Ñ”ÐºÑ‚ PDE"
 
-#: elf64-x86-64.c:1446
+#: elf64-x86-64.c:1576
+msgid "; recompile with -fPIE"
+msgstr "; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIE"
+
+#: elf64-x86-64.c:1580
 #, c-format
 msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ %s%sÂ«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� %s%s"
 
-#: elf64-x86-64.c:1931
+#: elf64-x86-64.c:2116
 #, c-format
 msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode"
 msgstr "%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– x32 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf64-x86-64.c:2073
+#: elf64-x86-64.c:2266
 #, c-format
 msgid "%pB: '%s' accessed both as normal and thread local symbol"
 msgstr "'%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ñ‚Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf64-x86-64.c:2696
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5302
+#: elf64-x86-64.c:2926 elfnn-aarch64.c:5754 elfnn-riscv.c:2295
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %<PRId64>"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ STT_GNU_IFUNC, Â«%sÂ», Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº: %<PRId64>"
 
-#: elf64-x86-64.c:2934
+#: elf64-x86-64.c:3189
 #, c-format
 msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_X86_64_GOTOFF64 Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ %s, Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf64-x86-64.c:2948
+#: elf64-x86-64.c:3203
 #, c-format
 msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"
 msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ R_X86_64_GOTOFF64 Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— %s Â«%sÂ» Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf64-x86-64.c:3208
+#: elf64-x86-64.c:3493
 #, c-format
 msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %#<PRIx64> in section `%pA' is out of range"
 msgstr "%pB: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº %s%#x Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ"
 
-#: elf64-x86-64.c:3885
-msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"
-msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOTPCREL; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ð· --no-relax\n"
+#: elf64-x86-64.c:3643 elflink.c:13796
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ–: %pB\n"
+
+#: elf64-x86-64.c:4410
+#, c-format
+msgid " failed to convert GOTPCREL relocation against '%s'; relink with --no-relax\n"
+msgstr " Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOTPCREL Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ð· --no-relax\n"
 
-#: elf64-x86-64.c:4043
+#: elf64-x86-64.c:4571
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"
 msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ñ�ÑƒÐ²Ñƒ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ PC Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– PLT Ð´Ð»Ñ� Â«%sÂ»\n"
 
-#: elf64-x86-64.c:4106
+#: elf64-x86-64.c:4644
 #, c-format
 msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
 msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� Ð³Ñ–Ð»Ð¾Ðº Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– PLT Ð´Ð»Ñ� Â«%sÂ»\n"
 
-#: elf64-x86-64.c:4159
+#: elf64-x86-64.c:4697
 #, c-format
 msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
 msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ñ�ÑƒÐ²Ñƒ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ PC Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– PLT GOT Ð´Ð»Ñ� Â«%sÂ»\n"
 
-#: elfcode.h:323
-msgid "warning: %pB has a corrupt section with a size (%"
-msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ (%"
+#: elfcode.h:342
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð», Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– ÐºÑ–Ð½Ñ†Ñ� Ñ„Ð°Ð¹Ð»Ð°"
+
+#: elfcode.h:790
+#, c-format
+msgid "warning: %pB has a corrupt string table index"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸Ðº Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² %pB Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾"
+
+#: elfcode.h:838
+#, c-format
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Ñ–Ð· Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼"
 
-#: elfcode.h:768
+#: elfcode.h:1056
 #, c-format
-msgid "warning: %pB has a corrupt string table index - ignoring"
-msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸Ðº Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² %pB Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ñ‚ÑŒÑ�Ñ�"
+msgid "%pB: %pA+%<PRIx64>: relocation addend %<PRIx64> too large"
+msgstr "%pB: %pA+%<PRIx64>: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %<PRIx64> Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼"
 
-#: elfcode.h:1212
+#: elfcode.h:1322
 #, c-format
 msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
 msgstr "%pB: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ð²ÐµÑ€Ñ�Ñ–Ñ— (%<PRId64>) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ (%ld)"
 
-#: elfcore.h:300
+#: elfcore.h:280
 #, c-format
-msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
-msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° >= %<PRIu64>, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾: %<PRIu64>."
+msgid "warning: %pB has a segment extending past end of file"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚, Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– ÐºÑ–Ð½Ñ†Ñ� Ñ„Ð°Ð¹Ð»Ð°"
 
-#: elflink.c:1367
+#: elflink.c:1397
 #, c-format
 msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA"
 msgstr "%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TLS Ñƒ %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA, Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA"
 
-#: elflink.c:1373
+#: elflink.c:1403
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
 msgstr "%s: Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� TLS Ñƒ %pB Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ %pB"
 
-#: elflink.c:1379
+#: elflink.c:1409
 #, c-format
 msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
 msgstr "%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TLS Ñƒ %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA, Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ %pB"
 
-#: elflink.c:1385
+#: elflink.c:1415
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
 msgstr "%s: Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� TLS Ñƒ %pB Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA"
 
-#: elflink.c:2075
+#: elflink.c:2127
 #, c-format
 msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð½ÐµÐ¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð²ÐµÑ€Ñ�Ñ–Ñ—, Â«%sÂ»"
 
-#: elflink.c:2452
+#: elflink.c:2626
 #, c-format
 msgid "%pB: version node not found for symbol %s"
 msgstr "%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ð²ÑƒÐ·Ð»Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ— Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elflink.c:2541
+#: elflink.c:2717
 #, c-format
 msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%#<PRIx64> >= %#lx) Ð´Ð»Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»"
 
-#: elflink.c:2553
+#: elflink.c:2729
 #, c-format
 msgid "%pB: non-zero symbol index (%#<PRIx64>) for offset %#<PRIx64> in section `%pA' when the object file has no symbol table"
 msgstr "%pB: Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ (%#<PRIx64>) Ð´Ð»Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð°Ð»Ðµ Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²"
 
-#: elflink.c:2744
+#: elflink.c:2940
 #, c-format
 msgid "%pB: relocation size mismatch in %pB section %pA"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA"
 
-#: elflink.c:3066
+#: elflink.c:3269
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elflink.c:3128
+#: elflink.c:3329
 msgid "%P: copy reloc against protected `%pT' is dangerous\n"
 msgstr "%P: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ‰Ð¾Ð´Ð¾ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Â«%pTÂ» Ñ” Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ð¼\n"
 
-#: elflink.c:3932
+#: elflink.c:4306
 #, c-format
 msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
 msgstr "Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¸Ð¹ ÐºÐ¾Ð´ ELF (%d) Ñƒ %pB, Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� %d"
 
-#: elflink.c:4598
+#: elflink.c:4789
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ² Ð²ÐµÑ€Ñ�Ñ–Ñ— %lx (Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¹ â€” %lx)"
+
+#: elflink.c:4857
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr "%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñ–Ð· Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu (>= sh_info %lu)"
+
+#: elflink.c:5005
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½Ñ– Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñ�Ñ‚Ñ– Ñ‰Ð¾Ð´Ð¾ Ð²ÐµÑ€Ñ�Ñ–Ñ—"
+
+#: elflink.c:5043
 #, c-format
 msgid "%pB: %s: invalid version %u (max %d)"
 msgstr "%pB: %s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ�, %u (Ð¼Ð°ÐºÑ�Ð¸Ð¼ÑƒÐ¼ â€” %d)"
 
-#: elflink.c:4635
+#: elflink.c:5080
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr "%pB: %s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ñ— Ð²ÐµÑ€Ñ�Ñ–Ñ— %d"
 
-#: elflink.c:5054
+#: elflink.c:5345
+#, c-format
+msgid "warning: alignment %u of normal symbol `%s' in %pB is smaller than %u used by the common definition in %pB"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ñ” Ð¼ÐµÐ½ÑˆÐ¸Ð¼ Ð·Ð° %u, Ñ‰Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ñƒ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ– Ñƒ %pB"
+
+#: elflink.c:5352
+msgid "warning: NOTE: alignment discrepancies can cause real problems.  Investigation is advised."
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ� Ñƒ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ– Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ Ñ�Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¿Ñ€Ð°Ð²Ð¶Ð½Ñ– Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸. Ð Ð°Ð´Ð¸Ð¼Ð¾ Ð²Ð¸Ð²Ñ‡Ð¸Ñ‚Ð¸ Ñ†Ðµ Ð¿Ð¸Ñ‚Ð°Ð½Ð½Ñ�."
+
+#: elflink.c:5374
+msgid "warning: NOTE: size discrepancies can cause real problems.  Investigation is advised."
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ– Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ Ñ�Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¿Ñ€Ð°Ð²Ð¶Ð½Ñ– Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸. Ð Ð°Ð´Ð¸Ð¼Ð¾ Ð²Ð¸Ð²Ñ‡Ð¸Ñ‚Ð¸ Ñ†Ðµ Ð¿Ð¸Ñ‚Ð°Ð½Ð½Ñ�."
+
+#: elflink.c:5516
 #, c-format
 msgid "%pB: undefined reference to symbol '%s'"
 msgstr "%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: elflink.c:6130
+#: elflink.c:6576
 #, c-format
 msgid "%pB: stack size specified and %s set"
 msgstr "%pB: Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ñ�Ñ‚ÐµÐºÐ° Ñ– Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %s"
 
-#: elflink.c:6134
+#: elflink.c:6580
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr "%pB: %s Ð½Ðµ Ñ” Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¸Ð¼"
 
-#: elflink.c:6331
+#: elflink.c:6792
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr "%s: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ�: %s"
 
-#: elflink.c:6902
+#: elflink.c:7181
+msgid "error: creating an executable stack because of -z execstack command line option"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ñ‚ÐµÐº, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ° -z Ñ�Ñ‚ÐµÐº Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�"
+
+#: elflink.c:7187
+msgid "warning: enabling an executable stack because of -z execstack command line option"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¼Ð¸ÐºÐ°Ñ”Ð¼Ð¾ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ñ‚ÐµÐº, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ° -z Ñ�Ñ‚ÐµÐº Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�"
+
+#: elflink.c:7249
+#, c-format
+msgid "error: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ð²Ð¼Ð¸ÐºÐ°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ° (Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .note.GNU-stack)"
+
+#: elflink.c:7255
+#, c-format
+msgid "warning: %s: requires executable stack (because the .note.GNU-stack section is executable)"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ° (Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .note.GNU-stack Ñ” Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¼)"
+
+#: elflink.c:7263
+#, c-format
+msgid "error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack section"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ð²Ð¼Ð¸ÐºÐ°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ°, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ note.GNU-stack"
+
+#: elflink.c:7269
+#, c-format
+msgid "warning: %s: missing .note.GNU-stack section implies executable stack"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .note.GNU-stack Ð½ÐµÑ�Ð²Ð½Ð¸Ð¼ Ñ‡Ð¸Ð½Ð¾Ð¼ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ�Ñ‚ÐµÐºÐ°"
+
+#: elflink.c:7272
+msgid "NOTE: This behaviour is deprecated and will be removed in a future version of the linker"
+msgstr "Ð—Ð�Ð£Ð’Ð�Ð–Ð•Ð�Ð�Ð¯: Ñ†Ñ� Ð¿Ð¾Ð²ÐµÐ´Ñ–Ð½ÐºÐ° Ð²Ð²Ð°Ð¶Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¾ÑŽ, Ñ—Ñ— Ð±ÑƒÐ´Ðµ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ñƒ Ð½Ð°Ñ�Ñ‚ÑƒÐ¿Ð½Ñ–Ð¹ Ð²ÐµÑ€Ñ�Ñ–Ñ— ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ°"
+
+#: elflink.c:7426
 #, c-format
 msgid "%pB: .preinit_array section is not allowed in DSO"
 msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .preinit_array Ñƒ DSO"
 
-#: elflink.c:8359
+#: elflink.c:9017
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr "Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�, %s, Ñƒ Ñ�ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–: %s"
 
-#: elflink.c:8514
+#: elflink.c:9180 elflink.c:9188
+msgid "division by zero"
+msgstr "Ð´Ñ–Ð»ÐµÐ½Ð½Ñ� Ð½Ð° Ð½ÑƒÐ»ÑŒ"
+
+#: elflink.c:9202
 #, c-format
 msgid "unknown operator '%c' in complex symbol"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€, Â«%cÂ», Ñƒ Ñ�ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–"
 
 #. PR 21524: Let the user know if a symbol was removed by garbage collection.
-#: elflink.c:8852
+#: elflink.c:9538
 #, c-format
 msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
 msgstr "%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s, Ñ�ÐºÐ¸Ð¹ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð·Ð°Ñ�Ð¾Ð±Ð¾Ð¼ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ñ�Ð¼Ñ–Ñ‚Ñ‚Ñ�"
 
-#: elflink.c:8855
+#: elflink.c:9541
 #, c-format
 msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
 msgstr "%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼ --gc-keep-exported"
 
-#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166
+#: elflink.c:9792 elflink.c:9810 elflink.c:9849 elflink.c:9867
 #, c-format
 msgid "%pB: unable to sort relocs - they are in more than one size"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: Ñ—Ñ…Ð½Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð½Ðµ Ñ” Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ð¸Ð¼Ð¸"
 
 #. The section size is not divisible by either -
 #. something is wrong.
-#: elflink.c:9125 elflink.c:9182
+#: elflink.c:9826 elflink.c:9883
 #, c-format
 msgid "%pB: unable to sort relocs - they are of an unknown size"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: Ñ—Ñ…Ð½Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ–"
 
-#: elflink.c:9234
+#: elflink.c:9935
 msgid "not enough memory to sort relocations"
 msgstr "Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ð´Ð»Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ"
 
-#: elflink.c:9502
+#: elflink.c:10273
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr "%pB: Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²: %d (>= %d)"
 
-#: elflink.c:9782
+#: elflink.c:10549
 #, c-format
 msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO"
 
-#: elflink.c:9785
+#: elflink.c:10552
 #, c-format
 msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO"
 
-#: elflink.c:9788
+#: elflink.c:10555
 #, c-format
 msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO"
 
-#: elflink.c:9874
+#: elflink.c:10641
 #, c-format
 msgid "%pB: could not find output section %pA for input section %pA"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %pA Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %pA"
 
-#: elflink.c:10028
+#: elflink.c:10795
 #, c-format
 msgid "%pB: protected symbol `%s' isn't defined"
 msgstr "%pB: Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elflink.c:10031
+#: elflink.c:10798
 #, c-format
 msgid "%pB: internal symbol `%s' isn't defined"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elflink.c:10034
+#: elflink.c:10801
 #, c-format
 msgid "%pB: hidden symbol `%s' isn't defined"
 msgstr "%pB: Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elflink.c:10066
+#: elflink.c:10833
 #, c-format
 msgid "%pB: no symbol version section for versioned symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ Â«%sÂ»"
 
-#: elflink.c:10679
-#, c-format
-msgid "error: %pB: size of section %pA is not multiple of address size"
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð¸"
-
-#: elflink.c:10724
+#: elflink.c:11514
 #, c-format
 msgid "error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a non-existent global symbol"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%#<PRIx64>) Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA, Ñ�ÐºÐµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”"
 
-#: elflink.c:11484
-#, c-format
-msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
-msgstr "%pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ [Â«%pAÂ» Ñƒ %pB] Ñ– Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ [Â«%pAÂ» Ñƒ %pB] Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸"
-
-#: elflink.c:11490
+#: elflink.c:11984
 #, c-format
-msgid "%pA has both ordered and unordered sections"
-msgstr "%pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ– Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸"
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elflink.c:11592
+#: elflink.c:12261
 #, c-format
 msgid "%pB: no symbol found for import library"
 msgstr "%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elflink.c:12225
+#: elflink.c:12836
+msgid "%F%P: %pB: failed to finish relative relocations\n"
+msgstr "%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�\n"
+
+#: elflink.c:12913
 #, c-format
 msgid "%pB: file class %s incompatible with %s"
 msgstr "%pB: ÐºÐ»Ð°Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² %s Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· %s"
 
-#: elflink.c:12442
+#: elflink.c:13162
 #, c-format
 msgid "%pB: failed to generate import library"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÑƒ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elflink.c:12561
+#: elflink.c:13330
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼"
 
-#: elflink.c:12609
+#: elflink.c:13378
 #, c-format
 msgid "warning: section '%s' is being made into a note"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾ Ð½Ð° Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÑƒ"
 
-#: elflink.c:12701
+#: elflink.c:13472
 msgid "%P%X: read-only segment has dynamic relocations\n"
 msgstr "%P%X: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�, Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�\n"
 
-#: elflink.c:12704
-msgid "%P: warning: creating a DT_TEXTREL in a shared object\n"
+#: elflink.c:13475
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
 msgstr "%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�\n"
 
-#: elflink.c:12829
+#: elflink.c:13478
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr "%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ PDE\n"
+
+#: elflink.c:13481
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr "%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ PIE\n"
+
+#: elflink.c:13617
 msgid "%P%X: can not read symbols: %E\n"
 msgstr "%P%X: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸: %E\n"
 
-#: elflink.c:13002
-msgid "%F%P: corrupt input: %pB\n"
-msgstr "%F%P: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ–: %pB\n"
+#: elflink.c:14042
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
+msgstr "%F%P: %pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð»Ñ� --gc-sections Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð¸Ð¹ (linked-to) Ñ€Ð¾Ð·Ð´Ñ–Ð»\n"
 
-#: elflink.c:13668
+#: elflink.c:14520
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
 msgstr "%pB: %pA+%#<PRIx64>: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð»Ñ� INHERIT"
 
-#: elflink.c:13844
+#: elflink.c:14561
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ»: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� VTENTRY"
+
+#: elflink.c:14704
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr "Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ INPUT_SECTION_FLAG, %s\n"
 
-#: elfxx-mips.c:1450
+#: elflink.c:15487
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%P: %pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ñƒ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»\n"
+
+#: elflink.c:15576
+msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n"
+msgstr "%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ… Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ GNU Ñ–Ð· DT_TEXTREL Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ— Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿ÑƒÑ�ÐºÑƒ; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· %s\n"
+
+#: elfxx-aarch64.c:477
+#, c-format
+msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð»Ð°Ð±ÐºÐ¸Ñ… TLS Ð·Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð²Ñ–Ð´ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ– Ð¼Ð¾Ð¶Ðµ Ð½Ðµ Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ñ‚Ð¸ Ñ‚Ð°Ðº, Ñ�Ðº Ð²Ð¸ Ð½Ð° Ñ‚Ðµ Ñ�Ð¿Ð¾Ð´Ñ–Ð²Ð°Ñ”Ñ‚ÐµÑ�Ñ�"
+
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:10231 elfnn-aarch64.c:10238
+#, c-format
+msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section."
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: BTI Ð²Ð¼Ð¸ÐºÐ°Ñ”Ñ‚ÑŒÑ�Ñ� -z force-bti, Ñ�ÐºÑ‰Ð¾ ÑƒÑ�Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ– Ð½Ðµ Ð¼Ð°ÑŽÑ‚ÑŒ BTI Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– NOTE."
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾Ð³Ð¾ AArch64: 0x%x>"
+
+#: elfxx-loongarch.c:1909
+#, c-format
+msgid "%pB: unsupported relocation type %s"
+msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
+
+#: elfxx-loongarch.c:1937
+#, c-format
+msgid "%pB: unsupported bfd relocation type %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ bfd Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x"
+
+#: elfxx-loongarch.c:2009
+#, c-format
+msgid "%pB: relocation %s right shift %d error 0x%lx"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s, Ð·Ñ�ÑƒÐ² Ð¿Ñ€Ð°Ð²Ð¾Ñ€ÑƒÑ‡ %d, Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° 0x%lx"
+
+#: elfxx-loongarch.c:2028
+#, c-format
+msgid "%pB: relocation %s overflow 0x%lx"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s 0x%lx"
+
+#: elfxx-mips.c:1541
 msgid "static procedure (no name)"
 msgstr "Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° (Ð±ÐµÐ· Ð½Ð°Ð·Ð²Ð¸)"
 
-#: elfxx-mips.c:5718
+#: elfxx-mips.c:5857
 msgid "MIPS16 and microMIPS functions cannot call each other"
 msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ— MIPS16 Ñ– microMIPS Ð½Ðµ Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ‚Ð¸ Ð¾Ð´Ð½Ð° Ð¾Ð´Ð½Ñƒ"
 
-#: elfxx-mips.c:6485
+#: elfxx-mips.c:6627
 msgid "%X%H: unsupported JALX to the same ISA mode\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ JALX Ð´Ð¾ Ñ‚Ð¾Ð³Ð¾ Ñ�Ð°Ð¼Ð¾Ð³Ð¾ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ ISA\n"
 
-#: elfxx-mips.c:6518
+#: elfxx-mips.c:6660
 msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð¼Ñ–Ð¶ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ð· ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼ Ð²Ð·Ð°Ñ”Ð¼Ð½Ð¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼\n"
 
-#: elfxx-mips.c:6563
+#: elfxx-mips.c:6705
 msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n"
 msgstr "%X%H: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÑŽÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA Ð½Ð° JALX: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ\n"
 
-#: elfxx-mips.c:6575
+#: elfxx-mips.c:6717
 msgid "%X%H: unsupported branch between ISA modes\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA\n"
 
-#: elfxx-mips.c:7223
+#: elfxx-mips.c:7350
 #, c-format
 msgid "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«.reginfoÂ»; Ð¼Ð°Ð² Ð±ÑƒÑ‚Ð¸ %<PRIu64>, Ð¼Ð°Ñ”Ð¼Ð¾ %<PRIu64>"
 
-#: elfxx-mips.c:7267 elfxx-mips.c:7502
+#: elfxx-mips.c:7394
 #, c-format
 msgid "%pB: warning: bad `%s' option size %u smaller than its header"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Â«%sÂ», %u, Ð¼ÐµÐ½ÑˆÐ¸Ð¹ Ð·Ð° Ð¹Ð¾Ð³Ð¾ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº"
 
-#: elfxx-mips.c:8300 elfxx-mips.c:8426
+#: elfxx-mips.c:7630
+#, c-format
+msgid "%pB: warning: truncated `%s' option"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¸Ð¹ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ Â«%sÂ»"
+
+#: elfxx-mips.c:8454 elfxx-mips.c:8580
 #, c-format
 msgid "%pB: warning: cannot determine the target function for stub section `%s'"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°, Â«%sÂ»"
 
-#: elfxx-mips.c:8558
+#: elfxx-mips.c:8712
 #, c-format
 msgid "%pB: malformed reloc detected for section %s"
 msgstr "%pB: Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ– Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ�"
 
-#: elfxx-mips.c:8658
+#: elfxx-mips.c:8812
 #, c-format
 msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOT Ñƒ %#<PRIx64> Ñ” Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¼ Ñƒ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ð°Ñ…"
 
-#: elfxx-mips.c:8796
+#: elfxx-mips.c:8952
 #, c-format
 msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CALL16 Ñƒ %#<PRIx64> Ð½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elfxx-mips.c:9086
+#: elfxx-mips.c:9255
 #, c-format
 msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n"
 msgstr "%X%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC\n"
 
-#: elfxx-mips.c:9422
+#: elfxx-mips.c:9381
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr "Ð¡Ð¸Ð¼Ð²Ð¾Ð» IFUNC %s Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ IFUNCS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
+
+#: elfxx-mips.c:9384
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr "Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²"
+
+#: elfxx-mips.c:9604
 #, c-format
 msgid "non-dynamic relocations refer to dynamic symbol %s"
 msgstr "Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», %s"
 
-#: elfxx-mips.c:10350
+#: elfxx-mips.c:10539
 #, c-format
 msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %#<PRIx64> in section `%pA'"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� LO16 Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð´Ð»Ñ� %s Ñƒ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»"
 
-#: elfxx-mips.c:10490
-msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
-msgstr "Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 64 ÐºÐ‘; Ð½Ð¸Ð¶Ñ‡Ð¸Ð¹ Ð·Ð° Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (Ð´Ð¸Ð². Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -G)"
+#: elfxx-mips.c:10679
+msgid "small-data section too large; lower small-data size limit (see option -G)"
+msgstr "Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼; Ð·Ñ€Ð¾Ð±Ñ–Ñ‚ÑŒ Ð½Ð¸Ð¶Ñ‡Ð¸Ð¼ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (Ð´Ð¸Ð². Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -G)"
 
-#: elfxx-mips.c:10509
+#: elfxx-mips.c:10698
 msgid "cannot convert a jump to JALX for a non-word-aligned address"
 msgstr "Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð½Ð° JALX Ð´Ð»Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸, Ñ�ÐºÑƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð°"
 
-#: elfxx-mips.c:10512
+#: elfxx-mips.c:10701
 msgid "jump to a non-word-aligned address"
 msgstr "Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ�Ð»Ð¾Ð²Ð¾Ð¼ Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elfxx-mips.c:10513
+#: elfxx-mips.c:10702
 msgid "jump to a non-instruction-aligned address"
 msgstr "Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elfxx-mips.c:10516
+#: elfxx-mips.c:10705
 msgid "cannot convert a branch to JALX for a non-word-aligned address"
 msgstr "Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð½Ð° JALX Ð´Ð»Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸, Ñ�ÐºÑƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð°"
 
-#: elfxx-mips.c:10518
+#: elfxx-mips.c:10707
 msgid "branch to a non-instruction-aligned address"
 msgstr "Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elfxx-mips.c:10520
+#: elfxx-mips.c:10709
 msgid "PC-relative load from unaligned address"
 msgstr "Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ PC Ð· Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elfxx-mips.c:10798
+#: elfxx-mips.c:11009
 #, c-format
 msgid "%pB: `%pA' entry VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
 msgstr "%pB: Ð·Ð°Ð¿Ð¸Ñ� Â«%pAÂ» VMA %#<PRIx64> Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¼ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ�Ñ� Â«-Ttext-segment=...Â»"
 
-#: elfxx-mips.c:10911 elfxx-mips.c:11484
+#: elfxx-mips.c:11124 elfxx-mips.c:11711
 #, c-format
 msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
 msgstr "%pB: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ� Â«%pAÂ» %<PRId64> Ð· Â«%pAÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ ADDIUPC"
 
-#: elfxx-mips.c:11456
+#: elfxx-mips.c:11683
 #, c-format
 msgid "%pB: `%pA' start VMA of %#<PRIx64> outside the 32-bit range supported; consider using `-Ttext-segment=...'"
 msgstr "%pB: Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº Â«%pAÂ» VMA %#<PRIx64> Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð·Ð° Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¼ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ�Ñ� Â«-Ttext-segment=...Â»"
 
-#: elfxx-mips.c:14397
+#: elfxx-mips.c:13429 reloc.c:8605
+#, c-format
+msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð·Ñ�ÑƒÐ²Ñƒ %V Ð½Ðµ Ð¼Ð°Ñ” Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�\n"
+
+#: elfxx-mips.c:14741
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %s"
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15269
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð½Ð°Ð·Ð²Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Â«%pAÂ»"
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15546
 #, c-format
 msgid "%pB: warning: linking abicalls files with non-abicalls files"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² abicalls Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· abicalls"
 
-#: elfxx-mips.c:15225
+#: elfxx-mips.c:15563
 #, c-format
 msgid "%pB: linking 32-bit code with 64-bit code"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ Ð· 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼ ÐºÐ¾Ð´Ð¾Ð¼"
 
-#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338
+#: elfxx-mips.c:15595 elfxx-mips.c:15661 elfxx-mips.c:15676
 #, c-format
 msgid "%pB: linking %s module with previous %s modules"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÑ”Ð¼Ð¾ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s"
 
-#: elfxx-mips.c:15281
+#: elfxx-mips.c:15619
 #, c-format
 msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ABI: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s"
 
-#: elfxx-mips.c:15306
+#: elfxx-mips.c:15644
 #, c-format
 msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ASE: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s"
 
-#: elfxx-mips.c:15440
+#: elfxx-mips.c:15778
 #, c-format
 msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ð· Ñ‡Ð¸Ñ�Ð»Ð°Ð¼Ð¸ Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %d, (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ð´Ð»Ñ� Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %d"
 
-#: elfxx-mips.c:15446
+#: elfxx-mips.c:15784
 #, c-format
 msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ð· Ñ‡Ð¸Ñ�Ð»Ð°Ð¼Ð¸ Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %d, (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s"
 
-#: elfxx-mips.c:15452
+#: elfxx-mips.c:15790
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI Ð´Ð»Ñ� Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ð· Ñ‡Ð¸Ñ�Ð»Ð°Ð¼Ð¸ Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ, %d"
 
-#: elfxx-mips.c:15466
+#: elfxx-mips.c:15804
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s"
 
-#: elfxx-mips.c:15485
+#: elfxx-mips.c:15823
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA, %d"
 
-#: elfxx-mips.c:15497
+#: elfxx-mips.c:15835
 #, c-format
 msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA, %d, (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %s"
 
-#: elfxx-mips.c:15506
+#: elfxx-mips.c:15844
 #, c-format
 msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA %d (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %pB), Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ABI MSA, %d"
 
-#: elfxx-mips.c:15568
+#: elfxx-mips.c:15906
 #, c-format
 msgid "%pB: endianness incompatible with that of the selected emulation"
 msgstr "%pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—"
 
-#: elfxx-mips.c:15582
+#: elfxx-mips.c:15920
 #, c-format
 msgid "%pB: ABI is incompatible with that of the selected emulation"
 msgstr "%pB: ABI Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· ABI Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—"
 
-#: elfxx-mips.c:15634
+#: elfxx-mips.c:15973
 #, c-format
 msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ ISA Ð¼Ñ–Ð¶ e_flags Ñ– .MIPS.abiflags"
 
-#: elfxx-mips.c:15639
+#: elfxx-mips.c:15978
 #, c-format
 msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ ABI FP Ð¼Ñ–Ð¶ .gnu.attributes Ñ– .MIPS.abiflags"
 
-#: elfxx-mips.c:15643
+#: elfxx-mips.c:15982
 #, c-format
 msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ ASE Ð¼Ñ–Ð¶ e_flags Ñ– .MIPS.abiflags"
 
-#: elfxx-mips.c:15650
+#: elfxx-mips.c:15989
 #, c-format
 msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½ÑŒ ISA Ð¼Ñ–Ð¶ e_flags Ñ– .MIPS.abiflags"
 
-#: elfxx-mips.c:15654
+#: elfxx-mips.c:15993
 #, c-format
 msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñƒ Ð¿Ð¾Ð»Ñ– flags2 .MIPS.abiflags (0x%lx)"
 
-#: elfxx-mips.c:15843
+#: elfxx-mips.c:16184
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr "-mips32r2 -mfp64 (12 Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ñ… Ð´Ð»Ñ� Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð²)"
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16246 elfxx-mips.c:16257
 msgid "None"
 msgstr "Ð�ÐµÐ¼Ð°Ñ”"
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16248 elfxx-mips.c:16317
 msgid "Unknown"
 msgstr "Ð�ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹"
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16328
 #, c-format
 msgid "Hard or soft float\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð°Ð±Ð¾ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ°\n"
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16331
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð° Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŒ)\n"
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16334
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð° Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŒ)\n"
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16337
 #, c-format
 msgid "Soft float\n"
 msgstr "ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ°\n"
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16340
 #, c-format
 msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ñ�Ð¿Ñ–Ð²Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€ MIPS32r2, 12 Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ñ… Ð´Ð»Ñ� Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð²)\n"
 
-#: elfxx-mips.c:16002
+#: elfxx-mips.c:16343
 #, c-format
 msgid "Hard float (32-bit CPU, Any FPU)\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, Ð±ÑƒÐ´ÑŒ-Ñ�ÐºÐ¸Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16005
+#: elfxx-mips.c:16346
 #, c-format
 msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16008
+#: elfxx-mips.c:16349
 #, c-format
 msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
 msgstr "Ð¡ÑƒÐ¼Ñ–Ñ�Ð½Ñ–Ñ�Ñ‚ÑŒ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸ (32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16040
+#: elfxx-mips.c:16381
 #, c-format
 msgid " [abi=O32]"
 msgstr " [abi=O32]"
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16383
 #, c-format
 msgid " [abi=O64]"
 msgstr " [abi=O64]"
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16385
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [abi=EABI32]"
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16387
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [abi=EABI64]"
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16389
 #, c-format
 msgid " [abi unknown]"
 msgstr " [Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ abi]"
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16391
 #, c-format
 msgid " [abi=N32]"
 msgstr " [abi=N32]"
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16393
 #, c-format
 msgid " [abi=64]"
 msgstr " [abi=64]"
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16395
 #, c-format
 msgid " [no abi set]"
 msgstr " [Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ abi]"
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16420
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ISA]"
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16440
 #, c-format
 msgid " [not 32bitmode]"
 msgstr " [Ð½Ðµ 32-Ð±Ñ–Ñ‚.Ñ€ÐµÐ¶Ð¸Ð¼]"
 
-#: elfxx-sparc.c:3113
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5286
+#: elfxx-riscv.c:1699
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr "Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� x ISA Â«%sÂ» Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñ–Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ�Ð¼Ð¸"
+
+#: elfxx-riscv.c:1705
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ‚Ð¸Ð¿Ð¾Ð²Ñ– Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ»"
+
+#: elfxx-riscv.c:1811
+#, c-format
+msgid "%s: first ISA extension must be `e', `i' or `g'"
+msgstr "%s: Ð¿ÐµÑ€ÑˆÐ¸Ð¼ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ�Ð¼ ISA Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Â«eÂ», Â«iÂ» Ð°Ð±Ð¾ Â«gÂ»"
+
+#: elfxx-riscv.c:1835
+#, c-format
+msgid "%s: unknown standard ISA extension or prefix class `%c'"
+msgstr "%s: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Ð°Ð±Ð¾ ÐºÐ»Ð°Ñ� Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð° Â«%cÂ»"
+
+#: elfxx-riscv.c:1871
+#, c-format
+msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
+msgstr "%s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Ð· Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð¾Ð¼ ISA Â«%sÂ» Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° <Ñ‡Ð¸Ñ�Ð»Ð¾>p"
+
+#: elfxx-riscv.c:1895
+#, c-format
+msgid "%s: unknown prefixed ISA extension `%s'"
+msgstr "%s: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ»"
+
+#: elfxx-riscv.c:1919
+#, c-format
+msgid "%s: prefixed ISA extension must separate with _"
+msgstr "%s: Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Ñ�Ð»Ñ–Ð´ Ð²Ñ–Ð´Ð¾ÐºÑ€ÐµÐ¼Ð»ÑŽÐ²Ð°Ñ‚Ð¸ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ _"
+
+#: elfxx-riscv.c:1973
+#, c-format
+msgid "rv%de does not support the `h' extension"
+msgstr "Ñƒ rv%de Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«hÂ»"
+
+#: elfxx-riscv.c:1981
+#, c-format
+msgid "rv%d does not support the `q' extension"
+msgstr "Ñƒ rv%d Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«qÂ»"
+
+#: elfxx-riscv.c:1988
+#, c-format
+msgid "rv%d does not support the `zcf' extension"
+msgstr "Ñƒ rv%d Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«zcfÂ»"
+
+#: elfxx-riscv.c:1995
+msgid "`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"
+msgstr "Â«zfinxÂ» ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ�Ð¼ Â«f/d/q/zfh/zfhminÂ»"
+
+#: elfxx-riscv.c:2002
+msgid "`xtheadvector' is conflict with the `v' extension"
+msgstr "Â«xtheadvectorÂ» ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ñ–Ð· Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ�Ð¼ Â«vÂ»"
+
+#: elfxx-riscv.c:2023
+msgid "zvl*b extensions need to enable either `v' or `zve' extension"
+msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� zvl*b Ð¼Ð°ÑŽÑ‚ÑŒ Ð²Ð¼Ð¸ÐºÐ°Ñ‚Ð¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«vÂ» Ð°Ð±Ð¾ Â«zveÂ»"
+
+#: elfxx-riscv.c:2085
+#, c-format
+msgid "%s: ISA string cannot contain uppercase letters"
+msgstr "%s: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð»Ñ–Ñ‚ÐµÑ€ Ñƒ Ð²ÐµÑ€Ñ…Ð½ÑŒÐ¾Ð¼Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–"
+
+#: elfxx-riscv.c:2113
+#, c-format
+msgid "%s: ISA string must begin with rv32 or rv64"
+msgstr "%s: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð¼Ð°Ñ” Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ‚Ð¸Ñ�Ñ� Ð· rv32 Ð°Ð±Ð¾ rv64"
+
+#: elfxx-riscv.c:2339
+#, c-format
+msgid "invalid ISA extension ends with <number>p in .option arch `%s'"
+msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° <Ð½Ð¾Ð¼ÐµÑ€>p Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ– .option Â«%sÂ»"
+
+#: elfxx-riscv.c:2362
+#, c-format
+msgid "unknown ISA extension `%s' in .option arch `%s'"
+msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ» Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ– .option Â«%sÂ»"
+
+#: elfxx-riscv.c:2373
+#, c-format
+msgid "cannot + or - base extension `%s' in .option arch `%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ + Ð°Ð±Ð¾ - Ð±Ð°Ð·Ð¾Ð²Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ» Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ– .option Â«%sÂ»"
+
+#: elfxx-riscv.c:2613 elfxx-riscv.c:2861
+msgid "internal: unreachable INSN_CLASS_*"
+msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ�: Ð½ÐµÐ´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¹ INSN_CLASS_*"
+
+#: elfxx-riscv.c:2648
+msgid "zihintntl' and `c', or `zihintntl' and `zca"
+msgstr "zihintntlÂ» Ñ– Â«cÂ» Ð°Ð±Ð¾ Â«zihintntlÂ» Ñ– Â«zca"
+
+#: elfxx-riscv.c:2653 elfxx-riscv.c:2671
+msgid "c' or `zca"
+msgstr "cÂ» Ð°Ð±Ð¾ Â«zca"
+
+#: elfxx-riscv.c:2659
+msgid "m' or `zmmul"
+msgstr "m' Ð°Ð±Ð¾ `zmmul"
+
+#: elfxx-riscv.c:2677
+msgid "f' and `c', or `f' and `zcf"
+msgstr "fÂ» Ñ– Â«cÂ» Ð°Ð±Ð¾ Â«fÂ» Ñ– Â«zcf"
+
+#: elfxx-riscv.c:2682
+msgid "c' or `zcf"
+msgstr "cÂ» Ð°Ð±Ð¾ Â«zcf"
+
+#: elfxx-riscv.c:2688
+msgid "d' and `c', or `d' and `zcd"
+msgstr "dÂ» Ñ– Â«cÂ» Ð°Ð±Ð¾ Â«dÂ» Ñ– Â«zcd"
+
+#: elfxx-riscv.c:2693
+msgid "c' or `zcd"
+msgstr "cÂ» Ð°Ð±Ð¾ Â«zcd"
+
+#: elfxx-riscv.c:2695
+msgid "f' or `zfinx"
+msgstr "fÂ» Ð°Ð±Ð¾ Â«zfinx"
+
+#: elfxx-riscv.c:2697
+msgid "d' or `zdinx"
+msgstr "dÂ» Ð°Ð±Ð¾ Â«zdinx"
+
+#: elfxx-riscv.c:2699
+msgid "q' or `zqinx"
+msgstr "qÂ» Ð°Ð±Ð¾ Â«zqinx"
+
+#: elfxx-riscv.c:2701
+msgid "zfh' or `zhinx"
+msgstr "zfhÂ» Ð°Ð±Ð¾ Â«zhinx"
+
+#: elfxx-riscv.c:2705
+msgid "zfhmin' or `zhinxmin"
+msgstr "zfhminÂ» Ð°Ð±Ð¾ Â«zhinxmin"
+
+#: elfxx-riscv.c:2716
+msgid "zfhmin' and `d', or `zhinxmin' and `zdinx"
+msgstr "zfhminÂ» Ñ– Â«dÂ» Ð°Ð±Ð¾ Â«zhinxminÂ» Ñ– Â«zdinx"
+
+#: elfxx-riscv.c:2727
+msgid "zfhmin' and `q', or `zhinxmin' and `zqinx"
+msgstr "zfhminÂ» Ñ– Â«qÂ» Ð°Ð±Ð¾ Â«zhinxminÂ» Ñ– Â«zqinx"
+
+#: elfxx-riscv.c:2733
+msgid "d' and `zfa"
+msgstr "dÂ» Ñ– Â«zfa"
+
+#: elfxx-riscv.c:2741
+msgid "q' and `zfa"
+msgstr "qÂ» Ñ– Â«zfa"
+
+#: elfxx-riscv.c:2749
+msgid "zfh' and `zfa"
+msgstr "zfhÂ» Ñ– Â«zfa"
+
+#: elfxx-riscv.c:2759
+msgid "zfh' and `zfa', or `zvfh' and `zfa"
+msgstr "zfhÂ» Ñ– Â«zfaÂ» Ð°Ð±Ð¾ Â«zvfhÂ» Ñ– Â«zfa"
+
+#: elfxx-riscv.c:2764
+msgid "zfh' or `zvfh"
+msgstr "zfhÂ» Ð°Ð±Ð¾ Â«zvfh"
+
+#: elfxx-riscv.c:2780
+msgid "zbb' or `zbkb"
+msgstr "zbbÂ» Ð°Ð±Ð¾ Â«zbkb"
+
+#: elfxx-riscv.c:2782
+msgid "zbc' or `zbkc"
+msgstr "zbcÂ» Ð°Ð±Ð¾ Â«zbkc"
+
+#: elfxx-riscv.c:2790
+msgid "zknd' or `zkne"
+msgstr "zkndÂ» Ð°Ð±Ð¾ Â«zkne"
+
+#: elfxx-riscv.c:2796
+msgid "v' or `zve64x' or `zve32x"
+msgstr "vÂ», Ð°Ð±Ð¾ Â«zve64xÂ», Ð°Ð±Ð¾ Â«zve32x"
+
+#: elfxx-riscv.c:2798
+msgid "v' or `zve64d' or `zve64f' or `zve32f"
+msgstr "vÂ», Ð°Ð±Ð¾ Â«zve64dÂ», Ð°Ð±Ð¾ Â«zve64fÂ», Ð°Ð±Ð¾ Â«zve32f"
+
+#: elfxx-riscv.c:2800
+msgid "zvbb"
+msgstr "zvbb"
+
+#: elfxx-riscv.c:2802
+msgid "zvbc"
+msgstr "zvbc"
+
+#: elfxx-riscv.c:2804
+msgid "zvkb"
+msgstr "zvkb"
+
+#: elfxx-riscv.c:2806
+msgid "zvkg"
+msgstr "zvkg"
+
+#: elfxx-riscv.c:2808
+msgid "zvkned"
+msgstr "zvkned"
+
+#: elfxx-riscv.c:2810
+msgid "zvknha' or `zvknhb"
+msgstr "zvknhaÂ» Ð°Ð±Ð¾ Â«zvknhb"
+
+#: elfxx-riscv.c:2812
+msgid "zvksed"
+msgstr "zvksed"
+
+#: elfxx-riscv.c:2814
+msgid "zvksh"
+msgstr "zvksh"
+
+#: elfxx-riscv.c:2818
+msgid "zcb' and `zba"
+msgstr "zcbÂ» Ñ– Â«zba"
+
+#: elfxx-riscv.c:2820
+msgid "zcb' and `zbb"
+msgstr "zcbÂ» Ñ– Â«zbb"
+
+#: elfxx-riscv.c:2822
+msgid "zcb' and `zmmul', or `zcb' and `m"
+msgstr "zcbÂ» Ñ– Â«zmmulÂ» Ð°Ð±Ð¾ Â«zcbÂ» Ñ– Â«m"
+
+#: elfxx-riscv.c:2826
+msgid "h"
+msgstr "h"
+
+#: elfxx-sparc.c:3021 elfnn-aarch64.c:5738
 #, c-format
 msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ STT_GNU_IFUNC Â«%sÂ» Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ”Ñ‚ÑŒÑ�Ñ� %s"
 
-#: elfxx-tilegx.c:4254
+#: elfxx-tilegx.c:4126
 #, c-format
 msgid "%pB: cannot link together %s and %s objects"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸ %s Ñ‚Ð° %s"
 
-#: elfxx-x86.c:578
+#: elfxx-x86.c:536 elfxx-x86.c:3440
 #, c-format
-msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
-msgstr "%P: %pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ñƒ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»\n"
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s' in %pB\n"
+msgstr "%F%P: %pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB\n"
+
+#: elfxx-x86.c:1043
+#, c-format
+msgid "%F%P: %pB: failed to allocate relative reloc record\n"
+msgstr "%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�\n"
+
+#: elfxx-x86.c:1399
+#, c-format
+msgid "%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ 64-Ð±Ñ–Ñ‚Ð¾Ð²Ñƒ ÐºÐ°Ñ€Ñ‚Ñƒ DT_RELR\n"
+
+#: elfxx-x86.c:1435
+#, c-format
+msgid "%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"
+msgstr "%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ 32-Ð±Ñ–Ñ‚Ð¾Ð²Ñƒ ÐºÐ°Ñ€Ñ‚Ñƒ DT_RELR\n"
+
+#: elfxx-x86.c:1574
+#, c-format
+msgid "%F%P: %pB: failed to allocate memory for section `%pA'\n"
+msgstr "%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ»\n"
+
+#: elfxx-x86.c:1761
+#, c-format
+msgid "%F%P: %pB: size of compact relative reloc section is changed: new (%lu) != old (%lu)\n"
+msgstr "%F%P: %pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾: Ð½Ð¾Ð²Ð¸Ð¹ (%lu) != Ñ�Ñ‚Ð°Ñ€Ð¸Ð¹ (%lu)\n"
+
+#: elfxx-x86.c:1783
+#, c-format
+msgid "%F%P: %pB: failed to allocate compact relative reloc section\n"
+msgstr "%F%P: %pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�\n"
+
+#: elfxx-x86.c:2230
+#, c-format
+msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n"
+msgstr "%F%P: %pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾\n"
 
-#: elfxx-x86.c:1027
+#: elfxx-x86.c:2312
 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
 msgstr "%P: %pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Â«%pAÂ»\n"
 
-#: elfxx-x86.c:1383
-msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n"
-msgstr "%P%X: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�, Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� IFUNC. Ð¡Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ð· -fPIC\n"
+#: elfxx-x86.c:3193
+msgid "%pB: %s (offset: 0x%v, info: 0x%v, addend: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (Ð·Ñ�ÑƒÐ²: 0x%v, Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñ�Ñ‚Ñ–: 0x%v, Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº: 0x%v) Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñƒ %pB\n"
+
+#: elfxx-x86.c:3199
+msgid "%pB: %s (offset: 0x%v, info: 0x%v) against '%s' for section '%pA' in %pB\n"
+msgstr "%pB: %s (Ð·Ñ�ÑƒÐ²: 0x%v, Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñ�Ñ‚Ñ–: 0x%v) Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñƒ %pB\n"
 
-#: elfxx-x86.c:2384
+#: elfxx-x86.c:3819
 #, c-format
 msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– (0x%x) x86: 0x%x>"
 
-#: elfxx-x86.c:2609
-msgid "%F%P: failed to create GNU property section\n"
-msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚ÐµÐ¹ GNU\n"
+#: elfxx-x86.c:4166
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ %s\n"
+
+#: elfxx-x86.c:4167
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ %s\n"
+
+#: elfxx-x86.c:4230
+msgid "IBT and SHSTK properties"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– IBT Ñ– SHSTK"
+
+#: elfxx-x86.c:4232
+msgid "IBT property"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ IBT"
+
+#: elfxx-x86.c:4234
+msgid "SHSTK property"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ SHSTK"
+
+#: elfxx-x86.c:4239
+msgid "LAM_U48 property"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ LAM_U48"
+
+#: elfxx-x86.c:4244
+msgid "LAM_U57 property"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ LAM_U57"
 
-#: elfxx-x86.c:2614
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€\n"
-
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:4413
 msgid "%F%P: failed to create VxWorks dynamic sections\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ VxWorks\n"
 
-#: elfxx-x86.c:2769
+#: elfxx-x86.c:4422
 msgid "%F%P: failed to create GOT sections\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ GOT\n"
 
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:4440
 msgid "%F%P: failed to create ifunc sections\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ ifunc\n"
 
-#: elfxx-x86.c:2828
+#: elfxx-x86.c:4477
 msgid "%F%P: failed to create GOT PLT section\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT GOT\n"
 
-#: elfxx-x86.c:2849
+#: elfxx-x86.c:4496
 msgid "%F%P: failed to create IBT-enabled PLT section\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT Ñ–Ð· ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼ IBT\n"
 
-#: elfxx-x86.c:2864
-msgid "%F%P: failed to create BND PLT section\n"
-msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT BND\n"
-
-#: elfxx-x86.c:2885
+#: elfxx-x86.c:4516
 msgid "%F%P: failed to create PLT .eh_frame section\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .eh_frame PLT\n"
 
-#: elfxx-x86.c:2898
+#: elfxx-x86.c:4529
 msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .eh_frame PLT GOT\n"
 
-#: elfxx-x86.c:2912
+#: elfxx-x86.c:4543
 msgid "%F%P: failed to create the second PLT .eh_frame section\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .eh_frame PLT\n"
 
+#: elfxx-x86.c:4563
+msgid "%F%P: failed to create PLT .sframe section\n"
+msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .sframe PLT\n"
+
+#: elfxx-x86.c:4578
+msgid "%F%P: failed to create second PLT .sframe section\n"
+msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .sframe PLT\n"
+
+#: elfxx-x86.c:4618
+msgid "%X%P: attempted static link of dynamic object `%pB'\n"
+msgstr "%X%P: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¾Ð±'Ñ”ÐºÑ‚Ð° Â«%pBÂ»\n"
+
 #: ihex.c:230
 #, c-format
 msgid "%pB:%d: unexpected character `%s' in Intel Hex file"
@@ -5101,379 +5965,407 @@ msgstr "%pB:%d: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹
 msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)"
 msgstr "%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð° Ñ�ÑƒÐ¼Ð° Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel (Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� %u, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ %u)"
 
-#: ihex.c:394
+#: ihex.c:393
 #, c-format
 msgid "%pB:%u: bad extended address record length in Intel Hex file"
 msgstr "%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel"
 
-#: ihex.c:412
+#: ihex.c:411
 #, c-format
 msgid "%pB:%u: bad extended start address length in Intel Hex file"
 msgstr "%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel"
 
-#: ihex.c:430
+#: ihex.c:429
 #, c-format
 msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
 msgstr "%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð»Ñ–Ð½Ñ–Ð¹Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel"
 
-#: ihex.c:448
+#: ihex.c:447
 #, c-format
 msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
 msgstr "%pB:%u: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— Ð»Ñ–Ð½Ñ–Ð¹Ð½Ð¾Ñ— Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸ Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel"
 
-#: ihex.c:466
+#: ihex.c:465
 #, c-format
 msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
 msgstr "%pB:%u: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ ihex %u Ñƒ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Intel"
 
-#: ihex.c:585
+#: ihex.c:581
 #, c-format
 msgid "%pB: internal error in ihex_read_section"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ ihex_read_section"
 
-#: ihex.c:619
+#: ihex.c:614
 #, c-format
 msgid "%pB: bad section length in ihex_read_section"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ ihex_read_section"
 
-#: ihex.c:793
+#: ihex.c:785
 #, c-format
 msgid "%pB 64-bit address %#<PRIx64> out of range for Intel Hex file"
 msgstr "%pB: 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° %#<PRIx64> Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° Intel"
 
-#: ihex.c:852
+#: ihex.c:843
 #, c-format
 msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
 msgstr "%pB: Ð°Ð´Ñ€ÐµÑ�Ð° %#<PRIx64> Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ ÑˆÑ–Ñ�Ñ‚Ð½Ð°Ð´Ñ†Ñ�Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° Intel"
 
-#: libbfd.c:937
+#: libbfd.c:1058
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA"
 
-#: libbfd.c:1101
-#, c-format
-msgid "Deprecated %s called at %s line %d in %s\n"
-msgstr "Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s Ñƒ %s, Ñ€Ñ�Ð´Ð¾Ðº %d Ñƒ %s\n"
-
-#: libbfd.c:1104
-#, c-format
-msgid "Deprecated %s called\n"
-msgstr "Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s\n"
-
-#: linker.c:1697
+#: linker.c:1713
 #, c-format
 msgid "%pB: indirect symbol `%s' to `%s' is a loop"
 msgstr "%pB: Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ» Ñ” Ñ†Ð¸ÐºÐ»Ð¾Ð¼"
 
-#: linker.c:2567
+#: linker.c:1793
+msgid "%P: %pB: note: the message above does not take linker garbage collection into account\n"
+msgstr "%P: %pB: Ð·Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ�: Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ðµ Ð²Ð¸Ñ‰Ðµ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ� Ð½Ðµ Ð±ÐµÑ€Ðµ Ð´Ð¾ ÑƒÐ²Ð°Ð³Ð¸ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ñ�Ð¼Ñ–Ñ‚Ñ‚Ñ� Ð·Ð°Ñ�Ð¾Ð±Ð¾Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�\n"
+
+#: linker.c:2591
 #, c-format
 msgid "attempt to do relocatable link with %s input and %s output"
 msgstr "Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð·Ð²â€™Ñ�Ð·ÐºÑƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð²Ñ…Ñ–Ð´Ð½Ð¸Ð¼ %s Ñ– Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ð¼ %s"
 
-#: linker.c:2853
+#: linker.c:2870
 #, c-format
 msgid "%pB: ignoring duplicate section `%pA'\n"
 msgstr "%pB: Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»\n"
 
-#: linker.c:2863 linker.c:2873
+#: linker.c:2880 linker.c:2890
 #, c-format
 msgid "%pB: duplicate section `%pA' has different size\n"
 msgstr "%pB: Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð¼Ð°Ñ” Ñ–Ð½ÑˆÐ¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€\n"
 
-#: linker.c:2882 linker.c:2888
+#: linker.c:2904 linker.c:2912
 #, c-format
 msgid "%pB: could not read contents of section `%pA'\n"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»\n"
 
-#: linker.c:2893
+#: linker.c:2921
 #, c-format
 msgid "%pB: duplicate section `%pA' has different contents\n"
 msgstr "%pB: Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð¼Ð°Ñ” Ñ–Ð½ÑˆÐ¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚\n"
 
-#: linker.c:3407
+#: linker.c:3440
 #, c-format
 msgid "%pB: compiled for a big endian system and target is little endian"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸ Ð· Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð², Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ñ” Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð° Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
-#: linker.c:3410
+#: linker.c:3443
 #, c-format
 msgid "%pB: compiled for a little endian system and target is big endian"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸ Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð², Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ñ” Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð° Ð·Ñ– Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
-#: mach-o.c:632
+#: mach-o-arm.c:169 mach-o-arm.c:301
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð°Ñ€Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ mach-o ARM: reloc Ñ” Ð¿ÐµÑ€ÑˆÐ¸Ð¼ reloc"
+
+#: mach-o-arm.c:185
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð°Ñ€Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:200
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:215
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:230
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:262
+#, c-format
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d (pcrel: %d)"
+
+#: mach-o-arm.c:332
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� mach-o ARM: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %d"
+
+#: mach-o.c:640
 #, c-format
 msgid "<unknown mask flags>"
 msgstr "<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ð¼Ð°Ñ�ÐºÑƒÐ²Ð°Ð½Ð½Ñ�>"
 
-#: mach-o.c:687
+#: mach-o.c:695
 msgid " (<unknown>)"
 msgstr " (<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾>)"
 
-#: mach-o.c:698
+#: mach-o.c:707
 #, c-format
 msgid " MACH-O header:\n"
 msgstr "Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº MACH-O:\n"
 
-#: mach-o.c:699
+#: mach-o.c:708
 #, c-format
 msgid "   magic:      %#lx\n"
 msgstr "  magic:       %#lx\n"
 
-#: mach-o.c:700
+#: mach-o.c:709
 #, c-format
 msgid "   cputype:    %#lx (%s)\n"
 msgstr " Ñ‚Ð¸Ð¿ Ð¿Ñ€Ð¾Ñ†. : %#lx (%s)\n"
 
-#: mach-o.c:702
+#: mach-o.c:711
 #, c-format
 msgid "   cpusubtype: %#lx%s\n"
 msgstr " Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿ Ð¿Ñ€Ð¾Ñ†.: %#lx (%s)\n"
 
-#: mach-o.c:704
+#: mach-o.c:713
 #, c-format
 msgid "   filetype:   %#lx\n"
 msgstr " Ñ‚Ð¸Ð¿ Ñ„Ð°Ð¹Ð»Ð° : %#lx\n"
 
-#: mach-o.c:705
+#: mach-o.c:714
 #, c-format
 msgid "   ncmds:      %#lx\n"
 msgstr " ÐºÑ‚ÑŒ_ÐºÐ¾Ð¼Ð°Ð½Ð´: %#lx\n"
 
-#: mach-o.c:706
+#: mach-o.c:715
 #, c-format
 msgid "   sizeocmds:  %#lx\n"
 msgstr " Ñ€Ð¾Ð·Ð¼Ñ–Ñ€_ÐºÐ¼Ð´: %#lx\n"
 
-#: mach-o.c:707
+#: mach-o.c:716
 #, c-format
 msgid "   flags:      %#lx\n"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: %lx\n"
 
-#: mach-o.c:708
+#: mach-o.c:717
 #, c-format
 msgid "   version:    %x\n"
 msgstr "  Ð²ÐµÑ€Ñ�Ñ–Ñ�:      %x\n"
 
 #. Urg - what has happened ?
-#: mach-o.c:743
+#: mach-o.c:752
 #, c-format
 msgid "incompatible cputypes in mach-o files: %ld vs %ld"
 msgstr "Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ‚Ð¸Ð¿Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð² Ñƒ Ñ„Ð°Ð¹Ð»Ð°Ñ… mach-o: %ld Ñ– %ld"
 
-#: mach-o.c:912
+#: mach-o.c:921
 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
 msgstr "bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸"
 
-#: mach-o.c:2108
+#: mach-o.c:1513
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� mach-o: Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²"
+
+#: mach-o.c:2155
 msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands."
 msgstr "Ð²Ð¸Ð±ÐµÑ‡Ñ‚Ðµ, modtab, toc Ñ‚Ð° extrefsyms Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´ dysymtab Ñƒ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ–Ð¹ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ‰Ðµ Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾."
 
-#: mach-o.c:2554
+#: mach-o.c:2603
 #, c-format
 msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
 msgstr "mach-o: Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² (%u), Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð° ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 255,\n"
 
-#: mach-o.c:2661
+#: mach-o.c:2695
 #, c-format
 msgid "unable to allocate data for load command %#x"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð´Ð°Ð½Ñ– Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� %#x"
 
-#: mach-o.c:2766
+#: mach-o.c:2800
 #, c-format
 msgid "unable to write unknown load command %#x"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#x"
 
-#: mach-o.c:2950
+#: mach-o.c:2984
 #, c-format
 msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%<PRIx64>) Ð½Ð¸Ð¶Ñ‡Ðµ Ð·Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° (%<PRIx64>)"
 
-#: mach-o.c:3092
+#: mach-o.c:3126
 #, c-format
 msgid "unable to layout unknown load command %#x"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#x"
 
-#: mach-o.c:3628
+#: mach-o.c:3661
 #, c-format
-msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_32: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lx, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ Ð½ÑŒÐ¾Ð³Ð¾ 32"
+msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lx"
 
-#: mach-o.c:3671
+#: mach-o.c:3704
 #, c-format
-msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead"
-msgstr "bfd_mach_o_read_section_32: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lx, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ Ð½ÑŒÐ¾Ð³Ð¾ 32"
+msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx"
+msgstr "bfd_mach_o_read_section_32: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lx"
 
-#: mach-o.c:3722
+#: mach-o.c:3755
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u"
 msgstr "bfd_mach_o_read_symtab_symbol: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %d Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñƒ %u"
 
-#: mach-o.c:3741
+#: mach-o.c:3774
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
 msgstr "bfd_mach_o_read_symtab_symbol: Ð½Ð°Ð·Ð²Ð° Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ (%lu >= %u)"
 
-#: mach-o.c:3824
+#: mach-o.c:3857
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %d (max %lu): Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÑ”Ð¼Ð¾ Ñƒ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�"
 
-#: mach-o.c:3843
+#: mach-o.c:3876
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined"
 msgstr "bfd_mach_o_read_symtab_symbol: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿Ð¾Ð»Ñ� 0x%x: Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÑ”Ð¼Ð¾ Ñƒ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�"
 
-#: mach-o.c:3920
-msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
-msgstr "bfd_mach_o_read_symtab_symbols: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð¾Ð±Ð»Ð°Ñ�Ñ‚ÑŒ Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²"
-
-#: mach-o.c:4931
+#: mach-o.c:5075
 #, c-format
 msgid "%pB: unknown load command %#x"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#x"
 
-#: mach-o.c:5122
+#: mach-o.c:5274
 #, c-format
 msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
 msgstr "bfd_mach_o_scan: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°, 0x%lx/0x%lx"
 
-#: mach-o.c:5227
+#: mach-o.c:5396
 #, c-format
 msgid "unknown header byte-order value %#x"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ, %#x"
 
-#: merge.c:878
+#: merge.c:1118
 #, c-format
 msgid "%pB: access beyond end of merged section (%<PRId64>)"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%<PRId64>)"
 
-#: mmo.c:476
-#, c-format
-msgid "%pB: no core to allocate section name %s"
-msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð½Ð°Ð·Ð²Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
-
-#: mmo.c:541
+#: mmo.c:535
 #, c-format
 msgid "%pB: no core to allocate a symbol %d bytes long"
 msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¾ÑŽ %d Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
-#: mmo.c:955
+#: mmo.c:956
 #, c-format
 msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
 msgstr "%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð½Ð°Ð´Ñ–Ñ�Ð»Ð°Ñ‚Ð¸ Ð´Ð°Ð½Ñ– Ð½Ð° Ð½ÐµÐºÑ€Ð°Ñ‚Ð½Ñƒ Ð´Ð¾ 4 Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>"
 
-#: mmo.c:1252
+#: mmo.c:1251
 #, c-format
 msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð´Ð»Ñ� $255 Ð½Ðµ Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” Â«MainÂ»\n"
 
-#: mmo.c:1399
+#: mmo.c:1398
 #, c-format
 msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
 msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° ÑˆÐ¸Ñ€Ð¾ÐºÐ° Ð¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² 0x%02X 0x%02X Ð¿Ñ–Ñ�Ð»Ñ� Ð½Ð°Ð·Ð²Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ð¿Ð¾Ñ‡Ð¸Ð½Ð°ÑŽÑ‡Ð¸ Ð· Â«%sÂ»\n"
 
-#: mmo.c:1633
+#: mmo.c:1414
+#, c-format
+msgid "%pB: symbol name exceeds given max length of %d"
+msgstr "%pB: Ð½Ð°Ð·Ð²Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð·Ð°Ð´Ð°Ð½Ñƒ Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñƒ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ñƒ %d"
+
+#: mmo.c:1643
 #, c-format
 msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� lopcode, Â«%dÂ»\n"
 
-#: mmo.c:1644
+#: mmo.c:1654
 #, c-format
 msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� YZ = 1, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ YZ = %d Ð´Ð»Ñ� lop_quote\n"
 
-#: mmo.c:1682
+#: mmo.c:1698
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� z = 1 Ð°Ð±Ð¾ z = 2, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ z = %d Ð´Ð»Ñ� lop_loc\n"
 
-#: mmo.c:1733
+#: mmo.c:1749
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� z = 1 Ð°Ð±Ð¾ z = 2, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ z = %d Ð´Ð»Ñ� lop_fixo\n"
 
-#: mmo.c:1774
+#: mmo.c:1798
 #, c-format
 msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� y=0, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ y = %d Ð´Ð»Ñ� lop_fixrx\n"
 
-#: mmo.c:1785
+#: mmo.c:1809
 #, c-format
 msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� z = 16 Ð°Ð±Ð¾ z = 24, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ z = %d Ð´Ð»Ñ� lop_fixrx\n"
 
-#: mmo.c:1810
+#: mmo.c:1834
 #, c-format
 msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ð¼ Ð±Ð°Ð¹Ñ‚Ð¾Ð¼ Ñ�Ð»Ð¾Ð²Ð° Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ 0 Ð°Ð±Ð¾ 1, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ Ð¶ %d Ð´Ð»Ñ� lop_fixrx\n"
 
-#: mmo.c:1835
+#: mmo.c:1863
 #, c-format
 msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ� Ñ„Ð°Ð¹Ð»Ð° Ð· Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %d, %d Ð±Ð°Ð¹Ñ‚Ñ–Ð²\n"
 
-#: mmo.c:1857
+#: mmo.c:1885
 #, c-format
 msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð° %d, Â«%sÂ», ÑƒÐ¶Ðµ Ð·Ð´Ñ–Ð¹Ñ�Ð½ÐµÐ½Ð¾ Ð²Ñ…Ñ–Ð´ Ñ�Ðº Ñƒ Â«%sÂ»\n"
 
-#: mmo.c:1871
+#: mmo.c:1900
 #, c-format
 msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð½Ð°Ð·Ð²Ñƒ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° %d Ð½Ðµ Ð±ÑƒÐ»Ð¾ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð´Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�\n"
 
-#: mmo.c:1978
+#: mmo.c:2012
 #, c-format
 msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð¿Ð¾Ð»Ñ� y Ñ– z lop_stab Ñ” Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼Ð¸, y: %d, z: %d\n"
 
-#: mmo.c:2015
+#: mmo.c:2049
 #, c-format
 msgid "%pB: invalid mmo file: lop_end not last item in file\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: lop_end Ð½Ðµ Ñ” Ð¾Ñ�Ñ‚Ð°Ð½Ð½Ñ–Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ð¾Ð¼ Ñƒ Ñ„Ð°Ð¹Ð»Ñ–\n"
 
-#: mmo.c:2029
+#: mmo.c:2063
 #, c-format
 msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: YZ lop_end (%ld) Ð½Ðµ Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ñ‚ÐµÑ‚Ñ€Ð°Ð´ Ð´Ð¾ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ lop_stab (%ld)\n"
 
-#: mmo.c:2740
+#: mmo.c:2776
 #, c-format
 msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»\n"
 
-#: mmo.c:2983
+#: mmo.c:3015
 #, c-format
-msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n"
-msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: Â«MainÂ» Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñƒ %s, Ð° Ð½Ðµ Ñƒ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %s\n"
+msgid "%pB: bad symbol definition: `Main' set to %<PRIx64> rather than the start address %<PRIx64>\n"
+msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: Â«MainÂ» Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñƒ %<PRIx64>, Ð° Ð½Ðµ Ñƒ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %<PRIx64>\n"
 
-#: mmo.c:3082
+#: mmo.c:3114
 #, c-format
 msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ Ð´Ð»Ñ� mmo, Ñ—Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 65535 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ñ… Ñ�Ð»Ð¾Ð²Ð°: %d. Ð‘ÑƒÐ´Ðµ Ð²Ð¸Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Â«MainÂ».\n"
 
-#: mmo.c:3128
+#: mmo.c:3160
 #, c-format
 msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð· %d Ð´Ð¾ %d Ñ�Ð»Ñ–Ð²\n"
 
-#: mmo.c:3181
+#: mmo.c:3213
 #, c-format
 msgid "%pB: internal error, internal register section %pA had contents\n"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², %pA, Ð¼Ñ–Ñ�Ñ‚Ð¸Ð² Ð´Ð°Ð½Ñ–\n"
 
-#: mmo.c:3232
+#: mmo.c:3264
 #, c-format
 msgid "%pB: no initialized registers; section length 0\n"
 msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 0\n"
 
-#: mmo.c:3239
+#: mmo.c:3271
 #, c-format
 msgid "%pB: too many initialized registers; section length %<PRId64>"
 msgstr "%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð²; Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ â€” %<PRId64>"
 
-#: mmo.c:3244
+#: mmo.c:3276
 #, c-format
 msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð´Ð»Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ %<PRId64>: %#<PRIx64>"
@@ -5483,48 +6375,55 @@ msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð¿Ð¾Ñ‡
 msgid "unhandled OSF/1 core file section type %d"
 msgstr "Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ„Ð°Ð¹Ð»Ð° core OSF/1, %d"
 
-#: pef.c:527
+#: pdp11.c:1588
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½Ð°ÐºÐ»Ð°Ð´ÐºÑƒ (Ð½ÐµÐ¼Ð°Ñ” Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð½Ð°ÐºÐ»Ð°Ð´Ð¾Ðº)"
+
+#: pef.c:531
 #, c-format
 msgid "bfd_pef_scan: unknown architecture 0x%lx"
 msgstr "bfd_pef_scan: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°, 0x%lx"
 
-#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220
+#: pei-x86_64.c:174 pei-x86_64.c:228 pei-x86_64.c:238 pei-x86_64.c:263
+#: pei-x86_64.c:275 pei-x86_64.c:289 pei-x86_64.c:307 pei-x86_64.c:319
+#: pei-x86_64.c:331
 #, c-format
 msgid "warning: corrupt unwind data\n"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð´Ð°Ð½Ñ– Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ�\n"
 
 #. PR 17512: file: 2245-7442-0.004.
-#: pei-x86_64.c:315
+#: pei-x86_64.c:352
 #, c-format
 msgid "Unknown: %x"
 msgstr "Ð�ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹: %x"
 
-#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384
+#: pei-x86_64.c:403 pei-x86_64.c:413 pei-x86_64.c:422
 #, c-format
 msgid "warning: xdata section corrupt\n"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» xdata\n"
 
-#: pei-x86_64.c:439
+#: pei-x86_64.c:477
 #, c-format
 msgid "Too many unwind codes (%ld)\n"
 msgstr "Ð—Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ ÐºÐ¾Ð´Ñ–Ð² Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ� (%ld)\n"
 
-#: pei-x86_64.c:529
+#: pei-x86_64.c:563
 #, c-format
 msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
 msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%ld) Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %d\n"
 
-#: pei-x86_64.c:536
+#: pei-x86_64.c:570
 #, c-format
 msgid "Warning: %s section size is zero\n"
 msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼\n"
 
-#: pei-x86_64.c:551
+#: pei-x86_64.c:585
 #, c-format
 msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
 msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%ld) Ñ” Ð¼ÐµÐ½ÑˆÐ¸Ð¼ Ð·Ð° Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%ld)\n"
 
-#: pei-x86_64.c:560
+#: pei-x86_64.c:594
 #, c-format
 msgid ""
 "\n"
@@ -5533,12 +6432,12 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s)\n"
 
-#: pei-x86_64.c:563
+#: pei-x86_64.c:597
 #, c-format
 msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
 msgstr "vma:\t\t\tÐŸÐ¾Ñ‡Ð°Ñ‚ÐºÐ�Ð´Ñ€ÐµÑ�Ð°\t ÐšÑ–Ð½Ñ†Ð�Ð´Ñ€ÐµÑ�Ð°s\t  Ð”Ð°Ð½Ñ–Unwind\n"
 
-#: pei-x86_64.c:692
+#: pei-x86_64.c:722
 #, c-format
 msgid ""
 "\n"
@@ -5548,46 +6447,65 @@ msgstr ""
 "Ð”Ð°Ð¼Ð¿ %s\n"
 
 #. XXX code yet to be written.
-#: peicode.h:775
+#: peicode.h:820
 #, c-format
 msgid "%pB: unhandled import type; %x"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x"
 
-#: peicode.h:781
+#: peicode.h:826
 #, c-format
 msgid "%pB: unrecognized import type; %x"
 msgstr "%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x"
 
-#: peicode.h:796
+#: peicode.h:841
 #, c-format
 msgid "%pB: unrecognized import name type; %x"
 msgstr "%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð° Ð½Ð°Ð·Ð²Ð° Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x"
 
-#: peicode.h:1211
+#: peicode.h:1280
 #, c-format
 msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
 msgstr "%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ (0x%x) Ñƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Import Library Format"
 
-#: peicode.h:1224
+#: peicode.h:1293
 #, c-format
 msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
 msgstr "%pB: Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹, Ð°Ð»Ðµ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ (0x%x) Ñƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Import Library Format"
 
-#: peicode.h:1242
+#: peicode.h:1311
 #, c-format
 msgid "%pB: size field is zero in Import Library Format header"
 msgstr "%pB: Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Import Library Format Ð¿Ð¾Ð»Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼"
 
-#: peicode.h:1274
+#: peicode.h:1337
 #, c-format
 msgid "%pB: string not null terminated in ILF object file"
 msgstr "%pB: Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– ILF Ñ€Ñ�Ð´Ð¾Ðº Ð½Ðµ Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: peicode.h:1330
+#: peicode.h:1393
 #, c-format
 msgid "%pB: error: debug data ends beyond end of debug directory"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ñ– Ð´Ð°Ð½Ñ– Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ"
 
+#: peicode.h:1563
+#, c-format
+msgid "%pB: adjusting invalid SectionAlignment"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ð³ÑƒÑ”Ð¼Ð¾ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñƒ SectionAlignment"
+
+#: peicode.h:1573
+#, c-format
+msgid "%pB: adjusting invalid FileAlignment"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ð³ÑƒÑ”Ð¼Ð¾ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ FileAlignment"
+
+#: peicode.h:1581
+#, c-format
+msgid "%pB: invalid NumberOfRvaAndSizes"
+msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ NumberOfRvaAndSizes"
+
+#: plugin.c:258
+msgid "plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr "Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ð´Ð¾Ð´Ð°Ñ‚ÐºÑ–Ð²: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ñ–Ð² Ñ„Ð°Ð¹Ð»Ñ–Ð². Ð¡Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð·Ð¼ÐµÐ½ÑˆÐ¸Ñ‚Ð¸ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¾Ð±'Ñ”ÐºÑ‚Ñ–Ð²/Ð°Ñ€Ñ…Ñ–Ð²Ñ–Ð²\n"
+
 #: ppcboot.c:392
 #, c-format
 msgid ""
@@ -5641,32 +6559,17 @@ msgstr "Ð¡ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ[%d]
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
 msgstr "Ð”Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ[%d] = 0x%.8lx (%ld)\n"
 
-#: reloc.c:8232
+#: reloc.c:8504
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr "ÐŸÑ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ INPUT_SECTION_FLAGS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: reloc.c:8333
-#, c-format
-msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
-msgstr "%X%P: %pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð·Ñ�ÑƒÐ²Ñƒ %V Ð½Ðµ Ð¼Ð°Ñ” Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�\n"
-
-#: reloc.c:8420
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
-msgstr "%X%P: %pB(%pA): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
-
-#: reloc.c:8429
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
-msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð¿Ð¾Ð²ÐµÑ€Ñ‚Ð°Ñ” Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %x\n"
-
-#: reloc.c:8491
+#: reloc.c:8770
 #, c-format
 msgid "%pB: unrecognized relocation type %#x in section `%pA'"
 msgstr "%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚Ð¸Ð¿Ñƒ %#x Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»"
 
 #. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8495
+#: reloc.c:8774
 #, c-format
 msgid "is this version of the linker - %s - out of date ?"
 msgstr "Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ñ†Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° - %s - Ñ” Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¾ÑŽ?"
@@ -5676,7 +6579,23 @@ msgstr "Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ñ†Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ
 msgid "%pB: warning core file truncated"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ„Ð°Ð¹Ð» core Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾"
 
-#: som.c:5478
+#: som.c:3002
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of order"
+msgstr "%pB(%pA+%#<PRIx64>): %s Ð·Ñ�ÑƒÐ² Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð·Ð° Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼"
+
+#: som.c:3015
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation offset out of range"
+msgstr "%pB(%pA+%#<PRIx64>): Ð·Ñ�ÑƒÐ² Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ð¿Ð¾Ð·Ð° Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼"
+
+#. User has specified a subspace without its containing space.
+#: som.c:5405
+#, c-format
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr "%pB[%pA]: Ð½ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ Ð´Ð»Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ %pA"
+
+#: som.c:5451
 #, c-format
 msgid ""
 "\n"
@@ -5685,7 +6604,7 @@ msgstr ""
 "\n"
 "Ð”Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�\n"
 
-#: som.c:5787
+#: som.c:5760
 msgid "som_sizeof_headers unimplemented"
 msgstr "som_sizeof_headers Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
@@ -5699,17 +6618,17 @@ msgstr "%pB:%d: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹
 msgid "%pB:%d: byte count %d too small"
 msgstr "%pB:%d: ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² %d Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ"
 
-#: srec.c:581 srec.c:615
+#: srec.c:580 srec.c:614
 #, c-format
 msgid "%pB:%d: bad checksum in S-record file"
 msgstr "%pB:%d: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð° Ñ�ÑƒÐ¼Ð° Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² S"
 
-#: stabs.c:279
+#: stabs.c:308
 #, c-format
 msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
 msgstr "%pB(%pA+%#lx): Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– stabs Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ñ�Ð´ÐºÐ°"
 
-#: syms.c:1091
+#: syms.c:1112
 msgid "unsupported .stab relocation"
 msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� .stab"
 
@@ -5717,65 +6636,74 @@ msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿Ð
 msgid "corrupt EIHD record - size is too small"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EIHD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
 
-#: vms-alpha.c:660
+#: vms-alpha.c:665
 #, c-format
 msgid "unable to read EIHS record at offset %#x"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� EIHS Ð·Ñ– Ð·Ñ�ÑƒÐ²Ð¾Ð¼ %#x"
 
-#: vms-alpha.c:1173
+#: vms-alpha.c:1157
+msgid "record is too small for symbol name length"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ� Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼ Ð´Ð»Ñ� Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ Ð½Ð°Ð·Ð²Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
+
+#: vms-alpha.c:1190
 #, c-format
 msgid "corrupt EGSD record: its size (%#x) is too small"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ð¹Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
 
-#: vms-alpha.c:1197
+#: vms-alpha.c:1214
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)"
-msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð·Ð° Ð·Ð°Ð»Ð¸ÑˆÐ¾Ðº Ð¼Ñ–Ñ�Ñ†Ñ� (%#x)"
+msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
+msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð¸Ð¿Ñƒ %d EGSD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð·Ð° Ð·Ð°Ð»Ð¸ÑˆÐ¾Ðº Ð¼Ñ–Ñ�Ñ†Ñ� (%#x)"
 
-#: vms-alpha.c:1205
+#: vms-alpha.c:1224
 #, c-format
-msgid "corrupt EGSD record: size (%#x) is too small"
-msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
+msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð¸Ð¿Ñƒ %d EGSD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
 
-#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390
+#: vms-alpha.c:1366
 #, c-format
 msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ð²Ð¼Ñ–Ñ�Ñ‚ Ð¹Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ� psindx Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (%#lx)"
 
-#: vms-alpha.c:1419
+#: vms-alpha.c:1441
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿ EGSD, %d"
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1474
 #, c-format
 msgid "stack overflow (%d) in _bfd_vms_push"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° (%d) Ñƒ _bfd_vms_push"
 
-#: vms-alpha.c:1465
+#: vms-alpha.c:1488
 msgid "stack underflow in _bfd_vms_pop"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ñƒ _bfd_vms_pop"
 
+#: vms-alpha.c:1562
+#, c-format
+msgid "dst_define_location %u too large"
+msgstr "dst_define_location %u Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼"
+
 #. These names have not yet been added to this switch statement.
-#: vms-alpha.c:1707
+#: vms-alpha.c:1765
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ETIR, %d"
 
-#: vms-alpha.c:1738
+#: vms-alpha.c:1796
 msgid "corrupt vms value"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� vms"
 
-#: vms-alpha.c:1866
+#: vms-alpha.c:1927
 msgid "corrupt ETIR record encountered"
 msgstr "Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� ETIR"
 
-#: vms-alpha.c:1923
+#: vms-alpha.c:1989
 #, c-format
 msgid "bad section index in %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ %s"
 
-#: vms-alpha.c:1936
+#: vms-alpha.c:2003
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° STA, %s"
@@ -5785,1468 +6713,1479 @@ msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° ÐºÐ
 #. Rotate.
 #. Redefine symbol to current location.
 #. Define a literal.
-#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396
+#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557
 #, c-format
 msgid "%s: not supported"
 msgstr "%s: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: vms-alpha.c:2122
+#: vms-alpha.c:2217
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-#: vms-alpha.c:2380
+#: vms-alpha.c:2382 vms-alpha.c:2397
+#, c-format
+msgid "invalid %s"
+msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ %s"
+
+#. Divide by zero is supposed to give a result of zero,
+#. and a non-fatal warning message.
+#: vms-alpha.c:2457
+#, c-format
+msgid "%s divide by zero"
+msgstr "%s Ð´Ñ–Ð»ÐµÐ½Ð½Ñ� Ð½Ð° Ð½ÑƒÐ»ÑŒ"
+
+#: vms-alpha.c:2523
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� %s Ð· ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð°Ð¼Ð¸"
 
-#: vms-alpha.c:2414
+#: vms-alpha.c:2581
 #, c-format
 msgid "reserved cmd %d"
 msgstr "Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¾Ð²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %d"
 
-#: vms-alpha.c:2498
+#: vms-alpha.c:2665
 msgid "corrupt EEOM record - size is too small"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EEOM: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
 
-#: vms-alpha.c:2507
+#: vms-alpha.c:2674
 msgid "object module not error-free !"
 msgstr "Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ– Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸!"
 
-#: vms-alpha.c:3831
+#: vms-alpha.c:4012
 #, c-format
 msgid "SEC_RELOC with no relocs in section %pA"
 msgstr "SEC_RELOC Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pA"
 
-#: vms-alpha.c:3883 vms-alpha.c:4097
+#: vms-alpha.c:4064 vms-alpha.c:4292
 #, c-format
 msgid "size error in section %pA"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ– Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pA"
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4235
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr "Ñ„Ð°Ð»ÑŒÑˆÐ¸Ð²Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ALPHA_R_BSR"
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4278
 #, c-format
 msgid "unhandled relocation %s"
 msgstr "Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4643
 #, c-format
 msgid "unknown source command %d"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %d"
 
-#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456
-#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501
-#: vms-alpha.c:4507
+#: vms-alpha.c:4795 vms-alpha.c:4800 vms-alpha.c:4805 vms-alpha.c:4810
+#: vms-alpha.c:4815 vms-alpha.c:4838 vms-alpha.c:4843 vms-alpha.c:4848
+#: vms-alpha.c:4853
 #, c-format
 msgid "%s not implemented"
 msgstr "%s Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4889
 #, c-format
 msgid "unknown line command %d"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %d"
 
-#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059
-#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097
+#: vms-alpha.c:5328
+msgid "corrupt reloc record"
+msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
+
+#: vms-alpha.c:5358 vms-alpha.c:5376 vms-alpha.c:5393 vms-alpha.c:5411
+#: vms-alpha.c:5424 vms-alpha.c:5436 vms-alpha.c:5449
 #, c-format
 msgid "unknown reloc %s + %s"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s + %s"
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5508
 #, c-format
 msgid "unknown reloc %s"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5522
 msgid "invalid section index in ETIR"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ ETIR"
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5531
 msgid "relocation for non-REL psect"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� psect, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ñ” REL"
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5584
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ– %s"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:6003
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%d) Ñ” *Ð�Ð•Ð’Ð†Ð”ÐžÐœÐ˜Ðœ*"
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:6119
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (Ð´Ð¾Ð²Ð¶=%u): "
 
-#: vms-alpha.c:5757
+#: vms-alpha.c:6124
 #, c-format
 msgid "   Error: The length is less than the length of an EMH record\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ” Ð¼ÐµÐ½ÑˆÐ¾ÑŽ Ð·Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ EMH\n"
 
-#: vms-alpha.c:5774
+#: vms-alpha.c:6141
 #, c-format
 msgid "   Error: The record length is less than the size of an EMH_MHD record\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ” Ð¼ÐµÐ½ÑˆÐ¾ÑŽ Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ EMH_MHD\n"
 
-#: vms-alpha.c:5777
+#: vms-alpha.c:6144
 #, c-format
 msgid "Module header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:6145
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   Ñ€Ñ–Ð²ÐµÐ½ÑŒ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚. : %u\n"
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:6146
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   Ð¼Ð°ÐºÑ�. Ñ€Ð¾Ð·Ð¼. Ð·Ð°Ð¿Ð¸Ñ�Ñƒ: %u\n"
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:6152
 #, c-format
 msgid "   Error: The module name is missing\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð½Ð°Ð·Ð²Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5791
+#: vms-alpha.c:6158
 #, c-format
 msgid "   Error: The module name is too long\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ð°Ð·Ð²Ð° Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð´Ð¾Ð²Ð³Ð¾ÑŽ\n"
 
-#: vms-alpha.c:5794
+#: vms-alpha.c:6161
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ð¼Ð¾Ð´ÑƒÐ»Ñ�   : %.*s\n"
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:6165
 #, c-format
 msgid "   Error: The module version is missing\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5804
+#: vms-alpha.c:6171
 #, c-format
 msgid "   Error: The module version is too long\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð²ÐµÑ€Ñ�Ñ–Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð´Ð¾Ð²Ð³Ð¾ÑŽ\n"
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:6174
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   Ð²ÐµÑ€Ñ�Ñ–Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�  : %.*s\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:6177
 #, c-format
 msgid "   Error: The compile date is truncated\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð°Ñ‚Ñƒ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾\n"
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:6179
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   Ð´Ð°Ñ‚Ð° Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ�  : %.17s\n"
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:6184
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Ð�Ð°Ð·Ð²Ð° Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¼Ð¾Ð²Ð¸\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:6185
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ð¼Ð¾Ð²Ð¸   : %.*s\n"
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6189
 #, c-format
 msgid "Source Files Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ„Ð°Ð¹Ð»Ñ–Ð² ÐºÐ¾Ð´Ñƒ\n"
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6190
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   Ñ„Ð°Ð¹Ð»: %.*s\n"
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6194
 #, c-format
 msgid "Title Text Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ‚Ð¸Ñ‚ÑƒÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ñ‚ÐµÐºÑ�Ñ‚Ñƒ\n"
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6195
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº: %.*s\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6199
 #, c-format
 msgid "Copyright Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÑŒÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²\n"
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6200
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÑŒÐºÑ– Ð¿Ñ€Ð°Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6204
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr "Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿ emh, %u\n"
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6214
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (Ð´Ð¾Ð²Ð¶=%u):\n"
 
-#: vms-alpha.c:5852
+#: vms-alpha.c:6219
 #, c-format
 msgid "   Error: The length is less than the length of an EEOM record\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ” Ð¼ÐµÐ½ÑˆÐ¾ÑŽ Ð·Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ EEOM\n"
 
-#: vms-alpha.c:5856
+#: vms-alpha.c:6223
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr "   ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿Ð°Ñ€ ÑƒÐ¼Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u\n"
 
-#: vms-alpha.c:5858
+#: vms-alpha.c:6225
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   ÐºÐ¾Ð´ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ�: %u\n"
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6229
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸: 0x%02x\n"
 
-#: vms-alpha.c:5863
+#: vms-alpha.c:6230
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   psect Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸: %u\n"
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6232
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� : 0x%08x\n"
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6241
 msgid " WEAK"
 msgstr " WEAK"
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6243
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6245
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6247 vms-alpha.c:6268
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6249
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6251
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6253
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6255
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6262
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6264
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6266
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6270
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6272
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6274
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6276
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6278
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6280
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6282
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6284
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6286
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6295
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (Ð´Ð¾Ð²Ð¶=%u):\n"
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6310
 #, c-format
 msgid "  EGSD entry %2u (type: %u, len: %u): "
 msgstr "  Ð·Ð°Ð¿Ð¸Ñ� EGSD %2u (Ñ‚Ð¸Ð¿: %u, Ð´Ð¾Ð²Ð¶: %u): "
 
-#: vms-alpha.c:5947 vms-alpha.c:6198
+#: vms-alpha.c:6316 vms-alpha.c:6611
 #, c-format
-msgid "   Error: length larger than remaining space in record\n"
-msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¼Ñ–Ñ�Ñ†Ðµ, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–\n"
+msgid "   Erroneous length\n"
+msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°\n"
 
-#: vms-alpha.c:5959
+#: vms-alpha.c:6329
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr "PSC â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸\n"
 
-#: vms-alpha.c:5960 vms-alpha.c:5977
+#: vms-alpha.c:6330 vms-alpha.c:6350
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: 2**%u\n"
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6331 vms-alpha.c:6351
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–    : 0x%04x"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6335
 #, c-format
 msgid "   alloc (len): %u (0x%08x)\n"
 msgstr "   alloc (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°): %u (0x%08x)\n"
 
-#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072
+#: vms-alpha.c:6337 vms-alpha.c:6403 vms-alpha.c:6471
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°      : %.*s\n"
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6349
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr "SPSC â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¾Ð±Ñ€Ð°Ð·Ñƒ\n"
 
-#: vms-alpha.c:5982
+#: vms-alpha.c:6355
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   alloc (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°): %u (0x%08x)\n"
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6356
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: 0x%08x\n"
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6358
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   Ð·Ñ�ÑƒÐ² symvec   : 0x%08x\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6361
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°         : %.*s\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6377
 #, c-format
 msgid "SYM - Global symbol definition\n"
 msgstr "SYM â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²\n"
 
-#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101
+#: vms-alpha.c:6378 vms-alpha.c:6459 vms-alpha.c:6483 vms-alpha.c:6506
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: 0x%04x"
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6381
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ psect: 0x%08x\n"
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6385
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° ÐºÐ¾Ð´Ñƒ: 0x%08x\n"
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6387
 #, c-format
 msgid "   psect index for entry point : %u\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� psect Ð´Ð»Ñ� Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ�: %u\n"
 
-#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108
+#: vms-alpha.c:6390 vms-alpha.c:6490 vms-alpha.c:6513
 #, c-format
 msgid "   psect index : %u\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� psect: %u\n"
 
-#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110
+#: vms-alpha.c:6393 vms-alpha.c:6493 vms-alpha.c:6516
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°       : %.*s\n"
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6401
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM â€” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸\n"
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6416
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr "IDC â€” Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ° ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ�Ñ‚Ñ– Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ñ–Ð²\n"
 
-#: vms-alpha.c:6035
+#: vms-alpha.c:6417
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–      : 0x%08x"
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6421
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   Ñ–Ð´. Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ñ�Ñ‚Ñ–: %x\n"
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6423
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸: %x\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6427
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°: %.*s\n"
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6433
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° : %.*s\n"
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6442
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   Ð´Ð²Ñ–Ð¹Ðº. Ñ–Ð´ÐµÐ½Ñ‚. : 0x%08x\n"
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6446
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   Ñ–Ð´ÐµÐ½Ñ‚. ascii  : %.*s\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6458
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG â€” Ð£Ð½Ñ–Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²\n"
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6462
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr "   Ð·Ñ�ÑƒÐ² Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: 0x%08x\n"
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6464
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   Ñ‚Ð¾Ñ‡ÐºÐ° Ð²Ñ…Ð¾Ð´Ñƒ: 0x%08x\n"
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6466
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   Ð´ÐµÑ�ÐºÑ€. Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñƒ: 0x%08x\n"
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6468
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� psect: %u\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6482
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ\n"
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6486
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   Ð²ÐµÐºÑ‚Ð¾Ñ€      : 0x%08x\n"
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6488 vms-alpha.c:6511
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ psect: %u\n"
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6505
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr "SYMM â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ\n"
 
-#: vms-alpha.c:6104
+#: vms-alpha.c:6509
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ñ�Ñ–Ñ—: 0x%08x\n"
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6522
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr "Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ egsd, %u\n"
 
-#: vms-alpha.c:6150
+#: vms-alpha.c:6561
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr "    Ñ–Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u, Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ�-Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº: 0x%08x\n"
 
-#: vms-alpha.c:6154
+#: vms-alpha.c:6565
 #, c-format
 msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
 msgstr "    Ñ–Ð½Ð´. psect 1: %u, Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ 1: 0x%08x %08x\n"
 
-#: vms-alpha.c:6159
+#: vms-alpha.c:6570
 #, c-format
 msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
 msgstr "    Ñ–Ð½Ð´. psect 2: %u, Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ 2: 0x%08x %08x\n"
 
-#: vms-alpha.c:6165
+#: vms-alpha.c:6576
 #, c-format
 msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
 msgstr "    Ñ–Ð½Ð´. psect 3: %u, Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ 3: 0x%08x %08x\n"
 
-#: vms-alpha.c:6170
+#: vms-alpha.c:6581
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "    Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð° Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6593
 #, c-format
-msgid "  %s (len=%u+%u):\n"
-msgstr "  %s (Ð´Ð¾Ð²Ð¶=%u+%u):\n"
+msgid "  %s (len=%u):\n"
+msgstr "  %s (Ð´Ð¾Ð²Ð¶=%u):\n"
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6616
 #, c-format
-msgid "   (type: %3u, size: 4+%3u): "
-msgstr "   (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 4+%3u): "
+msgid "   (type: %3u, size: %3u): "
+msgstr "   (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %3u): "
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6622
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr "STA_GBL (Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ñ‚ÐµÐº) %.*s\n"
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6626
 #, c-format
-msgid "STA_LW (stack longword) 0x%08x\n"
-msgstr "STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð¾Ð²Ð³Ð¸Ñ… Ñ�Ð»Ñ–Ð²) 0x%08x\n"
+msgid "STA_LW (stack longword)"
+msgstr "STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð¾Ð²Ð³Ð¸Ñ… Ñ�Ð»Ñ–Ð²)"
 
-#: vms-alpha.c:6215
+#: vms-alpha.c:6632
 #, c-format
-msgid "STA_QW (stack quadword) 0x%08x %08x\n"
-msgstr "STA_QW (Ñ�Ñ‚ÐµÐº Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ð¸Ñ… Ñ�Ð»Ñ–Ð²) 0x%08x %08x\n"
+msgid "STA_QW (stack quadword)"
+msgstr "STA_QW (Ñ�Ñ‚ÐµÐº ÐºÐ²Ð°Ð´Ñ€Ð¾Ñ�Ð»Ñ–Ð²)"
 
-#: vms-alpha.c:6220
+#: vms-alpha.c:6639
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr "STA_PQ (Ñ�Ñ‚ÐµÐº Ð¾Ñ�Ð½Ð¾Ð²Ð¸ psect + Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6222
+#: vms-alpha.c:6642
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr "    psect: %u, Ð·Ñ�ÑƒÐ²: 0x%08x %08x\n"
 
-#: vms-alpha.c:6228
+#: vms-alpha.c:6648
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr "STA_LI (Ñ�Ñ‚ÐµÐº Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ñ–Ð²)\n"
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6651
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr "STA_MOD (Ñ�Ñ‚ÐµÐº Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²)\n"
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6654
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr "STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð¸ Ð¿Ð¾Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6238
+#: vms-alpha.c:6658
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ Ð±Ð°Ð¹Ñ‚)\n"
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6661
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ñ�Ð»Ð¾Ð²Ð¾)\n"
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6664
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ longword)\n"
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6667
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ quadword)\n"
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6674
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr "STO_IMMR (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ð½ÐµÐ³Ð°Ð¹Ð½Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ�) %u Ð±Ð°Ð¹Ñ‚Ñ–Ð²\n"
 
-#: vms-alpha.c:6260
+#: vms-alpha.c:6683
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ðµ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ�) %.*s\n"
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6688
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr "STO_CA (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° ÐºÐ¾Ð´Ñƒ) %.*s\n"
 
-#: vms-alpha.c:6268
+#: vms-alpha.c:6692
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6695
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ðµ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6698
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr "STO_OFF (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ Ð·Ñ�ÑƒÐ² Ñ‰Ð¾Ð´Ð¾ psect)\n"
 
-#: vms-alpha.c:6280
+#: vms-alpha.c:6705
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr "STO_IMM (Ð½ÐµÐ³Ð°Ð¹Ð½Ðµ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ�) %u Ð±Ð°Ð¹Ñ‚\n"
 
-#: vms-alpha.c:6287
+#: vms-alpha.c:6714
 #, c-format
 msgid "STO_GBL_LW (store global longword) %.*s\n"
 msgstr "STO_GBL_LW (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ðµ longword) %.*s\n"
 
-#: vms-alpha.c:6291
+#: vms-alpha.c:6718
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr "STO_OFF (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ� LP Ð· Ð¿Ñ–Ð´Ð¿Ð¸Ñ�Ð¾Ð¼ Ð¿Ñ–Ð´Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸)\n"
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6721
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr "STO_BR_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ðµ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�) *Ñ‰Ðµ Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾*\n"
 
-#: vms-alpha.c:6297
+#: vms-alpha.c:6724
 #, c-format
 msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
 msgstr "STO_BR_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ psect Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� + Ð·Ñ�ÑƒÐ²) *Ñ‰Ðµ Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾*\n"
 
-#: vms-alpha.c:6301
+#: vms-alpha.c:6728
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr "OPR_NOP (Ð±ÐµÐ· Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ—)\n"
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6731
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6734
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (Ð²Ñ–Ð´Ð½Ñ–Ð¼Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6737
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (Ð¼Ð½Ð¾Ð¶ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6740
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (Ð´Ñ–Ð»ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6743
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (Ð»Ð¾Ð³Ñ–Ñ‡Ð½Ðµ Â«Ð†Â»)\n"
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6746
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (Ð»Ð¾Ð³Ñ–Ñ‡Ð½Ðµ Ð²ÐºÐ»ÑŽÑ‡Ð½Ðµ Â«Ð�Ð‘ÐžÂ»)\n"
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6749
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (Ð»Ð¾Ð³Ñ–Ñ‡Ð½Ðµ Ð²Ð¸ÐºÐ»ÑŽÑ‡Ð½Ðµ Â«Ð�Ð‘ÐžÂ»)\n"
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6752
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (Ð·Ð°Ð¿ÐµÑ€ÐµÑ‡ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6755
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6758
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (Ð²Ñ�Ñ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ� Ð¿Ð¾Ð»Ñ�)\n"
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6761
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (Ð°Ñ€Ð¸Ñ„Ð¼ÐµÑ‚Ð¸Ñ‡Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6764
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (Ð±ÐµÐ·Ð·Ð½Ð°ÐºÐ¾Ð²Ð¸Ð¹ Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6767
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (Ñ†Ð¸ÐºÐ»Ñ–Ñ‡Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6770
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (Ð²Ð¸Ð±Ñ–Ñ€)\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6773
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr "OPR_REDEF (Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð¾ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ—)\n"
 
-#: vms-alpha.c:6349
+#: vms-alpha.c:6776
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr "OPR_REDEF (Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ð°)\n"
 
-#: vms-alpha.c:6353
+#: vms-alpha.c:6780
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr "STC_LP (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð¿Ð°Ñ€Ð° ÑƒÐ¼Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6357
+#: vms-alpha.c:6784
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr "STC_LP_PSB (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð¿Ð°Ñ€Ð° ÑƒÐ¼Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� + Ð¿Ñ–Ð´Ð¿Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:6788
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u, Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð°: %.*s\n"
 
-#: vms-alpha.c:6362
+#: vms-alpha.c:6795
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   Ð¿Ñ–Ð´Ð¿Ð¸Ñ�: %.*s\n"
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6801
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð° ÑƒÐ¼Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6804
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u, Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹: %.*s\n"
 
-#: vms-alpha.c:6371
+#: vms-alpha.c:6809
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr "STC_GCA (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° ÑƒÐ¼Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ)\n"
 
-#: vms-alpha.c:6373
+#: vms-alpha.c:6812
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u, Ð½Ð°Ð·Ð²Ð° Ð¿Ñ–Ð´Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸: %.*s\n"
 
-#: vms-alpha.c:6377
+#: vms-alpha.c:6817
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr "STC_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ psect + Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6380
+#: vms-alpha.c:6821
 #, c-format
 msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u, psect: %u, Ð·Ñ�ÑƒÐ²: 0x%08x %08x\n"
 
-#: vms-alpha.c:6387
+#: vms-alpha.c:6828
 #, c-format
 msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
 msgstr "STC_NOP_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ NOP Ð·Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ)\n"
 
-#: vms-alpha.c:6391
+#: vms-alpha.c:6832
 #, c-format
 msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
 msgstr "STC_NOP_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ NOP Ð·Ð° psect + Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6395
+#: vms-alpha.c:6836
 #, c-format
 msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
 msgstr "STC_BSR_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ BSR Ð·Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ)\n"
 
-#: vms-alpha.c:6399
+#: vms-alpha.c:6840
 #, c-format
 msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
 msgstr "STC_BSR_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ BSR Ð·Ð° psect + Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6403
+#: vms-alpha.c:6844
 #, c-format
 msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
 msgstr "STC_LDA_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ LDA Ð·Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ)\n"
 
-#: vms-alpha.c:6407
+#: vms-alpha.c:6848
 #, c-format
 msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
 msgstr "STC_LDA_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° ÑƒÐ¼Ð¾Ð²Ð½Ð° LDA Ð·Ð° psect + Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6411
+#: vms-alpha.c:6852
 #, c-format
 msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
 msgstr "STC_BOH_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ BOH Ð·Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ)\n"
 
-#: vms-alpha.c:6415
+#: vms-alpha.c:6856
 #, c-format
 msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
 msgstr "STC_BOH_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ BOH Ð·Ð° psect + Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6420
+#: vms-alpha.c:6861
 #, c-format
 msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
 msgstr "STC_NBH_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° ÑƒÐ¼Ð¾Ð²Ð° Ð°Ð±Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²ÐºÐ° Ð·Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ)\n"
 
-#: vms-alpha.c:6424
+#: vms-alpha.c:6865
 #, c-format
 msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
 msgstr "STC_NBH_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° ÑƒÐ¼Ð¾Ð²Ð° Ð°Ð±Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²ÐºÐ° Ð·Ð° psect + Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6428
+#: vms-alpha.c:6869
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr "CTL_SETRB (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6434
+#: vms-alpha.c:6875
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr "CTL_AUGRB (Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�) %u\n"
 
-#: vms-alpha.c:6438
+#: vms-alpha.c:6880
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6883
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (Ð²ÐºÐ°Ð·Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6886
 #, c-format
 msgid "CTL_STKDL (stack defined location)\n"
 msgstr "CTL_STKDL (Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ�, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ñ�Ñ‚ÐµÐºÐ¾Ð¼)\n"
 
-#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997
+#: vms-alpha.c:6889 vms-alpha.c:7317 vms-alpha.c:7478
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾*\n"
 
-#: vms-alpha.c:6477 vms-alpha.c:6516
+#: vms-alpha.c:6914
 #, c-format
-msgid "cannot read GST record length\n"
-msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GST\n"
+msgid "cannot read GST record header\n"
+msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GST\n"
 
 #. Ill-formed.
-#: vms-alpha.c:6498
+#: vms-alpha.c:6937
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ EMH Ñƒ Ð¿ÐµÑ€ÑˆÐ¾Ð¼Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– GST\n"
 
-#: vms-alpha.c:6524
+#: vms-alpha.c:6961
 #, c-format
-msgid "cannot read GST record header\n"
-msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GST\n"
+msgid "corrupted GST\n"
+msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ GST\n"
 
-#: vms-alpha.c:6537
-#, c-format
-msgid " corrupted GST\n"
-msgstr " Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ GST\n"
-
-#: vms-alpha.c:6545
+#: vms-alpha.c:6974
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� GST\n"
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:7001
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr " Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ EOBJ, %u\n"
 
-#: vms-alpha.c:6598
+#: vms-alpha.c:7026
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr "  ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ñ–Ñ‚Ñ–Ð²: %u, Ð±Ð°Ð·Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6612
+#: vms-alpha.c:7040
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr "   Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·: 0x%08x (Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº: %u):\n"
 
-#: vms-alpha.c:6619
+#: vms-alpha.c:7047
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:7074
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  Ð¾Ð±Ñ€Ð°Ð· %u (%u Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²)\n"
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:7080
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr "   Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿: 0x%08x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: 0x%08x\n"
 
-#: vms-alpha.c:6673
+#: vms-alpha.c:7103
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  Ð¾Ð±Ñ€Ð°Ð· %u (%u Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²), Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¸:\n"
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:7110
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:7236
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 Ð±Ñ–Ñ‚Ð¸ *Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ”Ñ‚ÑŒÑ�Ñ�*\n"
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:7241
 #, c-format
 msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
 msgstr "ÐºÐ»Ð°Ñ�: %u, dtype: %u, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u, Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº: 0x%08x\n"
 
-#: vms-alpha.c:6818
+#: vms-alpha.c:7252
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr "Ñ€Ð¾Ð·Ñ€Ð¸Ð²Ð½Ð¸Ð¹ Ð¼Ð°Ñ�Ð¸Ð² %s\n"
 
-#: vms-alpha.c:6823
+#: vms-alpha.c:7259
 #, c-format
 msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
 msgstr "dimct: %u, aflags: 0x%02x, Ñ†Ð¸Ñ„Ñ€: %u, ÑˆÐºÐ°Ð»Ð°: %u\n"
 
-#: vms-alpha.c:6828
+#: vms-alpha.c:7264
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "arsize: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7268
 #, c-format
 msgid "Strides:\n"
 msgstr "ÐšÑ€Ð¾ÐºÐ¸:\n"
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7282
 #, c-format
 msgid "Bounds:\n"
 msgstr "ÐœÐµÐ¶Ñ–:\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7289
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr "[%u]: Ð½Ð¸Ð¶Ð½Ñ�: %u, Ð²ÐµÑ€Ñ…Ð½Ñ�: %u\n"
 
-#: vms-alpha.c:6860
+#: vms-alpha.c:7303
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr "Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº %s\n"
 
-#: vms-alpha.c:6865
+#: vms-alpha.c:7310
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "Ð¾Ñ�Ð½Ð¾Ð²Ð°: %u, Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ�: %u\n"
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7336
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "vflags: 0x%02x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: 0x%08x "
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7343
 #, c-format
 msgid "(no value)\n"
 msgstr "(Ð½ÐµÐ¼Ð° Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7346
 #, c-format
 msgid "(not active)\n"
 msgstr "(Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ðµ)\n"
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7349
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(Ð½Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð¾)\n"
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7352
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€)\n"
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7357
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(Ñ…Ð²Ð¾Ñ�Ñ‚Ð¾Ð²Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7360
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(Ð´Ð°Ð»Ñ– Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ)\n"
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7363
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(Ð·Ð° Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ Ñƒ Ð±Ñ–Ñ‚Ð°Ñ… %u)\n"
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7367
 #, c-format
 msgid "(reg: %u, disp: %u, indir: %u, kind: "
 msgstr "(Ñ€ÐµÐ³: %u, disp: %u, indir: %u, Ñ‚Ð¸Ð¿: "
 
-#: vms-alpha.c:6922
+#: vms-alpha.c:7374
 msgid "literal"
 msgstr "Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7377
 msgid "address"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7380
 msgid "desc"
 msgstr "Ð´ÐµÑ�Ðº"
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7383
 msgid "reg"
 msgstr "Ñ€ÐµÐ³"
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7404
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr "Ð´Ð¾Ð²Ð¶.: %2u, Ñ‚Ð¸Ð¿: %2u "
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7412
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr "Ð°Ñ‚Ð¾Ð¼Ð°Ñ€Ð½Ð¸Ð¹, Ñ‚Ð¸Ð¿=0x%02x %s\n"
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7417
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr "Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñ‚ÑƒÑ‚: 0x%08x\n"
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7421
 #, c-format
 msgid "typed pointer\n"
 msgstr "Ñ‚Ð¸Ð¿Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº\n"
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7425
 #, c-format
 msgid "pointer\n"
 msgstr "Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº\n"
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7436
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr "Ð¼Ð°Ñ�Ð¸Ð², Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð½Ñ–Ñ�Ñ‚ÑŒ: %u, Ð±Ñ–Ñ‚Ð¾Ð²Ð° ÐºÐ°Ñ€Ñ‚Ð°: "
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7451
 #, c-format
 msgid "array descriptor:\n"
 msgstr "Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ð¼Ð°Ñ�Ð¸Ð²Ñƒ:\n"
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7462
 #, c-format
 msgid "type spec for element:\n"
 msgstr "Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ñ‚Ð¸Ð¿Ñƒ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°:\n"
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7464
 #, c-format
 msgid "type spec for subscript %u:\n"
 msgstr "Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ñ‚Ð¸Ð¿Ñƒ Ð´Ð»Ñ� Ñ�Ð¿Ð¸Ñ�ÐºÑƒ Ñ–Ð½Ð´ÐµÐºÑ�Ñ–Ð² %u:\n"
 
-#: vms-alpha.c:7008
+#: vms-alpha.c:7489
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ�:\n"
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7500
 #, c-format
 msgid "cannot read DST header\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DST\n"
 
-#: vms-alpha.c:7025
+#: vms-alpha.c:7506
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr " Ñ‚Ð¸Ð¿: %3u, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %3u (Ð·Ð° 0x%08x): "
 
-#: vms-alpha.c:7039
+#: vms-alpha.c:7523
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð» DST\n"
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7567
 #, c-format
 msgid "standard data: %s\n"
 msgstr "Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ– Ð´Ð°Ð½Ñ–: %s\n"
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7571 vms-alpha.c:7695
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7579
 #, c-format
 msgid "modbeg\n"
 msgstr "modbeg\n"
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7583
 #, c-format
 msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: %d, Ð¼Ð¾Ð²Ð°: %u, Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð¾Ð»Ð¾Ð´ÑˆÐ¸Ð¹: %u\n"
 
-#: vms-alpha.c:7100 vms-alpha.c:7374
+#: vms-alpha.c:7593 vms-alpha.c:7959
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ð¼Ð¾Ð´ÑƒÐ»Ñ�: %.*s\n"
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7600
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñ�Ñ‚Ð¾Ñ€ : %.*s\n"
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7607
 #, c-format
 msgid "modend\n"
 msgstr "modend\n"
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7614
 msgid "rtnbeg\n"
 msgstr "rtnbeg\n"
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7618
 #, c-format
 msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
 msgstr "    Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: %u, Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, pd-Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:7122
+#: vms-alpha.c:7627
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    Ð½Ð°Ð·Ð²Ð° Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð¸: %.*s\n"
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7638
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "rtnend: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ 0x%08x\n"
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7648
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr "Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð°Ð´Ñ€ÐµÑ�Ð° bkpt 0x%08x\n"
 
-#: vms-alpha.c:7147
+#: vms-alpha.c:7658
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "ÐµÐ¿Ñ–Ð»Ð¾Ð³: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: %u, Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº: %u\n"
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7673
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr "blkbeg: Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7166
+#: vms-alpha.c:7685
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "blkend: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 0x%08x\n"
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7691
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "typspec (Ð´Ð¾Ð²Ð¶.: %u)\n"
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7707
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "septyp, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7723
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "recbeg: Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7727
 #, c-format
 msgid "    len: %u bits\n"
 msgstr "    Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u Ð±Ñ–Ñ‚Ñ–Ð²\n"
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7733
 #, c-format
 msgid "recend\n"
 msgstr "recend\n"
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7738
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr "enumbeg, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7203
+#: vms-alpha.c:7744
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "enumelt, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7750
 #, c-format
 msgid "enumend\n"
 msgstr "enumend\n"
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7757
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr "Ð¼Ñ–Ñ‚ÐºÐ°, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7760
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr "    Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7772
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "Ñ€Ð¾Ð·Ñ€Ð¸Ð²Ð½Ð¸Ð¹ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ (nbr: %u)\n"
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7779
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u\n"
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7790
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ñ�Ð´ÐºÐ°  (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7809
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7818
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7826
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7834
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7842
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7849
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7856
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7863
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7869
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7876
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7878
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7885
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7887
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7893
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "Ð¿Ñ€Ð¸Ñ€Ñ–Ñ�Ñ‚ pc +%-4d"
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7897
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x Ñ€Ñ�Ð´Ð¾Ðº: %5u\n"
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7902
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    *Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð°* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u\n"
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7917
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "Ð´Ð¶ÐµÑ€ÐµÐ»Ð¾ (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7936
 #, c-format
 msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
 msgstr "   declfile: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u, Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: %u, Ñ–Ð´. Ñ„Ð°Ð¹Ð»Ð°: %u\n"
 
-#: vms-alpha.c:7362
+#: vms-alpha.c:7941
 #, c-format
 msgid "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 msgstr "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
 
-#: vms-alpha.c:7371
+#: vms-alpha.c:7953
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ñ„Ð°Ð¹Ð»Ð°: %.*s\n"
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7969
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7976 vms-alpha.c:7983
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7990 vms-alpha.c:7997
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:8004 vms-alpha.c:8011
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:8015
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:8019
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   *Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð°* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u\n"
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:8031
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "*Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹* Ñ‚Ð¸Ð¿ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�, %u\n"
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:8063
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHD\n"
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:8067
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr "EIHD: (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u, ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ð»Ð¾ÐºÑ–Ð²: %u)\n"
 
-#: vms-alpha.c:7470
+#: vms-alpha.c:8071
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " majorid: %u, minorid: %u\n"
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:8079
 msgid "executable"
 msgstr "Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:8082
 msgid "linkable image"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·"
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:8089
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " Ñ‚Ð¸Ð¿ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: %u (%s)"
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:8095
 msgid "native"
 msgstr "Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ð¹"
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:8098
 msgid "CLI"
 msgstr "CLI"
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:8105
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿: %u (%s)\n"
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:8112
 #, c-format
 msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 msgstr " Ð·Ñ�ÑƒÐ²Ð¸: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 
-#: vms-alpha.c:7515
+#: vms-alpha.c:8116
 #, c-format
 msgid " fixup info rva: "
 msgstr " Ð´Ð°Ð½Ñ– Ñ‰Ð¾Ð´Ð¾ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ rva: "
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:8118
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", Ð²ÐµÐºÑ‚Ð¾Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² rva: "
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:8121
 #, c-format
 msgid ""
 "\n"
@@ -7255,653 +8194,745 @@ msgstr ""
 "\n"
 " Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¼Ð°Ñ�Ð¸Ð²Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ—: %u\n"
 
-#: vms-alpha.c:7525
+#: vms-alpha.c:8126
 #, c-format
 msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
 msgstr " Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ�-Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ: %u, Ðº-Ñ‚ÑŒ ÐºÐ°Ð½Ð°Ð»Ñ–Ð²: %u, Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ñ–Ñ�Ñ‚ÑŒ: %08x%08x\n"
 
-#: vms-alpha.c:7531
+#: vms-alpha.c:8132
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ°: %08x:"
 
-#: vms-alpha.c:7562
+#: vms-alpha.c:8163
 #, c-format
 msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
 msgstr " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
 
-#: vms-alpha.c:7568
+#: vms-alpha.c:8169
 #, c-format
 msgid " BPAGE: %u"
 msgstr " BPAGE: %u"
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:8176
 #, c-format
 msgid ", ext fixup offset: %u, no_opt psect off: %u"
 msgstr ", Ð·Ñ�ÑƒÐ² Ñ€Ð¾Ð·ÑˆÐ¸Ñ€. Ð¿Ñ€Ð¸Ð²â€™Ð·Ñ�ÐºÐ¸: %u, Ð·Ñ�ÑƒÐ² psect no_opt: %u"
 
-#: vms-alpha.c:7578
+#: vms-alpha.c:8179
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", Ð¿Ñ�ÐµÐ²Ð´Ð¾Ð½Ñ–Ð¼: %u\n"
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:8187
 #, c-format
 msgid "system version array information:\n"
 msgstr "Ð¼Ð°Ñ�Ð¸Ð² Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸:\n"
 
-#: vms-alpha.c:7590
+#: vms-alpha.c:8191
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº EIHVN\n"
 
-#: vms-alpha.c:7600
+#: vms-alpha.c:8201
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð²ÐµÑ€Ñ�Ñ–ÑŽ EIHVN\n"
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:8204
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:8208
 msgid "BASE_IMAGE       "
 msgstr "BASE_IMAGE       "
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:8211
 msgid "MEMORY_MANAGEMENT"
 msgstr "MEMORY_MANAGEMENT"
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:8214
 msgid "IO               "
 msgstr "IO               "
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:8217
 msgid "FILES_VOLUMES    "
 msgstr "FILES_VOLUMES    "
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:8220
 msgid "PROCESS_SCHED    "
 msgstr "PROCESS_SCHED    "
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:8223
 msgid "SYSGEN           "
 msgstr "SYSGEN           "
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:8226
 msgid "CLUSTERS_LOCKMGR "
 msgstr "CLUSTERS_LOCKMGR "
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:8229
 msgid "LOGICAL_NAMES    "
 msgstr "LOGICAL_NAMES    "
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:8232
 msgid "SECURITY         "
 msgstr "SECURITY         "
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:8235
 msgid "IMAGE_ACTIVATOR  "
 msgstr "IMAGE_ACTIVATOR  "
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:8238
 msgid "NETWORKS         "
 msgstr "NETWORKS         "
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:8241
 msgid "COUNTERS         "
 msgstr "COUNTERS         "
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:8244
 msgid "STABLE           "
 msgstr "STABLE           "
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:8247
 msgid "MISC             "
 msgstr "MISC             "
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:8250
 msgid "CPU              "
 msgstr "CPU              "
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:8253
 msgid "VOLATILE         "
 msgstr "VOLATILE         "
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:8256
 msgid "SHELL            "
 msgstr "SHELL            "
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:8259
 msgid "POSIX            "
 msgstr "POSIX            "
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:8262
 msgid "MULTI_PROCESSING "
 msgstr "MULTI_PROCESSING "
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:8265
 msgid "GALAXY           "
 msgstr "GALAXY           "
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:8268
 msgid "*unknown*        "
 msgstr "*Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾*       "
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:8284 vms-alpha.c:8558
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHA\n"
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:8287
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ:  (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€=%u)\n"
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:8290
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr " ÐŸÐµÑ€ÑˆÐ° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7693
+#: vms-alpha.c:8294
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr " Ð”Ñ€ÑƒÐ³Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7697
+#: vms-alpha.c:8298
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr " Ð¢Ñ€ÐµÑ‚Ñ� Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:8302
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr " Ð§ÐµÑ‚Ð²ÐµÑ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7705
+#: vms-alpha.c:8306
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr " Ð¡Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7716
+#: vms-alpha.c:8317
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHI\n"
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:8321
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr "Ð†Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð¾Ð»Ð¾Ð´ÑˆÐ¸Ð¹: %u)\n"
 
-#: vms-alpha.c:7723
+#: vms-alpha.c:8324
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " Ð½Ð°Ð·Ð²Ð° Ð¾Ð±Ñ€Ð°Ð·Ñƒ     : %.*s\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:8326
 #, c-format
 msgid " link time        : %s\n"
 msgstr " Ñ‡Ð°Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� : %s\n"
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:8328
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " Ñ–Ð´. Ð¾Ð±Ñ€Ð°Ð·Ñƒ         : %.*s\n"
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:8330
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " Ñ–Ð´. ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:8332
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ: %.*s\n"
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:8342
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHS\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:8346
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð¾Ð±Ñ€Ð°Ð·Ñƒ (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°: %u, Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�: %u)\n"
 
-#: vms-alpha.c:7751
+#: vms-alpha.c:8352
 #, c-format
 msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
 msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: vbn: %u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u (0x%x)\n"
 
-#: vms-alpha.c:7756
+#: vms-alpha.c:8357
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: vbn: %u, Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²: %u\n"
 
-#: vms-alpha.c:7761
+#: vms-alpha.c:8362
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²: vbn: %u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u\n"
 
-#: vms-alpha.c:7774
+#: vms-alpha.c:8375
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EISD\n"
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:8386
 #, c-format
 msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
 msgstr "Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°: %u, Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�: %u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u, Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿: %u)\n"
 
-#: vms-alpha.c:7793
+#: vms-alpha.c:8394
 #, c-format
 msgid " section: base: 0x%08x%08x size: 0x%08x\n"
 msgstr " Ñ€Ð¾Ð·Ð´Ñ–Ð»: Ð¾Ñ�Ð½Ð¾Ð²Ð°: 0x%08x%08x Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 0x%08x\n"
 
-#: vms-alpha.c:7798
+#: vms-alpha.c:8399
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: 0x%04x"
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8437
 #, c-format
 msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
 msgstr " vbn: %u, pfc: %u, matchctl: %u Ñ‚Ð¸Ð¿: %u ("
 
-#: vms-alpha.c:7842
+#: vms-alpha.c:8443
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8446
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8449
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8452
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8455
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8458
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8464
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8467
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€: 0x%08x, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8477
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DMT\n"
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8481
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²:\n"
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8490
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DMT\n"
 
-#: vms-alpha.c:7895
+#: vms-alpha.c:8496
 #, c-format
 msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
 msgstr " Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¼Ð¾Ð´ÑƒÐ»Ñ�: 0x%08x, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 0x%08x, (%u psect)\n"
 
-#: vms-alpha.c:7905
+#: vms-alpha.c:8506
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ psect DMT\n"
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8510
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr "  Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº psect: 0x%08x, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:7922
+#: vms-alpha.c:8523
 #, c-format
 msgid "cannot read DST\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DST\n"
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8533
 #, c-format
 msgid "cannot read GST\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ GST\n"
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8537
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²:\n"
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8564
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr "ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ° Ð°Ð´Ñ€ÐµÑ�Ð¸ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°: %u, Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�: %u)\n"
 
-#: vms-alpha.c:7969
+#: vms-alpha.c:8568
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  iaflink : 0x%08x %08x\n"
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8572
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  fixuplnk: 0x%08x %08x\n"
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8575
 #, c-format
 msgid "  size : %u\n"
 msgstr "  Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u\n"
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8577
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: 0x%08x\n"
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8582
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8587
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8592
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8595
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8599
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8602
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8605
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8607
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8614
 #, c-format
 msgid " Shareable images:\n"
 msgstr " ÐžÐ±Ñ€Ð°Ð·Ð¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�:\n"
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8622
 #, c-format
 msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
 msgstr "  %u: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u, Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: 0x%02x, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:8028
+#: vms-alpha.c:8629
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñƒ Ñ‡Ð¾Ñ‚Ð¸Ñ€Ð¸ Ñ�Ð»Ð¾Ð²Ð°:\n"
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8635
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñƒ Ð´Ð¾Ð²Ð³Ðµ Ñ�Ð»Ð¾Ð²Ð¾:\n"
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8641
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr " Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ .address Ñƒ Ñ‡Ð¾Ñ‚Ð¸Ñ€Ð¸ Ñ�Ð»Ð¾Ð²Ð°:\n"
 
-#: vms-alpha.c:8043
+#: vms-alpha.c:8646
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr " Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ .address Ñƒ Ð´Ð¾Ð²Ð³Ðµ Ñ�Ð»Ð¾Ð²Ð¾:\n"
 
-#: vms-alpha.c:8048
+#: vms-alpha.c:8651
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr " ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð°Ð´Ñ€ÐµÑ� ÐºÐ¾Ð´Ñƒ:\n"
 
-#: vms-alpha.c:8053
+#: vms-alpha.c:8656
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr " ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ Ð½Ð° Ð¿Ð°Ñ€Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�:\n"
 
-#: vms-alpha.c:8062
+#: vms-alpha.c:8664
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " Ð—Ð¼Ñ–Ð½Ð° Ð·Ð°Ñ…Ð¸Ñ�Ñ‚Ñƒ (%u Ð·Ð°Ð¿Ð¸Ñ�Ð¸):\n"
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8673
 #, c-format
 msgid "  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
 msgstr "  Ð¾Ñ�Ð½.: 0x%08x %08x, Ñ€Ð¾Ð·Ð¼: 0x%08x,  Ð·Ð°Ñ….: 0x%08x "
 
 #. FIXME: we do not yet support relocatable link.  It is not obvious
 #. how to do it for debug infos.
-#: vms-alpha.c:8908
+#: vms-alpha.c:9550
 msgid "%P: relocatable link is not supported\n"
 msgstr "%P: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ–Ñ�Ñ‚ÑŽ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
 
-#: vms-alpha.c:8979
+#: vms-alpha.c:9621
 #, c-format
 msgid "%P: multiple entry points: in modules %pB and %pB\n"
 msgstr "%P: Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð¾Ñ‡Ð¾Ðº Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… %pB Ñ– %pB\n"
 
-#: vms-lib.c:1445
+#: vms-lib.c:1530
 #, c-format
 msgid "could not open shared image '%s' from '%s'"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ñ€Ð°Ð· Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Â«%sÂ» Ð· Â«%sÂ»"
 
-#: vms-misc.c:361
+#: vms-misc.c:374
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr "_bfd_vms_output_counted Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð´Ð»Ñ� Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ñ— ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
-#: vms-misc.c:366
+#: vms-misc.c:379
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr "_bfd_vms_output_counted Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð´Ð»Ñ� Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ— ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
-#: xcofflink.c:832
+#: xcofflink.c:889
 #, c-format
 msgid "%pB: XCOFF shared object when not producing XCOFF output"
 msgstr "%pB: Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚ XCOFF, Ñ…Ð¾Ñ‡Ð° Ð´Ð°Ð½Ñ– XCOFF Ð½Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑŽÑ‚ÑŒÑ�Ñ�"
 
-#: xcofflink.c:853
+#: xcofflink.c:910
 #, c-format
 msgid "%pB: dynamic object with no .loader section"
 msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚ Ð±ÐµÐ· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .loader"
 
-#: xcofflink.c:1413
+#: xcofflink.c:1492
 #, c-format
 msgid "%pB: `%s' has line numbers but no enclosing section"
 msgstr "%pB: Â«%sÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ð¾Ð¼ÐµÑ€Ð¸ Ñ€Ñ�Ð´ÐºÑ–Ð², Ð°Ð»Ðµ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: xcofflink.c:1466
+#: xcofflink.c:1548
 #, c-format
 msgid "%pB: class %d symbol `%s' has no aux entries"
 msgstr "%pB: ÐºÐ»Ð°Ñ� %d, Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¼Ð°Ñ” Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²"
 
-#: xcofflink.c:1489
+#: xcofflink.c:1571
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized csect type %d"
 msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ csect %d"
 
-#: xcofflink.c:1502
+#: xcofflink.c:1584
 #, c-format
 msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» XTY_ER Â«%sÂ»: ÐºÐ»Ð°Ñ� %d, Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %<PRId64>"
 
-#: xcofflink.c:1533
+#: xcofflink.c:1615
+#, c-format
+msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRIu64>"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ” ÐºÐ»Ð°Ñ�Ð¾Ð¼ %d, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %<PRIu64>"
+
+#: xcofflink.c:1750
 #, c-format
-msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
-msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ” ÐºÐ»Ð°Ñ�Ð¾Ð¼ %d, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %<PRId64>"
+msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
+msgstr "%pB: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð·Ð¼Ñ–Ñ�Ñ‚Ñƒ Â«%sÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� R_TLSML, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ�ÐµÐ±Ðµ"
 
-#: xcofflink.c:1680
+#: xcofflink.c:1784
 #, c-format
 msgid "%pB: csect `%s' not in enclosing section"
 msgstr "%pB: csect Â«%sÂ» Ð½Ðµ Ñƒ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–"
 
-#: xcofflink.c:1788
+#: xcofflink.c:1893
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ� XTY_LD Â«%sÂ»"
 
-#: xcofflink.c:2109
+#: xcofflink.c:2236
 #, c-format
 msgid "%pB: reloc %s:%<PRId64> not in csect"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s:%<PRId64> Ð½Ðµ Ñƒ csect"
 
-#: xcofflink.c:3196
+#: xcofflink.c:3345
+#, c-format
+msgid "%pB: cannot export internal symbol `%s`."
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»."
+
+#: xcofflink.c:3393
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: xcofflink.c:3301
+#: xcofflink.c:3502
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¿Ñ€Ð¾Ð±Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: xcofflink.c:3680
+#: xcofflink.c:3850
 msgid "error: undefined symbol __rtinit"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» __rtinit"
 
-#: xcofflink.c:4060
+#: xcofflink.c:4863
+#, c-format
+msgid "%pB: Unable to find a stub csect in rangeof relocation at %#<PRIx64> targeting'%s'"
+msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹ csect Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– rangeof Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64>, Ñ‰Ð¾ Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Â«%sÂ»"
+
+#: xcofflink.c:4892
+#, c-format
+msgid "%pB: Cannot create stub entry '%s'"
+msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %s"
+
+#: xcofflink.c:5012
+msgid "TOC overflow during stub generation; try -mminimal-toc when compiling"
+msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� TOC Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -mminimal-toc Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ�"
+
+#: xcofflink.c:5080
 #, c-format
 msgid "%pB: loader reloc in unrecognized section `%s'"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%sÂ»"
 
-#: xcofflink.c:4072
+#: xcofflink.c:5092
 #, c-format
 msgid "%pB: `%s' in loader reloc but not loader sym"
 msgstr "%pB: Â«%sÂ» Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð°, Ð°Ð»Ðµ Ð½Ðµ Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ñ… Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�"
 
-#: xcofflink.c:4089
+#: xcofflink.c:5109
 #, c-format
 msgid "%pB: loader reloc in read-only section %pA"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�, %pA"
 
-#: xcofflink.c:5113
+#: xcofflink.c:6182
 #, c-format
 msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
 msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� TOC: %#<PRIx64> > 0x10000; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -mminimal-toc Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ�"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5031
+#: xcofflink.c:7298
+#, c-format
+msgid "Unable to link input file: %s"
+msgstr "Ð�Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…: %s"
+
+#: xtensa-dynconfig.c:60
+msgid "Unable to load DLL."
+msgstr "Ð�Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ DLL."
+
+#: xtensa-dynconfig.c:86
+#, c-format
+msgid "%s is defined but could not be loaded: %s"
+msgstr "%s Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾, Ð°Ð»Ðµ Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸: %s"
+
+#: xtensa-dynconfig.c:102
+#, c-format
+msgid "%s is loaded but symbol \"%s\" is not found: %s"
+msgstr "%s Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð¾, Ð°Ð»Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾: %s"
+
+#: xtensa-dynconfig.c:115
+#, c-format
+msgid "%s is defined but plugin support is disabled"
+msgstr "%s Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾, Ð°Ð»Ðµ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð´Ð¾Ð´Ð°Ñ‚ÐºÑ–Ð² Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾"
+
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2893 elfnn-riscv.c:5548
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»: 0x%02x"
+
+#: elfnn-aarch64.c:5456
 #, c-format
 msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 835769 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5112
+#: elfnn-aarch64.c:5548
 #, c-format
 msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 843419 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5641
+#: elfnn-aarch64.c:5561
+#, c-format
+msgid "%pB: error: erratum 843419 immediate 0x%<PRIx64> out of range for ADR (input file too large) and --fix-cortex-a53-843419=adr used.  Run the linker with --fix-cortex-a53-843419=full instead"
+msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ Ð·Ñ– Ð·Ð²Ñ–Ñ‚Ñƒ 843419 Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ 0x%<PRIx64> Ð´Ð»Ñ� ADR (Ð²Ñ…Ñ–Ð´Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼) Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ --fix-cortex-a53-843419=adr. Ð’Ð°Ñ€Ñ‚Ð¾ Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ñ–Ð· Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --fix-cortex-a53-843419=full"
+
+#: elfnn-aarch64.c:6096
 #, c-format
 msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÑƒÐ²Ð°Ñ‚Ð¸Ñ�Ñ� Ð·Ð·Ð¾Ð²Ð½Ñ–, Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5732
+#: elfnn-aarch64.c:6116
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ ÑƒÐ¼Ð¾Ð²Ð½Ñƒ Ð³Ñ–Ð»ÐºÑƒ Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
+
+#: elfnn-aarch64.c:6204 elfnn-kvx.c:2384
 #, c-format
 msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
 msgstr "%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ñ–Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ” NULL Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ñ�Ñ‚Ð¾Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6830
+#: elfnn-aarch64.c:6317 elfnn-aarch64.c:6354
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
+
+#: elfnn-aarch64.c:7345
 msgid "too many GOT entries for -fpic, please recompile with -fPIC"
 msgstr "Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² GOT Ð´Ð»Ñ� -fpic. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð· -fPIC"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6858
+#: elfnn-aarch64.c:7373
 msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined"
 msgstr "Ð¾Ð´Ð½Ñ–Ñ”ÑŽ Ñ–Ð· Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ñ… Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ Ñ†Ñ–Ñ”Ñ— Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ” Ñ‚Ðµ, Ñ‰Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ ÐºÐ¾Ð´Ñ– Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ðº, Ð½Ð°Ñ‡Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¼Ð°Ñ” Ð±Ñ–Ð»ÑŒÑˆÐµ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�, Ð½Ñ–Ð¶ Ð±ÑƒÐ»Ð¾ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð¾ Ñ‚Ð°Ð¼, Ð´Ðµ Ð¹Ð¾Ð³Ð¾ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7443
+#: elfnn-aarch64.c:7940
 #, c-format
 msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:182
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:217
+#: elfnn-aarch64.c:9013
 #, c-format
-msgid "%pB: warning: RVE PLT generation not supported"
-msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� PLT RVE Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
+msgid "%F%P: %pB: copy relocation against non-copyable protected symbol `%s'\n"
+msgstr "%F%P: %pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311
-msgid "%X%P: internal error: out of range error\n"
-msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ\n"
+#: elfnn-kvx.c:930
+msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n"
+msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ Â«%pAÂ» Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2315
-msgid "%X%P: internal error: unsupported relocation error\n"
-msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�\n"
+#: elfnn-kvx.c:2129
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation in section `%s'"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%sÂ»"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2325
-msgid "%X%P: internal error: unknown error\n"
-msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°\n"
+#: elfnn-kvx.c:2853
+#, c-format
+msgid "%s: Bad ELF id: `%d'"
+msgstr "%s: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€ ELF: Â«%dÂ»"
+
+#: elfnn-kvx.c:2908
+#, c-format
+msgid "%s: compiled as 32-bit object and %s is 64-bit"
+msgstr "%s: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ñ�Ðº 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚, Ð° %s Ñ” 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼"
+
+#: elfnn-kvx.c:2911
+#, c-format
+msgid "%s: compiled as 64-bit object and %s is 32-bit"
+msgstr "%s: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ñ�Ðº 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚, Ð° %s Ñ” 32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼"
+
+#: elfnn-kvx.c:2913
+#, c-format
+msgid "%s: object size does not match that of target %s"
+msgstr "%s: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %s"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elfnn-kvx.c:3001
+#, c-format
+msgid "Private flags = 0x%lx : "
+msgstr "Ð—Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = 0x%lx : "
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2711
+#: elfnn-kvx.c:3005
 #, c-format
-msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d"
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð²ÐµÑ€Ñ�Ñ–Ñ— ISA Ð´Ð»Ñ� Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«%sÂ». %d.%d, Ð° Ð½Ðµ %d.%d"
+msgid "Coolidge (kv3) V1 64 bits"
+msgstr "Coolidge (kv3) V1 64 Ð±Ñ–Ñ‚Ð¸"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729
+#: elfnn-kvx.c:3007
 #, c-format
-msgid "error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº ISA Â«%sÂ». ÐŸÐµÑ€ÑˆÐ¾ÑŽ Ð»Ñ–Ñ‚ÐµÑ€Ð¾ÑŽ Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Â«iÂ» Ð°Ð±Ð¾ Â«eÂ», Ð° Ð¼Ð°Ñ”Ð¼Ð¾ Â«%sÂ»."
+msgid "Coolidge (kv3) V2 64 bits"
+msgstr "Coolidge (kv3) V2 64 Ð±Ñ–Ñ‚Ð¸"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773
+#: elfnn-kvx.c:3009
 #, c-format
-msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð±Ñ–Ð¶Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ñ�Ð´ÐºÐ°Ñ… ISA Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½ÑŽ Â«%sÂ» Ð· Â«%sÂ»."
+msgid "Coolidge (kv4) V1 64 bits"
+msgstr "Coolidge (kv4) V1 64 Ð±Ñ–Ñ‚Ð¸"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2921
+#: elfnn-kvx.c:3014
 #, c-format
-msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%s) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ–Ð· Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%s)."
+msgid "Coolidge (kv3) V1 32 bits"
+msgstr "Coolidge (kv3) V1 32 Ð±Ñ–Ñ‚Ð¸"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2946
+#: elfnn-kvx.c:3016
 #, c-format
-msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: XLEN Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð·Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð´Ð»Ñ� Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u)."
+msgid "Coolidge (kv3) V2 32 bits"
+msgstr "Coolidge (kv3) V2 32 Ð±Ñ–Ñ‚Ð¸"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2954
+#: elfnn-kvx.c:3018
 #, c-format
-msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� XLEN (%u). Ð™Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾, Ð²Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚Ðµ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ñƒ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–ÑŽ."
+msgid "Coolidge (kv4) V1 32 bits"
+msgstr "Coolidge (kv4) V1 32 Ð±Ñ–Ñ‚Ð¸"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3039
+#: elfnn-kvx.c:3854
 #, c-format
-msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð²ÐµÑ€Ñ�Ñ–Ð¹ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— priv (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°/Ð¿Ñ€Ð¾Ð¼Ñ–Ð¶Ð½Ð°/Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�)."
+msgid "relocation against `%s' has faulty GOT type "
+msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð¼Ð°Ñ” Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ‚Ð¸Ð¿ GOT"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3055
+#: elfnn-loongarch.c:169 elfnn-loongarch.c:221
 #, c-format
-msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°, Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°."
+msgid "%#<PRIx64> invaild imm"
+msgstr "%#<PRIx64> Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ imm"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3096
+#: elfnn-loongarch.c:403 elfnn-riscv.c:4028
 #, c-format
 msgid ""
 "%pB: ABI is incompatible with that of the selected emulation:\n"
@@ -7910,111 +8941,264 @@ msgstr ""
 "%pB: ABI Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ñ–Ð· Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾ÑŽ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ”ÑŽ:\n"
 "  Ñ†Ñ–Ð»ÑŒ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—, Â«%sÂ», Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Â«%sÂ»"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119
+#: elfnn-loongarch.c:458
+#, c-format
+msgid "%pB: can't link different ABI object."
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ð±'Ñ”ÐºÑ‚ Ñ–Ð½ÑˆÐ¾Ð³Ð¾ ABI."
+
+#: elfnn-loongarch.c:600
+msgid "Internal error: unreachable."
+msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ñ–Ñ�Ñ‚ÑŒ."
+
+#: elfnn-loongarch.c:4339 elfnn-riscv.c:4789
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ñ– %<PRId64> Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð´Ð»Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ð½Ð° %<PRId64>-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ð¼ÐµÐ¶Ñƒ, Ð²Ñ‚Ñ–Ð¼, Ð¼Ð°Ñ”Ð¼Ð¾ Ð»Ð¸ÑˆÐµ %<PRId64>"
+
+#: elfnn-riscv.c:326 elfnn-riscv.c:361
+#, c-format
+msgid "%pB: warning: RVE PLT generation not supported"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� PLT RVE Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
+
+#: elfnn-riscv.c:919
+#, c-format
+msgid "%pB: relocation %s against absolute symbol `%s' can not be used when making a shared object"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
+
+#: elfnn-riscv.c:961
+#, c-format
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV32 when making a shared object"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ RV32 Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
+
+#: elfnn-riscv.c:1847
+#, c-format
+msgid "final size of uleb128 value at offset 0x%lx in %pA from %pB exceeds available space"
+msgstr "Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� uleb128 Ð· Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ 0x%lx Ñƒ %pA Ð· %pB Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ"
+
+#: elfnn-riscv.c:2082
+#, c-format
+msgid "%pcrel_lo missing matching %pcrel_hi"
+msgstr "Ð£ %pcrel_lo Ð½ÐµÐ¼Ð°Ñ” Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ %pcrel_hi"
+
+#: elfnn-riscv.c:2085
+#, c-format
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "%pcrel_lo Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼ Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð»Ñ� R_RISCV_GOT_HI20"
+
+#. Check the overflow when adding reloc addend.
+#: elfnn-riscv.c:2090
+#, c-format
+msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64> without any addend, but may be 0x%<PRIx64> after adding the %%pcrel_lo addend"
+msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� %%pcrel_lo Ñ€Ð°Ð·Ð¾Ð¼ Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %%pcrel_hi Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 0x%<PRIx64> Ð±ÐµÐ· Ð´Ð¾Ð´Ð°Ð½ÐºÐ°, Ð°Ð»Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ñ€Ñ–Ð²Ð½Ð¸Ð¼ 0x%<PRIx64> Ð¿Ñ–Ñ�Ð»Ñ� Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ� %%pcrel_lo"
+
+#: elfnn-riscv.c:2098
+#, c-format
+msgid "%pcrel_lo overflow with an addend"
+msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� %pcrel_lo Ñ€Ð°Ð·Ð¾Ð¼ Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
+
+#: elfnn-riscv.c:2549
+#, c-format
+msgid "%pB: warning: R_RISCV_SUB_ULEB128 with non-zero addend, please rebuild by binutils 2.42 or up"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: R_RISCV_SUB_ULEB128 Ñ–Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð¼, Ð±ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð¿ÐµÑ€ÐµÐ·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ñ–Ð· binutils 2.42 Ð°Ð±Ð¾ Ð½Ð¾Ð²Ñ–ÑˆÐ¾ÑŽ Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ"
+
+#: elfnn-riscv.c:2629
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr "Ð�Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¸ Ð´Ð»Ñ� R_RISCV_GOT_HI20"
+
+#. PR 28509, when generating the shared object, these
+#. referenced symbols may bind externally, which means
+#. they will be exported to the dynamic symbol table,
+#. and are preemptible by default.  These symbols cannot
+#. be referenced by the non-pic relocations, like
+#. R_RISCV_JAL and R_RISCV_RVC_JUMP relocations.
+#.
+#. However, consider that linker may relax the R_RISCV_CALL
+#. relocations to R_RISCV_JAL or R_RISCV_RVC_JUMP, if
+#. these relocations are relocated to the plt entries,
+#. then we won't report error for them.
+#.
+#. Perhaps we also need the similar checks for the
+#. R_RISCV_BRANCH and R_RISCV_RVC_BRANCH relocations.
+#: elfnn-riscv.c:2730
+#, c-format
+msgid "%%X%%P: relocation %s against `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC\n"
+msgstr "%%X%%P: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÑƒÐ²Ð°Ñ‚Ð¸Ñ�Ñ� Ð·Ð·Ð¾Ð²Ð½Ñ–, Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC\n"
+
+#: elfnn-riscv.c:2812
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pcrel_lo Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
+
+#: elfnn-riscv.c:3022
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%%X%%P: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»\n"
+
+#: elfnn-riscv.c:3057
+msgid "%X%P: internal error: out of range error\n"
+msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ\n"
+
+#: elfnn-riscv.c:3062
+msgid "%X%P: internal error: unsupported relocation error\n"
+msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�\n"
+
+#: elfnn-riscv.c:3068
+msgid "dangerous relocation error"
+msgstr "Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
+
+#: elfnn-riscv.c:3074
+msgid "%X%P: internal error: unknown error\n"
+msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°\n"
+
+#: elfnn-riscv.c:3620
+#, c-format
+msgid "error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' but got '%s'"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº ISA Â«%sÂ». ÐŸÐµÑ€ÑˆÐ¾ÑŽ Ð»Ñ–Ñ‚ÐµÑ€Ð¾ÑŽ Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Â«iÂ» Ð°Ð±Ð¾ Â«eÂ», Ð° Ð¼Ð°Ñ”Ð¼Ð¾ Â«%sÂ»"
+
+#: elfnn-riscv.c:3663
+#, c-format
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð±Ñ–Ð¶Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ñ�Ð´ÐºÐ°Ñ… ISA Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½ÑŽ Â«%sÂ» Ð· Â«%sÂ»"
+
+#: elfnn-riscv.c:3800
+#, c-format
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%s) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ–Ð· Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%s)"
+
+#: elfnn-riscv.c:3820
+#, c-format
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: XLEN Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð·Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð´Ð»Ñ� Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u)"
+
+#: elfnn-riscv.c:3828
+#, c-format
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� XLEN (%u). Ð™Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾, Ð²Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚Ðµ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ñƒ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–ÑŽ"
+
+#: elfnn-riscv.c:3942
+#, c-format
+msgid "warning: %pB use privileged spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¿Ñ€Ð¸Ð²Ñ–Ð»ÐµÐ¹Ð¾Ð²Ð°Ð½Ñƒ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— Ð¿Ñ€Ð°Ð² Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ %u.%u.%u, Ð°Ð»Ðµ Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ� %u.%u.%u"
+
+#: elfnn-riscv.c:3959
+msgid "warning: privileged spec version 1.9.1 can not be linked with other spec versions"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð¸Ð²Ñ–Ð»ÐµÐ¹Ð¾Ð²Ð°Ð½Ñƒ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— Ð¿Ñ€Ð°Ð² Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ 1.9.1 Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ñ–Ð· Ñ–Ð½ÑˆÐ¸Ð¼Ð¸ Ð²ÐµÑ€Ñ�Ñ–Ñ�Ð¼Ð¸ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ð¹"
+
+#: elfnn-riscv.c:3987
+#, c-format
+msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°, Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°"
+
+#: elfnn-riscv.c:4084
 #, c-format
 msgid "%pB: can't link %s modules with %s modules"
 msgstr "%pB: Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ– %s Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3129
+#: elfnn-riscv.c:4094
 #, c-format
 msgid "%pB: can't link RVE with other target"
 msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ RVE Ñ–Ð· Ñ–Ð½ÑˆÐ¾ÑŽ Ñ†Ñ–Ð»Ð»ÑŽ"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3630
+#: elfnn-riscv.c:961
 #, c-format
-msgid "%pB(%pA+%#<PRIx64>): %<PRId64> bytes required for alignment to %<PRId64>-byte boundary, but only %<PRId64> present"
-msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ñ– %<PRId64> Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð´Ð»Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ð½Ð° %<PRId64>-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ð¼ÐµÐ¶Ñƒ, Ð²Ñ‚Ñ–Ð¼, Ð¼Ð°Ñ”Ð¼Ð¾ Ð»Ð¸ÑˆÐµ %<PRId64>"
+msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV64 when making a shared object"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ RV64 Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: peigen.c:157 pepigen.c:157 pex64igen.c:157
+#: peXXigen.c:161
 #, c-format
 msgid "%pB: unable to find name for empty section"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: peigen.c:183 pepigen.c:183 pex64igen.c:183
+#: peXXigen.c:188
 #, c-format
 msgid "%pB: out of memory creating name for empty section"
 msgstr "%pB: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ð´Ð»Ñ� Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: peigen.c:194 pepigen.c:194 pex64igen.c:194
+#: peXXigen.c:199
 #, c-format
 msgid "%pB: unable to create fake empty section"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»"
 
-#: peigen.c:532 pepigen.c:532 pex64igen.c:532
+#: peXXigen.c:924
+#, c-format
+msgid "%pB:%.8s: section below image base"
+msgstr "%pB:%.8s: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð¿Ñ–Ð´ Ð¾Ñ�Ð½Ð¾Ð²Ð¾ÑŽ Ð¾Ð±Ñ€Ð°Ð·Ñƒ"
+
+#: peXXigen.c:929
 #, c-format
-msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld"
-msgstr "%pB: Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº aout Ð²ÐºÐ°Ð·ÑƒÑ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñƒ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ð°Ð½Ð¸Ñ…: %ld"
+msgid "%pB:%.8s: RVA truncated"
+msgstr "%pB:%.8s: RVA Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾"
 
-#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091
+#: peXXigen.c:1060
 #, c-format
 msgid "%pB: line number overflow: 0x%lx > 0xffff"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²; 0x%lx > 0xffff"
 
-#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235
+#: peXXigen.c:1226
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� [.edata (Ð°Ð±Ð¾ Ñ–Ð½ÑˆÐµ Ð¼Ñ–Ñ�Ñ†Ðµ, Ð´Ðµ Ð¹Ð¾Ð³Ð¾ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)]"
 
-#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236
+#: peXXigen.c:1227
 msgid "Import Directory [parts of .idata]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� [Ñ‡Ð°Ñ�Ñ‚Ð¸Ð½Ð¸ .idata]"
 
-#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237
+#: peXXigen.c:1228
 msgid "Resource Directory [.rsrc]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ€ÐµÑ�ÑƒÑ€Ñ�Ñ–Ð² [.rsrc]"
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1229
 msgid "Exception Directory [.pdata]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½ÑŒ [.pdata]"
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1230
 msgid "Security Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð°Ñ…Ð¸Ñ�Ñ‚Ñƒ"
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1231
 msgid "Base Relocation Directory [.reloc]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� [.reloc]"
 
-#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241
+#: peXXigen.c:1232
 msgid "Debug Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸"
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1233
 msgid "Description Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð¿Ð¸Ñ�Ñ–Ð²"
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1234
 msgid "Special Directory"
 msgstr "ÐžÑ�Ð¾Ð±Ð»Ð¸Ð²Ð¸Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³"
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1235
 msgid "Thread Storage Directory [.tls]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑ–Ð² [.tls]"
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1236
 msgid "Load Configuration Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ"
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1237
 msgid "Bound Import Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ð¸Ð¼ÑƒÑˆÐµÐ½Ð¾Ð³Ð¾ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1238
 msgid "Import Address Table Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð°Ð´Ñ€ÐµÑ�"
 
-#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248
+#: peXXigen.c:1239
 msgid "Delay Import Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ñ–Ð´ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð³Ð¾ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1240
 msgid "CLR Runtime Header"
 msgstr "Ð”Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº CLR"
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1241
 msgid "Reserved"
 msgstr "Ð—Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¾Ð²Ð°Ð½Ð¾"
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1306
 #, c-format
 msgid ""
 "\n"
@@ -8023,7 +9207,7 @@ msgstr ""
 "\n"
 "Ð†Ñ�Ð½ÑƒÑ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ‰Ð¾ Ñ—Ñ— Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾\n"
 
-#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316
+#: peXXigen.c:1312
 #, c-format
 msgid ""
 "\n"
@@ -8032,7 +9216,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ…\n"
 
-#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323
+#: peXXigen.c:1319
 #, c-format
 msgid ""
 "\n"
@@ -8041,30 +9225,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ 0x%lx\n"
 
-#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365
-#, c-format
-msgid ""
-"\n"
-"Function descriptor located at the start address: %04lx\n"
-msgstr ""
-"\n"
-"Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð¾ Ð·Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %04lx\n"
-
-#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369
-#, c-format
-msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
-msgstr "\ttoc Ð¾Ñ�Ð½Ð¾Ð²Ð¸ ÐºÐ¾Ð´Ñƒ %08lx (Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð½Ð¸Ð¹/Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ð¹) %08lx/%08lx\n"
-
-#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377
-#, c-format
-msgid ""
-"\n"
-"No reldata section! Function descriptor not decoded.\n"
-msgstr ""
-"\n"
-"Ð�ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ reldata! Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾.\n"
-
-#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382
+#: peXXigen.c:1325
 #, c-format
 msgid ""
 "\n"
@@ -8073,7 +9234,7 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s)\n"
 
-#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385
+#: peXXigen.c:1328
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -8082,7 +9243,7 @@ msgstr ""
 " vma:            Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð§Ð°Ñ�Ð¾Ð²Ð°    Ð›Ð°Ð½Ñ†ÑŽÐ¶Ð¾Ðº Ð�Ð°Ð·Ð²Ð°     ÐŸÐµÑ€ÑˆÐ¸Ð¹\n"
 "                 Ð²ÐºÐ°Ð·.   ÐŸÐ¾Ð·Ð½Ð°Ñ‡ÐºÐ°  Ñ�Ð¿Ñ€Ñ�Ð¼.   DLL       ÑˆÐ»ÑŽÐ·\n"
 
-#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435
+#: peXXigen.c:1377
 #, c-format
 msgid ""
 "\n"
@@ -8091,12 +9252,12 @@ msgstr ""
 "\n"
 "\tÐ�Ð°Ð·Ð²Ð° DLL: %.*s\n"
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1393
 #, c-format
 msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
 msgstr "\tvma:  Ð’ÐºÐ°Ð·/ÐŸÐ¾Ñ€ Ð�Ð°Ð·Ð²Ð°-ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð° ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·Ð°Ð½Ð¾-Ð´Ð¾\n"
 
-#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476
+#: peXXigen.c:1418
 #, c-format
 msgid ""
 "\n"
@@ -8105,13 +9266,12 @@ msgstr ""
 "\n"
 "Ð†Ñ�Ð½ÑƒÑ” Ð·Ð°Ð¿Ð¸Ñ� Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ, Ð°Ð»Ðµ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ‰Ð¾ Ð¹Ð¾Ð³Ð¾ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾\n"
 
-#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520
-#: pex64igen.c:1559
+#: peXXigen.c:1465 peXXigen.c:1504
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr "\t<Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾: 0x%04lx>"
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1597
 #, c-format
 msgid ""
 "\n"
@@ -8120,34 +9280,25 @@ msgstr ""
 "\n"
 "Ð†Ñ�Ð½ÑƒÑ” Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ‰Ð¾ Ñ—Ñ— Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾\n"
 
-#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658
-#, c-format
-msgid ""
-"\n"
-"There is an export table in %s, but that section has no contents\n"
-msgstr ""
-"\n"
-"Ð£ %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ…\n"
-
-#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669
+#: peXXigen.c:1610
 #, c-format
 msgid ""
 "\n"
-"There is an export table in %s, but it does not fit into that section\n"
+"There is an export table in %s, but it is too small (%d)\n"
 msgstr ""
 "\n"
-"Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñ—Ñ— Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–\n"
+"Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ð²Ð¾Ð½Ð° Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ (%d)\n"
 
-#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680
+#: peXXigen.c:1618
 #, c-format
 msgid ""
 "\n"
-"There is an export table in %s, but it is too small (%d)\n"
+"There is an export table in %s, but contents cannot be read\n"
 msgstr ""
 "\n"
-"Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ð²Ð¾Ð½Ð° Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ (%d)\n"
+"Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ð²Ð¼Ñ–Ñ�Ñ‚ Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸\n"
 
-#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686
+#: peXXigen.c:1624
 #, c-format
 msgid ""
 "\n"
@@ -8156,7 +9307,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ 0x%lx\n"
 
-#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714
+#: peXXigen.c:1655
 #, c-format
 msgid ""
 "\n"
@@ -8166,67 +9317,67 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ– ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s)\n"
 
-#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718
+#: peXXigen.c:1659
 #, c-format
 msgid "Export Flags \t\t\t%lx\n"
 msgstr "ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�\t\t%lx\n"
 
-#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721
+#: peXXigen.c:1662
 #, c-format
 msgid "Time/Date stamp \t\t%lx\n"
 msgstr "ÐŸÐ¾Ð·Ð½Ð°Ñ‡ÐºÐ° Ñ‡Ð°Ñ�Ñƒ/Ð´Ð°Ñ‚Ð¸\t\t%lx\n"
 
-#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725
+#: peXXigen.c:1666
 #, c-format
 msgid "Major/Minor \t\t\t%d/%d\n"
 msgstr "ÐžÑ�Ð½Ð¾Ð²Ð½Ð°/ÐœÐ¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� \t\t\t%d/%d\n"
 
-#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728
+#: peXXigen.c:1669
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr "Ð�Ð°Ð·Ð²Ð°\t\t\t\t"
 
-#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739
+#: peXXigen.c:1680
 #, c-format
 msgid "Ordinal Base \t\t\t%ld\n"
 msgstr "ÐžÑ�Ð½Ð¾Ð²Ð° Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ�\t\t%ld\n"
 
-#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742
+#: peXXigen.c:1683
 #, c-format
 msgid "Number in:\n"
 msgstr "Ð�Ð¾Ð¼ÐµÑ€ Ñƒ:\n"
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1686
 #, c-format
 msgid "\tExport Address Table \t\t%08lx\n"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ð°Ð´Ñ€ÐµÑ� \t\t%08lx\n"
 
-#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749
+#: peXXigen.c:1690
 #, c-format
 msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� [Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ð½Ð°Ð·Ð²/Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð²]\t%08lx\n"
 
-#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752
+#: peXXigen.c:1693
 #, c-format
 msgid "Table Addresses\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ‡Ð½Ñ– Ð°Ð´Ñ€ÐµÑ�Ð¸\n"
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1696
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ð°Ð´Ñ€ÐµÑ� \t\t"
 
-#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760
+#: peXXigen.c:1701
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ð½Ð° Ð½Ð°Ð·Ð²Ð¸ \t\t"
 
-#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765
+#: peXXigen.c:1706
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² \t\t\t"
 
-#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779
+#: peXXigen.c:1720
 #, c-format
 msgid ""
 "\n"
@@ -8235,20 +9386,20 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ð°Ð´Ñ€ÐµÑ� â€” Ð¾Ñ�Ð½Ð¾Ð²Ð° Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð²: %ld\n"
 
-#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788
+#: peXXigen.c:1729
 #, c-format
 msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\tÐ�ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ rva (0x%lx) Ð°Ð±Ð¾ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² (0x%lx) Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð°Ð´Ñ€ÐµÑ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�\n"
 
-#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807
+#: peXXigen.c:1748
 msgid "Forwarder RVA"
 msgstr "ÐŸÐµÑ€ÐµÑ�Ð¿Ñ€Ñ�Ð¼Ð¾Ð²Ð½Ð¸Ð¹ RVA"
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1760
 msgid "Export RVA"
 msgstr "Ð•ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ð¹ RVA"
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1767
 #, c-format
 msgid ""
 "\n"
@@ -8257,29 +9408,27 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� [Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð²/Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ð½Ð° Ð½Ð°Ð·Ð²Ð¸]\n"
 
-#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834
+#: peXXigen.c:1775
 #, c-format
 msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\tÐ�ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ rva (0x%lx) Ð°Ð±Ð¾ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² (0x%lx) Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ð½Ð° Ð½Ð°Ð·Ð²Ð¸\n"
 
-#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841
+#: peXXigen.c:1782
 #, c-format
 msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n"
 msgstr "\tÐ�ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ rva (0x%lx) Ð°Ð±Ð¾ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² (0x%lx) Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…\n"
 
-#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855
+#: peXXigen.c:1796
 #, c-format
 msgid "\t[%4ld] <corrupt offset: %lx>\n"
 msgstr "\t[%4ld] <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ñ�ÑƒÐ²: %lx>\n"
 
-#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909
-#: pex64igen.c:2106
+#: peXXigen.c:1851 peXXigen.c:2021
 #, c-format
 msgid "warning, .pdata section size (%ld) is not a multiple of %d\n"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .pdata (%ld) Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %d\n"
 
-#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913
-#: pex64igen.c:2110
+#: peXXigen.c:1855 peXXigen.c:2025
 #, c-format
 msgid ""
 "\n"
@@ -8288,12 +9437,12 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .pdata)\n"
 
-#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916
+#: peXXigen.c:1858
 #, c-format
 msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
 msgstr " vma:\t\t\tÐŸÐ¾Ñ‡Ð°Ñ‚. Ð°Ð´Ñ€ÐµÑ�Ð°    ÐšÑ–Ð½Ñ†. Ð°Ð´Ñ€ÐµÑ�Ð°      Ð”Ð°Ð½Ñ– unwind\n"
 
-#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918
+#: peXXigen.c:1860
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -8302,27 +9451,12 @@ msgstr ""
 " vma:\t\tÐŸÐ¾Ñ‡.     ÐšÑ–Ð½Ñ†.    ÐžÐ±Ñ€Ð¾Ð±Ð½Ð¸Ðº Ð”Ð°Ð½Ñ–     Ð�Ð´Ñ€ÐµÑ�Ð°     ÐœÐ°Ñ�ÐºÐ°\n"
 "     \t\tÐ°Ð´Ñ€ÐµÑ�Ð°   Ð°Ð´Ñ€ÐµÑ�Ð°   EH       EH       ÐºÑ–Ð½Ñ†. Ð¿Ñ€Ð¾Ð».Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ�\n"
 
-#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931
+#: peXXigen.c:1873
 #, c-format
 msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n"
 msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .pdata (%ld) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%ld)\n"
 
-#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001
-#, c-format
-msgid " Register save millicode"
-msgstr " ÐœÑ–Ð»Ñ–ÐºÐ¾Ð´ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð°"
-
-#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004
-#, c-format
-msgid " Register restore millicode"
-msgstr " ÐœÑ–Ð»Ñ–ÐºÐ¾Ð´ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð°"
-
-#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007
-#, c-format
-msgid " Glue code sequence"
-msgstr " ÐŸÐ¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ð·â€™Ñ”Ð´Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ"
-
-#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112
+#: peXXigen.c:2027
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -8331,7 +9465,7 @@ msgstr ""
 " vma:\t\tÐŸÐ¾Ñ‡.     Ð”Ð¾Ð²Ð¶Ð¸Ð½Ð°  Ð”Ð¾Ð²Ð¶Ð¸Ð½Ð°  ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– ÐžÐ±Ñ€Ð¾Ð±Ð½Ð¸Ðº  Ð”Ð°Ð½Ñ–\n"
 "     \t\tÐ°Ð´Ñ€ÐµÑ�Ð°   Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ñƒ  Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—  32Ð± Ð²Ð¸Ðº. Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½ÑŒ EH\n"
 
-#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234
+#: peXXigen.c:2152
 #, c-format
 msgid ""
 "\n"
@@ -8342,7 +9476,7 @@ msgstr ""
 "\n"
 "ÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ñ„Ð°Ð¹Ð»Ð° PE (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .reloc)\n"
 
-#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264
+#: peXXigen.c:2181
 #, c-format
 msgid ""
 "\n"
@@ -8351,62 +9485,62 @@ msgstr ""
 "\n"
 "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: %08lx, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð°: %ld (0x%lx), ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·Ð¾Ðº: %ld\n"
 
-#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282
+#: peXXigen.c:2199
 #, c-format
 msgid "\treloc %4d offset %4x [%4lx] %s"
 msgstr "\tÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %4d Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ %4x [%4lx] %s"
 
-#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343
+#: peXXigen.c:2260
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr "Ð’Ñ…Ñ–Ð´ Ð´Ð¾ %03x %*.s: "
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2284
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr "Ð½Ð°Ð·Ð²Ð°: [Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: %08lx Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° %d]: "
 
-#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387
+#: peXXigen.c:2304
 #, c-format
 msgid "<corrupt string length: %#x>\n"
 msgstr "<Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ°: %#x>\n"
 
-#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397
+#: peXXigen.c:2314
 #, c-format
 msgid "<corrupt string offset: %#lx>\n"
 msgstr "<Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ°: %#lx>\n"
 
-#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402
+#: peXXigen.c:2319
 #, c-format
 msgid "ID: %#08lx"
 msgstr "Ð†Ð´.: %#08lx"
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2322
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: %#08lx\n"
 
-#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427
+#: peXXigen.c:2344
 #, c-format
 msgid "%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
 msgstr "%03x Ð›Ð¸Ñ�Ñ‚Ð¾Ðº %*.s: Ð°Ð´Ñ€ÐµÑ�Ð°: %#08lx, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %#08lx, ÐºÐ¾Ð´Ð¾Ð²Ð° Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ°: %d\n"
 
-#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469
+#: peXXigen.c:2386
 #, c-format
 msgid "<unknown directory type: %d>\n"
 msgstr "<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ: %d>\n"
 
-#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477
+#: peXXigen.c:2394
 #, c-format
 msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n"
 msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ�: Ñ…Ð°Ñ€.: %d, Ñ‡Ð°Ñ�: %08lx, Ð²ÐµÑ€Ñ�Ñ–Ñ�: %d/%d, Ñ‡Ð¸Ñ�Ð»Ð¾Ð²Ñ– Ð½Ð°Ð·Ð²Ð¸: %d, Ñ–Ð´.: %d\n"
 
-#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566
+#: peXXigen.c:2482
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr "Ð’Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .rsrc!\n"
 
-#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590
+#: peXXigen.c:2506
 #, c-format
 msgid ""
 "\n"
@@ -8415,17 +9549,17 @@ msgstr ""
 "\n"
 "ÐŸÐžÐŸÐ•Ð Ð•Ð”Ð–Ð•Ð�Ð�Ð¯: Ð·Ð°Ð¹Ð²Ñ– Ð´Ð°Ð½Ñ– Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– .rsrc â€” Ñ—Ñ… Ð±ÑƒÐ´Ðµ Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾ Windows:\n"
 
-#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596
+#: peXXigen.c:2512
 #, c-format
 msgid " String table starts at offset: %#03x\n"
 msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ€Ñ�Ð´ÐºÑ–Ð² Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ‚Ð°ÐºÐ¸Ð¼ Ð·Ñ�ÑƒÐ²Ð¾Ð¼: %#03x\n"
 
-#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599
+#: peXXigen.c:2515
 #, c-format
 msgid " Resources start at offset: %#03x\n"
 msgstr " Ð ÐµÑ�ÑƒÑ€Ñ�Ð¸ Ð¿Ð¾Ñ‡Ð¸Ð½Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð· Ñ‚Ð°ÐºÐ¸Ð¼ Ð·Ñ�ÑƒÐ²Ð¾Ð¼: %#03x\n"
 
-#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651
+#: peXXigen.c:2572
 #, c-format
 msgid ""
 "\n"
@@ -8434,7 +9568,7 @@ msgstr ""
 "\n"
 "Ð†Ñ�Ð½ÑƒÑ” ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸, Ð°Ð»Ðµ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ‰Ð¾ Ð¹Ð¾Ð³Ð¾ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾\n"
 
-#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657
+#: peXXigen.c:2578
 #, c-format
 msgid ""
 "\n"
@@ -8443,7 +9577,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ñ” ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸, Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ…\n"
 
-#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664
+#: peXXigen.c:2585
 #, c-format
 msgid ""
 "\n"
@@ -8452,7 +9586,7 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…, Ð°Ð»Ðµ Ð²Ð¾Ð½Ð° Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ\n"
 
-#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669
+#: peXXigen.c:2590
 #, c-format
 msgid ""
 "\n"
@@ -8463,22 +9597,22 @@ msgstr ""
 "Ð’Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ñƒ %s Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ 0x%lx\n"
 "\n"
 
-#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676
+#: peXXigen.c:2597
 #, c-format
 msgid "The debug data size field in the data directory is too big for the section"
 msgstr "ÐŸÐ¾Ð»Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð·Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ Ð´Ð»Ñ� Ñ†ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681
+#: peXXigen.c:2602
 #, c-format
 msgid "Type                Size     Rva      Offset\n"
 msgstr "Ð¢Ð¸Ð¿                 Ð Ð¾Ð·Ð¼     Rva      Ð—Ñ�ÑƒÐ²\n"
 
-#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729
+#: peXXigen.c:2650
 #, c-format
-msgid "(format %c%c%c%c signature %s age %ld)\n"
-msgstr "(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ñ–Ð´Ð¿Ð¸Ñ� %s Ð²Ñ–Ðº %ld)\n"
+msgid "(format %c%c%c%c signature %s age %ld pdb %s)\n"
+msgstr "(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ñ–Ð´Ð¿Ð¸Ñ� %s Ð²Ñ–Ðº %ld pdb %s)\n"
 
-#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737
+#: peXXigen.c:2662
 #, c-format
 msgid "The debug directory size is not a multiple of the debug directory entry size\n"
 msgstr "Ð Ð¾Ð·Ð¼Ñ–Ñ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸\n"
@@ -8486,7 +9620,7 @@ msgstr "Ð Ð¾Ð·Ð¼Ñ–Ñ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´
 #. The MS dumpbin program reportedly ands with 0xff0f before
 #. printing the characteristics field.  Not sure why.  No reason to
 #. emulate it here.
-#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757
+#: peXXigen.c:2746
 #, c-format
 msgid ""
 "\n"
@@ -8495,105 +9629,292 @@ msgstr ""
 "\n"
 "Ð¥Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ¸ 0x%x\n"
 
-#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993
+#: peXXigen.c:3031
 #, c-format
-msgid "%pB: Data Directory size (%lx) exceeds space left in section (%<PRIx64>)"
-msgstr "%pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ð°Ð½Ð¸Ñ… (%lx) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¼Ñ–Ñ�Ñ†Ñ�, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– (%<PRIx64>)"
+msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
+msgstr "%pB: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ð°Ð½Ð¸Ñ… (%lx Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %<PRIx64>) Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ %<PRIx64>"
 
-#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025
+#: peXXigen.c:3072
 msgid "failed to update file offsets in debug directory"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ñ�ÑƒÐ²Ð¸ Ñ„Ð°Ð¹Ð»Ñ–Ð² Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð·Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸"
 
-#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033
+#: peXXigen.c:3081
 #, c-format
 msgid "%pB: failed to read debug data section"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…"
 
-#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849
+#: peXXigen.c:3884
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ñ€ÐµÑ�ÑƒÑ€Ñ� Ð· Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ€Ñ�Ð´ÐºÑ–Ð²: %d"
 
-#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984
+#: peXXigen.c:4019
 msgid ".rsrc merge failure: multiple non-default manifests"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð½ÐµÑ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… Ð¼Ð°Ð½Ñ–Ñ„ÐµÑ�Ñ‚Ñ–Ð²"
 
-#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002
+#: peXXigen.c:4037
 msgid ".rsrc merge failure: a directory matches a leaf"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð»Ð¸Ñ�Ñ‚Ð¾Ðº"
 
-#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044
+#: peXXigen.c:4079
 msgid ".rsrc merge failure: duplicate leaf"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð»Ð¸Ñ�Ñ‚ÐºÑ–Ð²"
 
-#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046
+#: peXXigen.c:4084
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð»Ð¸Ñ�Ñ‚ÐºÑ–Ð²: %s"
 
-#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112
+#: peXXigen.c:4151
 msgid ".rsrc merge failure: dirs with differing characteristics"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¸ Ð· Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ°Ð¼Ð¸"
 
-#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119
+#: peXXigen.c:4158
 msgid ".rsrc merge failure: differing directory versions"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð²Ñ–Ð´Ð¼Ñ–Ð½Ð½Ð¾Ñ�Ñ‚Ñ– Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ�Ñ… ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð²"
 
 #. Corrupted .rsrc section - cannot merge.
-#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236
+#: peXXigen.c:4270
 #, c-format
 msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .rsrc"
 
-#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244
+#: peXXigen.c:4278
 #, c-format
 msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ .rsrc"
 
-#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383
+#: peXXigen.c:4417
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$2"
 
-#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403
+#: peXXigen.c:4437
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$4"
 
-#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424
+#: peXXigen.c:4458
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[12], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$5"
 
-#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444
+#: peXXigen.c:4478
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” .idata$6"
 
-#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486
+#: peXXigen.c:4520
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ .idata$6 Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ”"
 
-#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511
+#: peXXigen.c:4545
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[9], Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” __tls_used"
 
-#~ msgid "%H: call to `%pT' lacks nop, can't restore toc; recompile with -fPIC\n"
-#~ msgstr "%H: Ñƒ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ Â«%pTÂ» Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” nop, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� toc Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ; Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð· -fPIC\n"
+#, c-format
+#~ msgid "%pB: unsupported relocation type name %s"
+#~ msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð½Ð°Ð·Ð²Ð° Ñ‚Ð¸Ð¿Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
+
+#~ msgid "f' and `c"
+#~ msgstr "fÂ» Ñ– Â«c"
+
+#~ msgid "d' and `c"
+#~ msgstr "dÂ» Ñ– Â«c"
+
+#~ msgid "zvknha"
+#~ msgstr "zvknha"
+
+#~ msgid "zvknhb"
+#~ msgstr "zvknhb"
+
+#~ msgid "Deprecated %s called at %s line %d in %s\n"
+#~ msgstr "Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s Ñƒ %s, Ñ€Ñ�Ð´Ð¾Ðº %d Ñƒ %s\n"
+
+#~ msgid "Deprecated %s called\n"
+#~ msgstr "Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s\n"
+
+#~ msgid "cannot read GST record length\n"
+#~ msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GST\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but that section has no contents\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ð£ %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ…\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There is an export table in %s, but it does not fit into that section\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñ—Ñ— Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–\n"
+
+#~ msgid "%pB: unable to initialize compress status for section %s"
+#~ msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð°Ð½ Ñ�Ñ‚Ð¸Ñ�ÐºÐ°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
+
+#~ msgid "%pB: unable to initialize decompress status for section %s"
+#~ msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð°Ð½ Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
+
+#~ msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+#~ msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pB(%pA) (%#<PRIx64> Ð±Ð°Ð¹Ñ‚Ñ–Ð²) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ„Ð°Ð¹Ð»Ð° (%#<PRIx64> Ð±Ð°Ð¹Ñ‚Ñ–Ð²)"
+
+#~ msgid "DWARF error: section %s is larger than 10x its filesize! (0x%lx vs 0x%lx)"
+#~ msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ñƒ Ð¿Ð¾Ð½Ð°Ð´ 10 Ñ€Ð°Ð·Ñ–Ð² Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¹Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°! (0x%lx Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ 0x%lx)"
+
+#~ msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+#~ msgstr "%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð¾ Ð½ÐµÑ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ñ‚Ð¸Ñ�Ð½ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
+
+#~ msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+#~ msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ %pA Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.\n"
+
+#~ msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n"
+#~ msgstr "F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ Ð³Ñ€ÑƒÐ¿Ñƒ %pA Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %pA Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.\n"
+
+#~ msgid "%pB: %pA+%"
+#~ msgstr "%pB: %pA+%"
+
+#~ msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
+#~ msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --enable-non-contiguous-regions Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð· Â«%sÂ»\n"
+
+#~ msgid "%s: standard ISA extension `%c' is not in canonical order"
+#~ msgstr "%s: Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%cÂ» Ð½Ðµ Ñƒ ÐºÐ°Ð½Ð¾Ð½Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ"
+
+#~ msgid "%s: unknown prefix class for the ISA extension `%s'"
+#~ msgstr "%s: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð½Ð¸Ð¹ ÐºÐ»Ð°Ñ� Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA: Â«%sÂ»"
+
+#~ msgid "rv32e does not support the `f' extension"
+#~ msgstr "Ñƒ rv32e Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«fÂ»"
+
+#~ msgid "%F%P: failed to create BND PLT section\n"
+#~ msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT BND\n"
+
+#~ msgid "%pB: no core to allocate section name %s"
+#~ msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð½Ð°Ð·Ð²Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
+
+#~ msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n"
+#~ msgstr "%%X%%P: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC\n"
+
+#~ msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
+#~ msgstr "%pB: Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº aout Ð²ÐºÐ°Ð·ÑƒÑ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñƒ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ð°Ð½Ð¸Ñ…: %u"
+
+#~ msgid "%pB: page size is too large (0x%x)"
+#~ msgstr "%pB: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ (0x%x)"
+
+#~ msgid "%s: duplicate prefixed ISA extension `%s'"
+#~ msgstr "%s: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ»"
+
+#~ msgid "%s: prefixed ISA extension `%s' is not in expected order.  It must come before `%s'"
+#~ msgstr "%s: Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ�Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ» Ð½Ðµ Ñƒ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ. Ð’Ð¾Ð½Ð¾ Ð¼Ð°Ñ” Ð¿ÐµÑ€ÐµÐ´ÑƒÐ²Ð°Ñ‚Ð¸ Â«%sÂ»"
+
+#~ msgid "warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output version is %d.%d"
+#~ msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ� ISA %d.%d Ð´Ð»Ñ� Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«%sÂ», Ð²ÐµÑ€Ñ�Ñ–Ñ� Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ â€” %d.%d"
+
+#~ msgid "%pB: TLS relocation at (0x%"
+#~ msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ (0x%"
+
+#~ msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
+#~ msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² (%#lx) Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð¼Ñ–Ñ�Ñ†Ðµ Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%#lx)"
+
+#~ msgid "internal error: RL78 reloc stack overflow"
+#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ RL78"
+
+#~ msgid ""
+#~ "%s  branch         %lu\n"
+#~ "  branch toc adj %lu\n"
+#~ "  branch notoc   %lu\n"
+#~ "  branch both    %lu\n"
+#~ "  long branch    %lu\n"
+#~ "  long toc adj   %lu\n"
+#~ "  long notoc     %lu\n"
+#~ "  long both      %lu\n"
+#~ "  plt call       %lu\n"
+#~ "  plt call save  %lu\n"
+#~ "  plt call notoc %lu\n"
+#~ "  plt call both  %lu\n"
+#~ "  global entry   %lu"
+#~ msgstr ""
+#~ "%s  Ð³Ñ–Ð»ÐºÐ°          %lu\n"
+#~ "  toc adj Ð³Ñ–Ð»ÐºÐ¸  %lu\n"
+#~ "  notoc Ð³Ñ–Ð»ÐºÐ¸    %lu\n"
+#~ "  both Ð³Ñ–Ð»ÐºÐ¸     %lu\n"
+#~ "  long branch    %lu\n"
+#~ "  long toc adj   %lu\n"
+#~ "  long notoc     %lu\n"
+#~ "  long both      %lu\n"
+#~ "  plt call       %lu\n"
+#~ "  plt call save  %lu\n"
+#~ "  plt call notoc %lu\n"
+#~ "  plt call both  %lu\n"
+#~ "  Ð·Ð°Ð³. Ð·Ð°Ð¿Ð¸Ñ�     %lu"
+
+#~ msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
+#~ msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° >= %<PRIu64>, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾: %<PRIu64>."
+
+#~ msgid "-march=%s: expect number after `%dp'"
+#~ msgstr "-march=%s: Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ Ñ‡Ð¸Ñ�Ð»Ð¾ Ð¿Ñ–Ñ�Ð»Ñ� Â«%dpÂ»"
+
+#~ msgid "-march=%s: rv%de is not a valid base ISA"
+#~ msgstr "-march=%s: rv%de Ð½Ðµ Ñ” ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ ISA Ð¾Ñ�Ð½Ð¾Ð²Ð¸"
+
+#~ msgid "   Error: length larger than remaining space in record\n"
+#~ msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¼Ñ–Ñ�Ñ†Ðµ, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–\n"
+
+#~ msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+#~ msgstr "STA_QW (Ñ�Ñ‚ÐµÐº Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ð¸Ñ… Ñ�Ð»Ñ–Ð²) 0x%08x %08x\n"
+
+#~ msgid "%pB: error: erratum 843419 immediate 0x%"
+#~ msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¼Ñ–Ð¶Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð´Ð»Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 843419 0x%"
+
+#~ msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
+#~ msgstr "%pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ [Â«%pAÂ» Ñƒ %pB] Ñ– Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ [Â«%pAÂ» Ñƒ %pB] Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸"
+
+#~ msgid "%pA has both ordered and unordered sections"
+#~ msgstr "%pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ– Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸"
+
+#~ msgid "%F%P: %pA has ordered sections with incompatible alignments\n"
+#~ msgstr "%F%P: %pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ Ñ–Ð· Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼Ð¸ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼Ð¸\n"
+
+#~ msgid "-march=%s: unexpected ISA string at end: %s"
+#~ msgstr "-march=%s: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº ISA Ð½Ð°Ð¿Ñ€Ð¸ÐºÑ–Ð½Ñ†Ñ–: %s"
+
+#~ msgid "%pB: warning: sh_link not set for section `%pA'"
+#~ msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ sh_link Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»"
+
+#~ msgid "-march=%s: unsupported ISA subset `%c'"
+#~ msgstr "-march=%s: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ñ–Ð´Ð¼Ð½Ð¾Ð¶Ð¸Ð½Ð° ISA Â«%cÂ»"
+
+#~ msgid "-march=%s: `d' extension requires `f' extension"
+#~ msgstr "-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«dÂ» Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«fÂ»"
+
+#~ msgid "-march=%s: `q' extension requires `d' extension"
+#~ msgstr "-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«qÂ» Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«dÂ»"
+
+#~ msgid ""
+#~ "\n"
+#~ "Function descriptor located at the start address: %04lx\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð¾ Ð·Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %04lx\n"
 
-#~ msgid "error: %pB: <corrupt x86 ISA used size: 0x%x>"
-#~ msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾Ð³Ð¾ ISA x86: 0x%x>"
+#~ msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
+#~ msgstr "\ttoc Ð¾Ñ�Ð½Ð¾Ð²Ð¸ ÐºÐ¾Ð´Ñƒ %08lx (Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð½Ð¸Ð¹/Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ð¹) %08lx/%08lx\n"
 
-#~ msgid "error: %pB: <corrupt x86 ISA needed size: 0x%x>"
-#~ msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ð³Ð¾ ISA x86: 0x%x>"
+#~ msgid ""
+#~ "\n"
+#~ "No reldata section! Function descriptor not decoded.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ð�ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ reldata! Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾.\n"
 
-#~ msgid "%pB: can't link hard-float modules with soft-float modules"
-#~ msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ– Ñ–Ð· Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾ÑŽ Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ Ñ–Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ Ñ–Ð· Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾ÑŽ Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ"
+#~ msgid " Register save millicode"
+#~ msgstr " ÐœÑ–Ð»Ñ–ÐºÐ¾Ð´ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð°"
 
-#~ msgid "%pB(%pA+%#<PRIx64>): Unable to clear RISCV_PCREL_HI20 reloc for corresponding RISCV_PCREL_LO12 reloc"
-#~ msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ñ‡Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ RISCV_PCREL_HI20 relocfor, Ñ‰Ð¾ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½ÑŽ RISCV_PCREL_LO12"
+#~ msgid " Register restore millicode"
+#~ msgstr " ÐœÑ–Ð»Ñ–ÐºÐ¾Ð´ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð°"
 
-#~ msgid "%pB: Data Directory size (%#lx) is negative"
-#~ msgstr "%pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ð°Ð½Ð¸Ñ… (%#lx) Ñ” Ð²Ñ–Ð´'Ñ”Ð¼Ð½Ð¸Ð¼"
+#~ msgid " Glue code sequence"
+#~ msgstr " ÐŸÐ¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ð·â€™Ñ”Ð´Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/PORTING ./bfd/PORTING
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/PORTING	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/PORTING	2024-02-01 01:47:13.000000000 +0000
@@ -82,7 +82,7 @@ TARGETNAME
 	The name of the target, for run-time lookups.
 	Usually "a.out-<target>"
 
-Copyright (C) 2012-2019 Free Software Foundation, Inc.
+Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ppcboot.c ./bfd/ppcboot.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ppcboot.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/ppcboot.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for PPCbug boot records.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Written by Michael Meissner, Cygnus Support, <meissner@cygnus.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -97,21 +97,21 @@ typedef struct ppcboot_data
 
 /* Create a ppcboot object.  Invoked via bfd_set_format.  */
 
-static bfd_boolean
+static bool
 ppcboot_mkobject (bfd *abfd)
 {
   if (!ppcboot_get_tdata (abfd))
     {
-      bfd_size_type amt = sizeof (ppcboot_data_t);
+      size_t amt = sizeof (ppcboot_data_t);
       ppcboot_set_tdata (abfd, bfd_zalloc (abfd, amt));
     }
 
-  return TRUE;
+  return true;
 }
 
 
 /* Set the architecture to PowerPC */
-static bfd_boolean
+static bool
 ppcboot_set_arch_mach (bfd *abfd,
 		       enum bfd_architecture arch,
 		       unsigned long machine)
@@ -120,7 +120,7 @@ ppcboot_set_arch_mach (bfd *abfd,
     arch = bfd_arch_powerpc;
 
   else if (arch != bfd_arch_powerpc)
-    return FALSE;
+    return false;
 
   return bfd_default_set_arch_mach (abfd, arch, machine);
 }
@@ -130,7 +130,7 @@ ppcboot_set_arch_mach (bfd *abfd,
    was not defaulted.  That is, it must be explicitly specified as
    being ppcboot.  */
 
-static const bfd_target *
+static bfd_cleanup
 ppcboot_object_p (bfd *abfd)
 {
   struct stat statbuf;
@@ -161,8 +161,7 @@ ppcboot_object_p (bfd *abfd)
       return NULL;
     }
 
-  if (bfd_bread (&hdr, (bfd_size_type) sizeof (hdr), abfd)
-      != sizeof (hdr))
+  if (bfd_read (&hdr, sizeof (hdr), abfd) != sizeof (hdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -207,7 +206,7 @@ ppcboot_object_p (bfd *abfd)
   memcpy (&tdata->header, &hdr, sizeof (ppcboot_hdr_t));
 
   ppcboot_set_arch_mach (abfd, bfd_arch_powerpc, 0L);
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 #define ppcboot_close_and_cleanup _bfd_generic_close_and_cleanup
@@ -217,17 +216,17 @@ ppcboot_object_p (bfd *abfd)
 
 /* Get contents of the only section.  */
 
-static bfd_boolean
+static bool
 ppcboot_get_section_contents (bfd *abfd,
 			      asection *section ATTRIBUTE_UNUSED,
 			      void * location,
 			      file_ptr offset,
 			      bfd_size_type count)
 {
-  if (bfd_seek (abfd, offset + (file_ptr) sizeof (ppcboot_hdr_t), SEEK_SET) != 0
-      || bfd_bread (location, count, abfd) != count)
-    return FALSE;
-  return TRUE;
+  if (bfd_seek (abfd, offset + sizeof (ppcboot_hdr_t), SEEK_SET) != 0
+      || bfd_read (location, count, abfd) != count)
+    return false;
+  return true;
 }
 
 
@@ -276,11 +275,11 @@ ppcboot_canonicalize_symtab (bfd *abfd,
   asection *sec = ppcboot_get_tdata (abfd)->sec;
   asymbol *syms;
   unsigned int i;
-  bfd_size_type amt = PPCBOOT_SYMS * sizeof (asymbol);
+  size_t amt = PPCBOOT_SYMS * sizeof (asymbol);
 
   syms = (asymbol *) bfd_alloc (abfd, amt);
   if (syms == NULL)
-    return FALSE;
+    return false;
 
   /* Start symbol.  */
   syms[0].the_bfd = abfd;
@@ -332,6 +331,7 @@ ppcboot_get_symbol_info (bfd *ignore_abf
 #define ppcboot_bfd_is_local_label_name bfd_generic_is_local_label_name
 #define ppcboot_get_lineno _bfd_nosymbols_get_lineno
 #define ppcboot_find_nearest_line _bfd_nosymbols_find_nearest_line
+#define ppcboot_find_nearest_line_with_alt _bfd_nosymbols_find_nearest_line_with_alt
 #define ppcboot_find_line _bfd_nosymbols_find_line
 #define ppcboot_find_inliner_info _bfd_nosymbols_find_inliner_info
 #define ppcboot_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
@@ -340,7 +340,7 @@ ppcboot_get_symbol_info (bfd *ignore_abf
 
 /* Write section contents of a ppcboot file.  */
 
-static bfd_boolean
+static bool
 ppcboot_set_section_contents (bfd *abfd,
 			      asection *sec,
 			      const void * data,
@@ -363,7 +363,7 @@ ppcboot_set_section_contents (bfd *abfd,
       for (s = abfd->sections; s != NULL; s = s->next)
 	s->filepos = s->vma - low;
 
-      abfd->output_has_begun = TRUE;
+      abfd->output_has_begun = true;
     }
 
   return _bfd_generic_set_section_contents (abfd, sec, data, offset, size);
@@ -380,7 +380,7 @@ ppcboot_sizeof_headers (bfd *abfd ATTRIB
 
 /* Print out the program headers.  */
 
-static bfd_boolean
+static bool
 ppcboot_bfd_print_private_bfd_data (bfd *abfd, void * farg)
 {
   FILE *f = (FILE *)farg;
@@ -445,7 +445,7 @@ ppcboot_bfd_print_private_bfd_data (bfd
     }
 
   fprintf (f, "\n");
-  return TRUE;
+  return true;
 }
 
 
@@ -495,6 +495,7 @@ const bfd_target powerpc_boot_vec =
   ' ',				/* ar_pad_char */
   16,				/* ar_max_namelen */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ptrace-core.c ./bfd/ptrace-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/ptrace-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/ptrace-core.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD backend for core files which use the ptrace_user structure
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
    The structure of this file is based on trad-core.c written by John Gilmore
    of Cygnus Support.
    Modified to work with the ptrace_user structure by Kevin A. Buettner.
@@ -48,23 +48,23 @@ struct trad_core_struct
 
 /* forward declarations */
 
-const bfd_target *ptrace_unix_core_file_p (bfd *abfd);
+bfd_cleanup ptrace_unix_core_file_p (bfd *abfd);
 char * ptrace_unix_core_file_failing_command (bfd *abfd);
 int ptrace_unix_core_file_failing_signal (bfd *abfd);
 #define ptrace_unix_core_file_matches_executable_p generic_core_file_matches_executable_p
 #define ptrace_unix_core_file_pid _bfd_nocore_core_file_pid
 static void swap_abort (void);
 
-const bfd_target *
+bfd_cleanup
 ptrace_unix_core_file_p (bfd *abfd)
 {
   int val;
   struct ptrace_user u;
   struct trad_core_struct *rawptr;
-  bfd_size_type amt;
+  size_t amt;
   flagword flags;
 
-  val = bfd_bread ((void *)&u, (bfd_size_type) sizeof u, abfd);
+  val = bfd_read (&u, sizeof u, abfd);
   if (val != sizeof u || u.pt_magic != _BCS_PTRACE_MAGIC
       || u.pt_rev != _BCS_PTRACE_REV)
     {
@@ -124,7 +124,7 @@ ptrace_unix_core_file_p (bfd *abfd)
   core_datasec (abfd)->alignment_power = 2;
   core_regsec (abfd)->alignment_power = 2;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  fail:
   bfd_release (abfd, abfd->tdata.any);
@@ -160,9 +160,9 @@ swap_abort (void)
 #define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
 #define	NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
 #define	NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
-#define	NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
-#define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
-#define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
+#define	NO_GET64 ((uint64_t (*) (const void *)) swap_abort)
+#define	NO_PUT64 ((void (*) (uint64_t, void *)) swap_abort)
+#define	NO_GETS64 ((int64_t (*) (const void *)) swap_abort)
 
 const bfd_target core_ptrace_vec =
   {
@@ -177,6 +177,7 @@ const bfd_target core_ptrace_vec =
     0,							   /* symbol prefix */
     ' ',						   /* ar_pad_char */
     16,							   /* ar_max_namelen */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
     NO_GET64, NO_GETS64, NO_PUT64,	/* 64 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 32 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 16 bit data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/README ./bfd/README
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/README	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/README	2024-02-01 01:47:13.000000000 +0000
@@ -34,7 +34,7 @@ BFD supports the following configure opt
 	Use mmap when accessing files.  This is faster on some hosts,
 	but slower on others.  It may not work on all hosts.
 
-Report bugs with BFD to bug-binutils@gnu.org.
+Report bugs in BFD to https://sourceware.org/bugzilla/
 
 Patches are encouraged.  When sending patches, always send the output
 of diff -u or diff -c from the original file to the new file.  Do not
@@ -48,7 +48,7 @@ gcc manual.
 Bug reports without patches will be remembered, but they may never get
 fixed until somebody volunteers to fix them.
 
-Copyright (C) 2012-2019 Free Software Foundation, Inc.
+Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/reloc16.c ./bfd/reloc16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/reloc16.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/reloc16.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* 8 and 16 bit COFF relocation functions, for BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -63,7 +63,7 @@ bfd_coff_reloc16_get_value (arelent *rel
 	 the generic symbols.  */
       h = bfd_wrapped_link_hash_lookup (input_section->owner, link_info,
 					bfd_asymbol_name (symbol),
-					FALSE, FALSE, TRUE);
+					false, false, true);
       if (h != (struct bfd_link_hash_entry *) NULL
 	  && (h->type == bfd_link_hash_defined
 	      || h->type == bfd_link_hash_defweak))
@@ -81,7 +81,7 @@ bfd_coff_reloc16_get_value (arelent *rel
 	{
 	  (*link_info->callbacks->undefined_symbol)
 	    (link_info, bfd_asymbol_name (symbol),
-	     input_section->owner, input_section, reloc->address, TRUE);
+	     input_section->owner, input_section, reloc->address, true);
 	  value = 0;
 	}
     }
@@ -136,11 +136,11 @@ bfd_perform_slip (bfd *abfd,
     }
 }
 
-bfd_boolean
+bool
 bfd_coff_reloc16_relax_section (bfd *abfd,
 				asection *input_section,
 				struct bfd_link_info *link_info,
-				bfd_boolean *again)
+				bool *again)
 {
   /* Get enough memory to hold the stuff.  */
   bfd *input_bfd = input_section->owner;
@@ -156,14 +156,14 @@ bfd_coff_reloc16_relax_section (bfd *abf
 
   /* We only do global relaxation once.  It is not safe to do it multiple
      times (see discussion of the "shrinks" array below).  */
-  *again = FALSE;
+  *again = false;
 
   if (reloc_size < 0)
-    return FALSE;
+    return false;
 
   reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
   if (!reloc_vector && reloc_size > 0)
-    return FALSE;
+    return false;
 
   /* Get the relocs and think about them.  */
   reloc_count =
@@ -172,7 +172,7 @@ bfd_coff_reloc16_relax_section (bfd *abf
   if (reloc_count < 0)
     {
       free (reloc_vector);
-      return FALSE;
+      return false;
     }
 
   /* The reloc16.c and related relaxing code is very simple, the price
@@ -236,7 +236,7 @@ bfd_coff_reloc16_relax_section (bfd *abf
   input_section->rawsize = input_section->size;
   input_section->size -= shrink;
   free ((char *) reloc_vector);
-  return TRUE;
+  return true;
 }
 
 bfd_byte *
@@ -245,17 +245,17 @@ bfd_coff_reloc16_get_relocated_section_c
    struct bfd_link_info *link_info,
    struct bfd_link_order *link_order,
    bfd_byte *data,
-   bfd_boolean relocatable,
+   bool relocatable,
    asymbol **symbols)
 {
   /* Get enough memory to hold the stuff.  */
   bfd *input_bfd = link_order->u.indirect.section->owner;
   asection *input_section = link_order->u.indirect.section;
-  long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
+  long reloc_size;
   arelent **reloc_vector;
   long reloc_count;
-  bfd_size_type sz;
 
+  reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
   if (reloc_size < 0)
     return NULL;
 
@@ -267,32 +267,35 @@ bfd_coff_reloc16_get_relocated_section_c
 						       symbols);
 
   /* Read in the section.  */
-  sz = input_section->rawsize ? input_section->rawsize : input_section->size;
-  if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
+  bfd_byte *orig_data = data;
+  if (!bfd_get_full_section_contents (input_bfd, input_section, &data))
     return NULL;
 
-  reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
-  if (!reloc_vector && reloc_size != 0)
+  if (data == NULL)
     return NULL;
 
+  if (reloc_size == 0)
+    return data;
+
+  reloc_vector = (arelent **) bfd_malloc (reloc_size);
+  if (reloc_vector == NULL)
+    goto error_return;
+
   reloc_count = bfd_canonicalize_reloc (input_bfd,
 					input_section,
 					reloc_vector,
 					symbols);
   if (reloc_count < 0)
-    {
-      free (reloc_vector);
-      return NULL;
-    }
+    goto error_return;
 
   if (reloc_count > 0)
     {
       arelent **parent = reloc_vector;
       arelent *reloc;
-      unsigned int dst_address = 0;
-      unsigned int src_address = 0;
-      unsigned int run;
-      unsigned int idx;
+      size_t dst_address = 0;
+      size_t src_address = 0;
+      size_t run;
+      size_t idx;
 
       /* Find how long a run we can do.  */
       while (dst_address < link_order->size)
@@ -303,6 +306,15 @@ bfd_coff_reloc16_get_relocated_section_c
 	      /* Note that the relaxing didn't tie up the addresses in the
 		 relocation, so we use the original address to work out the
 		 run of non-relocated data.  */
+	      if (reloc->address > link_order->size
+		  || reloc->address < src_address)
+		{
+		  link_info->callbacks->einfo
+		    /* xgettext:c-format */
+		    (_("%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"),
+		     input_bfd, input_section, reloc);
+		  goto error_return;
+		}
 	      run = reloc->address - src_address;
 	      parent++;
 	    }
@@ -316,14 +328,19 @@ bfd_coff_reloc16_get_relocated_section_c
 	    data[dst_address++] = data[src_address++];
 
 	  /* Now do the relocation.  */
-	  if (reloc)
-	    {
-	      bfd_coff_reloc16_extra_cases (input_bfd, link_info, link_order,
-					    reloc, data, &src_address,
-					    &dst_address);
-	    }
+	  if (reloc
+	      && !bfd_coff_reloc16_extra_cases (input_bfd, link_info,
+						link_order, reloc, data,
+						&src_address, &dst_address))
+	    goto error_return;
 	}
     }
-  free ((char *) reloc_vector);
+  free (reloc_vector);
   return data;
+
+ error_return:
+  free (reloc_vector);
+  if (orig_data == NULL)
+    free (data);
+  return NULL;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/reloc.c ./bfd/reloc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/reloc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/reloc.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for handling relocation entries.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -51,6 +51,7 @@ SECTION
 #include "bfdlink.h"
 #include "libbfd.h"
 #include "bfdver.h"
+
 /*
 DOCDD
 INODE
@@ -61,8 +62,7 @@ SUBSECTION
 
 	This is the structure of a relocation entry:
 
-CODE_FRAGMENT
-.
+EXTERNAL
 .typedef enum bfd_reloc_status
 .{
 .  {* No errors detected.  Note - the value 2 is used so that it
@@ -81,7 +81,7 @@ CODE_FRAGMENT
 .  {* Unsupported relocation size requested.  *}
 .  bfd_reloc_notsupported,
 .
-.  {* Unused.  *}
+.  {* Target specific meaning.  *}
 .  bfd_reloc_other,
 .
 .  {* The symbol to relocate against was undefined.  *}
@@ -96,7 +96,9 @@ CODE_FRAGMENT
 .
 .typedef const struct reloc_howto_struct reloc_howto_type;
 .
-.typedef struct reloc_cache_entry
+
+CODE_FRAGMENT
+.struct reloc_cache_entry
 .{
 .  {* A pointer into the canonical table of pointers.  *}
 .  struct bfd_symbol **sym_ptr_ptr;
@@ -110,8 +112,7 @@ CODE_FRAGMENT
 .  {* Pointer to how to perform the required relocation.  *}
 .  reloc_howto_type *howto;
 .
-.}
-.arelent;
+.};
 .
 */
 
@@ -250,7 +251,6 @@ SUBSUBSECTION
 	performing a relocation.
 
 CODE_FRAGMENT
-.
 .enum complain_overflow
 .{
 .  {* Do not complain on overflow.  *}
@@ -269,7 +269,7 @@ CODE_FRAGMENT
 .     unsigned number.  *}
 .  complain_overflow_unsigned
 .};
-
+.
 */
 
 /*
@@ -287,10 +287,8 @@ CODE_FRAGMENT
 .     an external reloc number is stored in this field.  *}
 .  unsigned int type;
 .
-.  {* The encoded size of the item to be relocated.  This is *not* a
-.     power-of-two measure.  Use bfd_get_reloc_size to find the size
-.     of the item in bytes.  *}
-.  unsigned int size:3;
+.  {* The size of the item to be relocated in bytes.  *}
+.  unsigned int size:4;
 .
 .  {* The number of bits in the field to be relocated.  This is used
 .     when doing overflow checking.  *}
@@ -339,6 +337,11 @@ CODE_FRAGMENT
 .     empty (e.g., ELF); this flag signals the fact.  *}
 .  unsigned int pcrel_offset:1;
 .
+.  {* Whether bfd_install_relocation should just install the addend,
+.     or should follow the practice of some older object formats and
+.     install a value including the symbol.  *}
+.  unsigned int install_addend:1;
+.
 .  {* src_mask selects the part of the instruction (or data) to be used
 .     in the relocation sum.  If the target relocations don't have an
 .     addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
@@ -374,53 +377,34 @@ DESCRIPTION
 	The HOWTO macro fills in a reloc_howto_type (a typedef for
 	const struct reloc_howto_struct).
 
+.#define HOWTO_INSTALL_ADDEND 0
+.#define HOWTO_RSIZE(sz) ((sz) < 0 ? -(sz) : (sz))
 .#define HOWTO(type, right, size, bits, pcrel, left, ovf, func, name,	\
 .              inplace, src_mask, dst_mask, pcrel_off)			\
-.  { (unsigned) type, size < 0 ? -size : size, bits, right, left, ovf,	\
-.    size < 0, pcrel, inplace, pcrel_off, src_mask, dst_mask, func, name }
+.  { (unsigned) type, HOWTO_RSIZE (size), bits, right, left, ovf,	\
+.    size < 0, pcrel, inplace, pcrel_off, HOWTO_INSTALL_ADDEND,		\
+.    src_mask, dst_mask, func, name }
 
 DESCRIPTION
 	This is used to fill in an empty howto entry in an array.
 
 .#define EMPTY_HOWTO(C) \
-.  HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
-.	  NULL, FALSE, 0, 0, FALSE)
+.  HOWTO ((C), 0, 1, 0, false, 0, complain_overflow_dont, NULL, \
+.	  NULL, false, 0, 0, false)
+.
+.static inline unsigned int
+.bfd_get_reloc_size (reloc_howto_type *howto)
+.{
+.  return howto->size;
+.}
 .
 */
 
 /*
-FUNCTION
-	bfd_get_reloc_size
-
-SYNOPSIS
-	unsigned int bfd_get_reloc_size (reloc_howto_type *);
-
-DESCRIPTION
-	For a reloc_howto_type that operates on a fixed number of bytes,
-	this returns the number of bytes operated on.
- */
-
-unsigned int
-bfd_get_reloc_size (reloc_howto_type *howto)
-{
-  switch (howto->size)
-    {
-    case 0: return 1;
-    case 1: return 2;
-    case 2: return 4;
-    case 3: return 0;
-    case 4: return 8;
-    case 5: return 3;
-    default: abort ();
-    }
-}
-
-/*
-TYPEDEF
+DEFINITION
 	arelent_chain
 
 DESCRIPTION
-
 	How relocs are tied together in an <<asection>>:
 
 .typedef struct relent_chain
@@ -432,8 +416,9 @@ DESCRIPTION
 .
 */
 
-/* N_ONES produces N one bits, without overflowing machine arithmetic.  */
-#define N_ONES(n) (((((bfd_vma) 1 << ((n) - 1)) - 1) << 1) | 1)
+/* N_ONES produces N one bits, without undefined behaviour for N
+   between zero and the number of bits in a bfd_vma.  */
+#define N_ONES(n) ((n) == 0 ? 0 : ((bfd_vma) 1 << ((n) - 1) << 1) - 1)
 
 /*
 FUNCTION
@@ -466,6 +451,9 @@ bfd_check_overflow (enum complain_overfl
   bfd_vma fieldmask, addrmask, signmask, ss, a;
   bfd_reloc_status_type flag = bfd_reloc_ok;
 
+  if (bitsize == 0)
+    return flag;
+
   /* Note: BITSIZE should always be <= ADDRSIZE, but in case it's not,
      we'll be permissive: extra bits in the field mask will
      automatically extend the address mask for purposes of the
@@ -515,7 +503,7 @@ FUNCTION
 	bfd_reloc_offset_in_range
 
 SYNOPSIS
-	bfd_boolean bfd_reloc_offset_in_range
+	bool bfd_reloc_offset_in_range
 	  (reloc_howto_type *howto,
 	   bfd *abfd,
 	   asection *section,
@@ -530,7 +518,7 @@ DESCRIPTION
 /* HOWTO describes a relocation, at offset OCTET.  Return whether the
    relocation field is within SECTION of ABFD.  */
 
-bfd_boolean
+bool
 bfd_reloc_offset_in_range (reloc_howto_type *howto,
 			   bfd *abfd,
 			   asection *section,
@@ -542,7 +530,7 @@ bfd_reloc_offset_in_range (reloc_howto_t
   /* The reloc field must be contained entirely within the section.
      Allow zero length fields (marker relocs or NONE relocs where no
      relocation will be performed) at the end of the section.  */
-  return octet <= octet_end && octet + reloc_size <= octet_end;
+  return octet <= octet_end && reloc_size <= octet_end - octet;
 }
 
 /* Read and return the section contents at DATA converted to a host
@@ -551,28 +539,28 @@ bfd_reloc_offset_in_range (reloc_howto_t
 static bfd_vma
 read_reloc (bfd *abfd, bfd_byte *data, reloc_howto_type *howto)
 {
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
     case 0:
-      return bfd_get_8 (abfd, data);
+      break;
 
     case 1:
-      return bfd_get_16 (abfd, data);
+      return bfd_get_8 (abfd, data);
 
     case 2:
-      return bfd_get_32 (abfd, data);
+      return bfd_get_16 (abfd, data);
 
     case 3:
-      break;
+      return bfd_get_24 (abfd, data);
 
-#ifdef BFD64
     case 4:
+      return bfd_get_32 (abfd, data);
+
+#ifdef BFD64
+    case 8:
       return bfd_get_64 (abfd, data);
 #endif
 
-    case 5:
-      return bfd_get_24 (abfd, data);
-
     default:
       abort ();
     }
@@ -585,32 +573,32 @@ read_reloc (bfd *abfd, bfd_byte *data, r
 static void
 write_reloc (bfd *abfd, bfd_vma val, bfd_byte *data, reloc_howto_type *howto)
 {
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
     case 0:
-      bfd_put_8 (abfd, val, data);
       break;
 
     case 1:
-      bfd_put_16 (abfd, val, data);
+      bfd_put_8 (abfd, val, data);
       break;
 
     case 2:
-      bfd_put_32 (abfd, val, data);
+      bfd_put_16 (abfd, val, data);
       break;
 
     case 3:
+      bfd_put_24 (abfd, val, data);
       break;
 
-#ifdef BFD64
     case 4:
-      bfd_put_64 (abfd, val, data);
+      bfd_put_32 (abfd, val, data);
       break;
-#endif
 
-    case 5:
-      bfd_put_24 (abfd, val, data);
+#ifdef BFD64
+    case 8:
+      bfd_put_64 (abfd, val, data);
       break;
+#endif
 
     default:
       abort ();
@@ -818,9 +806,7 @@ bfd_perform_relocation (bfd *abfd,
 	  reloc_entry->address += input_section->output_offset;
 
 	  /* WTF?? */
-	  if (abfd->xvec->flavour == bfd_target_coff_flavour
-	      && strcmp (abfd->xvec->name, "coff-Intel-little") != 0
-	      && strcmp (abfd->xvec->name, "coff-Intel-big") != 0)
+	  if (abfd->xvec->flavour == bfd_target_coff_flavour)
 	    {
 	      /* For m68k-coff, the addend was being subtracted twice during
 		 relocation with -r.  Removing the line below this comment
@@ -1038,8 +1024,6 @@ bfd_install_relocation (bfd *abfd,
 	 reloc_entry->address field might actually be valid for the
 	 backend concerned.  It is up to the special_function itself
 	 to call bfd_reloc_offset_in_range if needed.  */
-      /* XXX - The special_function calls haven't been fixed up to deal
-	 with creating new relocations and section contents.  */
       cont = howto->special_function (abfd, reloc_entry, symbol,
 				      /* XXX - Non-portable! */
 				      ((bfd_byte *) data_start
@@ -1049,199 +1033,81 @@ bfd_install_relocation (bfd *abfd,
 	return cont;
     }
 
-  if (bfd_is_abs_section (symbol->section))
-    {
-      reloc_entry->address += input_section->output_offset;
-      return bfd_reloc_ok;
-    }
-
-  /* No need to check for howto != NULL if !bfd_is_abs_section as
-     it will have been checked in `bfd_perform_relocation already'.  */
-
-  /* Is the address of the relocation really within the section?  */
-  octets = reloc_entry->address * bfd_octets_per_byte (abfd, input_section);
-  if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
-    return bfd_reloc_outofrange;
-
-  /* Work out which section the relocation is targeted at and the
-     initial relocation command value.  */
-
-  /* Get symbol value.  (Common symbols are special.)  */
-  if (bfd_is_com_section (symbol->section))
-    relocation = 0;
+  if (howto->install_addend)
+    relocation = reloc_entry->addend;
   else
-    relocation = symbol->value;
-
-  reloc_target_output_section = symbol->section->output_section;
-
-  /* Convert input-section-relative symbol value to absolute.  */
-  if (! howto->partial_inplace)
-    output_base = 0;
-  else
-    output_base = reloc_target_output_section->vma;
-
-  output_base += symbol->section->output_offset;
-
-  /* If symbol addresses are in octets, convert to bytes.  */
-  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
-      && (symbol->section->flags & SEC_ELF_OCTETS))
-    output_base *= bfd_octets_per_byte (abfd, input_section);
+    {
+      if (bfd_is_abs_section (symbol->section))
+	return bfd_reloc_ok;
 
-  relocation += output_base;
+      /* Work out which section the relocation is targeted at and the
+	 initial relocation command value.  */
 
-  /* Add in supplied addend.  */
-  relocation += reloc_entry->addend;
+      /* Get symbol value.  (Common symbols are special.)  */
+      if (bfd_is_com_section (symbol->section))
+	relocation = 0;
+      else
+	relocation = symbol->value;
 
-  /* Here the variable relocation holds the final address of the
-     symbol we are relocating against, plus any addend.  */
+      reloc_target_output_section = symbol->section;
 
-  if (howto->pc_relative)
-    {
-      /* This is a PC relative relocation.  We want to set RELOCATION
-	 to the distance between the address of the symbol and the
-	 location.  RELOCATION is already the address of the symbol.
+      /* Convert input-section-relative symbol value to absolute.  */
+      if (! howto->partial_inplace)
+	output_base = 0;
+      else
+	output_base = reloc_target_output_section->vma;
 
-	 We start by subtracting the address of the section containing
-	 the location.
+      /* If symbol addresses are in octets, convert to bytes.  */
+      if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+	  && (symbol->section->flags & SEC_ELF_OCTETS))
+	output_base *= bfd_octets_per_byte (abfd, input_section);
 
-	 If pcrel_offset is set, we must further subtract the position
-	 of the location within the section.  Some targets arrange for
-	 the addend to be the negative of the position of the location
-	 within the section; for example, i386-aout does this.  For
-	 i386-aout, pcrel_offset is FALSE.  Some other targets do not
-	 include the position of the location; for example, ELF.
-	 For those targets, pcrel_offset is TRUE.
+      relocation += output_base;
 
-	 If we are producing relocatable output, then we must ensure
-	 that this reloc will be correctly computed when the final
-	 relocation is done.  If pcrel_offset is FALSE we want to wind
-	 up with the negative of the location within the section,
-	 which means we must adjust the existing addend by the change
-	 in the location within the section.  If pcrel_offset is TRUE
-	 we do not want to adjust the existing addend at all.
+      /* Add in supplied addend.  */
+      relocation += reloc_entry->addend;
 
-	 FIXME: This seems logical to me, but for the case of
-	 producing relocatable output it is not what the code
-	 actually does.  I don't want to change it, because it seems
-	 far too likely that something will break.  */
+      /* Here the variable relocation holds the final address of the
+	 symbol we are relocating against, plus any addend.  */
 
-      relocation -=
-	input_section->output_section->vma + input_section->output_offset;
+      if (howto->pc_relative)
+	{
+	  relocation -= input_section->vma;
 
-      if (howto->pcrel_offset && howto->partial_inplace)
-	relocation -= reloc_entry->address;
+	  if (howto->pcrel_offset && howto->partial_inplace)
+	    relocation -= reloc_entry->address;
+	}
     }
 
-  if (! howto->partial_inplace)
+  if (!howto->partial_inplace)
     {
-      /* This is a partial relocation, and we want to apply the relocation
-	 to the reloc entry rather than the raw data. Modify the reloc
-	 inplace to reflect what we now know.  */
       reloc_entry->addend = relocation;
-      reloc_entry->address += input_section->output_offset;
       return flag;
     }
-  else
-    {
-      /* This is a partial relocation, but inplace, so modify the
-	 reloc record a bit.
-
-	 If we've relocated with a symbol with a section, change
-	 into a ref to the section belonging to the symbol.  */
-      reloc_entry->address += input_section->output_offset;
-
-      /* WTF?? */
-      if (abfd->xvec->flavour == bfd_target_coff_flavour
-	  && strcmp (abfd->xvec->name, "coff-Intel-little") != 0
-	  && strcmp (abfd->xvec->name, "coff-Intel-big") != 0)
-	{
-
-	  /* For m68k-coff, the addend was being subtracted twice during
-	     relocation with -r.  Removing the line below this comment
-	     fixes that problem; see PR 2953.
-
-However, Ian wrote the following, regarding removing the line below,
-which explains why it is still enabled:  --djm
-
-If you put a patch like that into BFD you need to check all the COFF
-linkers.  I am fairly certain that patch will break coff-i386 (e.g.,
-SCO); see coff_i386_reloc in coff-i386.c where I worked around the
-problem in a different way.  There may very well be a reason that the
-code works as it does.
-
-Hmmm.  The first obvious point is that bfd_install_relocation should
-not have any tests that depend upon the flavour.  It's seem like
-entirely the wrong place for such a thing.  The second obvious point
-is that the current code ignores the reloc addend when producing
-relocatable output for COFF.  That's peculiar.  In fact, I really
-have no idea what the point of the line you want to remove is.
-
-A typical COFF reloc subtracts the old value of the symbol and adds in
-the new value to the location in the object file (if it's a pc
-relative reloc it adds the difference between the symbol value and the
-location).  When relocating we need to preserve that property.
-
-BFD handles this by setting the addend to the negative of the old
-value of the symbol.  Unfortunately it handles common symbols in a
-non-standard way (it doesn't subtract the old value) but that's a
-different story (we can't change it without losing backward
-compatibility with old object files) (coff-i386 does subtract the old
-value, to be compatible with existing coff-i386 targets, like SCO).
-
-So everything works fine when not producing relocatable output.  When
-we are producing relocatable output, logically we should do exactly
-what we do when not producing relocatable output.  Therefore, your
-patch is correct.  In fact, it should probably always just set
-reloc_entry->addend to 0 for all cases, since it is, in fact, going to
-add the value into the object file.  This won't hurt the COFF code,
-which doesn't use the addend; I'm not sure what it will do to other
-formats (the thing to check for would be whether any formats both use
-the addend and set partial_inplace).
-
-When I wanted to make coff-i386 produce relocatable output, I ran
-into the problem that you are running into: I wanted to remove that
-line.  Rather than risk it, I made the coff-i386 relocs use a special
-function; it's coff_i386_reloc in coff-i386.c.  The function
-specifically adds the addend field into the object file, knowing that
-bfd_install_relocation is not going to.  If you remove that line, then
-coff-i386.c will wind up adding the addend field in twice.  It's
-trivial to fix; it just needs to be done.
 
-The problem with removing the line is just that it may break some
-working code.  With BFD it's hard to be sure of anything.  The right
-way to deal with this is simply to build and test at least all the
-supported COFF targets.  It should be straightforward if time and disk
-space consuming.  For each target:
-    1) build the linker
-    2) generate some executable, and link it using -r (I would
-       probably use paranoia.o and link against newlib/libc.a, which
-       for all the supported targets would be available in
-       /usr/cygnus/progressive/H-host/target/lib/libc.a).
-    3) make the change to reloc.c
-    4) rebuild the linker
-    5) repeat step 2
-    6) if the resulting object files are the same, you have at least
-       made it no worse
-    7) if they are different you have to figure out which version is
-       right.  */
-	  relocation -= reloc_entry->addend;
-	  /* FIXME: There should be no target specific code here...  */
-	  if (strcmp (abfd->xvec->name, "coff-z8k") != 0)
-	    reloc_entry->addend = 0;
-	}
-      else
-	{
-	  reloc_entry->addend = relocation;
-	}
+  if (!howto->install_addend
+      && abfd->xvec->flavour == bfd_target_coff_flavour)
+    {
+      /* This is just weird.  We're subtracting out the original
+	 addend, so that for COFF the addend is ignored???  */
+      relocation -= reloc_entry->addend;
+      /* FIXME: There should be no target specific code here...  */
+      if (strcmp (abfd->xvec->name, "coff-z8k") != 0)
+	reloc_entry->addend = 0;
     }
+  else
+    reloc_entry->addend = relocation;
+
+  /* Is the address of the relocation really within the section?  */
+  octets = reloc_entry->address * bfd_octets_per_byte (abfd, input_section);
+  if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
+    return bfd_reloc_outofrange;
 
   /* FIXME: This overflow checking is incomplete, because the value
      might have overflowed before we get here.  For a correct check we
      need to compute the value in a size larger than bitsize, but we
      can't reasonably do that for a reloc the same size as a host
-     machine word.
-     FIXME: We should also do overflow checking on the result after
-     adding in the value contained in the object file.  */
+     machine word.  */
   if (howto->complain_on_overflow != complain_overflow_dont)
     flag = bfd_check_overflow (howto->complain_on_overflow,
 			       howto->bitsize,
@@ -1249,71 +1115,11 @@ space consuming.  For each target:
 			       bfd_arch_bits_per_address (abfd),
 			       relocation);
 
-  /* Either we are relocating all the way, or we don't want to apply
-     the relocation to the reloc entry (probably because there isn't
-     any room in the output format to describe addends to relocs).  */
-
-  /* The cast to bfd_vma avoids a bug in the Alpha OSF/1 C compiler
-     (OSF version 1.3, compiler version 3.11).  It miscompiles the
-     following program:
-
-     struct str
-     {
-       unsigned int i0;
-     } s = { 0 };
-
-     int
-     main ()
-     {
-       unsigned long x;
-
-       x = 0x100000000;
-       x <<= (unsigned long) s.i0;
-       if (x == 0)
-	 printf ("failed\n");
-       else
-	 printf ("succeeded (%lx)\n", x);
-     }
-     */
-
   relocation >>= (bfd_vma) howto->rightshift;
 
   /* Shift everything up to where it's going to be used.  */
   relocation <<= (bfd_vma) howto->bitpos;
 
-  /* Wait for the day when all have the mask in them.  */
-
-  /* What we do:
-     i instruction to be left alone
-     o offset within instruction
-     r relocation offset to apply
-     S src mask
-     D dst mask
-     N ~dst mask
-     A part 1
-     B part 2
-     R result
-
-     Do this:
-     ((	 i i i i i o o o o o  from bfd_get<size>
-     and	   S S S S S) to get the size offset we want
-     +	 r r r r r r r r r r) to get the final value to place
-     and	   D D D D D  to chop to right size
-     -----------------------
-     =		   A A A A A
-     And this:
-     (	 i i i i i o o o o o  from bfd_get<size>
-     and N N N N N	    ) get instruction
-     -----------------------
-     =	 B B B B B
-
-     And then:
-     (	 B B B B B
-     or		   A A A A A)
-     -----------------------
-     =	 R R R R R R R R R R  put into bfd_put<size>
-     */
-
   data = (bfd_byte *) data_start + (octets - data_start_offset);
   apply_reloc (abfd, data, howto, relocation);
   return flag;
@@ -1564,8 +1370,8 @@ SUBSECTION
 */
 
 /*
-TYPEDEF
-	bfd_reloc_code_type
+DEFINITION
+	bfd_reloc_code_real_type
 
 DESCRIPTION
 	The insides of a reloc code.  The idea is that, eventually, there
@@ -1578,7 +1384,7 @@ DESCRIPTION
 	of attributes.
 
 SENUM
-   bfd_reloc_code_real
+  bfd_reloc_code_real
 
 ENUM
   BFD_RELOC_64
@@ -1610,12 +1416,15 @@ ENUMX
 ENUMX
   BFD_RELOC_8_PCREL
 ENUMDOC
-  PC-relative relocations.  Sometimes these are relative to the address
-of the relocation itself; sometimes they are relative to the start of
-the section containing the relocation.  It depends on the specific target.
+  PC-relative relocations.  Sometimes these are relative to the
+  address of the relocation itself; sometimes they are relative to the
+  start of the section containing the relocation.  It depends on the
+  specific target.
 
 ENUM
   BFD_RELOC_32_SECREL
+ENUMX
+  BFD_RELOC_16_SECIDX
 ENUMDOC
   Section relative relocations.  Some targets need this for DWARF2.
 
@@ -1740,19 +1549,19 @@ ENUMX
   BFD_RELOC_23_PCREL_S2
 ENUMDOC
   These PC-relative relocations are stored as word displacements --
-i.e., byte displacements shifted right two bits.  The 30-bit word
-displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
-SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
-signed 16-bit displacement is used on the MIPS, and the 23-bit
-displacement is used on the Alpha.
+  i.e., byte displacements shifted right two bits.  The 30-bit word
+  displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
+  SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
+  signed 16-bit displacement is used on the MIPS, and the 23-bit
+  displacement is used on the Alpha.
 
 ENUM
   BFD_RELOC_HI22
 ENUMX
   BFD_RELOC_LO10
 ENUMDOC
-  High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
-the target word.  These are used on the SPARC.
+  High 22 bits and low 10 bits of 32-bit value, placed into lower bits
+  of the target word.  These are used on the SPARC.
 
 ENUM
   BFD_RELOC_GPREL16
@@ -1760,9 +1569,9 @@ ENUMX
   BFD_RELOC_GPREL32
 ENUMDOC
   For systems that allocate a Global Pointer register, these are
-displacements off that register.  These relocation types are
-handled specially, because the value the register will have is
-decided relatively late.
+  displacements off that register.  These relocation types are
+  handled specially, because the value the register will have is
+  decided relatively late.
 
 ENUM
   BFD_RELOC_NONE
@@ -1882,12 +1691,12 @@ ENUMX
 ENUMX
   BFD_RELOC_SPARC_WDISP10
 ENUMDOC
-  SPARC64 relocations
+  SPARC64 relocations.
 
 ENUM
   BFD_RELOC_SPARC_REV32
 ENUMDOC
-  SPARC little endian relocation
+  SPARC little endian relocation.
 ENUM
   BFD_RELOC_SPARC_TLS_GD_HI22
 ENUMX
@@ -1937,7 +1746,7 @@ ENUMX
 ENUMX
   BFD_RELOC_SPARC_TLS_TPOFF64
 ENUMDOC
-  SPARC TLS relocations
+  SPARC TLS relocations.
 
 ENUM
   BFD_RELOC_SPU_IMM7
@@ -1976,25 +1785,25 @@ ENUM
   BFD_RELOC_ALPHA_GPDISP_HI16
 ENUMDOC
   Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
-     "addend" in some special way.
+  "addend" in some special way.
   For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
-     writing; when reading, it will be the absolute section symbol.  The
-     addend is the displacement in bytes of the "lda" instruction from
-     the "ldah" instruction (which is at the address of this reloc).
+  writing; when reading, it will be the absolute section symbol.  The
+  addend is the displacement in bytes of the "lda" instruction from
+  the "ldah" instruction (which is at the address of this reloc).
 ENUM
   BFD_RELOC_ALPHA_GPDISP_LO16
 ENUMDOC
   For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
-     with GPDISP_HI16 relocs.  The addend is ignored when writing the
-     relocations out, and is filled in with the file's GP value on
-     reading, for convenience.
+  with GPDISP_HI16 relocs.  The addend is ignored when writing the
+  relocations out, and is filled in with the file's GP value on
+  reading, for convenience.
 
 ENUM
   BFD_RELOC_ALPHA_GPDISP
 ENUMDOC
   The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
-     relocation except that there is no accompanying GPDISP_LO16
-     relocation.
+  relocation except that there is no accompanying GPDISP_LO16
+  relocation.
 
 ENUM
   BFD_RELOC_ALPHA_LITERAL
@@ -2004,47 +1813,47 @@ ENUMX
   BFD_RELOC_ALPHA_LITUSE
 ENUMDOC
   The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
-     the assembler turns it into a LDQ instruction to load the address of
-     the symbol, and then fills in a register in the real instruction.
+  the assembler turns it into a LDQ instruction to load the address of
+  the symbol, and then fills in a register in the real instruction.
 
-     The LITERAL reloc, at the LDQ instruction, refers to the .lita
-     section symbol.  The addend is ignored when writing, but is filled
-     in with the file's GP value on reading, for convenience, as with the
-     GPDISP_LO16 reloc.
-
-     The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
-     It should refer to the symbol to be referenced, as with 16_GOTOFF,
-     but it generates output not based on the position within the .got
-     section, but relative to the GP value chosen for the file during the
-     final link stage.
-
-     The LITUSE reloc, on the instruction using the loaded address, gives
-     information to the linker that it might be able to use to optimize
-     away some literal section references.  The symbol is ignored (read
-     as the absolute section symbol), and the "addend" indicates the type
-     of instruction using the register:
-	      1 - "memory" fmt insn
-	      2 - byte-manipulation (byte offset reg)
-	      3 - jsr (target of branch)
+  The LITERAL reloc, at the LDQ instruction, refers to the .lita
+  section symbol.  The addend is ignored when writing, but is filled
+  in with the file's GP value on reading, for convenience, as with the
+  GPDISP_LO16 reloc.
+
+  The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
+  It should refer to the symbol to be referenced, as with 16_GOTOFF,
+  but it generates output not based on the position within the .got
+  section, but relative to the GP value chosen for the file during the
+  final link stage.
+
+  The LITUSE reloc, on the instruction using the loaded address, gives
+  information to the linker that it might be able to use to optimize
+  away some literal section references.  The symbol is ignored (read
+  as the absolute section symbol), and the "addend" indicates the type
+  of instruction using the register:
+	1 - "memory" fmt insn
+	2 - byte-manipulation (byte offset reg)
+	3 - jsr (target of branch)
 
 ENUM
   BFD_RELOC_ALPHA_HINT
 ENUMDOC
   The HINT relocation indicates a value that should be filled into the
-     "hint" field of a jmp/jsr/ret instruction, for possible branch-
-     prediction logic which may be provided on some processors.
+  "hint" field of a jmp/jsr/ret instruction, for possible branch-
+  prediction logic which may be provided on some processors.
 
 ENUM
   BFD_RELOC_ALPHA_LINKAGE
 ENUMDOC
   The LINKAGE relocation outputs a linkage pair in the object file,
-     which is filled by the linker.
+  which is filled by the linker.
 
 ENUM
   BFD_RELOC_ALPHA_CODEADDR
 ENUMDOC
   The CODEADDR relocation outputs a STO_CA in the object file,
-     which is filled by the linker.
+  which is filled by the linker.
 
 ENUM
   BFD_RELOC_ALPHA_GPREL_HI16
@@ -2052,7 +1861,7 @@ ENUMX
   BFD_RELOC_ALPHA_GPREL_LO16
 ENUMDOC
   The GPREL_HI/LO relocations together form a 32-bit offset from the
-     GP register.
+  GP register.
 
 ENUM
   BFD_RELOC_ALPHA_BRSGP
@@ -2065,25 +1874,25 @@ ENUM
   BFD_RELOC_ALPHA_NOP
 ENUMDOC
   The NOP relocation outputs a NOP if the longword displacement
-     between two procedure entry points is < 2^21.
+  between two procedure entry points is < 2^21.
 
 ENUM
   BFD_RELOC_ALPHA_BSR
 ENUMDOC
   The BSR relocation outputs a BSR if the longword displacement
-     between two procedure entry points is < 2^21.
+  between two procedure entry points is < 2^21.
 
 ENUM
   BFD_RELOC_ALPHA_LDA
 ENUMDOC
   The LDA relocation outputs a LDA if the longword displacement
-     between two procedure entry points is < 2^16.
+  between two procedure entry points is < 2^16.
 
 ENUM
   BFD_RELOC_ALPHA_BOH
 ENUMDOC
   The BOH relocation outputs a BSR if the longword displacement
-     between two procedure entry points is < 2^21, or else a hint.
+  between two procedure entry points is < 2^21, or else a hint.
 
 ENUM
   BFD_RELOC_ALPHA_TLSGD
@@ -2140,9 +1949,9 @@ ENUM
   BFD_RELOC_HI16_S
 ENUMDOC
   High 16 bits of 32-bit value but the low 16 bits will be sign
-     extended and added to form the final result.  If the low 16
-     bits form a negative number, we need to add one to the high value
-     to compensate for the borrow when the low bits are added.
+  extended and added to form the final result.  If the low 16
+  bits form a negative number, we need to add one to the high value
+  to compensate for the borrow when the low bits are added.
 
 ENUM
   BFD_RELOC_LO16
@@ -2152,15 +1961,15 @@ ENUMDOC
 ENUM
   BFD_RELOC_HI16_PCREL
 ENUMDOC
-  High 16 bits of 32-bit pc-relative value
+  High 16 bits of 32-bit pc-relative value.
 ENUM
   BFD_RELOC_HI16_S_PCREL
 ENUMDOC
-  High 16 bits of 32-bit pc-relative value, adjusted
+  High 16 bits of 32-bit pc-relative value, adjusted.
 ENUM
   BFD_RELOC_LO16_PCREL
 ENUMDOC
-  Low 16 bits of pc-relative value
+  Low 16 bits of pc-relative value.
 
 ENUM
   BFD_RELOC_MIPS16_GOT16
@@ -2168,7 +1977,7 @@ ENUMX
   BFD_RELOC_MIPS16_CALL16
 ENUMDOC
   Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
-     16-bit immediate fields
+  16-bit immediate fields.
 ENUM
   BFD_RELOC_MIPS16_HI16
 ENUMDOC
@@ -2177,9 +1986,9 @@ ENUM
   BFD_RELOC_MIPS16_HI16_S
 ENUMDOC
   MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
-     extended and added to form the final result.  If the low 16
-     bits form a negative number, we need to add one to the high value
-     to compensate for the borrow when the low bits are added.
+  extended and added to form the final result.  If the low 16
+  bits form a negative number, we need to add one to the high value
+  to compensate for the borrow when the low bits are added.
 ENUM
   BFD_RELOC_MIPS16_LO16
 ENUMDOC
@@ -2200,7 +2009,7 @@ ENUMX
 ENUMX
   BFD_RELOC_MIPS16_TLS_TPREL_LO16
 ENUMDOC
-  MIPS16 TLS relocations
+  MIPS16 TLS relocations.
 
 ENUM
   BFD_RELOC_MIPS_LITERAL
@@ -2308,7 +2117,7 @@ ENUMX
 ENUMX
   BFD_RELOC_MICROMIPS_SCN_DISP
 ENUMX
-  BFD_RELOC_MIPS_REL16
+  BFD_RELOC_MIPS_16
 ENUMX
   BFD_RELOC_MIPS_RELGOT
 ENUMX
@@ -2359,7 +2168,6 @@ ENUMX
   BFD_RELOC_MIPS_EH
 ENUMDOC
   MIPS ELF relocations.
-COMMENT
 
 ENUM
   BFD_RELOC_MIPS_COPY
@@ -2367,13 +2175,11 @@ ENUMX
   BFD_RELOC_MIPS_JUMP_SLOT
 ENUMDOC
   MIPS ELF relocations (VxWorks and PLT extensions).
-COMMENT
 
 ENUM
   BFD_RELOC_MOXIE_10_PCREL
 ENUMDOC
   Moxie ELF relocations.
-COMMENT
 
 ENUM
   BFD_RELOC_FT32_10
@@ -2395,7 +2201,6 @@ ENUMX
   BFD_RELOC_FT32_DIFF32
 ENUMDOC
   FT32 ELF relocations.
-COMMENT
 
 ENUM
   BFD_RELOC_FRV_LABEL16
@@ -2477,7 +2282,6 @@ ENUMX
   BFD_RELOC_FRV_TLSMOFF
 ENUMDOC
   Fujitsu Frv Relocations.
-COMMENT
 
 ENUM
   BFD_RELOC_MN10300_GOTOFF24
@@ -2486,18 +2290,18 @@ ENUMDOC
 ENUM
   BFD_RELOC_MN10300_GOT32
 ENUMDOC
-  This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
-  in the instruction.
+  This is a 32bit GOT-relative reloc for the mn10300, offset by two
+  bytes in the instruction.
 ENUM
   BFD_RELOC_MN10300_GOT24
 ENUMDOC
-  This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
-  in the instruction.
+  This is a 24bit GOT-relative reloc for the mn10300, offset by two
+  bytes in the instruction.
 ENUM
   BFD_RELOC_MN10300_GOT16
 ENUMDOC
-  This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
-  in the instruction.
+  This is a 16bit GOT-relative reloc for the mn10300, offset by two
+  bytes in the instruction.
 ENUM
   BFD_RELOC_MN10300_COPY
 ENUMDOC
@@ -2517,15 +2321,14 @@ ENUMDOC
 ENUM
   BFD_RELOC_MN10300_SYM_DIFF
 ENUMDOC
-  Together with another reloc targeted at the same location,
-  allows for a value that is the difference of two symbols
-  in the same section.
+  Together with another reloc targeted at the same location, allows
+  for a value that is the difference of two symbols in the same
+  section.
 ENUM
   BFD_RELOC_MN10300_ALIGN
 ENUMDOC
-  The addend of this reloc is an alignment power that must
-  be honoured at the offset's location, regardless of linker
-  relaxation.
+  The addend of this reloc is an alignment power that must be honoured
+  at the offset's location, regardless of linker relaxation.
 ENUM
   BFD_RELOC_MN10300_TLS_GD
 ENUMX
@@ -2549,14 +2352,13 @@ ENUMDOC
 ENUM
   BFD_RELOC_MN10300_32_PCREL
 ENUMDOC
-  This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
-  instruction.
+  This is a 32bit pcrel reloc for the mn10300, offset by two bytes in
+  the instruction.
 ENUM
   BFD_RELOC_MN10300_16_PCREL
 ENUMDOC
-  This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
-  instruction.
-COMMENT
+  This is a 16bit pcrel reloc for the mn10300, offset by two bytes in
+  the instruction.
 
 ENUM
   BFD_RELOC_386_GOT32
@@ -2609,7 +2411,7 @@ ENUMX
 ENUMX
   BFD_RELOC_386_GOT32X
 ENUMDOC
-  i386/elf relocations
+  i386/elf relocations.
 
 ENUM
   BFD_RELOC_X86_64_GOT32
@@ -2673,8 +2475,14 @@ ENUMX
   BFD_RELOC_X86_64_GOTPCRELX
 ENUMX
   BFD_RELOC_X86_64_REX_GOTPCRELX
+ENUMX
+  BFD_RELOC_X86_64_CODE_4_GOTPCRELX
+ENUMX
+  BFD_RELOC_X86_64_CODE_4_GOTTPOFF
+ENUMX
+  BFD_RELOC_X86_64_CODE_4_GOTPC32_TLSDESC
 ENUMDOC
-  x86-64/elf relocations
+  x86-64/elf relocations.
 
 ENUM
   BFD_RELOC_NS32K_IMM_8
@@ -2701,14 +2509,14 @@ ENUMX
 ENUMX
   BFD_RELOC_NS32K_DISP_32_PCREL
 ENUMDOC
-  ns32k relocations
+  ns32k relocations.
 
 ENUM
   BFD_RELOC_PDP11_DISP_8_PCREL
 ENUMX
   BFD_RELOC_PDP11_DISP_6_PCREL
 ENUMDOC
-  PDP11 relocations
+  PDP11 relocations.
 
 ENUM
   BFD_RELOC_PJ_CODE_HI16
@@ -2732,6 +2540,10 @@ ENUMX
 ENUMX
   BFD_RELOC_PPC_TOC16
 ENUMX
+  BFD_RELOC_PPC_TOC16_LO
+ENUMX
+  BFD_RELOC_PPC_TOC16_HI
+ENUMX
   BFD_RELOC_PPC_B16
 ENUMX
   BFD_RELOC_PPC_B16_BRTAKEN
@@ -2824,6 +2636,8 @@ ENUMX
 ENUMX
   BFD_RELOC_PPC_REL16DX_HA
 ENUMX
+  BFD_RELOC_PPC_NEG
+ENUMX
   BFD_RELOC_PPC64_HIGHER
 ENUMX
   BFD_RELOC_PPC64_HIGHER_S
@@ -2892,6 +2706,8 @@ ENUMX
 ENUMX
   BFD_RELOC_PPC64_REL24_NOTOC
 ENUMX
+  BFD_RELOC_PPC64_REL24_P9NOTOC
+ENUMX
   BFD_RELOC_PPC64_D34
 ENUMX
   BFD_RELOC_PPC64_D34_LO
@@ -2935,6 +2751,14 @@ ENUMX
 ENUMX
   BFD_RELOC_PPC_TLSLD
 ENUMX
+  BFD_RELOC_PPC_TLSLE
+ENUMX
+  BFD_RELOC_PPC_TLSIE
+ENUMX
+  BFD_RELOC_PPC_TLSM
+ENUMX
+  BFD_RELOC_PPC_TLSML
+ENUMX
   BFD_RELOC_PPC_DTPMOD
 ENUMX
   BFD_RELOC_PPC_TPREL16
@@ -2989,6 +2813,18 @@ ENUMX
 ENUMX
   BFD_RELOC_PPC_GOT_DTPREL16_HA
 ENUMX
+  BFD_RELOC_PPC64_TLSGD
+ENUMX
+  BFD_RELOC_PPC64_TLSLD
+ENUMX
+  BFD_RELOC_PPC64_TLSLE
+ENUMX
+  BFD_RELOC_PPC64_TLSIE
+ENUMX
+  BFD_RELOC_PPC64_TLSM
+ENUMX
+  BFD_RELOC_PPC64_TLSML
+ENUMX
   BFD_RELOC_PPC64_TPREL16_DS
 ENUMX
   BFD_RELOC_PPC64_TPREL16_LO_DS
@@ -3025,13 +2861,13 @@ ENUMX
 ENUMX
   BFD_RELOC_PPC64_DTPREL34
 ENUMX
-  BFD_RELOC_PPC64_GOT_TLSGD34
+  BFD_RELOC_PPC64_GOT_TLSGD_PCREL34
 ENUMX
-  BFD_RELOC_PPC64_GOT_TLSLD34
+  BFD_RELOC_PPC64_GOT_TLSLD_PCREL34
 ENUMX
-  BFD_RELOC_PPC64_GOT_TPREL34
+  BFD_RELOC_PPC64_GOT_TPREL_PCREL34
 ENUMX
-  BFD_RELOC_PPC64_GOT_DTPREL34
+  BFD_RELOC_PPC64_GOT_DTPREL_PCREL34
 ENUMX
   BFD_RELOC_PPC64_TLS_PCREL
 ENUMDOC
@@ -3040,7 +2876,7 @@ ENUMDOC
 ENUM
   BFD_RELOC_I370_D12
 ENUMDOC
-  IBM 370/390 relocations
+  IBM 370/390 relocations.
 
 ENUM
   BFD_RELOC_CTOR
@@ -3052,8 +2888,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_ARM_PCREL_BRANCH
 ENUMDOC
-  ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
-  not stored in the instruction.
+  ARM 26 bit pc-relative branch.  The lowest two bits must be zero and
+  are not stored in the instruction.
 ENUM
   BFD_RELOC_ARM_PCREL_BLX
 ENUMDOC
@@ -3069,7 +2905,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_ARM_PCREL_CALL
 ENUMDOC
-  ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction.
+  ARM 26-bit pc-relative branch for an unconditional BL or BLX
+  instruction.
 ENUM
   BFD_RELOC_ARM_PCREL_JUMP
 ENUMDOC
@@ -3150,9 +2987,9 @@ ENUMDOC
 ENUM
   BFD_RELOC_ARM_TARGET2
 ENUMDOC
-  This reloc is used for references to RTTI data from exception handling
-  tables.  The actual definition depends on the target.  It may be a
-  pc-relative or some form of GOT-indirect relocation.
+  This reloc is used for references to RTTI data from exception
+  handling tables.  The actual definition depends on the target.  It
+  may be a pc-relative or some form of GOT-indirect relocation.
 ENUM
   BFD_RELOC_ARM_PREL31
 ENUMDOC
@@ -3886,26 +3723,22 @@ ENUM
   BFD_RELOC_D10V_10_PCREL_R
 ENUMDOC
   Mitsubishi D10V relocs.
-  This is a 10-bit reloc with the right 2 bits
-  assumed to be 0.
+  This is a 10-bit reloc with the right 2 bits assumed to be 0.
 ENUM
   BFD_RELOC_D10V_10_PCREL_L
 ENUMDOC
   Mitsubishi D10V relocs.
-  This is a 10-bit reloc with the right 2 bits
-  assumed to be 0.  This is the same as the previous reloc
-  except it is in the left container, i.e.,
-  shifted left 15 bits.
+  This is a 10-bit reloc with the right 2 bits assumed to be 0.  This
+  is the same as the previous reloc except it is in the left
+  container, i.e., shifted left 15 bits.
 ENUM
   BFD_RELOC_D10V_18
 ENUMDOC
-  This is an 18-bit reloc with the right 2 bits
-  assumed to be 0.
+  This is an 18-bit reloc with the right 2 bits assumed to be 0.
 ENUM
   BFD_RELOC_D10V_18_PCREL
 ENUMDOC
-  This is an 18-bit reloc with the right 2 bits
-  assumed to be 0.
+  This is an 18-bit reloc with the right 2 bits assumed to be 0.
 
 ENUM
   BFD_RELOC_D30V_6
@@ -3915,49 +3748,46 @@ ENUMDOC
 ENUM
   BFD_RELOC_D30V_9_PCREL
 ENUMDOC
-  This is a 6-bit pc-relative reloc with
-  the right 3 bits assumed to be 0.
+  This is a 6-bit pc-relative reloc with the right 3 bits assumed to
+  be 0.
 ENUM
   BFD_RELOC_D30V_9_PCREL_R
 ENUMDOC
-  This is a 6-bit pc-relative reloc with
-  the right 3 bits assumed to be 0. Same
-  as the previous reloc but on the right side
-  of the container.
+  This is a 6-bit pc-relative reloc with the right 3 bits assumed to
+  be 0.  Same as the previous reloc but on the right side of the
+  container.
 ENUM
   BFD_RELOC_D30V_15
 ENUMDOC
-  This is a 12-bit absolute reloc with the
-  right 3 bitsassumed to be 0.
+  This is a 12-bit absolute reloc with the right 3 bitsassumed to
+  be 0.
 ENUM
   BFD_RELOC_D30V_15_PCREL
 ENUMDOC
-  This is a 12-bit pc-relative reloc with
-  the right 3 bits assumed to be 0.
+  This is a 12-bit pc-relative reloc with the right 3 bits assumed to
+  be 0.
 ENUM
   BFD_RELOC_D30V_15_PCREL_R
 ENUMDOC
-  This is a 12-bit pc-relative reloc with
-  the right 3 bits assumed to be 0. Same
-  as the previous reloc but on the right side
-  of the container.
+  This is a 12-bit pc-relative reloc with the right 3 bits assumed to
+  be 0.  Same as the previous reloc but on the right side of the
+  container.
 ENUM
   BFD_RELOC_D30V_21
 ENUMDOC
-  This is an 18-bit absolute reloc with
-  the right 3 bits assumed to be 0.
+  This is an 18-bit absolute reloc with the right 3 bits assumed to
+  be 0.
 ENUM
   BFD_RELOC_D30V_21_PCREL
 ENUMDOC
-  This is an 18-bit pc-relative reloc with
-  the right 3 bits assumed to be 0.
+  This is an 18-bit pc-relative reloc with the right 3 bits assumed to
+  be 0.
 ENUM
   BFD_RELOC_D30V_21_PCREL_R
 ENUMDOC
-  This is an 18-bit pc-relative reloc with
-  the right 3 bits assumed to be 0. Same
-  as the previous reloc but on the right side
-  of the container.
+  This is an 18-bit pc-relative reloc with the right 3 bits assumed to
+  be 0.  Same as the previous reloc but on the right side of the
+  container.
 ENUM
   BFD_RELOC_D30V_32
 ENUMDOC
@@ -3969,16 +3799,12 @@ ENUMDOC
 
 ENUM
   BFD_RELOC_DLX_HI16_S
-ENUMDOC
-  DLX relocs
-ENUM
+ENUMX
   BFD_RELOC_DLX_LO16
-ENUMDOC
-  DLX relocs
-ENUM
+ENUMX
   BFD_RELOC_DLX_JMP26
 ENUMDOC
-  DLX relocs
+  DLX relocs.
 
 ENUM
   BFD_RELOC_M32C_HI8
@@ -3999,7 +3825,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_M32R_10_PCREL
 ENUMDOC
-  This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0.
+  This is a 10-bit pc-relative reloc with the right 2 bits assumed to
+  be 0.
 ENUM
   BFD_RELOC_M32R_18_PCREL
 ENUMDOC
@@ -4025,8 +3852,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_M32R_SDA16
 ENUMDOC
-  This is a 16-bit reloc containing the small data area offset for use in
-  add3, load, and store instructions.
+  This is a 16-bit reloc containing the small data area offset for use
+  in add3, load, and store instructions.
 ENUM
   BFD_RELOC_M32R_GOT24
 ENUMX
@@ -4073,11 +3900,13 @@ ENUMDOC
 ENUM
   BFD_RELOC_NDS32_9_PCREL
 ENUMDOC
-  This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0.
+  This is a 9-bit pc-relative reloc with the right 1 bit assumed to
+  be 0.
 ENUM
   BFD_RELOC_NDS32_WORD_9_PCREL
 ENUMDOC
-  This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0.
+  This is a 9-bit pc-relative reloc with the right 1 bit assumed to
+  be 0.
 ENUM
   BFD_RELOC_NDS32_15_PCREL
 ENUMDOC
@@ -4094,72 +3923,72 @@ ENUM
   BFD_RELOC_NDS32_HI20
 ENUMDOC
   This is a 20-bit reloc containing the high 20 bits of an address
-  used with the lower 12 bits
+  used with the lower 12 bits.
 ENUM
   BFD_RELOC_NDS32_LO12S3
 ENUMDOC
   This is a 12-bit reloc containing the lower 12 bits of an address
-  then shift right by 3. This is used with ldi,sdi...
+  then shift right by 3.  This is used with ldi,sdi.
 ENUM
   BFD_RELOC_NDS32_LO12S2
 ENUMDOC
   This is a 12-bit reloc containing the lower 12 bits of an address
-  then shift left by 2. This is used with lwi,swi...
+  then shift left by 2.  This is used with lwi,swi.
 ENUM
   BFD_RELOC_NDS32_LO12S1
 ENUMDOC
   This is a 12-bit reloc containing the lower 12 bits of an address
-  then shift left by 1. This is used with lhi,shi...
+  then shift left by 1.  This is used with lhi,shi.
 ENUM
   BFD_RELOC_NDS32_LO12S0
 ENUMDOC
   This is a 12-bit reloc containing the lower 12 bits of an address
-  then shift left by 0. This is used with lbisbi...
+  then shift left by 0.  This is used with lbisbi.
 ENUM
   BFD_RELOC_NDS32_LO12S0_ORI
 ENUMDOC
   This is a 12-bit reloc containing the lower 12 bits of an address
-  then shift left by 0. This is only used with branch relaxations
+  then shift left by 0.  This is only used with branch relaxations.
 ENUM
   BFD_RELOC_NDS32_SDA15S3
 ENUMDOC
-  This is a 15-bit reloc containing the small data area 18-bit signed offset
-  and shift left by 3 for use in ldi, sdi...
+  This is a 15-bit reloc containing the small data area 18-bit signed
+  offset and shift left by 3 for use in ldi, sdi.
 ENUM
   BFD_RELOC_NDS32_SDA15S2
 ENUMDOC
-  This is a 15-bit reloc containing the small data area 17-bit signed offset
-  and shift left by 2 for use in lwi, swi...
+  This is a 15-bit reloc containing the small data area 17-bit signed
+  offset and shift left by 2 for use in lwi, swi.
 ENUM
   BFD_RELOC_NDS32_SDA15S1
 ENUMDOC
-  This is a 15-bit reloc containing the small data area 16-bit signed offset
-  and shift left by 1 for use in lhi, shi...
+  This is a 15-bit reloc containing the small data area 16-bit signed
+  offset and shift left by 1 for use in lhi, shi.
 ENUM
   BFD_RELOC_NDS32_SDA15S0
 ENUMDOC
-  This is a 15-bit reloc containing the small data area 15-bit signed offset
-  and shift left by 0 for use in lbi, sbi...
+  This is a 15-bit reloc containing the small data area 15-bit signed
+  offset and shift left by 0 for use in lbi, sbi.
 ENUM
   BFD_RELOC_NDS32_SDA16S3
 ENUMDOC
-  This is a 16-bit reloc containing the small data area 16-bit signed offset
-  and shift left by 3
+  This is a 16-bit reloc containing the small data area 16-bit signed
+  offset and shift left by 3.
 ENUM
   BFD_RELOC_NDS32_SDA17S2
 ENUMDOC
-  This is a 17-bit reloc containing the small data area 17-bit signed offset
-  and shift left by 2 for use in lwi.gp, swi.gp...
+  This is a 17-bit reloc containing the small data area 17-bit signed
+  offset and shift left by 2 for use in lwi.gp, swi.gp.
 ENUM
   BFD_RELOC_NDS32_SDA18S1
 ENUMDOC
-  This is a 18-bit reloc containing the small data area 18-bit signed offset
-  and shift left by 1 for use in lhi.gp, shi.gp...
+  This is a 18-bit reloc containing the small data area 18-bit signed
+  offset and shift left by 1 for use in lhi.gp, shi.gp.
 ENUM
   BFD_RELOC_NDS32_SDA19S0
 ENUMDOC
-  This is a 19-bit reloc containing the small data area 19-bit signed offset
-  and shift left by 0 for use in lbi.gp, sbi.gp...
+  This is a 19-bit reloc containing the small data area 19-bit signed
+  offset and shift left by 0 for use in lbi.gp, sbi.gp.
 ENUM
   BFD_RELOC_NDS32_GOT20
 ENUMX
@@ -4191,7 +4020,7 @@ ENUMX
 ENUMX
   BFD_RELOC_NDS32_GOTPC_LO12
 ENUMDOC
-  for PIC
+  For PIC.
 ENUM
   BFD_RELOC_NDS32_INSN16
 ENUMX
@@ -4233,7 +4062,7 @@ ENUMX
 ENUMX
   BFD_RELOC_NDS32_LONGJUMP7
 ENUMDOC
-  for relax
+  For relax.
 ENUM
   BFD_RELOC_NDS32_PLTREL_HI20
 ENUMX
@@ -4243,7 +4072,7 @@ ENUMX
 ENUMX
   BFD_RELOC_NDS32_PLT_GOTREL_LO12
 ENUMDOC
-  for PIC
+  For PIC.
 ENUM
   BFD_RELOC_NDS32_SDA12S2_DP
 ENUMX
@@ -4253,7 +4082,7 @@ ENUMX
 ENUMX
   BFD_RELOC_NDS32_LO12S2_SP
 ENUMDOC
-  for floating point
+  For floating point.
 ENUM
   BFD_RELOC_NDS32_DWARF2_OP1
 ENUMX
@@ -4261,11 +4090,11 @@ ENUMX
 ENUMX
   BFD_RELOC_NDS32_DWARF2_LEB
 ENUMDOC
-  for dwarf2 debug_line.
+  For dwarf2 debug_line.
 ENUM
   BFD_RELOC_NDS32_UPDATE_TA
 ENUMDOC
-  for eliminate 16-bit instructions
+  For eliminating 16-bit instructions.
 ENUM
   BFD_RELOC_NDS32_PLT_GOTREL_LO20
 ENUMX
@@ -4285,7 +4114,7 @@ ENUMX
 ENUMX
   BFD_RELOC_NDS32_GOT17S2
 ENUMDOC
-  for PIC object relaxation
+  For PIC object relaxation.
 ENUM
   BFD_RELOC_NDS32_5
 ENUMDOC
@@ -4294,7 +4123,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_NDS32_10_UPCREL
 ENUMDOC
-  This is a 10-bit unsigned pc-relative reloc with the right 1 bit assumed to be 0.
+  This is a 10-bit unsigned pc-relative reloc with the right 1 bit
+  assumed to be 0.
 ENUM
   BFD_RELOC_NDS32_SDA_FP7U2_RELA
 ENUMDOC
@@ -4336,7 +4166,7 @@ ENUMX
 ENUMX
   BFD_RELOC_NDS32_EMPTY
 ENUMDOC
-  relaxation relative relocation types
+  Relaxation relative relocation types.
 ENUM
   BFD_RELOC_NDS32_25_ABS
 ENUMDOC
@@ -4418,11 +4248,11 @@ ENUMDOC
 ENUM
   BFD_RELOC_V850_9_PCREL
 ENUMDOC
-  This is a 9-bit reloc
+  This is a 9-bit reloc.
 ENUM
   BFD_RELOC_V850_22_PCREL
 ENUMDOC
-  This is a 22-bit reloc
+  This is a 22-bit reloc.
 
 ENUM
   BFD_RELOC_V850_SDA_16_16_OFFSET
@@ -4460,7 +4290,6 @@ ENUM
   BFD_RELOC_V850_TDA_16_16_OFFSET
 ENUMDOC
   This is a 16 bit offset from the tiny data area pointer.
-COMMENT
 ENUM
   BFD_RELOC_V850_TDA_4_5_OFFSET
 ENUMDOC
@@ -4503,8 +4332,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_V850_LO16_SPLIT_OFFSET
 ENUMDOC
-  This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
-  instructions.
+  This is a variation of BFD_RELOC_LO16 that can be used in v850e
+  ld.bu instructions.
 ENUM
   BFD_RELOC_V850_16_PCREL
 ENUMDOC
@@ -4536,63 +4365,43 @@ ENUMDOC
 ENUM
   BFD_RELOC_V850_LO16_S1
 ENUMDOC
-  Low 16 bits. 16 bit shifted by 1.
+  Low 16 bits.  16 bit shifted by 1.
 ENUM
   BFD_RELOC_V850_CALLT_15_16_OFFSET
 ENUMDOC
   This is a 16 bit offset from the call table base pointer.
 ENUM
   BFD_RELOC_V850_32_GOTPCREL
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_16_GOT
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_32_GOT
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_22_PLT_PCREL
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_32_PLT_PCREL
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_COPY
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_GLOB_DAT
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_JMP_SLOT
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_RELATIVE
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_16_GOTOFF
-ENUMDOC
-  DSO relocations.
-ENUM
+ENUMX
   BFD_RELOC_V850_32_GOTOFF
 ENUMDOC
   DSO relocations.
 ENUM
   BFD_RELOC_V850_CODE
 ENUMDOC
-  start code.
+  Start code.
 ENUM
   BFD_RELOC_V850_DATA
 ENUMDOC
-  start data in text.
+  Start data in text.
 
 ENUM
   BFD_RELOC_TIC30_LDP
@@ -4704,13 +4513,13 @@ ENUMDOC
 ENUM
   BFD_RELOC_FR30_20
 ENUMDOC
-  This is a 32 bit reloc for the FR30 that stores 20 bits split up into
-  two sections.
+  This is a 32 bit reloc for the FR30 that stores 20 bits split up
+  into two sections.
 ENUM
   BFD_RELOC_FR30_6_IN_4
 ENUMDOC
-  This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
-  4 bits.
+  This is a 16 bit reloc for the FR30 that stores a 6 bit word offset
+  in 4 bits.
 ENUM
   BFD_RELOC_FR30_8_IN_8
 ENUMDOC
@@ -4794,7 +4603,6 @@ ENUMX
   BFD_RELOC_MEP_GNU_VTENTRY
 ENUMDOC
   Toshiba Media Processor Relocations.
-COMMENT
 
 ENUM
   BFD_RELOC_METAG_HIADDR16
@@ -4922,8 +4730,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_MMIX_ADDR19
 ENUMDOC
-  This is a relocation for a relative address as in a GETA instruction or
-  a branch.
+  This is a relocation for a relative address as in a GETA instruction
+  or a branch.
 ENUM
   BFD_RELOC_MMIX_ADDR27
 ENUMDOC
@@ -4941,13 +4749,13 @@ ENUMDOC
 ENUM
   BFD_RELOC_MMIX_BASE_PLUS_OFFSET
 ENUMDOC
-  This is a relocation for two instruction fields holding a register and
-  an offset, the equivalent of the relocation.
+  This is a relocation for two instruction fields holding a register
+  and an offset, the equivalent of the relocation.
 ENUM
   BFD_RELOC_MMIX_LOCAL
 ENUMDOC
-  This relocation is an assertion that the expression is not allocated as
-  a global register.  It does not modify contents.
+  This relocation is an assertion that the expression is not allocated
+  as a global register.  It does not modify contents.
 
 ENUM
   BFD_RELOC_AVR_7_PCREL
@@ -4977,13 +4785,14 @@ ENUMDOC
 ENUM
   BFD_RELOC_AVR_HH8_LDI
 ENUMDOC
-  This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-  of program memory address) into 8 bit immediate value of LDI insn.
+  This is a 16 bit reloc for the AVR that stores 8 bit value (most
+  high 8 bit of program memory address) into 8 bit immediate value of
+  LDI insn.
 ENUM
   BFD_RELOC_AVR_MS8_LDI
 ENUMDOC
-  This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-  of 32 bit value) into 8 bit immediate value of LDI insn.
+  This is a 16 bit reloc for the AVR that stores 8 bit value (most
+  high 8 bit of 32 bit value) into 8 bit immediate value of LDI insn.
 ENUM
   BFD_RELOC_AVR_LO8_LDI_NEG
 ENUMDOC
@@ -4999,13 +4808,13 @@ ENUM
   BFD_RELOC_AVR_HH8_LDI_NEG
 ENUMDOC
   This is a 16 bit reloc for the AVR that stores negated 8 bit value
-  (most high 8 bit of program memory address) into 8 bit immediate value
-  of LDI or SUBI insn.
+  (most high 8 bit of program memory address) into 8 bit immediate
+  value of LDI or SUBI insn.
 ENUM
   BFD_RELOC_AVR_MS8_LDI_NEG
 ENUMDOC
-  This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
-  of 32 bit value) into 8 bit immediate value of LDI insn.
+  This is a 16 bit reloc for the AVR that stores negated 8 bit value
+  (msb of 32 bit value) into 8 bit immediate value of LDI insn.
 ENUM
   BFD_RELOC_AVR_LO8_LDI_PM
 ENUMDOC
@@ -5015,9 +4824,9 @@ ENUM
   BFD_RELOC_AVR_LO8_LDI_GS
 ENUMDOC
   This is a 16 bit reloc for the AVR that stores 8 bit value
-  (command address) into 8 bit immediate value of LDI insn. If the address
-  is beyond the 128k boundary, the linker inserts a jump stub for this reloc
-  in the lower 128k.
+  (command address) into 8 bit immediate value of LDI insn. If the
+  address is beyond the 128k boundary, the linker inserts a jump stub
+  for this reloc in the lower 128k.
 ENUM
   BFD_RELOC_AVR_HI8_LDI_PM
 ENUMDOC
@@ -5027,14 +4836,15 @@ ENUM
   BFD_RELOC_AVR_HI8_LDI_GS
 ENUMDOC
   This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-  of command address) into 8 bit immediate value of LDI insn.  If the address
-  is beyond the 128k boundary, the linker inserts a jump stub for this reloc
-  below 128k.
+  of command address) into 8 bit immediate value of LDI insn.  If the
+  address is beyond the 128k boundary, the linker inserts a jump stub
+  for this reloc below 128k.
 ENUM
   BFD_RELOC_AVR_HH8_LDI_PM
 ENUMDOC
-  This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-  of command address) into 8 bit immediate value of LDI insn.
+  This is a 16 bit reloc for the AVR that stores 8 bit value (most
+  high 8 bit of command address) into 8 bit immediate value of LDI
+  insn.
 ENUM
   BFD_RELOC_AVR_LO8_LDI_PM_NEG
 ENUMDOC
@@ -5061,32 +4871,32 @@ ENUM
   BFD_RELOC_AVR_LDI
 ENUMDOC
   This is a 16 bit reloc for the AVR that stores all needed bits
-  for absolute addressing with ldi with overflow check to linktime
+  for absolute addressing with ldi with overflow check to linktime.
 ENUM
   BFD_RELOC_AVR_6
 ENUMDOC
   This is a 6 bit reloc for the AVR that stores offset for ldd/std
-  instructions
+  instructions.
 ENUM
   BFD_RELOC_AVR_6_ADIW
 ENUMDOC
   This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
-  instructions
+  instructions.
 ENUM
   BFD_RELOC_AVR_8_LO
 ENUMDOC
   This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
-  in .byte lo8(symbol)
+  in .byte lo8(symbol).
 ENUM
   BFD_RELOC_AVR_8_HI
 ENUMDOC
   This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
-  in .byte hi8(symbol)
+  in .byte hi8(symbol).
 ENUM
   BFD_RELOC_AVR_8_HLO
 ENUMDOC
   This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
-  in .byte hlo8(symbol)
+  in .byte hlo8(symbol).
 ENUM
   BFD_RELOC_AVR_DIFF8
 ENUMX
@@ -5109,12 +4919,12 @@ ENUM
   BFD_RELOC_AVR_PORT6
 ENUMDOC
   This is a 6 bit reloc for the AVR that stores an I/O register
-  number for the IN and OUT instructions
+  number for the IN and OUT instructions.
 ENUM
   BFD_RELOC_AVR_PORT5
 ENUMDOC
   This is a 5 bit reloc for the AVR that stores an I/O register
-  number for the SBIC, SBIS, SBI and CBI instructions
+  number for the SBIC, SBIS, SBI and CBI instructions.
 
 ENUM
   BFD_RELOC_RISCV_HI20
@@ -5187,16 +4997,6 @@ ENUMX
 ENUMX
   BFD_RELOC_RISCV_RVC_JUMP
 ENUMX
-  BFD_RELOC_RISCV_RVC_LUI
-ENUMX
-  BFD_RELOC_RISCV_GPREL_I
-ENUMX
-  BFD_RELOC_RISCV_GPREL_S
-ENUMX
-  BFD_RELOC_RISCV_TPREL_I
-ENUMX
-  BFD_RELOC_RISCV_TPREL_S
-ENUMX
   BFD_RELOC_RISCV_RELAX
 ENUMX
   BFD_RELOC_RISCV_CFA
@@ -5212,6 +5012,10 @@ ENUMX
   BFD_RELOC_RISCV_SET32
 ENUMX
   BFD_RELOC_RISCV_32_PCREL
+ENUMX
+  BFD_RELOC_RISCV_SET_ULEB128
+ENUMX
+  BFD_RELOC_RISCV_SUB_ULEB128
 ENUMDOC
   RISC-V relocations.
 
@@ -5346,7 +5150,7 @@ ENUMDOC
 ENUM
   BFD_RELOC_390_12
 ENUMDOC
-   Direct 12 bit.
+  Direct 12 bit.
 ENUM
   BFD_RELOC_390_GOT12
 ENUMDOC
@@ -5526,18 +5330,18 @@ ENUMDOC
 ENUM
   BFD_RELOC_SCORE_GPREL15
 ENUMDOC
-  Score relocations
-  Low 16 bit for load/store
+  Score relocations.
+  Low 16 bit for load/store.
 ENUM
   BFD_RELOC_SCORE_DUMMY2
 ENUMX
   BFD_RELOC_SCORE_JMP
 ENUMDOC
-  This is a 24-bit reloc with the right 1 bit assumed to be 0
+  This is a 24-bit reloc with the right 1 bit assumed to be 0.
 ENUM
   BFD_RELOC_SCORE_BRANCH
 ENUMDOC
-  This is a 19-bit reloc with the right 1 bit assumed to be 0
+  This is a 19-bit reloc with the right 1 bit assumed to be 0.
 ENUM
   BFD_RELOC_SCORE_IMM30
 ENUMDOC
@@ -5549,15 +5353,15 @@ ENUMDOC
 ENUM
   BFD_RELOC_SCORE16_JMP
 ENUMDOC
-  This is a 11-bit reloc with the right 1 bit assumed to be 0
+  This is a 11-bit reloc with the right 1 bit assumed to be 0.
 ENUM
   BFD_RELOC_SCORE16_BRANCH
 ENUMDOC
-  This is a 8-bit reloc with the right 1 bit assumed to be 0
+  This is a 8-bit reloc with the right 1 bit assumed to be 0.
 ENUM
   BFD_RELOC_SCORE_BCMP
 ENUMDOC
-   This is a 9-bit reloc with the right 1 bit assumed to be 0
+  This is a 9-bit reloc with the right 1 bit assumed to be 0.
 ENUM
   BFD_RELOC_SCORE_GOT15
 ENUMX
@@ -5567,24 +5371,24 @@ ENUMX
 ENUMX
   BFD_RELOC_SCORE_DUMMY_HI16
 ENUMDOC
-  Undocumented Score relocs
+  Undocumented Score relocs.
 
 ENUM
   BFD_RELOC_IP2K_FR9
 ENUMDOC
-  Scenix IP2K - 9-bit register number / data address
+  Scenix IP2K - 9-bit register number / data address.
 ENUM
   BFD_RELOC_IP2K_BANK
 ENUMDOC
-  Scenix IP2K - 4-bit register/data bank number
+  Scenix IP2K - 4-bit register/data bank number.
 ENUM
   BFD_RELOC_IP2K_ADDR16CJP
 ENUMDOC
-  Scenix IP2K - low 13 bits of instruction word address
+  Scenix IP2K - low 13 bits of instruction word address.
 ENUM
   BFD_RELOC_IP2K_PAGE3
 ENUMDOC
-  Scenix IP2K - high 3 bits of instruction word address
+  Scenix IP2K - high 3 bits of instruction word address.
 ENUM
   BFD_RELOC_IP2K_LO8DATA
 ENUMX
@@ -5592,17 +5396,17 @@ ENUMX
 ENUMX
   BFD_RELOC_IP2K_EX8DATA
 ENUMDOC
-  Scenix IP2K - ext/low/high 8 bits of data address
+  Scenix IP2K - ext/low/high 8 bits of data address.
 ENUM
   BFD_RELOC_IP2K_LO8INSN
 ENUMX
   BFD_RELOC_IP2K_HI8INSN
 ENUMDOC
-  Scenix IP2K - low/high 8 bits of instruction word address
+  Scenix IP2K - low/high 8 bits of instruction word address.
 ENUM
   BFD_RELOC_IP2K_PC_SKIP
 ENUMDOC
-  Scenix IP2K - even/odd PC modifier to modify snb pcl.0
+  Scenix IP2K - even/odd PC modifier to modify snb pcl.0.
 ENUM
   BFD_RELOC_IP2K_TEXT
 ENUMDOC
@@ -5610,13 +5414,13 @@ ENUMDOC
 ENUM
   BFD_RELOC_IP2K_FR_OFFSET
 ENUMDOC
-  Scenix IP2K - 7-bit sp or dp offset
+  Scenix IP2K - 7-bit sp or dp offset.
 ENUM
   BFD_RELOC_VPE4KMATH_DATA
 ENUMX
   BFD_RELOC_VPE4KMATH_INSN
 ENUMDOC
-  Scenix VPE4K coprocessor - data/insn-space addressing
+  Scenix VPE4K coprocessor - data/insn-space addressing.
 
 ENUM
   BFD_RELOC_VTABLE_INHERIT
@@ -5625,9 +5429,9 @@ ENUMX
 ENUMDOC
   These two relocations are used by the linker to determine which of
   the entries in a C++ virtual function table are actually used.  When
-  the --gc-sections option is given, the linker will zero out the entries
-  that are not used, so that the code for those functions need not be
-  included in the output.
+  the --gc-sections option is given, the linker will zero out the
+  entries that are not used, so that the code for those functions need
+  not be included in the output.
 
   VTABLE_INHERIT is a zero-space relocation used to describe to the
   linker the inheritance tree of a C++ virtual function table.  The
@@ -5635,11 +5439,11 @@ ENUMDOC
   relocation should be located at the child vtable.
 
   VTABLE_ENTRY is a zero-space relocation that describes the use of a
-  virtual function table entry.  The reloc's symbol should refer to the
-  table of the class mentioned in the code.  Off of that base, an offset
-  describes the entry that is being used.  For Rela hosts, this offset
-  is stored in the reloc's addend.  For Rel hosts, we are forced to put
-  this offset in the reloc's section offset.
+  virtual function table entry.  The reloc's symbol should refer to
+  the table of the class mentioned in the code.  Off of that base, an
+  offset describes the entry that is being used.  For Rela hosts, this
+  offset is stored in the reloc's addend.  For Rel hosts, we are
+  forced to put this offset in the reloc's section offset.
 
 ENUM
   BFD_RELOC_IA64_IMM14
@@ -5852,7 +5656,8 @@ ENUMDOC
   Motorola 68HC11 reloc.
   This is a 24-bit reloc that represents the address with a 16-bit
   value and a 8-bit page number.  The symbol address is transformed
-  to follow the 16K memory bank of 68HC12 (seen as mapped in the window).
+  to follow the 16K memory bank of 68HC12 (seen as mapped in the
+  window).
 ENUM
   BFD_RELOC_M68HC12_5B
 ENUMDOC
@@ -5874,8 +5679,8 @@ ENUM
   BFD_RELOC_XGATE_LO16
 ENUMDOC
   Freescale XGATE reloc.
-  This is the 16-bit lower part of an address.  It is used for the '16-bit'
-  instructions.
+  This is the 16-bit lower part of an address.  It is used for the
+  '16-bit' instructions.
 ENUM
   BFD_RELOC_XGATE_GPAGE
 ENUMDOC
@@ -5898,14 +5703,14 @@ ENUM
   BFD_RELOC_XGATE_IMM8_LO
 ENUMDOC
   Freescale XGATE reloc.
-  This is the 16-bit lower part of an address.  It is used for the '16-bit'
-  instructions.
+  This is the 16-bit lower part of an address.  It is used for the
+  '16-bit' instructions.
 ENUM
   BFD_RELOC_XGATE_IMM8_HI
 ENUMDOC
   Freescale XGATE reloc.
-  This is the 16-bit higher part of an address.  It is used for the '16-bit'
-  instructions.
+  This is the 16-bit higher part of an address.  It is used for the
+  '16-bit' instructions.
 ENUM
   BFD_RELOC_XGATE_IMM3
 ENUMDOC
@@ -5945,20 +5750,20 @@ ENUM
   BFD_RELOC_M68HC12_LO8XG
 ENUMDOC
   Motorola 68HC12/XGATE reloc.
-  This is the 8 bit low part of an absolute address and immediately precedes
-  a matching HI8XG part.
+  This is the 8 bit low part of an absolute address and immediately
+  precedes a matching HI8XG part.
 ENUM
   BFD_RELOC_M68HC12_HI8XG
 ENUMDOC
   Motorola 68HC12/XGATE reloc.
-  This is the 8 bit high part of an absolute address and immediately follows
-  a matching LO8XG part.
+  This is the 8 bit high part of an absolute address and immediately
+  follows a matching LO8XG part.
 ENUM
   BFD_RELOC_S12Z_15_PCREL
 ENUMDOC
   Freescale S12Z reloc.
-  This is a 15 bit relative address.  If the most significant bits are all zero
-  then it may be truncated to 8 bits.
+  This is a 15 bit relative address.  If the most significant bits are
+  all zero then it may be truncated to 8 bits.
 
 ENUM
   BFD_RELOC_CR16_NUM8
@@ -6132,7 +5937,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_CRIS_32_PLT_PCREL
 ENUMDOC
-  32-bit offset to symbol with PLT entry, relative to this relocation.
+  32-bit offset to symbol with PLT entry, relative to this
+  relocation.
 
 ENUM
   BFD_RELOC_CRIS_32_GOT_GD
@@ -6176,6 +5982,8 @@ ENUMX
 ENUMX
   BFD_RELOC_OR1K_GOTPC_LO16
 ENUMX
+  BFD_RELOC_OR1K_GOT_AHI16
+ENUMX
   BFD_RELOC_OR1K_GOT16
 ENUMX
   BFD_RELOC_OR1K_GOT_PG21
@@ -6272,18 +6080,6 @@ ENUM
   BFD_RELOC_RELC
 ENUMDOC
   Self-describing complex relocations.
-COMMENT
-
-ENUM
-  BFD_RELOC_XC16X_PAG
-ENUMX
-  BFD_RELOC_XC16X_POF
-ENUMX
-  BFD_RELOC_XC16X_SEG
-ENUMX
-  BFD_RELOC_XC16X_SOF
-ENUMDOC
-  Infineon Relocations.
 
 ENUM
   BFD_RELOC_VAX_GLOB_DAT
@@ -6363,8 +6159,12 @@ ENUMX
   BFD_RELOC_MSP430_PREL31
 ENUMX
   BFD_RELOC_MSP430_SYM_DIFF
+ENUMX
+  BFD_RELOC_MSP430_SET_ULEB128
+ENUMX
+  BFD_RELOC_MSP430_SUB_ULEB128
 ENUMDOC
-  msp430 specific relocation codes
+  msp430 specific relocation codes.
 
 ENUM
   BFD_RELOC_NIOS2_S16
@@ -6500,8 +6300,8 @@ ENUM
 ENUMX
   BFD_RELOC_PRU_16_PMEM
 ENUMDOC
-  PRU Program Memory relocations.  Used to convert from byte addressing to
-  32-bit word addressing.
+  PRU Program Memory relocations.  Used to convert from byte
+  addressing to 32-bit word addressing.
 ENUM
   BFD_RELOC_PRU_GNU_DIFF8
 ENUMX
@@ -6514,12 +6314,12 @@ ENUMX
   BFD_RELOC_PRU_GNU_DIFF32_PMEM
 ENUMDOC
   PRU relocations to mark the difference of two local symbols.
-  These are only needed to support linker relaxation and can be ignored
-  when not relaxing.  The field is set to the value of the difference
-  assuming no relaxation.  The relocation encodes the position of the
-  second symbol so the linker can determine whether to adjust the field
-  value. The PMEM variants encode the word difference, instead of byte
-  difference between symbols.
+  These are only needed to support linker relaxation and can be
+  ignored when not relaxing.  The field is set to the value of the
+  difference assuming no relaxation.  The relocation encodes the
+  position of the second symbol so the linker can determine whether to
+  adjust the field value.  The PMEM variants encode the word
+  difference, instead of byte difference between symbols.
 
 ENUM
   BFD_RELOC_IQ2000_OFFSET_16
@@ -6547,8 +6347,9 @@ ENUMDOC
 ENUM
   BFD_RELOC_XTENSA_PLT
 ENUMDOC
-  Xtensa relocation used in ELF object files for symbols that may require
-  PLT entries.  Otherwise, this is just a generic 32-bit relocation.
+  Xtensa relocation used in ELF object files for symbols that may
+  require PLT entries.  Otherwise, this is just a generic 32-bit
+  relocation.
 ENUM
   BFD_RELOC_XTENSA_DIFF8
 ENUMX
@@ -6556,12 +6357,14 @@ ENUMX
 ENUMX
   BFD_RELOC_XTENSA_DIFF32
 ENUMDOC
+  Xtensa relocations for backward compatibility.  These have been
+  replaced by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF.
   Xtensa relocations to mark the difference of two local symbols.
-  These are only needed to support linker relaxation and can be ignored
-  when not relaxing.  The field is set to the value of the difference
-  assuming no relaxation.  The relocation encodes the position of the
-  first symbol so the linker can determine whether to adjust the field
-  value.
+  These are only needed to support linker relaxation and can be
+  ignored when not relaxing.  The field is set to the value of the
+  difference assuming no relaxation.  The relocation encodes the
+  position of the first symbol so the linker can determine whether to
+  adjust the field value.
 ENUM
   BFD_RELOC_XTENSA_SLOT0_OP
 ENUMX
@@ -6668,11 +6471,61 @@ ENUMX
   BFD_RELOC_XTENSA_TLS_CALL
 ENUMDOC
   Xtensa TLS relocations.
+ENUM
+  BFD_RELOC_XTENSA_PDIFF8
+ENUMX
+  BFD_RELOC_XTENSA_PDIFF16
+ENUMX
+  BFD_RELOC_XTENSA_PDIFF32
+ENUMX
+  BFD_RELOC_XTENSA_NDIFF8
+ENUMX
+  BFD_RELOC_XTENSA_NDIFF16
+ENUMX
+  BFD_RELOC_XTENSA_NDIFF32
+ENUMDOC
+  Xtensa relocations to mark the difference of two local symbols.
+  These are only needed to support linker relaxation and can be
+  ignored when not relaxing.  The field is set to the value of the
+  difference assuming no relaxation.  The relocation encodes the
+  position of the subtracted symbol so the linker can determine
+  whether to adjust the field value.  PDIFF relocations are used for
+  positive differences, NDIFF relocations are used for negative
+  differences.  The difference value is treated as unsigned with these
+  relocation types, giving full 8/16 value ranges.
 
 ENUM
   BFD_RELOC_Z80_DISP8
 ENUMDOC
   8 bit signed offset in (ix+d) or (iy+d).
+ENUM
+  BFD_RELOC_Z80_BYTE0
+ENUMDOC
+  First 8 bits of multibyte (32, 24 or 16 bit) value.
+ENUM
+  BFD_RELOC_Z80_BYTE1
+ENUMDOC
+  Second 8 bits of multibyte (32, 24 or 16 bit) value.
+ENUM
+  BFD_RELOC_Z80_BYTE2
+ENUMDOC
+  Third 8 bits of multibyte (32 or 24 bit) value.
+ENUM
+  BFD_RELOC_Z80_BYTE3
+ENUMDOC
+  Fourth 8 bits of multibyte (32 bit) value.
+ENUM
+  BFD_RELOC_Z80_WORD0
+ENUMDOC
+  Lowest 16 bits of multibyte (32 or 24 bit) value.
+ENUM
+  BFD_RELOC_Z80_WORD1
+ENUMDOC
+  Highest 16 bits of multibyte (32 or 24 bit) value.
+ENUM
+  BFD_RELOC_Z80_16_BE
+ENUMDOC
+  Like BFD_RELOC_16 but big-endian.
 
 ENUM
   BFD_RELOC_Z8K_DISP7
@@ -6688,25 +6541,25 @@ ENUMDOC
   4 bit value.
 
 ENUM
-   BFD_RELOC_LM32_CALL
+  BFD_RELOC_LM32_CALL
 ENUMX
-   BFD_RELOC_LM32_BRANCH
+  BFD_RELOC_LM32_BRANCH
 ENUMX
-   BFD_RELOC_LM32_16_GOT
+  BFD_RELOC_LM32_16_GOT
 ENUMX
-   BFD_RELOC_LM32_GOTOFF_HI16
+  BFD_RELOC_LM32_GOTOFF_HI16
 ENUMX
-   BFD_RELOC_LM32_GOTOFF_LO16
+  BFD_RELOC_LM32_GOTOFF_LO16
 ENUMX
-   BFD_RELOC_LM32_COPY
+  BFD_RELOC_LM32_COPY
 ENUMX
-   BFD_RELOC_LM32_GLOB_DAT
+  BFD_RELOC_LM32_GLOB_DAT
 ENUMX
-   BFD_RELOC_LM32_JMP_SLOT
+  BFD_RELOC_LM32_JMP_SLOT
 ENUMX
-   BFD_RELOC_LM32_RELATIVE
+  BFD_RELOC_LM32_RELATIVE
 ENUMDOC
- Lattice Mico32 relocations.
+  Lattice Mico32 relocations.
 
 ENUM
   BFD_RELOC_MACH_O_SECTDIFF
@@ -6744,8 +6597,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_MACH_O_X86_64_GOT_LOAD
 ENUMDOC
-  Used when loading a GOT entry with movq.  It is specially marked so that
-  the linker could optimize the movq to a leaq if possible.
+  Used when loading a GOT entry with movq.  It is specially marked so
+  that the linker could optimize the movq to a leaq if possible.
 ENUM
   BFD_RELOC_MACH_O_X86_64_PCREL32_1
 ENUMDOC
@@ -6784,64 +6637,69 @@ ENUMDOC
 ENUM
   BFD_RELOC_MICROBLAZE_32_LO
 ENUMDOC
-  This is a 32 bit reloc for the microblaze that stores the
-  low 16 bits of a value
+  This is a 32 bit reloc for the microblaze that stores the low 16
+  bits of a value.
 ENUM
   BFD_RELOC_MICROBLAZE_32_LO_PCREL
 ENUMDOC
-  This is a 32 bit pc-relative reloc for the microblaze that
-  stores the low 16 bits of a value
+  This is a 32 bit pc-relative reloc for the microblaze that stores
+  the low 16 bits of a value.
 ENUM
   BFD_RELOC_MICROBLAZE_32_ROSDA
 ENUMDOC
-  This is a 32 bit reloc for the microblaze that stores a
-  value relative to the read-only small data area anchor
+  This is a 32 bit reloc for the microblaze that stores a value
+  relative to the read-only small data area anchor.
 ENUM
   BFD_RELOC_MICROBLAZE_32_RWSDA
 ENUMDOC
-  This is a 32 bit reloc for the microblaze that stores a
-  value relative to the read-write small data area anchor
+  This is a 32 bit reloc for the microblaze that stores a value
+  relative to the read-write small data area anchor.
 ENUM
   BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM
 ENUMDOC
-  This is a 32 bit reloc for the microblaze to handle
-  expressions of the form "Symbol Op Symbol"
+  This is a 32 bit reloc for the microblaze to handle expressions of
+  the form "Symbol Op Symbol".
+ENUM
+  BFD_RELOC_MICROBLAZE_32_NONE
+ENUMDOC
+  This is a 32 bit reloc that stores the 32 bit pc relative value in
+  two words (with an imm instruction).  No relocation is done here -
+  only used for relaxing.
 ENUM
   BFD_RELOC_MICROBLAZE_64_NONE
 ENUMDOC
-  This is a 64 bit reloc that stores the 32 bit pc relative
-  value in two words (with an imm instruction).  No relocation is
-  done here - only used for relaxing
+  This is a 64 bit reloc that stores the 32 bit pc relative value in
+  two words (with an imm instruction).  No relocation is done here -
+  only used for relaxing.
 ENUM
   BFD_RELOC_MICROBLAZE_64_GOTPC
 ENUMDOC
-  This is a 64 bit reloc that stores the 32 bit pc relative
-  value in two words (with an imm instruction).  The relocation is
-  PC-relative GOT offset
+  This is a 64 bit reloc that stores the 32 bit pc relative value in
+  two words (with an imm instruction).  The relocation is PC-relative
+  GOT offset.
 ENUM
   BFD_RELOC_MICROBLAZE_64_GOT
 ENUMDOC
-  This is a 64 bit reloc that stores the 32 bit pc relative
-  value in two words (with an imm instruction).  The relocation is
-  GOT offset
+  This is a 64 bit reloc that stores the 32 bit pc relative value in
+  two words (with an imm instruction).  The relocation is GOT offset.
 ENUM
   BFD_RELOC_MICROBLAZE_64_PLT
 ENUMDOC
-  This is a 64 bit reloc that stores the 32 bit pc relative
-  value in two words (with an imm instruction).  The relocation is
-  PC-relative offset into PLT
+  This is a 64 bit reloc that stores the 32 bit pc relative value in
+  two words (with an imm instruction).  The relocation is PC-relative
+  offset into PLT.
 ENUM
   BFD_RELOC_MICROBLAZE_64_GOTOFF
 ENUMDOC
-  This is a 64 bit reloc that stores the 32 bit GOT relative
-  value in two words (with an imm instruction).  The relocation is
-  relative offset from _GLOBAL_OFFSET_TABLE_
+  This is a 64 bit reloc that stores the 32 bit GOT relative value in
+  two words (with an imm instruction).  The relocation is relative
+  offset from _GLOBAL_OFFSET_TABLE_.
 ENUM
   BFD_RELOC_MICROBLAZE_32_GOTOFF
 ENUMDOC
-  This is a 32 bit reloc that stores the 32 bit GOT relative
-  value in a word.  The relocation is relative offset from
-  _GLOBAL_OFFSET_TABLE_
+  This is a 32 bit reloc that stores the 32 bit GOT relative value in
+  a word.  The relocation is relative offset from
+  _GLOBAL_OFFSET_TABLE_.
 ENUM
   BFD_RELOC_MICROBLAZE_COPY
 ENUMDOC
@@ -6850,19 +6708,19 @@ ENUMDOC
 ENUM
   BFD_RELOC_MICROBLAZE_64_TLS
 ENUMDOC
-  Unused Reloc
+  Unused Reloc.
 ENUM
   BFD_RELOC_MICROBLAZE_64_TLSGD
 ENUMDOC
   This is a 64 bit reloc that stores the 32 bit GOT relative value
-  of the GOT TLS GD info entry in two words (with an imm instruction). The
-  relocation is GOT offset.
+  of the GOT TLS GD info entry in two words (with an imm instruction).
+  The relocation is GOT offset.
 ENUM
   BFD_RELOC_MICROBLAZE_64_TLSLD
 ENUMDOC
   This is a 64 bit reloc that stores the 32 bit GOT relative value
-  of the GOT TLS LD info entry in two words (with an imm instruction). The
-  relocation is GOT offset.
+  of the GOT TLS LD info entry in two words (with an imm instruction).
+  The relocation is GOT offset.
 ENUM
   BFD_RELOC_MICROBLAZE_32_TLSDTPMOD
 ENUMDOC
@@ -6875,30 +6733,214 @@ ENUM
   BFD_RELOC_MICROBLAZE_64_TLSDTPREL
 ENUMDOC
   This is a 32 bit reloc for storing TLS offset to two words (uses imm
-  instruction)
+  instruction).
 ENUM
   BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL
 ENUMDOC
-  This is a 64 bit reloc that stores 32-bit thread pointer relative offset
-  to two words (uses imm instruction).
+  This is a 64 bit reloc that stores 32-bit thread pointer relative
+  offset to two words (uses imm instruction).
 ENUM
   BFD_RELOC_MICROBLAZE_64_TLSTPREL
 ENUMDOC
-  This is a 64 bit reloc that stores 32-bit thread pointer relative offset
-  to two words (uses imm instruction).
+  This is a 64 bit reloc that stores 32-bit thread pointer relative
+  offset to two words (uses imm instruction).
 ENUM
   BFD_RELOC_MICROBLAZE_64_TEXTPCREL
 ENUMDOC
-  This is a 64 bit reloc that stores the 32 bit pc relative
-  value in two words (with an imm instruction).  The relocation is
-  PC-relative offset from start of TEXT.
+  This is a 64 bit reloc that stores the 32 bit pc relative value in
+  two words (with an imm instruction).  The relocation is PC-relative
+  offset from start of TEXT.
 ENUM
   BFD_RELOC_MICROBLAZE_64_TEXTREL
 ENUMDOC
-  This is a 64 bit reloc that stores the 32 bit offset
-  value in two words (with an imm instruction).  The relocation is
-  relative offset from start of TEXT.
-
+  This is a 64 bit reloc that stores the 32 bit offset value in two
+  words (with an imm instruction).  The relocation is relative offset
+  from start of TEXT.
+ENUM
+  BFD_RELOC_KVX_RELOC_START
+ENUMDOC
+  KVX pseudo relocation code to mark the start of the KVX relocation
+  enumerators.  N.B. the order of the enumerators is important as
+  several tables in the KVX bfd backend are indexed by these
+  enumerators; make sure they are all synced.
+ENUM
+  BFD_RELOC_KVX_NONE
+ENUMDOC
+  KVX null relocation code.
+ENUM
+BFD_RELOC_KVX_16
+ENUMX
+BFD_RELOC_KVX_32
+ENUMX
+BFD_RELOC_KVX_64
+ENUMX
+BFD_RELOC_KVX_S16_PCREL
+ENUMX
+BFD_RELOC_KVX_PCREL17
+ENUMX
+BFD_RELOC_KVX_PCREL27
+ENUMX
+BFD_RELOC_KVX_32_PCREL
+ENUMX
+BFD_RELOC_KVX_S37_PCREL_LO10
+ENUMX
+BFD_RELOC_KVX_S37_PCREL_UP27
+ENUMX
+BFD_RELOC_KVX_S43_PCREL_LO10
+ENUMX
+BFD_RELOC_KVX_S43_PCREL_UP27
+ENUMX
+BFD_RELOC_KVX_S43_PCREL_EX6
+ENUMX
+BFD_RELOC_KVX_S64_PCREL_LO10
+ENUMX
+BFD_RELOC_KVX_S64_PCREL_UP27
+ENUMX
+BFD_RELOC_KVX_S64_PCREL_EX27
+ENUMX
+BFD_RELOC_KVX_64_PCREL
+ENUMX
+BFD_RELOC_KVX_S16
+ENUMX
+BFD_RELOC_KVX_S32_LO5
+ENUMX
+BFD_RELOC_KVX_S32_UP27
+ENUMX
+BFD_RELOC_KVX_S37_LO10
+ENUMX
+BFD_RELOC_KVX_S37_UP27
+ENUMX
+BFD_RELOC_KVX_S37_GOTOFF_LO10
+ENUMX
+BFD_RELOC_KVX_S37_GOTOFF_UP27
+ENUMX
+BFD_RELOC_KVX_S43_GOTOFF_LO10
+ENUMX
+BFD_RELOC_KVX_S43_GOTOFF_UP27
+ENUMX
+BFD_RELOC_KVX_S43_GOTOFF_EX6
+ENUMX
+BFD_RELOC_KVX_32_GOTOFF
+ENUMX
+BFD_RELOC_KVX_64_GOTOFF
+ENUMX
+BFD_RELOC_KVX_32_GOT
+ENUMX
+BFD_RELOC_KVX_S37_GOT_LO10
+ENUMX
+BFD_RELOC_KVX_S37_GOT_UP27
+ENUMX
+BFD_RELOC_KVX_S43_GOT_LO10
+ENUMX
+BFD_RELOC_KVX_S43_GOT_UP27
+ENUMX
+BFD_RELOC_KVX_S43_GOT_EX6
+ENUMX
+BFD_RELOC_KVX_64_GOT
+ENUMX
+BFD_RELOC_KVX_GLOB_DAT
+ENUMX
+BFD_RELOC_KVX_COPY
+ENUMX
+BFD_RELOC_KVX_JMP_SLOT
+ENUMX
+BFD_RELOC_KVX_RELATIVE
+ENUMX
+BFD_RELOC_KVX_S43_LO10
+ENUMX
+BFD_RELOC_KVX_S43_UP27
+ENUMX
+BFD_RELOC_KVX_S43_EX6
+ENUMX
+BFD_RELOC_KVX_S64_LO10
+ENUMX
+BFD_RELOC_KVX_S64_UP27
+ENUMX
+BFD_RELOC_KVX_S64_EX27
+ENUMX
+BFD_RELOC_KVX_S37_GOTADDR_LO10
+ENUMX
+BFD_RELOC_KVX_S37_GOTADDR_UP27
+ENUMX
+BFD_RELOC_KVX_S43_GOTADDR_LO10
+ENUMX
+BFD_RELOC_KVX_S43_GOTADDR_UP27
+ENUMX
+BFD_RELOC_KVX_S43_GOTADDR_EX6
+ENUMX
+BFD_RELOC_KVX_S64_GOTADDR_LO10
+ENUMX
+BFD_RELOC_KVX_S64_GOTADDR_UP27
+ENUMX
+BFD_RELOC_KVX_S64_GOTADDR_EX27
+ENUMX
+BFD_RELOC_KVX_64_DTPMOD
+ENUMX
+BFD_RELOC_KVX_64_DTPOFF
+ENUMX
+BFD_RELOC_KVX_S37_TLS_DTPOFF_LO10
+ENUMX
+BFD_RELOC_KVX_S37_TLS_DTPOFF_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_DTPOFF_LO10
+ENUMX
+BFD_RELOC_KVX_S43_TLS_DTPOFF_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_DTPOFF_EX6
+ENUMX
+BFD_RELOC_KVX_S37_TLS_GD_LO10
+ENUMX
+BFD_RELOC_KVX_S37_TLS_GD_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_GD_LO10
+ENUMX
+BFD_RELOC_KVX_S43_TLS_GD_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_GD_EX6
+ENUMX
+BFD_RELOC_KVX_S37_TLS_LD_LO10
+ENUMX
+BFD_RELOC_KVX_S37_TLS_LD_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_LD_LO10
+ENUMX
+BFD_RELOC_KVX_S43_TLS_LD_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_LD_EX6
+ENUMX
+BFD_RELOC_KVX_64_TPOFF
+ENUMX
+BFD_RELOC_KVX_S37_TLS_IE_LO10
+ENUMX
+BFD_RELOC_KVX_S37_TLS_IE_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_IE_LO10
+ENUMX
+BFD_RELOC_KVX_S43_TLS_IE_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_IE_EX6
+ENUMX
+BFD_RELOC_KVX_S37_TLS_LE_LO10
+ENUMX
+BFD_RELOC_KVX_S37_TLS_LE_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_LE_LO10
+ENUMX
+BFD_RELOC_KVX_S43_TLS_LE_UP27
+ENUMX
+BFD_RELOC_KVX_S43_TLS_LE_EX6
+ENUMX
+BFD_RELOC_KVX_8
+ENUMDOC
+  KVX Relocations.
+ENUM
+  BFD_RELOC_KVX_RELOC_END
+ENUMDOC
+  KVX pseudo relocation code to mark the end of the KVX relocation
+  enumerators that have direct mapping to ELF reloc codes.  There are
+  a few more enumerators after this one; those are mainly used by the
+  KVX assembler for the internal fixup or to select one of the above
+  enumerators.
 ENUM
   BFD_RELOC_AARCH64_RELOC_START
 ENUMDOC
@@ -6922,8 +6964,8 @@ ENUMX
   BFD_RELOC_AARCH64_16
 ENUMDOC
   Basic absolute relocations of N bits.  These are equivalent to
-BFD_RELOC_N and they were added to assist the indexing of the howto
-table.
+  BFD_RELOC_N and they were added to assist the indexing of the howto
+  table.
 ENUM
   BFD_RELOC_AARCH64_64_PCREL
 ENUMX
@@ -6932,12 +6974,12 @@ ENUMX
   BFD_RELOC_AARCH64_16_PCREL
 ENUMDOC
   PC-relative relocations.  These are equivalent to BFD_RELOC_N_PCREL
-and they were added to assist the indexing of the howto table.
+  and they were added to assist the indexing of the howto table.
 ENUM
   BFD_RELOC_AARCH64_MOVW_G0
 ENUMDOC
-  AArch64 MOV[NZK] instruction with most significant bits 0 to 15
-  of an unsigned address/value.
+  AArch64 MOV[NZK] instruction with most significant bits 0 to 15 of
+  an unsigned address/value.
 ENUM
   BFD_RELOC_AARCH64_MOVW_G0_NC
 ENUMDOC
@@ -6946,83 +6988,83 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_MOVW_G1
 ENUMDOC
-  AArch64 MOV[NZK] instruction with most significant bits 16 to 31
-  of an unsigned address/value.
+  AArch64 MOV[NZK] instruction with most significant bits 16 to 31 of
+  an unsigned address/value.
 ENUM
   BFD_RELOC_AARCH64_MOVW_G1_NC
 ENUMDOC
-  AArch64 MOV[NZK] instruction with less significant bits 16 to 31
-  of an address/value.  No overflow checking.
+  AArch64 MOV[NZK] instruction with less significant bits 16 to 31 of
+  an address/value.  No overflow checking.
 ENUM
   BFD_RELOC_AARCH64_MOVW_G2
 ENUMDOC
-  AArch64 MOV[NZK] instruction with most significant bits 32 to 47
-  of an unsigned address/value.
+  AArch64 MOV[NZK] instruction with most significant bits 32 to 47 of
+  an unsigned address/value.
 ENUM
   BFD_RELOC_AARCH64_MOVW_G2_NC
 ENUMDOC
-  AArch64 MOV[NZK] instruction with less significant bits 32 to 47
-  of an address/value.  No overflow checking.
+  AArch64 MOV[NZK] instruction with less significant bits 32 to 47 of
+  an address/value.  No overflow checking.
 ENUM
   BFD_RELOC_AARCH64_MOVW_G3
 ENUMDOC
-  AArch64 MOV[NZK] instruction with most signficant bits 48 to 64
-  of a signed or unsigned address/value.
+  AArch64 MOV[NZK] instruction with most signficant bits 48 to 64 of a
+  signed or unsigned address/value.
 ENUM
   BFD_RELOC_AARCH64_MOVW_G0_S
 ENUMDOC
-  AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-  of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+  AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of a
+  signed value.  Changes instruction to MOVZ or MOVN depending on the
   value's sign.
 ENUM
   BFD_RELOC_AARCH64_MOVW_G1_S
 ENUMDOC
-  AArch64 MOV[NZ] instruction with most significant bits 16 to 31
-  of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+  AArch64 MOV[NZ] instruction with most significant bits 16 to 31 of a
+  signed value.  Changes instruction to MOVZ or MOVN depending on the
   value's sign.
 ENUM
   BFD_RELOC_AARCH64_MOVW_G2_S
 ENUMDOC
-  AArch64 MOV[NZ] instruction with most significant bits 32 to 47
-  of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+  AArch64 MOV[NZ] instruction with most significant bits 32 to 47 of a
+  signed value.  Changes instruction to MOVZ or MOVN depending on the
   value's sign.
 ENUM
   BFD_RELOC_AARCH64_MOVW_PREL_G0
 ENUMDOC
-  AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-  of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+  AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of a
+  signed value.  Changes instruction to MOVZ or MOVN depending on the
   value's sign.
 ENUM
   BFD_RELOC_AARCH64_MOVW_PREL_G0_NC
 ENUMDOC
-  AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-  of a signed value.  Changes instruction to MOVZ or MOVN depending on the
+  AArch64 MOV[NZ] instruction with most significant bits 0 to 15 of a
+  signed value.  Changes instruction to MOVZ or MOVN depending on the
   value's sign.
 ENUM
   BFD_RELOC_AARCH64_MOVW_PREL_G1
 ENUMDOC
-  AArch64 MOVK instruction with most significant bits 16 to 31
-  of a signed value.
+  AArch64 MOVK instruction with most significant bits 16 to 31 of a
+  signed value.
 ENUM
   BFD_RELOC_AARCH64_MOVW_PREL_G1_NC
 ENUMDOC
-  AArch64 MOVK instruction with most significant bits 16 to 31
-  of a signed value.
+  AArch64 MOVK instruction with most significant bits 16 to 31 of a
+  signed value.
 ENUM
   BFD_RELOC_AARCH64_MOVW_PREL_G2
 ENUMDOC
-  AArch64 MOVK instruction with most significant bits 32 to 47
-  of a signed value.
+  AArch64 MOVK instruction with most significant bits 32 to 47 of a
+  signed value.
 ENUM
   BFD_RELOC_AARCH64_MOVW_PREL_G2_NC
 ENUMDOC
-  AArch64 MOVK instruction with most significant bits 32 to 47
-  of a signed value.
+  AArch64 MOVK instruction with most significant bits 32 to 47 of a
+  signed value.
 ENUM
   BFD_RELOC_AARCH64_MOVW_PREL_G3
 ENUMDOC
-  AArch64 MOVK instruction with most significant bits 47 to 63
-  of a signed value.
+  AArch64 MOVK instruction with most significant bits 47 to 63 of a
+  signed value.
 ENUM
   BFD_RELOC_AARCH64_LD_LO19_PCREL
 ENUMDOC
@@ -7032,7 +7074,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_ADR_LO21_PCREL
 ENUMDOC
-  AArch64 ADR instruction, holding a simple 21 bit pc-relative byte offset.
+  AArch64 ADR instruction, holding a simple 21 bit pc-relative byte
+  offset.
 ENUM
   BFD_RELOC_AARCH64_ADR_HI21_PCREL
 ENUMDOC
@@ -7047,8 +7090,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_ADD_LO12
 ENUMDOC
-  AArch64 ADD immediate instruction, holding bits 0 to 11 of the address.
-  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.
+  AArch64 ADD immediate instruction, holding bits 0 to 11 of the
+  address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.
 ENUM
   BFD_RELOC_AARCH64_LDST8_LO12
 ENUMDOC
@@ -7058,26 +7101,26 @@ ENUM
   BFD_RELOC_AARCH64_TSTBR14
 ENUMDOC
   AArch64 14 bit pc-relative test bit and branch.
-  The lowest two bits must be zero and are not stored in the instruction,
-  giving a 16 bit signed byte offset.
+  The lowest two bits must be zero and are not stored in the
+  instruction, giving a 16 bit signed byte offset.
 ENUM
   BFD_RELOC_AARCH64_BRANCH19
 ENUMDOC
   AArch64 19 bit pc-relative conditional branch and compare & branch.
-  The lowest two bits must be zero and are not stored in the instruction,
-  giving a 21 bit signed byte offset.
+  The lowest two bits must be zero and are not stored in the
+  instruction, giving a 21 bit signed byte offset.
 ENUM
   BFD_RELOC_AARCH64_JUMP26
 ENUMDOC
   AArch64 26 bit pc-relative unconditional branch.
-  The lowest two bits must be zero and are not stored in the instruction,
-  giving a 28 bit signed byte offset.
+  The lowest two bits must be zero and are not stored in the
+  instruction, giving a 28 bit signed byte offset.
 ENUM
   BFD_RELOC_AARCH64_CALL26
 ENUMDOC
   AArch64 26 bit pc-relative unconditional branch and link.
-  The lowest two bits must be zero and are not stored in the instruction,
-  giving a 28 bit signed byte offset.
+  The lowest two bits must be zero and are not stored in the
+  instruction, giving a 28 bit signed byte offset.
 ENUM
   BFD_RELOC_AARCH64_LDST16_LO12
 ENUMDOC
@@ -7102,16 +7145,16 @@ ENUM
   BFD_RELOC_AARCH64_GOT_LD_PREL19
 ENUMDOC
   AArch64 Load Literal instruction, holding a 19 bit PC relative word
-  offset of the global offset table entry for a symbol.  The lowest two
-  bits must be zero and are not stored in the instruction, giving a 21
-  bit signed byte offset.  This relocation type requires signed overflow
-  checking.
+  offset of the global offset table entry for a symbol.  The lowest
+  two bits must be zero and are not stored in the instruction, giving
+  a 21 bit signed byte offset.  This relocation type requires signed
+  overflow checking.
 ENUM
   BFD_RELOC_AARCH64_ADR_GOT_PAGE
 ENUMDOC
-  Get to the page base of the global offset table entry for a symbol as
-  part of an ADRP instruction using a 21 bit PC relative value.Used in
-  conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.
+  Get to the page base of the global offset table entry for a symbol
+  as part of an ADRP instruction using a 21 bit PC relative value.
+  Used in conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.
 ENUM
   BFD_RELOC_AARCH64_LD64_GOT_LO12_NC
 ENUMDOC
@@ -7132,8 +7175,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_MOVW_GOTOFF_G1
 ENUMDOC
-  Unsigned 16 bit byte higher offset for 64 bit load/store from the GOT entry
-  for this symbol.  Valid in LP64 ABI only.
+  Unsigned 16 bit byte higher offset for 64 bit load/store from the
+  GOT entry for this symbol.  Valid in LP64 ABI only.
 ENUM
   BFD_RELOC_AARCH64_LD64_GOTOFF_LO15
 ENUMDOC
@@ -7142,11 +7185,13 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14
 ENUMDOC
-  Scaled 14 bit byte offset to the page base of the global offset table.
+  Scaled 14 bit byte offset to the page base of the global offset
+  table.
 ENUM
   BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15
 ENUMDOC
-  Scaled 15 bit byte offset to the page base of the global offset table.
+  Scaled 15 bit byte offset to the page base of the global offset
+  table.
 ENUM
   BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21
 ENUMDOC
@@ -7157,12 +7202,12 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSGD_ADR_PREL21
 ENUMDOC
-  AArch64 TLS General Dynamic
+  AArch64 TLS General Dynamic.
 ENUM
   BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC
 ENUMDOC
-  Unsigned 12 bit byte offset to global offset table entry for a symbols
-  tls_index structure.  Used in conjunction with
+  Unsigned 12 bit byte offset to global offset table entry for a
+  symbol's tls_index structure.  Used in conjunction with
   BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21.
 ENUM
   BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC
@@ -7207,12 +7252,13 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC
 ENUMDOC
-  No overflow check version of BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12.
+  No overflow check version of
+  BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC
 ENUMDOC
-  Unsigned 12 bit byte offset to global offset table entry for a symbols
-  tls_index structure.  Used in conjunction with
+  Unsigned 12 bit byte offset to global offset table entry for a
+  symbol's tls_index structure.  Used in conjunction with
   BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21
@@ -7222,7 +7268,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLD_ADR_PREL21
 ENUMDOC
-  GOT entry address for AArch64 TLS Local Dynamic, used with ADR instruction.
+  GOT entry address for AArch64 TLS Local Dynamic, used with ADR
+  instruction.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12
 ENUMDOC
@@ -7231,7 +7278,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no
+  overflow check.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12
 ENUMDOC
@@ -7240,7 +7288,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no
+  overflow check. 
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12
 ENUMDOC
@@ -7249,7 +7298,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no
+  overflow check.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12
 ENUMDOC
@@ -7258,7 +7308,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no
+  overflow check.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0
 ENUMDOC
@@ -7266,7 +7317,7 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC
 ENUMDOC
-  No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0
+  No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1
 ENUMDOC
@@ -7274,7 +7325,7 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC
 ENUMDOC
-  No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1
+  No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2
 ENUMDOC
@@ -7319,7 +7370,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no
+  overflow check.
 ENUM
   BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12
 ENUMDOC
@@ -7328,7 +7380,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no
+  overflow check.
 ENUM
   BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12
 ENUMDOC
@@ -7337,7 +7390,8 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no
+  overflow check.
 ENUM
   BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12
 ENUMDOC
@@ -7346,83 +7400,52 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no overflow
+  check.
 ENUM
   BFD_RELOC_AARCH64_TLSDESC_LD_PREL19
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_LD64_LO12
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_ADD_LO12
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_OFF_G1
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_LDR
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_ADD
-ENUMDOC
-  AArch64 TLS DESC relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC_CALL
 ENUMDOC
-  AArch64 TLS DESC relocation.
+  AArch64 TLS DESC relocations.
 ENUM
   BFD_RELOC_AARCH64_COPY
-ENUMDOC
-  AArch64 TLS relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_GLOB_DAT
-ENUMDOC
-  AArch64 TLS relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_JUMP_SLOT
-ENUMDOC
-  AArch64 TLS relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_RELATIVE
 ENUMDOC
-  AArch64 TLS relocation.
+  AArch64 DSO relocations.
 ENUM
   BFD_RELOC_AARCH64_TLS_DTPMOD
-ENUMDOC
-  AArch64 TLS relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLS_DTPREL
-ENUMDOC
-  AArch64 TLS relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLS_TPREL
-ENUMDOC
-  AArch64 TLS relocation.
-ENUM
+ENUMX
   BFD_RELOC_AARCH64_TLSDESC
 ENUMDOC
-  AArch64 TLS relocation.
+  AArch64 TLS relocations.
 ENUM
   BFD_RELOC_AARCH64_IRELATIVE
 ENUMDOC
@@ -7448,23 +7471,25 @@ ENUMDOC
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12
 ENUMDOC
-  AArch64 pseudo relocation code for TLS local dynamic mode.  It's to be
-  used internally by the AArch64 assembler and not (currently) written to
-  any object files.
+  AArch64 pseudo relocation code for TLS local dynamic mode.  It's to
+  be used internally by the AArch64 assembler and not (currently)
+  written to any object files.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no overflow
+  check.
 ENUM
   BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12
 ENUMDOC
   AArch64 pseudo relocation code for TLS local exec mode.  It's to be
-  used internally by the AArch64 assembler and not (currently) written to
-  any object files.
+  used internally by the AArch64 assembler and not (currently) written
+  to any object files.
 ENUM
   BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC
 ENUMDOC
-  Similar as BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12, but no overflow check.
+  Similar to BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12, but no overflow
+  check.
 ENUM
   BFD_RELOC_AARCH64_LD_GOT_LO12_NC
 ENUMDOC
@@ -7864,40 +7889,39 @@ ENUMDOC
 ENUM
   BFD_RELOC_BPF_64
 ENUMX
-  BFD_RELOC_BPF_32
+  BFD_RELOC_BPF_DISP32
 ENUMX
-  BFD_RELOC_BPF_16
+  BFD_RELOC_BPF_DISPCALL32
 ENUMX
   BFD_RELOC_BPF_DISP16
-ENUMX
-  BFD_RELOC_BPF_DISP32
 ENUMDOC
   Linux eBPF relocations.
 
 ENUM
   BFD_RELOC_EPIPHANY_SIMM8
 ENUMDOC
-  Adapteva EPIPHANY - 8 bit signed pc-relative displacement
+  Adapteva EPIPHANY - 8 bit signed pc-relative displacement.
 ENUM
   BFD_RELOC_EPIPHANY_SIMM24
 ENUMDOC
-  Adapteva EPIPHANY - 24 bit signed pc-relative displacement
+  Adapteva EPIPHANY - 24 bit signed pc-relative displacement.
 ENUM
   BFD_RELOC_EPIPHANY_HIGH
 ENUMDOC
-  Adapteva EPIPHANY - 16 most-significant bits of absolute address
+  Adapteva EPIPHANY - 16 most-significant bits of absolute address.
 ENUM
   BFD_RELOC_EPIPHANY_LOW
 ENUMDOC
-  Adapteva EPIPHANY - 16 least-significant bits of absolute address
+  Adapteva EPIPHANY - 16 least-significant bits of absolute address.
 ENUM
   BFD_RELOC_EPIPHANY_SIMM11
 ENUMDOC
-  Adapteva EPIPHANY - 11 bit signed number - add/sub immediate
+  Adapteva EPIPHANY - 11 bit signed number - add/sub immediate.
 ENUM
   BFD_RELOC_EPIPHANY_IMM11
 ENUMDOC
-  Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st displacement)
+  Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st
+  displacement).
 ENUM
   BFD_RELOC_EPIPHANY_IMM8
 ENUMDOC
@@ -8081,11 +8105,254 @@ ENUM
 ENUMDOC
   S12Z relocations.
 
+ENUM
+  BFD_RELOC_LARCH_TLS_DTPMOD32
+ENUMX
+  BFD_RELOC_LARCH_TLS_DTPREL32
+ENUMX
+  BFD_RELOC_LARCH_TLS_DTPMOD64
+ENUMX
+  BFD_RELOC_LARCH_TLS_DTPREL64
+ENUMX
+  BFD_RELOC_LARCH_TLS_TPREL32
+ENUMX
+  BFD_RELOC_LARCH_TLS_TPREL64
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC32
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC64
+ENUMX
+  BFD_RELOC_LARCH_MARK_LA
+ENUMX
+  BFD_RELOC_LARCH_MARK_PCREL
+ENUMX
+  BFD_RELOC_LARCH_SOP_PUSH_PCREL
+ENUMX
+  BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE
+ENUMX
+  BFD_RELOC_LARCH_SOP_PUSH_DUP
+ENUMX
+  BFD_RELOC_LARCH_SOP_PUSH_GPREL
+ENUMX
+  BFD_RELOC_LARCH_SOP_PUSH_TLS_TPREL
+ENUMX
+  BFD_RELOC_LARCH_SOP_PUSH_TLS_GOT
+ENUMX
+  BFD_RELOC_LARCH_SOP_PUSH_TLS_GD
+ENUMX
+  BFD_RELOC_LARCH_SOP_PUSH_PLT_PCREL
+ENUMX
+  BFD_RELOC_LARCH_SOP_ASSERT
+ENUMX
+  BFD_RELOC_LARCH_SOP_NOT
+ENUMX
+  BFD_RELOC_LARCH_SOP_SUB
+ENUMX
+  BFD_RELOC_LARCH_SOP_SL
+ENUMX
+  BFD_RELOC_LARCH_SOP_SR
+ENUMX
+  BFD_RELOC_LARCH_SOP_ADD
+ENUMX
+  BFD_RELOC_LARCH_SOP_AND
+ENUMX
+  BFD_RELOC_LARCH_SOP_IF_ELSE
+ENUMX
+  BFD_RELOC_LARCH_SOP_POP_32_S_10_5
+ENUMX
+  BFD_RELOC_LARCH_SOP_POP_32_U_10_12
+ENUMX
+  BFD_RELOC_LARCH_SOP_POP_32_S_10_12
+ENUMX
+  BFD_RELOC_LARCH_SOP_POP_32_S_10_16
+ENUMX
+  BFD_RELOC_LARCH_SOP_POP_32_S_10_16_S2
+ENUMX
+  BFD_RELOC_LARCH_SOP_POP_32_S_5_20
+ENUMX
+  BFD_RELOC_LARCH_SOP_POP_32_S_0_5_10_16_S2
+ENUMX
+  BFD_RELOC_LARCH_SOP_POP_32_S_0_10_10_16_S2
+ENUMX
+  BFD_RELOC_LARCH_SOP_POP_32_U
+ENUMX
+  BFD_RELOC_LARCH_ADD8
+ENUMX
+  BFD_RELOC_LARCH_ADD16
+ENUMX
+  BFD_RELOC_LARCH_ADD24
+ENUMX
+  BFD_RELOC_LARCH_ADD32
+ENUMX
+  BFD_RELOC_LARCH_ADD64
+ENUMX
+  BFD_RELOC_LARCH_SUB8
+ENUMX
+  BFD_RELOC_LARCH_SUB16
+ENUMX
+  BFD_RELOC_LARCH_SUB24
+ENUMX
+  BFD_RELOC_LARCH_SUB32
+ENUMX
+  BFD_RELOC_LARCH_SUB64
+
+ENUMX
+  BFD_RELOC_LARCH_B16
+ENUMX
+  BFD_RELOC_LARCH_B21
+ENUMX
+  BFD_RELOC_LARCH_B26
+
+ENUMX
+  BFD_RELOC_LARCH_ABS_HI20
+ENUMX
+  BFD_RELOC_LARCH_ABS_LO12
+ENUMX
+  BFD_RELOC_LARCH_ABS64_LO20
+ENUMX
+  BFD_RELOC_LARCH_ABS64_HI12
+
+ENUMX
+  BFD_RELOC_LARCH_PCALA_HI20
+ENUMX
+  BFD_RELOC_LARCH_PCALA_LO12
+ENUMX
+  BFD_RELOC_LARCH_PCALA64_LO20
+ENUMX
+  BFD_RELOC_LARCH_PCALA64_HI12
+
+ENUMX
+  BFD_RELOC_LARCH_GOT_PC_HI20
+ENUMX
+  BFD_RELOC_LARCH_GOT_PC_LO12
+ENUMX
+  BFD_RELOC_LARCH_GOT64_PC_LO20
+ENUMX
+  BFD_RELOC_LARCH_GOT64_PC_HI12
+ENUMX
+  BFD_RELOC_LARCH_GOT_HI20
+ENUMX
+  BFD_RELOC_LARCH_GOT_LO12
+ENUMX
+  BFD_RELOC_LARCH_GOT64_LO20
+ENUMX
+  BFD_RELOC_LARCH_GOT64_HI12
+
+ENUMX
+  BFD_RELOC_LARCH_TLS_LE_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_LE_LO12
+ENUMX
+  BFD_RELOC_LARCH_TLS_LE64_LO20
+ENUMX
+  BFD_RELOC_LARCH_TLS_LE64_HI12
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE_PC_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE_PC_LO12
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE64_PC_LO20
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE64_PC_HI12
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE_LO12
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE64_LO20
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE64_HI12
+ENUMX
+  BFD_RELOC_LARCH_TLS_LD_PC_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_LD_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_GD_PC_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_GD_HI20
+
+ENUMX
+  BFD_RELOC_LARCH_32_PCREL
+
+ENUMX
+  BFD_RELOC_LARCH_RELAX
+
+ENUMX
+  BFD_RELOC_LARCH_DELETE
+
+ENUMX
+  BFD_RELOC_LARCH_ALIGN
+
+ENUMX
+  BFD_RELOC_LARCH_PCREL20_S2
+
+ENUMX
+  BFD_RELOC_LARCH_CFA
+
+ENUMX
+  BFD_RELOC_LARCH_ADD6
+ENUMX
+  BFD_RELOC_LARCH_SUB6
+
+ENUMX
+  BFD_RELOC_LARCH_ADD_ULEB128
+ENUMX
+  BFD_RELOC_LARCH_SUB_ULEB128
+
+ENUMX
+  BFD_RELOC_LARCH_64_PCREL
+
+ENUMX
+  BFD_RELOC_LARCH_CALL36
+
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_PC_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_PC_LO12
+
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC64_PC_LO20
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC64_PC_HI12
+
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_LO12
+
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC64_LO20
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC64_HI12
+
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_LD
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_CALL
+
+ENUMX
+  BFD_RELOC_LARCH_TLS_LE_HI20_R
+ENUMX
+  BFD_RELOC_LARCH_TLS_LE_ADD_R
+ENUMX
+  BFD_RELOC_LARCH_TLS_LE_LO12_R
+
+ENUMX
+  BFD_RELOC_LARCH_TLS_LD_PCREL20_S2
+ENUMX
+  BFD_RELOC_LARCH_TLS_GD_PCREL20_S2
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2
+
+ENUMDOC
+  LARCH relocations.
+
 ENDSENUM
   BFD_RELOC_UNUSED
+
 CODE_FRAGMENT
-.
 .typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
+.
 */
 
 /*
@@ -8103,7 +8370,6 @@ DESCRIPTION
 	Return a pointer to a howto structure which, when
 	invoked, will perform the relocation @var{code} on data from the
 	architecture noted.
-
 */
 
 reloc_howto_type *
@@ -8119,7 +8385,7 @@ bfd_reloc_name_lookup (bfd *abfd, const
 }
 
 static reloc_howto_type bfd_howto_32 =
-HOWTO (0, 00, 2, 32, FALSE, 0, complain_overflow_dont, 0, "VRT32", FALSE, 0xffffffff, 0xffffffff, TRUE);
+HOWTO (0, 00, 4, 32, false, 0, complain_overflow_dont, 0, "VRT32", false, 0xffffffff, 0xffffffff, true);
 
 /*
 INTERNAL_FUNCTION
@@ -8131,7 +8397,6 @@ SYNOPSIS
 
 DESCRIPTION
 	Provides a default relocation lookup routine for any architecture.
-
 */
 
 reloc_howto_type *
@@ -8170,29 +8435,29 @@ INTERNAL_FUNCTION
 	bfd_generic_relax_section
 
 SYNOPSIS
-	bfd_boolean bfd_generic_relax_section
+	bool bfd_generic_relax_section
 	  (bfd *abfd,
 	   asection *section,
 	   struct bfd_link_info *,
-	   bfd_boolean *);
+	   bool *);
 
 DESCRIPTION
 	Provides default handling for relaxing for back ends which
 	don't do relaxing.
 */
 
-bfd_boolean
+bool
 bfd_generic_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
 			   asection *section ATTRIBUTE_UNUSED,
 			   struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
-			   bfd_boolean *again)
+			   bool *again)
 {
   if (bfd_link_relocatable (link_info))
     (*link_info->callbacks->einfo)
       (_("%P%F: --relax and -r may not be used together\n"));
 
-  *again = FALSE;
-  return TRUE;
+  *again = false;
+  return true;
 }
 
 /*
@@ -8200,7 +8465,7 @@ INTERNAL_FUNCTION
 	bfd_generic_gc_sections
 
 SYNOPSIS
-	bfd_boolean bfd_generic_gc_sections
+	bool bfd_generic_gc_sections
 	  (bfd *, struct bfd_link_info *);
 
 DESCRIPTION
@@ -8208,11 +8473,11 @@ DESCRIPTION
 	don't do section gc -- i.e., does nothing.
 */
 
-bfd_boolean
+bool
 bfd_generic_gc_sections (bfd *abfd ATTRIBUTE_UNUSED,
 			 struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /*
@@ -8220,7 +8485,7 @@ INTERNAL_FUNCTION
 	bfd_generic_lookup_section_flags
 
 SYNOPSIS
-	bfd_boolean bfd_generic_lookup_section_flags
+	bool bfd_generic_lookup_section_flags
 	  (struct bfd_link_info *, struct flag_info *, asection *);
 
 DESCRIPTION
@@ -8229,7 +8494,7 @@ DESCRIPTION
 	Returns FALSE if the section should be omitted, otherwise TRUE.
 */
 
-bfd_boolean
+bool
 bfd_generic_lookup_section_flags (struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				  struct flag_info *flaginfo,
 				  asection *section ATTRIBUTE_UNUSED)
@@ -8237,9 +8502,9 @@ bfd_generic_lookup_section_flags (struct
   if (flaginfo != NULL)
     {
       _bfd_error_handler (_("INPUT_SECTION_FLAGS are not supported"));
-      return FALSE;
+      return false;
     }
-  return TRUE;
+  return true;
 }
 
 /*
@@ -8247,7 +8512,7 @@ INTERNAL_FUNCTION
 	bfd_generic_merge_sections
 
 SYNOPSIS
-	bfd_boolean bfd_generic_merge_sections
+	bool bfd_generic_merge_sections
 	  (bfd *, struct bfd_link_info *);
 
 DESCRIPTION
@@ -8255,11 +8520,11 @@ DESCRIPTION
 	which don't have SEC_MERGE support -- i.e., does nothing.
 */
 
-bfd_boolean
+bool
 bfd_generic_merge_sections (bfd *abfd ATTRIBUTE_UNUSED,
 			    struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 /*
@@ -8272,13 +8537,12 @@ SYNOPSIS
 	   struct bfd_link_info *link_info,
 	   struct bfd_link_order *link_order,
 	   bfd_byte *data,
-	   bfd_boolean relocatable,
+	   bool relocatable,
 	   asymbol **symbols);
 
 DESCRIPTION
 	Provides default handling of relocation effort for back ends
 	which can't be bothered to do it efficiently.
-
 */
 
 bfd_byte *
@@ -8286,7 +8550,7 @@ bfd_generic_get_relocated_section_conten
 					    struct bfd_link_info *link_info,
 					    struct bfd_link_order *link_order,
 					    bfd_byte *data,
-					    bfd_boolean relocatable,
+					    bool relocatable,
 					    asymbol **symbols)
 {
   bfd *input_bfd = link_order->u.indirect.section->owner;
@@ -8300,6 +8564,7 @@ bfd_generic_get_relocated_section_conten
     return NULL;
 
   /* Read in the section.  */
+  bfd_byte *orig_data = data;
   if (!bfd_get_full_section_contents (input_bfd, input_section, &data))
     return NULL;
 
@@ -8311,7 +8576,7 @@ bfd_generic_get_relocated_section_conten
 
   reloc_vector = (arelent **) bfd_malloc (reloc_size);
   if (reloc_vector == NULL)
-    return NULL;
+    goto error_return;
 
   reloc_count = bfd_canonicalize_reloc (input_bfd,
 					input_section,
@@ -8357,8 +8622,8 @@ bfd_generic_get_relocated_section_conten
 	    {
 	      bfd_vma off;
 	      static reloc_howto_type none_howto
-		= HOWTO (0, 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL,
-			 "unused", FALSE, 0, 0, FALSE);
+		= HOWTO (0, 0, 0, 0, false, 0, complain_overflow_dont, NULL,
+			 "unused", false, 0, 0, false);
 
 	      off = ((*parent)->address
 		     * bfd_octets_per_byte (input_bfd, input_section));
@@ -8393,7 +8658,7 @@ bfd_generic_get_relocated_section_conten
 		case bfd_reloc_undefined:
 		  (*link_info->callbacks->undefined_symbol)
 		    (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
-		     input_bfd, input_section, (*parent)->address, TRUE);
+		     input_bfd, input_section, (*parent)->address, true);
 		  break;
 		case bfd_reloc_dangerous:
 		  BFD_ASSERT (error_message != NULL);
@@ -8446,8 +8711,10 @@ bfd_generic_get_relocated_section_conten
   free (reloc_vector);
   return data;
 
-error_return:
+ error_return:
   free (reloc_vector);
+  if (orig_data == NULL)
+    free (data);
   return NULL;
 }
 
@@ -8474,6 +8741,10 @@ _bfd_generic_set_reloc (bfd *abfd ATTRIB
 {
   section->orelocation = relptr;
   section->reloc_count = count;
+  if (count != 0)
+    section->flags |= SEC_RELOC;
+  else
+    section->flags &= ~SEC_RELOC;
 }
 
 /*
@@ -8481,7 +8752,7 @@ INTERNAL_FUNCTION
 	_bfd_unrecognized_reloc
 
 SYNOPSIS
-	bfd_boolean _bfd_unrecognized_reloc
+	bool _bfd_unrecognized_reloc
 	  (bfd * abfd,
 	   sec_ptr section,
 	   unsigned int r_type);
@@ -8492,7 +8763,7 @@ DESCRIPTION
 	Returns FALSE so that it can be called from a return statement.
 */
 
-bfd_boolean
+bool
 _bfd_unrecognized_reloc (bfd * abfd, sec_ptr section, unsigned int r_type)
 {
    /* xgettext:c-format */
@@ -8504,7 +8775,7 @@ _bfd_unrecognized_reloc (bfd * abfd, sec
 		      BFD_VERSION_STRING);
 
   bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return false;
 }
 
 reloc_howto_type *
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/rs6000-core.c ./bfd/rs6000-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/rs6000-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/rs6000-core.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* IBM RS/6000 "XCOFF" back-end for BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Metin G. Ozisik, Mimi Phuong-Thao Vo, and John Gilmore.
    Archive support from Damon A. Permezel.
    Contributed by IBM Corporation and Cygnus Support.
@@ -277,28 +277,27 @@ typedef union
 /* Define prototypes for certain functions, to avoid a compiler warning
    saying that they are missing.  */
 
-const bfd_target * rs6000coff_core_p (bfd *abfd);
-bfd_boolean rs6000coff_core_file_matches_executable_p (bfd *core_bfd,
-						       bfd *exec_bfd);
+bfd_cleanup rs6000coff_core_p (bfd *abfd);
+bool rs6000coff_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd);
 char * rs6000coff_core_file_failing_command (bfd *abfd);
 int rs6000coff_core_file_failing_signal (bfd *abfd);
 
 /* Try to read into CORE the header from the core file associated with ABFD.
    Return success.  */
 
-static bfd_boolean
+static bool
 read_hdr (bfd *abfd, CoreHdr *core)
 {
   bfd_size_type size;
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
+    return false;
 
   /* Read the leading portion that old and new core dump structures have in
      common.  */
   size = CORE_COMMONSZ;
-  if (bfd_bread (core, size, abfd) != size)
-    return FALSE;
+  if (bfd_read (core, size, abfd) != size)
+    return false;
 
   /* Read the trailing portion of the structure.  */
   if (CORE_NEW (*core))
@@ -308,7 +307,7 @@ read_hdr (bfd *abfd, CoreHdr *core)
     size = sizeof (core->old);
 #endif
   size -= CORE_COMMONSZ;
-  return bfd_bread ((char *) core + CORE_COMMONSZ, size, abfd) == size;
+  return bfd_read ((char *) core + CORE_COMMONSZ, size, abfd) == size;
 }
 
 static asection *
@@ -332,7 +331,7 @@ make_bfd_asection (bfd *abfd, const char
 /* Decide if a given bfd represents a `core' file or not. There really is no
    magic number or anything like, in rs6000coff.  */
 
-const bfd_target *
+bfd_cleanup
 rs6000coff_core_p (bfd *abfd)
 {
   CoreHdr core;
@@ -343,7 +342,7 @@ rs6000coff_core_p (bfd *abfd)
   /* Values from new and old core structures.  */
   int c_flag;
   file_ptr c_stack, c_regoff, c_loader;
-  bfd_size_type c_size, c_regsize, c_lsize;
+  bfd_size_type c_size, c_regsize, c_lsize, c_extoff;
   bfd_vma c_stackend;
   void *c_regptr;
   int proc64;
@@ -371,6 +370,7 @@ rs6000coff_core_p (bfd *abfd)
       c_stackend = CNEW_STACKORG (core.new_dump) + c_size;
       c_lsize = CNEW_LSIZE (core.new_dump);
       c_loader = CNEW_LOADER (core.new_dump);
+      c_extoff = core.new_dump.c_extctx;
 #ifndef BFD64
       proc64 = CNEW_PROC64 (core.new_dump);
     }
@@ -518,6 +518,19 @@ rs6000coff_core_p (bfd *abfd)
 			  c_regsize, (bfd_vma) 0, c_regoff))
     goto fail;
 
+  if (c_extoff)
+    {
+      if (!make_bfd_asection (abfd, ".aix-vmx",
+			      SEC_HAS_CONTENTS,
+			      560, (bfd_vma) 0, c_extoff))
+	goto fail;
+
+      if (!make_bfd_asection (abfd, ".aix-vsx",
+			      SEC_HAS_CONTENTS,
+			      256, (bfd_vma) 0, c_extoff + 584))
+	goto fail;
+    }
+
   /* .ldinfo section.
      To actually find out how long this section is in this particular
      core dump would require going down the whole list of struct ld_info's.
@@ -608,7 +621,7 @@ rs6000coff_core_p (bfd *abfd)
       {
 	if (bfd_seek (abfd, c_loader, SEEK_SET) != 0)
 	  goto fail;
-	if (bfd_bread (&ldinfo, size, abfd) != size)
+	if (bfd_read (&ldinfo, size, abfd) != size)
 	  goto fail;
 
 	if (proc64)
@@ -657,7 +670,7 @@ rs6000coff_core_p (bfd *abfd)
 #else
 	    size = sizeof (vminfo.new_dump);
 #endif
-	    if (bfd_bread (&vminfo, size, abfd) != size)
+	    if (bfd_read (&vminfo, size, abfd) != size)
 	      goto fail;
 
 	    if (CORE_NEW (core))
@@ -686,7 +699,7 @@ rs6000coff_core_p (bfd *abfd)
   }
 #endif
 
-  return abfd->xvec;		/* This is garbage for now.  */
+  return _bfd_no_cleanup;
 
  fail:
   bfd_release (abfd, abfd->tdata.any);
@@ -697,7 +710,7 @@ rs6000coff_core_p (bfd *abfd)
 
 /* Return `TRUE' if given core is from the given executable.  */
 
-bfd_boolean
+bool
 rs6000coff_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
 {
   CoreHdr core;
@@ -705,11 +718,11 @@ rs6000coff_core_file_matches_executable_
   char *path, *s;
   size_t alloc;
   const char *str1, *str2;
-  bfd_boolean ret;
+  bool ret;
   file_ptr c_loader;
 
   if (!read_hdr (core_bfd, &core))
-    return FALSE;
+    return false;
 
   if (CORE_NEW (core))
     c_loader = CNEW_LOADER (core.new_dump);
@@ -724,20 +737,20 @@ rs6000coff_core_file_matches_executable_
     size = (int) ((LdInfo *) 0)->l32.ldinfo_filename;
 
   if (bfd_seek (core_bfd, c_loader + size, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   alloc = 100;
   path = bfd_malloc ((bfd_size_type) alloc);
   if (path == NULL)
-    return FALSE;
+    return false;
   s = path;
 
   while (1)
     {
-      if (bfd_bread (s, (bfd_size_type) 1, core_bfd) != 1)
+      if (bfd_read (s, 1, core_bfd) != 1)
 	{
 	  free (path);
-	  return FALSE;
+	  return false;
 	}
       if (*s == '\0')
 	break;
@@ -751,7 +764,7 @@ rs6000coff_core_file_matches_executable_
 	  if (n == NULL)
 	    {
 	      free (path);
-	      return FALSE;
+	      return false;
 	    }
 	  s = n + (path - s);
 	  path = n;
@@ -759,16 +772,16 @@ rs6000coff_core_file_matches_executable_
     }
 
   str1 = strrchr (path, '/');
-  str2 = strrchr (exec_bfd->filename, '/');
+  str2 = strrchr (bfd_get_filename (exec_bfd), '/');
 
   /* step over character '/' */
   str1 = str1 != NULL ? str1 + 1 : path;
-  str2 = str2 != NULL ? str2 + 1 : exec_bfd->filename;
+  str2 = str2 != NULL ? str2 + 1 : bfd_get_filename (exec_bfd);
 
   if (strcmp (str1, str2) == 0)
-    ret = TRUE;
+    ret = true;
   else
-    ret = FALSE;
+    ret = false;
 
   free (path);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/sco5-core.c ./bfd/sco5-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/sco5-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/sco5-core.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,396 +0,0 @@
-/* BFD back end for SCO5 core files (U-area and raw sections)
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
-   Written by Jouke Numan <jnuman@hiscom.nl>
-
-   This file is part of BFD, the Binary File Descriptor library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "libbfd.h"
-#include "libaout.h"		/* BFD a.out internal data structures */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/dir.h>
-#include <signal.h>
-
-#include <sys/user.h>		/* After a.out.h  */
-#ifdef SCO5_CORE
-#include <sys/paccess.h>
-#include <sys/region.h>
-#endif
-
-struct sco5_core_struct
-{
-  struct user u;
-};
-
-/* forward declarations */
-
-#define sco5_core_file_matches_executable_p generic_core_file_matches_executable_p
-#define sco5_core_file_pid _bfd_nocore_core_file_pid
-
-static asection *
-make_bfd_asection (bfd *abfd,
-		   const char *name,
-		   flagword flags,
-		   bfd_size_type size,
-		   bfd_vma vma,
-		   file_ptr filepos)
-{
-  asection *asect;
-
-  asect = bfd_make_section_anyway_with_flags (abfd, name, flags);
-  if (!asect)
-    return NULL;
-  asect->size = size;
-  asect->vma = vma;
-  asect->filepos = filepos;
-  asect->alignment_power = 2;
-
-  return asect;
-}
-
-static struct user *
-read_uarea (bfd *abfd, int filepos)
-{
-  struct sco5_core_struct *rawptr;
-  bfd_size_type amt = sizeof (struct sco5_core_struct);
-
-  rawptr = (struct sco5_core_struct *) bfd_zmalloc (amt);
-  if (rawptr == NULL)
-    return NULL;
-
-  abfd->tdata.sco5_core_data = rawptr;
-
-  if (bfd_seek (abfd, (file_ptr) filepos, SEEK_SET) != 0
-      || bfd_bread ((void *) &rawptr->u, (bfd_size_type) sizeof rawptr->u,
-		   abfd) != sizeof rawptr->u)
-    {
-      bfd_set_error (bfd_error_wrong_format);
-      return NULL;
-    }
-
-  /* Sanity check perhaps??? */
-  if (rawptr->u.u_dsize > 0x1000000)    /* Remember, it's in pages...  */
-    {
-      bfd_set_error (bfd_error_wrong_format);
-      return NULL;
-    }
-  if (rawptr->u.u_ssize > 0x1000000)
-    {
-      bfd_set_error (bfd_error_wrong_format);
-      return NULL;
-    }
-  return &rawptr->u;
-}
-
-const bfd_target *
-sco5_core_file_p (bfd *abfd)
-{
-  int coffset_siz, val, nsecs, cheadoffs;
-  int coresize;
-  struct user *u;
-  struct coreoffsets coffsets;
-  struct coresecthead chead;
-  char *secname;
-  flagword flags;
-
-  /* Read coreoffsets region at end of core (see core(FP)).  */
-
-  {
-    struct stat statbuf;
-
-    if (bfd_stat (abfd, &statbuf) < 0)
-      return NULL;
-
-    coresize = statbuf.st_size;
-  }
-  /* Last long in core is sizeof struct coreoffsets, read it */
-  if ((bfd_seek (abfd, (file_ptr) (coresize - sizeof coffset_siz),
-		 SEEK_SET) != 0)
-      || bfd_bread ((void *) &coffset_siz, (bfd_size_type) sizeof coffset_siz,
-		   abfd) != sizeof coffset_siz)
-    {
-      bfd_set_error (bfd_error_wrong_format);
-      return NULL;
-    }
-
-  /* Use it to seek start of coreoffsets region, read it and determine
-     validity */
-  if ((bfd_seek (abfd, (file_ptr) (coresize - coffset_siz), SEEK_SET) != 0)
-      || (bfd_bread ((void *) &coffsets, (bfd_size_type) sizeof coffsets, abfd)
-	  != sizeof coffsets)
-      || ((coffsets.u_info != 1) && (coffsets.u_info != C_VERSION)))
-    {
-      bfd_set_error (bfd_error_wrong_format);
-      return NULL;
-    }
-
-  if (coffsets.u_info == 1)
-    {
-      /* Old version, no section heads, read info from user struct */
-
-      u = read_uarea (abfd, coffsets.u_user);
-      if (! u)
-	goto fail;
-
-      if (!make_bfd_asection (abfd, ".reg", SEC_HAS_CONTENTS,
-			      (bfd_size_type) coffsets.u_usize,
-			      0 - (bfd_vma) u->u_ar0,
-			      (file_ptr) coffsets.u_user))
-	goto fail;
-
-      if (!make_bfd_asection (abfd, ".data",
-			      SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS,
-			      ((bfd_size_type) u->u_exdata.ux_dsize
-			       + u->u_exdata.ux_bsize),
-			      (bfd_vma) u->u_exdata.ux_datorg,
-			      (file_ptr) coffsets.u_data))
-	goto fail;
-
-      if (!make_bfd_asection (abfd, ".stack",
-			      SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS,
-			      (bfd_size_type) u->u_ssize * NBPC,
-			      (bfd_vma) u->u_sub,
-			      (file_ptr) coffsets.u_stack))
-	goto fail;
-
-      return abfd->xvec;		/* Done for version 1 */
-    }
-
-  /* Immediately before coreoffsets region is a long with offset in core
-     to first coresecthead (CORES_OFFSETS), the long before this is the
-     number of section heads in the list. Read both longs and read the
-     coresecthead and check its validity */
-
-  if ((bfd_seek (abfd,
-		 (file_ptr) (coresize - coffset_siz - 2 * sizeof coffset_siz),
-		 SEEK_SET) != 0)
-      || (bfd_bread ((void *) &nsecs, (bfd_size_type) sizeof nsecs, abfd)
-	  != sizeof nsecs)
-      || (bfd_bread ((void *) &cheadoffs, (bfd_size_type) sizeof cheadoffs,
-		    abfd) != sizeof cheadoffs)
-      || (bfd_seek (abfd, (file_ptr) cheadoffs, SEEK_SET) != 0)
-      || (bfd_bread ((void *) &chead, (bfd_size_type) sizeof chead, abfd)
-	  != sizeof chead)
-      || (chead.cs_stype != CORES_OFFSETS)
-      || (chead.cs_x.csx_magic != COREMAGIC_NUMBER))
-    {
-      bfd_set_error (bfd_error_wrong_format);
-      goto fail;
-    }
-
-  /* OK, we believe you.  You're a core file (sure, sure).  */
-
-  /* Now loop over all regions and map them */
-  nsecs--;				/* We've seen CORES_OFFSETS already */
-  for (; nsecs; nsecs--)
-    {
-      if ((bfd_seek (abfd, (file_ptr) chead.cs_hseek, SEEK_SET) != 0)
-	  || (bfd_bread ((void *) &chead, (bfd_size_type) sizeof chead, abfd)
-	      != sizeof chead))
-	{
-	  bfd_set_error (bfd_error_wrong_format);
-	  goto fail;
-	}
-
-      switch (chead.cs_stype)
-	{
-	case CORES_MAGIC:			/* Core header, check magic */
-	  if (chead.cs_x.csx_magic != COREMAGIC_NUMBER)
-	    {
-	      bfd_set_error (bfd_error_wrong_format);
-	      goto fail;
-	    }
-	  secname = NULL;
-	  nsecs++;				/* MAGIC not in section cnt!*/
-	  break;
-	case CORES_UAREA:			/* U-area, read in tdata */
-	  u = read_uarea (abfd, chead.cs_sseek);
-	  if (! u)
-	    goto fail;
-
-	  /* This is tricky.  As the "register section", we give them
-	     the entire upage and stack.  u.u_ar0 points to where
-	     "register 0" is stored.  There are two tricks with this,
-	     though.  One is that the rest of the registers might be
-	     at positive or negative (or both) displacements from
-	     *u_ar0.  The other is that u_ar0 is sometimes an absolute
-	     address in kernel memory, and on other systems it is an
-	     offset from the beginning of the `struct user'.
-
-	     As a practical matter, we don't know where the registers
-	     actually are, so we have to pass the whole area to GDB.
-	     We encode the value of u_ar0 by setting the .regs section
-	     up so that its virtual memory address 0 is at the place
-	     pointed to by u_ar0 (by setting the vma of the start of
-	     the section to -u_ar0).  GDB uses this info to locate the
-	     regs, using minor trickery to get around the
-	     offset-or-absolute-addr problem.  */
-
-	  chead.cs_vaddr = 0 - (bfd_vma) u->u_ar0;
-
-	  secname = ".reg";
-	  flags = SEC_HAS_CONTENTS;
-
-	  break;
-	case CORES_PREGION:			/* A program region, map it */
-	  switch (chead.cs_x.csx_preg.csxp_rtyp)
-	    {
-	    case PT_DATA:
-	      secname = ".data";	/* Data region.		 */
-	      break;
-	    case PT_STACK:
-	      secname = ".stack";	/* Stack region.	 */
-	      break;
-	    case PT_SHMEM:
-	      secname = ".shmem";	/* Shared memory	 */
-	      break;
-	    case PT_LIBDAT:
-	      secname = ".libdat";	/* Shared library data	 */
-	      break;
-	    case PT_V86:
-	      secname = ".virt86";	/* Virtual 8086 mode	 */
-	      break;
-	    case PT_SHFIL:
-	      secname = ".mmfile";	/* Memory mapped file	 */
-	      break;
-	    case PT_XDATA0:
-	      secname = ".Xdat0";	/* XENIX data region, virtual 0 */
-	      break;
-	    default:
-	      secname = "";
-	    }
-	  flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
-	  break;
-	case CORES_PROC:			/* struct proc */
-	case CORES_ITIMER:			/* interval timers */
-	case CORES_SCOUTSNAME:			/* struct scoutsname */
-	  secname = NULL;	/* Ignore these */
-	  break;
-	default:
-	  _bfd_error_handler ("Unhandled SCO core file section type %d\n",
-			      chead.cs_stype);
-	  continue;
-	}
-
-      if (secname
-	  && !make_bfd_asection (abfd, secname, flags,
-				 (bfd_size_type) chead.cs_vsize,
-				 (bfd_vma) chead.cs_vaddr,
-				 (file_ptr) chead.cs_sseek))
-	goto fail;
-
-    }
-
-  return abfd->xvec;
-
- fail:
-  if (abfd->tdata.any)
-    {
-      bfd_release (abfd, abfd->tdata.any);
-      abfd->tdata.any = NULL;
-    }
-  bfd_section_list_clear (abfd);
-  return NULL;
-}
-
-char *
-sco5_core_file_failing_command (bfd *abfd)
-{
-  char *com = abfd->tdata.sco5_core_data->u.u_comm;
-  if (*com)
-    return com;
-  else
-    return NULL;
-}
-
-int
-sco5_core_file_failing_signal (bfd *ignore_abfd)
-{
-  return ((ignore_abfd->tdata.sco5_core_data->u.u_sysabort != 0)
-	  ? ignore_abfd->tdata.sco5_core_data->u.u_sysabort
-	  : -1);
-}
-
-/* If somebody calls any byte-swapping routines, shoot them.  */
-static void
-swap_abort (void)
-{
-  abort (); /* This way doesn't require any declaration for ANSI to fuck up */
-}
-
-#define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
-#define	NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
-#define	NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
-#define	NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
-#define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
-#define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
-
-const bfd_target core_sco5_vec =
-  {
-    "sco5-core",
-    bfd_target_unknown_flavour,
-    BFD_ENDIAN_LITTLE,	       /* target byte order */
-    BFD_ENDIAN_LITTLE,	       /* target headers byte order */
-    (HAS_RELOC | EXEC_P |	/* object flags */
-     HAS_LINENO | HAS_DEBUG |
-     HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
-    (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
-    0,				/* symbol prefix */
-    ' ',			/* ar_pad_char */
-    16,				/* ar_max_namelen */
-    0,				/* match priority.  */
-    NO_GET64, NO_GETS64, NO_PUT64,	/* 64 bit data */
-    NO_GET, NO_GETS, NO_PUT,		/* 32 bit data */
-    NO_GET, NO_GETS, NO_PUT,		/* 16 bit data */
-    NO_GET64, NO_GETS64, NO_PUT64,	/* 64 bit hdrs */
-    NO_GET, NO_GETS, NO_PUT,		/* 32 bit hdrs */
-    NO_GET, NO_GETS, NO_PUT,		/* 16 bit hdrs */
-
-    {				/* bfd_check_format */
-      _bfd_dummy_target,		/* unknown format */
-      _bfd_dummy_target,		/* object file */
-      _bfd_dummy_target,		/* archive */
-      sco5_core_file_p			/* a core file */
-    },
-    {				/* bfd_set_format */
-      _bfd_bool_bfd_false_error, bfd_false,
-      _bfd_bool_bfd_false_error, bfd_false
-    },
-    {				/* bfd_write_contents */
-      _bfd_bool_bfd_false_error, bfd_false,
-      _bfd_bool_bfd_false_error, bfd_false
-    },
-
-    BFD_JUMP_TABLE_GENERIC (_bfd_generic),
-    BFD_JUMP_TABLE_COPY (_bfd_generic),
-    BFD_JUMP_TABLE_CORE (sco5),
-    BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
-    BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols),
-    BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
-    BFD_JUMP_TABLE_WRITE (_bfd_generic),
-    BFD_JUMP_TABLE_LINK (_bfd_nolink),
-    BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
-
-    NULL,
-
-    NULL			/* backend_data */
-  };
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/section.c ./bfd/section.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/section.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/section.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Object file "section" support for the BFD library.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -137,32 +137,49 @@ SUBSECTION
 /*
 DOCDD
 INODE
-typedef asection, section prototypes, Section Output, Sections
+	typedef asection, section prototypes, Section Output, Sections
 SUBSECTION
 	typedef asection
 
 	Here is the section structure:
 
-CODE_FRAGMENT
+EXTERNAL
+.{* Linenumber stuff.  *}
+.typedef struct lineno_cache_entry
+.{
+.  unsigned int line_number;	{* Linenumber from start of function.  *}
+.  union
+.  {
+.    struct bfd_symbol *sym;	{* Function name.  *}
+.    bfd_vma offset;		{* Offset into section.  *}
+.  } u;
+.}
+.alent;
 .
+
+CODE_FRAGMENT
 .typedef struct bfd_section
 .{
 .  {* The name of the section; the name isn't a copy, the pointer is
 .     the same as that passed to bfd_make_section.  *}
 .  const char *name;
 .
-.  {* A unique sequence number.  *}
-.  unsigned int id;
-.
-.  {* Which section in the bfd; 0..n-1 as sections are created in a bfd.  *}
-.  unsigned int index;
-.
 .  {* The next section in the list belonging to the BFD, or NULL.  *}
 .  struct bfd_section *next;
 .
 .  {* The previous section in the list belonging to the BFD, or NULL.  *}
 .  struct bfd_section *prev;
 .
+.  {* A unique sequence number.  *}
+.  unsigned int id;
+.
+.  {* A unique section number which can be used by assembler to
+.     distinguish different sections with the same section name.  *}
+.  unsigned int section_id;
+.
+.  {* Which section in the bfd; 0..n-1 as sections are created in a bfd.  *}
+.  unsigned int index;
+.
 .  {* The field flags contains attributes of the section. Some
 .     flags are read in from the object file, and some are
 .     synthesized from other information.  *}
@@ -287,6 +304,10 @@ CODE_FRAGMENT
 .     else up the line will take care of it later.  *}
 .#define SEC_LINKER_CREATED           0x100000
 .
+.  {* This section contains a section ID to distinguish different
+.     sections with the same section name.  *}
+.#define SEC_ASSEMBLER_SECTION_ID     0x100000
+.
 .  {* This section should not be subject to garbage collection.
 .     Also set to inform the linker that this section should not be
 .     listed in the link map as discarded.  *}
@@ -328,9 +349,8 @@ CODE_FRAGMENT
 .     executables or shared objects. This is for COFF only.  *}
 .#define SEC_COFF_SHARED             0x8000000
 .
-.  {* This section should be compressed.  This is for ELF linker
-.     internal use only.  *}
-.#define SEC_ELF_COMPRESS            0x8000000
+.  {* Indicate that section has the purecode flag set.  *}
+.#define SEC_ELF_PURECODE            0x8000000
 .
 .  {* When a section with this flag is being linked, then if the size of
 .     the input section is less than a page, it should not cross a page
@@ -339,9 +359,8 @@ CODE_FRAGMENT
 .     TMS320C54X only.  *}
 .#define SEC_TIC54X_BLOCK           0x10000000
 .
-.  {* This section should be renamed.  This is for ELF linker
-.     internal use only.  *}
-.#define SEC_ELF_RENAME             0x10000000
+.  {* This section has the SHF_X86_64_LARGE flag.  This is ELF x86-64 only.  *}
+.#define SEC_ELF_LARGE              0x10000000
 .
 .  {* Conditionally link this section; do not link if there are no
 .     references found to any symbol in the section.  This is for TI
@@ -360,9 +379,6 @@ CODE_FRAGMENT
 .     when memory read flag isn't set. *}
 .#define SEC_COFF_NOREAD            0x40000000
 .
-.  {* Indicate that section has the purecode flag set.  *}
-.#define SEC_ELF_PURECODE           0x80000000
-.
 .  {*  End of section flags.  *}
 .
 .  {* Some internal packed boolean fields.  *}
@@ -384,7 +400,8 @@ CODE_FRAGMENT
 .  unsigned int compress_status : 2;
 .#define COMPRESS_SECTION_NONE    0
 .#define COMPRESS_SECTION_DONE    1
-.#define DECOMPRESS_SECTION_SIZED 2
+.#define DECOMPRESS_SECTION_ZLIB  2
+.#define DECOMPRESS_SECTION_ZSTD  3
 .
 .  {* The following flags are used by the ELF linker. *}
 .
@@ -400,6 +417,7 @@ CODE_FRAGMENT
 .#define SEC_INFO_TYPE_JUST_SYMS 4
 .#define SEC_INFO_TYPE_TARGET    5
 .#define SEC_INFO_TYPE_EH_FRAME_ENTRY 6
+.#define SEC_INFO_TYPE_SFRAME  7
 .
 .  {* Nonzero if this section uses RELA relocations, rather than REL.  *}
 .  unsigned int use_rela_p:1;
@@ -447,13 +465,6 @@ CODE_FRAGMENT
 .  {* The compressed size of the section in octets.  *}
 .  bfd_size_type compressed_size;
 .
-.  {* Relaxation table. *}
-.  struct relax_table *relax;
-.
-.  {* Count of used relaxation table entries. *}
-.  int relax_count;
-.
-.
 .  {* If this section is going to be output, then this value is the
 .     offset in *bytes* into the output section of the first byte in the
 .     input section (byte ==> smallest addressable unit on the
@@ -466,10 +477,6 @@ CODE_FRAGMENT
 .  {* The output section through which to map on output.  *}
 .  struct bfd_section *output_section;
 .
-.  {* The alignment requirement of the section, as an exponent of 2 -
-.     e.g., 3 aligns to 2^3 (or 8).  *}
-.  unsigned int alignment_power;
-.
 .  {* If an input section, a pointer to a vector of relocation
 .     records for the data in this section.  *}
 .  struct reloc_cache_entry *relocation;
@@ -481,6 +488,10 @@ CODE_FRAGMENT
 .  {* The number of relocation records in one of the above.  *}
 .  unsigned reloc_count;
 .
+.  {* The alignment requirement of the section, as an exponent of 2 -
+.     e.g., 3 aligns to 2^3 (or 8).  *}
+.  unsigned int alignment_power;
+.
 .  {* Information below is back end specific - and not always used
 .     or updated.  *}
 .
@@ -498,7 +509,7 @@ CODE_FRAGMENT
 .
 .  {* If the SEC_IN_MEMORY flag is set, this points to the actual
 .     contents.  *}
-.  unsigned char *contents;
+.  bfd_byte *contents;
 .
 .  {* Attached line number information.  *}
 .  alent *lineno;
@@ -536,24 +547,26 @@ CODE_FRAGMENT
 .  {* Early in the link process, map_head and map_tail are used to build
 .     a list of input sections attached to an output section.  Later,
 .     output sections use these fields for a list of bfd_link_order
-.     structs.  *}
+.     structs.  The linked_to_symbol_name field is for ELF assembler
+.     internal use.  *}
 .  union {
 .    struct bfd_link_order *link_order;
 .    struct bfd_section *s;
+.    const char *linked_to_symbol_name;
 .  } map_head, map_tail;
-.} asection;
 .
-.{* Relax table contains information about instructions which can
-.   be removed by relaxation -- replacing a long address with a
-.   short address.  *}
-.struct relax_table {
-.  {* Address where bytes may be deleted. *}
-.  bfd_vma addr;
-.
-.  {* Number of bytes to be deleted.  *}
-.  int size;
-.};
+.  {* Points to the output section this section is already assigned to,
+.     if any.  This is used when support for non-contiguous memory
+.     regions is enabled.  *}
+.  struct bfd_section *already_assigned;
+.
+.  {* Explicitly specified section type, if non-zero.  *}
+.  unsigned int type;
+.
+.} asection;
 .
+
+EXTERNAL
 .static inline const char *
 .bfd_section_name (const asection *sec)
 .{
@@ -595,7 +608,7 @@ CODE_FRAGMENT
 .{
 .  return sec->userdata;
 .}
-.static inline bfd_boolean
+.static inline bool
 .bfd_is_com_section (const asection *sec)
 .{
 .  return (sec->flags & SEC_IS_COMMON) != 0;
@@ -605,33 +618,35 @@ CODE_FRAGMENT
 .   because not all callers use the return value.  A macro implementation
 .   would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
 .   compilers will complain about comma expressions that have no effect.  *}
-.static inline bfd_boolean
+.static inline bool
 .bfd_set_section_userdata (asection *sec, void *val)
 .{
 .  sec->userdata = val;
-.  return TRUE;
+.  return true;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_set_section_vma (asection *sec, bfd_vma val)
 .{
 .  sec->vma = sec->lma = val;
-.  sec->user_set_vma = TRUE;
-.  return TRUE;
+.  sec->user_set_vma = true;
+.  return true;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_set_section_lma (asection *sec, bfd_vma val)
 .{
 .  sec->lma = val;
-.  return TRUE;
+.  return true;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_set_section_alignment (asection *sec, unsigned int val)
 .{
+.  if (val >= sizeof (bfd_vma) * 8 - 1)
+.    return false;
 .  sec->alignment_power = val;
-.  return TRUE;
+.  return true;
 .}
 .
 .{* These sections are global, and are managed by BFD.  The application
@@ -653,32 +668,34 @@ CODE_FRAGMENT
 .{* Pointer to the indirect section.  *}
 .#define bfd_ind_section_ptr (&_bfd_std_section[3])
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_is_und_section (const asection *sec)
 .{
 .  return sec == bfd_und_section_ptr;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_is_abs_section (const asection *sec)
 .{
 .  return sec == bfd_abs_section_ptr;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_is_ind_section (const asection *sec)
 .{
 .  return sec == bfd_ind_section_ptr;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_is_const_section (const asection *sec)
 .{
-.  return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr;
+.  return (sec >= _bfd_std_section
+.          && sec < _bfd_std_section + (sizeof (_bfd_std_section)
+.                                       / sizeof (_bfd_std_section[0])));
 .}
 .
 .{* Return TRUE if input section SEC has been discarded.  *}
-.static inline bfd_boolean
+.static inline bool
 .discarded_section (const asection *sec)
 .{
 .  return (!bfd_is_abs_section (sec)
@@ -688,41 +705,42 @@ CODE_FRAGMENT
 .}
 .
 .#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS)			\
-.  {* name, id,  index, next, prev, flags, user_set_vma,            *}	\
-.  {  NAME, IDX, 0,     NULL, NULL, FLAGS, 0,				\
+.  {* name, next, prev, id,  section_id, index, flags, user_set_vma, *}	\
+.  {  NAME, NULL, NULL, IDX, 0,          0,     FLAGS, 0,		\
 .									\
-.  {* linker_mark, linker_has_input, gc_mark, decompress_status,    *}	\
+.  {* linker_mark, linker_has_input, gc_mark, decompress_status,     *}	\
 .     0,           0,                1,       0,			\
 .									\
-.  {* segment_mark, sec_info_type, use_rela_p,                      *}	\
+.  {* segment_mark, sec_info_type, use_rela_p,                       *}	\
 .     0,            0,             0,					\
 .									\
-.  {* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   *}	\
+.  {* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,    *}	\
 .     0,        0,        0,        0,        0,        0,		\
 .									\
-.  {* vma, lma, size, rawsize, compressed_size, relax, relax_count, *}	\
-.     0,   0,   0,    0,       0,               0,     0,		\
+.  {* vma, lma, size, rawsize, compressed_size,                      *}	\
+.     0,   0,   0,    0,       0,					\
 .									\
-.  {* output_offset, output_section, alignment_power,               *}	\
-.     0,             &SEC,           0,					\
+.  {* output_offset, output_section, relocation, orelocation,        *}	\
+.     0,             &SEC,           NULL,       NULL,			\
 .									\
-.  {* relocation, orelocation, reloc_count, filepos, rel_filepos,   *}	\
-.     NULL,       NULL,        0,           0,       0,			\
+.  {* reloc_count, alignment_power, filepos, rel_filepos,            *}	\
+.     0,           0,               0,       0,				\
 .									\
-.  {* line_filepos, userdata, contents, lineno, lineno_count,       *}	\
+.  {* line_filepos, userdata, contents, lineno, lineno_count,        *}	\
 .     0,            NULL,     NULL,     NULL,   0,			\
 .									\
-.  {* entsize, kept_section, moving_line_filepos,		     *}	\
-.     0,       NULL,	      0,					\
+.  {* entsize, kept_section, moving_line_filepos,                    *}	\
+.     0,       NULL,         0,						\
 .									\
-.  {* target_index, used_by_bfd, constructor_chain, owner,          *}	\
+.  {* target_index, used_by_bfd, constructor_chain, owner,           *}	\
 .     0,            NULL,        NULL,              NULL,		\
 .									\
-.  {* symbol,                    symbol_ptr_ptr,                    *}	\
+.  {* symbol,                    symbol_ptr_ptr,                     *}	\
 .     (struct bfd_symbol *) SYM, &SEC.symbol,				\
 .									\
-.  {* map_head, map_tail                                            *}	\
-.     { NULL }, { NULL }						\
+.  {* map_head, map_tail, already_assigned, type                     *}	\
+.     { NULL }, { NULL }, NULL,             0				\
+.									\
 .    }
 .
 .{* We use a macro to initialize the static asymbol structures because
@@ -795,12 +813,12 @@ bfd_section_hash_newfunc (struct bfd_has
    is useful for things like relocs which are relative to the base
    of a section.  */
 
-bfd_boolean
+bool
 _bfd_generic_new_section_hook (bfd *abfd, asection *newsect)
 {
   newsect->symbol = bfd_make_empty_symbol (abfd);
   if (newsect->symbol == NULL)
-    return FALSE;
+    return false;
 
   newsect->symbol->name = newsect->name;
   newsect->symbol->value = 0;
@@ -808,7 +826,7 @@ _bfd_generic_new_section_hook (bfd *abfd
   newsect->symbol->flags = BSF_SECTION_SYM;
 
   newsect->symbol_ptr_ptr = &newsect->symbol;
-  return TRUE;
+  return true;
 }
 
 unsigned int _bfd_section_id = 0x10;  /* id 0 to 3 used by STD_SECTION.  */
@@ -881,7 +899,10 @@ bfd_get_section_by_name (bfd *abfd, cons
 {
   struct section_hash_entry *sh;
 
-  sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE);
+  if (name == NULL)
+    return NULL;
+
+  sh = section_hash_lookup (&abfd->section_htab, name, false, false);
   if (sh != NULL)
     return &sh->section;
 
@@ -965,7 +986,7 @@ SYNOPSIS
 	asection *bfd_get_section_by_name_if
 	  (bfd *abfd,
 	   const char *name,
-	   bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
+	   bool (*func) (bfd *abfd, asection *sect, void *obj),
 	   void *obj);
 
 DESCRIPTION
@@ -983,15 +1004,16 @@ DESCRIPTION
 
 asection *
 bfd_get_section_by_name_if (bfd *abfd, const char *name,
-			    bfd_boolean (*operation) (bfd *,
-						      asection *,
-						      void *),
+			    bool (*operation) (bfd *, asection *, void *),
 			    void *user_storage)
 {
   struct section_hash_entry *sh;
   unsigned long hash;
 
-  sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE);
+  if (name == NULL)
+    return NULL;
+
+  sh = section_hash_lookup (&abfd->section_htab, name, false, false);
   if (sh == NULL)
     return NULL;
 
@@ -1044,7 +1066,7 @@ bfd_get_unique_section_name (bfd *abfd,
 	abort ();
       sprintf (sname + len, ".%d", num++);
     }
-  while (section_hash_lookup (&abfd->section_htab, sname, FALSE, FALSE));
+  while (section_hash_lookup (&abfd->section_htab, sname, false, false));
 
   if (count != NULL)
     *count = num;
@@ -1099,7 +1121,7 @@ bfd_make_section_old_way (bfd *abfd, con
     {
       struct section_hash_entry *sh;
 
-      sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
+      sh = section_hash_lookup (&abfd->section_htab, name, true, false);
       if (sh == NULL)
 	return NULL;
 
@@ -1154,7 +1176,7 @@ bfd_make_section_anyway_with_flags (bfd
       return NULL;
     }
 
-  sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
+  sh = section_hash_lookup (&abfd->section_htab, name, true, false);
   if (sh == NULL)
     return NULL;
 
@@ -1239,7 +1261,7 @@ bfd_make_section_with_flags (bfd *abfd,
       || strcmp (name, BFD_IND_SECTION_NAME) == 0)
     return NULL;
 
-  sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
+  sh = section_hash_lookup (&abfd->section_htab, name, true, false);
   if (sh == NULL)
     return NULL;
 
@@ -1280,7 +1302,7 @@ FUNCTION
 	bfd_set_section_flags
 
 SYNOPSIS
-	bfd_boolean bfd_set_section_flags (asection *sec, flagword flags);
+	bool bfd_set_section_flags (asection *sec, flagword flags);
 
 DESCRIPTION
 	Set the attributes of the section @var{sec} to the value @var{flags}.
@@ -1294,11 +1316,11 @@ DESCRIPTION
 
 */
 
-bfd_boolean
+bool
 bfd_set_section_flags (asection *section, flagword flags)
 {
   section->flags = flags;
-  return TRUE;
+  return true;
 }
 
 /*
@@ -1372,7 +1394,7 @@ FUNCTION
 SYNOPSIS
 	asection *bfd_sections_find_if
 	  (bfd *abfd,
-	   bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
+	   bool (*operation) (bfd *abfd, asection *sect, void *obj),
 	   void *obj);
 
 DESCRIPTION
@@ -1388,7 +1410,7 @@ DESCRIPTION
 
 asection *
 bfd_sections_find_if (bfd *abfd,
-		      bfd_boolean (*operation) (bfd *, asection *, void *),
+		      bool (*operation) (bfd *, asection *, void *),
 		      void *user_storage)
 {
   asection *sect;
@@ -1405,7 +1427,7 @@ FUNCTION
 	bfd_set_section_size
 
 SYNOPSIS
-	bfd_boolean bfd_set_section_size (asection *sec, bfd_size_type val);
+	bool bfd_set_section_size (asection *sec, bfd_size_type val);
 
 DESCRIPTION
 	Set @var{sec} to the size @var{val}. If the operation is
@@ -1417,7 +1439,7 @@ DESCRIPTION
 
 */
 
-bfd_boolean
+bool
 bfd_set_section_size (asection *sec, bfd_size_type val)
 {
   /* Once you've started writing to any section you cannot create or change
@@ -1426,11 +1448,11 @@ bfd_set_section_size (asection *sec, bfd
   if (sec->owner == NULL || sec->owner->output_has_begun)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   sec->size = val;
-  return TRUE;
+  return true;
 }
 
 /*
@@ -1438,7 +1460,7 @@ FUNCTION
 	bfd_set_section_contents
 
 SYNOPSIS
-	bfd_boolean bfd_set_section_contents
+	bool bfd_set_section_contents
 	  (bfd *abfd, asection *section, const void *data,
 	   file_ptr offset, bfd_size_type count);
 
@@ -1464,7 +1486,7 @@ DESCRIPTION
 
 */
 
-bfd_boolean
+bool
 bfd_set_section_contents (bfd *abfd,
 			  sec_ptr section,
 			  const void *location,
@@ -1476,23 +1498,22 @@ bfd_set_section_contents (bfd *abfd,
   if (!(bfd_section_flags (section) & SEC_HAS_CONTENTS))
     {
       bfd_set_error (bfd_error_no_contents);
-      return FALSE;
+      return false;
     }
 
   sz = section->size;
   if ((bfd_size_type) offset > sz
-      || count > sz
-      || offset + count > sz
+      || count > sz - offset
       || count != (size_t) count)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   if (!bfd_write_p (abfd))
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   /* Record a copy of the data in memory if desired.  */
@@ -1503,11 +1524,11 @@ bfd_set_section_contents (bfd *abfd,
   if (BFD_SEND (abfd, _bfd_set_section_contents,
 		(abfd, section, location, offset, count)))
     {
-      abfd->output_has_begun = TRUE;
-      return TRUE;
+      abfd->output_has_begun = true;
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /*
@@ -1515,7 +1536,7 @@ FUNCTION
 	bfd_get_section_contents
 
 SYNOPSIS
-	bfd_boolean bfd_get_section_contents
+	bool bfd_get_section_contents
 	  (bfd *abfd, asection *section, void *location, file_ptr offset,
 	   bfd_size_type count);
 
@@ -1532,7 +1553,7 @@ DESCRIPTION
 	<<FALSE>>.
 
 */
-bfd_boolean
+bool
 bfd_get_section_contents (bfd *abfd,
 			  sec_ptr section,
 			  void *location,
@@ -1544,30 +1565,26 @@ bfd_get_section_contents (bfd *abfd,
   if (section->flags & SEC_CONSTRUCTOR)
     {
       memset (location, 0, (size_t) count);
-      return TRUE;
+      return true;
     }
 
-  if (abfd->direction != write_direction && section->rawsize != 0)
-    sz = section->rawsize;
-  else
-    sz = section->size;
+  sz = bfd_get_section_limit_octets (abfd, section);
   if ((bfd_size_type) offset > sz
-      || count > sz
-      || offset + count > sz
+      || count > sz - offset
       || count != (size_t) count)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   if (count == 0)
     /* Don't bother.  */
-    return TRUE;
+    return true;
 
   if ((section->flags & SEC_HAS_CONTENTS) == 0)
     {
       memset (location, 0, (size_t) count);
-      return TRUE;
+      return true;
     }
 
   if ((section->flags & SEC_IN_MEMORY) != 0)
@@ -1579,11 +1596,11 @@ bfd_get_section_contents (bfd *abfd,
 	     error code.  */
 	  section->flags &= ~ SEC_IN_MEMORY;
 	  bfd_set_error (bfd_error_invalid_operation);
-	  return FALSE;
+	  return false;
 	}
 
       memmove (location, section->contents + offset, (size_t) count);
-      return TRUE;
+      return true;
     }
 
   return BFD_SEND (abfd, _bfd_get_section_contents,
@@ -1595,15 +1612,17 @@ FUNCTION
 	bfd_malloc_and_get_section
 
 SYNOPSIS
-	bfd_boolean bfd_malloc_and_get_section
+	bool bfd_malloc_and_get_section
 	  (bfd *abfd, asection *section, bfd_byte **buf);
 
 DESCRIPTION
 	Read all data from @var{section} in BFD @var{abfd}
 	into a buffer, *@var{buf}, malloc'd by this function.
+	Return @code{true} on success, @code{false} on failure in which
+	case *@var{buf} will be NULL.
 */
 
-bfd_boolean
+bool
 bfd_malloc_and_get_section (bfd *abfd, sec_ptr sec, bfd_byte **buf)
 {
   *buf = NULL;
@@ -1614,7 +1633,7 @@ FUNCTION
 	bfd_copy_private_section_data
 
 SYNOPSIS
-	bfd_boolean bfd_copy_private_section_data
+	bool bfd_copy_private_section_data
 	  (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
 
 DESCRIPTION
@@ -1636,17 +1655,17 @@ FUNCTION
 	bfd_generic_is_group_section
 
 SYNOPSIS
-	bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
+	bool bfd_generic_is_group_section (bfd *, const asection *sec);
 
 DESCRIPTION
 	Returns TRUE if @var{sec} is a member of a group.
 */
 
-bfd_boolean
+bool
 bfd_generic_is_group_section (bfd *abfd ATTRIBUTE_UNUSED,
 			      const asection *sec ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
 /*
@@ -1672,20 +1691,20 @@ FUNCTION
 	bfd_generic_discard_group
 
 SYNOPSIS
-	bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
+	bool bfd_generic_discard_group (bfd *abfd, asection *group);
 
 DESCRIPTION
 	Remove all members of @var{group} from the output.
 */
 
-bfd_boolean
+bool
 bfd_generic_discard_group (bfd *abfd ATTRIBUTE_UNUSED,
 			   asection *group ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_nowrite_set_section_contents (bfd *abfd,
 				   sec_ptr section ATTRIBUTE_UNUSED,
 				   const void *location ATTRIBUTE_UNUSED,
@@ -1694,3 +1713,69 @@ _bfd_nowrite_set_section_contents (bfd *
 {
   return _bfd_bool_bfd_false_error (abfd);
 }
+
+/*
+INTERNAL_FUNCTION
+	_bfd_section_size_insane
+
+SYNOPSIS
+	bool _bfd_section_size_insane (bfd *abfd, asection *sec);
+
+DESCRIPTION
+	Returns true if the given section has a size that indicates
+	it cannot be read from file.  Return false if the size is OK
+	*or* this function can't say one way or the other.
+
+*/
+
+bool
+_bfd_section_size_insane (bfd *abfd, asection *sec)
+{
+  bfd_size_type size = bfd_get_section_limit_octets (abfd, sec);
+  if (size == 0)
+    return false;
+
+  if ((bfd_section_flags (sec) & SEC_IN_MEMORY) != 0
+      /* PR 24753: Linker created sections can be larger than
+	 the file size, eg if they are being used to hold stubs.  */
+      || (bfd_section_flags (sec) & SEC_LINKER_CREATED) != 0
+      /* PR 24753: Sections which have no content should also be
+	 excluded as they contain no size on disk.  */
+      || (bfd_section_flags (sec) & SEC_HAS_CONTENTS) == 0
+      /* The MMO file format supports its own special compression
+	 technique, but it uses COMPRESS_SECTION_NONE when loading
+	 a section's contents.  */
+      || bfd_get_flavour (abfd) == bfd_target_mmo_flavour)
+    return false;
+
+  ufile_ptr filesize = bfd_get_file_size (abfd);
+  if (filesize == 0)
+    return false;
+
+  if (sec->compress_status == DECOMPRESS_SECTION_ZSTD
+      || sec->compress_status == DECOMPRESS_SECTION_ZLIB)
+    {
+      /* PR26946, PR28834: Sanity check compress header uncompressed
+	 size against the original file size, and check that the
+	 compressed section can be read from file.  We choose an
+	 arbitrary uncompressed size of 10x the file size, rather than
+	 a compress ratio.  The reason being that compiling
+	 "int aaa..a;" with "a" repeated enough times can result in
+	 compression ratios without limit for .debug_str, whereas such
+	 a file will usually also have the enormous symbol
+	 uncompressed in .symtab.  */
+     if (size / 10 > filesize)
+       {
+	 bfd_set_error (bfd_error_bad_value);
+	 return true;
+       }
+     size = sec->compressed_size;
+    }
+
+  if ((ufile_ptr) sec->filepos > filesize || size > filesize - sec->filepos)
+    {
+      bfd_set_error (bfd_error_file_truncated);
+      return true;
+    }
+  return false;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/simple.c ./bfd/simple.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/simple.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/simple.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* simple.c -- BFD simple client routines
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
    Contributed by MontaVista Software, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -23,6 +23,36 @@
 #include "bfd.h"
 #include "libbfd.h"
 #include "bfdlink.h"
+#include "genlink.h"
+
+static void
+simple_dummy_add_to_set (struct bfd_link_info * info ATTRIBUTE_UNUSED,
+			 struct bfd_link_hash_entry *entry ATTRIBUTE_UNUSED,
+			 bfd_reloc_code_real_type reloc ATTRIBUTE_UNUSED,
+			 bfd *abfd ATTRIBUTE_UNUSED,
+			 asection *sec ATTRIBUTE_UNUSED,
+			 bfd_vma value ATTRIBUTE_UNUSED)
+{
+}
+
+static  void
+simple_dummy_constructor (struct bfd_link_info * info ATTRIBUTE_UNUSED,
+			  bool constructor ATTRIBUTE_UNUSED,
+			  const char *name ATTRIBUTE_UNUSED,
+			  bfd *abfd ATTRIBUTE_UNUSED,
+			  asection *sec ATTRIBUTE_UNUSED,
+			  bfd_vma value ATTRIBUTE_UNUSED)
+{
+}
+
+static void
+simple_dummy_multiple_common (struct bfd_link_info * info ATTRIBUTE_UNUSED,
+			      struct bfd_link_hash_entry * entry ATTRIBUTE_UNUSED,
+			      bfd * abfd ATTRIBUTE_UNUSED,
+			      enum bfd_link_hash_type type ATTRIBUTE_UNUSED,
+			      bfd_vma size ATTRIBUTE_UNUSED)
+{
+}
 
 static void
 simple_dummy_warning (struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
@@ -40,7 +70,7 @@ simple_dummy_undefined_symbol (struct bf
 			       bfd *abfd ATTRIBUTE_UNUSED,
 			       asection *section ATTRIBUTE_UNUSED,
 			       bfd_vma address ATTRIBUTE_UNUSED,
-			       bfd_boolean fatal ATTRIBUTE_UNUSED)
+			       bool fatal ATTRIBUTE_UNUSED)
 {
 }
 
@@ -179,8 +209,7 @@ bfd_simple_get_relocated_section_content
   struct bfd_link_info link_info;
   struct bfd_link_order link_order;
   struct bfd_link_callbacks callbacks;
-  bfd_byte *contents, *data;
-  int storage_needed;
+  bfd_byte *contents;
   struct saved_offsets saved_offsets;
   bfd *link_next;
 
@@ -189,10 +218,9 @@ bfd_simple_get_relocated_section_content
   if ((abfd->flags & (HAS_RELOC | EXEC_P | DYNAMIC)) != HAS_RELOC
       || ! (sec->flags & SEC_RELOC))
     {
-      contents = outbuf;
-      if (!bfd_get_full_section_contents (abfd, sec, &contents))
+      if (!bfd_get_full_section_contents (abfd, sec, &outbuf))
 	return NULL;
-      return contents;
+      return outbuf;
     }
 
   /* In order to use bfd_get_relocated_section_contents, we need
@@ -208,6 +236,9 @@ bfd_simple_get_relocated_section_content
   abfd->link.next = NULL;
   link_info.hash = _bfd_generic_link_hash_table_create (abfd);
   link_info.callbacks = &callbacks;
+  /* Make sure that any fields not initialised below do not
+     result in a potential indirection via a random address.  */
+  memset (&callbacks, 0, sizeof callbacks);
   callbacks.warning = simple_dummy_warning;
   callbacks.undefined_symbol = simple_dummy_undefined_symbol;
   callbacks.reloc_overflow = simple_dummy_reloc_overflow;
@@ -215,6 +246,9 @@ bfd_simple_get_relocated_section_content
   callbacks.unattached_reloc = simple_dummy_unattached_reloc;
   callbacks.multiple_definition = simple_dummy_multiple_definition;
   callbacks.einfo = simple_dummy_einfo;
+  callbacks.multiple_common = simple_dummy_multiple_common;
+  callbacks.constructor = simple_dummy_constructor;
+  callbacks.add_to_set = simple_dummy_add_to_set;
 
   memset (&link_order, 0, sizeof (link_order));
   link_order.next = NULL;
@@ -223,56 +257,32 @@ bfd_simple_get_relocated_section_content
   link_order.size = sec->size;
   link_order.u.indirect.section = sec;
 
-  data = NULL;
-  if (outbuf == NULL)
-    {
-      bfd_size_type amt = sec->rawsize > sec->size ? sec->rawsize : sec->size;
-      data = (bfd_byte *) bfd_malloc (amt);
-      if (data == NULL)
-	{
-	  _bfd_generic_link_hash_table_free (abfd);
-	  abfd->link.next = link_next;
-	  return NULL;
-	}
-      outbuf = data;
-    }
+  contents = NULL;
 
   saved_offsets.section_count = abfd->section_count;
   saved_offsets.sections = malloc (sizeof (*saved_offsets.sections)
 				   * saved_offsets.section_count);
   if (saved_offsets.sections == NULL)
-    {
-      if (data)
-	free (data);
-      _bfd_generic_link_hash_table_free (abfd);
-      abfd->link.next = link_next;
-      return NULL;
-    }
+    goto out1;
   bfd_map_over_sections (abfd, simple_save_output_info, &saved_offsets);
 
   if (symbol_table == NULL)
     {
-      _bfd_generic_link_add_symbols (abfd, &link_info);
-
-      storage_needed = bfd_get_symtab_upper_bound (abfd);
-      symbol_table = (asymbol **) bfd_malloc (storage_needed);
-      bfd_canonicalize_symtab (abfd, symbol_table);
+      if (!bfd_generic_link_read_symbols (abfd))
+	goto out2;
+      symbol_table = _bfd_generic_link_get_symbols (abfd);
     }
-  else
-    storage_needed = 0;
 
   contents = bfd_get_relocated_section_contents (abfd,
 						 &link_info,
 						 &link_order,
 						 outbuf,
-						 0,
+						 false,
 						 symbol_table);
-  if (contents == NULL && data != NULL)
-    free (data);
-
+ out2:
   bfd_map_over_sections (abfd, simple_restore_output_info, &saved_offsets);
   free (saved_offsets.sections);
-
+ out1:
   _bfd_generic_link_hash_table_free (abfd);
   abfd->link.next = link_next;
   return contents;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/som.c ./bfd/som.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/som.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/som.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* bfd back-end for HP PA-RISC SOM objects.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Contributed by the Center for Software Science at the
    University of Utah.
@@ -22,7 +22,6 @@
    02110-1301, USA.  */
 
 #include "sysdep.h"
-#include "alloca-conf.h"
 #include "bfd.h"
 #include "libiberty.h"
 #include "libbfd.h"
@@ -33,12 +32,12 @@
 
 static bfd_reloc_status_type hppa_som_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_boolean som_mkobject (bfd *);
-static bfd_boolean som_is_space (asection *);
-static bfd_boolean som_is_subspace (asection *);
+static bool som_mkobject (bfd *);
+static bool som_is_space (asection *);
+static bool som_is_subspace (asection *);
 static int compare_subspaces (const void *, const void *);
-static unsigned long som_compute_checksum (struct som_external_header *);
-static bfd_boolean som_build_and_write_symbol_table (bfd *);
+static uint32_t som_compute_checksum (struct som_external_header *);
+static bool som_build_and_write_symbol_table (bfd *);
 static unsigned int som_slurp_symbol_table (bfd *);
 
 /* Magic not defined in standard HP-UX header files until 8.0.  */
@@ -114,7 +113,7 @@ static unsigned int som_slurp_symbol_tab
 
    Note one side effect of using a R_PREV_FIXUP is the relocation that
    is being repeated moves to the front of the queue.  */
-struct reloc_queue
+static struct reloc_queue
 {
   unsigned char *reloc;
   unsigned int size;
@@ -636,267 +635,268 @@ static const int comp3_opcodes[] =
 #define R_SHORT_PCREL_MODE 0x3e
 #endif
 
-#define SOM_HOWTO(TYPE, NAME)	\
-  HOWTO(TYPE, 0, 0, 32, FALSE, 0, 0, hppa_som_reloc, NAME, FALSE, 0, 0, FALSE)
+#define SOM_HOWTO(SIZE, TYPE)	\
+  HOWTO(TYPE, 0, SIZE, 32, false, 0, 0, hppa_som_reloc, \
+	#TYPE, false, 0, 0, false)
 
 static reloc_howto_type som_hppa_howto_table[] =
 {
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"),
-  SOM_HOWTO (R_ZEROES, "R_ZEROES"),
-  SOM_HOWTO (R_ZEROES, "R_ZEROES"),
-  SOM_HOWTO (R_UNINIT, "R_UNINIT"),
-  SOM_HOWTO (R_UNINIT, "R_UNINIT"),
-  SOM_HOWTO (R_RELOCATION, "R_RELOCATION"),
-  SOM_HOWTO (R_DATA_ONE_SYMBOL, "R_DATA_ONE_SYMBOL"),
-  SOM_HOWTO (R_DATA_ONE_SYMBOL, "R_DATA_ONE_SYMBOL"),
-  SOM_HOWTO (R_DATA_PLABEL, "R_DATA_PLABEL"),
-  SOM_HOWTO (R_DATA_PLABEL, "R_DATA_PLABEL"),
-  SOM_HOWTO (R_SPACE_REF, "R_SPACE_REF"),
-  SOM_HOWTO (R_REPEATED_INIT, "REPEATED_INIT"),
-  SOM_HOWTO (R_REPEATED_INIT, "REPEATED_INIT"),
-  SOM_HOWTO (R_REPEATED_INIT, "REPEATED_INIT"),
-  SOM_HOWTO (R_REPEATED_INIT, "REPEATED_INIT"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"),
-  SOM_HOWTO (R_SHORT_PCREL_MODE, "R_SHORT_PCREL_MODE"),
-  SOM_HOWTO (R_LONG_PCREL_MODE, "R_LONG_PCREL_MODE"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DATA_GPREL, "R_DATA_GPREL"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_DLT_REL, "R_DLT_REL"),
-  SOM_HOWTO (R_DLT_REL, "R_DLT_REL"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_MILLI_REL, "R_MILLI_REL"),
-  SOM_HOWTO (R_MILLI_REL, "R_MILLI_REL"),
-  SOM_HOWTO (R_CODE_PLABEL, "R_CODE_PLABEL"),
-  SOM_HOWTO (R_CODE_PLABEL, "R_CODE_PLABEL"),
-  SOM_HOWTO (R_BREAKPOINT, "R_BREAKPOINT"),
-  SOM_HOWTO (R_ENTRY, "R_ENTRY"),
-  SOM_HOWTO (R_ENTRY, "R_ENTRY"),
-  SOM_HOWTO (R_ALT_ENTRY, "R_ALT_ENTRY"),
-  SOM_HOWTO (R_EXIT, "R_EXIT"),
-  SOM_HOWTO (R_BEGIN_TRY, "R_BEGIN_TRY"),
-  SOM_HOWTO (R_END_TRY, "R_END_TRY"),
-  SOM_HOWTO (R_END_TRY, "R_END_TRY"),
-  SOM_HOWTO (R_END_TRY, "R_END_TRY"),
-  SOM_HOWTO (R_BEGIN_BRTAB, "R_BEGIN_BRTAB"),
-  SOM_HOWTO (R_END_BRTAB, "R_END_BRTAB"),
-  SOM_HOWTO (R_STATEMENT, "R_STATEMENT"),
-  SOM_HOWTO (R_STATEMENT, "R_STATEMENT"),
-  SOM_HOWTO (R_STATEMENT, "R_STATEMENT"),
-  SOM_HOWTO (R_DATA_EXPR, "R_DATA_EXPR"),
-  SOM_HOWTO (R_CODE_EXPR, "R_CODE_EXPR"),
-  SOM_HOWTO (R_FSEL, "R_FSEL"),
-  SOM_HOWTO (R_LSEL, "R_LSEL"),
-  SOM_HOWTO (R_RSEL, "R_RSEL"),
-  SOM_HOWTO (R_N_MODE, "R_N_MODE"),
-  SOM_HOWTO (R_S_MODE, "R_S_MODE"),
-  SOM_HOWTO (R_D_MODE, "R_D_MODE"),
-  SOM_HOWTO (R_R_MODE, "R_R_MODE"),
-  SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"),
-  SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"),
-  SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"),
-  SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"),
-  SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"),
-  SOM_HOWTO (R_TRANSLATED, "R_TRANSLATED"),
-  SOM_HOWTO (R_AUX_UNWIND, "R_AUX_UNWIND"),
-  SOM_HOWTO (R_COMP1, "R_COMP1"),
-  SOM_HOWTO (R_COMP2, "R_COMP2"),
-  SOM_HOWTO (R_COMP3, "R_COMP3"),
-  SOM_HOWTO (R_PREV_FIXUP, "R_PREV_FIXUP"),
-  SOM_HOWTO (R_PREV_FIXUP, "R_PREV_FIXUP"),
-  SOM_HOWTO (R_PREV_FIXUP, "R_PREV_FIXUP"),
-  SOM_HOWTO (R_PREV_FIXUP, "R_PREV_FIXUP"),
-  SOM_HOWTO (R_SEC_STMT, "R_SEC_STMT"),
-  SOM_HOWTO (R_N0SEL, "R_N0SEL"),
-  SOM_HOWTO (R_N1SEL, "R_N1SEL"),
-  SOM_HOWTO (R_LINETAB, "R_LINETAB"),
-  SOM_HOWTO (R_LINETAB_ESC, "R_LINETAB_ESC"),
-  SOM_HOWTO (R_LTP_OVERRIDE, "R_LTP_OVERRIDE"),
-  SOM_HOWTO (R_COMMENT, "R_COMMENT"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED"),
-  SOM_HOWTO (R_RESERVED, "R_RESERVED")
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_NO_RELOCATION),
+  SOM_HOWTO (0, R_ZEROES),
+  SOM_HOWTO (0, R_ZEROES),
+  SOM_HOWTO (0, R_UNINIT),
+  SOM_HOWTO (0, R_UNINIT),
+  SOM_HOWTO (4, R_RELOCATION),
+  SOM_HOWTO (4, R_DATA_ONE_SYMBOL),
+  SOM_HOWTO (4, R_DATA_ONE_SYMBOL),
+  SOM_HOWTO (4, R_DATA_PLABEL),
+  SOM_HOWTO (4, R_DATA_PLABEL),
+  SOM_HOWTO (4, R_SPACE_REF),
+  SOM_HOWTO (0, R_REPEATED_INIT),
+  SOM_HOWTO (0, R_REPEATED_INIT),
+  SOM_HOWTO (0, R_REPEATED_INIT),
+  SOM_HOWTO (0, R_REPEATED_INIT),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (4, R_PCREL_CALL),
+  SOM_HOWTO (0, R_SHORT_PCREL_MODE),
+  SOM_HOWTO (0, R_LONG_PCREL_MODE),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (4, R_ABS_CALL),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DP_RELATIVE),
+  SOM_HOWTO (4, R_DATA_GPREL),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (4, R_DLT_REL),
+  SOM_HOWTO (4, R_DLT_REL),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (4, R_CODE_ONE_SYMBOL),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (4, R_MILLI_REL),
+  SOM_HOWTO (4, R_MILLI_REL),
+  SOM_HOWTO (4, R_CODE_PLABEL),
+  SOM_HOWTO (4, R_CODE_PLABEL),
+  SOM_HOWTO (4, R_BREAKPOINT),
+  SOM_HOWTO (0, R_ENTRY),
+  SOM_HOWTO (0, R_ENTRY),
+  SOM_HOWTO (0, R_ALT_ENTRY),
+  SOM_HOWTO (0, R_EXIT),
+  SOM_HOWTO (0, R_BEGIN_TRY),
+  SOM_HOWTO (0, R_END_TRY),
+  SOM_HOWTO (0, R_END_TRY),
+  SOM_HOWTO (0, R_END_TRY),
+  SOM_HOWTO (0, R_BEGIN_BRTAB),
+  SOM_HOWTO (0, R_END_BRTAB),
+  SOM_HOWTO (0, R_STATEMENT),
+  SOM_HOWTO (0, R_STATEMENT),
+  SOM_HOWTO (0, R_STATEMENT),
+  SOM_HOWTO (4, R_DATA_EXPR),
+  SOM_HOWTO (4, R_CODE_EXPR),
+  SOM_HOWTO (0, R_FSEL),
+  SOM_HOWTO (0, R_LSEL),
+  SOM_HOWTO (0, R_RSEL),
+  SOM_HOWTO (0, R_N_MODE),
+  SOM_HOWTO (0, R_S_MODE),
+  SOM_HOWTO (0, R_D_MODE),
+  SOM_HOWTO (0, R_R_MODE),
+  SOM_HOWTO (0, R_DATA_OVERRIDE),
+  SOM_HOWTO (0, R_DATA_OVERRIDE),
+  SOM_HOWTO (0, R_DATA_OVERRIDE),
+  SOM_HOWTO (0, R_DATA_OVERRIDE),
+  SOM_HOWTO (0, R_DATA_OVERRIDE),
+  SOM_HOWTO (0, R_TRANSLATED),
+  SOM_HOWTO (0, R_AUX_UNWIND),
+  SOM_HOWTO (0, R_COMP1),
+  SOM_HOWTO (0, R_COMP2),
+  SOM_HOWTO (0, R_COMP3),
+  SOM_HOWTO (0, R_PREV_FIXUP),
+  SOM_HOWTO (0, R_PREV_FIXUP),
+  SOM_HOWTO (0, R_PREV_FIXUP),
+  SOM_HOWTO (0, R_PREV_FIXUP),
+  SOM_HOWTO (0, R_SEC_STMT),
+  SOM_HOWTO (0, R_N0SEL),
+  SOM_HOWTO (0, R_N1SEL),
+  SOM_HOWTO (0, R_LINETAB),
+  SOM_HOWTO (0, R_LINETAB_ESC),
+  SOM_HOWTO (0, R_LTP_OVERRIDE),
+  SOM_HOWTO (0, R_COMMENT),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED),
+  SOM_HOWTO (0, R_RESERVED)
 };
 
 /* Initialize the SOM relocation queue.  By definition the queue holds
@@ -1425,7 +1425,7 @@ hppa_som_gen_reloc_type (bfd *abfd,
       /* The difference of two symbols needs *very* special handling.  */
       if (sym_diff)
 	{
-	  bfd_size_type amt = sizeof (int);
+	  size_t amt = sizeof (int);
 
 	  final_types[0] = bfd_alloc (abfd, amt);
 	  final_types[1] = bfd_alloc (abfd, amt);
@@ -1509,7 +1509,7 @@ hppa_som_gen_reloc_type (bfd *abfd,
       /* The difference of two symbols needs *very* special handling.  */
       if (sym_diff)
 	{
-	  bfd_size_type amt = sizeof (int);
+	  size_t amt = sizeof (int);
 
 	  final_types[0] = bfd_alloc (abfd, amt);
 	  final_types[1] = bfd_alloc (abfd, amt);
@@ -1548,7 +1548,7 @@ hppa_som_gen_reloc_type (bfd *abfd,
 	/* If we have short and long pcrel modes, then generate the proper
 	   mode selector, then the pcrel relocation.  Redundant selectors
 	   will be eliminated as the relocs are sized and emitted.  */
-	bfd_size_type amt = sizeof (int);
+	size_t amt = sizeof (int);
 
 	final_types[0] = bfd_alloc (abfd, amt);
 	if (!final_types[0])
@@ -1945,7 +1945,7 @@ som_swap_lst_header_in (struct som_exter
 /* Perform some initialization for an object.  Save results of this
    initialization in the BFD.  */
 
-static const bfd_target *
+static bfd_cleanup
 som_object_setup (bfd *abfd,
 		  struct som_header *file_hdrp,
 		  struct som_exec_auxhdr *aux_hdrp,
@@ -2060,7 +2060,7 @@ som_object_setup (bfd *abfd,
 				  + current_offset);
   obj_som_exec_data (abfd)->system_id = file_hdrp->system_id;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 /* Convert all of the space and subspace info into BFD sections.  Each space
@@ -2069,28 +2069,30 @@ som_object_setup (bfd *abfd,
    BFD sections which correspond to spaces will overlap the sections for the
    associated subspaces.  */
 
-static bfd_boolean
+static bool
 setup_sections (bfd *abfd,
 		struct som_header *file_hdr,
 		unsigned long current_offset)
 {
-  char *space_strings;
+  char *space_strings = NULL;
   unsigned int space_index, i;
   unsigned int total_subspaces = 0;
   asection **subspace_sections = NULL;
   asection *section;
-  bfd_size_type amt;
+  size_t amt;
 
   /* First, read in space names.  */
   amt = file_hdr->space_strings_size;
-  space_strings = bfd_malloc (amt + 1);
-  if (space_strings == NULL && amt != 0)
-    goto error_return;
-
+  if (amt == (size_t) -1)
+    {
+      bfd_set_error (bfd_error_no_memory);
+      goto error_return;
+    }
   if (bfd_seek (abfd, current_offset + file_hdr->space_strings_location,
 		SEEK_SET) != 0)
     goto error_return;
-  if (bfd_bread (space_strings, amt, abfd) != amt)
+  space_strings = (char *) _bfd_malloc_and_read (abfd, amt + 1, amt);
+  if (space_strings == NULL)
     goto error_return;
   /* Make sure that the string table is NUL terminated.  */
   space_strings[amt] = 0;
@@ -2115,7 +2117,7 @@ setup_sections (bfd *abfd,
 		    SEEK_SET) != 0)
 	goto error_return;
       amt = sizeof ext_space;
-      if (bfd_bread (&ext_space, amt, abfd) != amt)
+      if (bfd_read (&ext_space, amt, abfd) != amt)
 	goto error_return;
 
       som_swap_space_dictionary_in (&ext_space, &space);
@@ -2157,7 +2159,7 @@ setup_sections (bfd *abfd,
 		    SEEK_SET) != 0)
 	goto error_return;
       amt = sizeof ext_subspace;
-      if (bfd_bread (&ext_subspace, amt, abfd) != amt)
+      if (bfd_read (&ext_subspace, amt, abfd) != amt)
 	goto error_return;
       /* Seek back to the start of the subspaces for loop below.  */
       if (bfd_seek (abfd,
@@ -2189,12 +2191,15 @@ setup_sections (bfd *abfd,
 
 	  /* Read in the next subspace.  */
 	  amt = sizeof ext_subspace;
-	  if (bfd_bread (&ext_subspace, amt, abfd) != amt)
+	  if (bfd_read (&ext_subspace, amt, abfd) != amt)
 	    goto error_return;
 
 	  som_swap_subspace_dictionary_in (&ext_subspace, &subspace);
 
 	  /* Setup the subspace name string.  */
+	  if (subspace.name >= file_hdr->space_strings_size)
+	    goto error_return;
+
 	  subspace_name = subspace.name + space_strings;
 
 	  amt = strlen (subspace_name) + 1;
@@ -2339,8 +2344,11 @@ setup_sections (bfd *abfd,
     }
   /* Now that we've read in all the subspace records, we need to assign
      a target index to each subspace.  */
-  amt = total_subspaces;
-  amt *= sizeof (asection *);
+  if (_bfd_mul_overflow (total_subspaces, sizeof (asection *), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      goto error_return;
+    }
   subspace_sections = bfd_malloc (amt);
   if (subspace_sections == NULL)
     goto error_return;
@@ -2361,27 +2369,20 @@ setup_sections (bfd *abfd,
   for (i = 0; i < total_subspaces; i++)
     subspace_sections[i]->target_index = i;
 
-  if (space_strings != NULL)
-    free (space_strings);
-
-  if (subspace_sections != NULL)
-    free (subspace_sections);
-
-  return TRUE;
+  free (space_strings);
+  free (subspace_sections);
+  return true;
 
  error_return:
-  if (space_strings != NULL)
-    free (space_strings);
-
-  if (subspace_sections != NULL)
-    free (subspace_sections);
-  return FALSE;
+  free (space_strings);
+  free (subspace_sections);
+  return false;
 }
 
 
 /* Read in a SOM object and make it into a BFD.  */
 
-static const bfd_target *
+static bfd_cleanup
 som_object_p (bfd *abfd)
 {
   struct som_external_header ext_file_hdr;
@@ -2390,12 +2391,12 @@ som_object_p (bfd *abfd)
   unsigned long current_offset = 0;
   struct som_external_lst_header ext_lst_header;
   struct som_external_som_entry ext_som_entry;
-  bfd_size_type amt;
+  size_t amt;
   unsigned int loc;
 #define ENTRY_SIZE sizeof (struct som_external_som_entry)
 
   amt = sizeof (struct som_external_header);
-  if (bfd_bread (&ext_file_hdr, amt, abfd) != amt)
+  if (bfd_read (&ext_file_hdr, amt, abfd) != amt)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -2426,7 +2427,7 @@ som_object_p (bfd *abfd)
     case EXECLIBMAGIC:
       /* Read the lst header and determine where the SOM directory begins.  */
 
-      if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+      if (bfd_seek (abfd, 0, SEEK_SET) != 0)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_wrong_format);
@@ -2434,7 +2435,7 @@ som_object_p (bfd *abfd)
 	}
 
       amt = sizeof (struct som_external_lst_header);
-      if (bfd_bread (&ext_lst_header, amt, abfd) != amt)
+      if (bfd_read (&ext_lst_header, amt, abfd) != amt)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_wrong_format);
@@ -2451,7 +2452,7 @@ som_object_p (bfd *abfd)
 	}
 
       amt = ENTRY_SIZE;
-      if (bfd_bread (&ext_som_entry, amt, abfd) != amt)
+      if (bfd_read (&ext_som_entry, amt, abfd) != amt)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_wrong_format);
@@ -2469,7 +2470,7 @@ som_object_p (bfd *abfd)
 
       /* And finally, re-read the som header.  */
       amt = sizeof (struct som_external_header);
-      if (bfd_bread (&ext_file_hdr, amt, abfd) != amt)
+      if (bfd_read (&ext_file_hdr, amt, abfd) != amt)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_wrong_format);
@@ -2504,7 +2505,7 @@ som_object_p (bfd *abfd)
       if (aux_hdr_ptr == NULL)
 	return NULL;
       amt = sizeof (struct som_external_exec_auxhdr);
-      if (bfd_bread (&ext_exec_auxhdr, amt, abfd) != amt)
+      if (bfd_read (&ext_exec_auxhdr, amt, abfd) != amt)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_wrong_format);
@@ -2526,31 +2527,31 @@ som_object_p (bfd *abfd)
 
 /* Create a SOM object.  */
 
-static bfd_boolean
+static bool
 som_mkobject (bfd *abfd)
 {
   /* Allocate memory to hold backend information.  */
   abfd->tdata.som_data = bfd_zalloc (abfd, (bfd_size_type) sizeof (struct som_data_struct));
   if (abfd->tdata.som_data == NULL)
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 /* Initialize some information in the file header.  This routine makes
    not attempt at doing the right thing for a full executable; it
    is only meant to handle relocatable objects.  */
 
-static bfd_boolean
+static bool
 som_prep_headers (bfd *abfd)
 {
   struct som_header *file_hdr;
   asection *section;
-  bfd_size_type amt = sizeof (struct som_header);
+  size_t amt = sizeof (struct som_header);
 
   /* Make and attach a file header to the BFD.  */
   file_hdr = bfd_zalloc (abfd, amt);
   if (file_hdr == NULL)
-    return FALSE;
+    return false;
   obj_som_file_hdr (abfd) = file_hdr;
 
   if (abfd->flags & (EXEC_P | DYNAMIC))
@@ -2559,7 +2560,7 @@ som_prep_headers (bfd *abfd)
       amt = sizeof (struct som_exec_auxhdr);
       obj_som_exec_hdr (abfd) = bfd_zalloc (abfd, amt);
       if (obj_som_exec_hdr (abfd) == NULL)
-	return FALSE;
+	return false;
 
       if (abfd->flags & D_PAGED)
 	file_hdr->a_magic = DEMAND_MAGIC;
@@ -2601,7 +2602,7 @@ som_prep_headers (bfd *abfd)
 	  amt = sizeof (struct som_space_dictionary_record);
 	  som_section_data (section)->space_dict = bfd_zalloc (abfd, amt);
 	  if (som_section_data (section)->space_dict == NULL)
-	    return FALSE;
+	    return false;
 	  /* Set space attributes.  Note most attributes of SOM spaces
 	     are set based on the subspaces it contains.  */
 	  som_section_data (section)->space_dict->loader_fix_index = -1;
@@ -2623,7 +2624,7 @@ som_prep_headers (bfd *abfd)
 	  amt = sizeof (struct som_subspace_dictionary_record);
 	  som_section_data (section)->subspace_dict = bfd_zalloc (abfd, amt);
 	  if (som_section_data (section)->subspace_dict == NULL)
-	    return FALSE;
+	    return false;
 
 	  /* Set subspace attributes.  Basic stuff is done here, additional
 	     attributes are filled in later as more information becomes
@@ -2658,56 +2659,56 @@ som_prep_headers (bfd *abfd)
 	    som_section_data (section)->copy_data->dup_common;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if the given section is a SOM space, FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 som_is_space (asection *section)
 {
   /* If no copy data is available, then it's neither a space nor a
      subspace.  */
   if (som_section_data (section)->copy_data == NULL)
-    return FALSE;
+    return false;
 
   /* If the containing space isn't the same as the given section,
      then this isn't a space.  */
   if (som_section_data (section)->copy_data->container != section
       && (som_section_data (section)->copy_data->container->output_section
 	  != section))
-    return FALSE;
+    return false;
 
   /* OK.  Must be a space.  */
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if the given section is a SOM subspace, FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 som_is_subspace (asection *section)
 {
   /* If no copy data is available, then it's neither a space nor a
      subspace.  */
   if (som_section_data (section)->copy_data == NULL)
-    return FALSE;
+    return false;
 
   /* If the containing space is the same as the given section,
      then this isn't a subspace.  */
   if (som_section_data (section)->copy_data->container == section
       || (som_section_data (section)->copy_data->container->output_section
 	  == section))
-    return FALSE;
+    return false;
 
   /* OK.  Must be a subspace.  */
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if the given space contains the given subspace.  It
    is safe to assume space really is a space, and subspace really
    is a subspace.  */
 
-static bfd_boolean
+static bool
 som_is_container (asection *space, asection *subspace)
 {
   return (som_section_data (subspace)->copy_data->container == space)
@@ -2795,13 +2796,16 @@ compare_subspaces (const void *arg1, con
 
 /* Perform various work in preparation for emitting the fixup stream.  */
 
-static void
+static bool
 som_prep_for_fixups (bfd *abfd, asymbol **syms, unsigned long num_syms)
 {
   unsigned long i;
   asection *section;
   asymbol **sorted_syms;
-  bfd_size_type amt;
+  size_t amt;
+
+  if (num_syms == 0)
+    return true;
 
   /* Most SOM relocations involving a symbol have a length which is
      dependent on the index of the symbol.  So symbols which are
@@ -2873,9 +2877,14 @@ som_prep_for_fixups (bfd *abfd, asymbol
 
   /* Sort a copy of the symbol table, rather than the canonical
      output symbol table.  */
-  amt = num_syms;
-  amt *= sizeof (asymbol *);
+  if (_bfd_mul_overflow (num_syms, sizeof (asymbol *), &amt))
+    {
+      bfd_set_error (bfd_error_no_memory);
+      return false;
+    }
   sorted_syms = bfd_zalloc (abfd, amt);
+  if (sorted_syms == NULL)
+    return false;
   memcpy (sorted_syms, syms, num_syms * sizeof (asymbol *));
   qsort (sorted_syms, num_syms, sizeof (asymbol *), compare_syms);
   obj_som_sorted_syms (abfd) = sorted_syms;
@@ -2891,9 +2900,10 @@ som_prep_for_fixups (bfd *abfd, asymbol
       else
 	som_symbol_data (sorted_syms[i])->index = i;
     }
+  return true;
 }
 
-static bfd_boolean
+static bool
 som_write_fixups (bfd *abfd,
 		  unsigned long current_offset,
 		  unsigned int *total_reloc_sizep)
@@ -2907,7 +2917,7 @@ som_write_fixups (bfd *abfd,
   unsigned int subspace_reloc_size = 0;
   unsigned int num_spaces = obj_som_file_hdr (abfd)->space_total;
   asection *section = abfd->sections;
-  bfd_size_type amt;
+  size_t amt;
 
   memset (tmp_space, 0, SOM_TMP_BUFSIZE);
   p = tmp_space;
@@ -2924,15 +2934,17 @@ som_write_fixups (bfd *abfd,
       asection *subsection;
 
       /* Find a space.  */
-      while (!som_is_space (section))
+      while (section && !som_is_space (section))
 	section = section->next;
+      if (!section)
+	break;
 
       /* Now iterate through each of its subspaces.  */
       for (subsection = abfd->sections;
 	   subsection != NULL;
 	   subsection = subsection->next)
 	{
-	  int reloc_offset;
+	  unsigned int reloc_offset;
 	  unsigned int current_rounding_mode;
 #ifndef NO_PCREL_MODES
 	  unsigned int current_call_mode;
@@ -2962,7 +2974,7 @@ som_write_fixups (bfd *abfd,
 	     for this subspace in preparation for writing out its fixup
 	     stream.  */
 	  if (bfd_seek (abfd, current_offset + total_reloc_size, SEEK_SET) != 0)
-	    return FALSE;
+	    return false;
 
 	  /* Buffer space has already been allocated.  Just perform some
 	     initialization here.  */
@@ -2983,6 +2995,31 @@ som_write_fixups (bfd *abfd,
 	      unsigned int skip;
 	      int sym_num;
 
+	      if (bfd_reloc->address < reloc_offset)
+		{
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB(%pA+%#" PRIx64 "): "
+		       "%s relocation offset out of order"),
+		     abfd, subsection, (uint64_t) bfd_reloc->address,
+		     bfd_reloc->howto->name);
+		  bfd_set_error (bfd_error_bad_value);
+		  return false;
+		}
+	      if (!bfd_reloc_offset_in_range (bfd_reloc->howto,
+					      abfd, subsection,
+					      bfd_reloc->address))
+		{
+		  _bfd_error_handler
+		    /* xgettext:c-format */
+		    (_("%pB(%pA+%#" PRIx64 "): "
+		       "%s relocation offset out of range"),
+		     abfd, subsection, (uint64_t) bfd_reloc->address,
+		     bfd_reloc->howto->name);
+		  bfd_set_error (bfd_error_bad_value);
+		  return false;
+		}
+
 	      /* Get the symbol number.  Remember it's stored in a
 		 special place for section symbols.  */
 	      if ((*bfd_reloc->sym_ptr_ptr)->flags & BSF_SECTION_SYM)
@@ -2994,14 +3031,16 @@ som_write_fixups (bfd *abfd,
 		 then dump the current buffer contents now.  Also reinitialize
 		 the relocation queue.
 
-		 No single BFD relocation could ever translate into more
-		 than 100 bytes of SOM relocations (20bytes is probably the
-		 upper limit, but leave lots of space for growth).  */
-	      if (p - tmp_space + 100 > SOM_TMP_BUFSIZE)
+		 A single BFD relocation would probably only ever
+		 translate into at most 20 bytes of SOM relocations.
+		 However with fuzzed object files and resulting silly
+		 values for "skip" below, som_reloc_skip can emit 262
+		 bytes.  Leave lots of space for growth.  */
+	      if (p - tmp_space + 512 > SOM_TMP_BUFSIZE)
 		{
 		  amt = p - tmp_space;
-		  if (bfd_bwrite ((void *) tmp_space, amt, abfd) != amt)
-		    return FALSE;
+		  if (bfd_write (tmp_space, amt, abfd) != amt)
+		    return false;
 
 		  p = tmp_space;
 		  som_initialize_reloc_queue (reloc_queue);
@@ -3013,42 +3052,8 @@ som_write_fixups (bfd *abfd,
 	      p = som_reloc_skip (abfd, skip, p,
 				  &subspace_reloc_size, reloc_queue);
 
-	      /* Update reloc_offset for the next iteration.
-
-		 Many relocations do not consume input bytes.  They
-		 are markers, or set state necessary to perform some
-		 later relocation.  */
-	      switch (bfd_reloc->howto->type)
-		{
-		case R_ENTRY:
-		case R_ALT_ENTRY:
-		case R_EXIT:
-		case R_N_MODE:
-		case R_S_MODE:
-		case R_D_MODE:
-		case R_R_MODE:
-		case R_FSEL:
-		case R_LSEL:
-		case R_RSEL:
-		case R_COMP1:
-		case R_COMP2:
-		case R_BEGIN_BRTAB:
-		case R_END_BRTAB:
-		case R_BEGIN_TRY:
-		case R_END_TRY:
-		case R_N0SEL:
-		case R_N1SEL:
-#ifndef NO_PCREL_MODES
-		case R_SHORT_PCREL_MODE:
-		case R_LONG_PCREL_MODE:
-#endif
-		  reloc_offset = bfd_reloc->address;
-		  break;
-
-		default:
-		  reloc_offset = bfd_reloc->address + 4;
-		  break;
-		}
+	      /* Update reloc_offset for the next iteration.  */
+	      reloc_offset = bfd_reloc->address + bfd_reloc->howto->size;
 
 	      /* Now the actual relocation we care about.  */
 	      switch (bfd_reloc->howto->type)
@@ -3285,8 +3290,8 @@ som_write_fixups (bfd *abfd,
 
 	  /* Scribble out the relocations.  */
 	  amt = p - tmp_space;
-	  if (bfd_bwrite ((void *) tmp_space, amt, abfd) != amt)
-	    return FALSE;
+	  if (bfd_write (tmp_space, amt, abfd) != amt)
+	    return false;
 	  p = tmp_space;
 
 	  total_reloc_size += subspace_reloc_size;
@@ -3296,126 +3301,139 @@ som_write_fixups (bfd *abfd,
       section = section->next;
     }
   *total_reloc_sizep = total_reloc_size;
-  return TRUE;
+  return true;
+}
+
+/* Write the length of STR followed by STR to P which points into
+   *BUF, a buffer of *BUFLEN size.  Track total size in *STRINGS_SIZE,
+   setting *STRX to the current offset for STR.  When STR can't fit in
+   *BUF, flush the buffer to ABFD, possibly reallocating.  Return the
+   next available location in *BUF, or NULL on error.  */
+
+static char *
+add_string (char *p, const char *str, bfd *abfd, char **buf, size_t *buflen,
+	    unsigned int *strings_size, unsigned int *strx)
+{
+  size_t length = strlen (str) + 1;
+  /* Each entry will take 4 bytes to hold the string length + the
+     string itself + null terminator + padding to a 4 byte boundary.  */
+  size_t needed = (4 + length + 3) & ~3;
+
+  /* If there is not enough room for the next entry, then dump the
+     current buffer contents now and maybe allocate a larger buffer.  */
+  if (p - *buf + needed > *buflen)
+    {
+      /* Flush buffer before refilling or reallocating.  */
+      size_t amt = p - *buf;
+      if (bfd_write (*buf, amt, abfd) != amt)
+	return NULL;
+
+      /* Reallocate if now empty buffer still too small.  */
+      if (needed > *buflen)
+	{
+	  /* Ensure a minimum growth factor to avoid O(n**2) space
+	     consumption for n strings.  The optimal minimum factor
+	     seems to be 2.  */
+	  if (*buflen * 2 < needed)
+	    *buflen = needed;
+	  else
+	    *buflen = *buflen * 2;
+	  free (*buf);
+	  *buf = bfd_malloc (*buflen);
+	  if (*buf == NULL)
+	    return NULL;
+	}
+
+      /* Reset to beginning of the (possibly new) buffer space.  */
+      p = *buf;
+    }
+
+  /* First element in a string table entry is the length of
+     the string.  This must always be 4 byte aligned.  This is
+     also an appropriate time to fill in the string index
+     field in the symbol table entry.  */
+  bfd_put_32 (abfd, length - 1, p);
+  *strings_size += 4;
+  p += 4;
+
+  *strx = *strings_size;
+
+  /* Next comes the string itself + a null terminator.  */
+  memcpy (p, str, length);
+  p += length;
+  *strings_size += length;
+
+  /* Always align up to the next word boundary.  */
+  if (length & 3)
+    {
+      length = 4 - (length & 3);
+      memset (p, 0, length);
+      *strings_size += length;
+      p += length;
+    }
+  return p;
 }
 
 /* Write out the space/subspace string table.  */
 
-static bfd_boolean
+static bool
 som_write_space_strings (bfd *abfd,
 			 unsigned long current_offset,
-			 unsigned int *string_sizep)
+			 unsigned int *strings_size)
 {
   /* Chunk of memory that we can use as buffer space, then throw
      away.  */
   size_t tmp_space_size = SOM_TMP_BUFSIZE;
   char *tmp_space = bfd_malloc (tmp_space_size);
   char *p = tmp_space;
-  unsigned int strings_size = 0;
   asection *section;
-  bfd_size_type amt;
-  bfd_size_type res;
 
   if (tmp_space == NULL)
-    return FALSE;
+    return false;
 
   /* Seek to the start of the space strings in preparation for writing
      them out.  */
-  if (bfd_seek (abfd, (file_ptr) current_offset, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, current_offset, SEEK_SET) != 0)
+    return false;
 
   /* Walk through all the spaces and subspaces (order is not important)
      building up and writing string table entries for their names.  */
+  *strings_size = 0;
   for (section = abfd->sections; section != NULL; section = section->next)
     {
-      size_t length;
+      unsigned int *strx;
 
       /* Only work with space/subspaces; avoid any other sections
 	 which might have been made (.text for example).  */
-      if (!som_is_space (section) && !som_is_subspace (section))
-	continue;
-
-      /* Get the length of the space/subspace name.  */
-      length = strlen (section->name);
-
-      /* If there is not enough room for the next entry, then dump the
-	 current buffer contents now and maybe allocate a larger
-	 buffer.  Each entry will take 4 bytes to hold the string
-	 length + the string itself + null terminator.  */
-      if (p - tmp_space + 5 + length > tmp_space_size)
-	{
-	  /* Flush buffer before refilling or reallocating.  */
-	  amt = p - tmp_space;
-	  if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt)
-	    return FALSE;
-
-	  /* Reallocate if now empty buffer still too small.  */
-	  if (5 + length > tmp_space_size)
-	    {
-	      /* Ensure a minimum growth factor to avoid O(n**2) space
-		 consumption for n strings.  The optimal minimum
-		 factor seems to be 2, as no other value can guarantee
-		 wasting less than 50% space.  (Note that we cannot
-		 deallocate space allocated by `alloca' without
-		 returning from this function.)  The same technique is
-		 used a few more times below when a buffer is
-		 reallocated.  */
-	      if (2 * tmp_space_size < length + 5)
-		tmp_space_size = length + 5;
-	      else
-		tmp_space_size = 2 * tmp_space_size;
-	      tmp_space = xrealloc (tmp_space, tmp_space_size);
-	    }
-
-	  /* Reset to beginning of the (possibly new) buffer space.  */
-	  p = tmp_space;
-	}
-
-      /* First element in a string table entry is the length of the
-	 string.  Alignment issues are already handled.  */
-      bfd_put_32 (abfd, (bfd_vma) length, p);
-      p += 4;
-      strings_size += 4;
-
-      /* Record the index in the space/subspace records.  */
       if (som_is_space (section))
-	som_section_data (section)->space_dict->name = strings_size;
+	strx = &som_section_data (section)->space_dict->name;
+      else if (som_is_subspace (section))
+	strx = &som_section_data (section)->subspace_dict->name;
       else
-	som_section_data (section)->subspace_dict->name = strings_size;
-
-      /* Next comes the string itself + a null terminator.  */
-      strcpy (p, section->name);
-      p += length + 1;
-      strings_size += length + 1;
+	continue;
 
-      /* Always align up to the next word boundary.  */
-      while (strings_size % 4)
-	{
-	  bfd_put_8 (abfd, 0, p);
-	  p++;
-	  strings_size++;
-	}
+      p = add_string (p, section->name, abfd, &tmp_space, &tmp_space_size,
+		      strings_size, strx);
+      if (p == NULL)
+	return false;
     }
 
   /* Done with the space/subspace strings.  Write out any information
      contained in a partial block.  */
-  amt = p - tmp_space;
-  res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd);
+  size_t amt = p - tmp_space;
+  bool ok = amt ? bfd_write (tmp_space, amt, abfd) == amt : true;
   free (tmp_space);
-  if (res != amt)
-    return FALSE;
-  *string_sizep = strings_size;
-  return TRUE;
+  return ok;
 }
 
 /* Write out the symbol string table.  */
 
-static bfd_boolean
+static bool
 som_write_symbol_strings (bfd *abfd,
 			  unsigned long current_offset,
 			  asymbol **syms,
 			  unsigned int num_syms,
-			  unsigned int *string_sizep,
+			  unsigned int *strings_size,
 			  struct som_compilation_unit *compilation_unit)
 {
   unsigned int i;
@@ -3424,12 +3442,9 @@ som_write_symbol_strings (bfd *abfd,
   size_t tmp_space_size = SOM_TMP_BUFSIZE;
   char *tmp_space = bfd_malloc (tmp_space_size);
   char *p = tmp_space;
-  unsigned int strings_size = 0;
-  bfd_size_type amt;
-  bfd_size_type res;
 
   if (tmp_space == NULL)
-    return FALSE;
+    return false;
 
   /* This gets a bit gruesome because of the compilation unit.  The
      strings within the compilation unit are part of the symbol
@@ -3440,15 +3455,15 @@ som_write_symbol_strings (bfd *abfd,
 
   /* Seek to the start of the space strings in preparation for writing
      them out.  */
-  if (bfd_seek (abfd, (file_ptr) current_offset, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, current_offset, SEEK_SET) != 0)
+    return false;
 
+  *strings_size = 0;
   if (compilation_unit)
     {
       for (i = 0; i < 4; i++)
 	{
 	  struct som_name_pt *name;
-	  size_t length;
 
 	  switch (i)
 	    {
@@ -3468,128 +3483,35 @@ som_write_symbol_strings (bfd *abfd,
 	      abort ();
 	    }
 
-	  length = strlen (name->name);
-
-	  /* If there is not enough room for the next entry, then dump
-	     the current buffer contents now and maybe allocate a
-	     larger buffer.  */
-	  if (p - tmp_space + 5 + length > tmp_space_size)
-	    {
-	      /* Flush buffer before refilling or reallocating.  */
-	      amt = p - tmp_space;
-	      if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt)
-		return FALSE;
-
-	      /* Reallocate if now empty buffer still too small.  */
-	      if (5 + length > tmp_space_size)
-		{
-		  /* See alloca above for discussion of new size.  */
-		  if (2 * tmp_space_size < 5 + length)
-		    tmp_space_size = 5 + length;
-		  else
-		    tmp_space_size = 2 * tmp_space_size;
-		  tmp_space = xrealloc (tmp_space, tmp_space_size);
-		}
-
-	      /* Reset to beginning of the (possibly new) buffer
-		 space.  */
-	      p = tmp_space;
-	    }
-
-	  /* First element in a string table entry is the length of
-	     the string.  This must always be 4 byte aligned.  This is
-	     also an appropriate time to fill in the string index
-	     field in the symbol table entry.  */
-	  bfd_put_32 (abfd, (bfd_vma) length, p);
-	  strings_size += 4;
-	  p += 4;
+	  p = add_string (p, name->name, abfd, &tmp_space, &tmp_space_size,
+			  strings_size, &name->strx);
 
-	  /* Next comes the string itself + a null terminator.  */
-	  strcpy (p, name->name);
-
-	  name->strx = strings_size;
-
-	  p += length + 1;
-	  strings_size += length + 1;
-
-	  /* Always align up to the next word boundary.  */
-	  while (strings_size % 4)
-	    {
-	      bfd_put_8 (abfd, 0, p);
-	      strings_size++;
-	      p++;
-	    }
+	  if (p == NULL)
+	    return false;
 	}
     }
 
   for (i = 0; i < num_syms; i++)
     {
-      size_t length = strlen (syms[i]->name);
-
-      /* If there is not enough room for the next entry, then dump the
-	 current buffer contents now and maybe allocate a larger buffer.  */
-     if (p - tmp_space + 5 + length > tmp_space_size)
-	{
-	  /* Flush buffer before refilling or reallocating.  */
-	  amt = p - tmp_space;
-	  if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt)
-	    return FALSE;
-
-	  /* Reallocate if now empty buffer still too small.  */
-	  if (5 + length > tmp_space_size)
-	    {
-	      /* See alloca above for discussion of new size.  */
-	      if (2 * tmp_space_size < 5 + length)
-		tmp_space_size = 5 + length;
-	      else
-		tmp_space_size = 2 * tmp_space_size;
-	      tmp_space = xrealloc (tmp_space, tmp_space_size);
-	    }
-
-	  /* Reset to beginning of the (possibly new) buffer space.  */
-	  p = tmp_space;
-	}
-
-      /* First element in a string table entry is the length of the
-	 string.  This must always be 4 byte aligned.  This is also
-	 an appropriate time to fill in the string index field in the
-	 symbol table entry.  */
-      bfd_put_32 (abfd, (bfd_vma) length, p);
-      strings_size += 4;
-      p += 4;
-
-      /* Next comes the string itself + a null terminator.  */
-      strcpy (p, syms[i]->name);
-
-      som_symbol_data (syms[i])->stringtab_offset = strings_size;
-      p += length + 1;
-      strings_size += length + 1;
-
-      /* Always align up to the next word boundary.  */
-      while (strings_size % 4)
-	{
-	  bfd_put_8 (abfd, 0, p);
-	  strings_size++;
-	  p++;
-	}
+      p = add_string (p, syms[i]->name, abfd, &tmp_space, &tmp_space_size,
+		      strings_size,
+		      &som_symbol_data (syms[i])->stringtab_offset);
+      if (p == NULL)
+	return false;
     }
 
   /* Scribble out any partial block.  */
-  amt = p - tmp_space;
-  res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd);
+  size_t amt = p - tmp_space;
+  bool ok = amt ? bfd_write (tmp_space, amt, abfd) == amt : true;
   free (tmp_space);
-  if (res != amt)
-    return FALSE;
-
-  *string_sizep = strings_size;
-  return TRUE;
+  return ok;
 }
 
 /* Compute variable information to be placed in the SOM headers,
    space/subspace dictionaries, relocation streams, etc.  Begin
    writing parts of the object file.  */
 
-static bfd_boolean
+static bool
 som_begin_writing (bfd *abfd)
 {
   unsigned long current_offset = 0;
@@ -3634,8 +3556,8 @@ som_begin_writing (bfd *abfd)
       struct som_external_string_auxhdr ext_string_auxhdr;
       bfd_size_type len;
 
-      if (bfd_seek (abfd, (file_ptr) current_offset, SEEK_SET) != 0)
-	return FALSE;
+      if (bfd_seek (abfd, current_offset, SEEK_SET) != 0)
+	return false;
 
       /* Write the aux_id structure and the string length.  */
       len = sizeof (struct som_external_string_auxhdr);
@@ -3643,16 +3565,15 @@ som_begin_writing (bfd *abfd)
       current_offset += len;
       som_swap_string_auxhdr_out
 	(obj_som_version_hdr (abfd), &ext_string_auxhdr);
-      if (bfd_bwrite (&ext_string_auxhdr, len, abfd) != len)
-	return FALSE;
+      if (bfd_write (&ext_string_auxhdr, len, abfd) != len)
+	return false;
 
       /* Write the version string.  */
       len = obj_som_version_hdr (abfd)->header_id.length - 4;
       obj_som_file_hdr (abfd)->aux_header_size += len;
       current_offset += len;
-      if (bfd_bwrite ((void *) obj_som_version_hdr (abfd)->string, len, abfd)
-	  != len)
-	return FALSE;
+      if (bfd_write (obj_som_version_hdr (abfd)->string, len, abfd) != len)
+	return false;
     }
 
   if (obj_som_copyright_hdr (abfd) != NULL)
@@ -3660,8 +3581,8 @@ som_begin_writing (bfd *abfd)
       struct som_external_string_auxhdr ext_string_auxhdr;
       bfd_size_type len;
 
-      if (bfd_seek (abfd, (file_ptr) current_offset, SEEK_SET) != 0)
-	return FALSE;
+      if (bfd_seek (abfd, current_offset, SEEK_SET) != 0)
+	return false;
 
       /* Write the aux_id structure and the string length.  */
       len = sizeof (struct som_external_string_auxhdr);
@@ -3669,16 +3590,15 @@ som_begin_writing (bfd *abfd)
       current_offset += len;
       som_swap_string_auxhdr_out
 	(obj_som_copyright_hdr (abfd), &ext_string_auxhdr);
-      if (bfd_bwrite (&ext_string_auxhdr, len, abfd) != len)
-	return FALSE;
+      if (bfd_write (&ext_string_auxhdr, len, abfd) != len)
+	return false;
 
       /* Write the copyright string.  */
       len = obj_som_copyright_hdr (abfd)->header_id.length - 4;
       obj_som_file_hdr (abfd)->aux_header_size += len;
       current_offset += len;
-      if (bfd_bwrite ((void *) obj_som_copyright_hdr (abfd)->string, len, abfd)
-	  != len)
-	return FALSE;
+      if (bfd_write (obj_som_copyright_hdr (abfd)->string, len, abfd) != len)
+	return false;
     }
 
   /* Next comes the initialization pointers; we have no initialization
@@ -3728,7 +3648,7 @@ som_begin_writing (bfd *abfd)
 
   /* Scribble out the space strings.  */
   if (! som_write_space_strings (abfd, current_offset, &strings_size))
-    return FALSE;
+    return false;
 
   /* Record total string table size in the header and update the
      current offset.  */
@@ -3924,10 +3844,10 @@ som_begin_writing (bfd *abfd)
      zeros are filled in.  Ugh.  */
   if (abfd->flags & (EXEC_P | DYNAMIC))
     current_offset = SOM_ALIGN (current_offset, PA_PAGESIZE);
-  if (bfd_seek (abfd, (file_ptr) current_offset - 1, SEEK_SET) != 0)
-    return FALSE;
-  if (bfd_bwrite ((void *) "", (bfd_size_type) 1, abfd) != 1)
-    return FALSE;
+  if (bfd_seek (abfd, current_offset - 1, SEEK_SET) != 0)
+    return false;
+  if (bfd_write ("", 1, abfd) != 1)
+    return false;
 
   obj_som_file_hdr (abfd)->unloadable_sp_size
     = current_offset - obj_som_file_hdr (abfd)->unloadable_sp_location;
@@ -3939,12 +3859,12 @@ som_begin_writing (bfd *abfd)
   /* Done.  Store the total size of the SOM so far.  */
   obj_som_file_hdr (abfd)->som_length = current_offset;
 
-  return TRUE;
+  return true;
 }
 
 /* Finally, scribble out the various headers to the disk.  */
 
-static bfd_boolean
+static bool
 som_finish_writing (bfd *abfd)
 {
   int num_spaces = som_count_spaces (abfd);
@@ -3955,7 +3875,7 @@ som_finish_writing (bfd *abfd)
   asection *section;
   unsigned long current_offset;
   unsigned int strings_size, total_reloc_size;
-  bfd_size_type amt;
+  size_t amt;
   struct som_external_header ext_header;
 
   /* We must set up the version identifier here as objcopy/strip copy
@@ -4001,7 +3921,7 @@ som_finish_writing (bfd *abfd)
   if (! som_write_symbol_strings (abfd, current_offset, syms,
 				  num_syms, &strings_size,
 				  obj_som_compilation_unit (abfd)))
-    return FALSE;
+    return false;
 
   /* Record total string table size in header and update the
      current offset.  */
@@ -4009,9 +3929,10 @@ som_finish_writing (bfd *abfd)
   current_offset += strings_size;
 
   /* Do prep work before handling fixups.  */
-  som_prep_for_fixups (abfd,
-		       bfd_get_outsymbols (abfd),
-		       bfd_get_symcount (abfd));
+  if (!som_prep_for_fixups (abfd,
+			    bfd_get_outsymbols (abfd),
+			    bfd_get_symcount (abfd)))
+    return false;
 
   /* At the end of the file is the fixup stream which starts on a
      word boundary.  */
@@ -4022,7 +3943,7 @@ som_finish_writing (bfd *abfd)
   /* Write the fixups and update fields in subspace headers which
      relate to the fixup stream.  */
   if (! som_write_fixups (abfd, current_offset, &total_reloc_size))
-    return FALSE;
+    return false;
 
   /* Record the total size of the fixup stream in the file header.  */
   obj_som_file_hdr (abfd)->fixup_request_total = total_reloc_size;
@@ -4033,7 +3954,7 @@ som_finish_writing (bfd *abfd)
   /* Now that the symbol table information is complete, build and
      write the symbol table.  */
   if (! som_build_and_write_symbol_table (abfd))
-    return FALSE;
+    return false;
 
   /* Subspaces are written first so that we can set up information
      about them in their containing spaces as the subspace is written.  */
@@ -4041,7 +3962,7 @@ som_finish_writing (bfd *abfd)
   /* Seek to the start of the subspace dictionary records.  */
   location = obj_som_file_hdr (abfd)->subspace_location;
   if (bfd_seek (abfd, location, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   section = abfd->sections;
   /* Now for each loadable space write out records for its subspaces.  */
@@ -4092,8 +4013,8 @@ som_finish_writing (bfd *abfd)
 	  som_swap_subspace_dictionary_record_out
 	    (som_section_data (subsection)->subspace_dict, &ext_subspace_dict);
 	  amt = sizeof (struct som_subspace_dictionary_record);
-	  if (bfd_bwrite (&ext_subspace_dict, amt, abfd) != amt)
-	    return FALSE;
+	  if (bfd_write (&ext_subspace_dict, amt, abfd) != amt)
+	    return false;
 	}
       /* Goto the next section.  */
       section = section->next;
@@ -4150,8 +4071,8 @@ som_finish_writing (bfd *abfd)
 	  som_swap_subspace_dictionary_record_out
 	    (som_section_data (subsection)->subspace_dict, &ext_subspace_dict);
 	  amt = sizeof (struct som_subspace_dictionary_record);
-	  if (bfd_bwrite (&ext_subspace_dict, amt, abfd) != amt)
-	    return FALSE;
+	  if (bfd_write (&ext_subspace_dict, amt, abfd) != amt)
+	    return false;
 	}
       /* Goto the next section.  */
       section = section->next;
@@ -4164,7 +4085,7 @@ som_finish_writing (bfd *abfd)
      dictionary records.  */
   location = obj_som_file_hdr (abfd)->space_location;
   if (bfd_seek (abfd, location, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   section = abfd->sections;
   for (i = 0; i < num_spaces; i++)
@@ -4179,8 +4100,8 @@ som_finish_writing (bfd *abfd)
       som_swap_space_dictionary_out (som_section_data (section)->space_dict,
 				     &ext_space_dict);
       amt = sizeof (struct som_external_space_dictionary_record);
-      if (bfd_bwrite (&ext_space_dict, amt, abfd) != amt)
-	return FALSE;
+      if (bfd_write (&ext_space_dict, amt, abfd) != amt)
+	return false;
 
       /* Goto the next section.  */
       section = section->next;
@@ -4193,19 +4114,19 @@ som_finish_writing (bfd *abfd)
 
       location = obj_som_file_hdr (abfd)->compiler_location;
       if (bfd_seek (abfd, location, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       som_swap_compilation_unit_out
 	(obj_som_compilation_unit (abfd), &ext_comp_unit);
 
       amt = sizeof (struct som_external_compilation_unit);
-      if (bfd_bwrite (&ext_comp_unit, amt, abfd) != amt)
-	return FALSE;
+      if (bfd_write (&ext_comp_unit, amt, abfd) != amt)
+	return false;
     }
 
   /* Setting of the system_id has to happen very late now that copying of
      BFD private data happens *after* section contents are set.  */
-  if (abfd->flags & (EXEC_P | DYNAMIC))
+  if ((abfd->flags & (EXEC_P | DYNAMIC)) && obj_som_exec_data (abfd))
     obj_som_file_hdr (abfd)->system_id = obj_som_exec_data (abfd)->system_id;
   else if (bfd_get_mach (abfd) == pa20)
     obj_som_file_hdr (abfd)->system_id = CPU_PA_RISC2_0;
@@ -4221,11 +4142,11 @@ som_finish_writing (bfd *abfd)
 
   /* Only thing left to do is write out the file header.  It is always
      at location zero.  Seek there and write it.  */
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
+    return false;
   amt = sizeof (struct som_external_header);
-  if (bfd_bwrite (&ext_header, amt, abfd) != amt)
-    return FALSE;
+  if (bfd_write (&ext_header, amt, abfd) != amt)
+    return false;
 
   /* Now write the exec header.  */
   if (abfd->flags & (EXEC_P | DYNAMIC))
@@ -4236,7 +4157,8 @@ som_finish_writing (bfd *abfd)
 
       exec_header = obj_som_exec_hdr (abfd);
       exec_header->exec_entry = bfd_get_start_address (abfd);
-      exec_header->exec_flags = obj_som_exec_data (abfd)->exec_flags;
+      if (obj_som_exec_data (abfd))
+	exec_header->exec_flags = obj_som_exec_data (abfd)->exec_flags;
 
       /* Oh joys.  Ram some of the BSS data into the DATA section
 	 to be compatible with how the hp linker makes objects
@@ -4255,32 +4177,33 @@ som_finish_writing (bfd *abfd)
 	  || exec_header->exec_dfile + exec_header->exec_dsize > som_length)
 	{
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       som_swap_exec_auxhdr_out (exec_header, &ext_exec_header);
 
       if (bfd_seek (abfd, obj_som_file_hdr (abfd)->aux_header_location,
 		    SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       amt = sizeof (ext_exec_header);
-      if (bfd_bwrite (&ext_exec_header, amt, abfd) != amt)
-	return FALSE;
+      if (bfd_write (&ext_exec_header, amt, abfd) != amt)
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Compute and return the checksum for a SOM file header.  */
 
-static unsigned long
+static uint32_t
 som_compute_checksum (struct som_external_header *hdr)
 {
-  unsigned long checksum, count, i;
-  unsigned long *buffer = (unsigned long *) hdr;
+  size_t count, i;
+  uint32_t checksum;
+  uint32_t *buffer = (uint32_t *) hdr;
 
   checksum = 0;
-  count = sizeof (struct som_external_header) / 4;
+  count = sizeof (*hdr) / sizeof (*buffer);
   for (i = 0; i < count; i++)
     checksum ^= *(buffer + i);
 
@@ -4401,9 +4324,9 @@ som_bfd_derive_misc_symbol_info (bfd *ab
 
   /* The secondary_def field is for "weak" symbols.  */
   if (sym->flags & BSF_WEAK)
-    info->secondary_def = TRUE;
+    info->secondary_def = true;
   else
-    info->secondary_def = FALSE;
+    info->secondary_def = false;
 
   /* The is_comdat, is_common and dup_common fields provide various
      flavors of common.
@@ -4447,7 +4370,7 @@ som_bfd_derive_misc_symbol_info (bfd *ab
 /* Build and write, in one big chunk, the entire symbol table for
    this BFD.  */
 
-static bfd_boolean
+static bool
 som_build_and_write_symbol_table (bfd *abfd)
 {
   unsigned int num_syms = bfd_get_symcount (abfd);
@@ -4456,13 +4379,19 @@ som_build_and_write_symbol_table (bfd *a
   struct som_external_symbol_dictionary_record *som_symtab = NULL;
   unsigned int i;
   bfd_size_type symtab_size;
+  size_t amt;
 
   /* Compute total symbol table size and allocate a chunk of memory
      to hold the symbol table as we build it.  */
-  symtab_size = num_syms;
-  symtab_size *= sizeof (struct som_external_symbol_dictionary_record);
-  som_symtab = bfd_zmalloc (symtab_size);
-  if (som_symtab == NULL && symtab_size != 0)
+  if (_bfd_mul_overflow (num_syms,
+			 sizeof (struct som_external_symbol_dictionary_record),
+			 &amt))
+    {
+      bfd_set_error (bfd_error_no_memory);
+      return false;
+    }
+  som_symtab = bfd_zmalloc (amt);
+  if (som_symtab == NULL && num_syms != 0)
     goto error_return;
 
   /* Walk over each symbol.  */
@@ -4500,23 +4429,24 @@ som_build_and_write_symbol_table (bfd *a
   /* Everything is ready, seek to the right location and
      scribble out the symbol table.  */
   if (bfd_seek (abfd, symtab_location, SEEK_SET) != 0)
-    return FALSE;
+    goto error_return;
 
-  if (bfd_bwrite ((void *) som_symtab, symtab_size, abfd) != symtab_size)
+  symtab_size = num_syms;
+  symtab_size *= sizeof (struct som_external_symbol_dictionary_record);
+  if (bfd_write (som_symtab, symtab_size, abfd) != symtab_size)
     goto error_return;
 
-  if (som_symtab != NULL)
-    free (som_symtab);
-  return TRUE;
+  free (som_symtab);
+  return true;
+
  error_return:
-  if (som_symtab != NULL)
-    free (som_symtab);
-  return FALSE;
+  free (som_symtab);
+  return false;
 }
 
 /* Write an object in SOM format.  */
 
-static bfd_boolean
+static bool
 som_write_object_contents (bfd *abfd)
 {
   if (! abfd->output_has_begun)
@@ -4524,7 +4454,7 @@ som_write_object_contents (bfd *abfd)
       /* Set up fixed parts of the file, space, and subspace headers.
 	 Notify the world that output has begun.  */
       som_prep_headers (abfd);
-      abfd->output_has_begun = TRUE;
+      abfd->output_has_begun = true;
       /* Start writing the object file.  This include all the string
 	 tables, fixup streams, and other portions of the object file.  */
       som_begin_writing (abfd);
@@ -4535,7 +4465,7 @@ som_write_object_contents (bfd *abfd)
 
 /* Read and save the string table associated with the given BFD.  */
 
-static bfd_boolean
+static bool
 som_slurp_string_table (bfd *abfd)
 {
   char *stringtab;
@@ -4543,7 +4473,7 @@ som_slurp_string_table (bfd *abfd)
 
   /* Use the saved version if its available.  */
   if (obj_som_stringtab (abfd) != NULL)
-    return TRUE;
+    return true;
 
   /* I don't think this can currently happen, and I'm not sure it should
      really be an error, but it's better than getting unpredictable results
@@ -4551,24 +4481,22 @@ som_slurp_string_table (bfd *abfd)
   if (obj_som_stringtab_size (abfd) == 0)
     {
       bfd_set_error (bfd_error_no_symbols);
-      return FALSE;
+      return false;
     }
 
   /* Allocate and read in the string table.  */
+  if (bfd_seek (abfd, obj_som_str_filepos (abfd), SEEK_SET) != 0)
+    return false;
   amt = obj_som_stringtab_size (abfd);
-  stringtab = bfd_zmalloc (amt);
+  stringtab = (char *) _bfd_malloc_and_read (abfd, amt + 1, amt);
   if (stringtab == NULL)
-    return FALSE;
-
-  if (bfd_seek (abfd, obj_som_str_filepos (abfd), SEEK_SET) != 0)
-    return FALSE;
-
-  if (bfd_bread (stringtab, amt, abfd) != amt)
-    return FALSE;
+    return false;
+  /* Make sure that the strings are zero-terminated.  */
+  stringtab[amt] = 0;
 
   /* Save our results and return success.  */
   obj_som_stringtab (abfd) = stringtab;
-  return TRUE;
+  return true;
 }
 
 /* Return the amount of data (in bytes) required to hold the symbol
@@ -4632,12 +4560,12 @@ bfd_section_from_som_symbol
 static unsigned int
 som_slurp_symbol_table (bfd *abfd)
 {
-  int symbol_count = bfd_get_symcount (abfd);
-  int symsize = sizeof (struct som_external_symbol_dictionary_record);
+  unsigned int symbol_count = bfd_get_symcount (abfd);
+  size_t symsize = sizeof (struct som_external_symbol_dictionary_record);
   char *stringtab;
   struct som_external_symbol_dictionary_record *buf = NULL, *bufp, *endbufp;
-  som_symbol_type *sym, *symbase;
-  bfd_size_type amt;
+  som_symbol_type *sym, *symbase = NULL;
+  size_t amt;
 
   /* Return saved value if it exists.  */
   if (obj_som_symtab (abfd) != NULL)
@@ -4652,21 +4580,26 @@ som_slurp_symbol_table (bfd *abfd)
 
   stringtab = obj_som_stringtab (abfd);
 
-  amt = symbol_count;
-  amt *= sizeof (som_symbol_type);
-  symbase = bfd_zmalloc (amt);
-  if (symbase == NULL)
-    goto error_return;
-
   /* Read in the external SOM representation.  */
-  amt = symbol_count;
-  amt *= symsize;
-  buf = bfd_malloc (amt);
-  if (buf == NULL && amt != 0)
-    goto error_return;
+  if (_bfd_mul_overflow (symbol_count, symsize, &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      goto error_return;
+    }
   if (bfd_seek (abfd, obj_som_sym_filepos (abfd), SEEK_SET) != 0)
     goto error_return;
-  if (bfd_bread (buf, amt, abfd) != amt)
+  buf = (struct som_external_symbol_dictionary_record *)
+    _bfd_malloc_and_read (abfd, amt, amt);
+  if (buf == NULL)
+    goto error_return;
+
+  if (_bfd_mul_overflow (symbol_count, sizeof (som_symbol_type), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      goto error_return;
+    }
+  symbase = bfd_zmalloc (amt);
+  if (symbase == NULL)
     goto error_return;
 
   /* Iterate over all the symbols and internalize them.  */
@@ -4678,6 +4611,7 @@ som_slurp_symbol_table (bfd *abfd)
 	(flags >> SOM_SYMBOL_TYPE_SH) & SOM_SYMBOL_TYPE_MASK;
       unsigned int symbol_scope =
 	(flags >> SOM_SYMBOL_SCOPE_SH) & SOM_SYMBOL_SCOPE_MASK;
+      bfd_vma offset;
 
       /* I don't think we care about these.  */
       if (symbol_type == ST_SYM_EXT || symbol_type == ST_ARG_EXT)
@@ -4709,9 +4643,16 @@ som_slurp_symbol_table (bfd *abfd)
 
       /* Some reasonable defaults.  */
       sym->symbol.the_bfd = abfd;
-      sym->symbol.name = bfd_getb32 (bufp->name) + stringtab;
+      offset = bfd_getb32 (bufp->name);
+      if (offset < obj_som_stringtab_size (abfd))
+	sym->symbol.name = offset + stringtab;
+      else
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  goto error_return;
+	}
       sym->symbol.value = bfd_getb32 (bufp->symbol_value);
-      sym->symbol.section = 0;
+      sym->symbol.section = NULL;
       sym->symbol.flags = 0;
 
       switch (symbol_type)
@@ -4771,26 +4712,28 @@ som_slurp_symbol_table (bfd *abfd)
 	  sym->symbol.section = bfd_section_from_som_symbol (abfd, bufp);
 	  sym->symbol.value -= sym->symbol.section->vma;
 	  break;
+
+	default:
+	  sym->symbol.section = bfd_und_section_ptr;
+	  break;
 	}
 
       /* Check for a weak symbol.  */
       if (flags & SOM_SYMBOL_SECONDARY_DEF)
 	sym->symbol.flags |= BSF_WEAK;
-
       /* Mark section symbols and symbols used by the debugger.
 	 Note $START$ is a magic code symbol, NOT a section symbol.  */
       if (sym->symbol.name[0] == '$'
 	  && sym->symbol.name[strlen (sym->symbol.name) - 1] == '$'
 	  && !strcmp (sym->symbol.name, sym->symbol.section->name))
 	sym->symbol.flags |= BSF_SECTION_SYM;
-      else if (CONST_STRNEQ (sym->symbol.name, "L$0\002"))
+      else if (startswith (sym->symbol.name, "L$0\002"))
 	{
 	  sym->symbol.flags |= BSF_SECTION_SYM;
 	  sym->symbol.name = sym->symbol.section->name;
 	}
-      else if (CONST_STRNEQ (sym->symbol.name, "L$0\001"))
+      else if (startswith (sym->symbol.name, "L$0\001"))
 	sym->symbol.flags |= BSF_DEBUGGING;
-
       /* Note increment at bottom of loop, since we skip some symbols
 	 we can not include it as part of the for statement.  */
       sym++;
@@ -4803,14 +4746,13 @@ som_slurp_symbol_table (bfd *abfd)
   /* Save our results and return success.  */
   obj_som_symtab (abfd) = symbase;
  successful_return:
-  if (buf != NULL)
-    free (buf);
-  return (TRUE);
+  free (buf);
+  return true;
 
  error_return:
-  if (buf != NULL)
-    free (buf);
-  return FALSE;
+  free (symbase);
+  free (buf);
+  return false;
 }
 
 /* Canonicalize a SOM symbol table.  Return the number of entries
@@ -4841,7 +4783,7 @@ som_canonicalize_symtab (bfd *abfd, asym
 static asymbol *
 som_make_empty_symbol (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (som_symbol_type);
+  size_t amt = sizeof (som_symbol_type);
   som_symbol_type *new_symbol_type = bfd_zalloc (abfd, amt);
 
   if (new_symbol_type == NULL)
@@ -4867,9 +4809,8 @@ som_print_symbol (bfd *abfd,
       fprintf (file, "%s", symbol->name);
       break;
     case bfd_print_symbol_more:
-      fprintf (file, "som ");
-      fprintf_vma (file, symbol->value);
-      fprintf (file, " %lx", (long) symbol->flags);
+      fprintf (file, "som %08" PRIx64 " %x",
+	       (uint64_t) symbol->value, symbol->flags);
       break;
     case bfd_print_symbol_all:
       {
@@ -4883,7 +4824,7 @@ som_print_symbol (bfd *abfd,
     }
 }
 
-static bfd_boolean
+static bool
 som_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 			     const char *name)
 {
@@ -4909,15 +4850,12 @@ som_set_reloc_info (unsigned char *fixup
 		    arelent *internal_relocs,
 		    asection *section,
 		    asymbol **symbols,
-		    bfd_boolean just_count)
+		    unsigned int symcount,
+		    bool just_count)
 {
-  unsigned int op, varname, deallocate_contents = 0;
+  unsigned int deallocate_contents = 0;
   unsigned char *end_fixups = &fixup[end];
-  const struct fixup_format *fp;
-  const char *cp;
-  unsigned char *save_fixup;
-  int variables[26], stack[20], c, v, count, prev_fixup, *sp, saved_unwind_bits;
-  const int *subop;
+  int variables[26], stack[20], count, prev_fixup, *sp, saved_unwind_bits;
   arelent *rptr = internal_relocs;
   unsigned int offset = 0;
 
@@ -4936,10 +4874,14 @@ som_set_reloc_info (unsigned char *fixup
 
   while (fixup < end_fixups)
     {
+      const char *cp;
+      unsigned int op;
+      const struct fixup_format *fp;
+
       /* Save pointer to the start of this fixup.  We'll use
 	 it later to determine if it is necessary to put this fixup
 	 on the queue.  */
-      save_fixup = fixup;
+      unsigned char *save_fixup = fixup;
 
       /* Get the fixup code and its associated format.  */
       op = *fixup++;
@@ -4948,6 +4890,11 @@ som_set_reloc_info (unsigned char *fixup
       /* Handle a request for a previous fixup.  */
       if (*fp->format == 'P')
 	{
+	  if (!reloc_queue[fp->D].reloc)
+	    /* The back-reference doesn't exist.  This is a broken
+	       object file, likely fuzzed.  Just ignore the fixup.  */
+	    continue;
+
 	  /* Get pointer to the beginning of the prev fixup, move
 	     the repeated fixup to the head of the queue.  */
 	  fixup = reloc_queue[fp->D].reloc;
@@ -4985,11 +4932,15 @@ som_set_reloc_info (unsigned char *fixup
       while (*cp)
 	{
 	  /* The variable this pass is going to compute a value for.  */
-	  varname = *cp++;
+	  unsigned int varname = *cp++;
+	  const int *subop;
+	  int c;
 
 	  /* Start processing RHS.  Continue until a NULL or '=' is found.  */
 	  do
 	    {
+	      unsigned v;
+
 	      c = *cp++;
 
 	      /* If this is a variable, push it on the stack.  */
@@ -5002,7 +4953,7 @@ som_set_reloc_info (unsigned char *fixup
 	      else if (ISLOWER (c))
 		{
 		  int bits = (c - 'a') * 8;
-		  for (v = 0; c > 'a'; --c)
+		  for (v = 0; c > 'a' && fixup < end_fixups; --c)
 		    v = (v << 8) | *fixup++;
 		  if (varname == 'V')
 		    v = sign_extend (v, bits);
@@ -5063,7 +5014,7 @@ som_set_reloc_info (unsigned char *fixup
 	    /* A symbol to use in the relocation.  Make a note
 	       of this if we are not just counting.  */
 	    case 'S':
-	      if (! just_count)
+	      if (!just_count && symbols != NULL && (unsigned int) c < symcount)
 		rptr->sym_ptr_ptr = &symbols[c];
 	      break;
 	    /* Argument relocation bits for a function call.  */
@@ -5195,27 +5146,30 @@ som_set_reloc_info (unsigned char *fixup
 		     section contents.  */
 		  rptr->addend = var ('V');
 
-		  if (rptr->addend == 0 && !section->contents)
+		  if (rptr->addend == 0
+		      && (section->flags & SEC_HAS_CONTENTS) != 0)
 		    {
-		      /* Got to read the damn contents first.  We don't
-			 bother saving the contents (yet).  Add it one
-			 day if the need arises.  */
-		      bfd_byte *contents;
-		      if (!bfd_malloc_and_get_section (section->owner, section,
-						       &contents))
+		      if (!section->contents)
 			{
-			  if (contents != NULL)
-			    free (contents);
-			  return (unsigned) -1;
+			  /* Got to read the damn contents first.  We don't
+			     bother saving the contents (yet).  Add it one
+			     day if the need arises.  */
+			  bfd_byte *contents;
+			  if (!bfd_malloc_and_get_section (section->owner,
+							   section, &contents))
+			    {
+			      free (contents);
+			      return (unsigned) -1;
+			    }
+			  section->contents = contents;
+			  deallocate_contents = 1;
 			}
-		      section->contents = contents;
-		      deallocate_contents = 1;
+		      if (offset - var ('L') <= section->size
+			  && section->size - (offset - var ('L')) >= 4)
+			rptr->addend = bfd_get_32 (section->owner,
+						   (section->contents
+						    + offset - var ('L')));
 		    }
-		  else if (rptr->addend == 0)
-		    rptr->addend = bfd_get_32 (section->owner,
-					       (section->contents
-						+ offset - var ('L')));
-
 		}
 	      else
 		rptr->addend = var ('V');
@@ -5229,7 +5183,10 @@ som_set_reloc_info (unsigned char *fixup
 	}
     }
   if (deallocate_contents)
-    free (section->contents);
+    {
+      free (section->contents);
+      section->contents = NULL;
+    }
 
   return count;
 
@@ -5245,69 +5202,69 @@ som_set_reloc_info (unsigned char *fixup
    set to TRUE to indicate it only needs a count of the number
    of actual relocations.  */
 
-static bfd_boolean
+static bool
 som_slurp_reloc_table (bfd *abfd,
 		       asection *section,
 		       asymbol **symbols,
-		       bfd_boolean just_count)
+		       bool just_count)
 {
   unsigned char *external_relocs;
   unsigned int fixup_stream_size;
   arelent *internal_relocs;
   unsigned int num_relocs;
-  bfd_size_type amt;
+  size_t amt;
 
   fixup_stream_size = som_section_data (section)->reloc_size;
   /* If there were no relocations, then there is nothing to do.  */
   if (section->reloc_count == 0)
-    return TRUE;
+    return true;
 
   /* If reloc_count is -1, then the relocation stream has not been
      parsed.  We must do so now to know how many relocations exist.  */
   if (section->reloc_count == (unsigned) -1)
     {
+      /* Read in the external forms.  */
+      if (bfd_seek (abfd, obj_som_reloc_filepos (abfd) + section->rel_filepos,
+		    SEEK_SET) != 0)
+	return false;
       amt = fixup_stream_size;
-      external_relocs = bfd_malloc (amt);
+      external_relocs = _bfd_malloc_and_read (abfd, amt, amt);
       if (external_relocs == NULL)
-	return FALSE;
-      /* Read in the external forms.  */
-      if (bfd_seek (abfd,
-		    obj_som_reloc_filepos (abfd) + section->rel_filepos,
-		    SEEK_SET)
-	  != 0)
-	return FALSE;
-      if (bfd_bread (external_relocs, amt, abfd) != amt)
-	return FALSE;
+	return false;
 
       /* Let callers know how many relocations found.
 	 also save the relocation stream as we will
 	 need it again.  */
       section->reloc_count = som_set_reloc_info (external_relocs,
 						 fixup_stream_size,
-						 NULL, NULL, NULL, TRUE);
+						 NULL, NULL, NULL, 0, true);
 
       som_section_data (section)->reloc_stream = external_relocs;
     }
 
   /* If the caller only wanted a count, then return now.  */
   if (just_count)
-    return TRUE;
+    return true;
 
   num_relocs = section->reloc_count;
   external_relocs = som_section_data (section)->reloc_stream;
   /* Return saved information about the relocations if it is available.  */
   if (section->relocation != NULL)
-    return TRUE;
+    return true;
 
-  amt = num_relocs;
-  amt *= sizeof (arelent);
-  internal_relocs = bfd_zalloc (abfd, (amt));
+  if (_bfd_mul_overflow (num_relocs, sizeof (arelent), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  internal_relocs = bfd_zalloc (abfd, amt);
   if (internal_relocs == NULL)
-    return FALSE;
+    return false;
 
   /* Process and internalize the relocations.  */
   som_set_reloc_info (external_relocs, fixup_stream_size,
-		      internal_relocs, section, symbols, FALSE);
+		      internal_relocs, section, symbols,
+		      bfd_get_symcount (abfd), false);
 
   /* We're done with the external relocations.  Free them.  */
   free (external_relocs);
@@ -5315,7 +5272,7 @@ som_slurp_reloc_table (bfd *abfd,
 
   /* Save our results and return success.  */
   section->relocation = internal_relocs;
-  return TRUE;
+  return true;
 }
 
 /* Return the number of bytes required to store the relocation
@@ -5328,7 +5285,7 @@ som_get_reloc_upper_bound (bfd *abfd, se
      and parse it to determine how many relocations exist.  */
   if (asect->flags & SEC_RELOC)
     {
-      if (! som_slurp_reloc_table (abfd, asect, NULL, TRUE))
+      if (! som_slurp_reloc_table (abfd, asect, NULL, true))
 	return -1;
       return (asect->reloc_count + 1) * sizeof (arelent *);
     }
@@ -5351,7 +5308,7 @@ som_canonicalize_reloc (bfd *abfd,
   arelent *tblptr;
   int count;
 
-  if (! som_slurp_reloc_table (abfd, section, symbols, FALSE))
+  if (! som_slurp_reloc_table (abfd, section, symbols, false))
     return -1;
 
   count = section->reloc_count;
@@ -5368,16 +5325,16 @@ extern const bfd_target hppa_som_vec;
 
 /* A hook to set up object file dependent section information.  */
 
-static bfd_boolean
+static bool
 som_new_section_hook (bfd *abfd, asection *newsect)
 {
   if (!newsect->used_by_bfd)
     {
-      bfd_size_type amt = sizeof (struct som_section_data_struct);
+      size_t amt = sizeof (struct som_section_data_struct);
 
       newsect->used_by_bfd = bfd_zalloc (abfd, amt);
       if (!newsect->used_by_bfd)
-	return FALSE;
+	return false;
     }
   newsect->alignment_power = 3;
 
@@ -5388,7 +5345,7 @@ som_new_section_hook (bfd *abfd, asectio
 /* Copy any private info we understand from the input symbol
    to the output symbol.  */
 
-static bfd_boolean
+static bool
 som_bfd_copy_private_symbol_data (bfd *ibfd,
 				  asymbol *isymbol,
 				  bfd *obfd,
@@ -5400,37 +5357,37 @@ som_bfd_copy_private_symbol_data (bfd *i
   /* One day we may try to grok other private data.  */
   if (ibfd->xvec->flavour != bfd_target_som_flavour
       || obfd->xvec->flavour != bfd_target_som_flavour)
-    return FALSE;
+    return false;
 
   /* The only private information we need to copy is the argument relocation
      bits.  */
   output_symbol->tc_data.ap.hppa_arg_reloc =
     input_symbol->tc_data.ap.hppa_arg_reloc;
 
-  return TRUE;
+  return true;
 }
 
 /* Copy any private info we understand from the input section
    to the output section.  */
 
-static bfd_boolean
+static bool
 som_bfd_copy_private_section_data (bfd *ibfd,
 				   asection *isection,
 				   bfd *obfd,
 				   asection *osection)
 {
-  bfd_size_type amt;
+  size_t amt;
 
   /* One day we may try to grok other private data.  */
   if (ibfd->xvec->flavour != bfd_target_som_flavour
       || obfd->xvec->flavour != bfd_target_som_flavour
       || (!som_is_space (isection) && !som_is_subspace (isection)))
-    return TRUE;
+    return true;
 
   amt = sizeof (struct som_copyable_section_data_struct);
   som_section_data (osection)->copy_data = bfd_zalloc (obfd, amt);
   if (som_section_data (osection)->copy_data == NULL)
-    return FALSE;
+    return false;
 
   memcpy (som_section_data (osection)->copy_data,
 	  som_section_data (isection)->copy_data,
@@ -5438,38 +5395,48 @@ som_bfd_copy_private_section_data (bfd *
 
   /* Reparent if necessary.  */
   if (som_section_data (osection)->copy_data->container)
-    som_section_data (osection)->copy_data->container =
-      som_section_data (osection)->copy_data->container->output_section;
+    {
+      if (som_section_data (osection)->copy_data->container->output_section)
+	som_section_data (osection)->copy_data->container =
+	  som_section_data (osection)->copy_data->container->output_section;
+      else
+	{
+	  /* User has specified a subspace without its containing space.  */
+	  _bfd_error_handler (_("%pB[%pA]: no output section for space %pA"),
+	    obfd, osection, som_section_data (osection)->copy_data->container);
+	  return false;
+	}
+    }
 
-  return TRUE;
+  return true;
 }
 
 /* Copy any private info we understand from the input bfd
    to the output bfd.  */
 
-static bfd_boolean
+static bool
 som_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   /* One day we may try to grok other private data.  */
   if (ibfd->xvec->flavour != bfd_target_som_flavour
       || obfd->xvec->flavour != bfd_target_som_flavour)
-    return TRUE;
+    return true;
 
   /* Allocate some memory to hold the data we need.  */
   obj_som_exec_data (obfd) = bfd_zalloc (obfd, (bfd_size_type) sizeof (struct som_exec_data));
   if (obj_som_exec_data (obfd) == NULL)
-    return FALSE;
+    return false;
 
   /* Now copy the data.  */
   memcpy (obj_som_exec_data (obfd), obj_som_exec_data (ibfd),
 	  sizeof (struct som_exec_data));
 
-  return TRUE;
+  return true;
 }
 
 /* Display the SOM header.  */
 
-static bfd_boolean
+static bool
 som_bfd_print_private_bfd_data (bfd *abfd, void *farg)
 {
   struct som_exec_auxhdr *exec_header;
@@ -5511,13 +5478,13 @@ som_bfd_print_private_bfd_data (bfd *abf
       fprintf (f, "  bss initializer    %#lx\n", (long) exec_header->exec_bfill);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set backend info for sections which can not be described
    in the BFD data structures.  */
 
-bfd_boolean
+bool
 bfd_som_set_section_attributes (asection *section,
 				int defined,
 				int private,
@@ -5527,24 +5494,24 @@ bfd_som_set_section_attributes (asection
   /* Allocate memory to hold the magic information.  */
   if (som_section_data (section)->copy_data == NULL)
     {
-      bfd_size_type amt = sizeof (struct som_copyable_section_data_struct);
+      size_t amt = sizeof (struct som_copyable_section_data_struct);
 
       som_section_data (section)->copy_data = bfd_zalloc (section->owner, amt);
       if (som_section_data (section)->copy_data == NULL)
-	return FALSE;
+	return false;
     }
   som_section_data (section)->copy_data->sort_key = sort_key;
   som_section_data (section)->copy_data->is_defined = defined;
   som_section_data (section)->copy_data->is_private = private;
   som_section_data (section)->copy_data->container = section;
   som_section_data (section)->copy_data->space_number = spnum;
-  return TRUE;
+  return true;
 }
 
 /* Set backend info for subsections which can not be described
    in the BFD data structures.  */
 
-bfd_boolean
+bool
 bfd_som_set_subsection_attributes (asection *section,
 				   asection *container,
 				   int access_ctr,
@@ -5557,11 +5524,11 @@ bfd_som_set_subsection_attributes (asect
   /* Allocate memory to hold the magic information.  */
   if (som_section_data (section)->copy_data == NULL)
     {
-      bfd_size_type amt = sizeof (struct som_copyable_section_data_struct);
+      size_t amt = sizeof (struct som_copyable_section_data_struct);
 
       som_section_data (section)->copy_data = bfd_zalloc (section->owner, amt);
       if (som_section_data (section)->copy_data == NULL)
-	return FALSE;
+	return false;
     }
   som_section_data (section)->copy_data->sort_key = sort_key;
   som_section_data (section)->copy_data->access_control_bits = access_ctr;
@@ -5570,7 +5537,7 @@ bfd_som_set_subsection_attributes (asect
   som_section_data (section)->copy_data->is_comdat = comdat;
   som_section_data (section)->copy_data->is_common = common;
   som_section_data (section)->copy_data->dup_common = dup_common;
-  return TRUE;
+  return true;
 }
 
 /* Set the full SOM symbol type.  SOM needs far more symbol information
@@ -5588,10 +5555,10 @@ bfd_som_set_symbol_type (asymbol *symbol
 /* Attach an auxiliary header to the BFD backend so that it may be
    written into the object file.  */
 
-bfd_boolean
+bool
 bfd_som_attach_aux_hdr (bfd *abfd, int type, char *string)
 {
-  bfd_size_type amt;
+  size_t amt;
 
   if (type == VERSION_AUX_ID)
     {
@@ -5603,7 +5570,7 @@ bfd_som_attach_aux_hdr (bfd *abfd, int t
       amt = sizeof (struct som_string_auxhdr) + len + pad;
       obj_som_version_hdr (abfd) = bfd_zalloc (abfd, amt);
       if (!obj_som_version_hdr (abfd))
-	return FALSE;
+	return false;
       obj_som_version_hdr (abfd)->header_id.type = VERSION_AUX_ID;
       obj_som_version_hdr (abfd)->header_id.length = 4 + len + pad;
       obj_som_version_hdr (abfd)->string_length = len;
@@ -5612,7 +5579,7 @@ bfd_som_attach_aux_hdr (bfd *abfd, int t
     }
   else if (type == COPYRIGHT_AUX_ID)
     {
-      int len = strlen (string);
+      size_t len = strlen (string);
       int pad = 0;
 
       if (len % 4)
@@ -5620,20 +5587,20 @@ bfd_som_attach_aux_hdr (bfd *abfd, int t
       amt = sizeof (struct som_string_auxhdr) + len + pad;
       obj_som_copyright_hdr (abfd) = bfd_zalloc (abfd, amt);
       if (!obj_som_copyright_hdr (abfd))
-	return FALSE;
+	return false;
       obj_som_copyright_hdr (abfd)->header_id.type = COPYRIGHT_AUX_ID;
       obj_som_copyright_hdr (abfd)->header_id.length = len + pad + 4;
       obj_som_copyright_hdr (abfd)->string_length = len;
       memcpy (obj_som_copyright_hdr (abfd)->string, string, len);
       memset (obj_som_copyright_hdr (abfd)->string + len, 0, pad);
     }
-  return TRUE;
+  return true;
 }
 
 /* Attach a compilation unit header to the BFD backend so that it may be
    written into the object file.  */
 
-bfd_boolean
+bool
 bfd_som_attach_compilation_unit (bfd *abfd,
 				 const char *name,
 				 const char *language_name,
@@ -5645,14 +5612,14 @@ bfd_som_attach_compilation_unit (bfd *ab
   n = (struct som_compilation_unit *) bfd_zalloc
     (abfd, (bfd_size_type) sizeof (*n));
   if (n == NULL)
-    return FALSE;
+    return false;
 
 #define STRDUP(f) \
   if (f != NULL) \
     { \
       n->f.name = bfd_alloc (abfd, (bfd_size_type) strlen (f) + 1); \
       if (n->f.name == NULL) \
-	return FALSE; \
+	return false; \
       strcpy (n->f.name, f); \
     }
 
@@ -5665,10 +5632,10 @@ bfd_som_attach_compilation_unit (bfd *ab
 
   obj_som_compilation_unit (abfd) = n;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 som_get_section_contents (bfd *abfd,
 			  sec_ptr section,
 			  void *location,
@@ -5676,15 +5643,15 @@ som_get_section_contents (bfd *abfd,
 			  bfd_size_type count)
 {
   if (count == 0 || ((section->flags & SEC_HAS_CONTENTS) == 0))
-    return TRUE;
-  if ((bfd_size_type) (offset+count) > section->size
-      || bfd_seek (abfd, (file_ptr) (section->filepos + offset), SEEK_SET) != 0
-      || bfd_bread (location, count, abfd) != count)
-    return FALSE; /* On error.  */
-  return TRUE;
+    return true;
+  if ((bfd_size_type) (offset + count) > section->size
+      || bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
+      || bfd_read (location, count, abfd) != count)
+    return false; /* On error.  */
+  return true;
 }
 
-static bfd_boolean
+static bool
 som_set_section_contents (bfd *abfd,
 			  sec_ptr section,
 			  const void *location,
@@ -5696,7 +5663,7 @@ som_set_section_contents (bfd *abfd,
       /* Set up fixed parts of the file, space, and subspace headers.
 	 Notify the world that output has begun.  */
       som_prep_headers (abfd);
-      abfd->output_has_begun = TRUE;
+      abfd->output_has_begun = true;
       /* Start writing the object file.  This include all the string
 	 tables, fixup streams, and other portions of the object file.  */
       som_begin_writing (abfd);
@@ -5706,20 +5673,20 @@ som_set_section_contents (bfd *abfd,
      are not generated at run time by the OS).  */
   if (!som_is_subspace (section)
       || ((section->flags & SEC_HAS_CONTENTS) == 0))
-    return TRUE;
+    return true;
 
   /* Seek to the proper offset within the object file and write the
      data.  */
   offset += som_section_data (section)->subspace_dict->file_loc_init_value;
   if (bfd_seek (abfd, offset, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
-  if (bfd_bwrite (location, count, abfd) != count)
-    return FALSE;
-  return TRUE;
+  if (bfd_write (location, count, abfd) != count)
+    return false;
+  return true;
 }
 
-static bfd_boolean
+static bool
 som_set_arch_mach (bfd *abfd,
 		   enum bfd_architecture arch,
 		   unsigned long machine)
@@ -5728,7 +5695,7 @@ som_set_arch_mach (bfd *abfd,
   return bfd_default_set_arch_mach (abfd, arch, machine);
 }
 
-static bfd_boolean
+static bool
 som_find_nearest_line (bfd *abfd,
 		       asymbol **symbols,
 		       asection *section,
@@ -5738,7 +5705,7 @@ som_find_nearest_line (bfd *abfd,
 		       unsigned int *line_ptr,
 		       unsigned int *discriminator_ptr)
 {
-  bfd_boolean found;
+  bool found;
   asymbol *func;
   bfd_vma low_func;
   asymbol **p;
@@ -5750,13 +5717,13 @@ som_find_nearest_line (bfd *abfd,
 					     & found, filename_ptr,
 					     functionname_ptr, line_ptr,
 					     & somdata (abfd).line_info))
-    return FALSE;
+    return false;
 
   if (found)
-    return TRUE;
+    return true;
 
   if (symbols == NULL)
-    return FALSE;
+    return false;
 
   /* Fallback: find function name from symbols table.  */
   func = NULL;
@@ -5777,13 +5744,13 @@ som_find_nearest_line (bfd *abfd,
     }
 
   if (func == NULL)
-    return FALSE;
+    return false;
 
   *filename_ptr = NULL;
   *functionname_ptr = bfd_asymbol_name (func);
   *line_ptr = 0;
 
-  return TRUE;
+  return true;
 }
 
 static int
@@ -5814,6 +5781,11 @@ som_decode_symclass (asymbol *symbol)
 {
   char c;
 
+  /* If the symbol did not have a scope specified,
+     then it will not have associated section.  */
+  if (symbol == NULL || symbol->section == NULL)
+    return '?';
+
   if (bfd_is_com_section (symbol->section))
     return 'C';
   if (bfd_is_und_section (symbol->section))
@@ -5875,31 +5847,32 @@ som_get_symbol_info (bfd *ignore_abfd AT
 /* Count the number of symbols in the archive symbol table.  Necessary
    so that we can allocate space for all the carsyms at once.  */
 
-static bfd_boolean
+static bool
 som_bfd_count_ar_symbols (bfd *abfd,
 			  struct som_lst_header *lst_header,
 			  symindex *count)
 {
   unsigned int i;
   unsigned char *hash_table;
-  bfd_size_type amt;
+  size_t amt;
   file_ptr lst_filepos;
 
   lst_filepos = bfd_tell (abfd) - sizeof (struct som_external_lst_header);
 
-  amt = lst_header->hash_size * 4;
-  hash_table = bfd_malloc (amt);
-  if (hash_table == NULL && amt != 0)
+  /* Read in the hash table.  The hash table is an array of 32-bit
+     file offsets which point to the hash chains.  */
+  if (_bfd_mul_overflow (lst_header->hash_size, 4, &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  hash_table = _bfd_malloc_and_read (abfd, amt, amt);
+  if (hash_table == NULL && lst_header->hash_size != 0)
     goto error_return;
 
   /* Don't forget to initialize the counter!  */
   *count = 0;
 
-  /* Read in the hash table.  The has table is an array of 32bit file offsets
-     which point to the hash chains.  */
-  if (bfd_bread ((void *) hash_table, amt, abfd) != amt)
-    goto error_return;
-
   /* Walk each chain counting the number of symbols found on that particular
      chain.  */
   for (i = 0; i < lst_header->hash_size; i++)
@@ -5917,7 +5890,7 @@ som_bfd_count_ar_symbols (bfd *abfd,
 
       /* Read in this symbol and update the counter.  */
       amt = sizeof (ext_lst_symbol);
-      if (bfd_bread ((void *) &ext_lst_symbol, amt, abfd) != amt)
+      if (bfd_read (&ext_lst_symbol, amt, abfd) != amt)
 	goto error_return;
 
       (*count)++;
@@ -5930,32 +5903,39 @@ som_bfd_count_ar_symbols (bfd *abfd,
 	  if (next_entry == 0)
 	    break;
 
+	  /* Assume symbols on a chain are in increasing file offset
+	     order.  Otherwise we can loop here with fuzzed input.  */
+	  if (next_entry < hash_val + sizeof (ext_lst_symbol))
+	    {
+	      bfd_set_error (bfd_error_bad_value);
+	      goto error_return;
+	    }
+	  hash_val = next_entry;
+
 	  /* Seek to the next symbol.  */
 	  if (bfd_seek (abfd, lst_filepos + next_entry, SEEK_SET) != 0)
 	    goto error_return;
 
 	  /* Read the symbol in and update the counter.  */
 	  amt = sizeof (ext_lst_symbol);
-	  if (bfd_bread ((void *) &ext_lst_symbol, amt, abfd) != amt)
+	  if (bfd_read (&ext_lst_symbol, amt, abfd) != amt)
 	    goto error_return;
 
 	  (*count)++;
 	}
     }
-  if (hash_table != NULL)
-    free (hash_table);
-  return TRUE;
+  free (hash_table);
+  return true;
 
  error_return:
-  if (hash_table != NULL)
-    free (hash_table);
-  return FALSE;
+  free (hash_table);
+  return false;
 }
 
 /* Fill in the canonical archive symbols (SYMS) from the archive described
    by ABFD and LST_HEADER.  */
 
-static bfd_boolean
+static bool
 som_bfd_fill_in_ar_symbols (bfd *abfd,
 			    struct som_lst_header *lst_header,
 			    carsym **syms)
@@ -5964,19 +5944,21 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
   carsym *set = syms[0];
   unsigned char *hash_table;
   struct som_external_som_entry *som_dict = NULL;
-  bfd_size_type amt;
+  size_t amt;
   file_ptr lst_filepos;
   unsigned int string_loc;
 
   lst_filepos = bfd_tell (abfd) - sizeof (struct som_external_lst_header);
-  amt = lst_header->hash_size * 4;
-  hash_table = bfd_malloc (amt);
-  if (hash_table == NULL && amt != 0)
-    goto error_return;
 
   /* Read in the hash table.  The has table is an array of 32bit file offsets
      which point to the hash chains.  */
-  if (bfd_bread ((void *) hash_table, amt, abfd) != amt)
+  if (_bfd_mul_overflow (lst_header->hash_size, 4, &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  hash_table = _bfd_malloc_and_read (abfd, amt, amt);
+  if (hash_table == NULL && lst_header->hash_size != 0)
     goto error_return;
 
   /* Seek to and read in the SOM dictionary.  We will need this to fill
@@ -5984,12 +5966,15 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
   if (bfd_seek (abfd, lst_filepos + lst_header->dir_loc, SEEK_SET) != 0)
     goto error_return;
 
-  amt = lst_header->module_count * sizeof (struct som_external_som_entry);
-  som_dict = bfd_malloc (amt);
-  if (som_dict == NULL && amt != 0)
-    goto error_return;
-
-  if (bfd_bread ((void *) som_dict, amt, abfd) != amt)
+  if (_bfd_mul_overflow (lst_header->module_count,
+			 sizeof (struct som_external_som_entry), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      goto error_return;
+    }
+  som_dict = (struct som_external_som_entry *)
+    _bfd_malloc_and_read (abfd, amt, amt);
+  if (som_dict == NULL && lst_header->module_count != 0)
     goto error_return;
 
   string_loc = lst_header->string_loc;
@@ -5999,9 +5984,10 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
     {
       struct som_external_lst_symbol_record lst_symbol;
       unsigned int hash_val;
-      unsigned int len;
+      size_t len;
       unsigned char ext_len[4];
       char *name;
+      unsigned int ndx;
 
       /* An empty chain has zero as it's file offset.  */
       hash_val = bfd_getb32 (hash_table + 4 * i);
@@ -6013,7 +5999,7 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
 	goto error_return;
 
       amt = sizeof (lst_symbol);
-      if (bfd_bread ((void *) &lst_symbol, amt, abfd) != amt)
+      if (bfd_read (&lst_symbol, amt, abfd) != amt)
 	goto error_return;
 
       /* Get the name of the symbol, first get the length which is stored
@@ -6027,25 +6013,32 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
 			   + bfd_getb32 (lst_symbol.name) - 4), SEEK_SET) != 0)
 	goto error_return;
 
-      if (bfd_bread (&ext_len, (bfd_size_type) 4, abfd) != 4)
+      if (bfd_read (&ext_len, 4, abfd) != 4)
 	goto error_return;
       len = bfd_getb32 (ext_len);
 
       /* Allocate space for the name and null terminate it too.  */
-      name = bfd_zalloc (abfd, (bfd_size_type) len + 1);
+      if (len == (size_t) -1)
+	{
+	  bfd_set_error (bfd_error_no_memory);
+	  goto error_return;
+	}
+      name = (char *) _bfd_alloc_and_read (abfd, len + 1, len);
       if (!name)
 	goto error_return;
-      if (bfd_bread (name, (bfd_size_type) len, abfd) != len)
-	goto error_return;
-
       name[len] = 0;
       set->name = name;
 
       /* Fill in the file offset.  Note that the "location" field points
 	 to the SOM itself, not the ar_hdr in front of it.  */
-      set->file_offset =
-	bfd_getb32 (som_dict[bfd_getb32 (lst_symbol.som_index)].location)
-	- sizeof (struct ar_hdr);
+      ndx = bfd_getb32 (lst_symbol.som_index);
+      if (ndx >= lst_header->module_count)
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  goto error_return;
+	}
+      set->file_offset
+	= bfd_getb32 (som_dict[ndx].location) - sizeof (struct ar_hdr);
 
       /* Go to the next symbol.  */
       set++;
@@ -6063,7 +6056,7 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
 	    goto error_return;
 
 	  amt = sizeof (lst_symbol);
-	  if (bfd_bread ((void *) &lst_symbol, amt, abfd) != amt)
+	  if (bfd_read (&lst_symbol, amt, abfd) != amt)
 	    goto error_return;
 
 	  /* Seek to the name length & string and read them in.  */
@@ -6071,25 +6064,32 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
 			+ bfd_getb32 (lst_symbol.name) - 4, SEEK_SET) != 0)
 	    goto error_return;
 
-	  if (bfd_bread (&ext_len, (bfd_size_type) 4, abfd) != 4)
+	  if (bfd_read (&ext_len, 4, abfd) != 4)
 	    goto error_return;
 	  len = bfd_getb32 (ext_len);
 
 	  /* Allocate space for the name and null terminate it too.  */
-	  name = bfd_zalloc (abfd, (bfd_size_type) len + 1);
+	  if (len == (size_t) -1)
+	    {
+	      bfd_set_error (bfd_error_no_memory);
+	      goto error_return;
+	    }
+	  name = (char *) _bfd_alloc_and_read (abfd, len + 1, len);
 	  if (!name)
 	    goto error_return;
-
-	  if (bfd_bread (name, (bfd_size_type) len, abfd) != len)
-	    goto error_return;
 	  name[len] = 0;
 	  set->name = name;
 
 	  /* Fill in the file offset.  Note that the "location" field points
 	     to the SOM itself, not the ar_hdr in front of it.  */
-	  set->file_offset =
-	    bfd_getb32 (som_dict[bfd_getb32 (lst_symbol.som_index)].location)
-	    - sizeof (struct ar_hdr);
+	  ndx = bfd_getb32 (lst_symbol.som_index);
+	  if (ndx >= lst_header->module_count)
+	    {
+	      bfd_set_error (bfd_error_bad_value);
+	      goto error_return;
+	    }
+	  set->file_offset
+	    = bfd_getb32 (som_dict[ndx].location) - sizeof (struct ar_hdr);
 
 	  /* Go on to the next symbol.  */
 	  set++;
@@ -6097,23 +6097,19 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
     }
   /* If we haven't died by now, then we successfully read the entire
      archive symbol table.  */
-  if (hash_table != NULL)
-    free (hash_table);
-  if (som_dict != NULL)
-    free (som_dict);
-  return TRUE;
+  free (hash_table);
+  free (som_dict);
+  return true;
 
  error_return:
-  if (hash_table != NULL)
-    free (hash_table);
-  if (som_dict != NULL)
-    free (som_dict);
-  return FALSE;
+  free (hash_table);
+  free (som_dict);
+  return false;
 }
 
 /* Read in the LST from the archive.  */
 
-static bfd_boolean
+static bool
 som_slurp_armap (bfd *abfd)
 {
   struct som_external_lst_header ext_lst_header;
@@ -6122,34 +6118,34 @@ som_slurp_armap (bfd *abfd)
   unsigned int parsed_size;
   struct artdata *ardata = bfd_ardata (abfd);
   char nextname[17];
-  bfd_size_type amt = 16;
-  int i = bfd_bread ((void *) nextname, amt, abfd);
+  size_t amt = 16;
+  int i = bfd_read (nextname, amt, abfd);
 
   /* Special cases.  */
   if (i == 0)
-    return TRUE;
+    return true;
   if (i != 16)
-    return FALSE;
+    return false;
 
-  if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, -16, SEEK_CUR) != 0)
+    return false;
 
   /* For archives without .o files there is no symbol table.  */
-  if (! CONST_STRNEQ (nextname, "/               "))
+  if (! startswith (nextname, "/               "))
     {
-      abfd->has_armap = FALSE;
-      return TRUE;
+      abfd->has_armap = false;
+      return true;
     }
 
   /* Read in and sanity check the archive header.  */
   amt = sizeof (struct ar_hdr);
-  if (bfd_bread ((void *) &ar_header, amt, abfd) != amt)
-    return FALSE;
+  if (bfd_read (&ar_header, amt, abfd) != amt)
+    return false;
 
   if (strncmp (ar_header.ar_fmag, ARFMAG, 2))
     {
       bfd_set_error (bfd_error_malformed_archive);
-      return FALSE;
+      return false;
     }
 
   /* How big is the archive symbol table entry?  */
@@ -6158,7 +6154,7 @@ som_slurp_armap (bfd *abfd)
   if (errno != 0)
     {
       bfd_set_error (bfd_error_malformed_archive);
-      return FALSE;
+      return false;
     }
 
   /* Save off the file offset of the first real user data.  */
@@ -6167,8 +6163,8 @@ som_slurp_armap (bfd *abfd)
   /* Read in the library symbol table.  We'll make heavy use of this
      in just a minute.  */
   amt = sizeof (struct som_external_lst_header);
-  if (bfd_bread ((void *) &ext_lst_header, amt, abfd) != amt)
-    return FALSE;
+  if (bfd_read (&ext_lst_header, amt, abfd) != amt)
+    return false;
 
   som_swap_lst_header_in (&ext_lst_header, &lst_header);
 
@@ -6176,39 +6172,42 @@ som_slurp_armap (bfd *abfd)
   if (lst_header.a_magic != LIBMAGIC)
     {
       bfd_set_error (bfd_error_malformed_archive);
-      return FALSE;
+      return false;
     }
 
   /* Count the number of symbols in the library symbol table.  */
   if (! som_bfd_count_ar_symbols (abfd, &lst_header, &ardata->symdef_count))
-    return FALSE;
+    return false;
 
   /* Get back to the start of the library symbol table.  */
   if (bfd_seek (abfd, (ardata->first_file_filepos - parsed_size
 		       + sizeof (struct som_external_lst_header)),
 		SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   /* Initialize the cache and allocate space for the library symbols.  */
   ardata->cache = 0;
-  amt = ardata->symdef_count;
-  amt *= sizeof (carsym);
+  if (_bfd_mul_overflow (ardata->symdef_count, sizeof (carsym), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
   ardata->symdefs = bfd_alloc (abfd, amt);
   if (!ardata->symdefs)
-    return FALSE;
+    return false;
 
   /* Now fill in the canonical archive symbols.  */
   if (! som_bfd_fill_in_ar_symbols (abfd, &lst_header, &ardata->symdefs))
-    return FALSE;
+    return false;
 
   /* Seek back to the "first" file in the archive.  Note the "first"
      file may be the extended name table.  */
   if (bfd_seek (abfd, ardata->first_file_filepos, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   /* Notify the generic archive code that we have a symbol map.  */
-  abfd->has_armap = TRUE;
-  return TRUE;
+  abfd->has_armap = true;
+  return true;
 }
 
 /* Begin preparing to write a SOM library symbol table.
@@ -6216,7 +6215,7 @@ som_slurp_armap (bfd *abfd)
    As part of the prep work we need to determine the number of symbols
    and the size of the associated string section.  */
 
-static bfd_boolean
+static bool
 som_bfd_prep_for_ar_write (bfd *abfd,
 			   unsigned int *num_syms,
 			   unsigned int *stringsize)
@@ -6245,7 +6244,7 @@ som_bfd_prep_for_ar_write (bfd *abfd,
 	 to it.  It's a little slimey to grab the symbols via obj_som_symtab,
 	 but doing so avoids allocating lots of extra memory.  */
       if (! som_slurp_symbol_table (curr_bfd))
-	return FALSE;
+	return false;
 
       sym = obj_som_symtab (curr_bfd);
       curr_count = bfd_get_symcount (curr_bfd);
@@ -6284,7 +6283,7 @@ som_bfd_prep_for_ar_write (bfd *abfd,
 
       curr_bfd = curr_bfd->archive_next;
     }
-  return TRUE;
+  return true;
 }
 
 /* Hash a symbol name based on the hashing algorithm presented in the
@@ -6306,7 +6305,7 @@ som_bfd_ar_symbol_hash (asymbol *symbol)
 /* Do the bulk of the work required to write the SOM library
    symbol table.  */
 
-static bfd_boolean
+static bool
 som_bfd_ar_write_symbol_stuff (bfd *abfd,
 			       unsigned int nsyms,
 			       unsigned int string_size,
@@ -6320,23 +6319,38 @@ som_bfd_ar_write_symbol_stuff (bfd *abfd
   struct som_external_som_entry *som_dict = NULL;
   struct som_external_lst_symbol_record **last_hash_entry = NULL;
   unsigned int curr_som_offset, som_index = 0;
-  bfd_size_type amt;
+  size_t amt;
   unsigned int module_count;
   unsigned int hash_size;
 
   hash_size = bfd_getb32 (lst.hash_size);
-  amt = hash_size * 4;
+  if (_bfd_mul_overflow (hash_size, 4, &amt))
+    {
+      bfd_set_error (bfd_error_no_memory);
+      return false;
+    }
   hash_table = bfd_zmalloc (amt);
   if (hash_table == NULL && hash_size != 0)
     goto error_return;
 
   module_count = bfd_getb32 (lst.module_count);
-  amt = module_count * sizeof (struct som_external_som_entry);
+  if (_bfd_mul_overflow (module_count,
+			 sizeof (struct som_external_som_entry), &amt))
+    {
+      bfd_set_error (bfd_error_no_memory);
+      goto error_return;
+    }
   som_dict = bfd_zmalloc (amt);
   if (som_dict == NULL && module_count != 0)
     goto error_return;
 
-  amt = hash_size * sizeof (struct som_external_lst_symbol_record *);
+  if (_bfd_mul_overflow (hash_size,
+			 sizeof (struct som_external_lst_symbol_record *),
+			 &amt))
+    {
+      bfd_set_error (bfd_error_no_memory);
+      goto error_return;
+    }
   last_hash_entry = bfd_zmalloc (amt);
   if (last_hash_entry == NULL && hash_size != 0)
     goto error_return;
@@ -6365,12 +6379,16 @@ som_bfd_ar_write_symbol_stuff (bfd *abfd
   curr_som_offset = (curr_som_offset + 0x1) & ~0x1;
 
   /* FIXME should be done with buffers just like everything else...  */
-  amt = nsyms;
-  amt *= sizeof (struct som_external_lst_symbol_record);
+  if (_bfd_mul_overflow (nsyms,
+			 sizeof (struct som_external_lst_symbol_record), &amt))
+    {
+      bfd_set_error (bfd_error_no_memory);
+      goto error_return;
+    }
   lst_syms = bfd_malloc (amt);
   if (lst_syms == NULL && nsyms != 0)
     goto error_return;
-  strings = bfd_malloc ((bfd_size_type) string_size);
+  strings = bfd_malloc (string_size);
   if (strings == NULL && string_size != 0)
     goto error_return;
 
@@ -6515,57 +6533,47 @@ som_bfd_ar_write_symbol_stuff (bfd *abfd
     }
 
   /* Now scribble out the hash table.  */
-  amt = hash_size * 4;
-  if (bfd_bwrite ((void *) hash_table, amt, abfd) != amt)
+  amt = (size_t) hash_size * 4;
+  if (bfd_write (hash_table, amt, abfd) != amt)
     goto error_return;
 
   /* Then the SOM dictionary.  */
-  amt = module_count * sizeof (struct som_external_som_entry);
-  if (bfd_bwrite ((void *) som_dict, amt, abfd) != amt)
+  amt = (size_t) module_count * sizeof (struct som_external_som_entry);
+  if (bfd_write (som_dict, amt, abfd) != amt)
     goto error_return;
 
   /* The library symbols.  */
-  amt = nsyms * sizeof (struct som_external_lst_symbol_record);
-  if (bfd_bwrite ((void *) lst_syms, amt, abfd) != amt)
+  amt = (size_t) nsyms * sizeof (struct som_external_lst_symbol_record);
+  if (bfd_write (lst_syms, amt, abfd) != amt)
     goto error_return;
 
   /* And finally the strings.  */
   amt = string_size;
-  if (bfd_bwrite ((void *) strings, amt, abfd) != amt)
+  if (bfd_write (strings, amt, abfd) != amt)
     goto error_return;
 
-  if (hash_table != NULL)
-    free (hash_table);
-  if (som_dict != NULL)
-    free (som_dict);
-  if (last_hash_entry != NULL)
-    free (last_hash_entry);
-  if (lst_syms != NULL)
-    free (lst_syms);
-  if (strings != NULL)
-    free (strings);
-  return TRUE;
+  free (hash_table);
+  free (som_dict);
+  free (last_hash_entry);
+  free (lst_syms);
+  free (strings);
+  return true;
 
  error_return:
-  if (hash_table != NULL)
-    free (hash_table);
-  if (som_dict != NULL)
-    free (som_dict);
-  if (last_hash_entry != NULL)
-    free (last_hash_entry);
-  if (lst_syms != NULL)
-    free (lst_syms);
-  if (strings != NULL)
-    free (strings);
+  free (hash_table);
+  free (som_dict);
+  free (last_hash_entry);
+  free (lst_syms);
+  free (strings);
 
-  return FALSE;
+  return false;
 }
 
 /* Write out the LST for the archive.
 
    You'll never believe this is really how armaps are handled in SOM...  */
 
-static bfd_boolean
+static bool
 som_write_armap (bfd *abfd,
 		 unsigned int elength,
 		 struct orl *map ATTRIBUTE_UNUSED,
@@ -6578,15 +6586,15 @@ som_write_armap (bfd *abfd,
   struct ar_hdr hdr;
   struct som_external_lst_header lst;
   unsigned char *p;
-  bfd_size_type amt;
+  size_t amt;
   unsigned int csum;
   unsigned int module_count;
 
   /* We'll use this for the archive's date and mode later.  */
-  if (stat (abfd->filename, &statbuf) != 0)
+  if (stat (bfd_get_filename (abfd), &statbuf) != 0)
     {
       bfd_set_error (bfd_error_system_call);
-      return FALSE;
+      return false;
     }
   /* Fudge factor.  */
   bfd_ardata (abfd)->armap_timestamp = statbuf.st_mtime + 60;
@@ -6638,7 +6646,7 @@ som_write_armap (bfd *abfd,
   /* Count how many symbols we will have on the hash chains and the
      size of the associated string table.  */
   if (! som_bfd_prep_for_ar_write (abfd, &nsyms, &stringsize))
-    return FALSE;
+    return false;
 
   lst_size += sizeof (struct som_external_lst_symbol_record) * nsyms;
 
@@ -6682,33 +6690,33 @@ som_write_armap (bfd *abfd,
 
   /* Scribble out the ar header.  */
   amt = sizeof (struct ar_hdr);
-  if (bfd_bwrite ((void *) &hdr, amt, abfd) != amt)
-    return FALSE;
+  if (bfd_write (&hdr, amt, abfd) != amt)
+    return false;
 
   /* Now scribble out the lst header.  */
   amt = sizeof (struct som_external_lst_header);
-  if (bfd_bwrite ((void *) &lst, amt, abfd) != amt)
-    return FALSE;
+  if (bfd_write (&lst, amt, abfd) != amt)
+    return false;
 
   /* Build and write the armap.  */
   if (!som_bfd_ar_write_symbol_stuff (abfd, nsyms, stringsize, lst, elength))
-    return FALSE;
+    return false;
 
   /* Done.  */
-  return TRUE;
+  return true;
 }
 
-/* Free all information we have cached for this BFD.  We can always
-   read it again later if we need it.  */
+/* Throw away some malloc'd information for this BFD.  */
 
-static bfd_boolean
+static bool
 som_bfd_free_cached_info (bfd *abfd)
 {
-  if (bfd_get_format (abfd) == bfd_object)
+  if (bfd_get_format (abfd) == bfd_object
+      || bfd_get_format (abfd) == bfd_core)
     {
       asection *o;
 
-#define FREE(x) if (x != NULL) { free (x); x = NULL; }
+#define FREE(x) do { free (x); x = NULL; } while (0)
       /* Free the native string and symbol tables.  */
       FREE (obj_som_symtab (abfd));
       FREE (obj_som_stringtab (abfd));
@@ -6722,14 +6730,16 @@ som_bfd_free_cached_info (bfd *abfd)
 #undef FREE
     }
 
-  return _bfd_generic_close_and_cleanup (abfd);
+  /* Do not call _bfd_generic_bfd_free_cached_info here.
+     som_write_armap needs to access the bfd objalloc memory.  */
+  return true;
 }
 
 /* End of miscellaneous support functions.  */
 
 /* Linker support functions.  */
 
-static bfd_boolean
+static bool
 som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
 {
   return som_is_subspace (sec) && sec->size > 240000;
@@ -6737,7 +6747,7 @@ som_bfd_link_split_section (bfd *abfd AT
 
 #define som_find_line				_bfd_nosymbols_find_line
 #define som_get_symbol_version_string		_bfd_nosymbols_get_symbol_version_string
-#define	som_close_and_cleanup			som_bfd_free_cached_info
+#define som_close_and_cleanup			_bfd_generic_close_and_cleanup
 #define som_read_ar_hdr				_bfd_generic_read_ar_hdr
 #define som_write_ar_hdr			_bfd_generic_write_ar_hdr
 #define som_openr_next_archived_file		bfd_generic_openr_next_archived_file
@@ -6796,6 +6806,7 @@ const bfd_target hppa_som_vec =
   '/',				/* AR_pad_char.  */
   14,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/som.h ./bfd/som.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/som.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/som.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* HP PA-RISC SOM object file format:  definitions internal to BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    Contributed by the Center for Software Science at the
    University of Utah (pa-gdb-bugs@cs.utah.edu).
@@ -81,7 +81,7 @@ typedef struct som_symbol
 
   /* During object file writing, the offset of the name of this symbol
      in the SOM string table.  */
-  int stringtab_offset;
+  unsigned int stringtab_offset;
 }
 som_symbol_type;
 
@@ -230,14 +230,24 @@ struct som_section_data_struct
 #define R_HPPA_BEGIN_TRY		R_BEGIN_TRY
 #define R_HPPA_END_TRY			R_END_TRY
 
+#define som_find_nearest_line_with_alt \
+  _bfd_nosymbols_find_nearest_line_with_alt
+
 /* Exported functions, mostly for use by GAS.  */
-bfd_boolean  bfd_som_set_section_attributes    (asection *, int, int, unsigned int, int);
-bfd_boolean  bfd_som_set_subsection_attributes (asection *, asection *, int, unsigned int, int, int, int, int);
-void	     bfd_som_set_symbol_type	       (asymbol *, unsigned int);
-bfd_boolean  bfd_som_attach_aux_hdr	       (bfd *, int, char *);
-int **	     hppa_som_gen_reloc_type	       (bfd *, int, int, enum hppa_reloc_field_selector_type_alt, int, asymbol *);
-bfd_boolean  bfd_som_attach_compilation_unit   (bfd *, const char *, const char *, const char *, const char *);
-asection *   bfd_section_from_som_symbol       (bfd *abfd, struct som_external_symbol_dictionary_record *symbol);
+bool bfd_som_set_section_attributes
+  (asection *, int, int, unsigned int, int);
+bool bfd_som_set_subsection_attributes
+  (asection *, asection *, int, unsigned int, int, int, int, int);
+void bfd_som_set_symbol_type
+  (asymbol *, unsigned int);
+bool bfd_som_attach_aux_hdr
+  (bfd *, int, char *);
+int **hppa_som_gen_reloc_type
+  (bfd *, int, int, enum hppa_reloc_field_selector_type_alt, int, asymbol *);
+bool bfd_som_attach_compilation_unit
+  (bfd *, const char *, const char *, const char *, const char *);
+asection *bfd_section_from_som_symbol
+  (bfd *abfd, struct som_external_symbol_dictionary_record *symbol);
 
 #ifdef __cplusplus
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/srec.c ./bfd/srec.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/srec.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/srec.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for s-record objects.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -134,7 +134,7 @@ unsigned int _bfd_srec_len = DEFAULT_CHU
 /* The type of srec output (free or forced to S3).
    This variable can be modified by objcopy's --srec-forceS3
    parameter.  */
-bfd_boolean _bfd_srec_forceS3 = FALSE;
+bool _bfd_srec_forceS3 = false;
 
 /* When writing an S-record file, the S-records can not be output as
    they are seen.  This structure is used to hold them in memory.  */
@@ -178,18 +178,18 @@ tdata_type;
 static void
 srec_init (void)
 {
-  static bfd_boolean inited = FALSE;
+  static bool inited = false;
 
   if (! inited)
     {
-      inited = TRUE;
+      inited = true;
       hex_init ();
     }
 }
 
 /* Set up the S-record tdata information.  */
 
-static bfd_boolean
+static bool
 srec_mkobject (bfd *abfd)
 {
   tdata_type *tdata;
@@ -198,7 +198,7 @@ srec_mkobject (bfd *abfd)
 
   tdata = (tdata_type *) bfd_alloc (abfd, sizeof (tdata_type));
   if (tdata == NULL)
-    return FALSE;
+    return false;
 
   abfd->tdata.srec_data = tdata;
   tdata->type = 1;
@@ -208,21 +208,21 @@ srec_mkobject (bfd *abfd)
   tdata->symtail = NULL;
   tdata->csymbols = NULL;
 
-  return TRUE;
+  return true;
 }
 
 /* Read a byte from an S record file.  Set *ERRORPTR if an error
    occurred.  Return EOF on error or end of file.  */
 
 static int
-srec_get_byte (bfd *abfd, bfd_boolean *errorptr)
+srec_get_byte (bfd *abfd, bool *errorptr)
 {
   bfd_byte c;
 
-  if (bfd_bread (&c, (bfd_size_type) 1, abfd) != 1)
+  if (bfd_read (&c, 1, abfd) != 1)
     {
       if (bfd_get_error () != bfd_error_file_truncated)
-	*errorptr = TRUE;
+	*errorptr = true;
       return EOF;
     }
 
@@ -237,7 +237,7 @@ static void
 srec_bad_byte (bfd *abfd,
 	       unsigned int lineno,
 	       int c,
-	       bfd_boolean error)
+	       bool error)
 {
   if (c == EOF)
     {
@@ -265,14 +265,14 @@ srec_bad_byte (bfd *abfd,
 
 /* Add a new symbol found in an S-record file.  */
 
-static bfd_boolean
+static bool
 srec_new_symbol (bfd *abfd, const char *name, bfd_vma val)
 {
   struct srec_symbol *n;
 
   n = (struct srec_symbol *) bfd_alloc (abfd, sizeof (* n));
   if (n == NULL)
-    return FALSE;
+    return false;
 
   n->name = name;
   n->val = val;
@@ -286,24 +286,24 @@ srec_new_symbol (bfd *abfd, const char *
 
   ++abfd->symcount;
 
-  return TRUE;
+  return true;
 }
 
 /* Read the S record file and turn it into sections.  We create a new
    section for each contiguous set of bytes.  */
 
-static bfd_boolean
+static bool
 srec_scan (bfd *abfd)
 {
   int c;
   unsigned int lineno = 1;
-  bfd_boolean error = FALSE;
+  bool error = false;
   bfd_byte *buf = NULL;
   size_t bufsize = 0;
   asection *sec = NULL;
   char *symbuf = NULL;
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
     goto error_return;
 
   while ((c = srec_get_byte (abfd, &error)) != EOF)
@@ -463,7 +463,7 @@ srec_scan (bfd *abfd)
 
 	    pos = bfd_tell (abfd) - 1;
 
-	    if (bfd_bread (hdr, (bfd_size_type) 3, abfd) != 3)
+	    if (bfd_read (hdr, 3, abfd) != 3)
 	      goto error_return;
 
 	    if (! ISHEX (hdr[1]) || ! ISHEX (hdr[2]))
@@ -493,15 +493,14 @@ srec_scan (bfd *abfd)
 
 	    if (bytes * 2 > bufsize)
 	      {
-		if (buf != NULL)
-		  free (buf);
-		buf = (bfd_byte *) bfd_malloc ((bfd_size_type) bytes * 2);
+		free (buf);
+		buf = bfd_malloc (bytes * 2);
 		if (buf == NULL)
 		  goto error_return;
 		bufsize = bytes * 2;
 	      }
 
-	    if (bfd_bread (buf, (bfd_size_type) bytes * 2, abfd) != bytes * 2)
+	    if (bfd_read (buf, bytes * 2, abfd) != bytes * 2)
 	      goto error_return;
 
 	    /* Ignore the checksum byte.  */
@@ -550,7 +549,7 @@ srec_scan (bfd *abfd)
 		  {
 		    char secbuf[20];
 		    char *secname;
-		    bfd_size_type amt;
+		    size_t amt;
 		    flagword flags;
 
 		    sprintf (secbuf, ".sec%d", bfd_count_sections (abfd) + 1);
@@ -618,10 +617,8 @@ srec_scan (bfd *abfd)
 		    goto error_return;
 		  }
 
-		if (buf != NULL)
-		  free (buf);
-
-		return TRUE;
+		free (buf);
+		return true;
 	      }
 	  }
 	  break;
@@ -631,22 +628,18 @@ srec_scan (bfd *abfd)
   if (error)
     goto error_return;
 
-  if (buf != NULL)
-    free (buf);
-
-  return TRUE;
+  free (buf);
+  return true;
 
  error_return:
-  if (symbuf != NULL)
-    free (symbuf);
-  if (buf != NULL)
-    free (buf);
-  return FALSE;
+  free (symbuf);
+  free (buf);
+  return false;
 }
 
 /* Check whether an existing file is an S-record file.  */
 
-static const bfd_target *
+static bfd_cleanup
 srec_object_p (bfd *abfd)
 {
   void * tdata_save;
@@ -654,8 +647,8 @@ srec_object_p (bfd *abfd)
 
   srec_init ();
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_bread (b, (bfd_size_type) 4, abfd) != 4)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_read (b, 4, abfd) != 4)
     return NULL;
 
   if (b[0] != 'S' || !ISHEX (b[1]) || !ISHEX (b[2]) || !ISHEX (b[3]))
@@ -676,12 +669,12 @@ srec_object_p (bfd *abfd)
   if (abfd->symcount > 0)
     abfd->flags |= HAS_SYMS;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 /* Check whether an existing file is an S-record file with symbols.  */
 
-static const bfd_target *
+static bfd_cleanup
 symbolsrec_object_p (bfd *abfd)
 {
   void * tdata_save;
@@ -689,8 +682,8 @@ symbolsrec_object_p (bfd *abfd)
 
   srec_init ();
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_bread (b, (bfd_size_type) 2, abfd) != 2)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_read (b, 2, abfd) != 2)
     return NULL;
 
   if (b[0] != '$' || b[1] != '$')
@@ -711,17 +704,17 @@ symbolsrec_object_p (bfd *abfd)
   if (abfd->symcount > 0)
     abfd->flags |= HAS_SYMS;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 /* Read in the contents of a section in an S-record file.  */
 
-static bfd_boolean
+static bool
 srec_read_section (bfd *abfd, asection *section, bfd_byte *contents)
 {
   int c;
   bfd_size_type sofar = 0;
-  bfd_boolean error = FALSE;
+  bool error = false;
   bfd_byte *buf = NULL;
   size_t bufsize = 0;
 
@@ -740,9 +733,10 @@ srec_read_section (bfd *abfd, asection *
 
       /* This is called after srec_scan has already been called, so we
 	 ought to know the exact format.  */
-      BFD_ASSERT (c == 'S');
+      if (c != 'S')
+	goto error_return;
 
-      if (bfd_bread (hdr, (bfd_size_type) 3, abfd) != 3)
+      if (bfd_read (hdr, 3, abfd) != 3)
 	goto error_return;
 
       BFD_ASSERT (ISHEX (hdr[1]) && ISHEX (hdr[2]));
@@ -751,15 +745,14 @@ srec_read_section (bfd *abfd, asection *
 
       if (bytes * 2 > bufsize)
 	{
-	  if (buf != NULL)
-	    free (buf);
-	  buf = (bfd_byte *) bfd_malloc ((bfd_size_type) bytes * 2);
+	  free (buf);
+	  buf = bfd_malloc (bytes * 2);
 	  if (buf == NULL)
 	    goto error_return;
 	  bufsize = bytes * 2;
 	}
 
-      if (bfd_bread (buf, (bfd_size_type) bytes * 2, abfd) != bytes * 2)
+      if (bfd_read (buf, bytes * 2, abfd) != bytes * 2)
 	goto error_return;
 
       address = 0;
@@ -767,10 +760,10 @@ srec_read_section (bfd *abfd, asection *
       switch (hdr[0])
 	{
 	default:
-	  BFD_ASSERT (sofar == section->size);
-	  if (buf != NULL)
-	    free (buf);
-	  return TRUE;
+	  if (sofar != section->size)
+	    goto error_return;
+	  free (buf);
+	  return true;
 
 	case '3':
 	  address = HEX (data);
@@ -792,10 +785,10 @@ srec_read_section (bfd *abfd, asection *
 	  if (address != section->vma + sofar)
 	    {
 	      /* We've come to the end of this section.  */
-	      BFD_ASSERT (sofar == section->size);
-	      if (buf != NULL)
-		free (buf);
-	      return TRUE;
+	      if (sofar != section->size)
+		goto error_return;
+	      free (buf);
+	      return true;
 	    }
 
 	  /* Don't consider checksum.  */
@@ -815,22 +808,20 @@ srec_read_section (bfd *abfd, asection *
   if (error)
     goto error_return;
 
-  BFD_ASSERT (sofar == section->size);
-
-  if (buf != NULL)
-    free (buf);
+  if (sofar != section->size)
+    goto error_return;
 
-  return TRUE;
+  free (buf);
+  return true;
 
  error_return:
-  if (buf != NULL)
-    free (buf);
-  return FALSE;
+  free (buf);
+  return false;
 }
 
 /* Get the contents of a section in an S-record file.  */
 
-static bfd_boolean
+static bool
 srec_get_section_contents (bfd *abfd,
 			   asection *section,
 			   void * location,
@@ -838,47 +829,47 @@ srec_get_section_contents (bfd *abfd,
 			   bfd_size_type count)
 {
   if (count == 0)
-    return TRUE;
+    return true;
 
   if (offset + count < count
       || offset + count > section->size)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   if (section->used_by_bfd == NULL)
     {
       section->used_by_bfd = bfd_alloc (abfd, section->size);
       if (section->used_by_bfd == NULL)
-	return FALSE;
+	return false;
 
       if (! srec_read_section (abfd, section,
 			       (bfd_byte *) section->used_by_bfd))
-	return FALSE;
+	return false;
     }
 
   memcpy (location, (bfd_byte *) section->used_by_bfd + offset,
 	  (size_t) count);
 
-  return TRUE;
+  return true;
 }
 
 /* Set the architecture.  We accept an unknown architecture here.  */
 
-static bfd_boolean
+static bool
 srec_set_arch_mach (bfd *abfd, enum bfd_architecture arch, unsigned long mach)
 {
   if (arch != bfd_arch_unknown)
     return bfd_default_set_arch_mach (abfd, arch, mach);
 
   abfd->arch_info = & bfd_default_arch_struct;
-  return TRUE;
+  return true;
 }
 
 /* We have to save up all the Srecords for a splurge before output.  */
 
-static bfd_boolean
+static bool
 srec_set_section_contents (bfd *abfd,
 			   sec_ptr section,
 			   const void * location,
@@ -891,7 +882,7 @@ srec_set_section_contents (bfd *abfd,
 
   entry = (srec_data_list_type *) bfd_alloc (abfd, sizeof (* entry));
   if (entry == NULL)
-    return FALSE;
+    return false;
 
   if (bytes_to_do
       && (section->flags & SEC_ALLOC)
@@ -901,7 +892,7 @@ srec_set_section_contents (bfd *abfd,
 
       data = (bfd_byte *) bfd_alloc (abfd, bytes_to_do);
       if (data == NULL)
-	return FALSE;
+	return false;
       memcpy ((void *) data, location, (size_t) bytes_to_do);
 
       /* If _bfd_srec_forceS3 is TRUE then always select S3 records,
@@ -943,14 +934,14 @@ srec_set_section_contents (bfd *abfd,
 	    tdata->tail = entry;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Write a record of type, of the supplied number of bytes. The
    supplied bytes and length don't have a checksum. That's worked out
    here.  */
 
-static bfd_boolean
+static bool
 srec_write_record (bfd *abfd,
 		   unsigned int type,
 		   bfd_vma address,
@@ -1009,24 +1000,24 @@ srec_write_record (bfd *abfd,
   *dst++ = '\n';
   wrlen = dst - buffer;
 
-  return bfd_bwrite ((void *) buffer, wrlen, abfd) == wrlen;
+  return bfd_write (buffer, wrlen, abfd) == wrlen;
 }
 
-static bfd_boolean
+static bool
 srec_write_header (bfd *abfd)
 {
-  unsigned int len = strlen (abfd->filename);
+  unsigned int len = strlen (bfd_get_filename (abfd));
 
   /* I'll put an arbitrary 40 char limit on header size.  */
   if (len > 40)
     len = 40;
 
   return srec_write_record (abfd, 0, (bfd_vma) 0,
-			    (bfd_byte *) abfd->filename,
-			    (bfd_byte *) abfd->filename + len);
+			    (bfd_byte *) bfd_get_filename (abfd),
+			    (bfd_byte *) bfd_get_filename (abfd) + len);
 }
 
-static bfd_boolean
+static bool
 srec_write_section (bfd *abfd,
 		    tdata_type *tdata,
 		    srec_data_list_type *list)
@@ -1061,23 +1052,23 @@ srec_write_section (bfd *abfd,
 			       address,
 			       location,
 			       location + octets_this_chunk))
-	return FALSE;
+	return false;
 
       octets_written += octets_this_chunk;
       location += octets_this_chunk;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 srec_write_terminator (bfd *abfd, tdata_type *tdata)
 {
   return srec_write_record (abfd, 10 - tdata->type,
 			    abfd->start_address, NULL, NULL);
 }
 
-static bfd_boolean
+static bool
 srec_write_symbols (bfd *abfd)
 {
   /* Dump out the symbols of a bfd.  */
@@ -1089,50 +1080,46 @@ srec_write_symbols (bfd *abfd)
       bfd_size_type len;
       asymbol **table = bfd_get_outsymbols (abfd);
 
-      len = strlen (abfd->filename);
-      if (bfd_bwrite ("$$ ", (bfd_size_type) 3, abfd) != 3
-	  || bfd_bwrite (abfd->filename, len, abfd) != len
-	  || bfd_bwrite ("\r\n", (bfd_size_type) 2, abfd) != 2)
-	return FALSE;
+      len = strlen (bfd_get_filename (abfd));
+      if (bfd_write ("$$ ", 3, abfd) != 3
+	  || bfd_write (bfd_get_filename (abfd), len, abfd) != len
+	  || bfd_write ("\r\n", 2, abfd) != 2)
+	return false;
 
       for (i = 0; i < count; i++)
 	{
 	  asymbol *s = table[i];
+
 	  if (! bfd_is_local_label (abfd, s)
-	      && (s->flags & BSF_DEBUGGING) == 0)
+	      && (s->flags & BSF_DEBUGGING) == 0
+	      && s->section != NULL
+	      && s->section->output_section != NULL)
 	    {
 	      /* Just dump out non debug symbols.  */
-	      char buf[43], *p;
+	      char buf[43];
 
 	      len = strlen (s->name);
-	      if (bfd_bwrite ("  ", (bfd_size_type) 2, abfd) != 2
-		  || bfd_bwrite (s->name, len, abfd) != len)
-		return FALSE;
-
-	      sprintf_vma (buf + 2, (s->value
-				     + s->section->output_section->lma
-				     + s->section->output_offset));
-	      p = buf + 2;
-	      while (p[0] == '0' && p[1] != 0)
-		p++;
-	      len = strlen (p);
-	      p[len] = '\r';
-	      p[len + 1] = '\n';
-	      *--p = '$';
-	      *--p = ' ';
-	      len += 4;
-	      if (bfd_bwrite (p, len, abfd) != len)
-		return FALSE;
+	      if (bfd_write ("  ", 2, abfd) != 2
+		  || bfd_write (s->name, len, abfd) != len)
+		return false;
+
+	      sprintf (buf, " $%" PRIx64 "\r\n",
+		       (uint64_t) (s->value
+				   + s->section->output_section->lma
+				   + s->section->output_offset));
+	      len = strlen (buf);
+	      if (bfd_write (buf, len, abfd) != len)
+		return false;
 	    }
 	}
-      if (bfd_bwrite ("$$ \r\n", (bfd_size_type) 5, abfd) != 5)
-	return FALSE;
+      if (bfd_write ("$$ \r\n", 5, abfd) != 5)
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 internal_srec_write_object_contents (bfd *abfd, int symbols)
 {
   tdata_type *tdata = abfd->tdata.srec_data;
@@ -1141,11 +1128,11 @@ internal_srec_write_object_contents (bfd
   if (symbols)
     {
       if (! srec_write_symbols (abfd))
-	return FALSE;
+	return false;
     }
 
   if (! srec_write_header (abfd))
-    return FALSE;
+    return false;
 
   /* Now wander though all the sections provided and output them.  */
   list = tdata->head;
@@ -1153,19 +1140,19 @@ internal_srec_write_object_contents (bfd
   while (list != (srec_data_list_type *) NULL)
     {
       if (! srec_write_section (abfd, tdata, list))
-	return FALSE;
+	return false;
       list = list->next;
     }
   return srec_write_terminator (abfd, tdata);
 }
 
-static bfd_boolean
+static bool
 srec_write_object_contents (bfd *abfd)
 {
   return internal_srec_write_object_contents (abfd, 0);
 }
 
-static bfd_boolean
+static bool
 symbolsrec_write_object_contents (bfd *abfd)
 {
   return internal_srec_write_object_contents (abfd, 1);
@@ -1262,6 +1249,7 @@ srec_print_symbol (bfd *abfd,
 #define srec_bfd_is_local_label_name		  bfd_generic_is_local_label_name
 #define srec_get_lineno				  _bfd_nosymbols_get_lineno
 #define srec_find_nearest_line			  _bfd_nosymbols_find_nearest_line
+#define srec_find_nearest_line_with_alt		  _bfd_nosymbols_find_nearest_line_with_alt
 #define srec_find_line				  _bfd_nosymbols_find_line
 #define srec_find_inliner_info			  _bfd_nosymbols_find_inliner_info
 #define srec_make_empty_symbol			  _bfd_generic_make_empty_symbol
@@ -1305,6 +1293,7 @@ const bfd_target srec_vec =
   ' ',				/* AR_pad_char.  */
   16,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
@@ -1361,6 +1350,7 @@ const bfd_target symbolsrec_vec =
   ' ',				/* AR_pad_char.  */
   16,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/stabs.c ./bfd/stabs.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/stabs.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/stabs.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Stabs in sections linking support.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -112,7 +112,23 @@ struct stab_section_info
   bfd_size_type stridxs[1];
 };
 
-
+/*
+EXTERNAL
+.{* This structure is used to keep track of stabs in sections
+.   information while linking.  *}
+.
+.struct stab_info
+.{
+.  {* A hash table used to hold stabs strings.  *}
+.  struct bfd_strtab_hash *strings;
+.  {* The header file hash table.  *}
+.  struct bfd_hash_table includes;
+.  {* The first .stabstr section.  *}
+.  struct bfd_section *stabstr;
+.};
+.
+*/
+
 /* The function to create a new entry in the header file hash table.  */
 
 static struct bfd_hash_entry *
@@ -140,11 +156,22 @@ stab_link_includes_newfunc (struct bfd_h
 
   return (struct bfd_hash_entry *) ret;
 }
-
-/* This function is called for each input file from the add_symbols
-   pass of the linker.  */
 
-bfd_boolean
+/*
+INTERNAL_FUNCTION
+	_bfd_link_section_stabs
+
+SYNOPSIS
+	bool _bfd_link_section_stabs
+	  (bfd *, struct stab_info *, asection *, asection *, void **,
+	   bfd_size_type *);
+
+DESCRIPTION
+	This function is called for each input file from the add_symbols
+	pass of the linker.
+*/
+
+bool
 _bfd_link_section_stabs (bfd *abfd,
 			 struct stab_info *sinfo,
 			 asection *stabsec,
@@ -152,7 +179,7 @@ _bfd_link_section_stabs (bfd *abfd,
 			 void * *psecinfo,
 			 bfd_size_type *pstring_offset)
 {
-  bfd_boolean first;
+  bool first;
   bfd_size_type count, amt;
   struct stab_section_info *secinfo;
   bfd_byte *stabbuf = NULL;
@@ -162,39 +189,41 @@ _bfd_link_section_stabs (bfd *abfd,
   bfd_size_type *pstridx;
 
   if (stabsec->size == 0
-      || stabstrsec->size == 0)
+      || stabstrsec->size == 0
+      || (stabsec->flags & SEC_HAS_CONTENTS) == 0
+      || (stabstrsec->flags & SEC_HAS_CONTENTS) == 0)
     /* This file does not contain stabs debugging information.  */
-    return TRUE;
+    return true;
 
   if (stabsec->size % STABSIZE != 0)
     /* Something is wrong with the format of these stab symbols.
        Don't try to optimize them.  */
-    return TRUE;
+    return true;
 
   if ((stabstrsec->flags & SEC_RELOC) != 0)
     /* We shouldn't see relocations in the strings, and we aren't
        prepared to handle them.  */
-    return TRUE;
+    return true;
 
   if (bfd_is_abs_section (stabsec->output_section)
       || bfd_is_abs_section (stabstrsec->output_section))
     /* At least one of the sections is being discarded from the
        link, so we should just ignore them.  */
-    return TRUE;
+    return true;
 
-  first = FALSE;
+  first = false;
 
   if (sinfo->stabstr == NULL)
     {
       flagword flags;
 
       /* Initialize the stabs information we need to keep track of.  */
-      first = TRUE;
+      first = true;
       sinfo->strings = _bfd_stringtab_init ();
       if (sinfo->strings == NULL)
 	goto error_return;
       /* Make sure the first byte is zero.  */
-      (void) _bfd_stringtab_add (sinfo->strings, "", TRUE, TRUE);
+      (void) _bfd_stringtab_add (sinfo->strings, "", true, true);
       if (! bfd_hash_table_init (&sinfo->includes,
 				 stab_link_includes_newfunc,
 				 sizeof (struct stab_link_includes_entry)))
@@ -267,7 +296,7 @@ _bfd_link_section_stabs (bfd *abfd,
 	      ++skip;
 	      continue;
 	    }
-	  first = FALSE;
+	  first = false;
 	}
 
       /* Store the string in the hash table, and record the index.  */
@@ -282,7 +311,7 @@ _bfd_link_section_stabs (bfd *abfd,
 	  goto error_return;
 	}
       string = (char *) stabstrbuf + symstroff;
-      *pstridx = _bfd_stringtab_add (sinfo->strings, string, TRUE, TRUE);
+      *pstridx = _bfd_stringtab_add (sinfo->strings, string, true, true);
 
       /* An N_BINCL symbol indicates the start of the stabs entries
 	 for a header file.  We need to scan ahead to the next N_EINCL
@@ -362,7 +391,7 @@ _bfd_link_section_stabs (bfd *abfd,
 	  /* If we have already included a header file with the same
 	     value, then replaced this one with an N_EXCL symbol.  */
 	  incl_entry = (struct stab_link_includes_entry * )
-	    bfd_hash_lookup (&sinfo->includes, string, TRUE, TRUE);
+	    bfd_hash_lookup (&sinfo->includes, string, true, true);
 	  if (incl_entry == NULL)
 	    goto error_return;
 
@@ -491,27 +520,34 @@ _bfd_link_section_stabs (bfd *abfd,
       BFD_ASSERT (offset != 0);
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (stabbuf != NULL)
-    free (stabbuf);
-  if (stabstrbuf != NULL)
-    free (stabstrbuf);
-  return FALSE;
+  free (stabbuf);
+  free (stabstrbuf);
+  return false;
 }
-
-/* This function is called for each input file before the stab
-   section is relocated.  It discards stab entries for discarded
-   functions and variables.  The function returns TRUE iff
-   any entries have been deleted.
+
+/*
+INTERNAL_FUNCTION
+	_bfd_discard_section_stabs
+
+SYNOPSIS
+	bool _bfd_discard_section_stabs
+	  (bfd *, asection *, void *, bool (*) (bfd_vma, void *), void *);
+
+DESCRIPTION
+	This function is called for each input file before the stab
+	section is relocated.  It discards stab entries for discarded
+	functions and variables.  The function returns TRUE iff
+	any entries have been deleted.
 */
 
-bfd_boolean
+bool
 _bfd_discard_section_stabs (bfd *abfd,
 			    asection *stabsec,
 			    void * psecinfo,
-			    bfd_boolean (*reloc_symbol_deleted_p) (bfd_vma, void *),
+			    bool (*reloc_symbol_deleted_p) (bfd_vma, void *),
 			    void * cookie)
 {
   bfd_size_type count, amt;
@@ -522,26 +558,26 @@ _bfd_discard_section_stabs (bfd *abfd,
   bfd_size_type *pstridx;
   int deleting;
 
-  if (stabsec->size == 0)
+  if (stabsec->size == 0 || (stabsec->flags & SEC_HAS_CONTENTS) == 0)
     /* This file does not contain stabs debugging information.  */
-    return FALSE;
+    return false;
 
   if (stabsec->size % STABSIZE != 0)
     /* Something is wrong with the format of these stab symbols.
        Don't try to optimize them.  */
-    return FALSE;
+    return false;
 
   if ((stabsec->output_section != NULL
        && bfd_is_abs_section (stabsec->output_section)))
     /* At least one of the sections is being discarded from the
        link, so we should just ignore them.  */
-    return FALSE;
+    return false;
 
   /* We should have initialized our data in _bfd_link_section_stabs.
      If there was some bizarre error reading the string sections, though,
      we might not have.  Bail rather than asserting.  */
   if (psecinfo == NULL)
-    return FALSE;
+    return false;
 
   count = stabsec->rawsize / STABSIZE;
   secinfo = (struct stab_section_info *) psecinfo;
@@ -648,15 +684,24 @@ _bfd_discard_section_stabs (bfd *abfd,
   return skip > 0;
 
  error_return:
-  if (stabbuf != NULL)
-    free (stabbuf);
-  return FALSE;
+  free (stabbuf);
+  return false;
 }
 
-/* Write out the stab section.  This is called with the relocated
-   contents.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_write_section_stabs
+
+SYNOPSIS
+	bool _bfd_write_section_stabs
+	  (bfd *, struct stab_info *, asection *, void **, bfd_byte *);
+
+DESCRIPTION
+	Write out the stab section.  This is called with the relocated
+	contents.
+*/
 
-bfd_boolean
+bool
 _bfd_write_section_stabs (bfd *output_bfd,
 			  struct stab_info *sinfo,
 			  asection *stabsec,
@@ -725,14 +770,23 @@ _bfd_write_section_stabs (bfd *output_bf
 				   stabsec->size);
 }
 
-/* Write out the .stabstr section.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_write_stab_strings
+
+SYNOPSIS
+	bool _bfd_write_stab_strings (bfd *, struct stab_info *);
 
-bfd_boolean
+DESCRIPTION
+	Write out the .stabstr section.
+*/
+
+bool
 _bfd_write_stab_strings (bfd *output_bfd, struct stab_info *sinfo)
 {
   if (bfd_is_abs_section (sinfo->stabstr->output_section))
     /* The section was discarded from the link.  */
-    return TRUE;
+    return true;
 
   BFD_ASSERT ((sinfo->stabstr->output_offset
 	       + _bfd_stringtab_size (sinfo->strings))
@@ -742,21 +796,30 @@ _bfd_write_stab_strings (bfd *output_bfd
 		(file_ptr) (sinfo->stabstr->output_section->filepos
 			    + sinfo->stabstr->output_offset),
 		SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   if (! _bfd_stringtab_emit (output_bfd, sinfo->strings))
-    return FALSE;
+    return false;
 
   /* We no longer need the stabs information.  */
   _bfd_stringtab_free (sinfo->strings);
   bfd_hash_table_free (&sinfo->includes);
 
-  return TRUE;
+  return true;
 }
 
-/* Adjust an address in the .stab section.  Given OFFSET within
-   STABSEC, this returns the new offset in the adjusted stab section,
-   or -1 if the address refers to a stab which has been removed.  */
+/*
+INTERNAL_FUNCTION
+	_bfd_stab_section_offset
+
+SYNOPSIS
+	bfd_vma _bfd_stab_section_offset (asection *, void *, bfd_vma);
+
+DESCRIPTION
+	Adjust an address in the .stab section.  Given OFFSET within
+	STABSEC, this returns the new offset in the adjusted stab section,
+	or -1 if the address refers to a stab which has been removed.
+*/
 
 bfd_vma
 _bfd_stab_section_offset (asection *stabsec,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/stab-syms.c ./bfd/stab-syms.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/stab-syms.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/stab-syms.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Table of stab names for the BFD library.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -44,6 +44,17 @@
   __define_name (N_INDR, "INDR") \
   __define_name (N_WARNING, "WARNING")
 
+/*
+FUNCTION
+	bfd_get_stab_name
+
+SYNOPSIS
+	const char *bfd_get_stab_name (int);
+
+DESCRIPTION
+	Get the name of a stabs type code.
+*/
+
 const char *
 bfd_get_stab_name (int code)
 {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/stamp-h.in ./bfd/stamp-h.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/stamp-h.in	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/stamp-h.in	1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-timestamp
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/syms.c ./bfd/syms.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/syms.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/syms.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic symbol-table support for the BFD library.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -168,19 +168,12 @@ DOCDD
 INODE
 typedef asymbol, symbol handling functions, Mini Symbols, Symbols
 
-*/
-/*
 SUBSECTION
 	typedef asymbol
 
 	An <<asymbol>> has the form:
 
-*/
-
-/*
 CODE_FRAGMENT
-
-.
 .typedef struct bfd_symbol
 .{
 .  {* A pointer to the BFD which owns the symbol. This information
@@ -307,6 +300,9 @@ CODE_FRAGMENT
 .     with this name and type in use.  BSF_OBJECT must also be set.  *}
 .#define BSF_GNU_UNIQUE          (1 << 23)
 .
+.  {* This section symbol should be included in the symbol table.  *}
+.#define BSF_SECTION_SYM_USED    (1 << 24)
+.
 .  flagword flags;
 .
 .  {* A pointer to the section to which this symbol is
@@ -324,6 +320,28 @@ CODE_FRAGMENT
 .}
 .asymbol;
 .
+
+EXTERNAL
+.typedef enum bfd_print_symbol
+.{
+.  bfd_print_symbol_name,
+.  bfd_print_symbol_more,
+.  bfd_print_symbol_all
+.} bfd_print_symbol_type;
+.
+.{* Information about a symbol that nm needs.  *}
+.
+.typedef struct _symbol_info
+.{
+.  symvalue value;
+.  char type;
+.  const char *name;		{* Symbol name.  *}
+.  unsigned char stab_type;	{* Stab type.  *}
+.  char stab_other;		{* Stab other.  *}
+.  short stab_desc;		{* Stab desc.  *}
+.  const char *stab_name;	{* String for stab type.  *}
+.} symbol_info;
+.
 */
 
 #include "sysdep.h"
@@ -361,23 +379,23 @@ FUNCTION
 	bfd_is_local_label
 
 SYNOPSIS
-	bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
+	bool bfd_is_local_label (bfd *abfd, asymbol *sym);
 
 DESCRIPTION
 	Return TRUE if the given symbol @var{sym} in the BFD @var{abfd} is
 	a compiler generated local label, else return FALSE.
 */
 
-bfd_boolean
+bool
 bfd_is_local_label (bfd *abfd, asymbol *sym)
 {
   /* The BSF_SECTION_SYM check is needed for IA-64, where every label that
      starts with '.' is local.  This would accidentally catch section names
      if we didn't reject them here.  */
   if ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_FILE | BSF_SECTION_SYM)) != 0)
-    return FALSE;
+    return false;
   if (sym->name == NULL)
-    return FALSE;
+    return false;
   return bfd_is_local_label_name (abfd, sym->name);
 }
 
@@ -386,7 +404,7 @@ FUNCTION
 	bfd_is_local_label_name
 
 SYNOPSIS
-	bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
+	bool bfd_is_local_label_name (bfd *abfd, const char *name);
 
 DESCRIPTION
 	Return TRUE if a symbol with the name @var{name} in the BFD
@@ -404,7 +422,7 @@ FUNCTION
 	bfd_is_target_special_symbol
 
 SYNOPSIS
-	bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
+	bool bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
 
 DESCRIPTION
 	Return TRUE iff a symbol @var{sym} in the BFD @var{abfd} is something
@@ -437,7 +455,7 @@ FUNCTION
 	bfd_set_symtab
 
 SYNOPSIS
-	bfd_boolean bfd_set_symtab
+	bool bfd_set_symtab
 	  (bfd *abfd, asymbol **location, unsigned int count);
 
 DESCRIPTION
@@ -446,18 +464,18 @@ DESCRIPTION
 	will be written.
 */
 
-bfd_boolean
+bool
 bfd_set_symtab (bfd *abfd, asymbol **location, unsigned int symcount)
 {
   if (abfd->format != bfd_object || bfd_read_p (abfd))
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   abfd->outsymbols = location;
   abfd->symcount = symcount;
-  return TRUE;
+  return true;
 }
 
 /*
@@ -538,7 +556,7 @@ DESCRIPTION
 asymbol *
 _bfd_generic_make_empty_symbol (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (asymbol);
+  size_t amt = sizeof (asymbol);
   asymbol *new_symbol = (asymbol *) bfd_zalloc (abfd, amt);
   if (new_symbol)
     new_symbol->the_bfd = abfd;
@@ -551,11 +569,10 @@ FUNCTION
 
 DESCRIPTION
 	Create a new <<asymbol>> structure for the BFD @var{abfd},
-	to be used as a debugging symbol.  Further details of its use have
-	yet to be worked out.
+	to be used as a debugging symbol.
 
-.#define bfd_make_debug_symbol(abfd,ptr,size) \
-.	BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
+.#define bfd_make_debug_symbol(abfd) \
+.	BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd))
 .
 */
 
@@ -565,30 +582,15 @@ struct section_to_type
   char type;
 };
 
-/* Map section names to POSIX/BSD single-character symbol types.
+/* Map special section names to POSIX/BSD single-character symbol types.
    This table is probably incomplete.  It is sorted for convenience of
    adding entries.  Since it is so short, a linear search is used.  */
 static const struct section_to_type stt[] =
 {
-  {".bss", 'b'},
-  {"code", 't'},		/* MRI .text */
-  {".data", 'd'},
-  {"*DEBUG*", 'N'},
-  {".debug", 'N'},		/* MSVC's .debug (non-standard debug syms) */
   {".drectve", 'i'},		/* MSVC's .drective section */
   {".edata", 'e'},		/* MSVC's .edata (export) section */
-  {".fini", 't'},		/* ELF fini section */
   {".idata", 'i'},		/* MSVC's .idata (import) section */
-  {".init", 't'},		/* ELF init section */
   {".pdata", 'p'},		/* MSVC's .pdata (stack unwind) section */
-  {".rdata", 'r'},		/* Read only data.  */
-  {".rodata", 'r'},		/* Read only data.  */
-  {".sbss", 's'},		/* Small BSS (uninitialized data).  */
-  {".scommon", 'c'},		/* Small common.  */
-  {".sdata", 'g'},		/* Small initialized data.  */
-  {".text", 't'},
-  {"vars", 'd'},		/* MRI .data */
-  {"zerovars", 'b'},		/* MRI .bss */
   {0, 0}
 };
 
@@ -596,8 +598,7 @@ static const struct section_to_type stt[
    section S, or '?' for an unknown COFF section.
 
    Check for leading strings which match, followed by a number, '.',
-   or '$' so .text5 matches the .text entry, but .init_array doesn't
-   match the .init entry.  */
+   or '$' so .idata5 matches the .idata entry.  */
 
 static char
 coff_section_type (const char *s)
@@ -619,7 +620,7 @@ coff_section_type (const char *s)
    SECTION, or '?' for an unknown section.  This uses section flags to
    identify sections.
 
-   FIXME These types are unhandled: c, i, e, p.  If we handled these also,
+   FIXME These types are unhandled: e, i, p.  If we handled these also,
    we could perhaps obsolete coff_section_type.  */
 
 static char
@@ -655,20 +656,29 @@ decode_section_type (const struct bfd_se
 FUNCTION
 	bfd_decode_symclass
 
+SYNOPSIS
+	int bfd_decode_symclass (asymbol *symbol);
+
 DESCRIPTION
 	Return a character corresponding to the symbol
 	class of @var{symbol}, or '?' for an unknown class.
-
-SYNOPSIS
-	int bfd_decode_symclass (asymbol *symbol);
 */
 int
 bfd_decode_symclass (asymbol *symbol)
 {
   char c;
 
+  /* Paranoia...  */
+  if (symbol == NULL || symbol->section == NULL)
+    return '?';
+
   if (symbol->section && bfd_is_com_section (symbol->section))
-    return 'C';
+    {
+      if (symbol->section->flags & SEC_SMALL_DATA)
+	return 'c';
+      else
+	return 'C';
+    }
   if (bfd_is_und_section (symbol->section))
     {
       if (symbol->flags & BSF_WEAK)
@@ -705,9 +715,9 @@ bfd_decode_symclass (asymbol *symbol)
     c = 'a';
   else if (symbol->section)
     {
-      c = decode_section_type (symbol->section);
+      c = coff_section_type (symbol->section->name);
       if (c == '?')
-	c = coff_section_type (symbol->section->name);
+	c = decode_section_type (symbol->section);
     }
   else
     return '?';
@@ -729,16 +739,16 @@ bfd_decode_symclass (asymbol *symbol)
 FUNCTION
 	bfd_is_undefined_symclass
 
+SYNOPSIS
+	bool bfd_is_undefined_symclass (int symclass);
+
 DESCRIPTION
 	Returns non-zero if the class symbol returned by
 	bfd_decode_symclass represents an undefined symbol.
 	Returns zero otherwise.
-
-SYNOPSIS
-	bfd_boolean bfd_is_undefined_symclass (int symclass);
 */
 
-bfd_boolean
+bool
 bfd_is_undefined_symclass (int symclass)
 {
   return symclass == 'U' || symclass == 'w' || symclass == 'v';
@@ -748,13 +758,13 @@ bfd_is_undefined_symclass (int symclass)
 FUNCTION
 	bfd_symbol_info
 
+SYNOPSIS
+	void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
+
 DESCRIPTION
 	Fill in the basic info about symbol that nm needs.
 	Additional info may be added by the back-ends after
 	calling this function.
-
-SYNOPSIS
-	void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
 */
 
 void
@@ -775,7 +785,7 @@ FUNCTION
 	bfd_copy_private_symbol_data
 
 SYNOPSIS
-	bfd_boolean bfd_copy_private_symbol_data
+	bool bfd_copy_private_symbol_data
 	  (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
 
 DESCRIPTION
@@ -799,7 +809,7 @@ DESCRIPTION
 
 long
 _bfd_generic_read_minisymbols (bfd *abfd,
-			       bfd_boolean dynamic,
+			       bool dynamic,
 			       void **minisymsp,
 			       unsigned int *sizep)
 {
@@ -841,8 +851,7 @@ _bfd_generic_read_minisymbols (bfd *abfd
 
  error_return:
   bfd_set_error (bfd_error_no_symbols);
-  if (syms != NULL)
-    free (syms);
+  free (syms);
   return -1;
 }
 
@@ -852,7 +861,7 @@ _bfd_generic_read_minisymbols (bfd *abfd
 
 asymbol *
 _bfd_generic_minisymbol_to_symbol (bfd *abfd ATTRIBUTE_UNUSED,
-				   bfd_boolean dynamic ATTRIBUTE_UNUSED,
+				   bool dynamic ATTRIBUTE_UNUSED,
 				   const void *minisym,
 				   asymbol *sym ATTRIBUTE_UNUSED)
 {
@@ -932,12 +941,12 @@ struct stab_find_info
   char *filename;
 };
 
-bfd_boolean
+bool
 _bfd_stab_section_find_nearest_line (bfd *abfd,
 				     asymbol **symbols,
 				     asection *section,
 				     bfd_vma offset,
-				     bfd_boolean *pfound,
+				     bool *pfound,
 				     const char **pfilename,
 				     const char **pfnname,
 				     unsigned int *pline,
@@ -951,9 +960,9 @@ _bfd_stab_section_find_nearest_line (bfd
   struct indexentry *indexentry;
   char *file_name;
   char *directory_name;
-  bfd_boolean saw_line, saw_func;
+  bool saw_line, saw_func;
 
-  *pfound = FALSE;
+  *pfound = false;
   *pfilename = bfd_get_filename (abfd);
   *pfnname = NULL;
   *pline = 0;
@@ -983,8 +992,8 @@ _bfd_stab_section_find_nearest_line (bfd
     {
       if (info->stabsec == NULL || info->strsec == NULL)
 	{
-	  /* No stabs debugging information.  */
-	  return TRUE;
+	  /* No usable stabs debugging information.  */
+	  return true;
 	}
 
       stabsize = (info->stabsec->rawsize
@@ -1004,7 +1013,8 @@ _bfd_stab_section_find_nearest_line (bfd
 
       info = (struct stab_find_info *) bfd_zalloc (abfd, amt);
       if (info == NULL)
-	return FALSE;
+	return false;
+      *pinfo = info;
 
       /* FIXME: When using the linker --split-by-file or
 	 --split-by-reloc options, it is possible for the .stab and
@@ -1020,14 +1030,13 @@ _bfd_stab_section_find_nearest_line (bfd
 	  info->strsec  = bfd_get_section_by_name (abfd, "$GDB_STRINGS$");
 
 	  if (info->stabsec == NULL || info->strsec == NULL)
-	    {
-	      /* No stabs debugging information.  Set *pinfo so that we
-		 can return quickly in the info != NULL case above.  */
-	      *pinfo = info;
-	      return TRUE;
-	    }
+	    return true;
 	}
 
+      if ((info->stabsec->flags & SEC_HAS_CONTENTS) == 0
+	  || (info->strsec->flags & SEC_HAS_CONTENTS) == 0)
+	goto out;
+
       stabsize = (info->stabsec->rawsize
 		  ? info->stabsec->rawsize
 		  : info->stabsec->size);
@@ -1036,16 +1045,13 @@ _bfd_stab_section_find_nearest_line (bfd
 		 ? info->strsec->rawsize
 		 : info->strsec->size);
 
-      info->stabs = (bfd_byte *) bfd_alloc (abfd, stabsize);
-      info->strs = (bfd_byte *) bfd_alloc (abfd, strsize);
-      if (info->stabs == NULL || info->strs == NULL)
-	return FALSE;
-
-      if (! bfd_get_section_contents (abfd, info->stabsec, info->stabs,
-				      0, stabsize)
-	  || ! bfd_get_section_contents (abfd, info->strsec, info->strs,
-					 0, strsize))
-	return FALSE;
+      if (stabsize == 0 || strsize == 0)
+	goto out;
+
+      if (!bfd_malloc_and_get_section (abfd, info->stabsec, &info->stabs))
+	goto out;
+      if (!bfd_malloc_and_get_section (abfd, info->strsec, &info->strs))
+	goto out1;
 
       /* Stab strings ought to be nul terminated.  Ensure the last one
 	 is, to prevent running off the end of the buffer.  */
@@ -1057,17 +1063,25 @@ _bfd_stab_section_find_nearest_line (bfd
 	 this should be no big deal.  */
       reloc_size = bfd_get_reloc_upper_bound (abfd, info->stabsec);
       if (reloc_size < 0)
-	return FALSE;
+	goto out2;
       reloc_vector = (arelent **) bfd_malloc (reloc_size);
       if (reloc_vector == NULL && reloc_size != 0)
-	return FALSE;
+	goto out2;
       reloc_count = bfd_canonicalize_reloc (abfd, info->stabsec, reloc_vector,
 					    symbols);
       if (reloc_count < 0)
 	{
-	  if (reloc_vector != NULL)
-	    free (reloc_vector);
-	  return FALSE;
+	out3:
+	  free (reloc_vector);
+	out2:
+	  free (info->strs);
+	  info->strs = NULL;
+	out1:
+	  free (info->stabs);
+	  info->stabs = NULL;
+	out:
+	  info->stabsec = NULL;
+	  return false;
 	}
       if (reloc_count > 0)
 	{
@@ -1087,19 +1101,17 @@ _bfd_stab_section_find_nearest_line (bfd
 
 	      octets = r->address * bfd_octets_per_byte (abfd, NULL);
 	      if (r->howto->rightshift != 0
-		  || r->howto->size != 2
+		  || bfd_get_reloc_size (r->howto) != 4
 		  || r->howto->bitsize != 32
 		  || r->howto->pc_relative
 		  || r->howto->bitpos != 0
 		  || r->howto->dst_mask != 0xffffffff
-		  || octets + 4 > stabsize)
+		  || octets > stabsize - 4)
 		{
 		  _bfd_error_handler
 		    (_("unsupported .stab relocation"));
 		  bfd_set_error (bfd_error_invalid_operation);
-		  if (reloc_vector != NULL)
-		    free (reloc_vector);
-		  return FALSE;
+		  goto out3;
 		}
 
 	      val = bfd_get_32 (abfd, info->stabs + octets);
@@ -1110,8 +1122,7 @@ _bfd_stab_section_find_nearest_line (bfd
 	    }
 	}
 
-      if (reloc_vector != NULL)
-	free (reloc_vector);
+      free (reloc_vector);
 
       /* First time through this function, build a table matching
 	 function VM addresses to stabs, then sort based on starting
@@ -1154,14 +1165,21 @@ _bfd_stab_section_find_nearest_line (bfd
 	++info->indextablesize;
 
       if (info->indextablesize == 0)
-	return TRUE;
+	{
+	  free (info->strs);
+	  info->strs = NULL;
+	  free (info->stabs);
+	  info->stabs = NULL;
+	  info->stabsec = NULL;
+	  return true;
+	}
       ++info->indextablesize;
 
       amt = info->indextablesize;
       amt *= sizeof (struct indexentry);
-      info->indextable = (struct indexentry *) bfd_alloc (abfd, amt);
+      info->indextable = (struct indexentry *) bfd_malloc (amt);
       if (info->indextable == NULL)
-	return FALSE;
+	goto out3;
 
       file_name = NULL;
       directory_name = NULL;
@@ -1288,8 +1306,6 @@ _bfd_stab_section_find_nearest_line (bfd
       info->indextablesize = i;
       qsort (info->indextable, (size_t) i, sizeof (struct indexentry),
 	     cmpindexentry);
-
-      *pinfo = info;
     }
 
   /* We are passed a section relative offset.  The offsets in the
@@ -1334,7 +1350,7 @@ _bfd_stab_section_find_nearest_line (bfd
 	}
 
       if (indexentry == NULL)
-	return TRUE;
+	return true;
 
       stab = indexentry->stab + STABSIZE;
       file_name = indexentry->file_name;
@@ -1343,14 +1359,14 @@ _bfd_stab_section_find_nearest_line (bfd
   directory_name = indexentry->directory_name;
   str = indexentry->str;
 
-  saw_line = FALSE;
-  saw_func = FALSE;
+  saw_line = false;
+  saw_func = false;
   for (; stab < (indexentry+1)->stab; stab += STABSIZE)
     {
-      bfd_boolean done;
+      bool done;
       bfd_vma val;
 
-      done = FALSE;
+      done = false;
 
       switch (stab[TYPEOFF])
 	{
@@ -1391,15 +1407,15 @@ _bfd_stab_section_find_nearest_line (bfd
 #endif
 	    }
 	  if (val > offset)
-	    done = TRUE;
-	  saw_line = TRUE;
+	    done = true;
+	  saw_line = true;
 	  break;
 
 	case N_FUN:
 	case N_SO:
 	  if (saw_func || saw_line)
-	    done = TRUE;
-	  saw_func = TRUE;
+	    done = true;
+	  saw_func = true;
 	  break;
 	}
 
@@ -1407,7 +1423,7 @@ _bfd_stab_section_find_nearest_line (bfd
 	break;
     }
 
-  *pfound = TRUE;
+  *pfound = true;
 
   if (file_name == NULL || IS_ABSOLUTE_PATH (file_name)
       || directory_name == NULL)
@@ -1429,7 +1445,7 @@ _bfd_stab_section_find_nearest_line (bfd
 	  len = strlen (file_name) + 1;
 	  info->filename = (char *) bfd_alloc (abfd, dirlen + len);
 	  if (info->filename == NULL)
-	    return FALSE;
+	    return false;
 	  memcpy (info->filename, directory_name, dirlen);
 	  memcpy (info->filename + dirlen, file_name, len);
 	}
@@ -1451,7 +1467,19 @@ _bfd_stab_section_find_nearest_line (bfd
       *pfnname = indexentry->function_name;
     }
 
-  return TRUE;
+  return true;
+}
+
+void
+_bfd_stab_cleanup (bfd *abfd ATTRIBUTE_UNUSED, void **pinfo)
+{
+  struct stab_find_info *info = (struct stab_find_info *) *pinfo;
+  if (info == NULL)
+    return;
+
+  free (info->indextable);
+  free (info->strs);
+  free (info->stabs);
 }
 
 long
@@ -1479,16 +1507,17 @@ _bfd_nosymbols_get_symbol_info (bfd *abf
 const char *
 _bfd_nosymbols_get_symbol_version_string (bfd *abfd,
 					  asymbol *symbol ATTRIBUTE_UNUSED,
-					  bfd_boolean *hidden ATTRIBUTE_UNUSED)
+					  bool base_p ATTRIBUTE_UNUSED,
+					  bool *hidden ATTRIBUTE_UNUSED)
 {
   return (const char *) _bfd_ptr_bfd_null_error (abfd);
 }
 
-bfd_boolean
+bool
 _bfd_nosymbols_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
 					const char *name ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
 alent *
@@ -1497,7 +1526,7 @@ _bfd_nosymbols_get_lineno (bfd *abfd, as
   return (alent *) _bfd_ptr_bfd_null_error (abfd);
 }
 
-bfd_boolean
+bool
 _bfd_nosymbols_find_nearest_line
     (bfd *abfd,
      asymbol **symbols ATTRIBUTE_UNUSED,
@@ -1511,7 +1540,22 @@ _bfd_nosymbols_find_nearest_line
   return _bfd_bool_bfd_false_error (abfd);
 }
 
-bfd_boolean
+bool
+_bfd_nosymbols_find_nearest_line_with_alt
+    (bfd *abfd,
+     const char *alt_filename ATTRIBUTE_UNUSED,
+     asymbol **symbols ATTRIBUTE_UNUSED,
+     asection *section ATTRIBUTE_UNUSED,
+     bfd_vma offset ATTRIBUTE_UNUSED,
+     const char **filename_ptr ATTRIBUTE_UNUSED,
+     const char **functionname_ptr ATTRIBUTE_UNUSED,
+     unsigned int *line_ptr ATTRIBUTE_UNUSED,
+     unsigned int *discriminator_ptr ATTRIBUTE_UNUSED)
+{
+  return _bfd_bool_bfd_false_error (abfd);
+}
+
+bool
 _bfd_nosymbols_find_line (bfd *abfd,
 			  asymbol **symbols ATTRIBUTE_UNUSED,
 			  asymbol *symbol ATTRIBUTE_UNUSED,
@@ -1521,7 +1565,7 @@ _bfd_nosymbols_find_line (bfd *abfd,
   return _bfd_bool_bfd_false_error (abfd);
 }
 
-bfd_boolean
+bool
 _bfd_nosymbols_find_inliner_info
     (bfd *abfd,
      const char **filename_ptr ATTRIBUTE_UNUSED,
@@ -1532,16 +1576,14 @@ _bfd_nosymbols_find_inliner_info
 }
 
 asymbol *
-_bfd_nosymbols_bfd_make_debug_symbol (bfd *abfd,
-				      void *ptr ATTRIBUTE_UNUSED,
-				      unsigned long sz ATTRIBUTE_UNUSED)
+_bfd_nosymbols_bfd_make_debug_symbol (bfd *abfd)
 {
   return (asymbol *) _bfd_ptr_bfd_null_error (abfd);
 }
 
 long
 _bfd_nosymbols_read_minisymbols (bfd *abfd,
-				 bfd_boolean dynamic ATTRIBUTE_UNUSED,
+				 bool dynamic ATTRIBUTE_UNUSED,
 				 void **minisymsp ATTRIBUTE_UNUSED,
 				 unsigned int *sizep ATTRIBUTE_UNUSED)
 {
@@ -1550,7 +1592,7 @@ _bfd_nosymbols_read_minisymbols (bfd *ab
 
 asymbol *
 _bfd_nosymbols_minisymbol_to_symbol (bfd *abfd,
-				     bfd_boolean dynamic ATTRIBUTE_UNUSED,
+				     bool dynamic ATTRIBUTE_UNUSED,
 				     const void *minisym ATTRIBUTE_UNUSED,
 				     asymbol *sym ATTRIBUTE_UNUSED)
 {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/sysdep.h ./bfd/sysdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/sysdep.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/sysdep.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* sysdep.h -- handle host dependencies for the BFD library
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -27,54 +27,23 @@
 #endif
 
 #include "config.h"
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
 #include <stdio.h>
-#include <sys/types.h>
-
-#include <errno.h>
-#if !(defined(errno) || defined(_MSC_VER) && defined(_INC_ERRNO))
-extern int errno;
-#endif
 
-#ifdef STRING_WITH_STRINGS
-#include <string.h>
-#include <strings.h>
-#else
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#else
-extern char *strchr ();
-extern char *strrchr ();
-#endif
-#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
 #endif
 
-#ifdef HAVE_STDLIB_H
 #include <stdlib.h>
-#endif
-
-#ifdef TIME_WITH_SYS_TIME
-#include <sys/time.h>
-#include <time.h>
-#else
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-#endif
+#include <stddef.h>
+#include <string.h>
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
+#include <errno.h>
+#include <time.h>
+
 #ifdef HAVE_SYS_RESOURCE_H
 #include <sys/resource.h>
 #endif /* HAVE_SYS_RESOURCE_H */
@@ -123,30 +92,10 @@ extern char *strrchr ();
 extern int ffs (int);
 #endif
 
-#if !HAVE_DECL_FREE
-extern void free ();
-#endif
-
-#if !HAVE_DECL_GETENV
-extern char *getenv ();
-#endif
-
-#if !HAVE_DECL_MALLOC
-extern PTR malloc ();
-#endif
-
-#if !HAVE_DECL_REALLOC
-extern PTR realloc ();
-#endif
-
 #if !HAVE_DECL_STPCPY
 extern char *stpcpy (char *__dest, const char *__src);
 #endif
 
-#if !HAVE_DECL_STRSTR
-extern char *strstr ();
-#endif
-
 #ifdef HAVE_FTELLO
 #if !HAVE_DECL_FTELLO
 extern off_t ftello (FILE *stream);
@@ -171,23 +120,30 @@ extern int fseeko64 (FILE *stream, off64
 #endif
 #endif
 
-#if !HAVE_DECL_STRNLEN
-size_t strnlen (const char *, size_t);
-#endif
-
 /* Define offsetof for those systems which lack it */
 
 #ifndef offsetof
 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
 #endif
 
+#ifndef ENABLE_NLS
+  /* The Solaris version of locale.h always includes libintl.h.  If we have
+     been configured with --disable-nls then ENABLE_NLS will not be defined
+     and the dummy definitions of bindtextdomain (et al) below will conflict
+     with the defintions in libintl.h.  So we define these values to prevent
+     the bogus inclusion of libintl.h.  */
+# define _LIBINTL_H
+# define _LIBGETTEXT_H
+#endif
+#include <locale.h>
+
 #ifdef ENABLE_NLS
 # include <libintl.h>
 /* Note the redefinition of gettext and ngettext here to use PACKAGE.
 
    This is because the code in this directory is used to build a
    library which will be linked with code in other directories to form
-   programs.  We want to maintain a seperate translation file for this
+   programs.  We want to maintain a separate translation file for this
    directory however, rather than being forced to merge it with that
    of any program linked to libbfd.  This is a library, so it cannot
    depend on the catalog currently loaded.
@@ -223,4 +179,14 @@ size_t strnlen (const char *, size_t);
 # define N_(String) (String)
 #endif
 
+#ifndef HAVE_GETUID
+#define getuid() 0
+#endif
+
+#ifndef HAVE_GETGID
+#define getgid() 0
+#endif
+
+#define POISON_BFD_BOOLEAN 1
+
 #endif /* ! defined (BFD_SYSDEP_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/targets.c ./bfd/targets.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/targets.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/targets.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic target-file-type support for the BFD library.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -20,6 +20,7 @@
    MA 02110-1301, USA.  */
 
 #include "sysdep.h"
+#include "libiberty.h"
 #include "bfd.h"
 #include "libbfd.h"
 #include "fnmatch.h"
@@ -133,6 +134,11 @@ DESCRIPTION
 .   (bfd_assert (__FILE__,__LINE__), NULL))
 .#endif
 .
+.{* Defined to TRUE if unused section symbol should be kept.  *}
+.#ifndef TARGET_KEEP_UNUSED_SECTION_SYMBOLS
+.#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true
+.#endif
+.
 	This is the structure which defines the type of BFD this is.  The
 	<<xvec>> member of the struct <<bfd>> itself points here.  Each
 	module that implements access to a different target under BFD,
@@ -142,6 +148,7 @@ DESCRIPTION
 	the entry points which call them. Too bad we can't have one
 	macro to define them both!
 
+EXTERNAL
 .enum bfd_flavour
 .{
 .  {* N.B. Update bfd_flavour_name if you change this.  *}
@@ -156,10 +163,7 @@ DESCRIPTION
 .  bfd_target_verilog_flavour,
 .  bfd_target_ihex_flavour,
 .  bfd_target_som_flavour,
-.  bfd_target_os9k_flavour,
-.  bfd_target_versados_flavour,
 .  bfd_target_msdos_flavour,
-.  bfd_target_ovax_flavour,
 .  bfd_target_evax_flavour,
 .  bfd_target_mmo_flavour,
 .  bfd_target_mach_o_flavour,
@@ -170,12 +174,12 @@ DESCRIPTION
 .
 .enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };
 .
-.{* Forward declaration.  *}
-.typedef struct bfd_link_info _bfd_link_info;
-.
-.{* Forward declaration.  *}
-.typedef struct flag_info flag_info;
+.{* Forward declarations.  *}
+.struct flag_info;
+.typedef void (*bfd_cleanup) (bfd *);
 .
+
+CODE_FRAGMENT
 .typedef struct bfd_target
 .{
 .  {* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  *}
@@ -213,12 +217,15 @@ DESCRIPTION
 .     possible targets when more than one target matches.  *}
 .  unsigned char match_priority;
 .
+. {* TRUE if unused section symbols should be kept.  *}
+.  bool keep_unused_section_symbols;
+.
 .  {* Entries for byte swapping for data. These are different from the
 .     other entry points, since they don't take a BFD as the first argument.
 .     Certain other handlers could do the same.  *}
-.  bfd_uint64_t	  (*bfd_getx64) (const void *);
-.  bfd_int64_t	  (*bfd_getx_signed_64) (const void *);
-.  void		  (*bfd_putx64) (bfd_uint64_t, void *);
+.  uint64_t	  (*bfd_getx64) (const void *);
+.  int64_t	  (*bfd_getx_signed_64) (const void *);
+.  void		  (*bfd_putx64) (uint64_t, void *);
 .  bfd_vma	  (*bfd_getx32) (const void *);
 .  bfd_signed_vma (*bfd_getx_signed_32) (const void *);
 .  void		  (*bfd_putx32) (bfd_vma, void *);
@@ -227,9 +234,9 @@ DESCRIPTION
 .  void		  (*bfd_putx16) (bfd_vma, void *);
 .
 .  {* Byte swapping for the headers.  *}
-.  bfd_uint64_t	  (*bfd_h_getx64) (const void *);
-.  bfd_int64_t	  (*bfd_h_getx_signed_64) (const void *);
-.  void		  (*bfd_h_putx64) (bfd_uint64_t, void *);
+.  uint64_t	  (*bfd_h_getx64) (const void *);
+.  int64_t	  (*bfd_h_getx_signed_64) (const void *);
+.  void		  (*bfd_h_putx64) (uint64_t, void *);
 .  bfd_vma	  (*bfd_h_getx32) (const void *);
 .  bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
 .  void		  (*bfd_h_putx32) (bfd_vma, void *);
@@ -240,19 +247,20 @@ DESCRIPTION
 .  {* Format dependent routines: these are vectors of entry points
 .     within the target vector structure, one for each format to check.  *}
 .
-.  {* Check the format of a file being read.  Return a <<bfd_target *>> or zero.  *}
-.  const struct bfd_target *
-.	       (*_bfd_check_format[bfd_type_end]) (bfd *);
+.  {* Check the format of a file being read.  Return a <<bfd_cleanup>> on
+.     success or zero on failure.  *}
+.  bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *);
 .
 .  {* Set the format of a file being written.  *}
-.  bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
+.  bool (*_bfd_set_format[bfd_type_end]) (bfd *);
 .
 .  {* Write cached information into a file being written, at <<bfd_close>>.  *}
-.  bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
+.  bool (*_bfd_write_contents[bfd_type_end]) (bfd *);
 .
+
 The general target vector.  These vectors are initialized using the
 BFD_JUMP_TABLE macros.
-.
+
 .  {* Generic entry points.  *}
 .#define BFD_JUMP_TABLE_GENERIC(NAME) \
 .  NAME##_close_and_cleanup, \
@@ -262,17 +270,16 @@ BFD_JUMP_TABLE macros.
 .  NAME##_get_section_contents_in_window
 .
 .  {* Called when the BFD is being closed to do any necessary cleanup.  *}
-.  bfd_boolean (*_close_and_cleanup) (bfd *);
+.  bool (*_close_and_cleanup) (bfd *);
 .  {* Ask the BFD to free all cached information.  *}
-.  bfd_boolean (*_bfd_free_cached_info) (bfd *);
+.  bool (*_bfd_free_cached_info) (bfd *);
 .  {* Called when a new section is created.  *}
-.  bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
+.  bool (*_new_section_hook) (bfd *, sec_ptr);
 .  {* Read the contents of a section.  *}
-.  bfd_boolean (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr,
-.					     bfd_size_type);
-.  bfd_boolean (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr,
-.						       bfd_window *, file_ptr,
-.						       bfd_size_type);
+.  bool (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr,
+.				      bfd_size_type);
+.  bool (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr, bfd_window *,
+.						file_ptr, bfd_size_type);
 .
 .  {* Entry points to copy private data.  *}
 .#define BFD_JUMP_TABLE_COPY(NAME) \
@@ -287,34 +294,32 @@ BFD_JUMP_TABLE macros.
 .
 .  {* Called to copy BFD general private data from one object file
 .     to another.  *}
-.  bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
+.  bool (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
 .  {* Called to merge BFD general private data from one object file
 .     to a common output file when linking.  *}
-.  bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
+.  bool (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
 .  {* Called to initialize BFD private section data from one object file
 .     to another.  *}
 .#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
 .	BFD_SEND (obfd, _bfd_init_private_section_data, \
 .		  (ibfd, isec, obfd, osec, link_info))
-.  bfd_boolean (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *,
-.						  sec_ptr,
-.						  struct bfd_link_info *);
+.  bool (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr,
+.					   struct bfd_link_info *);
 .  {* Called to copy BFD private section data from one object file
 .     to another.  *}
-.  bfd_boolean (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *,
-.						  sec_ptr);
+.  bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr);
 .  {* Called to copy BFD private symbol data from one symbol
 .     to another.  *}
-.  bfd_boolean (*_bfd_copy_private_symbol_data) (bfd *, asymbol *, bfd *,
-.						 asymbol *);
+.  bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
+.					  bfd *, asymbol *);
 .  {* Called to copy BFD private header data from one object file
 .     to another.  *}
-.  bfd_boolean (*_bfd_copy_private_header_data) (bfd *, bfd *);
+.  bool (*_bfd_copy_private_header_data) (bfd *, bfd *);
 .  {* Called to set private backend flags.  *}
-.  bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
+.  bool (*_bfd_set_private_flags) (bfd *, flagword);
 .
 .  {* Called to print private BFD data.  *}
-.  bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
+.  bool (*_bfd_print_private_bfd_data) (bfd *, void *);
 .
 .  {* Core file entry points.  *}
 .#define BFD_JUMP_TABLE_CORE(NAME) \
@@ -323,10 +328,10 @@ BFD_JUMP_TABLE macros.
 .  NAME##_core_file_matches_executable_p, \
 .  NAME##_core_file_pid
 .
-.  char *      (*_core_file_failing_command) (bfd *);
-.  int	       (*_core_file_failing_signal) (bfd *);
-.  bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
-.  int	       (*_core_file_pid) (bfd *);
+.  char *(*_core_file_failing_command) (bfd *);
+.  int   (*_core_file_failing_signal) (bfd *);
+.  bool  (*_core_file_matches_executable_p) (bfd *, bfd *);
+.  int   (*_core_file_pid) (bfd *);
 .
 .  {* Archive entry points.  *}
 .#define BFD_JUMP_TABLE_ARCHIVE(NAME) \
@@ -342,22 +347,21 @@ BFD_JUMP_TABLE macros.
 .  NAME##_generic_stat_arch_elt, \
 .  NAME##_update_armap_timestamp
 .
-.  bfd_boolean (*_bfd_slurp_armap) (bfd *);
-.  bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
-.  bfd_boolean (*_bfd_construct_extended_name_table) (bfd *, char **,
-.						      bfd_size_type *,
-.						      const char **);
-.  void	       (*_bfd_truncate_arname) (bfd *, const char *, char *);
-.  bfd_boolean (*write_armap) (bfd *, unsigned int, struct orl *,
-.			       unsigned int, int);
-.  void *      (*_bfd_read_ar_hdr_fn) (bfd *);
-.  bfd_boolean (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
-.  bfd *       (*openr_next_archived_file) (bfd *, bfd *);
+.  bool (*_bfd_slurp_armap) (bfd *);
+.  bool (*_bfd_slurp_extended_name_table) (bfd *);
+.  bool (*_bfd_construct_extended_name_table) (bfd *, char **,
+.					       bfd_size_type *,
+.					       const char **);
+.  void (*_bfd_truncate_arname) (bfd *, const char *, char *);
+.  bool (*write_armap) (bfd *, unsigned, struct orl *, unsigned, int);
+.  void *(*_bfd_read_ar_hdr_fn) (bfd *);
+.  bool (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
+.  bfd *(*openr_next_archived_file) (bfd *, bfd *);
 .#define bfd_get_elt_at_index(b,i) \
 .	BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
-.  bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex);
-.  int	       (*_bfd_stat_arch_elt) (bfd *, struct stat *);
-.  bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
+.  bfd *(*_bfd_get_elt_at_index) (bfd *, symindex);
+.  int  (*_bfd_stat_arch_elt) (bfd *, struct stat *);
+.  bool (*_bfd_update_armap_timestamp) (bfd *);
 .
 .  {* Entry points used for symbols.  *}
 .#define BFD_JUMP_TABLE_SYMBOLS(NAME) \
@@ -371,52 +375,59 @@ BFD_JUMP_TABLE macros.
 .  NAME##_bfd_is_target_special_symbol, \
 .  NAME##_get_lineno, \
 .  NAME##_find_nearest_line, \
+.  NAME##_find_nearest_line_with_alt, \
 .  NAME##_find_line, \
 .  NAME##_find_inliner_info, \
 .  NAME##_bfd_make_debug_symbol, \
 .  NAME##_read_minisymbols, \
 .  NAME##_minisymbol_to_symbol
 .
-.  long	       (*_bfd_get_symtab_upper_bound) (bfd *);
-.  long	       (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **);
+.  long	(*_bfd_get_symtab_upper_bound) (bfd *);
+.  long	(*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **);
 .  struct bfd_symbol *
-.	       (*_bfd_make_empty_symbol) (bfd *);
-.  void	       (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *,
-.				     bfd_print_symbol_type);
+.	(*_bfd_make_empty_symbol) (bfd *);
+.  void	(*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *,
+.			      bfd_print_symbol_type);
 .#define bfd_print_symbol(b,p,s,e) \
 .	BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
-.  void	       (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *,
-.					symbol_info *);
+.  void	 (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *, symbol_info *);
 .#define bfd_get_symbol_info(b,p,e) \
 .	BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
-.  const char *(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *,
-.						  bfd_boolean *);
-.#define bfd_get_symbol_version_string(b,s,h) \
-.	BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h))
-.  bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
-.  bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
-.  alent *     (*_get_lineno) (bfd *, struct bfd_symbol *);
-.  bfd_boolean (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **,
-.					  struct bfd_section *, bfd_vma,
-.					  const char **, const char **,
-.					  unsigned int *, unsigned int *);
-.  bfd_boolean (*_bfd_find_line) (bfd *, struct bfd_symbol **,
-.				  struct bfd_symbol *, const char **,
-.				  unsigned int *);
-.  bfd_boolean (*_bfd_find_inliner_info)
+.  const char *
+.	(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *,
+.					   bool, bool *);
+.#define bfd_get_symbol_version_string(b,s,p,h) \
+.	BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h))
+.  bool (*_bfd_is_local_label_name) (bfd *, const char *);
+.  bool (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
+.  alent *
+.	(*_get_lineno) (bfd *, struct bfd_symbol *);
+.  bool (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **,
+.				   struct bfd_section *, bfd_vma,
+.				   const char **, const char **,
+.				   unsigned int *, unsigned int *);
+.  bool (*_bfd_find_nearest_line_with_alt) (bfd *, const char *,
+.					    struct bfd_symbol **,
+.					    struct bfd_section *, bfd_vma,
+.					    const char **, const char **,
+.					    unsigned int *, unsigned int *);
+.  bool (*_bfd_find_line) (bfd *, struct bfd_symbol **,
+.			   struct bfd_symbol *, const char **,
+.			   unsigned int *);
+.  bool (*_bfd_find_inliner_info)
 .    (bfd *, const char **, const char **, unsigned int *);
 . {* Back-door to allow format-aware applications to create debug symbols
 .    while using BFD for everything else.  Currently used by the assembler
 .    when creating COFF files.  *}
-.  asymbol *   (*_bfd_make_debug_symbol) (bfd *, void *, unsigned long size);
+.  asymbol *
+.	(*_bfd_make_debug_symbol) (bfd *);
 .#define bfd_read_minisymbols(b, d, m, s) \
 .	BFD_SEND (b, _read_minisymbols, (b, d, m, s))
-.  long	       (*_read_minisymbols) (bfd *, bfd_boolean, void **,
-.				     unsigned int *);
+.  long	(*_read_minisymbols) (bfd *, bool, void **, unsigned int *);
 .#define bfd_minisymbol_to_symbol(b, d, m, f) \
 .	BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
-.  asymbol *   (*_minisymbol_to_symbol) (bfd *, bfd_boolean, const void *,
-.					 asymbol *);
+.  asymbol *
+.       (*_minisymbol_to_symbol) (bfd *, bool, const void *, asymbol *);
 .
 .  {* Routines for relocs.  *}
 .#define BFD_JUMP_TABLE_RELOCS(NAME) \
@@ -426,25 +437,25 @@ BFD_JUMP_TABLE macros.
 .  NAME##_bfd_reloc_type_lookup, \
 .  NAME##_bfd_reloc_name_lookup
 .
-.  long	       (*_get_reloc_upper_bound) (bfd *, sec_ptr);
-.  long	       (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **,
-.					   struct bfd_symbol **);
-.  void	       (*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int);
+.  long	(*_get_reloc_upper_bound) (bfd *, sec_ptr);
+.  long	(*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **,
+.				    struct bfd_symbol **);
+.  void	(*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int);
 .  {* See documentation on reloc types.  *}
 .  reloc_howto_type *
-.	       (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+.	(*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
 .  reloc_howto_type *
-.	       (*reloc_name_lookup) (bfd *, const char *);
+.	(*reloc_name_lookup) (bfd *, const char *);
 .
 .  {* Routines used when writing an object file.  *}
 .#define BFD_JUMP_TABLE_WRITE(NAME) \
 .  NAME##_set_arch_mach, \
 .  NAME##_set_section_contents
 .
-.  bfd_boolean (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture,
+.  bool (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture,
 .				      unsigned long);
-.  bfd_boolean (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *,
-.					     file_ptr, bfd_size_type);
+.  bool (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *,
+.				      file_ptr, bfd_size_type);
 .
 .  {* Routines used by the linker.  *}
 .#define BFD_JUMP_TABLE_LINK(NAME) \
@@ -469,72 +480,73 @@ BFD_JUMP_TABLE macros.
 .  NAME##_bfd_link_hide_symbol, \
 .  NAME##_bfd_define_start_stop
 .
-.  int	       (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
-.  bfd_byte *  (*_bfd_get_relocated_section_contents) (bfd *,
-.						       struct bfd_link_info *,
-.						       struct bfd_link_order *,
-.						       bfd_byte *, bfd_boolean,
-.						       struct bfd_symbol **);
+.  int	(*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
+.  bfd_byte *
+.	(*_bfd_get_relocated_section_contents) (bfd *,
+.					        struct bfd_link_info *,
+.					        struct bfd_link_order *,
+.					        bfd_byte *, bool,
+.					        struct bfd_symbol **);
 .
-.  bfd_boolean (*_bfd_relax_section) (bfd *, struct bfd_section *,
-.				      struct bfd_link_info *, bfd_boolean *);
+.  bool (*_bfd_relax_section) (bfd *, struct bfd_section *,
+.			       struct bfd_link_info *, bool *);
 .
 .  {* Create a hash table for the linker.  Different backends store
 .     different information in this table.  *}
 .  struct bfd_link_hash_table *
-.	       (*_bfd_link_hash_table_create) (bfd *);
+.	(*_bfd_link_hash_table_create) (bfd *);
 .
 .  {* Add symbols from this object file into the hash table.  *}
-.  bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
+.  bool (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
 .
 .  {* Indicate that we are only retrieving symbol values from this section.  *}
-.  void	       (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
+.  void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
 .
 .  {* Copy the symbol type and other attributes for a linker script
 .     assignment of one symbol to another.  *}
 .#define bfd_copy_link_hash_symbol_type(b, t, f) \
 .	BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
-.  void	       (*_bfd_copy_link_hash_symbol_type) (bfd *,
-.						   struct bfd_link_hash_entry *,
-.						   struct bfd_link_hash_entry *);
+.  void (*_bfd_copy_link_hash_symbol_type) (bfd *,
+.					    struct bfd_link_hash_entry *,
+.					    struct bfd_link_hash_entry *);
 .
 .  {* Do a link based on the link_order structures attached to each
 .     section of the BFD.  *}
-.  bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
+.  bool (*_bfd_final_link) (bfd *, struct bfd_link_info *);
 .
 .  {* Should this section be split up into smaller pieces during linking.  *}
-.  bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
+.  bool (*_bfd_link_split_section) (bfd *, struct bfd_section *);
 .
 .  {* Check the relocations in the bfd for validity.  *}
-.  bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
+.  bool (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
 .
 .  {* Remove sections that are not referenced from the output.  *}
-.  bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
+.  bool (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
 .
 .  {* Sets the bitmask of allowed and disallowed section flags.  *}
-.  bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
-.					     struct flag_info *, asection *);
+.  bool (*_bfd_lookup_section_flags) (struct bfd_link_info *,
+.				      struct flag_info *, asection *);
 .
 .  {* Attempt to merge SEC_MERGE sections.  *}
-.  bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
+.  bool (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
 .
 .  {* Is this section a member of a group?  *}
-.  bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
+.  bool (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
 .
 .  {* The group name, if section is a member of a group.  *}
 .  const char *(*_bfd_group_name) (bfd *, const struct bfd_section *);
 .
 .  {* Discard members of a group.  *}
-.  bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
+.  bool (*_bfd_discard_group) (bfd *, struct bfd_section *);
 .
 .  {* Check if SEC has been already linked during a reloceatable or
 .     final link.  *}
-.  bfd_boolean (*_section_already_linked) (bfd *, asection *,
-.					   struct bfd_link_info *);
+.  bool (*_section_already_linked) (bfd *, asection *,
+.				    struct bfd_link_info *);
 .
 .  {* Define a common symbol.  *}
-.  bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
-.					     struct bfd_link_hash_entry *);
+.  bool (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
+.				      struct bfd_link_hash_entry *);
 .
 .  {* Hide a symbol.  *}
 .  void (*_bfd_link_hide_symbol) (bfd *, struct bfd_link_info *,
@@ -542,8 +554,8 @@ BFD_JUMP_TABLE macros.
 .
 .  {* Define a __start, __stop, .startof. or .sizeof. symbol.  *}
 .  struct bfd_link_hash_entry *
-.	       (*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
-.					  asection *);
+.	(*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
+.				   asection *);
 .
 .  {* Routines to handle dynamic symbols and relocs.  *}
 .#define BFD_JUMP_TABLE_DYNAMIC(NAME) \
@@ -554,18 +566,18 @@ BFD_JUMP_TABLE macros.
 .  NAME##_canonicalize_dynamic_reloc
 .
 .  {* Get the amount of memory required to hold the dynamic symbols.  *}
-.  long	       (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
+.  long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
 .  {* Read in the dynamic symbols.  *}
-.  long	       (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **);
+.  long (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **);
 .  {* Create synthetized symbols.  *}
-.  long	       (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **,
-.					     long, struct bfd_symbol **,
-.					     struct bfd_symbol **);
+.  long (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **,
+.				      long, struct bfd_symbol **,
+.				      struct bfd_symbol **);
 .  {* Get the amount of memory required to hold the dynamic relocs.  *}
-.  long	       (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
+.  long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
 .  {* Read in the dynamic relocs.  *}
-.  long	       (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **,
-.						   struct bfd_symbol **);
+.  long (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **,
+.					    struct bfd_symbol **);
 .
 
 A pointer to an alternative bfd_target in case the current one is not
@@ -602,31 +614,31 @@ to find an alternative output format tha
 .  return abfd->xvec->object_flags;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_family_coff (const bfd *abfd)
 .{
 .  return (bfd_get_flavour (abfd) == bfd_target_coff_flavour
 .          || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_big_endian (const bfd *abfd)
 .{
 .  return abfd->xvec->byteorder == BFD_ENDIAN_BIG;
 .}
-.static inline bfd_boolean
+.static inline bool
 .bfd_little_endian (const bfd *abfd)
 .{
 .  return abfd->xvec->byteorder == BFD_ENDIAN_LITTLE;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_header_big_endian (const bfd *abfd)
 .{
 .  return abfd->xvec->header_byteorder == BFD_ENDIAN_BIG;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_header_little_endian (const bfd *abfd)
 .{
 .  return abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE;
@@ -652,6 +664,12 @@ to find an alternative output format tha
 .  return sy->the_bfd->xvec->flavour;
 .}
 .
+.static inline bool
+.bfd_keep_unused_section_symbols (const bfd *abfd)
+.{
+.  return abfd->xvec->keep_unused_section_symbols;
+.}
+.
 */
 
 /* All known xvecs (even those that don't compile on all systems).
@@ -665,12 +683,15 @@ extern const bfd_target aarch64_elf64_be
 extern const bfd_target aarch64_elf64_le_vec;
 extern const bfd_target aarch64_elf64_le_cloudabi_vec;
 extern const bfd_target aarch64_mach_o_vec;
+extern const bfd_target aarch64_pei_le_vec;
+extern const bfd_target aarch64_pe_le_vec;
 extern const bfd_target alpha_ecoff_le_vec;
 extern const bfd_target alpha_elf64_vec;
 extern const bfd_target alpha_elf64_fbsd_vec;
 extern const bfd_target alpha_vms_vec;
 extern const bfd_target alpha_vms_lib_txt_vec;
 extern const bfd_target am33_elf32_linux_vec;
+extern const bfd_target amdgcn_elf64_le_vec;
 extern const bfd_target aout_vec;
 extern const bfd_target arc_elf32_be_vec;
 extern const bfd_target arc_elf32_le_vec;
@@ -680,8 +701,6 @@ extern const bfd_target arm_elf32_fdpic_
 extern const bfd_target arm_elf32_fdpic_le_vec;
 extern const bfd_target arm_elf32_nacl_be_vec;
 extern const bfd_target arm_elf32_nacl_le_vec;
-extern const bfd_target arm_elf32_symbian_be_vec;
-extern const bfd_target arm_elf32_symbian_le_vec;
 extern const bfd_target arm_elf32_vxworks_be_vec;
 extern const bfd_target arm_elf32_vxworks_le_vec;
 extern const bfd_target arm_mach_o_vec;
@@ -733,12 +752,12 @@ extern const bfd_target i386_coff_go32st
 extern const bfd_target i386_coff_lynx_vec;
 extern const bfd_target i386_elf32_vec;
 extern const bfd_target i386_elf32_fbsd_vec;
-extern const bfd_target i386_elf32_nacl_vec;
 extern const bfd_target i386_elf32_sol2_vec;
 extern const bfd_target i386_elf32_vxworks_vec;
 extern const bfd_target i386_mach_o_vec;
 extern const bfd_target i386_msdos_vec;
 extern const bfd_target i386_pe_vec;
+extern const bfd_target i386_pe_big_vec;
 extern const bfd_target i386_pei_vec;
 extern const bfd_target iamcu_elf32_vec;
 extern const bfd_target ia64_elf32_be_vec;
@@ -750,12 +769,13 @@ extern const bfd_target ia64_elf64_vms_v
 extern const bfd_target ia64_pei_vec;
 extern const bfd_target ip2k_elf32_vec;
 extern const bfd_target iq2000_elf32_vec;
-extern const bfd_target k1om_elf64_vec;
-extern const bfd_target k1om_elf64_fbsd_vec;
-extern const bfd_target l1om_elf64_vec;
-extern const bfd_target l1om_elf64_fbsd_vec;
+extern const bfd_target kvx_elf32_vec;
+extern const bfd_target kvx_elf64_vec;
 extern const bfd_target lm32_elf32_vec;
 extern const bfd_target lm32_elf32_fdpic_vec;
+extern const bfd_target loongarch_elf64_vec;
+extern const bfd_target loongarch_elf32_vec;
+extern const bfd_target loongarch64_pei_vec;
 extern const bfd_target m32c_elf32_vec;
 extern const bfd_target m32r_elf32_vec;
 extern const bfd_target m32r_elf32_le_vec;
@@ -821,6 +841,7 @@ extern const bfd_target nios2_elf32_le_v
 extern const bfd_target ns32k_aout_pc532mach_vec;
 extern const bfd_target ns32k_aout_pc532nbsd_vec;
 extern const bfd_target or1k_elf32_vec;
+extern const bfd_target pdb_vec;
 extern const bfd_target pdp11_aout_vec;
 extern const bfd_target pef_vec;
 extern const bfd_target pef_xlib_vec;
@@ -835,14 +856,14 @@ extern const bfd_target powerpc_elf32_vx
 extern const bfd_target powerpc_elf64_vec;
 extern const bfd_target powerpc_elf64_le_vec;
 extern const bfd_target powerpc_elf64_fbsd_vec;
-extern const bfd_target powerpc_pe_vec;
-extern const bfd_target powerpc_pe_le_vec;
-extern const bfd_target powerpc_pei_vec;
-extern const bfd_target powerpc_pei_le_vec;
+extern const bfd_target powerpc_elf64_fbsd_le_vec;
 extern const bfd_target powerpc_xcoff_vec;
 extern const bfd_target pru_elf32_vec;
 extern const bfd_target riscv_elf32_vec;
 extern const bfd_target riscv_elf64_vec;
+extern const bfd_target riscv_elf32_be_vec;
+extern const bfd_target riscv_elf64_be_vec;
+extern const bfd_target riscv64_pei_vec;
 extern const bfd_target rl78_elf32_vec;
 extern const bfd_target rs6000_xcoff64_vec;
 extern const bfd_target rs6000_xcoff64_aix_vec;
@@ -879,7 +900,6 @@ extern const bfd_target sparc_elf64_fbsd
 extern const bfd_target sparc_elf64_sol2_vec;
 extern const bfd_target spu_elf32_vec;
 extern const bfd_target sym_vec;
-extern const bfd_target tic30_aout_vec;
 extern const bfd_target tic30_coff_vec;
 extern const bfd_target tic4x_coff0_vec;
 extern const bfd_target tic4x_coff0_beh_vec;
@@ -899,7 +919,6 @@ extern const bfd_target tic6x_elf32_c600
 extern const bfd_target tic6x_elf32_c6000_le_vec;
 extern const bfd_target tic6x_elf32_linux_be_vec;
 extern const bfd_target tic6x_elf32_linux_le_vec;
-extern const bfd_target tic80_coff_vec;
 extern const bfd_target tilegx_elf32_be_vec;
 extern const bfd_target tilegx_elf32_le_vec;
 extern const bfd_target tilegx_elf64_be_vec;
@@ -916,22 +935,20 @@ extern const bfd_target wasm_vec;
 extern const bfd_target wasm32_elf32_vec;
 extern const bfd_target x86_64_coff_vec;
 extern const bfd_target x86_64_elf32_vec;
-extern const bfd_target x86_64_elf32_nacl_vec;
 extern const bfd_target x86_64_elf64_vec;
 extern const bfd_target x86_64_elf64_cloudabi_vec;
 extern const bfd_target x86_64_elf64_fbsd_vec;
-extern const bfd_target x86_64_elf64_nacl_vec;
 extern const bfd_target x86_64_elf64_sol2_vec;
 extern const bfd_target x86_64_mach_o_vec;
 extern const bfd_target x86_64_pe_vec;
-extern const bfd_target x86_64_pe_be_vec;
+extern const bfd_target x86_64_pe_big_vec;
 extern const bfd_target x86_64_pei_vec;
-extern const bfd_target xc16x_elf32_vec;
 extern const bfd_target xgate_elf32_vec;
 extern const bfd_target xstormy16_elf32_vec;
 extern const bfd_target xtensa_elf32_be_vec;
 extern const bfd_target xtensa_elf32_le_vec;
 extern const bfd_target z80_coff_vec;
+extern const bfd_target z80_elf32_vec;
 extern const bfd_target z8k_coff_vec;
 
 /* These are always included.  */
@@ -943,7 +960,6 @@ extern const bfd_target binary_vec;
 extern const bfd_target ihex_vec;
 
 /* All of the xvecs for core files.  */
-extern const bfd_target core_aix386_vec;
 extern const bfd_target core_cisco_be_vec;
 extern const bfd_target core_cisco_le_vec;
 extern const bfd_target core_hppabsd_vec;
@@ -952,7 +968,6 @@ extern const bfd_target core_irix_vec;
 extern const bfd_target core_netbsd_vec;
 extern const bfd_target core_osf_vec;
 extern const bfd_target core_ptrace_vec;
-extern const bfd_target core_sco5_vec;
 extern const bfd_target core_trad_vec;
 
 static const bfd_target * const _bfd_target_vector[] =
@@ -983,6 +998,12 @@ static const bfd_target * const _bfd_tar
 	&aarch64_elf64_le_vec,
 	&aarch64_elf64_le_cloudabi_vec,
 	&aarch64_mach_o_vec,
+	&aarch64_pe_le_vec,
+	&aarch64_pei_le_vec,
+#endif
+
+#ifdef BFD64
+	&amdgcn_elf64_le_vec,
 #endif
 
 #ifdef BFD64
@@ -1008,8 +1029,6 @@ static const bfd_target * const _bfd_tar
 	&arm_elf32_le_vec,
 	&arm_elf32_fdpic_be_vec,
 	&arm_elf32_fdpic_le_vec,
-	&arm_elf32_symbian_be_vec,
-	&arm_elf32_symbian_le_vec,
 	&arm_elf32_vxworks_be_vec,
 	&arm_elf32_vxworks_le_vec,
 	&arm_mach_o_vec,
@@ -1082,12 +1101,12 @@ static const bfd_target * const _bfd_tar
 	&i386_coff_lynx_vec,
 	&i386_elf32_vec,
 	&i386_elf32_fbsd_vec,
-	&i386_elf32_nacl_vec,
 	&i386_elf32_sol2_vec,
 	&i386_elf32_vxworks_vec,
 	&i386_mach_o_vec,
 	&i386_msdos_vec,
 	&i386_pe_vec,
+	&i386_pe_big_vec,
 	&i386_pei_vec,
 
 	&iamcu_elf32_vec,
@@ -1113,10 +1132,8 @@ static const bfd_target * const _bfd_tar
 	&iq2000_elf32_vec,
 
 #ifdef BFD64
-	&k1om_elf64_vec,
-	&k1om_elf64_fbsd_vec,
-	&l1om_elf64_vec,
-	&l1om_elf64_fbsd_vec,
+	&kvx_elf32_vec,
+	&kvx_elf64_vec,
 #endif
 
 	&lm32_elf32_vec,
@@ -1211,6 +1228,8 @@ static const bfd_target * const _bfd_tar
 
 	&or1k_elf32_vec,
 
+	&pdb_vec,
+
 	&pdp11_aout_vec,
 
 	&pef_vec,
@@ -1228,11 +1247,8 @@ static const bfd_target * const _bfd_tar
 	&powerpc_elf64_vec,
 	&powerpc_elf64_le_vec,
 	&powerpc_elf64_fbsd_vec,
+	&powerpc_elf64_fbsd_le_vec,
 #endif
-	&powerpc_pe_vec,
-	&powerpc_pe_le_vec,
-	&powerpc_pei_vec,
-	&powerpc_pei_le_vec,
 #if 0
 	/* This has the same magic number as RS/6000.  */
 	&powerpc_xcoff_vec,
@@ -1243,6 +1259,9 @@ static const bfd_target * const _bfd_tar
 #ifdef BFD64
 	&riscv_elf32_vec,
 	&riscv_elf64_vec,
+	&riscv_elf32_be_vec,
+	&riscv_elf64_be_vec,
+	&riscv64_pei_vec,
 #endif
 	&rl78_elf32_vec,
 
@@ -1296,7 +1315,6 @@ static const bfd_target * const _bfd_tar
 
 	&sym_vec,
 
-	&tic30_aout_vec,
 	&tic30_coff_vec,
 	&tic54x_coff0_beh_vec,
 	&tic54x_coff0_vec,
@@ -1306,7 +1324,6 @@ static const bfd_target * const _bfd_tar
 	&tic54x_coff2_vec,
 	&tic6x_elf32_be_vec,
 	&tic6x_elf32_le_vec,
-	&tic80_coff_vec,
 
 	&tilegx_elf32_be_vec,
 	&tilegx_elf32_le_vec,
@@ -1333,20 +1350,16 @@ static const bfd_target * const _bfd_tar
 #ifdef BFD64
 	&x86_64_coff_vec,
 	&x86_64_elf32_vec,
-	&x86_64_elf32_nacl_vec,
 	&x86_64_elf64_vec,
 	&x86_64_elf64_cloudabi_vec,
 	&x86_64_elf64_fbsd_vec,
-	&x86_64_elf64_nacl_vec,
 	&x86_64_elf64_sol2_vec,
 	&x86_64_mach_o_vec,
 	&x86_64_pe_vec,
-	&x86_64_pe_be_vec,
+	&x86_64_pe_big_vec,
 	&x86_64_pei_vec,
 #endif
 
-	&xc16x_elf32_vec,
-
 	&xgate_elf32_vec,
 
 	&xstormy16_elf32_vec,
@@ -1355,8 +1368,16 @@ static const bfd_target * const _bfd_tar
 	&xtensa_elf32_le_vec,
 
 	&z80_coff_vec,
+	&z80_elf32_vec,
 
 	&z8k_coff_vec,
+
+#ifdef BFD64
+	&loongarch_elf32_vec,
+	&loongarch_elf64_vec,
+	&loongarch64_pei_vec,
+#endif
+
 #endif /* not SELECT_VECS */
 
 /* Always support S-records, for convenience.  */
@@ -1377,9 +1398,6 @@ static const bfd_target * const _bfd_tar
 
 /* Add any required traditional-core-file-handler.  */
 
-#ifdef AIX386_CORE
-	&core_aix386_vec,
-#endif
 #if 0
 	/* We don't include cisco_core_*_vec.  Although it has a magic number,
 	   the magic number isn't at the beginning of the file, and thus
@@ -1405,16 +1423,13 @@ static const bfd_target * const _bfd_tar
 #ifdef PTRACE_CORE
 	&core_ptrace_vec,
 #endif
-#ifdef SCO5_CORE
-	&core_sco5_vec,
-#endif
 #ifdef TRAD_CORE
 	&core_trad_vec,
 #endif
 
 	NULL /* end of list marker */
 };
-const bfd_target * const *bfd_target_vector = _bfd_target_vector;
+const bfd_target *const *const bfd_target_vector = _bfd_target_vector;
 
 /* bfd_default_vector[0] contains either the address of the default vector,
    if there is one, or zero if there isn't.  */
@@ -1429,18 +1444,22 @@ const bfd_target *bfd_default_vector[] =
 /* bfd_associated_vector[] contains the associated target vectors used
    to reduce the ambiguity in bfd_check_format_matches.  */
 
-static const bfd_target *_bfd_associated_vector[] = {
+static const bfd_target *const _bfd_associated_vector[] = {
 #ifdef ASSOCIATED_VECS
 	ASSOCIATED_VECS,
 #endif
 	NULL
 };
-const bfd_target * const *bfd_associated_vector = _bfd_associated_vector;
+const bfd_target *const *const bfd_associated_vector = _bfd_associated_vector;
 
 /* When there is an ambiguous match, bfd_check_format_matches puts the
    names of the matching targets in an array.  This variable is the maximum
    number of entries that the array could possibly need.  */
-const size_t _bfd_target_vector_entries = sizeof (_bfd_target_vector)/sizeof (*_bfd_target_vector);
+const size_t _bfd_target_vector_entries = ARRAY_SIZE (_bfd_target_vector);
+
+/* A place to stash a warning from _bfd_check_format.  */
+static struct per_xvec_message *per_xvec_warn[ARRAY_SIZE (_bfd_target_vector)
+					      + 1];
 
 /* This array maps configuration triplets onto BFD vectors.  */
 
@@ -1460,6 +1479,61 @@ static const struct targmatch bfd_target
   { NULL, NULL }
 };
 
+/*
+INTERNAL
+.{* Cached _bfd_check_format messages are put in this.  *}
+.struct per_xvec_message
+.{
+.  struct per_xvec_message *next;
+.  char message[];
+.};
+.
+INTERNAL_FUNCTION
+	_bfd_per_xvec_warn
+
+SYNOPSIS
+	struct per_xvec_message **_bfd_per_xvec_warn (const bfd_target *, size_t);
+
+DESCRIPTION
+	Return a location for the given target xvec to use for
+	warnings specific to that target.  If TARG is NULL, returns
+	the array of per_xvec_message pointers, otherwise if ALLOC is
+	zero, returns a pointer to a pointer to the list of messages
+	for TARG, otherwise (both TARG and ALLOC non-zero), allocates
+	a new 	per_xvec_message with space for a string of ALLOC
+	bytes and returns a pointer to a pointer to it.  May return a
+	pointer to a NULL pointer on allocation failure.
+*/
+
+struct per_xvec_message **
+_bfd_per_xvec_warn (const bfd_target *targ, size_t alloc)
+{
+  size_t idx;
+
+  if (!targ)
+    return per_xvec_warn;
+  for (idx = 0; idx < ARRAY_SIZE (_bfd_target_vector); idx++)
+    if (_bfd_target_vector[idx] == targ)
+      break;
+  struct per_xvec_message **m = per_xvec_warn + idx;
+  if (!alloc)
+    return m;
+  int count = 0;
+  while (*m)
+    {
+      m = &(*m)->next;
+      count++;
+    }
+  /* Anti-fuzzer measure.  Don't cache more than 5 messages.  */
+  if (count < 5)
+    {
+      *m = bfd_malloc (sizeof (**m) + alloc);
+      if (*m != NULL)
+	(*m)->next = NULL;
+    }
+  return m;
+}
+
 /* Find a target vector, given a name or configuration triplet.  */
 
 static const bfd_target *
@@ -1494,7 +1568,7 @@ FUNCTION
 	bfd_set_default_target
 
 SYNOPSIS
-	bfd_boolean bfd_set_default_target (const char *name);
+	bool bfd_set_default_target (const char *name);
 
 DESCRIPTION
 	Set the default target vector to use when recognizing a BFD.
@@ -1502,21 +1576,21 @@ DESCRIPTION
 	name or a configuration triplet.
 */
 
-bfd_boolean
+bool
 bfd_set_default_target (const char *name)
 {
   const bfd_target *target;
 
   if (bfd_default_vector[0] != NULL
       && strcmp (name, bfd_default_vector[0]->name) == 0)
-    return TRUE;
+    return true;
 
   target = find_target (name);
   if (target == NULL)
-    return FALSE;
+    return false;
 
   bfd_default_vector[0] = target;
-  return TRUE;
+  return true;
 }
 
 /*
@@ -1560,13 +1634,13 @@ bfd_find_target (const char *target_name
       if (abfd)
 	{
 	  abfd->xvec = target;
-	  abfd->target_defaulted = TRUE;
+	  abfd->target_defaulted = true;
 	}
       return target;
     }
 
   if (abfd)
-    abfd->target_defaulted = FALSE;
+    abfd->target_defaulted = false;
 
   target = find_target (targname);
   if (target == NULL)
@@ -1580,12 +1654,12 @@ bfd_find_target (const char *target_name
 /* Helper function for bfd_get_target_info to determine the target's
    architecture.  This method handles bfd internal target names as
    tuples and triplets.  */
-static bfd_boolean
+static bool
 _bfd_find_arch_match (const char *tname, const char **arch,
 		      const char **def_target_arch)
 {
   if (!arch)
-    return FALSE;
+    return false;
 
   while (*arch != NULL)
     {
@@ -1596,11 +1670,11 @@ _bfd_find_arch_match (const char *tname,
 	  && end_ch == 0)
 	{
 	  *def_target_arch = *arch;
-	  return TRUE;
+	  return true;
 	}
       arch++;
     }
-  return FALSE;
+  return false;
 }
 
 /*
@@ -1609,7 +1683,7 @@ FUNCTION
 SYNOPSIS
 	const bfd_target *bfd_get_target_info (const char *target_name,
 					       bfd *abfd,
-					       bfd_boolean *is_bigendian,
+					       bool *is_bigendian,
 					       int *underscoring,
 					       const char **def_target_arch);
 DESCRIPTION
@@ -1634,13 +1708,13 @@ DESCRIPTION
 */
 const bfd_target *
 bfd_get_target_info (const char *target_name, bfd *abfd,
-		     bfd_boolean *is_bigendian,
+		     bool *is_bigendian,
 		     int *underscoring, const char **def_target_arch)
 {
   const bfd_target *target_vec;
 
   if (is_bigendian)
-    *is_bigendian = FALSE;
+    *is_bigendian = false;
   if (underscoring)
     *underscoring = -1;
   if (def_target_arch)
@@ -1649,8 +1723,7 @@ bfd_get_target_info (const char *target_
   if (! target_vec)
     return NULL;
   if (is_bigendian)
-    *is_bigendian = ((target_vec->byteorder == BFD_ENDIAN_BIG) ? TRUE
-							       : FALSE);
+    *is_bigendian = target_vec->byteorder == BFD_ENDIAN_BIG;
   if (underscoring)
     *underscoring = ((int) target_vec->symbol_leading_char) & 0xff;
 
@@ -1687,8 +1760,7 @@ bfd_get_target_info (const char *target_
 	    _bfd_find_arch_match (tname, arches, def_target_arch);
 	}
 
-      if (arches)
-	free (arches);
+      free (arches);
     }
   return target_vec;
 }
@@ -1711,7 +1783,7 @@ const char **
 bfd_target_list (void)
 {
   int vec_length = 0;
-  bfd_size_type amt;
+  size_t amt;
   const bfd_target * const *target;
   const  char **name_list, **name_ptr;
 
@@ -1789,10 +1861,7 @@ bfd_flavour_name (enum bfd_flavour flavo
     case bfd_target_verilog_flavour: return "Verilog";
     case bfd_target_ihex_flavour: return "Ihex";
     case bfd_target_som_flavour: return "SOM";
-    case bfd_target_os9k_flavour: return "OS9K";
-    case bfd_target_versados_flavour: return "Versados";
     case bfd_target_msdos_flavour: return "MSDOS";
-    case bfd_target_ovax_flavour: return "Ovax";
     case bfd_target_evax_flavour: return "Evax";
     case bfd_target_mmo_flavour: return "mmo";
     case bfd_target_mach_o_flavour: return "MACH_O";
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/tekhex.c ./bfd/tekhex.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/tekhex.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/tekhex.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD backend for Extended Tektronix Hex Format  objects.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -204,12 +204,12 @@ static void
 tekhex_init (void)
 {
   unsigned int i;
-  static bfd_boolean inited = FALSE;
+  static bool inited = false;
   int val;
 
   if (! inited)
     {
-      inited = TRUE;
+      inited = true;
       hex_init ();
       val = 0;
       for (i = 0; i < 10; i++)
@@ -266,7 +266,7 @@ typedef struct tekhex_data_struct
 
 #define enda(x) (x->vma + x->size)
 
-static bfd_boolean
+static bool
 getvalue (char **srcp, bfd_vma *valuep, char * endp)
 {
   char *src = *srcp;
@@ -274,10 +274,10 @@ getvalue (char **srcp, bfd_vma *valuep,
   unsigned int len;
 
   if (src >= endp)
-    return FALSE;
+    return false;
 
   if (!ISHEX (*src))
-    return FALSE;
+    return false;
 
   len = hex_value (*src++);
   if (len == 0)
@@ -285,7 +285,7 @@ getvalue (char **srcp, bfd_vma *valuep,
   while (len-- && src < endp)
     {
       if (!ISHEX (*src))
-	return FALSE;
+	return false;
       value = value << 4 | hex_value (*src++);
     }
 
@@ -294,7 +294,7 @@ getvalue (char **srcp, bfd_vma *valuep,
   return len == -1U;
 }
 
-static bfd_boolean
+static bool
 getsym (char *dstp, char **srcp, unsigned int *lenp, char * endp)
 {
   char *src = *srcp;
@@ -302,7 +302,7 @@ getsym (char *dstp, char **srcp, unsigne
   unsigned int len;
 
   if (!ISHEX (*src))
-    return FALSE;
+    return false;
 
   len = hex_value (*src++);
   if (len == 0)
@@ -316,7 +316,7 @@ getsym (char *dstp, char **srcp, unsigne
 }
 
 static struct data_struct *
-find_chunk (bfd *abfd, bfd_vma vma, bfd_boolean create)
+find_chunk (bfd *abfd, bfd_vma vma, bool create)
 {
   struct data_struct *d = abfd->tdata.tekhex_data->data;
 
@@ -346,7 +346,7 @@ insert_byte (bfd *abfd, int value, bfd_v
   if (value != 0)
     {
       /* Find the chunk that this byte needs and put it in.  */
-      struct data_struct *d = find_chunk (abfd, addr, TRUE);
+      struct data_struct *d = find_chunk (abfd, addr, true);
 
       d->chunk_data[addr & CHUNK_MASK] = value;
       d->chunk_init[(addr & CHUNK_MASK) / CHUNK_SPAN] = 1;
@@ -356,7 +356,7 @@ insert_byte (bfd *abfd, int value, bfd_v
 /* The first pass is to find the names of all the sections, and see
   how big the data is.  */
 
-static bfd_boolean
+static bool
 first_phase (bfd *abfd, int type, char *src, char * src_end)
 {
   asection *section, *alt_section;
@@ -372,7 +372,7 @@ first_phase (bfd *abfd, int type, char *
 	bfd_vma addr;
 
 	if (!getvalue (&src, &addr, src_end))
-	  return FALSE;
+	  return false;
 
 	while (*src && src < src_end - 1)
 	  {
@@ -380,24 +380,24 @@ first_phase (bfd *abfd, int type, char *
 	    src += 2;
 	    addr++;
 	  }
-	return TRUE;
+	return true;
       }
 
     case '3':
       /* Symbol record, read the segment.  */
       if (!getsym (sym, &src, &len, src_end))
-	return FALSE;
+	return false;
       section = bfd_get_section_by_name (abfd, sym);
       if (section == NULL)
 	{
 	  char *n = (char *) bfd_alloc (abfd, (bfd_size_type) len + 1);
 
 	  if (!n)
-	    return FALSE;
+	    return false;
 	  memcpy (n, sym, len + 1);
 	  section = bfd_make_section (abfd, n);
 	  if (section == NULL)
-	    return FALSE;
+	    return false;
 	}
       alt_section = NULL;
       while (src < src_end && *src)
@@ -407,16 +407,16 @@ first_phase (bfd *abfd, int type, char *
 	    case '1':		/* Section range.  */
 	      src++;
 	      if (!getvalue (&src, &section->vma, src_end))
-		return FALSE;
+		return false;
 	      if (!getvalue (&src, &val, src_end))
-		return FALSE;
+		return false;
 	      if (val < section->vma)
 		val = section->vma;
 	      section->size = val - section->vma;
 	      /* PR 17512: file: objdump-s-endless-loop.tekhex.
 		 Check for overlarge section sizes.  */
 	      if (section->size & 0x80000000)
-		return FALSE;
+		return false;
 	      section->flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC;
 	      break;
 	    case '0':
@@ -428,13 +428,13 @@ first_phase (bfd *abfd, int type, char *
 	    case '8':
 	      /* Symbols, add to section.  */
 	      {
-		bfd_size_type amt = sizeof (tekhex_symbol_type);
+		size_t amt = sizeof (tekhex_symbol_type);
 		tekhex_symbol_type *new_symbol = (tekhex_symbol_type *)
 		    bfd_alloc (abfd, amt);
 		char stype = (*src);
 
 		if (!new_symbol)
-		  return FALSE;
+		  return false;
 		new_symbol->symbol.the_bfd = abfd;
 		src++;
 		abfd->symcount++;
@@ -442,11 +442,11 @@ first_phase (bfd *abfd, int type, char *
 		new_symbol->prev = abfd->tdata.tekhex_data->symbols;
 		abfd->tdata.tekhex_data->symbols = new_symbol;
 		if (!getsym (sym, &src, &len, src_end))
-		  return FALSE;
+		  return false;
 		new_symbol->symbol.name = (const char *)
 		    bfd_alloc (abfd, (bfd_size_type) len + 1);
 		if (!new_symbol->symbol.name)
-		  return FALSE;
+		  return false;
 		memcpy ((char *) (new_symbol->symbol.name), sym, len + 1);
 		new_symbol->symbol.section = section;
 		if (stype <= '4')
@@ -469,7 +469,7 @@ first_phase (bfd *abfd, int type, char *
 			    (abfd, section->name,
 			     (section->flags & ~SEC_DATA) | SEC_CODE);
 			if (alt_section == NULL)
-			  return FALSE;
+			  return false;
 			new_symbol->symbol.section = alt_section;
 		      }
 		  }
@@ -487,36 +487,36 @@ first_phase (bfd *abfd, int type, char *
 			    (abfd, section->name,
 			     (section->flags & ~SEC_CODE) | SEC_DATA);
 			if (alt_section == NULL)
-			  return FALSE;
+			  return false;
 			new_symbol->symbol.section = alt_section;
 		      }
 		  }
 		if (!getvalue (&src, &val, src_end))
-		  return FALSE;
+		  return false;
 		new_symbol->symbol.value = val - section->vma;
 		break;
 	      }
 	    default:
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Pass over a tekhex, calling one of the above functions on each
    record.  */
 
-static bfd_boolean
-pass_over (bfd *abfd, bfd_boolean (*func) (bfd *, int, char *, char *))
+static bool
+pass_over (bfd *abfd, bool (*func) (bfd *, int, char *, char *))
 {
   unsigned int chars_on_line;
-  bfd_boolean is_eof = FALSE;
+  bool is_eof = false;
 
   /* To the front of the file.  */
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-    return FALSE;
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
+    return false;
 
   while (! is_eof)
     {
@@ -524,16 +524,16 @@ pass_over (bfd *abfd, bfd_boolean (*func
       char type;
 
       /* Find first '%'.  */
-      is_eof = (bfd_boolean) (bfd_bread (src, (bfd_size_type) 1, abfd) != 1);
-      while (*src != '%' && !is_eof)
-	is_eof = (bfd_boolean) (bfd_bread (src, (bfd_size_type) 1, abfd) != 1);
+      is_eof = bfd_read (src, 1, abfd) != 1;
+      while (!is_eof && *src != '%')
+	is_eof = bfd_read (src, 1, abfd) != 1;
 
       if (is_eof)
 	break;
 
       /* Fetch the type and the length and the checksum.  */
-      if (bfd_bread (src, (bfd_size_type) 5, abfd) != 5)
-	return FALSE;
+      if (bfd_read (src, 5, abfd) != 5)
+	return false;
 
       type = src[2];
 
@@ -544,18 +544,18 @@ pass_over (bfd *abfd, bfd_boolean (*func
       chars_on_line = HEX (src) - 5;
 
       if (chars_on_line >= MAXCHUNK)
-	return FALSE;
+	return false;
 
-      if (bfd_bread (src, (bfd_size_type) chars_on_line, abfd) != chars_on_line)
-	return FALSE;
+      if (bfd_read (src, chars_on_line, abfd) != chars_on_line)
+	return false;
 
       /* Put a null at the end.  */
       src[chars_on_line] = 0;
       if (!func (abfd, type, src, src + chars_on_line))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 static long
@@ -581,34 +581,34 @@ tekhex_get_symtab_upper_bound (bfd *abfd
 
 }
 
-static bfd_boolean
+static bool
 tekhex_mkobject (bfd *abfd)
 {
   tdata_type *tdata;
 
   tdata = (tdata_type *) bfd_alloc (abfd, (bfd_size_type) sizeof (tdata_type));
   if (!tdata)
-    return FALSE;
+    return false;
   abfd->tdata.tekhex_data = tdata;
   tdata->type = 1;
   tdata->head =  NULL;
   tdata->symbols = NULL;
   tdata->data = NULL;
-  return TRUE;
+  return true;
 }
 
 /* Return TRUE if the file looks like it's in TekHex format. Just look
    for a percent sign and some hex digits.  */
 
-static const bfd_target *
+static bfd_cleanup
 tekhex_object_p (bfd *abfd)
 {
   char b[4];
 
   tekhex_init ();
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_bread (b, (bfd_size_type) 4, abfd) != 4)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_read (b, 4, abfd) != 4)
     return NULL;
 
   if (b[0] != '%' || !ISHEX (b[1]) || !ISHEX (b[2]) || !ISHEX (b[3]))
@@ -619,7 +619,7 @@ tekhex_object_p (bfd *abfd)
   if (!pass_over (abfd, first_phase))
     return NULL;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 static void
@@ -628,7 +628,7 @@ move_section_contents (bfd *abfd,
 		       const void * locationp,
 		       file_ptr offset,
 		       bfd_size_type count,
-		       bfd_boolean get)
+		       bool get)
 {
   bfd_vma addr;
   char *location = (char *) locationp;
@@ -641,7 +641,7 @@ move_section_contents (bfd *abfd,
       /* Get high bits of address.  */
       bfd_vma chunk_number = addr & ~(bfd_vma) CHUNK_MASK;
       bfd_vma low_bits = addr & CHUNK_MASK;
-      bfd_boolean must_write = !get && *location != 0;
+      bool must_write = !get && *location != 0;
 
       if (chunk_number != prev_number || (!d && must_write))
 	{
@@ -667,7 +667,7 @@ move_section_contents (bfd *abfd,
     }
 }
 
-static bfd_boolean
+static bool
 tekhex_get_section_contents (bfd *abfd,
 			     asection *section,
 			     void * locationp,
@@ -676,14 +676,14 @@ tekhex_get_section_contents (bfd *abfd,
 {
   if (section->flags & (SEC_LOAD | SEC_ALLOC))
     {
-      move_section_contents (abfd, section, locationp, offset, count, TRUE);
-      return TRUE;
+      move_section_contents (abfd, section, locationp, offset, count, true);
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 tekhex_set_arch_mach (bfd *abfd,
 		      enum bfd_architecture arch,
 		      unsigned long machine)
@@ -695,7 +695,7 @@ tekhex_set_arch_mach (bfd *abfd,
 
 /* We have to save up all the Tekhexords for a splurge before output.  */
 
-static bfd_boolean
+static bool
 tekhex_set_section_contents (bfd *abfd,
 			     sec_ptr section,
 			     const void * locationp,
@@ -705,11 +705,11 @@ tekhex_set_section_contents (bfd *abfd,
   if (section->flags & (SEC_LOAD | SEC_ALLOC))
     {
       move_section_contents (abfd, section, locationp, offset, bytes_to_do,
-			     FALSE);
-      return TRUE;
+			     false);
+      return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 static void
@@ -788,15 +788,15 @@ out (bfd *abfd, int type, char *start, c
   sum += sum_block[(unsigned char) front[2]];
   sum += sum_block[(unsigned char) front[3]];	/* Type.  */
   TOHEX (front + 4, sum);
-  if (bfd_bwrite (front, (bfd_size_type) 6, abfd) != 6)
+  if (bfd_write (front, 6, abfd) != 6)
     abort ();
   end[0] = '\n';
   wrlen = end - start + 1;
-  if (bfd_bwrite (start, wrlen, abfd) != wrlen)
+  if (bfd_write (start, wrlen, abfd) != wrlen)
     abort ();
 }
 
-static bfd_boolean
+static bool
 tekhex_write_object_contents (bfd *abfd)
 {
   char buffer[100];
@@ -886,7 +886,7 @@ tekhex_write_object_contents (bfd *abfd)
 		case 'C':
 		case 'U':
 		  bfd_set_error (bfd_error_wrong_format);
-		  return FALSE;
+		  return false;
 		}
 
 	      writesym (&dst, sym->name);
@@ -897,9 +897,9 @@ tekhex_write_object_contents (bfd *abfd)
     }
 
   /* And the terminator.  */
-  if (bfd_bwrite ("%0781010\n", (bfd_size_type) 9, abfd) != 9)
+  if (bfd_write ("%0781010\n", 9, abfd) != 9)
     abort ();
-  return TRUE;
+  return true;
 }
 
 static int
@@ -912,7 +912,7 @@ tekhex_sizeof_headers (bfd *abfd ATTRIBU
 static asymbol *
 tekhex_make_empty_symbol (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (struct tekhex_symbol_struct);
+  size_t amt = sizeof (struct tekhex_symbol_struct);
   tekhex_symbol_type *new_symbol = (tekhex_symbol_type *) bfd_zalloc (abfd,
 								      amt);
 
@@ -966,6 +966,7 @@ tekhex_print_symbol (bfd *abfd,
 #define tekhex_bfd_is_local_label_name		     bfd_generic_is_local_label_name
 #define tekhex_get_lineno			    _bfd_nosymbols_get_lineno
 #define tekhex_find_nearest_line		    _bfd_nosymbols_find_nearest_line
+#define tekhex_find_nearest_line_with_alt	    _bfd_nosymbols_find_nearest_line_with_alt
 #define tekhex_find_line			    _bfd_nosymbols_find_line
 #define tekhex_find_inliner_info		    _bfd_nosymbols_find_inliner_info
 #define tekhex_get_symbol_version_string	    _bfd_nosymbols_get_symbol_version_string
@@ -1008,6 +1009,7 @@ const bfd_target tekhex_vec =
   ' ',				/* AR_pad_char.  */
   16,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/TODO ./bfd/TODO
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/TODO	2019-12-11 01:49:16.000000000 +0000
+++ ./bfd/TODO	2024-02-01 01:47:13.000000000 +0000
@@ -20,7 +20,7 @@ Things that still need to be done: -*- T
 
  o - upgrade the reloc handling as per Steve's suggestion.
 
-Copyright (C) 2012-2019 Free Software Foundation, Inc.
+Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/trad-core.c ./bfd/trad-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/trad-core.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/trad-core.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back end for traditional Unix core files (U-area and raw sections)
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
    Written by John Gilmore of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -25,19 +25,7 @@
 #include "libaout.h"	       /* BFD a.out internal data structures */
 
 #include <sys/param.h>
-#ifdef HAVE_DIRENT_H
-# include <dirent.h>
-#else
-# ifdef HAVE_SYS_NDIR_H
-#  include <sys/ndir.h>
-# endif
-# ifdef HAVE_SYS_DIR_H
-#  include <sys/dir.h>
-# endif
-# ifdef HAVE_NDIR_H
-#  include <ndir.h>
-# endif
-#endif
+#include <dirent.h>
 #include <signal.h>
 
 #include <sys/user.h>		/* After a.out.h  */
@@ -71,22 +59,22 @@ struct trad_core_struct
 
 /* Handle 4.2-style (and perhaps also sysV-style) core dump file.  */
 
-static const bfd_target *
+static bfd_cleanup
 trad_unix_core_file_p (bfd *abfd)
 {
   int val;
   struct user u;
   struct trad_core_struct *rawptr;
-  bfd_size_type amt;
+  size_t amt;
   flagword flags;
 
 #ifdef TRAD_CORE_USER_OFFSET
   /* If defined, this macro is the file position of the user struct.  */
-  if (bfd_seek (abfd, (file_ptr) TRAD_CORE_USER_OFFSET, SEEK_SET) != 0)
+  if (bfd_seek (abfd, TRAD_CORE_USER_OFFSET, SEEK_SET) != 0)
     return 0;
 #endif
 
-  val = bfd_bread ((void *) &u, (bfd_size_type) sizeof u, abfd);
+  val = bfd_read (&u, sizeof u, abfd);
   if (val != sizeof u)
     {
       /* Too small to be a core file */
@@ -220,7 +208,7 @@ trad_unix_core_file_p (bfd *abfd)
   core_datasec (abfd)->alignment_power = 2;
   core_regsec (abfd)->alignment_power = 2;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  fail:
   bfd_release (abfd, abfd->tdata.any);
@@ -261,9 +249,9 @@ swap_abort (void)
 #define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
 #define	NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
 #define	NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
-#define	NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
-#define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
-#define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
+#define	NO_GET64 ((uint64_t (*) (const void *)) swap_abort)
+#define	NO_PUT64 ((void (*) (uint64_t, void *)) swap_abort)
+#define	NO_GETS64 ((int64_t (*) (const void *)) swap_abort)
 
 const bfd_target core_trad_vec =
   {
@@ -279,6 +267,7 @@ const bfd_target core_trad_vec =
     ' ',			/* ar_pad_char */
     16,				/* ar_max_namelen */
     0,				/* match priority.  */
+    TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
     NO_GET64, NO_GETS64, NO_PUT64,	/* 64 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 32 bit data */
     NO_GET, NO_GETS, NO_PUT,		/* 16 bit data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vax1knetbsd.c ./bfd/vax1knetbsd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vax1knetbsd.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/vax1knetbsd.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for NetBSD/VAX (1K page size) a.out-ish binaries.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vaxnetbsd.c ./bfd/vaxnetbsd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vaxnetbsd.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/vaxnetbsd.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for NetBSD/VAX (4K page size) a.out-ish binaries.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/verilog.c ./bfd/verilog.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/verilog.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/verilog.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for verilog hex memory dump files.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Written by Anthony Green <green@moxielogic.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -62,6 +62,10 @@
    Data width in bytes.  */
 unsigned int VerilogDataWidth = 1;
 
+/* Modified by obcopy.c
+   Data endianness.  */
+enum bfd_endian VerilogDataEndianness = BFD_ENDIAN_UNKNOWN;
+
 /* Macros for converting between hex and binary.  */
 
 static const char digs[] = "0123456789ABCDEF";
@@ -95,19 +99,19 @@ typedef struct verilog_data_struct
 }
 tdata_type;
 
-static bfd_boolean
+static bool
 verilog_set_arch_mach (bfd *abfd, enum bfd_architecture arch, unsigned long mach)
 {
   if (arch != bfd_arch_unknown)
     return bfd_default_set_arch_mach (abfd, arch, mach);
 
   abfd->arch_info = & bfd_default_arch_struct;
-  return TRUE;
+  return true;
 }
 
-/* We have to save up all the outpu for a splurge before output.  */
+/* We have to save up all the output for a splurge before output.  */
 
-static bfd_boolean
+static bool
 verilog_set_section_contents (bfd *abfd,
 			      sec_ptr section,
 			      const void * location,
@@ -119,7 +123,7 @@ verilog_set_section_contents (bfd *abfd,
 
   entry = (verilog_data_list_type *) bfd_alloc (abfd, sizeof (* entry));
   if (entry == NULL)
-    return FALSE;
+    return false;
 
   if (bytes_to_do
       && (section->flags & SEC_ALLOC)
@@ -129,7 +133,7 @@ verilog_set_section_contents (bfd *abfd,
 
       data = (bfd_byte *) bfd_alloc (abfd, bytes_to_do);
       if (data == NULL)
-	return FALSE;
+	return false;
       memcpy ((void *) data, location, (size_t) bytes_to_do);
 
       entry->data = data;
@@ -159,18 +163,31 @@ verilog_set_section_contents (bfd *abfd,
 	    tdata->tail = entry;
 	}
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 verilog_write_address (bfd *abfd, bfd_vma address)
 {
-  char buffer[12];
+  char buffer[20];
   char *dst = buffer;
   bfd_size_type wrlen;
 
   /* Write the address.  */
   *dst++ = '@';
+#ifdef BFD64
+  if (address >= (bfd_vma)1 << 32)
+    {
+      TOHEX (dst, (address >> 56));
+      dst += 2;
+      TOHEX (dst, (address >> 48));
+      dst += 2;
+      TOHEX (dst, (address >> 40));
+      dst += 2;
+      TOHEX (dst, (address >> 32));
+      dst += 2;
+    }
+#endif
   TOHEX (dst, (address >> 24));
   dst += 2;
   TOHEX (dst, (address >> 16));
@@ -183,14 +200,14 @@ verilog_write_address (bfd *abfd, bfd_vm
   *dst++ = '\n';
   wrlen = dst - buffer;
 
-  return bfd_bwrite ((void *) buffer, wrlen, abfd) == wrlen;
+  return bfd_write (buffer, wrlen, abfd) == wrlen;
 }
 
 /* Write a record of type, of the supplied number of bytes. The
    supplied bytes and length don't have a checksum.  That's worked
    out here.  */
 
-static bfd_boolean
+static bool
 verilog_write_record (bfd *abfd,
 		      const bfd_byte *data,
 		      const bfd_byte *end)
@@ -207,7 +224,7 @@ verilog_write_record (bfd *abfd,
       > (long) sizeof (buffer))
     {
       /* FIXME: Should we generate an error message ?  */
-      return FALSE;
+      return false;
     }
 
   /* Write the data.
@@ -225,7 +242,8 @@ verilog_write_record (bfd *abfd,
 	    *dst++ = ' ';
 	}
     }
-  else if (bfd_little_endian (abfd))
+  else if ((VerilogDataEndianness == BFD_ENDIAN_UNKNOWN && bfd_little_endian (abfd)) /* FIXME: Can this happen ?  */
+	   || (VerilogDataEndianness == BFD_ENDIAN_LITTLE))
     {
       /* If the input byte stream contains:
 	   05 04 03 02 01 00
@@ -250,8 +268,10 @@ verilog_write_record (bfd *abfd,
 	  TOHEX (dst, *end);
 	  dst += 2;
 	}
+
+      /* FIXME: Should padding bytes be inserted here ?  */
     }
-  else
+  else /* Big endian output.  */
     {
       for (src = data; src < end;)
 	{
@@ -261,16 +281,17 @@ verilog_write_record (bfd *abfd,
 	  if ((src - data) % VerilogDataWidth == 0)
 	    *dst++ = ' ';
 	}
+      /* FIXME: Should padding bytes be inserted here ?  */
     }
 
   *dst++ = '\r';
   *dst++ = '\n';
   wrlen = dst - buffer;
 
-  return bfd_bwrite ((void *) buffer, wrlen, abfd) == wrlen;
+  return bfd_write (buffer, wrlen, abfd) == wrlen;
 }
 
-static bfd_boolean
+static bool
 verilog_write_section (bfd *abfd,
 		       tdata_type *tdata ATTRIBUTE_UNUSED,
 		       verilog_data_list_type *list)
@@ -278,7 +299,14 @@ verilog_write_section (bfd *abfd,
   unsigned int octets_written = 0;
   bfd_byte *location = list->data;
 
-  verilog_write_address (abfd, list->where);
+  /* Insist that the starting address is a multiple of the data width.  */
+  if (list->where % VerilogDataWidth)
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return false;
+    }
+
+  verilog_write_address (abfd, list->where / VerilogDataWidth);
   while (octets_written < list->size)
     {
       unsigned int octets_this_chunk = list->size - octets_written;
@@ -289,16 +317,16 @@ verilog_write_section (bfd *abfd,
       if (! verilog_write_record (abfd,
 				  location,
 				  location + octets_this_chunk))
-	return FALSE;
+	return false;
 
       octets_written += octets_this_chunk;
       location += octets_this_chunk;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 verilog_write_object_contents (bfd *abfd)
 {
   tdata_type *tdata = abfd->tdata.verilog_data;
@@ -310,10 +338,10 @@ verilog_write_object_contents (bfd *abfd
   while (list != (verilog_data_list_type *) NULL)
     {
       if (! verilog_write_section (abfd, tdata, list))
-	return FALSE;
+	return false;
       list = list->next;
     }
-  return TRUE;
+  return true;
 }
 
 /* Initialize by filling in the hex conversion array.  */
@@ -321,18 +349,18 @@ verilog_write_object_contents (bfd *abfd
 static void
 verilog_init (void)
 {
-  static bfd_boolean inited = FALSE;
+  static bool inited = false;
 
   if (! inited)
     {
-      inited = TRUE;
+      inited = true;
       hex_init ();
     }
 }
 
 /* Set up the verilog tdata information.  */
 
-static bfd_boolean
+static bool
 verilog_mkobject (bfd *abfd)
 {
   tdata_type *tdata;
@@ -341,13 +369,13 @@ verilog_mkobject (bfd *abfd)
 
   tdata = (tdata_type *) bfd_alloc (abfd, sizeof (tdata_type));
   if (tdata == NULL)
-    return FALSE;
+    return false;
 
   abfd->tdata.verilog_data = tdata;
   tdata->head = NULL;
   tdata->tail = NULL;
 
-  return TRUE;
+  return true;
 }
 
 #define verilog_close_and_cleanup		     _bfd_generic_close_and_cleanup
@@ -357,6 +385,7 @@ verilog_mkobject (bfd *abfd)
 #define verilog_bfd_is_local_label_name		     bfd_generic_is_local_label_name
 #define verilog_get_lineno			     _bfd_nosymbols_get_lineno
 #define verilog_find_nearest_line		     _bfd_nosymbols_find_nearest_line
+#define verilog_find_nearest_line_with_alt	     _bfd_nosymbols_find_nearest_line_with_alt
 #define verilog_find_inliner_info		     _bfd_nosymbols_find_inliner_info
 #define verilog_make_empty_symbol		     _bfd_generic_make_empty_symbol
 #define verilog_bfd_make_debug_symbol		     _bfd_nosymbols_bfd_make_debug_symbol
@@ -392,6 +421,7 @@ const bfd_target verilog_vec =
   ' ',				/* AR_pad_char.  */
   16,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/version.h ./bfd/version.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/version.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/version.h	2024-02-01 01:47:14.000000000 +0000
@@ -16,7 +16,7 @@
 
    In releases, the date is not included in either version strings or
    sonames.  */
-#define BFD_VERSION_DATE 20191211
+#define BFD_VERSION_DATE 20240201
 #define BFD_VERSION @bfd_version@
 #define BFD_VERSION_STRING  @bfd_version_package@ @bfd_version_string@
 #define REPORT_BUGS_TO @report_bugs_to@
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/version.m4 ./bfd/version.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/version.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/version.m4	2024-02-01 01:47:14.000000000 +0000
@@ -1 +1 @@
-m4_define([BFD_VERSION], [2.33.50])
+m4_define([BFD_VERSION], [2.42.50])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vms-alpha.c ./bfd/vms-alpha.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vms-alpha.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/vms-alpha.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* vms.c -- BFD back-end for EVAX (openVMS/Alpha) files.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    Initial version written by Klaus Kaempf (kkaempf@rmi.de)
    Major rewrite by Adacore.
@@ -34,6 +34,7 @@
 */
 
 #include "sysdep.h"
+#include <limits.h>
 #include "bfd.h"
 #include "bfdlink.h"
 #include "libbfd.h"
@@ -71,6 +72,9 @@
 
 
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
 
 /* The r_type field in a reloc is one of the following values.  */
 #define ALPHA_R_IGNORE		0
@@ -151,7 +155,7 @@ struct eom_struct
 {
   unsigned int eom_l_total_lps;
   unsigned short eom_w_comcod;
-  bfd_boolean eom_has_transfer;
+  bool eom_has_transfer;
   unsigned char eom_b_tfrflg;
   unsigned int eom_l_psindx;
   unsigned int eom_l_tfradr;
@@ -262,8 +266,9 @@ struct module
 
 struct vms_private_data_struct
 {
-  /* If true, relocs have been read.  */
-  bfd_boolean reloc_done;
+  /* If 1, relocs have been read successfully, if 0 they have yet to be
+     read, if -1 reading relocs failed.  */
+  int reloc_done;
 
   /* Record input buffer.  */
   struct vms_rec_rd recrd;
@@ -367,15 +372,15 @@ struct vms_section_data_struct
 struct vms_private_data_struct *bfd_vms_get_data (bfd *);
 
 static int vms_get_remaining_object_record (bfd *, unsigned int);
-static bfd_boolean _bfd_vms_slurp_object_records (bfd * abfd);
-static void alpha_vms_add_fixup_lp (struct bfd_link_info *, bfd *, bfd *);
-static void alpha_vms_add_fixup_ca (struct bfd_link_info *, bfd *, bfd *);
-static void alpha_vms_add_fixup_qr (struct bfd_link_info *, bfd *, bfd *,
+static bool _bfd_vms_slurp_object_records (bfd * abfd);
+static bool alpha_vms_add_fixup_lp (struct bfd_link_info *, bfd *, bfd *);
+static bool alpha_vms_add_fixup_ca (struct bfd_link_info *, bfd *, bfd *);
+static bool alpha_vms_add_fixup_qr (struct bfd_link_info *, bfd *, bfd *,
 				    bfd_vma);
-static void alpha_vms_add_fixup_lr (struct bfd_link_info *, unsigned int,
+static bool alpha_vms_add_fixup_lr (struct bfd_link_info *, unsigned int,
 				    bfd_vma);
-static void alpha_vms_add_lw_reloc (struct bfd_link_info *);
-static void alpha_vms_add_qw_reloc (struct bfd_link_info *);
+static bool alpha_vms_add_lw_reloc (struct bfd_link_info *);
+static bool alpha_vms_add_qw_reloc (struct bfd_link_info *);
 
 struct vector_type
 {
@@ -401,17 +406,12 @@ struct vector_type
 
 /* Be sure there is room for a new element.  */
 
-static void vector_grow1 (struct vector_type *vec, size_t elsz);
+static void *vector_grow1 (struct vector_type *vec, size_t elsz);
 
 /* Allocate room for a new element and return its address.  */
 
 #define VEC_APPEND(VEC, TYPE)					\
-  (vector_grow1 (&VEC, sizeof (TYPE)), &VEC_EL(VEC, TYPE, (VEC).nbr_el++))
-
-/* Append an element.  */
-
-#define VEC_APPEND_EL(VEC, TYPE, EL)		\
-  (*(VEC_APPEND (VEC, TYPE)) = EL)
+  ((TYPE *) vector_grow1 (&VEC, sizeof (TYPE)))
 
 struct alpha_vms_vma_ref
 {
@@ -422,7 +422,7 @@ struct alpha_vms_vma_ref
 struct alpha_vms_shlib_el
 {
   bfd *abfd;
-  bfd_boolean has_fixups;
+  bool has_fixups;
 
   struct vector_type lp;	/* Vector of bfd_vma.  */
   struct vector_type ca;	/* Vector of bfd_vma.  */
@@ -463,7 +463,7 @@ struct alpha_vms_link_hash_entry
 /* Read & process EIHD record.
    Return TRUE on success, FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_eihd (bfd *abfd, unsigned int *eisd_offset,
 		     unsigned int *eihs_offset)
 {
@@ -478,7 +478,7 @@ _bfd_vms_slurp_eihd (bfd *abfd, unsigned
     {
       _bfd_error_handler (_("corrupt EIHD record - size is too small"));
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   size = bfd_getl32 (eihd->size);
@@ -503,14 +503,15 @@ _bfd_vms_slurp_eihd (bfd *abfd, unsigned
   vms_debug2 ((4, "EIHD size %d imgtype %d symvva 0x%lx eisd %d eihs %d\n",
 	       size, imgtype, (unsigned long)symvva,
 	       *eisd_offset, *eihs_offset));
+  (void) size;
 
-  return TRUE;
+  return true;
 }
 
 /* Read & process EISD record.
    Return TRUE on success, FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_eisd (bfd *abfd, unsigned int offset)
 {
   int section_count = 0;
@@ -522,19 +523,19 @@ _bfd_vms_slurp_eisd (bfd *abfd, unsigned
       struct vms_eisd *eisd;
       unsigned int rec_size;
       unsigned int size;
-      bfd_uint64_t vaddr;
+      uint64_t vaddr;
       unsigned int flags;
       unsigned int vbn;
       char *name = NULL;
       asection *section;
       flagword bfd_flags;
 
-      /* PR 17512: file: 3d9e9fe9.
-	 12 is the offset of the eisdsize field from the start of the record (8)
-	 plus the size of the eisdsize field (4).  */
-      if (offset >= PRIV (recrd.rec_size) - 12)
-	return FALSE;
-      eisd = (struct vms_eisd *)(PRIV (recrd.rec) + offset);
+      /* PR 17512: file: 3d9e9fe9.  */
+      if (offset > PRIV (recrd.rec_size)
+	  || (PRIV (recrd.rec_size) - offset
+	      < offsetof (struct vms_eisd, eisdsize) + 4))
+	return false;
+      eisd = (struct vms_eisd *) (PRIV (recrd.rec) + offset);
       rec_size = bfd_getl32 (eisd->eisdsize);
       if (rec_size == 0)
 	break;
@@ -547,12 +548,11 @@ _bfd_vms_slurp_eisd (bfd *abfd, unsigned
 	}
 
       /* Make sure that there is enough data present in the record.  */
-      /* FIXME: Should we use sizeof (struct vms_eisd) rather than just 32 here ?  */
-      if (rec_size < 32)
-	return FALSE;
+      if (rec_size < offsetof (struct vms_eisd, type) + 1)
+	return false;
       /* Make sure that the record is not too big either.  */
-      if (offset + rec_size >= PRIV (recrd.rec_size))
-	return FALSE;
+      if (rec_size > PRIV (recrd.rec_size) - offset)
+	return false;
 
       offset += rec_size;
 
@@ -592,13 +592,16 @@ _bfd_vms_slurp_eisd (bfd *abfd, unsigned
 
       if (flags & EISD__M_GBL)
 	{
-	  if (rec_size < offsetof (struct vms_eisd, gblnam))
-	    return FALSE;
+	  if (rec_size <= offsetof (struct vms_eisd, gblnam))
+	    return false;
 	  else if (rec_size < sizeof (struct vms_eisd))
-	    name = _bfd_vms_save_counted_string (eisd->gblnam,
+	    name = _bfd_vms_save_counted_string (abfd, eisd->gblnam,
 						 rec_size - offsetof (struct vms_eisd, gblnam));
 	  else
-	    name = _bfd_vms_save_counted_string (eisd->gblnam, EISD__K_GBLNAMLEN);
+	    name = _bfd_vms_save_counted_string (abfd, eisd->gblnam,
+						 EISD__K_GBLNAMLEN);
+	  if (name == NULL || name[0] == 0)
+	    return false;
 	  bfd_flags |= SEC_COFF_SHARED_LIBRARY;
 	  bfd_flags &= ~(SEC_ALLOC | SEC_LOAD);
 	}
@@ -610,7 +613,9 @@ _bfd_vms_slurp_eisd (bfd *abfd, unsigned
 	{
 	  const char *pfx;
 
-	  name = (char*) bfd_alloc (abfd, 32);
+	  name = (char *) bfd_alloc (abfd, 32);
+	  if (name == NULL)
+	    return false;
 	  if (flags & EISD__M_DZRO)
 	    pfx = "BSS";
 	  else if (flags & EISD__M_EXE)
@@ -626,23 +631,23 @@ _bfd_vms_slurp_eisd (bfd *abfd, unsigned
       section = bfd_make_section (abfd, name);
 
       if (!section)
-	return FALSE;
+	return false;
 
       section->filepos = vbn ? VMS_BLOCK_SIZE * (vbn - 1) : 0;
       section->size = size;
       section->vma = vaddr;
 
       if (!bfd_set_section_flags (section, bfd_flags))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read & process EIHS record.
    Return TRUE on success, FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_eihs (bfd *abfd, unsigned int offset)
 {
   unsigned char *p = PRIV (recrd.rec) + offset;
@@ -660,7 +665,7 @@ _bfd_vms_slurp_eihs (bfd *abfd, unsigned
       _bfd_error_handler (_("unable to read EIHS record at offset %#x"),
 			  offset);
       bfd_set_error (bfd_error_file_truncated);
-      return FALSE;
+      return false;
     }
 
   gstvbn   = bfd_getl32 (p + EIHS__L_GSTVBN);
@@ -682,13 +687,13 @@ _bfd_vms_slurp_eihs (bfd *abfd, unsigned
 
       section = bfd_make_section (abfd, "$DST$");
       if (!section)
-	return FALSE;
+	return false;
 
       section->size = dstsize;
       section->filepos = VMS_BLOCK_SIZE * (dstvbn - 1);
 
       if (!bfd_set_section_flags (section, bfd_flags))
-	return FALSE;
+	return false;
 
       PRIV (dst_section) = section;
       abfd->flags |= (HAS_DEBUG | HAS_LINENO);
@@ -700,13 +705,13 @@ _bfd_vms_slurp_eihs (bfd *abfd, unsigned
 
       section = bfd_make_section (abfd, "$DMT$");
       if (!section)
-	return FALSE;
+	return false;
 
       section->size = dmtbytes;
       section->filepos = VMS_BLOCK_SIZE * (dmtvbn - 1);
 
       if (!bfd_set_section_flags (section, bfd_flags))
-	return FALSE;
+	return false;
     }
 
   if (gstvbn)
@@ -714,16 +719,16 @@ _bfd_vms_slurp_eihs (bfd *abfd, unsigned
       if (bfd_seek (abfd, VMS_BLOCK_SIZE * (gstvbn - 1), SEEK_SET))
 	{
 	  bfd_set_error (bfd_error_file_truncated);
-	  return FALSE;
+	  return false;
 	}
 
       if (!_bfd_vms_slurp_object_records (abfd))
-	return FALSE;
+	return false;
 
       abfd->flags |= HAS_SYMS;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Object file reading.  */
@@ -797,7 +802,7 @@ _bfd_vms_get_object_record (bfd *abfd)
   /* Skip alignment byte if the current position is odd.  */
   if (PRIV (recrd.file_format) == FF_FOREIGN && (bfd_tell (abfd) & 1))
     {
-      if (bfd_bread (PRIV (recrd.buf), 1, abfd) != 1)
+      if (bfd_read (PRIV (recrd.buf), 1, abfd) != 1)
 	{
 	  bfd_set_error (bfd_error_file_truncated);
 	  return -1;
@@ -805,7 +810,7 @@ _bfd_vms_get_object_record (bfd *abfd)
     }
 
   /* Read the record header  */
-  if (bfd_bread (PRIV (recrd.buf), test_len, abfd) != test_len)
+  if (bfd_read (PRIV (recrd.buf), test_len, abfd) != test_len)
     {
       bfd_set_error (bfd_error_file_truncated);
       return -1;
@@ -861,7 +866,7 @@ vms_get_remaining_object_record (bfd *ab
   if (to_read > PRIV (recrd.buf_size))
     {
       PRIV (recrd.buf)
-	= (unsigned char *) bfd_realloc (PRIV (recrd.buf), to_read);
+	= (unsigned char *) bfd_realloc_or_free (PRIV (recrd.buf), to_read);
       if (PRIV (recrd.buf) == NULL)
 	return 0;
       PRIV (recrd.buf_size) = to_read;
@@ -875,7 +880,7 @@ vms_get_remaining_object_record (bfd *ab
 
   vms_debug2 ((8, "vms_get_remaining_obj_record: to_read %d\n", to_read));
 
-  if (bfd_bread (PRIV (recrd.buf) + read_so_far, to_read, abfd) != to_read)
+  if (bfd_read (PRIV (recrd.buf) + read_so_far, to_read, abfd) != to_read)
     {
       bfd_set_error (bfd_error_file_truncated);
       return 0;
@@ -894,7 +899,7 @@ vms_get_remaining_object_record (bfd *ab
 /* Read and process emh record.
    Return TRUE on success, FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_ehdr (bfd *abfd)
 {
   unsigned char *ptr;
@@ -924,36 +929,39 @@ _bfd_vms_slurp_ehdr (bfd *abfd)
       PRIV (hdr_data).hdr_l_recsiz = bfd_getl32 (vms_rec + 16);
       if ((vms_rec + 20 + vms_rec[20] + 1) >= end)
 	goto fail;
-      PRIV (hdr_data).hdr_t_name   = _bfd_vms_save_counted_string (vms_rec + 20, vms_rec[20]);
+      PRIV (hdr_data).hdr_t_name
+	= _bfd_vms_save_counted_string (abfd, vms_rec + 20, vms_rec[20]);
       ptr = vms_rec + 20 + vms_rec[20] + 1;
       if ((ptr + *ptr + 1) >= end)
 	goto fail;
-      PRIV (hdr_data).hdr_t_version =_bfd_vms_save_counted_string (ptr, *ptr);
+      PRIV (hdr_data).hdr_t_version
+	= _bfd_vms_save_counted_string (abfd, ptr, *ptr);
       ptr += *ptr + 1;
       if (ptr + 17 >= end)
 	goto fail;
-      PRIV (hdr_data).hdr_t_date = _bfd_vms_save_sized_string (ptr, 17);
+      PRIV (hdr_data).hdr_t_date
+	= _bfd_vms_save_sized_string (abfd, ptr, 17);
       break;
 
     case EMH__C_LNM:
       if (vms_rec + PRIV (recrd.rec_size - 6) > end)
 	goto fail;
-      PRIV (hdr_data).hdr_c_lnm =
-	_bfd_vms_save_sized_string (vms_rec, PRIV (recrd.rec_size - 6));
+      PRIV (hdr_data).hdr_c_lnm
+	= _bfd_vms_save_sized_string (abfd, vms_rec, PRIV (recrd.rec_size - 6));
       break;
 
     case EMH__C_SRC:
       if (vms_rec + PRIV (recrd.rec_size - 6) > end)
 	goto fail;
-      PRIV (hdr_data).hdr_c_src =
-	_bfd_vms_save_sized_string (vms_rec, PRIV (recrd.rec_size - 6));
+      PRIV (hdr_data).hdr_c_src
+	= _bfd_vms_save_sized_string (abfd, vms_rec, PRIV (recrd.rec_size - 6));
       break;
 
     case EMH__C_TTL:
       if (vms_rec + PRIV (recrd.rec_size - 6) > end)
 	goto fail;
-      PRIV (hdr_data).hdr_c_ttl =
-	_bfd_vms_save_sized_string (vms_rec, PRIV (recrd.rec_size - 6));
+      PRIV (hdr_data).hdr_c_ttl
+	= _bfd_vms_save_sized_string (abfd, vms_rec, PRIV (recrd.rec_size - 6));
       break;
 
     case EMH__C_CPR:
@@ -964,10 +972,10 @@ _bfd_vms_slurp_ehdr (bfd *abfd)
     default:
     fail:
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Typical sections for evax object files.  */
@@ -1107,7 +1115,7 @@ vms_esecflag_by_name (const struct sec_f
 /* Add SYM to the symbol table of ABFD.
    Return FALSE in case of error.  */
 
-static bfd_boolean
+static bool
 add_symbol_entry (bfd *abfd, struct vms_symbol_entry *sym)
 {
   if (PRIV (gsd_sym_count) >= PRIV (max_sym_count))
@@ -1121,28 +1129,36 @@ add_symbol_entry (bfd *abfd, struct vms_
       else
 	{
 	  PRIV (max_sym_count) *= 2;
-	  PRIV (syms) = bfd_realloc
+	  PRIV (syms) = bfd_realloc_or_free
 	    (PRIV (syms),
 	     (PRIV (max_sym_count) * sizeof (struct vms_symbol_entry *)));
 	}
       if (PRIV (syms) == NULL)
-	return FALSE;
+	return false;
     }
 
   PRIV (syms)[PRIV (gsd_sym_count)++] = sym;
-  return TRUE;
+  return true;
 }
 
 /* Create a symbol whose name is ASCIC and add it to ABFD.
    Return NULL in case of error.  */
 
 static struct vms_symbol_entry *
-add_symbol (bfd *abfd, const unsigned char *ascic)
+add_symbol (bfd *abfd, const unsigned char *ascic, unsigned int max)
 {
   struct vms_symbol_entry *entry;
-  int len;
+  unsigned int len;
 
   len = *ascic++;
+  max -= 1;
+  if (len > max)
+    {
+      _bfd_error_handler (_("record is too small for symbol name length"));
+      bfd_set_error (bfd_error_bad_value);
+      return NULL;
+    }
+
   entry = (struct vms_symbol_entry *)bfd_zalloc (abfd, sizeof (*entry) + len);
   if (entry == NULL)
     return NULL;
@@ -1158,13 +1174,14 @@ add_symbol (bfd *abfd, const unsigned ch
 
 /* Read and process EGSD.  Return FALSE on failure.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_egsd (bfd *abfd)
 {
   int gsd_type;
   unsigned int gsd_size;
   unsigned char *vms_rec;
-  unsigned long base_addr;
+  bfd_vma base_addr;
+  long psindx;
 
   vms_debug2 ((2, "EGSD\n"));
 
@@ -1173,14 +1190,14 @@ _bfd_vms_slurp_egsd (bfd *abfd)
       _bfd_error_handler (_("corrupt EGSD record: its size (%#x) is too small"),
 			  PRIV (recrd.rec_size));
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   PRIV (recrd.rec) += 8;	/* Skip type, size, align pad.  */
   PRIV (recrd.rec_size) -= 8;
 
   /* Calculate base address for each section.  */
-  base_addr = 0L;
+  base_addr = 0;
 
   while (PRIV (recrd.rec_size) > 4)
     {
@@ -1194,18 +1211,21 @@ _bfd_vms_slurp_egsd (bfd *abfd)
       /* PR 21615: Check for size overflow.  */
       if (PRIV (recrd.rec_size) < gsd_size)
 	{
-	  _bfd_error_handler (_("corrupt EGSD record: size (%#x) is larger than remaining space (%#x)"),
-			      gsd_size, PRIV (recrd.rec_size));
+	  _bfd_error_handler (_("corrupt EGSD record type %d: size (%#x) "
+				"is larger than remaining space (%#x)"),
+			      gsd_type, gsd_size, PRIV (recrd.rec_size));
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       if (gsd_size < 4)
 	{
-	  _bfd_error_handler (_("corrupt EGSD record: size (%#x) is too small"),
-			      gsd_size);
+	too_small:
+	  _bfd_error_handler (_("corrupt EGSD record type %d: size (%#x) "
+				"is too small"),
+			      gsd_type, gsd_size);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       switch (gsd_type)
@@ -1213,10 +1233,12 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 	case EGSD__C_PSC:
 	  /* Program section definition.  */
 	  {
-	    struct vms_egps *egps = (struct vms_egps *)vms_rec;
+	    struct vms_egps *egps = (struct vms_egps *) vms_rec;
 	    flagword new_flags, vms_flags;
 	    asection *section;
 
+	    if (offsetof (struct vms_egps, flags) + 2 > gsd_size)
+	      goto too_small;
 	    vms_flags = bfd_getl16 (egps->flags);
 
 	    if ((vms_flags & EGPS__V_REL) == 0)
@@ -1228,22 +1250,29 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 	    else
 	      {
 		char *name;
-		unsigned long align_addr;
+		bfd_vma align_addr;
+		size_t left;
 
-		name = _bfd_vms_save_counted_string (&egps->namlng, gsd_size - 4);
+		if (offsetof (struct vms_egps, namlng) >= gsd_size)
+		  goto too_small;
+		left = gsd_size - offsetof (struct vms_egps, namlng);
+		name = _bfd_vms_save_counted_string (abfd, &egps->namlng, left);
+		if (name == NULL || name[0] == 0)
+		  return false;
 
 		section = bfd_make_section (abfd, name);
 		if (!section)
-		  return FALSE;
+		  return false;
 
 		section->filepos = 0;
 		section->size = bfd_getl32 (egps->alloc);
-		section->alignment_power = egps->align;
+		section->alignment_power = egps->align & 31;
 
 		vms_section_data (section)->flags = vms_flags;
 		vms_section_data (section)->no_flags = 0;
 
-		new_flags = vms_secflag_by_name (evax_section_flags, name,
+		new_flags = vms_secflag_by_name (evax_section_flags,
+						 section->name,
 						 section->size > 0);
 		if (section->size > 0)
 		  new_flags |= SEC_LOAD;
@@ -1262,13 +1291,12 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 		    new_flags &= ~SEC_DATA;
 		  }
 		if (!bfd_set_section_flags (section, new_flags))
-		  return FALSE;
+		  return false;
 
 		/* Give a non-overlapping vma to non absolute sections.  */
-		align_addr = (1 << section->alignment_power);
-		if ((base_addr % align_addr) != 0)
-		  base_addr += (align_addr - (base_addr % align_addr));
-		section->vma = (bfd_vma)base_addr;
+		align_addr = (bfd_vma) 1 << section->alignment_power;
+		base_addr = (base_addr + align_addr - 1) & -align_addr;
+		section->vma = base_addr;
 		base_addr += section->size;
 	      }
 
@@ -1282,7 +1310,7 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 		PRIV (sections) = bfd_realloc_or_free
 		  (PRIV (sections), PRIV (section_max) * sizeof (asection *));
 		if (PRIV (sections) == NULL)
-		  return FALSE;
+		  return false;
 	      }
 
 	    PRIV (sections)[PRIV (section_count)] = section;
@@ -1292,20 +1320,24 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 
 	case EGSD__C_SYM:
 	  {
-	    int nameoff;
+	    unsigned int nameoff;
 	    struct vms_symbol_entry *entry;
 	    struct vms_egsy *egsy = (struct vms_egsy *) vms_rec;
 	    flagword old_flags;
 
+	    if (offsetof (struct vms_egsy, flags) + 2 > gsd_size)
+	      goto too_small;
 	    old_flags = bfd_getl16 (egsy->flags);
 	    if (old_flags & EGSY__V_DEF)
 	      nameoff = ESDF__B_NAMLNG;
 	    else
 	      nameoff = ESRF__B_NAMLNG;
 
-	    entry = add_symbol (abfd, vms_rec + nameoff);
+	    if (nameoff >= gsd_size)
+	      goto too_small;
+	    entry = add_symbol (abfd, vms_rec + nameoff, gsd_size - nameoff);
 	    if (entry == NULL)
-	      return FALSE;
+	      return false;
 
 	    /* Allow only duplicate reference.  */
 	    if ((entry->flags & EGSY__V_DEF) && (old_flags & EGSY__V_DEF))
@@ -1320,21 +1352,22 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 
 	    if (old_flags & EGSY__V_DEF)
 	      {
-		struct vms_esdf *esdf = (struct vms_esdf *)vms_rec;
-		long psindx;
+		struct vms_esdf *esdf = (struct vms_esdf *) vms_rec;
 
 		entry->value = bfd_getl64 (esdf->value);
 		if (PRIV (sections) == NULL)
-		  return FALSE;
+		  return false;
 
 		psindx = bfd_getl32 (esdf->psindx);
 		/* PR 21813: Check for an out of range index.  */
 		if (psindx < 0 || psindx >= (int) PRIV (section_count))
 		  {
-		    _bfd_error_handler (_("corrupt EGSD record: its psindx field is too big (%#lx)"),
+		  bad_psindx:
+		    _bfd_error_handler (_("corrupt EGSD record: its psindx "
+					  "field is too big (%#lx)"),
 					psindx);
 		    bfd_set_error (bfd_error_bad_value);
-		    return FALSE;
+		    return false;
 		  }
 		entry->section = PRIV (sections)[psindx];
 
@@ -1344,14 +1377,9 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 
 		    entry->code_value = bfd_getl64 (esdf->code_address);
 		    psindx = bfd_getl32 (esdf->ca_psindx);
-		/* PR 21813: Check for an out of range index.  */
+		    /* PR 21813: Check for an out of range index.  */
 		    if (psindx < 0 || psindx >= (int) PRIV (section_count))
-		      {
-			_bfd_error_handler (_("corrupt EGSD record: its psindx field is too big (%#lx)"),
-					    psindx);
-			bfd_set_error (bfd_error_bad_value);
-			return FALSE;
-		      }
+		      goto bad_psindx;
 		    entry->code_section = PRIV (sections)[psindx];
 		  }
 	      }
@@ -1363,14 +1391,15 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 	    struct vms_symbol_entry *entry;
 	    struct vms_egst *egst = (struct vms_egst *)vms_rec;
 	    flagword old_flags;
+	    unsigned int nameoff = offsetof (struct vms_egst, namlng);
 
-	    old_flags = bfd_getl16 (egst->header.flags);
-
-	    entry = add_symbol (abfd, &egst->namlng);
-
+	    if (nameoff >= gsd_size)
+	      goto too_small;
+	    entry = add_symbol (abfd, &egst->namlng, gsd_size - nameoff);
 	    if (entry == NULL)
-	      return FALSE;
+	      return false;
 
+	    old_flags = bfd_getl16 (egst->header.flags);
 	    entry->typ = gsd_type;
 	    entry->data_type = egst->header.datyp;
 	    entry->flags = old_flags;
@@ -1379,19 +1408,12 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 
 	    if (old_flags & EGSY__V_REL)
 	      {
-		long psindx;
-
 		if (PRIV (sections) == NULL)
-		  return FALSE;
+		  return false;
 		psindx = bfd_getl32 (egst->psindx);
 		/* PR 21813: Check for an out of range index.  */
 		if (psindx < 0 || psindx >= (int) PRIV (section_count))
-		  {
-		    _bfd_error_handler (_("corrupt EGSD record: its psindx field is too big (%#lx)"),
-					psindx);
-		    bfd_set_error (bfd_error_bad_value);
-		    return FALSE;
-		  }
+		  goto bad_psindx;
 		entry->section = PRIV (sections)[psindx];
 	      }
 	    else
@@ -1418,7 +1440,7 @@ _bfd_vms_slurp_egsd (bfd *abfd)
 	default:
 	  _bfd_error_handler (_("unknown EGSD subtype %d"), gsd_type);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
 
       PRIV (recrd.rec_size) -= gsd_size;
@@ -1430,14 +1452,14 @@ _bfd_vms_slurp_egsd (bfd *abfd)
   if (PRIV (gsd_sym_count) > 0)
     abfd->flags |= HAS_SYMS;
 
-  return TRUE;
+  return true;
 }
 
 /* Stack routines for vms ETIR commands.  */
 
 /* Push value and section index.  */
 
-static void
+static bool
 _bfd_vms_push (bfd *abfd, bfd_vma val, unsigned int reloc)
 {
   vms_debug2 ((4, "<push %08lx (0x%08x) at %d>\n",
@@ -1450,26 +1472,28 @@ _bfd_vms_push (bfd *abfd, bfd_vma val, u
     {
       bfd_set_error (bfd_error_bad_value);
       _bfd_error_handler (_("stack overflow (%d) in _bfd_vms_push"), PRIV (stackptr));
-      exit (1);
+      return false;
     }
+  return true;
 }
 
 /* Pop value and section index.  */
 
-static void
+static bool
 _bfd_vms_pop (bfd *abfd, bfd_vma *val, unsigned int *rel)
 {
   if (PRIV (stackptr) == 0)
     {
       bfd_set_error (bfd_error_bad_value);
       _bfd_error_handler (_("stack underflow in _bfd_vms_pop"));
-      exit (1);
+      return false;
     }
   PRIV (stackptr)--;
   *val = PRIV (stack[PRIV (stackptr)]).value;
   *rel = PRIV (stack[PRIV (stackptr)]).reloc;
 
   vms_debug2 ((4, "<pop %08lx (0x%08x)>\n", (unsigned long)*val, *rel));
+  return true;
 }
 
 /* Routines to fill sections contents during tir/etir read.  */
@@ -1526,77 +1550,111 @@ image_inc_ptr (bfd *abfd, bfd_vma offset
 
 /* Save current DST location counter under specified index.  */
 
-static void
+static bool
 dst_define_location (bfd *abfd, unsigned int loc)
 {
   vms_debug2 ((4, "dst_define_location (%d)\n", (int)loc));
 
+  if (loc > 1 << 24)
+    {
+      /* 16M entries ought to be plenty.  */
+      bfd_set_error (bfd_error_bad_value);
+      _bfd_error_handler (_("dst_define_location %u too large"), loc);
+      return false;
+    }
+
   /* Grow the ptr offset table if necessary.  */
   if (loc + 1 > PRIV (dst_ptr_offsets_count))
     {
-      PRIV (dst_ptr_offsets) = bfd_realloc (PRIV (dst_ptr_offsets),
-					   (loc + 1) * sizeof (unsigned int));
+      PRIV (dst_ptr_offsets)
+	= bfd_realloc_or_free (PRIV (dst_ptr_offsets),
+			       (loc + 1) * sizeof (unsigned int));
+      if (PRIV (dst_ptr_offsets) == NULL)
+	return false;
+      memset (PRIV (dst_ptr_offsets) + PRIV (dst_ptr_offsets_count), 0,
+	      (loc - PRIV (dst_ptr_offsets_count)) * sizeof (unsigned int));
       PRIV (dst_ptr_offsets_count) = loc + 1;
     }
 
   PRIV (dst_ptr_offsets)[loc] = PRIV (image_offset);
+  return true;
 }
 
 /* Restore saved DST location counter from specified index.  */
 
-static void
+static bool
 dst_restore_location (bfd *abfd, unsigned int loc)
 {
   vms_debug2 ((4, "dst_restore_location (%d)\n", (int)loc));
 
-  PRIV (image_offset) = PRIV (dst_ptr_offsets)[loc];
+  if (loc < PRIV (dst_ptr_offsets_count))
+    {
+      PRIV (image_offset) = PRIV (dst_ptr_offsets)[loc];
+      return true;
+    }
+  return false;
 }
 
 /* Retrieve saved DST location counter from specified index.  */
 
-static unsigned int
-dst_retrieve_location (bfd *abfd, unsigned int loc)
+static bool
+dst_retrieve_location (bfd *abfd, bfd_vma *loc)
 {
-  vms_debug2 ((4, "dst_retrieve_location (%d)\n", (int)loc));
+  vms_debug2 ((4, "dst_retrieve_location (%d)\n", (int) *loc));
 
-  return PRIV (dst_ptr_offsets)[loc];
+  if (*loc < PRIV (dst_ptr_offsets_count))
+    {
+      *loc = PRIV (dst_ptr_offsets)[*loc];
+      return true;
+    }
+  return false;
 }
 
 /* Write multiple bytes to section image.  */
 
-static bfd_boolean
+static bool
 image_write (bfd *abfd, unsigned char *ptr, unsigned int size)
 {
+  asection *sec = PRIV (image_section);
+  size_t off = PRIV (image_offset);
+
+  /* Check bounds.  */
+  if (off > sec->size
+      || size > sec->size - off)
+    {
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+
 #if VMS_DEBUG
   _bfd_vms_debug (8, "image_write from (%p, %d) to (%ld)\n", ptr, size,
-		  (long)PRIV (image_offset));
-  _bfd_hexdump (9, ptr, size, 0);
+		  (long) off);
 #endif
 
   if (PRIV (image_section)->contents != NULL)
+    memcpy (sec->contents + off, ptr, size);
+  else
     {
-      asection *sec = PRIV (image_section);
-      file_ptr off = PRIV (image_offset);
-
-      /* Check bounds.  */
-      if (off > (file_ptr)sec->size
-	  || size > (file_ptr)sec->size
-	  || off + size > (file_ptr)sec->size)
-	{
-	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
-	}
-
-      memcpy (sec->contents + off, ptr, size);
+      unsigned int i;
+      for (i = 0; i < size; i++)
+	if (ptr[i] != 0)
+	  {
+	    bfd_set_error (bfd_error_bad_value);
+	    return false;
+	  }
     }
 
+#if VMS_DEBUG
+  _bfd_hexdump (9, ptr, size, 0);
+#endif
+
   PRIV (image_offset) += size;
-  return TRUE;
+  return true;
 }
 
 /* Write byte to section image.  */
 
-static bfd_boolean
+static bool
 image_write_b (bfd * abfd, unsigned int value)
 {
   unsigned char data[1];
@@ -1610,7 +1668,7 @@ image_write_b (bfd * abfd, unsigned int
 
 /* Write 2-byte word to image.  */
 
-static bfd_boolean
+static bool
 image_write_w (bfd * abfd, unsigned int value)
 {
   unsigned char data[2];
@@ -1623,7 +1681,7 @@ image_write_w (bfd * abfd, unsigned int
 
 /* Write 4-byte long to image.  */
 
-static bfd_boolean
+static bool
 image_write_l (bfd * abfd, unsigned long value)
 {
   unsigned char data[4];
@@ -1636,7 +1694,7 @@ image_write_l (bfd * abfd, unsigned long
 
 /* Write 8-byte quad to image.  */
 
-static bfd_boolean
+static bool
 image_write_q (bfd * abfd, bfd_vma value)
 {
   unsigned char data[8];
@@ -1746,7 +1804,7 @@ _bfd_vms_get_value (bfd *abfd,
   name[i] = 0;
 
   h = (struct alpha_vms_link_hash_entry *)
-    bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
+    bfd_link_hash_lookup (info->hash, name, false, false, true);
 
   *hp = h;
 
@@ -1761,7 +1819,7 @@ _bfd_vms_get_value (bfd *abfd,
   else
     {
       (*info->callbacks->undefined_symbol)
-	(info, name, abfd, PRIV (image_section), PRIV (image_offset), TRUE);
+	(info, name, abfd, PRIV (image_section), PRIV (image_offset), true);
       *vma = 0;
     }
 }
@@ -1831,16 +1889,16 @@ alpha_vms_fix_sec_rel (bfd *abfd, struct
    the output section (used during linking).
    Return FALSE in case of error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_etir (bfd *abfd, struct bfd_link_info *info)
 {
   unsigned char *ptr;
   unsigned int length;
   unsigned char *maxptr;
-  bfd_vma op1;
-  bfd_vma op2;
-  unsigned int rel1;
-  unsigned int rel2;
+  bfd_vma op1 = 0;
+  bfd_vma op2 = 0;
+  unsigned int rel1 = RELC_NONE;
+  unsigned int rel2 = RELC_NONE;
   struct alpha_vms_link_hash_entry *h;
 
   PRIV (recrd.rec) += ETIR__C_HEADER_SIZE;
@@ -1854,24 +1912,29 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 
   while (ptr < maxptr)
     {
-      int cmd = bfd_getl16 (ptr);
-      int cmd_length = bfd_getl16 (ptr + 2);
+      int cmd, cmd_length;
 
-      ptr += 4;
+      if (ptr + 4 > maxptr)
+	goto corrupt_etir;
+
+      cmd = bfd_getl16 (ptr);
+      cmd_length = bfd_getl16 (ptr + 2);
 
       /* PR 21589 and 21579: Check for a corrupt ETIR record.  */
-      if (cmd_length < 4 || (ptr + cmd_length > maxptr + 4))
+      if (cmd_length < 4 || ptr + cmd_length > maxptr)
 	{
 	corrupt_etir:
 	  _bfd_error_handler (_("corrupt ETIR record encountered"));
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
+      ptr += 4;
+      cmd_length -= 4;
 
 #if VMS_DEBUG
       _bfd_vms_debug (4, "etir: %s(%d)\n",
 		      _bfd_vms_etir_name (cmd), cmd);
-      _bfd_hexdump (8, ptr, cmd_length - 4, 0);
+      _bfd_hexdump (8, ptr, cmd_length, 0);
 #endif
 
       switch (cmd)
@@ -1881,8 +1944,9 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 
 	     stack 32 bit value of symbol (high bits set to 0).  */
 	case ETIR__C_STA_GBL:
-	  _bfd_vms_get_value (abfd, ptr, maxptr, info, &op1, &h);
-	  _bfd_vms_push (abfd, op1, alpha_vms_sym_to_ctxt (h));
+	  _bfd_vms_get_value (abfd, ptr, ptr + cmd_length, info, &op1, &h);
+	  if (!_bfd_vms_push (abfd, op1, alpha_vms_sym_to_ctxt (h)))
+	    return false;
 	  break;
 
 	  /* Stack longword
@@ -1890,9 +1954,10 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 
 	     stack 32 bit value, sign extend to 64 bit.  */
 	case ETIR__C_STA_LW:
-	  if (ptr + 4 >= maxptr)
+	  if (cmd_length < 4)
 	    goto corrupt_etir;
-	  _bfd_vms_push (abfd, bfd_getl32 (ptr), RELC_NONE);
+	  if (!_bfd_vms_push (abfd, bfd_getl32 (ptr), RELC_NONE))
+	    return false;
 	  break;
 
 	  /* Stack quadword
@@ -1900,9 +1965,10 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 
 	     stack 64 bit value of symbol.  */
 	case ETIR__C_STA_QW:
-	  if (ptr + 8 >= maxptr)
+	  if (cmd_length < 8)
 	    goto corrupt_etir;
-	  _bfd_vms_push (abfd, bfd_getl64 (ptr), RELC_NONE);
+	  if (!_bfd_vms_push (abfd, bfd_getl64 (ptr), RELC_NONE))
+	    return false;
 	  break;
 
 	  /* Stack psect base plus quadword offset
@@ -1915,7 +1981,7 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	  {
 	    int psect;
 
-	    if (ptr + 12 >= maxptr)
+	    if (cmd_length < 12)
 	      goto corrupt_etir;
 	    psect = bfd_getl32 (ptr);
 	    if ((unsigned int) psect >= PRIV (section_count))
@@ -1923,10 +1989,11 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 		_bfd_error_handler (_("bad section index in %s"),
 				    _bfd_vms_etir_name (cmd));
 		bfd_set_error (bfd_error_bad_value);
-		return FALSE;
+		return false;
 	      }
 	    op1 = bfd_getl64 (ptr + 4);
-	    _bfd_vms_push (abfd, op1, psect | RELC_SEC_BASE);
+	    if (!_bfd_vms_push (abfd, op1, psect | RELC_SEC_BASE))
+	      return false;
 	  }
 	  break;
 
@@ -1935,31 +2002,36 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	case ETIR__C_STA_CKARG:
 	  _bfd_error_handler (_("unsupported STA cmd %s"),
 			      _bfd_vms_etir_name (cmd));
-	  return FALSE;
+	  return false;
 	  break;
 
 	  /* Store byte: pop stack, write byte
 	     arg: -.  */
 	case ETIR__C_STO_B:
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (rel1 != RELC_NONE)
 	    goto bad_context;
-	  image_write_b (abfd, (unsigned int) op1 & 0xff);
+	  if (!image_write_b (abfd, (unsigned int) op1 & 0xff))
+	    return false;
 	  break;
 
 	  /* Store word: pop stack, write word
 	     arg: -.  */
 	case ETIR__C_STO_W:
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (rel1 != RELC_NONE)
 	    goto bad_context;
-	  image_write_w (abfd, (unsigned int) op1 & 0xffff);
+	  if (!image_write_w (abfd, (unsigned int) op1 & 0xffff))
+	    return false;
 	  break;
 
 	  /* Store longword: pop stack, write longword
 	     arg: -.  */
 	case ETIR__C_STO_LW:
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (rel1 & RELC_SEC_BASE)
 	    {
 	      op1 = alpha_vms_fix_sec_rel (abfd, info, rel1, op1);
@@ -1967,22 +2039,26 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	    }
 	  else if (rel1 & RELC_SHR_BASE)
 	    {
-	      alpha_vms_add_fixup_lr (info, rel1 & RELC_MASK, op1);
+	      if (!alpha_vms_add_fixup_lr (info, rel1 & RELC_MASK, op1))
+		return false;
 	      rel1 = RELC_NONE;
 	    }
 	  if (rel1 != RELC_NONE)
 	    {
 	      if (rel1 != RELC_REL)
 		abort ();
-	      alpha_vms_add_lw_reloc (info);
+	      if (!alpha_vms_add_lw_reloc (info))
+		return false;
 	    }
-	  image_write_l (abfd, op1);
+	  if (!image_write_l (abfd, op1))
+	    return false;
 	  break;
 
 	  /* Store quadword: pop stack, write quadword
 	     arg: -.  */
 	case ETIR__C_STO_QW:
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (rel1 & RELC_SEC_BASE)
 	    {
 	      op1 = alpha_vms_fix_sec_rel (abfd, info, rel1, op1);
@@ -1994,9 +2070,11 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	    {
 	      if (rel1 != RELC_REL)
 		abort ();
-	      alpha_vms_add_qw_reloc (info);
+	      if (!alpha_vms_add_qw_reloc (info))
+		return false;
 	    }
-	  image_write_q (abfd, op1);
+	  if (!image_write_q (abfd, op1))
+	    return false;
 	  break;
 
 	  /* Store immediate repeated: pop stack for repeat count
@@ -2006,43 +2084,53 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	  {
 	    int size;
 
-	    if (ptr + 4 >= maxptr)
+	    if (cmd_length < 4)
 	      goto corrupt_etir;
 	    size = bfd_getl32 (ptr);
-	    _bfd_vms_pop (abfd, &op1, &rel1);
+	    if (size > cmd_length - 4)
+	      goto corrupt_etir;
+	    if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	      return false;
 	    if (rel1 != RELC_NONE)
 	      goto bad_context;
+	    if (size == 0)
+	      break;
+	    op1 &= 0xffffffff;
 	    while (op1-- > 0)
-	      image_write (abfd, ptr + 4, size);
+	      if (!image_write (abfd, ptr + 4, size))
+		return false;
 	  }
 	  break;
 
 	  /* Store global: write symbol value
 	     arg: cs	global symbol name.  */
 	case ETIR__C_STO_GBL:
-	  _bfd_vms_get_value (abfd, ptr, maxptr, info, &op1, &h);
+	  _bfd_vms_get_value (abfd, ptr, ptr + cmd_length, info, &op1, &h);
 	  if (h && h->sym)
 	    {
 	      if (h->sym->typ == EGSD__C_SYMG)
 		{
-		  alpha_vms_add_fixup_qr
-		    (info, abfd, h->sym->owner, h->sym->symbol_vector);
+		  if (!alpha_vms_add_fixup_qr (info, abfd, h->sym->owner,
+					       h->sym->symbol_vector))
+		    return false;
 		  op1 = 0;
 		}
 	      else
 		{
 		  op1 = alpha_vms_get_sym_value (h->sym->section,
 						 h->sym->value);
-		  alpha_vms_add_qw_reloc (info);
+		  if (!alpha_vms_add_qw_reloc (info))
+		    return false;
 		}
 	    }
-	  image_write_q (abfd, op1);
+	  if (!image_write_q (abfd, op1))
+	    return false;
 	  break;
 
 	  /* Store code address: write address of entry point
 	     arg: cs	global symbol name (procedure).  */
 	case ETIR__C_STO_CA:
-	  _bfd_vms_get_value (abfd, ptr, maxptr, info, &op1, &h);
+	  _bfd_vms_get_value (abfd, ptr, ptr + cmd_length, info, &op1, &h);
 	  if (h && h->sym)
 	    {
 	      if (h->sym->flags & EGSY__V_NORM)
@@ -2050,14 +2138,16 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 		  /* That's really a procedure.  */
 		  if (h->sym->typ == EGSD__C_SYMG)
 		    {
-		      alpha_vms_add_fixup_ca (info, abfd, h->sym->owner);
+		      if (!alpha_vms_add_fixup_ca (info, abfd, h->sym->owner))
+			return false;
 		      op1 = h->sym->symbol_vector;
 		    }
 		  else
 		    {
 		      op1 = alpha_vms_get_sym_value (h->sym->code_section,
 						     h->sym->code_value);
-		      alpha_vms_add_qw_reloc (info);
+		      if (!alpha_vms_add_qw_reloc (info))
+			return false;
 		    }
 		}
 	      else
@@ -2066,20 +2156,23 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 		  abort ();
 		}
 	    }
-	  image_write_q (abfd, op1);
+	  if (!image_write_q (abfd, op1))
+	    return false;
 	  break;
 
 	  /* Store offset to psect: pop stack, add low 32 bits to base of psect
 	     arg: none.  */
 	case ETIR__C_STO_OFF:
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 
 	  if (!(rel1 & RELC_SEC_BASE))
 	    abort ();
 
 	  op1 = alpha_vms_fix_sec_rel (abfd, info, rel1, op1);
 	  rel1 = RELC_REL;
-	  image_write_q (abfd, op1);
+	  if (!image_write_q (abfd, op1))
+	    return false;
 	  break;
 
 	  /* Store immediate
@@ -2089,10 +2182,11 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	  {
 	    unsigned int size;
 
-	    if (ptr + 4 >= maxptr)
+	    if (cmd_length < 4)
 	      goto corrupt_etir;
 	    size = bfd_getl32 (ptr);
-	    image_write (abfd, ptr + 4, size);
+	    if (!image_write (abfd, ptr + 4, size))
+	      return false;
 	  }
 	  break;
 
@@ -2103,11 +2197,12 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	     store global longword: store 32bit value of symbol
 	     arg: cs	symbol name.  */
 	case ETIR__C_STO_GBL_LW:
-	  _bfd_vms_get_value (abfd, ptr, maxptr, info, &op1, &h);
+	  _bfd_vms_get_value (abfd, ptr, ptr + cmd_length, info, &op1, &h);
 #if 0
 	  abort ();
 #endif
-	  image_write_l (abfd, op1);
+	  if (!image_write_l (abfd, op1))
+	    return false;
 	  break;
 
 	case ETIR__C_STO_RB:
@@ -2115,13 +2210,13 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	case ETIR__C_STO_LP_PSB:
 	  _bfd_error_handler (_("%s: not supported"),
 			      _bfd_vms_etir_name (cmd));
-	  return FALSE;
+	  return false;
 	  break;
 	case ETIR__C_STO_HINT_GBL:
 	case ETIR__C_STO_HINT_PS:
 	  _bfd_error_handler (_("%s: not implemented"),
 			      _bfd_vms_etir_name (cmd));
-	  return FALSE;
+	  return false;
 	  break;
 
 	  /* 200 Store-conditional Linkage Pair
@@ -2146,7 +2241,7 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	case ETIR__C_STC_PS:
 	  _bfd_error_handler (_("%s: not supported"),
 			      _bfd_vms_etir_name (cmd));
-	  return FALSE;
+	  return false;
 	  break;
 
 	  /* 201 Store-conditional Linkage Pair with Procedure Signature
@@ -2156,12 +2251,15 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	     da	signature.  */
 
 	case ETIR__C_STC_LP_PSB:
-	  _bfd_vms_get_value (abfd, ptr + 4, maxptr, info, &op1, &h);
+	  if (cmd_length < 4)
+	    goto corrupt_etir;
+	  _bfd_vms_get_value (abfd, ptr + 4, ptr + cmd_length, info, &op1, &h);
 	  if (h && h->sym)
 	    {
 	      if (h->sym->typ == EGSD__C_SYMG)
 		{
-		  alpha_vms_add_fixup_lp (info, abfd, h->sym->owner);
+		  if (!alpha_vms_add_fixup_lp (info, abfd, h->sym->owner))
+		    return false;
 		  op1 = h->sym->symbol_vector;
 		  op2 = 0;
 		}
@@ -2179,8 +2277,9 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	      op1 = 0;
 	      op2 = 0;
 	    }
-	  image_write_q (abfd, op1);
-	  image_write_q (abfd, op2);
+	  if (!image_write_q (abfd, op1)
+	      || !image_write_q (abfd, op2))
+	    return false;
 	  break;
 
 	  /* 205 Store-conditional NOP at address of global
@@ -2237,13 +2336,14 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	case ETIR__C_STC_NBH_PS:
 	  _bfd_error_handler (_("%s: not supported"),
 			      _bfd_vms_etir_name (cmd));
-	  return FALSE;
+	  return false;
 	  break;
 
 	  /* Det relocation base: pop stack, set image location counter
 	     arg: none.  */
 	case ETIR__C_CTL_SETRB:
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (!(rel1 & RELC_SEC_BASE))
 	    abort ();
 	  image_set_ptr (abfd, op1, rel1 & RELC_MASK, info);
@@ -2252,7 +2352,7 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	  /* Augment relocation base: increment image location counter by offset
 	     arg: lw	offset value.  */
 	case ETIR__C_CTL_AUGRB:
-	  if (ptr + 4 >= maxptr)
+	  if (cmd_length < 4)
 	    goto corrupt_etir;
 	  op1 = bfd_getl32 (ptr);
 	  image_inc_ptr (abfd, op1);
@@ -2261,46 +2361,65 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	  /* Define location: pop index, save location counter under index
 	     arg: none.  */
 	case ETIR__C_CTL_DFLOC:
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (rel1 != RELC_NONE)
 	    goto bad_context;
-	  dst_define_location (abfd, op1);
+	  if (!dst_define_location (abfd, op1))
+	    return false;
 	  break;
 
 	  /* Set location: pop index, restore location counter from index
 	     arg: none.  */
 	case ETIR__C_CTL_STLOC:
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (rel1 != RELC_NONE)
 	    goto bad_context;
-	  dst_restore_location (abfd, op1);
+	  if (!dst_restore_location (abfd, op1))
+	    {
+	      bfd_set_error (bfd_error_bad_value);
+	      _bfd_error_handler (_("invalid %s"), "ETIR__C_CTL_STLOC");
+	      return false;
+	    }
 	  break;
 
 	  /* Stack defined location: pop index, push location counter from index
 	     arg: none.  */
 	case ETIR__C_CTL_STKDL:
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (rel1 != RELC_NONE)
 	    goto bad_context;
-	  _bfd_vms_push (abfd, dst_retrieve_location (abfd, op1), RELC_NONE);
+	  if (!dst_retrieve_location (abfd, &op1))
+	    {
+	      bfd_set_error (bfd_error_bad_value);
+	      _bfd_error_handler (_("invalid %s"), "ETIR__C_CTL_STKDL");
+	      return false;
+	    }
+	  if (!_bfd_vms_push (abfd, op1, RELC_NONE))
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_NOP:      /* No-op.  */
 	  break;
 
 	case ETIR__C_OPR_ADD:      /* Add.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
-	  _bfd_vms_pop (abfd, &op2, &rel2);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1)
+	      || !_bfd_vms_pop (abfd, &op2, &rel2))
+	    return false;
 	  if (rel1 == RELC_NONE && rel2 != RELC_NONE)
 	    rel1 = rel2;
 	  else if (rel1 != RELC_NONE && rel2 != RELC_NONE)
 	    goto bad_context;
-	  _bfd_vms_push (abfd, op1 + op2, rel1);
+	  if (!_bfd_vms_push (abfd, op1 + op2, rel1))
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_SUB:      /* Subtract.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
-	  _bfd_vms_pop (abfd, &op2, &rel2);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1)
+	      || !_bfd_vms_pop (abfd, &op2, &rel2))
+	    return false;
 	  if (rel1 == RELC_NONE && rel2 != RELC_NONE)
 	    rel1 = rel2;
 	  else if ((rel1 & RELC_SEC_BASE) && (rel2 & RELC_SEC_BASE))
@@ -2311,81 +2430,123 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	    }
 	  else if (rel1 != RELC_NONE && rel2 != RELC_NONE)
 	    goto bad_context;
-	  _bfd_vms_push (abfd, op2 - op1, rel1);
+	  if (!_bfd_vms_push (abfd, op2 - op1, rel1))
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_MUL:      /* Multiply.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
-	  _bfd_vms_pop (abfd, &op2, &rel2);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1)
+	      || !_bfd_vms_pop (abfd, &op2, &rel2))
+	    return false;
 	  if (rel1 != RELC_NONE || rel2 != RELC_NONE)
 	    goto bad_context;
-	  _bfd_vms_push (abfd, op1 * op2, RELC_NONE);
+	  if (!_bfd_vms_push (abfd, op1 * op2, RELC_NONE))
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_DIV:      /* Divide.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
-	  _bfd_vms_pop (abfd, &op2, &rel2);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1)
+	      || !_bfd_vms_pop (abfd, &op2, &rel2))
+	    return false;
 	  if (rel1 != RELC_NONE || rel2 != RELC_NONE)
 	    goto bad_context;
-	  if (op2 == 0)
-	    _bfd_vms_push (abfd, 0, RELC_NONE);
+	  if (op1 == 0)
+	    {
+	      /* Divide by zero is supposed to give a result of zero,
+		 and a non-fatal warning message.  */
+	      _bfd_error_handler (_("%s divide by zero"), "ETIR__C_OPR_DIV");
+	      if (!_bfd_vms_push (abfd, 0, RELC_NONE))
+		return false;
+	    }
 	  else
-	    _bfd_vms_push (abfd, op2 / op1, RELC_NONE);
+	    {
+	      if (!_bfd_vms_push (abfd, op2 / op1, RELC_NONE))
+		return false;
+	    }
 	  break;
 
 	case ETIR__C_OPR_AND:      /* Logical AND.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
-	  _bfd_vms_pop (abfd, &op2, &rel2);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1)
+	      || !_bfd_vms_pop (abfd, &op2, &rel2))
+	    return false;
 	  if (rel1 != RELC_NONE || rel2 != RELC_NONE)
 	    goto bad_context;
-	  _bfd_vms_push (abfd, op1 & op2, RELC_NONE);
+	  if (!_bfd_vms_push (abfd, op1 & op2, RELC_NONE))
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_IOR:      /* Logical inclusive OR.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
-	  _bfd_vms_pop (abfd, &op2, &rel2);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1)
+	      || !_bfd_vms_pop (abfd, &op2, &rel2))
+	    return false;
 	  if (rel1 != RELC_NONE || rel2 != RELC_NONE)
 	    goto bad_context;
-	  _bfd_vms_push (abfd, op1 | op2, RELC_NONE);
+	  if (!_bfd_vms_push (abfd, op1 | op2, RELC_NONE))
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_EOR:      /* Logical exclusive OR.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
-	  _bfd_vms_pop (abfd, &op2, &rel2);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1)
+	      || !_bfd_vms_pop (abfd, &op2, &rel2))
+	    return false;
 	  if (rel1 != RELC_NONE || rel2 != RELC_NONE)
 	    goto bad_context;
-	  _bfd_vms_push (abfd, op1 ^ op2, RELC_NONE);
+	  if (!_bfd_vms_push (abfd, op1 ^ op2, RELC_NONE))
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_NEG:      /* Negate.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (rel1 != RELC_NONE)
 	    goto bad_context;
-	  _bfd_vms_push (abfd, -op1, RELC_NONE);
+	  if (!_bfd_vms_push (abfd, -op1, RELC_NONE))
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_COM:      /* Complement.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (rel1 != RELC_NONE)
 	    goto bad_context;
-	  _bfd_vms_push (abfd, ~op1, RELC_NONE);
+	  if (!_bfd_vms_push (abfd, ~op1, RELC_NONE))
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_ASH:      /* Arithmetic shift.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
-	  _bfd_vms_pop (abfd, &op2, &rel2);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1)
+	      || !_bfd_vms_pop (abfd, &op2, &rel2))
+	    return false;
 	  if (rel1 != RELC_NONE || rel2 != RELC_NONE)
 	    {
 	    bad_context:
 	      _bfd_error_handler (_("invalid use of %s with contexts"),
 				  _bfd_vms_etir_name (cmd));
-	      return FALSE;
+	      return false;
+	    }
+	  if ((bfd_signed_vma) op2 < 0)
+	    {
+	      /* Shift right.  */
+	      bfd_vma sign;
+	      op2 = -op2;
+	      if (op2 >= CHAR_BIT * sizeof (op1))
+		op2 = CHAR_BIT * sizeof (op1) - 1;
+	      /* op1 = (bfd_signed_vma) op1 >> op2; */
+	      sign = op1 & ((bfd_vma) 1 << (CHAR_BIT * sizeof (op1) - 1));
+	      op1 >>= op2;
+	      sign >>= op2;
+	      op1 = (op1 ^ sign) - sign;
+	    }
+	  else
+	    {
+	      /* Shift left.  */
+	      if (op2 >= CHAR_BIT * sizeof (op1))
+		op1 = 0;
+	      else
+		op1 <<= op2;
 	    }
-	  if ((int)op2 < 0)		/* Shift right.  */
-	    op1 >>= -(int)op2;
-	  else			/* Shift left.  */
-	    op1 <<= (int)op2;
-	  _bfd_vms_push (abfd, op1, RELC_NONE); /* FIXME: sym.  */
+	  if (!_bfd_vms_push (abfd, op1, RELC_NONE)) /* FIXME: sym.  */
+	    return false;
 	  break;
 
 	case ETIR__C_OPR_INSV:      /* Insert field.   */
@@ -2395,37 +2556,43 @@ _bfd_vms_slurp_etir (bfd *abfd, struct b
 	case ETIR__C_OPR_DFLIT:     /* Define a literal.  */
 	  _bfd_error_handler (_("%s: not supported"),
 			      _bfd_vms_etir_name (cmd));
-	  return FALSE;
+	  return false;
 	  break;
 
 	case ETIR__C_OPR_SEL:      /* Select.  */
-	  _bfd_vms_pop (abfd, &op1, &rel1);
+	  if (!_bfd_vms_pop (abfd, &op1, &rel1))
+	    return false;
 	  if (op1 & 0x01L)
-	    _bfd_vms_pop (abfd, &op1, &rel1);
+	    {
+	      if (!_bfd_vms_pop (abfd, &op1, &rel1))
+		return false;
+	    }
 	  else
 	    {
-	      _bfd_vms_pop (abfd, &op1, &rel1);
-	      _bfd_vms_pop (abfd, &op2, &rel2);
-	      _bfd_vms_push (abfd, op1, rel1);
+	      if (!_bfd_vms_pop (abfd, &op1, &rel1)
+		  || !_bfd_vms_pop (abfd, &op2, &rel2))
+		return false;
+	      if (!_bfd_vms_push (abfd, op1, rel1))
+		return false;
 	    }
 	  break;
 
 	default:
 	  _bfd_error_handler (_("reserved cmd %d"), cmd);
-	  return FALSE;
+	  return false;
 	  break;
 	}
 
-      ptr += cmd_length - 4;
+      ptr += cmd_length;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Process EDBG/ETBT record.
    Return TRUE on success, FALSE on error  */
 
-static bfd_boolean
+static bool
 vms_slurp_debug (bfd *abfd)
 {
   asection *section = PRIV (dst_section);
@@ -2440,9 +2607,9 @@ vms_slurp_debug (bfd *abfd)
 
       section = bfd_make_section (abfd, "$DST$");
       if (!section)
-	return FALSE;
+	return false;
       if (!bfd_set_section_flags (section, flags))
-	return FALSE;
+	return false;
       PRIV (dst_section) = section;
     }
 
@@ -2450,16 +2617,16 @@ vms_slurp_debug (bfd *abfd)
   PRIV (image_offset) = section->size;
 
   if (!_bfd_vms_slurp_etir (abfd, NULL))
-    return FALSE;
+    return false;
 
   section->size = PRIV (image_offset);
-  return TRUE;
+  return true;
 }
 
 /* Process EDBG record.
    Return TRUE on success, FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_edbg (bfd *abfd)
 {
   vms_debug2 ((2, "EDBG\n"));
@@ -2472,7 +2639,7 @@ _bfd_vms_slurp_edbg (bfd *abfd)
 /* Process ETBT record.
    Return TRUE on success, FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_etbt (bfd *abfd)
 {
   vms_debug2 ((2, "ETBT\n"));
@@ -2485,7 +2652,7 @@ _bfd_vms_slurp_etbt (bfd *abfd)
 /* Process EEOM record.
    Return TRUE on success, FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_eeom (bfd *abfd)
 {
   struct vms_eeom *eeom = (struct vms_eeom *) PRIV (recrd.rec);
@@ -2497,7 +2664,7 @@ _bfd_vms_slurp_eeom (bfd *abfd)
     {
       _bfd_error_handler (_("corrupt EEOM record - size is too small"));
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   PRIV (eom_data).eom_l_total_lps = bfd_getl32 (eeom->total_lps);
@@ -2506,28 +2673,28 @@ _bfd_vms_slurp_eeom (bfd *abfd)
     {
       _bfd_error_handler (_("object module not error-free !"));
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
-  PRIV (eom_data).eom_has_transfer = FALSE;
+  PRIV (eom_data).eom_has_transfer = false;
   if (PRIV (recrd.rec_size) > 10)
     {
-      PRIV (eom_data).eom_has_transfer = TRUE;
+      PRIV (eom_data).eom_has_transfer = true;
       PRIV (eom_data).eom_b_tfrflg = eeom->tfrflg;
       PRIV (eom_data).eom_l_psindx = bfd_getl32 (eeom->psindx);
       PRIV (eom_data).eom_l_tfradr = bfd_getl32 (eeom->tfradr);
 
       abfd->start_address = PRIV (eom_data).eom_l_tfradr;
     }
-  return TRUE;
+  return true;
 }
 
 /* Slurp an ordered set of VMS object records.  Return FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_slurp_object_records (bfd * abfd)
 {
-  bfd_boolean err;
+  bool ok;
   int type;
 
   do
@@ -2538,53 +2705,53 @@ _bfd_vms_slurp_object_records (bfd * abf
       if (type < 0)
 	{
 	  vms_debug2 ((2, "next_record failed\n"));
-	  return FALSE;
+	  return false;
 	}
 
       switch (type)
 	{
 	case EOBJ__C_EMH:
-	  err = _bfd_vms_slurp_ehdr (abfd);
+	  ok = _bfd_vms_slurp_ehdr (abfd);
 	  break;
 	case EOBJ__C_EEOM:
-	  err = _bfd_vms_slurp_eeom (abfd);
+	  ok = _bfd_vms_slurp_eeom (abfd);
 	  break;
 	case EOBJ__C_EGSD:
-	  err = _bfd_vms_slurp_egsd (abfd);
+	  ok = _bfd_vms_slurp_egsd (abfd);
 	  break;
 	case EOBJ__C_ETIR:
-	  err = TRUE; /* _bfd_vms_slurp_etir (abfd); */
+	  ok = true; /* _bfd_vms_slurp_etir (abfd); */
 	  break;
 	case EOBJ__C_EDBG:
-	  err = _bfd_vms_slurp_edbg (abfd);
+	  ok = _bfd_vms_slurp_edbg (abfd);
 	  break;
 	case EOBJ__C_ETBT:
-	  err = _bfd_vms_slurp_etbt (abfd);
+	  ok = _bfd_vms_slurp_etbt (abfd);
 	  break;
 	default:
-	  err = FALSE;
+	  ok = false;
 	}
-      if (!err)
+      if (!ok)
 	{
 	  vms_debug2 ((2, "slurp type %d failed\n", type));
-	  return FALSE;
+	  return false;
 	}
     }
   while (type != EOBJ__C_EEOM);
 
-  return TRUE;
+  return true;
 }
 
 /* Initialize private data  */
-static bfd_boolean
+static bool
 vms_initialize (bfd * abfd)
 {
-  bfd_size_type amt;
+  size_t amt;
 
   amt = sizeof (struct vms_private_data_struct);
   abfd->tdata.any = bfd_zalloc (abfd, amt);
   if (abfd->tdata.any == NULL)
-    return FALSE;
+    return false;
 
   PRIV (recrd.file_format) = FF_UNKNOWN;
 
@@ -2593,18 +2760,34 @@ vms_initialize (bfd * abfd)
   if (PRIV (stack) == NULL)
     goto error_ret1;
 
-  return TRUE;
+  return true;
 
  error_ret1:
   bfd_release (abfd, abfd->tdata.any);
   abfd->tdata.any = NULL;
-  return FALSE;
+  return false;
+}
+
+/* Free malloc'd memory.  */
+
+static void
+alpha_vms_free_private (bfd *abfd)
+{
+  struct module *module;
+
+  free (PRIV (recrd.buf));
+  free (PRIV (sections));
+  free (PRIV (syms));
+  free (PRIV (dst_ptr_offsets));
+
+  for (module = PRIV (modules); module; module = module->next)
+    free (module->file_table);
 }
 
 /* Check the format for a file being read.
    Return a (bfd_target *) if it's an object file or zero if not.  */
 
-static const struct bfd_target *
+static bfd_cleanup
 alpha_vms_object_p (bfd *abfd)
 {
   void *tdata_save = abfd->tdata.any;
@@ -2615,10 +2798,13 @@ alpha_vms_object_p (bfd *abfd)
 
   /* Allocate alpha-vms specific data.  */
   if (!vms_initialize (abfd))
-    goto error_ret;
+    {
+      abfd->tdata.any = tdata_save;
+      return NULL;
+    }
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET))
-    goto err_wrong_format;
+  if (bfd_seek (abfd, 0, SEEK_SET))
+    goto error_ret;
 
   /* The first challenge with VMS is to discover the kind of the file.
 
@@ -2637,27 +2823,17 @@ alpha_vms_object_p (bfd *abfd)
      2 bytes size repeated) and 12 bytes for images (4 bytes major id,
      4 bytes minor id, 4 bytes length).  */
   test_len = 12;
-
-  /* Size the main buffer.  */
-  buf = (unsigned char *) bfd_malloc (test_len);
+  buf = _bfd_malloc_and_read (abfd, test_len, test_len);
   if (buf == NULL)
     goto error_ret;
   PRIV (recrd.buf) = buf;
   PRIV (recrd.buf_size) = test_len;
-
-  /* Initialize the record pointer.  */
   PRIV (recrd.rec) = buf;
 
-  if (bfd_bread (buf, test_len, abfd) != test_len)
-    goto err_wrong_format;
-
   /* Is it an image?  */
   if ((bfd_getl32 (buf) == EIHD__K_MAJORID)
       && (bfd_getl32 (buf + 4) == EIHD__K_MINORID))
     {
-      unsigned int to_read;
-      unsigned int read_so_far;
-      unsigned int remaining;
       unsigned int eisd_offset, eihs_offset;
 
       /* Extract the header size.  */
@@ -2667,44 +2843,25 @@ alpha_vms_object_p (bfd *abfd)
       if (PRIV (recrd.rec_size) == 0)
 	PRIV (recrd.rec_size) = sizeof (struct vms_eihd);
 
-      if (PRIV (recrd.rec_size) > PRIV (recrd.buf_size))
-	{
-	  buf = bfd_realloc_or_free (buf, PRIV (recrd.rec_size));
-
-	  if (buf == NULL)
-	    {
-	      PRIV (recrd.buf) = NULL;
-	      goto error_ret;
-	    }
-	  PRIV (recrd.buf) = buf;
-	  PRIV (recrd.buf_size) = PRIV (recrd.rec_size);
-	}
-
       /* PR 21813: Check for a truncated record.  */
-      if (PRIV (recrd.rec_size < test_len))
-	goto error_ret;
-      /* Read the remaining record.  */
-      remaining = PRIV (recrd.rec_size) - test_len;
-      to_read = MIN (VMS_BLOCK_SIZE - test_len, remaining);
-      read_so_far = test_len;
-
-      while (remaining > 0)
-	{
-	  if (bfd_bread (buf + read_so_far, to_read, abfd) != to_read)
-	    goto err_wrong_format;
+      /* PR 17512: file: 7d7c57c2.  */
+      if (PRIV (recrd.rec_size) < sizeof (struct vms_eihd))
+	goto err_wrong_format;
 
-	  read_so_far += to_read;
-	  remaining -= to_read;
+      if (bfd_seek (abfd, 0, SEEK_SET))
+	goto error_ret;
 
-	  to_read = MIN (VMS_BLOCK_SIZE, remaining);
-	}
+      free (PRIV (recrd.buf));
+      PRIV (recrd.buf) = NULL;
+      buf = _bfd_malloc_and_read (abfd, PRIV (recrd.rec_size),
+				  PRIV (recrd.rec_size));
+      if (buf == NULL)
+	goto error_ret;
 
-      /* Reset the record pointer.  */
+      PRIV (recrd.buf) = buf;
+      PRIV (recrd.buf_size) = PRIV (recrd.rec_size);
       PRIV (recrd.rec) = buf;
 
-      /* PR 17512: file: 7d7c57c2.  */
-      if (PRIV (recrd.rec_size) < sizeof (struct vms_eihd))
-	goto error_ret;
       vms_debug2 ((2, "file type is image\n"));
 
       if (!_bfd_vms_slurp_eihd (abfd, &eisd_offset, &eihs_offset))
@@ -2749,14 +2906,13 @@ alpha_vms_object_p (bfd *abfd)
   if (! bfd_default_set_arch_mach (abfd, bfd_arch_alpha, 0))
     goto err_wrong_format;
 
-  return abfd->xvec;
+  return alpha_vms_free_private;
 
  err_wrong_format:
   bfd_set_error (bfd_error_wrong_format);
 
  error_ret:
-  if (PRIV (recrd.buf))
-    free (PRIV (recrd.buf));
+  alpha_vms_free_private (abfd);
   if (abfd->tdata.any != tdata_save && abfd->tdata.any != NULL)
     bfd_release (abfd, abfd->tdata.any);
   abfd->tdata.any = tdata_save;
@@ -2767,10 +2923,11 @@ alpha_vms_object_p (bfd *abfd)
 
 /* Write an EMH/MHD record.  */
 
-static void
+static bool
 _bfd_vms_write_emh (bfd *abfd)
 {
   struct vms_rec_wr *recwr = &PRIV (recwr);
+  unsigned char tbuf[18];
 
   _bfd_vms_output_alignment (recwr, 2);
 
@@ -2785,7 +2942,7 @@ _bfd_vms_write_emh (bfd *abfd)
   /* Create module name from filename.  */
   if (bfd_get_filename (abfd) != 0)
     {
-      char *module = vms_get_module_name (bfd_get_filename (abfd), TRUE);
+      char *module = vms_get_module_name (bfd_get_filename (abfd), true);
       _bfd_vms_output_counted (recwr, module);
       free (module);
     }
@@ -2793,14 +2950,14 @@ _bfd_vms_write_emh (bfd *abfd)
     _bfd_vms_output_counted (recwr, "NONAME");
 
   _bfd_vms_output_counted (recwr, BFD_VERSION_STRING);
-  _bfd_vms_output_dump (recwr, get_vms_time_string (), EMH_DATE_LENGTH);
+  _bfd_vms_output_dump (recwr, get_vms_time_string (tbuf), EMH_DATE_LENGTH);
   _bfd_vms_output_fill (recwr, 0, EMH_DATE_LENGTH);
-  _bfd_vms_output_end (abfd, recwr);
+  return _bfd_vms_output_end (abfd, recwr);
 }
 
 /* Write an EMH/LMN record.  */
 
-static void
+static bool
 _bfd_vms_write_lmn (bfd *abfd, const char *name)
 {
   char version [64];
@@ -2813,13 +2970,13 @@ _bfd_vms_write_lmn (bfd *abfd, const cha
   snprintf (version, sizeof (version), "%s %d.%d.%d", name,
 	    ver / 10000, (ver / 100) % 100, ver % 100);
   _bfd_vms_output_dump (recwr, (unsigned char *)version, strlen (version));
-  _bfd_vms_output_end (abfd, recwr);
+  return _bfd_vms_output_end (abfd, recwr);
 }
 
 
 /* Write eom record for bfd abfd.  Return FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_write_eeom (bfd *abfd)
 {
   struct vms_rec_wr *recwr = &PRIV (recwr);
@@ -2842,7 +2999,7 @@ _bfd_vms_write_eeom (bfd *abfd)
       if (section == 0)
 	{
 	  bfd_set_error (bfd_error_nonrepresentable_section);
-	  return FALSE;
+	  return false;
 	}
       _bfd_vms_output_short (recwr, 0);
       _bfd_vms_output_long (recwr, (unsigned long) section->target_index);
@@ -2851,26 +3008,39 @@ _bfd_vms_write_eeom (bfd *abfd)
       _bfd_vms_output_long (recwr, 0);
     }
 
-  _bfd_vms_output_end (abfd, recwr);
-  return TRUE;
+  return _bfd_vms_output_end (abfd, recwr);
 }
 
-static void
+static void *
 vector_grow1 (struct vector_type *vec, size_t elsz)
 {
-  if (vec->nbr_el + 1 < vec->max_el)
-    return;
-
-  if (vec->max_el == 0)
+  if (vec->nbr_el >= vec->max_el)
     {
-      vec->max_el = 16;
-      vec->els = bfd_malloc2 (vec->max_el, elsz);
-    }
-  else
-    {
-      vec->max_el *= 2;
-      vec->els = bfd_realloc2 (vec->els, vec->max_el, elsz);
+      if (vec->max_el == 0)
+	{
+	  vec->max_el = 16;
+	  vec->els = bfd_malloc (vec->max_el * elsz);
+	}
+      else
+	{
+	  size_t amt;
+	  if (vec->max_el > -1u / 2)
+	    {
+	      bfd_set_error (bfd_error_file_too_big);
+	      return NULL;
+	    }
+	  vec->max_el *= 2;
+	  if (_bfd_mul_overflow (vec->max_el, elsz, &amt))
+	    {
+	      bfd_set_error (bfd_error_file_too_big);
+	      return NULL;
+	    }
+	  vec->els = bfd_realloc_or_free (vec->els, amt);
+	}
     }
+  if (vec->els == NULL)
+    return NULL;
+  return (char *) vec->els + elsz * vec->nbr_el++;
 }
 
 /* Bump ABFD file position to next block.  */
@@ -2926,7 +3096,7 @@ alpha_vms_append_extra_eisd (bfd *abfd,
 /* Create an EISD for shared image SHRIMG.
    Return FALSE in case of error.  */
 
-static bfd_boolean
+static bool
 alpha_vms_create_eisd_for_shared (bfd *abfd, bfd *shrimg)
 {
   struct vms_internal_eisd_map *eisd;
@@ -2936,12 +3106,12 @@ alpha_vms_create_eisd_for_shared (bfd *a
   if (namlen + 5 > EISD__K_GBLNAMLEN)
     {
       /* Won't fit.  */
-      return FALSE;
+      return false;
     }
 
   eisd = bfd_alloc (abfd, sizeof (*eisd));
   if (eisd == NULL)
-    return FALSE;
+    return false;
 
   /* Fill the fields.  */
   eisd->u.gbl_eisd.common.majorid = EISD__K_MAJORID;
@@ -2964,25 +3134,25 @@ alpha_vms_create_eisd_for_shared (bfd *a
   /* Append it to the list.  */
   alpha_vms_append_extra_eisd (abfd, eisd);
 
-  return TRUE;
+  return true;
 }
 
 /* Create an EISD for section SEC.
    Return FALSE in case of failure.  */
 
-static bfd_boolean
+static bool
 alpha_vms_create_eisd_for_section (bfd *abfd, asection *sec)
 {
   struct vms_internal_eisd_map *eisd;
 
   /* Only for allocating section.  */
   if (!(sec->flags & SEC_ALLOC))
-    return TRUE;
+    return true;
 
   BFD_ASSERT (vms_section_data (sec)->eisd == NULL);
   eisd = bfd_alloc (abfd, sizeof (*eisd));
   if (eisd == NULL)
-    return FALSE;
+    return false;
   vms_section_data (sec)->eisd = eisd;
 
   /* Fill the fields.  */
@@ -3026,13 +3196,13 @@ alpha_vms_create_eisd_for_section (bfd *
     PRIV (eisd_tail)->next = eisd;
   PRIV (eisd_tail) = eisd;
 
-  return TRUE;
+  return true;
 }
 
 /* Layout executable ABFD and write it to the disk.
    Return FALSE in case of failure.  */
 
-static bfd_boolean
+static bool
 alpha_vms_write_exec (bfd *abfd)
 {
   struct vms_eihd eihd;
@@ -3082,7 +3252,7 @@ alpha_vms_write_exec (bfd *abfd)
   bfd_putl32 (16, eihd.virt_mem_block_size);
   bfd_putl32 (0, eihd.ext_fixup_off);
   bfd_putl32 (0, eihd.noopt_psect_off);
-  bfd_putl32 (-1, eihd.alias);
+  bfd_putl16 (-1, eihd.alias);
 
   /* Alloc EIHA.  */
   eiha = (struct vms_eiha *)((char *) &eihd + PRIV (file_pos));
@@ -3109,7 +3279,7 @@ alpha_vms_write_exec (bfd *abfd)
     unsigned int len;
 
     /* Set module name.  */
-    module = vms_get_module_name (bfd_get_filename (abfd), TRUE);
+    module = vms_get_module_name (bfd_get_filename (abfd), true);
     len = strlen (module);
     if (len > sizeof (eihi->imgnam) - 1)
       len = sizeof (eihi->imgnam) - 1;
@@ -3153,7 +3323,7 @@ alpha_vms_write_exec (bfd *abfd)
   for (sec = abfd->sections; sec; sec = sec->next)
     {
       if (!alpha_vms_create_eisd_for_section (abfd, sec))
-	return FALSE;
+	return false;
     }
 
   /* Merge section EIDS which extra ones.  */
@@ -3171,7 +3341,7 @@ alpha_vms_write_exec (bfd *abfd)
     {
       eisd = bfd_zalloc (abfd, sizeof (*eisd));
       if (eisd == NULL)
-	return FALSE;
+	return false;
       eisd->u.eisd.majorid = 0;
       eisd->u.eisd.minorid = 0;
       eisd->u.eisd.eisdsize = 0;
@@ -3210,7 +3380,8 @@ alpha_vms_write_exec (bfd *abfd)
   /* Place sections.  */
   for (sec = abfd->sections; sec; sec = sec->next)
     {
-      if (!(sec->flags & SEC_HAS_CONTENTS))
+      if (!(sec->flags & SEC_HAS_CONTENTS)
+	  || sec->contents == NULL)
 	continue;
 
       eisd = vms_section_data (sec)->eisd;
@@ -3254,8 +3425,8 @@ alpha_vms_write_exec (bfd *abfd)
 
   /* Write first block.  */
   bfd_putl32 (lnkflags, eihd.lnkflags);
-  if (bfd_bwrite (&eihd, sizeof (eihd), abfd) != sizeof (eihd))
-    return FALSE;
+  if (bfd_write (&eihd, sizeof (eihd), abfd) != sizeof (eihd))
+    return false;
 
   /* Write remaining eisd.  */
   if (eisd != NULL)
@@ -3275,8 +3446,8 @@ alpha_vms_write_exec (bfd *abfd)
 	      || (next_eisd->file_pos / VMS_BLOCK_SIZE
 		  != eisd->file_pos / VMS_BLOCK_SIZE))
 	    {
-	      if (bfd_bwrite (blk, sizeof (blk), abfd) != sizeof (blk))
-		return FALSE;
+	      if (bfd_write (blk, sizeof (blk), abfd) != sizeof (blk))
+		return false;
 
 	      memset (blk, 0xff, sizeof (blk));
 	    }
@@ -3290,18 +3461,19 @@ alpha_vms_write_exec (bfd *abfd)
       unsigned char blk[VMS_BLOCK_SIZE];
       bfd_size_type len;
 
-      if (sec->size == 0 || !(sec->flags & SEC_HAS_CONTENTS))
+      if (sec->size == 0 || !(sec->flags & SEC_HAS_CONTENTS)
+	  || sec->contents == NULL)
 	continue;
-      if (bfd_bwrite (sec->contents, sec->size, abfd) != sec->size)
-	return FALSE;
+      if (bfd_write (sec->contents, sec->size, abfd) != sec->size)
+	return false;
 
       /* Pad.  */
       len = VMS_BLOCK_SIZE - sec->size % VMS_BLOCK_SIZE;
       if (len != VMS_BLOCK_SIZE)
 	{
 	  memset (blk, 0, len);
-	  if (bfd_bwrite (blk, len, abfd) != len)
-	    return FALSE;
+	  if (bfd_write (blk, len, abfd) != len)
+	    return false;
 	}
     }
 
@@ -3311,8 +3483,9 @@ alpha_vms_write_exec (bfd *abfd)
       struct vms_rec_wr *recwr = &PRIV (recwr);
       unsigned int i;
 
-      _bfd_vms_write_emh (abfd);
-      _bfd_vms_write_lmn (abfd, "GNU LD");
+      if (!_bfd_vms_write_emh (abfd)
+	  || !_bfd_vms_write_lmn (abfd, "GNU LD"))
+	return false;
 
       /* PSC for the absolute section.  */
       _bfd_vms_output_begin (recwr, EOBJ__C_EGSD);
@@ -3323,7 +3496,8 @@ alpha_vms_write_exec (bfd *abfd)
       _bfd_vms_output_long (recwr, 0);
       _bfd_vms_output_counted (recwr, ".$$ABS$$.");
       _bfd_vms_output_end_subrec (recwr);
-      _bfd_vms_output_end (abfd, recwr);
+      if (!_bfd_vms_output_end (abfd, recwr))
+	return false;
 
       for (i = 0; i < PRIV (gsd_sym_count); i++)
 	{
@@ -3356,23 +3530,25 @@ alpha_vms_write_exec (bfd *abfd)
 	  _bfd_vms_output_long (recwr, 0);
 	  _bfd_vms_output_counted (recwr, sym->name);
 	  _bfd_vms_output_end_subrec (recwr);
-	  if ((i % 5) == 4)
-	    _bfd_vms_output_end (abfd, recwr);
-	}
-      if ((i % 5) != 0)
-	_bfd_vms_output_end (abfd, recwr);
+	  if ((i % 5) == 4
+	      && !_bfd_vms_output_end (abfd, recwr))
+	    return false;
+	}
+      if ((i % 5) != 0
+	  && !_bfd_vms_output_end (abfd, recwr))
+	return false;
 
       if (!_bfd_vms_write_eeom (abfd))
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Object write.  */
 
 /* Write section and symbol directory of bfd abfd.  Return FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_write_egsd (bfd *abfd)
 {
   asection *section;
@@ -3418,7 +3594,8 @@ _bfd_vms_write_egsd (bfd *abfd)
       /* 13 bytes egsd, max 31 chars name -> should be 44 bytes.  */
       if (_bfd_vms_output_check (recwr, 64) < 0)
 	{
-	  _bfd_vms_output_end (abfd, recwr);
+	  if (!_bfd_vms_output_end (abfd, recwr))
+	    return false;
 	  _bfd_vms_output_begin (recwr, EOBJ__C_EGSD);
 	  _bfd_vms_output_long (recwr, 0);
 	}
@@ -3514,7 +3691,8 @@ _bfd_vms_write_egsd (bfd *abfd)
 	 bytes for a possible ABS section.  */
       if (_bfd_vms_output_check (recwr, 80 + 16) < 0)
 	{
-	  _bfd_vms_output_end (abfd, recwr);
+	  if (!_bfd_vms_output_end (abfd, recwr))
+	    return false;
 	  _bfd_vms_output_begin (recwr, EOBJ__C_EGSD);
 	  _bfd_vms_output_long (recwr, 0);
 	}
@@ -3593,14 +3771,12 @@ _bfd_vms_write_egsd (bfd *abfd)
     }
 
   _bfd_vms_output_alignment (recwr, 8);
-  _bfd_vms_output_end (abfd, recwr);
-
-  return TRUE;
+  return _bfd_vms_output_end (abfd, recwr);
 }
 
 /* Write object header for bfd abfd.  Return FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_write_ehdr (bfd *abfd)
 {
   asymbol *symbol;
@@ -3611,8 +3787,9 @@ _bfd_vms_write_ehdr (bfd *abfd)
 
   _bfd_vms_output_alignment (recwr, 2);
 
-  _bfd_vms_write_emh (abfd);
-  _bfd_vms_write_lmn (abfd, "GNU AS");
+  if (!_bfd_vms_write_emh (abfd)
+      || !_bfd_vms_write_lmn (abfd, "GNU AS"))
+    return false;
 
   /* SRC.  */
   _bfd_vms_output_begin (recwr, EOBJ__C_EMH);
@@ -3633,13 +3810,15 @@ _bfd_vms_write_ehdr (bfd *abfd)
   if (symnum == abfd->symcount)
     _bfd_vms_output_dump (recwr, (unsigned char *) STRING_COMMA_LEN ("noname"));
 
-  _bfd_vms_output_end (abfd, recwr);
+  if (!_bfd_vms_output_end (abfd, recwr))
+    return false;
 
   /* TTL.  */
   _bfd_vms_output_begin (recwr, EOBJ__C_EMH);
   _bfd_vms_output_short (recwr, EMH__C_TTL);
   _bfd_vms_output_dump (recwr, (unsigned char *) STRING_COMMA_LEN ("TTL"));
-  _bfd_vms_output_end (abfd, recwr);
+  if (!_bfd_vms_output_end (abfd, recwr))
+    return false;
 
   /* CPR.  */
   _bfd_vms_output_begin (recwr, EOBJ__C_EMH);
@@ -3647,9 +3826,7 @@ _bfd_vms_write_ehdr (bfd *abfd)
   _bfd_vms_output_dump (recwr,
 			(unsigned char *)"GNU BFD ported by Klaus KÃ¤mpf 1994-1996",
 			 39);
-  _bfd_vms_output_end (abfd, recwr);
-
-  return TRUE;
+  return _bfd_vms_output_end (abfd, recwr);
 }
 
 /* Part 4.6, relocations.  */
@@ -3661,12 +3838,12 @@ _bfd_vms_write_ehdr (bfd *abfd)
 
 /* Close the etir/etbt record.  */
 
-static void
+static bool
 end_etir_record (bfd * abfd)
 {
   struct vms_rec_wr *recwr = &PRIV (recwr);
 
-  _bfd_vms_output_end (abfd, recwr);
+  return _bfd_vms_output_end (abfd, recwr);
 }
 
 static void
@@ -3712,7 +3889,7 @@ start_etir_or_etbt_record (bfd *abfd, as
 /* Output a STO_IMM command for SSIZE bytes of data from CPR at virtual
    address VADDR in section specified by SEC_INDEX and NAME.  */
 
-static void
+static bool
 sto_imm (bfd *abfd, asection *section,
 	 bfd_size_type ssize, unsigned char *cptr, bfd_vma vaddr)
 {
@@ -3732,7 +3909,8 @@ sto_imm (bfd *abfd, asection *section,
       if (_bfd_vms_output_check (recwr, size) < 0)
 	{
 	  /* Doesn't fit, split !  */
-	  end_etir_record (abfd);
+	  if (!end_etir_record (abfd))
+	    return false;
 
 	  start_etir_or_etbt_record (abfd, section, vaddr);
 
@@ -3755,22 +3933,25 @@ sto_imm (bfd *abfd, asection *section,
       cptr += size;
       ssize -= size;
     }
+  return true;
 }
 
-static void
+static bool
 etir_output_check (bfd *abfd, asection *section, bfd_vma vaddr, int checklen)
 {
   if (_bfd_vms_output_check (&PRIV (recwr), checklen) < 0)
     {
       /* Not enough room in this record.  Close it and open a new one.  */
-      end_etir_record (abfd);
+      if (!end_etir_record (abfd))
+	return false;
       start_etir_or_etbt_record (abfd, section, vaddr);
     }
+  return true;
 }
 
 /* Return whether RELOC must be deferred till the end.  */
 
-static bfd_boolean
+static bool
 defer_reloc_p (arelent *reloc)
 {
   switch (reloc->howto->type)
@@ -3779,16 +3960,16 @@ defer_reloc_p (arelent *reloc)
     case ALPHA_R_LDA:
     case ALPHA_R_BSR:
     case ALPHA_R_BOH:
-      return TRUE;
+      return true;
 
     default:
-      return FALSE;
+      return false;
     }
 }
 
 /* Write section contents for bfd abfd.  Return FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED)
 {
   asection *section;
@@ -3812,7 +3993,7 @@ _bfd_vms_write_etir (bfd * abfd, int obj
       if (!section->contents)
 	{
 	  bfd_set_error (bfd_error_no_contents);
-	  return FALSE;
+	  return false;
 	}
 
       start_etir_or_etbt_record (abfd, section, 0);
@@ -3860,7 +4041,7 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 	      bfd_vma addr = rptr->address;
 	      asymbol *sym = *rptr->sym_ptr_ptr;
 	      asection *sec = sym->section;
-	      bfd_boolean defer = defer_reloc_p (rptr);
+	      bool defer = defer_reloc_p (rptr);
 	      unsigned int slen;
 
 	      if (pass2_in_progress)
@@ -3883,7 +4064,8 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		    _bfd_error_handler (_("size error in section %pA"),
 					section);
 		  size = addr - curr_addr;
-		  sto_imm (abfd, section, size, curr_data, curr_addr);
+		  if (!sto_imm (abfd, section, size, curr_data, curr_addr))
+		    return false;
 		  curr_data += size;
 		  curr_addr += size;
 		}
@@ -3900,7 +4082,8 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		    {
 		      bfd_vma addend = rptr->addend;
 		      slen = strlen ((char *) sym->name);
-		      etir_output_check (abfd, section, curr_addr, slen);
+		      if (!etir_output_check (abfd, section, curr_addr, slen))
+			return false;
 		      if (addend)
 			{
 			  _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_GBL);
@@ -3924,7 +4107,8 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		    }
 		  else if (bfd_is_abs_section (sym->section))
 		    {
-		      etir_output_check (abfd, section, curr_addr, 16);
+		      if (!etir_output_check (abfd, section, curr_addr, 16))
+			return false;
 		      _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_LW);
 		      _bfd_vms_output_long (recwr, (unsigned long) sym->value);
 		      _bfd_vms_output_end_subrec (recwr);
@@ -3933,7 +4117,8 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		    }
 		  else
 		    {
-		      etir_output_check (abfd, section, curr_addr, 32);
+		      if (!etir_output_check (abfd, section, curr_addr, 32))
+			return false;
 		      _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_PQ);
 		      _bfd_vms_output_long (recwr,
 					    (unsigned long) sec->target_index);
@@ -3953,7 +4138,8 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		    {
 		      bfd_vma addend = rptr->addend;
 		      slen = strlen ((char *) sym->name);
-		      etir_output_check (abfd, section, curr_addr, slen);
+		      if (!etir_output_check (abfd, section, curr_addr, slen))
+			return false;
 		      if (addend)
 			{
 			  _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_GBL);
@@ -3976,7 +4162,8 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		    }
 		  else if (bfd_is_abs_section (sym->section))
 		    {
-		      etir_output_check (abfd, section, curr_addr, 16);
+		      if (!etir_output_check (abfd, section, curr_addr, 16))
+			return false;
 		      _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_QW);
 		      _bfd_vms_output_quad (recwr, sym->value);
 		      _bfd_vms_output_end_subrec (recwr);
@@ -3985,7 +4172,8 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		    }
 		  else
 		    {
-		      etir_output_check (abfd, section, curr_addr, 32);
+		      if (!etir_output_check (abfd, section, curr_addr, 32))
+			return false;
 		      _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_PQ);
 		      _bfd_vms_output_long (recwr,
 					    (unsigned long) sec->target_index);
@@ -3997,12 +4185,14 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		  break;
 
 		case ALPHA_R_HINT:
-		  sto_imm (abfd, section, size, curr_data, curr_addr);
+		  if (!sto_imm (abfd, section, size, curr_data, curr_addr))
+		    return false;
 		  break;
 
 		case ALPHA_R_LINKAGE:
 		  size = 16;
-		  etir_output_check (abfd, section, curr_addr, 64);
+		  if (!etir_output_check (abfd, section, curr_addr, 64))
+		    return false;
 		  _bfd_vms_output_begin_subrec (recwr, ETIR__C_STC_LP_PSB);
 		  _bfd_vms_output_long
 		    (recwr, (unsigned long) rptr->addend);
@@ -4015,7 +4205,8 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 
 		case ALPHA_R_CODEADDR:
 		  slen = strlen ((char *) sym->name);
-		  etir_output_check (abfd, section, curr_addr, slen);
+		  if (!etir_output_check (abfd, section, curr_addr, slen))
+		    return false;
 		  _bfd_vms_output_begin_subrec (recwr, ETIR__C_STO_CA);
 		  _bfd_vms_output_counted (recwr, sym->name);
 		  _bfd_vms_output_end_subrec (recwr);
@@ -4024,8 +4215,9 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		case ALPHA_R_NOP:
 		  udata
 		    = (struct evax_private_udata_struct *) rptr->sym_ptr_ptr;
-		  etir_output_check (abfd, section, curr_addr,
-				     32 + 1 + strlen (udata->origname));
+		  if (!etir_output_check (abfd, section, curr_addr,
+					  32 + 1 + strlen (udata->origname)))
+		    return false;
 		  _bfd_vms_output_begin_subrec (recwr, ETIR__C_STC_NOP_GBL);
 		  _bfd_vms_output_long (recwr, (unsigned long) udata->lkindex);
 		  _bfd_vms_output_long
@@ -4046,8 +4238,9 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		case ALPHA_R_LDA:
 		  udata
 		    = (struct evax_private_udata_struct *) rptr->sym_ptr_ptr;
-		  etir_output_check (abfd, section, curr_addr,
-				     32 + 1 + strlen (udata->origname));
+		  if (!etir_output_check (abfd, section, curr_addr,
+					  32 + 1 + strlen (udata->origname)))
+		    return false;
 		  _bfd_vms_output_begin_subrec (recwr, ETIR__C_STC_LDA_GBL);
 		  _bfd_vms_output_long
 		    (recwr, (unsigned long) udata->lkindex + 1);
@@ -4065,8 +4258,9 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 		case ALPHA_R_BOH:
 		  udata
 		    = (struct evax_private_udata_struct *) rptr->sym_ptr_ptr;
-		  etir_output_check (abfd, section, curr_addr,
-				       32 + 1 + strlen (udata->origname));
+		  if (!etir_output_check (abfd, section, curr_addr,
+					  32 + 1 + strlen (udata->origname)))
+		    return false;
 		  _bfd_vms_output_begin_subrec (recwr, ETIR__C_STC_BOH_GBL);
 		  _bfd_vms_output_long (recwr, (unsigned long) udata->lkindex);
 		  _bfd_vms_output_long
@@ -4096,10 +4290,11 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 	      if (curr_addr > section->size)
 		{
 		  _bfd_error_handler (_("size error in section %pA"), section);
-		  return FALSE;
+		  return false;
 		}
 	      size = section->size - curr_addr;
-	      sto_imm (abfd, section, size, curr_data, curr_addr);
+	      if (!sto_imm (abfd, section, size, curr_data, curr_addr))
+		return false;
 	      curr_data += size;
 	      curr_addr += size;
 
@@ -4112,18 +4307,20 @@ _bfd_vms_write_etir (bfd * abfd, int obj
 	}
 
       else /* (section->flags & SEC_RELOC) */
-	sto_imm (abfd, section, section->size, section->contents, 0);
+	if (!sto_imm (abfd, section, section->size, section->contents, 0))
+	  return false;
 
-      end_etir_record (abfd);
+      if (!end_etir_record (abfd))
+	return false;
     }
 
   _bfd_vms_output_alignment (recwr, 2);
-  return TRUE;
+  return true;
 }
 
 /* Write cached information into a file being written, at bfd_close.  */
 
-static bfd_boolean
+static bool
 alpha_vms_write_object_contents (bfd *abfd)
 {
   vms_debug2 ((1, "vms_write_object_contents (%p)\n", abfd));
@@ -4137,16 +4334,16 @@ alpha_vms_write_object_contents (bfd *ab
       if (abfd->section_count > 0)			/* we have sections */
 	{
 	  if (!_bfd_vms_write_ehdr (abfd))
-	    return FALSE;
+	    return false;
 	  if (!_bfd_vms_write_egsd (abfd))
-	    return FALSE;
+	    return false;
 	  if (!_bfd_vms_write_etir (abfd, EOBJ__C_ETIR))
-	    return FALSE;
+	    return false;
 	  if (!_bfd_vms_write_eeom (abfd))
-	    return FALSE;
+	    return false;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Debug stuff: nearest line.  */
@@ -4164,15 +4361,15 @@ new_module (bfd *abfd)
     = (struct module *) bfd_zalloc (abfd, sizeof (struct module));
   module->file_table_count = 16; /* Arbitrary.  */
   module->file_table
-    = bfd_malloc (module->file_table_count * sizeof (struct fileinfo));
+    = bfd_zmalloc (module->file_table_count * sizeof (struct fileinfo));
   return module;
 }
 
 /* Parse debug info for a module and internalize it.  */
 
-static void
+static bool
 parse_module (bfd *abfd, struct module *module, unsigned char *ptr,
-	      int length)
+	      bfd_size_type length)
 {
   unsigned char *maxptr = ptr + length;
   unsigned char *src_ptr, *pcl_ptr;
@@ -4184,12 +4381,16 @@ parse_module (bfd *abfd, struct module *
 
   /* Initialize tables with zero element.  */
   curr_srec = (struct srecinfo *) bfd_zalloc (abfd, sizeof (struct srecinfo));
+  if (!curr_srec)
+    return false;
   module->srec_table = curr_srec;
 
   curr_line = (struct lineinfo *) bfd_zalloc (abfd, sizeof (struct lineinfo));
+  if (!curr_line)
+    return false;
   module->line_table = curr_line;
 
-  while (length == -1 || ptr < maxptr)
+  while (ptr + 3 < maxptr)
     {
       /* The first byte is not counted in the recorded length.  */
       int rec_length = bfd_getl16 (ptr) + 1;
@@ -4197,15 +4398,19 @@ parse_module (bfd *abfd, struct module *
 
       vms_debug2 ((2, "DST record: leng %d, type %d\n", rec_length, rec_type));
 
-      if (length == -1 && rec_type == DST__K_MODEND)
+      if (rec_length > maxptr - ptr)
+	break;
+      if (rec_type == DST__K_MODEND)
 	break;
 
       switch (rec_type)
 	{
 	case DST__K_MODBEG:
+	  if (rec_length <= DST_S_B_MODBEG_NAME)
+	    break;
 	  module->name
-	    = _bfd_vms_save_counted_string (ptr + DST_S_B_MODBEG_NAME,
-					    maxptr - (ptr + DST_S_B_MODBEG_NAME));
+	    = _bfd_vms_save_counted_string (abfd, ptr + DST_S_B_MODBEG_NAME,
+					    rec_length - DST_S_B_MODBEG_NAME);
 
 	  curr_pc = 0;
 	  prev_pc = 0;
@@ -4219,11 +4424,15 @@ parse_module (bfd *abfd, struct module *
 	  break;
 
 	case DST__K_RTNBEG:
+	  if (rec_length <= DST_S_B_RTNBEG_NAME)
+	    break;
 	  funcinfo = (struct funcinfo *)
 	    bfd_zalloc (abfd, sizeof (struct funcinfo));
+	  if (!funcinfo)
+	    return false;
 	  funcinfo->name
-	    = _bfd_vms_save_counted_string (ptr + DST_S_B_RTNBEG_NAME,
-					    maxptr - (ptr + DST_S_B_RTNBEG_NAME));
+	    = _bfd_vms_save_counted_string (abfd, ptr + DST_S_B_RTNBEG_NAME,
+					    rec_length - DST_S_B_RTNBEG_NAME);
 	  funcinfo->low = bfd_getl32 (ptr + DST_S_L_RTNBEG_ADDRESS);
 	  funcinfo->next = module->func_table;
 	  module->func_table = funcinfo;
@@ -4233,6 +4442,10 @@ parse_module (bfd *abfd, struct module *
 	  break;
 
 	case DST__K_RTNEND:
+	  if (rec_length < DST_S_L_RTNEND_SIZE + 4)
+	    break;
+	  if (!module->func_table)
+	    return false;
 	  module->func_table->high = module->func_table->low
 	    + bfd_getl32 (ptr + DST_S_L_RTNEND_SIZE) - 1;
 
@@ -4263,34 +4476,90 @@ parse_module (bfd *abfd, struct module *
 
 	  vms_debug2 ((3, "source info\n"));
 
-	  while (src_ptr < ptr + rec_length)
+	  while (src_ptr - ptr < rec_length)
 	    {
 	      int cmd = src_ptr[0], cmd_length, data;
 
 	      switch (cmd)
 		{
 		case DST__K_SRC_DECLFILE:
+		  if (src_ptr - ptr + DST_S_B_SRC_DF_LENGTH >= rec_length)
+		    cmd_length = 0x10000;
+		  else
+		    cmd_length = src_ptr[DST_S_B_SRC_DF_LENGTH] + 2;
+		  break;
+
+		case DST__K_SRC_DEFLINES_B:
+		  cmd_length = 2;
+		  break;
+
+		case DST__K_SRC_DEFLINES_W:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_SRC_INCRLNUM_B:
+		  cmd_length = 2;
+		  break;
+
+		case DST__K_SRC_SETFILE:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_SRC_SETLNUM_L:
+		  cmd_length = 5;
+		  break;
+
+		case DST__K_SRC_SETLNUM_W:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_SRC_SETREC_L:
+		  cmd_length = 5;
+		  break;
+
+		case DST__K_SRC_SETREC_W:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_SRC_FORMFEED:
+		  cmd_length = 1;
+		  break;
+
+		default:
+		  cmd_length = 2;
+		  break;
+		}
+
+	      if (src_ptr - ptr + cmd_length > rec_length)
+		break;
+
+	      switch (cmd)
+		{
+		case DST__K_SRC_DECLFILE:
 		  {
 		    unsigned int fileid
 		      = bfd_getl16 (src_ptr + DST_S_W_SRC_DF_FILEID);
-		    char *filename
-		      = _bfd_vms_save_counted_string (src_ptr + DST_S_B_SRC_DF_FILENAME,
-						      (ptr + rec_length) -
-						      (src_ptr + DST_S_B_SRC_DF_FILENAME)
-						      );
+		    char *filename = _bfd_vms_save_counted_string
+		      (abfd,
+		       src_ptr + DST_S_B_SRC_DF_FILENAME,
+		       ptr + rec_length - (src_ptr + DST_S_B_SRC_DF_FILENAME));
 
-		    while (fileid >= module->file_table_count)
+		    if (fileid >= module->file_table_count)
 		      {
-			module->file_table_count *= 2;
+			unsigned int old_count = module->file_table_count;
+			module->file_table_count += fileid;
 			module->file_table
-			  = bfd_realloc (module->file_table,
-					 module->file_table_count
-					   * sizeof (struct fileinfo));
+			  = bfd_realloc_or_free (module->file_table,
+						 module->file_table_count
+						 * sizeof (struct fileinfo));
+			if (module->file_table == NULL)
+			  return false;
+			memset (module->file_table + old_count, 0,
+				fileid * sizeof (struct fileinfo));
 		      }
 
 		    module->file_table [fileid].name = filename;
 		    module->file_table [fileid].srec = 1;
-		    cmd_length = src_ptr[DST_S_B_SRC_DF_LENGTH] + 2;
 		    vms_debug2 ((4, "DST_S_C_SRC_DECLFILE: %d, %s\n",
 				 fileid, module->file_table [fileid].name));
 		  }
@@ -4307,7 +4576,6 @@ parse_module (bfd *abfd, struct module *
 		  srec->sfile = curr_srec->sfile;
 		  curr_srec->next = srec;
 		  curr_srec = srec;
-		  cmd_length = 2;
 		  vms_debug2 ((4, "DST_S_C_SRC_DEFLINES_B: %d\n", data));
 		  break;
 
@@ -4322,36 +4590,34 @@ parse_module (bfd *abfd, struct module *
 		  srec->sfile = curr_srec->sfile;
 		  curr_srec->next = srec;
 		  curr_srec = srec;
-		  cmd_length = 3;
 		  vms_debug2 ((4, "DST_S_C_SRC_DEFLINES_W: %d\n", data));
 		  break;
 
 		case DST__K_SRC_INCRLNUM_B:
 		  data = src_ptr[DST_S_B_SRC_UNSBYTE];
 		  curr_srec->line += data;
-		  cmd_length = 2;
 		  vms_debug2 ((4, "DST_S_C_SRC_INCRLNUM_B: %d\n", data));
 		  break;
 
 		case DST__K_SRC_SETFILE:
 		  data = bfd_getl16 (src_ptr + DST_S_W_SRC_UNSWORD);
-		  curr_srec->sfile = data;
-		  curr_srec->srec = module->file_table[data].srec;
-		  cmd_length = 3;
+		  if ((unsigned int) data < module->file_table_count)
+		    {
+		      curr_srec->sfile = data;
+		      curr_srec->srec = module->file_table[data].srec;
+		    }
 		  vms_debug2 ((4, "DST_S_C_SRC_SETFILE: %d\n", data));
 		  break;
 
 		case DST__K_SRC_SETLNUM_L:
 		  data = bfd_getl32 (src_ptr + DST_S_L_SRC_UNSLONG);
 		  curr_srec->line = data;
-		  cmd_length = 5;
 		  vms_debug2 ((4, "DST_S_C_SRC_SETLNUM_L: %d\n", data));
 		  break;
 
 		case DST__K_SRC_SETLNUM_W:
 		  data = bfd_getl16 (src_ptr + DST_S_W_SRC_UNSWORD);
 		  curr_srec->line = data;
-		  cmd_length = 3;
 		  vms_debug2 ((4, "DST_S_C_SRC_SETLNUM_W: %d\n", data));
 		  break;
 
@@ -4359,7 +4625,6 @@ parse_module (bfd *abfd, struct module *
 		  data = bfd_getl32 (src_ptr + DST_S_L_SRC_UNSLONG);
 		  curr_srec->srec = data;
 		  module->file_table[curr_srec->sfile].srec = data;
-		  cmd_length = 5;
 		  vms_debug2 ((4, "DST_S_C_SRC_SETREC_L: %d\n", data));
 		  break;
 
@@ -4367,19 +4632,16 @@ parse_module (bfd *abfd, struct module *
 		  data = bfd_getl16 (src_ptr + DST_S_W_SRC_UNSWORD);
 		  curr_srec->srec = data;
 		  module->file_table[curr_srec->sfile].srec = data;
-		  cmd_length = 3;
 		  vms_debug2 ((4, "DST_S_C_SRC_SETREC_W: %d\n", data));
 		  break;
 
 		case DST__K_SRC_FORMFEED:
-		  cmd_length = 1;
 		  vms_debug2 ((4, "DST_S_C_SRC_FORMFEED\n"));
 		  break;
 
 		default:
 		  _bfd_error_handler (_("unknown source command %d"),
 				      cmd);
-		  cmd_length = 2;
 		  break;
 		}
 
@@ -4392,7 +4654,7 @@ parse_module (bfd *abfd, struct module *
 
 	  vms_debug2 ((3, "line info\n"));
 
-	  while (pcl_ptr < ptr + rec_length)
+	  while (pcl_ptr - ptr < rec_length)
 	    {
 	      /* The command byte is signed so we must sign-extend it.  */
 	      int cmd = ((signed char *)pcl_ptr)[0], cmd_length, data;
@@ -4400,10 +4662,106 @@ parse_module (bfd *abfd, struct module *
 	      switch (cmd)
 		{
 		case DST__K_DELTA_PC_W:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_DELTA_PC_L:
+		  cmd_length = 5;
+		  break;
+
+		case DST__K_INCR_LINUM:
+		  cmd_length = 2;
+		  break;
+
+		case DST__K_INCR_LINUM_W:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_INCR_LINUM_L:
+		  cmd_length = 5;
+		  break;
+
+		case DST__K_SET_LINUM_INCR:
+		  cmd_length = 2;
+		  break;
+
+		case DST__K_SET_LINUM_INCR_W:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_RESET_LINUM_INCR:
+		  cmd_length = 1;
+		  break;
+
+		case DST__K_BEG_STMT_MODE:
+		  cmd_length = 1;
+		  break;
+
+		case DST__K_END_STMT_MODE:
+		  cmd_length = 1;
+		  break;
+
+		case DST__K_SET_LINUM_B:
+		  cmd_length = 2;
+		  break;
+
+		case DST__K_SET_LINUM:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_SET_LINUM_L:
+		  cmd_length = 5;
+		  break;
+
+		case DST__K_SET_PC:
+		  cmd_length = 2;
+		  break;
+
+		case DST__K_SET_PC_W:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_SET_PC_L:
+		  cmd_length = 5;
+		  break;
+
+		case DST__K_SET_STMTNUM:
+		  cmd_length = 2;
+		  break;
+
+		case DST__K_TERM:
+		  cmd_length = 2;
+		  break;
+
+		case DST__K_TERM_W:
+		  cmd_length = 3;
+		  break;
+
+		case DST__K_TERM_L:
+		  cmd_length = 5;
+		  break;
+
+		case DST__K_SET_ABS_PC:
+		  cmd_length = 5;
+		  break;
+
+		default:
+		  if (cmd <= 0)
+		    cmd_length = 1;
+		  else
+		    cmd_length = 2;
+		  break;
+		}
+
+	      if (pcl_ptr - ptr + cmd_length > rec_length)
+		break;
+
+	      switch (cmd)
+		{
+		case DST__K_DELTA_PC_W:
 		  data = bfd_getl16 (pcl_ptr + DST_S_W_PCLINE_UNSWORD);
 		  curr_pc += data;
 		  curr_linenum += 1;
-		  cmd_length = 3;
 		  vms_debug2 ((4, "DST__K_DELTA_PC_W: %d\n", data));
 		  break;
 
@@ -4411,131 +4769,111 @@ parse_module (bfd *abfd, struct module *
 		  data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG);
 		  curr_pc += data;
 		  curr_linenum += 1;
-		  cmd_length = 5;
 		  vms_debug2 ((4, "DST__K_DELTA_PC_L: %d\n", data));
 		  break;
 
 		case DST__K_INCR_LINUM:
 		  data = pcl_ptr[DST_S_B_PCLINE_UNSBYTE];
 		  curr_linenum += data;
-		  cmd_length = 2;
 		  vms_debug2 ((4, "DST__K_INCR_LINUM: %d\n", data));
 		  break;
 
 		case DST__K_INCR_LINUM_W:
 		  data = bfd_getl16 (pcl_ptr + DST_S_W_PCLINE_UNSWORD);
 		  curr_linenum += data;
-		  cmd_length = 3;
 		  vms_debug2 ((4, "DST__K_INCR_LINUM_W: %d\n", data));
 		  break;
 
 		case DST__K_INCR_LINUM_L:
 		  data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG);
 		  curr_linenum += data;
-		  cmd_length = 5;
 		  vms_debug2 ((4, "DST__K_INCR_LINUM_L: %d\n", data));
 		  break;
 
 		case DST__K_SET_LINUM_INCR:
 		  _bfd_error_handler
 		    (_("%s not implemented"), "DST__K_SET_LINUM_INCR");
-		  cmd_length = 2;
 		  break;
 
 		case DST__K_SET_LINUM_INCR_W:
 		  _bfd_error_handler
 		    (_("%s not implemented"), "DST__K_SET_LINUM_INCR_W");
-		  cmd_length = 3;
 		  break;
 
 		case DST__K_RESET_LINUM_INCR:
 		  _bfd_error_handler
 		    (_("%s not implemented"), "DST__K_RESET_LINUM_INCR");
-		  cmd_length = 1;
 		  break;
 
 		case DST__K_BEG_STMT_MODE:
 		  _bfd_error_handler
 		    (_("%s not implemented"), "DST__K_BEG_STMT_MODE");
-		  cmd_length = 1;
 		  break;
 
 		case DST__K_END_STMT_MODE:
 		  _bfd_error_handler
 		    (_("%s not implemented"), "DST__K_END_STMT_MODE");
-		  cmd_length = 1;
 		  break;
 
 		case DST__K_SET_LINUM_B:
 		  data = pcl_ptr[DST_S_B_PCLINE_UNSBYTE];
 		  curr_linenum = data;
-		  cmd_length = 2;
 		  vms_debug2 ((4, "DST__K_SET_LINUM_B: %d\n", data));
 		  break;
 
 		case DST__K_SET_LINUM:
 		  data = bfd_getl16 (pcl_ptr + DST_S_W_PCLINE_UNSWORD);
 		  curr_linenum = data;
-		  cmd_length = 3;
 		  vms_debug2 ((4, "DST__K_SET_LINE_NUM: %d\n", data));
 		  break;
 
 		case DST__K_SET_LINUM_L:
 		  data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG);
 		  curr_linenum = data;
-		  cmd_length = 5;
 		  vms_debug2 ((4, "DST__K_SET_LINUM_L: %d\n", data));
 		  break;
 
 		case DST__K_SET_PC:
 		  _bfd_error_handler
 		    (_("%s not implemented"), "DST__K_SET_PC");
-		  cmd_length = 2;
 		  break;
 
 		case DST__K_SET_PC_W:
 		  _bfd_error_handler
 		    (_("%s not implemented"), "DST__K_SET_PC_W");
-		  cmd_length = 3;
 		  break;
 
 		case DST__K_SET_PC_L:
 		  _bfd_error_handler
 		    (_("%s not implemented"), "DST__K_SET_PC_L");
-		  cmd_length = 5;
 		  break;
 
 		case DST__K_SET_STMTNUM:
 		  _bfd_error_handler
 		    (_("%s not implemented"), "DST__K_SET_STMTNUM");
-		  cmd_length = 2;
 		  break;
 
 		case DST__K_TERM:
 		  data = pcl_ptr[DST_S_B_PCLINE_UNSBYTE];
 		  curr_pc += data;
-		  cmd_length = 2;
 		  vms_debug2 ((4, "DST__K_TERM: %d\n", data));
 		  break;
 
 		case DST__K_TERM_W:
 		  data = bfd_getl16 (pcl_ptr + DST_S_W_PCLINE_UNSWORD);
 		  curr_pc += data;
-		  cmd_length = 3;
 		  vms_debug2 ((4, "DST__K_TERM_W: %d\n", data));
 		  break;
 
 		case DST__K_TERM_L:
 		  data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG);
 		  curr_pc += data;
-		  cmd_length = 5;
 		  vms_debug2 ((4, "DST__K_TERM_L: %d\n", data));
 		  break;
 
 		case DST__K_SET_ABS_PC:
 		  data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG);
 		  curr_pc = data;
-		  cmd_length = 5;
 		  vms_debug2 ((4, "DST__K_SET_ABS_PC: 0x%x\n", data));
 		  break;
 
@@ -4544,15 +4882,11 @@ parse_module (bfd *abfd, struct module *
 		    {
 		      curr_pc -= cmd;
 		      curr_linenum += 1;
-		      cmd_length = 1;
 		      vms_debug2 ((4, "bump pc to 0x%lx and line to %d\n",
 				   (unsigned long)curr_pc, curr_linenum));
 		    }
 		  else
-		    {
-		      _bfd_error_handler (_("unknown line command %d"), cmd);
-		      cmd_length = 2;
-		    }
+		    _bfd_error_handler (_("unknown line command %d"), cmd);
 		  break;
 		}
 
@@ -4607,6 +4941,7 @@ parse_module (bfd *abfd, struct module *
      because parsing can be either performed at module creation
      or deferred until debug info is consumed.  */
   SET_MODULE_PARSED (module);
+  return true;
 }
 
 /* Build the list of modules for the specified BFD.  */
@@ -4624,30 +4959,26 @@ build_module_list (bfd *abfd)
 	 since we can compute the start address and the end address
 	 of every module from the section contents.  */
       bfd_size_type size = bfd_section_size (dmt);
-      unsigned char *ptr, *end;
+      unsigned char *buf, *ptr, *end;
 
-      ptr = (unsigned char *) bfd_alloc (abfd, size);
-      if (! ptr)
-	return NULL;
-
-      if (! bfd_get_section_contents (abfd, dmt, ptr, 0, size))
+      if (! bfd_malloc_and_get_section (abfd, dmt, &buf))
 	return NULL;
 
       vms_debug2 ((2, "DMT\n"));
 
+      ptr = buf;
       end = ptr + size;
-
-      while (ptr < end)
+      while (end - ptr >= DBG_S_C_DMT_HEADER_SIZE)
 	{
 	  /* Each header declares a module with its start offset and size
 	     of debug info in the DST section, as well as the count of
 	     program sections (i.e. address spans) it contains.  */
-	  int modbeg = bfd_getl32 (ptr + DBG_S_L_DMT_MODBEG);
-	  int msize = bfd_getl32 (ptr + DBG_S_L_DST_SIZE);
+	  unsigned int modbeg = bfd_getl32 (ptr + DBG_S_L_DMT_MODBEG);
+	  unsigned int msize = bfd_getl32 (ptr + DBG_S_L_DST_SIZE);
 	  int count = bfd_getl16 (ptr + DBG_S_W_DMT_PSECT_COUNT);
 	  ptr += DBG_S_C_DMT_HEADER_SIZE;
 
-	  vms_debug2 ((3, "module: modbeg = %d, size = %d, count = %d\n",
+	  vms_debug2 ((3, "module: modbeg = %u, size = %u, count = %d\n",
 		       modbeg, msize, count));
 
 	  /* We create a 'module' structure for each program section since
@@ -4655,10 +4986,10 @@ build_module_list (bfd *abfd)
 	     As a consequence, the actual debug info in the DST section is
 	     shared and can be parsed multiple times; that doesn't seem to
 	     cause problems in practice.  */
-	  while (count-- > 0)
+	  while (count-- > 0 && end - ptr >= DBG_S_C_DMT_PSECT_SIZE)
 	    {
-	      int start = bfd_getl32 (ptr + DBG_S_L_DMT_PSECT_START);
-	      int length = bfd_getl32 (ptr + DBG_S_L_DMT_PSECT_LENGTH);
+	      unsigned int start = bfd_getl32 (ptr + DBG_S_L_DMT_PSECT_START);
+	      unsigned int length = bfd_getl32 (ptr + DBG_S_L_DMT_PSECT_LENGTH);
 	      module = new_module (abfd);
 	      module->modbeg = modbeg;
 	      module->size = msize;
@@ -4668,10 +4999,11 @@ build_module_list (bfd *abfd)
 	      list = module;
 	      ptr += DBG_S_C_DMT_PSECT_SIZE;
 
-	      vms_debug2 ((4, "section: start = 0x%x, length = %d\n",
+	      vms_debug2 ((4, "section: start = 0x%x, length = %u\n",
 			   start, length));
 	    }
 	}
+      free (buf);
     }
   else
     {
@@ -4684,7 +5016,9 @@ build_module_list (bfd *abfd)
 	return NULL;
 
       module = new_module (abfd);
-      parse_module (abfd, module, PRIV (dst_section)->contents, -1);
+      if (!parse_module (abfd, module, PRIV (dst_section)->contents,
+			 PRIV (dst_section)->size))
+	return NULL;
       list = module;
     }
 
@@ -4694,7 +5028,7 @@ build_module_list (bfd *abfd)
 /* Calculate and return the name of the source file and the line nearest
    to the wanted location in the specified module.  */
 
-static bfd_boolean
+static bool
 module_find_nearest_line (bfd *abfd, struct module *module, bfd_vma addr,
 			  const char **file, const char **func,
 			  unsigned int *line)
@@ -4702,24 +5036,26 @@ module_find_nearest_line (bfd *abfd, str
   struct funcinfo *funcinfo;
   struct lineinfo *lineinfo;
   struct srecinfo *srecinfo;
-  bfd_boolean ret = FALSE;
+  bool ret = false;
 
   /* Parse this module if that was not done at module creation.  */
   if (! IS_MODULE_PARSED (module))
     {
       unsigned int size = module->size;
       unsigned int modbeg = PRIV (dst_section)->filepos + module->modbeg;
-      unsigned char *buffer = (unsigned char *) bfd_malloc (module->size);
+      unsigned char *buffer;
 
       if (bfd_seek (abfd, modbeg, SEEK_SET) != 0
-	  || bfd_bread (buffer, size, abfd) != size)
+	  || (buffer = _bfd_malloc_and_read (abfd, size, size)) == NULL)
 	{
 	  bfd_set_error (bfd_error_no_debug_section);
-	  return FALSE;
+	  return false;
 	}
 
-      parse_module (abfd, module, buffer, size);
+      ret = parse_module (abfd, module, buffer, size);
       free (buffer);
+      if (!ret)
+	return ret;
     }
 
   /* Find out the function (if any) that contains the address.  */
@@ -4727,7 +5063,7 @@ module_find_nearest_line (bfd *abfd, str
     if (addr >= funcinfo->low && addr <= funcinfo->high)
       {
 	*func = funcinfo->name;
-	ret = TRUE;
+	ret = true;
 	break;
       }
 
@@ -4748,7 +5084,7 @@ module_find_nearest_line (bfd *abfd, str
 		  *file = module->name;
 		  *line = lineinfo->line;
 		}
-	      return TRUE;
+	      return true;
 	    }
 
 	break;
@@ -4761,7 +5097,7 @@ module_find_nearest_line (bfd *abfd, str
    return the name of the source file and the line nearest to the wanted
    location.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_find_nearest_line (bfd *abfd,
 			    asymbol **symbols ATTRIBUTE_UNUSED,
 			    asection *section,
@@ -4784,27 +5120,27 @@ _bfd_vms_find_nearest_line (bfd *abfd,
 
   /* We can't do anything if there is no DST (debug symbol table).  */
   if (PRIV (dst_section) == NULL)
-    return FALSE;
+    return false;
 
   /* Create the module list - if not already done.  */
   if (PRIV (modules) == NULL)
     {
       PRIV (modules) = build_module_list (abfd);
       if (PRIV (modules) == NULL)
-	return FALSE;
+	return false;
     }
 
   for (module = PRIV (modules); module; module = module->next)
     if (addr >= module->low && addr <= module->high)
       return module_find_nearest_line (abfd, module, addr, file, func, line);
 
-  return FALSE;
+  return false;
 }
 
 /* Canonicalizations.  */
 /* Set name, value, section and flags of SYM from E.  */
 
-static bfd_boolean
+static bool
 alpha_vms_convert_symbol (bfd *abfd, struct vms_symbol_entry *e, asymbol *sym)
 {
   flagword flags;
@@ -4862,14 +5198,14 @@ alpha_vms_convert_symbol (bfd *abfd, str
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   sym->name = name;
   sym->section = sec;
   sym->flags = flags;
   sym->value = value;
-  return TRUE;
+  return true;
 }
 
 
@@ -4934,7 +5270,7 @@ alpha_vms_canonicalize_symtab (bfd *abfd
 
 /* Read and convert relocations from ETIR.  We do it once for all sections.  */
 
-static bfd_boolean
+static bool
 alpha_vms_slurp_relocs (bfd *abfd)
 {
   int cur_psect = -1;
@@ -4942,15 +5278,14 @@ alpha_vms_slurp_relocs (bfd *abfd)
   vms_debug2 ((3, "alpha_vms_slurp_relocs\n"));
 
   /* We slurp relocs only once, for all sections.  */
-  if (PRIV (reloc_done))
-      return TRUE;
-  PRIV (reloc_done) = TRUE;
+  if (PRIV (reloc_done) != 0)
+    return PRIV (reloc_done) == 1;
 
   if (alpha_vms_canonicalize_symtab (abfd, NULL) < 0)
-    return FALSE;
+    goto fail;
 
   if (bfd_seek (abfd, 0, SEEK_SET) != 0)
-    return FALSE;
+    goto fail;
 
   while (1)
     {
@@ -4971,6 +5306,8 @@ alpha_vms_slurp_relocs (bfd *abfd)
 
       /* Skip non-ETIR records.  */
       type = _bfd_vms_get_object_record (abfd);
+      if (type < 0)
+	goto fail;
       if (type == EOBJ__C_EEOM)
 	break;
       if (type != EOBJ__C_ETIR)
@@ -4979,12 +5316,18 @@ alpha_vms_slurp_relocs (bfd *abfd)
       begin = PRIV (recrd.rec) + 4;
       end = PRIV (recrd.rec) + PRIV (recrd.rec_size);
 
-      for (ptr = begin; ptr < end; ptr += length)
+      for (ptr = begin; ptr + 4 <= end; ptr += length)
 	{
 	  int cmd;
 
 	  cmd = bfd_getl16 (ptr);
 	  length = bfd_getl16 (ptr + 2);
+	  if (length < 4 || length > end - ptr)
+	    {
+	    bad_rec:
+	      _bfd_error_handler (_("corrupt reloc record"));
+	      goto fail;
+	    }
 
 	  cur_address = vaddr;
 
@@ -5000,6 +5343,8 @@ alpha_vms_slurp_relocs (bfd *abfd)
 	      continue;
 
 	    case ETIR__C_STA_PQ: /* ALPHA_R_REF{LONG|QUAD}, others part 1 */
+	      if (length < 16)
+		goto bad_rec;
 	      cur_psidx = bfd_getl32 (ptr + 4);
 	      cur_addend = bfd_getl64 (ptr + 8);
 	      prev_cmd = cmd;
@@ -5012,7 +5357,7 @@ alpha_vms_slurp_relocs (bfd *abfd)
 		    /* xgettext:c-format */
 		    (_("unknown reloc %s + %s"), _bfd_vms_etir_name (prev_cmd),
 		     _bfd_vms_etir_name (cmd));
-		  return FALSE;
+		  goto fail;
 		}
 	      cur_psect = cur_psidx;
 	      vaddr = cur_addend;
@@ -5030,9 +5375,11 @@ alpha_vms_slurp_relocs (bfd *abfd)
 			/* xgettext:c-format */
 			(_("unknown reloc %s + %s"), _bfd_vms_etir_name (cmd),
 			 _bfd_vms_etir_name (ETIR__C_STA_LW));
-		      return FALSE;
+		      goto fail;
 		    }
 		}
+	      if (length < 8)
+		goto bad_rec;
 	      cur_addend = bfd_getl32 (ptr + 4);
 	      prev_cmd = cmd;
 	      continue;
@@ -5045,8 +5392,10 @@ alpha_vms_slurp_relocs (bfd *abfd)
 		    /* xgettext:c-format */
 		    (_("unknown reloc %s + %s"), _bfd_vms_etir_name (cmd),
 		     _bfd_vms_etir_name (ETIR__C_STA_QW));
-		  return FALSE;
+		  goto fail;
 		}
+	      if (length < 12)
+		goto bad_rec;
 	      cur_addend = bfd_getl64 (ptr + 4);
 	      prev_cmd = cmd;
 	      continue;
@@ -5062,7 +5411,7 @@ alpha_vms_slurp_relocs (bfd *abfd)
 		  _bfd_error_handler (_("unknown reloc %s + %s"),
 				      _bfd_vms_etir_name (prev_cmd),
 				      _bfd_vms_etir_name (ETIR__C_STO_LW));
-		  return FALSE;
+		  goto fail;
 		}
 	      reloc_code = BFD_RELOC_32;
 	      break;
@@ -5075,7 +5424,7 @@ alpha_vms_slurp_relocs (bfd *abfd)
 		  _bfd_error_handler (_("unknown reloc %s + %s"),
 				      _bfd_vms_etir_name (prev_cmd),
 				      _bfd_vms_etir_name (ETIR__C_STO_QW));
-		  return FALSE;
+		  goto fail;
 		}
 	      reloc_code = BFD_RELOC_64;
 	      break;
@@ -5087,7 +5436,7 @@ alpha_vms_slurp_relocs (bfd *abfd)
 		  _bfd_error_handler (_("unknown reloc %s + %s"),
 				      _bfd_vms_etir_name (prev_cmd),
 				      _bfd_vms_etir_name (ETIR__C_STO_OFF));
-		  return FALSE;
+		  goto fail;
 		}
 	      reloc_code = BFD_RELOC_64;
 	      break;
@@ -5100,7 +5449,7 @@ alpha_vms_slurp_relocs (bfd *abfd)
 		  _bfd_error_handler (_("unknown reloc %s + %s"),
 				      _bfd_vms_etir_name (prev_cmd),
 				      _bfd_vms_etir_name (ETIR__C_OPR_ADD));
-		  return FALSE;
+		  goto fail;
 		}
 	      prev_cmd = ETIR__C_OPR_ADD;
 	      continue;
@@ -5142,19 +5491,23 @@ alpha_vms_slurp_relocs (bfd *abfd)
 	      goto call_reloc;
 
 	    call_reloc:
+	      if (length < 36)
+		goto bad_rec;
 	      cur_sym = ptr + 4 + 32;
 	      cur_address = bfd_getl64 (ptr + 4 + 8);
 	      cur_addend = bfd_getl64 (ptr + 4 + 24);
 	      break;
 
 	    case ETIR__C_STO_IMM:
+	      if (length < 8)
+		goto bad_rec;
 	      vaddr += bfd_getl32 (ptr + 4);
 	      continue;
 
 	    default:
 	      _bfd_error_handler (_("unknown reloc %s"),
 				  _bfd_vms_etir_name (cmd));
-	      return FALSE;
+	      goto fail;
 	    }
 
 	  {
@@ -5167,16 +5520,16 @@ alpha_vms_slurp_relocs (bfd *abfd)
 	    if (cur_psect < 0 || cur_psect > (int)PRIV (section_count))
 	      {
 		_bfd_error_handler (_("invalid section index in ETIR"));
-		return FALSE;
+		goto fail;
 	      }
 
 	    if (PRIV (sections) == NULL)
-	      return FALSE;
+	      goto fail;
 	    sec = PRIV (sections)[cur_psect];
 	    if (sec == bfd_abs_section_ptr)
 	      {
 		_bfd_error_handler (_("relocation for non-REL psect"));
-		return FALSE;
+		goto fail;
 	      }
 
 	    vms_sec = vms_section_data (sec);
@@ -5193,8 +5546,10 @@ alpha_vms_slurp_relocs (bfd *abfd)
 		else
 		  {
 		    vms_sec->reloc_max *= 2;
-		    sec->relocation = bfd_realloc
+		    sec->relocation = bfd_realloc_or_free
 		      (sec->relocation, vms_sec->reloc_max * sizeof (arelent));
+		    if (sec->relocation == NULL)
+		      goto fail;
 		  }
 	      }
 	    reloc = &sec->relocation[sec->reloc_count];
@@ -5205,12 +5560,16 @@ alpha_vms_slurp_relocs (bfd *abfd)
 	    if (cur_sym != NULL)
 	      {
 		unsigned int j;
-		unsigned int symlen = *cur_sym;
+		int symlen;
 		asymbol **sym;
 
 		/* Linear search.  */
+		if (end - cur_sym < 1)
+		  goto bad_rec;
 		symlen = *cur_sym;
 		cur_sym++;
+		if (end - cur_sym < symlen)
+		  goto bad_rec;
 		sym = NULL;
 
 		for (j = 0; j < PRIV (gsd_sym_count); j++)
@@ -5232,7 +5591,7 @@ alpha_vms_slurp_relocs (bfd *abfd)
 	    else if (cur_psidx >= 0)
 	      {
 		if (PRIV (sections) == NULL || cur_psidx >= (int) PRIV (section_count))
-		  return FALSE;
+		  goto fail;
 		reloc->sym_ptr_ptr =
 		  PRIV (sections)[cur_psidx]->symbol_ptr_ptr;
 	      }
@@ -5255,9 +5614,13 @@ alpha_vms_slurp_relocs (bfd *abfd)
 	  cur_psidx = -1;
 	}
     }
-  vms_debug2 ((3, "alpha_vms_slurp_relocs: result = TRUE\n"));
-
-  return TRUE;
+  vms_debug2 ((3, "alpha_vms_slurp_relocs: result = true\n"));
+  PRIV (reloc_done) = 1;
+  return true;
+
+fail:
+  PRIV (reloc_done) = -1;
+  return false;
 }
 
 /* Return the number of bytes required to store the relocation
@@ -5266,9 +5629,10 @@ alpha_vms_slurp_relocs (bfd *abfd)
 static long
 alpha_vms_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED, asection *section)
 {
-  alpha_vms_slurp_relocs (abfd);
+  if (!alpha_vms_slurp_relocs (abfd))
+    return -1;
 
-  return (section->reloc_count + 1) * sizeof (arelent *);
+  return (section->reloc_count + 1L) * sizeof (arelent *);
 }
 
 /* Convert relocations from VMS (external) form into BFD internal
@@ -5335,276 +5699,276 @@ static reloc_howto_type alpha_howto_tabl
 {
   HOWTO (ALPHA_R_IGNORE,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 0,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 1,			/* Size.  */
 	 8,			/* Bitsize.  */
-	 TRUE,			/* PC relative.  */
+	 true,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "IGNORE",		/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0,			/* Source mask */
 	 0,			/* Dest mask.  */
-	 TRUE),			/* PC rel offset.  */
+	 true),			/* PC rel offset.  */
 
   /* A 64 bit reference to a symbol.  */
   HOWTO (ALPHA_R_REFQUAD,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 4,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 8,			/* Size.  */
 	 64,			/* Bitsize.  */
-	 FALSE,			/* PC relative.  */
+	 false,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_bitfield, /* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "REFQUAD",		/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 MINUS_ONE,		/* Source mask.  */
 	 MINUS_ONE,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* A 21 bit branch.  The native assembler generates these for
      branches within the text segment, and also fills in the PC
      relative offset in the instruction.  */
   HOWTO (ALPHA_R_BRADDR,	/* Type.  */
 	 2,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 21,			/* Bitsize.  */
-	 TRUE,			/* PC relative.  */
+	 true,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "BRADDR",		/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0x1fffff,		/* Source mask.  */
 	 0x1fffff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* A hint for a jump to a register.  */
   HOWTO (ALPHA_R_HINT,		/* Type.  */
 	 2,			/* Rightshift.  */
-	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* Size.  */
 	 14,			/* Bitsize.  */
-	 TRUE,			/* PC relative.  */
+	 true,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "HINT",		/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0x3fff,		/* Source mask.  */
 	 0x3fff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* 16 bit PC relative offset.  */
   HOWTO (ALPHA_R_SREL16,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 2,			/* Size.  */
 	 16,			/* Bitsize.  */
-	 TRUE,			/* PC relative.  */
+	 true,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "SREL16",		/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xffff,		/* Source mask.  */
 	 0xffff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* 32 bit PC relative offset.  */
   HOWTO (ALPHA_R_SREL32,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 TRUE,			/* PC relative.  */
+	 true,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "SREL32",		/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xffffffff,		/* Source mask.  */
 	 0xffffffff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* A 64 bit PC relative offset.  */
   HOWTO (ALPHA_R_SREL64,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 4,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 8,			/* Size.  */
 	 64,			/* Bitsize.  */
-	 TRUE,			/* PC relative.  */
+	 true,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed, /* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "SREL64",		/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 MINUS_ONE,		/* Source mask.  */
 	 MINUS_ONE,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* Push a value on the reloc evaluation stack.  */
   HOWTO (ALPHA_R_OP_PUSH,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 0,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC relative.  */
+	 false,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "OP_PUSH",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Source mask.  */
 	 0,			/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* Store the value from the stack at the given address.  Store it in
      a bitfield of size r_size starting at bit position r_offset.  */
   HOWTO (ALPHA_R_OP_STORE,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 4,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 8,			/* Size.  */
 	 64,			/* Bitsize.  */
-	 FALSE,			/* PC relative.  */
+	 false,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "OP_STORE",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Source mask.  */
 	 MINUS_ONE,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* Subtract the reloc address from the value on the top of the
      relocation stack.  */
   HOWTO (ALPHA_R_OP_PSUB,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 0,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC relative.  */
+	 false,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "OP_PSUB",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Source mask.  */
 	 0,			/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* Shift the value on the top of the relocation stack right by the
      given value.  */
   HOWTO (ALPHA_R_OP_PRSHIFT,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 0,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC relative.  */
+	 false,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "OP_PRSHIFT",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Source mask.  */
 	 0,			/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* Hack. Linkage is done by linker.  */
   HOWTO (ALPHA_R_LINKAGE,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 0,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC relative.  */
+	 false,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "LINKAGE",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Source mask.  */
 	 0,			/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* A 32 bit reference to a symbol.  */
   HOWTO (ALPHA_R_REFLONG,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 4,			/* Size.  */
 	 32,			/* Bitsize.  */
-	 FALSE,			/* PC relative.  */
+	 false,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_bitfield, /* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "REFLONG",		/* Name.  */
-	 TRUE,			/* Partial_inplace.  */
+	 true,			/* Partial_inplace.  */
 	 0xffffffff,		/* Source mask.  */
 	 0xffffffff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   /* A 64 bit reference to a procedure, written as 32 bit value.  */
   HOWTO (ALPHA_R_CODEADDR,	/* Type.  */
 	 0,			/* Rightshift.  */
-	 4,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 8,			/* Size.  */
 	 64,			/* Bitsize.  */
-	 FALSE,			/* PC relative.  */
+	 false,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_signed,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "CODEADDR",		/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffffffff,		/* Source mask.  */
 	 0xffffffff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   HOWTO (ALPHA_R_NOP,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 3,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
 	 /* The following value must match that of ALPHA_R_BSR/ALPHA_R_BOH
 	    because the calculations for the 3 relocations are the same.
 	    See B.4.5.2 of the OpenVMS Linker Utility Manual.  */
-	 TRUE,			/* PC relative.  */
+	 true,			/* PC relative.  */
 	 0,			/* Bitpos.   */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "NOP",			/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffffffff,		/* Source mask.  */
 	 0xffffffff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   HOWTO (ALPHA_R_BSR,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 3,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 TRUE,			/* PC relative.  */
+	 true,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "BSR",			/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffffffff,		/* Source mask.  */
 	 0xffffffff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   HOWTO (ALPHA_R_LDA,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 3,			/* Size (0 = byte, 1 = short, 2 = long).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC relative.  */
+	 false,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "LDA",			/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffffffff,		/* Source mask.  */
 	 0xffffffff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 
   HOWTO (ALPHA_R_BOH,		/* Type.  */
 	 0,			/* Rightshift.  */
-	 3,			/* Size (0 = byte, 1 = short, 2 = long, 3 = nil).  */
+	 0,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 TRUE,			/* PC relative.  */
+	 true,			/* PC relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 reloc_nil,		/* Special_function.  */
 	 "BOH",			/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0xffffffff,		/* Source mask.  */
 	 0xffffffff,		/* Dest mask.  */
-	 FALSE),		/* PC rel offset.  */
+	 false),		/* PC rel offset.  */
 };
 
 /* Return a pointer to a howto structure which, when invoked, will perform
@@ -5712,7 +6076,7 @@ alpha_vms_get_synthetic_symtab (bfd *abf
       l = strlen (name);
       sname = bfd_alloc (abfd, l + 5);
       if (sname == NULL)
-	return FALSE;
+	return false;
       memcpy (sname, name, l);
       memcpy (sname + l, "..en", 5);
 
@@ -5767,9 +6131,9 @@ evax_bfd_print_emh (FILE *file, unsigned
     case EMH__C_MHD:
       {
 	struct vms_emh_mhd *mhd = (struct vms_emh_mhd *) rec;
-	const char * name;
-	const char * nextname;
-	const char * maxname;
+	unsigned char *name;
+	unsigned char *nextname;
+	unsigned char *maxname;
 
 	/* PR 21840: Check for invalid lengths.  */
 	if (rec_len < sizeof (* mhd))
@@ -5781,8 +6145,8 @@ evax_bfd_print_emh (FILE *file, unsigned
 	fprintf (file, _("   structure level: %u\n"), mhd->strlvl);
 	fprintf (file, _("   max record size: %u\n"),
 		 (unsigned) bfd_getl32 (mhd->recsiz));
-	name = (char *)(mhd + 1);
-	maxname = (char *) rec + rec_len;
+	name = (unsigned char *) (mhd + 1);
+	maxname = (unsigned char *) rec + rec_len;
 	if (name > maxname - 2)
 	  {
 	    fprintf (file, _("   Error: The module name is missing\n"));
@@ -5926,16 +6290,18 @@ static void
 evax_bfd_print_egsd (FILE *file, unsigned char *rec, unsigned int rec_len)
 {
   unsigned int off = sizeof (struct vms_egsd);
-  unsigned int n;
+  unsigned int n = 0;
 
   fprintf (file, _("  EGSD (len=%u):\n"), rec_len);
+  if (rec_len < sizeof (struct vms_egsd) + sizeof (struct vms_egsd_entry))
+    return;
 
-  n = 0;
-  for (off = sizeof (struct vms_egsd); off < rec_len; )
+  while (off <= rec_len - sizeof (struct vms_egsd_entry))
     {
       struct vms_egsd_entry *e = (struct vms_egsd_entry *)(rec + off);
       unsigned int type;
       unsigned int len;
+      unsigned int rest;
 
       type = (unsigned)bfd_getl16 (e->gsdtyp);
       len = (unsigned)bfd_getl16 (e->gsdsiz);
@@ -5945,174 +6311,212 @@ evax_bfd_print_egsd (FILE *file, unsigne
 	       n, type, len);
       n++;
 
-      if (off + len > rec_len || off + len < off)
+      if (len < sizeof (struct vms_egsd_entry) || len > rec_len - off)
 	{
-	  fprintf (file, _("   Error: length larger than remaining space in record\n"));
+	  fprintf (file, _("   Erroneous length\n"));
 	  return;
 	}
 
       switch (type)
 	{
 	case EGSD__C_PSC:
-	  {
-	    struct vms_egps *egps = (struct vms_egps *)e;
-	    unsigned int flags = bfd_getl16 (egps->flags);
-	    unsigned int l;
-
-	    fprintf (file, _("PSC - Program section definition\n"));
-	    fprintf (file, _("   alignment  : 2**%u\n"), egps->align);
-	    fprintf (file, _("   flags      : 0x%04x"), flags);
-	    evax_bfd_print_egsd_flags (file, flags);
-	    fputc ('\n', file);
-	    l = bfd_getl32 (egps->alloc);
-	    fprintf (file, _("   alloc (len): %u (0x%08x)\n"), l, l);
-	    fprintf (file, _("   name       : %.*s\n"),
-		     egps->namlng, egps->name);
-	  }
+	  if (len >= offsetof (struct vms_egps, name))
+	    {
+	      struct vms_egps *egps = (struct vms_egps *) e;
+	      unsigned int flags = bfd_getl16 (egps->flags);
+	      unsigned int l;
+
+	      fprintf (file, _("PSC - Program section definition\n"));
+	      fprintf (file, _("   alignment  : 2**%u\n"), egps->align);
+	      fprintf (file, _("   flags      : 0x%04x"), flags);
+	      evax_bfd_print_egsd_flags (file, flags);
+	      fputc ('\n', file);
+	      l = bfd_getl32 (egps->alloc);
+	      fprintf (file, _("   alloc (len): %u (0x%08x)\n"), l, l);
+	      rest = len - offsetof (struct vms_egps, name);
+	      fprintf (file, _("   name       : %.*s\n"),
+		       egps->namlng > rest ? rest : egps->namlng,
+		       egps->name);
+	    }
 	  break;
 	case EGSD__C_SPSC:
-	  {
-	    struct vms_esgps *esgps = (struct vms_esgps *)e;
-	    unsigned int flags = bfd_getl16 (esgps->flags);
-	    unsigned int l;
-
-	    fprintf (file, _("SPSC - Shared Image Program section def\n"));
-	    fprintf (file, _("   alignment  : 2**%u\n"), esgps->align);
-	    fprintf (file, _("   flags      : 0x%04x"), flags);
-	    evax_bfd_print_egsd_flags (file, flags);
-	    fputc ('\n', file);
-	    l = bfd_getl32 (esgps->alloc);
-	    fprintf (file, _("   alloc (len)   : %u (0x%08x)\n"), l, l);
-	    fprintf (file, _("   image offset  : 0x%08x\n"),
-		     (unsigned int)bfd_getl32 (esgps->base));
-	    fprintf (file, _("   symvec offset : 0x%08x\n"),
-		     (unsigned int)bfd_getl32 (esgps->value));
-	    fprintf (file, _("   name          : %.*s\n"),
-		     esgps->namlng, esgps->name);
-	  }
+	  if (len >= offsetof (struct vms_esgps, name))
+	    {
+	      struct vms_esgps *esgps = (struct vms_esgps *) e;
+	      unsigned int flags = bfd_getl16 (esgps->flags);
+	      unsigned int l;
+
+	      fprintf (file, _("SPSC - Shared Image Program section def\n"));
+	      fprintf (file, _("   alignment  : 2**%u\n"), esgps->align);
+	      fprintf (file, _("   flags      : 0x%04x"), flags);
+	      evax_bfd_print_egsd_flags (file, flags);
+	      fputc ('\n', file);
+	      l = bfd_getl32 (esgps->alloc);
+	      fprintf (file, _("   alloc (len)   : %u (0x%08x)\n"), l, l);
+	      fprintf (file, _("   image offset  : 0x%08x\n"),
+		       (unsigned int) bfd_getl32 (esgps->base));
+	      fprintf (file, _("   symvec offset : 0x%08x\n"),
+		       (unsigned int) bfd_getl32 (esgps->value));
+	      rest = len - offsetof (struct vms_esgps, name);
+	      fprintf (file, _("   name          : %.*s\n"),
+		       esgps->namlng > rest ? rest : esgps->namlng,
+		       esgps->name);
+	    }
 	  break;
 	case EGSD__C_SYM:
-	  {
-	    struct vms_egsy *egsy = (struct vms_egsy *)e;
-	    unsigned int flags = bfd_getl16 (egsy->flags);
+	  if (len >= sizeof (struct vms_egsy))
+	    {
+	      struct vms_egsy *egsy = (struct vms_egsy *) e;
+	      unsigned int flags = bfd_getl16 (egsy->flags);
 
-	    if (flags & EGSY__V_DEF)
-	      {
-		struct vms_esdf *esdf = (struct vms_esdf *)e;
+	      if ((flags & EGSY__V_DEF) != 0
+		  && len >= offsetof (struct vms_esdf, name))
+		{
+		  struct vms_esdf *esdf = (struct vms_esdf *) e;
 
-		fprintf (file, _("SYM - Global symbol definition\n"));
-		fprintf (file, _("   flags: 0x%04x"), flags);
-		exav_bfd_print_egsy_flags (flags, file);
-		fputc ('\n', file);
-		fprintf (file, _("   psect offset: 0x%08x\n"),
-			 (unsigned)bfd_getl32 (esdf->value));
-		if (flags & EGSY__V_NORM)
-		  {
-		    fprintf (file, _("   code address: 0x%08x\n"),
-			     (unsigned)bfd_getl32 (esdf->code_address));
-		    fprintf (file, _("   psect index for entry point : %u\n"),
-			     (unsigned)bfd_getl32 (esdf->ca_psindx));
-		  }
-		fprintf (file, _("   psect index : %u\n"),
-			 (unsigned)bfd_getl32 (esdf->psindx));
-		fprintf (file, _("   name        : %.*s\n"),
-			 esdf->namlng, esdf->name);
-	      }
-	    else
-	      {
-		struct vms_esrf *esrf = (struct vms_esrf *)e;
+		  fprintf (file, _("SYM - Global symbol definition\n"));
+		  fprintf (file, _("   flags: 0x%04x"), flags);
+		  exav_bfd_print_egsy_flags (flags, file);
+		  fputc ('\n', file);
+		  fprintf (file, _("   psect offset: 0x%08x\n"),
+			   (unsigned) bfd_getl32 (esdf->value));
+		  if (flags & EGSY__V_NORM)
+		    {
+		      fprintf (file, _("   code address: 0x%08x\n"),
+			       (unsigned) bfd_getl32 (esdf->code_address));
+		      fprintf (file, _("   psect index for entry point : %u\n"),
+			       (unsigned) bfd_getl32 (esdf->ca_psindx));
+		    }
+		  fprintf (file, _("   psect index : %u\n"),
+			   (unsigned) bfd_getl32 (esdf->psindx));
+		  rest = len - offsetof (struct vms_esdf, name);
+		  fprintf (file, _("   name        : %.*s\n"),
+			   esdf->namlng > rest ? rest : esdf->namlng,
+			   esdf->name);
+		}
+	      else if (len >= offsetof (struct vms_esrf, name))
+		{
+		  struct vms_esrf *esrf = (struct vms_esrf *)e;
 
-		fprintf (file, _("SYM - Global symbol reference\n"));
-		fprintf (file, _("   name       : %.*s\n"),
-			 esrf->namlng, esrf->name);
-	      }
-	  }
+		  fprintf (file, _("SYM - Global symbol reference\n"));
+		  rest = len - offsetof (struct vms_esrf, name);
+		  fprintf (file, _("   name       : %.*s\n"),
+			   esrf->namlng > rest ? rest : esrf->namlng,
+			   esrf->name);
+		}
+	    }
 	  break;
 	case EGSD__C_IDC:
-	  {
-	    struct vms_eidc *eidc = (struct vms_eidc *)e;
-	    unsigned int flags = bfd_getl32 (eidc->flags);
-	    unsigned char *p;
-
-	    fprintf (file, _("IDC - Ident Consistency check\n"));
-	    fprintf (file, _("   flags         : 0x%08x"), flags);
-	    if (flags & EIDC__V_BINIDENT)
-	      fputs (" BINDENT", file);
-	    fputc ('\n', file);
-	    fprintf (file, _("   id match      : %x\n"),
-		     (flags >> EIDC__V_IDMATCH_SH) & EIDC__V_IDMATCH_MASK);
-	    fprintf (file, _("   error severity: %x\n"),
-		     (flags >> EIDC__V_ERRSEV_SH) & EIDC__V_ERRSEV_MASK);
-	    p = eidc->name;
-	    fprintf (file, _("   entity name   : %.*s\n"), p[0], p + 1);
-	    p += 1 + p[0];
-	    fprintf (file, _("   object name   : %.*s\n"), p[0], p + 1);
-	    p += 1 + p[0];
-	    if (flags & EIDC__V_BINIDENT)
-	      fprintf (file, _("   binary ident  : 0x%08x\n"),
-		       (unsigned)bfd_getl32 (p + 1));
-	    else
-	      fprintf (file, _("   ascii ident   : %.*s\n"), p[0], p + 1);
-	  }
+	  if (len >= sizeof (struct vms_eidc))
+	    {
+	      struct vms_eidc *eidc = (struct vms_eidc *) e;
+	      unsigned int flags = bfd_getl32 (eidc->flags);
+	      unsigned char *p;
+
+	      fprintf (file, _("IDC - Ident Consistency check\n"));
+	      fprintf (file, _("   flags         : 0x%08x"), flags);
+	      if (flags & EIDC__V_BINIDENT)
+		fputs (" BINDENT", file);
+	      fputc ('\n', file);
+	      fprintf (file, _("   id match      : %x\n"),
+		       (flags >> EIDC__V_IDMATCH_SH) & EIDC__V_IDMATCH_MASK);
+	      fprintf (file, _("   error severity: %x\n"),
+		       (flags >> EIDC__V_ERRSEV_SH) & EIDC__V_ERRSEV_MASK);
+	      p = eidc->name;
+	      rest = len - (p - (unsigned char *) e);
+	      fprintf (file, _("   entity name   : %.*s\n"),
+		       p[0] > rest - 1 ? rest - 1 : p[0], p + 1);
+	      if (rest > 1u + p[0])
+		{
+		  rest -= 1 + p[0];
+		  p += 1 + p[0];
+		  fprintf (file, _("   object name   : %.*s\n"),
+			   p[0] > rest - 1 ? rest - 1 : p[0], p + 1);
+		  if (rest > 1u + p[0])
+		    {
+		      rest -= 1 + p[0];
+		      p += 1 + p[0];
+		      if (flags & EIDC__V_BINIDENT)
+			{
+			  if (rest >= 4)
+			    fprintf (file, _("   binary ident  : 0x%08x\n"),
+				     (unsigned) bfd_getl32 (p));
+			}
+		      else
+			fprintf (file, _("   ascii ident   : %.*s\n"),
+				 p[0] > rest - 1 ? rest - 1 : p[0], p + 1);
+		    }
+		}
+	    }
 	  break;
 	case EGSD__C_SYMG:
-	  {
-	    struct vms_egst *egst = (struct vms_egst *)e;
-	    unsigned int flags = bfd_getl16 (egst->header.flags);
+	  if (len >= offsetof (struct vms_egst, name))
+	    {
+	      struct vms_egst *egst = (struct vms_egst *) e;
+	      unsigned int flags = bfd_getl16 (egst->header.flags);
 
-	    fprintf (file, _("SYMG - Universal symbol definition\n"));
-	    fprintf (file, _("   flags: 0x%04x"), flags);
-	    exav_bfd_print_egsy_flags (flags, file);
-	    fputc ('\n', file);
-	    fprintf (file, _("   symbol vector offset: 0x%08x\n"),
-		     (unsigned)bfd_getl32 (egst->value));
-	    fprintf (file, _("   entry point: 0x%08x\n"),
-		     (unsigned)bfd_getl32 (egst->lp_1));
-	    fprintf (file, _("   proc descr : 0x%08x\n"),
-		     (unsigned)bfd_getl32 (egst->lp_2));
-	    fprintf (file, _("   psect index: %u\n"),
-		     (unsigned)bfd_getl32 (egst->psindx));
-	    fprintf (file, _("   name       : %.*s\n"),
-		     egst->namlng, egst->name);
-	  }
+	      fprintf (file, _("SYMG - Universal symbol definition\n"));
+	      fprintf (file, _("   flags: 0x%04x"), flags);
+	      exav_bfd_print_egsy_flags (flags, file);
+	      fputc ('\n', file);
+	      fprintf (file, _("   symbol vector offset: 0x%08x\n"),
+		       (unsigned) bfd_getl32 (egst->value));
+	      fprintf (file, _("   entry point: 0x%08x\n"),
+		       (unsigned) bfd_getl32 (egst->lp_1));
+	      fprintf (file, _("   proc descr : 0x%08x\n"),
+		       (unsigned) bfd_getl32 (egst->lp_2));
+	      fprintf (file, _("   psect index: %u\n"),
+		       (unsigned) bfd_getl32 (egst->psindx));
+	      rest = len - offsetof (struct vms_egst, name);
+	      fprintf (file, _("   name       : %.*s\n"),
+		       egst->namlng > rest ? rest : egst->namlng,
+		       egst->name);
+	    }
 	  break;
 	case EGSD__C_SYMV:
-	  {
-	    struct vms_esdfv *esdfv = (struct vms_esdfv *)e;
-	    unsigned int flags = bfd_getl16 (esdfv->flags);
+	  if (len >= offsetof (struct vms_esdfv, name))
+	    {
+	      struct vms_esdfv *esdfv = (struct vms_esdfv *) e;
+	      unsigned int flags = bfd_getl16 (esdfv->flags);
 
-	    fprintf (file, _("SYMV - Vectored symbol definition\n"));
-	    fprintf (file, _("   flags: 0x%04x"), flags);
-	    exav_bfd_print_egsy_flags (flags, file);
-	    fputc ('\n', file);
-	    fprintf (file, _("   vector      : 0x%08x\n"),
-		     (unsigned)bfd_getl32 (esdfv->vector));
-	    fprintf (file, _("   psect offset: %u\n"),
-		     (unsigned)bfd_getl32 (esdfv->value));
-	    fprintf (file, _("   psect index : %u\n"),
-		     (unsigned)bfd_getl32 (esdfv->psindx));
-	    fprintf (file, _("   name        : %.*s\n"),
-		     esdfv->namlng, esdfv->name);
-	  }
+	      fprintf (file, _("SYMV - Vectored symbol definition\n"));
+	      fprintf (file, _("   flags: 0x%04x"), flags);
+	      exav_bfd_print_egsy_flags (flags, file);
+	      fputc ('\n', file);
+	      fprintf (file, _("   vector      : 0x%08x\n"),
+		       (unsigned) bfd_getl32 (esdfv->vector));
+	      fprintf (file, _("   psect offset: %u\n"),
+		       (unsigned) bfd_getl32 (esdfv->value));
+	      fprintf (file, _("   psect index : %u\n"),
+		       (unsigned) bfd_getl32 (esdfv->psindx));
+	      rest = len - offsetof (struct vms_esdfv, name);
+	      fprintf (file, _("   name        : %.*s\n"),
+		       esdfv->namlng > rest ? rest : esdfv->namlng,
+		       esdfv->name);
+	    }
 	  break;
 	case EGSD__C_SYMM:
-	  {
-	    struct vms_esdfm *esdfm = (struct vms_esdfm *)e;
-	    unsigned int flags = bfd_getl16 (esdfm->flags);
+	  if (len >= offsetof (struct vms_esdfm, name))
+	    {
+	      struct vms_esdfm *esdfm = (struct vms_esdfm *) e;
+	      unsigned int flags = bfd_getl16 (esdfm->flags);
 
-	    fprintf (file, _("SYMM - Global symbol definition with version\n"));
-	    fprintf (file, _("   flags: 0x%04x"), flags);
-	    exav_bfd_print_egsy_flags (flags, file);
-	    fputc ('\n', file);
-	    fprintf (file, _("   version mask: 0x%08x\n"),
-		     (unsigned)bfd_getl32 (esdfm->version_mask));
-	    fprintf (file, _("   psect offset: %u\n"),
-		     (unsigned)bfd_getl32 (esdfm->value));
-	    fprintf (file, _("   psect index : %u\n"),
-		     (unsigned)bfd_getl32 (esdfm->psindx));
-	    fprintf (file, _("   name        : %.*s\n"),
-		     esdfm->namlng, esdfm->name);
-	  }
+	      fprintf (file,
+		       _("SYMM - Global symbol definition with version\n"));
+	      fprintf (file, _("   flags: 0x%04x"), flags);
+	      exav_bfd_print_egsy_flags (flags, file);
+	      fputc ('\n', file);
+	      fprintf (file, _("   version mask: 0x%08x\n"),
+		       (unsigned)bfd_getl32 (esdfm->version_mask));
+	      fprintf (file, _("   psect offset: %u\n"),
+		       (unsigned)bfd_getl32 (esdfm->value));
+	      fprintf (file, _("   psect index : %u\n"),
+		       (unsigned)bfd_getl32 (esdfm->psindx));
+	      rest = len - offsetof (struct vms_esdfm, name);
+	      fprintf (file, _("   name        : %.*s\n"),
+		       esdfm->namlng > rest ? rest : esdfm->namlng,
+		       esdfm->name);
+	    }
 	  break;
 	default:
 	  fprintf (file, _("unhandled egsd entry type %u\n"), type);
@@ -6147,8 +6551,12 @@ evax_bfd_print_hex (FILE *file, const ch
 }
 
 static void
-evax_bfd_print_etir_stc_ir (FILE *file, const unsigned char *buf, int is_ps)
+evax_bfd_print_etir_stc_ir (FILE *file, const unsigned char *buf,
+			    unsigned int len, int is_ps)
 {
+  if (is_ps ? len < 44 : len < 33)
+    return;
+
   /* xgettext:c-format */
   fprintf (file, _("    linkage index: %u, replacement insn: 0x%08x\n"),
 	   (unsigned)bfd_getl32 (buf),
@@ -6170,62 +6578,71 @@ evax_bfd_print_etir_stc_ir (FILE *file,
 	     (unsigned)bfd_getl32 (buf + 40),
 	     (unsigned)bfd_getl32 (buf + 36));
   else
-    fprintf (file, _("    global name: %.*s\n"), buf[32], buf + 33);
+    fprintf (file, _("    global name: %.*s\n"),
+	     buf[32] > len - 33 ? len - 33 : buf[32],
+	     buf + 33);
 }
 
 static void
 evax_bfd_print_etir (FILE *file, const char *name,
 		     unsigned char *rec, unsigned int rec_len)
 {
-  unsigned int off = sizeof (struct vms_egsd);
-  unsigned int sec_len = 0;
+  unsigned int off = sizeof (struct vms_eobjrec);
 
   /* xgettext:c-format */
-  fprintf (file, _("  %s (len=%u+%u):\n"), name,
-	   (unsigned)(rec_len - sizeof (struct vms_eobjrec)),
-	   (unsigned)sizeof (struct vms_eobjrec));
+  fprintf (file, _("  %s (len=%u):\n"), name, (unsigned) rec_len);
+  if (rec_len < sizeof (struct vms_eobjrec) + sizeof (struct vms_etir))
+    return;
 
-  for (off = sizeof (struct vms_eobjrec); off < rec_len; )
+  while (off <= rec_len - sizeof (struct vms_etir))
     {
       struct vms_etir *etir = (struct vms_etir *)(rec + off);
       unsigned char *buf;
       unsigned int type;
       unsigned int size;
+      unsigned int rest;
 
       type = bfd_getl16 (etir->rectyp);
       size = bfd_getl16 (etir->size);
       buf = rec + off + sizeof (struct vms_etir);
 
-      if (off + size > rec_len || off + size < off)
+      if (size < sizeof (struct vms_etir) || size > rec_len - off)
 	{
-	  fprintf (file, _("   Error: length larger than remaining space in record\n"));
+	  fprintf (file, _("   Erroneous length\n"));
 	  return;
 	}
 
       /* xgettext:c-format */
-      fprintf (file, _("   (type: %3u, size: 4+%3u): "), type, size - 4);
+      fprintf (file, _("   (type: %3u, size: %3u): "), type, size);
+      rest = size - sizeof (struct vms_etir);
       switch (type)
 	{
 	case ETIR__C_STA_GBL:
-	  fprintf (file, _("STA_GBL (stack global) %.*s\n"),
-		   buf[0], buf + 1);
+	  if (rest >= 1)
+	    fprintf (file, _("STA_GBL (stack global) %.*s\n"),
+		     buf[0] > rest - 1 ? rest - 1 : buf[0], buf + 1);
 	  break;
 	case ETIR__C_STA_LW:
-	  fprintf (file, _("STA_LW (stack longword) 0x%08x\n"),
-		   (unsigned)bfd_getl32 (buf));
+	  fprintf (file, _("STA_LW (stack longword)"));
+	  if (rest >= 4)
+	    fprintf (file, " 0x%08x\n",
+		     (unsigned) bfd_getl32 (buf));
 	  break;
 	case ETIR__C_STA_QW:
-	  fprintf (file, _("STA_QW (stack quadword) 0x%08x %08x\n"),
-		   (unsigned)bfd_getl32 (buf + 4),
-		   (unsigned)bfd_getl32 (buf + 0));
+	  fprintf (file, _("STA_QW (stack quadword)"));
+	  if (rest >= 8)
+	    fprintf (file, " 0x%08x %08x\n",
+		     (unsigned) bfd_getl32 (buf + 4),
+		     (unsigned) bfd_getl32 (buf + 0));
 	  break;
 	case ETIR__C_STA_PQ:
 	  fprintf (file, _("STA_PQ (stack psect base + offset)\n"));
-	  /* xgettext:c-format */
-	  fprintf (file, _("    psect: %u, offset: 0x%08x %08x\n"),
-		   (unsigned)bfd_getl32 (buf + 0),
-		   (unsigned)bfd_getl32 (buf + 8),
-		   (unsigned)bfd_getl32 (buf + 4));
+	  if (rest >= 12)
+	    /* xgettext:c-format */
+	    fprintf (file, _("    psect: %u, offset: 0x%08x %08x\n"),
+		     (unsigned) bfd_getl32 (buf + 0),
+		     (unsigned) bfd_getl32 (buf + 8),
+		     (unsigned) bfd_getl32 (buf + 4));
 	  break;
 	case ETIR__C_STA_LI:
 	  fprintf (file, _("STA_LI (stack literal)\n"));
@@ -6250,22 +6667,26 @@ evax_bfd_print_etir (FILE *file, const c
 	  fprintf (file, _("STO_QW (store quadword)\n"));
 	  break;
 	case ETIR__C_STO_IMMR:
-	  {
-	    unsigned int len = bfd_getl32 (buf);
-	    fprintf (file,
-		     _("STO_IMMR (store immediate repeat) %u bytes\n"),
-		     len);
-	    evax_bfd_print_hex (file, "   ", buf + 4, len);
-	    sec_len += len;
-	  }
+	  if (rest >= 4)
+	    {
+	      unsigned int rpt = bfd_getl32 (buf);
+	      fprintf (file,
+		       _("STO_IMMR (store immediate repeat) %u bytes\n"),
+		       rpt);
+	      if (rpt > rest - 4)
+		rpt = rest - 4;
+	      evax_bfd_print_hex (file, "   ", buf + 4, rpt);
+	    }
 	  break;
 	case ETIR__C_STO_GBL:
-	  fprintf (file, _("STO_GBL (store global) %.*s\n"),
-		   buf[0], buf + 1);
+	  if (rest >= 1)
+	    fprintf (file, _("STO_GBL (store global) %.*s\n"),
+		     buf[0] > rest - 1 ? rest - 1 : buf[0], buf + 1);
 	  break;
 	case ETIR__C_STO_CA:
-	  fprintf (file, _("STO_CA (store code address) %.*s\n"),
-		   buf[0], buf + 1);
+	  if (rest >= 1)
+	    fprintf (file, _("STO_CA (store code address) %.*s\n"),
+		     buf[0] > rest - 1 ? rest - 1 : buf[0], buf + 1);
 	  break;
 	case ETIR__C_STO_RB:
 	  fprintf (file, _("STO_RB (store relative branch)\n"));
@@ -6277,18 +6698,21 @@ evax_bfd_print_etir (FILE *file, const c
 	  fprintf (file, _("STO_OFF (store offset to psect)\n"));
 	  break;
 	case ETIR__C_STO_IMM:
-	  {
-	    unsigned int len = bfd_getl32 (buf);
-	    fprintf (file,
-		     _("STO_IMM (store immediate) %u bytes\n"),
-		     len);
-	    evax_bfd_print_hex (file, "   ", buf + 4, len);
-	    sec_len += len;
-	  }
+	  if (rest >= 4)
+	    {
+	      unsigned int rpt = bfd_getl32 (buf);
+	      fprintf (file,
+		       _("STO_IMM (store immediate) %u bytes\n"),
+		       rpt);
+	      if (rpt > rest - 4)
+		rpt = rest - 4;
+	      evax_bfd_print_hex (file, "   ", buf + 4, rpt);
+	    }
 	  break;
 	case ETIR__C_STO_GBL_LW:
-	  fprintf (file, _("STO_GBL_LW (store global longword) %.*s\n"),
-		   buf[0], buf + 1);
+	  if (rest >= 1)
+	    fprintf (file, _("STO_GBL_LW (store global longword) %.*s\n"),
+		     buf[0] > rest - 1 ? rest - 1 : buf[0], buf + 1);
 	  break;
 	case ETIR__C_STO_LP_PSB:
 	  fprintf (file, _("STO_OFF (store LP with procedure signature)\n"));
@@ -6358,65 +6782,79 @@ evax_bfd_print_etir (FILE *file, const c
 	case ETIR__C_STC_LP_PSB:
 	  fprintf (file,
 		   _("STC_LP_PSB (store cond linkage pair + signature)\n"));
-	  /* xgettext:c-format */
-	  fprintf (file, _("   linkage index: %u, procedure: %.*s\n"),
-		   (unsigned)bfd_getl32 (buf), buf[4], buf + 5);
-	  buf += 4 + 1 + buf[4];
-	  fprintf (file, _("   signature: %.*s\n"), buf[0], buf + 1);
+	  if (rest >= 5)
+	    {
+	      /* xgettext:c-format */
+	      fprintf (file, _("   linkage index: %u, procedure: %.*s\n"),
+		       (unsigned) bfd_getl32 (buf),
+		       buf[4] > rest - 5 ? rest - 5 : buf[4], buf + 5);
+	      if (rest > 4 + 1u + buf[4])
+		{
+		  rest -= 4 + 1 + buf[4];
+		  buf += 4 + 1 + buf[4];
+		  fprintf (file, _("   signature: %.*s\n"),
+			   buf[0] > rest - 1 ? rest - 1: buf[0], buf + 1);
+		}
+	    }
 	  break;
 	case ETIR__C_STC_GBL:
 	  fprintf (file, _("STC_GBL (store cond global)\n"));
-	  /* xgettext:c-format */
-	  fprintf (file, _("   linkage index: %u, global: %.*s\n"),
-		   (unsigned)bfd_getl32 (buf), buf[4], buf + 5);
+	  if (rest >= 5)
+	    /* xgettext:c-format */
+	    fprintf (file, _("   linkage index: %u, global: %.*s\n"),
+		     (unsigned) bfd_getl32 (buf),
+		     buf[4] > rest - 5 ? rest - 5 : buf[4], buf + 5);
 	  break;
 	case ETIR__C_STC_GCA:
 	  fprintf (file, _("STC_GCA (store cond code address)\n"));
-	  /* xgettext:c-format */
-	  fprintf (file, _("   linkage index: %u, procedure name: %.*s\n"),
-		   (unsigned)bfd_getl32 (buf), buf[4], buf + 5);
+	  if (rest >= 5)
+	    /* xgettext:c-format */
+	    fprintf (file, _("   linkage index: %u, procedure name: %.*s\n"),
+		     (unsigned) bfd_getl32 (buf),
+		     buf[4] > rest - 5 ? rest - 5 : buf[4], buf + 5);
 	  break;
 	case ETIR__C_STC_PS:
 	  fprintf (file, _("STC_PS (store cond psect + offset)\n"));
-	  fprintf (file,
-		   /* xgettext:c-format */
-		   _("   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"),
-		   (unsigned)bfd_getl32 (buf),
-		   (unsigned)bfd_getl32 (buf + 4),
-		   (unsigned)bfd_getl32 (buf + 12),
-		   (unsigned)bfd_getl32 (buf + 8));
+	  if (rest >= 16)
+	    fprintf (file,
+		     /* xgettext:c-format */
+		     _("   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"),
+		     (unsigned)bfd_getl32 (buf),
+		     (unsigned)bfd_getl32 (buf + 4),
+		     (unsigned)bfd_getl32 (buf + 12),
+		     (unsigned)bfd_getl32 (buf + 8));
 	  break;
 	case ETIR__C_STC_NOP_GBL:
 	  fprintf (file, _("STC_NOP_GBL (store cond NOP at global addr)\n"));
-	  evax_bfd_print_etir_stc_ir (file, buf, 0);
+	  evax_bfd_print_etir_stc_ir (file, buf, rest, 0);
 	  break;
 	case ETIR__C_STC_NOP_PS:
 	  fprintf (file, _("STC_NOP_PS (store cond NOP at psect + offset)\n"));
-	  evax_bfd_print_etir_stc_ir (file, buf, 1);
+	  evax_bfd_print_etir_stc_ir (file, buf, rest, 1);
 	  break;
 	case ETIR__C_STC_BSR_GBL:
 	  fprintf (file, _("STC_BSR_GBL (store cond BSR at global addr)\n"));
-	  evax_bfd_print_etir_stc_ir (file, buf, 0);
+	  evax_bfd_print_etir_stc_ir (file, buf, rest, 0);
 	  break;
 	case ETIR__C_STC_BSR_PS:
 	  fprintf (file, _("STC_BSR_PS (store cond BSR at psect + offset)\n"));
-	  evax_bfd_print_etir_stc_ir (file, buf, 1);
+	  evax_bfd_print_etir_stc_ir (file, buf, rest, 1);
 	  break;
 	case ETIR__C_STC_LDA_GBL:
 	  fprintf (file, _("STC_LDA_GBL (store cond LDA at global addr)\n"));
-	  evax_bfd_print_etir_stc_ir (file, buf, 0);
+	  evax_bfd_print_etir_stc_ir (file, buf, rest, 0);
 	  break;
 	case ETIR__C_STC_LDA_PS:
 	  fprintf (file, _("STC_LDA_PS (store cond LDA at psect + offset)\n"));
-	  evax_bfd_print_etir_stc_ir (file, buf, 1);
+	  evax_bfd_print_etir_stc_ir (file, buf, rest, 1);
 	  break;
 	case ETIR__C_STC_BOH_GBL:
 	  fprintf (file, _("STC_BOH_GBL (store cond BOH at global addr)\n"));
-	  evax_bfd_print_etir_stc_ir (file, buf, 0);
+	  evax_bfd_print_etir_stc_ir (file, buf, rest, 0);
 	  break;
 	case ETIR__C_STC_BOH_PS:
 	  fprintf (file, _("STC_BOH_PS (store cond BOH at psect + offset)\n"));
-	  evax_bfd_print_etir_stc_ir (file, buf, 1);
+	  evax_bfd_print_etir_stc_ir (file, buf, rest, 1);
 	  break;
 	case ETIR__C_STC_NBH_GBL:
 	  fprintf (file,
@@ -6429,13 +6867,14 @@ evax_bfd_print_etir (FILE *file, const c
 
 	case ETIR__C_CTL_SETRB:
 	  fprintf (file, _("CTL_SETRB (set relocation base)\n"));
-	  sec_len += 4;
 	  break;
 	case ETIR__C_CTL_AUGRB:
-	  {
-	    unsigned int val = bfd_getl32 (buf);
-	    fprintf (file, _("CTL_AUGRB (augment relocation base) %u\n"), val);
-	  }
+	  if (rest >= 4)
+	    {
+	      unsigned int val = bfd_getl32 (buf);
+	      fprintf (file, _("CTL_AUGRB (augment relocation base) %u\n"),
+		       val);
+	    }
 	  break;
 	case ETIR__C_CTL_DFLOC:
 	  fprintf (file, _("CTL_DFLOC (define location)\n"));
@@ -6457,8 +6896,8 @@ evax_bfd_print_etir (FILE *file, const c
 static void
 evax_bfd_print_eobj (struct bfd *abfd, FILE *file)
 {
-  bfd_boolean is_first = TRUE;
-  bfd_boolean has_records = FALSE;
+  bool is_first = true;
+  bool has_records = true;
 
   while (1)
     {
@@ -6467,90 +6906,76 @@ evax_bfd_print_eobj (struct bfd *abfd, F
       unsigned char *rec;
       unsigned int hdr_size;
       unsigned int type;
+      unsigned char buf[6];
 
-      if (is_first)
+      hdr_size = has_records ? 6 : 4;
+      if (bfd_read (buf, hdr_size, abfd) != hdr_size)
 	{
-	  unsigned char buf[6];
-
-	  is_first = FALSE;
-
-	  /* Read 6 bytes.  */
-	  if (bfd_bread (buf, sizeof (buf), abfd) != sizeof (buf))
-	    {
-	      fprintf (file, _("cannot read GST record length\n"));
-	      return;
-	    }
-	  rec_len = bfd_getl16 (buf + 0);
-	  if (rec_len == bfd_getl16 (buf + 4)
-	      && bfd_getl16 (buf + 2) == EOBJ__C_EMH)
-	    {
-	      /* The format is raw: record-size, type, record-size.  */
-	      has_records = TRUE;
-	      pad_len = (rec_len + 1) & ~1U;
-	      hdr_size = 4;
-	    }
-	  else if (rec_len == EOBJ__C_EMH)
-	    {
-	      has_records = FALSE;
-	      pad_len = bfd_getl16 (buf + 2);
-	      hdr_size = 6;
-	    }
-	  else
-	    {
-	      /* Ill-formed.  */
-	      fprintf (file, _("cannot find EMH in first GST record\n"));
-	      return;
-	    }
-	  rec = bfd_malloc (pad_len);
-	  memcpy (rec, buf + sizeof (buf) - hdr_size, hdr_size);
+	  fprintf (file, _("cannot read GST record header\n"));
+	  return;
 	}
-      else
-	{
-	  unsigned int rec_len2 = 0;
-	  unsigned char hdr[4];
-
-	  if (has_records)
-	    {
-	      unsigned char buf_len[2];
 
-	      if (bfd_bread (buf_len, sizeof (buf_len), abfd)
-		  != sizeof (buf_len))
+      type = bfd_getl16 (buf);
+      rec_len = bfd_getl16 (buf + 2);
+      pad_len = rec_len;
+      if (has_records)
+	{
+	  unsigned int rec_len2 = bfd_getl16 (buf + 4);
+
+	  if (is_first)
+	    {
+	      is_first = false;
+	      if (type == rec_len2 && rec_len == EOBJ__C_EMH)
+		/* Matched a VMS record EMH.  */
+		;
+	      else
 		{
-		  fprintf (file, _("cannot read GST record length\n"));
-		  return;
+		  has_records = false;
+		  if (type != EOBJ__C_EMH)
+		    {
+		      /* Ill-formed.  */
+		      fprintf (file, _("cannot find EMH in first GST record\n"));
+		      return;
+		    }
 		}
-	      rec_len2 = (unsigned)bfd_getl16 (buf_len);
 	    }
 
-	  if (bfd_bread (hdr, sizeof (hdr), abfd) != sizeof (hdr))
-	    {
-	      fprintf (file, _("cannot read GST record header\n"));
-	      return;
-	    }
-	  rec_len = (unsigned)bfd_getl16 (hdr + 2);
 	  if (has_records)
-	    pad_len = (rec_len + 1) & ~1U;
-	  else
-	    pad_len = rec_len;
-	  rec = bfd_malloc (pad_len);
-	  memcpy (rec, hdr, sizeof (hdr));
-	  hdr_size = sizeof (hdr);
-	  if (has_records && rec_len2 != rec_len)
 	    {
-	      fprintf (file, _(" corrupted GST\n"));
-	      break;
+	      /* VMS record format is: record-size, type, record-size.
+		 See maybe_adjust_record_pointer_for_object comment.  */
+	      if (type == rec_len2)
+		{
+		  type = rec_len;
+		  rec_len = rec_len2;
+		}
+	      else
+		rec_len = 0;
+	      pad_len = (rec_len + 1) & ~1U;
+	      hdr_size = 4;
 	    }
 	}
 
-      if (bfd_bread (rec + hdr_size, pad_len - hdr_size, abfd)
+      if (rec_len < hdr_size)
+	{
+	  fprintf (file, _("corrupted GST\n"));
+	  return;
+	}
+
+      rec = bfd_malloc (pad_len);
+      if (rec == NULL)
+	return;
+
+      memcpy (rec, buf + (has_records ? 2 : 0), hdr_size);
+
+      if (bfd_read (rec + hdr_size, pad_len - hdr_size, abfd)
 	  != pad_len - hdr_size)
 	{
 	  fprintf (file, _("cannot read GST record\n"));
+	  free (rec);
 	  return;
 	}
 
-      type = (unsigned)bfd_getl16 (rec);
-
       switch (type)
 	{
 	case EOBJ__C_EMH:
@@ -6563,7 +6988,6 @@ evax_bfd_print_eobj (struct bfd *abfd, F
 	  evax_bfd_print_eeom (file, rec, rec_len);
 	  free (rec);
 	  return;
-	  break;
 	case EOBJ__C_ETIR:
 	  evax_bfd_print_etir (file, "ETIR", rec, rec_len);
 	  break;
@@ -6582,40 +7006,41 @@ evax_bfd_print_eobj (struct bfd *abfd, F
 }
 
 static void
-evax_bfd_print_relocation_records (FILE *file, const unsigned char *rel,
+evax_bfd_print_relocation_records (FILE *file, const unsigned char *buf,
+				   size_t buf_size, size_t off,
 				   unsigned int stride)
 {
-  while (1)
+  while (off <= buf_size - 8)
     {
       unsigned int base;
       unsigned int count;
       unsigned int j;
 
-      count = bfd_getl32 (rel + 0);
+      count = bfd_getl32 (buf + off + 0);
 
       if (count == 0)
 	break;
-      base = bfd_getl32 (rel + 4);
+      base = bfd_getl32 (buf + off + 4);
 
       /* xgettext:c-format */
       fprintf (file, _("  bitcount: %u, base addr: 0x%08x\n"),
 	       count, base);
 
-      rel += 8;
-      for (j = 0; count > 0; j += 4, count -= 32)
+      off += 8;
+      for (j = 0; count > 0 && off <= buf_size - 4; j += 4, count -= 32)
 	{
 	  unsigned int k;
 	  unsigned int n = 0;
 	  unsigned int val;
 
-	  val = bfd_getl32 (rel);
-	  rel += 4;
+	  val = bfd_getl32 (buf + off);
+	  off += 4;
 
 	  /* xgettext:c-format */
 	  fprintf (file, _("   bitmap: 0x%08x (count: %u):\n"), val, count);
 
 	  for (k = 0; k < 32; k++)
-	    if (val & (1 << k))
+	    if (val & (1u << k))
 	      {
 		if (n == 0)
 		  fputs ("   ", file);
@@ -6634,60 +7059,62 @@ evax_bfd_print_relocation_records (FILE
 }
 
 static void
-evax_bfd_print_address_fixups (FILE *file, const unsigned char *rel)
+evax_bfd_print_address_fixups (FILE *file, const unsigned char *buf,
+			       size_t buf_size, size_t off)
 {
-  while (1)
+  while (off <= buf_size - 8)
     {
       unsigned int j;
       unsigned int count;
 
-      count = bfd_getl32 (rel + 0);
+      count = bfd_getl32 (buf + off + 0);
       if (count == 0)
 	return;
       /* xgettext:c-format */
       fprintf (file, _("  image %u (%u entries)\n"),
-	       (unsigned)bfd_getl32 (rel + 4), count);
-      rel += 8;
-      for (j = 0; j < count; j++)
+	       (unsigned) bfd_getl32 (buf + off + 4), count);
+      off += 8;
+      for (j = 0; j < count && off <= buf_size - 8; j++)
 	{
 	  /* xgettext:c-format */
 	  fprintf (file, _("   offset: 0x%08x, val: 0x%08x\n"),
-		   (unsigned)bfd_getl32 (rel + 0),
-		   (unsigned)bfd_getl32 (rel + 4));
-	  rel += 8;
+		   (unsigned) bfd_getl32 (buf + off + 0),
+		   (unsigned) bfd_getl32 (buf + off + 4));
+	  off += 8;
 	}
     }
 }
 
 static void
-evax_bfd_print_reference_fixups (FILE *file, const unsigned char *rel)
+evax_bfd_print_reference_fixups (FILE *file, const unsigned char *buf,
+				 size_t buf_size, size_t off)
 {
   unsigned int count;
 
-  while (1)
+  while (off <= buf_size - 8)
     {
       unsigned int j;
       unsigned int n = 0;
 
-      count = bfd_getl32 (rel + 0);
+      count = bfd_getl32 (buf + off + 0);
       if (count == 0)
 	break;
       /* xgettext:c-format */
       fprintf (file, _("  image %u (%u entries), offsets:\n"),
-	       (unsigned)bfd_getl32 (rel + 4), count);
-      rel += 8;
-      for (j = 0; j < count; j++)
+	       (unsigned) bfd_getl32 (buf + off + 4), count);
+      off += 8;
+      for (j = 0; j < count && off <= buf_size - 4; j++)
 	{
 	  if (n == 0)
 	    fputs ("   ", file);
-	  fprintf (file, _(" 0x%08x"), (unsigned)bfd_getl32 (rel));
+	  fprintf (file, _(" 0x%08x"), (unsigned) bfd_getl32 (buf + off));
 	  n++;
 	  if (n == 7)
 	    {
 	      fputs ("\n", file);
 	      n = 0;
 	    }
-	  rel += 4;
+	  off += 4;
 	}
       if (n)
 	fputs ("\n", file);
@@ -6790,8 +7217,12 @@ evax_bfd_get_dsc_name (unsigned int v)
 }
 
 static void
-evax_bfd_print_desc (const unsigned char *buf, int indent, FILE *file)
+evax_bfd_print_desc (const unsigned char *buf, unsigned int bufsize,
+		     int indent, FILE *file)
 {
+  if (bufsize < 8)
+    return;
+
   unsigned char bclass = buf[3];
   unsigned char dtype = buf[2];
   unsigned int len = (unsigned)bfd_getl16 (buf);
@@ -6820,38 +7251,47 @@ evax_bfd_print_desc (const unsigned char
 	    evax_bfd_print_indent (indent, file);
 	    fprintf (file, _("non-contiguous array of %s\n"),
 		     evax_bfd_get_dsc_name (dsc->dtype));
-	    evax_bfd_print_indent (indent + 1, file);
-	    fprintf (file,
-		     /* xgettext:c-format */
-		     _("dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"),
-		     dsc->dimct, dsc->aflags, dsc->digits, dsc->scale);
-	    evax_bfd_print_indent (indent + 1, file);
-	    fprintf (file,
-		     /* xgettext:c-format */
-		     _("arsize: %u, a0: 0x%08x\n"),
-		     (unsigned)bfd_getl32 (dsc->arsize),
-		     (unsigned)bfd_getl32 (dsc->a0));
-	    evax_bfd_print_indent (indent + 1, file);
-	    fprintf (file, _("Strides:\n"));
-	    b = buf + sizeof (*dsc);
-	    for (i = 0; i < dsc->dimct; i++)
+	    if (bufsize >= sizeof (*dsc))
 	      {
-		evax_bfd_print_indent (indent + 2, file);
-		fprintf (file, "[%u]: %u\n", i + 1,
-			 (unsigned)bfd_getl32 (b));
-		b += 4;
-	      }
-	    evax_bfd_print_indent (indent + 1, file);
-	    fprintf (file, _("Bounds:\n"));
-	    b = buf + sizeof (*dsc);
-	    for (i = 0; i < dsc->dimct; i++)
-	      {
-		evax_bfd_print_indent (indent + 2, file);
-		/* xgettext:c-format */
-		fprintf (file, _("[%u]: Lower: %u, upper: %u\n"), i + 1,
-			 (unsigned)bfd_getl32 (b + 0),
-			 (unsigned)bfd_getl32 (b + 4));
-		b += 8;
+		evax_bfd_print_indent (indent + 1, file);
+		fprintf (file,
+			 /* xgettext:c-format */
+			 _("dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"),
+			 dsc->dimct, dsc->aflags, dsc->digits, dsc->scale);
+		evax_bfd_print_indent (indent + 1, file);
+		fprintf (file,
+			 /* xgettext:c-format */
+			 _("arsize: %u, a0: 0x%08x\n"),
+			 (unsigned) bfd_getl32 (dsc->arsize),
+			 (unsigned) bfd_getl32 (dsc->a0));
+		evax_bfd_print_indent (indent + 1, file);
+		fprintf (file, _("Strides:\n"));
+		b = buf + sizeof (*dsc);
+		bufsize -= sizeof (*dsc);
+		for (i = 0; i < dsc->dimct; i++)
+		  {
+		    if (bufsize < 4)
+		      break;
+		    evax_bfd_print_indent (indent + 2, file);
+		    fprintf (file, "[%u]: %u\n", i + 1,
+			     (unsigned) bfd_getl32 (b));
+		    b += 4;
+		    bufsize -= 4;
+		  }
+		evax_bfd_print_indent (indent + 1, file);
+		fprintf (file, _("Bounds:\n"));
+		for (i = 0; i < dsc->dimct; i++)
+		  {
+		    if (bufsize < 8)
+		      break;
+		    evax_bfd_print_indent (indent + 2, file);
+		    /* xgettext:c-format */
+		    fprintf (file, _("[%u]: Lower: %u, upper: %u\n"), i + 1,
+			     (unsigned) bfd_getl32 (b + 0),
+			     (unsigned) bfd_getl32 (b + 4));
+		    b += 8;
+		    bufsize -= 8;
+		  }
 	      }
 	  }
 	  break;
@@ -6862,12 +7302,15 @@ evax_bfd_print_desc (const unsigned char
 	    evax_bfd_print_indent (indent, file);
 	    fprintf (file, _("unaligned bit-string of %s\n"),
 		     evax_bfd_get_dsc_name (ubs->dtype));
-	    evax_bfd_print_indent (indent + 1, file);
-	    fprintf (file,
-		     /* xgettext:c-format */
-		     _("base: %u, pos: %u\n"),
-		     (unsigned)bfd_getl32 (ubs->base),
-		     (unsigned)bfd_getl32 (ubs->pos));
+	    if (bufsize >= sizeof (*ubs))
+	      {
+		evax_bfd_print_indent (indent + 1, file);
+		fprintf (file,
+			 /* xgettext:c-format */
+			 _("base: %u, pos: %u\n"),
+			 (unsigned) bfd_getl32 (ubs->base),
+			 (unsigned) bfd_getl32 (ubs->pos));
+	      }
 	  }
 	  break;
 	default:
@@ -6878,16 +7321,21 @@ evax_bfd_print_desc (const unsigned char
 }
 
 static unsigned int
-evax_bfd_print_valspec (const unsigned char *buf, int indent, FILE *file)
+evax_bfd_print_valspec (const unsigned char *buf, unsigned int bufsize,
+			int indent, FILE *file)
 {
+  if (bufsize < 5)
+    return bufsize;
+
   unsigned int vflags = buf[0];
-  unsigned int value = (unsigned)bfd_getl32 (buf + 1);
+  unsigned int value = (unsigned) bfd_getl32 (buf + 1);
   unsigned int len = 5;
 
   evax_bfd_print_indent (indent, file);
   /* xgettext:c-format */
   fprintf (file, _("vflags: 0x%02x, value: 0x%08x "), vflags, value);
   buf += 5;
+  bufsize -= 5;
 
   switch (vflags)
     {
@@ -6902,7 +7350,8 @@ evax_bfd_print_valspec (const unsigned c
       break;
     case DST__K_VFLAGS_DSC:
       fprintf (file, _("(descriptor)\n"));
-      evax_bfd_print_desc (buf + value, indent + 1, file);
+      if (value <= bufsize)
+	evax_bfd_print_desc (buf + value, bufsize - value, indent + 1, file);
       break;
     case DST__K_VFLAGS_TVS:
       fprintf (file, _("(trailing value)\n"));
@@ -6941,29 +7390,36 @@ evax_bfd_print_valspec (const unsigned c
 }
 
 static void
-evax_bfd_print_typspec (const unsigned char *buf, int indent, FILE *file)
+evax_bfd_print_typspec (const unsigned char *buf, unsigned int bufsize,
+			int indent, FILE *file)
 {
+  if (bufsize < 3)
+    return;
+
   unsigned char kind = buf[2];
-  unsigned int len = (unsigned)bfd_getl16 (buf);
+  unsigned int len = (unsigned) bfd_getl16 (buf);
 
   evax_bfd_print_indent (indent, file);
   /* xgettext:c-format */
   fprintf (file, _("len: %2u, kind: %2u "), len, kind);
   buf += 3;
+  bufsize -= 3;
   switch (kind)
     {
     case DST__K_TS_ATOM:
     /* xgettext:c-format */
-      fprintf (file, _("atomic, type=0x%02x %s\n"),
-	       buf[0], evax_bfd_get_dsc_name (buf[0]));
+      if (bufsize >= 1)
+	fprintf (file, _("atomic, type=0x%02x %s\n"),
+		 buf[0], evax_bfd_get_dsc_name (buf[0]));
       break;
     case DST__K_TS_IND:
-      fprintf (file, _("indirect, defined at 0x%08x\n"),
-	       (unsigned)bfd_getl32 (buf));
+      if (bufsize >= 4)
+	fprintf (file, _("indirect, defined at 0x%08x\n"),
+		 (unsigned) bfd_getl32 (buf));
       break;
     case DST__K_TS_TPTR:
       fprintf (file, _("typed pointer\n"));
-      evax_bfd_print_typspec (buf, indent + 1, file);
+      evax_bfd_print_typspec (buf, bufsize, indent + 1, file);
       break;
     case DST__K_TS_PTR:
       fprintf (file, _("pointer\n"));
@@ -6971,29 +7427,51 @@ evax_bfd_print_typspec (const unsigned c
     case DST__K_TS_ARRAY:
       {
 	const unsigned char *vs;
+	unsigned int vs_len;
 	unsigned int vec_len;
 	unsigned int i;
 
+	if (bufsize == 0)
+	  return;
 	fprintf (file, _("array, dim: %u, bitmap: "), buf[0]);
+	--bufsize;
 	vec_len = (buf[0] + 1 + 7) / 8;
 	for (i = 0; i < vec_len; i++)
-	  fprintf (file, " %02x", buf[i + 1]);
+	  {
+	    if (bufsize == 0)
+	      break;
+	    fprintf (file, " %02x", buf[i + 1]);
+	    --bufsize;
+	  }
 	fputc ('\n', file);
+	if (bufsize == 0)
+	  return;
 	vs = buf + 1 + vec_len;
 	evax_bfd_print_indent (indent, file);
 	fprintf (file, _("array descriptor:\n"));
-	vs += evax_bfd_print_valspec (vs, indent + 1, file);
-	for (i = 0; i < buf[0] + 1U; i++)
-	  if (buf[1 + i / 8] & (1 << (i % 8)))
-	    {
-	      evax_bfd_print_indent (indent, file);
-	      if (i == 0)
-		fprintf (file, _("type spec for element:\n"));
-	      else
-		fprintf (file, _("type spec for subscript %u:\n"), i);
-	      evax_bfd_print_typspec (vs, indent + 1, file);
-	      vs += bfd_getl16 (vs);
-	    }
+	vs_len = evax_bfd_print_valspec (vs, bufsize, indent + 1, file);
+	vs += vs_len;
+	if (bufsize > vs_len)
+	  {
+	    bufsize -= vs_len;
+	    for (i = 0; i < buf[0] + 1U; i++)
+	      if (buf[1 + i / 8] & (1 << (i % 8)))
+		{
+		  evax_bfd_print_indent (indent, file);
+		  if (i == 0)
+		    fprintf (file, _("type spec for element:\n"));
+		  else
+		    fprintf (file, _("type spec for subscript %u:\n"), i);
+		  evax_bfd_print_typspec (vs, bufsize, indent + 1, file);
+		  if (bufsize < 2)
+		    break;
+		  vs_len = bfd_getl16 (vs);
+		  if (bufsize <= vs_len)
+		    break;
+		  vs += vs_len;
+		  bufsize -= vs_len;
+		}
+	  }
       }
       break;
     default:
@@ -7017,7 +7495,7 @@ evax_bfd_print_dst (struct bfd *abfd, un
       unsigned int type;
       unsigned char *buf;
 
-      if (bfd_bread (&dsth, sizeof (dsth), abfd) != sizeof (dsth))
+      if (bfd_read (&dsth, sizeof (dsth), abfd) != sizeof (dsth))
 	{
 	  fprintf (file, _("cannot read DST header\n"));
 	  return;
@@ -7027,20 +7505,24 @@ evax_bfd_print_dst (struct bfd *abfd, un
       /* xgettext:c-format */
       fprintf (file, _(" type: %3u, len: %3u (at 0x%08x): "),
 	       type, len, off);
-      if (len == 0)
+      if (len < sizeof (dsth))
 	{
 	  fputc ('\n', file);
 	  break;
 	}
-      len++;
       dst_size -= len;
       off += len;
       len -= sizeof (dsth);
-      buf = bfd_malloc (len);
-      if (bfd_bread (buf, len, abfd) != len)
+      if (len == 0)
+	buf = NULL;
+      else
 	{
-	  fprintf (file, _("cannot read DST symbol\n"));
-	  return;
+	  buf = _bfd_malloc_and_read (abfd, len, len);
+	  if (buf == NULL)
+	    {
+	      fprintf (file, _("cannot read DST symbol\n"));
+	      return;
+	    }
 	}
       switch (type)
 	{
@@ -7084,15 +7566,19 @@ evax_bfd_print_dst (struct bfd *abfd, un
 	case DSC__K_DTYPE_VT2:
 	  fprintf (file, _("standard data: %s\n"),
 		   evax_bfd_get_dsc_name (type));
-	  evax_bfd_print_valspec (buf, 4, file);
-	  fprintf (file, _("    name: %.*s\n"), buf[5], buf + 6);
+	  evax_bfd_print_valspec (buf, len, 4, file);
+	  if (len > 6)
+	    fprintf (file, _("    name: %.*s\n"),
+		     buf[5] > len - 6 ? len - 6 : buf[5], buf + 6);
 	  break;
 	case DST__K_MODBEG:
 	  {
 	    struct vms_dst_modbeg *dst = (void *)buf;
-	    const char *name = (const char *)buf + sizeof (*dst);
+	    unsigned char *name = buf + sizeof (*dst);
 
 	    fprintf (file, _("modbeg\n"));
+	    if (len < sizeof (*dst))
+	      break;
 	    /* xgettext:c-format */
 	    fprintf (file, _("   flags: %d, language: %u, "
 			     "major: %u, minor: %u\n"),
@@ -7100,11 +7586,21 @@ evax_bfd_print_dst (struct bfd *abfd, un
 		     (unsigned)bfd_getl32 (dst->language),
 		     (unsigned)bfd_getl16 (dst->major),
 		     (unsigned)bfd_getl16 (dst->minor));
-	    fprintf (file, _("   module name: %.*s\n"),
-		     name[0], name + 1);
-	    name += name[0] + 1;
-	    fprintf (file, _("   compiler   : %.*s\n"),
-		     name[0], name + 1);
+	    len -= sizeof (*dst);
+	    if (len > 0)
+	      {
+		int nlen = len - 1;
+		fprintf (file, _("   module name: %.*s\n"),
+			 name[0] > nlen ? nlen : name[0], name + 1);
+		if (name[0] < nlen)
+		  {
+		    len -= name[0] + 1;
+		    name += name[0] + 1;
+		    nlen = len - 1;
+		    fprintf (file, _("   compiler   : %.*s\n"),
+			     name[0] > nlen ? nlen : name[0], name + 1);
+		  }
+	      }
 	  }
 	  break;
 	case DST__K_MODEND:
@@ -7113,98 +7609,142 @@ evax_bfd_print_dst (struct bfd *abfd, un
 	case DST__K_RTNBEG:
 	  {
 	    struct vms_dst_rtnbeg *dst = (void *)buf;
-	    const char *name = (const char *)buf + sizeof (*dst);
+	    unsigned char *name = buf + sizeof (*dst);
 
 	    fputs (_("rtnbeg\n"), file);
-	    /* xgettext:c-format */
-	    fprintf (file, _("    flags: %u, address: 0x%08x, "
-			     "pd-address: 0x%08x\n"),
-		     dst->flags,
-		     (unsigned)bfd_getl32 (dst->address),
-		     (unsigned)bfd_getl32 (dst->pd_address));
-	    fprintf (file, _("    routine name: %.*s\n"),
-		     name[0], name + 1);
+	    if (len >= sizeof (*dst))
+	      {
+		/* xgettext:c-format */
+		fprintf (file, _("    flags: %u, address: 0x%08x, "
+				 "pd-address: 0x%08x\n"),
+			 dst->flags,
+			 (unsigned) bfd_getl32 (dst->address),
+			 (unsigned) bfd_getl32 (dst->pd_address));
+		len -= sizeof (*dst);
+		if (len > 0)
+		  {
+		    int nlen = len - 1;
+		    fprintf (file, _("    routine name: %.*s\n"),
+			     name[0] > nlen ? nlen : name[0], name + 1);
+		  }
+	      }
 	  }
 	  break;
 	case DST__K_RTNEND:
 	  {
 	    struct vms_dst_rtnend *dst = (void *)buf;
 
-	    fprintf (file, _("rtnend: size 0x%08x\n"),
-		     (unsigned)bfd_getl32 (dst->size));
+	    if (len >= sizeof (*dst))
+	      fprintf (file, _("rtnend: size 0x%08x\n"),
+		       (unsigned) bfd_getl32 (dst->size));
 	  }
 	  break;
 	case DST__K_PROLOG:
 	  {
 	    struct vms_dst_prolog *dst = (void *)buf;
 
-	    fprintf (file, _("prolog: bkpt address 0x%08x\n"),
-		     (unsigned)bfd_getl32 (dst->bkpt_addr));
+	    if (len >= sizeof (*dst))
+	      /* xgettext:c-format */
+	      fprintf (file, _("prolog: bkpt address 0x%08x\n"),
+		       (unsigned) bfd_getl32 (dst->bkpt_addr));
 	  }
 	  break;
 	case DST__K_EPILOG:
 	  {
 	    struct vms_dst_epilog *dst = (void *)buf;
 
-	    /* xgettext:c-format */
-	    fprintf (file, _("epilog: flags: %u, count: %u\n"),
-		     dst->flags, (unsigned)bfd_getl32 (dst->count));
+	    if (len >= sizeof (*dst))
+	      /* xgettext:c-format */
+	      fprintf (file, _("epilog: flags: %u, count: %u\n"),
+		       dst->flags, (unsigned) bfd_getl32 (dst->count));
 	  }
 	  break;
 	case DST__K_BLKBEG:
 	  {
 	    struct vms_dst_blkbeg *dst = (void *)buf;
-	    const char *name = (const char *)buf + sizeof (*dst);
+	    unsigned char *name = buf + sizeof (*dst);
 
-	    /* xgettext:c-format */
-	    fprintf (file, _("blkbeg: address: 0x%08x, name: %.*s\n"),
-		     (unsigned)bfd_getl32 (dst->address),
-		     name[0], name + 1);
+	    if (len > sizeof (*dst))
+	      {
+		int nlen;
+		len -= sizeof (*dst);
+		nlen = len - 1;
+		/* xgettext:c-format */
+		fprintf (file, _("blkbeg: address: 0x%08x, name: %.*s\n"),
+			 (unsigned) bfd_getl32 (dst->address),
+			 name[0] > nlen ? nlen : name[0], name + 1);
+	      }
 	  }
 	  break;
 	case DST__K_BLKEND:
 	  {
 	    struct vms_dst_blkend *dst = (void *)buf;
 
-	    fprintf (file, _("blkend: size: 0x%08x\n"),
-		     (unsigned)bfd_getl32 (dst->size));
+	    if (len >= sizeof (*dst))
+	      /* xgettext:c-format */
+	      fprintf (file, _("blkend: size: 0x%08x\n"),
+		       (unsigned) bfd_getl32 (dst->size));
 	  }
 	  break;
 	case DST__K_TYPSPEC:
 	  {
 	    fprintf (file, _("typspec (len: %u)\n"), len);
-	    fprintf (file, _("    name: %.*s\n"), buf[0], buf + 1);
-	    evax_bfd_print_typspec (buf + 1 + buf[0], 5, file);
+	    if (len >= 1)
+	      {
+		int nlen = len - 1;
+		fprintf (file, _("    name: %.*s\n"),
+			 buf[0] > nlen ? nlen : buf[0], buf + 1);
+		if (nlen > buf[0])
+		  evax_bfd_print_typspec (buf + 1 + buf[0], len - (1 + buf[0]),
+					  5, file);
+	      }
 	  }
 	  break;
 	case DST__K_SEPTYP:
 	  {
-	    fprintf (file, _("septyp, name: %.*s\n"), buf[5], buf + 6);
-	    evax_bfd_print_valspec (buf, 4, file);
+	    if (len >= 6)
+	      {
+		fprintf (file, _("septyp, name: %.*s\n"),
+			 buf[5] > len - 6 ? len - 6 : buf[5], buf + 6);
+		evax_bfd_print_valspec (buf, len, 4, file);
+	      }
 	  }
 	  break;
 	case DST__K_RECBEG:
 	  {
 	    struct vms_dst_recbeg *recbeg = (void *)buf;
-	    const char *name = (const char *)buf + sizeof (*recbeg);
+	    unsigned char *name = buf + sizeof (*recbeg);
 
-	    fprintf (file, _("recbeg: name: %.*s\n"), name[0], name + 1);
-	    evax_bfd_print_valspec (buf, 4, file);
-	    fprintf (file, _("    len: %u bits\n"),
-		     (unsigned)bfd_getl32 (name + 1 + name[0]));
+	    if (len > sizeof (*recbeg))
+	      {
+		int nlen = len - sizeof (*recbeg) - 1;
+		if (name[0] < nlen)
+		  nlen = name[0];
+		fprintf (file, _("recbeg: name: %.*s\n"), nlen, name + 1);
+		evax_bfd_print_valspec (buf, len, 4, file);
+		len -= 1 + nlen;
+		if (len >= 4)
+		  fprintf (file, _("    len: %u bits\n"),
+			   (unsigned) bfd_getl32 (name + 1 + nlen));
+	      }
 	  }
 	  break;
 	case DST__K_RECEND:
 	  fprintf (file, _("recend\n"));
 	  break;
 	case DST__K_ENUMBEG:
-	  /* xgettext:c-format */
-	  fprintf (file, _("enumbeg, len: %u, name: %.*s\n"),
-		   buf[0], buf[1], buf + 2);
+	  if (len >= 2)
+	    /* xgettext:c-format */
+	    fprintf (file, _("enumbeg, len: %u, name: %.*s\n"),
+		     buf[0], buf[1] > len - 2 ? len - 2 : buf[1], buf + 2);
 	  break;
 	case DST__K_ENUMELT:
-	  fprintf (file, _("enumelt, name: %.*s\n"), buf[5], buf + 6);
-	  evax_bfd_print_valspec (buf, 4, file);
+	  if (len >= 6)
+	    {
+	      fprintf (file, _("enumelt, name: %.*s\n"),
+		       buf[5] > len - 6 ? len - 6 : buf[5], buf + 6);
+	      evax_bfd_print_valspec (buf, len, 4, file);
+	    }
 	  break;
 	case DST__K_ENUMEND:
 	  fprintf (file, _("enumend\n"));
@@ -7212,26 +7752,36 @@ evax_bfd_print_dst (struct bfd *abfd, un
 	case DST__K_LABEL:
 	  {
 	    struct vms_dst_label *lab = (void *)buf;
-	    fprintf (file, _("label, name: %.*s\n"),
-		     lab->name[0], lab->name + 1);
-	    fprintf (file, _("    address: 0x%08x\n"),
-		     (unsigned)bfd_getl32 (lab->value));
+	    if (len >= sizeof (*lab))
+	      {
+		fprintf (file, _("label, name: %.*s\n"),
+			 lab->name[0] > len - 1 ? len - 1 : lab->name[0],
+			 lab->name + 1);
+		fprintf (file, _("    address: 0x%08x\n"),
+			 (unsigned) bfd_getl32 (lab->value));
+	      }
 	  }
 	  break;
 	case DST__K_DIS_RANGE:
-	  {
-	    unsigned int cnt = bfd_getl32 (buf);
-	    unsigned char *rng = buf + 4;
-	    unsigned int i;
-
-	    fprintf (file, _("discontiguous range (nbr: %u)\n"), cnt);
-	    for (i = 0; i < cnt; i++, rng += 8)
-	      /* xgettext:c-format */
-	      fprintf (file, _("    address: 0x%08x, size: %u\n"),
-		       (unsigned)bfd_getl32 (rng),
-		       (unsigned)bfd_getl32 (rng + 4));
-
-	  }
+	  if (len >= 4)
+	    {
+	      unsigned int cnt = bfd_getl32 (buf);
+	      unsigned char *rng = buf + 4;
+	      unsigned int i;
+
+	      fprintf (file, _("discontiguous range (nbr: %u)\n"), cnt);
+	      len -= 4;
+	      for (i = 0; i < cnt; i++, rng += 8)
+		{
+		  if (len < 8)
+		    break;
+		  /* xgettext:c-format */
+		  fprintf (file, _("    address: 0x%08x, size: %u\n"),
+			   (unsigned) bfd_getl32 (rng),
+			   (unsigned) bfd_getl32 (rng + 4));
+		  len -= 8;
+		}
+	    }
 	  break;
 	case DST__K_LINE_NUM:
 	  {
@@ -7241,79 +7791,101 @@ evax_bfd_print_dst (struct bfd *abfd, un
 
 	    while (len > 0)
 	      {
-		signed char cmd;
-		unsigned char cmdlen;
+		int cmd;
 		unsigned int val;
+		int cmdlen = -1;
 
-		cmd = buf[0];
-		cmdlen = 0;
+		cmd = *buf++;
+		len--;
 
 		fputs ("    ", file);
 
 		switch (cmd)
 		  {
 		  case DST__K_DELTA_PC_W:
-		    val = bfd_getl16 (buf + 1);
+		    if (len < 2)
+		      break;
+		    val = bfd_getl16 (buf);
 		    fprintf (file, _("delta_pc_w %u\n"), val);
 		    pc += val;
 		    line++;
-		    cmdlen = 3;
+		    cmdlen = 2;
 		    break;
 		  case DST__K_INCR_LINUM:
-		    val = buf[1];
+		    if (len < 1)
+		      break;
+		    val = *buf;
 		    fprintf (file, _("incr_linum(b): +%u\n"), val);
 		    line += val;
-		    cmdlen = 2;
+		    cmdlen = 1;
 		    break;
 		  case DST__K_INCR_LINUM_W:
-		    val = bfd_getl16 (buf + 1);
+		    if (len < 2)
+		      break;
+		    val = bfd_getl16 (buf);
 		    fprintf (file, _("incr_linum_w: +%u\n"), val);
 		    line += val;
-		    cmdlen = 3;
+		    cmdlen = 2;
 		    break;
 		  case DST__K_INCR_LINUM_L:
-		    val = bfd_getl32 (buf + 1);
+		    if (len < 4)
+		      break;
+		    val = bfd_getl32 (buf);
 		    fprintf (file, _("incr_linum_l: +%u\n"), val);
 		    line += val;
-		    cmdlen = 5;
+		    cmdlen = 4;
 		    break;
 		  case DST__K_SET_LINUM:
-		    line = bfd_getl16 (buf + 1);
+		    if (len < 2)
+		      break;
+		    line = bfd_getl16 (buf);
 		    fprintf (file, _("set_line_num(w) %u\n"), line);
-		    cmdlen = 3;
+		    cmdlen = 2;
 		    break;
 		  case DST__K_SET_LINUM_B:
-		    line = buf[1];
+		    if (len < 1)
+		      break;
+		    line = *buf;
 		    fprintf (file, _("set_line_num_b %u\n"), line);
-		    cmdlen = 2;
+		    cmdlen = 1;
 		    break;
 		  case DST__K_SET_LINUM_L:
-		    line = bfd_getl32 (buf + 1);
+		    if (len < 4)
+		      break;
+		    line = bfd_getl32 (buf);
 		    fprintf (file, _("set_line_num_l %u\n"), line);
-		    cmdlen = 5;
+		    cmdlen = 4;
 		    break;
 		  case DST__K_SET_ABS_PC:
-		    pc = bfd_getl32 (buf + 1);
+		    if (len < 4)
+		      break;
+		    pc = bfd_getl32 (buf);
 		    fprintf (file, _("set_abs_pc: 0x%08x\n"), pc);
-		    cmdlen = 5;
+		    cmdlen = 4;
 		    break;
 		  case DST__K_DELTA_PC_L:
+		    if (len < 4)
+		      break;
 		    fprintf (file, _("delta_pc_l: +0x%08x\n"),
-			     (unsigned)bfd_getl32 (buf + 1));
-		    cmdlen = 5;
+			     (unsigned) bfd_getl32 (buf));
+		    cmdlen = 4;
 		    break;
 		  case DST__K_TERM:
-		    fprintf (file, _("term(b): 0x%02x"), buf[1]);
-		    pc += buf[1];
+		    if (len < 1)
+		      break;
+		    fprintf (file, _("term(b): 0x%02x"), *buf);
+		    pc += *buf;
 		    fprintf (file, _("        pc: 0x%08x\n"), pc);
-		    cmdlen = 2;
+		    cmdlen = 1;
 		    break;
 		  case DST__K_TERM_W:
-		    val = bfd_getl16 (buf + 1);
+		    if (len < 2)
+		      break;
+		    val = bfd_getl16 (buf);
 		    fprintf (file, _("term_w: 0x%04x"), val);
 		    pc += val;
 		    fprintf (file, _("    pc: 0x%08x\n"), pc);
-		    cmdlen = 3;
+		    cmdlen = 2;
 		    break;
 		  default:
 		    if (cmd <= 0)
@@ -7324,13 +7896,13 @@ evax_bfd_print_dst (struct bfd *abfd, un
 			/* xgettext:c-format */
 			fprintf (file, _("    pc: 0x%08x line: %5u\n"),
 				 pc, line);
-			cmdlen = 1;
+			cmdlen = 0;
 		      }
 		    else
 		      fprintf (file, _("    *unhandled* cmd %u\n"), cmd);
 		    break;
 		  }
-		if (cmdlen == 0)
+		if (cmdlen < 0)
 		  break;
 		len -= cmdlen;
 		buf += cmdlen;
@@ -7346,16 +7918,20 @@ evax_bfd_print_dst (struct bfd *abfd, un
 
 	    while (len > 0)
 	      {
-		signed char cmd = buf[0];
-		unsigned char cmdlen = 0;
+		int cmd = *buf++;
+		int cmdlen = -1;
 
+		len--;
 		switch (cmd)
 		  {
 		  case DST__K_SRC_DECLFILE:
 		    {
-		      struct vms_dst_src_decl_src *src = (void *)(buf + 1);
-		      const char *name;
+		      struct vms_dst_src_decl_src *src = (void *) buf;
+		      unsigned char *name;
+		      int nlen;
 
+		      if (len < sizeof (*src))
+			break;
 		      /* xgettext:c-format */
 		      fprintf (file, _("   declfile: len: %u, flags: %u, "
 				       "fileid: %u\n"),
@@ -7370,58 +7946,80 @@ evax_bfd_print_dst (struct bfd *abfd, un
 			       (unsigned)bfd_getl32 (src->rms_ebk),
 			       (unsigned)bfd_getl16 (src->rms_ffb),
 			       src->rms_rfo);
-		      name = (const char *)buf + 1 + sizeof (*src);
+		      if (src->length > len || src->length <= sizeof (*src))
+			break;
+		      nlen = src->length - sizeof (*src) - 1;
+		      name = buf + sizeof (*src);
 		      fprintf (file, _("   filename   : %.*s\n"),
-			       name[0], name + 1);
+			       name[0] > nlen ? nlen : name[0], name + 1);
+		      if (name[0] >= nlen)
+			break;
+		      nlen -= name[0] + 1;
 		      name += name[0] + 1;
 		      fprintf (file, _("   module name: %.*s\n"),
-			       name[0], name + 1);
-		      cmdlen = 2 + src->length;
+			       name[0] > nlen ? nlen : name[0], name + 1);
+		      if (name[0] > nlen)
+			break;
+		      cmdlen = src->length;
 		    }
 		    break;
 		  case DST__K_SRC_SETFILE:
+		    if (len < 2)
+		      break;
 		    fprintf (file, _("   setfile %u\n"),
-			     (unsigned)bfd_getl16 (buf + 1));
-		    cmdlen = 3;
+			     (unsigned) bfd_getl16 (buf));
+		    cmdlen = 2;
 		    break;
 		  case DST__K_SRC_SETREC_W:
+		    if (len < 2)
+		      break;
 		    fprintf (file, _("   setrec %u\n"),
-			     (unsigned)bfd_getl16 (buf + 1));
-		    cmdlen = 3;
+			     (unsigned) bfd_getl16 (buf));
+		    cmdlen = 2;
 		    break;
 		  case DST__K_SRC_SETREC_L:
+		    if (len < 4)
+		      break;
 		    fprintf (file, _("   setrec %u\n"),
-			     (unsigned)bfd_getl32 (buf + 1));
-		    cmdlen = 5;
+			     (unsigned) bfd_getl32 (buf));
+		    cmdlen = 4;
 		    break;
 		  case DST__K_SRC_SETLNUM_W:
+		    if (len < 2)
+		      break;
 		    fprintf (file, _("   setlnum %u\n"),
-			     (unsigned)bfd_getl16 (buf + 1));
-		    cmdlen = 3;
+			     (unsigned) bfd_getl16 (buf));
+		    cmdlen = 2;
 		    break;
 		  case DST__K_SRC_SETLNUM_L:
+		    if (len < 4)
+		      break;
 		    fprintf (file, _("   setlnum %u\n"),
-			     (unsigned)bfd_getl32 (buf + 1));
-		    cmdlen = 5;
+			     (unsigned) bfd_getl32 (buf));
+		    cmdlen = 4;
 		    break;
 		  case DST__K_SRC_DEFLINES_W:
+		    if (len < 2)
+		      break;
 		    fprintf (file, _("   deflines %u\n"),
-			     (unsigned)bfd_getl16 (buf + 1));
-		    cmdlen = 3;
+			     (unsigned) bfd_getl16 (buf));
+		    cmdlen = 2;
 		    break;
 		  case DST__K_SRC_DEFLINES_B:
-		    fprintf (file, _("   deflines %u\n"), buf[1]);
-		    cmdlen = 2;
+		    if (len < 1)
+		      break;
+		    fprintf (file, _("   deflines %u\n"), *buf);
+		    cmdlen = 1;
 		    break;
 		  case DST__K_SRC_FORMFEED:
 		    fprintf (file, _("   formfeed\n"));
-		    cmdlen = 1;
+		    cmdlen = 0;
 		    break;
 		  default:
 		    fprintf (file, _("   *unhandled* cmd %u\n"), cmd);
 		    break;
 		  }
-		if (cmdlen == 0)
+		if (cmdlen < 0)
 		  break;
 		len -= cmdlen;
 		buf += cmdlen;
@@ -7459,8 +8057,8 @@ evax_bfd_print_image (bfd *abfd, FILE *f
   unsigned int eiaf_size = 0;
   unsigned int eihvn_off;
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET)
-      || bfd_bread (&eihd, sizeof (eihd), abfd) != sizeof (eihd))
+  if (bfd_seek (abfd, 0, SEEK_SET)
+      || bfd_read (&eihd, sizeof (eihd), abfd) != sizeof (eihd))
     {
       fprintf (file, _("cannot read EIHD\n"));
       return;
@@ -7587,18 +8185,18 @@ evax_bfd_print_image (bfd *abfd, FILE *f
       unsigned int j;
 
       fprintf (file, _("system version array information:\n"));
-      if (bfd_seek (abfd, (file_ptr) eihvn_off, SEEK_SET)
-	  || bfd_bread (&eihvn, sizeof (eihvn), abfd) != sizeof (eihvn))
+      if (bfd_seek (abfd, eihvn_off, SEEK_SET)
+	  || bfd_read (&eihvn, sizeof (eihvn), abfd) != sizeof (eihvn))
 	{
 	  fprintf (file, _("cannot read EIHVN header\n"));
 	  return;
 	}
       mask = bfd_getl32 (eihvn.subsystem_mask);
       for (j = 0; j < 32; j++)
-	if (mask & (1 << j))
+	if (mask & (1u << j))
 	  {
 	    struct vms_eihvn_subversion ver;
-	    if (bfd_bread (&ver, sizeof (ver), abfd) != sizeof (ver))
+	    if (bfd_read (&ver, sizeof (ver), abfd) != sizeof (ver))
 	      {
 		fprintf (file, _("cannot read EIHVN version\n"));
 		return;
@@ -7680,8 +8278,8 @@ evax_bfd_print_image (bfd *abfd, FILE *f
     {
       struct vms_eiha eiha;
 
-      if (bfd_seek (abfd, (file_ptr) eiha_off, SEEK_SET)
-	  || bfd_bread (&eiha, sizeof (eiha), abfd) != sizeof (eiha))
+      if (bfd_seek (abfd, eiha_off, SEEK_SET)
+	  || bfd_read (&eiha, sizeof (eiha), abfd) != sizeof (eiha))
 	{
 	  fprintf (file, _("cannot read EIHA\n"));
 	  return;
@@ -7713,8 +8311,8 @@ evax_bfd_print_image (bfd *abfd, FILE *f
     {
       struct vms_eihi eihi;
 
-      if (bfd_seek (abfd, (file_ptr) eihi_off, SEEK_SET)
-	  || bfd_bread (&eihi, sizeof (eihi), abfd) != sizeof (eihi))
+      if (bfd_seek (abfd, eihi_off, SEEK_SET)
+	  || bfd_read (&eihi, sizeof (eihi), abfd) != sizeof (eihi))
 	{
 	  fprintf (file, _("cannot read EIHI\n"));
 	  return;
@@ -7738,8 +8336,8 @@ evax_bfd_print_image (bfd *abfd, FILE *f
     {
       struct vms_eihs eihs;
 
-      if (bfd_seek (abfd, (file_ptr) eihs_off, SEEK_SET)
-	  || bfd_bread (&eihs, sizeof (eihs), abfd) != sizeof (eihs))
+      if (bfd_seek (abfd, eihs_off, SEEK_SET)
+	  || bfd_read (&eihs, sizeof (eihs), abfd) != sizeof (eihs))
 	{
 	  fprintf (file, _("cannot read EIHS\n"));
 	  return;
@@ -7771,8 +8369,8 @@ evax_bfd_print_image (bfd *abfd, FILE *f
 
       while (1)
 	{
-	  if (bfd_seek (abfd, (file_ptr) eisd_off, SEEK_SET)
-	      || bfd_bread (&eisd, sizeof (eisd), abfd) != sizeof (eisd))
+	  if (bfd_seek (abfd, eisd_off, SEEK_SET)
+	      || bfd_read (&eisd, sizeof (eisd), abfd) != sizeof (eisd))
 	    {
 	      fprintf (file, _("cannot read EISD\n"));
 	      return;
@@ -7887,7 +8485,7 @@ evax_bfd_print_image (bfd *abfd, FILE *f
 	  struct vms_dmt_header dmth;
 	  unsigned int count;
 
-	  if (bfd_bread (&dmth, sizeof (dmth), abfd) != sizeof (dmth))
+	  if (bfd_read (&dmth, sizeof (dmth), abfd) != sizeof (dmth))
 	    {
 	      fprintf (file, _("cannot read DMT header\n"));
 	      return;
@@ -7903,7 +8501,7 @@ evax_bfd_print_image (bfd *abfd, FILE *f
 	    {
 	      struct vms_dmt_psect dmtp;
 
-	      if (bfd_bread (&dmtp, sizeof (dmtp), abfd) != sizeof (dmtp))
+	      if (bfd_read (&dmtp, sizeof (dmtp), abfd) != sizeof (dmtp))
 		{
 		  fprintf (file, _("cannot read DMT psect\n"));
 		  return;
@@ -7939,7 +8537,7 @@ evax_bfd_print_image (bfd *abfd, FILE *f
       fprintf (file, _("Global symbol table:\n"));
       evax_bfd_print_eobj (abfd, file);
     }
-  if (eiaf_vbn != 0)
+  if (eiaf_vbn != 0 && eiaf_size >= sizeof (struct vms_eiaf))
     {
       unsigned char *buf;
       struct vms_eiaf *eiaf;
@@ -7952,14 +8550,12 @@ evax_bfd_print_image (bfd *abfd, FILE *f
       unsigned int codeadroff;
       unsigned int lpfixoff;
       unsigned int chgprtoff;
+      file_ptr f_off = (file_ptr) (eiaf_vbn - 1) * VMS_BLOCK_SIZE;
 
-      buf = bfd_malloc (eiaf_size);
-
-      if (bfd_seek (abfd, (file_ptr) (eiaf_vbn - 1) * VMS_BLOCK_SIZE, SEEK_SET)
-	  || bfd_bread (buf, eiaf_size, abfd) != eiaf_size)
+      if (bfd_seek (abfd, f_off, SEEK_SET) != 0
+	  || (buf = _bfd_malloc_and_read (abfd, eiaf_size, eiaf_size)) == NULL)
 	{
 	  fprintf (file, _("cannot read EIHA\n"));
-	  free (buf);
 	  return;
 	}
       eiaf = (struct vms_eiaf *)buf;
@@ -8013,12 +8609,14 @@ evax_bfd_print_image (bfd *abfd, FILE *f
 
       if (shlstoff)
 	{
-	  struct vms_shl *shl = (struct vms_shl *)(buf + shlstoff);
 	  unsigned int j;
 
 	  fprintf (file, _(" Shareable images:\n"));
-	  for (j = 0; j < shrimgcnt; j++, shl++)
+	  for (j = 0;
+	       j < shrimgcnt && shlstoff <= eiaf_size - sizeof (struct vms_shl);
+	       j++, shlstoff += sizeof (struct vms_shl))
 	    {
+	      struct vms_shl *shl = (struct vms_shl *) (buf + shlstoff);
 	      fprintf (file,
 		       /* xgettext:c-format */
 		       _("  %u: size: %u, flags: 0x%02x, name: %.*s\n"),
@@ -8029,50 +8627,54 @@ evax_bfd_print_image (bfd *abfd, FILE *f
       if (qrelfixoff != 0)
 	{
 	  fprintf (file, _(" quad-word relocation fixups:\n"));
-	  evax_bfd_print_relocation_records (file, buf + qrelfixoff, 8);
+	  evax_bfd_print_relocation_records (file, buf, eiaf_size,
+					     qrelfixoff, 8);
 	}
       if (lrelfixoff != 0)
 	{
 	  fprintf (file, _(" long-word relocation fixups:\n"));
-	  evax_bfd_print_relocation_records (file, buf + lrelfixoff, 4);
+	  evax_bfd_print_relocation_records (file, buf, eiaf_size,
+					     lrelfixoff, 4);
 	}
       if (qdotadroff != 0)
 	{
 	  fprintf (file, _(" quad-word .address reference fixups:\n"));
-	  evax_bfd_print_address_fixups (file, buf + qdotadroff);
+	  evax_bfd_print_address_fixups (file, buf, eiaf_size, qdotadroff);
 	}
       if (ldotadroff != 0)
 	{
 	  fprintf (file, _(" long-word .address reference fixups:\n"));
-	  evax_bfd_print_address_fixups (file, buf + ldotadroff);
+	  evax_bfd_print_address_fixups (file, buf, eiaf_size, ldotadroff);
 	}
       if (codeadroff != 0)
 	{
 	  fprintf (file, _(" Code Address Reference Fixups:\n"));
-	  evax_bfd_print_reference_fixups (file, buf + codeadroff);
+	  evax_bfd_print_reference_fixups (file, buf, eiaf_size, codeadroff);
 	}
       if (lpfixoff != 0)
 	{
 	  fprintf (file, _(" Linkage Pairs Reference Fixups:\n"));
-	  evax_bfd_print_reference_fixups (file, buf + lpfixoff);
+	  evax_bfd_print_reference_fixups (file, buf, eiaf_size, lpfixoff);
 	}
-      if (chgprtoff)
+      if (chgprtoff && chgprtoff <= eiaf_size - 4)
 	{
-	  unsigned int count = (unsigned)bfd_getl32 (buf + chgprtoff);
-	  struct vms_eicp *eicp = (struct vms_eicp *)(buf + chgprtoff + 4);
+	  unsigned int count = (unsigned) bfd_getl32 (buf + chgprtoff);
 	  unsigned int j;
 
 	  fprintf (file, _(" Change Protection (%u entries):\n"), count);
-	  for (j = 0; j < count; j++, eicp++)
+	  for (j = 0, chgprtoff += 4;
+	       j < count && chgprtoff <= eiaf_size - sizeof (struct vms_eicp);
+	       j++, chgprtoff += sizeof (struct vms_eicp))
 	    {
+	      struct vms_eicp *eicp = (struct vms_eicp *) (buf + chgprtoff);
 	      unsigned int prot = bfd_getl32 (eicp->newprt);
 	      fprintf (file,
 		       /* xgettext:c-format */
 		       _("  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "),
-		       (unsigned)bfd_getl32 (eicp->baseva + 4),
-		       (unsigned)bfd_getl32 (eicp->baseva + 0),
-		       (unsigned)bfd_getl32 (eicp->size),
-		       (unsigned)bfd_getl32 (eicp->newprt));
+		       (unsigned) bfd_getl32 (eicp->baseva + 4),
+		       (unsigned) bfd_getl32 (eicp->baseva + 0),
+		       (unsigned) bfd_getl32 (eicp->size),
+		       (unsigned) bfd_getl32 (eicp->newprt));
 	      switch (prot)
 		{
 		case PRT__C_NA:
@@ -8134,7 +8736,7 @@ evax_bfd_print_image (bfd *abfd, FILE *f
     }
 }
 
-static bfd_boolean
+static bool
 vms_bfd_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE *file = (FILE *)ptr;
@@ -8144,17 +8746,17 @@ vms_bfd_print_private_bfd_data (bfd *abf
   else
     {
       if (bfd_seek (abfd, 0, SEEK_SET))
-	return FALSE;
+	return false;
       evax_bfd_print_eobj (abfd, file);
     }
-  return TRUE;
+  return true;
 }
 
 /* Linking.  */
 
 /* Slurp ETIR/EDBG/ETBT VMS object records.  */
 
-static bfd_boolean
+static bool
 alpha_vms_read_sections_content (bfd *abfd, struct bfd_link_info *info)
 {
   asection *cur_section;
@@ -8163,7 +8765,7 @@ alpha_vms_read_sections_content (bfd *ab
   file_ptr dst_offset;
 
   if (bfd_seek (abfd, 0, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   cur_section = NULL;
   cur_offset = 0;
@@ -8188,13 +8790,13 @@ alpha_vms_read_sections_content (bfd *ab
   while (1)
     {
       int type;
-      bfd_boolean res;
+      bool res;
 
       type = _bfd_vms_get_object_record (abfd);
       if (type < 0)
 	{
 	  vms_debug2 ((2, "next_record failed\n"));
-	  return FALSE;
+	  return false;
 	}
       switch (type)
 	{
@@ -8215,14 +8817,14 @@ alpha_vms_read_sections_content (bfd *ab
 	  dst_offset = PRIV (image_offset);
 	  break;
 	case EOBJ__C_EEOM:
-	  return TRUE;
+	  return true;
 	default:
 	  continue;
 	}
       if (!res)
 	{
 	  vms_debug2 ((2, "slurp eobj type %d failed\n", type));
-	  return FALSE;
+	  return false;
 	}
     }
 }
@@ -8236,41 +8838,49 @@ alpha_vms_sizeof_headers (bfd *abfd ATTR
 
 /* Add a linkage pair fixup at address SECT + OFFSET to SHLIB. */
 
-static void
+static bool
 alpha_vms_add_fixup_lp (struct bfd_link_info *info, bfd *src, bfd *shlib)
 {
   struct alpha_vms_shlib_el *sl;
   asection *sect = PRIV2 (src, image_section);
   file_ptr offset = PRIV2 (src, image_offset);
+  bfd_vma *p;
 
   sl = &VEC_EL (alpha_vms_link_hash (info)->shrlibs,
 		struct alpha_vms_shlib_el, PRIV2 (shlib, shr_index));
-  sl->has_fixups = TRUE;
-  VEC_APPEND_EL (sl->lp, bfd_vma,
-		 sect->output_section->vma + sect->output_offset + offset);
+  sl->has_fixups = true;
+  p = VEC_APPEND (sl->lp, bfd_vma);
+  if (p == NULL)
+    return false;
+  *p = sect->output_section->vma + sect->output_offset + offset;
   sect->output_section->flags |= SEC_RELOC;
+  return true;
 }
 
 /* Add a code address fixup at address SECT + OFFSET to SHLIB. */
 
-static void
+static bool
 alpha_vms_add_fixup_ca (struct bfd_link_info *info, bfd *src, bfd *shlib)
 {
   struct alpha_vms_shlib_el *sl;
   asection *sect = PRIV2 (src, image_section);
   file_ptr offset = PRIV2 (src, image_offset);
+  bfd_vma *p;
 
   sl = &VEC_EL (alpha_vms_link_hash (info)->shrlibs,
 		struct alpha_vms_shlib_el, PRIV2 (shlib, shr_index));
-  sl->has_fixups = TRUE;
-  VEC_APPEND_EL (sl->ca, bfd_vma,
-		 sect->output_section->vma + sect->output_offset + offset);
+  sl->has_fixups = true;
+  p = VEC_APPEND (sl->ca, bfd_vma);
+  if (p == NULL)
+    return false;
+  *p = sect->output_section->vma + sect->output_offset + offset;
   sect->output_section->flags |= SEC_RELOC;
+  return true;
 }
 
 /* Add a quad word relocation fixup at address SECT + OFFSET to SHLIB. */
 
-static void
+static bool
 alpha_vms_add_fixup_qr (struct bfd_link_info *info, bfd *src,
 			bfd *shlib, bfd_vma vec)
 {
@@ -8281,32 +8891,37 @@ alpha_vms_add_fixup_qr (struct bfd_link_
 
   sl = &VEC_EL (alpha_vms_link_hash (info)->shrlibs,
 		struct alpha_vms_shlib_el, PRIV2 (shlib, shr_index));
-  sl->has_fixups = TRUE;
+  sl->has_fixups = true;
   r = VEC_APPEND (sl->qr, struct alpha_vms_vma_ref);
+  if (r == NULL)
+    return false;
   r->vma = sect->output_section->vma + sect->output_offset + offset;
   r->ref = vec;
   sect->output_section->flags |= SEC_RELOC;
+  return true;
 }
 
-static void
+static bool
 alpha_vms_add_fixup_lr (struct bfd_link_info *info ATTRIBUTE_UNUSED,
 			unsigned int shr ATTRIBUTE_UNUSED,
 			bfd_vma vec ATTRIBUTE_UNUSED)
 {
   /* Not yet supported.  */
-  abort ();
+  return false;
 }
 
 /* Add relocation.  FIXME: Not yet emitted.  */
 
-static void
+static bool
 alpha_vms_add_lw_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
+  return false;
 }
 
-static void
+static bool
 alpha_vms_add_qw_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
+  return false;
 }
 
 static struct bfd_hash_entry *
@@ -8336,13 +8951,34 @@ alpha_vms_link_hash_newfunc (struct bfd_
   return (struct bfd_hash_entry *) ret;
 }
 
+static void
+alpha_vms_bfd_link_hash_table_free (bfd *abfd)
+{
+  struct alpha_vms_link_hash_table *t;
+  unsigned i;
+
+  t = (struct alpha_vms_link_hash_table *) abfd->link.hash;
+  for (i = 0; i < VEC_COUNT (t->shrlibs); i++)
+    {
+      struct alpha_vms_shlib_el *shlib;
+
+      shlib = &VEC_EL (t->shrlibs, struct alpha_vms_shlib_el, i);
+      free (&VEC_EL (shlib->ca, bfd_vma, 0));
+      free (&VEC_EL (shlib->lp, bfd_vma, 0));
+      free (&VEC_EL (shlib->qr, struct alpha_vms_vma_ref, 0));
+    }
+  free (&VEC_EL (t->shrlibs, struct alpha_vms_shlib_el, 0));
+
+  _bfd_generic_link_hash_table_free (abfd);
+}
+
 /* Create an Alpha/VMS link hash table.  */
 
 static struct bfd_link_hash_table *
 alpha_vms_bfd_link_hash_table_create (bfd *abfd)
 {
   struct alpha_vms_link_hash_table *ret;
-  bfd_size_type amt = sizeof (struct alpha_vms_link_hash_table);
+  size_t amt = sizeof (struct alpha_vms_link_hash_table);
 
   ret = (struct alpha_vms_link_hash_table *) bfd_malloc (amt);
   if (ret == NULL)
@@ -8357,11 +8993,12 @@ alpha_vms_bfd_link_hash_table_create (bf
 
   VEC_INIT (ret->shrlibs);
   ret->fixup = NULL;
+  ret->root.hash_table_free = alpha_vms_bfd_link_hash_table_free;
 
   return &ret->root;
 }
 
-static bfd_boolean
+static bool
 alpha_vms_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   unsigned int i;
@@ -8374,14 +9011,14 @@ alpha_vms_link_add_object_symbols (bfd *
       asymbol sym;
 
       if (!alpha_vms_convert_symbol (abfd, e, &sym))
-	return FALSE;
+	return false;
 
       if ((e->flags & EGSY__V_DEF) && abfd->selective_search)
 	{
 	  /* In selective_search mode, only add definition that are
 	     required.  */
 	  h = (struct alpha_vms_link_hash_entry *)bfd_link_hash_lookup
-	    (info->hash, sym.name, FALSE, FALSE, FALSE);
+	    (info->hash, sym.name, false, false, false);
 	  if (h == NULL || h->root.type != bfd_link_hash_undefined)
 	    continue;
 	}
@@ -8391,8 +9028,8 @@ alpha_vms_link_add_object_symbols (bfd *
       h_root = (struct bfd_link_hash_entry *) h;
       if (!_bfd_generic_link_add_one_symbol (info, abfd, sym.name, sym.flags,
 					     sym.section, sym.value, NULL,
-					     FALSE, FALSE, &h_root))
-	return FALSE;
+					     false, false, &h_root))
+	return false;
       h = (struct alpha_vms_link_hash_entry *) h_root;
 
       if ((e->flags & EGSY__V_DEF)
@@ -8411,6 +9048,8 @@ alpha_vms_link_add_object_symbols (bfd *
 
       shlib = VEC_APPEND (alpha_vms_link_hash (info)->shrlibs,
 			  struct alpha_vms_shlib_el);
+      if (shlib == NULL)
+	return false;
       shlib->abfd = abfd;
       VEC_INIT (shlib->ca);
       VEC_INIT (shlib->lp);
@@ -8418,10 +9057,10 @@ alpha_vms_link_add_object_symbols (bfd *
       PRIV (shr_index) = VEC_COUNT (alpha_vms_link_hash (info)->shrlibs) - 1;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 alpha_vms_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   int pass;
@@ -8432,7 +9071,7 @@ alpha_vms_link_add_archive_symbols (bfd
   if (info->output_bfd->xvec != abfd->xvec)
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   /* The archive_pass field in the archive itself is used to
@@ -8479,7 +9118,7 @@ alpha_vms_link_add_archive_symbols (bfd
 
       element = bfd_get_elt_at_index (abfd, symidx);
       if (element == NULL)
-	return FALSE;
+	return false;
 
       if (element->archive_pass == -1 || element->archive_pass == pass)
 	{
@@ -8490,7 +9129,7 @@ alpha_vms_link_add_archive_symbols (bfd
       if (! bfd_check_format (element, bfd_object))
 	{
 	  element->archive_pass = -1;
-	  return FALSE;
+	  return false;
 	}
 
       orig_element = element;
@@ -8500,7 +9139,7 @@ alpha_vms_link_add_archive_symbols (bfd
 	  if (element == NULL || !bfd_check_format (element, bfd_object))
 	    {
 	      orig_element->archive_pass = -1;
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -8511,15 +9150,15 @@ alpha_vms_link_add_archive_symbols (bfd
 	    ->add_archive_element) (info, element, h->root.string, &element))
 	continue;
       if (!alpha_vms_link_add_object_symbols (element, info))
-	return FALSE;
+	return false;
 
       orig_element->archive_pass = pass;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 alpha_vms_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   switch (bfd_get_format (abfd))
@@ -8536,11 +9175,11 @@ alpha_vms_bfd_link_add_symbols (bfd *abf
       break;
     default:
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 }
 
-static bfd_boolean
+static bool
 alpha_vms_build_fixups (struct bfd_link_info *info)
 {
   struct alpha_vms_link_hash_table *t = alpha_vms_link_hash (info);
@@ -8598,7 +9237,7 @@ alpha_vms_build_fixups (struct bfd_link_
 
   /* Finish now if there is no content.  */
   if (ca_sz + lp_sz + qr_sz == 0)
-    return TRUE;
+    return true;
 
   /* Add an eicp entry for the fixup itself.  */
   chgprt_num = 1;
@@ -8617,7 +9256,7 @@ alpha_vms_build_fixups (struct bfd_link_
   sz = (sz + VMS_BLOCK_SIZE - 1) & ~(VMS_BLOCK_SIZE - 1);
   content = bfd_zalloc (info->output_bfd, sz);
   if (content == NULL)
-    return FALSE;
+    return false;
 
   sec = alpha_vms_link_hash (info)->fixup;
   sec->contents = content;
@@ -8805,13 +9444,13 @@ alpha_vms_build_fixups (struct bfd_link_
       off += sizeof (struct vms_eicp);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Called by bfd_hash_traverse to fill the symbol table.
    Return FALSE in case of failure.  */
 
-static bfd_boolean
+static bool
 alpha_vms_link_output_symbol (struct bfd_hash_entry *bh, void *infov)
 {
   struct bfd_link_hash_entry *hc = (struct bfd_link_hash_entry *) bh;
@@ -8823,19 +9462,19 @@ alpha_vms_link_output_symbol (struct bfd
     {
       hc = hc->u.i.link;
       if (hc->type == bfd_link_hash_new)
-	return TRUE;
+	return true;
     }
   h = (struct alpha_vms_link_hash_entry *) hc;
 
   switch (h->root.type)
     {
     case bfd_link_hash_undefined:
-      return TRUE;
+      return true;
     case bfd_link_hash_new:
     case bfd_link_hash_warning:
       abort ();
     case bfd_link_hash_undefweak:
-      return TRUE;
+      return true;
     case bfd_link_hash_defined:
     case bfd_link_hash_defweak:
       {
@@ -8843,23 +9482,23 @@ alpha_vms_link_output_symbol (struct bfd
 
 	/* FIXME: this is certainly a symbol from a dynamic library.  */
 	if (bfd_is_abs_section (sec))
-	  return TRUE;
+	  return true;
 
 	if (sec->owner->flags & DYNAMIC)
-	  return TRUE;
+	  return true;
       }
       break;
     case bfd_link_hash_common:
       break;
     case bfd_link_hash_indirect:
-      return TRUE;
+      return true;
     }
 
   /* Do not write not kept symbols.  */
   if (info->strip == strip_some
       && bfd_hash_lookup (info->keep_hash, h->root.root.string,
-			  FALSE, FALSE) != NULL)
-    return TRUE;
+			  false, false) != NULL)
+    return true;
 
   if (h->sym == NULL)
     {
@@ -8887,12 +9526,12 @@ alpha_vms_link_output_symbol (struct bfd
     sym = h->sym;
 
   if (!add_symbol_entry (info->output_bfd, sym))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 alpha_vms_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   asection *o;
@@ -8909,7 +9548,7 @@ alpha_vms_bfd_final_link (bfd *abfd, str
       /* FIXME: we do not yet support relocatable link.  It is not obvious
 	 how to do it for debug infos.  */
       (*info->callbacks->einfo)(_("%P: relocatable link is not supported\n"));
-      return FALSE;
+      return false;
     }
 
   abfd->outsymbols = NULL;
@@ -8919,7 +9558,7 @@ alpha_vms_bfd_final_link (bfd *abfd, str
   for (o = abfd->sections; o != NULL; o = o->next)
     for (p = o->map_head.link_order; p != NULL; p = p->next)
       if (p->type == bfd_indirect_link_order)
-	p->u.indirect.section->linker_mark = TRUE;
+	p->u.indirect.section->linker_mark = true;
 
 #if 0
   /* Handle all the link order information for the sections.  */
@@ -9006,7 +9645,7 @@ alpha_vms_bfd_final_link (bfd *abfd, str
 
     i = 0;
     PRIV (transfer_address[i++]) = 0xffffffff00000340ULL;	/* SYS$IMGACT */
-    h = bfd_link_hash_lookup (info->hash, "LIB$INITIALIZE", FALSE, FALSE, TRUE);
+    h = bfd_link_hash_lookup (info->hash, "LIB$INITIALIZE", false, false, true);
     if (h != NULL && h->type == bfd_link_hash_defined)
       PRIV (transfer_address[i++]) =
 	alpha_vms_get_sym_value (h->u.def.section, h->u.def.value);
@@ -9025,7 +9664,7 @@ alpha_vms_bfd_final_link (bfd *abfd, str
 	{
 	  o->contents = bfd_alloc (abfd, o->size);
 	  if (o->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
       if (o->flags & SEC_LOAD)
 	{
@@ -9044,7 +9683,7 @@ alpha_vms_bfd_final_link (bfd *abfd, str
     (info->output_bfd, "$FIXUP$",
      SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_LINKER_CREATED);
   if (fixupsec == NULL)
-    return FALSE;
+    return false;
   last_addr = (last_addr + 0xffff) & ~0xffff;
   fixupsec->vma = last_addr;
 
@@ -9063,7 +9702,7 @@ alpha_vms_bfd_final_link (bfd *abfd, str
 	(info->output_bfd, "$DMT$",
 	 SEC_DEBUGGING | SEC_HAS_CONTENTS | SEC_LINKER_CREATED);
       if (dmt == NULL)
-	return FALSE;
+	return false;
     }
   else
     dmt = NULL;
@@ -9078,7 +9717,7 @@ alpha_vms_bfd_final_link (bfd *abfd, str
 	}
 
       if (!alpha_vms_read_sections_content (sub, info))
-	return FALSE;
+	return false;
     }
 
   /* Handle all the link order information for the sections.
@@ -9092,13 +9731,13 @@ alpha_vms_bfd_final_link (bfd *abfd, str
 	    case bfd_section_reloc_link_order:
 	    case bfd_symbol_reloc_link_order:
 	      abort ();
-	      return FALSE;
+	      return false;
 	    case bfd_indirect_link_order:
 	      /* Already done.  */
 	      break;
 	    default:
 	      if (! _bfd_default_link_order (abfd, info, o, p))
-		return FALSE;
+		return false;
 	      break;
 	    }
 	}
@@ -9106,7 +9745,7 @@ alpha_vms_bfd_final_link (bfd *abfd, str
 
   /* Compute fixups.  */
   if (!alpha_vms_build_fixups (info))
-    return FALSE;
+    return false;
 
   /* Compute the DMT.  */
   if (dmt != NULL)
@@ -9172,7 +9811,7 @@ alpha_vms_bfd_final_link (bfd *abfd, str
 	    {
 	      contents = bfd_zalloc (info->output_bfd, off);
 	      if (contents == NULL)
-		return FALSE;
+		return false;
 	      dmt->contents = contents;
 	      dmt->size = off;
 	    }
@@ -9183,14 +9822,14 @@ alpha_vms_bfd_final_link (bfd *abfd, str
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read the contents of a section.
    buf points to a buffer of buf_size bytes to be filled with
    section data (starting at offset into section)  */
 
-static bfd_boolean
+static bool
 alpha_vms_get_section_contents (bfd *abfd, asection *section,
 				void *buf, file_ptr offset,
 				bfd_size_type count)
@@ -9207,7 +9846,7 @@ alpha_vms_get_section_contents (bfd *abf
       || offset + count > section->size)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   /* If the section is already in memory, just copy it.  */
@@ -9215,10 +9854,10 @@ alpha_vms_get_section_contents (bfd *abf
     {
       BFD_ASSERT (section->contents != NULL);
       memcpy (buf, section->contents + offset, count);
-      return TRUE;
+      return true;
     }
   if (section->size == 0)
-    return TRUE;
+    return true;
 
   /* Alloc in memory and read ETIRs.  */
   for (sec = abfd->sections; sec; sec = sec->next)
@@ -9229,22 +9868,22 @@ alpha_vms_get_section_contents (bfd *abf
 	{
 	  sec->contents = bfd_alloc (abfd, sec->size);
 	  if (sec->contents == NULL)
-	    return FALSE;
+	    return false;
 	}
     }
   if (!alpha_vms_read_sections_content (abfd, NULL))
-    return FALSE;
+    return false;
   for (sec = abfd->sections; sec; sec = sec->next)
     if (sec->contents)
       sec->flags |= SEC_IN_MEMORY;
   memcpy (buf, section->contents + offset, count);
-  return TRUE;
+  return true;
 }
 
 
 /* Set the format of a file being written.  */
 
-static bfd_boolean
+static bool
 alpha_vms_mkobject (bfd * abfd)
 {
   const bfd_arch_info_type *arch;
@@ -9252,22 +9891,22 @@ alpha_vms_mkobject (bfd * abfd)
   vms_debug2 ((1, "alpha_vms_mkobject (%p)\n", abfd));
 
   if (!vms_initialize (abfd))
-    return FALSE;
+    return false;
 
   PRIV (recwr.buf) = bfd_alloc (abfd, MAX_OUTREC_SIZE);
   if (PRIV (recwr.buf) == NULL)
-    return FALSE;
+    return false;
 
   arch = bfd_scan_arch ("alpha");
 
   if (arch == 0)
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   abfd->arch_info = arch;
-  return TRUE;
+  return true;
 }
 
 
@@ -9275,64 +9914,53 @@ alpha_vms_mkobject (bfd * abfd)
 
 /* Called when the BFD is being closed to do any necessary cleanup.  */
 
-static bfd_boolean
+static bool
 vms_close_and_cleanup (bfd * abfd)
 {
   vms_debug2 ((1, "vms_close_and_cleanup (%p)\n", abfd));
 
   if (abfd == NULL || abfd->tdata.any == NULL)
-    return TRUE;
+    return true;
 
-  if (abfd->format == bfd_archive)
+  if (abfd->format == bfd_object)
     {
-      bfd_release (abfd, abfd->tdata.any);
-      abfd->tdata.any = NULL;
-      return TRUE;
-    }
-
-  if (PRIV (recrd.buf) != NULL)
-    free (PRIV (recrd.buf));
-
-  if (PRIV (sections) != NULL)
-    free (PRIV (sections));
-
-  bfd_release (abfd, abfd->tdata.any);
-  abfd->tdata.any = NULL;
+      alpha_vms_free_private (abfd);
 
 #ifdef VMS
-  if (abfd->direction == write_direction)
-    {
-      /* Last step on VMS is to convert the file to variable record length
-	 format.  */
-      if (!bfd_cache_close (abfd))
-	return FALSE;
-      if (!_bfd_vms_convert_to_var_unix_filename (abfd->filename))
-	return FALSE;
-    }
+      if (abfd->direction == write_direction)
+	{
+	  /* Last step on VMS is to convert the file to variable record length
+	     format.  */
+	  if (!bfd_cache_close (abfd))
+	    return false;
+	  if (!_bfd_vms_convert_to_var_unix_filename (abfd->filename))
+	    return false;
+	}
 #endif
+    }
 
-  return TRUE;
+  return _bfd_generic_close_and_cleanup (abfd);
 }
 
 /* Called when a new section is created.  */
 
-static bfd_boolean
+static bool
 vms_new_section_hook (bfd * abfd, asection *section)
 {
-  bfd_size_type amt;
+  size_t amt;
 
   vms_debug2 ((1, "vms_new_section_hook (%p, [%u]%s)\n",
 	       abfd, section->index, section->name));
 
   if (!bfd_set_section_alignment (section, 0))
-    return FALSE;
+    return false;
 
   vms_debug2 ((7, "%u: %s\n", section->index, section->name));
 
   amt = sizeof (struct vms_section_data_struct);
   section->used_by_bfd = bfd_zalloc (abfd, amt);
   if (section->used_by_bfd == NULL)
-    return FALSE;
+    return false;
 
   /* Create the section symbol.  */
   return _bfd_generic_new_section_hook (abfd, section);
@@ -9431,7 +10059,7 @@ vms_get_symbol_info (bfd * abfd ATTRIBUT
 /* Return TRUE if the given symbol sym in the BFD abfd is
    a compiler generated local label, else return FALSE.  */
 
-static bfd_boolean
+static bool
 vms_bfd_is_local_label_name (bfd * abfd ATTRIBUTE_UNUSED,
 			     const char *name)
 {
@@ -9449,7 +10077,7 @@ vms_bfd_is_local_label_name (bfd * abfd
 	SEC_HAS_CONTENTS attribute, so nothing can be written to it.
    o and some more too  */
 
-static bfd_boolean
+static bool
 _bfd_vms_set_section_contents (bfd * abfd,
 			       asection *section,
 			       const void * location,
@@ -9460,25 +10088,25 @@ _bfd_vms_set_section_contents (bfd * abf
     {
       section->contents = bfd_alloc (abfd, section->size);
       if (section->contents == NULL)
-	return FALSE;
+	return false;
 
       memcpy (section->contents + offset, location, (size_t) count);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Set the architecture and machine type in BFD abfd to arch and mach.
    Find the correct pointer to a structure and insert it into the arch_info
    pointer.  */
 
-static bfd_boolean
+static bool
 alpha_vms_set_arch_mach (bfd *abfd,
 			 enum bfd_architecture arch, unsigned long mach)
 {
   if (arch != bfd_arch_alpha
       && arch != bfd_arch_unknown)
-    return FALSE;
+    return false;
 
   return bfd_default_set_arch_mach (abfd, arch, mach);
 }
@@ -9499,25 +10127,12 @@ bfd_vms_get_data (bfd *abfd)
   return (struct vms_private_data_struct *)abfd->tdata.any;
 }
 
-#define vms_bfd_is_target_special_symbol  _bfd_bool_bfd_asymbol_false
-#define vms_bfd_link_just_syms		  _bfd_generic_link_just_syms
-#define vms_bfd_copy_link_hash_symbol_type \
-  _bfd_generic_copy_link_hash_symbol_type
-#define vms_bfd_is_group_section	  bfd_generic_is_group_section
-#define vms_bfd_group_name		  bfd_generic_group_name
-#define vms_bfd_discard_group		  bfd_generic_discard_group
-#define vms_section_already_linked	  _bfd_generic_section_already_linked
-#define vms_bfd_define_common_symbol	  bfd_generic_define_common_symbol
-#define vms_bfd_link_hide_symbol	  _bfd_generic_link_hide_symbol
-#define vms_bfd_define_start_stop         bfd_generic_define_start_stop
-#define vms_bfd_copy_private_header_data  _bfd_generic_bfd_copy_private_header_data
-
 #define vms_bfd_copy_private_bfd_data	  _bfd_generic_bfd_copy_private_bfd_data
-#define vms_bfd_free_cached_info	  _bfd_generic_bfd_free_cached_info
+#define vms_bfd_merge_private_bfd_data	  _bfd_generic_bfd_merge_private_bfd_data
 #define vms_bfd_copy_private_section_data _bfd_generic_bfd_copy_private_section_data
 #define vms_bfd_copy_private_symbol_data  _bfd_generic_bfd_copy_private_symbol_data
+#define vms_bfd_copy_private_header_data  _bfd_generic_bfd_copy_private_header_data
 #define vms_bfd_set_private_flags	  _bfd_generic_bfd_set_private_flags
-#define vms_bfd_merge_private_bfd_data	  _bfd_generic_bfd_merge_private_bfd_data
 
 /* Symbols table.  */
 #define alpha_vms_make_empty_symbol	   _bfd_generic_make_empty_symbol
@@ -9533,12 +10148,14 @@ bfd_vms_get_data (bfd *abfd)
 #define alpha_vms_find_inliner_info	   _bfd_nosymbols_find_inliner_info
 #define alpha_vms_bfd_make_debug_symbol	   _bfd_nosymbols_bfd_make_debug_symbol
 #define alpha_vms_find_nearest_line	   _bfd_vms_find_nearest_line
+#define alpha_vms_find_nearest_line_with_alt \
+   _bfd_nosymbols_find_nearest_line_with_alt
 #define alpha_vms_find_line		   _bfd_nosymbols_find_line
 #define alpha_vms_bfd_is_local_label_name  vms_bfd_is_local_label_name
 
 /* Generic table.  */
 #define alpha_vms_close_and_cleanup	   vms_close_and_cleanup
-#define alpha_vms_bfd_free_cached_info	   vms_bfd_free_cached_info
+#define alpha_vms_bfd_free_cached_info	   _bfd_bool_bfd_true
 #define alpha_vms_new_section_hook	   vms_new_section_hook
 #define alpha_vms_set_section_contents	   _bfd_vms_set_section_contents
 #define alpha_vms_get_section_contents_in_window _bfd_generic_get_section_contents_in_window
@@ -9591,6 +10208,7 @@ const bfd_target alpha_vms_vec =
   ' ',				/* ar_pad_char.  */
   15,				/* ar_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
   bfd_getl16, bfd_getl_signed_16, bfd_putl16,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vms.h ./bfd/vms.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vms.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/vms.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* vms.h -- Header file for VMS (Alpha and Vax) support.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    Main header file.
 
@@ -98,7 +98,7 @@ struct evax_private_udata_struct
 
 /* vms-misc.c.  */
 
-#define VMS_DEBUG 1
+#define VMS_DEBUG 0
 
 #if VMS_DEBUG
 extern void _bfd_vms_debug (int, char *, ...) ATTRIBUTE_PRINTF_2;
@@ -110,21 +110,21 @@ extern void _bfd_hexdump   (int, unsigne
 #define vms_debug2(X)
 #endif
 
-extern char * vms_get_module_name (const char *, bfd_boolean);
-extern unsigned char *get_vms_time_string (void);
+extern char * vms_get_module_name (const char *, bool);
+extern unsigned char *get_vms_time_string (unsigned char *);
 extern time_t vms_time_to_time_t (unsigned int hi, unsigned int lo);
 extern time_t vms_rawtime_to_time_t (unsigned char *);
 extern void vms_time_t_to_vms_time (time_t ut, unsigned int *hi, unsigned int *lo);
 extern void vms_get_time (unsigned int *hi, unsigned int *lo);
 extern void vms_raw_get_time (unsigned char *buf);
 
-extern char * _bfd_vms_save_sized_string (unsigned char *, unsigned);
-extern char * _bfd_vms_save_counted_string (unsigned char *, unsigned);
+extern char * _bfd_vms_save_sized_string (bfd *, unsigned char *, size_t);
+extern char * _bfd_vms_save_counted_string (bfd *, unsigned char *, size_t);
 extern void   _bfd_vms_output_begin (struct vms_rec_wr *, int);
 extern void   _bfd_vms_output_alignment (struct vms_rec_wr *, int);
 extern void   _bfd_vms_output_begin_subrec (struct vms_rec_wr *, int);
 extern void   _bfd_vms_output_end_subrec (struct vms_rec_wr *);
-extern void   _bfd_vms_output_end (bfd *, struct vms_rec_wr *);
+extern bool   _bfd_vms_output_end (bfd *, struct vms_rec_wr *);
 extern int    _bfd_vms_output_check (struct vms_rec_wr *, int);
 extern void   _bfd_vms_output_byte (struct vms_rec_wr *, unsigned);
 extern void   _bfd_vms_output_short (struct vms_rec_wr *, unsigned);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vms-lib.c ./bfd/vms-lib.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vms-lib.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/vms-lib.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD back-end for VMS archive files.
 
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2024 Free Software Foundation, Inc.
    Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -120,50 +120,66 @@ struct carsym_mem
   /* Maximum number of entries.  */
   unsigned int max;
 
+  /* Do not allocate more that this number of entries.  */
+  unsigned int limit;
+
   /* If true, the table was reallocated on the heap.  If false, it is still
      in the BFD's objalloc.  */
-  bfd_boolean realloced;
+  bool realloced;
 };
 
 /* Simply add a name to the index.  */
 
-static bfd_boolean
+static bool
 vms_add_index (struct carsym_mem *cs, char *name,
 	       unsigned int idx_vbn, unsigned int idx_off)
 {
   if (cs->nbr == cs->max)
     {
       struct carsym *n;
+      size_t amt;
 
+      if (cs->max > -33u / 2 || cs->max >= cs->limit)
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  return false;
+	}
       cs->max = 2 * cs->max + 32;
+      if (cs->max > cs->limit)
+	cs->max = cs->limit;
+      if (_bfd_mul_overflow (cs->max, sizeof (struct carsym), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  return false;
+	}
 
       if (!cs->realloced)
 	{
-	  n = bfd_malloc2 (cs->max, sizeof (struct carsym));
+	  n = bfd_malloc (amt);
 	  if (n == NULL)
-	    return FALSE;
+	    return false;
 	  memcpy (n, cs->idx, cs->nbr * sizeof (struct carsym));
 	  /* And unfortunately we can't free cs->idx.  */
 	}
       else
 	{
-	  n = bfd_realloc_or_free (cs->idx, cs->nbr * sizeof (struct carsym));
+	  n = bfd_realloc_or_free (cs->idx, amt);
 	  if (n == NULL)
-	    return FALSE;
+	    return false;
 	}
       cs->idx = n;
-      cs->realloced = TRUE;
+      cs->realloced = true;
     }
   cs->idx[cs->nbr].file_offset = (idx_vbn - 1) * VMS_BLOCK_SIZE + idx_off;
   cs->idx[cs->nbr].name = name;
   cs->nbr++;
-  return TRUE;
+  return true;
 }
 
 /* Follow all member of a lns list (pointed by RFA) and add indexes for
    NAME.  Return FALSE in case of error.  */
 
-static bfd_boolean
+static bool
 vms_add_indexes_from_list (bfd *abfd, struct carsym_mem *cs, char *name,
 			   struct vms_rfa *rfa)
 {
@@ -175,18 +191,18 @@ vms_add_indexes_from_list (bfd *abfd, st
     {
       vbn = bfd_getl32 (rfa->vbn);
       if (vbn == 0)
-	return TRUE;
+	return true;
 
       /* Read the LHS.  */
       off = (vbn - 1) * VMS_BLOCK_SIZE + bfd_getl16 (rfa->offset);
       if (bfd_seek (abfd, off, SEEK_SET) != 0
-	  || bfd_bread (&lns, sizeof (lns), abfd) != sizeof (lns))
-	return FALSE;
+	  || bfd_read (&lns, sizeof (lns), abfd) != sizeof (lns))
+	return false;
 
       if (!vms_add_index (cs, name,
 			  bfd_getl32 (lns.modrfa.vbn),
 			  bfd_getl16 (lns.modrfa.offset)))
-	return FALSE;
+	return false;
 
       rfa = &lns.nxtrfa;
     }
@@ -194,53 +210,64 @@ vms_add_indexes_from_list (bfd *abfd, st
 
 /* Read block VBN from ABFD and store it into BLK.  Return FALSE in case of error.  */
 
-static bfd_boolean
+static bool
 vms_read_block (bfd *abfd, unsigned int vbn, void *blk)
 {
   file_ptr off;
 
   off = (vbn - 1) * VMS_BLOCK_SIZE;
   if (bfd_seek (abfd, off, SEEK_SET) != 0
-      || bfd_bread (blk, VMS_BLOCK_SIZE, abfd) != VMS_BLOCK_SIZE)
-    return FALSE;
+      || bfd_read (blk, VMS_BLOCK_SIZE, abfd) != VMS_BLOCK_SIZE)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Write the content of BLK to block VBN of ABFD.  Return FALSE in case of error.  */
 
-static bfd_boolean
+static bool
 vms_write_block (bfd *abfd, unsigned int vbn, void *blk)
 {
   file_ptr off;
 
   off = (vbn - 1) * VMS_BLOCK_SIZE;
   if (bfd_seek (abfd, off, SEEK_SET) != 0
-      || bfd_bwrite (blk, VMS_BLOCK_SIZE, abfd) != VMS_BLOCK_SIZE)
-    return FALSE;
+      || bfd_write (blk, VMS_BLOCK_SIZE, abfd) != VMS_BLOCK_SIZE)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Read index block VBN and put the entry in **IDX (which is updated).
    If the entry is indirect, recurse.  */
 
-static bfd_boolean
-vms_traverse_index (bfd *abfd, unsigned int vbn, struct carsym_mem *cs)
+static bool
+vms_traverse_index (bfd *abfd, unsigned int vbn, struct carsym_mem *cs,
+		    unsigned int recur_count)
 {
   struct vms_indexdef indexdef;
   file_ptr off;
   unsigned char *p;
   unsigned char *endp;
+  unsigned int n;
+
+  if (recur_count == 100)
+    {
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
 
   /* Read the index block.  */
   BFD_ASSERT (sizeof (indexdef) == VMS_BLOCK_SIZE);
   if (!vms_read_block (abfd, vbn, &indexdef))
-    return FALSE;
+    return false;
 
   /* Traverse it.  */
   p = &indexdef.keys[0];
-  endp = p + bfd_getl16 (indexdef.used);
+  n = bfd_getl16 (indexdef.used);
+  if (n > sizeof (indexdef.keys))
+    return false;
+  endp = p + n;
   while (p < endp)
     {
       unsigned int idx_vbn;
@@ -250,7 +277,8 @@ vms_traverse_index (bfd *abfd, unsigned
       unsigned int flags;
 
       /* Extract key length.  */
-      if (bfd_libdata (abfd)->ver == LBR_MAJORID)
+      if (bfd_libdata (abfd)->ver == LBR_MAJORID
+	  && offsetof (struct vms_idx, keyname) <= (size_t) (endp - p))
 	{
 	  struct vms_idx *ridx = (struct vms_idx *)p;
 
@@ -261,7 +289,8 @@ vms_traverse_index (bfd *abfd, unsigned
 	  flags = 0;
 	  keyname = ridx->keyname;
 	}
-      else if (bfd_libdata (abfd)->ver == LBR_ELFMAJORID)
+      else if (bfd_libdata (abfd)->ver == LBR_ELFMAJORID
+	       && offsetof (struct vms_elfidx, keyname) <= (size_t) (endp - p))
 	{
 	  struct vms_elfidx *ridx = (struct vms_elfidx *)p;
 
@@ -273,20 +302,22 @@ vms_traverse_index (bfd *abfd, unsigned
 	  keyname = ridx->keyname;
 	}
       else
-	return FALSE;
+	return false;
 
       /* Illegal value.  */
       if (idx_vbn == 0)
-	return FALSE;
+	return false;
 
       /* Point to the next index entry.  */
       p = keyname + keylen;
+      if (p > endp)
+	return false;
 
       if (idx_off == RFADEF__C_INDEX)
 	{
 	  /* Indirect entry.  Recurse.  */
-	  if (!vms_traverse_index (abfd, idx_vbn, cs))
-	    return FALSE;
+	  if (!vms_traverse_index (abfd, idx_vbn, cs, recur_count + 1))
+	    return false;
 	}
       else
 	{
@@ -304,14 +335,14 @@ vms_traverse_index (bfd *abfd, unsigned
 
 	      /* Sanity check.  */
 	      if (keylen != sizeof (struct vms_kbn))
-		return FALSE;
+		return false;
 
 	      kbn = (struct vms_kbn *)keyname;
 	      keylen = bfd_getl16 (kbn->keylen);
 
 	      name = bfd_alloc (abfd, keylen + 1);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 	      kvbn = bfd_getl32 (kbn->rfa.vbn);
 	      koff = bfd_getl16 (kbn->rfa.offset);
 
@@ -321,12 +352,18 @@ vms_traverse_index (bfd *abfd, unsigned
 		  unsigned int klen;
 
 		  if (!vms_read_block (abfd, kvbn, kblk))
-		    return FALSE;
+		    return false;
+		  if (koff > sizeof (kblk) - sizeof (struct vms_kbn))
+		    return false;
 		  kbn = (struct vms_kbn *)(kblk + koff);
 		  klen = bfd_getl16 (kbn->keylen);
+		  if (klen > sizeof (kblk) - sizeof (struct vms_kbn) - koff)
+		    return false;
 		  kvbn = bfd_getl32 (kbn->rfa.vbn);
 		  koff = bfd_getl16 (kbn->rfa.offset);
 
+		  if (noff + klen > keylen)
+		    return false;
 		  memcpy (name + noff, kbn + 1, klen);
 		  noff += klen;
 		}
@@ -334,14 +371,14 @@ vms_traverse_index (bfd *abfd, unsigned
 
 	      /* Sanity check.  */
 	      if (noff != keylen)
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
 	      /* Usual key name.  */
 	      name = bfd_alloc (abfd, keylen + 1);
 	      if (name == NULL)
-		return FALSE;
+		return false;
 
 	      memcpy (name, keyname, keylen);
 	    }
@@ -354,28 +391,28 @@ vms_traverse_index (bfd *abfd, unsigned
 	      /* Read the LHS.  */
 	      off = (idx_vbn - 1) * VMS_BLOCK_SIZE + idx_off;
 	      if (bfd_seek (abfd, off, SEEK_SET) != 0
-		  || bfd_bread (&lhs, sizeof (lhs), abfd) != sizeof (lhs))
-		return FALSE;
+		  || bfd_read (&lhs, sizeof (lhs), abfd) != sizeof (lhs))
+		return false;
 
-	      /* FIXME: this adds extra entries that were not accounted.  */
+	      /* These extra entries may cause reallocation of CS.  */
 	      if (!vms_add_indexes_from_list (abfd, cs, name, &lhs.ng_g_rfa))
-		return FALSE;
+		return false;
 	      if (!vms_add_indexes_from_list (abfd, cs, name, &lhs.ng_wk_rfa))
-		return FALSE;
+		return false;
 	      if (!vms_add_indexes_from_list (abfd, cs, name, &lhs.g_g_rfa))
-		return FALSE;
+		return false;
 	      if (!vms_add_indexes_from_list (abfd, cs, name, &lhs.g_wk_rfa))
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
 	      if (!vms_add_index (cs, name, idx_vbn, idx_off))
-		return FALSE;
+		return false;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Read index #IDX, which must have NBREL entries.  */
@@ -386,12 +423,14 @@ vms_lib_read_index (bfd *abfd, int idx,
   struct vms_idd idd;
   unsigned int flags;
   unsigned int vbn;
+  ufile_ptr filesize;
+  size_t amt;
   struct carsym *csbuf;
   struct carsym_mem csm;
 
   /* Read index desription.  */
   if (bfd_seek (abfd, LHD_IDXDESC + idx * IDD_LENGTH, SEEK_SET) != 0
-      || bfd_bread (&idd, sizeof (idd), abfd) != sizeof (idd))
+      || bfd_read (&idd, sizeof (idd), abfd) != sizeof (idd))
     return NULL;
 
   /* Sanity checks.  */
@@ -400,20 +439,33 @@ vms_lib_read_index (bfd *abfd, int idx,
       || !(flags & IDD__FLAGS_VARLENIDX))
     return NULL;
 
-  csbuf = bfd_alloc (abfd, *nbrel * sizeof (struct carsym));
-  if (csbuf == NULL)
-    return NULL;
-
-  csm.max = *nbrel;
+  filesize = bfd_get_file_size (abfd);
   csm.nbr = 0;
-  csm.realloced = FALSE;
-  csm.idx = csbuf;
+  csm.max = *nbrel;
+  csm.limit = -1u;
+  csm.realloced = false;
+  if (filesize != 0)
+    {
+      /* Put an upper bound based on a file full of single char keys.
+	 This is to prevent fuzzed binary silliness.  It is easily
+	 possible to set up loops over file blocks that add syms
+	 without end.  */
+      if (filesize / (sizeof (struct vms_rfa) + 2) <= -1u)
+	csm.limit = filesize / (sizeof (struct vms_rfa) + 2);
+    }
+  if (csm.max > csm.limit)
+    csm.max = csm.limit;
+  if (_bfd_mul_overflow (csm.max, sizeof (struct carsym), &amt))
+    return NULL;
+  csm.idx = csbuf = bfd_alloc (abfd, amt);
+  if (csm.idx == NULL)
+    return NULL;
 
   /* Note: if the index is empty, there is no block to traverse.  */
   vbn = bfd_getl32 (idd.vbn);
-  if (vbn != 0 && !vms_traverse_index (abfd, vbn, &csm))
+  if (vbn != 0 && !vms_traverse_index (abfd, vbn, &csm, 0))
     {
-      if (csm.realloced && csm.idx != NULL)
+      if (csm.realloced)
 	free (csm.idx);
 
       /* Note: in case of error, we can free what was allocated on the
@@ -428,17 +480,21 @@ vms_lib_read_index (bfd *abfd, int idx,
 	 the BFD's objalloc.  */
       csbuf = bfd_alloc (abfd, csm.nbr * sizeof (struct carsym));
       if (csbuf == NULL)
-	return NULL;
+	{
+	  free (csm.idx);
+	  return NULL;
+	}
       memcpy (csbuf, csm.idx, csm.nbr * sizeof (struct carsym));
       free (csm.idx);
-      *nbrel = csm.nbr;
+      csm.idx = csbuf;
     }
-  return csbuf;
+  *nbrel = csm.nbr;
+  return csm.idx;
 }
 
 /* Standard function.  */
 
-static const bfd_target *
+static bfd_cleanup
 _bfd_vms_lib_archive_p (bfd *abfd, enum vms_lib_kind kind)
 {
   struct vms_lhd lhd;
@@ -450,7 +506,7 @@ _bfd_vms_lib_archive_p (bfd *abfd, enum
   unsigned int nbr_ent;
 
   /* Read header.  */
-  if (bfd_bread (&lhd, sizeof (lhd), abfd) != sizeof (lhd))
+  if (bfd_read (&lhd, sizeof (lhd), abfd) != sizeof (lhd))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -553,18 +609,15 @@ _bfd_vms_lib_archive_p (bfd *abfd, enum
       unsigned int i;
 
       if (bfd_seek (abfd, (dcxvbn - 1) * VMS_BLOCK_SIZE, SEEK_SET) != 0
-	  || bfd_bread (buf_reclen, sizeof (buf_reclen), abfd)
+	  || bfd_read (buf_reclen, sizeof (buf_reclen), abfd)
 	  != sizeof (buf_reclen))
 	goto err;
       reclen = bfd_getl32 (buf_reclen);
-      buf = bfd_malloc (reclen);
+      if (reclen < sizeof (struct vms_dcxmap))
+	goto err;
+      buf = _bfd_malloc_and_read (abfd, reclen, reclen);
       if (buf == NULL)
 	goto err;
-      if (bfd_bread (buf, reclen, abfd) != reclen)
-	{
-	  free (buf);
-	  goto err;
-	}
       map = (struct vms_dcxmap *)buf;
       tdata->nbr_dcxsbm = bfd_getl16 (map->nsubs);
       sbm_off = bfd_getl16 (map->sub0);
@@ -572,39 +625,57 @@ _bfd_vms_lib_archive_p (bfd *abfd, enum
 	(abfd, tdata->nbr_dcxsbm * sizeof (struct dcxsbm_desc));
       for (i = 0; i < tdata->nbr_dcxsbm; i++)
 	{
-	  struct vms_dcxsbm *sbm = (struct vms_dcxsbm *) (buf + sbm_off);
+	  struct vms_dcxsbm *sbm;
 	  struct dcxsbm_desc *sbmdesc = &tdata->dcxsbm[i];
 	  unsigned int sbm_len;
 	  unsigned int sbm_sz;
 	  unsigned int off;
-	  unsigned char *data = (unsigned char *)sbm;
 	  unsigned char *buf1;
 	  unsigned int l, j;
 
+	  if (sbm_off > reclen
+	      || reclen - sbm_off < sizeof (struct vms_dcxsbm))
+	    {
+	    err_free_buf:
+	      free (buf);
+	      goto err;
+	    }
+	  sbm = (struct vms_dcxsbm *) (buf + sbm_off);
 	  sbm_sz = bfd_getl16 (sbm->size);
 	  sbm_off += sbm_sz;
-	  BFD_ASSERT (sbm_off <= reclen);
+	  if (sbm_off > reclen)
+	    goto err_free_buf;
 
 	  sbmdesc->min_char = sbm->min_char;
 	  BFD_ASSERT (sbmdesc->min_char == 0);
 	  sbmdesc->max_char = sbm->max_char;
 	  sbm_len = sbmdesc->max_char - sbmdesc->min_char + 1;
 	  l = (2 * sbm_len + 7) / 8;
-	  BFD_ASSERT
-	    (sbm_sz >= sizeof (struct vms_dcxsbm) + l + 3 * sbm_len
-	     || (tdata->nbr_dcxsbm == 1
-		 && sbm_sz >= sizeof (struct vms_dcxsbm) + l + sbm_len));
+	  if (sbm_sz < sizeof (struct vms_dcxsbm) + l + sbm_len
+	      || (tdata->nbr_dcxsbm > 1
+		  && sbm_sz < sizeof (struct vms_dcxsbm) + l + 3 * sbm_len))
+	    goto err_free_buf;
 	  sbmdesc->flags = (unsigned char *)bfd_alloc (abfd, l);
-	  memcpy (sbmdesc->flags, data + bfd_getl16 (sbm->flags), l);
+	  off = bfd_getl16 (sbm->flags);
+	  if (off > sbm_sz
+	      || sbm_sz - off < l)
+	    goto err_free_buf;
+	  memcpy (sbmdesc->flags, (bfd_byte *) sbm + off, l);
 	  sbmdesc->nodes = (unsigned char *)bfd_alloc (abfd, 2 * sbm_len);
-	  memcpy (sbmdesc->nodes, data + bfd_getl16 (sbm->nodes), 2 * sbm_len);
+	  off = bfd_getl16 (sbm->nodes);
+	  if (off > sbm_sz
+	      || sbm_sz - off < 2 * sbm_len)
+	    goto err_free_buf;
+	  memcpy (sbmdesc->nodes, (bfd_byte *) sbm + off, 2 * sbm_len);
 	  off = bfd_getl16 (sbm->next);
 	  if (off != 0)
 	    {
+	      if (off > sbm_sz
+		  || sbm_sz - off < 2 * sbm_len)
+		goto err_free_buf;
 	      /* Read the 'next' array.  */
-	      sbmdesc->next = (unsigned short *)bfd_alloc
-		(abfd, sbm_len * sizeof (unsigned short));
-	      buf1 = data + off;
+	      sbmdesc->next = (unsigned short *) bfd_alloc (abfd, 2 * sbm_len);
+	      buf1 = (bfd_byte *) sbm + off;
 	      for (j = 0; j < sbm_len; j++)
 		sbmdesc->next[j] = bfd_getl16 (buf1 + j * 2);
 	    }
@@ -623,11 +694,11 @@ _bfd_vms_lib_archive_p (bfd *abfd, enum
     }
 
   /* The map is always present.  Also mark shared image library.  */
-  abfd->has_armap = TRUE;
+  abfd->has_armap = true;
   if (tdata->type == LBR__C_TYP_ESHSTB || tdata->type == LBR__C_TYP_ISHSTB)
-    abfd->is_thin_archive = TRUE;
+    abfd->is_thin_archive = true;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  err:
   bfd_release (abfd, tdata);
@@ -637,7 +708,7 @@ _bfd_vms_lib_archive_p (bfd *abfd, enum
 
 /* Standard function for alpha libraries.  */
 
-const bfd_target *
+bfd_cleanup
 _bfd_vms_lib_alpha_archive_p (bfd *abfd)
 {
   return _bfd_vms_lib_archive_p (abfd, vms_lib_alpha);
@@ -645,7 +716,7 @@ _bfd_vms_lib_alpha_archive_p (bfd *abfd)
 
 /* Standard function for ia64 libraries.  */
 
-const bfd_target *
+bfd_cleanup
 _bfd_vms_lib_ia64_archive_p (bfd *abfd)
 {
   return _bfd_vms_lib_archive_p (abfd, vms_lib_ia64);
@@ -653,7 +724,7 @@ _bfd_vms_lib_ia64_archive_p (bfd *abfd)
 
 /* Standard function for text libraries.  */
 
-static const bfd_target *
+static bfd_cleanup
 _bfd_vms_lib_txt_archive_p (bfd *abfd)
 {
   return _bfd_vms_lib_archive_p (abfd, vms_lib_txt);
@@ -661,14 +732,14 @@ _bfd_vms_lib_txt_archive_p (bfd *abfd)
 
 /* Standard bfd function.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_lib_mkarchive (bfd *abfd, enum vms_lib_kind kind)
 {
   struct lib_tdata *tdata;
 
   tdata = (struct lib_tdata *) bfd_zalloc (abfd, sizeof (struct lib_tdata));
   if (tdata == NULL)
-    return FALSE;
+    return false;
 
   abfd->tdata.any = (void *)tdata;
   vms_get_time (&tdata->credat_hi, &tdata->credat_lo);
@@ -696,16 +767,16 @@ _bfd_vms_lib_mkarchive (bfd *abfd, enum
   tdata->artdata.symdefs = NULL;
   tdata->cache = NULL;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_vms_lib_alpha_mkarchive (bfd *abfd)
 {
   return _bfd_vms_lib_mkarchive (abfd, vms_lib_alpha);
 }
 
-bfd_boolean
+bool
 _bfd_vms_lib_ia64_mkarchive (bfd *abfd)
 {
   return _bfd_vms_lib_mkarchive (abfd, vms_lib_ia64);
@@ -753,7 +824,7 @@ struct vms_lib_iovec
   /* Length of the module, when known.  */
   ufile_ptr file_len;
 
-  /* Current position in the record from bfd_bread point of view (ie, after
+  /* Current position in the record from bfd_read point of view (ie, after
      decompression).  0 means that no data byte have been read, -2 and -1
      are reserved for the length word.  */
   int rec_pos;
@@ -810,7 +881,7 @@ vms_lib_btell (struct bfd *abfd)
 /* Read the header of the next data block if all bytes of the current block
    have been read.  */
 
-static bfd_boolean
+static bool
 vms_lib_read_block (struct bfd *abfd)
 {
   struct vms_lib_iovec *vec = (struct vms_lib_iovec *) abfd->iostream;
@@ -821,13 +892,13 @@ vms_lib_read_block (struct bfd *abfd)
 
       /* Read next block.  */
       if (bfd_seek (abfd->my_archive, vec->next_block, SEEK_SET) != 0)
-	return FALSE;
-      if (bfd_bread (hdr, sizeof (hdr), abfd->my_archive) != sizeof (hdr))
-	return FALSE;
+	return false;
+      if (bfd_read (hdr, sizeof (hdr), abfd->my_archive) != sizeof (hdr))
+	return false;
       vec->next_block = (bfd_getl32 (hdr + 2) - 1) * VMS_BLOCK_SIZE;
       vec->blk_off = sizeof (hdr);
     }
-  return TRUE;
+  return true;
 }
 
 /* Read NBYTES from ABFD into BUF if not NULL.  If BUF is NULL, bytes are
@@ -858,7 +929,7 @@ vms_lib_bread_raw (struct bfd *abfd, uns
       if (buf != NULL)
 	{
 	  /* Really read into BUF.  */
-	  if (bfd_bread (buf, l, abfd->my_archive) != l)
+	  if (bfd_read (buf, l, abfd->my_archive) != l)
 	    return -1;
 	}
       else
@@ -1216,7 +1287,7 @@ static const struct bfd_iovec vms_lib_io
 
 /* Open a library module.  FILEPOS is the position of the module header.  */
 
-static bfd_boolean
+static bool
 vms_lib_bopen (bfd *el, file_ptr filepos)
 {
   struct vms_lib_iovec *vec;
@@ -1228,7 +1299,7 @@ vms_lib_bopen (bfd *el, file_ptr filepos
   /* Allocate and initialized the iovec.  */
   vec = bfd_zalloc (el, sizeof (*vec));
   if (vec == NULL)
-    return FALSE;
+    return false;
 
   el->iostream = vec;
   el->iovec = &vms_lib_iovec;
@@ -1240,34 +1311,34 @@ vms_lib_bopen (bfd *el, file_ptr filepos
   vec->next_block = filepos & ~(VMS_BLOCK_SIZE - 1);
   vec->blk_off = DATA__LENGTH;
   if (!vms_lib_read_block (el))
-    return FALSE;
+    return false;
 
   /* Prepare to read the first record.  */
   vec->blk_off = filepos & (VMS_BLOCK_SIZE - 1);
   vec->rec_rem = 0;
   if (bfd_seek (el->my_archive, filepos, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   /* Read Record length + MHD + align byte.  */
   len = tdata->mhd_size;
   if (vms_lib_bread_raw (el, buf, 2) != 2)
-    return FALSE;
+    return false;
   if (bfd_getl16 (buf) != len)
-    return FALSE;
+    return false;
   len = (len + 1) & ~1;
   BFD_ASSERT (len <= sizeof (buf));
   if (vms_lib_bread_raw (el, buf, len) != len)
-    return FALSE;
+    return false;
 
   /* Get info from mhd.  */
   mhd = (struct vms_mhd *)buf;
   /* Check id.  */
   if (mhd->id != MHD__C_MHDID)
-    return FALSE;
+    return false;
   if (len >= MHD__C_MHDLEN + 1)
     el->selective_search = (mhd->objstat & MHD__M_SELSRC) ? 1 : 0;
   el->mtime = vms_rawtime_to_time_t (mhd->datim);
-  el->mtime_set = TRUE;
+  el->mtime_set = true;
 
   /* Reinit the iovec so that seek() will point to the first record after
      the mhd.  */
@@ -1286,7 +1357,7 @@ vms_lib_bopen (bfd *el, file_ptr filepos
       if (vec->dcx_buf == NULL)
 	return -1;
     }
-  return TRUE;
+  return true;
 }
 
 /* Get member MODIDX.  Return NULL in case of error.  */
@@ -1334,7 +1405,7 @@ _bfd_vms_lib_get_module (bfd *abfd, unsi
       /* Read the MHD now.  */
       if (bfd_seek (abfd, file_off, SEEK_SET) != 0)
 	return NULL;
-      if (bfd_bread (buf, tdata->mhd_size, abfd) != tdata->mhd_size)
+      if (bfd_read (buf, tdata->mhd_size, abfd) != tdata->mhd_size)
 	return NULL;
 
       mhd = (struct vms_mhd *) buf;
@@ -1356,7 +1427,7 @@ _bfd_vms_lib_get_module (bfd *abfd, unsi
       if (tdata->mhd_size >= offsetof (struct vms_mhd, objstat) + 1)
 	res->selective_search = (mhd->objstat & MHD__M_SELSRC) ? 1 : 0;
       res->mtime = vms_rawtime_to_time_t (mhd->datim);
-      res->mtime_set = TRUE;
+      res->mtime_set = true;
 
       arelt->parsed_size = bfd_getl32 (mhd->modsize);
 
@@ -1386,6 +1457,12 @@ _bfd_vms_lib_get_module (bfd *abfd, unsi
       break;
     }
   bfd_set_filename (res, newname);
+  free (newname);
+  if (bfd_get_filename (res) == NULL)
+    {
+      bfd_close (res);
+      return NULL;
+    }
 
   tdata->cache[modidx] = res;
 
@@ -1425,7 +1502,7 @@ bfd *
 _bfd_vms_lib_get_imagelib_file (bfd *el)
 {
   bfd *archive = el->my_archive;
-  const char *modname = el->filename;
+  const char *modname = bfd_get_filename (el);
   int modlen = strlen (modname);
   char *filename;
   int j;
@@ -1451,7 +1528,7 @@ _bfd_vms_lib_get_imagelib_file (bfd *el)
     {
       /* xgettext:c-format */
       _bfd_error_handler(_("could not open shared image '%s' from '%s'"),
-			 filename, archive->filename);
+			 filename, bfd_get_filename (archive));
       bfd_release (archive, filename);
       return NULL;
     }
@@ -1568,7 +1645,7 @@ lib_index_cmp (const void *lv, const voi
 /* Get the size of an index entry.  */
 
 static unsigned int
-get_idxlen (struct lib_index *idx, bfd_boolean is_elfidx)
+get_idxlen (struct lib_index *idx, bool is_elfidx)
 {
   if (is_elfidx)
     {
@@ -1592,10 +1669,10 @@ get_idxlen (struct lib_index *idx, bfd_b
    IS_ELFIDX is true for elfidx (ie ia64) indexes layout.
    Return TRUE on success.  */
 
-static bfd_boolean
+static bool
 vms_write_index (bfd *abfd,
 		 struct lib_index *idx, unsigned int nbr, unsigned int *vbn,
-		 unsigned int *topvbn, bfd_boolean is_elfidx)
+		 unsigned int *topvbn, bool is_elfidx)
 {
   /* The index is organized as a tree.  This function implements a naive
      algorithm to balance the tree: it fills the leaves, and create a new
@@ -1626,7 +1703,7 @@ vms_write_index (bfd *abfd,
       /* No entries.  Very easy to handle.  */
       if (topvbn != NULL)
 	*topvbn = 0;
-      return TRUE;
+      return true;
     }
 
   if (abfd == NULL)
@@ -1671,13 +1748,13 @@ vms_write_index (bfd *abfd,
 		      if (kbn_vbn != 0)
 			{
 			  if (!vms_write_block (abfd, kbn_vbn, kbn_blk))
-			    return FALSE;
+			    goto err;
 			}
 		      else
 			{
 			  kbn_blk = bfd_malloc (VMS_BLOCK_SIZE);
 			  if (kbn_blk == NULL)
-			    return FALSE;
+			    goto err;
 			}
 		      *(unsigned short *)kbn_blk = 0;
 		    }
@@ -1789,7 +1866,7 @@ vms_write_index (bfd *abfd,
 		{
 		  bfd_putl16 (blk[j].len + blk[j].lastlen, rblk[j]->used);
 		  if (!vms_write_block (abfd, blk[j].vbn, rblk[j]))
-		    return FALSE;
+		    goto err;
 		}
 
 	      /* Reset this block.  */
@@ -1858,7 +1935,7 @@ vms_write_index (bfd *abfd,
     *topvbn = blk[level - 1].vbn;
 
   if (abfd == NULL)
-    return TRUE;
+    return true;
 
   /* Flush.  */
   for (j = 1; j < level; j++)
@@ -1882,25 +1959,35 @@ vms_write_index (bfd *abfd,
       /* Write this block on the disk.  */
       bfd_putl16 (blk[j].len + blk[j].lastlen, rblk[j]->used);
       if (!vms_write_block (abfd, blk[j].vbn, rblk[j]))
-	return FALSE;
+	goto err;
 
       free (rblk[j]);
+      rblk[j] = NULL;
     }
 
   /* Write the last kbn (if any).  */
   if (kbn_vbn != 0)
     {
       if (!vms_write_block (abfd, kbn_vbn, kbn_blk))
-	return FALSE;
+	goto err;
       free (kbn_blk);
     }
 
-  return TRUE;
+  return true;
+
+ err:
+  if (abfd != NULL)
+    {
+      for (j = 0; j < level; j++)
+	free (rblk[j]);
+      free (kbn_blk);
+    }
+  return false;
 }
 
 /* Append data to the data block DATA.  Force write if PAD is true.  */
 
-static bfd_boolean
+static bool
 vms_write_data_block (bfd *arch, struct vms_datadef *data, file_ptr *off,
 		      const unsigned char *buf, unsigned int len, int pad)
 {
@@ -1923,8 +2010,8 @@ vms_write_data_block (bfd *arch, struct
 	  data->fill_1 = 0;
 	  bfd_putl32 ((*off / VMS_BLOCK_SIZE) + 2, data->link);
 
-	  if (bfd_bwrite (data, sizeof (*data), arch) != sizeof (*data))
-	    return FALSE;
+	  if (bfd_write (data, sizeof (*data), arch) != sizeof (*data))
+	    return false;
 
 	  *off += DATA__LENGTH - doff;
 
@@ -1932,12 +2019,12 @@ vms_write_data_block (bfd *arch, struct
 	    break;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Build the symbols index.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_lib_build_map (unsigned int nbr_modules,
 			struct lib_index *modules,
 			unsigned int *res_cnt,
@@ -1973,8 +2060,7 @@ _bfd_vms_lib_build_map (unsigned int nbr
 	{
 	  if (storage > syms_max)
 	    {
-	      if (syms_max > 0)
-		free (syms);
+	      free (syms);
 	      syms_max = storage;
 	      syms = (asymbol **) bfd_malloc (syms_max);
 	      if (syms == NULL)
@@ -2022,26 +2108,25 @@ _bfd_vms_lib_build_map (unsigned int nbr
 
   *res_cnt = map_count;
   *res = map;
-  return TRUE;
+  free (syms);
+  return true;
 
  error_return:
-  if (syms_max > 0)
-    free (syms);
-  if (map != NULL)
-    free (map);
-  return FALSE;
+  free (syms);
+  free (map);
+  return false;
 }
 
 /* Do the hard work: write an archive on the disk.  */
 
-bfd_boolean
+bool
 _bfd_vms_lib_write_archive_contents (bfd *arch)
 {
   bfd *current;
   unsigned int nbr_modules;
   struct lib_index *modules;
   unsigned int nbr_symbols;
-  struct lib_index *symbols;
+  struct lib_index *symbols = NULL;
   struct lib_tdata *tdata = bfd_libdata (arch);
   unsigned int i;
   file_ptr off;
@@ -2050,7 +2135,7 @@ _bfd_vms_lib_write_archive_contents (bfd
   unsigned int vbn;
   unsigned int mod_idx_vbn;
   unsigned int sym_idx_vbn;
-  bfd_boolean is_elfidx = tdata->kind == vms_lib_ia64;
+  bool is_elfidx = tdata->kind == vms_lib_ia64;
   unsigned int max_keylen = is_elfidx ? MAX_EKEYLEN : MAX_KEYLEN;
 
   /* Count the number of modules (and do a first sanity check).  */
@@ -2077,7 +2162,7 @@ _bfd_vms_lib_write_archive_contents (bfd
   BFD_ASSERT (tdata->modules == NULL);
   modules = bfd_alloc (arch, nbr_modules * sizeof (struct lib_index));
   if (modules == NULL)
-    return FALSE;
+    return false;
 
   for (current = arch->archive_head, i = 0;
        current != NULL;
@@ -2086,7 +2171,7 @@ _bfd_vms_lib_write_archive_contents (bfd
       unsigned int nl;
 
       modules[i].abfd = current;
-      modules[i].name = vms_get_module_name (current->filename, FALSE);
+      modules[i].name = vms_get_module_name (bfd_get_filename (current), false);
       modules[i].ref = 1;
 
       /* FIXME: silently truncate long names ?  */
@@ -2097,23 +2182,23 @@ _bfd_vms_lib_write_archive_contents (bfd
   /* Create the module index.  */
   vbn = 0;
   if (!vms_write_index (NULL, modules, nbr_modules, &vbn, NULL, is_elfidx))
-    return FALSE;
+    return false;
   nbr_mod_iblk = vbn;
 
   /* Create symbol index.  */
   if (!_bfd_vms_lib_build_map (nbr_modules, modules, &nbr_symbols, &symbols))
-    return FALSE;
+    goto err;
 
   vbn = 0;
   if (!vms_write_index (NULL, symbols, nbr_symbols, &vbn, NULL, is_elfidx))
-    return FALSE;
+    goto err;
   nbr_sym_iblk = vbn;
 
   /* Write modules and remember their position.  */
   off = (1 + nbr_mod_iblk + nbr_sym_iblk) * VMS_BLOCK_SIZE;
 
   if (bfd_seek (arch, off, SEEK_SET) != 0)
-    return FALSE;
+    goto err;
 
   for (i = 0; i < nbr_modules; i++)
     {
@@ -2157,7 +2242,7 @@ _bfd_vms_lib_write_archive_contents (bfd
 	  file_ptr off_hdr = off;
 
 	  /* Read to complete the first block.  */
-	  amt = bfd_bread (blk + sz, VMS_BLOCK_SIZE - sz, current);
+	  amt = bfd_read (blk + sz, VMS_BLOCK_SIZE - sz, current);
 	  if (amt == (bfd_size_type)-1)
 	    goto input_err;
 	  modsize = amt;
@@ -2169,18 +2254,18 @@ _bfd_vms_lib_write_archive_contents (bfd
 	  bfd_putl32 (modsize, mhd->modsize);
 
 	  /* Write the first block (which contains an mhd).  */
-	  if (bfd_bwrite (blk, VMS_BLOCK_SIZE, arch) != VMS_BLOCK_SIZE)
+	  if (bfd_write (blk, VMS_BLOCK_SIZE, arch) != VMS_BLOCK_SIZE)
 	    goto input_err;
 	  off += VMS_BLOCK_SIZE;
 
 	  if (amt == VMS_BLOCK_SIZE - sz)
 	    {
 	      /* Copy the remaining.  */
-	      char buffer[DEFAULT_BUFFERSIZE];
+	      char buffer[8 * 1024];
 
 	      while (1)
 		{
-		  amt = bfd_bread (buffer, sizeof (buffer), current);
+		  amt = bfd_read (buffer, sizeof (buffer), current);
 		  if (amt == (bfd_size_type)-1)
 		    goto input_err;
 		  if (amt == 0)
@@ -2192,7 +2277,7 @@ _bfd_vms_lib_write_archive_contents (bfd
 		      memset (buffer + amt, 0, sizeof (buffer) - amt);
 		      amt = (amt + VMS_BLOCK_SIZE) & ~(VMS_BLOCK_SIZE - 1);
 		    }
-		  if (bfd_bwrite (buffer, amt, arch) != amt)
+		  if (bfd_write (buffer, amt, arch) != amt)
 		    goto input_err;
 		  off += amt;
 		}
@@ -2200,7 +2285,7 @@ _bfd_vms_lib_write_archive_contents (bfd
 	      /* Now that the size is known, write the first block (again).  */
 	      bfd_putl32 (modsize, mhd->modsize);
 	      if (bfd_seek (arch, off_hdr, SEEK_SET) != 0
-		  || bfd_bwrite (blk, VMS_BLOCK_SIZE, arch) != VMS_BLOCK_SIZE)
+		  || bfd_write (blk, VMS_BLOCK_SIZE, arch) != VMS_BLOCK_SIZE)
 		goto input_err;
 	      if (bfd_seek (arch, off, SEEK_SET) != 0)
 		goto input_err;
@@ -2209,22 +2294,22 @@ _bfd_vms_lib_write_archive_contents (bfd
       else
 	{
 	  /* Write the MHD.  */
-	  if (vms_write_data_block (arch, &data, &off, blk, sz, 0) < 0)
+	  if (!vms_write_data_block (arch, &data, &off, blk, sz, 0))
 	    goto input_err;
 
 	  /* Write the member.  */
 	  while (1)
 	    {
-	      sz = bfd_bread (blk, sizeof (blk), current);
+	      sz = bfd_read (blk, sizeof (blk), current);
 	      if (sz == 0)
 		break;
-	      if (vms_write_data_block (arch, &data, &off, blk, sz, 0) < 0)
+	      if (!vms_write_data_block (arch, &data, &off, blk, sz, 0))
 		goto input_err;
 	    }
 
 	  /* Write the end of module marker.  */
-	  if (vms_write_data_block (arch, &data, &off,
-				    eotdesc, sizeof (eotdesc), 1) < 0)
+	  if (!vms_write_data_block (arch, &data, &off,
+				     eotdesc, sizeof (eotdesc), 1))
 	    goto input_err;
 	}
     }
@@ -2233,10 +2318,10 @@ _bfd_vms_lib_write_archive_contents (bfd
   vbn = 2;
   if (!vms_write_index (arch, modules, nbr_modules, &vbn, &mod_idx_vbn,
 			is_elfidx))
-    return FALSE;
+    goto err;
   if (!vms_write_index (arch, symbols, nbr_symbols, &vbn, &sym_idx_vbn,
 			is_elfidx))
-    return FALSE;
+    goto err;
 
   /* Write libary header.  */
   {
@@ -2307,14 +2392,17 @@ _bfd_vms_lib_write_archive_contents (bfd
     idd++;
 
     if (!vms_write_block (arch, 1, blk))
-      return FALSE;
+      goto err;
   }
 
-  return TRUE;
+  free (symbols);
+  return true;
 
  input_err:
   bfd_set_input_error (current, bfd_get_error ());
-  return FALSE;
+ err:
+  free (symbols);
+  return false;
 }
 
 /* Add a target for text library.  This costs almost nothing and is useful to
@@ -2332,6 +2420,7 @@ const bfd_target alpha_vms_lib_txt_vec =
   ' ',				/* ar_pad_char.  */
   15,				/* ar_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
   bfd_getl16, bfd_getl_signed_16, bfd_putl16,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vms-misc.c ./bfd/vms-misc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/vms-misc.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/vms-misc.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 /* vms-misc.c -- BFD back-end for VMS/VAX (openVMS/VAX) and
    EVAX (openVMS/Alpha) files.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    Miscellaneous functions.
 
@@ -139,13 +139,19 @@ _bfd_hexdump (int level, unsigned char *
    Size is string size (size of record).  */
 
 char *
-_bfd_vms_save_sized_string (unsigned char *str, unsigned int size)
+_bfd_vms_save_sized_string (bfd *abfd, unsigned char *str, size_t size)
 {
-  char *newstr = bfd_malloc ((bfd_size_type) size + 1);
+  char *newstr;
 
+  if (size == (size_t) -1)
+    {
+      bfd_set_error (bfd_error_no_memory);
+      return NULL;
+    }
+  newstr = bfd_alloc (abfd, size + 1);
   if (newstr == NULL)
     return NULL;
-  memcpy (newstr, (char *) str, (size_t) size);
+  memcpy (newstr, str, size);
   newstr[size] = 0;
 
   return newstr;
@@ -155,13 +161,16 @@ _bfd_vms_save_sized_string (unsigned cha
    PTR points to size byte on entry.  */
 
 char *
-_bfd_vms_save_counted_string (unsigned char *ptr, unsigned int maxlen)
+_bfd_vms_save_counted_string (bfd *abfd, unsigned char *ptr, size_t maxlen)
 {
-  unsigned int len = *ptr++;
+  unsigned int len;
 
-  if (len > maxlen)
+  if (maxlen == 0)
+    return NULL;
+  len = *ptr++;
+  if (len >  maxlen - 1)
     return NULL;
-  return _bfd_vms_save_sized_string (ptr, len);
+  return _bfd_vms_save_sized_string (abfd, ptr, len);
 }
 
 /* Object output routines.   */
@@ -260,7 +269,7 @@ _bfd_vms_output_end_subrec (struct vms_r
 
 /* Ends current record (and write it).  */
 
-void
+bool
 _bfd_vms_output_end (bfd *abfd, struct vms_rec_wr *recwr)
 {
   vms_debug2 ((6, "_bfd_vms_output_end (size %u)\n", recwr->size));
@@ -269,7 +278,7 @@ _bfd_vms_output_end (bfd *abfd, struct v
   BFD_ASSERT (recwr->subrec_offset == 0);
 
   if (recwr->size == 0)
-    return;
+    return true;
 
   _bfd_vms_output_align (recwr, recwr->size);
 
@@ -280,16 +289,20 @@ _bfd_vms_output_end (bfd *abfd, struct v
      converted to variable length (VAR) format.  VAR format has a length
      word first which must be explicitly output in UDF format.  */
   /* So, first the length word.  */
-  bfd_bwrite (recwr->buf + 2, 2, abfd);
+  if (bfd_write (recwr->buf + 2, 2, abfd) != 2)
+    return false;
 
   /* Align.  */
   if (recwr->size & 1)
     recwr->buf[recwr->size++] = 0;
 
   /* Then the record.  */
-  bfd_bwrite (recwr->buf, (size_t) recwr->size, abfd);
+  if (bfd_write (recwr->buf, (size_t) recwr->size, abfd)
+      != (size_t) recwr->size)
+    return false;
 
   recwr->size = 0;
+  return true;
 }
 
 /* Check remaining buffer size.  Return what's left.  */
@@ -425,9 +438,9 @@ static int
 vms_convert_to_var_1 (char *filename, int type)
 {
   if (type != DECC$K_FILE)
-    return FALSE;
+    return false;
   vms_convert_to_var (filename);
-  return TRUE;
+  return true;
 }
 
 /* Convert the file to variable record length format. This is done
@@ -438,8 +451,8 @@ int
 _bfd_vms_convert_to_var_unix_filename (const char *unix_filename)
 {
   if (decc$to_vms (unix_filename, &vms_convert_to_var_1, 0, 1) != 1)
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 #endif /* VMS */
 
@@ -447,9 +460,8 @@ _bfd_vms_convert_to_var_unix_filename (c
    stolen from obj-vms.c.  */
 
 unsigned char *
-get_vms_time_string (void)
+get_vms_time_string (unsigned char *tbuf)
 {
-  static unsigned char tbuf[18];
 #ifndef VMS
   char *pnt;
   time_t timeb;
@@ -484,7 +496,7 @@ get_vms_time_string (void)
    The result has to be free().  */
 
 char *
-vms_get_module_name (const char *filename, bfd_boolean upcase)
+vms_get_module_name (const char *filename, bool upcase)
 {
   char *fname, *fptr;
   const char *fout;
@@ -586,8 +598,8 @@ vms_time_to_time_t (unsigned int hi, uns
 void
 vms_time_t_to_vms_time (time_t ut, unsigned int *hi, unsigned int *lo)
 {
-  unsigned short val[4];
-  unsigned short tmp[4];
+  unsigned int val[4];
+  unsigned int tmp[4];
   unsigned int carry;
   int i;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/warning.m4 ./bfd/warning.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/warning.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/warning.m4	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 dnl Common configure.ac fragment
 dnl
-dnl   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+dnl   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 dnl
 dnl This file is free software; you can redistribute it and/or modify
 dnl it under the terms of the GNU General Public License as published by
@@ -50,7 +50,8 @@ GCC_WARN_CFLAGS_FOR_BUILD="-W -Wall -Wst
 AC_EGREP_CPP([(^[0-3]$|^__GNUC__$)],[__GNUC__],,GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wshadow")
 
 # Add -Wstack-usage if the compiler is a sufficiently recent version of GCC.
-AC_EGREP_CPP([(^[0-4]$|^__GNUC__$)],[__GNUC__],,GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wstack-usage=262144")
+AC_EGREP_CPP([(^[0-4]$|^__GNUC__$)],[__GNUC__],,dnl
+[AC_EGREP_CPP([^__clang__$],[__clang__],[GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wstack-usage=262144"],)])
 
 # Set WARN_WRITE_STRINGS if the compiler supports -Wwrite-strings.
 WARN_WRITE_STRINGS=""
@@ -62,7 +63,8 @@ AC_EGREP_CPP([(^[0-3]$|^__GNUC__$)],[__G
 AC_EGREP_CPP_FOR_BUILD([(^[0-3]$|^__GNUC__$)],[__GNUC__],,GCC_WARN_CFLAGS_FOR_BUILD="$GCC_WARN_CFLAGS_FOR_BUILD -Wshadow")
 
 # Add -Wstack-usage if the compiler is a sufficiently recent version of GCC.
-AC_EGREP_CPP_FOR_BUILD([(^[0-4]$|^__GNUC__$)],[__GNUC__],,GCC_WARN_CFLAGS_FOR_BUILD="$GCC_WARN_CFLAGS_FOR_BUILD -Wstack-usage=262144")
+AC_EGREP_CPP_FOR_BUILD([(^[0-4]$|^__GNUC__$)],[__GNUC__],,dnl
+[AC_EGREP_CPP_FOR_BUILD([^__clang__$],[__clang__],[GCC_WARN_CFLAGS_FOR_BUILD="$GCC_WARN_CFLAGS_FOR_BUILD -Wstack-usage=262144"],)])
 
 AC_ARG_ENABLE(werror,
   [  --enable-werror         treat compile warnings as errors],
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/wasm-module.c ./bfd/wasm-module.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/wasm-module.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/wasm-module.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for WebAssembly modules.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    Based on srec.c, mmo.c, and binary.c
 
@@ -26,13 +26,16 @@
    https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md. */
 
 #include "sysdep.h"
-#include "alloca-conf.h"
 #include "bfd.h"
-#include <limits.h>
 #include "libiberty.h"
 #include "libbfd.h"
 #include "wasm-module.h"
 
+#include <limits.h>
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
+
 typedef struct
 {
   asymbol *      symbols;
@@ -102,27 +105,44 @@ wasm_section_name_to_code (const char *n
    incomplete numbers).  SIGN means interpret the number as SLEB128. */
 
 static bfd_vma
-wasm_read_leb128 (bfd *		  abfd,
-		  bfd_boolean *	  error_return,
-		  unsigned int *  length_return,
-		  bfd_boolean	  sign)
+wasm_read_leb128 (bfd *abfd,
+		  bool *error_return,
+		  unsigned int *length_return,
+		  bool sign)
 {
   bfd_vma result = 0;
   unsigned int num_read = 0;
   unsigned int shift = 0;
   unsigned char byte = 0;
-  bfd_boolean success = FALSE;
+  unsigned char lost, mask;
+  int status = 1;
 
-  while (bfd_bread (&byte, 1, abfd) == 1)
+  while (bfd_read (&byte, 1, abfd) == 1)
     {
       num_read++;
 
-      result |= ((bfd_vma) (byte & 0x7f)) << shift;
+      if (shift < CHAR_BIT * sizeof (result))
+	{
+	  result |= ((bfd_vma) (byte & 0x7f)) << shift;
+	  /* These bits overflowed.  */
+	  lost = byte ^ (result >> shift);
+	  /* And this is the mask of possible overflow bits.  */
+	  mask = 0x7f ^ ((bfd_vma) 0x7f << shift >> shift);
+	  shift += 7;
+	}
+      else
+	{
+	  lost = byte;
+	  mask = 0x7f;
+	}
+      if ((lost & mask) != (sign && (bfd_signed_vma) result < 0 ? mask : 0))
+	status |= 2;
 
-      shift += 7;
       if ((byte & 0x80) == 0)
 	{
-	  success = TRUE;
+	  status &= ~1;
+	  if (sign && shift < CHAR_BIT * sizeof (result) && (byte & 0x40))
+	    result |= -((bfd_vma) 1 << shift);
 	  break;
 	}
     }
@@ -130,10 +150,7 @@ wasm_read_leb128 (bfd *		  abfd,
   if (length_return != NULL)
     *length_return = num_read;
   if (error_return != NULL)
-    *error_return = ! success;
-
-  if (sign && (shift < 8 * sizeof (result)) && (byte & 0x40))
-    result |= -((bfd_vma) 1 << shift);
+    *error_return = status != 0;
 
   return result;
 }
@@ -141,7 +158,7 @@ wasm_read_leb128 (bfd *		  abfd,
 /* Encode an integer V as LEB128 and write it to ABFD, return TRUE on
    success.  */
 
-static bfd_boolean
+static bool
 wasm_write_uleb128 (bfd *abfd, bfd_vma v)
 {
   do
@@ -152,12 +169,12 @@ wasm_write_uleb128 (bfd *abfd, bfd_vma v
       if (v)
 	c |= 0x80;
 
-      if (bfd_bwrite (&c, 1, abfd) != 1)
-	return FALSE;
+      if (bfd_write (&c, 1, abfd) != 1)
+	return false;
     }
   while (v);
 
-  return TRUE;
+  return true;
 }
 
 /* Read the LEB128 integer at P, saving it to X; at end of buffer,
@@ -165,70 +182,67 @@ wasm_write_uleb128 (bfd *abfd, bfd_vma v
 #define READ_LEB128(x, p, end)						\
   do									\
     {									\
-      unsigned int length_read;						\
-      (x) = _bfd_safe_read_leb128 (abfd, (p), &length_read,		\
-				   FALSE, (end));			\
-      (p) += length_read;						\
-      if (length_read == 0)						\
+      if ((p) >= (end))							\
 	goto error_return;						\
+      (x) = _bfd_safe_read_leb128 (abfd, &(p), false, (end));		\
     }									\
   while (0)
 
 /* Verify the magic number at the beginning of a WebAssembly module
    ABFD, setting ERRORPTR if there's a mismatch.  */
 
-static bfd_boolean
-wasm_read_magic (bfd *abfd, bfd_boolean *errorptr)
+static bool
+wasm_read_magic (bfd *abfd, bool *errorptr)
 {
   bfd_byte magic_const[SIZEOF_WASM_MAGIC] = WASM_MAGIC;
   bfd_byte magic[SIZEOF_WASM_MAGIC];
 
-  if (bfd_bread (magic, sizeof (magic), abfd) == sizeof (magic)
+  if (bfd_read (magic, sizeof (magic), abfd) == sizeof (magic)
       && memcmp (magic, magic_const, sizeof (magic)) == 0)
-    return TRUE;
+    return true;
 
-  *errorptr = TRUE;
-  return FALSE;
+  *errorptr = true;
+  return false;
 }
 
 /* Read the version number from ABFD, returning TRUE if it's a supported
    version. Set ERRORPTR otherwise.  */
 
-static bfd_boolean
-wasm_read_version (bfd *abfd, bfd_boolean *errorptr)
+static bool
+wasm_read_version (bfd *abfd, bool *errorptr)
 {
   bfd_byte vers_const[SIZEOF_WASM_VERSION] = WASM_VERSION;
   bfd_byte vers[SIZEOF_WASM_VERSION];
 
-  if (bfd_bread (vers, sizeof (vers), abfd) == sizeof (vers)
+  if (bfd_read (vers, sizeof (vers), abfd) == sizeof (vers)
       /* Don't attempt to parse newer versions, which are likely to
 	 require code changes.  */
       && memcmp (vers, vers_const, sizeof (vers)) == 0)
-    return TRUE;
+    return true;
 
-  *errorptr = TRUE;
-  return FALSE;
+  *errorptr = true;
+  return false;
 }
 
 /* Read the WebAssembly header (magic number plus version number) from
    ABFD, setting ERRORPTR to TRUE if there is a mismatch.  */
 
-static bfd_boolean
-wasm_read_header (bfd *abfd, bfd_boolean *errorptr)
+static bool
+wasm_read_header (bfd *abfd, bool *errorptr)
 {
   if (! wasm_read_magic (abfd, errorptr))
-    return FALSE;
+    return false;
 
   if (! wasm_read_version (abfd, errorptr))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Scan the "function" subsection of the "name" section ASECT in the
    wasm module ABFD. Create symbols. Return TRUE on success.  */
 
-static bfd_boolean
+static bool
 wasm_scan_name_function_section (bfd *abfd, sec_ptr asect)
 {
   bfd_byte *p;
@@ -238,18 +252,13 @@ wasm_scan_name_function_section (bfd *ab
   tdata_type *tdata = abfd->tdata.any;
   asymbol *symbols = NULL;
   sec_ptr space_function_index;
-
-  if (! asect)
-    return FALSE;
-
-  if (strcmp (asect->name, WASM_NAME_SECTION) != 0)
-    return FALSE;
+  size_t amt;
 
   p = asect->contents;
   end = asect->contents + asect->size;
 
-  if (! p)
-    return FALSE;
+  if (!p)
+    return false;
 
   while (p < end)
     {
@@ -261,49 +270,53 @@ wasm_scan_name_function_section (bfd *ab
 	 it has to be a single byte in the 0 - 127 range.  If it isn't,
 	 the spec must have changed underneath us, so give up.  */
       if (subsection_code & 0x80)
-	return FALSE;
+	return false;
 
       READ_LEB128 (payload_size, p, end);
 
-      if (p > p + payload_size)
-	return FALSE;
+      if (payload_size > (size_t) (end - p))
+	return false;
 
       p += payload_size;
     }
 
   if (p >= end)
-    return FALSE;
+    return false;
 
   READ_LEB128 (payload_size, p, end);
 
-  if (p > p + payload_size)
-    return FALSE;
-
-  if (p + payload_size > end)
-    return FALSE;
+  if (payload_size > (size_t) (end - p))
+    return false;
 
   end = p + payload_size;
 
   READ_LEB128 (symcount, p, end);
 
   /* Sanity check: each symbol has at least two bytes.  */
-  if (symcount > payload_size/2)
-    return FALSE;
+  if (symcount > payload_size / 2)
+    return false;
 
   tdata->symcount = symcount;
 
-  space_function_index = bfd_make_section_with_flags
-    (abfd, WASM_SECTION_FUNCTION_INDEX, SEC_READONLY | SEC_CODE);
+  space_function_index
+    = bfd_make_section_with_flags (abfd, WASM_SECTION_FUNCTION_INDEX,
+				   SEC_READONLY | SEC_CODE);
 
-  if (! space_function_index)
-    space_function_index = bfd_get_section_by_name (abfd, WASM_SECTION_FUNCTION_INDEX);
+  if (!space_function_index)
+    space_function_index
+      = bfd_get_section_by_name (abfd, WASM_SECTION_FUNCTION_INDEX);
 
-  if (! space_function_index)
-    return FALSE;
+  if (!space_function_index)
+    return false;
 
-  symbols = bfd_zalloc (abfd, tdata->symcount * sizeof (asymbol));
-  if (! symbols)
-    return FALSE;
+  if (_bfd_mul_overflow (tdata->symcount, sizeof (asymbol), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  symbols = bfd_alloc (abfd, amt);
+  if (!symbols)
+    return false;
 
   for (symcount = 0; p < end && symcount < tdata->symcount; symcount++)
     {
@@ -315,14 +328,15 @@ wasm_scan_name_function_section (bfd *ab
       READ_LEB128 (idx, p, end);
       READ_LEB128 (len, p, end);
 
-      if (p + len < p || p + len > end)
+      if (len > (size_t) (end - p))
 	goto error_return;
 
-      name = bfd_zalloc (abfd, len + 1);
-      if (! name)
+      name = bfd_alloc (abfd, len + 1);
+      if (!name)
 	goto error_return;
 
       memcpy (name, p, len);
+      name[len] = 0;
       p += len;
 
       sym = &symbols[symcount];
@@ -340,27 +354,27 @@ wasm_scan_name_function_section (bfd *ab
   tdata->symbols = symbols;
   abfd->symcount = symcount;
 
-  return TRUE;
+  return true;
 
  error_return:
-  while (symcount)
-    bfd_release (abfd, (void *)symbols[--symcount].name);
-  bfd_release (abfd, symbols);
-  return FALSE;
+  if (symbols)
+    bfd_release (abfd, symbols);
+  tdata->symcount = 0;
+  return false;
 }
 
 /* Read a byte from ABFD and return it, or EOF for EOF or error.
    Set ERRORPTR on non-EOF error.  */
 
 static int
-wasm_read_byte (bfd *abfd, bfd_boolean *errorptr)
+wasm_read_byte (bfd *abfd, bool *errorptr)
 {
   bfd_byte byte;
 
-  if (bfd_bread (&byte, (bfd_size_type) 1, abfd) != 1)
+  if (bfd_read (&byte, 1, abfd) != 1)
     {
       if (bfd_get_error () != bfd_error_file_truncated)
-	*errorptr = TRUE;
+	*errorptr = true;
       return EOF;
     }
 
@@ -370,22 +384,21 @@ wasm_read_byte (bfd *abfd, bfd_boolean *
 /* Scan the wasm module ABFD, creating sections and symbols.
    Return TRUE on success.  */
 
-static bfd_boolean
+static bool
 wasm_scan (bfd *abfd)
 {
-  bfd_boolean error = FALSE;
+  bool error = false;
   /* Fake VMAs for now. Choose 0x80000000 as base to avoid clashes
      with actual data addresses.  */
   bfd_vma vma = 0x80000000;
   int section_code;
   unsigned int bytes_read;
-  char *name = NULL;
   asection *bfdsec;
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
     goto error_return;
 
-  if (! wasm_read_header (abfd, &error))
+  if (!wasm_read_header (abfd, &error))
     goto error_return;
 
   while ((section_code = wasm_read_byte (abfd, &error)) != EOF)
@@ -394,69 +407,66 @@ wasm_scan (bfd *abfd)
 	{
 	  const char *sname = wasm_section_code_to_name (section_code);
 
-	  if (! sname)
+	  if (!sname)
 	    goto error_return;
 
-	  name = strdup (sname);
-	  bfdsec = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
+	  bfdsec = bfd_make_section_anyway_with_flags (abfd, sname,
+						       SEC_HAS_CONTENTS);
 	  if (bfdsec == NULL)
 	    goto error_return;
-	  name = NULL;
 
-	  bfdsec->vma = vma;
-	  bfdsec->lma = vma;
-	  bfdsec->size = wasm_read_leb128 (abfd, &error, &bytes_read, FALSE);
+	  bfdsec->size = wasm_read_leb128 (abfd, &error, &bytes_read, false);
 	  if (error)
 	    goto error_return;
-	  bfdsec->filepos = bfd_tell (abfd);
-	  bfdsec->alignment_power = 0;
 	}
       else
 	{
 	  bfd_vma payload_len;
-	  file_ptr section_start;
 	  bfd_vma namelen;
+	  char *name;
 	  char *prefix = WASM_SECTION_PREFIX;
-	  char *p;
-	  int ret;
+	  size_t prefixlen = strlen (prefix);
+	  ufile_ptr filesize;
 
-	  payload_len = wasm_read_leb128 (abfd, &error, &bytes_read, FALSE);
+	  payload_len = wasm_read_leb128 (abfd, &error, &bytes_read, false);
 	  if (error)
 	    goto error_return;
-	  section_start = bfd_tell (abfd);
-	  namelen = wasm_read_leb128 (abfd, &error, &bytes_read, FALSE);
-	  if (error || namelen > payload_len)
-	    goto error_return;
-	  name = bfd_zmalloc (namelen + strlen (prefix) + 1);
-	  if (! name)
-	    goto error_return;
-	  p = name;
-	  ret = sprintf (p, "%s", prefix);
-	  if (ret < 0 || (bfd_vma) ret != strlen (prefix))
+	  namelen = wasm_read_leb128 (abfd, &error, &bytes_read, false);
+	  if (error || bytes_read > payload_len
+	      || namelen > payload_len - bytes_read)
+	    goto error_return;
+	  payload_len -= namelen + bytes_read;
+	  filesize = bfd_get_file_size (abfd);
+	  if (filesize != 0 && namelen > filesize)
+	    {
+	      bfd_set_error (bfd_error_file_truncated);
+	      return false;
+	    }
+	  name = bfd_alloc (abfd, namelen + prefixlen + 1);
+	  if (!name)
 	    goto error_return;
-	  p += ret;
-	  if (bfd_bread (p, namelen, abfd) != namelen)
+	  memcpy (name, prefix, prefixlen);
+	  if (bfd_read (name + prefixlen, namelen, abfd) != namelen)
 	    goto error_return;
+	  name[prefixlen + namelen] = 0;
 
-	  bfdsec = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
+	  bfdsec = bfd_make_section_anyway_with_flags (abfd, name,
+						       SEC_HAS_CONTENTS);
 	  if (bfdsec == NULL)
 	    goto error_return;
-	  name = NULL;
 
-	  bfdsec->vma = vma;
-	  bfdsec->lma = vma;
-	  bfdsec->filepos = bfd_tell (abfd);
-	  bfdsec->size = section_start + payload_len - bfdsec->filepos;
-	  bfdsec->alignment_power = 0;
+	  bfdsec->size = payload_len;
 	}
 
+      bfdsec->vma = vma;
+      bfdsec->lma = vma;
+      bfdsec->alignment_power = 0;
+      bfdsec->filepos = bfd_tell (abfd);
       if (bfdsec->size != 0)
 	{
-	  bfdsec->contents = bfd_zalloc (abfd, bfdsec->size);
-	  if (! bfdsec->contents)
-	    goto error_return;
-
-	  if (bfd_bread (bfdsec->contents, bfdsec->size, abfd) != bfdsec->size)
+	  bfdsec->contents = _bfd_alloc_and_read (abfd, bfdsec->size,
+						  bfdsec->size);
+	  if (!bfdsec->contents)
 	    goto error_return;
 	}
 
@@ -468,16 +478,10 @@ wasm_scan (bfd *abfd)
   if (error)
     goto error_return;
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (name)
-    free (name);
-
-  for (bfdsec = abfd->sections; bfdsec; bfdsec = bfdsec->next)
-    free ((void *) bfdsec->name);
-
-  return FALSE;
+  return false;
 }
 
 /* Put a numbered section ASECT of ABFD into the table of numbered
@@ -500,7 +504,7 @@ wasm_register_section (bfd *abfd ATTRIBU
 struct compute_section_arg
 {
   bfd_vma pos;
-  bfd_boolean failed;
+  bool failed;
 };
 
 /* Compute the file position of ABFD's section ASECT.  FSARG is a
@@ -528,7 +532,7 @@ wasm_compute_custom_section_file_positio
   if (idx != 0)
     return;
 
-  if (CONST_STRNEQ (asect->name, WASM_SECTION_PREFIX))
+  if (startswith (asect->name, WASM_SECTION_PREFIX))
     {
       const char *name = asect->name + strlen (WASM_SECTION_PREFIX);
       bfd_size_type payload_len = asect->size;
@@ -544,11 +548,11 @@ wasm_compute_custom_section_file_positio
 	}
       while (nl);
 
-      bfd_seek (abfd, fs->pos, SEEK_SET);
-      if (! wasm_write_uleb128 (abfd, 0)
+      if (bfd_seek (abfd, fs->pos, SEEK_SET) != 0
+	  || ! wasm_write_uleb128 (abfd, 0)
 	  || ! wasm_write_uleb128 (abfd, payload_len)
 	  || ! wasm_write_uleb128 (abfd, name_len)
-	  || bfd_bwrite (name, name_len, abfd) != name_len)
+	  || bfd_write (name, name_len, abfd) != name_len)
 	goto error_return;
       fs->pos = asect->filepos = bfd_tell (abfd);
     }
@@ -562,7 +566,7 @@ wasm_compute_custom_section_file_positio
   return;
 
  error_return:
-  fs->failed = TRUE;
+  fs->failed = true;
 }
 
 /* Compute the file positions for the sections of ABFD.  Currently,
@@ -573,7 +577,7 @@ wasm_compute_custom_section_file_positio
    their ids, but custom sections can appear in any position and any
    order, and more than once. FIXME: support that.  */
 
-static bfd_boolean
+static bool
 wasm_compute_section_file_positions (bfd *abfd)
 {
   bfd_byte magic[SIZEOF_WASM_MAGIC] = WASM_MAGIC;
@@ -582,11 +586,10 @@ wasm_compute_section_file_positions (bfd
   struct compute_section_arg fs;
   unsigned int i;
 
-  bfd_seek (abfd, (bfd_vma) 0, SEEK_SET);
-
-  if (bfd_bwrite (magic, sizeof (magic), abfd) != (sizeof magic)
-      || bfd_bwrite (vers, sizeof (vers), abfd) != sizeof (vers))
-    return FALSE;
+  if (bfd_seek (abfd, (bfd_vma) 0, SEEK_SET) != 0
+      || bfd_write (magic, sizeof (magic), abfd) != (sizeof magic)
+      || bfd_write (vers, sizeof (vers), abfd) != sizeof (vers))
+    return false;
 
   for (i = 0; i < WASM_NUMBERED_SECTIONS; i++)
     numbered_sections[i] = NULL;
@@ -603,27 +606,27 @@ wasm_compute_section_file_positions (bfd
 	continue;
       size = sec->size;
       if (bfd_seek (abfd, fs.pos, SEEK_SET) != 0)
-	return FALSE;
+	return false;
       if (! wasm_write_uleb128 (abfd, i)
 	  || ! wasm_write_uleb128 (abfd, size))
-	return FALSE;
+	return false;
       fs.pos = sec->filepos = bfd_tell (abfd);
       fs.pos += size;
     }
 
-  fs.failed = FALSE;
+  fs.failed = false;
 
   bfd_map_over_sections (abfd, wasm_compute_custom_section_file_position, &fs);
 
   if (fs.failed)
-    return FALSE;
+    return false;
 
-  abfd->output_has_begun = TRUE;
+  abfd->output_has_begun = true;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 wasm_set_section_contents (bfd *abfd,
 			   sec_ptr section,
 			   const void *location,
@@ -631,49 +634,49 @@ wasm_set_section_contents (bfd *abfd,
 			   bfd_size_type count)
 {
   if (count == 0)
-    return TRUE;
+    return true;
 
   if (! abfd->output_has_begun
       && ! wasm_compute_section_file_positions (abfd))
-    return FALSE;
+    return false;
 
   if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
-      || bfd_bwrite (location, count, abfd) != count)
-    return FALSE;
+      || bfd_write (location, count, abfd) != count)
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 wasm_write_object_contents (bfd* abfd)
 {
   bfd_byte magic[] = WASM_MAGIC;
   bfd_byte vers[] = WASM_VERSION;
 
   if (bfd_seek (abfd, 0, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
-  if (bfd_bwrite (magic, sizeof (magic), abfd) != sizeof (magic)
-      || bfd_bwrite (vers, sizeof (vers), abfd) != sizeof (vers))
-    return FALSE;
+  if (bfd_write (magic, sizeof (magic), abfd) != sizeof (magic)
+      || bfd_write (vers, sizeof (vers), abfd) != sizeof (vers))
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 wasm_mkobject (bfd *abfd)
 {
   tdata_type *tdata = (tdata_type *) bfd_alloc (abfd, sizeof (tdata_type));
 
   if (! tdata)
-    return FALSE;
+    return false;
 
   tdata->symbols = NULL;
   tdata->symcount = 0;
 
   abfd->tdata.any = tdata;
 
-  return TRUE;
+  return true;
 }
 
 static long
@@ -700,7 +703,7 @@ wasm_canonicalize_symtab (bfd *abfd, asy
 static asymbol *
 wasm_make_empty_symbol (bfd *abfd)
 {
-  bfd_size_type amt = sizeof (asymbol);
+  size_t amt = sizeof (asymbol);
   asymbol *new_symbol = (asymbol *) bfd_zalloc (abfd, amt);
 
   if (! new_symbol)
@@ -739,30 +742,37 @@ wasm_get_symbol_info (bfd *abfd ATTRIBUT
 
 /* Check whether ABFD is a WebAssembly module; if so, scan it.  */
 
-static const bfd_target *
+static bfd_cleanup
 wasm_object_p (bfd *abfd)
 {
-  bfd_boolean error;
+  bool error;
+  asection *s;
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
     return NULL;
 
-  if (! wasm_read_header (abfd, &error))
+  if (!wasm_read_header (abfd, &error))
     {
       bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
-  if (! wasm_mkobject (abfd) || ! wasm_scan (abfd))
+  if (!wasm_mkobject (abfd))
     return NULL;
 
-  if (! bfd_default_set_arch_mach (abfd, bfd_arch_wasm32, 0))
-    return NULL;
+  if (!wasm_scan (abfd)
+      || !bfd_default_set_arch_mach (abfd, bfd_arch_wasm32, 0))
+    {
+      bfd_release (abfd, abfd->tdata.any);
+      abfd->tdata.any = NULL;
+      return NULL;
+    }
 
-  if (wasm_scan_name_function_section (abfd, bfd_get_section_by_name (abfd, WASM_NAME_SECTION)))
+  s = bfd_get_section_by_name (abfd, WASM_NAME_SECTION);
+  if (s != NULL && wasm_scan_name_function_section (abfd, s))
     abfd->flags |= HAS_SYMS;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 /* BFD_JUMP_TABLE_WRITE */
@@ -774,6 +784,7 @@ wasm_object_p (bfd *abfd)
 #define wasm_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false
 #define wasm_get_lineno			  _bfd_nosymbols_get_lineno
 #define wasm_find_nearest_line		  _bfd_nosymbols_find_nearest_line
+#define wasm_find_nearest_line_with_alt	  _bfd_nosymbols_find_nearest_line_with_alt
 #define wasm_find_line			  _bfd_nosymbols_find_line
 #define wasm_find_inliner_info		  _bfd_nosymbols_find_inliner_info
 #define wasm_bfd_make_debug_symbol	  _bfd_nosymbols_bfd_make_debug_symbol
@@ -792,6 +803,7 @@ const bfd_target wasm_vec =
   ' ',				/* AR_pad_char.  */
   255,				/* AR_max_namelen.  */
   0,				/* Match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   /* Routines to byte-swap various sized integers from the data sections.  */
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/wasm-module.h ./bfd/wasm-module.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/wasm-module.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/wasm-module.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for WebAssembly modules.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xcofflink.c ./bfd/xcofflink.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xcofflink.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/xcofflink.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* POWER/PowerPC XCOFF linker support.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
    Written by Ian Lance Taylor <ian@cygnus.com>, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -35,11 +35,6 @@
 #undef  STRING_SIZE_SIZE
 #define STRING_SIZE_SIZE 4
 
-/* We reuse the SEC_ROM flag as a mark flag for garbage collection.
-   This flag will only be used on input sections.  */
-
-#define SEC_MARK (SEC_ROM)
-
 /* The list of import files.  */
 
 struct xcoff_import_file
@@ -98,6 +93,12 @@ struct xcoff_link_hash_table
 {
   struct bfd_link_hash_table root;
 
+  /* The stub hash table.  */
+  struct bfd_hash_table stub_hash_table;
+
+  /* Info passed by the linker.  */
+  struct bfd_xcoff_link_params *params;
+
   /* The .debug string hash table.  We need to compute this while
      reading the input files, so that we know how large the .debug
      section will be before we assign section positions.  */
@@ -109,9 +110,8 @@ struct xcoff_link_hash_table
   /* The .loader section we will use for the final output.  */
   asection *loader_section;
 
-  /* A count of non TOC relative relocs which will need to be
-     allocated in the .loader section.  */
-  size_t ldrel_count;
+  /* The structure holding information about the .loader section.  */
+  struct xcoff_loader_info ldinfo;
 
   /* The .loader section header.  */
   struct internal_ldhdr ldhdr;
@@ -134,13 +134,13 @@ struct xcoff_link_hash_table
   unsigned long file_align;
 
   /* Whether the .text section must be read-only.  */
-  bfd_boolean textro;
+  bool textro;
 
   /* Whether -brtl was specified.  */
-  bfd_boolean rtld;
+  bool rtld;
 
   /* Whether garbage collection was done.  */
-  bfd_boolean gc;
+  bool gc;
 
   /* A linked list of symbols for which we have size information.  */
   struct xcoff_link_size_list
@@ -199,7 +199,14 @@ struct xcoff_final_link_info
   bfd_byte *external_relocs;
 };
 
-static bfd_boolean xcoff_mark (struct bfd_link_info *, asection *);
+#define xcoff_stub_hash_entry(ent)		\
+  ((struct xcoff_stub_hash_entry *)(ent))
+
+#define xcoff_stub_hash_lookup(table, string, create, copy)	\
+  ((struct xcoff_stub_hash_entry *)				\
+   bfd_hash_lookup ((table), (string), (create), (copy)))
+
+static bool xcoff_mark (struct bfd_link_info *, asection *);
 
 
 
@@ -209,32 +216,31 @@ static bfd_boolean xcoff_mark (struct bf
 
 /* Read the contents of a section.  */
 
-static bfd_boolean
+static bfd_byte *
 xcoff_get_section_contents (bfd *abfd, asection *sec)
 {
   if (coff_section_data (abfd, sec) == NULL)
     {
-      bfd_size_type amt = sizeof (struct coff_section_tdata);
+      size_t amt = sizeof (struct coff_section_tdata);
 
       sec->used_by_bfd = bfd_zalloc (abfd, amt);
       if (sec->used_by_bfd == NULL)
-	return FALSE;
+       return NULL;
     }
 
-  if (coff_section_data (abfd, sec)->contents == NULL)
+  bfd_byte *contents = coff_section_data (abfd, sec)->contents;
+  if (contents == NULL)
     {
-      bfd_byte *contents;
-
-      if (! bfd_malloc_and_get_section (abfd, sec, &contents))
+      if (bfd_malloc_and_get_section (abfd, sec, &contents))
+	coff_section_data (abfd, sec)->contents = contents;
+      else
 	{
-	  if (contents != NULL)
-	    free (contents);
-	  return FALSE;
+	  free (contents);
+	  contents = NULL;
 	}
-      coff_section_data (abfd, sec)->contents = contents;
     }
 
-  return TRUE;
+  return contents;
 }
 
 /* Get the size required to hold the dynamic symbols.  */
@@ -253,15 +259,15 @@ _bfd_xcoff_get_dynamic_symtab_upper_boun
     }
 
   lsec = bfd_get_section_by_name (abfd, ".loader");
-  if (lsec == NULL)
+  if (lsec == NULL || (lsec->flags & SEC_HAS_CONTENTS) == 0)
     {
       bfd_set_error (bfd_error_no_symbols);
       return -1;
     }
 
-  if (! xcoff_get_section_contents (abfd, lsec))
+  contents = xcoff_get_section_contents (abfd, lsec);
+  if (!contents)
     return -1;
-  contents = coff_section_data (abfd, lsec)->contents;
 
   bfd_xcoff_swap_ldhdr_in (abfd, (void *) contents, &ldhdr);
 
@@ -287,17 +293,15 @@ _bfd_xcoff_canonicalize_dynamic_symtab (
     }
 
   lsec = bfd_get_section_by_name (abfd, ".loader");
-  if (lsec == NULL)
+  if (lsec == NULL || (lsec->flags & SEC_HAS_CONTENTS) == 0)
     {
       bfd_set_error (bfd_error_no_symbols);
       return -1;
     }
 
-  if (! xcoff_get_section_contents (abfd, lsec))
+  contents = xcoff_get_section_contents (abfd, lsec);
+  if (!contents)
     return -1;
-  contents = coff_section_data (abfd, lsec)->contents;
-
-  coff_section_data (abfd, lsec)->keep_contents = TRUE;
 
   bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);
 
@@ -374,15 +378,15 @@ _bfd_xcoff_get_dynamic_reloc_upper_bound
     }
 
   lsec = bfd_get_section_by_name (abfd, ".loader");
-  if (lsec == NULL)
+  if (lsec == NULL || (lsec->flags & SEC_HAS_CONTENTS) == 0)
     {
       bfd_set_error (bfd_error_no_symbols);
       return -1;
     }
 
-  if (! xcoff_get_section_contents (abfd, lsec))
+  contents = xcoff_get_section_contents (abfd, lsec);
+  if (!contents)
     return -1;
-  contents = coff_section_data (abfd, lsec)->contents;
 
   bfd_xcoff_swap_ldhdr_in (abfd, (struct external_ldhdr *) contents, &ldhdr);
 
@@ -409,15 +413,15 @@ _bfd_xcoff_canonicalize_dynamic_reloc (b
     }
 
   lsec = bfd_get_section_by_name (abfd, ".loader");
-  if (lsec == NULL)
+  if (lsec == NULL || (lsec->flags & SEC_HAS_CONTENTS) == 0)
     {
       bfd_set_error (bfd_error_no_symbols);
       return -1;
     }
 
-  if (! xcoff_get_section_contents (abfd, lsec))
+  contents = xcoff_get_section_contents (abfd, lsec);
+  if (!contents)
     return -1;
-  contents = coff_section_data (abfd, lsec)->contents;
 
   bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);
 
@@ -526,7 +530,7 @@ xcoff_get_archive_info (struct bfd_link_
   entryp = *slot;
   if (!entryp)
     {
-      entryp = bfd_zalloc (archive, sizeof (entry));
+      entryp = bfd_zalloc (info->output_bfd, sizeof (entry));
       if (!entryp)
 	return NULL;
 
@@ -536,6 +540,41 @@ xcoff_get_archive_info (struct bfd_link_
   return entryp;
 }
 
+
+/* Initialize an entry in the stub hash table.  */
+static struct bfd_hash_entry *
+stub_hash_newfunc (struct bfd_hash_entry *entry,
+		   struct bfd_hash_table *table,
+		   const char *string)
+{
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (entry == NULL)
+    {
+      entry = bfd_hash_allocate (table,
+				 sizeof (struct xcoff_stub_hash_entry));
+      if (entry == NULL)
+	return entry;
+    }
+
+  /* Call the allocation method of the superclass.  */
+  entry = bfd_hash_newfunc (entry, table, string);
+  if (entry != NULL)
+    {
+      struct xcoff_stub_hash_entry *hsh;
+
+      /* Initialize the local fields.  */
+      hsh = (struct xcoff_stub_hash_entry *) entry;
+      hsh->stub_type = xcoff_stub_none;
+      hsh->hcsect = NULL;
+      hsh->stub_offset = 0;
+      hsh->target_section = NULL;
+      hsh->htarget = NULL;
+    }
+
+  return entry;
+}
+
 /* Routine to create an entry in an XCOFF link hash table.  */
 
 static struct bfd_hash_entry *
@@ -584,6 +623,8 @@ _bfd_xcoff_bfd_link_hash_table_free (bfd
     htab_delete (ret->archive_info);
   if (ret->debug_strtab)
     _bfd_stringtab_free (ret->debug_strtab);
+
+  bfd_hash_table_free (&ret->stub_hash_table);
   _bfd_generic_link_hash_table_free (obfd);
 }
 
@@ -593,7 +634,8 @@ struct bfd_link_hash_table *
 _bfd_xcoff_bfd_link_hash_table_create (bfd *abfd)
 {
   struct xcoff_link_hash_table *ret;
-  bfd_size_type amt = sizeof (* ret);
+  bool isxcoff64 = false;
+  size_t amt = sizeof (* ret);
 
   ret = bfd_zmalloc (amt);
   if (ret == NULL)
@@ -605,7 +647,17 @@ _bfd_xcoff_bfd_link_hash_table_create (b
       return NULL;
     }
 
-  ret->debug_strtab = _bfd_xcoff_stringtab_init ();
+  /* Init the stub hash table too.  */
+  if (!bfd_hash_table_init (&ret->stub_hash_table, stub_hash_newfunc,
+			    sizeof (struct xcoff_stub_hash_entry)))
+    {
+      _bfd_xcoff_bfd_link_hash_table_free (abfd);
+      return NULL;
+    }
+
+  isxcoff64 = bfd_coff_debug_string_prefix_length (abfd) == 4;
+
+  ret->debug_strtab = _bfd_xcoff_stringtab_init (isxcoff64);
   ret->archive_info = htab_create (37, xcoff_archive_info_hash,
 				   xcoff_archive_info_eq, NULL);
   if (!ret->debug_strtab || !ret->archive_info)
@@ -618,7 +670,7 @@ _bfd_xcoff_bfd_link_hash_table_create (b
   /* The linker will always generate a full a.out header.  We need to
      record that fact now, before the sizeof_headers routine could be
      called.  */
-  xcoff_data (abfd)->full_aouthdr = TRUE;
+  xcoff_data (abfd)->full_aouthdr = true;
 
   return &ret->root;
 }
@@ -630,9 +682,9 @@ _bfd_xcoff_bfd_link_hash_table_create (b
 static struct internal_reloc *
 xcoff_read_internal_relocs (bfd *abfd,
 			    asection *sec,
-			    bfd_boolean cache,
+			    bool cache,
 			    bfd_byte *external_relocs,
-			    bfd_boolean require_internal,
+			    bool require_internal,
 			    struct internal_reloc *internal_relocs)
 {
   if (coff_section_data (abfd, sec) != NULL
@@ -649,8 +701,8 @@ xcoff_read_internal_relocs (bfd *abfd,
 	  && cache
 	  && enclosing->reloc_count > 0)
 	{
-	  if (_bfd_coff_read_internal_relocs (abfd, enclosing, TRUE,
-					      external_relocs, FALSE, NULL)
+	  if (_bfd_coff_read_internal_relocs (abfd, enclosing, true,
+					      external_relocs, false, NULL)
 	      == NULL)
 	    return NULL;
 	}
@@ -680,7 +732,7 @@ xcoff_read_internal_relocs (bfd *abfd,
 /* Split FILENAME into an import path and an import filename,
    storing them in *IMPPATH and *IMPFILE respectively.  */
 
-bfd_boolean
+bool
 bfd_xcoff_split_import_path (bfd *abfd, const char *filename,
 			     const char **imppath, const char **impfile)
 {
@@ -703,19 +755,19 @@ bfd_xcoff_split_import_path (bfd *abfd,
 	 of the string; the native linker doesn't do that either.  */
       path = bfd_alloc (abfd, length);
       if (path == NULL)
-	return FALSE;
+	return false;
       memcpy (path, filename, length - 1);
       path[length - 1] = 0;
       *imppath = path;
     }
   *impfile = base;
-  return TRUE;
+  return true;
 }
 
 /* Set ARCHIVE's import path as though its filename had been given
    as FILENAME.  */
 
-bfd_boolean
+bool
 bfd_xcoff_set_archive_import_path (struct bfd_link_info *info,
 				   bfd *archive, const char *filename)
 {
@@ -732,7 +784,7 @@ bfd_xcoff_set_archive_import_path (struc
    to IMPATH, IMPFILE and IMPMEMBER respectively.  All three are null if
    no specific import module is specified.  */
 
-static bfd_boolean
+static bool
 xcoff_set_import_path (struct bfd_link_info *info,
 		       struct xcoff_link_hash_entry *h,
 		       const char *imppath, const char *impfile,
@@ -764,11 +816,11 @@ xcoff_set_import_path (struct bfd_link_i
       if (*pp == NULL)
 	{
 	  struct xcoff_import_file *n;
-	  bfd_size_type amt = sizeof (* n);
+	  size_t amt = sizeof (*n);
 
 	  n = bfd_alloc (info->output_bfd, amt);
 	  if (n == NULL)
-	    return FALSE;
+	    return false;
 	  n->next = NULL;
 	  n->path = imppath;
 	  n->file = impfile;
@@ -777,20 +829,20 @@ xcoff_set_import_path (struct bfd_link_i
 	}
       h->ldindx = c;
     }
-  return TRUE;
+  return true;
 }
 
 /* H is the bfd symbol associated with exported .loader symbol LDSYM.
    Return true if LDSYM defines H.  */
 
-static bfd_boolean
+static bool
 xcoff_dynamic_definition_p (struct xcoff_link_hash_entry *h,
 			    struct internal_ldsym *ldsym)
 {
   /* If we didn't know about H before processing LDSYM, LDSYM
      definitely defines H.  */
   if (h->root.type == bfd_link_hash_new)
-    return TRUE;
+    return true;
 
   /* If H is currently a weak dynamic symbol, and if LDSYM is a strong
      dynamic symbol, LDSYM trumps the current definition of H.  */
@@ -799,21 +851,25 @@ xcoff_dynamic_definition_p (struct xcoff
       && (h->flags & XCOFF_DEF_REGULAR) == 0
       && (h->root.type == bfd_link_hash_defweak
 	  || h->root.type == bfd_link_hash_undefweak))
-    return TRUE;
+    return true;
 
-  /* If H is currently undefined, LDSYM defines it.  */
+  /* If H is currently undefined, LDSYM defines it.
+     However, if H has a hidden visibility, LDSYM must not
+     define it.  */
   if ((h->flags & XCOFF_DEF_DYNAMIC) == 0
       && (h->root.type == bfd_link_hash_undefined
-	  || h->root.type == bfd_link_hash_undefweak))
-    return TRUE;
+	  || h->root.type == bfd_link_hash_undefweak)
+      && (h->visibility != SYM_V_HIDDEN
+	  && h->visibility != SYM_V_INTERNAL))
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* This function is used to add symbols from a dynamic object to the
    global symbol table.  */
 
-static bfd_boolean
+static bool
 xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   asection *lsec;
@@ -833,7 +889,7 @@ xcoff_link_add_dynamic_symbols (bfd *abf
 	(_("%pB: XCOFF shared object when not producing XCOFF output"),
 	 abfd);
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   /* The symbols we use from a dynamic object are not the symbols in
@@ -848,18 +904,18 @@ xcoff_link_add_dynamic_symbols (bfd *abf
      o_snloader field in the a.out header, rather than grabbing the
      section by name.  */
   lsec = bfd_get_section_by_name (abfd, ".loader");
-  if (lsec == NULL)
+  if (lsec == NULL || (lsec->flags & SEC_HAS_CONTENTS) == 0)
     {
       _bfd_error_handler
 	(_("%pB: dynamic object with no .loader section"),
 	 abfd);
       bfd_set_error (bfd_error_no_symbols);
-      return FALSE;
+      return false;
     }
 
-  if (! xcoff_get_section_contents (abfd, lsec))
-    return FALSE;
-  contents = coff_section_data (abfd, lsec)->contents;
+  contents = xcoff_get_section_contents (abfd, lsec);
+  if (!contents)
+    return false;
 
   /* Remove the sections from this object, so that they do not get
      included in the link.  */
@@ -900,10 +956,10 @@ xcoff_link_add_dynamic_symbols (bfd *abf
 	 table.  However, we verified above that we are using an XCOFF
 	 hash table.  */
 
-      h = xcoff_link_hash_lookup (xcoff_hash_table (info), name, TRUE,
-				  TRUE, TRUE);
+      h = xcoff_link_hash_lookup (xcoff_hash_table (info), name, true,
+				  true, true);
       if (h == NULL)
-	return FALSE;
+	return false;
 
       if (!xcoff_dynamic_definition_p (h, &ldsym))
 	continue;
@@ -949,14 +1005,14 @@ xcoff_link_add_dynamic_symbols (bfd *abf
 
 	      dsnm = bfd_malloc ((bfd_size_type) strlen (name) + 2);
 	      if (dsnm == NULL)
-		return FALSE;
+		return false;
 	      dsnm[0] = '.';
 	      strcpy (dsnm + 1, name);
 	      hds = xcoff_link_hash_lookup (xcoff_hash_table (info), dsnm,
-					    TRUE, TRUE, TRUE);
+					    true, true, true);
 	      free (dsnm);
 	      if (hds == NULL)
-		return FALSE;
+		return false;
 
 	      hds->descriptor = h;
 	      h->descriptor = hds;
@@ -986,23 +1042,20 @@ xcoff_link_add_dynamic_symbols (bfd *abf
 	}
     }
 
-  if (contents != NULL && ! coff_section_data (abfd, lsec)->keep_contents)
-    {
-      free (coff_section_data (abfd, lsec)->contents);
-      coff_section_data (abfd, lsec)->contents = NULL;
-    }
+  free (contents);
+  coff_section_data (abfd, lsec)->contents = NULL;
 
   /* Record this file in the import files.  */
   n = bfd_alloc (abfd, (bfd_size_type) sizeof (struct xcoff_import_file));
   if (n == NULL)
-    return FALSE;
+    return false;
   n->next = NULL;
 
   if (abfd->my_archive == NULL || bfd_is_thin_archive (abfd->my_archive))
     {
-      if (!bfd_xcoff_split_import_path (abfd, abfd->filename,
+      if (!bfd_xcoff_split_import_path (abfd, bfd_get_filename (abfd),
 					&n->path, &n->file))
-	return FALSE;
+	return false;
       n->member = "";
     }
   else
@@ -1013,10 +1066,11 @@ xcoff_link_add_dynamic_symbols (bfd *abf
       if (!archive_info->impfile)
 	{
 	  if (!bfd_xcoff_split_import_path (archive_info->archive,
-					    archive_info->archive->filename,
+					    bfd_get_filename (archive_info
+							      ->archive),
 					    &archive_info->imppath,
 					    &archive_info->impfile))
-	    return FALSE;
+	    return false;
 	}
       n->path = archive_info->imppath;
       n->file = archive_info->impfile;
@@ -1033,17 +1087,17 @@ xcoff_link_add_dynamic_symbols (bfd *abf
 
   xcoff_data (abfd)->import_file_id = c;
 
-  return TRUE;
+  return true;
 }
 
 /* xcoff_link_create_extra_sections
 
    Takes care of creating the .loader, .gl, .ds, .debug and sections.  */
 
-static bfd_boolean
+static bool
 xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
 {
-  bfd_boolean return_value = FALSE;
+  bool return_value = false;
 
   if (info->output_bfd->xvec == abfd->xvec)
     {
@@ -1124,7 +1178,7 @@ xcoff_link_create_extra_sections (bfd *
 	}
     }
 
-  return_value = TRUE;
+  return_value = true;
 
  end_return:
 
@@ -1180,6 +1234,26 @@ xcoff_find_reloc (struct internal_reloc
   return min;
 }
 
+/* Return true if the symbol has to be added to the linker hash
+   table.  */
+static bool
+xcoff_link_add_symbols_to_hash_table (struct internal_syment sym,
+				      union internal_auxent aux)
+{
+  /* External symbols must be added.  */
+  if (EXTERN_SYM_P (sym.n_sclass))
+    return true;
+
+  /* Hidden TLS symbols must be added to verify TLS relocations
+     in xcoff_reloc_type_tls.  */
+  if (sym.n_sclass == C_HIDEXT
+      && ((aux.x_csect.x_smclas == XMC_TL
+	   || aux.x_csect.x_smclas == XMC_UL)))
+    return true;
+
+  return false;
+}
+
 /* Add all the symbols from an object file to the hash table.
 
    XCOFF is a weird format.  A normal XCOFF .o files will have three
@@ -1198,12 +1272,12 @@ xcoff_find_reloc (struct internal_reloc
    relocation entries carefully, since the only way to tell which
    csect they belong to is to examine the address.  */
 
-static bfd_boolean
+static bool
 xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   unsigned int n_tmask;
   unsigned int n_btshft;
-  bfd_boolean default_copy;
+  bool default_copy;
   bfd_size_type symcount;
   struct xcoff_link_hash_entry **sym_hash;
   asection **csect_cache;
@@ -1211,7 +1285,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
   bfd_size_type linesz;
   asection *o;
   asection *last_real;
-  bfd_boolean keep_syms;
+  bool keep_syms;
   asection *csect;
   unsigned int csect_index;
   asection *first_csect;
@@ -1225,6 +1299,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
     bfd_byte *linenos;
   } *reloc_info = NULL;
   bfd_size_type amt;
+  unsigned short visibility;
 
   keep_syms = obj_coff_keep_syms (abfd);
 
@@ -1232,7 +1307,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
       && ! info->static_link)
     {
       if (! xcoff_link_add_dynamic_symbols (abfd, info))
-	return FALSE;
+	return false;
     }
 
   /* Create the loader, toc, gl, ds and debug sections, if needed.  */
@@ -1241,7 +1316,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
 
   if ((abfd->flags & DYNAMIC) != 0
       && ! info->static_link)
-    return TRUE;
+    return true;
 
   n_tmask = coff_data (abfd)->local_n_tmask;
   n_btshft = coff_data (abfd)->local_n_btshft;
@@ -1251,9 +1326,9 @@ xcoff_link_add_symbols (bfd *abfd, struc
 #define N_BTSHFT n_btshft
 
   if (info->keep_memory)
-    default_copy = FALSE;
+    default_copy = false;
   else
-    default_copy = TRUE;
+    default_copy = true;
 
   symcount = obj_raw_syment_count (abfd);
 
@@ -1304,7 +1379,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
       if ((o->flags & SEC_RELOC) != 0)
 	{
 	  reloc_info[o->target_index].relocs =
-	    xcoff_read_internal_relocs (abfd, o, TRUE, NULL, FALSE, NULL);
+	    xcoff_read_internal_relocs (abfd, o, true, NULL, false, NULL);
 	  amt = o->reloc_count;
 	  amt *= sizeof (asection *);
 	  reloc_info[o->target_index].csects = bfd_zmalloc (amt);
@@ -1317,19 +1392,22 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	{
 	  bfd_byte *linenos;
 
-	  amt = linesz * o->lineno_count;
-	  linenos = bfd_malloc (amt);
+	  if (bfd_seek (abfd, o->line_filepos, SEEK_SET) != 0)
+	    goto error_return;
+	  if (_bfd_mul_overflow (linesz, o->lineno_count, &amt))
+	    {
+	      bfd_set_error (bfd_error_file_too_big);
+	      goto error_return;
+	    }
+	  linenos = _bfd_malloc_and_read (abfd, amt, amt);
 	  if (linenos == NULL)
 	    goto error_return;
 	  reloc_info[o->target_index].linenos = linenos;
-	  if (bfd_seek (abfd, o->line_filepos, SEEK_SET) != 0
-	      || bfd_bread (linenos, amt, abfd) != amt)
-	    goto error_return;
 	}
     }
 
   /* Don't let the linker relocation routines discard the symbols.  */
-  obj_coff_keep_syms (abfd) = TRUE;
+  obj_coff_keep_syms (abfd) = true;
 
   csect = NULL;
   csect_index = 0;
@@ -1459,6 +1537,9 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	    }
 	}
 
+      /* Record visibility.  */
+      visibility = sym.n_type & SYM_V_MASK;
+
       /* Pick up the csect auxiliary information.  */
       if (sym.n_numaux == 0)
 	{
@@ -1496,14 +1577,14 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	  /* This is an external reference.  */
 	  if (sym.n_sclass == C_HIDEXT
 	      || sym.n_scnum != N_UNDEF
-	      || aux.x_csect.x_scnlen.l != 0)
+	      || aux.x_csect.x_scnlen.u64 != 0)
 	    {
 	      _bfd_error_handler
 		/* xgettext:c-format */
 		(_("%pB: bad XTY_ER symbol `%s': class %d scnum %d "
 		   "scnlen %" PRId64),
 		 abfd, name, sym.n_sclass, sym.n_scnum,
-		 (int64_t) aux.x_csect.x_scnlen.l);
+		 aux.x_csect.x_scnlen.u64);
 	      bfd_set_error (bfd_error_bad_value);
 	      goto error_return;
 	    }
@@ -1527,12 +1608,12 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	  if (aux.x_csect.x_smclas == XMC_TC0)
 	    {
 	      if (sym.n_sclass != C_HIDEXT
-		  || aux.x_csect.x_scnlen.l != 0)
+		  || aux.x_csect.x_scnlen.u64 != 0)
 		{
 		  _bfd_error_handler
 		    /* xgettext:c-format */
-		    (_("%pB: XMC_TC0 symbol `%s' is class %d scnlen %" PRId64),
-		     abfd, name, sym.n_sclass, (int64_t) aux.x_csect.x_scnlen.l);
+		    (_("%pB: XMC_TC0 symbol `%s' is class %d scnlen %" PRIu64),
+		     abfd, name, sym.n_sclass, aux.x_csect.x_scnlen.u64);
 		  bfd_set_error (bfd_error_bad_value);
 		  goto error_return;
 		}
@@ -1550,6 +1631,11 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	     32 bit has a csect length of 4 for TOC
 	     64 bit has a csect length of 8 for TOC
 
+	     An exception is made for TOC entries with a R_TLSML
+	     relocation.  This relocation is made for the loader.
+	     We must check that the referenced symbol is the TOC entry
+	     itself.
+
 	     The conditions to get past the if-check are not that bad.
 	     They are what is used to create the TOC csects in the first
 	     place.  */
@@ -1557,9 +1643,9 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	      && sym.n_sclass == C_HIDEXT
 	      && info->output_bfd->xvec == abfd->xvec
 	      && ((bfd_xcoff_is_xcoff32 (abfd)
-		   && aux.x_csect.x_scnlen.l == 4)
+		   && aux.x_csect.x_scnlen.u64 == 4)
 		  || (bfd_xcoff_is_xcoff64 (abfd)
-		      && aux.x_csect.x_scnlen.l == 8)))
+		      && aux.x_csect.x_scnlen.u64 == 8)))
 	    {
 	      asection *enclosing;
 	      struct internal_reloc *relocs;
@@ -1579,7 +1665,8 @@ xcoff_link_add_symbols (bfd *abfd, struc
 		 64 bit R_POS r_size is 63  */
 	      if (relindx < enclosing->reloc_count
 		  && rel->r_vaddr == (bfd_vma) sym.n_value
-		  && rel->r_type == R_POS
+		  && (rel->r_type == R_POS ||
+		      rel->r_type == R_TLSML)
 		  && ((bfd_xcoff_is_xcoff32 (abfd)
 		       && rel->r_size == 31)
 		      || (bfd_xcoff_is_xcoff64 (abfd)
@@ -1596,7 +1683,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
 		    {
 		      const char *relname;
 		      char relbuf[SYMNMLEN + 1];
-		      bfd_boolean copy;
+		      bool copy;
 		      struct xcoff_link_hash_entry *h;
 
 		      /* At this point we know that the TOC entry is
@@ -1617,8 +1704,8 @@ xcoff_link_add_symbols (bfd *abfd, struc
 				  || relsym._n._n_n._n_zeroes != 0
 				  || relsym._n._n_n._n_offset == 0);
 			  h = xcoff_link_hash_lookup (xcoff_hash_table (info),
-						      relname, TRUE, copy,
-						      FALSE);
+						      relname, true, copy,
+						      false);
 			  if (h == NULL)
 			    goto error_return;
 
@@ -1651,6 +1738,22 @@ xcoff_link_add_symbols (bfd *abfd, struc
 			  set_toc = h;
 			}
 		    }
+		  else if (rel->r_type == R_TLSML)
+		    {
+			csect_index = ((esym
+					- (bfd_byte *) obj_coff_external_syms (abfd))
+				       / symesz);
+			if (((unsigned long) rel->r_symndx) != csect_index)
+			  {
+			    _bfd_error_handler
+			      /* xgettext:c-format */
+			      (_("%pB: TOC entry `%s' has a R_TLSML"
+				 "relocation not targeting itself"),
+			       abfd, name);
+			    bfd_set_error (bfd_error_bad_value);
+			    goto error_return;
+			  }
+		    }
 		}
 	    }
 
@@ -1673,7 +1776,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
 
 	    if (! bfd_is_abs_section (enclosing)
 		&& ((bfd_vma) sym.n_value < enclosing->vma
-		    || ((bfd_vma) sym.n_value + aux.x_csect.x_scnlen.l
+		    || (sym.n_value + aux.x_csect.x_scnlen.u64
 			> enclosing->vma + enclosing->size)))
 	      {
 		_bfd_error_handler
@@ -1687,7 +1790,8 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	    csect->filepos = (enclosing->filepos
 			      + sym.n_value
 			      - enclosing->vma);
-	    csect->size = aux.x_csect.x_scnlen.l;
+	    csect->size = aux.x_csect.x_scnlen.u64;
+	    csect->rawsize = aux.x_csect.x_scnlen.u64;
 	    csect->flags |= SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
 	    csect->alignment_power = SMTYP_ALIGN (aux.x_csect.x_smtyp);
 
@@ -1748,9 +1852,10 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	    if (first_csect == NULL)
 	      first_csect = csect;
 
-	    /* If this symbol is external, we treat it as starting at the
-	       beginning of the newly created section.  */
-	    if (EXTERN_SYM_P (sym.n_sclass))
+	    /* If this symbol must be added to the linker hash table,
+	       we treat it as starting at the beginning of the newly
+	       created section.  */
+	    if (xcoff_link_add_symbols_to_hash_table (sym, aux))
 	      {
 		section = csect;
 		value = 0;
@@ -1768,19 +1873,18 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	     follow its appropriate XTY_SD symbol.  The .set pseudo op can
 	     cause the XTY_LD to not follow the XTY_SD symbol. */
 	  {
-	    bfd_boolean bad;
+	    bool bad;
 
-	    bad = FALSE;
-	    if (aux.x_csect.x_scnlen.l < 0
-		|| (aux.x_csect.x_scnlen.l
-		    >= esym - (bfd_byte *) obj_coff_external_syms (abfd)))
-	      bad = TRUE;
+	    bad = false;
+	    if (aux.x_csect.x_scnlen.u64
+		>= (size_t) (esym - (bfd_byte *) obj_coff_external_syms (abfd)))
+	      bad = true;
 	    if (! bad)
 	      {
-		section = xcoff_data (abfd)->csects[aux.x_csect.x_scnlen.l];
+		section = xcoff_data (abfd)->csects[aux.x_csect.x_scnlen.u64];
 		if (section == NULL
 		    || (section->flags & SEC_HAS_CONTENTS) == 0)
-		  bad = TRUE;
+		  bad = true;
 	      }
 	    if (bad)
 	      {
@@ -1811,6 +1915,12 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	      csect = bfd_make_section_anyway_with_flags (abfd, ".td",
 							  SEC_ALLOC);
 	    }
+	  else if (aux.x_csect.x_smclas == XMC_UL)
+	    {
+	      /* This is a thread-local unitialized csect.  */
+	      csect = bfd_make_section_anyway_with_flags (abfd, ".tbss",
+							  SEC_ALLOC | SEC_THREAD_LOCAL);
+	    }
 	  else
 	    csect = bfd_make_section_anyway_with_flags (abfd, ".bss",
 							SEC_ALLOC);
@@ -1818,7 +1928,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	  if (csect == NULL)
 	    goto error_return;
 	  csect->vma = sym.n_value;
-	  csect->size = aux.x_csect.x_scnlen.l;
+	  csect->size = aux.x_csect.x_scnlen.u64;
 	  csect->alignment_power = SMTYP_ALIGN (aux.x_csect.x_smtyp);
 	  /* There are a number of other fields and section flags
 	     which we do not bother to set.  */
@@ -1840,12 +1950,12 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	  if (first_csect == NULL)
 	    first_csect = csect;
 
-	  if (EXTERN_SYM_P (sym.n_sclass))
+	  if (xcoff_link_add_symbols_to_hash_table (sym, aux))
 	    {
 	      csect->flags |= SEC_IS_COMMON;
 	      csect->size = 0;
 	      section = csect;
-	      value = aux.x_csect.x_scnlen.l;
+	      value = aux.x_csect.x_scnlen.u64;
 	    }
 
 	  break;
@@ -1881,9 +1991,9 @@ xcoff_link_add_symbols (bfd *abfd, struc
       /* Now we have enough information to add the symbol to the
 	 linker hash table.  */
 
-      if (EXTERN_SYM_P (sym.n_sclass))
+      if (xcoff_link_add_symbols_to_hash_table (sym, aux))
 	{
-	  bfd_boolean copy, ok;
+	  bool copy, ok;
 	  flagword flags;
 
 	  BFD_ASSERT (section != NULL);
@@ -1893,7 +2003,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	  copy = default_copy;
 	  if (sym._n._n_n._n_zeroes != 0
 	      || sym._n._n_n._n_offset == 0)
-	    copy = TRUE;
+	    copy = true;
 
 	  /* Ignore global linkage code when linking statically.  */
 	  if (info->static_link
@@ -1932,13 +2042,13 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	    {
 	      if (! bfd_is_und_section (section))
 		*sym_hash = xcoff_link_hash_lookup (xcoff_hash_table (info),
-						    name, TRUE, copy, FALSE);
+						    name, true, copy, false);
 	      else
 		/* Make a copy of the symbol name to prevent problems with
 		   merging symbols.  */
 		*sym_hash = ((struct xcoff_link_hash_entry *)
 			     bfd_wrapped_link_hash_lookup (abfd, info, name,
-							   TRUE, TRUE, FALSE));
+							   true, true, false));
 
 	      if (*sym_hash == NULL)
 		goto error_return;
@@ -2008,6 +2118,22 @@ xcoff_link_add_symbols (bfd *abfd, struc
 		  /* Try not to give this error too many times.  */
 		  (*sym_hash)->flags &= ~XCOFF_MULTIPLY_DEFINED;
 		}
+
+
+	      /* If the symbol is hidden or internal, completely undo
+		 any dynamic link state.  */
+	      if ((*sym_hash)->flags & XCOFF_DEF_DYNAMIC
+		  && (visibility == SYM_V_HIDDEN
+		      || visibility == SYM_V_INTERNAL))
+		  (*sym_hash)->flags &= ~XCOFF_DEF_DYNAMIC;
+	      else
+		{
+		  /* Keep the most constraining visibility.  */
+		  unsigned short hvis = (*sym_hash)->visibility;
+		  if (visibility && ( !hvis || visibility < hvis))
+		    (*sym_hash)->visibility = visibility;
+		}
+
 	    }
 
 	  /* _bfd_generic_link_add_one_symbol may call the linker to
@@ -2024,7 +2150,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
 	  last_real->next = NULL;
 	  flags = (sym.n_sclass == C_EXT ? BSF_GLOBAL : BSF_WEAK);
 	  ok = (_bfd_generic_link_add_one_symbol
-		(info, abfd, name, flags, section, value, NULL, copy, TRUE,
+		(info, abfd, name, flags, section, value, NULL, copy, true,
 		 (struct bfd_link_hash_entry **) sym_hash));
 	  last_real->next = first_csect;
 	  if (!ok)
@@ -2140,7 +2266,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
 
 		      hds = xcoff_link_hash_lookup (xcoff_hash_table (info),
 						    h->root.root.string + 1,
-						    TRUE, FALSE, TRUE);
+						    true, false, true);
 		      if (hds == NULL)
 			goto error_return;
 		      if (hds->root.type == bfd_link_hash_new)
@@ -2149,8 +2275,8 @@ xcoff_link_add_symbols (bfd *abfd, struc
 			  if (! (_bfd_generic_link_add_one_symbol
 				 (info, abfd, hds->root.root.string,
 				  (flagword) 0, bfd_und_section_ptr,
-				  (bfd_vma) 0, NULL, FALSE,
-				  TRUE, &bh)))
+				  (bfd_vma) 0, NULL, false,
+				  true, &bh)))
 			    goto error_return;
 			  hds = (struct xcoff_link_hash_entry *) bh;
 			}
@@ -2174,9 +2300,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
 
 	  /* If we are not keeping memory, free the reloc information.  */
 	  if (! info->keep_memory
-	      && coff_section_data (abfd, o) != NULL
-	      && coff_section_data (abfd, o)->relocs != NULL
-	      && ! coff_section_data (abfd, o)->keep_relocs)
+	      && coff_section_data (abfd, o) != NULL)
 	    {
 	      free (coff_section_data (abfd, o)->relocs);
 	      coff_section_data (abfd, o)->relocs = NULL;
@@ -2185,33 +2309,28 @@ xcoff_link_add_symbols (bfd *abfd, struc
 
       /* Free up the line numbers.  FIXME: We could cache these
 	 somewhere for the final link, to avoid reading them again.  */
-      if (reloc_info[o->target_index].linenos != NULL)
-	{
-	  free (reloc_info[o->target_index].linenos);
-	  reloc_info[o->target_index].linenos = NULL;
-	}
+      free (reloc_info[o->target_index].linenos);
+      reloc_info[o->target_index].linenos = NULL;
     }
 
   free (reloc_info);
 
   obj_coff_keep_syms (abfd) = keep_syms;
 
-  return TRUE;
+  return true;
 
  error_return:
   if (reloc_info != NULL)
     {
       for (o = abfd->sections; o != NULL; o = o->next)
 	{
-	  if (reloc_info[o->target_index].csects != NULL)
-	    free (reloc_info[o->target_index].csects);
-	  if (reloc_info[o->target_index].linenos != NULL)
-	    free (reloc_info[o->target_index].linenos);
+	  free (reloc_info[o->target_index].csects);
+	  free (reloc_info[o->target_index].linenos);
 	}
       free (reloc_info);
     }
   obj_coff_keep_syms (abfd) = keep_syms;
-  return FALSE;
+  return false;
 }
 
 #undef N_TMASK
@@ -2219,29 +2338,29 @@ xcoff_link_add_symbols (bfd *abfd, struc
 
 /* Add symbols from an XCOFF object file.  */
 
-static bfd_boolean
+static bool
 xcoff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   if (! _bfd_coff_get_external_symbols (abfd))
-    return FALSE;
+    return false;
   if (! xcoff_link_add_symbols (abfd, info))
-    return FALSE;
+    return false;
   if (! info->keep_memory)
     {
       if (! _bfd_coff_free_symbols (abfd))
-	return FALSE;
+	return false;
     }
-  return TRUE;
+  return true;
 }
 
 /* Look through the loader symbols to see if this dynamic object
    should be included in the link.  The native linker uses the loader
    symbols, not the normal symbol table, so we do too.  */
 
-static bfd_boolean
+static bool
 xcoff_link_check_dynamic_ar_symbols (bfd *abfd,
 				     struct bfd_link_info *info,
-				     bfd_boolean *pneeded,
+				     bool *pneeded,
 				     bfd **subsbfd)
 {
   asection *lsec;
@@ -2250,16 +2369,16 @@ xcoff_link_check_dynamic_ar_symbols (bfd
   const char *strings;
   bfd_byte *elsym, *elsymend;
 
-  *pneeded = FALSE;
+  *pneeded = false;
 
   lsec = bfd_get_section_by_name (abfd, ".loader");
-  if (lsec == NULL)
+  if (lsec == NULL || (lsec->flags & SEC_HAS_CONTENTS) == 0)
     /* There are no symbols, so don't try to include it.  */
-    return TRUE;
+    return true;
 
-  if (! xcoff_get_section_contents (abfd, lsec))
-    return FALSE;
-  contents = coff_section_data (abfd, lsec)->contents;
+  contents = xcoff_get_section_contents (abfd, lsec);
+  if (!contents)
+    return false;
 
   bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);
 
@@ -2290,7 +2409,7 @@ xcoff_link_check_dynamic_ar_symbols (bfd
 	  name = nambuf;
 	}
 
-      h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
+      h = bfd_link_hash_lookup (info->hash, name, false, false, true);
 
       /* We are only interested in symbols that are currently
 	 undefined.  At this point we know that we are using an XCOFF
@@ -2303,35 +2422,32 @@ xcoff_link_check_dynamic_ar_symbols (bfd
 	  if (!(*info->callbacks
 		->add_archive_element) (info, abfd, name, subsbfd))
 	    continue;
-	  *pneeded = TRUE;
-	  return TRUE;
+	  *pneeded = true;
+	  return true;
 	}
     }
 
-  /* We do not need this shared object.  */
-  if (contents != NULL && ! coff_section_data (abfd, lsec)->keep_contents)
-    {
-      free (coff_section_data (abfd, lsec)->contents);
-      coff_section_data (abfd, lsec)->contents = NULL;
-    }
+  /* We do not need this shared object's .loader section.  */
+  free (contents);
+  coff_section_data (abfd, lsec)->contents = NULL;
 
-  return TRUE;
+  return true;
 }
 
 /* Look through the symbols to see if this object file should be
    included in the link.  */
 
-static bfd_boolean
+static bool
 xcoff_link_check_ar_symbols (bfd *abfd,
 			     struct bfd_link_info *info,
-			     bfd_boolean *pneeded,
+			     bool *pneeded,
 			     bfd **subsbfd)
 {
   bfd_size_type symesz;
   bfd_byte *esym;
   bfd_byte *esym_end;
 
-  *pneeded = FALSE;
+  *pneeded = false;
 
   if ((abfd->flags & DYNAMIC) != 0
       && ! info->static_link
@@ -2346,6 +2462,7 @@ xcoff_link_check_ar_symbols (bfd *abfd,
       struct internal_syment sym;
 
       bfd_coff_swap_sym_in (abfd, (void *) esym, (void *) &sym);
+      esym += (sym.n_numaux + 1) * symesz;
 
       if (EXTERN_SYM_P (sym.n_sclass) && sym.n_scnum != N_UNDEF)
 	{
@@ -2358,8 +2475,8 @@ xcoff_link_check_ar_symbols (bfd *abfd,
 	  name = _bfd_coff_internal_syment_name (abfd, &sym, buf);
 
 	  if (name == NULL)
-	    return FALSE;
-	  h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
+	    return false;
+	  h = bfd_link_hash_lookup (info->hash, name, false, false, true);
 
 	  /* We are only interested in symbols that are currently
 	     undefined.  If a symbol is currently known to be common,
@@ -2375,16 +2492,14 @@ xcoff_link_check_ar_symbols (bfd *abfd,
 	      if (!(*info->callbacks
 		    ->add_archive_element) (info, abfd, name, subsbfd))
 		continue;
-	      *pneeded = TRUE;
-	      return TRUE;
+	      *pneeded = true;
+	      return true;
 	    }
 	}
-
-      esym += (sym.n_numaux + 1) * symesz;
     }
 
   /* We do not need this object file.  */
-  return TRUE;
+  return true;
 }
 
 /* Check a single archive element to see if we need to include it in
@@ -2392,23 +2507,23 @@ xcoff_link_check_ar_symbols (bfd *abfd,
    needed in the link or not.  This is called via
    _bfd_generic_link_add_archive_symbols.  */
 
-static bfd_boolean
+static bool
 xcoff_link_check_archive_element (bfd *abfd,
 				  struct bfd_link_info *info,
 				  struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED,
 				  const char *name ATTRIBUTE_UNUSED,
-				  bfd_boolean *pneeded)
+				  bool *pneeded)
 {
-  bfd_boolean keep_syms_p;
+  bool keep_syms_p;
   bfd *oldbfd;
 
   keep_syms_p = (obj_coff_external_syms (abfd) != NULL);
   if (!_bfd_coff_get_external_symbols (abfd))
-    return FALSE;
+    return false;
 
   oldbfd = abfd;
   if (!xcoff_link_check_ar_symbols (abfd, info, pneeded, &abfd))
-    return FALSE;
+    return false;
 
   if (*pneeded)
     {
@@ -2418,30 +2533,30 @@ xcoff_link_check_archive_element (bfd *a
 	{
 	  if (!keep_syms_p
 	      && !_bfd_coff_free_symbols (oldbfd))
-	    return FALSE;
+	    return false;
 	  keep_syms_p = (obj_coff_external_syms (abfd) != NULL);
 	  if (!_bfd_coff_get_external_symbols (abfd))
-	    return FALSE;
+	    return false;
 	}
       if (!xcoff_link_add_symbols (abfd, info))
-	return FALSE;
+	return false;
       if (info->keep_memory)
-	keep_syms_p = TRUE;
+	keep_syms_p = true;
     }
 
   if (!keep_syms_p)
     {
       if (!_bfd_coff_free_symbols (abfd))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Given an XCOFF BFD, add symbols to the global hash table as
    appropriate.  */
 
-bfd_boolean
+bool
 _bfd_xcoff_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
 {
   switch (bfd_get_format (abfd))
@@ -2460,7 +2575,7 @@ _bfd_xcoff_bfd_link_add_symbols (bfd *ab
 	{
 	  if (! (_bfd_generic_link_add_archive_symbols
 		 (abfd, info, xcoff_link_check_archive_element)))
-	    return FALSE;
+	    return false;
 	}
 
       {
@@ -2473,11 +2588,11 @@ _bfd_xcoff_bfd_link_add_symbols (bfd *ab
 		&& (info->output_bfd->xvec == member->xvec)
 		&& (! bfd_has_map (abfd) || (member->flags & DYNAMIC) != 0))
 	      {
-		bfd_boolean needed;
+		bool needed;
 
 		if (! xcoff_link_check_archive_element (member, info,
 							NULL, NULL, &needed))
-		  return FALSE;
+		  return false;
 		if (needed)
 		  member->archive_pass = -1;
 	      }
@@ -2485,15 +2600,15 @@ _bfd_xcoff_bfd_link_add_symbols (bfd *ab
 	  }
       }
 
-      return TRUE;
+      return true;
 
     default:
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 }
 
-bfd_boolean
+bool
 _bfd_xcoff_define_common_symbol (bfd *output_bfd ATTRIBUTE_UNUSED,
 				 struct bfd_link_info *info ATTRIBUTE_UNUSED,
 				 struct bfd_link_hash_entry *harg)
@@ -2501,17 +2616,17 @@ _bfd_xcoff_define_common_symbol (bfd *ou
   struct xcoff_link_hash_entry *h;
 
   if (!bfd_generic_define_common_symbol (output_bfd, info, harg))
-    return FALSE;
+    return false;
 
   h = (struct xcoff_link_hash_entry *) harg;
   h->flags |= XCOFF_DEF_REGULAR;
-  return TRUE;
+  return true;
 }
 
 /* If symbol H has not been interpreted as a function descriptor,
    see whether it should be.  Set up its descriptor information if so.  */
 
-static bfd_boolean
+static bool
 xcoff_find_function (struct bfd_link_info *info,
 		     struct xcoff_link_hash_entry *h)
 {
@@ -2520,16 +2635,16 @@ xcoff_find_function (struct bfd_link_inf
     {
       char *fnname;
       struct xcoff_link_hash_entry *hfn;
-      bfd_size_type amt;
+      size_t amt;
 
       amt = strlen (h->root.root.string) + 2;
       fnname = bfd_malloc (amt);
       if (fnname == NULL)
-	return FALSE;
+	return false;
       fnname[0] = '.';
       strcpy (fnname + 1, h->root.root.string);
       hfn = xcoff_link_hash_lookup (xcoff_hash_table (info),
-				    fnname, FALSE, FALSE, TRUE);
+				    fnname, false, false, true);
       free (fnname);
       if (hfn != NULL
 	  && hfn->smclas == XMC_PR
@@ -2541,12 +2656,12 @@ xcoff_find_function (struct bfd_link_inf
 	  hfn->descriptor = h;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* Return true if the given bfd contains at least one shared object.  */
 
-static bfd_boolean
+static bool
 xcoff_archive_contains_shared_object_p (struct bfd_link_info *info,
 					bfd *archive)
 {
@@ -2569,12 +2684,12 @@ xcoff_archive_contains_shared_object_p (
 /* Symbol H qualifies for export by -bexpfull.  Return true if it also
    qualifies for export by -bexpall.  */
 
-static bfd_boolean
+static bool
 xcoff_covered_by_expall_p (struct xcoff_link_hash_entry *h)
 {
   /* Exclude symbols beginning with '_'.  */
   if (h->root.root.string[0] == '_')
-    return FALSE;
+    return false;
 
   /* Exclude archive members that would otherwise be unreferenced.  */
   if ((h->flags & XCOFF_MARK) == 0
@@ -2582,30 +2697,35 @@ xcoff_covered_by_expall_p (struct xcoff_
 	  || h->root.type == bfd_link_hash_defweak)
       && h->root.u.def.section->owner != NULL
       && h->root.u.def.section->owner->my_archive != NULL)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Return true if symbol H qualifies for the forms of automatic export
    specified by AUTO_EXPORT_FLAGS.  */
 
-static bfd_boolean
+static bool
 xcoff_auto_export_p (struct bfd_link_info *info,
 		     struct xcoff_link_hash_entry *h,
 		     unsigned int auto_export_flags)
 {
   /* Don't automatically export things that were explicitly exported.  */
   if ((h->flags & XCOFF_EXPORT) != 0)
-    return FALSE;
+    return false;
 
   /* Don't export things that we don't define.  */
   if ((h->flags & XCOFF_DEF_REGULAR) == 0)
-    return FALSE;
+    return false;
 
   /* Don't export functions; export their descriptors instead.  */
   if (h->root.root.string[0] == '.')
-    return FALSE;
+    return false;
+
+  /* Don't export hidden or internal symbols.  */
+  if (h->visibility == SYM_V_HIDDEN
+      || h->visibility == SYM_V_INTERNAL)
+    return false;
 
   /* We don't export a symbol which is being defined by an object
      included from an archive which contains a shared object.  The
@@ -2630,31 +2750,31 @@ xcoff_auto_export_p (struct bfd_link_inf
       if (owner != NULL
 	  && owner->my_archive != NULL
 	  && xcoff_archive_contains_shared_object_p (info, owner->my_archive))
-	return FALSE;
+	return false;
     }
 
   /* Otherwise, all symbols are exported by -bexpfull.  */
   if ((auto_export_flags & XCOFF_EXPFULL) != 0)
-    return TRUE;
+    return true;
 
   /* Despite its name, -bexpall exports most but not all symbols.  */
   if ((auto_export_flags & XCOFF_EXPALL) != 0
       && xcoff_covered_by_expall_p (h))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Return true if relocation REL needs to be copied to the .loader section.
    If REL is against a global symbol, H is that symbol, otherwise it
    is null.  */
 
-static bfd_boolean
+static bool
 xcoff_need_ldrel_p (struct bfd_link_info *info, struct internal_reloc *rel,
-		    struct xcoff_link_hash_entry *h)
+		    struct xcoff_link_hash_entry *h, asection *ssec)
 {
   if (!xcoff_hash_table (info)->loader_section)
-    return FALSE;
+    return false;
 
   switch (rel->r_type)
     {
@@ -2664,7 +2784,7 @@ xcoff_need_ldrel_p (struct bfd_link_info
     case R_TRL:
     case R_TRLA:
       /* We should never need a .loader reloc for a TOC-relative reloc.  */
-      return FALSE;
+      return false;
 
     default:
       /* In this case, relocations against defined symbols can be resolved
@@ -2673,14 +2793,14 @@ xcoff_need_ldrel_p (struct bfd_link_info
 	  || h->root.type == bfd_link_hash_defined
 	  || h->root.type == bfd_link_hash_defweak
 	  || h->root.type == bfd_link_hash_common)
-	return FALSE;
+	return false;
 
       /* We will always provide a local definition of function symbols,
 	 even if we don't have one yet.  */
       if ((h->flags & XCOFF_CALLED) != 0)
-	return FALSE;
+	return false;
 
-      return TRUE;
+      return true;
 
     case R_POS:
     case R_NEG:
@@ -2688,21 +2808,45 @@ xcoff_need_ldrel_p (struct bfd_link_info
     case R_RLA:
       /* Absolute relocations against absolute symbols can be
 	 resolved statically.  */
-      if (h != NULL && bfd_is_abs_symbol (&h->root))
-	return FALSE;
-
-      return TRUE;
+      if (h != NULL
+	  && (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
+	  && !h->root.rel_from_abs)
+	{
+	  asection *sec = h->root.u.def.section;
+	  if (bfd_is_abs_section (sec)
+	      || (sec != NULL
+		  && bfd_is_abs_section (sec->output_section)))
+	    return false;
+	}
+
+      /* Absolute relocations from read-only sections are forbidden
+	 by AIX loader. However, they can appear in their section's
+         relocations.  */
+      if (ssec != NULL
+	  && (ssec->output_section->flags & SEC_READONLY) != 0)
+	return false;
+
+      return true;
+
+    case R_TLS:
+    case R_TLS_LE:
+    case R_TLS_IE:
+    case R_TLS_LD:
+    case R_TLSM:
+    case R_TLSML:
+      return true;
     }
 }
 
 /* Mark a symbol as not being garbage, including the section in which
    it is defined.  */
 
-static inline bfd_boolean
+static inline bool
 xcoff_mark_symbol (struct bfd_link_info *info, struct xcoff_link_hash_entry *h)
 {
   if ((h->flags & XCOFF_MARK) != 0)
-    return TRUE;
+    return true;
 
   h->flags |= XCOFF_MARK;
 
@@ -2717,7 +2861,7 @@ xcoff_mark_symbol (struct bfd_link_info
       /* First check whether this symbol can be interpreted as an
 	 undefined function descriptor for a defined function symbol.  */
       if (!xcoff_find_function (info, h))
-	return FALSE;
+	return false;
 
       if ((h->flags & XCOFF_DESCRIPTOR) != 0
 	  && (h->descriptor->root.type == bfd_link_hash_defined
@@ -2745,17 +2889,17 @@ xcoff_mark_symbol (struct bfd_link_info
 
 	  /* A function descriptor uses two relocs: one for the
 	     associated code, and one for the TOC address.  */
-	  xcoff_hash_table (info)->ldrel_count += 2;
+	  xcoff_hash_table (info)->ldinfo.ldrel_count += 2;
 	  sec->reloc_count += 2;
 
 	  /* Mark the function itself.  */
 	  if (!xcoff_mark_symbol (info, h->descriptor))
-	    return FALSE;
+	    return false;
 
 	  /* Mark the TOC section, so that we get an anchor
 	     to relocate against.  */
 	  if (!xcoff_mark (info, xcoff_hash_table (info)->toc_section))
-	    return FALSE;
+	    return false;
 
 	  /* We handle writing out the contents of the descriptor in
 	     xcoff_write_global_symbol.  */
@@ -2777,7 +2921,7 @@ xcoff_mark_symbol (struct bfd_link_info
 		       || hds->root.type == bfd_link_hash_undefweak)
 		      && (hds->flags & XCOFF_DEF_REGULAR) == 0);
 	  if (!xcoff_mark_symbol (info, hds))
-	    return FALSE;
+	    return false;
 
 	  /* Treat this symbol as undefined if the descriptor was.  */
 	  if ((hds->flags & XCOFF_WAS_UNDEFINED) != 0)
@@ -2806,18 +2950,18 @@ xcoff_mark_symbol (struct bfd_link_info
 	      else if (bfd_xcoff_is_xcoff32 (info->output_bfd))
 		byte_size = 4;
 	      else
-		return FALSE;
+		return false;
 
 	      /* Allocate room in the fallback TOC section.  */
 	      hds->toc_section = xcoff_hash_table (info)->toc_section;
 	      hds->u.toc_offset = hds->toc_section->size;
 	      hds->toc_section->size += byte_size;
 	      if (!xcoff_mark (info, hds->toc_section))
-		return FALSE;
+		return false;
 
 	      /* Allocate room for a static and dynamic R_TOC
 		 relocation.  */
-	      ++xcoff_hash_table (info)->ldrel_count;
+	      ++xcoff_hash_table (info)->ldinfo.ldrel_count;
 	      ++hds->toc_section->reloc_count;
 
 	      /* Set the index to -2 to force this symbol to
@@ -2834,12 +2978,12 @@ xcoff_mark_symbol (struct bfd_link_info
 	  if (xcoff_hash_table (info)->rtld)
 	    {
 	      if (!xcoff_set_import_path (info, h, "", "..", ""))
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
 	      if (!xcoff_set_import_path (info, h, NULL, NULL, NULL))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -2851,34 +2995,34 @@ xcoff_mark_symbol (struct bfd_link_info
 
       hsec = h->root.u.def.section;
       if (! bfd_is_abs_section (hsec)
-	  && (hsec->flags & SEC_MARK) == 0)
+	  && hsec->gc_mark == 0)
 	{
 	  if (! xcoff_mark (info, hsec))
-	    return FALSE;
+	    return false;
 	}
     }
 
   if (h->toc_section != NULL
-      && (h->toc_section->flags & SEC_MARK) == 0)
+      && h->toc_section->gc_mark == 0)
     {
       if (! xcoff_mark (info, h->toc_section))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Look for a symbol called NAME.  If the symbol is defined, mark it.
    If the symbol exists, set FLAGS.  */
 
-static bfd_boolean
+static bool
 xcoff_mark_symbol_by_name (struct bfd_link_info *info,
 			   const char *name, unsigned int flags)
 {
   struct xcoff_link_hash_entry *h;
 
   h = xcoff_link_hash_lookup (xcoff_hash_table (info), name,
-			      FALSE, FALSE, TRUE);
+			      false, false, true);
   if (h != NULL)
     {
       h->flags |= flags;
@@ -2886,10 +3030,10 @@ xcoff_mark_symbol_by_name (struct bfd_li
 	  || h->root.type == bfd_link_hash_defweak)
 	{
 	  if (!xcoff_mark (info, h->root.u.def.section))
-	    return FALSE;
+	    return false;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 /* The mark phase of garbage collection.  For a given section, mark
@@ -2898,21 +3042,25 @@ xcoff_mark_symbol_by_name (struct bfd_li
    the number of relocs which need to be copied into the .loader
    section.  */
 
-static bfd_boolean
+static bool
 xcoff_mark (struct bfd_link_info *info, asection *sec)
 {
-  if (bfd_is_abs_section (sec)
-      || (sec->flags & SEC_MARK) != 0)
-    return TRUE;
-
-  sec->flags |= SEC_MARK;
-
-  if (sec->owner->xvec == info->output_bfd->xvec
-      && coff_section_data (sec->owner, sec) != NULL
-      && xcoff_section_data (sec->owner, sec) != NULL)
+  if (bfd_is_const_section (sec)
+      || sec->gc_mark != 0)
+    return true;
+
+  sec->gc_mark = 1;
+
+  if (sec->owner->xvec != info->output_bfd->xvec)
+    return true;
+
+  if (coff_section_data (sec->owner, sec) == NULL)
+    return true;
+
+
+  if (xcoff_section_data (sec->owner, sec) != NULL)
     {
       struct xcoff_link_hash_entry **syms;
-      struct internal_reloc *rel, *relend;
       asection **csects;
       unsigned long i, first, last;
 
@@ -2927,70 +3075,71 @@ xcoff_mark (struct bfd_link_info *info,
 	    && (syms[i]->flags & XCOFF_MARK) == 0)
 	  {
 	    if (!xcoff_mark_symbol (info, syms[i]))
-	      return FALSE;
+	      return false;
 	  }
+    }
 
-      /* Look through the section relocs.  */
-      if ((sec->flags & SEC_RELOC) != 0
-	  && sec->reloc_count > 0)
-	{
-	  rel = xcoff_read_internal_relocs (sec->owner, sec, TRUE,
-					    NULL, FALSE, NULL);
-	  if (rel == NULL)
-	    return FALSE;
-	  relend = rel + sec->reloc_count;
-	  for (; rel < relend; rel++)
-	    {
-	      struct xcoff_link_hash_entry *h;
+  /* Look through the section relocs.  */
+  if ((sec->flags & SEC_RELOC) != 0
+      && sec->reloc_count > 0)
+    {
+      struct internal_reloc *rel, *relend;
 
-	      if ((unsigned int) rel->r_symndx
-		  > obj_raw_syment_count (sec->owner))
-		continue;
+      rel = xcoff_read_internal_relocs (sec->owner, sec, true,
+					NULL, false, NULL);
+      if (rel == NULL)
+	return false;
+      relend = rel + sec->reloc_count;
+      for (; rel < relend; rel++)
+	{
+	  struct xcoff_link_hash_entry *h;
 
-	      h = obj_xcoff_sym_hashes (sec->owner)[rel->r_symndx];
-	      if (h != NULL)
-		{
-		  if ((h->flags & XCOFF_MARK) == 0)
-		    {
-		      if (!xcoff_mark_symbol (info, h))
-			return FALSE;
-		    }
-		}
-	      else
-		{
-		  asection *rsec;
+	  if ((unsigned int) rel->r_symndx
+	      > obj_raw_syment_count (sec->owner))
+	    continue;
 
-		  rsec = xcoff_data (sec->owner)->csects[rel->r_symndx];
-		  if (rsec != NULL
-		      && (rsec->flags & SEC_MARK) == 0)
-		    {
-		      if (!xcoff_mark (info, rsec))
-			return FALSE;
-		    }
+	  h = obj_xcoff_sym_hashes (sec->owner)[rel->r_symndx];
+	  if (h != NULL)
+	    {
+	      if ((h->flags & XCOFF_MARK) == 0)
+		{
+		  if (!xcoff_mark_symbol (info, h))
+		    return false;
 		}
+	    }
+	  else
+	    {
+	      asection *rsec;
 
-	      /* See if this reloc needs to be copied into the .loader
-		 section.  */
-	      if (xcoff_need_ldrel_p (info, rel, h))
+	      rsec = xcoff_data (sec->owner)->csects[rel->r_symndx];
+	      if (rsec != NULL
+		  && rsec->gc_mark == 0)
 		{
-		  ++xcoff_hash_table (info)->ldrel_count;
-		  if (h != NULL)
-		    h->flags |= XCOFF_LDREL;
+		  if (!xcoff_mark (info, rsec))
+		    return false;
 		}
 	    }
 
-	  if (! info->keep_memory
-	      && coff_section_data (sec->owner, sec) != NULL
-	      && coff_section_data (sec->owner, sec)->relocs != NULL
-	      && ! coff_section_data (sec->owner, sec)->keep_relocs)
+	  /* See if this reloc needs to be copied into the .loader
+	     section.  */
+	  if ((sec->flags & SEC_DEBUGGING) == 0
+	      && xcoff_need_ldrel_p (info, rel, h, sec))
 	    {
-	      free (coff_section_data (sec->owner, sec)->relocs);
-	      coff_section_data (sec->owner, sec)->relocs = NULL;
+	      ++xcoff_hash_table (info)->ldinfo.ldrel_count;
+	      if (h != NULL)
+		h->flags |= XCOFF_LDREL;
 	    }
 	}
+
+      if (! info->keep_memory
+	  && coff_section_data (sec->owner, sec) != NULL)
+	{
+	  free (coff_section_data (sec->owner, sec)->relocs);
+	  coff_section_data (sec->owner, sec)->relocs = NULL;
+	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Routines that are called after all the input files have been
@@ -3007,36 +3156,72 @@ xcoff_sweep (struct bfd_link_info *info)
   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
     {
       asection *o;
+      bool some_kept = false;
+
+      /* As says below keep all sections from non-XCOFF
+         input files.  */
+      if (sub->xvec != info->output_bfd->xvec)
+	some_kept = true;
+      else
+	{
+	  /* See whether any section is already marked.  */
+	  for (o = sub->sections; o != NULL; o = o->next)
+	    if (o->gc_mark)
+	      some_kept = true;
+	}
+
+      /* If no section in this file will be kept, then we can
+	 toss out debug sections.  */
+      if (!some_kept)
+	{
+	  for (o = sub->sections; o != NULL; o = o->next)
+	    {
+	      o->size = 0;
+	      o->reloc_count = 0;
+	    }
+	  continue;
+	}
 
+      /* Keep all sections from non-XCOFF input files.  Keep
+	 special sections.  Keep .debug sections for the
+	 moment.  */
       for (o = sub->sections; o != NULL; o = o->next)
 	{
-	  if ((o->flags & SEC_MARK) == 0)
+	  if (o->gc_mark == 1)
+	    continue;
+
+	  if (sub->xvec != info->output_bfd->xvec
+	      || o == xcoff_hash_table (info)->debug_section
+	      || o == xcoff_hash_table (info)->loader_section
+	      || o == xcoff_hash_table (info)->linkage_section
+	      || o == xcoff_hash_table (info)->descriptor_section
+	      || (bfd_section_flags (o) & SEC_DEBUGGING)
+	      || strcmp (o->name, ".debug") == 0)
+	    xcoff_mark (info, o);
+	  else
 	    {
-	      /* Keep all sections from non-XCOFF input files.  Keep
-		 special sections.  Keep .debug sections for the
-		 moment.  */
-	      if (sub->xvec != info->output_bfd->xvec
-		  || o == xcoff_hash_table (info)->debug_section
-		  || o == xcoff_hash_table (info)->loader_section
-		  || o == xcoff_hash_table (info)->linkage_section
-		  || o == xcoff_hash_table (info)->descriptor_section
-		  || (bfd_section_flags (o) & SEC_DEBUGGING)
-		  || strcmp (o->name, ".debug") == 0)
-		o->flags |= SEC_MARK;
-	      else
-		{
-		  o->size = 0;
-		  o->reloc_count = 0;
-		}
+	      o->size = 0;
+	      o->reloc_count = 0;
 	    }
 	}
     }
 }
 
+/* Initialize the back-end with linker infos.  */
+
+bool
+bfd_xcoff_link_init (struct bfd_link_info *info,
+		     struct bfd_xcoff_link_params *params)
+{
+  xcoff_hash_table (info)->params = params;
+
+  return true;
+}
+
 /* Record the number of elements in a set.  This is used to output the
    correct csect length.  */
 
-bfd_boolean
+bool
 bfd_xcoff_link_record_set (bfd *output_bfd,
 			   struct bfd_link_info *info,
 			   struct bfd_link_hash_entry *harg,
@@ -3044,10 +3229,10 @@ bfd_xcoff_link_record_set (bfd *output_b
 {
   struct xcoff_link_hash_entry *h = (struct xcoff_link_hash_entry *) harg;
   struct xcoff_link_size_list *n;
-  bfd_size_type amt;
+  size_t amt;
 
   if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour)
-    return TRUE;
+    return true;
 
   /* This will hardly ever be called.  I don't want to burn four bytes
      per global symbol, so instead the size is kept on a linked list
@@ -3055,7 +3240,7 @@ bfd_xcoff_link_record_set (bfd *output_b
   amt = sizeof (* n);
   n = bfd_alloc (output_bfd, amt);
   if (n == NULL)
-    return FALSE;
+    return false;
   n->next = xcoff_hash_table (info)->size_list;
   n->h = h;
   n->size = size;
@@ -3063,12 +3248,12 @@ bfd_xcoff_link_record_set (bfd *output_b
 
   h->flags |= XCOFF_HAS_SIZE;
 
-  return TRUE;
+  return true;
 }
 
 /* Import a symbol.  */
 
-bfd_boolean
+bool
 bfd_xcoff_import_symbol (bfd *output_bfd,
 			 struct bfd_link_info *info,
 			 struct bfd_link_hash_entry *harg,
@@ -3081,7 +3266,7 @@ bfd_xcoff_import_symbol (bfd *output_bfd
   struct xcoff_link_hash_entry *h = (struct xcoff_link_hash_entry *) harg;
 
   if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour)
-    return TRUE;
+    return true;
 
   /* A symbol name which starts with a period is the code for a
      function.  If the symbol is undefined, then add an undefined
@@ -3097,9 +3282,9 @@ bfd_xcoff_import_symbol (bfd *output_bfd
 	{
 	  hds = xcoff_link_hash_lookup (xcoff_hash_table (info),
 					h->root.root.string + 1,
-					TRUE, FALSE, TRUE);
+					true, false, true);
 	  if (hds == NULL)
-	    return FALSE;
+	    return false;
 	  if (hds->root.type == bfd_link_hash_new)
 	    {
 	      hds->root.type = bfd_link_hash_undefined;
@@ -3122,9 +3307,7 @@ bfd_xcoff_import_symbol (bfd *output_bfd
 
   if (val != (bfd_vma) -1)
     {
-      if (h->root.type == bfd_link_hash_defined
-	  && (!bfd_is_abs_symbol (&h->root)
-	      || h->root.u.def.value != val))
+      if (h->root.type == bfd_link_hash_defined)
 	(*info->callbacks->multiple_definition) (info, &h->root, output_bfd,
 						 bfd_abs_section_ptr, val);
 
@@ -3135,14 +3318,14 @@ bfd_xcoff_import_symbol (bfd *output_bfd
     }
 
   if (!xcoff_set_import_path (info, h, imppath, impfile, impmember))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Export a symbol.  */
 
-bfd_boolean
+bool
 bfd_xcoff_export_symbol (bfd *output_bfd,
 			 struct bfd_link_info *info,
 			 struct bfd_link_hash_entry *harg)
@@ -3150,7 +3333,20 @@ bfd_xcoff_export_symbol (bfd *output_bfd
   struct xcoff_link_hash_entry *h = (struct xcoff_link_hash_entry *) harg;
 
   if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour)
-    return TRUE;
+    return true;
+
+  /* As AIX linker, symbols exported with hidden visibility are
+     silently ignored.  */
+  if (h->visibility == SYM_V_HIDDEN)
+    return true;
+
+  if (h->visibility == SYM_V_INTERNAL)
+    {
+      _bfd_error_handler (_("%pB: cannot export internal symbol `%s`."),
+			  output_bfd, h->root.root.string);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
 
   h->flags |= XCOFF_EXPORT;
 
@@ -3159,7 +3355,7 @@ bfd_xcoff_export_symbol (bfd *output_bfd
 
   /* Make sure we don't garbage collect this symbol.  */
   if (! xcoff_mark_symbol (info, h))
-    return FALSE;
+    return false;
 
   /* If this is a function descriptor, make sure we don't garbage
      collect the associated function code.  We normally don't have to
@@ -3169,17 +3365,17 @@ bfd_xcoff_export_symbol (bfd *output_bfd
   if ((h->flags & XCOFF_DESCRIPTOR) != 0)
     {
       if (! xcoff_mark_symbol (info, h->descriptor))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Count a reloc against a symbol.  This is called for relocs
    generated by the linker script, typically for global constructors
    and destructors.  */
 
-bfd_boolean
+bool
 bfd_xcoff_link_count_reloc (bfd *output_bfd,
 			    struct bfd_link_info *info,
 			    const char *name)
@@ -3187,36 +3383,42 @@ bfd_xcoff_link_count_reloc (bfd *output_
   struct xcoff_link_hash_entry *h;
 
   if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour)
-    return TRUE;
+    return true;
 
   h = ((struct xcoff_link_hash_entry *)
-       bfd_wrapped_link_hash_lookup (output_bfd, info, name, FALSE, FALSE,
-				     FALSE));
+       bfd_wrapped_link_hash_lookup (output_bfd, info, name, false, false,
+				     false));
   if (h == NULL)
     {
       _bfd_error_handler (_("%s: no such symbol"), name);
       bfd_set_error (bfd_error_no_symbols);
-      return FALSE;
+      return false;
     }
 
   h->flags |= XCOFF_REF_REGULAR;
   if (xcoff_hash_table (info)->loader_section)
     {
       h->flags |= XCOFF_LDREL;
-      ++xcoff_hash_table (info)->ldrel_count;
+      ++xcoff_hash_table (info)->ldinfo.ldrel_count;
     }
 
   /* Mark the symbol to avoid garbage collection.  */
   if (! xcoff_mark_symbol (info, h))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* This function is called for each symbol to which the linker script
-   assigns a value.  */
+   assigns a value.
+   FIXME: In cases like the linker test ld-scripts/defined5 where a
+   symbol is defined both by an input object file and the script,
+   the script definition doesn't override the object file definition
+   as is usual for other targets.  At least not when the symbol is
+   output.  Other uses of the symbol value by the linker do use the
+   script value.  */
 
-bfd_boolean
+bool
 bfd_xcoff_record_link_assignment (bfd *output_bfd,
 				  struct bfd_link_info *info,
 				  const char *name)
@@ -3224,23 +3426,23 @@ bfd_xcoff_record_link_assignment (bfd *o
   struct xcoff_link_hash_entry *h;
 
   if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour)
-    return TRUE;
+    return true;
 
-  h = xcoff_link_hash_lookup (xcoff_hash_table (info), name, TRUE, TRUE,
-			      FALSE);
+  h = xcoff_link_hash_lookup (xcoff_hash_table (info), name, true, true,
+			      false);
   if (h == NULL)
-    return FALSE;
+    return false;
 
   h->flags |= XCOFF_DEF_REGULAR;
 
-  return TRUE;
+  return true;
 }
 
 /* An xcoff_link_hash_traverse callback for which DATA points to an
    xcoff_loader_info.  Mark all symbols that should be automatically
    exported.  */
 
-static bfd_boolean
+static bool
 xcoff_mark_auto_exports (struct xcoff_link_hash_entry *h, void *data)
 {
   struct xcoff_loader_info *ldinfo;
@@ -3249,17 +3451,15 @@ xcoff_mark_auto_exports (struct xcoff_li
   if (xcoff_auto_export_p (ldinfo->info, h, ldinfo->auto_export_flags))
     {
       if (!xcoff_mark_symbol (ldinfo->info, h))
-	ldinfo->failed = TRUE;
+	ldinfo->failed = true;
     }
-  return TRUE;
+  return true;
 }
 
-/* Add a symbol to the .loader symbols, if necessary.  */
-
 /* INPUT_BFD has an external symbol associated with hash table entry H
    and csect CSECT.   Return true if INPUT_BFD defines H.  */
 
-static bfd_boolean
+static bool
 xcoff_final_definition_p (bfd *input_bfd, struct xcoff_link_hash_entry *h,
 			  asection *csect)
 {
@@ -3279,7 +3479,7 @@ xcoff_final_definition_p (bfd *input_bfd
     case bfd_link_hash_undefweak:
       /* We can't treat undef.abfd as the owner because that bfd
 	 might be a dynamic object.  Allow any bfd to claim it.  */
-      return TRUE;
+      return true;
 
     default:
       abort ();
@@ -3288,11 +3488,11 @@ xcoff_final_definition_p (bfd *input_bfd
 
 /* See if H should have a loader symbol associated with it.  */
 
-static bfd_boolean
+static bool
 xcoff_build_ldsym (struct xcoff_loader_info *ldinfo,
 		   struct xcoff_link_hash_entry *h)
 {
-  bfd_size_type amt;
+  size_t amt;
 
   /* Warn if this symbol is exported but not defined.  */
   if ((h->flags & XCOFF_EXPORT) != 0
@@ -3301,7 +3501,7 @@ xcoff_build_ldsym (struct xcoff_loader_i
       _bfd_error_handler
 	(_("warning: attempt to export undefined symbol `%s'"),
 	 h->root.root.string);
-      return TRUE;
+      return true;
     }
 
   /* We need to add a symbol to the .loader section if it is mentioned
@@ -3314,7 +3514,7 @@ xcoff_build_ldsym (struct xcoff_loader_i
        || h->root.type == bfd_link_hash_common)
       && (h->flags & XCOFF_ENTRY) == 0
       && (h->flags & XCOFF_EXPORT) == 0)
-    return TRUE;
+    return true;
 
   /* We need to add this symbol to the .loader symbols.  */
 
@@ -3323,8 +3523,8 @@ xcoff_build_ldsym (struct xcoff_loader_i
   h->ldsym = bfd_zalloc (ldinfo->output_bfd, amt);
   if (h->ldsym == NULL)
     {
-      ldinfo->failed = TRUE;
-      return FALSE;
+      ldinfo->failed = true;
+      return false;
     }
 
   if ((h->flags & XCOFF_IMPORT) != 0)
@@ -3343,23 +3543,23 @@ xcoff_build_ldsym (struct xcoff_loader_i
 
   if (! bfd_xcoff_put_ldsymbol_name (ldinfo->output_bfd, ldinfo,
 				     h->ldsym, h->root.root.string))
-    return FALSE;
+    return false;
 
   h->flags |= XCOFF_BUILT_LDSYM;
-  return TRUE;
+  return true;
 }
 
 /* An xcoff_htab_traverse callback that is called for each symbol
    once garbage collection is complete.  */
 
-static bfd_boolean
+static bool
 xcoff_post_gc_symbol (struct xcoff_link_hash_entry *h, void * p)
 {
   struct xcoff_loader_info *ldinfo = (struct xcoff_loader_info *) p;
 
   /* __rtinit, this symbol has special handling. */
   if (h->flags & XCOFF_RTINIT)
-    return TRUE;
+    return true;
 
   /* We don't want to garbage collect symbols which are not defined in
      XCOFF files.  This is a convenient place to mark them.  */
@@ -3375,7 +3575,7 @@ xcoff_post_gc_symbol (struct xcoff_link_
   /* Skip discarded symbols.  */
   if (xcoff_hash_table (ldinfo->info)->gc
       && (h->flags & XCOFF_MARK) == 0)
-    return TRUE;
+    return true;
 
   /* If this is still a common symbol, and it wasn't garbage
      collected, we need to actually allocate space for it in the .bss
@@ -3393,14 +3593,14 @@ xcoff_post_gc_symbol (struct xcoff_link_
 	h->flags |= XCOFF_EXPORT;
 
       if (!xcoff_build_ldsym (ldinfo, h))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* INPUT_BFD includes XCOFF symbol ISYM, which is associated with linker
-   hash table entry H and csect CSECT.  AUX contains ISYM's auxillary
+   hash table entry H and csect CSECT.  AUX contains ISYM's auxiliary
    csect information, if any.  NAME is the function's name if the name
    is stored in the .debug section, otherwise it is null.
 
@@ -3425,7 +3625,7 @@ xcoff_keep_symbol_p (struct bfd_link_inf
   if (xcoff_hash_table (info)->gc
       && !bfd_is_abs_section (csect)
       && !bfd_is_und_section (csect)
-      && (csect->flags & SEC_MARK) == 0)
+      && csect->gc_mark == 0)
     return 0;
 
   /* An XCOFF linker always removes C_STAT symbols.  */
@@ -3477,7 +3677,7 @@ xcoff_keep_symbol_p (struct bfd_link_inf
 	}
 
       if (info->strip == strip_some
-	  && bfd_hash_lookup (info->keep_hash, name, FALSE, FALSE) == NULL)
+	  && bfd_hash_lookup (info->keep_hash, name, false, false) == NULL)
 	return 0;
 
       if (info->discard == discard_l
@@ -3490,12 +3690,11 @@ xcoff_keep_symbol_p (struct bfd_link_inf
   return 1;
 }
 
-/* Lay out the .loader section, filling in the header and the import paths.
-   LIBPATH is as for bfd_xcoff_size_dynamic_sections.  */
+/* Compute the current size of the .loader section. Start filling
+   its header but it will be finalized in xcoff_build_loader_section.   */
 
-static bfd_boolean
-xcoff_build_loader_section (struct xcoff_loader_info *ldinfo,
-			    const char *libpath)
+static bool
+xcoff_size_loader_section (struct xcoff_loader_info *ldinfo)
 {
   bfd *output_bfd;
   struct xcoff_link_hash_table *htab;
@@ -3504,7 +3703,18 @@ xcoff_build_loader_section (struct xcoff
   bfd_size_type stoff;
   size_t impsize, impcount;
   asection *lsec;
-  char *out;
+
+  output_bfd = ldinfo->output_bfd;
+  htab = xcoff_hash_table (ldinfo->info);
+  ldhdr = &htab->ldhdr;
+
+  /* If this function has already been called (ie l_version is set)
+     and the number of symbols or relocations haven't changed since
+     last call, the size is already known.  */
+  if (ldhdr->l_version != 0
+      && ldhdr->l_nsyms == ldinfo->ldsym_count
+      && ldhdr->l_nreloc == ldinfo->ldrel_count)
+    return true;
 
   /* Work out the size of the import file names.  Each import file ID
      consists of three null terminated strings: the path, the file
@@ -3512,31 +3722,31 @@ xcoff_build_loader_section (struct xcoff
      of names is the path to use to find objects, which the linker has
      passed in as the libpath argument.  For some reason, the path
      entry in the other import file names appears to always be empty.  */
-  output_bfd = ldinfo->output_bfd;
-  htab = xcoff_hash_table (ldinfo->info);
-  impsize = strlen (libpath) + 3;
-  impcount = 1;
-  for (fl = htab->imports; fl != NULL; fl = fl->next)
+  if (ldhdr->l_nimpid == 0)
     {
-      ++impcount;
-      impsize += (strlen (fl->path)
-		  + strlen (fl->file)
-		  + strlen (fl->member)
-		  + 3);
+      impsize = strlen (ldinfo->libpath) + 3;
+      impcount = 1;
+      for (fl = htab->imports; fl != NULL; fl = fl->next)
+	{
+	  ++impcount;
+	  impsize += (strlen (fl->path)
+		      + strlen (fl->file)
+		      + strlen (fl->member)
+		      + 3);
+	}
+      ldhdr->l_istlen = impsize;
+      ldhdr->l_nimpid = impcount;
     }
 
   /* Set up the .loader section header.  */
-  ldhdr = &htab->ldhdr;
   ldhdr->l_version = bfd_xcoff_ldhdr_version(output_bfd);
   ldhdr->l_nsyms = ldinfo->ldsym_count;
-  ldhdr->l_nreloc = htab->ldrel_count;
-  ldhdr->l_istlen = impsize;
-  ldhdr->l_nimpid = impcount;
+  ldhdr->l_nreloc = ldinfo->ldrel_count;
   ldhdr->l_impoff = (bfd_xcoff_ldhdrsz (output_bfd)
 		     + ldhdr->l_nsyms * bfd_xcoff_ldsymsz (output_bfd)
 		     + ldhdr->l_nreloc * bfd_xcoff_ldrelsz (output_bfd));
   ldhdr->l_stlen = ldinfo->string_size;
-  stoff = ldhdr->l_impoff + impsize;
+  stoff = ldhdr->l_impoff + ldhdr->l_istlen;
   if (ldinfo->string_size == 0)
     ldhdr->l_stoff = 0;
   else
@@ -3550,62 +3760,19 @@ xcoff_build_loader_section (struct xcoff
   ldhdr->l_rldoff = (bfd_xcoff_ldhdrsz (output_bfd)
 		     + ldhdr->l_nsyms * bfd_xcoff_ldsymsz (output_bfd));
 
-  /* We now know the final size of the .loader section.  Allocate
-     space for it.  */
+  /* Save the size of the .loader section.  */
   lsec = htab->loader_section;
   lsec->size = stoff + ldhdr->l_stlen;
-  lsec->contents = bfd_zalloc (output_bfd, lsec->size);
-  if (lsec->contents == NULL)
-    return FALSE;
-
-  /* Set up the header.  */
-  bfd_xcoff_swap_ldhdr_out (output_bfd, ldhdr, lsec->contents);
-
-  /* Set up the import file names.  */
-  out = (char *) lsec->contents + ldhdr->l_impoff;
-  strcpy (out, libpath);
-  out += strlen (libpath) + 1;
-  *out++ = '\0';
-  *out++ = '\0';
-  for (fl = htab->imports; fl != NULL; fl = fl->next)
-    {
-      const char *s;
-
-      s = fl->path;
-      while ((*out++ = *s++) != '\0')
-	;
-      s = fl->file;
-      while ((*out++ = *s++) != '\0')
-	;
-      s = fl->member;
-      while ((*out++ = *s++) != '\0')
-	;
-    }
 
-  BFD_ASSERT ((bfd_size_type) ((bfd_byte *) out - lsec->contents) == stoff);
-
-  /* Set up the symbol string table.  */
-  if (ldinfo->string_size > 0)
-    {
-      memcpy (out, ldinfo->strings, ldinfo->string_size);
-      free (ldinfo->strings);
-      ldinfo->strings = NULL;
-    }
-
-  /* We can't set up the symbol table or the relocs yet, because we
-     don't yet know the final position of the various sections.  The
-     .loader symbols are written out when the corresponding normal
-     symbols are written out in xcoff_link_input_bfd or
-     xcoff_write_global_symbol.  The .loader relocs are written out
-     when the corresponding normal relocs are handled in
-     xcoff_link_input_bfd.  */
-
-  return TRUE;
+  return true;
 }
 
-/* Build the .loader section.  This is called by the XCOFF linker
+/* Prepare the .loader section.  This is called by the XCOFF linker
    emulation before_allocation routine.  We must set the size of the
-   .loader section before the linker lays out the output file.
+   .loader section before the linker lays out the output file.  However,
+   some symbols or relocations might be append to the .loader section
+   when processing the addresses, thus it's not layout right now and
+   its size might change.
    LIBPATH is the library path to search for shared objects; this is
    normally built from the -L arguments passed to the linker.  ENTRY
    is the name of the entry point symbol (the -e linker option).
@@ -3619,7 +3786,7 @@ xcoff_build_loader_section (struct xcoff
    is a mask of XCOFF_EXPALL and XCOFF_EXPFULL.  SPECIAL_SECTIONS
    is set by this routine to csects with magic names like _end.  */
 
-bfd_boolean
+bool
 bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
 				 struct bfd_link_info *info,
 				 const char *libpath,
@@ -3627,36 +3794,38 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 				 unsigned long file_align,
 				 unsigned long maxstack,
 				 unsigned long maxdata,
-				 bfd_boolean gc,
+				 bool gc,
 				 int modtype,
-				 bfd_boolean textro,
+				 bool textro,
 				 unsigned int auto_export_flags,
 				 asection **special_sections,
-				 bfd_boolean rtld)
+				 bool rtld)
 {
-  struct xcoff_loader_info ldinfo;
+  struct xcoff_loader_info *ldinfo;
   int i;
   asection *sec;
   bfd *sub;
-  struct bfd_strtab_hash *debug_strtab;
-  bfd_byte *debug_contents = NULL;
-  bfd_size_type amt;
+  size_t amt;
 
   if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour)
     {
       for (i = 0; i < XCOFF_NUMBER_OF_SPECIAL_SECTIONS; i++)
 	special_sections[i] = NULL;
-      return TRUE;
+      return true;
     }
 
-  ldinfo.failed = FALSE;
-  ldinfo.output_bfd = output_bfd;
-  ldinfo.info = info;
-  ldinfo.auto_export_flags = auto_export_flags;
-  ldinfo.ldsym_count = 0;
-  ldinfo.string_size = 0;
-  ldinfo.strings = NULL;
-  ldinfo.string_alc = 0;
+  /* Setup ldinfo.  */
+  ldinfo = &(xcoff_hash_table (info)->ldinfo);
+
+  ldinfo->failed = false;
+  ldinfo->output_bfd = output_bfd;
+  ldinfo->info = info;
+  ldinfo->auto_export_flags = auto_export_flags;
+  ldinfo->ldsym_count = 0;
+  ldinfo->string_size = 0;
+  ldinfo->strings = NULL;
+  ldinfo->string_alc = 0;
+  ldinfo->libpath = libpath;
 
   xcoff_data (output_bfd)->maxstack = maxstack;
   xcoff_data (output_bfd)->maxdata = maxdata;
@@ -3674,12 +3843,12 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
       struct internal_ldsym *ldsym;
 
       hsym = xcoff_link_hash_lookup (xcoff_hash_table (info),
-				     "__rtinit", FALSE, FALSE, TRUE);
+				     "__rtinit", false, false, true);
       if (hsym == NULL)
 	{
 	  _bfd_error_handler
 	    (_("error: undefined symbol __rtinit"));
-	  return FALSE;
+	  return false;
 	}
 
       xcoff_mark_symbol (info, hsym);
@@ -3701,15 +3870,15 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 
 	 The first 3 symbol table indices are reserved to indicate the data,
 	 text and bss sections.  */
-      BFD_ASSERT (0 == ldinfo.ldsym_count);
+      BFD_ASSERT (0 == ldinfo->ldsym_count);
 
       hsym->ldindx = 3;
-      ldinfo.ldsym_count = 1;
+      ldinfo->ldsym_count = 1;
       hsym->ldsym = ldsym;
 
-      if (! bfd_xcoff_put_ldsymbol_name (ldinfo.output_bfd, &ldinfo,
+      if (! bfd_xcoff_put_ldsymbol_name (ldinfo->output_bfd, ldinfo,
 					 hsym->ldsym, hsym->root.root.string))
-	return FALSE;
+	return false;
 
       /* This symbol is written out by xcoff_write_global_symbol
 	 Set stuff up so xcoff_write_global_symbol logic works.  */
@@ -3721,8 +3890,8 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
   /* Garbage collect unused sections.  */
   if (bfd_link_relocatable (info) || !gc)
     {
-      gc = FALSE;
-      xcoff_hash_table (info)->gc = FALSE;
+      gc = false;
+      xcoff_hash_table (info)->gc = false;
 
       /* We still need to call xcoff_mark, in order to set ldrel_count
 	 correctly.  */
@@ -3737,7 +3906,7 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 		 (a) one of the input files did or (b) we end up
 		 creating TOC references as part of the link process.  */
 	      if (o != xcoff_hash_table (info)->toc_section
-		  && (o->flags & SEC_MARK) == 0)
+		  && o->gc_mark == 0)
 		{
 		  if (! xcoff_mark (info, o))
 		    goto error_return;
@@ -3759,12 +3928,12 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
       if (auto_export_flags != 0)
 	{
 	  xcoff_link_hash_traverse (xcoff_hash_table (info),
-				    xcoff_mark_auto_exports, &ldinfo);
-	  if (ldinfo.failed)
+				    xcoff_mark_auto_exports, ldinfo);
+	  if (ldinfo->failed)
 	    goto error_return;
 	}
       xcoff_sweep (info);
-      xcoff_hash_table (info)->gc = TRUE;
+      xcoff_hash_table (info)->gc = true;
     }
 
   /* Return special sections to the caller.  */
@@ -3774,7 +3943,7 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 
       if (sec != NULL
 	  && gc
-	  && (sec->flags & SEC_MARK) == 0)
+	  && sec->gc_mark == 0)
 	sec = NULL;
 
       special_sections[i] = sec;
@@ -3782,38 +3951,139 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 
   if (info->input_bfds == NULL)
     /* I'm not sure what to do in this bizarre case.  */
-    return TRUE;
+    return true;
 
   xcoff_link_hash_traverse (xcoff_hash_table (info), xcoff_post_gc_symbol,
-			    (void *) &ldinfo);
-  if (ldinfo.failed)
+			    (void *) ldinfo);
+  if (ldinfo->failed)
     goto error_return;
 
   if (xcoff_hash_table (info)->loader_section
-      && !xcoff_build_loader_section (&ldinfo, libpath))
+      && !xcoff_size_loader_section (ldinfo))
     goto error_return;
 
+  return true;
+
+ error_return:
+  free (ldinfo->strings);
+  return false;
+}
+
+/* Lay out the .loader section, finalizing its header and
+   filling the import paths  */
+static bool
+xcoff_build_loader_section (struct xcoff_loader_info *ldinfo)
+{
+  bfd *output_bfd;
+  asection *lsec;
+  struct xcoff_link_hash_table *htab;
+  struct internal_ldhdr *ldhdr;
+  struct xcoff_import_file *fl;
+  char *out;
+
+  output_bfd = ldinfo->output_bfd;
+  htab = xcoff_hash_table (ldinfo->info);
+  lsec = htab->loader_section;
+  ldhdr = &htab->ldhdr;
+
+  /* We could have called xcoff_size_loader_section one more time.
+     However, this function is called once all the addresses have
+     been layout thus the .loader section shouldn't be changed
+     anymore.  */
+  BFD_ASSERT (ldhdr->l_nsyms == ldinfo->ldsym_count);
+  BFD_ASSERT (ldhdr->l_nreloc == ldinfo->ldrel_count);
+
+  /* We now know the final size of the .loader section.  Allocate
+     space for it.  */
+  lsec->contents = bfd_zalloc (output_bfd, lsec->size);
+  if (lsec->contents == NULL)
+    return false;
+
+  /* Set up the header.  */
+  bfd_xcoff_swap_ldhdr_out (output_bfd, ldhdr, lsec->contents);
+
+  /* Set up the import file names.  */
+  out = (char *) lsec->contents + ldhdr->l_impoff;
+  strcpy (out, ldinfo->libpath);
+  out += strlen (ldinfo->libpath) + 1;
+  *out++ = '\0';
+  *out++ = '\0';
+  for (fl = htab->imports; fl != NULL; fl = fl->next)
+    {
+      const char *s;
+
+      s = fl->path;
+      while ((*out++ = *s++) != '\0')
+	;
+      s = fl->file;
+      while ((*out++ = *s++) != '\0')
+	;
+      s = fl->member;
+      while ((*out++ = *s++) != '\0')
+	;
+    }
+
+  BFD_ASSERT ((bfd_size_type) ((bfd_byte *) out - lsec->contents) == ldhdr->l_impoff + ldhdr->l_istlen);
+
+  /* Set up the symbol string table.  */
+  if (ldinfo->string_size > 0)
+    {
+      memcpy (out, ldinfo->strings, ldinfo->string_size);
+      free (ldinfo->strings);
+      ldinfo->strings = NULL;
+    }
+
+  /* We can't set up the symbol table or the relocs yet, because we
+     don't yet know the final position of the various sections.  The
+     .loader symbols are written out when the corresponding normal
+     symbols are written out in xcoff_link_input_bfd or
+     xcoff_write_global_symbol.  The .loader relocs are written out
+     when the corresponding normal relocs are handled in
+     xcoff_link_input_bfd.  */
+
+  return true;
+}
+
+
+/* Lay out the .loader section and allocate the space for
+   the other dynamic sections of XCOFF.  */
+bool
+bfd_xcoff_build_dynamic_sections (bfd *output_bfd,
+				  struct bfd_link_info *info)
+{
+  struct xcoff_loader_info *ldinfo;
+  struct bfd_strtab_hash *debug_strtab;
+  bfd_byte *debug_contents = NULL;
+  bfd *sub;
+  asection *sec;
+
+  ldinfo = &(xcoff_hash_table (info)->ldinfo);
+
+  if (xcoff_hash_table (info)->loader_section
+      && !xcoff_build_loader_section (ldinfo))
+    return false;
+
   /* Allocate space for the magic sections.  */
   sec = xcoff_hash_table (info)->linkage_section;
   if (sec->size > 0)
     {
       sec->contents = bfd_zalloc (output_bfd, sec->size);
       if (sec->contents == NULL)
-	goto error_return;
+	return false;
     }
   sec = xcoff_hash_table (info)->toc_section;
   if (sec->size > 0)
     {
       sec->contents = bfd_zalloc (output_bfd, sec->size);
       if (sec->contents == NULL)
-	goto error_return;
+	return false;
     }
   sec = xcoff_hash_table (info)->descriptor_section;
   if (sec->size > 0)
     {
       sec->contents = bfd_zalloc (output_bfd, sec->size);
       if (sec->contents == NULL)
-	goto error_return;
+	return false;
     }
 
   /* Now that we've done garbage collection, decide which symbols to keep,
@@ -3857,7 +4127,9 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 	{
 	  /* Grab the contents of SUB's .debug section, if any.  */
 	  subdeb = bfd_get_section_by_name (sub, ".debug");
-	  if (subdeb != NULL && subdeb->size > 0)
+	  if (subdeb != NULL
+	      && subdeb->size != 0
+	      && (subdeb->flags & SEC_HAS_CONTENTS) != 0)
 	    {
 	      /* We use malloc and copy the names into the debug
 		 stringtab, rather than bfd_alloc, because I expect
@@ -3909,7 +4181,7 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 	  keep_p = xcoff_keep_symbol_p (info, sub, &sym, &aux,
 					*sym_hash, csect, name);
 	  if (keep_p < 0)
-	    return FALSE;
+	    goto error_return;
 
 	  if (!keep_p)
 	    /* Use a debug_index of -2 to record that a symbol should
@@ -3923,7 +4195,7 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 		{
 		  bfd_size_type indx;
 
-		  indx = _bfd_stringtab_add (debug_strtab, name, TRUE, TRUE);
+		  indx = _bfd_stringtab_add (debug_strtab, name, true, true);
 		  if (indx == (bfd_size_type) -1)
 		    goto error_return;
 		  *debug_index = indx;
@@ -3960,31 +4232,29 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 	}
     }
 
-  if (info->strip != strip_all)
+  if (info->strip != strip_all
+      && xcoff_hash_table (info)->debug_section != NULL)
     xcoff_hash_table (info)->debug_section->size =
       _bfd_stringtab_size (debug_strtab);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (ldinfo.strings != NULL)
-    free (ldinfo.strings);
-  if (debug_contents != NULL)
-    free (debug_contents);
-  return FALSE;
+  free (debug_contents);
+  return false;
 }
 
-bfd_boolean
+bool
 bfd_xcoff_link_generate_rtinit (bfd *abfd,
 				const char *init,
 				const char *fini,
-				bfd_boolean rtld)
+				bool rtld)
 {
   struct bfd_in_memory *bim;
 
   bim = bfd_malloc ((bfd_size_type) sizeof (* bim));
   if (bim == NULL)
-    return FALSE;
+    return false;
 
   bim->size = 0;
   bim->buffer = 0;
@@ -3999,16 +4269,761 @@ bfd_xcoff_link_generate_rtinit (bfd *abf
   abfd->where = 0;
 
   if (! bfd_xcoff_generate_rtinit (abfd, init, fini, rtld))
-    return FALSE;
+    return false;
 
   /* need to reset to unknown or it will not be read back in correctly */
   abfd->format = bfd_unknown;
   abfd->direction = read_direction;
   abfd->where = 0;
 
-  return TRUE;
+  return true;
 }
 
+
+/* Linker stubs.
+   The stubs will be gathered in stub csects named "@FIX'number'".
+   A new csect will be created by xcoff_stub_get_csect_in_range,
+   everytime a relocation cannot reach its target and its section
+   is too far from the others stub csects.
+   The stubs will simply be code generated inside these stub
+   csects.  In order to simplify the symbol table, only the symbols
+   for the stub csects are written.
+
+   As the code is dependent of the architecture, it's defined
+   in the backend.
+
+   xcoff_stub_indirect_call:
+   Used when a 24 bit branch cannot reach its destination and that
+   this destination isn't a global linkage symbol.
+
+   xcoff_stub_shared_call:
+   As above but when it's a global linkage symbol.
+   The main difference being that it doesn't branch to the global
+   linkage symbol which will then call the shared library.  It
+   directly call it saving the TOC.
+
+   TODO: -bbigtoc option should be able to be implemented using
+   this stubs.  */
+
+/* Get the name of a csect which will contain stubs.
+   It has the same pattern as AIX linker: @FIX"number".  */
+static char *
+xcoff_stub_csect_name (unsigned int n)
+{
+  char buf[8];
+  size_t len;
+  char *csect_name;
+
+  /* For now, allow "only" 1000000 stub csects.  */
+  if (n >= 1000000)
+    {
+      BFD_FAIL();
+      return NULL;
+    }
+
+  sprintf (buf, "%d", n);
+  len = 4 + strlen (buf) + 1;
+
+  csect_name = bfd_malloc (len);
+  if (csect_name == NULL)
+    return NULL;
+  sprintf (csect_name, "@FIX%d", n);
+
+  return csect_name;
+}
+
+/* Return a stub section which can be reach with a single branch
+   from SECTION.  CREATE means that creating a csect is allowed.  */
+static struct xcoff_link_hash_entry *
+xcoff_stub_get_csect_in_range (asection *section,
+			       struct bfd_link_info *info,
+			       bool create)
+{
+  struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+  struct xcoff_link_hash_entry *csect_entry;
+  struct bfd_link_hash_entry *bh = NULL;
+  asection *csect;
+  unsigned int it;
+  char *csect_name;
+
+  /* Search for a csect in range.  */
+  for (csect = htab->params->stub_bfd->sections, it = 0;
+       csect != NULL;
+       csect = csect->next, it++)
+    {
+      /* A csect is in range if everything instructions in SECTION
+	 can branch to every stubs in the stub csect.  This can
+	 be simplify by saying that the first entry of each sections
+	 (ie the vma of this section) can reach the last entry of the
+	 stub csect (ie the vma of the csect + its size).
+	 However, as the stub csect might be growing its size isn't
+	 fixed.  Thus, the last entry of SECTION might not be able
+	 to reach the first entry of the stub csect anymore.
+	 If this case happens, the following condition will be
+	 false during the next pass of bfd_xcoff_size_stubs and
+	 another csect will be used.
+	 This means we might create more stubs than needed.  */
+      bfd_vma csect_vma, section_vma;
+      bfd_vma csect_last_vma, section_last_vma;
+
+      csect_vma = (csect->output_section->vma
+		   + csect->output_offset);
+      csect_last_vma = (csect->output_section->vma
+			+ csect->output_offset
+			+ csect->size);
+      section_vma = (section->output_section->vma
+		     + section->output_offset);
+      section_last_vma = (section->output_section->vma
+			  + section->output_offset
+			  + section->size);
+
+      if (csect_last_vma - section_vma + (1 << 25) < 2 * (1 << 25)
+	  && section_last_vma - csect_vma + (1 << 25) < 2 * (1 << 25))
+	break;
+    }
+
+  if (!create && csect == NULL)
+    return NULL;
+
+  csect_name = xcoff_stub_csect_name (it);
+  if (!csect_name)
+    return NULL;
+
+  /* A stub csect already exists, get its entry.  */
+  if (csect != NULL)
+    {
+      csect_entry = xcoff_link_hash_lookup (htab, csect_name, false, false, true);
+      free(csect_name);
+      return csect_entry;
+    }
+
+  /* Create the csect and its symbol.  */
+  csect = (*htab->params->add_stub_section) (".pr", section);
+  if (!csect)
+    {
+      free(csect_name);
+      return NULL;
+    }
+
+  csect->alignment_power = 2;
+  csect->gc_mark = 1;
+  csect->reloc_count = 0;
+
+  /* We need to associate a VMA to this new csect.  Otherwise,
+     our "in range" algorithm won't find it for the next stub.
+     And as we will be adding this stub section just after the
+     SECTION, we know its address.  */
+  csect->output_offset = BFD_ALIGN (section->output_offset + section->size,
+				    4);
+
+  if (!_bfd_generic_link_add_one_symbol (info, htab->params->stub_bfd,
+					 csect_name, BSF_GLOBAL, csect, 0,
+					 NULL, true, true, &bh))
+    {
+      free(csect_name);
+      return NULL;
+    }
+
+  csect_entry = (struct xcoff_link_hash_entry *)bh;
+  csect_entry->smclas = XMC_PR;
+  csect_entry->flags = XCOFF_MARK | XCOFF_DEF_REGULAR;
+
+  free(csect_name);
+  return csect_entry;
+}
+
+
+/* Build a name for an entry in the stub hash table.  */
+static char *
+xcoff_stub_name (const struct xcoff_link_hash_entry *h,
+		 const struct xcoff_link_hash_entry *hcsect)
+{
+  char *stub_name;
+  size_t len;
+
+  if (h)
+    {
+      /* The name of a stub is based on its stub csect and the
+	 symbol it wants to reach.  It looks like: ".@FIX0.tramp.f".
+	 When the stub targets a function, the last dot of ".tramp."
+	 is removed to avoid having two dot.  */
+      len = (1 + 6
+	     + strlen (hcsect->root.root.string)
+	     + strlen (h->root.root.string)
+	     + 1);
+      if (h->root.root.string[0] != '.')
+	len++;
+
+      stub_name = bfd_malloc (len);
+      if (stub_name == NULL)
+	return stub_name;
+
+      if (h->root.root.string[0] == '.')
+	sprintf (stub_name, ".%s.tramp%s",
+		 hcsect->root.root.string,
+		 h->root.root.string);
+      else
+	sprintf (stub_name, ".%s.tramp.%s",
+		 hcsect->root.root.string,
+		 h->root.root.string);
+    }
+  else
+    {
+      BFD_FAIL();
+      return NULL;
+    }
+
+  return stub_name;
+}
+
+/* Look up an entry in the stub hash.  */
+struct xcoff_stub_hash_entry *
+bfd_xcoff_get_stub_entry (asection *section,
+			  struct xcoff_link_hash_entry *h,
+			  struct bfd_link_info *info)
+{
+  struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+  struct xcoff_link_hash_entry *hcsect;
+  struct xcoff_stub_hash_entry *hstub;
+  char *stub_name;
+
+  hcsect = xcoff_stub_get_csect_in_range (section, info, false);
+  if (!hcsect)
+    return NULL;
+
+  stub_name = xcoff_stub_name (h, hcsect);
+  if (stub_name == NULL)
+    return NULL;
+
+  hstub = xcoff_stub_hash_lookup (&htab->stub_hash_table,
+				  stub_name, false, false);
+
+  free (stub_name);
+  return hstub;
+}
+
+/* Check if the symbol targeted by IREL is reachable.
+   Return the type of stub needed otherwise.  */
+enum xcoff_stub_type
+bfd_xcoff_type_of_stub (asection *sec,
+			const struct internal_reloc *irel,
+			bfd_vma destination,
+			struct xcoff_link_hash_entry *h)
+{
+  bfd_vma location, offset, max_offset;
+
+  switch (irel->r_type)
+    {
+    default:
+      return xcoff_stub_none;
+
+    case R_BR:
+    case R_RBR:
+      location = (sec->output_section->vma
+		  + sec->output_offset
+		  + irel->r_vaddr
+		  - sec->vma);
+
+      max_offset = 1 << 25 ;
+
+      offset = destination - location;
+
+      if (offset + max_offset < 2 * max_offset)
+	return xcoff_stub_none;
+
+      /* A stub is needed.  Now, check that we can make one.  */
+      if (h != NULL
+	  && h->descriptor != NULL)
+	{
+	  /* Not sure how to handle this case. For now, skip it. */
+	  if (bfd_is_abs_section (h->root.u.def.section))
+	    return xcoff_stub_none;
+
+	  if (h->smclas == XMC_GL)
+	    return xcoff_stub_shared_call;
+	  else
+	    return xcoff_stub_indirect_call;
+	}
+      break;
+    }
+
+  return xcoff_stub_none;
+}
+
+/* Add a new stub entry to the stub hash.  Not all fields of the new
+   stub entry are initialised.  */
+static struct xcoff_stub_hash_entry *
+xcoff_add_stub (const char *stub_name,
+		struct xcoff_link_hash_entry *hstub_csect,
+		struct xcoff_link_hash_entry *htarget,
+		struct bfd_link_info *info,
+		enum xcoff_stub_type stub_type)
+{
+  struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+  struct xcoff_stub_hash_entry *hstub;
+  bfd_vma stub_offset;
+  asection *stub_csect;
+
+  stub_csect = hstub_csect->root.u.def.section;
+  stub_offset = stub_csect->size;
+
+  /* Update the relocation counter and the size of
+     the containing csect.  The size is needed for
+     the algorithm in xcoff_stub_get_csect_in_range.  */
+  switch (stub_type)
+    {
+    default:
+      BFD_FAIL ();
+      return NULL;
+
+    case xcoff_stub_indirect_call:
+      stub_csect->reloc_count++;
+      stub_csect->size += bfd_xcoff_stub_indirect_call_size (info->output_bfd);
+	break;
+
+    case xcoff_stub_shared_call:
+      stub_csect->reloc_count++;
+      stub_csect->size += bfd_xcoff_stub_shared_call_size (info->output_bfd);
+      break;
+    }
+
+  /* Create the stub entry.  */
+  hstub = xcoff_stub_hash_lookup (&htab->stub_hash_table, stub_name,
+				       true, true);
+  if (hstub == NULL)
+    return NULL;
+
+  hstub->htarget = htarget;
+  hstub->stub_offset = stub_offset;
+
+  /* For indirect call or shared call, the relocations are against
+     the target descriptor.  Its toc entry will be used.  */
+  if (stub_type == xcoff_stub_indirect_call
+      || stub_type == xcoff_stub_shared_call)
+    {
+      struct xcoff_link_hash_entry *hds = htarget->descriptor;
+      asection *hds_section = hds->root.u.def.section;
+
+      hstub->htarget = hds;
+
+      /* If the symbol haven't been marked, its section might have
+	 its size and its relocation count been deleted by xcoff_sweep.
+	 Restore it.  */
+      if ((hds->flags & XCOFF_MARK) == 0)
+	{
+	  if (hds_section->size == 0
+	      && hds_section->reloc_count == 0
+	      && hds_section->rawsize != 0)
+	    {
+	      hds_section->size = hds_section->rawsize;
+	      /* Always two relocations for a XMC_DS symbol.  */
+	      hds_section->reloc_count = 2;
+	    }
+
+	  /* Mark the section and the symbol.  */
+	  if (!xcoff_mark (info, hds_section))
+	    return NULL;
+	}
+
+      /* Add a TOC entry for the descriptor if non exists.  */
+      if (hds->toc_section == NULL)
+	{
+	  int byte_size;
+
+	  if (bfd_xcoff_is_xcoff64 (info->output_bfd))
+	    byte_size = 8;
+	  else if (bfd_xcoff_is_xcoff32 (info->output_bfd))
+	    byte_size = 4;
+	  else
+	    return NULL;
+
+	  /* Allocate room in the fallback TOC section.  */
+	  hds->toc_section = xcoff_hash_table (info)->toc_section;
+	  hds->u.toc_offset = hds->toc_section->size;
+	  hds->toc_section->size += byte_size;
+	  if (!xcoff_mark (info, hds->toc_section))
+	    return NULL;
+
+	  /* Update relocation counters for a static and dynamic
+	     R_TOC relocation.  */
+	  ++hds->toc_section->reloc_count;
+	  ++htab->ldinfo.ldrel_count;
+
+	  /* Set the index to -2 to force this symbol to
+	     get written out.  */
+	  hds->indx = -2;
+	  hds->flags |= XCOFF_SET_TOC;
+	}
+    }
+
+  return hstub;
+}
+
+static bool
+xcoff_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
+{
+  struct xcoff_stub_hash_entry *hstub
+    = (struct xcoff_stub_hash_entry *) gen_entry;
+
+  bfd *stub_bfd;
+  bfd *output_bfd;
+  struct bfd_link_info *info;
+  bfd_byte *loc;
+  bfd_byte *p;
+  unsigned int i;
+
+  info = (struct bfd_link_info *) in_arg;
+  stub_bfd = xcoff_hash_table (info)->params->stub_bfd;
+  output_bfd = info->output_bfd;
+
+  /* Fail if the target section could not be assigned to an output
+     section.  The user should fix his linker script.  */
+  if (hstub->target_section != NULL
+      && hstub->target_section->output_section == NULL
+      && info->non_contiguous_regions)
+    info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+			      "Retry without --enable-non-contiguous-regions.\n"),
+			    hstub->target_section);
+
+  loc = (hstub->hcsect->root.u.def.section->contents
+	 + hstub->stub_offset);
+  p = loc;
+
+  switch (hstub->stub_type)
+    {
+    case xcoff_stub_indirect_call:
+      BFD_ASSERT (hstub->htarget->toc_section != NULL);
+      /* The first instruction in the stub code needs to be
+	 cooked to hold the correct offset in the toc.  It will
+	 be filled by xcoff_stub_create_relocations.  */
+      for (i = 0; i < bfd_xcoff_stub_indirect_call_size(output_bfd) / 4; i++)
+	bfd_put_32 (stub_bfd,
+		    (bfd_vma) bfd_xcoff_stub_indirect_call_code(output_bfd, i),
+		    &p[4 * i]);
+      break;
+
+    case xcoff_stub_shared_call:
+      BFD_ASSERT (hstub->htarget->toc_section != NULL);
+      /* The first instruction in the glink code needs to be
+	 cooked to hold the correct offset in the toc.  It will
+	 be filled by xcoff_stub_create_relocations.  */
+      for (i = 0; i < bfd_xcoff_stub_shared_call_size(output_bfd) / 4; i++)
+	bfd_put_32 (stub_bfd,
+		    (bfd_vma) bfd_xcoff_stub_shared_call_code(output_bfd, i),
+		    &p[4 * i]);
+
+      break;
+
+    default:
+      BFD_FAIL ();
+      return false;
+    }
+  return true;
+}
+
+/* Check relocations and adds stubs if needed.  */
+
+bool
+bfd_xcoff_size_stubs (struct bfd_link_info *info)
+{
+  struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+  struct xcoff_loader_info *ldinfo = &(htab->ldinfo);
+
+  while (1)
+    {
+      bfd *input_bfd;
+      bool stub_changed = false;
+
+      for (input_bfd = info->input_bfds;
+	   input_bfd != NULL;
+	   input_bfd = input_bfd->link.next)
+	{
+	  asection *section;
+	  bfd_size_type symcount;
+	  bfd_size_type symesz;
+	  bfd_byte *esyms;
+
+	  if (bfd_get_flavour (input_bfd) != bfd_target_xcoff_flavour)
+	    continue;
+
+	  symcount = obj_raw_syment_count (input_bfd);
+	  if (!symcount)
+	    continue;
+	  symesz = bfd_coff_symesz (input_bfd);
+	  esyms = (bfd_byte *) obj_coff_external_syms (input_bfd);
+
+	  /* Walk over each section attached to the input bfd.  */
+	  for (section = input_bfd->sections;
+	       section != NULL;
+	       section = section->next)
+	    {
+	      struct internal_reloc *internal_relocs;
+	      struct internal_reloc *irel, *irelend;
+
+	      /* If there aren't any relocs, then there's nothing more
+		 to do.  */
+	      if ((section->flags & SEC_RELOC) == 0
+		  || section->reloc_count == 0)
+		continue;
+
+	      /* If this section is a link-once section that will be
+		 discarded, then don't create any stubs.  */
+	      if (section->output_section == NULL
+		  || section->output_section->owner != info->output_bfd)
+		continue;
+
+	      /* This section have been garbage-collected.  */
+	      if (section->gc_mark == 0)
+		continue;
+
+	      /* Read in the relocs.  */
+	      internal_relocs = (xcoff_read_internal_relocs
+				 (input_bfd, section, true, NULL,
+				  false, NULL));
+	      if (internal_relocs == NULL)
+		goto error_ret;
+
+	      irel = internal_relocs;
+	      irelend = irel + section->reloc_count;
+	      for (; irel < irelend; irel++)
+		{
+		  enum xcoff_stub_type stub_type;
+		  struct xcoff_link_hash_entry *hsym = NULL;
+		  struct xcoff_link_hash_entry *hstub_csect = NULL;
+		  struct xcoff_stub_hash_entry *hstub = NULL;
+		  asection *sym_sec;
+		  bfd_vma sym_value;
+		  bfd_vma destination;
+		  char *stub_name;
+
+		  if (irel->r_symndx == -1)
+		    continue;
+
+		  switch (irel->r_type)
+		    {
+		    default:
+		      continue;
+
+		    case R_BR:
+		    case R_RBR:
+		      break;
+		    }
+
+		  /* Retrieve targeted symbol address */
+		  hsym = obj_xcoff_sym_hashes (input_bfd)[irel->r_symndx];
+		  if (hsym == NULL)
+		    {
+		      struct internal_syment sym;
+		      if ((long unsigned int)irel->r_symndx > symcount)
+			{
+			  BFD_FAIL();
+			  goto error_ret;
+			}
+
+		      bfd_coff_swap_sym_in (input_bfd,
+					    (void *) esyms + irel->r_symndx * symesz,
+					    (void *) &sym);
+
+		      sym_sec = xcoff_data (input_bfd)->csects[irel->r_symndx];
+		      sym_value = sym.n_value - sym_sec->vma;
+
+		      destination = (sym_value
+				     + sym_sec->output_section->vma
+				     + sym_sec->output_offset);
+		    }
+		  else if (hsym->root.type == bfd_link_hash_defined
+			   || hsym->root.type == bfd_link_hash_defweak)
+		    {
+		      sym_sec = hsym->root.u.def.section;
+		      sym_value = hsym->root.u.def.value;
+		      destination = (sym_value
+				     + sym_sec->output_section->vma
+				     + sym_sec->output_offset);
+		    }
+		  else
+		    {
+		      bfd_set_error (bfd_error_bad_value);
+		      goto error_ret;
+		    }
+
+		  /* I'm not sure how to handle this case. Skip it for now.  */
+		  if (bfd_is_abs_section (sym_sec))
+		    continue;
+
+		  stub_type = bfd_xcoff_type_of_stub (section, irel, destination, hsym);
+
+		  if (stub_type == xcoff_stub_none)
+		    continue;
+
+		  /* Get a stub csect in ranch.  */
+		  hstub_csect = xcoff_stub_get_csect_in_range (section, info, true);
+		  if (!hstub_csect)
+		    {
+		      /* xgettext:c-format */
+		      _bfd_error_handler (_("%pB: Unable to find a stub csect in range"
+					    "of relocation at %#" PRIx64 " targeting"
+					    "'%s'"),
+					  section->owner, (uint64_t) irel->r_vaddr,
+					  hsym->root.root.string);
+		      goto error_ret;
+		    }
+
+		  /* Get the name of this stub.  */
+		  stub_name = xcoff_stub_name (hsym, hstub_csect);
+		  if (!stub_name)
+		    goto error_ret;
+
+		  hstub = xcoff_stub_hash_lookup (&(xcoff_hash_table (info)->stub_hash_table),
+						       stub_name, false, false);
+
+		  /* A stub entry inside the in range csect already exists.  */
+		  if (hstub != NULL)
+		    {
+		      free (stub_name);
+		      continue;
+		    }
+
+		  stub_changed = true;
+
+		  hstub = xcoff_add_stub (stub_name, hstub_csect, hsym, info, stub_type);
+		  if (hstub == NULL)
+		    {
+		      /* xgettext:c-format */
+		      _bfd_error_handler (_("%pB: Cannot create stub entry '%s'"),
+					  section->owner, stub_name);
+		      free (stub_name);
+		      goto error_ret;
+		    }
+
+		  hstub->stub_type = stub_type;
+		  hstub->hcsect = hstub_csect;
+		  hstub->target_section = sym_sec;
+		  free (stub_name);
+		}
+	    }
+	}
+
+      if (!stub_changed)
+	break;
+
+      /* Update the size of the loader.  */
+      if (xcoff_hash_table (info)->loader_section
+	  && !xcoff_size_loader_section (ldinfo))
+	goto error_ret;
+
+      /* Ask the linker to do its stuff.  */
+      (*htab->params->layout_sections_again) ();
+
+    }
+  return true;
+
+ error_ret:
+  bfd_set_error (bfd_error_bad_value);
+  return false;
+}
+
+bool
+bfd_xcoff_build_stubs (struct bfd_link_info *info)
+{
+  struct xcoff_link_hash_table *htab = xcoff_hash_table (info);
+  asection *stub_sec;
+
+  for (stub_sec = htab->params->stub_bfd->sections;
+       stub_sec != NULL;
+       stub_sec = stub_sec->next)
+    {
+      bfd_size_type size;
+
+      /* Allocate memory to hold the linker stubs.  */
+      size = stub_sec->size;
+      stub_sec->contents = bfd_zalloc (htab->params->stub_bfd, size);
+      if (stub_sec->contents == NULL && size != 0)
+	return false;
+
+    }
+
+  /* Build the stubs as directed by the stub hash table.  */
+  bfd_hash_traverse (&htab->stub_hash_table, xcoff_build_one_stub, info);
+  return true;
+}
+
+/* Create and apply relocations made by a stub entry.  */
+static bool
+xcoff_stub_create_relocations (struct bfd_hash_entry *bh, void * inf)
+{
+  struct xcoff_stub_hash_entry *hstub
+    = (struct xcoff_stub_hash_entry *) bh;
+  struct xcoff_final_link_info *flinfo
+    = (struct xcoff_final_link_info *) inf;
+
+  bfd *output_bfd;
+  struct internal_reloc *irel;
+  struct xcoff_link_hash_entry **rel_hash;
+  struct xcoff_link_hash_entry *htarget;
+  asection *sec, *osec;
+  bfd_vma off;
+  bfd_byte *p;
+
+  htarget = hstub->htarget;
+  sec = hstub->hcsect->root.u.def.section;
+  osec = sec->output_section;
+
+  irel = (flinfo->section_info[osec->target_index].relocs
+	  + osec->reloc_count);
+  rel_hash = (flinfo->section_info[osec->target_index].rel_hashes
+	      + osec->output_section->reloc_count);
+  *rel_hash = NULL;
+  output_bfd = flinfo->output_bfd;
+
+  irel->r_symndx = htarget->indx;
+  irel->r_vaddr = (osec->vma
+		   + sec->output_offset
+		   + hstub->hcsect->root.u.def.value
+		   + hstub->stub_offset);
+
+  p = (sec->contents
+       + hstub->stub_offset);
+
+  switch (hstub->stub_type)
+    {
+    default:
+      BFD_FAIL ();
+      return false;
+
+      /* The first instruction of this stub code need
+	 a R_TOC relocation.  */
+    case xcoff_stub_indirect_call:
+    case xcoff_stub_shared_call:
+      irel->r_size = 0xf;
+      irel->r_type = R_TOC;
+
+      /* Retrieve the toc offset of the target which is
+	 a function descriptor.  */
+      BFD_ASSERT (htarget->toc_section != NULL);
+      if ((htarget->flags & XCOFF_SET_TOC) != 0)
+	off = hstub->htarget->u.toc_offset;
+      else
+	off = (htarget->toc_section->output_section->vma
+	       + htarget->toc_section->output_offset
+	       - xcoff_data (flinfo->output_bfd)->toc);
+      if ((off & 0xffff) != off)
+	{
+	  _bfd_error_handler
+	    (_("TOC overflow during stub generation; try -mminimal-toc "
+	       "when compiling"));
+	  bfd_set_error (bfd_error_file_too_big);
+	  return false;
+	}
+
+      bfd_put_16 (output_bfd, off & 0xffff, p+2);
+      break;
+    }
+
+  ++osec->reloc_count;
+  return true;
+}
+
+
 /* Return the section that defines H.  Return null if no section does.  */
 
 static asection *
@@ -4034,7 +5049,7 @@ xcoff_symbol_section (struct xcoff_link_
    symbol that IREL is against, or null if it isn't against a global symbol.
    REFERENCE_BFD is the bfd to use in error messages about the relocation.  */
 
-static bfd_boolean
+static bool
 xcoff_create_ldrel (bfd *output_bfd, struct xcoff_final_link_info *flinfo,
 		    asection *output_section, bfd *reference_bfd,
 		    struct internal_reloc *irel, asection *hsec,
@@ -4054,6 +5069,10 @@ xcoff_create_ldrel (bfd *output_bfd, str
 	ldrel.l_symndx = 1;
       else if (strcmp (secname, ".bss") == 0)
 	ldrel.l_symndx = 2;
+      else if (strcmp (secname, ".tdata") == 0)
+	ldrel.l_symndx = -1;
+      else if (strcmp (secname, ".tbss") == 0)
+	ldrel.l_symndx = -2;
       else
 	{
 	  _bfd_error_handler
@@ -4061,7 +5080,7 @@ xcoff_create_ldrel (bfd *output_bfd, str
 	    (_("%pB: loader reloc in unrecognized section `%s'"),
 	     reference_bfd, secname);
 	  bfd_set_error (bfd_error_nonrepresentable_section);
-	  return FALSE;
+	  return false;
 	}
     }
   else if (h != NULL)
@@ -4073,7 +5092,7 @@ xcoff_create_ldrel (bfd *output_bfd, str
 	    (_("%pB: `%s' in loader reloc but not loader sym"),
 	     reference_bfd, h->root.root.string);
 	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
+	  return false;
 	}
       ldrel.l_symndx = h->ldindx;
     }
@@ -4090,17 +5109,17 @@ xcoff_create_ldrel (bfd *output_bfd, str
 	(_("%pB: loader reloc in read-only section %pA"),
 	 reference_bfd, output_section);
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
   bfd_xcoff_swap_ldrel_out (output_bfd, &ldrel, flinfo->ldrel);
   flinfo->ldrel += bfd_xcoff_ldrelsz (output_bfd);
-  return TRUE;
+  return true;
 }
 
 /* Link an input file into the linker output file.  This function
    handles all the sections and relocations of the input file at once.  */
 
-static bfd_boolean
+static bool
 xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo,
 		      bfd *input_bfd)
 {
@@ -4109,7 +5128,7 @@ xcoff_link_input_bfd (struct xcoff_final
   bfd_size_type syment_base;
   unsigned int n_tmask;
   unsigned int n_btshft;
-  bfd_boolean copy, hash;
+  bool copy, hash;
   bfd_size_type isymesz;
   bfd_size_type osymesz;
   bfd_size_type linesz;
@@ -4125,13 +5144,13 @@ xcoff_link_input_bfd (struct xcoff_final
   bfd_byte *outsym;
   unsigned int incls;
   asection *oline;
-  bfd_boolean keep_syms;
+  bool keep_syms;
   asection *o;
 
   /* We can just skip DYNAMIC files, unless this is a static link.  */
   if ((input_bfd->flags & DYNAMIC) != 0
       && ! flinfo->info->static_link)
-    return TRUE;
+    return true;
 
   /* Move all the symbols to the output file.  */
   output_bfd = flinfo->output_bfd;
@@ -4149,15 +5168,15 @@ xcoff_link_input_bfd (struct xcoff_final
 #define N_TMASK n_tmask
 #define N_BTSHFT n_btshft
 
-  copy = FALSE;
+  copy = false;
   if (! flinfo->info->keep_memory)
-    copy = TRUE;
-  hash = TRUE;
+    copy = true;
+  hash = true;
   if (flinfo->info->traditional_format)
-    hash = FALSE;
+    hash = false;
 
   if (! _bfd_coff_get_external_symbols (input_bfd))
-    return FALSE;
+    return false;
 
   /* Make one pass over the symbols and assign indices to symbols that
      we have decided to keep.  Also use create .loader symbol information
@@ -4368,10 +5387,10 @@ xcoff_link_input_bfd (struct xcoff_final
 		  name = _bfd_coff_internal_syment_name (input_bfd, &isym, NULL);
 
 		  if (name == NULL)
-		    return FALSE;
+		    return false;
 		  indx = _bfd_stringtab_add (flinfo->strtab, name, hash, copy);
 		  if (indx == (bfd_size_type) -1)
-		    return FALSE;
+		    return false;
 		  isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
 		}
 	    }
@@ -4422,9 +5441,9 @@ xcoff_link_input_bfd (struct xcoff_final
 		      pos = obj_sym_filepos (output_bfd);
 		      pos += flinfo->last_file_index * osymesz;
 		      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-			  || (bfd_bwrite (outsym, osymesz, output_bfd)
+			  || (bfd_write (outsym, osymesz, output_bfd)
 			      != osymesz))
-			return FALSE;
+			return false;
 		    }
 		}
 
@@ -4469,6 +5488,13 @@ xcoff_link_input_bfd (struct xcoff_final
 			       - (*csectpp)->vma);
 	    }
 
+	  /* Update visibility.  */
+	  if (*sym_hash)
+	    {
+	      isym.n_type &= ~SYM_V_MASK;
+	      isym.n_type |= (*sym_hash)->visibility;
+	    }
+
 	  /* Output the symbol.  */
 	  bfd_coff_swap_sym_out (output_bfd, (void *) &isym, (void *) outsym);
 
@@ -4488,29 +5514,29 @@ xcoff_link_input_bfd (struct xcoff_final
 		  /* This is the file name (or some comment put in by
 		     the compiler).  If it is long, we must put it in
 		     the string table.  */
-		  if (aux.x_file.x_n.x_zeroes == 0
-		      && aux.x_file.x_n.x_offset != 0)
+		  if (aux.x_file.x_n.x_n.x_zeroes == 0
+		      && aux.x_file.x_n.x_n.x_offset != 0)
 		    {
 		      const char *filename;
 		      bfd_size_type indx;
 
-		      BFD_ASSERT (aux.x_file.x_n.x_offset
+		      BFD_ASSERT (aux.x_file.x_n.x_n.x_offset
 				  >= STRING_SIZE_SIZE);
 		      if (strings == NULL)
 			{
 			  strings = _bfd_coff_read_string_table (input_bfd);
 			  if (strings == NULL)
-			    return FALSE;
+			    return false;
 			}
-		      if ((bfd_size_type) aux.x_file.x_n.x_offset >= obj_coff_strings_len (input_bfd))
+		      if ((bfd_size_type) aux.x_file.x_n.x_n.x_offset >= obj_coff_strings_len (input_bfd))
 			filename = _("<corrupt>");
 		      else
-			filename = strings + aux.x_file.x_n.x_offset;
+			filename = strings + aux.x_file.x_n.x_n.x_offset;
 		      indx = _bfd_stringtab_add (flinfo->strtab, filename,
 						 hash, copy);
 		      if (indx == (bfd_size_type) -1)
-			return FALSE;
-		      aux.x_file.x_n.x_offset = STRING_SIZE_SIZE + indx;
+			return false;
+		      aux.x_file.x_n.x_n.x_offset = STRING_SIZE_SIZE + indx;
 		    }
 		}
 	      else if (CSECT_SYM_P (isymp->n_sclass)
@@ -4529,7 +5555,7 @@ xcoff_link_input_bfd (struct xcoff_final
 		    {
 		      unsigned long indx;
 
-		      indx = aux.x_csect.x_scnlen.l;
+		      indx = aux.x_csect.x_scnlen.u64;
 		      if (indx < obj_raw_syment_count (input_bfd))
 			{
 			  long symindx;
@@ -4537,11 +5563,11 @@ xcoff_link_input_bfd (struct xcoff_final
 			  symindx = flinfo->sym_indices[indx];
 			  if (symindx < 0)
 			    {
-			      aux.x_csect.x_scnlen.l = 0;
+			      aux.x_csect.x_scnlen.u64 = 0;
 			    }
 			  else
 			    {
-			      aux.x_csect.x_scnlen.l = symindx;
+			      aux.x_csect.x_scnlen.u64 = symindx;
 			    }
 			}
 		    }
@@ -4555,7 +5581,7 @@ xcoff_link_input_bfd (struct xcoff_final
 		      || isymp->n_sclass == C_BLOCK
 		      || isymp->n_sclass == C_FCN)
 		    {
-		      indx = aux.x_sym.x_fcnary.x_fcn.x_endndx.l;
+		      indx = aux.x_sym.x_fcnary.x_fcn.x_endndx.u32;
 		      if (indx > 0
 			  && indx < obj_raw_syment_count (input_bfd))
 			{
@@ -4570,21 +5596,21 @@ xcoff_link_input_bfd (struct xcoff_final
 			    indx = output_index;
 			  else
 			    indx = flinfo->sym_indices[indx];
-			  aux.x_sym.x_fcnary.x_fcn.x_endndx.l = indx;
+			  aux.x_sym.x_fcnary.x_fcn.x_endndx.u32 = indx;
 
 			}
 		    }
 
-		  indx = aux.x_sym.x_tagndx.l;
+		  indx = aux.x_sym.x_tagndx.u32;
 		  if (indx > 0 && indx < obj_raw_syment_count (input_bfd))
 		    {
 		      long symindx;
 
 		      symindx = flinfo->sym_indices[indx];
 		      if (symindx < 0)
-			aux.x_sym.x_tagndx.l = 0;
+			aux.x_sym.x_tagndx.u32 = 0;
 		      else
-			aux.x_sym.x_tagndx.l = symindx;
+			aux.x_sym.x_tagndx.u32 = symindx;
 		    }
 
 		}
@@ -4622,9 +5648,9 @@ xcoff_link_input_bfd (struct xcoff_final
 			  pos = enclosing->line_filepos;
 			  amt = linesz * enc_count;
 			  if (bfd_seek (input_bfd, pos, SEEK_SET) != 0
-			      || (bfd_bread (flinfo->linenos, amt, input_bfd)
+			      || (bfd_read (flinfo->linenos, amt, input_bfd)
 				  != amt))
-			    return FALSE;
+			    return false;
 			  oline = enclosing;
 			}
 
@@ -4654,9 +5680,9 @@ xcoff_link_input_bfd (struct xcoff_final
 			     + o->output_section->lineno_count * linesz);
 		      amt = linesz * *lineno_counts;
 		      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-			  || bfd_bwrite (flinfo->linenos + linoff,
-					 amt, output_bfd) != amt)
-			return FALSE;
+			  || bfd_write (flinfo->linenos + linoff, amt,
+					output_bfd) != amt)
+			return false;
 		      o->output_section->lineno_count += *lineno_counts;
 
 		      /* Record the offset of the symbol's line numbers
@@ -4745,8 +5771,8 @@ xcoff_link_input_bfd (struct xcoff_final
       file_ptr pos = obj_sym_filepos (output_bfd) + syment_base * osymesz;
       bfd_size_type amt = outsym - flinfo->outsyms;
       if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-	  || bfd_bwrite (flinfo->outsyms, amt, output_bfd) != amt)
-	return FALSE;
+	  || bfd_write (flinfo->outsyms, amt, output_bfd) != amt)
+	return false;
 
       BFD_ASSERT ((obj_raw_syment_count (output_bfd)
 		   + (outsym - flinfo->outsyms) / osymesz)
@@ -4757,7 +5783,7 @@ xcoff_link_input_bfd (struct xcoff_final
 
   /* Don't let the linker relocation routines discard the symbols.  */
   keep_syms = obj_coff_keep_syms (input_bfd);
-  obj_coff_keep_syms (input_bfd) = TRUE;
+  obj_coff_keep_syms (input_bfd) = true;
 
   /* Relocate the contents of each section.  */
   for (o = input_bfd->sections; o != NULL; o = o->next)
@@ -4782,7 +5808,7 @@ xcoff_link_input_bfd (struct xcoff_final
 	{
 	  bfd_size_type sz = o->rawsize ? o->rawsize : o->size;
 	  if (!bfd_get_section_contents (input_bfd, o, flinfo->contents, 0, sz))
-	    return FALSE;
+	    goto err_out;
 	  contents = flinfo->contents;
 	}
 
@@ -4799,12 +5825,12 @@ xcoff_link_input_bfd (struct xcoff_final
 	  /* Read in the relocs.  */
 	  target_index = o->output_section->target_index;
 	  internal_relocs = (xcoff_read_internal_relocs
-			     (input_bfd, o, FALSE, flinfo->external_relocs,
-			      TRUE,
+			     (input_bfd, o, false, flinfo->external_relocs,
+			      true,
 			      (flinfo->section_info[target_index].relocs
 			       + o->output_section->reloc_count)));
 	  if (internal_relocs == NULL)
-	    return FALSE;
+	    goto err_out;
 
 	  /* Call processor specific code to relocate the section
 	     contents.  */
@@ -4814,7 +5840,7 @@ xcoff_link_input_bfd (struct xcoff_final
 					   internal_relocs,
 					   flinfo->internal_syms,
 					   xcoff_data (input_bfd)->csects))
-	    return FALSE;
+	    goto err_out;
 
 	  offset = o->output_section->vma + o->output_offset - o->vma;
 	  irel = internal_relocs;
@@ -4829,8 +5855,6 @@ xcoff_link_input_bfd (struct xcoff_final
 
 	      /* Adjust the reloc address and symbol index.  */
 
-	      irel->r_vaddr += offset;
-
 	      r_symndx = irel->r_symndx;
 
 	      if (r_symndx == -1)
@@ -4838,8 +5862,48 @@ xcoff_link_input_bfd (struct xcoff_final
 	      else
 		h = obj_xcoff_sym_hashes (input_bfd)[r_symndx];
 
+	      /* In case of a R_BR or R_RBR, change the target if
+		 a stub is being called.  */
+	      if (h != NULL
+		  && (irel->r_type == R_BR
+		      || irel->r_type == R_RBR))
+		{
+		  asection *sym_sec;
+		  bfd_vma dest;
+		  struct xcoff_stub_hash_entry *hstub = NULL;
+		  enum xcoff_stub_type stub_type;
+
+		  if (h->root.type == bfd_link_hash_defined
+		      || h->root.type == bfd_link_hash_defweak)
+		    {
+		      sym_sec = h->root.u.def.section;
+		      dest = (h->root.u.def.value
+			      + sym_sec->output_section->vma
+			      + sym_sec->output_offset);
+		    }
+		  else
+		    {
+		      BFD_FAIL ();
+		      goto err_out;
+		    }
+
+		  stub_type = bfd_xcoff_type_of_stub (o, irel, dest, h);
+		  if (stub_type != xcoff_stub_none)
+		    {
+		      hstub = bfd_xcoff_get_stub_entry (o, h, flinfo->info);
+		      if (hstub == NULL)
+			goto err_out;
+
+		      h = hstub->hcsect;
+		    }
+
+		}
+
+	      irel->r_vaddr += offset;
+
 	      if (r_symndx != -1 && flinfo->info->strip != strip_all)
 		{
+
 		  if (h != NULL
 		      && h->smclas != XMC_TD
 		      && (irel->r_type == R_TOC
@@ -4861,12 +5925,12 @@ xcoff_link_input_bfd (struct xcoff_final
 			{
 			  struct xcoff_toc_rel_hash *n;
 			  struct xcoff_link_section_info *si;
-			  bfd_size_type amt;
+			  size_t amt;
 
 			  amt = sizeof (* n);
 			  n = bfd_alloc (flinfo->output_bfd, amt);
 			  if (n == NULL)
-			    return FALSE;
+			    goto err_out;
 			  si = flinfo->section_info + target_index;
 			  n->next = si->toc_rel_hashes;
 			  n->h = h;
@@ -4948,7 +6012,7 @@ xcoff_link_input_bfd (struct xcoff_final
 				      (input_bfd, is, buf));
 
 			      if (name == NULL)
-				return FALSE;
+				goto err_out;
 
 			      (*flinfo->info->callbacks->unattached_reloc)
 				(flinfo->info, name,
@@ -4959,7 +6023,7 @@ xcoff_link_input_bfd (struct xcoff_final
 		}
 
 	      if ((o->flags & SEC_DEBUGGING) == 0
-		  && xcoff_need_ldrel_p (flinfo->info, irel, h))
+		  && xcoff_need_ldrel_p (flinfo->info, irel, h, o))
 		{
 		  asection *sec;
 
@@ -4972,7 +6036,7 @@ xcoff_link_input_bfd (struct xcoff_final
 		  if (!xcoff_create_ldrel (output_bfd, flinfo,
 					   o->output_section, input_bfd,
 					   irel, sec, h))
-		    return FALSE;
+		    goto err_out;
 		}
 	    }
 
@@ -4983,7 +6047,7 @@ xcoff_link_input_bfd (struct xcoff_final
       if (! bfd_set_section_contents (output_bfd, o->output_section,
 				      contents, (file_ptr) o->output_offset,
 				      o->size))
-	return FALSE;
+	goto err_out;
     }
 
   obj_coff_keep_syms (input_bfd) = keep_syms;
@@ -4991,10 +6055,14 @@ xcoff_link_input_bfd (struct xcoff_final
   if (! flinfo->info->keep_memory)
     {
       if (! _bfd_coff_free_symbols (input_bfd))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
+
+ err_out:
+  obj_coff_keep_syms (input_bfd) = keep_syms;
+  return false;
 }
 
 #undef N_TMASK
@@ -5018,7 +6086,7 @@ xcoff_sort_relocs (const void * p1, cons
 
 /* Return true if section SEC is a TOC section.  */
 
-static inline bfd_boolean
+static inline bool
 xcoff_toc_section_p (asection *sec)
 {
   const char *name;
@@ -5029,21 +6097,21 @@ xcoff_toc_section_p (asection *sec)
       if (name[2] == 'c')
 	{
 	  if (name[3] == '0' && name[4] == 0)
-	    return TRUE;
+	    return true;
 	  if (name[3] == 0)
-	    return TRUE;
+	    return true;
 	}
       if (name[2] == 'd' && name[3] == 0)
-	return TRUE;
+	return true;
     }
-  return FALSE;
+  return false;
 }
 
 /* See if the link requires a TOC (it usually does!).  If so, find a
    good place to put the TOC anchor csect, and write out the associated
    symbol.  */
 
-static bfd_boolean
+static bool
 xcoff_find_tc0 (bfd *output_bfd, struct xcoff_final_link_info *flinfo)
 {
   bfd_vma toc_start, toc_end, start, end, best_address;
@@ -5064,7 +6132,7 @@ xcoff_find_tc0 (bfd *output_bfd, struct
        input_bfd != NULL;
        input_bfd = input_bfd->link.next)
     for (sec = input_bfd->sections; sec != NULL; sec = sec->next)
-      if ((sec->flags & SEC_MARK) != 0 && xcoff_toc_section_p (sec))
+      if (sec->gc_mark != 0 && xcoff_toc_section_p (sec))
 	{
 	  start = sec->output_section->vma + sec->output_offset;
 	  if (toc_start > start)
@@ -5082,7 +6150,7 @@ xcoff_find_tc0 (bfd *output_bfd, struct
   if (toc_end < toc_start)
     {
       xcoff_data (output_bfd)->toc = toc_start;
-      return TRUE;
+      return true;
     }
 
   if (toc_end - toc_start < 0x8000)
@@ -5096,7 +6164,7 @@ xcoff_find_tc0 (bfd *output_bfd, struct
 	   input_bfd != NULL;
 	   input_bfd = input_bfd->link.next)
 	for (sec = input_bfd->sections; sec != NULL; sec = sec->next)
-	  if ((sec->flags & SEC_MARK) != 0 && xcoff_toc_section_p (sec))
+	  if (sec->gc_mark != 0 && xcoff_toc_section_p (sec))
 	    {
 	      start = sec->output_section->vma + sec->output_offset;
 	      if (start < best_address
@@ -5115,7 +6183,7 @@ xcoff_find_tc0 (bfd *output_bfd, struct
 	       "when compiling"),
 	     (uint64_t) (toc_end - toc_start));
 	  bfd_set_error (bfd_error_file_too_big);
-	  return FALSE;
+	  return false;
 	}
     }
 
@@ -5127,7 +6195,7 @@ xcoff_find_tc0 (bfd *output_bfd, struct
   /* Fill out the TC0 symbol.  */
   if (!bfd_xcoff_put_symbol_name (output_bfd, flinfo->info, flinfo->strtab,
 				  &irsym, "TOC"))
-    return FALSE;
+    return false;
   irsym.n_value = best_address;
   irsym.n_scnum = section_index;
   irsym.n_sclass = C_HIDEXT;
@@ -5135,11 +6203,11 @@ xcoff_find_tc0 (bfd *output_bfd, struct
   irsym.n_numaux = 1;
   bfd_coff_swap_sym_out (output_bfd, &irsym, flinfo->outsyms);
 
-  /* Fill out the auxillary csect information.  */
+  /* Fill out the auxiliary csect information.  */
   memset (&iraux, 0, sizeof iraux);
   iraux.x_csect.x_smtyp = XTY_SD;
   iraux.x_csect.x_smclas = XMC_TC0;
-  iraux.x_csect.x_scnlen.l = 0;
+  iraux.x_csect.x_scnlen.u64 = 0;
   bfd_coff_swap_aux_out (output_bfd, &iraux, T_NULL, C_HIDEXT, 0, 1,
 			 flinfo->outsyms + bfd_coff_symesz (output_bfd));
 
@@ -5148,16 +6216,16 @@ xcoff_find_tc0 (bfd *output_bfd, struct
   pos += obj_raw_syment_count (output_bfd) * bfd_coff_symesz (output_bfd);
   size = 2 * bfd_coff_symesz (output_bfd);
   if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-      || bfd_bwrite (flinfo->outsyms, size, output_bfd) != size)
-    return FALSE;
+      || bfd_write (flinfo->outsyms, size, output_bfd) != size)
+    return false;
   obj_raw_syment_count (output_bfd) += 2;
 
-  return TRUE;
+  return true;
 }
 
 /* Write out a non-XCOFF global symbol.  */
 
-static bfd_boolean
+static bool
 xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf)
 {
   struct xcoff_link_hash_entry *h = (struct xcoff_link_hash_entry *) bh;
@@ -5166,7 +6234,7 @@ xcoff_write_global_symbol (struct bfd_ha
   bfd_byte *outsym;
   struct internal_syment isym;
   union internal_auxent aux;
-  bfd_boolean result;
+  bool result;
   file_ptr pos;
   bfd_size_type amt;
 
@@ -5177,13 +6245,13 @@ xcoff_write_global_symbol (struct bfd_ha
     {
       h = (struct xcoff_link_hash_entry *) h->root.u.i.link;
       if (h->root.type == bfd_link_hash_new)
-	return TRUE;
+	return true;
     }
 
   /* If this symbol was garbage collected, just skip it.  */
   if (xcoff_hash_table (flinfo->info)->gc
       && (h->flags & XCOFF_MARK) == 0)
-    return TRUE;
+    return true;
 
   /* If we need a .loader section entry, write it out.  */
   if (h->ldsym != NULL)
@@ -5350,14 +6418,12 @@ xcoff_write_global_symbol (struct bfd_ha
 	  irel->r_symndx = obj_raw_syment_count (output_bfd);
 	}
 
-      BFD_ASSERT (h->ldindx >= 0);
-
       /* Initialize the aux union here instead of closer to when it is
 	 written out below because the length of the csect depends on
 	 whether the output is 32 or 64 bit.  */
       memset (&iraux, 0, sizeof iraux);
       iraux.x_csect.x_smtyp = XTY_SD;
-      /* iraux.x_csect.x_scnlen.l = 4 or 8, see below.  */
+      /* iraux.x_csect.x_scnlen.u64 = 4 or 8, see below.  */
       iraux.x_csect.x_smclas = XMC_TC;
 
       /* 32 bit uses a 32 bit R_POS to do the relocations
@@ -5369,23 +6435,57 @@ xcoff_write_global_symbol (struct bfd_ha
       if (bfd_xcoff_is_xcoff64 (output_bfd))
 	{
 	  irel->r_size = 63;
-	  iraux.x_csect.x_scnlen.l = 8;
+	  iraux.x_csect.x_scnlen.u64 = 8;
 	}
       else if (bfd_xcoff_is_xcoff32 (output_bfd))
 	{
 	  irel->r_size = 31;
-	  iraux.x_csect.x_scnlen.l = 4;
+	  iraux.x_csect.x_scnlen.u64 = 4;
 	}
       else
-	return FALSE;
+	return false;
 
       irel->r_type = R_POS;
       flinfo->section_info[oindx].rel_hashes[osec->reloc_count] = NULL;
       ++osec->reloc_count;
 
-      if (!xcoff_create_ldrel (output_bfd, flinfo, osec,
-			       output_bfd, irel, NULL, h))
-	return FALSE;
+      /* There are two kind of linker-created TOC entry.
+	 The ones importing their symbols from outside, made for the
+	 global linkage.  These symbols have XCOFF_LDREL set and only
+	 requires a loader relocation on their imported symbol.
+	 On the other hand, symbols without XCOFF_LDREL are TOC entries
+	 of internal symbols (like function descriptors made for stubs).
+	 These symbols needs a loader relocation over .data and this
+	 relocation must be applied.  */
+
+      if ((h->flags & XCOFF_LDREL) != 0
+	  && h->ldindx >= 0)
+	{
+	  if (!xcoff_create_ldrel (output_bfd, flinfo, osec,
+				   output_bfd, irel, NULL, h))
+	    return false;
+	}
+      else
+	{
+	  bfd_byte *p;
+	  bfd_vma val;
+
+	  p = tocsec->contents + h->u.toc_offset;
+	  val = (h->root.u.def.value
+		 + h->root.u.def.section->output_section->vma
+		 + h->root.u.def.section->output_offset);
+
+	  if (bfd_xcoff_is_xcoff64 (output_bfd))
+	    bfd_put_64 (output_bfd, val, p);
+	  else if (bfd_xcoff_is_xcoff32 (output_bfd))
+	    bfd_put_32 (output_bfd, val, p);
+	  else
+	    return false;
+
+	  if (!xcoff_create_ldrel (output_bfd, flinfo, osec,
+				   output_bfd, irel, h->root.u.def.section, h))
+	    return false;
+	}
 
       /* We need to emit a symbol to define a csect which holds
 	 the reloc.  */
@@ -5395,7 +6495,7 @@ xcoff_write_global_symbol (struct bfd_ha
 					      flinfo->strtab,
 					      &irsym, h->root.root.string);
 	  if (!result)
-	    return FALSE;
+	    return false;
 
 	  irsym.n_value = irel->r_vaddr;
 	  irsym.n_scnum = osec->target_index;
@@ -5420,8 +6520,8 @@ xcoff_write_global_symbol (struct bfd_ha
 		      * bfd_coff_symesz (output_bfd));
 	      amt = outsym - flinfo->outsyms;
 	      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-		  || bfd_bwrite (flinfo->outsyms, amt, output_bfd) != amt)
-		return FALSE;
+		  || bfd_write (flinfo->outsyms, amt, output_bfd) != amt)
+		return false;
 	      obj_raw_syment_count (output_bfd) +=
 		(outsym - flinfo->outsyms) / bfd_coff_symesz (output_bfd);
 
@@ -5466,7 +6566,7 @@ xcoff_write_global_symbol (struct bfd_ha
 	  byte_size = 4;
 	}
       else
-	return FALSE;
+	return false;
 
       sec = h->root.u.def.section;
       osec = sec->output_section;
@@ -5491,7 +6591,7 @@ xcoff_write_global_symbol (struct bfd_ha
 
       if (!xcoff_create_ldrel (output_bfd, flinfo, osec,
 			       output_bfd, irel, esec, NULL))
-	return FALSE;
+	return false;
 
       /* There are three items to write out,
 	 the address of the code
@@ -5536,30 +6636,30 @@ xcoff_write_global_symbol (struct bfd_ha
 
       if (!xcoff_create_ldrel (output_bfd, flinfo, osec,
 			       output_bfd, irel, tsec, NULL))
-	return FALSE;
+	return false;
     }
 
   if (h->indx >= 0 || flinfo->info->strip == strip_all)
     {
       BFD_ASSERT (outsym == flinfo->outsyms);
-      return TRUE;
+      return true;
     }
 
   if (h->indx != -2
       && (flinfo->info->strip == strip_all
 	  || (flinfo->info->strip == strip_some
 	      && bfd_hash_lookup (flinfo->info->keep_hash, h->root.root.string,
-				  FALSE, FALSE) == NULL)))
+				  false, false) == NULL)))
     {
       BFD_ASSERT (outsym == flinfo->outsyms);
-      return TRUE;
+      return true;
     }
 
   if (h->indx != -2
       && (h->flags & (XCOFF_REF_REGULAR | XCOFF_DEF_REGULAR)) == 0)
     {
       BFD_ASSERT (outsym == flinfo->outsyms);
-      return TRUE;
+      return true;
     }
 
   memset (&aux, 0, sizeof aux);
@@ -5569,7 +6669,7 @@ xcoff_write_global_symbol (struct bfd_ha
   result = bfd_xcoff_put_symbol_name (output_bfd, flinfo->info, flinfo->strtab,
 				      &isym, h->root.root.string);
   if (!result)
-    return FALSE;
+    return false;
 
   if (h->root.type == bfd_link_hash_undefined
       || h->root.type == bfd_link_hash_undefweak)
@@ -5612,7 +6712,12 @@ xcoff_write_global_symbol (struct bfd_ha
       isym.n_sclass = C_HIDEXT;
       aux.x_csect.x_smtyp = XTY_SD;
 
-      if ((h->flags & XCOFF_HAS_SIZE) != 0)
+      /* For stub symbols, the section already has its correct size.  */
+      if (h->root.u.def.section->owner == xcoff_hash_table (flinfo->info)->params->stub_bfd)
+	{
+	  aux.x_csect.x_scnlen.u64 = h->root.u.def.section->size;
+	}
+      else if ((h->flags & XCOFF_HAS_SIZE) != 0)
 	{
 	  for (l = xcoff_hash_table (flinfo->info)->size_list;
 	       l != NULL;
@@ -5620,7 +6725,7 @@ xcoff_write_global_symbol (struct bfd_ha
 	    {
 	      if (l->h == h)
 		{
-		  aux.x_csect.x_scnlen.l = l->size;
+		  aux.x_csect.x_scnlen.u64 = l->size;
 		  break;
 		}
 	    }
@@ -5633,7 +6738,7 @@ xcoff_write_global_symbol (struct bfd_ha
       isym.n_scnum = h->root.u.c.p->section->output_section->target_index;
       isym.n_sclass = C_EXT;
       aux.x_csect.x_smtyp = XTY_CM;
-      aux.x_csect.x_scnlen.l = h->root.u.c.size;
+      aux.x_csect.x_scnlen.u64 = h->root.u.c.size;
     }
   else
     abort ();
@@ -5665,7 +6770,7 @@ xcoff_write_global_symbol (struct bfd_ha
       outsym += bfd_coff_symesz (output_bfd);
 
       aux.x_csect.x_smtyp = XTY_LD;
-      aux.x_csect.x_scnlen.l = obj_raw_syment_count (output_bfd);
+      aux.x_csect.x_scnlen.u64 = obj_raw_syment_count (output_bfd);
       bfd_coff_swap_aux_out (output_bfd, (void *) &aux, T_NULL, C_EXT, 0, 1,
 			     (void *) outsym);
       outsym += bfd_coff_auxesz (output_bfd);
@@ -5675,17 +6780,17 @@ xcoff_write_global_symbol (struct bfd_ha
   pos += obj_raw_syment_count (output_bfd) * bfd_coff_symesz (output_bfd);
   amt = outsym - flinfo->outsyms;
   if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-      || bfd_bwrite (flinfo->outsyms, amt, output_bfd) != amt)
-    return FALSE;
+      || bfd_write (flinfo->outsyms, amt, output_bfd) != amt)
+    return false;
   obj_raw_syment_count (output_bfd) +=
     (outsym - flinfo->outsyms) / bfd_coff_symesz (output_bfd);
 
-  return TRUE;
+  return true;
 }
 
 /* Handle a link order which is supposed to generate a reloc.  */
 
-static bfd_boolean
+static bool
 xcoff_reloc_link_order (bfd *output_bfd,
 			struct xcoff_final_link_info *flinfo,
 			asection *output_section,
@@ -5710,18 +6815,18 @@ xcoff_reloc_link_order (bfd *output_bfd,
   if (howto == NULL)
     {
       bfd_set_error (bfd_error_bad_value);
-      return FALSE;
+      return false;
     }
 
   h = ((struct xcoff_link_hash_entry *)
        bfd_wrapped_link_hash_lookup (output_bfd, flinfo->info,
 				     link_order->u.reloc.p->u.name,
-				     FALSE, FALSE, TRUE));
+				     false, false, true));
   if (h == NULL)
     {
       (*flinfo->info->callbacks->unattached_reloc)
 	(flinfo->info, link_order->u.reloc.p->u.name, NULL, NULL, (bfd_vma) 0);
-      return TRUE;
+      return true;
     }
 
   hsec = xcoff_symbol_section (h);
@@ -5742,12 +6847,12 @@ xcoff_reloc_link_order (bfd *output_bfd,
       bfd_size_type size;
       bfd_byte *buf;
       bfd_reloc_status_type rstat;
-      bfd_boolean ok;
+      bool ok;
 
       size = bfd_get_reloc_size (howto);
       buf = bfd_zmalloc (size);
       if (buf == NULL && size != 0)
-	return FALSE;
+	return false;
 
       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
       switch (rstat)
@@ -5767,7 +6872,7 @@ xcoff_reloc_link_order (bfd *output_bfd,
 				     (file_ptr) link_order->offset, size);
       free (buf);
       if (! ok)
-	return FALSE;
+	return false;
     }
 
   /* Store the reloc information in the right place.  It will get
@@ -5804,15 +6909,15 @@ xcoff_reloc_link_order (bfd *output_bfd,
     {
       if (!xcoff_create_ldrel (output_bfd, flinfo, output_section,
 			       output_bfd, irel, hsec, h))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Do the final link step.  */
 
-bfd_boolean
+bool
 _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   bfd_size_type symesz;
@@ -5894,7 +6999,7 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 		 link.  This will normally be every section.  We need
 		 to do this so that we can identify any sections which
 		 the linker has decided to not include.  */
-	      sec->linker_mark = TRUE;
+	      sec->linker_mark = true;
 
 	      o->reloc_count += sec->reloc_count;
 
@@ -5933,23 +7038,23 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
       file_align = xcoff_hash_table (info)->file_align;
       if (file_align != 0)
 	{
-	  bfd_boolean saw_contents;
+	  bool saw_contents;
 	  int indx;
 	  file_ptr sofar;
 
 	  /* Insert .pad sections before every section which has
 	     contents and is loaded, if it is preceded by some other
 	     section which has contents and is loaded.  */
-	  saw_contents = TRUE;
+	  saw_contents = true;
 	  for (o = abfd->sections; o != NULL; o = o->next)
 	    {
 	      if (strcmp (o->name, ".pad") == 0)
-		saw_contents = FALSE;
+		saw_contents = false;
 	      else if ((o->flags & SEC_HAS_CONTENTS) != 0
 		       && (o->flags & SEC_LOAD) != 0)
 		{
 		  if (! saw_contents)
-		    saw_contents = TRUE;
+		    saw_contents = true;
 		  else
 		    {
 		      asection *n;
@@ -5964,13 +7069,15 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 
 		      bfd_section_list_remove (abfd, n);
 		      bfd_section_list_insert_before (abfd, o, n);
-		      saw_contents = FALSE;
+		      saw_contents = false;
 		    }
 		}
 	    }
 
 	  /* Reset the section indices after inserting the new
 	     sections.  */
+	  if (xcoff_data (abfd)->coff.section_by_target_index)
+	    htab_empty (xcoff_data (abfd)->coff.section_by_target_index);
 	  indx = 0;
 	  for (o = abfd->sections; o != NULL; o = o->next)
 	    {
@@ -6125,7 +7232,7 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
     {
       bfd_size_type sz;
 
-      sub->output_has_begun = FALSE;
+      sub->output_has_begun = false;
       sz = obj_raw_syment_count (sub);
       if (sz > max_sym_count)
 	max_sym_count = sz;
@@ -6179,9 +7286,21 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 	      sub = p->u.indirect.section->owner;
 	      if (! sub->output_has_begun)
 		{
-		  if (! xcoff_link_input_bfd (&flinfo, sub))
-		    goto error_return;
-		  sub->output_has_begun = TRUE;
+		  if (sub == xcoff_hash_table (info)->params->stub_bfd)
+		    {
+		      continue;
+		    }
+		  else
+		    {
+		      if (! xcoff_link_input_bfd (&flinfo, sub))
+			{
+			  _bfd_error_handler
+			    (_("Unable to link input file: %s"), sub->filename);
+			  bfd_set_error (bfd_error_sorry);
+			  goto error_return;
+			}
+		    }
+		  sub->output_has_begun = true;
 		}
 	    }
 	  else if (p->type == bfd_section_reloc_link_order
@@ -6199,31 +7318,16 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
     }
 
   /* Free up the buffers used by xcoff_link_input_bfd.  */
-  if (flinfo.internal_syms != NULL)
-    {
-      free (flinfo.internal_syms);
-      flinfo.internal_syms = NULL;
-    }
-  if (flinfo.sym_indices != NULL)
-    {
-      free (flinfo.sym_indices);
-      flinfo.sym_indices = NULL;
-    }
-  if (flinfo.linenos != NULL)
-    {
-      free (flinfo.linenos);
-      flinfo.linenos = NULL;
-    }
-  if (flinfo.contents != NULL)
-    {
-      free (flinfo.contents);
-      flinfo.contents = NULL;
-    }
-  if (flinfo.external_relocs != NULL)
-    {
-      free (flinfo.external_relocs);
-      flinfo.external_relocs = NULL;
-    }
+  free (flinfo.internal_syms);
+  flinfo.internal_syms = NULL;
+  free (flinfo.sym_indices);
+  flinfo.sym_indices = NULL;
+  free (flinfo.linenos);
+  flinfo.linenos = NULL;
+  free (flinfo.contents);
+  flinfo.contents = NULL;
+  free (flinfo.external_relocs);
+  flinfo.external_relocs = NULL;
 
   /* The value of the last C_FILE symbol is supposed to be -1.  Write
      it out again.  */
@@ -6234,7 +7338,7 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 			     (void *) flinfo.outsyms);
       pos = obj_sym_filepos (abfd) + flinfo.last_file_index * symesz;
       if (bfd_seek (abfd, pos, SEEK_SET) != 0
-	  || bfd_bwrite (flinfo.outsyms, symesz, abfd) != symesz)
+	  || bfd_write (flinfo.outsyms, symesz, abfd) != symesz)
 	goto error_return;
     }
 
@@ -6242,11 +7346,14 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
      input files.  */
   bfd_hash_traverse (&info->hash->table, xcoff_write_global_symbol, &flinfo);
 
-  if (flinfo.outsyms != NULL)
-    {
-      free (flinfo.outsyms);
-      flinfo.outsyms = NULL;
-    }
+  /* Write out the relocations created by stub entries. The symbols
+     will have been already written by xcoff_write_global_symbol.  */
+  bfd_hash_traverse (&xcoff_hash_table(info)->stub_hash_table,
+		     xcoff_stub_create_relocations,
+		     &flinfo);
+
+  free (flinfo.outsyms);
+  flinfo.outsyms = NULL;
 
   /* Now that we have written out all the global symbols, we know the
      symbol indices to use for relocs against them, and we can finally
@@ -6324,15 +7431,12 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 
       rel_size = relsz * o->reloc_count;
       if (bfd_seek (abfd, o->rel_filepos, SEEK_SET) != 0
-	  || bfd_bwrite ((void *) external_relocs, rel_size, abfd) != rel_size)
+	  || bfd_write (external_relocs, rel_size, abfd) != rel_size)
 	goto error_return;
     }
 
-  if (external_relocs != NULL)
-    {
-      free (external_relocs);
-      external_relocs = NULL;
-    }
+  free (external_relocs);
+  external_relocs = NULL;
 
   /* Free up the section information.  */
   if (flinfo.section_info != NULL)
@@ -6341,18 +7445,31 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 
       for (i = 0; i < abfd->section_count; i++)
 	{
-	  if (flinfo.section_info[i].relocs != NULL)
-	    free (flinfo.section_info[i].relocs);
-	  if (flinfo.section_info[i].rel_hashes != NULL)
-	    free (flinfo.section_info[i].rel_hashes);
+	  free (flinfo.section_info[i].relocs);
+	  free (flinfo.section_info[i].rel_hashes);
 	}
       free (flinfo.section_info);
       flinfo.section_info = NULL;
     }
 
+  /* Write out the stub sections.  */
+  for (o = xcoff_hash_table (info)->params->stub_bfd->sections;
+       o != NULL; o = o->next)
+    {
+      if ((o->flags & SEC_HAS_CONTENTS) == 0
+	  || o->size == 0)
+	continue;
+
+      if (!bfd_set_section_contents (abfd, o->output_section, o->contents,
+				     (file_ptr) o->output_offset, o->size))
+	goto error_return;
+    }
+
   /* Write out the loader section contents.  */
   o = xcoff_hash_table (info)->loader_section;
-  if (o)
+  if (o != NULL
+      && o->size != 0
+      && o->output_section != bfd_abs_section_ptr)
     {
       BFD_ASSERT ((bfd_byte *) flinfo.ldrel
 		  == (xcoff_hash_table (info)->loader_section->contents
@@ -6364,19 +7481,25 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 
   /* Write out the magic sections.  */
   o = xcoff_hash_table (info)->linkage_section;
-  if (o->size > 0
+  if (o != NULL
+      && o->size != 0
+      && o->output_section != bfd_abs_section_ptr
       && ! bfd_set_section_contents (abfd, o->output_section, o->contents,
 				     (file_ptr) o->output_offset,
 				     o->size))
     goto error_return;
   o = xcoff_hash_table (info)->toc_section;
-  if (o->size > 0
+  if (o != NULL
+      && o->size != 0
+      && o->output_section != bfd_abs_section_ptr
       && ! bfd_set_section_contents (abfd, o->output_section, o->contents,
 				     (file_ptr) o->output_offset,
 				     o->size))
     goto error_return;
   o = xcoff_hash_table (info)->descriptor_section;
-  if (o->size > 0
+  if (o != NULL
+      && o->size != 0
+      && o->output_section != bfd_abs_section_ptr
       && ! bfd_set_section_contents (abfd, o->output_section, o->contents,
 				     (file_ptr) o->output_offset,
 				     o->size))
@@ -6390,7 +7513,7 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 	    _bfd_stringtab_size (flinfo.strtab) + STRING_SIZE_SIZE,
 	    strbuf);
   amt = STRING_SIZE_SIZE;
-  if (bfd_bwrite (strbuf, amt, abfd) != amt)
+  if (bfd_write (strbuf, amt, abfd) != amt)
     goto error_return;
   if (! _bfd_stringtab_emit (abfd, flinfo.strtab))
     goto error_return;
@@ -6399,7 +7522,9 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 
   /* Write out the debugging string table.  */
   o = xcoff_hash_table (info)->debug_section;
-  if (o != NULL)
+  if (o != NULL
+      && o->size != 0
+      && o->output_section != bfd_abs_section_ptr)
     {
       struct bfd_strtab_hash *debug_strtab;
 
@@ -6417,7 +7542,7 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
      not try to write out the symbols.  */
   abfd->symcount = 0;
 
-  return TRUE;
+  return true;
 
  error_return:
   if (flinfo.strtab != NULL)
@@ -6429,27 +7554,18 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 
       for (i = 0; i < abfd->section_count; i++)
 	{
-	  if (flinfo.section_info[i].relocs != NULL)
-	    free (flinfo.section_info[i].relocs);
-	  if (flinfo.section_info[i].rel_hashes != NULL)
-	    free (flinfo.section_info[i].rel_hashes);
+	  free (flinfo.section_info[i].relocs);
+	  free (flinfo.section_info[i].rel_hashes);
 	}
       free (flinfo.section_info);
     }
 
-  if (flinfo.internal_syms != NULL)
-    free (flinfo.internal_syms);
-  if (flinfo.sym_indices != NULL)
-    free (flinfo.sym_indices);
-  if (flinfo.outsyms != NULL)
-    free (flinfo.outsyms);
-  if (flinfo.linenos != NULL)
-    free (flinfo.linenos);
-  if (flinfo.contents != NULL)
-    free (flinfo.contents);
-  if (flinfo.external_relocs != NULL)
-    free (flinfo.external_relocs);
-  if (external_relocs != NULL)
-    free (external_relocs);
-  return FALSE;
+  free (flinfo.internal_syms);
+  free (flinfo.sym_indices);
+  free (flinfo.outsyms);
+  free (flinfo.linenos);
+  free (flinfo.contents);
+  free (flinfo.external_relocs);
+  free (external_relocs);
+  return false;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xcofflink.h ./bfd/xcofflink.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xcofflink.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/xcofflink.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* POWER/PowerPC XCOFF linker support.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,24 +18,43 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-extern bfd_boolean bfd_xcoff_split_import_path
+/* Used to pass info between ld and bfd.  */
+struct bfd_xcoff_link_params
+{
+  /* Linker stub bfd.  */
+  bfd *stub_bfd;
+
+  /* Linker call-backs.  */
+  asection * (*add_stub_section) (const char *, asection *);
+  void (*layout_sections_again) (void);
+};
+
+extern bool bfd_xcoff_split_import_path
   (bfd *, const char *, const char **, const char **);
-extern bfd_boolean bfd_xcoff_set_archive_import_path
+extern bool bfd_xcoff_set_archive_import_path
   (struct bfd_link_info *, bfd *, const char *);
-extern bfd_boolean bfd_xcoff_link_record_set
+extern bool bfd_xcoff_link_record_set
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type);
-extern bfd_boolean bfd_xcoff_import_symbol
+extern bool bfd_xcoff_import_symbol
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_vma,
    const char *, const char *, const char *, unsigned int);
-extern bfd_boolean bfd_xcoff_export_symbol
+extern bool bfd_xcoff_export_symbol
   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
-extern bfd_boolean bfd_xcoff_link_count_reloc
+extern bool bfd_xcoff_link_count_reloc
   (bfd *, struct bfd_link_info *, const char *);
-extern bfd_boolean bfd_xcoff_record_link_assignment
+extern bool bfd_xcoff_record_link_assignment
   (bfd *, struct bfd_link_info *, const char *);
-extern bfd_boolean bfd_xcoff_size_dynamic_sections
+extern bool bfd_xcoff_size_dynamic_sections
   (bfd *, struct bfd_link_info *, const char *, const char *,
-   unsigned long, unsigned long, unsigned long, bfd_boolean,
-   int, bfd_boolean, unsigned int, struct bfd_section **, bfd_boolean);
-extern bfd_boolean bfd_xcoff_link_generate_rtinit
-  (bfd *, const char *, const char *, bfd_boolean);
+   unsigned long, unsigned long, unsigned long, bool,
+   int, bool, unsigned int, struct bfd_section **, bool);
+extern bool bfd_xcoff_build_dynamic_sections
+  (bfd *, struct bfd_link_info *);
+extern bool bfd_xcoff_link_generate_rtinit
+  (bfd *, const char *, const char *, bool);
+extern bool bfd_xcoff_link_init
+  (struct bfd_link_info *, struct bfd_xcoff_link_params *);
+extern bool bfd_xcoff_size_stubs
+  (struct bfd_link_info *info);
+extern bool bfd_xcoff_build_stubs
+  (struct bfd_link_info *info);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xsym.c ./bfd/xsym.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xsym.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/xsym.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* xSYM symbol-file support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -21,7 +21,6 @@
 /* xSYM is the debugging format used by CodeWarrior on Mac OS classic.  */
 
 #include "sysdep.h"
-#include "alloca-conf.h"
 #include "xsym.h"
 #include "bfd.h"
 #include "libbfd.h"
@@ -33,6 +32,7 @@
 #define bfd_sym_bfd_is_target_special_symbol	    _bfd_bool_bfd_asymbol_false
 #define bfd_sym_get_lineno			    _bfd_nosymbols_get_lineno
 #define bfd_sym_find_nearest_line		    _bfd_nosymbols_find_nearest_line
+#define bfd_sym_find_nearest_line_with_alt	    _bfd_nosymbols_find_nearest_line_with_alt
 #define bfd_sym_find_line			    _bfd_nosymbols_find_line
 #define bfd_sym_find_inliner_info		    _bfd_nosymbols_find_inliner_info
 #define bfd_sym_get_symbol_version_string	    _bfd_nosymbols_get_symbol_version_string
@@ -100,7 +100,7 @@ compute_offset (unsigned long first_page
   return (page_number * page_size) + page_offset;
 }
 
-bfd_boolean
+bool
 bfd_sym_mkobject (bfd *abfd ATTRIBUTE_UNUSED)
 {
   return 1;
@@ -115,7 +115,7 @@ bfd_sym_print_symbol (bfd *abfd ATTRIBUT
   return;
 }
 
-bfd_boolean
+bool
 bfd_sym_valid (bfd *abfd)
 {
   if (abfd == NULL || abfd->xvec == NULL)
@@ -127,24 +127,12 @@ bfd_sym_valid (bfd *abfd)
 unsigned char *
 bfd_sym_read_name_table (bfd *abfd, bfd_sym_header_block *dshb)
 {
-  unsigned char *rstr;
-  long ret;
   size_t table_size = dshb->dshb_nte.dti_page_count * dshb->dshb_page_size;
   size_t table_offset = dshb->dshb_nte.dti_first_page * dshb->dshb_page_size;
 
-  rstr = bfd_alloc (abfd, table_size);
-  if (rstr == NULL)
-    return rstr;
-
-  bfd_seek (abfd, table_offset, SEEK_SET);
-  ret = bfd_bread (rstr, table_size, abfd);
-  if (ret < 0 || (unsigned long) ret != table_size)
-    {
-      bfd_release (abfd, rstr);
-      return NULL;
-    }
-
-  return rstr;
+  if (bfd_seek (abfd, table_offset, SEEK_SET) != 0)
+    return false;
+  return _bfd_alloc_and_read (abfd, table_size, table_size);
 }
 
 void
@@ -207,7 +195,7 @@ bfd_sym_read_header_v32 (bfd *abfd, bfd_
   unsigned char buf[154];
   long ret;
 
-  ret = bfd_bread (buf, 154, abfd);
+  ret = bfd_read (buf, 154, abfd);
   if (ret != 154)
     return -1;
 
@@ -248,7 +236,7 @@ bfd_sym_read_version (bfd *abfd, bfd_sym
   char version_string[32];
   long ret;
 
-  ret = bfd_bread (version_string, sizeof (version_string), abfd);
+  ret = bfd_read (version_string, sizeof (version_string), abfd);
   if (ret != sizeof (version_string))
     return -1;
 
@@ -577,7 +565,7 @@ bfd_sym_fetch_resources_table_entry (bfd
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -628,7 +616,7 @@ bfd_sym_fetch_modules_table_entry (bfd *
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -678,7 +666,7 @@ bfd_sym_fetch_file_references_table_entr
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -728,7 +716,7 @@ bfd_sym_fetch_contained_modules_table_en
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -778,7 +766,7 @@ bfd_sym_fetch_contained_variables_table_
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -828,7 +816,7 @@ bfd_sym_fetch_contained_statements_table
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -878,7 +866,7 @@ bfd_sym_fetch_contained_labels_table_ent
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -928,7 +916,7 @@ bfd_sym_fetch_contained_types_table_entr
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -978,7 +966,7 @@ bfd_sym_fetch_file_references_index_tabl
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -1028,7 +1016,7 @@ bfd_sym_fetch_constant_pool_entry (bfd *
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -1075,7 +1063,7 @@ bfd_sym_fetch_type_table_entry (bfd *abf
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
-  if (bfd_bread (buf, entry_size, abfd) != entry_size)
+  if (bfd_read (buf, entry_size, abfd) != entry_size)
     return -1;
 
   (*parser) (buf, entry_size, entry);
@@ -1098,17 +1086,17 @@ bfd_sym_fetch_type_information_table_ent
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
     return -1;
 
-  if (bfd_bread (buf, 4, abfd) != 4)
+  if (bfd_read (buf, 4, abfd) != 4)
     return -1;
   entry->nte_index = bfd_getb32 (buf);
 
-  if (bfd_bread (buf, 2, abfd) != 2)
+  if (bfd_read (buf, 2, abfd) != 2)
     return -1;
   entry->physical_size = bfd_getb16 (buf);
 
   if (entry->physical_size & 0x8000)
     {
-      if (bfd_bread (buf, 4, abfd) != 4)
+      if (bfd_read (buf, 4, abfd) != 4)
 	return -1;
       entry->physical_size &= 0x7fff;
       entry->logical_size = bfd_getb32 (buf);
@@ -1116,7 +1104,7 @@ bfd_sym_fetch_type_information_table_ent
     }
   else
     {
-      if (bfd_bread (buf, 2, abfd) != 2)
+      if (bfd_read (buf, 2, abfd) != 2)
 	return -1;
       entry->physical_size &= 0x7fff;
       entry->logical_size = bfd_getb16 (buf);
@@ -1808,22 +1796,11 @@ bfd_sym_print_type_information_table_ent
 
   fprintf (f, "\n            ");
 
-  buf = malloc (entry->physical_size);
-  if (buf == NULL)
-    {
-      fprintf (f, "[ERROR]\n");
-      return;
-    }
-  if (bfd_seek (abfd, entry->offset, SEEK_SET) < 0)
-    {
-      fprintf (f, "[ERROR]\n");
-      free (buf);
-      return;
-    }
-  if (bfd_bread (buf, entry->physical_size, abfd) != entry->physical_size)
+  if (bfd_seek (abfd, entry->offset, SEEK_SET) != 0
+      || (buf = _bfd_malloc_and_read (abfd, entry->physical_size,
+				      entry->physical_size)) == NULL)
     {
       fprintf (f, "[ERROR]\n");
-      free (buf);
       return;
     }
 
@@ -2230,8 +2207,8 @@ bfd_sym_scan (bfd *abfd, bfd_sym_version
   mdata->sbfd = abfd;
   mdata->version = version;
 
-  bfd_seek (abfd, 0, SEEK_SET);
-  if (bfd_sym_read_header (abfd, &mdata->header, mdata->version) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_sym_read_header (abfd, &mdata->header, mdata->version) != 0)
     return -1;
 
   mdata->name_table = bfd_sym_read_name_table (abfd, &mdata->header);
@@ -2253,14 +2230,14 @@ bfd_sym_scan (bfd *abfd, bfd_sym_version
   return 0;
 }
 
-const bfd_target *
+bfd_cleanup
 bfd_sym_object_p (bfd *abfd)
 {
   bfd_sym_version version = -1;
   bfd_sym_data_struct *mdata;
 
-  bfd_seek (abfd, 0, SEEK_SET);
-  if (bfd_sym_read_version (abfd, &version) != 0)
+  if (bfd_seek (abfd, 0, SEEK_SET) != 0
+      || bfd_sym_read_version (abfd, &version) != 0)
     goto wrong;
 
   mdata = (bfd_sym_data_struct *) bfd_alloc (abfd, sizeof (*mdata));
@@ -2270,7 +2247,7 @@ bfd_sym_object_p (bfd *abfd)
   if (bfd_sym_scan (abfd, version, mdata) != 0)
     goto wrong;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  wrong:
   bfd_set_error (bfd_error_wrong_format);
@@ -2321,6 +2298,7 @@ const bfd_target sym_vec =
   ' ',				/* AR_pad_char.  */
   16,				/* AR_max_namelen.  */
   0,				/* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* Data.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xsym.h ./bfd/xsym.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xsym.h	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/xsym.h	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* xSYM symbol-file support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -546,11 +546,11 @@ struct bfd_sym_data_struct
 };
 typedef struct bfd_sym_data_struct bfd_sym_data_struct;
 
-extern bfd_boolean bfd_sym_mkobject
+extern bool bfd_sym_mkobject
   (bfd *);
 extern void bfd_sym_print_symbol
   (bfd *, void *, asymbol *, bfd_print_symbol_type);
-extern bfd_boolean bfd_sym_valid
+extern bool bfd_sym_valid
   (bfd *);
 extern unsigned char * bfd_sym_read_name_table
   (bfd *, bfd_sym_header_block *);
@@ -686,7 +686,7 @@ extern void bfd_sym_display_type_informa
   (bfd *, FILE *);
 extern int bfd_sym_scan
   (bfd *, bfd_sym_version, bfd_sym_data_struct *);
-extern const bfd_target * bfd_sym_object_p
+extern bfd_cleanup bfd_sym_object_p
   (bfd *);
 extern void bfd_sym_get_symbol_info
   (bfd *, asymbol *, symbol_info *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xtensa-dynconfig.c ./bfd/xtensa-dynconfig.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xtensa-dynconfig.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/xtensa-dynconfig.c	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,147 @@
+/* Xtensa configuration settings loader.
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   GCC is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 3, or (at your option) any later
+   version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+#define XTENSA_CONFIG_DEFINITION
+#include "xtensa-config.h"
+#include "xtensa-dynconfig.h"
+
+#if defined (HAVE_DLFCN_H)
+#include <dlfcn.h>
+#elif defined (HAVE_WINDOWS_H)
+#include <windows.h>
+#endif
+
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
+
+#define RTLD_LAZY 0      /* Dummy value.  */
+
+static void *
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
+{
+  return LoadLibrary (file);
+}
+
+static void *
+dlsym (void *handle, const char *name)
+{
+  return (void *) GetProcAddress ((HMODULE) handle, name);
+}
+
+static int ATTRIBUTE_UNUSED
+dlclose (void *handle)
+{
+  FreeLibrary ((HMODULE) handle);
+  return 0;
+}
+
+static const char *
+dlerror (void)
+{
+  return _("Unable to load DLL.");
+}
+
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)  */
+
+#define CONFIG_ENV_NAME "XTENSA_GNU_CONFIG"
+
+const void *xtensa_load_config (const char *name ATTRIBUTE_UNUSED,
+				const void *no_plugin_def,
+				const void *no_name_def ATTRIBUTE_UNUSED)
+{
+  static int init;
+#if BFD_SUPPORTS_PLUGINS
+  static void *handle;
+  void *p;
+
+  if (!init)
+    {
+      const char *path = getenv (CONFIG_ENV_NAME);
+
+      init = 1;
+      if (!path)
+	return no_plugin_def;
+      handle = dlopen (path, RTLD_LAZY);
+      if (!handle)
+	{
+	  _bfd_error_handler (_("%s is defined but could not be loaded: %s"),
+			      CONFIG_ENV_NAME, dlerror ());
+	  abort ();
+	}
+    }
+  else if (!handle)
+    {
+      return no_plugin_def;
+    }
+
+  p = dlsym (handle, name);
+  if (!p)
+    {
+      if (no_name_def)
+	return no_name_def;
+
+      _bfd_error_handler (_("%s is loaded but symbol \"%s\" is not found: %s"),
+			  CONFIG_ENV_NAME, name, dlerror ());
+      abort ();
+    }
+  return p;
+#else
+  if (!init)
+    {
+      const char *path = getenv (CONFIG_ENV_NAME);
+
+      init = 1;
+      if (path)
+	{
+	  _bfd_error_handler (_("%s is defined but plugin support is disabled"),
+			      CONFIG_ENV_NAME);
+	  abort ();
+	}
+    }
+  return no_plugin_def;
+#endif
+}
+
+XTENSA_CONFIG_INSTANCE_LIST;
+
+const struct xtensa_config_v1 *xtensa_get_config_v1 (void)
+{
+  static const struct xtensa_config_v1 *config;
+
+  if (!config)
+    config = (const struct xtensa_config_v1 *) xtensa_load_config ("xtensa_config_v1",
+								   &xtensa_config_v1,
+								   NULL);
+  return config;
+}
+
+const struct xtensa_config_v2 *xtensa_get_config_v2 (void)
+{
+  static const struct xtensa_config_v2 *config;
+  static const struct xtensa_config_v2 def;
+
+  if (!config)
+    config = (const struct xtensa_config_v2 *) xtensa_load_config ("xtensa_config_v2",
+								   &xtensa_config_v2,
+								   &def);
+  return config;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xtensa-isa.c ./bfd/xtensa-isa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xtensa-isa.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/xtensa-isa.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Configurable Xtensa ISA support.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -23,9 +23,10 @@
 #include "libbfd.h"
 #include "xtensa-isa.h"
 #include "xtensa-isa-internal.h"
+#include "xtensa-dynconfig.h"
 
-xtensa_isa_status xtisa_errno;
-char xtisa_error_msg[1024];
+static xtensa_isa_status xtisa_errno;
+static char xtisa_error_msg[1024];
 
 
 xtensa_isa_status
@@ -223,20 +224,30 @@ xtensa_insnbuf_from_chars (xtensa_isa is
       int word_inx = byte_to_word_index (i);
       int bit_inx = byte_to_bit_index (i);
 
-      insn[word_inx] |= (*cp & 0xff) << bit_inx;
+      insn[word_inx] |= (unsigned) (*cp & 0xff) << bit_inx;
     }
 }
 
-
 
 /* ISA information.  */
 
 extern xtensa_isa_internal xtensa_modules;
 
+static xtensa_isa_internal *xtensa_get_modules (void)
+{
+  static xtensa_isa_internal *modules;
+
+  if (!modules)
+    modules = (xtensa_isa_internal *) xtensa_load_config ("xtensa_modules",
+							  &xtensa_modules,
+							  NULL);
+  return modules;
+}
+
 xtensa_isa
 xtensa_isa_init (xtensa_isa_status *errno_p, char **error_msg_p)
 {
-  xtensa_isa_internal *isa = &xtensa_modules;
+  xtensa_isa_internal *isa = xtensa_get_modules ();
   int n, is_user;
 
   /* Set up the opcode name lookup table.  */
@@ -340,43 +351,26 @@ xtensa_isa_free (xtensa_isa isa)
      the memory allocated by xtensa_isa_init and restore the xtensa_isa
      structure to its initial state.  */
 
-  if (intisa->opname_lookup_table)
-    {
-      free (intisa->opname_lookup_table);
-      intisa->opname_lookup_table = 0;
-    }
+  free (intisa->opname_lookup_table);
+  intisa->opname_lookup_table = 0;
 
-  if (intisa->state_lookup_table)
-    {
-      free (intisa->state_lookup_table);
-      intisa->state_lookup_table = 0;
-    }
+  free (intisa->state_lookup_table);
+  intisa->state_lookup_table = 0;
+
+  free (intisa->sysreg_lookup_table);
+  intisa->sysreg_lookup_table = 0;
 
-  if (intisa->sysreg_lookup_table)
-    {
-      free (intisa->sysreg_lookup_table);
-      intisa->sysreg_lookup_table = 0;
-    }
   for (n = 0; n < 2; n++)
     {
-      if (intisa->sysreg_table[n])
-	{
-	  free (intisa->sysreg_table[n]);
-	  intisa->sysreg_table[n] = 0;
-	}
+      free (intisa->sysreg_table[n]);
+      intisa->sysreg_table[n] = 0;
     }
 
-  if (intisa->interface_lookup_table)
-    {
-      free (intisa->interface_lookup_table);
-      intisa->interface_lookup_table = 0;
-    }
+  free (intisa->interface_lookup_table);
+  intisa->interface_lookup_table = 0;
 
-  if (intisa->funcUnit_lookup_table)
-    {
-      free (intisa->funcUnit_lookup_table);
-      intisa->funcUnit_lookup_table = 0;
-    }
+  free (intisa->funcUnit_lookup_table);
+  intisa->funcUnit_lookup_table = 0;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xtensa-modules.c ./bfd/xtensa-modules.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/bfd/xtensa-modules.c	2019-12-11 01:49:17.000000000 +0000
+++ ./bfd/xtensa-modules.c	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 /* Xtensa configuration-specific ISA information.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -12852,2123 +12852,2123 @@ Opcode_bbs_w18_Slot_xt_flix64_slot3_enco
   slotbuf[1] = 0;
 }
 
-xtensa_opcode_encode_fn Opcode_excw_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_excw_encode_fns[] = {
   Opcode_excw_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rfe_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rfe_encode_fns[] = {
   Opcode_rfe_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rfde_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rfde_encode_fns[] = {
   Opcode_rfde_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_syscall_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_syscall_encode_fns[] = {
   Opcode_syscall_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_simcall_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_simcall_encode_fns[] = {
   Opcode_simcall_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_call12_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_call12_encode_fns[] = {
   Opcode_call12_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_call8_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_call8_encode_fns[] = {
   Opcode_call8_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_call4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_call4_encode_fns[] = {
   Opcode_call4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_callx12_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_callx12_encode_fns[] = {
   Opcode_callx12_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_callx8_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_callx8_encode_fns[] = {
   Opcode_callx8_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_callx4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_callx4_encode_fns[] = {
   Opcode_callx4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_entry_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_entry_encode_fns[] = {
   Opcode_entry_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movsp_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movsp_encode_fns[] = {
   Opcode_movsp_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rotw_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rotw_encode_fns[] = {
   Opcode_rotw_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_retw_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_retw_encode_fns[] = {
   Opcode_retw_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_retw_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_retw_n_encode_fns[] = {
   0, 0, Opcode_retw_n_Slot_inst16b_encode, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rfwo_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rfwo_encode_fns[] = {
   Opcode_rfwo_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rfwu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rfwu_encode_fns[] = {
   Opcode_rfwu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_l32e_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_l32e_encode_fns[] = {
   Opcode_l32e_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_s32e_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_s32e_encode_fns[] = {
   Opcode_s32e_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_windowbase_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_windowbase_encode_fns[] = {
   Opcode_rsr_windowbase_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_windowbase_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_windowbase_encode_fns[] = {
   Opcode_wsr_windowbase_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_windowbase_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_windowbase_encode_fns[] = {
   Opcode_xsr_windowbase_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_windowstart_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_windowstart_encode_fns[] = {
   Opcode_rsr_windowstart_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_windowstart_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_windowstart_encode_fns[] = {
   Opcode_wsr_windowstart_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_windowstart_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_windowstart_encode_fns[] = {
   Opcode_xsr_windowstart_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_add_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_add_n_encode_fns[] = {
   0, Opcode_add_n_Slot_inst16a_encode, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_addi_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_addi_n_encode_fns[] = {
   0, Opcode_addi_n_Slot_inst16a_encode, 0, 0, 0, 0, Opcode_addi_n_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_beqz_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_beqz_n_encode_fns[] = {
   0, 0, Opcode_beqz_n_Slot_inst16b_encode, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bnez_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bnez_n_encode_fns[] = {
   0, 0, Opcode_bnez_n_Slot_inst16b_encode, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ill_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ill_n_encode_fns[] = {
   0, 0, Opcode_ill_n_Slot_inst16b_encode, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_l32i_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_l32i_n_encode_fns[] = {
   0, Opcode_l32i_n_Slot_inst16a_encode, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mov_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mov_n_encode_fns[] = {
   0, 0, Opcode_mov_n_Slot_inst16b_encode, Opcode_mov_n_Slot_xt_flix64_slot0_encode, Opcode_mov_n_Slot_xt_flix64_slot0_encode, Opcode_mov_n_Slot_xt_flix64_slot1_encode, Opcode_mov_n_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movi_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movi_n_encode_fns[] = {
   0, 0, Opcode_movi_n_Slot_inst16b_encode, 0, 0, 0, Opcode_movi_n_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_nop_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_nop_n_encode_fns[] = {
   0, 0, Opcode_nop_n_Slot_inst16b_encode, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ret_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ret_n_encode_fns[] = {
   0, 0, Opcode_ret_n_Slot_inst16b_encode, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_s32i_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_s32i_n_encode_fns[] = {
   0, Opcode_s32i_n_Slot_inst16a_encode, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rur_threadptr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rur_threadptr_encode_fns[] = {
   Opcode_rur_threadptr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wur_threadptr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wur_threadptr_encode_fns[] = {
   Opcode_wur_threadptr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_addi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_addi_encode_fns[] = {
   Opcode_addi_Slot_inst_encode, 0, 0, Opcode_addi_Slot_xt_flix64_slot0_encode, Opcode_addi_Slot_xt_flix64_slot0_encode, Opcode_addi_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_addmi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_addmi_encode_fns[] = {
   Opcode_addmi_Slot_inst_encode, 0, 0, Opcode_addmi_Slot_xt_flix64_slot0_encode, Opcode_addmi_Slot_xt_flix64_slot0_encode, Opcode_addmi_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_add_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_add_encode_fns[] = {
   Opcode_add_Slot_inst_encode, 0, 0, Opcode_add_Slot_xt_flix64_slot0_encode, Opcode_add_Slot_xt_flix64_slot0_encode, Opcode_add_Slot_xt_flix64_slot1_encode, Opcode_add_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_sub_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_sub_encode_fns[] = {
   Opcode_sub_Slot_inst_encode, 0, 0, Opcode_sub_Slot_xt_flix64_slot0_encode, Opcode_sub_Slot_xt_flix64_slot0_encode, Opcode_sub_Slot_xt_flix64_slot1_encode, Opcode_sub_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_addx2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_addx2_encode_fns[] = {
   Opcode_addx2_Slot_inst_encode, 0, 0, Opcode_addx2_Slot_xt_flix64_slot0_encode, Opcode_addx2_Slot_xt_flix64_slot0_encode, Opcode_addx2_Slot_xt_flix64_slot1_encode, Opcode_addx2_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_addx4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_addx4_encode_fns[] = {
   Opcode_addx4_Slot_inst_encode, 0, 0, Opcode_addx4_Slot_xt_flix64_slot0_encode, Opcode_addx4_Slot_xt_flix64_slot0_encode, Opcode_addx4_Slot_xt_flix64_slot1_encode, Opcode_addx4_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_addx8_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_addx8_encode_fns[] = {
   Opcode_addx8_Slot_inst_encode, 0, 0, Opcode_addx8_Slot_xt_flix64_slot0_encode, Opcode_addx8_Slot_xt_flix64_slot0_encode, Opcode_addx8_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_subx2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_subx2_encode_fns[] = {
   Opcode_subx2_Slot_inst_encode, 0, 0, Opcode_subx2_Slot_xt_flix64_slot0_encode, Opcode_subx2_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_subx4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_subx4_encode_fns[] = {
   Opcode_subx4_Slot_inst_encode, 0, 0, Opcode_subx4_Slot_xt_flix64_slot0_encode, Opcode_subx4_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_subx8_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_subx8_encode_fns[] = {
   Opcode_subx8_Slot_inst_encode, 0, 0, Opcode_subx8_Slot_xt_flix64_slot0_encode, Opcode_subx8_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_and_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_and_encode_fns[] = {
   Opcode_and_Slot_inst_encode, 0, 0, Opcode_and_Slot_xt_flix64_slot0_encode, Opcode_and_Slot_xt_flix64_slot0_encode, Opcode_and_Slot_xt_flix64_slot1_encode, Opcode_and_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_or_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_or_encode_fns[] = {
   Opcode_or_Slot_inst_encode, 0, 0, Opcode_or_Slot_xt_flix64_slot0_encode, Opcode_or_Slot_xt_flix64_slot0_encode, Opcode_or_Slot_xt_flix64_slot1_encode, Opcode_or_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xor_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xor_encode_fns[] = {
   Opcode_xor_Slot_inst_encode, 0, 0, Opcode_xor_Slot_xt_flix64_slot0_encode, Opcode_xor_Slot_xt_flix64_slot0_encode, Opcode_xor_Slot_xt_flix64_slot1_encode, Opcode_xor_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_beqi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_beqi_encode_fns[] = {
   Opcode_beqi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bnei_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bnei_encode_fns[] = {
   Opcode_bnei_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bgei_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bgei_encode_fns[] = {
   Opcode_bgei_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_blti_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_blti_encode_fns[] = {
   Opcode_blti_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bbci_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bbci_encode_fns[] = {
   Opcode_bbci_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bbsi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bbsi_encode_fns[] = {
   Opcode_bbsi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bgeui_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bgeui_encode_fns[] = {
   Opcode_bgeui_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bltui_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bltui_encode_fns[] = {
   Opcode_bltui_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_beq_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_beq_encode_fns[] = {
   Opcode_beq_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bne_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bne_encode_fns[] = {
   Opcode_bne_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bge_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bge_encode_fns[] = {
   Opcode_bge_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_blt_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_blt_encode_fns[] = {
   Opcode_blt_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bgeu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bgeu_encode_fns[] = {
   Opcode_bgeu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bltu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bltu_encode_fns[] = {
   Opcode_bltu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bany_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bany_encode_fns[] = {
   Opcode_bany_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bnone_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bnone_encode_fns[] = {
   Opcode_bnone_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ball_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ball_encode_fns[] = {
   Opcode_ball_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bnall_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bnall_encode_fns[] = {
   Opcode_bnall_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bbc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bbc_encode_fns[] = {
   Opcode_bbc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bbs_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bbs_encode_fns[] = {
   Opcode_bbs_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_beqz_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_beqz_encode_fns[] = {
   Opcode_beqz_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bnez_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bnez_encode_fns[] = {
   Opcode_bnez_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bgez_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bgez_encode_fns[] = {
   Opcode_bgez_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bltz_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bltz_encode_fns[] = {
   Opcode_bltz_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_call0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_call0_encode_fns[] = {
   Opcode_call0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_callx0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_callx0_encode_fns[] = {
   Opcode_callx0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_extui_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_extui_encode_fns[] = {
   Opcode_extui_Slot_inst_encode, 0, 0, Opcode_extui_Slot_xt_flix64_slot0_encode, Opcode_extui_Slot_xt_flix64_slot0_encode, Opcode_extui_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ill_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ill_encode_fns[] = {
   Opcode_ill_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_j_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_j_encode_fns[] = {
   Opcode_j_Slot_inst_encode, 0, 0, 0, 0, Opcode_j_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_jx_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_jx_encode_fns[] = {
   Opcode_jx_Slot_inst_encode, 0, 0, 0, 0, Opcode_jx_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_l16ui_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_l16ui_encode_fns[] = {
   Opcode_l16ui_Slot_inst_encode, 0, 0, Opcode_l16ui_Slot_xt_flix64_slot0_encode, Opcode_l16ui_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_l16si_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_l16si_encode_fns[] = {
   Opcode_l16si_Slot_inst_encode, 0, 0, Opcode_l16si_Slot_xt_flix64_slot0_encode, Opcode_l16si_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_l32i_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_l32i_encode_fns[] = {
   Opcode_l32i_Slot_inst_encode, 0, 0, Opcode_l32i_Slot_xt_flix64_slot0_encode, Opcode_l32i_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_l32r_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_l32r_encode_fns[] = {
   Opcode_l32r_Slot_inst_encode, 0, 0, Opcode_l32r_Slot_xt_flix64_slot0_encode, Opcode_l32r_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_l8ui_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_l8ui_encode_fns[] = {
   Opcode_l8ui_Slot_inst_encode, 0, 0, Opcode_l8ui_Slot_xt_flix64_slot0_encode, Opcode_l8ui_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_loop_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_loop_encode_fns[] = {
   Opcode_loop_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_loopnez_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_loopnez_encode_fns[] = {
   Opcode_loopnez_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_loopgtz_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_loopgtz_encode_fns[] = {
   Opcode_loopgtz_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movi_encode_fns[] = {
   Opcode_movi_Slot_inst_encode, 0, 0, Opcode_movi_Slot_xt_flix64_slot0_encode, Opcode_movi_Slot_xt_flix64_slot0_encode, Opcode_movi_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_moveqz_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_moveqz_encode_fns[] = {
   Opcode_moveqz_Slot_inst_encode, 0, 0, Opcode_moveqz_Slot_xt_flix64_slot0_encode, Opcode_moveqz_Slot_xt_flix64_slot0_encode, Opcode_moveqz_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movnez_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movnez_encode_fns[] = {
   Opcode_movnez_Slot_inst_encode, 0, 0, Opcode_movnez_Slot_xt_flix64_slot0_encode, Opcode_movnez_Slot_xt_flix64_slot0_encode, Opcode_movnez_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movltz_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movltz_encode_fns[] = {
   Opcode_movltz_Slot_inst_encode, 0, 0, Opcode_movltz_Slot_xt_flix64_slot0_encode, Opcode_movltz_Slot_xt_flix64_slot0_encode, Opcode_movltz_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movgez_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movgez_encode_fns[] = {
   Opcode_movgez_Slot_inst_encode, 0, 0, Opcode_movgez_Slot_xt_flix64_slot0_encode, Opcode_movgez_Slot_xt_flix64_slot0_encode, Opcode_movgez_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_neg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_neg_encode_fns[] = {
   Opcode_neg_Slot_inst_encode, 0, 0, Opcode_neg_Slot_xt_flix64_slot0_encode, Opcode_neg_Slot_xt_flix64_slot0_encode, Opcode_neg_Slot_xt_flix64_slot1_encode, Opcode_neg_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_abs_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_abs_encode_fns[] = {
   Opcode_abs_Slot_inst_encode, 0, 0, Opcode_abs_Slot_xt_flix64_slot0_encode, Opcode_abs_Slot_xt_flix64_slot0_encode, 0, Opcode_abs_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_nop_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_nop_encode_fns[] = {
   Opcode_nop_Slot_inst_encode, 0, 0, Opcode_nop_Slot_xt_flix64_slot0_encode, Opcode_nop_Slot_xt_flix64_slot0_encode, Opcode_nop_Slot_xt_flix64_slot1_encode, Opcode_nop_Slot_xt_flix64_slot2_encode, Opcode_nop_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_ret_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ret_encode_fns[] = {
   Opcode_ret_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_s16i_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_s16i_encode_fns[] = {
   Opcode_s16i_Slot_inst_encode, 0, 0, Opcode_s16i_Slot_xt_flix64_slot0_encode, Opcode_s16i_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_s32i_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_s32i_encode_fns[] = {
   Opcode_s32i_Slot_inst_encode, 0, 0, Opcode_s32i_Slot_xt_flix64_slot0_encode, Opcode_s32i_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_s8i_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_s8i_encode_fns[] = {
   Opcode_s8i_Slot_inst_encode, 0, 0, Opcode_s8i_Slot_xt_flix64_slot0_encode, Opcode_s8i_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ssr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ssr_encode_fns[] = {
   Opcode_ssr_Slot_inst_encode, 0, 0, Opcode_ssr_Slot_xt_flix64_slot0_encode, Opcode_ssr_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ssl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ssl_encode_fns[] = {
   Opcode_ssl_Slot_inst_encode, 0, 0, Opcode_ssl_Slot_xt_flix64_slot0_encode, Opcode_ssl_Slot_xt_flix64_slot0_encode, Opcode_ssl_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ssa8l_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ssa8l_encode_fns[] = {
   Opcode_ssa8l_Slot_inst_encode, 0, 0, Opcode_ssa8l_Slot_xt_flix64_slot0_encode, Opcode_ssa8l_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ssa8b_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ssa8b_encode_fns[] = {
   Opcode_ssa8b_Slot_inst_encode, 0, 0, Opcode_ssa8b_Slot_xt_flix64_slot0_encode, Opcode_ssa8b_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ssai_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ssai_encode_fns[] = {
   Opcode_ssai_Slot_inst_encode, 0, 0, Opcode_ssai_Slot_xt_flix64_slot0_encode, Opcode_ssai_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_sll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_sll_encode_fns[] = {
   Opcode_sll_Slot_inst_encode, 0, 0, Opcode_sll_Slot_xt_flix64_slot0_encode, Opcode_sll_Slot_xt_flix64_slot0_encode, Opcode_sll_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_src_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_src_encode_fns[] = {
   Opcode_src_Slot_inst_encode, 0, 0, Opcode_src_Slot_xt_flix64_slot0_encode, Opcode_src_Slot_xt_flix64_slot0_encode, Opcode_src_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_srl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_srl_encode_fns[] = {
   Opcode_srl_Slot_inst_encode, 0, 0, Opcode_srl_Slot_xt_flix64_slot0_encode, Opcode_srl_Slot_xt_flix64_slot0_encode, Opcode_srl_Slot_xt_flix64_slot1_encode, Opcode_srl_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_sra_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_sra_encode_fns[] = {
   Opcode_sra_Slot_inst_encode, 0, 0, Opcode_sra_Slot_xt_flix64_slot0_encode, Opcode_sra_Slot_xt_flix64_slot0_encode, Opcode_sra_Slot_xt_flix64_slot1_encode, Opcode_sra_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_slli_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_slli_encode_fns[] = {
   Opcode_slli_Slot_inst_encode, 0, 0, Opcode_slli_Slot_xt_flix64_slot0_encode, Opcode_slli_Slot_xt_flix64_slot0_encode, Opcode_slli_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_srai_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_srai_encode_fns[] = {
   Opcode_srai_Slot_inst_encode, 0, 0, Opcode_srai_Slot_xt_flix64_slot0_encode, Opcode_srai_Slot_xt_flix64_slot0_encode, Opcode_srai_Slot_xt_flix64_slot1_encode, Opcode_srai_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_srli_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_srli_encode_fns[] = {
   Opcode_srli_Slot_inst_encode, 0, 0, Opcode_srli_Slot_xt_flix64_slot0_encode, Opcode_srli_Slot_xt_flix64_slot0_encode, Opcode_srli_Slot_xt_flix64_slot1_encode, Opcode_srli_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_memw_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_memw_encode_fns[] = {
   Opcode_memw_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_extw_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_extw_encode_fns[] = {
   Opcode_extw_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_isync_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_isync_encode_fns[] = {
   Opcode_isync_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsync_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsync_encode_fns[] = {
   Opcode_rsync_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_esync_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_esync_encode_fns[] = {
   Opcode_esync_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dsync_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dsync_encode_fns[] = {
   Opcode_dsync_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsil_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsil_encode_fns[] = {
   Opcode_rsil_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_lend_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_lend_encode_fns[] = {
   Opcode_rsr_lend_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_lend_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_lend_encode_fns[] = {
   Opcode_wsr_lend_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_lend_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_lend_encode_fns[] = {
   Opcode_xsr_lend_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_lcount_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_lcount_encode_fns[] = {
   Opcode_rsr_lcount_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_lcount_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_lcount_encode_fns[] = {
   Opcode_wsr_lcount_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_lcount_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_lcount_encode_fns[] = {
   Opcode_xsr_lcount_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_lbeg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_lbeg_encode_fns[] = {
   Opcode_rsr_lbeg_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_lbeg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_lbeg_encode_fns[] = {
   Opcode_wsr_lbeg_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_lbeg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_lbeg_encode_fns[] = {
   Opcode_xsr_lbeg_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_sar_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_sar_encode_fns[] = {
   Opcode_rsr_sar_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_sar_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_sar_encode_fns[] = {
   Opcode_wsr_sar_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_sar_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_sar_encode_fns[] = {
   Opcode_xsr_sar_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_litbase_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_litbase_encode_fns[] = {
   Opcode_rsr_litbase_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_litbase_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_litbase_encode_fns[] = {
   Opcode_wsr_litbase_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_litbase_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_litbase_encode_fns[] = {
   Opcode_xsr_litbase_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_176_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_176_encode_fns[] = {
   Opcode_rsr_176_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_208_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_208_encode_fns[] = {
   Opcode_rsr_208_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ps_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ps_encode_fns[] = {
   Opcode_rsr_ps_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ps_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ps_encode_fns[] = {
   Opcode_wsr_ps_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ps_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ps_encode_fns[] = {
   Opcode_xsr_ps_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_epc1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_epc1_encode_fns[] = {
   Opcode_rsr_epc1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_epc1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_epc1_encode_fns[] = {
   Opcode_wsr_epc1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_epc1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_epc1_encode_fns[] = {
   Opcode_xsr_epc1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_excsave1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_excsave1_encode_fns[] = {
   Opcode_rsr_excsave1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_excsave1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_excsave1_encode_fns[] = {
   Opcode_wsr_excsave1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_excsave1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_excsave1_encode_fns[] = {
   Opcode_xsr_excsave1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_epc2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_epc2_encode_fns[] = {
   Opcode_rsr_epc2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_epc2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_epc2_encode_fns[] = {
   Opcode_wsr_epc2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_epc2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_epc2_encode_fns[] = {
   Opcode_xsr_epc2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_excsave2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_excsave2_encode_fns[] = {
   Opcode_rsr_excsave2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_excsave2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_excsave2_encode_fns[] = {
   Opcode_wsr_excsave2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_excsave2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_excsave2_encode_fns[] = {
   Opcode_xsr_excsave2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_epc3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_epc3_encode_fns[] = {
   Opcode_rsr_epc3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_epc3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_epc3_encode_fns[] = {
   Opcode_wsr_epc3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_epc3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_epc3_encode_fns[] = {
   Opcode_xsr_epc3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_excsave3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_excsave3_encode_fns[] = {
   Opcode_rsr_excsave3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_excsave3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_excsave3_encode_fns[] = {
   Opcode_wsr_excsave3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_excsave3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_excsave3_encode_fns[] = {
   Opcode_xsr_excsave3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_epc4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_epc4_encode_fns[] = {
   Opcode_rsr_epc4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_epc4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_epc4_encode_fns[] = {
   Opcode_wsr_epc4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_epc4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_epc4_encode_fns[] = {
   Opcode_xsr_epc4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_excsave4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_excsave4_encode_fns[] = {
   Opcode_rsr_excsave4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_excsave4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_excsave4_encode_fns[] = {
   Opcode_wsr_excsave4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_excsave4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_excsave4_encode_fns[] = {
   Opcode_xsr_excsave4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_epc5_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_epc5_encode_fns[] = {
   Opcode_rsr_epc5_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_epc5_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_epc5_encode_fns[] = {
   Opcode_wsr_epc5_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_epc5_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_epc5_encode_fns[] = {
   Opcode_xsr_epc5_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_excsave5_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_excsave5_encode_fns[] = {
   Opcode_rsr_excsave5_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_excsave5_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_excsave5_encode_fns[] = {
   Opcode_wsr_excsave5_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_excsave5_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_excsave5_encode_fns[] = {
   Opcode_xsr_excsave5_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_epc6_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_epc6_encode_fns[] = {
   Opcode_rsr_epc6_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_epc6_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_epc6_encode_fns[] = {
   Opcode_wsr_epc6_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_epc6_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_epc6_encode_fns[] = {
   Opcode_xsr_epc6_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_excsave6_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_excsave6_encode_fns[] = {
   Opcode_rsr_excsave6_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_excsave6_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_excsave6_encode_fns[] = {
   Opcode_wsr_excsave6_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_excsave6_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_excsave6_encode_fns[] = {
   Opcode_xsr_excsave6_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_epc7_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_epc7_encode_fns[] = {
   Opcode_rsr_epc7_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_epc7_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_epc7_encode_fns[] = {
   Opcode_wsr_epc7_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_epc7_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_epc7_encode_fns[] = {
   Opcode_xsr_epc7_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_excsave7_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_excsave7_encode_fns[] = {
   Opcode_rsr_excsave7_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_excsave7_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_excsave7_encode_fns[] = {
   Opcode_wsr_excsave7_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_excsave7_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_excsave7_encode_fns[] = {
   Opcode_xsr_excsave7_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_eps2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_eps2_encode_fns[] = {
   Opcode_rsr_eps2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_eps2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_eps2_encode_fns[] = {
   Opcode_wsr_eps2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_eps2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_eps2_encode_fns[] = {
   Opcode_xsr_eps2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_eps3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_eps3_encode_fns[] = {
   Opcode_rsr_eps3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_eps3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_eps3_encode_fns[] = {
   Opcode_wsr_eps3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_eps3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_eps3_encode_fns[] = {
   Opcode_xsr_eps3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_eps4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_eps4_encode_fns[] = {
   Opcode_rsr_eps4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_eps4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_eps4_encode_fns[] = {
   Opcode_wsr_eps4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_eps4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_eps4_encode_fns[] = {
   Opcode_xsr_eps4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_eps5_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_eps5_encode_fns[] = {
   Opcode_rsr_eps5_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_eps5_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_eps5_encode_fns[] = {
   Opcode_wsr_eps5_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_eps5_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_eps5_encode_fns[] = {
   Opcode_xsr_eps5_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_eps6_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_eps6_encode_fns[] = {
   Opcode_rsr_eps6_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_eps6_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_eps6_encode_fns[] = {
   Opcode_wsr_eps6_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_eps6_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_eps6_encode_fns[] = {
   Opcode_xsr_eps6_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_eps7_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_eps7_encode_fns[] = {
   Opcode_rsr_eps7_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_eps7_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_eps7_encode_fns[] = {
   Opcode_wsr_eps7_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_eps7_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_eps7_encode_fns[] = {
   Opcode_xsr_eps7_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_excvaddr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_excvaddr_encode_fns[] = {
   Opcode_rsr_excvaddr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_excvaddr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_excvaddr_encode_fns[] = {
   Opcode_wsr_excvaddr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_excvaddr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_excvaddr_encode_fns[] = {
   Opcode_xsr_excvaddr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_depc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_depc_encode_fns[] = {
   Opcode_rsr_depc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_depc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_depc_encode_fns[] = {
   Opcode_wsr_depc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_depc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_depc_encode_fns[] = {
   Opcode_xsr_depc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_exccause_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_exccause_encode_fns[] = {
   Opcode_rsr_exccause_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_exccause_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_exccause_encode_fns[] = {
   Opcode_wsr_exccause_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_exccause_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_exccause_encode_fns[] = {
   Opcode_xsr_exccause_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_misc0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_misc0_encode_fns[] = {
   Opcode_rsr_misc0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_misc0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_misc0_encode_fns[] = {
   Opcode_wsr_misc0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_misc0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_misc0_encode_fns[] = {
   Opcode_xsr_misc0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_misc1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_misc1_encode_fns[] = {
   Opcode_rsr_misc1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_misc1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_misc1_encode_fns[] = {
   Opcode_wsr_misc1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_misc1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_misc1_encode_fns[] = {
   Opcode_xsr_misc1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_misc2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_misc2_encode_fns[] = {
   Opcode_rsr_misc2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_misc2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_misc2_encode_fns[] = {
   Opcode_wsr_misc2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_misc2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_misc2_encode_fns[] = {
   Opcode_xsr_misc2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_misc3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_misc3_encode_fns[] = {
   Opcode_rsr_misc3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_misc3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_misc3_encode_fns[] = {
   Opcode_wsr_misc3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_misc3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_misc3_encode_fns[] = {
   Opcode_xsr_misc3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_prid_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_prid_encode_fns[] = {
   Opcode_rsr_prid_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_vecbase_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_vecbase_encode_fns[] = {
   Opcode_rsr_vecbase_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_vecbase_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_vecbase_encode_fns[] = {
   Opcode_wsr_vecbase_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_vecbase_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_vecbase_encode_fns[] = {
   Opcode_xsr_vecbase_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_aa_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_aa_ll_encode_fns[] = {
   Opcode_mul_aa_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_aa_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_aa_hl_encode_fns[] = {
   Opcode_mul_aa_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_aa_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_aa_lh_encode_fns[] = {
   Opcode_mul_aa_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_aa_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_aa_hh_encode_fns[] = {
   Opcode_mul_aa_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_umul_aa_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_umul_aa_ll_encode_fns[] = {
   Opcode_umul_aa_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_umul_aa_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_umul_aa_hl_encode_fns[] = {
   Opcode_umul_aa_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_umul_aa_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_umul_aa_lh_encode_fns[] = {
   Opcode_umul_aa_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_umul_aa_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_umul_aa_hh_encode_fns[] = {
   Opcode_umul_aa_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_ad_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_ad_ll_encode_fns[] = {
   Opcode_mul_ad_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_ad_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_ad_hl_encode_fns[] = {
   Opcode_mul_ad_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_ad_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_ad_lh_encode_fns[] = {
   Opcode_mul_ad_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_ad_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_ad_hh_encode_fns[] = {
   Opcode_mul_ad_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_da_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_da_ll_encode_fns[] = {
   Opcode_mul_da_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_da_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_da_hl_encode_fns[] = {
   Opcode_mul_da_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_da_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_da_lh_encode_fns[] = {
   Opcode_mul_da_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_da_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_da_hh_encode_fns[] = {
   Opcode_mul_da_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_dd_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_dd_ll_encode_fns[] = {
   Opcode_mul_dd_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_dd_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_dd_hl_encode_fns[] = {
   Opcode_mul_dd_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_dd_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_dd_lh_encode_fns[] = {
   Opcode_mul_dd_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_dd_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_dd_hh_encode_fns[] = {
   Opcode_mul_dd_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_aa_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_aa_ll_encode_fns[] = {
   Opcode_mula_aa_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_aa_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_aa_hl_encode_fns[] = {
   Opcode_mula_aa_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_aa_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_aa_lh_encode_fns[] = {
   Opcode_mula_aa_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_aa_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_aa_hh_encode_fns[] = {
   Opcode_mula_aa_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_aa_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_aa_ll_encode_fns[] = {
   Opcode_muls_aa_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_aa_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_aa_hl_encode_fns[] = {
   Opcode_muls_aa_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_aa_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_aa_lh_encode_fns[] = {
   Opcode_muls_aa_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_aa_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_aa_hh_encode_fns[] = {
   Opcode_muls_aa_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_ad_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_ad_ll_encode_fns[] = {
   Opcode_mula_ad_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_ad_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_ad_hl_encode_fns[] = {
   Opcode_mula_ad_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_ad_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_ad_lh_encode_fns[] = {
   Opcode_mula_ad_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_ad_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_ad_hh_encode_fns[] = {
   Opcode_mula_ad_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_ad_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_ad_ll_encode_fns[] = {
   Opcode_muls_ad_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_ad_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_ad_hl_encode_fns[] = {
   Opcode_muls_ad_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_ad_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_ad_lh_encode_fns[] = {
   Opcode_muls_ad_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_ad_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_ad_hh_encode_fns[] = {
   Opcode_muls_ad_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_ll_encode_fns[] = {
   Opcode_mula_da_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_hl_encode_fns[] = {
   Opcode_mula_da_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_lh_encode_fns[] = {
   Opcode_mula_da_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_hh_encode_fns[] = {
   Opcode_mula_da_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_da_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_da_ll_encode_fns[] = {
   Opcode_muls_da_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_da_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_da_hl_encode_fns[] = {
   Opcode_muls_da_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_da_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_da_lh_encode_fns[] = {
   Opcode_muls_da_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_da_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_da_hh_encode_fns[] = {
   Opcode_muls_da_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_ll_encode_fns[] = {
   Opcode_mula_dd_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_hl_encode_fns[] = {
   Opcode_mula_dd_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_lh_encode_fns[] = {
   Opcode_mula_dd_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_hh_encode_fns[] = {
   Opcode_mula_dd_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_dd_ll_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_dd_ll_encode_fns[] = {
   Opcode_muls_dd_ll_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_dd_hl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_dd_hl_encode_fns[] = {
   Opcode_muls_dd_hl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_dd_lh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_dd_lh_encode_fns[] = {
   Opcode_muls_dd_lh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muls_dd_hh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muls_dd_hh_encode_fns[] = {
   Opcode_muls_dd_hh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_ll_lddec_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_ll_lddec_encode_fns[] = {
   Opcode_mula_da_ll_lddec_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_ll_ldinc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_ll_ldinc_encode_fns[] = {
   Opcode_mula_da_ll_ldinc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_hl_lddec_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_hl_lddec_encode_fns[] = {
   Opcode_mula_da_hl_lddec_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_hl_ldinc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_hl_ldinc_encode_fns[] = {
   Opcode_mula_da_hl_ldinc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_lh_lddec_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_lh_lddec_encode_fns[] = {
   Opcode_mula_da_lh_lddec_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_lh_ldinc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_lh_ldinc_encode_fns[] = {
   Opcode_mula_da_lh_ldinc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_hh_lddec_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_hh_lddec_encode_fns[] = {
   Opcode_mula_da_hh_lddec_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_da_hh_ldinc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_da_hh_ldinc_encode_fns[] = {
   Opcode_mula_da_hh_ldinc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_ll_lddec_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_ll_lddec_encode_fns[] = {
   Opcode_mula_dd_ll_lddec_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_ll_ldinc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_ll_ldinc_encode_fns[] = {
   Opcode_mula_dd_ll_ldinc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_hl_lddec_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_hl_lddec_encode_fns[] = {
   Opcode_mula_dd_hl_lddec_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_hl_ldinc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_hl_ldinc_encode_fns[] = {
   Opcode_mula_dd_hl_ldinc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_lh_lddec_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_lh_lddec_encode_fns[] = {
   Opcode_mula_dd_lh_lddec_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_lh_ldinc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_lh_ldinc_encode_fns[] = {
   Opcode_mula_dd_lh_ldinc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_hh_lddec_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_hh_lddec_encode_fns[] = {
   Opcode_mula_dd_hh_lddec_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mula_dd_hh_ldinc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mula_dd_hh_ldinc_encode_fns[] = {
   Opcode_mula_dd_hh_ldinc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_lddec_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_lddec_encode_fns[] = {
   Opcode_lddec_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ldinc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ldinc_encode_fns[] = {
   Opcode_ldinc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul16u_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul16u_encode_fns[] = {
   Opcode_mul16u_Slot_inst_encode, 0, 0, Opcode_mul16u_Slot_xt_flix64_slot0_encode, Opcode_mul16u_Slot_xt_flix64_slot0_encode, Opcode_mul16u_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul16s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul16s_encode_fns[] = {
   Opcode_mul16s_Slot_inst_encode, 0, 0, Opcode_mul16s_Slot_xt_flix64_slot0_encode, Opcode_mul16s_Slot_xt_flix64_slot0_encode, Opcode_mul16s_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_m0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_m0_encode_fns[] = {
   Opcode_rsr_m0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_m0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_m0_encode_fns[] = {
   Opcode_wsr_m0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_m0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_m0_encode_fns[] = {
   Opcode_xsr_m0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_m1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_m1_encode_fns[] = {
   Opcode_rsr_m1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_m1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_m1_encode_fns[] = {
   Opcode_wsr_m1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_m1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_m1_encode_fns[] = {
   Opcode_xsr_m1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_m2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_m2_encode_fns[] = {
   Opcode_rsr_m2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_m2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_m2_encode_fns[] = {
   Opcode_wsr_m2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_m2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_m2_encode_fns[] = {
   Opcode_xsr_m2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_m3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_m3_encode_fns[] = {
   Opcode_rsr_m3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_m3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_m3_encode_fns[] = {
   Opcode_wsr_m3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_m3_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_m3_encode_fns[] = {
   Opcode_xsr_m3_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_acclo_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_acclo_encode_fns[] = {
   Opcode_rsr_acclo_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_acclo_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_acclo_encode_fns[] = {
   Opcode_wsr_acclo_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_acclo_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_acclo_encode_fns[] = {
   Opcode_xsr_acclo_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_acchi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_acchi_encode_fns[] = {
   Opcode_rsr_acchi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_acchi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_acchi_encode_fns[] = {
   Opcode_wsr_acchi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_acchi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_acchi_encode_fns[] = {
   Opcode_xsr_acchi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rfi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rfi_encode_fns[] = {
   Opcode_rfi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_waiti_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_waiti_encode_fns[] = {
   Opcode_waiti_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_interrupt_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_interrupt_encode_fns[] = {
   Opcode_rsr_interrupt_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_intset_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_intset_encode_fns[] = {
   Opcode_wsr_intset_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_intclear_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_intclear_encode_fns[] = {
   Opcode_wsr_intclear_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_intenable_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_intenable_encode_fns[] = {
   Opcode_rsr_intenable_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_intenable_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_intenable_encode_fns[] = {
   Opcode_wsr_intenable_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_intenable_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_intenable_encode_fns[] = {
   Opcode_xsr_intenable_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_break_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_break_encode_fns[] = {
   Opcode_break_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_break_n_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_break_n_encode_fns[] = {
   0, 0, Opcode_break_n_Slot_inst16b_encode, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_dbreaka0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_dbreaka0_encode_fns[] = {
   Opcode_rsr_dbreaka0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_dbreaka0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_dbreaka0_encode_fns[] = {
   Opcode_wsr_dbreaka0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_dbreaka0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_dbreaka0_encode_fns[] = {
   Opcode_xsr_dbreaka0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_dbreakc0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_dbreakc0_encode_fns[] = {
   Opcode_rsr_dbreakc0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_dbreakc0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_dbreakc0_encode_fns[] = {
   Opcode_wsr_dbreakc0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_dbreakc0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_dbreakc0_encode_fns[] = {
   Opcode_xsr_dbreakc0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_dbreaka1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_dbreaka1_encode_fns[] = {
   Opcode_rsr_dbreaka1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_dbreaka1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_dbreaka1_encode_fns[] = {
   Opcode_wsr_dbreaka1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_dbreaka1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_dbreaka1_encode_fns[] = {
   Opcode_xsr_dbreaka1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_dbreakc1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_dbreakc1_encode_fns[] = {
   Opcode_rsr_dbreakc1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_dbreakc1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_dbreakc1_encode_fns[] = {
   Opcode_wsr_dbreakc1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_dbreakc1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_dbreakc1_encode_fns[] = {
   Opcode_xsr_dbreakc1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ibreaka0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ibreaka0_encode_fns[] = {
   Opcode_rsr_ibreaka0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ibreaka0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ibreaka0_encode_fns[] = {
   Opcode_wsr_ibreaka0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ibreaka0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ibreaka0_encode_fns[] = {
   Opcode_xsr_ibreaka0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ibreaka1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ibreaka1_encode_fns[] = {
   Opcode_rsr_ibreaka1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ibreaka1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ibreaka1_encode_fns[] = {
   Opcode_wsr_ibreaka1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ibreaka1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ibreaka1_encode_fns[] = {
   Opcode_xsr_ibreaka1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ibreakenable_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ibreakenable_encode_fns[] = {
   Opcode_rsr_ibreakenable_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ibreakenable_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ibreakenable_encode_fns[] = {
   Opcode_wsr_ibreakenable_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ibreakenable_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ibreakenable_encode_fns[] = {
   Opcode_xsr_ibreakenable_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_debugcause_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_debugcause_encode_fns[] = {
   Opcode_rsr_debugcause_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_debugcause_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_debugcause_encode_fns[] = {
   Opcode_wsr_debugcause_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_debugcause_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_debugcause_encode_fns[] = {
   Opcode_xsr_debugcause_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_icount_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_icount_encode_fns[] = {
   Opcode_rsr_icount_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_icount_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_icount_encode_fns[] = {
   Opcode_wsr_icount_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_icount_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_icount_encode_fns[] = {
   Opcode_xsr_icount_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_icountlevel_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_icountlevel_encode_fns[] = {
   Opcode_rsr_icountlevel_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_icountlevel_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_icountlevel_encode_fns[] = {
   Opcode_wsr_icountlevel_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_icountlevel_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_icountlevel_encode_fns[] = {
   Opcode_xsr_icountlevel_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ddr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ddr_encode_fns[] = {
   Opcode_rsr_ddr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ddr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ddr_encode_fns[] = {
   Opcode_wsr_ddr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ddr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ddr_encode_fns[] = {
   Opcode_xsr_ddr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rfdo_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rfdo_encode_fns[] = {
   Opcode_rfdo_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rfdd_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rfdd_encode_fns[] = {
   Opcode_rfdd_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_mmid_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_mmid_encode_fns[] = {
   Opcode_wsr_mmid_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_andb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_andb_encode_fns[] = {
   Opcode_andb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_andbc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_andbc_encode_fns[] = {
   Opcode_andbc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_orb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_orb_encode_fns[] = {
   Opcode_orb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_orbc_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_orbc_encode_fns[] = {
   Opcode_orbc_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xorb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xorb_encode_fns[] = {
   Opcode_xorb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_any4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_any4_encode_fns[] = {
   Opcode_any4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_all4_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_all4_encode_fns[] = {
   Opcode_all4_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_any8_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_any8_encode_fns[] = {
   Opcode_any8_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_all8_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_all8_encode_fns[] = {
   Opcode_all8_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bf_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bf_encode_fns[] = {
   Opcode_bf_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_bt_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bt_encode_fns[] = {
   Opcode_bt_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movf_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movf_encode_fns[] = {
   Opcode_movf_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movt_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movt_encode_fns[] = {
   Opcode_movt_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_br_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_br_encode_fns[] = {
   Opcode_rsr_br_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_br_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_br_encode_fns[] = {
   Opcode_wsr_br_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_br_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_br_encode_fns[] = {
   Opcode_xsr_br_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ccount_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ccount_encode_fns[] = {
   Opcode_rsr_ccount_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ccount_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ccount_encode_fns[] = {
   Opcode_wsr_ccount_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ccount_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ccount_encode_fns[] = {
   Opcode_xsr_ccount_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ccompare0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ccompare0_encode_fns[] = {
   Opcode_rsr_ccompare0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ccompare0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ccompare0_encode_fns[] = {
   Opcode_wsr_ccompare0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ccompare0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ccompare0_encode_fns[] = {
   Opcode_xsr_ccompare0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ccompare1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ccompare1_encode_fns[] = {
   Opcode_rsr_ccompare1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ccompare1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ccompare1_encode_fns[] = {
   Opcode_wsr_ccompare1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ccompare1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ccompare1_encode_fns[] = {
   Opcode_xsr_ccompare1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ccompare2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ccompare2_encode_fns[] = {
   Opcode_rsr_ccompare2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ccompare2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ccompare2_encode_fns[] = {
   Opcode_wsr_ccompare2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ccompare2_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ccompare2_encode_fns[] = {
   Opcode_xsr_ccompare2_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ipf_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ipf_encode_fns[] = {
   Opcode_ipf_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ihi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ihi_encode_fns[] = {
   Opcode_ihi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ipfl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ipfl_encode_fns[] = {
   Opcode_ipfl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ihu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ihu_encode_fns[] = {
   Opcode_ihu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_iiu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_iiu_encode_fns[] = {
   Opcode_iiu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_iii_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_iii_encode_fns[] = {
   Opcode_iii_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_lict_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_lict_encode_fns[] = {
   Opcode_lict_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_licw_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_licw_encode_fns[] = {
   Opcode_licw_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_sict_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_sict_encode_fns[] = {
   Opcode_sict_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_sicw_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_sicw_encode_fns[] = {
   Opcode_sicw_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dhwb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dhwb_encode_fns[] = {
   Opcode_dhwb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dhwbi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dhwbi_encode_fns[] = {
   Opcode_dhwbi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_diwb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_diwb_encode_fns[] = {
   Opcode_diwb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_diwbi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_diwbi_encode_fns[] = {
   Opcode_diwbi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dhi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dhi_encode_fns[] = {
   Opcode_dhi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dii_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dii_encode_fns[] = {
   Opcode_dii_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dpfr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dpfr_encode_fns[] = {
   Opcode_dpfr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dpfw_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dpfw_encode_fns[] = {
   Opcode_dpfw_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dpfro_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dpfro_encode_fns[] = {
   Opcode_dpfro_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dpfwo_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dpfwo_encode_fns[] = {
   Opcode_dpfwo_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dpfl_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dpfl_encode_fns[] = {
   Opcode_dpfl_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_dhu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_dhu_encode_fns[] = {
   Opcode_dhu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_diu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_diu_encode_fns[] = {
   Opcode_diu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_sdct_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_sdct_encode_fns[] = {
   Opcode_sdct_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ldct_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ldct_encode_fns[] = {
   Opcode_ldct_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_ptevaddr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_ptevaddr_encode_fns[] = {
   Opcode_wsr_ptevaddr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_ptevaddr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_ptevaddr_encode_fns[] = {
   Opcode_rsr_ptevaddr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_ptevaddr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_ptevaddr_encode_fns[] = {
   Opcode_xsr_ptevaddr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_rasid_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_rasid_encode_fns[] = {
   Opcode_rsr_rasid_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_rasid_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_rasid_encode_fns[] = {
   Opcode_wsr_rasid_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_rasid_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_rasid_encode_fns[] = {
   Opcode_xsr_rasid_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_itlbcfg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_itlbcfg_encode_fns[] = {
   Opcode_rsr_itlbcfg_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_itlbcfg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_itlbcfg_encode_fns[] = {
   Opcode_wsr_itlbcfg_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_itlbcfg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_itlbcfg_encode_fns[] = {
   Opcode_xsr_itlbcfg_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_dtlbcfg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_dtlbcfg_encode_fns[] = {
   Opcode_rsr_dtlbcfg_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_dtlbcfg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_dtlbcfg_encode_fns[] = {
   Opcode_wsr_dtlbcfg_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_dtlbcfg_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_dtlbcfg_encode_fns[] = {
   Opcode_xsr_dtlbcfg_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_idtlb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_idtlb_encode_fns[] = {
   Opcode_idtlb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_pdtlb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_pdtlb_encode_fns[] = {
   Opcode_pdtlb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rdtlb0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rdtlb0_encode_fns[] = {
   Opcode_rdtlb0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rdtlb1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rdtlb1_encode_fns[] = {
   Opcode_rdtlb1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wdtlb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wdtlb_encode_fns[] = {
   Opcode_wdtlb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_iitlb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_iitlb_encode_fns[] = {
   Opcode_iitlb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_pitlb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_pitlb_encode_fns[] = {
   Opcode_pitlb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ritlb0_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ritlb0_encode_fns[] = {
   Opcode_ritlb0_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ritlb1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ritlb1_encode_fns[] = {
   Opcode_ritlb1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_witlb_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_witlb_encode_fns[] = {
   Opcode_witlb_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ldpte_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ldpte_encode_fns[] = {
   Opcode_ldpte_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_hwwitlba_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_hwwitlba_encode_fns[] = {
   Opcode_hwwitlba_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_hwwdtlba_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_hwwdtlba_encode_fns[] = {
   Opcode_hwwdtlba_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_cpenable_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_cpenable_encode_fns[] = {
   Opcode_rsr_cpenable_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_cpenable_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_cpenable_encode_fns[] = {
   Opcode_wsr_cpenable_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_cpenable_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_cpenable_encode_fns[] = {
   Opcode_xsr_cpenable_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_clamps_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_clamps_encode_fns[] = {
   Opcode_clamps_Slot_inst_encode, 0, 0, Opcode_clamps_Slot_xt_flix64_slot0_encode, Opcode_clamps_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_min_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_min_encode_fns[] = {
   Opcode_min_Slot_inst_encode, 0, 0, Opcode_min_Slot_xt_flix64_slot0_encode, Opcode_min_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_max_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_max_encode_fns[] = {
   Opcode_max_Slot_inst_encode, 0, 0, Opcode_max_Slot_xt_flix64_slot0_encode, Opcode_max_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_minu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_minu_encode_fns[] = {
   Opcode_minu_Slot_inst_encode, 0, 0, Opcode_minu_Slot_xt_flix64_slot0_encode, Opcode_minu_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_maxu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_maxu_encode_fns[] = {
   Opcode_maxu_Slot_inst_encode, 0, 0, Opcode_maxu_Slot_xt_flix64_slot0_encode, Opcode_maxu_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_nsa_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_nsa_encode_fns[] = {
   Opcode_nsa_Slot_inst_encode, 0, 0, Opcode_nsa_Slot_xt_flix64_slot0_encode, Opcode_nsa_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_nsau_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_nsau_encode_fns[] = {
   Opcode_nsau_Slot_inst_encode, 0, 0, Opcode_nsau_Slot_xt_flix64_slot0_encode, Opcode_nsau_Slot_xt_flix64_slot0_encode, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_sext_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_sext_encode_fns[] = {
   Opcode_sext_Slot_inst_encode, 0, 0, Opcode_sext_Slot_xt_flix64_slot0_encode, Opcode_sext_Slot_xt_flix64_slot0_encode, Opcode_sext_Slot_xt_flix64_slot1_encode, Opcode_sext_Slot_xt_flix64_slot2_encode, 0
 };
 
-xtensa_opcode_encode_fn Opcode_l32ai_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_l32ai_encode_fns[] = {
   Opcode_l32ai_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_s32ri_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_s32ri_encode_fns[] = {
   Opcode_s32ri_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_s32c1i_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_s32c1i_encode_fns[] = {
   Opcode_s32c1i_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rsr_scompare1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rsr_scompare1_encode_fns[] = {
   Opcode_rsr_scompare1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wsr_scompare1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wsr_scompare1_encode_fns[] = {
   Opcode_wsr_scompare1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_xsr_scompare1_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_xsr_scompare1_encode_fns[] = {
   Opcode_xsr_scompare1_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_quou_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_quou_encode_fns[] = {
   Opcode_quou_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_quos_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_quos_encode_fns[] = {
   Opcode_quos_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_remu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_remu_encode_fns[] = {
   Opcode_remu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rems_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rems_encode_fns[] = {
   Opcode_rems_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mull_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mull_encode_fns[] = {
   Opcode_mull_Slot_inst_encode, 0, 0, Opcode_mull_Slot_xt_flix64_slot0_encode, Opcode_mull_Slot_xt_flix64_slot0_encode, Opcode_mull_Slot_xt_flix64_slot1_encode, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_muluh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_muluh_encode_fns[] = {
   Opcode_muluh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mulsh_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mulsh_encode_fns[] = {
   Opcode_mulsh_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rur_fcr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rur_fcr_encode_fns[] = {
   Opcode_rur_fcr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wur_fcr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wur_fcr_encode_fns[] = {
   Opcode_wur_fcr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rur_fsr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rur_fsr_encode_fns[] = {
   Opcode_rur_fsr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wur_fsr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wur_fsr_encode_fns[] = {
   Opcode_wur_fsr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_add_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_add_s_encode_fns[] = {
   Opcode_add_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_sub_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_sub_s_encode_fns[] = {
   Opcode_sub_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mul_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mul_s_encode_fns[] = {
   Opcode_mul_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_madd_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_madd_s_encode_fns[] = {
   Opcode_madd_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_msub_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_msub_s_encode_fns[] = {
   Opcode_msub_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movf_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movf_s_encode_fns[] = {
   Opcode_movf_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movt_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movt_s_encode_fns[] = {
   Opcode_movt_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_moveqz_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_moveqz_s_encode_fns[] = {
   Opcode_moveqz_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movnez_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movnez_s_encode_fns[] = {
   Opcode_movnez_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movltz_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movltz_s_encode_fns[] = {
   Opcode_movltz_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_movgez_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_movgez_s_encode_fns[] = {
   Opcode_movgez_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_abs_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_abs_s_encode_fns[] = {
   Opcode_abs_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_mov_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_mov_s_encode_fns[] = {
   Opcode_mov_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_neg_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_neg_s_encode_fns[] = {
   Opcode_neg_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_un_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_un_s_encode_fns[] = {
   Opcode_un_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_oeq_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_oeq_s_encode_fns[] = {
   Opcode_oeq_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ueq_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ueq_s_encode_fns[] = {
   Opcode_ueq_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_olt_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_olt_s_encode_fns[] = {
   Opcode_olt_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ult_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ult_s_encode_fns[] = {
   Opcode_ult_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ole_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ole_s_encode_fns[] = {
   Opcode_ole_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ule_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ule_s_encode_fns[] = {
   Opcode_ule_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_float_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_float_s_encode_fns[] = {
   Opcode_float_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ufloat_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ufloat_s_encode_fns[] = {
   Opcode_ufloat_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_round_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_round_s_encode_fns[] = {
   Opcode_round_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ceil_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ceil_s_encode_fns[] = {
   Opcode_ceil_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_floor_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_floor_s_encode_fns[] = {
   Opcode_floor_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_trunc_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_trunc_s_encode_fns[] = {
   Opcode_trunc_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_utrunc_s_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_utrunc_s_encode_fns[] = {
   Opcode_utrunc_s_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_rfr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_rfr_encode_fns[] = {
   Opcode_rfr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_wfr_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_wfr_encode_fns[] = {
   Opcode_wfr_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_lsi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_lsi_encode_fns[] = {
   Opcode_lsi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_lsiu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_lsiu_encode_fns[] = {
   Opcode_lsiu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_lsx_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_lsx_encode_fns[] = {
   Opcode_lsx_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_lsxu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_lsxu_encode_fns[] = {
   Opcode_lsxu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ssi_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ssi_encode_fns[] = {
   Opcode_ssi_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ssiu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ssiu_encode_fns[] = {
   Opcode_ssiu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ssx_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ssx_encode_fns[] = {
   Opcode_ssx_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_ssxu_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ssxu_encode_fns[] = {
   Opcode_ssxu_Slot_inst_encode, 0, 0, 0, 0, 0, 0, 0
 };
 
-xtensa_opcode_encode_fn Opcode_beqz_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_beqz_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_beqz_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bnez_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bnez_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bnez_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bgez_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bgez_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bgez_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bltz_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bltz_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bltz_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_beqi_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_beqi_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_beqi_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bnei_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bnei_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bnei_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bgei_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bgei_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bgei_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_blti_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_blti_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_blti_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bgeui_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bgeui_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bgeui_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bltui_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bltui_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bltui_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bbci_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bbci_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bbci_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bbsi_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bbsi_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bbsi_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_beq_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_beq_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_beq_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bne_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bne_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bne_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bge_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bge_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bge_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_blt_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_blt_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_blt_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bgeu_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bgeu_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bgeu_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bltu_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bltu_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bltu_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bany_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bany_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bany_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bnone_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bnone_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bnone_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_ball_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_ball_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_ball_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bnall_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bnall_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bnall_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bbc_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bbc_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bbc_w18_Slot_xt_flix64_slot3_encode
 };
 
-xtensa_opcode_encode_fn Opcode_bbs_w18_encode_fns[] = {
+const xtensa_opcode_encode_fn Opcode_bbs_w18_encode_fns[] = {
   0, 0, 0, 0, 0, 0, 0, Opcode_bbs_w18_Slot_xt_flix64_slot3_encode
 };
 
@@ -18795,7 +18795,7 @@ Slot_xt_format2_Format_xt_flix64_slot3_2
   insn[1] = (insn[1] & ~0x70000000) | ((slotbuf[1] & 0x7) << 28);
 }
 
-static xtensa_get_field_fn
+static const xtensa_get_field_fn
 Slot_inst_get_field_fns[] = {
   Field_t_Slot_inst_get,
   Field_bbi4_Slot_inst_get,
@@ -18934,7 +18934,7 @@ Slot_inst_get_field_fns[] = {
   Implicit_Field_brall_get
 };
 
-static xtensa_set_field_fn
+static const xtensa_set_field_fn
 Slot_inst_set_field_fns[] = {
   Field_t_Slot_inst_set,
   Field_bbi4_Slot_inst_set,
@@ -19073,7 +19073,7 @@ Slot_inst_set_field_fns[] = {
   Implicit_Field_set
 };
 
-static xtensa_get_field_fn
+static const xtensa_get_field_fn
 Slot_inst16a_get_field_fns[] = {
   Field_t_Slot_inst16a_get,
   0,
@@ -19212,7 +19212,7 @@ Slot_inst16a_get_field_fns[] = {
   Implicit_Field_brall_get
 };
 
-static xtensa_set_field_fn
+static const xtensa_set_field_fn
 Slot_inst16a_set_field_fns[] = {
   Field_t_Slot_inst16a_set,
   0,
@@ -19351,7 +19351,7 @@ Slot_inst16a_set_field_fns[] = {
   Implicit_Field_set
 };
 
-static xtensa_get_field_fn
+static const xtensa_get_field_fn
 Slot_inst16b_get_field_fns[] = {
   Field_t_Slot_inst16b_get,
   0,
@@ -19490,7 +19490,7 @@ Slot_inst16b_get_field_fns[] = {
   Implicit_Field_brall_get
 };
 
-static xtensa_set_field_fn
+static const xtensa_set_field_fn
 Slot_inst16b_set_field_fns[] = {
   Field_t_Slot_inst16b_set,
   0,
@@ -19629,7 +19629,7 @@ Slot_inst16b_set_field_fns[] = {
   Implicit_Field_set
 };
 
-static xtensa_get_field_fn
+static const xtensa_get_field_fn
 Slot_xt_flix64_slot0_get_field_fns[] = {
   Field_t_Slot_xt_flix64_slot0_get,
   0,
@@ -19768,7 +19768,7 @@ Slot_xt_flix64_slot0_get_field_fns[] = {
   Implicit_Field_brall_get
 };
 
-static xtensa_set_field_fn
+static const xtensa_set_field_fn
 Slot_xt_flix64_slot0_set_field_fns[] = {
   Field_t_Slot_xt_flix64_slot0_set,
   0,
@@ -19907,7 +19907,7 @@ Slot_xt_flix64_slot0_set_field_fns[] = {
   Implicit_Field_set
 };
 
-static xtensa_get_field_fn
+static const xtensa_get_field_fn
 Slot_xt_flix64_slot1_get_field_fns[] = {
   Field_t_Slot_xt_flix64_slot1_get,
   0,
@@ -20046,7 +20046,7 @@ Slot_xt_flix64_slot1_get_field_fns[] = {
   Implicit_Field_brall_get
 };
 
-static xtensa_set_field_fn
+static const xtensa_set_field_fn
 Slot_xt_flix64_slot1_set_field_fns[] = {
   Field_t_Slot_xt_flix64_slot1_set,
   0,
@@ -20185,7 +20185,7 @@ Slot_xt_flix64_slot1_set_field_fns[] = {
   Implicit_Field_set
 };
 
-static xtensa_get_field_fn
+static const xtensa_get_field_fn
 Slot_xt_flix64_slot2_get_field_fns[] = {
   Field_t_Slot_xt_flix64_slot2_get,
   0,
@@ -20324,7 +20324,7 @@ Slot_xt_flix64_slot2_get_field_fns[] = {
   Implicit_Field_brall_get
 };
 
-static xtensa_set_field_fn
+static const xtensa_set_field_fn
 Slot_xt_flix64_slot2_set_field_fns[] = {
   Field_t_Slot_xt_flix64_slot2_set,
   0,
@@ -20463,7 +20463,7 @@ Slot_xt_flix64_slot2_set_field_fns[] = {
   Implicit_Field_set
 };
 
-static xtensa_get_field_fn
+static const xtensa_get_field_fn
 Slot_xt_flix64_slot3_get_field_fns[] = {
   Field_t_Slot_xt_flix64_slot3_get,
   0,
@@ -20602,7 +20602,7 @@ Slot_xt_flix64_slot3_get_field_fns[] = {
   Implicit_Field_brall_get
 };
 
-static xtensa_set_field_fn
+static const xtensa_set_field_fn
 Slot_xt_flix64_slot3_set_field_fns[] = {
   Field_t_Slot_xt_flix64_slot3_set,
   0,
@@ -20814,15 +20814,15 @@ Format_xt_format2_encode (xtensa_insnbuf
   insn[1] = 0;
 }
 
-static int Format_x24_slots[] = { 0 };
+static const int Format_x24_slots[] = { 0 };
 
-static int Format_x16a_slots[] = { 1 };
+static const int Format_x16a_slots[] = { 1 };
 
-static int Format_x16b_slots[] = { 2 };
+static const int Format_x16b_slots[] = { 2 };
 
-static int Format_xt_format1_slots[] = { 3, 5, 6 };
+static const int Format_xt_format1_slots[] = { 3, 5, 6 };
 
-static int Format_xt_format2_slots[] = { 4, 7 };
+static const int Format_xt_format2_slots[] = { 4, 7 };
 
 static xtensa_format_internal formats[] = {
   { "x24", 3, Format_x24_encode, 1, Format_x24_slots },
@@ -20849,7 +20849,7 @@ format_decoder (const xtensa_insnbuf ins
   return -1;
 }
 
-static int length_table[16] = {
+static const int length_table[16] = {
   3,
   3,
   3,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/ChangeLog ./ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/ChangeLog	2019-12-11 01:49:16.000000000 +0000
+++ ./ChangeLog	2024-02-01 01:47:13.000000000 +0000
@@ -1,3 +1,1031 @@
+2024-01-15  Nick Clifton  <nickc@redhat.com>
+
+	* 2.42 branch point.
+
+2023-11-15  Arsen ArsenoviÄ‡  <arsen@aarsen.me>
+
+	* intl: Remove directory.  Replaced with out-of-tree GNU
+	gettext.
+	* .gitignore: Add '/gettext*'.
+	* configure.ac (host_libs): Replace intl with gettext.
+	(hbaseargs, bbaseargs, baseargs): Split baseargs into
+	{h,b}baseargs.
+	(skip_barg): New flag.  Skips appending current flag to
+	bbaseargs.
+	<library exemptions>: Exempt --with-libintl-{type,prefix} from
+	target and build machine argument passing.
+	* configure: Regenerate.
+	* Makefile.def (host_modules): Replace intl module with gettext
+	module.
+	(configure-ld): Depend on configure-gettext.
+	* Makefile.in: Regenerate.
+	* src-release.sh: Remove references to the intl/ directory.
+
+2023-07-03  Nick Clifton  <nickc@redhat.com>
+
+	2.41 Branch Point.
+
+2023-06-26  Nick Clifton  <nickc@redhat.com>
+
+	* Import these updates to the config scripts
+
+	commit 4ad4bb7c30aca1e705448ba8d51a210bbd47bb52
+	Author: Paul Eggert <eggert@cs.ucla.edu>
+	Date:   Fri Jun 23 09:55:10 2023 -0700
+
+		Quote 'like this', not `like this'.
+
+	commit 63acb96f92473ceb5e21d873d7c0aee266b3d6d3
+	Author: Paul Eggert <eggert@cs.ucla.edu>
+	Date:   Sat Jan 21 00:15:01 2023 -0600
+
+		Fix config.sub spelling typo for "athlon"
+
+	commit 4ce12a5c9125cedc0d0ba584444a6865396923ec
+	Author: Dmitry V. Levin <ldv@altlinux.org>
+	Date:   Sun Jan 1 08:00:00 2023 +0000
+
+		Update copyright years
+
+	commit c397e2c040bce50bcdccb131f90115ba7e8bfc19
+	Author: Arsen Arsenovi <arsen@aarsen.me>
+	Date:   Sat Sep 17 23:34:48 2022 +0200
+
+		config.sub: add linux-mlibc targets
+
+	commit 9f9f9b0b13197269848c76e3e057a3ed0680b4bf
+	Author: Arsen Arsenovi <arsen@aarsen.me>
+	Date:   Sat Sep 17 23:34:47 2022 +0200
+
+		config.guess: support running on Managarm systems
+
+	commit 87e6687749da7bb2ab158a79fa83721c19ed9246
+	Author: Arsen Arsenovi <arsen@aarsen.me>
+	Date:   Sat Sep 17 23:34:46 2022 +0200
+
+		config.sub: add managarm-{mlibc,kernel} targets
+
+	commit 20403c5701973a4cbd7e0b4bbeb627fcd424a0f1
+	Author: Xiaotian Wu <wuxiaotian@loongson.cn>
+	Date:   Mon Aug 1 16:05:29 2022 +0800
+
+		Remove loongarchx32
+
+	commit 02ba26b218d3d3db6c56e014655faf463cefa983
+	Author: Alexander von Gluck IV <kallisti5@unixzen.com>
+	Date:   Wed May 25 15:43:13 2022 -0500
+
+		config.guess: Update Haiku guesses
+
+	commit f56a7140386d08a531bcfd444d632b28c61a6329
+	Author: Bruno Haible <bruno@clisp.org>
+	Date:   Sun May 8 19:08:08 2022 +0200
+
+		config.guess (x86_64:Linux:*:*): Detect 32-bit ABI.
+
+2023-04-20  Nick Clifton  <nickc@redhat.com>
+
+	* SECURITY.txt: New file.
+	* src-release.sh (DEVO_SUPPORT): Add SECURITY.txt.
+
+2022-12-31  Nick Clifton  <nickc@redhat.com>
+
+	* 2.40 binutils branch created.
+
+2022-10-10  Nick Clifton  <nickc@redhat.com>
+
+	* src-release.sh: Add "-r <date>" option to create reproducible
+	tarballs based upon a fixed timestamp of <date>.
+	* binutils/README-how-to-make-a-release: Add a line showing how to
+	use -r <date> when creating a binutils release.
+
+2022-10-04  Nick Clifton  <nickc@redhat.com>
+
+	* README-maintainer-mode: Add a minimum version of dejagnu
+	requirement.
+
+2022-09-08  Nick Clifton  <nickc@redhat.com>
+
+	* README-maintainer-mode: Update minimum version  of gettext
+	required.
+
+2022-07-08  Nick Clifton  <nickc@redhat.com>
+
+	* 2.39 branch created.
+
+2022-07-04  Nick Clifton  <nickc@redhat.com>
+
+	* libiberty: Synchronize with GCC.  Bring in:
+	2022-07-01  Nick Clifton  <nickc@redhat.com>
+
+	PR demangler/105039
+	* rust-demangle.c (demangle_const): Add recursion limit.
+
+	2022-06-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* configure.ac: Add AC_CONFIG_MACRO_DIRS call.
+	* configure: Re-generate.
+
+2022-04-12  Nick Clifton  <nickc@redhat.com>
+
+	* zlib: Rebase to the 1.2.12 release.
+
+2022-04-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* configure.ac: Add AC_SUBST(PKG_CONFIG_PATH).
+	* configure: Re-generate.
+	* Makefile.tpl (HOST_EXPORTS): Pass PKG_CONFIG_PATH.
+	(PKG_CONFIG_PATH): New.
+	* Makefile.in: Re-generate.
+
+2022-03-15  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* gprofng/src/gp-collect-app.cc (collect::check_args): Use
+	fallthrough comment instead of attribute.
+
+2022-03-11  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>
+
+	* Makefile.def: Add gprofng module.
+	* configure.ac: Add --enable-gprofng option.
+	* src-release.sh: Add gprofng.
+	* Makefile.in: Regenerate.
+	* configure: Regenerate.
+	* gprofng: New directory.
+
+2022-01-22  Nick Clifton  <nickc@redhat.com>
+
+	* 2.38 release branch created.
+
+2022-01-17  Nick Clifton  <nickc@redhat.com>
+
+	Update config.[guess|sub] from upstream:
+
+	2022-01-09  Idan Horowitz  <idan.horowitz@gmail.com>
+
+	config.guess: recognize SerenityOS
+	* config.guess (*:SerenityOS:*:*): Recognize.
+	(timestamp): Update.
+
+	2022-01-03  Bernhard Voelker  <mail@bernhard-voelker.de>
+
+	Fix GPLv3 license headers to use a comma instead of semicolon
+	See: https://www.gnu.org/licenses/gpl-3.0.html#howto
+
+	Update license headers automatically using the following script:
+
+	  $ git grep -l 'Foundation; either version 3' \
+	    | xargs sed -i '/Foundation; either version 3/ s/n; e/n, e/'
+
+	* config.guess: Adjust via the above command.
+	(timestamp): Update.
+	* config.sub: Likewise.
+	* doc/config.guess.1: Regenerate.
+	* doc/config.sub.1: Likewise.
+
+	2022-01-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Update copyright years
+	* config.guess: Update copyright years.
+	* config.sub: Likewise.
+
+	2021-12-25  Dmitry V. Levin  <ldv@altlinux.org>
+
+	config.sub: alias armh to armv7l
+	ALT uses armh as an alias for armv7l-alt-linux-gnueabihf since 2012.
+
+	* config.sub (armh-unknown|armh-alt): Set cpu, vendor, and basic_os.
+	(timestamp): Update.
+
+	2021-12-24  Dmitry V. Levin  <ldv@altlinux.org>
+
+	config.sub: alias aarch64le to aarch64
+	Apparently, QNX reports aarch64 as aarch64le on little-endian machines.
+
+	* config.sub (aarch64le-*): Set cpu to aarch64.
+	(timestamp): Update.
+
+	2021-12-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	config.sub: fix typo in timestamp
+	* config.sub: Fix timestamp.
+
+	2021-11-30  Andreas F. Borchert  <github@andreas-borchert.de>
+
+	config.guess: x86_64-pc-solaris2.11 is not properly recognized
+	config.guess guesses Solaris 11 to run on a 32-bit platform
+	despite Solaris 11 no longer supporting any 32-bit platform.
+
+	See the following code at lines 434 to 445:
+
+	| SUN_ARCH=i386
+	| # If there is a compiler, see if it is configured for 64-bit objects.
+	| # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	| # This test works for both compilers.
+	| if test "$CC_FOR_BUILD" != no_compiler_found; then
+	|     if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+	|         (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+	|         grep IS_64BIT_ARCH >/dev/null
+	|     then
+	|         SUN_ARCH=x86_64
+	|     fi
+	| fi
+
+	If "cc" is installed, i.e. the Oracle Studio compiler, this one is
+	chosen for $CC_FOR_BUILD.  This compiler, the gcc provided by Oracle
+	and also gcc bootstrapped from sources on that platform with a default
+	configuration will by default generate 32-bit binaries -- even on
+	a 64-bit platform.  And __amd64 will not be defined for compilations
+	targeting a 32-bit platform.  This is different from the corresponding
+	behaviour on GNU/Linux systems where the local platform is targeted by
+	default.
+
+	Thus, as long as you do not add "-m64" or if you have a custom-built
+	gcc which defaults to 64 bit, you will get 32-bit binaries on Solaris
+	despite living on a 64-bit platform.
+
+	* config.guess (i86pc:SunOS:5.*:* || i86xen:SunOS:5.*:*): Adapt the
+	test by adding the "-m64" flag.  This will work properly for Solaris
+	10 as well (the last Solaris release that supported x86 32-bit
+	platforms).
+
+	2021-10-27  Jordi Sanfeliu  <jordi@fibranet.cat>
+
+	Recognize Fiwix
+	$ make check
+	cd testsuite && bash config-guess.sh && rm uname
+	PASS: config.guess checks (137 tests)
+	cd testsuite && bash config-sub.sh
+	PASS: config.sub checks (882 tests)
+	PASS: config.sub idempotency checks (819 tests)
+	PASS: config.sub canonicalise each config.guess testcase (137 tests)
+
+	* config.guess (i*86:Fiwix:*:*): Recognize.
+	* config.sub (fiwix*): Likewise.
+
+	2021-10-18  Kinshuk Dua  <kinshukdua@gmail.com>
+
+	config.sub: Fix typo in comment
+	Fixes: 5e531d391852a54e7fab2d8ff55625fca514b305
+
+	2021-08-14  Nick Bowler  <nbowler@draconx.ca>
+
+	config.sub: work around command assignment bug in some shells
+	When combining variable assignments with a shell command, some older
+	shells (notably heirloom-sh and presumably also Solaris 10 /bin/sh)
+	have a bug which causes the assignment to alter the current execution
+	environment whenever the command is a shell built-in.  For example:
+
+	  % dash -c 'x=good; x=bad echo >/dev/null; echo $x'
+	  good
+
+	  % jsh -c 'x=good; x=bad echo >/dev/null; echo $x'
+	  bad
+
+	The config.sub script contains a few commands of the form:
+
+	  IFS=- read ...
+
+	which triggers this bug, causing the IFS assignment to persist for the
+	remainder of the script.  This can cause misbehaviour in certain cases,
+	for example:
+
+	  % jsh config.sub i386-linux-gnu
+	  config.sub: test: unknown operator gnu
+
+	  % jsh config.sub i386-gnu/linux
+	  sed: can't read s|gnu/linux|gnu|: No such file or directory
+	  Invalid configuration `i386-gnu/linux': OS `' not recognized
+
+	* config.sub: Save and restore IFS explicitly to avoid shell bugs.
+	* doc/config.sub.1: Regenerate.
+
+	2021-08-04  Jeremy Soller  <jackpot51@gmail.com>
+
+	config.sub: add Linux Relibc Target
+	$ make check
+	cd testsuite && bash config-guess.sh && rm uname
+	PASS: config.guess checks (136 tests)
+	cd testsuite && bash config-sub.sh
+	PASS: config.sub checks (881 tests)
+	PASS: config.sub idempotency checks (818 tests)
+	PASS: config.sub canonicalise each config.guess testcase (136 tests)
+
+	* config.sub (relibc*): Recognize.
+	* doc/config.sub.1: Regenerate.
+	* testsuite/config-sub.data (x86_64-linux-relibc): New test.
+
+	2021-07-06  Stephanos Ioannidis  <root@stephanos.io>
+
+	config.sub: add Zephyr RTOS support
+	This adds the Zephyr RTOS targets in preparation for implementing the
+	Zephyr RTOS-specific toolchain support.
+
+	$ make check
+	cd testsuite && bash config-guess.sh && rm uname
+	PASS: config.guess checks (136 tests)
+	cd testsuite && bash config-sub.sh
+	PASS: config.sub checks (880 tests)
+	PASS: config.sub idempotency checks (817 tests)
+	PASS: config.sub canonicalise each config.guess testcase (136 tests)
+
+	* config.sub (zephyr*): Recognize.
+	* doc/config.sub.1: Regenerate.
+	* testsuite/config-sub.data: Add testcases for *-zephyr.
+
+	2021-07-03  Ozkan Sezer  <sezero@users.sourceforge.net>
+
+	config.sub: disable shellcheck SC2006 / SC2268 warnings
+	This is in line with the recent config.guess change in commit
+	12fcf67c9108f4c4b581eaa302088782f0ee40ea
+
+	* config.sub (shellcheck disable): Add SC2006,SC2268.
+
+	Suggested-by: Jacob Bachmeyer <jcb@gnu.org>
+
+	2021-07-03  Ozkan Sezer  <sezero@users.sourceforge.net>
+
+	config.sub: normalize the quoting in the `echo FOO | sed ...`
+	Some cases quote the argument to echo and some do not.  At runtime
+	it probably does not matter because the substituted values will never
+	contain whitespace, but quoting them all would make shellcheck more
+	useful.
+
+	* config.sub: Consistently quote the argument of echo.
+	* doc/config.sub.1: Regenerate.
+
+	Suggested-by: Jacob Bachmeyer <jcb@gnu.org>
+
+	2021-07-02  Ozkan Sezer  <sezero@users.sourceforge.net>
+
+	config.sub: replace POSIX $( ) with classic ` ` throughout
+	This is in line with the recent config.guess change in commit
+	d70c4fa934de164178054c3a60aaa0024ed07c91.
+
+	The patch was generated using patch-6.gawk script introduced in that
+	commit.
+
+	* config.sub: Revert POSIX command substitutions to classic form.
+
+	2021-06-04  Vineet Gupta  <Vineet.Gupta1@synopsys.com>
+
+	Recognize arc32
+	This is the 32-bit variant of ARCv3 ISA (which is not compatible with the
+	32-bit ARCv2 ISA)
+
+	| make check
+	| cd testsuite && bash config-guess.sh && rm uname
+	| PASS: config.guess checks (136 tests)
+	| cd testsuite && bash config-sub.sh
+	| PASS: config.sub checks (864 tests)
+	| PASS: config.sub idempotency checks (801 tests)
+	| PASS: config.sub canonicalise each config.guess testcase (136 tests)
+
+	* config.guess (arc32:Linux:*:*): Recognize.
+	* config.sub (arc32): Likewise.
+
+	2021-05-27  Jacob Bachmeyer  <jcb@gnu.org>
+
+	Remove automatic patch generators
+	These tools have served their purposes and need not be kept outside of
+	the repository history any longer.  This patch as a diff also collects
+	the contents of the various tools in one convenient place.
+
+	* patch-1.gawk: Remove.
+	* patch-3.gawk: Likewise.
+	* patch-6.gawk: Likewise.
+
+	2021-05-26  Jacob Bachmeyer  <jcb@gnu.org>
+
+	config.guess: manual fixups after previous automatic patch
+	The tool could not handle command substitutions that span lines, but
+	fortunately there were only two such substitutions in the script.
+
+	The test for which universe is active on Pyramid is rewritten into a
+	case block because it was the only use of a command substitution as an
+	argument to the test command, which would require quoting.
+
+	* config.guess: Rewrite "if" for Pyramid systems to "case".
+
+	2021-05-26  Jacob Bachmeyer  <jcb@gnu.org>
+
+	config.guess: replace POSIX $( ) with classic ` ` throughout
+	The previous replacement of backticks with POSIX command substitutions
+	was ill-considered and illogical: this script recognizes many archaic
+	machine types that probably never had POSIX shells, therefore it needs
+	to be able to run successfully under pre-POSIX shells.
+
+	This patch was generated using the included GNU Awk program.
+
+	* config.guess: Revert POSIX command substitutions to classic form.
+	* patch-6.gawk: Store the tool that produced the automated patch.
+
+	2021-05-26  Jacob Bachmeyer  <jcb@gnu.org>
+
+	config.guess: manual fixup after previous automated patches
+	This patch provides the special handling for the GNU system.  As these
+	were two small and unique edits, they were not included in the scripts.
+
+	This patch also cleans up other minor issues that must be addressed
+	before reverting to classic command substitutions and updates
+	"shellcheck" directives to account for changes in this script and the
+	change in "shellcheck" towards reporting individual portability issues.
+
+	2021-05-26  Jacob Bachmeyer  <jcb@gnu.org>
+
+	config.guess: automatic fixups after previous automated patch
+	This patch was generated using the following command:
+
+	  sed -i config.guess \
+	      -e '/="[^"]\+"\(-\|$\)/s/="\([^"([:space:])]\+\)"/=\1/' \
+	      -e '/="[^"]\+"[[:alnum:]]/s/="\$\([^([:space:])]\+\)"/=${\1}/' \
+	      -e \
+	'/\$(echo[^|]\+|/s/\([^[:space:]]\)[[:space:]]*|[[:space:]]*sed/\1 | sed/g'
+
+	* config.guess: Remove unneeded quotes in other variable assignments,
+	standardize spacing for "echo ... | sed" substitutions.
+
+	2021-05-26  Jacob Bachmeyer  <jcb@gnu.org>
+
+	config.guess: remove unneeded quotes and factor command substitutions
+	This is further cleanup and simplifies some constructs that can confuse
+	Emacs' syntax highlighting while generally reducing required quoting.
+
+	This patch was generated using the included GNU Awk program.
+
+	* config.guess: Remove unneeded variable quotes and factor out command
+	substitutions when setting GUESS.
+	* patch-3.gawk: Store the tool that produced the automated patch.
+
+	2021-05-25  Jacob Bachmeyer  <jcb@gnu.org>
+
+	config.guess: manual fixups after previous automatic patch
+	* config.guess: Adjust a few "leftover" cases that the tool could not
+	easily recognize and fixes comment indentation in a few other special
+	cases.
+
+	2021-05-25  Jacob Bachmeyer  <jcb@gnu.org>
+
+	config.guess: use intermediate variable with uname results
+	This will allow quoting to be significantly simplified in another
+	pass through the file.
+
+	This patch was generated using the included GNU Awk program.
+
+	* config.guess: Use GUESS variable to hold results of uname analysis.
+	* patch-1.gawk: Store the tool that produced the automated patch.
+
+	2021-05-25  Jacob Bachmeyer  <jcb@gnu.org>
+
+	config.guess: introduce intermediate variable with uname results
+	This will allow quoting to be significantly simplified in another
+	pass through the file.
+
+	* config.guess: Introduce GUESS variable to hold results of uname analysis.
+
+	2021-05-24  Dmitry V. Levin  <ldv@altlinux.org>
+
+	config.guess: fix shellcheck warning SC2154
+	While, according to Plan 9 documentation, the environment variable
+	$cputype is set to the name of the kernel's CPU's architecture,
+	shellcheck warns that cputype is referenced but not assigned.
+	Be on the safe side and do not use cputype if it is not defined
+	or empty.
+
+	* config.guess (*:Plan9:*:*): Fix shellcheck warning SC2154.
+
+	2021-05-24  Dmitry V. Levin  <ldv@altlinux.org>
+
+	config.guess: remove redundant quotes in case commands
+	According to the GNU Autoconf Portable Shell Programming manual,
+	the Bourne shell does not systematically split variables and back-quoted
+	expressions, in particular on the right-hand side of assignments and in
+	the argument of 'case'.
+
+	The change is made automatically using the following command:
+	$ sed -E -i 's/(\<case )"(\$[^"]+)"( in\>)/\1\2\3/' config.guess
+
+	* config.guess: Simplify case commands by removing quotes around the
+	argument.
+
+	Suggested-by: Jacob Bachmeyer <jcb@gnu.org>
+
+	2021-05-24  Dmitry V. Levin  <ldv@altlinux.org>
+
+	config.guess: simplify exit status workaround on alphaev67-dec-osf5.1
+	Commit 29865ea8a5622cdd80b7a69a0afa78004b4cd311 introduced an exit trap
+	reset before exiting to avoid a spurious non-zero exit status on
+	alphaev67-dec-osf5.1.  Simplify that code a bit by moving the exit trap
+	reset around.
+
+	* config.guess (alpha:OSF1:*:*): Reset exit trap earlier.
+	* doc/config.guess.1: Regenerate.
+
+2021-10-29  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb/doc/gdb.texinfo (Command Options): (Data): Document
+	'-memory-tag-violations'.  Update the example.
+
+2021-09-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* src-release.sh (GDB_SUPPPORT_DIRS): Add libbacktrace.
+
+2021-09-27  Nick Alcock  <nick.alcock@oracle.com>
+
+	PR libctf/27967
+	* libtool.m4 (LT_PATH_NM): Try BSDization flags with a user-provided
+	NM, if there is one.  Run nm on itself, not on /dev/null, to avoid
+	errors from nms that refuse to work on non-regular files.  Remove
+	other workarounds for this problem.  Strip out blank lines from the
+	nm output.
+
+2021-09-27  Nick Alcock  <nick.alcock@oracle.com>
+
+	PR libctf/27967
+	* libtool.m4 (lt_cv_sys_global_symbol_pipe): Augment symcode for
+	Solaris 11.
+
+2021-07-03  Nick Clifton  <nickc@redhat.com>
+
+	* 2.37 release branch created.
+
+2021-07-03  Nick Clifton  <nickc@redhat.com>
+
+	* libiberty: Sync with gcc.  Bring in:
+	2021-06-30  Gerald Pfeifer  <gerald@pfeifer.com>
+
+	* make-temp-file.c (usrtmp): Remove.
+	(choose_tmpdir): Remove use of usrtmp.
+
+	2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
+
+	* simple-object.c (handle_lto_debug_sections): Copy over .BTF section.
+
+	2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
+	    David Faust  <david.faust@oracle.com>
+	    Jose E. Marchesi  <jose.marchesi@oracle.com>
+	    Weimin Pan  <weimin.pan@oracle.com>
+
+	* simple-object.c (handle_lto_debug_sections): Copy over .ctf
+	sections.
+
+	2021-06-05  John David Anglin  <danglin@gcc.gnu.org>
+
+	PR target/100734
+	* configure.ac: Use libiberty snprintf and vsnprintf on
+	hppa*-*-hpux*.
+	* configure: Regenerate.
+
+	2021-05-06  Tom Tromey  <tom@tromey.com>
+
+	* hashtab.c (htab_eq_string): New function.
+
+	2021-05-04  Eric Botcazou  <ebotcazou@adacore.com>
+
+	* configure.ac: Make test for variables more robust.
+	* configure: Regenerate.
+
+	2021-05-03  H.J. Lu  <hjl.tools@gmail.com>
+
+	PR bootstrap/99703
+	* configure: Regenerated.
+
+	2021-04-21  Andreas Schwab  <schwab@linux-m68k.org>
+
+	PR demangler/100177
+	* rust-demangle.c (demangle_const_char): Properly print the
+	character value.
+
+	2021-03-31  Patrick Palka  <ppalka@redhat.com>
+
+	PR c++/88115
+	* cp-demangle.c (d_dump, d_make_comp, d_expression_1)
+	(d_count_templates_scopes): Handle DEMANGLE_COMPONENT_VENDOR_EXPR.
+	(d_print_comp_inner): Likewise.
+	<case DEMANGLE_COMPONENT_EXTENDED_OPERATOR>: Revert r11-4926
+	change.
+	<case DEMANGLE_COMPONENT_UNARY>: Likewise.
+	* testsuite/demangle-expected: Adjust __alignof__ tests.
+
+	2021-03-16  Nick Clifton  <nickc@redhat.com>
+
+	* sha1.c (sha1_process_bytes): Use memmove in place of memcpy.
+
+	2021-02-20  Mike Frysinger  <vapier@gentoo.org>
+
+	* Makefile.in (ACLOCAL, ACLOCAL_AMFLAGS, $(srcdir)/aclocal.m4): Define.
+	(configure_deps): Rename to ...
+	(aclocal_deps): ... this.  Replace aclocal.m4 with acinclude.m4.
+	($(srcdir)/configure): Replace $(configure_deps) with
+	$(srcdir)/aclocal.m4.
+	* aclocal.m4: Move libiberty macros to acinclude.m4, then regenerate.
+	* acinclude.m4: New file.
+	* configure: Regenerate.
+
+	2021-02-19  Ayush Mittal  <ayush.m@samsung.com>
+
+	* argv.c (expandargv): free allocated buffer if read fails.
+
+	2021-02-01  Martin Sebor  <msebor@redhat.com>
+
+	* dyn-string.c (dyn_string_insert_cstr): Use memcpy instead of strncpy
+	to avoid -Wstringop-truncation.
+
+2021-05-29  Mike Frysinger  <vapier@gentoo.org>
+
+	* configure.ac: Add gnulib to configdirs for sim.
+	* configure: Regenerate.
+
+2021-05-24  Maciej W. Rozycki  <macro@orcam.me.uk>
+
+	* MAINTAINERS: Update path to readline config.{sub,guess} files.
+
+2021-05-24  Maciej W. Rozycki  <macro@orcam.me.uk>
+
+	* config.guess: Import from upstream.
+	* config.sub: Likewise.
+
+2021-05-18  Mike Frysinger  <vapier@gentoo.org>
+
+	* Makefile.def: Add configure-sim dependency on all-gnulib.
+	* Makefile.in: Regenerated.
+
+2021-05-04  Nick Clifton  <nickc@redhat.com>
+
+	* configure.ac (AC_PROG_CC): Replace with AC_PROG_CC_C99.
+	* configure: Regenerate.
+
+2021-03-18  Nick Alcock  <nick.alcock@oracle.com>
+
+	PR libctf/27482
+	* Makefile.def: Add install-bfd dependencies for install-libctf and
+	install-ld, and install-strip-bfd dependencies for
+	install-strip-libctf and install-strip-ld; move the install-ld
+	dependency on install-libctf to join it.
+	* Makefile.in: Regenerated.
+
+2021-03-12  Mike Frysinger  <vapier@gentoo.org>
+
+	* Makefile.def: Remove all-sim dependency on configure-gdb.
+	* Makefile.in: Regenerated.
+
+2021-02-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/26766
+	* Makefile.tpl (PGO_BUILD_TRAINING_FLAGS_TO_PASS): Add
+	PGO_BUILD_TRAINING=yes.
+	(PGO_BUILD_TRAINING_MFLAGS): New.
+	(all): Pass $(PGO_BUILD_TRAINING_MFLAGS) to the PGO build.
+
+2021-02-09  Alan Modra  <amodra@gmail.com>
+
+	* configure.ac: Delete arm*-*-symbianelf* entry.
+	* configure: Regenerate.
+
+2021-01-26  Nick Alcock  <nick.alcock@oracle.com>
+
+	* Makefile.def: Add install-libctf dependency to install-ld.
+	* Makefile.in: Regenerated.
+
+2021-01-12  Mike Frysinger  <vapier@gentoo.org>
+
+	* src-release.sh (do_proto_toplev): Rewrite indentation.
+
+2021-01-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/26766
+	* configure.ac:
+	* configure: Regenerated.
+
+2021-01-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27173
+	* configure: Regenerated.
+	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Check if AR works with
+	--plugin and rc before enabling --plugin.
+
+2021-01-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/26766
+	* Makefile.tpl (BUILD_CFLAGS): New.
+	(CFLAGS): Append $(BUILD_CFLAGS).
+	(CXXFLAGS): Likewise.
+	(PGO_BUILD_GEN_FLAGS_TO_PASS): New.
+	(PGO_BUILD_TRAINING_CFLAGS): Likewise.
+	(PGO_BUILD_TRAINING_CXXFLAGS): Likewise.
+	(PGO_BUILD_TRAINING_FLAGS_TO_PASS): Likewise.
+	(PGO_BUILD_TRAINING_MFLAGS): Likewise.
+	(PGO_BUILD_USE_FLAGS_TO_PASS): Likewise.
+	(PGO-TRAINING-TARGETS): Likewise.
+	(PGO_BUILD_TRAINING): Likewise.
+	(all): Add '+' to the command line for recursive make.  Support
+	the PGO build.
+	* configure.ac: Add --enable-pgo-build[=lto].
+	AC_SUBST PGO_BUILD_GEN_CFLAGS, PGO_BUILD_USE_CFLAGS and
+	PGO_BUILD_LTO_CFLAGS.  Enable the PGO build in Makefile.
+	* Makefile.in: Regenerated.
+	* configure: Likewise.
+
+2021-01-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
+	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
+	* configure.ac: Include config/gcc-plugin.m4.
+	AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
+	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
+	RANLIB if possible.
+	* Makefile.in: Regenerated.
+	* configure: Likewise.
+
+2021-01-09  Nick Clifton  <nickc@redhat.com>
+
+	* 2.36 release branch crated.
+
+2021-01-07  Samuel Thibault  <samuel.thibault@gnu.org>
+
+	* libtool.m4: Match gnu* along with other GNU systems.
+
+2021-01-07  Alan Modra  <amodra@gmail.com>
+
+	* config.sub: Accept OS of eabi* and gnueabi*.
+
+2021-01-05  Nick Alcock  <nick.alcock@oracle.com>
+
+	* Makefile.def (libctf): No longer no_check.  Checking depends on
+	all-ld.
+	* Makefile.in: Regenerated.
+
+2021-01-05  Nick Clifton  <nickc@redhat.com>
+
+	* libiberty: Sync with gcc.  Bring in:
+	2021-01-04  Martin Liska  <mliska@suse.cz>
+
+	* strverscmp.c: Convert to utf8 from iso8859.
+
+	2020-12-22  Jason Merrill  <jason@redhat.com>
+
+	PR c++/67343
+	* cp-demangle.h (struct d_info): Add unresolved_name_state.
+	* cp-demangle.c (d_prefix): Add subst parm.
+	(d_nested_name): Pass it.
+	(d_unresolved_name): Split out from...
+	(d_expression_1): ...here.
+	(d_demangle_callback): Maybe retry with old sr mangling.
+	* testsuite/demangle-expected: Add test.
+
+	2020-12-21  Jason Merrill  <jason@redhat.com>
+
+	* cp-demangle.c (d_expression_1): Recognize qualified-id
+	on RHS of dt/pt.
+	* testsuite/demangle-expected: Add test.
+
+	2020-12-21  Jason Merrill  <jason@redhat.com>
+
+	* cp-demangle.c (d_unqualified_name): Clear is_expression.
+	* testsuite/demangle-expected: Add tests.
+
+	2020-11-25  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+	* configure: Regenerate.
+	* configure.ac: Avoid using sanitizer.
+
+	2020-11-13  Eduard-Mihai Burtescu  <eddyb@lyken.rs>
+
+	* rust-demangle.c (struct rust_demangler): Add
+	skipping_printing and bound_lifetime_depth fields.
+	(eat): Add (v0-only).
+	(parse_integer_62): Add (v0-only).
+	(parse_opt_integer_62): Add (v0-only).
+	(parse_disambiguator): Add (v0-only).
+	(struct rust_mangled_ident): Add punycode{,_len} fields.
+	(parse_ident): Support v0 identifiers.
+	(print_str): Respect skipping_printing.
+	(print_uint64): Add (v0-only).
+	(print_uint64_hex): Add (v0-only).
+	(print_ident): Respect skipping_printing,
+	Support v0 identifiers.
+	(print_lifetime_from_index): Add (v0-only).
+	(demangle_binder): Add (v0-only).
+	(demangle_path): Add (v0-only).
+	(demangle_generic_arg): Add (v0-only).
+	(demangle_type): Add (v0-only).
+	(demangle_path_maybe_open_generics): Add (v0-only).
+	(demangle_dyn_trait): Add (v0-only).
+	(demangle_const): Add (v0-only).
+	(demangle_const_uint): Add (v0-only).
+	(basic_type): Add (v0-only).
+	(rust_demangle_callback): Support v0 symbols.
+	* testsuite/rust-demangle-expected: Add v0 testcases.
+
+	2020-11-13  Seija Kijin  <doremylover456@gmail.com>
+
+	* strstr.c (strstr): Make implementation ANSI/POSIX compliant.
+
+	2020-11-11  Patrick Palka  <ppalka@redhat.com>
+
+	PR c++/88115
+	* cp-demangle.c (d_print_comp_inner)
+	<case DEMANGLE_COMPONENT_EXTENDED_OPERATOR>: Don't print the
+	"operator " prefix for __alignof__.
+	<case DEMANGLE_COMPONENT_UNARY>: Always print parens around the
+	operand of __alignof__.
+	* testsuite/demangle-expected: Test demangling for __alignof__.
+
+	2020-11-09  Christophe Lyon  <christophe.lyon@linaro.org>
+
+	* pex-win32.c (pex_win32_exec_child): Initialize orig_err.
+
+	2020-10-06  Martin Liska  <mliska@suse.cz>
+
+	PR lto/97290
+	* simple-object-elf.c (simple_object_elf_copy_lto_debug_sections):
+	Use sh_link of a .symtab_shndx section.
+
+2021-01-05  Alan Modra  <amodra@gmail.com>
+
+	* config.guess: Import from upstream.
+	* config.sub: Likewise.
+
+2020-12-16  Martin Liska  <mliska@suse.cz>
+	    Tom de Vries  <tdevries@suse.de>
+
+	* gdb/debuginfod-support.c (struct user_data): Remove has_printed
+	field.  Add meter field.
+	(progressfn): Print progress using meter.
+
+2020-12-02  Enze Li  <lienze2010@hotmail.com>
+
+	* .gitignore: Add gnu global outputs.
+
+2020-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* .gitignore: Sync with gcc.
+
+2020-10-26  Andreas Rammhold <andreas@rammhold.de>
+
+	* src-release.sh: Use sha256sum instead of md5sum.
+
+2020-10-14  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* Makefile.in: Rebuild.
+	* Makefile.def: Make distclean-gnulib depend on distclean-gdb and
+	distclean-gdbserver.
+
+2020-07-24  Aaron Merey  <amerey@redhat.com>
+
+	* configure: Rebuild.
+	* configure.ac: Remove AC_DEBUGINFOD.
+
+2020-07-04  Nick Clifton  <nickc@redhat.com>
+
+	Binutils 2.35 branch created.
+
+2020-04-21  Stephen Casner  <casner@acm.org>
+
+	PR 25830
+	* configure.ac (noconfigdirs): Exclude gdb & gprof for pdp11.
+	* configure: Rebuild.
+
+2020-03-12  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in: Rebuild.
+	* Makefile.def (gdbserver): Depend on gdbsupport.
+
+2020-03-12  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in: Rebuild.
+	* Makefile.def (gdbsupport): Don't depend on bfd.
+
+2020-03-12  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in: Rebuild.
+	* Makefile.def (gdbsupport): Depend on intl.
+
+2020-02-17  Tom Tromey  <tom@tromey.com>
+
+	* configure: Rebuild.
+	* configure.ac (configdirs): Add gnulib and gdbsupport when building
+	gdbserver.
+
+2020-02-14  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in: Rebuild.
+	* Makefile.def: Make gdbserver require gnulib and libiberty.
+
+2020-02-07  Tom Tromey  <tom@tromey.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* src-release.sh (GDB_SUPPORT_DIRS): Add gdbserver.
+	* gdbserver: New directory, moved from gdb/gdbserver.
+	* configure.ac (host_tools): Add gdbserver.
+	Only build gdbserver on certain systems.
+	* Makefile.in, configure: Rebuild.
+	* Makefile.def (host_modules, dependencies): Add gdbserver.
+	* MAINTAINERS: Add gdbserver.
+
+2020-01-28  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* src-release.sh (getver): Look for gdbsupport's
+	create-version.sh script at the current directory if tool is
+	"gdb".
+
+2020-01-19  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* remote-sim.c (gdbsim_target::wait): Return
+	sim_data->remote_sim_ptid instead of inferior_ptid.
+
+2020-01-18  Nick Clifton  <nickc@redhat.com>
+
+	Binutils 2.34 branch created.
+
+2020-01-18  Nick Clifton  <nickc@redhat.com>
+
+	Synchronize top level configure files with master version:
+
+	2020-01-01  Ben Elliston  <bje@gnu.org>
+
+	* config.guess: Update copyright years.
+	* config.sub: Likewise.
+
+	2019-12-21  Ben Elliston  <bje@gnu.org>
+
+	* config.guess (set_cc_for_build): Prevent multiple calls by
+	checking if $tmp is already set. We can't check CC_FOR_BUILD as
+	the user may set it externally. Thanks to TorbjÃ¶rn Granlund for
+	the bug report.
+
+	2019-12-21  TorbjÃ¶rn Granlund  <tg@gmplib.org>
+
+	* config.guess (alpha:Linux:*:*): Guard against missing
+	/proc/cpuinfo by redirecting standard error to /dev/null.
+
+	2019-09-12  Daniel Bittman  <danielbittman1@gmail.com>
+
+	* config.guess (*:Twizzler:*:*): New.
+	* config.sub (-twizzler*): New.
+
+	2019-07-24  Ben Elliston  <bje@gnu.org>
+
+	* config.guess (mips:OSF1:*.*): Whitespace cleanup.
+
+	2019-06-30  Ben Elliston  <bje@gnu.org>
+
+	* config.sub (case $os): Match nsk* and powerunix. Don't later
+	match nsk* and set os=nsk which removes the OS version number.
+
+	2019-06-30  Ben Elliston  <bje@gnu.org>
+
+	* config.sub: Recognise os108*.
+
+	2019-06-26  Ben Elliston  <bje@gnu.org>
+
+	* config.sub (hp300): Set $os to hpux.
+
+	2019-06-26  Ben Elliston  <bje@gnu.org>
+
+	* config.sub (vsta): Move into alphabetical order.
+
+	2019-06-10  Ben Elliston  <bje@gnu.org>
+
+	* config.guess (*:OS108:*:*): Recognise new OS.
+
+	2019-05-28  Ben Elliston  <bje@gnu.org>
+
+	* config.guess (*:Darwin:*:*): Run xcode-select to determine if a
+	system compiler is installed. If not, do not run set_cc_for_build,
+	as the default cc will open a dialog box asking to install
+	Xcode. If no C compiler is available, guess based on uname -p and
+	uname -m.
+
+	2019-05-28  Ben Elliston  <bje@gnu.org>
+
+	* config.guess (*:Darwin:*:*): Simplify UNAME_PROCESSOR.
+
+2020-01-17  Simon Marchi  <simon.marchi@efficios.com>
+
+	* Makefile.def: Add dependencies of all-gdbsupport on all-bfd.
+	* Makefile.in: Re-generate.
+
+2020-01-14  Tom Tromey  <tom@tromey.com>
+
+	* src-release.sh (GDB_SUPPORT_DIRS): Add gdbsupport.
+	* MAINTAINERS: Add gdbsupport.
+	* configure: Rebuild.
+	* configure.ac (configdirs): Add gdbsupport.
+	* gdbsupport: New directory, move from gdb/gdbsupport.
+	* Makefile.def (host_modules, dependencies): Add gnulib.
+	* Makefile.in: Rebuild.
+
+2020-01-09  Aaron Merey  <amerey@redhat.com>
+
+        * config/debuginfod.m4: New file. Add macro AC_DEBUGINFOD. Adds
+        new configure option --with-debuginfod.
+        * configure: Regenerate.
+        * configure.ac: Call AC_DEBUGINFOD.
+
+2019-12-26  Christian Biesinger  <cbiesinger@google.com>
+
+	* .gitignore: Add perf.data and perf.data.old.
+
 2019-10-17  Sergio Durigan Junior  <sergiodj@redhat.com>
 
 	* src-release.sh (GDB_SUPPORT_DIRS): Add libctf.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/acinclude.m4 ./config/acinclude.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/acinclude.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/acinclude.m4	2024-02-01 01:47:14.000000000 +0000
@@ -374,88 +374,6 @@ AC_SUBST(INTLLIB)
 ])
 
 dnl ====================================================================
-dnl Find the simulator library.
-AC_DEFUN([CYG_AC_PATH_SIM], [
-dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.. ../../../../../../../../../.."
-case "$target_cpu" in
-    powerpc)	target_dir=ppc ;;
-    sparc*)	target_dir=erc32 ;;
-    mips*)	target_dir=mips ;;
-    *)		target_dir=$target_cpu ;;
-esac
-dnl First look for the header file
-AC_MSG_CHECKING(for the simulator header file)
-AC_CACHE_VAL(ac_cv_c_simh,[
-for i in $dirlist; do
-    if test -f "${srcdir}/$i/include/remote-sim.h" ; then
-	ac_cv_c_simh=`(cd ${srcdir}/$i/include; ${PWDCMD-pwd})`
-	break
-    fi
-done
-])
-if test x"${ac_cv_c_simh}" != x; then
-    SIMHDIR="-I${ac_cv_c_simh}"
-    AC_MSG_RESULT(${ac_cv_c_simh})
-else
-    AC_MSG_RESULT(none)
-fi
-AC_SUBST(SIMHDIR)
-
-dnl See whether it's a devo or Foundry branch simulator
-AC_MSG_CHECKING(Whether this is a devo simulator )
-AC_CACHE_VAL(ac_cv_c_simdevo,[
-    CPPFLAGS="$CPPFLAGS $SIMHDIR"
-    AC_EGREP_HEADER([SIM_DESC sim_open.*struct _bfd], remote-sim.h,
-        ac_cv_c_simdevo=yes,
-        ac_cv_c_simdevo=no)
-])
-if test x"$ac_cv_c_simdevo" = x"yes" ; then
-    AC_DEFINE(HAVE_DEVO_SIM)
-fi
-AC_MSG_RESULT(${ac_cv_c_simdevo})
-AC_SUBST(HAVE_DEVO_SIM)
-
-dnl Next look for the library
-AC_MSG_CHECKING(for the simulator library)
-AC_CACHE_VAL(ac_cv_c_simlib,[
-for i in $dirlist; do
-    if test -f "$i/sim/$target_dir/Makefile" ; then
-	ac_cv_c_simlib=`(cd $i/sim/$target_dir; ${PWDCMD-pwd})`
-    fi
-done
-])
-if test x"${ac_cv_c_simlib}" != x; then
-    SIMLIB="-L${ac_cv_c_simlib}"
-else
-    AC_MSG_RESULT(none)
-    dnl FIXME: this is kinda bogus, cause umtimately the TM will build
-    dnl all the libraries for several architectures. But for now, this
-    dnl will work till then.
-dnl     AC_MSG_CHECKING(for the simulator installed with the compiler libraries)
-    dnl Transform the name of the compiler to it's cross variant, unless
-    dnl CXX is set. This is also what CXX gets set to in the generated
-    dnl Makefile.
-    CROSS_GCC=`echo gcc | sed -e "s/^/$target/"`
-
-    dnl Get G++'s full path to libgcc.a
-changequote(,)
-    gccpath=`${CROSS_GCC} --print-libgcc | sed -e 's:[a-z0-9A-Z\.\-]*/libgcc.a::' -e 's:lib/gcc-lib/::'`lib
-changequote([,])
-    if test -f $gccpath/libsim.a -o -f $gccpath/libsim.so ; then
-        ac_cv_c_simlib="$gccpath/"
-        SIMLIB="-L${ac_cv_c_simlib}"
-	AC_MSG_RESULT(${ac_cv_c_simlib})
-    else
-        AM_CONDITIONAL(PSIM, test x$psim = xno)
-	SIMLIB=""
-	AC_MSG_RESULT(none)
-dnl         ac_cv_c_simlib=none
-    fi
-fi
-AC_SUBST(SIMLIB)
-])
-
-dnl ====================================================================
 dnl Find the libiberty library.
 AC_DEFUN([CYG_AC_PATH_LIBIBERTY], [
 AC_MSG_CHECKING(for the libiberty library in the build tree)
@@ -477,26 +395,6 @@ AC_SUBST(LIBIBERTY)
 ])
 
 dnl ====================================================================
-AC_DEFUN([CYG_AC_PATH_DEVO], [
-AC_MSG_CHECKING(for devo headers in the source tree)
-dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
-AC_CACHE_VAL(ac_cv_c_devoh,[
-for i in $dirlist; do
-    if test -f "${srcdir}/$i/include/remote-sim.h" ; then
-	ac_cv_c_devoh=`(cd ${srcdir}/$i/include; ${PWDCMD-pwd})`
-    fi
-done
-])
-if test x"${ac_cv_c_devoh}" != x; then
-    DEVOHDIR="-I${ac_cv_c_devoh}"
-    AC_MSG_RESULT(${ac_cv_c_devoh})
-else
-    AC_MSG_RESULT(none)
-fi
-AC_SUBST(DEVOHDIR)
-])
-
-dnl ====================================================================
 dnl Find all the ILU headers and libraries
 AC_DEFUN([CYG_AC_PATH_ILU], [
 AC_MSG_CHECKING(for ILU kernel headers in the source tree)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/acx.m4 ./config/acx.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/acx.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/acx.m4	2024-02-01 01:47:14.000000000 +0000
@@ -393,9 +393,13 @@ AC_DEFUN([ACX_PROG_GNAT],
 AC_REQUIRE([AC_PROG_CC])
 AC_CHECK_TOOL(GNATBIND, gnatbind, no)
 AC_CHECK_TOOL(GNATMAKE, gnatmake, no)
-AC_CACHE_CHECK([whether compiler driver understands Ada],
+AC_CACHE_CHECK([whether compiler driver understands Ada and is recent enough],
 		 acx_cv_cc_gcc_supports_ada,
 [cat >conftest.adb <<EOF
+pragma Warnings (Off);
+with System.CRTL;
+pragma Warnings (On);
+use type System.CRTL.int64;
 procedure conftest is begin null; end conftest;
 EOF
 acx_cv_cc_gcc_supports_ada=no
@@ -420,6 +424,31 @@ else
 fi
 ])
 
+# Test for D.
+AC_DEFUN([ACX_PROG_GDC],
+[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
+AC_REQUIRE([AC_PROG_CC])
+AC_CHECK_TOOL(GDC, gdc, no)
+AC_CACHE_CHECK([whether the D compiler works],
+		 acx_cv_d_compiler_works,
+[cat >conftest.d <<EOF
+module conftest; int main() { return 0; }
+EOF
+acx_cv_d_compiler_works=no
+if test "x$GDC" != xno; then
+  errors=`(${GDC} $1[]m4_ifval([$1], [ ])-c conftest.d) 2>&1 || echo failure`
+  if test x"$errors" = x && test -f conftest.$ac_objext; then
+    acx_cv_d_compiler_works=yes
+  fi
+  rm -f conftest.*
+fi])
+if test "x$GDC" != xno && test x$acx_cv_d_compiler_works != xno; then
+  have_gdc=yes
+else
+  have_gdc=no
+fi
+])
+
 dnl 'make compare' can be significantly faster, if cmp itself can
 dnl skip bytes instead of using tail.  The test being performed is
 dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/ax_count_cpus.m4 ./config/ax_count_cpus.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/ax_count_cpus.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/ax_count_cpus.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,101 @@
+# ===========================================================================
+#      https://www.gnu.org/software/autoconf-archive/ax_count_cpus.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_COUNT_CPUS([ACTION-IF-DETECTED],[ACTION-IF-NOT-DETECTED])
+#
+# DESCRIPTION
+#
+#   Attempt to count the number of logical processor cores (including
+#   virtual and HT cores) currently available to use on the machine and
+#   place detected value in CPU_COUNT variable.
+#
+#   On successful detection, ACTION-IF-DETECTED is executed if present. If
+#   the detection fails, then ACTION-IF-NOT-DETECTED is triggered. The
+#   default ACTION-IF-NOT-DETECTED is to set CPU_COUNT to 1.
+#
+# LICENSE
+#
+#   Copyright (c) 2014,2016 Karlson2k (Evgeny Grin) <k2k@narod.ru>
+#   Copyright (c) 2012 Brian Aker <brian@tangent.org>
+#   Copyright (c) 2008 Michael Paul Bailey <jinxidoru@byu.net>
+#   Copyright (c) 2008 Christophe Tournayre <turn3r@users.sourceforge.net>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 22
+
+  AC_DEFUN([AX_COUNT_CPUS],[dnl
+      AC_REQUIRE([AC_CANONICAL_HOST])dnl
+      AC_REQUIRE([AC_PROG_EGREP])dnl
+      AC_MSG_CHECKING([the number of available CPUs])
+      CPU_COUNT="0"
+
+      # Try generic methods
+
+      # 'getconf' is POSIX utility, but '_NPROCESSORS_ONLN' and
+      # 'NPROCESSORS_ONLN' are platform-specific
+      command -v getconf >/dev/null 2>&1 && \
+        CPU_COUNT=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null` || CPU_COUNT="0"
+      AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null || ! command -v nproc >/dev/null 2>&1]],[[: # empty]],[dnl
+        # 'nproc' is part of GNU Coreutils and is widely available
+        CPU_COUNT=`OMP_NUM_THREADS='' nproc 2>/dev/null` || CPU_COUNT=`nproc 2>/dev/null` || CPU_COUNT="0"
+      ])dnl
+
+      AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null]],[[: # empty]],[dnl
+        # Try platform-specific preferred methods
+        AS_CASE([[$host_os]],dnl
+          [[*linux*]],[[CPU_COUNT=`lscpu -p 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+,' -c` || CPU_COUNT="0"]],dnl
+          [[*darwin*]],[[CPU_COUNT=`sysctl -n hw.logicalcpu 2>/dev/null` || CPU_COUNT="0"]],dnl
+          [[freebsd*]],[[command -v sysctl >/dev/null 2>&1 && CPU_COUNT=`sysctl -n kern.smp.cpus 2>/dev/null` || CPU_COUNT="0"]],dnl
+          [[netbsd*]], [[command -v sysctl >/dev/null 2>&1 && CPU_COUNT=`sysctl -n hw.ncpuonline 2>/dev/null` || CPU_COUNT="0"]],dnl
+          [[solaris*]],[[command -v psrinfo >/dev/null 2>&1 && CPU_COUNT=`psrinfo 2>/dev/null | $EGREP -e '^@<:@0-9@:>@.*on-line' -c 2>/dev/null` || CPU_COUNT="0"]],dnl
+          [[mingw*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]],dnl
+          [[msys*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]],dnl
+          [[cygwin*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]]dnl
+        )dnl
+      ])dnl
+
+      AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null || ! command -v sysctl >/dev/null 2>&1]],[[: # empty]],[dnl
+        # Try less preferred generic method
+        # 'hw.ncpu' exist on many platforms, but not on GNU/Linux
+        CPU_COUNT=`sysctl -n hw.ncpu 2>/dev/null` || CPU_COUNT="0"
+      ])dnl
+
+      AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null]],[[: # empty]],[dnl
+      # Try platform-specific fallback methods
+      # They can be less accurate and slower then preferred methods
+        AS_CASE([[$host_os]],dnl
+          [[*linux*]],[[CPU_COUNT=`$EGREP -e '^processor' -c /proc/cpuinfo 2>/dev/null` || CPU_COUNT="0"]],dnl
+          [[*darwin*]],[[CPU_COUNT=`system_profiler SPHardwareDataType 2>/dev/null | $EGREP -i -e 'number of cores:'|cut -d : -f 2 -s|tr -d ' '` || CPU_COUNT="0"]],dnl
+          [[freebsd*]],[[CPU_COUNT=`dmesg 2>/dev/null| $EGREP -e '^cpu@<:@0-9@:>@+: '|sort -u|$EGREP -e '^' -c` || CPU_COUNT="0"]],dnl
+          [[netbsd*]], [[CPU_COUNT=`command -v cpuctl >/dev/null 2>&1 && cpuctl list 2>/dev/null| $EGREP -e '^@<:@0-9@:>@+ .* online ' -c` || \
+                           CPU_COUNT=`dmesg 2>/dev/null| $EGREP -e '^cpu@<:@0-9@:>@+ at'|sort -u|$EGREP -e '^' -c` || CPU_COUNT="0"]],dnl
+          [[solaris*]],[[command -v kstat >/dev/null 2>&1 && CPU_COUNT=`kstat -m cpu_info -s state -p 2>/dev/null | $EGREP -c -e 'on-line'` || \
+                           CPU_COUNT=`kstat -m cpu_info 2>/dev/null | $EGREP -c -e 'module: cpu_info'` || CPU_COUNT="0"]],dnl
+          [[mingw*]],[AS_IF([[CPU_COUNT=`reg query 'HKLM\\Hardware\\Description\\System\\CentralProcessor' 2>/dev/null | $EGREP -e '\\\\@<:@0-9@:>@+$' -c`]],dnl
+                        [[: # empty]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]])],dnl
+          [[msys*]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]],dnl
+          [[cygwin*]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]]dnl
+        )dnl
+      ])dnl
+
+      AS_IF([[test "x$CPU_COUNT" != "x0" && test "$CPU_COUNT" -gt 0 2>/dev/null]],[dnl
+          AC_MSG_RESULT([[$CPU_COUNT]])
+          m4_ifvaln([$1],[$1],)dnl
+        ],[dnl
+          m4_ifval([$2],[dnl
+            AS_UNSET([[CPU_COUNT]])
+            AC_MSG_RESULT([[unable to detect]])
+            $2
+          ], [dnl
+            CPU_COUNT="1"
+            AC_MSG_RESULT([[unable to detect (assuming 1)]])
+          ])dnl
+        ])dnl
+      ])dnl
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/ax_cxx_compile_stdcxx.m4 ./config/ax_cxx_compile_stdcxx.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/ax_cxx_compile_stdcxx.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/ax_cxx_compile_stdcxx.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,979 @@
+# ===========================================================================
+#  https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
+#
+# DESCRIPTION
+#
+#   Check for baseline language coverage in the compiler for the specified
+#   version of the C++ standard.  If necessary, add switches to CXX and
+#   CXXCPP to enable support.  VERSION may be '11' (for the C++11 standard)
+#   or '14' (for the C++14 standard).
+#
+#   The second argument, if specified, indicates whether you insist on an
+#   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
+#   -std=c++11).  If neither is specified, you get whatever works, with
+#   preference for no added switch, and then for an extended mode.
+#
+#   The third argument, if specified 'mandatory' or if left unspecified,
+#   indicates that baseline support for the specified C++ standard is
+#   required and that the macro should error out if no mode with that
+#   support is found.  If specified 'optional', then configuration proceeds
+#   regardless, after defining HAVE_CXX${VERSION} if and only if a
+#   supporting mode is found.
+#
+#   If the fourth argument is an optional CXX/CXXFLAG/CPPFLAG suffix, e.g.
+#   "_FOR_BUILD" or "_FOR_TARGET".
+#
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
+#   Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
+#   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
+#   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
+#   Copyright (c) 2015 Paul Norman <penorman@mac.com>
+#   Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
+#   Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
+#   Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
+#   Copyright (c) 2020 Jason Merrill <jason@redhat.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.  This file is offered as-is, without any
+#   warranty.
+
+#serial 12
+
+dnl  This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
+dnl  (serial version number 13).
+
+AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
+  m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
+        [$1], [14], [ax_cxx_compile_alternatives="14 1y"],
+        [$1], [17], [ax_cxx_compile_alternatives="17 1z"],
+        [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
+  m4_if([$2], [], [],
+        [$2], [ext], [],
+        [$2], [noext], [],
+        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl
+  m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
+        [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
+        [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
+        [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
+  AC_LANG_PUSH([C++])dnl
+  ac_success=no
+  m4_ifnblank([$4], [dnl
+    ax_cv_cxx_compile_cxx$1_orig_cxx="$CXX"
+    ax_cv_cxx_compile_cxx$1_orig_cxxflags="$CXXFLAGS"
+    ax_cv_cxx_compile_cxx$1_orig_cppflags="$CPPFLAGS"
+    CXX="$CXX$4"
+    CXXFLAGS="$CXXFLAGS$4"
+    CPPFLAGS="$CPPFLAGS$4"])
+  m4_if([$2], [], [dnl
+    AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
+		   ax_cv_cxx_compile_cxx$1$4,
+      [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+        [ax_cv_cxx_compile_cxx$1$4=yes],
+        [ax_cv_cxx_compile_cxx$1$4=no])])
+    if test x$ax_cv_cxx_compile_cxx$1$4 = xyes; then
+      ac_success=yes
+    fi])
+
+  m4_if([$2], [noext], [], [dnl
+  if test x$ac_success = xno; then
+    for alternative in ${ax_cxx_compile_alternatives}; do
+      switch="-std=gnu++${alternative}"
+      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1$4_$switch])
+      AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+                     $cachevar,
+        [ac_save_CXX="$CXX"
+         CXX="$CXX $switch"
+         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+          [eval $cachevar=yes],
+          [eval $cachevar=no])
+         CXX="$ac_save_CXX"])
+      if eval test x\$$cachevar = xyes; then
+        CXX="$CXX $switch"
+        if test -n "$CXXCPP" ; then
+          CXXCPP="$CXXCPP $switch"
+        fi
+        ac_success=yes
+        break
+      fi
+    done
+  fi])
+
+  m4_if([$2], [ext], [], [dnl
+  if test x$ac_success = xno; then
+    dnl HP's aCC needs +std=c++11 according to:
+    dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
+    dnl Cray's crayCC needs "-h std=c++11"
+    for alternative in ${ax_cxx_compile_alternatives}; do
+      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
+        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1$4_$switch])
+        AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+                       $cachevar,
+          [ac_save_CXX="$CXX"
+           CXX="$CXX $switch"
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+            [eval $cachevar=yes],
+            [eval $cachevar=no])
+           CXX="$ac_save_CXX"])
+        if eval test x\$$cachevar = xyes; then
+          CXX="$CXX $switch"
+          if test -n "$CXXCPP" ; then
+            CXXCPP="$CXXCPP $switch"
+          fi
+          ac_success=yes
+          break
+        fi
+      done
+      if test x$ac_success = xyes; then
+        break
+      fi
+    done
+  fi])
+  m4_ifnblank([$4], [dnl
+    CXX$4="$CXX"
+    CXXFLAGS$4="$CXXFLAGS"
+    CPPFLAGS$4="$CPPFLAGS"
+    CXX="$ax_cv_cxx_compile_cxx$1_orig_cxx"
+    CXXFLAGS="$ax_cv_cxx_compile_cxx$1_orig_cxxflags"
+    CPPFLAGS="$ax_cv_cxx_compile_cxx$1_orig_cppflags"])
+  AC_LANG_POP([C++])
+  if test x$ax_cxx_compile_cxx$1_required = xtrue; then
+    if test x$ac_success = xno; then
+      AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
+    fi
+  fi
+  if test x$ac_success = xno; then
+    HAVE_CXX$1$4=0
+    AC_MSG_NOTICE([No compiler with C++$1 support was found])
+  else
+    HAVE_CXX$1$4=1
+    AC_DEFINE(HAVE_CXX$1$4,1,
+              [define if the compiler supports basic C++$1 syntax])
+  fi
+  AC_SUBST(HAVE_CXX$1$4)
+])
+
+
+dnl  Test body for checking C++11 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+)
+
+
+dnl  Test body for checking C++14 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+)
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
+)
+
+dnl  Tests for new features in C++11
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+]])
+
+
+dnl  Tests for new features in C++14
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
+
+// If the compiler admits that it is not ready for C++14, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201402L
+
+#error "This is not a C++14 compiler"
+
+#else
+
+namespace cxx14
+{
+
+  namespace test_polymorphic_lambdas
+  {
+
+    int
+    test()
+    {
+      const auto lambda = [](auto&&... args){
+        const auto istiny = [](auto x){
+          return (sizeof(x) == 1UL) ? 1 : 0;
+        };
+        const int aretiny[] = { istiny(args)... };
+        return aretiny[0];
+      };
+      return lambda(1, 1L, 1.0f, '1');
+    }
+
+  }
+
+  namespace test_binary_literals
+  {
+
+    constexpr auto ivii = 0b0000000000101010;
+    static_assert(ivii == 42, "wrong value");
+
+  }
+
+  namespace test_generalized_constexpr
+  {
+
+    template < typename CharT >
+    constexpr unsigned long
+    strlen_c(const CharT *const s) noexcept
+    {
+      auto length = 0UL;
+      for (auto p = s; *p; ++p)
+        ++length;
+      return length;
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("x") == 1UL, "");
+    static_assert(strlen_c("test") == 4UL, "");
+    static_assert(strlen_c("another\0test") == 7UL, "");
+
+  }
+
+  namespace test_lambda_init_capture
+  {
+
+    int
+    test()
+    {
+      auto x = 0;
+      const auto lambda1 = [a = x](int b){ return a + b; };
+      const auto lambda2 = [a = lambda1(x)](){ return a; };
+      return lambda2();
+    }
+
+  }
+
+  namespace test_digit_separators
+  {
+
+    constexpr auto ten_million = 100'000'000;
+    static_assert(ten_million == 100000000, "");
+
+  }
+
+  namespace test_return_type_deduction
+  {
+
+    auto f(int& x) { return x; }
+    decltype(auto) g(int& x) { return x; }
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static constexpr auto value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static constexpr auto value = true;
+    };
+
+    int
+    test()
+    {
+      auto x = 0;
+      static_assert(is_same<int, decltype(f(x))>::value, "");
+      static_assert(is_same<int&, decltype(g(x))>::value, "");
+      return x;
+    }
+
+  }
+
+}  // namespace cxx14
+
+#endif  // __cplusplus >= 201402L
+
+]])
+
+
+dnl  Tests for new features in C++17
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[
+
+// If the compiler admits that it is not ready for C++17, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201703L
+
+#error "This is not a C++17 compiler"
+
+#else
+
+#include <initializer_list>
+#include <utility>
+#include <type_traits>
+
+namespace cxx17
+{
+
+  namespace test_constexpr_lambdas
+  {
+
+    constexpr int foo = [](){return 42;}();
+
+  }
+
+  namespace test::nested_namespace::definitions
+  {
+
+  }
+
+  namespace test_fold_expression
+  {
+
+    template<typename... Args>
+    int multiply(Args... args)
+    {
+      return (args * ... * 1);
+    }
+
+    template<typename... Args>
+    bool all(Args... args)
+    {
+      return (args && ...);
+    }
+
+  }
+
+  namespace test_extended_static_assert
+  {
+
+    static_assert (true);
+
+  }
+
+  namespace test_auto_brace_init_list
+  {
+
+    auto foo = {5};
+    auto bar {5};
+
+    static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);
+    static_assert(std::is_same<int, decltype(bar)>::value);
+  }
+
+  namespace test_typename_in_template_template_parameter
+  {
+
+    template<template<typename> typename X> struct D;
+
+  }
+
+  namespace test_fallthrough_nodiscard_maybe_unused_attributes
+  {
+
+    int f1()
+    {
+      return 42;
+    }
+
+    [[nodiscard]] int f2()
+    {
+      [[maybe_unused]] auto unused = f1();
+
+      switch (f1())
+      {
+      case 17:
+        f1();
+        [[fallthrough]];
+      case 42:
+        f1();
+      }
+      return f1();
+    }
+
+  }
+
+  namespace test_extended_aggregate_initialization
+  {
+
+    struct base1
+    {
+      int b1, b2 = 42;
+    };
+
+    struct base2
+    {
+      base2() {
+        b3 = 42;
+      }
+      int b3;
+    };
+
+    struct derived : base1, base2
+    {
+        int d;
+    };
+
+    derived d1 {{1, 2}, {}, 4};  // full initialization
+    derived d2 {{}, {}, 4};      // value-initialized bases
+
+  }
+
+  namespace test_general_range_based_for_loop
+  {
+
+    struct iter
+    {
+      int i;
+
+      int& operator* ()
+      {
+        return i;
+      }
+
+      const int& operator* () const
+      {
+        return i;
+      }
+
+      iter& operator++()
+      {
+        ++i;
+        return *this;
+      }
+    };
+
+    struct sentinel
+    {
+      int i;
+    };
+
+    bool operator== (const iter& i, const sentinel& s)
+    {
+      return i.i == s.i;
+    }
+
+    bool operator!= (const iter& i, const sentinel& s)
+    {
+      return !(i == s);
+    }
+
+    struct range
+    {
+      iter begin() const
+      {
+        return {0};
+      }
+
+      sentinel end() const
+      {
+        return {5};
+      }
+    };
+
+    void f()
+    {
+      range r {};
+
+      for (auto i : r)
+      {
+        [[maybe_unused]] auto v = i;
+      }
+    }
+
+  }
+
+  namespace test_lambda_capture_asterisk_this_by_value
+  {
+
+    struct t
+    {
+      int i;
+      int foo()
+      {
+        return [*this]()
+        {
+          return i;
+        }();
+      }
+    };
+
+  }
+
+  namespace test_enum_class_construction
+  {
+
+    enum class byte : unsigned char
+    {};
+
+    byte foo {42};
+
+  }
+
+  namespace test_constexpr_if
+  {
+
+    template <bool cond>
+    int f ()
+    {
+      if constexpr(cond)
+      {
+        return 13;
+      }
+      else
+      {
+        return 42;
+      }
+    }
+
+  }
+
+  namespace test_selection_statement_with_initializer
+  {
+
+    int f()
+    {
+      return 13;
+    }
+
+    int f2()
+    {
+      if (auto i = f(); i > 0)
+      {
+        return 3;
+      }
+
+      switch (auto i = f(); i + 4)
+      {
+      case 17:
+        return 2;
+
+      default:
+        return 1;
+      }
+    }
+
+  }
+
+  namespace test_template_argument_deduction_for_class_templates
+  {
+
+    template <typename T1, typename T2>
+    struct pair
+    {
+      pair (T1 p1, T2 p2)
+        : m1 {p1},
+          m2 {p2}
+      {}
+
+      T1 m1;
+      T2 m2;
+    };
+
+    void f()
+    {
+      [[maybe_unused]] auto p = pair{13, 42u};
+    }
+
+  }
+
+  namespace test_non_type_auto_template_parameters
+  {
+
+    template <auto n>
+    struct B
+    {};
+
+    B<5> b1;
+    B<'a'> b2;
+
+  }
+
+  namespace test_structured_bindings
+  {
+
+    int arr[2] = { 1, 2 };
+    std::pair<int, int> pr = { 1, 2 };
+
+    auto f1() -> int(&)[2]
+    {
+      return arr;
+    }
+
+    auto f2() -> std::pair<int, int>&
+    {
+      return pr;
+    }
+
+    struct S
+    {
+      int x1 : 2;
+      volatile double y1;
+    };
+
+    S f3()
+    {
+      return {};
+    }
+
+    auto [ x1, y1 ] = f1();
+    auto& [ xr1, yr1 ] = f1();
+    auto [ x2, y2 ] = f2();
+    auto& [ xr2, yr2 ] = f2();
+    const auto [ x3, y3 ] = f3();
+
+  }
+
+  namespace test_exception_spec_type_system
+  {
+
+    struct Good {};
+    struct Bad {};
+
+    void g1() noexcept;
+    void g2();
+
+    template<typename T>
+    Bad
+    f(T*, T*);
+
+    template<typename T1, typename T2>
+    Good
+    f(T1*, T2*);
+
+    static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
+
+  }
+
+  namespace test_inline_variables
+  {
+
+    template<class T> void f(T)
+    {}
+
+    template<class T> inline T g(T)
+    {
+      return T{};
+    }
+
+    template<> inline void f<>(int)
+    {}
+
+    template<> int g<>(int)
+    {
+      return 5;
+    }
+
+  }
+
+}  // namespace cxx17
+
+#endif  // __cplusplus < 201703L
+
+]])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/bfd64.m4 ./config/bfd64.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/bfd64.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/bfd64.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,36 @@
+dnl
+dnl   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+dnl
+dnl This file is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; see the file COPYING3.  If not see
+dnl <http://www.gnu.org/licenses/>.
+dnl
+
+dnl See whether 64-bit bfd lib has been enabled.
+AC_DEFUN([BFD_64_BIT], [dnl
+AC_ARG_ENABLE(64-bit-bfd,
+  AS_HELP_STRING([--enable-64-bit-bfd],
+		 [64-bit support (on hosts with narrower word sizes)]),
+  [AS_CASE([$enableval],
+	   [yes|no], [],
+	   [*], [AC_MSG_ERROR(bad value ${enableval} for 64-bit-bfd option)])],
+  [enable_64_bit_bfd=no])
+
+dnl If the host is 64-bit, then 64-bit bfd is enabled automatically.
+AS_IF([test "x$enable_64_bit_bfd" = "xno"], [dnl
+  AC_CHECK_SIZEOF(void *)
+  AS_IF([test "x$ac_cv_sizeof_void_p" = "x8"], [enable_64_bit_bfd=yes])
+])
+
+AM_CONDITIONAL([ENABLE_BFD_64_BIT], [test "x$enable_64_bit_bfd" = "xyes"])
+])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/bootstrap-lto-lean.mk ./config/bootstrap-lto-lean.mk
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/bootstrap-lto-lean.mk	1970-01-01 00:00:00.000000000 +0000
+++ ./config/bootstrap-lto-lean.mk	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,19 @@
+# This option enables LTO for stage4 and LTO for generators in stage3 with profiledbootstrap.
+# Otherwise, LTO is used in only stage3.
+
+STAGE3_CFLAGS += -flto=jobserver
+override STAGEtrain_CFLAGS := $(filter-out -flto=jobserver,$(STAGEtrain_CFLAGS))
+STAGEtrain_GENERATOR_CFLAGS += -flto=jobserver
+STAGEfeedback_CFLAGS += -flto=jobserver
+
+# assumes the host supports the linker plugin
+LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
+LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
+LTO_NM = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-nm$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
+
+LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \
+	      RANLIB="$(LTO_RANLIB)"; export RANLIB; \
+	      NM="$(LTO_NM)"; export NM;
+LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)" NM="$(LTO_NM)"
+
+do-compare = /bin/true
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/bootstrap-lto.mk ./config/bootstrap-lto.mk
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/bootstrap-lto.mk	2019-12-11 01:49:17.000000000 +0000
+++ ./config/bootstrap-lto.mk	2024-02-01 01:47:14.000000000 +0000
@@ -9,9 +9,12 @@ STAGEfeedback_CFLAGS += -flto=jobserver
 # assumes the host supports the linker plugin
 LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
 LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
+LTO_NM = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-nm$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
 
 LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \
-	      RANLIB="$(LTO_RANLIB)"; export RANLIB;
-LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)"
+	      RANLIB="$(LTO_RANLIB)"; export RANLIB; \
+	      NM="$(LTO_NM)"; export NM;
+LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)" NM="$(LTO_NM)"
 
 do-compare = $(SHELL) $(srcdir)/contrib/compare-lto $$f1 $$f2
+extra-compare = gcc/lto1$(exeext)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/bootstrap-Og.mk ./config/bootstrap-Og.mk
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/bootstrap-Og.mk	1970-01-01 00:00:00.000000000 +0000
+++ ./config/bootstrap-Og.mk	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1 @@
+BOOT_CFLAGS := -Og $(filter-out -O%, $(BOOT_CFLAGS))
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/cet.m4 ./config/cet.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/cet.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/cet.m4	2024-02-01 01:47:14.000000000 +0000
@@ -3,16 +3,19 @@ dnl GCC_CET_FLAGS
 dnl    (SHELL-CODE_HANDLER)
 dnl
 AC_DEFUN([GCC_CET_FLAGS],[dnl
-GCC_ENABLE(cet, no, ,[enable Intel CET in target libraries],
+GCC_ENABLE(cet, auto, ,[enable Intel CET in target libraries],
 	   permit yes|no|auto)
 AC_MSG_CHECKING([for CET support])
 
+# NB: Avoid nested save_CFLAGS and save_LDFLAGS.
 case "$host" in
   i[[34567]]86-*-linux* | x86_64-*-linux*)
     case "$enable_cet" in
       auto)
 	# Check if target supports multi-byte NOPs
-	# and if assembler supports CET insn.
+	# and if compiler and assembler support CET insn.
+	cet_save_CFLAGS="$CFLAGS"
+	CFLAGS="$CFLAGS -fcf-protection"
 	AC_COMPILE_IFELSE(
 	 [AC_LANG_PROGRAM(
 	  [],
@@ -25,6 +28,7 @@ asm ("setssbsy");
 	  ])],
 	 [enable_cet=yes],
 	 [enable_cet=no])
+	CFLAGS="$cet_save_CFLAGS"
 	;;
       yes)
 	# Check if assembler supports CET.
@@ -48,3 +52,140 @@ else
   AC_MSG_RESULT([no])
 fi
 ])
+
+dnl
+dnl GCC_CET_HOST_FLAGS
+dnl    (SHELL-CODE_HANDLER)
+dnl
+AC_DEFUN([GCC_CET_HOST_FLAGS],[dnl
+GCC_ENABLE(cet, auto, ,[enable Intel CET in host libraries],
+	   permit yes|no|auto)
+AC_MSG_CHECKING([for CET support])
+
+case "$host" in
+  i[[34567]]86-*-linux* | x86_64-*-linux*)
+    may_have_cet=yes
+    cet_save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -fcf-protection"
+    case "$enable_cet" in
+      auto)
+	# Check if target supports multi-byte NOPs
+	# and if compiler and assembler support CET.
+	AC_COMPILE_IFELSE(
+	 [AC_LANG_PROGRAM(
+	  [],
+	  [
+#if !defined(__SSE2__)
+#error target does not support multi-byte NOPs
+#else
+asm ("setssbsy");
+#endif
+	  ])],
+	 [enable_cet=yes],
+	 [enable_cet=no])
+	;;
+      yes)
+	# Check if compiler and assembler support CET.
+	AC_COMPILE_IFELSE(
+	 [AC_LANG_PROGRAM(
+	  [],
+	  [asm ("setssbsy");])],
+	 [support_cet=yes],
+	 [support_cet=no])
+	if test $support_cet = "no"; then
+	  if test x$enable_bootstrap != xno \
+	     && test -z "${with_build_subdir}" \
+	     && (test ! -f ../stage_current \
+	         || test `cat ../stage_current` != "stage1"); then
+	    # Require CET support only for the final GCC build.
+	    AC_MSG_ERROR([compiler and assembler with CET support are required for --enable-cet])
+	  else
+	    # Don't enable CET without CET support for non-bootstrap
+	    # build, in stage1 nor for build support.
+	    enable_cet=no
+	  fi
+	fi
+	;;
+    esac
+    CFLAGS="$cet_save_CFLAGS"
+    ;;
+  *)
+    may_have_cet=no
+    enable_cet=no
+    ;;
+esac
+
+cet_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -fcf-protection=none"
+cet_save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk"
+if test x$may_have_cet = xyes; then
+  # Check whether -fcf-protection=none -Wl,-z,ibt,-z,shstk work.
+  AC_TRY_LINK(
+    [],[return 0;],
+    [may_have_cet=yes],
+    [may_have_cet=no])
+fi
+
+if test x$may_have_cet = xyes; then
+  if test x$cross_compiling = xno; then
+    AC_TRY_RUN([
+int
+main ()
+{
+  asm ("endbr32");
+  return 0;
+}
+    ],
+    [have_multi_byte_nop=yes],
+    [have_multi_byte_nop=no])
+    have_cet=no
+    if test x$have_multi_byte_nop = xyes; then
+      AC_TRY_RUN([
+static void
+foo (void)
+{
+}
+
+static void
+__attribute__ ((noinline, noclone))
+xxx (void (*f) (void))
+{
+  f ();
+}
+
+static void
+__attribute__ ((noinline, noclone))
+bar (void)
+{
+  xxx (foo);
+}
+
+int
+main ()
+{
+  bar ();
+  return 0;
+}
+      ],
+      [have_cet=no],
+      [have_cet=yes])
+    fi
+    if test x$enable_cet = xno -a x$have_cet = xyes; then
+      AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host])
+    fi
+  fi
+else
+  # Enable CET in cross compiler if possible so that it will run on both
+  # CET and non-CET hosts.
+  have_cet=yes
+fi
+if test x$enable_cet = xyes; then
+  $1="-fcf-protection"
+  AC_MSG_RESULT([yes])
+else
+  AC_MSG_RESULT([no])
+fi
+CFLAGS="$cet_save_CFLAGS"
+LDFLAGS="$cet_save_LDFLAGS"
+])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/ChangeLog ./config/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/ChangeLog	2019-12-11 01:49:17.000000000 +0000
+++ ./config/ChangeLog	2024-02-01 01:47:14.000000000 +0000
@@ -1,3 +1,184 @@
+2023-11-30  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* hwcaps.m4 (GCC_CHECK_ASSEMBLER_HWCAP): Require
+	AC_CANONICAL_TARGET.
+
+2023-11-15  Arsen ArsenoviÄ‡  <arsen@aarsen.me>
+
+	* intlmacosx.m4: Import from gettext-0.22 (serial 8).
+	* gettext.m4: Sync with gettext-0.22 (serial 77).
+	* gettext-sister.m4 (ZW_GNU_GETTEXT_SISTER_DIR): Load gettexts
+	uninstalled-config.sh, or call AM_GNU_GETTEXT if missing.
+	* iconv.m4: Sync with gettext-0.22 (serial 26).
+
+2022-12-31  Nick Clifton  <nickc@redhat.com>
+
+	* 2.40 branch created.
+
+2022-07-08  Nick Clifton  <nickc@redhat.com>
+
+	* 2.39 branch created.
+
+2022-01-22  Nick Clifton  <nickc@redhat.com>
+
+	* 2.38 release branch created.
+
+2021-07-03  Nick Clifton  <nickc@redhat.com>
+
+	* 2.37 release branch created.
+
+2021-06-14  Michael Forney  <mforney@mforney.org>
+
+	* gettext.m4 (AM_GNU_GETTEXT): Skip checks for the internal
+	symbols _nl_msg_cat_cntr, _nl_domain_bindings, and
+	_nl_expand_alias, if __GNU_GETTEXT_SUPPORTED_REVISION is defined.
+	Backport of gettext serial 68 patch.
+
+2021-05-18  Mike Frysinger  <vapier@gentoo.org>
+
+	* acinclude.m4 (CYG_AC_PATH_SIM, CYG_AC_PATH_DEVO): Delete.
+
+2021-03-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/27397
+	* cet.m4 (GCC_CET_HOST_FLAGS): Check if host supports multi-byte
+	NOPs.
+
+2021-02-13  Mike Frysinger  <vapier@gentoo.org>
+
+	* debuginfod.m4: Delete m4_include(../config/pkg.m4).
+
+2021-01-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/26792
+	* jobserver.m4: New file.
+
+2021-01-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27173
+	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): Check if AR works with
+	--plugin and rc before enabling --plugin.
+
+2021-01-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
+
+2021-01-09  Nick Clifton  <nickc@redhat.com>
+
+	* 2.36 release branch crated.
+
+2021-01-01  Nicolas Boulenguez  <nicolas@debian.org>
+
+	* override.m4: Correct comment grammar.
+
+2020-09-08  Alan Modra  <amodra@gmail.com>
+
+	Sync from gcc
+	2020-07-15  H.J. Lu  <hjl.tools@gmail.com>
+	PR bootstrap/96202
+	* cet.m4 (GCC_CET_HOST_FLAGS): Don't enable CET without CET
+	support in stage1 nor for build support.
+
+2020-07-30  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* largefile.m4 (ACX_LARGEFILE) <sparc-*-solaris*|i?86-*-solaris*>:
+	Check for <sys/procfs.h> incompatilibity with large-file support
+	on Solaris.
+	Only disable large-file support and perhaps plugins if needed.
+	Set, substitute LARGEFILE_CPPFLAGS if so.
+
+2020-07-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/26301
+	* pkg.m4 (PKG_CHECK_MODULES): Use AC_TRY_LINK only if
+	$pkg_failed = no.
+
+2020-07-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/26301
+	* pkg.m4 (PKG_CHECK_MODULES): Add AC_TRY_LINK to check if
+	$pkg_cv_[]$1[]_LIBS works.
+
+2020-07-24  Aaron Merey  <amerey@redhat.com>
+
+	* debuginfod.m4: use PKG_CHECK_MODULES.
+	* pkg.m4: New file.
+
+2020-07-04  Nick Clifton  <nickc@redhat.com>
+
+	Binutils 2.35 branch created.
+
+2020-06-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	Sync with GCC
+	2020-05-29  H.J. Lu  <hjl.tools@gmail.com>
+
+	PR bootstrap/95413
+	* cet.m4: Replace save_CFLAGS and save_LDFLAGS with
+	cet_save_CFLAGS and cet_save_LDFLAGS.
+
+2020-05-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+	Sync with GCC
+	2020-05-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR bootstrap/95147
+	* cet.m4 (GCC_CET_FLAGS): Also check if -fcf-protection works
+	when defaulting to auto.
+
+	2020-05-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* cet.m4 (GCC_CET_FLAGS): Change default to auto.
+
+2020-05-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+	Sync with GCC
+	2020-05-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR bootstrap/94998
+	* cet.m4 (GCC_CET_HOST_FLAGS): Enable CET in cross compiler if
+	possible.
+
+2020-04-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+	Sync with GCC
+	2020-04-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR bootstrap/94739
+	* cet.m4 (GCC_CET_HOST_FLAGS): Add -fcf-protection=none to
+	-Wl,-z,ibt,-z,shstk.  Check whether -fcf-protection=none
+	-Wl,-z,ibt,-z,shstk works first.
+
+	2020-04-25  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR bootstrap/94739
+	* cet.m4 (GCC_CET_HOST_FLAGS): New.
+
+	2020-04-22  Jakub Jelinek  <jakub@redhat.com>
+
+	PR libfortran/94694
+	PR libfortran/94586
+	* math.m4 (GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1,
+	GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2): New.
+
+2020-02-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ax_count_cpus.m4: New file, backported from GCC.
+	* bootstrap-Og.mk: New file, backported from GCC.
+	* bootstrap-lto-lean.mk: New file, backported from GCC.
+	* bootstrap-lto.mk: Changes backported from GCC.
+	* futex.m4: Changes backported from GCC.
+	* gthr.m4: Changes backported from GCC.
+	* lib-link.m4: Changes backported from GCC.
+	* mh-mingw: Changes backported from GCC.
+	* no-executables.m4: Changes backported from GCC.
+	* tls.m4: Changes backported from GCC.
+	* toolexeclibdir.m4: New file, backported from GCC.
+
+2020-01-18  Nick Clifton  <nickc@redhat.com>
+
+	Binutils 2.34 branch created.
+
 2019-09-09  Phil Blundell  <pb@pbcl.net>
 
 	binutils 2.33 branch created.
@@ -2162,4 +2343,3 @@ Thu Jan 30 16:17:30 1992  Stu Grossman
 Tue Dec 10 00:10:55 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
 
 	* ChangeLog: fresh changelog.
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/debuginfod.m4 ./config/debuginfod.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/debuginfod.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/debuginfod.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,39 @@
+dnl Copyright (C) 1997-2020 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+AC_DEFUN([AC_DEBUGINFOD],
+[
+# Handle optional debuginfod support as well as optional section
+# downloading support.
+#
+# Define HAVE_LIBDEBUGINFOD if libdebuginfod is found with version >= 0.179.
+#
+# Define HAVE_LIBDEBUGINFOD_FIND_SECTION if libdebuginfod is found with
+# version >= 0.188.
+AC_ARG_WITH([debuginfod],
+  AC_HELP_STRING([--with-debuginfod], [Enable debuginfo lookups with debuginfod (auto/yes/no)]),
+  [], [with_debuginfod=auto])
+AC_MSG_CHECKING([whether to use debuginfod])
+AC_MSG_RESULT([$with_debuginfod])
+
+if test "x$with_debuginfod" != xno; then
+  PKG_CHECK_MODULES([DEBUGINFOD], [libdebuginfod >= 0.188],
+    [AC_DEFINE([HAVE_LIBDEBUGINFOD_FIND_SECTION], [1],
+               [Define to 1 if debuginfod section downloading is supported.])],
+    [AC_MSG_WARN([libdebuginfod is missing or some features may be unavailable.])])
+
+  PKG_CHECK_MODULES([DEBUGINFOD], [libdebuginfod >= 0.179],
+    [AC_DEFINE([HAVE_LIBDEBUGINFOD], [1], [Define to 1 if debuginfod is enabled.])],
+    [if test "x$with_debuginfod" = xyes; then
+       AC_MSG_ERROR(["--with-debuginfod was given, but libdebuginfod is missing or unusable."])
+     else
+       AC_MSG_WARN([libdebuginfod is missing or unusable; some features may be unavailable.])
+     fi])
+else
+  AC_MSG_WARN([debuginfod support disabled; some features may be unavailable.])
+fi
+])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/dejagnu.m4 ./config/dejagnu.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/dejagnu.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/dejagnu.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,22 @@
+# DEJAGNU_CHECK_VERSION DEJAGNU_CHECK_VERSION
+# --------------------------------------------------------------
+# Test whether there is an incompatibility between DejaGnu and GCC versions.
+# Older versions ( <= 1.5.1 ) of dejagnu.h use GNU inline semantics improperly.
+# The issue presents itself as link-time errors complaining about undefined
+# references to 'pass' and 'fail'.
+AC_DEFUN([DEJAGNU_CHECK_VERSION],
+[
+  AC_MSG_CHECKING([for incompatibility between DejaGnu and GCC])
+  AC_MSG_RESULT([$ac_cv_dejagnu_compat])
+
+  AC_TRY_LINK([#include <dejagnu.h>],
+	      [pass ("test foo");
+	       return 0;],
+	      [ac_cv_dejagnu_compat=yes],
+	      [ac_cv_dejagnu_compat=no])
+  AC_MSG_RESULT([$ac_cv_dejagnu_compat])
+
+  if test "$ac_cv_dejagnu_compat}" = no ; then
+    AC_MSG_RESULT([detected incompatibility between dejagnu version and gcc])
+  fi
+])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/dfp.m4 ./config/dfp.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/dfp.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/dfp.m4	2024-02-01 01:47:14.000000000 +0000
@@ -1,3 +1,21 @@
+# Copyright (C) 2010-2022 Free Software Foundation, Inc.
+
+# This file is part of GCC.
+
+# GCC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3, or (at your option) any
+# later version.
+
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+# License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
 dnl @synopsis GCC_AC_ENABLE_DECIMAL_FLOAT([target triplet])
 dnl
 dnl Enable C extension for decimal float if target supports it.
@@ -20,6 +38,7 @@ Valid choices are 'yes', 'bid', 'dpd', a
 ],
 [
   case $1 in
+    aarch64* | \
     powerpc*-*-linux* | i?86*-*-linux* | x86_64*-*-linux* | s390*-*-linux* | \
     i?86*-*-elfiamcu | i?86*-*-gnu* | x86_64*-*-gnu* | \
     i?86*-*-mingw* | x86_64*-*-mingw* | \
@@ -37,7 +56,7 @@ Valid choices are 'yes', 'bid', 'dpd', a
 case x$enable_decimal_float in
   xyes)
     case $1 in
-      i?86*-*-* | x86_64*-*-*)
+      aarch64* | i?86*-*-* | x86_64*-*-*)
 	enable_decimal_float=bid
 	;;
       *)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/futex.m4 ./config/futex.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/futex.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/futex.m4	2024-02-01 01:47:14.000000000 +0000
@@ -9,7 +9,7 @@ AC_DEFUN([GCC_LINUX_FUTEX],[dnl
 GCC_ENABLE(linux-futex,default, ,[use the Linux futex system call],
 	   permit yes|no|default)
 case "$target" in
-  *-linux*)
+  *-linux* | *-uclinux*)
     case "$enable_linux_futex" in
       default)
 	# If headers don't have gettid/futex syscalls definition, then
@@ -22,6 +22,7 @@ case "$target" in
 	AC_LINK_IFELSE(
 	 [AC_LANG_PROGRAM(
 	  [#include <sys/syscall.h>
+	   #include <unistd.h>
 	   int lk;],
 	  [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])],
 	  [save_LIBS="$LIBS"
@@ -48,6 +49,7 @@ If so, please configure with --disable-l
 	AC_LINK_IFELSE(
 	 [AC_LANG_PROGRAM(
 	  [#include <sys/syscall.h>
+	   #include <unistd.h>
 	   int lk;],
 	  [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])],[],
 	  [AC_MSG_ERROR([SYS_gettid and SYS_futex required for --enable-linux-futex])])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/gcc-plugin.m4 ./config/gcc-plugin.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/gcc-plugin.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/gcc-plugin.m4	2024-02-01 01:47:14.000000000 +0000
@@ -45,11 +45,11 @@ AC_DEFUN([GCC_ENABLE_PLUGINS],
      ;;
      *)
        if test x$build = x$host; then
-	 export_sym_check="objdump${exeext} -T"
+	 export_sym_check="$ac_cv_prog_OBJDUMP -T"
        elif test x$host = x$target; then
 	 export_sym_check="$gcc_cv_objdump -T"
        else
-	 export_sym_check=
+	 export_sym_check="$ac_cv_prog_OBJDUMP -T"
        fi
      ;;
    esac
@@ -91,14 +91,18 @@ AC_DEFUN([GCC_ENABLE_PLUGINS],
      # Check that we can build shared objects with -fPIC -shared
      saved_LDFLAGS="$LDFLAGS"
      saved_CFLAGS="$CFLAGS"
+     saved_CXXFLAGS="$CXXFLAGS"
      case "${host}" in
        *-*-darwin*)
 	 CFLAGS=`echo $CFLAGS | sed s/-mdynamic-no-pic//g`
 	 CFLAGS="$CFLAGS -fPIC"
+	 CXXFLAGS=`echo $CXXFLAGS | sed s/-mdynamic-no-pic//g`
+	 CXXFLAGS="$CXXFLAGS -fPIC"
 	 LDFLAGS="$LDFLAGS -shared -undefined dynamic_lookup"
        ;;
        *)
 	 CFLAGS="$CFLAGS -fPIC"
+	 CXXFLAGS="$CXXFLAGS -fPIC"
 	 LDFLAGS="$LDFLAGS -fPIC -shared"
        ;;
      esac
@@ -113,6 +117,7 @@ AC_DEFUN([GCC_ENABLE_PLUGINS],
      fi
      LDFLAGS="$saved_LDFLAGS"
      CFLAGS="$saved_CFLAGS"
+     CXXFLAGS="$saved_CXXFLAGS"
 
      # If plugin support had been requested but not available, fail.
      if test x"$enable_plugin" = x"no" ; then
@@ -124,3 +129,43 @@ AC_DEFUN([GCC_ENABLE_PLUGINS],
      fi
    fi
 ])
+
+dnl
+dnl
+dnl GCC_PLUGIN_OPTION
+dnl    (SHELL-CODE_HANDLER)
+dnl
+AC_DEFUN([GCC_PLUGIN_OPTION],[dnl
+AC_MSG_CHECKING([for -plugin option])
+
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+plugin_option=
+for plugin in $plugin_names; do
+  plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+  if test x$plugin_so = x$plugin; then
+    plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+  fi
+  if test x$plugin_so != x$plugin; then
+    plugin_option="--plugin $plugin_so"
+    break
+  fi
+done
+dnl Check if ${AR} $plugin_option rc works.
+AC_CHECK_TOOL(AR, ar)
+if test "${AR}" = "" ; then
+  AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.])
+fi
+touch conftest.c
+${AR} $plugin_option rc conftest.a conftest.c
+if test "$?" != 0; then
+  AC_MSG_WARN([Failed: $AR $plugin_option rc])
+  plugin_option=
+fi
+rm -f conftest.*
+if test -n "$plugin_option"; then
+  $1="$plugin_option"
+  AC_MSG_RESULT($plugin_option)
+else
+  AC_MSG_RESULT([no])
+fi
+])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/gettext.m4 ./config/gettext.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/gettext.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/gettext.m4	2024-02-01 01:47:14.000000000 +0000
@@ -1,43 +1,39 @@
-# gettext.m4 serial 20 (gettext-0.12)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License.  As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
+# gettext.m4 serial 72 (gettext-0.21.1)
+dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
 dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
 dnl License but which still want to provide support for the GNU gettext
 dnl functionality.
 dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
 dnl They are *not* in the public domain.
 
 dnl Authors:
 dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
 
 dnl Macro to add for using GNU gettext.
 
 dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-dnl    default (if it is not specified or empty) is 'no-libtool'.
-dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
-dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl INTLSYMBOL must be one of 'external', 'use-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages other than GNU gettext, and
+dnl    'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'.
 dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
 dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
 dnl    depending on --{enable,disable}-{shared,static} and on the presence of
-dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl    AM-DISABLE-SHARED).
 dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
 dnl    implementations (in libc or libintl) without the ngettext() function
 dnl    will be ignored.  If NEEDSYMBOL is specified and is
 dnl    'need-formatstring-macros', then GNU gettext implementations that don't
 dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
 dnl INTLDIR is used to find the intl libraries.  If empty,
-dnl    the value `$(top_builddir)/intl/' is used.
+dnl    the value '$(top_builddir)/intl/' is used.
 dnl
 dnl The result of the configuration is one of three cases:
 dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
@@ -59,17 +55,22 @@ dnl
 AC_DEFUN([AM_GNU_GETTEXT],
 [
   dnl Argument checking.
-  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+  m4_if([$1], [], , [m4_if([$1], [external], , [m4_if([$1], [use-libtool], ,
     [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])])
-  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+])])])])
+  m4_if(m4_if([$1], [], [old])[]m4_if([$1], [no-libtool], [old]), [old],
+    [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported.
+])])
+  m4_if([$2], [], , [m4_if([$2], [need-ngettext], , [m4_if([$2], [need-formatstring-macros], ,
     [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
 ])])])])
-  define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
-  define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
+  define([gt_included_intl],
+    m4_if([$1], [external], [no], [yes]))
+  gt_NEEDS_INIT
+  AM_GNU_GETTEXT_NEED([$2])
 
   AC_REQUIRE([AM_PO_SUBDIRS])dnl
-  ifelse(gt_included_intl, yes, [
+  m4_if(gt_included_intl, yes, [
     AC_REQUIRE([AM_INTL_SUBDIR])dnl
   ])
 
@@ -80,22 +81,24 @@ AC_DEFUN([AM_GNU_GETTEXT],
   dnl Sometimes libintl requires libiconv, so first search for libiconv.
   dnl Ideally we would do this search only after the
   dnl      if test "$USE_NLS" = "yes"; then
-  dnl        if test "$gt_cv_func_gnugettext_libc" != "yes"; then
-  dnl tests. But if configure.ac invokes AM_ICONV after AM_GNU_GETTEXT
+  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
   dnl the configure script would need to contain the same shell code
   dnl again, outside any 'if'. There are two solutions:
   dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
   dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
-  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
-  dnl documented, we avoid it.
-  ifelse(gt_included_intl, yes, , [
+  dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it.
+  m4_if(gt_included_intl, yes, , [
     AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
   ])
 
+  dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation.
+  gt_INTL_MACOSX
+
   dnl Set USE_NLS.
-  AM_NLS
+  AC_REQUIRE([AM_NLS])
 
-  ifelse(gt_included_intl, yes, [
+  m4_if(gt_included_intl, yes, [
     BUILD_INCLUDED_LIBINTL=no
     USE_INCLUDED_LIBINTL=no
   ])
@@ -103,16 +106,25 @@ AC_DEFUN([AM_GNU_GETTEXT],
   LTLIBINTL=
   POSUB=
 
+  dnl Add a version number to the cache macros.
+  case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
   dnl If we use NLS figure out what method
   if test "$USE_NLS" = "yes"; then
     gt_use_preinstalled_gnugettext=no
-    ifelse(gt_included_intl, yes, [
+    m4_if(gt_included_intl, yes, [
       AC_MSG_CHECKING([whether included gettext is requested])
-      AC_ARG_WITH(included-gettext,
+      AC_ARG_WITH([included-gettext],
         [  --with-included-gettext use the GNU gettext library included here],
         nls_cv_force_use_gnu_gettext=$withval,
         nls_cv_force_use_gnu_gettext=no)
-      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+      AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
 
       nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
       if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
@@ -121,30 +133,48 @@ AC_DEFUN([AM_GNU_GETTEXT],
         dnl to use.  If GNU gettext is available we use this.  Else we have
         dnl to fall back to GNU NLS library.
 
-        dnl Add a version number to the cache macros.
-        define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
-        define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
-        define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
-
-        AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
-         [AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
 #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
 #endif
 changequote(,)dnl
 typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
 changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;],
-            [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
-            gt_cv_func_gnugettext_libc=yes,
-            gt_cv_func_gnugettext_libc=no)])
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
 
-        if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+         [AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+               ]],
+               [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+               ]])],
+            [eval "$gt_func_gnugettext_libc=yes"],
+            [eval "$gt_func_gnugettext_libc=no"])])
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
           dnl Sometimes libintl requires libiconv, so first search for libiconv.
-          ifelse(gt_included_intl, yes, , [
+          m4_if(gt_included_intl, yes, , [
             AM_ICONV_LINK
           ])
           dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
@@ -153,53 +183,63 @@ return (int) gettext ("")]ifelse([$2], [
           dnl even if libiconv doesn't exist.
           AC_LIB_LINKFLAGS_BODY([intl])
           AC_CACHE_CHECK([for GNU gettext in libintl],
-            gt_cv_func_gnugettext_libintl,
+            [$gt_func_gnugettext_libintl],
            [gt_save_CPPFLAGS="$CPPFLAGS"
             CPPFLAGS="$CPPFLAGS $INCINTL"
             gt_save_LIBS="$LIBS"
             LIBS="$LIBS $LIBINTL"
             dnl Now see whether libintl exists and does not depend on libiconv.
-            AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
+            AC_LINK_IFELSE(
+              [AC_LANG_PROGRAM(
+                 [[
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
-const char *_nl_expand_alias ();],
-              [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
-              gt_cv_func_gnugettext_libintl=yes,
-              gt_cv_func_gnugettext_libintl=no)
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+                 ]],
+                 [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+                 ]])],
+              [eval "$gt_func_gnugettext_libintl=yes"],
+              [eval "$gt_func_gnugettext_libintl=no"])
             dnl Now see whether libintl exists and depends on libiconv.
-            if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
+            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
               LIBS="$LIBS $LIBICONV"
-              AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
+              AC_LINK_IFELSE(
+                [AC_LANG_PROGRAM(
+                   [[
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
-const char *_nl_expand_alias ();],
-                [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
-               [LIBINTL="$LIBINTL $LIBICONV"
-                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
-                gt_cv_func_gnugettext_libintl=yes
-               ])
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+                   ]],
+                   [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+                   ]])],
+                [LIBINTL="$LIBINTL $LIBICONV"
+                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                 eval "$gt_func_gnugettext_libintl=yes"
+                ])
             fi
             CPPFLAGS="$gt_save_CPPFLAGS"
             LIBS="$gt_save_LIBS"])
@@ -209,8 +249,8 @@ return (int) gettext ("")]ifelse([$2], [
         dnl use it.  But if this macro is used in GNU gettext, and GNU
         dnl gettext is already preinstalled in libintl, we update this
         dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
-        if test "$gt_cv_func_gnugettext_libc" = "yes" \
-           || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
                 && test "$PACKAGE" != gettext-runtime \
                 && test "$PACKAGE" != gettext-tools; }; then
           gt_use_preinstalled_gnugettext=yes
@@ -221,7 +261,7 @@ return (int) gettext ("")]ifelse([$2], [
           INCINTL=
         fi
 
-    ifelse(gt_included_intl, yes, [
+    m4_if(gt_included_intl, yes, [
         if test "$gt_use_preinstalled_gnugettext" != "yes"; then
           dnl GNU gettext is not found in the C library.
           dnl Fall back on included GNU gettext library.
@@ -233,11 +273,12 @@ return (int) gettext ("")]ifelse([$2], [
         dnl Mark actions used to generate GNU NLS library.
         BUILD_INCLUDED_LIBINTL=yes
         USE_INCLUDED_LIBINTL=yes
-        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
-        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
+        LIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD"
+        LTLIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD"
         LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
       fi
 
+      CATOBJEXT=
       if test "$gt_use_preinstalled_gnugettext" = "yes" \
          || test "$nls_cv_use_gnu_gettext" = "yes"; then
         dnl Mark actions to use GNU gettext tools.
@@ -245,9 +286,18 @@ return (int) gettext ("")]ifelse([$2], [
       fi
     ])
 
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Some extra flags are needed during linking.
+        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
     if test "$gt_use_preinstalled_gnugettext" = "yes" \
        || test "$nls_cv_use_gnu_gettext" = "yes"; then
-      AC_DEFINE(ENABLE_NLS, 1,
+      AC_DEFINE([ENABLE_NLS], [1],
         [Define to 1 if translation of program messages to the user's native language
    is requested.])
     else
@@ -260,7 +310,7 @@ return (int) gettext ("")]ifelse([$2], [
   if test "$USE_NLS" = "yes"; then
     AC_MSG_CHECKING([where the gettext function comes from])
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
-      if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
         gt_source="external libintl"
       else
         gt_source="libc"
@@ -274,16 +324,16 @@ return (int) gettext ("")]ifelse([$2], [
   if test "$USE_NLS" = "yes"; then
 
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
-      if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
         AC_MSG_CHECKING([how to link with libintl])
         AC_MSG_RESULT([$LIBINTL])
         AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
       fi
 
       dnl For backward compatibility. Some packages may be using this.
-      AC_DEFINE(HAVE_GETTEXT, 1,
+      AC_DEFINE([HAVE_GETTEXT], [1],
        [Define if the GNU gettext() function is already present or preinstalled.])
-      AC_DEFINE(HAVE_DCGETTEXT, 1,
+      AC_DEFINE([HAVE_DCGETTEXT], [1],
        [Define if the GNU dcgettext() function is already present or preinstalled.])
     fi
 
@@ -291,125 +341,46 @@ return (int) gettext ("")]ifelse([$2], [
     POSUB=po
   fi
 
-  ifelse(gt_included_intl, yes, [
-    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
-    dnl to 'yes' because some of the testsuite requires it.
-    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
-      BUILD_INCLUDED_LIBINTL=yes
-    fi
+  m4_if(gt_included_intl, yes, [
+    dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes'
+    dnl because some of the testsuite requires it.
+    BUILD_INCLUDED_LIBINTL=yes
 
     dnl Make all variables we use known to autoconf.
-    AC_SUBST(BUILD_INCLUDED_LIBINTL)
-    AC_SUBST(USE_INCLUDED_LIBINTL)
-    AC_SUBST(CATOBJEXT)
-
-    dnl For backward compatibility. Some configure.acs may be using this.
-    nls_cv_header_intl=
-    nls_cv_header_libgt=
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    DATADIRNAME=share
-    AC_SUBST(DATADIRNAME)
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    INSTOBJEXT=.mo
-    AC_SUBST(INSTOBJEXT)
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    GENCAT=gencat
-    AC_SUBST(GENCAT)
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    if test "$USE_INCLUDED_LIBINTL" = yes; then
-      INTLOBJS="\$(GETTOBJS)"
-    fi
-    AC_SUBST(INTLOBJS)
-
-    dnl Enable libtool support if the surrounding package wishes it.
-    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
-    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+    AC_SUBST([BUILD_INCLUDED_LIBINTL])
+    AC_SUBST([USE_INCLUDED_LIBINTL])
+    AC_SUBST([CATOBJEXT])
   ])
 
   dnl For backward compatibility. Some Makefiles may be using this.
   INTLLIBS="$LIBINTL"
-  AC_SUBST(INTLLIBS)
+  AC_SUBST([INTLLIBS])
 
   dnl Make all documented variables known to autoconf.
-  AC_SUBST(LIBINTL)
-  AC_SUBST(LTLIBINTL)
-  AC_SUBST(POSUB)
+  AC_SUBST([LIBINTL])
+  AC_SUBST([LTLIBINTL])
+  AC_SUBST([POSUB])
 ])
 
 
-dnl Checks for all prerequisites of the intl subdirectory,
-dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
-dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
-AC_DEFUN([AM_INTL_SUBDIR],
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
 [
-  AC_REQUIRE([AC_PROG_INSTALL])dnl
-  AC_REQUIRE([AM_MKINSTALLDIRS])dnl
-  AC_REQUIRE([AC_PROG_CC])dnl
-  AC_REQUIRE([AC_CANONICAL_HOST])dnl
-  AC_REQUIRE([AC_PROG_RANLIB])dnl
-  AC_REQUIRE([AC_ISC_POSIX])dnl
-  AC_REQUIRE([AC_HEADER_STDC])dnl
-  AC_REQUIRE([AC_C_CONST])dnl
-  AC_REQUIRE([AC_C_INLINE])dnl
-  AC_REQUIRE([AC_TYPE_OFF_T])dnl
-  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
-  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
-  AC_REQUIRE([AC_FUNC_MMAP])dnl
-  AC_REQUIRE([jm_GLIBC21])dnl
-  AC_REQUIRE([gt_INTDIV0])dnl
-  AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
-  AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
-  AC_REQUIRE([gt_INTTYPES_PRI])dnl
-
-  AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
-stdlib.h string.h unistd.h sys/param.h])
-  AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
-geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \
-strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \
-__fsetlocking])
-
-  AM_ICONV
-  AM_LANGINFO_CODESET
-  if test $ac_cv_header_locale_h = yes; then
-    AM_LC_MESSAGES
-  fi
+  m4_divert_text([DEFAULTS], [gt_needs=])
+  m4_define([gt_NEEDS_INIT], [])
+])
 
-  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
-  dnl because plural.y uses bison specific features. It requires at least
-  dnl bison-1.26 because earlier versions generate a plural.c that doesn't
-  dnl compile.
-  dnl bison is only needed for the maintainer (who touches plural.y). But in
-  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
-  dnl the rule in general Makefile. Now, some people carelessly touch the
-  dnl files or have a broken "make" program, hence the plural.c rule will
-  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
-  dnl present or too old.
-  AC_CHECK_PROGS([INTLBISON], [bison])
-  if test -z "$INTLBISON"; then
-    ac_verc_fail=yes
-  else
-    dnl Found it, now check the version.
-    AC_MSG_CHECKING([version of bison])
-changequote(<<,>>)dnl
-    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
-    case $ac_prog_version in
-      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
-      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
-changequote([,])dnl
-         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
-      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
-    esac
-    AC_MSG_RESULT([$ac_prog_version])
-  fi
-  if test $ac_verc_fail = yes; then
-    INTLBISON=:
-  fi
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
 ])
 
 
 dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
+
+
+dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], [])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/gettext-sister.m4 ./config/gettext-sister.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/gettext-sister.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/gettext-sister.m4	2024-02-01 01:47:14.000000000 +0000
@@ -10,19 +10,30 @@
 # the necessary substitutions and definitions for this directory.
 
 AC_DEFUN([ZW_GNU_GETTEXT_SISTER_DIR],
-[# If we haven't got the data from the intl directory,
-# assume NLS is disabled.
-USE_NLS=no	AC_SUBST(USE_NLS)
-LIBINTL=	AC_SUBST(LIBINTL)
-LIBINTL_DEP=	AC_SUBST(LIBINTL_DEP)
-INCINTL=	AC_SUBST(INCINTL)
-XGETTEXT=	AC_SUBST(XGETTEXT)
-GMSGFMT=	AC_SUBST(GMSGFMT)
-POSUB=		AC_SUBST(POSUB)
-
-if test -f  ifelse([$1],,[../intl],[$1])/config.intl; then
-  .  ifelse([$1],,[../intl],[$1])/config.intl
+[
+m4_pushdef([gettext_builddir],
+           m4_default([$1], [../gettext]))
+m4_pushdef([gettext_cfg],
+           gettext_builddir[/uninstalled-config.sh])
+if test -f gettext_cfg; then
+  relative_builddir='[$(top_builddir)/]gettext_builddir'
+  .  gettext_cfg
+else
+  # The sister gettext directory doesn't exist and won't collect information on
+  # using gettext for us.  Call a bundled AM_GNU_GETTEXT.
+  AM_GNU_GETTEXT([external])
 fi
+m4_popdef([gettext_cfg])
+m4_popdef([gettext_builddir])
+
+AC_SUBST([USE_NLS])
+AC_SUBST([LIBINTL])
+AC_SUBST([LIBINTL_DEP])
+AC_SUBST([INCINTL])
+AC_SUBST([XGETTEXT])
+AC_SUBST([GMSGFMT])
+AC_SUBST([POSUB])
+
 AC_MSG_CHECKING([whether NLS is requested])
 if test x"$USE_NLS" != xyes; then
   AC_MSG_RESULT(no)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/gthr.m4 ./config/gthr.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/gthr.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/gthr.m4	2024-02-01 01:47:14.000000000 +0000
@@ -13,6 +13,7 @@ AC_DEFUN([GCC_AC_THREAD_HEADER],
 case $1 in
     aix)	thread_header=config/rs6000/gthr-aix.h ;;
     dce)	thread_header=config/pa/gthr-dce.h ;;
+    gcn)	thread_header=config/gcn/gthr-gcn.h ;;
     lynx)	thread_header=config/gthr-lynx.h ;;
     mipssde)	thread_header=config/mips/gthr-mipssde.h ;;
     posix)	thread_header=gthr-posix.h ;;
@@ -21,6 +22,7 @@ case $1 in
     tpf)	thread_header=config/s390/gthr-tpf.h ;;
     vxworks)	thread_header=config/gthr-vxworks.h ;;
     win32)	thread_header=config/i386/gthr-win32.h ;;
+    mcf)	thread_header=config/i386/gthr-mcf.h ;;
 esac
 AC_SUBST(thread_header)
 ])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/hwcaps.m4 ./config/hwcaps.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/hwcaps.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/hwcaps.m4	2024-02-01 01:47:14.000000000 +0000
@@ -7,6 +7,7 @@ dnl  HWCAP_CFLAGS='-Wa,-nH' if possible.
 dnl
 AC_DEFUN([GCC_CHECK_ASSEMBLER_HWCAP], [
   test -z "$HWCAP_CFLAGS" && HWCAP_CFLAGS=''
+  AC_REQUIRE([AC_CANONICAL_TARGET])
 
   # Restrict the test to Solaris, other assemblers (e.g. AIX as) have -nH
   # with a different meaning.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/iconv.m4 ./config/iconv.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/iconv.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/iconv.m4	2024-02-01 01:47:14.000000000 +0000
@@ -1,13 +1,17 @@
-# iconv.m4 serial AM4 (gettext-0.11.3)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License.  As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
+# iconv.m4 serial 26
+dnl Copyright (C) 2000-2002, 2007-2014, 2016-2023 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Bruno Haible.
-dnl with modifications to support building with in-tree libiconv
+
+AC_PREREQ([2.64])
+
+dnl Note: AM_ICONV is documented in the GNU gettext manual
+dnl <https://www.gnu.org/software/gettext/manual/html_node/AM_005fICONV.html>.
+dnl Don't make changes that are incompatible with that documentation!
 
 AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
 [
@@ -24,107 +28,266 @@ AC_DEFUN([AM_ICONV_LINK],
 [
   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
   dnl those with the standalone portable GNU libiconv installed).
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
 
   dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
   dnl accordingly.
   AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
 
-  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
-    dnl Add $INCICONV to CPPFLAGS before performing the first check,
-    dnl because if the user has installed libiconv and not disabled its use
-    dnl via --without-libiconv-prefix, he wants to use it. This first
-    dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
-    am_save_CPPFLAGS="$CPPFLAGS"
-    CPPFLAGS="$CPPFLAGS $INCICONV"
-    AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
-      [iconv_t cd = iconv_open("","");
-       iconv(cd,NULL,NULL,NULL,NULL);
-       iconv_close(cd);],
-      am_cv_func_iconv=yes)
-    CPPFLAGS="$am_save_CPPFLAGS"
-
-    if test "$am_cv_func_iconv" != yes && test -d ../libiconv; then
-      for _libs in .libs _libs; do
-        am_save_CPPFLAGS="$CPPFLAGS"
-        am_save_LIBS="$LIBS"
-        CPPFLAGS="$CPPFLAGS -I../libiconv/include"
-        LIBS="$LIBS ../libiconv/lib/$_libs/libiconv.a"
-        AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
-          [iconv_t cd = iconv_open("","");
+    AC_LINK_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[
+#include <stdlib.h>
+#include <iconv.h>
+         ]],
+         [[iconv_t cd = iconv_open("","");
            iconv(cd,NULL,NULL,NULL,NULL);
-           iconv_close(cd);],
-          INCICONV="-I../libiconv/include"
-          LIBICONV='${top_builddir}'/../libiconv/lib/$_libs/libiconv.a
-          LTLIBICONV='${top_builddir}'/../libiconv/lib/libiconv.la
-          am_cv_lib_iconv=yes
-          am_cv_func_iconv=yes)
-        CPPFLAGS="$am_save_CPPFLAGS"
-        LIBS="$am_save_LIBS"
-        if test "$am_cv_func_iconv" = "yes"; then
-          break
-        fi
-      done
-    fi
-
+           iconv_close(cd);]])],
+      [am_cv_func_iconv=yes])
     if test "$am_cv_func_iconv" != yes; then
-      am_save_CPPFLAGS="$CPPFLAGS"
       am_save_LIBS="$LIBS"
-      CPPFLAGS="$CPPFLAGS $INCICONV"
       LIBS="$LIBS $LIBICONV"
-      AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
-        [iconv_t cd = iconv_open("","");
-         iconv(cd,NULL,NULL,NULL,NULL);
-         iconv_close(cd);],
-        am_cv_lib_iconv=yes
-        am_cv_func_iconv=yes)
-      CPPFLAGS="$am_save_CPPFLAGS"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[
+#include <stdlib.h>
+#include <iconv.h>
+           ]],
+           [[iconv_t cd = iconv_open("","");
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);]])],
+        [am_cv_lib_iconv=yes]
+        [am_cv_func_iconv=yes])
       LIBS="$am_save_LIBS"
     fi
   ])
   if test "$am_cv_func_iconv" = yes; then
-    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+    AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+      dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
+      dnl Solaris 10.
+      am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      am_cv_func_iconv_works=no
+      for ac_iconv_const in '' 'const'; do
+        AC_RUN_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+             ]],
+             [[int result = 0;
+  /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from
+     successful returns.  This is even documented in
+     <https://www.ibm.com/support/knowledgecenter/ssw_aix_72/i_bostechref/iconv.html> */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 1;
+        iconv_close (cd_utf8_to_88591);
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\263";
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 2;
+        iconv_close (cd_ascii_to_88591);
+      }
+  }
+  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304";
+        static char buf[2] = { (char)0xDE, (char)0xAD };
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = 1;
+        char *outptr = buf;
+        size_t outbytesleft = 1;
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+          result |= 4;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          result |= 8;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  {
+    /* Try standardized names.  */
+    iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
+    /* Try IRIX, OSF/1 names.  */
+    iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
+    /* Try AIX names.  */
+    iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
+    /* Try HP-UX names.  */
+    iconv_t cd4 = iconv_open ("utf8", "eucJP");
+    if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
+        && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
+      result |= 16;
+    if (cd1 != (iconv_t)(-1))
+      iconv_close (cd1);
+    if (cd2 != (iconv_t)(-1))
+      iconv_close (cd2);
+    if (cd3 != (iconv_t)(-1))
+      iconv_close (cd3);
+    if (cd4 != (iconv_t)(-1))
+      iconv_close (cd4);
+  }
+  return result;
+]])],
+          [am_cv_func_iconv_works=yes], ,
+          [case "$host_os" in
+             aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+             *)            am_cv_func_iconv_works="guessing yes" ;;
+           esac])
+        test "$am_cv_func_iconv_works" = no || break
+      done
+      LIBS="$am_save_LIBS"
+    ])
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+    AC_DEFINE([HAVE_ICONV], [1],
+      [Define if you have the iconv() function and it works.])
   fi
   if test "$am_cv_lib_iconv" = yes; then
-    AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
     AC_MSG_CHECKING([how to link with libiconv])
     AC_MSG_RESULT([$LIBICONV])
   else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
     LIBICONV=
     LTLIBICONV=
   fi
-  AC_SUBST(LIBICONV)
-  AC_SUBST(LTLIBICONV)
+  AC_SUBST([LIBICONV])
+  AC_SUBST([LTLIBICONV])
 ])
 
-AC_DEFUN([AM_ICONV],
+dnl Define AM_ICONV using AC_DEFUN_ONCE, in order to avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+AC_DEFUN_ONCE([AM_ICONV],
 [
   AM_ICONV_LINK
   if test "$am_cv_func_iconv" = yes; then
-    AC_MSG_CHECKING([for iconv declaration])
-    AC_CACHE_VAL(am_cv_proto_iconv, [
-      AC_TRY_COMPILE([
+    AC_CACHE_CHECK([whether iconv is compatible with its POSIX signature],
+      [gl_cv_iconv_nonconst],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[
 #include <stdlib.h>
 #include <iconv.h>
 extern
 #ifdef __cplusplus
 "C"
 #endif
-#if defined(__STDC__) || defined(__cplusplus)
 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
-], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
-      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
-    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    AC_MSG_RESULT([$]{ac_t:-
-         }[$]am_cv_proto_iconv)
-    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
-      [Define as const if the declaration of iconv() needs const.])
+            ]],
+            [[]])],
+         [gl_cv_iconv_nonconst=yes],
+         [gl_cv_iconv_nonconst=no])
+      ])
+  else
+    dnl When compiling GNU libiconv on a system that does not have iconv yet,
+    dnl pick the POSIX compliant declaration without 'const'.
+    gl_cv_iconv_nonconst=yes
+  fi
+  if test $gl_cv_iconv_nonconst = yes; then
+    iconv_arg1=""
+  else
+    iconv_arg1="const"
+  fi
+  AC_DEFINE_UNQUOTED([ICONV_CONST], [$iconv_arg1],
+    [Define as const if the declaration of iconv() needs const.])
+  dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
+  m4_ifdef([gl_ICONV_H_DEFAULTS],
+    [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
+     if test $gl_cv_iconv_nonconst != yes; then
+       ICONV_CONST="const"
+     fi
+    ])
+
+  dnl A summary result, for those packages which want to print a summary at the
+  dnl end of the configuration.
+  if test "$am_func_iconv" = yes; then
+    if test -n "$LIBICONV"; then
+      am_cv_func_iconv_summary='yes, in libiconv'
+    else
+      am_cv_func_iconv_summary='yes, in libc'
+    fi
+  else
+    if test "$am_cv_func_iconv" = yes; then
+      am_cv_func_iconv_summary='not working, consider installing GNU libiconv'
+    else
+      am_cv_func_iconv_summary='no, consider installing GNU libiconv'
+    fi
   fi
 ])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/intlmacosx.m4 ./config/intlmacosx.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/intlmacosx.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/intlmacosx.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,69 @@
+# intlmacosx.m4 serial 9 (gettext-0.22.3)
+dnl Copyright (C) 2004-2014, 2016, 2019-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on Mac OS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+  dnl Check for API introduced in Mac OS X 10.4.
+  AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+    [gt_cv_func_CFPreferencesCopyAppValue],
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <CoreFoundation/CFPreferences.h>]],
+          [[CFPreferencesCopyAppValue(NULL, NULL)]])],
+       [gt_cv_func_CFPreferencesCopyAppValue=yes],
+       [gt_cv_func_CFPreferencesCopyAppValue=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
+      [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+  fi
+  dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent,
+  dnl because in macOS 10.13.4 it has the following behaviour:
+  dnl When two or more languages are specified in the
+  dnl "System Preferences > Language & Region > Preferred Languages" panel,
+  dnl it returns en_CC where CC is the territory (even when English is not among
+  dnl the preferred languages!).  What we want instead is what
+  dnl CFLocaleCopyCurrent returned in earlier macOS releases and what
+  dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the
+  dnl first among the preferred languages and CC is the territory.
+  AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages],
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <CoreFoundation/CFLocale.h>]],
+          [[CFLocaleCopyPreferredLanguages();]])],
+       [gt_cv_func_CFLocaleCopyPreferredLanguages=yes],
+       [gt_cv_func_CFLocaleCopyPreferredLanguages=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+    AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1],
+      [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.])
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+     || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+    dnl Starting with macOS version 14, CoreFoundation relies on CoreServices,
+    dnl and we have to link it in explicitly, otherwise an exception
+    dnl NSInvalidArgumentException "unrecognized selector sent to instance"
+    dnl occurs.
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices"
+  fi
+  AC_SUBST([INTL_MACOSX_LIBS])
+])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/jobserver.m4 ./config/jobserver.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/jobserver.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/jobserver.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,24 @@
+dnl GNU_MAKE_JOBSERVER
+dnl
+dnl Implement a workaround for GNU mak jobserver by adding the '+' to the
+dnl recipe line in Makefiles generated by automake.
+dnl
+AC_DEFUN([GNU_MAKE_JOBSERVER],[dnl
+m4_pattern_allow(AM_V_CCLD)
+touch config.status.tmp
+dnl Must keep the same timestamps on config.status and Makefile.
+if touch --reference=config.status config.status.tmp > /dev/null 2>&1; then
+  sed '/as_fn_exit 0/i \
+sed -e \"s/^\t\\\(\\\$(AM_V_CCLD)\\\)/\t+ \\\1/\" Makefile > Makefile.tmp \
+touch --reference=Makefile Makefile.tmp \
+mv Makefile.tmp Makefile \
+' config.status > config.status.tmp
+  touch --reference=config.status config.status.tmp
+  mv config.status.tmp config.status
+  chmod +x config.status
+  sed -e "s/^\t\(\$(AM_V_CCLD)\)/\t+ \1/" Makefile > Makefile.tmp
+  touch --reference=Makefile Makefile.tmp
+  mv Makefile.tmp Makefile
+else
+  rm -f config.status.tmp
+fi])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/largefile.m4 ./config/largefile.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/largefile.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/largefile.m4	2024-02-01 01:47:14.000000000 +0000
@@ -1,5 +1,5 @@
 # This macro wraps AC_SYS_LARGEFILE with one exception for Solaris.
-# PR 9992/binutils: We have to replicate everywhere the behaviour of
+# PR binutils/9992: We have to replicate everywhere the behaviour of
 # bfd's configure script so that all the directories agree on the size
 # of structures used to describe files.
 
@@ -16,17 +16,38 @@ AC_REQUIRE([AC_CANONICAL_TARGET])
 AC_PLUGINS
 
 case "${host}" in
-changequote(,)dnl
-  sparc-*-solaris*|i[3-7]86-*-solaris*)
-changequote([,])dnl
-    # On native 32bit sparc and ia32 solaris, large-file and procfs support
-    # are mutually exclusive; and without procfs support, the bfd/ elf module
-    # cannot provide certain routines such as elfcore_write_prpsinfo
-    # or elfcore_write_prstatus.  So unless the user explicitly requested
-    # large-file support through the --enable-largefile switch, disable
-    # large-file support in favor of procfs support.
-    test "${target}" = "${host}" -a "x$plugins" = xno \
-      && : ${enable_largefile="no"}
+  sparc-*-solaris*|i?86-*-solaris*)
+    # On native 32-bit Solaris/SPARC and x86, large-file and procfs support
+    # were mutually exclusive until Solaris 11.3.  Without procfs support,
+    # the bfd/ elf module cannot provide certain routines such as
+    # elfcore_write_prpsinfo or elfcore_write_prstatus.  So unless the user
+    # explicitly requested large-file support through the
+    # --enable-largefile switch, disable large-file support in favor of
+    # procfs support.
+    #
+    # Check if <sys/procfs.h> is incompatible with large-file support.
+    AC_TRY_COMPILE([#define _FILE_OFFSET_BITS 64
+#define _STRUCTURED_PROC 1
+#include <sys/procfs.h>], , acx_cv_procfs_lfs=yes, acx_cv_procfs_lfs=no)
+    #
+    # Forcefully disable large-file support only if necessary, gdb is in
+    # tree and enabled.
+    if test "${target}" = "${host}" -a "$acx_cv_procfs_lfs" = no \
+         -a -d $srcdir/../gdb -a "$enable_gdb" != no; then
+      : ${enable_largefile="no"}
+      if test "$plugins" = yes; then
+	AC_MSG_WARN([
+plugin support disabled; require large-file support which is incompatible with GDB.])
+	plugins=no
+      fi
+    fi
+    #
+    # Explicitly undef _FILE_OFFSET_BITS if enable_largefile=no for the
+    # benefit of g++ 9+ which predefines it on Solaris.
+    if test "$enable_largefile" = no; then
+      LARGEFILE_CPPFLAGS="-U_FILE_OFFSET_BITS"
+      AC_SUBST(LARGEFILE_CPPFLAGS)
+    fi
     ;;
 esac
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/lib-ld.m4 ./config/lib-ld.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/lib-ld.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/lib-ld.m4	2024-02-01 01:47:14.000000000 +0000
@@ -12,9 +12,10 @@ dnl with libtool.m4.
 
 dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
 AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
 [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+if $LD -v 2>&1 </dev/null | $EGREP '(GNU|with BFD)' 1>&5; then
   acl_cv_prog_gnu_ld=yes
 else
   acl_cv_prog_gnu_ld=no
@@ -29,6 +30,7 @@ AC_DEFUN([AC_LIB_PROG_LD],
 test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
 AC_REQUIRE([AC_PROG_CC])dnl
 AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_EGREP])dnl
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
@@ -88,7 +90,7 @@ AC_CACHE_VAL(acl_cv_path_LD,
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some GNU ld's only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
-      if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+      if "$acl_cv_path_LD" -v 2>&1 < /dev/null | $EGREP '(GNU|with BFD)' > /dev/null; then
 	test "$with_gnu_ld" != no && break
       else
 	test "$with_gnu_ld" != yes && break
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/lib-link.m4 ./config/lib-link.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/lib-link.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/lib-link.m4	2024-02-01 01:47:14.000000000 +0000
@@ -150,6 +150,11 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
       fi
     fi
 ])
+  AC_LIB_ARG_WITH([lib$1-type],
+[  --with-lib$1-type=TYPE     type of library to search for (auto/static/shared) ],
+  [ with_lib$1_type=$withval ], [ with_lib$1_type=auto ])
+  lib_type=`eval echo \$with_lib$1_type`
+
   dnl Search the library and its dependencies in $additional_libdir and
   dnl $LDFLAGS. Using breadth-first-seach.
   LIB[]NAME=
@@ -195,13 +200,13 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
           found_so=
           found_a=
           if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
               found_dir="$additional_libdir"
               found_so="$additional_libdir/lib$name.$shlibext"
               if test -f "$additional_libdir/lib$name.la"; then
                 found_la="$additional_libdir/lib$name.la"
               fi
-            else
+            elif test x$lib_type != xshared; then
               if test -f "$additional_libdir/lib$name.$libext"; then
                 found_dir="$additional_libdir"
                 found_a="$additional_libdir/lib$name.$libext"
@@ -217,13 +222,13 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
               case "$x" in
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
                     found_dir="$dir"
                     found_so="$dir/lib$name.$shlibext"
                     if test -f "$dir/lib$name.la"; then
                       found_la="$dir/lib$name.la"
                     fi
-                  else
+                  elif test x$lib_type != xshared; then
                     if test -f "$dir/lib$name.$libext"; then
                       found_dir="$dir"
                       found_a="$dir/lib$name.$libext"
@@ -487,8 +492,13 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
             dnl known to the linker and runtime loader. (All the system
             dnl directories known to the linker should also be known to the
             dnl runtime loader, otherwise the system is severely misconfigured.)
-            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
-            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+              LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+            else
+              LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l:lib$name.$libext"
+              LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l:lib$name.$libext"
+            fi
           fi
         fi
       fi
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/math.m4 ./config/math.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/math.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/math.m4	2024-02-01 01:47:14.000000000 +0000
@@ -48,3 +48,67 @@ main ()
                        [Define to 1 if you have the `$1' function.])
   fi
 ])
+
+dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([name], [type])
+dnl
+dnl Check if math function NAME fallback for function with single
+dnl TYPE argument and TYPE result can be implemented using
+dnl __builtin_NAME expanded inline without needing unavailable math
+dnl library function.
+AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1],
+[
+  AC_REQUIRE([GCC_CHECK_LIBM])
+if test $gcc_cv_math_func_$1 = no; then
+  AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1],
+		 [AC_LINK_IFELSE([AC_LANG_SOURCE([
+$2
+$1_fallback ($2 x)
+{
+  return __builtin_$1 (x);
+}
+
+int
+main ()
+{
+  return 0;
+}
+])],
+[gcc_cv_math_inline_builtin_$1=yes],
+[gcc_cv_math_inline_builtin_$1=no])])
+  if test $gcc_cv_math_inline_builtin_$1 = yes; then
+    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1],
+	      [Define to 1 if `__builtin_$1' is expanded inline.])
+  fi
+fi])
+
+dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2([name], [type])
+dnl
+dnl Check if math function NAME fallback for function with two
+dnl TYPE arguments and TYPE result can be implemented using
+dnl __builtin_NAME expanded inline without needing unavailable math
+dnl library function.
+AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2],
+[
+  AC_REQUIRE([GCC_CHECK_LIBM])
+if test $gcc_cv_math_func_$1 = no; then
+  AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1],
+		 [AC_LINK_IFELSE([AC_LANG_SOURCE([
+$2
+$1_fallback ($2 x, $2 y)
+{
+  return __builtin_$1 (x, y);
+}
+
+int
+main ()
+{
+  return 0;
+}
+])],
+[gcc_cv_math_inline_builtin_$1=yes],
+[gcc_cv_math_inline_builtin_$1=no])])
+  if test $gcc_cv_math_inline_builtin_$1 = yes; then
+    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1],
+	      [Define to 1 if `__builtin_$1' is expanded inline.])
+  fi
+fi])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/mh-darwin ./config/mh-darwin
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/mh-darwin	2019-12-11 01:49:17.000000000 +0000
+++ ./config/mh-darwin	2024-02-01 01:47:14.000000000 +0000
@@ -1,29 +1,46 @@
 # The -mdynamic-no-pic ensures that the compiler executable is built without
-# position-independent-code -- the usual default on Darwin. This fix speeds
-# compiles by 3-5%.  Don't add it if the compiler doesn't also support
-# -mno-dynamic-no-pic to undo it.
-DARWIN_MDYNAMIC_NO_PIC := \
-`case ${host} in i?86-*-darwin* | powerpc-*-darwin*) \
-   $(CC) -S -xc /dev/null -o /dev/null -mno-dynamic-no-pic 2>/dev/null \
-   && echo -mdynamic-no-pic ;; esac`
-DARWIN_GCC_MDYNAMIC_NO_PIC := \
-`case ${host} in i?86-*-darwin* | powerpc-*-darwin*) \
-   $(CC) -S -xc /dev/null -o /dev/null -mno-dynamic-no-pic 2>/dev/null \
-   || echo -mdynamic-no-pic ;; esac`
-
-# ld on Darwin versions >= 10.7 defaults to PIE executables. Disable this for
-# gcc components, since it is incompatible with our pch implementation.
-DARWIN_NO_PIE := `case ${host} in *-*-darwin[1][1-9]*) echo -Wl,-no_pie ;; esac;`
-
-BOOT_CFLAGS += $(DARWIN_MDYNAMIC_NO_PIC)
-BOOT_LDFLAGS += $(DARWIN_NO_PIE)
-
-# Similarly, for cross-compilation.
-STAGE1_CFLAGS += $(DARWIN_MDYNAMIC_NO_PIC)
-STAGE1_LDFLAGS += $(DARWIN_NO_PIE)
-
-# Without -mno-dynamic-no-pic support, add -mdynamic-no-pic just to later
-# stages when we know it is built with gcc.
-STAGE2_CFLAGS += $(DARWIN_GCC_MDYNAMIC_NO_PIC)
-STAGE3_CFLAGS += $(DARWIN_GCC_MDYNAMIC_NO_PIC)
-STAGE4_CFLAGS += $(DARWIN_GCC_MDYNAMIC_NO_PIC)
+# position-independent-code -- the usual default on Darwin. This speeds compiles
+# by 8-20% (measurements made against GCC-11).
+# However, we cannot add it unless the bootstrap compiler supports
+# -mno-dynamic-no-pic to undo it, since libiberty, at least, needs this.
+
+#Â We use Werror, since some versions of clang report unknown command line flags
+# as a warning only.
+
+# We only need to determine this for the host tool used to build stage1 (or a
+# non-bootstrapped compiler), later stages will be built by GCC which supports
+# the required flags.
+
+# We cannot use mdynamic-no-pic when building shared host resources.
+
+ifeq (${host_shared},no)
+BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC := $(shell \
+  $(CC) -S -xc /dev/null -o /dev/null -Werror -mno-dynamic-no-pic 2>/dev/null \
+  && echo true)
+else
+BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC := false
+endif
+
+@if gcc-bootstrap
+ifeq (${BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC},true)
+STAGE1_CFLAGS += -mdynamic-no-pic
+else
+STAGE1_CFLAGS += -fPIC
+endif
+ifeq (${host_shared},no)
+# Add -mdynamic-no-pic to later stages when we know it is built with GCC.
+BOOT_CFLAGS += -mdynamic-no-pic
+endif
+@endif gcc-bootstrap
+
+@unless gcc-bootstrap
+ifeq (${BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC},true)
+# FIXME: we should also enable this for cross and non-bootstrap builds but
+# that needs amendment to libcc1.
+# CFLAGS += -mdynamic-no-pic
+# CXXFLAGS += -mdynamic-no-pic
+else
+CFLAGS += -fPIC
+CXXFLAGS += -fPIC
+endif
+@endunless gcc-bootstrap
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/mh-mingw ./config/mh-mingw
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/mh-mingw	2019-12-11 01:49:17.000000000 +0000
+++ ./config/mh-mingw	2024-02-01 01:47:14.000000000 +0000
@@ -2,6 +2,12 @@
 # Vista (see PR33281 for details).
 BOOT_CFLAGS += -D__USE_MINGW_ACCESS -Wno-pedantic-ms-format
 CFLAGS += -D__USE_MINGW_ACCESS
+CXXFLAGS += -D__USE_MINGW_ACCESS
+STAGE1_CXXFLAGS += -D__USE_MINGW_ACCESS
+STAGE2_CXXFLAGS += -D__USE_MINGW_ACCESS
+STAGE3_CXXFLAGS += -D__USE_MINGW_ACCESS
+STAGE4_CXXFLAGS += -D__USE_MINGW_ACCESS
+
 # Increase stack limit to a figure based on the Linux default, with 4MB added
 # as GCC turns out to need that much more to pass all the limits-* tests.
 LDFLAGS += -Wl,--stack,12582912
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/mh-pa-hpux10 ./config/mh-pa-hpux10
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/mh-pa-hpux10	2019-12-11 01:49:17.000000000 +0000
+++ ./config/mh-pa-hpux10	1970-01-01 00:00:00.000000000 +0000
@@ -1,4 +0,0 @@
-# The ada virtual array implementation requires that indexing be disabled on
-# hosts such as hpux that use a segmented memory architecture.  Both the c
-# and ada files need to be compiled with this option for correct operation.
-ADA_CFLAGS = -mdisable-indexing -D_X_HPUX10
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/no-executables.m4 ./config/no-executables.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/no-executables.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/no-executables.m4	2024-02-01 01:47:14.000000000 +0000
@@ -25,7 +25,9 @@ AC_BEFORE([$0], [_AC_COMPILER_EXEEXT])
 AC_BEFORE([$0], [AC_LINK_IFELSE])
 
 m4_define([_AC_COMPILER_EXEEXT],
-[AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
+[AC_LANG_CONFTEST([AC_LANG_PROGRAM(
+		     [#include <stdio.h>],
+		     [printf ("hello world\n");])])
 # FIXME: Cleanup?
 AS_IF([AC_TRY_EVAL(ac_link)], [gcc_no_link=no], [gcc_no_link=yes])
 if test x$gcc_no_link = xyes; then
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/override.m4 ./config/override.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/override.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/override.m4	2024-02-01 01:47:14.000000000 +0000
@@ -32,7 +32,7 @@ m4_ifndef([_GCC_AUTOCONF_VERSION],
   [m4_define([_GCC_AUTOCONF_VERSION], [2.69])])
 
 dnl Test for the exact version when AC_INIT is expanded.
-dnl This allows to update the tree in steps (for testing)
+dnl This allows one to update the tree in steps (for testing)
 dnl by putting
 dnl   m4_define([_GCC_AUTOCONF_VERSION], [X.Y])
 dnl in configure.ac before AC_INIT,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/picflag.m4 ./config/picflag.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/picflag.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/picflag.m4	2024-02-01 01:47:14.000000000 +0000
@@ -44,6 +44,9 @@ case "${$2}" in
 	# sets the default TLS model and affects inlining.
 	$1=-fPIC
 	;;
+    loongarch*-*-*)
+	$1=-fpic
+	;;
     mips-sgi-irix6*)
 	# PIC is the default.
 	;;
@@ -60,9 +63,7 @@ case "${$2}" in
     sh-*-linux* | sh[[2346lbe]]*-*-linux*)
 	$1=-fpic
 	;;
-    # FIXME: Simplify to sh*-*-netbsd*?
-    sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
-      sh64-*-netbsd* | sh64l*-*-netbsd*)
+    sh*-*-netbsd*)
 	$1=-fpic
 	;;
     # Default to -fPIC unless specified otherwise.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/pkg.m4 ./config/pkg.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/pkg.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/pkg.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,283 @@
+# pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+# serial 12 (pkg-config-0.29.2)
+
+dnl Copyright Â© 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright Â© 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl     [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.2])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+    [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+fi[]dnl
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_default([$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes ],
+		     [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])dnl _PKG_CONFIG
+
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
+
+
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $2])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+dnl Check whether $pkg_cv_[]$1[]_LIBS works.
+if test $pkg_failed = no; then
+  pkg_save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $pkg_cv_[]$1[]_LIBS"
+  AC_TRY_LINK([],[], [], [pkg_failed=yes])
+  LDFLAGS=$pkg_save_LDFLAGS
+fi
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        AC_MSG_RESULT([no])
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+        else
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+        ])
+elif test $pkg_failed = untried; then
+        AC_MSG_RESULT([no])
+	m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+        ])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	$3
+fi[]dnl
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+    [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+    [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+    [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+    [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/tls.m4 ./config/tls.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/tls.m4	2019-12-11 01:49:17.000000000 +0000
+++ ./config/tls.m4	2024-02-01 01:47:14.000000000 +0000
@@ -76,7 +76,7 @@ AC_DEFUN([GCC_CHECK_TLS], [
 	  dnl Shared library options may depend on the host; this check
 	  dnl is only known to be needed for GNU/Linux.
 	  case $host in
-	    *-*-linux*)
+	    *-*-linux* | -*-uclinuxfdpic*)
 	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
 	      ;;
 	  esac
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/toolexeclibdir.m4 ./config/toolexeclibdir.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/toolexeclibdir.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/toolexeclibdir.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,31 @@
+dnl toolexeclibdir override support.
+dnl Copyright (C) 2020  Free Software Foundation, Inc.
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3, or (at your option)
+dnl any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; see the file COPYING3.  If not see
+dnl <http://www.gnu.org/licenses/>.
+
+AC_DEFUN([GCC_WITH_TOOLEXECLIBDIR],
+[AC_ARG_WITH(toolexeclibdir,
+  [AS_HELP_STRING([--with-toolexeclibdir=DIR],
+		  [install libraries built with a cross compiler within DIR])],
+  [dnl
+case ${with_toolexeclibdir} in
+  /)
+    ;;
+  */)
+    with_toolexeclibdir=`echo $with_toolexeclibdir | sed 's,/$,,'`
+    ;;
+esac],
+  [with_toolexeclibdir=no])
+])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/zstd.m4 ./config/zstd.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config/zstd.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/zstd.m4	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,23 @@
+dnl Copyright (C) 2022 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl Enable features using the zstd library.
+AC_DEFUN([AC_ZSTD], [
+AC_ARG_WITH(zstd,
+  [AS_HELP_STRING([--with-zstd], [support zstd compressed debug sections (default=auto)])],
+  [], [with_zstd=auto])
+
+AS_IF([test "$with_zstd" != no],
+  [PKG_CHECK_MODULES(ZSTD, [libzstd >= 1.4.0], [
+    AC_DEFINE(HAVE_ZSTD, 1, [Define to 1 if zstd is enabled.])
+  ], [
+    if test "$with_zstd" = yes; then
+      AC_MSG_ERROR([--with-zstd was given, but pkgconfig/libzstd.pc is not found])
+    fi
+  ])
+  ])
+])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config.guess ./config.guess
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config.guess	2019-12-11 01:49:17.000000000 +0000
+++ ./config.guess	2024-02-01 01:47:14.000000000 +0000
@@ -1,12 +1,14 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2019 Free Software Foundation, Inc.
+#   Copyright 1992-2023 Free Software Foundation, Inc.
 
-timestamp='2019-04-28'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2023-08-22'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -27,17 +29,25 @@ timestamp='2019-04-28'
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
 #
 # Please send patches to <config-patches@gnu.org>.
 
 
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX.  However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
 Usage: $0 [OPTION]
 
-Output the configuration name of the system \`$me' is run on.
+Output the configuration name of the system '$me' is run on.
 
 Options:
   -h, --help         print this help, then exit
@@ -50,13 +60,13 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2019 Free Software Foundation, Inc.
+Copyright 1992-2023 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 
 help="
-Try \`$me --help' for more information."
+Try '$me --help' for more information."
 
 # Parse command line
 while test $# -gt 0 ; do
@@ -84,13 +94,16 @@ if test $# != 0; then
   exit 1
 fi
 
+# Just in case it came from the environment.
+GUESS=
+
 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
 # compiler to aid in system detection is discouraged as it requires
 # temporary files to be created and, as you can see below, it is a
 # headache to deal with in a portable fashion.
 
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
+# Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still
+# use 'HOST_CC' if defined, but it is deprecated.
 
 # Portable tmp directory creation inspired by the Autoconf team.
 
@@ -99,8 +112,10 @@ tmp=
 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
 
 set_cc_for_build() {
+    # prevent multiple calls if $tmp is already set
+    test "$tmp" && return 0
     : "${TMPDIR=/tmp}"
-    # shellcheck disable=SC2039
+    # shellcheck disable=SC2039,SC3028
     { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
 	{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
 	{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
@@ -110,7 +125,7 @@ set_cc_for_build() {
 	,,)    echo "int x;" > "$dummy.c"
 	       for driver in cc gcc c89 c99 ; do
 		   if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
-		       CC_FOR_BUILD="$driver"
+		       CC_FOR_BUILD=$driver
 		       break
 		   fi
 	       done
@@ -131,40 +146,55 @@ fi
 
 UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
 UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-case "$UNAME_SYSTEM" in
+case $UNAME_SYSTEM in
 Linux|GNU|GNU/*)
-	# If the system lacks a compiler, then just pick glibc.
-	# We could probably try harder.
-	LIBC=gnu
+	LIBC=unknown
 
 	set_cc_for_build
 	cat <<-EOF > "$dummy.c"
+	#if defined(__ANDROID__)
+	LIBC=android
+	#else
 	#include <features.h>
 	#if defined(__UCLIBC__)
 	LIBC=uclibc
 	#elif defined(__dietlibc__)
 	LIBC=dietlibc
-	#else
+	#elif defined(__GLIBC__)
 	LIBC=gnu
+	#else
+	#include <stdarg.h>
+	/* First heuristic to detect musl libc.  */
+	#ifdef __DEFINED_va_list
+	LIBC=musl
+	#endif
+	#endif
 	#endif
 	EOF
-	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+	cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+	eval "$cc_set_libc"
 
-	# If ldd exists, use it to detect musl libc.
-	if command -v ldd >/dev/null && \
-		ldd --version 2>&1 | grep -q ^musl
-	then
-	    LIBC=musl
+	# Second heuristic to detect musl libc.
+	if [ "$LIBC" = unknown ] &&
+	   command -v ldd >/dev/null &&
+	   ldd --version 2>&1 | grep -q ^musl; then
+		LIBC=musl
+	fi
+
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	if [ "$LIBC" = unknown ]; then
+		LIBC=gnu
 	fi
 	;;
 esac
 
 # Note: order is significant - the case branches are not exclusive.
 
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
 	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -176,12 +206,12 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	#
 	# Note: NetBSD doesn't particularly care about the vendor
 	# portion of the name.  We always set it to "unknown".
-	sysctl="sysctl -n hw.machine_arch"
 	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
-	    "/sbin/$sysctl" 2>/dev/null || \
-	    "/usr/sbin/$sysctl" 2>/dev/null || \
+	    /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+	    /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
 	    echo unknown)`
-	case "$UNAME_MACHINE_ARCH" in
+	case $UNAME_MACHINE_ARCH in
+	    aarch64eb) machine=aarch64_be-unknown ;;
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
@@ -190,13 +220,13 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	    earmv*)
 		arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
 		endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
-		machine="${arch}${endian}"-unknown
+		machine=${arch}${endian}-unknown
 		;;
-	    *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+	    *) machine=$UNAME_MACHINE_ARCH-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
 	# to ELF recently (or will in the future) and ABI.
-	case "$UNAME_MACHINE_ARCH" in
+	case $UNAME_MACHINE_ARCH in
 	    earm*)
 		os=netbsdelf
 		;;
@@ -217,7 +247,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 		;;
 	esac
 	# Determine ABI tags.
-	case "$UNAME_MACHINE_ARCH" in
+	case $UNAME_MACHINE_ARCH in
 	    earm*)
 		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
 		abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
@@ -228,7 +258,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	# thus, need a distinct triplet. However, they do not need
 	# kernel version information, so it can be replaced with a
 	# suitable tag, in the style of linux-gnu.
-	case "$UNAME_VERSION" in
+	case $UNAME_VERSION in
 	    Debian*)
 		release='-gnu'
 		;;
@@ -239,45 +269,57 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "$machine-${os}${release}${abi-}"
-	exit ;;
+	GUESS=$machine-${os}${release}${abi-}
+	;;
     *:Bitrig:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-	echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+	;;
     *:OpenBSD:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+	;;
+    *:SecBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+	GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+	;;
     *:LibertyBSD:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
-	echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+	;;
     *:MidnightBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+	;;
     *:ekkoBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+	;;
     *:SolidBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+	;;
+    *:OS108:*:*)
+	GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+	;;
     macppc:MirBSD:*:*)
-	echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
-	exit ;;
+	GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+	;;
     *:MirBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+	;;
     *:Sortix:*:*)
-	echo "$UNAME_MACHINE"-unknown-sortix
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-sortix
+	;;
+    *:Twizzler:*:*)
+	GUESS=$UNAME_MACHINE-unknown-twizzler
+	;;
     *:Redox:*:*)
-	echo "$UNAME_MACHINE"-unknown-redox
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-redox
+	;;
     mips:OSF1:*.*)
-        echo mips-dec-osf1
-        exit ;;
+	GUESS=mips-dec-osf1
+	;;
     alpha:OSF1:*:*)
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	trap '' 0
 	case $UNAME_RELEASE in
 	*4.0)
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
@@ -291,7 +333,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	# covers most systems running today.  This code pipes the CPU
 	# types through head -n 1, so we only detect the type of CPU 0.
 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-	case "$ALPHA_CPU_TYPE" in
+	case $ALPHA_CPU_TYPE in
 	    "EV4 (21064)")
 		UNAME_MACHINE=alpha ;;
 	    "EV4.5 (21064)")
@@ -328,117 +370,121 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
-	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-	exitcode=$?
-	trap '' 0
-	exit $exitcode ;;
+	OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+	GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+	;;
     Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-unknown-sysv4
-	exit ;;
+	GUESS=m68k-unknown-sysv4
+	;;
     *:[Aa]miga[Oo][Ss]:*:*)
-	echo "$UNAME_MACHINE"-unknown-amigaos
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-amigaos
+	;;
     *:[Mm]orph[Oo][Ss]:*:*)
-	echo "$UNAME_MACHINE"-unknown-morphos
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-morphos
+	;;
     *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit ;;
+	GUESS=i370-ibm-openedition
+	;;
     *:z/VM:*:*)
-	echo s390-ibm-zvmoe
-	exit ;;
+	GUESS=s390-ibm-zvmoe
+	;;
     *:OS400:*:*)
-	echo powerpc-ibm-os400
-	exit ;;
+	GUESS=powerpc-ibm-os400
+	;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix"$UNAME_RELEASE"
-	exit ;;
+	GUESS=arm-acorn-riscix$UNAME_RELEASE
+	;;
     arm*:riscos:*:*|arm*:RISCOS:*:*)
-	echo arm-unknown-riscos
-	exit ;;
+	GUESS=arm-unknown-riscos
+	;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
+	GUESS=hppa1.1-hitachi-hiuxmpp
+	;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
 	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit ;;
+	case `(/bin/universe) 2>/dev/null` in
+	    att) GUESS=pyramid-pyramid-sysv3 ;;
+	    *)   GUESS=pyramid-pyramid-bsd   ;;
+	esac
+	;;
     NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit ;;
+	GUESS=pyramid-pyramid-svr4
+	;;
     DRS?6000:unix:4.0:6*)
-	echo sparc-icl-nx6
-	exit ;;
+	GUESS=sparc-icl-nx6
+	;;
     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
 	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
-	esac ;;
+	    sparc) GUESS=sparc-icl-nx7 ;;
+	esac
+	;;
     s390x:SunOS:*:*)
-	echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
-	exit ;;
+	SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+	GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+	;;
     sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-	exit ;;
+	SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+	GUESS=sparc-hal-solaris2$SUN_REL
+	;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
-	exit ;;
+	SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+	GUESS=sparc-sun-solaris2$SUN_REL
+	;;
     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-	echo i386-pc-auroraux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=i386-pc-auroraux$UNAME_RELEASE
+	;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
 	set_cc_for_build
 	SUN_ARCH=i386
 	# If there is a compiler, see if it is configured for 64-bit objects.
 	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
 	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+	if test "$CC_FOR_BUILD" != no_compiler_found; then
 	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		(CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
 		grep IS_64BIT_ARCH >/dev/null
 	    then
 		SUN_ARCH=x86_64
 	    fi
 	fi
-	echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-	exit ;;
+	SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+	GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+	;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
 	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-	exit ;;
+	SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+	GUESS=sparc-sun-solaris3$SUN_REL
+	;;
     sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
+	case `/usr/bin/arch -k` in
 	    Series*|S4*)
 		UNAME_RELEASE=`uname -v`
 		;;
 	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
-	exit ;;
+	# Japanese Language versions have a version number like '4.1.3-JL'.
+	SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+	GUESS=sparc-sun-sunos$SUN_REL
+	;;
     sun3*:SunOS:*:*)
-	echo m68k-sun-sunos"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-sun-sunos$UNAME_RELEASE
+	;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
 	test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
-	case "`/bin/arch`" in
+	case `/bin/arch` in
 	    sun3)
-		echo m68k-sun-sunos"$UNAME_RELEASE"
+		GUESS=m68k-sun-sunos$UNAME_RELEASE
 		;;
 	    sun4)
-		echo sparc-sun-sunos"$UNAME_RELEASE"
+		GUESS=sparc-sun-sunos$UNAME_RELEASE
 		;;
 	esac
-	exit ;;
+	;;
     aushp:SunOS:*:*)
-	echo sparc-auspex-sunos"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sparc-auspex-sunos$UNAME_RELEASE
+	;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
     # "atarist" or "atariste" at least should have a processor
@@ -448,41 +494,41 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-atari-mint$UNAME_RELEASE
+	;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-atari-mint$UNAME_RELEASE
+	;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-	echo m68k-atari-mint"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-atari-mint$UNAME_RELEASE
+	;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-	echo m68k-milan-mint"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-milan-mint$UNAME_RELEASE
+	;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-	echo m68k-hades-mint"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-hades-mint$UNAME_RELEASE
+	;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-	echo m68k-unknown-mint"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-unknown-mint$UNAME_RELEASE
+	;;
     m68k:machten:*:*)
-	echo m68k-apple-machten"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-apple-machten$UNAME_RELEASE
+	;;
     powerpc:machten:*:*)
-	echo powerpc-apple-machten"$UNAME_RELEASE"
-	exit ;;
+	GUESS=powerpc-apple-machten$UNAME_RELEASE
+	;;
     RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit ;;
+	GUESS=mips-dec-mach_bsd4.3
+	;;
     RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix"$UNAME_RELEASE"
-	exit ;;
+	GUESS=mips-dec-ultrix$UNAME_RELEASE
+	;;
     VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix"$UNAME_RELEASE"
-	exit ;;
+	GUESS=vax-dec-ultrix$UNAME_RELEASE
+	;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix"$UNAME_RELEASE"
-	exit ;;
+	GUESS=clipper-intergraph-clix$UNAME_RELEASE
+	;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
 	set_cc_for_build
 	sed 's/^	//' << EOF > "$dummy.c"
@@ -510,75 +556,76 @@ EOF
 	  dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
 	  SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
 	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos"$UNAME_RELEASE"
-	exit ;;
+	GUESS=mips-mips-riscos$UNAME_RELEASE
+	;;
     Motorola:PowerMAX_OS:*:*)
-	echo powerpc-motorola-powermax
-	exit ;;
+	GUESS=powerpc-motorola-powermax
+	;;
     Motorola:*:4.3:PL8-*)
-	echo powerpc-harris-powermax
-	exit ;;
+	GUESS=powerpc-harris-powermax
+	;;
     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-	echo powerpc-harris-powermax
-	exit ;;
+	GUESS=powerpc-harris-powermax
+	;;
     Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit ;;
+	GUESS=powerpc-harris-powerunix
+	;;
     m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit ;;
+	GUESS=m88k-harris-cxux7
+	;;
     m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit ;;
+	GUESS=m88k-motorola-sysv4
+	;;
     m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit ;;
+	GUESS=m88k-motorola-sysv3
+	;;
     AViiON:dgux:*:*)
 	# DG/UX returns AViiON for all architectures
 	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+	if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
 	then
-	    if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
-	       [ "$TARGET_BINARY_INTERFACE"x = x ]
+	    if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+	       test "$TARGET_BINARY_INTERFACE"x = x
 	    then
-		echo m88k-dg-dgux"$UNAME_RELEASE"
+		GUESS=m88k-dg-dgux$UNAME_RELEASE
 	    else
-		echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+		GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
 	    fi
 	else
-	    echo i586-dg-dgux"$UNAME_RELEASE"
+	    GUESS=i586-dg-dgux$UNAME_RELEASE
 	fi
-	exit ;;
+	;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit ;;
+	GUESS=m88k-dolphin-sysv3
+	;;
     M88*:*:R3*:*)
 	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit ;;
+	GUESS=m88k-motorola-sysv3
+	;;
     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit ;;
+	GUESS=m88k-tektronix-sysv3
+	;;
     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit ;;
+	GUESS=m68k-tektronix-bsd
+	;;
     *:IRIX*:*:*)
-	echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
-	exit ;;
+	IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+	GUESS=mips-sgi-irix$IRIX_REL
+	;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+	GUESS=romp-ibm-aix    # uname -m gives an 8 hex-code CPU id
+	;;                    # Note that: echo "'`uname -s`'" gives 'AIX '
     i*86:AIX:*:*)
-	echo i386-ibm-aix
-	exit ;;
+	GUESS=i386-ibm-aix
+	;;
     ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
+	if test -x /usr/bin/oslevel ; then
 		IBM_REV=`/usr/bin/oslevel`
 	else
-		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+		IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
 	fi
-	echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
-	exit ;;
+	GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+	;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
 		set_cc_for_build
@@ -595,16 +642,16 @@ EOF
 EOF
 		if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
 		then
-			echo "$SYSTEM_NAME"
+			GUESS=$SYSTEM_NAME
 		else
-			echo rs6000-ibm-aix3.2.5
+			GUESS=rs6000-ibm-aix3.2.5
 		fi
 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
+		GUESS=rs6000-ibm-aix3.2.4
 	else
-		echo rs6000-ibm-aix3.2
+		GUESS=rs6000-ibm-aix3.2
 	fi
-	exit ;;
+	;;
     *:AIX:*:[4567])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
@@ -612,56 +659,56 @@ EOF
 	else
 		IBM_ARCH=powerpc
 	fi
-	if [ -x /usr/bin/lslpp ] ; then
-		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+	if test -x /usr/bin/lslpp ; then
+		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
 			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
 	else
-		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+		IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
 	fi
-	echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
-	exit ;;
+	GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+	;;
     *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit ;;
+	GUESS=rs6000-ibm-aix
+	;;
     ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
-	echo romp-ibm-bsd4.4
-	exit ;;
+	GUESS=romp-ibm-bsd4.4
+	;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd"$UNAME_RELEASE"   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
+	GUESS=romp-ibm-bsd$UNAME_RELEASE    # 4.3 with uname added to
+	;;                                  # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit ;;
+	GUESS=rs6000-bull-bosx
+	;;
     DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit ;;
+	GUESS=m68k-bull-sysv3
+	;;
     9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit ;;
+	GUESS=m68k-hp-bsd
+	;;
     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit ;;
+	GUESS=m68k-hp-bsd4.4
+	;;
     9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
-	case "$UNAME_MACHINE" in
+	HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+	case $UNAME_MACHINE in
 	    9000/31?)            HP_ARCH=m68000 ;;
 	    9000/[34]??)         HP_ARCH=m68k ;;
 	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
+		if test -x /usr/bin/getconf; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
 		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-		    case "$sc_cpu_version" in
+		    case $sc_cpu_version in
 		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
 		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
 		      532)                      # CPU_PA_RISC2_0
-			case "$sc_kernel_bits" in
+			case $sc_kernel_bits in
 			  32) HP_ARCH=hppa2.0n ;;
 			  64) HP_ARCH=hppa2.0w ;;
 			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
 			esac ;;
 		    esac
 		fi
-		if [ "$HP_ARCH" = "" ]; then
+		if test "$HP_ARCH" = ""; then
 		    set_cc_for_build
 		    sed 's/^		//' << EOF > "$dummy.c"
 
@@ -700,7 +747,7 @@ EOF
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
 		fi ;;
 	esac
-	if [ "$HP_ARCH" = hppa2.0w ]
+	if test "$HP_ARCH" = hppa2.0w
 	then
 	    set_cc_for_build
 
@@ -721,12 +768,12 @@ EOF
 		HP_ARCH=hppa64
 	    fi
 	fi
-	echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
-	exit ;;
+	GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+	;;
     ia64:HP-UX:*:*)
-	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux"$HPUX_REV"
-	exit ;;
+	HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+	GUESS=ia64-hp-hpux$HPUX_REV
+	;;
     3050*:HI-UX:*:*)
 	set_cc_for_build
 	sed 's/^	//' << EOF > "$dummy.c"
@@ -756,36 +803,36 @@ EOF
 EOF
 	$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
 		{ echo "$SYSTEM_NAME"; exit; }
-	echo unknown-hitachi-hiuxwe2
-	exit ;;
+	GUESS=unknown-hitachi-hiuxwe2
+	;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
-	echo hppa1.1-hp-bsd
-	exit ;;
+	GUESS=hppa1.1-hp-bsd
+	;;
     9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit ;;
+	GUESS=hppa1.0-hp-bsd
+	;;
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit ;;
+	GUESS=hppa1.0-hp-mpeix
+	;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
-	echo hppa1.1-hp-osf
-	exit ;;
+	GUESS=hppa1.1-hp-osf
+	;;
     hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit ;;
+	GUESS=hppa1.0-hp-osf
+	;;
     i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo "$UNAME_MACHINE"-unknown-osf1mk
+	if test -x /usr/sbin/sysversion ; then
+	    GUESS=$UNAME_MACHINE-unknown-osf1mk
 	else
-	    echo "$UNAME_MACHINE"-unknown-osf1
+	    GUESS=$UNAME_MACHINE-unknown-osf1
 	fi
-	exit ;;
+	;;
     parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit ;;
+	GUESS=hppa1.1-hp-lites
+	;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-	exit ;;
+	GUESS=c1-convex-bsd
+	;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
@@ -793,17 +840,18 @@ EOF
 	fi
 	exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-	exit ;;
+	GUESS=c34-convex-bsd
+	;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-	exit ;;
+	GUESS=c38-convex-bsd
+	;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-	exit ;;
+	GUESS=c4-convex-bsd
+	;;
     CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+	GUESS=ymp-cray-unicos$CRAY_REL
+	;;
     CRAY*[A-Z]90:*:*:*)
 	echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
@@ -811,114 +859,155 @@ EOF
 	      -e 's/\.[^.]*$/.X/'
 	exit ;;
     CRAY*TS:*:*:*)
-	echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+	GUESS=t90-cray-unicos$CRAY_REL
+	;;
     CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+	GUESS=alphaev5-cray-unicosmk$CRAY_REL
+	;;
     CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+	GUESS=sv1-cray-unicos$CRAY_REL
+	;;
     *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+	GUESS=craynv-cray-unicosmp$CRAY_REL
+	;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
 	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
 	FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
-	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
+	GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+	;;
     5000:UNIX_System_V:4.*:*)
 	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
 	FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
-	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
+	GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+	;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+	;;
     sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+	;;
     *:BSD/OS:*:*)
-	echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+	;;
     arm:FreeBSD:*:*)
 	UNAME_PROCESSOR=`uname -p`
 	set_cc_for_build
 	if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
 	    | grep -q __ARM_PCS_VFP
 	then
-	    echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
+	    FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+	    GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
 	else
-	    echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
+	    FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+	    GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
 	fi
-	exit ;;
+	;;
     *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	case "$UNAME_PROCESSOR" in
+	UNAME_PROCESSOR=`uname -p`
+	case $UNAME_PROCESSOR in
 	    amd64)
 		UNAME_PROCESSOR=x86_64 ;;
 	    i386)
 		UNAME_PROCESSOR=i586 ;;
 	esac
-	echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
-	exit ;;
+	FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+	GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+	;;
     i*:CYGWIN*:*)
-	echo "$UNAME_MACHINE"-pc-cygwin
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-cygwin
+	;;
     *:MINGW64*:*)
-	echo "$UNAME_MACHINE"-pc-mingw64
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-mingw64
+	;;
     *:MINGW*:*)
-	echo "$UNAME_MACHINE"-pc-mingw32
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-mingw32
+	;;
     *:MSYS*:*)
-	echo "$UNAME_MACHINE"-pc-msys
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-msys
+	;;
     i*:PW*:*)
-	echo "$UNAME_MACHINE"-pc-pw32
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-pw32
+	;;
+    *:SerenityOS:*:*)
+        GUESS=$UNAME_MACHINE-pc-serenity
+        ;;
     *:Interix*:*)
-	case "$UNAME_MACHINE" in
+	case $UNAME_MACHINE in
 	    x86)
-		echo i586-pc-interix"$UNAME_RELEASE"
-		exit ;;
+		GUESS=i586-pc-interix$UNAME_RELEASE
+		;;
 	    authenticamd | genuineintel | EM64T)
-		echo x86_64-unknown-interix"$UNAME_RELEASE"
-		exit ;;
+		GUESS=x86_64-unknown-interix$UNAME_RELEASE
+		;;
 	    IA64)
-		echo ia64-unknown-interix"$UNAME_RELEASE"
-		exit ;;
+		GUESS=ia64-unknown-interix$UNAME_RELEASE
+		;;
 	esac ;;
     i*:UWIN*:*)
-	echo "$UNAME_MACHINE"-pc-uwin
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-uwin
+	;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-pc-cygwin
-	exit ;;
+	GUESS=x86_64-pc-cygwin
+	;;
     prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-	exit ;;
+	SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+	GUESS=powerpcle-unknown-solaris2$SUN_REL
+	;;
     *:GNU:*:*)
 	# the GNU system
-	echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
-	exit ;;
+	GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+	GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+	GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+	;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
-	exit ;;
+	GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+	GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+	GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+	;;
+    x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*)
+	GUESS="$UNAME_MACHINE-pc-managarm-mlibc"
+	;;
+    *:[Mm]anagarm:*:*)
+	GUESS="$UNAME_MACHINE-unknown-managarm-mlibc"
+	;;
     *:Minix:*:*)
-	echo "$UNAME_MACHINE"-unknown-minix
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-minix
+	;;
     aarch64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	set_cc_for_build
+	CPU=$UNAME_MACHINE
+	LIBCABI=$LIBC
+	if test "$CC_FOR_BUILD" != no_compiler_found; then
+	    ABI=64
+	    sed 's/^	    //' << EOF > "$dummy.c"
+	    #ifdef __ARM_EABI__
+	    #ifdef __ARM_PCS_VFP
+	    ABI=eabihf
+	    #else
+	    ABI=eabi
+	    #endif
+	    #endif
+EOF
+	    cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
+	    eval "$cc_set_abi"
+	    case $ABI in
+		eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;;
+	    esac
+	fi
+	GUESS=$CPU-unknown-linux-$LIBCABI
+	;;
     aarch64_be:Linux:*:*)
 	UNAME_MACHINE=aarch64_be
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
 	  EV56)  UNAME_MACHINE=alphaev56 ;;
 	  PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -929,60 +1018,72 @@ EOF
 	esac
 	objdump --private-headers /bin/sh | grep -q ld.so.1
 	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
+    arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     arm*:Linux:*:*)
 	set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
 	    | grep -q __ARM_EABI__
 	then
-	    echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	    GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
 	else
 	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
 		| grep -q __ARM_PCS_VFP
 	    then
-		echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
+		GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
 	    else
-		echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
+		GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
 	    fi
 	fi
-	exit ;;
+	;;
     avr32*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     cris:Linux:*:*)
-	echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+	;;
     crisv32:Linux:*:*)
-	echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+	;;
     e2k:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     frv:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     hexagon:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     i*86:Linux:*:*)
-	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+	;;
     ia64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     k1om:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
+    kvx:Linux:*:*)
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
+    kvx:cos:*:*)
+	GUESS=$UNAME_MACHINE-unknown-cos
+	;;
+    kvx:mbr:*:*)
+	GUESS=$UNAME_MACHINE-unknown-mbr
+	;;
+    loongarch32:Linux:*:* | loongarch64:Linux:*:*)
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     m32r*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     m68*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     mips:Linux:*:* | mips64:Linux:*:*)
 	set_cc_for_build
 	IS_GLIBC=0
@@ -1027,113 +1128,135 @@ EOF
 	#endif
 	#endif
 EOF
-	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`"
+	cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+	eval "$cc_set_vars"
 	test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
 	;;
     mips64el:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     openrisc*:Linux:*:*)
-	echo or1k-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=or1k-unknown-linux-$LIBC
+	;;
     or32:Linux:*:* | or1k*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     padre:Linux:*:*)
-	echo sparc-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=sparc-unknown-linux-$LIBC
+	;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=hppa64-unknown-linux-$LIBC
+	;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
-	  PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
-	  *)    echo hppa-unknown-linux-"$LIBC" ;;
+	  PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+	  PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+	  *)    GUESS=hppa-unknown-linux-$LIBC ;;
 	esac
-	exit ;;
+	;;
     ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=powerpc64-unknown-linux-$LIBC
+	;;
     ppc:Linux:*:*)
-	echo powerpc-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=powerpc-unknown-linux-$LIBC
+	;;
     ppc64le:Linux:*:*)
-	echo powerpc64le-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=powerpc64le-unknown-linux-$LIBC
+	;;
     ppcle:Linux:*:*)
-	echo powerpcle-unknown-linux-"$LIBC"
-	exit ;;
-    riscv32:Linux:*:* | riscv64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=powerpcle-unknown-linux-$LIBC
+	;;
+    riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     s390:Linux:*:* | s390x:Linux:*:*)
-	echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+	;;
     sh64*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     sh*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     tile*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     vax:Linux:*:*)
-	echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+	;;
     x86_64:Linux:*:*)
-	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
-	exit ;;
+	set_cc_for_build
+	CPU=$UNAME_MACHINE
+	LIBCABI=$LIBC
+	if test "$CC_FOR_BUILD" != no_compiler_found; then
+	    ABI=64
+	    sed 's/^	    //' << EOF > "$dummy.c"
+	    #ifdef __i386__
+	    ABI=x86
+	    #else
+	    #ifdef __ILP32__
+	    ABI=x32
+	    #endif
+	    #endif
+EOF
+	    cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
+	    eval "$cc_set_abi"
+	    case $ABI in
+		x86) CPU=i686 ;;
+		x32) LIBCABI=${LIBC}x32 ;;
+	    esac
+	fi
+	GUESS=$CPU-pc-linux-$LIBCABI
+	;;
     xtensa*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
 	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit ;;
+	GUESS=i386-sequent-sysv4
+	;;
     i*86:UNIX_SV:4.2MP:2.*)
 	# Unixware is an offshoot of SVR4, but it has its own version
 	# number series starting with 2...
 	# I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
 	# Use sysv4.2uw... so that sysv4* matches it.
-	echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+	;;
     i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
+	# If we were able to find 'uname', then EMX Unix compatibility
 	# is probably installed.
-	echo "$UNAME_MACHINE"-pc-os2-emx
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-os2-emx
+	;;
     i*86:XTS-300:*:STOP)
-	echo "$UNAME_MACHINE"-unknown-stop
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-stop
+	;;
     i*86:atheos:*:*)
-	echo "$UNAME_MACHINE"-unknown-atheos
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-atheos
+	;;
     i*86:syllable:*:*)
-	echo "$UNAME_MACHINE"-pc-syllable
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-syllable
+	;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-	echo i386-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
+	GUESS=i386-unknown-lynxos$UNAME_RELEASE
+	;;
     i*86:*DOS:*:*)
-	echo "$UNAME_MACHINE"-pc-msdosdjgpp
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+	;;
     i*86:*:4.*:*)
 	UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+		GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
 	else
-		echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+		GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
 	fi
-	exit ;;
+	;;
     i*86:*:5:[678]*)
 	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
@@ -1141,12 +1264,12 @@ EOF
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
-	echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+		GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
 	elif /bin/uname -X 2>/dev/null >/dev/null ; then
 		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
 		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
@@ -1156,11 +1279,11 @@ EOF
 			&& UNAME_MACHINE=i686
 		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
 			&& UNAME_MACHINE=i686
-		echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+		GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
 	else
-		echo "$UNAME_MACHINE"-pc-sysv32
+		GUESS=$UNAME_MACHINE-pc-sysv32
 	fi
-	exit ;;
+	;;
     pc:*:*:*)
 	# Left here for compatibility:
 	# uname -m prints for DJGPP always 'pc', but it prints nothing about
@@ -1168,31 +1291,31 @@ EOF
 	# Note: whatever this is, it MUST be the same as what config.sub
 	# prints for the "djgpp" host, or else GDB configure will decide that
 	# this is a cross-build.
-	echo i586-pc-msdosdjgpp
-	exit ;;
+	GUESS=i586-pc-msdosdjgpp
+	;;
     Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit ;;
+	GUESS=i386-pc-mach3
+	;;
     paragon:*:*:*)
-	echo i860-intel-osf1
-	exit ;;
+	GUESS=i860-intel-osf1
+	;;
     i860:*:4.*:*) # i860-SVR4
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+	  GUESS=i860-stardent-sysv$UNAME_RELEASE    # Stardent Vistra i860-SVR4
 	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv"$UNAME_RELEASE"  # Unknown i860-SVR4
+	  GUESS=i860-unknown-sysv$UNAME_RELEASE     # Unknown i860-SVR4
 	fi
-	exit ;;
+	;;
     mini*:CTIX:SYS*5:*)
 	# "miniframe"
-	echo m68010-convergent-sysv
-	exit ;;
+	GUESS=m68010-convergent-sysv
+	;;
     mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit ;;
+	GUESS=m68k-convergent-sysv
+	;;
     M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit ;;
+	GUESS=m68k-diab-dnix
+	;;
     M68*:*:R3V[5678]*:*)
 	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
@@ -1217,250 +1340,267 @@ EOF
 	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
 	    && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+	;;
     mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit ;;
+	GUESS=m68k-atari-sysv4
+	;;
     TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+	;;
     rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
+	GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+	;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-	echo powerpc-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
+	GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+	;;
     SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv"$UNAME_RELEASE"
-	exit ;;
+	GUESS=mips-dde-sysv$UNAME_RELEASE
+	;;
     RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
+	GUESS=mips-sni-sysv4
+	;;
     RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
+	GUESS=mips-sni-sysv4
+	;;
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo "$UNAME_MACHINE"-sni-sysv4
+		GUESS=$UNAME_MACHINE-sni-sysv4
 	else
-		echo ns32k-sni-sysv
+		GUESS=ns32k-sni-sysv
 	fi
-	exit ;;
-    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+	;;
+    PENTIUM:*:4.0*:*)	# Unisys 'ClearPath HMP IX 4000' SVR4/MP effort
 			# says <Richard.M.Bartel@ccMail.Census.GOV>
-	echo i586-unisys-sysv4
-	exit ;;
+	GUESS=i586-unisys-sysv4
+	;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes@openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit ;;
+	GUESS=hppa1.1-stratus-sysv4
+	;;
     *:*:*:FTX*)
 	# From seanf@swdc.stratus.com.
-	echo i860-stratus-sysv4
-	exit ;;
+	GUESS=i860-stratus-sysv4
+	;;
     i*86:VOS:*:*)
 	# From Paul.Green@stratus.com.
-	echo "$UNAME_MACHINE"-stratus-vos
-	exit ;;
+	GUESS=$UNAME_MACHINE-stratus-vos
+	;;
     *:VOS:*:*)
 	# From Paul.Green@stratus.com.
-	echo hppa1.1-stratus-vos
-	exit ;;
+	GUESS=hppa1.1-stratus-vos
+	;;
     mc68*:A/UX:*:*)
-	echo m68k-apple-aux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=m68k-apple-aux$UNAME_RELEASE
+	;;
     news*:NEWS-OS:6*:*)
-	echo mips-sony-newsos6
-	exit ;;
+	GUESS=mips-sony-newsos6
+	;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-		echo mips-nec-sysv"$UNAME_RELEASE"
+	if test -d /usr/nec; then
+		GUESS=mips-nec-sysv$UNAME_RELEASE
 	else
-		echo mips-unknown-sysv"$UNAME_RELEASE"
+		GUESS=mips-unknown-sysv$UNAME_RELEASE
 	fi
-	exit ;;
+	;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit ;;
+	GUESS=powerpc-be-beos
+	;;
     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit ;;
+	GUESS=powerpc-apple-beos
+	;;
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit ;;
+	GUESS=i586-pc-beos
+	;;
     BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
-	echo i586-pc-haiku
-	exit ;;
-    x86_64:Haiku:*:*)
-	echo x86_64-unknown-haiku
-	exit ;;
+	GUESS=i586-pc-haiku
+	;;
+    ppc:Haiku:*:*)	# Haiku running on Apple PowerPC
+	GUESS=powerpc-apple-haiku
+	;;
+    *:Haiku:*:*)	# Haiku modern gcc (not bound by BeOS compat)
+	GUESS=$UNAME_MACHINE-unknown-haiku
+	;;
     SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sx4-nec-superux$UNAME_RELEASE
+	;;
     SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sx5-nec-superux$UNAME_RELEASE
+	;;
     SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sx6-nec-superux$UNAME_RELEASE
+	;;
     SX-7:SUPER-UX:*:*)
-	echo sx7-nec-superux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sx7-nec-superux$UNAME_RELEASE
+	;;
     SX-8:SUPER-UX:*:*)
-	echo sx8-nec-superux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sx8-nec-superux$UNAME_RELEASE
+	;;
     SX-8R:SUPER-UX:*:*)
-	echo sx8r-nec-superux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sx8r-nec-superux$UNAME_RELEASE
+	;;
     SX-ACE:SUPER-UX:*:*)
-	echo sxace-nec-superux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=sxace-nec-superux$UNAME_RELEASE
+	;;
     Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody"$UNAME_RELEASE"
-	exit ;;
+	GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+	;;
     *:Rhapsody:*:*)
-	echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+	;;
+    arm64:Darwin:*:*)
+	GUESS=aarch64-apple-darwin$UNAME_RELEASE
+	;;
     *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	set_cc_for_build
-	if test "$UNAME_PROCESSOR" = unknown ; then
-	    UNAME_PROCESSOR=powerpc
+	UNAME_PROCESSOR=`uname -p`
+	case $UNAME_PROCESSOR in
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	if command -v xcode-select > /dev/null 2> /dev/null && \
+		! xcode-select --print-path > /dev/null 2> /dev/null ; then
+	    # Avoid executing cc if there is no toolchain installed as
+	    # cc will be a stub that puts up a graphical alert
+	    # prompting the user to install developer tools.
+	    CC_FOR_BUILD=no_compiler_found
+	else
+	    set_cc_for_build
 	fi
-	if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
-	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		       grep IS_64BIT_ARCH >/dev/null
-		then
-		    case $UNAME_PROCESSOR in
-			i386) UNAME_PROCESSOR=x86_64 ;;
-			powerpc) UNAME_PROCESSOR=powerpc64 ;;
-		    esac
-		fi
-		# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
-		if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
-		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		       grep IS_PPC >/dev/null
-		then
-		    UNAME_PROCESSOR=powerpc
-		fi
+	if test "$CC_FOR_BUILD" != no_compiler_found; then
+	    if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		   grep IS_64BIT_ARCH >/dev/null
+	    then
+		case $UNAME_PROCESSOR in
+		    i386) UNAME_PROCESSOR=x86_64 ;;
+		    powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		esac
+	    fi
+	    # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+	    if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+		   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		   grep IS_PPC >/dev/null
+	    then
+		UNAME_PROCESSOR=powerpc
 	    fi
 	elif test "$UNAME_PROCESSOR" = i386 ; then
-	    # Avoid executing cc on OS X 10.9, as it ships with a stub
-	    # that puts up a graphical alert prompting to install
-	    # developer tools.  Any system running Mac OS X 10.7 or
-	    # later (Darwin 11 and later) is required to have a 64-bit
-	    # processor. This is not true of the ARM version of Darwin
-	    # that Apple uses in portable devices.
-	    UNAME_PROCESSOR=x86_64
+	    # uname -m returns i386 or x86_64
+	    UNAME_PROCESSOR=$UNAME_MACHINE
 	fi
-	echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+	;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
 	if test "$UNAME_PROCESSOR" = x86; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
 	fi
-	echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+	;;
     *:QNX:*:4*)
-	echo i386-pc-qnx
-	exit ;;
+	GUESS=i386-pc-qnx
+	;;
     NEO-*:NONSTOP_KERNEL:*:*)
-	echo neo-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
+	GUESS=neo-tandem-nsk$UNAME_RELEASE
+	;;
     NSE-*:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
+	GUESS=nse-tandem-nsk$UNAME_RELEASE
+	;;
     NSR-*:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
+	GUESS=nsr-tandem-nsk$UNAME_RELEASE
+	;;
     NSV-*:NONSTOP_KERNEL:*:*)
-	echo nsv-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
+	GUESS=nsv-tandem-nsk$UNAME_RELEASE
+	;;
     NSX-*:NONSTOP_KERNEL:*:*)
-	echo nsx-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
+	GUESS=nsx-tandem-nsk$UNAME_RELEASE
+	;;
     *:NonStop-UX:*:*)
-	echo mips-compaq-nonstopux
-	exit ;;
+	GUESS=mips-compaq-nonstopux
+	;;
     BS2000:POSIX*:*:*)
-	echo bs2000-siemens-sysv
-	exit ;;
+	GUESS=bs2000-siemens-sysv
+	;;
     DS/*:UNIX_System_V:*:*)
-	echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+	;;
     *:Plan9:*:*)
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
 	# operating systems.
-	# shellcheck disable=SC2154
-	if test "$cputype" = 386; then
+	if test "${cputype-}" = 386; then
 	    UNAME_MACHINE=i386
-	else
-	    UNAME_MACHINE="$cputype"
+	elif test "x${cputype-}" != x; then
+	    UNAME_MACHINE=$cputype
 	fi
-	echo "$UNAME_MACHINE"-unknown-plan9
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-plan9
+	;;
     *:TOPS-10:*:*)
-	echo pdp10-unknown-tops10
-	exit ;;
+	GUESS=pdp10-unknown-tops10
+	;;
     *:TENEX:*:*)
-	echo pdp10-unknown-tenex
-	exit ;;
+	GUESS=pdp10-unknown-tenex
+	;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-	echo pdp10-dec-tops20
-	exit ;;
+	GUESS=pdp10-dec-tops20
+	;;
     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-	echo pdp10-xkl-tops20
-	exit ;;
+	GUESS=pdp10-xkl-tops20
+	;;
     *:TOPS-20:*:*)
-	echo pdp10-unknown-tops20
-	exit ;;
+	GUESS=pdp10-unknown-tops20
+	;;
     *:ITS:*:*)
-	echo pdp10-unknown-its
-	exit ;;
+	GUESS=pdp10-unknown-its
+	;;
     SEI:*:*:SEIUX)
-	echo mips-sei-seiux"$UNAME_RELEASE"
-	exit ;;
+	GUESS=mips-sei-seiux$UNAME_RELEASE
+	;;
     *:DragonFly:*:*)
-	echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
-	exit ;;
+	DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+	GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+	;;
     *:*VMS:*:*)
 	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "$UNAME_MACHINE" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
+	case $UNAME_MACHINE in
+	    A*) GUESS=alpha-dec-vms ;;
+	    I*) GUESS=ia64-dec-vms ;;
+	    V*) GUESS=vax-dec-vms ;;
 	esac ;;
     *:XENIX:*:SysV)
-	echo i386-pc-xenix
-	exit ;;
+	GUESS=i386-pc-xenix
+	;;
     i*86:skyos:*:*)
-	echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
-	exit ;;
+	SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+	GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+	;;
     i*86:rdos:*:*)
-	echo "$UNAME_MACHINE"-pc-rdos
-	exit ;;
-    i*86:AROS:*:*)
-	echo "$UNAME_MACHINE"-pc-aros
-	exit ;;
+	GUESS=$UNAME_MACHINE-pc-rdos
+	;;
+    i*86:Fiwix:*:*)
+	GUESS=$UNAME_MACHINE-pc-fiwix
+	;;
+    *:AROS:*:*)
+	GUESS=$UNAME_MACHINE-unknown-aros
+	;;
     x86_64:VMkernel:*:*)
-	echo "$UNAME_MACHINE"-unknown-esx
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-esx
+	;;
     amd64:Isilon\ OneFS:*:*)
-	echo x86_64-unknown-onefs
-	exit ;;
+	GUESS=x86_64-unknown-onefs
+	;;
     *:Unleashed:*:*)
-	echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
-	exit ;;
+	GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+	;;
 esac
 
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+    echo "$GUESS"
+    exit
+fi
+
 # No uname command or uname output not recognized.
 set_cc_for_build
 cat > "$dummy.c" <<EOF
@@ -1592,7 +1732,7 @@ main ()
 }
 EOF
 
-$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
 	{ echo "$SYSTEM_NAME"; exit; }
 
 # Apollos put the system type in the environment.
@@ -1600,7 +1740,7 @@ test -d /usr/apollo && { echo "$ISP-apol
 
 echo "$0: unable to guess system type" >&2
 
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+case $UNAME_MACHINE:$UNAME_SYSTEM in
     mips:Linux | mips64:Linux)
 	# If we got here on MIPS GNU/Linux, output extra information.
 	cat >&2 <<EOF
@@ -1617,9 +1757,17 @@ This script (version $timestamp), has fa
 operating system you are using. If your script is old, overwrite *all*
 copies of config.guess and config.sub with the latest versions from:
 
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+  https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
 and
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+  https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
+# shellcheck disable=SC2003
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
+   cat >&2 <<EOF
 
 If $0 has already been updated, send the following data and any
 information you think might be pertinent to config-patches@gnu.org to
@@ -1647,6 +1795,7 @@ UNAME_RELEASE = "$UNAME_RELEASE"
 UNAME_SYSTEM  = "$UNAME_SYSTEM"
 UNAME_VERSION = "$UNAME_VERSION"
 EOF
+fi
 
 exit 1
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config-ml.in ./config-ml.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config-ml.in	2019-12-11 01:49:17.000000000 +0000
+++ ./config-ml.in	2024-02-01 01:47:14.000000000 +0000
@@ -383,6 +383,19 @@ mips*-*-*)
 	  done
 	fi
 	;;
+msp430-*-*)
+	if [ x$enable_no_exceptions = xno ]
+	then
+	  old_multidirs="${multidirs}"
+	  multidirs=""
+	  for x in ${old_multidirs}; do
+	    case "$x" in
+	      *no-exceptions* ) : ;;
+	      *) multidirs="${multidirs} ${x}" ;;
+	    esac
+	  done
+	fi
+	;;
 powerpc*-*-* | rs6000*-*-*)
 	if [ x$enable_aix64 = xno ]
 	then
@@ -486,10 +499,8 @@ cat > Multi.tem <<\EOF
 
 PWD_COMMAND=$${PWDCMD-pwd}
 
-# FIXME: There should be an @-sign in front of the `if'.
-# Leave out until this is tested a bit more.
 multi-do:
-	if [ -z "$(MULTIDIRS)" ]; then \
+	@if [ -z "$(MULTIDIRS)" ]; then \
 	  true; \
 	else \
 	  rootpre=`${PWD_COMMAND}`/; export rootpre; \
@@ -512,6 +523,7 @@ multi-do:
 				prefix="$(prefix)" \
 				exec_prefix="$(exec_prefix)" \
 				GOCFLAGS="$(GOCFLAGS) $${flags}" \
+				GDCFLAGS="$(GDCFLAGS) $${flags}" \
 				CXXFLAGS="$(CXXFLAGS) $${flags}" \
 				LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
 				LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \
@@ -533,10 +545,8 @@ multi-do:
 	  done; \
 	fi
 
-# FIXME: There should be an @-sign in front of the `if'.
-# Leave out until this is tested a bit more.
 multi-clean:
-	if [ -z "$(MULTIDIRS)" ]; then \
+	@if [ -z "$(MULTIDIRS)" ]; then \
 	  true; \
 	else \
 	  lib=`${PWD_COMMAND} | sed -e 's,^.*/\([^/][^/]*\)$$,\1,'`; \
@@ -745,7 +755,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n
         break
       fi
     done
-    ml_config_env='CC="${CC_}$flags" CXX="${CXX_}$flags" F77="${F77_}$flags" GFORTRAN="${GFORTRAN_}$flags" GOC="${GOC_}$flags"'
+    ml_config_env='CC="${CC_}$flags" CXX="${CXX_}$flags" F77="${F77_}$flags" GFORTRAN="${GFORTRAN_}$flags" GOC="${GOC_}$flags" GDC="${GDC_}$flags"'
 
     if [ "${with_target_subdir}" = "." ]; then
 	CC_=$CC' '
@@ -753,6 +763,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n
 	F77_=$F77' '
 	GFORTRAN_=$GFORTRAN' '
 	GOC_=$GOC' '
+	GDC_=$GDC' '
     else
 	# Create a regular expression that matches any string as long
 	# as ML_POPDIR.
@@ -817,6 +828,18 @@ if [ -n "${multidirs}" ] && [ -z "${ml_n
 	  esac
 	done
 
+	GDC_=
+	for arg in ${GDC}; do
+	  case $arg in
+	  -[BIL]"${ML_POPDIR}"/*)
+	    GDC_="${GDC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+	  "${ML_POPDIR}"/*)
+	    GDC_="${GDC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+	  *)
+	    GDC_="${GDC_}${arg} " ;;
+	  esac
+	done
+
 	if test "x${LD_LIBRARY_PATH+set}" = xset; then
 	  LD_LIBRARY_PATH_=
 	  for arg in `echo "$LD_LIBRARY_PATH" | tr ':' ' '`; do
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config.sub ./config.sub
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/config.sub	2019-12-11 01:49:17.000000000 +0000
+++ ./config.sub	2024-02-01 01:47:14.000000000 +0000
@@ -1,12 +1,14 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2019 Free Software Foundation, Inc.
+#   Copyright 1992-2023 Free Software Foundation, Inc.
 
-timestamp='2019-05-23'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2023-09-19'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -33,7 +35,7 @@ timestamp='2019-05-23'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -50,6 +52,13 @@ timestamp='2019-05-23'
 #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
 # It is wrong to echo any other type of specification.
 
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX.  However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
@@ -67,13 +76,13 @@ Report bugs and patches to <config-patch
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2019 Free Software Foundation, Inc.
+Copyright 1992-2023 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 
 help="
-Try \`$me --help' for more information."
+Try '$me --help' for more information."
 
 # Parse command line
 while test $# -gt 0 ; do
@@ -112,40 +121,42 @@ esac
 
 # Split fields of configuration type
 # shellcheck disable=SC2162
+saved_IFS=$IFS
 IFS="-" read field1 field2 field3 field4 <<EOF
 $1
 EOF
+IFS=$saved_IFS
 
 # Separate into logical components for further validation
 case $1 in
 	*-*-*-*-*)
-		echo Invalid configuration \`"$1"\': more than four components >&2
+		echo "Invalid configuration '$1': more than four components" >&2
 		exit 1
 		;;
 	*-*-*-*)
 		basic_machine=$field1-$field2
-		os=$field3-$field4
+		basic_os=$field3-$field4
 		;;
 	*-*-*)
 		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
 		# parts
 		maybe_os=$field2-$field3
 		case $maybe_os in
-			nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
-			| linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
+			nto-qnx* | linux-* | uclinux-uclibc* \
 			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
 			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
-			| storm-chaos* | os2-emx* | rtmk-nova*)
+			| storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \
+			| windows-* )
 				basic_machine=$field1
-				os=$maybe_os
+				basic_os=$maybe_os
 				;;
 			android-linux)
 				basic_machine=$field1-unknown
-				os=linux-android
+				basic_os=linux-android
 				;;
 			*)
 				basic_machine=$field1-$field2
-				os=$field3
+				basic_os=$field3
 				;;
 		esac
 		;;
@@ -154,7 +165,7 @@ case $1 in
 		case $field1-$field2 in
 			decstation-3100)
 				basic_machine=mips-dec
-				os=
+				basic_os=
 				;;
 			*-*)
 				# Second component is usually, but not always the OS
@@ -162,7 +173,11 @@ case $1 in
 					# Prevent following clause from handling this valid os
 					sun*os*)
 						basic_machine=$field1
-						os=$field2
+						basic_os=$field2
+						;;
+					zephyr*)
+						basic_machine=$field1-unknown
+						basic_os=$field2
 						;;
 					# Manufacturers
 					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
@@ -175,11 +190,11 @@ case $1 in
 					| microblaze* | sim | cisco \
 					| oki | wec | wrs | winbond)
 						basic_machine=$field1-$field2
-						os=
+						basic_os=
 						;;
 					*)
 						basic_machine=$field1
-						os=$field2
+						basic_os=$field2
 						;;
 				esac
 			;;
@@ -191,450 +206,451 @@ case $1 in
 		case $field1 in
 			386bsd)
 				basic_machine=i386-pc
-				os=bsd
+				basic_os=bsd
 				;;
 			a29khif)
 				basic_machine=a29k-amd
-				os=udi
+				basic_os=udi
 				;;
 			adobe68k)
 				basic_machine=m68010-adobe
-				os=scout
+				basic_os=scout
 				;;
 			alliant)
 				basic_machine=fx80-alliant
-				os=
+				basic_os=
 				;;
 			altos | altos3068)
 				basic_machine=m68k-altos
-				os=
+				basic_os=
 				;;
 			am29k)
 				basic_machine=a29k-none
-				os=bsd
+				basic_os=bsd
 				;;
 			amdahl)
 				basic_machine=580-amdahl
-				os=sysv
+				basic_os=sysv
 				;;
 			amiga)
 				basic_machine=m68k-unknown
-				os=
+				basic_os=
 				;;
 			amigaos | amigados)
 				basic_machine=m68k-unknown
-				os=amigaos
+				basic_os=amigaos
 				;;
 			amigaunix | amix)
 				basic_machine=m68k-unknown
-				os=sysv4
+				basic_os=sysv4
 				;;
 			apollo68)
 				basic_machine=m68k-apollo
-				os=sysv
+				basic_os=sysv
 				;;
 			apollo68bsd)
 				basic_machine=m68k-apollo
-				os=bsd
+				basic_os=bsd
 				;;
 			aros)
 				basic_machine=i386-pc
-				os=aros
+				basic_os=aros
 				;;
 			aux)
 				basic_machine=m68k-apple
-				os=aux
+				basic_os=aux
 				;;
 			balance)
 				basic_machine=ns32k-sequent
-				os=dynix
+				basic_os=dynix
 				;;
 			blackfin)
 				basic_machine=bfin-unknown
-				os=linux
+				basic_os=linux
 				;;
 			cegcc)
 				basic_machine=arm-unknown
-				os=cegcc
+				basic_os=cegcc
 				;;
 			convex-c1)
 				basic_machine=c1-convex
-				os=bsd
+				basic_os=bsd
 				;;
 			convex-c2)
 				basic_machine=c2-convex
-				os=bsd
+				basic_os=bsd
 				;;
 			convex-c32)
 				basic_machine=c32-convex
-				os=bsd
+				basic_os=bsd
 				;;
 			convex-c34)
 				basic_machine=c34-convex
-				os=bsd
+				basic_os=bsd
 				;;
 			convex-c38)
 				basic_machine=c38-convex
-				os=bsd
+				basic_os=bsd
 				;;
 			cray)
 				basic_machine=j90-cray
-				os=unicos
+				basic_os=unicos
 				;;
 			crds | unos)
 				basic_machine=m68k-crds
-				os=
+				basic_os=
 				;;
 			da30)
 				basic_machine=m68k-da30
-				os=
+				basic_os=
 				;;
 			decstation | pmax | pmin | dec3100 | decstatn)
 				basic_machine=mips-dec
-				os=
+				basic_os=
 				;;
 			delta88)
 				basic_machine=m88k-motorola
-				os=sysv3
+				basic_os=sysv3
 				;;
 			dicos)
 				basic_machine=i686-pc
-				os=dicos
+				basic_os=dicos
 				;;
 			djgpp)
 				basic_machine=i586-pc
-				os=msdosdjgpp
+				basic_os=msdosdjgpp
 				;;
 			ebmon29k)
 				basic_machine=a29k-amd
-				os=ebmon
+				basic_os=ebmon
 				;;
 			es1800 | OSE68k | ose68k | ose | OSE)
 				basic_machine=m68k-ericsson
-				os=ose
+				basic_os=ose
 				;;
 			gmicro)
 				basic_machine=tron-gmicro
-				os=sysv
+				basic_os=sysv
 				;;
 			go32)
 				basic_machine=i386-pc
-				os=go32
+				basic_os=go32
 				;;
 			h8300hms)
 				basic_machine=h8300-hitachi
-				os=hms
+				basic_os=hms
 				;;
 			h8300xray)
 				basic_machine=h8300-hitachi
-				os=xray
+				basic_os=xray
 				;;
 			h8500hms)
 				basic_machine=h8500-hitachi
-				os=hms
+				basic_os=hms
 				;;
 			harris)
 				basic_machine=m88k-harris
-				os=sysv3
+				basic_os=sysv3
 				;;
-			hp300)
+			hp300 | hp300hpux)
 				basic_machine=m68k-hp
+				basic_os=hpux
 				;;
 			hp300bsd)
 				basic_machine=m68k-hp
-				os=bsd
-				;;
-			hp300hpux)
-				basic_machine=m68k-hp
-				os=hpux
+				basic_os=bsd
 				;;
 			hppaosf)
 				basic_machine=hppa1.1-hp
-				os=osf
+				basic_os=osf
 				;;
 			hppro)
 				basic_machine=hppa1.1-hp
-				os=proelf
+				basic_os=proelf
 				;;
 			i386mach)
 				basic_machine=i386-mach
-				os=mach
-				;;
-			vsta)
-				basic_machine=i386-pc
-				os=vsta
+				basic_os=mach
 				;;
 			isi68 | isi)
 				basic_machine=m68k-isi
-				os=sysv
+				basic_os=sysv
 				;;
 			m68knommu)
 				basic_machine=m68k-unknown
-				os=linux
+				basic_os=linux
 				;;
 			magnum | m3230)
 				basic_machine=mips-mips
-				os=sysv
+				basic_os=sysv
 				;;
 			merlin)
 				basic_machine=ns32k-utek
-				os=sysv
+				basic_os=sysv
 				;;
 			mingw64)
 				basic_machine=x86_64-pc
-				os=mingw64
+				basic_os=mingw64
 				;;
 			mingw32)
 				basic_machine=i686-pc
-				os=mingw32
+				basic_os=mingw32
 				;;
 			mingw32ce)
 				basic_machine=arm-unknown
-				os=mingw32ce
+				basic_os=mingw32ce
 				;;
 			monitor)
 				basic_machine=m68k-rom68k
-				os=coff
+				basic_os=coff
 				;;
 			morphos)
 				basic_machine=powerpc-unknown
-				os=morphos
+				basic_os=morphos
 				;;
 			moxiebox)
 				basic_machine=moxie-unknown
-				os=moxiebox
+				basic_os=moxiebox
 				;;
 			msdos)
 				basic_machine=i386-pc
-				os=msdos
+				basic_os=msdos
 				;;
 			msys)
 				basic_machine=i686-pc
-				os=msys
+				basic_os=msys
 				;;
 			mvs)
 				basic_machine=i370-ibm
-				os=mvs
+				basic_os=mvs
 				;;
 			nacl)
 				basic_machine=le32-unknown
-				os=nacl
+				basic_os=nacl
 				;;
 			ncr3000)
 				basic_machine=i486-ncr
-				os=sysv4
+				basic_os=sysv4
 				;;
 			netbsd386)
 				basic_machine=i386-pc
-				os=netbsd
+				basic_os=netbsd
 				;;
 			netwinder)
 				basic_machine=armv4l-rebel
-				os=linux
+				basic_os=linux
 				;;
 			news | news700 | news800 | news900)
 				basic_machine=m68k-sony
-				os=newsos
+				basic_os=newsos
 				;;
 			news1000)
 				basic_machine=m68030-sony
-				os=newsos
+				basic_os=newsos
 				;;
 			necv70)
 				basic_machine=v70-nec
-				os=sysv
+				basic_os=sysv
 				;;
 			nh3000)
 				basic_machine=m68k-harris
-				os=cxux
+				basic_os=cxux
 				;;
 			nh[45]000)
 				basic_machine=m88k-harris
-				os=cxux
+				basic_os=cxux
 				;;
 			nindy960)
 				basic_machine=i960-intel
-				os=nindy
+				basic_os=nindy
 				;;
 			mon960)
 				basic_machine=i960-intel
-				os=mon960
+				basic_os=mon960
 				;;
 			nonstopux)
 				basic_machine=mips-compaq
-				os=nonstopux
+				basic_os=nonstopux
 				;;
 			os400)
 				basic_machine=powerpc-ibm
-				os=os400
+				basic_os=os400
 				;;
 			OSE68000 | ose68000)
 				basic_machine=m68000-ericsson
-				os=ose
+				basic_os=ose
 				;;
 			os68k)
 				basic_machine=m68k-none
-				os=os68k
+				basic_os=os68k
 				;;
 			paragon)
 				basic_machine=i860-intel
-				os=osf
+				basic_os=osf
 				;;
 			parisc)
 				basic_machine=hppa-unknown
-				os=linux
+				basic_os=linux
+				;;
+			psp)
+				basic_machine=mipsallegrexel-sony
+				basic_os=psp
 				;;
 			pw32)
 				basic_machine=i586-unknown
-				os=pw32
+				basic_os=pw32
 				;;
 			rdos | rdos64)
 				basic_machine=x86_64-pc
-				os=rdos
+				basic_os=rdos
 				;;
 			rdos32)
 				basic_machine=i386-pc
-				os=rdos
+				basic_os=rdos
 				;;
 			rom68k)
 				basic_machine=m68k-rom68k
-				os=coff
+				basic_os=coff
 				;;
 			sa29200)
 				basic_machine=a29k-amd
-				os=udi
+				basic_os=udi
 				;;
 			sei)
 				basic_machine=mips-sei
-				os=seiux
+				basic_os=seiux
 				;;
 			sequent)
 				basic_machine=i386-sequent
-				os=
+				basic_os=
 				;;
 			sps7)
 				basic_machine=m68k-bull
-				os=sysv2
+				basic_os=sysv2
 				;;
 			st2000)
 				basic_machine=m68k-tandem
-				os=
+				basic_os=
 				;;
 			stratus)
 				basic_machine=i860-stratus
-				os=sysv4
+				basic_os=sysv4
 				;;
 			sun2)
 				basic_machine=m68000-sun
-				os=
+				basic_os=
 				;;
 			sun2os3)
 				basic_machine=m68000-sun
-				os=sunos3
+				basic_os=sunos3
 				;;
 			sun2os4)
 				basic_machine=m68000-sun
-				os=sunos4
+				basic_os=sunos4
 				;;
 			sun3)
 				basic_machine=m68k-sun
-				os=
+				basic_os=
 				;;
 			sun3os3)
 				basic_machine=m68k-sun
-				os=sunos3
+				basic_os=sunos3
 				;;
 			sun3os4)
 				basic_machine=m68k-sun
-				os=sunos4
+				basic_os=sunos4
 				;;
 			sun4)
 				basic_machine=sparc-sun
-				os=
+				basic_os=
 				;;
 			sun4os3)
 				basic_machine=sparc-sun
-				os=sunos3
+				basic_os=sunos3
 				;;
 			sun4os4)
 				basic_machine=sparc-sun
-				os=sunos4
+				basic_os=sunos4
 				;;
 			sun4sol2)
 				basic_machine=sparc-sun
-				os=solaris2
+				basic_os=solaris2
 				;;
 			sun386 | sun386i | roadrunner)
 				basic_machine=i386-sun
-				os=
+				basic_os=
 				;;
 			sv1)
 				basic_machine=sv1-cray
-				os=unicos
+				basic_os=unicos
 				;;
 			symmetry)
 				basic_machine=i386-sequent
-				os=dynix
+				basic_os=dynix
 				;;
 			t3e)
 				basic_machine=alphaev5-cray
-				os=unicos
+				basic_os=unicos
 				;;
 			t90)
 				basic_machine=t90-cray
-				os=unicos
+				basic_os=unicos
 				;;
 			toad1)
 				basic_machine=pdp10-xkl
-				os=tops20
+				basic_os=tops20
 				;;
 			tpf)
 				basic_machine=s390x-ibm
-				os=tpf
+				basic_os=tpf
 				;;
 			udi29k)
 				basic_machine=a29k-amd
-				os=udi
+				basic_os=udi
 				;;
 			ultra3)
 				basic_machine=a29k-nyu
-				os=sym1
+				basic_os=sym1
 				;;
 			v810 | necv810)
 				basic_machine=v810-nec
-				os=none
+				basic_os=none
 				;;
 			vaxv)
 				basic_machine=vax-dec
-				os=sysv
+				basic_os=sysv
 				;;
 			vms)
 				basic_machine=vax-dec
-				os=vms
+				basic_os=vms
+				;;
+			vsta)
+				basic_machine=i386-pc
+				basic_os=vsta
 				;;
 			vxworks960)
 				basic_machine=i960-wrs
-				os=vxworks
+				basic_os=vxworks
 				;;
 			vxworks68)
 				basic_machine=m68k-wrs
-				os=vxworks
+				basic_os=vxworks
 				;;
 			vxworks29k)
 				basic_machine=a29k-wrs
-				os=vxworks
+				basic_os=vxworks
 				;;
 			xbox)
 				basic_machine=i686-pc
-				os=mingw32
+				basic_os=mingw32
 				;;
 			ymp)
 				basic_machine=ymp-cray
-				os=unicos
+				basic_os=unicos
 				;;
 			*)
 				basic_machine=$1
-				os=
+				basic_os=
 				;;
 		esac
 		;;
@@ -686,17 +702,17 @@ case $basic_machine in
 	bluegene*)
 		cpu=powerpc
 		vendor=ibm
-		os=cnk
+		basic_os=cnk
 		;;
 	decsystem10* | dec10*)
 		cpu=pdp10
 		vendor=dec
-		os=tops10
+		basic_os=tops10
 		;;
 	decsystem20* | dec20*)
 		cpu=pdp10
 		vendor=dec
-		os=tops20
+		basic_os=tops20
 		;;
 	delta | 3300 | motorola-3300 | motorola-delta \
 	      | 3300-motorola | delta-motorola)
@@ -706,7 +722,7 @@ case $basic_machine in
 	dpx2*)
 		cpu=m68k
 		vendor=bull
-		os=sysv3
+		basic_os=sysv3
 		;;
 	encore | umax | mmax)
 		cpu=ns32k
@@ -715,7 +731,7 @@ case $basic_machine in
 	elxsi)
 		cpu=elxsi
 		vendor=elxsi
-		os=${os:-bsd}
+		basic_os=${basic_os:-bsd}
 		;;
 	fx2800)
 		cpu=i860
@@ -728,7 +744,7 @@ case $basic_machine in
 	h3050r* | hiux*)
 		cpu=hppa1.1
 		vendor=hitachi
-		os=hiuxwe2
+		basic_os=hiuxwe2
 		;;
 	hp3k9[0-9][0-9] | hp9[0-9][0-9])
 		cpu=hppa1.0
@@ -771,36 +787,36 @@ case $basic_machine in
 	i*86v32)
 		cpu=`echo "$1" | sed -e 's/86.*/86/'`
 		vendor=pc
-		os=sysv32
+		basic_os=sysv32
 		;;
 	i*86v4*)
 		cpu=`echo "$1" | sed -e 's/86.*/86/'`
 		vendor=pc
-		os=sysv4
+		basic_os=sysv4
 		;;
 	i*86v)
 		cpu=`echo "$1" | sed -e 's/86.*/86/'`
 		vendor=pc
-		os=sysv
+		basic_os=sysv
 		;;
 	i*86sol2)
 		cpu=`echo "$1" | sed -e 's/86.*/86/'`
 		vendor=pc
-		os=solaris2
+		basic_os=solaris2
 		;;
 	j90 | j90-cray)
 		cpu=j90
 		vendor=cray
-		os=${os:-unicos}
+		basic_os=${basic_os:-unicos}
 		;;
 	iris | iris4d)
 		cpu=mips
 		vendor=sgi
-		case $os in
+		case $basic_os in
 		    irix*)
 			;;
 		    *)
-			os=irix4
+			basic_os=irix4
 			;;
 		esac
 		;;
@@ -811,26 +827,26 @@ case $basic_machine in
 	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
 		cpu=m68k
 		vendor=atari
-		os=mint
+		basic_os=mint
 		;;
 	news-3600 | risc-news)
 		cpu=mips
 		vendor=sony
-		os=newsos
+		basic_os=newsos
 		;;
 	next | m*-next)
 		cpu=m68k
 		vendor=next
-		case $os in
+		case $basic_os in
 		    openstep*)
 		        ;;
 		    nextstep*)
 			;;
 		    ns2*)
-		      os=nextstep2
+		      basic_os=nextstep2
 			;;
 		    *)
-		      os=nextstep3
+		      basic_os=nextstep3
 			;;
 		esac
 		;;
@@ -841,12 +857,12 @@ case $basic_machine in
 	op50n-* | op60c-*)
 		cpu=hppa1.1
 		vendor=oki
-		os=proelf
+		basic_os=proelf
 		;;
 	pa-hitachi)
 		cpu=hppa1.1
 		vendor=hitachi
-		os=hiuxwe2
+		basic_os=hiuxwe2
 		;;
 	pbd)
 		cpu=sparc
@@ -883,12 +899,12 @@ case $basic_machine in
 	sde)
 		cpu=mipsisa32
 		vendor=sde
-		os=${os:-elf}
+		basic_os=${basic_os:-elf}
 		;;
 	simso-wrs)
 		cpu=sparclite
 		vendor=wrs
-		os=vxworks
+		basic_os=vxworks
 		;;
 	tower | tower-32)
 		cpu=m68k
@@ -905,7 +921,7 @@ case $basic_machine in
 	w89k-*)
 		cpu=hppa1.1
 		vendor=winbond
-		os=proelf
+		basic_os=proelf
 		;;
 	none)
 		cpu=none
@@ -922,11 +938,13 @@ case $basic_machine in
 
 	*-*)
 		# shellcheck disable=SC2162
+		saved_IFS=$IFS
 		IFS="-" read cpu vendor <<EOF
 $basic_machine
 EOF
+		IFS=$saved_IFS
 		;;
-	# We use `pc' rather than `unknown'
+	# We use 'pc' rather than 'unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
 	i*86 | x86_64)
@@ -958,11 +976,11 @@ case $cpu-$vendor in
 	# some cases the only manufacturer, in others, it is the most popular.
 	craynv-unknown)
 		vendor=cray
-		os=${os:-unicosmp}
+		basic_os=${basic_os:-unicosmp}
 		;;
 	c90-unknown | c90-cray)
 		vendor=cray
-		os=${os:-unicos}
+		basic_os=${Basic_os:-unicos}
 		;;
 	fx80-unknown)
 		vendor=alliant
@@ -1003,10 +1021,15 @@ case $cpu-$vendor in
 		;;
 
 	# Here we normalize CPU types with a missing or matching vendor
+	armh-unknown | armh-alt)
+		cpu=armv7l
+		vendor=alt
+		basic_os=${basic_os:-linux-gnueabihf}
+		;;
 	dpx20-unknown | dpx20-bull)
 		cpu=rs6000
 		vendor=bull
-		os=${os:-bosx}
+		basic_os=${basic_os:-bosx}
 		;;
 
 	# Here we normalize CPU types irrespective of the vendor
@@ -1015,7 +1038,7 @@ case $cpu-$vendor in
 		;;
 	blackfin-*)
 		cpu=bfin
-		os=linux
+		basic_os=linux
 		;;
 	c54x-*)
 		cpu=tic54x
@@ -1028,7 +1051,7 @@ case $cpu-$vendor in
 		;;
 	e500v[12]-*)
 		cpu=powerpc
-		os=$os"spe"
+		basic_os=${basic_os}"spe"
 		;;
 	mips3*-*)
 		cpu=mips64
@@ -1038,7 +1061,7 @@ case $cpu-$vendor in
 		;;
 	m68knommu-*)
 		cpu=m68k
-		os=linux
+		basic_os=linux
 		;;
 	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
 		cpu=s12z
@@ -1048,12 +1071,12 @@ case $cpu-$vendor in
 		;;
 	parisc-*)
 		cpu=hppa
-		os=linux
+		basic_os=linux
 		;;
 	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
 		cpu=i586
 		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+	pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
 		cpu=i686
 		;;
 	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
@@ -1104,11 +1127,14 @@ case $cpu-$vendor in
 	xscale-* | xscalee[bl]-*)
 		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
 		;;
+	arm64-* | aarch64le-*)
+		cpu=aarch64
+		;;
 
 	# Recognize the canonical CPU Types that limit and/or modify the
 	# company names they are paired with.
 	cr16-*)
-		os=${os:-elf}
+		basic_os=${basic_os:-elf}
 		;;
 	crisv32-* | etraxfs*-*)
 		cpu=crisv32
@@ -1119,7 +1145,7 @@ case $cpu-$vendor in
 		vendor=axis
 		;;
 	crx-*)
-		os=${os:-elf}
+		basic_os=${basic_os:-elf}
 		;;
 	neo-tandem)
 		cpu=neo
@@ -1141,16 +1167,12 @@ case $cpu-$vendor in
 		cpu=nsx
 		vendor=tandem
 		;;
-	s390-*)
-		cpu=s390
-		vendor=ibm
-		;;
-	s390x-*)
-		cpu=s390x
-		vendor=ibm
+	mipsallegrexel-sony)
+		cpu=mipsallegrexel
+		vendor=sony
 		;;
 	tile*-*)
-		os=${os:-linux-gnu}
+		basic_os=${basic_os:-linux-gnu}
 		;;
 
 	*)
@@ -1159,15 +1181,15 @@ case $cpu-$vendor in
 		case $cpu in
 			1750a | 580 \
 			| a29k \
-			| aarch64 | aarch64_be \
+			| aarch64 | aarch64_be | aarch64c | arm64ec \
 			| abacus \
 			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
 			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
 			| alphapca5[67] | alpha64pca5[67] \
 			| am33_2.0 \
 			| amdgcn \
-			| arc | arceb \
-			| arm  | arm[lb]e | arme[lb] | armv* \
+			| arc | arceb | arc32 | arc64 \
+			| arm | arm[lb]e | arme[lb] | armv* \
 			| avr | avr32 \
 			| asmjs \
 			| ba \
@@ -1178,40 +1200,23 @@ case $cpu-$vendor in
 			| d10v | d30v | dlx | dsp16xx \
 			| e2k | elxsi | epiphany \
 			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+			| javascript \
 			| h8300 | h8500 \
 			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 			| hexagon \
 			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
 			| ip2k | iq2000 \
 			| k1om \
+			| kvx \
 			| le32 | le64 \
 			| lm32 \
+			| loongarch32 | loongarch64 \
 			| m32c | m32r | m32rle \
 			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
 			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
 			| m88110 | m88k | maxq | mb | mcore | mep | metag \
 			| microblaze | microblazeel \
-			| mips | mipsbe | mipseb | mipsel | mipsle \
-			| mips16 \
-			| mips64 | mips64eb | mips64el \
-			| mips64octeon | mips64octeonel \
-			| mips64orion | mips64orionel \
-			| mips64r5900 | mips64r5900el \
-			| mips64vr | mips64vrel \
-			| mips64vr4100 | mips64vr4100el \
-			| mips64vr4300 | mips64vr4300el \
-			| mips64vr5000 | mips64vr5000el \
-			| mips64vr5900 | mips64vr5900el \
-			| mipsisa32 | mipsisa32el \
-			| mipsisa32r2 | mipsisa32r2el \
-			| mipsisa32r6 | mipsisa32r6el \
-			| mipsisa64 | mipsisa64el \
-			| mipsisa64r2 | mipsisa64r2el \
-			| mipsisa64r6 | mipsisa64r6el \
-			| mipsisa64sb1 | mipsisa64sb1el \
-			| mipsisa64sr71k | mipsisa64sr71kel \
-			| mipsr5900 | mipsr5900el \
-			| mipstx39 | mipstx39el \
+			| mips* \
 			| mmix \
 			| mn10200 | mn10300 \
 			| moxie \
@@ -1230,8 +1235,9 @@ case $cpu-$vendor in
 			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
 			| pru \
 			| pyramid \
-			| riscv | riscv32 | riscv64 \
+			| riscv | riscv32 | riscv32be | riscv64 | riscv64be \
 			| rl78 | romp | rs6000 | rx \
+			| s390 | s390x \
 			| score \
 			| sh | shl \
 			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
@@ -1241,6 +1247,7 @@ case $cpu-$vendor in
 			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
 			| spu \
 			| tahoe \
+			| thumbv7* \
 			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
 			| tron \
 			| ubicom32 \
@@ -1257,7 +1264,7 @@ case $cpu-$vendor in
 				;;
 
 			*)
-				echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+				echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2
 				exit 1
 				;;
 		esac
@@ -1278,8 +1285,54 @@ esac
 
 # Decode manufacturer-specific aliases for certain operating systems.
 
-if [ x$os != x ]
+if test x"$basic_os" != x
 then
+
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
+# set os.
+obj=
+case $basic_os in
+	gnu/linux*)
+		kernel=linux
+		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
+		;;
+	os2-emx)
+		kernel=os2
+		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
+		;;
+	nto-qnx*)
+		kernel=nto
+		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
+		;;
+	*-*)
+		# shellcheck disable=SC2162
+		saved_IFS=$IFS
+		IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+		IFS=$saved_IFS
+		;;
+	# Default OS when just kernel was specified
+	nto*)
+		kernel=nto
+		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
+		;;
+	linux*)
+		kernel=linux
+		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+		;;
+	managarm*)
+		kernel=managarm
+		os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
+		;;
+	*)
+		kernel=
+		os=$basic_os
+		;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
 case $os in
 	# First match some system type aliases that might get confused
 	# with valid system types.
@@ -1291,7 +1344,7 @@ case $os in
 		os=cnk
 		;;
 	solaris1 | solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
 		;;
 	solaris)
 		os=solaris2
@@ -1299,9 +1352,6 @@ case $os in
 	unixware*)
 		os=sysv4.2uw
 		;;
-	gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
 	# es1800 is here to avoid being matched by es* (a different OS)
 	es1800*)
 		os=ose
@@ -1323,12 +1373,9 @@ case $os in
 		os=sco3.2v4
 		;;
 	sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		;;
-	sco3.2v[4-9]* | sco5v6*)
-		# Don't forget version if it is 3.2v4 or newer.
+		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
 		;;
-	scout)
+	sco*v* | scout)
 		# Don't match below
 		;;
 	sco*)
@@ -1337,77 +1384,25 @@ case $os in
 	psos*)
 		os=psos
 		;;
-	# Now accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST end in a * to match a version number.
-	# sysv* is not here because it comes later, after sysvr4.
-	gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
-	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
-	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
-	     | sym* | kopensolaris* | plan9* \
-	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
-	     | aos* | aros* | cloudabi* | sortix* \
-	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
-	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
-	     | knetbsd* | mirbsd* | netbsd* \
-	     | bitrig* | openbsd* | solidbsd* | libertybsd* \
-	     | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
-	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
-	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
-	     | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
-	     | chorusrdb* | cegcc* | glidix* \
-	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
-	     | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
-	     | linux-newlib* | linux-musl* | linux-uclibc* \
-	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
-	     | interix* | uwin* | mks* | rhapsody* | darwin* \
-	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
-	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
-	     | os2* | vos* | palmos* | uclinux* | nucleus* \
-	     | morphos* | superux* | rtmk* | windiss* \
-	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
-	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
-	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
-	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
 	qnx*)
-		case $cpu in
-		    x86 | i*86)
-			;;
-		    *)
-			os=nto-$os
-			;;
-		esac
+		os=qnx
 		;;
 	hiux*)
 		os=hiuxwe2
 		;;
-	nto-qnx*)
-		;;
-	nto*)
-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
-		;;
-	sim | xray | os68k* | v88r* \
-	    | windows* | osx | abug | netware* | os9* \
-	    | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
-		;;
-	linux-dietlibc)
-		os=linux-dietlibc
-		;;
-	linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
 	lynx*178)
 		os=lynxos178
 		;;
 	lynx*5)
 		os=lynxos5
 		;;
+	lynxos*)
+		# don't get caught up in next wildcard
+		;;
 	lynx*)
 		os=lynxos
 		;;
-	mac*)
+	mac[0-9]*)
 		os=`echo "$os" | sed -e 's|mac|macos|'`
 		;;
 	opened*)
@@ -1452,12 +1447,9 @@ case $os in
 	ns2)
 		os=nextstep2
 		;;
-	nsk*)
-		os=nsk
-		;;
 	# Preserve the version number of sinix5.
 	sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
+		os=`echo "$os" | sed -e 's|sinix|sysv|'`
 		;;
 	sinix*)
 		os=sysv4
@@ -1480,18 +1472,12 @@ case $os in
 	sysvr4)
 		os=sysv4
 		;;
-	# This must come after sysvr4.
-	sysv*)
-		;;
 	ose*)
 		os=ose
 		;;
 	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
 		os=mint
 		;;
-	zvmoe)
-		os=zvmoe
-		;;
 	dicos*)
 		os=dicos
 		;;
@@ -1504,23 +1490,21 @@ case $os in
 			os=eabi
 			;;
 		    *)
-			os=elf
+			os=
+			obj=elf
 			;;
 		esac
 		;;
-	nacl*)
-		;;
-	ios)
-		;;
-	none)
-		;;
-	*-eabi)
+	aout* | coff* | elf* | pe*)
+		# These are machine code file formats, not OSes
+		obj=$os
+		os=
 		;;
 	*)
-		echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
-		exit 1
+		# No normalization, but not necessarily accepted, that comes below.
 		;;
 esac
+
 else
 
 # Here we handle the default operating systems that come with various machines.
@@ -1533,42 +1517,54 @@ else
 # will signal an error saying that MANUFACTURER isn't an operating
 # system, and we'll never get to this point.
 
+kernel=
+obj=
 case $cpu-$vendor in
 	score-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	spu-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	*-acorn)
 		os=riscix1.2
 		;;
 	arm*-rebel)
-		os=linux
+		kernel=linux
+		os=gnu
 		;;
 	arm*-semi)
-		os=aout
+		os=
+		obj=aout
 		;;
 	c4x-* | tic4x-*)
-		os=coff
+		os=
+		obj=coff
 		;;
 	c8051-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	clipper-intergraph)
 		os=clix
 		;;
 	hexagon-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	tic54x-*)
-		os=coff
+		os=
+		obj=coff
 		;;
 	tic55x-*)
-		os=coff
+		os=
+		obj=coff
 		;;
 	tic6x-*)
-		os=coff
+		os=
+		obj=coff
 		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
@@ -1590,19 +1586,24 @@ case $cpu-$vendor in
 		os=sunos3
 		;;
 	m68*-cisco)
-		os=aout
+		os=
+		obj=aout
 		;;
 	mep-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	mips*-cisco)
-		os=elf
+		os=
+		obj=elf
 		;;
 	mips*-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	or32-*)
-		os=coff
+		os=
+		obj=coff
 		;;
 	*-tti)	# must be before sparc entry or we get the wrong os.
 		os=sysv3
@@ -1611,7 +1612,8 @@ case $cpu-$vendor in
 		os=sunos4.1.1
 		;;
 	pru-*)
-		os=elf
+		os=
+		obj=elf
 		;;
 	*-be)
 		os=beos
@@ -1692,10 +1694,12 @@ case $cpu-$vendor in
 		os=uxpv
 		;;
 	*-rom68k)
-		os=coff
+		os=
+		obj=coff
 		;;
 	*-*bug)
-		os=coff
+		os=
+		obj=coff
 		;;
 	*-apple)
 		os=macos
@@ -1710,84 +1714,242 @@ case $cpu-$vendor in
 		os=none
 		;;
 esac
+
 fi
 
+# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ).
+
+case $os in
+	# Sometimes we do "kernel-libc", so those need to count as OSes.
+	musl* | newlib* | relibc* | uclibc*)
+		;;
+	# Likewise for "kernel-abi"
+	eabi* | gnueabi*)
+		;;
+	# VxWorks passes extra cpu info in the 4th filed.
+	simlinux | simwindows | spe)
+		;;
+	# See `case $cpu-$os` validation below
+	ghcjs)
+		;;
+	# Now accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST end in a * to match a version number.
+	gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+	     | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
+	     | hiux* | abug | nacl* | netware* | windows* \
+	     | os9* | macos* | osx* | ios* | tvos* | watchos* \
+	     | mpw* | magic* | mmixware* | mon960* | lnews* \
+	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
+	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
+	     | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
+	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
+	     | bosx* | nextstep* | cxux* | oabi* \
+	     | ptx* | ecoff* | winnt* | domain* | vsta* \
+	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
+	     | chorusrdb* | cegcc* | glidix* | serenity* \
+	     | cygwin* | msys* | moss* | proelf* | rtems* \
+	     | midipix* | mingw32* | mingw64* | mint* \
+	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+	     | interix* | uwin* | mks* | rhapsody* | darwin* \
+	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
+	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
+	     | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+	     | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+	     | fiwix* | mlibc* | cos* | mbr* )
+		;;
+	# This one is extra strict with allowed versions
+	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		;;
+	none)
+		;;
+	kernel* | msvc* )
+		# Restricted further below
+		;;
+	'')
+		if test x"$obj" = x
+		then
+			echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2
+		fi
+		;;
+	*)
+		echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2
+		exit 1
+		;;
+esac
+
+case $obj in
+	aout* | coff* | elf* | pe*)
+		;;
+	'')
+		# empty is fine
+		;;
+	*)
+		echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2
+		exit 1
+		;;
+esac
+
+# Here we handle the constraint that a (synthetic) cpu and os are
+# valid only in combination with each other and nowhere else.
+case $cpu-$os in
+	# The "javascript-unknown-ghcjs" triple is used by GHC; we
+	# accept it here in order to tolerate that, but reject any
+	# variations.
+	javascript-ghcjs)
+		;;
+	javascript-* | *-ghcjs)
+		echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2
+		exit 1
+		;;
+esac
+
+# As a final step for OS-related things, validate the OS-kernel combination
+# (given a valid OS), if there is a kernel.
+case $kernel-$os-$obj in
+	linux-gnu*- | linux-dietlibc*- | linux-android*- | linux-newlib*- \
+		   | linux-musl*- | linux-relibc*- | linux-uclibc*- | linux-mlibc*- )
+		;;
+	uclinux-uclibc*- )
+		;;
+	managarm-mlibc*- | managarm-kernel*- )
+		;;
+	windows*-msvc*-)
+		;;
+	-dietlibc*- | -newlib*- | -musl*- | -relibc*- | -uclibc*- | -mlibc*- )
+		# These are just libc implementations, not actual OSes, and thus
+		# require a kernel.
+		echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2
+		exit 1
+		;;
+	-kernel*- )
+		echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2
+		exit 1
+		;;
+	*-kernel*- )
+		echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2
+		exit 1
+		;;
+	*-msvc*- )
+		echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
+		exit 1
+		;;
+	kfreebsd*-gnu*- | kopensolaris*-gnu*-)
+		;;
+	vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-)
+		;;
+	nto-qnx*-)
+		;;
+	os2-emx-)
+		;;
+	*-eabi*- | *-gnueabi*-)
+		;;
+	none--*)
+		# None (no kernel, i.e. freestanding / bare metal),
+		# can be paired with an machine code file format
+		;;
+	-*-)
+		# Blank kernel with real OS is always fine.
+		;;
+	--*)
+		# Blank kernel and OS with real machine code file format is always fine.
+		;;
+	*-*-*)
+		echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2
+		exit 1
+		;;
+esac
+
 # Here we handle the case where we know the os, and the CPU type, but not the
 # manufacturer.  We pick the logical manufacturer.
 case $vendor in
 	unknown)
-		case $os in
-			riscix*)
+		case $cpu-$os in
+			*-riscix*)
 				vendor=acorn
 				;;
-			sunos*)
+			*-sunos*)
 				vendor=sun
 				;;
-			cnk*|-aix*)
+			*-cnk* | *-aix*)
 				vendor=ibm
 				;;
-			beos*)
+			*-beos*)
 				vendor=be
 				;;
-			hpux*)
+			*-hpux*)
 				vendor=hp
 				;;
-			mpeix*)
+			*-mpeix*)
 				vendor=hp
 				;;
-			hiux*)
+			*-hiux*)
 				vendor=hitachi
 				;;
-			unos*)
+			*-unos*)
 				vendor=crds
 				;;
-			dgux*)
+			*-dgux*)
 				vendor=dg
 				;;
-			luna*)
+			*-luna*)
 				vendor=omron
 				;;
-			genix*)
+			*-genix*)
 				vendor=ns
 				;;
-			clix*)
+			*-clix*)
 				vendor=intergraph
 				;;
-			mvs* | opened*)
+			*-mvs* | *-opened*)
+				vendor=ibm
+				;;
+			*-os400*)
 				vendor=ibm
 				;;
-			os400*)
+			s390-* | s390x-*)
 				vendor=ibm
 				;;
-			ptx*)
+			*-ptx*)
 				vendor=sequent
 				;;
-			tpf*)
+			*-tpf*)
 				vendor=ibm
 				;;
-			vxsim* | vxworks* | windiss*)
+			*-vxsim* | *-vxworks* | *-windiss*)
 				vendor=wrs
 				;;
-			aux*)
+			*-aux*)
 				vendor=apple
 				;;
-			hms*)
+			*-hms*)
 				vendor=hitachi
 				;;
-			mpw* | macos*)
+			*-mpw* | *-macos*)
 				vendor=apple
 				;;
-			*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
 				vendor=atari
 				;;
-			vos*)
+			*-vos*)
 				vendor=stratus
 				;;
 		esac
 		;;
 esac
 
-echo "$cpu-$vendor-$os"
+echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}"
 exit
 
 # Local variables:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/configure ./configure
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/configure	2019-12-11 01:49:17.000000000 +0000
+++ ./configure	2024-02-01 01:47:14.000000000 +0000
@@ -603,20 +603,29 @@ WINDRES_FOR_TARGET
 STRIP_FOR_TARGET
 READELF_FOR_TARGET
 RANLIB_FOR_TARGET
+OTOOL_FOR_TARGET
 OBJDUMP_FOR_TARGET
 OBJCOPY_FOR_TARGET
 NM_FOR_TARGET
 LIPO_FOR_TARGET
 LD_FOR_TARGET
+DSYMUTIL_FOR_TARGET
 DLLTOOL_FOR_TARGET
 AS_FOR_TARGET
 AR_FOR_TARGET
+GM2_FOR_TARGET
+GDC_FOR_TARGET
 GOC_FOR_TARGET
 GFORTRAN_FOR_TARGET
 GCC_FOR_TARGET
 CXX_FOR_TARGET
 CC_FOR_TARGET
+RANLIB_PLUGIN_OPTION
+AR_PLUGIN_OPTION
+PKG_CONFIG_PATH
+GDCFLAGS
 READELF
+OTOOL
 OBJDUMP
 OBJCOPY
 WINDMC
@@ -626,6 +635,7 @@ RANLIB
 NM
 LIPO
 LD
+DSYMUTIL
 DLLTOOL
 AS
 AR
@@ -643,11 +653,15 @@ RANLIB_FOR_BUILD
 NM_FOR_BUILD
 LD_FOR_BUILD
 LDFLAGS_FOR_BUILD
+GDC_FOR_BUILD
 GOC_FOR_BUILD
 GFORTRAN_FOR_BUILD
+DSYMUTIL_FOR_BUILD
 DLLTOOL_FOR_BUILD
 CXX_FOR_BUILD
 CXXFLAGS_FOR_BUILD
+CPPFLAGS_FOR_BUILD
+CPP_FOR_BUILD
 CFLAGS_FOR_BUILD
 CC_FOR_BUILD
 AS_FOR_BUILD
@@ -675,7 +689,11 @@ get_gcc_base_ver
 extra_host_zlib_configure_flags
 extra_host_libiberty_configure_flags
 stage1_languages
+host_libs_picflag
+PICFLAG
 host_shared
+gcc_host_pie
+host_pie
 extra_linker_plugin_flags
 extra_linker_plugin_configure_flags
 islinc
@@ -690,7 +708,13 @@ extra_mpc_gmp_configure_flags
 extra_mpfr_configure_flags
 gmpinc
 gmplibs
+PGO_BUILD_LTO_CFLAGS
+PGO_BUILD_USE_CFLAGS
+PGO_BUILD_GEN_CFLAGS
+HAVE_CXX11_FOR_BUILD
+HAVE_CXX11
 do_compare
+GDC
 GNATMAKE
 GNATBIND
 ac_ct_CXX
@@ -703,7 +727,6 @@ CPPFLAGS
 LDFLAGS
 CFLAGS
 CC
-extra_liboffloadmic_configure_flags
 target_subdir
 host_subdir
 build_subdir
@@ -778,26 +801,30 @@ ac_user_opts='
 enable_option_checking
 with_build_libsubdir
 with_system_zlib
+with_zstd
 enable_as_accelerator_for
 enable_offload_targets
+enable_offload_defaulted
 enable_gold
 enable_ld
+enable_gprofng
 enable_compressed_debug_sections
+enable_default_compressed_debug_sections_algorithm
+enable_year2038
 enable_libquadmath
 enable_libquadmath_support
 enable_libada
+enable_libgm2
 enable_libssp
 enable_libstdcxx
-enable_liboffloadmic
 enable_bootstrap
+enable_pgo_build
 with_mpc
 with_mpc_include
 with_mpc_lib
-with_mpfr_dir
 with_mpfr
 with_mpfr_include
 with_mpfr_lib
-with_gmp_dir
 with_gmp
 with_gmp_include
 with_gmp_lib
@@ -813,6 +840,7 @@ enable_isl_version_check
 enable_lto
 enable_linker_plugin_configure_flags
 enable_linker_plugin_flags
+enable_host_pie
 enable_host_shared
 enable_stage1_languages
 enable_objc_gc
@@ -847,6 +875,7 @@ target_configargs
 AR
 AS
 DLLTOOL
+DSYMUTIL
 LD
 LIPO
 NM
@@ -856,20 +885,25 @@ WINDRES
 WINDMC
 OBJCOPY
 OBJDUMP
+OTOOL
 READELF
 CC_FOR_TARGET
 CXX_FOR_TARGET
 GCC_FOR_TARGET
 GFORTRAN_FOR_TARGET
 GOC_FOR_TARGET
+GDC_FOR_TARGET
+GM2_FOR_TARGET
 AR_FOR_TARGET
 AS_FOR_TARGET
 DLLTOOL_FOR_TARGET
+DSYMUTIL_FOR_TARGET
 LD_FOR_TARGET
 LIPO_FOR_TARGET
 NM_FOR_TARGET
 OBJCOPY_FOR_TARGET
 OBJDUMP_FOR_TARGET
+OTOOL_FOR_TARGET
 RANLIB_FOR_TARGET
 READELF_FOR_TARGET
 STRIP_FOR_TARGET
@@ -1506,20 +1540,31 @@ Optional Features:
                           enable offloading to devices from comma-separated
                           LIST of TARGET[=DIR]. Use optional path to find
                           offload target compiler during the build
+  --enable-offload-defaulted
+		If enabled, configured but not installed offload compilers and
+		libgomp plugins are silently ignored.  Useful for distribution
+		compilers where those are in separate optional packages.
+
   --enable-gold[=ARG]     build gold [ARG={default,yes,no}]
   --enable-ld[=ARG]       build ld [ARG={default,yes,no}]
+  --enable-gprofng[=ARG]  build gprofng [ARG={yes,no}]
   --enable-compressed-debug-sections={all,gas,gold,ld,none}
                           Enable compressed debug sections for gas, gold or ld
                           by default
+  --enable-default-compressed-debug-sections-algorithm={zlib,zstd}
+                          Default compression algorithm for
+                          --enable-compressed-debug-sections.
+  --enable-year2038       enable support for timestamps past the year 2038
   --disable-libquadmath   do not build libquadmath directory
   --disable-libquadmath-support
                           disable libquadmath support for Fortran
   --enable-libada         build libada directory
+  --enable-libgm2         build libgm2 directory
   --enable-libssp         build libssp directory
   --disable-libstdcxx     do not build libstdc++-v3 directory
-  --enable-liboffloadmic=ARG
-                          build liboffloadmic [ARG={no,host,target}]
   --enable-bootstrap      enable bootstrapping [yes if native build]
+  --enable-pgo-build[=lto]
+                          enable the PGO build
   --disable-isl-version-check
                           disable check for isl version
   --enable-lto            enable link time optimization support
@@ -1529,6 +1574,7 @@ Optional Features:
   --enable-linker-plugin-flags=FLAGS
                           additional flags for configuring and building linker
                           plugins [none]
+  --enable-host-pie       build position independent host executables
   --enable-host-shared    build host code as shared libraries
   --enable-stage1-languages[=all]
                           choose additional languages to build during stage1.
@@ -1553,19 +1599,19 @@ Optional Packages:
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-build-libsubdir=DIR  Directory where to find libraries for build system
   --with-system-zlib      use installed libz
+  --with-zstd             Support zstd compressed debug sections
+                          (default=auto)
   --with-mpc=PATH         specify prefix directory for installed MPC package.
                           Equivalent to --with-mpc-include=PATH/include plus
                           --with-mpc-lib=PATH/lib
   --with-mpc-include=PATH specify directory for installed MPC include files
   --with-mpc-lib=PATH     specify directory for the installed MPC library
-  --with-mpfr-dir=PATH    this option has been REMOVED
   --with-mpfr=PATH        specify prefix directory for installed MPFR package.
                           Equivalent to --with-mpfr-include=PATH/include plus
                           --with-mpfr-lib=PATH/lib
   --with-mpfr-include=PATH
                           specify directory for installed MPFR include files
   --with-mpfr-lib=PATH    specify directory for the installed MPFR library
-  --with-gmp-dir=PATH     this option has been REMOVED
   --with-gmp=PATH         specify prefix directory for the installed GMP
                           package. Equivalent to
                           --with-gmp-include=PATH/include plus
@@ -1627,6 +1673,7 @@ Some influential environment variables:
   AR          AR for the host
   AS          AS for the host
   DLLTOOL     DLLTOOL for the host
+  DSYMUTIL    DSYMUTIL for the host
   LD          LD for the host
   LIPO        LIPO for the host
   NM          NM for the host
@@ -1636,6 +1683,7 @@ Some influential environment variables:
   WINDMC      WINDMC for the host
   OBJCOPY     OBJCOPY for the host
   OBJDUMP     OBJDUMP for the host
+  OTOOL       OTOOL for the host
   READELF     READELF for the host
   CC_FOR_TARGET
               CC for the target
@@ -1647,12 +1695,18 @@ Some influential environment variables:
               GFORTRAN for the target
   GOC_FOR_TARGET
               GOC for the target
+  GDC_FOR_TARGET
+              GDC for the target
+  GM2_FOR_TARGET
+              GM2 for the target
   AR_FOR_TARGET
               AR for the target
   AS_FOR_TARGET
               AS for the target
   DLLTOOL_FOR_TARGET
               DLLTOOL for the target
+  DSYMUTIL_FOR_TARGET
+              DSYMUTIL for the target
   LD_FOR_TARGET
               LD for the target
   LIPO_FOR_TARGET
@@ -1663,6 +1717,8 @@ Some influential environment variables:
               OBJCOPY for the target
   OBJDUMP_FOR_TARGET
               OBJDUMP for the target
+  OTOOL_FOR_TARGET
+              OTOOL for the target
   RANLIB_FOR_TARGET
               RANLIB for the target
   READELF_FOR_TARGET
@@ -2773,7 +2829,7 @@ build_tools="build-texinfo build-flex bu
 
 # these libraries are used by various programs built for the host environment
 #f
-host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl libelf libiconv libctf"
+host_libs="gettext libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libcody libdecnumber gmp mpfr mpc isl libiconv libctf libsframe libgrust "
 
 # these tools are built for the host environment
 # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
@@ -2781,7 +2837,7 @@ host_libs="intl libiberty opcodes bfd re
 # binutils, gas and ld appear in that order because it makes sense to run
 # "make check" in that particular order.
 # If --enable-gold is used, "gold" may replace "ld".
-host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools"
+host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gm2tools gotools c++tools"
 
 # these libraries are built for the target environment, and are built after
 # the host libraries and the host tools (which may be a cross compiler)
@@ -2791,8 +2847,6 @@ target_libraries="target-libgcc \
 		target-libgloss \
 		target-newlib \
 		target-libgomp \
-		target-liboffloadmic \
-		target-libhsail-rt \
 		target-libatomic \
 		target-libitm \
 		target-libstdc++-v3 \
@@ -2804,7 +2858,11 @@ target_libraries="target-libgcc \
 		target-libffi \
 		target-libobjc \
 		target-libada \
-		target-libgo"
+		target-libgm2 \
+		target-libgo \
+		target-libgrust \
+		target-libphobos \
+		target-zlib"
 
 # these tools are built using the target libraries, and are intended to
 # run only in the target environment
@@ -2917,6 +2975,13 @@ if test x$with_system_readline = xyes ;
   noconfigdirs="$noconfigdirs readline"
 fi
 
+
+# Check whether --with-zstd was given.
+if test "${with_zstd+set}" = set; then :
+  withval=$with_zstd;
+fi
+
+
 # some tools are so dependent upon X11 that if we're not building with X,
 # it's not even worth trying to configure, much less build, that tool.
 
@@ -2971,6 +3036,14 @@ else
 fi
 
 
+# Check whether --enable-offload-defaulted was given.
+if test "${enable_offload_defaulted+set}" = set; then :
+  enableval=$enable_offload_defaulted; enable_offload_defaulted=$enableval
+else
+  enable_offload_defaulted=
+fi
+
+
 # Handle --enable-gold, --enable-ld.
 # --disable-gold [--enable-ld]
 #     Build only ld.  Default option.
@@ -3005,7 +3078,7 @@ case "${ENABLE_GOLD}" in
       *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
       | *-*-linux* | *-*-gnu* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
       | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
-      | *-*-solaris2* | *-*-nto* | *-*-nacl*)
+      | *-*-solaris2* | *-*-nto* | *-*-nacl* | *-*-haiku*)
         case "${target}" in
           *-*-linux*aout* | *-*-linux*oldld*)
             ;;
@@ -3019,7 +3092,7 @@ case "${ENABLE_GOLD}" in
       # Check for target supported by gold.
       case "${target}" in
         i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
-        | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
+        | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
 	  configdirs="$configdirs gold"
 	  if test x${ENABLE_GOLD} = xdefault; then
 	    default_ld=gold
@@ -3064,6 +3137,22 @@ case "${ENABLE_LD}" in
     ;;
 esac
 
+# Check whether --enable-gprofng was given.
+if test "${enable_gprofng+set}" = set; then :
+  enableval=$enable_gprofng; enable_gprofng=$enableval
+else
+  enable_gprofng=yes
+fi
+
+if test "$enable_gprofng" = "yes"; then
+  case "${target}" in
+    x86_64-*-linux* | i?86-*-linux* | aarch64-*-linux*)
+    configdirs="$configdirs gprofng"
+    ;;
+  esac
+fi
+
+
 # PR gas/19109
 # Decide the default method for compressing debug sections.
 # Provide a configure time option to override our default.
@@ -3079,6 +3168,15 @@ else
 fi
 
 
+# Select default compression algorithm.
+# Check whether --enable-default_compressed_debug_sections_algorithm was given.
+if test "${enable_default_compressed_debug_sections_algorithm+set}" = set; then :
+  enableval=$enable_default_compressed_debug_sections_algorithm;
+else
+  default_compressed_debug_sections_algorithm=
+fi
+
+
 # Configure extra directories which are host specific
 
 case "${host}" in
@@ -3100,6 +3198,20 @@ case "${host}" in
     ;;
 esac
 
+# Default to --disable-year2038 until we can handle differences between
+# projects that use gnulib (which understands year 2038) and projects that
+# do not (like BFD).
+# Check whether --enable-year2038 was given.
+if test "${enable_year2038+set}" = set; then :
+  enableval=$enable_year2038; ENABLE_YEAR2038=$enableval
+else
+  ENABLE_YEAR2038=no
+fi
+
+enable_year2038=
+if test "${ENABLE_YEAR2038}" = "no" ; then
+  enable_year2038=no
+fi
 
 # Check whether --enable-libquadmath was given.
 if test "${enable_libquadmath+set}" = set; then :
@@ -3137,6 +3249,17 @@ if test "${ENABLE_LIBADA}" != "yes" ; th
   noconfigdirs="$noconfigdirs gnattools"
 fi
 
+# Check whether --enable-libgm2 was given.
+if test "${enable_libgm2+set}" = set; then :
+  enableval=$enable_libgm2; ENABLE_LIBGM2=$enableval
+else
+  ENABLE_LIBGM2=no
+fi
+
+if test "${ENABLE_LIBGM2}" != "yes" ; then
+  noconfigdirs="$noconfigdirs gm2tools"
+fi
+
 # Check whether --enable-libssp was given.
 if test "${enable_libssp+set}" = set; then :
   enableval=$enable_libssp; ENABLE_LIBSSP=$enableval
@@ -3156,44 +3279,6 @@ if test "${ENABLE_LIBSTDCXX}" = "no" ; t
   noconfigdirs="$noconfigdirs target-libstdc++-v3"
 fi
 
-# If this is accelerator compiler and its target is intelmic we enable
-# target liboffloadmic by default.  If this is compiler with offloading
-# for intelmic we enable host liboffloadmic by default.  Otherwise
-# liboffloadmic is disabled by default.
-# Check whether --enable-liboffloadmic was given.
-if test "${enable_liboffloadmic+set}" = set; then :
-  enableval=$enable_liboffloadmic; case "$enableval" in
-  no | host | target)
-    enable_liboffloadmic=$enableval ;;
-  *)
-    as_fn_error $? "--enable-liboffloadmic=no/host/target" "$LINENO" 5 ;;
-esac
-else
-  if test x"$enable_as_accelerator_for" != x; then
-  case "${target}" in
-    *-intelmic-* | *-intelmicemul-*)
-      enable_liboffloadmic=target
-      extra_liboffloadmic_configure_flags="--enable-liboffloadmic=target"
-      ;;
-    *)
-      enable_liboffloadmic=no
-      ;;
-  esac
-else
-  case "${enable_offload_targets}" in
-    *-intelmic-* | *-intelmicemul-*)
-      enable_liboffloadmic=host
-      extra_liboffloadmic_configure_flags="--enable-liboffloadmic=host"
-      ;;
-    *)
-      enable_liboffloadmic=no
-      ;;
-    esac
-fi
-fi
-
-
-
 # Enable libgomp by default on hosted POSIX systems, and a few others.
 if test x$enable_libgomp = x ; then
     case "${target}" in
@@ -3205,7 +3290,7 @@ if test x$enable_libgomp = x ; then
 	;;
     *-*-darwin* | *-*-aix*)
 	;;
-    nvptx*-*-*)
+    nvptx*-*-* | amdgcn*-*-*)
 	;;
     *)
 	noconfigdirs="$noconfigdirs target-libgomp"
@@ -3232,25 +3317,6 @@ if test -d ${srcdir}/libatomic; then
     fi
 fi
 
-# Disable liboffloadmic on unsupported systems.
-if test -d ${srcdir}/liboffloadmic; then
-    if test x$enable_liboffloadmic != xno; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for liboffloadmic support" >&5
-$as_echo_n "checking for liboffloadmic support... " >&6; }
-	if (srcdir=${srcdir}/liboffloadmic; \
-		. ${srcdir}/configure.tgt; \
-		test -n "$UNSUPPORTED")
-	then
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-	    noconfigdirs="$noconfigdirs target-liboffloadmic"
-	else
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	fi
-    fi
-fi
-
 # Disable libitm on unsupported systems.
 if test -d ${srcdir}/libitm; then
     if test x$enable_libitm = x; then
@@ -3308,29 +3374,6 @@ if test -d ${srcdir}/libvtv; then
     fi
 fi
 
-
-# Disable libhsail-rt on unsupported systems.
-if test -d ${srcdir}/libhsail-rt; then
-    if test x$enable_libhsail_rt = x; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhsail-rt support" >&5
-$as_echo_n "checking for libhsail-rt support... " >&6; }
-        if (srcdir=${srcdir}/libhsail-rt; \
-                . ${srcdir}/configure.tgt; \
-                test -n "$UNSUPPORTED")
-        then
-            { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-            unsupported_languages="$unsupported_languages brig"
-            # This implicitly disables also target-libhsail-rt as it won't
-            # get added to the build without BRIG FE.
-        else
-            { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-        fi
-    fi
-fi
-
-
 # Disable libquadmath for some systems.
 case "${target}" in
   avr-*-*)
@@ -3349,9 +3392,16 @@ case "${target}" in
     # No hosted I/O support.
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-libssp"
+    ;;
   powerpc-*-aix* | rs6000-*-aix*)
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
+  pru-*-*)
+    # No hosted I/O support.
+    noconfigdirs="$noconfigdirs target-libssp"
+    ;;
   rl78-*-*)
     # libssp uses a misaligned load to trigger a fault, but the RL78
     # doesn't fault for those - instead, it gives a build-time error
@@ -3365,13 +3415,17 @@ case "${target}" in
 esac
 
 # Disable libstdc++-v3 for some systems.
-# Allow user to override this if they pass --enable-libstdc++-v3
+# Allow user to override this if they pass --enable-libstdcxx
 if test "${ENABLE_LIBSTDCXX}" = "default" ; then
   case "${target}" in
     *-*-vxworks*)
       # VxWorks uses the Dinkumware C++ library.
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
       ;;
+    amdgcn*-*-*)
+      # Not ported/fails to build when using newlib.
+      noconfigdirs="$noconfigdirs target-libstdc++-v3"
+      ;;
     arm*-wince-pe*)
       # the C++ libraries don't build on top of CE's C libraries
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
@@ -3379,18 +3433,86 @@ if test "${ENABLE_LIBSTDCXX}" = "default
     avr-*-*)
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
       ;;
+    bpf-*-*)
+      noconfigdirs="$noconfigdirs target-libstdc++-v3"
+      ;;
     ft32-*-*)
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
       ;;
   esac
 fi
 
+# Disable C++ on systems where it is known to not work.
+# For testing, you can override this with --enable-languages=c++.
+case ,${enable_languages}, in
+  *,c++,*)
+    ;;
+  *)
+      case "${target}" in
+        bpf-*-*)
+          unsupported_languages="$unsupported_languages c++"
+          ;;
+      esac
+      ;;
+esac
+
+# Disable Objc on systems where it is known to not work.
+# For testing, you can override this with --enable-languages=objc.
+case ,${enable_languages}, in
+  *,objc,*)
+    ;;
+  *)
+      case "${target}" in
+        bpf-*-*)
+          unsupported_languages="$unsupported_languages objc"
+          ;;
+      esac
+      ;;
+esac
+
+# Disable D on systems where it is known to not work.
+# For testing, you can override this with --enable-languages=d.
+case ,${enable_languages}, in
+  *,d,*)
+    ;;
+  *)
+    case "${target}" in
+      bpf-*-*)
+	unsupported_languages="$unsupported_languages d"
+	;;
+    esac
+    ;;
+esac
+
+# Disable libphobos on unsupported systems.
+# For testing, you can override this with --enable-libphobos.
+if test -d ${srcdir}/libphobos; then
+    if test x$enable_libphobos = x; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libphobos support" >&5
+$as_echo_n "checking for libphobos support... " >&6; }
+	if (srcdir=${srcdir}/libphobos; \
+		. ${srcdir}/configure.tgt; \
+		test "$LIBPHOBOS_SUPPORTED" != "yes")
+	then
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	    noconfigdirs="$noconfigdirs target-libphobos"
+	else
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	fi
+    fi
+fi
+
 # Disable Fortran for some systems.
 case "${target}" in
   mmix-*-*)
     # See <http://gcc.gnu.org/ml/gcc-patches/2004-11/msg00572.html>.
     unsupported_languages="$unsupported_languages fortran"
     ;;
+  bpf-*-*)
+    unsupported_languages="$unsupported_languages fortran"
+    ;;
 esac
 
 # Disable libffi for some systems.
@@ -3437,6 +3559,9 @@ case "${target}" in
   arm*-*-symbianelf*)
     noconfigdirs="$noconfigdirs target-libffi"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-libffi"
+    ;;
   cris-*-* | crisv32-*-*)
     case "${target}" in
       *-*-linux*)
@@ -3483,11 +3608,30 @@ esac
 # Disable the go frontend on systems where it is known to not work. Please keep
 # this in sync with contrib/config-list.mk.
 case "${target}" in
-*-*-darwin* | *-*-cygwin* | *-*-mingw*)
+*-*-darwin* | *-*-cygwin* | *-*-mingw* | bpf-* )
     unsupported_languages="$unsupported_languages go"
     ;;
 esac
 
+# Only allow gdbserver on some systems.
+if test -d ${srcdir}/gdbserver; then
+    if test x$enable_gdbserver = x; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdbserver support" >&5
+$as_echo_n "checking for gdbserver support... " >&6; }
+	if (srcdir=${srcdir}/gdbserver; \
+		. ${srcdir}/configure.srv; \
+		test -n "$UNSUPPORTED")
+	then
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	    noconfigdirs="$noconfigdirs gdbserver"
+	else
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	fi
+    fi
+fi
+
 # Disable libgo for some systems where it is known to not work.
 # For testing, you can easily override this with --enable-libgo.
 if test x$enable_libgo = x; then
@@ -3499,6 +3643,9 @@ if test x$enable_libgo = x; then
     *-*-cygwin* | *-*-mingw*)
 	noconfigdirs="$noconfigdirs target-libgo"
 	;;
+    bpf-*-*)
+        noconfigdirs="$noconfigdirs target-libgo"
+        ;;
     esac
 fi
 
@@ -3518,12 +3665,24 @@ case "${target}" in
   cris-*-* | crisv32-*-*)
     libgloss_dir=cris
     ;;
+  kvx-*-elf)
+    libgloss_dir=kvx-elf
+    ;;
+  kvx-*-mbr)
+    libgloss_dir=kvx-mbr
+    ;;
+  kvx-*-cos)
+    libgloss_dir=kvx-cos
+    ;;
   hppa*-*-*)
     libgloss_dir=pa
     ;;
   i[3456789]86-*-*)
     libgloss_dir=i386
     ;;
+  loongarch*-*-*)
+    libgloss_dir=loongarch
+    ;;
   m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
     libgloss_dir=m68hc11
     ;;
@@ -3536,6 +3695,9 @@ case "${target}" in
   powerpc*-*-*)
     libgloss_dir=rs6000
     ;;
+  pru-*-*)
+    libgloss_dir=pru
+    ;;
   sparc*-*-*)
     libgloss_dir=sparc
     ;;
@@ -3567,6 +3729,9 @@ case "${target}" in
   sparc-*-sunos4*)
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+    ;;
   *-*-aix*)
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
@@ -3615,6 +3780,8 @@ case "${target}" in
     noconfigdirs="$noconfigdirs ld gas gdb gprof"
     noconfigdirs="$noconfigdirs sim target-rda"
     ;;
+  amdgcn*-*-*)
+    ;;
   arm-*-darwin*)
     noconfigdirs="$noconfigdirs ld gas gdb gprof"
     noconfigdirs="$noconfigdirs sim target-rda"
@@ -3638,7 +3805,8 @@ case "${target}" in
   *-*-dragonfly*)
     ;;
   *-*-freebsd*)
-    if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
+    if test "x$with_gmp" = x \
+	&& ! test -d ${srcdir}/gmp \
 	&& test -f /usr/local/include/gmp.h; then
       with_gmp=/usr/local
     fi
@@ -3678,6 +3846,9 @@ case "${target}" in
     # newlib is not 64 bit ready
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-libobjc target-libbacktrace"
+    ;;
   sh*-*-pe|mips*-*-pe|*arm-wince-pe)
     noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
     ;;
@@ -3797,6 +3968,9 @@ case "${target}" in
   i[3456789]86-*-rdos*)
     noconfigdirs="$noconfigdirs gdb"
     ;;
+  kvx-*-*)
+    noconfigdirs="$noconfigdirs gdb gdbserver sim"
+    ;;
   mmix-*-*)
     noconfigdirs="$noconfigdirs gdb"
     ;;
@@ -3807,6 +3981,9 @@ case "${target}" in
     noconfigdirs="$noconfigdirs ld gas gdb gprof sim"
     noconfigdirs="$noconfigdirs $target_libraries"
     ;;
+  pdp11-*-*)
+    noconfigdirs="$noconfigdirs gdb gprof"
+    ;;
   powerpc-*-aix*)
     # copied from rs6000-*-* entry
     noconfigdirs="$noconfigdirs gprof"
@@ -3893,6 +4070,11 @@ case "${target}" in
   wasm32-*-*)
     noconfigdirs="$noconfigdirs ld"
     ;;
+  loongarch*-*-linux*)
+    ;;
+  loongarch*-*-*)
+    noconfigdirs="$noconfigdirs gprof"
+    ;;
 esac
 
 # If we aren't building newlib, then don't build libgloss, since libgloss
@@ -3938,16 +4120,13 @@ fi
   alpha*-linux*)
     host_makefile_frag="config/mh-alpha-linux"
     ;;
-  hppa*-hp-hpux10*)
-    host_makefile_frag="config/mh-pa-hpux10"
-    ;;
   hppa*-hp-hpux*)
     host_makefile_frag="config/mh-pa"
     ;;
   hppa*-*)
     host_makefile_frag="config/mh-pa"
     ;;
-  *-*-darwin*)
+  i?86-*-darwin[89]* | i?86-*-darwin1[0-7]* | powerpc*-*-darwin*)
     host_makefile_frag="config/mh-darwin"
     ;;
   powerpc-*-aix*)
@@ -3963,9 +4142,12 @@ if test "${build}" != "${host}" ; then
   AR_FOR_BUILD=${AR_FOR_BUILD-ar}
   AS_FOR_BUILD=${AS_FOR_BUILD-as}
   CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+  CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
   CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
+  DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
   GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
   GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
+  GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc}
   DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool}
   LD_FOR_BUILD=${LD_FOR_BUILD-ld}
   NM_FOR_BUILD=${NM_FOR_BUILD-nm}
@@ -3977,8 +4159,10 @@ else
   AS_FOR_BUILD="\$(AS)"
   CC_FOR_BUILD="\$(CC)"
   CXX_FOR_BUILD="\$(CXX)"
+  DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)"
   GFORTRAN_FOR_BUILD="\$(GFORTRAN)"
   GOC_FOR_BUILD="\$(GOC)"
+  GDC_FOR_BUILD="\$(GDC)"
   DLLTOOL_FOR_BUILD="\$(DLLTOOL)"
   LD_FOR_BUILD="\$(LD)"
   NM_FOR_BUILD="\$(NM)"
@@ -4776,6 +4960,183 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS con
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if ${ac_cv_prog_cc_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+  your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str;
+  int number;
+  float fnumber;
+
+  while (*format)
+    {
+      switch (*format++)
+	{
+	case 's': // string
+	  str = va_arg (args_copy, const char *);
+	  break;
+	case 'd': // int
+	  number = va_arg (args_copy, int);
+	  break;
+	case 'f': // float
+	  fnumber = va_arg (args_copy, double);
+	  break;
+	default:
+	  break;
+	}
+    }
+  va_end (args_copy);
+  va_end (args);
+}
+
+int
+main ()
+{
+
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  test_varargs ("s, d' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+	  || dynamic_array[ni.number - 1] != 543);
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c99"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c99" != xno; then :
+
+fi
+
+
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5282,12 +5643,16 @@ else
   GNATMAKE="$ac_cv_prog_GNATMAKE"
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler driver understands Ada" >&5
-$as_echo_n "checking whether compiler driver understands Ada... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler driver understands Ada and is recent enough" >&5
+$as_echo_n "checking whether compiler driver understands Ada and is recent enough... " >&6; }
 if ${acx_cv_cc_gcc_supports_ada+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.adb <<EOF
+pragma Warnings (Off);
+with System.CRTL;
+pragma Warnings (On);
+use type System.CRTL.int64;
 procedure conftest is begin null; end conftest;
 EOF
 acx_cv_cc_gcc_supports_ada=no
@@ -5314,6 +5679,125 @@ else
   have_gnat=no
 fi
 
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gdc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gdc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GDC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GDC"; then
+  ac_cv_prog_GDC="$GDC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GDC="${ac_tool_prefix}gdc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GDC=$ac_cv_prog_GDC
+if test -n "$GDC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDC" >&5
+$as_echo "$GDC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_GDC"; then
+  ac_ct_GDC=$GDC
+  # Extract the first word of "gdc", so it can be a program name with args.
+set dummy gdc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_GDC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_GDC"; then
+  ac_cv_prog_ac_ct_GDC="$ac_ct_GDC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_GDC="gdc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_GDC=$ac_cv_prog_ac_ct_GDC
+if test -n "$ac_ct_GDC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GDC" >&5
+$as_echo "$ac_ct_GDC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_GDC" = x; then
+    GDC="no"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    GDC=$ac_ct_GDC
+  fi
+else
+  GDC="$ac_cv_prog_GDC"
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the D compiler works" >&5
+$as_echo_n "checking whether the D compiler works... " >&6; }
+if ${acx_cv_d_compiler_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.d <<EOF
+module conftest; int main() { return 0; }
+EOF
+acx_cv_d_compiler_works=no
+if test "x$GDC" != xno; then
+  errors=`(${GDC} -c conftest.d) 2>&1 || echo failure`
+  if test x"$errors" = x && test -f conftest.$ac_objext; then
+    acx_cv_d_compiler_works=yes
+  fi
+  rm -f conftest.*
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_d_compiler_works" >&5
+$as_echo "$acx_cv_d_compiler_works" >&6; }
+if test "x$GDC" != xno && test x$acx_cv_d_compiler_works != xno; then
+  have_gdc=yes
+else
+  have_gdc=no
+fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to compare bootstrapped objects" >&5
 $as_echo_n "checking how to compare bootstrapped objects... " >&6; }
 if ${gcc_cv_prog_cmp_skip+:} false; then :
@@ -5392,12 +5876,2096 @@ case "$have_compiler:$host:$target:$enab
     ;;
 esac
 
-# When bootstrapping with GCC, build stage 1 in C++98 mode to ensure that a
-# C++98 compiler can still start the bootstrap.
+# When bootstrapping with GCC, build stage 1 in C++11 mode to ensure that a
+# C++11 compiler can still start the bootstrap.  Otherwise, if building GCC,
+# require C++11 (or higher).
 if test "$enable_bootstrap:$GXX" = "yes:yes"; then
-  CXX="$CXX -std=gnu++98"
+  CXX="$CXX -std=c++11"
+elif test "$have_compiler" = yes; then
+    ax_cxx_compile_alternatives="11 0x"    ax_cxx_compile_cxx11_required=true
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+  ac_success=no
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5
+$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; }
+if ${ax_cv_cxx_compile_cxx11+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ax_cv_cxx_compile_cxx11=yes
+else
+  ax_cv_cxx_compile_cxx11=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5
+$as_echo "$ax_cv_cxx_compile_cxx11" >&6; }
+    if test x$ax_cv_cxx_compile_cxx11 = xyes; then
+      ac_success=yes
+    fi
+
+    if test x$ac_success = xno; then
+    for alternative in ${ax_cxx_compile_alternatives}; do
+      switch="-std=gnu++${alternative}"
+      cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh`
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
+$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; }
+if eval \${$cachevar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_CXX="$CXX"
+         CXX="$CXX $switch"
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  eval $cachevar=yes
+else
+  eval $cachevar=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         CXX="$ac_save_CXX"
+fi
+eval ac_res=\$$cachevar
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+      if eval test x\$$cachevar = xyes; then
+        CXX="$CXX $switch"
+        if test -n "$CXXCPP" ; then
+          CXXCPP="$CXXCPP $switch"
+        fi
+        ac_success=yes
+        break
+      fi
+    done
+  fi
+
+    if test x$ac_success = xno; then
+                for alternative in ${ax_cxx_compile_alternatives}; do
+      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
+        cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh`
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
+$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; }
+if eval \${$cachevar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_CXX="$CXX"
+           CXX="$CXX $switch"
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  eval $cachevar=yes
+else
+  eval $cachevar=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           CXX="$ac_save_CXX"
+fi
+eval ac_res=\$$cachevar
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+        if eval test x\$$cachevar = xyes; then
+          CXX="$CXX $switch"
+          if test -n "$CXXCPP" ; then
+            CXXCPP="$CXXCPP $switch"
+          fi
+          ac_success=yes
+          break
+        fi
+      done
+      if test x$ac_success = xyes; then
+        break
+      fi
+    done
+  fi
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+  if test x$ax_cxx_compile_cxx11_required = xtrue; then
+    if test x$ac_success = xno; then
+      as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5
+    fi
+  fi
+  if test x$ac_success = xno; then
+    HAVE_CXX11=0
+    { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5
+$as_echo "$as_me: No compiler with C++11 support was found" >&6;}
+  else
+    HAVE_CXX11=1
+
+$as_echo "#define HAVE_CXX11 1" >>confdefs.h
+
+  fi
+
+
+
+  if test "${build}" != "${host}"; then
+      ax_cxx_compile_alternatives="11 0x"    ax_cxx_compile_cxx11_required=true
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+  ac_success=no
+      ax_cv_cxx_compile_cxx11_orig_cxx="$CXX"
+    ax_cv_cxx_compile_cxx11_orig_cxxflags="$CXXFLAGS"
+    ax_cv_cxx_compile_cxx11_orig_cppflags="$CPPFLAGS"
+    CXX="$CXX_FOR_BUILD"
+    CXXFLAGS="$CXXFLAGS_FOR_BUILD"
+    CPPFLAGS="$CPPFLAGS_FOR_BUILD"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5
+$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; }
+if ${ax_cv_cxx_compile_cxx11_FOR_BUILD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ax_cv_cxx_compile_cxx11_FOR_BUILD=yes
+else
+  ax_cv_cxx_compile_cxx11_FOR_BUILD=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11_FOR_BUILD" >&5
+$as_echo "$ax_cv_cxx_compile_cxx11_FOR_BUILD" >&6; }
+    if test x$ax_cv_cxx_compile_cxx11_FOR_BUILD = xyes; then
+      ac_success=yes
+    fi
+
+    if test x$ac_success = xno; then
+    for alternative in ${ax_cxx_compile_alternatives}; do
+      switch="-std=gnu++${alternative}"
+      cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_FOR_BUILD_$switch" | $as_tr_sh`
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
+$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; }
+if eval \${$cachevar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_CXX="$CXX"
+         CXX="$CXX $switch"
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  eval $cachevar=yes
+else
+  eval $cachevar=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         CXX="$ac_save_CXX"
+fi
+eval ac_res=\$$cachevar
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+      if eval test x\$$cachevar = xyes; then
+        CXX="$CXX $switch"
+        if test -n "$CXXCPP" ; then
+          CXXCPP="$CXXCPP $switch"
+        fi
+        ac_success=yes
+        break
+      fi
+    done
+  fi
+
+    if test x$ac_success = xno; then
+                for alternative in ${ax_cxx_compile_alternatives}; do
+      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
+        cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_FOR_BUILD_$switch" | $as_tr_sh`
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
+$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; }
+if eval \${$cachevar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_CXX="$CXX"
+           CXX="$CXX $switch"
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  eval $cachevar=yes
+else
+  eval $cachevar=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           CXX="$ac_save_CXX"
+fi
+eval ac_res=\$$cachevar
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+        if eval test x\$$cachevar = xyes; then
+          CXX="$CXX $switch"
+          if test -n "$CXXCPP" ; then
+            CXXCPP="$CXXCPP $switch"
+          fi
+          ac_success=yes
+          break
+        fi
+      done
+      if test x$ac_success = xyes; then
+        break
+      fi
+    done
+  fi
+      CXX_FOR_BUILD="$CXX"
+    CXXFLAGS_FOR_BUILD="$CXXFLAGS"
+    CPPFLAGS_FOR_BUILD="$CPPFLAGS"
+    CXX="$ax_cv_cxx_compile_cxx11_orig_cxx"
+    CXXFLAGS="$ax_cv_cxx_compile_cxx11_orig_cxxflags"
+    CPPFLAGS="$ax_cv_cxx_compile_cxx11_orig_cppflags"
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+  if test x$ax_cxx_compile_cxx11_required = xtrue; then
+    if test x$ac_success = xno; then
+      as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5
+    fi
+  fi
+  if test x$ac_success = xno; then
+    HAVE_CXX11_FOR_BUILD=0
+    { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5
+$as_echo "$as_me: No compiler with C++11 support was found" >&6;}
+  else
+    HAVE_CXX11_FOR_BUILD=1
+
+$as_echo "#define HAVE_CXX11_FOR_BUILD 1" >>confdefs.h
+
+  fi
+
+
+  fi
 fi
 
+# Check whether --enable-pgo-build was given.
+if test "${enable_pgo_build+set}" = set; then :
+  enableval=$enable_pgo_build; enable_pgo_build=$enableval
+else
+  enable_pgo_build=no
+fi
+
+
+# Issue errors and warnings for invalid/strange PGO build combinations.
+case "$have_compiler:$host:$target:$enable_pgo_build" in
+  *:*:*:no) ;;
+
+  # Allow the PGO build only if we aren't building a compiler and
+  # we are in a native configuration.
+  no:$build:$build:yes | no:$build:$build:lto) ;;
+
+  # Disallow the PGO bootstrap if we are building a compiler.
+  yes:*:*:yes | yes:*:*:lto)
+    as_fn_error $? "cannot perform the PGO bootstrap when building a compiler" "$LINENO" 5 ;;
+
+  *)
+    as_fn_error $? "invalid option for --enable-pgo-build" "$LINENO" 5
+    ;;
+esac
+
+if test "$enable_pgo_build" != "no"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fprofile-generate" >&5
+$as_echo_n "checking whether the compiler supports -fprofile-generate... " >&6; }
+  old_CFLAGS="$CFLAGS"
+  PGO_BUILD_GEN_CFLAGS="-fprofile-generate"
+  CFLAGS="$CFLAGS $PGO_BUILD_CFLAGS"
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  PGO_BUILD_GEN_CFLAGS=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$old_CFLAGS"
+  if test -n "$PGO_BUILD_GEN_CFLAGS"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    PGO_BUILD_USE_CFLAGS="-fprofile-use"
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    as_fn_error $? "cannot perform the PGO build without -fprofile-generate" "$LINENO" 5
+  fi
+
+  if test "$enable_pgo_build" = "lto"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -flto=jobserver -ffat-lto-objects" >&5
+$as_echo_n "checking whether the compiler supports -flto=jobserver -ffat-lto-objects... " >&6; }
+    old_CFLAGS="$CFLAGS"
+    PGO_BUILD_LTO_CFLAGS="-flto=jobserver -ffat-lto-objects"
+    CFLAGS="$CFLAGS $PGO_BUILD_LTO_CFLAGS"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  PGO_BUILD_LTO_CFLAGS=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    CFLAGS="$old_CFLAGS"
+    if test -n "$PGO_BUILD_LTO_CFLAGS"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LTO is disabled for the PGO build" >&5
+$as_echo "$as_me: WARNING: LTO is disabled for the PGO build" >&2;}
+    fi
+  fi
+fi
+
+
+
+
 # Used for setting $lt_cv_objdir
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
 $as_echo_n "checking for objdir... " >&6; }
@@ -5429,7 +7997,22 @@ _ACEOF
 
 
 # Check for GMP, MPFR and MPC
-gmplibs="-lmpc -lmpfr -lgmp"
+require_gmp=no
+require_mpc=no
+if test -d ${srcdir}/gcc ; then
+  require_gmp=yes
+  require_mpc=yes
+fi
+if test -d ${srcdir}/gdb ; then
+  if test "x$enable_gdb" != xno; then
+   require_gmp=yes
+  fi
+fi
+
+gmplibs="-lmpfr -lgmp"
+if test x"$require_mpc" = "xyes" ; then
+  gmplibs="-lmpc $gmplibs"
+fi
 gmpinc=
 have_gmp=no
 
@@ -5477,14 +8060,6 @@ fi
 # Specify a location for mpfr
 # check for this first so it ends up on the link line before gmp.
 
-# Check whether --with-mpfr-dir was given.
-if test "${with_mpfr_dir+set}" = set; then :
-  withval=$with_mpfr_dir; as_fn_error $? "The --with-mpfr-dir=PATH option has been removed.
-Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH" "$LINENO" 5
-fi
-
-
-
 # Check whether --with-mpfr was given.
 if test "${with_mpfr+set}" = set; then :
   withval=$with_mpfr;
@@ -5530,14 +8105,6 @@ fi
 
 # Specify a location for gmp
 
-# Check whether --with-gmp-dir was given.
-if test "${with_gmp_dir+set}" = set; then :
-  withval=$with_gmp_dir; as_fn_error $? "The --with-gmp-dir=PATH option has been removed.
-Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH" "$LINENO" 5
-fi
-
-
-
 # Check whether --with-gmp was given.
 if test "${with_gmp+set}" = set; then :
   withval=$with_gmp;
@@ -5580,15 +8147,14 @@ if test "x$with_gmp$with_gmp_include$wit
   have_gmp=yes
 fi
 
-if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
+if test "x$require_gmp" = xyes && test "x$have_gmp" = xno; then
   have_gmp=yes
   saved_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $gmpinc"
   # Check for the recommended and required versions of GMP.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of gmp.h" >&5
 $as_echo_n "checking for the correct version of gmp.h... " >&6; }
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include "gmp.h"
 int
@@ -5650,7 +8216,7 @@ int
 main ()
 {
 
-    #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,0)
+    #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,0)
     choke me
     #endif
 
@@ -5667,7 +8233,7 @@ int
 main ()
 {
 
-    #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,2)
+    #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,6)
     choke me
     #endif
 
@@ -5691,7 +8257,7 @@ rm -f core conftest.err conftest.$ac_obj
   fi
 
   # Check for the MPC header version.
-  if test x"$have_gmp" = xyes ; then
+  if test "x$require_mpc" = xyes && test x"$have_gmp" = xyes ; then
     # Check for the recommended and required versions of MPC.
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of mpc.h" >&5
 $as_echo_n "checking for the correct version of mpc.h... " >&6; }
@@ -5745,26 +8311,56 @@ rm -f core conftest.err conftest.$ac_obj
   if test x"$have_gmp" = xyes; then
     saved_LIBS="$LIBS"
     LIBS="$LIBS $gmplibs"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of the gmp/mpfr/mpc libraries" >&5
-$as_echo_n "checking for the correct version of the gmp/mpfr/mpc libraries... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of the gmp/mpfr libraries" >&5
+$as_echo_n "checking for the correct version of the gmp/mpfr libraries... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <mpc.h>
+#include <mpfr.h>
 int
 main ()
 {
 
     mpfr_t n;
     mpfr_t x;
-    mpc_t c;
     int t;
     mpfr_init (n);
     mpfr_init (x);
-    mpfr_atan2 (n, n, x, GMP_RNDN);
-    mpfr_erfc (n, x, GMP_RNDN);
-    mpfr_subnormalize (x, t, GMP_RNDN);
+    mpfr_atan2 (n, n, x, MPFR_RNDN);
+    mpfr_erfc (n, x, MPFR_RNDN);
+    mpfr_subnormalize (x, t, MPFR_RNDN);
     mpfr_clear(n);
     mpfr_clear(x);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }; have_gmp=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LIBS="$saved_LIBS"
+  fi
+
+  # Now check the MPC library
+  if test "x$require_mpc" = xyes && test x"$have_gmp" = xyes; then
+    saved_LIBS="$LIBS"
+    LIBS="$LIBS $gmplibs"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of the mpc libraries" >&5
+$as_echo_n "checking for the correct version of the mpc libraries... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <mpc.h>
+int
+main ()
+{
+
+    mpc_t c;
     mpc_init2 (c, 53);
     mpc_set_ui_ui (c, 1, 1, MPC_RNDNN);
     mpc_cosh (c, c, MPC_RNDNN);
@@ -5793,15 +8389,23 @@ rm -f core conftest.err conftest.$ac_obj
 # The library versions listed in the error message below should match
 # the HARD-minimums enforced above.
   if test x$have_gmp != xyes; then
-    as_fn_error $? "Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
+    if test -d ${srcdir}/gcc ; then
+      as_fn_error $? "Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.
 Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
 their locations.  Source code for these libraries can be found at
 their respective hosting sites as well as at
-ftp://gcc.gnu.org/pub/gcc/infrastructure/.  See also
+https://gcc.gnu.org/pub/gcc/infrastructure/.  See also
 http://gcc.gnu.org/install/prerequisites.html for additional info.  If
 you obtained GMP, MPFR and/or MPC from a vendor distribution package,
 make sure that you have installed both the libraries and the header
 files.  They may be located in separate packages." "$LINENO" 5
+    else
+      as_fn_error $? "Building GDB requires GMP 4.2+, and MPFR 3.1.0+.
+Try the --with-gmp and/or --with-mpfr options to specify
+their locations.  If you obtained GMP and/or MPFR from a vendor
+distribution package, make sure that you have installed both the libraries
+and the header files.  They may be located in separate packages." "$LINENO" 5
+    fi
   fi
 fi
 
@@ -5901,6 +8505,20 @@ else
  fi
 fi
 
+case $target in
+  *-darwin2* | *-darwin1[56789]*)
+    # For these versions, we default to using embedded rpaths.
+    if test "x$enable_darwin_at_rpath" != "xno"; then
+      poststage1_ldflags="$poststage1_ldflags -nodefaultrpaths"
+    fi
+  ;;
+  *-darwin*)
+    # For these versions, we only use embedded rpaths on demand.
+    if test "x$enable_darwin_at_rpath" = "xyes"; then
+      poststage1_ldflags="$poststage1_ldflags -nodefaultrpaths"
+    fi
+  ;;
+esac
 
 
 # GCC GRAPHITE dependency isl.
@@ -6132,17 +8750,103 @@ fi
 
 
 
+# Handle --enable-host-pie
+# If host PIE executables are the default (or must be forced on) for some host,
+# we must pass that configuration to the gcc directory.
+gcc_host_pie=
+# Check whether --enable-host-pie was given.
+if test "${enable_host_pie+set}" = set; then :
+  enableval=$enable_host_pie; host_pie=$enableval
+ case $host in
+   *-*-darwin2*)
+     if test x$host_pie != xyes ; then
+       # for Darwin20+ this is required.
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PIE executables are required for the configured host, host-pie setting ignored." >&5
+$as_echo "$as_me: WARNING: PIE executables are required for the configured host, host-pie setting ignored." >&2;}
+       host_pie=yes
+       gcc_host_pie=--enable-host-pie
+     fi ;;
+  *) ;;
+ esac
+else
+  case $host in
+  *-*-darwin2*)
+    # Default to PIE (mandatory for aarch64).
+    host_pie=yes
+    gcc_host_pie=--enable-host-pie
+    ;;
+  *) host_pie=no ;;
+ esac
+fi
+
+
+
+
+
 # Enable --enable-host-shared.
 # Checked early to determine whether jit is an 'all' language
 # Check whether --enable-host-shared was given.
 if test "${enable_host_shared+set}" = set; then :
   enableval=$enable_host_shared; host_shared=$enableval
+ case $host in
+   x86_64-*-darwin* | aarch64-*-darwin*)
+     if test x$host_shared != xyes ; then
+       # PIC is the default, and actually cannot be switched off.
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PIC code is required for the configured host; host-shared setting ignored." >&5
+$as_echo "$as_me: WARNING: PIC code is required for the configured host; host-shared setting ignored." >&2;}
+       host_shared=yes
+     fi ;;
+   *-*-darwin*)
+     if test x$host_pie = xyes -a x$host_shared != xyes ; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PIC code is required for PIE host executables host-shared setting ignored." >&5
+$as_echo "$as_me: WARNING: PIC code is required for PIE host executables host-shared setting ignored." >&2;}
+       host_shared=yes
+     fi ;;
+  *) ;;
+ esac
 else
-  host_shared=no
+  case $host in
+  # 64B x86_64 and Aarch64 Darwin default to PIC.
+  x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
+  # 32B and powerpc64 Darwin must use PIC to link PIE exes.
+  *-*-darwin*) host_shared=$host_pie ;;
+  *) host_shared=no;;
+ esac
 fi
 
 
 
+
+if test x$host_shared = xyes; then
+  case $host in
+    *-*-darwin*)
+      # Since host shared is the default for 64b Darwin, and also enabled for
+      # host_pie, ensure that we present the PIE flag when host_pie is active.
+      if test x$host_pie = xyes; then
+        PICFLAG=-fPIE
+      fi
+      ;;
+    *)
+      PICFLAG=-fPIC
+      ;;
+  esac
+elif test x$host_pie = xyes; then
+  PICFLAG=-fPIE
+else
+  PICFLAG=
+fi
+
+
+
+# If we are building PIC/PIE host executables, and we are building dependent
+# libs (e.g. GMP) in-tree those libs need to be configured to generate PIC
+# code.
+host_libs_picflag=
+if test "$host_shared" = "yes" -o "$host_pie" = "yes"; then
+host_libs_picflag='--with-pic'
+fi
+
+
 # By default, C and C++ are the only stage 1 languages.
 stage1_languages=,c,
 
@@ -6357,10 +9061,32 @@ if test -d ${srcdir}/gcc; then
             ;;
         esac
 
+        # Disable D if no preexisting GDC is available.
+        case ${add_this_lang}:${language}:${have_gdc} in
+          yes:d:no)
+            # Specifically requested language; tell them.
+            as_fn_error $? "GDC is required to build $language" "$LINENO" 5
+           ;;
+          all:d:no)
+            { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GDC is required to build $language" >&5
+$as_echo "$as_me: WARNING: GDC is required to build $language" >&2;}
+            add_this_lang=unsupported
+            ;;
+          *:d:no)
+            # Silently disable.
+            add_this_lang=unsupported
+            ;;
+        esac
+
         # Disable jit if -enable-host-shared not specified
-        case ${add_this_lang}:${language}:${host_shared} in
-          yes:jit:no)
-	    # PR jit/64780: explicitly specify --enable-host-shared
+        # but not if building for Mingw. All code in Windows
+        # is position independent code (PIC).
+        case $target in
+          *mingw*) ;;
+          *)
+          case ${add_this_lang}:${language}:${host_shared} in
+            yes:jit:no)
+	           # PR jit/64780: explicitly specify --enable-host-shared
 	    as_fn_error $? "
 Enabling language \"jit\" requires --enable-host-shared.
 
@@ -6371,17 +9097,19 @@ If you want to build both the jit and th
 best to do this via two separate configure/builds, in separate
 directories, to avoid imposing the performance cost of
 --enable-host-shared on the regular compiler." "$LINENO" 5
-	    ;;
-          all:jit:no)
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-host-shared required to build $language" >&5
+	            ;;
+            all:jit:no)
+	      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-host-shared required to build $language" >&5
 $as_echo "$as_me: WARNING: --enable-host-shared required to build $language" >&2;}
-            add_this_lang=unsupported
-            ;;
-          *:jit:no)
-            # Silently disable.
-            add_this_lang=unsupported
-            ;;
-	esac
+              add_this_lang=unsupported
+              ;;
+            *:jit:no)
+              # Silently disable.
+              add_this_lang=unsupported
+              ;;
+	        esac
+          ;;
+        esac
 
         # Disable a language that is unsupported by the target.
 	case "${add_this_lang}: $unsupported_languages " in
@@ -6419,7 +9147,7 @@ directories, to avoid imposing the perfo
 		  *) stage1_languages="${stage1_languages}${language}," ;;
 		esac
 		# We need to bootstrap any supporting libraries.
-		bootstrap_target_libs="${bootstrap_target_libs}${target_libs},"
+		bootstrap_target_libs=`echo "${bootstrap_target_libs}${target_libs}," | sed "s/ /,/g"`
 		;;
 	    esac
 	    ;;
@@ -6544,7 +9272,7 @@ case ,${enable_languages},:${enable_objc
   fi
 esac
 
-# Disable libitm, libsanitizer, libvtv, liboffloadmic if we're not building C++
+# Disable libitm, libsanitizer, libvtv if we're not building C++
 case ,${enable_languages}, in
   *,c++,*)
     # Disable libitm, libsanitizer if we're not building libstdc++
@@ -6556,10 +9284,31 @@ case ,${enable_languages}, in
     esac
     ;;
   *)
-    noconfigdirs="$noconfigdirs target-liboffloadmic target-libitm target-libsanitizer target-libvtv"
+    noconfigdirs="$noconfigdirs target-libitm target-libsanitizer target-libvtv"
+    ;;
+esac
+
+case ,${enable_languages}, in
+  *,rust,*)
+    case " ${noconfigdirs} " in
+      *\ target-libstdc++-v3\ *)
+        # Disable target libgrust if we're not building target libstdc++.
+        noconfigdirs="$noconfigdirs target-libgrust"
+        ;;
+    esac
     ;;
 esac
 
+# If gcc/ is not in the source tree then we'll not be building a
+# target compiler, assume in that case we don't want to build any
+# target libraries or tools.
+#
+# This was added primarily for the benefit for binutils-gdb who reuse
+# this configure script, but don't always have target tools available.
+if test ! -d ${srcdir}/gcc; then
+   skipdirs="${skipdirs} ${target_configdirs}"
+fi
+
 # Remove the entries in $skipdirs and $noconfigdirs from $configdirs,
 # $build_configdirs and $target_configdirs.
 # If we have the source for $noconfigdirs entries, add them to $notsupp.
@@ -6645,13 +9394,18 @@ fi
 
 # Sometimes we have special requirements for the host libiberty.
 extra_host_libiberty_configure_flags=
-extra_host_zlib_configure_flags=
 case " $configdirs " in
-  *" lto-plugin "* | *" libcc1 "*)
+  *" lto-plugin "* | *" libcc1 "* | *" gdbserver "*)
     # When these are to be built as shared libraries, the same applies to
     # libiberty.
     extra_host_libiberty_configure_flags=--enable-shared
     ;;
+esac
+
+
+# Sometimes we have special requirements for the host zlib.
+extra_host_zlib_configure_flags=
+case " $configdirs " in
   *" bfd "*)
     # When bfd is to be built as a shared library, the same applies to
     # zlib.
@@ -6662,7 +9416,6 @@ case " $configdirs " in
 esac
 
 
-
 # Produce a warning message for the subdirs we can't configure.
 # This isn't especially interesting in the Cygnus tree, but in the individual
 # FSF releases, it's important to let people know when their machine isn't
@@ -6968,6 +9721,12 @@ case "${target}" in
   spu-*-*)
     target_makefile_frag="config/mt-spu"
     ;;
+  loongarch*-*linux* | loongarch*-*gnu*)
+    target_makefile_frag="config/mt-loongarch-gnu"
+    ;;
+  loongarch*-*elf*)
+    target_makefile_frag="config/mt-loongarch-elf"
+    ;;
   mips*-sde-elf* | mips*-mti-elf* | mips*-img-elf*)
     target_makefile_frag="config/mt-sde"
     ;;
@@ -7165,7 +9924,7 @@ fi
 # or bootstrap-ubsan, bootstrap it.
 if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then
   case "$BUILD_CONFIG" in
-    *bootstrap-asan* | *bootstrap-ubsan* )
+    *bootstrap-hwasan* | *bootstrap-asan* | *bootstrap-ubsan* )
       bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
       bootstrap_fixincludes=yes
       ;;
@@ -7178,6 +9937,16 @@ if echo " ${target_configdirs} " | grep
   bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
 fi
 
+# If we are building libatomic and the list of enabled languages includes the
+# D frontend, bootstrap it.
+if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1; then
+  case ,${enable_languages}, in
+    *,d,*)
+      bootstrap_target_libs=${bootstrap_target_libs}target-libatomic,
+      ;;
+  esac
+fi
+
 # Determine whether gdb needs tk/tcl or not.
 # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
 # and in that case we want gdb to be built without tk.  Ugh!
@@ -7206,13 +9975,20 @@ esac
 CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g`
 INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g`
 
-# gdb depends on gnulib, but as nothing else does, only include it if
-# gdb is built.
-if echo " ${configdirs} " | grep " gdb " > /dev/null 2>&1 ; then
-  # The Makefile provides the ordering, so it's enough here to add
-  # gnulib to the list.
-  configdirs="${configdirs} gnulib"
-fi
+# gdb and gdbserver depend on gnulib and gdbsupport, but as nothing
+# else does, only include them if one of these is built.  The Makefile
+# provides the ordering, so it's enough here to add to the list.
+case " ${configdirs} " in
+  *\ gdb\ *)
+    configdirs="${configdirs} gnulib gdbsupport"
+    ;;
+  *\ gdbserver\ *)
+    configdirs="${configdirs} gnulib gdbsupport"
+    ;;
+  *\ sim\ *)
+    configdirs="${configdirs} gnulib"
+    ;;
+esac
 
 # Strip out unwanted targets.
 
@@ -7303,6 +10079,12 @@ extrasub_target="$extrasub_target
 /^@unless /d
 /^@endunless /d"
 
+if test "$enable_pgo_build" != "no"; then
+  extrasub_build="$extrasub_build
+/^@if pgo-build\$/d
+/^@endif pgo-build\$/d"
+fi
+
 # Create the serialization dependencies.  This uses a temporary file.
 
 # Check whether --enable-serial-configure was given.
@@ -7322,7 +10104,9 @@ esac
 # These force 'configure's to be done one at a time, to avoid problems
 # with contention over a shared config.cache.
 rm -f serdep.tmp
+if test "x${enable_serial_build_configure}" = xyes || test "x${enable_serial_host_configure}" = xyes || test "x${enable_serial_target_configure}" = xyes; then
 echo '# serdep.tmp' > serdep.tmp
+fi
 olditem=
 test "x${enable_serial_build_configure}" = xyes &&
 for item in ${build_configdirs} ; do
@@ -7360,7 +10144,8 @@ serialization_dependencies=serdep.tmp
 # files altogether, and which should be passed on to subconfigures.
 # Also strip program-prefix, program-suffix, and program-transform-name,
 # so that we can pass down a consistent program-transform-name.
-baseargs=
+hbaseargs=
+bbaseargs=
 tbaseargs=
 keep_next=no
 skip_next=no
@@ -7376,7 +10161,8 @@ do
       *\'*)
 	ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
-    baseargs="$baseargs '$ac_arg'"
+    hbaseargs="$hbaseargs '$ac_arg'"
+    bbaseargs="$bbaseargs '$ac_arg'"
     tbaseargs="$tbaseargs '$ac_arg'"
     keep_next=no
     continue
@@ -7400,6 +10186,7 @@ do
   esac
 
   skip_targ=no
+  skip_barg=no
   case $ac_arg in
 
   --with-* | --without-*)
@@ -7412,6 +10199,12 @@ do
     *[-_]lib)
       lib=`echo "$libopt" | sed 's,[-_]lib$,,'`
       ;;
+    *[-_]prefix)
+      lib=`echo "$libopt" | sed 's,[-_]prefix$,,'`
+      ;;
+    *[-_]type)
+      lib=`echo "$libopt" | sed 's,[-_]type$,,'`
+      ;;
     *)
       lib=$libopt
       ;;
@@ -7428,6 +10221,11 @@ do
         skip_targ=yes
       fi
       ;;
+    libintl | libiconv)
+      # We don't want libintl (and co.) in anything but the host arguments.
+      skip_targ=yes
+      skip_barg=yes
+      ;;
     esac
     ;;
   esac
@@ -7436,7 +10234,8 @@ do
     --cache-file=/dev/null | \
     -cache-file=/dev/null )
       # Handled here to avoid the test to skip args below.
-      baseargs="$baseargs '$ac_arg'"
+      hbaseargs="$hbaseargs '$ac_arg'"
+      bbaseargs="$bbaseargs '$ac_arg'"
       tbaseargs="$tbaseargs '$ac_arg'"
       # Assert: $separate_arg should always be no.
       keep_next=$separate_arg
@@ -7467,7 +10266,10 @@ do
 	*\'*)
 	  ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
       esac
-      baseargs="$baseargs '$ac_arg'"
+      hbaseargs="$hbaseargs '$ac_arg'"
+      if test X"$skip_barg" = Xno; then
+	bbaseargs="$bbaseargs '$ac_arg'"
+      fi
       if test X"$skip_targ" = Xno; then
         tbaseargs="$tbaseargs '$ac_arg'"
       fi
@@ -7482,7 +10284,8 @@ do
 done
 # Remove the initial space we just introduced and, as these will be
 # expanded by make, quote '$'.
-baseargs=`echo "x$baseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
+hbaseargs=`echo "x$hbaseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
+bbaseargs=`echo "x$bbaseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
 
 # Add in --program-transform-name, after --program-prefix and
 # --program-suffix have been applied to it.  Autoconf has already
@@ -7496,15 +10299,24 @@ sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g
 EOF_SED
 gcc_transform_name=`cat conftestsed.out`
 rm -f conftestsed.out
-baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"
+hbaseargs="$hbaseargs --program-transform-name='${gcc_transform_name}'"
+bbaseargs="$bbaseargs --program-transform-name='${gcc_transform_name}'"
 tbaseargs="$tbaseargs --program-transform-name='${gcc_transform_name}'"
 if test "$silent" = yes; then
-  baseargs="$baseargs --silent"
+  bbaseargs="$bbaseargs --silent"
+  hbaseargs="$hbaseargs --silent"
   tbaseargs="$tbaseargs --silent"
 fi
-baseargs="$baseargs --disable-option-checking"
+
+bbaseargs="$bbaseargs --disable-option-checking"
+hbaseargs="$hbaseargs --disable-option-checking"
 tbaseargs="$tbaseargs --disable-option-checking"
 
+if test "$enable_year2038" = no; then
+  baseargs="$baseargs --disable-year2038"
+  tbaseargs="$tbaseargs --disable-year2038"
+fi
+
 # Record and document user additions to sub configure arguments.
 
 
@@ -7515,7 +10327,7 @@ tbaseargs="$tbaseargs --disable-option-c
 # desired.  We can't even use the same cache file for all build-side
 # libraries, as they're compiled differently; some with C, some with
 # C++ or with different feature-enabling options.
-build_configargs="$build_configargs --cache-file=./config.cache ${baseargs}"
+build_configargs="$build_configargs --cache-file=./config.cache ${bbaseargs}"
 
 # For host modules, accept cache file option, or specification as blank.
 case "${cache_file}" in
@@ -7529,7 +10341,7 @@ esac
 
 # Host dirs don't like to share a cache file either, horribly enough.
 # This seems to be due to autoconf 2.5x stupidity.
-host_configargs="$host_configargs --cache-file=./config.cache ${extra_host_args} ${baseargs}"
+host_configargs="$host_configargs --cache-file=./config.cache ${extra_host_args} ${hbaseargs}"
 
 target_configargs="$target_configargs ${tbaseargs}"
 
@@ -7668,6 +10480,7 @@ esac
 # our build compiler if desired.
 if test x"${build}" = x"${host}" ; then
   CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
+  CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
   CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
   LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
 fi
@@ -7692,6 +10505,17 @@ case "${target}" in
   mep*)
     FLAGS_FOR_TARGET="$FLAGS_FOR_TARGET -mlibrary"
     ;;
+  # The VxWorks support for shared libraries is getting in
+  # incrementally.  Make sure it doesn't get activated implicitly:
+  *vxworks*)
+    if test "${enable_shared-unset}" = unset ; then
+      enable_shared=no
+      # So the build of libraries knows ...
+      target_configargs="${target_configargs} --disable-shared"
+      # So gcc knows ...
+      host_configargs="${host_configargs} --disable-shared"
+    fi
+    ;;
 esac
 
 # Makefile fragments.
@@ -7746,6 +10570,10 @@ done
 
 
 
+
+
+
+
 # Generate default definitions for YACC, M4, LEX and other programs that run
 # on the build machine.  These are used if the Makefile can't locate these
 # programs in objdir.
@@ -8578,6 +11406,147 @@ fi
 
 
 
+if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL=$DSYMUTIL
+elif test -n "$ac_cv_prog_DSYMUTIL"; then
+  DSYMUTIL=$ac_cv_prog_DSYMUTIL
+fi
+
+if test -n "$ac_cv_prog_DSYMUTIL"; then
+  for ncn_progname in dsymutil; do
+    # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  done
+fi
+
+for ncn_progname in dsymutil; do
+  if test -n "$ncn_tool_prefix"; then
+    # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL="${ncn_tool_prefix}${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+  if test -z "$ac_cv_prog_DSYMUTIL" && test $build = $host ; then
+    # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+  test -n "$ac_cv_prog_DSYMUTIL" && break
+done
+
+if test -z "$ac_cv_prog_DSYMUTIL" ; then
+  set dummy dsymutil
+  if test $build = $host ; then
+    DSYMUTIL="$2"
+  else
+    DSYMUTIL="${ncn_tool_prefix}$2"
+  fi
+fi
+
+
+
 if test -n "$LD"; then
   ac_cv_prog_LD=$LD
 elif test -n "$ac_cv_prog_LD"; then
@@ -9837,6 +12806,147 @@ fi
 
 
 
+if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL=$OTOOL
+elif test -n "$ac_cv_prog_OTOOL"; then
+  OTOOL=$ac_cv_prog_OTOOL
+fi
+
+if test -n "$ac_cv_prog_OTOOL"; then
+  for ncn_progname in otool; do
+    # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  done
+fi
+
+for ncn_progname in otool; do
+  if test -n "$ncn_tool_prefix"; then
+    # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL="${ncn_tool_prefix}${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+  if test -z "$ac_cv_prog_OTOOL" && test $build = $host ; then
+    # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+  test -n "$ac_cv_prog_OTOOL" && break
+done
+
+if test -z "$ac_cv_prog_OTOOL" ; then
+  set dummy otool
+  if test $build = $host ; then
+    OTOOL="$2"
+  else
+    OTOOL="${ncn_tool_prefix}$2"
+  fi
+fi
+
+
+
 if test -n "$READELF"; then
   ac_cv_prog_READELF=$READELF
 elif test -n "$ac_cv_prog_READELF"; then
@@ -9981,6 +13091,150 @@ fi
 
 
 
+
+GDCFLAGS=${GDCFLAGS-${CFLAGS}}
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
+$as_echo_n "checking for -plugin option... " >&6; }
+
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+plugin_option=
+for plugin in $plugin_names; do
+  plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+  if test x$plugin_so = x$plugin; then
+    plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+  fi
+  if test x$plugin_so != x$plugin; then
+    plugin_option="--plugin $plugin_so"
+    break
+  fi
+done
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+if test "${AR}" = "" ; then
+  as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
+fi
+touch conftest.c
+${AR} $plugin_option rc conftest.a conftest.c
+if test "$?" != 0; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+  plugin_option=
+fi
+rm -f conftest.*
+if test -n "$plugin_option"; then
+  PLUGIN_OPTION="$plugin_option"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+$as_echo "$plugin_option" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+AR_PLUGIN_OPTION=
+RANLIB_PLUGIN_OPTION=
+if test -n "$PLUGIN_OPTION"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    AR_PLUGIN_OPTION="$PLUGIN_OPTION"
+  fi
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION"
+  fi
+fi
+
+
+
 # Target tools.
 
 # Check whether --with-build-time-tools was given.
@@ -10800,6 +14054,328 @@ fi
 
 
 
+if test -n "$GDC_FOR_TARGET"; then
+  ac_cv_prog_GDC_FOR_TARGET=$GDC_FOR_TARGET
+elif test -n "$ac_cv_prog_GDC_FOR_TARGET"; then
+  GDC_FOR_TARGET=$ac_cv_prog_GDC_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_GDC_FOR_TARGET"; then
+  for ncn_progname in gdc; do
+    # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GDC_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GDC_FOR_TARGET"; then
+  ac_cv_prog_GDC_FOR_TARGET="$GDC_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GDC_FOR_TARGET="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GDC_FOR_TARGET=$ac_cv_prog_GDC_FOR_TARGET
+if test -n "$GDC_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDC_FOR_TARGET" >&5
+$as_echo "$GDC_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  done
+fi
+
+if test -z "$ac_cv_prog_GDC_FOR_TARGET" && test -n "$with_build_time_tools"; then
+  for ncn_progname in gdc; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5
+$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; }
+    if test -x $with_build_time_tools/${ncn_progname}; then
+      ac_cv_prog_GDC_FOR_TARGET=$with_build_time_tools/${ncn_progname}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      break
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+  done
+fi
+
+if test -z "$ac_cv_prog_GDC_FOR_TARGET"; then
+  for ncn_progname in gdc; do
+    if test -n "$ncn_target_tool_prefix"; then
+      # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GDC_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GDC_FOR_TARGET"; then
+  ac_cv_prog_GDC_FOR_TARGET="$GDC_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GDC_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GDC_FOR_TARGET=$ac_cv_prog_GDC_FOR_TARGET
+if test -n "$GDC_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDC_FOR_TARGET" >&5
+$as_echo "$GDC_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    fi
+    if test -z "$ac_cv_prog_GDC_FOR_TARGET" && test $build = $target ; then
+      # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GDC_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GDC_FOR_TARGET"; then
+  ac_cv_prog_GDC_FOR_TARGET="$GDC_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GDC_FOR_TARGET="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GDC_FOR_TARGET=$ac_cv_prog_GDC_FOR_TARGET
+if test -n "$GDC_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDC_FOR_TARGET" >&5
+$as_echo "$GDC_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    fi
+    test -n "$ac_cv_prog_GDC_FOR_TARGET" && break
+  done
+fi
+
+if test -z "$ac_cv_prog_GDC_FOR_TARGET" ; then
+  set dummy gdc
+  if test $build = $target ; then
+    GDC_FOR_TARGET="$2"
+  else
+    GDC_FOR_TARGET="${ncn_target_tool_prefix}$2"
+  fi
+else
+  GDC_FOR_TARGET="$ac_cv_prog_GDC_FOR_TARGET"
+fi
+
+
+
+if test -n "$GM2_FOR_TARGET"; then
+  ac_cv_prog_GM2_FOR_TARGET=$GM2_FOR_TARGET
+elif test -n "$ac_cv_prog_GM2_FOR_TARGET"; then
+  GM2_FOR_TARGET=$ac_cv_prog_GM2_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_GM2_FOR_TARGET"; then
+  for ncn_progname in gm2; do
+    # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GM2_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GM2_FOR_TARGET"; then
+  ac_cv_prog_GM2_FOR_TARGET="$GM2_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GM2_FOR_TARGET="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GM2_FOR_TARGET=$ac_cv_prog_GM2_FOR_TARGET
+if test -n "$GM2_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GM2_FOR_TARGET" >&5
+$as_echo "$GM2_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  done
+fi
+
+if test -z "$ac_cv_prog_GM2_FOR_TARGET" && test -n "$with_build_time_tools"; then
+  for ncn_progname in gm2; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5
+$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; }
+    if test -x $with_build_time_tools/${ncn_progname}; then
+      ac_cv_prog_GM2_FOR_TARGET=$with_build_time_tools/${ncn_progname}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      break
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+  done
+fi
+
+if test -z "$ac_cv_prog_GM2_FOR_TARGET"; then
+  for ncn_progname in gm2; do
+    if test -n "$ncn_target_tool_prefix"; then
+      # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GM2_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GM2_FOR_TARGET"; then
+  ac_cv_prog_GM2_FOR_TARGET="$GM2_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GM2_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GM2_FOR_TARGET=$ac_cv_prog_GM2_FOR_TARGET
+if test -n "$GM2_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GM2_FOR_TARGET" >&5
+$as_echo "$GM2_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    fi
+    if test -z "$ac_cv_prog_GM2_FOR_TARGET" && test $build = $target ; then
+      # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GM2_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GM2_FOR_TARGET"; then
+  ac_cv_prog_GM2_FOR_TARGET="$GM2_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GM2_FOR_TARGET="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GM2_FOR_TARGET=$ac_cv_prog_GM2_FOR_TARGET
+if test -n "$GM2_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GM2_FOR_TARGET" >&5
+$as_echo "$GM2_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    fi
+    test -n "$ac_cv_prog_GM2_FOR_TARGET" && break
+  done
+fi
+
+if test -z "$ac_cv_prog_GM2_FOR_TARGET" ; then
+  set dummy gm2
+  if test $build = $target ; then
+    GM2_FOR_TARGET="$2"
+  else
+    GM2_FOR_TARGET="${ncn_target_tool_prefix}$2"
+  fi
+else
+  GM2_FOR_TARGET="$ac_cv_prog_GM2_FOR_TARGET"
+fi
+
+
+
 cat > conftest.c << \EOF
 #ifdef __GNUC__
   gcc_yay;
@@ -11506,6 +15082,236 @@ fi
 
 
 
+if test -z "$ac_cv_path_DSYMUTIL_FOR_TARGET" ; then
+  if test -n "$with_build_time_tools"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dsymutil in $with_build_time_tools" >&5
+$as_echo_n "checking for dsymutil in $with_build_time_tools... " >&6; }
+    if test -x $with_build_time_tools/dsymutil; then
+      DSYMUTIL_FOR_TARGET=`cd $with_build_time_tools && pwd`/dsymutil
+      ac_cv_path_DSYMUTIL_FOR_TARGET=$DSYMUTIL_FOR_TARGET
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_DSYMUTIL_FOR_TARGET" >&5
+$as_echo "$ac_cv_path_DSYMUTIL_FOR_TARGET" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+  elif test $build != $host && test $have_gcc_for_target = yes; then
+    DSYMUTIL_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=dsymutil`
+    test $DSYMUTIL_FOR_TARGET = dsymutil && DSYMUTIL_FOR_TARGET=
+    test -n "$DSYMUTIL_FOR_TARGET" && ac_cv_path_DSYMUTIL_FOR_TARGET=$DSYMUTIL_FOR_TARGET
+  fi
+fi
+if test -z "$ac_cv_path_DSYMUTIL_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_DSYMUTIL_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $DSYMUTIL_FOR_TARGET in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_DSYMUTIL_FOR_TARGET="$DSYMUTIL_FOR_TARGET" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_DSYMUTIL_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+DSYMUTIL_FOR_TARGET=$ac_cv_path_DSYMUTIL_FOR_TARGET
+if test -n "$DSYMUTIL_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL_FOR_TARGET" >&5
+$as_echo "$DSYMUTIL_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DSYMUTIL_FOR_TARGET" ; then
+
+
+if test -n "$DSYMUTIL_FOR_TARGET"; then
+  ac_cv_prog_DSYMUTIL_FOR_TARGET=$DSYMUTIL_FOR_TARGET
+elif test -n "$ac_cv_prog_DSYMUTIL_FOR_TARGET"; then
+  DSYMUTIL_FOR_TARGET=$ac_cv_prog_DSYMUTIL_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_DSYMUTIL_FOR_TARGET"; then
+  for ncn_progname in dsymutil; do
+    # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL_FOR_TARGET"; then
+  ac_cv_prog_DSYMUTIL_FOR_TARGET="$DSYMUTIL_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL_FOR_TARGET="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL_FOR_TARGET=$ac_cv_prog_DSYMUTIL_FOR_TARGET
+if test -n "$DSYMUTIL_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL_FOR_TARGET" >&5
+$as_echo "$DSYMUTIL_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  done
+fi
+
+if test -z "$ac_cv_prog_DSYMUTIL_FOR_TARGET" && test -n "$with_build_time_tools"; then
+  for ncn_progname in dsymutil; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5
+$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; }
+    if test -x $with_build_time_tools/${ncn_progname}; then
+      ac_cv_prog_DSYMUTIL_FOR_TARGET=$with_build_time_tools/${ncn_progname}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      break
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+  done
+fi
+
+if test -z "$ac_cv_prog_DSYMUTIL_FOR_TARGET"; then
+  for ncn_progname in dsymutil; do
+    if test -n "$ncn_target_tool_prefix"; then
+      # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL_FOR_TARGET"; then
+  ac_cv_prog_DSYMUTIL_FOR_TARGET="$DSYMUTIL_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL_FOR_TARGET=$ac_cv_prog_DSYMUTIL_FOR_TARGET
+if test -n "$DSYMUTIL_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL_FOR_TARGET" >&5
+$as_echo "$DSYMUTIL_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    fi
+    if test -z "$ac_cv_prog_DSYMUTIL_FOR_TARGET" && test $build = $target ; then
+      # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL_FOR_TARGET"; then
+  ac_cv_prog_DSYMUTIL_FOR_TARGET="$DSYMUTIL_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL_FOR_TARGET="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL_FOR_TARGET=$ac_cv_prog_DSYMUTIL_FOR_TARGET
+if test -n "$DSYMUTIL_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL_FOR_TARGET" >&5
+$as_echo "$DSYMUTIL_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    fi
+    test -n "$ac_cv_prog_DSYMUTIL_FOR_TARGET" && break
+  done
+fi
+
+if test -z "$ac_cv_prog_DSYMUTIL_FOR_TARGET" ; then
+  set dummy dsymutil
+  if test $build = $target ; then
+    DSYMUTIL_FOR_TARGET="$2"
+  else
+    DSYMUTIL_FOR_TARGET="${ncn_target_tool_prefix}$2"
+  fi
+else
+  DSYMUTIL_FOR_TARGET="$ac_cv_prog_DSYMUTIL_FOR_TARGET"
+fi
+
+else
+  DSYMUTIL_FOR_TARGET=$ac_cv_path_DSYMUTIL_FOR_TARGET
+fi
+
+
+
+
 if test -z "$ac_cv_path_LD_FOR_TARGET" ; then
   if test -n "$with_build_time_tools"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld in $with_build_time_tools" >&5
@@ -12656,6 +16462,236 @@ fi
 
 
 
+if test -z "$ac_cv_path_OTOOL_FOR_TARGET" ; then
+  if test -n "$with_build_time_tools"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for otool in $with_build_time_tools" >&5
+$as_echo_n "checking for otool in $with_build_time_tools... " >&6; }
+    if test -x $with_build_time_tools/otool; then
+      OTOOL_FOR_TARGET=`cd $with_build_time_tools && pwd`/otool
+      ac_cv_path_OTOOL_FOR_TARGET=$OTOOL_FOR_TARGET
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_OTOOL_FOR_TARGET" >&5
+$as_echo "$ac_cv_path_OTOOL_FOR_TARGET" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+  elif test $build != $host && test $have_gcc_for_target = yes; then
+    OTOOL_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=otool`
+    test $OTOOL_FOR_TARGET = otool && OTOOL_FOR_TARGET=
+    test -n "$OTOOL_FOR_TARGET" && ac_cv_path_OTOOL_FOR_TARGET=$OTOOL_FOR_TARGET
+  fi
+fi
+if test -z "$ac_cv_path_OTOOL_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_OTOOL_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $OTOOL_FOR_TARGET in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_OTOOL_FOR_TARGET="$OTOOL_FOR_TARGET" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_OTOOL_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+OTOOL_FOR_TARGET=$ac_cv_path_OTOOL_FOR_TARGET
+if test -n "$OTOOL_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL_FOR_TARGET" >&5
+$as_echo "$OTOOL_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_OTOOL_FOR_TARGET" ; then
+
+
+if test -n "$OTOOL_FOR_TARGET"; then
+  ac_cv_prog_OTOOL_FOR_TARGET=$OTOOL_FOR_TARGET
+elif test -n "$ac_cv_prog_OTOOL_FOR_TARGET"; then
+  OTOOL_FOR_TARGET=$ac_cv_prog_OTOOL_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_OTOOL_FOR_TARGET"; then
+  for ncn_progname in otool; do
+    # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL_FOR_TARGET"; then
+  ac_cv_prog_OTOOL_FOR_TARGET="$OTOOL_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL_FOR_TARGET="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL_FOR_TARGET=$ac_cv_prog_OTOOL_FOR_TARGET
+if test -n "$OTOOL_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL_FOR_TARGET" >&5
+$as_echo "$OTOOL_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  done
+fi
+
+if test -z "$ac_cv_prog_OTOOL_FOR_TARGET" && test -n "$with_build_time_tools"; then
+  for ncn_progname in otool; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5
+$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; }
+    if test -x $with_build_time_tools/${ncn_progname}; then
+      ac_cv_prog_OTOOL_FOR_TARGET=$with_build_time_tools/${ncn_progname}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      break
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+  done
+fi
+
+if test -z "$ac_cv_prog_OTOOL_FOR_TARGET"; then
+  for ncn_progname in otool; do
+    if test -n "$ncn_target_tool_prefix"; then
+      # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL_FOR_TARGET"; then
+  ac_cv_prog_OTOOL_FOR_TARGET="$OTOOL_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL_FOR_TARGET=$ac_cv_prog_OTOOL_FOR_TARGET
+if test -n "$OTOOL_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL_FOR_TARGET" >&5
+$as_echo "$OTOOL_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    fi
+    if test -z "$ac_cv_prog_OTOOL_FOR_TARGET" && test $build = $target ; then
+      # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL_FOR_TARGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL_FOR_TARGET"; then
+  ac_cv_prog_OTOOL_FOR_TARGET="$OTOOL_FOR_TARGET" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL_FOR_TARGET="${ncn_progname}"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL_FOR_TARGET=$ac_cv_prog_OTOOL_FOR_TARGET
+if test -n "$OTOOL_FOR_TARGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL_FOR_TARGET" >&5
+$as_echo "$OTOOL_FOR_TARGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    fi
+    test -n "$ac_cv_prog_OTOOL_FOR_TARGET" && break
+  done
+fi
+
+if test -z "$ac_cv_prog_OTOOL_FOR_TARGET" ; then
+  set dummy otool
+  if test $build = $target ; then
+    OTOOL_FOR_TARGET="$2"
+  else
+    OTOOL_FOR_TARGET="${ncn_target_tool_prefix}$2"
+  fi
+else
+  OTOOL_FOR_TARGET="$ac_cv_prog_OTOOL_FOR_TARGET"
+fi
+
+else
+  OTOOL_FOR_TARGET=$ac_cv_path_OTOOL_FOR_TARGET
+fi
+
+
+
+
 if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then
   if test -n "$with_build_time_tools"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ranlib in $with_build_time_tools" >&5
@@ -14064,6 +18100,37 @@ else
   fi
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target dsymutil" >&5
+$as_echo_n "checking where to find the target dsymutil... " >&6; }
+if test "x${build}" != "x${host}" ; then
+  if expr "x$DSYMUTIL_FOR_TARGET" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname $DSYMUTIL_FOR_TARGET`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+  else
+    # Canadian cross, just use what we found
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+  fi
+else
+  if expr "x$DSYMUTIL_FOR_TARGET" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname $DSYMUTIL_FOR_TARGET`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+  elif test "x$target" = "x$host"; then
+    # We can use an host tool
+    DSYMUTIL_FOR_TARGET='$(DSYMUTIL)'
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5
+$as_echo "host tool" >&6; }
+  else
+    # We need a cross tool
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+  fi
+fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target gcc" >&5
 $as_echo_n "checking where to find the target gcc... " >&6; }
 if test "x${build}" != "x${host}" ; then
@@ -14196,6 +18263,96 @@ else
   fi
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target gdc" >&5
+$as_echo_n "checking where to find the target gdc... " >&6; }
+if test "x${build}" != "x${host}" ; then
+  if expr "x$GDC_FOR_TARGET" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname $GDC_FOR_TARGET`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+  else
+    # Canadian cross, just use what we found
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+  fi
+else
+  ok=yes
+  case " ${configdirs} " in
+    *" gcc "*) ;;
+    *) ok=no ;;
+  esac
+  case ,${enable_languages}, in
+    *,d,*) ;;
+    *) ok=no ;;
+  esac
+  if test $ok = yes; then
+    # An in-tree tool is available and we can use it
+    GDC_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/gdc -B$$r/$(HOST_SUBDIR)/gcc/'
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5
+$as_echo "just compiled" >&6; }
+  elif expr "x$GDC_FOR_TARGET" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname $GDC_FOR_TARGET`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+  elif test "x$target" = "x$host"; then
+    # We can use an host tool
+    GDC_FOR_TARGET='$(GDC)'
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5
+$as_echo "host tool" >&6; }
+  else
+    # We need a cross tool
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+  fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target gm2" >&5
+$as_echo_n "checking where to find the target gm2... " >&6; }
+if test "x${build}" != "x${host}" ; then
+  if expr "x$GM2_FOR_TARGET" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname $GM2_FOR_TARGET`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+  else
+    # Canadian cross, just use what we found
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+  fi
+else
+  ok=yes
+  case " ${configdirs} " in
+    *" gcc "*) ;;
+    *) ok=no ;;
+  esac
+  case ,${enable_languages}, in
+    *,m2,*) ;;
+    *) ok=no ;;
+  esac
+  if test $ok = yes; then
+    # An in-tree tool is available and we can use it
+    GM2_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/gm2 -B$$r/$(HOST_SUBDIR)/gcc/'
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5
+$as_echo "just compiled" >&6; }
+  elif expr "x$GM2_FOR_TARGET" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname $GM2_FOR_TARGET`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+  elif test "x$target" = "x$host"; then
+    # We can use an host tool
+    GM2_FOR_TARGET='$(GM2)'
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5
+$as_echo "host tool" >&6; }
+  else
+    # We need a cross tool
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+  fi
+fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target ld" >&5
 $as_echo_n "checking where to find the target ld... " >&6; }
 if test "x${build}" != "x${host}" ; then
@@ -14395,6 +18552,37 @@ else
   fi
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target otool" >&5
+$as_echo_n "checking where to find the target otool... " >&6; }
+if test "x${build}" != "x${host}" ; then
+  if expr "x$OTOOL_FOR_TARGET" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname $OTOOL_FOR_TARGET`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+  else
+    # Canadian cross, just use what we found
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+  fi
+else
+  if expr "x$OTOOL_FOR_TARGET" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname $OTOOL_FOR_TARGET`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5
+$as_echo "pre-installed in $ac_dir" >&6; }
+  elif test "x$target" = "x$host"; then
+    # We can use an host tool
+    OTOOL_FOR_TARGET='$(OTOOL)'
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5
+$as_echo "host tool" >&6; }
+  else
+    # We need a cross tool
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5
+$as_echo "pre-installed" >&6; }
+  fi
+fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target ranlib" >&5
 $as_echo_n "checking where to find the target ranlib... " >&6; }
 if test "x${build}" != "x${host}" ; then
@@ -14726,10 +18914,12 @@ fi
 # Specify what files to not compare during bootstrap.
 
 compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*"
+compare_exclusions="$compare_exclusions | gcc/m2/gm2-compiler-boot/M2Version*"
+compare_exclusions="$compare_exclusions | gcc/m2/gm2-compiler-boot/SYSTEM*"
+compare_exclusions="$compare_exclusions | gcc/m2/gm2version*"
 case "$target" in
   hppa*64*-*-hpux*) ;;
-  hppa*-*-hpux*) compare_exclusions="gcc/cc*-checksum\$(objext) | */libgcc/lib2funcs* | gcc/ada/*tools/* | gcc/function-tests.o" ;;
-  powerpc*-ibm-aix*) compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/* | *libgomp*\$(objext)" ;;
+  powerpc*-ibm-aix*) compare_exclusions="$compare_exclusions | *libgomp*\$(objext)" ;;
 esac
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/configure.ac ./configure.ac
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/configure.ac	2019-12-11 01:53:27.000000000 +0000
+++ ./configure.ac	2024-02-01 01:52:32.000000000 +0000
@@ -1,6 +1,6 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
 #   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
-#   2014, 2015, 2016, 2019 Free Software Foundation, Inc.
+#   2014, 2015, 2016, 2019, 2022 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -23,6 +23,8 @@ m4_include(config/acx.m4)
 m4_include(config/override.m4)
 m4_include(config/proginstall.m4)
 m4_include(config/elf.m4)
+m4_include(config/ax_cxx_compile_stdcxx.m4)
+m4_include(config/gcc-plugin.m4)
 m4_include([libtool.m4])
 m4_include([ltoptions.m4])
 m4_include([ltsugar.m4])
@@ -131,7 +133,7 @@ build_tools="build-texinfo build-flex bu
 
 # these libraries are used by various programs built for the host environment
 #f
-host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl libelf libiconv libctf"
+host_libs="gettext libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libcody libdecnumber gmp mpfr mpc isl libiconv libctf libsframe libgrust "
 
 # these tools are built for the host environment
 # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
@@ -139,7 +141,7 @@ host_libs="intl libiberty opcodes bfd re
 # binutils, gas and ld appear in that order because it makes sense to run
 # "make check" in that particular order.
 # If --enable-gold is used, "gold" may replace "ld".
-host_tools="flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools"
+host_tools="flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gm2tools gotools c++tools"
 
 # these libraries are built for the target environment, and are built after
 # the host libraries and the host tools (which may be a cross compiler)
@@ -149,8 +151,6 @@ target_libraries="target-libgcc \
 		target-libgloss \
 		target-newlib \
 		target-libgomp \
-		target-liboffloadmic \
-		target-libhsail-rt \
 		target-libatomic \
 		target-libitm \
 		target-libstdc++-v3 \
@@ -162,7 +162,11 @@ target_libraries="target-libgcc \
 		target-libffi \
 		target-libobjc \
 		target-libada \
-		target-libgo"
+		target-libgm2 \
+		target-libgo \
+		target-libgrust \
+		target-libphobos \
+		target-zlib"
 
 # these tools are built using the target libraries, and are intended to
 # run only in the target environment
@@ -251,6 +255,9 @@ if test x$with_system_readline = xyes ;
   noconfigdirs="$noconfigdirs readline"
 fi
 
+AC_ARG_WITH(zstd,
+[AS_HELP_STRING([--with-zstd], [Support zstd compressed debug sections (default=auto)])])
+
 # some tools are so dependent upon X11 that if we're not building with X, 
 # it's not even worth trying to configure, much less build, that tool.
 
@@ -303,6 +310,14 @@ AC_ARG_ENABLE(offload-targets,
   fi
 ], [enable_offload_targets=])
 
+AC_ARG_ENABLE(offload-defaulted,
+[AS_HELP_STRING([--enable-offload-defaulted]
+		[If enabled, configured but not installed offload compilers and
+		libgomp plugins are silently ignored.  Useful for distribution
+		compilers where those are in separate optional packages.])],
+[enable_offload_defaulted=$enableval],
+[enable_offload_defaulted=])
+
 # Handle --enable-gold, --enable-ld.
 # --disable-gold [--enable-ld]
 #     Build only ld.  Default option.
@@ -335,7 +350,7 @@ case "${ENABLE_GOLD}" in
       *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
       | *-*-linux* | *-*-gnu* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
       | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
-      | *-*-solaris2* | *-*-nto* | *-*-nacl*)
+      | *-*-solaris2* | *-*-nto* | *-*-nacl* | *-*-haiku*)
         case "${target}" in
           *-*-linux*aout* | *-*-linux*oldld*)
             ;;
@@ -349,7 +364,7 @@ case "${ENABLE_GOLD}" in
       # Check for target supported by gold.
       case "${target}" in
         i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
-        | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
+        | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
 	  configdirs="$configdirs gold"
 	  if test x${ENABLE_GOLD} = xdefault; then
 	    default_ld=gold
@@ -391,6 +406,20 @@ case "${ENABLE_LD}" in
     ;;
 esac
 
+AC_ARG_ENABLE(gprofng,
+[AS_HELP_STRING([[--enable-gprofng[=ARG]]],
+		[build gprofng @<:@ARG={yes,no}@:>@])],
+enable_gprofng=$enableval,
+enable_gprofng=yes)
+if test "$enable_gprofng" = "yes"; then
+  case "${target}" in
+    x86_64-*-linux* | i?86-*-linux* | aarch64-*-linux*)
+    configdirs="$configdirs gprofng"
+    ;;
+  esac
+fi
+
+
 # PR gas/19109
 # Decide the default method for compressing debug sections.
 # Provide a configure time option to override our default.
@@ -404,6 +433,12 @@ AC_ARG_ENABLE(compressed_debug_sections,
   fi
 ], [enable_compressed_debug_sections=])
 
+# Select default compression algorithm.
+AC_ARG_ENABLE(default_compressed_debug_sections_algorithm,
+[AS_HELP_STRING([--enable-default-compressed-debug-sections-algorithm={zlib,zstd}],
+		[Default compression algorithm for --enable-compressed-debug-sections.])],
+[], [default_compressed_debug_sections_algorithm=])
+
 # Configure extra directories which are host specific
 
 case "${host}" in
@@ -425,6 +460,18 @@ case "${host}" in
     ;;
 esac
 
+# Default to --disable-year2038 until we can handle differences between
+# projects that use gnulib (which understands year 2038) and projects that
+# do not (like BFD).
+AC_ARG_ENABLE(year2038,
+AS_HELP_STRING([--enable-year2038],
+  [enable support for timestamps past the year 2038]),
+ENABLE_YEAR2038=$enableval,
+ENABLE_YEAR2038=no)
+enable_year2038=
+if test "${ENABLE_YEAR2038}" = "no" ; then
+  enable_year2038=no
+fi
 
 AC_ARG_ENABLE(libquadmath,
 AS_HELP_STRING([--disable-libquadmath],
@@ -455,6 +502,14 @@ if test "${ENABLE_LIBADA}" != "yes" ; th
   noconfigdirs="$noconfigdirs gnattools"
 fi
 
+AC_ARG_ENABLE(libgm2,
+[AS_HELP_STRING([--enable-libgm2], [build libgm2 directory])],
+ENABLE_LIBGM2=$enableval,
+ENABLE_LIBGM2=no)
+if test "${ENABLE_LIBGM2}" != "yes" ; then
+  noconfigdirs="$noconfigdirs gm2tools"
+fi
+
 AC_ARG_ENABLE(libssp,
 [AS_HELP_STRING([--enable-libssp], [build libssp directory])],
 ENABLE_LIBSSP=$enableval,
@@ -469,42 +524,6 @@ ENABLE_LIBSTDCXX=default)
   noconfigdirs="$noconfigdirs target-libstdc++-v3"
 fi]
 
-# If this is accelerator compiler and its target is intelmic we enable
-# target liboffloadmic by default.  If this is compiler with offloading
-# for intelmic we enable host liboffloadmic by default.  Otherwise
-# liboffloadmic is disabled by default.
-AC_ARG_ENABLE([liboffloadmic],
-AC_HELP_STRING([[--enable-liboffloadmic[=ARG]]],
-	       [build liboffloadmic @<:@ARG={no,host,target}@:>@]),
-[case "$enableval" in
-  no | host | target)
-    enable_liboffloadmic=$enableval ;;
-  *)
-    AC_MSG_ERROR([--enable-liboffloadmic=no/host/target]) ;;
-esac],
-[if test x"$enable_as_accelerator_for" != x; then
-  case "${target}" in
-    *-intelmic-* | *-intelmicemul-*)
-      enable_liboffloadmic=target
-      extra_liboffloadmic_configure_flags="--enable-liboffloadmic=target"
-      ;;
-    *)
-      enable_liboffloadmic=no
-      ;;
-  esac
-else
-  case "${enable_offload_targets}" in
-    *-intelmic-* | *-intelmicemul-*)
-      enable_liboffloadmic=host
-      extra_liboffloadmic_configure_flags="--enable-liboffloadmic=host"
-      ;;
-    *)
-      enable_liboffloadmic=no
-      ;;
-    esac
-fi])
-AC_SUBST(extra_liboffloadmic_configure_flags)
-
 # Enable libgomp by default on hosted POSIX systems, and a few others.
 if test x$enable_libgomp = x ; then
     case "${target}" in
@@ -516,7 +535,7 @@ if test x$enable_libgomp = x ; then
 	;;
     *-*-darwin* | *-*-aix*)
 	;;
-    nvptx*-*-*)
+    nvptx*-*-* | amdgcn*-*-*)
 	;;
     *)
 	noconfigdirs="$noconfigdirs target-libgomp"
@@ -540,22 +559,6 @@ if test -d ${srcdir}/libatomic; then
     fi
 fi
 
-# Disable liboffloadmic on unsupported systems.
-if test -d ${srcdir}/liboffloadmic; then
-    if test x$enable_liboffloadmic != xno; then
-	AC_MSG_CHECKING([for liboffloadmic support])
-	if (srcdir=${srcdir}/liboffloadmic; \
-		. ${srcdir}/configure.tgt; \
-		test -n "$UNSUPPORTED")
-	then
-	    AC_MSG_RESULT([no])
-	    noconfigdirs="$noconfigdirs target-liboffloadmic"
-	else
-	    AC_MSG_RESULT([yes])
-	fi
-    fi
-fi
-
 # Disable libitm on unsupported systems.
 if test -d ${srcdir}/libitm; then
     if test x$enable_libitm = x; then
@@ -604,26 +607,6 @@ if test -d ${srcdir}/libvtv; then
     fi
 fi
 
-
-# Disable libhsail-rt on unsupported systems.
-if test -d ${srcdir}/libhsail-rt; then
-    if test x$enable_libhsail_rt = x; then
-        AC_MSG_CHECKING([for libhsail-rt support])
-        if (srcdir=${srcdir}/libhsail-rt; \
-                . ${srcdir}/configure.tgt; \
-                test -n "$UNSUPPORTED")
-        then
-            AC_MSG_RESULT([no])
-            unsupported_languages="$unsupported_languages brig"
-            # This implicitly disables also target-libhsail-rt as it won't
-            # get added to the build without BRIG FE.
-        else
-            AC_MSG_RESULT([yes])
-        fi
-    fi
-fi
-
-
 # Disable libquadmath for some systems.
 case "${target}" in
   avr-*-*)
@@ -642,9 +625,16 @@ case "${target}" in
     # No hosted I/O support.
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-libssp"
+    ;;
   powerpc-*-aix* | rs6000-*-aix*)
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
+  pru-*-*)
+    # No hosted I/O support.
+    noconfigdirs="$noconfigdirs target-libssp"
+    ;;
   rl78-*-*)
     # libssp uses a misaligned load to trigger a fault, but the RL78
     # doesn't fault for those - instead, it gives a build-time error
@@ -658,13 +648,17 @@ case "${target}" in
 esac
 
 # Disable libstdc++-v3 for some systems.
-# Allow user to override this if they pass --enable-libstdc++-v3
+# Allow user to override this if they pass --enable-libstdcxx
 if test "${ENABLE_LIBSTDCXX}" = "default" ; then
   case "${target}" in
     *-*-vxworks*)
       # VxWorks uses the Dinkumware C++ library.
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
       ;;
+    amdgcn*-*-*)
+      # Not ported/fails to build when using newlib.
+      noconfigdirs="$noconfigdirs target-libstdc++-v3"
+      ;;
     arm*-wince-pe*)
       # the C++ libraries don't build on top of CE's C libraries
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
@@ -672,18 +666,83 @@ if test "${ENABLE_LIBSTDCXX}" = "default
     avr-*-*)
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
       ;;
+    bpf-*-*)
+      noconfigdirs="$noconfigdirs target-libstdc++-v3"
+      ;;
     ft32-*-*)
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
       ;;
   esac
 fi
 
+# Disable C++ on systems where it is known to not work.
+# For testing, you can override this with --enable-languages=c++.
+case ,${enable_languages}, in
+  *,c++,*)
+    ;;
+  *)
+      case "${target}" in
+        bpf-*-*)
+          unsupported_languages="$unsupported_languages c++"
+          ;;
+      esac
+      ;;
+esac
+
+# Disable Objc on systems where it is known to not work.
+# For testing, you can override this with --enable-languages=objc.
+case ,${enable_languages}, in
+  *,objc,*)
+    ;;
+  *)
+      case "${target}" in
+        bpf-*-*)
+          unsupported_languages="$unsupported_languages objc"
+          ;;
+      esac
+      ;;
+esac
+
+# Disable D on systems where it is known to not work.
+# For testing, you can override this with --enable-languages=d.
+case ,${enable_languages}, in
+  *,d,*)
+    ;;
+  *)
+    case "${target}" in
+      bpf-*-*)
+	unsupported_languages="$unsupported_languages d"
+	;;
+    esac
+    ;;
+esac
+
+# Disable libphobos on unsupported systems.
+# For testing, you can override this with --enable-libphobos.
+if test -d ${srcdir}/libphobos; then
+    if test x$enable_libphobos = x; then
+	AC_MSG_CHECKING([for libphobos support])
+	if (srcdir=${srcdir}/libphobos; \
+		. ${srcdir}/configure.tgt; \
+		test "$LIBPHOBOS_SUPPORTED" != "yes")
+	then
+	    AC_MSG_RESULT([no])
+	    noconfigdirs="$noconfigdirs target-libphobos"
+	else
+	    AC_MSG_RESULT([yes])
+	fi
+    fi
+fi
+
 # Disable Fortran for some systems.
 case "${target}" in
   mmix-*-*)
     # See <http://gcc.gnu.org/ml/gcc-patches/2004-11/msg00572.html>.
     unsupported_languages="$unsupported_languages fortran"
     ;;
+  bpf-*-*)
+    unsupported_languages="$unsupported_languages fortran"
+    ;;
 esac
 
 # Disable libffi for some systems.
@@ -730,6 +789,9 @@ case "${target}" in
   arm*-*-symbianelf*)
     noconfigdirs="$noconfigdirs target-libffi"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-libffi"
+    ;;
   cris-*-* | crisv32-*-*)
     case "${target}" in
       *-*-linux*)
@@ -776,11 +838,27 @@ esac
 # Disable the go frontend on systems where it is known to not work. Please keep
 # this in sync with contrib/config-list.mk.
 case "${target}" in
-*-*-darwin* | *-*-cygwin* | *-*-mingw*)
+*-*-darwin* | *-*-cygwin* | *-*-mingw* | bpf-* )
     unsupported_languages="$unsupported_languages go"
     ;;
 esac
 
+# Only allow gdbserver on some systems.
+if test -d ${srcdir}/gdbserver; then
+    if test x$enable_gdbserver = x; then
+	AC_MSG_CHECKING([for gdbserver support])
+	if (srcdir=${srcdir}/gdbserver; \
+		. ${srcdir}/configure.srv; \
+		test -n "$UNSUPPORTED")
+	then
+	    AC_MSG_RESULT([no])
+	    noconfigdirs="$noconfigdirs gdbserver"
+	else
+	    AC_MSG_RESULT([yes])
+	fi
+    fi
+fi
+
 # Disable libgo for some systems where it is known to not work.
 # For testing, you can easily override this with --enable-libgo.
 if test x$enable_libgo = x; then
@@ -792,6 +870,9 @@ if test x$enable_libgo = x; then
     *-*-cygwin* | *-*-mingw*)
 	noconfigdirs="$noconfigdirs target-libgo"
 	;;
+    bpf-*-*)
+        noconfigdirs="$noconfigdirs target-libgo"
+        ;;
     esac
 fi
 
@@ -811,12 +892,24 @@ case "${target}" in
   cris-*-* | crisv32-*-*)
     libgloss_dir=cris
     ;;
+  kvx-*-elf)
+    libgloss_dir=kvx-elf
+    ;;
+  kvx-*-mbr)
+    libgloss_dir=kvx-mbr
+    ;;
+  kvx-*-cos)
+    libgloss_dir=kvx-cos
+    ;;
   hppa*-*-*)
     libgloss_dir=pa
     ;;
   i[[3456789]]86-*-*)
     libgloss_dir=i386
     ;;
+  loongarch*-*-*)
+    libgloss_dir=loongarch
+    ;;
   m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
     libgloss_dir=m68hc11
     ;;
@@ -829,6 +922,9 @@ case "${target}" in
   powerpc*-*-*)
     libgloss_dir=rs6000
     ;;
+  pru-*-*)
+    libgloss_dir=pru
+    ;;
   sparc*-*-*)
     libgloss_dir=sparc
     ;;
@@ -860,6 +956,9 @@ case "${target}" in
   sparc-*-sunos4*)
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+    ;;
   *-*-aix*)
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
@@ -908,6 +1007,8 @@ case "${target}" in
     noconfigdirs="$noconfigdirs ld gas gdb gprof"
     noconfigdirs="$noconfigdirs sim target-rda"
     ;;
+  amdgcn*-*-*)
+    ;;
   arm-*-darwin*)
     noconfigdirs="$noconfigdirs ld gas gdb gprof"
     noconfigdirs="$noconfigdirs sim target-rda"
@@ -931,7 +1032,8 @@ case "${target}" in
   *-*-dragonfly*)
     ;;
   *-*-freebsd*)
-    if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
+    if test "x$with_gmp" = x \
+	&& ! test -d ${srcdir}/gmp \
 	&& test -f /usr/local/include/gmp.h; then
       with_gmp=/usr/local
     fi
@@ -971,6 +1073,9 @@ case "${target}" in
     # newlib is not 64 bit ready
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-libobjc target-libbacktrace"
+    ;;
   sh*-*-pe|mips*-*-pe|*arm-wince-pe)
     noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
     ;;
@@ -1090,6 +1195,9 @@ case "${target}" in
   i[[3456789]]86-*-rdos*)
     noconfigdirs="$noconfigdirs gdb"
     ;;
+  kvx-*-*)
+    noconfigdirs="$noconfigdirs gdb gdbserver sim"
+    ;;
   mmix-*-*)
     noconfigdirs="$noconfigdirs gdb"
     ;;
@@ -1100,6 +1208,9 @@ case "${target}" in
     noconfigdirs="$noconfigdirs ld gas gdb gprof sim"
     noconfigdirs="$noconfigdirs $target_libraries"
     ;;
+  pdp11-*-*)
+    noconfigdirs="$noconfigdirs gdb gprof"
+    ;;
   powerpc-*-aix*)
     # copied from rs6000-*-* entry
     noconfigdirs="$noconfigdirs gprof"
@@ -1186,6 +1297,11 @@ case "${target}" in
   wasm32-*-*)
     noconfigdirs="$noconfigdirs ld"
     ;;
+  loongarch*-*-linux*)
+    ;;
+  loongarch*-*-*)
+    noconfigdirs="$noconfigdirs gprof"
+    ;;
 esac
 
 # If we aren't building newlib, then don't build libgloss, since libgloss
@@ -1212,16 +1328,13 @@ case "${host}" in
   alpha*-linux*)
     host_makefile_frag="config/mh-alpha-linux"
     ;;
-  hppa*-hp-hpux10*)
-    host_makefile_frag="config/mh-pa-hpux10"
-    ;;
   hppa*-hp-hpux*)
     host_makefile_frag="config/mh-pa"
     ;;
   hppa*-*)	
     host_makefile_frag="config/mh-pa"
     ;;
-  *-*-darwin*)
+  i?86-*-darwin[[89]]* | i?86-*-darwin1[[0-7]]* | powerpc*-*-darwin*)
     host_makefile_frag="config/mh-darwin"
     ;;
   powerpc-*-aix*)
@@ -1237,9 +1350,12 @@ if test "${build}" != "${host}" ; then
   AR_FOR_BUILD=${AR_FOR_BUILD-ar}
   AS_FOR_BUILD=${AS_FOR_BUILD-as}
   CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+  CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
   CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
+  DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
   GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
   GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
+  GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc}
   DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool}
   LD_FOR_BUILD=${LD_FOR_BUILD-ld}
   NM_FOR_BUILD=${NM_FOR_BUILD-nm}
@@ -1251,8 +1367,10 @@ else
   AS_FOR_BUILD="\$(AS)"
   CC_FOR_BUILD="\$(CC)"
   CXX_FOR_BUILD="\$(CXX)"
+  DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)"
   GFORTRAN_FOR_BUILD="\$(GFORTRAN)"
   GOC_FOR_BUILD="\$(GOC)"
+  GDC_FOR_BUILD="\$(GDC)"
   DLLTOOL_FOR_BUILD="\$(DLLTOOL)"
   LD_FOR_BUILD="\$(LD)"
   NM_FOR_BUILD="\$(NM)"
@@ -1261,7 +1379,7 @@ else
   WINDMC_FOR_BUILD="\$(WINDMC)"
 fi
 
-AC_PROG_CC
+AC_PROG_CC_C99
 AC_PROG_CXX
 
 # We must set the default linker to the linker used by gcc for the correct
@@ -1304,6 +1422,7 @@ int main() {}])],
 fi
 
 ACX_PROG_GNAT
+ACX_PROG_GDC
 ACX_PROG_CMP_IGNORE_INITIAL
 
 AC_ARG_ENABLE([bootstrap],
@@ -1349,17 +1468,98 @@ case "$have_compiler:$host:$target:$enab
     ;;
 esac
 
-# When bootstrapping with GCC, build stage 1 in C++98 mode to ensure that a
-# C++98 compiler can still start the bootstrap.
+# When bootstrapping with GCC, build stage 1 in C++11 mode to ensure that a
+# C++11 compiler can still start the bootstrap.  Otherwise, if building GCC,
+# require C++11 (or higher).
 if test "$enable_bootstrap:$GXX" = "yes:yes"; then
-  CXX="$CXX -std=gnu++98"
+  CXX="$CXX -std=c++11"
+elif test "$have_compiler" = yes; then
+  AX_CXX_COMPILE_STDCXX(11)
+
+  if test "${build}" != "${host}"; then
+    AX_CXX_COMPILE_STDCXX(11, [], [], [_FOR_BUILD])
+  fi
+fi
+
+AC_ARG_ENABLE([pgo-build],
+[AS_HELP_STRING([--enable-pgo-build[[=lto]]],
+		[enable the PGO build])],
+[enable_pgo_build=$enableval],
+[enable_pgo_build=no])
+
+# Issue errors and warnings for invalid/strange PGO build combinations.
+case "$have_compiler:$host:$target:$enable_pgo_build" in
+  *:*:*:no) ;;
+
+  # Allow the PGO build only if we aren't building a compiler and
+  # we are in a native configuration.
+  no:$build:$build:yes | no:$build:$build:lto) ;;
+
+  # Disallow the PGO bootstrap if we are building a compiler.
+  yes:*:*:yes | yes:*:*:lto)
+    AC_MSG_ERROR([cannot perform the PGO bootstrap when building a compiler]) ;;
+
+  *)
+    AC_MSG_ERROR([invalid option for --enable-pgo-build])
+    ;;
+esac
+
+if test "$enable_pgo_build" != "no"; then
+  AC_MSG_CHECKING([whether the compiler supports -fprofile-generate])
+  old_CFLAGS="$CFLAGS"
+  PGO_BUILD_GEN_CFLAGS="-fprofile-generate"
+  CFLAGS="$CFLAGS $PGO_BUILD_CFLAGS"
+  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int foo;])],,
+		    [PGO_BUILD_GEN_CFLAGS=])
+  CFLAGS="$old_CFLAGS"
+  if test -n "$PGO_BUILD_GEN_CFLAGS"; then
+    AC_MSG_RESULT([yes])
+    PGO_BUILD_USE_CFLAGS="-fprofile-use"
+  else
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([cannot perform the PGO build without -fprofile-generate])
+  fi
+
+  if test "$enable_pgo_build" = "lto"; then
+    AC_MSG_CHECKING([whether the compiler supports -flto=jobserver -ffat-lto-objects])
+    old_CFLAGS="$CFLAGS"
+    PGO_BUILD_LTO_CFLAGS="-flto=jobserver -ffat-lto-objects"
+    CFLAGS="$CFLAGS $PGO_BUILD_LTO_CFLAGS"
+    AC_COMPILE_IFELSE([AC_LANG_SOURCE([int foo;])],,
+		      [PGO_BUILD_LTO_CFLAGS=])
+    CFLAGS="$old_CFLAGS"
+    if test -n "$PGO_BUILD_LTO_CFLAGS"; then
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+      AC_MSG_WARN([LTO is disabled for the PGO build])
+    fi
+  fi
 fi
+AC_SUBST(PGO_BUILD_GEN_CFLAGS)
+AC_SUBST(PGO_BUILD_USE_CFLAGS)
+AC_SUBST(PGO_BUILD_LTO_CFLAGS)
 
 # Used for setting $lt_cv_objdir
 _LT_CHECK_OBJDIR
 
 # Check for GMP, MPFR and MPC
-gmplibs="-lmpc -lmpfr -lgmp"
+require_gmp=no
+require_mpc=no
+if test -d ${srcdir}/gcc ; then
+  require_gmp=yes
+  require_mpc=yes
+fi
+if test -d ${srcdir}/gdb ; then
+  if test "x$enable_gdb" != xno; then
+   require_gmp=yes
+  fi
+fi
+
+gmplibs="-lmpfr -lgmp"
+if test x"$require_mpc" = "xyes" ; then
+  gmplibs="-lmpc $gmplibs"
+fi
 gmpinc=
 have_gmp=no
 
@@ -1399,11 +1599,6 @@ fi
 
 # Specify a location for mpfr
 # check for this first so it ends up on the link line before gmp.
-AC_ARG_WITH(mpfr-dir,
-[AS_HELP_STRING([--with-mpfr-dir=PATH], [this option has been REMOVED])],
-[AC_MSG_ERROR([The --with-mpfr-dir=PATH option has been removed.
-Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH])])
-
 AC_ARG_WITH(mpfr,
 [AS_HELP_STRING([--with-mpfr=PATH],
 		[specify prefix directory for installed MPFR package.
@@ -1443,11 +1638,6 @@ Building GCC with MPFR in the source tre
 fi
 
 # Specify a location for gmp
-AC_ARG_WITH(gmp-dir,
-[AS_HELP_STRING([--with-gmp-dir=PATH], [this option has been REMOVED])],
-[AC_MSG_ERROR([The --with-gmp-dir=PATH option has been removed.
-Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH])])
-
 AC_ARG_WITH(gmp,
 [AS_HELP_STRING([--with-gmp=PATH],
 		[specify prefix directory for the installed GMP package.
@@ -1484,7 +1674,7 @@ if test "x$with_gmp$with_gmp_include$wit
   have_gmp=yes
 fi
 
-if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
+if test "x$require_gmp" = xyes && test "x$have_gmp" = xno; then
   have_gmp=yes
   saved_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $gmpinc"
@@ -1511,12 +1701,12 @@ if test -d ${srcdir}/gcc && test "x$have
     AC_MSG_CHECKING([for the correct version of mpfr.h])
     AC_TRY_COMPILE([#include <gmp.h>
     #include <mpfr.h>],[
-    #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,0)
+    #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,0)
     choke me
     #endif
     ], [AC_TRY_COMPILE([#include <gmp.h>
     #include <mpfr.h>],[
-    #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,2)
+    #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,6)
     choke me
     #endif
     ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
@@ -1524,7 +1714,7 @@ if test -d ${srcdir}/gcc && test "x$have
   fi
 
   # Check for the MPC header version.
-  if test x"$have_gmp" = xyes ; then
+  if test "x$require_mpc" = xyes && test x"$have_gmp" = xyes ; then
     # Check for the recommended and required versions of MPC.
     AC_MSG_CHECKING([for the correct version of mpc.h])
     AC_TRY_COMPILE([#include <mpc.h>],[
@@ -1543,19 +1733,29 @@ if test -d ${srcdir}/gcc && test "x$have
   if test x"$have_gmp" = xyes; then
     saved_LIBS="$LIBS"
     LIBS="$LIBS $gmplibs"
-    AC_MSG_CHECKING([for the correct version of the gmp/mpfr/mpc libraries])
-    AC_TRY_LINK([#include <mpc.h>],[
+    AC_MSG_CHECKING([for the correct version of the gmp/mpfr libraries])
+    AC_TRY_LINK([#include <mpfr.h>],[
     mpfr_t n;
     mpfr_t x;
-    mpc_t c;
     int t;
     mpfr_init (n);
     mpfr_init (x);
-    mpfr_atan2 (n, n, x, GMP_RNDN);
-    mpfr_erfc (n, x, GMP_RNDN);
-    mpfr_subnormalize (x, t, GMP_RNDN);
+    mpfr_atan2 (n, n, x, MPFR_RNDN);
+    mpfr_erfc (n, x, MPFR_RNDN);
+    mpfr_subnormalize (x, t, MPFR_RNDN);
     mpfr_clear(n);
     mpfr_clear(x);
+    ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); have_gmp=no])
+    LIBS="$saved_LIBS"
+  fi
+
+  # Now check the MPC library
+  if test "x$require_mpc" = xyes && test x"$have_gmp" = xyes; then
+    saved_LIBS="$LIBS"
+    LIBS="$LIBS $gmplibs"
+    AC_MSG_CHECKING([for the correct version of the mpc libraries])
+    AC_TRY_LINK([#include <mpc.h>],[
+    mpc_t c;
     mpc_init2 (c, 53);
     mpc_set_ui_ui (c, 1, 1, MPC_RNDNN);
     mpc_cosh (c, c, MPC_RNDNN);
@@ -1571,15 +1771,23 @@ if test -d ${srcdir}/gcc && test "x$have
 # The library versions listed in the error message below should match
 # the HARD-minimums enforced above.
   if test x$have_gmp != xyes; then
-    AC_MSG_ERROR([Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
+    if test -d ${srcdir}/gcc ; then
+      AC_MSG_ERROR([Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.
 Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
 their locations.  Source code for these libraries can be found at
 their respective hosting sites as well as at
-ftp://gcc.gnu.org/pub/gcc/infrastructure/.  See also
+https://gcc.gnu.org/pub/gcc/infrastructure/.  See also
 http://gcc.gnu.org/install/prerequisites.html for additional info.  If
 you obtained GMP, MPFR and/or MPC from a vendor distribution package,
 make sure that you have installed both the libraries and the header
 files.  They may be located in separate packages.])
+    else
+      AC_MSG_ERROR([Building GDB requires GMP 4.2+, and MPFR 3.1.0+.
+Try the --with-gmp and/or --with-mpfr options to specify
+their locations.  If you obtained GMP and/or MPFR from a vendor
+distribution package, make sure that you have installed both the libraries
+and the header files.  They may be located in separate packages.])
+    fi
   fi
 fi
 
@@ -1660,6 +1868,20 @@ AC_ARG_WITH(boot-ldflags,
  if test "$poststage1_libs" = ""; then
    poststage1_ldflags="-static-libstdc++ -static-libgcc"
  fi])
+case $target in
+  *-darwin2* | *-darwin1[[56789]]*)
+    # For these versions, we default to using embedded rpaths.
+    if test "x$enable_darwin_at_rpath" != "xno"; then
+      poststage1_ldflags="$poststage1_ldflags -nodefaultrpaths"
+    fi
+  ;;
+  *-darwin*)
+    # For these versions, we only use embedded rpaths on demand.
+    if test "x$enable_darwin_at_rpath" = "xyes"; then
+      poststage1_ldflags="$poststage1_ldflags -nodefaultrpaths"
+    fi
+  ;;
+esac
 AC_SUBST(poststage1_ldflags)
 
 # GCC GRAPHITE dependency isl.
@@ -1745,14 +1967,96 @@ AC_ARG_ENABLE(linker-plugin-flags,
   extra_linker_plugin_flags=)
 AC_SUBST(extra_linker_plugin_flags)
 
+# Handle --enable-host-pie
+# If host PIE executables are the default (or must be forced on) for some host,
+# we must pass that configuration to the gcc directory.
+gcc_host_pie=
+AC_ARG_ENABLE(host-pie,
+[AS_HELP_STRING([--enable-host-pie],
+		[build position independent host executables])],
+[host_pie=$enableval
+ case $host in
+   *-*-darwin2*)
+     if test x$host_pie != xyes ; then
+       # for Darwin20+ this is required.
+       AC_MSG_WARN([PIE executables are required for the configured host, host-pie setting ignored.])
+       host_pie=yes
+       gcc_host_pie=--enable-host-pie
+     fi ;;
+  *) ;;
+ esac],
+[case $host in
+  *-*-darwin2*)
+    # Default to PIE (mandatory for aarch64).
+    host_pie=yes
+    gcc_host_pie=--enable-host-pie
+    ;;
+  *) host_pie=no ;;
+ esac])
+
+AC_SUBST(host_pie)
+AC_SUBST(gcc_host_pie)
+
 # Enable --enable-host-shared.
 # Checked early to determine whether jit is an 'all' language
 AC_ARG_ENABLE(host-shared,
 [AS_HELP_STRING([--enable-host-shared],
 		[build host code as shared libraries])],
-[host_shared=$enableval], [host_shared=no])
+[host_shared=$enableval
+ case $host in
+   x86_64-*-darwin* | aarch64-*-darwin*)
+     if test x$host_shared != xyes ; then
+       # PIC is the default, and actually cannot be switched off.
+       AC_MSG_WARN([PIC code is required for the configured host; host-shared setting ignored.])
+       host_shared=yes
+     fi ;;
+   *-*-darwin*)
+     if test x$host_pie = xyes -a x$host_shared != xyes ; then
+       AC_MSG_WARN([PIC code is required for PIE host executables host-shared setting ignored.])
+       host_shared=yes
+     fi ;;
+  *) ;;
+ esac],
+[case $host in
+  # 64B x86_64 and Aarch64 Darwin default to PIC.
+  x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
+  # 32B and powerpc64 Darwin must use PIC to link PIE exes.
+  *-*-darwin*) host_shared=$host_pie ;;
+  *) host_shared=no;;
+ esac])
+
 AC_SUBST(host_shared)
 
+if test x$host_shared = xyes; then
+  case $host in
+    *-*-darwin*)
+      # Since host shared is the default for 64b Darwin, and also enabled for
+      # host_pie, ensure that we present the PIE flag when host_pie is active.
+      if test x$host_pie = xyes; then
+        PICFLAG=-fPIE
+      fi
+      ;;
+    *)
+      PICFLAG=-fPIC
+      ;;
+  esac
+elif test x$host_pie = xyes; then
+  PICFLAG=-fPIE
+else
+  PICFLAG=
+fi
+
+AC_SUBST(PICFLAG)
+
+# If we are building PIC/PIE host executables, and we are building dependent
+# libs (e.g. GMP) in-tree those libs need to be configured to generate PIC
+# code.
+host_libs_picflag=
+if test "$host_shared" = "yes" -o "$host_pie" = "yes"; then
+host_libs_picflag='--with-pic'
+fi
+AC_SUBST(host_libs_picflag)
+
 # By default, C and C++ are the only stage 1 languages.
 stage1_languages=,c,
 
@@ -1965,10 +2269,31 @@ if test -d ${srcdir}/gcc; then
             ;;
         esac
 
+        # Disable D if no preexisting GDC is available.
+        case ${add_this_lang}:${language}:${have_gdc} in
+          yes:d:no)
+            # Specifically requested language; tell them.
+            AC_MSG_ERROR([GDC is required to build $language])
+           ;;
+          all:d:no)
+            AC_MSG_WARN([GDC is required to build $language])
+            add_this_lang=unsupported
+            ;;
+          *:d:no)
+            # Silently disable.
+            add_this_lang=unsupported
+            ;;
+        esac
+
         # Disable jit if -enable-host-shared not specified
-        case ${add_this_lang}:${language}:${host_shared} in
-          yes:jit:no)
-	    # PR jit/64780: explicitly specify --enable-host-shared
+        # but not if building for Mingw. All code in Windows
+        # is position independent code (PIC).
+        case $target in
+          *mingw*) ;;
+          *)
+          case ${add_this_lang}:${language}:${host_shared} in
+            yes:jit:no)
+	           # PR jit/64780: explicitly specify --enable-host-shared
 	    AC_MSG_ERROR([
 Enabling language "jit" requires --enable-host-shared.
 
@@ -1979,16 +2304,18 @@ If you want to build both the jit and th
 best to do this via two separate configure/builds, in separate
 directories, to avoid imposing the performance cost of
 --enable-host-shared on the regular compiler.])
-	    ;;
-          all:jit:no)
-	    AC_MSG_WARN([--enable-host-shared required to build $language])
-            add_this_lang=unsupported
-            ;;
-          *:jit:no)
-            # Silently disable.
-            add_this_lang=unsupported
-            ;;
-	esac
+	            ;;
+            all:jit:no)
+	      AC_MSG_WARN([--enable-host-shared required to build $language])
+              add_this_lang=unsupported
+              ;;
+            *:jit:no)
+              # Silently disable.
+              add_this_lang=unsupported
+              ;;
+	        esac
+          ;;
+        esac
 
         # Disable a language that is unsupported by the target.
 	case "${add_this_lang}: $unsupported_languages " in
@@ -2025,7 +2352,7 @@ directories, to avoid imposing the perfo
 		  *) stage1_languages="${stage1_languages}${language}," ;;
 		esac
 		# We need to bootstrap any supporting libraries.
-		bootstrap_target_libs="${bootstrap_target_libs}${target_libs},"
+		bootstrap_target_libs=`echo "${bootstrap_target_libs}${target_libs}," | sed "s/ /,/g"`
 		;;
 	    esac
 	    ;;
@@ -2141,7 +2468,7 @@ case ,${enable_languages},:${enable_objc
   fi
 esac
 
-# Disable libitm, libsanitizer, libvtv, liboffloadmic if we're not building C++
+# Disable libitm, libsanitizer, libvtv if we're not building C++
 case ,${enable_languages}, in
   *,c++,*)
     # Disable libitm, libsanitizer if we're not building libstdc++
@@ -2153,10 +2480,31 @@ case ,${enable_languages}, in
     esac
     ;;
   *)
-    noconfigdirs="$noconfigdirs target-liboffloadmic target-libitm target-libsanitizer target-libvtv"
+    noconfigdirs="$noconfigdirs target-libitm target-libsanitizer target-libvtv"
+    ;;
+esac
+
+case ,${enable_languages}, in
+  *,rust,*)
+    case " ${noconfigdirs} " in
+      *\ target-libstdc++-v3\ *)
+        # Disable target libgrust if we're not building target libstdc++.
+        noconfigdirs="$noconfigdirs target-libgrust"
+        ;;
+    esac
     ;;
 esac
 
+# If gcc/ is not in the source tree then we'll not be building a
+# target compiler, assume in that case we don't want to build any
+# target libraries or tools.
+#
+# This was added primarily for the benefit for binutils-gdb who reuse
+# this configure script, but don't always have target tools available.
+if test ! -d ${srcdir}/gcc; then
+   skipdirs="${skipdirs} ${target_configdirs}"
+fi
+
 # Remove the entries in $skipdirs and $noconfigdirs from $configdirs,
 # $build_configdirs and $target_configdirs.
 # If we have the source for $noconfigdirs entries, add them to $notsupp.
@@ -2242,13 +2590,18 @@ fi
 
 # Sometimes we have special requirements for the host libiberty.
 extra_host_libiberty_configure_flags=
-extra_host_zlib_configure_flags=
 case " $configdirs " in
-  *" lto-plugin "* | *" libcc1 "*)
+  *" lto-plugin "* | *" libcc1 "* | *" gdbserver "*)
     # When these are to be built as shared libraries, the same applies to
     # libiberty.
     extra_host_libiberty_configure_flags=--enable-shared
     ;;
+esac
+AC_SUBST(extra_host_libiberty_configure_flags)
+
+# Sometimes we have special requirements for the host zlib.
+extra_host_zlib_configure_flags=
+case " $configdirs " in
   *" bfd "*)
     # When bfd is to be built as a shared library, the same applies to
     # zlib.
@@ -2257,7 +2610,6 @@ case " $configdirs " in
     fi
     ;;
 esac
-AC_SUBST(extra_host_libiberty_configure_flags)
 AC_SUBST(extra_host_zlib_configure_flags)
 
 # Produce a warning message for the subdirs we can't configure.
@@ -2496,6 +2848,12 @@ case "${target}" in
   spu-*-*)
     target_makefile_frag="config/mt-spu"
     ;;
+  loongarch*-*linux* | loongarch*-*gnu*)
+    target_makefile_frag="config/mt-loongarch-gnu"
+    ;;
+  loongarch*-*elf*)
+    target_makefile_frag="config/mt-loongarch-elf"
+    ;;
   mips*-sde-elf* | mips*-mti-elf* | mips*-img-elf*)
     target_makefile_frag="config/mt-sde"
     ;;
@@ -2685,7 +3043,7 @@ fi
 # or bootstrap-ubsan, bootstrap it.
 if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then
   case "$BUILD_CONFIG" in
-    *bootstrap-asan* | *bootstrap-ubsan* )
+    *bootstrap-hwasan* | *bootstrap-asan* | *bootstrap-ubsan* )
       bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
       bootstrap_fixincludes=yes
       ;;
@@ -2698,6 +3056,16 @@ if echo " ${target_configdirs} " | grep
   bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
 fi
 
+# If we are building libatomic and the list of enabled languages includes the
+# D frontend, bootstrap it.
+if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1; then
+  case ,${enable_languages}, in
+    *,d,*)
+      bootstrap_target_libs=${bootstrap_target_libs}target-libatomic,
+      ;;
+  esac
+fi
+
 # Determine whether gdb needs tk/tcl or not.
 # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
 # and in that case we want gdb to be built without tk.  Ugh!
@@ -2726,13 +3094,20 @@ esac
 CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g`
 INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g`
 
-# gdb depends on gnulib, but as nothing else does, only include it if
-# gdb is built.
-if echo " ${configdirs} " | grep " gdb " > /dev/null 2>&1 ; then
-  # The Makefile provides the ordering, so it's enough here to add
-  # gnulib to the list.
-  configdirs="${configdirs} gnulib"
-fi
+# gdb and gdbserver depend on gnulib and gdbsupport, but as nothing
+# else does, only include them if one of these is built.  The Makefile
+# provides the ordering, so it's enough here to add to the list.
+case " ${configdirs} " in
+  *\ gdb\ *)
+    configdirs="${configdirs} gnulib gdbsupport"
+    ;;
+  *\ gdbserver\ *)
+    configdirs="${configdirs} gnulib gdbsupport"
+    ;;
+  *\ sim\ *)
+    configdirs="${configdirs} gnulib"
+    ;;
+esac
 
 # Strip out unwanted targets.
 
@@ -2823,6 +3198,12 @@ extrasub_target="$extrasub_target
 /^@unless /d
 /^@endunless /d"
 
+if test "$enable_pgo_build" != "no"; then
+  extrasub_build="$extrasub_build
+/^@if pgo-build\$/d
+/^@endif pgo-build\$/d"
+fi
+
 # Create the serialization dependencies.  This uses a temporary file.
 
 AC_ARG_ENABLE([serial-configure],
@@ -2842,7 +3223,9 @@ esac
 # These force 'configure's to be done one at a time, to avoid problems
 # with contention over a shared config.cache.
 rm -f serdep.tmp
+if test "x${enable_serial_build_configure}" = xyes || test "x${enable_serial_host_configure}" = xyes || test "x${enable_serial_target_configure}" = xyes; then
 echo '# serdep.tmp' > serdep.tmp
+fi
 olditem=
 test "x${enable_serial_build_configure}" = xyes &&
 for item in ${build_configdirs} ; do
@@ -2880,7 +3263,8 @@ AC_SUBST_FILE(serialization_dependencies
 # files altogether, and which should be passed on to subconfigures.
 # Also strip program-prefix, program-suffix, and program-transform-name,
 # so that we can pass down a consistent program-transform-name.
-baseargs=
+hbaseargs=
+bbaseargs=
 tbaseargs=
 keep_next=no
 skip_next=no
@@ -2896,7 +3280,8 @@ do
       *\'*)
 	ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
-    baseargs="$baseargs '$ac_arg'"
+    hbaseargs="$hbaseargs '$ac_arg'"
+    bbaseargs="$bbaseargs '$ac_arg'"
     tbaseargs="$tbaseargs '$ac_arg'"
     keep_next=no
     continue
@@ -2920,6 +3305,7 @@ do
   esac
 
   skip_targ=no
+  skip_barg=no
   case $ac_arg in
 changequote(,)
   --with-* | --without-*)
@@ -2932,6 +3318,12 @@ changequote(,)
     *[-_]lib)
       lib=`echo "$libopt" | sed 's,[-_]lib$,,'`
       ;;
+    *[-_]prefix)
+      lib=`echo "$libopt" | sed 's,[-_]prefix$,,'`
+      ;;
+    *[-_]type)
+      lib=`echo "$libopt" | sed 's,[-_]type$,,'`
+      ;;
     *)
       lib=$libopt
       ;;
@@ -2948,6 +3340,11 @@ changequote([,])
         skip_targ=yes
       fi
       ;;
+    libintl | libiconv)
+      # We don't want libintl (and co.) in anything but the host arguments.
+      skip_targ=yes
+      skip_barg=yes
+      ;;
     esac
     ;;
   esac
@@ -2956,7 +3353,8 @@ changequote([,])
     --cache-file=/dev/null | \
     -cache-file=/dev/null )
       # Handled here to avoid the test to skip args below.
-      baseargs="$baseargs '$ac_arg'"
+      hbaseargs="$hbaseargs '$ac_arg'"
+      bbaseargs="$bbaseargs '$ac_arg'"
       tbaseargs="$tbaseargs '$ac_arg'"
       # Assert: $separate_arg should always be no.
       keep_next=$separate_arg
@@ -2987,7 +3385,10 @@ changequote([,])
 	*\'*)
 	  ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
       esac
-      baseargs="$baseargs '$ac_arg'"
+      hbaseargs="$hbaseargs '$ac_arg'"
+      if test X"$skip_barg" = Xno; then
+	bbaseargs="$bbaseargs '$ac_arg'"
+      fi
       if test X"$skip_targ" = Xno; then
         tbaseargs="$tbaseargs '$ac_arg'"
       fi
@@ -3002,7 +3403,8 @@ changequote([,])
 done
 # Remove the initial space we just introduced and, as these will be
 # expanded by make, quote '$'.
-baseargs=`echo "x$baseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
+hbaseargs=`echo "x$hbaseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
+bbaseargs=`echo "x$bbaseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
 
 # Add in --program-transform-name, after --program-prefix and
 # --program-suffix have been applied to it.  Autoconf has already
@@ -3016,15 +3418,24 @@ sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g
 EOF_SED
 gcc_transform_name=`cat conftestsed.out`
 rm -f conftestsed.out
-baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"
+hbaseargs="$hbaseargs --program-transform-name='${gcc_transform_name}'"
+bbaseargs="$bbaseargs --program-transform-name='${gcc_transform_name}'"
 tbaseargs="$tbaseargs --program-transform-name='${gcc_transform_name}'"
 if test "$silent" = yes; then
-  baseargs="$baseargs --silent"
+  bbaseargs="$bbaseargs --silent"
+  hbaseargs="$hbaseargs --silent"
   tbaseargs="$tbaseargs --silent"
 fi
-baseargs="$baseargs --disable-option-checking"
+
+bbaseargs="$bbaseargs --disable-option-checking"
+hbaseargs="$hbaseargs --disable-option-checking"
 tbaseargs="$tbaseargs --disable-option-checking"
 
+if test "$enable_year2038" = no; then
+  baseargs="$baseargs --disable-year2038"
+  tbaseargs="$tbaseargs --disable-year2038"
+fi
+
 # Record and document user additions to sub configure arguments.
 AC_ARG_VAR([build_configargs],
 	   [additional configure arguments for build directories])
@@ -3038,7 +3449,7 @@ AC_ARG_VAR([target_configargs],
 # desired.  We can't even use the same cache file for all build-side
 # libraries, as they're compiled differently; some with C, some with
 # C++ or with different feature-enabling options.
-build_configargs="$build_configargs --cache-file=./config.cache ${baseargs}"
+build_configargs="$build_configargs --cache-file=./config.cache ${bbaseargs}"
 
 # For host modules, accept cache file option, or specification as blank.
 case "${cache_file}" in
@@ -3052,7 +3463,7 @@ esac
 
 # Host dirs don't like to share a cache file either, horribly enough.
 # This seems to be due to autoconf 2.5x stupidity.
-host_configargs="$host_configargs --cache-file=./config.cache ${extra_host_args} ${baseargs}"
+host_configargs="$host_configargs --cache-file=./config.cache ${extra_host_args} ${hbaseargs}"
 
 target_configargs="$target_configargs ${tbaseargs}"
 
@@ -3191,6 +3602,7 @@ esac
 # our build compiler if desired.
 if test x"${build}" = x"${host}" ; then
   CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
+  CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
   CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
   LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
 fi
@@ -3215,6 +3627,17 @@ case "${target}" in
   mep*)
     FLAGS_FOR_TARGET="$FLAGS_FOR_TARGET -mlibrary"
     ;;
+  # The VxWorks support for shared libraries is getting in
+  # incrementally.  Make sure it doesn't get activated implicitly:
+  *vxworks*)
+    if test "${enable_shared-unset}" = unset ; then
+      enable_shared=no
+      # So the build of libraries knows ...
+      target_configargs="${target_configargs} --disable-shared"
+      # So gcc knows ...
+      host_configargs="${host_configargs} --disable-shared"
+    fi
+    ;;
 esac
 
 # Makefile fragments.
@@ -3257,11 +3680,15 @@ AC_SUBST(AR_FOR_BUILD)
 AC_SUBST(AS_FOR_BUILD)
 AC_SUBST(CC_FOR_BUILD)
 AC_SUBST(CFLAGS_FOR_BUILD)
+AC_SUBST(CPP_FOR_BUILD)
+AC_SUBST(CPPFLAGS_FOR_BUILD)
 AC_SUBST(CXXFLAGS_FOR_BUILD)
 AC_SUBST(CXX_FOR_BUILD)
 AC_SUBST(DLLTOOL_FOR_BUILD)
+AC_SUBST(DSYMUTIL_FOR_BUILD)
 AC_SUBST(GFORTRAN_FOR_BUILD)
 AC_SUBST(GOC_FOR_BUILD)
+AC_SUBST(GDC_FOR_BUILD)
 AC_SUBST(LDFLAGS_FOR_BUILD)
 AC_SUBST(LD_FOR_BUILD)
 AC_SUBST(NM_FOR_BUILD)
@@ -3338,6 +3765,7 @@ esac
 NCN_STRICT_CHECK_TOOLS(AR, ar)
 NCN_STRICT_CHECK_TOOLS(AS, as)
 NCN_STRICT_CHECK_TOOLS(DLLTOOL, dlltool)
+NCN_STRICT_CHECK_TOOLS(DSYMUTIL, dsymutil)
 NCN_STRICT_CHECK_TOOLS(LD, ld)
 NCN_STRICT_CHECK_TOOLS(LIPO, lipo)
 NCN_STRICT_CHECK_TOOLS(NM, nm)
@@ -3347,11 +3775,30 @@ NCN_STRICT_CHECK_TOOLS(WINDRES, windres)
 NCN_STRICT_CHECK_TOOLS(WINDMC, windmc)
 NCN_STRICT_CHECK_TOOLS(OBJCOPY, objcopy)
 NCN_STRICT_CHECK_TOOLS(OBJDUMP, objdump)
+NCN_STRICT_CHECK_TOOLS(OTOOL, otool)
 NCN_STRICT_CHECK_TOOLS(READELF, readelf)
 AC_SUBST(CC)
 AC_SUBST(CXX)
 AC_SUBST(CFLAGS)
 AC_SUBST(CXXFLAGS)
+AC_SUBST(GDC)
+AC_SUBST(GDCFLAGS)
+GDCFLAGS=${GDCFLAGS-${CFLAGS}}
+AC_SUBST(PKG_CONFIG_PATH)
+
+GCC_PLUGIN_OPTION(PLUGIN_OPTION)
+AR_PLUGIN_OPTION=
+RANLIB_PLUGIN_OPTION=
+if test -n "$PLUGIN_OPTION"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    AR_PLUGIN_OPTION="$PLUGIN_OPTION"
+  fi
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION"
+  fi
+fi
+AC_SUBST(AR_PLUGIN_OPTION)
+AC_SUBST(RANLIB_PLUGIN_OPTION)
 
 # Target tools.
 AC_ARG_WITH([build-time-tools], 
@@ -3371,15 +3818,19 @@ NCN_STRICT_CHECK_TARGET_TOOLS(CXX_FOR_TA
 NCN_STRICT_CHECK_TARGET_TOOLS(GCC_FOR_TARGET, gcc, ${CC_FOR_TARGET})
 NCN_STRICT_CHECK_TARGET_TOOLS(GFORTRAN_FOR_TARGET, gfortran)
 NCN_STRICT_CHECK_TARGET_TOOLS(GOC_FOR_TARGET, gccgo)
+NCN_STRICT_CHECK_TARGET_TOOLS(GDC_FOR_TARGET, gdc)
+NCN_STRICT_CHECK_TARGET_TOOLS(GM2_FOR_TARGET, gm2)
 
 ACX_CHECK_INSTALLED_TARGET_TOOL(AR_FOR_TARGET, ar)
 ACX_CHECK_INSTALLED_TARGET_TOOL(AS_FOR_TARGET, as)
 ACX_CHECK_INSTALLED_TARGET_TOOL(DLLTOOL_FOR_TARGET, dlltool)
+ACX_CHECK_INSTALLED_TARGET_TOOL(DSYMUTIL_FOR_TARGET, dsymutil)
 ACX_CHECK_INSTALLED_TARGET_TOOL(LD_FOR_TARGET, ld)
 ACX_CHECK_INSTALLED_TARGET_TOOL(LIPO_FOR_TARGET, lipo)
 ACX_CHECK_INSTALLED_TARGET_TOOL(NM_FOR_TARGET, nm)
 ACX_CHECK_INSTALLED_TARGET_TOOL(OBJCOPY_FOR_TARGET, objcopy)
 ACX_CHECK_INSTALLED_TARGET_TOOL(OBJDUMP_FOR_TARGET, objdump)
+ACX_CHECK_INSTALLED_TARGET_TOOL(OTOOL_FOR_TARGET, otool)
 ACX_CHECK_INSTALLED_TARGET_TOOL(RANLIB_FOR_TARGET, ranlib)
 ACX_CHECK_INSTALLED_TARGET_TOOL(READELF_FOR_TARGET, readelf)
 ACX_CHECK_INSTALLED_TARGET_TOOL(STRIP_FOR_TARGET, strip)
@@ -3399,16 +3850,22 @@ GCC_TARGET_TOOL(c++ for libstdc++, RAW_C
 		[gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs],
 		c++)
 GCC_TARGET_TOOL(dlltool, DLLTOOL_FOR_TARGET, DLLTOOL, [binutils/dlltool])
+GCC_TARGET_TOOL(dsymutil, DSYMUTIL_FOR_TARGET, DSYMUTIL)
 GCC_TARGET_TOOL(gcc, GCC_FOR_TARGET, , [gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/])
 GCC_TARGET_TOOL(gfortran, GFORTRAN_FOR_TARGET, GFORTRAN,
 		[gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/], fortran)
 GCC_TARGET_TOOL(gccgo, GOC_FOR_TARGET, GOC,
 		[gcc/gccgo -B$$r/$(HOST_SUBDIR)/gcc/], go)
+GCC_TARGET_TOOL(gdc, GDC_FOR_TARGET, GDC,
+		[gcc/gdc -B$$r/$(HOST_SUBDIR)/gcc/], d)
+GCC_TARGET_TOOL(gm2, GM2_FOR_TARGET, GM2,
+		[gcc/gm2 -B$$r/$(HOST_SUBDIR)/gcc/], m2)
 GCC_TARGET_TOOL(ld, LD_FOR_TARGET, LD, [ld/ld-new])
 GCC_TARGET_TOOL(lipo, LIPO_FOR_TARGET, LIPO)
 GCC_TARGET_TOOL(nm, NM_FOR_TARGET, NM, [binutils/nm-new])
 GCC_TARGET_TOOL(objcopy, OBJCOPY_FOR_TARGET, OBJCOPY, [binutils/objcopy])
 GCC_TARGET_TOOL(objdump, OBJDUMP_FOR_TARGET, OBJDUMP, [binutils/objdump])
+GCC_TARGET_TOOL(otool, OTOOL_FOR_TARGET, OTOOL)
 GCC_TARGET_TOOL(ranlib, RANLIB_FOR_TARGET, RANLIB, [binutils/ranlib])
 GCC_TARGET_TOOL(readelf, READELF_FOR_TARGET, READELF, [binutils/readelf])
 GCC_TARGET_TOOL(strip, STRIP_FOR_TARGET, STRIP, [binutils/strip-new])
@@ -3529,10 +3986,12 @@ AC_SUBST(stage2_werror_flag)
 # Specify what files to not compare during bootstrap.
 
 compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*"
+compare_exclusions="$compare_exclusions | gcc/m2/gm2-compiler-boot/M2Version*"
+compare_exclusions="$compare_exclusions | gcc/m2/gm2-compiler-boot/SYSTEM*"
+compare_exclusions="$compare_exclusions | gcc/m2/gm2version*"
 case "$target" in
   hppa*64*-*-hpux*) ;;
-  hppa*-*-hpux*) compare_exclusions="gcc/cc*-checksum\$(objext) | */libgcc/lib2funcs* | gcc/ada/*tools/* | gcc/function-tests.o" ;;
-  powerpc*-ibm-aix*) compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/* | *libgomp*\$(objext)" ;;
+  powerpc*-ibm-aix*) compare_exclusions="$compare_exclusions | *libgomp*\$(objext)" ;;
 esac
 AC_SUBST(compare_exclusions)
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/contrib/ChangeLog ./contrib/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/contrib/ChangeLog	2019-12-11 01:49:17.000000000 +0000
+++ ./contrib/ChangeLog	2024-02-01 01:47:14.000000000 +0000
@@ -1,3 +1,12 @@
+2020-09-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* mklog.py: New file, imported from gcc.
+
+2020-05-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dg-extract-results.py: Update from gcc repo.
+	* dg-extract-results.sh: Likewise.
+
 2019-10-21  Andrew Burgess  <andrew.burgess@embecosm.com>
 
 	* dg-extract-results.py: Update from gcc repo.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/contrib/dg-extract-results.py ./contrib/dg-extract-results.py
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/contrib/dg-extract-results.py	2019-12-11 01:49:17.000000000 +0000
+++ ./contrib/dg-extract-results.py	2024-02-01 01:47:14.000000000 +0000
@@ -117,7 +117,7 @@ class Prog:
         self.tool_re = re.compile (r'^\t\t=== (.*) tests ===$')
         self.result_re = re.compile (r'^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED'
                                      r'|WARNING|ERROR|UNSUPPORTED|UNTESTED'
-                                     r'|KFAIL|KPASS):\s*(.+)')
+                                     r'|KFAIL|KPASS|PATH|DUPLICATE):\s*(.+)')
         self.completed_re = re.compile (r'.* completed at (.*)')
         # Pieces of text to write at the head of the output.
         # start_line is a pair in which the first element is a datetime
@@ -143,7 +143,9 @@ class Prog:
             '# of known failures\t\t',
             '# of untested testcases\t\t',
             '# of unresolved testcases\t',
-            '# of unsupported tests\t\t'
+            '# of unsupported tests\t\t',
+            '# of paths in test names\t',
+            '# of duplicate test names\t'
         ]
         self.runs = dict()
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/contrib/dg-extract-results.sh ./contrib/dg-extract-results.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/contrib/dg-extract-results.sh	2019-12-11 01:49:17.000000000 +0000
+++ ./contrib/dg-extract-results.sh	2024-02-01 01:47:14.000000000 +0000
@@ -326,7 +326,7 @@ BEGIN {
   }
 }
 /^\t\t=== .* ===$/ { curvar = ""; next }
-/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS):/ {
+/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS|PATH|DUPLICATE):/ {
   testname=\$2
   # Ugly hack for gfortran.dg/dg.exp
   if ("$TOOL" == "gfortran" && testname ~ /^gfortran.dg\/g77\//)
@@ -400,6 +400,7 @@ BEGIN {
   variant="$VAR"
   tool="$TOOL"
   passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kpasscnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0;
+  pathcnt=0; dupcnt=0
   curvar=""; insummary=0
 }
 /^Running target /		{ curvar = \$3; next }
@@ -414,6 +415,8 @@ BEGIN {
 /^# of untested testcases/	{ if (insummary == 1) untstcnt += \$5; next; }
 /^# of unresolved testcases/	{ if (insummary == 1) unrescnt += \$5; next; }
 /^# of unsupported tests/	{ if (insummary == 1) unsupcnt += \$5; next; }
+/^# of paths in test names/	{ if (insummary == 1) pathcnt += \$7; next; }
+/^# of duplicate test names/	{ if (insummary == 1) dupcnt += \$6; next; }
 /^$/				{ if (insummary == 1)
 				    { insummary = 0; curvar = "" }
 				  next
@@ -431,6 +434,8 @@ END {
   if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
   if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
   if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
+  if (pathcnt != 0) printf ("# of paths in test names\t%d\n", pathcnt)
+  if (dupcnt != 0) printf ("# of duplicate test names\t%d\n", dupcnt)
 }
 EOF
 
@@ -452,6 +457,7 @@ cat << EOF > $TOTAL_AWK
 BEGIN {
   tool="$TOOL"
   passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0
+  pathcnt=0; dupcnt=0
 }
 /^# of DejaGnu errors/		{ dgerrorcnt += \$5 }
 /^# of expected passes/		{ passcnt += \$5 }
@@ -463,6 +469,8 @@ BEGIN {
 /^# of untested testcases/	{ untstcnt += \$5 }
 /^# of unresolved testcases/	{ unrescnt += \$5 }
 /^# of unsupported tests/	{ unsupcnt += \$5 }
+/^# of paths in test names/	{ pathcnt += \$7 }
+/^# of duplicate test names/	{ dupcnt += \$6 }
 END {
   printf ("\n\t\t=== %s Summary ===\n\n", tool)
   if (dgerrorcnt != 0) printf ("# of DejaGnu errors\t\t%d\n", dgerrorcnt)
@@ -475,6 +483,8 @@ END {
   if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
   if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
   if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
+  if (pathcnt != 0) printf ("# of paths in test names\t%d\n", pathcnt)
+  if (dupcnt != 0) printf ("# of duplicate test names\t%d\n", dupcnt)
 }
 EOF
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/contrib/mklog.py ./contrib/mklog.py
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/contrib/mklog.py	1970-01-01 00:00:00.000000000 +0000
+++ ./contrib/mklog.py	2024-02-01 01:47:14.000000000 +0000
@@ -0,0 +1,261 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2020 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+# This script parses a .diff file generated with 'diff -up' or 'diff -cp'
+# and adds a skeleton ChangeLog file to the file. It does not try to be
+# too smart when parsing function names, but it produces a reasonable
+# approximation.
+#
+# Author: Martin Liska <mliska@suse.cz>
+
+import argparse
+import os
+import re
+import sys
+from itertools import takewhile
+
+import requests
+
+from unidiff import PatchSet
+
+pr_regex = re.compile(r'(\/(\/|\*)|[Cc*!])\s+(?P<pr>PR [a-z+-]+\/[0-9]+)')
+dr_regex = re.compile(r'(\/(\/|\*)|[Cc*!])\s+(?P<dr>DR [0-9]+)')
+identifier_regex = re.compile(r'^([a-zA-Z0-9_#].*)')
+comment_regex = re.compile(r'^\/\*')
+struct_regex = re.compile(r'^(class|struct|union|enum)\s+'
+                          r'(GTY\(.*\)\s+)?([a-zA-Z0-9_]+)')
+macro_regex = re.compile(r'#\s*(define|undef)\s+([a-zA-Z0-9_]+)')
+super_macro_regex = re.compile(r'^DEF[A-Z0-9_]+\s*\(([a-zA-Z0-9_]+)')
+fn_regex = re.compile(r'([a-zA-Z_][^()\s]*)\s*\([^*]')
+template_and_param_regex = re.compile(r'<[^<>]*>')
+bugzilla_url = 'https://gcc.gnu.org/bugzilla/rest.cgi/bug?id=%s&' \
+               'include_fields=summary'
+
+function_extensions = set(['.c', '.cpp', '.C', '.cc', '.h', '.inc', '.def'])
+
+help_message = """\
+Generate ChangeLog template for PATCH.
+PATCH must be generated using diff(1)'s -up or -cp options
+(or their equivalent in git).
+"""
+
+script_folder = os.path.realpath(__file__)
+gcc_root = os.path.dirname(os.path.dirname(script_folder))
+
+
+def find_changelog(path):
+    folder = os.path.split(path)[0]
+    while True:
+        if os.path.exists(os.path.join(gcc_root, folder, 'ChangeLog')):
+            return folder
+        folder = os.path.dirname(folder)
+        if folder == '':
+            return folder
+    raise AssertionError()
+
+
+def extract_function_name(line):
+    if comment_regex.match(line):
+        return None
+    m = struct_regex.search(line)
+    if m:
+        # Struct declaration
+        return m.group(1) + ' ' + m.group(3)
+    m = macro_regex.search(line)
+    if m:
+        # Macro definition
+        return m.group(2)
+    m = super_macro_regex.search(line)
+    if m:
+        # Supermacro
+        return m.group(1)
+    m = fn_regex.search(line)
+    if m:
+        # Discard template and function parameters.
+        fn = m.group(1)
+        fn = re.sub(template_and_param_regex, '', fn)
+        return fn.rstrip()
+    return None
+
+
+def try_add_function(functions, line):
+    fn = extract_function_name(line)
+    if fn and fn not in functions:
+        functions.append(fn)
+    return bool(fn)
+
+
+def sort_changelog_files(changed_file):
+    return (changed_file.is_added_file, changed_file.is_removed_file)
+
+
+def get_pr_titles(prs):
+    output = ''
+    for pr in prs:
+        id = pr.split('/')[-1]
+        r = requests.get(bugzilla_url % id)
+        bugs = r.json()['bugs']
+        if len(bugs) == 1:
+            output += '%s - %s\n' % (pr, bugs[0]['summary'])
+            print(output)
+    if output:
+        output += '\n'
+    return output
+
+
+def generate_changelog(data, no_functions=False, fill_pr_titles=False):
+    changelogs = {}
+    changelog_list = []
+    prs = []
+    out = ''
+    diff = PatchSet(data)
+
+    for file in diff:
+        changelog = find_changelog(file.path)
+        if changelog not in changelogs:
+            changelogs[changelog] = []
+            changelog_list.append(changelog)
+        changelogs[changelog].append(file)
+
+        # Extract PR entries from newly added tests
+        if 'testsuite' in file.path and file.is_added_file:
+            for line in list(file)[0]:
+                m = pr_regex.search(line.value)
+                if m:
+                    pr = m.group('pr')
+                    if pr not in prs:
+                        prs.append(pr)
+                else:
+                    m = dr_regex.search(line.value)
+                    if m:
+                        dr = m.group('dr')
+                        if dr not in prs:
+                            prs.append(dr)
+                    else:
+                        break
+
+    if fill_pr_titles:
+        out += get_pr_titles(prs)
+
+    # sort ChangeLog so that 'testsuite' is at the end
+    for changelog in sorted(changelog_list, key=lambda x: 'testsuite' in x):
+        files = changelogs[changelog]
+        out += '%s:\n' % os.path.join(changelog, 'ChangeLog')
+        out += '\n'
+        for pr in prs:
+            out += '\t%s\n' % pr
+        # new and deleted files should be at the end
+        for file in sorted(files, key=sort_changelog_files):
+            assert file.path.startswith(changelog)
+            in_tests = 'testsuite' in changelog or 'testsuite' in file.path
+            relative_path = file.path[len(changelog):].lstrip('/')
+            functions = []
+            if file.is_added_file:
+                msg = 'New test' if in_tests else 'New file'
+                out += '\t* %s: %s.\n' % (relative_path, msg)
+            elif file.is_removed_file:
+                out += '\t* %s: Removed.\n' % (relative_path)
+            elif hasattr(file, 'is_rename') and file.is_rename:
+                out += '\t* %s: Moved to...\n' % (relative_path)
+                new_path = file.target_file[2:]
+                # A file can be theoretically moved to a location that
+                # belongs to a different ChangeLog.  Let user fix it.
+                if new_path.startswith(changelog):
+                    new_path = new_path[len(changelog):].lstrip('/')
+                out += '\t* %s: ...here.\n' % (new_path)
+            else:
+                if not no_functions:
+                    for hunk in file:
+                        # Do not add function names for testsuite files
+                        extension = os.path.splitext(relative_path)[1]
+                        if not in_tests and extension in function_extensions:
+                            last_fn = None
+                            modified_visited = False
+                            success = False
+                            for line in hunk:
+                                m = identifier_regex.match(line.value)
+                                if line.is_added or line.is_removed:
+                                    if not line.value.strip():
+                                        continue
+                                    modified_visited = True
+                                    if m and try_add_function(functions,
+                                                              m.group(1)):
+                                        last_fn = None
+                                        success = True
+                                elif line.is_context:
+                                    if last_fn and modified_visited:
+                                        try_add_function(functions, last_fn)
+                                        last_fn = None
+                                        modified_visited = False
+                                        success = True
+                                    elif m:
+                                        last_fn = m.group(1)
+                                        modified_visited = False
+                            if not success:
+                                try_add_function(functions,
+                                                 hunk.section_header)
+                if functions:
+                    out += '\t* %s (%s):\n' % (relative_path, functions[0])
+                    for fn in functions[1:]:
+                        out += '\t(%s):\n' % fn
+                else:
+                    out += '\t* %s:\n' % relative_path
+        out += '\n'
+    return out
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description=help_message)
+    parser.add_argument('input', nargs='?',
+                        help='Patch file (or missing, read standard input)')
+    parser.add_argument('-s', '--no-functions', action='store_true',
+                        help='Do not generate function names in ChangeLogs')
+    parser.add_argument('-p', '--fill-up-bug-titles', action='store_true',
+                        help='Download title of mentioned PRs')
+    parser.add_argument('-c', '--changelog',
+                        help='Append the ChangeLog to a git commit message '
+                             'file')
+    args = parser.parse_args()
+    if args.input == '-':
+        args.input = None
+
+    input = open(args.input) if args.input else sys.stdin
+    data = input.read()
+    output = generate_changelog(data, args.no_functions,
+                                args.fill_up_bug_titles)
+    if args.changelog:
+        lines = open(args.changelog).read().split('\n')
+        start = list(takewhile(lambda l: not l.startswith('#'), lines))
+        end = lines[len(start):]
+        with open(args.changelog, 'w') as f:
+            if start:
+                # appent empty line
+                if start[-1] != '':
+                    start.append('')
+            else:
+                # append 2 empty lines
+                start = 2 * ['']
+            f.write('\n'.join(start))
+            f.write('\n')
+            f.write(output)
+            f.write('\n'.join(end))
+    else:
+        print(output, end='')
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/bpf.cpu ./cpu/bpf.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/bpf.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/bpf.cpu	1970-01-01 00:00:00.000000000 +0000
@@ -1,660 +0,0 @@
-;; Linux BPF CPU description  -*- Scheme -*-
-;; Copyright (C) 2019 Free Software Foundation, Inc.
-;;
-;; Contributed by Oracle Inc.
-;;
-;; This file is part of the GNU Binutils and of GDB.
-;;
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 3 of the
-;; License, or (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-;; 02110-1301, USA.
-
-;; This file contains a CGEN CPU description for the Linux kernel eBPF
-;; instruction set.  eBPF is documented in the linux kernel source
-;; tree.  See linux/Documentation/networking/filter.txt, and also the
-;; sources in the networking subsystem, notably
-;; linux/net/core/filter.c.
-
-(include "simplify.inc")
-
-(define-arch
-  (name bpf)
-  (comment "Linux kernel BPF")
-  (insn-lsb0? #t)
-  (machs bpf)
-  (isas ebpfle ebpfbe))
-
-;;;; The ISAs
-
-;; Logically, eBPF comforms a single instruction set featuring two
-;; kind of instructions: 64-bit instructions and 128-bit instructions.
-;;
-;; The 64-bit instructions have the form:
-;;
-;;      code:8 regs:8 offset:16 imm:32
-;;
-;; Whereas the 128-bit instructions (at the moment there is only one
-;; of such instructions, lddw) have the form:
-;;
-;;      code:8 regs:8 offset:16 imm:32 unused:32 imm:32 
-;;
-;; In both formats `regs' is itself composed by two fields:
-;;
-;;      dst:4 src:4
-;;
-;; The ISA is supposed to be orthogonal to endianness: the endianness
-;; of the instruction fields follow the endianness of the host running
-;; the eBPF program, and that's all.  However, this is not entirely
-;; true.  The definition of an eBPF code in the Linux kernel is:
-;;
-;; struct bpf_insn {
-;;	__u8	code;		/* opcode */
-;;	__u8	dst_reg:4;	/* dest register */
-;;	__u8	src_reg:4;	/* source register */
-;;	__s16	off;		/* signed offset */
-;;	__s32	imm;		/* signed immediate constant */
-;; };
-;;
-;; Since the ordering of fields in C bitmaps is defined by the
-;; implementation, the impact of endianness in the encoding of eBPF
-;; instructions is effectively defined by GCC.  In particular, GCC
-;; places dst_reg before src_reg in little-endian code, and the other
-;; way around in big-endian code.
-;;
-;; So, in reality, eBPF comprises two instruction sets: one for
-;; little-endian with instructions like:
-;;
-;;   code:8 src:4 dst:4 offset:16 imm:32 [unused:32 imm:32]
-;;
-;; and another for big-endian with instructions like:
-;;
-;;   code:8 dst:4 src:4 offset:16 imm:32 [unused:32 imm:32]
-;;
-;; where `offset' and the immediate fields are encoded in
-;; little-endian and big-endian byte-order, respectively.
-
-(define-pmacro (define-bpf-isa x-endian)
-  (define-isa
-    (name (.sym ebpf x-endian))
-    (comment "The eBPF instruction set")
-    ;; Default length to record in ifields.  This is used in
-    ;; calculations involving bit numbers.
-    (default-insn-word-bitsize 64)
-    ;; Length of an unknown instruction.  Used by disassembly and by the
-    ;; simulator's invalid insn handler.
-    (default-insn-bitsize 64)
-    ;; Number of bits of insn that can be initially fetched.  XXX this
-    ;; should be 64 (the size of the smallest insn) but until CGEN
-    ;; gets fixed to place constant fields in their own words, we have
-    ;; to use this workaround to avoid the opcode byte to be placed at
-    ;; the wrong side of the instruction when assembling in
-    ;; big-endian.
-    (base-insn-bitsize 8)))
-
-(define-bpf-isa le)
-(define-bpf-isa be)
-
-(define-pmacro all-isas () (ISA ebpfle,ebpfbe))
-
-;;;; Hardware Hierarchy
-
-;;
-;;     bpf         architecture
-;;      |
-;;    bpfbf        cpu-family
-;;      |
-;;     bpf         machine
-;;      |
-;;   bpf-def       model
-
-(define-cpu
-  (name bpfbf)
-  (comment "Linux kernel eBPF virtual CPU")
-  (word-bitsize 32))
-
-(define-mach
-  (name bpf)
-  (comment "Linux eBPF")
-  (cpu bpfbf)
-  (isas ebpfle ebpfbe))
-
-(define-model
-  (name bpf-def)
-  (comment "Linux eBPF default model")
-  (mach bpf)
-  (unit u-exec "execution unit" ()
-    1 ; issue
-    1 ; done
-    () ; state
-    () ; inputs
-    () ; outputs
-    () ; profile action (default)
-    ))
-
-;;;; Hardware Elements
-
-;; eBPF programs can access 10 general-purpose registers which are
-;; 64-bit.
-
-(define-hardware
-  (name h-gpr)
-  (comment "General Purpose Registers")
-  (attrs all-isas (MACH bpf))
-  (type register DI (16))
-  (indices keyword "%"
-           ;; XXX the frame pointer fp is read-only, so it should
-           ;; go in a different hardware.
-           (;; ABI names.  Take priority when disassembling.
-            (r0 0) (r1 1) (r2 2) (r3 3) (r4 4) (r5 5) (r6 6)
-            (r7 7) (r8 8) (r9 9) (fp 10)
-            ;; Additional names recognized when assembling.
-            (a 0) (ctx 6) (r10 10))))
-
-;; The program counter.  CGEN requires it, even if it is not visible
-;; to eBPF programs.
-
-(dnh h-pc "program counter" (PC PROFILE) (pc) () () ())
-
-;; A 64-bit h-sint to be used by the imm64 operand below.  XXX this
-;; shouldn't be needed, as h-sint is supposed to be able to hold
-;; 64-bit values.  However, in practice CGEN limits h-sint to 32 bits
-;; in 32-bit hosts.  To be fixed in CGEN.
-
-(dnh h-sint64 "signed 64-bit integer" (all-isas) (immediate DI)
-     () () ())
-
-;;;; The Instruction Sets
-
-;;; Fields and Opcodes
-
-;; Convenience macro to shorten the definition of the fields below.
-(define-pmacro (dwf x-name x-comment x-attrs
-                    x-word-offset x-word-length x-start x-length
-                    x-mode)
-  "Define a field including its containing word."
-  (define-ifield
-    (name x-name)
-    (comment x-comment)
-    (.splice attrs (.unsplice x-attrs))
-    (word-offset x-word-offset)
-    (word-length x-word-length)
-    (start x-start)
-    (length x-length)
-    (mode x-mode)))
-
-;; For arithmetic and jump instructions the 8-bit code field is
-;; subdivided in:
-;;
-;;  op-code:4 op-src:1 op-class:3
-
-(dwf f-op-code "eBPF opcode code" (all-isas) 0 8 7 4 UINT)
-(dwf f-op-src "eBPF opcode source" (all-isas) 0 8 3 1 UINT)
-(dwf f-op-class "eBPF opcode instruction class" (all-isas) 0 8 2 3 UINT)
-
-(define-normal-insn-enum insn-op-code-alu "eBPF instruction codes"
-  (all-isas) OP_CODE_ f-op-code
-  (;; Codes for OP_CLASS_ALU and OP_CLASS_ALU64
-   (ADD #x0) (SUB #x1) (MUL #x2) (DIV #x3) (OR #x4) (AND #x5)
-   (LSH #x6) (RSH #x7) (NEG #x8) (MOD #x9) (XOR #xa) (MOV #xb)
-   (ARSH #xc) (END #xd)
-   ;; Codes for OP_CLASS_JMP
-   (JA #x0) (JEQ #x1) (JGT #x2) (JGE #x3) (JSET #x4)
-   (JNE #x5) (JSGT #x6) (JSGE #x7) (CALL #x8) (EXIT #x9)
-   (JLT #xa) (JLE #xb) (JSLT #xc) (JSLE #xd)))
-
-(define-normal-insn-enum insn-op-src "eBPF instruction source"
-  (all-isas) OP_SRC_ f-op-src
-  ;; X => use `src' as source operand.
-  ;; K => use `imm32' as source operand.
-  ((K #b0) (X #b1)))
-
-(define-normal-insn-enum insn-op-class "eBPF instruction class"
-  (all-isas) OP_CLASS_ f-op-class
-  ((LD    #b000) (LDX   #b001) (ST    #b010) (STX   #b011)
-   (ALU   #b100) (JMP   #b101) (ALU64 #b111)))
-
-;; For load/store instructions, the 8-bit code field is subdivided in:
-;;
-;; op-mode:3 op-size:2 op-class:3
-
-(dwf f-op-mode "eBPF opcode mode" (all-isas) 0 8 7 3 UINT)
-(dwf f-op-size "eBPF opcode size" (all-isas) 0 8 4 2 UINT)
-
-(define-normal-insn-enum insn-op-mode "eBPF load/store instruction modes"
-  (all-isas) OP_MODE_ f-op-mode
-  ((IMM #b000) (ABS #b001) (IND #b010) (MEM #b011)
-   ;; #b100 and #b101 are used in classic BPF only, reserved in eBPF.
-   (XADD #b110)))
-
-(define-normal-insn-enum insn-op-size "eBPF load/store instruction sizes"
-  (all-isas) OP_SIZE_ f-op-size
-  ((W  #b00)   ;; Word:        4 byte
-   (H  #b01)   ;; Half-word:   2 byte
-   (B  #b10)   ;; Byte:        1 byte
-   (DW #b11))) ;; Double-word: 8 byte
-
-;; The fields for the source and destination registers are a bit
-;; tricky.  Due to the bizarre nibble swap between little-endian and
-;; big-endian ISAs we need to keep different variants of the fields.
-;;
-;; Note that f-regs is used in the format spec of instructions that do
-;; NOT use registers, where endianness is irrelevant i.e. f-regs is a
-;; constant 0 opcode.
-
-(dwf f-dstle "eBPF dst register field" ((ISA ebpfle)) 8 8 3 4 UINT)
-(dwf f-srcle "eBPF source register field" ((ISA ebpfle)) 8 8 7 4 UINT)
-
-(dwf f-dstbe "eBPF dst register field" ((ISA ebpfbe)) 8 8 7 4 UINT)
-(dwf f-srcbe "eBPF source register field" ((ISA ebpfbe)) 8 8 3 4 UINT)
-
-(dwf f-regs "eBPF registers field" (all-isas) 8 8 7 8 UINT)
-
-;; Finally, the fields for the immediates.
-;;
-;; The 16-bit offsets and 32-bit immediates do not present any special
-;; difficulty: we put them in their own instruction word so the
-;; byte-endianness will be properly applied.
-
-(dwf f-offset16 "eBPF offset field" (all-isas) 16 16 15 16 INT)
-(dwf f-imm32 "eBPF 32-bit immediate field" (all-isas) 32 32 31 32 INT)
-
-;; For the disjoint 64-bit signed immediate, however, we need to use a
-;; multi-ifield.
-
-(dwf f-imm64-a "eBPF 64-bit immediate a" (all-isas) 32 32 31 32 UINT)
-(dwf f-imm64-b "eBPF 64-bit immediate b" (all-isas) 64 32 31 32 UINT)
-(dwf f-imm64-c "eBPF 64-bit immediate c" (all-isas) 96 32 31 32 UINT)
-
-(define-multi-ifield
-  (name f-imm64)
-  (comment "eBPF 64-bit immediate field")
-  (attrs all-isas)
-  (mode DI)
-  (subfields f-imm64-a f-imm64-b f-imm64-c)
-  (insert (sequence ()
-                    (set (ifield f-imm64-b) (const 0))
-                    (set (ifield f-imm64-c) (srl (ifield f-imm64) (const 32)))
-                    (set (ifield f-imm64-a) (and (ifield f-imm64) (const #xffffffff)))))
-  (extract (sequence ()
-                     (set (ifield f-imm64)
-                          (or (sll DI (zext DI (ifield f-imm64-c)) (const 32))
-                              (zext DI (ifield f-imm64-a)))))))
-
-;;; Operands
-
-;; A couple of source and destination register operands are defined
-;; for each ISA: ebpfle and ebpfbe.
-
-(dno dstle "destination register" ((ISA ebpfle)) h-gpr f-dstle)
-(dno srcle "source register" ((ISA ebpfle)) h-gpr f-srcle)
-
-(dno dstbe "destination register" ((ISA ebpfbe)) h-gpr f-dstbe)
-(dno srcbe "source register" ((ISA ebpfbe)) h-gpr f-srcbe)
-
-;; Jump instructions have a 16-bit PC-relative address.
-;; CALL instructions have a 32-bit PC-relative address.
-
-(dno disp16 "16-bit PC-relative address" (all-isas PCREL-ADDR) h-sint
-     f-offset16)
-(dno disp32 "32-bit PC-relative address" (all-isas PCREL-ADDR) h-sint
-     f-imm32)
-
-;; Immediate operands in eBPF are signed, and we want the disassembler
-;; to print negative values in a sane way.  Therefore we use the macro
-;; below to register a printer, which is itself defined as a C
-;; function in bpf.opc.
-
-;; define-normal-signed-immediate-operand
-(define-pmacro (dnsio x-name x-comment x-attrs x-type x-index)
-  (define-operand
-    (name x-name)
-    (comment x-comment)
-    (.splice attrs (.unsplice x-attrs))
-    (type x-type)
-    (index x-index)
-    (handlers (print "immediate"))))
-
-(dnsio imm32 "32-bit immediate" (all-isas) h-sint f-imm32)
-(dnsio offset16 "16-bit offset" (all-isas) h-sint f-offset16)
-
-;; The 64-bit immediate cannot use the default
-;; cgen_parse_signed_integer, because it assumes operands are at much
-;; 32-bit wide.  Use our own.
-
-(define-operand
-  (name imm64)
-  (comment "64-bit immediate")
-  (attrs all-isas)
-  (type h-sint64)
-  (index f-imm64)
-  (handlers (parse "imm64") (print "immediate")))
-
-;; The endle/endbe instructions take an operand to specify the word
-;; width in endianness conversions.  We use both a parser and printer,
-;; which are defined as C functions in bpf.opc.
-
-(define-operand
-  (name endsize)
-  (comment "endianness size immediate: 16, 32 or 64")
-  (attrs all-isas)
-  (type h-uint)
-  (index f-imm32)
-  (handlers (parse "endsize") (print "endsize")))
-
-;;; ALU instructions
-
-;; For each opcode in insn-op-code-alu representing and integer
-;; arithmetic instruction (ADD, SUB, etc) we define a bunch of
-;; instruction variants:
-;;
-;;   ADD[32]{i,r}le for the little-endian ISA
-;;   ADD[32]{i,r}be for the big-endian ISA
-;;
-;; The `i' variants perform `src OP dst -> dst' operations.
-;; The `r' variants perform `dst OP imm32 -> dst' operations.
-;;
-;; The variants with 32 in their name are of ALU class.  Otherwise
-;; they are ALU64 class.
-
-(define-pmacro (define-alu-insn-un x-basename x-suffix x-op-class x-op-code x-endian)
-  (dni (.sym x-basename x-suffix x-endian)
-       (.str x-basename x-suffix)
-       ((ISA (.sym ebpf x-endian)))
-       (.str x-basename x-suffix " $dst" x-endian)
-       (+ (f-imm32 0) (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian)
-          x-op-class OP_SRC_X x-op-code) () ()))
-
-(define-pmacro (define-alu-insn-bin x-basename x-suffix x-op-class x-op-code x-endian)
-  (begin
-    (dni (.sym x-basename x-suffix "i" x-endian)
-         (.str x-basename x-suffix " immediate")
-         ((ISA (.sym ebpf x-endian)))
-         (.str x-basename x-suffix " $dst" x-endian ",$imm32")
-         (+ imm32 (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian)
-            x-op-class OP_SRC_K x-op-code) () ())
-    (dni (.sym x-basename x-suffix "r" x-endian)
-         (.str x-basename x-suffix " register")
-         ((ISA (.sym ebpf x-endian)))
-         (.str x-basename x-suffix " $dst" x-endian ",$src" x-endian)
-         (+ (f-imm32 0) (f-offset16 0) (.sym src x-endian) (.sym dst x-endian)
-            x-op-class OP_SRC_X x-op-code) () ())))
-
-(define-pmacro (daiu x-basename x-op-code x-endian)
-  (begin
-    (define-alu-insn-un x-basename "" OP_CLASS_ALU64 x-op-code x-endian)
-    (define-alu-insn-un x-basename "32" OP_CLASS_ALU x-op-code x-endian)))
-
-(define-pmacro (daib x-basename x-op-code x-endian)
-  (begin
-    (define-alu-insn-bin x-basename "" OP_CLASS_ALU64 x-op-code x-endian)
-    (define-alu-insn-bin x-basename "32" OP_CLASS_ALU x-op-code x-endian)))
-
-(define-pmacro (define-alu-instructions x-endian)
-  (begin
-    (daib add OP_CODE_ADD x-endian)
-    (daib sub OP_CODE_SUB x-endian)
-    (daib mul OP_CODE_MUL x-endian)
-    (daib div OP_CODE_DIV x-endian)
-    (daib or  OP_CODE_OR x-endian)
-    (daib and OP_CODE_AND x-endian)
-    (daib lsh OP_CODE_LSH x-endian)
-    (daib rsh OP_CODE_RSH x-endian)
-    (daib mod OP_CODE_MOD x-endian)
-    (daib xor OP_CODE_XOR x-endian)
-    (daib mov OP_CODE_MOV x-endian)
-    (daib arsh OP_CODE_ARSH x-endian)
-    (daiu neg OP_CODE_NEG x-endian)))
-
-(define-alu-instructions le)
-(define-alu-instructions be)
-
-;;; Endianness conversion instructions
-
-;; The endianness conversion instructions come in several variants:
-;;
-;;  END{le,be}le for the little-endian ISA
-;;  END{le,be}be for the big-endian ISA
-;;
-;; Please do not be confused by the repeated `be' and `le' here.  Each
-;; ISA has both endle and endbe instructions.  It is the disposition
-;; of the source and destination register fields that change between
-;; ISAs, not the semantics of the instructions themselves (see section
-;; "The ISAs" above in this very file.)
-
-(define-pmacro (define-endian-insn x-suffix x-op-src x-endian)
-  (dni (.sym "end" x-suffix x-endian)
-       (.str "end" x-suffix " register")
-       ((ISA (.sym ebpf x-endian)))
-       (.str "end" x-suffix " $dst" x-endian ",$endsize")
-       (+  (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian) endsize
-           OP_CLASS_ALU x-op-src OP_CODE_END) () ()))
-
-(define-endian-insn "le" OP_SRC_K le)
-(define-endian-insn "be" OP_SRC_X le)
-(define-endian-insn "le" OP_SRC_K be)
-(define-endian-insn "be" OP_SRC_X be)
-
-;;; Load/Store instructions
-
-;; The lddw instruction takes a 64-bit immediate as an operand.  Since
-;; this instruction also takes a `dst' operand, we need to define a
-;; variant for each ISA:
-;;
-;;  LDDWle for the little-endian ISA
-;;  LDDWbe for the big-endian ISA  
-
-(define-pmacro (define-lddw x-endian)
-  (dni (.sym lddw x-endian)
-       (.str "lddw" x-endian)
-       ((ISA (.sym ebpf x-endian)))
-       (.str "lddw $dst" x-endian ",$imm64")
-       (+ imm64 (f-offset16 0) ((.sym f-src x-endian) 0)
-          (.sym dst x-endian)
-          OP_CLASS_LD OP_SIZE_DW OP_MODE_IMM) () ()))
-
-(define-lddw le)
-(define-lddw be)
-
-;; The absolute load instructions are non-generic loads designed to be
-;; used in socket filters.  They come in several variants:
-;;
-;; LDABS{w,h,b,dw}
-
-(define-pmacro (dlabs x-suffix x-size)
-  (dni (.sym "ldabs" x-suffix)
-       (.str "ldabs" x-suffix)
-       (all-isas)
-       (.str "ldabs" x-suffix " $imm32")
-       (+ imm32 (f-offset16 0) (f-regs 0)
-          OP_CLASS_LD OP_MODE_ABS (.sym OP_SIZE_ x-size))
-       () ()))
-
-(dlabs "w" W)
-(dlabs "h" H)
-(dlabs "b" B)
-(dlabs "dw" DW)
-
-;; The indirect load instructions are non-generic loads designed to be
-;; used in socket filters.  They come in several variants:
-;;
-;; LDIND{w,h,b,dw}le for the little-endian ISA
-;; LDIND[w,h,b,dw}be for the big-endian ISA
-
-(define-pmacro (dlind x-suffix x-size x-endian)
-  (dni (.sym "ldind" x-suffix x-endian)
-       (.str "ldind" x-suffix)
-       ((ISA (.sym ebpf x-endian)))
-       (.str "ldind" x-suffix " $src" x-endian ",$imm32")
-       (+ imm32 (f-offset16 0) ((.sym f-dst x-endian) 0) (.sym src x-endian)
-          OP_CLASS_LD OP_MODE_IND (.sym OP_SIZE_ x-size))
-       () ()))
-
-(define-pmacro (define-ldind x-endian)
-  (begin    
-    (dlind "w" W x-endian)
-    (dlind "h" H x-endian)
-    (dlind "b" B x-endian)
-    (dlind "dw" DW x-endian)))
-
-(define-ldind le)
-(define-ldind be)
-
-;; Generic load and store instructions are provided for several word
-;; sizes.  They come in several variants:
-;;
-;;  LDX{b,h,w,dw}le, STX{b,h,w,dw}le for the little-endian ISA
-;;
-;;  LDX{b,h,w,dw}be, STX{b,h,w,dw}be for the big-endian ISA
-;;
-;; Loads operate on [$SRC+-OFFSET] -> $DST
-;; Stores operate on $SRC -> [$DST+-OFFSET]
-
-(define-pmacro (dxli x-basename x-suffix x-size x-endian)
-  (dni (.sym x-basename x-suffix x-endian)
-       (.str x-basename x-suffix)
-       ((ISA (.sym ebpf x-endian)))
-       (.str x-basename x-suffix " $dst" x-endian ",[$src" x-endian "+$offset16]")
-       (+ (f-imm32 0) offset16 (.sym src x-endian) (.sym dst x-endian)
-          OP_CLASS_LDX (.sym OP_SIZE_ x-size) OP_MODE_MEM)
-       () ()))
-
-(define-pmacro (dxsi x-basename x-suffix x-size x-endian)
-  (dni (.sym x-basename x-suffix x-endian)
-       (.str x-basename x-suffix)
-       ((ISA (.sym ebpf x-endian)))
-       (.str x-basename x-suffix " [$dst" x-endian "+$offset16],$src" x-endian)
-       (+ (f-imm32 0) offset16 (.sym src x-endian) (.sym dst x-endian)
-          OP_CLASS_STX (.sym OP_SIZE_ x-size) OP_MODE_MEM)
-       () ()))
-
-(define-pmacro (define-ldstx-insns x-endian)
-  (begin
-    (dxli "ldx" "w" W x-endian)
-    (dxli "ldx" "h" H x-endian)
-    (dxli "ldx" "b" B x-endian)
-    (dxli "ldx" "dw" DW x-endian)
-
-    (dxsi "stx" "w" W x-endian)
-    (dxsi "stx" "h" H x-endian)
-    (dxsi "stx" "b" B x-endian)
-    (dxsi "stx" "dw" DW x-endian)))
-
-(define-ldstx-insns le)
-(define-ldstx-insns be)
-
-;; Generic store instructions of the form IMM32 -> [$DST+OFFSET] are
-;; provided in several variants:
-;;
-;;  ST{b,h,w,dw}le for the little-endian ISA
-;;  ST{b,h,w,dw}be for the big-endian ISA
-
-(define-pmacro (dsti x-suffix x-size x-endian)
-  (dni (.sym "st" x-suffix x-endian)
-       (.str "st" x-suffix)
-       ((ISA (.sym ebpf x-endian)))
-       (.str "st" x-suffix " [$dst" x-endian "+$offset16],$imm32")
-       (+ imm32 offset16 ((.sym f-src x-endian) 0) (.sym dst x-endian)
-          OP_CLASS_ST (.sym OP_SIZE_ x-size) OP_MODE_MEM) () ()))
-
-(define-pmacro (define-st-insns x-endian)
-  (begin
-    (dsti "b" B x-endian)
-    (dsti "h" H x-endian)
-    (dsti "w" W x-endian)
-    (dsti "dw" DW x-endian)))
-
-(define-st-insns le)
-(define-st-insns be)
-
-;;; Jump instructions
-
-;; Compare-and-jump instructions, on the other hand, make use of
-;; registers.  Therefore, we need to define several variants in both
-;; ISAs:
-;;
-;;   J{eq,gt,ge,lt,le,set,ne,sgt,sge,slt,sle}{i,r}le for the
-;;   little-endian ISA.
-;;   J{eq,gt,ge,lt,le,set,ne.sgt,sge,slt,sle}{i,r}be for the
-;;   big-endian ISA.
-
-(define-pmacro (dcji x-cond x-op-code x-endian)
-  (begin
-    (dni (.sym j x-cond i x-endian)
-         (.str j x-cond "i")
-         ((ISA (.sym ebpf x-endian)))
-         (.str "j" x-cond " $dst" x-endian ",$imm32,$disp16")
-         (+ imm32 disp16 ((.sym f-src x-endian) 0) (.sym dst x-endian)
-            OP_CLASS_JMP OP_SRC_K (.sym OP_CODE_ x-op-code)) () ())
-    (dni (.sym j x-cond r x-endian)
-         (.str j x-cond "r")
-         ((ISA (.sym ebpf x-endian)))
-         (.str "j" x-cond " $dst" x-endian ",$src" x-endian ",$disp16")
-         (+ (f-imm32 0) disp16 (.sym src x-endian) (.sym dst x-endian)
-            OP_CLASS_JMP OP_SRC_X (.sym OP_CODE_ x-op-code)) () ())))
-
-(define-pmacro (define-condjump-insns x-endian)
-  (begin
-    (dcji "eq" JEQ x-endian)
-    (dcji "gt" JGT x-endian)
-    (dcji "ge" JGE x-endian)
-    (dcji "lt" JLT x-endian)
-    (dcji "le" JLE x-endian)
-    (dcji "set" JSET x-endian)
-    (dcji "ne" JNE x-endian)
-    (dcji "sgt" JSGT x-endian)
-    (dcji "sge" JSGE x-endian)
-    (dcji "slt" JSLT x-endian)
-    (dcji "sle" JSLE x-endian)))
-
-(define-condjump-insns le)
-(define-condjump-insns be)
-
-;; The jump-always, `call' and `exit' instructions dont make use of
-;; either source nor destination registers, so only one variant per
-;; instruction is defined.
-
-(dni ja "ja" (all-isas) "ja $disp16"
-     (+ (f-imm32 0) disp16 (f-regs 0)
-        OP_CLASS_JMP OP_SRC_K OP_CODE_JA) () ())
-
-(dni call "call" (all-isas) "call $disp32"
-     (+ disp32 (f-offset16 0) (f-regs 0)
-        OP_CLASS_JMP OP_SRC_K OP_CODE_CALL) () ())
-
-(dni "exit" "exit" (all-isas) "exit"
-     (+ (f-imm32 0) (f-offset16 0) (f-regs 0)
-        OP_CLASS_JMP (f-op-src 0) OP_CODE_EXIT) () ())
-
-;;; Atomic instructions
-
-;; The atomic exchange-and-add instructions come in two flavors: one
-;; for swapping 64-bit quantities and another for 32-bit quantities.
-
-(define-pmacro (define-atomic-insns x-endian)
-  (begin
-    (dni (.str "xadddw" x-endian)
-         "xadddw"
-         ((ISA (.sym ebpf x-endian)))
-         (.str "xadddw [$dst" x-endian "+$offset16],$src" x-endian)
-         (+ (f-imm32 0) (.sym src x-endian) (.sym dst x-endian)
-            offset16 OP_MODE_XADD OP_SIZE_DW OP_CLASS_STX) () ())
-    (dni (.str "xaddw" x-endian)
-         "xaddw"
-         ((ISA (.sym ebpf x-endian)))
-         (.str "xaddw [$dst" x-endian "+$offset16],$src" x-endian)
-         (+ (f-imm32 0) (.sym src x-endian) (.sym dst x-endian)
-            offset16 OP_MODE_XADD OP_SIZE_W OP_CLASS_STX) () ())))
-
-(define-atomic-insns le)
-(define-atomic-insns be)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/bpf.opc ./cpu/bpf.opc
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/bpf.opc	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/bpf.opc	1970-01-01 00:00:00.000000000 +0000
@@ -1,191 +0,0 @@
-/* EBPF opcode support.  -*- c -*-
-
-   Copyright (C) 2019 Free Software Foundation, Inc.
-
-   Contributed by Oracle, Inc.
-
-   This file is part of the GNU Binutils and of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-   MA 02110-1301, USA.  */
-
-/*
-   Each section is delimited with start and end markers.
-
-   <arch>-opc.h additions use: "-- opc.h"
-   <arch>-opc.c additions use: "-- opc.c"
-   <arch>-asm.c additions use: "-- asm.c"
-   <arch>-dis.c additions use: "-- dis.c"
-   <arch>-ibd.h additions use: "-- ibd.h".  */
-
-/* -- opc.h */
-
-#undef CGEN_DIS_HASH_SIZE
-#define CGEN_DIS_HASH_SIZE 1
-
-#undef CGEN_DIS_HASH
-#define CGEN_DIS_HASH(buffer, value) 0
-
-/* Allows reason codes to be output when assembler errors occur.  */
-#define CGEN_VERBOSE_ASSEMBLER_ERRORS
-
-#define CGEN_VALIDATE_INSN_SUPPORTED
-extern int bpf_cgen_insn_supported (CGEN_CPU_DESC, const CGEN_INSN *);
-
-
-/* -- opc.c */
-
-/* -- asm.c */
-
-/* Parse a signed 64-bit immediate.  */
-
-static const char *
-parse_imm64 (CGEN_CPU_DESC cd,
-             const char **strp,
-             int opindex,
-             int64_t *valuep)
-{
-  bfd_vma value;
-  enum cgen_parse_operand_result result;
-  const char *errmsg;
-
-  errmsg = (* cd->parse_operand_fn)
-    (cd, CGEN_PARSE_OPERAND_INTEGER, strp, opindex, BFD_RELOC_NONE,
-     &result, &value);
-  if (!errmsg)
-    *valuep = value;
-
-  return errmsg;
-}
-
-/* Endianness size operands are integer immediates whose values can be
-   16, 32 or 64.  */
-
-static const char *
-parse_endsize (CGEN_CPU_DESC cd,
-               const char **strp,
-               int opindex,
-               unsigned long *valuep)
-{
-  const char *errmsg;
-
-  errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, valuep);
-  if (errmsg)
-    return errmsg;
-
-  switch (*valuep)
-    {
-    case 16:
-    case 32:
-    case 64:
-      break;
-    default:
-      return _("expected 16, 32 or 64 in");
-    }
-
-  return NULL;
-}
-
-/* Special check to ensure that the right instruction variant is used
-   for the given endianness induced by the ISA selected in the CPU.
-   See bpf.cpu for a discussion on how eBPF is really two instruction
-   sets.  */
-
-int
-bpf_cgen_insn_supported (CGEN_CPU_DESC cd, const CGEN_INSN *insn)
-{
-  CGEN_BITSET isas = CGEN_INSN_BITSET_ATTR_VALUE (insn, CGEN_INSN_ISA);
-
-  return cgen_bitset_intersect_p (&isas, cd->isas);
-}
-
-
-/* -- dis.c */
-
-/* We need to customize the disassembler a bit:
-   - Use 8 bytes per line by default.
-*/
-
-#define CGEN_PRINT_INSN bpf_print_insn
-
-static int
-bpf_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info)
-{
-  bfd_byte buf[CGEN_MAX_INSN_SIZE];
-  int buflen;
-  int status;
-
-  info->bytes_per_chunk = 1;
-  info->bytes_per_line = 8;
-
-  /* Attempt to read the base part of the insn.  */
-  buflen = cd->base_insn_bitsize / 8;
-  status = (*info->read_memory_func) (pc, buf, buflen, info);
-
-  /* Try again with the minimum part, if min < base.  */
-  if (status != 0 && (cd->min_insn_bitsize < cd->base_insn_bitsize))
-    {
-      buflen = cd->min_insn_bitsize / 8;
-      status = (*info->read_memory_func) (pc, buf, buflen, info);
-    }
-
-  if (status != 0)
-    {
-      (*info->memory_error_func) (status, pc, info);
-      return -1;
-    }
-
-  return print_insn (cd, pc, info, buf, buflen);
-}
-
-/* Signed immediates should be printed in hexadecimal.  */
-
-static void
-print_immediate (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-                 void *dis_info,
-                 int64_t value,
-                 unsigned int attrs ATTRIBUTE_UNUSED,
-                 bfd_vma pc ATTRIBUTE_UNUSED,
-                 int length ATTRIBUTE_UNUSED)
-{
-  disassemble_info *info = (disassemble_info *) dis_info;
-
-  if (value <= 9)
-    (*info->fprintf_func) (info->stream, "%" PRId64, value);
-  else
-    (*info->fprintf_func) (info->stream, "%#" PRIx64, value);
-
-  /* This is to avoid -Wunused-function for print_normal.  */
-  if (0)
-    print_normal (cd, dis_info, value, attrs, pc, length);
-}
-
-/* Endianness bit sizes should be printed in decimal.  */
-
-static void
-print_endsize (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-               void *dis_info,
-               unsigned long value,
-               unsigned int attrs ATTRIBUTE_UNUSED,
-               bfd_vma pc ATTRIBUTE_UNUSED,
-               int length ATTRIBUTE_UNUSED)
-{
-  disassemble_info *info = (disassemble_info *) dis_info;
-  (*info->fprintf_func) (info->stream, "%lu", value);
-}
-
-
-/* -- */
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/ChangeLog ./cpu/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/ChangeLog	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/ChangeLog	2024-02-01 01:47:14.000000000 +0000
@@ -1,3 +1,248 @@
+2024-01-15  Nick Clifton  <nickc@redhat.com>
+
+	* 2.42 branch point.
+
+2023-07-03  Nick Clifton  <nickc@redhat.com>
+
+	2.41 Branch Point.
+
+2023-03-15  Nick Clifton  <nickc@redhat.com>
+
+	PR 30231
+	* mep.opc (mep_print_insn): Check for an out of range index.
+
+2022-12-31  Nick Clifton  <nickc@redhat.com>
+
+	* 2.40 branch created.
+
+2022-07-08  Nick Clifton  <nickc@redhat.com>
+
+	* 2.39 branch created.
+
+2022-01-22  Nick Clifton  <nickc@redhat.com>
+
+	* 2.38 release branch created.
+
+2021-07-05  Alan Modra  <amodra@gmail.com>
+
+	* mep.opc (macros): Make static and const.
+	(lookup_macro): Return and use const pointer.
+	(expand_macro): Make mac param const.
+	(expand_string): Make pmacro const.
+
+2021-07-03  Nick Clifton  <nickc@redhat.com>
+
+	* 2.37 release branch created.
+
+2021-05-06  Stafford Horne  <shorne@gmail.com>
+
+	PR 21464
+	* or1k.opc (or1k_imm16_relocs, parse_reloc): Define parse logic
+	for gotha() relocation.
+
+2021-03-31  Alan Modra  <amodra@gmail.com>
+
+	* frv.opc: Replace bfd_boolean with bool, FALSE with false, and
+	TRUE with true throughout.
+
+2021-03-29  Alan Modra  <amodra@gmail.com>
+
+	* frv.opc (frv_is_branch_major, frv_is_float_major),
+	(frv_is_media_major, frv_is_branch_insn, frv_is_float_insn),
+	(frv_is_media_insn, spr_valid): Correct prototypes.
+
+2021-01-09  Nick Clifton  <nickc@redhat.com>
+
+	* 2.36 release branch crated.
+
+2020-10-05  Samanta Navarro  <ferivoz@riseup.net>
+
+	* m32r.cpu: Fix spelling mistakes.
+
+2020-09-18  David Faust  <david.faust@oracle.com>
+
+	* bpf.cpu (insn-op-code-alu): Add SDIV and SMOD.
+	(define-alu-insn-bin, daib): Take ISAs as an argument.
+	(define-alu-instructions): Update calls to daib pmacro with
+	ISAs; add sdiv and smod.
+
+2020-09-08  David Faust  <david.faust@oracle.com>
+
+	* bpf.cpu (define-alu-instructions): Correct semantic operators
+	for div, mod to unsigned versions.
+
+2020-09-01  Alan Modra  <amodra@gmail.com>
+
+	* mep-core.cpu (f-8s8a2, f-12s4a2, f-17s16a2): Multiply signed
+	value by two rather than shifting left.
+	(f-24s5a2n): Similarly multiply signed f-24s5a2n-hi to extract.
+
+2020-08-26  David Faust  <david.faust@oracle.com>
+
+	* bpf.cpu (arch bpf): Add xbpf mach and isas.
+	(define-xbpf-isa) New pmacro.
+	(all-isas) Add xbpfle,xbpfbe.
+	(endian-isas): New pmacro.
+	(mach xbpf): New.
+	(model xbpf-def): Likewise.
+	(h-gpr): Add xbpf mach.
+	(f-dstle, f-srcle, dstle, srcle): Add xbpfle isa.
+	(f-dstbe, f-srcbe, dstbe, srcbe): Add xbpfbe isa.
+	(define-alu-insn-un): Use new endian-isas pmacro.
+	(define-alu-insn-bin, define-alu-insn-mov): Likewise.
+	(define-endian-insn, define-lddw): Likewise.
+	(dlind, dxli, dxsi, dsti): Likewise.
+	(define-cond-jump-insn, define-call-insn): Likewise.
+	(define-atomic-insns): Likewise.
+
+2020-07-04  Nick Clifton  <nickc@redhat.com>
+
+	Binutils 2.35 branch created.
+
+2020-06-25 David Faust  <david.faust@oracle.com>
+
+	* bpf.cpu (f-offset16): Change type from INT to HI.
+	(dxli): Simplify memory access.
+	(dxsi): Likewise.
+	(define-endian-insn): Update c-call in semantics.
+	(dlabs) Likewise.
+	(dlind) Likewise.
+
+2020-06-02  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* bpf.cpu (define-bpf-isa): Set base-insn-bitsize to 64.
+	* bpf.opc (bpf_print_insn): Do not set endian_code here.
+
+2020-06-02  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* mep.opc (print_slot_insn): Pass the insn endianness to
+	cgen_get_insn_value.
+
+2020-05-28  Jose E. Marchesi  <jose.marchesi@oracle.com>
+	    David Faust <david.faust@oracle.com>
+
+	* bpf.cpu (define-alu-insn-un): Add definitions of semantics.
+	(define-alu-insn-mov): Likewise.
+	(daib): Likewise.
+	(define-alu-instructions): Likewise.
+	(define-endian-insn): Likewise.
+	(define-lddw): Likewise.
+	(dlabs): Likewise.
+	(dlind): Likewise.
+	(dxli): Likewise.
+	(dxsi): Likewise.
+	(dsti): Likewise.
+	(define-ldstx-insns): Likewise.
+	(define-st-insns): Likewise.
+	(define-cond-jump-insn): Likewise.
+	(dcji): Likewise.
+	(define-condjump-insns): Likewise.
+	(define-call-insn): Likewise.
+	(ja): Likewise.
+	("exit"): Likewise.
+	(define-atomic-insns): Likewise.
+	(sem-exchange-and-add): New macro.
+	* bpf.cpu ("brkpt"): New instruction.
+	(bpfbf): Set word-bitsize to 32 and insn-endian big.
+	(h-gpr): Prefer r0 to `a' and r6 to `ctx'.
+	(h-pc): Expand definition.
+	* bpf.opc (bpf_print_insn): Set endian_code to BIG.
+
+2020-05-21  Alan Modra  <amodra@gmail.com>
+
+	* mep.opc (mep_cgen_expand_macros_and_parse_operand): Replace
+	"if (x) free (x)" with "free (x)".
+
+2020-05-19  Stafford Horne  <shorne@gmail.com>
+
+	PR 25184
+	* or1k.cpu (arch or1k): Remove or64 and or64nd machs.
+	(ORBIS-MACHS, ORFPX32-MACHS): Remove pmacros.
+	(cpu or1k64bf, mach or64, mach or64nd): Remove definitions.
+	* or1kcommon.cpu (h-fdr): Remove hardware.
+	* or1korfpx.cpu (rDDF, rADF, rBDF): Remove operand definitions.
+	(float-regreg-insn): Remove lf- mnemonic -d instruction pattern.
+	(float-setflag-insn-base): Remove lf-sf mnemonic -d pattern.
+	(float-cust-insn): Remove "lf-cust" cust-num "-d" pattern.
+	(lf-rem-d, lf-itof-d, lf-ftoi-d, lf-madd-d): Remove.
+
+2020-02-16  David Faust  <david.faust@oracle.com>
+
+	* bpf.cpu (define-cond-jump-insn): Renamed from djci.
+	(dcji) New version with support for JMP32
+
+2020-02-03  Alan Modra  <amodra@gmail.com>
+
+	* m32c.cpu (f-dsp-64-s16): Mask before shifting signed value.
+
+2020-02-01  Alan Modra  <amodra@gmail.com>
+
+	* frv.cpu (f-u12): Multiply rather than left shift signed values.
+	(f-label16, f-label24): Likewise.
+
+2020-01-30  Alan Modra  <amodra@gmail.com>
+
+	* m32c.cpu (f-src32-rn-unprefixed-QI): Shift before inverting.
+	(f-src32-rn-prefixed-QI, f-dst32-rn-unprefixed-QI): Likewise.
+	(f-dst32-rn-prefixed-QI): Likewise.
+	(f-dsp-32-s32): Mask before shifting left.
+	(f-dsp-48-u32, f-dsp-48-s32): Likewise.
+	(f-bitbase32-16-s11-unprefixed): Multiply signed field rather than
+	shifting left.
+	(f-bitbase32-24-s11-prefixed, f-bitbase32-24-s19-prefixed): Likewise.
+	(h-gr-SI): Mask before shifting.
+
+2020-01-30  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* bpf.cpu (define-alu-insn-un): The unary BPF instructions
+	(neg and neg32) use OP_SRC_K even if they operate only in
+	registers.
+
+2020-01-18  Nick Clifton  <nickc@redhat.com>
+
+	Binutils 2.34 branch created.
+
+2020-01-13  Alan Modra  <amodra@gmail.com>
+
+	* fr30.cpu (f-disp9, f-disp10, f-s10, f-rel9, f-rel12): Don't
+	left shift signed values.
+
+2020-01-06  Alan Modra  <amodra@gmail.com>
+
+	* m32c.cpu (f-dsp-8-u16, f-dsp-8-s16): Rearrange to mask any sign
+	bits before shifting rather than masking after shifting.
+	(f-dsp-16-u16, f-dsp-16-s16, f-dsp-32-u16, f-dsp-32-s16): Likewise.
+	(f-dsp-40-u16, f-dsp-40-s16, f-dsp-48-u16, f-dsp-48-s16): Likewise.
+	(f-dsp-64-u16, f-dsp-8-s24): Likewise.
+	(f-bitbase32-16-s19-unprefixed): Avoid signed left shift.
+
+2020-01-04  Alan Modra  <amodra@gmail.com>
+
+	* m32r.cpu (f-disp8): Avoid left shift of negative values.
+	(f-disp16, f-disp24): Likewise.
+
+2019-12-23  Alan Modra  <amodra@gmail.com>
+
+	* iq2000.cpu (f-offset): Avoid left shift of negative values.
+
+2019-12-20  Alan Modra  <amodra@gmail.com>
+
+	* or1korbis.cpu (f-disp26, f-disp21): Don't left shift negative values.
+
+2019-12-17  Alan Modra  <amodra@gmail.com>
+
+	* bpf.cpu (f-imm64): Avoid signed overflow.
+
+2019-12-16  Alan Modra  <amodra@gmail.com>
+
+	* xstormy16.cpu (f-rel12a): Avoid signed overflow.
+
+2019-12-11  Alan Modra  <amodra@gmail.com>
+
+	* epiphany.cpu (f-sdisp11): Don't sign extend with shifts.
+	* lm32.cpu (f-branch, f-vall): Likewise.
+	* m32.cpu (f-lab-8-16): Likewise.
+
 2019-12-11  Alan Modra  <amodra@gmail.com>
 
 	* epiphany.cpu (f-simm8, f-simm24): Use multiply rather than
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/cris.cpu ./cpu/cris.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/cris.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/cris.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -550,7 +550,8 @@
 	 (condn condc)
 	 ((eq tmpcond condn) (set condres (.sym condc -condition))))
 	(.iota 16)
-	cris-condition-codes)))
+	cris-condition-codes))
+      (else (error "Unknown condition code")))
      condres)
 )
 
@@ -2598,10 +2599,11 @@
      "move ${Ps},${Rd-sfield}"
      (+ Ps RFIX_MOVE_S_R MODE_REGISTER SIZE_FIXED Rd-sfield)
      (sequence
-       ((SI grno) (SI prno) (SI newval))
+       ((SI prno) (SI newval))
        (set prno (regno Ps))
-       ; CGEN-FIXME: Can't use the following and then "grno" below because
-       ; CGEN will emit a "tmp_grno" *also* in decodev32.c:crisv32f_decode
+       ; CGEN-FIXME: Can't declare (SI grno), then the following, and then
+       ; "grno" below because CGEN will emit a "tmp_grno" *also* in
+       ; decodev32.c:crisv32f_decode.  So inline RD-sfield below.
        ; (set grno (regno Rd-sfield))
        (set newval Ps)
        (.splice
@@ -3666,10 +3668,10 @@
   "Perform word-wise swap within each dword"
   (sequence
     SI
-    ((SI tmpb))
-    (set tmpb x)
-    (or (and (sll tmpb 16) #xffff0000)
-	(and (srl tmpb 16) #xffff)))
+    ((SI tmpw))
+    (set tmpw x)
+    (or (and (sll tmpw 16) #xffff0000)
+	(and (srl tmpw 16) #xffff)))
 )
 
 (define-pmacro (swap-_ x)
@@ -3709,7 +3711,8 @@
 	((eq tmpcode x-swapcode)
 	 (set tmpres ((.sym swap- x-swap) tmpval))))
        (.iota 16)
-       (.splice _ (.unsplice cris-swap-codes)))))
+       (.splice _ (.unsplice cris-swap-codes))))
+     (else (error "Unknown swapcode")))
     tmpres)
 )
 
@@ -3838,7 +3841,8 @@
  (+ Rd MODE_REGISTER RFIX_BTST SIZE_FIXED Rs)
  (sequence
    ((SI tmpd) (SI cnt))
-   (set tmpd (sll Rd (sub 31 (and Rs 31))))
+   (set cnt (sub 31 (and Rs 31)))
+   (set tmpd (sll Rd cnt))
    (setf-move SI tmpd))
 )
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/epiphany.cpu ./cpu/epiphany.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/epiphany.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/epiphany.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -228,10 +228,11 @@
 		(set (ifield f-disp3)  (and SI (ifield f-sdisp11) 7)))
       (sequence ()			;decode
 		(set (ifield f-sdisp11)
-		     (sra SI (sll SI (or SI (sll (ifield f-disp8) 3)
-					 (ifield f-disp3))
-				  21)
-			  21)))
+		     (sub SI (xor (and (or (sll (ifield f-disp8) 3)
+					   (ifield f-disp3))
+				       #x7ff)
+				  #x400)
+			  #x400)))
       )
 
 (dnmf f-imm16 "Short immediate for move/add/sub" () UINT (f-imm8 f-imm-27-8)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/fr30.cpu ./cpu/fr30.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/fr30.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/fr30.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -193,15 +193,15 @@
 (df  f-disp8     "8 bit signed offset"   ()  4  8 INT #f #f)
 (df  f-disp9     "9 bit signed offset"   ()  4  8 INT
     ((value pc) (sra WI value (const 1)))
-    ((value pc) (sll WI value (const 1)))
+    ((value pc) (mul WI value (const 2)))
 )
 (df  f-disp10    "10 bit signed offset"  ()  4  8 INT
      ((value pc) (sra WI value (const 2)))
-     ((value pc) (sll WI value (const 2)))
+     ((value pc) (mul WI value (const 4)))
 )
 (df  f-s10       "10 bit signed offset"  ()  8  8 INT
      ((value pc) (sra WI value (const 2)))
-     ((value pc) (sll WI value (const 2)))
+     ((value pc) (mul WI value (const 4)))
 )
 (df  f-u10       "10 bit unsigned offset" ()  8  8 UINT
      ((value pc) (srl UWI value (const 2)))
@@ -209,7 +209,7 @@
 )
 (df  f-rel9 "9 pc relative signed offset" (PCREL-ADDR) 8 8 INT
      ((value pc) (sra WI (sub WI value (add WI pc (const 2))) (const 1)))
-     ((value pc) (add WI (sll WI value (const 1)) (add WI pc (const 2))))
+     ((value pc) (add WI (mul WI value (const 2)) (add WI pc (const 2))))
 )
 (dnf f-dir8      "8  bit direct address"  ()  8  8)
 (df  f-dir9      "9  bit direct address"  ()  8  8 UINT
@@ -222,7 +222,7 @@
 )
 (df  f-rel12     "12 bit pc relative signed offset" (PCREL-ADDR) 5 11 INT
      ((value pc) (sra WI (sub WI value (add WI pc (const 2))) (const 1)))
-     ((value pc) (add WI (sll WI value (const 1)) (add WI pc (const 2))))
+     ((value pc) (add WI (mul WI value (const 2)) (add WI pc (const 2))))
 )
 
 (dnf f-reglist_hi_st  "8 bit register mask for stm" () 8 8)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/frv.cpu ./cpu/frv.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/frv.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/frv.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -1984,7 +1984,7 @@
 		(set (ifield f-u12-l) (and (ifield f-u12) #x3f))
 		)
       (sequence () ; extract
-		(set (ifield f-u12) (or (sll (ifield f-u12-h) 6)
+		(set (ifield f-u12) (or (mul (ifield f-u12-h) 64)
 					(ifield f-u12-l)))
 		)
 )
@@ -2016,7 +2016,7 @@
 
 (df  f-label16    "18 bit pc relative signed offset" (PCREL-ADDR) 15 16 INT
      ((value pc) (sra WI (sub WI value pc) (const 2)))
-     ((value pc) (add WI (sll WI value (const 2)) pc))
+     ((value pc) (add WI (mul WI value (const 4)) pc))
 )
 
 (df   f-labelH6   "upper 6  bits of label24"  () 30  6 INT #f #f)
@@ -2034,9 +2034,9 @@
       ; extract
       (sequence ()
 		(set (ifield f-label24)
-		     (add (sll (or (sll (ifield f-labelH6) (const 18))
+		     (add (mul (or (mul (ifield f-labelH6) (sll 1 18))
 				   (ifield f-labelL18))
-			       (const 2))
+			       (const 4))
 			  pc)))
 )
 
@@ -2933,7 +2933,7 @@
   (name h-acc40U)
   (comment "40 bit unsigned accumulator")
   (attrs PROFILE VIRTUAL)
-  (type register UDI (64))
+  (type register DI (64))
   (indices extern-keyword acc-names)
   ; The accumlator is made up of two 32 bit registers, accgi/acci.
   ; We want to extract this as a combined 40 unsigned bits
@@ -4266,6 +4266,7 @@
      "cmpb$pack $GRi,$GRj,$ICCi_1"
      (+ pack (GRk-null) OP_00 GRi ICCi_1 OPE2_0C GRj)
      (sequence ((QI cc))
+	       (set cc 0)
 	       (set-n cc (eq (and GRi #xff000000) (and GRj #xff000000)))
 	       (set-z cc (eq (and GRi #x00ff0000) (and GRj #x00ff0000)))
 	       (set-v cc (eq (and GRi #x0000ff00) (and GRj #x0000ff00)))
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/frv.opc ./cpu/frv.opc
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/frv.opc	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/frv.opc	2024-02-01 01:47:14.000000000 +0000
@@ -66,15 +66,15 @@ typedef struct
   const CGEN_INSN *      insn[FRV_VLIW_SIZE];
 } FRV_VLIW;
 
-int frv_is_branch_major (CGEN_ATTR_VALUE_ENUM_TYPE, unsigned long);
-int frv_is_float_major  (CGEN_ATTR_VALUE_ENUM_TYPE, unsigned long);
-int frv_is_media_major  (CGEN_ATTR_VALUE_ENUM_TYPE, unsigned long);
-int frv_is_branch_insn  (const CGEN_INSN *);
-int frv_is_float_insn   (const CGEN_INSN *);
-int frv_is_media_insn   (const CGEN_INSN *);
-void frv_vliw_reset     (FRV_VLIW *, unsigned long, unsigned long);
-int frv_vliw_add_insn   (FRV_VLIW *, const CGEN_INSN *);
-int spr_valid           (long);
+bool frv_is_branch_major (CGEN_ATTR_VALUE_ENUM_TYPE, unsigned long);
+bool frv_is_float_major  (CGEN_ATTR_VALUE_ENUM_TYPE, unsigned long);
+bool frv_is_media_major  (CGEN_ATTR_VALUE_ENUM_TYPE, unsigned long);
+bool frv_is_branch_insn  (const CGEN_INSN *);
+bool frv_is_float_insn   (const CGEN_INSN *);
+bool frv_is_media_insn   (const CGEN_INSN *);
+void frv_vliw_reset      (FRV_VLIW *, unsigned long, unsigned long);
+int  frv_vliw_add_insn   (FRV_VLIW *, const CGEN_INSN *);
+bool spr_valid           (long);
 /* -- */
 
 /* -- opc.c */
@@ -88,117 +88,117 @@ int spr_valid           (long);
 /* Returns TRUE if {MAJOR,MACH} is a major branch of the FRV
    development tree.  */
 
-bfd_boolean
+bool
 frv_is_branch_major (CGEN_ATTR_VALUE_ENUM_TYPE major, unsigned long mach)
 {
   switch (mach)
     {
     case bfd_mach_fr400:
       if (major >= FR400_MAJOR_B_1 && major <= FR400_MAJOR_B_6)
-	return TRUE;
+	return true;
       break;
     case bfd_mach_fr450:
       if (major >= FR450_MAJOR_B_1 && major <= FR450_MAJOR_B_6)
-	return TRUE;
+	return true;
       break;
     default:
       if (major >= FR500_MAJOR_B_1 && major <= FR500_MAJOR_B_6)
-	return TRUE;
+	return true;
       break;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Returns TRUE if {MAJOR,MACH} supports floating point insns.  */
 
-bfd_boolean
+bool
 frv_is_float_major (CGEN_ATTR_VALUE_ENUM_TYPE major, unsigned long mach)
 {
   switch (mach)
     {
     case bfd_mach_fr400:
     case bfd_mach_fr450:
-      return FALSE;
+      return false;
     default:
       if (major >= FR500_MAJOR_F_1 && major <= FR500_MAJOR_F_8)
-	return TRUE;
+	return true;
       break;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Returns TRUE if {MAJOR,MACH} supports media insns.  */
 
-bfd_boolean
+bool
 frv_is_media_major (CGEN_ATTR_VALUE_ENUM_TYPE major, unsigned long mach)
 {
   switch (mach)
     {
     case bfd_mach_fr400:
       if (major >= FR400_MAJOR_M_1 && major <= FR400_MAJOR_M_2)
-	return TRUE;
+	return true;
       break;
     case bfd_mach_fr450:
       if (major >= FR450_MAJOR_M_1 && major <= FR450_MAJOR_M_6)
-	return TRUE;
+	return true;
       break;
     default:
       if (major >= FR500_MAJOR_M_1 && major <= FR500_MAJOR_M_8)
-	return TRUE;
+	return true;
       break;
     }
 
-  return FALSE;
+  return false;
 }
 
-bfd_boolean
+bool
 frv_is_branch_insn (const CGEN_INSN *insn)
 {
   if (frv_is_branch_major (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR400_MAJOR),
 			   bfd_mach_fr400))
-    return TRUE;
+    return true;
   if (frv_is_branch_major (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR450_MAJOR),
 			   bfd_mach_fr450))
-    return TRUE;
+    return true;
   if (frv_is_branch_major (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR500_MAJOR),
 			   bfd_mach_fr500))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
-bfd_boolean
+bool
 frv_is_float_insn (const CGEN_INSN *insn)
 {
   if (frv_is_float_major (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR400_MAJOR),
 			  bfd_mach_fr400))
-    return TRUE;
+    return true;
   if (frv_is_float_major (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR450_MAJOR),
 			  bfd_mach_fr450))
-    return TRUE;
+    return true;
   if (frv_is_float_major (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR500_MAJOR),
 			  bfd_mach_fr500))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
-bfd_boolean
+bool
 frv_is_media_insn (const CGEN_INSN *insn)
 {
   if (frv_is_media_major (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR400_MAJOR),
 			  bfd_mach_fr400))
-    return TRUE;
+    return true;
   if (frv_is_media_major (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR450_MAJOR),
 			  bfd_mach_fr450))
-    return TRUE;
+    return true;
   if (frv_is_media_major (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR500_MAJOR),
 			  bfd_mach_fr500))
-    return TRUE;
+    return true;
 
-  return FALSE;
+  return false;
 }
 
 /* This table represents the allowable packing for vliw insns for the fr400.
@@ -439,7 +439,7 @@ frv_vliw_reset (FRV_VLIW *vliw, unsigned
 /* Return TRUE if unit1 is a match for unit2.
    Unit1 comes from the insn's UNIT attribute. unit2 comes from one of the
    *_allowed_vliw tables above.  */
-static bfd_boolean
+static bool
 match_unit (FRV_VLIW *vliw,
 	    CGEN_ATTR_VALUE_ENUM_TYPE unit1, CGEN_ATTR_VALUE_ENUM_TYPE unit2)
 {
@@ -447,9 +447,9 @@ match_unit (FRV_VLIW *vliw,
   unit1 = vliw->unit_mapping[unit1];
 
   if (unit1 == unit2)
-    return TRUE;
+    return true;
   if (unit1 < unit2)
-    return FALSE;
+    return false;
 
   switch (unit1)
     {
@@ -459,34 +459,34 @@ match_unit (FRV_VLIW *vliw,
       /* The 01 versions of these units are within 2 enums of the 0 or 1
 	 versions.  */
       if (unit1 - unit2 <= 2)
-	return TRUE;
+	return true;
       break;
     case UNIT_IALL:
     case UNIT_FMALL:
       /* The ALL versions of these units are within 5 enums of the 0, 1, 2 or 3
 	 versions.  */
       if (unit1 - unit2 <= 5)
-	return TRUE;
+	return true;
       break;
     default:
       break;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Return TRUE if the vliws match, FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 match_vliw (VLIW_COMBO *vliw1, VLIW_COMBO *vliw2, int vliw_size)
 {
   int i;
 
   for (i = 0; i < vliw_size; ++i)
     if ((*vliw1)[i] != (*vliw2)[i])
-      return FALSE;
+      return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Find the next vliw vliw in the table that can accomodate the new insn.
@@ -523,22 +523,22 @@ add_next_to_vliw (FRV_VLIW *vliw, CGEN_A
 /* Look for the given major insn type in the given vliw.
    Returns TRUE if found, FALSE otherwise.  */
 
-static bfd_boolean
+static bool
 find_major_in_vliw (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE major)
 {
   int i;
 
   for (i = 0; i < vliw->next_slot; ++i)
     if (vliw->major[i] == major)
-      return TRUE;
+      return true;
 
-  return FALSE;
+  return false;
 }
 
 /* Check for constraints between the insns in the vliw due to major insn
    types.  */
 
-static bfd_boolean
+static bool
 fr400_check_insn_major_constraints (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE major)
 {
   /* In the cpu file, all media insns are represented as being allowed in
@@ -555,10 +555,10 @@ fr400_check_insn_major_constraints (FRV_
     default:
       break;
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 fr450_check_insn_major_constraints (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE major)
 {
   CGEN_ATTR_VALUE_ENUM_TYPE other_major;
@@ -569,7 +569,7 @@ fr450_check_insn_major_constraints (FRV_
   /* (M4, M5) and (M4, M6) are allowed.  */
   if (other_major == FR450_MAJOR_M_4)
     if (major == FR450_MAJOR_M_5 || major == FR450_MAJOR_M_6)
-      return TRUE;
+      return true;
 
   /* Otherwise, instructions in even-numbered media categories cannot be
      executed in parallel with other media instructions.  */
@@ -589,23 +589,23 @@ fr450_check_insn_major_constraints (FRV_
 	       || other_major == FR450_MAJOR_M_6);
 
     default:
-      return TRUE;
+      return true;
     }
 }
 
-static bfd_boolean
+static bool
 find_unit_in_vliw (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE unit)
 {
   int i;
 
   for (i = 0; i < vliw->next_slot; ++i)
     if (CGEN_INSN_ATTR_VALUE (vliw->insn[i], CGEN_INSN_UNIT) == unit)
-      return TRUE;
+      return true;
 
-  return FALSE; /* Not found.  */
+  return false; /* Not found.  */
 }
 
-static bfd_boolean
+static bool
 find_major_in_slot (FRV_VLIW *vliw,
 		    CGEN_ATTR_VALUE_ENUM_TYPE major,
 		    CGEN_ATTR_VALUE_ENUM_TYPE slot)
@@ -614,12 +614,12 @@ find_major_in_slot (FRV_VLIW *vliw,
 
   for (i = 0; i < vliw->next_slot; ++i)
     if (vliw->major[i] == major && (*vliw->current_vliw)[i] == slot)
-      return TRUE;
+      return true;
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 fr550_find_media_in_vliw (FRV_VLIW *vliw)
 {
   int i;
@@ -635,13 +635,13 @@ fr550_find_media_in_vliw (FRV_VLIW *vliw
 	  || CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_MCLRACC_1)
 	continue;
 
-      return TRUE; /* Found one.  */
+      return true; /* Found one.  */
     }
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 fr550_find_float_in_vliw (FRV_VLIW *vliw)
 {
   int i;
@@ -655,13 +655,13 @@ fr550_find_float_in_vliw (FRV_VLIW *vliw
       if (CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_FNOP)
 	continue;
 
-      return TRUE; /* Found one.  */
+      return true; /* Found one.  */
     }
 
-  return FALSE;
+  return false;
 }
 
-static bfd_boolean
+static bool
 fr550_check_insn_major_constraints (FRV_VLIW *vliw,
 				    CGEN_ATTR_VALUE_ENUM_TYPE major,
 				    const CGEN_INSN *insn)
@@ -709,10 +709,10 @@ fr550_check_insn_major_constraints (FRV_
     default:
       break;
     }
-  return TRUE; /* All OK.  */
+  return true; /* All OK.  */
 }
 
-static bfd_boolean
+static bool
 fr500_check_insn_major_constraints (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE major)
 {
   /* TODO: A table might be faster for some of the more complex instances
@@ -732,7 +732,7 @@ fr500_check_insn_major_constraints (FRV_
     case FR500_MAJOR_F_4:
     case FR500_MAJOR_F_8:
     case FR500_MAJOR_M_8:
-      return TRUE; /* OK */
+      return true; /* OK */
     case FR500_MAJOR_I_2:
       /* Cannot coexist with I-3 insn.  */
       return ! find_major_in_vliw (vliw, FR500_MAJOR_I_3);
@@ -816,10 +816,10 @@ fr500_check_insn_major_constraints (FRV_
       abort ();
       break;
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 check_insn_major_constraints (FRV_VLIW *vliw,
 			      CGEN_ATTR_VALUE_ENUM_TYPE major,
 			      const CGEN_INSN *insn)
@@ -919,12 +919,12 @@ frv_vliw_add_insn (FRV_VLIW *vliw, const
   return 1;
 }
 
-bfd_boolean
+bool
 spr_valid (long regno)
 {
-  if (regno < 0)     return FALSE;
-  if (regno <= 4095) return TRUE;
-  return FALSE;
+  if (regno < 0)     return false;
+  if (regno <= 4095) return true;
+  return false;
 }
 /* -- */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/iq2000.cpu ./cpu/iq2000.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/iq2000.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/iq2000.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -207,7 +207,7 @@
 (df  f-offset "pc offset field"                (PCREL-ADDR) 15 16 INT
      ; Actually, this is relative to the address of the delay slot.
      ((value pc) (sra SI (sub SI value pc) 2))
-     ((value pc) (add SI (sll SI value 2) (add pc 4))))
+     ((value pc) (add SI (mul SI value 4) (add pc 4))))
 
 ; Instruction fields that scarcely appear in instructions.
 
@@ -1059,7 +1059,7 @@
 (dni syscall "system call" (YIELD-INSN)
      "syscall"
      (+ OP_SPECIAL execode (f-func 12))
-     (c-call VOID "do_syscall")
+     (c-call VOID "do_syscall" pc)
      ())
 
 ; Macro instructions, common to iq10 & iq2000
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/lm32.cpu ./cpu/lm32.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/lm32.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/lm32.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -128,11 +128,15 @@
 
 (df f-branch "branch offset field" (PCREL-ADDR) 15 16 INT
         ((value pc) (sra SI (sub SI value pc) 2))
-        ((value pc) (add SI pc (sra SI (sll SI value 16) 14)))
+	((value pc) (add SI pc (sub (xor (sll (and value #xffff) 2)
+					 #x20000)
+				    #x20000)))
 )
 (df f-call "call offset field" (PCREL-ADDR) 25 26 INT 
         ((value pc) (sra SI (sub SI value pc) 2))
-        ((value pc) (add SI pc (sra SI (sll SI value 6) 4)))
+	((value pc) (add SI pc (sub (xor (sll (and value #x3ffffff) 2)
+					 #x8000000)
+				    #x8000000)))
 )
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/m32c.cpu ./cpu/m32c.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/m32c.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/m32c.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -240,7 +240,7 @@
 ;   r1l      10'b    11'b
 ;   r1h      11'b    01'b
 (df  f-src32-rn-unprefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 10 2 UINT
-     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
+     ((value pc) (or USI (and (inv (sll value 1)) 2) (and (srl value 1) 1))) ; insert
      ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
 )
 ; QI mode gr encoding for m32c is different than for m16c. The hardware
@@ -252,7 +252,7 @@
 ;   r1l      10'b    11'b
 ;   r1h      11'b    01'b
 (df  f-src32-rn-prefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 18 2 UINT
-     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
+     ((value pc) (or USI (and (inv (sll value 1)) 2) (and (srl value 1) 1))) ; insert
      ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
 )
 ; HI mode gr encoding for m32c is different than for m16c. The hardware
@@ -316,11 +316,11 @@
 ;   r1l      10'b    11'b
 ;   r1h      11'b    01'b
 (df  f-dst32-rn-unprefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 8 2 UINT
-     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
+     ((value pc) (or USI (and (inv (sll value 1)) 2) (and (srl value 1) 1))) ; insert
      ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
 )
 (df  f-dst32-rn-prefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 16 2 UINT
-     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
+     ((value pc) (or USI (and (inv (sll value 1)) 2) (and (srl value 1) 1))) ; insert
      ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
 )
 ; HI mode gr encoding for m32c is different than for m16c. The hardware
@@ -436,42 +436,42 @@
 
 (df f-dsp-8-u16 "16 bit unsigned" (all-isas) 8 16 UINT
      ((value pc) (or UHI
-		     (and (srl value 8) #x00ff)
-		     (and (sll value 8) #xff00))) ; insert
+		     (and (srl value 8) #xff)
+		     (sll (and value #xff) 8))) ; insert
      ((value pc) (or UHI
-		     (and UHI (srl UHI value 8) #x00ff)
-		     (and UHI (sll UHI value 8) #xff00))) ; extract
+		     (and UHI (srl UHI value 8) #xff)
+		     (sll UHI (and UHI value #xff) 8))) ; extract
 )
 
 (df f-dsp-8-s16 "8 bit   signed" (all-isas) 8 16 INT
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00)))))	; insert
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8)))))	; insert
      ((value pc) (ext INT
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00)))))	; extract
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8)))))	; extract
 )
 
 (df f-dsp-16-u16 "16 bit unsigned" (all-isas) 16 16 UINT
      ((value pc) (or UHI
-		     (and (srl value 8) #x00ff)
-		     (and (sll value 8) #xff00))) ; insert
+		     (and (srl value 8) #xff)
+		     (sll (and value #xff) 8))) ; insert
      ((value pc) (or UHI
-		     (and UHI (srl UHI value 8) #x00ff)
-		     (and UHI (sll UHI value 8) #xff00))) ; extract
+		     (and UHI (srl UHI value 8) #xff)
+		     (sll UHI (and UHI value #xff) 8))) ; extract
 )
 
 (df f-dsp-16-s16 "16 bit   signed" (all-isas) 16 16 INT
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00))))) ; insert
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8))))) ; insert
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00))))) ; extract
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8))))) ; extract
 )
 
 (dnmf f-dsp-24-u16 "16 bit unsigned" (all-isas) UINT
@@ -504,79 +504,82 @@
 
 (df f-dsp-32-u16 "16 bit unsigned" (all-isas) 32 16 UINT
      ((value pc) (or UHI
-		     (and (srl value 8) #x00ff)
-		     (and (sll value 8) #xff00))) ; insert
+		     (and (srl value 8) #xff)
+		     (sll (and value #xff) 8))) ; insert
      ((value pc) (or UHI
-		     (and UHI (srl UHI value 8) #x00ff)
-		     (and UHI (sll UHI value 8) #xff00))) ; extract
+		     (and UHI (srl UHI value 8) #xff)
+		     (sll UHI (and UHI value #xff) 8))) ; extract
 )
 
 (df f-dsp-32-s16 "16 bit   signed" (all-isas) 32 16 INT
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00))))) ; insert
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8))))) ; insert
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00)))))	; extract
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8)))))	; extract
 )
 
 (df f-dsp-40-u16 "16 bit unsigned" (all-isas) 40 16 UINT
      ((value pc) (or UHI
-		     (and (srl value 8) #x00ff)
-		     (and (sll value 8) #xff00))) ; insert
+		     (and (srl value 8) #xff)
+		     (sll (and value #xff) 8))) ; insert
      ((value pc) (or UHI
-		     (and UHI (srl UHI value 8) #x00ff)
-		     (and UHI (sll UHI value 8) #xff00))) ; extract
+		     (and UHI (srl UHI value 8) #xff)
+		     (sll UHI (and UHI value #xff) 8))) ; extract
 )
 
 (df f-dsp-40-s16 "16 bit   signed" (all-isas) 40 16 INT
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00))))) ; insert
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8))))) ; insert
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00))))) ; extract
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8))))) ; extract
 )
 
 (df f-dsp-48-u16 "16 bit unsigned" (all-isas) 48 16 UINT
      ((value pc) (or UHI
-		     (and (srl value 8) #x00ff)
-		     (and (sll value 8) #xff00))) ; insert
+		     (and (srl value 8) #xff)
+		     (sll (and value #xff) 8))) ; insert
      ((value pc) (or UHI
-		     (and UHI (srl UHI value 8) #x00ff)
-		     (and UHI (sll UHI value 8) #xff00))) ; extract
+		     (and UHI (srl UHI value 8) #xff)
+		     (sll UHI (and UHI value #xff) 8))) ; extract
 )
 
 (df f-dsp-48-s16 "16 bit   signed" (all-isas) 48 16 INT
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00))))) ; insert
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8))))) ; insert
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00))))) ; extract
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8))))) ; extract
 )
 
 (df f-dsp-64-u16 "16 bit unsigned" (all-isas) 64 16 UINT
      ((value pc) (or UHI
-		     (and (srl value 8) #x00ff)
-		     (and (sll value 8) #xff00))) ; insert
+		     (and (srl value 8) #xff)
+		     (sll (and value #xff) 8))) ; insert
      ((value pc) (or UHI
-		     (and UHI (srl UHI value 8) #x00ff)
-		     (and UHI (sll UHI value 8) #xff00))) ; extract
+		     (and UHI (srl UHI value 8) #xff)
+		     (sll UHI (and UHI value #xff) 8))) ; extract
 )
 (df  f-dsp-8-s24 "24 bit signed" (all-isas) 8 24 INT
-     ((value pc) (or SI
-		     (or (and (srl value 16) #xff) (and value #xff00))
-		     (sll (ext INT (trunc QI (and value #xff))) 16)))
-     ((value pc) (or SI
-		     (or (and (srl value 16) #xff) (and value #xff00))
-		     (sll (ext INT (trunc QI (and value #xff))) 16)))
+     ((value pc) (sub SI (xor (or SI (or (and (srl value 16) #xff)
+					 (and value #xff00))
+				  (sll (and value #xff) 16))
+			      #x800000) #x800000))
+     ((value pc) (sub SI (xor (or SI
+				  (or (and (srl value 16) #xff)
+				      (and value #xff00))
+				  (sll (and value #xff) 16))
+			      #x800000) #x800000))
  )
 
 (df  f-dsp-8-u24 "24 bit unsigned" (all-isas) 8 24 UINT
@@ -717,22 +720,22 @@
       (ext INT
 	   (or SI
 	       (or SI
-		   (and (srl value 24) #x000000ff)
-		   (and (srl value 8)  #x0000ff00))
+		   (and (srl value 24) #x00ff)
+		   (and (srl value 8)  #xff00))
 	       (or SI
-		   (and (sll value 8)  #x00ff0000)
-		   (and (sll value 24) #xff000000)))))
+		   (sll (and value #xff00) 8)
+		   (sll (and value #x00ff) 24)))))
 
      ;; extract
      ((value pc)
       (ext INT
 	   (or SI
 	       (or SI
-		   (and (srl value 24) #x000000ff)
-		   (and (srl value 8)  #x0000ff00))
+		   (and (srl value 24) #x00ff)
+		   (and (srl value 8)  #xff00))
 	       (or SI
-		   (and (sll value 8)  #x00ff0000)
-		   (and (sll value 24) #xff000000)))))
+		   (sll (and value #xff00) 8)
+		   (sll (and value #x00ff) 24)))))
 )
 
 (dnmf f-dsp-48-u32 "32 bit unsigned" (all-isas) UINT
@@ -743,7 +746,7 @@
 		)
       (sequence () ; extract
 		(set (ifield f-dsp-48-u32) (or (and (ifield f-dsp-48-u16) #xffff)
-					       (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
+					       (sll (and (ifield f-dsp-64-u16) #xffff) 16)))
 		)
 )
 
@@ -755,7 +758,7 @@
 		)
       (sequence () ; extract
 		(set (ifield f-dsp-48-s32) (or (and (ifield f-dsp-48-u16) #xffff)
-					       (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
+					       (sll (and (ifield f-dsp-64-u16) #xffff) 16)))
 		)
 )
 
@@ -778,12 +781,12 @@
 (df f-dsp-64-s16 " 16 bit signed" (all-isas) 64 16 INT
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00))))) ; insert
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8))))) ; insert
      ((value pc) (ext INT 
 		      (trunc HI
-			     (or (and (srl value 8) #x00ff)
-				 (and (sll value 8) #xff00))))) ; extract
+			     (or (and (srl value 8) #xff)
+				 (sll (and value #xff) 8))))) ; extract
 )
 
 ;-------------------------------------------------------------
@@ -824,7 +827,7 @@
 		(set (ifield f-dsp-16-s8) (sra INT (ifield f-bitbase32-16-s11-unprefixed) 3))
 		)
       (sequence () ; extract
-		(set (ifield f-bitbase32-16-s11-unprefixed) (or (sll (ifield f-dsp-16-s8) 3)
+		(set (ifield f-bitbase32-16-s11-unprefixed) (or (mul (ifield f-dsp-16-s8) 8)
 								(ifield f-bitno32-unprefixed)))
 		)
 )
@@ -846,7 +849,7 @@
 		(set (ifield f-dsp-16-s16) (sra INT (ifield f-bitbase32-16-s19-unprefixed) 3))
 		)
       (sequence () ; extract
-		(set (ifield f-bitbase32-16-s19-unprefixed) (or (sll (ifield f-dsp-16-s16) 3)
+		(set (ifield f-bitbase32-16-s19-unprefixed) (or (mul (ifield f-dsp-16-s16) 8)
 								(ifield f-bitno32-unprefixed)))
 		)
 )
@@ -882,7 +885,7 @@
 		(set (ifield f-dsp-24-s8) (sra INT (ifield f-bitbase32-24-s11-prefixed) 3))
 		)
       (sequence () ; extract
-		(set (ifield f-bitbase32-24-s11-prefixed) (or (sll (ifield f-dsp-24-s8) 3)
+		(set (ifield f-bitbase32-24-s11-prefixed) (or (mul (ifield f-dsp-24-s8) 8)
 							      (ifield f-bitno32-prefixed)))
 		)
 )
@@ -910,7 +913,7 @@
 		)
       (sequence () ; extract
 		(set (ifield f-bitbase32-24-s19-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
-							      (or (sll (ifield f-dsp-32-s8) 11)
+							      (or (mul (ifield f-dsp-32-s8) 2048)
 								  (ifield f-bitno32-prefixed))))
 		)
 )
@@ -956,9 +959,12 @@
 )
 (df  f-lab-8-16 "16 bit pc relative signed offset" (PCREL-ADDR SIGN-OPT all-isas) 8 16 UINT
      ((value pc) (or SI (sll (and (sub value (add pc 1)) #xff) 8)
-		     (srl (and (sub value (add pc 1)) #xffff) 8)))
-     ((value pc) (add SI (or (srl (and value #xffff) 8)
-			     (sra (sll (and value #xff) 24) 16)) (add pc 1)))
+		     (srl (and (sub value (add pc 1)) #xff00) 8)))
+     ((value pc) (add SI (sub (xor (or (srl (and value #xff00) 8)
+				       (sll (and value #xff) 8))
+				    #x8000)
+			       #x8000)
+		      (add pc 1)))
  )
 (df  f-lab-8-24 "24 bit absolute" (all-isas ABS-ADDR) 8 24 UINT
      ((value pc) (or SI
@@ -1069,7 +1075,7 @@
   (indices keyword "" (("r2r0" 0) ("r3r1" 1)))
   (get (index) (or SI
 		   (and (reg h-gr index) #xffff)
-		   (and (sll (reg h-gr (add index 2)) 16) #xffff0000)))
+		   (sll (and (reg h-gr (add index 2)) #xffff) 16)))
   (set (index newval) (sequence ()
 				(set (reg h-gr index) (and newval #xffff))
 				(set (reg h-gr (add index 2)) (srl newval 16)))))
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/m32r.cpu ./cpu/m32r.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/m32r.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/m32r.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -478,13 +478,13 @@
 (dnf f-hi16      "high 16 bits"        (SIGN-OPT) 16 16)
 (df f-disp8      "disp8, slot unknown" (PCREL-ADDR RELOC) 8 8 INT
     ((value pc) (sra WI (sub WI value (and WI pc (const -4))) (const 2)))
-    ((value pc) (add WI (sll WI value (const 2)) (and WI pc (const -4)))))
+    ((value pc) (add WI (mul WI value (const 4)) (and WI pc (const -4)))))
 (df f-disp16     "disp16"              (PCREL-ADDR RELOC) 16 16 INT
     ((value pc) (sra WI (sub WI value pc) (const 2)))
-    ((value pc) (add WI (sll WI value (const 2)) pc)))
+    ((value pc) (add WI (mul WI value (const 4)) pc)))
 (df f-disp24     "disp24"              (PCREL-ADDR RELOC) 8 24 INT
     ((value pc) (sra WI (sub WI value pc) (const 2)))
-    ((value pc) (add WI (sll WI value (const 2)) pc)))
+    ((value pc) (add WI (mul WI value (const 4)) pc)))
 
 (dnf f-op23      "op2.3"               ()  9 3)
 (dnf f-op3       "op3"                 () 14 2)
@@ -742,7 +742,7 @@
 (dnop disp16 "16 bit displacement" () h-iaddr f-disp16)
 (dnop disp24 "24 bit displacement" (RELAX) h-iaddr f-disp24)
 
-; These hardware elements are refered to frequently.
+; These hardware elements are referred to frequently.
 
 (dnop condbit "condition bit" (SEM-ONLY) h-cond f-nil)
 (dnop accum "accumulator" (SEM-ONLY) h-accum f-nil)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/mep-core.cpu ./cpu/mep-core.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/mep-core.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/mep-core.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -430,15 +430,15 @@
 
 (df f-8s8a2 "pc-rel addr (8 bits)"    (all-mep-core-isas PCREL-ADDR)  8  7 INT
     ((value pc) (sra SI (sub SI value    pc) 1))
-    ((value pc) (add SI (sll SI value 1) pc)))
+    ((value pc) (add SI (mul SI value 2) pc)))
 
 (df f-12s4a2 "pc-rel addr (12 bits)"  (all-mep-core-isas PCREL-ADDR)  4 11 INT
     ((value pc) (sra SI (sub SI value    pc) 1))
-    ((value pc) (add SI (sll SI value 1) pc)))
+    ((value pc) (add SI (mul SI value 2) pc)))
 
 (df f-17s16a2 "pc-rel addr (17 bits)" (all-mep-core-isas PCREL-ADDR) 16 16 INT
     ((value pc) (sra SI (sub SI value    pc) 1))
-    ((value pc) (add SI (sll SI value 1) pc)))
+    ((value pc) (add SI (mul SI value 2) pc)))
 
 (df f-24s5a2n-hi "24s5a2n hi 16s16" (all-mep-core-isas PCREL-ADDR) 16 16  INT #f #f)
 (df f-24s5a2n-lo "24s5a2n lo 7s5a2" (all-mep-core-isas PCREL-ADDR)  5  7 UINT #f #f)
@@ -456,7 +456,7 @@
 		    (set (ifield f-24s5a2n-hi)
 			 (sra INT (ifield f-24s5a2n) 8))))
   (extract (set (ifield f-24s5a2n)
-		(add SI (or (sll (ifield f-24s5a2n-hi) 8)
+		(add SI (or (mul (ifield f-24s5a2n-hi) 256)
 			    (sll (ifield f-24s5a2n-lo) 1))
 		     pc)))
   )
@@ -486,7 +486,7 @@
 (df f-7u9     "tp-rel b (7 bits)"      (all-mep-core-isas)  9  7 UINT #f #f)
 (df f-7u9a2   "tp-rel h (7 bits)"      (all-mep-core-isas)  9  6 UINT
     ((value pc) (srl SI value 1))
-    ((value pc) (sll SI value 1)))
+    ((value pc) (mul SI value 2)))
 (df f-7u9a4   "tp/sp-rel w (7 bits)"   (all-mep-core-isas)  9  5 UINT
     ((value pc) (srl SI value 2))
     ((value pc) (sll SI value 2)))
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/mep.opc ./cpu/mep.opc
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/mep.opc	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/mep.opc	2024-02-01 01:47:14.000000000 +0000
@@ -82,7 +82,7 @@ extern CGEN_ATTR_VALUE_BITSET_TYPE mep_a
 )
 
 /* A mask for all ISAs executed by a VLIW coprocessor.  */
-#define MEP_ALL_COP_ISAS_MASK mep_all_cop_isas_mask 
+#define MEP_ALL_COP_ISAS_MASK mep_all_cop_isas_mask
 extern CGEN_ATTR_VALUE_BITSET_TYPE mep_all_cop_isas_mask;
 
 #define MEP_INSN_COP_P(insn) ( \
@@ -533,7 +533,7 @@ parse_unsigned7 (CGEN_CPU_DESC cd, const
 	  break;
 	default:
 	  /* Safe assumption?  */
-	  abort (); 
+	  abort ();
 	}
       errmsg = cgen_parse_address (cd, strp, opindex, reloc,
 				   NULL, &value);
@@ -579,7 +579,7 @@ parse_cdisp10 (CGEN_CPU_DESC cd,
   if ((MEP_CPU & EF_MEP_CPU_MASK) == EF_MEP_CPU_C5)
     wide = 1;
 
-  if (strncmp (*strp, "0x0", 3) == 0 
+  if (strncmp (*strp, "0x0", 3) == 0
       || (**strp == '0' && *(*strp + 1) != 'x'))
     have_zero = 1;
 
@@ -626,7 +626,7 @@ typedef struct
   int len;
 } arg;
 
-macro macros[] =
+static macro const macros[] =
 {
   { "sizeof", "(`1.end + (- `1))"},
   { "startof", "(`1 | 0)" },
@@ -646,7 +646,7 @@ mep_cgen_expand_macros_and_parse_operand
 
 static char *
 str_append (char *dest, const char *input, int len)
-{  
+{
   char *new_dest;
   int oldlen;
 
@@ -659,10 +659,10 @@ str_append (char *dest, const char *inpu
   return strncat (new_dest, input, len);
 }
 
-static macro *
+static const macro *
 lookup_macro (const char *name)
 {
-  macro *m;
+  const macro *m;
 
   for (m = macros; m->name; ++m)
     if (strncmp (m->name, name, strlen(m->name)) == 0)
@@ -672,7 +672,7 @@ lookup_macro (const char *name)
 }
 
 static char *
-expand_macro (arg *args, int narg, macro *mac)
+expand_macro (arg *args, int narg, const macro *mac)
 {
   char *result = 0, *rescanned_result = 0;
   char *e = mac->expansion;
@@ -682,10 +682,10 @@ expand_macro (arg *args, int narg, macro
   /*  printf("expanding macro %s with %d args\n", mac->name, narg + 1); */
   while (*e)
     {
-      if (*e == '`' && 
-	  (*e+1) && 
-	  ((*(e + 1) - '1') <= MAXARGS) &&
-	  ((*(e + 1) - '1') <= narg))
+      if (*e == '`'
+	  && (*e+1)
+	  && ((*(e + 1) - '1') <= MAXARGS)
+	  && ((*(e + 1) - '1') <= narg))
 	{
 	  result = str_append (result, mark, e - mark);
 	  mac_arg = (*(e + 1) - '1');
@@ -706,7 +706,7 @@ expand_macro (arg *args, int narg, macro
       free (result);
       return rescanned_result;
     }
-  else 
+  else
     return result;
 }
 
@@ -722,7 +722,7 @@ expand_string (const char *in, int first
   arg args[MAXARGS];
   int state = IN_TEXT;
   const char *mark = in;
-  macro *pmacro = NULL;
+  const macro *pmacro = NULL;
   char *expansion = 0;
   char *result = 0;
 
@@ -731,8 +731,8 @@ expand_string (const char *in, int first
       switch (state)
 	{
 	case IN_TEXT:
-	  if (*in == '%' && *(in + 1) && (!first_only || num_expansions == 0)) 
-	    {	      
+	  if (*in == '%' && *(in + 1) && (!first_only || num_expansions == 0))
+	    {
 	      pmacro = lookup_macro (in + 1);
 	      if (pmacro)
 		{
@@ -743,7 +743,7 @@ expand_string (const char *in, int first
 		  while (*in == ' ') ++in;
 		  if (*in != '(')
 		    {
-		      state = IN_TEXT;		      
+		      state = IN_TEXT;
 		      pmacro = NULL;
 		    }
 		  else
@@ -752,7 +752,7 @@ expand_string (const char *in, int first
 		      narg = 0;
 		      args[narg].start = in + 1;
 		      args[narg].len = 0;
-		      mark = in + 1;	      		      
+		      mark = in + 1;
 		    }
 		}
 	    }
@@ -793,9 +793,9 @@ expand_string (const char *in, int first
 		  /* Fall through.  */
 		default:
 		  args[narg].len++;
-		  break;		  
+		  break;
 		}
-	    } 
+	    }
 	  else
 	    {
 	      if (*in == ')')
@@ -803,14 +803,13 @@ expand_string (const char *in, int first
 	      if (narg > -1)
 		args[narg].len++;
 	    }
-	  
 	}
       ++in;
     }
-  
+
   if (mark != in)
     result = str_append (result, mark, in - mark);
-  
+
   return result;
 }
 
@@ -849,19 +848,18 @@ mep_cgen_expand_macros_and_parse_operand
     {
       if (strstr (*strp_in, str))
 	/* A macro-expansion was pulled off the front.  */
-	*strp_in = strstr (*strp_in, str);  
+	*strp_in = strstr (*strp_in, str);
       else
 	/* A non-macro-expansion was pulled off the front.  */
-	*strp_in += (str - hold); 
+	*strp_in += (str - hold);
     }
 
-  if (hold)
-    free (hold);
+  free (hold);
 
   return errmsg;
 }
 
-#define CGEN_ASM_INIT_HOOK (cd->parse_operand = mep_cgen_expand_macros_and_parse_operand); 
+#define CGEN_ASM_INIT_HOOK (cd->parse_operand = mep_cgen_expand_macros_and_parse_operand);
 
 /* -- dis.c */
 
@@ -870,11 +868,8 @@ mep_cgen_expand_macros_and_parse_operand
 
 #define CGEN_VALIDATE_INSN_SUPPORTED
 
-static void print_tpreg (CGEN_CPU_DESC, PTR, CGEN_KEYWORD *, long, unsigned int);
-static void print_spreg (CGEN_CPU_DESC, PTR, CGEN_KEYWORD *, long, unsigned int);
-
 static void
-print_tpreg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, PTR dis_info,
+print_tpreg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, void *dis_info,
 	     CGEN_KEYWORD *table ATTRIBUTE_UNUSED, long val ATTRIBUTE_UNUSED,
 	     unsigned int flags ATTRIBUTE_UNUSED)
 {
@@ -884,7 +879,7 @@ print_tpreg (CGEN_CPU_DESC cd ATTRIBUTE_
 }
 
 static void
-print_spreg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, PTR dis_info, 
+print_spreg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, void *dis_info,
 	     CGEN_KEYWORD *table ATTRIBUTE_UNUSED, long val ATTRIBUTE_UNUSED,
 	     unsigned int flags ATTRIBUTE_UNUSED)
 {
@@ -949,11 +944,11 @@ mep_print_vliw_insns (CGEN_CPU_DESC cd,
   if (corelength > 0)
     {
       int my_status = 0;
-	 
+
       for (i = 0; i < corelength; i++ )
 	insnbuf[i] = buf[i];
       cd->isas = & MEP_CORE_ISA;
-	 
+
       my_status = print_insn (cd, pc, info, insnbuf, corelength);
       if (my_status != corelength)
 	{
@@ -962,10 +957,10 @@ mep_print_vliw_insns (CGEN_CPU_DESC cd,
 	}
       status += my_status;
 
-      /* Print the + to indicate that the following copro insn is   */
-      /* part of a vliw group.                                      */
+      /* Print the + to indicate that the following copro insn is
+	 part of a vliw group.  */
       if (copro1length > 0)
-	(*info->fprintf_func) (info->stream, " + "); 
+	(*info->fprintf_func) (info->stream, " + ");
     }
 
   /* Now all that is left to be processed is the coprocessor insns
@@ -977,7 +972,7 @@ mep_print_vliw_insns (CGEN_CPU_DESC cd,
   if (copro1length > 0)
     {
       int my_status = 0;
-	 
+
       for (i = corelength; i < corelength + copro1length; i++ )
 	insnbuf[i - corelength] = buf[i];
 
@@ -996,7 +991,7 @@ mep_print_vliw_insns (CGEN_CPU_DESC cd,
 	  break;
 	case 8:
 	  cd->isas = & MEP_COP64_ISA;
-	  break; 
+	  break;
 	default:
 	  /* Shouldn't be anything but 16,32,48,64.  */
 	  break;
@@ -1029,7 +1024,7 @@ mep_print_vliw_insns (CGEN_CPU_DESC cd,
 
       for (i = corelength + copro1length; i < 64; i++)
 	insnbuf[i - (corelength + copro1length)] = buf[i];
-      
+
       switch (copro2length)
 	{
 	case 2:
@@ -1042,7 +1037,7 @@ mep_print_vliw_insns (CGEN_CPU_DESC cd,
 	  cd->isas = 1 << ISA_EXT_COP1_48;
 	  break;
 	case 8:
-	  cd->isas = 1 << ISA_EXT_COP1_64; 
+	  cd->isas = 1 << ISA_EXT_COP1_64;
 	  break;
 	default:
 	  /* Shouldn't be anything but 16,32,48,64.  */
@@ -1070,29 +1065,29 @@ mep_print_vliw_insns (CGEN_CPU_DESC cd,
     return status;
 }
 
-/* The two functions mep_examine_vliw[32,64]_insns are used find out 
-   which vliw combinaion (16 bit core with 48 bit copro, 32 bit core 
-   with 32 bit copro, etc.) is present.  Later on, when internally   
-   parallel coprocessors are handled, only these functions should    
-   need to be changed.                                               
+/* The two functions mep_examine_vliw[32,64]_insns are used find out
+   which vliw combinaion (16 bit core with 48 bit copro, 32 bit core
+   with 32 bit copro, etc.) is present.  Later on, when internally
+   parallel coprocessors are handled, only these functions should
+   need to be changed.
+
+   At this time only the following combinations are supported:
 
-   At this time only the following combinations are supported: 
-   
    VLIW32 Mode:
    16 bit core insn (core) and 16 bit coprocessor insn (cop1)
    32 bit core insn (core)
    32 bit coprocessor insn (cop1)
    Note: As of this time, I do not believe we have enough information
          to distinguish a 32 bit core insn from a 32 bit cop insn. Also,
-         no 16 bit coprocessor insns have been specified.  
+         no 16 bit coprocessor insns have been specified.
 
    VLIW64 Mode:
    16 bit core insn (core) and 48 bit coprocessor insn (cop1)
    32 bit core insn (core) and 32 bit coprocessor insn (cop1)
    64 bit coprocessor insn (cop1)
-  
+
    The framework for an internally parallel coprocessor is also
-   present (2nd coprocessor insn is cop2), but at this time it 
+   present (2nd coprocessor insn is cop2), but at this time it
    is not used.  This only appears to be valid in VLIW64 mode.  */
 
 static int
@@ -1103,9 +1098,9 @@ mep_examine_vliw32_insns (CGEN_CPU_DESC
   int corebuflength;
   int cop1buflength;
   int cop2buflength;
-  bfd_byte buf[CGEN_MAX_INSN_SIZE];  
+  bfd_byte buf[CGEN_MAX_INSN_SIZE];
   char indicator16[1];
-  char indicatorcop32[2]; 
+  char indicatorcop32[2];
 
   /* At this time we're not supporting internally parallel coprocessors,
      so cop2buflength will always be 0.  */
@@ -1144,16 +1139,16 @@ mep_examine_vliw32_insns (CGEN_CPU_DESC
     {
       if ((indicatorcop32[0] & 0xf0) == 0xf0 && (indicatorcop32[1] & 0x07) == 0x07)
 	{
-          /* We have a 32 bit copro insn.  */
-          corebuflength = 0;
+	  /* We have a 32 bit copro insn.  */
+	  corebuflength = 0;
 	  /* All 4 4ytes are one copro insn. */
-          cop1buflength = 4;
+	  cop1buflength = 4;
 	}
       else
 	{
-          /* We have a 32 bit core.  */
-          corebuflength = 4;
-          cop1buflength = 0;
+	  /* We have a 32 bit core.  */
+	  corebuflength = 4;
+	  cop1buflength = 0;
 	}
     }
   else
@@ -1233,16 +1228,16 @@ mep_examine_vliw64_insns (CGEN_CPU_DESC
       if ((indicator64[0] & 0xf0) == 0xf0 && (indicator64[1] & 0x07) == 0x07
 	  && ((indicator64[2] & 0xfe) != 0xf0 || (indicator64[3] & 0xf4) != 0))
 	{
-          /* We have a 64 bit copro insn.  */
-          corebuflength = 0;
+	  /* We have a 64 bit copro insn.  */
+	  corebuflength = 0;
 	  /* All 8 bytes are one copro insn.  */
-          cop1buflength = 8;
+	  cop1buflength = 8;
 	}
       else
 	{
-          /* We have a 32 bit core insn and a 32 bit copro insn.  */
-          corebuflength = 4;
-          cop1buflength = 4;
+	  /* We have a 32 bit core insn and a 32 bit copro insn.  */
+	  corebuflength = 4;
+	  cop1buflength = 4;
 	}
     }
   else
@@ -1272,7 +1267,7 @@ print_slot_insn (CGEN_CPU_DESC cd,
   CGEN_INSN_INT insn_value;
   CGEN_EXTRACT_INFO ex_info;
 
-  insn_value = cgen_get_insn_value (cd, buf, 32);
+  insn_value = cgen_get_insn_value (cd, buf, 32, cd->insn_endian);
 
   /* Fill in ex_info fields like read_insn would.  Don't actually call
      read_insn, since the incoming buffer is already read (and possibly
@@ -1294,10 +1289,10 @@ print_slot_insn (CGEN_CPU_DESC cd,
       if ((CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_CONFIG)
 	   && CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_CONFIG) != MEP_CONFIG)
 	  || ! (CGEN_ATTR_CGEN_INSN_SLOTS_VALUE (CGEN_INSN_ATTRS (insn)) & (1 << slot)))
-        {
-          insn_list = CGEN_DIS_NEXT_INSN (insn_list);
+	{
+	  insn_list = CGEN_DIS_NEXT_INSN (insn_list);
 	  continue;
-        }
+	}
 
       if ((insn_value & CGEN_INSN_BASE_MASK (insn))
 	  == CGEN_INSN_BASE_VALUE (insn))
@@ -1452,12 +1447,29 @@ mep_print_insn (CGEN_CPU_DESC cd, bfd_vm
   if (info->section && info->section->owner)
     {
       bfd *abfd = info->section->owner;
-      mep_config_index = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_INDEX_MASK;
-      /* This instantly redefines MEP_CONFIG, MEP_OMASK, .... MEP_VLIW64 */
+      if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+	{
+	  mep_config_index = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_INDEX_MASK;
+	  /* This instantly redefines MEP_CONFIG, MEP_OMASK, .... MEP_VLIW64 */
+
+	  /* mep_config_map is a variable sized array, so we do not know how big it is.
+	     The only safe way to check the index therefore is to iterate over the array.
+	     We do know that the last entry is all null.  */
+	  int i;
+	  for (i = 0; i <= mep_config_index; i++)
+	    if (mep_config_map[i].name == NULL)
+	      break;
+
+	  if (i < mep_config_index)
+	    {
+	      opcodes_error_handler (_("illegal MEP INDEX setting '%x' in ELF header e_flags field"), mep_config_index);
+	      mep_config_index = 0;
+	    }
 
-      cop_type = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_COP_MASK;
-      if (cop_type == EF_MEP_COP_IVC2)
-	ivc2 = 1;
+	  cop_type = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_COP_MASK;
+	  if (cop_type == EF_MEP_COP_IVC2)
+	    ivc2 = 1;
+	}
     }
 
   /* Picking the right ISA bitmask for the current context is tricky.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/mt.opc ./cpu/mt.opc
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/mt.opc	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/mt.opc	2024-02-01 01:47:14.000000000 +0000
@@ -434,9 +434,6 @@ parse_type (CGEN_CPU_DESC cd,
 }
 
 /* -- dis.c */
-static void print_dollarhex (CGEN_CPU_DESC, PTR, long, unsigned, bfd_vma, int);
-static void print_pcrel (CGEN_CPU_DESC, PTR, long, unsigned, bfd_vma, int);
-
 static void
 print_dollarhex (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
 		 void * dis_info,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1kcommon.cpu ./cpu/or1kcommon.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1kcommon.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/or1kcommon.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -115,20 +115,6 @@
   )
 
 ;
-; Hardware: virtual registerts for FPU (double precision)
-;           mapped to GPRs
-;
-(define-hardware
-  (name h-fdr)
-  (comment "or64 floating point registers (double, virtual)")
-  (attrs VIRTUAL (MACH ORFPX64-MACHS))
-  (type register DF (32))
-  (indices keyword "" REG-INDICES)
-  (get (index) (subword DF (trunc DI (reg h-gpr index)) 0))
-  (set (index newval) (set UDI (reg h-gpr index) (zext UDI (subword DI newval 0))))
-  )
-
-;
 ; Register pairs are offset by 2 for registers r16 and above.  This is to
 ; be able to allow registers to be call saved in GCC across function calls.
 ;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1k.cpu ./cpu/or1k.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1k.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/or1k.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -31,7 +31,7 @@
   (comment "OpenRISC 1000")
   (default-alignment aligned)
   (insn-lsb0? #t)
-  (machs or32 or32nd or64 or64nd)
+  (machs or32 or32nd)
   (isas openrisc)
 )
 
@@ -44,10 +44,8 @@
   )
 
 (define-pmacro OR32-MACHS       or32,or32nd)
-(define-pmacro OR64-MACHS       or64,or64nd)
-(define-pmacro ORBIS-MACHS      or32,or32nd,or64,or64nd)
-(define-pmacro ORFPX32-MACHS    or32,or32nd,or64,or64nd)
-(define-pmacro ORFPX64-MACHS    or64,or64nd)
+(define-pmacro ORBIS-MACHS      or32,or32nd)
+(define-pmacro ORFPX32-MACHS    or32,or32nd)
 (define-pmacro ORFPX64A32-MACHS or32,or32nd) ; float64 for 32-bit machs
 
 (define-attr
@@ -99,33 +97,6 @@
         )
       )
     )
-
-(if (keep-mach? (or64 or64nd))
-    (begin
-      (define-cpu
-        (name or1k64bf)
-        (comment "OpenRISC 1000 64-bit CPU family")
-        (insn-endian big)
-        (data-endian big)
-        (word-bitsize 64)
-        (file-transform "64")
-        )
-
-      (define-mach
-        (name or64)
-        (comment "Generic OpenRISC 1000 64-bit CPU")
-        (cpu or1k64bf)
-        (bfd-name "or1k64")
-        )
-
-      (define-mach
-        (name or64nd)
-        (comment "Generic OpenRISC 1000 ND 64-bit CPU with no branch delay slot")
-        (cpu or1k64bf)
-        (bfd-name "or1k64nd")
-        )
-      )
-    )
 
 (include "or1kcommon.cpu")
 (include "or1korbis.cpu")
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1k.opc ./cpu/or1k.opc
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1k.opc	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/or1k.opc	2024-02-01 01:47:14.000000000 +0000
@@ -193,7 +193,7 @@ static const bfd_reloc_code_real_type or
     BFD_RELOC_OR1K_GOT_LO13,
     BFD_RELOC_UNUSED,
     BFD_RELOC_UNUSED,
-    BFD_RELOC_UNUSED },
+    BFD_RELOC_OR1K_GOT_AHI16 },
   { BFD_RELOC_OR1K_GOTPC_LO16,
     BFD_RELOC_UNUSED,
     BFD_RELOC_UNUSED,
@@ -296,6 +296,11 @@ parse_reloc (const char **strp)
 	str += 5;
 	cls = RCLASS_TPOFF;
       }
+    else if (strncasecmp (str, "got", 3) == 0)
+      {
+	str += 3;
+	cls = RCLASS_GOT;
+      }
 
     if (strncasecmp (str, "hi(", 3) == 0)
       {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1korbis.cpu ./cpu/or1korbis.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1korbis.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/or1korbis.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -76,7 +76,7 @@
     26
     INT
     ((value pc) (sra IAI (sub IAI value pc) (const 2)))
-    ((value pc) (add IAI (sll IAI value (const 2)) pc))
+    ((value pc) (add IAI (mul IAI value (const 4)) pc))
     )
 
 ; PC relative, 21-bit, 13 shifted to right, aligned.
@@ -91,7 +91,7 @@
     ((value pc)
      (sub IAI (sra IAI value (const 13)) (sra IAI pc (const 13))))
     ((value pc)
-     (sll IAI (add IAI value (sra IAI pc (const 13))) (const 13)))
+     (mul IAI (add IAI value (sra IAI pc (const 13))) (const 8192)))
     )
 
 ; Immediates.
@@ -717,7 +717,7 @@
      ((MACH ORBIS-MACHS))
      "l.swa ${simm16-split}($rA),$rB"
      (+ OPC_SWA rA rB simm16)
-     (sequence ((SI addr) (BI flag))
+     (sequence ((SI addr))
 	       (set addr (load-store-addr rA simm16-split 4))
 	       (set sys-sr-f (and atomic-reserve (eq addr atomic-address)))
 	       (if sys-sr-f
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1korfpx.cpu ./cpu/or1korfpx.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/or1korfpx.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/or1korfpx.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -84,10 +84,6 @@
 (dnop rASF "source register A (single floating point mode)"    ((MACH ORFPX32-MACHS)) h-fsr f-r2)
 (dnop rBSF "source register B (single floating point mode)"    ((MACH ORFPX32-MACHS)) h-fsr f-r3)
 
-(dnop rDDF "or64 destination register (double floating point mode)" ((MACH ORFPX64-MACHS)) h-fdr f-r1)
-(dnop rADF "or64 source register A (double floating point mode)"    ((MACH ORFPX64-MACHS)) h-fdr f-r2)
-(dnop rBDF "or64 source register B (double floating point mode)"    ((MACH ORFPX64-MACHS)) h-fdr f-r3)
-
 (define-pmacro (double-field-and-ops mnemonic reg offbit op-comment)
   (begin
     (define-multi-ifield
@@ -152,14 +148,6 @@
          (set SF rDSF (mnemonic SF rASF rBSF))
          ()
          )
-    (dni (.sym lf- mnemonic -d)
-         (.str "lf." mnemonic ".d reg/reg/reg")
-         ((MACH ORFPX64-MACHS))
-         (.str "lf." mnemonic ".d $rDDF,$rADF,$rBDF")
-         (+ OPC_FLOAT rDDF rADF rBDF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_ (.upcase mnemonic) _D))
-         (set DF rDDF (mnemonic DF rADF rBDF))
-         ()
-         )
     (dni (.sym lf- mnemonic -d32)
          (.str "lf." mnemonic ".d regpair/regpair/regpair")
          ((MACH ORFPX64A32-MACHS))
@@ -185,15 +173,6 @@
      ()
      )
 
-(dni lf-rem-d
-     "lf.rem.d reg/reg/reg"
-     ((MACH ORFPX64-MACHS))
-     "lf.rem.d $rDDF,$rADF,$rBDF"
-     (+ OPC_FLOAT rDDF rADF rBDF (f-resv-10-3 0) OPC_FLOAT_REGREG_REM_D)
-     (set DF rDDF (rem DF rADF rBDF))
-     ()
-     )
-
 (dni lf-rem-d32
      "lf.rem.d regpair/regpair/regpair"
      ((MACH ORFPX64A32-MACHS))
@@ -221,15 +200,6 @@
      ()
      )
 
-(dni lf-itof-d
-     "lf.itof.d reg/reg"
-     ((MACH ORFPX64-MACHS))
-     "lf.itof.d $rDDF,$rA"
-     (+ OPC_FLOAT rDDF rA (f-r3 0) (f-resv-10-3 0) OPC_FLOAT_REGREG_ITOF_D)
-     (set DF rDDF (float DF (get-rounding-mode) rA))
-     ()
-     )
-
 (dni lf-itof-d32
      "lf.itof.d regpair/regpair"
      ((MACH ORFPX64A32-MACHS))
@@ -248,15 +218,6 @@
      ()
      )
 
-(dni lf-ftoi-d
-     "lf.ftoi.d reg/reg"
-     ((MACH ORFPX64-MACHS))
-     "lf.ftoi.d $rD,$rADF"
-     (+ OPC_FLOAT rD rADF (f-r3 0) (f-resv-10-3 0) OPC_FLOAT_REGREG_FTOI_D)
-     (set WI rD (fix WI (get-rounding-mode) rADF))
-     ()
-     )
-
 (dni lf-ftoi-d32
      "lf.ftoi.d regpair/regpair"
      ((MACH ORFPX64A32-MACHS))
@@ -276,14 +237,6 @@
          (symantics rtx-mnemonic SF rASF rBSF)
          ()
          )
-    (dni (.sym lf-sf mnemonic -d)
-         (.str "lf.sf" mnemonic ".d reg/reg")
-         ((MACH ORFPX64-MACHS))
-         (.str "lf.sf" mnemonic ".d $rADF,$rBDF")
-         (+ OPC_FLOAT (f-r1 0) rADF rBDF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_SF (.upcase mnemonic) _D))
-         (symantics rtx-mnemonic DF rADF rBDF)
-         ()
-         )
     (dni (.sym lf-sf mnemonic -d32)
          (.str "lf.sf" mnemonic ".d regpair/regpair")
          ((MACH ORFPX64A32-MACHS))
@@ -336,15 +289,6 @@
      ()
      )
 
-(dni lf-madd-d
-     "lf.madd.d reg/reg/reg"
-     ((MACH ORFPX64-MACHS))
-     "lf.madd.d $rDDF,$rADF,$rBDF"
-     (+ OPC_FLOAT rDDF rADF rBDF (f-resv-10-3 0) OPC_FLOAT_REGREG_MADD_D)
-     (set DF rDDF (add DF (mul DF rADF rBDF) rDDF))
-     ()
-     )
-
 (dni lf-madd-d32
      "lf.madd.d regpair/regpair/regpair"
      ((MACH ORFPX64A32-MACHS))
@@ -364,14 +308,6 @@
          (nop)
          ()
          )
-    (dni (.sym "lf-cust" cust-num "-d")
-         (.str "lf.cust" cust-num ".d")
-         ((MACH ORFPX64-MACHS))
-         (.str "lf.cust" cust-num ".d")
-         (+ OPC_FLOAT (f-resv-25-5 0) rADF rBDF (f-resv-10-3 0) (.sym "OPC_FLOAT_REGREG_CUST" cust-num "_D"))
-         (nop)
-         ()
-         )
     (dni (.sym "lf-cust" cust-num "-d32")
          (.str "lf.cust" cust-num ".d")
          ((MACH ORFPX64A32-MACHS))
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/xc16x.cpu ./cpu/xc16x.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/xc16x.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/xc16x.cpu	1970-01-01 00:00:00.000000000 +0000
@@ -1,3146 +0,0 @@
-; Infineon XC16X CPU description.  -*- Scheme -*-
-;
-; Copyright 2006, 2007, 2009 Free Software Foundation, Inc.
-;
-; Contributed by KPIT Cummins Infosystems Ltd.; developed under contract 
-; from Infineon Systems, GMBH , Germany.
-;
-; This file is part of the GNU Binutils.
-;
-; This program is free software; you can redistribute it and/or modify
-; it under the terms of the GNU General Public License as published by
-; the Free Software Foundation; either version 3 of the License, or
-; (at your option) any later version.
-;
-; This program is distributed in the hope that it will be useful,
-; but WITHOUT ANY WARRANTY; without even the implied warranty of
-; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-; GNU General Public License for more details.
-;
-; You should have received a copy of the GNU General Public License
-; along with this program; if not, write to the Free Software
-; Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
-; 02110-1301, USA.
-
-(define-rtl-version 0 8)
-
-(include "simplify.inc")
-
-; define-arch appears first
-
-(define-arch
-  (name xc16x) ; name of cpu family
-  (comment "Infineon XC16X")
-  (default-alignment aligned)
-  (insn-lsb0? #t)		
-  (machs xc16x)
-  (isas xc16x)
-)
-
-; Attributes.   
-; An attribute to describe which pipeline an insn runs in generally OS.
-(define-attr
-  (for insn)
-  (type enum)
-  (name PIPE)
-  (comment "parallel execution pipeline selection")
-  (values NONE OS)
-)
-
-; Instruction set parameters.
-
-(define-isa
-  (name xc16x)
-  (default-insn-bitsize 32)
-  (base-insn-bitsize 32)
-  (default-insn-word-bitsize 16)
-  (decode-assist (15 14 13 12))
-  ; The XC16X fetches 1 insn at a time.
-  (liw-insns 1)
-  (parallel-insns 1)
-)
-
-; Cpu family definitions.
-
-(define-cpu
-  ; cpu names must be distinct from the architecture name and machine names.
-  ; The "b" suffix stands for "base" and is the convention.
-  ; The "f" suffix stands for "family" and is the convention.
-  (name xc16xbf)
-  (comment "Infineon XC16X base family")
-  (endian little)
-  (insn-chunk-bitsize 32)
-  (word-bitsize 16)
-  (parallel-insns 1)
-)
-
-(define-mach
-  (name xc16x)
-  (comment "Infineon XC16X cpu")
-  (cpu xc16xbf)
-)
-
-; Model descriptions.
-
-(define-model
-  (name xc16x) (comment "XC16X") (attrs)
-  (mach xc16x)
-  
-  (pipeline p-mem "" () ((prefetch) (fetch) (decode) (address) (memory) (execute) (writeback)))
-  
-    ; `state' is a list of variables for recording model state
-    (state
-     ; bit mask of h-gr registers, =1 means value being loaded from memory
-     (h-gr UINT)
-    )
-  
-  (unit u-exec "Execution Unit" ()
-  	1 1 ; issue done
-  	() ; state
-  	((dr INT -1) (sr INT -1)) ; inputs
-  	((dr INT -1)) ; outputs
-  	() ; profile action (default)
-	)
-  (unit u-cmp "Compare Unit" ()
-  	1 1 ; issue done
-  	() ; state
-  	((src1 INT -1) (src2 INT -1)) ; inputs
-  	() ; outputs
-  	() ; profile action (default)
-	)
-  (unit u-cti "Jump & Call Unit" ()
-  	1 1 ; issue done
-  	() ; state
-  	((condbit) (sr INT -1)) ; inputs
-  	((pc)) ; outputs
-  	() ; profile action (default)
-	)
-  (unit u-mov "Data Movement Unit" ()
-  	1 1 ; issue done
-  	() ;state
-  	((dr INT -1) (sr INT -1)) ; inputs
-  	((dr INT -1)) ; output
-  	() ; profile action (default)
-  	)
- ) 
- 
-; Instruction fields.
-;
-; Attributes:
-; PCREL-ADDR: pc relative value (for reloc and disassembly purposes)
-; ABS-ADDR: absolute address (for reloc and disassembly purposes)
-; RELOC: there is a relocation associated with this field (experiment)
-
-(define-attr
-  (for ifield operand)
-  (type boolean)
-  (name RELOC)
-  (comment "there is a reloc associated with this field (experiment)")
-)
-
-(dnf f-op1       "op1"                 () 7  4)
-(dnf f-op2       "op2"                 () 3  4)
-(dnf f-condcode  "condcode"            () 7  4)  ;condition code required in other jmps and calls
-(dnf f-icondcode "indrct condcode"     () 15 4)  ;condition code required in other jmpi and calli
-(dnf f-rcond     "relative-cond"       () 7  4)  ;condition code required in JMPR 
-(dnf f-qcond     "qbit"                () 7  4)  ;used in enum of bset/bclear macro
-(dnf f-extccode  "extended condcode"   () 15 5)  ;condition code required in other jmpa and calla
-(dnf f-r0	 "r0"		       () 9  2)  ;required where 2 bit register used(only R0-R3)
-(dnf f-r1        "r1"                  () 15 4)
-(dnf f-r2        "r2"                  () 11 4)
-(dnf f-r3        "r3"                  () 12 4)
-(dnf f-r4        "r4"                  () 11 4)
-(dnf f-uimm2     "uimm2"               () 13 2)  ;used for immediate data,eg in ADD,MOV insns
-(dnf f-uimm3     "uimm3"               () 10 3)  ;used for immediate data,eg in ADD,SUB insns
-(dnf f-uimm4     "uimm4"               () 15 4)  ;used for immediate data,eg in MOV insns
-(dnf f-uimm7     "uimm7"               (PCREL-ADDR RELOC) 15 7)	;used in TRAP
-(dnf f-uimm8     "uimm8"               () 23 8)  ;used in immediate byte data,eg in ADDB,MOVB insns
-(dnf f-uimm16    "uimm16"              () 31 16) ;used for immediate word data
-(dnf f-memory    "memory"              () 31 16) ; used for memory operands 
-(dnf f-memgr8    "memory" 	       () 31 16) ; memory location of gr
-(dnf f-rel8      "rel8"                (PCREL-ADDR RELOC) 15 8)	;used in JMPR,CALLR
-(dnf f-relhi8    "relhi8"              (PCREL-ADDR RELOC) 23 8)	;used in JB,JBC,JNB,JNBS
-(dnf f-reg8      "reg8"                () 15 8)	;required where 8bit gp register used
-(dnf f-regmem8   "regmem8"             () 15 8) ;required where 8bit register used
-(dnf f-regoff8   "regoff8"             () 15 8)	;required for offset calc
-(dnf f-reghi8    "reghi8"              () 23 8)	;required where 8bit register number used
-(dnf f-regb8     "regb8"               () 15 8)	;required for byte registers RL0,RH0, till RL8,RH8
-(dnf f-seg8      "seg8"                () 15 8) ;used as segment number in JMPS,CALLS
-(dnf f-segnum8   "segnum8"             () 23 8) ;used in EXTS,EXTSR        
-(dnf f-mask8     "mask8"               () 23 8) ;used as mask in BFLDH,BFLDL insns
-(dnf f-pagenum   "page num"            () 25 10);used in EXTP,EXTPR
-(dnf f-datahi8   "datahi8"             () 31 8) ;used for filling with const data
-(dnf f-data8     "data8"               () 23 8) ;used for filling with const data
-(dnf f-offset16  "address offset16"    (ABS-ADDR RELOC) 31 16) ;used in JMPS,JMPA,CALLA,CALLS
-(dnf f-op-bit1   "gap of 1 bit"        () 11 1)	;used for filling with const data
-(dnf f-op-bit2   "gap of 2 bits"       () 11 2)	;used for filling with const data
-(dnf f-op-bit4   "gap of 4 bits"       () 11 4) ;used for filling with const data
-(dnf f-op-bit3   "gap of 3 bits"       () 10 3) ;used in CALLA, JMPA
-(dnf f-op-2bit   "gap of 2 bits"       () 10 2) ;used in CALLA
-(dnf f-op-bitone "gap of 1 bit "       () 10 1) ;used in JMPA
-(dnf f-op-onebit "gap of 1 bit "       () 9  1) ;used in JMPA
-(dnf f-op-1bit   "gap of 1 bit "       () 8  1) ;used in JMPA, CALLA
-(dnf f-op-lbit4  "gap of 4 bits"       () 15 4) ;used for filling with const data
-(dnf f-op-lbit2  "gap of 2 bits"       () 15 2) ;used for filling with const data
-(dnf f-op-bit8	 "gap of 8 bits"       () 31 8) ;used for filling with const data
-(dnf f-op-bit16	 "gap of 16 bits"      () 31 16) ;used for filling with const data
-(dnf f-qbit      "qbit"                () 7  4) ;used in bit field of bset/bclear
-(dnf f-qlobit    "qlobit"              () 31 4) ;used for filling with const data
-(dnf f-qhibit    "qhibit"              () 27 4) ;used for filling with const data
-(dnf f-qlobit2   "qlobit2"             () 27 2) ;used for filling with const data
-(dnf f-pof    "upof16"                 () 31 16) ; used for memory operands 
-
-; Enums.
-; insn-op1: bits 0-3
-(define-normal-insn-enum insn-op1 "insn format enums" () OP1_ f-op1
-  ("0" "1" "2" "3" "4" "5" "6" "7"
-   "8" "9" "10" "11" "12" "13" "14" "15")
-)
-
-; insn-op2: bits 4-7
-(define-normal-insn-enum insn-op2 "op2 enums" () OP2_ f-op2
-  ("0" "1" "2" "3" "4" "5" "6" "7"
-   "8" "9" "10" "11" "12" "13" "14" "15")
-)
-
-;/*for bclr/bset*/
-; insn-rcond: bits 0-3
-(define-normal-insn-enum insn-qcond "bit set/clear enums" () QBIT_ f-qcond
-  (("0" 0) ("1" 1) ("2" 2) ("3" 3) ("4" 4) ("5" 5) ("6" 6) ("7" 7) ("8" 8) ("9" 9) ("10" 10) 
-   ("11" 11) ("12" 12) ("13" 13) ("14" 14) ("15" 15))
-)
-;/************/
-; insn-rcond: bits 0-3
-(define-normal-insn-enum insn-rcond "relative jump condition code op2 enums" () COND_ f-rcond
-  (("UC" 0) ("NET" 1) ("Z" 2) ("NE_NZ" 3) ("V" 4)  ("NV" 5) ("N" 6) ("NN" 7)
-   ("C" 8) ("NC" 9) ("SGT" 10) ("SLE" 11) ("SLT" 12) ("SGE" 13) ("UGT" 14) ("ULE" 15)
-   ("EQ" 2) ("NE" 3) ("ULT" 8) ("UGE" 9))
-)
-
-
-
-; Hardware pieces.
-; These entries list the elements of the raw hardware.
-; They're also used to provide tables and other elements of the assembly
-; language.
-
-(dnh h-pc "program counter" (PC) (pc) () () ())
-
-(define-keyword
-  (name gr-names)
-  (enum-prefix H-GR-)
-  (values (r0 0) (r1 1) (r2 2) (r3 3) (r4 4) (r5 5) (r6 6) (r7 7)
-	  (r8 8) (r9 9) (r10 10) (r11 11) (r12 12) (r13 13) (r14 14) (r15 15))
-
-)
-(define-hardware
-  (name h-gr)
-  (comment "general registers")
-  (attrs PROFILE CACHE-ADDR)
-  (type register HI (16))
-  (indices extern-keyword gr-names)
-)
-
-;; HACK: Various semantics refer to h-cr.
-;; This is here to keep things working.
-(define-hardware
-  (name h-cr)
-  (comment "cr registers")
-  (attrs PROFILE CACHE-ADDR)
-  (type register HI (16))
-  (indices extern-keyword gr-names)
-)
-
-(define-keyword
-  (name ext-names)
-  (enum-prefix H-EXT-)
-  (values (0x1 0) (0x2 1) (0x3 2) (0x4 3)
-          ("1" 0) ("2" 1) ("3" 2) ("4" 3))
-
-)
-
-(define-hardware
-  (name h-ext)
-  (comment "ext values")
-  (attrs PROFILE CACHE-ADDR)
-  (type register HI (8))
-  (indices extern-keyword ext-names)
-)
-
-(define-keyword
-  (name psw-names)
-  (enum-prefix H-PSW-)
-  (values ("IEN" 136) ("r0.11" 240) ("r1.11" 241) ("r2.11" 242) ("r3.11" 243) ("r4.11" 244)
-                      ("r5.11" 245) ("r6.11" 246) ("r7.11" 247) ("r8.11" 248)
-                      ("r9.11" 249) ("r10.11" 250) ("r11.11" 251) ("r12.11" 252)
-                      ("r13.11" 253) ("r14.11" 254) ("r15.11" 255))
-)
-
-(define-hardware
-  (name h-psw)
-  (comment "ext values")
-  (attrs PROFILE CACHE-ADDR)
-  (type register HI (1))
-  (indices extern-keyword psw-names)
-)
-
-(define-keyword
-  (name grb-names)
-  (enum-prefix H-GRB-)
-  (values (rl0 0) (rh0 1) (rl1 2) (rh1 3) (rl2 4) (rh2 5) (rl3 6) (rh3 7) 
-          (rl4 8) (rh4 9) (rl5 10) (rh5 11) (rl6 12) (rh6 13) (rl7 14) (rh7 15))
-)
-
-(define-hardware
-  (name h-grb)
-  (comment "general registers")
-  (attrs PROFILE CACHE-ADDR)
-  (type register QI (16))
-  (indices extern-keyword grb-names)
-)
-
-(define-keyword
-  (name conditioncode-names)
-  (enum-prefix H-CC-)
-  (values (cc_UC 0) (cc_NET 1) (cc_Z 2) (cc_EQ 2) (cc_NZ 3) (cc_NE 3) (cc_V 4) (cc_NV 5) (cc_N 6)  (cc_NN 7) (cc_ULT 8)  (cc_UGE 9) 
-	  (cc_C 8) (cc_NC 9) (cc_SGT 10) (cc_SLE 11) (cc_SLT 12) (cc_SGE 13) (cc_UGT 14) 
-          (cc_ULE 15))
-)
-(define-hardware
-  (name h-cc)
-  (comment "condition codes")
-  (attrs PROFILE CACHE-ADDR)
-  (type register QI (16))
-  (indices extern-keyword conditioncode-names)
-)
-
-(define-keyword
-  (name extconditioncode-names)
-  (enum-prefix H-ECC-)
-  (values(cc_UC 0) (cc_NET 2) (cc_Z 4) (cc_EQ 4) (cc_NZ 6) (cc_NE 6) (cc_V 8) (cc_NV 10) (cc_N 12)  (cc_NN 14) (cc_ULT 16)  (cc_UGE 18) (cc_C 16) (cc_NC 18) (cc_SGT 20) 
-         (cc_SLE 22) (cc_SLT 24) (cc_SGE 26) (cc_UGT 28) (cc_ULE 30) (cc_nusr0 1) 
-         (cc_nusr1 3) (cc_usr0 5) (cc_usr1 7))
-)
-(define-hardware
-  (name h-ecc)
-  (comment "extended condition codes")
-  (attrs PROFILE CACHE-ADDR)
-  (type register QI (4))
-  (indices extern-keyword extconditioncode-names)
-)
-
-(define-keyword
-  (name grb8-names)
-  (enum-prefix H-GRB8-)
-  (values (dpp0 0)  (dpp1 1)  (dpp2 2)  (dpp3 3)
-	  (psw 136)   (cp 8)    (mdl 7)   (mdh  6)
-	  (mdc 135)   (sp 9)    (csp 4)  (vecseg 137)
-          (stkov 10)  (stkun 11) (cpucon1 12) (cpucon2 13)
-	  (zeros 142)  (ones 143) (spseg 134) (tfr 214)
-	  (rl0 240) (rh0 241) (rl1 242) (rh1 243) (rl2 244) (rh2 245) (rl3 246) (rh3 247)
-	  (rl4 248) (rh4 249) (rl5 250) (rh5 251) (rl6 252) (rh6 253) (rl7 254) (rh7 255))
-)
-
-(define-hardware
-  (name h-grb8)
-  (comment "general byte registers")
-  (attrs PROFILE CACHE-ADDR)
-  (type register QI (36))
-  (indices extern-keyword grb8-names)
-)
-
-(define-keyword
-  (name r8-names)
-  (enum-prefix H-R8-)
-  (values (dpp0 0)  (dpp1 1)  (dpp2 2)  (dpp3 3)
-	  (psw 136)   (cp 8)    (mdl 7)   (mdh  6)
-	  (mdc 135)   (sp 9)    (csp 4)  (vecseg 137)
-          (stkov 10)  (stkun 11) (cpucon1 12) (cpucon2 13)
-	  (zeros 142)  (ones 143) (spseg 134) (tfr 214)
-	  (r0 240) (r1 241) (r2 242) (r3 243) (r4 244) (r5 245) (r6 246) (r7 247)
-	  (r8 248) (r9 249) (r10 250) (r11 251) (r12 252) (r13 253) (r14 254) (r15 255))
-)
-
-(define-hardware
-  (name h-r8)
-  (comment "registers")
-  (attrs PROFILE CACHE-ADDR)
-  (type register HI (36))
-  (indices extern-keyword r8-names)
-)
-
-(define-keyword
-  (name regmem8-names)
-  (enum-prefix H-REGMEM8-)
-  (values (dpp0 0)  (dpp1 1)  (dpp2 2)  (dpp3 3)
-	  (psw 136)   (cp 8)    (mdl 7)   (mdh  6)
-	  (mdc 135)   (sp 9)    (csp 4)  (vecseg 137)
-          (stkov 10)  (stkun 11) (cpucon1 12) (cpucon2 13)
-	  (zeros 142)  (ones 143) (spseg 134) (tfr 214)
-	  (r0 240) (r1 241) (r2 242) (r3 243) (r4 244) (r5 245) (r6 246) (r7 247)
-	  (r8 248) (r9 249) (r10 250) (r11 251) (r12 252) (r13 253) (r14 254) (r15 255))
-)
-
-(define-hardware
-  (name h-regmem8)
-  (comment "registers")
-  (attrs )
-  (type register HI (16))
-  (indices extern-keyword regmem8-names)
-)
-
-(define-keyword
-  (name regdiv8-names)
-  (enum-prefix H-REGDIV8-)
-  (values (r0 0) (r1 17) (r2 34) (r3 51) (r4 68) (r5 85) (r6 102) (r7 119)
-	  (r8 136) (r9 153) (r10 170) (r11 187) (r12 204) (r13 221) (r14 238) (r15 255))
-)
-
-(define-hardware
-  (name h-regdiv8)
-  (comment "division insn registers")
-  (attrs PROFILE CACHE-ADDR)
-  (type register HI (16))
-  (indices extern-keyword regdiv8-names)
-)
-
-(define-keyword
-  (name reg0-name)
-  (enum-prefix H-REG0-)
-  (values (0x1 1) (0x2 2) (0x3 3) (0x4 4) (0x5 5) (0x6 6) (0x7 7) (0x8 8) (0x9 9) (0xa 10) (0xb 11) 
-          (0xc 12) (0xd 13) (0xe 14) (0xf 15)
-          ("1" 1) ("2" 2) ("3" 3) ("4" 4) ("5" 5) ("6" 6) ("7" 7) ("8" 8) ("9" 9) ("10" 10) ("11" 11) 
-          ("12" 12) ("13" 13) ("14" 14) ("15" 15))
-)
-
-(define-hardware
-  (name h-r0)
-  (comment "for 4-bit data excuding 0")
-  (attrs PROFILE CACHE-ADDR)
-  (type register HI (30))
-  (indices extern-keyword reg0-name)
-)
-
-(define-keyword
-  (name reg0-name1)
-  (enum-prefix H-REG01-)
-  (values (0x1 1) (0x2 2) (0x3 3) (0x4 4) (0x5 5) (0x6 6) (0x7 7)
-          ("1" 1) ("2" 2) ("3" 3) ("4" 4) ("5" 5) ("6" 6) ("7" 7))
-)
-
-(define-hardware
-  (name h-r01)
-  (comment "for 4-bit data excuding 0")
-  (attrs PROFILE CACHE-ADDR)
-  (type register HI (14))
-  (indices extern-keyword reg0-name1)
-)
-
-(define-keyword
-  (name regbmem8-names)
-  (enum-prefix H-REGBMEM8-)
-  (values (dpp0 0)  (dpp1 1)  (dpp2 2)  (dpp3 3)
-	  (psw 136)   (cp 8)    (mdl 7)   (mdh  6)
-	  (mdc 135)   (sp 9)    (csp 4)  (vecseg 137)
-          (stkov 10)  (stkun 11) (cpucon1 12) (cpucon2 13)
-	  (zeros 142)  (ones 143) (spseg 134) (tfr 214)
-	  (rl0 240) (rh0 241) (rl1 242) (rh1 243) (rl2 244) (rh2 245) (rl3 246) (rh3 247)
-	  (rl4 248) (rh4 249) (rl5 250) (rh5 251) (rl6 252) (rh6 253) (rl7 254) (rh7 255))
-)
-
-(define-hardware
-  (name h-regbmem8)
-  (comment "registers")
-  (attrs PROFILE CACHE-ADDR)
-  (type register HI (36))
-  (indices extern-keyword regbmem8-names)
-)
-
-(define-keyword
-  (name memgr8-names)
-  (enum-prefix H-MEMGR8-)
-  (values (dpp0 65024)  (dpp1 65026)  (dpp2 65028)  (dpp3 65030)
-	  (psw 65296)   (cp 65040)    (mdl 65038)   (mdh  65036)
-	  (mdc 65294)   (sp 65042)    (csp 65032)  (vecseg 65298)
-          (stkov 65044)  (stkun 65046) (cpucon1 65048) (cpucon2 65050)
-	  (zeros 65308)  (ones 65310) (spseg 65292) (tfr 65452) )
-)
-
-(define-hardware
-  (name h-memgr8)
-  (comment "memory location of registers")
-  (attrs )
-  (type register HI (20))
-  (indices extern-keyword memgr8-names)
-)
-
-(dsh h-cond "condition bit" () (register BI))   ;any bit from PSW while comparison
-; This bit is part of the PSW register 
-(dsh h-cbit  "carry bit"		() (register BI))
-
-(dsh h-sgtdis "segmentation enable bit" () (register BI)) ;0 means segmentation enabled
-
-;Instruction operands 
-; -- layer between the assembler and the raw hardware description 
-; -- the main means of manipulating instruction fields in the semantic code 
-
-; XC16X specific operand attributes:
-
-(define-attr
-  (for operand)
-  (type boolean)
-  (name HASH-PREFIX)
-  (comment "immediates have an optional '#' prefix")
-)
-
-(define-attr
-  (for operand)
-  (type boolean)
-  (name DOT-PREFIX)
-  (comment "bit addr have an optional '.' prefix")
-)
-
-(define-attr
-  (for operand)
-  (type boolean)
-  (name POF-PREFIX)
-  (comment "page offset ")
-)
-
-(define-attr
-  (for operand)
-  (type boolean)
-  (name PAG-PREFIX)
-  (comment "page ")
-)
-
-(define-attr
-  (for operand)
-  (type boolean)
-  (name SOF-PREFIX)
-  (comment "segment offset selection")
-)
-
-(define-attr
-  (for operand)
-  (type boolean)
-  (name SEG-PREFIX)
-  (comment "segment")
-)
-
-;; Define an operand that takes a set of handlers.
-;; dowh: define-operand-with-handlers
-(define-pmacro (dowh x-name x-comment x-attrs x-type x-index x-handlers)
-  (define-operand (name x-name) (comment x-comment)
-    (.splice attrs (.unsplice x-attrs))
-    (type x-type) (index x-index)
-    (.splice handlers (.unsplice x-handlers)))
-)
-
-(dnop sr      "source register"              () h-gr    f-r2)
-(dnop dr      "destination register"         () h-gr    f-r1)
-(dnop dri     "destination register"         () h-gr    f-r4)
-(dnop srb     "source register"              () h-grb   f-r2)
-(dnop drb     "destination register"         () h-grb   f-r1)
-(dnop sr2     "2 bit source register"	     () h-gr    f-r0)
-(dnop src1    "source register 1"            () h-gr   f-r1)
-(dnop src2    "source register 2"            () h-gr   f-r2)
-(dnop srdiv   "source register 2"            () h-regdiv8   f-reg8)
-(dnop RegNam  "PSW bits"                     () h-psw f-reg8) 
-(dnop uimm2   "2 bit unsigned number"        (HASH-PREFIX) h-ext f-uimm2) 
-(dnop uimm3   "3 bit unsigned number"        (HASH-PREFIX) h-r01 f-uimm3)
-(dnop uimm4   "4 bit unsigned number"        (HASH-PREFIX) h-uint f-uimm4)
-(dnop uimm7   "7 bit trap number"            (HASH-PREFIX) h-uint f-uimm7)
-(dnop uimm8   "8 bit unsigned immediate"     (HASH-PREFIX) h-uint f-uimm8)
-(dnop uimm16  "16 bit unsigned immediate"    (HASH-PREFIX) h-uint f-uimm16)
-(dowh upof16  "16 bit unsigned immediate"    (POF-PREFIX) h-addr f-memory ((print "with_pof_prefix")))
-(dnop reg8    "8 bit word register number"   () h-r8 f-reg8)
-(dnop regmem8 "8 bit word register number"   () h-regmem8 f-regmem8)
-(dnop regbmem8 "8 bit byte register number"  () h-regbmem8 f-regmem8)
-(dnop regoff8 "8 bit word register number"   () h-r8 f-regoff8)
-(dnop reghi8  "8 bit word register number"   () h-r8 f-reghi8)
-(dnop regb8   "8 bit byte register number"   () h-grb8 f-regb8)
-(dnop genreg  "8 bit word register number"   () h-r8 f-regb8)
-(dnop seg     "8 bit segment number"         () h-uint f-seg8)
-(dnop seghi8  "8 bit hi segment number"      () h-uint f-segnum8)
-(dnop caddr   "16 bit address offset"        () h-addr f-offset16)
-(dnop rel     "8 bit signed relative offset" () h-sint f-rel8)
-(dnop relhi   "hi 8 bit signed relative offset" () h-sint f-relhi8)	
-(dnop condbit "condition bit"                (SEM-ONLY) h-cond f-nil)
-(dnop bit1    "gap of 1 bit"    	     () h-uint f-op-bit1)
-(dnop bit2    "gap of 2 bits"	             () h-uint f-op-bit2)
-(dnop bit4    "gap of 4 bits"                () h-uint f-op-bit4)
-(dnop lbit4   "gap of 4 bits"                () h-uint f-op-lbit4)
-(dnop lbit2   "gap of 2 bits"                () h-uint f-op-lbit2)
-(dnop bit8    "gap of 8 bits"	             () h-uint f-op-bit8)
-(dnop u4      "gap of 4 bits"	             () h-r0   f-uimm4)
-(dnop bitone  "field of 1 bit"	             () h-uint f-op-onebit)
-(dnop bit01   "field of 1 bit"	             () h-uint f-op-1bit)
-(dnop cond    "condition code" 	             () h-cc   f-condcode)
-(dnop icond   "indirect condition code"      () h-cc   f-icondcode)
-(dnop extcond "extended condition code"      () h-ecc  f-extccode)
-(dnop memory  "16 bit memory" 		     () h-addr f-memory)
-(dnop memgr8  "16 bit memory"		     () h-memgr8 f-memgr8)
-(dnop cbit    "carry bit"                    (SEM-ONLY) h-cbit  f-nil)
-(dowh qbit    "bit addr"               	     (DOT-PREFIX) h-uint f-qbit ((print "with_dot_prefix")))
-(dowh qlobit  "bit addr"                     (DOT-PREFIX) h-uint f-qlobit ((print "with_dot_prefix")))
-(dowh qhibit  "bit addr"                     (DOT-PREFIX) h-uint f-qhibit ((print "with_dot_prefix")))
-(dnop mask8   "8 bit mask"     		     (HASH-PREFIX) h-uint f-mask8)
-(dnop masklo8 "8 bit mask"     		     (HASH-PREFIX) h-uint f-datahi8)
-(dnop pagenum "10 bit page number"     	     (HASH-PREFIX) h-uint f-pagenum)
-(dnop data8   "8 bit data"     		     (HASH-PREFIX) h-uint f-data8)
-(dnop datahi8 "8 bit data"     	             (HASH-PREFIX) h-uint f-datahi8)
-(dnop sgtdisbit "segmentation enable bit"    (SEM-ONLY) h-sgtdis f-nil)
-(dowh upag16  "16 bit unsigned immediate"    (PAG-PREFIX) h-uint f-uimm16 ((print "with_pag_prefix")))
-(dnop useg8   "8 bit segment "    	     (SEG-PREFIX) h-uint f-seg8)
-(dnop useg16  "16 bit address offset"        (SEG-PREFIX) h-uint f-offset16)
-(dnop usof16  "16 bit address offset"        (SOF-PREFIX) h-uint f-offset16)
-
-; define hash operator
-(define-operand (name hash) (comment "# prefix") (attrs)
-  (type h-sint)  
-  (index f-nil)
-  (handlers (parse "hash") (print "hash"))
-)
-
-; define dot operator
-(define-operand (name dot) (comment ". prefix") (attrs)
-  (type h-sint)  
-  (index f-nil)
-  (handlers (parse "dot") (print "dot"))
-)
-
-; define pof operator
-(define-operand (name pof) (comment "pof: prefix") (attrs)
-  (type h-sint)  
-  (index f-nil)
-  (handlers (parse "pof") (print "pof"))
-)
-
-; define pag operator
-(define-operand (name pag) (comment "pag: prefix") (attrs)
-  (type h-sint)
-  (index f-nil)
-  (handlers (parse "pag") (print "pag"))
-)
-
-; define sof operator
-(define-operand (name sof) (comment "sof: prefix") (attrs)
-  (type h-sint)  
-  (index f-nil)
-  (handlers (parse "sof") (print "sof"))
-)
-
-; define seg operator
-(define-operand (name segm) (comment "seg: prefix") (attrs)
-  (type h-sint)
-  (index f-nil)
-  (handlers (parse "seg") (print "seg"))
-)
-
-; IDOC attribute for instruction documentation.
-(define-attr
-  (for insn)
-  (type enum)
-  (name IDOC)
-  (comment "insn kind for documentation")
-  (attrs META)
-  (values
-   (MOVE - () "Data Movement")
-   (ALU  - () "Arithmatic & logical")
-   (CMP  - () "Compare")
-   (JMP  - () "Jump & Call")
-   (MISC - () "Miscellaneous")
-   (SYSC - () "System control")
-  )
-)
-
-; Include the instruction set descriptions from their respective
-; source files.
-
-;Arithmatic insns
-;******************************************************************
-
-;add/sub register and immediate
-(define-pmacro (arithmetic16 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"dir"$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 (mem HI op2)))
-       ()
-  )
-)
-(arithmetic16 addrpof add add OP1_0 OP2_2 reg8 upof16 HI "pof")
-(arithmetic16 subrpof sub sub OP1_2 OP2_2 reg8 upof16 HI "pof")
-(arithmetic16 addbrpof addb add OP1_0 OP2_3 regb8 upof16 QI "pof")
-(arithmetic16 subbrpof subb sub OP1_2 OP2_3 regb8 upof16 QI "pof")
-(arithmetic16 addrpag add add OP1_0 OP2_2 reg8 upag16 HI "pag")
-(arithmetic16 subrpag sub sub OP1_2 OP2_2 reg8 upag16 HI "pag")
-(arithmetic16 addbrpag addb add OP1_0 OP2_3 regb8 upag16 QI "pag")
-(arithmetic16 subbrpag subb sub OP1_2 OP2_3 regb8 upag16 QI "pag")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic17 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"dir"$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 (mem HI op2) cbit))
-       ()
-  )
-)
-(arithmetic17 addcrpof addc addc OP1_1 OP2_2 reg8 upof16 HI "pof")
-(arithmetic17 subcrpof subc subc OP1_3 OP2_2 reg8 upof16 HI "pof")
-(arithmetic17 addcbrpof addcb addc OP1_1 OP2_3 regb8 upof16 QI "pof")
-(arithmetic17 subcbrpof subcb subc OP1_3 OP2_3 regb8 upof16 QI "pof")
-(arithmetic17 addcrpag addc addc OP1_1 OP2_2 reg8 upag16 HI "pag")
-(arithmetic17 subcrpag subc subc OP1_3 OP2_2 reg8 upag16 HI "pag")
-(arithmetic17 addcbrpag addcb addc OP1_1 OP2_3 regb8 upag16 QI "pag")
-(arithmetic17 subcbrpag subcb subc OP1_3 OP2_3 regb8 upag16 QI "pag")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic18 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"dir"$"op1 ",$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set (mem HI op1) (insn1 (mem HI op1) op2 ))
-       ()
-  )
-)
-(arithmetic18 addrpofr add add OP1_0 OP2_4 upof16 reg8 HI "pof")
-(arithmetic18 subrpofr sub sub OP1_2 OP2_4 upof16 reg8 HI "pof")
-(arithmetic18 addbrpofr addb add OP1_0 OP2_5 upof16 regb8 QI "pof")
-(arithmetic18 subbrpofr subb sub OP1_2 OP2_5 upof16 regb8 QI "pof")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic19 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"dir"$"op1 ",$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set (mem HI op1) (insn1 mode (mem HI op1) op2 cbit))
-       ()
-  )
-)
-(arithmetic19 addcrpofr addc addc OP1_1 OP2_4 upof16 reg8 HI "pof")
-(arithmetic19 subcrpofr subc subc OP1_3 OP2_4 upof16 reg8 HI "pof")
-(arithmetic19 addcbrpofr addcb addc OP1_1 OP2_5 upof16 regb8 QI "pof")
-(arithmetic19 subcbrpofr subcb subc OP1_3 OP2_5 upof16 regb8 QI "pof")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic20 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"dir"$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(arithmetic20 addrhpof add add OP1_0 OP2_6 reg8 uimm16 HI "pof")
-(arithmetic20 subrhpof sub sub OP1_2 OP2_6 reg8 uimm16 HI "pof")
-(arithmetic20 addbrhpof add add OP1_0 OP2_6 reg8 uimm16 HI "pag")
-(arithmetic20 subbrhpof sub sub OP1_2 OP2_6 reg8 uimm16 HI "pag")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic21 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"dir"$"op2)
-       (+ opc1 opc2 op1 (f-op-bit1 0) op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(arithmetic21 addrhpof3 add add OP1_0 OP2_8 dr uimm3 HI "pof")
-(arithmetic21 subrhpof3 sub sub OP1_2 OP2_8 dr uimm3 HI "pof")
-(arithmetic21 addbrhpag3 addb add OP1_0 OP2_9 drb uimm3 QI "pag")
-(arithmetic21 subbrhpag3 subb sub OP1_2 OP2_9 drb uimm3 QI "pag")
-(arithmetic21 addrhpag3 add add OP1_0 OP2_8 dr uimm3 HI "pag")
-(arithmetic21 subrhpag3 sub sub OP1_2 OP2_8 dr uimm3 HI "pag")
-(arithmetic21 addbrhpof3 addb add OP1_0 OP2_9 drb uimm3 QI "pof")
-(arithmetic21 subbrhpof3 subb sub OP1_2 OP2_9 drb uimm3 QI "pof")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic22 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"dir"$"op2)
-       (+ opc1 opc2 op1 op2 (f-op-bit8 0))
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(arithmetic22 addrbhpof addb add OP1_0 OP2_7 regb8 uimm8 QI "pof")
-(arithmetic22 subrbhpof subb sub OP1_2 OP2_7 regb8 uimm8 QI "pof")
-(arithmetic22 addbrhpag addb add OP1_0 OP2_7 regb8 uimm8 QI "pag")
-(arithmetic22 subbrhpag subb sub OP1_2 OP2_7 regb8 uimm8 QI "pag")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic23 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"dir"$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2 cbit))
-       ()
-  )
-)
-(arithmetic23 addcrhpof addc addc OP1_1 OP2_6 reg8 uimm16 HI "pof")
-(arithmetic23 subcrhpof subc subc OP1_3 OP2_6 reg8 uimm16 HI "pof")
-(arithmetic23 addcbrhpof addc addc OP1_1 OP2_6 reg8 uimm16 HI "pag")
-(arithmetic23 subcbrhpof subc subc OP1_3 OP2_6 reg8 uimm16 HI "pag")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic24 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"dir"$"op2)
-       (+ opc1 opc2 op1 (f-op-bit1 0) op2)
-       (set mode op1 (insn1 mode op1 op2 cbit))
-       ()
-  )
-)
-(arithmetic24 addcrhpof3 addc addc OP1_1 OP2_8 dr uimm3 HI "pof")
-(arithmetic24 subcrhpof3 subc subc OP1_3 OP2_8 dr uimm3 HI "pof")
-(arithmetic24 addcbrhpag3 addcb addc OP1_1 OP2_9 drb uimm3 QI "pag")
-(arithmetic24 subcbrhpag3 subcb subc OP1_3 OP2_9 drb uimm3 QI "pag")
-(arithmetic24 addcrhpag3 addc addc OP1_1 OP2_8 dr uimm3 HI "pag")
-(arithmetic24 subcrhpag3 subc subc OP1_3 OP2_8 dr uimm3 HI "pag")
-(arithmetic24 addcbrhpof3 addcb addc OP1_1 OP2_9 drb uimm3 QI "pof")
-(arithmetic24 subcbrhpof3 subcb subc OP1_3 OP2_9 drb uimm3 QI "pof")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic25 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"dir"$"op2)
-       (+ opc1 opc2 op1 op2 (f-op-bit8 0))
-       (set mode op1 (insn1 mode op1 op2 cbit))
-       ()
-  )
-)
-(arithmetic25 addcrbhpof addcb addc OP1_1 OP2_7 regb8 uimm8 QI "pof")
-(arithmetic25 subcrbhpof subcb subc OP1_3 OP2_7 regb8 uimm8 QI "pof")
-(arithmetic25 addcbrhpag addcb addc OP1_1 OP2_7 regb8 uimm8 QI "pag")
-(arithmetic25 subcbrhpag subcb subc OP1_3 OP2_7 regb8 uimm8 QI "pag")
-
-;add/sub register and immediate
-(define-pmacro (arithmetic10 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 (f-op-bit1 0) op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(arithmetic10 addri add add OP1_0 OP2_8 dr uimm3 HI)
-(arithmetic10 subri sub sub OP1_2 OP2_8 dr uimm3 HI)
-(arithmetic10 addbri addb add OP1_0 OP2_9 drb uimm3 QI)
-(arithmetic10 subbri subb sub OP1_2 OP2_9 drb uimm3 QI)
-
-;add/sub register and immediate
-(define-pmacro (arithmetic11 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(arithmetic11 addrim add add OP1_0 OP2_6 reg8 uimm16 HI)
-(arithmetic11 subrim sub sub OP1_2 OP2_6 reg8 uimm16 HI)
-
-;add/sub register and immediate
-(define-pmacro (arithmetic12 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 op2 (f-op-bit8 0))
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(arithmetic12 addbrim addb add OP1_0 OP2_7 regb8 uimm8 QI)
-(arithmetic12 subbrim subb sub OP1_2 OP2_7 regb8 uimm8 QI)
-
-;add/sub register and immediate with carry
-(define-pmacro (arithmetic13 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 (f-op-bit1 0) op2)
-       (set mode op1 (insn1 mode op1 op2 cbit))
-       ()
-  )
-)
-(arithmetic13 addcri addc addc OP1_1 OP2_8 dr uimm3 HI)
-(arithmetic13 subcri subc subc OP1_3 OP2_8 dr uimm3 HI)
-(arithmetic13 addcbri addcb addc OP1_1 OP2_9 drb uimm3 QI)
-(arithmetic13 subcbri subcb subc OP1_3 OP2_9 drb uimm3 QI)
-
-;add/sub register and immediate with carry
-(define-pmacro (arithmetic14 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2 cbit))
-       ()
-  )
-)
-(arithmetic14 addcrim addc addc OP1_1 OP2_6 reg8 uimm16 HI)
-(arithmetic14 subcrim subc subc OP1_3 OP2_6 reg8 uimm16 HI)
-
-;add/sub register and immediate with carry
-(define-pmacro (arithmetic15 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 op2 (f-op-bit8 0))
-       (set mode op1 (insn1 mode op1 op2 cbit))
-       ()
-  )
-)
-(arithmetic15 addcbrim addcb addc OP1_1 OP2_7 regb8 uimm8 QI)
-(arithmetic15 subcbrim subcb subc OP1_3 OP2_7 regb8 uimm8 QI)
-
-
-;add/sub registers
-(define-pmacro (arithmetic name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(arithmetic addr add add OP1_0 OP2_0 dr sr HI)
-(arithmetic subr sub sub OP1_2 OP2_0 dr sr HI)
-(arithmetic addbr addb add OP1_0 OP2_1 drb srb QI)
-(arithmetic subbr subb sub OP1_2 OP2_1 drb srb QI)
-
-;add/sub register and indirect memory
-(define-pmacro (arithmetic1 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",[$"op2"]")
-       (+ opc1 opc2 op1 (f-op-bit2 2) op2)
-       (set mode op1 (insn1 mode op1 (mem HI op2)))
-       ()
-  )
-)
-(arithmetic1 add2 add add OP1_0 OP2_8 dr sr2 HI)
-(arithmetic1 sub2 sub sub OP1_2 OP2_8 dr sr2 HI)
-(arithmetic1 addb2 addb add OP1_0 OP2_9 drb sr2 QI)
-(arithmetic1 subb2 subb sub OP1_2 OP2_9 drb sr2 QI)
-
-;add/sub register and indirect memory post increment
-(define-pmacro (arithmetic2 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",[$"op2"+]")
-       (+ opc1 opc2 op1 (f-op-bit2 3) op2)
-       (sequence ()
-	   (set mode op1 (insn1 mode op1 (mem HI op2)))
-	   (set HI op2 (add HI op2 (const 2)))
-       )
-       ()
-  )
-)
-(arithmetic2 add2i add add OP1_0 OP2_8 dr sr2 HI)
-(arithmetic2 sub2i sub sub OP1_2 OP2_8 dr sr2 HI)
-(arithmetic2 addb2i addb add OP1_0 OP2_9 drb sr2 QI)
-(arithmetic2 subb2i subb sub OP1_2 OP2_9 drb sr2 QI)
-
-;add/sub registers with carry
-(define-pmacro (arithmetic3 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2 cbit))
-       ()
-  )
-)
-(arithmetic3 addcr addc addc OP1_1 OP2_0 dr sr HI)
-(arithmetic3 subcr subc subc OP1_3 OP2_0 dr sr HI)
-(arithmetic3 addbcr addcb addc OP1_1 OP2_1 drb srb QI) 
-(arithmetic3 subbcr subcb subc OP1_3 OP2_1 drb srb QI)
-
-
-;add/sub register and indirect memory
-(define-pmacro (arithmetic4 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",[$"op2"]")
-       (+ opc1 opc2 op1 (f-op-bit2 2) op2)
-       (set mode op1 (insn1 mode op1 (mem HI op2) cbit))
-       ()
-  )
-)
-(arithmetic4 addcr2 addc addc OP1_1 OP2_8 dr sr2 HI)
-(arithmetic4 subcr2 subc subc OP1_3 OP2_8 dr sr2 HI)
-(arithmetic4 addbcr2 addcb addc OP1_1 OP2_9 drb sr2 QI)
-(arithmetic4 subbcr2 subcb subc OP1_3 OP2_9 drb sr2 QI)
-
-;add/sub register and indirect memory post increment
-(define-pmacro (arithmetic5 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",[$"op2"+]")
-       (+ opc1 opc2 op1 (f-op-bit2 3) op2)
-       (sequence ()
-           (set mode op1 (insn1 mode op1 (mem HI op2) cbit))
-           (set HI op2 (add HI op2 (const 2)))
-       )
-       ()
-  )
-)
-(arithmetic5 addcr2i addc addc OP1_1 OP2_8 dr sr2 HI)
-(arithmetic5 subcr2i subc subc OP1_3 OP2_8 dr sr2 HI)
-(arithmetic5 addbcr2i addcb addc OP1_1 OP2_9 drb sr2 QI)
-(arithmetic5 subbcr2i subcb subc OP1_3 OP2_9 drb sr2 QI)
-
-;add/sub register and direct memory
-(define-pmacro (arithmetic6 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-
-;add/sub register and direct memory
-(define-pmacro (arithmetic7 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set (mem HI op1) (insn1 (mem HI op1) op2))
-       ()
-  )
-)
-(arithmetic6 addrm2 add add OP1_0 OP2_2 regmem8 memgr8 HI)
-(arithmetic7 addrm3 add add OP1_0 OP2_4 memgr8 regmem8 HI)
-(arithmetic6 addrm add add OP1_0 OP2_2 reg8 memory HI)
-(arithmetic7 addrm1 add add OP1_0 OP2_4 memory reg8 HI)
-(arithmetic6 subrm3 sub sub OP1_2 OP2_2 regmem8 memgr8 HI)
-(arithmetic7 subrm2 sub sub OP1_2 OP2_4 memgr8 regmem8 HI)
-(arithmetic6 subrm1 sub sub OP1_2 OP2_2 reg8 memory HI)
-(arithmetic7 subrm sub sub OP1_2 OP2_4 memory reg8 HI)
-(arithmetic6 addbrm2 addb add OP1_0 OP2_3 regbmem8 memgr8 QI)
-(arithmetic7 addbrm3 addb add OP1_0 OP2_5 memgr8 regbmem8 QI)
-(arithmetic6 addbrm addb add OP1_0 OP2_3 regb8 memory QI)
-(arithmetic7 addbrm1 addb add OP1_0 OP2_5 memory regb8 QI)
-(arithmetic6 subbrm3 subb sub OP1_2 OP2_3 regbmem8 memgr8 QI)
-(arithmetic7 subbrm2 subb sub OP1_2 OP2_5 memgr8 regbmem8 QI)
-(arithmetic6 subbrm1 subb sub OP1_2 OP2_3 regb8 memory QI)
-(arithmetic7 subbrm subb sub OP1_2 OP2_5 memory regb8 QI)
-
-;add/sub registers with carry
-(define-pmacro (arithmetic8 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2 cbit))
-       ()
-  )
-)
-
-;add/sub registers with carry
-(define-pmacro (arithmetic9 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set (mem HI op1) (insn1 (mem HI op1) op2 cbit))
-       ()
-  )
-)
-(arithmetic8 addcrm2 addc addc OP1_1 OP2_2 regmem8 memgr8 HI)
-(arithmetic9 addcrm3 addc addc OP1_1 OP2_4  memgr8 regmem8 HI)
-(arithmetic8 addcrm addc addc OP1_1 OP2_2 reg8 memory HI)
-(arithmetic9 addcrm1 addc addc OP1_1 OP2_4  memory reg8 HI)
-(arithmetic8 subcrm3 subc subc OP1_3 OP2_2  regmem8 memgr8 HI)
-(arithmetic9 subcrm2 subc subc OP1_3 OP2_4 memgr8 regmem8 HI)
-(arithmetic8 subcrm1 subc subc OP1_3 OP2_2  reg8 memory HI)
-(arithmetic9 subcrm subc subc OP1_3 OP2_4 memory reg8 HI)
-(arithmetic8 addcbrm2 addcb addc OP1_1 OP2_3 regbmem8 memgr8 QI)
-(arithmetic9 addcbrm3 addcb addc OP1_1 OP2_5  memgr8 regbmem8 QI)
-(arithmetic8 addcbrm addcb addc OP1_1 OP2_3 regb8 memory QI)
-(arithmetic9 addcbrm1 addcb addc OP1_1 OP2_5  memory regb8 QI)
-(arithmetic8 subcbrm3 subcb subc OP1_3 OP2_3  regbmem8 memgr8 QI)
-(arithmetic9 subcbrm2 subcb subc OP1_3 OP2_5 memgr8 regbmem8 QI)
-(arithmetic8 subcbrm1 subcb subc OP1_3 OP2_3  regb8 memory QI)
-(arithmetic9 subcbrm subcb subc OP1_3 OP2_5 memory regb8 QI)
-
-; MUL Rwn,Rwm
-(dni muls "signed multiplication"
-     ((PIPE OS) (IDOC ALU))
-     "mul $src1,$src2"
-     (+ OP1_0 OP2_11 src1 src2)
-     (nop) ;; FIXME: (reg SI h-md 0)
-     ()
-)
-; MULU Rwn,Rwm
-(dni mulu "unsigned multiplication"
-     ((PIPE OS) (IDOC ALU))
-     "mulu $src1,$src2"
-     (+ OP1_1 OP2_11 src1 src2)
-     (nop) ;; FIXME: (reg SI h-md 0)
-     ()
-)
-; DIV Rwn
-(dni div "16-by-16 signed division"
-     ((PIPE OS) (IDOC ALU))
-     "div $srdiv"
-     (+ OP1_4 OP2_11 srdiv )
-     (sequence ()
-         (set HI (reg HI h-cr 6) (div HI (reg HI h-cr 6) srdiv))
-         (set HI (reg HI h-cr 7) (mod HI (reg HI h-cr 6) srdiv))
-     )
-     ()
-) 
-; DIVL Rwn
-(dni divl "32-by16 signed division"
-     ((PIPE OS) (IDOC ALU))
-     "divl $srdiv"
-     (+ OP1_6 OP2_11 srdiv )
-     (sequence ()
-         (set HI (reg HI h-cr 6) 0) ;; FIXME: (div SI (reg SI h-md 0) srdiv))
-	 (set HI (reg HI h-cr 7) 0) ;; FIXME: (mod SI (reg SI h-md 0) srdiv))
-     )
-     ()
-)
-; DIVLU Rwn 
-(dni divlu "32-by16 unsigned division"
-     ((PIPE OS) (IDOC ALU))
-     "divlu $srdiv"
-     (+ OP1_7 OP2_11 srdiv )
-     (sequence ()
-         (set HI (reg HI h-cr 6) 0) ;; FIXME: (udiv SI (reg SI h-md 0) srdiv))
-	 (set HI (reg HI h-cr 7) 0) ;; FIXME: (umod SI (reg SI h-md 0) srdiv))
-     )
-     ()
-)
-; DIVU Rwn
-(dni divu "16-by-16 unsigned division"
-     ((PIPE OS) (IDOC ALU))
-     "divu $srdiv"
-     (+ OP1_5 OP2_11 srdiv )
-     (sequence ()
-         (set HI (reg HI h-cr 6) (udiv HI (reg HI h-cr 6) srdiv))
-         (set HI (reg HI h-cr 7) (umod HI (reg HI h-cr 6) srdiv))
-     )
-     ()
-)
-
-;Integer one's complement
-; CPL Rwn
-(dni cpl "Integer Ones complement"
-     ((PIPE OS) (IDOC MISC))
-     "cpl $dr"
-     (+ OP1_9 OP2_1 dr (f-op-bit4 0))
-     (set dr (inv HI dr))
-     ()
-)
-
-;Bytes one's complement
-; CPLB Rbn
-(dni cplb "Byte Ones complement"
-     ((PIPE OS) (IDOC MISC))
-     "cplb $drb"
-     (+ OP1_11 OP2_1 drb (f-op-bit4 0))
-     (set drb (inv QI drb))
-     ()
-)
-;Integer two's complement
-; NEG Rwn
-(dni neg "Integer two's complement"
-     ((PIPE OS) (IDOC MISC))
-     "neg $dr"
-     (+ OP1_8 OP2_1 dr (f-op-bit4 0))
-     (set dr (neg HI dr))
-     ()
-)
-;Bytes two's complement
-; NEGB Rbn
-(dni negb "byte twos complement"
-     ((PIPE OS) (IDOC MISC))
-     "negb $drb"
-     (+ OP1_10 OP2_1 drb (f-op-bit4 0))
-     (set drb (neg QI drb))
-     ()
-)
-
-;****************************************************************
-;logical insn
-;****************************************************************
-;and/or/xor registers
-(define-pmacro (logical name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "logical" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-
-(logical andr and and OP1_6 OP2_0 dr sr HI)
-(logical orr or or OP1_7 OP2_0 dr sr HI)
-(logical xorr xor xor OP1_5 OP2_0 dr sr HI)
-(logical andbr andb and OP1_6 OP2_1 drb srb QI)
-(logical orbr orb or OP1_7 OP2_1 drb srb QI)
-(logical xorbr xorb xor OP1_5 OP2_1 drb srb QI)
-
-;and/or/xor register and immediate
-(define-pmacro (logical1 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "logical" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 (f-op-bit1 0) op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(logical1 andri and and OP1_6 OP2_8 dr uimm3 HI)
-(logical1 orri or or OP1_7 OP2_8 dr uimm3 HI)
-(logical1 xorri xor xor OP1_5 OP2_8 dr uimm3 HI)
-(logical1 andbri andb and OP1_6 OP2_9 drb uimm3 QI)
-(logical1 orbri orb or OP1_7 OP2_9 drb uimm3 QI)
-(logical1 xorbri xorb xor OP1_5 OP2_9 drb uimm3 QI)
-
-;and/or/xor register and immediate
-(define-pmacro (logical2 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "logical" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(logical2 andrim and and OP1_6 OP2_6 reg8 uimm16 HI)
-(logical2 orrim or or OP1_7 OP2_6 reg8 uimm16 HI)
-(logical2 xorrim xor xor OP1_5 OP2_6 reg8 uimm16 HI)
-
-;and/or/xor register and immediate
-(define-pmacro (logical3 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "logical" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 op2 (f-op-bit8 0))
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(logical3 andbrim andb and OP1_6 OP2_7 regb8 uimm8 QI)
-(logical3 orbrim orb or OP1_7 OP2_7 regb8 uimm8 QI)
-(logical3 xorbrim xorb xor OP1_5 OP2_7 regb8 uimm8 QI)
-
-;and/or/xor register and indirect memory
-(define-pmacro (logical4 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "logical" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",[$"op2"]")
-       (+ opc1 opc2 op1 (f-op-bit2 2) op2)
-       (set mode op1 (insn1 mode op1 (mem HI op2)))
-       ()
-  )
-)
-(logical4 and2 and and OP1_6 OP2_8 dr sr2 HI)
-(logical4 or2 or or OP1_7 OP2_8 dr sr2 HI)
-(logical4 xor2 xor xor OP1_5 OP2_8 dr sr2 HI)
-(logical4 andb2 andb and OP1_6 OP2_9 drb sr2 QI)
-(logical4 orb2 orb or OP1_7 OP2_9 drb sr2 QI)
-(logical4 xorb2 xorb xor OP1_5 OP2_9 drb sr2 QI)
-
-;and/or/xor register and indirect memory post increment
-(define-pmacro (logical5 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "logical" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",[$"op2"+]")
-       (+ opc1 opc2 op1 (f-op-bit2 3) op2)
-       (sequence ()
-	   (set mode op1 (insn1 mode op1 (mem HI op2)))
-	   (set HI op2 (add HI op2 (const 2)))
-       )
-       ()
-  )
-)
-(logical5 and2i and and OP1_6 OP2_8 dr sr2 HI)
-(logical5 or2i or or OP1_7 OP2_8 dr sr2 HI)
-(logical5 xor2i xor xor OP1_5 OP2_8 dr sr2 HI)
-(logical5 andb2i andb and OP1_6 OP2_9 drb sr2 QI)
-(logical5 orb2i orb or OP1_7 OP2_9 drb sr2 QI)
-(logical5 xorb2i xorb xor OP1_5 OP2_9 drb sr2 QI)
-
-;add/sub register and immediate
-(define-pmacro (logical7 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"dir"$"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set (mem HI op1) (insn1 (mem HI op1) op2 ))
-       ()
-  )
-)
-(logical7 andpofr and and OP1_6 OP2_2 reg8 upof16 HI "pof")
-(logical7 orpofr or or OP1_7 OP2_2 reg8 upof16 HI "pof")
-(logical7 xorpofr xor xor OP1_5 OP2_2 reg8 upof16 HI "pof")
-(logical7 andbpofr andb and OP1_6 OP2_3 regb8 upof16 QI "pof")
-(logical7 orbpofr orb or OP1_7 OP2_3 regb8 upof16 QI "pof")
-(logical7 xorbpofr xorb xor OP1_5 OP2_3 regb8 upof16 QI "pof")
-
-;add/sub register and immediate
-(define-pmacro (logical8 name insn insn1 opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"dir"$"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set (mem HI op1) (insn1 (mem HI op1) op2 ))
-       ()
-  )
-)
-(logical8 andrpofr and and OP1_6 OP2_4 upof16 reg8 HI "pof")
-(logical8 orrpofr or or OP1_7 OP2_4 upof16 reg8 HI "pof")
-(logical8 xorrpofr xor xor OP1_5 OP2_4 upof16 reg8 HI "pof")
-(logical8 andbrpofr andb and OP1_6 OP2_5 upof16 regb8 QI "pof")
-(logical8 orbrpofr orb or OP1_7 OP2_5 upof16 regb8 QI "pof")
-(logical8 xorbrpofr xorb xor OP1_5 OP2_5 upof16 regb8 QI "pof")
-
-;and/or/xor register and direct memory
-(define-pmacro (logical6 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-
-;and/or/xor register and direct memory
-(define-pmacro (logical7 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "arithmetic" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set (mem HI op1) (insn1 (mem HI op1) op2))
-       ()
-  )
-)
-(logical6 andrm2 and and OP1_6 OP2_2 regmem8 memgr8 HI)
-(logical7 andrm3 and and OP1_6 OP2_4 memgr8 regmem8 HI)
-(logical6 andrm and and OP1_6 OP2_2 reg8 memory HI)
-(logical7 andrm1 and and OP1_6 OP2_4 memory reg8 HI)
-(logical6 orrm3 or or OP1_7 OP2_2 regmem8 memgr8 HI)
-(logical7 orrm2 or or OP1_7 OP2_4 memgr8 regmem8 HI)
-(logical6 orrm1 or or OP1_7 OP2_2 reg8 memory HI)
-(logical7 orrm or or OP1_7 OP2_4 memory reg8 HI)
-(logical6 xorrm3 xor xor OP1_5 OP2_2 regmem8 memgr8 HI)
-(logical7 xorrm2 xor xor OP1_5 OP2_4 memgr8 regmem8 HI)
-(logical6 xorrm1 xor xor OP1_5 OP2_2 reg8 memory HI)
-(logical7 xorrm xor xor OP1_5 OP2_4 memory reg8 HI)
-(logical6 andbrm2 andb and OP1_6 OP2_3 regbmem8 memgr8 QI)
-(logical7 andbrm3 andb and OP1_6 OP2_5 memgr8 regbmem8 QI)
-(logical6 andbrm andb and OP1_6 OP2_3 regb8 memory QI)
-(logical7 andbrm1 andb and OP1_6 OP2_5 memory regb8 QI)
-(logical6 orbrm3 orb or OP1_7 OP2_3 regbmem8 memgr8 QI)
-(logical7 orbrm2 orb or OP1_7 OP2_5 memgr8 regbmem8 QI)
-(logical6 orbrm1 orb or OP1_7 OP2_3 regb8 memory QI)
-(logical7 orbrm orb or OP1_7 OP2_5 memory regb8 QI)
-(logical6 xorbrm3 xorb xor OP1_5 OP2_3 regbmem8 memgr8 QI)
-(logical7 xorbrm2 xorb xor OP1_5 OP2_5 memgr8 regbmem8 QI)
-(logical6 xorbrm1 xorb xor OP1_5 OP2_3 regb8 memory QI)
-(logical7 xorbrm xorb xor OP1_5 OP2_5 memory regb8 QI)
-
-;****************************************************************
-;logical insn
-;****************************************************************
-;mov registers
-(define-pmacro (move name insn opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "mov registers" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 op2)
-       ()
-  )
-)
-(move movr mov OP1_15 OP2_0 dr sr HI)
-(move movrb movb OP1_15 OP2_1 drb srb HI)
-
-;mov register and immediate
-(define-pmacro (move1 name insn opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set mode op1 op2)
-       ()
-  )
-)
-(move1 movri mov  OP1_14 OP2_0 dri u4 HI)
-(move1 movbri movb  OP1_14 OP2_1 srb u4 QI)
-
-; MOV Rwn,#data16
-(dni movi "move immediate to register"
-     ((PIPE OS) (IDOC MOVE))
-     "mov $reg8,$hash$uimm16"
-     (+ OP1_14 OP2_6 reg8 uimm16)
-     (set HI reg8 uimm16)
-     ()
-)
-
-; MOVB reg,#data8
-(dni movbi "move immediate to register"
-     ((PIPE OS) (IDOC MOVE))
-     "movb $regb8,$hash$uimm8"
-     (+ OP1_14 OP2_7 regb8 uimm8 (f-op-bit8 0))
-     (set QI regb8 uimm8)
-     ()
-)
-
-;move and indirect memory
-(define-pmacro (mov2 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",[$"op2"]")
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (mem HI op2))
-       ()
-  )
-)
-(mov2 movr2 mov OP1_10 OP2_8 dr sr HI)
-(mov2 movbr2 movb OP1_10 OP2_9 drb sr QI)
-
-;move and indirect memory
-(define-pmacro (mov3 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " [$"op2 "],$"op1)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (mem HI op2))
-       ()
-  )
-)
-(mov3 movri2 mov OP1_11 OP2_8 dr sr HI)
-(mov3 movbri2 movb OP1_11 OP2_9 drb sr QI)
-
-;move and indirect memory
-(define-pmacro (mov4 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " [-$"op2 "],$"op1)
-       (+ opc1 opc2 op1 op2)
-       (sequence ()
-	  (set op1 (sub op2 (const HI 2)))
-	  (set HI (mem HI op2) op1)
-       )
-       ()
-  )
-)
-(mov4 movri3 mov OP1_8 OP2_8 dr sr HI)
-(mov4 movbri3 movb OP1_8 OP2_9 drb sr QI)
-
-;mov register and indirect memory post increment
-(define-pmacro (mov5 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",[$"op2"+]")
-       (+ opc1 opc2 op1 op2)
-       (sequence ()
-	   (set mode op1 (mem HI op2))
-	   (set HI op2 (add HI op2 (const 2)))
-       )
-       ()
-  )
-)
-(mov5 mov2i mov OP1_9 OP2_8 dr sr HI)
-(mov5 movb2i movb OP1_9 OP2_9 drb sr HI)
-
-;mov indirect memory
-(define-pmacro (mov6 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " [$"op1 "],[$"op2"]")
-       (+ opc1 opc2 op1 op2)
-       (set HI (mem HI op1) (mem HI op2))
-       ()
-  )
-)
-(mov6 mov6i mov OP1_12 OP2_8 dr sr HI)
-(mov6 movb6i movb OP1_12 OP2_9 dr sr HI)
-
-;mov indirect memory
-(define-pmacro (mov7 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " [$"op1 "+],[$"op2"]")
-       (+ opc1 opc2 op1 op2)
-       (sequence ()
-          (set mode (mem mode op1) (mem mode op2))
-          (set mode op1 (add mode op1 (const mode 2)))
-       )
-       ()
-  )
-)
-(mov7 mov7i mov OP1_13 OP2_8 dr sr HI)
-(mov7 movb7i movb OP1_13 OP2_9 dr sr HI)
-
-;mov indirect memory
-(define-pmacro (mov8 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " [$"op1 "],[$"op2"+]")
-       (+ opc1 opc2 op1 op2)
-       (sequence ()
-          (set mode (mem mode op1) (mem mode op2))
-          (set mode op2 (add mode op2 (const mode 2)))
-       )
-       ()
-  )
-)
-(mov8 mov8i mov OP1_14 OP2_8 dr sr HI)
-(mov8 movb8i movb OP1_14 OP2_9 dr sr HI)
-
-;mov indirect memory
-(define-pmacro (mov9 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",[$"op2"+$hash$"uimm16"]")
-       (+ opc1 opc2 op1 op2 uimm16)
-       (sequence ((mode tmp1))
-	   (set mode tmp1 (add HI op2 uimm16))
-	   (set mode op1 (mem HI tmp1))
-       )
-       ()
-  )
-)
-(mov9 mov9i mov OP1_13 OP2_4 dr sr HI)
-(mov9 movb9i movb OP1_15 OP2_4 drb sr QI)
-
-;mov indirect memory
-(define-pmacro (mov10 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " [$"op2"+$hash$"uimm16 "],$"op1)
-       (+ opc1 opc2 op1 op2 uimm16)
-       (sequence ((mode tmp1))
-	   (set mode tmp1 (add HI op1 uimm16))
-	   (set mode (mem HI tmp1) op1)
-       )
-       ()
-  )
-)
-(mov10 mov10i mov OP1_12 OP2_4 dr sr HI)
-(mov10 movb10i movb OP1_14 OP2_4 drb sr QI)
-
-;move and indirect memory
-(define-pmacro (mov11 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " [$"op1 "],$"op2)
-       (+ opc1 opc2 (f-op-lbit4 0) op1 op2)
-       (set (mem mode op1) (mem HI op2))
-       ()
-  )
-)
-(mov11 movri11 mov OP1_8 OP2_4 src2 memory HI)
-(mov11 movbri11 movb OP1_10 OP2_4 src2 memory HI)
-
-;move and indirect memory
-(define-pmacro (mov12 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op2 ",[$"op1"]")
-       (+ opc1 opc2 (f-op-lbit4 0) op1 op2)
-       (set (mem HI op2) (mem mode op1))
-       ()
-  )
-)
-(mov12 movri12 mov OP1_9 OP2_4 src2 memory HI)
-(mov12 movbri12 movb OP1_11 OP2_4 src2 memory HI)
-
-(define-pmacro (movemem3 name insn opc1 opc2 op1 op2  dir)
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$hash$"dir"$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set HI op1 op2)
-       ()
-  )
-)
-(movemem3 movehm5 mov OP1_14 OP2_6 regoff8 upof16 "pof")
-(movemem3 movehm6 mov OP1_14 OP2_6 regoff8 upag16 "pag")
-(movemem3 movehm7 mov OP1_14 OP2_6 regoff8 useg16 "segm")
-(movemem3 movehm8 mov OP1_14 OP2_6 regoff8 usof16 "sof")
-
-(define-pmacro (movemem4 name insn opc1 opc2 op1 op2 dir)
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$hash$"dir"$"op2)
-       (+ opc1 opc2 op1 op2 (f-op-bit8 0))
-       (set QI op1 op2)
-       ()
-  )
-)
-(movemem4 movehm9 movb OP1_14 OP2_7 regb8 uimm8 "pof")
-(movemem4 movehm10 movb OP1_14 OP2_7 regoff8 uimm8 "pag")
-
-(define-pmacro (movemem name insn opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$"dir"$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (mem HI op2))
-       ()
-  )
-)
-(movemem movrmp mov OP1_15 OP2_2 regoff8 upof16 HI "pof")
-(movemem movrmp1 movb OP1_15 OP2_3 regb8 upof16 QI "pof")
-(movemem movrmp2 mov OP1_15 OP2_2 regoff8 upag16 HI "pag")
-(movemem movrmp3 movb OP1_15 OP2_3 regb8 upag16 QI "pag")
-
-(define-pmacro (movemem1 name insn opc1 opc2 op1 op2 dir)
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"dir"$"op1 ",$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set (mem HI op1) op2 )
-       ()
-  )
-)
-(movemem1 movrmp4 mov OP1_15 OP2_6  upof16 regoff8 "pof")
-(movemem1 movrmp5 movb OP1_15 OP2_7 upof16 regb8 "pof")
-
-(define-pmacro (movemem2 name insn opc1 opc2 op1 op2 mode dir)
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$hash$"dir"$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set mode op1 op2)
-       ()
-  )
-)
-(movemem2 movehm1 mov OP1_14 OP2_0 dri u4 HI "pof")
-(movemem2 movehm2 movb OP1_14 OP2_1 srb u4 QI "pof")
-(movemem2 movehm3 mov OP1_14 OP2_0 dri u4 HI "pag")
-(movemem2 movehm4 movb OP1_14 OP2_1 srb u4 QI "pag")
-
-;move register and direct memory
-(define-pmacro (move12 name insn opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (mem HI op2))
-       ()
-  )
-)
-
-;move register and direct memory
-(define-pmacro (move13 name insn opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set (mem HI op1) op2)
-       ()
-  )
-)
-(move12 mve12 mov OP1_15 OP2_2 regmem8 memgr8 HI)
-(move13 mve13 mov OP1_15 OP2_6 memgr8 regmem8 HI)
-(move12 mover12 mov OP1_15 OP2_2 reg8 memory HI)
-(move13 mvr13 mov OP1_15 OP2_6 memory reg8 HI)
-(move12 mver12 movb OP1_15 OP2_3 regbmem8 memgr8 QI)
-(move13 mver13 movb OP1_15 OP2_7 memgr8 regbmem8 QI)
-(move12 movr12 movb OP1_15 OP2_3 regb8 memory QI)
-(move13 movr13 movb OP1_15 OP2_7 memory regb8 QI)
-
-; MOVBS Rw,Rb
-(dni movbsrr "mov byte register with sign extension to word register"
-     ((PIPE OS) (IDOC MOVE))
-     "movbs $sr,$drb"
-     (+ OP1_13 OP2_0 drb sr)
-     (sequence ()
-         (if (and QI drb (const 128))
-	     (set HI sr (or HI (const HI 65280) drb)))
-         (set HI sr (and HI (const HI 255) drb)) 
-     )
-     ()
-)
-
-; MOVBZ Rw,Rb
-(dni movbzrr "mov byte register with zero extension to word register"
-     ((PIPE OS) (IDOC MOVE))
-     "movbz $sr,$drb"
-     (+ OP1_12 OP2_0 drb sr)
-     (set HI sr (and HI (const HI 255) drb))
-     ()
-)
-
-; MOVBS reg,POF mem
-(dni movbsrpofm "mov memory to byte register"
-     ((PIPE OS) (IDOC MOVE))
-     "movbs $regmem8,$pof$upof16"
-     (+ OP1_13 OP2_2 regmem8 upof16)
-     (set QI regmem8 (mem HI upof16))
-     ()
-)
-
-; MOVBS pof,reg
-(dni movbspofmr "mov memory to byte register"
-     ((PIPE OS) (IDOC MOVE))
-     "movbs $pof$upof16,$regbmem8"
-     (+ OP1_13 OP2_5 upof16 regbmem8 )
-     (set QI  (mem HI upof16) regbmem8)
-     ()
-)
-
-; MOVBZ reg,POF mem
-(dni movbzrpofm "mov memory to byte register"
-     ((PIPE OS) (IDOC MOVE))
-     "movbz $reg8,$pof$upof16"
-     (+ OP1_12 OP2_2 reg8 upof16)
-     (set QI reg8 (mem HI upof16))
-     ()
-)
-
-; MOVBZ pof,reg
-(dni movbzpofmr "mov memory to byte register"
-     ((PIPE OS) (IDOC MOVE))
-     "movbz $pof$upof16,$regb8"
-     (+ OP1_12 OP2_5 upof16 regb8 )
-     (set QI  (mem HI upof16) regb8)
-     ()
-)
-
-;move register and direct memory
-(define-pmacro (move14 name insn opc1 opc2 op1 op2 )
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set HI op1 (and HI (const HI 255) (mem QI op2)))
-       ()
-  )
-)
-
-;move register and direct memory
-(define-pmacro (move15 name insn opc1 opc2 op1 op2 )
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set HI (mem HI op1) (and HI (const HI 255) op2))
-       ()
-  )
-)
-(move14 movebs14 movbs OP1_13 OP2_2 regmem8 memgr8 )
-(move15 movebs15 movbs OP1_13 OP2_5 memgr8 regbmem8 )
-(move14 moverbs14 movbs OP1_13 OP2_2 reg8 memory )
-(move15 movrbs15 movbs OP1_13 OP2_5 memory regb8 )
-(move14 movebz14 movbz OP1_12 OP2_2 regmem8 memgr8 )
-(move15 movebz15 movbz OP1_12 OP2_5 memgr8 regbmem8 )
-(move14 moverbz14 movbz OP1_12 OP2_2 reg8 memory )
-(move15 movrbz15 movbz OP1_12 OP2_5 memory regb8 )
-
-
-;mov registers
-(define-pmacro (moveb1 name insn opc1 opc2 op1 op2)
-  (dni name 
-       (.str name "move" )
-       ((PIPE OS) (IDOC MOVE))
-       (.str insn " $"op2 ",$"op1)
-       (+ opc1 opc2 op1 op2)
-       (sequence ()
-           (if (and QI op1 (const 128))
-	       (set HI op2 (or HI (const HI 65280) op1)))
-           (set HI op2 (and HI (const HI 255) op1)) 
-       )
-       ()
-  )
-)
-(moveb1 movrbs movbs OP1_13 OP2_0 drb sr )
-(moveb1 movrbz movbz OP1_12 OP2_0 drb sr )
-
-
-
-;jump and call insns
-;******************************************************************
-;Absolute conditional jump
-(define-pmacro (jmpabs name insn)
-  (dni name
-     (.str name "Absolute conditional jump" )
-     ((PIPE OS) (IDOC JMP))
-     (.str insn " $extcond,$caddr")
-     (+ OP1_14 OP2_10 extcond (f-op-bitone 0) bitone bit01 caddr)
-     (sequence ((HI tmp1) (HI tmp2))
-        (set tmp1 (mem HI caddr))
-        (set tmp2 (sub HI pc (mem HI caddr)))
-        (if (gt tmp2 (const 0)) ;; FIXME: (lt tmp2 (const 32)) (eq tmp2 (const 32))
-            (set bitone (const 1)))
-	(if (lt tmp2 (const 0)) ;; FIXME: (eq tmp2 (const 0)) (gt tmp2 (const 32))
-            (set bitone (const 0)))
-        (if (eq extcond (const 1)) ;; FIXME: (ne extcond cc_Z))
-             (set bit01 (const 0))    
-             (set HI pc (mem HI caddr)))
-	(if (ne extcond (const 1)) ;; FIXME: (eq extcond cc_Z))
-             (set bit01 (const 1))
-             (set HI pc (add HI pc (const 2))))
-     )
-     ()
-  )
-)
-
-(jmpabs jmpa0 jmpa+)
-(jmpabs jmpa1 jmpa)
-
-; JMPA- cc,caddr
-(dni jmpa- "Absolute conditional jump"
-     (COND-CTI (PIPE OS) (IDOC JMP))
-     "jmpa- $extcond,$caddr"
-     (+ OP1_14 OP2_10 extcond (f-op-bitone 0) bitone (f-op-1bit 1) caddr)
-     (sequence ((HI tmp1) (HI tmp2))
-        (set tmp1 (mem HI caddr))
-        (set tmp2 (sub HI pc (mem HI caddr)))
-        (if (gt tmp2 (const 0)) ;; FIXME: (lt tmp2 (const 32)) (eq tmp2 (const 32))
-            (set bitone (const 1)))
-	(if (lt tmp2 (const 0)) ;; FIXME: (eq tmp2 (const 0)) (gt tmp2 (const 32))
-            (set bitone (const 0)))
-        (set HI pc (add HI pc (const 2)))
-     )
-     ()
-)
-
-; JMPI cc,[Rwn]
-(dni jmpi "Indirect conditional jump"
-     (COND-CTI (PIPE OS) (IDOC JMP))
-     "jmpi $icond,[$sr]"
-     (+ OP1_9 OP2_12 icond sr)
-     (sequence ()
-        (if (eq icond (const 1))
-             (set HI pc (mem HI sr)))
-             (set HI pc (add HI pc (const 2)))
-     )
-     ()
-)
-
-(define-pmacro (jmprel name insn opc1)
-  (dni name
-       (.str name "conditional" )
-       (COND-CTI (PIPE OS) (IDOC JMP))
-       (.str insn " $cond,$rel")
-       (+ opc1 OP2_13 rel)
-       (sequence ()
-           (if (eq cond (const 1))
-               (sequence ()
-		    (if (lt QI rel (const 0))
-			(sequence ()
-				  ;; FIXME: (neg QI rel)
-				  ;; FIXME: (add QI rel (const 1))
-				  ;; FIXME: (mul QI rel (const 2))
-				  (set HI pc (sub HI pc rel))
-				  ))
-                    (set HI pc (add HI pc (mul QI rel (const 2))))
-               )
-            )
-            (set HI pc pc)
-       )
-       ()
-  )
-)
-
-(jmprel jmpr_nenz jmpr  COND_NE_NZ )
-(jmprel jmpr_sgt jmpr  COND_SGT )
-(jmprel jmpr_z jmpr  COND_Z )
-(jmprel jmpr_v jmpr  COND_V )
-(jmprel jmpr_nv jmpr  COND_NV )
-(jmprel jmpr_n jmpr  COND_N )
-(jmprel jmpr_nn jmpr  COND_NN )
-(jmprel jmpr_c jmpr  COND_C )
-(jmprel jmpr_nc jmpr  COND_NC )
-(jmprel jmpr_eq jmpr  COND_EQ )
-(jmprel jmpr_ne jmpr  COND_NE )
-(jmprel jmpr_ult jmpr  COND_ULT )
-(jmprel jmpr_ule jmpr  COND_ULE )
-(jmprel jmpr_uge jmpr  COND_UGE )
-(jmprel jmpr_ugt jmpr  COND_UGT )
-(jmprel jmpr_sle jmpr  COND_SLE )
-(jmprel jmpr_sge jmpr  COND_SGE )
-(jmprel jmpr_net jmpr  COND_NET )
-(jmprel jmpr_uc jmpr  COND_UC )
-(jmprel jmpr_slt jmpr  COND_SLT )
-
-
-
-
-; JMPS seg,caddr
-(dni jmpseg "absolute inter-segment jump"
-     (UNCOND-CTI(PIPE OS) (IDOC JMP))
-     "jmps $hash$segm$useg8,$hash$sof$usof16"
-     (+ OP1_15 OP2_10 seg usof16)
-     (sequence ()
-          (if (eq BI sgtdisbit (const BI 0))
-	      (set QI (reg h-cr 10) useg8))
-	  ;; FIXME: previous indentation suggested this nop was the `else'
-	  ;; clause of the previous `if'.
-	  (nop)
-          (set HI pc usof16)
-     )
-     ()
-)
-
-; JMPS seg,caddr
-(dni jmps "absolute inter-segment jump"
-     (UNCOND-CTI(PIPE OS) (IDOC JMP))
-     "jmps $seg,$caddr"
-     (+ OP1_15 OP2_10 seg caddr)
-     (sequence ()
-          (if (eq BI sgtdisbit (const BI 0))
-	      (set QI (reg h-cr 10) seg))
-	  ;; FIXME: previous indentation suggested this nop was the `else'
-	  ;; clause of the previous `if'.
-	  (nop)
-          (set HI pc caddr)
-     )
-     ()
-)
-
-
-;relative jump if bit set
-;JB bitaddrQ.q,rel
-(dni jb "relative jump if bit set"
-     ((PIPE OS) (IDOC JMP))
-     "jb $genreg$dot$qlobit,$relhi"
-     (+ OP1_8 OP2_10 genreg relhi qlobit (f-qhibit 0))
-     (sequence ((HI tmp1) (HI tmp2))
-          (set HI tmp1 genreg)
-          (set HI tmp2 (const 1))
-          ;;(sll HI tmp2 qlobit) - FIXME: missing (set ...)
-          (set HI tmp2 (and tmp1 tmp2))
-          (if (eq tmp2 (const 1)) ;; FIXME: (ne tmp2 0)?
-             (sequence ()
-                (if (lt QI relhi (const 0))
-		    (set HI pc (add HI pc (mul QI relhi (const 2)))))
-             ))
-         (set HI pc (add HI pc (const 4))) ;; FIXME: Is this right?
-     )
-     ()
-)
-
-;relative jump if bit set and clear bit
-;JBC bitaddrQ.q,rel
-(dni jbc "relative jump if bit set and clear bit"
-     ((PIPE OS) (IDOC JMP))
-     "jbc $genreg$dot$qlobit,$relhi"
-     (+ OP1_10 OP2_10 genreg relhi qlobit (f-qhibit 0))
-     (sequence ((HI tmp1) (HI tmp2))
-          (set HI tmp1 genreg)
-          (set HI tmp2 (const 1))
-          ;;(sll HI tmp2 qlobit) - FIXME: missing (set ...)
-          (set HI tmp2 (and tmp1 tmp2))
-          (if (eq tmp2 (const 1)) ;; FIXME: (ne tmp2 0)?
-             (sequence ()
-		;; FIXME: The `else' clause has several statements.
-                (if (lt QI relhi (const 0))
-		    (set tmp2 (const 1))
-		    (set tmp1 genreg)
-		    ;; FIXME: (sll tmp2 qlobit)
-		    ;; FIXME: (inv tmp2)
-		    (set HI tmp1 (and tmp1 tmp2))
-		    (set HI genreg tmp1)
-		    (set HI pc (add HI pc (mul QI relhi (const 2)))))
-             ))
-          (set HI pc (add HI pc (const 4))) ;; FIXME: Is this right?
-     )
-     ()
-)
-
-;relative jump if bit set
-;JNB bitaddrQ.q,rel
-(dni jnb "relative jump if bit not set"
-     ((PIPE OS) (IDOC JMP))
-     "jnb $genreg$dot$qlobit,$relhi"
-     (+ OP1_9 OP2_10 genreg relhi qlobit (f-qhibit 0))
-     (sequence ((HI tmp1) (HI tmp2))
-          (set HI tmp1 genreg)
-          (set HI tmp2 (const 1))
-          ;;(sll HI tmp2 qlobit) - FIXME: missing (set ...)
-          (set HI tmp2 (and tmp1 tmp2))
-          (if (eq tmp2 (const 0)) ;; FIXME: (ne tmp2 0)?
-             (sequence ()
-                (if (lt QI relhi (const 0))
-		    (set HI pc (add HI pc (mul QI relhi (const 2)))))
-             ))
-          (set HI pc (add HI pc (const 4))) ;; FIXME: Is this right?
-     )
-     ()
-)
-
-;relative jump if bit not set and set bit
-;JNBS bitaddrQ.q,rel
-(dni jnbs "relative jump if bit not set and set bit"
-     ((PIPE OS) (IDOC JMP))
-     "jnbs $genreg$dot$qlobit,$relhi"
-     (+ OP1_11 OP2_10 genreg relhi qlobit (f-qhibit 0))
-     (sequence ((HI tmp1) (HI tmp2))
-          (set HI tmp1 genreg)
-          (set HI tmp2 (const 1))
-          ;;(sll HI tmp2 qlobit) - FIXME: missing (set ...)
-          (set HI tmp2 (and tmp1 tmp2))
-          (if (eq tmp2 (const 0))
-             (sequence ()
-		;; FIXME: The `else' clause has several statements.
-                (if (lt QI relhi (const 0))
-		    (set tmp2 (const 1))
-		    (set tmp1 reg8)
-		    ;; FIXME: (sll tmp2 qbit)
-		    (set BI tmp1(or tmp1 tmp2))
-		    (set HI reg8 tmp1)
-		    (set HI pc (add HI pc (mul QI relhi (const 2)))))
-             ))
-          (set HI pc (add HI pc (const 4))) ;; FIXME: Is this right?
-     )
-     ()
-)
-
-
-;Absolute conditional call
-(define-pmacro (callabs name insn)
-  (dni name
-     (.str name "Absolute conditional call" )
-     ((PIPE OS) (IDOC JMP))
-     (.str insn " $extcond,$caddr")
-     (+ OP1_12 OP2_10 extcond (f-op-2bit 0) bit01 caddr)
-     (sequence ()
-        (if (eq extcond (const 1))
-          (set bit01 (const 0))
-          (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-	  (set HI (mem HI (reg h-cr 9)) pc)
-	  (set HI pc (mem HI caddr)))
-        (if (ne extcond (const 1))
-          (set bit01 (const 1))
-          (set HI pc (add HI pc (const 2))))
-     )
-     ()
-  )
-)
-
-(callabs calla0 calla+)
-(callabs calla1 calla)
-
-; CALLA- cc,caddr
-(dni calla- "Absolute conditional call"
-     (COND-CTI (PIPE OS) (IDOC JMP))
-     "calla- $extcond,$caddr"
-     (+ OP1_12 OP2_10 extcond (f-op-bit3 1) caddr)
-     (sequence ()
-        (if (eq extcond (const 1))
-          (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-	  (set HI (mem HI (reg h-cr 9)) pc)
-	  (set HI pc (mem HI caddr)))
-        (set HI pc (add HI pc (const 2)))
-     )
-     ()
-)
-
-; CALLI cc,[Rwn]
-(dni calli "indirect subroutine call"
-     (COND-CTI (PIPE OS) (IDOC JMP))
-     "calli $icond,[$sr]"
-     (+ OP1_10 OP2_11 icond sr)
-     (sequence ()
-         (if (eq icond (const 1))
-             (sequence ()
-	             (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-        	     (set HI (mem HI (reg h-cr 9)) pc)
-        	     (set HI pc (mem HI sr))
-             )
-         )
-         (set HI pc (add HI pc (const 2)))
-     )
-     ()
-)
-
-; CALLR rel
-(dni callr "Call subroutine with PC relative signed 8 bit offset"
-     ( COND-CTI (PIPE OS) (IDOC JMP))
-     "callr $rel"
-     (+ OP1_11 OP2_11 rel)
-     (sequence ()
-          (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-	  (set HI (mem HI (reg h-cr 9)) pc)
-          (sequence ()
-                (if (lt QI rel (const 0))
-		    (sequence ()
-			      ;; FIXME: (neg QI rel)
-			      ;; FIXME: (add QI rel (const 1))
-			      ;; FIXME: (mul QI rel (const 2))
-			      (set HI pc (sub HI pc rel))
-		    ))
-                (set HI pc (add HI pc (mul QI rel (const 2))))
-          )
-      )
-      ()
-)
-
-
-; CALLS seg,caddr
-(dni callseg "call inter-segment subroutine"
-     (UNCOND-CTI (PIPE OS) (IDOC JMP))
-     "calls $hash$segm$useg8,$hash$sof$usof16"
-     (+ OP1_13 OP2_10 useg8 usof16)
-     (sequence ()
-          (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-          (set HI (mem HI (reg h-cr 9)) (reg h-cr 10))
-          (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-          (set HI (mem HI (reg h-cr 9)) pc)
-          (if (eq BI sgtdisbit (const BI 0))
-	      (set QI (reg h-cr 10) useg8))
-	  ;; FIXME: previous indentation suggested this nop was the `else'
-	  ;; clause of the previous `if'.
-	  (nop)
-          (set HI pc usof16)
-     )
-     ()
-)
-
-; CALLS seg,caddr
-(dni calls "call inter-segment subroutine"
-     (UNCOND-CTI (PIPE OS) (IDOC JMP))
-     "calls $seg,$caddr"
-     (+ OP1_13 OP2_10 seg caddr)
-     (sequence ()
-          (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-          (set HI (mem HI (reg h-cr 9)) (reg h-cr 10))
-          (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-          (set HI (mem HI (reg h-cr 9)) pc)
-          (if (eq BI sgtdisbit (const BI 0))
-	      (set QI (reg h-cr 10) seg))
-	  ;; FIXME: previous indentation suggested this nop was the `else'
-	  ;; clause of the previous `if'.
-	  (nop)
-          (set HI pc caddr)
-     )
-     ()
-)
-
-; PCALL reg,caddr
-(dni pcall "push word and call absolute subroutine"
-       (UNCOND-CTI (PIPE OS) (IDOC JMP))
-       "pcall $reg8,$caddr"
-       (+ OP1_14 OP2_2 reg8 caddr)
-       (sequence ((HI tmp1))
-            (set HI tmp1 reg8)
- 	    (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-	    (set HI (mem HI (reg h-cr 9)) tmp1)
- 	    (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-	    (set HI (mem HI (reg h-cr 9)) pc)
-            (set HI pc caddr)
-       )
-       ()
-)
-
-; TRAP #uimm7
-(dni trap "software trap"
-       (UNCOND-CTI (PIPE OS) (IDOC JMP))
-       "trap $hash$uimm7"
-       (+ OP1_9 OP2_11 uimm7 (f-op-1bit 0))
-       (sequence ()
-	    (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-            (set HI (mem HI (reg h-cr 9)) (reg h-cr 4))
-	    (if (eq BI sgtdisbit (const BI 0))
-		(set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-		(set HI (mem HI (reg h-cr 9)) (reg h-cr 10) )
-	    )
-	    (nop)
-            (set HI (reg h-cr 10) (reg h-cr 11))
-            (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
-            (set HI (mem HI (reg h-cr 9)) pc)
-            (set HI pc (mul QI uimm7 (const 4)))
-       )
-       ()
-)
-
-;Return insns
-; RET
-(dni ret "return from subroutine"
-       (UNCOND-CTI (PIPE OS) (IDOC JMP))
-       "ret"
-       (+ OP1_12 OP2_11 (f-op-bit8 0))
-       (sequence ()
-           (set HI pc (mem HI (reg h-cr 9)))
-           (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
-       )
-       ()
-)
-
-; RETS 
-(dni rets "return from inter-segment sunroutine"
-       (UNCOND-CTI (PIPE OS) (IDOC JMP))
-       "rets"
-       (+ OP1_13 OP2_11 (f-op-bit8 0))
-       (sequence ()
-           (set HI pc (mem HI (reg h-cr 9)))
-           (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
-	   (if (eq BI sgtdisbit (const BI 0))
-	       (set HI (reg h-cr 10) (mem HI (reg h-cr 9)))
-           )
-	   (nop)
-     	   (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
-       )
-       ()
-)
-
-; RETP reg
-(dni retp "return from subroutine and pop word register"
-       (UNCOND-CTI (PIPE OS) (IDOC JMP))
-       "retp $reg8"
-       (+ OP1_14 OP2_11 reg8)
-       (sequence ((HI tmp1))
-            (set HI pc (mem HI (reg h-cr 9)))
-            (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
-	    (set HI tmp1 (mem HI (reg h-cr 9)))
-            (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
-            (set HI reg8 tmp1)
-       )
-       ()
-)
-
-; RETI
-(dni reti "return from ISR"
-       (UNCOND-CTI (PIPE OS) (IDOC JMP))
-       "reti"
-       (+ OP1_15 OP2_11 (f-op-lbit4 8) (f-op-bit4 8))
-       (sequence ()
-           (set HI pc (mem HI (reg h-cr 9)))
-           (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
-	   (if (eq BI sgtdisbit (const BI 0))
-	       (sequence ()
-			 (set HI (reg h-cr 10) (mem HI (reg h-cr 9)))
-			 (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
-               )
-           )
-	   (nop)
-           (set HI (reg h-cr 4) (mem HI (reg h-cr 9)))
-     	   (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
-       )
-       ()
-)
-
-;stack operation insn
-;******************************************************************
-; POP reg
-(dni pop "restore register from system stack"
-     ((PIPE OS) (IDOC MISC))
-     "pop $reg8"
-     (+ OP1_15 OP2_12 reg8)
-     (sequence ((HI tmp1))
-	   (set HI tmp1 (mem HI (reg h-cr 9)))
-	   (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))         
-           (set HI reg8 tmp1)
-     )
-     ()
-)
-
-; PUSH reg
-(dni push "save register on system stack"
-     ((PIPE OS) (IDOC MISC))
-     "push $reg8"
-     (+ OP1_14 OP2_12 reg8)
-     (sequence ((HI tmp1))
-	   (set HI tmp1 reg8)
-	   (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))         
-           (set HI (mem HI (reg h-cr 9)) tmp1)
-     )
-     ()
-)
-
-;context switching insns
-; SCXT reg,#data16
-(dni scxti "Push word register on stack and update same with immediate data"
-     ((PIPE OS) (IDOC MISC))
-     "scxt $reg8,$hash$uimm16"
-     (+ OP1_12 OP2_6 reg8 uimm16)
-     (sequence ((HI tmp1) (HI tmp2))
-         (set HI tmp1 reg8)
-         (set HI tmp2 uimm16)
-         ;; FIXME: (sub HI (reg HI h-cr 9) (const 2))
-         (set HI (reg HI h-cr 9) tmp1)
-         (set HI reg8 tmp2)
-     )
-     ()
-)
-
-; SCXT reg,POF mem
-(dni scxtrpofm "mov memory to byte register"
-     ((PIPE OS) (IDOC MOVE))
-     "scxt $reg8,$pof$upof16"
-     (+ OP1_13 OP2_6 reg8 upof16)
-     (set QI reg8 (mem HI upof16))
-     ()
-)
-
-; SCXT regmem8,memgr8
-(dni scxtmg "Push word register on stack and update same with direct memory"
-     ((PIPE OS) (IDOC MISC))
-     "scxt $regmem8,$memgr8"
-     (+ OP1_13 OP2_6 regmem8 memgr8)
-     (sequence ((HI tmp1) (HI tmp2))
-         (set HI tmp1 regmem8)
-         (set HI tmp2 memgr8)
-         ;; FIXME: (sub HI (reg HI h-cr 9) (const 2))
-         (set HI (reg HI h-cr 9) tmp1)
-         (set HI regmem8 tmp2)
-     )
-     ()
-)
-
-; SCXT reg,mem
-(dni scxtm "Push word register on stack and update same with direct memory"
-     ((PIPE OS) (IDOC MISC))
-     "scxt $reg8,$memory"
-     (+ OP1_13 OP2_6 reg8 memory)
-     (sequence ((HI tmp1) (HI tmp2))
-         (set HI tmp1 reg8)
-         (set HI tmp2 memory)
-         ;; FIXME: (sub HI (reg HI h-cr 9) (const 2))
-         (set HI (reg HI h-cr 9) tmp1)
-         (set HI reg8 tmp2)
-     )
-     ()
-)
-
-;No operation
-; NOP 
-(dni nop "nop"
-     ((PIPE OS) (IDOC MISC))
-     "nop"
-     (+ OP1_12 OP2_12 (f-op-bit8 0))
-     ()
-     ()
-)
-
-;*********system control instructions *********************/
-
-(define-pmacro (sysctrl name insn opc1 opc2 op1 op2 op3)
-  (dni name 
-       (.str name "miscellaneous" )
-       ((PIPE OS) (IDOC MISC))
-       (.str insn )
-       (+ opc1 opc2 (f-op-lbit4 op1) (f-op-bit4 op2) (f-data8 op3) (f-op-bit8 op3))
-       ()
-       ()
-  )
-)
-(sysctrl srstm srst  OP1_11 OP2_7 4 8 183 )
-(sysctrl idlem idle  OP1_8 OP2_7 7 8 135)
-(sysctrl pwrdnm pwrdn  OP1_9 OP2_7 6 8 151)
-(sysctrl diswdtm diswdt  OP1_10 OP2_5 5 10 165)
-(sysctrl enwdtm enwdt  OP1_8 OP2_5 7 10 133)
-(sysctrl einitm einit  OP1_11 OP2_5 4 10 181)
-(sysctrl srvwdtm srvwdt  OP1_10 OP2_7 5 8 167 )
-
-;s/w brk
-; SBRK 
-(dni sbrk "sbrk"
-     ((PIPE OS) (IDOC MISC))
-     "sbrk"
-     (+ OP1_8 OP2_12 (f-op-bit8 0))
-     ()
-     ()
-)
-
-; atomic sequence
-; ATOMIC #irang2
-(dni atomic "begin atomic sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "atomic $hash$uimm2"
-     (+ OP1_13 OP2_1 (f-op-lbit2 0) uimm2 (f-op-bit4 0))
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;extended register sequence
-; EXTR #irang2
-(dni extr "begin extended register sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "extr $hash$uimm2"
-     (+ OP1_13 OP2_1 (f-op-lbit2 2) uimm2 (f-op-bit4 0))
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;extended page sequence
-; EXTP Rw,#irang2
-(dni extp "begin extended page sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "extp $sr,$hash$uimm2"
-     (+ OP1_13 OP2_12 (f-op-lbit2 1) uimm2 sr)
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;extended page sequence
-; EXTP #pag10,#irang2
-(dni extp1 "begin extended page sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "extp $hash$pagenum,$hash$uimm2"
-     (+ OP1_13 OP2_7 (f-op-lbit2 1) uimm2 (f-op-bit4 0) pagenum (f-qlobit 0) (f-qlobit2 0))
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-; EXTP #pag10,#irang2
-(dni extpg1 "begin extended page sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "extp $hash$pag$upag16,$hash$uimm2"
-     (+ OP1_13 OP2_7 (f-op-lbit2 1) uimm2 (f-op-bit4 0) upag16 )
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;extended page and register sequence
-; EXTPR Rw,#irang2
-(dni extpr "begin extended page and register sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "extpr $sr,$hash$uimm2"
-     (+ OP1_13 OP2_12 (f-op-lbit2 3) uimm2 sr)
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;extended page and register sequence
-; EXTPR #pag10,#irang2
-(dni extpr1 "begin extended page sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "extpr $hash$pagenum,$hash$uimm2"
-     (+ OP1_13 OP2_7 (f-op-lbit2 3) uimm2 (f-op-bit4 0) pagenum (f-qlobit 0) (f-qlobit2 0))
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;extended segment sequence
-; EXTS Rw,#irang2
-(dni exts "begin extended segment sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "exts $sr,$hash$uimm2"
-     (+ OP1_13 OP2_12 (f-op-lbit2 0) uimm2 sr)
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;extended segment sequence
-; EXTS #seg8,#irang2
-(dni exts1 "begin extended segment sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "exts $hash$seghi8,$hash$uimm2"
-     (+ OP1_13 OP2_7 (f-op-lbit2 0) uimm2 (f-op-bit4 0) seghi8 (f-op-bit8 0))
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;extended segment register sequence
-; EXTSR Rwm,#irang2
-(dni extsr "begin extended segment and register sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "extsr $sr,$hash$uimm2"
-     (+ OP1_13 OP2_12 (f-op-lbit2 2) uimm2 sr)
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;extended segment register sequence
-; EXTSR #pag10,#irang2
-(dni extsr1 "begin extended segment and register sequence"
-     ((PIPE OS) (IDOC SYSC))
-     "extsr $hash$seghi8,$hash$uimm2"
-     (+ OP1_13 OP2_7 (f-op-lbit2 2) uimm2 (f-op-bit4 0) seghi8 (f-op-bit8 0))
-     (sequence ((HI count))
-	  (set HI count uimm2)
-          (cond
-  	    ((ne HI count (const 0))
-	    (sequence ()
-	       (set HI pc (add HI pc (const 2)))
-               (set HI count (sub HI count (const 1)))
-            ))
-          )
-          (set HI count (const 0))
-      )
-      ()
-)
-
-;prioritize register
-;PRIOR Rwn,Rwm
-(dni prior "add registers"
-     ((PIPE OS) (IDOC ALU))
-     "prior $dr,$sr"
-     (+ OP1_2 OP2_11 dr sr)
-     (sequence ((HI count) (HI tmp1) (HI tmp2))
-	  (set HI count (const 0))
-	  (set HI tmp1 sr)
-	  (set HI tmp2 (and tmp1 (const 32768)))
-          (cond
-  	    ((ne HI tmp2 (const 1)) ;;(ne HI sr (const 0)) - FIXME: and? or?
-	       ;;(sll HI tmp1 (const 1)) - FIXME: missing (set ...)
-               (set HI tmp2 (and tmp1 (const 32768)))
-               (set HI count (add HI count (const 1)))
-            )
-           )        
-           (set HI dr count)
-      )
-      ()
-)
-
-
-;bit instructions
-;******************************************************************
-;bit clear
-(define-pmacro (bclear name insn opc1)
-  (dni name
-     (.str name "bit clear" )
-     ((PIPE OS) (IDOC ALU))
-     (.str insn " $reg8$dot$qbit")
-     (+ opc1 OP2_14 reg8)
-     (sequence ((HI tmp1) (HI tmp2))
-     (set tmp2 (const 1))
-     (set tmp1 reg8)
-     ;; FIXME: (sll tmp2 qbit)
-     ;; FIXME: (inv tmp2)
-     (set BI tmp1(and tmp1 tmp2))
-     (set HI reg8 tmp1))
-     ()
-  )
-)
-
-;clear direct bit
-(dni bclr18 "bit logical MOVN"
-     ((PIPE OS) (IDOC ALU))
-     "bclr $RegNam"
-     (+ OP1_11 OP2_14 RegNam)
-     (sequence ((HI tmp1) (HI tmp2))
-     (set tmp2 (const 1))
-     (set tmp1 reg8)
-     ;; FIXME: (sll tmp2 qbit)
-     ;; FIXME: (inv tmp2)
-     (set BI tmp1(and tmp1 tmp2))
-     (set HI reg8 tmp1))
-     ()
-)
-
-
-(bclear bclr0 bclr  QBIT_0 )
-(bclear bclr1 bclr  QBIT_1 )
-(bclear bclr2 bclr  QBIT_2 )
-(bclear bclr3 bclr  QBIT_3 )
-(bclear bclr4 bclr  QBIT_4 )
-(bclear bclr5 bclr  QBIT_5 )
-(bclear bclr6 bclr  QBIT_6 )
-(bclear bclr7 bclr  QBIT_7 )
-(bclear bclr8 bclr  QBIT_8 )
-(bclear bclr9 bclr  QBIT_9 )
-(bclear bclr10 bclr  QBIT_10 )
-(bclear bclr11 bclr  QBIT_11 )
-(bclear bclr12 bclr  QBIT_12 )
-(bclear bclr13 bclr  QBIT_13 )
-(bclear bclr14 bclr  QBIT_14 )
-(bclear bclr15 bclr  QBIT_15 )
-
-;set direct bit
-(dni bset19 "bit logical MOVN"
-     ((PIPE OS) (IDOC ALU))
-     "bset $RegNam"
-     (+ OP1_11 OP2_15 RegNam)
-     (sequence ((HI tmp1) (HI tmp2))
-     (set tmp2 (const 1))
-     (set tmp1 reg8)
-     ;; FIXME: (sll tmp2 qbit)
-     (set BI tmp1(or tmp1 tmp2))
-     (set HI reg8 tmp1))
-     ()
-)
-
-;bit set
-(define-pmacro (bitset name insn opc1)
-  (dni name
-     (.str name "bit set" )
-     ((PIPE OS) (IDOC ALU))
-     (.str insn " $reg8$dot$qbit")
-     (+ opc1 OP2_15 reg8)
-     (sequence ((HI tmp1) (HI tmp2))
-     (set tmp2 (const 1))
-     (set tmp1 reg8)
-     ;; FIXME: (sll tmp2 qbit)
-     (set BI tmp1(or tmp1 tmp2))
-     (set HI reg8 tmp1))
-     ()
-  )
-)
-
-
-(bitset bset0 bset  QBIT_0 )
-(bitset bset1 bset  QBIT_1 )
-(bitset bset2 bset  QBIT_2 )
-(bitset bset3 bset  QBIT_3 )
-(bitset bset4 bset  QBIT_4 )
-(bitset bset5 bset  QBIT_5 )
-(bitset bset6 bset  QBIT_6 )
-(bitset bset7 bset  QBIT_7 )
-(bitset bset8 bset  QBIT_8 )
-(bitset bset9 bset  QBIT_9 )
-(bitset bset10 bset  QBIT_10 )
-(bitset bset11 bset  QBIT_11 )
-(bitset bset12 bset  QBIT_12 )
-(bitset bset13 bset  QBIT_13 )
-(bitset bset14 bset  QBIT_14 )
-(bitset bset15 bset  QBIT_15 )
-
-;mov direct bit
-;BMOV bitaddrZ.z,bitaddrQ.q
-(dni bmov "bit logical MOV"
-     ((PIPE OS) (IDOC ALU))
-     "bmov $reghi8$dot$qhibit,$reg8$dot$qlobit"
-     (+ OP1_4 OP2_10 reg8 reghi8 qhibit qlobit)
-     (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
-     (set HI tmp1 reghi8)
-     (set HI tmp2 reg8)
-     (set tmp3 (const 1))
-     (set tmp4 (const 1))
-     ;; FIXME: (sll tmp3 qlobit)
-     ;; FIXME: (sll tmp4 qhibit)
-     ;; FIXME: (and tmp1 tmp3)
-     ;; FIXME: (and tmp2 tmp4)
-     (set BI tmp1 tmp2)
-     (set HI reghi8 tmp1)
-     (set HI reg8 tmp2))
-     ()
-)
-
-;movn direct bit
-;BMOVN bitaddrZ.z,bitaddrQ.q
-(dni bmovn "bit logical MOVN"
-     ((PIPE OS) (IDOC ALU))
-     "bmovn $reghi8$dot$qhibit,$reg8$dot$qlobit"
-     (+ OP1_3 OP2_10 reg8 reghi8 qhibit qlobit)
-     (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
-     (set HI tmp1 reghi8)
-     (set HI tmp2 reg8)
-     (set tmp3 (const 1))
-     (set tmp4 (const 1))
-     ;; FIXME: (sll tmp3 qlobit)
-     ;; FIXME: (sll tmp4 qhibit)
-     ;; FIXME: (and tmp1 tmp3)
-     ;; FIXME: (and tmp2 tmp4)
-     ;; FIXME: (inv HI tmp2)
-     (set BI tmp1 tmp2)
-     (set HI reghi8 tmp1)
-     (set HI reg8 tmp2))
-     ()
-)
-
-;and direct bit
-;BAND bitaddrZ.z,bitaddrQ.q
-(dni band "bit logical AND"
-     ((PIPE OS) (IDOC ALU))
-     "band $reghi8$dot$qhibit,$reg8$dot$qlobit"
-     (+ OP1_6 OP2_10 reg8 reghi8 qhibit qlobit)
-     (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
-     (set HI tmp1 reghi8)
-     (set HI tmp2 reg8)
-     (set tmp3 (const 1))
-     (set tmp4 (const 1))
-     ;; FIXME: (sll tmp3 qlobit)
-     ;; FIXME: (sll tmp4 qhibit)
-     ;; FIXME: (and tmp1 tmp3)
-     ;; FIXME: (and tmp2 tmp4)
-     (set BI tmp1(and tmp1 tmp2))
-     (set HI reghi8 tmp1)
-     (set HI reg8 tmp2))
-     ()
-)
-
-;or direct bit
-;BOR bitaddrZ.z,bitaddrQ.q
-(dni bor "bit logical OR"
-     ((PIPE OS) (IDOC ALU))
-     "bor $reghi8$dot$qhibit,$reg8$dot$qlobit"
-     (+ OP1_5 OP2_10 reg8 reghi8 qhibit qlobit)
-     (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
-     (set HI tmp1 reghi8)
-     (set HI tmp2 reg8)
-     (set tmp3 (const 1))
-     (set tmp4 (const 1))
-     ;; FIXME: (sll tmp3 qlobit)
-     ;; FIXME: (sll tmp4 qhibit)
-     ;; FIXME: (and tmp1 tmp3)
-     ;; FIXME: (and tmp2 tmp4)
-     (set BI tmp1(or tmp1 tmp2))
-     (set HI reghi8 tmp1)
-     (set HI reg8 tmp2))
-     ()
-)
-
-;xor direct bit
-;BXOR bitaddrZ.z,bitaddrQ.q
-(dni bxor "bit logical XOR"
-     ((PIPE OS) (IDOC ALU))
-     "bxor $reghi8$dot$qhibit,$reg8$dot$qlobit"
-     (+ OP1_7 OP2_10 reg8 reghi8 qhibit qlobit)
-     (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
-     (set HI tmp1 reghi8)
-     (set HI tmp2 reg8)
-     (set tmp3 (const 1))
-     (set tmp4 (const 1))
-     ;; FIXME: (sll tmp3 qlobit)
-     ;; FIXME: (sll tmp4 qhibit)
-     ;; FIXME: (and tmp1 tmp3)
-     ;; FIXME: (and tmp2 tmp4)
-     (set BI tmp1(xor tmp1 tmp2))
-     (set HI reghi8 tmp1)
-     (set HI reg8 tmp2))
-     ()
-)
-
-;cmp direct bit to bit
-;BCMP bitaddrZ.z,bitaddrQ.q
-(dni bcmp "bit to bit compare"
-     ((PIPE OS) (IDOC ALU))
-     "bcmp $reghi8$dot$qhibit,$reg8$dot$qlobit"
-     (+ OP1_2 OP2_10 reg8 reghi8 qhibit qlobit)
-     (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
-     (set HI tmp1 reghi8)
-     (set HI tmp2 reg8)
-     (set tmp3 (const 1))
-     (set tmp4 (const 1))
-     ;; FIXME: (sll tmp3 qlobit)
-     ;; FIXME: (sll tmp4 qhibit)
-     ;; FIXME: (and tmp1 tmp3)
-     ;; FIXME: (and tmp2 tmp4)
-     (set BI tmp1(xor tmp1 tmp2))
-     (set HI reghi8 tmp1)
-     (set HI reg8 tmp2))
-     ()
-)
-
-;bit field low byte
-;BFLDL op1,op2,op3
-(dni bfldl "bit field low byte"
-     ((PIPE OS) (IDOC MOVE))
-     "bfldl $reg8,$hash$mask8,$hash$datahi8"
-     (+ OP1_0 OP2_10 reg8 mask8 datahi8)
-     (sequence ((HI tmp1) (QI tmp2) (QI tmp3))
-     (set HI tmp1 reg8)
-     (set QI tmp2 mask8)
-     (set QI tmp3 datahi8)
-     ;; FIXME: (inv QI tmp2)
-     (set HI tmp1 (and tmp1 tmp2))
-     (set HI tmp1 (or tmp1 tmp3))
-     (set HI reg8 tmp1)
-     )
-     ()
-)
-
-;bit field high byte
-;BFLDH op1,op2,op3
-(dni bfldh "bit field high byte"
-     ((PIPE OS) (IDOC MOVE))
-     "bfldh $reg8,$hash$masklo8,$hash$data8"
-     (+ OP1_1 OP2_10 reg8 masklo8 data8)
-     (sequence ((HI tmp1) (HI tmp2) (HI tmp3))
-     	     (set HI tmp1 reg8)
-	     (set QI tmp2 masklo8)
-	     (set HI tmp3 data8)
-	     ;; FIXME: (sll tmp2 (const 8))
-	     ;; FIXME: (inv HI tmp2)
-	     ;; FIXME: (sll tmp3 (const 8))
-	     (set HI tmp1 (and tmp1 tmp2))
-	     (set HI tmp1 (or tmp1 tmp3))
-	     (set HI reg8 tmp1)
-     )
-     ()
-)
-
-;/**********compare instructions******************
-
-;Compare register
-;CMP Rwn,Rwm
-(dni cmpr "compare two registers"
-     ((PIPE OS) (IDOC CMP))
-     "cmp $src1,$src2"
-     (+ OP1_4 OP2_0 src1 src2)
-     (set condbit (lt HI src1 src2))
-     ()
-)
-
-;Compare byte register
-;CMPB Rbn,Rbm
-(dni cmpbr "compare two byte registers"
-     ((PIPE OS) (IDOC CMP))
-     "cmpb $drb,$srb"
-     (+ OP1_4 OP2_1 drb srb)
-     (set condbit (lt QI drb srb))
-     ()
-)
-
-(define-pmacro (cmp1 name insn opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "compare" )
-       ((PIPE OS) (IDOC CMP))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op1 (f-op-bit1 0) op2)
-       (set condbit (lt mode op1 op2))
-       ()
-  )
-)
-(cmp1 cmpri cmp OP1_4 OP2_8 src1 uimm3 HI)
-(cmp1 cmpbri cmpb OP1_4 OP2_9 drb uimm3 QI)
-
-; CMP Rwn,#data16
-(dni cmpi "compare"
-     ((PIPE OS) (IDOC CMP))
-     "cmp $reg8,$hash$uimm16"
-     (+ OP1_4 OP2_6 reg8 uimm16)
-     (set condbit (lt HI reg8 uimm16))
-     ()
-)
-
-; CMPB reg,#data8
-(dni cmpbi "compare"
-     ((PIPE OS) (IDOC CMP))
-     "cmpb $regb8,$hash$uimm8"
-     (+ OP1_4 OP2_7 regb8 uimm8 (f-op-bit8 0))
-     (set condbit (lt QI regb8 uimm8))
-     ()
-)
-
-;compare reg and indirect memory
-(define-pmacro (cmp2 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "compare" )
-       ((PIPE OS) (IDOC CMP))
-       (.str insn " $"op1 ",[$"op2"]")
-       (+ opc1 opc2 op1 (f-op-bit2 2) op2)
-       (set condbit (lt mode op1 op2))
-       ()
-  )
-)
-(cmp2 cmpr2 cmp OP1_4 OP2_8 dr sr2 HI)
-(cmp2 cmpbr2 cmpb OP1_4 OP2_9 drb sr2 QI)
-
-;compare register and indirect memory post increment
-(define-pmacro (cmp3 name insn opc1 opc2 op1 op2 mode)
-  (dni name
-       (.str name "compare" )
-       ((PIPE OS) (IDOC CMP))
-       (.str insn " $"op1 ",[$"op2"+]")
-       (+ opc1 opc2 op1 (f-op-bit2 3) op2)
-       (sequence ()
-          (set condbit (lt mode op1 op2))
-   	  (set HI op2 (add HI op2 (const 2)))
-       )
-       ()
-  )
-)
-(cmp3 cmp2i cmp OP1_4 OP2_8 dr sr2 HI)
-(cmp3 cmpb2i cmpb OP1_4 OP2_9 drb sr2 QI)
-
-;compare register and direct memory
-(define-pmacro (cmp4 name insn opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "compare" )
-       ((PIPE OS) (IDOC CMP))
-       (.str insn " $"op1 ",$pof$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set condbit (lt HI op1 (mem HI op2)))
-       ()
-  )
-)
-(cmp4 cmp04 cmp OP1_4 OP2_2 reg8 upof16 HI)
-(cmp4 cmpb4 cmpb OP1_4 OP2_3 regb8 upof16 QI)
-
-;compare register and direct memory
-(define-pmacro (cmp4 name insn opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "compare" )
-       ((PIPE OS) (IDOC CMP))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set condbit (lt HI op1 (mem HI op2)))
-       ()
-  )
-)
-(cmp4 cmp004 cmp OP1_4 OP2_2 regmem8 memgr8 HI)
-(cmp4 cmp0004 cmp OP1_4 OP2_2 reg8 memory HI)
-(cmp4 cmpb04 cmpb OP1_4 OP2_3 regbmem8 memgr8 QI)
-(cmp4 cmpb004 cmpb OP1_4 OP2_3 regb8 memory QI)
-
-;compare register and immediate
-(define-pmacro (cmp5 name insn opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "compare" )
-       ((PIPE OS) (IDOC CMP))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op2 op1)
-       (sequence ()
-            (set condbit (lt HI op1 op2))
-	    (set mode op1 (sub HI op1 (const 1)))
-       )     
-       ()
-  )
-)
-(cmp5 cmpd1ri cmpd1  OP1_10 OP2_0 sr uimm4 HI)
-(cmp5 cmpd2ri cmpd2  OP1_11 OP2_0 sr uimm4 HI)
-(cmp5 cmpi1ri cmpi1  OP1_8 OP2_0 sr uimm4 HI)
-(cmp5 cmpi2ri cmpi2  OP1_9 OP2_0 sr uimm4 HI)
-(cmp5 cmpd1rim cmpd1  OP1_10 OP2_6 reg8 uimm16 HI)
-(cmp5 cmpd2rim cmpd2  OP1_11 OP2_6 reg8 uimm16 HI)
-(cmp5 cmpi1rim cmpi1  OP1_8 OP2_6 reg8 uimm16 HI)
-(cmp5 cmpi2rim cmpi2  OP1_9 OP2_6 reg8 uimm16 HI)
-
-;compare register and direct memory
-(define-pmacro (cmp6 name insn opc1 opc2 op1 op2 mode )
-  (dni name 
-       (.str name "compare" )
-       ((PIPE OS) (IDOC CMP))
-       (.str insn " $"op1 ",$pof$"op2)
-       (+ opc1 opc2 op1 op2)
-       (sequence ()
-            (set condbit (lt HI op1 (mem HI op2)))
-	    (set mode op1 (sub HI op1 (const 1)))
-       )    
-       ()
-  )
-)
-(cmp6 cmpd1rp cmpd1  OP1_10 OP2_2 reg8 upof16 HI )
-(cmp6 cmpd2rp cmpd2  OP1_11 OP2_2 reg8 upof16 HI )
-(cmp6 cmpi1rp cmpi1  OP1_8 OP2_2 reg8 upof16 HI )
-(cmp6 cmpi2rp cmpi2  OP1_9 OP2_2 reg8 upof16 HI )
-
-;compare register and direct memory
-(define-pmacro (cmp7 name insn opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "compare" )
-       ((PIPE OS) (IDOC CMP))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (sequence ()
-            (set condbit (lt HI op1 (mem HI op2)))
-	    (set mode op1 (sub HI op1 (const 1)))
-       )    
-       ()
-  )
-)
-(cmp7 cmpd1rm cmpd1  OP1_10 OP2_2 regmem8 memgr8 HI)
-(cmp7 cmpd2rm cmpd2  OP1_11 OP2_2 regmem8 memgr8 HI)
-(cmp7 cmpi1rm cmpi1  OP1_8 OP2_2 regmem8 memgr8 HI)
-(cmp7 cmpi2rm cmpi2  OP1_9 OP2_2 regmem8 memgr8 HI)
-(cmp7 cmpd1rmi cmpd1  OP1_10 OP2_2 reg8 memory HI)
-(cmp7 cmpd2rmi cmpd2  OP1_11 OP2_2 reg8 memory HI)
-(cmp7 cmpi1rmi cmpi1  OP1_8 OP2_2 reg8 memory HI)
-(cmp7 cmpi2rmi cmpi2  OP1_9 OP2_2 reg8 memory HI)
-
-
-;Shift and rotate insns
-;****************************************************************
-(define-pmacro (shift name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "shift" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$"op2)
-       (+ opc1 opc2 op1 op2)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(shift shlr shl sll OP1_4 OP2_12 dr sr HI)
-(shift shrr shr srl OP1_6 OP2_12 dr sr HI)
-(shift rolr rol rol OP1_0 OP2_12 dr sr HI)
-(shift rorr ror ror OP1_2 OP2_12 dr sr HI)
-(shift ashrr ashr sra OP1_10 OP2_12 dr sr HI)
-
-(define-pmacro (shift1 name insn insn1 opc1 opc2 op1 op2 mode)
-  (dni name 
-       (.str name "shift" )
-       ((PIPE OS) (IDOC ALU))
-       (.str insn " $"op1 ",$hash$"op2)
-       (+ opc1 opc2 op2 op1)
-       (set mode op1 (insn1 mode op1 op2))
-       ()
-  )
-)
-(shift1 shlri shl sll OP1_5 OP2_12 sr uimm4 HI)
-(shift1 shrri shr srl OP1_7 OP2_12 sr uimm4 HI)
-(shift1 rolri rol rol OP1_1 OP2_12 sr uimm4 HI)
-(shift1 rorri ror ror OP1_3 OP2_12 sr uimm4 HI)
-(shift1 ashrri ashr sra OP1_11 OP2_12 sr uimm4 HI)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/xc16x.opc ./cpu/xc16x.opc
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/xc16x.opc	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/xc16x.opc	1970-01-01 00:00:00.000000000 +0000
@@ -1,290 +0,0 @@
-/* XC16X opcode support.  -*- C -*-
-
-   Copyright 2006, 2007, 2009 Free Software Foundation, Inc.
-
-   Contributed by KPIT Cummins Infosystems Ltd.; developed under contract 
-   from Infineon Systems, GMBH , Germany.
-
-   This file is part of the GNU Binutils.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
-   02110-1301, USA.  */
-
-
-/* This file is an addendum to xc16x.cpu.  Heavy use of C code isn't
-   appropriate in .cpu files, so it resides here.  This especially applies
-   to assembly/disassembly where parsing/printing can be quite involved.
-   Such things aren't really part of the specification of the cpu, per se,
-   so .cpu files provide the general framework and .opc files handle the
-   nitty-gritty details as necessary.
-
-   Each section is delimited with start and end markers.
-
-   <arch>-opc.h additions use: "-- opc.h"
-   <arch>-opc.c additions use: "-- opc.c"
-   <arch>-asm.c additions use: "-- asm.c"
-   <arch>-dis.c additions use: "-- dis.c"
-   <arch>-ibd.h additions use: "-- ibd.h"  */
-
-/* -- opc.h */
-
-#define CGEN_DIS_HASH_SIZE 8
-#define CGEN_DIS_HASH(buf,value) (((* (unsigned char*) (buf)) >> 3) % CGEN_DIS_HASH_SIZE)
-
-/* -- */
-
-/* -- opc.c */
-                                                                                
-/* -- */
-
-/* -- asm.c */
-/* Handle '#' prefixes (i.e. skip over them).  */
-
-static const char *
-parse_hash (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	    const char **strp,
-	    int opindex ATTRIBUTE_UNUSED,
-	    long *valuep ATTRIBUTE_UNUSED)
-{
-  if (**strp == '#')
-    {
-      ++*strp;
-      return NULL;
-    }
-  return _("Missing '#' prefix");
-}
-
-/* Handle '.' prefixes (i.e. skip over them).  */
-
-static const char *
-parse_dot (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   const char **strp,
-	   int opindex ATTRIBUTE_UNUSED,
-	   long *valuep ATTRIBUTE_UNUSED)
-{
-  if (**strp == '.')
-    {
-      ++*strp;
-      return NULL;
-    }
-  return _("Missing '.' prefix");
-}
-
-/* Handle 'pof:' prefixes (i.e. skip over them).  */
-
-static const char *
-parse_pof (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   const char **strp,
-	   int opindex ATTRIBUTE_UNUSED,
-	   long *valuep ATTRIBUTE_UNUSED)
-{
-  if (strncasecmp (*strp, "pof:", 4) == 0)
-    {
-      *strp += 4;
-      return NULL;
-    }
-  return _("Missing 'pof:' prefix");  
-}
-
-/* Handle 'pag:' prefixes (i.e. skip over them).  */
-
-static const char *
-parse_pag (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   const char **strp,
-	   int opindex ATTRIBUTE_UNUSED,
-	   long *valuep ATTRIBUTE_UNUSED)
-{
-  if (strncasecmp (*strp, "pag:", 4) == 0)
-    {
-      *strp += 4;
-      return NULL;
-    }
-  return _("Missing 'pag:' prefix");
-}
-
-/* Handle 'sof' prefixes (i.e. skip over them).  */
-
-static const char *
-parse_sof (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   const char **strp,
-	   int opindex ATTRIBUTE_UNUSED,
-	   long *valuep ATTRIBUTE_UNUSED)
-{
-  if (strncasecmp (*strp, "sof:", 4) == 0)
-    {
-      *strp += 4;
-      return NULL;
-    }
-  return _("Missing 'sof:' prefix");
-}
-
-/* Handle 'seg' prefixes (i.e. skip over them).  */
-
-static const char *
-parse_seg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   const char **strp,
-	   int opindex ATTRIBUTE_UNUSED,
-	   long *valuep ATTRIBUTE_UNUSED)
-{
-  if (strncasecmp (*strp, "seg:", 4) == 0)
-    {
-      *strp += 4;
-      return NULL;
-    }
-  return _("Missing 'seg:' prefix");
-}
-/* -- */
-
-/* -- dis.c */
-
-/* Print an operand with a "." prefix.
-   NOTE: This prints the operand in hex.
-   ??? This exists to maintain disassembler compatibility with previous
-   versions.  Ideally we'd print the "." in print_dot.  */
-
-static void
-print_with_dot_prefix (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-		       void * dis_info,
-		       long value,
-		       unsigned attrs ATTRIBUTE_UNUSED,
-		       bfd_vma pc ATTRIBUTE_UNUSED,
-		       int length ATTRIBUTE_UNUSED)
-{
-  disassemble_info *info = (disassemble_info *) dis_info;
-
-  info->fprintf_func (info->stream, ".");
-  info->fprintf_func (info->stream, "0x%lx", value);
-}
-
-/* Print an operand with a "#pof:" prefix.
-   NOTE: This prints the operand as an address.
-   ??? This exists to maintain disassembler compatibility with previous
-   versions.  Ideally we'd print "#pof:" in print_pof.  */
-
-static void
-print_with_pof_prefix (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-		       void * dis_info,
-		       bfd_vma value,
-		       unsigned attrs ATTRIBUTE_UNUSED,
-		       bfd_vma pc ATTRIBUTE_UNUSED,
-		       int length ATTRIBUTE_UNUSED)
-{
-  disassemble_info *info = (disassemble_info *) dis_info;
-
-  info->fprintf_func (info->stream, "#pof:");
-  info->fprintf_func (info->stream, "0x%lx", (long) value);
-}
-
-/* Print an operand with a "#pag:" prefix.
-   NOTE: This prints the operand in hex.
-   ??? This exists to maintain disassembler compatibility with previous
-   versions.  Ideally we'd print "#pag:" in print_pag.  */
-
-static void
-print_with_pag_prefix (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-		       void * dis_info,
-		       long value,
-		       unsigned attrs ATTRIBUTE_UNUSED,
-		       bfd_vma pc ATTRIBUTE_UNUSED,
-		       int length ATTRIBUTE_UNUSED)
-{
-  disassemble_info *info = (disassemble_info *) dis_info;
-
-  info->fprintf_func (info->stream, "#pag:");
-  info->fprintf_func (info->stream, "0x%lx", value);
-}
-
-/* Print a 'pof:' prefix to an operand.  */
-
-static void
-print_pof (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   void * dis_info ATTRIBUTE_UNUSED,
-	   long value ATTRIBUTE_UNUSED,
-	   unsigned int attrs ATTRIBUTE_UNUSED,
-	   bfd_vma pc ATTRIBUTE_UNUSED,
-	   int length ATTRIBUTE_UNUSED)
-{
-}
-
-/* Print a 'pag:' prefix to an operand.  */
-
-static void
-print_pag (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   void * dis_info ATTRIBUTE_UNUSED,
-	   long value ATTRIBUTE_UNUSED,
-	   unsigned int attrs ATTRIBUTE_UNUSED,
-	   bfd_vma pc ATTRIBUTE_UNUSED,
-	   int length ATTRIBUTE_UNUSED)
-{
-}
-
-/* Print a 'sof:' prefix to an operand.  */
-
-static void
-print_sof (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   void * dis_info,
-	   long value ATTRIBUTE_UNUSED,
-	   unsigned int attrs ATTRIBUTE_UNUSED,
-	   bfd_vma pc ATTRIBUTE_UNUSED,
-	   int length ATTRIBUTE_UNUSED)
-{
-  disassemble_info *info = (disassemble_info *) dis_info;
-
-  info->fprintf_func (info->stream, "sof:");
-}
-
-/* Print a 'seg:' prefix to an operand.  */
-
-static void
-print_seg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   void * dis_info,
-	   long value ATTRIBUTE_UNUSED,
-	   unsigned int attrs ATTRIBUTE_UNUSED,
-	   bfd_vma pc ATTRIBUTE_UNUSED,
-	   int length ATTRIBUTE_UNUSED)
-{
-  disassemble_info *info = (disassemble_info *) dis_info;
-
-  info->fprintf_func (info->stream, "seg:");
-}
-
-/* Print a '#' prefix to an operand.  */
-
-static void
-print_hash (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	    void * dis_info,
-	    long value ATTRIBUTE_UNUSED,
-	    unsigned int attrs ATTRIBUTE_UNUSED,
-	    bfd_vma pc ATTRIBUTE_UNUSED,
-	    int length ATTRIBUTE_UNUSED)
-{
-  disassemble_info *info = (disassemble_info *) dis_info;
-
-  info->fprintf_func (info->stream, "#");
-}
-
-/* Print a '.' prefix to an operand.  */
-
-static void
-print_dot (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
-	   void * dis_info ATTRIBUTE_UNUSED,
-	   long value ATTRIBUTE_UNUSED,
-	   unsigned int attrs ATTRIBUTE_UNUSED,
-	   bfd_vma pc ATTRIBUTE_UNUSED,
-	   int length ATTRIBUTE_UNUSED)
-{
-}
-
-/* -- */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/xstormy16.cpu ./cpu/xstormy16.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/cpu/xstormy16.cpu	2019-12-11 01:49:17.000000000 +0000
+++ ./cpu/xstormy16.cpu	2024-02-01 01:47:14.000000000 +0000
@@ -393,7 +393,7 @@
   (length 11)
   (mode INT)
   (encode (value pc) (sra SI (sub SI value (add SI pc 2)) 1))
-  (decode (value pc) (add SI (sll value 1) (add SI pc 2)))
+  (decode (value pc) (add SI (mul value 2) (add SI pc 2)))
 )
 (dnop rel12a "12 bit relative address" () h-uint f-rel12a)
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/djunpack.bat ./djunpack.bat
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/djunpack.bat	2019-12-11 01:53:32.000000000 +0000
+++ ./djunpack.bat	2024-02-01 01:52:36.000000000 +0000
@@ -17,8 +17,8 @@ Rem
 Rem The following 2 lines need to be changed with each new GDB release, to
 Rem be identical to the name of the top-level directory where the GDB
 Rem distribution unpacks itself.
-set GDBVER=$package-9.0.50.20191211
-if "%GDBVER%"=="$package-9.0.50.20191211" GoTo EnvOk
+set GDBVER=$package-15.0.50.20240201
+if "%GDBVER%"=="$package-15.0.50.20240201" GoTo EnvOk
 Rem If their environment space is too small, re-exec with a larger one
 command.com /e:4096 /c %0 %1
 GoTo End
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/ChangeLog ./etc/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/ChangeLog	2019-12-11 01:49:17.000000000 +0000
+++ ./etc/ChangeLog	2024-02-01 01:47:14.000000000 +0000
@@ -1,3 +1,11 @@
+2021-01-01  Alan Modra  <amodra@gmail.com>
+
+	* update-copyright.py (BinutilsCmdLine.__init__): Add libctf.
+
+2020-01-15  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* texi2pod.pl: Handle @t{...} tags.
+
 2018-06-19  Simon Marchi  <simon.marchi@ericsson.com>
 
 	* configure.in: Remove AC_PREREQ.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/configure ./etc/configure
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/configure	2019-12-11 01:49:17.000000000 +0000
+++ ./etc/configure	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.69 for etc 0.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -574,20 +574,45 @@ MFLAGS=
 MAKEFLAGS=
 
 # Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME='etc'
+PACKAGE_TARNAME='etc'
+PACKAGE_VERSION='0'
+PACKAGE_STRING='etc 0'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
 
-ac_unique_file="Makefile.in"
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
-MAINT
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
 target_alias
 host_alias
 build_alias
@@ -630,6 +655,7 @@ ac_subst_files=''
 ac_user_opts='
 enable_option_checking
 enable_maintainer_mode
+enable_silent_rules
 '
       ac_precious_vars='build_alias
 host_alias
@@ -674,7 +700,7 @@ sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
 infodir='${datarootdir}/info'
 htmldir='${docdir}'
 dvidir='${docdir}'
@@ -1174,7 +1200,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
+\`configure' configures etc 0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1222,7 +1248,7 @@ Fine tuning of the installation director
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/etc]
   --htmldir=DIR           html documentation [DOCDIR]
   --dvidir=DIR            dvi documentation [DOCDIR]
   --pdfdir=DIR            pdf documentation [DOCDIR]
@@ -1230,11 +1256,18 @@ Fine tuning of the installation director
 _ACEOF
 
   cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
 _ACEOF
 fi
 
 if test -n "$ac_init_help"; then
-
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of etc 0:";;
+   esac
   cat <<\_ACEOF
 
 Optional Features:
@@ -1244,6 +1277,8 @@ Optional Features:
   --enable-maintainer-mode
                           enable make rules and dependencies not useful (and
                           sometimes confusing) to the casual installer
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
 
 Report bugs to the package provider.
 _ACEOF
@@ -1308,7 +1343,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-configure
+etc configure 0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1325,7 +1360,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by $as_me, which was
+It was created by etc $as_me 0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -1674,6 +1709,34 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+am__api_version='1.15'
+
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
   if test -f "$ac_dir/install-sh"; then
@@ -1796,25 +1859,528 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
 
-# Command-line options.
-# Very limited version of AC_MAINTAINER_MODE.
-# Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then :
-  enableval=$enable_maintainer_mode; case ${enable_maintainer_mode} in
-     yes) MAINT='' ;;
-     no) MAINT='#' ;;
-     *) as_fn_error $? "--enable-maintainer-mode must be yes or no" "$LINENO" 5 ;;
-   esac
-   maintainer_mode=${enableval}
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+	&& test "$*" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 else
-  MAINT='#'
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
 
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
 
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='etc'
+ VERSION='0'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
 
 
 ac_config_files="$ac_config_files Makefile"
@@ -1964,6 +2530,19 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -2361,7 +2940,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by $as_me, which was
+This file was extended by etc $as_me 0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -2414,7 +2993,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-config.status
+etc config.status 0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -2425,6 +3004,8 @@ gives unlimited permission to copy, dist
 ac_pwd='$ac_pwd'
 srcdir='$srcdir'
 INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
 test -n "\$AWK" || AWK=awk
 _ACEOF
 
@@ -2864,6 +3445,11 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_
   [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
   *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
   esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -2918,6 +3504,7 @@ s&@builddir@&$ac_builddir&;t t
 s&@abs_builddir@&$ac_abs_builddir&;t t
 s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
 eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/configure.in ./etc/configure.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/configure.in	2019-12-11 01:49:17.000000000 +0000
+++ ./etc/configure.in	1970-01-01 00:00:00.000000000 +0000
@@ -1,26 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(Makefile.in)
-
-AC_PROG_INSTALL
-
-# Command-line options.
-# Very limited version of AC_MAINTAINER_MODE.
-AC_ARG_ENABLE([maintainer-mode],
-  [AC_HELP_STRING([--enable-maintainer-mode],
-                 [enable make rules and dependencies not useful (and
-                  sometimes confusing) to the casual installer])],
-  [case ${enable_maintainer_mode} in
-     yes) MAINT='' ;;
-     no) MAINT='#' ;;
-     *) AC_MSG_ERROR([--enable-maintainer-mode must be yes or no]) ;;
-   esac
-   maintainer_mode=${enableval}],
-  [MAINT='#'])
-AC_SUBST([MAINT])dnl
-
-AC_SUBST(datarootdir)
-AC_SUBST(docdir)
-AC_SUBST(htmldir)
-AC_SUBST(pdfdir)
-
-AC_OUTPUT(Makefile)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/Makefile.in ./etc/Makefile.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/Makefile.in	2019-12-11 01:49:17.000000000 +0000
+++ ./etc/Makefile.in	2024-02-01 01:47:14.000000000 +0000
@@ -1,74 +1,375 @@
-# 
-# Makefile.in for etc
-#
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
 
-DESTDIR		=
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
 
-prefix 		= @prefix@
-exec_prefix 	= @exec_prefix@
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-srcdir  = @srcdir@
-VPATH	= @srcdir@
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
 
-bindir  = @bindir@
-libdir  = @libdir@
-tooldir = $(libdir)
-datadir = @datadir@
+@SET_MAKE@
 
-mandir  = @mandir@
-man1dir = $(mandir)/man1
-man2dir = $(mandir)/man2
-man3dir = $(mandir)/man3
-man4dir = $(mandir)/man4
-man5dir = $(mandir)/man5
-man6dir = $(mandir)/man6
-man7dir = $(mandir)/man7
-man8dir = $(mandir)/man8
-man9dir = $(mandir)/man9
+#
+#   Copyright (C) 1992-2024 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../config/lead-dot.m4 \
+	$(top_srcdir)/../config/override.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+	$(am__configure_deps)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
 datarootdir = @datarootdir@
 docdir = @docdir@
-infodir = @infodir@
-pdfdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
 htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign no-dist
+ACLOCAL_AMFLAGS = -I.. -I../config
+all: all-am
+
+.SUFFIXES:
+am--refresh: Makefile
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
 
-SHELL = /bin/sh
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
 
-INSTALL 	= @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA    = @INSTALL_DATA@
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+tags TAGS:
 
-#### Host, target, and site specific Makefile fragments come in here.
-###
+ctags CTAGS:
 
-all:
+cscope cscopelist:
 
-clean:
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
 
-mostlyclean: clean
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-distclean:   clean
-	rm -f Makefile config.status config.cache
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
 
-maintainer-clean realclean:   distclean
+clean-generic:
 
-Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag) \
-	config.status
-	$(SHELL) ./config.status
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
-AUTOCONF = autoconf
-configure_deps = $(srcdir)/configure.in
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
 
-$(srcdir)/configure: @MAINT@ $(configure_deps)
-	cd $(srcdir) && $(AUTOCONF)
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am am--refresh check check-am clean clean-generic \
+	cscopelist-am ctags-am distclean distclean-generic dvi dvi-am \
+	html html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
 
-config.status: $(srcdir)/configure
-	$(SHELL) ./config.status --recheck
 
-## these last targets are for standards.texi conformance
-dist:
-check:
-info html dvi ps pdf:
-install install-strip install-info install-html install-pdf:
-installcheck:
-uninstall:
-TAGS:
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/texi2pod.pl ./etc/texi2pod.pl
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/etc/texi2pod.pl	2019-12-11 01:49:17.000000000 +0000
+++ ./etc/texi2pod.pl	2024-02-01 01:47:14.000000000 +0000
@@ -1,6 +1,6 @@
 #! /usr/bin/perl -w
 
-#   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+#   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
 # This file is part of GCC.
 
@@ -59,6 +59,8 @@ while ($_ = shift) {
 	    $flag = shift;
 	}
         push (@ipath, $flag);
+    } elsif (/^--no-split$/) {
+	# ignore option for makeinfo compatibility
     } elsif (/^-/) {
 	usage();
     } else {
@@ -381,6 +383,7 @@ sub postprocess
     s/\@file\{([^\}]*)\}/F<$1>/g;
     s/\@w\{([^\}]*)\}/S<$1>/g;
     s/\@(?:dmn|math)\{([^\}]*)\}/$1/g;
+    s/\@t\{([^\}]*)\}/$1/g;
 
     # keep references of the form @ref{...}, print them bold
     s/\@(?:ref)\{([^\}]*)\}/B<$1>/g;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch32-linux-nat.c ./gdb/aarch32-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch32-linux-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch32-linux-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2019 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch32-linux-nat.h ./gdb/aarch32-linux-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch32-linux-nat.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch32-linux-nat.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2019 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch32-tdep.c ./gdb/aarch32-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch32-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch32-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019 Free Software Foundation, Inc.
+/* Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch32-tdep.h ./gdb/aarch32-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch32-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch32-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019 Free Software Foundation, Inc.
+/* Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-fbsd-nat.c ./gdb/aarch64-fbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-fbsd-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-fbsd-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for FreeBSD/aarch64.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,114 +18,345 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include "arch-utils.h"
+#include "inferior.h"
 #include "regcache.h"
 #include "target.h"
+#include "nat/aarch64-hw-point.h"
 
-#include <sys/types.h>
+#include "elf/common.h"
+
+#include <sys/param.h>
 #include <sys/ptrace.h>
+#include <machine/armreg.h>
 #include <machine/reg.h>
 
 #include "fbsd-nat.h"
 #include "aarch64-tdep.h"
 #include "aarch64-fbsd-tdep.h"
+#include "aarch64-nat.h"
 #include "inf-ptrace.h"
 
+#if __FreeBSD_version >= 1400005
+#define	HAVE_DBREG
+
+#include <unordered_set>
+#endif
+
+#ifdef HAVE_DBREG
+struct aarch64_fbsd_nat_target final
+  : public aarch64_nat_target<fbsd_nat_target>
+#else
 struct aarch64_fbsd_nat_target final : public fbsd_nat_target
+#endif
 {
   void fetch_registers (struct regcache *, int) override;
   void store_registers (struct regcache *, int) override;
+
+  const struct target_desc *read_description () override;
+
+#ifdef HAVE_DBREG
+  /* Hardware breakpoints and watchpoints.  */
+  bool stopped_by_watchpoint () override;
+  bool stopped_data_address (CORE_ADDR *) override;
+  bool stopped_by_hw_breakpoint () override;
+  bool supports_stopped_by_hw_breakpoint () override;
+
+  void post_startup_inferior (ptid_t) override;
+  void post_attach (int pid) override;
+
+  void low_new_fork (ptid_t parent, pid_t child) override;
+  void low_delete_thread (thread_info *) override;
+  void low_prepare_to_resume (thread_info *) override;
+
+private:
+  void probe_debug_regs (int pid);
+  static bool debug_regs_probed;
+#endif
 };
 
 static aarch64_fbsd_nat_target the_aarch64_fbsd_nat_target;
 
-/* Determine if PT_GETREGS fetches REGNUM.  */
+/* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
+   for all registers.  */
 
-static bool
-getregs_supplies (int regnum)
+void
+aarch64_fbsd_nat_target::fetch_registers (struct regcache *regcache,
+					  int regnum)
 {
-  return (regnum >= AARCH64_X0_REGNUM && regnum <= AARCH64_CPSR_REGNUM);
+  fetch_register_set<struct reg> (regcache, regnum, PT_GETREGS,
+				  &aarch64_fbsd_gregset);
+  fetch_register_set<struct fpreg> (regcache, regnum, PT_GETFPREGS,
+				    &aarch64_fbsd_fpregset);
+
+  gdbarch *gdbarch = regcache->arch ();
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+  if (tdep->has_tls ())
+    fetch_regset<uint64_t> (regcache, regnum, NT_ARM_TLS,
+			    &aarch64_fbsd_tls_regset, tdep->tls_regnum_base);
 }
 
-/* Determine if PT_GETFPREGS fetches REGNUM.  */
+/* Store register REGNUM back into the inferior.  If REGNUM is -1, do
+   this for all registers.  */
 
-static bool
-getfpregs_supplies (int regnum)
+void
+aarch64_fbsd_nat_target::store_registers (struct regcache *regcache,
+					  int regnum)
 {
-  return (regnum >= AARCH64_V0_REGNUM && regnum <= AARCH64_FPCR_REGNUM);
+  store_register_set<struct reg> (regcache, regnum, PT_GETREGS, PT_SETREGS,
+				  &aarch64_fbsd_gregset);
+  store_register_set<struct fpreg> (regcache, regnum, PT_GETFPREGS,
+				    PT_SETFPREGS, &aarch64_fbsd_fpregset);
+
+  gdbarch *gdbarch = regcache->arch ();
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+  if (tdep->has_tls ())
+    store_regset<uint64_t> (regcache, regnum, NT_ARM_TLS,
+			    &aarch64_fbsd_tls_regset, tdep->tls_regnum_base);
 }
 
-/* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
-   for all registers.  */
+/* Implement the target read_description method.  */
 
-void
-aarch64_fbsd_nat_target::fetch_registers (struct regcache *regcache,
-					  int regnum)
+const struct target_desc *
+aarch64_fbsd_nat_target::read_description ()
 {
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
+  if (inferior_ptid == null_ptid)
+    return this->beneath ()->read_description ();
 
-  if (regnum == -1 || getregs_supplies (regnum))
-    {
-      struct reg regs;
+  aarch64_features features;
+  features.tls = have_regset (inferior_ptid, NT_ARM_TLS)? 1 : 0;
+  return aarch64_read_description (features);
+}
 
-      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-	perror_with_name (_("Couldn't get registers"));
+#ifdef HAVE_DBREG
+bool aarch64_fbsd_nat_target::debug_regs_probed;
 
-      regcache->supply_regset (&aarch64_fbsd_gregset, regnum, &regs,
-			       sizeof (regs));
-    }
+/* Set of threads which need to update debug registers on next resume.  */
 
-  if (regnum == -1 || getfpregs_supplies (regnum))
-    {
-      struct fpreg fpregs;
+static std::unordered_set<lwpid_t> aarch64_debug_pending_threads;
+
+/* Implement the "stopped_data_address" target_ops method.  */
+
+bool
+aarch64_fbsd_nat_target::stopped_data_address (CORE_ADDR *addr_p)
+{
+  siginfo_t siginfo;
+  struct aarch64_debug_reg_state *state;
+
+  if (!fbsd_nat_get_siginfo (inferior_ptid, &siginfo))
+    return false;
+
+  /* This must be a hardware breakpoint.  */
+  if (siginfo.si_signo != SIGTRAP
+      || siginfo.si_code != TRAP_TRACE
+      || siginfo.si_trapno != EXCP_WATCHPT_EL0)
+    return false;
+
+  const CORE_ADDR addr_trap = (CORE_ADDR) siginfo.si_addr;
+
+  /* Check if the address matches any watched address.  */
+  state = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+  return aarch64_stopped_data_address (state, addr_trap, addr_p);
+}
+
+/* Implement the "stopped_by_watchpoint" target_ops method.  */
+
+bool
+aarch64_fbsd_nat_target::stopped_by_watchpoint ()
+{
+  CORE_ADDR addr;
+
+  return stopped_data_address (&addr);
+}
+
+/* Implement the "stopped_by_hw_breakpoint" target_ops method.  */
+
+bool
+aarch64_fbsd_nat_target::stopped_by_hw_breakpoint ()
+{
+  siginfo_t siginfo;
+  struct aarch64_debug_reg_state *state;
+
+  if (!fbsd_nat_get_siginfo (inferior_ptid, &siginfo))
+    return false;
+
+  /* This must be a hardware breakpoint.  */
+  if (siginfo.si_signo != SIGTRAP
+      || siginfo.si_code != TRAP_TRACE
+      || siginfo.si_trapno != EXCP_WATCHPT_EL0)
+    return false;
+
+  return !stopped_by_watchpoint();
+}
 
-      if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
-	perror_with_name (_("Couldn't get floating point status"));
+/* Implement the "supports_stopped_by_hw_breakpoint" target_ops method.  */
 
-      regcache->supply_regset (&aarch64_fbsd_fpregset, regnum, &fpregs,
-			       sizeof (fpregs));
+bool
+aarch64_fbsd_nat_target::supports_stopped_by_hw_breakpoint ()
+{
+  return true;
+}
+
+/* Fetch the hardware debug register capability information.  */
+
+void
+aarch64_fbsd_nat_target::probe_debug_regs (int pid)
+{
+  if (!debug_regs_probed)
+    {
+      struct dbreg reg;
+
+      debug_regs_probed = true;
+      aarch64_num_bp_regs = 0;
+      aarch64_num_wp_regs = 0;
+
+      if (ptrace(PT_GETDBREGS, pid, (PTRACE_TYPE_ARG3) &reg, 0) == 0)
+	{
+	  switch (reg.db_debug_ver)
+	    {
+	    case AARCH64_DEBUG_ARCH_V8:
+	    case AARCH64_DEBUG_ARCH_V8_1:
+	    case AARCH64_DEBUG_ARCH_V8_2:
+	    case AARCH64_DEBUG_ARCH_V8_4:
+	    case AARCH64_DEBUG_ARCH_V8_8:
+	    case AARCH64_DEBUG_ARCH_V8_9:
+	      break;
+	    default:
+	      return;
+	    }
+
+	  aarch64_num_bp_regs = reg.db_nbkpts;
+	  if (aarch64_num_bp_regs > AARCH64_HBP_MAX_NUM)
+	    {
+	      warning (_("Unexpected number of hardware breakpoint registers"
+			 " reported by ptrace, got %d, expected %d."),
+		       aarch64_num_bp_regs, AARCH64_HBP_MAX_NUM);
+	      aarch64_num_bp_regs = AARCH64_HBP_MAX_NUM;
+	    }
+	  aarch64_num_wp_regs = reg.db_nwtpts;
+	  if (aarch64_num_wp_regs > AARCH64_HWP_MAX_NUM)
+	    {
+	      warning (_("Unexpected number of hardware watchpoint registers"
+			 " reported by ptrace, got %d, expected %d."),
+		       aarch64_num_wp_regs, AARCH64_HWP_MAX_NUM);
+	      aarch64_num_wp_regs = AARCH64_HWP_MAX_NUM;
+	    }
+	}
     }
 }
 
-/* Store register REGNUM back into the inferior.  If REGNUM is -1, do
-   this for all registers.  */
+/* Implement the virtual inf_ptrace_target::post_startup_inferior method.  */
 
 void
-aarch64_fbsd_nat_target::store_registers (struct regcache *regcache,
-					  int regnum)
+aarch64_fbsd_nat_target::post_startup_inferior (ptid_t ptid)
 {
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
+  aarch64_remove_debug_reg_state (ptid.pid ());
+  probe_debug_regs (ptid.pid ());
+  fbsd_nat_target::post_startup_inferior (ptid);
+}
 
-  if (regnum == -1 || getregs_supplies (regnum))
-    {
-      struct reg regs;
+/* Implement the "post_attach" target_ops method.  */
+
+void
+aarch64_fbsd_nat_target::post_attach (int pid)
+{
+  aarch64_remove_debug_reg_state (pid);
+  probe_debug_regs (pid);
+  fbsd_nat_target::post_attach (pid);
+}
 
-      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-	perror_with_name (_("Couldn't get registers"));
+/* Implement the virtual fbsd_nat_target::low_new_fork method.  */
 
-      regcache->collect_regset (&aarch64_fbsd_gregset, regnum, &regs,
-			       sizeof (regs));
+void
+aarch64_fbsd_nat_target::low_new_fork (ptid_t parent, pid_t child)
+{
+  struct aarch64_debug_reg_state *parent_state, *child_state;
 
-      if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-	perror_with_name (_("Couldn't write registers"));
-    }
+  /* If there is no parent state, no watchpoints nor breakpoints have
+     been set, so there is nothing to do.  */
+  parent_state = aarch64_lookup_debug_reg_state (parent.pid ());
+  if (parent_state == nullptr)
+    return;
+
+  /* The kernel clears debug registers in the new child process after
+     fork, but GDB core assumes the child inherits the watchpoints/hw
+     breakpoints of the parent, and will remove them all from the
+     forked off process.  Copy the debug registers mirrors into the
+     new process so that all breakpoints and watchpoints can be
+     removed together.  */
 
-  if (regnum == -1 || getfpregs_supplies (regnum))
+  child_state = aarch64_get_debug_reg_state (child);
+  *child_state = *parent_state;
+}
+
+/* Mark debug register state "dirty" for all threads belonging to the
+   current inferior.  */
+
+void
+aarch64_notify_debug_reg_change (ptid_t ptid,
+				 int is_watchpoint, unsigned int idx)
+{
+  for (thread_info *tp : current_inferior ()->non_exited_threads ())
     {
-      struct fpreg fpregs;
+      if (tp->ptid.lwp_p ())
+	aarch64_debug_pending_threads.emplace (tp->ptid.lwp ());
+    }
+}
+
+/* Implement the virtual fbsd_nat_target::low_delete_thread method.  */
 
-      if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
-	perror_with_name (_("Couldn't get floating point status"));
+void
+aarch64_fbsd_nat_target::low_delete_thread (thread_info *tp)
+{
+  gdb_assert(tp->ptid.lwp_p ());
+  aarch64_debug_pending_threads.erase (tp->ptid.lwp ());
+}
 
-      regcache->collect_regset (&aarch64_fbsd_fpregset, regnum, &fpregs,
-				sizeof (fpregs));
+/* Implement the virtual fbsd_nat_target::low_prepare_to_resume method.  */
 
-      if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
-	perror_with_name (_("Couldn't write floating point status"));
+void
+aarch64_fbsd_nat_target::low_prepare_to_resume (thread_info *tp)
+{
+  gdb_assert(tp->ptid.lwp_p ());
+
+  if (aarch64_debug_pending_threads.erase (tp->ptid.lwp ()) == 0)
+    return;
+
+  struct aarch64_debug_reg_state *state =
+    aarch64_lookup_debug_reg_state (tp->ptid.pid ());
+  gdb_assert(state != nullptr);
+
+  struct dbreg reg;
+  memset (&reg, 0, sizeof(reg));
+  for (int i = 0; i < aarch64_num_bp_regs; i++)
+    {
+      reg.db_breakregs[i].dbr_addr = state->dr_addr_bp[i];
+      reg.db_breakregs[i].dbr_ctrl = state->dr_ctrl_bp[i];
     }
+  for (int i = 0; i < aarch64_num_wp_regs; i++)
+    {
+      reg.db_watchregs[i].dbw_addr = state->dr_addr_wp[i];
+      reg.db_watchregs[i].dbw_ctrl = state->dr_ctrl_wp[i];
+    }
+  if (ptrace(PT_SETDBREGS, tp->ptid.lwp (), (PTRACE_TYPE_ARG3) &reg, 0) != 0)
+    error (_("Failed to set hardware debug registers"));
+}
+#else
+/* A stub that should never be called.  */
+void
+aarch64_notify_debug_reg_change (ptid_t ptid,
+				 int is_watchpoint, unsigned int idx)
+{
+  gdb_assert (true);
 }
+#endif
 
+void _initialize_aarch64_fbsd_nat ();
 void
-_initialize_aarch64_fbsd_nat (void)
+_initialize_aarch64_fbsd_nat ()
 {
+#ifdef HAVE_DBREG
+  aarch64_initialize_hw_point ();
+#endif
   add_inf_child_target (&the_aarch64_fbsd_nat_target);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-fbsd-tdep.c ./gdb/aarch64-fbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-fbsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-fbsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD/aarch64.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,6 +23,7 @@
 #include "fbsd-tdep.h"
 #include "aarch64-tdep.h"
 #include "aarch64-fbsd-tdep.h"
+#include "inferior.h"
 #include "osabi.h"
 #include "solib-svr4.h"
 #include "target.h"
@@ -49,6 +50,14 @@ static const struct regcache_map_entry a
     { 0 }
   };
 
+/* Register numbers are relative to tdep->tls_regnum_base.  */
+
+static const struct regcache_map_entry aarch64_fbsd_tls_regmap[] =
+  {
+    { 1, 0, 8 },	/* tpidr */
+    { 0 }
+  };
+
 /* In a signal frame, sp points to a 'struct sigframe' which is
    defined as:
 
@@ -79,7 +88,7 @@ static const struct regcache_map_entry a
 
 static void
 aarch64_fbsd_sigframe_init (const struct tramp_frame *self,
-			     struct frame_info *this_frame,
+			     frame_info_ptr this_frame,
 			     struct trad_frame_cache *this_cache,
 			     CORE_ADDR func)
 {
@@ -134,7 +143,35 @@ const struct regset aarch64_fbsd_fpregse
     regcache_supply_regset, regcache_collect_regset
   };
 
-/* Implement the "regset_from_core_section" gdbarch method.  */
+static void
+aarch64_fbsd_supply_tls_regset (const struct regset *regset,
+				struct regcache *regcache,
+				int regnum, const void *buf, size_t size)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  regcache->supply_regset (regset, tdep->tls_regnum_base, regnum, buf, size);
+}
+
+static void
+aarch64_fbsd_collect_tls_regset (const struct regset *regset,
+				 const struct regcache *regcache,
+				 int regnum, void *buf, size_t size)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  regcache->collect_regset (regset, tdep->tls_regnum_base, regnum, buf, size);
+}
+
+const struct regset aarch64_fbsd_tls_regset =
+  {
+    aarch64_fbsd_tls_regmap,
+    aarch64_fbsd_supply_tls_regset, aarch64_fbsd_collect_tls_regset
+  };
+
+/* Implement the "iterate_over_regset_sections" gdbarch method.  */
 
 static void
 aarch64_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
@@ -142,10 +179,54 @@ aarch64_fbsd_iterate_over_regset_section
 					   void *cb_data,
 					   const struct regcache *regcache)
 {
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
   cb (".reg", AARCH64_FBSD_SIZEOF_GREGSET, AARCH64_FBSD_SIZEOF_GREGSET,
       &aarch64_fbsd_gregset, NULL, cb_data);
   cb (".reg2", AARCH64_FBSD_SIZEOF_FPREGSET, AARCH64_FBSD_SIZEOF_FPREGSET,
       &aarch64_fbsd_fpregset, NULL, cb_data);
+
+  if (tdep->has_tls ())
+    cb (".reg-aarch-tls", AARCH64_FBSD_SIZEOF_TLSREGSET,
+	AARCH64_FBSD_SIZEOF_TLSREGSET, &aarch64_fbsd_tls_regset,
+	"TLS register", cb_data);
+}
+
+/* Implement the "core_read_description" gdbarch method.  */
+
+static const struct target_desc *
+aarch64_fbsd_core_read_description (struct gdbarch *gdbarch,
+				    struct target_ops *target, bfd *abfd)
+{
+  asection *tls = bfd_get_section_by_name (abfd, ".reg-aarch-tls");
+
+  aarch64_features features;
+  features.tls = tls != nullptr? 1 : 0;
+
+  return aarch64_read_description (features);
+}
+
+/* Implement the get_thread_local_address gdbarch method.  */
+
+static CORE_ADDR
+aarch64_fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid,
+				       CORE_ADDR lm_addr, CORE_ADDR offset)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+  struct regcache *regcache;
+
+  regcache = get_thread_arch_regcache (current_inferior (), ptid, gdbarch);
+
+  target_fetch_registers (regcache, tdep->tls_regnum_base);
+
+  ULONGEST tpidr;
+  if (regcache->cooked_read (tdep->tls_regnum_base, &tpidr) != REG_VALID)
+    error (_("Unable to fetch %%tpidr"));
+
+  /* %tpidr points to the TCB whose first member is the dtv
+      pointer.  */
+  CORE_ADDR dtv_addr = tpidr;
+  return fbsd_get_thread_local_address (gdbarch, dtv_addr, lm_addr, offset);
 }
 
 /* Implement the 'init_osabi' method of struct gdb_osabi_handler.  */
@@ -153,7 +234,7 @@ aarch64_fbsd_iterate_over_regset_section
 static void
 aarch64_fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   /* Generic FreeBSD support.  */
   fbsd_init_abi (info, gdbarch);
@@ -168,10 +249,21 @@ aarch64_fbsd_init_abi (struct gdbarch_in
 
   set_gdbarch_iterate_over_regset_sections
     (gdbarch, aarch64_fbsd_iterate_over_regset_sections);
+  set_gdbarch_core_read_description (gdbarch,
+				     aarch64_fbsd_core_read_description);
+
+  if (tdep->has_tls ())
+    {
+      set_gdbarch_fetch_tls_load_module_address (gdbarch,
+						 svr4_fetch_objfile_link_map);
+      set_gdbarch_get_thread_local_address
+	(gdbarch, aarch64_fbsd_get_thread_local_address);
+    }
 }
 
+void _initialize_aarch64_fbsd_tdep ();
 void
-_initialize_aarch64_fbsd_tdep (void)
+_initialize_aarch64_fbsd_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_aarch64, 0, GDB_OSABI_FREEBSD,
 			  aarch64_fbsd_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-fbsd-tdep.h ./gdb/aarch64-fbsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-fbsd-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-fbsd-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* FreeBSD/aarch64 target support, prototypes.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -32,7 +32,11 @@
    alignment.  */
 #define AARCH64_FBSD_SIZEOF_FPREGSET (33 * V_REGISTER_SIZE)
 
+/* The TLS regset consists of a single register.  */
+#define	AARCH64_FBSD_SIZEOF_TLSREGSET (X_REGISTER_SIZE)
+
 extern const struct regset aarch64_fbsd_gregset;
 extern const struct regset aarch64_fbsd_fpregset;
+extern const struct regset aarch64_fbsd_tls_regset;
 
 #endif /* AARCH64_FBSD_TDEP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-linux-nat.c ./gdb/aarch64-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-linux-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-linux-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for GNU/Linux AArch64.
 
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -27,6 +27,7 @@
 #include "target-descriptions.h"
 #include "auxv.h"
 #include "gdbcmd.h"
+#include "aarch64-nat.h"
 #include "aarch64-tdep.h"
 #include "aarch64-linux-tdep.h"
 #include "aarch32-linux-nat.h"
@@ -34,7 +35,7 @@
 #include "arch/arm.h"
 #include "nat/aarch64-linux.h"
 #include "nat/aarch64-linux-hw-point.h"
-#include "nat/aarch64-sve-linux-ptrace.h"
+#include "nat/aarch64-scalable-linux-ptrace.h"
 
 #include "elf/external.h"
 #include "elf/common.h"
@@ -45,16 +46,25 @@
 
 #include "gregset.h"
 #include "linux-tdep.h"
+#include "arm-tdep.h"
 
 /* Defines ps_err_e, struct ps_prochandle.  */
 #include "gdb_proc_service.h"
 #include "arch-utils.h"
 
+#include "arch/aarch64-mte-linux.h"
+
+#include "nat/aarch64-mte-linux-ptrace.h"
+#include "arch/aarch64-scalable-linux.h"
+
+#include <string.h>
+
 #ifndef TRAP_HWBKPT
 #define TRAP_HWBKPT 0x0004
 #endif
 
-class aarch64_linux_nat_target final : public linux_nat_target
+class aarch64_linux_nat_target final
+  : public aarch64_nat_target<linux_nat_target>
 {
 public:
   /* Add our register access methods.  */
@@ -64,17 +74,8 @@ public:
   const struct target_desc *read_description () override;
 
   /* Add our hardware breakpoint and watchpoint implementation.  */
-  int can_use_hw_breakpoint (enum bptype, int, int) override;
-  int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
-  int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
-  int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
-  int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
-			 struct expression *) override;
-  int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
-			 struct expression *) override;
   bool stopped_by_watchpoint () override;
   bool stopped_data_address (CORE_ADDR *) override;
-  bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
 
   int can_do_single_step () override;
 
@@ -100,74 +101,19 @@ public:
     override;
 
   struct gdbarch *thread_architecture (ptid_t) override;
-};
-
-static aarch64_linux_nat_target the_aarch64_linux_nat_target;
-
-/* Per-process data.  We don't bind this to a per-inferior registry
-   because of targets like x86 GNU/Linux that need to keep track of
-   processes that aren't bound to any inferior (e.g., fork children,
-   checkpoints).  */
-
-struct aarch64_process_info
-{
-  /* Linked list.  */
-  struct aarch64_process_info *next;
 
-  /* The process identifier.  */
-  pid_t pid;
+  bool supports_memory_tagging () override;
 
-  /* Copy of aarch64 hardware debug registers.  */
-  struct aarch64_debug_reg_state state;
+  /* Read memory allocation tags from memory via PTRACE.  */
+  bool fetch_memtags (CORE_ADDR address, size_t len,
+		      gdb::byte_vector &tags, int type) override;
+
+  /* Write allocation tags to memory via PTRACE.  */
+  bool store_memtags (CORE_ADDR address, size_t len,
+		      const gdb::byte_vector &tags, int type) override;
 };
 
-static struct aarch64_process_info *aarch64_process_list = NULL;
-
-/* Find process data for process PID.  */
-
-static struct aarch64_process_info *
-aarch64_find_process_pid (pid_t pid)
-{
-  struct aarch64_process_info *proc;
-
-  for (proc = aarch64_process_list; proc; proc = proc->next)
-    if (proc->pid == pid)
-      return proc;
-
-  return NULL;
-}
-
-/* Add process data for process PID.  Returns newly allocated info
-   object.  */
-
-static struct aarch64_process_info *
-aarch64_add_process (pid_t pid)
-{
-  struct aarch64_process_info *proc;
-
-  proc = XCNEW (struct aarch64_process_info);
-  proc->pid = pid;
-
-  proc->next = aarch64_process_list;
-  aarch64_process_list = proc;
-
-  return proc;
-}
-
-/* Get data specific info for process PID, creating it if necessary.
-   Never returns NULL.  */
-
-static struct aarch64_process_info *
-aarch64_process_info_get (pid_t pid)
-{
-  struct aarch64_process_info *proc;
-
-  proc = aarch64_find_process_pid (pid);
-  if (proc == NULL)
-    proc = aarch64_add_process (pid);
-
-  return proc;
-}
+static aarch64_linux_nat_target the_aarch64_linux_nat_target;
 
 /* Called whenever GDB is no longer debugging process PID.  It deletes
    data structures that keep track of debug register state.  */
@@ -175,32 +121,7 @@ aarch64_process_info_get (pid_t pid)
 void
 aarch64_linux_nat_target::low_forget_process (pid_t pid)
 {
-  struct aarch64_process_info *proc, **proc_link;
-
-  proc = aarch64_process_list;
-  proc_link = &aarch64_process_list;
-
-  while (proc != NULL)
-    {
-      if (proc->pid == pid)
-	{
-	  *proc_link = proc->next;
-
-	  xfree (proc);
-	  return;
-	}
-
-      proc_link = &proc->next;
-      proc = *proc_link;
-    }
-}
-
-/* Get debug registers state for process PID.  */
-
-struct aarch64_debug_reg_state *
-aarch64_get_debug_reg_state (pid_t pid)
-{
-  return &aarch64_process_info_get (pid)->state;
+  aarch64_remove_debug_reg_state (pid);
 }
 
 /* Fill GDB's register array with the general-purpose register values
@@ -216,7 +137,7 @@ fetch_gregs_from_thread (struct regcache
 
   /* Make sure REGS can hold all registers contents on both aarch64
      and arm.  */
-  gdb_static_assert (sizeof (regs) >= 18 * 4);
+  static_assert (sizeof (regs) >= 18 * 4);
 
   tid = regcache->ptid ().lwp ();
 
@@ -228,7 +149,7 @@ fetch_gregs_from_thread (struct regcache
 
   ret = ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec);
   if (ret < 0)
-    perror_with_name (_("Unable to fetch general registers."));
+    perror_with_name (_("Unable to fetch general registers"));
 
   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
     aarch32_gp_regcache_supply (regcache, (uint32_t *) regs, 1);
@@ -254,7 +175,7 @@ store_gregs_to_thread (const struct regc
 
   /* Make sure REGS can hold all registers contents on both aarch64
      and arm.  */
-  gdb_static_assert (sizeof (regs) >= 18 * 4);
+  static_assert (sizeof (regs) >= 18 * 4);
   tid = regcache->ptid ().lwp ();
 
   iovec.iov_base = &regs;
@@ -265,7 +186,7 @@ store_gregs_to_thread (const struct regc
 
   ret = ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec);
   if (ret < 0)
-    perror_with_name (_("Unable to fetch general registers."));
+    perror_with_name (_("Unable to fetch general registers"));
 
   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
     aarch32_gp_regcache_collect (regcache, (uint32_t *) regs, 1);
@@ -280,7 +201,7 @@ store_gregs_to_thread (const struct regc
 
   ret = ptrace (PTRACE_SETREGSET, tid, NT_PRSTATUS, &iovec);
   if (ret < 0)
-    perror_with_name (_("Unable to store general registers."));
+    perror_with_name (_("Unable to store general registers"));
 }
 
 /* Fill GDB's register array with the fp/simd register values
@@ -296,7 +217,7 @@ fetch_fpregs_from_thread (struct regcach
 
   /* Make sure REGS can hold all VFP registers contents on both aarch64
      and arm.  */
-  gdb_static_assert (sizeof regs >= ARM_VFP3_REGS_SIZE);
+  static_assert (sizeof regs >= ARM_VFP3_REGS_SIZE);
 
   tid = regcache->ptid ().lwp ();
 
@@ -308,7 +229,7 @@ fetch_fpregs_from_thread (struct regcach
 
       ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec);
       if (ret < 0)
-	perror_with_name (_("Unable to fetch VFP registers."));
+	perror_with_name (_("Unable to fetch VFP registers"));
 
       aarch32_vfp_regcache_supply (regcache, (gdb_byte *) &regs, 32);
     }
@@ -320,7 +241,7 @@ fetch_fpregs_from_thread (struct regcach
 
       ret = ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec);
       if (ret < 0)
-	perror_with_name (_("Unable to fetch vFP/SIMD registers."));
+	perror_with_name (_("Unable to fetch vFP/SIMD registers"));
 
       for (regno = AARCH64_V0_REGNUM; regno <= AARCH64_V31_REGNUM; regno++)
 	regcache->raw_supply (regno, &regs.vregs[regno - AARCH64_V0_REGNUM]);
@@ -343,7 +264,7 @@ store_fpregs_to_thread (const struct reg
 
   /* Make sure REGS can hold all VFP registers contents on both aarch64
      and arm.  */
-  gdb_static_assert (sizeof regs >= ARM_VFP3_REGS_SIZE);
+  static_assert (sizeof regs >= ARM_VFP3_REGS_SIZE);
   tid = regcache->ptid ().lwp ();
 
   iovec.iov_base = &regs;
@@ -354,7 +275,7 @@ store_fpregs_to_thread (const struct reg
 
       ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec);
       if (ret < 0)
-	perror_with_name (_("Unable to fetch VFP registers."));
+	perror_with_name (_("Unable to fetch VFP registers"));
 
       aarch32_vfp_regcache_collect (regcache, (gdb_byte *) &regs, 32);
     }
@@ -366,7 +287,7 @@ store_fpregs_to_thread (const struct reg
 
       ret = ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec);
       if (ret < 0)
-	perror_with_name (_("Unable to fetch FP/SIMD registers."));
+	perror_with_name (_("Unable to fetch FP/SIMD registers"));
 
       for (regno = AARCH64_V0_REGNUM; regno <= AARCH64_V31_REGNUM; regno++)
 	if (REG_VALID == regcache->get_register_status (regno))
@@ -383,55 +304,107 @@ store_fpregs_to_thread (const struct reg
     {
       ret = ptrace (PTRACE_SETREGSET, tid, NT_ARM_VFP, &iovec);
       if (ret < 0)
-	perror_with_name (_("Unable to store VFP registers."));
+	perror_with_name (_("Unable to store VFP registers"));
     }
   else
     {
       ret = ptrace (PTRACE_SETREGSET, tid, NT_FPREGSET, &iovec);
       if (ret < 0)
-	perror_with_name (_("Unable to store FP/SIMD registers."));
+	perror_with_name (_("Unable to store FP/SIMD registers"));
     }
 }
 
-/* Fill GDB's register array with the sve register values
-   from the current thread.  */
+/* Fill GDB's REGCACHE with the valid SVE register values from the thread
+   associated with REGCACHE.
+
+   This function handles reading data from SVE or SSVE states, depending
+   on which state is active at the moment.  */
 
 static void
 fetch_sveregs_from_thread (struct regcache *regcache)
 {
-  std::unique_ptr<gdb_byte[]> base
-    = aarch64_sve_get_sveregs (regcache->ptid ().lwp ());
-  aarch64_sve_regs_copy_to_reg_buf (regcache, base.get ());
+  /* Fetch SVE state from the thread and copy it into the register cache.  */
+  aarch64_sve_regs_copy_to_reg_buf (regcache->ptid ().lwp (), regcache);
 }
 
-/* Store to the current thread the valid sve register
-   values in the GDB's register array.  */
+/* Store the valid SVE register values from GDB's REGCACHE to the thread
+   associated with REGCACHE.
+
+   This function handles writing data to SVE or SSVE states, depending
+   on which state is active at the moment.  */
 
 static void
 store_sveregs_to_thread (struct regcache *regcache)
 {
-  int ret;
-  struct iovec iovec;
-  int tid = regcache->ptid ().lwp ();
+  /* Fetch SVE state from the register cache and update the thread TID with
+     it.  */
+  aarch64_sve_regs_copy_from_reg_buf (regcache->ptid ().lwp (), regcache);
+}
 
-  /* First store vector length to the thread.  This is done first to ensure the
-     ptrace buffers read from the kernel are the correct size.  */
-  if (!aarch64_sve_set_vq (tid, regcache))
-    perror_with_name (_("Unable to set VG register."));
-
-  /* Obtain a dump of SVE registers from ptrace.  */
-  std::unique_ptr<gdb_byte[]> base = aarch64_sve_get_sveregs (tid);
-
-  /* Overwrite with regcache state.  */
-  aarch64_sve_regs_copy_from_reg_buf (regcache, base.get ());
-
-  /* Write back to the kernel.  */
-  iovec.iov_base = base.get ();
-  iovec.iov_len = ((struct user_sve_header *) base.get ())->size;
-  ret = ptrace (PTRACE_SETREGSET, tid, NT_ARM_SVE, &iovec);
+/* Fill GDB's REGCACHE with the ZA register set contents from the
+   thread associated with REGCACHE.  If there is no active ZA register state,
+   make the ZA register contents zero.  */
 
-  if (ret < 0)
-    perror_with_name (_("Unable to store sve registers"));
+static void
+fetch_za_from_thread (struct regcache *regcache)
+{
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+
+  /* Read ZA state from the thread to the register cache.  */
+  aarch64_za_regs_copy_to_reg_buf (regcache->ptid ().lwp (),
+				   regcache,
+				   tdep->sme_za_regnum,
+				   tdep->sme_svg_regnum,
+				   tdep->sme_svcr_regnum);
+}
+
+/* Store the NT_ARM_ZA register set contents from GDB's REGCACHE to the thread
+   associated with REGCACHE.  */
+
+static void
+store_za_to_thread (struct regcache *regcache)
+{
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+
+  /* Write ZA state from the register cache to the thread.  */
+  aarch64_za_regs_copy_from_reg_buf (regcache->ptid ().lwp (),
+				     regcache,
+				     tdep->sme_za_regnum,
+				     tdep->sme_svg_regnum,
+				     tdep->sme_svcr_regnum);
+}
+
+/* Fill GDB's REGCACHE with the ZT register set contents from the
+   thread associated with REGCACHE.  If there is no active ZA register state,
+   make the ZT register contents zero.  */
+
+static void
+fetch_zt_from_thread (struct regcache *regcache)
+{
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+
+  /* Read ZT state from the thread to the register cache.  */
+  aarch64_zt_regs_copy_to_reg_buf (regcache->ptid ().lwp (),
+				   regcache,
+				   tdep->sme2_zt0_regnum);
+}
+
+/* Store the NT_ARM_ZT register set contents from GDB's REGCACHE to the
+   thread associated with REGCACHE.  */
+
+static void
+store_zt_to_thread (struct regcache *regcache)
+{
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+
+  /* Write ZT state from the register cache to the thread.  */
+  aarch64_zt_regs_copy_from_reg_buf (regcache->ptid ().lwp (),
+				     regcache,
+				     tdep->sme2_zt0_regnum);
 }
 
 /* Fill GDB's register array with the pointer authentication mask values from
@@ -440,7 +413,8 @@ store_sveregs_to_thread (struct regcache
 static void
 fetch_pauth_masks_from_thread (struct regcache *regcache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
   int ret;
   struct iovec iovec;
   uint64_t pauth_regset[2] = {0, 0};
@@ -451,7 +425,7 @@ fetch_pauth_masks_from_thread (struct re
 
   ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_PAC_MASK, &iovec);
   if (ret != 0)
-    perror_with_name (_("unable to fetch pauth registers."));
+    perror_with_name (_("unable to fetch pauth registers"));
 
   regcache->raw_supply (AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base),
 			&pauth_regset[0]);
@@ -459,64 +433,326 @@ fetch_pauth_masks_from_thread (struct re
 			&pauth_regset[1]);
 }
 
-/* Implement the "fetch_registers" target_ops method.  */
+/* Fill GDB's register array with the MTE register values from
+   the current thread.  */
 
-void
-aarch64_linux_nat_target::fetch_registers (struct regcache *regcache,
-					   int regno)
+static void
+fetch_mteregs_from_thread (struct regcache *regcache)
+{
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+  int regno = tdep->mte_reg_base;
+
+  gdb_assert (regno != -1);
+
+  uint64_t tag_ctl = 0;
+  struct iovec iovec;
+
+  iovec.iov_base = &tag_ctl;
+  iovec.iov_len = sizeof (tag_ctl);
+
+  int tid = get_ptrace_pid (regcache->ptid ());
+  if (ptrace (PTRACE_GETREGSET, tid, NT_ARM_TAGGED_ADDR_CTRL, &iovec) != 0)
+      perror_with_name (_("unable to fetch MTE registers"));
+
+  regcache->raw_supply (regno, &tag_ctl);
+}
+
+/* Store to the current thread the valid MTE register set in the GDB's
+   register array.  */
+
+static void
+store_mteregs_to_thread (struct regcache *regcache)
+{
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+  int regno = tdep->mte_reg_base;
+
+  gdb_assert (regno != -1);
+
+  uint64_t tag_ctl = 0;
+
+  if (REG_VALID != regcache->get_register_status (regno))
+    return;
+
+  regcache->raw_collect (regno, (char *) &tag_ctl);
+
+  struct iovec iovec;
+
+  iovec.iov_base = &tag_ctl;
+  iovec.iov_len = sizeof (tag_ctl);
+
+  int tid = get_ptrace_pid (regcache->ptid ());
+  if (ptrace (PTRACE_SETREGSET, tid, NT_ARM_TAGGED_ADDR_CTRL, &iovec) != 0)
+    perror_with_name (_("unable to store MTE registers"));
+}
+
+/* Fill GDB's register array with the TLS register values from
+   the current thread.  */
+
+static void
+fetch_tlsregs_from_thread (struct regcache *regcache)
+{
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+  int regno = tdep->tls_regnum_base;
+
+  gdb_assert (regno != -1);
+  gdb_assert (tdep->tls_register_count > 0);
+
+  uint64_t tpidrs[tdep->tls_register_count];
+  memset(tpidrs, 0, sizeof(tpidrs));
+
+  struct iovec iovec;
+  iovec.iov_base = tpidrs;
+  iovec.iov_len = sizeof (tpidrs);
+
+  int tid = get_ptrace_pid (regcache->ptid ());
+  if (ptrace (PTRACE_GETREGSET, tid, NT_ARM_TLS, &iovec) != 0)
+      perror_with_name (_("unable to fetch TLS registers"));
+
+  for (int i = 0; i < tdep->tls_register_count; i++)
+    regcache->raw_supply (regno + i, &tpidrs[i]);
+}
+
+/* Store to the current thread the valid TLS register set in GDB's
+   register array.  */
+
+static void
+store_tlsregs_to_thread (struct regcache *regcache)
+{
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+  int regno = tdep->tls_regnum_base;
+
+  gdb_assert (regno != -1);
+  gdb_assert (tdep->tls_register_count > 0);
+
+  uint64_t tpidrs[tdep->tls_register_count];
+  memset(tpidrs, 0, sizeof(tpidrs));
+
+  for (int i = 0; i < tdep->tls_register_count; i++)
+    {
+      if (REG_VALID != regcache->get_register_status (regno + i))
+	continue;
+
+      regcache->raw_collect (regno + i, (char *) &tpidrs[i]);
+    }
+
+  struct iovec iovec;
+  iovec.iov_base = &tpidrs;
+  iovec.iov_len = sizeof (tpidrs);
+
+  int tid = get_ptrace_pid (regcache->ptid ());
+  if (ptrace (PTRACE_SETREGSET, tid, NT_ARM_TLS, &iovec) != 0)
+    perror_with_name (_("unable to store TLS register"));
+}
+
+/* The AArch64 version of the "fetch_registers" target_ops method.  Fetch
+   REGNO from the target and place the result into REGCACHE.  */
+
+static void
+aarch64_fetch_registers (struct regcache *regcache, int regno)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
 
+  /* Do we need to fetch all registers?  */
   if (regno == -1)
     {
       fetch_gregs_from_thread (regcache);
-      if (tdep->has_sve ())
+
+      /* We attempt to fetch SVE registers if there is support for either
+	 SVE or SME (due to the SSVE state of SME).  */
+      if (tdep->has_sve () || tdep->has_sme ())
 	fetch_sveregs_from_thread (regcache);
       else
 	fetch_fpregs_from_thread (regcache);
 
       if (tdep->has_pauth ())
 	fetch_pauth_masks_from_thread (regcache);
+
+      if (tdep->has_mte ())
+	fetch_mteregs_from_thread (regcache);
+
+      if (tdep->has_tls ())
+	fetch_tlsregs_from_thread (regcache);
+
+      if (tdep->has_sme ())
+	fetch_za_from_thread (regcache);
+
+      if (tdep->has_sme2 ())
+	fetch_zt_from_thread (regcache);
     }
+  /* General purpose register?  */
   else if (regno < AARCH64_V0_REGNUM)
     fetch_gregs_from_thread (regcache);
-  else if (tdep->has_sve ())
+  /* SVE register?  */
+  else if ((tdep->has_sve () || tdep->has_sme ())
+	   && regno <= AARCH64_SVE_VG_REGNUM)
     fetch_sveregs_from_thread (regcache);
-  else
+  /* FPSIMD register?  */
+  else if (regno <= AARCH64_FPCR_REGNUM)
     fetch_fpregs_from_thread (regcache);
+  /* PAuth register?  */
+  else if (tdep->has_pauth ()
+	   && (regno == AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base)
+	       || regno == AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base)))
+    fetch_pauth_masks_from_thread (regcache);
+  /* SME register?  */
+  else if (tdep->has_sme () && regno >= tdep->sme_reg_base
+	   && regno < tdep->sme_reg_base + 3)
+    fetch_za_from_thread (regcache);
+  /* SME2 register?  */
+  else if (tdep->has_sme2 () && regno == tdep->sme2_zt0_regnum)
+    fetch_zt_from_thread (regcache);
+  /* MTE register?  */
+  else if (tdep->has_mte ()
+	   && (regno == tdep->mte_reg_base))
+    fetch_mteregs_from_thread (regcache);
+  /* TLS register?  */
+  else if (tdep->has_tls ()
+	   && regno >= tdep->tls_regnum_base
+	   && regno < tdep->tls_regnum_base + tdep->tls_register_count)
+    fetch_tlsregs_from_thread (regcache);
+}
+
+/* A version of the "fetch_registers" target_ops method used when running
+   32-bit ARM code on an AArch64 target.  Fetch REGNO from the target and
+   place the result into REGCACHE.  */
+
+static void
+aarch32_fetch_registers (struct regcache *regcache, int regno)
+{
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (regcache->arch ());
 
-  if (tdep->has_pauth ())
+  if (regno == -1)
     {
-      if (regno == AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base)
-	  || regno == AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base))
-	fetch_pauth_masks_from_thread (regcache);
+      fetch_gregs_from_thread (regcache);
+      if (tdep->vfp_register_count > 0)
+	fetch_fpregs_from_thread (regcache);
     }
+  else if (regno < ARM_F0_REGNUM || regno == ARM_PS_REGNUM)
+    fetch_gregs_from_thread (regcache);
+  else if (tdep->vfp_register_count > 0
+	   && regno >= ARM_D0_REGNUM
+	   && (regno < ARM_D0_REGNUM + tdep->vfp_register_count
+	       || regno == ARM_FPSCR_REGNUM))
+    fetch_fpregs_from_thread (regcache);
 }
 
-/* Implement the "store_registers" target_ops method.  */
+/* Implement the "fetch_registers" target_ops method.  */
 
 void
-aarch64_linux_nat_target::store_registers (struct regcache *regcache,
+aarch64_linux_nat_target::fetch_registers (struct regcache *regcache,
 					   int regno)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
+  if (gdbarch_bfd_arch_info (regcache->arch ())->bits_per_word == 32)
+    aarch32_fetch_registers (regcache, regno);
+  else
+    aarch64_fetch_registers (regcache, regno);
+}
+
+/* The AArch64 version of the "store_registers" target_ops method.  Copy
+   the value of register REGNO from REGCACHE into the the target.  */
 
+static void
+aarch64_store_registers (struct regcache *regcache, int regno)
+{
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+
+  /* Do we need to store all registers?  */
   if (regno == -1)
     {
       store_gregs_to_thread (regcache);
-      if (tdep->has_sve ())
+
+      /* We attempt to store SVE registers if there is support for either
+	 SVE or SME (due to the SSVE state of SME).  */
+      if (tdep->has_sve () || tdep->has_sme ())
 	store_sveregs_to_thread (regcache);
       else
 	store_fpregs_to_thread (regcache);
+
+      if (tdep->has_mte ())
+	store_mteregs_to_thread (regcache);
+
+      if (tdep->has_tls ())
+	store_tlsregs_to_thread (regcache);
+
+      if (tdep->has_sme ())
+	store_za_to_thread (regcache);
+
+      if (tdep->has_sme2 ())
+	store_zt_to_thread (regcache);
     }
+  /* General purpose register?  */
   else if (regno < AARCH64_V0_REGNUM)
     store_gregs_to_thread (regcache);
-  else if (tdep->has_sve ())
+  /* SVE register?  */
+  else if ((tdep->has_sve () || tdep->has_sme ())
+	   && regno <= AARCH64_SVE_VG_REGNUM)
     store_sveregs_to_thread (regcache);
-  else
+  /* FPSIMD register?  */
+  else if (regno <= AARCH64_FPCR_REGNUM)
+    store_fpregs_to_thread (regcache);
+  /* SME register?  */
+  else if (tdep->has_sme () && regno >= tdep->sme_reg_base
+	   && regno < tdep->sme_reg_base + 3)
+    store_za_to_thread (regcache);
+  else if (tdep->has_sme2 () && regno == tdep->sme2_zt0_regnum)
+    store_zt_to_thread (regcache);
+  /* MTE register?  */
+  else if (tdep->has_mte ()
+	   && (regno == tdep->mte_reg_base))
+    store_mteregs_to_thread (regcache);
+  /* TLS register?  */
+  else if (tdep->has_tls ()
+	   && regno >= tdep->tls_regnum_base
+	   && regno < tdep->tls_regnum_base + tdep->tls_register_count)
+    store_tlsregs_to_thread (regcache);
+
+  /* PAuth registers are read-only.  */
+}
+
+/* A version of the "store_registers" target_ops method used when running
+   32-bit ARM code on an AArch64 target.  Copy the value of register REGNO
+   from REGCACHE into the the target.  */
+
+static void
+aarch32_store_registers (struct regcache *regcache, int regno)
+{
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (regcache->arch ());
+
+  if (regno == -1)
+    {
+      store_gregs_to_thread (regcache);
+      if (tdep->vfp_register_count > 0)
+	store_fpregs_to_thread (regcache);
+    }
+  else if (regno < ARM_F0_REGNUM || regno == ARM_PS_REGNUM)
+    store_gregs_to_thread (regcache);
+  else if (tdep->vfp_register_count > 0
+	   && regno >= ARM_D0_REGNUM
+	   && (regno < ARM_D0_REGNUM + tdep->vfp_register_count
+	       || regno == ARM_FPSCR_REGNUM))
     store_fpregs_to_thread (regcache);
 }
 
+/* Implement the "store_registers" target_ops method.  */
+
+void
+aarch64_linux_nat_target::store_registers (struct regcache *regcache,
+					   int regno)
+{
+  if (gdbarch_bfd_arch_info (regcache->arch ())->bits_per_word == 32)
+    aarch32_store_registers (regcache, regno);
+  else
+    aarch64_store_registers (regcache, regno);
+}
+
 /* Fill register REGNO (if it is a general-purpose register) in
    *GREGSETPS with the value in GDB's register array.  If REGNO is -1,
    do this for all registers.  */
@@ -600,14 +836,14 @@ ps_err_e
 ps_get_thread_area (struct ps_prochandle *ph,
 		    lwpid_t lwpid, int idx, void **base)
 {
-  int is_64bit_p
-    = (gdbarch_bfd_arch_info (target_gdbarch ())->bits_per_word == 64);
+  gdbarch *arch = current_inferior ()->arch ();
+  int is_64bit_p = (gdbarch_bfd_arch_info (arch)->bits_per_word == 64);
 
   return aarch64_ps_get_thread_area (ph, lwpid, idx, base, is_64bit_p);
 }
 
 
-/* Implement the "post_startup_inferior" target_ops method.  */
+/* Implement the virtual inf_ptrace_target::post_startup_inferior method.  */
 
 void
 aarch64_linux_nat_target::post_startup_inferior (ptid_t ptid)
@@ -641,7 +877,10 @@ aarch64_linux_nat_target::read_descripti
   gdb_byte regbuf[ARM_VFP3_REGS_SIZE];
   struct iovec iovec;
 
-  tid = inferior_ptid.lwp ();
+  if (inferior_ptid == null_ptid)
+    return this->beneath ()->read_description ();
+
+  tid = inferior_ptid.pid ();
 
   iovec.iov_base = regbuf;
   iovec.iov_len = ARM_VFP3_REGS_SIZE;
@@ -650,10 +889,25 @@ aarch64_linux_nat_target::read_descripti
   if (ret == 0)
     return aarch32_read_description ();
 
-  CORE_ADDR hwcap = linux_get_hwcap (this);
+  CORE_ADDR hwcap = linux_get_hwcap ();
+  CORE_ADDR hwcap2 = linux_get_hwcap2 ();
+
+  aarch64_features features;
+  /* SVE/SSVE check.  Reading VQ may return either the regular vector length
+     or the streaming vector length, depending on whether streaming mode is
+     active or not.  */
+  features.vq = aarch64_sve_get_vq (tid);
+  features.pauth = hwcap & AARCH64_HWCAP_PACA;
+  features.mte = hwcap2 & HWCAP2_MTE;
+  features.tls = aarch64_tls_register_count (tid);
+  /* SME feature check.  */
+  features.svq = aarch64_za_get_svq (tid);
+
+  /* Check for SME2 support.  */
+  if ((hwcap2 & HWCAP2_SME2) || (hwcap2 & HWCAP2_SME2P1))
+    features.sme2 = supports_zt_registers (tid);
 
-  return aarch64_read_description (aarch64_sve_get_vq (tid),
-				   hwcap & AARCH64_HWCAP_PACA);
+  return aarch64_read_description (features);
 }
 
 /* Convert a native/host siginfo object, into/from the siginfo in the
@@ -685,188 +939,12 @@ aarch64_linux_nat_target::low_siginfo_fi
   return false;
 }
 
-/* Returns the number of hardware watchpoints of type TYPE that we can
-   set.  Value is positive if we can set CNT watchpoints, zero if
-   setting watchpoints of type TYPE is not supported, and negative if
-   CNT is more than the maximum number of watchpoints of type TYPE
-   that we can support.  TYPE is one of bp_hardware_watchpoint,
-   bp_read_watchpoint, bp_write_watchpoint, or bp_hardware_breakpoint.
-   CNT is the number of such watchpoints used so far (including this
-   one).  OTHERTYPE is non-zero if other types of watchpoints are
-   currently enabled.  */
-
-int
-aarch64_linux_nat_target::can_use_hw_breakpoint (enum bptype type,
-						 int cnt, int othertype)
-{
-  if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
-      || type == bp_access_watchpoint || type == bp_watchpoint)
-    {
-      if (aarch64_num_wp_regs == 0)
-	return 0;
-    }
-  else if (type == bp_hardware_breakpoint)
-    {
-      if (aarch64_num_bp_regs == 0)
-	return 0;
-    }
-  else
-    gdb_assert_not_reached ("unexpected breakpoint type");
-
-  /* We always return 1 here because we don't have enough information
-     about possible overlap of addresses that they want to watch.  As an
-     extreme example, consider the case where all the watchpoints watch
-     the same address and the same region length: then we can handle a
-     virtually unlimited number of watchpoints, due to debug register
-     sharing implemented via reference counts.  */
-  return 1;
-}
-
-/* Insert a hardware-assisted breakpoint at BP_TGT->reqstd_address.
-   Return 0 on success, -1 on failure.  */
-
-int
-aarch64_linux_nat_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
-						struct bp_target_info *bp_tgt)
-{
-  int ret;
-  CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
-  int len;
-  const enum target_hw_bp_type type = hw_execute;
-  struct aarch64_debug_reg_state *state
-    = aarch64_get_debug_reg_state (inferior_ptid.pid ());
-
-  gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
-
-  if (show_debug_regs)
-    fprintf_unfiltered
-      (gdb_stdlog,
-       "insert_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
-       (unsigned long) addr, len);
-
-  ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */, state);
-
-  if (show_debug_regs)
-    {
-      aarch64_show_debug_reg_state (state,
-				    "insert_hw_breakpoint", addr, len, type);
-    }
-
-  return ret;
-}
-
-/* Remove a hardware-assisted breakpoint at BP_TGT->placed_address.
-   Return 0 on success, -1 on failure.  */
-
-int
-aarch64_linux_nat_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
-						struct bp_target_info *bp_tgt)
-{
-  int ret;
-  CORE_ADDR addr = bp_tgt->placed_address;
-  int len = 4;
-  const enum target_hw_bp_type type = hw_execute;
-  struct aarch64_debug_reg_state *state
-    = aarch64_get_debug_reg_state (inferior_ptid.pid ());
-
-  gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
-
-  if (show_debug_regs)
-    fprintf_unfiltered
-      (gdb_stdlog, "remove_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
-       (unsigned long) addr, len);
-
-  ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */, state);
-
-  if (show_debug_regs)
-    {
-      aarch64_show_debug_reg_state (state,
-				    "remove_hw_watchpoint", addr, len, type);
-    }
-
-  return ret;
-}
-
-/* Implement the "insert_watchpoint" target_ops method.
-
-   Insert a watchpoint to watch a memory region which starts at
-   address ADDR and whose length is LEN bytes.  Watch memory accesses
-   of the type TYPE.  Return 0 on success, -1 on failure.  */
-
-int
-aarch64_linux_nat_target::insert_watchpoint (CORE_ADDR addr, int len,
-					     enum target_hw_bp_type type,
-					     struct expression *cond)
-{
-  int ret;
-  struct aarch64_debug_reg_state *state
-    = aarch64_get_debug_reg_state (inferior_ptid.pid ());
-
-  if (show_debug_regs)
-    fprintf_unfiltered (gdb_stdlog,
-			"insert_watchpoint on entry (addr=0x%08lx, len=%d)\n",
-			(unsigned long) addr, len);
-
-  gdb_assert (type != hw_execute);
-
-  ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */, state);
-
-  if (show_debug_regs)
-    {
-      aarch64_show_debug_reg_state (state,
-				    "insert_watchpoint", addr, len, type);
-    }
-
-  return ret;
-}
-
-/* Implement the "remove_watchpoint" target_ops method.
-   Remove a watchpoint that watched the memory region which starts at
-   address ADDR, whose length is LEN bytes, and for accesses of the
-   type TYPE.  Return 0 on success, -1 on failure.  */
-
-int
-aarch64_linux_nat_target::remove_watchpoint (CORE_ADDR addr, int len,
-					     enum target_hw_bp_type type,
-					     struct expression *cond)
-{
-  int ret;
-  struct aarch64_debug_reg_state *state
-    = aarch64_get_debug_reg_state (inferior_ptid.pid ());
-
-  if (show_debug_regs)
-    fprintf_unfiltered (gdb_stdlog,
-			"remove_watchpoint on entry (addr=0x%08lx, len=%d)\n",
-			(unsigned long) addr, len);
-
-  gdb_assert (type != hw_execute);
-
-  ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */, state);
-
-  if (show_debug_regs)
-    {
-      aarch64_show_debug_reg_state (state,
-				    "remove_watchpoint", addr, len, type);
-    }
-
-  return ret;
-}
-
-/* Implement the "region_ok_for_hw_watchpoint" target_ops method.  */
-
-int
-aarch64_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
-{
-  return aarch64_linux_region_ok_for_watchpoint (addr, len);
-}
-
 /* Implement the "stopped_data_address" target_ops method.  */
 
 bool
 aarch64_linux_nat_target::stopped_data_address (CORE_ADDR *addr_p)
 {
   siginfo_t siginfo;
-  int i;
   struct aarch64_debug_reg_state *state;
 
   if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
@@ -877,47 +955,16 @@ aarch64_linux_nat_target::stopped_data_a
       || (siginfo.si_code & 0xffff) != TRAP_HWBKPT)
     return false;
 
+  /* Make sure to ignore the top byte, otherwise we may not recognize a
+     hardware watchpoint hit.  The stopped data addresses coming from the
+     kernel can potentially be tagged addresses.  */
+  struct gdbarch *gdbarch = thread_architecture (inferior_ptid);
+  const CORE_ADDR addr_trap
+    = gdbarch_remove_non_address_bits (gdbarch, (CORE_ADDR) siginfo.si_addr);
+
   /* Check if the address matches any watched address.  */
   state = aarch64_get_debug_reg_state (inferior_ptid.pid ());
-  for (i = aarch64_num_wp_regs - 1; i >= 0; --i)
-    {
-      const unsigned int offset
-	= aarch64_watchpoint_offset (state->dr_ctrl_wp[i]);
-      const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]);
-      const CORE_ADDR addr_trap = (CORE_ADDR) siginfo.si_addr;
-      const CORE_ADDR addr_watch = state->dr_addr_wp[i] + offset;
-      const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 8);
-      const CORE_ADDR addr_orig = state->dr_addr_orig_wp[i];
-
-      if (state->dr_ref_count_wp[i]
-	  && DR_CONTROL_ENABLED (state->dr_ctrl_wp[i])
-	  && addr_trap >= addr_watch_aligned
-	  && addr_trap < addr_watch + len)
-	{
-	  /* ADDR_TRAP reports the first address of the memory range
-	     accessed by the CPU, regardless of what was the memory
-	     range watched.  Thus, a large CPU access that straddles
-	     the ADDR_WATCH..ADDR_WATCH+LEN range may result in an
-	     ADDR_TRAP that is lower than the
-	     ADDR_WATCH..ADDR_WATCH+LEN range.  E.g.:
-
-	     addr: |   4   |   5   |   6   |   7   |   8   |
-				   |---- range watched ----|
-		   |----------- range accessed ------------|
-
-	     In this case, ADDR_TRAP will be 4.
-
-	     To match a watchpoint known to GDB core, we must never
-	     report *ADDR_P outside of any ADDR_WATCH..ADDR_WATCH+LEN
-	     range.  ADDR_WATCH <= ADDR_TRAP < ADDR_ORIG is a false
-	     positive on kernels older than 4.10.  See PR
-	     external/20207.  */
-	  *addr_p = addr_orig;
-	  return true;
-	}
-    }
-
-  return false;
+  return aarch64_stopped_data_address (state, addr_trap, addr_p);
 }
 
 /* Implement the "stopped_by_watchpoint" target_ops method.  */
@@ -930,15 +977,6 @@ aarch64_linux_nat_target::stopped_by_wat
   return stopped_data_address (&addr);
 }
 
-/* Implement the "watchpoint_addr_within_range" target_ops method.  */
-
-bool
-aarch64_linux_nat_target::watchpoint_addr_within_range (CORE_ADDR addr,
-							CORE_ADDR start, int length)
-{
-  return start <= addr && start + length - 1 >= addr;
-}
-
 /* Implement the "can_do_single_step" target_ops method.  */
 
 int
@@ -947,59 +985,100 @@ aarch64_linux_nat_target::can_do_single_
   return 1;
 }
 
-/* Implement the "thread_architecture" target_ops method.  */
+/* Implement the "thread_architecture" target_ops method.
+
+   Returns the gdbarch for the thread identified by PTID.  If the thread in
+   question is a 32-bit ARM thread, then the architecture returned will be
+   that of the process itself.
+
+   If the thread is an AArch64 thread then we need to check the current
+   vector length; if the vector length has changed then we need to lookup a
+   new gdbarch that matches the new vector length.  */
 
 struct gdbarch *
 aarch64_linux_nat_target::thread_architecture (ptid_t ptid)
 {
-  /* Return the gdbarch for the current thread.  If the vector length has
-     changed since the last time this was called, then do a further lookup.  */
+  /* Find the current gdbarch the same way as process_stratum_target.  */
+  inferior *inf = find_inferior_ptid (this, ptid);
+  gdb_assert (inf != NULL);
 
+  /* If this is a 32-bit architecture, then this is ARM, not AArch64.
+     There's no SVE vectors here, so just return the inferior
+     architecture.  */
+  if (gdbarch_bfd_arch_info (inf->arch ())->bits_per_word == 32)
+    return inf->arch ();
+
+  /* Only return the inferior's gdbarch if both vq and svq match the ones in
+     the tdep.  */
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (inf->arch ());
   uint64_t vq = aarch64_sve_get_vq (ptid.lwp ());
+  uint64_t svq = aarch64_za_get_svq (ptid.lwp ());
+  if (vq == tdep->vq && svq == tdep->sme_svq)
+    return inf->arch ();
 
-  /* Find the current gdbarch the same way as process_stratum_target.  Only
-     return it if the current vector length matches the one in the tdep.  */
-  inferior *inf = find_inferior_ptid (ptid);
-  gdb_assert (inf != NULL);
-  if (vq == gdbarch_tdep (inf->gdbarch)->vq)
-    return inf->gdbarch;
-
-  /* We reach here if the vector length for the thread is different from its
+  /* We reach here if any vector length for the thread is different from its
      value at process start.  Lookup gdbarch via info (potentially creating a
-     new one), stashing the vector length inside id.  Use -1 for when SVE
-     unavailable, to distinguish from an unset value of 0.  */
+     new one) by using a target description that corresponds to the new vq/svq
+     value and the current architecture features.  */
+
+  const struct target_desc *tdesc = gdbarch_target_desc (inf->arch ());
+  aarch64_features features = aarch64_features_from_target_desc (tdesc);
+  features.vq = vq;
+  features.svq = svq;
+
+  /* Check for the SME2 feature.  */
+  features.sme2 = supports_zt_registers (ptid.lwp ());
+
   struct gdbarch_info info;
-  gdbarch_info_init (&info);
-  info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu);
-  info.id = (int *) (vq == 0 ? -1 : vq);
+  info.bfd_arch_info = bfd_lookup_arch (bfd_arch_aarch64, bfd_mach_aarch64);
+  info.target_desc = aarch64_read_description (features);
   return gdbarch_find_by_info (info);
 }
 
-/* Define AArch64 maintenance commands.  */
+/* Implement the "supports_memory_tagging" target_ops method.  */
 
-static void
-add_show_debug_regs_command (void)
+bool
+aarch64_linux_nat_target::supports_memory_tagging ()
 {
-  /* A maintenance command to enable printing the internal DRi mirror
-     variables.  */
-  add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
-			   &show_debug_regs, _("\
-Set whether to show variables that mirror the AArch64 debug registers."), _("\
-Show whether to show variables that mirror the AArch64 debug registers."), _("\
-Use \"on\" to enable, \"off\" to disable.\n\
-If enabled, the debug registers values are shown when GDB inserts\n\
-or removes a hardware breakpoint or watchpoint, and when the inferior\n\
-triggers a breakpoint or watchpoint."),
-			   NULL,
-			   NULL,
-			   &maintenance_set_cmdlist,
-			   &maintenance_show_cmdlist);
+  return (linux_get_hwcap2 () & HWCAP2_MTE) != 0;
+}
+
+/* Implement the "fetch_memtags" target_ops method.  */
+
+bool
+aarch64_linux_nat_target::fetch_memtags (CORE_ADDR address, size_t len,
+					 gdb::byte_vector &tags, int type)
+{
+  int tid = get_ptrace_pid (inferior_ptid);
+
+  /* Allocation tags?  */
+  if (type == static_cast<int> (aarch64_memtag_type::mte_allocation))
+    return aarch64_mte_fetch_memtags (tid, address, len, tags);
+
+  return false;
+}
+
+/* Implement the "store_memtags" target_ops method.  */
+
+bool
+aarch64_linux_nat_target::store_memtags (CORE_ADDR address, size_t len,
+					 const gdb::byte_vector &tags, int type)
+{
+  int tid = get_ptrace_pid (inferior_ptid);
+
+  /* Allocation tags?  */
+  if (type == static_cast<int> (aarch64_memtag_type::mte_allocation))
+    return aarch64_mte_store_memtags (tid, address, len, tags);
+
+  return false;
 }
 
+void _initialize_aarch64_linux_nat ();
 void
-_initialize_aarch64_linux_nat (void)
+_initialize_aarch64_linux_nat ()
 {
-  add_show_debug_regs_command ();
+  aarch64_initialize_hw_point ();
 
   /* Register the target.  */
   linux_target = &the_aarch64_linux_nat_target;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-linux-tdep.c ./gdb/aarch64-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-linux-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-linux-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux AArch64.
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -30,7 +30,10 @@
 #include "symtab.h"
 #include "tramp-frame.h"
 #include "trad-frame.h"
+#include "target.h"
 #include "target/target.h"
+#include "expop.h"
+#include "auxv.h"
 
 #include "regcache.h"
 #include "regset.h"
@@ -44,6 +47,21 @@
 #include "record-full.h"
 #include "linux-record.h"
 
+#include "arch/aarch64-mte-linux.h"
+#include "arch/aarch64-scalable-linux.h"
+
+#include "arch-utils.h"
+#include "value.h"
+
+#include "gdbsupport/selftest.h"
+
+#include "elf/common.h"
+#include "elf/aarch64.h"
+#include "arch/aarch64-insn.h"
+
+/* For std::pow */
+#include <cmath>
+
 /* Signal frame handling.
 
       +------------+  ^
@@ -139,6 +157,9 @@
 #define AARCH64_EXTRA_MAGIC			0x45585401
 #define AARCH64_FPSIMD_MAGIC			0x46508001
 #define AARCH64_SVE_MAGIC			0x53564501
+#define AARCH64_ZA_MAGIC			0x54366345
+#define AARCH64_TPIDR2_MAGIC			0x54504902
+#define AARCH64_ZT_MAGIC			0x5a544e01
 
 /* Defines for the extra_context that follows an AARCH64_EXTRA_MAGIC.  */
 #define AARCH64_EXTRA_DATAP_OFFSET		8
@@ -151,13 +172,76 @@
 
 /* Defines for the sve structure that follows an AARCH64_SVE_MAGIC.  */
 #define AARCH64_SVE_CONTEXT_VL_OFFSET		8
+#define AARCH64_SVE_CONTEXT_FLAGS_OFFSET	10
 #define AARCH64_SVE_CONTEXT_REGS_OFFSET		16
 #define AARCH64_SVE_CONTEXT_P_REGS_OFFSET(vq) (32 * vq * 16)
 #define AARCH64_SVE_CONTEXT_FFR_OFFSET(vq) \
   (AARCH64_SVE_CONTEXT_P_REGS_OFFSET (vq) + (16 * vq * 2))
 #define AARCH64_SVE_CONTEXT_SIZE(vq) \
   (AARCH64_SVE_CONTEXT_FFR_OFFSET (vq) + (vq * 2))
+/* Flag indicating the SVE Context describes streaming mode.  */
+#define SVE_SIG_FLAG_SM				0x1
 
+/* SME constants.  */
+#define AARCH64_SME_CONTEXT_SVL_OFFSET		8
+#define AARCH64_SME_CONTEXT_REGS_OFFSET		16
+#define AARCH64_SME_CONTEXT_ZA_SIZE(svq) \
+  ((sve_vl_from_vq (svq) * sve_vl_from_vq (svq)))
+#define AARCH64_SME_CONTEXT_SIZE(svq) \
+  (AARCH64_SME_CONTEXT_REGS_OFFSET + AARCH64_SME_CONTEXT_ZA_SIZE (svq))
+
+/* TPIDR2 register value offset in the TPIDR2 signal frame context.  */
+#define AARCH64_TPIDR2_CONTEXT_TPIDR2_OFFSET	8
+
+/* SME2 (ZT) constants.  */
+/* Offset of the field containing the number of registers in the SME2 signal
+   context state.  */
+#define AARCH64_SME2_CONTEXT_NREGS_OFFSET	8
+/* Offset of the beginning of the register data for the first ZT register in
+   the signal context state.  */
+#define AARCH64_SME2_CONTEXT_REGS_OFFSET	16
+
+/* Holds information about the signal frame.  */
+struct aarch64_linux_sigframe
+{
+  /* The stack pointer value.  */
+  CORE_ADDR sp = 0;
+  /* The sigcontext address.  */
+  CORE_ADDR sigcontext_address = 0;
+  /* The start/end signal frame section addresses.  */
+  CORE_ADDR section = 0;
+  CORE_ADDR section_end = 0;
+
+  /* Starting address of the section containing the general purpose
+     registers.  */
+  CORE_ADDR gpr_section = 0;
+  /* Starting address of the section containing the FPSIMD registers.  */
+  CORE_ADDR fpsimd_section = 0;
+  /* Starting address of the section containing the SVE registers.  */
+  CORE_ADDR sve_section = 0;
+  /* Starting address of the section containing the ZA register.  */
+  CORE_ADDR za_section = 0;
+  /* Starting address of the section containing the TPIDR2 register.  */
+  CORE_ADDR tpidr2_section = 0;
+  /* Starting address of the section containing the ZT registers.  */
+  CORE_ADDR zt_section = 0;
+  /* Starting address of the section containing extra information.  */
+  CORE_ADDR extra_section = 0;
+
+  /* The vector length (SVE or SSVE).  */
+  ULONGEST vl = 0;
+  /* The streaming vector length (SSVE/ZA).  */
+  ULONGEST svl = 0;
+  /* Number of ZT registers in this context.  */
+  unsigned int zt_register_count = 0;
+
+  /* True if we are in streaming mode, false otherwise.  */
+  bool streaming_mode = false;
+  /* True if we have a ZA payload, false otherwise.  */
+  bool za_payload = false;
+  /* True if we have a ZT entry in the signal context, false otherwise.  */
+  bool zt_available = false;
+};
 
 /* Read an aarch64_ctx, returning the magic value, and setting *SIZE to the
    size, or return 0 on error.  */
@@ -180,84 +264,266 @@ read_aarch64_ctx (CORE_ADDR ctx_addr, en
   return magic;
 }
 
-/* Implement the "init" method of struct tramp_frame.  */
+/* Given CACHE, use the trad_frame* functions to restore the FPSIMD
+   registers from a signal frame.
+
+   FPSIMD_CONTEXT is the address of the signal frame context containing FPSIMD
+   data.  */
 
 static void
-aarch64_linux_sigframe_init (const struct tramp_frame *self,
-			     struct frame_info *this_frame,
-			     struct trad_frame_cache *this_cache,
-			     CORE_ADDR func)
+aarch64_linux_restore_vregs (struct gdbarch *gdbarch,
+			     struct trad_frame_cache *cache,
+			     CORE_ADDR fpsimd_context)
 {
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  /* WARNING: SIMD state is laid out in memory in target-endian format.
+
+     So we have a couple cases to consider:
+
+     1 - If the target is big endian, then SIMD state is big endian,
+     requiring a byteswap.
+
+     2 - If the target is little endian, then SIMD state is little endian, so
+     no byteswap is needed. */
+
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, AARCH64_SP_REGNUM);
-  CORE_ADDR sigcontext_addr = (sp + AARCH64_RT_SIGFRAME_UCONTEXT_OFFSET
-			       + AARCH64_UCONTEXT_SIGCONTEXT_OFFSET );
-  CORE_ADDR section = sigcontext_addr + AARCH64_SIGCONTEXT_RESERVED_OFFSET;
-  CORE_ADDR section_end = section + AARCH64_SIGCONTEXT_RESERVED_SIZE;
-  CORE_ADDR fpsimd = 0;
-  CORE_ADDR sve_regs = 0;
-  uint32_t size, magic;
-  bool extra_found = false;
   int num_regs = gdbarch_num_regs (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
-  /* Read in the integer registers.  */
-
-  for (int i = 0; i < 31; i++)
+  for (int i = 0; i < 32; i++)
     {
-      trad_frame_set_reg_addr (this_cache,
-			       AARCH64_X0_REGNUM + i,
-			       sigcontext_addr + AARCH64_SIGCONTEXT_XO_OFFSET
-				 + i * AARCH64_SIGCONTEXT_REG_SIZE);
-    }
-  trad_frame_set_reg_addr (this_cache, AARCH64_SP_REGNUM,
-			   sigcontext_addr + AARCH64_SIGCONTEXT_XO_OFFSET
-			     + 31 * AARCH64_SIGCONTEXT_REG_SIZE);
-  trad_frame_set_reg_addr (this_cache, AARCH64_PC_REGNUM,
-			   sigcontext_addr + AARCH64_SIGCONTEXT_XO_OFFSET
-			     + 32 * AARCH64_SIGCONTEXT_REG_SIZE);
+      CORE_ADDR offset = (fpsimd_context + AARCH64_FPSIMD_V0_OFFSET
+			  + (i * AARCH64_FPSIMD_VREG_SIZE));
+
+      gdb_byte buf[V_REGISTER_SIZE];
+
+      /* Read the contents of the V register.  */
+      if (target_read_memory (offset, buf, V_REGISTER_SIZE))
+	error (_("Failed to read fpsimd register from signal context."));
+
+      if (byte_order == BFD_ENDIAN_BIG)
+	{
+	  size_t size = V_REGISTER_SIZE/2;
+
+	  /* Read the two halves of the V register in reverse byte order.  */
+	  CORE_ADDR u64 = extract_unsigned_integer (buf, size,
+						    byte_order);
+	  CORE_ADDR l64 = extract_unsigned_integer (buf + size, size,
+						    byte_order);
+
+	  /* Copy the reversed bytes to the buffer.  */
+	  store_unsigned_integer (buf, size, BFD_ENDIAN_LITTLE, l64);
+	  store_unsigned_integer (buf + size , size, BFD_ENDIAN_LITTLE, u64);
+
+	  /* Now we can store the correct bytes for the V register.  */
+	  trad_frame_set_reg_value_bytes (cache, AARCH64_V0_REGNUM + i,
+					  {buf, V_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_Q0_REGNUM
+					  + i, {buf, Q_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_D0_REGNUM
+					  + i, {buf, D_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_S0_REGNUM
+					  + i, {buf, S_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_H0_REGNUM
+					  + i, {buf, H_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_B0_REGNUM
+					  + i, {buf, B_REGISTER_SIZE});
+
+	  if (tdep->has_sve ())
+	    trad_frame_set_reg_value_bytes (cache,
+					    num_regs + AARCH64_SVE_V0_REGNUM
+					    + i, {buf, V_REGISTER_SIZE});
+	}
+      else
+	{
+	  /* Little endian, just point at the address containing the register
+	     value.  */
+	  trad_frame_set_reg_addr (cache, AARCH64_V0_REGNUM + i, offset);
+	  trad_frame_set_reg_addr (cache, num_regs + AARCH64_Q0_REGNUM + i,
+				   offset);
+	  trad_frame_set_reg_addr (cache, num_regs + AARCH64_D0_REGNUM + i,
+				   offset);
+	  trad_frame_set_reg_addr (cache, num_regs + AARCH64_S0_REGNUM + i,
+				   offset);
+	  trad_frame_set_reg_addr (cache, num_regs + AARCH64_H0_REGNUM + i,
+				   offset);
+	  trad_frame_set_reg_addr (cache, num_regs + AARCH64_B0_REGNUM + i,
+				   offset);
+
+	  if (tdep->has_sve ())
+	    trad_frame_set_reg_addr (cache, num_regs + AARCH64_SVE_V0_REGNUM
+				     + i, offset);
+	}
+
+      if (tdep->has_sve ())
+	{
+	  /* If SVE is supported for this target, zero out the Z
+	     registers then copy the first 16 bytes of each of the V
+	     registers to the associated Z register.  Otherwise the Z
+	     registers will contain uninitialized data.  */
+	  std::vector<gdb_byte> z_buffer (tdep->vq * 16);
+
+	  /* We have already handled the endianness swap above, so we don't need
+	     to worry about it here.  */
+	  memcpy (z_buffer.data (), buf, V_REGISTER_SIZE);
+	  trad_frame_set_reg_value_bytes (cache,
+					  AARCH64_SVE_Z0_REGNUM + i,
+					  z_buffer);
+	}
+    }
+}
+
+/* Given a signal frame THIS_FRAME, read the signal frame information into
+   SIGNAL_FRAME.  */
+
+static void
+aarch64_linux_read_signal_frame_info (frame_info_ptr this_frame,
+				  struct aarch64_linux_sigframe &signal_frame)
+{
+  signal_frame.sp = get_frame_register_unsigned (this_frame, AARCH64_SP_REGNUM);
+  signal_frame.sigcontext_address
+    = signal_frame.sp + AARCH64_RT_SIGFRAME_UCONTEXT_OFFSET
+      + AARCH64_UCONTEXT_SIGCONTEXT_OFFSET;
+  signal_frame.section
+    = signal_frame.sigcontext_address + AARCH64_SIGCONTEXT_RESERVED_OFFSET;
+  signal_frame.section_end
+    = signal_frame.section + AARCH64_SIGCONTEXT_RESERVED_SIZE;
+
+  signal_frame.gpr_section
+    = signal_frame.sigcontext_address + AARCH64_SIGCONTEXT_XO_OFFSET;
+
+  /* Search for all the other sections, stopping at null.  */
+  CORE_ADDR section = signal_frame.section;
+  CORE_ADDR section_end = signal_frame.section_end;
+  uint32_t size, magic;
+  bool extra_found = false;
+  enum bfd_endian byte_order
+    = gdbarch_byte_order (get_frame_arch (this_frame));
 
-  /* Search for the FP and SVE sections, stopping at null.  */
   while ((magic = read_aarch64_ctx (section, byte_order, &size)) != 0
 	 && size != 0)
     {
       switch (magic)
 	{
 	case AARCH64_FPSIMD_MAGIC:
-	  fpsimd = section;
-	  section += size;
-	  break;
+	  {
+	    signal_frame.fpsimd_section = section;
+	    section += size;
+	    break;
+	  }
 
 	case AARCH64_SVE_MAGIC:
 	  {
 	    /* Check if the section is followed by a full SVE dump, and set
 	       sve_regs if it is.  */
 	    gdb_byte buf[4];
-	    uint16_t vq;
-
-	    if (!tdep->has_sve ())
-	      break;
 
+	    /* Extract the vector length.  */
 	    if (target_read_memory (section + AARCH64_SVE_CONTEXT_VL_OFFSET,
 				    buf, 2) != 0)
 	      {
+		warning (_("Failed to read the vector length from the SVE "
+			   "signal frame context."));
 		section += size;
 		break;
 	      }
-	    vq = sve_vq_from_vl (extract_unsigned_integer (buf, 2, byte_order));
 
-	    if (vq != tdep->vq)
-	      error (_("Invalid vector length in signal frame %d vs %s."), vq,
-		     pulongest (tdep->vq));
+	    signal_frame.vl = extract_unsigned_integer (buf, 2, byte_order);
 
+	    /* Extract the flags to check if we are in streaming mode.  */
+	    if (target_read_memory (section
+				    + AARCH64_SVE_CONTEXT_FLAGS_OFFSET,
+				    buf, 2) != 0)
+	      {
+		warning (_("Failed to read the flags from the SVE signal frame"
+			   " context."));
+		section += size;
+		break;
+	      }
+
+	    uint16_t flags = extract_unsigned_integer (buf, 2, byte_order);
+
+	    /* Is this SSVE data? If so, we are in streaming mode.  */
+	    signal_frame.streaming_mode
+	      = (flags & SVE_SIG_FLAG_SM) ? true : false;
+
+	    ULONGEST vq = sve_vq_from_vl (signal_frame.vl);
 	    if (size >= AARCH64_SVE_CONTEXT_SIZE (vq))
-	      sve_regs = section + AARCH64_SVE_CONTEXT_REGS_OFFSET;
+	      {
+		signal_frame.sve_section
+		  = section + AARCH64_SVE_CONTEXT_REGS_OFFSET;
+	      }
+	    section += size;
+	    break;
+	  }
+
+	case AARCH64_ZA_MAGIC:
+	  {
+	    /* Check if the section is followed by a full ZA dump, and set
+	       za_state if it is.  */
+	    gdb_byte buf[2];
+
+	    /* Extract the streaming vector length.  */
+	    if (target_read_memory (section + AARCH64_SME_CONTEXT_SVL_OFFSET,
+				    buf, 2) != 0)
+	      {
+		warning (_("Failed to read the streaming vector length from "
+			   "ZA signal frame context."));
+		section += size;
+		break;
+	      }
+
+	    signal_frame.svl = extract_unsigned_integer (buf, 2, byte_order);
+	    ULONGEST svq = sve_vq_from_vl (signal_frame.svl);
+
+	    if (size >= AARCH64_SME_CONTEXT_SIZE (svq))
+	      {
+		signal_frame.za_section
+		  = section + AARCH64_SME_CONTEXT_REGS_OFFSET;
+		signal_frame.za_payload = true;
+	      }
+	    section += size;
+	    break;
+	  }
 
+	case AARCH64_TPIDR2_MAGIC:
+	  {
+	    /* This is context containing the tpidr2 register.  */
+	    signal_frame.tpidr2_section = section;
 	    section += size;
 	    break;
 	  }
+	case AARCH64_ZT_MAGIC:
+	  {
+	    gdb_byte buf[2];
+
+	    /* Extract the number of ZT registers available in this
+	       context.  */
+	    if (target_read_memory (section + AARCH64_SME2_CONTEXT_NREGS_OFFSET,
+				    buf, 2) != 0)
+	      {
+		warning (_("Failed to read the number of ZT registers from the "
+			   "ZT signal frame context."));
+		section += size;
+		break;
+	      }
+
+	    signal_frame.zt_register_count
+	      = extract_unsigned_integer (buf, 2, byte_order);
+
+	    /* This is a context containing the ZT registers.  This should only
+	       exist if we also have the ZA context.  The presence of the ZT
+	       context without the ZA context is invalid.  */
+	    signal_frame.zt_section = section;
+	    signal_frame.zt_available = true;
 
+	    section += size;
+	    break;
+	  }
 	case AARCH64_EXTRA_MAGIC:
 	  {
 	    /* Extra is always the last valid section in reserved and points to
@@ -269,11 +535,14 @@ aarch64_linux_sigframe_init (const struc
 	    if (target_read_memory (section + AARCH64_EXTRA_DATAP_OFFSET,
 				    buf, 8) != 0)
 	      {
+		warning (_("Failed to read the extra section address from the"
+			   " signal frame context."));
 		section += size;
 		break;
 	      }
 
 	    section = extract_unsigned_integer (buf, 8, byte_order);
+	    signal_frame.extra_section = section;
 	    extra_found = true;
 	    break;
 	  }
@@ -290,13 +559,56 @@ aarch64_linux_sigframe_init (const struc
 	break;
     }
 
-  if (sve_regs != 0)
+    /* Sanity check that if the ZT entry exists, the ZA entry must also
+       exist.  */
+    if (signal_frame.zt_available && !signal_frame.za_payload)
+      error (_("While reading signal context information, found a ZT context "
+	       "without a ZA context, which is invalid."));
+}
+
+/* Implement the "init" method of struct tramp_frame.  */
+
+static void
+aarch64_linux_sigframe_init (const struct tramp_frame *self,
+			     frame_info_ptr this_frame,
+			     struct trad_frame_cache *this_cache,
+			     CORE_ADDR func)
+{
+  /* Read the signal context information.  */
+  struct aarch64_linux_sigframe signal_frame;
+  aarch64_linux_read_signal_frame_info (this_frame, signal_frame);
+
+  /* Now we have all the data required to restore the registers from the
+     signal frame.  */
+
+  /* Restore the general purpose registers.  */
+  CORE_ADDR offset = signal_frame.gpr_section;
+  for (int i = 0; i < 31; i++)
     {
-      CORE_ADDR offset;
+      trad_frame_set_reg_addr (this_cache, AARCH64_X0_REGNUM + i, offset);
+      offset += AARCH64_SIGCONTEXT_REG_SIZE;
+    }
+  trad_frame_set_reg_addr (this_cache, AARCH64_SP_REGNUM, offset);
+  offset += AARCH64_SIGCONTEXT_REG_SIZE;
+  trad_frame_set_reg_addr (this_cache, AARCH64_PC_REGNUM, offset);
+
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  /* Restore the SVE / FPSIMD registers.  */
+  if (tdep->has_sve () && signal_frame.sve_section != 0)
+    {
+      ULONGEST vq = sve_vq_from_vl (signal_frame.vl);
+      CORE_ADDR sve_regs = signal_frame.sve_section;
 
+      /* Restore VG.  */
+      trad_frame_set_reg_value (this_cache, AARCH64_SVE_VG_REGNUM,
+				sve_vg_from_vl (signal_frame.vl));
+
+      int num_regs = gdbarch_num_regs (gdbarch);
       for (int i = 0; i < 32; i++)
 	{
-	  offset = sve_regs + (i * tdep->vq * 16);
+	  offset = sve_regs + (i * vq * 16);
 	  trad_frame_set_reg_addr (this_cache, AARCH64_SVE_Z0_REGNUM + i,
 				   offset);
 	  trad_frame_set_reg_addr (this_cache,
@@ -314,48 +626,111 @@ aarch64_linux_sigframe_init (const struc
 				   offset);
 	}
 
-      offset = sve_regs + AARCH64_SVE_CONTEXT_P_REGS_OFFSET (tdep->vq);
+      offset = sve_regs + AARCH64_SVE_CONTEXT_P_REGS_OFFSET (vq);
       for (int i = 0; i < 16; i++)
 	trad_frame_set_reg_addr (this_cache, AARCH64_SVE_P0_REGNUM + i,
-				 offset + (i * tdep->vq * 2));
+				 offset + (i * vq * 2));
 
-      offset = sve_regs + AARCH64_SVE_CONTEXT_FFR_OFFSET (tdep->vq);
+      offset = sve_regs + AARCH64_SVE_CONTEXT_FFR_OFFSET (vq);
       trad_frame_set_reg_addr (this_cache, AARCH64_SVE_FFR_REGNUM, offset);
     }
 
-  if (fpsimd != 0)
+  /* Restore the FPSIMD registers.  */
+  if (signal_frame.fpsimd_section != 0)
     {
+      CORE_ADDR fpsimd = signal_frame.fpsimd_section;
+
       trad_frame_set_reg_addr (this_cache, AARCH64_FPSR_REGNUM,
 			       fpsimd + AARCH64_FPSIMD_FPSR_OFFSET);
       trad_frame_set_reg_addr (this_cache, AARCH64_FPCR_REGNUM,
 			       fpsimd + AARCH64_FPSIMD_FPCR_OFFSET);
 
       /* If there was no SVE section then set up the V registers.  */
-      if (sve_regs == 0)
-	for (int i = 0; i < 32; i++)
-	  {
-	    CORE_ADDR offset = (fpsimd + AARCH64_FPSIMD_V0_OFFSET
-				  + (i * AARCH64_FPSIMD_VREG_SIZE));
+      if (!tdep->has_sve () || signal_frame.sve_section == 0)
+	aarch64_linux_restore_vregs (gdbarch, this_cache, fpsimd);
+    }
 
-	    trad_frame_set_reg_addr (this_cache, AARCH64_V0_REGNUM + i, offset);
-	    trad_frame_set_reg_addr (this_cache,
-				     num_regs + AARCH64_Q0_REGNUM + i, offset);
-	    trad_frame_set_reg_addr (this_cache,
-				     num_regs + AARCH64_D0_REGNUM + i, offset);
-	    trad_frame_set_reg_addr (this_cache,
-				     num_regs + AARCH64_S0_REGNUM + i, offset);
-	    trad_frame_set_reg_addr (this_cache,
-				     num_regs + AARCH64_H0_REGNUM + i, offset);
-	    trad_frame_set_reg_addr (this_cache,
-				     num_regs + AARCH64_B0_REGNUM + i, offset);
-	    if (tdep->has_sve ())
-	      trad_frame_set_reg_addr (this_cache,
-				       num_regs + AARCH64_SVE_V0_REGNUM + i,
-				       offset);
-	  }
+  /* Restore the SME registers.  */
+  if (tdep->has_sme ())
+    {
+      if (signal_frame.za_section != 0)
+	{
+	  /* Restore the ZA state.  */
+	  trad_frame_set_reg_addr (this_cache, tdep->sme_za_regnum,
+				   signal_frame.za_section);
+	}
+
+      /* Restore/Reconstruct SVCR.  */
+      ULONGEST svcr = 0;
+      svcr |= signal_frame.za_payload ? SVCR_ZA_BIT : 0;
+      svcr |= signal_frame.streaming_mode ? SVCR_SM_BIT : 0;
+      trad_frame_set_reg_value (this_cache, tdep->sme_svcr_regnum, svcr);
+
+      /* Restore SVG.  */
+      trad_frame_set_reg_value (this_cache, tdep->sme_svg_regnum,
+				sve_vg_from_vl (signal_frame.svl));
+
+      /* Handle SME2 (ZT).  */
+      if (tdep->has_sme2 ()
+	  && signal_frame.za_section != 0
+	  && signal_frame.zt_register_count > 0)
+	{
+	  /* Is ZA state available?  */
+	  gdb_assert (svcr & SVCR_ZA_BIT);
+
+	  /* Restore the ZT state.  For now we assume that we only have
+	     a single ZT register.  If/When more ZT registers appear, we
+	     should update the code to handle that case accordingly.  */
+	  trad_frame_set_reg_addr (this_cache, tdep->sme2_zt0_regnum,
+				   signal_frame.zt_section
+				   + AARCH64_SME2_CONTEXT_REGS_OFFSET);
+	}
     }
 
-  trad_frame_set_id (this_cache, frame_id_build (sp, func));
+  /* Restore the tpidr2 register, if the target supports it and if there is
+     an entry for it.  */
+  if (signal_frame.tpidr2_section != 0 && tdep->has_tls ()
+      && tdep->tls_register_count >= 2)
+    {
+      /* Restore tpidr2.  */
+      trad_frame_set_reg_addr (this_cache, tdep->tls_regnum_base + 1,
+			       signal_frame.tpidr2_section
+			       + AARCH64_TPIDR2_CONTEXT_TPIDR2_OFFSET);
+    }
+
+  trad_frame_set_id (this_cache, frame_id_build (signal_frame.sp, func));
+}
+
+/* Implements the "prev_arch" method of struct tramp_frame.  */
+
+static struct gdbarch *
+aarch64_linux_sigframe_prev_arch (frame_info_ptr this_frame,
+				  void **frame_cache)
+{
+  struct trad_frame_cache *cache
+    = (struct trad_frame_cache *) *frame_cache;
+
+  gdb_assert (cache != nullptr);
+
+  struct aarch64_linux_sigframe signal_frame;
+  aarch64_linux_read_signal_frame_info (this_frame, signal_frame);
+
+  /* The SVE vector length and the SME vector length may change from frame to
+     frame.  Make sure we report the correct architecture to the previous
+     frame.
+
+     We can reuse the next frame's architecture here, as it should be mostly
+     the same, except for potential different vg and svg values.  */
+  const struct target_desc *tdesc
+    = gdbarch_target_desc (get_frame_arch (this_frame));
+  aarch64_features features = aarch64_features_from_target_desc (tdesc);
+  features.vq = sve_vq_from_vl (signal_frame.vl);
+  features.svq = (uint8_t) sve_vq_from_vl (signal_frame.svl);
+
+  struct gdbarch_info info;
+  info.bfd_arch_info = bfd_lookup_arch (bfd_arch_aarch64, bfd_mach_aarch64);
+  info.target_desc = aarch64_read_description (features);
+  return gdbarch_find_by_info (info);
 }
 
 static const struct tramp_frame aarch64_linux_rt_sigframe =
@@ -372,7 +747,9 @@ static const struct tramp_frame aarch64_
     {0xd4000001, ULONGEST_MAX},
     {TRAMP_SENTINEL_INSN, ULONGEST_MAX}
   },
-  aarch64_linux_sigframe_init
+  aarch64_linux_sigframe_init,
+  nullptr, /* validate */
+  aarch64_linux_sigframe_prev_arch, /* prev_arch */
 };
 
 /* Register maps.  */
@@ -433,50 +810,55 @@ const struct regset aarch64_linux_fpregs
 
 #define SVE_HEADER_FLAG_SVE		1
 
-/* Get VQ value from SVE section in the core dump.  */
+/* Get the vector quotient (VQ) or streaming vector quotient (SVQ) value
+   from the section named SECTION_NAME.
+
+   Return non-zero if successful and 0 otherwise.  */
 
 static uint64_t
-aarch64_linux_core_read_vq (struct gdbarch *gdbarch, bfd *abfd)
+aarch64_linux_core_read_vq (struct gdbarch *gdbarch, bfd *abfd,
+			    const char *section_name)
 {
-  gdb_byte header[SVE_HEADER_SIZE];
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  asection *sve_section = bfd_get_section_by_name (abfd, ".reg-aarch-sve");
+  gdb_assert (section_name != nullptr);
+
+  asection *section = bfd_get_section_by_name (abfd, section_name);
 
-  if (sve_section == nullptr)
+  if (section == nullptr)
     {
       /* No SVE state.  */
       return 0;
     }
 
-  size_t size = bfd_section_size (sve_section);
+  size_t size = bfd_section_size (section);
 
   /* Check extended state size.  */
   if (size < SVE_HEADER_SIZE)
     {
-      warning (_("'.reg-aarch-sve' section in core file too small."));
+      warning (_("'%s' core file section is too small. "
+		 "Expected %s bytes, got %s bytes"), section_name,
+		 pulongest (SVE_HEADER_SIZE), pulongest (size));
       return 0;
     }
 
-  if (!bfd_get_section_contents (abfd, sve_section, header, 0, SVE_HEADER_SIZE))
+  gdb_byte header[SVE_HEADER_SIZE];
+
+  if (!bfd_get_section_contents (abfd, section, header, 0, SVE_HEADER_SIZE))
     {
       warning (_("Couldn't read sve header from "
-		 "'.reg-aarch-sve' section in core file."));
+		 "'%s' core file section."), section_name);
       return 0;
     }
 
-  uint64_t vl = extract_unsigned_integer (header + SVE_HEADER_VL_OFFSET,
-					  SVE_HEADER_VL_LENGTH, byte_order);
-  uint64_t vq = sve_vq_from_vl (vl);
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  uint64_t vq
+    = sve_vq_from_vl (extract_unsigned_integer (header + SVE_HEADER_VL_OFFSET,
+						SVE_HEADER_VL_LENGTH,
+						byte_order));
 
-  if (vq > AARCH64_MAX_SVE_VQ)
+  if (vq > AARCH64_MAX_SVE_VQ || vq == 0)
     {
-      warning (_("SVE Vector length in core file not supported by this version"
-		 " of GDB.  (VQ=%s)"), pulongest (vq));
-      return 0;
-    }
-  else if (vq == 0)
-    {
-      warning (_("SVE Vector length in core file is invalid. (VQ=%s"),
+      warning (_("SVE/SSVE vector length in core file is invalid."
+		 " (max vq=%d) (detected vq=%s)"), AARCH64_MAX_SVE_VQ,
 	       pulongest (vq));
       return 0;
     }
@@ -484,14 +866,53 @@ aarch64_linux_core_read_vq (struct gdbar
   return vq;
 }
 
+/* Get the vector quotient (VQ) value from CORE_BFD's sections.
+
+   Return non-zero if successful and 0 otherwise.  */
+
+static uint64_t
+aarch64_linux_core_read_vq_from_sections (struct gdbarch *gdbarch,
+					  bfd *core_bfd)
+{
+  /* First check if we have a SSVE section.  If so, check if it is active.  */
+  asection *section = bfd_get_section_by_name (core_bfd, ".reg-aarch-ssve");
+
+  if (section != nullptr)
+    {
+      /* We've found a SSVE section, so now fetch its data.  */
+      gdb_byte header[SVE_HEADER_SIZE];
+
+      if (bfd_get_section_contents (core_bfd, section, header, 0,
+				    SVE_HEADER_SIZE))
+	{
+	  /* Check if the SSVE section has SVE contents.  */
+	  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+	  uint16_t flags
+	    = extract_unsigned_integer (header + SVE_HEADER_FLAGS_OFFSET,
+					SVE_HEADER_FLAGS_LENGTH, byte_order);
+
+	  if (flags & SVE_HEADER_FLAG_SVE)
+	    {
+	      /* The SSVE state is active, so return the vector length from the
+		 the SSVE section.  */
+	      return aarch64_linux_core_read_vq (gdbarch, core_bfd,
+						 ".reg-aarch-ssve");
+	    }
+	}
+    }
+
+  /* No valid SSVE section.  Return the vq from the SVE section (if any).  */
+  return aarch64_linux_core_read_vq (gdbarch, core_bfd, ".reg-aarch-sve");
+}
+
 /* Supply register REGNUM from BUF to REGCACHE, using the register map
    in REGSET.  If REGNUM is -1, do this for all registers in REGSET.
-   If BUF is NULL, set the registers to "unavailable" status.  */
+   If BUF is nullptr, set the registers to "unavailable" status.  */
 
 static void
-aarch64_linux_supply_sve_regset (const struct regset *regset,
-				 struct regcache *regcache,
-				 int regnum, const void *buf, size_t size)
+supply_sve_regset (const struct regset *regset,
+		   struct regcache *regcache,
+		   int regnum, const void *buf, size_t size)
 {
   gdb_byte *header = (gdb_byte *) buf;
   struct gdbarch *gdbarch = regcache->arch ();
@@ -543,19 +964,95 @@ aarch64_linux_supply_sve_regset (const s
     }
 }
 
+/* Collect an inactive SVE register set state.  This is equivalent to a
+   fpsimd layout.
+
+   Collect the data from REGCACHE to BUF, using the register
+   map in REGSET.  */
+
+static void
+collect_inactive_sve_regset (const struct regcache *regcache,
+			     void *buf, size_t size, int vg_regnum)
+{
+  gdb_byte *header = (gdb_byte *) buf;
+  struct gdbarch *gdbarch = regcache->arch ();
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+
+  gdb_assert (buf != nullptr);
+  gdb_assert (size >= SVE_CORE_DUMMY_SIZE);
+
+  /* Zero out everything first.  */
+  memset ((gdb_byte *) buf, 0, SVE_CORE_DUMMY_SIZE);
+
+  /* BUF starts with a SVE header prior to the register dump.  */
+
+  /* Dump the default size of an empty SVE payload.  */
+  uint32_t real_size = SVE_CORE_DUMMY_SIZE;
+  store_unsigned_integer (header + SVE_HEADER_SIZE_OFFSET,
+			  SVE_HEADER_SIZE_LENGTH, byte_order, real_size);
+
+  /* Dump a dummy max size.  */
+  uint32_t max_size = SVE_CORE_DUMMY_MAX_SIZE;
+  store_unsigned_integer (header + SVE_HEADER_MAX_SIZE_OFFSET,
+			  SVE_HEADER_MAX_SIZE_LENGTH, byte_order, max_size);
+
+  /* Dump the vector length.  */
+  ULONGEST vg = 0;
+  regcache->raw_collect (vg_regnum, &vg);
+  uint16_t vl = sve_vl_from_vg (vg);
+  store_unsigned_integer (header + SVE_HEADER_VL_OFFSET, SVE_HEADER_VL_LENGTH,
+			  byte_order, vl);
+
+  /* Dump the standard maximum vector length.  */
+  uint16_t max_vl = SVE_CORE_DUMMY_MAX_VL;
+  store_unsigned_integer (header + SVE_HEADER_MAX_VL_OFFSET,
+			  SVE_HEADER_MAX_VL_LENGTH, byte_order,
+			  max_vl);
+
+  /* The rest of the fields are zero.  */
+  uint16_t flags = SVE_CORE_DUMMY_FLAGS;
+  store_unsigned_integer (header + SVE_HEADER_FLAGS_OFFSET,
+			  SVE_HEADER_FLAGS_LENGTH, byte_order,
+			  flags);
+  uint16_t reserved = SVE_CORE_DUMMY_RESERVED;
+  store_unsigned_integer (header + SVE_HEADER_RESERVED_OFFSET,
+			  SVE_HEADER_RESERVED_LENGTH, byte_order, reserved);
+
+  /* We are done with the header part of it.  Now dump the register state
+     in the FPSIMD format.  */
+
+  /* Dump the first 128 bits of each of the Z registers.  */
+  header += AARCH64_SVE_CONTEXT_REGS_OFFSET;
+  for (int i = 0; i < AARCH64_SVE_Z_REGS_NUM; i++)
+    regcache->raw_collect_part (AARCH64_SVE_Z0_REGNUM + i, 0, V_REGISTER_SIZE,
+				header + V_REGISTER_SIZE * i);
+
+  /* Dump FPSR and FPCR.  */
+  header += 32 * V_REGISTER_SIZE;
+  regcache->raw_collect (AARCH64_FPSR_REGNUM, header);
+  regcache->raw_collect (AARCH64_FPCR_REGNUM, header + 4);
+
+  /* Dump two reserved empty fields of 4 bytes.  */
+  header += 8;
+  memset (header, 0, 8);
+
+  /* We should have a FPSIMD-formatted register dump now.  */
+}
+
 /* Collect register REGNUM from REGCACHE to BUF, using the register
    map in REGSET.  If REGNUM is -1, do this for all registers in
    REGSET.  */
 
 static void
-aarch64_linux_collect_sve_regset (const struct regset *regset,
-				  const struct regcache *regcache,
-				  int regnum, void *buf, size_t size)
+collect_sve_regset (const struct regset *regset,
+		    const struct regcache *regcache,
+		    int regnum, void *buf, size_t size)
 {
   gdb_byte *header = (gdb_byte *) buf;
   struct gdbarch *gdbarch = regcache->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  uint64_t vq = gdbarch_tdep (gdbarch)->vq;
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+  uint64_t vq = tdep->vq;
 
   gdb_assert (buf != NULL);
   gdb_assert (size > SVE_HEADER_SIZE);
@@ -564,25 +1061,369 @@ aarch64_linux_collect_sve_regset (const
 
   store_unsigned_integer (header + SVE_HEADER_SIZE_OFFSET,
 			  SVE_HEADER_SIZE_LENGTH, byte_order, size);
+  uint32_t max_size = SVE_CORE_DUMMY_MAX_SIZE;
   store_unsigned_integer (header + SVE_HEADER_MAX_SIZE_OFFSET,
-			  SVE_HEADER_MAX_SIZE_LENGTH, byte_order, size);
+			  SVE_HEADER_MAX_SIZE_LENGTH, byte_order, max_size);
   store_unsigned_integer (header + SVE_HEADER_VL_OFFSET, SVE_HEADER_VL_LENGTH,
 			  byte_order, sve_vl_from_vq (vq));
+  uint16_t max_vl = SVE_CORE_DUMMY_MAX_VL;
   store_unsigned_integer (header + SVE_HEADER_MAX_VL_OFFSET,
 			  SVE_HEADER_MAX_VL_LENGTH, byte_order,
-			  sve_vl_from_vq (vq));
+			  max_vl);
+  uint16_t flags = SVE_HEADER_FLAG_SVE;
   store_unsigned_integer (header + SVE_HEADER_FLAGS_OFFSET,
 			  SVE_HEADER_FLAGS_LENGTH, byte_order,
-			  SVE_HEADER_FLAG_SVE);
+			  flags);
+  uint16_t reserved = SVE_CORE_DUMMY_RESERVED;
   store_unsigned_integer (header + SVE_HEADER_RESERVED_OFFSET,
-			  SVE_HEADER_RESERVED_LENGTH, byte_order, 0);
+			  SVE_HEADER_RESERVED_LENGTH, byte_order, reserved);
 
   /* The SVE register dump follows.  */
   regcache->collect_regset (regset, regnum, (gdb_byte *) buf + SVE_HEADER_SIZE,
 			    size - SVE_HEADER_SIZE);
 }
 
-/* Implement the "regset_from_core_section" gdbarch method.  */
+/* Supply register REGNUM from BUF to REGCACHE, using the register map
+   in REGSET.  If REGNUM is -1, do this for all registers in REGSET.
+   If BUF is NULL, set the registers to "unavailable" status.  */
+
+static void
+aarch64_linux_supply_sve_regset (const struct regset *regset,
+				 struct regcache *regcache,
+				 int regnum, const void *buf, size_t size)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  if (tdep->has_sme ())
+    {
+      ULONGEST svcr = 0;
+      regcache->raw_collect (tdep->sme_svcr_regnum, &svcr);
+
+      /* Is streaming mode enabled?  */
+      if (svcr & SVCR_SM_BIT)
+	/* If so, don't load SVE data from the SVE section.  The data to be
+	   used is in the SSVE section.  */
+	return;
+    }
+  /* If streaming mode is not enabled, load the SVE regcache data from the SVE
+     section.  */
+  supply_sve_regset (regset, regcache, regnum, buf, size);
+}
+
+/* Collect register REGNUM from REGCACHE to BUF, using the register
+   map in REGSET.  If REGNUM is -1, do this for all registers in
+   REGSET.  */
+
+static void
+aarch64_linux_collect_sve_regset (const struct regset *regset,
+				  const struct regcache *regcache,
+				  int regnum, void *buf, size_t size)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+  bool streaming_mode = false;
+
+  if (tdep->has_sme ())
+    {
+      ULONGEST svcr = 0;
+      regcache->raw_collect (tdep->sme_svcr_regnum, &svcr);
+
+      /* Is streaming mode enabled?  */
+      if (svcr & SVCR_SM_BIT)
+	{
+	  /* If so, don't dump SVE regcache data to the SVE section.  The SVE
+	     data should be dumped to the SSVE section.  Dump an empty SVE
+	     block instead.  */
+	  streaming_mode = true;
+	}
+    }
+
+  /* If streaming mode is not enabled or there is no SME support, dump the
+     SVE regcache data to the SVE section.  */
+
+  /* Check if we have an active SVE state (non-zero Z/P/FFR registers).
+     If so, then we need to dump registers in the SVE format.
+
+     Otherwise we should dump the registers in the FPSIMD format.  */
+  if (sve_state_is_empty (regcache) || streaming_mode)
+    collect_inactive_sve_regset (regcache, buf, size, AARCH64_SVE_VG_REGNUM);
+  else
+    collect_sve_regset (regset, regcache, regnum, buf, size);
+}
+
+/* Supply register REGNUM from BUF to REGCACHE, using the register map
+   in REGSET.  If REGNUM is -1, do this for all registers in REGSET.
+   If BUF is NULL, set the registers to "unavailable" status.  */
+
+static void
+aarch64_linux_supply_ssve_regset (const struct regset *regset,
+				  struct regcache *regcache,
+				  int regnum, const void *buf, size_t size)
+{
+  gdb_byte *header = (gdb_byte *) buf;
+  struct gdbarch *gdbarch = regcache->arch ();
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  uint16_t flags = extract_unsigned_integer (header + SVE_HEADER_FLAGS_OFFSET,
+					     SVE_HEADER_FLAGS_LENGTH,
+					     byte_order);
+
+  /* Since SVCR's bits are inferred from the data we have in the header of the
+     SSVE section, we need to initialize it to zero first, so that it doesn't
+     carry garbage data.  */
+  ULONGEST svcr = 0;
+  regcache->raw_supply (tdep->sme_svcr_regnum, &svcr);
+
+  /* Is streaming mode enabled?  */
+  if (flags & SVE_HEADER_FLAG_SVE)
+    {
+      /* Streaming mode is active, so flip the SM bit.  */
+      svcr = SVCR_SM_BIT;
+      regcache->raw_supply (tdep->sme_svcr_regnum, &svcr);
+
+      /* Fetch the SVE data from the SSVE section.  */
+      supply_sve_regset (regset, regcache, regnum, buf, size);
+    }
+}
+
+/* Collect register REGNUM from REGCACHE to BUF, using the register
+   map in REGSET.  If REGNUM is -1, do this for all registers in
+   REGSET.  */
+
+static void
+aarch64_linux_collect_ssve_regset (const struct regset *regset,
+				   const struct regcache *regcache,
+				   int regnum, void *buf, size_t size)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+  ULONGEST svcr = 0;
+  regcache->raw_collect (tdep->sme_svcr_regnum, &svcr);
+
+  /* Is streaming mode enabled?  */
+  if (svcr & SVCR_SM_BIT)
+    {
+      /* If so, dump SVE regcache data to the SSVE section.  */
+      collect_sve_regset (regset, regcache, regnum, buf, size);
+    }
+  else
+    {
+      /* Otherwise dump an empty SVE block to the SSVE section with the
+	 streaming vector length.  */
+      collect_inactive_sve_regset (regcache, buf, size, tdep->sme_svg_regnum);
+    }
+}
+
+/* Supply register REGNUM from BUF to REGCACHE, using the register map
+   in REGSET.  If REGNUM is -1, do this for all registers in REGSET.
+   If BUF is NULL, set the registers to "unavailable" status.  */
+
+static void
+aarch64_linux_supply_za_regset (const struct regset *regset,
+				struct regcache *regcache,
+				int regnum, const void *buf, size_t size)
+{
+  gdb_byte *header = (gdb_byte *) buf;
+  struct gdbarch *gdbarch = regcache->arch ();
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+
+  /* Handle an empty buffer.  */
+  if (buf == nullptr)
+    return regcache->supply_regset (regset, regnum, nullptr, size);
+
+  if (size < SVE_HEADER_SIZE)
+    error (_("ZA state header size (%s) invalid.  Should be at least %s."),
+	   pulongest (size), pulongest (SVE_HEADER_SIZE));
+
+  /* The ZA register note in a core file can have a couple of states:
+
+     1 - Just the header without the payload.  This means that there is no
+	 ZA data, and we should populate only SVCR and SVG registers on GDB's
+	 side.  The ZA data should be marked as unavailable.
+
+     2 - The header with an additional data payload.  This means there is
+	 actual ZA data, and we should populate ZA, SVCR and SVG.  */
+
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  /* Populate SVG.  */
+  ULONGEST svg
+    = sve_vg_from_vl (extract_unsigned_integer (header + SVE_HEADER_VL_OFFSET,
+						SVE_HEADER_VL_LENGTH,
+						byte_order));
+  regcache->raw_supply (tdep->sme_svg_regnum, &svg);
+
+  size_t data_size
+    = extract_unsigned_integer (header + SVE_HEADER_SIZE_OFFSET,
+				SVE_HEADER_SIZE_LENGTH, byte_order)
+      - SVE_HEADER_SIZE;
+
+  /* Populate SVCR.  */
+  bool has_za_payload = (data_size > 0);
+  ULONGEST svcr;
+  regcache->raw_collect (tdep->sme_svcr_regnum, &svcr);
+
+  /* If we have a ZA payload, enable bit 2 of SVCR, otherwise clear it.  This
+     register gets updated by the SVE/SSVE-handling functions as well, as they
+     report the SM bit 1.  */
+  if (has_za_payload)
+    svcr |= SVCR_ZA_BIT;
+  else
+    svcr &= ~SVCR_ZA_BIT;
+
+  /* Update SVCR in the register buffer.  */
+  regcache->raw_supply (tdep->sme_svcr_regnum, &svcr);
+
+  /* Populate the register cache with ZA register contents, if we have any.  */
+  buf = has_za_payload ? (gdb_byte *) buf + SVE_HEADER_SIZE : nullptr;
+
+  size_t za_bytes = std::pow (sve_vl_from_vg (svg), 2);
+
+  /* Update ZA in the register buffer.  */
+  if (has_za_payload)
+    {
+      /* Check that the payload size is sane.  */
+      if (size < SVE_HEADER_SIZE + za_bytes)
+	{
+	  error (_("ZA header + payload size (%s) invalid.  Should be at "
+		   "least %s."),
+		 pulongest (size), pulongest (SVE_HEADER_SIZE + za_bytes));
+	}
+
+      regcache->raw_supply (tdep->sme_za_regnum, buf);
+    }
+  else
+    {
+      gdb_byte za_zeroed[za_bytes];
+      memset (za_zeroed, 0, za_bytes);
+      regcache->raw_supply (tdep->sme_za_regnum, za_zeroed);
+    }
+}
+
+/* Collect register REGNUM from REGCACHE to BUF, using the register
+   map in REGSET.  If REGNUM is -1, do this for all registers in
+   REGSET.  */
+
+static void
+aarch64_linux_collect_za_regset (const struct regset *regset,
+				 const struct regcache *regcache,
+				 int regnum, void *buf, size_t size)
+{
+  gdb_assert (buf != nullptr);
+
+  /* Sanity check the dump size.  */
+  gdb_assert (size >= SVE_HEADER_SIZE);
+
+  /* The ZA register note in a core file can have a couple of states:
+
+     1 - Just the header without the payload.  This means that there is no
+	 ZA data, and we should dump just the header.
+
+     2 - The header with an additional data payload.  This means there is
+	 actual ZA data, and we should dump both the header and the ZA data
+	 payload.  */
+
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+
+  /* Determine if we have ZA state from the SVCR register ZA bit.  */
+  ULONGEST svcr;
+  regcache->raw_collect (tdep->sme_svcr_regnum, &svcr);
+
+  /* Check the ZA payload.  */
+  bool has_za_payload = (svcr & SVCR_ZA_BIT) != 0;
+  size = has_za_payload ? size : SVE_HEADER_SIZE;
+
+  /* Write the size and max_size fields.  */
+  gdb_byte *header = (gdb_byte *) buf;
+  enum bfd_endian byte_order = gdbarch_byte_order (regcache->arch ());
+  store_unsigned_integer (header + SVE_HEADER_SIZE_OFFSET,
+			  SVE_HEADER_SIZE_LENGTH, byte_order, size);
+
+  uint32_t max_size
+    = SVE_HEADER_SIZE + std::pow (sve_vl_from_vq (tdep->sme_svq), 2);
+  store_unsigned_integer (header + SVE_HEADER_MAX_SIZE_OFFSET,
+			  SVE_HEADER_MAX_SIZE_LENGTH, byte_order, max_size);
+
+  /* Output the other fields of the ZA header (vl, max_vl, flags and
+     reserved).  */
+  uint64_t svq = tdep->sme_svq;
+  store_unsigned_integer (header + SVE_HEADER_VL_OFFSET, SVE_HEADER_VL_LENGTH,
+			  byte_order, sve_vl_from_vq (svq));
+
+  uint16_t max_vl = SVE_CORE_DUMMY_MAX_VL;
+  store_unsigned_integer (header + SVE_HEADER_MAX_VL_OFFSET,
+			  SVE_HEADER_MAX_VL_LENGTH, byte_order,
+			  max_vl);
+
+  uint16_t flags = SVE_CORE_DUMMY_FLAGS;
+  store_unsigned_integer (header + SVE_HEADER_FLAGS_OFFSET,
+			  SVE_HEADER_FLAGS_LENGTH, byte_order, flags);
+
+  uint16_t reserved = SVE_CORE_DUMMY_RESERVED;
+  store_unsigned_integer (header + SVE_HEADER_RESERVED_OFFSET,
+			  SVE_HEADER_RESERVED_LENGTH, byte_order, reserved);
+
+  buf = has_za_payload ? (gdb_byte *) buf + SVE_HEADER_SIZE : nullptr;
+
+  /* Dump the register cache contents for the ZA register to the buffer.  */
+  regcache->collect_regset (regset, regnum, (gdb_byte *) buf,
+			    size - SVE_HEADER_SIZE);
+}
+
+/* Supply register REGNUM from BUF to REGCACHE, using the register map
+   in REGSET.  If REGNUM is -1, do this for all registers in REGSET.
+   If BUF is NULL, set the registers to "unavailable" status.  */
+
+static void
+aarch64_linux_supply_zt_regset (const struct regset *regset,
+				struct regcache *regcache,
+				int regnum, const void *buf, size_t size)
+{
+  /* Read the ZT register note from a core file into the register buffer.  */
+
+  /* Make sure the buffer contains at least the expected amount of data we are
+     supposed to get.  */
+  gdb_assert (size >= AARCH64_SME2_ZT0_SIZE);
+
+  /* Handle an empty buffer.  */
+  if (buf == nullptr)
+    return regcache->supply_regset (regset, regnum, nullptr, size);
+
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+
+  /* Supply the ZT0 register contents.  */
+  regcache->raw_supply (tdep->sme2_zt0_regnum, buf);
+}
+
+/* Collect register REGNUM from REGCACHE to BUF, using the register
+   map in REGSET.  If REGNUM is -1, do this for all registers in
+   REGSET.  */
+
+static void
+aarch64_linux_collect_zt_regset (const struct regset *regset,
+				 const struct regcache *regcache,
+				 int regnum, void *buf, size_t size)
+{
+  /* Read the ZT register contents from the register buffer into the core
+     file section.  */
+
+  /* Make sure the buffer can hold the data we need to return.  */
+  gdb_assert (size >= AARCH64_SME2_ZT0_SIZE);
+  gdb_assert (buf != nullptr);
+
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (regcache->arch ());
+
+  /* Dump the register cache contents for the ZT register to the buffer.  */
+  regcache->collect_regset (regset, tdep->sme2_zt0_regnum, buf,
+			    AARCH64_SME2_ZT0_SIZE);
+}
+
+/* Implement the "iterate_over_regset_sections" gdbarch method.  */
 
 static void
 aarch64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
@@ -590,7 +1431,7 @@ aarch64_linux_iterate_over_regset_sectio
 					    void *cb_data,
 					    const struct regcache *regcache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   cb (".reg", AARCH64_LINUX_SIZEOF_GREGSET, AARCH64_LINUX_SIZEOF_GREGSET,
       &aarch64_linux_gregset, NULL, cb_data);
@@ -602,12 +1443,36 @@ aarch64_linux_iterate_over_regset_sectio
 	{
 	  { 32, AARCH64_SVE_Z0_REGNUM, (int) (tdep->vq * 16) },
 	  { 16, AARCH64_SVE_P0_REGNUM, (int) (tdep->vq * 16 / 8) },
-	  { 1, AARCH64_SVE_FFR_REGNUM, 4 },
+	  { 1, AARCH64_SVE_FFR_REGNUM, (int) (tdep->vq * 16 / 8) },
 	  { 1, AARCH64_FPSR_REGNUM, 4 },
 	  { 1, AARCH64_FPCR_REGNUM, 4 },
 	  { 0 }
 	};
 
+      const struct regset aarch64_linux_ssve_regset =
+	{
+	  sve_regmap,
+	  aarch64_linux_supply_ssve_regset, aarch64_linux_collect_ssve_regset,
+	  REGSET_VARIABLE_SIZE
+	};
+
+      /* If SME is supported in the core file, process the SSVE section first,
+	 and the SVE section last.  This is because we need information from
+	 the SSVE set to determine if streaming mode is active.  If streaming
+	 mode is active, we need to extract the data from the SSVE section.
+
+	 Otherwise, if streaming mode is not active, we fetch the data from the
+	 SVE section.  */
+      if (tdep->has_sme ())
+	{
+	  cb (".reg-aarch-ssve",
+	      SVE_HEADER_SIZE
+	      + regcache_map_entry_size (aarch64_linux_fpregmap),
+	      SVE_HEADER_SIZE + regcache_map_entry_size (sve_regmap),
+	      &aarch64_linux_ssve_regset, "SSVE registers", cb_data);
+	}
+
+      /* Handle the SVE register set.  */
       const struct regset aarch64_linux_sve_regset =
 	{
 	  sve_regmap,
@@ -624,6 +1489,56 @@ aarch64_linux_iterate_over_regset_sectio
     cb (".reg2", AARCH64_LINUX_SIZEOF_FPREGSET, AARCH64_LINUX_SIZEOF_FPREGSET,
 	&aarch64_linux_fpregset, NULL, cb_data);
 
+  if (tdep->has_sme ())
+    {
+      /* Setup the register set information for a ZA register set core
+	 dump.  */
+
+      /* Create this on the fly in order to handle the ZA register size.  */
+      const struct regcache_map_entry za_regmap[] =
+	{
+	  { 1, tdep->sme_za_regnum,
+	    (int) std::pow (sve_vl_from_vq (tdep->sme_svq), 2) },
+	  { 0 }
+	};
+
+      const struct regset aarch64_linux_za_regset =
+	{
+	  za_regmap,
+	  aarch64_linux_supply_za_regset, aarch64_linux_collect_za_regset,
+	  REGSET_VARIABLE_SIZE
+	};
+
+      cb (".reg-aarch-za",
+	  SVE_HEADER_SIZE,
+	  SVE_HEADER_SIZE + std::pow (sve_vl_from_vq (tdep->sme_svq), 2),
+	  &aarch64_linux_za_regset, "ZA register", cb_data);
+
+      /* Handle SME2 (ZT) as well, which is only available if SME is
+	 available.  */
+      if (tdep->has_sme2 ())
+	{
+	  const struct regcache_map_entry zt_regmap[] =
+	    {
+	      { 1, tdep->sme2_zt0_regnum, AARCH64_SME2_ZT0_SIZE },
+	      { 0 }
+	    };
+
+	  /* We set the register set size to REGSET_VARIABLE_SIZE here because
+	     in the future there might be more ZT registers.  */
+	  const struct regset aarch64_linux_zt_regset =
+	    {
+	      zt_regmap,
+	      aarch64_linux_supply_zt_regset, aarch64_linux_collect_zt_regset,
+	      REGSET_VARIABLE_SIZE
+	    };
+
+	  cb (".reg-aarch-zt",
+	      AARCH64_SME2_ZT0_SIZE,
+	      AARCH64_SME2_ZT0_SIZE,
+	      &aarch64_linux_zt_regset, "ZT registers", cb_data);
+	}
+    }
 
   if (tdep->has_pauth ())
     {
@@ -643,6 +1558,52 @@ aarch64_linux_iterate_over_regset_sectio
 	  AARCH64_LINUX_SIZEOF_PAUTH, &aarch64_linux_pauth_regset,
 	  "pauth registers", cb_data);
     }
+
+  /* Handle MTE registers.  */
+  if (tdep->has_mte ())
+    {
+      /* Create this on the fly in order to handle the variable location.  */
+      const struct regcache_map_entry mte_regmap[] =
+	{
+	  { 1, tdep->mte_reg_base, 8},
+	  { 0 }
+	};
+
+      const struct regset aarch64_linux_mte_regset =
+	{
+	  mte_regmap, regcache_supply_regset, regcache_collect_regset
+	};
+
+      cb (".reg-aarch-mte", AARCH64_LINUX_SIZEOF_MTE_REGSET,
+	  AARCH64_LINUX_SIZEOF_MTE_REGSET, &aarch64_linux_mte_regset,
+	  "MTE registers", cb_data);
+    }
+
+  /* Handle the TLS registers.  */
+  if (tdep->has_tls ())
+    {
+      gdb_assert (tdep->tls_regnum_base != -1);
+      gdb_assert (tdep->tls_register_count > 0);
+
+      int sizeof_tls_regset
+	= AARCH64_TLS_REGISTER_SIZE * tdep->tls_register_count;
+
+      const struct regcache_map_entry tls_regmap[] =
+	{
+	  { tdep->tls_register_count, tdep->tls_regnum_base,
+	    AARCH64_TLS_REGISTER_SIZE },
+	  { 0 }
+	};
+
+      const struct regset aarch64_linux_tls_regset =
+	{
+	  tls_regmap, regcache_supply_regset, regcache_collect_regset,
+	  REGSET_VARIABLE_SIZE
+	};
+
+      cb (".reg-aarch-tls", sizeof_tls_regset, sizeof_tls_regset,
+	  &aarch64_linux_tls_regset, "TLS register", cb_data);
+    }
 }
 
 /* Implement the "core_read_description" gdbarch method.  */
@@ -651,10 +1612,51 @@ static const struct target_desc *
 aarch64_linux_core_read_description (struct gdbarch *gdbarch,
 				     struct target_ops *target, bfd *abfd)
 {
-  CORE_ADDR hwcap = linux_get_hwcap (target);
+  std::optional<gdb::byte_vector> auxv = target_read_auxv_raw (target);
+  CORE_ADDR hwcap = linux_get_hwcap (auxv, target, gdbarch);
+  CORE_ADDR hwcap2 = linux_get_hwcap2 (auxv, target, gdbarch);
+
+  aarch64_features features;
+
+  /* We need to extract the SVE data from the .reg-aarch-sve section or the
+     .reg-aarch-ssve section depending on which one was active when the core
+     file was generated.
+
+     If the SSVE section contains SVE data, then it is considered active.
+     Otherwise the SVE section is considered active.  This guarantees we will
+     have the correct target description with the correct SVE vector
+     length.  */
+  features.vq = aarch64_linux_core_read_vq_from_sections (gdbarch, abfd);
+  features.pauth = hwcap & AARCH64_HWCAP_PACA;
+  features.mte = hwcap2 & HWCAP2_MTE;
+
+  /* Handle the TLS section.  */
+  asection *tls = bfd_get_section_by_name (abfd, ".reg-aarch-tls");
+  if (tls != nullptr)
+    {
+      size_t size = bfd_section_size (tls);
+      /* Convert the size to the number of actual registers, by
+	 dividing by 8.  */
+      features.tls = size / AARCH64_TLS_REGISTER_SIZE;
+    }
 
-  return aarch64_read_description (aarch64_linux_core_read_vq (gdbarch, abfd),
-				   hwcap & AARCH64_HWCAP_PACA);
+  features.svq
+    = aarch64_linux_core_read_vq (gdbarch, abfd, ".reg-aarch-za");
+
+  /* Are the ZT registers available?  */
+  if (bfd_get_section_by_name (abfd, ".reg-aarch-zt") != nullptr)
+    {
+      /* Check if ZA is also available, otherwise this is an invalid
+	 combination.  */
+      if (bfd_get_section_by_name (abfd, ".reg-aarch-za") != nullptr)
+	features.sme2 = true;
+      else
+	warning (_("While reading core file sections, found ZT registers entry "
+		   "but no ZA register entry.  The ZT contents will be "
+		   "ignored"));
+    }
+
+  return aarch64_read_description (features);
 }
 
 /* Implementation of `gdbarch_stap_is_single_operand', as defined in
@@ -677,7 +1679,7 @@ aarch64_stap_is_single_operand (struct g
    It returns one if the special token has been parsed successfully,
    or zero if the current token is not considered special.  */
 
-static int
+static expr::operation_up
 aarch64_stap_parse_special_token (struct gdbarch *gdbarch,
 				  struct stap_parse_info *p)
 {
@@ -688,11 +1690,9 @@ aarch64_stap_parse_special_token (struct
       char *endp;
       /* Used to save the register name.  */
       const char *start;
-      char *regname;
       int len;
       int got_minus = 0;
       long displacement;
-      struct stoken str;
 
       ++tmp;
       start = tmp;
@@ -702,17 +1702,14 @@ aarch64_stap_parse_special_token (struct
 	++tmp;
 
       if (*tmp != ',')
-	return 0;
+	return {};
 
       len = tmp - start;
-      regname = (char *) alloca (len + 2);
-
-      strncpy (regname, start, len);
-      regname[len] = '\0';
+      std::string regname (start, len);
 
-      if (user_reg_map_name_to_regnum (gdbarch, regname, len) == -1)
+      if (user_reg_map_name_to_regnum (gdbarch, regname.c_str (), len) == -1)
 	error (_("Invalid register name `%s' on expression `%s'."),
-	       regname, p->saved_arg);
+	       regname.c_str (), p->saved_arg);
 
       ++tmp;
       tmp = skip_spaces (tmp);
@@ -730,50 +1727,44 @@ aarch64_stap_parse_special_token (struct
 	++tmp;
 
       if (!isdigit (*tmp))
-	return 0;
+	return {};
 
       displacement = strtol (tmp, &endp, 10);
       tmp = endp;
 
       /* Skipping last `]'.  */
       if (*tmp++ != ']')
-	return 0;
+	return {};
+      p->arg = tmp;
+
+      using namespace expr;
 
       /* The displacement.  */
-      write_exp_elt_opcode (&p->pstate, OP_LONG);
-      write_exp_elt_type (&p->pstate, builtin_type (gdbarch)->builtin_long);
-      write_exp_elt_longcst (&p->pstate, displacement);
-      write_exp_elt_opcode (&p->pstate, OP_LONG);
+      struct type *long_type = builtin_type (gdbarch)->builtin_long;
       if (got_minus)
-	write_exp_elt_opcode (&p->pstate, UNOP_NEG);
+	displacement = -displacement;
+      operation_up disp = make_operation<long_const_operation> (long_type,
+								displacement);
 
       /* The register name.  */
-      write_exp_elt_opcode (&p->pstate, OP_REGISTER);
-      str.ptr = regname;
-      str.length = len;
-      write_exp_string (&p->pstate, str);
-      write_exp_elt_opcode (&p->pstate, OP_REGISTER);
+      operation_up reg
+	= make_operation<register_operation> (std::move (regname));
 
-      write_exp_elt_opcode (&p->pstate, BINOP_ADD);
+      operation_up sum
+	= make_operation<add_operation> (std::move (reg), std::move (disp));
 
       /* Casting to the expected type.  */
-      write_exp_elt_opcode (&p->pstate, UNOP_CAST);
-      write_exp_elt_type (&p->pstate, lookup_pointer_type (p->arg_type));
-      write_exp_elt_opcode (&p->pstate, UNOP_CAST);
-
-      write_exp_elt_opcode (&p->pstate, UNOP_IND);
-
-      p->arg = tmp;
+      struct type *arg_ptr_type = lookup_pointer_type (p->arg_type);
+      sum = make_operation<unop_cast_operation> (std::move (sum),
+						 arg_ptr_type);
+      return make_operation<unop_ind_operation> (std::move (sum));
     }
-  else
-    return 0;
-
-  return 1;
+  return {};
 }
 
 /* AArch64 process record-replay constructs: syscall, signal etc.  */
 
-struct linux_record_tdep aarch64_linux_record_tdep;
+static linux_record_tdep aarch64_linux_record_tdep;
 
 /* Enum that defines the AArch64 linux specific syscall identifiers used for
    process record/replay.  */
@@ -1039,6 +2030,7 @@ enum aarch64_syscall {
   aarch64_sys_finit_module = 273,
   aarch64_sys_sched_setattr = 274,
   aarch64_sys_sched_getattr = 275,
+  aarch64_sys_getrandom = 278
 };
 
 /* aarch64_canonicalize_syscall maps syscall ids from the native AArch64
@@ -1321,6 +2313,7 @@ aarch64_canonicalize_syscall (enum aarch
       UNSUPPORTED_SYSCALL_MAP (finit_module);
       UNSUPPORTED_SYSCALL_MAP (sched_setattr);
       UNSUPPORTED_SYSCALL_MAP (sched_getattr);
+      SYSCALL_MAP (getrandom);
   default:
     return gdb_sys_no_syscall;
   }
@@ -1391,9 +2384,10 @@ aarch64_linux_syscall_record (struct reg
 
   if (syscall_gdb < 0)
     {
-      printf_unfiltered (_("Process record and replay target doesn't "
-			   "support syscall number %s\n"),
-			 plongest (svc_number));
+      gdb_printf (gdb_stderr,
+		  _("Process record and replay target doesn't "
+		    "support syscall number %s\n"),
+		  plongest (svc_number));
       return -1;
     }
 
@@ -1432,6 +2426,437 @@ aarch64_linux_gcc_target_options (struct
   return {};
 }
 
+/* Helper to get the allocation tag from a 64-bit ADDRESS.
+
+   Return the allocation tag if successful and nullopt otherwise.  */
+
+static std::optional<CORE_ADDR>
+aarch64_mte_get_atag (CORE_ADDR address)
+{
+  gdb::byte_vector tags;
+
+  /* Attempt to fetch the allocation tag.  */
+  if (!target_fetch_memtags (address, 1, tags,
+			     static_cast<int> (memtag_type::allocation)))
+    return {};
+
+  /* Only one tag should've been returned.  Make sure we got exactly that.  */
+  if (tags.size () != 1)
+    error (_("Target returned an unexpected number of tags."));
+
+  /* Although our tags are 4 bits in size, they are stored in a
+     byte.  */
+  return tags[0];
+}
+
+/* Implement the tagged_address_p gdbarch method.  */
+
+static bool
+aarch64_linux_tagged_address_p (struct gdbarch *gdbarch, struct value *address)
+{
+  gdb_assert (address != nullptr);
+
+  CORE_ADDR addr = value_as_address (address);
+
+  /* Remove the top byte for the memory range check.  */
+  addr = gdbarch_remove_non_address_bits (gdbarch, addr);
+
+  /* Check if the page that contains ADDRESS is mapped with PROT_MTE.  */
+  if (!linux_address_in_memtag_page (addr))
+    return false;
+
+  /* We have a valid tag in the top byte of the 64-bit address.  */
+  return true;
+}
+
+/* Implement the memtag_matches_p gdbarch method.  */
+
+static bool
+aarch64_linux_memtag_matches_p (struct gdbarch *gdbarch,
+				struct value *address)
+{
+  gdb_assert (address != nullptr);
+
+  /* Make sure we are dealing with a tagged address to begin with.  */
+  if (!aarch64_linux_tagged_address_p (gdbarch, address))
+    return true;
+
+  CORE_ADDR addr = value_as_address (address);
+
+  /* Fetch the allocation tag for ADDRESS.  */
+  std::optional<CORE_ADDR> atag
+    = aarch64_mte_get_atag (gdbarch_remove_non_address_bits (gdbarch, addr));
+
+  if (!atag.has_value ())
+    return true;
+
+  /* Fetch the logical tag for ADDRESS.  */
+  gdb_byte ltag = aarch64_mte_get_ltag (addr);
+
+  /* Are the tags the same?  */
+  return ltag == *atag;
+}
+
+/* Implement the set_memtags gdbarch method.  */
+
+static bool
+aarch64_linux_set_memtags (struct gdbarch *gdbarch, struct value *address,
+			   size_t length, const gdb::byte_vector &tags,
+			   memtag_type tag_type)
+{
+  gdb_assert (!tags.empty ());
+  gdb_assert (address != nullptr);
+
+  CORE_ADDR addr = value_as_address (address);
+
+  /* Set the logical tag or the allocation tag.  */
+  if (tag_type == memtag_type::logical)
+    {
+      /* When setting logical tags, we don't care about the length, since
+	 we are only setting a single logical tag.  */
+      addr = aarch64_mte_set_ltag (addr, tags[0]);
+
+      /* Update the value's content with the tag.  */
+      enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+      gdb_byte *srcbuf = address->contents_raw ().data ();
+      store_unsigned_integer (srcbuf, sizeof (addr), byte_order, addr);
+    }
+  else
+    {
+      /* Remove the top byte.  */
+      addr = gdbarch_remove_non_address_bits (gdbarch, addr);
+
+      /* Make sure we are dealing with a tagged address to begin with.  */
+      if (!aarch64_linux_tagged_address_p (gdbarch, address))
+	return false;
+
+      /* With G being the number of tag granules and N the number of tags
+	 passed in, we can have the following cases:
+
+	 1 - G == N: Store all the N tags to memory.
+
+	 2 - G < N : Warn about having more tags than granules, but write G
+		     tags.
+
+	 3 - G > N : This is a "fill tags" operation.  We should use the tags
+		     as a pattern to fill the granules repeatedly until we have
+		     written G tags to memory.
+      */
+
+      size_t g = aarch64_mte_get_tag_granules (addr, length,
+					       AARCH64_MTE_GRANULE_SIZE);
+      size_t n = tags.size ();
+
+      if (g < n)
+	warning (_("Got more tags than memory granules.  Tags will be "
+		   "truncated."));
+      else if (g > n)
+	warning (_("Using tag pattern to fill memory range."));
+
+      if (!target_store_memtags (addr, length, tags,
+				 static_cast<int> (memtag_type::allocation)))
+	return false;
+    }
+  return true;
+}
+
+/* Implement the get_memtag gdbarch method.  */
+
+static struct value *
+aarch64_linux_get_memtag (struct gdbarch *gdbarch, struct value *address,
+			  memtag_type tag_type)
+{
+  gdb_assert (address != nullptr);
+
+  CORE_ADDR addr = value_as_address (address);
+  CORE_ADDR tag = 0;
+
+  /* Get the logical tag or the allocation tag.  */
+  if (tag_type == memtag_type::logical)
+    tag = aarch64_mte_get_ltag (addr);
+  else
+    {
+      /* Make sure we are dealing with a tagged address to begin with.  */
+      if (!aarch64_linux_tagged_address_p (gdbarch, address))
+	return nullptr;
+
+      /* Remove the top byte.  */
+      addr = gdbarch_remove_non_address_bits (gdbarch, addr);
+      std::optional<CORE_ADDR> atag = aarch64_mte_get_atag (addr);
+
+      if (!atag.has_value ())
+	return nullptr;
+
+      tag = *atag;
+    }
+
+  /* Convert the tag to a value.  */
+  return value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int,
+			      tag);
+}
+
+/* Implement the memtag_to_string gdbarch method.  */
+
+static std::string
+aarch64_linux_memtag_to_string (struct gdbarch *gdbarch, struct value *tag_value)
+{
+  if (tag_value == nullptr)
+    return "";
+
+  CORE_ADDR tag = value_as_address (tag_value);
+
+  return string_printf ("0x%s", phex_nz (tag, sizeof (tag)));
+}
+
+/* AArch64 Linux implementation of the report_signal_info gdbarch
+   hook.  Displays information about possible memory tag violations.  */
+
+static void
+aarch64_linux_report_signal_info (struct gdbarch *gdbarch,
+				  struct ui_out *uiout,
+				  enum gdb_signal siggnal)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  if (!tdep->has_mte () || siggnal != GDB_SIGNAL_SEGV)
+    return;
+
+  CORE_ADDR fault_addr = 0;
+  long si_code = 0;
+
+  try
+    {
+      /* Sigcode tells us if the segfault is actually a memory tag
+	 violation.  */
+      si_code = parse_and_eval_long ("$_siginfo.si_code");
+
+      fault_addr
+	= parse_and_eval_long ("$_siginfo._sifields._sigfault.si_addr");
+    }
+  catch (const gdb_exception_error &exception)
+    {
+      exception_print (gdb_stderr, exception);
+      return;
+    }
+
+  /* If this is not a memory tag violation, just return.  */
+  if (si_code != SEGV_MTEAERR && si_code != SEGV_MTESERR)
+    return;
+
+  uiout->text ("\n");
+
+  uiout->field_string ("sigcode-meaning", _("Memory tag violation"));
+
+  /* For synchronous faults, show additional information.  */
+  if (si_code == SEGV_MTESERR)
+    {
+      uiout->text (_(" while accessing address "));
+      uiout->field_core_addr ("fault-addr", gdbarch, fault_addr);
+      uiout->text ("\n");
+
+      std::optional<CORE_ADDR> atag
+	= aarch64_mte_get_atag (gdbarch_remove_non_address_bits (gdbarch,
+								 fault_addr));
+      gdb_byte ltag = aarch64_mte_get_ltag (fault_addr);
+
+      if (!atag.has_value ())
+	uiout->text (_("Allocation tag unavailable"));
+      else
+	{
+	  uiout->text (_("Allocation tag "));
+	  uiout->field_string ("allocation-tag", hex_string (*atag));
+	  uiout->text ("\n");
+	  uiout->text (_("Logical tag "));
+	  uiout->field_string ("logical-tag", hex_string (ltag));
+	}
+    }
+  else
+    {
+      uiout->text ("\n");
+      uiout->text (_("Fault address unavailable"));
+    }
+}
+
+/* AArch64 Linux implementation of the gdbarch_create_memtag_section hook.  */
+
+static asection *
+aarch64_linux_create_memtag_section (struct gdbarch *gdbarch, bfd *obfd,
+				     CORE_ADDR address, size_t size)
+{
+  gdb_assert (obfd != nullptr);
+  gdb_assert (size > 0);
+
+  /* Create the section and associated program header.
+
+     Make sure the section's flags has SEC_HAS_CONTENTS, otherwise BFD will
+     refuse to write data to this section.  */
+  asection *mte_section
+    = bfd_make_section_anyway_with_flags (obfd, "memtag", SEC_HAS_CONTENTS);
+
+  if (mte_section == nullptr)
+    return nullptr;
+
+  bfd_set_section_vma (mte_section, address);
+  /* The size of the memory range covered by the memory tags.  We reuse the
+     section's rawsize field for this purpose.  */
+  mte_section->rawsize = size;
+
+  /* Fetch the number of tags we need to save.  */
+  size_t tags_count
+    = aarch64_mte_get_tag_granules (address, size, AARCH64_MTE_GRANULE_SIZE);
+  /* Tags are stored packed as 2 tags per byte.  */
+  bfd_set_section_size (mte_section, (tags_count + 1) >> 1);
+  /* Store program header information.  */
+  bfd_record_phdr (obfd, PT_AARCH64_MEMTAG_MTE, 1, 0, 0, 0, 0, 0, 1,
+		   &mte_section);
+
+  return mte_section;
+}
+
+/* Maximum number of tags to request.  */
+#define MAX_TAGS_TO_TRANSFER 1024
+
+/* AArch64 Linux implementation of the gdbarch_fill_memtag_section hook.  */
+
+static bool
+aarch64_linux_fill_memtag_section (struct gdbarch *gdbarch, asection *osec)
+{
+  /* We only handle MTE tags for now.  */
+
+  size_t segment_size = osec->rawsize;
+  CORE_ADDR start_address = bfd_section_vma (osec);
+  CORE_ADDR end_address = start_address + segment_size;
+
+  /* Figure out how many tags we need to store in this memory range.  */
+  size_t granules = aarch64_mte_get_tag_granules (start_address, segment_size,
+						  AARCH64_MTE_GRANULE_SIZE);
+
+  /* If there are no tag granules to fetch, just return.  */
+  if (granules == 0)
+    return true;
+
+  CORE_ADDR address = start_address;
+
+  /* Vector of tags.  */
+  gdb::byte_vector tags;
+
+  while (granules > 0)
+    {
+      /* Transfer tags in chunks.  */
+      gdb::byte_vector tags_read;
+      size_t xfer_len
+	= ((granules >= MAX_TAGS_TO_TRANSFER)
+	  ? MAX_TAGS_TO_TRANSFER * AARCH64_MTE_GRANULE_SIZE
+	  : granules * AARCH64_MTE_GRANULE_SIZE);
+
+      if (!target_fetch_memtags (address, xfer_len, tags_read,
+				 static_cast<int> (memtag_type::allocation)))
+	{
+	  warning (_("Failed to read MTE tags from memory range [%s,%s)."),
+		     phex_nz (start_address, sizeof (start_address)),
+		     phex_nz (end_address, sizeof (end_address)));
+	  return false;
+	}
+
+      /* Transfer over the tags that have been read.  */
+      tags.insert (tags.end (), tags_read.begin (), tags_read.end ());
+
+      /* Adjust the remaining granules and starting address.  */
+      granules -= tags_read.size ();
+      address += tags_read.size () * AARCH64_MTE_GRANULE_SIZE;
+    }
+
+  /* Pack the MTE tag bits.  */
+  aarch64_mte_pack_tags (tags);
+
+  if (!bfd_set_section_contents (osec->owner, osec, tags.data (),
+				 0, tags.size ()))
+    {
+      warning (_("Failed to write %s bytes of corefile memory "
+		 "tag content (%s)."),
+	       pulongest (tags.size ()),
+	       bfd_errmsg (bfd_get_error ()));
+    }
+  return true;
+}
+
+/* AArch64 Linux implementation of the gdbarch_decode_memtag_section
+   hook.  Decode a memory tag section and return the requested tags.
+
+   The section is guaranteed to cover the [ADDRESS, ADDRESS + length)
+   range.  */
+
+static gdb::byte_vector
+aarch64_linux_decode_memtag_section (struct gdbarch *gdbarch,
+				     bfd_section *section,
+				     int type,
+				     CORE_ADDR address, size_t length)
+{
+  gdb_assert (section != nullptr);
+
+  /* The requested address must not be less than section->vma.  */
+  gdb_assert (section->vma <= address);
+
+  /* Figure out how many tags we need to fetch in this memory range.  */
+  size_t granules = aarch64_mte_get_tag_granules (address, length,
+						  AARCH64_MTE_GRANULE_SIZE);
+  /* Sanity check.  */
+  gdb_assert (granules > 0);
+
+  /* Fetch the total number of tags in the range [VMA, address + length).  */
+  size_t granules_from_vma
+    = aarch64_mte_get_tag_granules (section->vma,
+				    address - section->vma + length,
+				    AARCH64_MTE_GRANULE_SIZE);
+
+  /* Adjust the tags vector to contain the exact number of packed bytes.  */
+  gdb::byte_vector tags (((granules - 1) >> 1) + 1);
+
+  /* Figure out the starting offset into the packed tags data.  */
+  file_ptr offset = ((granules_from_vma - granules) >> 1);
+
+  if (!bfd_get_section_contents (section->owner, section, tags.data (),
+				 offset, tags.size ()))
+    error (_("Couldn't read contents from memtag section."));
+
+  /* At this point, the tags are packed 2 per byte.  Unpack them before
+     returning.  */
+  bool skip_first = ((granules_from_vma - granules) % 2) != 0;
+  aarch64_mte_unpack_tags (tags, skip_first);
+
+  /* Resize to the exact number of tags that was requested.  */
+  tags.resize (granules);
+
+  return tags;
+}
+
+/* AArch64 Linux implementation of the
+   gdbarch_use_target_description_from_corefile_notes hook.  */
+
+static bool
+aarch64_use_target_description_from_corefile_notes (gdbarch *gdbarch,
+						    bfd *obfd)
+{
+  /* Sanity check.  */
+  gdb_assert (obfd != nullptr);
+
+  /* If the corefile contains any SVE or SME register data, we don't want to
+     use the target description note, as it may be incorrect.
+
+     Currently the target description note contains a potentially incorrect
+     target description if the originating program changed the SVE or SME
+     vector lengths mid-execution.
+
+     Once we support per-thread target description notes in the corefiles, we
+     can always trust those notes whenever they are available.  */
+  if (bfd_get_section_by_name (obfd, ".reg-aarch-sve") != nullptr
+      || bfd_get_section_by_name (obfd, ".reg-aarch-za") != nullptr
+      || bfd_get_section_by_name (obfd, ".reg-aarch-zt") != nullptr)
+    return false;
+
+  return true;
+}
+
 static void
 aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
@@ -1441,18 +2866,18 @@ aarch64_linux_init_abi (struct gdbarch_i
 								    NULL };
   static const char *const stap_register_indirection_suffixes[] = { "]",
 								    NULL };
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   tdep->lowest_pc = 0x8000;
 
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, 1);
 
   set_solib_svr4_fetch_link_map_offsets (gdbarch,
-					 svr4_lp64_fetch_link_map_offsets);
+					 linux_lp64_fetch_link_map_offsets);
 
   /* Enable TLS support.  */
   set_gdbarch_fetch_tls_load_module_address (gdbarch,
-                                             svr4_fetch_objfile_link_map);
+					     svr4_fetch_objfile_link_map);
 
   /* Shared library handling.  */
   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
@@ -1484,10 +2909,48 @@ aarch64_linux_init_abi (struct gdbarch_i
   /* Syscall record.  */
   tdep->aarch64_syscall_record = aarch64_linux_syscall_record;
 
-  /* The top byte of a user space address known as the "tag",
-     is ignored by the kernel and can be regarded as additional
-     data associated with the address.  */
-  set_gdbarch_significant_addr_bit (gdbarch, 56);
+  /* MTE-specific settings and hooks.  */
+  if (tdep->has_mte ())
+    {
+      /* Register a hook for checking if an address is tagged or not.  */
+      set_gdbarch_tagged_address_p (gdbarch, aarch64_linux_tagged_address_p);
+
+      /* Register a hook for checking if there is a memory tag match.  */
+      set_gdbarch_memtag_matches_p (gdbarch,
+				    aarch64_linux_memtag_matches_p);
+
+      /* Register a hook for setting the logical/allocation tags for
+	 a range of addresses.  */
+      set_gdbarch_set_memtags (gdbarch, aarch64_linux_set_memtags);
+
+      /* Register a hook for extracting the logical/allocation tag from an
+	 address.  */
+      set_gdbarch_get_memtag (gdbarch, aarch64_linux_get_memtag);
+
+      /* Set the allocation tag granule size to 16 bytes.  */
+      set_gdbarch_memtag_granule_size (gdbarch, AARCH64_MTE_GRANULE_SIZE);
+
+      /* Register a hook for converting a memory tag to a string.  */
+      set_gdbarch_memtag_to_string (gdbarch, aarch64_linux_memtag_to_string);
+
+      set_gdbarch_report_signal_info (gdbarch,
+				      aarch64_linux_report_signal_info);
+
+      /* Core file helpers.  */
+
+      /* Core file helper to create a memory tag section for a particular
+	 PT_LOAD segment.  */
+      set_gdbarch_create_memtag_section
+	(gdbarch, aarch64_linux_create_memtag_section);
+
+      /* Core file helper to fill a memory tag section with tag data.  */
+      set_gdbarch_fill_memtag_section
+	(gdbarch, aarch64_linux_fill_memtag_section);
+
+      /* Core file helper to decode a memory tag section.  */
+      set_gdbarch_decode_memtag_section (gdbarch,
+					 aarch64_linux_decode_memtag_section);
+    }
 
   /* Initialize the aarch64_linux_record_tdep.  */
   /* These values are the size of the type that will be used in a system
@@ -1654,20 +3117,57 @@ aarch64_linux_init_abi (struct gdbarch_i
   set_gdbarch_get_syscall_number (gdbarch, aarch64_linux_get_syscall_number);
 
   /* Displaced stepping.  */
-  set_gdbarch_max_insn_length (gdbarch, 4 * AARCH64_DISPLACED_MODIFIED_INSNS);
+  set_gdbarch_max_insn_length (gdbarch, 4);
+  set_gdbarch_displaced_step_buffer_length
+    (gdbarch, 4 * AARCH64_DISPLACED_MODIFIED_INSNS);
   set_gdbarch_displaced_step_copy_insn (gdbarch,
 					aarch64_displaced_step_copy_insn);
   set_gdbarch_displaced_step_fixup (gdbarch, aarch64_displaced_step_fixup);
-  set_gdbarch_displaced_step_location (gdbarch, linux_displaced_step_location);
   set_gdbarch_displaced_step_hw_singlestep (gdbarch,
 					    aarch64_displaced_step_hw_singlestep);
 
   set_gdbarch_gcc_target_options (gdbarch, aarch64_linux_gcc_target_options);
+
+  /* Hook to decide if the target description should be obtained from
+     corefile target description note(s) or inferred from the corefile
+     sections.  */
+  set_gdbarch_use_target_description_from_corefile_notes (gdbarch,
+			    aarch64_use_target_description_from_corefile_notes);
 }
 
+#if GDB_SELF_TEST
+
+namespace selftests {
+
+/* Verify functions to read and write logical tags.  */
+
+static void
+aarch64_linux_ltag_tests (void)
+{
+  /* We have 4 bits of tags, but we test writing all the bits of the top
+     byte of address.  */
+  for (int i = 0; i < 1 << 8; i++)
+    {
+      CORE_ADDR addr = ((CORE_ADDR) i << 56) | 0xdeadbeef;
+      SELF_CHECK (aarch64_mte_get_ltag (addr) == (i & 0xf));
+
+      addr = aarch64_mte_set_ltag (0xdeadbeef, i);
+      SELF_CHECK (addr = ((CORE_ADDR) (i & 0xf) << 56) | 0xdeadbeef);
+    }
+}
+
+} // namespace selftests
+#endif /* GDB_SELF_TEST */
+
+void _initialize_aarch64_linux_tdep ();
 void
-_initialize_aarch64_linux_tdep (void)
+_initialize_aarch64_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_aarch64, 0, GDB_OSABI_LINUX,
 			  aarch64_linux_init_abi);
+
+#if GDB_SELF_TEST
+  selftests::register_test ("aarch64-linux-tagged-address",
+			    selftests::aarch64_linux_ltag_tests);
+#endif
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-linux-tdep.h ./gdb/aarch64-linux-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-linux-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-linux-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GNU/Linux on AArch64 target support, prototypes.
 
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -36,6 +36,9 @@
 /* The pauth regset consists of 2 X sized registers.  */
 #define AARCH64_LINUX_SIZEOF_PAUTH (2 * X_REGISTER_SIZE)
 
+/* The MTE regset consists of a 64-bit register.  */
+#define AARCH64_LINUX_SIZEOF_MTE_REGSET (8)
+
 extern const struct regset aarch64_linux_gregset;
 extern const struct regset aarch64_linux_fpregset;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-nat.c ./gdb/aarch64-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-nat.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/aarch64-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,301 @@
+/* Native-dependent code for AArch64.
+
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "gdbarch.h"
+#include "inferior.h"
+#include "cli/cli-cmds.h"
+#include "aarch64-nat.h"
+
+#include <unordered_map>
+
+/* Hash table storing per-process data.  We don't bind this to a
+   per-inferior registry because of targets like x86 GNU/Linux that
+   need to keep track of processes that aren't bound to any inferior
+   (e.g., fork children, checkpoints).  */
+
+static std::unordered_map<pid_t, aarch64_debug_reg_state>
+aarch64_debug_process_state;
+
+/* See aarch64-nat.h.  */
+
+struct aarch64_debug_reg_state *
+aarch64_lookup_debug_reg_state (pid_t pid)
+{
+  auto it = aarch64_debug_process_state.find (pid);
+  if (it != aarch64_debug_process_state.end ())
+    return &it->second;
+
+  return nullptr;
+}
+
+/* See aarch64-nat.h.  */
+
+struct aarch64_debug_reg_state *
+aarch64_get_debug_reg_state (pid_t pid)
+{
+  return &aarch64_debug_process_state[pid];
+}
+
+/* See aarch64-nat.h.  */
+
+void
+aarch64_remove_debug_reg_state (pid_t pid)
+{
+  aarch64_debug_process_state.erase (pid);
+}
+
+/* Returns the number of hardware watchpoints of type TYPE that we can
+   set.  Value is positive if we can set CNT watchpoints, zero if
+   setting watchpoints of type TYPE is not supported, and negative if
+   CNT is more than the maximum number of watchpoints of type TYPE
+   that we can support.  TYPE is one of bp_hardware_watchpoint,
+   bp_read_watchpoint, bp_write_watchpoint, or bp_hardware_breakpoint.
+   CNT is the number of such watchpoints used so far (including this
+   one).  OTHERTYPE is non-zero if other types of watchpoints are
+   currently enabled.  */
+
+int
+aarch64_can_use_hw_breakpoint (enum bptype type, int cnt, int othertype)
+{
+  if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
+      || type == bp_access_watchpoint || type == bp_watchpoint)
+    {
+      if (aarch64_num_wp_regs == 0)
+	return 0;
+    }
+  else if (type == bp_hardware_breakpoint)
+    {
+      if (aarch64_num_bp_regs == 0)
+	return 0;
+    }
+  else
+    gdb_assert_not_reached ("unexpected breakpoint type");
+
+  /* We always return 1 here because we don't have enough information
+     about possible overlap of addresses that they want to watch.  As an
+     extreme example, consider the case where all the watchpoints watch
+     the same address and the same region length: then we can handle a
+     virtually unlimited number of watchpoints, due to debug register
+     sharing implemented via reference counts.  */
+  return 1;
+}
+
+/* Insert a hardware-assisted breakpoint at BP_TGT->reqstd_address.
+   Return 0 on success, -1 on failure.  */
+
+int
+aarch64_insert_hw_breakpoint (struct gdbarch *gdbarch,
+			      struct bp_target_info *bp_tgt)
+{
+  int ret;
+  CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
+  int len;
+  const enum target_hw_bp_type type = hw_execute;
+  struct aarch64_debug_reg_state *state
+    = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+
+  gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
+
+  if (show_debug_regs)
+    gdb_printf (gdb_stdlog,
+		"insert_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
+		(unsigned long) addr, len);
+
+  ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */,
+				   inferior_ptid, state);
+
+  if (show_debug_regs)
+    {
+      aarch64_show_debug_reg_state (state,
+				    "insert_hw_breakpoint", addr, len, type);
+    }
+
+  return ret;
+}
+
+/* Remove a hardware-assisted breakpoint at BP_TGT->placed_address.
+   Return 0 on success, -1 on failure.  */
+
+int
+aarch64_remove_hw_breakpoint (struct gdbarch *gdbarch,
+			      struct bp_target_info *bp_tgt)
+{
+  int ret;
+  CORE_ADDR addr = bp_tgt->placed_address;
+  int len = 4;
+  const enum target_hw_bp_type type = hw_execute;
+  struct aarch64_debug_reg_state *state
+    = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+
+  gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
+
+  if (show_debug_regs)
+    gdb_printf (gdb_stdlog,
+		"remove_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
+		(unsigned long) addr, len);
+
+  ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */,
+				   inferior_ptid, state);
+
+  if (show_debug_regs)
+    {
+      aarch64_show_debug_reg_state (state,
+				    "remove_hw_watchpoint", addr, len, type);
+    }
+
+  return ret;
+}
+
+/* Insert a watchpoint to watch a memory region which starts at
+   address ADDR and whose length is LEN bytes.  Watch memory accesses
+   of the type TYPE.  Return 0 on success, -1 on failure.  */
+
+int
+aarch64_insert_watchpoint (CORE_ADDR addr, int len, enum target_hw_bp_type type,
+			   struct expression *cond)
+{
+  int ret;
+  struct aarch64_debug_reg_state *state
+    = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+
+  if (show_debug_regs)
+    gdb_printf (gdb_stdlog,
+		"insert_watchpoint on entry (addr=0x%08lx, len=%d)\n",
+		(unsigned long) addr, len);
+
+  gdb_assert (type != hw_execute);
+
+  ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */,
+				   inferior_ptid, state);
+
+  if (show_debug_regs)
+    {
+      aarch64_show_debug_reg_state (state,
+				    "insert_watchpoint", addr, len, type);
+    }
+
+  return ret;
+}
+
+/* Remove a watchpoint that watched the memory region which starts at
+   address ADDR, whose length is LEN bytes, and for accesses of the
+   type TYPE.  Return 0 on success, -1 on failure.  */
+
+int
+aarch64_remove_watchpoint (CORE_ADDR addr, int len, enum target_hw_bp_type type,
+			   struct expression *cond)
+{
+  int ret;
+  struct aarch64_debug_reg_state *state
+    = aarch64_get_debug_reg_state (inferior_ptid.pid ());
+
+  if (show_debug_regs)
+    gdb_printf (gdb_stdlog,
+		"remove_watchpoint on entry (addr=0x%08lx, len=%d)\n",
+		(unsigned long) addr, len);
+
+  gdb_assert (type != hw_execute);
+
+  ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */,
+				   inferior_ptid, state);
+
+  if (show_debug_regs)
+    {
+      aarch64_show_debug_reg_state (state,
+				    "remove_watchpoint", addr, len, type);
+    }
+
+  return ret;
+}
+
+/* See aarch64-nat.h.  */
+
+bool
+aarch64_stopped_data_address (const struct aarch64_debug_reg_state *state,
+			      CORE_ADDR addr_trap, CORE_ADDR *addr_p)
+{
+  int i;
+
+  for (i = aarch64_num_wp_regs - 1; i >= 0; --i)
+    {
+      const unsigned int offset
+	= aarch64_watchpoint_offset (state->dr_ctrl_wp[i]);
+      const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]);
+      const CORE_ADDR addr_watch = state->dr_addr_wp[i] + offset;
+      const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 8);
+      const CORE_ADDR addr_orig = state->dr_addr_orig_wp[i];
+
+      if (state->dr_ref_count_wp[i]
+	  && DR_CONTROL_ENABLED (state->dr_ctrl_wp[i])
+	  && addr_trap >= addr_watch_aligned
+	  && addr_trap < addr_watch + len)
+	{
+	  /* ADDR_TRAP reports the first address of the memory range
+	     accessed by the CPU, regardless of what was the memory
+	     range watched.  Thus, a large CPU access that straddles
+	     the ADDR_WATCH..ADDR_WATCH+LEN range may result in an
+	     ADDR_TRAP that is lower than the
+	     ADDR_WATCH..ADDR_WATCH+LEN range.  E.g.:
+
+	     addr: |   4   |   5   |   6   |   7   |   8   |
+				   |---- range watched ----|
+		   |----------- range accessed ------------|
+
+	     In this case, ADDR_TRAP will be 4.
+
+	     To match a watchpoint known to GDB core, we must never
+	     report *ADDR_P outside of any ADDR_WATCH..ADDR_WATCH+LEN
+	     range.  ADDR_WATCH <= ADDR_TRAP < ADDR_ORIG is a false
+	     positive on kernels older than 4.10.  See PR
+	     external/20207.  */
+	  *addr_p = addr_orig;
+	  return true;
+	}
+    }
+
+  return false;
+}
+
+/* Define AArch64 maintenance commands.  */
+
+static void
+add_show_debug_regs_command (void)
+{
+  /* A maintenance command to enable printing the internal DRi mirror
+     variables.  */
+  add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
+			   &show_debug_regs, _("\
+Set whether to show variables that mirror the AArch64 debug registers."), _("\
+Show whether to show variables that mirror the AArch64 debug registers."), _("\
+Use \"on\" to enable, \"off\" to disable.\n\
+If enabled, the debug registers values are shown when GDB inserts\n\
+or removes a hardware breakpoint or watchpoint, and when the inferior\n\
+triggers a breakpoint or watchpoint."),
+			   NULL,
+			   NULL,
+			   &maintenance_set_cmdlist,
+			   &maintenance_show_cmdlist);
+}
+
+void
+aarch64_initialize_hw_point ()
+{
+  add_show_debug_regs_command ();
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-nat.h ./gdb/aarch64-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-nat.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/aarch64-nat.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,109 @@
+/* Native-dependent code for AArch64.
+
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef AARCH64_NAT_H
+#define AARCH64_NAT_H
+
+#include "breakpoint.h"
+#include "nat/aarch64-hw-point.h"
+#include "target.h"
+
+/* Hardware-assisted breakpoints and watchpoints.  */
+
+/* Initialize platform-independent state for hardware-assisted
+   breakpoints and watchpoints.  */
+
+void aarch64_initialize_hw_point ();
+
+/* Return the debug register state for process PID.  If no existing
+   state is found for this process, return nullptr.  */
+
+struct aarch64_debug_reg_state *aarch64_lookup_debug_reg_state (pid_t pid);
+
+/* Return the debug register state for process PID.  If no existing
+   state is found for this process, create new state.  */
+
+struct aarch64_debug_reg_state *aarch64_get_debug_reg_state (pid_t pid);
+
+/* Remove any existing per-process debug state for process PID.  */
+
+void aarch64_remove_debug_reg_state (pid_t pid);
+
+/* Helper for the "stopped_data_address" target method.  Returns TRUE
+   if a hardware watchpoint trap at ADDR_TRAP matches a set
+   watchpoint.  The address of the matched watchpoint is returned in
+   *ADDR_P.  */
+
+bool aarch64_stopped_data_address (const struct aarch64_debug_reg_state *state,
+				   CORE_ADDR addr_trap, CORE_ADDR *addr_p);
+
+/* Helper functions used by aarch64_nat_target below.  See their
+   definitions.  */
+
+int aarch64_can_use_hw_breakpoint (enum bptype type, int cnt, int othertype);
+int aarch64_insert_watchpoint (CORE_ADDR addr, int len,
+			       enum target_hw_bp_type type,
+			       struct expression *cond);
+int aarch64_remove_watchpoint (CORE_ADDR addr, int len,
+			       enum target_hw_bp_type type,
+			       struct expression *cond);
+int aarch64_insert_hw_breakpoint (struct gdbarch *gdbarch,
+				  struct bp_target_info *bp_tgt);
+int aarch64_remove_hw_breakpoint (struct gdbarch *gdbarch,
+				  struct bp_target_info *bp_tgt);
+int aarch64_stopped_by_hw_breakpoint ();
+
+/* Convenience template mixin used to add aarch64 watchpoints support to a
+   target.  */
+
+template <typename BaseTarget>
+struct aarch64_nat_target : public BaseTarget
+{
+  /* Hook in common aarch64 hardware watchpoints/breakpoints support.  */
+
+  int can_use_hw_breakpoint (enum bptype type, int cnt, int othertype) override
+  { return aarch64_can_use_hw_breakpoint (type, cnt, othertype); }
+
+  int region_ok_for_hw_watchpoint (CORE_ADDR addr, int len) override
+  { return aarch64_region_ok_for_watchpoint (addr, len); }
+
+  int insert_watchpoint (CORE_ADDR addr, int len,
+			 enum target_hw_bp_type type,
+			 struct expression *cond) override
+  { return aarch64_insert_watchpoint (addr, len, type, cond); }
+
+  int remove_watchpoint (CORE_ADDR addr, int len,
+			 enum target_hw_bp_type type,
+			 struct expression *cond) override
+  { return aarch64_remove_watchpoint (addr, len, type, cond); }
+
+  int insert_hw_breakpoint (struct gdbarch *gdbarch,
+			    struct bp_target_info *bp_tgt) override
+  { return aarch64_insert_hw_breakpoint (gdbarch, bp_tgt); }
+
+  int remove_hw_breakpoint (struct gdbarch *gdbarch,
+			    struct bp_target_info *bp_tgt) override
+  { return aarch64_remove_hw_breakpoint (gdbarch, bp_tgt); }
+
+  bool watchpoint_addr_within_range (CORE_ADDR addr, CORE_ADDR start,
+				     int length) override
+  { return start <= addr && start + length - 1 >= addr; }
+};
+
+#endif /* AARCH64_NAT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-newlib-tdep.c ./gdb/aarch64-newlib-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-newlib-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-newlib-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Newlib AArch64.
 
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -29,15 +29,16 @@
 static void
 aarch64_newlib_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   /* Jump buffer - support for longjmp.
      Offset of original PC in jump buffer (in registers).  */
   tdep->jb_pc = 11;
 }
 
+void _initialize_aarch64_newlib_tdep ();
 void
-_initialize_aarch64_newlib_tdep (void)
+_initialize_aarch64_newlib_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_aarch64, 0, GDB_OSABI_NEWLIB,
 			  aarch64_newlib_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-ravenscar-thread.c ./gdb/aarch64-ravenscar-thread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-ravenscar-thread.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-ravenscar-thread.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Ravenscar Aarch64 target support.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -47,144 +47,31 @@ static const int aarch64_context_offsets
   80,        88,        96,        88,
   NO_OFFSET,
 
-  /* Q0 - Q31 */
-  112,       128,       144,       160,
-  176,       192,       208,       224,
-  240,       256,       272,       288,
-  304,       320,       336,       352,
-  368,       384,       400,       416,
-  432,       448,       464,       480,
-  496,       512,       528,       544,
-  560,       576,       592,       608,
+  /* V0 - V31 */
+  128,       144,       160,       176,
+  192,       208,       224,       240,
+  256,       272,       288,       304,
+  320,       336,       352,       368,
+  384,       400,       416,       432,
+  448,       464,       480,       496,
+  512,       528,       544,       560,
+  576,       592,       608,       624,
 
   /* FPSR, FPCR */
-  104,       108,
-
-  /* FPU Saved field */
-  624
-};
-
-/* The register layout info.  */
-
-struct ravenscar_reg_info
-{
-  /* A table providing the offset relative to the context structure
-     where each register is saved.  */
-  const int *context_offsets;
-
-  /* The number of elements in the context_offsets table above.  */
-  int context_offsets_size;
-};
-
-/* supply register REGNUM, which has been saved on REGISTER_ADDR, to the
-   regcache.  */
-
-static void
-supply_register_at_address (struct regcache *regcache, int regnum,
-                            CORE_ADDR register_addr)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  int buf_size = register_size (gdbarch, regnum);
-  gdb_byte *buf;
-
-  buf = (gdb_byte *) alloca (buf_size);
-  read_memory (register_addr, buf, buf_size);
-  regcache->raw_supply (regnum, buf);
-}
-
-/* Return true if, for a non-running thread, REGNUM has been saved on the
-   Thread_Descriptor.  */
-
-static int
-register_in_thread_descriptor_p (const struct ravenscar_reg_info *reg_info,
-				 int regnum)
-{
-  /* Check FPU registers */
-  return (regnum < reg_info->context_offsets_size
-	  && reg_info->context_offsets[regnum] != NO_OFFSET);
-}
-
-/* to_fetch_registers when inferior_ptid is different from the running
-   thread.  */
-
-static void
-aarch64_ravenscar_generic_fetch_registers
-  (const struct ravenscar_reg_info *reg_info,
-   struct regcache *regcache, int regnum)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  const int num_regs = gdbarch_num_regs (gdbarch);
-  int current_regnum;
-  CORE_ADDR current_address;
-  CORE_ADDR thread_descriptor_address;
-
-  /* The tid is the thread_id field, which is a pointer to the thread.  */
-  thread_descriptor_address = (CORE_ADDR) inferior_ptid.tid ();
-
-  /* Read registers.  */
-  for (current_regnum = 0; current_regnum < num_regs; current_regnum++)
-    {
-      if (register_in_thread_descriptor_p (reg_info, current_regnum))
-        {
-          current_address = thread_descriptor_address
-            + reg_info->context_offsets[current_regnum];
-          supply_register_at_address (regcache, current_regnum,
-                                      current_address);
-        }
-    }
-}
-
-/* to_store_registers when inferior_ptid is different from the running
-   thread.  */
-
-static void
-aarch64_ravenscar_generic_store_registers
-  (const struct ravenscar_reg_info *reg_info,
-   struct regcache *regcache, int regnum)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  int buf_size = register_size (gdbarch, regnum);
-  gdb_byte buf[buf_size];
-  ULONGEST register_address;
-
-  if (register_in_thread_descriptor_p (reg_info, regnum))
-    register_address
-      = inferior_ptid.tid () + reg_info->context_offsets [regnum];
-  else
-    return;
-
-  regcache->raw_collect (regnum, buf);
-  write_memory (register_address,
-                buf,
-                buf_size);
-}
-
-/* The ravenscar_reg_info for most Aarch64 targets.  */
-
-static const struct ravenscar_reg_info aarch64_reg_info =
-{
-  aarch64_context_offsets,
-  ARRAY_SIZE (aarch64_context_offsets),
+  112,       116,
 };
 
-struct aarch64_ravenscar_ops : public ravenscar_arch_ops
-{
-  void fetch_registers (struct regcache *regcache, int regnum) override
-  {
-    aarch64_ravenscar_generic_fetch_registers
-      (&aarch64_reg_info, regcache, regnum);
-  }
-
-  void store_registers (struct regcache *regcache, int regnum) override
-  {
-    aarch64_ravenscar_generic_store_registers
-      (&aarch64_reg_info, regcache, regnum);
-  }
-};
+#define V_INIT_OFFSET 640
 
 /* The ravenscar_arch_ops vector for most Aarch64 targets.  */
 
-static struct aarch64_ravenscar_ops aarch64_ravenscar_ops;
+static struct ravenscar_arch_ops aarch64_ravenscar_ops
+     (aarch64_context_offsets,
+      -1, -1,
+      V_INIT_OFFSET,
+      /* The FPU context buffer starts with the FPSR register.  */
+      aarch64_context_offsets[AARCH64_FPSR_REGNUM],
+      AARCH64_V0_REGNUM, AARCH64_FPCR_REGNUM);
 
 /* Register aarch64_ravenscar_ops in GDBARCH.  */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-ravenscar-thread.h ./gdb/aarch64-ravenscar-thread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-ravenscar-thread.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-ravenscar-thread.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Ravenscar Aarch64 target support.
  
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-tdep.c ./gdb/aarch64-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GDB on AArch64 systems.
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -21,6 +21,7 @@
 #include "defs.h"
 
 #include "frame.h"
+#include "language.h"
 #include "gdbcmd.h"
 #include "gdbcore.h"
 #include "dis-asm.h"
@@ -34,7 +35,7 @@
 #include "trad-frame.h"
 #include "objfiles.h"
 #include "dwarf2.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "gdbtypes.h"
 #include "prologue-value.h"
 #include "target-descriptions.h"
@@ -52,63 +53,34 @@
 
 #include "opcode/aarch64.h"
 #include <algorithm>
+#include <unordered_map>
 
-#define submask(x) ((1L << ((x) + 1)) - 1)
-#define bit(obj,st) (((obj) >> (st)) & 1)
-#define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
+/* For inferior_ptid and current_inferior ().  */
+#include "inferior.h"
+/* For std::sqrt and std::pow.  */
+#include <cmath>
 
 /* A Homogeneous Floating-Point or Short-Vector Aggregate may have at most
    four members.  */
 #define HA_MAX_NUM_FLDS		4
 
 /* All possible aarch64 target descriptors.  */
-struct target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/];
+static std::unordered_map <aarch64_features, target_desc *> tdesc_aarch64_map;
 
-/* The standard register names, and all the valid aliases for them.  */
+/* The standard register names, and all the valid aliases for them.
+   We're not adding fp here, that name is already taken, see
+   _initialize_frame_reg.  */
 static const struct
 {
   const char *const name;
   int regnum;
 } aarch64_register_aliases[] =
 {
-  /* 64-bit register names.  */
-  {"fp", AARCH64_FP_REGNUM},
+  /* Link register alias for x30.  */
   {"lr", AARCH64_LR_REGNUM},
-  {"sp", AARCH64_SP_REGNUM},
-
-  /* 32-bit register names.  */
-  {"w0", AARCH64_X0_REGNUM + 0},
-  {"w1", AARCH64_X0_REGNUM + 1},
-  {"w2", AARCH64_X0_REGNUM + 2},
-  {"w3", AARCH64_X0_REGNUM + 3},
-  {"w4", AARCH64_X0_REGNUM + 4},
-  {"w5", AARCH64_X0_REGNUM + 5},
-  {"w6", AARCH64_X0_REGNUM + 6},
-  {"w7", AARCH64_X0_REGNUM + 7},
-  {"w8", AARCH64_X0_REGNUM + 8},
-  {"w9", AARCH64_X0_REGNUM + 9},
-  {"w10", AARCH64_X0_REGNUM + 10},
-  {"w11", AARCH64_X0_REGNUM + 11},
-  {"w12", AARCH64_X0_REGNUM + 12},
-  {"w13", AARCH64_X0_REGNUM + 13},
-  {"w14", AARCH64_X0_REGNUM + 14},
-  {"w15", AARCH64_X0_REGNUM + 15},
-  {"w16", AARCH64_X0_REGNUM + 16},
-  {"w17", AARCH64_X0_REGNUM + 17},
-  {"w18", AARCH64_X0_REGNUM + 18},
-  {"w19", AARCH64_X0_REGNUM + 19},
-  {"w20", AARCH64_X0_REGNUM + 20},
-  {"w21", AARCH64_X0_REGNUM + 21},
-  {"w22", AARCH64_X0_REGNUM + 22},
-  {"w23", AARCH64_X0_REGNUM + 23},
-  {"w24", AARCH64_X0_REGNUM + 24},
-  {"w25", AARCH64_X0_REGNUM + 25},
-  {"w26", AARCH64_X0_REGNUM + 26},
-  {"w27", AARCH64_X0_REGNUM + 27},
-  {"w28", AARCH64_X0_REGNUM + 28},
-  {"w29", AARCH64_X0_REGNUM + 29},
-  {"w30", AARCH64_X0_REGNUM + 30},
-
+  /* SP is the canonical name for x31 according to aarch64_r_register_names,
+     so we're adding an x31 alias for sp.  */
+  {"x31", AARCH64_SP_REGNUM},
   /*  specials */
   {"ip0", AARCH64_X0_REGNUM + 16},
   {"ip1", AARCH64_X0_REGNUM + 17}
@@ -170,12 +142,24 @@ static const char *const aarch64_sve_reg
 
 static const char *const aarch64_pauth_register_names[] =
 {
-  /* Authentication mask for data pointer.  */
+  /* Authentication mask for data pointer, low half/user pointers.  */
   "pauth_dmask",
-  /* Authentication mask for code pointer.  */
-  "pauth_cmask"
+  /* Authentication mask for code pointer, low half/user pointers.  */
+  "pauth_cmask",
+  /* Authentication mask for data pointer, high half / kernel pointers.  */
+  "pauth_dmask_high",
+  /* Authentication mask for code pointer, high half / kernel pointers.  */
+  "pauth_cmask_high"
+};
+
+static const char *const aarch64_mte_register_names[] =
+{
+  /* Tag Control Register.  */
+  "tag_ctl"
 };
 
+static int aarch64_stack_frame_destroyed_p (struct gdbarch *, CORE_ADDR);
+
 /* AArch64 prologue cache structure.  */
 struct aarch64_prologue_cache
 {
@@ -205,14 +189,51 @@ struct aarch64_prologue_cache
   int framereg;
 
   /* Saved register offsets.  */
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
+};
+
+/* Holds information used to read/write from/to ZA
+   pseudo-registers.
+
+   With this information, the read/write code can be simplified so it
+   deals only with the required information to map a ZA pseudo-register
+   to the exact bytes into the ZA contents buffer.  Otherwise we'd need
+   to use a lot of conditionals.  */
+
+struct za_offsets
+{
+  /* Offset, into ZA, of the starting byte of the pseudo-register.  */
+  size_t starting_offset;
+  /* The size of the contiguous chunks of the pseudo-register.  */
+  size_t chunk_size;
+  /* The number of pseudo-register chunks contained in ZA.  */
+  size_t chunks;
+  /* The offset between each contiguous chunk.  */
+  size_t stride_size;
+};
+
+/* Holds data that is helpful to determine the individual fields that make
+   up the names of the ZA pseudo-registers.  It is also very helpful to
+   determine offsets, stride and sizes for reading ZA tiles and tile
+   slices.  */
+
+struct za_pseudo_encoding
+{
+  /* The slice index (0 ~ svl).  Only used for tile slices.  */
+  uint8_t slice_index;
+  /* The tile number (0 ~ 15).  */
+  uint8_t tile_index;
+  /* Direction (horizontal/vertical).  Only used for tile slices.  */
+  bool horizontal;
+  /* Qualifier index (0 ~ 4).  These map to B, H, S, D and Q.  */
+  uint8_t qualifier_index;
 };
 
 static void
 show_aarch64_debug (struct ui_file *file, int from_tty,
-                    struct cmd_list_element *c, const char *value)
+		    struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("AArch64 debugging is %s.\n"), value);
+  gdb_printf (file, _("AArch64 debugging is %s.\n"), value);
 }
 
 namespace {
@@ -246,16 +267,26 @@ class instruction_reader : public abstra
    THIS_FRAME.  */
 
 static CORE_ADDR
-aarch64_frame_unmask_lr (struct gdbarch_tdep *tdep,
-			 struct frame_info *this_frame, CORE_ADDR addr)
+aarch64_frame_unmask_lr (aarch64_gdbarch_tdep *tdep,
+			 frame_info_ptr this_frame, CORE_ADDR addr)
 {
   if (tdep->has_pauth ()
       && frame_unwind_register_unsigned (this_frame,
-					 tdep->pauth_ra_state_regnum))
+					 tdep->ra_sign_state_regnum))
     {
-      int cmask_num = AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base);
-      CORE_ADDR cmask = frame_unwind_register_unsigned (this_frame, cmask_num);
-      addr = addr & ~cmask;
+      /* VA range select (bit 55) tells us whether to use the low half masks
+	 or the high half masks.  */
+      int cmask_num;
+      if (tdep->pauth_reg_count > 2 && addr & VA_RANGE_SELECT_BIT_MASK)
+	cmask_num = AARCH64_PAUTH_CMASK_HIGH_REGNUM (tdep->pauth_reg_base);
+      else
+	cmask_num = AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base);
+
+      /* By default, we assume TBI and discard the top 8 bits plus the VA range
+	 select bit (55).  */
+      CORE_ADDR mask = AARCH64_TOP_BITS_MASK;
+      mask |= frame_unwind_register_unsigned (this_frame, cmask_num);
+      addr = aarch64_remove_top_bits (addr, mask);
 
       /* Record in the frame that the link register required unmasking.  */
       set_frame_previous_pc_masked (this_frame);
@@ -267,7 +298,7 @@ aarch64_frame_unmask_lr (struct gdbarch_
 /* Implement the "get_pc_address_flags" gdbarch method.  */
 
 static std::string
-aarch64_get_pc_address_flags (frame_info *frame, CORE_ADDR pc)
+aarch64_get_pc_address_flags (frame_info_ptr frame, CORE_ADDR pc)
 {
   if (pc != 0 && get_frame_pc_masked (frame))
     return "PAC";
@@ -287,6 +318,12 @@ aarch64_analyze_prologue (struct gdbarch
 {
   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
   int i;
+
+  /* Whether the stack has been set.  This should be true when we notice a SP
+     to FP move or if we are using the SP as the base register for storing
+     data, in case the FP is omitted.  */
+  bool seen_stack_set = false;
+
   /* Track X registers and D registers in prologue.  */
   pv_t regs[AARCH64_X_REGISTER_COUNT + AARCH64_D_REGISTER_COUNT];
 
@@ -326,14 +363,24 @@ aarch64_analyze_prologue (struct gdbarch
 	      regs[rd] = pv_add_constant (regs[rn],
 					  -inst.operands[2].imm.value);
 	    }
+
+	  /* Did we move SP to FP?  */
+	  if (rn == AARCH64_SP_REGNUM && rd == AARCH64_FP_REGNUM)
+	    seen_stack_set = true;
 	}
-      else if (inst.opcode->iclass == pcreladdr
-	       && inst.operands[1].type == AARCH64_OPND_ADDR_ADRP)
+      else if (inst.opcode->iclass == addsub_ext
+	       && strcmp ("sub", inst.opcode->name) == 0)
 	{
-	  gdb_assert (aarch64_num_of_operands (inst.opcode) == 2);
-	  gdb_assert (inst.operands[0].type == AARCH64_OPND_Rd);
+	  unsigned rd = inst.operands[0].reg.regno;
+	  unsigned rn = inst.operands[1].reg.regno;
+	  unsigned rm = inst.operands[2].reg.regno;
+
+	  gdb_assert (aarch64_num_of_operands (inst.opcode) == 3);
+	  gdb_assert (inst.operands[0].type == AARCH64_OPND_Rd_SP);
+	  gdb_assert (inst.operands[1].type == AARCH64_OPND_Rn_SP);
+	  gdb_assert (inst.operands[2].type == AARCH64_OPND_Rm_EXT);
 
-	  regs[inst.operands[0].reg.regno] = pv_unknown ();
+	  regs[rd] = pv_subtract (regs[rn], regs[rm]);
 	}
       else if (inst.opcode->iclass == branch_imm)
 	{
@@ -357,8 +404,20 @@ aarch64_analyze_prologue (struct gdbarch
 	}
       else if (inst.opcode->op == OP_MOVZ)
 	{
+	  unsigned rd = inst.operands[0].reg.regno;
+
+	  gdb_assert (aarch64_num_of_operands (inst.opcode) == 2);
 	  gdb_assert (inst.operands[0].type == AARCH64_OPND_Rd);
-	  regs[inst.operands[0].reg.regno] = pv_unknown ();
+	  gdb_assert (inst.operands[1].type == AARCH64_OPND_HALF);
+	  gdb_assert (inst.operands[1].shifter.kind == AARCH64_MOD_LSL);
+
+	  /* If this shows up before we set the stack, keep going.  Otherwise
+	     stop the analysis.  */
+	  if (seen_stack_set)
+	    break;
+
+	  regs[rd] = pv_constant (inst.operands[1].imm.value
+				  << inst.operands[1].shifter.amount);
 	}
       else if (inst.opcode->iclass == log_shift
 	       && strcmp (inst.opcode->name, "orr") == 0)
@@ -376,12 +435,10 @@ aarch64_analyze_prologue (struct gdbarch
 	    regs[rd] = regs[rm];
 	  else
 	    {
-	      if (aarch64_debug)
-		{
-		  debug_printf ("aarch64: prologue analysis gave up "
-				"addr=%s opcode=0x%x (orr x register)\n",
-				core_addr_to_string_nz (start), insn);
-		}
+	      aarch64_debug_printf ("prologue analysis gave up "
+				    "addr=%s opcode=0x%x (orr x register)",
+				    core_addr_to_string_nz (start), insn);
+
 	      break;
 	    }
 	}
@@ -399,6 +456,10 @@ aarch64_analyze_prologue (struct gdbarch
 	  stack.store
 	    (pv_add_constant (regs[rn], inst.operands[1].addr.offset.imm),
 	     size, regs[rt]);
+
+	  /* Are we storing with SP as a base?  */
+	  if (rn == AARCH64_SP_REGNUM)
+	    seen_stack_set = true;
 	}
       else if ((inst.opcode->iclass == ldstpair_off
 		|| (inst.opcode->iclass == ldstpair_indexed
@@ -442,6 +503,10 @@ aarch64_analyze_prologue (struct gdbarch
 	  if (inst.operands[2].addr.writeback)
 	    regs[rn] = pv_add_constant (regs[rn], imm);
 
+	  /* Ignore the instruction that allocates stack space and sets
+	     the SP.  */
+	  if (rn == AARCH64_SP_REGNUM && !inst.operands[2].addr.writeback)
+	    seen_stack_set = true;
 	}
       else if ((inst.opcode->iclass == ldst_imm9 /* Signed immediate.  */
 		|| (inst.opcode->iclass == ldst_pos /* Unsigned immediate.  */
@@ -464,6 +529,10 @@ aarch64_analyze_prologue (struct gdbarch
 	  stack.store (pv_add_constant (regs[rn], imm), size, regs[rt]);
 	  if (inst.operands[1].addr.writeback)
 	    regs[rn] = pv_add_constant (regs[rn], imm);
+
+	  /* Are we storing with SP as a base?  */
+	  if (rn == AARCH64_SP_REGNUM)
+	    seen_stack_set = true;
 	}
       else if (inst.opcode->iclass == testbranch)
 	{
@@ -472,7 +541,8 @@ aarch64_analyze_prologue (struct gdbarch
 	}
       else if (inst.opcode->iclass == ic_system)
 	{
-	  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+	  aarch64_gdbarch_tdep *tdep
+	    = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 	  int ra_state_val = 0;
 
 	  if (insn == 0xd503233f /* paciasp.  */
@@ -487,28 +557,29 @@ aarch64_analyze_prologue (struct gdbarch
 	      /* Return addresses are not mangled.  */
 	      ra_state_val = 0;
 	    }
+	  else if (IS_BTI (insn))
+	    /* We don't need to do anything special for a BTI instruction.  */
+	    continue;
 	  else
 	    {
-	      if (aarch64_debug)
-		debug_printf ("aarch64: prologue analysis gave up addr=%s"
-			      " opcode=0x%x (iclass)\n",
-			      core_addr_to_string_nz (start), insn);
+	      aarch64_debug_printf ("prologue analysis gave up addr=%s"
+				    " opcode=0x%x (iclass)",
+				    core_addr_to_string_nz (start), insn);
 	      break;
 	    }
 
 	  if (tdep->has_pauth () && cache != nullptr)
-	    trad_frame_set_value (cache->saved_regs,
-				  tdep->pauth_ra_state_regnum,
-				  ra_state_val);
+	    {
+	      int regnum = tdep->ra_sign_state_regnum;
+	      cache->saved_regs[regnum].set_value (ra_state_val);
+	    }
 	}
       else
 	{
-	  if (aarch64_debug)
-	    {
-	      debug_printf ("aarch64: prologue analysis gave up addr=%s"
-			    " opcode=0x%x\n",
-			    core_addr_to_string_nz (start), insn);
-	    }
+	  aarch64_debug_printf ("prologue analysis gave up addr=%s"
+				" opcode=0x%x",
+				core_addr_to_string_nz (start), insn);
+
 	  break;
 	}
     }
@@ -540,7 +611,7 @@ aarch64_analyze_prologue (struct gdbarch
       CORE_ADDR offset;
 
       if (stack.find_reg (gdbarch, i, &offset))
-	cache->saved_regs[i].addr = offset;
+	cache->saved_regs[i].set_addr (offset);
     }
 
   for (i = 0; i < AARCH64_D_REGISTER_COUNT; i++)
@@ -550,7 +621,7 @@ aarch64_analyze_prologue (struct gdbarch
 
       if (stack.find_reg (gdbarch, i + AARCH64_X_REGISTER_COUNT,
 			  &offset))
-	cache->saved_regs[i + regnum + AARCH64_D0_REGNUM].addr = offset;
+	cache->saved_regs[i + regnum + AARCH64_D0_REGNUM].set_addr (offset);
     }
 
   return start;
@@ -601,7 +672,6 @@ aarch64_analyze_prologue_test (void)
 {
   struct gdbarch_info info;
 
-  gdbarch_info_init (&info);
   info.bfd_arch_info = bfd_scan_arch ("aarch64");
 
   struct gdbarch *gdbarch = gdbarch_find_by_info (info);
@@ -610,7 +680,7 @@ aarch64_analyze_prologue_test (void)
   struct aarch64_prologue_cache cache;
   cache.saved_regs = trad_frame_alloc_saved_regs (gdbarch);
 
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   /* Test the simple prologue in which frame pointer is used.  */
   {
@@ -630,19 +700,21 @@ aarch64_analyze_prologue_test (void)
     for (int i = 0; i < AARCH64_X_REGISTER_COUNT; i++)
       {
 	if (i == AARCH64_FP_REGNUM)
-	  SELF_CHECK (cache.saved_regs[i].addr == -272);
+	  SELF_CHECK (cache.saved_regs[i].addr () == -272);
 	else if (i == AARCH64_LR_REGNUM)
-	  SELF_CHECK (cache.saved_regs[i].addr == -264);
+	  SELF_CHECK (cache.saved_regs[i].addr () == -264);
 	else
-	  SELF_CHECK (cache.saved_regs[i].addr == -1);
+	  SELF_CHECK (cache.saved_regs[i].is_realreg ()
+		      && cache.saved_regs[i].realreg () == i);
       }
 
     for (int i = 0; i < AARCH64_D_REGISTER_COUNT; i++)
       {
-	int regnum = gdbarch_num_regs (gdbarch);
+	int num_regs = gdbarch_num_regs (gdbarch);
+	int regnum = i + num_regs + AARCH64_D0_REGNUM;
 
-	SELF_CHECK (cache.saved_regs[i + regnum + AARCH64_D0_REGNUM].addr
-		    == -1);
+	SELF_CHECK (cache.saved_regs[regnum].is_realreg ()
+		    && cache.saved_regs[regnum].realreg () == regnum);
       }
   }
 
@@ -670,26 +742,139 @@ aarch64_analyze_prologue_test (void)
     for (int i = 0; i < AARCH64_X_REGISTER_COUNT; i++)
       {
 	if (i == 1)
-	  SELF_CHECK (cache.saved_regs[i].addr == -16);
+	  SELF_CHECK (cache.saved_regs[i].addr () == -16);
 	else if (i == 19)
-	  SELF_CHECK (cache.saved_regs[i].addr == -48);
+	  SELF_CHECK (cache.saved_regs[i].addr () == -48);
 	else
-	  SELF_CHECK (cache.saved_regs[i].addr == -1);
+	  SELF_CHECK (cache.saved_regs[i].is_realreg ()
+		      && cache.saved_regs[i].realreg () == i);
       }
 
     for (int i = 0; i < AARCH64_D_REGISTER_COUNT; i++)
       {
-	int regnum = gdbarch_num_regs (gdbarch);
+	int num_regs = gdbarch_num_regs (gdbarch);
+	int regnum = i + num_regs + AARCH64_D0_REGNUM;
+
 
 	if (i == 0)
-	  SELF_CHECK (cache.saved_regs[i + regnum + AARCH64_D0_REGNUM].addr
-		      == -24);
+	  SELF_CHECK (cache.saved_regs[regnum].addr () == -24);
 	else
-	  SELF_CHECK (cache.saved_regs[i + regnum + AARCH64_D0_REGNUM].addr
-		      == -1);
+	  SELF_CHECK (cache.saved_regs[regnum].is_realreg ()
+		      && cache.saved_regs[regnum].realreg () == regnum);
       }
   }
 
+  /* Test handling of movz before setting the frame pointer.  */
+  {
+    static const uint32_t insns[] = {
+      0xa9bf7bfd, /* stp     x29, x30, [sp, #-16]! */
+      0x52800020, /* mov     w0, #0x1 */
+      0x910003fd, /* mov     x29, sp */
+      0x528000a2, /* mov     w2, #0x5 */
+      0x97fffff8, /* bl      6e4 */
+    };
+
+    instruction_reader_test reader (insns);
+
+    trad_frame_reset_saved_regs (gdbarch, cache.saved_regs);
+    CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader);
+
+    /* We should stop at the 4th instruction.  */
+    SELF_CHECK (end == (4 - 1) * 4);
+    SELF_CHECK (cache.framereg == AARCH64_FP_REGNUM);
+    SELF_CHECK (cache.framesize == 16);
+  }
+
+  /* Test handling of movz/stp when using the stack pointer as frame
+     pointer.  */
+  {
+    static const uint32_t insns[] = {
+      0xa9bc7bfd, /* stp     x29, x30, [sp, #-64]! */
+      0x52800020, /* mov     w0, #0x1 */
+      0x290207e0, /* stp     w0, w1, [sp, #16] */
+      0xa9018fe2, /* stp     x2, x3, [sp, #24] */
+      0x528000a2, /* mov     w2, #0x5 */
+      0x97fffff8, /* bl      6e4 */
+    };
+
+    instruction_reader_test reader (insns);
+
+    trad_frame_reset_saved_regs (gdbarch, cache.saved_regs);
+    CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader);
+
+    /* We should stop at the 5th instruction.  */
+    SELF_CHECK (end == (5 - 1) * 4);
+    SELF_CHECK (cache.framereg == AARCH64_SP_REGNUM);
+    SELF_CHECK (cache.framesize == 64);
+  }
+
+  /* Test handling of movz/str when using the stack pointer as frame
+     pointer  */
+  {
+    static const uint32_t insns[] = {
+      0xa9bc7bfd, /* stp     x29, x30, [sp, #-64]! */
+      0x52800020, /* mov     w0, #0x1 */
+      0xb9002be4, /* str     w4, [sp, #40] */
+      0xf9001be5, /* str     x5, [sp, #48] */
+      0x528000a2, /* mov     w2, #0x5 */
+      0x97fffff8, /* bl      6e4 */
+    };
+
+    instruction_reader_test reader (insns);
+
+    trad_frame_reset_saved_regs (gdbarch, cache.saved_regs);
+    CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader);
+
+    /* We should stop at the 5th instruction.  */
+    SELF_CHECK (end == (5 - 1) * 4);
+    SELF_CHECK (cache.framereg == AARCH64_SP_REGNUM);
+    SELF_CHECK (cache.framesize == 64);
+  }
+
+  /* Test handling of movz/stur when using the stack pointer as frame
+     pointer.  */
+  {
+    static const uint32_t insns[] = {
+      0xa9bc7bfd, /* stp     x29, x30, [sp, #-64]! */
+      0x52800020, /* mov     w0, #0x1 */
+      0xb80343e6, /* stur    w6, [sp, #52] */
+      0xf80383e7, /* stur    x7, [sp, #56] */
+      0x528000a2, /* mov     w2, #0x5 */
+      0x97fffff8, /* bl      6e4 */
+    };
+
+    instruction_reader_test reader (insns);
+
+    trad_frame_reset_saved_regs (gdbarch, cache.saved_regs);
+    CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader);
+
+    /* We should stop at the 5th instruction.  */
+    SELF_CHECK (end == (5 - 1) * 4);
+    SELF_CHECK (cache.framereg == AARCH64_SP_REGNUM);
+    SELF_CHECK (cache.framesize == 64);
+  }
+
+  /* Test handling of movz when there is no frame pointer set or no stack
+     pointer used.  */
+  {
+    static const uint32_t insns[] = {
+      0xa9bf7bfd, /* stp     x29, x30, [sp, #-16]! */
+      0x52800020, /* mov     w0, #0x1 */
+      0x528000a2, /* mov     w2, #0x5 */
+      0x97fffff8, /* bl      6e4 */
+    };
+
+    instruction_reader_test reader (insns);
+
+    trad_frame_reset_saved_regs (gdbarch, cache.saved_regs);
+    CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader);
+
+    /* We should stop at the 4th instruction.  */
+    SELF_CHECK (end == (4 - 1) * 4);
+    SELF_CHECK (cache.framereg == AARCH64_SP_REGNUM);
+    SELF_CHECK (cache.framesize == 16);
+  }
+
   /* Test a prologue in which there is a return address signing instruction.  */
   if (tdep->has_pauth ())
     {
@@ -713,20 +898,53 @@ aarch64_analyze_prologue_test (void)
       for (int i = 0; i < AARCH64_X_REGISTER_COUNT; i++)
 	{
 	  if (i == 19)
-	    SELF_CHECK (cache.saved_regs[i].addr == -20);
+	    SELF_CHECK (cache.saved_regs[i].addr () == -20);
 	  else if (i == AARCH64_FP_REGNUM)
-	    SELF_CHECK (cache.saved_regs[i].addr == -48);
+	    SELF_CHECK (cache.saved_regs[i].addr () == -48);
 	  else if (i == AARCH64_LR_REGNUM)
-	    SELF_CHECK (cache.saved_regs[i].addr == -40);
+	    SELF_CHECK (cache.saved_regs[i].addr () == -40);
 	  else
-	    SELF_CHECK (cache.saved_regs[i].addr == -1);
+	    SELF_CHECK (cache.saved_regs[i].is_realreg ()
+			&& cache.saved_regs[i].realreg () == i);
 	}
 
       if (tdep->has_pauth ())
 	{
-	  SELF_CHECK (trad_frame_value_p (cache.saved_regs,
-					  tdep->pauth_ra_state_regnum));
-	  SELF_CHECK (cache.saved_regs[tdep->pauth_ra_state_regnum].addr == 1);
+	  int regnum = tdep->ra_sign_state_regnum;
+	  SELF_CHECK (cache.saved_regs[regnum].is_value ());
+	}
+    }
+
+  /* Test a prologue with a BTI instruction.  */
+    {
+      static const uint32_t insns[] = {
+	0xd503245f, /* bti */
+	0xa9bd7bfd, /* stp	x29, x30, [sp, #-48]! */
+	0x910003fd, /* mov	x29, sp */
+	0xf801c3f3, /* str	x19, [sp, #28] */
+	0xb9401fa0, /* ldr	x19, [x29, #28] */
+      };
+      instruction_reader_test reader (insns);
+
+      trad_frame_reset_saved_regs (gdbarch, cache.saved_regs);
+      CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache,
+						reader);
+
+      SELF_CHECK (end == 4 * 4);
+      SELF_CHECK (cache.framereg == AARCH64_FP_REGNUM);
+      SELF_CHECK (cache.framesize == 48);
+
+      for (int i = 0; i < AARCH64_X_REGISTER_COUNT; i++)
+	{
+	  if (i == 19)
+	    SELF_CHECK (cache.saved_regs[i].addr () == -20);
+	  else if (i == AARCH64_FP_REGNUM)
+	    SELF_CHECK (cache.saved_regs[i].addr () == -48);
+	  else if (i == AARCH64_LR_REGNUM)
+	    SELF_CHECK (cache.saved_regs[i].addr () == -40);
+	  else
+	    SELF_CHECK (cache.saved_regs[i].is_realreg ()
+			&& cache.saved_regs[i].realreg () == i);
 	}
     }
 }
@@ -738,12 +956,15 @@ aarch64_analyze_prologue_test (void)
 static CORE_ADDR
 aarch64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  CORE_ADDR func_addr, limit_pc;
+  CORE_ADDR func_addr, func_end_addr, limit_pc;
 
   /* See if we can determine the end of the prologue via the symbol
      table.  If so, then return either PC, or the PC after the
      prologue, whichever is greater.  */
-  if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
+  bool func_addr_found
+    = find_pc_partial_function (pc, NULL, &func_addr, &func_end_addr);
+
+  if (func_addr_found)
     {
       CORE_ADDR post_prologue_pc
 	= skip_prologue_using_sal (gdbarch, func_addr);
@@ -763,6 +984,9 @@ aarch64_skip_prologue (struct gdbarch *g
   if (limit_pc == 0)
     limit_pc = pc + 128;	/* Magic.  */
 
+  limit_pc
+    = func_end_addr == 0 ? limit_pc : std::min (limit_pc, func_end_addr - 4);
+
   /* Try disassembling prologue.  */
   return aarch64_analyze_prologue (gdbarch, pc, limit_pc, NULL);
 }
@@ -771,7 +995,7 @@ aarch64_skip_prologue (struct gdbarch *g
    cache CACHE.  */
 
 static void
-aarch64_scan_prologue (struct frame_info *this_frame,
+aarch64_scan_prologue (frame_info_ptr this_frame,
 		       struct aarch64_prologue_cache *cache)
 {
   CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
@@ -815,8 +1039,8 @@ aarch64_scan_prologue (struct frame_info
 
       cache->framereg = AARCH64_FP_REGNUM;
       cache->framesize = 16;
-      cache->saved_regs[29].addr = 0;
-      cache->saved_regs[30].addr = 8;
+      cache->saved_regs[29].set_addr (0);
+      cache->saved_regs[30].set_addr (8);
     }
 }
 
@@ -825,7 +1049,7 @@ aarch64_scan_prologue (struct frame_info
    not available.  */
 
 static void
-aarch64_make_prologue_cache_1 (struct frame_info *this_frame,
+aarch64_make_prologue_cache_1 (frame_info_ptr this_frame,
 			       struct aarch64_prologue_cache *cache)
 {
   CORE_ADDR unwound_fp;
@@ -840,13 +1064,17 @@ aarch64_make_prologue_cache_1 (struct fr
   if (unwound_fp == 0)
     return;
 
-  cache->prev_sp = unwound_fp + cache->framesize;
+  cache->prev_sp = unwound_fp;
+  if (!aarch64_stack_frame_destroyed_p (get_frame_arch (this_frame),
+					cache->prev_pc))
+    cache->prev_sp += cache->framesize;
 
   /* Calculate actual addresses of saved registers using offsets
      determined by aarch64_analyze_prologue.  */
   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
-    if (trad_frame_addr_p (cache->saved_regs, reg))
-      cache->saved_regs[reg].addr += cache->prev_sp;
+    if (cache->saved_regs[reg].is_addr ())
+      cache->saved_regs[reg].set_addr (cache->saved_regs[reg].addr ()
+				       + cache->prev_sp);
 
   cache->func = get_frame_func (this_frame);
 
@@ -859,7 +1087,7 @@ aarch64_make_prologue_cache_1 (struct fr
    *THIS_CACHE.  */
 
 static struct aarch64_prologue_cache *
-aarch64_make_prologue_cache (struct frame_info *this_frame, void **this_cache)
+aarch64_make_prologue_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct aarch64_prologue_cache *cache;
 
@@ -886,7 +1114,7 @@ aarch64_make_prologue_cache (struct fram
 /* Implement the "stop_reason" frame_unwind method.  */
 
 static enum unwind_stop_reason
-aarch64_prologue_frame_unwind_stop_reason (struct frame_info *this_frame,
+aarch64_prologue_frame_unwind_stop_reason (frame_info_ptr this_frame,
 					   void **this_cache)
 {
   struct aarch64_prologue_cache *cache
@@ -896,7 +1124,9 @@ aarch64_prologue_frame_unwind_stop_reaso
     return UNWIND_UNAVAILABLE;
 
   /* Halt the backtrace at "_start".  */
-  if (cache->prev_pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
+  gdbarch *arch = get_frame_arch (this_frame);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (arch);
+  if (cache->prev_pc <= tdep->lowest_pc)
     return UNWIND_OUTERMOST;
 
   /* We've hit a wall, stop.  */
@@ -910,7 +1140,7 @@ aarch64_prologue_frame_unwind_stop_reaso
    PC and the caller's SP when we were called.  */
 
 static void
-aarch64_prologue_this_id (struct frame_info *this_frame,
+aarch64_prologue_this_id (frame_info_ptr this_frame,
 			  void **this_cache, struct frame_id *this_id)
 {
   struct aarch64_prologue_cache *cache
@@ -925,7 +1155,7 @@ aarch64_prologue_this_id (struct frame_i
 /* Implement the "prev_register" frame_unwind method.  */
 
 static struct value *
-aarch64_prologue_prev_register (struct frame_info *this_frame,
+aarch64_prologue_prev_register (frame_info_ptr this_frame,
 				void **this_cache, int prev_regnum)
 {
   struct aarch64_prologue_cache *cache
@@ -938,13 +1168,13 @@ aarch64_prologue_prev_register (struct f
     {
       CORE_ADDR lr;
       struct gdbarch *gdbarch = get_frame_arch (this_frame);
-      struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+      aarch64_gdbarch_tdep *tdep
+	= gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
       lr = frame_unwind_register_unsigned (this_frame, AARCH64_LR_REGNUM);
 
       if (tdep->has_pauth ()
-	  && trad_frame_value_p (cache->saved_regs,
-				 tdep->pauth_ra_state_regnum))
+	  && cache->saved_regs[tdep->ra_sign_state_regnum].is_value ())
 	lr = aarch64_frame_unmask_lr (tdep, this_frame, lr);
 
       return frame_unwind_got_constant (this_frame, prev_regnum, lr);
@@ -954,17 +1184,17 @@ aarch64_prologue_prev_register (struct f
      identified by the next frame's stack pointer at the time of the
      call.  The value was already reconstructed into PREV_SP.  */
   /*
-         +----------+  ^
-         | saved lr |  |
+	 +----------+  ^
+	 | saved lr |  |
       +->| saved fp |--+
       |  |          |
       |  |          |     <- Previous SP
       |  +----------+
       |  | saved lr |
       +--| saved fp |<- FP
-         |          |
-         |          |<- SP
-         +----------+  */
+	 |          |
+	 |          |<- SP
+	 +----------+  */
   if (prev_regnum == AARCH64_SP_REGNUM)
     return frame_unwind_got_constant (this_frame, prev_regnum,
 				      cache->prev_sp);
@@ -974,8 +1204,9 @@ aarch64_prologue_prev_register (struct f
 }
 
 /* AArch64 prologue unwinder.  */
-struct frame_unwind aarch64_prologue_unwind =
+static frame_unwind aarch64_prologue_unwind =
 {
+  "aarch64 prologue",
   NORMAL_FRAME,
   aarch64_prologue_frame_unwind_stop_reason,
   aarch64_prologue_this_id,
@@ -990,7 +1221,7 @@ struct frame_unwind aarch64_prologue_unw
    *THIS_CACHE.  */
 
 static struct aarch64_prologue_cache *
-aarch64_make_stub_cache (struct frame_info *this_frame, void **this_cache)
+aarch64_make_stub_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct aarch64_prologue_cache *cache;
 
@@ -1020,7 +1251,7 @@ aarch64_make_stub_cache (struct frame_in
 /* Implement the "stop_reason" frame_unwind method.  */
 
 static enum unwind_stop_reason
-aarch64_stub_frame_unwind_stop_reason (struct frame_info *this_frame,
+aarch64_stub_frame_unwind_stop_reason (frame_info_ptr this_frame,
 				       void **this_cache)
 {
   struct aarch64_prologue_cache *cache
@@ -1035,7 +1266,7 @@ aarch64_stub_frame_unwind_stop_reason (s
 /* Our frame ID for a stub frame is the current SP and LR.  */
 
 static void
-aarch64_stub_this_id (struct frame_info *this_frame,
+aarch64_stub_this_id (frame_info_ptr this_frame,
 		      void **this_cache, struct frame_id *this_id)
 {
   struct aarch64_prologue_cache *cache
@@ -1051,7 +1282,7 @@ aarch64_stub_this_id (struct frame_info
 
 static int
 aarch64_stub_unwind_sniffer (const struct frame_unwind *self,
-			     struct frame_info *this_frame,
+			     frame_info_ptr this_frame,
 			     void **this_prologue_cache)
 {
   CORE_ADDR addr_in_block;
@@ -1068,8 +1299,9 @@ aarch64_stub_unwind_sniffer (const struc
 }
 
 /* AArch64 stub unwinder.  */
-struct frame_unwind aarch64_stub_unwind =
+static frame_unwind aarch64_stub_unwind =
 {
+  "aarch64 stub",
   NORMAL_FRAME,
   aarch64_stub_frame_unwind_stop_reason,
   aarch64_stub_this_id,
@@ -1081,7 +1313,7 @@ struct frame_unwind aarch64_stub_unwind
 /* Return the frame base address of *THIS_FRAME.  */
 
 static CORE_ADDR
-aarch64_normal_frame_base (struct frame_info *this_frame, void **this_cache)
+aarch64_normal_frame_base (frame_info_ptr this_frame, void **this_cache)
 {
   struct aarch64_prologue_cache *cache
     = aarch64_make_prologue_cache (this_frame, this_cache);
@@ -1090,7 +1322,7 @@ aarch64_normal_frame_base (struct frame_
 }
 
 /* AArch64 default frame base information.  */
-struct frame_base aarch64_normal_base =
+static frame_base aarch64_normal_base =
 {
   &aarch64_prologue_unwind,
   aarch64_normal_frame_base,
@@ -1102,10 +1334,11 @@ struct frame_base aarch64_normal_base =
    *THIS_FRAME.  */
 
 static struct value *
-aarch64_dwarf2_prev_register (struct frame_info *this_frame,
+aarch64_dwarf2_prev_register (frame_info_ptr this_frame,
 			      void **this_cache, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
+  gdbarch *arch = get_frame_arch (this_frame);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (arch);
   CORE_ADDR lr;
 
   switch (regnum)
@@ -1116,8 +1349,7 @@ aarch64_dwarf2_prev_register (struct fra
       return frame_unwind_got_constant (this_frame, regnum, lr);
 
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("Unexpected register %d"), regnum);
+      internal_error (_("Unexpected register %d"), regnum);
     }
 }
 
@@ -1129,9 +1361,9 @@ static const unsigned char op_lit1 = DW_
 static void
 aarch64_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
 			       struct dwarf2_frame_state_reg *reg,
-			       struct frame_info *this_frame)
+			       frame_info_ptr this_frame)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   switch (regnum)
     {
@@ -1148,7 +1380,7 @@ aarch64_dwarf2_frame_init_reg (struct gd
   /* Init pauth registers.  */
   if (tdep->has_pauth ())
     {
-      if (regnum == tdep->pauth_ra_state_regnum)
+      if (regnum == tdep->ra_sign_state_regnum)
 	{
 	  /* Initialize RA_STATE to zero.  */
 	  reg->how = DWARF2_FRAME_REG_SAVED_VAL_EXP;
@@ -1156,8 +1388,8 @@ aarch64_dwarf2_frame_init_reg (struct gd
 	  reg->loc.exp.len = 1;
 	  return;
 	}
-      else if (regnum == AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base)
-	       || regnum == AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base))
+      else if (regnum >= tdep->pauth_reg_base
+	       && regnum < tdep->pauth_reg_base + tdep->pauth_reg_count)
 	{
 	  reg->how = DWARF2_FRAME_REG_SAME_VALUE;
 	  return;
@@ -1171,7 +1403,7 @@ static bool
 aarch64_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op,
 				     struct dwarf2_frame_state *fs)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
   struct dwarf2_frame_state_reg *ra_state;
 
   if (op == DW_CFA_AARCH64_negate_ra_state)
@@ -1181,10 +1413,10 @@ aarch64_execute_dwarf_cfa_vendor_op (str
 	return true;
 
       /* Allocate RA_STATE column if it's not allocated yet.  */
-      fs->regs.alloc_regs (AARCH64_DWARF_PAUTH_RA_STATE + 1);
+      fs->regs.alloc_regs (AARCH64_DWARF_RA_SIGN_STATE + 1);
 
       /* Toggle the status of RA_STATE between 0 and 1.  */
-      ra_state = &(fs->regs.reg[AARCH64_DWARF_PAUTH_RA_STATE]);
+      ra_state = &(fs->regs.reg[AARCH64_DWARF_RA_SIGN_STATE]);
       ra_state->how = DWARF2_FRAME_REG_SAVED_VAL_EXP;
 
       if (ra_state->loc.exp.start == nullptr
@@ -1201,6 +1433,39 @@ aarch64_execute_dwarf_cfa_vendor_op (str
   return false;
 }
 
+/* Used for matching BRK instructions for AArch64.  */
+static constexpr uint32_t BRK_INSN_MASK = 0xffe0001f;
+static constexpr uint32_t BRK_INSN_BASE = 0xd4200000;
+
+/* Implementation of gdbarch_program_breakpoint_here_p for aarch64.  */
+
+static bool
+aarch64_program_breakpoint_here_p (gdbarch *gdbarch, CORE_ADDR address)
+{
+  const uint32_t insn_len = 4;
+  gdb_byte target_mem[4];
+
+  /* Enable the automatic memory restoration from breakpoints while
+     we read the memory.  Otherwise we may find temporary breakpoints, ones
+     inserted by GDB, and flag them as permanent breakpoints.  */
+  scoped_restore restore_memory
+    = make_scoped_restore_show_memory_breakpoints (0);
+
+  if (target_read_memory (address, target_mem, insn_len) == 0)
+    {
+      uint32_t insn =
+	(uint32_t) extract_unsigned_integer (target_mem, insn_len,
+					     gdbarch_byte_order_for_code (gdbarch));
+
+      /* Check if INSN is a BRK instruction pattern.  There are multiple choices
+	 of such instructions with different immediate values.  Different OS'
+	 may use a different variation, but they have the same outcome.  */
+	return ((insn & BRK_INSN_MASK) == BRK_INSN_BASE);
+    }
+
+  return false;
+}
+
 /* When arguments must be pushed onto the stack, they go on in reverse
    order.  The code below implements a FILO (stack) to do this.  */
 
@@ -1221,14 +1486,14 @@ static ULONGEST
 aarch64_type_align (gdbarch *gdbarch, struct type *t)
 {
   t = check_typedef (t);
-  if (TYPE_CODE (t) == TYPE_CODE_ARRAY && TYPE_VECTOR (t))
+  if (t->code () == TYPE_CODE_ARRAY && t->is_vector ())
     {
       /* Use the natural alignment for vector types (the same for
 	 scalar type), but the maximum alignment is 128-bit.  */
-      if (TYPE_LENGTH (t) > 16)
+      if (t->length () > 16)
 	return 16;
       else
-	return TYPE_LENGTH (t);
+	return t->length ();
     }
 
   /* Allow the common code to calculate the alignment.  */
@@ -1250,30 +1515,31 @@ aapcs_is_vfp_call_or_return_candidate_1
   if (type == nullptr)
     return -1;
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_FLT:
-      if (TYPE_LENGTH (type) > 16)
+    case TYPE_CODE_DECFLOAT:
+      if (type->length () > 16)
 	return -1;
 
       if (*fundamental_type == nullptr)
 	*fundamental_type = type;
-      else if (TYPE_LENGTH (type) != TYPE_LENGTH (*fundamental_type)
-	       || TYPE_CODE (type) != TYPE_CODE (*fundamental_type))
+      else if (type->length () != (*fundamental_type)->length ()
+	       || type->code () != (*fundamental_type)->code ())
 	return -1;
 
       return 1;
 
     case TYPE_CODE_COMPLEX:
       {
-	struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type));
-	if (TYPE_LENGTH (target_type) > 16)
+	struct type *target_type = check_typedef (type->target_type ());
+	if (target_type->length () > 16)
 	  return -1;
 
 	if (*fundamental_type == nullptr)
 	  *fundamental_type = target_type;
-	else if (TYPE_LENGTH (target_type) != TYPE_LENGTH (*fundamental_type)
-		 || TYPE_CODE (target_type) != TYPE_CODE (*fundamental_type))
+	else if (target_type->length () != (*fundamental_type)->length ()
+		 || target_type->code () != (*fundamental_type)->code ())
 	  return -1;
 
 	return 2;
@@ -1281,29 +1547,29 @@ aapcs_is_vfp_call_or_return_candidate_1
 
     case TYPE_CODE_ARRAY:
       {
-	if (TYPE_VECTOR (type))
+	if (type->is_vector ())
 	  {
-	    if (TYPE_LENGTH (type) != 8 && TYPE_LENGTH (type) != 16)
+	    if (type->length () != 8 && type->length () != 16)
 	      return -1;
 
 	    if (*fundamental_type == nullptr)
 	      *fundamental_type = type;
-	    else if (TYPE_LENGTH (type) != TYPE_LENGTH (*fundamental_type)
-		     || TYPE_CODE (type) != TYPE_CODE (*fundamental_type))
+	    else if (type->length () != (*fundamental_type)->length ()
+		     || type->code () != (*fundamental_type)->code ())
 	      return -1;
 
 	    return 1;
 	  }
 	else
 	  {
-	    struct type *target_type = TYPE_TARGET_TYPE (type);
+	    struct type *target_type = type->target_type ();
 	    int count = aapcs_is_vfp_call_or_return_candidate_1
 			  (target_type, fundamental_type);
 
 	    if (count == -1)
 	      return count;
 
-	    count *= (TYPE_LENGTH (type) / TYPE_LENGTH (target_type));
+	    count *= (type->length () / target_type->length ());
 	      return count;
 	  }
       }
@@ -1313,13 +1579,13 @@ aapcs_is_vfp_call_or_return_candidate_1
       {
 	int count = 0;
 
-	for (int i = 0; i < TYPE_NFIELDS (type); i++)
+	for (int i = 0; i < type->num_fields (); i++)
 	  {
 	    /* Ignore any static fields.  */
-	    if (field_is_static (&TYPE_FIELD (type, i)))
+	    if (type->field (i).is_static ())
 	      continue;
 
-	    struct type *member = check_typedef (TYPE_FIELD_TYPE (type, i));
+	    struct type *member = check_typedef (type->field (i).type ());
 
 	    int sub_count = aapcs_is_vfp_call_or_return_candidate_1
 			      (member, fundamental_type);
@@ -1331,8 +1597,8 @@ aapcs_is_vfp_call_or_return_candidate_1
 	/* Ensure there is no padding between the fields (allowing for empty
 	   zero length structs)  */
 	int ftype_length = (*fundamental_type == nullptr)
-			   ? 0 : TYPE_LENGTH (*fundamental_type);
-	if (count * ftype_length != TYPE_LENGTH (type))
+			   ? 0 : (*fundamental_type)->length ();
+	if (count * ftype_length != type->length ())
 	  return -1;
 
 	return count;
@@ -1415,10 +1681,10 @@ pass_in_x (struct gdbarch *gdbarch, stru
 	   struct value *arg)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  int len = TYPE_LENGTH (type);
-  enum type_code typecode = TYPE_CODE (type);
+  int len = type->length ();
+  enum type_code typecode = type->code ();
   int regnum = AARCH64_X0_REGNUM + info->ngrn;
-  const bfd_byte *buf = value_contents (arg);
+  const bfd_byte *buf = arg->contents ().data ();
 
   info->argnum++;
 
@@ -1435,12 +1701,10 @@ pass_in_x (struct gdbarch *gdbarch, stru
 	  && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
 	regval <<= ((X_REGISTER_SIZE - partial_len) * TARGET_CHAR_BIT);
 
-      if (aarch64_debug)
-	{
-	  debug_printf ("arg %d in %s = 0x%s\n", info->argnum,
-			gdbarch_register_name (gdbarch, regnum),
-			phex (regval, X_REGISTER_SIZE));
-	}
+      aarch64_debug_printf ("arg %d in %s = 0x%s", info->argnum,
+			    gdbarch_register_name (gdbarch, regnum),
+			    phex (regval, X_REGISTER_SIZE));
+
       regcache_cooked_write_unsigned (regcache, regnum, regval);
       len -= partial_len;
       buf += partial_len;
@@ -1475,11 +1739,9 @@ pass_in_v (struct gdbarch *gdbarch,
       memcpy (reg, buf, len);
       regcache->cooked_write (regnum, reg);
 
-      if (aarch64_debug)
-	{
-	  debug_printf ("arg %d in %s\n", info->argnum,
-			gdbarch_register_name (gdbarch, regnum));
-	}
+      aarch64_debug_printf ("arg %d in %s", info->argnum,
+			    gdbarch_register_name (gdbarch, regnum));
+
       return 1;
     }
   info->nsrn = 8;
@@ -1492,8 +1754,8 @@ static void
 pass_on_stack (struct aarch64_call_info *info, struct type *type,
 	       struct value *arg)
 {
-  const bfd_byte *buf = value_contents (arg);
-  int len = TYPE_LENGTH (type);
+  const bfd_byte *buf = arg->contents ().data ();
+  int len = type->length ();
   int align;
   stack_item_t item;
 
@@ -1509,11 +1771,8 @@ pass_on_stack (struct aarch64_call_info
   if (align > 16)
     align = 16;
 
-  if (aarch64_debug)
-    {
-      debug_printf ("arg %d len=%d @ sp + %d\n", info->argnum, len,
-		    info->nsaa);
-    }
+  aarch64_debug_printf ("arg %d len=%d @ sp + %d\n", info->argnum, len,
+			info->nsaa);
 
   item.len = len;
   item.data = buf;
@@ -1542,7 +1801,7 @@ pass_in_x_or_stack (struct gdbarch *gdba
 		    struct aarch64_call_info *info, struct type *type,
 		    struct value *arg)
 {
-  int len = TYPE_LENGTH (type);
+  int len = type->length ();
   int nregs = (len + X_REGISTER_SIZE - 1) / X_REGISTER_SIZE;
 
   /* PCS C.13 - Pass in registers if we have enough spare */
@@ -1567,42 +1826,43 @@ pass_in_v_vfp_candidate (struct gdbarch
 			 struct aarch64_call_info *info, struct type *arg_type,
 			 struct value *arg)
 {
-  switch (TYPE_CODE (arg_type))
+  switch (arg_type->code ())
     {
     case TYPE_CODE_FLT:
-      return pass_in_v (gdbarch, regcache, info, TYPE_LENGTH (arg_type),
-			value_contents (arg));
+    case TYPE_CODE_DECFLOAT:
+      return pass_in_v (gdbarch, regcache, info, arg_type->length (),
+			arg->contents ().data ());
       break;
 
     case TYPE_CODE_COMPLEX:
       {
-	const bfd_byte *buf = value_contents (arg);
-	struct type *target_type = check_typedef (TYPE_TARGET_TYPE (arg_type));
+	const bfd_byte *buf = arg->contents ().data ();
+	struct type *target_type = check_typedef (arg_type->target_type ());
 
-	if (!pass_in_v (gdbarch, regcache, info, TYPE_LENGTH (target_type),
+	if (!pass_in_v (gdbarch, regcache, info, target_type->length (),
 			buf))
 	  return false;
 
-	return pass_in_v (gdbarch, regcache, info, TYPE_LENGTH (target_type),
-			  buf + TYPE_LENGTH (target_type));
+	return pass_in_v (gdbarch, regcache, info, target_type->length (),
+			  buf + target_type->length ());
       }
 
     case TYPE_CODE_ARRAY:
-      if (TYPE_VECTOR (arg_type))
-	return pass_in_v (gdbarch, regcache, info, TYPE_LENGTH (arg_type),
-			  value_contents (arg));
-      /* fall through.  */
+      if (arg_type->is_vector ())
+	return pass_in_v (gdbarch, regcache, info, arg_type->length (),
+			  arg->contents ().data ());
+      [[fallthrough]];
 
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
-      for (int i = 0; i < TYPE_NFIELDS (arg_type); i++)
+      for (int i = 0; i < arg_type->num_fields (); i++)
 	{
 	  /* Don't include static fields.  */
-	  if (field_is_static (&TYPE_FIELD (arg_type, i)))
+	  if (arg_type->field (i).is_static ())
 	    continue;
 
-	  struct value *field = value_primitive_field (arg, 0, i, arg_type);
-	  struct type *field_type = check_typedef (value_type (field));
+	  struct value *field = arg->primitive_field (0, i, arg_type);
+	  struct type *field_type = check_typedef (field->type ());
 
 	  if (!pass_in_v_vfp_candidate (gdbarch, regcache, info, field_type,
 					field))
@@ -1662,13 +1922,11 @@ aarch64_push_dummy_call (struct gdbarch
   /* The struct_return pointer occupies X8.  */
   if (return_method != return_method_normal)
     {
-      if (aarch64_debug)
-	{
-	  debug_printf ("struct return in %s = 0x%s\n",
-			gdbarch_register_name (gdbarch,
-					       AARCH64_STRUCT_RETURN_REGNUM),
-			paddress (gdbarch, struct_addr));
-	}
+      aarch64_debug_printf ("struct return in %s = 0x%s",
+			    gdbarch_register_name
+			      (gdbarch, AARCH64_STRUCT_RETURN_REGNUM),
+			    paddress (gdbarch, struct_addr));
+
       regcache_cooked_write_unsigned (regcache, AARCH64_STRUCT_RETURN_REGNUM,
 				      struct_addr);
     }
@@ -1679,8 +1937,8 @@ aarch64_push_dummy_call (struct gdbarch
       struct type *arg_type, *fundamental_type;
       int len, elements;
 
-      arg_type = check_typedef (value_type (arg));
-      len = TYPE_LENGTH (arg_type);
+      arg_type = check_typedef (arg->type ());
+      len = arg_type->length ();
 
       /* If arg can be passed in v registers as per the AAPCS64, then do so if
 	 if there are enough spare registers.  */
@@ -1703,17 +1961,17 @@ aarch64_push_dummy_call (struct gdbarch
 	  continue;
 	}
 
-      switch (TYPE_CODE (arg_type))
+      switch (arg_type->code ())
 	{
 	case TYPE_CODE_INT:
 	case TYPE_CODE_BOOL:
 	case TYPE_CODE_CHAR:
 	case TYPE_CODE_RANGE:
 	case TYPE_CODE_ENUM:
-	  if (len < 4)
+	  if (len < 4 && !is_fixed_point_type (arg_type))
 	    {
 	      /* Promote to 32 bit integer.  */
-	      if (TYPE_UNSIGNED (arg_type))
+	      if (arg_type->is_unsigned ())
 		arg_type = builtin_type (gdbarch)->builtin_uint32;
 	      else
 		arg_type = builtin_type (gdbarch)->builtin_int32;
@@ -1734,7 +1992,7 @@ aarch64_push_dummy_call (struct gdbarch
 	      sp = align_down (sp - len, 16);
 
 	      /* Write the real data into the stack.  */
-	      write_memory (sp, value_contents (arg), len);
+	      write_memory (sp, arg->contents ().data (), len);
 
 	      /* Construct the indirection.  */
 	      arg_type = lookup_pointer_type (arg_type);
@@ -1786,7 +2044,7 @@ aarch64_frame_align (struct gdbarch *gdb
 static struct type *
 aarch64_vnq_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   if (tdep->vnq_type == NULL)
     {
@@ -1813,7 +2071,7 @@ aarch64_vnq_type (struct gdbarch *gdbarc
 static struct type *
 aarch64_vnd_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   if (tdep->vnd_type == NULL)
     {
@@ -1843,7 +2101,7 @@ aarch64_vnd_type (struct gdbarch *gdbarc
 static struct type *
 aarch64_vns_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   if (tdep->vns_type == NULL)
     {
@@ -1873,7 +2131,7 @@ aarch64_vns_type (struct gdbarch *gdbarc
 static struct type *
 aarch64_vnh_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   if (tdep->vnh_type == NULL)
     {
@@ -1883,6 +2141,9 @@ aarch64_vnh_type (struct gdbarch *gdbarc
       t = arch_composite_type (gdbarch, "__gdb_builtin_type_vnh",
 			       TYPE_CODE_UNION);
 
+      elem = builtin_type (gdbarch)->builtin_bfloat16;
+      append_composite_type_field (t, "bf", elem);
+
       elem = builtin_type (gdbarch)->builtin_half;
       append_composite_type_field (t, "f", elem);
 
@@ -1903,7 +2164,7 @@ aarch64_vnh_type (struct gdbarch *gdbarc
 static struct type *
 aarch64_vnb_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   if (tdep->vnb_type == NULL)
     {
@@ -1925,16 +2186,224 @@ aarch64_vnb_type (struct gdbarch *gdbarc
   return tdep->vnb_type;
 }
 
+/* Return TRUE if REGNUM is a ZA tile slice pseudo-register number.  Return
+   FALSE otherwise.  */
+
+static bool
+is_sme_tile_slice_pseudo_register (struct gdbarch *gdbarch, int regnum)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  gdb_assert (tdep->has_sme ());
+  gdb_assert (tdep->sme_svq > 0);
+  gdb_assert (tdep->sme_pseudo_base <= regnum);
+  gdb_assert (regnum < tdep->sme_pseudo_base + tdep->sme_pseudo_count);
+
+  if (tdep->sme_tile_slice_pseudo_base <= regnum
+      && regnum < tdep->sme_tile_slice_pseudo_base
+		  + tdep->sme_tile_slice_pseudo_count)
+    return true;
+
+  return false;
+}
+
+/* Given REGNUM, a ZA pseudo-register number, return, in ENCODING, the
+   decoded fields that make up its name.  */
+
+static void
+aarch64_za_decode_pseudos (struct gdbarch *gdbarch, int regnum,
+			   struct za_pseudo_encoding &encoding)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  gdb_assert (tdep->has_sme ());
+  gdb_assert (tdep->sme_svq > 0);
+  gdb_assert (tdep->sme_pseudo_base <= regnum);
+  gdb_assert (regnum < tdep->sme_pseudo_base + tdep->sme_pseudo_count);
+
+  if (is_sme_tile_slice_pseudo_register (gdbarch, regnum))
+    {
+      /* Calculate the tile slice pseudo-register offset relative to the other
+	 tile slice pseudo-registers.  */
+      int offset = regnum - tdep->sme_tile_slice_pseudo_base;
+
+      /* Fetch the qualifier.  We can have 160 to 2560 possible tile slice
+	 pseudo-registers.  Each qualifier (we have 5 of them: B, H, S, D
+	 and Q) covers 32 * svq pseudo-registers, so we divide the offset by
+	 that constant.  */
+      size_t qualifier = offset / (tdep->sme_svq * 32);
+      encoding.qualifier_index = qualifier;
+
+      /* Prepare to fetch the direction (d), tile number (t) and slice
+	 number (s).  */
+      int dts = offset % (tdep->sme_svq * 32);
+
+      /* The direction is represented by the even/odd numbers.  Even-numbered
+	 pseudo-registers are horizontal tile slices and odd-numbered
+	 pseudo-registers are vertical tile slices.  */
+      encoding.horizontal = !(dts & 1);
+
+      /* Fetch the tile number.  The tile number is closely related to the
+	 qualifier.  B has 1 tile, H has 2 tiles, S has 4 tiles, D has 8 tiles
+	 and Q has 16 tiles.  */
+      encoding.tile_index = (dts >> 1) & ((1 << qualifier) - 1);
+
+      /* Fetch the slice number.  The slice number is closely related to the
+	 qualifier and the svl.  */
+      encoding.slice_index = dts >> (qualifier + 1);
+    }
+  else
+    {
+      /* Calculate the tile pseudo-register offset relative to the other
+	 tile pseudo-registers.  */
+      int offset = regnum - tdep->sme_tile_pseudo_base;
+
+      encoding.qualifier_index = std::floor (std::log2 (offset + 1));
+      /* Calculate the tile number.  */
+      encoding.tile_index = (offset + 1) - (1 << encoding.qualifier_index);
+      /* Direction and slice index don't get used for tiles.  Set them to
+	 0/false values.  */
+      encoding.slice_index = 0;
+      encoding.horizontal = false;
+    }
+}
+
+/* Return the type for a ZA tile slice pseudo-register based on ENCODING.  */
+
+static struct type *
+aarch64_za_tile_slice_type (struct gdbarch *gdbarch,
+			    const struct za_pseudo_encoding &encoding)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  gdb_assert (tdep->has_sme ());
+  gdb_assert (tdep->sme_svq > 0);
+
+  if (tdep->sme_tile_slice_type_q == nullptr)
+    {
+      /* Q tile slice type.  */
+      tdep->sme_tile_slice_type_q
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint128,
+			    tdep->sme_svq);
+      /* D tile slice type.  */
+      tdep->sme_tile_slice_type_d
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint64,
+			    tdep->sme_svq * 2);
+      /* S tile slice type.  */
+      tdep->sme_tile_slice_type_s
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint32,
+			    tdep->sme_svq * 4);
+      /* H tile slice type.  */
+      tdep->sme_tile_slice_type_h
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint16,
+			    tdep->sme_svq * 8);
+      /* B tile slice type.  */
+      tdep->sme_tile_slice_type_b
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint8,
+			    tdep->sme_svq * 16);
+  }
+
+  switch (encoding.qualifier_index)
+    {
+      case 4:
+	return tdep->sme_tile_slice_type_q;
+      case 3:
+	return tdep->sme_tile_slice_type_d;
+      case 2:
+	return tdep->sme_tile_slice_type_s;
+      case 1:
+	return tdep->sme_tile_slice_type_h;
+      case 0:
+	return tdep->sme_tile_slice_type_b;
+      default:
+	error (_("Invalid qualifier index %s for tile slice pseudo register."),
+	       pulongest (encoding.qualifier_index));
+    }
+
+  gdb_assert_not_reached ("Unknown qualifier for ZA tile slice register");
+}
+
+/* Return the type for a ZA tile pseudo-register based on ENCODING.  */
+
+static struct type *
+aarch64_za_tile_type (struct gdbarch *gdbarch,
+		      const struct za_pseudo_encoding &encoding)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  gdb_assert (tdep->has_sme ());
+  gdb_assert (tdep->sme_svq > 0);
+
+  if (tdep->sme_tile_type_q == nullptr)
+    {
+      struct type *inner_vectors_type;
+
+      /* Q tile type.  */
+      inner_vectors_type
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint128,
+			    tdep->sme_svq);
+      tdep->sme_tile_type_q
+	= init_vector_type (inner_vectors_type, tdep->sme_svq);
+
+      /* D tile type.  */
+      inner_vectors_type
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint64,
+			    tdep->sme_svq * 2);
+      tdep->sme_tile_type_d
+	= init_vector_type (inner_vectors_type, tdep->sme_svq * 2);
+
+      /* S tile type.  */
+      inner_vectors_type
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint32,
+			    tdep->sme_svq * 4);
+      tdep->sme_tile_type_s
+	= init_vector_type (inner_vectors_type, tdep->sme_svq * 4);
+
+      /* H tile type.  */
+      inner_vectors_type
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint16,
+			    tdep->sme_svq * 8);
+      tdep->sme_tile_type_h
+	= init_vector_type (inner_vectors_type, tdep->sme_svq * 8);
+
+      /* B tile type.  */
+      inner_vectors_type
+	= init_vector_type (builtin_type (gdbarch)->builtin_uint8,
+			    tdep->sme_svq * 16);
+      tdep->sme_tile_type_b
+	= init_vector_type (inner_vectors_type, tdep->sme_svq * 16);
+  }
+
+  switch (encoding.qualifier_index)
+    {
+      case 4:
+	return tdep->sme_tile_type_q;
+      case 3:
+	return tdep->sme_tile_type_d;
+      case 2:
+	return tdep->sme_tile_type_s;
+      case 1:
+	return tdep->sme_tile_type_h;
+      case 0:
+	return tdep->sme_tile_type_b;
+      default:
+	error (_("Invalid qualifier index %s for ZA tile pseudo register."),
+	       pulongest (encoding.qualifier_index));
+    }
+
+  gdb_assert_not_reached ("unknown qualifier for tile pseudo-register");
+}
+
 /* Return the type for an AdvSISD V register.  */
 
 static struct type *
 aarch64_vnv_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   if (tdep->vnv_type == NULL)
     {
-      /* The other AArch64 psuedo registers (Q,D,H,S,B) refer to a single value
+      /* The other AArch64 pseudo registers (Q,D,H,S,B) refer to a single value
 	 slice from the non-pseudo vector registers.  However NEON V registers
 	 are always vector registers, and need constructing as such.  */
       const struct builtin_type *bt = builtin_type (gdbarch);
@@ -1964,6 +2433,8 @@ aarch64_vnv_type (struct gdbarch *gdbarc
 
       sub = arch_composite_type (gdbarch, "__gdb_builtin_type_vnh",
 				 TYPE_CODE_UNION);
+      append_composite_type_field (sub, "bf",
+				   init_vector_type (bt->builtin_bfloat16, 8));
       append_composite_type_field (sub, "f",
 				   init_vector_type (bt->builtin_half, 8));
       append_composite_type_field (sub, "u",
@@ -1999,7 +2470,7 @@ aarch64_vnv_type (struct gdbarch *gdbarc
 static int
 aarch64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   if (reg >= AARCH64_DWARF_X0 && reg <= AARCH64_DWARF_X0 + 30)
     return AARCH64_X0_REGNUM + reg - AARCH64_DWARF_X0;
@@ -2007,6 +2478,9 @@ aarch64_dwarf_reg_to_regnum (struct gdba
   if (reg == AARCH64_DWARF_SP)
     return AARCH64_SP_REGNUM;
 
+  if (reg == AARCH64_DWARF_PC)
+    return AARCH64_PC_REGNUM;
+
   if (reg >= AARCH64_DWARF_V0 && reg <= AARCH64_DWARF_V0 + 31)
     return AARCH64_V0_REGNUM + reg - AARCH64_DWARF_V0;
 
@@ -2024,11 +2498,8 @@ aarch64_dwarf_reg_to_regnum (struct gdba
 
   if (tdep->has_pauth ())
     {
-      if (reg >= AARCH64_DWARF_PAUTH_DMASK && reg <= AARCH64_DWARF_PAUTH_CMASK)
-	return tdep->pauth_reg_base + reg - AARCH64_DWARF_PAUTH_DMASK;
-
-      if (reg == AARCH64_DWARF_PAUTH_RA_STATE)
-	return tdep->pauth_ra_state_regnum;
+      if (reg == AARCH64_DWARF_RA_SIGN_STATE)
+	return tdep->ra_sign_state_regnum;
     }
 
   return -1;
@@ -2066,7 +2537,7 @@ aarch64_extract_return_value (struct typ
   if (aapcs_is_vfp_call_or_return_candidate (type, &elements,
 					     &fundamental_type))
     {
-      int len = TYPE_LENGTH (fundamental_type);
+      int len = fundamental_type->length ();
 
       for (int i = 0; i < elements; i++)
 	{
@@ -2075,29 +2546,27 @@ aarch64_extract_return_value (struct typ
 	  gdb_byte buf[register_size (gdbarch, regno)];
 	  gdb_assert (len <= sizeof (buf));
 
-	  if (aarch64_debug)
-	    {
-	      debug_printf ("read HFA or HVA return value element %d from %s\n",
-			    i + 1,
-			    gdbarch_register_name (gdbarch, regno));
-	    }
+	  aarch64_debug_printf
+	    ("read HFA or HVA return value element %d from %s",
+	     i + 1, gdbarch_register_name (gdbarch, regno));
+
 	  regs->cooked_read (regno, buf);
 
 	  memcpy (valbuf, buf, len);
 	  valbuf += len;
 	}
     }
-  else if (TYPE_CODE (type) == TYPE_CODE_INT
-	   || TYPE_CODE (type) == TYPE_CODE_CHAR
-	   || TYPE_CODE (type) == TYPE_CODE_BOOL
-	   || TYPE_CODE (type) == TYPE_CODE_PTR
+  else if (type->code () == TYPE_CODE_INT
+	   || type->code () == TYPE_CODE_CHAR
+	   || type->code () == TYPE_CODE_BOOL
+	   || type->code () == TYPE_CODE_PTR
 	   || TYPE_IS_REFERENCE (type)
-	   || TYPE_CODE (type) == TYPE_CODE_ENUM)
+	   || type->code () == TYPE_CODE_ENUM)
     {
       /* If the type is a plain integer, then the access is
 	 straight-forward.  Otherwise we have to play around a bit
 	 more.  */
-      int len = TYPE_LENGTH (type);
+      int len = type->length ();
       int regno = AARCH64_X0_REGNUM;
       ULONGEST tmp;
 
@@ -2116,9 +2585,9 @@ aarch64_extract_return_value (struct typ
   else
     {
       /* For a structure or union the behaviour is as if the value had
-         been stored to word-aligned memory and then loaded into
-         registers with 64-bit load instruction(s).  */
-      int len = TYPE_LENGTH (type);
+	 been stored to word-aligned memory and then loaded into
+	 registers with 64-bit load instruction(s).  */
+      int len = type->length ();
       int regno = AARCH64_X0_REGNUM;
       bfd_byte buf[X_REGISTER_SIZE];
 
@@ -2144,6 +2613,9 @@ aarch64_return_in_memory (struct gdbarch
   int elements;
   struct type *fundamental_type;
 
+  if (TYPE_HAS_DYNAMIC_LENGTH (type))
+    return 1;
+
   if (aapcs_is_vfp_call_or_return_candidate (type, &elements,
 					     &fundamental_type))
     {
@@ -2152,10 +2624,11 @@ aarch64_return_in_memory (struct gdbarch
       return 0;
     }
 
-  if (TYPE_LENGTH (type) > 16)
+  if (type->length () > 16
+      || !language_pass_by_reference (type).trivially_copyable)
     {
       /* PCS B.6 Aggregates larger than 16 bytes are passed by
-         invisible reference.  */
+	 invisible reference.  */
 
       return 1;
     }
@@ -2178,7 +2651,7 @@ aarch64_store_return_value (struct type
   if (aapcs_is_vfp_call_or_return_candidate (type, &elements,
 					     &fundamental_type))
     {
-      int len = TYPE_LENGTH (fundamental_type);
+      int len = fundamental_type->length ();
 
       for (int i = 0; i < elements; i++)
 	{
@@ -2187,27 +2660,29 @@ aarch64_store_return_value (struct type
 	  gdb_byte tmpbuf[register_size (gdbarch, regno)];
 	  gdb_assert (len <= sizeof (tmpbuf));
 
-	  if (aarch64_debug)
-	    {
-	      debug_printf ("write HFA or HVA return value element %d to %s\n",
-			    i + 1,
-			    gdbarch_register_name (gdbarch, regno));
-	    }
-
+	  aarch64_debug_printf
+	    ("write HFA or HVA return value element %d to %s",
+	     i + 1, gdbarch_register_name (gdbarch, regno));
+
+	  /* Depending on whether the target supports SVE or not, the V
+	     registers may report a size > 16 bytes.  In that case, read the
+	     original contents of the register before overriding it with a new
+	     value that has a potential size <= 16 bytes.  */
+	  regs->cooked_read (regno, tmpbuf);
 	  memcpy (tmpbuf, valbuf,
 		  len > V_REGISTER_SIZE ? V_REGISTER_SIZE : len);
 	  regs->cooked_write (regno, tmpbuf);
 	  valbuf += len;
 	}
     }
-  else if (TYPE_CODE (type) == TYPE_CODE_INT
-	   || TYPE_CODE (type) == TYPE_CODE_CHAR
-	   || TYPE_CODE (type) == TYPE_CODE_BOOL
-	   || TYPE_CODE (type) == TYPE_CODE_PTR
+  else if (type->code () == TYPE_CODE_INT
+	   || type->code () == TYPE_CODE_CHAR
+	   || type->code () == TYPE_CODE_BOOL
+	   || type->code () == TYPE_CODE_PTR
 	   || TYPE_IS_REFERENCE (type)
-	   || TYPE_CODE (type) == TYPE_CODE_ENUM)
+	   || type->code () == TYPE_CODE_ENUM)
     {
-      if (TYPE_LENGTH (type) <= X_REGISTER_SIZE)
+      if (type->length () <= X_REGISTER_SIZE)
 	{
 	  /* Values of one word or less are zero/sign-extended and
 	     returned in r0.  */
@@ -2222,7 +2697,7 @@ aarch64_store_return_value (struct type
 	  /* Integral values greater than one word are stored in
 	     consecutive registers starting with r0.  This will always
 	     be a multiple of the regiser size.  */
-	  int len = TYPE_LENGTH (type);
+	  int len = type->length ();
 	  int regno = AARCH64_X0_REGNUM;
 
 	  while (len > 0)
@@ -2238,7 +2713,7 @@ aarch64_store_return_value (struct type
       /* For a structure or union the behaviour is as if the value had
 	 been stored to word-aligned memory and then loaded into
 	 registers with 64-bit load instruction(s).  */
-      int len = TYPE_LENGTH (type);
+      int len = type->length ();
       int regno = AARCH64_X0_REGNUM;
       bfd_byte tmpbuf[X_REGISTER_SIZE];
 
@@ -2258,29 +2733,46 @@ aarch64_store_return_value (struct type
 static enum return_value_convention
 aarch64_return_value (struct gdbarch *gdbarch, struct value *func_value,
 		      struct type *valtype, struct regcache *regcache,
-		      gdb_byte *readbuf, const gdb_byte *writebuf)
+		      struct value **read_value, const gdb_byte *writebuf)
 {
-
-  if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
-      || TYPE_CODE (valtype) == TYPE_CODE_UNION
-      || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
+  if (valtype->code () == TYPE_CODE_STRUCT
+      || valtype->code () == TYPE_CODE_UNION
+      || valtype->code () == TYPE_CODE_ARRAY)
     {
       if (aarch64_return_in_memory (gdbarch, valtype))
 	{
-	  if (aarch64_debug)
-	    debug_printf ("return value in memory\n");
-	  return RETURN_VALUE_STRUCT_CONVENTION;
+	  /* From the AAPCS64's Result Return section:
+
+	     "Otherwise, the caller shall reserve a block of memory of
+	      sufficient size and alignment to hold the result.  The address
+	      of the memory block shall be passed as an additional argument to
+	      the function in x8.  */
+
+	  aarch64_debug_printf ("return value in memory");
+
+	  if (read_value != nullptr)
+	    {
+	      CORE_ADDR addr;
+
+	      regcache->cooked_read (AARCH64_STRUCT_RETURN_REGNUM, &addr);
+	      *read_value = value_at_non_lval (valtype, addr);
+	    }
+
+	  return RETURN_VALUE_ABI_RETURNS_ADDRESS;
 	}
     }
 
   if (writebuf)
     aarch64_store_return_value (valtype, regcache, writebuf);
 
-  if (readbuf)
-    aarch64_extract_return_value (valtype, regcache, readbuf);
+  if (read_value)
+    {
+      *read_value = value::allocate (valtype);
+      aarch64_extract_return_value (valtype, regcache,
+				    (*read_value)->contents_raw ().data ());
+    }
 
-  if (aarch64_debug)
-    debug_printf ("return value in registers\n");
+  aarch64_debug_printf ("return value in registers");
 
   return RETURN_VALUE_REGISTER_CONVENTION;
 }
@@ -2288,12 +2780,12 @@ aarch64_return_value (struct gdbarch *gd
 /* Implement the "get_longjmp_target" gdbarch method.  */
 
 static int
-aarch64_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+aarch64_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
   CORE_ADDR jb_addr;
   gdb_byte buf[X_REGISTER_SIZE];
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
 
   jb_addr = get_frame_register_unsigned (frame, AARCH64_X0_REGNUM);
@@ -2319,12 +2811,107 @@ aarch64_gen_return_address (struct gdbar
 }
 
 
+/* Return TRUE if REGNUM is a W pseudo-register number.  Return FALSE
+   otherwise.  */
+
+static bool
+is_w_pseudo_register (struct gdbarch *gdbarch, int regnum)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  if (tdep->w_pseudo_base <= regnum
+      && regnum < tdep->w_pseudo_base + tdep->w_pseudo_count)
+    return true;
+
+  return false;
+}
+
+/* Return TRUE if REGNUM is a SME pseudo-register number.  Return FALSE
+   otherwise.  */
+
+static bool
+is_sme_pseudo_register (struct gdbarch *gdbarch, int regnum)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  if (tdep->has_sme () && tdep->sme_pseudo_base <= regnum
+      && regnum < tdep->sme_pseudo_base + tdep->sme_pseudo_count)
+    return true;
+
+  return false;
+}
+
+/* Convert ENCODING into a ZA tile slice name.  */
+
+static const std::string
+aarch64_za_tile_slice_name (const struct za_pseudo_encoding &encoding)
+{
+  gdb_assert (encoding.qualifier_index >= 0);
+  gdb_assert (encoding.qualifier_index <= 4);
+  gdb_assert (encoding.tile_index >= 0);
+  gdb_assert (encoding.tile_index <= 15);
+  gdb_assert (encoding.slice_index >= 0);
+  gdb_assert (encoding.slice_index <= 255);
+
+  const char orientation = encoding.horizontal ? 'h' : 'v';
+
+  const char qualifiers[6] = "bhsdq";
+  const char qualifier = qualifiers [encoding.qualifier_index];
+  return string_printf ("za%d%c%c%d", encoding.tile_index, orientation,
+			qualifier, encoding.slice_index);
+}
+
+/* Convert ENCODING into a ZA tile name.  */
+
+static const std::string
+aarch64_za_tile_name (const struct za_pseudo_encoding &encoding)
+{
+  /* Tiles don't use the slice number and the direction fields.  */
+  gdb_assert (encoding.qualifier_index >= 0);
+  gdb_assert (encoding.qualifier_index <= 4);
+  gdb_assert (encoding.tile_index >= 0);
+  gdb_assert (encoding.tile_index <= 15);
+
+  const char qualifiers[6] = "bhsdq";
+  const char qualifier = qualifiers [encoding.qualifier_index];
+  return (string_printf ("za%d%c", encoding.tile_index, qualifier));
+}
+
+/* Given a SME pseudo-register REGNUM, return its type.  */
+
+static struct type *
+aarch64_sme_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
+{
+  struct za_pseudo_encoding encoding;
+
+  /* Decode the SME pseudo-register number.  */
+  aarch64_za_decode_pseudos (gdbarch, regnum, encoding);
+
+  if (is_sme_tile_slice_pseudo_register (gdbarch, regnum))
+    return aarch64_za_tile_slice_type (gdbarch, encoding);
+  else
+    return aarch64_za_tile_type (gdbarch, encoding);
+}
+
 /* Return the pseudo register name corresponding to register regnum.  */
 
 static const char *
 aarch64_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  /* W pseudo-registers.  Bottom halves of the X registers.  */
+  static const char *const w_name[] =
+    {
+      "w0", "w1", "w2", "w3",
+      "w4", "w5", "w6", "w7",
+      "w8", "w9", "w10", "w11",
+      "w12", "w13", "w14", "w15",
+      "w16", "w17", "w18", "w19",
+      "w20", "w21", "w22", "w23",
+      "w24", "w25", "w26", "w27",
+      "w28", "w29", "w30",
+    };
 
   static const char *const q_name[] =
     {
@@ -2403,6 +2990,10 @@ aarch64_pseudo_register_name (struct gdb
   if (p_regnum >= AARCH64_B0_REGNUM && p_regnum < AARCH64_B0_REGNUM + 32)
     return b_name[p_regnum - AARCH64_B0_REGNUM];
 
+  /* W pseudo-registers? */
+  if (is_w_pseudo_register (gdbarch, regnum))
+    return w_name[regnum - tdep->w_pseudo_base];
+
   if (tdep->has_sve ())
     {
       static const char *const sve_v_name[] =
@@ -2422,14 +3013,16 @@ aarch64_pseudo_register_name (struct gdb
 	return sve_v_name[p_regnum - AARCH64_SVE_V0_REGNUM];
     }
 
+  if (is_sme_pseudo_register (gdbarch, regnum))
+    return tdep->sme_pseudo_names[regnum - tdep->sme_pseudo_base].c_str ();
+
   /* RA_STATE is used for unwinding only.  Do not assign it a name - this
      prevents it from being read by methods such as
      mi_cmd_trace_frame_collected.  */
-  if (tdep->has_pauth () && regnum == tdep->pauth_ra_state_regnum)
+  if (tdep->has_pauth () && regnum == tdep->ra_sign_state_regnum)
     return "";
 
-  internal_error (__FILE__, __LINE__,
-		  _("aarch64_pseudo_register_name: bad register number %d"),
+  internal_error (_("aarch64_pseudo_register_name: bad register number %d"),
 		  p_regnum);
 }
 
@@ -2438,7 +3031,7 @@ aarch64_pseudo_register_name (struct gdb
 static struct type *
 aarch64_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   int p_regnum = regnum - gdbarch_num_regs (gdbarch);
 
@@ -2461,11 +3054,17 @@ aarch64_pseudo_register_type (struct gdb
       && p_regnum < AARCH64_SVE_V0_REGNUM + AARCH64_V_REGS_NUM)
     return aarch64_vnv_type (gdbarch);
 
-  if (tdep->has_pauth () && regnum == tdep->pauth_ra_state_regnum)
+  /* W pseudo-registers are 32-bit.  */
+  if (is_w_pseudo_register (gdbarch, regnum))
+    return builtin_type (gdbarch)->builtin_uint32;
+
+  if (is_sme_pseudo_register (gdbarch, regnum))
+    return aarch64_sme_pseudo_register_type (gdbarch, regnum);
+
+  if (tdep->has_pauth () && regnum == tdep->ra_sign_state_regnum)
     return builtin_type (gdbarch)->builtin_uint64;
 
-  internal_error (__FILE__, __LINE__,
-		  _("aarch64_pseudo_register_type: bad register number %d"),
+  internal_error (_("aarch64_pseudo_register_type: bad register number %d"),
 		  p_regnum);
 }
 
@@ -2473,9 +3072,9 @@ aarch64_pseudo_register_type (struct gdb
 
 static int
 aarch64_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
-				    struct reggroup *group)
+				    const struct reggroup *group)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   int p_regnum = regnum - gdbarch_num_regs (gdbarch);
 
@@ -2494,8 +3093,10 @@ aarch64_pseudo_register_reggroup_p (stru
   else if (tdep->has_sve () && p_regnum >= AARCH64_SVE_V0_REGNUM
 	   && p_regnum < AARCH64_SVE_V0_REGNUM + AARCH64_V_REGS_NUM)
     return group == all_reggroup || group == vector_reggroup;
+  else if (is_sme_pseudo_register (gdbarch, regnum))
+    return group == all_reggroup || group == vector_reggroup;
   /* RA_STATE is used for unwinding only.  Do not assign it to any groups.  */
-  if (tdep->has_pauth () && regnum == tdep->pauth_ra_state_regnum)
+  if (tdep->has_pauth () && regnum == tdep->ra_sign_state_regnum)
     return 0;
 
   return group == all_reggroup;
@@ -2503,70 +3104,191 @@ aarch64_pseudo_register_reggroup_p (stru
 
 /* Helper for aarch64_pseudo_read_value.  */
 
-static struct value *
-aarch64_pseudo_read_value_1 (struct gdbarch *gdbarch,
-			     readable_regcache *regcache, int regnum_offset,
-			     int regsize, struct value *result_value)
+static value *
+aarch64_pseudo_read_value_1 (frame_info_ptr next_frame,
+			     const int pseudo_reg_num, int raw_regnum_offset)
 {
-  unsigned v_regnum = AARCH64_V0_REGNUM + regnum_offset;
+  unsigned v_regnum = AARCH64_V0_REGNUM + raw_regnum_offset;
 
-  /* Enough space for a full vector register.  */
-  gdb_byte reg_buf[register_size (gdbarch, AARCH64_V0_REGNUM)];
-  gdb_static_assert (AARCH64_V0_REGNUM == AARCH64_SVE_Z0_REGNUM);
+  return pseudo_from_raw_part (next_frame, pseudo_reg_num, v_regnum, 0);
+}
+
+/* Helper function for reading/writing ZA pseudo-registers.  Given REGNUM,
+   a ZA pseudo-register number, return the information on positioning of the
+   bytes that must be read from/written to.  */
 
-  if (regcache->raw_read (v_regnum, reg_buf) != REG_VALID)
-    mark_value_bytes_unavailable (result_value, 0,
-				  TYPE_LENGTH (value_type (result_value)));
+static za_offsets
+aarch64_za_offsets_from_regnum (struct gdbarch *gdbarch, int regnum)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  gdb_assert (tdep->has_sme ());
+  gdb_assert (tdep->sme_svq > 0);
+  gdb_assert (tdep->sme_pseudo_base <= regnum);
+  gdb_assert (regnum < tdep->sme_pseudo_base + tdep->sme_pseudo_count);
+
+  struct za_pseudo_encoding encoding;
+
+  /* Decode the ZA pseudo-register number.  */
+  aarch64_za_decode_pseudos (gdbarch, regnum, encoding);
+
+  /* Fetch the streaming vector length.  */
+  size_t svl = sve_vl_from_vq (tdep->sme_svq);
+  za_offsets offsets;
+
+  if (is_sme_tile_slice_pseudo_register (gdbarch, regnum))
+    {
+      if (encoding.horizontal)
+	{
+	  /* Horizontal tile slices are contiguous ranges of svl bytes.  */
+
+	  /* The starting offset depends on the tile index (to locate the tile
+	     in the ZA buffer), the slice index (to locate the slice within the
+	     tile) and the qualifier.  */
+	  offsets.starting_offset
+	    = encoding.tile_index * svl + encoding.slice_index
+					  * (svl >> encoding.qualifier_index);
+	  /* Horizontal tile slice data is contiguous and thus doesn't have
+	     a stride.  */
+	  offsets.stride_size = 0;
+	  /* Horizontal tile slice data is contiguous and thus only has 1
+	     chunk.  */
+	  offsets.chunks = 1;
+	  /* The chunk size is always svl bytes.  */
+	  offsets.chunk_size = svl;
+	}
+      else
+	{
+	  /* Vertical tile slices are non-contiguous ranges of
+	     (1 << qualifier_index) bytes.  */
+
+	  /* The starting offset depends on the tile number (to locate the
+	     tile in the ZA buffer), the slice index (to locate the element
+	     within the tile slice) and the qualifier.  */
+	  offsets.starting_offset
+	    = encoding.tile_index * svl + encoding.slice_index
+					  * (1 << encoding.qualifier_index);
+	  /* The offset between vertical tile slices depends on the qualifier
+	     and svl.  */
+	  offsets.stride_size = svl << encoding.qualifier_index;
+	  /* The number of chunks depends on svl and the qualifier size.  */
+	  offsets.chunks = svl >> encoding.qualifier_index;
+	  /* The chunk size depends on the qualifier.  */
+	  offsets.chunk_size = 1 << encoding.qualifier_index;
+	}
+    }
   else
-    memcpy (value_contents_raw (result_value), reg_buf, regsize);
+    {
+      /* ZA tile pseudo-register.  */
 
-  return result_value;
- }
+      /* Starting offset depends on the tile index and qualifier.  */
+      offsets.starting_offset = encoding.tile_index * svl;
+      /* The offset between tile slices depends on the qualifier and svl.  */
+      offsets.stride_size = svl << encoding.qualifier_index;
+      /* The number of chunks depends on the qualifier and svl.  */
+      offsets.chunks = svl >> encoding.qualifier_index;
+      /* The chunk size is always svl bytes.  */
+      offsets.chunk_size = svl;
+    }
 
-/* Implement the "pseudo_register_read_value" gdbarch method.  */
+  return offsets;
+}
 
-static struct value *
-aarch64_pseudo_read_value (struct gdbarch *gdbarch, readable_regcache *regcache,
-			   int regnum)
+/* Given REGNUM, a SME pseudo-register number, return its value in RESULT.  */
+
+static value *
+aarch64_sme_pseudo_register_read (gdbarch *gdbarch, frame_info_ptr next_frame,
+				  const int pseudo_reg_num)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  struct value *result_value = allocate_value (register_type (gdbarch, regnum));
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  gdb_assert (tdep->has_sme ());
+  gdb_assert (tdep->sme_svq > 0);
+  gdb_assert (tdep->sme_pseudo_base <= pseudo_reg_num);
+  gdb_assert (pseudo_reg_num < tdep->sme_pseudo_base + tdep->sme_pseudo_count);
+
+  /* Fetch the offsets that we need in order to read from the correct blocks
+     of ZA.  */
+  za_offsets offsets
+    = aarch64_za_offsets_from_regnum (gdbarch, pseudo_reg_num);
+
+  /* Fetch the contents of ZA.  */
+  value *za_value = value_of_register (tdep->sme_za_regnum, next_frame);
+  value *result = value::allocate_register (next_frame, pseudo_reg_num);
 
-  VALUE_LVAL (result_value) = lval_register;
-  VALUE_REGNUM (result_value) = regnum;
+  /* Copy the requested data.  */
+  for (int chunks = 0; chunks < offsets.chunks; chunks++)
+    {
+      int src_offset = offsets.starting_offset + chunks * offsets.stride_size;
+      int dst_offset = chunks * offsets.chunk_size;
+      za_value->contents_copy (result, dst_offset, src_offset,
+			       offsets.chunk_size);
+    }
 
-  regnum -= gdbarch_num_regs (gdbarch);
-
-  if (regnum >= AARCH64_Q0_REGNUM && regnum < AARCH64_Q0_REGNUM + 32)
-    return aarch64_pseudo_read_value_1 (gdbarch, regcache,
-					regnum - AARCH64_Q0_REGNUM,
-					Q_REGISTER_SIZE, result_value);
-
-  if (regnum >= AARCH64_D0_REGNUM && regnum < AARCH64_D0_REGNUM + 32)
-    return aarch64_pseudo_read_value_1 (gdbarch, regcache,
-					regnum - AARCH64_D0_REGNUM,
-					D_REGISTER_SIZE, result_value);
-
-  if (regnum >= AARCH64_S0_REGNUM && regnum < AARCH64_S0_REGNUM + 32)
-    return aarch64_pseudo_read_value_1 (gdbarch, regcache,
-					regnum - AARCH64_S0_REGNUM,
-					S_REGISTER_SIZE, result_value);
-
-  if (regnum >= AARCH64_H0_REGNUM && regnum < AARCH64_H0_REGNUM + 32)
-    return aarch64_pseudo_read_value_1 (gdbarch, regcache,
-					regnum - AARCH64_H0_REGNUM,
-					H_REGISTER_SIZE, result_value);
-
-  if (regnum >= AARCH64_B0_REGNUM && regnum < AARCH64_B0_REGNUM + 32)
-    return aarch64_pseudo_read_value_1 (gdbarch, regcache,
-					regnum - AARCH64_B0_REGNUM,
-					B_REGISTER_SIZE, result_value);
-
-  if (tdep->has_sve () && regnum >= AARCH64_SVE_V0_REGNUM
-      && regnum < AARCH64_SVE_V0_REGNUM + 32)
-    return aarch64_pseudo_read_value_1 (gdbarch, regcache,
-					regnum - AARCH64_SVE_V0_REGNUM,
-					V_REGISTER_SIZE, result_value);
+  return result;
+}
+
+/* Implement the "pseudo_register_read_value" gdbarch method.  */
+
+static value *
+aarch64_pseudo_read_value (gdbarch *gdbarch, frame_info_ptr next_frame,
+			   const int pseudo_reg_num)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  if (is_w_pseudo_register (gdbarch, pseudo_reg_num))
+    {
+      enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+      /* Default offset for little endian.  */
+      int offset = 0;
+
+      if (byte_order == BFD_ENDIAN_BIG)
+	offset = 4;
+
+      /* Find the correct X register to extract the data from.  */
+      int x_regnum
+	= AARCH64_X0_REGNUM + (pseudo_reg_num - tdep->w_pseudo_base);
+
+      /* Read the bottom 4 bytes of X.  */
+      return pseudo_from_raw_part (next_frame, pseudo_reg_num, x_regnum,
+				   offset);
+    }
+  else if (is_sme_pseudo_register (gdbarch, pseudo_reg_num))
+    return aarch64_sme_pseudo_register_read (gdbarch, next_frame,
+					     pseudo_reg_num);
+
+  /* Offset in the "pseudo-register space".  */
+  int pseudo_offset = pseudo_reg_num - gdbarch_num_regs (gdbarch);
+
+  if (pseudo_offset >= AARCH64_Q0_REGNUM
+      && pseudo_offset < AARCH64_Q0_REGNUM + 32)
+    return aarch64_pseudo_read_value_1 (next_frame, pseudo_reg_num,
+					pseudo_offset - AARCH64_Q0_REGNUM);
+
+  if (pseudo_offset >= AARCH64_D0_REGNUM
+      && pseudo_offset < AARCH64_D0_REGNUM + 32)
+    return aarch64_pseudo_read_value_1 (next_frame, pseudo_reg_num,
+					pseudo_offset - AARCH64_D0_REGNUM);
+
+  if (pseudo_offset >= AARCH64_S0_REGNUM
+      && pseudo_offset < AARCH64_S0_REGNUM + 32)
+    return aarch64_pseudo_read_value_1 (next_frame, pseudo_reg_num,
+					pseudo_offset - AARCH64_S0_REGNUM);
+
+  if (pseudo_offset >= AARCH64_H0_REGNUM
+      && pseudo_offset < AARCH64_H0_REGNUM + 32)
+    return aarch64_pseudo_read_value_1 (next_frame, pseudo_reg_num,
+					pseudo_offset - AARCH64_H0_REGNUM);
+
+  if (pseudo_offset >= AARCH64_B0_REGNUM
+      && pseudo_offset < AARCH64_B0_REGNUM + 32)
+    return aarch64_pseudo_read_value_1 (next_frame, pseudo_reg_num,
+					pseudo_offset - AARCH64_B0_REGNUM);
+
+  if (tdep->has_sve () && pseudo_offset >= AARCH64_SVE_V0_REGNUM
+      && pseudo_offset < AARCH64_SVE_V0_REGNUM + 32)
+    return aarch64_pseudo_read_value_1 (next_frame, pseudo_reg_num,
+					pseudo_offset - AARCH64_SVE_V0_REGNUM);
 
   gdb_assert_not_reached ("regnum out of bound");
 }
@@ -2574,64 +3296,140 @@ aarch64_pseudo_read_value (struct gdbarc
 /* Helper for aarch64_pseudo_write.  */
 
 static void
-aarch64_pseudo_write_1 (struct gdbarch *gdbarch, struct regcache *regcache,
-			int regnum_offset, int regsize, const gdb_byte *buf)
+aarch64_pseudo_write_1 (gdbarch *gdbarch, frame_info_ptr next_frame,
+			int regnum_offset,
+			gdb::array_view<const gdb_byte> buf)
 {
-  unsigned v_regnum = AARCH64_V0_REGNUM + regnum_offset;
+  unsigned raw_regnum = AARCH64_V0_REGNUM + regnum_offset;
 
   /* Enough space for a full vector register.  */
-  gdb_byte reg_buf[register_size (gdbarch, AARCH64_V0_REGNUM)];
-  gdb_static_assert (AARCH64_V0_REGNUM == AARCH64_SVE_Z0_REGNUM);
+  int raw_reg_size = register_size (gdbarch, raw_regnum);
+  gdb_byte raw_buf[raw_reg_size];
+  static_assert (AARCH64_V0_REGNUM == AARCH64_SVE_Z0_REGNUM);
 
   /* Ensure the register buffer is zero, we want gdb writes of the
      various 'scalar' pseudo registers to behavior like architectural
      writes, register width bytes are written the remainder are set to
      zero.  */
-  memset (reg_buf, 0, register_size (gdbarch, AARCH64_V0_REGNUM));
+  memset (raw_buf, 0, register_size (gdbarch, AARCH64_V0_REGNUM));
 
-  memcpy (reg_buf, buf, regsize);
-  regcache->raw_write (v_regnum, reg_buf);
+  gdb::array_view<gdb_byte> raw_view (raw_buf, raw_reg_size);
+  copy (buf, raw_view.slice (0, buf.size ()));
+  put_frame_register (next_frame, raw_regnum, raw_view);
+}
+
+/* Given REGNUM, a SME pseudo-register number, store the bytes from DATA to the
+   pseudo-register.  */
+
+static void
+aarch64_sme_pseudo_register_write (gdbarch *gdbarch, frame_info_ptr next_frame,
+				   const int regnum,
+				   gdb::array_view<const gdb_byte> data)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  gdb_assert (tdep->has_sme ());
+  gdb_assert (tdep->sme_svq > 0);
+  gdb_assert (tdep->sme_pseudo_base <= regnum);
+  gdb_assert (regnum < tdep->sme_pseudo_base + tdep->sme_pseudo_count);
+
+  /* Fetch the offsets that we need in order to write to the correct blocks
+     of ZA.  */
+  za_offsets offsets = aarch64_za_offsets_from_regnum (gdbarch, regnum);
+
+  /* Fetch the contents of ZA.  */
+  value *za_value = value_of_register (tdep->sme_za_regnum, next_frame);
+
+  {
+    /* Create a view only on the portion of za we want to write.  */
+    gdb::array_view<gdb_byte> za_view
+      = za_value->contents_writeable ().slice (offsets.starting_offset);
+
+    /* Copy the requested data.  */
+    for (int chunks = 0; chunks < offsets.chunks; chunks++)
+      {
+	gdb::array_view<const gdb_byte> src
+	  = data.slice (chunks * offsets.chunk_size, offsets.chunk_size);
+	gdb::array_view<gdb_byte> dst
+	  = za_view.slice (chunks * offsets.stride_size, offsets.chunk_size);
+	copy (src, dst);
+      }
+  }
+
+  /* Write back to ZA.  */
+  put_frame_register (next_frame, tdep->sme_za_regnum,
+		      za_value->contents_raw ());
 }
 
 /* Implement the "pseudo_register_write" gdbarch method.  */
 
 static void
-aarch64_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
-		      int regnum, const gdb_byte *buf)
+aarch64_pseudo_write (gdbarch *gdbarch, frame_info_ptr next_frame,
+		      const int pseudo_reg_num,
+		      gdb::array_view<const gdb_byte> buf)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  regnum -= gdbarch_num_regs (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  if (is_w_pseudo_register (gdbarch, pseudo_reg_num))
+    {
+      enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+      /* Default offset for little endian.  */
+      int offset = 0;
+
+      if (byte_order == BFD_ENDIAN_BIG)
+	offset = 4;
+
+      /* Find the correct X register to extract the data from.  */
+      int x_regnum = AARCH64_X0_REGNUM + (pseudo_reg_num - tdep->w_pseudo_base);
+
+      /* First zero-out the contents of X.  */
+      gdb_byte bytes[8] {};
+      gdb::array_view<gdb_byte> bytes_view (bytes);
+      copy (buf, bytes_view.slice (offset, 4));
+
+      /* Write to the bottom 4 bytes of X.  */
+      put_frame_register (next_frame, x_regnum, bytes_view);
+      return;
+    }
+  else if (is_sme_pseudo_register (gdbarch, pseudo_reg_num))
+    {
+      aarch64_sme_pseudo_register_write (gdbarch, next_frame, pseudo_reg_num,
+					 buf);
+      return;
+    }
 
-  if (regnum >= AARCH64_Q0_REGNUM && regnum < AARCH64_Q0_REGNUM + 32)
-    return aarch64_pseudo_write_1 (gdbarch, regcache,
-				   regnum - AARCH64_Q0_REGNUM, Q_REGISTER_SIZE,
-				   buf);
-
-  if (regnum >= AARCH64_D0_REGNUM && regnum < AARCH64_D0_REGNUM + 32)
-    return aarch64_pseudo_write_1 (gdbarch, regcache,
-				   regnum - AARCH64_D0_REGNUM, D_REGISTER_SIZE,
-				   buf);
-
-  if (regnum >= AARCH64_S0_REGNUM && regnum < AARCH64_S0_REGNUM + 32)
-    return aarch64_pseudo_write_1 (gdbarch, regcache,
-				   regnum - AARCH64_S0_REGNUM, S_REGISTER_SIZE,
-				   buf);
-
-  if (regnum >= AARCH64_H0_REGNUM && regnum < AARCH64_H0_REGNUM + 32)
-    return aarch64_pseudo_write_1 (gdbarch, regcache,
-				   regnum - AARCH64_H0_REGNUM, H_REGISTER_SIZE,
-				   buf);
-
-  if (regnum >= AARCH64_B0_REGNUM && regnum < AARCH64_B0_REGNUM + 32)
-    return aarch64_pseudo_write_1 (gdbarch, regcache,
-				   regnum - AARCH64_B0_REGNUM, B_REGISTER_SIZE,
-				   buf);
-
-  if (tdep->has_sve () && regnum >= AARCH64_SVE_V0_REGNUM
-      && regnum < AARCH64_SVE_V0_REGNUM + 32)
-    return aarch64_pseudo_write_1 (gdbarch, regcache,
-				   regnum - AARCH64_SVE_V0_REGNUM,
-				   V_REGISTER_SIZE, buf);
+  /* Offset in the "pseudo-register space".  */
+  int pseudo_offset = pseudo_reg_num - gdbarch_num_regs (gdbarch);
+
+  if (pseudo_offset >= AARCH64_Q0_REGNUM
+      && pseudo_offset < AARCH64_Q0_REGNUM + 32)
+    return aarch64_pseudo_write_1 (gdbarch, next_frame,
+				   pseudo_offset - AARCH64_Q0_REGNUM, buf);
+
+  if (pseudo_offset >= AARCH64_D0_REGNUM
+      && pseudo_offset < AARCH64_D0_REGNUM + 32)
+    return aarch64_pseudo_write_1 (gdbarch, next_frame,
+				   pseudo_offset - AARCH64_D0_REGNUM, buf);
+
+  if (pseudo_offset >= AARCH64_S0_REGNUM
+      && pseudo_offset < AARCH64_S0_REGNUM + 32)
+    return aarch64_pseudo_write_1 (gdbarch, next_frame,
+				   pseudo_offset - AARCH64_S0_REGNUM, buf);
+
+  if (pseudo_offset >= AARCH64_H0_REGNUM
+      && pseudo_offset < AARCH64_H0_REGNUM + 32)
+    return aarch64_pseudo_write_1 (gdbarch, next_frame,
+				   pseudo_offset - AARCH64_H0_REGNUM, buf);
+
+  if (pseudo_offset >= AARCH64_B0_REGNUM
+      && pseudo_offset < AARCH64_B0_REGNUM + 32)
+    return aarch64_pseudo_write_1 (gdbarch, next_frame,
+				   pseudo_offset - AARCH64_B0_REGNUM, buf);
+
+  if (tdep->has_sve () && pseudo_offset >= AARCH64_SVE_V0_REGNUM
+      && pseudo_offset < AARCH64_SVE_V0_REGNUM + 32)
+    return aarch64_pseudo_write_1 (gdbarch, next_frame,
+				   pseudo_offset - AARCH64_SVE_V0_REGNUM, buf);
 
   gdb_assert_not_reached ("regnum out of bound");
 }
@@ -2639,13 +3437,12 @@ aarch64_pseudo_write (struct gdbarch *gd
 /* Callback function for user_reg_add.  */
 
 static struct value *
-value_of_aarch64_user_reg (struct frame_info *frame, const void *baton)
+value_of_aarch64_user_reg (frame_info_ptr frame, const void *baton)
 {
   const int *reg_p = (const int *) baton;
 
-  return value_of_register (*reg_p, frame);
+  return value_of_register (*reg_p, get_next_frame_sentinel_okay (frame));
 }
-
 
 /* Implement the "software_single_step" gdbarch method, needed to
    single step through atomic sequences on AArch64.  */
@@ -2661,8 +3458,18 @@ aarch64_software_single_step (struct reg
   CORE_ADDR breaks[2] = { CORE_ADDR_MAX, CORE_ADDR_MAX };
   CORE_ADDR loc = pc;
   CORE_ADDR closing_insn = 0;
-  uint32_t insn = read_memory_unsigned_integer (loc, insn_size,
-						byte_order_for_code);
+
+  ULONGEST insn_from_memory;
+  if (!safe_read_memory_unsigned_integer (loc, insn_size,
+					  byte_order_for_code,
+					  &insn_from_memory))
+  {
+    /* Assume we don't have a atomic sequence, as we couldn't read the
+       instruction in this location.  */
+    return {};
+  }
+
+  uint32_t insn = insn_from_memory;
   int index;
   int insn_count;
   int bc_insn_count = 0; /* Conditional branch instruction count.  */
@@ -2679,9 +3486,17 @@ aarch64_software_single_step (struct reg
   for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
     {
       loc += insn_size;
-      insn = read_memory_unsigned_integer (loc, insn_size,
-					   byte_order_for_code);
 
+      if (!safe_read_memory_unsigned_integer (loc, insn_size,
+					      byte_order_for_code,
+					      &insn_from_memory))
+      {
+	/* Assume we don't have a atomic sequence, as we couldn't read the
+	   instruction in this location.  */
+	return {};
+      }
+
+      insn = insn_from_memory;
       if (aarch64_decode_insn (insn, &inst, 1, NULL) != 0)
 	return {};
       /* Check if the instruction is a conditional branch.  */
@@ -2731,13 +3546,15 @@ aarch64_software_single_step (struct reg
   return next_pcs;
 }
 
-struct aarch64_displaced_step_closure : public displaced_step_closure
+struct aarch64_displaced_step_copy_insn_closure
+  : public displaced_step_copy_insn_closure
 {
   /* It is true when condition instruction, such as B.CON, TBZ, etc,
      is being displaced stepping.  */
-  int cond = 0;
+  bool cond = false;
 
-  /* PC adjustment offset after displaced stepping.  */
+  /* PC adjustment offset after displaced stepping.  If 0, then we don't
+     write the PC back, assuming the PC is already the right address.  */
   int32_t pc_adjust = 0;
 };
 
@@ -2756,7 +3573,7 @@ struct aarch64_displaced_step_data
   /* Registers when doing displaced stepping.  */
   struct regcache *regs;
 
-  aarch64_displaced_step_closure *dsc;
+  aarch64_displaced_step_copy_insn_closure *dsc;
 };
 
 /* Implementation of aarch64_insn_visitor method "b".  */
@@ -2815,7 +3632,7 @@ aarch64_displaced_step_b_cond (const uns
   */
 
   emit_bcond (dsd->insn_buf, cond, 8);
-  dsd->dsc->cond = 1;
+  dsd->dsc->cond = true;
   dsd->dsc->pc_adjust = offset;
   dsd->insn_count = 1;
 }
@@ -2850,7 +3667,7 @@ aarch64_displaced_step_cb (const int32_t
   */
   emit_cb (dsd->insn_buf, is_cbnz, aarch64_register (rn, is64), 8);
   dsd->insn_count = 1;
-  dsd->dsc->cond = 1;
+  dsd->dsc->cond = true;
   dsd->dsc->pc_adjust = offset;
 }
 
@@ -2875,7 +3692,7 @@ aarch64_displaced_step_tb (const int32_t
   */
   emit_tb (dsd->insn_buf, is_tbnz, bit, aarch64_register (rt, 1), 8);
   dsd->insn_count = 1;
-  dsd->dsc->cond = 1;
+  dsd->dsc->cond = true;
   dsd->dsc->pc_adjust = offset;
 }
 
@@ -2940,15 +3757,22 @@ aarch64_displaced_step_others (const uin
   struct aarch64_displaced_step_data *dsd
     = (struct aarch64_displaced_step_data *) data;
 
-  aarch64_emit_insn (dsd->insn_buf, insn);
-  dsd->insn_count = 1;
-
-  if ((insn & 0xfffffc1f) == 0xd65f0000)
+  uint32_t masked_insn = (insn & CLEAR_Rn_MASK);
+  if (masked_insn == BLR)
     {
-      /* RET */
-      dsd->dsc->pc_adjust = 0;
+      /* Emit a BR to the same register and then update LR to the original
+	 address (similar to aarch64_displaced_step_b).  */
+      aarch64_emit_insn (dsd->insn_buf, insn & 0xffdfffff);
+      regcache_cooked_write_unsigned (dsd->regs, AARCH64_LR_REGNUM,
+				      data->insn_addr + 4);
     }
   else
+    aarch64_emit_insn (dsd->insn_buf, insn);
+  dsd->insn_count = 1;
+
+  if (masked_insn == RET || masked_insn == BR || masked_insn == BLR)
+    dsd->dsc->pc_adjust = 0;
+  else
     dsd->dsc->pc_adjust = 4;
 }
 
@@ -2965,15 +3789,21 @@ static const struct aarch64_insn_visitor
 
 /* Implement the "displaced_step_copy_insn" gdbarch method.  */
 
-struct displaced_step_closure *
+displaced_step_copy_insn_closure_up
 aarch64_displaced_step_copy_insn (struct gdbarch *gdbarch,
 				  CORE_ADDR from, CORE_ADDR to,
 				  struct regcache *regs)
 {
   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
-  uint32_t insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
   struct aarch64_displaced_step_data dsd;
   aarch64_inst inst;
+  ULONGEST insn_from_memory;
+
+  if (!safe_read_memory_unsigned_integer (from, 4, byte_order_for_code,
+					  &insn_from_memory))
+    return nullptr;
+
+  uint32_t insn = insn_from_memory;
 
   if (aarch64_decode_insn (insn, &inst, 1, NULL) != 0)
     return NULL;
@@ -2985,8 +3815,8 @@ aarch64_displaced_step_copy_insn (struct
       return NULL;
     }
 
-  std::unique_ptr<aarch64_displaced_step_closure> dsc
-    (new aarch64_displaced_step_closure);
+  std::unique_ptr<aarch64_displaced_step_copy_insn_closure> dsc
+    (new aarch64_displaced_step_copy_insn_closure);
   dsd.base.insn_addr = from;
   dsd.new_addr = to;
   dsd.regs = regs;
@@ -3004,12 +3834,10 @@ aarch64_displaced_step_copy_insn (struct
 	 relocated instruction(s) there.  */
       for (i = 0; i < dsd.insn_count; i++)
 	{
-	  if (debug_displaced)
-	    {
-	      debug_printf ("displaced: writing insn ");
-	      debug_printf ("%.8x", dsd.insn_buf[i]);
-	      debug_printf (" at %s\n", paddress (gdbarch, to + i * 4));
-	    }
+	  displaced_debug_printf ("writing insn %.8x at %s",
+				  dsd.insn_buf[i],
+				  paddress (gdbarch, to + i * 4));
+
 	  write_memory_unsigned_integer (to + i * 4, 4, byte_order_for_code,
 					 (ULONGEST) dsd.insn_buf[i]);
 	}
@@ -3019,24 +3847,40 @@ aarch64_displaced_step_copy_insn (struct
       dsc = NULL;
     }
 
-  return dsc.release ();
+  /* This is a work around for a problem with g++ 4.8.  */
+  return displaced_step_copy_insn_closure_up (dsc.release ());
 }
 
 /* Implement the "displaced_step_fixup" gdbarch method.  */
 
 void
 aarch64_displaced_step_fixup (struct gdbarch *gdbarch,
-			      struct displaced_step_closure *dsc_,
+			      struct displaced_step_copy_insn_closure *dsc_,
 			      CORE_ADDR from, CORE_ADDR to,
-			      struct regcache *regs)
+			      struct regcache *regs, bool completed_p)
 {
-  aarch64_displaced_step_closure *dsc = (aarch64_displaced_step_closure *) dsc_;
+  CORE_ADDR pc = regcache_read_pc (regs);
+
+  /* If the displaced instruction didn't complete successfully then all we
+     need to do is restore the program counter.  */
+  if (!completed_p)
+    {
+      pc = from + (pc - to);
+      regcache_write_pc (regs, pc);
+      return;
+    }
+
+  aarch64_displaced_step_copy_insn_closure *dsc
+    = (aarch64_displaced_step_copy_insn_closure *) dsc_;
+
+  displaced_debug_printf ("PC after stepping: %s (was %s).",
+			  paddress (gdbarch, pc), paddress (gdbarch, to));
 
   if (dsc->cond)
     {
-      ULONGEST pc;
+      displaced_debug_printf ("[Conditional] pc_adjust before: %d",
+			      dsc->pc_adjust);
 
-      regcache_cooked_read_unsigned (regs, AARCH64_PC_REGNUM, &pc);
       if (pc - to == 8)
 	{
 	  /* Condition is true.  */
@@ -3048,15 +3892,30 @@ aarch64_displaced_step_fixup (struct gdb
 	}
       else
 	gdb_assert_not_reached ("Unexpected PC value after displaced stepping");
+
+      displaced_debug_printf ("[Conditional] pc_adjust after: %d",
+			      dsc->pc_adjust);
     }
 
+  displaced_debug_printf ("%s PC by %d",
+			  dsc->pc_adjust ? "adjusting" : "not adjusting",
+			  dsc->pc_adjust);
+
   if (dsc->pc_adjust != 0)
     {
-      if (debug_displaced)
+      /* Make sure the previous instruction was executed (that is, the PC
+	 has changed).  If the PC didn't change, then discard the adjustment
+	 offset.  Otherwise we may skip an instruction before its execution
+	 took place.  */
+      if ((pc - to) == 0)
 	{
-	  debug_printf ("displaced: fixup: set PC to %s:%d\n",
-			paddress (gdbarch, from), dsc->pc_adjust);
+	  displaced_debug_printf ("PC did not move. Discarding PC adjustment.");
+	  dsc->pc_adjust = 0;
 	}
+
+      displaced_debug_printf ("fixup: set PC to %s:%d",
+			      paddress (gdbarch, from), dsc->pc_adjust);
+
       regcache_cooked_write_unsigned (regs, AARCH64_PC_REGNUM,
 				      from + dsc->pc_adjust);
     }
@@ -3064,30 +3923,33 @@ aarch64_displaced_step_fixup (struct gdb
 
 /* Implement the "displaced_step_hw_singlestep" gdbarch method.  */
 
-int
-aarch64_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
-				      struct displaced_step_closure *closure)
+bool
+aarch64_displaced_step_hw_singlestep (struct gdbarch *gdbarch)
 {
-  return 1;
+  return true;
 }
 
 /* Get the correct target description for the given VQ value.
    If VQ is zero then it is assumed SVE is not supported.
-   (It is not possible to set VQ to zero on an SVE system).  */
+   (It is not possible to set VQ to zero on an SVE system).
+
+   MTE_P indicates the presence of the Memory Tagging Extension feature.
+
+   TLS_P indicates the presence of the Thread Local Storage feature.  */
 
 const target_desc *
-aarch64_read_description (uint64_t vq, bool pauth_p)
+aarch64_read_description (const aarch64_features &features)
 {
-  if (vq > AARCH64_MAX_SVE_VQ)
-    error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq,
+  if (features.vq > AARCH64_MAX_SVE_VQ)
+    error (_("VQ is %" PRIu64 ", maximum supported value is %d"), features.vq,
 	   AARCH64_MAX_SVE_VQ);
 
-  struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p];
+  struct target_desc *tdesc = tdesc_aarch64_map[features];
 
   if (tdesc == NULL)
     {
-      tdesc = aarch64_create_target_description (vq, pauth_p);
-      tdesc_aarch64_list[vq][pauth_p] = tdesc;
+      tdesc = aarch64_create_target_description (features);
+      tdesc_aarch64_map[features] = tdesc;
     }
 
   return tdesc;
@@ -3113,18 +3975,75 @@ aarch64_get_tdesc_vq (const struct targe
   return sve_vq_from_vl (vl);
 }
 
-/* Add all the expected register sets into GDBARCH.  */
 
-static void
-aarch64_add_reggroups (struct gdbarch *gdbarch)
+/* Return the svq (streaming vector quotient) used when creating the target
+   description TDESC.  */
+
+static uint64_t
+aarch64_get_tdesc_svq (const struct target_desc *tdesc)
 {
-  reggroup_add (gdbarch, general_reggroup);
-  reggroup_add (gdbarch, float_reggroup);
-  reggroup_add (gdbarch, system_reggroup);
-  reggroup_add (gdbarch, vector_reggroup);
-  reggroup_add (gdbarch, all_reggroup);
-  reggroup_add (gdbarch, save_reggroup);
-  reggroup_add (gdbarch, restore_reggroup);
+  const struct tdesc_feature *feature_sme;
+
+  if (!tdesc_has_registers (tdesc))
+    return 0;
+
+  feature_sme = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.sme");
+
+  if (feature_sme == nullptr)
+    return 0;
+
+  size_t svl_squared = tdesc_register_bitsize (feature_sme, "za");
+
+  /* We have the total size of the ZA matrix, in bits.  Figure out the svl
+     value.  */
+  size_t svl = std::sqrt (svl_squared / 8);
+
+  /* Now extract svq.  */
+  return sve_vq_from_vl (svl);
+}
+
+/* Get the AArch64 features present in the given target description. */
+
+aarch64_features
+aarch64_features_from_target_desc (const struct target_desc *tdesc)
+{
+  aarch64_features features;
+
+  if (tdesc == nullptr)
+    return features;
+
+  features.vq = aarch64_get_tdesc_vq (tdesc);
+
+  /* We need to look for a couple pauth feature name variations.  */
+  features.pauth
+      = (tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.pauth") != nullptr);
+
+  if (!features.pauth)
+    features.pauth = (tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.pauth_v2")
+		      != nullptr);
+
+  features.mte
+      = (tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.mte") != nullptr);
+
+  const struct tdesc_feature *tls_feature
+    = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.tls");
+
+  if (tls_feature != nullptr)
+    {
+      /* We have TLS registers.  Find out how many.  */
+      if (tdesc_unnumbered_register (tls_feature, "tpidr2"))
+	features.tls = 2;
+      else
+	features.tls = 1;
+    }
+
+  features.svq = aarch64_get_tdesc_svq (tdesc);
+
+  /* Check for the SME2 feature.  */
+  features.sme2 = (tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.sme2")
+		   != nullptr);
+
+  return features;
 }
 
 /* Implement the "cannot_store_register" gdbarch method.  */
@@ -3132,14 +4051,144 @@ aarch64_add_reggroups (struct gdbarch *g
 static int
 aarch64_cannot_store_register (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   if (!tdep->has_pauth ())
     return 0;
 
   /* Pointer authentication registers are read-only.  */
-  return (regnum == AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base)
-	  || regnum == AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base));
+  return (regnum >= tdep->pauth_reg_base
+	  && regnum < tdep->pauth_reg_base + tdep->pauth_reg_count);
+}
+
+/* Implement the stack_frame_destroyed_p gdbarch method.  */
+
+static int
+aarch64_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  CORE_ADDR func_start, func_end;
+  if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
+    return 0;
+
+  enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
+
+  ULONGEST insn_from_memory;
+  if (!safe_read_memory_unsigned_integer (pc, 4, byte_order_for_code,
+					  &insn_from_memory))
+    return 0;
+
+  uint32_t insn = insn_from_memory;
+
+  aarch64_inst inst;
+  if (aarch64_decode_insn (insn, &inst, 1, nullptr) != 0)
+    return 0;
+
+  return streq (inst.opcode->name, "ret");
+}
+
+/* AArch64 implementation of the remove_non_address_bits gdbarch hook.  Remove
+   non address bits from a pointer value.  */
+
+static CORE_ADDR
+aarch64_remove_non_address_bits (struct gdbarch *gdbarch, CORE_ADDR pointer)
+{
+  /* By default, we assume TBI and discard the top 8 bits plus the VA range
+     select bit (55).  Below we try to fetch information about pointer
+     authentication masks in order to make non-address removal more
+     precise.  */
+  CORE_ADDR mask = AARCH64_TOP_BITS_MASK;
+
+  /* Check if we have an inferior first.  If not, just use the default
+     mask.
+
+     We use the inferior_ptid here because the pointer authentication masks
+     should be the same across threads of a process.  Since we may not have
+     access to the current thread (gdb may have switched to no inferiors
+     momentarily), we use the inferior ptid.  */
+  if (inferior_ptid != null_ptid)
+    {
+      /* If we do have an inferior, attempt to fetch its thread's thread_info
+	 struct.  */
+      thread_info *thread = current_inferior ()->find_thread (inferior_ptid);
+
+      /* If the thread is running, we will not be able to fetch the mask
+	 registers.  */
+      if (thread != nullptr && thread->state != THREAD_RUNNING)
+	{
+	  /* Otherwise, fetch the register cache and the masks.  */
+	  struct regcache *regs
+	    = get_thread_regcache (current_inferior ()->process_target (),
+				   inferior_ptid);
+
+	  /* Use the gdbarch from the register cache to check for pointer
+	     authentication support, as it matches the features found in
+	     that particular thread.  */
+	  aarch64_gdbarch_tdep *tdep
+	    = gdbarch_tdep<aarch64_gdbarch_tdep> (regs->arch ());
+
+	  /* Is there pointer authentication support?  */
+	  if (tdep->has_pauth ())
+	    {
+	      CORE_ADDR cmask, dmask;
+	      int dmask_regnum
+		= AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base);
+	      int cmask_regnum
+		= AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base);
+
+	      /* If we have a kernel address and we have kernel-mode address
+		 mask registers, use those instead.  */
+	      if (tdep->pauth_reg_count > 2
+		  && pointer & VA_RANGE_SELECT_BIT_MASK)
+		{
+		  dmask_regnum
+		    = AARCH64_PAUTH_DMASK_HIGH_REGNUM (tdep->pauth_reg_base);
+		  cmask_regnum
+		    = AARCH64_PAUTH_CMASK_HIGH_REGNUM (tdep->pauth_reg_base);
+		}
+
+	      /* We have both a code mask and a data mask.  For now they are
+		 the same, but this may change in the future.  */
+	      if (regs->cooked_read (dmask_regnum, &dmask) != REG_VALID)
+		dmask = mask;
+
+	      if (regs->cooked_read (cmask_regnum, &cmask) != REG_VALID)
+		cmask = mask;
+
+	      mask |= aarch64_mask_from_pac_registers (cmask, dmask);
+	    }
+	}
+    }
+
+  return aarch64_remove_top_bits (pointer, mask);
+}
+
+/* Given NAMES, a vector of strings, initialize it with all the SME
+   pseudo-register names for the current streaming vector length.  */
+
+static void
+aarch64_initialize_sme_pseudo_names (struct gdbarch *gdbarch,
+				     std::vector<std::string> &names)
+{
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+
+  gdb_assert (tdep->has_sme ());
+  gdb_assert (tdep->sme_tile_slice_pseudo_base > 0);
+  gdb_assert (tdep->sme_tile_pseudo_base > 0);
+
+  for (int i = 0; i < tdep->sme_tile_slice_pseudo_count; i++)
+    {
+      int regnum = tdep->sme_tile_slice_pseudo_base + i;
+      struct za_pseudo_encoding encoding;
+      aarch64_za_decode_pseudos (gdbarch, regnum, encoding);
+      names.push_back (aarch64_za_tile_slice_name (encoding));
+    }
+  for (int i = 0; i < AARCH64_ZA_TILES_NUM; i++)
+    {
+      int regnum = tdep->sme_tile_pseudo_base + i;
+      struct za_pseudo_encoding encoding;
+      aarch64_za_decode_pseudos (gdbarch, regnum, encoding);
+      names.push_back (aarch64_za_tile_name (encoding));
+    }
 }
 
 /* Initialize the current architecture based on INFO.  If possible,
@@ -3156,54 +4205,61 @@ aarch64_gdbarch_init (struct gdbarch_inf
   const struct tdesc_feature *feature_pauth;
   bool valid_p = true;
   int i, num_regs = 0, num_pseudo_regs = 0;
-  int first_pauth_regnum = -1, pauth_ra_state_offset = -1;
-
-  /* Use the vector length passed via the target info.  Here -1 is used for no
-     SVE, and 0 is unset.  If unset then use the vector length from the existing
-     tdesc.  */
-  uint64_t vq = 0;
-  if (info.id == (int *) -1)
-    vq = 0;
-  else if (info.id != 0)
-    vq = (uint64_t) info.id;
-  else
-    vq = aarch64_get_tdesc_vq (info.target_desc);
+  int first_pauth_regnum = -1, ra_sign_state_offset = -1;
+  int first_mte_regnum = -1, first_tls_regnum = -1;
+  uint64_t vq = aarch64_get_tdesc_vq (info.target_desc);
+  uint64_t svq = aarch64_get_tdesc_svq (info.target_desc);
 
   if (vq > AARCH64_MAX_SVE_VQ)
-    internal_error (__FILE__, __LINE__, _("VQ out of bounds: %s (max %d)"),
+    internal_error (_("VQ out of bounds: %s (max %d)"),
 		    pulongest (vq), AARCH64_MAX_SVE_VQ);
 
+  if (svq > AARCH64_MAX_SVE_VQ)
+    internal_error (_("Streaming vector quotient (svq) out of bounds: %s"
+		      " (max %d)"),
+		    pulongest (svq), AARCH64_MAX_SVE_VQ);
+
   /* If there is already a candidate, use it.  */
   for (gdbarch_list *best_arch = gdbarch_list_lookup_by_info (arches, &info);
        best_arch != nullptr;
        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
     {
-      struct gdbarch_tdep *tdep = gdbarch_tdep (best_arch->gdbarch);
-      if (tdep && tdep->vq == vq)
+      aarch64_gdbarch_tdep *tdep
+	= gdbarch_tdep<aarch64_gdbarch_tdep> (best_arch->gdbarch);
+      if (tdep && tdep->vq == vq && tdep->sme_svq == svq)
 	return best_arch->gdbarch;
     }
 
   /* Ensure we always have a target descriptor, and that it is for the given VQ
      value.  */
   const struct target_desc *tdesc = info.target_desc;
-  if (!tdesc_has_registers (tdesc) || vq != aarch64_get_tdesc_vq (tdesc))
-    tdesc = aarch64_read_description (vq, false);
+  if (!tdesc_has_registers (tdesc) || vq != aarch64_get_tdesc_vq (tdesc)
+      || svq != aarch64_get_tdesc_svq (tdesc))
+    {
+      aarch64_features features;
+      features.vq = vq;
+      features.svq = svq;
+      tdesc = aarch64_read_description (features);
+    }
   gdb_assert (tdesc);
 
   feature_core = tdesc_find_feature (tdesc,"org.gnu.gdb.aarch64.core");
   feature_fpu = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.fpu");
   feature_sve = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.sve");
-  feature_pauth = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.pauth");
+  const struct tdesc_feature *feature_mte
+    = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.mte");
+  const struct tdesc_feature *feature_tls
+    = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.tls");
 
   if (feature_core == nullptr)
     return nullptr;
 
-  struct tdesc_arch_data *tdesc_data = tdesc_data_alloc ();
+  tdesc_arch_data_up tdesc_data = tdesc_data_alloc ();
 
   /* Validate the description provides the mandatory core R registers
      and allocate their numbers.  */
   for (i = 0; i < ARRAY_SIZE (aarch64_r_register_names); i++)
-    valid_p &= tdesc_numbered_register (feature_core, tdesc_data,
+    valid_p &= tdesc_numbered_register (feature_core, tdesc_data.get (),
 					AARCH64_X0_REGNUM + i,
 					aarch64_r_register_names[i]);
 
@@ -3218,7 +4274,7 @@ aarch64_gdbarch_init (struct gdbarch_inf
       /* Validate the description provides the mandatory V registers
 	 and allocate their numbers.  */
       for (i = 0; i < ARRAY_SIZE (aarch64_v_register_names); i++)
-	valid_p &= tdesc_numbered_register (feature_fpu, tdesc_data,
+	valid_p &= tdesc_numbered_register (feature_fpu, tdesc_data.get (),
 					    AARCH64_V0_REGNUM + i,
 					    aarch64_v_register_names[i]);
 
@@ -3231,7 +4287,7 @@ aarch64_gdbarch_init (struct gdbarch_inf
       /* Validate the description provides the mandatory SVE registers
 	 and allocate their numbers.  */
       for (i = 0; i < ARRAY_SIZE (aarch64_sve_register_names); i++)
-	valid_p &= tdesc_numbered_register (feature_sve, tdesc_data,
+	valid_p &= tdesc_numbered_register (feature_sve, tdesc_data.get (),
 					    AARCH64_SVE_Z0_REGNUM + i,
 					    aarch64_sve_register_names[i]);
 
@@ -3248,33 +4304,149 @@ aarch64_gdbarch_init (struct gdbarch_inf
       num_pseudo_regs += 32;	/* add the Bn scalar register pseudos */
     }
 
+  int first_sme_regnum = -1;
+  int first_sme2_regnum = -1;
+  int first_sme_pseudo_regnum = -1;
+  const struct tdesc_feature *feature_sme
+    = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.sme");
+  if (feature_sme != nullptr)
+    {
+      /* Record the first SME register.  */
+      first_sme_regnum = num_regs;
+
+      valid_p &= tdesc_numbered_register (feature_sme, tdesc_data.get (),
+					  num_regs++, "svg");
+
+      valid_p &= tdesc_numbered_register (feature_sme, tdesc_data.get (),
+					  num_regs++, "svcr");
+
+      valid_p &= tdesc_numbered_register (feature_sme, tdesc_data.get (),
+					  num_regs++, "za");
+
+      /* Record the first SME pseudo register.  */
+      first_sme_pseudo_regnum = num_pseudo_regs;
+
+      /* Add the ZA tile slice pseudo registers.  The number of tile slice
+	 pseudo-registers depend on the svl, and is always a multiple of 5.  */
+      num_pseudo_regs += (svq << 5) * 5;
+
+      /* Add the ZA tile pseudo registers.  */
+      num_pseudo_regs += AARCH64_ZA_TILES_NUM;
+
+      /* Now check for the SME2 feature.  SME2 is only available if SME is
+	 available.  */
+      const struct tdesc_feature *feature_sme2
+	= tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.sme2");
+      if (feature_sme2 != nullptr)
+	{
+	  /* Record the first SME2 register.  */
+	  first_sme2_regnum = num_regs;
+
+	  valid_p &= tdesc_numbered_register (feature_sme2, tdesc_data.get (),
+					      num_regs++, "zt0");
+	}
+    }
+
+  /* Add the TLS register.  */
+  int tls_register_count = 0;
+  if (feature_tls != nullptr)
+    {
+      first_tls_regnum = num_regs;
+
+      /* Look for the TLS registers.  tpidr is required, but tpidr2 is
+	 optional.  */
+      valid_p
+	= tdesc_numbered_register (feature_tls, tdesc_data.get (),
+				   first_tls_regnum, "tpidr");
+
+      if (valid_p)
+	{
+	  tls_register_count++;
+
+	  bool has_tpidr2
+	    = tdesc_numbered_register (feature_tls, tdesc_data.get (),
+				       first_tls_regnum + tls_register_count,
+				       "tpidr2");
+
+	  /* Figure out how many TLS registers we have.  */
+	  if (has_tpidr2)
+	    tls_register_count++;
+
+	  num_regs += tls_register_count;
+	}
+      else
+	{
+	  warning (_("Provided TLS register feature doesn't contain "
+		     "required tpidr register."));
+	  return nullptr;
+	}
+    }
+
+  /* We have two versions of the pauth target description due to a past bug
+     where GDB would crash when seeing the first version of the pauth target
+     description.  */
+  feature_pauth = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.pauth");
+  if (feature_pauth == nullptr)
+    feature_pauth = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.pauth_v2");
+
   /* Add the pauth registers.  */
+  int pauth_masks = 0;
   if (feature_pauth != NULL)
     {
       first_pauth_regnum = num_regs;
-      pauth_ra_state_offset = num_pseudo_regs;
+      ra_sign_state_offset = num_pseudo_regs;
+
+      /* Size of the expected register set with all 4 masks.  */
+      int set_size = ARRAY_SIZE (aarch64_pauth_register_names);
+
+      /* QEMU exposes a couple additional masks for the high half of the
+	 address.  We should either have 2 registers or 4 registers.  */
+      if (tdesc_unnumbered_register (feature_pauth,
+				     "pauth_dmask_high") == 0)
+	{
+	  /* We did not find pauth_dmask_high, assume we only have
+	     2 masks.  We are not dealing with QEMU/Emulators then.  */
+	  set_size -= 2;
+	}
+
       /* Validate the descriptor provides the mandatory PAUTH registers and
 	 allocate their numbers.  */
-      for (i = 0; i < ARRAY_SIZE (aarch64_pauth_register_names); i++)
-	valid_p &= tdesc_numbered_register (feature_pauth, tdesc_data,
+      for (i = 0; i < set_size; i++)
+	valid_p &= tdesc_numbered_register (feature_pauth, tdesc_data.get (),
 					    first_pauth_regnum + i,
 					    aarch64_pauth_register_names[i]);
 
       num_regs += i;
       num_pseudo_regs += 1;	/* Count RA_STATE pseudo register.  */
+      pauth_masks = set_size;
     }
 
-  if (!valid_p)
+  /* Add the MTE registers.  */
+  if (feature_mte != NULL)
     {
-      tdesc_data_cleanup (tdesc_data);
-      return nullptr;
+      first_mte_regnum = num_regs;
+      /* Validate the descriptor provides the mandatory MTE registers and
+	 allocate their numbers.  */
+      for (i = 0; i < ARRAY_SIZE (aarch64_mte_register_names); i++)
+	valid_p &= tdesc_numbered_register (feature_mte, tdesc_data.get (),
+					    first_mte_regnum + i,
+					    aarch64_mte_register_names[i]);
+
+      num_regs += i;
     }
+    /* W pseudo-registers */
+    int first_w_regnum = num_pseudo_regs;
+    num_pseudo_regs += 31;
+
+  if (!valid_p)
+    return nullptr;
 
   /* AArch64 code is always little-endian.  */
   info.byte_order_for_code = BFD_ENDIAN_LITTLE;
 
-  struct gdbarch_tdep *tdep = XCNEW (struct gdbarch_tdep);
-  struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
+  gdbarch *gdbarch
+    = gdbarch_alloc (&info, gdbarch_tdep_up (new aarch64_gdbarch_tdep));
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   /* This should be low enough for everything.  */
   tdep->lowest_pc = 0x20;
@@ -3282,8 +4454,22 @@ aarch64_gdbarch_init (struct gdbarch_inf
   tdep->jb_elt_size = 8;
   tdep->vq = vq;
   tdep->pauth_reg_base = first_pauth_regnum;
-  tdep->pauth_ra_state_regnum = (feature_pauth == NULL) ? -1
-				: pauth_ra_state_offset + num_regs;
+  tdep->pauth_reg_count = pauth_masks;
+  tdep->ra_sign_state_regnum = -1;
+  tdep->mte_reg_base = first_mte_regnum;
+  tdep->tls_regnum_base = first_tls_regnum;
+  tdep->tls_register_count = tls_register_count;
+
+  /* Set the SME register set details.  The pseudo-registers will be adjusted
+     later.  */
+  tdep->sme_reg_base = first_sme_regnum;
+  tdep->sme_svg_regnum = first_sme_regnum;
+  tdep->sme_svcr_regnum = first_sme_regnum + 1;
+  tdep->sme_za_regnum = first_sme_regnum + 2;
+  tdep->sme_svq = svq;
+
+  /* Set the SME2 register set details.  */
+  tdep->sme2_zt0_regnum = first_sme2_regnum;
 
   set_gdbarch_push_dummy_call (gdbarch, aarch64_push_dummy_call);
   set_gdbarch_frame_align (gdbarch, aarch64_frame_align);
@@ -3329,14 +4515,17 @@ aarch64_gdbarch_init (struct gdbarch_inf
   set_gdbarch_wchar_signed (gdbarch, 0);
   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
   set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
-  set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+  set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
   set_gdbarch_type_align (gdbarch, aarch64_type_align);
 
+  /* Detect whether PC is at a point where the stack has been destroyed.  */
+  set_gdbarch_stack_frame_destroyed_p (gdbarch, aarch64_stack_frame_destroyed_p);
+
   /* Internal <-> external register number maps.  */
   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, aarch64_dwarf_reg_to_regnum);
 
   /* Returning results.  */
-  set_gdbarch_return_value (gdbarch, aarch64_return_value);
+  set_gdbarch_return_value_as_value (gdbarch, aarch64_return_value);
 
   /* Disassembly.  */
   set_gdbarch_print_insn (gdbarch, aarch64_gdb_print_insn);
@@ -3344,12 +4533,9 @@ aarch64_gdbarch_init (struct gdbarch_inf
   /* Virtual tables.  */
   set_gdbarch_vbit_in_delta (gdbarch, 1);
 
-  /* Register architecture.  */
-  aarch64_add_reggroups (gdbarch);
-
   /* Hook in the ABI-specific overrides, if they have been registered.  */
   info.target_desc = tdesc;
-  info.tdesc_data = tdesc_data;
+  info.tdesc_data = tdesc_data.get ();
   gdbarch_init_osabi (info, gdbarch);
 
   dwarf2_frame_set_init_reg (gdbarch, aarch64_dwarf2_frame_init_reg);
@@ -3357,6 +4543,10 @@ aarch64_gdbarch_init (struct gdbarch_inf
   set_gdbarch_execute_dwarf_cfa_vendor_op (gdbarch,
 					   aarch64_execute_dwarf_cfa_vendor_op);
 
+  /* Permanent/Program breakpoint handling.  */
+  set_gdbarch_program_breakpoint_here_p (gdbarch,
+					 aarch64_program_breakpoint_here_p);
+
   /* Add some default predicates.  */
   frame_unwind_append_unwinder (gdbarch, &aarch64_stub_unwind);
   dwarf2_append_unwinders (gdbarch);
@@ -3374,7 +4564,108 @@ aarch64_gdbarch_init (struct gdbarch_inf
 
   set_gdbarch_get_pc_address_flags (gdbarch, aarch64_get_pc_address_flags);
 
-  tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+  tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
+
+  /* Fetch the updated number of registers after we're done adding all
+     entries from features we don't explicitly care about.  This is the case
+     for bare metal debugging stubs that include a lot of system registers.  */
+  num_regs = gdbarch_num_regs (gdbarch);
+
+  /* With the number of real registers updated, setup the pseudo-registers and
+     record their numbers.  */
+
+  /* Setup W pseudo-register numbers.  */
+  tdep->w_pseudo_base = first_w_regnum + num_regs;
+  tdep->w_pseudo_count = 31;
+
+  /* Pointer authentication pseudo-registers.  */
+  if (tdep->has_pauth ())
+    tdep->ra_sign_state_regnum = ra_sign_state_offset + num_regs;
+
+  /* Architecture hook to remove bits of a pointer that are not part of the
+     address, like memory tags (MTE) and pointer authentication signatures.  */
+  set_gdbarch_remove_non_address_bits (gdbarch,
+				       aarch64_remove_non_address_bits);
+
+  /* SME pseudo-registers.  */
+  if (tdep->has_sme ())
+    {
+      tdep->sme_pseudo_base = num_regs + first_sme_pseudo_regnum;
+      tdep->sme_tile_slice_pseudo_base = tdep->sme_pseudo_base;
+      tdep->sme_tile_slice_pseudo_count = (svq * 32) * 5;
+      tdep->sme_tile_pseudo_base
+	= tdep->sme_pseudo_base + tdep->sme_tile_slice_pseudo_count;
+      tdep->sme_pseudo_count
+	= tdep->sme_tile_slice_pseudo_count + AARCH64_ZA_TILES_NUM;
+
+      /* The SME ZA pseudo-registers are a set of 160 to 2560 pseudo-registers
+	 depending on the value of svl.
+
+	 The tile pseudo-registers are organized around their qualifiers
+	 (b, h, s, d and q).  Their numbers are distributed as follows:
+
+	 b 0
+	 h 1~2
+	 s 3~6
+	 d 7~14
+	 q 15~30
+
+	 The naming of the tile pseudo-registers follows the pattern za<t><q>,
+	 where:
+
+	 <t> is the tile number, with the following possible values based on
+	 the qualifiers:
+
+	 Qualifier - Allocated indexes
+
+	 b - 0
+	 h - 0~1
+	 s - 0~3
+	 d - 0~7
+	 q - 0~15
+
+	 <q> is the qualifier: b, h, s, d and q.
+
+	 The tile slice pseudo-registers are organized around their
+	 qualifiers as well (b, h, s, d and q), but also around their
+	 direction (h - horizontal and v - vertical).
+
+	 Even-numbered tile slice pseudo-registers are horizontally-oriented
+	 and odd-numbered tile slice pseudo-registers are vertically-oriented.
+
+	 Their numbers are distributed as follows:
+
+	 Qualifier - Allocated indexes
+
+	 b tile slices - 0~511
+	 h tile slices - 512~1023
+	 s tile slices - 1024~1535
+	 d tile slices - 1536~2047
+	 q tile slices - 2048~2559
+
+	 The naming of the tile slice pseudo-registers follows the pattern
+	 za<t><d><q><s>, where:
+
+	 <t> is the tile number as described for the tile pseudo-registers.
+	 <d> is the direction of the tile slice (h or v)
+	 <q> is the qualifier of the tile slice (b, h, s, d or q)
+	 <s> is the slice number, defined as follows:
+
+	 Qualifier - Allocated indexes
+
+	 b - 0~15
+	 h - 0~7
+	 s - 0~3
+	 d - 0~1
+	 q - 0
+
+	 We have helper functions to translate to/from register index from/to
+	 the set of fields that make the pseudo-register names.  */
+
+      /* Build the array of pseudo-register names available for this
+	 particular gdbarch configuration.  */
+      aarch64_initialize_sme_pseudo_names (gdbarch, tdep->sme_pseudo_names);
+    }
 
   /* Add standard register aliases.  */
   for (i = 0; i < ARRAY_SIZE (aarch64_register_aliases); i++)
@@ -3390,13 +4681,55 @@ aarch64_gdbarch_init (struct gdbarch_inf
 static void
 aarch64_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
   if (tdep == NULL)
     return;
 
-  fprintf_unfiltered (file, _("aarch64_dump_tdep: Lowest pc = 0x%s"),
-		      paddress (gdbarch, tdep->lowest_pc));
+  gdb_printf (file, _("aarch64_dump_tdep: Lowest pc = 0x%s\n"),
+	      paddress (gdbarch, tdep->lowest_pc));
+
+  /* SME fields.  */
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_type_q = %s\n"),
+	      host_address_to_string (tdep->sme_tile_type_q));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_type_d = %s\n"),
+	      host_address_to_string (tdep->sme_tile_type_d));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_type_s = %s\n"),
+	      host_address_to_string (tdep->sme_tile_type_s));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_type_h = %s\n"),
+	      host_address_to_string (tdep->sme_tile_type_h));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_type_n = %s\n"),
+	      host_address_to_string (tdep->sme_tile_type_b));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_slice_type_q = %s\n"),
+	      host_address_to_string (tdep->sme_tile_slice_type_q));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_slice_type_d = %s\n"),
+	      host_address_to_string (tdep->sme_tile_slice_type_d));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_slice_type_s = %s\n"),
+	      host_address_to_string (tdep->sme_tile_slice_type_s));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_slice_type_h = %s\n"),
+	      host_address_to_string (tdep->sme_tile_slice_type_h));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_slice_type_b = %s\n"),
+	      host_address_to_string (tdep->sme_tile_slice_type_b));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_reg_base = %s\n"),
+	      pulongest (tdep->sme_reg_base));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_svg_regnum = %s\n"),
+	      pulongest (tdep->sme_svg_regnum));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_svcr_regnum = %s\n"),
+	      pulongest (tdep->sme_svcr_regnum));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_za_regnum = %s\n"),
+	      pulongest (tdep->sme_za_regnum));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_pseudo_base = %s\n"),
+	      pulongest (tdep->sme_pseudo_base));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_pseudo_count = %s\n"),
+	      pulongest (tdep->sme_pseudo_count));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_slice_pseudo_base = %s\n"),
+	      pulongest (tdep->sme_tile_slice_pseudo_base));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_slice_pseudo_count = %s\n"),
+	      pulongest (tdep->sme_tile_slice_pseudo_count));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_tile_pseudo_base = %s\n"),
+	      pulongest (tdep->sme_tile_pseudo_base));
+  gdb_printf (file, _("aarch64_dump_tdep: sme_svq = %s\n"),
+	      pulongest (tdep->sme_svq));
 }
 
 #if GDB_SELF_TEST
@@ -3406,8 +4739,9 @@ static void aarch64_process_record_test
 }
 #endif
 
+void _initialize_aarch64_tdep ();
 void
-_initialize_aarch64_tdep (void)
+_initialize_aarch64_tdep ()
 {
   gdbarch_register (bfd_arch_aarch64, aarch64_gdbarch_init,
 		    aarch64_dump_tdep);
@@ -3432,29 +4766,29 @@ When on, AArch64 specific debugging is e
 /* AArch64 process record-replay related structures, defines etc.  */
 
 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
-        do  \
-          { \
-            unsigned int reg_len = LENGTH; \
-            if (reg_len) \
-              { \
-                REGS = XNEWVEC (uint32_t, reg_len); \
-                memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
-              } \
-          } \
-        while (0)
+	do  \
+	  { \
+	    unsigned int reg_len = LENGTH; \
+	    if (reg_len) \
+	      { \
+		REGS = XNEWVEC (uint32_t, reg_len); \
+		memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
+	      } \
+	  } \
+	while (0)
 
 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
-        do  \
-          { \
-            unsigned int mem_len = LENGTH; \
-            if (mem_len) \
-            { \
-              MEMS =  XNEWVEC (struct aarch64_mem_r, mem_len);  \
-              memcpy(&MEMS->len, &RECORD_BUF[0], \
-                     sizeof(struct aarch64_mem_r) * LENGTH); \
-            } \
-          } \
-          while (0)
+	do  \
+	  { \
+	    unsigned int mem_len = LENGTH; \
+	    if (mem_len) \
+	      { \
+		MEMS =  XNEWVEC (struct aarch64_mem_r, mem_len);  \
+		memcpy(MEMS, &RECORD_BUF[0], \
+		       sizeof(struct aarch64_mem_r) * LENGTH); \
+	      } \
+	  } \
+	  while (0)
 
 /* AArch64 record/replay structures and enumerations.  */
 
@@ -3471,7 +4805,7 @@ enum aarch64_record_result
   AARCH64_RECORD_UNKNOWN
 };
 
-typedef struct insn_decode_record_t
+struct aarch64_insn_decode_record
 {
   struct gdbarch *gdbarch;
   struct regcache *regcache;
@@ -3481,12 +4815,12 @@ typedef struct insn_decode_record_t
   uint32_t reg_rec_count;              /* Count of register records.  */
   uint32_t *aarch64_regs;              /* Registers to be recorded.  */
   struct aarch64_mem_r *aarch64_mems;  /* Memory locations to be recorded.  */
-} insn_decode_record;
+};
 
 /* Record handler for data processing - register instructions.  */
 
 static unsigned int
-aarch64_record_data_proc_reg (insn_decode_record *aarch64_insn_r)
+aarch64_record_data_proc_reg (aarch64_insn_decode_record *aarch64_insn_r)
 {
   uint8_t reg_rd, insn_bits24_27, insn_bits21_23;
   uint32_t record_buf[4];
@@ -3562,7 +4896,7 @@ aarch64_record_data_proc_reg (insn_decod
 /* Record handler for data processing - immediate instructions.  */
 
 static unsigned int
-aarch64_record_data_proc_imm (insn_decode_record *aarch64_insn_r)
+aarch64_record_data_proc_imm (aarch64_insn_decode_record *aarch64_insn_r)
 {
   uint8_t reg_rd, insn_bit23, insn_bits24_27, setflags;
   uint32_t record_buf[4];
@@ -3607,9 +4941,11 @@ aarch64_record_data_proc_imm (insn_decod
 /* Record handler for branch, exception generation and system instructions.  */
 
 static unsigned int
-aarch64_record_branch_except_sys (insn_decode_record *aarch64_insn_r)
+aarch64_record_branch_except_sys (aarch64_insn_decode_record *aarch64_insn_r)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (aarch64_insn_r->gdbarch);
+
+  aarch64_gdbarch_tdep *tdep
+    = gdbarch_tdep<aarch64_gdbarch_tdep> (aarch64_insn_r->gdbarch);
   uint8_t insn_bits24_27, insn_bits28_31, insn_bits22_23;
   uint32_t record_buf[4];
 
@@ -3687,7 +5023,7 @@ aarch64_record_branch_except_sys (insn_d
 /* Record handler for advanced SIMD load and store instructions.  */
 
 static unsigned int
-aarch64_record_asimd_load_store (insn_decode_record *aarch64_insn_r)
+aarch64_record_asimd_load_store (aarch64_insn_decode_record *aarch64_insn_r)
 {
   CORE_ADDR address;
   uint64_t addr_offset = 0;
@@ -3712,46 +5048,46 @@ aarch64_record_asimd_load_store (insn_de
       uint8_t sindex, scale, selem, esize, replicate = 0;
       scale = opcode_bits >> 2;
       selem = ((opcode_bits & 0x02) |
-              bit (aarch64_insn_r->aarch64_insn, 21)) + 1;
+	      bit (aarch64_insn_r->aarch64_insn, 21)) + 1;
       switch (scale)
-        {
-        case 1:
-          if (size_bits & 0x01)
-            return AARCH64_RECORD_UNKNOWN;
-          break;
-        case 2:
-          if ((size_bits >> 1) & 0x01)
-            return AARCH64_RECORD_UNKNOWN;
-          if (size_bits & 0x01)
-            {
-              if (!((opcode_bits >> 1) & 0x01))
-                scale = 3;
-              else
-                return AARCH64_RECORD_UNKNOWN;
-            }
-          break;
-        case 3:
-          if (bit (aarch64_insn_r->aarch64_insn, 22) && !(opcode_bits & 0x01))
-            {
-              scale = size_bits;
-              replicate = 1;
-              break;
-            }
-          else
-            return AARCH64_RECORD_UNKNOWN;
-        default:
-          break;
-        }
+	{
+	case 1:
+	  if (size_bits & 0x01)
+	    return AARCH64_RECORD_UNKNOWN;
+	  break;
+	case 2:
+	  if ((size_bits >> 1) & 0x01)
+	    return AARCH64_RECORD_UNKNOWN;
+	  if (size_bits & 0x01)
+	    {
+	      if (!((opcode_bits >> 1) & 0x01))
+		scale = 3;
+	      else
+		return AARCH64_RECORD_UNKNOWN;
+	    }
+	  break;
+	case 3:
+	  if (bit (aarch64_insn_r->aarch64_insn, 22) && !(opcode_bits & 0x01))
+	    {
+	      scale = size_bits;
+	      replicate = 1;
+	      break;
+	    }
+	  else
+	    return AARCH64_RECORD_UNKNOWN;
+	default:
+	  break;
+	}
       esize = 8 << scale;
       if (replicate)
-        for (sindex = 0; sindex < selem; sindex++)
-          {
-            record_buf[reg_index++] = reg_rt + AARCH64_V0_REGNUM;
-            reg_rt = (reg_rt + 1) % 32;
-          }
+	for (sindex = 0; sindex < selem; sindex++)
+	  {
+	    record_buf[reg_index++] = reg_rt + AARCH64_V0_REGNUM;
+	    reg_rt = (reg_rt + 1) % 32;
+	  }
       else
-        {
-          for (sindex = 0; sindex < selem; sindex++)
+	{
+	  for (sindex = 0; sindex < selem; sindex++)
 	    {
 	      if (bit (aarch64_insn_r->aarch64_insn, 22))
 		record_buf[reg_index++] = reg_rt + AARCH64_V0_REGNUM;
@@ -3763,7 +5099,7 @@ aarch64_record_asimd_load_store (insn_de
 	      addr_offset = addr_offset + (esize / 8);
 	      reg_rt = (reg_rt + 1) % 32;
 	    }
-        }
+	}
     }
   /* Load/store multiple structure.  */
   else
@@ -3773,69 +5109,69 @@ aarch64_record_asimd_load_store (insn_de
 
       esize = 8 << size_bits;
       if (bit (aarch64_insn_r->aarch64_insn, 30))
-        elements = 128 / esize;
+	elements = 128 / esize;
       else
-        elements = 64 / esize;
+	elements = 64 / esize;
 
       switch (opcode_bits)
-        {
-        /*LD/ST4 (4 Registers).  */
-        case 0:
-          rpt = 1;
-          selem = 4;
-          break;
-        /*LD/ST1 (4 Registers).  */
-        case 2:
-          rpt = 4;
-          selem = 1;
-          break;
-        /*LD/ST3 (3 Registers).  */
-        case 4:
-          rpt = 1;
-          selem = 3;
-          break;
-        /*LD/ST1 (3 Registers).  */
-        case 6:
-          rpt = 3;
-          selem = 1;
-          break;
-        /*LD/ST1 (1 Register).  */
-        case 7:
-          rpt = 1;
-          selem = 1;
-          break;
-        /*LD/ST2 (2 Registers).  */
-        case 8:
-          rpt = 1;
-          selem = 2;
-          break;
-        /*LD/ST1 (2 Registers).  */
-        case 10:
-          rpt = 2;
-          selem = 1;
-          break;
-        default:
-          return AARCH64_RECORD_UNSUPPORTED;
-          break;
-        }
+	{
+	/*LD/ST4 (4 Registers).  */
+	case 0:
+	  rpt = 1;
+	  selem = 4;
+	  break;
+	/*LD/ST1 (4 Registers).  */
+	case 2:
+	  rpt = 4;
+	  selem = 1;
+	  break;
+	/*LD/ST3 (3 Registers).  */
+	case 4:
+	  rpt = 1;
+	  selem = 3;
+	  break;
+	/*LD/ST1 (3 Registers).  */
+	case 6:
+	  rpt = 3;
+	  selem = 1;
+	  break;
+	/*LD/ST1 (1 Register).  */
+	case 7:
+	  rpt = 1;
+	  selem = 1;
+	  break;
+	/*LD/ST2 (2 Registers).  */
+	case 8:
+	  rpt = 1;
+	  selem = 2;
+	  break;
+	/*LD/ST1 (2 Registers).  */
+	case 10:
+	  rpt = 2;
+	  selem = 1;
+	  break;
+	default:
+	  return AARCH64_RECORD_UNSUPPORTED;
+	  break;
+	}
       for (rindex = 0; rindex < rpt; rindex++)
-        for (eindex = 0; eindex < elements; eindex++)
-          {
-            uint8_t reg_tt, sindex;
-            reg_tt = (reg_rt + rindex) % 32;
-            for (sindex = 0; sindex < selem; sindex++)
-              {
-                if (bit (aarch64_insn_r->aarch64_insn, 22))
-                  record_buf[reg_index++] = reg_tt + AARCH64_V0_REGNUM;
-                else
-                  {
-                    record_buf_mem[mem_index++] = esize / 8;
-                    record_buf_mem[mem_index++] = address + addr_offset;
-                  }
-                addr_offset = addr_offset + (esize / 8);
-                reg_tt = (reg_tt + 1) % 32;
-              }
-          }
+	for (eindex = 0; eindex < elements; eindex++)
+	  {
+	    uint8_t reg_tt, sindex;
+	    reg_tt = (reg_rt + rindex) % 32;
+	    for (sindex = 0; sindex < selem; sindex++)
+	      {
+		if (bit (aarch64_insn_r->aarch64_insn, 22))
+		  record_buf[reg_index++] = reg_tt + AARCH64_V0_REGNUM;
+		else
+		  {
+		    record_buf_mem[mem_index++] = esize / 8;
+		    record_buf_mem[mem_index++] = address + addr_offset;
+		  }
+		addr_offset = addr_offset + (esize / 8);
+		reg_tt = (reg_tt + 1) % 32;
+	      }
+	  }
     }
 
   if (bit (aarch64_insn_r->aarch64_insn, 23))
@@ -3844,16 +5180,16 @@ aarch64_record_asimd_load_store (insn_de
   aarch64_insn_r->reg_rec_count = reg_index;
   aarch64_insn_r->mem_rec_count = mem_index / 2;
   MEM_ALLOC (aarch64_insn_r->aarch64_mems, aarch64_insn_r->mem_rec_count,
-             record_buf_mem);
+	     record_buf_mem);
   REG_ALLOC (aarch64_insn_r->aarch64_regs, aarch64_insn_r->reg_rec_count,
-             record_buf);
+	     record_buf);
   return AARCH64_RECORD_SUCCESS;
 }
 
 /* Record handler for load and store instructions.  */
 
 static unsigned int
-aarch64_record_load_store (insn_decode_record *aarch64_insn_r)
+aarch64_record_load_store (aarch64_insn_decode_record *aarch64_insn_r)
 {
   uint8_t insn_bits24_27, insn_bits28_29, insn_bits10_11;
   uint8_t insn_bit23, insn_bit21;
@@ -3917,9 +5253,9 @@ aarch64_record_load_store (insn_decode_r
       if (record_debug)
 	debug_printf ("Process record: load register (literal)\n");
       if (vector_flag)
-        record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
+	record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
       else
-        record_buf[0] = reg_rt;
+	record_buf[0] = reg_rt;
       aarch64_insn_r->reg_rec_count = 1;
     }
   /* All types of load/store pair instructions decoding.  */
@@ -3929,46 +5265,46 @@ aarch64_record_load_store (insn_decode_r
 	debug_printf ("Process record: load/store pair\n");
 
       if (ld_flag)
-        {
-          if (vector_flag)
-            {
-              record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
-              record_buf[1] = reg_rt2 + AARCH64_V0_REGNUM;
-            }
-          else
-            {
-              record_buf[0] = reg_rt;
-              record_buf[1] = reg_rt2;
-            }
-          aarch64_insn_r->reg_rec_count = 2;
-        }
+	{
+	  if (vector_flag)
+	    {
+	      record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
+	      record_buf[1] = reg_rt2 + AARCH64_V0_REGNUM;
+	    }
+	  else
+	    {
+	      record_buf[0] = reg_rt;
+	      record_buf[1] = reg_rt2;
+	    }
+	  aarch64_insn_r->reg_rec_count = 2;
+	}
       else
-        {
-          uint16_t imm7_off;
-          imm7_off = bits (aarch64_insn_r->aarch64_insn, 15, 21);
-          if (!vector_flag)
-            size_bits = size_bits >> 1;
-          datasize = 8 << (2 + size_bits);
-          offset = (imm7_off & 0x40) ? (~imm7_off & 0x007f) + 1 : imm7_off;
-          offset = offset << (2 + size_bits);
-          regcache_raw_read_unsigned (aarch64_insn_r->regcache, reg_rn,
-                                      &address);
-          if (!((insn_bits24_27 & 0x0b) == 0x08 && insn_bit23))
-            {
-              if (imm7_off & 0x40)
-                address = address - offset;
-              else
-                address = address + offset;
-            }
-
-          record_buf_mem[0] = datasize / 8;
-          record_buf_mem[1] = address;
-          record_buf_mem[2] = datasize / 8;
-          record_buf_mem[3] = address + (datasize / 8);
-          aarch64_insn_r->mem_rec_count = 2;
-        }
+	{
+	  uint16_t imm7_off;
+	  imm7_off = bits (aarch64_insn_r->aarch64_insn, 15, 21);
+	  if (!vector_flag)
+	    size_bits = size_bits >> 1;
+	  datasize = 8 << (2 + size_bits);
+	  offset = (imm7_off & 0x40) ? (~imm7_off & 0x007f) + 1 : imm7_off;
+	  offset = offset << (2 + size_bits);
+	  regcache_raw_read_unsigned (aarch64_insn_r->regcache, reg_rn,
+				      &address);
+	  if (!((insn_bits24_27 & 0x0b) == 0x08 && insn_bit23))
+	    {
+	      if (imm7_off & 0x40)
+		address = address - offset;
+	      else
+		address = address + offset;
+	    }
+
+	  record_buf_mem[0] = datasize / 8;
+	  record_buf_mem[1] = address;
+	  record_buf_mem[2] = datasize / 8;
+	  record_buf_mem[3] = address + (datasize / 8);
+	  aarch64_insn_r->mem_rec_count = 2;
+	}
       if (bit (aarch64_insn_r->aarch64_insn, 23))
-        record_buf[aarch64_insn_r->reg_rec_count++] = reg_rn;
+	record_buf[aarch64_insn_r->reg_rec_count++] = reg_rn;
     }
   /* Load/store register (unsigned immediate) instructions.  */
   else if ((insn_bits24_27 & 0x0b) == 0x09 && insn_bits28_29 == 0x03)
@@ -4010,26 +5346,26 @@ aarch64_record_load_store (insn_decode_r
 	}
 
       if (!ld_flag)
-        {
-          offset = bits (aarch64_insn_r->aarch64_insn, 10, 21);
-          datasize = 8 << size_bits;
-          regcache_raw_read_unsigned (aarch64_insn_r->regcache, reg_rn,
-                                      &address);
-          offset = offset << size_bits;
-          address = address + offset;
-
-          record_buf_mem[0] = datasize >> 3;
-          record_buf_mem[1] = address;
-          aarch64_insn_r->mem_rec_count = 1;
-        }
+	{
+	  offset = bits (aarch64_insn_r->aarch64_insn, 10, 21);
+	  datasize = 8 << size_bits;
+	  regcache_raw_read_unsigned (aarch64_insn_r->regcache, reg_rn,
+				      &address);
+	  offset = offset << size_bits;
+	  address = address + offset;
+
+	  record_buf_mem[0] = datasize >> 3;
+	  record_buf_mem[1] = address;
+	  aarch64_insn_r->mem_rec_count = 1;
+	}
       else
-        {
-          if (vector_flag)
-            record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
-          else
-            record_buf[0] = reg_rt;
-          aarch64_insn_r->reg_rec_count = 1;
-        }
+	{
+	  if (vector_flag)
+	    record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
+	  else
+	    record_buf[0] = reg_rt;
+	  aarch64_insn_r->reg_rec_count = 1;
+	}
     }
   /* Load/store register (register offset) instructions.  */
   else if ((insn_bits24_27 & 0x0b) == 0x08 && insn_bits28_29 == 0x03
@@ -4039,42 +5375,42 @@ aarch64_record_load_store (insn_decode_r
 	debug_printf ("Process record: load/store (register offset)\n");
       opc = bits (aarch64_insn_r->aarch64_insn, 22, 23);
       if (!(opc >> 1))
-        if (opc & 0x01)
-          ld_flag = 0x01;
-        else
-          ld_flag = 0x0;
+	if (opc & 0x01)
+	  ld_flag = 0x01;
+	else
+	  ld_flag = 0x0;
       else
-        if (size_bits != 0x03)
-          ld_flag = 0x01;
-        else
-          return AARCH64_RECORD_UNKNOWN;
+	if (size_bits != 0x03)
+	  ld_flag = 0x01;
+	else
+	  return AARCH64_RECORD_UNKNOWN;
 
       if (!ld_flag)
-        {
-          ULONGEST reg_rm_val;
+	{
+	  ULONGEST reg_rm_val;
 
-          regcache_raw_read_unsigned (aarch64_insn_r->regcache,
-                     bits (aarch64_insn_r->aarch64_insn, 16, 20), &reg_rm_val);
-          if (bit (aarch64_insn_r->aarch64_insn, 12))
-            offset = reg_rm_val << size_bits;
-          else
-            offset = reg_rm_val;
-          datasize = 8 << size_bits;
-          regcache_raw_read_unsigned (aarch64_insn_r->regcache, reg_rn,
-                                      &address);
-          address = address + offset;
-          record_buf_mem[0] = datasize >> 3;
-          record_buf_mem[1] = address;
-          aarch64_insn_r->mem_rec_count = 1;
-        }
+	  regcache_raw_read_unsigned (aarch64_insn_r->regcache,
+		     bits (aarch64_insn_r->aarch64_insn, 16, 20), &reg_rm_val);
+	  if (bit (aarch64_insn_r->aarch64_insn, 12))
+	    offset = reg_rm_val << size_bits;
+	  else
+	    offset = reg_rm_val;
+	  datasize = 8 << size_bits;
+	  regcache_raw_read_unsigned (aarch64_insn_r->regcache, reg_rn,
+				      &address);
+	  address = address + offset;
+	  record_buf_mem[0] = datasize >> 3;
+	  record_buf_mem[1] = address;
+	  aarch64_insn_r->mem_rec_count = 1;
+	}
       else
-        {
-          if (vector_flag)
-            record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
-          else
-            record_buf[0] = reg_rt;
-          aarch64_insn_r->reg_rec_count = 1;
-        }
+	{
+	  if (vector_flag)
+	    record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
+	  else
+	    record_buf[0] = reg_rt;
+	  aarch64_insn_r->reg_rec_count = 1;
+	}
     }
   /* Load/store register (immediate and unprivileged) instructions.  */
   else if ((insn_bits24_27 & 0x0b) == 0x08 && insn_bits28_29 == 0x03
@@ -4087,61 +5423,61 @@ aarch64_record_load_store (insn_decode_r
 	}
       opc = bits (aarch64_insn_r->aarch64_insn, 22, 23);
       if (!(opc >> 1))
-        if (opc & 0x01)
-          ld_flag = 0x01;
-        else
-          ld_flag = 0x0;
+	if (opc & 0x01)
+	  ld_flag = 0x01;
+	else
+	  ld_flag = 0x0;
       else
-        if (size_bits != 0x03)
-          ld_flag = 0x01;
-        else
-          return AARCH64_RECORD_UNKNOWN;
+	if (size_bits != 0x03)
+	  ld_flag = 0x01;
+	else
+	  return AARCH64_RECORD_UNKNOWN;
 
       if (!ld_flag)
-        {
-          uint16_t imm9_off;
-          imm9_off = bits (aarch64_insn_r->aarch64_insn, 12, 20);
-          offset = (imm9_off & 0x0100) ? (((~imm9_off) & 0x01ff) + 1) : imm9_off;
-          datasize = 8 << size_bits;
-          regcache_raw_read_unsigned (aarch64_insn_r->regcache, reg_rn,
-                                      &address);
-          if (insn_bits10_11 != 0x01)
-            {
-              if (imm9_off & 0x0100)
-                address = address - offset;
-              else
-                address = address + offset;
-            }
-          record_buf_mem[0] = datasize >> 3;
-          record_buf_mem[1] = address;
-          aarch64_insn_r->mem_rec_count = 1;
-        }
+	{
+	  uint16_t imm9_off;
+	  imm9_off = bits (aarch64_insn_r->aarch64_insn, 12, 20);
+	  offset = (imm9_off & 0x0100) ? (((~imm9_off) & 0x01ff) + 1) : imm9_off;
+	  datasize = 8 << size_bits;
+	  regcache_raw_read_unsigned (aarch64_insn_r->regcache, reg_rn,
+				      &address);
+	  if (insn_bits10_11 != 0x01)
+	    {
+	      if (imm9_off & 0x0100)
+		address = address - offset;
+	      else
+		address = address + offset;
+	    }
+	  record_buf_mem[0] = datasize >> 3;
+	  record_buf_mem[1] = address;
+	  aarch64_insn_r->mem_rec_count = 1;
+	}
       else
-        {
-          if (vector_flag)
-            record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
-          else
-            record_buf[0] = reg_rt;
-          aarch64_insn_r->reg_rec_count = 1;
-        }
+	{
+	  if (vector_flag)
+	    record_buf[0] = reg_rt + AARCH64_V0_REGNUM;
+	  else
+	    record_buf[0] = reg_rt;
+	  aarch64_insn_r->reg_rec_count = 1;
+	}
       if (insn_bits10_11 == 0x01 || insn_bits10_11 == 0x03)
-        record_buf[aarch64_insn_r->reg_rec_count++] = reg_rn;
+	record_buf[aarch64_insn_r->reg_rec_count++] = reg_rn;
     }
   /* Advanced SIMD load/store instructions.  */
   else
     return aarch64_record_asimd_load_store (aarch64_insn_r);
 
   MEM_ALLOC (aarch64_insn_r->aarch64_mems, aarch64_insn_r->mem_rec_count,
-             record_buf_mem);
+	     record_buf_mem);
   REG_ALLOC (aarch64_insn_r->aarch64_regs, aarch64_insn_r->reg_rec_count,
-             record_buf);
+	     record_buf);
   return AARCH64_RECORD_SUCCESS;
 }
 
 /* Record handler for data processing SIMD and floating point instructions.  */
 
 static unsigned int
-aarch64_record_data_proc_simd_fp (insn_decode_record *aarch64_insn_r)
+aarch64_record_data_proc_simd_fp (aarch64_insn_decode_record *aarch64_insn_r)
 {
   uint8_t insn_bit21, opcode, rmode, reg_rd;
   uint8_t insn_bits24_27, insn_bits28_31, insn_bits10_11, insn_bits12_15;
@@ -4183,7 +5519,7 @@ aarch64_record_data_proc_simd_fp (insn_d
 	  record_buf[0] = AARCH64_CPSR_REGNUM;
 	}
       /* Floating point - data processing (2-source) and
-         conditional select instructions.  */
+	 conditional select instructions.  */
       else if (insn_bits10_11 == 0x02 || insn_bits10_11 == 0x03)
 	{
 	  if (record_debug)
@@ -4240,10 +5576,10 @@ aarch64_record_data_proc_simd_fp (insn_d
 		}
 	      else
 		return AARCH64_RECORD_UNKNOWN;
-            }
+	    }
 	  else
 	    return AARCH64_RECORD_UNKNOWN;
-        }
+	}
       else
 	return AARCH64_RECORD_UNKNOWN;
     }
@@ -4277,8 +5613,15 @@ aarch64_record_data_proc_simd_fp (insn_d
   if (record_debug)
     debug_printf ("\n");
 
+  /* Record the V/X register.  */
+  aarch64_insn_r->reg_rec_count++;
+
+  /* Some of these instructions may set bits in the FPSR, so record it
+     too.  */
+  record_buf[1] = AARCH64_FPSR_REGNUM;
   aarch64_insn_r->reg_rec_count++;
-  gdb_assert (aarch64_insn_r->reg_rec_count == 1);
+
+  gdb_assert (aarch64_insn_r->reg_rec_count == 2);
   REG_ALLOC (aarch64_insn_r->aarch64_regs, aarch64_insn_r->reg_rec_count,
 	     record_buf);
   return AARCH64_RECORD_SUCCESS;
@@ -4287,7 +5630,7 @@ aarch64_record_data_proc_simd_fp (insn_d
 /* Decodes insns type and invokes its record handler.  */
 
 static unsigned int
-aarch64_record_decode_insn_handler (insn_decode_record *aarch64_insn_r)
+aarch64_record_decode_insn_handler (aarch64_insn_decode_record *aarch64_insn_r)
 {
   uint32_t ins_bit25, ins_bit26, ins_bit27, ins_bit28;
 
@@ -4322,7 +5665,7 @@ aarch64_record_decode_insn_handler (insn
 /* Cleans up local record registers and memory allocations.  */
 
 static void
-deallocate_reg_mem (insn_decode_record *record)
+deallocate_reg_mem (aarch64_insn_decode_record *record)
 {
   xfree (record->aarch64_regs);
   xfree (record->aarch64_mems);
@@ -4337,15 +5680,14 @@ aarch64_process_record_test (void)
   struct gdbarch_info info;
   uint32_t ret;
 
-  gdbarch_info_init (&info);
   info.bfd_arch_info = bfd_scan_arch ("aarch64");
 
   struct gdbarch *gdbarch = gdbarch_find_by_info (info);
   SELF_CHECK (gdbarch != NULL);
 
-  insn_decode_record aarch64_record;
+  aarch64_insn_decode_record aarch64_record;
 
-  memset (&aarch64_record, 0, sizeof (insn_decode_record));
+  memset (&aarch64_record, 0, sizeof (aarch64_insn_decode_record));
   aarch64_record.regcache = NULL;
   aarch64_record.this_addr = 0;
   aarch64_record.gdbarch = gdbarch;
@@ -4375,10 +5717,10 @@ aarch64_process_record (struct gdbarch *
   uint8_t insn_size = 4;
   uint32_t ret = 0;
   gdb_byte buf[insn_size];
-  insn_decode_record aarch64_record;
+  aarch64_insn_decode_record aarch64_record;
 
   memset (&buf[0], 0, insn_size);
-  memset (&aarch64_record, 0, sizeof (insn_decode_record));
+  memset (&aarch64_record, 0, sizeof (aarch64_insn_decode_record));
   target_read_memory (insn_addr, &buf[0], insn_size);
   aarch64_record.aarch64_insn
     = (uint32_t) extract_unsigned_integer (&buf[0],
@@ -4391,10 +5733,11 @@ aarch64_process_record (struct gdbarch *
   ret = aarch64_record_decode_insn_handler (&aarch64_record);
   if (ret == AARCH64_RECORD_UNSUPPORTED)
     {
-      printf_unfiltered (_("Process record does not support instruction "
-			   "0x%0x at address %s.\n"),
-			 aarch64_record.aarch64_insn,
-			 paddress (gdbarch, insn_addr));
+      gdb_printf (gdb_stderr,
+		  _("Process record does not support instruction "
+		    "0x%0x at address %s.\n"),
+		  aarch64_record.aarch64_insn,
+		  paddress (gdbarch, insn_addr));
       ret = -1;
     }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-tdep.h ./gdb/aarch64-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aarch64-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aarch64-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GDB on AArch64 systems.
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -23,6 +23,9 @@
 #define AARCH64_TDEP_H
 
 #include "arch/aarch64.h"
+#include "displaced-stepping.h"
+#include "infrun.h"
+#include "gdbarch.h"
 
 /* Forward declarations.  */
 struct gdbarch;
@@ -31,9 +34,8 @@ struct regset;
 /* AArch64 Dwarf register numbering.  */
 #define AARCH64_DWARF_X0   0
 #define AARCH64_DWARF_SP  31
-#define AARCH64_DWARF_PAUTH_RA_STATE  34
-#define AARCH64_DWARF_PAUTH_DMASK  35
-#define AARCH64_DWARF_PAUTH_CMASK  36
+#define AARCH64_DWARF_PC  32
+#define AARCH64_DWARF_RA_SIGN_STATE  34
 #define AARCH64_DWARF_V0  64
 #define AARCH64_DWARF_SVE_VG   46
 #define AARCH64_DWARF_SVE_FFR  47
@@ -46,7 +48,6 @@ struct regset;
 #define H_REGISTER_SIZE  2
 #define S_REGISTER_SIZE  4
 #define D_REGISTER_SIZE  8
-#define V_REGISTER_SIZE 16
 #define Q_REGISTER_SIZE 16
 
 /* Total number of general (X) registers.  */
@@ -59,31 +60,48 @@ struct regset;
 #define AARCH64_DISPLACED_MODIFIED_INSNS 1
 
 /* Target-dependent structure in gdbarch.  */
-struct gdbarch_tdep
+struct aarch64_gdbarch_tdep : gdbarch_tdep_base
 {
   /* Lowest address at which instructions will appear.  */
-  CORE_ADDR lowest_pc;
+  CORE_ADDR lowest_pc = 0;
 
   /* Offset to PC value in jump buffer.  If this is negative, longjmp
      support will be disabled.  */
-  int jb_pc;
+  int jb_pc = 0;
 
   /* And the size of each entry in the buf.  */
-  size_t jb_elt_size;
+  size_t jb_elt_size = 0;
 
   /* Types for AdvSISD registers.  */
-  struct type *vnq_type;
-  struct type *vnd_type;
-  struct type *vns_type;
-  struct type *vnh_type;
-  struct type *vnb_type;
-  struct type *vnv_type;
+  struct type *vnq_type = nullptr;
+  struct type *vnd_type = nullptr;
+  struct type *vns_type = nullptr;
+  struct type *vnh_type = nullptr;
+  struct type *vnb_type = nullptr;
+  struct type *vnv_type = nullptr;
+
+  /* Types for SME ZA tiles and tile slices pseudo-registers.  */
+  struct type *sme_tile_type_q = nullptr;
+  struct type *sme_tile_type_d = nullptr;
+  struct type *sme_tile_type_s = nullptr;
+  struct type *sme_tile_type_h = nullptr;
+  struct type *sme_tile_type_b = nullptr;
+  struct type *sme_tile_slice_type_q = nullptr;
+  struct type *sme_tile_slice_type_d = nullptr;
+  struct type *sme_tile_slice_type_s = nullptr;
+  struct type *sme_tile_slice_type_h = nullptr;
+  struct type *sme_tile_slice_type_b = nullptr;
+
+  /* Vector of names for SME pseudo-registers.  The number of elements is
+     different for each distinct svl value.  */
+  std::vector<std::string> sme_pseudo_names;
 
   /* syscall record.  */
-  int (*aarch64_syscall_record) (struct regcache *regcache, unsigned long svc_number);
+  int (*aarch64_syscall_record) (struct regcache *regcache,
+				 unsigned long svc_number) = nullptr;
 
   /* The VQ value for SVE targets, or zero if SVE is not supported.  */
-  uint64_t vq;
+  uint64_t vq = 0;
 
   /* Returns true if the target supports SVE.  */
   bool has_sve () const
@@ -91,32 +109,98 @@ struct gdbarch_tdep
     return vq != 0;
   }
 
-  int pauth_reg_base;
-  int pauth_ra_state_regnum;
+  int pauth_reg_base = 0;
+  /* Number of pauth masks.  */
+  int pauth_reg_count = 0;
+  int ra_sign_state_regnum = 0;
 
   /* Returns true if the target supports pauth.  */
   bool has_pauth () const
   {
     return pauth_reg_base != -1;
   }
+
+  /* First MTE register.  This is -1 if no MTE registers are available.  */
+  int mte_reg_base = 0;
+
+  /* Returns true if the target supports MTE.  */
+  bool has_mte () const
+  {
+    return mte_reg_base != -1;
+  }
+
+  /* TLS registers.  This is -1 if the TLS registers are not available.  */
+  int tls_regnum_base = 0;
+  int tls_register_count = 0;
+
+  bool has_tls() const
+  {
+    return tls_regnum_base != -1;
+  }
+
+  /* The W pseudo-registers.  */
+  int w_pseudo_base = 0;
+  int w_pseudo_count = 0;
+
+  /* SME feature fields.  */
+
+  /* Index of the first SME register.  This is -1 if SME is not supported.  */
+  int sme_reg_base = 0;
+  /* svg register index.  */
+  int sme_svg_regnum = 0;
+  /* svcr register index.  */
+  int sme_svcr_regnum = 0;
+  /* ZA register index.  */
+  int sme_za_regnum = 0;
+  /* Index of the first SME pseudo-register.  This is -1 if SME is not
+     supported.  */
+  int sme_pseudo_base = 0;
+  /* Total number of SME pseudo-registers.  */
+  int sme_pseudo_count = 0;
+  /* First tile slice pseudo-register index.  */
+  int sme_tile_slice_pseudo_base = 0;
+  /* Total number of tile slice pseudo-registers.  */
+  int sme_tile_slice_pseudo_count = 0;
+  /* First tile pseudo-register index.  */
+  int sme_tile_pseudo_base = 0;
+  /* The streaming vector quotient (svq) for SME, or zero if SME is not
+     supported.  */
+  size_t sme_svq = 0;
+
+  /* Return true if the target supports SME, and false otherwise.  */
+  bool has_sme () const
+  {
+    return sme_svq != 0;
+  }
+
+  /* Index of the SME2 ZT0 register.  This is -1 if SME2 is not
+     supported.  */
+  int sme2_zt0_regnum = -1;
+
+  /* Return true if the target supports SME2, and false otherwise.  */
+  bool has_sme2 () const
+  {
+    return sme2_zt0_regnum > 0;
+  }
 };
 
-const target_desc *aarch64_read_description (uint64_t vq, bool pauth_p);
+const target_desc *aarch64_read_description (const aarch64_features &features);
+aarch64_features
+aarch64_features_from_target_desc (const struct target_desc *tdesc);
 
 extern int aarch64_process_record (struct gdbarch *gdbarch,
-                               struct regcache *regcache, CORE_ADDR addr);
+			       struct regcache *regcache, CORE_ADDR addr);
 
-struct displaced_step_closure *
+displaced_step_copy_insn_closure_up
   aarch64_displaced_step_copy_insn (struct gdbarch *gdbarch,
 				    CORE_ADDR from, CORE_ADDR to,
 				    struct regcache *regs);
 
 void aarch64_displaced_step_fixup (struct gdbarch *gdbarch,
-				   struct displaced_step_closure *dsc,
+				   displaced_step_copy_insn_closure *dsc,
 				   CORE_ADDR from, CORE_ADDR to,
-				   struct regcache *regs);
+				   struct regcache *regs, bool completed_p);
 
-int aarch64_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
-					  struct displaced_step_closure *closure);
+bool aarch64_displaced_step_hw_singlestep (struct gdbarch *gdbarch);
 
 #endif /* aarch64-tdep.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/acinclude.m4 ./gdb/acinclude.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/acinclude.m4	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/acinclude.m4	2024-02-01 01:47:15.000000000 +0000
@@ -4,185 +4,57 @@ dnl major rewriting for Tcl 7.5 by Don L
 # Keep these includes in sync with the aclocal_m4_deps list in
 # Makefile.in.
 
+dnl NB: When possible, try to avoid explicit includes of ../config/ files.
+dnl They're normally found by aclocal automatically and recorded in aclocal.m4.
+dnl However, some are kept here explicitly to silence harmless warnings from
+dnl aclocal when it finds AM_xxx macros via local search paths instead of
+dnl system search paths.
+
 m4_include(acx_configure_dir.m4)
 
 # This gets GDB_AC_TRANSFORM.
 m4_include(transform.m4)
 
+# This get AM_GDB_COMPILER_TYPE.
+m4_include(../gdbsupport/compiler-type.m4)
+
 # This gets AM_GDB_WARNINGS.
-m4_include(warning.m4)
+m4_include(../gdbsupport/warning.m4)
 
 # AM_GDB_UBSAN
 m4_include(sanitize.m4)
 
 # This gets GDB_AC_SELFTEST.
-m4_include(selftest.m4)
+m4_include(../gdbsupport/selftest.m4)
 
 dnl gdb/configure.in uses BFD_NEED_DECLARATION, so get its definition.
 m4_include(../bfd/bfd.m4)
 
-dnl This gets the standard macros.
-m4_include(../config/acinclude.m4)
-
-dnl This gets AC_PLUGINS, needed by ACX_LARGEFILE.
-m4_include(../config/plugins.m4)
-
-dnl For ACX_LARGEFILE.
-m4_include(../config/largefile.m4)
-
-dnl For AM_SET_LEADING_DOT.
-m4_include(../config/lead-dot.m4)
-
-dnl This gets autoconf bugfixes.
-m4_include(../config/override.m4)
-
-dnl For ZW_GNU_GETTEXT_SISTER_DIR.
-m4_include(../config/gettext-sister.m4)
-
-dnl For AC_LIB_HAVE_LINKFLAGS.
-m4_include(../config/lib-ld.m4)
-m4_include(../config/lib-prefix.m4)
-m4_include(../config/lib-link.m4)
-
-dnl For ACX_PKGVERSION and ACX_BUGURL.
-m4_include(../config/acx.m4)
-
-dnl for TCL definitions
-m4_include(../config/tcl.m4)
-
-dnl For dependency tracking macros.
-m4_include([../config/depstand.m4])
-
 dnl For AM_LC_MESSAGES
 m4_include([../config/lcmessage.m4])
 
 dnl For AM_LANGINFO_CODESET.
 m4_include([../config/codeset.m4])
 
+dnl We need to explicitly include these before iconv.m4 to avoid warnings.
+m4_include([../config/lib-ld.m4])
+m4_include([../config/lib-prefix.m4])
+m4_include([../config/lib-link.m4])
 m4_include([../config/iconv.m4])
 
 m4_include([../config/zlib.m4])
+m4_include([../config/zstd.m4])
 
-m4_include([gdbsupport/common.m4])
+m4_include([../gdbsupport/common.m4])
 
 dnl For libiberty_INIT.
-m4_include(libiberty.m4)
+m4_include(../gdbsupport/libiberty.m4)
 
 dnl For GDB_AC_PTRACE.
-m4_include(ptrace.m4)
+m4_include(../gdbsupport/ptrace.m4)
 
 m4_include(ax_cxx_compile_stdcxx.m4)
 
-m4_include([../config/ax_pthread.m4])
-
-## ----------------------------------------- ##
-## ANSIfy the C compiler whenever possible.  ##
-## From Franc,ois Pinard                     ##
-## ----------------------------------------- ##
-
-# Copyright (C) 1996-2019 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-
-# serial 1
-
-# @defmac AC_PROG_CC_STDC
-# @maindex PROG_CC_STDC
-# @ovindex CC
-# If the C compiler in not in ANSI C mode by default, try to add an option
-# to output variable @code{CC} to make it so.  This macro tries various
-# options that select ANSI C on some system or another.  It considers the
-# compiler to be in ANSI C mode if it handles function prototypes correctly.
-#
-# If you use this macro, you should check after calling it whether the C
-# compiler has been set to accept ANSI C; if not, the shell variable
-# @code{am_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source
-# code in ANSI C, you can make an un-ANSIfied copy of it by using the
-# program @code{ansi2knr}, which comes with Ghostscript.
-# @end defmac
-
-AC_DEFUN([AM_PROG_CC_STDC],
-[AC_REQUIRE([AC_PROG_CC])
-AC_BEFORE([$0], [AC_C_INLINE])
-AC_BEFORE([$0], [AC_C_CONST])
-dnl Force this before AC_PROG_CPP.  Some cpp's, eg on HPUX, require
-dnl a magic option to avoid problems with ANSI preprocessor commands
-dnl like #elif.
-dnl FIXME: can't do this because then AC_AIX won't work due to a
-dnl circular dependency.
-dnl AC_BEFORE([$0], [AC_PROG_CPP])
-AC_MSG_CHECKING([for ${CC-cc} option to accept ANSI C])
-AC_CACHE_VAL(am_cv_prog_cc_stdc,
-[am_cv_prog_cc_stdc=no
-ac_save_CC="$CC"
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  AC_TRY_COMPILE(
-[#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-], [
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-],
-[am_cv_prog_cc_stdc="$ac_arg"; break])
-done
-CC="$ac_save_CC"
-])
-if test -z "$am_cv_prog_cc_stdc"; then
-  AC_MSG_RESULT([none needed])
-else
-  AC_MSG_RESULT([$am_cv_prog_cc_stdc])
-fi
-case "x$am_cv_prog_cc_stdc" in
-  x|xno) ;;
-  *) CC="$CC $am_cv_prog_cc_stdc" ;;
-esac
-])
-
 dnl written by Guido Draheim <guidod@gmx.de>, original by Alexandre Oliva 
 dnl Version 1.3 (2001/03/02)
 dnl source http://www.gnu.org/software/ac-archive/Miscellaneous/ac_define_dir.html
@@ -203,13 +75,22 @@ dnl to use a different cache variable na
 dnl in a different context somewhere else.
 dnl gcc_AC_CHECK_DECL(SYMBOL,
 dnl 	[ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, INCLUDES]]])
-AC_DEFUN([gcc_AC_CHECK_DECL],
-[AC_MSG_CHECKING([whether $1 is declared])
-AC_CACHE_VAL(gcc_cv_have_decl_$1,
-[AC_TRY_COMPILE([$4],
-[#ifndef $1
-char *(*pfn) = (char *(*)) $1 ;
-#endif], eval "gcc_cv_have_decl_$1=yes", eval "gcc_cv_have_decl_$1=no")])
+AC_DEFUN(
+  [gcc_AC_CHECK_DECL],
+  [AC_MSG_CHECKING([whether $1 is declared])
+   AC_CACHE_VAL(
+     [gcc_cv_have_decl_$1],
+     [AC_COMPILE_IFELSE(
+	[AC_LANG_PROGRAM(
+	   [$4],
+	   [#ifndef $1
+	    char *(*pfn) = (char *(*)) $1 ;
+	    #endif]
+	 )],
+	[eval "gcc_cv_have_decl_$1=yes"],
+	[eval "gcc_cv_have_decl_$1=no"]
+      )]
+   )
 if eval "test \"`echo '$gcc_cv_have_decl_'$1`\" = yes"; then
   AC_MSG_RESULT(yes) ; ifelse([$2], , :, [$2])
 else
@@ -264,7 +145,7 @@ AC_DEFUN([CY_AC_TCL_PRIVATE_HEADERS], [
   fi
 
   if test x"${private_dir}" = x; then
-    AC_ERROR(could not find private Tcl headers)
+    AC_MSG_ERROR(could not find private Tcl headers)
   else
     TCL_PRIVATE_INCLUDE="-I${private_dir}"
     AC_MSG_RESULT(${private_dir})
@@ -285,7 +166,7 @@ AC_DEFUN([CY_AC_TK_PRIVATE_HEADERS], [
   fi
 
   if test x"${private_dir}" = x; then
-    AC_ERROR(could not find Tk private headers)
+    AC_MSG_ERROR(could not find Tk private headers)
   else
     TK_PRIVATE_INCLUDE="-I${private_dir}"
     AC_MSG_RESULT(${private_dir})
@@ -348,21 +229,32 @@ AC_DEFUN([GDB_AC_CHECK_BFD], [
   OLD_CFLAGS=$CFLAGS
   OLD_LDFLAGS=$LDFLAGS
   OLD_LIBS=$LIBS
+  OLD_CC=$CC
   # Put the old CFLAGS/LDFLAGS last, in case the user's (C|LD)FLAGS
   # points somewhere with bfd, with -I/foo/lib and -L/foo/lib.  We
   # always want our bfd.
   CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
-  ZLIBDIR=`echo $zlibdir | sed 's,\$(top_builddir)/,,g'`
-  LDFLAGS="-L../bfd -L../libiberty $ZLIBDIR $LDFLAGS"
-  intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
-  LIBS="-lbfd -liberty -lz $intl $LIBS"
-  AC_CACHE_CHECK([$1], [$2],
-  [AC_TRY_LINK(
-  [#include <stdlib.h>
-  #include "bfd.h"
-  #include "$4"
-  ],
-  [return $3;], [[$2]=yes], [[$2]=no])])
+  LDFLAGS="-L../bfd -L../libiberty $LDFLAGS"
+  # LTLIBINTL because we use libtool as CC below.
+  intl="$(echo "$LTLIBINTL" | sed 's,\$[[{(]top_builddir[)}]]/,,')"
+  LIBS="-lbfd -liberty $intl $LIBS"
+  CC="./libtool --quiet --mode=link $CC"
+  AC_CACHE_CHECK(
+    [$1],
+    [$2],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+	  [#include <stdlib.h>
+	   #include <string.h>
+	   #include "bfd.h"
+	   #include "$4"],
+	  [return $3;]
+	)],
+       [[$2]=yes],
+       [[$2]=no]
+     )]
+  )
+  CC=$OLD_CC
   CFLAGS=$OLD_CFLAGS
   LDFLAGS=$OLD_LDFLAGS
   LIBS=$OLD_LIBS])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aclocal.m4 ./gdb/aclocal.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aclocal.m4	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aclocal.m4	2024-02-01 01:47:15.000000000 +0000
@@ -199,4 +199,27 @@ AC_DEFUN([_AM_SUBST_NOTMAKE])
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
+m4_include([../libtool.m4])
+m4_include([../ltoptions.m4])
+m4_include([../ltsugar.m4])
+m4_include([../ltversion.m4])
+m4_include([../lt~obsolete.m4])
+m4_include([../config/acx.m4])
+m4_include([../config/ax_pthread.m4])
+m4_include([../config/bfd64.m4])
+m4_include([../config/debuginfod.m4])
+m4_include([../config/depstand.m4])
+m4_include([../config/enable.m4])
+m4_include([../config/gettext-sister.m4])
+m4_include([../config/gettext.m4])
+m4_include([../config/intlmacosx.m4])
+m4_include([../config/largefile.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/override.m4])
+m4_include([../config/pkg.m4])
+m4_include([../config/plugins.m4])
+m4_include([../config/po.m4])
+m4_include([../config/progtest.m4])
+m4_include([../config/tcl.m4])
 m4_include([acinclude.m4])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/acx_configure_dir.m4 ./gdb/acx_configure_dir.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/acx_configure_dir.m4	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/acx_configure_dir.m4	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 1992-2019 Free Software Foundation, Inc.
+# Copyright (C) 1992-2024 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-casefold.h ./gdb/ada-casefold.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-casefold.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/ada-casefold.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,1345 @@
+/* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */
+/* vi:set ro: */
+
+/* UTF-32 case-folding for GDB
+
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* To regenerate this file, run:
+   ./ada-unicode.py
+*/
+
+   {65, 90, 0, 32},
+   {97, 122, -32, 0},
+   {181, 181, 743, 0},
+   {192, 214, 0, 32},
+   {216, 222, 0, 32},
+   {224, 246, -32, 0},
+   {248, 254, -32, 0},
+   {255, 255, 121, 0},
+   {256, 256, 0, 1},
+   {257, 257, -1, 0},
+   {258, 258, 0, 1},
+   {259, 259, -1, 0},
+   {260, 260, 0, 1},
+   {261, 261, -1, 0},
+   {262, 262, 0, 1},
+   {263, 263, -1, 0},
+   {264, 264, 0, 1},
+   {265, 265, -1, 0},
+   {266, 266, 0, 1},
+   {267, 267, -1, 0},
+   {268, 268, 0, 1},
+   {269, 269, -1, 0},
+   {270, 270, 0, 1},
+   {271, 271, -1, 0},
+   {272, 272, 0, 1},
+   {273, 273, -1, 0},
+   {274, 274, 0, 1},
+   {275, 275, -1, 0},
+   {276, 276, 0, 1},
+   {277, 277, -1, 0},
+   {278, 278, 0, 1},
+   {279, 279, -1, 0},
+   {280, 280, 0, 1},
+   {281, 281, -1, 0},
+   {282, 282, 0, 1},
+   {283, 283, -1, 0},
+   {284, 284, 0, 1},
+   {285, 285, -1, 0},
+   {286, 286, 0, 1},
+   {287, 287, -1, 0},
+   {288, 288, 0, 1},
+   {289, 289, -1, 0},
+   {290, 290, 0, 1},
+   {291, 291, -1, 0},
+   {292, 292, 0, 1},
+   {293, 293, -1, 0},
+   {294, 294, 0, 1},
+   {295, 295, -1, 0},
+   {296, 296, 0, 1},
+   {297, 297, -1, 0},
+   {298, 298, 0, 1},
+   {299, 299, -1, 0},
+   {300, 300, 0, 1},
+   {301, 301, -1, 0},
+   {302, 302, 0, 1},
+   {303, 303, -1, 0},
+   {305, 305, -232, 0},
+   {306, 306, 0, 1},
+   {307, 307, -1, 0},
+   {308, 308, 0, 1},
+   {309, 309, -1, 0},
+   {310, 310, 0, 1},
+   {311, 311, -1, 0},
+   {313, 313, 0, 1},
+   {314, 314, -1, 0},
+   {315, 315, 0, 1},
+   {316, 316, -1, 0},
+   {317, 317, 0, 1},
+   {318, 318, -1, 0},
+   {319, 319, 0, 1},
+   {320, 320, -1, 0},
+   {321, 321, 0, 1},
+   {322, 322, -1, 0},
+   {323, 323, 0, 1},
+   {324, 324, -1, 0},
+   {325, 325, 0, 1},
+   {326, 326, -1, 0},
+   {327, 327, 0, 1},
+   {328, 328, -1, 0},
+   {330, 330, 0, 1},
+   {331, 331, -1, 0},
+   {332, 332, 0, 1},
+   {333, 333, -1, 0},
+   {334, 334, 0, 1},
+   {335, 335, -1, 0},
+   {336, 336, 0, 1},
+   {337, 337, -1, 0},
+   {338, 338, 0, 1},
+   {339, 339, -1, 0},
+   {340, 340, 0, 1},
+   {341, 341, -1, 0},
+   {342, 342, 0, 1},
+   {343, 343, -1, 0},
+   {344, 344, 0, 1},
+   {345, 345, -1, 0},
+   {346, 346, 0, 1},
+   {347, 347, -1, 0},
+   {348, 348, 0, 1},
+   {349, 349, -1, 0},
+   {350, 350, 0, 1},
+   {351, 351, -1, 0},
+   {352, 352, 0, 1},
+   {353, 353, -1, 0},
+   {354, 354, 0, 1},
+   {355, 355, -1, 0},
+   {356, 356, 0, 1},
+   {357, 357, -1, 0},
+   {358, 358, 0, 1},
+   {359, 359, -1, 0},
+   {360, 360, 0, 1},
+   {361, 361, -1, 0},
+   {362, 362, 0, 1},
+   {363, 363, -1, 0},
+   {364, 364, 0, 1},
+   {365, 365, -1, 0},
+   {366, 366, 0, 1},
+   {367, 367, -1, 0},
+   {368, 368, 0, 1},
+   {369, 369, -1, 0},
+   {370, 370, 0, 1},
+   {371, 371, -1, 0},
+   {372, 372, 0, 1},
+   {373, 373, -1, 0},
+   {374, 374, 0, 1},
+   {375, 375, -1, 0},
+   {376, 376, 0, -121},
+   {377, 377, 0, 1},
+   {378, 378, -1, 0},
+   {379, 379, 0, 1},
+   {380, 380, -1, 0},
+   {381, 381, 0, 1},
+   {382, 382, -1, 0},
+   {383, 383, -300, 0},
+   {384, 384, 195, 0},
+   {385, 385, 0, 210},
+   {386, 386, 0, 1},
+   {387, 387, -1, 0},
+   {388, 388, 0, 1},
+   {389, 389, -1, 0},
+   {390, 390, 0, 206},
+   {391, 391, 0, 1},
+   {392, 392, -1, 0},
+   {393, 394, 0, 205},
+   {395, 395, 0, 1},
+   {396, 396, -1, 0},
+   {398, 398, 0, 79},
+   {399, 399, 0, 202},
+   {400, 400, 0, 203},
+   {401, 401, 0, 1},
+   {402, 402, -1, 0},
+   {403, 403, 0, 205},
+   {404, 404, 0, 207},
+   {405, 405, 97, 0},
+   {406, 406, 0, 211},
+   {407, 407, 0, 209},
+   {408, 408, 0, 1},
+   {409, 409, -1, 0},
+   {410, 410, 163, 0},
+   {412, 412, 0, 211},
+   {413, 413, 0, 213},
+   {414, 414, 130, 0},
+   {415, 415, 0, 214},
+   {416, 416, 0, 1},
+   {417, 417, -1, 0},
+   {418, 418, 0, 1},
+   {419, 419, -1, 0},
+   {420, 420, 0, 1},
+   {421, 421, -1, 0},
+   {422, 422, 0, 218},
+   {423, 423, 0, 1},
+   {424, 424, -1, 0},
+   {425, 425, 0, 218},
+   {428, 428, 0, 1},
+   {429, 429, -1, 0},
+   {430, 430, 0, 218},
+   {431, 431, 0, 1},
+   {432, 432, -1, 0},
+   {433, 434, 0, 217},
+   {435, 435, 0, 1},
+   {436, 436, -1, 0},
+   {437, 437, 0, 1},
+   {438, 438, -1, 0},
+   {439, 439, 0, 219},
+   {440, 440, 0, 1},
+   {441, 441, -1, 0},
+   {444, 444, 0, 1},
+   {445, 445, -1, 0},
+   {447, 447, 56, 0},
+   {452, 452, 0, 2},
+   {453, 453, -1, 1},
+   {454, 454, -2, 0},
+   {455, 455, 0, 2},
+   {456, 456, -1, 1},
+   {457, 457, -2, 0},
+   {458, 458, 0, 2},
+   {459, 459, -1, 1},
+   {460, 460, -2, 0},
+   {461, 461, 0, 1},
+   {462, 462, -1, 0},
+   {463, 463, 0, 1},
+   {464, 464, -1, 0},
+   {465, 465, 0, 1},
+   {466, 466, -1, 0},
+   {467, 467, 0, 1},
+   {468, 468, -1, 0},
+   {469, 469, 0, 1},
+   {470, 470, -1, 0},
+   {471, 471, 0, 1},
+   {472, 472, -1, 0},
+   {473, 473, 0, 1},
+   {474, 474, -1, 0},
+   {475, 475, 0, 1},
+   {476, 476, -1, 0},
+   {477, 477, -79, 0},
+   {478, 478, 0, 1},
+   {479, 479, -1, 0},
+   {480, 480, 0, 1},
+   {481, 481, -1, 0},
+   {482, 482, 0, 1},
+   {483, 483, -1, 0},
+   {484, 484, 0, 1},
+   {485, 485, -1, 0},
+   {486, 486, 0, 1},
+   {487, 487, -1, 0},
+   {488, 488, 0, 1},
+   {489, 489, -1, 0},
+   {490, 490, 0, 1},
+   {491, 491, -1, 0},
+   {492, 492, 0, 1},
+   {493, 493, -1, 0},
+   {494, 494, 0, 1},
+   {495, 495, -1, 0},
+   {497, 497, 0, 2},
+   {498, 498, -1, 1},
+   {499, 499, -2, 0},
+   {500, 500, 0, 1},
+   {501, 501, -1, 0},
+   {502, 502, 0, -97},
+   {503, 503, 0, -56},
+   {504, 504, 0, 1},
+   {505, 505, -1, 0},
+   {506, 506, 0, 1},
+   {507, 507, -1, 0},
+   {508, 508, 0, 1},
+   {509, 509, -1, 0},
+   {510, 510, 0, 1},
+   {511, 511, -1, 0},
+   {512, 512, 0, 1},
+   {513, 513, -1, 0},
+   {514, 514, 0, 1},
+   {515, 515, -1, 0},
+   {516, 516, 0, 1},
+   {517, 517, -1, 0},
+   {518, 518, 0, 1},
+   {519, 519, -1, 0},
+   {520, 520, 0, 1},
+   {521, 521, -1, 0},
+   {522, 522, 0, 1},
+   {523, 523, -1, 0},
+   {524, 524, 0, 1},
+   {525, 525, -1, 0},
+   {526, 526, 0, 1},
+   {527, 527, -1, 0},
+   {528, 528, 0, 1},
+   {529, 529, -1, 0},
+   {530, 530, 0, 1},
+   {531, 531, -1, 0},
+   {532, 532, 0, 1},
+   {533, 533, -1, 0},
+   {534, 534, 0, 1},
+   {535, 535, -1, 0},
+   {536, 536, 0, 1},
+   {537, 537, -1, 0},
+   {538, 538, 0, 1},
+   {539, 539, -1, 0},
+   {540, 540, 0, 1},
+   {541, 541, -1, 0},
+   {542, 542, 0, 1},
+   {543, 543, -1, 0},
+   {544, 544, 0, -130},
+   {546, 546, 0, 1},
+   {547, 547, -1, 0},
+   {548, 548, 0, 1},
+   {549, 549, -1, 0},
+   {550, 550, 0, 1},
+   {551, 551, -1, 0},
+   {552, 552, 0, 1},
+   {553, 553, -1, 0},
+   {554, 554, 0, 1},
+   {555, 555, -1, 0},
+   {556, 556, 0, 1},
+   {557, 557, -1, 0},
+   {558, 558, 0, 1},
+   {559, 559, -1, 0},
+   {560, 560, 0, 1},
+   {561, 561, -1, 0},
+   {562, 562, 0, 1},
+   {563, 563, -1, 0},
+   {570, 570, 0, 10795},
+   {571, 571, 0, 1},
+   {572, 572, -1, 0},
+   {573, 573, 0, -163},
+   {574, 574, 0, 10792},
+   {575, 576, 10815, 0},
+   {577, 577, 0, 1},
+   {578, 578, -1, 0},
+   {579, 579, 0, -195},
+   {580, 580, 0, 69},
+   {581, 581, 0, 71},
+   {582, 582, 0, 1},
+   {583, 583, -1, 0},
+   {584, 584, 0, 1},
+   {585, 585, -1, 0},
+   {586, 586, 0, 1},
+   {587, 587, -1, 0},
+   {588, 588, 0, 1},
+   {589, 589, -1, 0},
+   {590, 590, 0, 1},
+   {591, 591, -1, 0},
+   {592, 592, 10783, 0},
+   {593, 593, 10780, 0},
+   {594, 594, 10782, 0},
+   {595, 595, -210, 0},
+   {596, 596, -206, 0},
+   {598, 599, -205, 0},
+   {601, 601, -202, 0},
+   {603, 603, -203, 0},
+   {604, 604, 42319, 0},
+   {608, 608, -205, 0},
+   {609, 609, 42315, 0},
+   {611, 611, -207, 0},
+   {613, 613, 42280, 0},
+   {614, 614, 42308, 0},
+   {616, 616, -209, 0},
+   {617, 617, -211, 0},
+   {618, 618, 42308, 0},
+   {619, 619, 10743, 0},
+   {620, 620, 42305, 0},
+   {623, 623, -211, 0},
+   {625, 625, 10749, 0},
+   {626, 626, -213, 0},
+   {629, 629, -214, 0},
+   {637, 637, 10727, 0},
+   {640, 640, -218, 0},
+   {642, 642, 42307, 0},
+   {643, 643, -218, 0},
+   {647, 647, 42282, 0},
+   {648, 648, -218, 0},
+   {649, 649, -69, 0},
+   {650, 651, -217, 0},
+   {652, 652, -71, 0},
+   {658, 658, -219, 0},
+   {669, 669, 42261, 0},
+   {670, 670, 42258, 0},
+   {837, 837, 84, 0},
+   {880, 880, 0, 1},
+   {881, 881, -1, 0},
+   {882, 882, 0, 1},
+   {883, 883, -1, 0},
+   {886, 886, 0, 1},
+   {887, 887, -1, 0},
+   {891, 893, 130, 0},
+   {895, 895, 0, 116},
+   {902, 902, 0, 38},
+   {904, 906, 0, 37},
+   {908, 908, 0, 64},
+   {910, 911, 0, 63},
+   {913, 929, 0, 32},
+   {931, 939, 0, 32},
+   {940, 940, -38, 0},
+   {941, 943, -37, 0},
+   {945, 961, -32, 0},
+   {962, 962, -31, 0},
+   {963, 971, -32, 0},
+   {972, 972, -64, 0},
+   {973, 974, -63, 0},
+   {975, 975, 0, 8},
+   {976, 976, -62, 0},
+   {977, 977, -57, 0},
+   {981, 981, -47, 0},
+   {982, 982, -54, 0},
+   {983, 983, -8, 0},
+   {984, 984, 0, 1},
+   {985, 985, -1, 0},
+   {986, 986, 0, 1},
+   {987, 987, -1, 0},
+   {988, 988, 0, 1},
+   {989, 989, -1, 0},
+   {990, 990, 0, 1},
+   {991, 991, -1, 0},
+   {992, 992, 0, 1},
+   {993, 993, -1, 0},
+   {994, 994, 0, 1},
+   {995, 995, -1, 0},
+   {996, 996, 0, 1},
+   {997, 997, -1, 0},
+   {998, 998, 0, 1},
+   {999, 999, -1, 0},
+   {1000, 1000, 0, 1},
+   {1001, 1001, -1, 0},
+   {1002, 1002, 0, 1},
+   {1003, 1003, -1, 0},
+   {1004, 1004, 0, 1},
+   {1005, 1005, -1, 0},
+   {1006, 1006, 0, 1},
+   {1007, 1007, -1, 0},
+   {1008, 1008, -86, 0},
+   {1009, 1009, -80, 0},
+   {1010, 1010, 7, 0},
+   {1011, 1011, -116, 0},
+   {1012, 1012, 0, -60},
+   {1013, 1013, -96, 0},
+   {1015, 1015, 0, 1},
+   {1016, 1016, -1, 0},
+   {1017, 1017, 0, -7},
+   {1018, 1018, 0, 1},
+   {1019, 1019, -1, 0},
+   {1021, 1023, 0, -130},
+   {1024, 1039, 0, 80},
+   {1040, 1071, 0, 32},
+   {1072, 1103, -32, 0},
+   {1104, 1119, -80, 0},
+   {1120, 1120, 0, 1},
+   {1121, 1121, -1, 0},
+   {1122, 1122, 0, 1},
+   {1123, 1123, -1, 0},
+   {1124, 1124, 0, 1},
+   {1125, 1125, -1, 0},
+   {1126, 1126, 0, 1},
+   {1127, 1127, -1, 0},
+   {1128, 1128, 0, 1},
+   {1129, 1129, -1, 0},
+   {1130, 1130, 0, 1},
+   {1131, 1131, -1, 0},
+   {1132, 1132, 0, 1},
+   {1133, 1133, -1, 0},
+   {1134, 1134, 0, 1},
+   {1135, 1135, -1, 0},
+   {1136, 1136, 0, 1},
+   {1137, 1137, -1, 0},
+   {1138, 1138, 0, 1},
+   {1139, 1139, -1, 0},
+   {1140, 1140, 0, 1},
+   {1141, 1141, -1, 0},
+   {1142, 1142, 0, 1},
+   {1143, 1143, -1, 0},
+   {1144, 1144, 0, 1},
+   {1145, 1145, -1, 0},
+   {1146, 1146, 0, 1},
+   {1147, 1147, -1, 0},
+   {1148, 1148, 0, 1},
+   {1149, 1149, -1, 0},
+   {1150, 1150, 0, 1},
+   {1151, 1151, -1, 0},
+   {1152, 1152, 0, 1},
+   {1153, 1153, -1, 0},
+   {1162, 1162, 0, 1},
+   {1163, 1163, -1, 0},
+   {1164, 1164, 0, 1},
+   {1165, 1165, -1, 0},
+   {1166, 1166, 0, 1},
+   {1167, 1167, -1, 0},
+   {1168, 1168, 0, 1},
+   {1169, 1169, -1, 0},
+   {1170, 1170, 0, 1},
+   {1171, 1171, -1, 0},
+   {1172, 1172, 0, 1},
+   {1173, 1173, -1, 0},
+   {1174, 1174, 0, 1},
+   {1175, 1175, -1, 0},
+   {1176, 1176, 0, 1},
+   {1177, 1177, -1, 0},
+   {1178, 1178, 0, 1},
+   {1179, 1179, -1, 0},
+   {1180, 1180, 0, 1},
+   {1181, 1181, -1, 0},
+   {1182, 1182, 0, 1},
+   {1183, 1183, -1, 0},
+   {1184, 1184, 0, 1},
+   {1185, 1185, -1, 0},
+   {1186, 1186, 0, 1},
+   {1187, 1187, -1, 0},
+   {1188, 1188, 0, 1},
+   {1189, 1189, -1, 0},
+   {1190, 1190, 0, 1},
+   {1191, 1191, -1, 0},
+   {1192, 1192, 0, 1},
+   {1193, 1193, -1, 0},
+   {1194, 1194, 0, 1},
+   {1195, 1195, -1, 0},
+   {1196, 1196, 0, 1},
+   {1197, 1197, -1, 0},
+   {1198, 1198, 0, 1},
+   {1199, 1199, -1, 0},
+   {1200, 1200, 0, 1},
+   {1201, 1201, -1, 0},
+   {1202, 1202, 0, 1},
+   {1203, 1203, -1, 0},
+   {1204, 1204, 0, 1},
+   {1205, 1205, -1, 0},
+   {1206, 1206, 0, 1},
+   {1207, 1207, -1, 0},
+   {1208, 1208, 0, 1},
+   {1209, 1209, -1, 0},
+   {1210, 1210, 0, 1},
+   {1211, 1211, -1, 0},
+   {1212, 1212, 0, 1},
+   {1213, 1213, -1, 0},
+   {1214, 1214, 0, 1},
+   {1215, 1215, -1, 0},
+   {1216, 1216, 0, 15},
+   {1217, 1217, 0, 1},
+   {1218, 1218, -1, 0},
+   {1219, 1219, 0, 1},
+   {1220, 1220, -1, 0},
+   {1221, 1221, 0, 1},
+   {1222, 1222, -1, 0},
+   {1223, 1223, 0, 1},
+   {1224, 1224, -1, 0},
+   {1225, 1225, 0, 1},
+   {1226, 1226, -1, 0},
+   {1227, 1227, 0, 1},
+   {1228, 1228, -1, 0},
+   {1229, 1229, 0, 1},
+   {1230, 1230, -1, 0},
+   {1231, 1231, -15, 0},
+   {1232, 1232, 0, 1},
+   {1233, 1233, -1, 0},
+   {1234, 1234, 0, 1},
+   {1235, 1235, -1, 0},
+   {1236, 1236, 0, 1},
+   {1237, 1237, -1, 0},
+   {1238, 1238, 0, 1},
+   {1239, 1239, -1, 0},
+   {1240, 1240, 0, 1},
+   {1241, 1241, -1, 0},
+   {1242, 1242, 0, 1},
+   {1243, 1243, -1, 0},
+   {1244, 1244, 0, 1},
+   {1245, 1245, -1, 0},
+   {1246, 1246, 0, 1},
+   {1247, 1247, -1, 0},
+   {1248, 1248, 0, 1},
+   {1249, 1249, -1, 0},
+   {1250, 1250, 0, 1},
+   {1251, 1251, -1, 0},
+   {1252, 1252, 0, 1},
+   {1253, 1253, -1, 0},
+   {1254, 1254, 0, 1},
+   {1255, 1255, -1, 0},
+   {1256, 1256, 0, 1},
+   {1257, 1257, -1, 0},
+   {1258, 1258, 0, 1},
+   {1259, 1259, -1, 0},
+   {1260, 1260, 0, 1},
+   {1261, 1261, -1, 0},
+   {1262, 1262, 0, 1},
+   {1263, 1263, -1, 0},
+   {1264, 1264, 0, 1},
+   {1265, 1265, -1, 0},
+   {1266, 1266, 0, 1},
+   {1267, 1267, -1, 0},
+   {1268, 1268, 0, 1},
+   {1269, 1269, -1, 0},
+   {1270, 1270, 0, 1},
+   {1271, 1271, -1, 0},
+   {1272, 1272, 0, 1},
+   {1273, 1273, -1, 0},
+   {1274, 1274, 0, 1},
+   {1275, 1275, -1, 0},
+   {1276, 1276, 0, 1},
+   {1277, 1277, -1, 0},
+   {1278, 1278, 0, 1},
+   {1279, 1279, -1, 0},
+   {1280, 1280, 0, 1},
+   {1281, 1281, -1, 0},
+   {1282, 1282, 0, 1},
+   {1283, 1283, -1, 0},
+   {1284, 1284, 0, 1},
+   {1285, 1285, -1, 0},
+   {1286, 1286, 0, 1},
+   {1287, 1287, -1, 0},
+   {1288, 1288, 0, 1},
+   {1289, 1289, -1, 0},
+   {1290, 1290, 0, 1},
+   {1291, 1291, -1, 0},
+   {1292, 1292, 0, 1},
+   {1293, 1293, -1, 0},
+   {1294, 1294, 0, 1},
+   {1295, 1295, -1, 0},
+   {1296, 1296, 0, 1},
+   {1297, 1297, -1, 0},
+   {1298, 1298, 0, 1},
+   {1299, 1299, -1, 0},
+   {1300, 1300, 0, 1},
+   {1301, 1301, -1, 0},
+   {1302, 1302, 0, 1},
+   {1303, 1303, -1, 0},
+   {1304, 1304, 0, 1},
+   {1305, 1305, -1, 0},
+   {1306, 1306, 0, 1},
+   {1307, 1307, -1, 0},
+   {1308, 1308, 0, 1},
+   {1309, 1309, -1, 0},
+   {1310, 1310, 0, 1},
+   {1311, 1311, -1, 0},
+   {1312, 1312, 0, 1},
+   {1313, 1313, -1, 0},
+   {1314, 1314, 0, 1},
+   {1315, 1315, -1, 0},
+   {1316, 1316, 0, 1},
+   {1317, 1317, -1, 0},
+   {1318, 1318, 0, 1},
+   {1319, 1319, -1, 0},
+   {1320, 1320, 0, 1},
+   {1321, 1321, -1, 0},
+   {1322, 1322, 0, 1},
+   {1323, 1323, -1, 0},
+   {1324, 1324, 0, 1},
+   {1325, 1325, -1, 0},
+   {1326, 1326, 0, 1},
+   {1327, 1327, -1, 0},
+   {1329, 1366, 0, 48},
+   {1377, 1414, -48, 0},
+   {4256, 4293, 0, 7264},
+   {4295, 4295, 0, 7264},
+   {4301, 4301, 0, 7264},
+   {4304, 4346, 3008, 0},
+   {4349, 4351, 3008, 0},
+   {5024, 5103, 0, 38864},
+   {5104, 5109, 0, 8},
+   {5112, 5117, -8, 0},
+   {7296, 7296, -6254, 0},
+   {7297, 7297, -6253, 0},
+   {7298, 7298, -6244, 0},
+   {7299, 7300, -6242, 0},
+   {7301, 7301, -6243, 0},
+   {7302, 7302, -6236, 0},
+   {7303, 7303, -6181, 0},
+   {7304, 7304, 35266, 0},
+   {7312, 7354, 0, -3008},
+   {7357, 7359, 0, -3008},
+   {7545, 7545, 35332, 0},
+   {7549, 7549, 3814, 0},
+   {7566, 7566, 35384, 0},
+   {7680, 7680, 0, 1},
+   {7681, 7681, -1, 0},
+   {7682, 7682, 0, 1},
+   {7683, 7683, -1, 0},
+   {7684, 7684, 0, 1},
+   {7685, 7685, -1, 0},
+   {7686, 7686, 0, 1},
+   {7687, 7687, -1, 0},
+   {7688, 7688, 0, 1},
+   {7689, 7689, -1, 0},
+   {7690, 7690, 0, 1},
+   {7691, 7691, -1, 0},
+   {7692, 7692, 0, 1},
+   {7693, 7693, -1, 0},
+   {7694, 7694, 0, 1},
+   {7695, 7695, -1, 0},
+   {7696, 7696, 0, 1},
+   {7697, 7697, -1, 0},
+   {7698, 7698, 0, 1},
+   {7699, 7699, -1, 0},
+   {7700, 7700, 0, 1},
+   {7701, 7701, -1, 0},
+   {7702, 7702, 0, 1},
+   {7703, 7703, -1, 0},
+   {7704, 7704, 0, 1},
+   {7705, 7705, -1, 0},
+   {7706, 7706, 0, 1},
+   {7707, 7707, -1, 0},
+   {7708, 7708, 0, 1},
+   {7709, 7709, -1, 0},
+   {7710, 7710, 0, 1},
+   {7711, 7711, -1, 0},
+   {7712, 7712, 0, 1},
+   {7713, 7713, -1, 0},
+   {7714, 7714, 0, 1},
+   {7715, 7715, -1, 0},
+   {7716, 7716, 0, 1},
+   {7717, 7717, -1, 0},
+   {7718, 7718, 0, 1},
+   {7719, 7719, -1, 0},
+   {7720, 7720, 0, 1},
+   {7721, 7721, -1, 0},
+   {7722, 7722, 0, 1},
+   {7723, 7723, -1, 0},
+   {7724, 7724, 0, 1},
+   {7725, 7725, -1, 0},
+   {7726, 7726, 0, 1},
+   {7727, 7727, -1, 0},
+   {7728, 7728, 0, 1},
+   {7729, 7729, -1, 0},
+   {7730, 7730, 0, 1},
+   {7731, 7731, -1, 0},
+   {7732, 7732, 0, 1},
+   {7733, 7733, -1, 0},
+   {7734, 7734, 0, 1},
+   {7735, 7735, -1, 0},
+   {7736, 7736, 0, 1},
+   {7737, 7737, -1, 0},
+   {7738, 7738, 0, 1},
+   {7739, 7739, -1, 0},
+   {7740, 7740, 0, 1},
+   {7741, 7741, -1, 0},
+   {7742, 7742, 0, 1},
+   {7743, 7743, -1, 0},
+   {7744, 7744, 0, 1},
+   {7745, 7745, -1, 0},
+   {7746, 7746, 0, 1},
+   {7747, 7747, -1, 0},
+   {7748, 7748, 0, 1},
+   {7749, 7749, -1, 0},
+   {7750, 7750, 0, 1},
+   {7751, 7751, -1, 0},
+   {7752, 7752, 0, 1},
+   {7753, 7753, -1, 0},
+   {7754, 7754, 0, 1},
+   {7755, 7755, -1, 0},
+   {7756, 7756, 0, 1},
+   {7757, 7757, -1, 0},
+   {7758, 7758, 0, 1},
+   {7759, 7759, -1, 0},
+   {7760, 7760, 0, 1},
+   {7761, 7761, -1, 0},
+   {7762, 7762, 0, 1},
+   {7763, 7763, -1, 0},
+   {7764, 7764, 0, 1},
+   {7765, 7765, -1, 0},
+   {7766, 7766, 0, 1},
+   {7767, 7767, -1, 0},
+   {7768, 7768, 0, 1},
+   {7769, 7769, -1, 0},
+   {7770, 7770, 0, 1},
+   {7771, 7771, -1, 0},
+   {7772, 7772, 0, 1},
+   {7773, 7773, -1, 0},
+   {7774, 7774, 0, 1},
+   {7775, 7775, -1, 0},
+   {7776, 7776, 0, 1},
+   {7777, 7777, -1, 0},
+   {7778, 7778, 0, 1},
+   {7779, 7779, -1, 0},
+   {7780, 7780, 0, 1},
+   {7781, 7781, -1, 0},
+   {7782, 7782, 0, 1},
+   {7783, 7783, -1, 0},
+   {7784, 7784, 0, 1},
+   {7785, 7785, -1, 0},
+   {7786, 7786, 0, 1},
+   {7787, 7787, -1, 0},
+   {7788, 7788, 0, 1},
+   {7789, 7789, -1, 0},
+   {7790, 7790, 0, 1},
+   {7791, 7791, -1, 0},
+   {7792, 7792, 0, 1},
+   {7793, 7793, -1, 0},
+   {7794, 7794, 0, 1},
+   {7795, 7795, -1, 0},
+   {7796, 7796, 0, 1},
+   {7797, 7797, -1, 0},
+   {7798, 7798, 0, 1},
+   {7799, 7799, -1, 0},
+   {7800, 7800, 0, 1},
+   {7801, 7801, -1, 0},
+   {7802, 7802, 0, 1},
+   {7803, 7803, -1, 0},
+   {7804, 7804, 0, 1},
+   {7805, 7805, -1, 0},
+   {7806, 7806, 0, 1},
+   {7807, 7807, -1, 0},
+   {7808, 7808, 0, 1},
+   {7809, 7809, -1, 0},
+   {7810, 7810, 0, 1},
+   {7811, 7811, -1, 0},
+   {7812, 7812, 0, 1},
+   {7813, 7813, -1, 0},
+   {7814, 7814, 0, 1},
+   {7815, 7815, -1, 0},
+   {7816, 7816, 0, 1},
+   {7817, 7817, -1, 0},
+   {7818, 7818, 0, 1},
+   {7819, 7819, -1, 0},
+   {7820, 7820, 0, 1},
+   {7821, 7821, -1, 0},
+   {7822, 7822, 0, 1},
+   {7823, 7823, -1, 0},
+   {7824, 7824, 0, 1},
+   {7825, 7825, -1, 0},
+   {7826, 7826, 0, 1},
+   {7827, 7827, -1, 0},
+   {7828, 7828, 0, 1},
+   {7829, 7829, -1, 0},
+   {7835, 7835, -59, 0},
+   {7838, 7838, 0, -7615},
+   {7840, 7840, 0, 1},
+   {7841, 7841, -1, 0},
+   {7842, 7842, 0, 1},
+   {7843, 7843, -1, 0},
+   {7844, 7844, 0, 1},
+   {7845, 7845, -1, 0},
+   {7846, 7846, 0, 1},
+   {7847, 7847, -1, 0},
+   {7848, 7848, 0, 1},
+   {7849, 7849, -1, 0},
+   {7850, 7850, 0, 1},
+   {7851, 7851, -1, 0},
+   {7852, 7852, 0, 1},
+   {7853, 7853, -1, 0},
+   {7854, 7854, 0, 1},
+   {7855, 7855, -1, 0},
+   {7856, 7856, 0, 1},
+   {7857, 7857, -1, 0},
+   {7858, 7858, 0, 1},
+   {7859, 7859, -1, 0},
+   {7860, 7860, 0, 1},
+   {7861, 7861, -1, 0},
+   {7862, 7862, 0, 1},
+   {7863, 7863, -1, 0},
+   {7864, 7864, 0, 1},
+   {7865, 7865, -1, 0},
+   {7866, 7866, 0, 1},
+   {7867, 7867, -1, 0},
+   {7868, 7868, 0, 1},
+   {7869, 7869, -1, 0},
+   {7870, 7870, 0, 1},
+   {7871, 7871, -1, 0},
+   {7872, 7872, 0, 1},
+   {7873, 7873, -1, 0},
+   {7874, 7874, 0, 1},
+   {7875, 7875, -1, 0},
+   {7876, 7876, 0, 1},
+   {7877, 7877, -1, 0},
+   {7878, 7878, 0, 1},
+   {7879, 7879, -1, 0},
+   {7880, 7880, 0, 1},
+   {7881, 7881, -1, 0},
+   {7882, 7882, 0, 1},
+   {7883, 7883, -1, 0},
+   {7884, 7884, 0, 1},
+   {7885, 7885, -1, 0},
+   {7886, 7886, 0, 1},
+   {7887, 7887, -1, 0},
+   {7888, 7888, 0, 1},
+   {7889, 7889, -1, 0},
+   {7890, 7890, 0, 1},
+   {7891, 7891, -1, 0},
+   {7892, 7892, 0, 1},
+   {7893, 7893, -1, 0},
+   {7894, 7894, 0, 1},
+   {7895, 7895, -1, 0},
+   {7896, 7896, 0, 1},
+   {7897, 7897, -1, 0},
+   {7898, 7898, 0, 1},
+   {7899, 7899, -1, 0},
+   {7900, 7900, 0, 1},
+   {7901, 7901, -1, 0},
+   {7902, 7902, 0, 1},
+   {7903, 7903, -1, 0},
+   {7904, 7904, 0, 1},
+   {7905, 7905, -1, 0},
+   {7906, 7906, 0, 1},
+   {7907, 7907, -1, 0},
+   {7908, 7908, 0, 1},
+   {7909, 7909, -1, 0},
+   {7910, 7910, 0, 1},
+   {7911, 7911, -1, 0},
+   {7912, 7912, 0, 1},
+   {7913, 7913, -1, 0},
+   {7914, 7914, 0, 1},
+   {7915, 7915, -1, 0},
+   {7916, 7916, 0, 1},
+   {7917, 7917, -1, 0},
+   {7918, 7918, 0, 1},
+   {7919, 7919, -1, 0},
+   {7920, 7920, 0, 1},
+   {7921, 7921, -1, 0},
+   {7922, 7922, 0, 1},
+   {7923, 7923, -1, 0},
+   {7924, 7924, 0, 1},
+   {7925, 7925, -1, 0},
+   {7926, 7926, 0, 1},
+   {7927, 7927, -1, 0},
+   {7928, 7928, 0, 1},
+   {7929, 7929, -1, 0},
+   {7930, 7930, 0, 1},
+   {7931, 7931, -1, 0},
+   {7932, 7932, 0, 1},
+   {7933, 7933, -1, 0},
+   {7934, 7934, 0, 1},
+   {7935, 7935, -1, 0},
+   {7936, 7943, 8, 0},
+   {7944, 7951, 0, -8},
+   {7952, 7957, 8, 0},
+   {7960, 7965, 0, -8},
+   {7968, 7975, 8, 0},
+   {7976, 7983, 0, -8},
+   {7984, 7991, 8, 0},
+   {7992, 7999, 0, -8},
+   {8000, 8005, 8, 0},
+   {8008, 8013, 0, -8},
+   {8017, 8017, 8, 0},
+   {8019, 8019, 8, 0},
+   {8021, 8021, 8, 0},
+   {8023, 8023, 8, 0},
+   {8025, 8025, 0, -8},
+   {8027, 8027, 0, -8},
+   {8029, 8029, 0, -8},
+   {8031, 8031, 0, -8},
+   {8032, 8039, 8, 0},
+   {8040, 8047, 0, -8},
+   {8048, 8049, 74, 0},
+   {8050, 8053, 86, 0},
+   {8054, 8055, 100, 0},
+   {8056, 8057, 128, 0},
+   {8058, 8059, 112, 0},
+   {8060, 8061, 126, 0},
+   {8112, 8113, 8, 0},
+   {8120, 8121, 0, -8},
+   {8122, 8123, 0, -74},
+   {8126, 8126, -7205, 0},
+   {8136, 8139, 0, -86},
+   {8144, 8145, 8, 0},
+   {8152, 8153, 0, -8},
+   {8154, 8155, 0, -100},
+   {8160, 8161, 8, 0},
+   {8165, 8165, 7, 0},
+   {8168, 8169, 0, -8},
+   {8170, 8171, 0, -112},
+   {8172, 8172, 0, -7},
+   {8184, 8185, 0, -128},
+   {8186, 8187, 0, -126},
+   {8486, 8486, 0, -7517},
+   {8490, 8490, 0, -8383},
+   {8491, 8491, 0, -8262},
+   {8498, 8498, 0, 28},
+   {8526, 8526, -28, 0},
+   {8544, 8559, 0, 16},
+   {8560, 8575, -16, 0},
+   {8579, 8579, 0, 1},
+   {8580, 8580, -1, 0},
+   {9398, 9423, 0, 26},
+   {9424, 9449, -26, 0},
+   {11264, 11310, 0, 48},
+   {11312, 11358, -48, 0},
+   {11360, 11360, 0, 1},
+   {11361, 11361, -1, 0},
+   {11362, 11362, 0, -10743},
+   {11363, 11363, 0, -3814},
+   {11364, 11364, 0, -10727},
+   {11365, 11365, -10795, 0},
+   {11366, 11366, -10792, 0},
+   {11367, 11367, 0, 1},
+   {11368, 11368, -1, 0},
+   {11369, 11369, 0, 1},
+   {11370, 11370, -1, 0},
+   {11371, 11371, 0, 1},
+   {11372, 11372, -1, 0},
+   {11373, 11373, 0, -10780},
+   {11374, 11374, 0, -10749},
+   {11375, 11375, 0, -10783},
+   {11376, 11376, 0, -10782},
+   {11378, 11378, 0, 1},
+   {11379, 11379, -1, 0},
+   {11381, 11381, 0, 1},
+   {11382, 11382, -1, 0},
+   {11390, 11391, 0, -10815},
+   {11392, 11392, 0, 1},
+   {11393, 11393, -1, 0},
+   {11394, 11394, 0, 1},
+   {11395, 11395, -1, 0},
+   {11396, 11396, 0, 1},
+   {11397, 11397, -1, 0},
+   {11398, 11398, 0, 1},
+   {11399, 11399, -1, 0},
+   {11400, 11400, 0, 1},
+   {11401, 11401, -1, 0},
+   {11402, 11402, 0, 1},
+   {11403, 11403, -1, 0},
+   {11404, 11404, 0, 1},
+   {11405, 11405, -1, 0},
+   {11406, 11406, 0, 1},
+   {11407, 11407, -1, 0},
+   {11408, 11408, 0, 1},
+   {11409, 11409, -1, 0},
+   {11410, 11410, 0, 1},
+   {11411, 11411, -1, 0},
+   {11412, 11412, 0, 1},
+   {11413, 11413, -1, 0},
+   {11414, 11414, 0, 1},
+   {11415, 11415, -1, 0},
+   {11416, 11416, 0, 1},
+   {11417, 11417, -1, 0},
+   {11418, 11418, 0, 1},
+   {11419, 11419, -1, 0},
+   {11420, 11420, 0, 1},
+   {11421, 11421, -1, 0},
+   {11422, 11422, 0, 1},
+   {11423, 11423, -1, 0},
+   {11424, 11424, 0, 1},
+   {11425, 11425, -1, 0},
+   {11426, 11426, 0, 1},
+   {11427, 11427, -1, 0},
+   {11428, 11428, 0, 1},
+   {11429, 11429, -1, 0},
+   {11430, 11430, 0, 1},
+   {11431, 11431, -1, 0},
+   {11432, 11432, 0, 1},
+   {11433, 11433, -1, 0},
+   {11434, 11434, 0, 1},
+   {11435, 11435, -1, 0},
+   {11436, 11436, 0, 1},
+   {11437, 11437, -1, 0},
+   {11438, 11438, 0, 1},
+   {11439, 11439, -1, 0},
+   {11440, 11440, 0, 1},
+   {11441, 11441, -1, 0},
+   {11442, 11442, 0, 1},
+   {11443, 11443, -1, 0},
+   {11444, 11444, 0, 1},
+   {11445, 11445, -1, 0},
+   {11446, 11446, 0, 1},
+   {11447, 11447, -1, 0},
+   {11448, 11448, 0, 1},
+   {11449, 11449, -1, 0},
+   {11450, 11450, 0, 1},
+   {11451, 11451, -1, 0},
+   {11452, 11452, 0, 1},
+   {11453, 11453, -1, 0},
+   {11454, 11454, 0, 1},
+   {11455, 11455, -1, 0},
+   {11456, 11456, 0, 1},
+   {11457, 11457, -1, 0},
+   {11458, 11458, 0, 1},
+   {11459, 11459, -1, 0},
+   {11460, 11460, 0, 1},
+   {11461, 11461, -1, 0},
+   {11462, 11462, 0, 1},
+   {11463, 11463, -1, 0},
+   {11464, 11464, 0, 1},
+   {11465, 11465, -1, 0},
+   {11466, 11466, 0, 1},
+   {11467, 11467, -1, 0},
+   {11468, 11468, 0, 1},
+   {11469, 11469, -1, 0},
+   {11470, 11470, 0, 1},
+   {11471, 11471, -1, 0},
+   {11472, 11472, 0, 1},
+   {11473, 11473, -1, 0},
+   {11474, 11474, 0, 1},
+   {11475, 11475, -1, 0},
+   {11476, 11476, 0, 1},
+   {11477, 11477, -1, 0},
+   {11478, 11478, 0, 1},
+   {11479, 11479, -1, 0},
+   {11480, 11480, 0, 1},
+   {11481, 11481, -1, 0},
+   {11482, 11482, 0, 1},
+   {11483, 11483, -1, 0},
+   {11484, 11484, 0, 1},
+   {11485, 11485, -1, 0},
+   {11486, 11486, 0, 1},
+   {11487, 11487, -1, 0},
+   {11488, 11488, 0, 1},
+   {11489, 11489, -1, 0},
+   {11490, 11490, 0, 1},
+   {11491, 11491, -1, 0},
+   {11499, 11499, 0, 1},
+   {11500, 11500, -1, 0},
+   {11501, 11501, 0, 1},
+   {11502, 11502, -1, 0},
+   {11506, 11506, 0, 1},
+   {11507, 11507, -1, 0},
+   {11520, 11557, -7264, 0},
+   {11559, 11559, -7264, 0},
+   {11565, 11565, -7264, 0},
+   {42560, 42560, 0, 1},
+   {42561, 42561, -1, 0},
+   {42562, 42562, 0, 1},
+   {42563, 42563, -1, 0},
+   {42564, 42564, 0, 1},
+   {42565, 42565, -1, 0},
+   {42566, 42566, 0, 1},
+   {42567, 42567, -1, 0},
+   {42568, 42568, 0, 1},
+   {42569, 42569, -1, 0},
+   {42570, 42570, 0, 1},
+   {42571, 42571, -1, 0},
+   {42572, 42572, 0, 1},
+   {42573, 42573, -1, 0},
+   {42574, 42574, 0, 1},
+   {42575, 42575, -1, 0},
+   {42576, 42576, 0, 1},
+   {42577, 42577, -1, 0},
+   {42578, 42578, 0, 1},
+   {42579, 42579, -1, 0},
+   {42580, 42580, 0, 1},
+   {42581, 42581, -1, 0},
+   {42582, 42582, 0, 1},
+   {42583, 42583, -1, 0},
+   {42584, 42584, 0, 1},
+   {42585, 42585, -1, 0},
+   {42586, 42586, 0, 1},
+   {42587, 42587, -1, 0},
+   {42588, 42588, 0, 1},
+   {42589, 42589, -1, 0},
+   {42590, 42590, 0, 1},
+   {42591, 42591, -1, 0},
+   {42592, 42592, 0, 1},
+   {42593, 42593, -1, 0},
+   {42594, 42594, 0, 1},
+   {42595, 42595, -1, 0},
+   {42596, 42596, 0, 1},
+   {42597, 42597, -1, 0},
+   {42598, 42598, 0, 1},
+   {42599, 42599, -1, 0},
+   {42600, 42600, 0, 1},
+   {42601, 42601, -1, 0},
+   {42602, 42602, 0, 1},
+   {42603, 42603, -1, 0},
+   {42604, 42604, 0, 1},
+   {42605, 42605, -1, 0},
+   {42624, 42624, 0, 1},
+   {42625, 42625, -1, 0},
+   {42626, 42626, 0, 1},
+   {42627, 42627, -1, 0},
+   {42628, 42628, 0, 1},
+   {42629, 42629, -1, 0},
+   {42630, 42630, 0, 1},
+   {42631, 42631, -1, 0},
+   {42632, 42632, 0, 1},
+   {42633, 42633, -1, 0},
+   {42634, 42634, 0, 1},
+   {42635, 42635, -1, 0},
+   {42636, 42636, 0, 1},
+   {42637, 42637, -1, 0},
+   {42638, 42638, 0, 1},
+   {42639, 42639, -1, 0},
+   {42640, 42640, 0, 1},
+   {42641, 42641, -1, 0},
+   {42642, 42642, 0, 1},
+   {42643, 42643, -1, 0},
+   {42644, 42644, 0, 1},
+   {42645, 42645, -1, 0},
+   {42646, 42646, 0, 1},
+   {42647, 42647, -1, 0},
+   {42648, 42648, 0, 1},
+   {42649, 42649, -1, 0},
+   {42650, 42650, 0, 1},
+   {42651, 42651, -1, 0},
+   {42786, 42786, 0, 1},
+   {42787, 42787, -1, 0},
+   {42788, 42788, 0, 1},
+   {42789, 42789, -1, 0},
+   {42790, 42790, 0, 1},
+   {42791, 42791, -1, 0},
+   {42792, 42792, 0, 1},
+   {42793, 42793, -1, 0},
+   {42794, 42794, 0, 1},
+   {42795, 42795, -1, 0},
+   {42796, 42796, 0, 1},
+   {42797, 42797, -1, 0},
+   {42798, 42798, 0, 1},
+   {42799, 42799, -1, 0},
+   {42802, 42802, 0, 1},
+   {42803, 42803, -1, 0},
+   {42804, 42804, 0, 1},
+   {42805, 42805, -1, 0},
+   {42806, 42806, 0, 1},
+   {42807, 42807, -1, 0},
+   {42808, 42808, 0, 1},
+   {42809, 42809, -1, 0},
+   {42810, 42810, 0, 1},
+   {42811, 42811, -1, 0},
+   {42812, 42812, 0, 1},
+   {42813, 42813, -1, 0},
+   {42814, 42814, 0, 1},
+   {42815, 42815, -1, 0},
+   {42816, 42816, 0, 1},
+   {42817, 42817, -1, 0},
+   {42818, 42818, 0, 1},
+   {42819, 42819, -1, 0},
+   {42820, 42820, 0, 1},
+   {42821, 42821, -1, 0},
+   {42822, 42822, 0, 1},
+   {42823, 42823, -1, 0},
+   {42824, 42824, 0, 1},
+   {42825, 42825, -1, 0},
+   {42826, 42826, 0, 1},
+   {42827, 42827, -1, 0},
+   {42828, 42828, 0, 1},
+   {42829, 42829, -1, 0},
+   {42830, 42830, 0, 1},
+   {42831, 42831, -1, 0},
+   {42832, 42832, 0, 1},
+   {42833, 42833, -1, 0},
+   {42834, 42834, 0, 1},
+   {42835, 42835, -1, 0},
+   {42836, 42836, 0, 1},
+   {42837, 42837, -1, 0},
+   {42838, 42838, 0, 1},
+   {42839, 42839, -1, 0},
+   {42840, 42840, 0, 1},
+   {42841, 42841, -1, 0},
+   {42842, 42842, 0, 1},
+   {42843, 42843, -1, 0},
+   {42844, 42844, 0, 1},
+   {42845, 42845, -1, 0},
+   {42846, 42846, 0, 1},
+   {42847, 42847, -1, 0},
+   {42848, 42848, 0, 1},
+   {42849, 42849, -1, 0},
+   {42850, 42850, 0, 1},
+   {42851, 42851, -1, 0},
+   {42852, 42852, 0, 1},
+   {42853, 42853, -1, 0},
+   {42854, 42854, 0, 1},
+   {42855, 42855, -1, 0},
+   {42856, 42856, 0, 1},
+   {42857, 42857, -1, 0},
+   {42858, 42858, 0, 1},
+   {42859, 42859, -1, 0},
+   {42860, 42860, 0, 1},
+   {42861, 42861, -1, 0},
+   {42862, 42862, 0, 1},
+   {42863, 42863, -1, 0},
+   {42873, 42873, 0, 1},
+   {42874, 42874, -1, 0},
+   {42875, 42875, 0, 1},
+   {42876, 42876, -1, 0},
+   {42877, 42877, 0, -35332},
+   {42878, 42878, 0, 1},
+   {42879, 42879, -1, 0},
+   {42880, 42880, 0, 1},
+   {42881, 42881, -1, 0},
+   {42882, 42882, 0, 1},
+   {42883, 42883, -1, 0},
+   {42884, 42884, 0, 1},
+   {42885, 42885, -1, 0},
+   {42886, 42886, 0, 1},
+   {42887, 42887, -1, 0},
+   {42891, 42891, 0, 1},
+   {42892, 42892, -1, 0},
+   {42893, 42893, 0, -42280},
+   {42896, 42896, 0, 1},
+   {42897, 42897, -1, 0},
+   {42898, 42898, 0, 1},
+   {42899, 42899, -1, 0},
+   {42900, 42900, 48, 0},
+   {42902, 42902, 0, 1},
+   {42903, 42903, -1, 0},
+   {42904, 42904, 0, 1},
+   {42905, 42905, -1, 0},
+   {42906, 42906, 0, 1},
+   {42907, 42907, -1, 0},
+   {42908, 42908, 0, 1},
+   {42909, 42909, -1, 0},
+   {42910, 42910, 0, 1},
+   {42911, 42911, -1, 0},
+   {42912, 42912, 0, 1},
+   {42913, 42913, -1, 0},
+   {42914, 42914, 0, 1},
+   {42915, 42915, -1, 0},
+   {42916, 42916, 0, 1},
+   {42917, 42917, -1, 0},
+   {42918, 42918, 0, 1},
+   {42919, 42919, -1, 0},
+   {42920, 42920, 0, 1},
+   {42921, 42921, -1, 0},
+   {42922, 42922, 0, -42308},
+   {42923, 42923, 0, -42319},
+   {42924, 42924, 0, -42315},
+   {42925, 42925, 0, -42305},
+   {42926, 42926, 0, -42308},
+   {42928, 42928, 0, -42258},
+   {42929, 42929, 0, -42282},
+   {42930, 42930, 0, -42261},
+   {42931, 42931, 0, 928},
+   {42932, 42932, 0, 1},
+   {42933, 42933, -1, 0},
+   {42934, 42934, 0, 1},
+   {42935, 42935, -1, 0},
+   {42936, 42936, 0, 1},
+   {42937, 42937, -1, 0},
+   {42938, 42938, 0, 1},
+   {42939, 42939, -1, 0},
+   {42940, 42940, 0, 1},
+   {42941, 42941, -1, 0},
+   {42942, 42942, 0, 1},
+   {42943, 42943, -1, 0},
+   {42946, 42946, 0, 1},
+   {42947, 42947, -1, 0},
+   {42948, 42948, 0, -48},
+   {42949, 42949, 0, -42307},
+   {42950, 42950, 0, -35384},
+   {42951, 42951, 0, 1},
+   {42952, 42952, -1, 0},
+   {42953, 42953, 0, 1},
+   {42954, 42954, -1, 0},
+   {42997, 42997, 0, 1},
+   {42998, 42998, -1, 0},
+   {43859, 43859, -928, 0},
+   {43888, 43967, -38864, 0},
+   {65313, 65338, 0, 32},
+   {65345, 65370, -32, 0},
+   {66560, 66599, 0, 40},
+   {66600, 66639, -40, 0},
+   {66736, 66771, 0, 40},
+   {66776, 66811, -40, 0},
+   {68736, 68786, 0, 64},
+   {68800, 68850, -64, 0},
+   {71840, 71871, 0, 32},
+   {71872, 71903, -32, 0},
+   {93760, 93791, 0, 32},
+   {93792, 93823, -32, 0},
+   {125184, 125217, 0, 34},
+   {125218, 125251, -34, 0},
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-exp.c ./gdb/ada-exp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-exp.c	2019-12-11 01:52:52.000000000 +0000
+++ ./gdb/ada-exp.c	2024-02-01 01:52:09.000000000 +0000
@@ -1,21 +1,19 @@
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* Bison implementation for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-   
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -28,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -46,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.0.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,15 +58,11 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
 /* Copy the first part of user declarations.  */
-
-/* Line 189 of yacc.c  */
-#line 36 "ada-exp.y"
+#line 36 "ada-exp.y" /* yacc.c:339  */
 
 
 #include "defs.h"
@@ -78,11 +72,9 @@
 #include "parser-defs.h"
 #include "language.h"
 #include "ada-lang.h"
-#include "bfd.h" /* Required by objfiles.h.  */
-#include "symfile.h" /* Required by objfiles.h.  */
-#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
 #include "frame.h"
 #include "block.h"
+#include "ada-exp.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 
@@ -103,11 +95,13 @@ struct name_info {
 
 static struct parser_state *pstate = NULL;
 
-static struct stoken empty_stoken = { "", 0 };
+/* The original expression string.  */
+static const char *original_expr;
 
-/* If expression is in the context of TYPE'(...), then TYPE, else
- * NULL.  */
-static struct type *type_qualifier;
+/* We don't have a good way to manage non-POD data in Yacc, so store
+   values here.  The storage here is only valid for the duration of
+   the parse.  */
+static std::vector<std::unique_ptr<gdb_mpz>> int_storage;
 
 int yyparse (void);
 
@@ -123,42 +117,351 @@ static void write_object_renaming (struc
 
 static struct type* write_var_or_type (struct parser_state *,
 				       const struct block *, struct stoken);
+static struct type *write_var_or_type_completion (struct parser_state *,
+						  const struct block *,
+						  struct stoken);
 
 static void write_name_assoc (struct parser_state *, struct stoken);
 
-static void write_exp_op_with_string (struct parser_state *, enum exp_opcode,
-				      struct stoken);
-
 static const struct block *block_lookup (const struct block *, const char *);
 
-static LONGEST convert_char_literal (struct type *, LONGEST);
-
 static void write_ambiguous_var (struct parser_state *,
-				 const struct block *, char *, int);
+				 const struct block *, const char *, int);
 
-static struct type *type_int (struct parser_state *);
+static struct type *type_for_char (struct parser_state *, ULONGEST);
 
-static struct type *type_long (struct parser_state *);
+static struct type *type_system_address (struct parser_state *);
 
-static struct type *type_long_long (struct parser_state *);
+static std::string find_completion_bounds (struct parser_state *);
 
-static struct type *type_long_double (struct parser_state *);
+using namespace expr;
 
-static struct type *type_char (struct parser_state *);
+/* Handle Ada type resolution for OP.  DEPROCEDURE_P and CONTEXT_TYPE
+   are passed to the resolve method, if called.  */
+static operation_up
+resolve (operation_up &&op, bool deprocedure_p, struct type *context_type)
+{
+  operation_up result = std::move (op);
+  ada_resolvable *res = dynamic_cast<ada_resolvable *> (result.get ());
+  if (res != nullptr)
+    return res->replace (std::move (result),
+			 pstate->expout.get (),
+			 deprocedure_p,
+			 pstate->parse_completion,
+			 pstate->block_tracker,
+			 context_type);
+  return result;
+}
 
-static struct type *type_boolean (struct parser_state *);
+/* Like parser_state::pop, but handles Ada type resolution.
+   DEPROCEDURE_P and CONTEXT_TYPE are passed to the resolve method, if
+   called.  */
+static operation_up
+ada_pop (bool deprocedure_p = true, struct type *context_type = nullptr)
+{
+  /* Of course it's ok to call parser_state::pop here... */
+  return resolve (pstate->pop (), deprocedure_p, context_type);
+}
 
-static struct type *type_system_address (struct parser_state *);
+/* Like parser_state::wrap, but use ada_pop to pop the value.  */
+template<typename T>
+void
+ada_wrap ()
+{
+  operation_up arg = ada_pop ();
+  pstate->push_new<T> (std::move (arg));
+}
 
+/* Create and push an address-of operation, as appropriate for Ada.
+   If TYPE is not NULL, the resulting operation will be wrapped in a
+   cast to TYPE.  */
+static void
+ada_addrof (struct type *type = nullptr)
+{
+  operation_up arg = ada_pop (false);
+  operation_up addr = make_operation<unop_addr_operation> (std::move (arg));
+  operation_up wrapped
+    = make_operation<ada_wrapped_operation> (std::move (addr));
+  if (type != nullptr)
+    wrapped = make_operation<unop_cast_operation> (std::move (wrapped), type);
+  pstate->push (std::move (wrapped));
+}
+
+/* Handle operator overloading.  Either returns a function all
+   operation wrapping the arguments, or it returns null, leaving the
+   caller to construct the appropriate operation.  If RHS is null, a
+   unary operator is assumed.  */
+static operation_up
+maybe_overload (enum exp_opcode op, operation_up &lhs, operation_up &rhs)
+{
+  struct value *args[2];
+
+  int nargs = 1;
+  args[0] = lhs->evaluate (nullptr, pstate->expout.get (),
+			   EVAL_AVOID_SIDE_EFFECTS);
+  if (rhs == nullptr)
+    args[1] = nullptr;
+  else
+    {
+      args[1] = rhs->evaluate (nullptr, pstate->expout.get (),
+			       EVAL_AVOID_SIDE_EFFECTS);
+      ++nargs;
+    }
+
+  block_symbol fn = ada_find_operator_symbol (op, pstate->parse_completion,
+					      nargs, args);
+  if (fn.symbol == nullptr)
+    return {};
+
+  if (symbol_read_needs_frame (fn.symbol))
+    pstate->block_tracker->update (fn.block, INNERMOST_BLOCK_FOR_SYMBOLS);
+  operation_up callee = make_operation<ada_var_value_operation> (fn);
+
+  std::vector<operation_up> argvec;
+  argvec.push_back (std::move (lhs));
+  if (rhs != nullptr)
+    argvec.push_back (std::move (rhs));
+  return make_operation<ada_funcall_operation> (std::move (callee),
+						std::move (argvec));
+}
+
+/* Like parser_state::wrap, but use ada_pop to pop the value, and
+   handle unary overloading.  */
+template<typename T>
+void
+ada_wrap_overload (enum exp_opcode op)
+{
+  operation_up arg = ada_pop ();
+  operation_up empty;
 
+  operation_up call = maybe_overload (op, arg, empty);
+  if (call == nullptr)
+    call = make_operation<T> (std::move (arg));
+  pstate->push (std::move (call));
+}
 
-/* Line 189 of yacc.c  */
-#line 157 "ada-exp.c.tmp"
+/* A variant of parser_state::wrap2 that uses ada_pop to pop both
+   operands, and then pushes a new Ada-wrapped operation of the
+   template type T.  */
+template<typename T>
+void
+ada_un_wrap2 (enum exp_opcode op)
+{
+  operation_up rhs = ada_pop ();
+  operation_up lhs = ada_pop ();
 
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
+  operation_up wrapped = maybe_overload (op, lhs, rhs);
+  if (wrapped == nullptr)
+    {
+      wrapped = make_operation<T> (std::move (lhs), std::move (rhs));
+      wrapped = make_operation<ada_wrapped_operation> (std::move (wrapped));
+    }
+  pstate->push (std::move (wrapped));
+}
+
+/* A variant of parser_state::wrap2 that uses ada_pop to pop both
+   operands.  Unlike ada_un_wrap2, ada_wrapped_operation is not
+   used.  */
+template<typename T>
+void
+ada_wrap2 (enum exp_opcode op)
+{
+  operation_up rhs = ada_pop ();
+  operation_up lhs = ada_pop ();
+  operation_up call = maybe_overload (op, lhs, rhs);
+  if (call == nullptr)
+    call = make_operation<T> (std::move (lhs), std::move (rhs));
+  pstate->push (std::move (call));
+}
+
+/* A variant of parser_state::wrap2 that uses ada_pop to pop both
+   operands.  OP is also passed to the constructor of the new binary
+   operation.  */
+template<typename T>
+void
+ada_wrap_op (enum exp_opcode op)
+{
+  operation_up rhs = ada_pop ();
+  operation_up lhs = ada_pop ();
+  operation_up call = maybe_overload (op, lhs, rhs);
+  if (call == nullptr)
+    call = make_operation<T> (op, std::move (lhs), std::move (rhs));
+  pstate->push (std::move (call));
+}
+
+/* Pop three operands using ada_pop, then construct a new ternary
+   operation of type T and push it.  */
+template<typename T>
+void
+ada_wrap3 ()
+{
+  operation_up rhs = ada_pop ();
+  operation_up mid = ada_pop ();
+  operation_up lhs = ada_pop ();
+  pstate->push_new<T> (std::move (lhs), std::move (mid), std::move (rhs));
+}
+
+/* Pop NARGS operands, then a callee operand, and use these to
+   construct and push a new Ada function call operation.  */
+static void
+ada_funcall (int nargs)
+{
+  /* We use the ordinary pop here, because we're going to do
+     resolution in a separate step, in order to handle array
+     indices.  */
+  std::vector<operation_up> args = pstate->pop_vector (nargs);
+  /* Call parser_state::pop here, because we don't want to
+     function-convert the callee slot of a call we're already
+     constructing.  */
+  operation_up callee = pstate->pop ();
+
+  ada_var_value_operation *vvo
+    = dynamic_cast<ada_var_value_operation *> (callee.get ());
+  int array_arity = 0;
+  struct type *callee_t = nullptr;
+  if (vvo == nullptr
+      || vvo->get_symbol ()->domain () != UNDEF_DOMAIN)
+    {
+      struct value *callee_v = callee->evaluate (nullptr,
+						 pstate->expout.get (),
+						 EVAL_AVOID_SIDE_EFFECTS);
+      callee_t = ada_check_typedef (callee_v->type ());
+      array_arity = ada_array_arity (callee_t);
+    }
+
+  for (int i = 0; i < nargs; ++i)
+    {
+      struct type *subtype = nullptr;
+      if (i < array_arity)
+	subtype = ada_index_type (callee_t, i + 1, "array type");
+      args[i] = resolve (std::move (args[i]), true, subtype);
+    }
+
+  std::unique_ptr<ada_funcall_operation> funcall
+    (new ada_funcall_operation (std::move (callee), std::move (args)));
+  funcall->resolve (pstate->expout.get (), true, pstate->parse_completion,
+		    pstate->block_tracker, nullptr);
+  pstate->push (std::move (funcall));
+}
+
+/* The components being constructed during this parse.  */
+static std::vector<ada_component_up> components;
+
+/* Create a new ada_component_up of the indicated type and arguments,
+   and push it on the global 'components' vector.  */
+template<typename T, typename... Arg>
+void
+push_component (Arg... args)
+{
+  components.emplace_back (new T (std::forward<Arg> (args)...));
+}
+
+/* Examine the final element of the 'components' vector, and return it
+   as a pointer to an ada_choices_component.  The caller is
+   responsible for ensuring that the final element is in fact an
+   ada_choices_component.  */
+static ada_choices_component *
+choice_component ()
+{
+  ada_component *last = components.back ().get ();
+  return gdb::checked_static_cast<ada_choices_component *> (last);
+}
+
+/* Pop the most recent component from the global stack, and return
+   it.  */
+static ada_component_up
+pop_component ()
+{
+  ada_component_up result = std::move (components.back ());
+  components.pop_back ();
+  return result;
+}
+
+/* Pop the N most recent components from the global stack, and return
+   them in a vector.  */
+static std::vector<ada_component_up>
+pop_components (int n)
+{
+  std::vector<ada_component_up> result (n);
+  for (int i = 1; i <= n; ++i)
+    result[n - i] = pop_component ();
+  return result;
+}
+
+/* The associations being constructed during this parse.  */
+static std::vector<ada_association_up> associations;
+
+/* Create a new ada_association_up of the indicated type and
+   arguments, and push it on the global 'associations' vector.  */
+template<typename T, typename... Arg>
+void
+push_association (Arg... args)
+{
+  associations.emplace_back (new T (std::forward<Arg> (args)...));
+}
+
+/* Pop the most recent association from the global stack, and return
+   it.  */
+static ada_association_up
+pop_association ()
+{
+  ada_association_up result = std::move (associations.back ());
+  associations.pop_back ();
+  return result;
+}
+
+/* Pop the N most recent associations from the global stack, and
+   return them in a vector.  */
+static std::vector<ada_association_up>
+pop_associations (int n)
+{
+  std::vector<ada_association_up> result (n);
+  for (int i = 1; i <= n; ++i)
+    result[n - i] = pop_association ();
+  return result;
+}
+
+/* Expression completer for attributes.  */
+struct ada_tick_completer : public expr_completion_base
+{
+  explicit ada_tick_completer (std::string &&name)
+    : m_name (std::move (name))
+  {
+  }
+
+  bool complete (struct expression *exp,
+		 completion_tracker &tracker) override;
+
+private:
+
+  std::string m_name;
+};
+
+/* Make a new ada_tick_completer and wrap it in a unique pointer.  */
+static std::unique_ptr<expr_completion_base>
+make_tick_completer (struct stoken tok)
+{
+  return (std::unique_ptr<expr_completion_base>
+	  (new ada_tick_completer (std::string (tok.ptr, tok.length))));
+}
+
+/* A convenience typedef.  */
+typedef std::unique_ptr<ada_assign_operation> ada_assign_up;
+
+/* The stack of currently active assignment expressions.  This is used
+   to implement '@', the target name symbol.  */
+static std::vector<ada_assign_up> assignments;
+
+
+#line 457 "ada-exp.c.tmp" /* yacc.c:339  */
+
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULLPTRPTR nullptr
+#  else
+#   define YY_NULLPTRPTR 0
+#  endif
+# endif
 
 /* Enabling verbose error messages.  */
 #ifdef YYERROR_VERBOSE
@@ -168,65 +471,71 @@ static struct type *type_system_address
 # define YYERROR_VERBOSE 0
 #endif
 
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
 
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
 
-/* Tokens.  */
+/* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     INT = 258,
-     NULL_PTR = 259,
-     CHARLIT = 260,
-     FLOAT = 261,
-     TRUEKEYWORD = 262,
-     FALSEKEYWORD = 263,
-     COLONCOLON = 264,
-     STRING = 265,
-     NAME = 266,
-     DOT_ID = 267,
-     DOT_ALL = 268,
-     DOLLAR_VARIABLE = 269,
-     ASSIGN = 270,
-     ELSE = 271,
-     THEN = 272,
-     XOR = 273,
-     OR = 274,
-     _AND_ = 275,
-     DOTDOT = 276,
-     IN = 277,
-     GEQ = 278,
-     LEQ = 279,
-     NOTEQUAL = 280,
-     UNARY = 281,
-     REM = 282,
-     MOD = 283,
-     NOT = 284,
-     ABS = 285,
-     STARSTAR = 286,
-     VAR = 287,
-     ARROW = 288,
-     TICK_LENGTH = 289,
-     TICK_LAST = 290,
-     TICK_FIRST = 291,
-     TICK_ADDRESS = 292,
-     TICK_ACCESS = 293,
-     TICK_MODULUS = 294,
-     TICK_MIN = 295,
-     TICK_MAX = 296,
-     TICK_VAL = 297,
-     TICK_TAG = 298,
-     TICK_SIZE = 299,
-     TICK_RANGE = 300,
-     TICK_POS = 301,
-     NEW = 302,
-     OTHERS = 303
-   };
+  enum yytokentype
+  {
+    INT = 258,
+    NULL_PTR = 259,
+    CHARLIT = 260,
+    FLOAT = 261,
+    TRUEKEYWORD = 262,
+    FALSEKEYWORD = 263,
+    COLONCOLON = 264,
+    STRING = 265,
+    NAME = 266,
+    DOT_ID = 267,
+    TICK_COMPLETE = 268,
+    DOT_COMPLETE = 269,
+    NAME_COMPLETE = 270,
+    DOLLAR_VARIABLE = 271,
+    ASSIGN = 272,
+    _AND_ = 273,
+    OR = 274,
+    XOR = 275,
+    THEN = 276,
+    ELSE = 277,
+    NOTEQUAL = 278,
+    LEQ = 279,
+    GEQ = 280,
+    IN = 281,
+    DOTDOT = 282,
+    UNARY = 283,
+    MOD = 284,
+    REM = 285,
+    STARSTAR = 286,
+    ABS = 287,
+    NOT = 288,
+    VAR = 289,
+    ARROW = 290,
+    TICK_ACCESS = 291,
+    TICK_ADDRESS = 292,
+    TICK_FIRST = 293,
+    TICK_LAST = 294,
+    TICK_LENGTH = 295,
+    TICK_MAX = 296,
+    TICK_MIN = 297,
+    TICK_MODULUS = 298,
+    TICK_POS = 299,
+    TICK_RANGE = 300,
+    TICK_SIZE = 301,
+    TICK_TAG = 302,
+    TICK_VAL = 303,
+    TICK_ENUM_REP = 304,
+    TICK_ENUM_VAL = 305,
+    NEW = 306,
+    OTHERS = 307
+  };
 #endif
 /* Tokens.  */
 #define INT 258
@@ -239,59 +548,64 @@ static struct type *type_system_address
 #define STRING 265
 #define NAME 266
 #define DOT_ID 267
-#define DOT_ALL 268
-#define DOLLAR_VARIABLE 269
-#define ASSIGN 270
-#define ELSE 271
-#define THEN 272
-#define XOR 273
+#define TICK_COMPLETE 268
+#define DOT_COMPLETE 269
+#define NAME_COMPLETE 270
+#define DOLLAR_VARIABLE 271
+#define ASSIGN 272
+#define _AND_ 273
 #define OR 274
-#define _AND_ 275
-#define DOTDOT 276
-#define IN 277
-#define GEQ 278
+#define XOR 275
+#define THEN 276
+#define ELSE 277
+#define NOTEQUAL 278
 #define LEQ 279
-#define NOTEQUAL 280
-#define UNARY 281
-#define REM 282
-#define MOD 283
-#define NOT 284
-#define ABS 285
+#define GEQ 280
+#define IN 281
+#define DOTDOT 282
+#define UNARY 283
+#define MOD 284
+#define REM 285
 #define STARSTAR 286
-#define VAR 287
-#define ARROW 288
-#define TICK_LENGTH 289
-#define TICK_LAST 290
-#define TICK_FIRST 291
+#define ABS 287
+#define NOT 288
+#define VAR 289
+#define ARROW 290
+#define TICK_ACCESS 291
 #define TICK_ADDRESS 292
-#define TICK_ACCESS 293
-#define TICK_MODULUS 294
-#define TICK_MIN 295
+#define TICK_FIRST 293
+#define TICK_LAST 294
+#define TICK_LENGTH 295
 #define TICK_MAX 296
-#define TICK_VAL 297
-#define TICK_TAG 298
-#define TICK_SIZE 299
+#define TICK_MIN 297
+#define TICK_MODULUS 298
+#define TICK_POS 299
 #define TICK_RANGE 300
-#define TICK_POS 301
-#define NEW 302
-#define OTHERS 303
+#define TICK_SIZE 301
+#define TICK_TAG 302
+#define TICK_VAL 303
+#define TICK_ENUM_REP 304
+#define TICK_ENUM_VAL 305
+#define NEW 306
+#define OTHERS 307
 
+/* Value type.  */
+#if ! defined ada_exp_YYSTYPE && ! defined ada_exp_YYSTYPE_IS_DECLARED
 
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union ada_exp_YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
-#line 120 "ada-exp.y"
+#line 428 "ada-exp.y" /* yacc.c:355  */
 
     LONGEST lval;
     struct {
-      LONGEST val;
+      const gdb_mpz *val;
       struct type *type;
     } typed_val;
     struct {
+      LONGEST val;
+      struct type *type;
+    } typed_char;
+    struct {
       gdb_byte val[16];
       struct type *type;
     } typed_val_float;
@@ -301,21 +615,24 @@ typedef union YYSTYPE
     struct internalvar *ivar;
   
 
+#line 619 "ada-exp.c.tmp" /* yacc.c:355  */
+};
 
-/* Line 214 of yacc.c  */
-#line 307 "ada-exp.c.tmp"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
+typedef union ada_exp_YYSTYPE ada_exp_YYSTYPE;
+# define ada_exp_YYSTYPE_IS_TRIVIAL 1
+# define ada_exp_YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
+extern ada_exp_YYSTYPE yylval;
 
+int yyparse (void);
+
+
+
+/* Copy the second part of user declarations.  */
 
-/* Line 264 of yacc.c  */
-#line 319 "ada-exp.c.tmp"
+#line 636 "ada-exp.c.tmp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -329,11 +646,8 @@ typedef unsigned char yytype_uint8;
 
 #ifdef YYTYPE_INT8
 typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
 #ifdef YYTYPE_UINT16
@@ -353,8 +667,7 @@ typedef short int yytype_int16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -365,41 +678,70 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
 #  endif
 # endif
 # ifndef YY_
-#  define YY_(msgid) msgid
+#  define YY_(Msgid) Msgid
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+#  define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
 # endif
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
+# define YYUSE(E) ((void) (E))
 #else
-# define YYUSE(e) /* empty */
+# define YYUSE(E) /* empty */
 #endif
 
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
 #else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
-    int yyi;
+# define YY_INITIAL_VALUE(Value) Value
 #endif
-{
-  return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
 #endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
 
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
@@ -417,11 +759,11 @@ YYID (yyi)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
+      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
 #     endif
 #    endif
 #   endif
@@ -429,8 +771,8 @@ YYID (yyi)
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+   /* Pacify GCC's 'empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -444,25 +786,23 @@ YYID (yyi)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined xmalloc) \
-	     && (defined YYFREE || defined xfree)))
+             && (defined YYFREE || defined xfree)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC xmalloc
-#   if ! defined xmalloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined xmalloc && ! defined EXIT_SUCCESS
 void *xmalloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE xfree
-#   if ! defined xfree && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined xfree && ! defined EXIT_SUCCESS
 void xfree (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -472,97 +812,103 @@ void xfree (void *); /* INFRINGES ON USE
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined ada_exp_YYSTYPE_IS_TRIVIAL && ada_exp_YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
-union yyalloc
+union ada_exp_yyalloc
 {
   yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
+  ada_exp_YYSTYPE yyvs_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (sizeof (union ada_exp_yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+     ((N) * (sizeof (yytype_int16) + sizeof (ada_exp_YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
+# define YYCOPY_NEEDED 1
 
 /* Relocate STACK from its old location to the new one.  The
    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
+    do                                                                  \
+      {                                                                 \
+        YYSIZE_T yynewbytes;                                            \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                 \
+    while (0)
 
 #endif
 
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(Dst, Src, Count) \
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYSIZE_T yyi;                         \
+          for (yyi = 0; yyi < (Count); yyi++)   \
+            (Dst)[yyi] = (Src)[yyi];            \
+        }                                       \
+      while (0)
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  57
+#define YYFINAL  59
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   770
+#define YYLAST   798
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  69
+#define YYNTOKENS  73
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  31
+#define YYNNTS  26
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  122
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  233
+#define YYNRULES  123
+/* YYNSTATES -- Number of states.  */
+#define YYNSTATES  240
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   303
+#define YYMAXUTOK   307
 
-#define YYTRANSLATE(YYX)						\
+#define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, without out-of-bounds checking.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    32,    64,
-      58,    63,    34,    30,    65,    31,    57,    35,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,    62,
-      22,    21,    23,     2,    29,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    34,    68,
+      62,    67,    36,    32,    69,    33,    61,    37,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,    66,
+      25,    23,    26,     2,    31,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    59,     2,    68,     2,     2,     2,     2,     2,     2,
+       2,    63,     2,    72,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    66,    42,    67,     2,     2,     2,     2,
+       2,     2,     2,    70,    45,    71,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -577,543 +923,431 @@ static const yytype_uint8 yytranslate[]
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    24,    25,    26,    27,
-      28,    33,    36,    37,    38,    39,    40,    41,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    60,    61
+      15,    16,    17,    18,    19,    20,    21,    22,    24,    27,
+      28,    29,    30,    35,    38,    39,    40,    41,    42,    43,
+      44,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    64,    65
 };
 
 #if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     5,     7,    11,    15,    18,    21,    26,
-      31,    32,    40,    41,    48,    55,    59,    61,    63,    65,
-      67,    70,    73,    76,    79,    80,    82,    86,    90,    96,
-     101,   105,   109,   113,   117,   121,   125,   129,   133,   137,
-     139,   143,   147,   151,   157,   163,   167,   174,   181,   186,
-     190,   194,   198,   200,   202,   204,   206,   208,   210,   214,
-     218,   223,   228,   232,   236,   241,   246,   250,   254,   257,
-     260,   264,   268,   272,   275,   278,   286,   294,   300,   306,
-     309,   310,   314,   316,   318,   319,   321,   323,   325,   327,
-     329,   331,   333,   336,   338,   341,   344,   348,   351,   355,
-     359,   361,   364,   367,   370,   374,   376,   378,   382,   386,
-     388,   389,   394,   398,   399,   406,   407,   412,   416,   417,
-     424,   427,   430
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int8 yyrhs[] =
-{
-      70,     0,    -1,    71,    -1,    78,    -1,    71,    62,    78,
-      -1,    72,    15,    78,    -1,    72,    13,    -1,    72,    12,
-      -1,    72,    58,    76,    63,    -1,    87,    58,    76,    63,
-      -1,    -1,    87,    64,    74,    73,    58,    78,    63,    -1,
-      -1,    72,    58,    75,    24,    75,    63,    -1,    87,    58,
-      75,    24,    75,    63,    -1,    58,    71,    63,    -1,    87,
-      -1,    14,    -1,    89,    -1,    72,    -1,    31,    75,    -1,
-      30,    75,    -1,    38,    75,    -1,    39,    75,    -1,    -1,
-      78,    -1,    11,    43,    78,    -1,    76,    65,    78,    -1,
-      76,    65,    11,    43,    78,    -1,    66,    87,    67,    72,
-      -1,    75,    40,    75,    -1,    75,    34,    75,    -1,    75,
-      35,    75,    -1,    75,    36,    75,    -1,    75,    37,    75,
-      -1,    75,    29,    75,    -1,    75,    30,    75,    -1,    75,
-      32,    75,    -1,    75,    31,    75,    -1,    75,    -1,    75,
-      21,    75,    -1,    75,    28,    75,    -1,    75,    27,    75,
-      -1,    75,    25,    75,    24,    75,    -1,    75,    25,    72,
-      55,    84,    -1,    75,    25,    87,    -1,    75,    38,    25,
-      75,    24,    75,    -1,    75,    38,    25,    72,    55,    84,
-      -1,    75,    38,    25,    87,    -1,    75,    26,    75,    -1,
-      75,    22,    75,    -1,    75,    23,    75,    -1,    77,    -1,
-      79,    -1,    80,    -1,    81,    -1,    82,    -1,    83,    -1,
-      77,    20,    77,    -1,    79,    20,    77,    -1,    77,    20,
-      17,    77,    -1,    80,    20,    17,    77,    -1,    77,    19,
-      77,    -1,    81,    19,    77,    -1,    77,    19,    16,    77,
-      -1,    82,    19,    16,    77,    -1,    77,    18,    77,    -1,
-      83,    18,    77,    -1,    72,    48,    -1,    72,    47,    -1,
-      72,    46,    84,    -1,    72,    45,    84,    -1,    72,    44,
-      84,    -1,    72,    54,    -1,    72,    53,    -1,    86,    50,
-      58,    78,    65,    78,    63,    -1,    86,    51,    58,    78,
-      65,    78,    63,    -1,    86,    56,    58,    78,    63,    -1,
-      85,    52,    58,    78,    63,    -1,    85,    49,    -1,    -1,
-      58,     3,    63,    -1,    87,    -1,    85,    -1,    -1,     3,
-      -1,     5,    -1,     6,    -1,     4,    -1,    10,    -1,     7,
-      -1,     8,    -1,    60,    11,    -1,    11,    -1,    88,    11,
-      -1,    11,    48,    -1,    88,    11,    48,    -1,    11,     9,
-      -1,    88,    11,     9,    -1,    58,    90,    63,    -1,    92,
-      -1,    91,    78,    -1,    91,    92,    -1,    78,    65,    -1,
-      91,    78,    65,    -1,    93,    -1,    94,    -1,    94,    65,
-      92,    -1,    61,    43,    78,    -1,    95,    -1,    -1,    11,
-      43,    96,    78,    -1,    75,    43,    78,    -1,    -1,    75,
-      24,    75,    43,    97,    78,    -1,    -1,    11,    42,    98,
-      95,    -1,    75,    42,    95,    -1,    -1,    75,    24,    75,
-      42,    99,    95,    -1,    34,    72,    -1,    32,    72,    -1,
-      72,    59,    78,    68,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   185,   185,   189,   190,   192,   197,   201,   206,   212,
-     231,   231,   243,   247,   249,   257,   268,   278,   282,   285,
-     288,   292,   296,   300,   304,   307,   309,   311,   313,   317,
-     330,   334,   338,   342,   346,   350,   354,   358,   362,   366,
-     369,   373,   377,   381,   383,   388,   396,   400,   406,   417,
-     421,   425,   429,   430,   431,   432,   433,   434,   438,   440,
-     445,   447,   452,   454,   459,   461,   465,   467,   479,   481,
-     488,   491,   494,   497,   499,   501,   503,   505,   507,   509,
-     513,   515,   520,   530,   532,   539,   543,   551,   559,   563,
-     569,   571,   575,   579,   581,   583,   591,   602,   604,   609,
-     618,   619,   625,   630,   636,   645,   646,   647,   651,   656,
-     671,   670,   673,   676,   675,   682,   681,   684,   687,   686,
-     694,   696,   698
+       0,   495,   495,   499,   500,   503,   502,   526,   539,   553,
+     555,   570,   582,   584,   592,   603,   609,   613,   620,   631,
+     634,   638,   654,   661,   665,   668,   670,   672,   674,   678,
+     691,   695,   699,   703,   707,   711,   715,   719,   723,   727,
+     730,   734,   738,   742,   744,   751,   759,   762,   770,   781,
+     785,   789,   793,   794,   795,   796,   797,   798,   802,   805,
+     811,   814,   820,   823,   829,   831,   835,   838,   851,   853,
+     855,   859,   865,   871,   877,   879,   881,   883,   885,   887,
+     893,   899,   905,   915,   917,   922,   931,   934,   938,   945,
+     951,   962,   970,   977,   982,   989,   993,   995,  1001,  1003,
+    1009,  1017,  1028,  1030,  1035,  1046,  1047,  1053,  1058,  1064,
+    1073,  1074,  1075,  1079,  1086,  1099,  1105,  1111,  1120,  1125,
+    1130,  1144,  1146,  1148
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || 0
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "INT", "NULL_PTR", "CHARLIT", "FLOAT",
   "TRUEKEYWORD", "FALSEKEYWORD", "COLONCOLON", "STRING", "NAME", "DOT_ID",
-  "DOT_ALL", "DOLLAR_VARIABLE", "ASSIGN", "ELSE", "THEN", "XOR", "OR",
-  "_AND_", "'='", "'<'", "'>'", "DOTDOT", "IN", "GEQ", "LEQ", "NOTEQUAL",
-  "'@'", "'+'", "'-'", "'&'", "UNARY", "'*'", "'/'", "REM", "MOD", "NOT",
-  "ABS", "STARSTAR", "VAR", "'|'", "ARROW", "TICK_LENGTH", "TICK_LAST",
-  "TICK_FIRST", "TICK_ADDRESS", "TICK_ACCESS", "TICK_MODULUS", "TICK_MIN",
-  "TICK_MAX", "TICK_VAL", "TICK_TAG", "TICK_SIZE", "TICK_RANGE",
-  "TICK_POS", "'.'", "'('", "'['", "NEW", "OTHERS", "';'", "')'", "'\\''",
-  "','", "'{'", "'}'", "']'", "$accept", "start", "exp1", "primary", "$@1",
-  "save_qualifier", "simple_exp", "arglist", "relation", "exp", "and_exp",
+  "TICK_COMPLETE", "DOT_COMPLETE", "NAME_COMPLETE", "DOLLAR_VARIABLE",
+  "ASSIGN", "_AND_", "OR", "XOR", "THEN", "ELSE", "'='", "NOTEQUAL", "'<'",
+  "'>'", "LEQ", "GEQ", "IN", "DOTDOT", "'@'", "'+'", "'-'", "'&'", "UNARY",
+  "'*'", "'/'", "MOD", "REM", "STARSTAR", "ABS", "NOT", "VAR", "ARROW",
+  "'|'", "TICK_ACCESS", "TICK_ADDRESS", "TICK_FIRST", "TICK_LAST",
+  "TICK_LENGTH", "TICK_MAX", "TICK_MIN", "TICK_MODULUS", "TICK_POS",
+  "TICK_RANGE", "TICK_SIZE", "TICK_TAG", "TICK_VAL", "TICK_ENUM_REP",
+  "TICK_ENUM_VAL", "'.'", "'('", "'['", "NEW", "OTHERS", "';'", "')'",
+  "'\\''", "','", "'{'", "'}'", "']'", "$accept", "start", "exp1", "$@1",
+  "primary", "simple_exp", "arglist", "relation", "exp", "and_exp",
   "and_then_exp", "or_exp", "or_else_exp", "xor_exp", "tick_arglist",
   "type_prefix", "opt_type_prefix", "var_or_type", "block", "aggregate",
   "aggregate_component_list", "positional_list", "component_groups",
-  "others", "component_group", "component_associations", "$@2", "$@3",
-  "$@4", "$@5", 0
+  "others", "component_group", "component_associations", YY_NULLPTRPTR
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,    61,    60,    62,   276,   277,   278,   279,   280,    64,
-      43,    45,    38,   281,    42,    47,   282,   283,   284,   285,
-     286,   287,   124,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,    46,    40,    91,
-     302,   303,    59,    41,    39,    44,   123,   125,    93
+     275,   276,   277,    61,   278,    60,    62,   279,   280,   281,
+     282,    64,    43,    45,    38,   283,    42,    47,   284,   285,
+     286,   287,   288,   289,   290,   124,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,    46,    40,    91,   306,   307,    59,    41,    39,    44,
+     123,   125,    93
 };
 # endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    69,    70,    71,    71,    71,    72,    72,    72,    72,
-      73,    72,    74,    72,    72,    72,    72,    72,    72,    75,
-      75,    75,    75,    75,    76,    76,    76,    76,    76,    72,
-      75,    75,    75,    75,    75,    75,    75,    75,    75,    77,
-      77,    77,    77,    77,    77,    77,    77,    77,    77,    77,
-      77,    77,    78,    78,    78,    78,    78,    78,    79,    79,
-      80,    80,    81,    81,    82,    82,    83,    83,    72,    72,
-      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
-      84,    84,    85,    86,    86,    72,    72,    72,    72,    72,
-      72,    72,    72,    87,    87,    87,    87,    88,    88,    89,
-      90,    90,    90,    91,    91,    92,    92,    92,    93,    94,
-      96,    95,    95,    97,    95,    98,    95,    95,    99,    95,
-      72,    72,    72
-};
+#define YYPACT_NINF -108
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     1,     3,     3,     2,     2,     4,     4,
-       0,     7,     0,     6,     6,     3,     1,     1,     1,     1,
-       2,     2,     2,     2,     0,     1,     3,     3,     5,     4,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
-       3,     3,     3,     5,     5,     3,     6,     6,     4,     3,
-       3,     3,     1,     1,     1,     1,     1,     1,     3,     3,
-       4,     4,     3,     3,     4,     4,     3,     3,     2,     2,
-       3,     3,     3,     2,     2,     7,     7,     5,     5,     2,
-       0,     3,     1,     1,     0,     1,     1,     1,     1,     1,
-       1,     1,     2,     1,     2,     2,     3,     2,     3,     3,
-       1,     2,     2,     2,     3,     1,     1,     3,     3,     1,
-       0,     4,     3,     0,     6,     0,     4,     3,     0,     6,
-       2,     2,     4
-};
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-108)))
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint8 yydefact[] =
+#define YYTABLE_NINF -86
+
+#define yytable_value_is_error(Yytable_value) \
+  0
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+static const yytype_int16 yypact[] =
 {
-      84,    85,    88,    86,    87,    90,    91,    89,    93,    17,
-      84,    84,    84,    84,    84,    84,    84,     0,     0,     0,
-       2,    19,    39,    52,     3,    53,    54,    55,    56,    57,
-      83,     0,    16,     0,    18,    97,    95,    19,    21,    20,
-     121,   120,    22,    23,    93,     0,     0,    39,     3,     0,
-      84,   100,   105,   106,   109,    92,     0,     1,    84,     7,
-       6,    84,    80,    80,    80,    69,    68,    74,    73,    84,
-      84,    84,    84,    84,    84,    84,    84,    84,    84,    84,
-      84,    84,    84,    84,    84,    84,     0,    84,    84,    84,
-      84,    84,     0,    84,     0,    84,    79,     0,     0,     0,
-       0,    84,    12,    94,   115,   110,    84,    15,    84,    84,
-      84,   103,    99,   101,   102,    84,    84,     4,     5,     0,
-      72,    71,    70,    93,    39,     0,    25,     0,    40,    50,
-      51,    19,     0,    16,    49,    42,    41,    35,    36,    38,
-      37,    31,    32,    33,    34,    84,    30,    66,    84,    62,
-      84,    58,    59,    84,    63,    84,    67,    84,    84,    84,
-      84,    39,     0,    10,    98,    96,    84,    84,   108,     0,
-       0,   117,   112,   104,   107,    29,     0,    84,    84,     8,
-      84,   122,    80,    84,    19,     0,    16,    64,    60,    61,
-      65,     0,     0,     0,     0,    84,     9,     0,   116,   111,
-     118,   113,    81,    26,     0,    93,    27,    44,    43,    80,
-      84,    78,    84,    84,    77,     0,    84,    84,    84,    13,
-      84,    47,    46,     0,     0,    14,     0,   119,   114,    28,
-      75,    76,    11
+     443,  -108,  -108,  -108,  -108,  -108,  -108,  -108,    -1,  -108,
+    -108,  -108,   443,   443,   563,   563,   443,   443,   294,     5,
+      -5,    12,   -26,   128,   710,    35,  -108,    -7,    28,    43,
+      50,    52,    49,    65,   410,    90,  -108,  -108,  -108,   606,
+     167,   167,    14,    14,   167,   167,    21,    31,   -45,   647,
+      30,    44,   294,  -108,  -108,    45,  -108,  -108,    51,  -108,
+     443,  -108,  -108,  -108,  -108,  -108,  -108,    58,    58,    58,
+    -108,  -108,   280,   443,   443,   443,   443,   443,   443,   443,
+     443,   443,   443,   443,   443,   443,   443,   443,   443,   443,
+      97,   362,   403,   443,   443,   106,   443,   121,   443,  -108,
+      82,    84,    96,   108,   110,   111,   280,   118,    25,  -108,
+     443,   483,   443,  -108,   443,   443,   483,  -108,  -108,    91,
+    -108,   294,   563,  -108,   443,   176,  -108,  -108,  -108,    -2,
+     670,   -40,  -108,   109,    98,    98,    98,    98,    98,    98,
+       1,   738,   182,   758,   167,   167,   167,   143,   143,   143,
+     143,   143,   443,   443,  -108,   443,  -108,  -108,  -108,   443,
+    -108,   443,  -108,   443,   443,   443,   443,   443,   443,   690,
+      11,   443,  -108,  -108,  -108,   117,  -108,  -108,   722,  -108,
+    -108,  -108,  -108,    14,  -108,   120,   443,   443,  -108,   523,
+    -108,    58,   443,   588,   749,   210,  -108,  -108,  -108,  -108,
+     125,   126,   129,   119,   139,   130,   443,  -108,   131,   443,
+     483,  -108,  -108,   348,    24,  -108,  -108,    98,    58,   443,
+    -108,  -108,  -108,   443,   443,  -108,   572,  -108,  -108,  -108,
+    -108,   443,  -108,    98,   144,   145,  -108,  -108,  -108,  -108
 };
 
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+     Performed when YYTABLE does not specify something else to do.  Zero
+     means the default is an error.  */
+static const yytype_uint8 yydefact[] =
 {
-      -1,    19,    20,    37,   197,   163,    22,   125,    23,   126,
-      25,    26,    27,    28,    29,   120,    30,    31,    32,    33,
-      34,    49,    50,    51,    52,    53,    54,   167,   218,   166,
-     217
+      87,    88,    91,    89,    90,    93,    94,    92,    96,    97,
+      16,    18,    87,    87,    87,    87,    87,    87,    87,     0,
+       0,     0,     2,    19,    39,    52,     3,    53,    54,    55,
+      56,    57,    86,     0,    15,     0,    17,   102,   100,    19,
+      21,    20,   122,   121,    23,    22,    96,     0,     0,    39,
+       3,     0,    87,   105,   110,   111,   114,    95,     0,     1,
+      87,     7,    70,     8,     5,    68,    69,    83,    83,    83,
+      74,    75,    87,    87,    87,    87,    87,    87,    87,    87,
+      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
+       0,    87,    87,    87,    87,     0,    87,     0,    87,    82,
+       0,     0,     0,     0,     0,     0,    87,     0,    98,    99,
+      87,    87,    87,    14,    87,    87,    87,   108,   104,   106,
+     107,    87,    87,     4,    87,     0,    71,    72,    73,    96,
+      39,     0,    25,     0,    40,    41,    50,    51,    42,    49,
+      19,     0,    15,    35,    36,    38,    37,    31,    32,    34,
+      33,    30,    87,    87,    58,    87,    62,    66,    59,    87,
+      63,    87,    67,    87,    87,    87,    87,    87,    87,    39,
+       0,    87,   103,   101,   115,     0,   118,   113,     0,   116,
+     119,   109,   112,    29,     6,     0,    87,    87,     9,    87,
+     123,    83,    87,    19,     0,    15,    60,    64,    61,    65,
+       0,     0,     0,     0,     0,     0,    87,    10,     0,    87,
+      87,    84,    26,     0,    96,    27,    44,    43,    83,    87,
+      79,    80,    81,    87,    87,    78,     0,    11,   117,   120,
+      12,    87,    47,    46,     0,     0,    13,    28,    77,    76
 };
 
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -104
-static const yytype_int16 yypact[] =
+  /* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
 {
-     424,  -104,  -104,  -104,  -104,  -104,  -104,  -104,    16,  -104,
-     424,   424,   118,   118,   424,   424,   286,    -7,     6,    31,
-     -26,   501,   674,    20,  -104,    28,    32,    22,    34,    42,
-     -44,   -21,    84,    57,  -104,  -104,  -104,   558,    63,    63,
-      -3,    -3,    63,    63,    23,    26,   -36,   611,     9,    27,
-     286,  -104,  -104,    29,  -104,  -104,    25,  -104,   424,  -104,
-    -104,   424,    35,    35,    35,  -104,  -104,  -104,  -104,   274,
-     424,   424,   424,   424,   424,   424,   424,   424,   424,   424,
-     424,   424,   424,   424,   424,   424,    71,   424,   424,   350,
-     387,   424,    91,   424,    85,   424,  -104,    53,    58,    59,
-      60,   274,  -104,    19,  -104,  -104,   424,  -104,   424,   461,
-     424,  -104,  -104,    50,  -104,   286,   118,  -104,  -104,   124,
-    -104,  -104,  -104,     3,   634,   -52,  -104,    70,   719,   719,
-     719,   521,   166,   173,   719,   719,   719,   730,    63,    63,
-      63,    99,    99,    99,    99,   424,    99,  -104,   424,  -104,
-     424,  -104,  -104,   424,  -104,   424,  -104,   424,   424,   424,
-     424,   654,   -41,  -104,  -104,  -104,   461,   424,  -104,   704,
-     689,  -104,  -104,  -104,  -104,    -3,    68,   424,   424,  -104,
-     498,  -104,    35,   424,   538,   215,   208,  -104,  -104,  -104,
-    -104,    78,    79,    80,    83,   424,  -104,    93,  -104,  -104,
-    -104,  -104,  -104,  -104,   339,    14,  -104,  -104,   719,    35,
-     424,  -104,   424,   424,  -104,   589,   424,   461,   424,  -104,
-     424,  -104,   719,    90,    92,  -104,    98,  -104,  -104,  -104,
-    -104,  -104,  -104
+    -108,  -108,   177,  -108,    17,     7,   112,   -55,     0,  -108,
+    -108,  -108,  -108,  -108,   -66,  -108,  -108,   -19,  -108,  -108,
+    -108,  -108,   -47,  -108,  -108,  -107
 };
 
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
+  /* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
 {
-    -104,  -104,   127,    21,  -104,  -104,     4,    55,   -46,     0,
-    -104,  -104,  -104,  -104,  -104,   -62,  -104,  -104,   -15,  -104,
-    -104,  -104,  -104,   -43,  -104,  -104,  -103,  -104,  -104,  -104,
-    -104
+      -1,    21,    22,   124,    39,    24,   131,    25,   132,    27,
+      28,    29,    30,    31,   126,    32,    33,    34,    35,    36,
+      51,    52,    53,    54,    55,    56
 };
 
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -83
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule whose
+     number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      24,   121,   122,    56,    55,    96,   171,   114,    97,    59,
-      60,   179,    35,   180,    38,    39,    48,     8,    42,    43,
-      47,    21,   196,    35,   180,    35,    58,   107,   164,    98,
-      99,    57,    35,    40,    41,   100,    58,    21,    88,    89,
-      90,    93,   147,   149,   151,   152,   177,   154,    91,   156,
-     113,    36,    92,    94,    47,    69,    70,   220,   117,   133,
-      95,   118,    36,   198,    36,   104,   105,   165,   103,   106,
-     127,    36,   174,   124,   111,   128,   129,   130,   132,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     112,   146,   116,   119,   115,   131,   145,    82,    83,    84,
-      85,   155,   187,    87,   188,   161,   168,   189,   153,   190,
-     172,   157,   169,   170,   227,   173,   158,   159,   160,   170,
-     207,     1,     2,     3,     4,     5,     6,   176,     7,     8,
-     186,   202,     9,   -82,   -82,   -82,   -82,   175,   181,    87,
-     -82,   211,   101,    46,   212,   213,   214,   221,   102,   185,
-      12,   216,    13,   230,     0,   231,   162,   191,   192,   193,
-     194,   232,     0,     0,     0,     0,   184,   199,     0,     0,
-     170,     0,     0,   -45,     0,     0,    16,   203,    17,     0,
-     206,     0,   204,     0,    18,     0,     0,   208,     0,     0,
-     183,   -45,   -45,   -45,     0,    78,    79,    80,    81,   215,
-      82,    83,    84,    85,     0,     0,    87,     0,   -48,     0,
-       0,     0,   223,   224,   222,     0,   226,     0,   228,     0,
-     229,   170,   -82,   -82,   -82,   -82,   -48,   -48,   -48,   -82,
-       0,   101,     0,     0,     0,   -45,   -45,   102,   -45,   210,
-       0,   -45,     0,     0,    78,    79,    80,    81,     0,    82,
-      83,    84,    85,     0,     0,    87,     0,   -82,   -82,   -82,
-     -82,     0,     0,     0,   -82,     0,   101,     0,     0,     0,
-     -48,   -48,   102,   -48,     0,     0,   -48,     1,     2,     3,
-       4,     5,     6,     0,     7,   123,     0,     0,     9,     1,
-       2,     3,     4,     5,     6,     0,     7,    44,     0,     0,
-       9,     0,     0,     0,    10,    11,    12,     0,    13,     0,
-       0,     0,    14,    15,     0,     0,    10,    11,    12,     0,
-      13,     0,     0,     0,    14,    15,     0,     0,     0,     0,
-       0,     0,    16,     0,    17,     0,     0,   -24,     0,   -24,
-      18,     0,     0,     0,    16,     0,    17,    45,     0,     0,
-       0,     0,    18,     1,     2,     3,     4,     5,     6,     0,
-       7,     8,     0,     0,     9,     0,   148,     0,    78,    79,
-      80,    81,     0,    82,    83,    84,    85,     0,     0,    87,
-      10,    11,    12,     0,    13,     0,     0,     0,    14,    15,
-       1,     2,     3,     4,     5,     6,     0,     7,     8,     0,
-       0,     9,   219,     0,   150,     0,     0,     0,    16,     0,
-      17,     0,     0,     0,     0,     0,    18,    10,    11,    12,
-       0,    13,     0,     0,     0,    14,    15,     1,     2,     3,
-       4,     5,     6,     0,     7,     8,     0,     0,     9,     0,
-       0,     0,     0,     0,     0,    16,     0,    17,     0,     0,
-       0,     0,     0,    18,    10,    11,    12,     0,    13,     0,
-       0,     0,    14,    15,     1,     2,     3,     4,     5,     6,
-       0,     7,    44,     0,     0,     9,     0,     0,     0,     0,
-       0,     0,    16,     0,    17,     0,     0,     0,     0,     0,
-      18,    10,    11,    12,     0,    13,     0,     0,     0,    14,
-      15,     1,     2,     3,     4,     5,     6,     0,     7,   205,
-       0,     0,     9,    59,    60,     0,    61,     0,     0,    16,
-       0,    17,     0,     0,     0,     0,     0,    18,    10,    11,
-      12,     0,    13,    59,    60,     0,    14,    15,     0,     0,
-       0,     0,     0,     0,     0,    62,    63,    64,    65,    66,
-      59,    60,     0,     0,    67,    68,    16,     0,    17,    69,
-      70,     0,     0,     0,    18,    62,    63,    64,    65,    66,
-      59,    60,     0,     0,    67,    68,   182,     0,     0,    69,
-      70,     0,    62,    63,    64,    65,    66,     0,     0,     0,
-       0,    67,    68,   209,     0,     0,    69,    70,     0,     0,
-       0,     0,    62,    63,    64,    65,    66,     0,     0,     0,
-       0,    67,    68,     0,     0,     0,    69,    70,    78,    79,
-      80,    81,     0,    82,    83,    84,    85,     0,     0,    87,
-       0,     0,    71,    72,    73,   108,    74,    75,    76,    77,
-      78,    79,    80,    81,     0,    82,    83,    84,    85,    86,
-       0,    87,   225,   109,   110,    71,    72,    73,   178,    74,
-      75,    76,    77,    78,    79,    80,    81,     0,    82,    83,
-      84,    85,    86,     0,    87,    71,    72,    73,   195,    74,
-      75,    76,    77,    78,    79,    80,    81,     0,    82,    83,
-      84,    85,    86,     0,    87,    71,    72,    73,     0,    74,
-      75,    76,    77,    78,    79,    80,    81,     0,    82,    83,
-      84,    85,    86,   108,    87,     0,     0,     0,    78,    79,
-      80,    81,     0,    82,    83,    84,    85,     0,     0,    87,
-       0,   109,   110,    78,    79,    80,    81,     0,    82,    83,
-      84,    85,     0,     0,    87,     0,   200,   201,    78,    79,
-      80,    81,     0,    82,    83,    84,    85,     0,     0,    87,
-      79,    80,    81,     0,    82,    83,    84,    85,     0,     0,
-      87
+      26,    58,   127,   128,   176,   120,     8,    37,    37,   180,
+       9,    94,    59,    61,    62,    63,    57,    23,    50,    40,
+      41,    60,   113,    44,    45,    49,    61,   188,    63,   189,
+      37,    42,    43,    37,   172,    23,   154,   156,   157,   158,
+      60,   160,   186,   162,    38,    38,    95,    65,    66,    67,
+      68,    69,   119,    91,    92,    93,   191,    70,    71,    49,
+     123,   142,    96,    72,    73,   110,   111,    38,   231,    97,
+      38,   173,    98,   133,   182,   112,    72,    73,   207,   130,
+     189,   134,   135,   136,   137,   138,   139,   141,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   140,   196,   117,
+     197,   108,    99,   229,   198,   109,   199,   100,   101,   102,
+     174,   118,   177,   169,   121,   179,   103,   104,   175,   105,
+     125,   178,   122,   175,   184,   216,   152,   159,   175,    81,
+      82,    83,    84,   195,    85,    86,    87,    88,    89,   183,
+      61,    62,    63,   161,   163,    64,   164,   114,    81,    82,
+      83,    84,   232,    85,    86,    87,    88,    89,   165,   194,
+     181,   115,   116,   200,   201,   202,   203,   204,   205,   193,
+     166,   208,   167,   168,    65,    66,    67,    68,    69,   185,
+     171,   190,   -45,    89,    70,    71,   212,   211,   223,   215,
+      72,    73,   220,   221,   213,    48,   222,   225,   227,   217,
+     -45,   -45,   -45,    85,    86,    87,    88,    89,   224,   228,
+     -48,   238,   239,   226,     0,     0,     0,   175,   170,     0,
+       0,     0,     0,   234,   235,     0,   233,     0,   -48,   -48,
+     -48,   237,     0,   -85,   -85,   -85,   -85,     0,     0,     0,
+     -85,   -85,   -85,     0,   106,     0,     0,     0,   -45,   -45,
+     107,   -45,     0,     0,   -45,     0,     0,     0,     0,     0,
+       0,   -85,   -85,   -85,   -85,     0,     0,     0,   -85,   -85,
+     -85,     0,   106,     0,     0,     0,   -48,   -48,   107,   -48,
+       0,     0,   -48,     1,     2,     3,     4,     5,     6,     0,
+       7,   129,     0,     0,     0,     9,    10,     1,     2,     3,
+       4,     5,     6,     0,     7,    46,     0,     0,     0,     9,
+      10,    11,    12,    13,    14,     0,    15,     0,     0,     0,
+       0,    16,    17,     0,     0,    11,    12,    13,    14,     0,
+      15,     0,     0,     0,     0,    16,    17,     0,     0,     0,
+       0,     0,    18,     0,    19,     0,     0,   -24,     0,   -24,
+      20,     0,     0,     0,     0,     0,    18,     0,    19,    47,
+       0,     0,     0,     0,    20,     1,     2,     3,     4,     5,
+       6,     0,     7,     8,     0,     0,     0,     9,    10,    81,
+      82,    83,    84,   153,    85,    86,    87,    88,    89,     0,
+       0,     0,     0,    11,    12,    13,    14,     0,    15,     0,
+       0,     0,     0,    16,    17,     0,     1,     2,     3,     4,
+       5,     6,     0,     7,     8,   230,     0,     0,     9,    10,
+       0,     0,     0,     0,    18,   155,    19,     0,     0,     0,
+       0,     0,    20,     0,    11,    12,    13,    14,     0,    15,
+       0,     0,     0,     0,    16,    17,     1,     2,     3,     4,
+       5,     6,     0,     7,     8,     0,     0,     0,     9,    10,
+       0,   -85,   -85,   -85,   -85,    18,     0,    19,   -85,   -85,
+     -85,     0,   106,    20,    11,    12,    13,    14,   107,    15,
+       0,     0,     0,     0,    16,    17,     1,     2,     3,     4,
+       5,     6,     0,     7,    46,     0,     0,     0,     9,    10,
+       0,     0,     0,     0,     0,    18,     0,    19,     0,     0,
+       0,     0,     0,    20,    11,    12,    13,    14,     0,    15,
+       0,     0,     0,     0,    16,    17,     1,     2,     3,     4,
+       5,     6,     0,     7,   214,     0,     0,     0,     9,    10,
+       0,     0,     0,     0,     0,    18,     0,    19,     0,     0,
+       0,     0,     0,    20,    11,    12,    13,    14,     0,    15,
+       0,     0,     0,     0,    16,    17,     1,     2,     3,     4,
+       5,     6,     0,     7,     8,     0,     0,     0,     9,    10,
+       0,     0,     0,     0,     0,    18,     0,    19,     0,     0,
+       0,     0,     0,    20,    11,     0,     0,    14,     0,    15,
+      61,    62,    63,    81,    82,    83,    84,     0,    85,    86,
+      87,    88,    89,     0,     0,     0,     0,     0,    61,    62,
+      63,     0,     0,     0,     0,    18,     0,    19,     0,     0,
+       0,     0,     0,    20,    65,    66,    67,    68,    69,   236,
+       0,     0,     0,   218,    70,    71,     0,     0,     0,     0,
+      72,    73,    65,    66,    67,    68,    69,     0,     0,     0,
+       0,     0,    70,    71,     0,     0,     0,     0,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,   114,    81,    82,
+      83,    84,     0,    85,    86,    87,    88,    89,     0,    90,
+       0,   115,   116,    74,    75,    76,    77,    78,    79,    80,
+     187,    81,    82,    83,    84,     0,    85,    86,    87,    88,
+      89,     0,    90,    74,    75,    76,    77,    78,    79,    80,
+     206,    81,    82,    83,    84,     0,    85,    86,    87,    88,
+      89,     0,    90,    74,    75,    76,    77,    78,    79,    80,
+       0,    81,    82,    83,    84,     0,    85,    86,    87,    88,
+      89,     0,    90,    81,    82,    83,    84,     0,    85,    86,
+      87,    88,    89,     0,     0,     0,   209,   210,   192,    81,
+      82,    83,    84,     0,    85,    86,    87,    88,    89,   219,
+      81,    82,    83,    84,     0,    85,    86,    87,    88,    89,
+      82,    83,    84,     0,    85,    86,    87,    88,    89
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    63,    64,    18,    11,    49,   109,    50,    52,    12,
-      13,    63,     9,    65,    10,    11,    16,    11,    14,    15,
-      16,     0,    63,     9,    65,     9,    62,    63,     9,    50,
-      51,     0,     9,    12,    13,    56,    62,    16,    18,    19,
-      20,    19,    88,    89,    90,    91,    43,    93,    20,    95,
-      50,    48,    20,    19,    50,    58,    59,    43,    58,    74,
-      18,    61,    48,   166,    48,    42,    43,    48,    11,    43,
-      70,    48,   115,    69,    65,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      63,    87,    67,    58,    65,    74,    25,    34,    35,    36,
-      37,    16,   148,    40,   150,   101,   106,   153,    17,   155,
-     110,    58,   108,   109,   217,    65,    58,    58,    58,   115,
-     182,     3,     4,     5,     6,     7,     8,     3,    10,    11,
-     145,    63,    14,    49,    50,    51,    52,   116,    68,    40,
-      56,    63,    58,    16,    65,    65,    63,   209,    64,   145,
-      32,    58,    34,    63,    -1,    63,   101,   157,   158,   159,
-     160,    63,    -1,    -1,    -1,    -1,   145,   167,    -1,    -1,
-     166,    -1,    -1,     0,    -1,    -1,    58,   177,    60,    -1,
-     180,    -1,   178,    -1,    66,    -1,    -1,   183,    -1,    -1,
-      24,    18,    19,    20,    -1,    29,    30,    31,    32,   195,
-      34,    35,    36,    37,    -1,    -1,    40,    -1,     0,    -1,
-      -1,    -1,   212,   213,   210,    -1,   216,    -1,   218,    -1,
-     220,   217,    49,    50,    51,    52,    18,    19,    20,    56,
-      -1,    58,    -1,    -1,    -1,    62,    63,    64,    65,    24,
-      -1,    68,    -1,    -1,    29,    30,    31,    32,    -1,    34,
-      35,    36,    37,    -1,    -1,    40,    -1,    49,    50,    51,
-      52,    -1,    -1,    -1,    56,    -1,    58,    -1,    -1,    -1,
-      62,    63,    64,    65,    -1,    -1,    68,     3,     4,     5,
-       6,     7,     8,    -1,    10,    11,    -1,    -1,    14,     3,
-       4,     5,     6,     7,     8,    -1,    10,    11,    -1,    -1,
-      14,    -1,    -1,    -1,    30,    31,    32,    -1,    34,    -1,
-      -1,    -1,    38,    39,    -1,    -1,    30,    31,    32,    -1,
-      34,    -1,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    58,    -1,    60,    -1,    -1,    63,    -1,    65,
-      66,    -1,    -1,    -1,    58,    -1,    60,    61,    -1,    -1,
-      -1,    -1,    66,     3,     4,     5,     6,     7,     8,    -1,
-      10,    11,    -1,    -1,    14,    -1,    16,    -1,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    -1,    40,
-      30,    31,    32,    -1,    34,    -1,    -1,    -1,    38,    39,
-       3,     4,     5,     6,     7,     8,    -1,    10,    11,    -1,
-      -1,    14,    63,    -1,    17,    -1,    -1,    -1,    58,    -1,
-      60,    -1,    -1,    -1,    -1,    -1,    66,    30,    31,    32,
-      -1,    34,    -1,    -1,    -1,    38,    39,     3,     4,     5,
-       6,     7,     8,    -1,    10,    11,    -1,    -1,    14,    -1,
-      -1,    -1,    -1,    -1,    -1,    58,    -1,    60,    -1,    -1,
-      -1,    -1,    -1,    66,    30,    31,    32,    -1,    34,    -1,
-      -1,    -1,    38,    39,     3,     4,     5,     6,     7,     8,
-      -1,    10,    11,    -1,    -1,    14,    -1,    -1,    -1,    -1,
-      -1,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,
-      66,    30,    31,    32,    -1,    34,    -1,    -1,    -1,    38,
-      39,     3,     4,     5,     6,     7,     8,    -1,    10,    11,
-      -1,    -1,    14,    12,    13,    -1,    15,    -1,    -1,    58,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    30,    31,
-      32,    -1,    34,    12,    13,    -1,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    44,    45,    46,    47,    48,
-      12,    13,    -1,    -1,    53,    54,    58,    -1,    60,    58,
-      59,    -1,    -1,    -1,    66,    44,    45,    46,    47,    48,
-      12,    13,    -1,    -1,    53,    54,    55,    -1,    -1,    58,
-      59,    -1,    44,    45,    46,    47,    48,    -1,    -1,    -1,
-      -1,    53,    54,    55,    -1,    -1,    58,    59,    -1,    -1,
-      -1,    -1,    44,    45,    46,    47,    48,    -1,    -1,    -1,
-      -1,    53,    54,    -1,    -1,    -1,    58,    59,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    -1,    40,
-      -1,    -1,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    -1,    34,    35,    36,    37,    38,
-      -1,    40,    63,    42,    43,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    -1,    40,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    -1,    40,    21,    22,    23,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    24,    40,    -1,    -1,    -1,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    -1,    40,
-      -1,    42,    43,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    -1,    -1,    40,    -1,    42,    43,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    -1,    40,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    -1,
-      40
+       0,    20,    68,    69,   111,    52,    11,     9,     9,   116,
+      15,    18,     0,    12,    13,    14,    11,     0,    18,    12,
+      13,    66,    67,    16,    17,    18,    12,    67,    14,    69,
+       9,    14,    15,     9,     9,    18,    91,    92,    93,    94,
+      66,    96,    44,    98,    46,    46,    18,    46,    47,    48,
+      49,    50,    52,    18,    19,    20,    55,    56,    57,    52,
+      60,    80,    19,    62,    63,    44,    45,    46,    44,    19,
+      46,    46,    20,    73,   121,    44,    62,    63,    67,    72,
+      69,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    80,   153,    69,
+     155,    11,    53,   210,   159,    15,   161,    58,    59,    60,
+     110,    67,   112,   106,    69,   115,    51,    52,   111,    54,
+      62,   114,    71,   116,   124,   191,    29,    21,   121,    31,
+      32,    33,    34,   152,    36,    37,    38,    39,    40,   122,
+      12,    13,    14,    22,    62,    17,    62,    30,    31,    32,
+      33,    34,   218,    36,    37,    38,    39,    40,    62,   152,
+      69,    44,    45,   163,   164,   165,   166,   167,   168,   152,
+      62,   171,    62,    62,    46,    47,    48,    49,    50,     3,
+      62,    72,     0,    40,    56,    57,   186,    67,    69,   189,
+      62,    63,    67,    67,   187,    18,    67,    67,    67,   192,
+      18,    19,    20,    36,    37,    38,    39,    40,    69,   209,
+       0,    67,    67,   206,    -1,    -1,    -1,   210,   106,    -1,
+      -1,    -1,    -1,   223,   224,    -1,   219,    -1,    18,    19,
+      20,   231,    -1,    51,    52,    53,    54,    -1,    -1,    -1,
+      58,    59,    60,    -1,    62,    -1,    -1,    -1,    66,    67,
+      68,    69,    -1,    -1,    72,    -1,    -1,    -1,    -1,    -1,
+      -1,    51,    52,    53,    54,    -1,    -1,    -1,    58,    59,
+      60,    -1,    62,    -1,    -1,    -1,    66,    67,    68,    69,
+      -1,    -1,    72,     3,     4,     5,     6,     7,     8,    -1,
+      10,    11,    -1,    -1,    -1,    15,    16,     3,     4,     5,
+       6,     7,     8,    -1,    10,    11,    -1,    -1,    -1,    15,
+      16,    31,    32,    33,    34,    -1,    36,    -1,    -1,    -1,
+      -1,    41,    42,    -1,    -1,    31,    32,    33,    34,    -1,
+      36,    -1,    -1,    -1,    -1,    41,    42,    -1,    -1,    -1,
+      -1,    -1,    62,    -1,    64,    -1,    -1,    67,    -1,    69,
+      70,    -1,    -1,    -1,    -1,    -1,    62,    -1,    64,    65,
+      -1,    -1,    -1,    -1,    70,     3,     4,     5,     6,     7,
+       8,    -1,    10,    11,    -1,    -1,    -1,    15,    16,    31,
+      32,    33,    34,    21,    36,    37,    38,    39,    40,    -1,
+      -1,    -1,    -1,    31,    32,    33,    34,    -1,    36,    -1,
+      -1,    -1,    -1,    41,    42,    -1,     3,     4,     5,     6,
+       7,     8,    -1,    10,    11,    67,    -1,    -1,    15,    16,
+      -1,    -1,    -1,    -1,    62,    22,    64,    -1,    -1,    -1,
+      -1,    -1,    70,    -1,    31,    32,    33,    34,    -1,    36,
+      -1,    -1,    -1,    -1,    41,    42,     3,     4,     5,     6,
+       7,     8,    -1,    10,    11,    -1,    -1,    -1,    15,    16,
+      -1,    51,    52,    53,    54,    62,    -1,    64,    58,    59,
+      60,    -1,    62,    70,    31,    32,    33,    34,    68,    36,
+      -1,    -1,    -1,    -1,    41,    42,     3,     4,     5,     6,
+       7,     8,    -1,    10,    11,    -1,    -1,    -1,    15,    16,
+      -1,    -1,    -1,    -1,    -1,    62,    -1,    64,    -1,    -1,
+      -1,    -1,    -1,    70,    31,    32,    33,    34,    -1,    36,
+      -1,    -1,    -1,    -1,    41,    42,     3,     4,     5,     6,
+       7,     8,    -1,    10,    11,    -1,    -1,    -1,    15,    16,
+      -1,    -1,    -1,    -1,    -1,    62,    -1,    64,    -1,    -1,
+      -1,    -1,    -1,    70,    31,    32,    33,    34,    -1,    36,
+      -1,    -1,    -1,    -1,    41,    42,     3,     4,     5,     6,
+       7,     8,    -1,    10,    11,    -1,    -1,    -1,    15,    16,
+      -1,    -1,    -1,    -1,    -1,    62,    -1,    64,    -1,    -1,
+      -1,    -1,    -1,    70,    31,    -1,    -1,    34,    -1,    36,
+      12,    13,    14,    31,    32,    33,    34,    -1,    36,    37,
+      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    12,    13,
+      14,    -1,    -1,    -1,    -1,    62,    -1,    64,    -1,    -1,
+      -1,    -1,    -1,    70,    46,    47,    48,    49,    50,    67,
+      -1,    -1,    -1,    55,    56,    57,    -1,    -1,    -1,    -1,
+      62,    63,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      -1,    -1,    56,    57,    -1,    -1,    -1,    -1,    62,    63,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    -1,    36,    37,    38,    39,    40,    -1,    42,
+      -1,    44,    45,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
+      40,    -1,    42,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
+      40,    -1,    42,    23,    24,    25,    26,    27,    28,    29,
+      -1,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
+      40,    -1,    42,    31,    32,    33,    34,    -1,    36,    37,
+      38,    39,    40,    -1,    -1,    -1,    44,    45,    30,    31,
+      32,    33,    34,    -1,    36,    37,    38,    39,    40,    30,
+      31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
+      32,    33,    34,    -1,    36,    37,    38,    39,    40
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,     5,     6,     7,     8,    10,    11,    14,
-      30,    31,    32,    34,    38,    39,    58,    60,    66,    70,
-      71,    72,    75,    77,    78,    79,    80,    81,    82,    83,
-      85,    86,    87,    88,    89,     9,    48,    72,    75,    75,
-      72,    72,    75,    75,    11,    61,    71,    75,    78,    90,
-      91,    92,    93,    94,    95,    11,    87,     0,    62,    12,
-      13,    15,    44,    45,    46,    47,    48,    53,    54,    58,
-      59,    21,    22,    23,    25,    26,    27,    28,    29,    30,
-      31,    32,    34,    35,    36,    37,    38,    40,    18,    19,
-      20,    20,    20,    19,    19,    18,    49,    52,    50,    51,
-      56,    58,    64,    11,    42,    43,    43,    63,    24,    42,
-      43,    65,    63,    78,    92,    65,    67,    78,    78,    58,
-      84,    84,    84,    11,    75,    76,    78,    78,    75,    75,
-      75,    72,    75,    87,    75,    75,    75,    75,    75,    75,
-      75,    75,    75,    75,    75,    25,    75,    77,    16,    77,
-      17,    77,    77,    17,    77,    16,    77,    58,    58,    58,
-      58,    75,    76,    74,     9,    48,    98,    96,    78,    75,
-      75,    95,    78,    65,    92,    72,     3,    43,    24,    63,
-      65,    68,    55,    24,    72,    75,    87,    77,    77,    77,
-      77,    78,    78,    78,    78,    24,    63,    73,    95,    78,
-      42,    43,    63,    78,    75,    11,    78,    84,    75,    55,
-      24,    63,    65,    65,    63,    75,    58,    99,    97,    63,
-      43,    84,    75,    78,    78,    63,    78,    95,    78,    78,
-      63,    63,    63
+       0,     3,     4,     5,     6,     7,     8,    10,    11,    15,
+      16,    31,    32,    33,    34,    36,    41,    42,    62,    64,
+      70,    74,    75,    77,    78,    80,    81,    82,    83,    84,
+      85,    86,    88,    89,    90,    91,    92,     9,    46,    77,
+      78,    78,    77,    77,    78,    78,    11,    65,    75,    78,
+      81,    93,    94,    95,    96,    97,    98,    11,    90,     0,
+      66,    12,    13,    14,    17,    46,    47,    48,    49,    50,
+      56,    57,    62,    63,    23,    24,    25,    26,    27,    28,
+      29,    31,    32,    33,    34,    36,    37,    38,    39,    40,
+      42,    18,    19,    20,    18,    18,    19,    19,    20,    53,
+      58,    59,    60,    51,    52,    54,    62,    68,    11,    15,
+      44,    45,    44,    67,    30,    44,    45,    69,    67,    81,
+      95,    69,    71,    81,    76,    62,    87,    87,    87,    11,
+      78,    79,    81,    81,    78,    78,    78,    78,    78,    78,
+      77,    78,    90,    78,    78,    78,    78,    78,    78,    78,
+      78,    78,    29,    21,    80,    22,    80,    80,    80,    21,
+      80,    22,    80,    62,    62,    62,    62,    62,    62,    78,
+      79,    62,     9,    46,    81,    78,    98,    81,    78,    81,
+      98,    69,    95,    77,    81,     3,    44,    30,    67,    69,
+      72,    55,    30,    77,    78,    90,    80,    80,    80,    80,
+      81,    81,    81,    81,    81,    81,    30,    67,    81,    44,
+      45,    67,    81,    78,    11,    81,    87,    78,    55,    30,
+      67,    67,    67,    69,    69,    67,    78,    67,    81,    98,
+      67,    44,    87,    78,    81,    81,    67,    81,    67,    67
 };
 
-#define yyerrok		(yyerrstatus = 0)
-#define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
-#define YYEOF		0
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    73,    74,    75,    75,    76,    75,    77,    77,    77,
+      77,    77,    77,    77,    77,    77,    77,    77,    77,    78,
+      78,    78,    78,    78,    79,    79,    79,    79,    79,    77,
+      78,    78,    78,    78,    78,    78,    78,    78,    78,    80,
+      80,    80,    80,    80,    80,    80,    80,    80,    80,    80,
+      80,    80,    81,    81,    81,    81,    81,    81,    82,    82,
+      83,    83,    84,    84,    85,    85,    86,    86,    77,    77,
+      77,    77,    77,    77,    77,    77,    77,    77,    77,    77,
+      77,    77,    77,    87,    87,    88,    89,    89,    77,    77,
+      77,    77,    77,    77,    77,    77,    90,    90,    90,    90,
+      90,    90,    91,    91,    92,    93,    93,    93,    94,    94,
+      95,    95,    95,    96,    97,    98,    98,    98,    98,    98,
+      98,    77,    77,    77
+};
 
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     1,     3,     0,     4,     2,     2,     4,
+       4,     5,     6,     6,     3,     1,     1,     1,     1,     1,
+       2,     2,     2,     2,     0,     1,     3,     3,     5,     4,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
+       3,     3,     3,     5,     5,     3,     6,     6,     4,     3,
+       3,     3,     1,     1,     1,     1,     1,     1,     3,     3,
+       4,     4,     3,     3,     4,     4,     3,     3,     2,     2,
+       2,     3,     3,     3,     2,     2,     7,     7,     5,     5,
+       5,     5,     2,     0,     3,     1,     1,     0,     1,     1,
+       1,     1,     1,     1,     1,     2,     1,     1,     2,     2,
+       2,     3,     2,     3,     3,     1,     2,     2,     2,     3,
+       1,     1,     3,     3,     1,     3,     3,     5,     3,     3,
+       5,     2,     2,     4
+};
 
 
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
+#define YYEMPTY         (-2)
+#define YYEOF           0
+
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-#define YYFAIL		goto yyerrlab
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
+#define YYBACKUP(Token, Value)                                  \
+do                                                              \
+  if (yychar == YYEMPTY)                                        \
+    {                                                           \
+      yychar = (Token);                                         \
+      yylval = (Value);                                         \
+      YYPOPSTACK (yylen);                                       \
+      yystate = *yyssp;                                         \
+      goto yybackup;                                            \
+    }                                                           \
+  else                                                          \
+    {                                                           \
       yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
-while (YYID (0))
-
-
-#define YYTERROR	1
-#define YYERRCODE	256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))                                                    \
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (YYID (0))
-#endif
-
+      YYERROR;                                                  \
+    }                                                           \
+while (0)
+
+/* Error token number */
+#define YYTERROR        1
+#define YYERRCODE       256
 
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
 
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-	      (Loc).first_line, (Loc).first_column,	\
-	      (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -1123,54 +1357,46 @@ while (YYID (0))
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-do {									  \
-  if (yydebug)								  \
-    {									  \
-      YYFPRINTF (stderr, "%s ", Title);					  \
-      yy_symbol_print (stderr,						  \
-		  Type, Value); \
-      YYFPRINTF (stderr, "\n");						  \
-    }									  \
-} while (YYID (0))
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
+} while (0)
 
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Type, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT.  |
+`----------------------------------------*/
+
 static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_value_print (FILE *yyoutput, int yytype, ada_exp_YYSTYPE const * const yyvaluep)
 {
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YYUSE (yytype);
 }
 
 
@@ -1178,22 +1404,11 @@ yy_symbol_value_print (yyoutput, yytype,
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_print (FILE *yyoutput, int yytype, ada_exp_YYSTYPE const * const yyvaluep)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyoutput, "%s %s (",
+             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
   YYFPRINTF (yyoutput, ")");
@@ -1204,16 +1419,8 @@ yy_symbol_print (yyoutput, yytype, yyval
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1224,49 +1431,42 @@ yy_stack_print (yybottom, yytop)
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top)                            \
+do {                                                            \
+  if (yydebug)                                                  \
+    yy_stack_print ((Bottom), (Top));                           \
+} while (0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, ada_exp_YYSTYPE *yyvsp, int yyrule)
 {
+  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned long int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
+             yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       		       );
+      yy_symbol_print (stderr,
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                                              );
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -1280,7 +1480,7 @@ int yydebug;
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1295,7 +1495,6 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
 
 #if YYERROR_VERBOSE
 
@@ -1304,15 +1503,8 @@ int yydebug;
 #   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static YYSIZE_T
 yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
 {
   YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
@@ -1328,16 +1520,8 @@ yystrlen (yystr)
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static char *
 yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
 {
   char *yyd = yydest;
   const char *yys = yysrc;
@@ -1367,27 +1551,27 @@ yytnamerr (char *yyres, const char *yyst
       char const *yyp = yystr;
 
       for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
+        switch (*++yyp)
+          {
+          case '\'':
+          case ',':
+            goto do_not_strip_quotes;
+
+          case '\\':
+            if (*++yyp != '\\')
+              goto do_not_strip_quotes;
+            /* Fall through.  */
+          default:
+            if (yyres)
+              yyres[yyn] = *yyp;
+            yyn++;
+            break;
+
+          case '"':
+            if (yyres)
+              yyres[yyn] = '\0';
+            return yyn;
+          }
     do_not_strip_quotes: ;
     }
 
@@ -1398,211 +1582,187 @@ yytnamerr (char *yyres, const char *yyst
 }
 # endif
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
 {
-  int yyn = yypact[yystate];
-
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
-    {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = YY_NULLPTRPTR;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
+    {
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                {
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]);
+                  if (! (yysize <= yysize1
+                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                    return 2;
+                  yysize = yysize1;
+                }
+              }
+        }
+    }
+
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
 
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
+  {
+    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+      return 2;
+    yysize = yysize1;
+  }
 
-      if (yyresult)
-	{
-	  /* Avoid sprintf, as that infringes on the user's name space.
-	     Don't have undefined behavior even if the translation
-	     produced a string with the wrong number of "%s"s.  */
-	  char *yyp = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
     }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
+yydestruct (const char *yymsg, int yytype, ada_exp_YYSTYPE *yyvaluep)
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
-/* Prevent warnings from -Wmissing-prototypes.  */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
+
 
 
 /* The lookahead symbol.  */
 int yychar;
 
 /* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-
+ada_exp_YYSTYPE yylval;
 /* Number of syntax errors so far.  */
 int yynerrs;
 
 
+/*----------.
+| yyparse.  |
+`----------*/
 
-/*-------------------------.
-| yyparse or yypush_parse.  |
-`-------------------------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
-
-
     int yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
     /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
+       'yyss': related to states.
+       'yyvs': related to semantic values.
 
-       Refer to the stacks thru separate pointers, to allow yyoverflow
+       Refer to the stacks through separate pointers, to allow yyoverflow
        to xreallocate them elsewhere.  */
 
     /* The state stack.  */
@@ -1611,19 +1771,19 @@ yyparse ()
     yytype_int16 *yyssp;
 
     /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
+    ada_exp_YYSTYPE yyvsa[YYINITDEPTH];
+    ada_exp_YYSTYPE *yyvs;
+    ada_exp_YYSTYPE *yyvsp;
 
     YYSIZE_T yystacksize;
 
   int yyn;
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  int yytoken = 0;
   /* The variables used to return semantic value and location from the
      action routines.  */
-  YYSTYPE yyval;
+  ada_exp_YYSTYPE yyval;
 
 #if YYERROR_VERBOSE
   /* Buffer for error messages, and its allocated size.  */
@@ -1638,9 +1798,8 @@ yyparse ()
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
   yystacksize = YYINITDEPTH;
 
   YYDPRINTF ((stderr, "Starting parse\n"));
@@ -1649,14 +1808,6 @@ yyparse ()
   yyerrstatus = 0;
   yynerrs = 0;
   yychar = YYEMPTY; /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-  yyssp = yyss;
-  yyvsp = yyvs;
-
   goto yysetstate;
 
 /*------------------------------------------------------------.
@@ -1677,23 +1828,23 @@ yyparse ()
 
 #ifdef yyoverflow
       {
-	/* Give user a chance to xreallocate the stack.  Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
-
-	/* Each stack pointer address is followed by the size of the
-	   data in use in that stack, in bytes.  This used to be a
-	   conditional around just the two extra args, but that might
-	   be undefined if yyoverflow is a macro.  */
-	yyoverflow (YY_("memory exhausted"),
-		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-		    &yystacksize);
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        ada_exp_YYSTYPE *yyvs1 = yyvs;
+        yytype_int16 *yyss1 = yyss;
+
+        /* Each stack pointer address is followed by the size of the
+           data in use in that stack, in bytes.  This used to be a
+           conditional around just the two extra args, but that might
+           be undefined if yyoverflow is a macro.  */
+        yyoverflow (YY_("memory exhausted"),
+                    &yyss1, yysize * sizeof (*yyssp),
+                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yystacksize);
 
-	yyss = yyss1;
-	yyvs = yyvs1;
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
@@ -1701,22 +1852,22 @@ yyparse ()
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
+        goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-	yystacksize = YYMAXDEPTH;
+        yystacksize = YYMAXDEPTH;
 
       {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss_alloc, yyss);
-	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+        yytype_int16 *yyss1 = yyss;
+        union ada_exp_yyalloc *yyptr =
+          (union ada_exp_yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+        if (! yyptr)
+          goto yyexhaustedlab;
+        YYSTACK_RELOCATE (yyss_alloc, yyss);
+        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
+        if (yyss1 != yyssa)
+          YYSTACK_FREE (yyss1);
       }
 # endif
 #endif /* no yyoverflow */
@@ -1725,10 +1876,10 @@ yyparse ()
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+                  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -1748,7 +1899,7 @@ yybackup:
 
   /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
   /* Not known => get a lookahead token if don't already have one.  */
@@ -1757,7 +1908,7 @@ yybackup:
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
@@ -1779,8 +1930,8 @@ yybackup:
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-	goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
@@ -1797,7 +1948,9 @@ yybackup:
   yychar = YYEMPTY;
 
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
   goto yynewstate;
 
@@ -1820,7 +1973,7 @@ yyreduce:
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
+     '$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -1834,900 +1987,949 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-
-/* Line 1455 of yacc.c  */
-#line 191 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_COMMA); }
+#line 501 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<comma_operation> (BINOP_COMMA); }
+#line 1994 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 5:
-
-/* Line 1455 of yacc.c  */
-#line 193 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+#line 503 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  assignments.emplace_back
+			    (new ada_assign_operation (ada_pop (), nullptr));
+			}
+#line 2003 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 6:
+#line 508 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  ada_assign_up assign
+			    = std::move (assignments.back ());
+			  assignments.pop_back ();
+			  value *lhs_val = (assign->eval_for_resolution
+					    (pstate->expout.get ()));
+
+			  operation_up rhs = pstate->pop ();
+			  rhs = resolve (std::move (rhs), true,
+					 lhs_val->type ());
 
-/* Line 1455 of yacc.c  */
-#line 198 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
+			  assign->set_rhs (std::move (rhs));
+			  pstate->push (std::move (assign));
+			}
+#line 2022 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 7:
-
-/* Line 1455 of yacc.c  */
-#line 202 "ada-exp.y"
-    { write_exp_op_with_string (pstate, STRUCTOP_STRUCT,
-						    (yyvsp[(2) - (2)].sval)); }
+#line 527 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  if (strcmp ((yyvsp[0].sval).ptr, "all") == 0)
+			    ada_wrap<ada_unop_ind_operation> ();
+			  else
+			    {
+			      operation_up arg = ada_pop ();
+			      pstate->push_new<ada_structop_operation>
+				(std::move (arg), copy_name ((yyvsp[0].sval)));
+			    }
+			}
+#line 2037 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 8:
-
-/* Line 1455 of yacc.c  */
-#line 207 "ada-exp.y"
+#line 540 "ada-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate, (yyvsp[(3) - (4)].lval));
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-		        }
+			  /* This is done even for ".all", because
+			     that might be a prefix.  */
+			  operation_up arg = ada_pop ();
+			  ada_structop_operation *str_op
+			    = (new ada_structop_operation
+			       (std::move (arg), copy_name ((yyvsp[0].sval))));
+			  str_op->set_prefix (find_completion_bounds (pstate));
+			  pstate->push (operation_up (str_op));
+			  pstate->mark_struct_expression (str_op);
+			}
+#line 2053 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 9:
+#line 554 "ada-exp.y" /* yacc.c:1646  */
+    { ada_funcall ((yyvsp[-1].lval)); }
+#line 2059 "ada-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 213 "ada-exp.y"
+  case 10:
+#line 556 "ada-exp.y" /* yacc.c:1646  */
     {
-			  if ((yyvsp[(1) - (4)].tval) != NULL)
+			  if ((yyvsp[-3].tval) != NULL)
 			    {
-			      if ((yyvsp[(3) - (4)].lval) != 1)
+			      if ((yyvsp[-1].lval) != 1)
 				error (_("Invalid conversion"));
-			      write_exp_elt_opcode (pstate, UNOP_CAST);
-			      write_exp_elt_type (pstate, (yyvsp[(1) - (4)].tval));
-			      write_exp_elt_opcode (pstate, UNOP_CAST);
+			      operation_up arg = ada_pop ();
+			      pstate->push_new<unop_cast_operation>
+				(std::move (arg), (yyvsp[-3].tval));
 			    }
 			  else
-			    {
-			      write_exp_elt_opcode (pstate, OP_FUNCALL);
-			      write_exp_elt_longcst (pstate, (yyvsp[(3) - (4)].lval));
-			      write_exp_elt_opcode (pstate, OP_FUNCALL);
-			    }
+			    ada_funcall ((yyvsp[-1].lval));
 			}
-    break;
-
-  case 10:
-
-/* Line 1455 of yacc.c  */
-#line 231 "ada-exp.y"
-    { type_qualifier = (yyvsp[(1) - (3)].tval); }
+#line 2076 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 11:
-
-/* Line 1455 of yacc.c  */
-#line 233 "ada-exp.y"
+#line 571 "ada-exp.y" /* yacc.c:1646  */
     {
-			  if ((yyvsp[(1) - (7)].tval) == NULL)
+			  if ((yyvsp[-4].tval) == NULL)
 			    error (_("Type required for qualification"));
-			  write_exp_elt_opcode (pstate, UNOP_QUAL);
-			  write_exp_elt_type (pstate, (yyvsp[(1) - (7)].tval));
-			  write_exp_elt_opcode (pstate, UNOP_QUAL);
-			  type_qualifier = (yyvsp[(3) - (7)].tval);
+			  operation_up arg = ada_pop (true,
+						      check_typedef ((yyvsp[-4].tval)));
+			  pstate->push_new<ada_qual_operation>
+			    (std::move (arg), (yyvsp[-4].tval));
 			}
+#line 2089 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 12:
-
-/* Line 1455 of yacc.c  */
-#line 243 "ada-exp.y"
-    { (yyval.tval) = type_qualifier; }
+#line 583 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap3<ada_ternop_slice_operation> (); }
+#line 2095 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 13:
-
-/* Line 1455 of yacc.c  */
-#line 248 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_SLICE); }
-    break;
-
-  case 14:
-
-/* Line 1455 of yacc.c  */
-#line 250 "ada-exp.y"
-    { if ((yyvsp[(1) - (6)].tval) == NULL) 
-                            write_exp_elt_opcode (pstate, TERNOP_SLICE);
+#line 585 "ada-exp.y" /* yacc.c:1646  */
+    { if ((yyvsp[-5].tval) == NULL) 
+			    ada_wrap3<ada_ternop_slice_operation> ();
 			  else
 			    error (_("Cannot slice a type"));
 			}
+#line 2105 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 15:
-
-/* Line 1455 of yacc.c  */
-#line 257 "ada-exp.y"
+  case 14:
+#line 592 "ada-exp.y" /* yacc.c:1646  */
     { }
+#line 2111 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 16:
-
-/* Line 1455 of yacc.c  */
-#line 269 "ada-exp.y"
-    { if ((yyvsp[(1) - (1)].tval) != NULL)
-			    {
-			      write_exp_elt_opcode (pstate, OP_TYPE);
-			      write_exp_elt_type (pstate, (yyvsp[(1) - (1)].tval));
-			      write_exp_elt_opcode (pstate, OP_TYPE);
-			    }
+  case 15:
+#line 604 "ada-exp.y" /* yacc.c:1646  */
+    { if ((yyvsp[0].tval) != NULL)
+			    pstate->push_new<type_operation> ((yyvsp[0].tval));
 			}
+#line 2119 "ada-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 16:
+#line 610 "ada-exp.y" /* yacc.c:1646  */
+    { pstate->push_dollar ((yyvsp[0].sval)); }
+#line 2125 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 17:
+#line 614 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<ada_aggregate_operation>
+			    (pop_component ());
+			}
+#line 2134 "ada-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 279 "ada-exp.y"
-    { write_dollar_variable (pstate, (yyvsp[(1) - (1)].sval)); }
+  case 18:
+#line 621 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  if (assignments.empty ())
+			    error (_("the target name symbol ('@') may only "
+				     "appear in an assignment context"));
+			  ada_assign_operation *current
+			    = assignments.back ().get ();
+			  pstate->push_new<ada_target_operation> (current);
+			}
+#line 2147 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 20:
-
-/* Line 1455 of yacc.c  */
-#line 289 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_NEG); }
+#line 635 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap_overload<ada_neg_operation> (UNOP_NEG); }
+#line 2153 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 21:
+#line 639 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up arg = ada_pop ();
+			  operation_up empty;
 
-/* Line 1455 of yacc.c  */
-#line 293 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PLUS); }
+			  /* If an overloaded operator was found, use
+			     it.  Otherwise, unary + has no effect and
+			     the argument can be pushed instead.  */
+			  operation_up call = maybe_overload (UNOP_PLUS, arg,
+							      empty);
+			  if (call != nullptr)
+			    arg = std::move (call);
+			  pstate->push (std::move (arg));
+			}
+#line 2171 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 22:
-
-/* Line 1455 of yacc.c  */
-#line 297 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+#line 655 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  ada_wrap_overload<unary_logical_not_operation>
+			    (UNOP_LOGICAL_NOT);
+			}
+#line 2180 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 23:
-
-/* Line 1455 of yacc.c  */
-#line 301 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ABS); }
+#line 662 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap_overload<ada_abs_operation> (UNOP_ABS); }
+#line 2186 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 24:
-
-/* Line 1455 of yacc.c  */
-#line 304 "ada-exp.y"
+#line 665 "ada-exp.y" /* yacc.c:1646  */
     { (yyval.lval) = 0; }
+#line 2192 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 25:
-
-/* Line 1455 of yacc.c  */
-#line 308 "ada-exp.y"
+#line 669 "ada-exp.y" /* yacc.c:1646  */
     { (yyval.lval) = 1; }
+#line 2198 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 26:
-
-/* Line 1455 of yacc.c  */
-#line 310 "ada-exp.y"
+#line 671 "ada-exp.y" /* yacc.c:1646  */
     { (yyval.lval) = 1; }
+#line 2204 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 27:
-
-/* Line 1455 of yacc.c  */
-#line 312 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(1) - (3)].lval) + 1; }
+#line 673 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[-2].lval) + 1; }
+#line 2210 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 28:
-
-/* Line 1455 of yacc.c  */
-#line 314 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(1) - (5)].lval) + 1; }
+#line 675 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[-4].lval) + 1; }
+#line 2216 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
-#line 319 "ada-exp.y"
+#line 680 "ada-exp.y" /* yacc.c:1646  */
     { 
-			  if ((yyvsp[(2) - (4)].tval) == NULL)
+			  if ((yyvsp[-2].tval) == NULL)
 			    error (_("Type required within braces in coercion"));
-			  write_exp_elt_opcode (pstate, UNOP_MEMVAL);
-			  write_exp_elt_type (pstate, (yyvsp[(2) - (4)].tval));
-			  write_exp_elt_opcode (pstate, UNOP_MEMVAL);
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<unop_memval_operation>
+			    (std::move (arg), (yyvsp[-2].tval));
 			}
+#line 2228 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
-#line 331 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EXP); }
+#line 692 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_binop_exp_operation> (BINOP_EXP); }
+#line 2234 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 31:
-
-/* Line 1455 of yacc.c  */
-#line 335 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MUL); }
+#line 696 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_binop_mul_operation> (BINOP_MUL); }
+#line 2240 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 32:
-
-/* Line 1455 of yacc.c  */
-#line 339 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_DIV); }
+#line 700 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_binop_div_operation> (BINOP_DIV); }
+#line 2246 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 33:
-
-/* Line 1455 of yacc.c  */
-#line 343 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REM); }
+#line 704 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_binop_rem_operation> (BINOP_REM); }
+#line 2252 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 34:
-
-/* Line 1455 of yacc.c  */
-#line 347 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MOD); }
+#line 708 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_binop_mod_operation> (BINOP_MOD); }
+#line 2258 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 35:
-
-/* Line 1455 of yacc.c  */
-#line 351 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
+#line 712 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<repeat_operation> (BINOP_REPEAT); }
+#line 2264 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
-#line 355 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ADD); }
+#line 716 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap_op<ada_binop_addsub_operation> (BINOP_ADD); }
+#line 2270 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 37:
-
-/* Line 1455 of yacc.c  */
-#line 359 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_CONCAT); }
+#line 720 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_concat_operation> (BINOP_CONCAT); }
+#line 2276 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
-#line 363 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUB); }
+#line 724 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap_op<ada_binop_addsub_operation> (BINOP_SUB); }
+#line 2282 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
-#line 370 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 731 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap_op<ada_binop_equal_operation> (BINOP_EQUAL); }
+#line 2288 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 41:
-
-/* Line 1455 of yacc.c  */
-#line 374 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 735 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap_op<ada_binop_equal_operation> (BINOP_NOTEQUAL); }
+#line 2294 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
-#line 378 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LEQ); }
+#line 739 "ada-exp.y" /* yacc.c:1646  */
+    { ada_un_wrap2<leq_operation> (BINOP_LEQ); }
+#line 2300 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 43:
-
-/* Line 1455 of yacc.c  */
-#line 382 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_IN_RANGE); }
+#line 743 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap3<ada_ternop_range_operation> (); }
+#line 2306 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 44:
-
-/* Line 1455 of yacc.c  */
-#line 384 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS);
-			  write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[(5) - (5)].lval));
-			  write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS);
+#line 745 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up rhs = ada_pop ();
+			  operation_up lhs = ada_pop ();
+			  pstate->push_new<ada_binop_in_bounds_operation>
+			    (std::move (lhs), std::move (rhs), (yyvsp[0].lval));
 			}
+#line 2317 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 45:
-
-/* Line 1455 of yacc.c  */
-#line 389 "ada-exp.y"
+#line 752 "ada-exp.y" /* yacc.c:1646  */
     { 
-			  if ((yyvsp[(3) - (3)].tval) == NULL)
+			  if ((yyvsp[0].tval) == NULL)
 			    error (_("Right operand of 'in' must be type"));
-			  write_exp_elt_opcode (pstate, UNOP_IN_RANGE);
-		          write_exp_elt_type (pstate, (yyvsp[(3) - (3)].tval));
-		          write_exp_elt_opcode (pstate, UNOP_IN_RANGE);
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_range_operation>
+			    (std::move (arg), (yyvsp[0].tval));
 			}
+#line 2329 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 46:
-
-/* Line 1455 of yacc.c  */
-#line 397 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_IN_RANGE);
-		          write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT);
-			}
+#line 760 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap3<ada_ternop_range_operation> ();
+			  ada_wrap<unary_logical_not_operation> (); }
+#line 2336 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 47:
-
-/* Line 1455 of yacc.c  */
-#line 401 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS);
-			  write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[(6) - (6)].lval));
-			  write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS);
-		          write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT);
+#line 763 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up rhs = ada_pop ();
+			  operation_up lhs = ada_pop ();
+			  pstate->push_new<ada_binop_in_bounds_operation>
+			    (std::move (lhs), std::move (rhs), (yyvsp[0].lval));
+			  ada_wrap<unary_logical_not_operation> ();
 			}
+#line 2348 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 48:
-
-/* Line 1455 of yacc.c  */
-#line 407 "ada-exp.y"
+#line 771 "ada-exp.y" /* yacc.c:1646  */
     { 
-			  if ((yyvsp[(4) - (4)].tval) == NULL)
+			  if ((yyvsp[0].tval) == NULL)
 			    error (_("Right operand of 'in' must be type"));
-			  write_exp_elt_opcode (pstate, UNOP_IN_RANGE);
-		          write_exp_elt_type (pstate, (yyvsp[(4) - (4)].tval));
-		          write_exp_elt_opcode (pstate, UNOP_IN_RANGE);
-		          write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT);
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_range_operation>
+			    (std::move (arg), (yyvsp[0].tval));
+			  ada_wrap<unary_logical_not_operation> ();
 			}
+#line 2361 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 49:
-
-/* Line 1455 of yacc.c  */
-#line 418 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GEQ); }
+#line 782 "ada-exp.y" /* yacc.c:1646  */
+    { ada_un_wrap2<geq_operation> (BINOP_GEQ); }
+#line 2367 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 50:
-
-/* Line 1455 of yacc.c  */
-#line 422 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LESS); }
+#line 786 "ada-exp.y" /* yacc.c:1646  */
+    { ada_un_wrap2<less_operation> (BINOP_LESS); }
+#line 2373 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 51:
-
-/* Line 1455 of yacc.c  */
-#line 426 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GTR); }
+#line 790 "ada-exp.y" /* yacc.c:1646  */
+    { ada_un_wrap2<gtr_operation> (BINOP_GTR); }
+#line 2379 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 58:
-
-/* Line 1455 of yacc.c  */
-#line 439 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 803 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_bitwise_and_operation>
+			    (BINOP_BITWISE_AND); }
+#line 2386 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 59:
-
-/* Line 1455 of yacc.c  */
-#line 441 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 806 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_bitwise_and_operation>
+			    (BINOP_BITWISE_AND); }
+#line 2393 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 60:
-
-/* Line 1455 of yacc.c  */
-#line 446 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 812 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<logical_and_operation>
+			    (BINOP_LOGICAL_AND); }
+#line 2400 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 61:
-
-/* Line 1455 of yacc.c  */
-#line 448 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 815 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<logical_and_operation>
+			    (BINOP_LOGICAL_AND); }
+#line 2407 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 62:
-
-/* Line 1455 of yacc.c  */
-#line 453 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 821 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_bitwise_ior_operation>
+			    (BINOP_BITWISE_IOR); }
+#line 2414 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 63:
-
-/* Line 1455 of yacc.c  */
-#line 455 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 824 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_bitwise_ior_operation>
+			    (BINOP_BITWISE_IOR); }
+#line 2421 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 64:
-
-/* Line 1455 of yacc.c  */
-#line 460 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 830 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<logical_or_operation> (BINOP_LOGICAL_OR); }
+#line 2427 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 65:
-
-/* Line 1455 of yacc.c  */
-#line 462 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 832 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<logical_or_operation> (BINOP_LOGICAL_OR); }
+#line 2433 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 66:
-
-/* Line 1455 of yacc.c  */
-#line 466 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 836 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_bitwise_xor_operation>
+			    (BINOP_BITWISE_XOR); }
+#line 2440 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 67:
-
-/* Line 1455 of yacc.c  */
-#line 468 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 839 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_bitwise_xor_operation>
+			    (BINOP_BITWISE_XOR); }
+#line 2447 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 68:
-
-/* Line 1455 of yacc.c  */
-#line 480 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
+#line 852 "ada-exp.y" /* yacc.c:1646  */
+    { ada_addrof (); }
+#line 2453 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 69:
-
-/* Line 1455 of yacc.c  */
-#line 482 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR);
-			  write_exp_elt_opcode (pstate, UNOP_CAST);
-			  write_exp_elt_type (pstate,
-					      type_system_address (pstate));
-			  write_exp_elt_opcode (pstate, UNOP_CAST);
-			}
+#line 854 "ada-exp.y" /* yacc.c:1646  */
+    { ada_addrof (type_system_address (pstate)); }
+#line 2459 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 70:
-
-/* Line 1455 of yacc.c  */
-#line 489 "ada-exp.y"
-    { write_int (pstate, (yyvsp[(3) - (3)].lval), type_int (pstate));
-			  write_exp_elt_opcode (pstate, OP_ATR_FIRST); }
+#line 856 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->mark_completion (make_tick_completer ((yyvsp[0].sval)));
+			}
+#line 2467 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 71:
-
-/* Line 1455 of yacc.c  */
-#line 492 "ada-exp.y"
-    { write_int (pstate, (yyvsp[(3) - (3)].lval), type_int (pstate));
-			  write_exp_elt_opcode (pstate, OP_ATR_LAST); }
+#line 860 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_atr_operation>
+			    (std::move (arg), OP_ATR_FIRST, (yyvsp[0].lval));
+			}
+#line 2477 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 72:
-
-/* Line 1455 of yacc.c  */
-#line 495 "ada-exp.y"
-    { write_int (pstate, (yyvsp[(3) - (3)].lval), type_int (pstate));
-			  write_exp_elt_opcode (pstate, OP_ATR_LENGTH); }
+#line 866 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_atr_operation>
+			    (std::move (arg), OP_ATR_LAST, (yyvsp[0].lval));
+			}
+#line 2487 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 73:
-
-/* Line 1455 of yacc.c  */
-#line 498 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_SIZE); }
+#line 872 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_atr_operation>
+			    (std::move (arg), OP_ATR_LENGTH, (yyvsp[0].lval));
+			}
+#line 2497 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 74:
-
-/* Line 1455 of yacc.c  */
-#line 500 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_TAG); }
+#line 878 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap<ada_atr_size_operation> (); }
+#line 2503 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 75:
-
-/* Line 1455 of yacc.c  */
-#line 502 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_MIN); }
+#line 880 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap<ada_atr_tag_operation> (); }
+#line 2509 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 76:
-
-/* Line 1455 of yacc.c  */
-#line 504 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_MAX); }
+#line 882 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_binop_min_operation> (BINOP_MIN); }
+#line 2515 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 77:
-
-/* Line 1455 of yacc.c  */
-#line 506 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_POS); }
+#line 884 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap2<ada_binop_max_operation> (BINOP_MAX); }
+#line 2521 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 78:
-
-/* Line 1455 of yacc.c  */
-#line 508 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_VAL); }
+#line 886 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap<ada_pos_operation> (); }
+#line 2527 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 79:
-
-/* Line 1455 of yacc.c  */
-#line 510 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_MODULUS); }
+#line 888 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_atr_val_operation>
+			    ((yyvsp[-4].tval), std::move (arg));
+			}
+#line 2537 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 80:
-
-/* Line 1455 of yacc.c  */
-#line 514 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 894 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up arg = ada_pop (true, (yyvsp[-4].tval));
+			  pstate->push_new<ada_atr_enum_rep_operation>
+			    ((yyvsp[-4].tval), std::move (arg));
+			}
+#line 2547 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 81:
-
-/* Line 1455 of yacc.c  */
-#line 516 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(2) - (3)].typed_val).val; }
+#line 900 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up arg = ada_pop (true, (yyvsp[-4].tval));
+			  pstate->push_new<ada_atr_enum_val_operation>
+			    ((yyvsp[-4].tval), std::move (arg));
+			}
+#line 2557 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 82:
+#line 906 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  struct type *type_arg = check_typedef ((yyvsp[-1].tval));
+			  if (!ada_is_modular_type (type_arg))
+			    error (_("'modulus must be applied to modular type"));
+			  write_int (pstate, ada_modulus (type_arg),
+				     type_arg->target_type ());
+			}
+#line 2569 "ada-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 521 "ada-exp.y"
-    { 
-			  if ((yyvsp[(1) - (1)].tval) == NULL)
-			    error (_("Prefix must be type"));
-			  write_exp_elt_opcode (pstate, OP_TYPE);
-			  write_exp_elt_type (pstate, (yyvsp[(1) - (1)].tval));
-			  write_exp_elt_opcode (pstate, OP_TYPE); }
+  case 83:
+#line 916 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = 1; }
+#line 2575 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 84:
-
-/* Line 1455 of yacc.c  */
-#line 532 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_TYPE);
-			  write_exp_elt_type (pstate,
-					  parse_type (pstate)->builtin_void);
-			  write_exp_elt_opcode (pstate, OP_TYPE); }
+#line 918 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[-1].typed_val).val->as_integer<LONGEST> (); }
+#line 2581 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 85:
-
-/* Line 1455 of yacc.c  */
-#line 540 "ada-exp.y"
-    { write_int (pstate, (LONGEST) (yyvsp[(1) - (1)].typed_val).val, (yyvsp[(1) - (1)].typed_val).type); }
+#line 923 "ada-exp.y" /* yacc.c:1646  */
+    { 
+			  if ((yyvsp[0].tval) == NULL)
+			    error (_("Prefix must be type"));
+			  (yyval.tval) = (yyvsp[0].tval);
+			}
+#line 2591 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 86:
-
-/* Line 1455 of yacc.c  */
-#line 544 "ada-exp.y"
-    { write_int (pstate,
-			       convert_char_literal (type_qualifier, (yyvsp[(1) - (1)].typed_val).val),
-			       (type_qualifier == NULL) 
-			       ? (yyvsp[(1) - (1)].typed_val).type : type_qualifier);
-		  }
+#line 932 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = (yyvsp[0].tval); }
+#line 2597 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 87:
-
-/* Line 1455 of yacc.c  */
-#line 552 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_FLOAT);
-			  write_exp_elt_type (pstate, (yyvsp[(1) - (1)].typed_val_float).type);
-			  write_exp_elt_floatcst (pstate, (yyvsp[(1) - (1)].typed_val_float).val);
-			  write_exp_elt_opcode (pstate, OP_FLOAT);
-			}
+#line 934 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = parse_type (pstate)->builtin_void; }
+#line 2603 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 88:
-
-/* Line 1455 of yacc.c  */
-#line 560 "ada-exp.y"
-    { write_int (pstate, 0, type_int (pstate)); }
+#line 939 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<long_const_operation> ((yyvsp[0].typed_val).type, *(yyvsp[0].typed_val).val);
+			  ada_wrap<ada_wrapped_operation> ();
+			}
+#line 2612 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 89:
-
-/* Line 1455 of yacc.c  */
-#line 564 "ada-exp.y"
-    { 
-			  write_exp_op_with_string (pstate, OP_STRING, (yyvsp[(1) - (1)].sval));
+#line 946 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<ada_char_operation> ((yyvsp[0].typed_char).type, (yyvsp[0].typed_char).val);
 			}
+#line 2620 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 90:
-
-/* Line 1455 of yacc.c  */
-#line 570 "ada-exp.y"
-    { write_int (pstate, 1, type_boolean (pstate)); }
+#line 952 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  float_data data;
+			  std::copy (std::begin ((yyvsp[0].typed_val_float).val), std::end ((yyvsp[0].typed_val_float).val),
+				     std::begin (data));
+			  pstate->push_new<float_const_operation>
+			    ((yyvsp[0].typed_val_float).type, data);
+			  ada_wrap<ada_wrapped_operation> ();
+			}
+#line 2633 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 91:
-
-/* Line 1455 of yacc.c  */
-#line 572 "ada-exp.y"
-    { write_int (pstate, 0, type_boolean (pstate)); }
+#line 963 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  struct type *null_ptr_type
+			    = lookup_pointer_type (parse_type (pstate)->builtin_int0);
+			  write_int (pstate, 0, null_ptr_type);
+			}
+#line 2643 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 92:
-
-/* Line 1455 of yacc.c  */
-#line 576 "ada-exp.y"
-    { error (_("NEW not implemented.")); }
+#line 971 "ada-exp.y" /* yacc.c:1646  */
+    { 
+			  pstate->push_new<ada_string_operation>
+			    (copy_name ((yyvsp[0].sval)));
+			}
+#line 2652 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 93:
-
-/* Line 1455 of yacc.c  */
-#line 580 "ada-exp.y"
-    { (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[(1) - (1)].sval)); }
+#line 978 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  write_int (pstate, 1,
+				     parse_type (pstate)->builtin_bool);
+			}
+#line 2661 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 94:
-
-/* Line 1455 of yacc.c  */
-#line 582 "ada-exp.y"
-    { (yyval.tval) = write_var_or_type (pstate, (yyvsp[(1) - (2)].bval), (yyvsp[(2) - (2)].sval)); }
+#line 983 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  write_int (pstate, 0,
+				     parse_type (pstate)->builtin_bool);
+			}
+#line 2670 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 95:
-
-/* Line 1455 of yacc.c  */
-#line 584 "ada-exp.y"
-    { 
-			  (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[(1) - (2)].sval));
-			  if ((yyval.tval) == NULL)
-			    write_exp_elt_opcode (pstate, UNOP_ADDR);
-			  else
-			    (yyval.tval) = lookup_pointer_type ((yyval.tval));
-			}
+#line 990 "ada-exp.y" /* yacc.c:1646  */
+    { error (_("NEW not implemented.")); }
+#line 2676 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 96:
-
-/* Line 1455 of yacc.c  */
-#line 592 "ada-exp.y"
-    { 
-			  (yyval.tval) = write_var_or_type (pstate, (yyvsp[(1) - (3)].bval), (yyvsp[(2) - (3)].sval));
-			  if ((yyval.tval) == NULL)
-			    write_exp_elt_opcode (pstate, UNOP_ADDR);
-			  else
-			    (yyval.tval) = lookup_pointer_type ((yyval.tval));
-			}
+#line 994 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[0].sval)); }
+#line 2682 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 97:
-
-/* Line 1455 of yacc.c  */
-#line 603 "ada-exp.y"
-    { (yyval.bval) = block_lookup (NULL, (yyvsp[(1) - (2)].sval).ptr); }
+#line 996 "ada-exp.y" /* yacc.c:1646  */
+    {
+				  (yyval.tval) = write_var_or_type_completion (pstate,
+								     NULL,
+								     (yyvsp[0].sval));
+				}
+#line 2692 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 98:
-
-/* Line 1455 of yacc.c  */
-#line 605 "ada-exp.y"
-    { (yyval.bval) = block_lookup ((yyvsp[(1) - (3)].bval), (yyvsp[(2) - (3)].sval).ptr); }
+#line 1002 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = write_var_or_type (pstate, (yyvsp[-1].bval), (yyvsp[0].sval)); }
+#line 2698 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 99:
-
-/* Line 1455 of yacc.c  */
-#line 610 "ada-exp.y"
+#line 1004 "ada-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_AGGREGATE);
-			  write_exp_elt_longcst (pstate, (yyvsp[(2) - (3)].lval));
-			  write_exp_elt_opcode (pstate, OP_AGGREGATE);
-		        }
+				  (yyval.tval) = write_var_or_type_completion (pstate,
+								     (yyvsp[-1].bval),
+								     (yyvsp[0].sval));
+				}
+#line 2708 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 100:
-
-/* Line 1455 of yacc.c  */
-#line 618 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(1) - (1)].lval); }
+#line 1010 "ada-exp.y" /* yacc.c:1646  */
+    { 
+			  (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[-1].sval));
+			  if ((yyval.tval) == NULL)
+			    ada_addrof ();
+			  else
+			    (yyval.tval) = lookup_pointer_type ((yyval.tval));
+			}
+#line 2720 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 101:
-
-/* Line 1455 of yacc.c  */
-#line 620 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_POSITIONAL);
-			  write_exp_elt_longcst (pstate, (yyvsp[(1) - (2)].lval));
-			  write_exp_elt_opcode (pstate, OP_POSITIONAL);
-			  (yyval.lval) = (yyvsp[(1) - (2)].lval) + 1;
+#line 1018 "ada-exp.y" /* yacc.c:1646  */
+    { 
+			  (yyval.tval) = write_var_or_type (pstate, (yyvsp[-2].bval), (yyvsp[-1].sval));
+			  if ((yyval.tval) == NULL)
+			    ada_addrof ();
+			  else
+			    (yyval.tval) = lookup_pointer_type ((yyval.tval));
 			}
+#line 2732 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 102:
-
-/* Line 1455 of yacc.c  */
-#line 626 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(1) - (2)].lval) + (yyvsp[(2) - (2)].lval); }
+#line 1029 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.bval) = block_lookup (NULL, (yyvsp[-1].sval).ptr); }
+#line 2738 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 103:
-
-/* Line 1455 of yacc.c  */
-#line 631 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_POSITIONAL);
-			  write_exp_elt_longcst (pstate, 0);
-			  write_exp_elt_opcode (pstate, OP_POSITIONAL);
-			  (yyval.lval) = 1;
-			}
+#line 1031 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.bval) = block_lookup ((yyvsp[-2].bval), (yyvsp[-1].sval).ptr); }
+#line 2744 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 104:
+#line 1036 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  std::vector<ada_component_up> components
+			    = pop_components ((yyvsp[-1].lval));
 
-/* Line 1455 of yacc.c  */
-#line 637 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_POSITIONAL);
-			  write_exp_elt_longcst (pstate, (yyvsp[(1) - (3)].lval));
-			  write_exp_elt_opcode (pstate, OP_POSITIONAL);
-			  (yyval.lval) = (yyvsp[(1) - (3)].lval) + 1; 
+			  push_component<ada_aggregate_component>
+			    (std::move (components));
 			}
+#line 2756 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 105:
-
-/* Line 1455 of yacc.c  */
-#line 645 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 1046 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[0].lval); }
+#line 2762 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 106:
-
-/* Line 1455 of yacc.c  */
-#line 646 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 1048 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  push_component<ada_positional_component>
+			    ((yyvsp[-1].lval), ada_pop ());
+			  (yyval.lval) = (yyvsp[-1].lval) + 1;
+			}
+#line 2772 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 107:
-
-/* Line 1455 of yacc.c  */
-#line 648 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(3) - (3)].lval) + 1; }
+#line 1054 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[-1].lval) + (yyvsp[0].lval); }
+#line 2778 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 108:
-
-/* Line 1455 of yacc.c  */
-#line 652 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_OTHERS); }
+#line 1059 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  push_component<ada_positional_component>
+			    (0, ada_pop ());
+			  (yyval.lval) = 1;
+			}
+#line 2788 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 109:
-
-/* Line 1455 of yacc.c  */
-#line 657 "ada-exp.y"
+#line 1065 "ada-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_CHOICES);
-			  write_exp_elt_longcst (pstate, (yyvsp[(1) - (1)].lval));
-			  write_exp_elt_opcode (pstate, OP_CHOICES);
-		        }
+			  push_component<ada_positional_component>
+			    ((yyvsp[-2].lval), ada_pop ());
+			  (yyval.lval) = (yyvsp[-2].lval) + 1; 
+			}
+#line 2798 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 110:
-
-/* Line 1455 of yacc.c  */
-#line 671 "ada-exp.y"
-    { write_name_assoc (pstate, (yyvsp[(1) - (2)].sval)); }
+#line 1073 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = 1; }
+#line 2804 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 111:
-
-/* Line 1455 of yacc.c  */
-#line 672 "ada-exp.y"
+#line 1074 "ada-exp.y" /* yacc.c:1646  */
     { (yyval.lval) = 1; }
+#line 2810 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 112:
-
-/* Line 1455 of yacc.c  */
-#line 674 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 1076 "ada-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[0].lval) + 1; }
+#line 2816 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 113:
-
-/* Line 1455 of yacc.c  */
-#line 676 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE);
-			  write_exp_op_with_string (pstate, OP_NAME,
-						    empty_stoken);
+#line 1080 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  push_component<ada_others_component> (ada_pop ());
 			}
+#line 2824 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 114:
-
-/* Line 1455 of yacc.c  */
-#line 680 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 1087 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  ada_choices_component *choices = choice_component ();
+			  choices->set_associations (pop_associations ((yyvsp[0].lval)));
+			}
+#line 2833 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 115:
-
-/* Line 1455 of yacc.c  */
-#line 682 "ada-exp.y"
-    { write_name_assoc (pstate, (yyvsp[(1) - (2)].sval)); }
+#line 1100 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  push_component<ada_choices_component> (ada_pop ());
+			  write_name_assoc (pstate, (yyvsp[-2].sval));
+			  (yyval.lval) = 1;
+			}
+#line 2843 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 116:
-
-/* Line 1455 of yacc.c  */
-#line 683 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(4) - (4)].lval) + 1; }
+#line 1106 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  push_component<ada_choices_component> (ada_pop ());
+			  push_association<ada_name_association> (ada_pop ());
+			  (yyval.lval) = 1;
+			}
+#line 2853 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 117:
-
-/* Line 1455 of yacc.c  */
-#line 685 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(3) - (3)].lval) + 1; }
+#line 1112 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  push_component<ada_choices_component> (ada_pop ());
+			  operation_up rhs = ada_pop ();
+			  operation_up lhs = ada_pop ();
+			  push_association<ada_discrete_range_association>
+			    (std::move (lhs), std::move (rhs));
+			  (yyval.lval) = 1;
+			}
+#line 2866 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 118:
-
-/* Line 1455 of yacc.c  */
-#line 687 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE); }
+#line 1121 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  write_name_assoc (pstate, (yyvsp[-2].sval));
+			  (yyval.lval) = (yyvsp[0].lval) + 1;
+			}
+#line 2875 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 119:
-
-/* Line 1455 of yacc.c  */
-#line 688 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(6) - (6)].lval) + 1; }
+#line 1126 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  push_association<ada_name_association> (ada_pop ());
+			  (yyval.lval) = (yyvsp[0].lval) + 1;
+			}
+#line 2884 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 120:
-
-/* Line 1455 of yacc.c  */
-#line 695 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
+#line 1132 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up rhs = ada_pop ();
+			  operation_up lhs = ada_pop ();
+			  push_association<ada_discrete_range_association>
+			    (std::move (lhs), std::move (rhs));
+			  (yyval.lval) = (yyvsp[0].lval) + 1;
+			}
+#line 2896 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 121:
-
-/* Line 1455 of yacc.c  */
-#line 697 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
+#line 1145 "ada-exp.y" /* yacc.c:1646  */
+    { ada_wrap<ada_unop_ind_operation> (); }
+#line 2902 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 122:
-
-/* Line 1455 of yacc.c  */
-#line 699 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+#line 1147 "ada-exp.y" /* yacc.c:1646  */
+    { ada_addrof (); }
+#line 2908 "ada-exp.c.tmp" /* yacc.c:1646  */
     break;
 
+  case 123:
+#line 1149 "ada-exp.y" /* yacc.c:1646  */
+    {
+			  ada_wrap2<subscript_operation> (BINOP_SUBSCRIPT);
+			  ada_wrap<ada_wrapped_operation> ();
+			}
+#line 2917 "ada-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
 
-/* Line 1455 of yacc.c  */
-#line 2730 "ada-exp.c.tmp"
+#line 2921 "ada-exp.c.tmp" /* yacc.c:1646  */
       default: break;
     }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
@@ -2736,7 +2938,7 @@ yyreduce:
 
   *++yyvsp = yyval;
 
-  /* Now `shift' the result of the reduction.  Determine what state
+  /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
 
@@ -2751,10 +2953,14 @@ yyreduce:
   goto yynewstate;
 
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error.  |
+`--------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -2762,37 +2968,36 @@ yyerrlab:
 #if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
       {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
-
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (yymsg);
-	  }
-	else
-	  {
-	    yyerror (YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
@@ -2801,20 +3006,20 @@ yyerrlab:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-	 error, discard it.  */
+         error, discard it.  */
 
       if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
       else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval);
-	  yychar = YYEMPTY;
-	}
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval);
+          yychar = YYEMPTY;
+        }
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -2833,7 +3038,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -2846,35 +3051,37 @@ yyerrorlab:
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
+      if (!yypact_value_is_default (yyn))
+        {
+          yyn += YYTERROR;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+            {
+              yyn = yytable[yyn];
+              if (0 < yyn)
+                break;
+            }
+        }
 
       /* Pop the current state because it cannot handle the error token.  */
       if (yyssp == yyss)
-	YYABORT;
+        YYABORT;
 
 
       yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp);
+                  yystos[yystate], yyvsp);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
     }
 
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
 
   /* Shift the error token.  */
@@ -2898,7 +3105,7 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+#if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2910,16 +3117,21 @@ yyexhaustedlab:
 
 yyreturn:
   if (yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval);
-  /* Do not reclaim the symbols of the rule which action triggered
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval);
+    }
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp);
+                  yystos[*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -2930,14 +3142,9 @@ yyreturn:
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
-
-
-
-/* Line 1675 of yacc.c  */
-#line 702 "ada-exp.y"
+#line 1155 "ada-exp.y" /* yacc.c:1906  */
 
 
 /* yylex defined in ada-lex.c: Reads one token, getting characters */
@@ -2971,36 +3178,46 @@ ada_parse (struct parser_state *par_stat
   scoped_restore pstate_restore = make_scoped_restore (&pstate);
   gdb_assert (par_state != NULL);
   pstate = par_state;
+  original_expr = par_state->lexptr;
+
+  scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
+							par_state->debug);
 
   lexer_init (yyin);		/* (Re-)initialize lexer.  */
-  type_qualifier = NULL;
   obstack_free (&temp_parse_space, NULL);
   obstack_init (&temp_parse_space);
-
-  return yyparse ();
+  components.clear ();
+  associations.clear ();
+  int_storage.clear ();
+  assignments.clear ();
+
+  int result = yyparse ();
+  if (!result)
+    {
+      struct type *context_type = nullptr;
+      if (par_state->void_context_p)
+	context_type = parse_type (par_state)->builtin_void;
+      pstate->set_operation (ada_pop (true, context_type));
+    }
+  return result;
 }
 
 static void
 yyerror (const char *msg)
 {
-  error (_("Error in expression, near `%s'."), pstate->lexptr);
+  pstate->parse_error (msg);
 }
 
 /* Emit expression to access an instance of SYM, in block BLOCK (if
    non-NULL).  */
 
 static void
-write_var_from_sym (struct parser_state *par_state,
-		    const struct block *block,
-		    struct symbol *sym)
-{
-  if (symbol_read_needs_frame (sym))
-    par_state->block_tracker->update (block, INNERMOST_BLOCK_FOR_SYMBOLS);
-
-  write_exp_elt_opcode (par_state, OP_VAR_VALUE);
-  write_exp_elt_block (par_state, block);
-  write_exp_elt_sym (par_state, sym);
-  write_exp_elt_opcode (par_state, OP_VAR_VALUE);
+write_var_from_sym (struct parser_state *par_state, block_symbol sym)
+{
+  if (symbol_read_needs_frame (sym.symbol))
+    par_state->block_tracker->update (sym.block, INNERMOST_BLOCK_FOR_SYMBOLS);
+
+  par_state->push_new<ada_var_value_operation> (sym);
 }
 
 /* Write integer or boolean constant ARG of type TYPE.  */
@@ -3008,32 +3225,20 @@ write_var_from_sym (struct parser_state
 static void
 write_int (struct parser_state *par_state, LONGEST arg, struct type *type)
 {
-  write_exp_elt_opcode (par_state, OP_LONG);
-  write_exp_elt_type (par_state, type);
-  write_exp_elt_longcst (par_state, arg);
-  write_exp_elt_opcode (par_state, OP_LONG);
+  pstate->push_new<long_const_operation> (type, arg);
+  ada_wrap<ada_wrapped_operation> ();
 }
 
-/* Write an OPCODE, string, OPCODE sequence to the current expression.  */
-static void
-write_exp_op_with_string (struct parser_state *par_state,
-			  enum exp_opcode opcode, struct stoken token)
-{
-  write_exp_elt_opcode (par_state, opcode);
-  write_exp_string (par_state, token);
-  write_exp_elt_opcode (par_state, opcode);
-}
-  
 /* Emit expression corresponding to the renamed object named 
- * designated by RENAMED_ENTITY[0 .. RENAMED_ENTITY_LEN-1] in the
- * context of ORIG_LEFT_CONTEXT, to which is applied the operations
- * encoded by RENAMING_EXPR.  MAX_DEPTH is the maximum number of
- * cascaded renamings to allow.  If ORIG_LEFT_CONTEXT is null, it
- * defaults to the currently selected block. ORIG_SYMBOL is the 
- * symbol that originally encoded the renaming.  It is needed only
- * because its prefix also qualifies any index variables used to index
- * or slice an array.  It should not be necessary once we go to the
- * new encoding entirely (FIXME pnh 7/20/2007).  */
+   designated by RENAMED_ENTITY[0 .. RENAMED_ENTITY_LEN-1] in the
+   context of ORIG_LEFT_CONTEXT, to which is applied the operations
+   encoded by RENAMING_EXPR.  MAX_DEPTH is the maximum number of
+   cascaded renamings to allow.  If ORIG_LEFT_CONTEXT is null, it
+   defaults to the currently selected block. ORIG_SYMBOL is the 
+   symbol that originally encoded the renaming.  It is needed only
+   because its prefix also qualifies any index variables used to index
+   or slice an array.  It should not be necessary once we go to the
+   new encoding entirely (FIXME pnh 7/20/2007).  */
 
 static void
 write_object_renaming (struct parser_state *par_state,
@@ -3053,10 +3258,10 @@ write_object_renaming (struct parser_sta
 
   name = obstack_strndup (&temp_parse_space, renamed_entity,
 			  renamed_entity_len);
-  ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN, &sym_info);
+  ada_lookup_encoded_symbol (name, orig_left_context, SEARCH_VFT, &sym_info);
   if (sym_info.symbol == NULL)
     error (_("Could not find renamed variable: %s"), ada_decode (name).c_str ());
-  else if (SYMBOL_CLASS (sym_info.symbol) == LOC_TYPEDEF)
+  else if (sym_info.symbol->aclass () == LOC_TYPEDEF)
     /* We have a renaming of an old-style renaming symbol.  Don't
        trust the block information.  */
     sym_info.block = orig_left_context;
@@ -3071,7 +3276,7 @@ write_object_renaming (struct parser_sta
 				&inner_renaming_expr))
       {
       case ADA_NOT_RENAMING:
-	write_var_from_sym (par_state, sym_info.block, sym_info.symbol);
+	write_var_from_sym (par_state, sym_info);
 	break;
       case ADA_OBJECT_RENAMING:
 	write_object_renaming (par_state, sym_info.block,
@@ -3090,12 +3295,12 @@ write_object_renaming (struct parser_sta
 
       switch (*renaming_expr) {
       case 'A':
-        renaming_expr += 1;
-        write_exp_elt_opcode (par_state, UNOP_IND);
-        break;
+	renaming_expr += 1;
+	ada_wrap<ada_unop_ind_operation> ();
+	break;
       case 'L':
 	slice_state = LOWER_BOUND;
-	/* FALLTHROUGH */
+	[[fallthrough]];
       case 'S':
 	renaming_expr += 1;
 	if (isdigit (*renaming_expr))
@@ -3105,10 +3310,7 @@ write_object_renaming (struct parser_sta
 	    if (next == renaming_expr)
 	      goto BadEncoding;
 	    renaming_expr = next;
-	    write_exp_elt_opcode (par_state, OP_LONG);
-	    write_exp_elt_type (par_state, type_int (par_state));
-	    write_exp_elt_longcst (par_state, (LONGEST) val);
-	    write_exp_elt_opcode (par_state, OP_LONG);
+	    write_int (par_state, val, parse_type (par_state)->builtin_int);
 	  }
 	else
 	  {
@@ -3125,35 +3327,28 @@ write_object_renaming (struct parser_sta
 	    renaming_expr = end;
 
 	    ada_lookup_encoded_symbol (index_name, orig_left_context,
-				       VAR_DOMAIN, &index_sym_info);
+				       SEARCH_VFT, &index_sym_info);
 	    if (index_sym_info.symbol == NULL)
 	      error (_("Could not find %s"), index_name);
-	    else if (SYMBOL_CLASS (index_sym_info.symbol) == LOC_TYPEDEF)
+	    else if (index_sym_info.symbol->aclass () == LOC_TYPEDEF)
 	      /* Index is an old-style renaming symbol.  */
 	      index_sym_info.block = orig_left_context;
-	    write_var_from_sym (par_state, index_sym_info.block,
-				index_sym_info.symbol);
+	    write_var_from_sym (par_state, index_sym_info);
 	  }
 	if (slice_state == SIMPLE_INDEX)
-	  {
-	    write_exp_elt_opcode (par_state, OP_FUNCALL);
-	    write_exp_elt_longcst (par_state, (LONGEST) 1);
-	    write_exp_elt_opcode (par_state, OP_FUNCALL);
-	  }
+	  ada_funcall (1);
 	else if (slice_state == LOWER_BOUND)
 	  slice_state = UPPER_BOUND;
 	else if (slice_state == UPPER_BOUND)
 	  {
-	    write_exp_elt_opcode (par_state, TERNOP_SLICE);
+	    ada_wrap3<ada_ternop_slice_operation> ();
 	    slice_state = SIMPLE_INDEX;
 	  }
 	break;
 
       case 'R':
 	{
-	  struct stoken field_name;
 	  const char *end;
-	  char *buf;
 
 	  renaming_expr += 1;
 
@@ -3162,13 +3357,12 @@ write_object_renaming (struct parser_sta
 	  end = strchr (renaming_expr, 'X');
 	  if (end == NULL)
 	    end = renaming_expr + strlen (renaming_expr);
-	  field_name.length = end - renaming_expr;
-	  buf = (char *) xmalloc (end - renaming_expr + 1);
-	  field_name.ptr = buf;
-	  strncpy (buf, renaming_expr, end - renaming_expr);
-	  buf[end - renaming_expr] = '\000';
+
+	  operation_up arg = ada_pop ();
+	  pstate->push_new<ada_structop_operation>
+	    (std::move (arg), std::string (renaming_expr,
+					   end - renaming_expr));
 	  renaming_expr = end;
-	  write_exp_op_with_string (par_state, STRUCTOP_STRUCT, field_name);
 	  break;
 	}
 
@@ -3187,30 +3381,33 @@ static const struct block*
 block_lookup (const struct block *context, const char *raw_name)
 {
   const char *name;
-  std::vector<struct block_symbol> syms;
-  int nsyms;
   struct symtab *symtab;
   const struct block *result = NULL;
 
+  std::string name_storage;
   if (raw_name[0] == '\'')
     {
       raw_name += 1;
       name = raw_name;
     }
   else
-    name = ada_encode (raw_name);
+    {
+      name_storage = ada_encode (raw_name);
+      name = name_storage.c_str ();
+    }
 
-  nsyms = ada_lookup_symbol_list (name, context, VAR_DOMAIN, &syms);
+  std::vector<struct block_symbol> syms
+    = ada_lookup_symbol_list (name, context, SEARCH_FUNCTION_DOMAIN);
 
   if (context == NULL
-      && (nsyms == 0 || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK))
+      && (syms.empty () || syms[0].symbol->aclass () != LOC_BLOCK))
     symtab = lookup_symtab (name);
   else
     symtab = NULL;
 
   if (symtab != NULL)
-    result = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK);
-  else if (nsyms == 0 || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK)
+    result = symtab->compunit ()->blockvector ()->static_block ();
+  else if (syms.empty () || syms[0].symbol->aclass () != LOC_BLOCK)
     {
       if (context == NULL)
 	error (_("No file or function \"%s\"."), raw_name);
@@ -3219,9 +3416,9 @@ block_lookup (const struct block *contex
     }
   else
     {
-      if (nsyms > 1)
+      if (syms.size () > 1)
 	warning (_("Function name \"%s\" ambiguous here"), raw_name);
-      result = SYMBOL_BLOCK_VALUE (syms[0].symbol);
+      result = syms[0].symbol->value_block ();
     }
 
   return result;
@@ -3236,13 +3433,13 @@ select_possible_type_sym (const std::vec
 	  
   preferred_index = -1; preferred_type = NULL;
   for (i = 0; i < syms.size (); i += 1)
-    switch (SYMBOL_CLASS (syms[i].symbol))
+    switch (syms[i].symbol->aclass ())
       {
       case LOC_TYPEDEF:
-	if (ada_prefer_type (SYMBOL_TYPE (syms[i].symbol), preferred_type))
+	if (ada_prefer_type (syms[i].symbol->type (), preferred_type))
 	  {
 	    preferred_index = i;
-	    preferred_type = SYMBOL_TYPE (syms[i].symbol);
+	    preferred_type = syms[i].symbol->type ();
 	  }
 	break;
       case LOC_REGISTER:
@@ -3261,7 +3458,7 @@ select_possible_type_sym (const std::vec
 }
 
 static struct type*
-find_primitive_type (struct parser_state *par_state, char *name)
+find_primitive_type (struct parser_state *par_state, const char *name)
 {
   struct type *type;
   type = language_lookup_primitive_type (par_state->language (),
@@ -3279,16 +3476,16 @@ find_primitive_type (struct parser_state
 	(char *) alloca (strlen (name) + sizeof ("standard__"));
       strcpy (expanded_name, "standard__");
       strcat (expanded_name, name);
-      sym = ada_lookup_symbol (expanded_name, NULL, VAR_DOMAIN).symbol;
-      if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
-	type = SYMBOL_TYPE (sym);
+      sym = ada_lookup_symbol (expanded_name, NULL, SEARCH_TYPE_DOMAIN).symbol;
+      if (sym != NULL && sym->aclass () == LOC_TYPEDEF)
+	type = sym->type ();
     }
 
   return type;
 }
 
 static int
-chop_selector (char *name, int end)
+chop_selector (const char *name, int end)
 {
   int i;
   for (i = end - 1; i > 0; i -= 1)
@@ -3301,8 +3498,8 @@ chop_selector (char *name, int end)
    '.'), chop this separator and return the result; else, return
    NAME.  */
 
-static char *
-chop_separator (char *name)
+static const char *
+chop_separator (const char *name)
 {
   if (*name == '.')
    return name + 1;
@@ -3315,22 +3512,25 @@ chop_separator (char *name)
 
 /* Given that SELS is a string of the form (<sep><identifier>)*, where
    <sep> is '__' or '.', write the indicated sequence of
-   STRUCTOP_STRUCT expression operators. */
-static void
-write_selectors (struct parser_state *par_state, char *sels)
+   STRUCTOP_STRUCT expression operators.  Returns a pointer to the
+   last operation that was pushed.  */
+static ada_structop_operation *
+write_selectors (struct parser_state *par_state, const char *sels)
 {
+  ada_structop_operation *result = nullptr;
   while (*sels != '\0')
     {
-      struct stoken field_name;
-      char *p = chop_separator (sels);
+      const char *p = chop_separator (sels);
       sels = p;
       while (*sels != '\0' && *sels != '.' 
 	     && (sels[0] != '_' || sels[1] != '_'))
 	sels += 1;
-      field_name.length = sels - p;
-      field_name.ptr = p;
-      write_exp_op_with_string (par_state, STRUCTOP_STRUCT, field_name);
+      operation_up arg = ada_pop ();
+      result = new ada_structop_operation (std::move (arg),
+					   std::string (p, sels - p));
+      pstate->push (operation_up (result));
     }
+  return result;
 }
 
 /* Write a variable access (OP_VAR_VALUE) to ambiguous encoded name
@@ -3339,18 +3539,16 @@ write_selectors (struct parser_state *pa
    */
 static void
 write_ambiguous_var (struct parser_state *par_state,
-		     const struct block *block, char *name, int len)
+		     const struct block *block, const char *name, int len)
 {
   struct symbol *sym = new (&temp_parse_space) symbol ();
 
-  SYMBOL_DOMAIN (sym) = UNDEF_DOMAIN;
+  sym->set_domain (UNDEF_DOMAIN);
   sym->set_linkage_name (obstack_strndup (&temp_parse_space, name, len));
-  SYMBOL_LANGUAGE (sym) = language_ada;
+  sym->set_language (language_ada, nullptr);
 
-  write_exp_elt_opcode (par_state, OP_VAR_VALUE);
-  write_exp_elt_block (par_state, block);
-  write_exp_elt_sym (par_state, sym);
-  write_exp_elt_opcode (par_state, OP_VAR_VALUE);
+  block_symbol bsym { sym, block };
+  par_state->push_new<ada_var_value_operation> (bsym);
 }
 
 /* A convenient wrapper around ada_get_field_index that takes
@@ -3359,7 +3557,7 @@ write_ambiguous_var (struct parser_state
 
 static int
 ada_nget_field_index (const struct type *type, const char *field_name0,
-                      int field_name_len, int maybe_missing)
+		      int field_name_len, int maybe_missing)
 {
   char *field_name = (char *) alloca ((field_name_len + 1) * sizeof (char));
 
@@ -3380,11 +3578,11 @@ ada_nget_field_index (const struct type
    In case of failure, we return NULL.  */
 
 static struct type *
-get_symbol_field_type (struct symbol *sym, char *encoded_field_name)
+get_symbol_field_type (struct symbol *sym, const char *encoded_field_name)
 {
-  char *field_name = encoded_field_name;
-  char *subfield_name;
-  struct type *type = SYMBOL_TYPE (sym);
+  const char *field_name = encoded_field_name;
+  const char *subfield_name;
+  struct type *type = sym->type ();
   int fieldno;
 
   if (type == NULL || field_name == NULL)
@@ -3397,7 +3595,7 @@ get_symbol_field_type (struct symbol *sy
 
       fieldno = ada_get_field_index (type, field_name, 1);
       if (fieldno >= 0)
-        return TYPE_FIELD_TYPE (type, fieldno);
+	return type->field (fieldno).type ();
 
       subfield_name = field_name;
       while (*subfield_name != '\0' && *subfield_name != '.' 
@@ -3405,14 +3603,14 @@ get_symbol_field_type (struct symbol *sy
 	subfield_name += 1;
 
       if (subfield_name[0] == '\0')
-        return NULL;
+	return NULL;
 
       fieldno = ada_nget_field_index (type, field_name,
-                                      subfield_name - field_name, 1);
+				      subfield_name - field_name, 1);
       if (fieldno < 0)
-        return NULL;
+	return NULL;
 
-      type = TYPE_FIELD_TYPE (type, fieldno);
+      type = type->field (fieldno).type ();
       field_name = subfield_name;
     }
 
@@ -3440,9 +3638,10 @@ write_var_or_type (struct parser_state *
   if (block == NULL)
     block = par_state->expression_context_block;
 
-  encoded_name = ada_encode (name0.ptr);
-  name_len = strlen (encoded_name);
-  encoded_name = obstack_strndup (&temp_parse_space, encoded_name, name_len);
+  std::string name_storage = ada_encode (name0.ptr);
+  name_len = name_storage.size ();
+  encoded_name = obstack_strndup (&temp_parse_space, name_storage.c_str (),
+				  name_len);
   for (depth = 0; depth < MAX_RENAMING_CHAIN_LENGTH; depth += 1)
     {
       int tail_index;
@@ -3450,8 +3649,6 @@ write_var_or_type (struct parser_state *
       tail_index = name_len;
       while (tail_index > 0)
 	{
-	  int nsyms;
-	  std::vector<struct block_symbol> syms;
 	  struct symbol *type_sym;
 	  struct symbol *renaming_sym;
 	  const char* renaming;
@@ -3460,15 +3657,20 @@ write_var_or_type (struct parser_state *
 	  int terminator = encoded_name[tail_index];
 
 	  encoded_name[tail_index] = '\0';
-	  nsyms = ada_lookup_symbol_list (encoded_name, block,
-					  VAR_DOMAIN, &syms);
+	  /* In order to avoid double-encoding, we want to only pass
+	     the decoded form to lookup functions.  */
+	  std::string decoded_name = ada_decode (encoded_name);
 	  encoded_name[tail_index] = terminator;
 
+	  std::vector<struct block_symbol> syms
+	    = ada_lookup_symbol_list (decoded_name.c_str (), block,
+				      SEARCH_VFT);
+
 	  type_sym = select_possible_type_sym (syms);
 
 	  if (type_sym != NULL)
 	    renaming_sym = type_sym;
-	  else if (nsyms == 1)
+	  else if (syms.size () == 1)
 	    renaming_sym = syms[0].symbol;
 	  else 
 	    renaming_sym = NULL;
@@ -3482,7 +3684,7 @@ write_var_or_type (struct parser_state *
 	    case ADA_EXCEPTION_RENAMING:
 	    case ADA_SUBPROGRAM_RENAMING:
 	      {
-	        int alloc_len = renaming_len + name_len - tail_index + 1;
+		int alloc_len = renaming_len + name_len - tail_index + 1;
 		char *new_name
 		  = (char *) obstack_alloc (&temp_parse_space, alloc_len);
 		strncpy (new_name, renaming, renaming_len);
@@ -3497,29 +3699,28 @@ write_var_or_type (struct parser_state *
 	      write_selectors (par_state, encoded_name + tail_index);
 	      return NULL;
 	    default:
-	      internal_error (__FILE__, __LINE__,
-			      _("impossible value from ada_parse_renaming"));
+	      internal_error (_("impossible value from ada_parse_renaming"));
 	    }
 
 	  if (type_sym != NULL)
 	    {
-              struct type *field_type;
-              
-              if (tail_index == name_len)
-		return SYMBOL_TYPE (type_sym);
-
-              /* We have some extraneous characters after the type name.
-                 If this is an expression "TYPE_NAME.FIELD0.[...].FIELDN",
-                 then try to get the type of FIELDN.  */
-              field_type
-                = get_symbol_field_type (type_sym, encoded_name + tail_index);
-              if (field_type != NULL)
+	      struct type *field_type;
+	      
+	      if (tail_index == name_len)
+		return type_sym->type ();
+
+	      /* We have some extraneous characters after the type name.
+		 If this is an expression "TYPE_NAME.FIELD0.[...].FIELDN",
+		 then try to get the type of FIELDN.  */
+	      field_type
+		= get_symbol_field_type (type_sym, encoded_name + tail_index);
+	      if (field_type != NULL)
 		return field_type;
 	      else 
 		error (_("Invalid attempt to select from type: \"%s\"."),
-                       name0.ptr);
+		       name0.ptr);
 	    }
-	  else if (tail_index == name_len && nsyms == 0)
+	  else if (tail_index == name_len && syms.empty ())
 	    {
 	      struct type *type = find_primitive_type (par_state,
 						       encoded_name);
@@ -3528,19 +3729,23 @@ write_var_or_type (struct parser_state *
 		return type;
 	    }
 
-	  if (nsyms == 1)
+	  if (syms.size () == 1)
 	    {
-	      write_var_from_sym (par_state, syms[0].block, syms[0].symbol);
+	      write_var_from_sym (par_state, syms[0]);
 	      write_selectors (par_state, encoded_name + tail_index);
 	      return NULL;
 	    }
-	  else if (nsyms == 0) 
+	  else if (syms.empty ())
 	    {
+	      struct objfile *objfile = nullptr;
+	      if (block != nullptr)
+		objfile = block->objfile ();
+
 	      struct bound_minimal_symbol msym
-		= ada_lookup_simple_minsym (encoded_name);
+		= ada_lookup_simple_minsym (decoded_name.c_str (), objfile);
 	      if (msym.minsym != NULL)
 		{
-		  write_exp_msymbol (par_state, msym);
+		  par_state->push_new<ada_var_msym_value_operation> (msym);
 		  /* Maybe cause error here rather than later? FIXME? */
 		  write_selectors (par_state, encoded_name + tail_index);
 		  return NULL;
@@ -3576,6 +3781,72 @@ write_var_or_type (struct parser_state *
 
 }
 
+/* Because ada_completer_word_break_characters does not contain '.' --
+   and it cannot easily be added, this breaks other completions -- we
+   have to recreate the completion word-splitting here, so that we can
+   provide a prefix that is then used when completing field names.
+   Without this, an attempt like "complete print abc.d" will give a
+   result like "print def" rather than "print abc.def".  */
+
+static std::string
+find_completion_bounds (struct parser_state *par_state)
+{
+  const char *end = pstate->lexptr;
+  /* First the end of the prefix.  Here we stop at the token start or
+     at '.' or space.  */
+  for (; end > original_expr && end[-1] != '.' && !isspace (end[-1]); --end)
+    {
+      /* Nothing.  */
+    }
+  /* Now find the start of the prefix.  */
+  const char *ptr = end;
+  /* Here we allow '.'.  */
+  for (;
+       ptr > original_expr && (ptr[-1] == '.'
+			       || ptr[-1] == '_'
+			       || (ptr[-1] >= 'a' && ptr[-1] <= 'z')
+			       || (ptr[-1] >= 'A' && ptr[-1] <= 'Z')
+			       || (ptr[-1] & 0xff) >= 0x80);
+       --ptr)
+    {
+      /* Nothing.  */
+    }
+  /* ... except, skip leading spaces.  */
+  ptr = skip_spaces (ptr);
+
+  return std::string (ptr, end);
+}
+
+/* A wrapper for write_var_or_type that is used specifically when
+   completion is requested for the last of a sequence of
+   identifiers.  */
+
+static struct type *
+write_var_or_type_completion (struct parser_state *par_state,
+			      const struct block *block, struct stoken name0)
+{
+  int tail_index = chop_selector (name0.ptr, name0.length);
+  /* If there's no separator, just defer to ordinary symbol
+     completion.  */
+  if (tail_index == -1)
+    return write_var_or_type (par_state, block, name0);
+
+  std::string copy (name0.ptr, tail_index);
+  struct type *type = write_var_or_type (par_state, block,
+					 { copy.c_str (),
+					   (int) copy.length () });
+  /* For completion purposes, it's enough that we return a type
+     here.  */
+  if (type != nullptr)
+    return type;
+
+  ada_structop_operation *op = write_selectors (par_state,
+						name0.ptr + tail_index);
+  op->set_prefix (find_completion_bounds (par_state));
+  par_state->mark_struct_expression (op);
+  return nullptr;
+}
+
 /* Write a left side of a component association (e.g., NAME in NAME =>
    exp).  If NAME has the form of a selected component, write it as an
    ordinary expression.  If it is a simple variable that unambiguously
@@ -3596,93 +3867,36 @@ write_name_assoc (struct parser_state *p
 {
   if (strchr (name.ptr, '.') == NULL)
     {
-      std::vector<struct block_symbol> syms;
-      int nsyms = ada_lookup_symbol_list (name.ptr,
-					  par_state->expression_context_block,
-					  VAR_DOMAIN, &syms);
+      std::vector<struct block_symbol> syms
+	= ada_lookup_symbol_list (name.ptr,
+				  par_state->expression_context_block,
+				  SEARCH_VFT);
 
-      if (nsyms != 1 || SYMBOL_CLASS (syms[0].symbol) == LOC_TYPEDEF)
-	write_exp_op_with_string (par_state, OP_NAME, name);
+      if (syms.size () != 1 || syms[0].symbol->aclass () == LOC_TYPEDEF)
+	pstate->push_new<ada_string_operation> (copy_name (name));
       else
-	write_var_from_sym (par_state, syms[0].block, syms[0].symbol);
+	write_var_from_sym (par_state, syms[0]);
     }
   else
     if (write_var_or_type (par_state, NULL, name) != NULL)
       error (_("Invalid use of type."));
-}
-
-/* Convert the character literal whose ASCII value would be VAL to the
-   appropriate value of type TYPE, if there is a translation.
-   Otherwise return VAL.  Hence, in an enumeration type ('A', 'B'),
-   the literal 'A' (VAL == 65), returns 0.  */
-
-static LONGEST
-convert_char_literal (struct type *type, LONGEST val)
-{
-  char name[7];
-  int f;
-
-  if (type == NULL)
-    return val;
-  type = check_typedef (type);
-  if (TYPE_CODE (type) != TYPE_CODE_ENUM)
-    return val;
-
-  if ((val >= 'a' && val <= 'z') || (val >= '0' && val <= '9'))
-    xsnprintf (name, sizeof (name), "Q%c", (int) val);
-  else
-    xsnprintf (name, sizeof (name), "QU%02x", (int) val);
-  size_t len = strlen (name);
-  for (f = 0; f < TYPE_NFIELDS (type); f += 1)
-    {
-      /* Check the suffix because an enum constant in a package will
-	 have a name like "pkg__QUxx".  This is safe enough because we
-	 already have the correct type, and because mangling means
-	 there can't be clashes.  */
-      const char *ename = TYPE_FIELD_NAME (type, f);
-      size_t elen = strlen (ename);
-
-      if (elen >= len && strcmp (name, ename + elen - len) == 0)
-	return TYPE_FIELD_ENUMVAL (type, f);
-    }
-  return val;
-}
-
-static struct type *
-type_int (struct parser_state *par_state)
-{
-  return parse_type (par_state)->builtin_int;
-}
-
-static struct type *
-type_long (struct parser_state *par_state)
-{
-  return parse_type (par_state)->builtin_long;
-}
 
-static struct type *
-type_long_long (struct parser_state *par_state)
-{
-  return parse_type (par_state)->builtin_long_long;
+  push_association<ada_name_association> (ada_pop ());
 }
 
 static struct type *
-type_long_double (struct parser_state *par_state)
+type_for_char (struct parser_state *par_state, ULONGEST value)
 {
-  return parse_type (par_state)->builtin_long_double;
-}
-
-static struct type *
-type_char (struct parser_state *par_state)
-{
-  return language_string_char_type (par_state->language (),
-				    par_state->gdbarch ());
-}
-
-static struct type *
-type_boolean (struct parser_state *par_state)
-{
-  return parse_type (par_state)->builtin_bool;
+  if (value <= 0xff)
+    return language_string_char_type (par_state->language (),
+				      par_state->gdbarch ());
+  else if (value <= 0xffff)
+    return language_lookup_primitive_type (par_state->language (),
+					   par_state->gdbarch (),
+					   "wide_character");
+  return language_lookup_primitive_type (par_state->language (),
+					 par_state->gdbarch (),
+					 "wide_wide_character");
 }
 
 static struct type *
@@ -3695,9 +3909,9 @@ type_system_address (struct parser_state
   return  type != NULL ? type : parse_type (par_state)->builtin_data_ptr;
 }
 
+void _initialize_ada_exp ();
 void
-_initialize_ada_exp (void)
+_initialize_ada_exp ()
 {
   obstack_init (&temp_parse_space);
 }
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-exp.h ./gdb/ada-exp.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-exp.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/ada-exp.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,922 @@
+/* Definitions for Ada expressions
+
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ADA_EXP_H
+#define ADA_EXP_H
+
+#include "expop.h"
+
+extern struct value *ada_unop_neg (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside, enum exp_opcode op,
+				   struct value *arg1);
+extern struct value *ada_atr_tag (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside, enum exp_opcode op,
+				  struct value *arg1);
+extern struct value *ada_atr_size (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside, enum exp_opcode op,
+				   struct value *arg1);
+extern struct value *ada_abs (struct type *expect_type,
+			      struct expression *exp,
+			      enum noside noside, enum exp_opcode op,
+			      struct value *arg1);
+extern struct value *ada_unop_in_range (struct type *expect_type,
+					struct expression *exp,
+					enum noside noside, enum exp_opcode op,
+					struct value *arg1, struct type *type);
+extern struct value *ada_mult_binop (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside, enum exp_opcode op,
+				     struct value *arg1, struct value *arg2);
+extern struct value *ada_equal_binop (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside, enum exp_opcode op,
+				      struct value *arg1, struct value *arg2);
+extern struct value *ada_ternop_slice (struct expression *exp,
+				       enum noside noside,
+				       struct value *array,
+				       struct value *low_bound_val,
+				       struct value *high_bound_val);
+extern struct value *ada_binop_in_bounds (struct expression *exp,
+					  enum noside noside,
+					  struct value *arg1,
+					  struct value *arg2,
+					  int n);
+extern struct value *ada_binop_minmax (struct type *expect_type,
+				       struct expression *exp,
+				       enum noside noside, enum exp_opcode op,
+				       struct value *arg1,
+				       struct value *arg2);
+extern struct value *ada_pos_atr (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside, enum exp_opcode op,
+				  struct value *arg);
+extern struct value *ada_atr_enum_rep (struct expression *exp,
+				       enum noside noside, struct type *type,
+				       struct value *arg);
+extern struct value *ada_atr_enum_val (struct expression *exp,
+				       enum noside noside, struct type *type,
+				       struct value *arg);
+extern struct value *ada_val_atr (struct expression *exp,
+				  enum noside noside, struct type *type,
+				  struct value *arg);
+extern struct value *ada_binop_exp (struct type *expect_type,
+				    struct expression *exp,
+				    enum noside noside, enum exp_opcode op,
+				    struct value *arg1, struct value *arg2);
+
+namespace expr
+{
+
+/* The base class for Ada type resolution.  Ada operations that want
+   to participate in resolution implement this interface.  */
+struct ada_resolvable
+{
+  /* Resolve this object.  EXP is the expression being resolved.
+     DEPROCEDURE_P is true if a symbol that refers to a zero-argument
+     function may be turned into a function call.  PARSE_COMPLETION
+     and TRACKER are passed in from the parser context.  CONTEXT_TYPE
+     is the expected type of the expression, or nullptr if none is
+     known.  This method should return true if the operation should be
+     replaced by a function call with this object as the callee.  */
+  virtual bool resolve (struct expression *exp,
+			bool deprocedure_p,
+			bool parse_completion,
+			innermost_block_tracker *tracker,
+			struct type *context_type) = 0;
+
+  /* Possibly replace this object with some other expression object.
+     This is like 'resolve', but can return a replacement.
+
+     The default implementation calls 'resolve' and wraps this object
+     in a function call if that call returns true.  OWNER is a
+     reference to the unique pointer that owns the 'this'; it can be
+     'move'd from to construct the replacement.
+
+     This should either return a new object, or OWNER -- never
+     nullptr.  */
+
+  virtual operation_up replace (operation_up &&owner,
+				struct expression *exp,
+				bool deprocedure_p,
+				bool parse_completion,
+				innermost_block_tracker *tracker,
+				struct type *context_type);
+};
+
+/* In Ada, some generic operations must be wrapped with a handler that
+   handles some Ada-specific type conversions.  */
+class ada_wrapped_operation
+  : public tuple_holding_operation<operation_up>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return std::get<0> (m_storage)->opcode (); }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* An Ada string constant.  */
+class ada_string_operation
+  : public string_operation
+{
+public:
+
+  using string_operation::string_operation;
+
+  /* Return the underlying string.  */
+  const char *get_name () const
+  {
+    return std::get<0> (m_storage).c_str ();
+  }
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+};
+
+/* The Ada TYPE'(EXP) construct.  */
+class ada_qual_operation
+  : public tuple_holding_operation<operation_up, struct type *>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return UNOP_QUAL; }
+};
+
+/* Ternary in-range operator.  */
+class ada_ternop_range_operation
+  : public tuple_holding_operation<operation_up, operation_up, operation_up>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return TERNOP_IN_RANGE; }
+};
+
+using ada_neg_operation = unop_operation<UNOP_NEG, ada_unop_neg>;
+using ada_atr_tag_operation = unop_operation<OP_ATR_TAG, ada_atr_tag>;
+using ada_atr_size_operation = unop_operation<OP_ATR_SIZE, ada_atr_size>;
+using ada_abs_operation = unop_operation<UNOP_ABS, ada_abs>;
+using ada_pos_operation = unop_operation<OP_ATR_POS, ada_pos_atr>;
+
+/* The in-range operation, given a type.  */
+class ada_unop_range_operation
+  : public tuple_holding_operation<operation_up, struct type *>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *val = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    return ada_unop_in_range (expect_type, exp, noside, UNOP_IN_RANGE,
+			      val, std::get<1> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return UNOP_IN_RANGE; }
+};
+
+/* The Ada + and - operators.  */
+class ada_binop_addsub_operation
+  : public tuple_holding_operation<enum exp_opcode, operation_up, operation_up>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return std::get<0> (m_storage); }
+};
+
+using ada_binop_mul_operation = binop_operation<BINOP_MUL, ada_mult_binop>;
+using ada_binop_div_operation = binop_operation<BINOP_DIV, ada_mult_binop>;
+using ada_binop_rem_operation = binop_operation<BINOP_REM, ada_mult_binop>;
+using ada_binop_mod_operation = binop_operation<BINOP_MOD, ada_mult_binop>;
+
+using ada_binop_min_operation = binop_operation<BINOP_MIN, ada_binop_minmax>;
+using ada_binop_max_operation = binop_operation<BINOP_MAX, ada_binop_minmax>;
+
+using ada_binop_exp_operation = binop_operation<BINOP_EXP, ada_binop_exp>;
+
+/* Implement the equal and not-equal operations for Ada.  */
+class ada_binop_equal_operation
+  : public tuple_holding_operation<enum exp_opcode, operation_up, operation_up>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *arg1 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+    value *arg2 = std::get<2> (m_storage)->evaluate (arg1->type (),
+						     exp, noside);
+    return ada_equal_binop (expect_type, exp, noside, std::get<0> (m_storage),
+			    arg1, arg2);
+  }
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override
+  {
+    gen_expr_binop (exp, opcode (),
+		    std::get<1> (this->m_storage).get (),
+		    std::get<2> (this->m_storage).get (),
+		    ax, value);
+  }
+
+  enum exp_opcode opcode () const override
+  { return std::get<0> (m_storage); }
+};
+
+/* Bitwise operators for Ada.  */
+template<enum exp_opcode OP>
+class ada_bitwise_operation
+  : public maybe_constant_operation<operation_up, operation_up>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *lhs = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    value *rhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+    value *result = eval_op_binary (expect_type, exp, noside, OP, lhs, rhs);
+    return value_cast (lhs->type (), result);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP; }
+};
+
+using ada_bitwise_and_operation = ada_bitwise_operation<BINOP_BITWISE_AND>;
+using ada_bitwise_ior_operation = ada_bitwise_operation<BINOP_BITWISE_IOR>;
+using ada_bitwise_xor_operation = ada_bitwise_operation<BINOP_BITWISE_XOR>;
+
+/* Ada array- or string-slice operation.  */
+class ada_ternop_slice_operation
+  : public maybe_constant_operation<operation_up, operation_up, operation_up>,
+    public ada_resolvable
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *array = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    value *low = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+    value *high = std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
+    return ada_ternop_slice (exp, noside, array, low, high);
+  }
+
+  enum exp_opcode opcode () const override
+  { return TERNOP_SLICE; }
+
+  bool resolve (struct expression *exp,
+		bool deprocedure_p,
+		bool parse_completion,
+		innermost_block_tracker *tracker,
+		struct type *context_type) override;
+};
+
+/* Implement BINOP_IN_BOUNDS for Ada.  */
+class ada_binop_in_bounds_operation
+  : public maybe_constant_operation<operation_up, operation_up, int>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    value *arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+    return ada_binop_in_bounds (exp, noside, arg1, arg2,
+				std::get<2> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return BINOP_IN_BOUNDS; }
+};
+
+/* Implement several unary Ada OP_ATR_* operations.  */
+class ada_unop_atr_operation
+  : public maybe_constant_operation<operation_up, enum exp_opcode, int>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return std::get<1> (m_storage); }
+};
+
+/* Variant of var_value_operation for Ada.  */
+class ada_var_value_operation
+  : public var_value_operation, public ada_resolvable
+{
+public:
+
+  using var_value_operation::var_value_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  value *evaluate_for_cast (struct type *expect_type,
+			    struct expression *exp,
+			    enum noside noside) override;
+
+  const block *get_block () const
+  { return std::get<0> (m_storage).block; }
+
+  bool resolve (struct expression *exp,
+		bool deprocedure_p,
+		bool parse_completion,
+		innermost_block_tracker *tracker,
+		struct type *context_type) override;
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* Variant of var_msym_value_operation for Ada.  */
+class ada_var_msym_value_operation
+  : public var_msym_value_operation
+{
+public:
+
+  using var_msym_value_operation::var_msym_value_operation;
+
+  value *evaluate_for_cast (struct type *expect_type,
+			    struct expression *exp,
+			    enum noside noside) override;
+
+protected:
+
+  using operation::do_generate_ax;
+};
+
+typedef struct value *ada_atr_ftype (struct expression *exp,
+				     enum noside noside,
+				     struct type *type,
+				     struct value *arg);
+
+/* Implement several Ada attributes.  */
+template<ada_atr_ftype FUNC>
+class ada_atr_operation
+  : public tuple_holding_operation<struct type *, operation_up>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *arg = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+    return FUNC (exp, noside, std::get<0> (m_storage), arg);
+  }
+
+  enum exp_opcode opcode () const override
+  {
+    /* The value here generally doesn't matter.  */
+    return OP_ATR_VAL;
+  }
+};
+
+using ada_atr_val_operation = ada_atr_operation<ada_val_atr>;
+using ada_atr_enum_rep_operation = ada_atr_operation<ada_atr_enum_rep>;
+using ada_atr_enum_val_operation = ada_atr_operation<ada_atr_enum_val>;
+
+/* The indirection operator for Ada.  */
+class ada_unop_ind_operation
+  : public unop_ind_base_operation
+{
+public:
+
+  using unop_ind_base_operation::unop_ind_base_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+};
+
+/* Implement STRUCTOP_STRUCT for Ada.  */
+class ada_structop_operation
+  : public structop_base_operation
+{
+public:
+
+  using structop_base_operation::structop_base_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return STRUCTOP_STRUCT; }
+
+  /* Set the completion prefix.  */
+  void set_prefix (std::string &&prefix)
+  {
+    m_prefix = std::move (prefix);
+  }
+
+  bool complete (struct expression *exp, completion_tracker &tracker) override
+  {
+    return structop_base_operation::complete (exp, tracker, m_prefix.c_str ());
+  }
+
+  void dump (struct ui_file *stream, int depth) const override
+  {
+    structop_base_operation::dump (stream, depth);
+    dump_for_expression (stream, depth + 1, m_prefix);
+  }
+
+private:
+
+  /* We may need to provide a prefix to field name completion.  See
+     ada-exp.y:find_completion_bounds for details.  */
+  std::string m_prefix;
+};
+
+/* Function calls for Ada.  */
+class ada_funcall_operation
+  : public tuple_holding_operation<operation_up, std::vector<operation_up>>,
+    public ada_resolvable
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  bool resolve (struct expression *exp,
+		bool deprocedure_p,
+		bool parse_completion,
+		innermost_block_tracker *tracker,
+		struct type *context_type) override;
+
+  enum exp_opcode opcode () const override
+  { return OP_FUNCALL; }
+};
+
+/* An Ada assignment operation.  */
+class ada_assign_operation
+  : public assign_operation
+{
+public:
+
+  using assign_operation::assign_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return BINOP_ASSIGN; }
+
+  value *current ()
+  { return m_current; }
+
+  /* A helper function for the parser to evaluate just the LHS of the
+     assignment.  */
+  value *eval_for_resolution (struct expression *exp)
+  {
+    return std::get<0> (m_storage)->evaluate (nullptr, exp,
+					      EVAL_AVOID_SIDE_EFFECTS);
+  }
+
+  /* The parser must construct the assignment node before parsing the
+     RHS, so that '@' can access the assignment, so this helper
+     function is needed to set the RHS after construction.  */
+  void set_rhs (operation_up rhs)
+  {
+    std::get<1> (m_storage) = std::move (rhs);
+  }
+
+private:
+
+  /* Temporary storage for the value of the left-hand-side.  */
+  value *m_current = nullptr;
+};
+
+/* Implement the Ada target name symbol ('@').  This is used to refer
+   to the LHS of an assignment from the RHS.  */
+class ada_target_operation : public operation
+{
+public:
+
+  explicit ada_target_operation (ada_assign_operation *lhs)
+    : m_lhs (lhs)
+  { }
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    if (noside == EVAL_AVOID_SIDE_EFFECTS)
+      return m_lhs->eval_for_resolution (exp);
+    return m_lhs->current ();
+  }
+
+  enum exp_opcode opcode () const override
+  {
+    /* It doesn't really matter.  */
+    return OP_VAR_VALUE;
+  }
+
+  void dump (struct ui_file *stream, int depth) const override
+  {
+    gdb_printf (stream, _("%*sAda target symbol '@'\n"), depth, "");
+  }
+
+private:
+
+  /* The left hand side of the assignment.  */
+  ada_assign_operation *m_lhs;
+};
+
+/* This abstract class represents a single component in an Ada
+   aggregate assignment.  */
+class ada_component
+{
+public:
+
+  /* Assign to LHS, which is part of CONTAINER.  EXP is the expression
+     being evaluated.  INDICES, LOW, and HIGH indicate which
+     sub-components have already been assigned; INDICES should be
+     updated by this call.  */
+  virtual void assign (struct value *container,
+		       struct value *lhs, struct expression *exp,
+		       std::vector<LONGEST> &indices,
+		       LONGEST low, LONGEST high) = 0;
+
+  /* Same as operation::uses_objfile.  */
+  virtual bool uses_objfile (struct objfile *objfile) = 0;
+
+  /* Same as operation::dump.  */
+  virtual void dump (ui_file *stream, int depth) = 0;
+
+  virtual ~ada_component () = default;
+
+protected:
+
+  ada_component () = default;
+  DISABLE_COPY_AND_ASSIGN (ada_component);
+};
+
+/* Unique pointer specialization for Ada assignment components.  */
+typedef std::unique_ptr<ada_component> ada_component_up;
+
+/* An operation that holds a single component.  */
+class ada_aggregate_operation
+  : public tuple_holding_operation<ada_component_up>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  /* Assuming that LHS represents an lvalue having a record or array
+     type, evaluate an assignment of this aggregate's value to LHS.
+     CONTAINER is an lvalue containing LHS (possibly LHS itself).
+     Does not modify the inferior's memory, nor does it modify the
+     contents of LHS (unless == CONTAINER).  Returns the modified
+     CONTAINER.  */
+
+  value *assign_aggregate (struct value *container,
+			   struct value *lhs,
+			   struct expression *exp);
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    error (_("Aggregates only allowed on the right of an assignment"));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_AGGREGATE; }
+};
+
+/* A component holding a vector of other components to assign.  */
+class ada_aggregate_component : public ada_component
+{
+public:
+
+  explicit ada_aggregate_component (std::vector<ada_component_up> &&components)
+    : m_components (std::move (components))
+  {
+  }
+
+  void assign (struct value *container,
+	       struct value *lhs, struct expression *exp,
+	       std::vector<LONGEST> &indices,
+	       LONGEST low, LONGEST high) override;
+
+  bool uses_objfile (struct objfile *objfile) override;
+
+  void dump (ui_file *stream, int depth) override;
+
+private:
+
+  std::vector<ada_component_up> m_components;
+};
+
+/* A component that assigns according to a provided index (which is
+   relative to the "low" value).  */
+class ada_positional_component : public ada_component
+{
+public:
+
+  ada_positional_component (int index, operation_up &&op)
+    : m_index (index),
+      m_op (std::move (op))
+  {
+  }
+
+  void assign (struct value *container,
+	       struct value *lhs, struct expression *exp,
+	       std::vector<LONGEST> &indices,
+	       LONGEST low, LONGEST high) override;
+
+  bool uses_objfile (struct objfile *objfile) override;
+
+  void dump (ui_file *stream, int depth) override;
+
+private:
+
+  int m_index;
+  operation_up m_op;
+};
+
+/* A component which handles an "others" clause.  */
+class ada_others_component : public ada_component
+{
+public:
+
+  explicit ada_others_component (operation_up &&op)
+    : m_op (std::move (op))
+  {
+  }
+
+  void assign (struct value *container,
+	       struct value *lhs, struct expression *exp,
+	       std::vector<LONGEST> &indices,
+	       LONGEST low, LONGEST high) override;
+
+  bool uses_objfile (struct objfile *objfile) override;
+
+  void dump (ui_file *stream, int depth) override;
+
+private:
+
+  operation_up m_op;
+};
+
+/* An interface that represents an association that is used in
+   aggregate assignment.  */
+class ada_association
+{
+public:
+
+  /* Like ada_component::assign, but takes an operation as a
+     parameter.  The operation is evaluated and then assigned into LHS
+     according to the rules of the concrete implementation.  */
+  virtual void assign (struct value *container,
+		       struct value *lhs,
+		       struct expression *exp,
+		       std::vector<LONGEST> &indices,
+		       LONGEST low, LONGEST high,
+		       operation_up &op) = 0;
+
+  /* Same as operation::uses_objfile.  */
+  virtual bool uses_objfile (struct objfile *objfile) = 0;
+
+  /* Same as operation::dump.  */
+  virtual void dump (ui_file *stream, int depth) = 0;
+
+  virtual ~ada_association () = default;
+
+protected:
+
+  ada_association () = default;
+  DISABLE_COPY_AND_ASSIGN (ada_association);
+};
+
+/* Unique pointer specialization for Ada assignment associations.  */
+typedef std::unique_ptr<ada_association> ada_association_up;
+
+/* A component that holds a vector of associations and an operation.
+   The operation is re-evaluated for each choice.  */
+class ada_choices_component : public ada_component
+{
+public:
+
+  explicit ada_choices_component (operation_up &&op)
+    : m_op (std::move (op))
+  {
+  }
+
+  /* Set the vector of associations.  This is done separately from the
+     constructor because it was simpler for the implementation of the
+     parser.  */
+  void set_associations (std::vector<ada_association_up> &&assoc)
+  {
+    m_assocs = std::move (assoc);
+  }
+
+  void assign (struct value *container,
+	       struct value *lhs, struct expression *exp,
+	       std::vector<LONGEST> &indices,
+	       LONGEST low, LONGEST high) override;
+
+  bool uses_objfile (struct objfile *objfile) override;
+
+  void dump (ui_file *stream, int depth) override;
+
+private:
+
+  std::vector<ada_association_up> m_assocs;
+  operation_up m_op;
+};
+
+/* An association that uses a discrete range.  */
+class ada_discrete_range_association : public ada_association
+{
+public:
+
+  ada_discrete_range_association (operation_up &&low, operation_up &&high)
+    : m_low (std::move (low)),
+      m_high (std::move (high))
+  {
+  }
+
+  void assign (struct value *container,
+	       struct value *lhs, struct expression *exp,
+	       std::vector<LONGEST> &indices,
+	       LONGEST low, LONGEST high,
+	       operation_up &op) override;
+
+  bool uses_objfile (struct objfile *objfile) override;
+
+  void dump (ui_file *stream, int depth) override;
+
+private:
+
+  operation_up m_low;
+  operation_up m_high;
+};
+
+/* An association that uses a name.  The name may be an expression
+   that evaluates to an integer (for arrays), or an Ada string or
+   variable value operation.  */
+class ada_name_association : public ada_association
+{
+public:
+
+  explicit ada_name_association (operation_up val)
+    : m_val (std::move (val))
+  {
+  }
+
+  void assign (struct value *container,
+	       struct value *lhs, struct expression *exp,
+	       std::vector<LONGEST> &indices,
+	       LONGEST low, LONGEST high,
+	       operation_up &op) override;
+
+  bool uses_objfile (struct objfile *objfile) override;
+
+  void dump (ui_file *stream, int depth) override;
+
+private:
+
+  operation_up m_val;
+};
+
+/* A character constant expression.  This is a separate operation so
+   that it can participate in resolution, so that TYPE'(CST) can
+   work correctly for enums with character enumerators.  */
+class ada_char_operation : public long_const_operation,
+			   public ada_resolvable
+{
+public:
+
+  using long_const_operation::long_const_operation;
+
+  bool resolve (struct expression *exp,
+		bool deprocedure_p,
+		bool parse_completion,
+		innermost_block_tracker *tracker,
+		struct type *context_type) override
+  {
+    /* This should never be called, because this class also implements
+       'replace'.  */
+    gdb_assert_not_reached ("unexpected call");
+  }
+
+  operation_up replace (operation_up &&owner,
+			struct expression *exp,
+			bool deprocedure_p,
+			bool parse_completion,
+			innermost_block_tracker *tracker,
+			struct type *context_type) override;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+};
+
+class ada_concat_operation : public concat_operation
+{
+public:
+
+  using concat_operation::concat_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+};
+
+} /* namespace expr */
+
+#endif /* ADA_EXP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-exp.y ./gdb/ada-exp.y
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-exp.y	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ada-exp.y	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* YACC parser for Ada expressions, for GDB.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -42,11 +42,9 @@
 #include "parser-defs.h"
 #include "language.h"
 #include "ada-lang.h"
-#include "bfd.h" /* Required by objfiles.h.  */
-#include "symfile.h" /* Required by objfiles.h.  */
-#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
 #include "frame.h"
 #include "block.h"
+#include "ada-exp.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 
@@ -67,11 +65,13 @@ struct name_info {
 
 static struct parser_state *pstate = NULL;
 
-static struct stoken empty_stoken = { "", 0 };
+/* The original expression string.  */
+static const char *original_expr;
 
-/* If expression is in the context of TYPE'(...), then TYPE, else
- * NULL.  */
-static struct type *type_qualifier;
+/* We don't have a good way to manage non-POD data in Yacc, so store
+   values here.  The storage here is only valid for the duration of
+   the parse.  */
+static std::vector<std::unique_ptr<gdb_mpz>> int_storage;
 
 int yyparse (void);
 
@@ -87,32 +87,340 @@ static void write_object_renaming (struc
 
 static struct type* write_var_or_type (struct parser_state *,
 				       const struct block *, struct stoken);
+static struct type *write_var_or_type_completion (struct parser_state *,
+						  const struct block *,
+						  struct stoken);
 
 static void write_name_assoc (struct parser_state *, struct stoken);
 
-static void write_exp_op_with_string (struct parser_state *, enum exp_opcode,
-				      struct stoken);
-
 static const struct block *block_lookup (const struct block *, const char *);
 
-static LONGEST convert_char_literal (struct type *, LONGEST);
-
 static void write_ambiguous_var (struct parser_state *,
-				 const struct block *, char *, int);
+				 const struct block *, const char *, int);
 
-static struct type *type_int (struct parser_state *);
+static struct type *type_for_char (struct parser_state *, ULONGEST);
 
-static struct type *type_long (struct parser_state *);
+static struct type *type_system_address (struct parser_state *);
 
-static struct type *type_long_long (struct parser_state *);
+static std::string find_completion_bounds (struct parser_state *);
 
-static struct type *type_long_double (struct parser_state *);
+using namespace expr;
 
-static struct type *type_char (struct parser_state *);
+/* Handle Ada type resolution for OP.  DEPROCEDURE_P and CONTEXT_TYPE
+   are passed to the resolve method, if called.  */
+static operation_up
+resolve (operation_up &&op, bool deprocedure_p, struct type *context_type)
+{
+  operation_up result = std::move (op);
+  ada_resolvable *res = dynamic_cast<ada_resolvable *> (result.get ());
+  if (res != nullptr)
+    return res->replace (std::move (result),
+			 pstate->expout.get (),
+			 deprocedure_p,
+			 pstate->parse_completion,
+			 pstate->block_tracker,
+			 context_type);
+  return result;
+}
 
-static struct type *type_boolean (struct parser_state *);
+/* Like parser_state::pop, but handles Ada type resolution.
+   DEPROCEDURE_P and CONTEXT_TYPE are passed to the resolve method, if
+   called.  */
+static operation_up
+ada_pop (bool deprocedure_p = true, struct type *context_type = nullptr)
+{
+  /* Of course it's ok to call parser_state::pop here... */
+  return resolve (pstate->pop (), deprocedure_p, context_type);
+}
 
-static struct type *type_system_address (struct parser_state *);
+/* Like parser_state::wrap, but use ada_pop to pop the value.  */
+template<typename T>
+void
+ada_wrap ()
+{
+  operation_up arg = ada_pop ();
+  pstate->push_new<T> (std::move (arg));
+}
+
+/* Create and push an address-of operation, as appropriate for Ada.
+   If TYPE is not NULL, the resulting operation will be wrapped in a
+   cast to TYPE.  */
+static void
+ada_addrof (struct type *type = nullptr)
+{
+  operation_up arg = ada_pop (false);
+  operation_up addr = make_operation<unop_addr_operation> (std::move (arg));
+  operation_up wrapped
+    = make_operation<ada_wrapped_operation> (std::move (addr));
+  if (type != nullptr)
+    wrapped = make_operation<unop_cast_operation> (std::move (wrapped), type);
+  pstate->push (std::move (wrapped));
+}
+
+/* Handle operator overloading.  Either returns a function all
+   operation wrapping the arguments, or it returns null, leaving the
+   caller to construct the appropriate operation.  If RHS is null, a
+   unary operator is assumed.  */
+static operation_up
+maybe_overload (enum exp_opcode op, operation_up &lhs, operation_up &rhs)
+{
+  struct value *args[2];
+
+  int nargs = 1;
+  args[0] = lhs->evaluate (nullptr, pstate->expout.get (),
+			   EVAL_AVOID_SIDE_EFFECTS);
+  if (rhs == nullptr)
+    args[1] = nullptr;
+  else
+    {
+      args[1] = rhs->evaluate (nullptr, pstate->expout.get (),
+			       EVAL_AVOID_SIDE_EFFECTS);
+      ++nargs;
+    }
+
+  block_symbol fn = ada_find_operator_symbol (op, pstate->parse_completion,
+					      nargs, args);
+  if (fn.symbol == nullptr)
+    return {};
+
+  if (symbol_read_needs_frame (fn.symbol))
+    pstate->block_tracker->update (fn.block, INNERMOST_BLOCK_FOR_SYMBOLS);
+  operation_up callee = make_operation<ada_var_value_operation> (fn);
+
+  std::vector<operation_up> argvec;
+  argvec.push_back (std::move (lhs));
+  if (rhs != nullptr)
+    argvec.push_back (std::move (rhs));
+  return make_operation<ada_funcall_operation> (std::move (callee),
+						std::move (argvec));
+}
+
+/* Like parser_state::wrap, but use ada_pop to pop the value, and
+   handle unary overloading.  */
+template<typename T>
+void
+ada_wrap_overload (enum exp_opcode op)
+{
+  operation_up arg = ada_pop ();
+  operation_up empty;
+
+  operation_up call = maybe_overload (op, arg, empty);
+  if (call == nullptr)
+    call = make_operation<T> (std::move (arg));
+  pstate->push (std::move (call));
+}
+
+/* A variant of parser_state::wrap2 that uses ada_pop to pop both
+   operands, and then pushes a new Ada-wrapped operation of the
+   template type T.  */
+template<typename T>
+void
+ada_un_wrap2 (enum exp_opcode op)
+{
+  operation_up rhs = ada_pop ();
+  operation_up lhs = ada_pop ();
+
+  operation_up wrapped = maybe_overload (op, lhs, rhs);
+  if (wrapped == nullptr)
+    {
+      wrapped = make_operation<T> (std::move (lhs), std::move (rhs));
+      wrapped = make_operation<ada_wrapped_operation> (std::move (wrapped));
+    }
+  pstate->push (std::move (wrapped));
+}
+
+/* A variant of parser_state::wrap2 that uses ada_pop to pop both
+   operands.  Unlike ada_un_wrap2, ada_wrapped_operation is not
+   used.  */
+template<typename T>
+void
+ada_wrap2 (enum exp_opcode op)
+{
+  operation_up rhs = ada_pop ();
+  operation_up lhs = ada_pop ();
+  operation_up call = maybe_overload (op, lhs, rhs);
+  if (call == nullptr)
+    call = make_operation<T> (std::move (lhs), std::move (rhs));
+  pstate->push (std::move (call));
+}
+
+/* A variant of parser_state::wrap2 that uses ada_pop to pop both
+   operands.  OP is also passed to the constructor of the new binary
+   operation.  */
+template<typename T>
+void
+ada_wrap_op (enum exp_opcode op)
+{
+  operation_up rhs = ada_pop ();
+  operation_up lhs = ada_pop ();
+  operation_up call = maybe_overload (op, lhs, rhs);
+  if (call == nullptr)
+    call = make_operation<T> (op, std::move (lhs), std::move (rhs));
+  pstate->push (std::move (call));
+}
+
+/* Pop three operands using ada_pop, then construct a new ternary
+   operation of type T and push it.  */
+template<typename T>
+void
+ada_wrap3 ()
+{
+  operation_up rhs = ada_pop ();
+  operation_up mid = ada_pop ();
+  operation_up lhs = ada_pop ();
+  pstate->push_new<T> (std::move (lhs), std::move (mid), std::move (rhs));
+}
+
+/* Pop NARGS operands, then a callee operand, and use these to
+   construct and push a new Ada function call operation.  */
+static void
+ada_funcall (int nargs)
+{
+  /* We use the ordinary pop here, because we're going to do
+     resolution in a separate step, in order to handle array
+     indices.  */
+  std::vector<operation_up> args = pstate->pop_vector (nargs);
+  /* Call parser_state::pop here, because we don't want to
+     function-convert the callee slot of a call we're already
+     constructing.  */
+  operation_up callee = pstate->pop ();
+
+  ada_var_value_operation *vvo
+    = dynamic_cast<ada_var_value_operation *> (callee.get ());
+  int array_arity = 0;
+  struct type *callee_t = nullptr;
+  if (vvo == nullptr
+      || vvo->get_symbol ()->domain () != UNDEF_DOMAIN)
+    {
+      struct value *callee_v = callee->evaluate (nullptr,
+						 pstate->expout.get (),
+						 EVAL_AVOID_SIDE_EFFECTS);
+      callee_t = ada_check_typedef (callee_v->type ());
+      array_arity = ada_array_arity (callee_t);
+    }
+
+  for (int i = 0; i < nargs; ++i)
+    {
+      struct type *subtype = nullptr;
+      if (i < array_arity)
+	subtype = ada_index_type (callee_t, i + 1, "array type");
+      args[i] = resolve (std::move (args[i]), true, subtype);
+    }
+
+  std::unique_ptr<ada_funcall_operation> funcall
+    (new ada_funcall_operation (std::move (callee), std::move (args)));
+  funcall->resolve (pstate->expout.get (), true, pstate->parse_completion,
+		    pstate->block_tracker, nullptr);
+  pstate->push (std::move (funcall));
+}
+
+/* The components being constructed during this parse.  */
+static std::vector<ada_component_up> components;
+
+/* Create a new ada_component_up of the indicated type and arguments,
+   and push it on the global 'components' vector.  */
+template<typename T, typename... Arg>
+void
+push_component (Arg... args)
+{
+  components.emplace_back (new T (std::forward<Arg> (args)...));
+}
+
+/* Examine the final element of the 'components' vector, and return it
+   as a pointer to an ada_choices_component.  The caller is
+   responsible for ensuring that the final element is in fact an
+   ada_choices_component.  */
+static ada_choices_component *
+choice_component ()
+{
+  ada_component *last = components.back ().get ();
+  return gdb::checked_static_cast<ada_choices_component *> (last);
+}
+
+/* Pop the most recent component from the global stack, and return
+   it.  */
+static ada_component_up
+pop_component ()
+{
+  ada_component_up result = std::move (components.back ());
+  components.pop_back ();
+  return result;
+}
+
+/* Pop the N most recent components from the global stack, and return
+   them in a vector.  */
+static std::vector<ada_component_up>
+pop_components (int n)
+{
+  std::vector<ada_component_up> result (n);
+  for (int i = 1; i <= n; ++i)
+    result[n - i] = pop_component ();
+  return result;
+}
+
+/* The associations being constructed during this parse.  */
+static std::vector<ada_association_up> associations;
+
+/* Create a new ada_association_up of the indicated type and
+   arguments, and push it on the global 'associations' vector.  */
+template<typename T, typename... Arg>
+void
+push_association (Arg... args)
+{
+  associations.emplace_back (new T (std::forward<Arg> (args)...));
+}
+
+/* Pop the most recent association from the global stack, and return
+   it.  */
+static ada_association_up
+pop_association ()
+{
+  ada_association_up result = std::move (associations.back ());
+  associations.pop_back ();
+  return result;
+}
+
+/* Pop the N most recent associations from the global stack, and
+   return them in a vector.  */
+static std::vector<ada_association_up>
+pop_associations (int n)
+{
+  std::vector<ada_association_up> result (n);
+  for (int i = 1; i <= n; ++i)
+    result[n - i] = pop_association ();
+  return result;
+}
+
+/* Expression completer for attributes.  */
+struct ada_tick_completer : public expr_completion_base
+{
+  explicit ada_tick_completer (std::string &&name)
+    : m_name (std::move (name))
+  {
+  }
+
+  bool complete (struct expression *exp,
+		 completion_tracker &tracker) override;
+
+private:
+
+  std::string m_name;
+};
+
+/* Make a new ada_tick_completer and wrap it in a unique pointer.  */
+static std::unique_ptr<expr_completion_base>
+make_tick_completer (struct stoken tok)
+{
+  return (std::unique_ptr<expr_completion_base>
+	  (new ada_tick_completer (std::string (tok.ptr, tok.length))));
+}
+
+/* A convenience typedef.  */
+typedef std::unique_ptr<ada_assign_operation> ada_assign_up;
+
+/* The stack of currently active assignment expressions.  This is used
+   to implement '@', the target name symbol.  */
+static std::vector<ada_assign_up> assignments;
 
 %}
 
@@ -120,10 +428,14 @@ static struct type *type_system_address
   {
     LONGEST lval;
     struct {
-      LONGEST val;
+      const gdb_mpz *val;
       struct type *type;
     } typed_val;
     struct {
+      LONGEST val;
+      struct type *type;
+    } typed_char;
+    struct {
       gdb_byte val[16];
       struct type *type;
     } typed_val_float;
@@ -135,20 +447,17 @@ static struct type *type_system_address
 
 %type <lval> positional_list component_groups component_associations
 %type <lval> aggregate_component_list 
-%type <tval> var_or_type
+%type <tval> var_or_type type_prefix opt_type_prefix
 
-%token <typed_val> INT NULL_PTR CHARLIT
+%token <typed_val> INT NULL_PTR
+%token <typed_char> CHARLIT
 %token <typed_val_float> FLOAT
 %token TRUEKEYWORD FALSEKEYWORD
 %token COLONCOLON
-%token <sval> STRING NAME DOT_ID 
+%token <sval> STRING NAME DOT_ID TICK_COMPLETE DOT_COMPLETE NAME_COMPLETE
 %type <bval> block
 %type <lval> arglist tick_arglist
 
-%type <tval> save_qualifier
-
-%token DOT_ALL
-
 /* Special type cases, put in to allow the parser to distinguish different
    legal basetypes.  */
 %token <sval> DOLLAR_VARIABLE
@@ -172,10 +481,11 @@ static struct type *type_system_address
 %right TICK_ACCESS TICK_ADDRESS TICK_FIRST TICK_LAST TICK_LENGTH
 %right TICK_MAX TICK_MIN TICK_MODULUS
 %right TICK_POS TICK_RANGE TICK_SIZE TICK_TAG TICK_VAL
+%right TICK_COMPLETE TICK_ENUM_REP TICK_ENUM_VAL
  /* The following are right-associative only so that reductions at this
     precedence have lower precedence than '.' and '('.  The syntax still
     forces a.b.c, e.g., to be LEFT-associated.  */
-%right '.' '(' '[' DOT_ID DOT_ALL
+%right '.' '(' '[' DOT_ID DOT_COMPLETE
 
 %token NEW OTHERS
 
@@ -188,67 +498,92 @@ start   :	exp1
 /* Expressions, including the sequencing operator.  */
 exp1	:	exp
 	|	exp1 ';' exp
-			{ write_exp_elt_opcode (pstate, BINOP_COMMA); }
-	| 	primary ASSIGN exp   /* Extension for convenience */
-			{ write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+			{ ada_wrap2<comma_operation> (BINOP_COMMA); }
+	| 	primary ASSIGN
+			{
+			  assignments.emplace_back
+			    (new ada_assign_operation (ada_pop (), nullptr));
+			}
+		exp   /* Extension for convenience */
+			{
+			  ada_assign_up assign
+			    = std::move (assignments.back ());
+			  assignments.pop_back ();
+			  value *lhs_val = (assign->eval_for_resolution
+					    (pstate->expout.get ()));
+
+			  operation_up rhs = pstate->pop ();
+			  rhs = resolve (std::move (rhs), true,
+					 lhs_val->type ());
+
+			  assign->set_rhs (std::move (rhs));
+			  pstate->push (std::move (assign));
+			}
 	;
 
 /* Expressions, not including the sequencing operator.  */
-primary :	primary DOT_ALL
-			{ write_exp_elt_opcode (pstate, UNOP_IND); }
-	;
 
 primary :	primary DOT_ID
-			{ write_exp_op_with_string (pstate, STRUCTOP_STRUCT,
-						    $2); }
+			{
+			  if (strcmp ($2.ptr, "all") == 0)
+			    ada_wrap<ada_unop_ind_operation> ();
+			  else
+			    {
+			      operation_up arg = ada_pop ();
+			      pstate->push_new<ada_structop_operation>
+				(std::move (arg), copy_name ($2));
+			    }
+			}
 	;
 
-primary :	primary '(' arglist ')'
+primary :	primary DOT_COMPLETE
 			{
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate, $3);
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-		        }
+			  /* This is done even for ".all", because
+			     that might be a prefix.  */
+			  operation_up arg = ada_pop ();
+			  ada_structop_operation *str_op
+			    = (new ada_structop_operation
+			       (std::move (arg), copy_name ($2)));
+			  str_op->set_prefix (find_completion_bounds (pstate));
+			  pstate->push (operation_up (str_op));
+			  pstate->mark_struct_expression (str_op);
+			}
+	;
+
+primary :	primary '(' arglist ')'
+			{ ada_funcall ($3); }
 	|	var_or_type '(' arglist ')'
 			{
 			  if ($1 != NULL)
 			    {
 			      if ($3 != 1)
 				error (_("Invalid conversion"));
-			      write_exp_elt_opcode (pstate, UNOP_CAST);
-			      write_exp_elt_type (pstate, $1);
-			      write_exp_elt_opcode (pstate, UNOP_CAST);
+			      operation_up arg = ada_pop ();
+			      pstate->push_new<unop_cast_operation>
+				(std::move (arg), $1);
 			    }
 			  else
-			    {
-			      write_exp_elt_opcode (pstate, OP_FUNCALL);
-			      write_exp_elt_longcst (pstate, $3);
-			      write_exp_elt_opcode (pstate, OP_FUNCALL);
-			    }
+			    ada_funcall ($3);
 			}
 	;
 
-primary :	var_or_type '\'' save_qualifier { type_qualifier = $1; } 
-		   '(' exp ')'
+primary :	var_or_type '\'' '(' exp ')'
 			{
 			  if ($1 == NULL)
 			    error (_("Type required for qualification"));
-			  write_exp_elt_opcode (pstate, UNOP_QUAL);
-			  write_exp_elt_type (pstate, $1);
-			  write_exp_elt_opcode (pstate, UNOP_QUAL);
-			  type_qualifier = $3;
+			  operation_up arg = ada_pop (true,
+						      check_typedef ($1));
+			  pstate->push_new<ada_qual_operation>
+			    (std::move (arg), $1);
 			}
 	;
 
-save_qualifier : 	{ $$ = type_qualifier; }
-	;
-
 primary :
 		primary '(' simple_exp DOTDOT simple_exp ')'
-			{ write_exp_elt_opcode (pstate, TERNOP_SLICE); }
+			{ ada_wrap3<ada_ternop_slice_operation> (); }
 	|	var_or_type '(' simple_exp DOTDOT simple_exp ')'
 			{ if ($1 == NULL) 
-                            write_exp_elt_opcode (pstate, TERNOP_SLICE);
+			    ada_wrap3<ada_ternop_slice_operation> ();
 			  else
 			    error (_("Cannot slice a type"));
 			}
@@ -267,38 +602,64 @@ primary :	'(' exp1 ')'	{ }
 
 primary :	var_or_type	%prec VAR
 			{ if ($1 != NULL)
-			    {
-			      write_exp_elt_opcode (pstate, OP_TYPE);
-			      write_exp_elt_type (pstate, $1);
-			      write_exp_elt_opcode (pstate, OP_TYPE);
-			    }
+			    pstate->push_new<type_operation> ($1);
 			}
 	;
 
 primary :	DOLLAR_VARIABLE /* Various GDB extensions */
-			{ write_dollar_variable (pstate, $1); }
+			{ pstate->push_dollar ($1); }
 	;
 
 primary :     	aggregate
-        ;        
+			{
+			  pstate->push_new<ada_aggregate_operation>
+			    (pop_component ());
+			}
+	;        
+
+primary :	'@'
+			{
+			  if (assignments.empty ())
+			    error (_("the target name symbol ('@') may only "
+				     "appear in an assignment context"));
+			  ada_assign_operation *current
+			    = assignments.back ().get ();
+			  pstate->push_new<ada_target_operation> (current);
+			}
+	;
 
 simple_exp : 	primary
 	;
 
 simple_exp :	'-' simple_exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_NEG); }
+			{ ada_wrap_overload<ada_neg_operation> (UNOP_NEG); }
 	;
 
 simple_exp :	'+' simple_exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_PLUS); }
+			{
+			  operation_up arg = ada_pop ();
+			  operation_up empty;
+
+			  /* If an overloaded operator was found, use
+			     it.  Otherwise, unary + has no effect and
+			     the argument can be pushed instead.  */
+			  operation_up call = maybe_overload (UNOP_PLUS, arg,
+							      empty);
+			  if (call != nullptr)
+			    arg = std::move (call);
+			  pstate->push (std::move (arg));
+			}
 	;
 
 simple_exp :	NOT simple_exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+			{
+			  ada_wrap_overload<unary_logical_not_operation>
+			    (UNOP_LOGICAL_NOT);
+			}
 	;
 
 simple_exp :    ABS simple_exp	   %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_ABS); }
+			{ ada_wrap_overload<ada_abs_operation> (UNOP_ABS); }
 	;
 
 arglist	:		{ $$ = 0; }
@@ -319,111 +680,114 @@ primary :	'{' var_or_type '}' primary  %
 			{ 
 			  if ($2 == NULL)
 			    error (_("Type required within braces in coercion"));
-			  write_exp_elt_opcode (pstate, UNOP_MEMVAL);
-			  write_exp_elt_type (pstate, $2);
-			  write_exp_elt_opcode (pstate, UNOP_MEMVAL);
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<unop_memval_operation>
+			    (std::move (arg), $2);
 			}
 	;
 
 /* Binary operators in order of decreasing precedence.  */
 
 simple_exp 	: 	simple_exp STARSTAR simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_EXP); }
+			{ ada_wrap2<ada_binop_exp_operation> (BINOP_EXP); }
 	;
 
 simple_exp	:	simple_exp '*' simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_MUL); }
+			{ ada_wrap2<ada_binop_mul_operation> (BINOP_MUL); }
 	;
 
 simple_exp	:	simple_exp '/' simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_DIV); }
+			{ ada_wrap2<ada_binop_div_operation> (BINOP_DIV); }
 	;
 
 simple_exp	:	simple_exp REM simple_exp /* May need to be fixed to give correct Ada REM */
-			{ write_exp_elt_opcode (pstate, BINOP_REM); }
+			{ ada_wrap2<ada_binop_rem_operation> (BINOP_REM); }
 	;
 
 simple_exp	:	simple_exp MOD simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_MOD); }
+			{ ada_wrap2<ada_binop_mod_operation> (BINOP_MOD); }
 	;
 
 simple_exp	:	simple_exp '@' simple_exp	/* GDB extension */
-			{ write_exp_elt_opcode (pstate, BINOP_REPEAT); }
+			{ ada_wrap2<repeat_operation> (BINOP_REPEAT); }
 	;
 
 simple_exp	:	simple_exp '+' simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_ADD); }
+			{ ada_wrap_op<ada_binop_addsub_operation> (BINOP_ADD); }
 	;
 
 simple_exp	:	simple_exp '&' simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_CONCAT); }
+			{ ada_wrap2<ada_concat_operation> (BINOP_CONCAT); }
 	;
 
 simple_exp	:	simple_exp '-' simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_SUB); }
+			{ ada_wrap_op<ada_binop_addsub_operation> (BINOP_SUB); }
 	;
 
 relation :	simple_exp
 	;
 
 relation :	simple_exp '=' simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+			{ ada_wrap_op<ada_binop_equal_operation> (BINOP_EQUAL); }
 	;
 
 relation :	simple_exp NOTEQUAL simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+			{ ada_wrap_op<ada_binop_equal_operation> (BINOP_NOTEQUAL); }
 	;
 
 relation :	simple_exp LEQ simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_LEQ); }
+			{ ada_un_wrap2<leq_operation> (BINOP_LEQ); }
 	;
 
 relation :	simple_exp IN simple_exp DOTDOT simple_exp
-			{ write_exp_elt_opcode (pstate, TERNOP_IN_RANGE); }
-        |       simple_exp IN primary TICK_RANGE tick_arglist
-			{ write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS);
-			  write_exp_elt_longcst (pstate, (LONGEST) $5);
-			  write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS);
+			{ ada_wrap3<ada_ternop_range_operation> (); }
+	|       simple_exp IN primary TICK_RANGE tick_arglist
+			{
+			  operation_up rhs = ada_pop ();
+			  operation_up lhs = ada_pop ();
+			  pstate->push_new<ada_binop_in_bounds_operation>
+			    (std::move (lhs), std::move (rhs), $5);
 			}
  	|	simple_exp IN var_or_type	%prec TICK_ACCESS
 			{ 
 			  if ($3 == NULL)
 			    error (_("Right operand of 'in' must be type"));
-			  write_exp_elt_opcode (pstate, UNOP_IN_RANGE);
-		          write_exp_elt_type (pstate, $3);
-		          write_exp_elt_opcode (pstate, UNOP_IN_RANGE);
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_range_operation>
+			    (std::move (arg), $3);
 			}
 	|	simple_exp NOT IN simple_exp DOTDOT simple_exp
-			{ write_exp_elt_opcode (pstate, TERNOP_IN_RANGE);
-		          write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT);
-			}
-        |       simple_exp NOT IN primary TICK_RANGE tick_arglist
-			{ write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS);
-			  write_exp_elt_longcst (pstate, (LONGEST) $6);
-			  write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS);
-		          write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT);
+			{ ada_wrap3<ada_ternop_range_operation> ();
+			  ada_wrap<unary_logical_not_operation> (); }
+	|       simple_exp NOT IN primary TICK_RANGE tick_arglist
+			{
+			  operation_up rhs = ada_pop ();
+			  operation_up lhs = ada_pop ();
+			  pstate->push_new<ada_binop_in_bounds_operation>
+			    (std::move (lhs), std::move (rhs), $6);
+			  ada_wrap<unary_logical_not_operation> ();
 			}
  	|	simple_exp NOT IN var_or_type	%prec TICK_ACCESS
 			{ 
 			  if ($4 == NULL)
 			    error (_("Right operand of 'in' must be type"));
-			  write_exp_elt_opcode (pstate, UNOP_IN_RANGE);
-		          write_exp_elt_type (pstate, $4);
-		          write_exp_elt_opcode (pstate, UNOP_IN_RANGE);
-		          write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT);
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_range_operation>
+			    (std::move (arg), $4);
+			  ada_wrap<unary_logical_not_operation> ();
 			}
 	;
 
 relation :	simple_exp GEQ simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_GEQ); }
+			{ ada_un_wrap2<geq_operation> (BINOP_GEQ); }
 	;
 
 relation :	simple_exp '<' simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_LESS); }
+			{ ada_un_wrap2<less_operation> (BINOP_LESS); }
 	;
 
 relation :	simple_exp '>' simple_exp
-			{ write_exp_elt_opcode (pstate, BINOP_GTR); }
+			{ ada_un_wrap2<gtr_operation> (BINOP_GTR); }
 	;
 
 exp	:	relation
@@ -436,37 +800,45 @@ exp	:	relation
 
 and_exp :
 		relation _AND_ relation 
-			{ write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+			{ ada_wrap2<ada_bitwise_and_operation>
+			    (BINOP_BITWISE_AND); }
 	|	and_exp _AND_ relation
-			{ write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+			{ ada_wrap2<ada_bitwise_and_operation>
+			    (BINOP_BITWISE_AND); }
 	;
 
 and_then_exp :
 	       relation _AND_ THEN relation
-			{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+			{ ada_wrap2<logical_and_operation>
+			    (BINOP_LOGICAL_AND); }
 	|	and_then_exp _AND_ THEN relation
-			{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
-        ;
+			{ ada_wrap2<logical_and_operation>
+			    (BINOP_LOGICAL_AND); }
+	;
 
 or_exp :
 		relation OR relation 
-			{ write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+			{ ada_wrap2<ada_bitwise_ior_operation>
+			    (BINOP_BITWISE_IOR); }
 	|	or_exp OR relation
-			{ write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+			{ ada_wrap2<ada_bitwise_ior_operation>
+			    (BINOP_BITWISE_IOR); }
 	;
 
 or_else_exp :
 	       relation OR ELSE relation
-			{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+			{ ada_wrap2<logical_or_operation> (BINOP_LOGICAL_OR); }
 	|      or_else_exp OR ELSE relation
-			{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
-        ;
+			{ ada_wrap2<logical_or_operation> (BINOP_LOGICAL_OR); }
+	;
 
 xor_exp :       relation XOR relation
-			{ write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+			{ ada_wrap2<ada_bitwise_xor_operation>
+			    (BINOP_BITWISE_XOR); }
 	|	xor_exp XOR relation
-			{ write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
-        ;
+			{ ada_wrap2<ada_bitwise_xor_operation>
+			    (BINOP_BITWISE_XOR); }
+	;
 
 /* Primaries can denote types (OP_TYPE).  In cases such as 
    primary TICK_ADDRESS, where a type would be invalid, it will be
@@ -477,99 +849,141 @@ xor_exp :       relation XOR relation
    aType'access evaluates to a type that evaluate_subexp attempts to 
    evaluate. */
 primary :	primary TICK_ACCESS
-			{ write_exp_elt_opcode (pstate, UNOP_ADDR); }
+			{ ada_addrof (); }
 	|	primary TICK_ADDRESS
-			{ write_exp_elt_opcode (pstate, UNOP_ADDR);
-			  write_exp_elt_opcode (pstate, UNOP_CAST);
-			  write_exp_elt_type (pstate,
-					      type_system_address (pstate));
-			  write_exp_elt_opcode (pstate, UNOP_CAST);
+			{ ada_addrof (type_system_address (pstate)); }
+	|	primary TICK_COMPLETE
+			{
+			  pstate->mark_completion (make_tick_completer ($2));
 			}
 	|	primary TICK_FIRST tick_arglist
-			{ write_int (pstate, $3, type_int (pstate));
-			  write_exp_elt_opcode (pstate, OP_ATR_FIRST); }
+			{
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_atr_operation>
+			    (std::move (arg), OP_ATR_FIRST, $3);
+			}
 	|	primary TICK_LAST tick_arglist
-			{ write_int (pstate, $3, type_int (pstate));
-			  write_exp_elt_opcode (pstate, OP_ATR_LAST); }
+			{
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_atr_operation>
+			    (std::move (arg), OP_ATR_LAST, $3);
+			}
 	| 	primary TICK_LENGTH tick_arglist
-			{ write_int (pstate, $3, type_int (pstate));
-			  write_exp_elt_opcode (pstate, OP_ATR_LENGTH); }
-        |       primary TICK_SIZE
-			{ write_exp_elt_opcode (pstate, OP_ATR_SIZE); }
+			{
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_atr_operation>
+			    (std::move (arg), OP_ATR_LENGTH, $3);
+			}
+	|       primary TICK_SIZE
+			{ ada_wrap<ada_atr_size_operation> (); }
 	|	primary TICK_TAG
-			{ write_exp_elt_opcode (pstate, OP_ATR_TAG); }
-        |       opt_type_prefix TICK_MIN '(' exp ',' exp ')'
-			{ write_exp_elt_opcode (pstate, OP_ATR_MIN); }
-        |       opt_type_prefix TICK_MAX '(' exp ',' exp ')'
-			{ write_exp_elt_opcode (pstate, OP_ATR_MAX); }
+			{ ada_wrap<ada_atr_tag_operation> (); }
+	|       opt_type_prefix TICK_MIN '(' exp ',' exp ')'
+			{ ada_wrap2<ada_binop_min_operation> (BINOP_MIN); }
+	|       opt_type_prefix TICK_MAX '(' exp ',' exp ')'
+			{ ada_wrap2<ada_binop_max_operation> (BINOP_MAX); }
 	| 	opt_type_prefix TICK_POS '(' exp ')'
-			{ write_exp_elt_opcode (pstate, OP_ATR_POS); }
+			{ ada_wrap<ada_pos_operation> (); }
 	|	type_prefix TICK_VAL '(' exp ')'
-			{ write_exp_elt_opcode (pstate, OP_ATR_VAL); }
+			{
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_atr_val_operation>
+			    ($1, std::move (arg));
+			}
+	|	type_prefix TICK_ENUM_REP '(' exp ')'
+			{
+			  operation_up arg = ada_pop (true, $1);
+			  pstate->push_new<ada_atr_enum_rep_operation>
+			    ($1, std::move (arg));
+			}
+	|	type_prefix TICK_ENUM_VAL '(' exp ')'
+			{
+			  operation_up arg = ada_pop (true, $1);
+			  pstate->push_new<ada_atr_enum_val_operation>
+			    ($1, std::move (arg));
+			}
 	|	type_prefix TICK_MODULUS
-			{ write_exp_elt_opcode (pstate, OP_ATR_MODULUS); }
+			{
+			  struct type *type_arg = check_typedef ($1);
+			  if (!ada_is_modular_type (type_arg))
+			    error (_("'modulus must be applied to modular type"));
+			  write_int (pstate, ada_modulus (type_arg),
+				     type_arg->target_type ());
+			}
 	;
 
 tick_arglist :			%prec '('
 			{ $$ = 1; }
 	| 	'(' INT ')'
-			{ $$ = $2.val; }
+			{ $$ = $2.val->as_integer<LONGEST> (); }
 	;
 
 type_prefix :
-                var_or_type
+		var_or_type
 			{ 
 			  if ($1 == NULL)
 			    error (_("Prefix must be type"));
-			  write_exp_elt_opcode (pstate, OP_TYPE);
-			  write_exp_elt_type (pstate, $1);
-			  write_exp_elt_opcode (pstate, OP_TYPE); }
+			  $$ = $1;
+			}
 	;
 
 opt_type_prefix :
 		type_prefix
+			{ $$ = $1; }
 	| 	/* EMPTY */
-			{ write_exp_elt_opcode (pstate, OP_TYPE);
-			  write_exp_elt_type (pstate,
-					  parse_type (pstate)->builtin_void);
-			  write_exp_elt_opcode (pstate, OP_TYPE); }
+			{ $$ = parse_type (pstate)->builtin_void; }
 	;
 
 
 primary	:	INT
-			{ write_int (pstate, (LONGEST) $1.val, $1.type); }
+			{
+			  pstate->push_new<long_const_operation> ($1.type, *$1.val);
+			  ada_wrap<ada_wrapped_operation> ();
+			}
 	;
 
 primary	:	CHARLIT
-                  { write_int (pstate,
-			       convert_char_literal (type_qualifier, $1.val),
-			       (type_qualifier == NULL) 
-			       ? $1.type : type_qualifier);
-		  }
+			{
+			  pstate->push_new<ada_char_operation> ($1.type, $1.val);
+			}
 	;
 
 primary	:	FLOAT
-			{ write_exp_elt_opcode (pstate, OP_FLOAT);
-			  write_exp_elt_type (pstate, $1.type);
-			  write_exp_elt_floatcst (pstate, $1.val);
-			  write_exp_elt_opcode (pstate, OP_FLOAT);
+			{
+			  float_data data;
+			  std::copy (std::begin ($1.val), std::end ($1.val),
+				     std::begin (data));
+			  pstate->push_new<float_const_operation>
+			    ($1.type, data);
+			  ada_wrap<ada_wrapped_operation> ();
 			}
 	;
 
 primary	:	NULL_PTR
-			{ write_int (pstate, 0, type_int (pstate)); }
+			{
+			  struct type *null_ptr_type
+			    = lookup_pointer_type (parse_type (pstate)->builtin_int0);
+			  write_int (pstate, 0, null_ptr_type);
+			}
 	;
 
 primary	:	STRING
 			{ 
-			  write_exp_op_with_string (pstate, OP_STRING, $1);
+			  pstate->push_new<ada_string_operation>
+			    (copy_name ($1));
 			}
 	;
 
 primary :	TRUEKEYWORD
-			{ write_int (pstate, 1, type_boolean (pstate)); }
-        |	FALSEKEYWORD
-			{ write_int (pstate, 0, type_boolean (pstate)); }
+			{
+			  write_int (pstate, 1,
+				     parse_type (pstate)->builtin_bool);
+			}
+	|	FALSEKEYWORD
+			{
+			  write_int (pstate, 0,
+				     parse_type (pstate)->builtin_bool);
+			}
 	;
 
 primary	: 	NEW NAME
@@ -578,13 +992,25 @@ primary	: 	NEW NAME
 
 var_or_type:	NAME   	    %prec VAR
 				{ $$ = write_var_or_type (pstate, NULL, $1); }
+	|	NAME_COMPLETE %prec VAR
+				{
+				  $$ = write_var_or_type_completion (pstate,
+								     NULL,
+								     $1);
+				}
 	|	block NAME  %prec VAR
-                                { $$ = write_var_or_type (pstate, $1, $2); }
+				{ $$ = write_var_or_type (pstate, $1, $2); }
+	|	block NAME_COMPLETE  %prec VAR
+				{
+				  $$ = write_var_or_type_completion (pstate,
+								     $1,
+								     $2);
+				}
 	|       NAME TICK_ACCESS 
 			{ 
 			  $$ = write_var_or_type (pstate, NULL, $1);
 			  if ($$ == NULL)
-			    write_exp_elt_opcode (pstate, UNOP_ADDR);
+			    ada_addrof ();
 			  else
 			    $$ = lookup_pointer_type ($$);
 			}
@@ -592,7 +1018,7 @@ var_or_type:	NAME   	    %prec VAR
 			{ 
 			  $$ = write_var_or_type (pstate, $1, $2);
 			  if ($$ == NULL)
-			    write_exp_elt_opcode (pstate, UNOP_ADDR);
+			    ada_addrof ();
 			  else
 			    $$ = lookup_pointer_type ($$);
 			}
@@ -608,18 +1034,20 @@ block   :       NAME COLONCOLON
 aggregate :
 		'(' aggregate_component_list ')'  
 			{
-			  write_exp_elt_opcode (pstate, OP_AGGREGATE);
-			  write_exp_elt_longcst (pstate, $2);
-			  write_exp_elt_opcode (pstate, OP_AGGREGATE);
-		        }
+			  std::vector<ada_component_up> components
+			    = pop_components ($2);
+
+			  push_component<ada_aggregate_component>
+			    (std::move (components));
+			}
 	;
 
 aggregate_component_list :
 		component_groups	 { $$ = $1; }
 	|	positional_list exp
-			{ write_exp_elt_opcode (pstate, OP_POSITIONAL);
-			  write_exp_elt_longcst (pstate, $1);
-			  write_exp_elt_opcode (pstate, OP_POSITIONAL);
+			{
+			  push_component<ada_positional_component>
+			    ($1, ada_pop ());
 			  $$ = $1 + 1;
 			}
 	|	positional_list component_groups
@@ -628,15 +1056,15 @@ aggregate_component_list :
 
 positional_list :
 		exp ','
-			{ write_exp_elt_opcode (pstate, OP_POSITIONAL);
-			  write_exp_elt_longcst (pstate, 0);
-			  write_exp_elt_opcode (pstate, OP_POSITIONAL);
+			{
+			  push_component<ada_positional_component>
+			    (0, ada_pop ());
 			  $$ = 1;
 			} 
 	|	positional_list exp ','
-			{ write_exp_elt_opcode (pstate, OP_POSITIONAL);
-			  write_exp_elt_longcst (pstate, $1);
-			  write_exp_elt_opcode (pstate, OP_POSITIONAL);
+			{
+			  push_component<ada_positional_component>
+			    ($1, ada_pop ());
 			  $$ = $1 + 1; 
 			}
 	;
@@ -649,16 +1077,17 @@ component_groups:
 	;
 
 others 	:	OTHERS ARROW exp
-			{ write_exp_elt_opcode (pstate, OP_OTHERS); }
+			{
+			  push_component<ada_others_component> (ada_pop ());
+			}
 	;
 
 component_group :
 		component_associations
 			{
-			  write_exp_elt_opcode (pstate, OP_CHOICES);
-			  write_exp_elt_longcst (pstate, $1);
-			  write_exp_elt_opcode (pstate, OP_CHOICES);
-		        }
+			  ada_choices_component *choices = choice_component ();
+			  choices->set_associations (pop_associations ($1));
+			}
 	;
 
 /* We use this somewhat obscure definition in order to handle NAME => and
@@ -667,36 +1096,60 @@ component_group :
    decisions until after the => or '|', we convert the ambiguity to a 
    resolved shift/reduce conflict. */
 component_associations :
-		NAME ARROW 
-			{ write_name_assoc (pstate, $1); }
-		    exp	{ $$ = 1; }
+		NAME ARROW exp
+			{
+			  push_component<ada_choices_component> (ada_pop ());
+			  write_name_assoc (pstate, $1);
+			  $$ = 1;
+			}
 	|	simple_exp ARROW exp
-			{ $$ = 1; }
-	|	simple_exp DOTDOT simple_exp ARROW 
-			{ write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE);
-			  write_exp_op_with_string (pstate, OP_NAME,
-						    empty_stoken);
-			}
-		    exp { $$ = 1; }
-	|	NAME '|' 
-		        { write_name_assoc (pstate, $1); }
-		    component_associations  { $$ = $4 + 1; }
-	|	simple_exp '|'  
-	            component_associations  { $$ = $3 + 1; }
-	|	simple_exp DOTDOT simple_exp '|'
-			{ write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE); }
-		    component_associations  { $$ = $6 + 1; }
+			{
+			  push_component<ada_choices_component> (ada_pop ());
+			  push_association<ada_name_association> (ada_pop ());
+			  $$ = 1;
+			}
+	|	simple_exp DOTDOT simple_exp ARROW exp
+			{
+			  push_component<ada_choices_component> (ada_pop ());
+			  operation_up rhs = ada_pop ();
+			  operation_up lhs = ada_pop ();
+			  push_association<ada_discrete_range_association>
+			    (std::move (lhs), std::move (rhs));
+			  $$ = 1;
+			}
+	|	NAME '|' component_associations
+			{
+			  write_name_assoc (pstate, $1);
+			  $$ = $3 + 1;
+			}
+	|	simple_exp '|' component_associations
+			{
+			  push_association<ada_name_association> (ada_pop ());
+			  $$ = $3 + 1;
+			}
+	|	simple_exp DOTDOT simple_exp '|' component_associations
+
+			{
+			  operation_up rhs = ada_pop ();
+			  operation_up lhs = ada_pop ();
+			  push_association<ada_discrete_range_association>
+			    (std::move (lhs), std::move (rhs));
+			  $$ = $5 + 1;
+			}
 	;
 
 /* Some extensions borrowed from C, for the benefit of those who find they
    can't get used to Ada notation in GDB.  */
 
 primary	:	'*' primary		%prec '.'
-			{ write_exp_elt_opcode (pstate, UNOP_IND); }
+			{ ada_wrap<ada_unop_ind_operation> (); }
 	|	'&' primary		%prec '.'
-			{ write_exp_elt_opcode (pstate, UNOP_ADDR); }
+			{ ada_addrof (); }
 	|	primary '[' exp ']'
-			{ write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+			{
+			  ada_wrap2<subscript_operation> (BINOP_SUBSCRIPT);
+			  ada_wrap<ada_wrapped_operation> ();
+			}
 	;
 
 %%
@@ -732,36 +1185,46 @@ ada_parse (struct parser_state *par_stat
   scoped_restore pstate_restore = make_scoped_restore (&pstate);
   gdb_assert (par_state != NULL);
   pstate = par_state;
+  original_expr = par_state->lexptr;
+
+  scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
+							par_state->debug);
 
   lexer_init (yyin);		/* (Re-)initialize lexer.  */
-  type_qualifier = NULL;
   obstack_free (&temp_parse_space, NULL);
   obstack_init (&temp_parse_space);
+  components.clear ();
+  associations.clear ();
+  int_storage.clear ();
+  assignments.clear ();
 
-  return yyparse ();
+  int result = yyparse ();
+  if (!result)
+    {
+      struct type *context_type = nullptr;
+      if (par_state->void_context_p)
+	context_type = parse_type (par_state)->builtin_void;
+      pstate->set_operation (ada_pop (true, context_type));
+    }
+  return result;
 }
 
 static void
 yyerror (const char *msg)
 {
-  error (_("Error in expression, near `%s'."), pstate->lexptr);
+  pstate->parse_error (msg);
 }
 
 /* Emit expression to access an instance of SYM, in block BLOCK (if
    non-NULL).  */
 
 static void
-write_var_from_sym (struct parser_state *par_state,
-		    const struct block *block,
-		    struct symbol *sym)
-{
-  if (symbol_read_needs_frame (sym))
-    par_state->block_tracker->update (block, INNERMOST_BLOCK_FOR_SYMBOLS);
-
-  write_exp_elt_opcode (par_state, OP_VAR_VALUE);
-  write_exp_elt_block (par_state, block);
-  write_exp_elt_sym (par_state, sym);
-  write_exp_elt_opcode (par_state, OP_VAR_VALUE);
+write_var_from_sym (struct parser_state *par_state, block_symbol sym)
+{
+  if (symbol_read_needs_frame (sym.symbol))
+    par_state->block_tracker->update (sym.block, INNERMOST_BLOCK_FOR_SYMBOLS);
+
+  par_state->push_new<ada_var_value_operation> (sym);
 }
 
 /* Write integer or boolean constant ARG of type TYPE.  */
@@ -769,32 +1232,20 @@ write_var_from_sym (struct parser_state
 static void
 write_int (struct parser_state *par_state, LONGEST arg, struct type *type)
 {
-  write_exp_elt_opcode (par_state, OP_LONG);
-  write_exp_elt_type (par_state, type);
-  write_exp_elt_longcst (par_state, arg);
-  write_exp_elt_opcode (par_state, OP_LONG);
+  pstate->push_new<long_const_operation> (type, arg);
+  ada_wrap<ada_wrapped_operation> ();
 }
 
-/* Write an OPCODE, string, OPCODE sequence to the current expression.  */
-static void
-write_exp_op_with_string (struct parser_state *par_state,
-			  enum exp_opcode opcode, struct stoken token)
-{
-  write_exp_elt_opcode (par_state, opcode);
-  write_exp_string (par_state, token);
-  write_exp_elt_opcode (par_state, opcode);
-}
-  
 /* Emit expression corresponding to the renamed object named 
- * designated by RENAMED_ENTITY[0 .. RENAMED_ENTITY_LEN-1] in the
- * context of ORIG_LEFT_CONTEXT, to which is applied the operations
- * encoded by RENAMING_EXPR.  MAX_DEPTH is the maximum number of
- * cascaded renamings to allow.  If ORIG_LEFT_CONTEXT is null, it
- * defaults to the currently selected block. ORIG_SYMBOL is the 
- * symbol that originally encoded the renaming.  It is needed only
- * because its prefix also qualifies any index variables used to index
- * or slice an array.  It should not be necessary once we go to the
- * new encoding entirely (FIXME pnh 7/20/2007).  */
+   designated by RENAMED_ENTITY[0 .. RENAMED_ENTITY_LEN-1] in the
+   context of ORIG_LEFT_CONTEXT, to which is applied the operations
+   encoded by RENAMING_EXPR.  MAX_DEPTH is the maximum number of
+   cascaded renamings to allow.  If ORIG_LEFT_CONTEXT is null, it
+   defaults to the currently selected block. ORIG_SYMBOL is the 
+   symbol that originally encoded the renaming.  It is needed only
+   because its prefix also qualifies any index variables used to index
+   or slice an array.  It should not be necessary once we go to the
+   new encoding entirely (FIXME pnh 7/20/2007).  */
 
 static void
 write_object_renaming (struct parser_state *par_state,
@@ -814,10 +1265,10 @@ write_object_renaming (struct parser_sta
 
   name = obstack_strndup (&temp_parse_space, renamed_entity,
 			  renamed_entity_len);
-  ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN, &sym_info);
+  ada_lookup_encoded_symbol (name, orig_left_context, SEARCH_VFT, &sym_info);
   if (sym_info.symbol == NULL)
     error (_("Could not find renamed variable: %s"), ada_decode (name).c_str ());
-  else if (SYMBOL_CLASS (sym_info.symbol) == LOC_TYPEDEF)
+  else if (sym_info.symbol->aclass () == LOC_TYPEDEF)
     /* We have a renaming of an old-style renaming symbol.  Don't
        trust the block information.  */
     sym_info.block = orig_left_context;
@@ -832,7 +1283,7 @@ write_object_renaming (struct parser_sta
 				&inner_renaming_expr))
       {
       case ADA_NOT_RENAMING:
-	write_var_from_sym (par_state, sym_info.block, sym_info.symbol);
+	write_var_from_sym (par_state, sym_info);
 	break;
       case ADA_OBJECT_RENAMING:
 	write_object_renaming (par_state, sym_info.block,
@@ -851,12 +1302,12 @@ write_object_renaming (struct parser_sta
 
       switch (*renaming_expr) {
       case 'A':
-        renaming_expr += 1;
-        write_exp_elt_opcode (par_state, UNOP_IND);
-        break;
+	renaming_expr += 1;
+	ada_wrap<ada_unop_ind_operation> ();
+	break;
       case 'L':
 	slice_state = LOWER_BOUND;
-	/* FALLTHROUGH */
+	[[fallthrough]];
       case 'S':
 	renaming_expr += 1;
 	if (isdigit (*renaming_expr))
@@ -866,10 +1317,7 @@ write_object_renaming (struct parser_sta
 	    if (next == renaming_expr)
 	      goto BadEncoding;
 	    renaming_expr = next;
-	    write_exp_elt_opcode (par_state, OP_LONG);
-	    write_exp_elt_type (par_state, type_int (par_state));
-	    write_exp_elt_longcst (par_state, (LONGEST) val);
-	    write_exp_elt_opcode (par_state, OP_LONG);
+	    write_int (par_state, val, parse_type (par_state)->builtin_int);
 	  }
 	else
 	  {
@@ -886,35 +1334,28 @@ write_object_renaming (struct parser_sta
 	    renaming_expr = end;
 
 	    ada_lookup_encoded_symbol (index_name, orig_left_context,
-				       VAR_DOMAIN, &index_sym_info);
+				       SEARCH_VFT, &index_sym_info);
 	    if (index_sym_info.symbol == NULL)
 	      error (_("Could not find %s"), index_name);
-	    else if (SYMBOL_CLASS (index_sym_info.symbol) == LOC_TYPEDEF)
+	    else if (index_sym_info.symbol->aclass () == LOC_TYPEDEF)
 	      /* Index is an old-style renaming symbol.  */
 	      index_sym_info.block = orig_left_context;
-	    write_var_from_sym (par_state, index_sym_info.block,
-				index_sym_info.symbol);
+	    write_var_from_sym (par_state, index_sym_info);
 	  }
 	if (slice_state == SIMPLE_INDEX)
-	  {
-	    write_exp_elt_opcode (par_state, OP_FUNCALL);
-	    write_exp_elt_longcst (par_state, (LONGEST) 1);
-	    write_exp_elt_opcode (par_state, OP_FUNCALL);
-	  }
+	  ada_funcall (1);
 	else if (slice_state == LOWER_BOUND)
 	  slice_state = UPPER_BOUND;
 	else if (slice_state == UPPER_BOUND)
 	  {
-	    write_exp_elt_opcode (par_state, TERNOP_SLICE);
+	    ada_wrap3<ada_ternop_slice_operation> ();
 	    slice_state = SIMPLE_INDEX;
 	  }
 	break;
 
       case 'R':
 	{
-	  struct stoken field_name;
 	  const char *end;
-	  char *buf;
 
 	  renaming_expr += 1;
 
@@ -923,13 +1364,12 @@ write_object_renaming (struct parser_sta
 	  end = strchr (renaming_expr, 'X');
 	  if (end == NULL)
 	    end = renaming_expr + strlen (renaming_expr);
-	  field_name.length = end - renaming_expr;
-	  buf = (char *) malloc (end - renaming_expr + 1);
-	  field_name.ptr = buf;
-	  strncpy (buf, renaming_expr, end - renaming_expr);
-	  buf[end - renaming_expr] = '\000';
+
+	  operation_up arg = ada_pop ();
+	  pstate->push_new<ada_structop_operation>
+	    (std::move (arg), std::string (renaming_expr,
+					   end - renaming_expr));
 	  renaming_expr = end;
-	  write_exp_op_with_string (par_state, STRUCTOP_STRUCT, field_name);
 	  break;
 	}
 
@@ -948,30 +1388,33 @@ static const struct block*
 block_lookup (const struct block *context, const char *raw_name)
 {
   const char *name;
-  std::vector<struct block_symbol> syms;
-  int nsyms;
   struct symtab *symtab;
   const struct block *result = NULL;
 
+  std::string name_storage;
   if (raw_name[0] == '\'')
     {
       raw_name += 1;
       name = raw_name;
     }
   else
-    name = ada_encode (raw_name);
+    {
+      name_storage = ada_encode (raw_name);
+      name = name_storage.c_str ();
+    }
 
-  nsyms = ada_lookup_symbol_list (name, context, VAR_DOMAIN, &syms);
+  std::vector<struct block_symbol> syms
+    = ada_lookup_symbol_list (name, context, SEARCH_FUNCTION_DOMAIN);
 
   if (context == NULL
-      && (nsyms == 0 || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK))
+      && (syms.empty () || syms[0].symbol->aclass () != LOC_BLOCK))
     symtab = lookup_symtab (name);
   else
     symtab = NULL;
 
   if (symtab != NULL)
-    result = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK);
-  else if (nsyms == 0 || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK)
+    result = symtab->compunit ()->blockvector ()->static_block ();
+  else if (syms.empty () || syms[0].symbol->aclass () != LOC_BLOCK)
     {
       if (context == NULL)
 	error (_("No file or function \"%s\"."), raw_name);
@@ -980,9 +1423,9 @@ block_lookup (const struct block *contex
     }
   else
     {
-      if (nsyms > 1)
+      if (syms.size () > 1)
 	warning (_("Function name \"%s\" ambiguous here"), raw_name);
-      result = SYMBOL_BLOCK_VALUE (syms[0].symbol);
+      result = syms[0].symbol->value_block ();
     }
 
   return result;
@@ -997,13 +1440,13 @@ select_possible_type_sym (const std::vec
 	  
   preferred_index = -1; preferred_type = NULL;
   for (i = 0; i < syms.size (); i += 1)
-    switch (SYMBOL_CLASS (syms[i].symbol))
+    switch (syms[i].symbol->aclass ())
       {
       case LOC_TYPEDEF:
-	if (ada_prefer_type (SYMBOL_TYPE (syms[i].symbol), preferred_type))
+	if (ada_prefer_type (syms[i].symbol->type (), preferred_type))
 	  {
 	    preferred_index = i;
-	    preferred_type = SYMBOL_TYPE (syms[i].symbol);
+	    preferred_type = syms[i].symbol->type ();
 	  }
 	break;
       case LOC_REGISTER:
@@ -1022,7 +1465,7 @@ select_possible_type_sym (const std::vec
 }
 
 static struct type*
-find_primitive_type (struct parser_state *par_state, char *name)
+find_primitive_type (struct parser_state *par_state, const char *name)
 {
   struct type *type;
   type = language_lookup_primitive_type (par_state->language (),
@@ -1040,16 +1483,16 @@ find_primitive_type (struct parser_state
 	(char *) alloca (strlen (name) + sizeof ("standard__"));
       strcpy (expanded_name, "standard__");
       strcat (expanded_name, name);
-      sym = ada_lookup_symbol (expanded_name, NULL, VAR_DOMAIN).symbol;
-      if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
-	type = SYMBOL_TYPE (sym);
+      sym = ada_lookup_symbol (expanded_name, NULL, SEARCH_TYPE_DOMAIN).symbol;
+      if (sym != NULL && sym->aclass () == LOC_TYPEDEF)
+	type = sym->type ();
     }
 
   return type;
 }
 
 static int
-chop_selector (char *name, int end)
+chop_selector (const char *name, int end)
 {
   int i;
   for (i = end - 1; i > 0; i -= 1)
@@ -1062,8 +1505,8 @@ chop_selector (char *name, int end)
    '.'), chop this separator and return the result; else, return
    NAME.  */
 
-static char *
-chop_separator (char *name)
+static const char *
+chop_separator (const char *name)
 {
   if (*name == '.')
    return name + 1;
@@ -1076,22 +1519,25 @@ chop_separator (char *name)
 
 /* Given that SELS is a string of the form (<sep><identifier>)*, where
    <sep> is '__' or '.', write the indicated sequence of
-   STRUCTOP_STRUCT expression operators. */
-static void
-write_selectors (struct parser_state *par_state, char *sels)
+   STRUCTOP_STRUCT expression operators.  Returns a pointer to the
+   last operation that was pushed.  */
+static ada_structop_operation *
+write_selectors (struct parser_state *par_state, const char *sels)
 {
+  ada_structop_operation *result = nullptr;
   while (*sels != '\0')
     {
-      struct stoken field_name;
-      char *p = chop_separator (sels);
+      const char *p = chop_separator (sels);
       sels = p;
       while (*sels != '\0' && *sels != '.' 
 	     && (sels[0] != '_' || sels[1] != '_'))
 	sels += 1;
-      field_name.length = sels - p;
-      field_name.ptr = p;
-      write_exp_op_with_string (par_state, STRUCTOP_STRUCT, field_name);
+      operation_up arg = ada_pop ();
+      result = new ada_structop_operation (std::move (arg),
+					   std::string (p, sels - p));
+      pstate->push (operation_up (result));
     }
+  return result;
 }
 
 /* Write a variable access (OP_VAR_VALUE) to ambiguous encoded name
@@ -1100,18 +1546,16 @@ write_selectors (struct parser_state *pa
    */
 static void
 write_ambiguous_var (struct parser_state *par_state,
-		     const struct block *block, char *name, int len)
+		     const struct block *block, const char *name, int len)
 {
   struct symbol *sym = new (&temp_parse_space) symbol ();
 
-  SYMBOL_DOMAIN (sym) = UNDEF_DOMAIN;
+  sym->set_domain (UNDEF_DOMAIN);
   sym->set_linkage_name (obstack_strndup (&temp_parse_space, name, len));
-  SYMBOL_LANGUAGE (sym) = language_ada;
+  sym->set_language (language_ada, nullptr);
 
-  write_exp_elt_opcode (par_state, OP_VAR_VALUE);
-  write_exp_elt_block (par_state, block);
-  write_exp_elt_sym (par_state, sym);
-  write_exp_elt_opcode (par_state, OP_VAR_VALUE);
+  block_symbol bsym { sym, block };
+  par_state->push_new<ada_var_value_operation> (bsym);
 }
 
 /* A convenient wrapper around ada_get_field_index that takes
@@ -1120,7 +1564,7 @@ write_ambiguous_var (struct parser_state
 
 static int
 ada_nget_field_index (const struct type *type, const char *field_name0,
-                      int field_name_len, int maybe_missing)
+		      int field_name_len, int maybe_missing)
 {
   char *field_name = (char *) alloca ((field_name_len + 1) * sizeof (char));
 
@@ -1141,11 +1585,11 @@ ada_nget_field_index (const struct type
    In case of failure, we return NULL.  */
 
 static struct type *
-get_symbol_field_type (struct symbol *sym, char *encoded_field_name)
+get_symbol_field_type (struct symbol *sym, const char *encoded_field_name)
 {
-  char *field_name = encoded_field_name;
-  char *subfield_name;
-  struct type *type = SYMBOL_TYPE (sym);
+  const char *field_name = encoded_field_name;
+  const char *subfield_name;
+  struct type *type = sym->type ();
   int fieldno;
 
   if (type == NULL || field_name == NULL)
@@ -1158,7 +1602,7 @@ get_symbol_field_type (struct symbol *sy
 
       fieldno = ada_get_field_index (type, field_name, 1);
       if (fieldno >= 0)
-        return TYPE_FIELD_TYPE (type, fieldno);
+	return type->field (fieldno).type ();
 
       subfield_name = field_name;
       while (*subfield_name != '\0' && *subfield_name != '.' 
@@ -1166,14 +1610,14 @@ get_symbol_field_type (struct symbol *sy
 	subfield_name += 1;
 
       if (subfield_name[0] == '\0')
-        return NULL;
+	return NULL;
 
       fieldno = ada_nget_field_index (type, field_name,
-                                      subfield_name - field_name, 1);
+				      subfield_name - field_name, 1);
       if (fieldno < 0)
-        return NULL;
+	return NULL;
 
-      type = TYPE_FIELD_TYPE (type, fieldno);
+      type = type->field (fieldno).type ();
       field_name = subfield_name;
     }
 
@@ -1201,9 +1645,10 @@ write_var_or_type (struct parser_state *
   if (block == NULL)
     block = par_state->expression_context_block;
 
-  encoded_name = ada_encode (name0.ptr);
-  name_len = strlen (encoded_name);
-  encoded_name = obstack_strndup (&temp_parse_space, encoded_name, name_len);
+  std::string name_storage = ada_encode (name0.ptr);
+  name_len = name_storage.size ();
+  encoded_name = obstack_strndup (&temp_parse_space, name_storage.c_str (),
+				  name_len);
   for (depth = 0; depth < MAX_RENAMING_CHAIN_LENGTH; depth += 1)
     {
       int tail_index;
@@ -1211,8 +1656,6 @@ write_var_or_type (struct parser_state *
       tail_index = name_len;
       while (tail_index > 0)
 	{
-	  int nsyms;
-	  std::vector<struct block_symbol> syms;
 	  struct symbol *type_sym;
 	  struct symbol *renaming_sym;
 	  const char* renaming;
@@ -1221,15 +1664,20 @@ write_var_or_type (struct parser_state *
 	  int terminator = encoded_name[tail_index];
 
 	  encoded_name[tail_index] = '\0';
-	  nsyms = ada_lookup_symbol_list (encoded_name, block,
-					  VAR_DOMAIN, &syms);
+	  /* In order to avoid double-encoding, we want to only pass
+	     the decoded form to lookup functions.  */
+	  std::string decoded_name = ada_decode (encoded_name);
 	  encoded_name[tail_index] = terminator;
 
+	  std::vector<struct block_symbol> syms
+	    = ada_lookup_symbol_list (decoded_name.c_str (), block,
+				      SEARCH_VFT);
+
 	  type_sym = select_possible_type_sym (syms);
 
 	  if (type_sym != NULL)
 	    renaming_sym = type_sym;
-	  else if (nsyms == 1)
+	  else if (syms.size () == 1)
 	    renaming_sym = syms[0].symbol;
 	  else 
 	    renaming_sym = NULL;
@@ -1243,7 +1691,7 @@ write_var_or_type (struct parser_state *
 	    case ADA_EXCEPTION_RENAMING:
 	    case ADA_SUBPROGRAM_RENAMING:
 	      {
-	        int alloc_len = renaming_len + name_len - tail_index + 1;
+		int alloc_len = renaming_len + name_len - tail_index + 1;
 		char *new_name
 		  = (char *) obstack_alloc (&temp_parse_space, alloc_len);
 		strncpy (new_name, renaming, renaming_len);
@@ -1258,29 +1706,28 @@ write_var_or_type (struct parser_state *
 	      write_selectors (par_state, encoded_name + tail_index);
 	      return NULL;
 	    default:
-	      internal_error (__FILE__, __LINE__,
-			      _("impossible value from ada_parse_renaming"));
+	      internal_error (_("impossible value from ada_parse_renaming"));
 	    }
 
 	  if (type_sym != NULL)
 	    {
-              struct type *field_type;
-              
-              if (tail_index == name_len)
-		return SYMBOL_TYPE (type_sym);
-
-              /* We have some extraneous characters after the type name.
-                 If this is an expression "TYPE_NAME.FIELD0.[...].FIELDN",
-                 then try to get the type of FIELDN.  */
-              field_type
-                = get_symbol_field_type (type_sym, encoded_name + tail_index);
-              if (field_type != NULL)
+	      struct type *field_type;
+	      
+	      if (tail_index == name_len)
+		return type_sym->type ();
+
+	      /* We have some extraneous characters after the type name.
+		 If this is an expression "TYPE_NAME.FIELD0.[...].FIELDN",
+		 then try to get the type of FIELDN.  */
+	      field_type
+		= get_symbol_field_type (type_sym, encoded_name + tail_index);
+	      if (field_type != NULL)
 		return field_type;
 	      else 
 		error (_("Invalid attempt to select from type: \"%s\"."),
-                       name0.ptr);
+		       name0.ptr);
 	    }
-	  else if (tail_index == name_len && nsyms == 0)
+	  else if (tail_index == name_len && syms.empty ())
 	    {
 	      struct type *type = find_primitive_type (par_state,
 						       encoded_name);
@@ -1289,19 +1736,23 @@ write_var_or_type (struct parser_state *
 		return type;
 	    }
 
-	  if (nsyms == 1)
+	  if (syms.size () == 1)
 	    {
-	      write_var_from_sym (par_state, syms[0].block, syms[0].symbol);
+	      write_var_from_sym (par_state, syms[0]);
 	      write_selectors (par_state, encoded_name + tail_index);
 	      return NULL;
 	    }
-	  else if (nsyms == 0) 
+	  else if (syms.empty ())
 	    {
+	      struct objfile *objfile = nullptr;
+	      if (block != nullptr)
+		objfile = block->objfile ();
+
 	      struct bound_minimal_symbol msym
-		= ada_lookup_simple_minsym (encoded_name);
+		= ada_lookup_simple_minsym (decoded_name.c_str (), objfile);
 	      if (msym.minsym != NULL)
 		{
-		  write_exp_msymbol (par_state, msym);
+		  par_state->push_new<ada_var_msym_value_operation> (msym);
 		  /* Maybe cause error here rather than later? FIXME? */
 		  write_selectors (par_state, encoded_name + tail_index);
 		  return NULL;
@@ -1337,6 +1788,72 @@ write_var_or_type (struct parser_state *
 
 }
 
+/* Because ada_completer_word_break_characters does not contain '.' --
+   and it cannot easily be added, this breaks other completions -- we
+   have to recreate the completion word-splitting here, so that we can
+   provide a prefix that is then used when completing field names.
+   Without this, an attempt like "complete print abc.d" will give a
+   result like "print def" rather than "print abc.def".  */
+
+static std::string
+find_completion_bounds (struct parser_state *par_state)
+{
+  const char *end = pstate->lexptr;
+  /* First the end of the prefix.  Here we stop at the token start or
+     at '.' or space.  */
+  for (; end > original_expr && end[-1] != '.' && !isspace (end[-1]); --end)
+    {
+      /* Nothing.  */
+    }
+  /* Now find the start of the prefix.  */
+  const char *ptr = end;
+  /* Here we allow '.'.  */
+  for (;
+       ptr > original_expr && (ptr[-1] == '.'
+			       || ptr[-1] == '_'
+			       || (ptr[-1] >= 'a' && ptr[-1] <= 'z')
+			       || (ptr[-1] >= 'A' && ptr[-1] <= 'Z')
+			       || (ptr[-1] & 0xff) >= 0x80);
+       --ptr)
+    {
+      /* Nothing.  */
+    }
+  /* ... except, skip leading spaces.  */
+  ptr = skip_spaces (ptr);
+
+  return std::string (ptr, end);
+}
+
+/* A wrapper for write_var_or_type that is used specifically when
+   completion is requested for the last of a sequence of
+   identifiers.  */
+
+static struct type *
+write_var_or_type_completion (struct parser_state *par_state,
+			      const struct block *block, struct stoken name0)
+{
+  int tail_index = chop_selector (name0.ptr, name0.length);
+  /* If there's no separator, just defer to ordinary symbol
+     completion.  */
+  if (tail_index == -1)
+    return write_var_or_type (par_state, block, name0);
+
+  std::string copy (name0.ptr, tail_index);
+  struct type *type = write_var_or_type (par_state, block,
+					 { copy.c_str (),
+					   (int) copy.length () });
+  /* For completion purposes, it's enough that we return a type
+     here.  */
+  if (type != nullptr)
+    return type;
+
+  ada_structop_operation *op = write_selectors (par_state,
+						name0.ptr + tail_index);
+  op->set_prefix (find_completion_bounds (par_state));
+  par_state->mark_struct_expression (op);
+  return nullptr;
+}
+
 /* Write a left side of a component association (e.g., NAME in NAME =>
    exp).  If NAME has the form of a selected component, write it as an
    ordinary expression.  If it is a simple variable that unambiguously
@@ -1357,93 +1874,36 @@ write_name_assoc (struct parser_state *p
 {
   if (strchr (name.ptr, '.') == NULL)
     {
-      std::vector<struct block_symbol> syms;
-      int nsyms = ada_lookup_symbol_list (name.ptr,
-					  par_state->expression_context_block,
-					  VAR_DOMAIN, &syms);
+      std::vector<struct block_symbol> syms
+	= ada_lookup_symbol_list (name.ptr,
+				  par_state->expression_context_block,
+				  SEARCH_VFT);
 
-      if (nsyms != 1 || SYMBOL_CLASS (syms[0].symbol) == LOC_TYPEDEF)
-	write_exp_op_with_string (par_state, OP_NAME, name);
+      if (syms.size () != 1 || syms[0].symbol->aclass () == LOC_TYPEDEF)
+	pstate->push_new<ada_string_operation> (copy_name (name));
       else
-	write_var_from_sym (par_state, syms[0].block, syms[0].symbol);
+	write_var_from_sym (par_state, syms[0]);
     }
   else
     if (write_var_or_type (par_state, NULL, name) != NULL)
       error (_("Invalid use of type."));
-}
-
-/* Convert the character literal whose ASCII value would be VAL to the
-   appropriate value of type TYPE, if there is a translation.
-   Otherwise return VAL.  Hence, in an enumeration type ('A', 'B'),
-   the literal 'A' (VAL == 65), returns 0.  */
-
-static LONGEST
-convert_char_literal (struct type *type, LONGEST val)
-{
-  char name[7];
-  int f;
-
-  if (type == NULL)
-    return val;
-  type = check_typedef (type);
-  if (TYPE_CODE (type) != TYPE_CODE_ENUM)
-    return val;
-
-  if ((val >= 'a' && val <= 'z') || (val >= '0' && val <= '9'))
-    xsnprintf (name, sizeof (name), "Q%c", (int) val);
-  else
-    xsnprintf (name, sizeof (name), "QU%02x", (int) val);
-  size_t len = strlen (name);
-  for (f = 0; f < TYPE_NFIELDS (type); f += 1)
-    {
-      /* Check the suffix because an enum constant in a package will
-	 have a name like "pkg__QUxx".  This is safe enough because we
-	 already have the correct type, and because mangling means
-	 there can't be clashes.  */
-      const char *ename = TYPE_FIELD_NAME (type, f);
-      size_t elen = strlen (ename);
-
-      if (elen >= len && strcmp (name, ename + elen - len) == 0)
-	return TYPE_FIELD_ENUMVAL (type, f);
-    }
-  return val;
-}
 
-static struct type *
-type_int (struct parser_state *par_state)
-{
-  return parse_type (par_state)->builtin_int;
+  push_association<ada_name_association> (ada_pop ());
 }
 
 static struct type *
-type_long (struct parser_state *par_state)
+type_for_char (struct parser_state *par_state, ULONGEST value)
 {
-  return parse_type (par_state)->builtin_long;
-}
-
-static struct type *
-type_long_long (struct parser_state *par_state)
-{
-  return parse_type (par_state)->builtin_long_long;
-}
-
-static struct type *
-type_long_double (struct parser_state *par_state)
-{
-  return parse_type (par_state)->builtin_long_double;
-}
-
-static struct type *
-type_char (struct parser_state *par_state)
-{
-  return language_string_char_type (par_state->language (),
-				    par_state->gdbarch ());
-}
-
-static struct type *
-type_boolean (struct parser_state *par_state)
-{
-  return parse_type (par_state)->builtin_bool;
+  if (value <= 0xff)
+    return language_string_char_type (par_state->language (),
+				      par_state->gdbarch ());
+  else if (value <= 0xffff)
+    return language_lookup_primitive_type (par_state->language (),
+					   par_state->gdbarch (),
+					   "wide_character");
+  return language_lookup_primitive_type (par_state->language (),
+					 par_state->gdbarch (),
+					 "wide_wide_character");
 }
 
 static struct type *
@@ -1456,8 +1916,9 @@ type_system_address (struct parser_state
   return  type != NULL ? type : parse_type (par_state)->builtin_data_ptr;
 }
 
+void _initialize_ada_exp ();
 void
-_initialize_ada_exp (void)
+_initialize_ada_exp ()
 {
   obstack_init (&temp_parse_space);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-lang.c ./gdb/ada-lang.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-lang.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ada-lang.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Ada language support routines for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,7 +20,7 @@
 
 #include "defs.h"
 #include <ctype.h>
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
 #include "frame.h"
 #include "symtab.h"
 #include "gdbtypes.h"
@@ -35,7 +35,7 @@
 #include "breakpoint.h"
 #include "gdbcore.h"
 #include "hashtab.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "ada-lang.h"
 #include "completer.h"
 #include "ui-out.h"
@@ -49,6 +49,7 @@
 #include "typeprint.h"
 #include "namespace.h"
 #include "cli/cli-style.h"
+#include "cli/cli-decode.h"
 
 #include "value.h"
 #include "mi/mi-common.h"
@@ -56,15 +57,11 @@
 #include "cli/cli-utils.h"
 #include "gdbsupport/function-view.h"
 #include "gdbsupport/byte-vector.h"
+#include "gdbsupport/selftest.h"
 #include <algorithm>
-
-/* Define whether or not the C operator '/' truncates towards zero for
-   differently signed operands (truncation direction is undefined in C).
-   Copied from valarith.c.  */
-
-#ifndef TRUNCATION_TOWARDS_ZERO
-#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
-#endif
+#include "ada-exp.h"
+#include "charset.h"
+#include "ax-gdb.h"
 
 static struct type *desc_base_type (struct type *);
 
@@ -94,41 +91,28 @@ static struct type *desc_index_type (str
 
 static int desc_arity (struct type *);
 
-static int ada_type_match (struct type *, struct type *, int);
-
 static int ada_args_match (struct symbol *, struct value **, int);
 
 static struct value *make_array_descriptor (struct type *, struct value *);
 
-static void ada_add_block_symbols (struct obstack *,
+static void ada_add_block_symbols (std::vector<struct block_symbol> &,
 				   const struct block *,
 				   const lookup_name_info &lookup_name,
-				   domain_enum, struct objfile *);
+				   domain_search_flags, struct objfile *);
 
-static void ada_add_all_symbols (struct obstack *, const struct block *,
+static void ada_add_all_symbols (std::vector<struct block_symbol> &,
+				 const struct block *,
 				 const lookup_name_info &lookup_name,
-				 domain_enum, int, int *);
-
-static int is_nonfunction (struct block_symbol *, int);
+				 domain_search_flags, int, int *);
 
-static void add_defn_to_vec (struct obstack *, struct symbol *,
-                             const struct block *);
+static int is_nonfunction (const std::vector<struct block_symbol> &);
 
-static int num_defns_collected (struct obstack *);
-
-static struct block_symbol *defns_collected (struct obstack *, int);
-
-static struct value *resolve_subexp (expression_up *, int *, int,
-                                     struct type *, int,
-				     innermost_block_tracker *);
-
-static void replace_operator_with_call (expression_up *, int, int, int,
-                                        struct symbol *, const struct block *);
+static void add_defn_to_vec (std::vector<struct block_symbol> &,
+			     struct symbol *,
+			     const struct block *);
 
 static int possible_user_operator_p (enum exp_opcode, struct value **);
 
-static const char *ada_op_name (enum exp_opcode);
-
 static const char *ada_decoded_op_name (enum exp_opcode);
 
 static int numeric_type_p (struct type *);
@@ -140,18 +124,16 @@ static int scalar_type_p (struct type *)
 static int discrete_type_p (struct type *);
 
 static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
-                                                int, int);
-
-static struct value *evaluate_subexp_type (struct expression *, int *);
+						int, int);
 
 static struct type *ada_find_parallel_type_with_name (struct type *,
-                                                      const char *);
+						      const char *);
 
 static int is_dynamic_field (struct type *, int);
 
 static struct type *to_fixed_variant_branch_type (struct type *,
 						  const gdb_byte *,
-                                                  CORE_ADDR, struct value *);
+						  CORE_ADDR, struct value *);
 
 static struct type *to_fixed_array_type (struct type *, struct value *, int);
 
@@ -170,15 +152,13 @@ static long decode_packed_array_bitsize
 
 static struct value *decode_constrained_packed_array (struct value *);
 
-static int ada_is_packed_array_type  (struct type *);
-
 static int ada_is_unconstrained_packed_array_type (struct type *);
 
 static struct value *value_subscript_packed (struct value *, int,
-                                             struct value **);
+					     struct value **);
 
 static struct value *coerce_unspec_val_to_type (struct value *,
-                                                struct type *);
+						struct type *);
 
 static int lesseq_defined_than (struct symbol *, struct symbol *);
 
@@ -186,7 +166,7 @@ static int equiv_types (struct type *, s
 
 static int is_name_suffix (const char *);
 
-static int advance_wild_match (const char **, const char *, int);
+static int advance_wild_match (const char **, const char *, char);
 
 static bool wild_match (const char *name, const char *patn);
 
@@ -194,112 +174,68 @@ static struct value *ada_coerce_ref (str
 
 static LONGEST pos_atr (struct value *);
 
-static struct value *value_pos_atr (struct type *, struct value *);
-
-static struct value *value_val_atr (struct type *, struct value *);
-
-static struct symbol *standard_lookup (const char *, const struct block *,
-                                       domain_enum);
+static struct value *val_atr (struct type *, LONGEST);
 
 static struct value *ada_search_struct_field (const char *, struct value *, int,
-                                              struct type *);
-
-static struct value *ada_value_primitive_field (struct value *, int, int,
-                                                struct type *);
+					      struct type *);
 
 static int find_struct_field (const char *, struct type *, int,
-                              struct type **, int *, int *, int *, int *);
+			      struct type **, int *, int *, int *, int *);
 
-static int ada_resolve_function (struct block_symbol *, int,
-                                 struct value **, int, const char *,
-                                 struct type *, int);
+static int ada_resolve_function (std::vector<struct block_symbol> &,
+				 struct value **, int, const char *,
+				 struct type *, bool);
 
 static int ada_is_direct_array_type (struct type *);
 
-static void ada_language_arch_info (struct gdbarch *,
-				    struct language_arch_info *);
-
 static struct value *ada_index_struct_field (int, struct value *, int,
 					     struct type *);
 
-static struct value *assign_aggregate (struct value *, struct value *, 
-				       struct expression *,
-				       int *, enum noside);
-
-static void aggregate_assign_from_choices (struct value *, struct value *, 
-					   struct expression *,
-					   int *, LONGEST *, int *,
-					   int, LONGEST, LONGEST);
-
-static void aggregate_assign_positional (struct value *, struct value *,
-					 struct expression *,
-					 int *, LONGEST *, int *, int,
-					 LONGEST, LONGEST);
+static void add_component_interval (LONGEST, LONGEST, std::vector<LONGEST> &);
 
 
-static void aggregate_assign_others (struct value *, struct value *,
-				     struct expression *,
-				     int *, LONGEST *, int, LONGEST, LONGEST);
-
-
-static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
-
-
-static struct value *ada_evaluate_subexp (struct type *, struct expression *,
-					  int *, enum noside);
-
-static void ada_forward_operator_length (struct expression *, int, int *,
-					 int *);
-
 static struct type *ada_find_any_type (const char *name);
 
 static symbol_name_matcher_ftype *ada_get_symbol_name_matcher
   (const lookup_name_info &lookup_name);
 
-
-
-/* The result of a symbol lookup to be stored in our symbol cache.  */
+static int symbols_are_identical_enums
+  (const std::vector<struct block_symbol> &syms);
 
-struct cache_entry
-{
-  /* The name used to perform the lookup.  */
-  const char *name;
-  /* The namespace used during the lookup.  */
-  domain_enum domain;
-  /* The symbol returned by the lookup, or NULL if no matching symbol
-     was found.  */
-  struct symbol *sym;
-  /* The block where the symbol was found, or NULL if no matching
-     symbol was found.  */
-  const struct block *block;
-  /* A pointer to the next entry with the same hash.  */
-  struct cache_entry *next;
-};
+static int ada_identical_enum_types_p (struct type *type1, struct type *type2);
+
 
-/* The Ada symbol cache, used to store the result of Ada-mode symbol
-   lookups in the course of executing the user's commands.
+/* The character set used for source files.  */
+static const char *ada_source_charset;
 
-   The cache is implemented using a simple, fixed-sized hash.
-   The size is fixed on the grounds that there are not likely to be
-   all that many symbols looked up during any given session, regardless
-   of the size of the symbol table.  If we decide to go to a resizable
-   table, let's just use the stuff from libiberty instead.  */
+/* The string "UTF-8".  This is here so we can check for the UTF-8
+   charset using == rather than strcmp.  */
+static const char ada_utf8[] = "UTF-8";
+
+/* Each entry in the UTF-32 case-folding table is of this form.  */
+struct utf8_entry
+{
+  /* The start and end, inclusive, of this range of codepoints.  */
+  uint32_t start, end;
+  /* The delta to apply to get the upper-case form.  0 if this is
+     already upper-case.  */
+  int upper_delta;
+  /* The delta to apply to get the lower-case form.  0 if this is
+     already lower-case.  */
+  int lower_delta;
 
-#define HASH_SIZE 1009
+  bool operator< (uint32_t val) const
+  {
+    return end < val;
+  }
+};
 
-struct ada_symbol_cache
+static const utf8_entry ada_case_fold[] =
 {
-  /* An obstack used to store the entries in our cache.  */
-  struct obstack cache_space;
-
-  /* The root of the hash table used to implement our symbol cache.  */
-  struct cache_entry *root[HASH_SIZE];
+#include "ada-casefold.h"
 };
 
-static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
-
-/* Maximum-sized dynamic type.  */
-static unsigned int varsize_limit;
+
 
 static const char ada_completer_word_break_characters[] =
 #ifdef VMS
@@ -319,11 +255,11 @@ static int warning_limit = 2;
    expression evaluation.  */
 static int warnings_issued = 0;
 
-static const char *known_runtime_file_name_patterns[] = {
+static const char * const known_runtime_file_name_patterns[] = {
   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
 };
 
-static const char *known_auxiliary_function_name_patterns[] = {
+static const char * const known_auxiliary_function_name_patterns[] = {
   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
 };
 
@@ -332,23 +268,6 @@ static const char *known_auxiliary_funct
 static struct cmd_list_element *maint_set_ada_cmdlist;
 static struct cmd_list_element *maint_show_ada_cmdlist;
 
-/* Implement the "maintenance set ada" (prefix) command.  */
-
-static void
-maint_set_ada_cmd (const char *args, int from_tty)
-{
-  help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
-	     gdb_stdout);
-}
-
-/* Implement the "maintenance show ada" (prefix) command.  */
-
-static void
-maint_show_ada_cmd (const char *args, int from_tty)
-{
-  cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
-}
-
 /* The "maintenance ada set/show ignore-descriptive-type" value.  */
 
 static bool ada_ignore_descriptive_types_p = false;
@@ -372,7 +291,7 @@ struct ada_inferior_data
 };
 
 /* Our key to this module's inferior data.  */
-static const struct inferior_key<ada_inferior_data> ada_inferior_data;
+static const registry<inferior>::key<ada_inferior_data> ada_inferior_data;
 
 /* Return our inferior data for the given inferior (INF).
 
@@ -406,40 +325,81 @@ ada_inferior_exit (struct inferior *inf)
 
 			/* program-space-specific data.  */
 
-/* This module's per-program-space data.  */
-struct ada_pspace_data
+/* The result of a symbol lookup to be stored in our symbol cache.  */
+
+struct cache_entry
 {
-  ~ada_pspace_data ()
+  /* The name used to perform the lookup.  */
+  std::string name;
+  /* The namespace used during the lookup.  */
+  domain_search_flags domain = 0;
+  /* The symbol returned by the lookup, or NULL if no matching symbol
+     was found.  */
+  struct symbol *sym = nullptr;
+  /* The block where the symbol was found, or NULL if no matching
+     symbol was found.  */
+  const struct block *block = nullptr;
+};
+
+/* The symbol cache uses this type when searching.  */
+
+struct cache_entry_search
+{
+  const char *name;
+  domain_search_flags domain;
+
+  hashval_t hash () const
   {
-    if (sym_cache != NULL)
-      ada_free_symbol_cache (sym_cache);
+    /* This must agree with hash_cache_entry, below.  */
+    return htab_hash_string (name);
   }
-
-  /* The Ada symbol cache.  */
-  struct ada_symbol_cache *sym_cache = nullptr;
 };
 
+/* Hash function for cache_entry.  */
+
+static hashval_t
+hash_cache_entry (const void *v)
+{
+  const cache_entry *entry = (const cache_entry *) v;
+  return htab_hash_string (entry->name.c_str ());
+}
+
+/* Equality function for cache_entry.  */
+
+static int
+eq_cache_entry (const void *a, const void *b)
+{
+  const cache_entry *entrya = (const cache_entry *) a;
+  const cache_entry_search *entryb = (const cache_entry_search *) b;
+
+  return entrya->domain == entryb->domain && entrya->name == entryb->name;
+}
+
 /* Key to our per-program-space data.  */
-static const struct program_space_key<ada_pspace_data> ada_pspace_data_handle;
+static const registry<program_space>::key<htab, htab_deleter>
+  ada_pspace_data_handle;
 
 /* Return this module's data for the given program space (PSPACE).
    If not is found, add a zero'ed one now.
 
    This function always returns a valid object.  */
 
-static struct ada_pspace_data *
+static htab_t
 get_ada_pspace_data (struct program_space *pspace)
 {
-  struct ada_pspace_data *data;
-
-  data = ada_pspace_data_handle.get (pspace);
-  if (data == NULL)
-    data = ada_pspace_data_handle.emplace (pspace);
+  htab_t data = ada_pspace_data_handle.get (pspace);
+  if (data == nullptr)
+    {
+      data = htab_create_alloc (10, hash_cache_entry, eq_cache_entry,
+				htab_delete_entry<cache_entry>,
+				xcalloc, xfree);
+      ada_pspace_data_handle.set (pspace, data);
+    }
 
   return data;
 }
 
-                        /* Utilities */
+			/* Utilities */
 
 /* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
    all typedef layers have been peeled.  Otherwise, return TYPE.
@@ -471,8 +431,8 @@ get_ada_pspace_data (struct program_spac
 static struct type *
 ada_typedef_target_type (struct type *type)
 {
-  while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
-    type = TYPE_TARGET_TYPE (type);
+  while (type->code () == TYPE_CODE_TYPEDEF)
+    type = type->target_type ();
   return type;
 }
 
@@ -509,56 +469,6 @@ add_angle_brackets (const char *str)
   return string_printf ("<%s>", str);
 }
 
-static const char *
-ada_get_gdb_completer_word_break_characters (void)
-{
-  return ada_completer_word_break_characters;
-}
-
-/* Print an array element index using the Ada syntax.  */
-
-static void
-ada_print_array_index (struct value *index_value, struct ui_file *stream,
-                       const struct value_print_options *options)
-{
-  LA_VALUE_PRINT (index_value, stream, options);
-  fprintf_filtered (stream, " => ");
-}
-
-/* la_watch_location_expression for Ada.  */
-
-static gdb::unique_xmalloc_ptr<char>
-ada_watch_location_expression (struct type *type, CORE_ADDR addr)
-{
-  type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
-  std::string name = type_to_string (type);
-  return gdb::unique_xmalloc_ptr<char>
-    (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
-}
-
-/* Assuming V points to an array of S objects,  make sure that it contains at
-   least M objects, updating V and S as necessary.  */
-
-#define GROW_VECT(v, s, m)                                    \
-   if ((s) < (m)) (v) = (char *) grow_vect (v, &(s), m, sizeof *(v));
-
-/* Assuming VECT points to an array of *SIZE objects of size
-   ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
-   updating *SIZE as necessary and returning the (new) array.  */
-
-static void *
-grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
-{
-  if (*size < min_size)
-    {
-      *size *= 2;
-      if (*size < min_size)
-        *size = min_size;
-      vect = xrealloc (vect, *size * element_size);
-    }
-  return vect;
-}
-
 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
    suffix of FIELD_NAME beginning "___".  */
 
@@ -570,9 +480,9 @@ field_name_match (const char *field_name
   return
     (strncmp (field_name, target, len) == 0
      && (field_name[len] == '\0'
-         || (startswith (field_name + len, "___")
-             && strcmp (field_name + strlen (field_name) - 6,
-                        "___XVN") != 0)));
+	 || (startswith (field_name + len, "___")
+	     && strcmp (field_name + strlen (field_name) - 6,
+			"___XVN") != 0)));
 }
 
 
@@ -586,18 +496,18 @@ field_name_match (const char *field_name
 
 int
 ada_get_field_index (const struct type *type, const char *field_name,
-                     int maybe_missing)
+		     int maybe_missing)
 {
   int fieldno;
   struct type *struct_type = check_typedef ((struct type *) type);
 
-  for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
-    if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
+  for (fieldno = 0; fieldno < struct_type->num_fields (); fieldno++)
+    if (field_name_match (struct_type->field (fieldno).name (), field_name))
       return fieldno;
 
   if (!maybe_missing)
     error (_("Unable to find field %s in struct %s.  Aborting"),
-           field_name, TYPE_NAME (struct_type));
+	   field_name, struct_type->name ());
 
   return -1;
 }
@@ -614,9 +524,9 @@ ada_name_prefix_len (const char *name)
       const char *p = strstr (name, "___");
 
       if (p == NULL)
-        return strlen (name);
+	return strlen (name);
       else
-        return p - name;
+	return p - name;
     }
 }
 
@@ -642,29 +552,29 @@ static struct value *
 coerce_unspec_val_to_type (struct value *val, struct type *type)
 {
   type = ada_check_typedef (type);
-  if (value_type (val) == type)
+  if (val->type () == type)
     return val;
   else
     {
       struct value *result;
 
-      /* Make sure that the object size is not unreasonable before
-         trying to allocate some memory for it.  */
-      ada_ensure_varsize_limit (type);
-
-      if (value_lazy (val)
-          || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
-	result = allocate_value_lazy (type);
-      else
-	{
-	  result = allocate_value (type);
-	  value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
-	}
-      set_value_component_location (result, val);
-      set_value_bitsize (result, value_bitsize (val));
-      set_value_bitpos (result, value_bitpos (val));
-      if (VALUE_LVAL (result) == lval_memory)
-	set_value_address (result, value_address (val));
+      if (val->optimized_out ())
+	result = value::allocate_optimized_out (type);
+      else if (val->lazy ()
+	       /* Be careful not to make a lazy not_lval value.  */
+	       || (val->lval () != not_lval
+		   && type->length () > val->type ()->length ()))
+	result = value::allocate_lazy (type);
+      else
+	{
+	  result = value::allocate (type);
+	  val->contents_copy (result, 0, 0, type->length ());
+	}
+      result->set_component_location (val);
+      result->set_bitsize (val->bitsize ());
+      result->set_bitpos (val->bitpos ());
+      if (result->lval () == lval_memory)
+	result->set_address (val->address ());
       return result;
     }
 }
@@ -709,17 +619,6 @@ lim_warning (const char *format, ...)
   va_end (args);
 }
 
-/* Issue an error if the size of an object of type T is unreasonable,
-   i.e. if it would be a bad idea to allocate a value of this type in
-   GDB.  */
-
-void
-ada_ensure_varsize_limit (const struct type *type)
-{
-  if (TYPE_LENGTH (type) > varsize_limit)
-    error (_("object size is larger than varsize-limit"));
-}
-
 /* Maximum value of a SIZE-byte signed integer type.  */
 static LONGEST
 max_of_size (int size)
@@ -749,33 +648,47 @@ umax_of_size (int size)
 static LONGEST
 max_of_type (struct type *t)
 {
-  if (TYPE_UNSIGNED (t))
-    return (LONGEST) umax_of_size (TYPE_LENGTH (t));
+  if (t->is_unsigned ())
+    return (LONGEST) umax_of_size (t->length ());
   else
-    return max_of_size (TYPE_LENGTH (t));
+    return max_of_size (t->length ());
 }
 
 /* Minimum value of integral type T, as a signed quantity.  */
 static LONGEST
 min_of_type (struct type *t)
 {
-  if (TYPE_UNSIGNED (t)) 
+  if (t->is_unsigned ())
     return 0;
   else
-    return min_of_size (TYPE_LENGTH (t));
+    return min_of_size (t->length ());
 }
 
 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
 LONGEST
 ada_discrete_type_high_bound (struct type *type)
 {
-  type = resolve_dynamic_type (type, NULL, 0);
-  switch (TYPE_CODE (type))
+  type = resolve_dynamic_type (type, {}, 0);
+  switch (type->code ())
     {
     case TYPE_CODE_RANGE:
-      return TYPE_HIGH_BOUND (type);
+      {
+	const dynamic_prop &high = type->bounds ()->high;
+
+	if (high.is_constant ())
+	  return high.const_val ();
+	else
+	  {
+	    gdb_assert (high.kind () == PROP_UNDEFINED);
+
+	    /* This happens when trying to evaluate a type's dynamic bound
+	       without a live target.  There is nothing relevant for us to
+	       return here, so return 0.  */
+	    return 0;
+	  }
+      }
     case TYPE_CODE_ENUM:
-      return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
+      return type->field (type->num_fields () - 1).loc_enumval ();
     case TYPE_CODE_BOOL:
       return 1;
     case TYPE_CODE_CHAR:
@@ -790,13 +703,27 @@ ada_discrete_type_high_bound (struct typ
 LONGEST
 ada_discrete_type_low_bound (struct type *type)
 {
-  type = resolve_dynamic_type (type, NULL, 0);
-  switch (TYPE_CODE (type))
+  type = resolve_dynamic_type (type, {}, 0);
+  switch (type->code ())
     {
     case TYPE_CODE_RANGE:
-      return TYPE_LOW_BOUND (type);
+      {
+	const dynamic_prop &low = type->bounds ()->low;
+
+	if (low.is_constant ())
+	  return low.const_val ();
+	else
+	  {
+	    gdb_assert (low.kind () == PROP_UNDEFINED);
+
+	    /* This happens when trying to evaluate a type's dynamic bound
+	       without a live target.  There is nothing relevant for us to
+	       return here, so return 0.  */
+	    return 0;
+	  }
+      }
     case TYPE_CODE_ENUM:
-      return TYPE_FIELD_ENUMVAL (type, 0);
+      return type->field (0).loc_enumval ();
     case TYPE_CODE_BOOL:
       return 0;
     case TYPE_CODE_CHAR:
@@ -813,11 +740,11 @@ ada_discrete_type_low_bound (struct type
 static struct type *
 get_base_type (struct type *type)
 {
-  while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
+  while (type != NULL && type->code () == TYPE_CODE_RANGE)
     {
-      if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
-        return type;
-      type = TYPE_TARGET_TYPE (type);
+      if (type == type->target_type () || type->target_type () == NULL)
+	return type;
+      type = type->target_type ();
     }
   return type;
 }
@@ -830,16 +757,16 @@ get_base_type (struct type *type)
 struct value *
 ada_get_decoded_value (struct value *value)
 {
-  struct type *type = ada_check_typedef (value_type (value));
+  struct type *type = ada_check_typedef (value->type ());
 
   if (ada_is_array_descriptor_type (type)
       || (ada_is_constrained_packed_array_type (type)
-          && TYPE_CODE (type) != TYPE_CODE_PTR))
+	  && type->code () != TYPE_CODE_PTR))
     {
-      if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
-        value = ada_coerce_to_simple_array_ptr (value);
+      if (type->code () == TYPE_CODE_TYPEDEF)  /* array access type.  */
+	value = ada_coerce_to_simple_array_ptr (value);
       else
-        value = ada_coerce_to_simple_array (value);
+	value = ada_coerce_to_simple_array (value);
     }
   else
     value = ada_to_fixed_value (value);
@@ -863,26 +790,14 @@ ada_get_decoded_type (struct type *type)
 
 
 
-                                /* Language Selection */
-
-/* If the main program is in Ada, return language_ada, otherwise return LANG
-   (the main program is in Ada iif the adainit symbol is found).  */
-
-static enum language
-ada_update_initial_language (enum language lang)
-{
-  if (lookup_minimal_symbol ("adainit", NULL, NULL).minsym != NULL)
-    return language_ada;
-
-  return lang;
-}
+				/* Language Selection */
 
 /* If the main procedure is written in Ada, then return its name.
    The result is good until the next call.  Return NULL if the main
    procedure doesn't appear to be in Ada.  */
 
-char *
-ada_main_name (void)
+const char *
+ada_main_name ()
 {
   struct bound_minimal_symbol msym;
   static gdb::unique_xmalloc_ptr<char> main_program_name;
@@ -896,18 +811,18 @@ ada_main_name (void)
 
   if (msym.minsym != NULL)
     {
-      CORE_ADDR main_program_name_addr;
-      int err_code;
-
-      main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
+      CORE_ADDR main_program_name_addr = msym.value_address ();
       if (main_program_name_addr == 0)
-        error (_("Invalid address for Ada main program name."));
+	error (_("Invalid address for Ada main program name."));
 
-      target_read_string (main_program_name_addr, &main_program_name,
-                          1024, &err_code);
-
-      if (err_code != 0)
-        return NULL;
+      /* Force trust_readonly, because we always want to fetch this
+	 string from the executable, not from inferior memory.  If the
+	 user changes the exec-file and invokes "start", we want to
+	 pick the "main" from the new executable, not one that may
+	 come from the still-live inferior.  */
+      scoped_restore save_trust_readonly
+	= make_scoped_restore (&trust_readonly, true);
+      main_program_name = target_read_string (main_program_name_addr, 1024);
       return main_program_name.get ();
     }
 
@@ -915,7 +830,7 @@ ada_main_name (void)
   return NULL;
 }
 
-                                /* Symbols */
+				/* Symbols */
 
 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
    of NULLs.  */
@@ -945,99 +860,300 @@ const struct ada_opname_map ada_opname_t
   {NULL, NULL}
 };
 
-/* The "encoded" form of DECODED, according to GNAT conventions.  The
-   result is valid until the next call to ada_encode.  If
+/* If STR is a decoded version of a compiler-provided suffix (like the
+   "[cold]" in "symbol[cold]"), return true.  Otherwise, return
+   false.  */
+
+static bool
+is_compiler_suffix (const char *str)
+{
+  gdb_assert (*str == '[');
+  ++str;
+  while (*str != '\0' && isalpha (*str))
+    ++str;
+  /* We accept a missing "]" in order to support completion.  */
+  return *str == '\0' || (str[0] == ']' && str[1] == '\0');
+}
+
+/* Append a non-ASCII character to RESULT.  */
+static void
+append_hex_encoded (std::string &result, uint32_t one_char)
+{
+  if (one_char <= 0xff)
+    {
+      result.append ("U");
+      result.append (phex (one_char, 1));
+    }
+  else if (one_char <= 0xffff)
+    {
+      result.append ("W");
+      result.append (phex (one_char, 2));
+    }
+  else
+    {
+      result.append ("WW");
+      result.append (phex (one_char, 4));
+    }
+}
+
+/* Return a string that is a copy of the data in STORAGE, with
+   non-ASCII characters replaced by the appropriate hex encoding.  A
+   template is used because, for UTF-8, we actually want to work with
+   UTF-32 codepoints.  */
+template<typename T>
+std::string
+copy_and_hex_encode (struct obstack *storage)
+{
+  const T *chars = (T *) obstack_base (storage);
+  int num_chars = obstack_object_size (storage) / sizeof (T);
+  std::string result;
+  for (int i = 0; i < num_chars; ++i)
+    {
+      if (chars[i] <= 0x7f)
+	{
+	  /* The host character set has to be a superset of ASCII, as
+	     are all the other character sets we can use.  */
+	  result.push_back (chars[i]);
+	}
+      else
+	append_hex_encoded (result, chars[i]);
+    }
+  return result;
+}
+
+/* The "encoded" form of DECODED, according to GNAT conventions.  If
    THROW_ERRORS, throw an error if invalid operator name is found.
-   Otherwise, return NULL in that case.  */
+   Otherwise, return the empty string in that case.  */
 
-static char *
+static std::string
 ada_encode_1 (const char *decoded, bool throw_errors)
 {
-  static char *encoding_buffer = NULL;
-  static size_t encoding_buffer_size = 0;
-  const char *p;
-  int k;
-
   if (decoded == NULL)
-    return NULL;
-
-  GROW_VECT (encoding_buffer, encoding_buffer_size,
-             2 * strlen (decoded) + 10);
+    return {};
 
-  k = 0;
-  for (p = decoded; *p != '\0'; p += 1)
+  std::string encoding_buffer;
+  bool saw_non_ascii = false;
+  for (const char *p = decoded; *p != '\0'; p += 1)
     {
+      if ((*p & 0x80) != 0)
+	saw_non_ascii = true;
+
       if (*p == '.')
-        {
-          encoding_buffer[k] = encoding_buffer[k + 1] = '_';
-          k += 2;
-        }
+	encoding_buffer.append ("__");
+      else if (*p == '[' && is_compiler_suffix (p))
+	{
+	  encoding_buffer = encoding_buffer + "." + (p + 1);
+	  if (encoding_buffer.back () == ']')
+	    encoding_buffer.pop_back ();
+	  break;
+	}
       else if (*p == '"')
-        {
-          const struct ada_opname_map *mapping;
+	{
+	  const struct ada_opname_map *mapping;
 
-          for (mapping = ada_opname_table;
-               mapping->encoded != NULL
-               && !startswith (p, mapping->decoded); mapping += 1)
-            ;
-          if (mapping->encoded == NULL)
+	  for (mapping = ada_opname_table;
+	       mapping->encoded != NULL
+	       && !startswith (p, mapping->decoded); mapping += 1)
+	    ;
+	  if (mapping->encoded == NULL)
 	    {
 	      if (throw_errors)
 		error (_("invalid Ada operator name: %s"), p);
 	      else
-		return NULL;
+		return {};
 	    }
-          strcpy (encoding_buffer + k, mapping->encoded);
-          k += strlen (mapping->encoded);
-          break;
-        }
+	  encoding_buffer.append (mapping->encoded);
+	  break;
+	}
       else
-        {
-          encoding_buffer[k] = *p;
-          k += 1;
-        }
+	encoding_buffer.push_back (*p);
+    }
+
+  /* If a non-ASCII character is seen, we must convert it to the
+     appropriate hex form.  As this is more expensive, we keep track
+     of whether it is even necessary.  */
+  if (saw_non_ascii)
+    {
+      auto_obstack storage;
+      bool is_utf8 = ada_source_charset == ada_utf8;
+      try
+	{
+	  convert_between_encodings
+	    (host_charset (),
+	     is_utf8 ? HOST_UTF32 : ada_source_charset,
+	     (const gdb_byte *) encoding_buffer.c_str (),
+	     encoding_buffer.length (), 1,
+	     &storage, translit_none);
+	}
+      catch (const gdb_exception &)
+	{
+	  static bool warned = false;
+
+	  /* Converting to UTF-32 shouldn't fail, so if it doesn't, we
+	     might like to know why.  */
+	  if (!warned)
+	    {
+	      warned = true;
+	      warning (_("charset conversion failure for '%s'.\n"
+			 "You may have the wrong value for 'set ada source-charset'."),
+		       encoding_buffer.c_str ());
+	    }
+
+	  /* We don't try to recover from errors.  */
+	  return encoding_buffer;
+	}
+
+      if (is_utf8)
+	return copy_and_hex_encode<uint32_t> (&storage);
+      return copy_and_hex_encode<gdb_byte> (&storage);
     }
 
-  encoding_buffer[k] = '\0';
   return encoding_buffer;
 }
 
-/* The "encoded" form of DECODED, according to GNAT conventions.
-   The result is valid until the next call to ada_encode.  */
-
-char *
-ada_encode (const char *decoded)
-{
-  return ada_encode_1 (decoded, true);
+/* Find the entry for C in the case-folding table.  Return nullptr if
+   the entry does not cover C.  */
+static const utf8_entry *
+find_case_fold_entry (uint32_t c)
+{
+  auto iter = std::lower_bound (std::begin (ada_case_fold),
+				std::end (ada_case_fold),
+				c);
+  if (iter == std::end (ada_case_fold)
+      || c < iter->start
+      || c > iter->end)
+    return nullptr;
+  return &*iter;
 }
 
 /* Return NAME folded to lower case, or, if surrounded by single
-   quotes, unfolded, but with the quotes stripped away.  Result good
-   to next call.  */
+   quotes, unfolded, but with the quotes stripped away.  If
+   THROW_ON_ERROR is true, encoding failures will throw an exception
+   rather than emitting a warning.  Result good to next call.  */
 
-static char *
-ada_fold_name (const char *name)
+static const char *
+ada_fold_name (std::string_view name, bool throw_on_error = false)
 {
-  static char *fold_buffer = NULL;
-  static size_t fold_buffer_size = 0;
-
-  int len = strlen (name);
-  GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
+  static std::string fold_storage;
 
-  if (name[0] == '\'')
-    {
-      strncpy (fold_buffer, name + 1, len - 2);
-      fold_buffer[len - 2] = '\000';
-    }
+  if (!name.empty () && name[0] == '\'')
+    fold_storage = name.substr (1, name.size () - 2);
   else
     {
-      int i;
+      /* Why convert to UTF-32 and implement our own case-folding,
+	 rather than convert to wchar_t and use the platform's
+	 functions?  I'm glad you asked.
+
+	 The main problem is that GNAT implements an unusual rule for
+	 case folding.  For ASCII letters, letters in single-byte
+	 encodings (such as ISO-8859-*), and Unicode letters that fit
+	 in a single byte (i.e., code point is <= 0xff), the letter is
+	 folded to lower case.  Other Unicode letters are folded to
+	 upper case.
+
+	 This rule means that the code must be able to examine the
+	 value of the character.  And, some hosts do not use Unicode
+	 for wchar_t, so examining the value of such characters is
+	 forbidden.  */
+      auto_obstack storage;
+      try
+	{
+	  convert_between_encodings
+	    (host_charset (), HOST_UTF32,
+	     (const gdb_byte *) name.data (),
+	     name.length (), 1,
+	     &storage, translit_none);
+	}
+      catch (const gdb_exception &)
+	{
+	  if (throw_on_error)
+	    throw;
+
+	  static bool warned = false;
+
+	  /* Converting to UTF-32 shouldn't fail, so if it doesn't, we
+	     might like to know why.  */
+	  if (!warned)
+	    {
+	      warned = true;
+	      warning (_("could not convert '%s' from the host encoding (%s) to UTF-32.\n"
+			 "This normally should not happen, please file a bug report."),
+		       std::string (name).c_str (), host_charset ());
+	    }
+
+	  /* We don't try to recover from errors; just return the
+	     original string.  */
+	  fold_storage = name;
+	  return fold_storage.c_str ();
+	}
+
+      bool is_utf8 = ada_source_charset == ada_utf8;
+      uint32_t *chars = (uint32_t *) obstack_base (&storage);
+      int num_chars = obstack_object_size (&storage) / sizeof (uint32_t);
+      for (int i = 0; i < num_chars; ++i)
+	{
+	  const struct utf8_entry *entry = find_case_fold_entry (chars[i]);
+	  if (entry != nullptr)
+	    {
+	      uint32_t low = chars[i] + entry->lower_delta;
+	      if (!is_utf8 || low <= 0xff)
+		chars[i] = low;
+	      else
+		chars[i] = chars[i] + entry->upper_delta;
+	    }
+	}
 
-      for (i = 0; i <= len; i += 1)
-        fold_buffer[i] = tolower (name[i]);
+      /* Now convert back to ordinary characters.  */
+      auto_obstack reconverted;
+      try
+	{
+	  convert_between_encodings (HOST_UTF32,
+				     host_charset (),
+				     (const gdb_byte *) chars,
+				     num_chars * sizeof (uint32_t),
+				     sizeof (uint32_t),
+				     &reconverted,
+				     translit_none);
+	  obstack_1grow (&reconverted, '\0');
+	  fold_storage = std::string ((const char *) obstack_base (&reconverted));
+	}
+      catch (const gdb_exception &)
+	{
+	  if (throw_on_error)
+	    throw;
+
+	  static bool warned = false;
+
+	  /* Converting back from UTF-32 shouldn't normally fail, but
+	     there are some host encodings without upper/lower
+	     equivalence.  */
+	  if (!warned)
+	    {
+	      warned = true;
+	      warning (_("could not convert the lower-cased variant of '%s'\n"
+			 "from UTF-32 to the host encoding (%s)."),
+		       std::string (name).c_str (), host_charset ());
+	    }
+
+	  /* We don't try to recover from errors; just return the
+	     original string.  */
+	  fold_storage = name;
+	}
     }
 
-  return fold_buffer;
+  return fold_storage.c_str ();
+}
+
+/* The "encoded" form of DECODED, according to GNAT conventions.  If
+   FOLD is true (the default), case-fold any ordinary symbol.  Symbols
+   with <...> quoting are not folded in any case.  */
+
+std::string
+ada_encode (const char *decoded, bool fold)
+{
+  if (fold && decoded[0] != '<')
+    decoded = ada_fold_name (decoded);
+  return ada_encode_1 (decoded, true);
 }
 
 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
@@ -1068,15 +1184,15 @@ ada_remove_trailing_digits (const char *
       int i = *len - 2;
 
       while (i > 0 && isdigit (encoded[i]))
-        i--;
+	i--;
       if (i >= 0 && encoded[i] == '.')
-        *len = i;
+	*len = i;
       else if (i >= 0 && encoded[i] == '$')
-        *len = i;
+	*len = i;
       else if (i >= 2 && startswith (encoded + i - 2, "___"))
-        *len = i - 2;
+	*len = i - 2;
       else if (i >= 1 && startswith (encoded + i - 1, "__"))
-        *len = i - 1;
+	*len = i - 1;
     }
 }
 
@@ -1102,18 +1218,101 @@ ada_remove_po_subprogram_suffix (const c
     *len = *len - 1;
 }
 
-/* If ENCODED follows the GNAT entity encoding conventions, then return
-   the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
-   replaced by ENCODED.  */
+/* If ENCODED ends with a compiler-provided suffix (like ".cold"),
+   then update *LEN to remove the suffix and return the offset of the
+   character just past the ".".  Otherwise, return -1.  */
+
+static int
+remove_compiler_suffix (const char *encoded, int *len)
+{
+  int offset = *len - 1;
+  while (offset > 0 && isalpha (encoded[offset]))
+    --offset;
+  if (offset > 0 && encoded[offset] == '.')
+    {
+      *len = offset;
+      return offset + 1;
+    }
+  return -1;
+}
+
+/* Convert an ASCII hex string to a number.  Reads exactly N
+   characters from STR.  Returns true on success, false if one of the
+   digits was not a hex digit.  */
+static bool
+convert_hex (const char *str, int n, uint32_t *out)
+{
+  uint32_t result = 0;
+
+  for (int i = 0; i < n; ++i)
+    {
+      if (!isxdigit (str[i]))
+	return false;
+      result <<= 4;
+      result |= fromhex (str[i]);
+    }
+
+  *out = result;
+  return true;
+}
+
+/* Convert a wide character from its ASCII hex representation in STR
+   (consisting of exactly N characters) to the host encoding,
+   appending the resulting bytes to OUT.  If N==2 and the Ada source
+   charset is not UTF-8, then hex refers to an encoding in the
+   ADA_SOURCE_CHARSET; otherwise, use UTF-32.  Return true on success.
+   Return false and do not modify OUT on conversion failure.  */
+static bool
+convert_from_hex_encoded (std::string &out, const char *str, int n)
+{
+  uint32_t value;
+
+  if (!convert_hex (str, n, &value))
+    return false;
+  try
+    {
+      auto_obstack bytes;
+      /* In the 'U' case, the hex digits encode the character in the
+	 Ada source charset.  However, if the source charset is UTF-8,
+	 this really means it is a single-byte UTF-32 character.  */
+      if (n == 2 && ada_source_charset != ada_utf8)
+	{
+	  gdb_byte one_char = (gdb_byte) value;
+
+	  convert_between_encodings (ada_source_charset, host_charset (),
+				     &one_char,
+				     sizeof (one_char), sizeof (one_char),
+				     &bytes, translit_none);
+	}
+      else
+	convert_between_encodings (HOST_UTF32, host_charset (),
+				   (const gdb_byte *) &value,
+				   sizeof (value), sizeof (value),
+				   &bytes, translit_none);
+      obstack_1grow (&bytes, '\0');
+      out.append ((const char *) obstack_base (&bytes));
+    }
+  catch (const gdb_exception &)
+    {
+      /* On failure, the caller will just let the encoded form
+	 through, which seems basically reasonable.  */
+      return false;
+    }
+
+  return true;
+}
+
+/* See ada-lang.h.  */
 
 std::string
-ada_decode (const char *encoded)
+ada_decode (const char *encoded, bool wrap, bool operators, bool wide)
 {
-  int i, j;
+  int i;
   int len0;
   const char *p;
   int at_start_name;
   std::string decoded;
+  int suffix = -1;
 
   /* With function descriptors on PPC64, the value of a symbol named
      ".FN", if it exists, is the entry point of the function "FN".  */
@@ -1125,6 +1324,11 @@ ada_decode (const char *encoded)
      if we see this prefix.  */
   if (startswith (encoded, "_ada_"))
     encoded += 5;
+  /* The "___ghost_" prefix is used for ghost entities.  Normally
+     these aren't preserved but when they are, it's useful to see
+     them.  */
+  if (startswith (encoded, "___ghost_"))
+    encoded += 9;
 
   /* If the name starts with '_', then it is not a properly encoded
      name, so do not attempt to decode it.  Similarly, if the name
@@ -1134,6 +1338,8 @@ ada_decode (const char *encoded)
 
   len0 = strlen (encoded);
 
+  suffix = remove_compiler_suffix (encoded, &len0);
+
   ada_remove_trailing_digits (encoded, &len0);
   ada_remove_po_subprogram_suffix (encoded, &len0);
 
@@ -1145,9 +1351,9 @@ ada_decode (const char *encoded)
   if (p != NULL && p - encoded < len0 - 3)
     {
       if (p[3] == 'X')
-        len0 = p - encoded;
+	len0 = p - encoded;
       else
-        goto Suppress;
+	goto Suppress;
     }
 
   /* Remove any trailing TKB suffix.  It tells us that this symbol
@@ -1170,186 +1376,225 @@ ada_decode (const char *encoded)
   if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
     len0 -= 1;
 
-  /* Make decoded big enough for possible expansion by operator name.  */
-
-  decoded.resize (2 * len0 + 1, 'X');
-
   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
 
   if (len0 > 1 && isdigit (encoded[len0 - 1]))
     {
       i = len0 - 2;
       while ((i >= 0 && isdigit (encoded[i]))
-             || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
-        i -= 1;
+	     || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
+	i -= 1;
       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
-        len0 = i - 1;
-      else if (encoded[i] == '$')
-        len0 = i;
+	len0 = i - 1;
+      else if (i >= 0 && encoded[i] == '$')
+	len0 = i;
     }
 
   /* The first few characters that are not alphabetic are not part
      of any encoding we use, so we can copy them over verbatim.  */
 
-  for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
-    decoded[j] = encoded[i];
+  for (i = 0; i < len0 && !isalpha (encoded[i]); i += 1)
+    decoded.push_back (encoded[i]);
 
   at_start_name = 1;
   while (i < len0)
     {
       /* Is this a symbol function?  */
-      if (at_start_name && encoded[i] == 'O')
-        {
-          int k;
-
-          for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
-            {
-              int op_len = strlen (ada_opname_table[k].encoded);
-              if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
-                            op_len - 1) == 0)
-                  && !isalnum (encoded[i + op_len]))
-                {
-                  strcpy (&decoded.front() + j, ada_opname_table[k].decoded);
-                  at_start_name = 0;
-                  i += op_len;
-                  j += strlen (ada_opname_table[k].decoded);
-                  break;
-                }
-            }
-          if (ada_opname_table[k].encoded != NULL)
-            continue;
-        }
+      if (operators && at_start_name && encoded[i] == 'O')
+	{
+	  int k;
+
+	  for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
+	    {
+	      int op_len = strlen (ada_opname_table[k].encoded);
+	      if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
+			    op_len - 1) == 0)
+		  && !isalnum (encoded[i + op_len]))
+		{
+		  decoded.append (ada_opname_table[k].decoded);
+		  at_start_name = 0;
+		  i += op_len;
+		  break;
+		}
+	    }
+	  if (ada_opname_table[k].encoded != NULL)
+	    continue;
+	}
       at_start_name = 0;
 
       /* Replace "TK__" with "__", which will eventually be translated
-         into "." (just below).  */
+	 into "." (just below).  */
 
       if (i < len0 - 4 && startswith (encoded + i, "TK__"))
-        i += 2;
+	i += 2;
 
       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
-         be translated into "." (just below).  These are internal names
-         generated for anonymous blocks inside which our symbol is nested.  */
+	 be translated into "." (just below).  These are internal names
+	 generated for anonymous blocks inside which our symbol is nested.  */
 
       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
-          && encoded [i+2] == 'B' && encoded [i+3] == '_'
-          && isdigit (encoded [i+4]))
-        {
-          int k = i + 5;
-          
-          while (k < len0 && isdigit (encoded[k]))
-            k++;  /* Skip any extra digit.  */
-
-          /* Double-check that the "__B_{DIGITS}+" sequence we found
-             is indeed followed by "__".  */
-          if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
-            i = k;
-        }
+	  && encoded [i+2] == 'B' && encoded [i+3] == '_'
+	  && isdigit (encoded [i+4]))
+	{
+	  int k = i + 5;
+	  
+	  while (k < len0 && isdigit (encoded[k]))
+	    k++;  /* Skip any extra digit.  */
+
+	  /* Double-check that the "__B_{DIGITS}+" sequence we found
+	     is indeed followed by "__".  */
+	  if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
+	    i = k;
+	}
 
       /* Remove _E{DIGITS}+[sb] */
 
       /* Just as for protected object subprograms, there are 2 categories
-         of subprograms created by the compiler for each entry.  The first
-         one implements the actual entry code, and has a suffix following
-         the convention above; the second one implements the barrier and
-         uses the same convention as above, except that the 'E' is replaced
-         by a 'B'.
-
-         Just as above, we do not decode the name of barrier functions
-         to give the user a clue that the code he is debugging has been
-         internally generated.  */
+	 of subprograms created by the compiler for each entry.  The first
+	 one implements the actual entry code, and has a suffix following
+	 the convention above; the second one implements the barrier and
+	 uses the same convention as above, except that the 'E' is replaced
+	 by a 'B'.
+
+	 Just as above, we do not decode the name of barrier functions
+	 to give the user a clue that the code he is debugging has been
+	 internally generated.  */
 
       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
-          && isdigit (encoded[i+2]))
-        {
-          int k = i + 3;
-
-          while (k < len0 && isdigit (encoded[k]))
-            k++;
-
-          if (k < len0
-              && (encoded[k] == 'b' || encoded[k] == 's'))
-            {
-              k++;
-              /* Just as an extra precaution, make sure that if this
-                 suffix is followed by anything else, it is a '_'.
-                 Otherwise, we matched this sequence by accident.  */
-              if (k == len0
-                  || (k < len0 && encoded[k] == '_'))
-                i = k;
-            }
-        }
+	  && isdigit (encoded[i+2]))
+	{
+	  int k = i + 3;
+
+	  while (k < len0 && isdigit (encoded[k]))
+	    k++;
+
+	  if (k < len0
+	      && (encoded[k] == 'b' || encoded[k] == 's'))
+	    {
+	      k++;
+	      /* Just as an extra precaution, make sure that if this
+		 suffix is followed by anything else, it is a '_'.
+		 Otherwise, we matched this sequence by accident.  */
+	      if (k == len0
+		  || (k < len0 && encoded[k] == '_'))
+		i = k;
+	    }
+	}
 
       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
-         the GNAT front-end in protected object subprograms.  */
+	 the GNAT front-end in protected object subprograms.  */
 
       if (i < len0 + 3
-          && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
-        {
-          /* Backtrack a bit up until we reach either the begining of
-             the encoded name, or "__".  Make sure that we only find
-             digits or lowercase characters.  */
-          const char *ptr = encoded + i - 1;
-
-          while (ptr >= encoded && is_lower_alphanum (ptr[0]))
-            ptr--;
-          if (ptr < encoded
-              || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
-            i++;
-        }
+	  && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
+	{
+	  /* Backtrack a bit up until we reach either the begining of
+	     the encoded name, or "__".  Make sure that we only find
+	     digits or lowercase characters.  */
+	  const char *ptr = encoded + i - 1;
+
+	  while (ptr >= encoded && is_lower_alphanum (ptr[0]))
+	    ptr--;
+	  if (ptr < encoded
+	      || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
+	    i++;
+	}
+
+      if (wide && i < len0 + 3 && encoded[i] == 'U' && isxdigit (encoded[i + 1]))
+	{
+	  if (convert_from_hex_encoded (decoded, &encoded[i + 1], 2))
+	    {
+	      i += 3;
+	      continue;
+	    }
+	}
+      else if (wide && i < len0 + 5 && encoded[i] == 'W' && isxdigit (encoded[i + 1]))
+	{
+	  if (convert_from_hex_encoded (decoded, &encoded[i + 1], 4))
+	    {
+	      i += 5;
+	      continue;
+	    }
+	}
+      else if (wide && i < len0 + 10 && encoded[i] == 'W' && encoded[i + 1] == 'W'
+	       && isxdigit (encoded[i + 2]))
+	{
+	  if (convert_from_hex_encoded (decoded, &encoded[i + 2], 8))
+	    {
+	      i += 10;
+	      continue;
+	    }
+	}
 
       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
-        {
-          /* This is a X[bn]* sequence not separated from the previous
-             part of the name with a non-alpha-numeric character (in other
-             words, immediately following an alpha-numeric character), then
-             verify that it is placed at the end of the encoded name.  If
-             not, then the encoding is not valid and we should abort the
-             decoding.  Otherwise, just skip it, it is used in body-nested
-             package names.  */
-          do
-            i += 1;
-          while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
-          if (i < len0)
-            goto Suppress;
-        }
+	{
+	  /* This is a X[bn]* sequence not separated from the previous
+	     part of the name with a non-alpha-numeric character (in other
+	     words, immediately following an alpha-numeric character), then
+	     verify that it is placed at the end of the encoded name.  If
+	     not, then the encoding is not valid and we should abort the
+	     decoding.  Otherwise, just skip it, it is used in body-nested
+	     package names.  */
+	  do
+	    i += 1;
+	  while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
+	  if (i < len0)
+	    goto Suppress;
+	}
       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
-        {
-         /* Replace '__' by '.'.  */
-          decoded[j] = '.';
-          at_start_name = 1;
-          i += 2;
-          j += 1;
-        }
-      else
-        {
-          /* It's a character part of the decoded name, so just copy it
-             over.  */
-          decoded[j] = encoded[i];
-          i += 1;
-          j += 1;
-        }
+	{
+	 /* Replace '__' by '.'.  */
+	  decoded.push_back ('.');
+	  at_start_name = 1;
+	  i += 2;
+	}
+      else
+	{
+	  /* It's a character part of the decoded name, so just copy it
+	     over.  */
+	  decoded.push_back (encoded[i]);
+	  i += 1;
+	}
     }
-  decoded.resize (j);
 
   /* Decoded names should never contain any uppercase character.
      Double-check this, and abort the decoding if we find one.  */
 
-  for (i = 0; i < decoded.length(); ++i)
-    if (isupper (decoded[i]) || decoded[i] == ' ')
-      goto Suppress;
+  if (operators)
+    {
+      for (i = 0; i < decoded.length(); ++i)
+	if (isupper (decoded[i]) || decoded[i] == ' ')
+	  goto Suppress;
+    }
+
+  /* If the compiler added a suffix, append it now.  */
+  if (suffix >= 0)
+    decoded = decoded + "[" + &encoded[suffix] + "]";
 
   return decoded;
 
 Suppress:
+  if (!wrap)
+    return {};
+
   if (encoded[0] == '<')
     decoded = encoded;
   else
     decoded = '<' + std::string(encoded) + '>';
   return decoded;
+}
 
+#ifdef GDB_SELF_TEST
+
+static void
+ada_decode_tests ()
+{
+  /* This isn't valid, but used to cause a crash.  PR gdb/30639.  The
+     result does not really matter very much.  */
+  SELF_CHECK (ada_decode ("44") == "44");
 }
 
+#endif
+
 /* Table for keeping permanent unique copies of decoded names.  Once
    allocated, names in this table are never released.  While this is a
    storage leak, it should not be significant unless there are massive
@@ -1376,7 +1621,7 @@ ada_decode_symbol (const struct general_
 
   if (!gsymbol->ada_mangled)
     {
-      std::string decoded = ada_decode (gsymbol->name);
+      std::string decoded = ada_decode (gsymbol->linkage_name ());
       struct obstack *obstack = gsymbol->language_specific.obstack;
 
       gsymbol->ada_mangled = 1;
@@ -1384,72 +1629,27 @@ ada_decode_symbol (const struct general_
       if (obstack != NULL)
 	*resultp = obstack_strdup (obstack, decoded.c_str ());
       else
-        {
+	{
 	  /* Sometimes, we can't find a corresponding objfile, in
 	     which case, we put the result on the heap.  Since we only
 	     decode when needed, we hope this usually does not cause a
 	     significant memory leak (FIXME).  */
 
-          char **slot = (char **) htab_find_slot (decoded_names_store,
-                                                  decoded.c_str (), INSERT);
+	  char **slot = (char **) htab_find_slot (decoded_names_store,
+						  decoded.c_str (), INSERT);
 
-          if (*slot == NULL)
-            *slot = xstrdup (decoded.c_str ());
-          *resultp = *slot;
-        }
+	  if (*slot == NULL)
+	    *slot = xstrdup (decoded.c_str ());
+	  *resultp = *slot;
+	}
     }
 
   return *resultp;
 }
 
-static char *
-ada_la_decode (const char *encoded, int options)
-{
-  return xstrdup (ada_decode (encoded).c_str ());
-}
-
-/* Implement la_sniff_from_mangled_name for Ada.  */
-
-static int
-ada_sniff_from_mangled_name (const char *mangled, char **out)
-{
-  std::string demangled = ada_decode (mangled);
-
-  *out = NULL;
-
-  if (demangled != mangled && demangled[0] != '<')
-    {
-      /* Set the gsymbol language to Ada, but still return 0.
-	 Two reasons for that:
-
-	 1. For Ada, we prefer computing the symbol's decoded name
-	 on the fly rather than pre-compute it, in order to save
-	 memory (Ada projects are typically very large).
-
-	 2. There are some areas in the definition of the GNAT
-	 encoding where, with a bit of bad luck, we might be able
-	 to decode a non-Ada symbol, generating an incorrect
-	 demangled name (Eg: names ending with "TB" for instance
-	 are identified as task bodies and so stripped from
-	 the decoded name returned).
-
-	 Returning 1, here, but not setting *DEMANGLED, helps us get a
-	 little bit of the best of both worlds.  Because we're last,
-	 we should not affect any of the other languages that were
-	 able to demangle the symbol before us; we get to correctly
-	 tag Ada symbols as such; and even if we incorrectly tagged a
-	 non-Ada symbol, which should be rare, any routing through the
-	 Ada language should be transparent (Ada tries to behave much
-	 like C/C++ with non-Ada symbols).  */
-      return 1;
-    }
-
-  return 0;
-}
-
 
 
-                                /* Arrays */
+				/* Arrays */
 
 /* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
    generated by the GNAT compiler to describe the index type used
@@ -1481,7 +1681,7 @@ ada_fixup_array_indexes_type (struct typ
 
   if (index_desc_type == NULL)
     return;
-  gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
+  gdb_assert (index_desc_type->num_fields () > 0);
 
   /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
      to check one field only, no need to check them all).  If not, return
@@ -1490,34 +1690,22 @@ ada_fixup_array_indexes_type (struct typ
      If our INDEX_DESC_TYPE was generated using the older encoding,
      the field type should be a meaningless integer type whose name
      is not equal to the field name.  */
-  if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
-      && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
-                 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
+  if (index_desc_type->field (0).type ()->name () != NULL
+      && strcmp (index_desc_type->field (0).type ()->name (),
+		 index_desc_type->field (0).name ()) == 0)
     return;
 
   /* Fixup each field of INDEX_DESC_TYPE.  */
-  for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
+  for (i = 0; i < index_desc_type->num_fields (); i++)
    {
-     const char *name = TYPE_FIELD_NAME (index_desc_type, i);
+     const char *name = index_desc_type->field (i).name ();
      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
 
      if (raw_type)
-       TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
+       index_desc_type->field (i).set_type (raw_type);
    }
 }
 
-/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
-
-static const char *bound_name[] = {
-  "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
-  "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
-};
-
-/* Maximum number of array dimensions we are prepared to handle.  */
-
-#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
-
-
 /* The desc_* routines return primitive portions of array descriptors
    (fat pointers).  */
 
@@ -1530,13 +1718,13 @@ desc_base_type (struct type *type)
   if (type == NULL)
     return NULL;
   type = ada_check_typedef (type);
-  if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
+  if (type->code () == TYPE_CODE_TYPEDEF)
     type = ada_typedef_target_type (type);
 
   if (type != NULL
-      && (TYPE_CODE (type) == TYPE_CODE_PTR
-          || TYPE_CODE (type) == TYPE_CODE_REF))
-    return ada_check_typedef (TYPE_TARGET_TYPE (type));
+      && (type->code () == TYPE_CODE_PTR
+	  || type->code () == TYPE_CODE_REF))
+    return ada_check_typedef (type->target_type ());
   else
     return type;
 }
@@ -1567,9 +1755,9 @@ thin_descriptor_type (struct type *type)
       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
 
       if (alt_type == NULL)
-        return base_type;
+	return base_type;
       else
-        return alt_type;
+	return alt_type;
     }
 }
 
@@ -1578,15 +1766,15 @@ thin_descriptor_type (struct type *type)
 static struct value *
 thin_data_pntr (struct value *val)
 {
-  struct type *type = ada_check_typedef (value_type (val));
+  struct type *type = ada_check_typedef (val->type ());
   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
 
   data_type = lookup_pointer_type (data_type);
 
-  if (TYPE_CODE (type) == TYPE_CODE_PTR)
-    return value_cast (data_type, value_copy (val));
+  if (type->code () == TYPE_CODE_PTR)
+    return value_cast (data_type, val->copy ());
   else
-    return value_from_longest (data_type, value_address (val));
+    return value_from_longest (data_type, val->address ());
 }
 
 /* True iff TYPE indicates a "thick" array pointer type.  */
@@ -1595,8 +1783,8 @@ static int
 is_thick_pntr (struct type *type)
 {
   type = desc_base_type (type);
-  return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
-          && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
+  return (type != NULL && type->code () == TYPE_CODE_STRUCT
+	  && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
 }
 
 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
@@ -1615,16 +1803,16 @@ desc_bounds_type (struct type *type)
     {
       type = thin_descriptor_type (type);
       if (type == NULL)
-        return NULL;
+	return NULL;
       r = lookup_struct_elt_type (type, "BOUNDS", 1);
       if (r != NULL)
-        return ada_check_typedef (r);
+	return ada_check_typedef (r);
     }
-  else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+  else if (type->code () == TYPE_CODE_STRUCT)
     {
       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
       if (r != NULL)
-        return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
+	return ada_check_typedef (ada_check_typedef (r)->target_type ());
     }
   return NULL;
 }
@@ -1635,42 +1823,42 @@ desc_bounds_type (struct type *type)
 static struct value *
 desc_bounds (struct value *arr)
 {
-  struct type *type = ada_check_typedef (value_type (arr));
+  struct type *type = ada_check_typedef (arr->type ());
 
   if (is_thin_pntr (type))
     {
       struct type *bounds_type =
-        desc_bounds_type (thin_descriptor_type (type));
+	desc_bounds_type (thin_descriptor_type (type));
       LONGEST addr;
 
       if (bounds_type == NULL)
-        error (_("Bad GNAT array descriptor"));
+	error (_("Bad GNAT array descriptor"));
 
       /* NOTE: The following calculation is not really kosher, but
-         since desc_type is an XVE-encoded type (and shouldn't be),
-         the correct calculation is a real pain.  FIXME (and fix GCC).  */
-      if (TYPE_CODE (type) == TYPE_CODE_PTR)
-        addr = value_as_long (arr);
+	 since desc_type is an XVE-encoded type (and shouldn't be),
+	 the correct calculation is a real pain.  FIXME (and fix GCC).  */
+      if (type->code () == TYPE_CODE_PTR)
+	addr = value_as_long (arr);
       else
-        addr = value_address (arr);
+	addr = arr->address ();
 
       return
-        value_from_longest (lookup_pointer_type (bounds_type),
-                            addr - TYPE_LENGTH (bounds_type));
+	value_from_longest (lookup_pointer_type (bounds_type),
+			    addr - bounds_type->length ());
     }
 
   else if (is_thick_pntr (type))
     {
-      struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
+      struct value *p_bounds = value_struct_elt (&arr, {}, "P_BOUNDS", NULL,
 					       _("Bad GNAT array descriptor"));
-      struct type *p_bounds_type = value_type (p_bounds);
+      struct type *p_bounds_type = p_bounds->type ();
 
       if (p_bounds_type
-	  && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
+	  && p_bounds_type->code () == TYPE_CODE_PTR)
 	{
-	  struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
+	  struct type *target_type = p_bounds_type->target_type ();
 
-	  if (TYPE_STUB (target_type))
+	  if (target_type->is_stub ())
 	    p_bounds = value_cast (lookup_pointer_type
 				   (ada_check_typedef (target_type)),
 				   p_bounds);
@@ -1690,7 +1878,7 @@ desc_bounds (struct value *arr)
 static int
 fat_pntr_bounds_bitpos (struct type *type)
 {
-  return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
+  return desc_base_type (type)->field (1).loc_bitpos ();
 }
 
 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
@@ -1701,10 +1889,10 @@ fat_pntr_bounds_bitsize (struct type *ty
 {
   type = desc_base_type (type);
 
-  if (TYPE_FIELD_BITSIZE (type, 1) > 0)
-    return TYPE_FIELD_BITSIZE (type, 1);
+  if (type->field (1).bitsize () > 0)
+    return type->field (1).bitsize ();
   else
-    return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
+    return 8 * ada_check_typedef (type->field (1).type ())->length ();
 }
 
 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
@@ -1719,14 +1907,14 @@ desc_data_target_type (struct type *type
 
   /* NOTE: The following is bogus; see comment in desc_bounds.  */
   if (is_thin_pntr (type))
-    return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
+    return desc_base_type (thin_descriptor_type (type)->field (1).type ());
   else if (is_thick_pntr (type))
     {
       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
 
       if (data_type
-	  && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
-	return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
+	  && ada_check_typedef (data_type)->code () == TYPE_CODE_PTR)
+	return ada_check_typedef (data_type->target_type ());
     }
 
   return NULL;
@@ -1738,13 +1926,13 @@ desc_data_target_type (struct type *type
 static struct value *
 desc_data (struct value *arr)
 {
-  struct type *type = value_type (arr);
+  struct type *type = arr->type ();
 
   if (is_thin_pntr (type))
     return thin_data_pntr (arr);
   else if (is_thick_pntr (type))
-    return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
-                             _("Bad GNAT array descriptor"));
+    return value_struct_elt (&arr, {}, "P_ARRAY", NULL,
+			     _("Bad GNAT array descriptor"));
   else
     return NULL;
 }
@@ -1756,7 +1944,7 @@ desc_data (struct value *arr)
 static int
 fat_pntr_data_bitpos (struct type *type)
 {
-  return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
+  return desc_base_type (type)->field (0).loc_bitpos ();
 }
 
 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
@@ -1767,10 +1955,10 @@ fat_pntr_data_bitsize (struct type *type
 {
   type = desc_base_type (type);
 
-  if (TYPE_FIELD_BITSIZE (type, 0) > 0)
-    return TYPE_FIELD_BITSIZE (type, 0);
+  if (type->field (0).bitsize () > 0)
+    return type->field (0).bitsize ();
   else
-    return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
+    return TARGET_CHAR_BIT * type->field (0).type ()->length ();
 }
 
 /* If BOUNDS is an array-bounds structure (or pointer to one), return
@@ -1780,8 +1968,11 @@ fat_pntr_data_bitsize (struct type *type
 static struct value *
 desc_one_bound (struct value *bounds, int i, int which)
 {
-  return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
-                           _("Bad GNAT array descriptor bounds"));
+  char bound_name[20];
+  xsnprintf (bound_name, sizeof (bound_name), "%cB%d",
+	     which ? 'U' : 'L', i - 1);
+  return value_struct_elt (&bounds, {}, bound_name, NULL,
+			   _("Bad GNAT array descriptor bounds"));
 }
 
 /* If BOUNDS is an array-bounds structure type, return the bit position
@@ -1791,7 +1982,7 @@ desc_one_bound (struct value *bounds, in
 static int
 desc_bound_bitpos (struct type *type, int i, int which)
 {
-  return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
+  return desc_base_type (type)->field (2 * i + which - 2).loc_bitpos ();
 }
 
 /* If BOUNDS is an array-bounds structure type, return the bit field size
@@ -1803,10 +1994,10 @@ desc_bound_bitsize (struct type *type, i
 {
   type = desc_base_type (type);
 
-  if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
-    return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
+  if (type->field (2 * i + which - 2).bitsize () > 0)
+    return type->field (2 * i + which - 2).bitsize ();
   else
-    return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
+    return 8 * type->field (2 * i + which - 2).type ()->length ();
 }
 
 /* If TYPE is the type of an array-bounds structure, the type of its
@@ -1817,8 +2008,12 @@ desc_index_type (struct type *type, int
 {
   type = desc_base_type (type);
 
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
-    return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
+  if (type->code () == TYPE_CODE_STRUCT)
+    {
+      char bound_name[20];
+      xsnprintf (bound_name, sizeof (bound_name), "LB%d", i - 1);
+      return lookup_struct_elt_type (type, bound_name, 1);
+    }
   else
     return NULL;
 }
@@ -1832,7 +2027,7 @@ desc_arity (struct type *type)
   type = desc_base_type (type);
 
   if (type != NULL)
-    return TYPE_NFIELDS (type) / 2;
+    return type->num_fields () / 2;
   return 0;
 }
 
@@ -1846,8 +2041,8 @@ ada_is_direct_array_type (struct type *t
   if (type == NULL)
     return 0;
   type = ada_check_typedef (type);
-  return (TYPE_CODE (type) == TYPE_CODE_ARRAY
-          || ada_is_array_descriptor_type (type));
+  return (type->code () == TYPE_CODE_ARRAY
+	  || ada_is_array_descriptor_type (type));
 }
 
 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
@@ -1856,10 +2051,10 @@ ada_is_direct_array_type (struct type *t
 static int
 ada_is_array_type (struct type *type)
 {
-  while (type != NULL 
-	 && (TYPE_CODE (type) == TYPE_CODE_PTR 
-	     || TYPE_CODE (type) == TYPE_CODE_REF))
-    type = TYPE_TARGET_TYPE (type);
+  while (type != NULL
+	 && (type->code () == TYPE_CODE_PTR
+	     || type->code () == TYPE_CODE_REF))
+    type = type->target_type ();
   return ada_is_direct_array_type (type);
 }
 
@@ -1871,10 +2066,10 @@ ada_is_simple_array_type (struct type *t
   if (type == NULL)
     return 0;
   type = ada_check_typedef (type);
-  return (TYPE_CODE (type) == TYPE_CODE_ARRAY
-          || (TYPE_CODE (type) == TYPE_CODE_PTR
-              && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
-                 == TYPE_CODE_ARRAY));
+  return (type->code () == TYPE_CODE_ARRAY
+	  || (type->code () == TYPE_CODE_PTR
+	      && (ada_check_typedef (type->target_type ())->code ()
+		  == TYPE_CODE_ARRAY)));
 }
 
 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
@@ -1888,27 +2083,10 @@ ada_is_array_descriptor_type (struct typ
     return 0;
   type = ada_check_typedef (type);
   return (data_type != NULL
-	  && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
+	  && data_type->code () == TYPE_CODE_ARRAY
 	  && desc_arity (desc_bounds_type (type)) > 0);
 }
 
-/* Non-zero iff type is a partially mal-formed GNAT array
-   descriptor.  FIXME: This is to compensate for some problems with
-   debugging output from GNAT.  Re-examine periodically to see if it
-   is still needed.  */
-
-int
-ada_is_bogus_array_descriptor (struct type *type)
-{
-  return
-    type != NULL
-    && TYPE_CODE (type) == TYPE_CODE_STRUCT
-    && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
-        || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
-    && !ada_is_array_descriptor_type (type);
-}
-
-
 /* If ARR has a record type in the form of a standard GNAT array descriptor,
    (fat pointer) returns the type of the array data described---specifically,
    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
@@ -1920,21 +2098,21 @@ ada_is_bogus_array_descriptor (struct ty
 static struct type *
 ada_type_of_array (struct value *arr, int bounds)
 {
-  if (ada_is_constrained_packed_array_type (value_type (arr)))
-    return decode_constrained_packed_array_type (value_type (arr));
+  if (ada_is_constrained_packed_array_type (arr->type ()))
+    return decode_constrained_packed_array_type (arr->type ());
 
-  if (!ada_is_array_descriptor_type (value_type (arr)))
-    return value_type (arr);
+  if (!ada_is_array_descriptor_type (arr->type ()))
+    return arr->type ();
 
   if (!bounds)
     {
       struct type *array_type =
-	ada_check_typedef (desc_data_target_type (value_type (arr)));
+	ada_check_typedef (desc_data_target_type (arr->type ()));
+
+      if (ada_is_unconstrained_packed_array_type (arr->type ()))
+	array_type->field (0).set_bitsize
+	  (decode_packed_array_bitsize (arr->type ()));
 
-      if (ada_is_unconstrained_packed_array_type (value_type (arr)))
-	TYPE_FIELD_BITSIZE (array_type, 0) =
-	  decode_packed_array_bitsize (value_type (arr));
-      
       return array_type;
     }
   else
@@ -1943,49 +2121,51 @@ ada_type_of_array (struct value *arr, in
       int arity;
       struct value *descriptor;
 
-      elt_type = ada_array_element_type (value_type (arr), -1);
-      arity = ada_array_arity (value_type (arr));
+      elt_type = ada_array_element_type (arr->type (), -1);
+      arity = ada_array_arity (arr->type ());
 
       if (elt_type == NULL || arity == 0)
-        return ada_check_typedef (value_type (arr));
+	return ada_check_typedef (arr->type ());
 
       descriptor = desc_bounds (arr);
       if (value_as_long (descriptor) == 0)
-        return NULL;
+	return NULL;
       while (arity > 0)
-        {
-          struct type *range_type = alloc_type_copy (value_type (arr));
-          struct type *array_type = alloc_type_copy (value_type (arr));
-          struct value *low = desc_one_bound (descriptor, arity, 0);
-          struct value *high = desc_one_bound (descriptor, arity, 1);
-
-          arity -= 1;
-          create_static_range_type (range_type, value_type (low),
-				    longest_to_int (value_as_long (low)),
-				    longest_to_int (value_as_long (high)));
-          elt_type = create_array_type (array_type, elt_type, range_type);
+	{
+	  type_allocator alloc (arr->type ());
+	  struct value *low = desc_one_bound (descriptor, arity, 0);
+	  struct value *high = desc_one_bound (descriptor, arity, 1);
+
+	  arity -= 1;
+	  struct type *range_type
+	    = create_static_range_type (alloc, low->type (),
+					longest_to_int (value_as_long (low)),
+					longest_to_int (value_as_long (high)));
+	  elt_type = create_array_type (alloc, elt_type, range_type);
+	  INIT_GNAT_SPECIFIC (elt_type);
 
-	  if (ada_is_unconstrained_packed_array_type (value_type (arr)))
+	  if (ada_is_unconstrained_packed_array_type (arr->type ()))
 	    {
 	      /* We need to store the element packed bitsize, as well as
-	         recompute the array size, because it was previously
+		 recompute the array size, because it was previously
 		 computed based on the unpacked element size.  */
 	      LONGEST lo = value_as_long (low);
 	      LONGEST hi = value_as_long (high);
 
-	      TYPE_FIELD_BITSIZE (elt_type, 0) =
-		decode_packed_array_bitsize (value_type (arr));
+	      elt_type->field (0).set_bitsize
+		(decode_packed_array_bitsize (arr->type ()));
+
 	      /* If the array has no element, then the size is already
-	         zero, and does not need to be recomputed.  */
+		 zero, and does not need to be recomputed.  */
 	      if (lo < hi)
 		{
 		  int array_bitsize =
-		        (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
+			(hi - lo + 1) * elt_type->field (0).bitsize ();
 
-		  TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
+		  elt_type->set_length ((array_bitsize + 7) / 8);
 		}
 	    }
-        }
+	}
 
       return lookup_pointer_type (elt_type);
     }
@@ -1999,15 +2179,15 @@ ada_type_of_array (struct value *arr, in
 struct value *
 ada_coerce_to_simple_array_ptr (struct value *arr)
 {
-  if (ada_is_array_descriptor_type (value_type (arr)))
+  if (ada_is_array_descriptor_type (arr->type ()))
     {
       struct type *arrType = ada_type_of_array (arr, 1);
 
       if (arrType == NULL)
-        return NULL;
-      return value_cast (arrType, value_copy (desc_data (arr)));
+	return NULL;
+      return value_cast (arrType, desc_data (arr)->copy ());
     }
-  else if (ada_is_constrained_packed_array_type (value_type (arr)))
+  else if (ada_is_constrained_packed_array_type (arr->type ()))
     return decode_constrained_packed_array (arr);
   else
     return arr;
@@ -2020,16 +2200,15 @@ ada_coerce_to_simple_array_ptr (struct v
 struct value *
 ada_coerce_to_simple_array (struct value *arr)
 {
-  if (ada_is_array_descriptor_type (value_type (arr)))
+  if (ada_is_array_descriptor_type (arr->type ()))
     {
       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
 
       if (arrVal == NULL)
-        error (_("Bounds unavailable for null array pointer."));
-      ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
+	error (_("Bounds unavailable for null array pointer."));
       return value_ind (arrVal);
     }
-  else if (ada_is_constrained_packed_array_type (value_type (arr)))
+  else if (ada_is_constrained_packed_array_type (arr->type ()))
     return decode_constrained_packed_array (arr);
   else
     return arr;
@@ -2054,7 +2233,7 @@ ada_coerce_to_simple_array_type (struct
 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
 
 static int
-ada_is_packed_array_type  (struct type *type)
+ada_is_gnat_encoded_packed_array_type  (struct type *type)
 {
   if (type == NULL)
     return 0;
@@ -2071,7 +2250,7 @@ ada_is_packed_array_type  (struct type *
 int
 ada_is_constrained_packed_array_type (struct type *type)
 {
-  return ada_is_packed_array_type (type)
+  return ada_is_gnat_encoded_packed_array_type (type)
     && !ada_is_array_descriptor_type (type);
 }
 
@@ -2081,8 +2260,39 @@ ada_is_constrained_packed_array_type (st
 static int
 ada_is_unconstrained_packed_array_type (struct type *type)
 {
-  return ada_is_packed_array_type (type)
-    && ada_is_array_descriptor_type (type);
+  if (!ada_is_array_descriptor_type (type))
+    return 0;
+
+  if (ada_is_gnat_encoded_packed_array_type (type))
+    return 1;
+
+  /* If we saw GNAT encodings, then the above code is sufficient.
+     However, with minimal encodings, we will just have a thick
+     pointer instead.  */
+  if (is_thick_pntr (type))
+    {
+      type = desc_base_type (type);
+      /* The structure's first field is a pointer to an array, so this
+	 fetches the array type.  */
+      type = type->field (0).type ()->target_type ();
+      if (type->code () == TYPE_CODE_TYPEDEF)
+	type = ada_typedef_target_type (type);
+      /* Now we can see if the array elements are packed.  */
+      return type->field (0).bitsize () > 0;
+    }
+
+  return 0;
+}
+
+/* Return true if TYPE is a (Gnat-encoded) constrained packed array
+   type, or if it is an ordinary (non-Gnat-encoded) packed array.  */
+
+static bool
+ada_is_any_packed_array_type (struct type *type)
+{
+  return (ada_is_constrained_packed_array_type (type)
+	  || (type->code () == TYPE_CODE_ARRAY
+	      && type->field (0).bitsize () % 8 != 0));
 }
 
 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
@@ -2098,7 +2308,7 @@ decode_packed_array_bitsize (struct type
   /* Access to arrays implemented as fat pointers are encoded as a typedef
      of the fat pointer type.  We need the name of the fat pointer type
      to do the decoding, so strip the typedef layer.  */
-  if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
+  if (type->code () == TYPE_CODE_TYPEDEF)
     type = ada_typedef_target_type (type);
 
   raw_name = ada_type_name (ada_check_typedef (type));
@@ -2109,7 +2319,15 @@ decode_packed_array_bitsize (struct type
     return 0;
 
   tail = strstr (raw_name, "___XP");
-  gdb_assert (tail != NULL);
+  if (tail == nullptr)
+    {
+      gdb_assert (is_thick_pntr (type));
+      /* The structure's first field is a pointer to an array, so this
+	 fetches the array type.  */
+      type = type->field (0).type ()->target_type ();
+      /* Now we can see if the array elements are packed.  */
+      return type->field (0).bitsize ();
+    }
 
   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
     {
@@ -2148,38 +2366,40 @@ constrained_packed_array_type (struct ty
   LONGEST low_bound, high_bound;
 
   type = ada_check_typedef (type);
-  if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
+  if (type->code () != TYPE_CODE_ARRAY)
     return type;
 
   index_type_desc = ada_find_parallel_type (type, "___XA");
   if (index_type_desc)
-    index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
+    index_type = to_fixed_range_type (index_type_desc->field (0).type (),
 				      NULL);
   else
-    index_type = TYPE_INDEX_TYPE (type);
+    index_type = type->index_type ();
 
-  new_type = alloc_type_copy (type);
+  type_allocator alloc (type);
   new_elt_type =
-    constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
+    constrained_packed_array_type (ada_check_typedef (type->target_type ()),
 				   elt_bits);
-  create_array_type (new_type, new_elt_type, index_type);
-  TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
-  TYPE_NAME (new_type) = ada_type_name (type);
+  new_type = create_array_type (alloc, new_elt_type, index_type);
+  new_type->field (0).set_bitsize (*elt_bits);
+  new_type->set_name (ada_type_name (type));
 
-  if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
+  if ((check_typedef (index_type)->code () == TYPE_CODE_RANGE
        && is_dynamic_type (check_typedef (index_type)))
-      || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
+      || !get_discrete_bounds (index_type, &low_bound, &high_bound))
     low_bound = high_bound = 0;
   if (high_bound < low_bound)
-    *elt_bits = TYPE_LENGTH (new_type) = 0;
+    {
+      *elt_bits = 0;
+      new_type->set_length (0);
+    }
   else
     {
       *elt_bits *= (high_bound - low_bound + 1);
-      TYPE_LENGTH (new_type) =
-        (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
+      new_type->set_length ((*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT);
     }
 
-  TYPE_FIXED_INSTANCE (new_type) = 1;
+  new_type->set_is_fixed_instance (true);
   return new_type;
 }
 
@@ -2217,7 +2437,7 @@ decode_constrained_packed_array_type (st
     }
   shadow_type = check_typedef (shadow_type);
 
-  if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
+  if (shadow_type->code () != TYPE_CODE_ARRAY)
     {
       lim_warning (_("could not understand bounds "
 		     "information on packed array"));
@@ -2228,6 +2448,35 @@ decode_constrained_packed_array_type (st
   return constrained_packed_array_type (shadow_type, &bits);
 }
 
+/* Helper function for decode_constrained_packed_array.  Set the field
+   bitsize on a series of packed arrays.  Returns the number of
+   elements in TYPE.  */
+
+static LONGEST
+recursively_update_array_bitsize (struct type *type)
+{
+  gdb_assert (type->code () == TYPE_CODE_ARRAY);
+
+  LONGEST low, high;
+  if (!get_discrete_bounds (type->index_type (), &low, &high)
+      || low > high)
+    return 0;
+  LONGEST our_len = high - low + 1;
+
+  struct type *elt_type = type->target_type ();
+  if (elt_type->code () == TYPE_CODE_ARRAY)
+    {
+      LONGEST elt_len = recursively_update_array_bitsize (elt_type);
+      LONGEST elt_bitsize = elt_len * elt_type->field (0).bitsize ();
+      type->field (0).set_bitsize (elt_bitsize);
+
+      type->set_length (((our_len * elt_bitsize + HOST_CHAR_BIT - 1)
+			 / HOST_CHAR_BIT));
+    }
+
+  return our_len;
+}
+
 /* Given that ARR is a struct value *indicating a GNAT constrained packed
    array, returns a simple array that denotes that array.  Its type is a
    standard GDB array type except that the BITSIZEs of the array
@@ -2247,34 +2496,46 @@ decode_constrained_packed_array (struct
      and "value_ind" routines to perform the dereferencing, as opposed
      to using "ada_coerce_ref" or "ada_value_ind".  */
   arr = coerce_ref (arr);
-  if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
+  if (ada_check_typedef (arr->type ())->code () == TYPE_CODE_PTR)
     arr = value_ind (arr);
 
-  type = decode_constrained_packed_array_type (value_type (arr));
+  type = decode_constrained_packed_array_type (arr->type ());
   if (type == NULL)
     {
       error (_("can't unpack array"));
       return NULL;
     }
 
-  if (type_byte_order (value_type (arr)) == BFD_ENDIAN_BIG
-      && ada_is_modular_type (value_type (arr)))
+  /* Decoding the packed array type could not correctly set the field
+     bitsizes for any dimension except the innermost, because the
+     bounds may be variable and were not passed to that function.  So,
+     we further resolve the array bounds here and then update the
+     sizes.  */
+  const gdb_byte *valaddr = arr->contents_for_printing ().data ();
+  CORE_ADDR address = arr->address ();
+  gdb::array_view<const gdb_byte> view
+    = gdb::make_array_view (valaddr, type->length ());
+  type = resolve_dynamic_type (type, view, address);
+  recursively_update_array_bitsize (type);
+
+  if (type_byte_order (arr->type ()) == BFD_ENDIAN_BIG
+      && ada_is_modular_type (arr->type ()))
     {
        /* This is a (right-justified) modular type representing a packed
- 	 array with no wrapper.  In order to interpret the value through
- 	 the (left-justified) packed array type we just built, we must
- 	 first left-justify it.  */
+	  array with no wrapper.  In order to interpret the value through
+	  the (left-justified) packed array type we just built, we must
+	  first left-justify it.  */
       int bit_size, bit_pos;
       ULONGEST mod;
 
-      mod = ada_modulus (value_type (arr)) - 1;
+      mod = ada_modulus (arr->type ()) - 1;
       bit_size = 0;
       while (mod > 0)
 	{
 	  bit_size += 1;
 	  mod >>= 1;
 	}
-      bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
+      bit_pos = HOST_CHAR_BIT * arr->type ()->length () - bit_size;
       arr = ada_value_primitive_packed_val (arr, NULL,
 					    bit_pos / HOST_CHAR_BIT,
 					    bit_pos % HOST_CHAR_BIT,
@@ -2300,40 +2561,40 @@ value_subscript_packed (struct value *ar
 
   bits = 0;
   elt_total_bit_offset = 0;
-  elt_type = ada_check_typedef (value_type (arr));
+  elt_type = ada_check_typedef (arr->type ());
   for (i = 0; i < arity; i += 1)
     {
-      if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
-          || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
-        error
-          (_("attempt to do packed indexing of "
+      if (elt_type->code () != TYPE_CODE_ARRAY
+	  || elt_type->field (0).bitsize () == 0)
+	error
+	  (_("attempt to do packed indexing of "
 	     "something other than a packed array"));
       else
-        {
-          struct type *range_type = TYPE_INDEX_TYPE (elt_type);
-          LONGEST lowerbound, upperbound;
-          LONGEST idx;
-
-          if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
-            {
-              lim_warning (_("don't know bounds of array"));
-              lowerbound = upperbound = 0;
-            }
-
-          idx = pos_atr (ind[i]);
-          if (idx < lowerbound || idx > upperbound)
-            lim_warning (_("packed array index %ld out of bounds"),
+	{
+	  struct type *range_type = elt_type->index_type ();
+	  LONGEST lowerbound, upperbound;
+	  LONGEST idx;
+
+	  if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
+	    {
+	      lim_warning (_("don't know bounds of array"));
+	      lowerbound = upperbound = 0;
+	    }
+
+	  idx = pos_atr (ind[i]);
+	  if (idx < lowerbound || idx > upperbound)
+	    lim_warning (_("packed array index %ld out of bounds"),
 			 (long) idx);
-          bits = TYPE_FIELD_BITSIZE (elt_type, 0);
-          elt_total_bit_offset += (idx - lowerbound) * bits;
-          elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
-        }
+	  bits = elt_type->field (0).bitsize ();
+	  elt_total_bit_offset += (idx - lowerbound) * bits;
+	  elt_type = ada_check_typedef (elt_type->target_type ());
+	}
     }
   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
 
   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
-                                      bits, elt_type);
+				      bits, elt_type);
   return v;
 }
 
@@ -2342,14 +2603,14 @@ value_subscript_packed (struct value *ar
 static int
 has_negatives (struct type *type)
 {
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     default:
       return 0;
     case TYPE_CODE_INT:
-      return !TYPE_UNSIGNED (type);
+      return !type->is_unsigned ();
     case TYPE_CODE_RANGE:
-      return TYPE_LOW_BOUND (type) - TYPE_RANGE_DATA (type)->bias < 0;
+      return type->bounds ()->low.const_val () - type->bounds ()->bias < 0;
     }
 }
 
@@ -2378,7 +2639,7 @@ ada_unpack_from_contents (const gdb_byte
   int src_bytes_left;           /* Number of source bytes left to process.  */
   int srcBitsLeft;              /* Number of source bits left to move */
   int unusedLS;                 /* Number of bits in next significant
-                                   byte of source that are unused */
+				   byte of source that are unused */
 
   int unpacked_idx;             /* Index into the unpacked buffer */
   int unpacked_bytes_left;      /* Number of bytes left to set in unpacked.  */
@@ -2407,26 +2668,26 @@ ada_unpack_from_contents (const gdb_byte
       src_idx = src_len - 1;
       if (is_signed_type
 	  && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
-        sign = ~0;
+	sign = ~0;
 
       unusedLS =
-        (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
-        % HOST_CHAR_BIT;
+	(HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
+	% HOST_CHAR_BIT;
 
       if (is_scalar)
 	{
-          accumSize = 0;
-          unpacked_idx = unpacked_len - 1;
+	  accumSize = 0;
+	  unpacked_idx = unpacked_len - 1;
 	}
       else
 	{
-          /* Non-scalar values must be aligned at a byte boundary...  */
-          accumSize =
-            (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
-          /* ... And are placed at the beginning (most-significant) bytes
-             of the target.  */
-          unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
-          unpacked_bytes_left = unpacked_idx + 1;
+	  /* Non-scalar values must be aligned at a byte boundary...  */
+	  accumSize =
+	    (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
+	  /* ... And are placed at the beginning (most-significant) bytes
+	     of the target.  */
+	  unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
+	  unpacked_bytes_left = unpacked_idx + 1;
 	}
     }
   else
@@ -2438,31 +2699,31 @@ ada_unpack_from_contents (const gdb_byte
       accumSize = 0;
 
       if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
-        sign = ~0;
+	sign = ~0;
     }
 
   accum = 0;
   while (src_bytes_left > 0)
     {
       /* Mask for removing bits of the next source byte that are not
-         part of the value.  */
+	 part of the value.  */
       unsigned int unusedMSMask =
-        (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
-        1;
+	(1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
+	1;
       /* Sign-extend bits for this byte.  */
       unsigned int signMask = sign & ~unusedMSMask;
 
       accum |=
-        (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
+	(((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
       accumSize += HOST_CHAR_BIT - unusedLS;
       if (accumSize >= HOST_CHAR_BIT)
-        {
-          unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
-          accumSize -= HOST_CHAR_BIT;
-          accum >>= HOST_CHAR_BIT;
-          unpacked_bytes_left -= 1;
-          unpacked_idx += delta;
-        }
+	{
+	  unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
+	  accumSize -= HOST_CHAR_BIT;
+	  accum >>= HOST_CHAR_BIT;
+	  unpacked_bytes_left -= 1;
+	  unpacked_idx += delta;
+	}
       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
       unusedLS = 0;
       src_bytes_left -= 1;
@@ -2493,7 +2754,7 @@ ada_unpack_from_contents (const gdb_byte
 struct value *
 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
 				long offset, int bit_offset, int bit_size,
-                                struct type *type)
+				struct type *type)
 {
   struct value *v;
   const gdb_byte *src;                /* First byte containing data to unpack */
@@ -2507,7 +2768,7 @@ ada_value_primitive_packed_val (struct v
   if (obj == NULL)
     src = valaddr + offset;
   else
-    src = value_contents (obj) + offset;
+    src = obj->contents ().data () + offset;
 
   if (is_dynamic_type (type))
     {
@@ -2522,11 +2783,11 @@ ada_value_primitive_packed_val (struct v
       staging.resize (staging_len);
 
       ada_unpack_from_contents (src, bit_offset, bit_size,
-			        staging.data (), staging.size (),
+				staging.data (), staging.size (),
 				is_big_endian, has_negatives (type),
 				is_scalar);
-      type = resolve_dynamic_type (type, staging.data (), 0);
-      if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
+      type = resolve_dynamic_type (type, staging, 0);
+      if (type->length () < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
 	{
 	  /* This happens when the length of the object is dynamic,
 	     and is actually smaller than the space reserved for it.
@@ -2535,60 +2796,60 @@ ada_value_primitive_packed_val (struct v
 	     normally equal to the maximum size of its element.
 	     But, in reality, each element only actually spans a portion
 	     of that stride.  */
-	  bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
+	  bit_size = type->length () * HOST_CHAR_BIT;
 	}
     }
 
   if (obj == NULL)
     {
-      v = allocate_value (type);
+      v = value::allocate (type);
       src = valaddr + offset;
     }
-  else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
+  else if (obj->lval () == lval_memory && obj->lazy ())
     {
       int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
       gdb_byte *buf;
 
-      v = value_at (type, value_address (obj) + offset);
+      v = value_at (type, obj->address () + offset);
       buf = (gdb_byte *) alloca (src_len);
-      read_memory (value_address (v), buf, src_len);
+      read_memory (v->address (), buf, src_len);
       src = buf;
     }
   else
     {
-      v = allocate_value (type);
-      src = value_contents (obj) + offset;
+      v = value::allocate (type);
+      src = obj->contents ().data () + offset;
     }
 
   if (obj != NULL)
     {
       long new_offset = offset;
 
-      set_value_component_location (v, obj);
-      set_value_bitpos (v, bit_offset + value_bitpos (obj));
-      set_value_bitsize (v, bit_size);
-      if (value_bitpos (v) >= HOST_CHAR_BIT)
-        {
+      v->set_component_location (obj);
+      v->set_bitpos (bit_offset + obj->bitpos ());
+      v->set_bitsize (bit_size);
+      if (v->bitpos () >= HOST_CHAR_BIT)
+	{
 	  ++new_offset;
-          set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
-        }
-      set_value_offset (v, new_offset);
+	  v->set_bitpos (v->bitpos () - HOST_CHAR_BIT);
+	}
+      v->set_offset (new_offset);
 
       /* Also set the parent value.  This is needed when trying to
 	 assign a new value (in inferior memory).  */
-      set_value_parent (v, obj);
+      v->set_parent (obj);
     }
   else
-    set_value_bitsize (v, bit_size);
-  unpacked = value_contents_writeable (v);
+    v->set_bitsize (bit_size);
+  unpacked = v->contents_writeable ().data ();
 
   if (bit_size == 0)
     {
-      memset (unpacked, 0, TYPE_LENGTH (type));
+      memset (unpacked, 0, type->length ());
       return v;
     }
 
-  if (staging.size () == TYPE_LENGTH (type))
+  if (staging.size () == type->length ())
     {
       /* Small short-cut: If we've unpacked the data into a buffer
 	 of the same size as TYPE's length, then we can reuse that,
@@ -2597,7 +2858,7 @@ ada_value_primitive_packed_val (struct v
     }
   else
     ada_unpack_from_contents (src, bit_offset, bit_size,
-			      unpacked, TYPE_LENGTH (type),
+			      unpacked, type->length (),
 			      is_big_endian, has_negatives (type), is_scalar);
 
   return v;
@@ -2611,53 +2872,54 @@ ada_value_primitive_packed_val (struct v
 static struct value *
 ada_value_assign (struct value *toval, struct value *fromval)
 {
-  struct type *type = value_type (toval);
-  int bits = value_bitsize (toval);
+  struct type *type = toval->type ();
+  int bits = toval->bitsize ();
 
   toval = ada_coerce_ref (toval);
   fromval = ada_coerce_ref (fromval);
 
-  if (ada_is_direct_array_type (value_type (toval)))
+  if (ada_is_direct_array_type (toval->type ()))
     toval = ada_coerce_to_simple_array (toval);
-  if (ada_is_direct_array_type (value_type (fromval)))
+  if (ada_is_direct_array_type (fromval->type ()))
     fromval = ada_coerce_to_simple_array (fromval);
 
-  if (!deprecated_value_modifiable (toval))
+  if (!toval->deprecated_modifiable ())
     error (_("Left operand of assignment is not a modifiable lvalue."));
 
-  if (VALUE_LVAL (toval) == lval_memory
+  if (toval->lval () == lval_memory
       && bits > 0
-      && (TYPE_CODE (type) == TYPE_CODE_FLT
-          || TYPE_CODE (type) == TYPE_CODE_STRUCT))
+      && (type->code () == TYPE_CODE_FLT
+	  || type->code () == TYPE_CODE_STRUCT))
     {
-      int len = (value_bitpos (toval)
+      int len = (toval->bitpos ()
 		 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
       int from_size;
       gdb_byte *buffer = (gdb_byte *) alloca (len);
       struct value *val;
-      CORE_ADDR to_addr = value_address (toval);
+      CORE_ADDR to_addr = toval->address ();
 
-      if (TYPE_CODE (type) == TYPE_CODE_FLT)
-        fromval = value_cast (type, fromval);
+      if (type->code () == TYPE_CODE_FLT)
+	fromval = value_cast (type, fromval);
 
       read_memory (to_addr, buffer, len);
-      from_size = value_bitsize (fromval);
+      from_size = fromval->bitsize ();
       if (from_size == 0)
-	from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
+	from_size = fromval->type ()->length () * TARGET_CHAR_BIT;
 
       const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
       ULONGEST from_offset = 0;
-      if (is_big_endian && is_scalar_type (value_type (fromval)))
+      if (is_big_endian && is_scalar_type (fromval->type ()))
 	from_offset = from_size - bits;
-      copy_bitwise (buffer, value_bitpos (toval),
-		    value_contents (fromval), from_offset,
+      copy_bitwise (buffer, toval->bitpos (),
+		    fromval->contents ().data (), from_offset,
 		    bits, is_big_endian);
       write_memory_with_notification (to_addr, buffer, len);
 
-      val = value_copy (toval);
-      memcpy (value_contents_raw (val), value_contents (fromval),
-              TYPE_LENGTH (type));
-      deprecated_set_value_type (val, type);
+      val = toval->copy ();
+      memcpy (val->contents_raw ().data (),
+	      fromval->contents ().data (),
+	      type->length ());
+      val->deprecated_set_type (type);
 
       return val;
     }
@@ -2682,35 +2944,37 @@ value_assign_to_component (struct value
 			   struct value *val)
 {
   LONGEST offset_in_container =
-    (LONGEST)  (value_address (component) - value_address (container));
+    (LONGEST)  (component->address () - container->address ());
   int bit_offset_in_container =
-    value_bitpos (component) - value_bitpos (container);
+    component->bitpos () - container->bitpos ();
   int bits;
 
-  val = value_cast (value_type (component), val);
+  val = value_cast (component->type (), val);
 
-  if (value_bitsize (component) == 0)
-    bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
+  if (component->bitsize () == 0)
+    bits = TARGET_CHAR_BIT * component->type ()->length ();
   else
-    bits = value_bitsize (component);
+    bits = component->bitsize ();
 
-  if (type_byte_order (value_type (container)) == BFD_ENDIAN_BIG)
+  if (type_byte_order (container->type ()) == BFD_ENDIAN_BIG)
     {
       int src_offset;
 
-      if (is_scalar_type (check_typedef (value_type (component))))
-        src_offset
-	  = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
+      if (is_scalar_type (check_typedef (component->type ())))
+	src_offset
+	  = component->type ()->length () * TARGET_CHAR_BIT - bits;
       else
 	src_offset = 0;
-      copy_bitwise (value_contents_writeable (container) + offset_in_container,
-		    value_bitpos (container) + bit_offset_in_container,
-		    value_contents (val), src_offset, bits, 1);
+      copy_bitwise ((container->contents_writeable ().data ()
+		     + offset_in_container),
+		    container->bitpos () + bit_offset_in_container,
+		    val->contents ().data (), src_offset, bits, 1);
     }
   else
-    copy_bitwise (value_contents_writeable (container) + offset_in_container,
-		  value_bitpos (container) + bit_offset_in_container,
-		  value_contents (val), 0, bits, 0);
+    copy_bitwise ((container->contents_writeable ().data ()
+		   + offset_in_container),
+		  container->bitpos () + bit_offset_in_container,
+		  val->contents ().data (), 0, bits, 0);
 }
 
 /* Determine if TYPE is an access to an unconstrained array.  */
@@ -2718,7 +2982,7 @@ value_assign_to_component (struct value
 bool
 ada_is_access_to_unconstrained_array (struct type *type)
 {
-  return (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
+  return (type->code () == TYPE_CODE_TYPEDEF
 	  && is_thick_pntr (ada_typedef_target_type (type)));
 }
 
@@ -2735,22 +2999,22 @@ ada_value_subscript (struct value *arr,
 
   elt = ada_coerce_to_simple_array (arr);
 
-  elt_type = ada_check_typedef (value_type (elt));
-  if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
-      && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
+  elt_type = ada_check_typedef (elt->type ());
+  if (elt_type->code () == TYPE_CODE_ARRAY
+      && elt_type->field (0).bitsize () > 0)
     return value_subscript_packed (elt, arity, ind);
 
   for (k = 0; k < arity; k += 1)
     {
-      struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type);
+      struct type *saved_elt_type = elt_type->target_type ();
 
-      if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
-        error (_("too many subscripts (%d expected)"), k);
+      if (elt_type->code () != TYPE_CODE_ARRAY)
+	error (_("too many subscripts (%d expected)"), k);
 
       elt = value_subscript (elt, pos_atr (ind[k]));
 
       if (ada_is_access_to_unconstrained_array (saved_elt_type)
-	  && TYPE_CODE (value_type (elt)) != TYPE_CODE_TYPEDEF)
+	  && elt->type ()->code () != TYPE_CODE_TYPEDEF)
 	{
 	  /* The element is a typedef to an unconstrained array,
 	     except that the value_subscript call stripped the
@@ -2764,10 +3028,10 @@ ada_value_subscript (struct value *arr,
 	     than as an access.  Another symptom of the same issue
 	     would be that an expression trying to dereference the
 	     element would also be improperly rejected.  */
-	  deprecated_set_value_type (elt, saved_elt_type);
+	  elt->deprecated_set_type (saved_elt_type);
 	}
 
-      elt_type = ada_check_typedef (value_type (elt));
+      elt_type = ada_check_typedef (elt->type ());
     }
 
   return elt;
@@ -2791,25 +3055,23 @@ ada_value_ptr_subscript (struct value *a
   int k;
   struct value *array_ind = ada_value_ind (arr);
   struct type *type
-    = check_typedef (value_enclosing_type (array_ind));
+    = check_typedef (array_ind->enclosing_type ());
 
-  if (TYPE_CODE (type) == TYPE_CODE_ARRAY
-      && TYPE_FIELD_BITSIZE (type, 0) > 0)
+  if (type->code () == TYPE_CODE_ARRAY
+      && type->field (0).bitsize () > 0)
     return value_subscript_packed (array_ind, arity, ind);
 
   for (k = 0; k < arity; k += 1)
     {
       LONGEST lwb, upb;
-      struct value *lwb_value;
 
-      if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
-        error (_("too many subscripts (%d expected)"), k);
-      arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
-                        value_copy (arr));
-      get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
-      lwb_value = value_from_longest (value_type(ind[k]), lwb);
-      arr = value_ptradd (arr, pos_atr (ind[k]) - pos_atr (lwb_value));
-      type = TYPE_TARGET_TYPE (type);
+      if (type->code () != TYPE_CODE_ARRAY)
+	error (_("too many subscripts (%d expected)"), k);
+      arr = value_cast (lookup_pointer_type (type->target_type ()),
+			arr->copy ());
+      get_discrete_bounds (type->index_type (), &lwb, &upb);
+      arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
+      type = type->target_type ();
     }
 
   return value_ind (arr);
@@ -2821,31 +3083,36 @@ ada_value_ptr_subscript (struct value *a
    this array is LOW, as per Ada rules.  */
 static struct value *
 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
-                          int low, int high)
+			  int low, int high)
 {
   struct type *type0 = ada_check_typedef (type);
-  struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0));
+  struct type *base_index_type = type0->index_type ()->target_type ();
+  type_allocator alloc (base_index_type);
   struct type *index_type
-    = create_static_range_type (NULL, base_index_type, low, high);
+    = create_static_range_type (alloc, base_index_type, low, high);
   struct type *slice_type = create_array_type_with_stride
-			      (NULL, TYPE_TARGET_TYPE (type0), index_type,
-			       get_dyn_prop (DYN_PROP_BYTE_STRIDE, type0),
-			       TYPE_FIELD_BITSIZE (type0, 0));
-  int base_low =  ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
-  LONGEST base_low_pos, low_pos;
+			      (alloc, type0->target_type (), index_type,
+			       type0->dyn_prop (DYN_PROP_BYTE_STRIDE),
+			       type0->field (0).bitsize ());
+  int base_low =  ada_discrete_type_low_bound (type0->index_type ());
+  std::optional<LONGEST> base_low_pos, low_pos;
   CORE_ADDR base;
 
-  if (!discrete_position (base_index_type, low, &low_pos)
-      || !discrete_position (base_index_type, base_low, &base_low_pos))
+  low_pos = discrete_position (base_index_type, low);
+  base_low_pos = discrete_position (base_index_type, base_low);
+
+  if (!low_pos.has_value () || !base_low_pos.has_value ())
     {
       warning (_("unable to get positions in slice, use bounds instead"));
       low_pos = low;
       base_low_pos = base_low;
     }
 
-  base = value_as_address (array_ptr)
-    + ((low_pos - base_low_pos)
-       * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
+  ULONGEST stride = slice_type->field (0).bitsize () / 8;
+  if (stride == 0)
+    stride = type0->target_type ()->length ();
+
+  base = value_as_address (array_ptr) + (*low_pos - *base_low_pos) * stride;
   return value_at_lazy (slice_type, base);
 }
 
@@ -2853,18 +3120,22 @@ ada_value_slice_from_ptr (struct value *
 static struct value *
 ada_value_slice (struct value *array, int low, int high)
 {
-  struct type *type = ada_check_typedef (value_type (array));
-  struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
+  struct type *type = ada_check_typedef (array->type ());
+  struct type *base_index_type = type->index_type ()->target_type ();
+  type_allocator alloc (type->index_type ());
   struct type *index_type
-    = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
+    = create_static_range_type (alloc, type->index_type (), low, high);
   struct type *slice_type = create_array_type_with_stride
-			      (NULL, TYPE_TARGET_TYPE (type), index_type,
-			       get_dyn_prop (DYN_PROP_BYTE_STRIDE, type),
-			       TYPE_FIELD_BITSIZE (type, 0));
-  LONGEST low_pos, high_pos;
+			      (alloc, type->target_type (), index_type,
+			       type->dyn_prop (DYN_PROP_BYTE_STRIDE),
+			       type->field (0).bitsize ());
+  std::optional<LONGEST> low_pos, high_pos;
 
-  if (!discrete_position (base_index_type, low, &low_pos)
-      || !discrete_position (base_index_type, high, &high_pos))
+
+  low_pos = discrete_position (base_index_type, low);
+  high_pos = discrete_position (base_index_type, high);
+
+  if (!low_pos.has_value () || !high_pos.has_value ())
     {
       warning (_("unable to get positions in slice, use bounds instead"));
       low_pos = low;
@@ -2872,7 +3143,7 @@ ada_value_slice (struct value *array, in
     }
 
   return value_cast (slice_type,
-		     value_slice (array, low, high_pos - low_pos + 1));
+		     value_slice (array, low, *high_pos - *low_pos + 1));
 }
 
 /* If type is a record type in the form of a standard GNAT array
@@ -2891,13 +3162,13 @@ ada_array_arity (struct type *type)
   type = desc_base_type (type);
 
   arity = 0;
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+  if (type->code () == TYPE_CODE_STRUCT)
     return desc_arity (desc_bounds_type (type));
   else
-    while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
+    while (type->code () == TYPE_CODE_ARRAY)
       {
-        arity += 1;
-        type = ada_check_typedef (TYPE_TARGET_TYPE (type));
+	arity += 1;
+	type = ada_check_typedef (type->target_type ());
       }
 
   return arity;
@@ -2913,7 +3184,7 @@ ada_array_element_type (struct type *typ
 {
   type = desc_base_type (type);
 
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+  if (type->code () == TYPE_CODE_STRUCT)
     {
       int k;
       struct type *p_array_type;
@@ -2922,38 +3193,40 @@ ada_array_element_type (struct type *typ
 
       k = ada_array_arity (type);
       if (k == 0)
-        return NULL;
+	return NULL;
 
       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
       if (nindices >= 0 && k > nindices)
-        k = nindices;
+	k = nindices;
       while (k > 0 && p_array_type != NULL)
-        {
-          p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
-          k -= 1;
-        }
+	{
+	  p_array_type = ada_check_typedef (p_array_type->target_type ());
+	  k -= 1;
+	}
       return p_array_type;
     }
-  else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
+  else if (type->code () == TYPE_CODE_ARRAY)
     {
-      while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
-        {
-          type = TYPE_TARGET_TYPE (type);
-          nindices -= 1;
-        }
+      while (nindices != 0 && type->code () == TYPE_CODE_ARRAY)
+	{
+	  type = type->target_type ();
+	  /* A multi-dimensional array is represented using a sequence
+	     of array types.  If one of these types has a name, then
+	     it is not another dimension of the outer array, but
+	     rather the element type of the outermost array.  */
+	  if (type->name () != nullptr)
+	    break;
+	  nindices -= 1;
+	}
       return type;
     }
 
   return NULL;
 }
 
-/* The type of nth index in arrays of given type (n numbering from 1).
-   Does not examine memory.  Throws an error if N is invalid or TYPE
-   is not an array type.  NAME is the name of the Ada attribute being
-   evaluated ('range, 'first, 'last, or 'length); it is used in building
-   the error message.  */
+/* See ada-lang.h.  */
 
-static struct type *
+struct type *
 ada_index_type (struct type *type, int n, const char *name)
 {
   struct type *result_type;
@@ -2968,13 +3241,16 @@ ada_index_type (struct type *type, int n
       int i;
 
       for (i = 1; i < n; i += 1)
-        type = TYPE_TARGET_TYPE (type);
-      result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
+	{
+	  type = ada_check_typedef (type);
+	  type = type->target_type ();
+	}
+      result_type = ada_check_typedef (type)->index_type ()->target_type ();
       /* FIXME: The stabs type r(0,0);bound;bound in an array type
-         has a target type of TYPE_CODE_UNDEF.  We compensate here, but
-         perhaps stabsread.c would make more sense.  */
-      if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
-        result_type = NULL;
+	 has a target type of TYPE_CODE_UNDEF.  We compensate here, but
+	 perhaps stabsread.c would make more sense.  */
+      if (result_type && result_type->code () == TYPE_CODE_UNDEF)
+	result_type = NULL;
     }
   else
     {
@@ -3004,14 +3280,14 @@ ada_array_bound_from_type (struct type *
     arr_type = decode_constrained_packed_array_type (arr_type);
 
   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
-    return (LONGEST) - which;
+    return - which;
 
-  if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
-    type = TYPE_TARGET_TYPE (arr_type);
+  if (arr_type->code () == TYPE_CODE_PTR)
+    type = arr_type->target_type ();
   else
     type = arr_type;
 
-  if (TYPE_FIXED_INSTANCE (type))
+  if (type->is_fixed_instance ())
     {
       /* The array has already been fixed, so we do not need to
 	 check the parallel ___XA type again.  That encoding has
@@ -3025,22 +3301,21 @@ ada_array_bound_from_type (struct type *
     }
 
   if (index_type_desc != NULL)
-    index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
+    index_type = to_fixed_range_type (index_type_desc->field (n - 1).type (),
 				      NULL);
   else
     {
       struct type *elt_type = check_typedef (type);
 
       for (i = 1; i < n; i++)
-	elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
+	elt_type = check_typedef (elt_type->target_type ());
 
-      index_type = TYPE_INDEX_TYPE (elt_type);
+      index_type = elt_type->index_type ();
     }
 
-  return
-    (LONGEST) (which == 0
-               ? ada_discrete_type_low_bound (index_type)
-               : ada_discrete_type_high_bound (index_type));
+  return (which == 0
+	  ? ada_discrete_type_low_bound (index_type)
+	  : ada_discrete_type_high_bound (index_type));
 }
 
 /* Given that arr is an array value, returns the lower bound of the
@@ -3053,9 +3328,9 @@ ada_array_bound (struct value *arr, int
 {
   struct type *arr_type;
 
-  if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
+  if (check_typedef (arr->type ())->code () == TYPE_CODE_PTR)
     arr = value_ind (arr);
-  arr_type = value_enclosing_type (arr);
+  arr_type = arr->enclosing_type ();
 
   if (ada_is_constrained_packed_array_type (arr_type))
     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
@@ -3077,9 +3352,9 @@ ada_array_length (struct value *arr, int
   struct type *arr_type, *index_type;
   int low, high;
 
-  if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
+  if (check_typedef (arr->type ())->code () == TYPE_CODE_PTR)
     arr = value_ind (arr);
-  arr_type = value_enclosing_type (arr);
+  arr_type = arr->enclosing_type ();
 
   if (ada_is_constrained_packed_array_type (arr_type))
     return ada_array_length (decode_constrained_packed_array (arr), n);
@@ -3100,8 +3375,8 @@ ada_array_length (struct value *arr, int
   if (index_type != NULL)
     {
       struct type *base_type;
-      if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
-	base_type = TYPE_TARGET_TYPE (index_type);
+      if (index_type->code () == TYPE_CODE_RANGE)
+	base_type = index_type->target_type ();
       else
 	base_type = index_type;
 
@@ -3119,17 +3394,18 @@ static struct value *
 empty_array (struct type *arr_type, int low, int high)
 {
   struct type *arr_type0 = ada_check_typedef (arr_type);
+  type_allocator alloc (arr_type0->index_type ()->target_type ());
   struct type *index_type
     = create_static_range_type
-        (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low,
+	(alloc, arr_type0->index_type ()->target_type (), low,
 	 high < low ? low - 1 : high);
   struct type *elt_type = ada_array_element_type (arr_type0, 1);
 
-  return allocate_value (create_array_type (NULL, elt_type, index_type));
+  return value::allocate (create_array_type (alloc, elt_type, index_type));
 }
 
 
-                                /* Name resolution */
+				/* Name resolution */
 
 /* The "decoded" name for the user-definable Ada operator corresponding
    to OP.  */
@@ -3142,7 +3418,7 @@ ada_decoded_op_name (enum exp_opcode op)
   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
     {
       if (ada_opname_table[i].op == op)
-        return ada_opname_table[i].decoded;
+	return ada_opname_table[i].decoded;
     }
   error (_("Could not find operator name for opcode"));
 }
@@ -3165,23 +3441,23 @@ encoded_ordered_before (const char *N0,
       int k0, k1;
 
       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
-        ;
+	;
       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
-        ;
+	;
       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
-          && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
-        {
-          int n0, n1;
-
-          n0 = k0;
-          while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
-            n0 -= 1;
-          n1 = k1;
-          while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
-            n1 -= 1;
-          if (n0 == n1 && strncmp (N0, N1, n0) == 0)
-            return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
-        }
+	  && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
+	{
+	  int n0, n1;
+
+	  n0 = k0;
+	  while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
+	    n0 -= 1;
+	  n1 = k1;
+	  while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
+	    n1 -= 1;
+	  if (n0 == n1 && strncmp (N0, N1, n0) == 0)
+	    return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
+	}
       return (strcmp (N0, N1) < 0);
     }
 }
@@ -3200,12 +3476,12 @@ sort_choices (struct block_symbol syms[]
       int j;
 
       for (j = i - 1; j >= 0; j -= 1)
-        {
-          if (encoded_ordered_before (syms[j].symbol->linkage_name (),
-                                      sym.symbol->linkage_name ()))
-            break;
-          syms[j + 1] = syms[j];
-        }
+	{
+	  if (encoded_ordered_before (syms[j].symbol->linkage_name (),
+				      sym.symbol->linkage_name ()))
+	    break;
+	  syms[j + 1] = syms[j];
+	}
       syms[j + 1] = sym;
     }
 }
@@ -3223,33 +3499,33 @@ static void
 ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
 			    const struct type_print_options *flags)
 {
-  struct type *type = SYMBOL_TYPE (sym);
+  struct type *type = sym->type ();
 
-  fprintf_filtered (stream, "%s", sym->print_name ());
+  gdb_printf (stream, "%s", sym->print_name ());
   if (!print_signatures
       || type == NULL
-      || TYPE_CODE (type) != TYPE_CODE_FUNC)
+      || type->code () != TYPE_CODE_FUNC)
     return;
 
-  if (TYPE_NFIELDS (type) > 0)
+  if (type->num_fields () > 0)
     {
       int i;
 
-      fprintf_filtered (stream, " (");
-      for (i = 0; i < TYPE_NFIELDS (type); ++i)
+      gdb_printf (stream, " (");
+      for (i = 0; i < type->num_fields (); ++i)
 	{
 	  if (i > 0)
-	    fprintf_filtered (stream, "; ");
-	  ada_print_type (TYPE_FIELD_TYPE (type, i), NULL, stream, -1, 0,
+	    gdb_printf (stream, "; ");
+	  ada_print_type (type->field (i).type (), NULL, stream, -1, 0,
 			  flags);
 	}
-      fprintf_filtered (stream, ")");
+      gdb_printf (stream, ")");
     }
-  if (TYPE_TARGET_TYPE (type) != NULL
-      && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
+  if (type->target_type () != NULL
+      && type->target_type ()->code () != TYPE_CODE_VOID)
     {
-      fprintf_filtered (stream, " return ");
-      ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
+      gdb_printf (stream, " return ");
+      ada_print_type (type->target_type (), NULL, stream, -1, 0, flags);
     }
 }
 
@@ -3271,7 +3547,7 @@ ada_print_symbol_signature (struct ui_fi
 
 static int
 get_selections (int *choices, int n_choices, int max_results,
-                int is_all_choice, const char *annotation_suffix)
+		int is_all_choice, const char *annotation_suffix)
 {
   const char *args;
   const char *prompt;
@@ -3282,7 +3558,8 @@ get_selections (int *choices, int n_choi
   if (prompt == NULL)
     prompt = "> ";
 
-  args = command_line_input (prompt, annotation_suffix);
+  std::string buffer;
+  args = command_line_input (buffer, prompt, annotation_suffix);
 
   if (args == NULL)
     error_no_arg (_("one or more choice numbers"));
@@ -3298,41 +3575,41 @@ get_selections (int *choices, int n_choi
 
       args = skip_spaces (args);
       if (*args == '\0' && n_chosen == 0)
-        error_no_arg (_("one or more choice numbers"));
+	error_no_arg (_("one or more choice numbers"));
       else if (*args == '\0')
-        break;
+	break;
 
       choice = strtol (args, &args2, 10);
       if (args == args2 || choice < 0
-          || choice > n_choices + first_choice - 1)
-        error (_("Argument must be choice number"));
+	  || choice > n_choices + first_choice - 1)
+	error (_("Argument must be choice number"));
       args = args2;
 
       if (choice == 0)
-        error (_("cancelled"));
+	error (_("cancelled"));
 
       if (choice < first_choice)
-        {
-          n_chosen = n_choices;
-          for (j = 0; j < n_choices; j += 1)
-            choices[j] = j;
-          break;
-        }
+	{
+	  n_chosen = n_choices;
+	  for (j = 0; j < n_choices; j += 1)
+	    choices[j] = j;
+	  break;
+	}
       choice -= first_choice;
 
       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
-        {
-        }
+	{
+	}
 
       if (j < 0 || choice != choices[j])
-        {
-          int k;
+	{
+	  int k;
 
-          for (k = n_chosen - 1; k > j; k -= 1)
-            choices[k + 1] = choices[k];
-          choices[j + 1] = choice;
-          n_chosen += 1;
-        }
+	  for (k = n_chosen - 1; k > j; k -= 1)
+	    choices[k + 1] = choices[k];
+	  choices[j + 1] = choice;
+	  n_chosen += 1;
+	}
     }
 
   if (n_chosen > max_results)
@@ -3374,86 +3651,86 @@ See set/show multiple-symbol."));
   if (select_mode == multiple_symbols_all && max_results > 1)
     return nsyms;
 
-  printf_filtered (_("[0] cancel\n"));
+  gdb_printf (_("[0] cancel\n"));
   if (max_results > 1)
-    printf_filtered (_("[1] all\n"));
+    gdb_printf (_("[1] all\n"));
 
   sort_choices (syms, nsyms);
 
   for (i = 0; i < nsyms; i += 1)
     {
       if (syms[i].symbol == NULL)
-        continue;
+	continue;
 
-      if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
-        {
-          struct symtab_and_line sal =
-            find_function_start_sal (syms[i].symbol, 1);
+      if (syms[i].symbol->aclass () == LOC_BLOCK)
+	{
+	  struct symtab_and_line sal =
+	    find_function_start_sal (syms[i].symbol, 1);
 
-	  printf_filtered ("[%d] ", i + first_choice);
+	  gdb_printf ("[%d] ", i + first_choice);
 	  ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
 				      &type_print_raw_options);
 	  if (sal.symtab == NULL)
-	    printf_filtered (_(" at %p[<no source file available>%p]:%d\n"),
-			     metadata_style.style ().ptr (), nullptr, sal.line);
+	    gdb_printf (_(" at %p[<no source file available>%p]:%d\n"),
+			metadata_style.style ().ptr (), nullptr, sal.line);
 	  else
-	    printf_filtered
+	    gdb_printf
 	      (_(" at %ps:%d\n"),
 	       styled_string (file_name_style.style (),
 			      symtab_to_filename_for_display (sal.symtab)),
 	       sal.line);
-          continue;
-        }
+	  continue;
+	}
       else
-        {
-          int is_enumeral =
-            (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
-             && SYMBOL_TYPE (syms[i].symbol) != NULL
-             && TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) == TYPE_CODE_ENUM);
+	{
+	  int is_enumeral =
+	    (syms[i].symbol->aclass () == LOC_CONST
+	     && syms[i].symbol->type () != NULL
+	     && syms[i].symbol->type ()->code () == TYPE_CODE_ENUM);
 	  struct symtab *symtab = NULL;
 
-	  if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
-	    symtab = symbol_symtab (syms[i].symbol);
+	  if (syms[i].symbol->is_objfile_owned ())
+	    symtab = syms[i].symbol->symtab ();
 
-          if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
+	  if (syms[i].symbol->line () != 0 && symtab != NULL)
 	    {
-	      printf_filtered ("[%d] ", i + first_choice);
+	      gdb_printf ("[%d] ", i + first_choice);
 	      ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
 					  &type_print_raw_options);
-	      printf_filtered (_(" at %s:%d\n"),
-			       symtab_to_filename_for_display (symtab),
-			       SYMBOL_LINE (syms[i].symbol));
-	    }
-          else if (is_enumeral
-                   && TYPE_NAME (SYMBOL_TYPE (syms[i].symbol)) != NULL)
-            {
-              printf_filtered (("[%d] "), i + first_choice);
-              ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
-                              gdb_stdout, -1, 0, &type_print_raw_options);
-              printf_filtered (_("'(%s) (enumeral)\n"),
-			       syms[i].symbol->print_name ());
-            }
+	      gdb_printf (_(" at %s:%d\n"),
+			  symtab_to_filename_for_display (symtab),
+			  syms[i].symbol->line ());
+	    }
+	  else if (is_enumeral
+		   && syms[i].symbol->type ()->name () != NULL)
+	    {
+	      gdb_printf (("[%d] "), i + first_choice);
+	      ada_print_type (syms[i].symbol->type (), NULL,
+			      gdb_stdout, -1, 0, &type_print_raw_options);
+	      gdb_printf (_("'(%s) (enumeral)\n"),
+			  syms[i].symbol->print_name ());
+	    }
 	  else
 	    {
-	      printf_filtered ("[%d] ", i + first_choice);
+	      gdb_printf ("[%d] ", i + first_choice);
 	      ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
 					  &type_print_raw_options);
 
 	      if (symtab != NULL)
-		printf_filtered (is_enumeral
-				 ? _(" in %s (enumeral)\n")
-				 : _(" at %s:?\n"),
-				 symtab_to_filename_for_display (symtab));
+		gdb_printf (is_enumeral
+			    ? _(" in %s (enumeral)\n")
+			    : _(" at %s:?\n"),
+			    symtab_to_filename_for_display (symtab));
 	      else
-		printf_filtered (is_enumeral
-				 ? _(" (enumeral)\n")
-				 : _(" at ?\n"));
+		gdb_printf (is_enumeral
+			    ? _(" (enumeral)\n")
+			    : _(" at ?\n"));
 	    }
-        }
+	}
     }
 
   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
-                             "overload-choice");
+			     "overload-choice");
 
   for (i = 0; i < n_chosen; i += 1)
     syms[i] = syms[chosen[i]];
@@ -3461,447 +3738,273 @@ See set/show multiple-symbol."));
   return n_chosen;
 }
 
-/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
-   references (marked by OP_VAR_VALUE nodes in which the symbol has an
-   undefined namespace) and converts operators that are
-   user-defined into appropriate function calls.  If CONTEXT_TYPE is
-   non-null, it provides a preferred result type [at the moment, only
-   type void has any effect---causing procedures to be preferred over
-   functions in calls].  A null CONTEXT_TYPE indicates that a non-void
-   return type is preferred.  May change (expand) *EXP.  */
+/* See ada-lang.h.  */
 
-static void
-resolve (expression_up *expp, int void_context_p, int parse_completion,
-	 innermost_block_tracker *tracker)
+block_symbol
+ada_find_operator_symbol (enum exp_opcode op, bool parse_completion,
+			  int nargs, value *argvec[])
 {
-  struct type *context_type = NULL;
-  int pc = 0;
+  if (possible_user_operator_p (op, argvec))
+    {
+      std::vector<struct block_symbol> candidates
+	= ada_lookup_symbol_list (ada_decoded_op_name (op),
+				  NULL, SEARCH_VFT);
 
-  if (void_context_p)
-    context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
+      int i = ada_resolve_function (candidates, argvec,
+				    nargs, ada_decoded_op_name (op), NULL,
+				    parse_completion);
+      if (i >= 0)
+	return candidates[i];
+    }
+  return {};
+}
 
-  resolve_subexp (expp, &pc, 1, context_type, parse_completion, tracker);
-}
-
-/* Resolve the operator of the subexpression beginning at
-   position *POS of *EXPP.  "Resolving" consists of replacing
-   the symbols that have undefined namespaces in OP_VAR_VALUE nodes
-   with their resolutions, replacing built-in operators with
-   function calls to user-defined operators, where appropriate, and,
-   when DEPROCEDURE_P is non-zero, converting function-valued variables
-   into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
-   are as in ada_resolve, above.  */
+/* See ada-lang.h.  */
 
-static struct value *
-resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
-                struct type *context_type, int parse_completion,
-		innermost_block_tracker *tracker)
+block_symbol
+ada_resolve_funcall (struct symbol *sym, const struct block *block,
+		     struct type *context_type,
+		     bool parse_completion,
+		     int nargs, value *argvec[],
+		     innermost_block_tracker *tracker)
 {
-  int pc = *pos;
-  int i;
-  struct expression *exp;       /* Convenience: == *expp.  */
-  enum exp_opcode op = (*expp)->elts[pc].opcode;
-  struct value **argvec;        /* Vector of operand types (alloca'ed).  */
-  int nargs;                    /* Number of operands.  */
-  int oplen;
-
-  argvec = NULL;
-  nargs = 0;
-  exp = expp->get ();
+  std::vector<struct block_symbol> candidates
+    = ada_lookup_symbol_list (sym->linkage_name (), block, SEARCH_VFT);
 
-  /* Pass one: resolve operands, saving their types and updating *pos,
-     if needed.  */
-  switch (op)
+  int i;
+  if (candidates.size () == 1)
+    i = 0;
+  else
     {
-    case OP_FUNCALL:
-      if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
-          && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
-        *pos += 7;
-      else
-        {
-          *pos += 3;
-          resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
-        }
-      nargs = longest_to_int (exp->elts[pc + 1].longconst);
-      break;
-
-    case UNOP_ADDR:
-      *pos += 1;
-      resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
-      break;
-
-    case UNOP_QUAL:
-      *pos += 3;
-      resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type),
-		      parse_completion, tracker);
-      break;
-
-    case OP_ATR_MODULUS:
-    case OP_ATR_SIZE:
-    case OP_ATR_TAG:
-    case OP_ATR_FIRST:
-    case OP_ATR_LAST:
-    case OP_ATR_LENGTH:
-    case OP_ATR_POS:
-    case OP_ATR_VAL:
-    case OP_ATR_MIN:
-    case OP_ATR_MAX:
-    case TERNOP_IN_RANGE:
-    case BINOP_IN_BOUNDS:
-    case UNOP_IN_RANGE:
-    case OP_AGGREGATE:
-    case OP_OTHERS:
-    case OP_CHOICES:
-    case OP_POSITIONAL:
-    case OP_DISCRETE_RANGE:
-    case OP_NAME:
-      ada_forward_operator_length (exp, pc, &oplen, &nargs);
-      *pos += oplen;
-      break;
-
-    case BINOP_ASSIGN:
-      {
-        struct value *arg1;
-
-        *pos += 1;
-        arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
-        if (arg1 == NULL)
-          resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker);
-        else
-          resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion,
-			  tracker);
-        break;
-      }
-
-    case UNOP_CAST:
-      *pos += 3;
-      nargs = 1;
-      break;
-
-    case BINOP_ADD:
-    case BINOP_SUB:
-    case BINOP_MUL:
-    case BINOP_DIV:
-    case BINOP_REM:
-    case BINOP_MOD:
-    case BINOP_EXP:
-    case BINOP_CONCAT:
-    case BINOP_LOGICAL_AND:
-    case BINOP_LOGICAL_OR:
-    case BINOP_BITWISE_AND:
-    case BINOP_BITWISE_IOR:
-    case BINOP_BITWISE_XOR:
-
-    case BINOP_EQUAL:
-    case BINOP_NOTEQUAL:
-    case BINOP_LESS:
-    case BINOP_GTR:
-    case BINOP_LEQ:
-    case BINOP_GEQ:
-
-    case BINOP_REPEAT:
-    case BINOP_SUBSCRIPT:
-    case BINOP_COMMA:
-      *pos += 1;
-      nargs = 2;
-      break;
-
-    case UNOP_NEG:
-    case UNOP_PLUS:
-    case UNOP_LOGICAL_NOT:
-    case UNOP_ABS:
-    case UNOP_IND:
-      *pos += 1;
-      nargs = 1;
-      break;
-
-    case OP_LONG:
-    case OP_FLOAT:
-    case OP_VAR_VALUE:
-    case OP_VAR_MSYM_VALUE:
-      *pos += 4;
-      break;
-
-    case OP_TYPE:
-    case OP_BOOL:
-    case OP_LAST:
-    case OP_INTERNALVAR:
-      *pos += 3;
-      break;
-
-    case UNOP_MEMVAL:
-      *pos += 3;
-      nargs = 1;
-      break;
+      i = ada_resolve_function
+	(candidates,
+	 argvec, nargs,
+	 sym->linkage_name (),
+	 context_type, parse_completion);
+      if (i < 0)
+	error (_("Could not find a match for %s"), sym->print_name ());
+    }
 
-    case OP_REGISTER:
-      *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
-      break;
+  tracker->update (candidates[i]);
+  return candidates[i];
+}
 
-    case STRUCTOP_STRUCT:
-      *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
-      nargs = 1;
-      break;
+/* Resolve a mention of a name where the context type is an
+   enumeration type.  */
 
-    case TERNOP_SLICE:
-      *pos += 1;
-      nargs = 3;
-      break;
+static int
+ada_resolve_enum (std::vector<struct block_symbol> &syms,
+		  const char *name, struct type *context_type,
+		  bool parse_completion)
+{
+  gdb_assert (context_type->code () == TYPE_CODE_ENUM);
+  context_type = ada_check_typedef (context_type);
 
-    case OP_STRING:
-      break;
+  /* We already know the name matches, so we're just looking for
+     an element of the correct enum type.  */
+  struct type *type1 = context_type;
+  for (int i = 0; i < syms.size (); ++i)
+    {
+      struct type *type2 = ada_check_typedef (syms[i].symbol->type ());
+      if (type1 == type2)
+	return i;
+    }
 
-    default:
-      error (_("Unexpected operator during name resolution"));
+  for (int i = 0; i < syms.size (); ++i)
+    {
+      struct type *type2 = ada_check_typedef (syms[i].symbol->type ());
+      if (type1->num_fields () != type2->num_fields ())
+	continue;
+      if (strcmp (type1->name (), type2->name ()) != 0)
+	continue;
+      if (ada_identical_enum_types_p (type1, type2))
+	return i;
     }
 
-  argvec = XALLOCAVEC (struct value *, nargs + 1);
-  for (i = 0; i < nargs; i += 1)
-    argvec[i] = resolve_subexp (expp, pos, 1, NULL, parse_completion,
-				tracker);
-  argvec[i] = NULL;
-  exp = expp->get ();
+  error (_("No name '%s' in enumeration type '%s'"), name,
+	 ada_type_name (context_type));
+}
 
-  /* Pass two: perform any resolution on principal operator.  */
-  switch (op)
-    {
-    default:
-      break;
+/* See ada-lang.h.  */
 
-    case OP_VAR_VALUE:
-      if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
-        {
-          std::vector<struct block_symbol> candidates;
-          int n_candidates;
-
-          n_candidates =
-            ada_lookup_symbol_list (exp->elts[pc + 2].symbol->linkage_name (),
-                                    exp->elts[pc + 1].block, VAR_DOMAIN,
-                                    &candidates);
-
-          if (n_candidates > 1)
-            {
-              /* Types tend to get re-introduced locally, so if there
-                 are any local symbols that are not types, first filter
-                 out all types.  */
-              int j;
-              for (j = 0; j < n_candidates; j += 1)
-                switch (SYMBOL_CLASS (candidates[j].symbol))
-                  {
-                  case LOC_REGISTER:
-                  case LOC_ARG:
-                  case LOC_REF_ARG:
-                  case LOC_REGPARM_ADDR:
-                  case LOC_LOCAL:
-                  case LOC_COMPUTED:
-                    goto FoundNonType;
-                  default:
-                    break;
-                  }
-            FoundNonType:
-              if (j < n_candidates)
-                {
-                  j = 0;
-                  while (j < n_candidates)
-                    {
-                      if (SYMBOL_CLASS (candidates[j].symbol) == LOC_TYPEDEF)
-                        {
-                          candidates[j] = candidates[n_candidates - 1];
-                          n_candidates -= 1;
-                        }
-                      else
-                        j += 1;
-                    }
-                }
-            }
-
-          if (n_candidates == 0)
-            error (_("No definition found for %s"),
-                   exp->elts[pc + 2].symbol->print_name ());
-          else if (n_candidates == 1)
-            i = 0;
-          else if (deprocedure_p
-                   && !is_nonfunction (candidates.data (), n_candidates))
-            {
-              i = ada_resolve_function
-                (candidates.data (), n_candidates, NULL, 0,
-                 exp->elts[pc + 2].symbol->linkage_name (),
-                 context_type, parse_completion);
-              if (i < 0)
-                error (_("Could not find a match for %s"),
-                       exp->elts[pc + 2].symbol->print_name ());
-            }
-          else
-            {
-              printf_filtered (_("Multiple matches for %s\n"),
-                               exp->elts[pc + 2].symbol->print_name ());
-              user_select_syms (candidates.data (), n_candidates, 1);
-              i = 0;
-            }
-
-          exp->elts[pc + 1].block = candidates[i].block;
-          exp->elts[pc + 2].symbol = candidates[i].symbol;
-	  tracker->update (candidates[i]);
-        }
-
-      if (deprocedure_p
-          && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
-              == TYPE_CODE_FUNC))
-        {
-          replace_operator_with_call (expp, pc, 0, 4,
-                                      exp->elts[pc + 2].symbol,
-                                      exp->elts[pc + 1].block);
-          exp = expp->get ();
-        }
-      break;
+block_symbol
+ada_resolve_variable (struct symbol *sym, const struct block *block,
+		      struct type *context_type,
+		      bool parse_completion,
+		      int deprocedure_p,
+		      innermost_block_tracker *tracker)
+{
+  std::vector<struct block_symbol> candidates
+    = ada_lookup_symbol_list (sym->linkage_name (), block, SEARCH_VFT);
+
+  if (std::any_of (candidates.begin (),
+		   candidates.end (),
+		   [] (block_symbol &bsym)
+		   {
+		     switch (bsym.symbol->aclass ())
+		       {
+		       case LOC_REGISTER:
+		       case LOC_ARG:
+		       case LOC_REF_ARG:
+		       case LOC_REGPARM_ADDR:
+		       case LOC_LOCAL:
+		       case LOC_COMPUTED:
+			 return true;
+		       default:
+			 return false;
+		       }
+		   }))
+    {
+      /* Types tend to get re-introduced locally, so if there
+	 are any local symbols that are not types, first filter
+	 out all types.  */
+      candidates.erase
+	(std::remove_if
+	 (candidates.begin (),
+	  candidates.end (),
+	  [] (block_symbol &bsym)
+	  {
+	    return bsym.symbol->aclass () == LOC_TYPEDEF;
+	  }),
+	 candidates.end ());
+    }
 
-    case OP_FUNCALL:
+  /* Filter out artificial symbols.  */
+  candidates.erase
+    (std::remove_if
+     (candidates.begin (),
+      candidates.end (),
+      [] (block_symbol &bsym)
       {
-        if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
-            && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
-          {
-	    std::vector<struct block_symbol> candidates;
-            int n_candidates;
-
-            n_candidates =
-              ada_lookup_symbol_list (exp->elts[pc + 5].symbol->linkage_name (),
-                                      exp->elts[pc + 4].block, VAR_DOMAIN,
-                                      &candidates);
-
-            if (n_candidates == 1)
-              i = 0;
-            else
-              {
-                i = ada_resolve_function
-                  (candidates.data (), n_candidates,
-                   argvec, nargs,
-                   exp->elts[pc + 5].symbol->linkage_name (),
-                   context_type, parse_completion);
-                if (i < 0)
-                  error (_("Could not find a match for %s"),
-                         exp->elts[pc + 5].symbol->print_name ());
-              }
-
-            exp->elts[pc + 4].block = candidates[i].block;
-            exp->elts[pc + 5].symbol = candidates[i].symbol;
-	    tracker->update (candidates[i]);
-          }
-      }
-      break;
-    case BINOP_ADD:
-    case BINOP_SUB:
-    case BINOP_MUL:
-    case BINOP_DIV:
-    case BINOP_REM:
-    case BINOP_MOD:
-    case BINOP_CONCAT:
-    case BINOP_BITWISE_AND:
-    case BINOP_BITWISE_IOR:
-    case BINOP_BITWISE_XOR:
-    case BINOP_EQUAL:
-    case BINOP_NOTEQUAL:
-    case BINOP_LESS:
-    case BINOP_GTR:
-    case BINOP_LEQ:
-    case BINOP_GEQ:
-    case BINOP_EXP:
-    case UNOP_NEG:
-    case UNOP_PLUS:
-    case UNOP_LOGICAL_NOT:
-    case UNOP_ABS:
-      if (possible_user_operator_p (op, argvec))
-        {
-	  std::vector<struct block_symbol> candidates;
-          int n_candidates;
-
-          n_candidates =
-            ada_lookup_symbol_list (ada_decoded_op_name (op),
-				    NULL, VAR_DOMAIN,
-                                    &candidates);
+	return bsym.symbol->is_artificial ();
+      }),
+     candidates.end ());
 
-          i = ada_resolve_function (candidates.data (), n_candidates, argvec,
-				    nargs, ada_decoded_op_name (op), NULL,
-				    parse_completion);
-          if (i < 0)
-            break;
+  int i;
+  if (candidates.empty ())
+    error (_("No definition found for %s"), sym->print_name ());
+  else if (candidates.size () == 1)
+    i = 0;
+  else if (context_type != nullptr
+	   && context_type->code () == TYPE_CODE_ENUM)
+    i = ada_resolve_enum (candidates, sym->linkage_name (), context_type,
+			  parse_completion);
+  else if (context_type == nullptr
+	   && symbols_are_identical_enums (candidates))
+    {
+      /* If all the remaining symbols are identical enumerals, then
+	 just keep the first one and discard the rest.
+
+	 Unlike what we did previously, we do not discard any entry
+	 unless they are ALL identical.  This is because the symbol
+	 comparison is not a strict comparison, but rather a practical
+	 comparison.  If all symbols are considered identical, then
+	 we can just go ahead and use the first one and discard the rest.
+	 But if we cannot reduce the list to a single element, we have
+	 to ask the user to disambiguate anyways.  And if we have to
+	 present a multiple-choice menu, it's less confusing if the list
+	 isn't missing some choices that were identical and yet distinct.  */
+      candidates.resize (1);
+      i = 0;
+    }
+  else if (deprocedure_p && !is_nonfunction (candidates))
+    {
+      i = ada_resolve_function
+	(candidates, NULL, 0,
+	 sym->linkage_name (),
+	 context_type, parse_completion);
+      if (i < 0)
+	error (_("Could not find a match for %s"), sym->print_name ());
+    }
+  else
+    {
+      gdb_printf (_("Multiple matches for %s\n"), sym->print_name ());
+      user_select_syms (candidates.data (), candidates.size (), 1);
+      i = 0;
+    }
+
+  tracker->update (candidates[i]);
+  return candidates[i];
+}
+
+static bool ada_type_match (struct type *ftype, struct type *atype);
+
+/* Helper for ada_type_match that checks that two array types are
+   compatible.  As with that function, FTYPE is the formal type and
+   ATYPE is the actual type.  */
 
-	  replace_operator_with_call (expp, pc, nargs, 1,
-				      candidates[i].symbol,
-				      candidates[i].block);
-          exp = expp->get ();
-        }
-      break;
+static bool
+ada_type_match_arrays (struct type *ftype, struct type *atype)
+{
+  if (ftype->code () != TYPE_CODE_ARRAY
+      && !ada_is_array_descriptor_type (ftype))
+    return false;
+  if (atype->code () != TYPE_CODE_ARRAY
+      && !ada_is_array_descriptor_type (atype))
+    return false;
 
-    case OP_TYPE:
-    case OP_REGISTER:
-      return NULL;
-    }
+  if (ada_array_arity (ftype) != ada_array_arity (atype))
+    return false;
 
-  *pos = pc;
-  if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
-    return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
-				    exp->elts[pc + 1].objfile,
-				    exp->elts[pc + 2].msymbol);
-  else
-    return evaluate_subexp_type (exp, pos);
+  struct type *f_elt_type = ada_array_element_type (ftype, -1);
+  struct type *a_elt_type = ada_array_element_type (atype, -1);
+  return ada_type_match (f_elt_type, a_elt_type);
 }
 
-/* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
-   MAY_DEREF is non-zero, the formal may be a pointer and the actual
-   a non-pointer.  */
-/* The term "match" here is rather loose.  The match is heuristic and
-   liberal.  */
+/* Return non-zero if formal type FTYPE matches actual type ATYPE.
+   The term "match" here is rather loose.  The match is heuristic and
+   liberal -- while it tries to reject matches that are obviously
+   incorrect, it may still let through some that do not strictly
+   correspond to Ada rules.  */
 
-static int
-ada_type_match (struct type *ftype, struct type *atype, int may_deref)
+static bool
+ada_type_match (struct type *ftype, struct type *atype)
 {
   ftype = ada_check_typedef (ftype);
   atype = ada_check_typedef (atype);
 
-  if (TYPE_CODE (ftype) == TYPE_CODE_REF)
-    ftype = TYPE_TARGET_TYPE (ftype);
-  if (TYPE_CODE (atype) == TYPE_CODE_REF)
-    atype = TYPE_TARGET_TYPE (atype);
+  if (ftype->code () == TYPE_CODE_REF)
+    ftype = ftype->target_type ();
+  if (atype->code () == TYPE_CODE_REF)
+    atype = atype->target_type ();
 
-  switch (TYPE_CODE (ftype))
+  switch (ftype->code ())
     {
     default:
-      return TYPE_CODE (ftype) == TYPE_CODE (atype);
+      return ftype->code () == atype->code ();
     case TYPE_CODE_PTR:
-      if (TYPE_CODE (atype) == TYPE_CODE_PTR)
-        return ada_type_match (TYPE_TARGET_TYPE (ftype),
-                               TYPE_TARGET_TYPE (atype), 0);
-      else
-        return (may_deref
-                && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
+      if (atype->code () != TYPE_CODE_PTR)
+	return false;
+      atype = atype->target_type ();
+      /* This can only happen if the actual argument is 'null'.  */
+      if (atype->code () == TYPE_CODE_INT && atype->length () == 0)
+	return true;
+      return ada_type_match (ftype->target_type (), atype);
     case TYPE_CODE_INT:
     case TYPE_CODE_ENUM:
     case TYPE_CODE_RANGE:
-      switch (TYPE_CODE (atype))
-        {
-        case TYPE_CODE_INT:
-        case TYPE_CODE_ENUM:
-        case TYPE_CODE_RANGE:
-          return 1;
-        default:
-          return 0;
-        }
-
-    case TYPE_CODE_ARRAY:
-      return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
-              || ada_is_array_descriptor_type (atype));
+      switch (atype->code ())
+	{
+	case TYPE_CODE_INT:
+	case TYPE_CODE_ENUM:
+	case TYPE_CODE_RANGE:
+	  return true;
+	default:
+	  return false;
+	}
 
     case TYPE_CODE_STRUCT:
-      if (ada_is_array_descriptor_type (ftype))
-        return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
-                || ada_is_array_descriptor_type (atype));
-      else
-        return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
-                && !ada_is_array_descriptor_type (atype));
+      if (!ada_is_array_descriptor_type (ftype))
+	return (atype->code () == TYPE_CODE_STRUCT
+		&& !ada_is_array_descriptor_type (atype));
+
+      [[fallthrough]];
+    case TYPE_CODE_ARRAY:
+      return ada_type_match_arrays (ftype, atype);
 
     case TYPE_CODE_UNION:
     case TYPE_CODE_FLT:
-      return (TYPE_CODE (atype) == TYPE_CODE (ftype));
+      return (atype->code () == ftype->code ());
     }
 }
 
@@ -3914,30 +4017,29 @@ static int
 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
 {
   int i;
-  struct type *func_type = SYMBOL_TYPE (func);
+  struct type *func_type = func->type ();
 
-  if (SYMBOL_CLASS (func) == LOC_CONST
-      && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
+  if (func->aclass () == LOC_CONST
+      && func_type->code () == TYPE_CODE_ENUM)
     return (n_actuals == 0);
-  else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
+  else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC)
     return 0;
 
-  if (TYPE_NFIELDS (func_type) != n_actuals)
+  if (func_type->num_fields () != n_actuals)
     return 0;
 
   for (i = 0; i < n_actuals; i += 1)
     {
       if (actuals[i] == NULL)
-        return 0;
+	return 0;
       else
-        {
-          struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
-								   i));
-          struct type *atype = ada_check_typedef (value_type (actuals[i]));
-
-          if (!ada_type_match (ftype, atype, 1))
-            return 0;
-        }
+	{
+	  struct type *ftype = ada_check_typedef (func_type->field (i).type ());
+	  struct type *atype = ada_check_typedef (actuals[i]->type ());
+
+	  if (!ada_type_match (ftype, atype))
+	    return 0;
+	}
     }
   return 1;
 }
@@ -3955,8 +4057,8 @@ return_match (struct type *func_type, st
   if (func_type == NULL)
     return 1;
 
-  if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
-    return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
+  if (func_type->code () == TYPE_CODE_FUNC)
+    return_type = get_base_type (func_type->target_type ());
   else
     return_type = get_base_type (func_type);
   if (return_type == NULL)
@@ -3964,16 +4066,16 @@ return_match (struct type *func_type, st
 
   context_type = get_base_type (context_type);
 
-  if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
+  if (return_type->code () == TYPE_CODE_ENUM)
     return context_type == NULL || return_type == context_type;
   else if (context_type == NULL)
-    return TYPE_CODE (return_type) != TYPE_CODE_VOID;
+    return return_type->code () != TYPE_CODE_VOID;
   else
-    return TYPE_CODE (return_type) == TYPE_CODE (context_type);
+    return return_type->code () == context_type->code ();
 }
 
 
-/* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
+/* Returns the index in SYMS that contains the symbol for the
    function (if any) that matches the types of the NARGS arguments in
    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
    that returns that type, then eliminate matches that don't.  If
@@ -3986,10 +4088,10 @@ return_match (struct type *func_type, st
    the process; the index returned is for the modified vector.  */
 
 static int
-ada_resolve_function (struct block_symbol syms[],
-                      int nsyms, struct value **args, int nargs,
-                      const char *name, struct type *context_type,
-		      int parse_completion)
+ada_resolve_function (std::vector<struct block_symbol> &syms,
+		      struct value **args, int nargs,
+		      const char *name, struct type *context_type,
+		      bool parse_completion)
 {
   int fallback;
   int k;
@@ -4001,17 +4103,17 @@ ada_resolve_function (struct block_symbo
      where every function is accepted.  */
   for (fallback = 0; m == 0 && fallback < 2; fallback++)
     {
-      for (k = 0; k < nsyms; k += 1)
-        {
-          struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
-
-          if (ada_args_match (syms[k].symbol, args, nargs)
-              && (fallback || return_match (type, context_type)))
-            {
-              syms[m] = syms[k];
-              m += 1;
-            }
-        }
+      for (k = 0; k < syms.size (); k += 1)
+	{
+	  struct type *type = ada_check_typedef (syms[k].symbol->type ());
+
+	  if (ada_args_match (syms[k].symbol, args, nargs)
+	      && (fallback || return_match (type, context_type)))
+	    {
+	      syms[m] = syms[k];
+	      m += 1;
+	    }
+	}
     }
 
   /* If we got multiple matches, ask the user which one to use.  Don't do this
@@ -4022,46 +4124,13 @@ ada_resolve_function (struct block_symbo
     return -1;
   else if (m > 1 && !parse_completion)
     {
-      printf_filtered (_("Multiple matches for %s\n"), name);
-      user_select_syms (syms, m, 1);
+      gdb_printf (_("Multiple matches for %s\n"), name);
+      user_select_syms (syms.data (), m, 1);
       return 0;
     }
   return 0;
 }
 
-/* Replace the operator of length OPLEN at position PC in *EXPP with a call
-   on the function identified by SYM and BLOCK, and taking NARGS
-   arguments.  Update *EXPP as needed to hold more space.  */
-
-static void
-replace_operator_with_call (expression_up *expp, int pc, int nargs,
-                            int oplen, struct symbol *sym,
-                            const struct block *block)
-{
-  /* A new expression, with 6 more elements (3 for funcall, 4 for function
-     symbol, -oplen for operator being replaced).  */
-  struct expression *newexp = (struct expression *)
-    xzalloc (sizeof (struct expression)
-             + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
-  struct expression *exp = expp->get ();
-
-  newexp->nelts = exp->nelts + 7 - oplen;
-  newexp->language_defn = exp->language_defn;
-  newexp->gdbarch = exp->gdbarch;
-  memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
-  memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
-          EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
-
-  newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
-  newexp->elts[pc + 1].longconst = (LONGEST) nargs;
-
-  newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
-  newexp->elts[pc + 4].block = block;
-  newexp->elts[pc + 5].symbol = sym;
-
-  expp->reset (newexp);
-}
-
 /* Type-class predicates */
 
 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
@@ -4074,17 +4143,18 @@ numeric_type_p (struct type *type)
     return 0;
   else
     {
-      switch (TYPE_CODE (type))
-        {
-        case TYPE_CODE_INT:
-        case TYPE_CODE_FLT:
-          return 1;
-        case TYPE_CODE_RANGE:
-          return (type == TYPE_TARGET_TYPE (type)
-                  || numeric_type_p (TYPE_TARGET_TYPE (type)));
-        default:
-          return 0;
-        }
+      switch (type->code ())
+	{
+	case TYPE_CODE_INT:
+	case TYPE_CODE_FLT:
+	case TYPE_CODE_FIXED_POINT:
+	  return 1;
+	case TYPE_CODE_RANGE:
+	  return (type == type->target_type ()
+		  || numeric_type_p (type->target_type ()));
+	default:
+	  return 0;
+	}
     }
 }
 
@@ -4097,16 +4167,16 @@ integer_type_p (struct type *type)
     return 0;
   else
     {
-      switch (TYPE_CODE (type))
-        {
-        case TYPE_CODE_INT:
-          return 1;
-        case TYPE_CODE_RANGE:
-          return (type == TYPE_TARGET_TYPE (type)
-                  || integer_type_p (TYPE_TARGET_TYPE (type)));
-        default:
-          return 0;
-        }
+      switch (type->code ())
+	{
+	case TYPE_CODE_INT:
+	  return 1;
+	case TYPE_CODE_RANGE:
+	  return (type == type->target_type ()
+		  || integer_type_p (type->target_type ()));
+	default:
+	  return 0;
+	}
     }
 }
 
@@ -4119,20 +4189,23 @@ scalar_type_p (struct type *type)
     return 0;
   else
     {
-      switch (TYPE_CODE (type))
-        {
-        case TYPE_CODE_INT:
-        case TYPE_CODE_RANGE:
-        case TYPE_CODE_ENUM:
-        case TYPE_CODE_FLT:
-          return 1;
-        default:
-          return 0;
-        }
+      switch (type->code ())
+	{
+	case TYPE_CODE_INT:
+	case TYPE_CODE_RANGE:
+	case TYPE_CODE_ENUM:
+	case TYPE_CODE_FLT:
+	case TYPE_CODE_FIXED_POINT:
+	  return 1;
+	default:
+	  return 0;
+	}
     }
 }
 
-/* True iff TYPE is discrete (INT, RANGE, ENUM).  */
+/* True iff TYPE is discrete, as defined in the Ada Reference Manual.
+   This essentially means one of (INT, RANGE, ENUM) -- but note that
+   "enum" includes character and boolean as well.  */
 
 static int
 discrete_type_p (struct type *type)
@@ -4141,16 +4214,17 @@ discrete_type_p (struct type *type)
     return 0;
   else
     {
-      switch (TYPE_CODE (type))
-        {
-        case TYPE_CODE_INT:
-        case TYPE_CODE_RANGE:
-        case TYPE_CODE_ENUM:
-        case TYPE_CODE_BOOL:
-          return 1;
-        default:
-          return 0;
-        }
+      switch (type->code ())
+	{
+	case TYPE_CODE_INT:
+	case TYPE_CODE_RANGE:
+	case TYPE_CODE_ENUM:
+	case TYPE_CODE_BOOL:
+	case TYPE_CODE_CHAR:
+	  return 1;
+	default:
+	  return 0;
+	}
     }
 }
 
@@ -4162,9 +4236,9 @@ static int
 possible_user_operator_p (enum exp_opcode op, struct value *args[])
 {
   struct type *type0 =
-    (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
+    (args[0] == NULL) ? NULL : ada_check_typedef (args[0]->type ());
   struct type *type1 =
-    (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
+    (args[1] == NULL) ? NULL : ada_check_typedef (args[1]->type ());
 
   if (type0 == NULL)
     return 0;
@@ -4210,7 +4284,7 @@ possible_user_operator_p (enum exp_opcod
     }
 }
 
-                                /* Renaming */
+				/* Renaming */
 
 /* NOTES: 
 
@@ -4254,7 +4328,7 @@ ada_parse_renaming (struct symbol *sym,
 
   if (sym == NULL)
     return ADA_NOT_RENAMING;
-  switch (SYMBOL_CLASS (sym)) 
+  switch (sym->aclass ()) 
     {
     default:
       return ADA_NOT_RENAMING;
@@ -4313,11 +4387,11 @@ ada_read_renaming_var_value (struct symb
 
   sym_name = renaming_sym->linkage_name ();
   expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
-  return evaluate_expression (expr.get ());
+  return expr->evaluate ();
 }
 
 
-                                /* Evaluation: Function Calls */
+				/* Evaluation: Function Calls */
 
 /* Return an lvalue containing the value VAL.  This is the identity on
    lvalues, and otherwise has the side-effect of allocating memory
@@ -4326,16 +4400,16 @@ ada_read_renaming_var_value (struct symb
 static struct value *
 ensure_lval (struct value *val)
 {
-  if (VALUE_LVAL (val) == not_lval
-      || VALUE_LVAL (val) == lval_internalvar)
+  if (val->lval () == not_lval
+      || val->lval () == lval_internalvar)
     {
-      int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
+      int len = ada_check_typedef (val->type ())->length ();
       const CORE_ADDR addr =
-        value_as_long (value_allocate_space_in_inferior (len));
+	value_as_long (value_allocate_space_in_inferior (len));
 
-      VALUE_LVAL (val) = lval_memory;
-      set_value_address (val, addr);
-      write_memory (addr, value_contents (val), len);
+      val->set_lval (lval_memory);
+      val->set_address (addr);
+      write_memory (addr, val->contents ().data (), len);
     }
 
   return val;
@@ -4361,36 +4435,36 @@ ada_value_struct_elt (struct value *arg,
   int check_tag;
 
   v = NULL;
-  t1 = t = ada_check_typedef (value_type (arg));
-  if (TYPE_CODE (t) == TYPE_CODE_REF)
+  t1 = t = ada_check_typedef (arg->type ());
+  if (t->code () == TYPE_CODE_REF)
     {
-      t1 = TYPE_TARGET_TYPE (t);
+      t1 = t->target_type ();
       if (t1 == NULL)
 	goto BadValue;
       t1 = ada_check_typedef (t1);
-      if (TYPE_CODE (t1) == TYPE_CODE_PTR)
-        {
-          arg = coerce_ref (arg);
-          t = t1;
-        }
+      if (t1->code () == TYPE_CODE_PTR)
+	{
+	  arg = coerce_ref (arg);
+	  t = t1;
+	}
     }
 
-  while (TYPE_CODE (t) == TYPE_CODE_PTR)
+  while (t->code () == TYPE_CODE_PTR)
     {
-      t1 = TYPE_TARGET_TYPE (t);
+      t1 = t->target_type ();
       if (t1 == NULL)
 	goto BadValue;
       t1 = ada_check_typedef (t1);
-      if (TYPE_CODE (t1) == TYPE_CODE_PTR)
-        {
-          arg = value_ind (arg);
-          t = t1;
-        }
+      if (t1->code () == TYPE_CODE_PTR)
+	{
+	  arg = value_ind (arg);
+	  t = t1;
+	}
       else
-        break;
+	break;
     }
 
-  if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
+  if (t1->code () != TYPE_CODE_STRUCT && t1->code () != TYPE_CODE_UNION)
     goto BadValue;
 
   if (t1 == t)
@@ -4401,31 +4475,31 @@ ada_value_struct_elt (struct value *arg,
       struct type *field_type;
       CORE_ADDR address;
 
-      if (TYPE_CODE (t) == TYPE_CODE_PTR)
-	address = value_address (ada_value_ind (arg));
+      if (t->code () == TYPE_CODE_PTR)
+	address = ada_value_ind (arg)->address ();
       else
-	address = value_address (ada_coerce_ref (arg));
+	address = ada_coerce_ref (arg)->address ();
 
       /* Check to see if this is a tagged type.  We also need to handle
-         the case where the type is a reference to a tagged type, but
-         we have to be careful to exclude pointers to tagged types.
-         The latter should be shown as usual (as a pointer), whereas
-         a reference should mostly be transparent to the user.  */
+	 the case where the type is a reference to a tagged type, but
+	 we have to be careful to exclude pointers to tagged types.
+	 The latter should be shown as usual (as a pointer), whereas
+	 a reference should mostly be transparent to the user.  */
 
       if (ada_is_tagged_type (t1, 0)
-          || (TYPE_CODE (t1) == TYPE_CODE_REF
-              && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
-        {
-          /* We first try to find the searched field in the current type.
+	  || (t1->code () == TYPE_CODE_REF
+	      && ada_is_tagged_type (t1->target_type (), 0)))
+	{
+	  /* We first try to find the searched field in the current type.
 	     If not found then let's look in the fixed type.  */
 
-          if (!find_struct_field (name, t1, 0,
-                                  &field_type, &byte_offset, &bit_offset,
-                                  &bit_size, NULL))
+	  if (!find_struct_field (name, t1, 0,
+				  nullptr, nullptr, nullptr,
+				  nullptr, nullptr))
 	    check_tag = 1;
 	  else
 	    check_tag = 0;
-        }
+	}
       else
 	check_tag = 0;
 
@@ -4434,23 +4508,27 @@ ada_value_struct_elt (struct value *arg,
       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
 			      address, NULL, check_tag);
 
+      /* Resolve the dynamic type as well.  */
+      arg = value_from_contents_and_address (t1, nullptr, address);
+      t1 = arg->type ();
+
       if (find_struct_field (name, t1, 0,
-                             &field_type, &byte_offset, &bit_offset,
-                             &bit_size, NULL))
-        {
-          if (bit_size != 0)
-            {
-              if (TYPE_CODE (t) == TYPE_CODE_REF)
-                arg = ada_coerce_ref (arg);
-              else
-                arg = ada_value_ind (arg);
-              v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
-                                                  bit_offset, bit_size,
-                                                  field_type);
-            }
-          else
-            v = value_at_lazy (field_type, address + byte_offset);
-        }
+			     &field_type, &byte_offset, &bit_offset,
+			     &bit_size, NULL))
+	{
+	  if (bit_size != 0)
+	    {
+	      if (t->code () == TYPE_CODE_REF)
+		arg = ada_coerce_ref (arg);
+	      else
+		arg = ada_value_ind (arg);
+	      v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
+						  bit_offset, bit_size,
+						  field_type);
+	    }
+	  else
+	    v = value_at_lazy (field_type, address + byte_offset);
+	}
     }
 
   if (v != NULL || no_err)
@@ -4474,52 +4552,50 @@ ada_value_struct_elt (struct value *arg,
 struct value *
 ada_convert_actual (struct value *actual, struct type *formal_type0)
 {
-  struct type *actual_type = ada_check_typedef (value_type (actual));
+  struct type *actual_type = ada_check_typedef (actual->type ());
   struct type *formal_type = ada_check_typedef (formal_type0);
   struct type *formal_target =
-    TYPE_CODE (formal_type) == TYPE_CODE_PTR
-    ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
+    formal_type->code () == TYPE_CODE_PTR
+    ? ada_check_typedef (formal_type->target_type ()) : formal_type;
   struct type *actual_target =
-    TYPE_CODE (actual_type) == TYPE_CODE_PTR
-    ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
+    actual_type->code () == TYPE_CODE_PTR
+    ? ada_check_typedef (actual_type->target_type ()) : actual_type;
 
   if (ada_is_array_descriptor_type (formal_target)
-      && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
+      && actual_target->code () == TYPE_CODE_ARRAY)
     return make_array_descriptor (formal_type, actual);
-  else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
-	   || TYPE_CODE (formal_type) == TYPE_CODE_REF)
+  else if (formal_type->code () == TYPE_CODE_PTR
+	   || formal_type->code () == TYPE_CODE_REF)
     {
       struct value *result;
 
-      if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
-          && ada_is_array_descriptor_type (actual_target))
+      if (formal_target->code () == TYPE_CODE_ARRAY
+	  && ada_is_array_descriptor_type (actual_target))
 	result = desc_data (actual);
-      else if (TYPE_CODE (formal_type) != TYPE_CODE_PTR)
-        {
-          if (VALUE_LVAL (actual) != lval_memory)
-            {
-              struct value *val;
-
-              actual_type = ada_check_typedef (value_type (actual));
-              val = allocate_value (actual_type);
-              memcpy ((char *) value_contents_raw (val),
-                      (char *) value_contents (actual),
-                      TYPE_LENGTH (actual_type));
-              actual = ensure_lval (val);
-            }
-          result = value_addr (actual);
-        }
+      else if (formal_type->code () != TYPE_CODE_PTR)
+	{
+	  if (actual->lval () != lval_memory)
+	    {
+	      struct value *val;
+
+	      actual_type = ada_check_typedef (actual->type ());
+	      val = value::allocate (actual_type);
+	      copy (actual->contents (), val->contents_raw ());
+	      actual = ensure_lval (val);
+	    }
+	  result = value_addr (actual);
+	}
       else
 	return actual;
       return value_cast_pointers (formal_type, result, 0);
     }
-  else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
+  else if (actual_type->code () == TYPE_CODE_PTR)
     return ada_value_ind (actual);
   else if (ada_is_aligner_type (formal_type))
     {
       /* We need to turn this parameter into an aligner type
 	 as well.  */
-      struct value *aligner = allocate_value (formal_type);
+      struct value *aligner = value::allocate (formal_type);
       struct value *component = ada_value_struct_elt (aligner, "F", 0);
 
       value_assign_to_component (aligner, component, actual);
@@ -4537,13 +4613,12 @@ ada_convert_actual (struct value *actual
 static CORE_ADDR
 value_pointer (struct value *value, struct type *type)
 {
-  struct gdbarch *gdbarch = get_type_arch (type);
-  unsigned len = TYPE_LENGTH (type);
+  unsigned len = type->length ();
   gdb_byte *buf = (gdb_byte *) alloca (len);
   CORE_ADDR addr;
 
-  addr = value_address (value);
-  gdbarch_address_to_pointer (gdbarch, type, buf, addr);
+  addr = value->address ();
+  gdbarch_address_to_pointer (type->arch (), type, buf, addr);
   addr = extract_unsigned_integer (buf, len, type_byte_order (type));
   return addr;
 }
@@ -4560,18 +4635,20 @@ make_array_descriptor (struct type *type
 {
   struct type *bounds_type = desc_bounds_type (type);
   struct type *desc_type = desc_base_type (type);
-  struct value *descriptor = allocate_value (desc_type);
-  struct value *bounds = allocate_value (bounds_type);
+  struct value *descriptor = value::allocate (desc_type);
+  struct value *bounds = value::allocate (bounds_type);
   int i;
 
-  for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
+  for (i = ada_array_arity (ada_check_typedef (arr->type ()));
        i > 0; i -= 1)
     {
-      modify_field (value_type (bounds), value_contents_writeable (bounds),
+      modify_field (bounds->type (),
+		    bounds->contents_writeable ().data (),
 		    ada_array_bound (arr, i, 0),
 		    desc_bound_bitpos (bounds_type, i, 0),
 		    desc_bound_bitsize (bounds_type, i, 0));
-      modify_field (value_type (bounds), value_contents_writeable (bounds),
+      modify_field (bounds->type (),
+		    bounds->contents_writeable ().data (),
 		    ada_array_bound (arr, i, 1),
 		    desc_bound_bitpos (bounds_type, i, 1),
 		    desc_bound_bitsize (bounds_type, i, 1));
@@ -4579,29 +4656,29 @@ make_array_descriptor (struct type *type
 
   bounds = ensure_lval (bounds);
 
-  modify_field (value_type (descriptor),
-		value_contents_writeable (descriptor),
+  modify_field (descriptor->type (),
+		descriptor->contents_writeable ().data (),
 		value_pointer (ensure_lval (arr),
-			       TYPE_FIELD_TYPE (desc_type, 0)),
+			       desc_type->field (0).type ()),
 		fat_pntr_data_bitpos (desc_type),
 		fat_pntr_data_bitsize (desc_type));
 
-  modify_field (value_type (descriptor),
-		value_contents_writeable (descriptor),
+  modify_field (descriptor->type (),
+		descriptor->contents_writeable ().data (),
 		value_pointer (bounds,
-			       TYPE_FIELD_TYPE (desc_type, 1)),
+			       desc_type->field (1).type ()),
 		fat_pntr_bounds_bitpos (desc_type),
 		fat_pntr_bounds_bitsize (desc_type));
 
   descriptor = ensure_lval (descriptor);
 
-  if (TYPE_CODE (type) == TYPE_CODE_PTR)
+  if (type->code () == TYPE_CODE_PTR)
     return value_addr (descriptor);
   else
     return descriptor;
 }
 
-                                /* Symbol Cache Module */
+				/* Symbol Cache Module */
 
 /* Performance measurements made as of 2010-01-15 indicate that
    this cache does bring some noticeable improvements.  Depending
@@ -4613,70 +4690,12 @@ make_array_descriptor (struct type *type
    even in this case, some expensive name-based symbol searches are still
    sometimes necessary - to find an XVZ variable, mostly.  */
 
-/* Initialize the contents of SYM_CACHE.  */
-
-static void
-ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
-{
-  obstack_init (&sym_cache->cache_space);
-  memset (sym_cache->root, '\000', sizeof (sym_cache->root));
-}
-
-/* Free the memory used by SYM_CACHE.  */
-
-static void
-ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
-{
-  obstack_free (&sym_cache->cache_space, NULL);
-  xfree (sym_cache);
-}
-
-/* Return the symbol cache associated to the given program space PSPACE.
-   If not allocated for this PSPACE yet, allocate and initialize one.  */
-
-static struct ada_symbol_cache *
-ada_get_symbol_cache (struct program_space *pspace)
-{
-  struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
-
-  if (pspace_data->sym_cache == NULL)
-    {
-      pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
-      ada_init_symbol_cache (pspace_data->sym_cache);
-    }
-
-  return pspace_data->sym_cache;
-}
-
 /* Clear all entries from the symbol cache.  */
 
 static void
-ada_clear_symbol_cache (void)
+ada_clear_symbol_cache (program_space *pspace)
 {
-  struct ada_symbol_cache *sym_cache
-    = ada_get_symbol_cache (current_program_space);
-
-  obstack_free (&sym_cache->cache_space, NULL);
-  ada_init_symbol_cache (sym_cache);
-}
-
-/* Search our cache for an entry matching NAME and DOMAIN.
-   Return it if found, or NULL otherwise.  */
-
-static struct cache_entry **
-find_entry (const char *name, domain_enum domain)
-{
-  struct ada_symbol_cache *sym_cache
-    = ada_get_symbol_cache (current_program_space);
-  int h = msymbol_hash (name) % HASH_SIZE;
-  struct cache_entry **e;
-
-  for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
-    {
-      if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
-        return e;
-    }
-  return NULL;
+  ada_pspace_data_handle.clear (pspace);
 }
 
 /* Search the symbol cache for an entry matching NAME and DOMAIN.
@@ -4686,17 +4705,22 @@ find_entry (const char *name, domain_enu
    SYM.  Same principle for BLOCK if not NULL.  */
 
 static int
-lookup_cached_symbol (const char *name, domain_enum domain,
-                      struct symbol **sym, const struct block **block)
+lookup_cached_symbol (const char *name, domain_search_flags domain,
+		      struct symbol **sym, const struct block **block)
 {
-  struct cache_entry **e = find_entry (name, domain);
-
-  if (e == NULL)
-    return 0;
-  if (sym != NULL)
-    *sym = (*e)->sym;
-  if (block != NULL)
-    *block = (*e)->block;
+  htab_t tab = get_ada_pspace_data (current_program_space);
+  cache_entry_search search;
+  search.name = name;
+  search.domain = domain;
+
+  cache_entry *e = (cache_entry *) htab_find_with_hash (tab, &search,
+							search.hash ());
+  if (e == nullptr)
+    return 0;
+  if (sym != nullptr)
+    *sym = e->sym;
+  if (block != nullptr)
+    *block = e->block;
   return 1;
 }
 
@@ -4704,44 +4728,44 @@ lookup_cached_symbol (const char *name,
    in domain DOMAIN, save this result in our symbol cache.  */
 
 static void
-cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
-              const struct block *block)
+cache_symbol (const char *name, domain_search_flags domain,
+	      struct symbol *sym, const struct block *block)
 {
-  struct ada_symbol_cache *sym_cache
-    = ada_get_symbol_cache (current_program_space);
-  int h;
-  char *copy;
-  struct cache_entry *e;
-
   /* Symbols for builtin types don't have a block.
      For now don't cache such symbols.  */
-  if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
+  if (sym != NULL && !sym->is_objfile_owned ())
     return;
 
   /* If the symbol is a local symbol, then do not cache it, as a search
      for that symbol depends on the context.  To determine whether
      the symbol is local or not, we check the block where we found it
      against the global and static blocks of its associated symtab.  */
-  if (sym
-      && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
-			    GLOBAL_BLOCK) != block
-      && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
-			    STATIC_BLOCK) != block)
-    return;
+  if (sym != nullptr)
+    {
+      const blockvector &bv = *sym->symtab ()->compunit ()->blockvector ();
 
-  h = msymbol_hash (name) % HASH_SIZE;
-  e = XOBNEW (&sym_cache->cache_space, cache_entry);
-  e->next = sym_cache->root[h];
-  sym_cache->root[h] = e;
-  e->name = copy
-    = (char *) obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
-  strcpy (copy, name);
-  e->sym = sym;
+      if (bv.global_block () != block && bv.static_block () != block)
+	return;
+    }
+
+  htab_t tab = get_ada_pspace_data (current_program_space);
+  cache_entry_search search;
+  search.name = name;
+  search.domain = domain;
+
+  void **slot = htab_find_slot_with_hash (tab, &search,
+					  search.hash (), INSERT);
+
+  cache_entry *e = new cache_entry;
+  e->name = name;
   e->domain = domain;
+  e->sym = sym;
   e->block = block;
+
+  *slot = e;
 }
 
-                                /* Symbol Lookup */
+				/* Symbol Lookup */
 
 /* Return the symbol name match type that should be used used when
    searching for all symbols matching LOOKUP_NAME.
@@ -4762,7 +4786,7 @@ name_match_type_from_name (const char *l
 
 static struct symbol *
 standard_lookup (const char *name, const struct block *block,
-                 domain_enum domain)
+		 domain_search_flags domain)
 {
   /* Initialize it just to avoid a GCC false warning.  */
   struct block_symbol sym = {};
@@ -4776,17 +4800,15 @@ standard_lookup (const char *name, const
 
 
 /* Non-zero iff there is at least one non-function/non-enumeral symbol
-   in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
+   in the symbol fields of SYMS.  We treat enumerals as functions, 
    since they contend in overloading in the same way.  */
 static int
-is_nonfunction (struct block_symbol syms[], int n)
+is_nonfunction (const std::vector<struct block_symbol> &syms)
 {
-  int i;
-
-  for (i = 0; i < n; i += 1)
-    if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_FUNC
-        && (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM
-            || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST))
+  for (const block_symbol &sym : syms)
+    if (sym.symbol->type ()->code () != TYPE_CODE_FUNC
+	&& (sym.symbol->type ()->code () != TYPE_CODE_ENUM
+	    || sym.symbol->aclass () != LOC_CONST))
       return 1;
 
   return 0;
@@ -4801,10 +4823,10 @@ equiv_types (struct type *type0, struct
   if (type0 == type1)
     return 1;
   if (type0 == NULL || type1 == NULL
-      || TYPE_CODE (type0) != TYPE_CODE (type1))
+      || type0->code () != type1->code ())
     return 0;
-  if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
-       || TYPE_CODE (type0) == TYPE_CODE_ENUM)
+  if ((type0->code () == TYPE_CODE_STRUCT
+       || type0->code () == TYPE_CODE_ENUM)
       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
     return 1;
@@ -4820,38 +4842,38 @@ lesseq_defined_than (struct symbol *sym0
 {
   if (sym0 == sym1)
     return 1;
-  if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
-      || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
+  if (sym0->domain () != sym1->domain ()
+      || sym0->aclass () != sym1->aclass ())
     return 0;
 
-  switch (SYMBOL_CLASS (sym0))
+  switch (sym0->aclass ())
     {
     case LOC_UNDEF:
       return 1;
     case LOC_TYPEDEF:
       {
-        struct type *type0 = SYMBOL_TYPE (sym0);
-        struct type *type1 = SYMBOL_TYPE (sym1);
-        const char *name0 = sym0->linkage_name ();
-        const char *name1 = sym1->linkage_name ();
-        int len0 = strlen (name0);
-
-        return
-          TYPE_CODE (type0) == TYPE_CODE (type1)
-          && (equiv_types (type0, type1)
-              || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
-                  && startswith (name1 + len0, "___XV")));
+	struct type *type0 = sym0->type ();
+	struct type *type1 = sym1->type ();
+	const char *name0 = sym0->linkage_name ();
+	const char *name1 = sym1->linkage_name ();
+	int len0 = strlen (name0);
+
+	return
+	  type0->code () == type1->code ()
+	  && (equiv_types (type0, type1)
+	      || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
+		  && startswith (name1 + len0, "___XV")));
       }
     case LOC_CONST:
-      return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
-        && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
+      return sym0->value_longest () == sym1->value_longest ()
+	&& equiv_types (sym0->type (), sym1->type ());
 
     case LOC_STATIC:
       {
-        const char *name0 = sym0->linkage_name ();
-        const char *name1 = sym1->linkage_name ();
-        return (strcmp (name0, name1) == 0
-                && SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
+	const char *name0 = sym0->linkage_name ();
+	const char *name1 = sym1->linkage_name ();
+	return (strcmp (name0, name1) == 0
+		&& sym0->value_address () == sym1->value_address ());
       }
 
     default:
@@ -4859,17 +4881,14 @@ lesseq_defined_than (struct symbol *sym0
     }
 }
 
-/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct block_symbol
-   records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
+/* Append (SYM,BLOCK) to the end of the array of struct block_symbol
+   records in RESULT.  Do nothing if SYM is a duplicate.  */
 
 static void
-add_defn_to_vec (struct obstack *obstackp,
-                 struct symbol *sym,
-                 const struct block *block)
+add_defn_to_vec (std::vector<struct block_symbol> &result,
+		 struct symbol *sym,
+		 const struct block *block)
 {
-  int i;
-  struct block_symbol *prevDefns = defns_collected (obstackp, 0);
-
   /* Do not try to complete stub types, as the debugger is probably
      already scanning all symbols matching a certain name at the
      time when this function is called.  Trying to replace the stub
@@ -4879,46 +4898,22 @@ add_defn_to_vec (struct obstack *obstack
      matches, with at least one of them complete.  It can then filter
      out the stub ones if needed.  */
 
-  for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
+  for (int i = result.size () - 1; i >= 0; i -= 1)
     {
-      if (lesseq_defined_than (sym, prevDefns[i].symbol))
-        return;
-      else if (lesseq_defined_than (prevDefns[i].symbol, sym))
-        {
-          prevDefns[i].symbol = sym;
-          prevDefns[i].block = block;
-          return;
-        }
+      if (lesseq_defined_than (sym, result[i].symbol))
+	return;
+      else if (lesseq_defined_than (result[i].symbol, sym))
+	{
+	  result[i].symbol = sym;
+	  result[i].block = block;
+	  return;
+	}
     }
 
-  {
-    struct block_symbol info;
-
-    info.symbol = sym;
-    info.block = block;
-    obstack_grow (obstackp, &info, sizeof (struct block_symbol));
-  }
-}
-
-/* Number of block_symbol structures currently collected in current vector in
-   OBSTACKP.  */
-
-static int
-num_defns_collected (struct obstack *obstackp)
-{
-  return obstack_object_size (obstackp) / sizeof (struct block_symbol);
-}
-
-/* Vector of block_symbol structures currently collected in current vector in
-   OBSTACKP.  If FINISH, close off the vector and return its final address.  */
-
-static struct block_symbol *
-defns_collected (struct obstack *obstackp, int finish)
-{
-  if (finish)
-    return (struct block_symbol *) obstack_finish (obstackp);
-  else
-    return (struct block_symbol *) obstack_base (obstackp);
+  struct block_symbol info;
+  info.symbol = sym;
+  info.block = block;
+  result.push_back (info);
 }
 
 /* Return a bound minimal symbol matching NAME according to Ada
@@ -4928,46 +4923,35 @@ defns_collected (struct obstack *obstack
    global symbols are searched.  */
 
 struct bound_minimal_symbol
-ada_lookup_simple_minsym (const char *name)
+ada_lookup_simple_minsym (const char *name, struct objfile *objfile)
 {
   struct bound_minimal_symbol result;
 
-  memset (&result, 0, sizeof (result));
-
   symbol_name_match_type match_type = name_match_type_from_name (name);
   lookup_name_info lookup_name (name, match_type);
 
   symbol_name_matcher_ftype *match_name
     = ada_get_symbol_name_matcher (lookup_name);
 
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      for (minimal_symbol *msymbol : objfile->msymbols ())
-	{
-	  if (match_name (msymbol->linkage_name (), lookup_name, NULL)
-	      && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
-	    {
-	      result.minsym = msymbol;
-	      result.objfile = objfile;
-	      break;
-	    }
-	}
-    }
-
-  return result;
-}
+  gdbarch_iterate_over_objfiles_in_search_order
+    (objfile != NULL ? objfile->arch () : current_inferior ()->arch (),
+     [&result, lookup_name, match_name] (struct objfile *obj)
+       {
+	 for (minimal_symbol *msymbol : obj->msymbols ())
+	   {
+	     if (match_name (msymbol->linkage_name (), lookup_name, nullptr)
+		 && msymbol->type () != mst_solib_trampoline)
+	       {
+		 result.minsym = msymbol;
+		 result.objfile = obj;
+		 return 1;
+	       }
+	   }
 
-/* For all subprograms that statically enclose the subprogram of the
-   selected frame, add symbols matching identifier NAME in DOMAIN
-   and their blocks to the list of data in OBSTACKP, as for
-   ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
-   with a wildcard prefix.  */
+	 return 0;
+       }, objfile);
 
-static void
-add_symbols_from_enclosing_procs (struct obstack *obstackp,
-				  const lookup_name_info &lookup_name,
-				  domain_enum domain)
-{
+  return result;
 }
 
 /* True if TYPE is definitely an artificial type supplied to a symbol
@@ -4986,7 +4970,7 @@ is_nondebugging_type (struct type *type)
 
    This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
    types and that their number of enumerals is identical (in other
-   words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)).  */
+   words, type1->num_fields () == type2->num_fields ()).  */
 
 static int
 ada_identical_enum_types_p (struct type *type1, struct type *type2)
@@ -4999,24 +4983,24 @@ ada_identical_enum_types_p (struct type
      underlying value and name.  */
 
   /* All enums in the type should have an identical underlying value.  */
-  for (i = 0; i < TYPE_NFIELDS (type1); i++)
-    if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
+  for (i = 0; i < type1->num_fields (); i++)
+    if (type1->field (i).loc_enumval () != type2->field (i).loc_enumval ())
       return 0;
 
   /* All enumerals should also have the same name (modulo any numerical
      suffix).  */
-  for (i = 0; i < TYPE_NFIELDS (type1); i++)
+  for (i = 0; i < type1->num_fields (); i++)
     {
-      const char *name_1 = TYPE_FIELD_NAME (type1, i);
-      const char *name_2 = TYPE_FIELD_NAME (type2, i);
+      const char *name_1 = type1->field (i).name ();
+      const char *name_2 = type2->field (i).name ();
       int len_1 = strlen (name_1);
       int len_2 = strlen (name_2);
 
-      ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
-      ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
+      ada_remove_trailing_digits (type1->field (i).name (), &len_1);
+      ada_remove_trailing_digits (type2->field (i).name (), &len_2);
       if (len_1 != len_2
-          || strncmp (TYPE_FIELD_NAME (type1, i),
-		      TYPE_FIELD_NAME (type2, i),
+	  || strncmp (type1->field (i).name (),
+		      type2->field (i).name (),
 		      len_1) != 0)
 	return 0;
     }
@@ -5058,26 +5042,26 @@ symbols_are_identical_enums (const std::
 
   /* Quick check: All symbols should have an enum type.  */
   for (i = 0; i < syms.size (); i++)
-    if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM)
+    if (syms[i].symbol->type ()->code () != TYPE_CODE_ENUM)
       return 0;
 
   /* Quick check: They should all have the same value.  */
   for (i = 1; i < syms.size (); i++)
-    if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
+    if (syms[i].symbol->value_longest () != syms[0].symbol->value_longest ())
       return 0;
 
   /* Quick check: They should all have the same number of enumerals.  */
   for (i = 1; i < syms.size (); i++)
-    if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].symbol))
-        != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].symbol)))
+    if (syms[i].symbol->type ()->num_fields ()
+	!= syms[0].symbol->type ()->num_fields ())
       return 0;
 
   /* All the sanity checks passed, so we might have a set of
      identical enumeration types.  Perform a more complete
      comparison of the type of each symbol.  */
   for (i = 1; i < syms.size (); i++)
-    if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
-                                     SYMBOL_TYPE (syms[0].symbol)))
+    if (!ada_identical_enum_types_p (syms[i].symbol->type (),
+				     syms[0].symbol->type ()))
       return 0;
 
   return 1;
@@ -5087,85 +5071,81 @@ symbols_are_identical_enums (const std::
    duplicate other symbols in the list (The only case I know of where
    this happens is when object files containing stabs-in-ecoff are
    linked with files containing ordinary ecoff debugging symbols (or no
-   debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
-   Returns the number of items in the modified list.  */
+   debugging symbols)).  Modifies SYMS to squeeze out deleted entries.  */
 
-static int
-remove_extra_symbols (std::vector<struct block_symbol> *syms)
+static void
+remove_extra_symbols (std::vector<struct block_symbol> &syms)
 {
   int i, j;
 
   /* We should never be called with less than 2 symbols, as there
      cannot be any extra symbol in that case.  But it's easy to
      handle, since we have nothing to do in that case.  */
-  if (syms->size () < 2)
-    return syms->size ();
+  if (syms.size () < 2)
+    return;
 
   i = 0;
-  while (i < syms->size ())
+  while (i < syms.size ())
     {
-      int remove_p = 0;
+      bool remove_p = false;
 
       /* If two symbols have the same name and one of them is a stub type,
-         the get rid of the stub.  */
+	 the get rid of the stub.  */
 
-      if (TYPE_STUB (SYMBOL_TYPE ((*syms)[i].symbol))
-          && (*syms)[i].symbol->linkage_name () != NULL)
-        {
-          for (j = 0; j < syms->size (); j++)
-            {
-              if (j != i
-                  && !TYPE_STUB (SYMBOL_TYPE ((*syms)[j].symbol))
-                  && (*syms)[j].symbol->linkage_name () != NULL
-                  && strcmp ((*syms)[i].symbol->linkage_name (),
-                             (*syms)[j].symbol->linkage_name ()) == 0)
-                remove_p = 1;
-            }
-        }
+      if (syms[i].symbol->type ()->is_stub ()
+	  && syms[i].symbol->linkage_name () != NULL)
+	{
+	  for (j = 0; !remove_p && j < syms.size (); j++)
+	    {
+	      if (j != i
+		  && !syms[j].symbol->type ()->is_stub ()
+		  && syms[j].symbol->linkage_name () != NULL
+		  && strcmp (syms[i].symbol->linkage_name (),
+			     syms[j].symbol->linkage_name ()) == 0)
+		remove_p = true;
+	    }
+	}
 
       /* Two symbols with the same name, same class and same address
-         should be identical.  */
+	 should be identical.  */
 
-      else if ((*syms)[i].symbol->linkage_name () != NULL
-          && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
-          && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
-        {
-          for (j = 0; j < syms->size (); j += 1)
-            {
-              if (i != j
-                  && (*syms)[j].symbol->linkage_name () != NULL
-                  && strcmp ((*syms)[i].symbol->linkage_name (),
-                             (*syms)[j].symbol->linkage_name ()) == 0
-                  && SYMBOL_CLASS ((*syms)[i].symbol)
-		       == SYMBOL_CLASS ((*syms)[j].symbol)
-                  && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
-                  == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
-                remove_p = 1;
-            }
-        }
+      else if (syms[i].symbol->linkage_name () != NULL
+	  && syms[i].symbol->aclass () == LOC_STATIC
+	  && is_nondebugging_type (syms[i].symbol->type ()))
+	{
+	  for (j = 0; !remove_p && j < syms.size (); j += 1)
+	    {
+	      if (i != j
+		  && syms[j].symbol->linkage_name () != NULL
+		  && strcmp (syms[i].symbol->linkage_name (),
+			     syms[j].symbol->linkage_name ()) == 0
+		  && (syms[i].symbol->aclass ()
+		      == syms[j].symbol->aclass ())
+		  && syms[i].symbol->value_address ()
+		  == syms[j].symbol->value_address ())
+		remove_p = true;
+	    }
+	}
       
-      if (remove_p)
-	syms->erase (syms->begin () + i);
-
-      i += 1;
-    }
-
-  /* If all the remaining symbols are identical enumerals, then
-     just keep the first one and discard the rest.
+      /* Two functions with the same block are identical.  */
 
-     Unlike what we did previously, we do not discard any entry
-     unless they are ALL identical.  This is because the symbol
-     comparison is not a strict comparison, but rather a practical
-     comparison.  If all symbols are considered identical, then
-     we can just go ahead and use the first one and discard the rest.
-     But if we cannot reduce the list to a single element, we have
-     to ask the user to disambiguate anyways.  And if we have to
-     present a multiple-choice menu, it's less confusing if the list
-     isn't missing some choices that were identical and yet distinct.  */
-  if (symbols_are_identical_enums (*syms))
-    syms->resize (1);
+      else if (syms[i].symbol->aclass () == LOC_BLOCK)
+	{
+	  for (j = 0; !remove_p && j < syms.size (); j += 1)
+	    {
+	      if (i != j
+		  && syms[j].symbol->aclass () == LOC_BLOCK
+		  && (syms[i].symbol->value_block ()
+		      == syms[j].symbol->value_block ()))
+		remove_p = true;
+	    }
+	}
 
-  return syms->size ();
+      if (remove_p)
+	syms.erase (syms.begin () + i);
+      else
+	i += 1;
+    }
 }
 
 /* Given a type that corresponds to a renaming entity, use the type name
@@ -5181,7 +5161,7 @@ xget_renaming_scope (struct type *renami
      So, to extract the scope, we search for the "___XR" extension,
      and then backtrack until we find the first "__".  */
 
-  const char *name = TYPE_NAME (renaming_type);
+  const char *name = renaming_type->name ();
   const char *suffix = strstr (name, "___XR");
   const char *last;
 
@@ -5209,7 +5189,7 @@ is_package_name (const char *name)
 
   /* If it is a function that has not been defined at library level,
      then we should be able to look it up in the symbols.  */
-  if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
+  if (standard_lookup (name, NULL, SEARCH_VFT) != NULL)
     return 0;
 
   /* Library-level function names start with "_ada_".  See if function
@@ -5222,7 +5202,7 @@ is_package_name (const char *name)
 
   std::string fun_name = string_printf ("_ada_%s", name);
 
-  return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
+  return (standard_lookup (fun_name.c_str (), NULL, SEARCH_VFT) == NULL);
 }
 
 /* Return nonzero if SYM corresponds to a renaming entity that is
@@ -5231,10 +5211,10 @@ is_package_name (const char *name)
 static int
 old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
 {
-  if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
+  if (sym->aclass () != LOC_TYPEDEF)
     return 0;
 
-  std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
+  std::string scope = xget_renaming_scope (sym->type ());
 
   /* If the rename has been defined in a package, then it is visible.  */
   if (is_package_name (scope.c_str ()))
@@ -5257,8 +5237,8 @@ old_renaming_is_invisible (const struct
    is not visible from the function associated with CURRENT_BLOCK or
    that is superfluous due to the presence of more specific renaming
    information.  Places surviving symbols in the initial entries of
-   SYMS and returns the number of surviving symbols.
-   
+   SYMS.
+
    Rationale:
    First, in cases where an object renaming is implemented as a
    reference variable, GNAT may produce both the actual reference
@@ -5280,17 +5260,17 @@ old_renaming_is_invisible (const struct
    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
    
       - When the user tries to print a rename in a function while there
-        is another rename entity defined in a package:  Normally, the
-        rename in the function has precedence over the rename in the
-        package, so the latter should be removed from the list.  This is
-        currently not the case.
-        
+	is another rename entity defined in a package:  Normally, the
+	rename in the function has precedence over the rename in the
+	package, so the latter should be removed from the list.  This is
+	currently not the case.
+	
       - This function will incorrectly remove valid renames if
-        the CURRENT_BLOCK corresponds to a function which symbol name
-        has been changed by an "Export" pragma.  As a consequence,
-        the user will be unable to print such rename entities.  */
+	the CURRENT_BLOCK corresponds to a function which symbol name
+	has been changed by an "Export" pragma.  As a consequence,
+	the user will be unable to print such rename entities.  */
 
-static int
+static void
 remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
 			     const struct block *current_block)
 {
@@ -5310,7 +5290,7 @@ remove_irrelevant_renamings (std::vector
       const char *name;
       const char *suffix;
 
-      if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
+      if (sym == NULL || sym->aclass () == LOC_TYPEDEF)
 	continue;
       name = sym->linkage_name ();
       suffix = strstr (name, "___XR");
@@ -5339,22 +5319,23 @@ remove_irrelevant_renamings (std::vector
 	      (*syms)[k] = (*syms)[j];
 	      k += 1;
 	    }
-      return k;
+      syms->resize (k);
+      return;
     }
 
   /* Extract the function name associated to CURRENT_BLOCK.
      Abort if unable to do so.  */
 
   if (current_block == NULL)
-    return syms->size ();
+    return;
 
-  current_function = block_linkage_function (current_block);
+  current_function = current_block->linkage_function ();
   if (current_function == NULL)
-    return syms->size ();
+    return;
 
   current_function_name = current_function->linkage_name ();
   if (current_function_name == NULL)
-    return syms->size ();
+    return;
 
   /* Check each of the symbols, and remove it from the list if it is
      a type corresponding to a renaming that is out of the scope of
@@ -5364,101 +5345,84 @@ remove_irrelevant_renamings (std::vector
   while (i < syms->size ())
     {
       if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
-          == ADA_OBJECT_RENAMING
-          && old_renaming_is_invisible ((*syms)[i].symbol,
+	  == ADA_OBJECT_RENAMING
+	  && old_renaming_is_invisible ((*syms)[i].symbol,
 					current_function_name))
 	syms->erase (syms->begin () + i);
       else
-        i += 1;
+	i += 1;
     }
-
-  return syms->size ();
 }
 
-/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
-   whose name and domain match NAME and DOMAIN respectively.
-   If no match was found, then extend the search to "enclosing"
-   routines (in other words, if we're inside a nested function,
-   search the symbols defined inside the enclosing functions).
-   If WILD_MATCH_P is nonzero, perform the naming matching in
-   "wild" mode (see function "wild_match" for more info).
+/* Add to RESULT all symbols from BLOCK (and its super-blocks)
+   whose name and domain match LOOKUP_NAME and DOMAIN respectively.
 
-   Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
+   Note: This function assumes that RESULT is empty.  */
 
 static void
-ada_add_local_symbols (struct obstack *obstackp,
+ada_add_local_symbols (std::vector<struct block_symbol> &result,
 		       const lookup_name_info &lookup_name,
-		       const struct block *block, domain_enum domain)
+		       const struct block *block, domain_search_flags domain)
 {
-  int block_depth = 0;
-
   while (block != NULL)
     {
-      block_depth += 1;
-      ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
+      ada_add_block_symbols (result, block, lookup_name, domain, NULL);
 
-      /* If we found a non-function match, assume that's the one.  */
-      if (is_nonfunction (defns_collected (obstackp, 0),
-                          num_defns_collected (obstackp)))
-        return;
+      /* If we found a non-function match, assume that's the one.  We
+	 only check this when finding a function boundary, so that we
+	 can accumulate all results from intervening blocks first.  */
+      if (block->function () != nullptr && is_nonfunction (result))
+	return;
 
-      block = BLOCK_SUPERBLOCK (block);
+      block = block->superblock ();
     }
-
-  /* If no luck so far, try to find NAME as a local symbol in some lexically
-     enclosing subprogram.  */
-  if (num_defns_collected (obstackp) == 0 && block_depth > 2)
-    add_symbols_from_enclosing_procs (obstackp, lookup_name, domain);
 }
 
-/* An object of this type is used as the user_data argument when
+/* An object of this type is used as the callback argument when
    calling the map_matching_symbols method.  */
 
 struct match_data
 {
-  struct objfile *objfile;
-  struct obstack *obstackp;
-  struct symbol *arg_sym;
-  int found_sym;
+  explicit match_data (std::vector<struct block_symbol> *rp)
+    : resultp (rp)
+  {
+  }
+  DISABLE_COPY_AND_ASSIGN (match_data);
+
+  bool operator() (struct block_symbol *bsym);
+
+  struct objfile *objfile = nullptr;
+  std::vector<struct block_symbol> *resultp;
+  struct symbol *arg_sym = nullptr;
+  bool found_sym = false;
 };
 
-/* A callback for add_nonlocal_symbols that adds symbol, found in BSYM,
-   to a list of symbols.  DATA is a pointer to a struct match_data *
-   containing the obstack that collects the symbol list, the file that SYM
-   must come from, a flag indicating whether a non-argument symbol has
-   been found in the current block, and the last argument symbol
-   passed in SYM within the current block (if any).  When SYM is null,
-   marking the end of a block, the argument symbol is added if no
-   other has been found.  */
+/* A callback for add_nonlocal_symbols that adds symbol, found in
+   BSYM, to a list of symbols.  */
 
-static bool
-aux_add_nonlocal_symbols (struct block_symbol *bsym,
-			  struct match_data *data)
+bool
+match_data::operator() (struct block_symbol *bsym)
 {
   const struct block *block = bsym->block;
   struct symbol *sym = bsym->symbol;
 
   if (sym == NULL)
     {
-      if (!data->found_sym && data->arg_sym != NULL) 
-	add_defn_to_vec (data->obstackp,
-			 fixup_symbol_section (data->arg_sym, data->objfile),
-			 block);
-      data->found_sym = 0;
-      data->arg_sym = NULL;
+      if (!found_sym && arg_sym != NULL)
+	add_defn_to_vec (*resultp, arg_sym, block);
+      found_sym = false;
+      arg_sym = NULL;
     }
   else 
     {
-      if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
+      if (sym->aclass () == LOC_UNRESOLVED)
 	return true;
-      else if (SYMBOL_IS_ARGUMENT (sym))
-	data->arg_sym = sym;
+      else if (sym->is_argument ())
+	arg_sym = sym;
       else
 	{
-	  data->found_sym = 1;
-	  add_defn_to_vec (data->obstackp,
-			   fixup_symbol_section (sym, data->objfile),
-			   block);
+	  found_sym = true;
+	  add_defn_to_vec (*resultp, sym, block);
 	}
     }
   return true;
@@ -5466,21 +5430,21 @@ aux_add_nonlocal_symbols (struct block_s
 
 /* Helper for add_nonlocal_symbols.  Find symbols in DOMAIN which are
    targeted by renamings matching LOOKUP_NAME in BLOCK.  Add these
-   symbols to OBSTACKP.  Return whether we found such symbols.  */
+   symbols to RESULT.  Return whether we found such symbols.  */
 
 static int
-ada_add_block_renamings (struct obstack *obstackp,
+ada_add_block_renamings (std::vector<struct block_symbol> &result,
 			 const struct block *block,
 			 const lookup_name_info &lookup_name,
-			 domain_enum domain)
+			 domain_search_flags domain)
 {
   struct using_direct *renaming;
-  int defns_mark = num_defns_collected (obstackp);
+  int defns_mark = result.size ();
 
   symbol_name_matcher_ftype *name_match
     = ada_get_symbol_name_matcher (lookup_name);
 
-  for (renaming = block_using (block);
+  for (renaming = block->get_using ();
        renaming != NULL;
        renaming = renaming->next)
     {
@@ -5513,97 +5477,12 @@ ada_add_block_renamings (struct obstack
 	{
 	  lookup_name_info decl_lookup_name (renaming->declaration,
 					     lookup_name.match_type ());
-	  ada_add_all_symbols (obstackp, block, decl_lookup_name, domain,
+	  ada_add_all_symbols (result, block, decl_lookup_name, domain,
 			       1, NULL);
 	}
       renaming->searched = 0;
     }
-  return num_defns_collected (obstackp) != defns_mark;
-}
-
-/* Implements compare_names, but only applying the comparision using
-   the given CASING.  */
-
-static int
-compare_names_with_case (const char *string1, const char *string2,
-			 enum case_sensitivity casing)
-{
-  while (*string1 != '\0' && *string2 != '\0')
-    {
-      char c1, c2;
-
-      if (isspace (*string1) || isspace (*string2))
-	return strcmp_iw_ordered (string1, string2);
-
-      if (casing == case_sensitive_off)
-	{
-	  c1 = tolower (*string1);
-	  c2 = tolower (*string2);
-	}
-      else
-	{
-	  c1 = *string1;
-	  c2 = *string2;
-	}
-      if (c1 != c2)
-	break;
-
-      string1 += 1;
-      string2 += 1;
-    }
-
-  switch (*string1)
-    {
-    case '(':
-      return strcmp_iw_ordered (string1, string2);
-    case '_':
-      if (*string2 == '\0')
-	{
-	  if (is_name_suffix (string1))
-	    return 0;
-	  else
-	    return 1;
-	}
-      /* FALLTHROUGH */
-    default:
-      if (*string2 == '(')
-	return strcmp_iw_ordered (string1, string2);
-      else
-	{
-	  if (casing == case_sensitive_off)
-	    return tolower (*string1) - tolower (*string2);
-	  else
-	    return *string1 - *string2;
-	}
-    }
-}
-
-/* Compare STRING1 to STRING2, with results as for strcmp.
-   Compatible with strcmp_iw_ordered in that...
-
-       strcmp_iw_ordered (STRING1, STRING2) <= 0
-
-   ... implies...
-
-       compare_names (STRING1, STRING2) <= 0
-
-   (they may differ as to what symbols compare equal).  */
-
-static int
-compare_names (const char *string1, const char *string2)
-{
-  int result;
-
-  /* Similar to what strcmp_iw_ordered does, we need to perform
-     a case-insensitive comparison first, and only resort to
-     a second, case-sensitive, comparison if the first one was
-     not sufficient to differentiate the two strings.  */
-
-  result = compare_names_with_case (string1, string2, case_sensitive_off);
-  if (result == 0)
-    result = compare_names_with_case (string1, string2, case_sensitive_on);
-
-  return result;
+  return result.size () != defns_mark;
 }
 
 /* Convenience function to get at the Ada encoded lookup name for
@@ -5615,67 +5494,79 @@ ada_lookup_name (const lookup_name_info
   return lookup_name.ada ().lookup_name ().c_str ();
 }
 
-/* Add to OBSTACKP all non-local symbols whose name and domain match
+/* A helper for add_nonlocal_symbols.  Expand all necessary symtabs
+   for OBJFILE, then walk the objfile's symtabs and update the
+   results.  */
+
+static void
+map_matching_symbols (struct objfile *objfile,
+		      const lookup_name_info &lookup_name,
+		      domain_search_flags domain,
+		      int global,
+		      match_data &data)
+{
+  data.objfile = objfile;
+  objfile->expand_symtabs_matching (nullptr, &lookup_name,
+				    nullptr, nullptr,
+				    global
+				    ? SEARCH_GLOBAL_BLOCK
+				    : SEARCH_STATIC_BLOCK,
+				    domain);
+
+  const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
+  for (compunit_symtab *symtab : objfile->compunits ())
+    {
+      const struct block *block
+	= symtab->blockvector ()->block (block_kind);
+      if (!iterate_over_symbols_terminated (block, lookup_name,
+					    domain, data))
+	break;
+    }
+}
+
+/* Add to RESULT all non-local symbols whose name and domain match
    LOOKUP_NAME and DOMAIN respectively.  The search is performed on
    GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
    symbols otherwise.  */
 
 static void
-add_nonlocal_symbols (struct obstack *obstackp,
+add_nonlocal_symbols (std::vector<struct block_symbol> &result,
 		      const lookup_name_info &lookup_name,
-		      domain_enum domain, int global)
+		      domain_search_flags domain, int global)
 {
-  struct match_data data;
-
-  memset (&data, 0, sizeof data);
-  data.obstackp = obstackp;
+  struct match_data data (&result);
 
   bool is_wild_match = lookup_name.ada ().wild_match_p ();
 
-  auto callback = [&] (struct block_symbol *bsym)
-    {
-      return aux_add_nonlocal_symbols (bsym, &data);
-    };
-
   for (objfile *objfile : current_program_space->objfiles ())
     {
-      data.objfile = objfile;
-
-      objfile->sf->qf->map_matching_symbols (objfile, lookup_name,
-					     domain, global, callback,
-					     (is_wild_match
-					      ? NULL : compare_names));
+      map_matching_symbols (objfile, lookup_name, domain, global, data);
 
       for (compunit_symtab *cu : objfile->compunits ())
 	{
 	  const struct block *global_block
-	    = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
+	    = cu->blockvector ()->global_block ();
 
-	  if (ada_add_block_renamings (obstackp, global_block, lookup_name,
+	  if (ada_add_block_renamings (result, global_block, lookup_name,
 				       domain))
-	    data.found_sym = 1;
+	    data.found_sym = true;
 	}
     }
 
-  if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
+  if (result.empty () && global && !is_wild_match)
     {
       const char *name = ada_lookup_name (lookup_name);
-      lookup_name_info name1 (std::string ("<_ada_") + name + '>',
-			      symbol_name_match_type::FULL);
+      std::string bracket_name = std::string ("<_ada_") + name + '>';
+      lookup_name_info name1 (bracket_name, symbol_name_match_type::FULL);
 
       for (objfile *objfile : current_program_space->objfiles ())
-        {
-	  data.objfile = objfile;
-	  objfile->sf->qf->map_matching_symbols (objfile, name1,
-						 domain, global, callback,
-						 compare_names);
-	}
-    }      	
+	map_matching_symbols (objfile, name1, domain, global, data);
+    }
 }
 
 /* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
    FULL_SEARCH is non-zero, enclosing scope and in global scopes,
-   returning the number of matches.  Add these to OBSTACKP.
+   returning the number of matches.  Add these to RESULT.
 
    When FULL_SEARCH is non-zero, any non-function/non-enumeral
    symbol match within the nest of blocks whose innermost member is BLOCK,
@@ -5691,10 +5582,10 @@ add_nonlocal_symbols (struct obstack *ob
    to lookup global symbols.  */
 
 static void
-ada_add_all_symbols (struct obstack *obstackp,
+ada_add_all_symbols (std::vector<struct block_symbol> &result,
 		     const struct block *block,
 		     const lookup_name_info &lookup_name,
-		     domain_enum domain,
+		     domain_search_flags domain,
 		     int full_search,
 		     int *made_global_lookup_p)
 {
@@ -5718,15 +5609,15 @@ ada_add_all_symbols (struct obstack *obs
   if (block != NULL)
     {
       if (full_search)
-	ada_add_local_symbols (obstackp, lookup_name, block, domain);
+	ada_add_local_symbols (result, lookup_name, block, domain);
       else
 	{
 	  /* In the !full_search case we're are being called by
-	     ada_iterate_over_symbols, and we don't want to search
+	     iterate_over_symbols, and we don't want to search
 	     superblocks.  */
-	  ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
+	  ada_add_block_symbols (result, block, lookup_name, domain, NULL);
 	}
-      if (num_defns_collected (obstackp) > 0 || !full_search)
+      if (!result.empty () || !full_search)
 	return;
     }
 
@@ -5738,7 +5629,7 @@ ada_add_all_symbols (struct obstack *obs
 			    domain, &sym, &block))
     {
       if (sym != NULL)
-	add_defn_to_vec (obstackp, sym, block);
+	add_defn_to_vec (result, sym, block);
       return;
     }
 
@@ -5747,21 +5638,20 @@ ada_add_all_symbols (struct obstack *obs
 
   /* Search symbols from all global blocks.  */
  
-  add_nonlocal_symbols (obstackp, lookup_name, domain, 1);
+  add_nonlocal_symbols (result, lookup_name, domain, 1);
 
   /* Now add symbols from all per-file blocks if we've gotten no hits
      (not strictly correct, but perhaps better than an error).  */
 
-  if (num_defns_collected (obstackp) == 0)
-    add_nonlocal_symbols (obstackp, lookup_name, domain, 0);
+  if (result.empty ())
+    add_nonlocal_symbols (result, lookup_name, domain, 0);
 }
 
 /* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
-   is non-zero, enclosing scope and in global scopes, returning the number of
-   matches.
-   Fills *RESULTS with (SYM,BLOCK) tuples, indicating the symbols
-   found and the blocks and symbol tables (if any) in which they were
-   found.
+   is non-zero, enclosing scope and in global scopes.
+
+   Returns (SYM,BLOCK) tuples, indicating the symbols found and the
+   blocks and symbol tables (if any) in which they were found.
 
    When full_search is non-zero, any non-function/non-enumeral
    symbol match within the nest of blocks whose innermost member is BLOCK,
@@ -5772,77 +5662,44 @@ ada_add_all_symbols (struct obstack *obs
    Names prefixed with "standard__" are handled specially: "standard__"
    is first stripped off, and only static and global symbols are searched.  */
 
-static int
+static std::vector<struct block_symbol>
 ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
 			       const struct block *block,
-			       domain_enum domain,
-			       std::vector<struct block_symbol> *results,
+			       domain_search_flags domain,
 			       int full_search)
 {
   int syms_from_global_search;
-  int ndefns;
-  auto_obstack obstack;
+  std::vector<struct block_symbol> results;
 
-  ada_add_all_symbols (&obstack, block, lookup_name,
+  ada_add_all_symbols (results, block, lookup_name,
 		       domain, full_search, &syms_from_global_search);
 
-  ndefns = num_defns_collected (&obstack);
-
-  struct block_symbol *base = defns_collected (&obstack, 1);
-  for (int i = 0; i < ndefns; ++i)
-    results->push_back (base[i]);
-
-  ndefns = remove_extra_symbols (results);
+  remove_extra_symbols (results);
 
-  if (ndefns == 0 && full_search && syms_from_global_search)
+  if (results.empty () && full_search && syms_from_global_search)
     cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
 
-  if (ndefns == 1 && full_search && syms_from_global_search)
+  if (results.size () == 1 && full_search && syms_from_global_search)
     cache_symbol (ada_lookup_name (lookup_name), domain,
-		  (*results)[0].symbol, (*results)[0].block);
+		  results[0].symbol, results[0].block);
 
-  ndefns = remove_irrelevant_renamings (results, block);
-
-  return ndefns;
+  remove_irrelevant_renamings (&results, block);
+  return results;
 }
 
 /* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
-   in global scopes, returning the number of matches, and filling *RESULTS
-   with (SYM,BLOCK) tuples.
+   in global scopes, returning (SYM,BLOCK) tuples.
 
    See ada_lookup_symbol_list_worker for further details.  */
 
-int
+std::vector<struct block_symbol>
 ada_lookup_symbol_list (const char *name, const struct block *block,
-			domain_enum domain,
-			std::vector<struct block_symbol> *results)
+			domain_search_flags domain)
 {
   symbol_name_match_type name_match_type = name_match_type_from_name (name);
   lookup_name_info lookup_name (name, name_match_type);
 
-  return ada_lookup_symbol_list_worker (lookup_name, block, domain, results, 1);
-}
-
-/* Implementation of the la_iterate_over_symbols method.  */
-
-static bool
-ada_iterate_over_symbols
-  (const struct block *block, const lookup_name_info &name,
-   domain_enum domain,
-   gdb::function_view<symbol_found_callback_ftype> callback)
-{
-  int ndefs, i;
-  std::vector<struct block_symbol> results;
-
-  ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
-
-  for (i = 0; i < ndefs; ++i)
-    {
-      if (!callback (&results[i]))
-	return false;
-    }
-
-  return true;
+  return ada_lookup_symbol_list_worker (lookup_name, block, domain, 1);
 }
 
 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
@@ -5854,7 +5711,7 @@ ada_iterate_over_symbols
 
 void
 ada_lookup_encoded_symbol (const char *name, const struct block *block,
-			   domain_enum domain,
+			   domain_search_flags domain,
 			   struct block_symbol *info)
 {
   /* Since we already have an encoded name, wrap it in '<>' to force a
@@ -5863,7 +5720,7 @@ ada_lookup_encoded_symbol (const char *n
      ada_lookup_name_info would re-encode/fold it again, and that
      would e.g., incorrectly lowercase object renaming names like
      "R28b" -> "r28b".  */
-  std::string verbatim = std::string ("<") + name + '>';
+  std::string verbatim = add_angle_brackets (name);
 
   gdb_assert (info != NULL);
   *info = ada_lookup_symbol (verbatim.c_str (), block, domain);
@@ -5876,59 +5733,15 @@ ada_lookup_encoded_symbol (const char *n
 
 struct block_symbol
 ada_lookup_symbol (const char *name, const struct block *block0,
-                   domain_enum domain)
+		   domain_search_flags domain)
 {
-  std::vector<struct block_symbol> candidates;
-  int n_candidates;
+  std::vector<struct block_symbol> candidates
+    = ada_lookup_symbol_list (name, block0, domain);
 
-  n_candidates = ada_lookup_symbol_list (name, block0, domain, &candidates);
-
-  if (n_candidates == 0)
+  if (candidates.empty ())
     return {};
 
-  block_symbol info = candidates[0];
-  info.symbol = fixup_symbol_section (info.symbol, NULL);
-  return info;
-}
-
-static struct block_symbol
-ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
-			    const char *name,
-                            const struct block *block,
-                            const domain_enum domain)
-{
-  struct block_symbol sym;
-
-  sym = ada_lookup_symbol (name, block_static_block (block), domain);
-  if (sym.symbol != NULL)
-    return sym;
-
-  /* If we haven't found a match at this point, try the primitive
-     types.  In other languages, this search is performed before
-     searching for global symbols in order to short-circuit that
-     global-symbol search if it happens that the name corresponds
-     to a primitive type.  But we cannot do the same in Ada, because
-     it is perfectly legitimate for a program to declare a type which
-     has the same name as a standard type.  If looking up a type in
-     that situation, we have traditionally ignored the primitive type
-     in favor of user-defined types.  This is why, unlike most other
-     languages, we search the primitive types this late and only after
-     having searched the global symbols without success.  */
-
-  if (domain == VAR_DOMAIN)
-    {
-      struct gdbarch *gdbarch;
-
-      if (block == NULL)
-	gdbarch = target_gdbarch ();
-      else
-	gdbarch = block_gdbarch (block);
-      sym.symbol = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
-      if (sym.symbol != NULL)
-	return sym;
-    }
-
-  return {};
+  return candidates[0];
 }
 
 
@@ -5960,7 +5773,7 @@ is_name_suffix (const char *str)
     {
       str += 3;
       while (isdigit (str[0]))
-        str += 1;
+	str += 1;
     }
   
   /* [.$][0-9]+ */
@@ -5969,9 +5782,9 @@ is_name_suffix (const char *str)
     {
       matching = str + 1;
       while (isdigit (matching[0]))
-        matching += 1;
+	matching += 1;
       if (matching[0] == '\0')
-        return 1;
+	return 1;
     }
 
   /* ___[0-9]+ */
@@ -5980,9 +5793,9 @@ is_name_suffix (const char *str)
     {
       matching = str + 3;
       while (isdigit (matching[0]))
-        matching += 1;
+	matching += 1;
       if (matching[0] == '\0')
-        return 1;
+	return 1;
     }
 
   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
@@ -6012,10 +5825,10 @@ is_name_suffix (const char *str)
     {
       matching = str + 3;
       while (isdigit (matching[0]))
-        matching += 1;
+	matching += 1;
       if ((matching[0] == 'b' || matching[0] == 's')
-          && matching [1] == '\0')
-        return 1;
+	  && matching [1] == '\0')
+	return 1;
     }
 
   /* ??? We should not modify STR directly, as we are doing below.  This
@@ -6027,11 +5840,11 @@ is_name_suffix (const char *str)
     {
       str += 1;
       while (str[0] != '_' && str[0] != '\0')
-        {
-          if (str[0] != 'n' && str[0] != 'b')
-            return 0;
-          str += 1;
-        }
+	{
+	  if (str[0] != 'n' && str[0] != 'b')
+	    return 0;
+	  str += 1;
+	}
     }
 
   if (str[0] == '\000')
@@ -6040,39 +5853,39 @@ is_name_suffix (const char *str)
   if (str[0] == '_')
     {
       if (str[1] != '_' || str[2] == '\000')
-        return 0;
+	return 0;
       if (str[2] == '_')
-        {
-          if (strcmp (str + 3, "JM") == 0)
-            return 1;
-          /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
-             the LJM suffix in favor of the JM one.  But we will
-             still accept LJM as a valid suffix for a reasonable
-             amount of time, just to allow ourselves to debug programs
-             compiled using an older version of GNAT.  */
-          if (strcmp (str + 3, "LJM") == 0)
-            return 1;
-          if (str[3] != 'X')
-            return 0;
-          if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
-              || str[4] == 'U' || str[4] == 'P')
-            return 1;
-          if (str[4] == 'R' && str[5] != 'T')
-            return 1;
-          return 0;
-        }
+	{
+	  if (strcmp (str + 3, "JM") == 0)
+	    return 1;
+	  /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
+	     the LJM suffix in favor of the JM one.  But we will
+	     still accept LJM as a valid suffix for a reasonable
+	     amount of time, just to allow ourselves to debug programs
+	     compiled using an older version of GNAT.  */
+	  if (strcmp (str + 3, "LJM") == 0)
+	    return 1;
+	  if (str[3] != 'X')
+	    return 0;
+	  if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
+	      || str[4] == 'U' || str[4] == 'P')
+	    return 1;
+	  if (str[4] == 'R' && str[5] != 'T')
+	    return 1;
+	  return 0;
+	}
       if (!isdigit (str[2]))
-        return 0;
+	return 0;
       for (k = 3; str[k] != '\0'; k += 1)
-        if (!isdigit (str[k]) && str[k] != '_')
-          return 0;
+	if (!isdigit (str[k]) && str[k] != '_')
+	  return 0;
       return 1;
     }
   if (str[0] == '$' && isdigit (str[1]))
     {
       for (k = 2; str[k] != '\0'; k += 1)
-        if (!isdigit (str[k]) && str[k] != '_')
-          return 0;
+	if (!isdigit (str[k]) && str[k] != '_')
+	  return 0;
       return 1;
     }
   return 0;
@@ -6100,18 +5913,18 @@ is_valid_name_for_wild_match (const char
   return 1;
 }
 
-/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
-   that could start a simple name.  Assumes that *NAMEP points into
-   the string beginning at NAME0.  */
+/* Advance *NAMEP to next occurrence in the string NAME0 of the TARGET0
+   character which could start a simple name.  Assumes that *NAMEP points
+   somewhere inside the string beginning at NAME0.  */
 
 static int
-advance_wild_match (const char **namep, const char *name0, int target0)
+advance_wild_match (const char **namep, const char *name0, char target0)
 {
   const char *name = *namep;
 
   while (1)
     {
-      int t0, t1;
+      char t0, t1;
 
       t0 = *name;
       if (t0 == '_')
@@ -6131,6 +5944,13 @@ advance_wild_match (const char **namep,
 	      name += 2;
 	      break;
 	    }
+	  else if (t1 == '_' && name[2] == 'B' && name[3] == '_')
+	    {
+	      /* Names like "pkg__B_N__name", where N is a number, are
+		 block-local.  We can handle these by simply skipping
+		 the "B_" here.  */
+	      name += 4;
+	    }
 	  else
 	    return 0;
 	}
@@ -6155,6 +5975,9 @@ wild_match (const char *name, const char
   const char *p;
   const char *name0 = name;
 
+  if (startswith (name, "___ghost_"))
+    name += 9;
+
   while (1)
     {
       const char *match = name;
@@ -6175,64 +5998,34 @@ wild_match (const char *name, const char
     }
 }
 
-/* Returns true iff symbol name SYM_NAME matches SEARCH_NAME, ignoring
-   any trailing suffixes that encode debugging information or leading
-   _ada_ on SYM_NAME (see is_name_suffix commentary for the debugging
-   information that is ignored).  */
-
-static bool
-full_match (const char *sym_name, const char *search_name)
-{
-  size_t search_name_len = strlen (search_name);
-
-  if (strncmp (sym_name, search_name, search_name_len) == 0
-      && is_name_suffix (sym_name + search_name_len))
-    return true;
-
-  if (startswith (sym_name, "_ada_")
-      && strncmp (sym_name + 5, search_name, search_name_len) == 0
-      && is_name_suffix (sym_name + search_name_len + 5))
-    return true;
-
-  return false;
-}
-
-/* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to vector
-   *defn_symbols, updating the list of symbols in OBSTACKP (if
+/* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to RESULT (if
    necessary).  OBJFILE is the section containing BLOCK.  */
 
 static void
-ada_add_block_symbols (struct obstack *obstackp,
+ada_add_block_symbols (std::vector<struct block_symbol> &result,
 		       const struct block *block,
 		       const lookup_name_info &lookup_name,
-		       domain_enum domain, struct objfile *objfile)
+		       domain_search_flags domain, struct objfile *objfile)
 {
-  struct block_iterator iter;
   /* A matching argument symbol, if any.  */
   struct symbol *arg_sym;
   /* Set true when we find a matching non-argument symbol.  */
-  int found_sym;
-  struct symbol *sym;
+  bool found_sym;
 
   arg_sym = NULL;
-  found_sym = 0;
-  for (sym = block_iter_match_first (block, lookup_name, &iter);
-       sym != NULL;
-       sym = block_iter_match_next (lookup_name, &iter))
+  found_sym = false;
+  for (struct symbol *sym : block_iterator_range (block, &lookup_name))
     {
-      if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
-				 SYMBOL_DOMAIN (sym), domain))
+      if (sym->matches (domain))
 	{
-	  if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
+	  if (sym->aclass () != LOC_UNRESOLVED)
 	    {
-	      if (SYMBOL_IS_ARGUMENT (sym))
+	      if (sym->is_argument ())
 		arg_sym = sym;
 	      else
 		{
-		  found_sym = 1;
-		  add_defn_to_vec (obstackp,
-				   fixup_symbol_section (sym, objfile),
-				   block);
+		  found_sym = true;
+		  add_defn_to_vec (result, sym, block);
 		}
 	    }
 	}
@@ -6240,72 +6033,65 @@ ada_add_block_symbols (struct obstack *o
 
   /* Handle renamings.  */
 
-  if (ada_add_block_renamings (obstackp, block, lookup_name, domain))
-    found_sym = 1;
+  if (ada_add_block_renamings (result, block, lookup_name, domain))
+    found_sym = true;
 
   if (!found_sym && arg_sym != NULL)
     {
-      add_defn_to_vec (obstackp,
-                       fixup_symbol_section (arg_sym, objfile),
-                       block);
+      add_defn_to_vec (result, arg_sym, block);
     }
 
   if (!lookup_name.ada ().wild_match_p ())
     {
       arg_sym = NULL;
-      found_sym = 0;
+      found_sym = false;
       const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
       const char *name = ada_lookup_name.c_str ();
       size_t name_len = ada_lookup_name.size ();
 
-      ALL_BLOCK_SYMBOLS (block, iter, sym)
+      for (struct symbol *sym : block_iterator_range (block))
       {
-        if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
-                                   SYMBOL_DOMAIN (sym), domain))
-          {
-            int cmp;
-
-            cmp = (int) '_' - (int) sym->linkage_name ()[0];
-            if (cmp == 0)
-              {
-                cmp = !startswith (sym->linkage_name (), "_ada_");
-                if (cmp == 0)
-                  cmp = strncmp (name, sym->linkage_name () + 5,
-                                 name_len);
-              }
-
-            if (cmp == 0
-                && is_name_suffix (sym->linkage_name () + name_len + 5))
-              {
-		if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
+	if (sym->matches (domain))
+	  {
+	    int cmp;
+
+	    cmp = (int) '_' - (int) sym->linkage_name ()[0];
+	    if (cmp == 0)
+	      {
+		cmp = !startswith (sym->linkage_name (), "_ada_");
+		if (cmp == 0)
+		  cmp = strncmp (name, sym->linkage_name () + 5,
+				 name_len);
+	      }
+
+	    if (cmp == 0
+		&& is_name_suffix (sym->linkage_name () + name_len + 5))
+	      {
+		if (sym->aclass () != LOC_UNRESOLVED)
 		  {
-		    if (SYMBOL_IS_ARGUMENT (sym))
+		    if (sym->is_argument ())
 		      arg_sym = sym;
 		    else
 		      {
-			found_sym = 1;
-			add_defn_to_vec (obstackp,
-					 fixup_symbol_section (sym, objfile),
-					 block);
+			found_sym = true;
+			add_defn_to_vec (result, sym, block);
 		      }
 		  }
-              }
-          }
+	      }
+	  }
       }
 
       /* NOTE: This really shouldn't be needed for _ada_ symbols.
-         They aren't parameters, right?  */
+	 They aren't parameters, right?  */
       if (!found_sym && arg_sym != NULL)
-        {
-          add_defn_to_vec (obstackp,
-                           fixup_symbol_section (arg_sym, objfile),
-                           block);
-        }
+	{
+	  add_defn_to_vec (result, arg_sym, block);
+	}
     }
 }
 
 
-                                /* Symbol Completion */
+				/* Symbol Completion */
 
 /* See symtab.h.  */
 
@@ -6328,9 +6114,9 @@ ada_lookup_name_info::matches
   if (match && !m_encoded_p)
     {
       /* One needed check before declaring a positive match is to verify
-         that iff we are doing a verbatim match, the decoded version
-         of the symbol name starts with '<'.  Otherwise, this symbol name
-         is not a suitable completion.  */
+	 that iff we are doing a verbatim match, the decoded version
+	 of the symbol name starts with '<'.  Otherwise, this symbol name
+	 is not a suitable completion.  */
 
       bool has_angle_bracket = (decoded_name[0] == '<');
       match = (has_angle_bracket == m_verbatim_p);
@@ -6339,10 +6125,10 @@ ada_lookup_name_info::matches
   if (match && !m_verbatim_p)
     {
       /* When doing non-verbatim match, another check that needs to
-         be done is to verify that the potentially matching symbol name
-         does not include capital letters, because the ada-mode would
-         not be able to understand these symbol names without the
-         angle bracket notation.  */
+	 be done is to verify that the potentially matching symbol name
+	 does not include capital letters, because the ada-mode would
+	 not be able to understand these symbol names without the
+	 angle bracket notation.  */
       const char *tmp;
 
       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
@@ -6355,8 +6141,8 @@ ada_lookup_name_info::matches
   if (!match && m_wild_match_p)
     {
       /* Since we are doing wild matching, this means that TEXT
-         may represent an unqualified symbol name.  We therefore must
-         also compare TEXT against the unqualified name of the symbol.  */
+	 may represent an unqualified symbol name.  We therefore must
+	 also compare TEXT against the unqualified name of the symbol.  */
       sym_name = ada_unqualified_name (decoded_name.c_str ());
 
       if (strncmp (sym_name, text, text_len) == 0)
@@ -6389,135 +6175,7 @@ ada_lookup_name_info::matches
   return true;
 }
 
-/* Add the list of possible symbol names completing TEXT to TRACKER.
-   WORD is the entire command on which completion is made.  */
-
-static void
-ada_collect_symbol_completion_matches (completion_tracker &tracker,
-				       complete_symbol_mode mode,
-				       symbol_name_match_type name_match_type,
-				       const char *text, const char *word,
-				       enum type_code code)
-{
-  struct symbol *sym;
-  const struct block *b, *surrounding_static_block = 0;
-  struct block_iterator iter;
-
-  gdb_assert (code == TYPE_CODE_UNDEF);
-
-  lookup_name_info lookup_name (text, name_match_type, true);
-
-  /* First, look at the partial symtab symbols.  */
-  expand_symtabs_matching (NULL,
-			   lookup_name,
-			   NULL,
-			   NULL,
-			   ALL_DOMAIN);
-
-  /* At this point scan through the misc symbol vectors and add each
-     symbol you find to the list.  Eventually we want to ignore
-     anything that isn't a text symbol (everything else will be
-     handled by the psymtab code above).  */
-
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      for (minimal_symbol *msymbol : objfile->msymbols ())
-	{
-	  QUIT;
-
-	  if (completion_skip_symbol (mode, msymbol))
-	    continue;
-
-	  language symbol_language = MSYMBOL_LANGUAGE (msymbol);
-
-	  /* Ada minimal symbols won't have their language set to Ada.  If
-	     we let completion_list_add_name compare using the
-	     default/C-like matcher, then when completing e.g., symbols in a
-	     package named "pck", we'd match internal Ada symbols like
-	     "pckS", which are invalid in an Ada expression, unless you wrap
-	     them in '<' '>' to request a verbatim match.
-
-	     Unfortunately, some Ada encoded names successfully demangle as
-	     C++ symbols (using an old mangling scheme), such as "name__2Xn"
-	     -> "Xn::name(void)" and thus some Ada minimal symbols end up
-	     with the wrong language set.  Paper over that issue here.  */
-	  if (symbol_language == language_auto
-	      || symbol_language == language_cplus)
-	    symbol_language = language_ada;
-
-	  completion_list_add_name (tracker,
-				    symbol_language,
-				    msymbol->linkage_name (),
-				    lookup_name, text, word);
-	}
-    }
-
-  /* Search upwards from currently selected frame (so that we can
-     complete on local vars.  */
-
-  for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
-    {
-      if (!BLOCK_SUPERBLOCK (b))
-        surrounding_static_block = b;   /* For elmin of dups */
-
-      ALL_BLOCK_SYMBOLS (b, iter, sym)
-      {
-	if (completion_skip_symbol (mode, sym))
-	  continue;
-
-	completion_list_add_name (tracker,
-				  SYMBOL_LANGUAGE (sym),
-				  sym->linkage_name (),
-				  lookup_name, text, word);
-      }
-    }
-
-  /* Go through the symtabs and check the externs and statics for
-     symbols which match.  */
-
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      for (compunit_symtab *s : objfile->compunits ())
-	{
-	  QUIT;
-	  b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
-	  ALL_BLOCK_SYMBOLS (b, iter, sym)
-	    {
-	      if (completion_skip_symbol (mode, sym))
-		continue;
-
-	      completion_list_add_name (tracker,
-					SYMBOL_LANGUAGE (sym),
-					sym->linkage_name (),
-					lookup_name, text, word);
-	    }
-	}
-    }
-
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      for (compunit_symtab *s : objfile->compunits ())
-	{
-	  QUIT;
-	  b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
-	  /* Don't do this block twice.  */
-	  if (b == surrounding_static_block)
-	    continue;
-	  ALL_BLOCK_SYMBOLS (b, iter, sym)
-	    {
-	      if (completion_skip_symbol (mode, sym))
-		continue;
-
-	      completion_list_add_name (tracker,
-					SYMBOL_LANGUAGE (sym),
-					sym->linkage_name (),
-					lookup_name, text, word);
-	    }
-	}
-    }
-}
-
-                                /* Field Access */
+				/* Field Access */
 
 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
    for tagged types.  */
@@ -6527,10 +6185,10 @@ ada_is_dispatch_table_ptr_type (struct t
 {
   const char *name;
 
-  if (TYPE_CODE (type) != TYPE_CODE_PTR)
+  if (type->code () != TYPE_CODE_PTR)
     return 0;
 
-  name = TYPE_NAME (TYPE_TARGET_TYPE (type));
+  name = type->target_type ()->name ();
   if (name == NULL)
     return 0;
 
@@ -6542,7 +6200,7 @@ ada_is_dispatch_table_ptr_type (struct t
 static int
 ada_is_interface_tag (struct type *type)
 {
-  const char *name = TYPE_NAME (type);
+  const char *name = type->name ();
 
   if (name == NULL)
     return 0;
@@ -6556,12 +6214,12 @@ ada_is_interface_tag (struct type *type)
 int
 ada_is_ignored_field (struct type *type, int field_num)
 {
-  if (field_num < 0 || field_num > TYPE_NFIELDS (type))
+  if (field_num < 0 || field_num > type->num_fields ())
     return 1;
 
   /* Check the name of that field.  */
   {
-    const char *name = TYPE_FIELD_NAME (type, field_num);
+    const char *name = type->field (field_num).name ();
 
     /* Anonymous field names should not be printed.
        brobecker/2007-02-20: I don't think this can actually happen
@@ -6578,13 +6236,25 @@ ada_is_ignored_field (struct type *type,
        should not be ignored either.  */
     if (name[0] == '_' && !startswith (name, "_parent"))
       return 1;
+
+    /* The compiler doesn't document this, but sometimes it emits
+       a field whose name starts with a capital letter, like 'V148s'.
+       These aren't marked as artificial in any way, but we know they
+       should be ignored.  However, wrapper fields should not be
+       ignored.  */
+    if (name[0] == 'S' || name[0] == 'R' || name[0] == 'O')
+      {
+	/* Wrapper field.  */
+      }
+    else if (isupper (name[0]))
+      return 1;
   }
 
   /* If this is the dispatch table of a tagged type or an interface tag,
      then ignore.  */
   if (ada_is_tagged_type (type, 1)
-      && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
-	  || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
+      && (ada_is_dispatch_table_ptr_type (type->field (field_num).type ())
+	  || ada_is_interface_tag (type->field (field_num).type ())))
     return 1;
 
   /* Not a special field, so it should not be ignored.  */
@@ -6607,14 +6277,14 @@ ada_is_tag_type (struct type *type)
 {
   type = ada_check_typedef (type);
 
-  if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
+  if (type == NULL || type->code () != TYPE_CODE_PTR)
     return 0;
   else
     {
-      const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
+      const char *name = ada_type_name (type->target_type ());
 
       return (name != NULL
-              && strcmp (name, "ada__tags__dispatch_table") == 0);
+	      && strcmp (name, "ada__tags__dispatch_table") == 0);
     }
 }
 
@@ -6623,7 +6293,7 @@ ada_is_tag_type (struct type *type)
 static struct type *
 ada_tag_type (struct value *val)
 {
-  return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
+  return ada_lookup_struct_elt_type (val->type (), "_tag", 1, 0);
 }
 
 /* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
@@ -6650,13 +6320,17 @@ ada_value_tag (struct value *val)
 static struct value *
 value_tag_from_contents_and_address (struct type *type,
 				     const gdb_byte *valaddr,
-                                     CORE_ADDR address)
+				     CORE_ADDR address)
 {
   int tag_byte_offset;
   struct type *tag_type;
 
-  if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
-                         NULL, NULL, NULL))
+  gdb::array_view<const gdb_byte> contents;
+  if (valaddr != nullptr)
+    contents = gdb::make_array_view (valaddr, type->length ());
+  struct type *resolved_type = resolve_dynamic_type (type, contents, address);
+  if (find_struct_field ("_tag", resolved_type, 0, &tag_type, &tag_byte_offset,
+			 NULL, NULL, NULL))
     {
       const gdb_byte *valaddr1 = ((valaddr == NULL)
 				  ? NULL
@@ -6671,10 +6345,10 @@ value_tag_from_contents_and_address (str
 static struct type *
 type_from_tag (struct value *tag)
 {
-  const char *type_name = ada_tag_name (tag);
+  gdb::unique_xmalloc_ptr<char> type_name = ada_tag_name (tag);
 
   if (type_name != NULL)
-    return ada_find_any_type (ada_encode (type_name));
+    return ada_find_any_type (ada_encode (type_name.get ()).c_str ());
   return NULL;
 }
 
@@ -6693,12 +6367,11 @@ ada_tag_value_at_base_address (struct va
   struct value *tag;
   CORE_ADDR base_address;
 
-  obj_type = value_type (obj);
+  obj_type = obj->type ();
 
-  /* It is the responsability of the caller to deref pointers.  */
+  /* It is the responsibility of the caller to deref pointers.  */
 
-  if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
-      || TYPE_CODE (obj_type) == TYPE_CODE_REF)
+  if (obj_type->code () == TYPE_CODE_PTR || obj_type->code () == TYPE_CODE_REF)
     return obj;
 
   tag = ada_value_tag (obj);
@@ -6710,9 +6383,11 @@ ada_tag_value_at_base_address (struct va
   if (is_ada95_tag (tag))
     return obj;
 
-  ptr_type = language_lookup_primitive_type
-    (language_def (language_ada), target_gdbarch(), "storage_offset");
-  ptr_type = lookup_pointer_type (ptr_type);
+  struct type *offset_type
+    = language_lookup_primitive_type (language_def (language_ada),
+				      current_inferior ()->arch (),
+				      "storage_offset");
+  ptr_type = lookup_pointer_type (offset_type);
   val = value_cast (ptr_type, tag);
   if (!val)
     return obj;
@@ -6744,18 +6419,31 @@ ada_tag_value_at_base_address (struct va
   if (offset_to_top == -1)
     return obj;
 
-  /* OFFSET_TO_TOP used to be a positive value to be subtracted
-     from the base address.  This was however incompatible with
-     C++ dispatch table: C++ uses a *negative* value to *add*
-     to the base address.  Ada's convention has therefore been
-     changed in GNAT 19.0w 20171023: since then, C++ and Ada
-     use the same convention.  Here, we support both cases by
-     checking the sign of OFFSET_TO_TOP.  */
+  /* Storage_Offset'Last is used to indicate that a dynamic offset to
+     top is used.  In this situation the offset is stored just after
+     the tag, in the object itself.  */
+  ULONGEST last = (((ULONGEST) 1) << (8 * offset_type->length () - 1)) - 1;
+  if (offset_to_top == last)
+    {
+      struct value *tem = value_addr (tag);
+      tem = value_ptradd (tem, 1);
+      tem = value_cast (ptr_type, tem);
+      offset_to_top = value_as_long (value_ind (tem));
+    }
 
   if (offset_to_top > 0)
-    offset_to_top = -offset_to_top;
+    {
+      /* OFFSET_TO_TOP used to be a positive value to be subtracted
+	 from the base address.  This was however incompatible with
+	 C++ dispatch table: C++ uses a *negative* value to *add*
+	 to the base address.  Ada's convention has therefore been
+	 changed in GNAT 19.0w 20171023: since then, C++ and Ada
+	 use the same convention.  Here, we support both cases by
+	 checking the sign of OFFSET_TO_TOP.  */
+      offset_to_top = -offset_to_top;
+    }
 
-  base_address = value_address (obj) + offset_to_top;
+  base_address = obj->address () + offset_to_top;
   tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
 
   /* Make sure that we have a proper tag at the new address.
@@ -6823,39 +6511,47 @@ ada_get_tsd_from_tag (struct value *tag)
 /* Given the TSD of a tag (type-specific data), return a string
    containing the name of the associated type.
 
-   The returned value is good until the next call.  May return NULL
-   if we are unable to determine the tag name.  */
+   May return NULL if we are unable to determine the tag name.  */
 
-static char *
+static gdb::unique_xmalloc_ptr<char>
 ada_tag_name_from_tsd (struct value *tsd)
 {
-  static char name[1024];
-  char *p;
   struct value *val;
 
   val = ada_value_struct_elt (tsd, "expanded_name", 1);
   if (val == NULL)
     return NULL;
-  read_memory_string (value_as_address (val), name, sizeof (name) - 1);
-  for (p = name; *p != '\0'; p += 1)
-    if (isalpha (*p))
-      *p = tolower (*p);
-  return name;
+  gdb::unique_xmalloc_ptr<char> buffer
+    = target_read_string (value_as_address (val), INT_MAX);
+  if (buffer == nullptr)
+    return nullptr;
+
+  try
+    {
+      /* Let this throw an exception on error.  If the data is
+	 uninitialized, we'd rather not have the user see a
+	 warning.  */
+      const char *folded = ada_fold_name (buffer.get (), true);
+      return make_unique_xstrdup (folded);
+    }
+  catch (const gdb_exception &)
+    {
+      return nullptr;
+    }
 }
 
 /* The type name of the dynamic type denoted by the 'tag value TAG, as
    a C string.
 
    Return NULL if the TAG is not an Ada tag, or if we were unable to
-   determine the name of that tag.  The result is good until the next
-   call.  */
+   determine the name of that tag.  */
 
-const char *
+gdb::unique_xmalloc_ptr<char>
 ada_tag_name (struct value *tag)
 {
-  char *name = NULL;
+  gdb::unique_xmalloc_ptr<char> name;
 
-  if (!ada_is_tag_type (value_type (tag)))
+  if (!ada_is_tag_type (tag->type ()))
     return NULL;
 
   /* It is perfectly possible that an exception be raised while trying
@@ -6890,21 +6586,21 @@ ada_parent_type (struct type *type)
 
   type = ada_check_typedef (type);
 
-  if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
+  if (type == NULL || type->code () != TYPE_CODE_STRUCT)
     return NULL;
 
-  for (i = 0; i < TYPE_NFIELDS (type); i += 1)
+  for (i = 0; i < type->num_fields (); i += 1)
     if (ada_is_parent_field (type, i))
       {
-        struct type *parent_type = TYPE_FIELD_TYPE (type, i);
+	struct type *parent_type = type->field (i).type ();
 
-        /* If the _parent field is a pointer, then dereference it.  */
-        if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
-          parent_type = TYPE_TARGET_TYPE (parent_type);
-        /* If there is a parallel XVS type, get the actual base type.  */
-        parent_type = ada_get_base_type (parent_type);
+	/* If the _parent field is a pointer, then dereference it.  */
+	if (parent_type->code () == TYPE_CODE_PTR)
+	  parent_type = parent_type->target_type ();
+	/* If there is a parallel XVS type, get the actual base type.  */
+	parent_type = ada_get_base_type (parent_type);
 
-        return ada_check_typedef (parent_type);
+	return ada_check_typedef (parent_type);
       }
 
   return NULL;
@@ -6917,11 +6613,11 @@ ada_parent_type (struct type *type)
 int
 ada_is_parent_field (struct type *type, int field_num)
 {
-  const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
+  const char *name = ada_check_typedef (type)->field (field_num).name ();
 
   return (name != NULL
-          && (startswith (name, "PARENT")
-              || startswith (name, "_parent")));
+	  && (startswith (name, "PARENT")
+	      || startswith (name, "_parent")));
 }
 
 /* True iff field number FIELD_NUM of structure type TYPE is a
@@ -6933,7 +6629,7 @@ ada_is_parent_field (struct type *type,
 int
 ada_is_wrapper_field (struct type *type, int field_num)
 {
-  const char *name = TYPE_FIELD_NAME (type, field_num);
+  const char *name = type->field (field_num).name ();
 
   if (name != NULL && strcmp (name, "RETVAL") == 0)
     {
@@ -6947,10 +6643,10 @@ ada_is_wrapper_field (struct type *type,
     }
 
   return (name != NULL
-          && (startswith (name, "PARENT")
-              || strcmp (name, "REP") == 0
-              || startswith (name, "_parent")
-              || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
+	  && (startswith (name, "PARENT")
+	      || strcmp (name, "REP") == 0
+	      || startswith (name, "_parent")
+	      || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
 }
 
 /* True iff field number FIELD_NUM of structure or union type TYPE
@@ -6964,11 +6660,11 @@ ada_is_variant_part (struct type *type,
   if (!ADA_TYPE_P (type))
     return 0;
 
-  struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
+  struct type *field_type = type->field (field_num).type ();
 
-  return (TYPE_CODE (field_type) == TYPE_CODE_UNION
-          || (is_dynamic_field (type, field_num)
-              && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
+  return (field_type->code () == TYPE_CODE_UNION
+	  || (is_dynamic_field (type, field_num)
+	      && (field_type->target_type ()->code ()
 		  == TYPE_CODE_UNION)));
 }
 
@@ -6992,7 +6688,7 @@ ada_variant_discrim_type (struct type *v
 static int
 ada_is_others_clause (struct type *type, int field_num)
 {
-  const char *name = TYPE_FIELD_NAME (type, field_num);
+  const char *name = type->field (field_num).name ();
 
   return (name != NULL && name[0] == 'O');
 }
@@ -7004,15 +6700,14 @@ ada_is_others_clause (struct type *type,
 const char *
 ada_variant_discrim_name (struct type *type0)
 {
-  static char *result = NULL;
-  static size_t result_len = 0;
+  static std::string result;
   struct type *type;
   const char *name;
   const char *discrim_end;
   const char *discrim_start;
 
-  if (TYPE_CODE (type0) == TYPE_CODE_PTR)
-    type = TYPE_TARGET_TYPE (type0);
+  if (type0->code () == TYPE_CODE_PTR)
+    type = type0->target_type ();
   else
     type = type0;
 
@@ -7025,7 +6720,7 @@ ada_variant_discrim_name (struct type *t
        discrim_end -= 1)
     {
       if (startswith (discrim_end, "___XVN"))
-        break;
+	break;
     }
   if (discrim_end == name)
     return "";
@@ -7034,17 +6729,15 @@ ada_variant_discrim_name (struct type *t
        discrim_start -= 1)
     {
       if (discrim_start == name + 1)
-        return "";
+	return "";
       if ((discrim_start > name + 3
-           && startswith (discrim_start - 3, "___"))
-          || discrim_start[-1] == '.')
-        break;
+	   && startswith (discrim_start - 3, "___"))
+	  || discrim_start[-1] == '.')
+	break;
     }
 
-  GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
-  strncpy (result, discrim_start, discrim_end - discrim_start);
-  result[discrim_end - discrim_start] = '\0';
-  return result;
+  result = std::string (discrim_start, discrim_end - discrim_start);
+  return result.c_str ();
 }
 
 /* Scan STR for a subtype-encoded number, beginning at position K.
@@ -7076,7 +6769,7 @@ ada_scan_number (const char str[], int k
   if (str[k] == 'm')
     {
       if (R != NULL)
-        *R = (-(LONGEST) (RU - 1)) - 1;
+	*R = (-(LONGEST) (RU - 1)) - 1;
       k += 1;
     }
   else if (R != NULL)
@@ -7100,42 +6793,42 @@ ada_scan_number (const char str[], int k
 static int
 ada_in_variant (LONGEST val, struct type *type, int field_num)
 {
-  const char *name = TYPE_FIELD_NAME (type, field_num);
+  const char *name = type->field (field_num).name ();
   int p;
 
   p = 0;
   while (1)
     {
       switch (name[p])
-        {
-        case '\0':
-          return 0;
-        case 'S':
-          {
-            LONGEST W;
-
-            if (!ada_scan_number (name, p + 1, &W, &p))
-              return 0;
-            if (val == W)
-              return 1;
-            break;
-          }
-        case 'R':
-          {
-            LONGEST L, U;
-
-            if (!ada_scan_number (name, p + 1, &L, &p)
-                || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
-              return 0;
-            if (val >= L && val <= U)
-              return 1;
-            break;
-          }
-        case 'O':
-          return 1;
-        default:
-          return 0;
-        }
+	{
+	case '\0':
+	  return 0;
+	case 'S':
+	  {
+	    LONGEST W;
+
+	    if (!ada_scan_number (name, p + 1, &W, &p))
+	      return 0;
+	    if (val == W)
+	      return 1;
+	    break;
+	  }
+	case 'R':
+	  {
+	    LONGEST L, U;
+
+	    if (!ada_scan_number (name, p + 1, &L, &p)
+		|| name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
+	      return 0;
+	    if (val >= L && val <= U)
+	      return 1;
+	    break;
+	  }
+	case 'O':
+	  return 1;
+	default:
+	  return 0;
+	}
     }
 }
 
@@ -7146,29 +6839,30 @@ ada_in_variant (LONGEST val, struct type
    fields.  FIELDNO says which field.   Differs from value_primitive_field
    only in that it can handle packed values of arbitrary type.  */
 
-static struct value *
+struct value *
 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
-                           struct type *arg_type)
+			   struct type *arg_type)
 {
   struct type *type;
 
   arg_type = ada_check_typedef (arg_type);
-  type = TYPE_FIELD_TYPE (arg_type, fieldno);
+  type = arg_type->field (fieldno).type ();
 
   /* Handle packed fields.  It might be that the field is not packed
      relative to its containing structure, but the structure itself is
      packed; in this case we must take the bit-field path.  */
-  if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0 || value_bitpos (arg1) != 0)
+  if (arg_type->field (fieldno).bitsize () != 0 || arg1->bitpos () != 0)
     {
-      int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
-      int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
+      int bit_pos = arg_type->field (fieldno).loc_bitpos ();
+      int bit_size = arg_type->field (fieldno).bitsize ();
 
-      return ada_value_primitive_packed_val (arg1, value_contents (arg1),
-                                             offset + bit_pos / 8,
-                                             bit_pos % 8, bit_size, type);
+      return ada_value_primitive_packed_val (arg1,
+					     arg1->contents ().data (),
+					     offset + bit_pos / 8,
+					     bit_pos % 8, bit_size, type);
     }
   else
-    return value_primitive_field (arg1, offset, fieldno, arg_type);
+    return arg1->primitive_field (offset, fieldno, arg_type);
 }
 
 /* Find field with name NAME in object of type TYPE.  If found, 
@@ -7188,21 +6882,21 @@ ada_value_primitive_field (struct value
    has some components with the same name, like in this scenario:
 
       type Top_T is tagged record
-         N : Integer := 1;
-         U : Integer := 974;
-         A : Integer := 48;
+	 N : Integer := 1;
+	 U : Integer := 974;
+	 A : Integer := 48;
       end record;
 
       type Middle_T is new Top.Top_T with record
-         N : Character := 'a';
-         C : Integer := 3;
+	 N : Character := 'a';
+	 C : Integer := 3;
       end record;
 
      type Bottom_T is new Middle.Middle_T with record
-        N : Float := 4.0;
-        C : Character := '5';
-        X : Integer := 6;
-        A : Character := 'J';
+	N : Float := 4.0;
+	C : Character := '5';
+	X : Integer := 6;
+	A : Character := 'J';
      end record;
 
    Let's say we now have a variable declared and initialized as follow:
@@ -7238,8 +6932,8 @@ ada_value_primitive_field (struct value
 
 static int
 find_struct_field (const char *name, struct type *type, int offset,
-                   struct type **field_type_p,
-                   int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
+		   struct type **field_type_p,
+		   int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
 		   int *index_p)
 {
   int i;
@@ -7256,17 +6950,25 @@ find_struct_field (const char *name, str
   if (bit_size_p != NULL)
     *bit_size_p = 0;
 
-  for (i = 0; i < TYPE_NFIELDS (type); i += 1)
+  for (i = 0; i < type->num_fields (); i += 1)
     {
-      int bit_pos = TYPE_FIELD_BITPOS (type, i);
-      int fld_offset = offset + bit_pos / 8;
-      const char *t_field_name = TYPE_FIELD_NAME (type, i);
+      /* These can't be computed using TYPE_FIELD_BITPOS for a dynamic
+	 type.  However, we only need the values to be correct when
+	 the caller asks for them.  */
+      int bit_pos = 0, fld_offset = 0;
+      if (byte_offset_p != nullptr || bit_offset_p != nullptr)
+	{
+	  bit_pos = type->field (i).loc_bitpos ();
+	  fld_offset = offset + bit_pos / 8;
+	}
+
+      const char *t_field_name = type->field (i).name ();
 
       if (t_field_name == NULL)
-        continue;
+	continue;
 
       else if (ada_is_parent_field (type, i))
-        {
+	{
 	  /* This is a field pointing us to the parent type of a tagged
 	     type.  As hinted in this function's documentation, we give
 	     preference to fields in the current record first, so what
@@ -7275,49 +6977,49 @@ find_struct_field (const char *name, str
 	     in the current record, then we'll get back to it and search
 	     inside it whether the field might exist in the parent.  */
 
-          parent_offset = i;
-          continue;
-        }
+	  parent_offset = i;
+	  continue;
+	}
 
       else if (name != NULL && field_name_match (t_field_name, name))
-        {
-          int bit_size = TYPE_FIELD_BITSIZE (type, i);
+	{
+	  int bit_size = type->field (i).bitsize ();
 
 	  if (field_type_p != NULL)
-	    *field_type_p = TYPE_FIELD_TYPE (type, i);
+	    *field_type_p = type->field (i).type ();
 	  if (byte_offset_p != NULL)
 	    *byte_offset_p = fld_offset;
 	  if (bit_offset_p != NULL)
 	    *bit_offset_p = bit_pos % 8;
 	  if (bit_size_p != NULL)
 	    *bit_size_p = bit_size;
-          return 1;
-        }
+	  return 1;
+	}
       else if (ada_is_wrapper_field (type, i))
-        {
-	  if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
+	{
+	  if (find_struct_field (name, type->field (i).type (), fld_offset,
 				 field_type_p, byte_offset_p, bit_offset_p,
 				 bit_size_p, index_p))
-            return 1;
-        }
+	    return 1;
+	}
       else if (ada_is_variant_part (type, i))
-        {
+	{
 	  /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
 	     fixed type?? */
-          int j;
-          struct type *field_type
-	    = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
-
-          for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
-            {
-              if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
-                                     fld_offset
-                                     + TYPE_FIELD_BITPOS (field_type, j) / 8,
-                                     field_type_p, byte_offset_p,
-                                     bit_offset_p, bit_size_p, index_p))
-                return 1;
-            }
-        }
+	  int j;
+	  struct type *field_type
+	    = ada_check_typedef (type->field (i).type ());
+
+	  for (j = 0; j < field_type->num_fields (); j += 1)
+	    {
+	      if (find_struct_field (name, field_type->field (j).type (),
+				     fld_offset
+				     + field_type->field (j).loc_bitpos () / 8,
+				     field_type_p, byte_offset_p,
+				     bit_offset_p, bit_size_p, index_p))
+		return 1;
+	    }
+	}
       else if (index_p != NULL)
 	*index_p += 1;
     }
@@ -7327,13 +7029,18 @@ find_struct_field (const char *name, str
 
   if (parent_offset != -1)
     {
-      int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
-      int fld_offset = offset + bit_pos / 8;
+      /* As above, only compute the offset when truly needed.  */
+      int fld_offset = offset;
+      if (byte_offset_p != nullptr || bit_offset_p != nullptr)
+	{
+	  int bit_pos = type->field (parent_offset).loc_bitpos ();
+	  fld_offset += bit_pos / 8;
+	}
 
-      if (find_struct_field (name, TYPE_FIELD_TYPE (type, parent_offset),
-                             fld_offset, field_type_p, byte_offset_p,
-                             bit_offset_p, bit_size_p, index_p))
-        return 1;
+      if (find_struct_field (name, type->field (parent_offset).type (),
+			     fld_offset, field_type_p, byte_offset_p,
+			     bit_offset_p, bit_size_p, index_p))
+	return 1;
     }
 
   return 0;
@@ -7362,21 +7069,21 @@ num_visible_fields (struct type *type)
 
 static struct value *
 ada_search_struct_field (const char *name, struct value *arg, int offset,
-                         struct type *type)
+			 struct type *type)
 {
   int i;
   int parent_offset = -1;
 
   type = ada_check_typedef (type);
-  for (i = 0; i < TYPE_NFIELDS (type); i += 1)
+  for (i = 0; i < type->num_fields (); i += 1)
     {
-      const char *t_field_name = TYPE_FIELD_NAME (type, i);
+      const char *t_field_name = type->field (i).name ();
 
       if (t_field_name == NULL)
-        continue;
+	continue;
 
       else if (ada_is_parent_field (type, i))
-        {
+	{
 	  /* This is a field pointing us to the parent type of a tagged
 	     type.  As hinted in this function's documentation, we give
 	     preference to fields in the current record first, so what
@@ -7385,44 +7092,43 @@ ada_search_struct_field (const char *nam
 	     in the current record, then we'll get back to it and search
 	     inside it whether the field might exist in the parent.  */
 
-          parent_offset = i;
-          continue;
-        }
+	  parent_offset = i;
+	  continue;
+	}
 
       else if (field_name_match (t_field_name, name))
-        return ada_value_primitive_field (arg, offset, i, type);
+	return ada_value_primitive_field (arg, offset, i, type);
 
       else if (ada_is_wrapper_field (type, i))
-        {
-          struct value *v =     /* Do not let indent join lines here.  */
-            ada_search_struct_field (name, arg,
-                                     offset + TYPE_FIELD_BITPOS (type, i) / 8,
-                                     TYPE_FIELD_TYPE (type, i));
-
-          if (v != NULL)
-            return v;
-        }
+	{
+	  struct value *v =     /* Do not let indent join lines here.  */
+	    ada_search_struct_field (name, arg,
+				     offset + type->field (i).loc_bitpos () / 8,
+				     type->field (i).type ());
+
+	  if (v != NULL)
+	    return v;
+	}
 
       else if (ada_is_variant_part (type, i))
-        {
+	{
 	  /* PNH: Do we ever get here?  See find_struct_field.  */
-          int j;
-          struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
-									i));
-          int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
-
-          for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
-            {
-              struct value *v = ada_search_struct_field /* Force line
+	  int j;
+	  struct type *field_type = ada_check_typedef (type->field (i).type ());
+	  int var_offset = offset + type->field (i).loc_bitpos () / 8;
+
+	  for (j = 0; j < field_type->num_fields (); j += 1)
+	    {
+	      struct value *v = ada_search_struct_field /* Force line
 							   break.  */
-                (name, arg,
-                 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
-                 TYPE_FIELD_TYPE (field_type, j));
-
-              if (v != NULL)
-                return v;
-            }
-        }
+		(name, arg,
+		 var_offset + field_type->field (j).loc_bitpos () / 8,
+		 field_type->field (j).type ());
+
+	      if (v != NULL)
+		return v;
+	    }
+	}
     }
 
   /* Field not found so far.  If this is a tagged type which
@@ -7431,11 +7137,11 @@ ada_search_struct_field (const char *nam
   if (parent_offset != -1)
     {
       struct value *v = ada_search_struct_field (
-	name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
-	TYPE_FIELD_TYPE (type, parent_offset));
+	name, arg, offset + type->field (parent_offset).loc_bitpos () / 8,
+	type->field (parent_offset).type ());
 
       if (v != NULL)
-        return v;
+	return v;
     }
 
   return NULL;
@@ -7469,29 +7175,29 @@ ada_index_struct_field_1 (int *index_p,
   int i;
   type = ada_check_typedef (type);
 
-  for (i = 0; i < TYPE_NFIELDS (type); i += 1)
+  for (i = 0; i < type->num_fields (); i += 1)
     {
-      if (TYPE_FIELD_NAME (type, i) == NULL)
-        continue;
+      if (type->field (i).name () == NULL)
+	continue;
       else if (ada_is_wrapper_field (type, i))
-        {
-          struct value *v =     /* Do not let indent join lines here.  */
-            ada_index_struct_field_1 (index_p, arg,
-				      offset + TYPE_FIELD_BITPOS (type, i) / 8,
-				      TYPE_FIELD_TYPE (type, i));
-
-          if (v != NULL)
-            return v;
-        }
+	{
+	  struct value *v =     /* Do not let indent join lines here.  */
+	    ada_index_struct_field_1 (index_p, arg,
+				      offset + type->field (i).loc_bitpos () / 8,
+				      type->field (i).type ());
+
+	  if (v != NULL)
+	    return v;
+	}
 
       else if (ada_is_variant_part (type, i))
-        {
+	{
 	  /* PNH: Do we ever get here?  See ada_search_struct_field,
 	     find_struct_field.  */
 	  error (_("Cannot assign this kind of variant record"));
-        }
+	}
       else if (*index_p == 0)
-        return ada_value_primitive_field (arg, offset, i, type);
+	return ada_value_primitive_field (arg, offset, i, type);
       else
 	*index_p -= 1;
     }
@@ -7507,13 +7213,10 @@ type_as_string (struct type *type)
 
   type_print (type, "", &tmp_stream, -1);
 
-  return std::move (tmp_stream.string ());
+  return tmp_stream.release ();
 }
 
 /* Given a type TYPE, look up the type of the component of type named NAME.
-   If DISPP is non-null, add its byte displacement from the beginning of a
-   structure (pointed to by a value) of type TYPE to *DISPP (does not
-   work for packed fields).
 
    Matches any field whose name has NAME as a prefix, possibly
    followed by "___".
@@ -7532,30 +7235,26 @@ type_as_string (struct type *type)
 
 static struct type *
 ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
-                            int noerr)
+			    int noerr)
 {
-  int i;
-  int parent_offset = -1;
-
   if (name == NULL)
     goto BadName;
 
   if (refok && type != NULL)
     while (1)
       {
-        type = ada_check_typedef (type);
-        if (TYPE_CODE (type) != TYPE_CODE_PTR
-            && TYPE_CODE (type) != TYPE_CODE_REF)
-          break;
-        type = TYPE_TARGET_TYPE (type);
+	type = ada_check_typedef (type);
+	if (type->code () != TYPE_CODE_PTR && type->code () != TYPE_CODE_REF)
+	  break;
+	type = type->target_type ();
       }
 
   if (type == NULL
-      || (TYPE_CODE (type) != TYPE_CODE_STRUCT
-          && TYPE_CODE (type) != TYPE_CODE_UNION))
+      || (type->code () != TYPE_CODE_STRUCT
+	  && type->code () != TYPE_CODE_UNION))
     {
       if (noerr)
-        return NULL;
+	return NULL;
 
       error (_("Type %s is not a structure or union type"),
 	     type != NULL ? type_as_string (type).c_str () : _("(null)"));
@@ -7563,80 +7262,11 @@ ada_lookup_struct_elt_type (struct type
 
   type = to_static_fixed_type (type);
 
-  for (i = 0; i < TYPE_NFIELDS (type); i += 1)
-    {
-      const char *t_field_name = TYPE_FIELD_NAME (type, i);
-      struct type *t;
-
-      if (t_field_name == NULL)
-        continue;
-
-      else if (ada_is_parent_field (type, i))
-        {
-	  /* This is a field pointing us to the parent type of a tagged
-	     type.  As hinted in this function's documentation, we give
-	     preference to fields in the current record first, so what
-	     we do here is just record the index of this field before
-	     we skip it.  If it turns out we couldn't find our field
-	     in the current record, then we'll get back to it and search
-	     inside it whether the field might exist in the parent.  */
-
-          parent_offset = i;
-          continue;
-        }
-
-      else if (field_name_match (t_field_name, name))
-	return TYPE_FIELD_TYPE (type, i);
-
-      else if (ada_is_wrapper_field (type, i))
-        {
-          t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
-                                          0, 1);
-          if (t != NULL)
-	    return t;
-        }
-
-      else if (ada_is_variant_part (type, i))
-        {
-          int j;
-          struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
-									i));
-
-          for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
-            {
-	      /* FIXME pnh 2008/01/26: We check for a field that is
-	         NOT wrapped in a struct, since the compiler sometimes
-		 generates these for unchecked variant types.  Revisit
-	         if the compiler changes this practice.  */
-	      const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
-
-	      if (v_field_name != NULL 
-		  && field_name_match (v_field_name, name))
-		t = TYPE_FIELD_TYPE (field_type, j);
-	      else
-		t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
-								 j),
-						name, 0, 1);
-
-              if (t != NULL)
-		return t;
-            }
-        }
-
-    }
-
-    /* Field not found so far.  If this is a tagged type which
-       has a parent, try finding that field in the parent now.  */
-
-    if (parent_offset != -1)
-      {
-        struct type *t;
-
-        t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, parent_offset),
-                                        name, 0, 1);
-        if (t != NULL)
-	  return t;
-      }
+  struct type *result;
+  find_struct_field (name, type, 0, &result, nullptr, nullptr, nullptr,
+		     nullptr);
+  if (result != nullptr)
+    return result;
 
 BadName:
   if (!noerr)
@@ -7665,38 +7295,33 @@ is_unchecked_variant (struct type *var_t
 
 
 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
-   within a value of type OUTER_TYPE that is stored in GDB at
-   OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
+   within OUTER, determine which variant clause (field number in VAR_TYPE,
    numbering from 0) is applicable.  Returns -1 if none are.  */
 
 int
-ada_which_variant_applies (struct type *var_type, struct type *outer_type,
-                           const gdb_byte *outer_valaddr)
+ada_which_variant_applies (struct type *var_type, struct value *outer)
 {
   int others_clause;
   int i;
   const char *discrim_name = ada_variant_discrim_name (var_type);
-  struct value *outer;
   struct value *discrim;
   LONGEST discrim_val;
 
   /* Using plain value_from_contents_and_address here causes problems
      because we will end up trying to resolve a type that is currently
      being constructed.  */
-  outer = value_from_contents_and_address_unresolved (outer_type,
-						      outer_valaddr, 0);
   discrim = ada_value_struct_elt (outer, discrim_name, 1);
   if (discrim == NULL)
     return -1;
   discrim_val = value_as_long (discrim);
 
   others_clause = -1;
-  for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
+  for (i = 0; i < var_type->num_fields (); i += 1)
     {
       if (ada_is_others_clause (var_type, i))
-        others_clause = i;
+	others_clause = i;
       else if (ada_in_variant (discrim_val, var_type, i))
-        return i;
+	return i;
     }
 
   return others_clause;
@@ -7704,7 +7329,7 @@ ada_which_variant_applies (struct type *
 
 
 
-                                /* Dynamic-Sized Records */
+				/* Dynamic-Sized Records */
 
 /* Strategy: The type ostensibly attached to a value with dynamic size
    (i.e., a size that is not statically recorded in the debugging
@@ -7748,7 +7373,7 @@ ada_value_ind (struct value *val0)
 {
   struct value *val = value_ind (val0);
 
-  if (ada_is_tagged_type (value_type (val), 0))
+  if (ada_is_tagged_type (val->type (), 0))
     val = ada_tag_value_at_base_address (val);
 
   return ada_to_fixed_value (val);
@@ -7760,13 +7385,13 @@ ada_value_ind (struct value *val0)
 static struct value *
 ada_coerce_ref (struct value *val0)
 {
-  if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
+  if (val0->type ()->code () == TYPE_CODE_REF)
     {
       struct value *val = val0;
 
       val = coerce_ref (val);
 
-      if (ada_is_tagged_type (value_type (val), 0))
+      if (ada_is_tagged_type (val->type (), 0))
 	val = ada_tag_value_at_base_address (val);
 
       return ada_to_fixed_value (val);
@@ -7775,21 +7400,12 @@ ada_coerce_ref (struct value *val0)
     return val0;
 }
 
-/* Return OFF rounded upward if necessary to a multiple of
-   ALIGNMENT (a power of 2).  */
-
-static unsigned int
-align_value (unsigned int off, unsigned int alignment)
-{
-  return (off + alignment - 1) & ~(alignment - 1);
-}
-
 /* Return the bit alignment required for field #F of template type TYPE.  */
 
 static unsigned int
 field_alignment (struct type *type, int f)
 {
-  const char *name = TYPE_FIELD_NAME (type, f);
+  const char *name = type->field (f).name ();
   int len;
   int align_offset;
 
@@ -7820,14 +7436,8 @@ field_alignment (struct type *type, int
 static struct symbol *
 ada_find_any_type_symbol (const char *name)
 {
-  struct symbol *sym;
-
-  sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
-  if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
-    return sym;
-
-  sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
-  return sym;
+  return standard_lookup (name, get_selected_block (nullptr),
+			  SEARCH_TYPE_DOMAIN);
 }
 
 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
@@ -7840,7 +7450,7 @@ ada_find_any_type (const char *name)
   struct symbol *sym = ada_find_any_type_symbol (name);
 
   if (sym != NULL)
-    return SYMBOL_TYPE (sym);
+    return sym->type ();
 
   return NULL;
 }
@@ -7870,21 +7480,21 @@ ada_prefer_type (struct type *type0, str
     return 1;
   else if (type0 == NULL)
     return 0;
-  else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
+  else if (type1->code () == TYPE_CODE_VOID)
     return 1;
-  else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
+  else if (type0->code () == TYPE_CODE_VOID)
     return 0;
-  else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
+  else if (type1->name () == NULL && type0->name () != NULL)
     return 1;
   else if (ada_is_constrained_packed_array_type (type0))
     return 1;
   else if (ada_is_array_descriptor_type (type0)
-           && !ada_is_array_descriptor_type (type1))
+	   && !ada_is_array_descriptor_type (type1))
     return 1;
   else
     {
-      const char *type0_name = TYPE_NAME (type0);
-      const char *type1_name = TYPE_NAME (type1);
+      const char *type0_name = type0->name ();
+      const char *type1_name = type1->name ();
 
       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
 	  && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
@@ -7901,7 +7511,7 @@ ada_type_name (struct type *type)
 {
   if (type == NULL)
     return NULL;
-  return TYPE_NAME (type);
+  return type->name ();
 }
 
 /* Search the list of "descriptive" types associated to TYPE for a type
@@ -7926,10 +7536,10 @@ find_parallel_type_by_descriptive_type (
       const char *result_name = ada_type_name (result);
 
       if (result_name == NULL)
-        {
-          warning (_("unexpected null name on descriptive type"));
-          return NULL;
-        }
+	{
+	  warning (_("unexpected null name on descriptive type"));
+	  return NULL;
+	}
 
       /* If the names match, stop.  */
       if (strcmp (result_name, name) == 0)
@@ -8012,7 +7622,7 @@ dynamic_template_type (struct type *type
 {
   type = ada_check_typedef (type);
 
-  if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
+  if (type == NULL || type->code () != TYPE_CODE_STRUCT
       || ada_type_name (type) == NULL)
     return NULL;
   else
@@ -8020,9 +7630,9 @@ dynamic_template_type (struct type *type
       int len = strlen (ada_type_name (type));
 
       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
-        return type;
+	return type;
       else
-        return ada_find_parallel_type (type, "___XVE");
+	return ada_find_parallel_type (type, "___XVE");
     }
 }
 
@@ -8032,10 +7642,10 @@ dynamic_template_type (struct type *type
 static int
 is_dynamic_field (struct type *templ_type, int field_num)
 {
-  const char *name = TYPE_FIELD_NAME (templ_type, field_num);
+  const char *name = templ_type->field (field_num).name ();
 
   return name != NULL
-    && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
+    && templ_type->field (field_num).type ()->code () == TYPE_CODE_PTR
     && strstr (name, "___XVL") != NULL;
 }
 
@@ -8047,13 +7657,13 @@ variant_field_index (struct type *type)
 {
   int f;
 
-  if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
+  if (type == NULL || type->code () != TYPE_CODE_STRUCT)
     return -1;
 
-  for (f = 0; f < TYPE_NFIELDS (type); f += 1)
+  for (f = 0; f < type->num_fields (); f += 1)
     {
       if (ada_is_variant_part (type, f))
-        return f;
+	return f;
     }
   return -1;
 }
@@ -8063,14 +7673,12 @@ variant_field_index (struct type *type)
 static struct type *
 empty_record (struct type *templ)
 {
-  struct type *type = alloc_type_copy (templ);
+  struct type *type = type_allocator (templ).new_type ();
 
-  TYPE_CODE (type) = TYPE_CODE_STRUCT;
-  TYPE_NFIELDS (type) = 0;
-  TYPE_FIELDS (type) = NULL;
+  type->set_code (TYPE_CODE_STRUCT);
   INIT_NONE_SPECIFIC (type);
-  TYPE_NAME (type) = "<empty>";
-  TYPE_LENGTH (type) = 0;
+  type->set_name ("<empty>");
+  type->set_length (0);
   return type;
 }
 
@@ -8078,7 +7686,7 @@ empty_record (struct type *templ)
    the value of type TYPE at VALADDR or ADDRESS (see comments at
    the beginning of this section) VAL according to GNAT conventions.
    DVAL0 should describe the (portion of a) record that contains any
-   necessary discriminants.  It should be NULL if value_type (VAL) is
+   necessary discriminants.  It should be NULL if VAL->type () is
    an outer-level type (i.e., as opposed to a branch of a variant.)  A
    variant field (unless unchecked) is replaced by a particular branch
    of the variant.
@@ -8094,10 +7702,9 @@ empty_record (struct type *templ)
 struct type *
 ada_template_to_fixed_record_type_1 (struct type *type,
 				     const gdb_byte *valaddr,
-                                     CORE_ADDR address, struct value *dval0,
-                                     int keep_dynamic_fields)
+				     CORE_ADDR address, struct value *dval0,
+				     int keep_dynamic_fields)
 {
-  struct value *mark = value_mark ();
   struct value *dval;
   struct type *rtype;
   int nfields, bit_len;
@@ -8106,29 +7713,28 @@ ada_template_to_fixed_record_type_1 (str
   int fld_bit_len;
   int f;
 
+  scoped_value_mark mark;
+
   /* Compute the number of fields in this record type that are going
      to be processed: unless keep_dynamic_fields, this includes only
      fields whose position and length are static will be processed.  */
   if (keep_dynamic_fields)
-    nfields = TYPE_NFIELDS (type);
+    nfields = type->num_fields ();
   else
     {
       nfields = 0;
-      while (nfields < TYPE_NFIELDS (type)
-             && !ada_is_variant_part (type, nfields)
-             && !is_dynamic_field (type, nfields))
-        nfields++;
+      while (nfields < type->num_fields ()
+	     && !ada_is_variant_part (type, nfields)
+	     && !is_dynamic_field (type, nfields))
+	nfields++;
     }
 
-  rtype = alloc_type_copy (type);
-  TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
+  rtype = type_allocator (type).new_type ();
+  rtype->set_code (TYPE_CODE_STRUCT);
   INIT_NONE_SPECIFIC (rtype);
-  TYPE_NFIELDS (rtype) = nfields;
-  TYPE_FIELDS (rtype) = (struct field *)
-    TYPE_ALLOC (rtype, nfields * sizeof (struct field));
-  memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
-  TYPE_NAME (rtype) = ada_type_name (type);
-  TYPE_FIXED_INSTANCE (rtype) = 1;
+  rtype->alloc_fields (nfields);
+  rtype->set_name (ada_type_name (type));
+  rtype->set_is_fixed_instance (true);
 
   off = 0;
   bit_len = 0;
@@ -8136,31 +7742,24 @@ ada_template_to_fixed_record_type_1 (str
 
   for (f = 0; f < nfields; f += 1)
     {
-      off = align_value (off, field_alignment (type, f))
-	+ TYPE_FIELD_BITPOS (type, f);
-      SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
-      TYPE_FIELD_BITSIZE (rtype, f) = 0;
+      off = align_up (off, field_alignment (type, f))
+	+ type->field (f).loc_bitpos ();
+      rtype->field (f).set_loc_bitpos (off);
+      rtype->field (f).set_bitsize (0);
 
       if (ada_is_variant_part (type, f))
-        {
-          variant_field = f;
-          fld_bit_len = 0;
-        }
+	{
+	  variant_field = f;
+	  fld_bit_len = 0;
+	}
       else if (is_dynamic_field (type, f))
-        {
+	{
 	  const gdb_byte *field_valaddr = valaddr;
 	  CORE_ADDR field_address = address;
-	  struct type *field_type =
-	    TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
+	  struct type *field_type = type->field (f).type ()->target_type ();
 
-          if (dval0 == NULL)
+	  if (dval0 == NULL)
 	    {
-	      /* rtype's length is computed based on the run-time
-		 value of discriminants.  If the discriminants are not
-		 initialized, the type size may be completely bogus and
-		 GDB may fail to allocate a value for it.  So check the
-		 size first before creating the value.  */
-	      ada_ensure_varsize_limit (rtype);
 	      /* Using plain value_from_contents_and_address here
 		 causes problems because we will end up trying to
 		 resolve a type that is currently being
@@ -8168,10 +7767,10 @@ ada_template_to_fixed_record_type_1 (str
 	      dval = value_from_contents_and_address_unresolved (rtype,
 								 valaddr,
 								 address);
-	      rtype = value_type (dval);
+	      rtype = dval->type ();
 	    }
-          else
-            dval = dval0;
+	  else
+	    dval = dval0;
 
 	  /* If the type referenced by this field is an aligner type, we need
 	     to unwrap that aligner type, because its size might not be set.
@@ -8180,7 +7779,7 @@ ada_template_to_fixed_record_type_1 (str
 	     that follow this one.  */
 	  if (ada_is_aligner_type (field_type))
 	    {
-	      long field_offset = TYPE_FIELD_BITPOS (field_type, f);
+	      long field_offset = type->field (f).loc_bitpos ();
 
 	      field_valaddr = cond_offset_host (field_valaddr, field_offset);
 	      field_address = cond_offset_target (field_address, field_offset);
@@ -8201,28 +7800,19 @@ ada_template_to_fixed_record_type_1 (str
 	  field_type = ada_get_base_type (field_type);
 	  field_type = ada_to_fixed_type (field_type, field_valaddr,
 					  field_address, dval, 0);
-	  /* If the field size is already larger than the maximum
-	     object size, then the record itself will necessarily
-	     be larger than the maximum object size.  We need to make
-	     this check now, because the size might be so ridiculously
-	     large (due to an uninitialized variable in the inferior)
-	     that it would cause an overflow when adding it to the
-	     record size.  */
-	  ada_ensure_varsize_limit (field_type);
 
-	  TYPE_FIELD_TYPE (rtype, f) = field_type;
-          TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
+	  rtype->field (f).set_type (field_type);
+	  rtype->field (f).set_name (type->field (f).name ());
 	  /* The multiplication can potentially overflow.  But because
 	     the field length has been size-checked just above, and
 	     assuming that the maximum size is a reasonable value,
 	     an overflow should not happen in practice.  So rather than
 	     adding overflow recovery code to this already complex code,
 	     we just assume that it's not going to happen.  */
-          fld_bit_len =
-            TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
-        }
+	  fld_bit_len = rtype->field (f).type ()->length () * TARGET_CHAR_BIT;
+	}
       else
-        {
+	{
 	  /* Note: If this field's type is a typedef, it is important
 	     to preserve the typedef layer.
 
@@ -8233,31 +7823,32 @@ ada_template_to_fixed_record_type_1 (str
 	     structure, the typedef is the only clue which allows us
 	     to distinguish between the two options.  Stripping it
 	     would prevent us from printing this field appropriately.  */
-          TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
-          TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
-          if (TYPE_FIELD_BITSIZE (type, f) > 0)
-            fld_bit_len =
-              TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
-          else
+	  rtype->field (f).set_type (type->field (f).type ());
+	  rtype->field (f).set_name (type->field (f).name ());
+	  if (type->field (f).bitsize () > 0)
 	    {
-	      struct type *field_type = TYPE_FIELD_TYPE (type, f);
+	      fld_bit_len = type->field (f).bitsize ();
+	      rtype->field (f).set_bitsize (fld_bit_len);
+	    }
+	  else
+	    {
+	      struct type *field_type = type->field (f).type ();
 
 	      /* We need to be careful of typedefs when computing
 		 the length of our field.  If this is a typedef,
 		 get the length of the target type, not the length
 		 of the typedef.  */
-	      if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
+	      if (field_type->code () == TYPE_CODE_TYPEDEF)
 		field_type = ada_typedef_target_type (field_type);
 
-              fld_bit_len =
-                TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
+	      fld_bit_len =
+		ada_check_typedef (field_type)->length () * TARGET_CHAR_BIT;
 	    }
-        }
+	}
       if (off + fld_bit_len > bit_len)
-        bit_len = off + fld_bit_len;
+	bit_len = off + fld_bit_len;
       off += fld_bit_len;
-      TYPE_LENGTH (rtype) =
-        align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
+      rtype->set_length (align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT);
     }
 
   /* We handle the variant part, if any, at the end because of certain
@@ -8268,7 +7859,7 @@ ada_template_to_fixed_record_type_1 (str
     {
       struct type *branch_type;
 
-      off = TYPE_FIELD_BITPOS (rtype, variant_field);
+      off = rtype->field (variant_field).loc_bitpos ();
 
       if (dval0 == NULL)
 	{
@@ -8277,34 +7868,34 @@ ada_template_to_fixed_record_type_1 (str
 	     that is currently being constructed.  */
 	  dval = value_from_contents_and_address_unresolved (rtype, valaddr,
 							     address);
-	  rtype = value_type (dval);
+	  rtype = dval->type ();
 	}
       else
-        dval = dval0;
+	dval = dval0;
 
       branch_type =
-        to_fixed_variant_branch_type
-        (TYPE_FIELD_TYPE (type, variant_field),
-         cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
-         cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
+	to_fixed_variant_branch_type
+	(type->field (variant_field).type (),
+	 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
+	 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
       if (branch_type == NULL)
-        {
-          for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
-            TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
-          TYPE_NFIELDS (rtype) -= 1;
-        }
-      else
-        {
-          TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
-          TYPE_FIELD_NAME (rtype, variant_field) = "S";
-          fld_bit_len =
-            TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
-            TARGET_CHAR_BIT;
-          if (off + fld_bit_len > bit_len)
-            bit_len = off + fld_bit_len;
-          TYPE_LENGTH (rtype) =
-            align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
-        }
+	{
+	  for (f = variant_field + 1; f < rtype->num_fields (); f += 1)
+	    rtype->field (f - 1) = rtype->field (f);
+	  rtype->set_num_fields (rtype->num_fields () - 1);
+	}
+      else
+	{
+	  rtype->field (variant_field).set_type (branch_type);
+	  rtype->field (variant_field).set_name ("S");
+	  fld_bit_len =
+	    rtype->field (variant_field).type ()->length () * TARGET_CHAR_BIT;
+	  if (off + fld_bit_len > bit_len)
+	    bit_len = off + fld_bit_len;
+
+	  rtype->set_length
+	    (align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT);
+	}
     }
 
   /* According to exp_dbug.ads, the size of TYPE for variable-size records
@@ -8313,24 +7904,18 @@ ada_template_to_fixed_record_type_1 (str
      probably in the debug info.  In that case, we don't round up the size
      of the resulting type.  If this record is not part of another structure,
      the current RTYPE length might be good enough for our purposes.  */
-  if (TYPE_LENGTH (type) <= 0)
+  if (type->length () <= 0)
     {
-      if (TYPE_NAME (rtype))
+      if (rtype->name ())
 	warning (_("Invalid type size for `%s' detected: %s."),
-		 TYPE_NAME (rtype), pulongest (TYPE_LENGTH (type)));
+		 rtype->name (), pulongest (type->length ()));
       else
 	warning (_("Invalid type size for <unnamed> detected: %s."),
-		 pulongest (TYPE_LENGTH (type)));
+		 pulongest (type->length ()));
     }
   else
-    {
-      TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
-                                         TYPE_LENGTH (type));
-    }
+    rtype->set_length (align_up (rtype->length (), type->length ()));
 
-  value_free_to_mark (mark);
-  if (TYPE_LENGTH (rtype) > varsize_limit)
-    error (_("record type with dynamic size is larger than varsize-limit"));
   return rtype;
 }
 
@@ -8339,10 +7924,10 @@ ada_template_to_fixed_record_type_1 (str
 
 static struct type *
 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
-                               CORE_ADDR address, struct value *dval0)
+			       CORE_ADDR address, struct value *dval0)
 {
   return ada_template_to_fixed_record_type_1 (type, valaddr,
-                                              address, dval0, 1);
+					      address, dval0, 1);
 }
 
 /* An ordinary record type in which ___XVL-convention fields and
@@ -8351,7 +7936,7 @@ template_to_fixed_record_type (struct ty
    no runtime values.  Useless for use in values, but that's OK,
    since the results are used only for type determinations.   Works on both
    structs and unions.  Representation note: to save space, we memorize
-   the result of this function in the TYPE_TARGET_TYPE of the
+   the result of this function in the type::target_type of the
    template type.  */
 
 static struct type *
@@ -8362,53 +7947,52 @@ template_to_static_fixed_type (struct ty
   int f;
 
   /* No need no do anything if the input type is already fixed.  */
-  if (TYPE_FIXED_INSTANCE (type0))
+  if (type0->is_fixed_instance ())
     return type0;
 
   /* Likewise if we already have computed the static approximation.  */
-  if (TYPE_TARGET_TYPE (type0) != NULL)
-    return TYPE_TARGET_TYPE (type0);
+  if (type0->target_type () != NULL)
+    return type0->target_type ();
 
   /* Don't clone TYPE0 until we are sure we are going to need a copy.  */
   type = type0;
-  nfields = TYPE_NFIELDS (type0);
+  nfields = type0->num_fields ();
 
   /* Whether or not we cloned TYPE0, cache the result so that we don't do
      recompute all over next time.  */
-  TYPE_TARGET_TYPE (type0) = type;
+  type0->set_target_type (type);
 
   for (f = 0; f < nfields; f += 1)
     {
-      struct type *field_type = TYPE_FIELD_TYPE (type0, f);
+      struct type *field_type = type0->field (f).type ();
       struct type *new_type;
 
       if (is_dynamic_field (type0, f))
 	{
 	  field_type = ada_check_typedef (field_type);
-          new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
+	  new_type = to_static_fixed_type (field_type->target_type ());
 	}
       else
-        new_type = static_unwrap_type (field_type);
+	new_type = static_unwrap_type (field_type);
 
       if (new_type != field_type)
 	{
 	  /* Clone TYPE0 only the first time we get a new field type.  */
 	  if (type == type0)
 	    {
-	      TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
-	      TYPE_CODE (type) = TYPE_CODE (type0);
+	      type = type_allocator (type0).new_type ();
+	      type0->set_target_type (type);
+	      type->set_code (type0->code ());
 	      INIT_NONE_SPECIFIC (type);
-	      TYPE_NFIELDS (type) = nfields;
-	      TYPE_FIELDS (type) = (struct field *)
-		TYPE_ALLOC (type, nfields * sizeof (struct field));
-	      memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
-		      sizeof (struct field) * nfields);
-	      TYPE_NAME (type) = ada_type_name (type0);
-	      TYPE_FIXED_INSTANCE (type) = 1;
-	      TYPE_LENGTH (type) = 0;
+
+	      type->copy_fields (type0);
+
+	      type->set_name (ada_type_name (type0));
+	      type->set_is_fixed_instance (true);
+	      type->set_length (0);
 	    }
-	  TYPE_FIELD_TYPE (type, f) = new_type;
-	  TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
+	  type->field (f).set_type (new_type);
+	  type->field (f).set_name (type0->field (f).name ());
 	}
     }
 
@@ -8424,64 +8008,62 @@ template_to_static_fixed_type (struct ty
 
 static struct type *
 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
-                                   CORE_ADDR address, struct value *dval0)
+				   CORE_ADDR address, struct value *dval0)
 {
-  struct value *mark = value_mark ();
   struct value *dval;
   struct type *rtype;
   struct type *branch_type;
-  int nfields = TYPE_NFIELDS (type);
+  int nfields = type->num_fields ();
   int variant_field = variant_field_index (type);
 
   if (variant_field == -1)
     return type;
 
+  scoped_value_mark mark;
   if (dval0 == NULL)
     {
       dval = value_from_contents_and_address (type, valaddr, address);
-      type = value_type (dval);
+      type = dval->type ();
     }
   else
     dval = dval0;
 
-  rtype = alloc_type_copy (type);
-  TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
+  rtype = type_allocator (type).new_type ();
+  rtype->set_code (TYPE_CODE_STRUCT);
   INIT_NONE_SPECIFIC (rtype);
-  TYPE_NFIELDS (rtype) = nfields;
-  TYPE_FIELDS (rtype) =
-    (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
-  memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
-          sizeof (struct field) * nfields);
-  TYPE_NAME (rtype) = ada_type_name (type);
-  TYPE_FIXED_INSTANCE (rtype) = 1;
-  TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
+  rtype->copy_fields (type);
+
+  rtype->set_name (ada_type_name (type));
+  rtype->set_is_fixed_instance (true);
+  rtype->set_length (type->length ());
 
   branch_type = to_fixed_variant_branch_type
-    (TYPE_FIELD_TYPE (type, variant_field),
+    (type->field (variant_field).type (),
      cond_offset_host (valaddr,
-                       TYPE_FIELD_BITPOS (type, variant_field)
-                       / TARGET_CHAR_BIT),
+		       type->field (variant_field).loc_bitpos ()
+		       / TARGET_CHAR_BIT),
      cond_offset_target (address,
-                         TYPE_FIELD_BITPOS (type, variant_field)
-                         / TARGET_CHAR_BIT), dval);
+			 type->field (variant_field).loc_bitpos ()
+			 / TARGET_CHAR_BIT), dval);
   if (branch_type == NULL)
     {
       int f;
 
       for (f = variant_field + 1; f < nfields; f += 1)
-        TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
-      TYPE_NFIELDS (rtype) -= 1;
+	rtype->field (f - 1) = rtype->field (f);
+      rtype->set_num_fields (rtype->num_fields () - 1);
     }
   else
     {
-      TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
-      TYPE_FIELD_NAME (rtype, variant_field) = "S";
-      TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
-      TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
+      rtype->field (variant_field).set_type (branch_type);
+      rtype->field (variant_field).set_name ("S");
+      rtype->field (variant_field).set_bitsize (0);
+      rtype->set_length (rtype->length () + branch_type->length ());
     }
-  TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
 
-  value_free_to_mark (mark);
+  rtype->set_length (rtype->length ()
+		     - type->field (variant_field).type ()->length ());
+
   return rtype;
 }
 
@@ -8505,11 +8087,11 @@ to_record_with_fixed_variant_part (struc
 
 static struct type *
 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
-                      CORE_ADDR address, struct value *dval)
+		      CORE_ADDR address, struct value *dval)
 {
   struct type *templ_type;
 
-  if (TYPE_FIXED_INSTANCE (type0))
+  if (type0->is_fixed_instance ())
     return type0;
 
   templ_type = dynamic_template_type (type0);
@@ -8519,13 +8101,13 @@ to_fixed_record_type (struct type *type0
   else if (variant_field_index (type0) >= 0)
     {
       if (dval == NULL && valaddr == NULL && address == 0)
-        return type0;
+	return type0;
       return to_record_with_fixed_variant_part (type0, valaddr, address,
-                                                dval);
+						dval);
     }
   else
     {
-      TYPE_FIXED_INSTANCE (type0) = 1;
+      type0->set_is_fixed_instance (true);
       return type0;
     }
 
@@ -8541,14 +8123,14 @@ to_fixed_record_type (struct type *type0
 
 static struct type *
 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
-                              CORE_ADDR address, struct value *dval)
+			      CORE_ADDR address, struct value *dval)
 {
   int which;
   struct type *templ_type;
   struct type *var_type;
 
-  if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
-    var_type = TYPE_TARGET_TYPE (var_type0);
+  if (var_type0->code () == TYPE_CODE_PTR)
+    var_type = var_type0->target_type ();
   else
     var_type = var_type0;
 
@@ -8557,24 +8139,21 @@ to_fixed_variant_branch_type (struct typ
   if (templ_type != NULL)
     var_type = templ_type;
 
-  if (is_unchecked_variant (var_type, value_type (dval)))
+  if (is_unchecked_variant (var_type, dval->type ()))
       return var_type0;
-  which =
-    ada_which_variant_applies (var_type,
-                               value_type (dval), value_contents (dval));
+  which = ada_which_variant_applies (var_type, dval);
 
   if (which < 0)
     return empty_record (var_type);
   else if (is_dynamic_field (var_type, which))
     return to_fixed_record_type
-      (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
-       valaddr, address, dval);
-  else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
+      (var_type->field (which).type ()->target_type(), valaddr, address, dval);
+  else if (variant_field_index (var_type->field (which).type ()) >= 0)
     return
       to_fixed_record_type
-      (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
+      (var_type->field (which).type (), valaddr, address, dval);
   else
-    return TYPE_FIELD_TYPE (var_type, which);
+    return var_type->field (which).type ();
 }
 
 /* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
@@ -8589,10 +8168,10 @@ ada_is_redundant_range_encoding (struct
   int n;
   LONGEST lo, hi;
 
-  gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
+  gdb_assert (range_type->code () == TYPE_CODE_RANGE);
 
-  if (TYPE_CODE (get_base_type (range_type))
-      != TYPE_CODE (get_base_type (encoding_type)))
+  if (get_base_type (range_type)->code ()
+      != get_base_type (encoding_type)->code ())
     {
       /* The compiler probably used a simple base type to describe
 	 the range type instead of the range's actual base type,
@@ -8605,23 +8184,23 @@ ada_is_redundant_range_encoding (struct
   if (is_dynamic_type (range_type))
     return 0;
 
-  if (TYPE_NAME (encoding_type) == NULL)
+  if (encoding_type->name () == NULL)
     return 0;
 
-  bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
+  bounds_str = strstr (encoding_type->name (), "___XDLU_");
   if (bounds_str == NULL)
     return 0;
 
   n = 8; /* Skip "___XDLU_".  */
   if (!ada_scan_number (bounds_str, n, &lo, &n))
     return 0;
-  if (TYPE_LOW_BOUND (range_type) != lo)
+  if (range_type->bounds ()->low.const_val () != lo)
     return 0;
 
   n += 2; /* Skip the "__" separator between the two bounds.  */
   if (!ada_scan_number (bounds_str, n, &hi, &n))
     return 0;
-  if (TYPE_HIGH_BOUND (range_type) != hi)
+  if (range_type->bounds ()->high.const_val () != hi)
     return 0;
 
   return 1;
@@ -8638,12 +8217,12 @@ ada_is_redundant_index_type_desc (struct
   struct type *this_layer = check_typedef (array_type);
   int i;
 
-  for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
+  for (i = 0; i < desc_type->num_fields (); i++)
     {
-      if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
-					    TYPE_FIELD_TYPE (desc_type, i)))
+      if (!ada_is_redundant_range_encoding (this_layer->index_type (),
+					    desc_type->field (i).type ()))
 	return 0;
-      this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
+      this_layer = check_typedef (this_layer->target_type ());
     }
 
   return 1;
@@ -8659,7 +8238,7 @@ ada_is_redundant_index_type_desc (struct
 
 static struct type *
 to_fixed_array_type (struct type *type0, struct value *dval,
-                     int ignore_too_big)
+		     int ignore_too_big)
 {
   struct type *index_type_desc;
   struct type *result;
@@ -8667,12 +8246,16 @@ to_fixed_array_type (struct type *type0,
   static const char *xa_suffix = "___XA";
 
   type0 = ada_check_typedef (type0);
-  if (TYPE_FIXED_INSTANCE (type0))
+  if (type0->is_fixed_instance ())
     return type0;
 
   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
   if (constrained_packed_array_p)
-    type0 = decode_constrained_packed_array_type (type0);
+    {
+      type0 = decode_constrained_packed_array_type (type0);
+      if (type0 == nullptr)
+	error (_("could not decode constrained packed array type"));
+    }
 
   index_type_desc = ada_find_parallel_type (type0, xa_suffix);
 
@@ -8712,29 +8295,31 @@ to_fixed_array_type (struct type *type0,
 
   if (index_type_desc == NULL)
     {
-      struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
+      struct type *elt_type0 = ada_check_typedef (type0->target_type ());
 
       /* NOTE: elt_type---the fixed version of elt_type0---should never
-         depend on the contents of the array in properly constructed
-         debugging data.  */
+	 depend on the contents of the array in properly constructed
+	 debugging data.  */
       /* Create a fixed version of the array element type.
-         We're not providing the address of an element here,
-         and thus the actual object value cannot be inspected to do
-         the conversion.  This should not be a problem, since arrays of
-         unconstrained objects are not allowed.  In particular, all
-         the elements of an array of a tagged type should all be of
-         the same type specified in the debugging info.  No need to
-         consult the object tag.  */
+	 We're not providing the address of an element here,
+	 and thus the actual object value cannot be inspected to do
+	 the conversion.  This should not be a problem, since arrays of
+	 unconstrained objects are not allowed.  In particular, all
+	 the elements of an array of a tagged type should all be of
+	 the same type specified in the debugging info.  No need to
+	 consult the object tag.  */
       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
 
       /* Make sure we always create a new array type when dealing with
 	 packed array types, since we're going to fix-up the array
 	 type length and element bitsize a little further down.  */
       if (elt_type0 == elt_type && !constrained_packed_array_p)
-        result = type0;
+	result = type0;
       else
-        result = create_array_type (alloc_type_copy (type0),
-                                    elt_type, TYPE_INDEX_TYPE (type0));
+	{
+	  type_allocator alloc (type0);
+	  result = create_array_type (alloc, elt_type, type0->index_type ());
+	}
     }
   else
     {
@@ -8742,41 +8327,39 @@ to_fixed_array_type (struct type *type0,
       struct type *elt_type0;
 
       elt_type0 = type0;
-      for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
-        elt_type0 = TYPE_TARGET_TYPE (elt_type0);
+      for (i = index_type_desc->num_fields (); i > 0; i -= 1)
+	elt_type0 = elt_type0->target_type ();
 
       /* NOTE: result---the fixed version of elt_type0---should never
-         depend on the contents of the array in properly constructed
-         debugging data.  */
+	 depend on the contents of the array in properly constructed
+	 debugging data.  */
       /* Create a fixed version of the array element type.
-         We're not providing the address of an element here,
-         and thus the actual object value cannot be inspected to do
-         the conversion.  This should not be a problem, since arrays of
-         unconstrained objects are not allowed.  In particular, all
-         the elements of an array of a tagged type should all be of
-         the same type specified in the debugging info.  No need to
-         consult the object tag.  */
+	 We're not providing the address of an element here,
+	 and thus the actual object value cannot be inspected to do
+	 the conversion.  This should not be a problem, since arrays of
+	 unconstrained objects are not allowed.  In particular, all
+	 the elements of an array of a tagged type should all be of
+	 the same type specified in the debugging info.  No need to
+	 consult the object tag.  */
       result =
-        ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
+	ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
 
       elt_type0 = type0;
-      for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
-        {
-          struct type *range_type =
-            to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
-
-          result = create_array_type (alloc_type_copy (elt_type0),
-                                      result, range_type);
-	  elt_type0 = TYPE_TARGET_TYPE (elt_type0);
-        }
-      if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
-        error (_("array type with dynamic size is larger than varsize-limit"));
+      for (i = index_type_desc->num_fields () - 1; i >= 0; i -= 1)
+	{
+	  struct type *range_type =
+	    to_fixed_range_type (index_type_desc->field (i).type (), dval);
+
+	  type_allocator alloc (elt_type0);
+	  result = create_array_type (alloc, result, range_type);
+	  elt_type0 = elt_type0->target_type ();
+	}
     }
 
   /* We want to preserve the type name.  This can be useful when
      trying to get the type name of a value that has already been
      printed (for instance, if the user did "print VAR; whatis $".  */
-  TYPE_NAME (result) = TYPE_NAME (type0);
+  result->set_name (type0->name ());
 
   if (constrained_packed_array_p)
     {
@@ -8784,16 +8367,16 @@ to_fixed_array_type (struct type *type0,
 	 type was a regular (non-packed) array type.  As a result, the
 	 bitsize of the array elements needs to be set again, and the array
 	 length needs to be recomputed based on that bitsize.  */
-      int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
-      int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
+      int len = result->length () / result->target_type ()->length ();
+      int elt_bitsize = type0->field (0).bitsize ();
 
-      TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
-      TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
-      if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
-        TYPE_LENGTH (result)++;
+      result->field (0).set_bitsize (elt_bitsize);
+      result->set_length (len * elt_bitsize / HOST_CHAR_BIT);
+      if (result->length () * HOST_CHAR_BIT < len * elt_bitsize)
+	result->set_length (result->length () + 1);
     }
 
-  TYPE_FIXED_INSTANCE (result) = 1;
+  result->set_is_fixed_instance (true);
   return result;
 }
 
@@ -8812,7 +8395,7 @@ to_fixed_array_type (struct type *type0,
    
 static struct type *
 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
-                   CORE_ADDR address, struct value *dval, int check_tag)
+		   CORE_ADDR address, struct value *dval, int check_tag)
 {
   type = ada_check_typedef (type);
 
@@ -8820,25 +8403,25 @@ ada_to_fixed_type_1 (struct type *type,
   if (!HAVE_GNAT_AUX_INFO (type))
     return type;
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     default:
       return type;
     case TYPE_CODE_STRUCT:
       {
-        struct type *static_type = to_static_fixed_type (type);
-        struct type *fixed_record_type =
-          to_fixed_record_type (type, valaddr, address, NULL);
-
-        /* If STATIC_TYPE is a tagged type and we know the object's address,
-           then we can determine its tag, and compute the object's actual
-           type from there.  Note that we have to use the fixed record
-           type (the parent part of the record may have dynamic fields
-           and the way the location of _tag is expressed may depend on
-           them).  */
+	struct type *static_type = to_static_fixed_type (type);
+	struct type *fixed_record_type =
+	  to_fixed_record_type (type, valaddr, address, NULL);
+
+	/* If STATIC_TYPE is a tagged type and we know the object's address,
+	   then we can determine its tag, and compute the object's actual
+	   type from there.  Note that we have to use the fixed record
+	   type (the parent part of the record may have dynamic fields
+	   and the way the location of _tag is expressed may depend on
+	   them).  */
 
-        if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
-          {
+	if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
+	  {
 	    struct value *tag =
 	      value_tag_from_contents_and_address
 	      (fixed_record_type,
@@ -8849,24 +8432,24 @@ ada_to_fixed_type_1 (struct type *type,
 	      value_from_contents_and_address (fixed_record_type,
 					       valaddr,
 					       address);
-            fixed_record_type = value_type (obj);
-            if (real_type != NULL)
-              return to_fixed_record_type
+	    fixed_record_type = obj->type ();
+	    if (real_type != NULL)
+	      return to_fixed_record_type
 		(real_type, NULL,
-		 value_address (ada_tag_value_at_base_address (obj)), NULL);
-          }
+		 ada_tag_value_at_base_address (obj)->address (), NULL);
+	  }
 
-        /* Check to see if there is a parallel ___XVZ variable.
-           If there is, then it provides the actual size of our type.  */
-        else if (ada_type_name (fixed_record_type) != NULL)
-          {
-            const char *name = ada_type_name (fixed_record_type);
-            char *xvz_name
+	/* Check to see if there is a parallel ___XVZ variable.
+	   If there is, then it provides the actual size of our type.  */
+	else if (ada_type_name (fixed_record_type) != NULL)
+	  {
+	    const char *name = ada_type_name (fixed_record_type);
+	    char *xvz_name
 	      = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
 	    bool xvz_found = false;
-            LONGEST size;
+	    LONGEST size;
 
-            xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
+	    xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
 	    try
 	      {
 		xvz_found = get_int_var_value (xvz_name, size);
@@ -8883,43 +8466,43 @@ ada_to_fixed_type_1 (struct type *type,
 			     xvz_name, except.what ());
 	      }
 
-            if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
-              {
-                fixed_record_type = copy_type (fixed_record_type);
-                TYPE_LENGTH (fixed_record_type) = size;
-
-                /* The FIXED_RECORD_TYPE may have be a stub.  We have
-                   observed this when the debugging info is STABS, and
-                   apparently it is something that is hard to fix.
-
-                   In practice, we don't need the actual type definition
-                   at all, because the presence of the XVZ variable allows us
-                   to assume that there must be a XVS type as well, which we
-                   should be able to use later, when we need the actual type
-                   definition.
-
-                   In the meantime, pretend that the "fixed" type we are
-                   returning is NOT a stub, because this can cause trouble
-                   when using this type to create new types targeting it.
-                   Indeed, the associated creation routines often check
-                   whether the target type is a stub and will try to replace
-                   it, thus using a type with the wrong size.  This, in turn,
-                   might cause the new type to have the wrong size too.
-                   Consider the case of an array, for instance, where the size
-                   of the array is computed from the number of elements in
-                   our array multiplied by the size of its element.  */
-                TYPE_STUB (fixed_record_type) = 0;
-              }
-          }
-        return fixed_record_type;
+	    if (xvz_found && fixed_record_type->length () != size)
+	      {
+		fixed_record_type = copy_type (fixed_record_type);
+		fixed_record_type->set_length (size);
+
+		/* The FIXED_RECORD_TYPE may have be a stub.  We have
+		   observed this when the debugging info is STABS, and
+		   apparently it is something that is hard to fix.
+
+		   In practice, we don't need the actual type definition
+		   at all, because the presence of the XVZ variable allows us
+		   to assume that there must be a XVS type as well, which we
+		   should be able to use later, when we need the actual type
+		   definition.
+
+		   In the meantime, pretend that the "fixed" type we are
+		   returning is NOT a stub, because this can cause trouble
+		   when using this type to create new types targeting it.
+		   Indeed, the associated creation routines often check
+		   whether the target type is a stub and will try to replace
+		   it, thus using a type with the wrong size.  This, in turn,
+		   might cause the new type to have the wrong size too.
+		   Consider the case of an array, for instance, where the size
+		   of the array is computed from the number of elements in
+		   our array multiplied by the size of its element.  */
+		fixed_record_type->set_is_stub (false);
+	      }
+	  }
+	return fixed_record_type;
       }
     case TYPE_CODE_ARRAY:
       return to_fixed_array_type (type, dval, 1);
     case TYPE_CODE_UNION:
       if (dval == NULL)
-        return type;
+	return type;
       else
-        return to_fixed_variant_branch_type (type, valaddr, address, dval);
+	return to_fixed_variant_branch_type (type, valaddr, address, dval);
     }
 }
 
@@ -8945,7 +8528,7 @@ ada_to_fixed_type_1 (struct type *type,
 
 struct type *
 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
-                   CORE_ADDR address, struct value *dval, int check_tag)
+		   CORE_ADDR address, struct value *dval, int check_tag)
 
 {
   struct type *fixed_type =
@@ -8968,7 +8551,7 @@ ada_to_fixed_type (struct type *type, co
       only in that situation.  But this seems unnecessary so far, probably
       because we call check_typedef/ada_check_typedef pretty much everywhere.
       */
-  if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
+  if (type->code () == TYPE_CODE_TYPEDEF
       && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
 	  == TYPE_MAIN_TYPE (fixed_type)))
     return type;
@@ -8987,27 +8570,27 @@ to_static_fixed_type (struct type *type0
   if (type0 == NULL)
     return NULL;
 
-  if (TYPE_FIXED_INSTANCE (type0))
+  if (type0->is_fixed_instance ())
     return type0;
 
   type0 = ada_check_typedef (type0);
 
-  switch (TYPE_CODE (type0))
+  switch (type0->code ())
     {
     default:
       return type0;
     case TYPE_CODE_STRUCT:
       type = dynamic_template_type (type0);
       if (type != NULL)
-        return template_to_static_fixed_type (type);
+	return template_to_static_fixed_type (type);
       else
-        return template_to_static_fixed_type (type0);
+	return template_to_static_fixed_type (type0);
     case TYPE_CODE_UNION:
       type = ada_find_parallel_type (type0, "___XVU");
       if (type != NULL)
-        return template_to_static_fixed_type (type);
+	return template_to_static_fixed_type (type);
       else
-        return template_to_static_fixed_type (type0);
+	return template_to_static_fixed_type (type0);
     }
 }
 
@@ -9018,9 +8601,9 @@ static_unwrap_type (struct type *type)
 {
   if (ada_is_aligner_type (type))
     {
-      struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
+      struct type *type1 = ada_check_typedef (type)->field (0).type ();
       if (ada_type_name (type1) == NULL)
-        TYPE_NAME (type1) = ada_type_name (type);
+	type1->set_name (ada_type_name (type));
 
       return static_unwrap_type (type1);
     }
@@ -9029,9 +8612,9 @@ static_unwrap_type (struct type *type)
       struct type *raw_real_type = ada_get_base_type (type);
 
       if (raw_real_type == type)
-        return type;
+	return type;
       else
-        return to_static_fixed_type (raw_real_type);
+	return to_static_fixed_type (raw_real_type);
     }
 }
 
@@ -9065,23 +8648,23 @@ ada_check_typedef (struct type *type)
     return type;
 
   type = check_typedef (type);
-  if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
-      || !TYPE_STUB (type)
-      || TYPE_NAME (type) == NULL)
+  if (type == NULL || type->code () != TYPE_CODE_ENUM
+      || !type->is_stub ()
+      || type->name () == NULL)
     return type;
   else
     {
-      const char *name = TYPE_NAME (type);
+      const char *name = type->name ();
       struct type *type1 = ada_find_any_type (name);
 
       if (type1 == NULL)
-        return type;
+	return type;
 
       /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
 	 stubs pointing to arrays, as we don't create symbols for array
 	 types, only for the typedef-to-array types).  If that's the case,
 	 strip the typedef layer.  */
-      if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
+      if (type1->code () == TYPE_CODE_TYPEDEF)
 	type1 = ada_check_typedef (type1);
 
       return type1;
@@ -9096,19 +8679,19 @@ ada_check_typedef (struct type *type)
 
 static struct value *
 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
-                           struct value *val0)
+			   struct value *val0)
 {
   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
 
   if (type == type0 && val0 != NULL)
     return val0;
 
-  if (VALUE_LVAL (val0) != lval_memory)
+  if (val0->lval () != lval_memory)
     {
       /* Our value does not live in memory; it could be a convenience
 	 variable, for instance.  Create a not_lval value using val0's
 	 contents.  */
-      return value_from_contents (type, value_contents (val0));
+      return value_from_contents (type, val0->contents ().data ());
     }
 
   return value_from_contents_and_address (type, 0, address);
@@ -9122,90 +8705,123 @@ struct value *
 ada_to_fixed_value (struct value *val)
 {
   val = unwrap_value (val);
-  val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
+  val = ada_to_fixed_value_create (val->type (), val->address (), val);
   return val;
 }
 
 
 /* Attributes */
 
-/* Table mapping attribute numbers to names.
-   NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
-
-static const char *attribute_names[] = {
-  "<?>",
-
-  "first",
-  "last",
-  "length",
-  "image",
-  "max",
-  "min",
-  "modulus",
-  "pos",
-  "size",
-  "tag",
-  "val",
-  0
-};
-
-static const char *
-ada_attribute_name (enum exp_opcode n)
-{
-  if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
-    return attribute_names[n - OP_ATR_FIRST + 1];
-  else
-    return attribute_names[0];
-}
-
 /* Evaluate the 'POS attribute applied to ARG.  */
 
 static LONGEST
 pos_atr (struct value *arg)
 {
   struct value *val = coerce_ref (arg);
-  struct type *type = value_type (val);
-  LONGEST result;
+  struct type *type = val->type ();
 
   if (!discrete_type_p (type))
     error (_("'POS only defined on discrete types"));
 
-  if (!discrete_position (type, value_as_long (val), &result))
+  std::optional<LONGEST> result = discrete_position (type, value_as_long (val));
+  if (!result.has_value ())
     error (_("enumeration value is invalid: can't find 'POS"));
 
-  return result;
+  return *result;
 }
 
-static struct value *
-value_pos_atr (struct type *type, struct value *arg)
-{
+struct value *
+ada_pos_atr (struct type *expect_type,
+	     struct expression *exp,
+	     enum noside noside, enum exp_opcode op,
+	     struct value *arg)
+{
+  struct type *type = builtin_type (exp->gdbarch)->builtin_int;
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value::zero (type, not_lval);
   return value_from_longest (type, pos_atr (arg));
 }
 
 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
 
 static struct value *
-value_val_atr (struct type *type, struct value *arg)
+val_atr (struct type *type, LONGEST val)
 {
+  gdb_assert (discrete_type_p (type));
+  if (type->code () == TYPE_CODE_RANGE)
+    type = type->target_type ();
+  if (type->code () == TYPE_CODE_ENUM)
+    {
+      if (val < 0 || val >= type->num_fields ())
+	error (_("argument to 'VAL out of range"));
+      val = type->field (val).loc_enumval ();
+    }
+  return value_from_longest (type, val);
+}
+
+struct value *
+ada_val_atr (struct expression *exp, enum noside noside, struct type *type,
+	     struct value *arg)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value::zero (type, not_lval);
+
   if (!discrete_type_p (type))
     error (_("'VAL only defined on discrete types"));
-  if (!integer_type_p (value_type (arg)))
+  if (!integer_type_p (arg->type ()))
     error (_("'VAL requires integral argument"));
 
-  if (TYPE_CODE (type) == TYPE_CODE_ENUM)
-    {
-      long pos = value_as_long (arg);
+  return val_atr (type, value_as_long (arg));
+}
+
+/* Implementation of the enum_rep attribute.  */
+struct value *
+ada_atr_enum_rep (struct expression *exp, enum noside noside, struct type *type,
+		  struct value *arg)
+{
+  struct type *inttype = builtin_type (exp->gdbarch)->builtin_int;
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value::zero (inttype, not_lval);
 
-      if (pos < 0 || pos >= TYPE_NFIELDS (type))
-        error (_("argument to 'VAL out of range"));
-      return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
+  if (type->code () == TYPE_CODE_RANGE)
+    type = type->target_type ();
+  if (type->code () != TYPE_CODE_ENUM)
+    error (_("'Enum_Rep only defined on enum types"));
+  if (!types_equal (type, arg->type ()))
+    error (_("'Enum_Rep requires argument to have same type as enum"));
+
+  return value_cast (inttype, arg);
+}
+
+/* Implementation of the enum_val attribute.  */
+struct value *
+ada_atr_enum_val (struct expression *exp, enum noside noside, struct type *type,
+		  struct value *arg)
+{
+  struct type *original_type = type;
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value::zero (original_type, not_lval);
+
+  if (type->code () == TYPE_CODE_RANGE)
+    type = type->target_type ();
+  if (type->code () != TYPE_CODE_ENUM)
+    error (_("'Enum_Val only defined on enum types"));
+  if (!integer_type_p (arg->type ()))
+    error (_("'Enum_Val requires integral argument"));
+
+  LONGEST value = value_as_long (arg);
+  for (int i = 0; i < type->num_fields (); ++i)
+    {
+      if (type->field (i).loc_enumval () == value)
+	return value_from_longest (original_type, value);
     }
-  else
-    return value_from_longest (type, value_as_long (arg));
+
+  error (_("value %s not found in enum"), plongest (value));
 }
+
 
 
-                                /* Evaluation */
+				/* Evaluation */
 
 /* True if TYPE appears to be an Ada character type.
    [At the moment, this is true only for Character and Wide_Character;
@@ -9218,19 +8834,19 @@ ada_is_character_type (struct type *type
 
   /* If the type code says it's a character, then assume it really is,
      and don't check any further.  */
-  if (TYPE_CODE (type) == TYPE_CODE_CHAR)
+  if (type->code () == TYPE_CODE_CHAR)
     return true;
   
   /* Otherwise, assume it's a character type iff it is a discrete type
      with a known character type name.  */
   name = ada_type_name (type);
   return (name != NULL
-          && (TYPE_CODE (type) == TYPE_CODE_INT
-              || TYPE_CODE (type) == TYPE_CODE_RANGE)
-          && (strcmp (name, "character") == 0
-              || strcmp (name, "wide_character") == 0
-              || strcmp (name, "wide_wide_character") == 0
-              || strcmp (name, "unsigned char") == 0));
+	  && (type->code () == TYPE_CODE_INT
+	      || type->code () == TYPE_CODE_RANGE)
+	  && (strcmp (name, "character") == 0
+	      || strcmp (name, "wide_character") == 0
+	      || strcmp (name, "wide_wide_character") == 0
+	      || strcmp (name, "unsigned char") == 0));
 }
 
 /* True if TYPE appears to be an Ada string type.  */
@@ -9240,9 +8856,9 @@ ada_is_string_type (struct type *type)
 {
   type = ada_check_typedef (type);
   if (type != NULL
-      && TYPE_CODE (type) != TYPE_CODE_PTR
+      && type->code () != TYPE_CODE_PTR
       && (ada_is_simple_array_type (type)
-          || ada_is_array_descriptor_type (type))
+	  || ada_is_array_descriptor_type (type))
       && ada_array_arity (type) == 1)
     {
       struct type *elttype = ada_array_element_type (type, 1);
@@ -9276,9 +8892,9 @@ ada_is_aligner_type (struct type *type)
   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
     return 0;
 
-  return (TYPE_CODE (type) == TYPE_CODE_STRUCT
-          && TYPE_NFIELDS (type) == 1
-          && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
+  return (type->code () == TYPE_CODE_STRUCT
+	  && type->num_fields () == 1
+	  && strcmp (type->field (0).name (), "F") == 0);
 }
 
 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
@@ -9290,7 +8906,7 @@ ada_get_base_type (struct type *raw_type
   struct type *real_type_namer;
   struct type *raw_real_type;
 
-  if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
+  if (raw_type == NULL || raw_type->code () != TYPE_CODE_STRUCT)
     return raw_type;
 
   if (ada_is_aligner_type (raw_type))
@@ -9310,16 +8926,16 @@ ada_get_base_type (struct type *raw_type
 
   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
   if (real_type_namer == NULL
-      || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
-      || TYPE_NFIELDS (real_type_namer) != 1)
+      || real_type_namer->code () != TYPE_CODE_STRUCT
+      || real_type_namer->num_fields () != 1)
     return raw_type;
 
-  if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
+  if (real_type_namer->field (0).type ()->code () != TYPE_CODE_REF)
     {
       /* This is an older encoding form where the base type needs to be
 	 looked up by name.  We prefer the newer encoding because it is
 	 more efficient.  */
-      raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
+      raw_real_type = ada_find_any_type (real_type_namer->field (0).name ());
       if (raw_real_type == NULL)
 	return raw_type;
       else
@@ -9327,7 +8943,7 @@ ada_get_base_type (struct type *raw_type
     }
 
   /* The field in our XVS type is a reference to the base type.  */
-  return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
+  return real_type_namer->field (0).type ()->target_type ();
 }
 
 /* The type of value designated by TYPE, with all aligners removed.  */
@@ -9336,7 +8952,7 @@ struct type *
 ada_aligned_type (struct type *type)
 {
   if (ada_is_aligner_type (type))
-    return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
+    return ada_aligned_type (type->field (0).type ());
   else
     return ada_get_base_type (type);
 }
@@ -9349,10 +8965,9 @@ const gdb_byte *
 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
 {
   if (ada_is_aligner_type (type))
-    return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
-                                   valaddr +
-                                   TYPE_FIELD_BITPOS (type,
-                                                      0) / TARGET_CHAR_BIT);
+    return ada_aligned_value_addr
+      (type->field (0).type (),
+       valaddr + type->field (0).loc_bitpos () / TARGET_CHAR_BIT);
   else
     return valaddr;
 }
@@ -9364,8 +8979,7 @@ ada_aligned_value_addr (struct type *typ
 const char *
 ada_enum_name (const char *name)
 {
-  static char *result;
-  static size_t result_len = 0;
+  static std::string storage;
   const char *tmp;
 
   /* First, unqualify the enumeration name:
@@ -9383,12 +8997,12 @@ ada_enum_name (const char *name)
   else
     {
       while ((tmp = strstr (name, "__")) != NULL)
-        {
-          if (isdigit (tmp[2]))
-            break;
-          else
-            name = tmp + 2;
-        }
+	{
+	  if (isdigit (tmp[2]))
+	    break;
+	  else
+	    name = tmp + 2;
+	}
     }
 
   if (name[0] == 'Q')
@@ -9396,30 +9010,36 @@ ada_enum_name (const char *name)
       int v;
 
       if (name[1] == 'U' || name[1] == 'W')
-        {
-          if (sscanf (name + 2, "%x", &v) != 1)
-            return name;
-        }
+	{
+	  int offset = 2;
+	  if (name[1] == 'W' && name[2] == 'W')
+	    {
+	      /* Also handle the QWW case.  */
+	      ++offset;
+	    }
+	  if (sscanf (name + offset, "%x", &v) != 1)
+	    return name;
+	}
       else if (((name[1] >= '0' && name[1] <= '9')
 		|| (name[1] >= 'a' && name[1] <= 'z'))
 	       && name[2] == '\0')
 	{
-	  GROW_VECT (result, result_len, 4);
-	  xsnprintf (result, result_len, "'%c'", name[1]);
-	  return result;
+	  storage = string_printf ("'%c'", name[1]);
+	  return storage.c_str ();
 	}
       else
-        return name;
+	return name;
 
-      GROW_VECT (result, result_len, 16);
       if (isascii (v) && isprint (v))
-        xsnprintf (result, result_len, "'%c'", v);
+	storage = string_printf ("'%c'", v);
       else if (name[1] == 'U')
-        xsnprintf (result, result_len, "[\"%02x\"]", v);
+	storage = string_printf ("'[\"%02x\"]'", v);
+      else if (name[2] != 'W')
+	storage = string_printf ("'[\"%04x\"]'", v);
       else
-        xsnprintf (result, result_len, "[\"%04x\"]", v);
+	storage = string_printf ("'[\"%06x\"]'", v);
 
-      return result;
+      return storage.c_str ();
     }
   else
     {
@@ -9427,25 +9047,30 @@ ada_enum_name (const char *name)
       if (tmp == NULL)
 	tmp = strstr (name, "$");
       if (tmp != NULL)
-        {
-          GROW_VECT (result, result_len, tmp - name + 1);
-          strncpy (result, name, tmp - name);
-          result[tmp - name] = '\0';
-          return result;
-        }
+	{
+	  storage = std::string (name, tmp - name);
+	  return storage.c_str ();
+	}
 
       return name;
     }
 }
 
-/* Evaluate the subexpression of EXP starting at *POS as for
-   evaluate_type, updating *POS to point just past the evaluated
-   expression.  */
+/* If TYPE is a dynamic type, return the base type.  Otherwise, if
+   there is no parallel type, return nullptr.  */
 
-static struct value *
-evaluate_subexp_type (struct expression *exp, int *pos)
+static struct type *
+find_base_type (struct type *type)
 {
-  return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
+  struct type *raw_real_type
+    = ada_check_typedef (ada_get_base_type (type));
+
+  /* No parallel XVS or XVE type.  */
+  if (type == raw_real_type
+      && ada_find_parallel_type (type, "___XVE") == nullptr)
+    return nullptr;
+
+  return raw_real_type;
 }
 
 /* If VAL is wrapped in an aligner or subtype wrapper, return the
@@ -9454,63 +9079,32 @@ evaluate_subexp_type (struct expression
 static struct value *
 unwrap_value (struct value *val)
 {
-  struct type *type = ada_check_typedef (value_type (val));
+  struct type *type = ada_check_typedef (val->type ());
 
   if (ada_is_aligner_type (type))
     {
       struct value *v = ada_value_struct_elt (val, "F", 0);
-      struct type *val_type = ada_check_typedef (value_type (v));
+      struct type *val_type = ada_check_typedef (v->type ());
 
       if (ada_type_name (val_type) == NULL)
-        TYPE_NAME (val_type) = ada_type_name (type);
+	val_type->set_name (ada_type_name (type));
 
       return unwrap_value (v);
     }
   else
     {
-      struct type *raw_real_type =
-        ada_check_typedef (ada_get_base_type (type));
-
-      /* If there is no parallel XVS or XVE type, then the value is
-	 already unwrapped.  Return it without further modification.  */
-      if ((type == raw_real_type)
-	  && ada_find_parallel_type (type, "___XVE") == NULL)
+      struct type *raw_real_type = find_base_type (type);
+      if (raw_real_type == nullptr)
 	return val;
 
       return
-        coerce_unspec_val_to_type
-        (val, ada_to_fixed_type (raw_real_type, 0,
-                                 value_address (val),
-                                 NULL, 1));
+	coerce_unspec_val_to_type
+	(val, ada_to_fixed_type (raw_real_type, 0,
+				 val->address (),
+				 NULL, 1));
     }
 }
 
-static struct value *
-cast_from_fixed (struct type *type, struct value *arg)
-{
-  struct value *scale = ada_scaling_factor (value_type (arg));
-  arg = value_cast (value_type (scale), arg);
-
-  arg = value_binop (arg, scale, BINOP_MUL);
-  return value_cast (type, arg);
-}
-
-static struct value *
-cast_to_fixed (struct type *type, struct value *arg)
-{
-  if (type == value_type (arg))
-    return arg;
-
-  struct value *scale = ada_scaling_factor (type);
-  if (ada_is_fixed_point_type (value_type (arg)))
-    arg = cast_from_fixed (value_type (scale), arg);
-  else
-    arg = value_cast (value_type (scale), arg);
-
-  arg = value_binop (arg, scale, BINOP_DIV);
-  return value_cast (type, arg);
-}
-
 /* Given two array types T1 and T2, return nonzero iff both arrays
    contain the same number of elements.  */
 
@@ -9545,33 +9139,33 @@ ada_same_array_size_p (struct type *t1,
 static struct value *
 ada_promote_array_of_integrals (struct type *type, struct value *val)
 {
-  struct type *elt_type = TYPE_TARGET_TYPE (type);
+  struct type *elt_type = type->target_type ();
   LONGEST lo, hi;
-  struct value *res;
   LONGEST i;
 
   /* Verify that both val and type are arrays of scalars, and
      that the size of val's elements is smaller than the size
      of type's element.  */
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
-  gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
-  gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
-  gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
-  gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
-	      > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
+  gdb_assert (type->code () == TYPE_CODE_ARRAY);
+  gdb_assert (is_integral_type (type->target_type ()));
+  gdb_assert (val->type ()->code () == TYPE_CODE_ARRAY);
+  gdb_assert (is_integral_type (val->type ()->target_type ()));
+  gdb_assert (type->target_type ()->length ()
+	      > val->type ()->target_type ()->length ());
 
   if (!get_array_bounds (type, &lo, &hi))
     error (_("unable to determine array bounds"));
 
-  res = allocate_value (type);
+  value *res = value::allocate (type);
+  gdb::array_view<gdb_byte> res_contents = res->contents_writeable ();
 
   /* Promote each array element.  */
   for (i = 0; i < hi - lo + 1; i++)
     {
       struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
+      int elt_len = elt_type->length ();
 
-      memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
-	      value_contents_all (elt), TYPE_LENGTH (elt_type));
+      copy (elt->contents_all (), res_contents.slice (elt_len * i, elt_len));
     }
 
   return res;
@@ -9583,7 +9177,7 @@ ada_promote_array_of_integrals (struct t
 static struct value *
 coerce_for_assign (struct type *type, struct value *val)
 {
-  struct type *type2 = value_type (val);
+  struct type *type2 = val->type ();
 
   if (type == type2)
     return val;
@@ -9591,33 +9185,31 @@ coerce_for_assign (struct type *type, st
   type2 = ada_check_typedef (type2);
   type = ada_check_typedef (type);
 
-  if (TYPE_CODE (type2) == TYPE_CODE_PTR
-      && TYPE_CODE (type) == TYPE_CODE_ARRAY)
+  if (type2->code () == TYPE_CODE_PTR
+      && type->code () == TYPE_CODE_ARRAY)
     {
       val = ada_value_ind (val);
-      type2 = value_type (val);
+      type2 = val->type ();
     }
 
-  if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
-      && TYPE_CODE (type) == TYPE_CODE_ARRAY)
+  if (type2->code () == TYPE_CODE_ARRAY
+      && type->code () == TYPE_CODE_ARRAY)
     {
       if (!ada_same_array_size_p (type, type2))
 	error (_("cannot assign arrays of different length"));
 
-      if (is_integral_type (TYPE_TARGET_TYPE (type))
-	  && is_integral_type (TYPE_TARGET_TYPE (type2))
-	  && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
-	       < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
+      if (is_integral_type (type->target_type ())
+	  && is_integral_type (type2->target_type ())
+	  && type2->target_type ()->length () < type->target_type ()->length ())
 	{
 	  /* Allow implicit promotion of the array elements to
 	     a wider type.  */
 	  return ada_promote_array_of_integrals (type, val);
 	}
 
-      if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
-          != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
-        error (_("Incompatible types in assignment"));
-      deprecated_set_value_type (val, type);
+      if (type2->target_type ()->length () != type->target_type ()->length ())
+	error (_("Incompatible types in assignment"));
+      val->deprecated_set_type (type);
     }
   return val;
 }
@@ -9625,17 +9217,15 @@ coerce_for_assign (struct type *type, st
 static struct value *
 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
 {
-  struct value *val;
   struct type *type1, *type2;
-  LONGEST v, v1, v2;
 
   arg1 = coerce_ref (arg1);
   arg2 = coerce_ref (arg2);
-  type1 = get_base_type (ada_check_typedef (value_type (arg1)));
-  type2 = get_base_type (ada_check_typedef (value_type (arg2)));
+  type1 = get_base_type (ada_check_typedef (arg1->type ()));
+  type2 = get_base_type (ada_check_typedef (arg2->type ()));
 
-  if (TYPE_CODE (type1) != TYPE_CODE_INT
-      || TYPE_CODE (type2) != TYPE_CODE_INT)
+  if (type1->code () != TYPE_CODE_INT
+      || type2->code () != TYPE_CODE_INT)
     return value_binop (arg1, arg2, op);
 
   switch (op)
@@ -9648,113 +9238,104 @@ ada_value_binop (struct value *arg1, str
       return value_binop (arg1, arg2, op);
     }
 
-  v2 = value_as_long (arg2);
-  if (v2 == 0)
-    error (_("second operand of %s must not be zero."), op_string (op));
+  gdb_mpz v2 = value_as_mpz (arg2);
+  if (v2.sgn () == 0)
+    {
+      const char *name;
+      if (op == BINOP_MOD)
+	name = "mod";
+      else if (op == BINOP_DIV)
+	name = "/";
+      else
+	{
+	  gdb_assert (op == BINOP_REM);
+	  name = "rem";
+	}
 
-  if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
+      error (_("second operand of %s must not be zero."), name);
+    }
+
+  if (type1->is_unsigned () || op == BINOP_MOD)
     return value_binop (arg1, arg2, op);
 
-  v1 = value_as_long (arg1);
+  gdb_mpz v1 = value_as_mpz (arg1);
+  gdb_mpz v;
   switch (op)
     {
     case BINOP_DIV:
       v = v1 / v2;
-      if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
-        v += v > 0 ? -1 : 1;
       break;
     case BINOP_REM:
       v = v1 % v2;
       if (v * v1 < 0)
-        v -= v2;
+	v -= v2;
       break;
     default:
       /* Should not reach this point.  */
-      v = 0;
+      gdb_assert_not_reached ("invalid operator");
     }
 
-  val = allocate_value (type1);
-  store_unsigned_integer (value_contents_raw (val),
-                          TYPE_LENGTH (value_type (val)),
-			  type_byte_order (type1), v);
-  return val;
+  return value_from_mpz (type1, v);
 }
 
 static int
 ada_value_equal (struct value *arg1, struct value *arg2)
 {
-  if (ada_is_direct_array_type (value_type (arg1))
-      || ada_is_direct_array_type (value_type (arg2)))
+  if (ada_is_direct_array_type (arg1->type ())
+      || ada_is_direct_array_type (arg2->type ()))
     {
       struct type *arg1_type, *arg2_type;
 
       /* Automatically dereference any array reference before
-         we attempt to perform the comparison.  */
+	 we attempt to perform the comparison.  */
       arg1 = ada_coerce_ref (arg1);
       arg2 = ada_coerce_ref (arg2);
 
       arg1 = ada_coerce_to_simple_array (arg1);
       arg2 = ada_coerce_to_simple_array (arg2);
 
-      arg1_type = ada_check_typedef (value_type (arg1));
-      arg2_type = ada_check_typedef (value_type (arg2));
+      arg1_type = ada_check_typedef (arg1->type ());
+      arg2_type = ada_check_typedef (arg2->type ());
 
-      if (TYPE_CODE (arg1_type) != TYPE_CODE_ARRAY
-          || TYPE_CODE (arg2_type) != TYPE_CODE_ARRAY)
-        error (_("Attempt to compare array with non-array"));
+      if (arg1_type->code () != TYPE_CODE_ARRAY
+	  || arg2_type->code () != TYPE_CODE_ARRAY)
+	error (_("Attempt to compare array with non-array"));
       /* FIXME: The following works only for types whose
-         representations use all bits (no padding or undefined bits)
-         and do not have user-defined equality.  */
-      return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
-	      && memcmp (value_contents (arg1), value_contents (arg2),
-			 TYPE_LENGTH (arg1_type)) == 0);
+	 representations use all bits (no padding or undefined bits)
+	 and do not have user-defined equality.  */
+      return (arg1_type->length () == arg2_type->length ()
+	      && memcmp (arg1->contents ().data (),
+			 arg2->contents ().data (),
+			 arg1_type->length ()) == 0);
     }
   return value_equal (arg1, arg2);
 }
 
-/* Total number of component associations in the aggregate starting at
-   index PC in EXP.  Assumes that index PC is the start of an
-   OP_AGGREGATE.  */
-
-static int
-num_component_specs (struct expression *exp, int pc)
+namespace expr
 {
-  int n, m, i;
 
-  m = exp->elts[pc + 1].longconst;
-  pc += 3;
-  n = 0;
-  for (i = 0; i < m; i += 1)
-    {
-      switch (exp->elts[pc].opcode) 
-	{
-	default:
-	  n += 1;
-	  break;
-	case OP_CHOICES:
-	  n += exp->elts[pc + 1].longconst;
-	  break;
-	}
-      ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
-    }
-  return n;
+bool
+check_objfile (const std::unique_ptr<ada_component> &comp,
+	       struct objfile *objfile)
+{
+  return comp->uses_objfile (objfile);
 }
 
-/* Assign the result of evaluating EXP starting at *POS to the INDEXth 
-   component of LHS (a simple array or a record), updating *POS past
-   the expression, assuming that LHS is contained in CONTAINER.  Does
-   not modify the inferior's memory, nor does it modify LHS (unless
-   LHS == CONTAINER).  */
+/* Assign the result of evaluating ARG starting at *POS to the INDEXth
+   component of LHS (a simple array or a record).  Does not modify the
+   inferior's memory, nor does it modify LHS (unless LHS ==
+   CONTAINER).  */
 
 static void
 assign_component (struct value *container, struct value *lhs, LONGEST index,
-		  struct expression *exp, int *pos)
+		  struct expression *exp, operation_up &arg)
 {
-  struct value *mark = value_mark ();
+  scoped_value_mark mark;
+
   struct value *elt;
-  struct type *lhs_type = check_typedef (value_type (lhs));
+  struct type *lhs_type = check_typedef (lhs->type ());
 
-  if (TYPE_CODE (lhs_type) == TYPE_CODE_ARRAY)
+  if (lhs_type->code () == TYPE_CODE_ARRAY)
     {
       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
       struct value *index_val = value_from_longest (index_type, index);
@@ -9763,65 +9344,73 @@ assign_component (struct value *containe
     }
   else
     {
-      elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
+      elt = ada_index_struct_field (index, lhs, 0, lhs->type ());
       elt = ada_to_fixed_value (elt);
     }
 
-  if (exp->elts[*pos].opcode == OP_AGGREGATE)
-    assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
-  else
-    value_assign_to_component (container, elt, 
-			       ada_evaluate_subexp (NULL, exp, pos, 
-						    EVAL_NORMAL));
-
-  value_free_to_mark (mark);
-}
-
-/* Assuming that LHS represents an lvalue having a record or array
-   type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
-   of that aggregate's value to LHS, advancing *POS past the
-   aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
-   lvalue containing LHS (possibly LHS itself).  Does not modify
-   the inferior's memory, nor does it modify the contents of 
-   LHS (unless == CONTAINER).  Returns the modified CONTAINER.  */
+  ada_aggregate_operation *ag_op
+    = dynamic_cast<ada_aggregate_operation *> (arg.get ());
+  if (ag_op != nullptr)
+    ag_op->assign_aggregate (container, elt, exp);
+  else
+    value_assign_to_component (container, elt,
+			       arg->evaluate (nullptr, exp,
+					      EVAL_NORMAL));
+}
 
-static struct value *
-assign_aggregate (struct value *container, 
-		  struct value *lhs, struct expression *exp, 
-		  int *pos, enum noside noside)
+bool
+ada_aggregate_component::uses_objfile (struct objfile *objfile)
+{
+  for (const auto &item : m_components)
+    if (item->uses_objfile (objfile))
+      return true;
+  return false;
+}
+
+void
+ada_aggregate_component::dump (ui_file *stream, int depth)
+{
+  gdb_printf (stream, _("%*sAggregate\n"), depth, "");
+  for (const auto &item : m_components)
+    item->dump (stream, depth + 1);
+}
+
+void
+ada_aggregate_component::assign (struct value *container,
+				 struct value *lhs, struct expression *exp,
+				 std::vector<LONGEST> &indices,
+				 LONGEST low, LONGEST high)
+{
+  for (auto &item : m_components)
+    item->assign (container, lhs, exp, indices, low, high);
+}
+
+/* See ada-exp.h.  */
+
+value *
+ada_aggregate_operation::assign_aggregate (struct value *container,
+					   struct value *lhs,
+					   struct expression *exp)
 {
   struct type *lhs_type;
-  int n = exp->elts[*pos+1].longconst;
   LONGEST low_index, high_index;
-  int num_specs;
-  LONGEST *indices;
-  int max_indices, num_indices;
-  int i;
-
-  *pos += 3;
-  if (noside != EVAL_NORMAL)
-    {
-      for (i = 0; i < n; i += 1)
-	ada_evaluate_subexp (NULL, exp, pos, noside);
-      return container;
-    }
 
   container = ada_coerce_ref (container);
-  if (ada_is_direct_array_type (value_type (container)))
+  if (ada_is_direct_array_type (container->type ()))
     container = ada_coerce_to_simple_array (container);
   lhs = ada_coerce_ref (lhs);
-  if (!deprecated_value_modifiable (lhs))
+  if (!lhs->deprecated_modifiable ())
     error (_("Left operand of assignment is not a modifiable lvalue."));
 
-  lhs_type = check_typedef (value_type (lhs));
+  lhs_type = check_typedef (lhs->type ());
   if (ada_is_direct_array_type (lhs_type))
     {
       lhs = ada_coerce_to_simple_array (lhs);
-      lhs_type = check_typedef (value_type (lhs));
-      low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
-      high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
+      lhs_type = check_typedef (lhs->type ());
+      low_index = lhs_type->bounds ()->low.const_val ();
+      high_index = lhs_type->bounds ()->high.const_val ();
     }
-  else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
+  else if (lhs_type->code () == TYPE_CODE_STRUCT)
     {
       low_index = 0;
       high_index = num_visible_fields (lhs_type) - 1;
@@ -9829,194 +9418,267 @@ assign_aggregate (struct value *containe
   else
     error (_("Left-hand side must be array or record."));
 
-  num_specs = num_component_specs (exp, *pos - 3);
-  max_indices = 4 * num_specs + 4;
-  indices = XALLOCAVEC (LONGEST, max_indices);
+  std::vector<LONGEST> indices (4);
   indices[0] = indices[1] = low_index - 1;
   indices[2] = indices[3] = high_index + 1;
-  num_indices = 4;
 
-  for (i = 0; i < n; i += 1)
-    {
-      switch (exp->elts[*pos].opcode)
-	{
-	  case OP_CHOICES:
-	    aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
-					   &num_indices, max_indices,
-					   low_index, high_index);
-	    break;
-	  case OP_POSITIONAL:
-	    aggregate_assign_positional (container, lhs, exp, pos, indices,
-					 &num_indices, max_indices,
-					 low_index, high_index);
-	    break;
-	  case OP_OTHERS:
-	    if (i != n-1)
-	      error (_("Misplaced 'others' clause"));
-	    aggregate_assign_others (container, lhs, exp, pos, indices, 
-				     num_indices, low_index, high_index);
-	    break;
-	  default:
-	    error (_("Internal error: bad aggregate clause"));
-	}
-    }
+  std::get<0> (m_storage)->assign (container, lhs, exp, indices,
+				   low_index, high_index);
 
   return container;
 }
-	      
+
+bool
+ada_positional_component::uses_objfile (struct objfile *objfile)
+{
+  return m_op->uses_objfile (objfile);
+}
+
+void
+ada_positional_component::dump (ui_file *stream, int depth)
+{
+  gdb_printf (stream, _("%*sPositional, index = %d\n"),
+	      depth, "", m_index);
+  m_op->dump (stream, depth + 1);
+}
+
 /* Assign into the component of LHS indexed by the OP_POSITIONAL
-   construct at *POS, updating *POS past the construct, given that
-   the positions are relative to lower bound LOW, where HIGH is the 
-   upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
-   updating *NUM_INDICES as needed.  CONTAINER is as for
-   assign_aggregate.  */
-static void
-aggregate_assign_positional (struct value *container,
-			     struct value *lhs, struct expression *exp,
-			     int *pos, LONGEST *indices, int *num_indices,
-			     int max_indices, LONGEST low, LONGEST high) 
+   construct, given that the positions are relative to lower bound
+   LOW, where HIGH is the upper bound.  Record the position in
+   INDICES.  CONTAINER is as for assign_aggregate.  */
+void
+ada_positional_component::assign (struct value *container,
+				  struct value *lhs, struct expression *exp,
+				  std::vector<LONGEST> &indices,
+				  LONGEST low, LONGEST high)
 {
-  LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
-  
+  LONGEST ind = m_index + low;
+
   if (ind - 1 == high)
     warning (_("Extra components in aggregate ignored."));
   if (ind <= high)
     {
-      add_component_interval (ind, ind, indices, num_indices, max_indices);
-      *pos += 3;
-      assign_component (container, lhs, ind, exp, pos);
+      add_component_interval (ind, ind, indices);
+      assign_component (container, lhs, ind, exp, m_op);
     }
-  else
-    ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
 }
 
-/* Assign into the components of LHS indexed by the OP_CHOICES
-   construct at *POS, updating *POS past the construct, given that
-   the allowable indices are LOW..HIGH.  Record the indices assigned
-   to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
-   needed.  CONTAINER is as for assign_aggregate.  */
-static void
-aggregate_assign_from_choices (struct value *container,
-			       struct value *lhs, struct expression *exp,
-			       int *pos, LONGEST *indices, int *num_indices,
-			       int max_indices, LONGEST low, LONGEST high) 
+bool
+ada_discrete_range_association::uses_objfile (struct objfile *objfile)
 {
-  int j;
-  int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
-  int choice_pos, expr_pc;
-  int is_array = ada_is_direct_array_type (value_type (lhs));
-
-  choice_pos = *pos += 3;
-
-  for (j = 0; j < n_choices; j += 1)
-    ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
-  expr_pc = *pos;
-  ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
-  
-  for (j = 0; j < n_choices; j += 1)
+  return m_low->uses_objfile (objfile) || m_high->uses_objfile (objfile);
+}
+
+void
+ada_discrete_range_association::dump (ui_file *stream, int depth)
+{
+  gdb_printf (stream, _("%*sDiscrete range:\n"), depth, "");
+  m_low->dump (stream, depth + 1);
+  m_high->dump (stream, depth + 1);
+}
+
+void
+ada_discrete_range_association::assign (struct value *container,
+					struct value *lhs,
+					struct expression *exp,
+					std::vector<LONGEST> &indices,
+					LONGEST low, LONGEST high,
+					operation_up &op)
+{
+  LONGEST lower = value_as_long (m_low->evaluate (nullptr, exp, EVAL_NORMAL));
+  LONGEST upper = value_as_long (m_high->evaluate (nullptr, exp, EVAL_NORMAL));
+
+  if (lower <= upper && (lower < low || upper > high))
+    error (_("Index in component association out of bounds."));
+
+  add_component_interval (lower, upper, indices);
+  while (lower <= upper)
     {
-      LONGEST lower, upper;
-      enum exp_opcode op = exp->elts[choice_pos].opcode;
+      assign_component (container, lhs, lower, exp, op);
+      lower += 1;
+    }
+}
 
-      if (op == OP_DISCRETE_RANGE)
-	{
-	  choice_pos += 1;
-	  lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
-						      EVAL_NORMAL));
-	  upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
-						      EVAL_NORMAL));
-	}
-      else if (is_array)
-	{
-	  lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
-						      EVAL_NORMAL));
-	  upper = lower;
-	}
+bool
+ada_name_association::uses_objfile (struct objfile *objfile)
+{
+  return m_val->uses_objfile (objfile);
+}
+
+void
+ada_name_association::dump (ui_file *stream, int depth)
+{
+  gdb_printf (stream, _("%*sName:\n"), depth, "");
+  m_val->dump (stream, depth + 1);
+}
+
+void
+ada_name_association::assign (struct value *container,
+			      struct value *lhs,
+			      struct expression *exp,
+			      std::vector<LONGEST> &indices,
+			      LONGEST low, LONGEST high,
+			      operation_up &op)
+{
+  int index;
+
+  if (ada_is_direct_array_type (lhs->type ()))
+    index = longest_to_int (value_as_long (m_val->evaluate (nullptr, exp,
+							    EVAL_NORMAL)));
+  else
+    {
+      ada_string_operation *strop
+	= dynamic_cast<ada_string_operation *> (m_val.get ());
+
+      const char *name;
+      if (strop != nullptr)
+	name = strop->get_name ();
       else
 	{
-	  int ind;
-	  const char *name;
+	  ada_var_value_operation *vvo
+	    = dynamic_cast<ada_var_value_operation *> (m_val.get ());
+	  if (vvo == nullptr)
+	    error (_("Invalid record component association."));
+	  name = vvo->get_symbol ()->natural_name ();
+	  /* In this scenario, the user wrote (name => expr), but
+	     write_name_assoc found some fully-qualified name and
+	     substituted it.  This happens because, at parse time, the
+	     meaning of the expression isn't known; but here we know
+	     that just the base name was supplied and it refers to the
+	     name of a field.  */
+	  name = ada_unqualified_name (name);
+	}
+
+      index = 0;
+      if (! find_struct_field (name, lhs->type (), 0,
+			       NULL, NULL, NULL, NULL, &index))
+	error (_("Unknown component name: %s."), name);
+    }
 
-	  switch (op)
-	    {
-	    case OP_NAME:
-	      name = &exp->elts[choice_pos + 2].string;
-	      break;
-	    case OP_VAR_VALUE:
-	      name = exp->elts[choice_pos + 2].symbol->natural_name ();
-	      break;
-	    default:
-	      error (_("Invalid record component association."));
-	    }
-	  ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
-	  ind = 0;
-	  if (! find_struct_field (name, value_type (lhs), 0, 
-				   NULL, NULL, NULL, NULL, &ind))
-	    error (_("Unknown component name: %s."), name);
-	  lower = upper = ind;
-	}
+  add_component_interval (index, index, indices);
+  assign_component (container, lhs, index, exp, op);
+}
 
-      if (lower <= upper && (lower < low || upper > high))
-	error (_("Index in component association out of bounds."));
+bool
+ada_choices_component::uses_objfile (struct objfile *objfile)
+{
+  if (m_op->uses_objfile (objfile))
+    return true;
+  for (const auto &item : m_assocs)
+    if (item->uses_objfile (objfile))
+      return true;
+  return false;
+}
 
-      add_component_interval (lower, upper, indices, num_indices,
-			      max_indices);
-      while (lower <= upper)
-	{
-	  int pos1;
+void
+ada_choices_component::dump (ui_file *stream, int depth)
+{
+  gdb_printf (stream, _("%*sChoices:\n"), depth, "");
+  m_op->dump (stream, depth + 1);
+  for (const auto &item : m_assocs)
+    item->dump (stream, depth + 1);
+}
 
-	  pos1 = expr_pc;
-	  assign_component (container, lhs, lower, exp, &pos1);
-	  lower += 1;
-	}
-    }
+/* Assign into the components of LHS indexed by the OP_CHOICES
+   construct at *POS, updating *POS past the construct, given that
+   the allowable indices are LOW..HIGH.  Record the indices assigned
+   to in INDICES.  CONTAINER is as for assign_aggregate.  */
+void
+ada_choices_component::assign (struct value *container,
+			       struct value *lhs, struct expression *exp,
+			       std::vector<LONGEST> &indices,
+			       LONGEST low, LONGEST high)
+{
+  for (auto &item : m_assocs)
+    item->assign (container, lhs, exp, indices, low, high, m_op);
+}
+
+bool
+ada_others_component::uses_objfile (struct objfile *objfile)
+{
+  return m_op->uses_objfile (objfile);
+}
+
+void
+ada_others_component::dump (ui_file *stream, int depth)
+{
+  gdb_printf (stream, _("%*sOthers:\n"), depth, "");
+  m_op->dump (stream, depth + 1);
 }
 
 /* Assign the value of the expression in the OP_OTHERS construct in
    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
    have not been previously assigned.  The index intervals already assigned
-   are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
-   OP_OTHERS clause.  CONTAINER is as for assign_aggregate.  */
-static void
-aggregate_assign_others (struct value *container,
-			 struct value *lhs, struct expression *exp,
-			 int *pos, LONGEST *indices, int num_indices,
-			 LONGEST low, LONGEST high) 
+   are in INDICES.  CONTAINER is as for assign_aggregate.  */
+void
+ada_others_component::assign (struct value *container,
+			      struct value *lhs, struct expression *exp,
+			      std::vector<LONGEST> &indices,
+			      LONGEST low, LONGEST high)
 {
-  int i;
-  int expr_pc = *pos + 1;
-  
-  for (i = 0; i < num_indices - 2; i += 2)
+  int num_indices = indices.size ();
+  for (int i = 0; i < num_indices - 2; i += 2)
     {
-      LONGEST ind;
+      for (LONGEST ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
+	assign_component (container, lhs, ind, exp, m_op);
+    }
+}
 
-      for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
-	{
-	  int localpos;
+struct value *
+ada_assign_operation::evaluate (struct type *expect_type,
+				struct expression *exp,
+				enum noside noside)
+{
+  value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+  scoped_restore save_lhs = make_scoped_restore (&m_current, arg1);
 
-	  localpos = expr_pc;
-	  assign_component (container, lhs, ind, exp, &localpos);
-	}
+  ada_aggregate_operation *ag_op
+    = dynamic_cast<ada_aggregate_operation *> (std::get<1> (m_storage).get ());
+  if (ag_op != nullptr)
+    {
+      if (noside != EVAL_NORMAL)
+	return arg1;
+
+      arg1 = ag_op->assign_aggregate (arg1, arg1, exp);
+      return ada_value_assign (arg1, arg1);
+    }
+  /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
+     except if the lhs of our assignment is a convenience variable.
+     In the case of assigning to a convenience variable, the lhs
+     should be exactly the result of the evaluation of the rhs.  */
+  struct type *type = arg1->type ();
+  if (arg1->lval () == lval_internalvar)
+    type = NULL;
+  value *arg2 = std::get<1> (m_storage)->evaluate (type, exp, noside);
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return arg1;
+  if (arg1->lval () == lval_internalvar)
+    {
+      /* Nothing.  */
     }
-  ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
+  else
+    arg2 = coerce_for_assign (arg1->type (), arg2);
+  return ada_value_assign (arg1, arg2);
 }
 
-/* Add the interval [LOW .. HIGH] to the sorted set of intervals 
-   [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
-   modifying *SIZE as needed.  It is an error if *SIZE exceeds
-   MAX_SIZE.  The resulting intervals do not overlap.  */
+} /* namespace expr */
+
+/* Add the interval [LOW .. HIGH] to the sorted set of intervals
+   [ INDICES[0] .. INDICES[1] ],...  The resulting intervals do not
+   overlap.  */
 static void
 add_component_interval (LONGEST low, LONGEST high, 
-			LONGEST* indices, int *size, int max_size)
+			std::vector<LONGEST> &indices)
 {
   int i, j;
 
-  for (i = 0; i < *size; i += 2) {
+  int size = indices.size ();
+  for (i = 0; i < size; i += 2) {
     if (high >= indices[i] && low <= indices[i + 1])
       {
 	int kh;
 
-	for (kh = i + 2; kh < *size; kh += 2)
+	for (kh = i + 2; kh < size; kh += 2)
 	  if (high < indices[kh])
 	    break;
 	if (low < indices[i])
@@ -10024,18 +9686,16 @@ add_component_interval (LONGEST low, LON
 	indices[i + 1] = indices[kh - 1];
 	if (high > indices[i + 1])
 	  indices[i + 1] = high;
-	memcpy (indices + i + 2, indices + kh, *size - kh);
-	*size -= kh - i - 2;
+	memcpy (indices.data () + i + 2, indices.data () + kh, size - kh);
+	indices.resize (kh - i - 2);
 	return;
       }
     else if (high < indices[i])
       break;
   }
 	
-  if (*size == max_size)
-    error (_("Internal error: miscounted aggregate components."));
-  *size += 2;
-  for (j = *size-1; j >= i+2; j -= 1)
+  indices.resize (indices.size () + 2);
+  for (j = indices.size () - 1; j >= i + 2; j -= 1)
     indices[j] = indices[j - 2];
   indices[i] = low;
   indices[i + 1] = high;
@@ -10047,15 +9707,9 @@ add_component_interval (LONGEST low, LON
 static struct value *
 ada_value_cast (struct type *type, struct value *arg2)
 {
-  if (type == ada_check_typedef (value_type (arg2)))
+  if (type == ada_check_typedef (arg2->type ()))
     return arg2;
 
-  if (ada_is_fixed_point_type (type))
-    return cast_to_fixed (type, arg2);
-
-  if (ada_is_fixed_point_type (value_type (arg2)))
-    return cast_from_fixed (type, arg2);
-
   return value_cast (type, arg2);
 }
 
@@ -10101,16 +9755,16 @@ ada_value_cast (struct type *type, struc
     known.  Consider for instance a variant record:
 
        type Rec (Empty : Boolean := True) is record
-          case Empty is
-             when True => null;
-             when False => Value : Integer;
-          end case;
+	  case Empty is
+	     when True => null;
+	     when False => Value : Integer;
+	  end case;
        end record;
        Yes : Rec := (Empty => False, Value => 1);
        No  : Rec := (empty => True);
 
     The size and contents of that record depends on the value of the
-    descriminant (Rec.Empty).  At this point, neither the debugging
+    discriminant (Rec.Empty).  At this point, neither the debugging
     information nor the associated type structure in GDB are able to
     express such dynamic types.  So what the debugger does is to create
     "fixed" versions of the type that applies to the specific object.
@@ -10121,15 +9775,15 @@ ada_value_cast (struct type *type, struc
     type would look like this:
 
        type Rec is record
-          Empty : Boolean;
-          Value : Integer;
+	  Empty : Boolean;
+	  Value : Integer;
        end record;
 
     On the other hand, if we printed the value of "No", its fixed type
     would become:
 
        type Rec is record
-          Empty : Boolean;
+	  Empty : Boolean;
        end record;
 
     Things become a little more complicated when trying to fix an entity
@@ -10169,11 +9823,11 @@ ada_value_cast (struct type *type, struc
     The simplest case is when we have an array of a constrained element
     type. For instance, consider the following type declarations:
 
-        type Bounded_String (Max_Size : Integer) is
-           Length : Integer;
-           Buffer : String (1 .. Max_Size);
-        end record;
-        type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
+	type Bounded_String (Max_Size : Integer) is
+	   Length : Integer;
+	   Buffer : String (1 .. Max_Size);
+	end record;
+	type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
 
     In this case, the compiler describes the array as an array of
     variable-size elements (identified by its XVS suffix) for which
@@ -10192,19 +9846,19 @@ ada_value_cast (struct type *type, struc
     But there are cases when this size is not statically known.
     For instance, assuming that "Five" is an integer variable:
 
-        type Dynamic is array (1 .. Five) of Integer;
-        type Wrapper (Has_Length : Boolean := False) is record
-           Data : Dynamic;
-           case Has_Length is
-              when True => Length : Integer;
-              when False => null;
-           end case;
-        end record;
-        type Wrapper_Array is array (1 .. 2) of Wrapper;
-
-        Hello : Wrapper_Array := (others => (Has_Length => True,
-                                             Data => (others => 17),
-                                             Length => 1));
+	type Dynamic is array (1 .. Five) of Integer;
+	type Wrapper (Has_Length : Boolean := False) is record
+	   Data : Dynamic;
+	   case Has_Length is
+	      when True => Length : Integer;
+	      when False => null;
+	   end case;
+	end record;
+	type Wrapper_Array is array (1 .. 2) of Wrapper;
+
+	Hello : Wrapper_Array := (others => (Has_Length => True,
+					     Data => (others => 17),
+					     Length => 1));
 
 
     The debugging info would describe variable Hello as being an
@@ -10224,11 +9878,11 @@ ada_value_cast (struct type *type, struc
 
     Consider for instance the example:
 
-        type Bounded_String (Max_Size : Natural) is record
-           Str : String (1 .. Max_Size);
-           Length : Natural;
-        end record;
-        My_String : Bounded_String (Max_Size => 10);
+	type Bounded_String (Max_Size : Natural) is record
+	   Str : String (1 .. Max_Size);
+	   Length : Natural;
+	end record;
+	My_String : Bounded_String (Max_Size => 10);
 
     In that case, the position of field "Length" depends on the size
     of field Str, which itself depends on the value of the Max_Size
@@ -10242,16 +9896,16 @@ ada_value_cast (struct type *type, struc
     (assuming type Rec above):
 
        type Container (Big : Boolean) is record
-          First : Rec;
-          After : Integer;
-          case Big is
-             when True => Another : Integer;
-             when False => null;
-          end case;
+	  First : Rec;
+	  After : Integer;
+	  case Big is
+	     when True => Another : Integer;
+	     when False => null;
+	  end case;
        end record;
        My_Container : Container := (Big => False,
-                                    First => (Empty => True),
-                                    After => 42);
+				    First => (Empty => True),
+				    After => 42);
 
     In that example, the compiler creates a PAD type for component First,
     whose size is constant, and then positions the component After just
@@ -10276,14 +9930,14 @@ ada_value_cast (struct type *type, struc
     we might end up with the wrong size for our component.  This can be
     observed with the following type declarations:
 
-        type Octal is new Integer range 0 .. 7;
-        type Octal_Array is array (Positive range <>) of Octal;
-        pragma Pack (Octal_Array);
-
-        type Octal_Buffer (Size : Positive) is record
-           Buffer : Octal_Array (1 .. Size);
-           Length : Integer;
-        end record;
+	type Octal is new Integer range 0 .. 7;
+	type Octal_Array is array (Positive range <>) of Octal;
+	pragma Pack (Octal_Array);
+
+	type Octal_Buffer (Size : Positive) is record
+	   Buffer : Octal_Array (1 .. Size);
+	   Length : Integer;
+	end record;
 
     In that case, Buffer is a PAD type whose size is unset and needs
     to be computed by fixing the unwrapped type.
@@ -10313,1220 +9967,1294 @@ ada_value_cast (struct type *type, struc
     entity.  Results in this case are unpredictable, as we usually read
     past the buffer containing the data =:-o.  */
 
-/* Evaluate a subexpression of EXP, at index *POS, and return a value
-   for that subexpression cast to TO_TYPE.  Advance *POS over the
-   subexpression.  */
+/* A helper function for TERNOP_IN_RANGE.  */
 
 static value *
-ada_evaluate_subexp_for_cast (expression *exp, int *pos,
-			      enum noside noside, struct type *to_type)
+eval_ternop_in_range (struct type *expect_type, struct expression *exp,
+		      enum noside noside,
+		      value *arg1, value *arg2, value *arg3)
+{
+  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
+  struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
+  return
+    value_from_longest (type,
+			(value_less (arg1, arg3)
+			 || value_equal (arg1, arg3))
+			&& (value_less (arg2, arg1)
+			    || value_equal (arg2, arg1)));
+}
+
+/* A helper function for UNOP_NEG.  */
+
+value *
+ada_unop_neg (struct type *expect_type,
+	      struct expression *exp,
+	      enum noside noside, enum exp_opcode op,
+	      struct value *arg1)
 {
-  int pc = *pos;
+  unop_promote (exp->language_defn, exp->gdbarch, &arg1);
+  return value_neg (arg1);
+}
+
+/* A helper function for UNOP_IN_RANGE.  */
 
-  if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
-      || exp->elts[pc].opcode == OP_VAR_VALUE)
+value *
+ada_unop_in_range (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside, enum exp_opcode op,
+		   struct value *arg1, struct type *type)
+{
+  struct value *arg2, *arg3;
+  switch (type->code ())
     {
-      (*pos) += 4;
-
-      value *val;
-      if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
-        {
-          if (noside == EVAL_AVOID_SIDE_EFFECTS)
-            return value_zero (to_type, not_lval);
-
-          val = evaluate_var_msym_value (noside,
-                                         exp->elts[pc + 1].objfile,
-                                         exp->elts[pc + 2].msymbol);
-        }
-      else
-        val = evaluate_var_value (noside,
-                                  exp->elts[pc + 1].block,
-                                  exp->elts[pc + 2].symbol);
-
-      if (noside == EVAL_SKIP)
-        return eval_skip_value (exp);
-
-      val = ada_value_cast (to_type, val);
-
-      /* Follow the Ada language semantics that do not allow taking
-	 an address of the result of a cast (view conversion in Ada).  */
-      if (VALUE_LVAL (val) == lval_memory)
-        {
-          if (value_lazy (val))
-            value_fetch_lazy (val);
-          VALUE_LVAL (val) = not_lval;
-        }
-      return val;
-    }
+    default:
+      lim_warning (_("Membership test incompletely implemented; "
+		     "always returns true"));
+      type = language_bool_type (exp->language_defn, exp->gdbarch);
+      return value_from_longest (type, 1);
 
-  value *val = evaluate_subexp (to_type, exp, pos, noside);
-  if (noside == EVAL_SKIP)
-    return eval_skip_value (exp);
-  return ada_value_cast (to_type, val);
+    case TYPE_CODE_RANGE:
+      arg2 = value_from_longest (type,
+				 type->bounds ()->low.const_val ());
+      arg3 = value_from_longest (type,
+				 type->bounds ()->high.const_val ());
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
+      type = language_bool_type (exp->language_defn, exp->gdbarch);
+      return
+	value_from_longest (type,
+			    (value_less (arg1, arg3)
+			     || value_equal (arg1, arg3))
+			    && (value_less (arg2, arg1)
+				|| value_equal (arg2, arg1)));
+    }
 }
 
-/* Implement the evaluate_exp routine in the exp_descriptor structure
-   for the Ada language.  */
+/* A helper function for OP_ATR_TAG.  */
 
-static struct value *
-ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
-                     int *pos, enum noside noside)
+value *
+ada_atr_tag (struct type *expect_type,
+	     struct expression *exp,
+	     enum noside noside, enum exp_opcode op,
+	     struct value *arg1)
 {
-  enum exp_opcode op;
-  int tem;
-  int pc;
-  int preeval_pos;
-  struct value *arg1 = NULL, *arg2 = NULL, *arg3;
-  struct type *type;
-  int nargs, oplen;
-  struct value **argvec;
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value::zero (ada_tag_type (arg1), not_lval);
 
-  pc = *pos;
-  *pos += 1;
-  op = exp->elts[pc].opcode;
+  return ada_value_tag (arg1);
+}
 
-  switch (op)
-    {
-    default:
-      *pos -= 1;
-      arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
+/* A helper function for OP_ATR_SIZE.  */
 
-      if (noside == EVAL_NORMAL)
-	arg1 = unwrap_value (arg1);
+value *
+ada_atr_size (struct type *expect_type,
+	      struct expression *exp,
+	      enum noside noside, enum exp_opcode op,
+	      struct value *arg1)
+{
+  struct type *type = arg1->type ();
 
-      /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
-         then we need to perform the conversion manually, because
-         evaluate_subexp_standard doesn't do it.  This conversion is
-         necessary in Ada because the different kinds of float/fixed
-         types in Ada have different representations.
-
-         Similarly, we need to perform the conversion from OP_LONG
-         ourselves.  */
-      if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
-        arg1 = ada_value_cast (expect_type, arg1);
+  /* If the argument is a reference, then dereference its type, since
+     the user is really asking for the size of the actual object,
+     not the size of the pointer.  */
+  if (type->code () == TYPE_CODE_REF)
+    type = type->target_type ();
 
-      return arg1;
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value::zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
+  else
+    return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
+			       TARGET_CHAR_BIT * type->length ());
+}
 
-    case OP_STRING:
-      {
-        struct value *result;
+/* A helper function for UNOP_ABS.  */
 
-        *pos -= 1;
-        result = evaluate_subexp_standard (expect_type, exp, pos, noside);
-        /* The result type will have code OP_STRING, bashed there from 
-           OP_ARRAY.  Bash it back.  */
-        if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
-          TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
-        return result;
-      }
+value *
+ada_abs (struct type *expect_type,
+	 struct expression *exp,
+	 enum noside noside, enum exp_opcode op,
+	 struct value *arg1)
+{
+  unop_promote (exp->language_defn, exp->gdbarch, &arg1);
+  if (value_less (arg1, value::zero (arg1->type (), not_lval)))
+    return value_neg (arg1);
+  else
+    return arg1;
+}
 
-    case UNOP_CAST:
-      (*pos) += 2;
-      type = exp->elts[pc + 1].type;
-      return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
-
-    case UNOP_QUAL:
-      (*pos) += 2;
-      type = exp->elts[pc + 1].type;
-      return ada_evaluate_subexp (type, exp, pos, noside);
-
-    case BINOP_ASSIGN:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (exp->elts[*pos].opcode == OP_AGGREGATE)
-	{
-	  arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
-	  if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-	    return arg1;
-	  return ada_value_assign (arg1, arg1);
-	}
-      /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
-         except if the lhs of our assignment is a convenience variable.
-         In the case of assigning to a convenience variable, the lhs
-         should be exactly the result of the evaluation of the rhs.  */
-      type = value_type (arg1);
-      if (VALUE_LVAL (arg1) == lval_internalvar)
-         type = NULL;
-      arg2 = evaluate_subexp (type, exp, pos, noside);
-      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-        return arg1;
-      if (VALUE_LVAL (arg1) == lval_internalvar)
-	{
-	  /* Nothing.  */
-	}
-      else if (ada_is_fixed_point_type (value_type (arg1)))
-        arg2 = cast_to_fixed (value_type (arg1), arg2);
-      else if (ada_is_fixed_point_type (value_type (arg2)))
-        error
-          (_("Fixed-point values must be assigned to fixed-point variables"));
-      else
-        arg2 = coerce_for_assign (value_type (arg1), arg2);
-      return ada_value_assign (arg1, arg2);
+/* A helper function for BINOP_MUL.  */
 
-    case BINOP_ADD:
-      arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
-      arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
-        return (value_from_longest
-                 (value_type (arg1),
-                  value_as_long (arg1) + value_as_long (arg2)));
-      if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
-        return (value_from_longest
-                 (value_type (arg2),
-                  value_as_long (arg1) + value_as_long (arg2)));
-      if ((ada_is_fixed_point_type (value_type (arg1))
-           || ada_is_fixed_point_type (value_type (arg2)))
-          && value_type (arg1) != value_type (arg2))
-        error (_("Operands of fixed-point addition must have the same type"));
-      /* Do the addition, and cast the result to the type of the first
-         argument.  We cannot cast the result to a reference type, so if
-         ARG1 is a reference type, find its underlying type.  */
-      type = value_type (arg1);
-      while (TYPE_CODE (type) == TYPE_CODE_REF)
-        type = TYPE_TARGET_TYPE (type);
+value *
+ada_mult_binop (struct type *expect_type,
+		struct expression *exp,
+		enum noside noside, enum exp_opcode op,
+		struct value *arg1, struct value *arg2)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-      return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
+      return value::zero (arg1->type (), not_lval);
+    }
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      return ada_value_binop (arg1, arg2, op);
+    }
+}
 
-    case BINOP_SUB:
-      arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
-      arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
-        return (value_from_longest
-                 (value_type (arg1),
-                  value_as_long (arg1) - value_as_long (arg2)));
-      if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
-        return (value_from_longest
-                 (value_type (arg2),
-                  value_as_long (arg1) - value_as_long (arg2)));
-      if ((ada_is_fixed_point_type (value_type (arg1))
-           || ada_is_fixed_point_type (value_type (arg2)))
-          && value_type (arg1) != value_type (arg2))
-        error (_("Operands of fixed-point subtraction "
-		 "must have the same type"));
-      /* Do the substraction, and cast the result to the type of the first
-         argument.  We cannot cast the result to a reference type, so if
-         ARG1 is a reference type, find its underlying type.  */
-      type = value_type (arg1);
-      while (TYPE_CODE (type) == TYPE_CODE_REF)
-        type = TYPE_TARGET_TYPE (type);
+/* A helper function for BINOP_EQUAL and BINOP_NOTEQUAL.  */
+
+value *
+ada_equal_binop (struct type *expect_type,
+		 struct expression *exp,
+		 enum noside noside, enum exp_opcode op,
+		 struct value *arg1, struct value *arg2)
+{
+  int tem;
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    tem = 0;
+  else
+    {
       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-      return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
+      tem = ada_value_equal (arg1, arg2);
+    }
+  if (op == BINOP_NOTEQUAL)
+    tem = !tem;
+  struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
+  return value_from_longest (type, tem);
+}
 
-    case BINOP_MUL:
-    case BINOP_DIV:
-    case BINOP_REM:
-    case BINOP_MOD:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        {
-          binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-          return value_zero (value_type (arg1), not_lval);
-        }
-      else
-        {
-          type = builtin_type (exp->gdbarch)->builtin_double;
-          if (ada_is_fixed_point_type (value_type (arg1)))
-            arg1 = cast_from_fixed (type, arg1);
-          if (ada_is_fixed_point_type (value_type (arg2)))
-            arg2 = cast_from_fixed (type, arg2);
-          binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-          return ada_value_binop (arg1, arg2, op);
-        }
+/* A helper function for TERNOP_SLICE.  */
 
-    case BINOP_EQUAL:
-    case BINOP_NOTEQUAL:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        tem = 0;
-      else
-	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  tem = ada_value_equal (arg1, arg2);
-	}
-      if (op == BINOP_NOTEQUAL)
-        tem = !tem;
-      type = language_bool_type (exp->language_defn, exp->gdbarch);
-      return value_from_longest (type, (LONGEST) tem);
+value *
+ada_ternop_slice (struct expression *exp,
+		  enum noside noside,
+		  struct value *array, struct value *low_bound_val,
+		  struct value *high_bound_val)
+{
+  LONGEST low_bound;
+  LONGEST high_bound;
 
-    case UNOP_NEG:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      else if (ada_is_fixed_point_type (value_type (arg1)))
-        return value_cast (value_type (arg1), value_neg (arg1));
-      else
-	{
-	  unop_promote (exp->language_defn, exp->gdbarch, &arg1);
-	  return value_neg (arg1);
-	}
+  low_bound_val = coerce_ref (low_bound_val);
+  high_bound_val = coerce_ref (high_bound_val);
+  low_bound = value_as_long (low_bound_val);
+  high_bound = value_as_long (high_bound_val);
 
-    case BINOP_LOGICAL_AND:
-    case BINOP_LOGICAL_OR:
-    case UNOP_LOGICAL_NOT:
-      {
-        struct value *val;
+  /* If this is a reference to an aligner type, then remove all
+     the aligners.  */
+  if (array->type ()->code () == TYPE_CODE_REF
+      && ada_is_aligner_type (array->type ()->target_type ()))
+    array->type ()->set_target_type
+      (ada_aligned_type (array->type ()->target_type ()));
 
-        *pos -= 1;
-        val = evaluate_subexp_standard (expect_type, exp, pos, noside);
-	type = language_bool_type (exp->language_defn, exp->gdbarch);
-        return value_cast (type, val);
-      }
+  if (ada_is_any_packed_array_type (array->type ()))
+    error (_("cannot slice a packed array"));
 
-    case BINOP_BITWISE_AND:
-    case BINOP_BITWISE_IOR:
-    case BINOP_BITWISE_XOR:
-      {
-        struct value *val;
+  /* If this is a reference to an array or an array lvalue,
+     convert to a pointer.  */
+  if (array->type ()->code () == TYPE_CODE_REF
+      || (array->type ()->code () == TYPE_CODE_ARRAY
+	  && array->lval () == lval_memory))
+    array = value_addr (array);
 
-        arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-        *pos = pc;
-        val = evaluate_subexp_standard (expect_type, exp, pos, noside);
+  if (noside == EVAL_AVOID_SIDE_EFFECTS
+      && ada_is_array_descriptor_type (ada_check_typedef
+				       (array->type ())))
+    return empty_array (ada_type_of_array (array, 0), low_bound,
+			high_bound);
 
-        return value_cast (value_type (arg1), val);
-      }
+  array = ada_coerce_to_simple_array_ptr (array);
 
-    case OP_VAR_VALUE:
-      *pos -= 1;
+  /* If we have more than one level of pointer indirection,
+     dereference the value until we get only one level.  */
+  while (array->type ()->code () == TYPE_CODE_PTR
+	 && (array->type ()->target_type ()->code ()
+	     == TYPE_CODE_PTR))
+    array = value_ind (array);
 
-      if (noside == EVAL_SKIP)
-        {
-          *pos += 4;
-          goto nosideret;
-        }
-
-      if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
-        /* Only encountered when an unresolved symbol occurs in a
-           context other than a function call, in which case, it is
-           invalid.  */
-        error (_("Unexpected unresolved symbol, %s, during evaluation"),
-               exp->elts[pc + 2].symbol->print_name ());
+  /* Make sure we really do have an array type before going further,
+     to avoid a SEGV when trying to get the index type or the target
+     type later down the road if the debug info generated by
+     the compiler is incorrect or incomplete.  */
+  if (!ada_is_simple_array_type (array->type ()))
+    error (_("cannot take slice of non-array"));
 
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        {
-          type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
-          /* Check to see if this is a tagged type.  We also need to handle
-             the case where the type is a reference to a tagged type, but
-             we have to be careful to exclude pointers to tagged types.
-             The latter should be shown as usual (as a pointer), whereas
-             a reference should mostly be transparent to the user.  */
-          if (ada_is_tagged_type (type, 0)
-              || (TYPE_CODE (type) == TYPE_CODE_REF
-                  && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
-	    {
-	      /* Tagged types are a little special in the fact that the real
-		 type is dynamic and can only be determined by inspecting the
-		 object's tag.  This means that we need to get the object's
-		 value first (EVAL_NORMAL) and then extract the actual object
-		 type from its tag.
-
-		 Note that we cannot skip the final step where we extract
-		 the object type from its tag, because the EVAL_NORMAL phase
-		 results in dynamic components being resolved into fixed ones.
-		 This can cause problems when trying to print the type
-		 description of tagged types whose parent has a dynamic size:
-		 We use the type name of the "_parent" component in order
-		 to print the name of the ancestor type in the type description.
-		 If that component had a dynamic size, the resolution into
-		 a fixed type would result in the loss of that type name,
-		 thus preventing us from printing the name of the ancestor
-		 type in the type description.  */
-	      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
+  if (ada_check_typedef (array->type ())->code ()
+      == TYPE_CODE_PTR)
+    {
+      struct type *type0 = ada_check_typedef (array->type ());
 
-	      if (TYPE_CODE (type) != TYPE_CODE_REF)
-		{
-		  struct type *actual_type;
+      if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
+	return empty_array (type0->target_type (), low_bound, high_bound);
+      else
+	{
+	  struct type *arr_type0 =
+	    to_fixed_array_type (type0->target_type (), NULL, 1);
 
-		  actual_type = type_from_tag (ada_value_tag (arg1));
-		  if (actual_type == NULL)
-		    /* If, for some reason, we were unable to determine
-		       the actual type from the tag, then use the static
-		       approximation that we just computed as a fallback.
-		       This can happen if the debugging information is
-		       incomplete, for instance.  */
-		    actual_type = type;
-		  return value_zero (actual_type, not_lval);
-		}
-	      else
-		{
-		  /* In the case of a ref, ada_coerce_ref takes care
-		     of determining the actual type.  But the evaluation
-		     should return a ref as it should be valid to ask
-		     for its address; so rebuild a ref after coerce.  */
-		  arg1 = ada_coerce_ref (arg1);
-		  return value_ref (arg1, TYPE_CODE_REF);
-		}
-	    }
+	  return ada_value_slice_from_ptr (array, arr_type0,
+					   longest_to_int (low_bound),
+					   longest_to_int (high_bound));
+	}
+    }
+  else if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return array;
+  else if (high_bound < low_bound)
+    return empty_array (array->type (), low_bound, high_bound);
+  else
+    return ada_value_slice (array, longest_to_int (low_bound),
+			    longest_to_int (high_bound));
+}
 
-	  /* Records and unions for which GNAT encodings have been
-	     generated need to be statically fixed as well.
-	     Otherwise, non-static fixing produces a type where
-	     all dynamic properties are removed, which prevents "ptype"
-	     from being able to completely describe the type.
-	     For instance, a case statement in a variant record would be
-	     replaced by the relevant components based on the actual
-	     value of the discriminants.  */
-	  if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
-	       && dynamic_template_type (type) != NULL)
-	      || (TYPE_CODE (type) == TYPE_CODE_UNION
-		  && ada_find_parallel_type (type, "___XVU") != NULL))
-	    {
-	      *pos += 4;
-	      return value_zero (to_static_fixed_type (type), not_lval);
-	    }
-        }
+/* A helper function for BINOP_IN_BOUNDS.  */
 
-      arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
-      return ada_to_fixed_value (arg1);
+value *
+ada_binop_in_bounds (struct expression *exp, enum noside noside,
+		     struct value *arg1, struct value *arg2, int n)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value::zero (type, not_lval);
+    }
 
-    case OP_FUNCALL:
-      (*pos) += 2;
+  struct type *type = ada_index_type (arg2->type (), n, "range");
+  if (!type)
+    type = arg1->type ();
 
-      /* Allocate arg vector, including space for the function to be
-         called in argvec[0] and a terminating NULL.  */
-      nargs = longest_to_int (exp->elts[pc + 1].longconst);
-      argvec = XALLOCAVEC (struct value *, nargs + 2);
-
-      if (exp->elts[*pos].opcode == OP_VAR_VALUE
-          && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
-        error (_("Unexpected unresolved symbol, %s, during evaluation"),
-               exp->elts[pc + 5].symbol->print_name ());
-      else
-        {
-          for (tem = 0; tem <= nargs; tem += 1)
-            argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-          argvec[tem] = 0;
-
-          if (noside == EVAL_SKIP)
-            goto nosideret;
-        }
-
-      if (ada_is_constrained_packed_array_type
-	  (desc_base_type (value_type (argvec[0]))))
-        argvec[0] = ada_coerce_to_simple_array (argvec[0]);
-      else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
-               && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
-        /* This is a packed array that has already been fixed, and
-	   therefore already coerced to a simple array.  Nothing further
-	   to do.  */
-        ;
-      else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF)
-	{
-	  /* Make sure we dereference references so that all the code below
-	     feels like it's really handling the referenced value.  Wrapping
-	     types (for alignment) may be there, so make sure we strip them as
-	     well.  */
-	  argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
-	}
-      else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
-	       && VALUE_LVAL (argvec[0]) == lval_memory)
-	argvec[0] = value_addr (argvec[0]);
-
-      type = ada_check_typedef (value_type (argvec[0]));
-
-      /* Ada allows us to implicitly dereference arrays when subscripting
-	 them.  So, if this is an array typedef (encoding use for array
-	 access types encoded as fat pointers), strip it now.  */
-      if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
-	type = ada_typedef_target_type (type);
+  value *arg3 = value_from_longest (type, ada_array_bound (arg2, n, 1));
+  arg2 = value_from_longest (type, ada_array_bound (arg2, n, 0));
 
-      if (TYPE_CODE (type) == TYPE_CODE_PTR)
-        {
-          switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
-            {
-            case TYPE_CODE_FUNC:
-              type = ada_check_typedef (TYPE_TARGET_TYPE (type));
-              break;
-            case TYPE_CODE_ARRAY:
-              break;
-            case TYPE_CODE_STRUCT:
-              if (noside != EVAL_AVOID_SIDE_EFFECTS)
-                argvec[0] = ada_value_ind (argvec[0]);
-              type = ada_check_typedef (TYPE_TARGET_TYPE (type));
-              break;
-            default:
-              error (_("cannot subscript or call something of type `%s'"),
-                     ada_type_name (value_type (argvec[0])));
-              break;
-            }
-        }
-
-      switch (TYPE_CODE (type))
-        {
-        case TYPE_CODE_FUNC:
-          if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	    {
-	      if (TYPE_TARGET_TYPE (type) == NULL)
-		error_call_unknown_return_type (NULL);
-	      return allocate_value (TYPE_TARGET_TYPE (type));
-	    }
-	  return call_function_by_hand (argvec[0], NULL,
-					gdb::make_array_view (argvec + 1,
-							      nargs));
-	case TYPE_CODE_INTERNAL_FUNCTION:
-	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	    /* We don't know anything about what the internal
-	       function might return, but we have to return
-	       something.  */
-	    return value_zero (builtin_type (exp->gdbarch)->builtin_int,
-			       not_lval);
-	  else
-	    return call_internal_function (exp->gdbarch, exp->language_defn,
-					   argvec[0], nargs, argvec + 1);
+  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
+  type = language_bool_type (exp->language_defn, exp->gdbarch);
+  return value_from_longest (type,
+			     (value_less (arg1, arg3)
+			      || value_equal (arg1, arg3))
+			     && (value_less (arg2, arg1)
+				 || value_equal (arg2, arg1)));
+}
 
-        case TYPE_CODE_STRUCT:
-          {
-            int arity;
-
-            arity = ada_array_arity (type);
-            type = ada_array_element_type (type, nargs);
-            if (type == NULL)
-              error (_("cannot subscript or call a record"));
-            if (arity != nargs)
-              error (_("wrong number of subscripts; expecting %d"), arity);
-            if (noside == EVAL_AVOID_SIDE_EFFECTS)
-              return value_zero (ada_aligned_type (type), lval_memory);
-            return
-              unwrap_value (ada_value_subscript
-                            (argvec[0], nargs, argvec + 1));
-          }
-        case TYPE_CODE_ARRAY:
-          if (noside == EVAL_AVOID_SIDE_EFFECTS)
-            {
-              type = ada_array_element_type (type, nargs);
-              if (type == NULL)
-                error (_("element type of array unknown"));
-              else
-                return value_zero (ada_aligned_type (type), lval_memory);
-            }
-          return
-            unwrap_value (ada_value_subscript
-                          (ada_coerce_to_simple_array (argvec[0]),
-                           nargs, argvec + 1));
-        case TYPE_CODE_PTR:     /* Pointer to array */
-          if (noside == EVAL_AVOID_SIDE_EFFECTS)
-            {
-	      type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
-              type = ada_array_element_type (type, nargs);
-              if (type == NULL)
-                error (_("element type of array unknown"));
-              else
-                return value_zero (ada_aligned_type (type), lval_memory);
-            }
-          return
-            unwrap_value (ada_value_ptr_subscript (argvec[0],
-						   nargs, argvec + 1));
-
-        default:
-          error (_("Attempt to index or call something other than an "
-		   "array or function"));
-        }
+/* A helper function for some attribute operations.  */
 
-    case TERNOP_SLICE:
-      {
-        struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-        struct value *low_bound_val =
-          evaluate_subexp (NULL_TYPE, exp, pos, noside);
-        struct value *high_bound_val =
-          evaluate_subexp (NULL_TYPE, exp, pos, noside);
-        LONGEST low_bound;
-        LONGEST high_bound;
-
-        low_bound_val = coerce_ref (low_bound_val);
-        high_bound_val = coerce_ref (high_bound_val);
-        low_bound = value_as_long (low_bound_val);
-        high_bound = value_as_long (high_bound_val);
-
-        if (noside == EVAL_SKIP)
-          goto nosideret;
-
-        /* If this is a reference to an aligner type, then remove all
-           the aligners.  */
-        if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
-            && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
-          TYPE_TARGET_TYPE (value_type (array)) =
-            ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
-
-        if (ada_is_constrained_packed_array_type (value_type (array)))
-          error (_("cannot slice a packed array"));
-
-        /* If this is a reference to an array or an array lvalue,
-           convert to a pointer.  */
-        if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
-            || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
-                && VALUE_LVAL (array) == lval_memory))
-          array = value_addr (array);
-
-        if (noside == EVAL_AVOID_SIDE_EFFECTS
-            && ada_is_array_descriptor_type (ada_check_typedef
-                                             (value_type (array))))
-          return empty_array (ada_type_of_array (array, 0), low_bound,
-			      high_bound);
-
-        array = ada_coerce_to_simple_array_ptr (array);
-
-        /* If we have more than one level of pointer indirection,
-           dereference the value until we get only one level.  */
-        while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
-               && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
-                     == TYPE_CODE_PTR))
-          array = value_ind (array);
-
-        /* Make sure we really do have an array type before going further,
-           to avoid a SEGV when trying to get the index type or the target
-           type later down the road if the debug info generated by
-           the compiler is incorrect or incomplete.  */
-        if (!ada_is_simple_array_type (value_type (array)))
-          error (_("cannot take slice of non-array"));
-
-        if (TYPE_CODE (ada_check_typedef (value_type (array)))
-            == TYPE_CODE_PTR)
-          {
-            struct type *type0 = ada_check_typedef (value_type (array));
-
-            if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
-              return empty_array (TYPE_TARGET_TYPE (type0), low_bound, high_bound);
-            else
-              {
-                struct type *arr_type0 =
-                  to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
-
-                return ada_value_slice_from_ptr (array, arr_type0,
-                                                 longest_to_int (low_bound),
-                                                 longest_to_int (high_bound));
-              }
-          }
-        else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-          return array;
-        else if (high_bound < low_bound)
-          return empty_array (value_type (array), low_bound, high_bound);
-        else
-          return ada_value_slice (array, longest_to_int (low_bound),
-				  longest_to_int (high_bound));
-      }
+static value *
+ada_unop_atr (struct expression *exp, enum noside noside, enum exp_opcode op,
+	      struct value *arg1, struct type *type_arg, int tem)
+{
+  const char *attr_name = nullptr;
+  if (op == OP_ATR_FIRST)
+    attr_name = "first";
+  else if (op == OP_ATR_LAST)
+    attr_name = "last";
 
-    case UNOP_IN_RANGE:
-      (*pos) += 2;
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      type = check_typedef (exp->elts[pc + 1].type);
-
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-
-      switch (TYPE_CODE (type))
-        {
-        default:
-          lim_warning (_("Membership test incompletely implemented; "
-			 "always returns true"));
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type, (LONGEST) 1);
-
-        case TYPE_CODE_RANGE:
-	  arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
-	  arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return
-	    value_from_longest (type,
-                                (value_less (arg1, arg3)
-                                 || value_equal (arg1, arg3))
-                                && (value_less (arg2, arg1)
-                                    || value_equal (arg2, arg1)));
-        }
-
-    case BINOP_IN_BOUNDS:
-      (*pos) += 2;
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      if (type_arg == NULL)
+	type_arg = arg1->type ();
 
-      if (noside == EVAL_SKIP)
-        goto nosideret;
+      if (ada_is_constrained_packed_array_type (type_arg))
+	type_arg = decode_constrained_packed_array_type (type_arg);
 
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
+      if (!discrete_type_p (type_arg))
 	{
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_zero (type, not_lval);
+	  switch (op)
+	    {
+	    default:          /* Should never happen.  */
+	      error (_("unexpected attribute encountered"));
+	    case OP_ATR_FIRST:
+	    case OP_ATR_LAST:
+	      type_arg = ada_index_type (type_arg, tem,
+					 attr_name);
+	      break;
+	    case OP_ATR_LENGTH:
+	      type_arg = builtin_type (exp->gdbarch)->builtin_int;
+	      break;
+	    }
 	}
 
-      tem = longest_to_int (exp->elts[pc + 1].longconst);
+      return value::zero (type_arg, not_lval);
+    }
+  else if (type_arg == NULL)
+    {
+      arg1 = ada_coerce_ref (arg1);
+
+      if (ada_is_constrained_packed_array_type (arg1->type ()))
+	arg1 = ada_coerce_to_simple_array (arg1);
+
+      struct type *type;
+      if (op == OP_ATR_LENGTH)
+	type = builtin_type (exp->gdbarch)->builtin_int;
+      else
+	{
+	  type = ada_index_type (arg1->type (), tem,
+				 attr_name);
+	  if (type == NULL)
+	    type = builtin_type (exp->gdbarch)->builtin_int;
+	}
+
+      switch (op)
+	{
+	default:          /* Should never happen.  */
+	  error (_("unexpected attribute encountered"));
+	case OP_ATR_FIRST:
+	  return value_from_longest
+	    (type, ada_array_bound (arg1, tem, 0));
+	case OP_ATR_LAST:
+	  return value_from_longest
+	    (type, ada_array_bound (arg1, tem, 1));
+	case OP_ATR_LENGTH:
+	  return value_from_longest
+	    (type, ada_array_length (arg1, tem));
+	}
+    }
+  else if (discrete_type_p (type_arg))
+    {
+      struct type *range_type;
+      const char *name = ada_type_name (type_arg);
+
+      range_type = NULL;
+      if (name != NULL && type_arg->code () != TYPE_CODE_ENUM)
+	range_type = to_fixed_range_type (type_arg, NULL);
+      if (range_type == NULL)
+	range_type = type_arg;
+      switch (op)
+	{
+	default:
+	  error (_("unexpected attribute encountered"));
+	case OP_ATR_FIRST:
+	  return value_from_longest 
+	    (range_type, ada_discrete_type_low_bound (range_type));
+	case OP_ATR_LAST:
+	  return value_from_longest
+	    (range_type, ada_discrete_type_high_bound (range_type));
+	case OP_ATR_LENGTH:
+	  error (_("the 'length attribute applies only to array types"));
+	}
+    }
+  else if (type_arg->code () == TYPE_CODE_FLT)
+    error (_("unimplemented type attribute"));
+  else
+    {
+      LONGEST low, high;
 
-      type = ada_index_type (value_type (arg2), tem, "range");
-      if (!type)
-	type = value_type (arg1);
+      if (ada_is_constrained_packed_array_type (type_arg))
+	type_arg = decode_constrained_packed_array_type (type_arg);
 
-      arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
-      arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
+      struct type *type;
+      if (op == OP_ATR_LENGTH)
+	type = builtin_type (exp->gdbarch)->builtin_int;
+      else
+	{
+	  type = ada_index_type (type_arg, tem, attr_name);
+	  if (type == NULL)
+	    type = builtin_type (exp->gdbarch)->builtin_int;
+	}
 
-      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
-      type = language_bool_type (exp->language_defn, exp->gdbarch);
-      return
-        value_from_longest (type,
-                            (value_less (arg1, arg3)
-                             || value_equal (arg1, arg3))
-                            && (value_less (arg2, arg1)
-                                || value_equal (arg2, arg1)));
-
-    case TERNOP_IN_RANGE:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+      switch (op)
+	{
+	default:
+	  error (_("unexpected attribute encountered"));
+	case OP_ATR_FIRST:
+	  low = ada_array_bound_from_type (type_arg, tem, 0);
+	  return value_from_longest (type, low);
+	case OP_ATR_LAST:
+	  high = ada_array_bound_from_type (type_arg, tem, 1);
+	  return value_from_longest (type, high);
+	case OP_ATR_LENGTH:
+	  low = ada_array_bound_from_type (type_arg, tem, 0);
+	  high = ada_array_bound_from_type (type_arg, tem, 1);
+	  return value_from_longest (type, high - low + 1);
+	}
+    }
+}
 
-      if (noside == EVAL_SKIP)
-        goto nosideret;
+/* A helper function for OP_ATR_MIN and OP_ATR_MAX.  */
 
+struct value *
+ada_binop_minmax (struct type *expect_type,
+		  struct expression *exp,
+		  enum noside noside, enum exp_opcode op,
+		  struct value *arg1, struct value *arg2)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value::zero (arg1->type (), not_lval);
+  else
+    {
       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
-      type = language_bool_type (exp->language_defn, exp->gdbarch);
-      return
-        value_from_longest (type,
-                            (value_less (arg1, arg3)
-                             || value_equal (arg1, arg3))
-                            && (value_less (arg2, arg1)
-                                || value_equal (arg2, arg1)));
-
-    case OP_ATR_FIRST:
-    case OP_ATR_LAST:
-    case OP_ATR_LENGTH:
-      {
-        struct type *type_arg;
+      return value_binop (arg1, arg2, op);
+    }
+}
 
-        if (exp->elts[*pos].opcode == OP_TYPE)
-          {
-            evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-            arg1 = NULL;
-            type_arg = check_typedef (exp->elts[pc + 2].type);
-          }
-        else
-          {
-            arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-            type_arg = NULL;
-          }
-
-        if (exp->elts[*pos].opcode != OP_LONG)
-          error (_("Invalid operand to '%s"), ada_attribute_name (op));
-        tem = longest_to_int (exp->elts[*pos + 2].longconst);
-        *pos += 4;
-
-        if (noside == EVAL_SKIP)
-          goto nosideret;
-	else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	  {
-	    if (type_arg == NULL)
-	      type_arg = value_type (arg1);
+/* A helper function for BINOP_EXP.  */
 
-            if (ada_is_constrained_packed_array_type (type_arg))
-	      type_arg = decode_constrained_packed_array_type (type_arg);
+struct value *
+ada_binop_exp (struct type *expect_type,
+	       struct expression *exp,
+	       enum noside noside, enum exp_opcode op,
+	       struct value *arg1, struct value *arg2)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value::zero (arg1->type (), not_lval);
+  else
+    {
+      /* For integer exponentiation operations,
+	 only promote the first argument.  */
+      if (is_integral_type (arg2->type ()))
+	unop_promote (exp->language_defn, exp->gdbarch, &arg1);
+      else
+	binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
 
-	    if (!discrete_type_p (type_arg))
-	      {
-		switch (op)
-		  {
-		  default:          /* Should never happen.  */
-		    error (_("unexpected attribute encountered"));
-		  case OP_ATR_FIRST:
-		  case OP_ATR_LAST:
-		    type_arg = ada_index_type (type_arg, tem,
-					       ada_attribute_name (op));
-		    break;
-		  case OP_ATR_LENGTH:
-		    type_arg = builtin_type (exp->gdbarch)->builtin_int;
-		    break;
-		  }
-	      }
+      return value_binop (arg1, arg2, op);
+    }
+}
 
-	    return value_zero (type_arg, not_lval);
-	  }
-        else if (type_arg == NULL)
-          {
-            arg1 = ada_coerce_ref (arg1);
-
-            if (ada_is_constrained_packed_array_type (value_type (arg1)))
-              arg1 = ada_coerce_to_simple_array (arg1);
-
-            if (op == OP_ATR_LENGTH)
-	      type = builtin_type (exp->gdbarch)->builtin_int;
-	    else
-	      {
-		type = ada_index_type (value_type (arg1), tem,
-				       ada_attribute_name (op));
-		if (type == NULL)
-		  type = builtin_type (exp->gdbarch)->builtin_int;
-	      }
+namespace expr
+{
 
-            switch (op)
-              {
-              default:          /* Should never happen.  */
-                error (_("unexpected attribute encountered"));
-              case OP_ATR_FIRST:
-                return value_from_longest
-			(type, ada_array_bound (arg1, tem, 0));
-              case OP_ATR_LAST:
-                return value_from_longest
-			(type, ada_array_bound (arg1, tem, 1));
-              case OP_ATR_LENGTH:
-                return value_from_longest
-			(type, ada_array_length (arg1, tem));
-              }
-          }
-        else if (discrete_type_p (type_arg))
-          {
-            struct type *range_type;
-            const char *name = ada_type_name (type_arg);
-
-            range_type = NULL;
-            if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
-              range_type = to_fixed_range_type (type_arg, NULL);
-            if (range_type == NULL)
-              range_type = type_arg;
-            switch (op)
-              {
-              default:
-                error (_("unexpected attribute encountered"));
-              case OP_ATR_FIRST:
-		return value_from_longest 
-		  (range_type, ada_discrete_type_low_bound (range_type));
-              case OP_ATR_LAST:
-                return value_from_longest
-		  (range_type, ada_discrete_type_high_bound (range_type));
-              case OP_ATR_LENGTH:
-                error (_("the 'length attribute applies only to array types"));
-              }
-          }
-        else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
-          error (_("unimplemented type attribute"));
-        else
-          {
-            LONGEST low, high;
-
-            if (ada_is_constrained_packed_array_type (type_arg))
-              type_arg = decode_constrained_packed_array_type (type_arg);
-
-	    if (op == OP_ATR_LENGTH)
-	      type = builtin_type (exp->gdbarch)->builtin_int;
-	    else
-	      {
-		type = ada_index_type (type_arg, tem, ada_attribute_name (op));
-		if (type == NULL)
-		  type = builtin_type (exp->gdbarch)->builtin_int;
-	      }
+/* See ada-exp.h.  */
 
-            switch (op)
-              {
-              default:
-                error (_("unexpected attribute encountered"));
-              case OP_ATR_FIRST:
-                low = ada_array_bound_from_type (type_arg, tem, 0);
-                return value_from_longest (type, low);
-              case OP_ATR_LAST:
-                high = ada_array_bound_from_type (type_arg, tem, 1);
-                return value_from_longest (type, high);
-              case OP_ATR_LENGTH:
-                low = ada_array_bound_from_type (type_arg, tem, 0);
-                high = ada_array_bound_from_type (type_arg, tem, 1);
-                return value_from_longest (type, high - low + 1);
-              }
-          }
-      }
+operation_up
+ada_resolvable::replace (operation_up &&owner,
+			 struct expression *exp,
+			 bool deprocedure_p,
+			 bool parse_completion,
+			 innermost_block_tracker *tracker,
+			 struct type *context_type)
+{
+  if (resolve (exp, deprocedure_p, parse_completion, tracker, context_type))
+    return (make_operation<ada_funcall_operation>
+	    (std::move (owner),
+	     std::vector<operation_up> ()));
+  return std::move (owner);
+}
+
+/* Convert the character literal whose value would be VAL to the
+   appropriate value of type TYPE, if there is a translation.
+   Otherwise return VAL.  Hence, in an enumeration type ('A', 'B'),
+   the literal 'A' (VAL == 65), returns 0.  */
 
-    case OP_ATR_TAG:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
+static LONGEST
+convert_char_literal (struct type *type, LONGEST val)
+{
+  char name[12];
+  int f;
 
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        return value_zero (ada_tag_type (arg1), not_lval);
+  if (type == NULL)
+    return val;
+  type = check_typedef (type);
+  if (type->code () != TYPE_CODE_ENUM)
+    return val;
 
-      return ada_value_tag (arg1);
+  if ((val >= 'a' && val <= 'z') || (val >= '0' && val <= '9'))
+    xsnprintf (name, sizeof (name), "Q%c", (int) val);
+  else if (val >= 0 && val < 256)
+    xsnprintf (name, sizeof (name), "QU%02x", (unsigned) val);
+  else if (val >= 0 && val < 0x10000)
+    xsnprintf (name, sizeof (name), "QW%04x", (unsigned) val);
+  else
+    xsnprintf (name, sizeof (name), "QWW%08lx", (unsigned long) val);
+  size_t len = strlen (name);
+  for (f = 0; f < type->num_fields (); f += 1)
+    {
+      /* Check the suffix because an enum constant in a package will
+	 have a name like "pkg__QUxx".  This is safe enough because we
+	 already have the correct type, and because mangling means
+	 there can't be clashes.  */
+      const char *ename = type->field (f).name ();
+      size_t elen = strlen (ename);
 
-    case OP_ATR_MIN:
-    case OP_ATR_MAX:
-      evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        return value_zero (value_type (arg1), not_lval);
-      else
-	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  return value_binop (arg1, arg2,
-			      op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
-	}
+      if (elen >= len && strcmp (name, ename + elen - len) == 0)
+	return type->field (f).loc_enumval ();
+    }
+  return val;
+}
 
-    case OP_ATR_MODULUS:
-      {
-        struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
+value *
+ada_char_operation::evaluate (struct type *expect_type,
+			      struct expression *exp,
+			      enum noside noside)
+{
+  value *result = long_const_operation::evaluate (expect_type, exp, noside);
+  if (expect_type != nullptr)
+    result = ada_value_cast (expect_type, result);
+  return result;
+}
 
-        evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-        if (noside == EVAL_SKIP)
-          goto nosideret;
+/* See ada-exp.h.  */
 
-        if (!ada_is_modular_type (type_arg))
-          error (_("'modulus must be applied to modular type"));
+operation_up
+ada_char_operation::replace (operation_up &&owner,
+			     struct expression *exp,
+			     bool deprocedure_p,
+			     bool parse_completion,
+			     innermost_block_tracker *tracker,
+			     struct type *context_type)
+{
+  operation_up result = std::move (owner);
+
+  if (context_type != nullptr && context_type->code () == TYPE_CODE_ENUM)
+    {
+      LONGEST val = as_longest ();
+      gdb_assert (result.get () == this);
+      std::get<0> (m_storage) = context_type;
+      std::get<1> (m_storage) = convert_char_literal (context_type, val);
+    }
 
-        return value_from_longest (TYPE_TARGET_TYPE (type_arg),
-                                   ada_modulus (type_arg));
-      }
+  return result;
+}
 
+value *
+ada_wrapped_operation::evaluate (struct type *expect_type,
+				 struct expression *exp,
+				 enum noside noside)
+{
+  value *result = std::get<0> (m_storage)->evaluate (expect_type, exp, noside);
+  if (noside == EVAL_NORMAL)
+    result = unwrap_value (result);
+
+  /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
+     then we need to perform the conversion manually, because
+     evaluate_subexp_standard doesn't do it.  This conversion is
+     necessary in Ada because the different kinds of float/fixed
+     types in Ada have different representations.
+
+     Similarly, we need to perform the conversion from OP_LONG
+     ourselves.  */
+  if ((opcode () == OP_FLOAT || opcode () == OP_LONG) && expect_type != NULL)
+    result = ada_value_cast (expect_type, result);
 
-    case OP_ATR_POS:
-      evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      type = builtin_type (exp->gdbarch)->builtin_int;
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	return value_zero (type, not_lval);
-      else
-	return value_pos_atr (type, arg1);
+  return result;
+}
 
-    case OP_ATR_SIZE:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      type = value_type (arg1);
-
-      /* If the argument is a reference, then dereference its type, since
-         the user is really asking for the size of the actual object,
-         not the size of the pointer.  */
-      if (TYPE_CODE (type) == TYPE_CODE_REF)
-        type = TYPE_TARGET_TYPE (type);
-
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
-      else
-        return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
-                                   TARGET_CHAR_BIT * TYPE_LENGTH (type));
-
-    case OP_ATR_VAL:
-      evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      type = exp->elts[pc + 2].type;
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        return value_zero (type, not_lval);
-      else
-        return value_val_atr (type, arg1);
+void
+ada_wrapped_operation::do_generate_ax (struct expression *exp,
+				       struct agent_expr *ax,
+				       struct axs_value *value,
+				       struct type *cast_type)
+{
+  std::get<0> (m_storage)->generate_ax (exp, ax, value, cast_type);
 
-    case BINOP_EXP:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        return value_zero (value_type (arg1), not_lval);
-      else
-	{
-	  /* For integer exponentiation operations,
-	     only promote the first argument.  */
-	  if (is_integral_type (value_type (arg2)))
-	    unop_promote (exp->language_defn, exp->gdbarch, &arg1);
-	  else
-	    binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+  struct type *type = value->type;
+  if (ada_is_aligner_type (type))
+    error (_("Aligner types cannot be handled in agent expressions"));
+  else if (find_base_type (type) != nullptr)
+    error (_("Dynamic types cannot be handled in agent expressions"));
+}
 
-	  return value_binop (arg1, arg2, op);
-	}
+value *
+ada_string_operation::evaluate (struct type *expect_type,
+				struct expression *exp,
+				enum noside noside)
+{
+  struct type *char_type;
+  if (expect_type != nullptr && ada_is_string_type (expect_type))
+    char_type = ada_array_element_type (expect_type, 1);
+  else
+    char_type = language_string_char_type (exp->language_defn, exp->gdbarch);
 
-    case UNOP_PLUS:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      else
-        return arg1;
+  const std::string &str = std::get<0> (m_storage);
+  const char *encoding;
+  switch (char_type->length ())
+    {
+    case 1:
+      {
+	/* Simply copy over the data -- this isn't perhaps strictly
+	   correct according to the encodings, but it is gdb's
+	   historical behavior.  */
+	struct type *stringtype
+	  = lookup_array_range_type (char_type, 1, str.length ());
+	struct value *val = value::allocate (stringtype);
+	memcpy (val->contents_raw ().data (), str.c_str (),
+		str.length ());
+	return val;
+      }
 
-    case UNOP_ABS:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      unop_promote (exp->language_defn, exp->gdbarch, &arg1);
-      if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
-        return value_neg (arg1);
-      else
-        return arg1;
-
-    case UNOP_IND:
-      preeval_pos = *pos;
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      type = ada_check_typedef (value_type (arg1));
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        {
-          if (ada_is_array_descriptor_type (type))
-            /* GDB allows dereferencing GNAT array descriptors.  */
-            {
-              struct type *arrType = ada_type_of_array (arg1, 0);
-
-              if (arrType == NULL)
-                error (_("Attempt to dereference null array pointer."));
-              return value_at_lazy (arrType, 0);
-            }
-          else if (TYPE_CODE (type) == TYPE_CODE_PTR
-                   || TYPE_CODE (type) == TYPE_CODE_REF
-                   /* In C you can dereference an array to get the 1st elt.  */
-                   || TYPE_CODE (type) == TYPE_CODE_ARRAY)
-            {
-            /* As mentioned in the OP_VAR_VALUE case, tagged types can
-               only be determined by inspecting the object's tag.
-               This means that we need to evaluate completely the
-               expression in order to get its type.  */
-
-	      if ((TYPE_CODE (type) == TYPE_CODE_REF
-		   || TYPE_CODE (type) == TYPE_CODE_PTR)
-		  && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
-		{
-		  arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
-					  EVAL_NORMAL);
-		  type = value_type (ada_value_ind (arg1));
-		}
-	      else
-		{
-		  type = to_static_fixed_type
-		    (ada_aligned_type
-		     (ada_check_typedef (TYPE_TARGET_TYPE (type))));
-		}
-	      ada_ensure_varsize_limit (type);
-              return value_zero (type, lval_memory);
-            }
-          else if (TYPE_CODE (type) == TYPE_CODE_INT)
-	    {
-	      /* GDB allows dereferencing an int.  */
-	      if (expect_type == NULL)
-		return value_zero (builtin_type (exp->gdbarch)->builtin_int,
-				   lval_memory);
-	      else
-		{
-		  expect_type = 
-		    to_static_fixed_type (ada_aligned_type (expect_type));
-		  return value_zero (expect_type, lval_memory);
-		}
-	    }
-          else
-            error (_("Attempt to take contents of a non-pointer value."));
-        }
-      arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
-      type = ada_check_typedef (value_type (arg1));
-
-      if (TYPE_CODE (type) == TYPE_CODE_INT)
-          /* GDB allows dereferencing an int.  If we were given
-             the expect_type, then use that as the target type.
-             Otherwise, assume that the target type is an int.  */
-        {
-          if (expect_type != NULL)
-	    return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
-					      arg1));
-	  else
-	    return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
-				  (CORE_ADDR) value_as_address (arg1));
-        }
+    case 2:
+      if (gdbarch_byte_order (exp->gdbarch) == BFD_ENDIAN_BIG)
+	encoding = "UTF-16BE";
+      else
+	encoding = "UTF-16LE";
+      break;
 
-      if (ada_is_array_descriptor_type (type))
-        /* GDB allows dereferencing GNAT array descriptors.  */
-        return ada_coerce_to_simple_array (arg1);
+    case 4:
+      if (gdbarch_byte_order (exp->gdbarch) == BFD_ENDIAN_BIG)
+	encoding = "UTF-32BE";
       else
-        return ada_value_ind (arg1);
+	encoding = "UTF-32LE";
+      break;
 
-    case STRUCTOP_STRUCT:
-      tem = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
-      preeval_pos = *pos;
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        {
-          struct type *type1 = value_type (arg1);
+    default:
+      error (_("unexpected character type size %s"),
+	     pulongest (char_type->length ()));
+    }
 
-          if (ada_is_tagged_type (type1, 1))
-            {
-              type = ada_lookup_struct_elt_type (type1,
-                                                 &exp->elts[pc + 2].string,
-                                                 1, 1);
-
-	      /* If the field is not found, check if it exists in the
-		 extension of this object's type. This means that we
-		 need to evaluate completely the expression.  */
+  auto_obstack converted;
+  convert_between_encodings (host_charset (), encoding,
+			     (const gdb_byte *) str.c_str (),
+			     str.length (), 1,
+			     &converted, translit_none);
+
+  struct type *stringtype
+    = lookup_array_range_type (char_type, 1,
+			       obstack_object_size (&converted)
+			       / char_type->length ());
+  struct value *val = value::allocate (stringtype);
+  memcpy (val->contents_raw ().data (),
+	  obstack_base (&converted),
+	  obstack_object_size (&converted));
+  return val;
+}
 
-              if (type == NULL)
-		{
-		  arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
-					  EVAL_NORMAL);
-		  arg1 = ada_value_struct_elt (arg1,
-					       &exp->elts[pc + 2].string,
-					       0);
-		  arg1 = unwrap_value (arg1);
-		  type = value_type (ada_to_fixed_value (arg1));
-		}
-            }
-          else
-            type =
-              ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
-                                          0);
-
-          return value_zero (ada_aligned_type (type), lval_memory);
-        }
-      else
-	{
-	  arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
-	  arg1 = unwrap_value (arg1);
-	  return ada_to_fixed_value (arg1);
-	}
-
-    case OP_TYPE:
-      /* The value is not supposed to be used.  This is here to make it
-         easier to accommodate expressions that contain types.  */
-      (*pos) += 2;
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        return allocate_value (exp->elts[pc + 1].type);
-      else
-        error (_("Attempt to use a type name as an expression"));
-
-    case OP_AGGREGATE:
-    case OP_CHOICES:
-    case OP_OTHERS:
-    case OP_DISCRETE_RANGE:
-    case OP_POSITIONAL:
-    case OP_NAME:
-      if (noside == EVAL_NORMAL)
-	switch (op) 
-	  {
-	  case OP_NAME:
-	    error (_("Undefined name, ambiguous name, or renaming used in "
-		     "component association: %s."), &exp->elts[pc+2].string);
-	  case OP_AGGREGATE:
-	    error (_("Aggregates only allowed on the right of an assignment"));
-	  default:
-	    internal_error (__FILE__, __LINE__,
-			    _("aggregate apparently mangled"));
-	  }
+value *
+ada_concat_operation::evaluate (struct type *expect_type,
+				struct expression *exp,
+				enum noside noside)
+{
+  /* If one side is a literal, evaluate the other side first so that
+     the expected type can be set properly.  */
+  const operation_up &lhs_expr = std::get<0> (m_storage);
+  const operation_up &rhs_expr = std::get<1> (m_storage);
 
-      ada_forward_operator_length (exp, pc, &oplen, &nargs);
-      *pos += oplen - 1;
-      for (tem = 0; tem < nargs; tem += 1) 
-	ada_evaluate_subexp (NULL, exp, pos, noside);
-      goto nosideret;
+  value *lhs, *rhs;
+  if (dynamic_cast<ada_string_operation *> (lhs_expr.get ()) != nullptr)
+    {
+      rhs = rhs_expr->evaluate (nullptr, exp, noside);
+      lhs = lhs_expr->evaluate (rhs->type (), exp, noside);
+    }
+  else if (dynamic_cast<ada_char_operation *> (lhs_expr.get ()) != nullptr)
+    {
+      rhs = rhs_expr->evaluate (nullptr, exp, noside);
+      struct type *rhs_type = check_typedef (rhs->type ());
+      struct type *elt_type = nullptr;
+      if (rhs_type->code () == TYPE_CODE_ARRAY)
+	elt_type = rhs_type->target_type ();
+      lhs = lhs_expr->evaluate (elt_type, exp, noside);
+    }
+  else if (dynamic_cast<ada_string_operation *> (rhs_expr.get ()) != nullptr)
+    {
+      lhs = lhs_expr->evaluate (nullptr, exp, noside);
+      rhs = rhs_expr->evaluate (lhs->type (), exp, noside);
+    }
+  else if (dynamic_cast<ada_char_operation *> (rhs_expr.get ()) != nullptr)
+    {
+      lhs = lhs_expr->evaluate (nullptr, exp, noside);
+      struct type *lhs_type = check_typedef (lhs->type ());
+      struct type *elt_type = nullptr;
+      if (lhs_type->code () == TYPE_CODE_ARRAY)
+	elt_type = lhs_type->target_type ();
+      rhs = rhs_expr->evaluate (elt_type, exp, noside);
     }
+  else
+    return concat_operation::evaluate (expect_type, exp, noside);
 
-nosideret:
-  return eval_skip_value (exp);
+  return value_concat (lhs, rhs);
 }
-
 
-                                /* Fixed point */
+value *
+ada_qual_operation::evaluate (struct type *expect_type,
+			      struct expression *exp,
+			      enum noside noside)
+{
+  struct type *type = std::get<1> (m_storage);
+  return std::get<0> (m_storage)->evaluate (type, exp, noside);
+}
 
-/* If TYPE encodes an Ada fixed-point type, return the suffix of the
-   type name that encodes the 'small and 'delta information.
-   Otherwise, return NULL.  */
+value *
+ada_ternop_range_operation::evaluate (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside)
+{
+  value *arg0 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+  value *arg1 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+  value *arg2 = std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
+  return eval_ternop_in_range (expect_type, exp, noside, arg0, arg1, arg2);
+}
 
-static const char *
-fixed_type_info (struct type *type)
+value *
+ada_binop_addsub_operation::evaluate (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside)
 {
-  const char *name = ada_type_name (type);
-  enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
+  value *arg1 = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside);
+  value *arg2 = std::get<2> (m_storage)->evaluate_with_coercion (exp, noside);
 
-  if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
+  auto do_op = [this] (LONGEST x, LONGEST y)
     {
-      const char *tail = strstr (name, "___XF_");
+      if (std::get<0> (m_storage) == BINOP_ADD)
+	return x + y;
+      return x - y;
+    };
 
-      if (tail == NULL)
-        return NULL;
-      else
-        return tail + 5;
+  if (arg1->type ()->code () == TYPE_CODE_PTR)
+    return (value_from_longest
+	    (arg1->type (),
+	     do_op (value_as_long (arg1), value_as_long (arg2))));
+  if (arg2->type ()->code () == TYPE_CODE_PTR)
+    return (value_from_longest
+	    (arg2->type (),
+	     do_op (value_as_long (arg1), value_as_long (arg2))));
+  /* Preserve the original type for use by the range case below.
+     We cannot cast the result to a reference type, so if ARG1 is
+     a reference type, find its underlying type.  */
+  struct type *type = arg1->type ();
+  while (type->code () == TYPE_CODE_REF)
+    type = type->target_type ();
+  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+  arg1 = value_binop (arg1, arg2, std::get<0> (m_storage));
+  /* We need to special-case the result with a range.
+     This is done for the benefit of "ptype".  gdb's Ada support
+     historically used the LHS to set the result type here, so
+     preserve this behavior.  */
+  if (type->code () == TYPE_CODE_RANGE)
+    arg1 = value_cast (type, arg1);
+  return arg1;
+}
+
+value *
+ada_unop_atr_operation::evaluate (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside)
+{
+  struct type *type_arg = nullptr;
+  value *val = nullptr;
+
+  if (std::get<0> (m_storage)->opcode () == OP_TYPE)
+    {
+      value *tem = std::get<0> (m_storage)->evaluate (nullptr, exp,
+						      EVAL_AVOID_SIDE_EFFECTS);
+      type_arg = tem->type ();
+    }
+  else
+    val = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+
+  return ada_unop_atr (exp, noside, std::get<1> (m_storage),
+		       val, type_arg, std::get<2> (m_storage));
+}
+
+value *
+ada_var_msym_value_operation::evaluate_for_cast (struct type *expect_type,
+						 struct expression *exp,
+						 enum noside noside)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value::zero (expect_type, not_lval);
+
+  const bound_minimal_symbol &b = std::get<0> (m_storage);
+  value *val = evaluate_var_msym_value (noside, b.objfile, b.minsym);
+
+  val = ada_value_cast (expect_type, val);
+
+  /* Follow the Ada language semantics that do not allow taking
+     an address of the result of a cast (view conversion in Ada).  */
+  if (val->lval () == lval_memory)
+    {
+      if (val->lazy ())
+	val->fetch_lazy ();
+      val->set_lval (not_lval);
     }
-  else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
-    return fixed_type_info (TYPE_TARGET_TYPE (type));
-  else
-    return NULL;
+  return val;
 }
 
-/* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
-
-int
-ada_is_fixed_point_type (struct type *type)
-{
-  return fixed_type_info (type) != NULL;
+value *
+ada_var_value_operation::evaluate_for_cast (struct type *expect_type,
+					    struct expression *exp,
+					    enum noside noside)
+{
+  value *val = evaluate_var_value (noside,
+				   std::get<0> (m_storage).block,
+				   std::get<0> (m_storage).symbol);
+
+  val = ada_value_cast (expect_type, val);
+
+  /* Follow the Ada language semantics that do not allow taking
+     an address of the result of a cast (view conversion in Ada).  */
+  if (val->lval () == lval_memory)
+    {
+      if (val->lazy ())
+	val->fetch_lazy ();
+      val->set_lval (not_lval);
+    }
+  return val;
 }
 
-/* Return non-zero iff TYPE represents a System.Address type.  */
+value *
+ada_var_value_operation::evaluate (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside)
+{
+  symbol *sym = std::get<0> (m_storage).symbol;
+
+  if (sym->domain () == UNDEF_DOMAIN)
+    /* Only encountered when an unresolved symbol occurs in a
+       context other than a function call, in which case, it is
+       invalid.  */
+    error (_("Unexpected unresolved symbol, %s, during evaluation"),
+	   sym->print_name ());
 
-int
-ada_is_system_address_type (struct type *type)
-{
-  return (TYPE_NAME (type)
-          && strcmp (TYPE_NAME (type), "system__address") == 0);
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      struct type *type = static_unwrap_type (sym->type ());
+      /* Check to see if this is a tagged type.  We also need to handle
+	 the case where the type is a reference to a tagged type, but
+	 we have to be careful to exclude pointers to tagged types.
+	 The latter should be shown as usual (as a pointer), whereas
+	 a reference should mostly be transparent to the user.  */
+      if (ada_is_tagged_type (type, 0)
+	  || (type->code () == TYPE_CODE_REF
+	      && ada_is_tagged_type (type->target_type (), 0)))
+	{
+	  /* Tagged types are a little special in the fact that the real
+	     type is dynamic and can only be determined by inspecting the
+	     object's tag.  This means that we need to get the object's
+	     value first (EVAL_NORMAL) and then extract the actual object
+	     type from its tag.
+
+	     Note that we cannot skip the final step where we extract
+	     the object type from its tag, because the EVAL_NORMAL phase
+	     results in dynamic components being resolved into fixed ones.
+	     This can cause problems when trying to print the type
+	     description of tagged types whose parent has a dynamic size:
+	     We use the type name of the "_parent" component in order
+	     to print the name of the ancestor type in the type description.
+	     If that component had a dynamic size, the resolution into
+	     a fixed type would result in the loss of that type name,
+	     thus preventing us from printing the name of the ancestor
+	     type in the type description.  */
+	  value *arg1 = evaluate (nullptr, exp, EVAL_NORMAL);
+
+	  if (type->code () != TYPE_CODE_REF)
+	    {
+	      struct type *actual_type;
+
+	      actual_type = type_from_tag (ada_value_tag (arg1));
+	      if (actual_type == NULL)
+		/* If, for some reason, we were unable to determine
+		   the actual type from the tag, then use the static
+		   approximation that we just computed as a fallback.
+		   This can happen if the debugging information is
+		   incomplete, for instance.  */
+		actual_type = type;
+	      return value::zero (actual_type, not_lval);
+	    }
+	  else
+	    {
+	      /* In the case of a ref, ada_coerce_ref takes care
+		 of determining the actual type.  But the evaluation
+		 should return a ref as it should be valid to ask
+		 for its address; so rebuild a ref after coerce.  */
+	      arg1 = ada_coerce_ref (arg1);
+	      return value_ref (arg1, TYPE_CODE_REF);
+	    }
+	}
+
+      /* Records and unions for which GNAT encodings have been
+	 generated need to be statically fixed as well.
+	 Otherwise, non-static fixing produces a type where
+	 all dynamic properties are removed, which prevents "ptype"
+	 from being able to completely describe the type.
+	 For instance, a case statement in a variant record would be
+	 replaced by the relevant components based on the actual
+	 value of the discriminants.  */
+      if ((type->code () == TYPE_CODE_STRUCT
+	   && dynamic_template_type (type) != NULL)
+	  || (type->code () == TYPE_CODE_UNION
+	      && ada_find_parallel_type (type, "___XVU") != NULL))
+	return value::zero (to_static_fixed_type (type), not_lval);
+    }
+
+  value *arg1 = var_value_operation::evaluate (expect_type, exp, noside);
+  return ada_to_fixed_value (arg1);
 }
 
-/* Assuming that TYPE is the representation of an Ada fixed-point
-   type, return the target floating-point type to be used to represent
-   of this type during internal computation.  */
+bool
+ada_var_value_operation::resolve (struct expression *exp,
+				  bool deprocedure_p,
+				  bool parse_completion,
+				  innermost_block_tracker *tracker,
+				  struct type *context_type)
+{
+  symbol *sym = std::get<0> (m_storage).symbol;
+  if (sym->domain () == UNDEF_DOMAIN)
+    {
+      block_symbol resolved
+	= ada_resolve_variable (sym, std::get<0> (m_storage).block,
+				context_type, parse_completion,
+				deprocedure_p, tracker);
+      std::get<0> (m_storage) = resolved;
+    }
+
+  if (deprocedure_p
+      && (std::get<0> (m_storage).symbol->type ()->code ()
+	  == TYPE_CODE_FUNC))
+    return true;
 
-static struct type *
-ada_scaling_type (struct type *type)
-{
-  return builtin_type (get_type_arch (type))->builtin_long_double;
+  return false;
 }
 
-/* Assuming that TYPE is the representation of an Ada fixed-point
-   type, return its delta, or NULL if the type is malformed and the
-   delta cannot be determined.  */
+void
+ada_var_value_operation::do_generate_ax (struct expression *exp,
+					 struct agent_expr *ax,
+					 struct axs_value *value,
+					 struct type *cast_type)
+{
+  symbol *sym = std::get<0> (m_storage).symbol;
+
+  if (sym->domain () == UNDEF_DOMAIN)
+    error (_("Unexpected unresolved symbol, %s, during evaluation"),
+	   sym->print_name ());
 
-struct value *
-ada_delta (struct type *type)
+  struct type *type = static_unwrap_type (sym->type ());
+  if (ada_is_tagged_type (type, 0)
+      || (type->code () == TYPE_CODE_REF
+	  && ada_is_tagged_type (type->target_type (), 0)))
+    error (_("Tagged types cannot be handled in agent expressions"));
+
+  if ((type->code () == TYPE_CODE_STRUCT
+       && dynamic_template_type (type) != NULL)
+      || (type->code () == TYPE_CODE_UNION
+	  && ada_find_parallel_type (type, "___XVU") != NULL))
+    error (_("Dynamic types cannot be handled in agent expressions"));
+
+  var_value_operation::do_generate_ax (exp, ax, value, cast_type);
+}
+
+value *
+ada_unop_ind_operation::evaluate (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside)
 {
-  const char *encoding = fixed_type_info (type);
-  struct type *scale_type = ada_scaling_type (type);
+  value *arg1 = std::get<0> (m_storage)->evaluate (expect_type, exp, noside);
 
-  long long num, den;
+  struct type *type = ada_check_typedef (arg1->type ());
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      if (ada_is_array_descriptor_type (type))
+	/* GDB allows dereferencing GNAT array descriptors.  */
+	{
+	  struct type *arrType = ada_type_of_array (arg1, 0);
 
-  if (sscanf (encoding, "_%lld_%lld", &num, &den) < 2)
-    return nullptr;
+	  if (arrType == NULL)
+	    error (_("Attempt to dereference null array pointer."));
+	  return value_at_lazy (arrType, 0);
+	}
+      else if (type->code () == TYPE_CODE_PTR
+	       || type->code () == TYPE_CODE_REF
+	       /* In C you can dereference an array to get the 1st elt.  */
+	       || type->code () == TYPE_CODE_ARRAY)
+	{
+	  /* As mentioned in the OP_VAR_VALUE case, tagged types can
+	     only be determined by inspecting the object's tag.
+	     This means that we need to evaluate completely the
+	     expression in order to get its type.  */
+
+	  if ((type->code () == TYPE_CODE_REF
+	       || type->code () == TYPE_CODE_PTR)
+	      && ada_is_tagged_type (type->target_type (), 0))
+	    {
+	      arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp,
+							EVAL_NORMAL);
+	      type = ada_value_ind (arg1)->type ();
+	    }
+	  else
+	    {
+	      type = to_static_fixed_type
+		(ada_aligned_type
+		 (ada_check_typedef (type->target_type ())));
+	    }
+	  return value::zero (type, lval_memory);
+	}
+      else if (type->code () == TYPE_CODE_INT)
+	{
+	  /* GDB allows dereferencing an int.  */
+	  if (expect_type == NULL)
+	    return value::zero (builtin_type (exp->gdbarch)->builtin_int,
+			       lval_memory);
+	  else
+	    {
+	      expect_type =
+		to_static_fixed_type (ada_aligned_type (expect_type));
+	      return value::zero (expect_type, lval_memory);
+	    }
+	}
+      else
+	error (_("Attempt to take contents of a non-pointer value."));
+    }
+  arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
+  type = ada_check_typedef (arg1->type ());
+
+  if (type->code () == TYPE_CODE_INT)
+    /* GDB allows dereferencing an int.  If we were given
+       the expect_type, then use that as the target type.
+       Otherwise, assume that the target type is an int.  */
+    {
+      if (expect_type != NULL)
+	return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
+					  arg1));
+      else
+	return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
+			      (CORE_ADDR) value_as_address (arg1));
+    }
+
+  if (ada_is_array_descriptor_type (type))
+    /* GDB allows dereferencing GNAT array descriptors.  */
+    return ada_coerce_to_simple_array (arg1);
   else
-    return value_binop (value_from_longest (scale_type, num),
-			value_from_longest (scale_type, den), BINOP_DIV);
+    return ada_value_ind (arg1);
 }
 
-/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
-   factor ('SMALL value) associated with the type.  */
-
-struct value *
-ada_scaling_factor (struct type *type)
+value *
+ada_structop_operation::evaluate (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside)
 {
-  const char *encoding = fixed_type_info (type);
-  struct type *scale_type = ada_scaling_type (type);
+  value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+  const char *str = std::get<1> (m_storage).c_str ();
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      struct type *type;
+      struct type *type1 = arg1->type ();
 
-  long long num0, den0, num1, den1;
-  int n;
+      if (ada_is_tagged_type (type1, 1))
+	{
+	  type = ada_lookup_struct_elt_type (type1, str, 1, 1);
 
-  n = sscanf (encoding, "_%lld_%lld_%lld_%lld",
-	      &num0, &den0, &num1, &den1);
+	  /* If the field is not found, check if it exists in the
+	     extension of this object's type. This means that we
+	     need to evaluate completely the expression.  */
+
+	  if (type == NULL)
+	    {
+	      arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp,
+							EVAL_NORMAL);
+	      arg1 = ada_value_struct_elt (arg1, str, 0);
+	      arg1 = unwrap_value (arg1);
+	      type = ada_to_fixed_value (arg1)->type ();
+	    }
+	}
+      else
+	type = ada_lookup_struct_elt_type (type1, str, 1, 0);
 
-  if (n < 2)
-    return value_from_longest (scale_type, 1);
-  else if (n == 4)
-    return value_binop (value_from_longest (scale_type, num1),
-			value_from_longest (scale_type, den1), BINOP_DIV);
+      return value::zero (ada_aligned_type (type), lval_memory);
+    }
   else
-    return value_binop (value_from_longest (scale_type, num0),
-			value_from_longest (scale_type, den0), BINOP_DIV);
+    {
+      arg1 = ada_value_struct_elt (arg1, str, 0);
+      arg1 = unwrap_value (arg1);
+      return ada_to_fixed_value (arg1);
+    }
+}
+
+value *
+ada_funcall_operation::evaluate (struct type *expect_type,
+				 struct expression *exp,
+				 enum noside noside)
+{
+  const std::vector<operation_up> &args_up = std::get<1> (m_storage);
+  int nargs = args_up.size ();
+  std::vector<value *> argvec (nargs);
+  operation_up &callee_op = std::get<0> (m_storage);
+
+  ada_var_value_operation *avv
+    = dynamic_cast<ada_var_value_operation *> (callee_op.get ());
+  if (avv != nullptr
+      && avv->get_symbol ()->domain () == UNDEF_DOMAIN)
+    error (_("Unexpected unresolved symbol, %s, during evaluation"),
+	   avv->get_symbol ()->print_name ());
+
+  value *callee = callee_op->evaluate (nullptr, exp, noside);
+  for (int i = 0; i < args_up.size (); ++i)
+    argvec[i] = args_up[i]->evaluate (nullptr, exp, noside);
+
+  if (ada_is_constrained_packed_array_type
+      (desc_base_type (callee->type ())))
+    callee = ada_coerce_to_simple_array (callee);
+  else if (callee->type ()->code () == TYPE_CODE_ARRAY
+	   && callee->type ()->field (0).bitsize () != 0)
+    /* This is a packed array that has already been fixed, and
+       therefore already coerced to a simple array.  Nothing further
+       to do.  */
+    ;
+  else if (callee->type ()->code () == TYPE_CODE_REF)
+    {
+      /* Make sure we dereference references so that all the code below
+	 feels like it's really handling the referenced value.  Wrapping
+	 types (for alignment) may be there, so make sure we strip them as
+	 well.  */
+      callee = ada_to_fixed_value (coerce_ref (callee));
+    }
+  else if (callee->type ()->code () == TYPE_CODE_ARRAY
+	   && callee->lval () == lval_memory)
+    callee = value_addr (callee);
+
+  struct type *type = ada_check_typedef (callee->type ());
+
+  /* Ada allows us to implicitly dereference arrays when subscripting
+     them.  So, if this is an array typedef (encoding use for array
+     access types encoded as fat pointers), strip it now.  */
+  if (type->code () == TYPE_CODE_TYPEDEF)
+    type = ada_typedef_target_type (type);
+
+  if (type->code () == TYPE_CODE_PTR)
+    {
+      switch (ada_check_typedef (type->target_type ())->code ())
+	{
+	case TYPE_CODE_FUNC:
+	  type = ada_check_typedef (type->target_type ());
+	  break;
+	case TYPE_CODE_ARRAY:
+	  break;
+	case TYPE_CODE_STRUCT:
+	  if (noside != EVAL_AVOID_SIDE_EFFECTS)
+	    callee = ada_value_ind (callee);
+	  type = ada_check_typedef (type->target_type ());
+	  break;
+	default:
+	  error (_("cannot subscript or call something of type `%s'"),
+		 ada_type_name (callee->type ()));
+	  break;
+	}
+    }
+
+  switch (type->code ())
+    {
+    case TYPE_CODE_FUNC:
+      if (noside == EVAL_AVOID_SIDE_EFFECTS)
+	{
+	  if (type->target_type () == NULL)
+	    error_call_unknown_return_type (NULL);
+	  return value::allocate (type->target_type ());
+	}
+      return call_function_by_hand (callee, expect_type, argvec);
+    case TYPE_CODE_INTERNAL_FUNCTION:
+      if (noside == EVAL_AVOID_SIDE_EFFECTS)
+	/* We don't know anything about what the internal
+	   function might return, but we have to return
+	   something.  */
+	return value::zero (builtin_type (exp->gdbarch)->builtin_int,
+			   not_lval);
+      else
+	return call_internal_function (exp->gdbarch, exp->language_defn,
+				       callee, nargs,
+				       argvec.data ());
+
+    case TYPE_CODE_STRUCT:
+      {
+	int arity;
+
+	arity = ada_array_arity (type);
+	type = ada_array_element_type (type, nargs);
+	if (type == NULL)
+	  error (_("cannot subscript or call a record"));
+	if (arity != nargs)
+	  error (_("wrong number of subscripts; expecting %d"), arity);
+	if (noside == EVAL_AVOID_SIDE_EFFECTS)
+	  return value::zero (ada_aligned_type (type), lval_memory);
+	return
+	  unwrap_value (ada_value_subscript
+			(callee, nargs, argvec.data ()));
+      }
+    case TYPE_CODE_ARRAY:
+      if (noside == EVAL_AVOID_SIDE_EFFECTS)
+	{
+	  type = ada_array_element_type (type, nargs);
+	  if (type == NULL)
+	    error (_("element type of array unknown"));
+	  else
+	    return value::zero (ada_aligned_type (type), lval_memory);
+	}
+      return
+	unwrap_value (ada_value_subscript
+		      (ada_coerce_to_simple_array (callee),
+		       nargs, argvec.data ()));
+    case TYPE_CODE_PTR:     /* Pointer to array */
+      if (noside == EVAL_AVOID_SIDE_EFFECTS)
+	{
+	  type = to_fixed_array_type (type->target_type (), NULL, 1);
+	  type = ada_array_element_type (type, nargs);
+	  if (type == NULL)
+	    error (_("element type of array unknown"));
+	  else
+	    return value::zero (ada_aligned_type (type), lval_memory);
+	}
+      return
+	unwrap_value (ada_value_ptr_subscript (callee, nargs,
+					       argvec.data ()));
+
+    default:
+      error (_("Attempt to index or call something other than an "
+	       "array or function"));
+    }
+}
+
+bool
+ada_funcall_operation::resolve (struct expression *exp,
+				bool deprocedure_p,
+				bool parse_completion,
+				innermost_block_tracker *tracker,
+				struct type *context_type)
+{
+  operation_up &callee_op = std::get<0> (m_storage);
+
+  ada_var_value_operation *avv
+    = dynamic_cast<ada_var_value_operation *> (callee_op.get ());
+  if (avv == nullptr)
+    return false;
+
+  symbol *sym = avv->get_symbol ();
+  if (sym->domain () != UNDEF_DOMAIN)
+    return false;
+
+  const std::vector<operation_up> &args_up = std::get<1> (m_storage);
+  int nargs = args_up.size ();
+  std::vector<value *> argvec (nargs);
+
+  for (int i = 0; i < args_up.size (); ++i)
+    argvec[i] = args_up[i]->evaluate (nullptr, exp, EVAL_AVOID_SIDE_EFFECTS);
+
+  const block *block = avv->get_block ();
+  block_symbol resolved
+    = ada_resolve_funcall (sym, block,
+			   context_type, parse_completion,
+			   nargs, argvec.data (),
+			   tracker);
+
+  std::get<0> (m_storage)
+    = make_operation<ada_var_value_operation> (resolved);
+  return false;
+}
+
+bool
+ada_ternop_slice_operation::resolve (struct expression *exp,
+				     bool deprocedure_p,
+				     bool parse_completion,
+				     innermost_block_tracker *tracker,
+				     struct type *context_type)
+{
+  /* Historically this check was done during resolution, so we
+     continue that here.  */
+  value *v = std::get<0> (m_storage)->evaluate (context_type, exp,
+						EVAL_AVOID_SIDE_EFFECTS);
+  if (ada_is_any_packed_array_type (v->type ()))
+    error (_("cannot slice a packed array"));
+  return false;
+}
+
 }
 
 
 
-                                /* Range types */
+/* Return non-zero iff TYPE represents a System.Address type.  */
+
+int
+ada_is_system_address_type (struct type *type)
+{
+  return (type->name () && strcmp (type->name (), "system__address") == 0);
+}
+
+
+
+				/* Range types */
 
 /* Scan STR beginning at position K for a discriminant name, and
    return the value of that discriminant field of DVAL in *PX.  If
@@ -11536,10 +11264,9 @@ ada_scaling_factor (struct type *type)
 
 static int
 scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
-                    int *pnew_k)
+		    int *pnew_k)
 {
-  static char *bound_buffer = NULL;
-  static size_t bound_buffer_len = 0;
+  static std::string storage;
   const char *pstart, *pend, *bound;
   struct value *bound_val;
 
@@ -11558,15 +11285,12 @@ scan_discrim_bound (const char *str, int
       int len = pend - pstart;
 
       /* Strip __ and beyond.  */
-      GROW_VECT (bound_buffer, bound_buffer_len, len + 1);
-      strncpy (bound_buffer, pstart, len);
-      bound_buffer[len] = '\0';
-
-      bound = bound_buffer;
+      storage = std::string (pstart, len);
+      bound = storage.c_str ();
       k = pend - str;
     }
 
-  bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
+  bound_val = ada_search_struct_field (bound, dval, 0, dval->type ());
   if (bound_val == NULL)
     return 0;
 
@@ -11576,26 +11300,28 @@ scan_discrim_bound (const char *str, int
   return 1;
 }
 
-/* Value of variable named NAME in the current environment.  If
-   no such variable found, then if ERR_MSG is null, returns 0, and
+/* Value of variable named NAME.  Only exact matches are considered.
+   If no such variable found, then if ERR_MSG is null, returns 0, and
    otherwise causes an error with message ERR_MSG.  */
 
 static struct value *
 get_var_value (const char *name, const char *err_msg)
 {
-  lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
+  std::string quoted_name = add_angle_brackets (name);
 
-  std::vector<struct block_symbol> syms;
-  int nsyms = ada_lookup_symbol_list_worker (lookup_name,
-					     get_selected_block (0),
-					     VAR_DOMAIN, &syms, 1);
+  lookup_name_info lookup_name (quoted_name, symbol_name_match_type::FULL);
 
-  if (nsyms != 1)
+  std::vector<struct block_symbol> syms
+    = ada_lookup_symbol_list_worker (lookup_name,
+				     get_selected_block (0),
+				     SEARCH_VFT, 1);
+
+  if (syms.size () != 1)
     {
       if (err_msg == NULL)
-        return 0;
+	return 0;
       else
-        error (("%s"), err_msg);
+	error (("%s"), err_msg);
     }
 
   return value_of_variable (syms[0].symbol, syms[0].block);
@@ -11635,14 +11361,14 @@ to_fixed_range_type (struct type *raw_ty
   const char *subtype_info;
 
   gdb_assert (raw_type != NULL);
-  gdb_assert (TYPE_NAME (raw_type) != NULL);
+  gdb_assert (raw_type->name () != NULL);
 
-  if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
-    base_type = TYPE_TARGET_TYPE (raw_type);
+  if (raw_type->code () == TYPE_CODE_RANGE)
+    base_type = raw_type->target_type ();
   else
     base_type = raw_type;
 
-  name = TYPE_NAME (raw_type);
+  name = raw_type->name ();
   subtype_info = strstr (name, "___XD");
   if (subtype_info == NULL)
     {
@@ -11652,71 +11378,67 @@ to_fixed_range_type (struct type *raw_ty
       if (L < INT_MIN || U > INT_MAX)
 	return raw_type;
       else
-	return create_static_range_type (alloc_type_copy (raw_type), raw_type,
-					 L, U);
+	{
+	  type_allocator alloc (raw_type);
+	  return create_static_range_type (alloc, raw_type, L, U);
+	}
     }
   else
     {
-      static char *name_buf = NULL;
-      static size_t name_len = 0;
       int prefix_len = subtype_info - name;
       LONGEST L, U;
       struct type *type;
       const char *bounds_str;
       int n;
 
-      GROW_VECT (name_buf, name_len, prefix_len + 5);
-      strncpy (name_buf, name, prefix_len);
-      name_buf[prefix_len] = '\0';
-
       subtype_info += 5;
       bounds_str = strchr (subtype_info, '_');
       n = 1;
 
       if (*subtype_info == 'L')
-        {
-          if (!ada_scan_number (bounds_str, n, &L, &n)
-              && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
-            return raw_type;
-          if (bounds_str[n] == '_')
-            n += 2;
-          else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
-            n += 1;
-          subtype_info += 1;
-        }
-      else
-        {
-          strcpy (name_buf + prefix_len, "___L");
-          if (!get_int_var_value (name_buf, L))
-            {
-              lim_warning (_("Unknown lower bound, using 1."));
-              L = 1;
-            }
-        }
+	{
+	  if (!ada_scan_number (bounds_str, n, &L, &n)
+	      && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
+	    return raw_type;
+	  if (bounds_str[n] == '_')
+	    n += 2;
+	  else if (bounds_str[n] == '.')     /* FIXME? SGI Workshop kludge.  */
+	    n += 1;
+	  subtype_info += 1;
+	}
+      else
+	{
+	  std::string name_buf = std::string (name, prefix_len) + "___L";
+	  if (!get_int_var_value (name_buf.c_str (), L))
+	    {
+	      lim_warning (_("Unknown lower bound, using 1."));
+	      L = 1;
+	    }
+	}
 
       if (*subtype_info == 'U')
-        {
-          if (!ada_scan_number (bounds_str, n, &U, &n)
-              && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
-            return raw_type;
-        }
-      else
-        {
-          strcpy (name_buf + prefix_len, "___U");
-          if (!get_int_var_value (name_buf, U))
-            {
-              lim_warning (_("Unknown upper bound, using %ld."), (long) L);
-              U = L;
-            }
-        }
+	{
+	  if (!ada_scan_number (bounds_str, n, &U, &n)
+	      && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
+	    return raw_type;
+	}
+      else
+	{
+	  std::string name_buf = std::string (name, prefix_len) + "___U";
+	  if (!get_int_var_value (name_buf.c_str (), U))
+	    {
+	      lim_warning (_("Unknown upper bound, using %ld."), (long) L);
+	      U = L;
+	    }
+	}
 
-      type = create_static_range_type (alloc_type_copy (raw_type),
-				       base_type, L, U);
+      type_allocator alloc (raw_type);
+      type = create_static_range_type (alloc, base_type, L, U);
       /* create_static_range_type alters the resulting type's length
-         to match the size of the base_type, which is not what we want.
-         Set it back to the original range type's length.  */
-      TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
-      TYPE_NAME (type) = name;
+	 to match the size of the base_type, which is not what we want.
+	 Set it back to the original range type's length.  */
+      type->set_length (raw_type->length ());
+      type->set_name (name);
       return type;
     }
 }
@@ -11730,7 +11452,7 @@ ada_is_range_type_name (const char *name
 }
 
 
-                                /* Modular types */
+				/* Modular types */
 
 /* True iff TYPE is an Ada modular type.  */
 
@@ -11739,9 +11461,9 @@ ada_is_modular_type (struct type *type)
 {
   struct type *subranged_type = get_base_type (type);
 
-  return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
-          && TYPE_CODE (subranged_type) == TYPE_CODE_INT
-          && TYPE_UNSIGNED (subranged_type));
+  return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE
+	  && subranged_type->code () == TYPE_CODE_INT
+	  && subranged_type->is_unsigned ());
 }
 
 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
@@ -11749,7 +11471,14 @@ ada_is_modular_type (struct type *type)
 ULONGEST
 ada_modulus (struct type *type)
 {
-  return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
+  const dynamic_prop &high = type->bounds ()->high;
+
+  if (high.is_constant ())
+    return (ULONGEST) high.const_val () + 1;
+
+  /* If TYPE is unresolved, the high bound might be a location list.  Return
+     0, for lack of a better value to return.  */
+  return 0;
 }
 
 
@@ -11793,7 +11522,7 @@ ada_modulus (struct type *type)
    an Ada83 compiler). As such, we do not include Numeric_Error from
    this list of standard exceptions.  */
 
-static const char *standard_exc[] = {
+static const char * const standard_exc[] = {
   "constraint_error",
   "program_error",
   "storage_error",
@@ -11888,7 +11617,7 @@ ada_has_this_exception_support (const st
      that should be compiled with debugging information.  As a result, we
      expect to find that symbol in the symtabs.  */
 
-  sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
+  sym = standard_lookup (einfo->catch_exception_sym, NULL, SEARCH_VFT);
   if (sym == NULL)
     {
       /* Perhaps we did not find our symbol because the Ada runtime was
@@ -11908,7 +11637,7 @@ ada_has_this_exception_support (const st
       struct bound_minimal_symbol msym
 	= lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
 
-      if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
+      if (msym.minsym && msym.minsym->type () != mst_solib_trampoline)
 	error (_("Your Ada runtime appears to be missing some debugging "
 		 "information.\nCannot insert Ada exception catchpoint "
 		 "in this configuration."));
@@ -11918,20 +11647,17 @@ ada_has_this_exception_support (const st
 
   /* Make sure that the symbol we found corresponds to a function.  */
 
-  if (SYMBOL_CLASS (sym) != LOC_BLOCK)
-    {
-      error (_("Symbol \"%s\" is not a function (class = %d)"),
-	     sym->linkage_name (), SYMBOL_CLASS (sym));
-      return 0;
-    }
+  if (sym->aclass () != LOC_BLOCK)
+    error (_("Symbol \"%s\" is not a function (class = %d)"),
+	   sym->linkage_name (), sym->aclass ());
 
-  sym = standard_lookup (einfo->catch_handlers_sym, NULL, VAR_DOMAIN);
+  sym = standard_lookup (einfo->catch_handlers_sym, NULL, SEARCH_VFT);
   if (sym == NULL)
     {
       struct bound_minimal_symbol msym
 	= lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
 
-      if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
+      if (msym.minsym && msym.minsym->type () != mst_solib_trampoline)
 	error (_("Your Ada runtime appears to be missing some debugging "
 		 "information.\nCannot insert Ada exception catchpoint "
 		 "in this configuration."));
@@ -11941,12 +11667,9 @@ ada_has_this_exception_support (const st
 
   /* Make sure that the symbol we found corresponds to a function.  */
 
-  if (SYMBOL_CLASS (sym) != LOC_BLOCK)
-    {
-      error (_("Symbol \"%s\" is not a function (class = %d)"),
-	     sym->linkage_name (), SYMBOL_CLASS (sym));
-      return 0;
-    }
+  if (sym->aclass () != LOC_BLOCK)
+    error (_("Symbol \"%s\" is not a function (class = %d)"),
+	   sym->linkage_name (), sym->aclass ());
 
   return 1;
 }
@@ -11987,31 +11710,8 @@ ada_exception_support_info_sniffer (void
       return;
     }
 
-  /* Sometimes, it is normal for us to not be able to find the routine
-     we are looking for.  This happens when the program is linked with
-     the shared version of the GNAT runtime, and the program has not been
-     started yet.  Inform the user of these two possible causes if
-     applicable.  */
-
-  if (ada_update_initial_language (language_unknown) != language_ada)
-    error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
-
-  /* If the symbol does not exist, then check that the program is
-     already started, to make sure that shared libraries have been
-     loaded.  If it is not started, this may mean that the symbol is
-     in a shared library.  */
-
-  if (inferior_ptid.pid () == 0)
-    error (_("Unable to insert catchpoint. Try to start the program first."));
-
-  /* At this point, we know that we are debugging an Ada program and
-     that the inferior has been started, but we still are not able to
-     find the run-time symbols.  That can mean that we are in
-     configurable run time mode, or that a-except as been optimized
-     out by the linker...  In any case, at this point it is not worth
-     supporting this feature.  */
-
-  error (_("Cannot insert Ada exception catchpoints in this configuration."));
+  throw_error (NOT_FOUND_ERROR,
+	       _("Could not find Ada runtime exception support"));
 }
 
 /* True iff FRAME is very likely to be that of a function that is
@@ -12020,7 +11720,7 @@ ada_exception_support_info_sniffer (void
    to most users.  */
 
 static int
-is_known_support_routine (struct frame_info *frame)
+is_known_support_routine (frame_info_ptr frame)
 {
   enum language func_lang;
   int i;
@@ -12052,10 +11752,10 @@ is_known_support_routine (struct frame_i
     {
       re_comp (known_runtime_file_name_patterns[i]);
       if (re_exec (lbasename (sal.symtab->filename)))
-        return 1;
-      if (SYMTAB_OBJFILE (sal.symtab) != NULL
-          && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
-        return 1;
+	return 1;
+      if (sal.symtab->compunit ()->objfile () != NULL
+	  && re_exec (objfile_name (sal.symtab->compunit ()->objfile ())))
+	return 1;
     }
 
   /* Check whether the function is a GNAT-generated entity.  */
@@ -12079,15 +11779,15 @@ is_known_support_routine (struct frame_i
    part of the Ada run-time, starting from FI and moving upward.  */
 
 void
-ada_find_printable_frame (struct frame_info *fi)
+ada_find_printable_frame (frame_info_ptr fi)
 {
   for (; fi != NULL; fi = get_prev_frame (fi))
     {
       if (!is_known_support_routine (fi))
-        {
-          select_frame (fi);
-          break;
-        }
+	{
+	  select_frame (fi);
+	  break;
+	}
     }
 
 }
@@ -12113,7 +11813,7 @@ static CORE_ADDR
 ada_unhandled_exception_name_addr_from_raise (void)
 {
   int frame_level;
-  struct frame_info *fi;
+  frame_info_ptr fi;
   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
 
   /* To determine the name of this exception, we need to select
@@ -12133,7 +11833,7 @@ ada_unhandled_exception_name_addr_from_r
 	= find_frame_funname (fi, &func_lang, NULL);
       if (func_name != NULL)
 	{
-          if (strcmp (func_name.get (),
+	  if (strcmp (func_name.get (),
 		      data->exception_info->catch_exception_sym) == 0)
 	    break; /* We found the frame we were looking for...  */
 	}
@@ -12156,33 +11856,32 @@ ada_unhandled_exception_name_addr_from_r
    Return zero if the address could not be computed, or if not relevant.  */
 
 static CORE_ADDR
-ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
-                           struct breakpoint *b)
+ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex)
 {
   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
 
   switch (ex)
     {
       case ada_catch_exception:
-        return (parse_and_eval_address ("e.full_name"));
-        break;
+	return (parse_and_eval_address ("e.full_name"));
+	break;
 
       case ada_catch_exception_unhandled:
-        return data->exception_info->unhandled_exception_name_addr ();
-        break;
+	return data->exception_info->unhandled_exception_name_addr ();
+	break;
 
       case ada_catch_handlers:
-        return 0;  /* The runtimes does not provide access to the exception
+	return 0;  /* The runtimes does not provide access to the exception
 		      name.  */
-        break;
+	break;
 
       case ada_catch_assert:
-        return 0;  /* Exception name is not relevant in this case.  */
-        break;
+	return 0;  /* Exception name is not relevant in this case.  */
+	break;
 
       default:
-        internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
-        break;
+	internal_error (_("unexpected catchpoint type"));
+	break;
     }
 
   return 0; /* Should never be reached.  */
@@ -12214,7 +11913,7 @@ ada_exception_message_1 (void)
 
   e_msg_val = ada_coerce_to_simple_array (e_msg_val);
   gdb_assert (e_msg_val != NULL);
-  e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
+  e_msg_len = e_msg_val->type ()->length ();
 
   /* If the message string is empty, then treat it as if there was
      no exception message.  */
@@ -12222,7 +11921,8 @@ ada_exception_message_1 (void)
     return NULL;
 
   gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
-  read_memory_string (value_address (e_msg_val), e_msg.get (), e_msg_len + 1);
+  read_memory (e_msg_val->address (), (gdb_byte *) e_msg.get (),
+	       e_msg_len);
   e_msg.get ()[e_msg_len] = '\0';
 
   return e_msg;
@@ -12254,14 +11954,13 @@ ada_exception_message (void)
    and zero is returned.  */
 
 static CORE_ADDR
-ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
-                         struct breakpoint *b)
+ada_exception_name_addr (enum ada_exception_catchpoint_kind ex)
 {
   CORE_ADDR result = 0;
 
   try
     {
-      result = ada_exception_name_addr_1 (ex, b);
+      result = ada_exception_name_addr_1 (ex);
     }
 
   catch (const gdb_exception_error &e)
@@ -12290,13 +11989,60 @@ static std::string ada_exception_catchpo
    exception, in order to be able to re-set the condition expression
    when symbols change.  */
 
+/* An instance of this type is used to represent an Ada catchpoint.  */
+
+struct ada_catchpoint : public code_breakpoint
+{
+  ada_catchpoint (struct gdbarch *gdbarch_,
+		  enum ada_exception_catchpoint_kind kind,
+		  const char *cond_string,
+		  bool tempflag,
+		  bool enabled,
+		  bool from_tty,
+		  std::string &&excep_string_)
+    : code_breakpoint (gdbarch_, bp_catchpoint, tempflag, cond_string),
+      m_excep_string (std::move (excep_string_)),
+      m_kind (kind)
+  {
+    /* Unlike most code_breakpoint types, Ada catchpoints are
+       pspace-specific.  */
+    pspace = current_program_space;
+    enable_state = enabled ? bp_enabled : bp_disabled;
+    language = language_ada;
+
+    re_set ();
+  }
+
+  struct bp_location *allocate_location () override;
+  void re_set () override;
+  void check_status (struct bpstat *bs) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  bool print_one (const bp_location **) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+
+private:
+
+  /* A helper function for check_status.  Returns true if we should
+     stop for this breakpoint hit.  If the user specified a specific
+     exception, we only want to cause a stop if the program thrown
+     that exception.  */
+  bool should_stop_exception (const struct bp_location *bl) const;
+
+  /* The name of the specific exception the user specified.  */
+  std::string m_excep_string;
+
+  /* What kind of catchpoint this is.  */
+  enum ada_exception_catchpoint_kind m_kind;
+};
+
 /* An instance of this type is used to represent an Ada catchpoint
    breakpoint location.  */
 
 class ada_catchpoint_location : public bp_location
 {
 public:
-  ada_catchpoint_location (breakpoint *owner)
+  explicit ada_catchpoint_location (ada_catchpoint *owner)
     : bp_location (owner, bp_loc_software_breakpoint)
   {}
 
@@ -12306,112 +12052,93 @@ public:
   expression_up excep_cond_expr;
 };
 
-/* An instance of this type is used to represent an Ada catchpoint.  */
+static struct symtab_and_line ada_exception_sal
+     (enum ada_exception_catchpoint_kind ex);
 
-struct ada_catchpoint : public breakpoint
-{
-  explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
-    : m_kind (kind)
-  {
-  }
-
-  /* The name of the specific exception the user specified.  */
-  std::string excep_string;
+/* Implement the RE_SET method in the structure for all exception
+   catchpoint kinds.  */
 
-  /* What kind of catchpoint this is.  */
-  enum ada_exception_catchpoint_kind m_kind;
-};
+void
+ada_catchpoint::re_set ()
+{
+  std::vector<symtab_and_line> sals;
+  try
+    {
+      struct symtab_and_line sal = ada_exception_sal (m_kind);
+      sals.push_back (sal);
+    }
+  catch (const gdb_exception_error &ex)
+    {
+      /* For NOT_FOUND_ERROR, the breakpoint will be pending.  */
+      if (ex.error != NOT_FOUND_ERROR)
+	throw;
+    }
 
-/* Parse the exception condition string in the context of each of the
-   catchpoint's locations, and store them for later evaluation.  */
+  update_breakpoint_locations (this, pspace, sals, {});
 
-static void
-create_excep_cond_exprs (struct ada_catchpoint *c,
-                         enum ada_exception_catchpoint_kind ex)
-{
-  struct bp_location *bl;
+  /* Reparse the exception conditional expressions.  One for each
+     location.  */
 
   /* Nothing to do if there's no specific exception to catch.  */
-  if (c->excep_string.empty ())
+  if (m_excep_string.empty ())
     return;
 
   /* Same if there are no locations... */
-  if (c->loc == NULL)
+  if (!has_locations ())
     return;
 
   /* Compute the condition expression in text form, from the specific
-     expection we want to catch.  */
+     exception we want to catch.  */
   std::string cond_string
-    = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
+    = ada_exception_catchpoint_cond_string (m_excep_string.c_str (), m_kind);
 
   /* Iterate over all the catchpoint's locations, and parse an
      expression for each.  */
-  for (bl = c->loc; bl != NULL; bl = bl->next)
+  for (bp_location &bl : locations ())
     {
-      struct ada_catchpoint_location *ada_loc
-	= (struct ada_catchpoint_location *) bl;
+      ada_catchpoint_location &ada_loc
+	= static_cast<ada_catchpoint_location &> (bl);
       expression_up exp;
 
-      if (!bl->shlib_disabled)
+      if (!bl.shlib_disabled)
 	{
 	  const char *s;
 
 	  s = cond_string.c_str ();
 	  try
 	    {
-	      exp = parse_exp_1 (&s, bl->address,
-				 block_for_pc (bl->address),
-				 0);
+	      exp = parse_exp_1 (&s, bl.address, block_for_pc (bl.address), 0);
 	    }
 	  catch (const gdb_exception_error &e)
 	    {
 	      warning (_("failed to reevaluate internal exception condition "
 			 "for catchpoint %d: %s"),
-		       c->number, e.what ());
+		       number, e.what ());
 	    }
 	}
 
-      ada_loc->excep_cond_expr = std::move (exp);
+      ada_loc.excep_cond_expr = std::move (exp);
     }
 }
 
-/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
-   structure for all exception catchpoint kinds.  */
-
-static struct bp_location *
-allocate_location_exception (struct breakpoint *self)
-{
-  return new ada_catchpoint_location (self);
-}
-
-/* Implement the RE_SET method in the breakpoint_ops structure for all
+/* Implement the ALLOCATE_LOCATION method in the structure for all
    exception catchpoint kinds.  */
 
-static void
-re_set_exception (struct breakpoint *b)
+struct bp_location *
+ada_catchpoint::allocate_location ()
 {
-  struct ada_catchpoint *c = (struct ada_catchpoint *) b;
-
-  /* Call the base class's method.  This updates the catchpoint's
-     locations.  */
-  bkpt_breakpoint_ops.re_set (b);
-
-  /* Reparse the exception conditional expressions.  One for each
-     location.  */
-  create_excep_cond_exprs (c, c->m_kind);
+  return new ada_catchpoint_location (this);
 }
 
-/* Returns true if we should stop for this breakpoint hit.  If the
-   user specified a specific exception, we only want to cause a stop
-   if the program thrown that exception.  */
+/* See declaration.  */
 
-static int
-should_stop_exception (const struct bp_location *bl)
+bool
+ada_catchpoint::should_stop_exception (const struct bp_location *bl) const
 {
-  struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
+  ada_catchpoint *c = gdb::checked_static_cast<ada_catchpoint *> (bl->owner);
   const struct ada_catchpoint_location *ada_loc
     = (const struct ada_catchpoint_location *) bl;
-  int stop;
+  bool stop;
 
   struct internalvar *var = lookup_internalvar ("_ada_exception");
   if (c->m_kind == ada_catch_assert)
@@ -12438,26 +12165,23 @@ should_stop_exception (const struct bp_l
     }
 
   /* With no specific exception, should always stop.  */
-  if (c->excep_string.empty ())
-    return 1;
+  if (c->m_excep_string.empty ())
+    return true;
 
   if (ada_loc->excep_cond_expr == NULL)
     {
       /* We will have a NULL expression if back when we were creating
 	 the expressions, this location's had failed to parse.  */
-      return 1;
+      return true;
     }
 
-  stop = 1;
+  stop = true;
   try
     {
-      struct value *mark;
-
-      mark = value_mark ();
-      stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
-      value_free_to_mark (mark);
+      scoped_value_mark mark;
+      stop = value_true (ada_loc->excep_cond_expr->evaluate ());
     }
-  catch (const gdb_exception &ex)
+  catch (const gdb_exception_error &ex)
     {
       exception_fprintf (gdb_stderr, ex,
 			 _("Error in testing exception condition:\n"));
@@ -12466,36 +12190,35 @@ should_stop_exception (const struct bp_l
   return stop;
 }
 
-/* Implement the CHECK_STATUS method in the breakpoint_ops structure
-   for all exception catchpoint kinds.  */
+/* Implement the CHECK_STATUS method in the structure for all
+   exception catchpoint kinds.  */
 
-static void
-check_status_exception (bpstat bs)
+void
+ada_catchpoint::check_status (bpstat *bs)
 {
-  bs->stop = should_stop_exception (bs->bp_location_at);
+  bs->stop = should_stop_exception (bs->bp_location_at.get ());
 }
 
-/* Implement the PRINT_IT method in the breakpoint_ops structure
-   for all exception catchpoint kinds.  */
+/* Implement the PRINT_IT method in the structure for all exception
+   catchpoint kinds.  */
 
-static enum print_stop_action
-print_it_exception (bpstat bs)
+enum print_stop_action
+ada_catchpoint::print_it (const bpstat *bs) const
 {
   struct ui_out *uiout = current_uiout;
-  struct breakpoint *b = bs->breakpoint_at;
 
-  annotate_catchpoint (b->number);
+  annotate_catchpoint (number);
 
   if (uiout->is_mi_like_p ())
     {
       uiout->field_string ("reason",
 			   async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
-      uiout->field_string ("disp", bpdisp_text (b->disposition));
+      uiout->field_string ("disp", bpdisp_text (disposition));
     }
 
-  uiout->text (b->disposition == disp_del
+  uiout->text (disposition == disp_del
 	       ? "\nTemporary catchpoint " : "\nCatchpoint ");
-  uiout->field_signed ("bkptno", b->number);
+  print_num_locno (bs, uiout);
   uiout->text (", ");
 
   /* ada_exception_name_addr relies on the selected frame being the
@@ -12505,14 +12228,13 @@ print_it_exception (bpstat bs)
      ada_find_printable_frame).  */
   select_frame (get_current_frame ());
 
-  struct ada_catchpoint *c = (struct ada_catchpoint *) b;
-  switch (c->m_kind)
+  switch (m_kind)
     {
       case ada_catch_exception:
       case ada_catch_exception_unhandled:
       case ada_catch_handlers:
 	{
-	  const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
+	  const CORE_ADDR addr = ada_exception_name_addr (m_kind);
 	  char exception_name[256];
 
 	  if (addr != 0)
@@ -12536,7 +12258,7 @@ print_it_exception (bpstat bs)
 	     it clearer to the user which kind of catchpoint just got
 	     hit.  We used ui_out_text to make sure that this extra
 	     info does not pollute the exception name in the MI case.  */
-	  if (c->m_kind == ada_catch_exception_unhandled)
+	  if (m_kind == ada_catch_exception_unhandled)
 	    uiout->text ("unhandled ");
 	  uiout->field_string ("exception-name", exception_name);
 	}
@@ -12565,14 +12287,13 @@ print_it_exception (bpstat bs)
   return PRINT_SRC_AND_LOC;
 }
 
-/* Implement the PRINT_ONE method in the breakpoint_ops structure
-   for all exception catchpoint kinds.  */
+/* Implement the PRINT_ONE method in the structure for all exception
+   catchpoint kinds.  */
 
-static void
-print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
+bool
+ada_catchpoint::print_one (const bp_location **last_loc) const
 { 
   struct ui_out *uiout = current_uiout;
-  struct ada_catchpoint *c = (struct ada_catchpoint *) b;
   struct value_print_options opts;
 
   get_user_print_options (&opts);
@@ -12581,148 +12302,138 @@ print_one_exception (struct breakpoint *
     uiout->field_skip ("addr");
 
   annotate_field (5);
-  switch (c->m_kind)
+  switch (m_kind)
     {
       case ada_catch_exception:
-        if (!c->excep_string.empty ())
-          {
+	if (!m_excep_string.empty ())
+	  {
 	    std::string msg = string_printf (_("`%s' Ada exception"),
-					     c->excep_string.c_str ());
+					     m_excep_string.c_str ());
 
-            uiout->field_string ("what", msg);
-          }
-        else
-          uiout->field_string ("what", "all Ada exceptions");
-        
-        break;
+	    uiout->field_string ("what", msg);
+	  }
+	else
+	  uiout->field_string ("what", "all Ada exceptions");
+	
+	break;
 
       case ada_catch_exception_unhandled:
-        uiout->field_string ("what", "unhandled Ada exceptions");
-        break;
+	uiout->field_string ("what", "unhandled Ada exceptions");
+	break;
       
       case ada_catch_handlers:
-        if (!c->excep_string.empty ())
-          {
+	if (!m_excep_string.empty ())
+	  {
 	    uiout->field_fmt ("what",
 			      _("`%s' Ada exception handlers"),
-			      c->excep_string.c_str ());
-          }
-        else
+			      m_excep_string.c_str ());
+	  }
+	else
 	  uiout->field_string ("what", "all Ada exceptions handlers");
-        break;
+	break;
 
       case ada_catch_assert:
-        uiout->field_string ("what", "failed Ada assertions");
-        break;
+	uiout->field_string ("what", "failed Ada assertions");
+	break;
 
       default:
-        internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
-        break;
+	internal_error (_("unexpected catchpoint type"));
+	break;
     }
+
+  return true;
 }
 
 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
    for all exception catchpoint kinds.  */
 
-static void
-print_mention_exception (struct breakpoint *b)
+void
+ada_catchpoint::print_mention () const
 {
-  struct ada_catchpoint *c = (struct ada_catchpoint *) b;
   struct ui_out *uiout = current_uiout;
 
-  uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
-                                                 : _("Catchpoint "));
-  uiout->field_signed ("bkptno", b->number);
+  uiout->text (disposition == disp_del ? _("Temporary catchpoint ")
+						 : _("Catchpoint "));
+  uiout->field_signed ("bkptno", number);
   uiout->text (": ");
 
-  switch (c->m_kind)
+  switch (m_kind)
     {
       case ada_catch_exception:
-        if (!c->excep_string.empty ())
+	if (!m_excep_string.empty ())
 	  {
 	    std::string info = string_printf (_("`%s' Ada exception"),
-					      c->excep_string.c_str ());
-	    uiout->text (info.c_str ());
+					      m_excep_string.c_str ());
+	    uiout->text (info);
 	  }
-        else
-          uiout->text (_("all Ada exceptions"));
-        break;
+	else
+	  uiout->text (_("all Ada exceptions"));
+	break;
 
       case ada_catch_exception_unhandled:
-        uiout->text (_("unhandled Ada exceptions"));
-        break;
+	uiout->text (_("unhandled Ada exceptions"));
+	break;
 
       case ada_catch_handlers:
-        if (!c->excep_string.empty ())
+	if (!m_excep_string.empty ())
 	  {
 	    std::string info
 	      = string_printf (_("`%s' Ada exception handlers"),
-			       c->excep_string.c_str ());
-	    uiout->text (info.c_str ());
+			       m_excep_string.c_str ());
+	    uiout->text (info);
 	  }
-        else
-          uiout->text (_("all Ada exceptions handlers"));
-        break;
+	else
+	  uiout->text (_("all Ada exceptions handlers"));
+	break;
 
       case ada_catch_assert:
-        uiout->text (_("failed Ada assertions"));
-        break;
+	uiout->text (_("failed Ada assertions"));
+	break;
 
       default:
-        internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
-        break;
+	internal_error (_("unexpected catchpoint type"));
+	break;
     }
 }
 
-/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
-   for all exception catchpoint kinds.  */
+/* Implement the PRINT_RECREATE method in the structure for all
+   exception catchpoint kinds.  */
 
-static void
-print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
+void
+ada_catchpoint::print_recreate (struct ui_file *fp) const
 {
-  struct ada_catchpoint *c = (struct ada_catchpoint *) b;
-
-  switch (c->m_kind)
+  switch (m_kind)
     {
       case ada_catch_exception:
-	fprintf_filtered (fp, "catch exception");
-	if (!c->excep_string.empty ())
-	  fprintf_filtered (fp, " %s", c->excep_string.c_str ());
+	gdb_printf (fp, "catch exception");
+	if (!m_excep_string.empty ())
+	  gdb_printf (fp, " %s", m_excep_string.c_str ());
 	break;
 
       case ada_catch_exception_unhandled:
-	fprintf_filtered (fp, "catch exception unhandled");
+	gdb_printf (fp, "catch exception unhandled");
 	break;
 
       case ada_catch_handlers:
-	fprintf_filtered (fp, "catch handlers");
+	gdb_printf (fp, "catch handlers");
 	break;
 
       case ada_catch_assert:
-	fprintf_filtered (fp, "catch assert");
+	gdb_printf (fp, "catch assert");
 	break;
 
       default:
-	internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
+	internal_error (_("unexpected catchpoint type"));
     }
-  print_recreate_thread (b, fp);
+  print_recreate_thread (fp);
 }
 
-/* Virtual tables for various breakpoint types.  */
-static struct breakpoint_ops catch_exception_breakpoint_ops;
-static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
-static struct breakpoint_ops catch_assert_breakpoint_ops;
-static struct breakpoint_ops catch_handlers_breakpoint_ops;
-
 /* See ada-lang.h.  */
 
 bool
 is_ada_exception_catchpoint (breakpoint *bp)
 {
-  return (bp->ops == &catch_exception_breakpoint_ops
-	  || bp->ops == &catch_exception_unhandled_breakpoint_ops
-	  || bp->ops == &catch_assert_breakpoint_ops
-	  || bp->ops == &catch_handlers_breakpoint_ops);
+  return dynamic_cast<ada_catchpoint *> (bp) != nullptr;
 }
 
 /* Split the arguments specified in a "catch exception" command.  
@@ -12738,7 +12449,7 @@ is_ada_exception_catchpoint (breakpoint
 static void
 catch_ada_exception_command_split (const char *args,
 				   bool is_catch_handlers_cmd,
-                                   enum ada_exception_catchpoint_kind *ex,
+				   enum ada_exception_catchpoint_kind *ex,
 				   std::string *excep_string,
 				   std::string *cond_string)
 {
@@ -12764,7 +12475,7 @@ catch_ada_exception_command_split (const
       args = skip_spaces (args);
 
       if (args[0] == '\0')
-        error (_("Condition missing after `if' keyword"));
+	error (_("Condition missing after `if' keyword"));
       *cond_string = args;
 
       args += strlen (args);
@@ -12815,46 +12526,19 @@ ada_exception_sym_name (enum ada_excepti
   switch (ex)
     {
       case ada_catch_exception:
-        return (data->exception_info->catch_exception_sym);
-        break;
-      case ada_catch_exception_unhandled:
-        return (data->exception_info->catch_exception_unhandled_sym);
-        break;
-      case ada_catch_assert:
-        return (data->exception_info->catch_assert_sym);
-        break;
-      case ada_catch_handlers:
-        return (data->exception_info->catch_handlers_sym);
-        break;
-      default:
-        internal_error (__FILE__, __LINE__,
-                        _("unexpected catchpoint kind (%d)"), ex);
-    }
-}
-
-/* Return the breakpoint ops "virtual table" used for catchpoints
-   of the EX kind.  */
-
-static const struct breakpoint_ops *
-ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
-{
-  switch (ex)
-    {
-      case ada_catch_exception:
-        return (&catch_exception_breakpoint_ops);
-        break;
+	return (data->exception_info->catch_exception_sym);
+	break;
       case ada_catch_exception_unhandled:
-        return (&catch_exception_unhandled_breakpoint_ops);
-        break;
+	return (data->exception_info->catch_exception_unhandled_sym);
+	break;
       case ada_catch_assert:
-        return (&catch_assert_breakpoint_ops);
-        break;
+	return (data->exception_info->catch_assert_sym);
+	break;
       case ada_catch_handlers:
-        return (&catch_handlers_breakpoint_ops);
-        break;
+	return (data->exception_info->catch_handlers_sym);
+	break;
       default:
-        internal_error (__FILE__, __LINE__,
-                        _("unexpected catchpoint kind (%d)"), ex);
+	internal_error (_("unexpected catchpoint kind (%d)"), ex);
     }
 }
 
@@ -12866,16 +12550,15 @@ ada_exception_breakpoint_ops (enum ada_e
 
 static std::string
 ada_exception_catchpoint_cond_string (const char *excep_string,
-                                      enum ada_exception_catchpoint_kind ex)
+				      enum ada_exception_catchpoint_kind ex)
 {
-  int i;
   bool is_standard_exc = false;
   std::string result;
 
   if (ex == ada_catch_handlers)
     {
       /* For exception handlers catchpoints, the condition string does
-         not use the same parameter as for the other exceptions.  */
+	 not use the same parameter as for the other exceptions.  */
       result = ("long_integer (GNAT_GCC_exception_Access"
 		"(gcc_exception).all.occurrence.id)");
     }
@@ -12901,9 +12584,9 @@ ada_exception_catchpoint_cond_string (co
      breakpoint condition is to use its fully-qualified named:
      e.g. my_package.constraint_error.  */
 
-  for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
+  for (const char *name : standard_exc)
     {
-      if (strcmp (standard_exc [i], excep_string) == 0)
+      if (strcmp (name, excep_string) == 0)
 	{
 	  is_standard_exc = true;
 	  break;
@@ -12920,16 +12603,11 @@ ada_exception_catchpoint_cond_string (co
   return result;
 }
 
-/* Return the symtab_and_line that should be used to insert an exception
-   catchpoint of the TYPE kind.
-
-   ADDR_STRING returns the name of the function where the real
-   breakpoint that implements the catchpoints is set, depending on the
-   type of catchpoint we need to create.  */
+/* Return the symtab_and_line that should be used to insert an
+   exception catchpoint of the TYPE kind.  */
 
 static struct symtab_and_line
-ada_exception_sal (enum ada_exception_catchpoint_kind ex,
-		   std::string *addr_string, const struct breakpoint_ops **ops)
+ada_exception_sal (enum ada_exception_catchpoint_kind ex)
 {
   const char *sym_name;
   struct symbol *sym;
@@ -12940,20 +12618,15 @@ ada_exception_sal (enum ada_exception_ca
   /* Then lookup the function on which we will break in order to catch
      the Ada exceptions requested by the user.  */
   sym_name = ada_exception_sym_name (ex);
-  sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
+  sym = standard_lookup (sym_name, NULL, SEARCH_VFT);
 
   if (sym == NULL)
-    error (_("Catchpoint symbol not found: %s"), sym_name);
+    throw_error (NOT_FOUND_ERROR, _("Catchpoint symbol not found: %s"),
+		 sym_name);
 
-  if (SYMBOL_CLASS (sym) != LOC_BLOCK)
+  if (sym->aclass () != LOC_BLOCK)
     error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
 
-  /* Set ADDR_STRING.  */
-  *addr_string = sym_name;
-
-  /* Set OPS.  */
-  *ops = ada_exception_breakpoint_ops (ex);
-
   return find_function_start_sal (sym, 1);
 }
 
@@ -12975,23 +12648,17 @@ ada_exception_sal (enum ada_exception_ca
 void
 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
 				 enum ada_exception_catchpoint_kind ex_kind,
-				 const std::string &excep_string,
+				 std::string &&excep_string,
 				 const std::string &cond_string,
 				 int tempflag,
-				 int disabled,
+				 int enabled,
 				 int from_tty)
 {
-  std::string addr_string;
-  const struct breakpoint_ops *ops = NULL;
-  struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
-
-  std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
-  init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
-				 ops, tempflag, disabled, from_tty);
-  c->excep_string = excep_string;
-  create_excep_cond_exprs (c.get (), ex_kind);
-  if (!cond_string.empty ())
-    set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty);
+  std::unique_ptr<ada_catchpoint> c
+    (new ada_catchpoint (gdbarch, ex_kind,
+			 cond_string.empty () ? nullptr : cond_string.c_str (),
+			 tempflag, enabled, from_tty,
+			 std::move (excep_string)));
   install_breakpoint (0, std::move (c), 1);
 }
 
@@ -13008,14 +12675,14 @@ catch_ada_exception_command (const char
   std::string excep_string;
   std::string cond_string;
 
-  tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
+  tempflag = command->context () == CATCH_TEMPORARY;
 
   if (!arg)
     arg = "";
   catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
 				     &cond_string);
   create_ada_exception_catchpoint (gdbarch, ex_kind,
-				   excep_string, cond_string,
+				   std::move (excep_string), cond_string,
 				   tempflag, 1 /* enabled */,
 				   from_tty);
 }
@@ -13033,14 +12700,14 @@ catch_ada_handlers_command (const char *
   std::string excep_string;
   std::string cond_string;
 
-  tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
+  tempflag = command->context () == CATCH_TEMPORARY;
 
   if (!arg)
     arg = "";
   catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
 				     &cond_string);
   create_ada_exception_catchpoint (gdbarch, ex_kind,
-				   excep_string, cond_string,
+				   std::move (excep_string), cond_string,
 				   tempflag, 1 /* enabled */,
 				   from_tty);
 }
@@ -13080,7 +12747,7 @@ catch_ada_assert_command_split (const ch
       args += 2;
       args = skip_spaces (args);
       if (args[0] == '\0')
-        error (_("condition missing after `if' keyword"));
+	error (_("condition missing after `if' keyword"));
       cond_string.assign (args);
     }
 
@@ -13101,13 +12768,13 @@ catch_assert_command (const char *arg_en
   int tempflag;
   std::string cond_string;
 
-  tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
+  tempflag = command->context () == CATCH_TEMPORARY;
 
   if (!arg)
     arg = "";
   catch_ada_assert_command_split (arg, cond_string);
   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
-				   "", cond_string,
+				   {}, cond_string,
 				   tempflag, 1 /* enabled */,
 				   from_tty);
 }
@@ -13117,13 +12784,13 @@ catch_assert_command (const char *arg_en
 static int
 ada_is_exception_sym (struct symbol *sym)
 {
-  const char *type_name = TYPE_NAME (SYMBOL_TYPE (sym));
+  const char *type_name = sym->type ()->name ();
 
-  return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
-          && SYMBOL_CLASS (sym) != LOC_BLOCK
-          && SYMBOL_CLASS (sym) != LOC_CONST
-          && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
-          && type_name != NULL && strcmp (type_name, "exception") == 0);
+  return (sym->aclass () != LOC_TYPEDEF
+	  && sym->aclass () != LOC_BLOCK
+	  && sym->aclass () != LOC_CONST
+	  && sym->aclass () != LOC_UNRESOLVED
+	  && type_name != NULL && strcmp (type_name, "exception") == 0);
 }
 
 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
@@ -13133,13 +12800,11 @@ ada_is_exception_sym (struct symbol *sym
 static int
 ada_is_non_standard_exception_sym (struct symbol *sym)
 {
-  int i;
-
   if (!ada_is_exception_sym (sym))
     return 0;
 
-  for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
-    if (strcmp (sym->linkage_name (), standard_exc[i]) == 0)
+  for (const char *name : standard_exc)
+    if (strcmp (sym->linkage_name (), name) == 0)
       return 0;  /* A standard exception.  */
 
   /* Numeric_Error is also a standard exception, so exclude it.
@@ -13204,22 +12869,33 @@ static void
 ada_add_standard_exceptions (compiled_regex *preg,
 			     std::vector<ada_exc_info> *exceptions)
 {
-  int i;
-
-  for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
+  for (const char *name : standard_exc)
     {
-      if (preg == NULL
-	  || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
+      if (preg == NULL || preg->exec (name, 0, NULL, 0) == 0)
 	{
-	  struct bound_minimal_symbol msymbol
-	    = ada_lookup_simple_minsym (standard_exc[i]);
+	  symbol_name_match_type match_type = name_match_type_from_name (name);
+	  lookup_name_info lookup_name (name, match_type);
 
-	  if (msymbol.minsym != NULL)
+	  symbol_name_matcher_ftype *match_name
+	    = ada_get_symbol_name_matcher (lookup_name);
+
+	  /* Iterate over all objfiles irrespective of scope or linker
+	     namespaces so we get all exceptions anywhere in the
+	     progspace.  */
+	  for (objfile *objfile : current_program_space->objfiles ())
 	    {
-	      struct ada_exc_info info
-		= {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
+	      for (minimal_symbol *msymbol : objfile->msymbols ())
+		{
+		  if (match_name (msymbol->linkage_name (), lookup_name,
+				  nullptr)
+		      && msymbol->type () != mst_solib_trampoline)
+		    {
+		      ada_exc_info info
+			= {name, msymbol->value_address (objfile)};
 
-	      exceptions->push_back (info);
+		      exceptions->push_back (info);
+		    }
+		}
 	    }
 	}
     }
@@ -13237,19 +12913,16 @@ ada_add_standard_exceptions (compiled_re
 
 static void
 ada_add_exceptions_from_frame (compiled_regex *preg,
-			       struct frame_info *frame,
+			       frame_info_ptr frame,
 			       std::vector<ada_exc_info> *exceptions)
 {
   const struct block *block = get_frame_block (frame, 0);
 
   while (block != 0)
     {
-      struct block_iterator iter;
-      struct symbol *sym;
-
-      ALL_BLOCK_SYMBOLS (block, iter, sym)
+      for (struct symbol *sym : block_iterator_range (block))
 	{
-	  switch (SYMBOL_CLASS (sym))
+	  switch (sym->aclass ())
 	    {
 	    case LOC_TYPEDEF:
 	    case LOC_BLOCK:
@@ -13259,15 +12932,15 @@ ada_add_exceptions_from_frame (compiled_
 	      if (ada_is_exception_sym (sym))
 		{
 		  struct ada_exc_info info = {sym->print_name (),
-					      SYMBOL_VALUE_ADDRESS (sym)};
+					      sym->value_address ()};
 
 		  exceptions->push_back (info);
 		}
 	    }
 	}
-      if (BLOCK_FUNCTION (block) != NULL)
+      if (block->function () != NULL)
 	break;
-      block = BLOCK_SUPERBLOCK (block);
+      block = block->superblock ();
     }
 }
 
@@ -13314,27 +12987,28 @@ ada_add_global_exceptions (compiled_rege
 			     return name_matches_regex (decoded.c_str (), preg);
 			   },
 			   NULL,
-			   VARIABLES_DOMAIN);
+			   SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
+			   SEARCH_VAR_DOMAIN);
 
+  /* Iterate over all objfiles irrespective of scope or linker namespaces
+     so we get all exceptions anywhere in the progspace.  */
   for (objfile *objfile : current_program_space->objfiles ())
     {
       for (compunit_symtab *s : objfile->compunits ())
 	{
-	  const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
+	  const struct blockvector *bv = s->blockvector ();
 	  int i;
 
 	  for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
 	    {
-	      const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
-	      struct block_iterator iter;
-	      struct symbol *sym;
+	      const struct block *b = bv->block (i);
 
-	      ALL_BLOCK_SYMBOLS (b, iter, sym)
+	      for (struct symbol *sym : block_iterator_range (b))
 		if (ada_is_non_standard_exception_sym (sym)
 		    && name_matches_regex (sym->natural_name (), preg))
 		  {
 		    struct ada_exc_info info
-		      = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
+		      = {sym->print_name (), sym->value_address ()};
 
 		    exceptions->push_back (info);
 		  }
@@ -13417,512 +13091,18 @@ info_exceptions_command (const char *reg
   std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
 
   if (regexp != NULL)
-    printf_filtered
+    gdb_printf
       (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
   else
-    printf_filtered (_("All defined Ada exceptions:\n"));
+    gdb_printf (_("All defined Ada exceptions:\n"));
 
   for (const ada_exc_info &info : exceptions)
-    printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
-}
-
-                                /* Operators */
-/* Information about operators given special treatment in functions
-   below.  */
-/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
-
-#define ADA_OPERATORS \
-    OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
-    OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
-    OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
-    OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
-    OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
-    OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
-    OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
-    OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
-    OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
-    OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
-    OP_DEFN (OP_ATR_POS, 1, 2, 0) \
-    OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
-    OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
-    OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
-    OP_DEFN (UNOP_QUAL, 3, 1, 0) \
-    OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
-    OP_DEFN (OP_OTHERS, 1, 1, 0) \
-    OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
-    OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
-
-static void
-ada_operator_length (const struct expression *exp, int pc, int *oplenp,
-		     int *argsp)
-{
-  switch (exp->elts[pc - 1].opcode)
-    {
-    default:
-      operator_length_standard (exp, pc, oplenp, argsp);
-      break;
-
-#define OP_DEFN(op, len, args, binop) \
-    case op: *oplenp = len; *argsp = args; break;
-      ADA_OPERATORS;
-#undef OP_DEFN
-
-    case OP_AGGREGATE:
-      *oplenp = 3;
-      *argsp = longest_to_int (exp->elts[pc - 2].longconst);
-      break;
-
-    case OP_CHOICES:
-      *oplenp = 3;
-      *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
-      break;
-    }
-}
-
-/* Implementation of the exp_descriptor method operator_check.  */
-
-static int
-ada_operator_check (struct expression *exp, int pos,
-		    int (*objfile_func) (struct objfile *objfile, void *data),
-		    void *data)
-{
-  const union exp_element *const elts = exp->elts;
-  struct type *type = NULL;
-
-  switch (elts[pos].opcode)
-    {
-      case UNOP_IN_RANGE:
-      case UNOP_QUAL:
-	type = elts[pos + 1].type;
-	break;
-
-      default:
-	return operator_check_standard (exp, pos, objfile_func, data);
-    }
-
-  /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
-
-  if (type && TYPE_OBJFILE (type)
-      && (*objfile_func) (TYPE_OBJFILE (type), data))
-    return 1;
-
-  return 0;
-}
-
-static const char *
-ada_op_name (enum exp_opcode opcode)
-{
-  switch (opcode)
-    {
-    default:
-      return op_name_standard (opcode);
-
-#define OP_DEFN(op, len, args, binop) case op: return #op;
-      ADA_OPERATORS;
-#undef OP_DEFN
-
-    case OP_AGGREGATE:
-      return "OP_AGGREGATE";
-    case OP_CHOICES:
-      return "OP_CHOICES";
-    case OP_NAME:
-      return "OP_NAME";
-    }
-}
-
-/* As for operator_length, but assumes PC is pointing at the first
-   element of the operator, and gives meaningful results only for the 
-   Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
-
-static void
-ada_forward_operator_length (struct expression *exp, int pc,
-                             int *oplenp, int *argsp)
-{
-  switch (exp->elts[pc].opcode)
-    {
-    default:
-      *oplenp = *argsp = 0;
-      break;
-
-#define OP_DEFN(op, len, args, binop) \
-    case op: *oplenp = len; *argsp = args; break;
-      ADA_OPERATORS;
-#undef OP_DEFN
-
-    case OP_AGGREGATE:
-      *oplenp = 3;
-      *argsp = longest_to_int (exp->elts[pc + 1].longconst);
-      break;
-
-    case OP_CHOICES:
-      *oplenp = 3;
-      *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
-      break;
-
-    case OP_STRING:
-    case OP_NAME:
-      {
-	int len = longest_to_int (exp->elts[pc + 1].longconst);
-
-	*oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
-	*argsp = 0;
-	break;
-      }
-    }
-}
-
-static int
-ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
-{
-  enum exp_opcode op = exp->elts[elt].opcode;
-  int oplen, nargs;
-  int pc = elt;
-  int i;
-
-  ada_forward_operator_length (exp, elt, &oplen, &nargs);
-
-  switch (op)
-    {
-      /* Ada attributes ('Foo).  */
-    case OP_ATR_FIRST:
-    case OP_ATR_LAST:
-    case OP_ATR_LENGTH:
-    case OP_ATR_IMAGE:
-    case OP_ATR_MAX:
-    case OP_ATR_MIN:
-    case OP_ATR_MODULUS:
-    case OP_ATR_POS:
-    case OP_ATR_SIZE:
-    case OP_ATR_TAG:
-    case OP_ATR_VAL:
-      break;
-
-    case UNOP_IN_RANGE:
-    case UNOP_QUAL:
-      /* XXX: gdb_sprint_host_address, type_sprint */
-      fprintf_filtered (stream, _("Type @"));
-      gdb_print_host_address (exp->elts[pc + 1].type, stream);
-      fprintf_filtered (stream, " (");
-      type_print (exp->elts[pc + 1].type, NULL, stream, 0);
-      fprintf_filtered (stream, ")");
-      break;
-    case BINOP_IN_BOUNDS:
-      fprintf_filtered (stream, " (%d)",
-			longest_to_int (exp->elts[pc + 2].longconst));
-      break;
-    case TERNOP_IN_RANGE:
-      break;
-
-    case OP_AGGREGATE:
-    case OP_OTHERS:
-    case OP_DISCRETE_RANGE:
-    case OP_POSITIONAL:
-    case OP_CHOICES:
-      break;
-
-    case OP_NAME:
-    case OP_STRING:
-      {
-	char *name = &exp->elts[elt + 2].string;
-	int len = longest_to_int (exp->elts[elt + 1].longconst);
-
-	fprintf_filtered (stream, "Text: `%.*s'", len, name);
-	break;
-      }
-
-    default:
-      return dump_subexp_body_standard (exp, stream, elt);
-    }
-
-  elt += oplen;
-  for (i = 0; i < nargs; i += 1)
-    elt = dump_subexp (exp, stream, elt);
-
-  return elt;
+    gdb_printf ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
 }
 
-/* The Ada extension of print_subexp (q.v.).  */
-
-static void
-ada_print_subexp (struct expression *exp, int *pos,
-                  struct ui_file *stream, enum precedence prec)
-{
-  int oplen, nargs, i;
-  int pc = *pos;
-  enum exp_opcode op = exp->elts[pc].opcode;
-
-  ada_forward_operator_length (exp, pc, &oplen, &nargs);
-
-  *pos += oplen;
-  switch (op)
-    {
-    default:
-      *pos -= oplen;
-      print_subexp_standard (exp, pos, stream, prec);
-      return;
-
-    case OP_VAR_VALUE:
-      fputs_filtered (exp->elts[pc + 2].symbol->natural_name (), stream);
-      return;
-
-    case BINOP_IN_BOUNDS:
-      /* XXX: sprint_subexp */
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered (" in ", stream);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered ("'range", stream);
-      if (exp->elts[pc + 1].longconst > 1)
-        fprintf_filtered (stream, "(%ld)",
-                          (long) exp->elts[pc + 1].longconst);
-      return;
-
-    case TERNOP_IN_RANGE:
-      if (prec >= PREC_EQUAL)
-        fputs_filtered ("(", stream);
-      /* XXX: sprint_subexp */
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered (" in ", stream);
-      print_subexp (exp, pos, stream, PREC_EQUAL);
-      fputs_filtered (" .. ", stream);
-      print_subexp (exp, pos, stream, PREC_EQUAL);
-      if (prec >= PREC_EQUAL)
-        fputs_filtered (")", stream);
-      return;
-
-    case OP_ATR_FIRST:
-    case OP_ATR_LAST:
-    case OP_ATR_LENGTH:
-    case OP_ATR_IMAGE:
-    case OP_ATR_MAX:
-    case OP_ATR_MIN:
-    case OP_ATR_MODULUS:
-    case OP_ATR_POS:
-    case OP_ATR_SIZE:
-    case OP_ATR_TAG:
-    case OP_ATR_VAL:
-      if (exp->elts[*pos].opcode == OP_TYPE)
-        {
-          if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
-            LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
-			   &type_print_raw_options);
-          *pos += 3;
-        }
-      else
-        print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fprintf_filtered (stream, "'%s", ada_attribute_name (op));
-      if (nargs > 1)
-        {
-          int tem;
-
-          for (tem = 1; tem < nargs; tem += 1)
-            {
-              fputs_filtered ((tem == 1) ? " (" : ", ", stream);
-              print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-            }
-          fputs_filtered (")", stream);
-        }
-      return;
-
-    case UNOP_QUAL:
-      type_print (exp->elts[pc + 1].type, "", stream, 0);
-      fputs_filtered ("'(", stream);
-      print_subexp (exp, pos, stream, PREC_PREFIX);
-      fputs_filtered (")", stream);
-      return;
-
-    case UNOP_IN_RANGE:
-      /* XXX: sprint_subexp */
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered (" in ", stream);
-      LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
-		     &type_print_raw_options);
-      return;
-
-    case OP_DISCRETE_RANGE:
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered ("..", stream);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      return;
-
-    case OP_OTHERS:
-      fputs_filtered ("others => ", stream);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      return;
-
-    case OP_CHOICES:
-      for (i = 0; i < nargs-1; i += 1)
-	{
-	  if (i > 0)
-	    fputs_filtered ("|", stream);
-	  print_subexp (exp, pos, stream, PREC_SUFFIX);
-	}
-      fputs_filtered (" => ", stream);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      return;
-      
-    case OP_POSITIONAL:
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      return;
-
-    case OP_AGGREGATE:
-      fputs_filtered ("(", stream);
-      for (i = 0; i < nargs; i += 1)
-	{
-	  if (i > 0)
-	    fputs_filtered (", ", stream);
-	  print_subexp (exp, pos, stream, PREC_SUFFIX);
-	}
-      fputs_filtered (")", stream);
-      return;
-    }
-}
-
-/* Table mapping opcodes into strings for printing operators
-   and precedences of the operators.  */
-
-static const struct op_print ada_op_print_tab[] = {
-  {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
-  {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
-  {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
-  {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
-  {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
-  {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
-  {"=", BINOP_EQUAL, PREC_EQUAL, 0},
-  {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
-  {"<=", BINOP_LEQ, PREC_ORDER, 0},
-  {">=", BINOP_GEQ, PREC_ORDER, 0},
-  {">", BINOP_GTR, PREC_ORDER, 0},
-  {"<", BINOP_LESS, PREC_ORDER, 0},
-  {">>", BINOP_RSH, PREC_SHIFT, 0},
-  {"<<", BINOP_LSH, PREC_SHIFT, 0},
-  {"+", BINOP_ADD, PREC_ADD, 0},
-  {"-", BINOP_SUB, PREC_ADD, 0},
-  {"&", BINOP_CONCAT, PREC_ADD, 0},
-  {"*", BINOP_MUL, PREC_MUL, 0},
-  {"/", BINOP_DIV, PREC_MUL, 0},
-  {"rem", BINOP_REM, PREC_MUL, 0},
-  {"mod", BINOP_MOD, PREC_MUL, 0},
-  {"**", BINOP_EXP, PREC_REPEAT, 0},
-  {"@", BINOP_REPEAT, PREC_REPEAT, 0},
-  {"-", UNOP_NEG, PREC_PREFIX, 0},
-  {"+", UNOP_PLUS, PREC_PREFIX, 0},
-  {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
-  {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
-  {"abs ", UNOP_ABS, PREC_PREFIX, 0},
-  {".all", UNOP_IND, PREC_SUFFIX, 1},
-  {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
-  {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
-  {NULL, OP_NULL, PREC_SUFFIX, 0}
-};
-
-enum ada_primitive_types {
-  ada_primitive_type_int,
-  ada_primitive_type_long,
-  ada_primitive_type_short,
-  ada_primitive_type_char,
-  ada_primitive_type_float,
-  ada_primitive_type_double,
-  ada_primitive_type_void,
-  ada_primitive_type_long_long,
-  ada_primitive_type_long_double,
-  ada_primitive_type_natural,
-  ada_primitive_type_positive,
-  ada_primitive_type_system_address,
-  ada_primitive_type_storage_offset,
-  nr_ada_primitive_types
-};
-
-static void
-ada_language_arch_info (struct gdbarch *gdbarch,
-			struct language_arch_info *lai)
-{
-  const struct builtin_type *builtin = builtin_type (gdbarch);
-
-  lai->primitive_type_vector
-    = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
-			      struct type *);
-
-  lai->primitive_type_vector [ada_primitive_type_int]
-    = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
-			 0, "integer");
-  lai->primitive_type_vector [ada_primitive_type_long]
-    = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
-			 0, "long_integer");
-  lai->primitive_type_vector [ada_primitive_type_short]
-    = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
-			 0, "short_integer");
-  lai->string_char_type
-    = lai->primitive_type_vector [ada_primitive_type_char]
-    = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
-  lai->primitive_type_vector [ada_primitive_type_float]
-    = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
-		       "float", gdbarch_float_format (gdbarch));
-  lai->primitive_type_vector [ada_primitive_type_double]
-    = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
-		       "long_float", gdbarch_double_format (gdbarch));
-  lai->primitive_type_vector [ada_primitive_type_long_long]
-    = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
-			 0, "long_long_integer");
-  lai->primitive_type_vector [ada_primitive_type_long_double]
-    = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
-		       "long_long_float", gdbarch_long_double_format (gdbarch));
-  lai->primitive_type_vector [ada_primitive_type_natural]
-    = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
-			 0, "natural");
-  lai->primitive_type_vector [ada_primitive_type_positive]
-    = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
-			 0, "positive");
-  lai->primitive_type_vector [ada_primitive_type_void]
-    = builtin->builtin_void;
-
-  lai->primitive_type_vector [ada_primitive_type_system_address]
-    = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
-				      "void"));
-  TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
-    = "system__address";
-
-  /* Create the equivalent of the System.Storage_Elements.Storage_Offset
-     type.  This is a signed integral type whose size is the same as
-     the size of addresses.  */
-  {
-    unsigned int addr_length = TYPE_LENGTH
-      (lai->primitive_type_vector [ada_primitive_type_system_address]);
-
-    lai->primitive_type_vector [ada_primitive_type_storage_offset]
-      = arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
-			   "storage_offset");
-  }
-
-  lai->bool_type_symbol = NULL;
-  lai->bool_type_default = builtin->builtin_bool;
-}
 
 				/* Language vector */
 
-/* Not really used, but needed in the ada_language_defn.  */
-
-static void
-emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
-{
-  ada_emit_char (c, type, stream, quoter, 1);
-}
-
-static int
-parse (struct parser_state *ps)
-{
-  warnings_issued = 0;
-  return ada_parse (ps);
-}
-
-static const struct exp_descriptor ada_exp_descriptor = {
-  ada_print_subexp,
-  ada_operator_length,
-  ada_operator_check,
-  ada_op_name,
-  ada_dump_subexp_body,
-  ada_evaluate_subexp
-};
-
 /* symbol_name_matcher_ftype adapter for wild_match.  */
 
 static bool
@@ -13940,7 +13120,51 @@ do_full_match (const char *symbol_search
 	       const lookup_name_info &lookup_name,
 	       completion_match_result *comp_match_res)
 {
-  return full_match (symbol_search_name, ada_lookup_name (lookup_name));
+  const char *lname = lookup_name.ada ().lookup_name ().c_str ();
+
+  /* If both symbols start with "_ada_", just let the loop below
+     handle the comparison.  However, if only the symbol name starts
+     with "_ada_", skip the prefix and let the match proceed as
+     usual.  */
+  if (startswith (symbol_search_name, "_ada_")
+      && !startswith (lname, "_ada"))
+    symbol_search_name += 5;
+  /* Likewise for ghost entities.  */
+  if (startswith (symbol_search_name, "___ghost_")
+      && !startswith (lname, "___ghost_"))
+    symbol_search_name += 9;
+
+  int uscore_count = 0;
+  while (*lname != '\0')
+    {
+      if (*symbol_search_name != *lname)
+	{
+	  if (*symbol_search_name == 'B' && uscore_count == 2
+	      && symbol_search_name[1] == '_')
+	    {
+	      symbol_search_name += 2;
+	      while (isdigit (*symbol_search_name))
+		++symbol_search_name;
+	      if (symbol_search_name[0] == '_'
+		  && symbol_search_name[1] == '_')
+		{
+		  symbol_search_name += 2;
+		  continue;
+		}
+	    }
+	  return false;
+	}
+
+      if (*symbol_search_name == '_')
+	++uscore_count;
+      else
+	uscore_count = 0;
+
+      ++symbol_search_name;
+      ++lname;
+    }
+
+  return is_name_suffix (symbol_search_name);
 }
 
 /* symbol_name_matcher_ftype for exact (verbatim) matches.  */
@@ -13957,9 +13181,9 @@ do_exact_match (const char *symbol_searc
 
 ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
 {
-  const std::string &user_name = lookup_name.name ();
+  std::string_view user_name = lookup_name.name ();
 
-  if (user_name[0] == '<')
+  if (!user_name.empty () && user_name[0] == '<')
     {
       if (user_name.back () == '>')
 	m_encoded_name = user_name.substr (1, user_name.size () - 2);
@@ -13974,15 +13198,13 @@ ada_lookup_name_info::ada_lookup_name_in
     {
       m_verbatim_p = false;
 
-      m_encoded_p = user_name.find ("__") != std::string::npos;
+      m_encoded_p = user_name.find ("__") != std::string_view::npos;
 
       if (!m_encoded_p)
 	{
-	  const char *folded = ada_fold_name (user_name.c_str ());
-	  const char *encoded = ada_encode_1 (folded, false);
-	  if (encoded != NULL)
-	    m_encoded_name = encoded;
-	  else
+	  const char *folded = ada_fold_name (user_name);
+	  m_encoded_name = ada_encode_1 (folded, false);
+	  if (m_encoded_name.empty ())
 	    m_encoded_name = user_name;
 	}
       else
@@ -13998,6 +13220,8 @@ ada_lookup_name_info::ada_lookup_name_in
       else
 	m_standard_p = false;
 
+      m_decoded_name = ada_decode (m_encoded_name.c_str (), true, false, false);
+
       /* If the name contains a ".", then the user is entering a fully
 	 qualified entity name, and the match must not be done in wild
 	 mode.  Similarly, if the user wants to complete what looks
@@ -14033,12 +13257,12 @@ literal_symbol_name_matcher (const char
 			     const lookup_name_info &lookup_name,
 			     completion_match_result *comp_match_res)
 {
-  const std::string &name = lookup_name.name ();
+  std::string_view name_view = lookup_name.name ();
 
-  int cmp = (lookup_name.completion_mode ()
-	     ? strncmp (symbol_search_name, name.c_str (), name.size ())
-	     : strcmp (symbol_search_name, name.c_str ()));
-  if (cmp == 0)
+  if (lookup_name.completion_mode ()
+      ? (strncmp (symbol_search_name, name_view.data (),
+		  name_view.size ()) == 0)
+      : symbol_search_name == name_view)
     {
       if (comp_match_res != NULL)
 	comp_match_res->set_match (symbol_search_name);
@@ -14048,7 +13272,7 @@ literal_symbol_name_matcher (const char
     return false;
 }
 
-/* Implement the "la_get_symbol_name_matcher" language_defn method for
+/* Implement the "get_symbol_name_matcher" language_defn method for
    Ada.  */
 
 static symbol_name_matcher_ftype *
@@ -14070,156 +13294,529 @@ ada_get_symbol_name_matcher (const looku
     }
 }
 
-/* Implement the "la_read_var_value" language_defn method for Ada.  */
+/* Class representing the Ada language.  */
 
-static struct value *
-ada_read_var_value (struct symbol *var, const struct block *var_block,
-		    struct frame_info *frame)
+class ada_language : public language_defn
 {
-  /* The only case where default_read_var_value is not sufficient
-     is when VAR is a renaming...  */
-  if (frame != nullptr)
+public:
+  ada_language ()
+    : language_defn (language_ada)
+  { /* Nothing.  */ }
+
+  /* See language.h.  */
+
+  const char *name () const override
+  { return "ada"; }
+
+  /* See language.h.  */
+
+  const char *natural_name () const override
+  { return "Ada"; }
+
+  /* See language.h.  */
+
+  const std::vector<const char *> &filename_extensions () const override
+  {
+    static const std::vector<const char *> extensions
+      = { ".adb", ".ads", ".a", ".ada", ".dg" };
+    return extensions;
+  }
+
+  /* Print an array element index using the Ada syntax.  */
+
+  void print_array_index (struct type *index_type,
+			  LONGEST index,
+			  struct ui_file *stream,
+			  const value_print_options *options) const override
+  {
+    struct value *index_value = val_atr (index_type, index);
+
+    value_print (index_value, stream, options);
+    gdb_printf (stream, " => ");
+  }
+
+  /* Implement the "read_var_value" language_defn method for Ada.  */
+
+  struct value *read_var_value (struct symbol *var,
+				const struct block *var_block,
+				frame_info_ptr frame) const override
+  {
+    /* The only case where default_read_var_value is not sufficient
+       is when VAR is a renaming...  */
+    if (frame != nullptr)
+      {
+	const struct block *frame_block = get_frame_block (frame, NULL);
+	if (frame_block != nullptr && ada_is_renaming_symbol (var))
+	  return ada_read_renaming_var_value (var, frame_block);
+      }
+
+    /* This is a typical case where we expect the default_read_var_value
+       function to work.  */
+    return language_defn::read_var_value (var, var_block, frame);
+  }
+
+  /* See language.h.  */
+  bool symbol_printing_suppressed (struct symbol *symbol) const override
+  {
+    return symbol->is_artificial ();
+  }
+
+  /* See language.h.  */
+  struct value *value_string (struct gdbarch *gdbarch,
+			      const char *ptr, ssize_t len) const override
+  {
+    struct type *type = language_string_char_type (this, gdbarch);
+    value *val = ::value_string (ptr, len, type);
+    /* VAL will be a TYPE_CODE_STRING, but Ada only knows how to print
+       strings that are arrays of characters, so fix the type now.  */
+    gdb_assert (val->type ()->code () == TYPE_CODE_STRING);
+    val->type ()->set_code (TYPE_CODE_ARRAY);
+    return val;
+  }
+
+  /* See language.h.  */
+  void language_arch_info (struct gdbarch *gdbarch,
+			   struct language_arch_info *lai) const override
+  {
+    const struct builtin_type *builtin = builtin_type (gdbarch);
+
+    /* Helper function to allow shorter lines below.  */
+    auto add = [&] (struct type *t)
     {
-      const struct block *frame_block = get_frame_block (frame, NULL);
-      if (frame_block != nullptr && ada_is_renaming_symbol (var))
-	return ada_read_renaming_var_value (var, frame_block);
-    }
+      lai->add_primitive_type (t);
+    };
 
-  /* This is a typical case where we expect the default_read_var_value
-     function to work.  */
-  return default_read_var_value (var, var_block, frame);
-}
+    type_allocator alloc (gdbarch);
+    add (init_integer_type (alloc, gdbarch_int_bit (gdbarch),
+			    0, "integer"));
+    add (init_integer_type (alloc, gdbarch_long_bit (gdbarch),
+			    0, "long_integer"));
+    add (init_integer_type (alloc, gdbarch_short_bit (gdbarch),
+			    0, "short_integer"));
+    struct type *char_type = init_character_type (alloc, TARGET_CHAR_BIT,
+						  1, "character");
+    lai->set_string_char_type (char_type);
+    add (char_type);
+    add (init_character_type (alloc, 16, 1, "wide_character"));
+    add (init_character_type (alloc, 32, 1, "wide_wide_character"));
+    add (init_float_type (alloc, gdbarch_float_bit (gdbarch),
+			  "float", gdbarch_float_format (gdbarch)));
+    add (init_float_type (alloc, gdbarch_double_bit (gdbarch),
+			  "long_float", gdbarch_double_format (gdbarch)));
+    add (init_integer_type (alloc, gdbarch_long_long_bit (gdbarch),
+			    0, "long_long_integer"));
+    add (init_integer_type (alloc, 128, 0, "long_long_long_integer"));
+    add (init_integer_type (alloc, 128, 1, "unsigned_long_long_long_integer"));
+    add (init_float_type (alloc, gdbarch_long_double_bit (gdbarch),
+			  "long_long_float",
+			  gdbarch_long_double_format (gdbarch)));
+    add (init_integer_type (alloc, gdbarch_int_bit (gdbarch),
+			    0, "natural"));
+    add (init_integer_type (alloc, gdbarch_int_bit (gdbarch),
+			    0, "positive"));
+    add (builtin->builtin_void);
+
+    struct type *system_addr_ptr
+      = lookup_pointer_type (alloc.new_type (TYPE_CODE_VOID, TARGET_CHAR_BIT,
+					     "void"));
+    system_addr_ptr->set_name ("system__address");
+    add (system_addr_ptr);
+
+    /* Create the equivalent of the System.Storage_Elements.Storage_Offset
+       type.  This is a signed integral type whose size is the same as
+       the size of addresses.  */
+    unsigned int addr_length = system_addr_ptr->length ();
+    add (init_integer_type (alloc, addr_length * HOST_CHAR_BIT, 0,
+			    "storage_offset"));
 
-static const char *ada_extensions[] =
-{
-  ".adb", ".ads", ".a", ".ada", ".dg", NULL
-};
+    lai->set_bool_type (builtin->builtin_bool);
+  }
 
-extern const struct language_defn ada_language_defn = {
-  "ada",                        /* Language name */
-  "Ada",
-  language_ada,
-  range_check_off,
-  case_sensitive_on,            /* Yes, Ada is case-insensitive, but
-                                   that's not quite what this means.  */
-  array_row_major,
-  macro_expansion_no,
-  ada_extensions,
-  &ada_exp_descriptor,
-  parse,
-  resolve,
-  ada_printchar,                /* Print a character constant */
-  ada_printstr,                 /* Function to print string constant */
-  emit_char,                    /* Function to print single char (not used) */
-  ada_print_type,               /* Print a type using appropriate syntax */
-  ada_print_typedef,            /* Print a typedef using appropriate syntax */
-  ada_val_print,                /* Print a value using appropriate syntax */
-  ada_value_print,              /* Print a top-level value */
-  ada_read_var_value,		/* la_read_var_value */
-  NULL,                         /* Language specific skip_trampoline */
-  NULL,                         /* name_of_this */
-  true,                         /* la_store_sym_names_in_linkage_form_p */
-  ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
-  basic_lookup_transparent_type,        /* lookup_transparent_type */
-  ada_la_decode,                /* Language specific symbol demangler */
-  ada_sniff_from_mangled_name,
-  NULL,                         /* Language specific
-				   class_name_from_physname */
-  ada_op_print_tab,             /* expression operators for printing */
-  0,                            /* c-style arrays */
-  1,                            /* String lower bound */
-  ada_get_gdb_completer_word_break_characters,
-  ada_collect_symbol_completion_matches,
-  ada_language_arch_info,
-  ada_print_array_index,
-  default_pass_by_reference,
-  ada_watch_location_expression,
-  ada_get_symbol_name_matcher,	/* la_get_symbol_name_matcher */
-  ada_iterate_over_symbols,
-  default_search_name_hash,
-  &ada_varobj_ops,
-  NULL,
-  NULL,
-  ada_is_string_type,
-  "(...)"			/* la_struct_too_deep_ellipsis */
-};
+  /* See language.h.  */
 
-/* Command-list for the "set/show ada" prefix command.  */
-static struct cmd_list_element *set_ada_list;
-static struct cmd_list_element *show_ada_list;
+  bool iterate_over_symbols
+	(const struct block *block, const lookup_name_info &name,
+	 domain_search_flags domain,
+	 gdb::function_view<symbol_found_callback_ftype> callback) const override
+  {
+    std::vector<struct block_symbol> results
+      = ada_lookup_symbol_list_worker (name, block, domain, 0);
+    for (block_symbol &sym : results)
+      {
+	if (!callback (&sym))
+	  return false;
+      }
 
-/* Implement the "set ada" prefix command.  */
+    return true;
+  }
 
-static void
-set_ada_command (const char *arg, int from_tty)
-{
-  printf_unfiltered (_(\
-"\"set ada\" must be followed by the name of a setting.\n"));
-  help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
-}
+  /* See language.h.  */
+  bool sniff_from_mangled_name
+       (const char *mangled,
+	gdb::unique_xmalloc_ptr<char> *out) const override
+  {
+    std::string demangled = ada_decode (mangled);
 
-/* Implement the "show ada" prefix command.  */
+    *out = NULL;
 
-static void
-show_ada_command (const char *args, int from_tty)
-{
-  cmd_show_list (show_ada_list, from_tty, "");
-}
+    if (demangled != mangled && demangled[0] != '<')
+      {
+	/* Set the gsymbol language to Ada, but still return 0.
+	   Two reasons for that:
 
-static void
-initialize_ada_catchpoint_ops (void)
-{
-  struct breakpoint_ops *ops;
+	   1. For Ada, we prefer computing the symbol's decoded name
+	   on the fly rather than pre-compute it, in order to save
+	   memory (Ada projects are typically very large).
+
+	   2. There are some areas in the definition of the GNAT
+	   encoding where, with a bit of bad luck, we might be able
+	   to decode a non-Ada symbol, generating an incorrect
+	   demangled name (Eg: names ending with "TB" for instance
+	   are identified as task bodies and so stripped from
+	   the decoded name returned).
+
+	   Returning true, here, but not setting *DEMANGLED, helps us get
+	   a little bit of the best of both worlds.  Because we're last,
+	   we should not affect any of the other languages that were
+	   able to demangle the symbol before us; we get to correctly
+	   tag Ada symbols as such; and even if we incorrectly tagged a
+	   non-Ada symbol, which should be rare, any routing through the
+	   Ada language should be transparent (Ada tries to behave much
+	   like C/C++ with non-Ada symbols).  */
+	return true;
+      }
 
-  initialize_breakpoint_ops ();
+    return false;
+  }
 
-  ops = &catch_exception_breakpoint_ops;
-  *ops = bkpt_breakpoint_ops;
-  ops->allocate_location = allocate_location_exception;
-  ops->re_set = re_set_exception;
-  ops->check_status = check_status_exception;
-  ops->print_it = print_it_exception;
-  ops->print_one = print_one_exception;
-  ops->print_mention = print_mention_exception;
-  ops->print_recreate = print_recreate_exception;
-
-  ops = &catch_exception_unhandled_breakpoint_ops;
-  *ops = bkpt_breakpoint_ops;
-  ops->allocate_location = allocate_location_exception;
-  ops->re_set = re_set_exception;
-  ops->check_status = check_status_exception;
-  ops->print_it = print_it_exception;
-  ops->print_one = print_one_exception;
-  ops->print_mention = print_mention_exception;
-  ops->print_recreate = print_recreate_exception;
-
-  ops = &catch_assert_breakpoint_ops;
-  *ops = bkpt_breakpoint_ops;
-  ops->allocate_location = allocate_location_exception;
-  ops->re_set = re_set_exception;
-  ops->check_status = check_status_exception;
-  ops->print_it = print_it_exception;
-  ops->print_one = print_one_exception;
-  ops->print_mention = print_mention_exception;
-  ops->print_recreate = print_recreate_exception;
-
-  ops = &catch_handlers_breakpoint_ops;
-  *ops = bkpt_breakpoint_ops;
-  ops->allocate_location = allocate_location_exception;
-  ops->re_set = re_set_exception;
-  ops->check_status = check_status_exception;
-  ops->print_it = print_it_exception;
-  ops->print_one = print_one_exception;
-  ops->print_mention = print_mention_exception;
-  ops->print_recreate = print_recreate_exception;
-}
+  /* See language.h.  */
+
+  gdb::unique_xmalloc_ptr<char> demangle_symbol (const char *mangled,
+						 int options) const override
+  {
+    return make_unique_xstrdup (ada_decode (mangled).c_str ());
+  }
+
+  /* See language.h.  */
+
+  void print_type (struct type *type, const char *varstring,
+		   struct ui_file *stream, int show, int level,
+		   const struct type_print_options *flags) const override
+  {
+    ada_print_type (type, varstring, stream, show, level, flags);
+  }
+
+  /* See language.h.  */
+
+  const char *word_break_characters (void) const override
+  {
+    return ada_completer_word_break_characters;
+  }
+
+  /* See language.h.  */
+
+  void collect_symbol_completion_matches (completion_tracker &tracker,
+					  complete_symbol_mode mode,
+					  symbol_name_match_type name_match_type,
+					  const char *text, const char *word,
+					  enum type_code code) const override
+  {
+    const struct block *b, *surrounding_static_block = 0;
+
+    gdb_assert (code == TYPE_CODE_UNDEF);
+
+    lookup_name_info lookup_name (text, name_match_type, true);
+
+    /* First, look at the partial symtab symbols.  */
+    expand_symtabs_matching (NULL,
+			     lookup_name,
+			     NULL,
+			     NULL,
+			     SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
+			     SEARCH_ALL);
+
+    /* At this point scan through the misc symbol vectors and add each
+       symbol you find to the list.  Eventually we want to ignore
+       anything that isn't a text symbol (everything else will be
+       handled by the psymtab code above).  */
+
+    for (objfile *objfile : current_program_space->objfiles ())
+      {
+	for (minimal_symbol *msymbol : objfile->msymbols ())
+	  {
+	    QUIT;
+
+	    if (completion_skip_symbol (mode, msymbol))
+	      continue;
+
+	    language symbol_language = msymbol->language ();
+
+	    /* Ada minimal symbols won't have their language set to Ada.  If
+	       we let completion_list_add_name compare using the
+	       default/C-like matcher, then when completing e.g., symbols in a
+	       package named "pck", we'd match internal Ada symbols like
+	       "pckS", which are invalid in an Ada expression, unless you wrap
+	       them in '<' '>' to request a verbatim match.
+
+	       Unfortunately, some Ada encoded names successfully demangle as
+	       C++ symbols (using an old mangling scheme), such as "name__2Xn"
+	       -> "Xn::name(void)" and thus some Ada minimal symbols end up
+	       with the wrong language set.  Paper over that issue here.  */
+	    if (symbol_language == language_unknown
+		|| symbol_language == language_cplus)
+	      symbol_language = language_ada;
+
+	    completion_list_add_name (tracker,
+				      symbol_language,
+				      msymbol->linkage_name (),
+				      lookup_name, text, word);
+	  }
+      }
+
+    /* Search upwards from currently selected frame (so that we can
+       complete on local vars.  */
+
+    for (b = get_selected_block (0); b != NULL; b = b->superblock ())
+      {
+	if (!b->superblock ())
+	  surrounding_static_block = b;   /* For elmin of dups */
+
+	for (struct symbol *sym : block_iterator_range (b))
+	  {
+	    if (completion_skip_symbol (mode, sym))
+	      continue;
+
+	    completion_list_add_name (tracker,
+				      sym->language (),
+				      sym->linkage_name (),
+				      lookup_name, text, word);
+	  }
+      }
+
+    /* Go through the symtabs and check the externs and statics for
+       symbols which match.  */
+
+    for (objfile *objfile : current_program_space->objfiles ())
+      {
+	for (compunit_symtab *s : objfile->compunits ())
+	  {
+	    QUIT;
+	    b = s->blockvector ()->global_block ();
+	    for (struct symbol *sym : block_iterator_range (b))
+	      {
+		if (completion_skip_symbol (mode, sym))
+		  continue;
+
+		completion_list_add_name (tracker,
+					  sym->language (),
+					  sym->linkage_name (),
+					  lookup_name, text, word);
+	      }
+	  }
+      }
+
+    for (objfile *objfile : current_program_space->objfiles ())
+      {
+	for (compunit_symtab *s : objfile->compunits ())
+	  {
+	    QUIT;
+	    b = s->blockvector ()->static_block ();
+	    /* Don't do this block twice.  */
+	    if (b == surrounding_static_block)
+	      continue;
+	    for (struct symbol *sym : block_iterator_range (b))
+	      {
+		if (completion_skip_symbol (mode, sym))
+		  continue;
+
+		completion_list_add_name (tracker,
+					  sym->language (),
+					  sym->linkage_name (),
+					  lookup_name, text, word);
+	      }
+	  }
+      }
+  }
+
+  /* See language.h.  */
+
+  gdb::unique_xmalloc_ptr<char> watch_location_expression
+	(struct type *type, CORE_ADDR addr) const override
+  {
+    type = check_typedef (check_typedef (type)->target_type ());
+    std::string name = type_to_string (type);
+    return xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr));
+  }
+
+  /* See language.h.  */
+
+  void value_print (struct value *val, struct ui_file *stream,
+		    const struct value_print_options *options) const override
+  {
+    return ada_value_print (val, stream, options);
+  }
+
+  /* See language.h.  */
+
+  void value_print_inner
+	(struct value *val, struct ui_file *stream, int recurse,
+	 const struct value_print_options *options) const override
+  {
+    return ada_value_print_inner (val, stream, recurse, options);
+  }
+
+  /* See language.h.  */
+
+  struct block_symbol lookup_symbol_nonlocal
+	(const char *name, const struct block *block,
+	 const domain_search_flags domain) const override
+  {
+    struct block_symbol sym;
+
+    sym = ada_lookup_symbol (name,
+			     (block == nullptr
+			      ? nullptr
+			      : block->static_block ()),
+			     domain);
+    if (sym.symbol != NULL)
+      return sym;
+
+    /* If we haven't found a match at this point, try the primitive
+       types.  In other languages, this search is performed before
+       searching for global symbols in order to short-circuit that
+       global-symbol search if it happens that the name corresponds
+       to a primitive type.  But we cannot do the same in Ada, because
+       it is perfectly legitimate for a program to declare a type which
+       has the same name as a standard type.  If looking up a type in
+       that situation, we have traditionally ignored the primitive type
+       in favor of user-defined types.  This is why, unlike most other
+       languages, we search the primitive types this late and only after
+       having searched the global symbols without success.  */
+
+    if ((domain & SEARCH_TYPE_DOMAIN) != 0)
+      {
+	struct gdbarch *gdbarch;
+
+	if (block == NULL)
+	  gdbarch = current_inferior ()->arch ();
+	else
+	  gdbarch = block->gdbarch ();
+	sym.symbol
+	  = language_lookup_primitive_type_as_symbol (this, gdbarch, name);
+	if (sym.symbol != NULL)
+	  return sym;
+      }
+
+    return {};
+  }
+
+  /* See language.h.  */
+
+  int parser (struct parser_state *ps) const override
+  {
+    warnings_issued = 0;
+    return ada_parse (ps);
+  }
+
+  /* See language.h.  */
+
+  void emitchar (int ch, struct type *chtype,
+		 struct ui_file *stream, int quoter) const override
+  {
+    ada_emit_char (ch, chtype, stream, quoter, 1);
+  }
+
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+		  struct ui_file *stream) const override
+  {
+    ada_printchar (ch, chtype, stream);
+  }
+
+  /* See language.h.  */
+
+  void printstr (struct ui_file *stream, struct type *elttype,
+		 const gdb_byte *string, unsigned int length,
+		 const char *encoding, int force_ellipses,
+		 const struct value_print_options *options) const override
+  {
+    ada_printstr (stream, elttype, string, length, encoding,
+		  force_ellipses, options);
+  }
+
+  /* See language.h.  */
+
+  void print_typedef (struct type *type, struct symbol *new_symbol,
+		      struct ui_file *stream) const override
+  {
+    ada_print_typedef (type, new_symbol, stream);
+  }
+
+  /* See language.h.  */
+
+  bool is_string_type_p (struct type *type) const override
+  {
+    return ada_is_string_type (type);
+  }
+
+  /* See language.h.  */
+
+  bool is_array_like (struct type *type) const override
+  {
+    return (ada_is_constrained_packed_array_type (type)
+	    || ada_is_array_descriptor_type (type));
+  }
+
+  /* See language.h.  */
+
+  struct value *to_array (struct value *val) const override
+  { return ada_coerce_to_simple_array (val); }
+
+  /* See language.h.  */
+
+  const char *struct_too_deep_ellipsis () const override
+  { return "(...)"; }
+
+  /* See language.h.  */
+
+  bool c_style_arrays_p () const override
+  { return false; }
+
+  /* See language.h.  */
+
+  bool store_sym_names_in_linkage_form_p () const override
+  { return true; }
+
+  /* See language.h.  */
+
+  const struct lang_varobj_ops *varobj_ops () const override
+  { return &ada_varobj_ops; }
+
+protected:
+  /* See language.h.  */
+
+  symbol_name_matcher_ftype *get_symbol_name_matcher_inner
+	(const lookup_name_info &lookup_name) const override
+  {
+    return ada_get_symbol_name_matcher (lookup_name);
+  }
+};
+
+/* Single instance of the Ada language class.  */
+
+static ada_language ada_language_defn;
+
+/* Command-list for the "set/show ada" prefix command.  */
+static struct cmd_list_element *set_ada_list;
+static struct cmd_list_element *show_ada_list;
 
 /* This module's 'new_objfile' observer.  */
 
 static void
 ada_new_objfile_observer (struct objfile *objfile)
 {
-  ada_clear_symbol_cache ();
+  ada_clear_symbol_cache (objfile->pspace);
 }
 
 /* This module's 'free_objfile' observer.  */
@@ -14227,27 +13824,45 @@ ada_new_objfile_observer (struct objfile
 static void
 ada_free_objfile_observer (struct objfile *objfile)
 {
-  ada_clear_symbol_cache ();
+  ada_clear_symbol_cache (objfile->pspace);
 }
 
-void
-_initialize_ada_language (void)
+/* Charsets known to GNAT.  */
+static const char * const gnat_source_charsets[] =
 {
-  initialize_ada_catchpoint_ops ();
-
-  add_prefix_cmd ("ada", no_class, set_ada_command,
-                  _("Prefix command for changing Ada-specific settings."),
-                  &set_ada_list, "set ada ", 0, &setlist);
+  /* Note that code below assumes that the default comes first.
+     Latin-1 is the default here, because that is also GNAT's
+     default.  */
+  "ISO-8859-1",
+  "ISO-8859-2",
+  "ISO-8859-3",
+  "ISO-8859-4",
+  "ISO-8859-5",
+  "ISO-8859-15",
+  "CP437",
+  "CP850",
+  /* Note that this value is special-cased in the encoder and
+     decoder.  */
+  ada_utf8,
+  nullptr
+};
 
-  add_prefix_cmd ("ada", no_class, show_ada_command,
-                  _("Generic command for showing Ada-specific settings."),
-                  &show_ada_list, "show ada ", 0, &showlist);
+void _initialize_ada_language ();
+void
+_initialize_ada_language ()
+{
+  add_setshow_prefix_cmd
+    ("ada", no_class,
+     _("Prefix command for changing Ada-specific settings."),
+     _("Generic command for showing Ada-specific settings."),
+     &set_ada_list, &show_ada_list,
+     &setlist, &showlist);
 
   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
-                           &trust_pad_over_xvs, _("\
+			   &trust_pad_over_xvs, _("\
 Enable or disable an optimization trusting PAD types over XVS types."), _("\
 Show whether an optimization trusting PAD types over XVS types is activated."),
-                           _("\
+			   _("\
 This is related to the encoding used by the GNAT compiler.  The debugger\n\
 should normally trust the contents of PAD types, but certain older versions\n\
 of GNAT have a bug that sometimes causes the information in the PAD type\n\
@@ -14255,7 +13870,7 @@ to be incorrect.  Turning this setting \
 work around this bug.  It is always safe to turn this option \"off\", but\n\
 this incurs a slight performance penalty, so it is recommended to NOT change\n\
 this option to \"off\" unless necessary."),
-                            NULL, NULL, &set_ada_list, &show_ada_list);
+			    NULL, NULL, &set_ada_list, &show_ada_list);
 
   add_setshow_boolean_cmd ("print-signatures", class_vars,
 			   &print_signatures, _("\
@@ -14265,6 +13880,17 @@ Show whether the output of formal and re
 overloads selection menu is activated."),
 			   NULL, NULL, NULL, &set_ada_list, &show_ada_list);
 
+  ada_source_charset = gnat_source_charsets[0];
+  add_setshow_enum_cmd ("source-charset", class_files,
+			gnat_source_charsets,
+			&ada_source_charset,  _("\
+Set the Ada source character set."), _("\
+Show the Ada source character set."), _("\
+The character set used for Ada source files.\n\
+This must correspond to the '-gnati' or '-gnatW' option passed to GNAT."),
+			nullptr, nullptr,
+			&set_ada_list, &show_ada_list);
+
   add_catch_command ("exception", _("\
 Catch Ada exceptions, when raised.\n\
 Usage: catch exception [ARG] [if CONDITION]\n\
@@ -14289,7 +13915,7 @@ With an argument, catch only exceptions
 CONDITION is a boolean expression that is evaluated to see whether the\n\
 exception should cause a stop."),
 		     catch_ada_handlers_command,
-                     catch_ada_completer,
+		     catch_ada_completer,
 		     CATCH_PERMANENT,
 		     CATCH_TEMPORARY);
   add_catch_command ("assert", _("\
@@ -14298,19 +13924,10 @@ Usage: catch assert [if CONDITION]\n\
 CONDITION is a boolean expression that is evaluated to see whether the\n\
 exception should cause a stop."),
 		     catch_assert_command,
-                     NULL,
+		     NULL,
 		     CATCH_PERMANENT,
 		     CATCH_TEMPORARY);
 
-  varsize_limit = 65536;
-  add_setshow_uinteger_cmd ("varsize-limit", class_support,
-			    &varsize_limit, _("\
-Set the maximum number of bytes allowed in a variable-size object."), _("\
-Show the maximum number of bytes allowed in a variable-size object."), _("\
-Attempts to access an object whose size is not a compile-time constant\n\
-and exceeds this limit will cause an error."),
-			    NULL, NULL, &setlist, &showlist);
-
   add_info ("exceptions", info_exceptions_command,
 	    _("\
 List all Ada exception names.\n\
@@ -14318,15 +13935,11 @@ Usage: info exceptions [REGEXP]\n\
 If a regular expression is passed as an argument, only those matching\n\
 the regular expression are listed."));
 
-  add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
-		  _("Set Ada maintenance-related variables."),
-                  &maint_set_ada_cmdlist, "maintenance set ada ",
-                  0/*allow-unknown*/, &maintenance_set_cmdlist);
-
-  add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
-		  _("Show Ada maintenance-related variables."),
-                  &maint_show_ada_cmdlist, "maintenance show ada ",
-                  0/*allow-unknown*/, &maintenance_show_cmdlist);
+  add_setshow_prefix_cmd ("ada", class_maintenance,
+			  _("Set Ada maintenance-related variables."),
+			  _("Show Ada maintenance-related variables."),
+			  &maint_set_ada_cmdlist, &maint_show_ada_cmdlist,
+			  &maintenance_set_cmdlist, &maintenance_show_cmdlist);
 
   add_setshow_boolean_cmd
     ("ignore-descriptive-types", class_maintenance,
@@ -14338,11 +13951,18 @@ When enabled, the debugger will stop usi
 DWARF attribute."),
      NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
 
-  decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
+  decoded_names_store = htab_create_alloc (256, htab_hash_string,
+					   htab_eq_string,
 					   NULL, xcalloc, xfree);
 
   /* The ada-lang observers.  */
-  gdb::observers::new_objfile.attach (ada_new_objfile_observer);
-  gdb::observers::free_objfile.attach (ada_free_objfile_observer);
-  gdb::observers::inferior_exit.attach (ada_inferior_exit);
+  gdb::observers::new_objfile.attach (ada_new_objfile_observer, "ada-lang");
+  gdb::observers::all_objfiles_removed.attach (ada_clear_symbol_cache,
+					       "ada-lang");
+  gdb::observers::free_objfile.attach (ada_free_objfile_observer, "ada-lang");
+  gdb::observers::inferior_exit.attach (ada_inferior_exit, "ada-lang");
+
+#ifdef GDB_SELF_TEST
+  selftests::register_test ("ada-decode", ada_decode_tests);
+#endif
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-lang.h ./gdb/ada-lang.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-lang.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ada-lang.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Ada language support definitions for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,7 +20,7 @@
 #if !defined (ADA_LANG_H)
 #define ADA_LANG_H 1
 
-struct frame_info;
+class frame_info_ptr;
 struct inferior;
 struct type_print_options;
 struct parser_state;
@@ -54,8 +54,8 @@ struct parser_state;
    "___finalizer[.$a-zA-Z0-9_]*$",
 
 /* The maximum number of frame levels searched for non-local,
- * non-global symbols.  This limit exists as a precaution to prevent
- * infinite search loops when the stack is screwed up.  */
+   non-global symbols.  This limit exists as a precaution to prevent
+   infinite search loops when the stack is screwed up.  */
 #define MAX_ENCLOSING_FRAME_LEVELS 7
 
 /* Maximum number of steps followed in looking for the ultimate
@@ -85,17 +85,17 @@ enum ada_renaming_category
     ADA_NOT_RENAMING,
 
     /* For symbols declared
-         Foo : TYPE renamed OBJECT;  */
+	 Foo : TYPE renamed OBJECT;  */
     ADA_OBJECT_RENAMING,
 
     /* For symbols declared
-         Foo : exception renames EXCEPTION;  */
+	 Foo : exception renames EXCEPTION;  */
     ADA_EXCEPTION_RENAMING,
     /* For packages declared
-          package Foo renames PACKAGE; */
+	  package Foo renames PACKAGE; */
     ADA_PACKAGE_RENAMING,
     /* For subprograms declared
-          SUBPROGRAM_SPEC renames SUBPROGRAM;
+	  SUBPROGRAM_SPEC renames SUBPROGRAM;
        (Currently not used).  */
     ADA_SUBPROGRAM_RENAMING
   };
@@ -149,30 +149,28 @@ struct ada_task_info
   int base_cpu;
 };
 
-extern void ada_ensure_varsize_limit (const struct type *type);
-
 extern int ada_get_field_index (const struct type *type,
-                                const char *field_name,
-                                int maybe_missing);
+				const char *field_name,
+				int maybe_missing);
 
 extern int ada_parse (struct parser_state *);    /* Defined in ada-exp.y */
 
-                        /* Defined in ada-typeprint.c */
+			/* Defined in ada-typeprint.c */
 extern void ada_print_type (struct type *, const char *, struct ui_file *, int,
-                            int, const struct type_print_options *);
+			    int, const struct type_print_options *);
 
 extern void ada_print_typedef (struct type *type, struct symbol *new_symbol,
 			       struct ui_file *stream);
 
-extern void ada_val_print (struct type *, int, CORE_ADDR,
-			   struct ui_file *, int,
-			   struct value *,
-			   const struct value_print_options *);
+/* Implement la_value_print_inner for Ada.  */
+
+extern void ada_value_print_inner (struct value *, struct ui_file *, int,
+				   const struct value_print_options *);
 
 extern void ada_value_print (struct value *, struct ui_file *,
 			     const struct value_print_options *);
 
-                                /* Defined in ada-lang.c */
+				/* Defined in ada-lang.c */
 
 extern void ada_emit_char (int, struct type *, struct ui_file *, int, int);
 
@@ -183,12 +181,12 @@ extern void ada_printstr (struct ui_file
 			  const struct value_print_options *);
 
 struct value *ada_convert_actual (struct value *actual,
-                                  struct type *formal_type0);
+				  struct type *formal_type0);
 
 extern bool ada_is_access_to_unconstrained_array (struct type *type);
 
 extern struct value *ada_value_subscript (struct value *, int,
-                                          struct value **);
+					  struct value **);
 
 extern void ada_fixup_array_indexes_type (struct type *index_desc_type);
 
@@ -204,8 +202,6 @@ extern int ada_is_simple_array_type (str
 
 extern int ada_is_array_descriptor_type (struct type *);
 
-extern int ada_is_bogus_array_descriptor (struct type *);
-
 extern LONGEST ada_discrete_type_low_bound (struct type *);
 
 extern LONGEST ada_discrete_type_high_bound (struct type *);
@@ -216,24 +212,44 @@ extern struct type *ada_get_decoded_type
 
 extern const char *ada_decode_symbol (const struct general_symbol_info *);
 
-extern std::string ada_decode (const char*);
+/* Decode the GNAT-encoded name NAME, returning the decoded name.  If
+   the name does not appear to be GNAT-encoded, then the result
+   depends on WRAP.  If WRAP is true (the default), then the result is
+   simply wrapped in <...>.  If WRAP is false, then the empty string
+   will be returned.
+
+   When OPERATORS is false, operator names will not be decoded.  By
+   default, they are decoded, e.g., 'Oadd' will be transformed to
+   '"+"'.
+
+   When WIDE is false, wide characters will be left as-is.  By
+   default, they converted from their hex encoding to the host
+   charset.  */
+extern std::string ada_decode (const char *name, bool wrap = true,
+			       bool operators = true,
+			       bool wide = true);
 
-extern int ada_lookup_symbol_list (const char *, const struct block *,
-                                   domain_enum,
-				   std::vector<struct block_symbol> *);
+extern std::vector<struct block_symbol> ada_lookup_symbol_list
+     (const char *, const struct block *, domain_search_flags);
 
 extern struct block_symbol ada_lookup_symbol (const char *,
 					      const struct block *,
-					      domain_enum);
+					      domain_search_flags);
 
 extern void ada_lookup_encoded_symbol
-  (const char *name, const struct block *block, domain_enum domain,
+  (const char *name, const struct block *block, domain_search_flags domain,
    struct block_symbol *symbol_info);
 
-extern struct bound_minimal_symbol ada_lookup_simple_minsym (const char *);
+extern struct bound_minimal_symbol ada_lookup_simple_minsym (const char *,
+							     objfile *);
 
 extern int ada_scan_number (const char *, int, LONGEST *, int *);
 
+extern struct value *ada_value_primitive_field (struct value *arg1,
+						int offset,
+						int fieldno,
+						struct type *arg_type);
+
 extern struct type *ada_parent_type (struct type *);
 
 extern int ada_is_ignored_field (struct type *, int);
@@ -242,8 +258,8 @@ extern int ada_is_constrained_packed_arr
 
 extern struct value *ada_value_primitive_packed_val (struct value *,
 						     const gdb_byte *,
-                                                     long, int, int,
-                                                     struct type *);
+						     long, int, int,
+						     struct type *);
 
 extern struct type *ada_coerce_to_simple_array_type (struct type *);
 
@@ -255,7 +271,7 @@ extern int ada_is_tagged_type (struct ty
 
 extern int ada_is_tag_type (struct type *);
 
-extern const char *ada_tag_name (struct value *);
+extern gdb::unique_xmalloc_ptr<char> ada_tag_name (struct value *);
 
 extern struct value *ada_tag_value_at_base_address (struct value *obj);
 
@@ -276,20 +292,13 @@ extern struct type *ada_aligned_type (st
 extern const gdb_byte *ada_aligned_value_addr (struct type *,
 					       const gdb_byte *);
 
-extern int ada_is_fixed_point_type (struct type *);
-
 extern int ada_is_system_address_type (struct type *);
 
-extern struct value *ada_delta (struct type *);
-
-extern struct value *ada_scaling_factor (struct type *);
-
-extern int ada_which_variant_applies (struct type *, struct type *,
-				      const gdb_byte *);
+extern int ada_which_variant_applies (struct type *, struct value *);
 
 extern struct type *ada_to_fixed_type (struct type *, const gdb_byte *,
 				       CORE_ADDR, struct value *,
-                                       int check_tag);
+				       int check_tag);
 
 extern struct value *ada_to_fixed_value (struct value *val);
 
@@ -304,7 +313,7 @@ extern int ada_name_prefix_len (const ch
 extern const char *ada_type_name (struct type *);
 
 extern struct type *ada_find_parallel_type (struct type *,
-                                            const char *suffix);
+					    const char *suffix);
 
 extern bool get_int_var_value (const char *, LONGEST &value);
 
@@ -314,7 +323,7 @@ extern struct type *ada_get_base_type (s
 
 extern struct type *ada_check_typedef (struct type *);
 
-extern char *ada_encode (const char *);
+extern std::string ada_encode (const char *, bool fold = true);
 
 extern const char *ada_enum_name (const char *);
 
@@ -332,16 +341,14 @@ extern enum ada_renaming_category ada_pa
 						      const char **,
 						      int *, const char **);
 
-extern void ada_find_printable_frame (struct frame_info *fi);
+extern void ada_find_printable_frame (frame_info_ptr fi);
 
-extern char *ada_breakpoint_rewrite (char *, int *);
-
-extern char *ada_main_name (void);
+extern const char *ada_main_name ();
 
 extern void create_ada_exception_catchpoint
   (struct gdbarch *gdbarch, enum ada_exception_catchpoint_kind ex_kind,
-   const std::string &excep_string, const std::string &cond_string, int tempflag,
-   int disabled, int from_tty);
+   std::string &&excep_string, const std::string &cond_string, int tempflag,
+   int enabled, int from_tty);
 
 /* Return true if BP is an Ada catchpoint.  */
 
@@ -371,9 +378,10 @@ extern struct ada_task_info *ada_get_tas
 
 extern int ada_get_task_number (thread_info *thread);
 
-typedef void (ada_task_list_iterator_ftype) (struct ada_task_info *task);
+typedef gdb::function_view<void (struct ada_task_info *task)>
+  ada_task_list_iterator_ftype;
 extern void iterate_over_live_ada_tasks
-  (ada_task_list_iterator_ftype *iterator);
+  (ada_task_list_iterator_ftype iterator);
 
 extern const char *ada_get_tcb_types_info (void);
 
@@ -381,4 +389,50 @@ extern void print_ada_task_info (struct
 				 const char *taskno_str,
 				 struct inferior *inf);
 
+/* Look for a symbol for an overloaded operator for the operation OP.
+   PARSE_COMPLETION is true if currently parsing for completion.
+   NARGS and ARGVEC describe the arguments to the call.  Returns a
+   "null" block_symbol if no such operator is found.  */
+
+extern block_symbol ada_find_operator_symbol (enum exp_opcode op,
+					      bool parse_completion,
+					      int nargs, value *argvec[]);
+
+/* Resolve a function call, selecting among possible function symbols.
+   SYM and BLOCK are passed to ada_lookup_symbol_list.  CONTEXT_TYPE
+   describes the calling context.  PARSE_COMPLETION is true if
+   currently parsing for completion.  NARGS and ARGVEC describe the
+   arguments to the call.  This returns the chosen symbol and will
+   update TRACKER accordingly.  */
+
+extern block_symbol ada_resolve_funcall (struct symbol *sym,
+					 const struct block *block,
+					 struct type *context_type,
+					 bool parse_completion,
+					 int nargs, value *argvec[],
+					 innermost_block_tracker *tracker);
+
+/* Resolve a symbol reference, selecting among possible values.  SYM
+   and BLOCK are passed to ada_lookup_symbol_list.  CONTEXT_TYPE
+   describes the calling context.  PARSE_COMPLETION is true if
+   currently parsing for completion.  If DEPROCEDURE_P is nonzero,
+   then a symbol that names a zero-argument function will be passed
+   through ada_resolve_function.  This returns the chosen symbol and
+   will update TRACKER accordingly.  */
+
+extern block_symbol ada_resolve_variable (struct symbol *sym,
+					  const struct block *block,
+					  struct type *context_type,
+					  bool parse_completion,
+					  int deprocedure_p,
+					  innermost_block_tracker *tracker);
+
+/* The type of nth index in arrays of given type (n numbering from 1).
+   Does not examine memory.  Throws an error if N is invalid or TYPE
+   is not an array type.  NAME is the name of the Ada attribute being
+   evaluated ('range, 'first, 'last, or 'length); it is used in building
+   the error message.  */
+extern struct type *ada_index_type (struct type *type, int n,
+				    const char *name);
+
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-lex.c ./gdb/ada-lex.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-lex.c	2019-12-11 01:52:52.000000000 +0000
+++ ./gdb/ada-lex.c	2024-02-01 01:52:09.000000000 +0000
@@ -7,8 +7,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 1
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -53,7 +53,6 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -84,27 +83,17 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
+#endif /* ! C99 */
 
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
+#endif /* ! FLEXINT_H */
 
-#ifdef YY_USE_CONST
+/* TODO: this is always defined, so inline it */
 #define yyconst const
+
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yyconst
+#define yynoreturn
 #endif
 
 /* Returned upon end-of-file. */
@@ -140,7 +129,15 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -152,6 +149,11 @@ typedef unsigned int flex_uint32_t;
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
 extern int yyleng;
 
 extern FILE *yyin, *yyout;
@@ -161,13 +163,14 @@ extern FILE *yyin, *yyout;
 #define EOB_ACT_LAST_MATCH 2
 
     #define YY_LESS_LINENO(n)
+    #define YY_LINENO_REWIND_TO(ptr)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
 	do \
 		{ \
 		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
+        yy_size_t yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
 		*yy_cp = (yy_hold_char); \
 		YY_RESTORE_YY_MORE_OFFSET \
@@ -178,11 +181,6 @@ extern FILE *yyin, *yyout;
 
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -195,7 +193,7 @@ struct yy_buffer_state
 	/* Size of input buffer in bytes, not including room for EOB
 	 * characters.
 	 */
-	yy_size_t yy_buf_size;
+	int yy_buf_size;
 
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
@@ -251,7 +249,7 @@ struct yy_buffer_state
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 
 /* We provide macros for accessing buffer states in case in the
  * future we want to put the buffer states in a more general
@@ -274,7 +272,7 @@ static int yy_n_chars;		/* number of cha
 int yyleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
+static char *yy_c_buf_p = NULL;
 static int yy_init = 0;		/* whether we need to initialize */
 static int yy_start = 0;	/* start state number */
 
@@ -331,12 +329,12 @@ void yyfree (void *  );
 
 /* Begin user sect3 */
 
-#define yywrap(n) 1
+#define yywrap() (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 
 typedef unsigned char YY_CHAR;
 
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+FILE *yyin = NULL, *yyout = NULL;
 
 typedef int yy_state_type;
 
@@ -345,25 +343,28 @@ extern int yylineno;
 int yylineno = 1;
 
 extern char *yytext;
+#ifdef yytext_ptr
+#undef yytext_ptr
+#endif
 #define yytext_ptr yytext
 
 static yy_state_type yy_get_previous_state (void );
 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
 static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[]  );
+static void yynoreturn yy_fatal_error (yyconst char* msg  );
 
 /* Done after the current pattern has been matched and before the
  * corresponding action - sets up yytext.
  */
 #define YY_DO_BEFORE_ACTION \
 	(yytext_ptr) = yy_bp; \
-	yyleng = (size_t) (yy_cp - yy_bp); \
+	yyleng = (int) (yy_cp - yy_bp); \
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 55
-#define YY_END_OF_BUFFER 56
+#define YY_NUM_RULES 54
+#define YY_END_OF_BUFFER 55
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -371,284 +372,295 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[207] =
+static yyconst flex_int16_t yy_accept[220] =
     {   0,
-        0,    0,    0,    0,   56,   54,    1,    1,   15,   53,
-       43,   54,   45,   46,   43,   44,   43,   43,   43,    4,
-        4,   43,   43,   43,   43,   52,   49,   49,   49,   49,
-       49,   49,   49,   49,   49,   49,   49,   42,    0,   14,
-        0,   53,    0,    0,    0,    0,    0,    0,    0,   37,
-        2,    0,   36,    0,   48,   48,   39,    0,    0,    4,
-        0,    0,   51,   38,   40,    0,   35,   41,    0,    0,
-       49,    0,   49,   49,   49,   49,   49,   16,   22,   49,
-       49,   49,   49,   27,   49,   49,   49,   49,   49,   49,
-        0,   14,    0,   12,   12,   34,    0,    2,    0,   48,
-
-       48,    0,    9,    0,    3,    7,    0,   49,    0,    0,
-        0,   49,   19,   20,   49,   49,   23,   24,   25,   49,
-       49,   29,   49,   49,   49,   49,   31,    0,    0,    0,
-        0,    0,    0,   48,   47,    6,    0,    0,    9,    0,
-        3,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   49,   21,   49,   26,   49,   17,   30,
-       49,   32,    0,   50,    0,    0,    0,    0,   49,    0,
-        0,    0,    0,    0,    0,    0,    0,   33,   49,   49,
-        0,    0,    5,   11,    0,    8,    0,    0,    0,    0,
-        0,    0,   28,   49,    0,    5,    0,    8,    0,    0,
+        0,    0,    0,    0,   55,   53,    1,    1,   15,   52,
+       43,   34,   45,   46,   43,   44,   43,   53,   43,    4,
+        4,   43,   43,   43,   43,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   34,    0,   14,    0,
+       52,   34,    0,   34,   34,    0,    0,   34,    0,   37,
+        2,   48,    0,   36,    0,   47,   39,    0,    0,    4,
+        0,    0,    0,    0,   51,   38,   40,    0,   35,   41,
+       49,    0,    0,    0,   49,   49,   49,   49,   49,   16,
+       22,   49,   49,   49,   49,   27,   49,   49,   49,   49,
+       49,   49,   42,   34,   42,   34,   14,    0,   34,   12,
+
+       12,   34,    0,    2,    0,   47,   47,    0,    9,    0,
+        3,    0,    0,    7,    0,   49,    0,    0,    0,   49,
+       19,   20,   49,   49,   23,   24,   25,   49,   49,   29,
+       49,   49,   49,   49,   31,    0,    0,    0,    0,    0,
+        0,   47,    6,    0,    0,    9,    0,    3,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   49,   21,   49,   26,   49,   17,   30,   49,   32,
+        0,    0,   50,    0,    0,    0,    0,    6,    0,   49,
+        0,    0,    0,    0,    0,    0,    0,    0,   33,   49,
+       49,    0,    0,    0,    0,    5,   11,    0,    8,    0,
 
-       13,    0,   18,   10,   10,    0
+        0,    0,    0,    0,    0,   28,   49,    0,    5,    0,
+        8,    0,    0,   13,    0,   18,   10,   10,    0
     } ;
 
-static yyconst flex_int32_t yy_ec[256] =
+static yyconst YY_CHAR yy_ec[256] =
     {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    4,    5,    6,    7,    8,    5,    9,   10,   11,
-       12,   13,   14,   15,   16,   17,   18,   19,   20,   20,
-       20,   20,   20,   20,   20,   20,   20,   21,   22,   23,
-       24,   25,    5,   26,   27,   28,   29,   30,   31,   32,
+        1,    2,    2,    2,    2,    2,    2,    2,    3,    4,
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,    5,    6,    7,    8,    9,    6,   10,   11,   12,
+       13,   14,   15,   16,   17,   18,   19,   20,   21,   21,
+       21,   21,   21,   21,   21,   21,   21,   22,   23,   24,
+       25,   26,    6,   23,   27,   28,   29,   30,   31,   32,
        33,   34,   35,   33,   36,   37,   38,   39,   40,   33,
        33,   41,   42,   43,   44,   33,   45,   46,   33,   33,
-       47,    5,   48,    5,   49,    5,   50,   51,   29,   52,
+       47,    6,   48,    6,   49,    6,   50,   51,   29,   52,
 
        53,   54,   33,   55,   56,   33,   57,   58,   59,   60,
        61,   33,   33,   62,   63,   64,   65,   33,   66,   67,
-       33,   33,   26,   22,   26,    5,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
+       33,   33,   23,   23,   23,    6,    2,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68
     } ;
 
-static yyconst flex_int32_t yy_meta[68] =
+static yyconst YY_CHAR yy_meta[69] =
     {   0,
-        1,    2,    3,    4,    5,    6,    7,    8,    5,    9,
-        5,    5,    5,    5,    5,    5,   10,    5,   11,   11,
-        5,    5,   12,   13,   14,    5,   15,   15,   15,   15,
-       15,   15,   16,   16,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   16,   16,   16,    5,    5,   17,   15,
-       15,   15,   15,   15,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   16,   16,   16,   16
+        1,    2,    3,    4,    5,    6,    7,    8,    9,    6,
+       10,    6,    6,    6,    6,    6,    6,   11,    6,   12,
+       12,    6,    6,   13,   14,   15,   16,   16,   16,   16,
+       16,   16,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,    6,    6,   18,   16,
+       16,   16,   16,   16,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   17,   19
     } ;
 
-static yyconst flex_int16_t yy_base[229] =
+static yyconst flex_uint16_t yy_base[245] =
     {   0,
-        0,    0,  649,  638,  646, 1252, 1252, 1252,   62,    0,
-     1252,  109, 1252, 1252,  623, 1252,  619,  175,  606,  174,
-      180,   48,  604,  592,  590, 1252,  204,   71,  214,  186,
-      235,  244,  304,  256,   39,  368,   40,  430,  179, 1252,
-      195,    0,  602,  595,  592,  585,  574,  497,   72, 1252,
-        0,  273, 1252,    0,   39,    0, 1252,    0,   66,  262,
-       75,    0, 1252, 1252, 1252,  557, 1252, 1252,  284,  300,
-     1252,  322,  329,  349,  358,  377,  339,  396,  412,  563,
-      566,  575,  584,  587,  569,  596,  623,  616,  576,  617,
-      571,  568,  334,  380, 1252,  562,  677,    0,  403,    0,
-
-       40,   89,  642,   71,  163,    0,  401,  672,  401,  723,
-        0,  708,  741,  750,  637,  776,  785,  794,  797,  806,
-      775,  827,  831,  843,  818,  819,  883,  415,    0,  712,
-      399,  885,  352, 1252,    0,  191,    0,  202,  772,  170,
-      243,  334,  222,  244,  247,  259,  766,   47,  209,  216,
-      203,  251,  302,  892,  916,  890,  942,  715,  946,  958,
-      930,  974,  274, 1252,   93,  344,  278,  310,  979,  256,
-      264,  337,  270,  274,  352,  355,  215,  984,  995, 1000,
-      299,  354,  589,  355,  223,  603,  209,  204,  198,  189,
-      174,  101, 1004, 1016,   92,  634,  411,  644,  872, 1021,
-
-      717,  373, 1252,  793,  832, 1252, 1055, 1065, 1081, 1086,
-     1102, 1119, 1136, 1139, 1146,  339,  560, 1153, 1169, 1181,
-     1186, 1197, 1200, 1216,  634,  645, 1223, 1234
+        0,    0,  820,  817,  827, 1305, 1305, 1305,   62,    0,
+     1305,  109, 1305, 1305,  802, 1305,  789,   69,  779,  170,
+       25,   53,  776,  759,  759,  178,   78,  194,  229,  250,
+       45,  204,  231,  155,  267,  227,  329,  173, 1305,  178,
+        0,  771,  770,  397,  769,  766,  755,  465,   69, 1305,
+        0, 1305,  272, 1305,    0,  763, 1305,    0,   70,   40,
+       80,  752,  160,    0, 1305, 1305, 1305,  703, 1305, 1305,
+     1305,  308,  531,  534,  508,  511,  524,  525,  538,  512,
+      541,  551,  554,  570,  578,  565,  589,  601,  603,  615,
+      620,  640,  717,    0, 1305,  708,  705,  679,  696,  683,
+
+     1305,  687,  695,    0,  671, 1305,  694,   80,  683,   82,
+      190,    0,  168,    0,  652,  739,  686,  748,    0,  750,
+      679,  681,  739,  737,  751,  763,  764,  782,  781,  790,
+      794,  793,  806,  824,  807,  669,    0,  865,  651,  868,
+      641,  664,  173,    0,   86,  852,  245,  229,  654,  646,
+      291,  196,  220,  277,  258,  231,  263,  266,  529,  508,
+      625,  905,  825,  872,  826,  892,  875,  895,  909,  906,
+      593,  624, 1305,  963,  299,  610,  221, 1305,  599,  939,
+      549,  564,  570,  563,  582,  591,  596,  561,  919,  943,
+      948,  554,  235,    0,  295,  650,  595,  544,  688,  293,
+
+      273,  206,  186,  177,  101,  966, 1006,   86,  710,  308,
+      947, 1019, 1030,  871,  525, 1305,  998, 1007, 1305, 1062,
+     1072, 1090, 1095, 1113, 1132, 1151, 1155, 1173,  543,  680,
+     1181, 1197, 1209, 1214, 1225,  705, 1228, 1246,  722,  740,
+     1258, 1265, 1277, 1286
     } ;
 
-static yyconst flex_int16_t yy_def[229] =
+static yyconst flex_int16_t yy_def[245] =
     {   0,
-      206,    1,    1,    1,  206,  206,  206,  206,  207,  208,
-      206,  206,  206,  206,  206,  206,  206,  209,  206,  206,
-      206,  206,  210,  206,  206,  206,  211,  211,  211,  211,
-      211,  211,  211,  211,   33,  211,   33,  206,  207,  206,
-      207,  208,  212,   38,   38,  212,  206,  206,  212,  206,
-      213,  209,  206,  214,  215,  215,  206,  216,  206,  206,
-      206,  217,  206,  206,  206,  218,  206,  206,  206,  206,
-      206,  219,  211,  211,  211,  211,  211,  211,  211,  211,
-      211,  211,  211,  211,   36,  211,  211,   36,   33,   36,
-       48,  220,  206,  206,  206,   48,  212,  213,  221,  215,
-
-      215,  222,  206,  206,  206,  217,  218,  206,  219,  206,
-      223,  224,  211,  211,   33,  211,  211,  211,  211,  211,
-       33,  211,  211,  211,   33,   33,  211,  206,  225,  206,
-      206,   97,  221,  206,  215,  206,  226,  222,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  227,  224,  211,   33,  211,   36,  211,  211,
-       36,  211,  206,  206,  212,  206,  228,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  227,  211,  211,  211,
-      212,  206,  206,  206,  228,  206,  206,  206,  206,  206,
-      206,  206,  211,  211,  212,  206,  206,  206,  206,  206,
-
-      206,  206,  206,  206,  206,    0,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206
+      219,    1,    1,    1,  219,  219,  219,  219,  220,  221,
+      219,  219,  219,  219,  219,  219,  219,  222,  219,  219,
+       20,  219,  223,  219,  219,  224,  224,  224,  224,  224,
+       30,   30,   30,   30,   30,   30,  219,  220,  219,  220,
+      221,  225,  225,  219,   44,  225,  219,  219,  225,  219,
+      226,  219,  222,  219,  227,  228,  219,  229,  219,   20,
+      219,  219,  219,  230,  219,  219,  219,  231,  219,  219,
+      219,  219,  219,  232,   30,   30,   30,   30,   30,   30,
+       30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
+       30,   30,  225,   44,  219,   48,  233,  219,   48,  219,
+
+      219,   48,  225,  226,  234,  219,  228,  235,  219,  219,
+      219,  236,  219,  230,  231,  219,  232,  219,  237,  238,
+       30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
+       30,   30,   30,   30,   30,  219,  239,  219,  219,  103,
+      234,  219,  219,  240,  235,  219,  219,  219,  241,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      242,  238,   30,   30,   30,   30,   30,   30,   30,   30,
+      219,  243,  219,  103,  219,  244,  219,  219,  241,  219,
+      219,  219,  219,  219,  219,  219,  219,  242,   30,   30,
+       30,  243,  225,  174,  219,  219,  219,  244,  219,  219,
+
+      219,  219,  219,  219,  219,   30,   30,  225,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,    0,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219
     } ;
 
-static yyconst flex_int16_t yy_nxt[1320] =
+static yyconst flex_uint16_t yy_nxt[1374] =
     {   0,
-        6,    7,    8,    7,    6,    9,    6,   10,   11,   12,
-       13,   14,   15,   11,   16,   17,   18,   19,   20,   21,
-       22,   11,   23,   24,   25,   26,   27,   28,   28,   28,
-       29,   30,   28,   28,   31,   28,   28,   32,   33,   34,
-       35,   28,   36,   28,   28,   37,   11,   11,   28,   27,
-       28,   28,   29,   30,   28,   31,   28,   28,   32,   33,
-       34,   35,   28,   36,   28,   28,   37,   40,   63,   86,
-       73,   64,   69,   69,   70,  101,  135,   97,   73,   90,
-       71,   94,   73,   73,  103,  103,  172,   72,  104,  105,
-      105,   86,   73,  105,  105,  136,  101,  135,  181,   73,
+        6,    6,    7,    8,    7,    6,    9,    6,   10,   11,
+       12,   13,   14,   15,   11,   16,   17,   18,   19,   20,
+       21,   22,   11,   23,   24,   25,   26,   27,   27,   27,
+       28,   29,   27,   27,   30,   27,   27,   31,   32,   33,
+       34,   27,   35,   27,   27,   36,   11,   11,   27,   26,
+       27,   27,   28,   29,   27,   30,   27,   27,   31,   32,
+       33,   34,   27,   35,   27,   27,   36,    6,   39,   52,
+      219,   53,   53,   53,   65,  103,   75,   66,   71,  100,
+       72,   72,   73,   75,   82,  219,   54,  143,   71,  109,
+      109,  219,   55,  143,  110,   74,  214,  144,   75,  111,
 
-       90,  201,   93,   73,   73,  137,  169,  172,   41,   43,
-       44,   44,   45,   46,   46,   46,   46,   46,   47,   46,
+      111,  111,  111,  144,   75,   82,  219,  180,   40,   42,
+       43,   44,   44,   45,   46,   46,   46,   46,   46,   47,
        46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
        46,   46,   46,   46,   46,   48,   48,   48,   48,   48,
        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
        48,   48,   48,   48,   48,   49,   46,   46,   48,   48,
        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
-       48,   48,   48,   48,   48,   48,   52,   52,   52,  169,
-       58,  141,  141,  168,   40,  168,   58,   69,   69,   70,
-       59,   53,   60,   60,  169,   71,   59,   54,   60,   60,
-
-       92,   55,   72,  169,   61,   69,   69,   70,  136,  169,
-       61,  141,   77,   71,  169,   69,   69,   70,  137,   62,
-       72,  166,   60,   71,   55,   41,   61,  169,   60,  184,
-       72,   74,   61,  175,  142,   77,   69,   69,   70,  169,
-       62,   41,   75,  166,   71,   69,   69,   70,  173,  169,
-       76,   72,  169,   71,   74,  175,  174,   69,   69,   70,
-       72,  141,  141,   75,  169,   71,   78,  142,   58,  173,
-      142,   76,   72,   79,   52,   52,   52,  174,   59,  169,
-       60,   60,  142,   80,  184,   69,   69,   69,   78,  206,
-      176,  141,   61,  188,   79,   54,   84,  187,   85,   55,
-
-       72,   69,   69,   70,   80,   69,   69,   70,   93,   71,
-       60,  176,  190,   71,   61,  188,   72,   84,  187,   85,
-       72,   39,   55,  109,  109,  109,  169,  110,  186,  186,
-       69,   69,   70,  190,   81,  130,  130,  130,   71,  169,
-       69,   69,   70,   82,  111,   72,  195,   83,   71,  102,
-       69,   69,   70,  102,  131,   72,   81,  182,   71,   69,
-       69,   70,  183,  183,   82,   72,  189,   71,   83,   69,
-       69,   70,  183,  183,   72,  116,  134,   71,   69,   69,
-       70,  130,  130,  130,   72,  197,   71,  114,  189,  191,
-      113,  204,  204,   72,   87,  192,  116,   69,   69,   70,
-
-      131,   88,  109,  109,  109,   71,  110,  197,   89,  114,
-      191,  113,   72,   69,   69,   70,  192,   87,  115,  164,
-      163,   71,   88,  111,  202,  108,  202,  134,   72,   89,
-       43,   44,   44,   44,   43,   43,   43,   43,   43,  115,
-       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
-       43,   43,   43,   43,   43,   43,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   43,   43,   43,   91,
-       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
-       91,   91,   91,   91,   91,   91,   91,   43,   43,   43,
-
-       43,   43,   43,   43,   43,   43,   94,   43,   43,   43,
-       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
-       43,   43,   43,   96,   96,   96,   96,   96,   96,   96,
+       48,   48,   48,   48,   48,   48,   43,   58,   71,   39,
+       72,   72,   73,  180,   97,   88,   75,   59,   71,   60,
+       60,   62,  180,   75,   71,   74,   72,   72,   73,   62,
+
+       61,   62,  180,  175,   71,   76,   63,   88,   75,  148,
+      148,   74,  180,   62,   75,   64,   77,  113,   60,   40,
+      150,   62,   61,   62,   40,  175,  180,   63,   76,   71,
+       78,   72,   72,   73,   83,   75,   64,   77,  148,   71,
+      199,  199,   75,   84,  150,   98,   74,   85,  148,  148,
+       71,   78,   72,   72,   73,   79,   83,   75,   75,  177,
+       71,  177,   75,   75,   84,   75,   92,   74,   85,   75,
+      183,   86,   52,   87,   53,   53,   53,  148,   79,  180,
+       75,   80,  208,  180,   75,  181,   75,   92,   81,  219,
+       75,  183,   86,   89,   87,   55,  182,  180,   75,  180,
+
+       90,  150,  184,   80,  150,   75,  185,   91,  181,   81,
+       72,   72,   72,  195,  196,  196,   89,  182,  196,  196,
+       75,   90,  215,  184,  215,   74,   75,  185,   91,   42,
+       93,   94,   94,   94,   93,   93,   93,   93,   93,   95,
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   93,   93,   93,   93,   96,   96,   96,   96,   96,
        96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
-       96,   96,   96,   43,   43,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   93,   93,   93,   96,   96,
        96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
-       96,   96,   96,   96,   69,   69,   70,   69,   69,   70,
-      106,   93,   71,  128,  106,   71,   69,   69,   70,   72,
-       93,  108,   72,   95,   71,   69,   69,   70,   69,   69,
-       70,   72,  117,   71,   94,   73,   71,   69,   69,   70,
-
-       72,   94,  121,   72,   93,   71,   73,  196,  196,   73,
-      118,   93,   72,   68,  117,   73,   67,  119,   73,  126,
-      120,  198,  198,  121,   69,   69,   70,   65,   73,   57,
-       73,  118,   71,  122,   51,   50,   73,  196,  119,   72,
-      126,  120,   73,   73,  128,  206,  124,   38,  128,   73,
-       73,  198,  196,  196,  122,  167,  125,  127,   38,  167,
-      139,  139,  198,  198,  123,   73,   73,  155,  124,  206,
-       73,   73,  140,   69,   69,   70,   73,  125,  127,  206,
-       73,   71,  196,  206,  206,  123,   93,  206,   72,  155,
-      139,  206,  198,  206,  140,  132,  132,   73,  206,  206,
-
-      206,   73,  206,  132,  132,  132,  132,  132,  132,   69,
-       69,   70,  206,  130,  130,  130,  206,   71,  130,  130,
-      130,  206,  206,  206,   72,  206,  132,  132,  132,  132,
-      132,  142,  131,  206,  206,  143,  142,  131,  142,  206,
-      144,   73,   69,   69,   70,  145,  142,  146,   73,  147,
-       71,   69,   69,   70,  206,  179,  206,   72,  206,   71,
-      148,  149,  150,  151,   73,  206,   72,  206,  152,   73,
-      206,  206,  147,  206,  206,  206,  179,   69,   69,   70,
-      206,  148,  149,  150,  151,   71,   69,   69,   70,  152,
-      139,  139,   72,  170,   71,   69,   69,   70,   69,   69,
-
-       70,   72,  140,   71,  171,  158,   71,   69,   69,   70,
-       72,  205,  205,   72,   73,   71,  170,  156,   73,  206,
-      139,  206,   72,  206,  140,  171,  206,  158,   69,   69,
-       70,  206,   69,   69,   70,   73,   71,  206,  156,   73,
-       71,  205,  157,   72,   69,   69,   70,   72,  161,  162,
-      205,  205,   71,  206,  206,  206,  206,   73,   73,   72,
-      206,   73,   73,  157,  206,  206,  159,  206,  206,  206,
-      161,  162,  206,  199,  199,  199,  206,  206,   73,   73,
-      205,  160,   73,   73,   69,   69,   70,  159,   72,  206,
-      203,  203,   71,   69,   69,   70,  206,  206,  206,   72,
-
-      206,   71,  160,  165,  165,  206,  206,  206,   72,  206,
-      206,  165,  165,  165,  165,  165,  165,   69,   69,   70,
-      178,  206,  206,  206,  206,   71,  206,  206,  206,   73,
-      206,  206,   72,   73,  165,  165,  165,  165,  165,  206,
-      206,  206,  178,   69,   69,   70,  206,   69,   69,   70,
-       73,   71,  206,  206,   73,   71,  180,  206,   72,   69,
-       69,   70,   72,   73,  206,  206,  206,   71,  206,  206,
-       73,  206,  206,  206,   72,   69,   69,   70,  206,  180,
-       69,   69,   70,   71,   73,   69,   69,   70,   71,  206,
-       72,   73,  206,   71,  206,   72,   69,   69,   70,  206,
-
-       72,   69,   69,   70,   71,   69,   69,   70,  206,   71,
-      206,   72,  206,   71,  206,  206,   72,  199,  199,  200,
-       72,  206,  199,  199,  200,   71,  206,  206,  206,  194,
-       71,  206,   72,  206,  206,  206,  193,   72,  206,  203,
-      203,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  194,  206,  206,  206,  206,  206,  193,   39,   39,
-       39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
-       39,   39,   42,  206,  206,   42,  206,  206,  206,   42,
-       42,   42,   56,   56,   56,  206,  206,  206,  206,  206,
-       56,  206,   56,  206,  206,   56,   56,   56,   66,  206,
+       96,   96,   96,   96,   96,   96,   93,   42,   43,   44,
 
-       66,   66,   66,   73,   73,   73,  206,  206,  206,  206,
-       73,   73,   73,  206,  206,  206,   73,   73,   73,   43,
+       44,   44,   43,   43,   43,   43,   43,   98,   43,   43,
        43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
-       43,   43,   43,   43,   43,   43,   98,   98,  206,   98,
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       98,   98,   98,   99,   99,   99,  100,  206,  206,  206,
-      100,  100,  100,  107,  206,  206,  107,  107,  107,  107,
-      112,  112,  112,  206,  112,  206,  206,  206,  206,  206,
-      112,  206,  206,  112,  112,  112,  129,  206,  206,  206,
-      206,  129,  206,  206,  206,  129,  133,  206,  206,  133,
-
-      133,  133,  133,  138,  206,  206,  138,  138,  206,  206,
-      206,  138,  206,  138,  153,  153,  153,  154,  154,  154,
-      206,  206,  206,  206,  154,  154,  154,  206,  206,  206,
-      154,  154,  154,  177,  206,  206,  177,  177,  177,  177,
-      185,  206,  206,  206,  185,  206,  206,  206,  185,  206,
-      185,    5,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
+       43,   43,   43,   99,   99,   99,   99,   99,   99,   99,
+       99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
+       99,   99,   99,   43,   43,   43,   99,   99,   99,   99,
+       99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
+       99,   99,   99,   99,   43,   42,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,  100,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,   43,   43,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,   43,   72,   72,   73,  117,  117,  117,   75,
+      118,   71,   75,   75,  217,  217,   75,  187,   74,   75,
+       75,  197,  121,  122,  108,   75,   75,  119,  108,  186,
+      171,   75,   75,   75,   75,   75,  123,   75,  187,   75,
+       75,   75,   75,  121,  124,  122,   75,   75,   75,   75,
+      125,  186,   75,   75,   75,   75,  180,  123,  180,   75,
+      200,   75,   75,  201,   75,  124,   75,   75,  126,  202,
+
+       75,   75,  125,   75,   75,  203,  178,   75,   75,   75,
+       75,  200,  127,   75,  128,  201,   75,  197,   75,  126,
+       75,  202,  129,   75,   75,  210,  203,   75,  204,   75,
+      171,   75,   75,  127,   75,  128,  205,   75,  130,   75,
+       38,   75,   75,  129,  131,  132,   75,  210,   75,  204,
+      180,   75,  180,   75,   75,  133,   75,  205,   75,  130,
+       75,  178,   75,  134,  106,  131,  142,  132,   75,  209,
+      209,   75,  173,   75,   75,  171,  133,  116,   75,   75,
+      135,  138,  138,  138,  134,  138,  138,  138,  117,  117,
+      117,  114,  118,   75,  106,  114,  142,   98,  209,   75,
+
+      139,  135,  146,  146,  139,   98,   98,  211,  211,  119,
+       75,  136,   75,  147,  140,  140,  149,   75,   98,   75,
+      149,  140,  140,  140,  140,  140,  140,   98,  116,  209,
+      209,  146,   75,  172,   75,  147,  211,  172,   75,   71,
+       75,   72,   72,   73,  140,  140,  140,  140,  140,   71,
+       71,  176,   72,   72,   73,  176,   74,  150,  209,  112,
+       71,  151,  150,  106,  150,  101,  152,   74,   75,  163,
+       75,  153,  150,  154,  155,   75,  100,   75,  164,  100,
+       98,   98,   75,   70,   69,  156,  157,  158,  159,   75,
+       75,  163,   75,  160,   75,   75,   75,  155,   75,  164,
+
+       67,   75,   75,   57,   75,   51,  156,  157,  158,  159,
+       75,  166,   75,   75,  160,   50,   75,   75,  165,   75,
+       75,   75,   75,   75,   75,   75,  219,   37,   75,  167,
+       37,  168,   75,  166,   75,   75,  169,   75,   75,  165,
+       75,   75,  219,   75,   75,   75,   75,   75,  219,   75,
+      167,  219,  168,   75,  170,   75,   75,   75,  169,   75,
+       75,  219,   75,   75,   75,   75,   75,  138,  138,  138,
+      219,  146,  146,  138,  138,  138,  170,   75,   75,   75,
+      219,  219,  147,   75,   75,   75,  139,  174,  174,  219,
+      219,  219,  139,  219,  174,  174,  174,  174,  174,  174,
+
+      146,  219,  189,   75,  147,   71,   75,   72,   72,   73,
+       75,  219,  219,   75,  219,   71,  219,  174,  174,  174,
+      174,  174,   74,   75,  189,   75,   75,  219,   75,  219,
+       75,   75,  190,   75,   75,  191,  219,   75,  219,   71,
+       75,   72,   72,   73,   75,   75,  219,   75,   75,   71,
+       75,   75,  219,  190,   75,  219,   74,   75,  191,   75,
+      219,  219,   75,  219,  219,   75,  211,  211,   75,  193,
+      219,  219,   75,  219,   75,  219,  219,  207,   75,   75,
+      219,   75,  194,  194,  206,  219,   75,  219,  219,  194,
+      194,  194,  194,  194,  194,  211,   75,   75,  219,  207,
+
+      219,   75,   75,  219,   75,  206,  219,   75,  212,  212,
+      213,  219,  194,  194,  194,  194,  194,  218,  218,   75,
+      219,  212,  212,  212,  219,   75,  218,  218,  219,  219,
+      219,  219,  212,  212,  213,  219,   74,   75,  216,  216,
+       71,  219,  219,  219,   75,  219,  218,   74,  219,  216,
+      216,  219,  219,  219,  219,  218,  219,  219,  219,   75,
+      219,  219,  219,  219,  219,   75,   38,   38,   38,   38,
+       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
+       41,  219,  219,   41,  219,  219,  219,   41,   41,   41,
+       56,  219,   56,   56,   56,  219,  219,  219,  219,  219,
 
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206
+       56,  219,   56,  219,  219,   56,   56,   56,   68,  219,
+       68,   68,   68,   75,  219,   75,   75,   75,  219,  219,
+      219,  219,   75,   75,   75,  219,  219,  219,   75,   75,
+       75,   75,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,  104,  104,  104,  219,  104,  104,  104,  104,  104,
+      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
+      105,  105,  105,  107,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  107,  219,  219,  219,  107,  107,
+      107,  107,  115,  219,  219,  115,  115,  115,  115,  120,
+
+      120,  120,  219,  120,  219,  219,  219,  219,  219,  120,
+      219,  219,  120,  120,  120,  137,  219,  219,  219,  219,
+      137,  219,  219,  219,  137,  141,  219,  219,  141,  141,
+      141,  141,  145,  219,  219,  145,  145,  219,  219,  219,
+      145,  219,  145,  161,  161,  161,  162,  219,  162,  162,
+      162,  219,  219,  219,  219,  162,  162,  162,  219,  219,
+      219,  162,  162,  162,  162,  179,  219,  219,  219,  179,
+      219,  219,  219,  179,  219,  179,  188,  219,  219,  188,
+      188,  188,  188,  192,  219,  219,  219,  219,  192,  219,
+      219,  219,  192,  198,  219,  219,  219,  198,  219,  219,
+
+      219,  198,  219,  198,    5,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219
     } ;
 
-static yyconst flex_int16_t yy_chk[1320] =
+static yyconst flex_int16_t yy_chk[1374] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -656,145 +668,151 @@ static yyconst flex_int16_t yy_chk[1320]
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    9,   22,   35,
-       37,   22,   28,   28,   28,   55,  101,   49,   35,   37,
-       28,   49,   35,   37,   59,   59,  148,   28,   61,  104,
-      104,   35,   37,   61,   61,  102,   55,  101,  165,   35,
+        1,    1,    1,    1,    1,    1,    1,    1,    9,   18,
+       21,   18,   18,   18,   22,   49,   31,   22,   27,   49,
+       27,   27,   27,   31,   31,   60,   18,  108,   27,   59,
+       59,   21,   18,  145,   61,   27,  208,  108,   31,   61,
 
-       37,  195,  165,   35,   37,  102,  192,  148,    9,   12,
+       61,  110,  110,  145,   31,   31,   60,  205,    9,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   18,   18,   18,  191,
-       20,  105,  105,  140,   39,  140,   21,   30,   30,   30,
-       20,   18,   20,   20,  190,   30,   21,   18,   21,   21,
-
-       41,   18,   30,  189,   20,   27,   27,   27,  138,  188,
-       21,  105,   30,   27,  187,   29,   29,   29,  138,   20,
-       27,  136,   20,   29,   18,   39,   20,  143,   21,  185,
-       29,   27,   21,  151,  143,   30,   31,   31,   31,  177,
-       20,   41,   27,  136,   31,   32,   32,   32,  149,  144,
-       29,   31,  145,   32,   27,  151,  150,   34,   34,   34,
-       32,  141,  141,   27,  146,   34,   31,  144,   60,  149,
-      145,   29,   34,   31,   52,   52,   52,  150,   60,  174,
-       60,   60,  146,   32,  167,   69,   69,   69,   31,   52,
-      152,  141,   60,  171,   31,   52,   34,  170,   34,   52,
-
-       69,   70,   70,   70,   32,   33,   33,   33,  181,   70,
-       60,  152,  173,   33,   60,  171,   70,   34,  170,   34,
-       33,  163,   52,   72,   72,   72,  153,   72,  168,  168,
-       73,   73,   73,  173,   33,   93,   93,   93,   73,  142,
-       77,   77,   77,   33,   72,   73,  181,   33,   77,  216,
-       74,   74,   74,  216,   93,   77,   33,  166,   74,   75,
-       75,   75,  166,  166,   33,   74,  172,   75,   33,   36,
-       36,   36,  182,  182,   75,   77,  133,   36,   76,   76,
-       76,   94,   94,   94,   36,  184,   76,   75,  172,  175,
-       74,  202,  202,   76,   36,  176,   77,   78,   78,   78,
-
-       94,   36,  109,  109,  109,   78,  109,  184,   36,   75,
-      175,   74,   78,   79,   79,   79,  176,   36,   76,  131,
-      128,   79,   36,  109,  197,  107,  197,   99,   79,   36,
-       38,   38,   38,   38,   38,   38,   38,   38,   38,   76,
-       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
-       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
-       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
-       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
-       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
-       38,   38,   38,   38,   38,   38,   38,   48,   48,   48,
-
+       12,   12,   12,   12,   12,   12,   12,   20,   26,   38,
+       26,   26,   26,  204,   40,   34,   34,   20,   26,   20,
+       20,   63,  203,   34,   28,   26,   28,   28,   28,  113,
+
+       20,   20,  152,  143,   28,   26,   20,   34,   34,  111,
+      111,   28,  202,   63,   34,   20,   26,   63,   20,   38,
+      152,  113,   20,   20,   40,  143,  153,   20,   26,   29,
+       28,   29,   29,   29,   32,   32,   20,   26,  111,   29,
+      177,  177,   32,   32,  153,  193,   29,   32,  148,  148,
+       30,   28,   30,   30,   30,   29,   32,   32,   36,  147,
+       30,  147,   33,   32,   32,   36,   36,   30,   32,   33,
+      156,   33,   53,   33,   53,   53,   53,  148,   29,  201,
+       36,   30,  193,  154,   33,  155,   36,   36,   30,   53,
+       33,  156,   33,   35,   33,   53,  155,  151,   35,  200,
+
+       35,  154,  157,   30,  151,   35,  158,   35,  155,   30,
+       72,   72,   72,  175,  195,  195,   35,  155,  175,  175,
+       35,   35,  210,  157,  210,   72,   35,  158,   35,   37,
+       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
+       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
+       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
+       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
+       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
+       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
+       37,   37,   37,   37,   37,   37,   37,   44,   44,   44,
+
+       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   44,   48,   48,   48,   48,   48,
        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+
        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
-       48,   48,   48,   48,   80,   80,   80,   81,   81,   81,
-      217,   96,   80,   92,  217,   81,   82,   82,   82,   80,
-       91,   66,   81,   47,   82,   83,   83,   83,   84,   84,
-       84,   82,   80,   83,   46,   85,   84,   86,   86,   86,
-
-       83,   45,   85,   84,   44,   86,   89,  183,  183,   85,
-       81,   43,   86,   25,   80,   89,   24,   82,   85,   89,
-       83,  186,  186,   85,   87,   87,   87,   23,   89,   19,
-       85,   81,   87,   86,   17,   15,   89,  183,   82,   87,
-       89,   83,   88,   90,  225,    5,   88,    4,  225,   88,
-       90,  186,  196,  196,   86,  226,   88,   90,    3,  226,
-      103,  103,  198,  198,   87,   88,   90,  115,   88,    0,
-       88,   90,  103,  108,  108,  108,  115,   88,   90,    0,
-      115,  108,  196,    0,    0,   87,   97,    0,  108,  115,
-      103,    0,  198,    0,  103,   97,   97,  115,    0,    0,
-
-        0,  115,    0,   97,   97,   97,   97,   97,   97,  112,
-      112,  112,    0,  130,  130,  130,    0,  112,  201,  201,
-      201,    0,    0,    0,  112,    0,   97,   97,   97,   97,
-       97,  110,  130,    0,    0,  110,  110,  201,  110,    0,
-      110,  158,  113,  113,  113,  110,  110,  110,  158,  110,
-      113,  114,  114,  114,    0,  158,    0,  113,    0,  114,
-      110,  110,  110,  110,  158,    0,  114,    0,  110,  158,
-        0,    0,  110,    0,    0,    0,  158,  116,  116,  116,
-        0,  110,  110,  110,  110,  116,  117,  117,  117,  110,
-      139,  139,  116,  147,  117,  118,  118,  118,  119,  119,
-
-      119,  117,  139,  118,  147,  121,  119,  120,  120,  120,
-      118,  204,  204,  119,  121,  120,  147,  116,  121,    0,
-      139,    0,  120,    0,  139,  147,    0,  121,  122,  122,
-      122,    0,  123,  123,  123,  121,  122,    0,  116,  121,
-      123,  204,  120,  122,  124,  124,  124,  123,  125,  126,
-      205,  205,  124,    0,    0,    0,    0,  125,  126,  124,
-        0,  125,  126,  120,    0,    0,  123,    0,    0,    0,
-      125,  126,    0,  199,  199,  199,    0,    0,  125,  126,
-      205,  124,  125,  126,  127,  127,  127,  123,  199,    0,
-      199,  199,  127,  154,  154,  154,    0,    0,    0,  127,
-
-        0,  154,  124,  132,  132,    0,    0,    0,  154,    0,
-        0,  132,  132,  132,  132,  132,  132,  155,  155,  155,
-      156,    0,    0,    0,    0,  155,    0,    0,    0,  156,
-        0,    0,  155,  156,  132,  132,  132,  132,  132,    0,
-        0,    0,  156,  157,  157,  157,    0,  159,  159,  159,
-      156,  157,    0,    0,  156,  159,  161,    0,  157,  160,
-      160,  160,  159,  161,    0,    0,    0,  160,    0,    0,
-      161,    0,    0,    0,  160,  162,  162,  162,    0,  161,
-      169,  169,  169,  162,  161,  178,  178,  178,  169,    0,
-      162,  161,    0,  178,    0,  169,  179,  179,  179,    0,
-
-      178,  180,  180,  180,  179,  193,  193,  193,    0,  180,
-        0,  179,    0,  193,    0,    0,  180,  194,  194,  194,
-      193,    0,  200,  200,  200,  194,    0,    0,    0,  180,
-      200,    0,  194,    0,    0,    0,  179,  200,    0,  200,
-      200,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  180,    0,    0,    0,    0,    0,  179,  207,  207,
-      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
-      207,  207,  208,    0,    0,  208,    0,    0,    0,  208,
-      208,  208,  209,  209,  209,    0,    0,    0,    0,    0,
-      209,    0,  209,    0,    0,  209,  209,  209,  210,    0,
-
-      210,  210,  210,  211,  211,  211,    0,    0,    0,    0,
-      211,  211,  211,    0,    0,    0,  211,  211,  211,  212,
-      212,  212,  212,  212,  212,  212,  212,  212,  212,  212,
-      212,  212,  212,  212,  212,  212,  213,  213,    0,  213,
-      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
-      213,  213,  213,  214,  214,  214,  215,    0,    0,    0,
-      215,  215,  215,  218,    0,    0,  218,  218,  218,  218,
-      219,  219,  219,    0,  219,    0,    0,    0,    0,    0,
-      219,    0,    0,  219,  219,  219,  220,    0,    0,    0,
-        0,  220,    0,    0,    0,  220,  221,    0,    0,  221,
-
-      221,  221,  221,  222,    0,    0,  222,  222,    0,    0,
-        0,  222,    0,  222,  223,  223,  223,  224,  224,  224,
-        0,    0,    0,    0,  224,  224,  224,    0,    0,    0,
-      224,  224,  224,  227,    0,    0,  227,  227,  227,  227,
-      228,    0,    0,    0,  228,    0,    0,    0,  228,    0,
-      228,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206
+       48,   48,   48,   73,   73,   73,   74,   74,   74,   75,
+       74,   73,   76,   80,  215,  215,   75,  160,   73,   76,
+       80,  198,   76,   77,  229,   77,   78,   74,  229,  159,
+      192,   75,   77,   78,   76,   80,   78,   75,  160,   79,
+       76,   80,   81,   76,   79,   77,   79,   77,   78,   81,
+       82,  159,   82,   77,   78,   83,  188,   78,  185,   82,
+      181,   79,   83,  182,   81,   79,   86,   79,   83,  183,
+
+       81,   84,   82,   86,   82,  184,  179,   83,   84,   85,
+       82,  181,   84,   83,   85,  182,   85,  176,   86,   83,
+       87,  183,   87,   84,   86,  197,  184,   87,  186,   84,
+      172,   85,   88,   84,   89,   85,  187,   85,   88,   88,
+      171,   89,   87,   87,   89,   90,   90,  197,   87,  186,
+      161,   91,  150,   90,   88,   90,   89,  187,   91,   88,
+       88,  149,   89,   91,  142,   89,  141,   90,   90,  196,
+      196,   92,  139,   91,   90,  136,   90,  115,   92,   91,
+       92,   98,   98,   98,   91,  100,  100,  100,  117,  117,
+      117,  230,  117,   92,  107,  230,  105,  102,  196,   92,
+
+       98,   92,  109,  109,  100,  103,   99,  199,  199,  117,
+      121,   97,  122,  109,  103,  103,  236,  121,   96,  122,
+      236,  103,  103,  103,  103,  103,  103,   93,   68,  209,
+      209,  109,  121,  239,  122,  109,  199,  239,  121,  116,
+      122,  116,  116,  116,  103,  103,  103,  103,  103,  116,
+      120,  240,  120,  120,  120,  240,  116,  118,  209,   62,
+      120,  118,  118,   56,  118,   47,  118,  120,  124,  123,
+      123,  118,  118,  118,  118,  124,   46,  123,  124,   45,
+       43,   42,  125,   25,   24,  118,  118,  118,  118,  125,
+      124,  123,  123,  118,  126,  127,  124,  118,  123,  124,
+
+       23,  126,  127,   19,  125,   17,  118,  118,  118,  118,
+      125,  129,  129,  128,  118,   15,  126,  127,  128,  129,
+      128,  130,  126,  127,  132,  131,    5,    4,  130,  131,
+        3,  132,  131,  129,  129,  128,  133,  133,  135,  128,
+      129,  128,    0,  130,  133,  135,  132,  131,    0,  130,
+      131,    0,  132,  131,  134,  134,  163,  165,  133,  133,
+      135,    0,  134,  163,  165,  133,  135,  138,  138,  138,
+        0,  146,  146,  214,  214,  214,  134,  134,  163,  165,
+        0,    0,  146,  134,  163,  165,  138,  140,  140,    0,
+        0,    0,  214,    0,  140,  140,  140,  140,  140,  140,
+
+      146,    0,  164,  164,  146,  162,  167,  162,  162,  162,
+      164,    0,    0,  167,    0,  162,    0,  140,  140,  140,
+      140,  140,  162,  166,  164,  164,  168,    0,  167,    0,
+      166,  164,  166,  168,  167,  169,    0,  170,    0,  180,
+      169,  180,  180,  180,  170,  166,    0,  169,  168,  180,
+      189,  166,    0,  166,  168,    0,  180,  189,  169,  170,
+        0,    0,  169,    0,    0,  170,  211,  211,  169,  174,
+        0,    0,  189,    0,  190,    0,    0,  191,  189,  191,
+        0,  190,  174,  174,  190,    0,  191,    0,    0,  174,
+      174,  174,  174,  174,  174,  211,  190,  206,    0,  191,
+
+        0,  191,  190,    0,  206,  190,    0,  191,  207,  207,
+      207,    0,  174,  174,  174,  174,  174,  217,  217,  206,
+        0,  212,  212,  212,    0,  206,  218,  218,    0,    0,
+        0,    0,  213,  213,  213,    0,  212,  207,  212,  212,
+      213,    0,    0,    0,  207,    0,  217,  213,    0,  213,
+      213,    0,    0,    0,    0,  218,    0,    0,    0,  207,
+        0,    0,    0,    0,    0,  207,  220,  220,  220,  220,
+      220,  220,  220,  220,  220,  220,  220,  220,  220,  220,
+      221,    0,    0,  221,    0,    0,    0,  221,  221,  221,
+      222,    0,  222,  222,  222,    0,    0,    0,    0,    0,
+
+      222,    0,  222,    0,    0,  222,  222,  222,  223,    0,
+      223,  223,  223,  224,    0,  224,  224,  224,    0,    0,
+        0,    0,  224,  224,  224,    0,    0,    0,  224,  224,
+      224,  224,  225,  225,  225,  225,  225,  225,  225,  225,
+      225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
+      225,  226,  226,  226,    0,  226,  226,  226,  226,  226,
+      226,  226,  226,  226,  226,  226,  226,  226,  226,  226,
+      227,  227,  227,  228,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  228,    0,    0,    0,  228,  228,
+      228,  228,  231,    0,    0,  231,  231,  231,  231,  232,
+
+      232,  232,    0,  232,    0,    0,    0,    0,    0,  232,
+        0,    0,  232,  232,  232,  233,    0,    0,    0,    0,
+      233,    0,    0,    0,  233,  234,    0,    0,  234,  234,
+      234,  234,  235,    0,    0,  235,  235,    0,    0,    0,
+      235,    0,  235,  237,  237,  237,  238,    0,  238,  238,
+      238,    0,    0,    0,    0,  238,  238,  238,    0,    0,
+        0,  238,  238,  238,  238,  241,    0,    0,    0,  241,
+        0,    0,    0,  241,    0,  241,  242,    0,    0,  242,
+      242,  242,  242,  243,    0,    0,    0,    0,  243,    0,
+        0,    0,  243,  244,    0,    0,    0,  244,    0,    0,
+
+        0,  244,    0,  244,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -812,8 +830,8 @@ int yy_flex_debug = 0;
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
 #line 1 "ada-lex.l"
-/* FLEX lexer for Ada expressions, for GDB.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+/* FLEX lexer for Ada expressions, for GDB. -*- c++ -*-
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -835,13 +853,17 @@ char *yytext;
 /* the global pointer lexptr.  It returns a syntactic category for */
 /* each successive token and places a semantic value into yylval */
 /* (ada-lval), defined by the parser.   */
-#line 43 "ada-lex.l"
+/* This must agree with COMPLETION_CHAR below.  See the comment there
+   for the explanation.  */
+#line 48 "ada-lex.l"
 
 #include "diagnostics.h"
 
 /* Some old versions of flex generate code that uses the "register" keyword,
    which clang warns about.  This was observed for example with flex 2.5.35,
-   as shipped with macOS 10.12.  */
+   as shipped with macOS 10.12.  The same happens with flex 2.5.37 and g++ 11
+   which defaults to ISO C++17, that does not allow register storage class
+   specifiers.  */
 DIAGNOSTIC_PUSH
 DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
 
@@ -867,24 +889,41 @@ static void rewind_to_char (int);
    Defining YY_NO_INPUT comments it out.  */
 #define YY_NO_INPUT
 
-#undef YY_INPUT
-#define YY_INPUT(BUF, RESULT, MAX_SIZE) \
-    if ( *pstate->lexptr == '\000' ) \
-      (RESULT) = YY_NULL; \
-    else \
-      { \
-        *(BUF) = *pstate->lexptr; \
-        (RESULT) = 1; \
-	pstate->lexptr += 1; \
-      }
+/* When completing, we'll return a special character at the end of the
+   input, to signal the completion position to the lexer.  This is
+   done because flex does not have a generally useful way to detect
+   EOF in a pattern.  This variable records whether the special
+   character has been emitted.  */
+static bool returned_complete = false;
 
-static int find_dot_all (const char *);
+/* The character we use to represent the completion point.  */
+#define COMPLETE_CHAR '\001'
+
+#undef YY_INPUT
+#define YY_INPUT(BUF, RESULT, MAX_SIZE)					\
+  if ( *pstate->lexptr == '\000' )					\
+    {									\
+      if (pstate->parse_completion && !returned_complete)		\
+	{								\
+	  returned_complete = true;					\
+	  *(BUF) = COMPLETE_CHAR;					\
+	  (RESULT) = 1;							\
+	}								\
+      else								\
+	(RESULT) = YY_NULL;						\
+    }									\
+  else									\
+    {									\
+      *(BUF) = *pstate->lexptr == COMPLETE_CHAR ? ' ' : *pstate->lexptr; \
+      (RESULT) = 1;							\
+      pstate->lexptr += 1;						\
+    }
 
 /* Depth of parentheses.  */
 static int paren_depth;
 
 
-#line 888 "<stdout>"
+#line 927 "<stdout>"
 
 #define INITIAL 0
 #define BEFORE_QUAL_QUOTE 1
@@ -918,19 +957,19 @@ void yyset_extra (YY_EXTRA_TYPE user_def
 
 FILE *yyget_in (void );
 
-void yyset_in  (FILE * in_str  );
+void yyset_in  (FILE * _in_str  );
 
 FILE *yyget_out (void );
 
-void yyset_out  (FILE * out_str  );
+void yyset_out  (FILE * _out_str  );
 
-int yyget_leng (void );
+			int yyget_leng (void );
 
 char *yyget_text (void );
 
 int yyget_lineno (void );
 
-void yyset_lineno (int line_number  );
+void yyset_lineno (int _line_number  );
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -944,8 +983,12 @@ extern int yywrap (void );
 #endif
 #endif
 
+#ifndef YY_NO_UNPUT
+    
     static void yyunput (int c,char *buf_ptr  );
     
+#endif
+
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
@@ -966,7 +1009,12 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -974,7 +1022,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -985,7 +1033,7 @@ static int input (void );
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		unsigned n; \
+		int n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -998,7 +1046,7 @@ static int input (void );
 	else \
 		{ \
 		errno=0; \
-		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
 			{ \
 			if( errno != EINTR) \
 				{ \
@@ -1053,7 +1101,7 @@ extern int yylex (void);
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK break;
+#define YY_BREAK /*LINTED*/break;
 #endif
 
 #define YY_RULE_SETUP \
@@ -1063,15 +1111,10 @@ extern int yylex (void);
  */
 YY_DECL
 {
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
+	yy_state_type yy_current_state;
+	char *yy_cp, *yy_bp;
+	int yy_act;
     
-#line 96 "ada-lex.l"
-
-
-#line 1074 "<stdout>"
-
 	if ( !(yy_init) )
 		{
 		(yy_init) = 1;
@@ -1098,7 +1141,13 @@ YY_DECL
 		yy_load_buffer_state( );
 		}
 
-	while ( 1 )		/* loops until end-of-file is reached */
+	{
+#line 120 "ada-lex.l"
+
+
+#line 1149 "<stdout>"
+
+	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
 		yy_cp = (yy_c_buf_p);
 
@@ -1114,7 +1163,7 @@ YY_DECL
 yy_match:
 		do
 			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
 			if ( yy_accept[yy_current_state] )
 				{
 				(yy_last_accepting_state) = yy_current_state;
@@ -1123,13 +1172,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 207 )
+				if ( yy_current_state >= 220 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 1252 );
+		while ( yy_base[yy_current_state] != 1305 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1156,26 +1205,27 @@ do_action:	/* This label is used only to
 case 1:
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 98 "ada-lex.l"
+#line 122 "ada-lex.l"
 { }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 100 "ada-lex.l"
+#line 124 "ada-lex.l"
 { yyterminate(); }
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 102 "ada-lex.l"
+#line 126 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
-		   return processInt (pstate, NULL, numbuf,
-				      strrchr (numbuf, 'e') + 1);
+		   char *e_ptr = strrchr (numbuf, 'e');
+		   *e_ptr = '\0';
+		   return processInt (pstate, nullptr, numbuf, e_ptr + 1);
 		 }
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 108 "ada-lex.l"
+#line 133 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processInt (pstate, NULL, numbuf, NULL);
@@ -1183,17 +1233,23 @@ YY_RULE_SETUP
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 113 "ada-lex.l"
+#line 138 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
+		   char *e_ptr = strrchr (numbuf, 'e');
+		   *e_ptr = '\0';
 		   return processInt (pstate, numbuf,
 				      strchr (numbuf, '#') + 1,
-				      strrchr(numbuf, '#') + 1);
+				      e_ptr + 1);
 		 }
 	YY_BREAK
+/* The "llf" is a gdb extension to allow a floating-point
+	   constant to be written in some other base.  The
+	   floating-point number is formed by reinterpreting the
+	   bytes, allowing direct control over the bits.  */
 case 6:
 YY_RULE_SETUP
-#line 120 "ada-lex.l"
+#line 151 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processInt (pstate, numbuf, strchr (numbuf, '#') + 1,
@@ -1202,7 +1258,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 126 "ada-lex.l"
+#line 157 "ada-lex.l"
 {
 		  canonicalizeNumeral (numbuf, yytext+2);
 		  return processInt (pstate, "16#", numbuf, NULL);
@@ -1210,7 +1266,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 132 "ada-lex.l"
+#line 163 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processReal (pstate, numbuf);
@@ -1218,7 +1274,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 137 "ada-lex.l"
+#line 168 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processReal (pstate, numbuf);
@@ -1226,41 +1282,43 @@ YY_RULE_SETUP
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 142 "ada-lex.l"
+#line 173 "ada-lex.l"
 {
                    error (_("Based real literals not implemented yet."));
 		}
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 146 "ada-lex.l"
+#line 177 "ada-lex.l"
 {
                    error (_("Based real literals not implemented yet."));
 		}
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 150 "ada-lex.l"
+#line 181 "ada-lex.l"
 {
-		   yylval.typed_val.type = type_char (pstate);
-		   yylval.typed_val.val = yytext[1];
+		   yylval.typed_char.val = yytext[1];
+		   yylval.typed_char.type = type_for_char (pstate, yytext[1]);
 		   return CHARLIT;
 		}
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 156 "ada-lex.l"
+#line 187 "ada-lex.l"
 {
-                   int v;
-                   yylval.typed_val.type = type_char (pstate);
-		   sscanf (yytext+3, "%2x", &v);
-		   yylval.typed_val.val = v;
+                   ULONGEST v = strtoulst (yytext+3, nullptr, 16);
+		   yylval.typed_char.val = v;
+                   yylval.typed_char.type = type_for_char (pstate, v);
 		   return CHARLIT;
 		}
 	YY_BREAK
+/* Note that we don't handle bracket sequences of more than 2
+	   digits here.  Currently there's no support for wide or
+	   wide-wide strings.  */
 case 14:
 YY_RULE_SETUP
-#line 164 "ada-lex.l"
+#line 197 "ada-lex.l"
 {
 	           yylval.sval = processString (yytext+1, yyleng-2);
 		   return STRING;
@@ -1268,14 +1326,14 @@ YY_RULE_SETUP
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 169 "ada-lex.l"
+#line 202 "ada-lex.l"
 {
                    error (_("ill-formed or non-terminated string literal"));
 		}
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 174 "ada-lex.l"
+#line 207 "ada-lex.l"
 {
                   rewind_to_char ('i');
 		  return 0;
@@ -1283,7 +1341,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 179 "ada-lex.l"
+#line 212 "ada-lex.l"
 {
                   rewind_to_char ('t');
 		  return 0;
@@ -1292,7 +1350,7 @@ YY_RULE_SETUP
 case 18:
 /* rule 18 can match eol */
 YY_RULE_SETUP
-#line 184 "ada-lex.l"
+#line 217 "ada-lex.l"
 {
                   /* This keyword signals the end of the expression and
                      will be processed separately.  */
@@ -1303,67 +1361,67 @@ YY_RULE_SETUP
 /* ADA KEYWORDS */
 case 19:
 YY_RULE_SETUP
-#line 193 "ada-lex.l"
+#line 226 "ada-lex.l"
 { return ABS; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 194 "ada-lex.l"
+#line 227 "ada-lex.l"
 { return _AND_; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 195 "ada-lex.l"
+#line 228 "ada-lex.l"
 { return ELSE; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 196 "ada-lex.l"
+#line 229 "ada-lex.l"
 { return IN; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 197 "ada-lex.l"
+#line 230 "ada-lex.l"
 { return MOD; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 198 "ada-lex.l"
+#line 231 "ada-lex.l"
 { return NEW; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 199 "ada-lex.l"
+#line 232 "ada-lex.l"
 { return NOT; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 200 "ada-lex.l"
+#line 233 "ada-lex.l"
 { return NULL_PTR; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 201 "ada-lex.l"
+#line 234 "ada-lex.l"
 { return OR; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 202 "ada-lex.l"
+#line 235 "ada-lex.l"
 { return OTHERS; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 203 "ada-lex.l"
+#line 236 "ada-lex.l"
 { return REM; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 204 "ada-lex.l"
+#line 237 "ada-lex.l"
 { return THEN; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 205 "ada-lex.l"
+#line 238 "ada-lex.l"
 { return XOR; }
 	YY_BREAK
 /* BOOLEAN "KEYWORDS" */
@@ -1373,70 +1431,75 @@ YY_RULE_SETUP
     making them keywords (when bare). */
 case 32:
 YY_RULE_SETUP
-#line 214 "ada-lex.l"
+#line 247 "ada-lex.l"
 { return TRUEKEYWORD; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 215 "ada-lex.l"
+#line 248 "ada-lex.l"
 { return FALSEKEYWORD; }
 	YY_BREAK
 /* ATTRIBUTES */
 case 34:
 /* rule 34 can match eol */
 YY_RULE_SETUP
-#line 219 "ada-lex.l"
-{ BEGIN INITIAL; return processAttribute (yytext+1); }
+#line 252 "ada-lex.l"
+{ BEGIN INITIAL; return processAttribute (yytext); }
 	YY_BREAK
 /* PUNCTUATION */
 case 35:
 YY_RULE_SETUP
-#line 223 "ada-lex.l"
+#line 256 "ada-lex.l"
 { return ARROW; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 224 "ada-lex.l"
+#line 257 "ada-lex.l"
 { return DOTDOT; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 225 "ada-lex.l"
+#line 258 "ada-lex.l"
 { return STARSTAR; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 226 "ada-lex.l"
+#line 259 "ada-lex.l"
 { return ASSIGN; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 227 "ada-lex.l"
+#line 260 "ada-lex.l"
 { return NOTEQUAL; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 228 "ada-lex.l"
+#line 261 "ada-lex.l"
 { return LEQ; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 229 "ada-lex.l"
+#line 262 "ada-lex.l"
 { return GEQ; }
 	YY_BREAK
 case 42:
+/* rule 42 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+YY_LINENO_REWIND_TO(yy_bp + 1);
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 231 "ada-lex.l"
+#line 264 "ada-lex.l"
 { BEGIN INITIAL; return '\''; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 233 "ada-lex.l"
+#line 266 "ada-lex.l"
 { return yytext[0]; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 235 "ada-lex.l"
+#line 268 "ada-lex.l"
 { if (paren_depth == 0 && pstate->comma_terminates)
 		    {
 		      rewind_to_char (',');
@@ -1448,12 +1511,12 @@ YY_RULE_SETUP
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 244 "ada-lex.l"
+#line 277 "ada-lex.l"
 { paren_depth += 1; return '('; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 245 "ada-lex.l"
+#line 278 "ada-lex.l"
 { if (paren_depth == 0)
 		    {
 		      rewind_to_char (')');
@@ -1469,22 +1532,28 @@ YY_RULE_SETUP
 case 47:
 /* rule 47 can match eol */
 YY_RULE_SETUP
-#line 257 "ada-lex.l"
-{ return DOT_ALL; }
+#line 290 "ada-lex.l"
+{
+	 	  yylval.sval = processId (yytext+1, yyleng-1);
+		  if (yytext[yyleng - 1] == COMPLETE_CHAR)
+		    return DOT_COMPLETE;
+	          return DOT_ID;
+		}
 	YY_BREAK
 case 48:
 /* rule 48 can match eol */
 YY_RULE_SETUP
-#line 259 "ada-lex.l"
+#line 297 "ada-lex.l"
 {
-	 	  yylval.sval = processId (yytext+1, yyleng-1);
-	          return DOT_ID;
+		  yylval.sval.ptr = "";
+		  yylval.sval.length = 0;
+		  return DOT_COMPLETE;
 		}
 	YY_BREAK
 case 49:
 /* rule 49 can match eol */
 YY_RULE_SETUP
-#line 264 "ada-lex.l"
+#line 303 "ada-lex.l"
 {
                   int all_posn = find_dot_all (yytext);
 
@@ -1495,15 +1564,16 @@ YY_RULE_SETUP
 		    }
                   else if (all_posn >= 0)
 		    yyless (all_posn);
+		  bool is_completion = yytext[yyleng - 1] == COMPLETE_CHAR;
                   yylval.sval = processId (yytext, yyleng);
-                  return NAME;
+                  return is_completion ? NAME_COMPLETE : NAME;
                }
 	YY_BREAK
 /* GDB EXPRESSION CONSTRUCTS  */
 case 50:
 /* rule 50 can match eol */
 YY_RULE_SETUP
-#line 281 "ada-lex.l"
+#line 321 "ada-lex.l"
 {
                   yyless (yyleng - 2);
 		  yylval.sval = processId (yytext, yyleng);
@@ -1512,18 +1582,13 @@ YY_RULE_SETUP
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 287 "ada-lex.l"
+#line 327 "ada-lex.l"
 { return COLONCOLON; }
 	YY_BREAK
-case 52:
-YY_RULE_SETUP
-#line 289 "ada-lex.l"
-{ return yytext[0]; }
-	YY_BREAK
 /* REGISTERS AND GDB CONVENIENCE VARIABLES */
-case 53:
+case 52:
 YY_RULE_SETUP
-#line 293 "ada-lex.l"
+#line 331 "ada-lex.l"
 {
 		  yylval.sval.ptr = yytext;
 		  yylval.sval.length = yyleng;
@@ -1531,17 +1596,17 @@ YY_RULE_SETUP
 		}
 	YY_BREAK
 /* CATCH-ALL ERROR CASE */
-case 54:
+case 53:
 YY_RULE_SETUP
-#line 301 "ada-lex.l"
+#line 339 "ada-lex.l"
 { error (_("Invalid character '%s' in expression."), yytext); }
 	YY_BREAK
-case 55:
+case 54:
 YY_RULE_SETUP
-#line 302 "ada-lex.l"
+#line 340 "ada-lex.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 1545 "<stdout>"
+#line 1610 "<stdout>"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(BEFORE_QUAL_QUOTE):
 	yyterminate();
@@ -1673,6 +1738,7 @@ case YY_STATE_EOF(BEFORE_QUAL_QUOTE):
 			"fatal flex scanner internal error--no action found" );
 	} /* end of action switch */
 		} /* end of scanning one token */
+	} /* end of user's declarations */
 } /* end of yylex */
 
 /* yy_get_next_buffer - try to read in a new buffer
@@ -1684,9 +1750,9 @@ case YY_STATE_EOF(BEFORE_QUAL_QUOTE):
  */
 static int yy_get_next_buffer (void)
 {
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
+    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	char *source = (yytext_ptr);
+	yy_size_t number_to_move, i;
 	int ret_val;
 
 	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -1715,7 +1781,7 @@ static int yy_get_next_buffer (void)
 	/* Try to read more data. */
 
 	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+	number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
 	for ( i = 0; i < number_to_move; ++i )
 		*(dest++) = *(source++);
@@ -1735,7 +1801,7 @@ static int yy_get_next_buffer (void)
 			{ /* Not enough room in the buffer - grow it. */
 
 			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
 
 			int yy_c_buf_p_offset =
 				(int) ((yy_c_buf_p) - b->yy_ch_buf);
@@ -1751,11 +1817,11 @@ static int yy_get_next_buffer (void)
 
 				b->yy_ch_buf = (char *)
 					/* Include room in for 2 EOB chars. */
-					yyxrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+					yyxrealloc((void *) b->yy_ch_buf,(yy_size_t) (b->yy_buf_size + 2)  );
 				}
 			else
 				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
+				b->yy_ch_buf = NULL;
 
 			if ( ! b->yy_ch_buf )
 				YY_FATAL_ERROR(
@@ -1773,7 +1839,7 @@ static int yy_get_next_buffer (void)
 
 		/* Read in more data. */
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), (size_t) num_to_read );
+			(yy_n_chars), num_to_read );
 
 		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
 		}
@@ -1797,10 +1863,10 @@ static int yy_get_next_buffer (void)
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+	if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
 		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyxrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyxrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,(yy_size_t) new_size  );
 		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
 			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
 	}
@@ -1818,14 +1884,14 @@ static int yy_get_next_buffer (void)
 
     static yy_state_type yy_get_previous_state (void)
 {
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
+	yy_state_type yy_current_state;
+	char *yy_cp;
     
 	yy_current_state = (yy_start);
 
 	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
 		{
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 2);
 		if ( yy_accept[yy_current_state] )
 			{
 			(yy_last_accepting_state) = yy_current_state;
@@ -1834,10 +1900,10 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 207 )
+			if ( yy_current_state >= 220 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
 		}
 
 	return yy_current_state;
@@ -1850,10 +1916,10 @@ static int yy_get_next_buffer (void)
  */
     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
 {
-	register int yy_is_jam;
-    	register char *yy_cp = (yy_c_buf_p);
+	int yy_is_jam;
+    	char *yy_cp = (yy_c_buf_p);
 
-	register YY_CHAR yy_c = 1;
+	YY_CHAR yy_c = 2;
 	if ( yy_accept[yy_current_state] )
 		{
 		(yy_last_accepting_state) = yy_current_state;
@@ -1862,18 +1928,20 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 207 )
+		if ( yy_current_state >= 220 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 206);
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+	yy_is_jam = (yy_current_state == 219);
 
-	return yy_is_jam ? 0 : yy_current_state;
+		return yy_is_jam ? 0 : yy_current_state;
 }
 
-    static void yyunput (int c, register char * yy_bp )
+#ifndef YY_NO_UNPUT
+
+    static void yyunput (int c, char * yy_bp )
 {
-	register char *yy_cp;
+	char *yy_cp;
     
     yy_cp = (yy_c_buf_p);
 
@@ -1883,10 +1951,10 @@ static int yy_get_next_buffer (void)
 	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
 		{ /* need to shift things up to make room */
 		/* +2 for EOB chars. */
-		register int number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+		int number_to_move = (yy_n_chars) + 2;
+		char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
 					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-		register char *source =
+		char *source =
 				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
 
 		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
@@ -1895,7 +1963,7 @@ static int yy_get_next_buffer (void)
 		yy_cp += (int) (dest - source);
 		yy_bp += (int) (dest - source);
 		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+			(yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
 
 		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
 			YY_FATAL_ERROR( "flex scanner push-back overflow" );
@@ -1908,6 +1976,8 @@ static int yy_get_next_buffer (void)
 	(yy_c_buf_p) = yy_cp;
 }
 
+#endif
+
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
     static int yyinput (void)
@@ -1956,7 +2026,7 @@ static int yy_get_next_buffer (void)
 				case EOB_ACT_END_OF_FILE:
 					{
 					if ( yywrap( ) )
-						return EOF;
+						return 0;
 
 					if ( ! (yy_did_buffer_switch_on_eof) )
 						YY_NEW_FILE;
@@ -2062,7 +2132,7 @@ static void yy_load_buffer_state  (void)
 	/* yy_ch_buf has to be 2 characters longer than the size given because
 	 * we need to put in 2 end-of-buffer characters.
 	 */
-	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
+	b->yy_ch_buf = (char *) yyalloc((yy_size_t) (b->yy_buf_size + 2)  );
 	if ( ! b->yy_ch_buf )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
@@ -2092,10 +2162,6 @@ static void yy_load_buffer_state  (void)
 	yyfree((void *) b  );
 }
 
-#ifndef __cplusplus
-extern int isatty (int );
-#endif /* __cplusplus */
-    
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
  * such as during a yyrestart() or at EOF.
@@ -2216,7 +2282,7 @@ static void yyensure_buffer_stack (void)
 		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
 		 * immediate xrealloc on the next call.
          */
-		num_to_alloc = 1;
+      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
 		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
@@ -2233,7 +2299,7 @@ static void yyensure_buffer_stack (void)
 	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
 		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
+		yy_size_t grow_size = 8 /* arbitrary grow size */;
 
 		num_to_alloc = (yy_buffer_stack_max) + grow_size;
 		(yy_buffer_stack) = (struct yy_buffer_state**)yyxrealloc
@@ -2263,16 +2329,16 @@ YY_BUFFER_STATE yy_scan_buffer  (char *
 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
 		/* They forgot to leave room for the EOB's. */
-		return 0;
+		return NULL;
 
 	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
 
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */
 	b->yy_buf_pos = b->yy_ch_buf = base;
 	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
+	b->yy_input_file = NULL;
 	b->yy_n_chars = b->yy_buf_size;
 	b->yy_is_interactive = 0;
 	b->yy_at_bol = 1;
@@ -2295,13 +2361,13 @@ YY_BUFFER_STATE yy_scan_buffer  (char *
 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
 {
     
-	return yy_scan_bytes(yystr,strlen(yystr) );
+	return yy_scan_bytes(yystr,(int) strlen(yystr) );
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
@@ -2313,7 +2379,7 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst
 	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
+	n = (yy_size_t) (_yybytes_len + 2);
 	buf = (char *) yyalloc(n  );
 	if ( ! buf )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
@@ -2339,9 +2405,9 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst
 #define YY_EXIT_FAILURE 2
 #endif
 
-static void yy_fatal_error (yyconst char* msg )
+static void yynoreturn yy_fatal_error (yyconst char* msg )
 {
-    	(void) fprintf( stderr, "%s\n", msg );
+			(void) fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
 }
 
@@ -2352,7 +2418,7 @@ static void yy_fatal_error (yyconst char
 	do \
 		{ \
 		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
+        yy_size_t yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
 		yytext[yyleng] = (yy_hold_char); \
 		(yy_c_buf_p) = yytext + yyless_macro_arg; \
@@ -2407,29 +2473,29 @@ char *yyget_text  (void)
 }
 
 /** Set the current line number.
- * @param line_number
+ * @param _line_number line number
  * 
  */
-void yyset_lineno (int  line_number )
+void yyset_lineno (int  _line_number )
 {
     
-    yylineno = line_number;
+    yylineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param in_str A readable stream.
+ * @param _in_str A readable stream.
  * 
  * @see yy_switch_to_buffer
  */
-void yyset_in (FILE *  in_str )
+void yyset_in (FILE *  _in_str )
 {
-        yyin = in_str ;
+        yyin = _in_str ;
 }
 
-void yyset_out (FILE *  out_str )
+void yyset_out (FILE *  _out_str )
 {
-        yyout = out_str ;
+        yyout = _out_str ;
 }
 
 int yyget_debug  (void)
@@ -2437,9 +2503,9 @@ int yyget_debug  (void)
         return yy_flex_debug;
 }
 
-void yyset_debug (int  bdebug )
+void yyset_debug (int  _bdebug )
 {
-        yy_flex_debug = bdebug ;
+        yy_flex_debug = _bdebug ;
 }
 
 static int yy_init_globals (void)
@@ -2448,10 +2514,10 @@ static int yy_init_globals (void)
      * This function is called from yylex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = 0;
+    (yy_buffer_stack) = NULL;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
+    (yy_c_buf_p) = NULL;
     (yy_init) = 0;
     (yy_start) = 0;
 
@@ -2460,8 +2526,8 @@ static int yy_init_globals (void)
     yyin = stdin;
     yyout = stdout;
 #else
-    yyin = (FILE *) 0;
-    yyout = (FILE *) 0;
+    yyin = NULL;
+    yyout = NULL;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
@@ -2499,7 +2565,8 @@ int yylex_destroy  (void)
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
-	register int i;
+		
+	int i;
 	for ( i = 0; i < n; ++i )
 		s1[i] = s2[i];
 }
@@ -2508,7 +2575,7 @@ static void yy_flex_strncpy (char* s1, y
 #ifdef YY_NEED_STRLEN
 static int yy_flex_strlen (yyconst char * s )
 {
-	register int n;
+	int n;
 	for ( n = 0; s[n]; ++n )
 		;
 
@@ -2518,11 +2585,12 @@ static int yy_flex_strlen (yyconst char
 
 void *yyalloc (yy_size_t  size )
 {
-	return (void *) xmalloc( size );
+			return xmalloc(size);
 }
 
 void *yyxrealloc  (void * ptr, yy_size_t  size )
 {
+		
 	/* The cast to (char *) in the following accommodates both
 	 * implementations that use char* generic pointers, and those
 	 * that use void* generic pointers.  It works with the latter
@@ -2530,17 +2598,17 @@ void *yyxrealloc  (void * ptr, yy_size_t
 	 * any pointer type to void*, and deal with argument conversions
 	 * as though doing an assignment.
 	 */
-	return (void *) xrealloc( (char *) ptr, size );
+	return xrealloc(ptr, size);
 }
 
 void yyfree (void * ptr )
 {
-	xfree( (char *) ptr );	/* see yyxrealloc() for (char *) cast */
+			xfree( (char *) ptr );	/* see yyxrealloc() for (char *) cast */
 }
 
 #define YYTABLES_NAME "yytables"
 
-#line 302 "ada-lex.l"
+#line 340 "ada-lex.l"
 
 
 
@@ -2552,6 +2620,7 @@ lexer_init (FILE *inp)
 {
   BEGIN INITIAL;
   paren_depth = 0;
+  returned_complete = false;
   yyrestart (inp);
 }
 
@@ -2575,7 +2644,7 @@ canonicalizeNumeral (char *s1, const cha
 /* Interprets the prefix of NUM that consists of digits of the given BASE
    as an integer of that BASE, with the string EXP as an exponent.
    Puts value in yylval, and returns INT, if the string is valid.  Causes
-   an error if the number is improperly formated.   BASE, if NULL, defaults
+   an error if the number is improperly formatted.   BASE, if NULL, defaults
    to "10", and EXP to "1".  The EXP does not contain a leading 'e' or 'E'.
  */
 
@@ -2583,18 +2652,36 @@ static int
 processInt (struct parser_state *par_state, const char *base0,
 	    const char *num0, const char *exp0)
 {
-  ULONGEST result;
   long exp;
   int base;
-  const char *trailer;
+  /* For the based literal with an "f" prefix, we'll return a
+     floating-point number.  This counts the the number of "l"s seen,
+     to decide the width of the floating-point number to return.  -1
+     means no "f".  */
+  int floating_point_l_count = -1;
 
   if (base0 == NULL)
     base = 10;
   else
     {
-      base = strtol (base0, (char **) NULL, 10);
+      char *end_of_base;
+      base = strtol (base0, &end_of_base, 10);
       if (base < 2 || base > 16)
 	error (_("Invalid base: %d."), base);
+      while (*end_of_base == 'l')
+	{
+	  ++floating_point_l_count;
+	  ++end_of_base;
+	}
+      /* This assertion is ensured by the pattern.  */
+      gdb_assert (floating_point_l_count == -1 || *end_of_base == 'f');
+      if (*end_of_base == 'f')
+	{
+	  ++end_of_base;
+	  ++floating_point_l_count;
+	}
+      /* This assertion is ensured by the pattern.  */
+      gdb_assert (*end_of_base == '#');
     }
 
   if (exp0 == NULL)
@@ -2602,55 +2689,92 @@ processInt (struct parser_state *par_sta
   else
     exp = strtol(exp0, (char **) NULL, 10);
 
-  errno = 0;
-  result = strtoulst (num0, &trailer, base);
-  if (errno == ERANGE)
-    error (_("Integer literal out of range"));
-  if (isxdigit(*trailer))
-    error (_("Invalid digit `%c' in based literal"), *trailer);
+  gdb_mpz result;
+  while (isxdigit (*num0))
+    {
+      int dig = fromhex (*num0);
+      if (dig >= base)
+	error (_("Invalid digit `%c' in based literal"), *num0);
+      result *= base;
+      result += dig;
+      ++num0;
+    }
 
   while (exp > 0)
     {
-      if (result > (ULONG_MAX / base))
-	error (_("Integer literal out of range"));
       result *= base;
       exp -= 1;
     }
 
-  if ((result >> (gdbarch_int_bit (par_state->gdbarch ())-1)) == 0)
-    yylval.typed_val.type = type_int (par_state);
-  else if ((result >> (gdbarch_long_bit (par_state->gdbarch ())-1)) == 0)
-    yylval.typed_val.type = type_long (par_state);
-  else if (((result >> (gdbarch_long_bit (par_state->gdbarch ())-1)) >> 1) == 0)
+  if (floating_point_l_count > -1)
     {
-      /* We have a number representable as an unsigned integer quantity.
-         For consistency with the C treatment, we will treat it as an
-	 anonymous modular (unsigned) quantity.  Alas, the types are such
-	 that we need to store .val as a signed quantity.  Sorry
-         for the mess, but C doesn't officially guarantee that a simple
-         assignment does the trick (no, it doesn't; read the reference manual).
-       */
-      yylval.typed_val.type
-	= builtin_type (par_state->gdbarch ())->builtin_unsigned_long;
-      if (result & LONGEST_SIGN)
-	yylval.typed_val.val =
-	  (LONGEST) (result & ~LONGEST_SIGN)
-	  - (LONGEST_SIGN>>1) - (LONGEST_SIGN>>1);
+      struct type *fp_type;
+      if (floating_point_l_count == 0)
+	fp_type = language_lookup_primitive_type (par_state->language (),
+						  par_state->gdbarch (),
+						  "float");
+      else if (floating_point_l_count == 1)
+	fp_type = language_lookup_primitive_type (par_state->language (),
+						  par_state->gdbarch (),
+						  "long_float");
       else
-	yylval.typed_val.val = (LONGEST) result;
-      return INT;
+	{
+	  /* This assertion is ensured by the pattern.  */
+	  gdb_assert (floating_point_l_count == 2);
+	  fp_type = language_lookup_primitive_type (par_state->language (),
+						    par_state->gdbarch (),
+						    "long_long_float");
+	}
+
+      yylval.typed_val_float.type = fp_type;
+      result.write (gdb::make_array_view (yylval.typed_val_float.val,
+					  fp_type->length ()),
+		    type_byte_order (fp_type),
+		    true);
+
+      return FLOAT;
     }
+
+  int_storage.emplace_back (new gdb_mpz (std::move (result)));
+  const gdb_mpz *value = int_storage.back ().get ();
+
+  int int_bits = gdbarch_int_bit (par_state->gdbarch ());
+  int long_bits = gdbarch_long_bit (par_state->gdbarch ());
+  int long_long_bits = gdbarch_long_long_bit (par_state->gdbarch ());
+
+  if (fits_in_type (1, *value, int_bits, true))
+    yylval.typed_val.type = parse_type (par_state)->builtin_int;
+  else if (fits_in_type (1, *value, long_bits, true))
+    yylval.typed_val.type = parse_type (par_state)->builtin_long;
+  else if (fits_in_type (1, *value, long_bits, false))
+    yylval.typed_val.type
+      = builtin_type (par_state->gdbarch ())->builtin_unsigned_long;
+  else if (fits_in_type (1, *value, long_long_bits, true))
+    yylval.typed_val.type = parse_type (par_state)->builtin_long_long;
+  else if (fits_in_type (1, *value, long_long_bits, false))
+    yylval.typed_val.type
+      = builtin_type (par_state->gdbarch ())->builtin_unsigned_long_long;
+  else if (fits_in_type (1, *value, 128, true))
+    yylval.typed_val.type
+      = language_lookup_primitive_type (par_state->language (),
+					par_state->gdbarch (),
+					"long_long_long_integer");
+  else if (fits_in_type (1, *value, 128, false))
+    yylval.typed_val.type
+      = language_lookup_primitive_type (par_state->language (),
+					par_state->gdbarch (),
+					"unsigned_long_long_long_integer");
   else
-    yylval.typed_val.type = type_long_long (par_state);
+    error (_("Integer literal out of range"));
 
-  yylval.typed_val.val = (LONGEST) result;
+  yylval.typed_val.val = value;
   return INT;
 }
 
 static int
 processReal (struct parser_state *par_state, const char *num0)
 {
-  yylval.typed_val_float.type = type_long_double (par_state);
+  yylval.typed_val_float.type = parse_type (par_state)->builtin_long_double;
 
   bool parsed = parse_float (num0, strlen (num0),
 			     yylval.typed_val_float.type,
@@ -2694,33 +2818,33 @@ processId (const char *name0, int len)
       return result;
     }
 
+  bool in_quotes = false;
   i = i0 = 0;
   while (i0 < len)
     {
-      if (isalnum (name0[i0]))
+      if (name0[i0] == COMPLETE_CHAR)
+	{
+	  /* Just ignore.  */
+	  ++i0;
+	}
+      else if (in_quotes)
+	name[i++] = name0[i0++];
+      else if (isalnum (name0[i0]))
 	{
 	  name[i] = tolower (name0[i0]);
 	  i += 1; i0 += 1;
 	}
-      else switch (name0[i0])
+      else if (isspace (name0[i0]))
+	i0 += 1;
+      else if (name0[i0] == '\'')
 	{
-	default:
-	  name[i] = name0[i0];
-	  i += 1; i0 += 1;
-	  break;
-	case ' ': case '\t':
-	  i0 += 1;
-	  break;
-	case '\'':
-	  do
-	    {
-	      name[i] = name0[i0];
-	      i += 1; i0 += 1;
-	    }
-	  while (i0 < len && name0[i0] != '\'');
-	  i0 += 1;
-	  break;
+	  /* Copy the starting quote, but not the ending quote.  */
+	  if (!in_quotes)
+	    name[i++] = name0[i0++];
+	  in_quotes = !in_quotes;
 	}
+      else
+	name[i++] = name0[i0++];
     }
   name[i] = '\000';
 
@@ -2754,10 +2878,12 @@ processString (const char *text, int len
 	     }
            else
 	     {
-               int chr;
-	       sscanf (p+2, "%2x", &chr);
+	       const char *end;
+	       ULONGEST chr = strtoulst (p + 2, &end, 16);
+	       if (chr > 0xff)
+		 error (_("wide strings are not yet supported"));
 	       *q = (char) chr;
-	       p += 5;
+	       p = end + 1;
 	     }
          }
        else
@@ -2831,7 +2957,8 @@ attributes[] = {
   { "size", TICK_SIZE },
   { "tag", TICK_TAG },
   { "val", TICK_VAL },
-  { NULL, -1 }
+  { "enum_rep", TICK_ENUM_REP },
+  { "enum_val", TICK_ENUM_VAL },
 };
 
 /* Return the syntactic code corresponding to the attribute name or
@@ -2840,24 +2967,52 @@ attributes[] = {
 static int
 processAttribute (const char *str)
 {
-  int i, k;
+  gdb_assert (*str == '\'');
+  ++str;
+  while (isspace (*str))
+    ++str;
 
-  for (i = 0; attributes[i].code != -1; i += 1)
-    if (strcasecmp (str, attributes[i].name) == 0)
-      return attributes[i].code;
+  int len = strlen (str);
+  if (len > 0 && str[len - 1] == COMPLETE_CHAR)
+    {
+      /* This is enforced by YY_INPUT.  */
+      gdb_assert (pstate->parse_completion);
+      yylval.sval.ptr = obstack_strndup (&temp_parse_space, str, len - 1);
+      yylval.sval.length = len - 1;
+      return TICK_COMPLETE;
+    }
 
-  for (i = 0, k = -1; attributes[i].code != -1; i += 1)
-    if (subseqMatch (str, attributes[i].name))
+  for (const auto &item : attributes)
+    if (strcasecmp (str, item.name) == 0)
+      return item.code;
+
+  std::optional<int> found;
+  for (const auto &item : attributes)
+    if (subseqMatch (str, item.name))
       {
-	if (k == -1)
-	  k = i;
+	if (!found.has_value ())
+	  found = item.code;
 	else
 	  error (_("ambiguous attribute name: `%s'"), str);
       }
-  if (k == -1)
+  if (!found.has_value ())
     error (_("unrecognized attribute: `%s'"), str);
 
-  return attributes[k].code;
+  return *found;
+}
+
+bool
+ada_tick_completer::complete (struct expression *exp,
+			      completion_tracker &tracker)
+{
+  completion_list output;
+  for (const auto &item : attributes)
+    {
+      if (strncasecmp (item.name, m_name.c_str (), m_name.length ()) == 0)
+	output.emplace_back (xstrdup (item.name));
+    }
+  tracker.add_completions (std::move (output));
+  return true;
 }
 
 /* Back up lexptr by yyleng and then to the rightmost occurrence of
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-lex.l ./gdb/ada-lex.l
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-lex.l	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ada-lex.l	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
-/* FLEX lexer for Ada expressions, for GDB.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+/* FLEX lexer for Ada expressions, for GDB. -*- c++ -*-
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,7 +30,7 @@ HEXDIG	[0-9a-f]
 NUM16	({HEXDIG}({HEXDIG}|_)*)
 OCTDIG	[0-7]
 LETTER	[a-z_]
-ID	({LETTER}({LETTER}|{DIG})*|"<"{LETTER}({LETTER}|{DIG})*">")
+ID	({LETTER}({LETTER}|{DIG}|[\x80-\xff])*|"<"{LETTER}({LETTER}|{DIG})*">")
 WHITE	[ \t\n]
 TICK	("'"{WHITE}*)
 GRAPHIC [a-z0-9 #&'()*+,-./:;<>=_|!$%?@\[\]\\^`{}~]
@@ -39,13 +39,20 @@ OPER    ([-+*/=<>&]|"<="|">="|"**"|"/="|
 EXP	(e[+-]{NUM10})
 POSEXP  (e"+"?{NUM10})
 
+/* This must agree with COMPLETION_CHAR below.  See the comment there
+   for the explanation.  */
+COMPLETE "\001"
+NOT_COMPLETE [^\001]
+
 %{
 
 #include "diagnostics.h"
 
 /* Some old versions of flex generate code that uses the "register" keyword,
    which clang warns about.  This was observed for example with flex 2.5.35,
-   as shipped with macOS 10.12.  */
+   as shipped with macOS 10.12.  The same happens with flex 2.5.37 and g++ 11
+   which defaults to ISO C++17, that does not allow register storage class
+   specifiers.  */
 DIAGNOSTIC_PUSH
 DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
 
@@ -71,18 +78,35 @@ static void rewind_to_char (int);
    Defining YY_NO_INPUT comments it out.  */
 #define YY_NO_INPUT
 
-#undef YY_INPUT
-#define YY_INPUT(BUF, RESULT, MAX_SIZE) \
-    if ( *pstate->lexptr == '\000' ) \
-      (RESULT) = YY_NULL; \
-    else \
-      { \
-        *(BUF) = *pstate->lexptr; \
-        (RESULT) = 1; \
-	pstate->lexptr += 1; \
-      }
+/* When completing, we'll return a special character at the end of the
+   input, to signal the completion position to the lexer.  This is
+   done because flex does not have a generally useful way to detect
+   EOF in a pattern.  This variable records whether the special
+   character has been emitted.  */
+static bool returned_complete = false;
 
-static int find_dot_all (const char *);
+/* The character we use to represent the completion point.  */
+#define COMPLETE_CHAR '\001'
+
+#undef YY_INPUT
+#define YY_INPUT(BUF, RESULT, MAX_SIZE)					\
+  if ( *pstate->lexptr == '\000' )					\
+    {									\
+      if (pstate->parse_completion && !returned_complete)		\
+	{								\
+	  returned_complete = true;					\
+	  *(BUF) = COMPLETE_CHAR;					\
+	  (RESULT) = 1;							\
+	}								\
+      else								\
+	(RESULT) = YY_NULL;						\
+    }									\
+  else									\
+    {									\
+      *(BUF) = *pstate->lexptr == COMPLETE_CHAR ? ' ' : *pstate->lexptr; \
+      (RESULT) = 1;							\
+      pstate->lexptr += 1;						\
+    }
 
 /* Depth of parentheses.  */
 static int paren_depth;
@@ -101,8 +125,9 @@ static int paren_depth;
 
 {NUM10}{POSEXP}  {
 		   canonicalizeNumeral (numbuf, yytext);
-		   return processInt (pstate, NULL, numbuf,
-				      strrchr (numbuf, 'e') + 1);
+		   char *e_ptr = strrchr (numbuf, 'e');
+		   *e_ptr = '\0';
+		   return processInt (pstate, nullptr, numbuf, e_ptr + 1);
 		 }
 
 {NUM10}          {
@@ -112,12 +137,18 @@ static int paren_depth;
 
 {NUM10}"#"{HEXDIG}({HEXDIG}|_)*"#"{POSEXP} {
 		   canonicalizeNumeral (numbuf, yytext);
+		   char *e_ptr = strrchr (numbuf, 'e');
+		   *e_ptr = '\0';
 		   return processInt (pstate, numbuf,
 				      strchr (numbuf, '#') + 1,
-				      strrchr(numbuf, '#') + 1);
+				      e_ptr + 1);
 		 }
 
-{NUM10}"#"{HEXDIG}({HEXDIG}|_)*"#" {
+	/* The "llf" is a gdb extension to allow a floating-point
+	   constant to be written in some other base.  The
+	   floating-point number is formed by reinterpreting the
+	   bytes, allowing direct control over the bits.  */
+{NUM10}(l{0,2}f)?"#"{HEXDIG}({HEXDIG}|_)*"#" {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processInt (pstate, numbuf, strchr (numbuf, '#') + 1,
 				      NULL);
@@ -148,20 +179,22 @@ static int paren_depth;
 		}
 
 <INITIAL>"'"({GRAPHIC}|\")"'" {
-		   yylval.typed_val.type = type_char (pstate);
-		   yylval.typed_val.val = yytext[1];
+		   yylval.typed_char.val = yytext[1];
+		   yylval.typed_char.type = type_for_char (pstate, yytext[1]);
 		   return CHARLIT;
 		}
 
-<INITIAL>"'[\""{HEXDIG}{2}"\"]'"   {
-                   int v;
-                   yylval.typed_val.type = type_char (pstate);
-		   sscanf (yytext+3, "%2x", &v);
-		   yylval.typed_val.val = v;
+<INITIAL>"'[\""{HEXDIG}{2,}"\"]'"   {
+                   ULONGEST v = strtoulst (yytext+3, nullptr, 16);
+		   yylval.typed_char.val = v;
+                   yylval.typed_char.type = type_for_char (pstate, v);
 		   return CHARLIT;
 		}
 
-\"({GRAPHIC}|"[\""({HEXDIG}{2}|\")"\"]")*\"   {
+	/* Note that we don't handle bracket sequences of more than 2
+	   digits here.  Currently there's no support for wide or
+	   wide-wide strings.  */
+\"({GRAPHIC}|"[\""({HEXDIG}{2,}|\")"\"]")*\"   {
 	           yylval.sval = processString (yytext+1, yyleng-2);
 		   return STRING;
 		}
@@ -216,7 +249,7 @@ false		{ return FALSEKEYWORD; }
 
         /* ATTRIBUTES */
 
-{TICK}[a-zA-Z][a-zA-Z_]+ { BEGIN INITIAL; return processAttribute (yytext+1); }
+{TICK}([a-z][a-z_]*)?{COMPLETE}? { BEGIN INITIAL; return processAttribute (yytext); }
 
 	/* PUNCTUATION */
 
@@ -228,9 +261,9 @@ false		{ return FALSEKEYWORD; }
 "<="		{ return LEQ; }
 ">="		{ return GEQ; }
 
-<BEFORE_QUAL_QUOTE>"'" { BEGIN INITIAL; return '\''; }
+<BEFORE_QUAL_QUOTE>"'"/{NOT_COMPLETE} { BEGIN INITIAL; return '\''; }
 
-[-&*+./:<>=|;\[\]] { return yytext[0]; }
+[-&*+{}@/:<>=|;\[\]] { return yytext[0]; }
 
 ","		{ if (paren_depth == 0 && pstate->comma_terminates)
 		    {
@@ -254,14 +287,20 @@ false		{ return FALSEKEYWORD; }
 		    }
 		}
 
-"."{WHITE}*all  { return DOT_ALL; }
-
-"."{WHITE}*{ID} {
+"."{WHITE}*{ID}{COMPLETE}? {
 	 	  yylval.sval = processId (yytext+1, yyleng-1);
+		  if (yytext[yyleng - 1] == COMPLETE_CHAR)
+		    return DOT_COMPLETE;
 	          return DOT_ID;
 		}
 
-{ID}({WHITE}*"."{WHITE}*({ID}|\"{OPER}\"))*(" "*"'")?  {
+"."{WHITE}*{COMPLETE} {
+		  yylval.sval.ptr = "";
+		  yylval.sval.length = 0;
+		  return DOT_COMPLETE;
+		}
+
+{ID}({WHITE}*"."{WHITE}*({ID}|\"{OPER}\"))*(" "*"'"|{COMPLETE})?  {
                   int all_posn = find_dot_all (yytext);
 
                   if (all_posn == -1 && yytext[yyleng-1] == '\'')
@@ -271,8 +310,9 @@ false		{ return FALSEKEYWORD; }
 		    }
                   else if (all_posn >= 0)
 		    yyless (all_posn);
+		  bool is_completion = yytext[yyleng - 1] == COMPLETE_CHAR;
                   yylval.sval = processId (yytext, yyleng);
-                  return NAME;
+                  return is_completion ? NAME_COMPLETE : NAME;
                }
 
 
@@ -286,8 +326,6 @@ false		{ return FALSEKEYWORD; }
 
 "::"            { return COLONCOLON; }
 
-[{}@]		{ return yytext[0]; }
-
 	/* REGISTERS AND GDB CONVENIENCE VARIABLES */
 
 "$"({LETTER}|{DIG}|"$")*  {
@@ -309,6 +347,7 @@ lexer_init (FILE *inp)
 {
   BEGIN INITIAL;
   paren_depth = 0;
+  returned_complete = false;
   yyrestart (inp);
 }
 
@@ -332,7 +371,7 @@ canonicalizeNumeral (char *s1, const cha
 /* Interprets the prefix of NUM that consists of digits of the given BASE
    as an integer of that BASE, with the string EXP as an exponent.
    Puts value in yylval, and returns INT, if the string is valid.  Causes
-   an error if the number is improperly formated.   BASE, if NULL, defaults
+   an error if the number is improperly formatted.   BASE, if NULL, defaults
    to "10", and EXP to "1".  The EXP does not contain a leading 'e' or 'E'.
  */
 
@@ -340,18 +379,36 @@ static int
 processInt (struct parser_state *par_state, const char *base0,
 	    const char *num0, const char *exp0)
 {
-  ULONGEST result;
   long exp;
   int base;
-  const char *trailer;
+  /* For the based literal with an "f" prefix, we'll return a
+     floating-point number.  This counts the the number of "l"s seen,
+     to decide the width of the floating-point number to return.  -1
+     means no "f".  */
+  int floating_point_l_count = -1;
 
   if (base0 == NULL)
     base = 10;
   else
     {
-      base = strtol (base0, (char **) NULL, 10);
+      char *end_of_base;
+      base = strtol (base0, &end_of_base, 10);
       if (base < 2 || base > 16)
 	error (_("Invalid base: %d."), base);
+      while (*end_of_base == 'l')
+	{
+	  ++floating_point_l_count;
+	  ++end_of_base;
+	}
+      /* This assertion is ensured by the pattern.  */
+      gdb_assert (floating_point_l_count == -1 || *end_of_base == 'f');
+      if (*end_of_base == 'f')
+	{
+	  ++end_of_base;
+	  ++floating_point_l_count;
+	}
+      /* This assertion is ensured by the pattern.  */
+      gdb_assert (*end_of_base == '#');
     }
 
   if (exp0 == NULL)
@@ -359,55 +416,92 @@ processInt (struct parser_state *par_sta
   else
     exp = strtol(exp0, (char **) NULL, 10);
 
-  errno = 0;
-  result = strtoulst (num0, &trailer, base);
-  if (errno == ERANGE)
-    error (_("Integer literal out of range"));
-  if (isxdigit(*trailer))
-    error (_("Invalid digit `%c' in based literal"), *trailer);
+  gdb_mpz result;
+  while (isxdigit (*num0))
+    {
+      int dig = fromhex (*num0);
+      if (dig >= base)
+	error (_("Invalid digit `%c' in based literal"), *num0);
+      result *= base;
+      result += dig;
+      ++num0;
+    }
 
   while (exp > 0)
     {
-      if (result > (ULONG_MAX / base))
-	error (_("Integer literal out of range"));
       result *= base;
       exp -= 1;
     }
 
-  if ((result >> (gdbarch_int_bit (par_state->gdbarch ())-1)) == 0)
-    yylval.typed_val.type = type_int (par_state);
-  else if ((result >> (gdbarch_long_bit (par_state->gdbarch ())-1)) == 0)
-    yylval.typed_val.type = type_long (par_state);
-  else if (((result >> (gdbarch_long_bit (par_state->gdbarch ())-1)) >> 1) == 0)
+  if (floating_point_l_count > -1)
     {
-      /* We have a number representable as an unsigned integer quantity.
-         For consistency with the C treatment, we will treat it as an
-	 anonymous modular (unsigned) quantity.  Alas, the types are such
-	 that we need to store .val as a signed quantity.  Sorry
-         for the mess, but C doesn't officially guarantee that a simple
-         assignment does the trick (no, it doesn't; read the reference manual).
-       */
-      yylval.typed_val.type
-	= builtin_type (par_state->gdbarch ())->builtin_unsigned_long;
-      if (result & LONGEST_SIGN)
-	yylval.typed_val.val =
-	  (LONGEST) (result & ~LONGEST_SIGN)
-	  - (LONGEST_SIGN>>1) - (LONGEST_SIGN>>1);
+      struct type *fp_type;
+      if (floating_point_l_count == 0)
+	fp_type = language_lookup_primitive_type (par_state->language (),
+						  par_state->gdbarch (),
+						  "float");
+      else if (floating_point_l_count == 1)
+	fp_type = language_lookup_primitive_type (par_state->language (),
+						  par_state->gdbarch (),
+						  "long_float");
       else
-	yylval.typed_val.val = (LONGEST) result;
-      return INT;
+	{
+	  /* This assertion is ensured by the pattern.  */
+	  gdb_assert (floating_point_l_count == 2);
+	  fp_type = language_lookup_primitive_type (par_state->language (),
+						    par_state->gdbarch (),
+						    "long_long_float");
+	}
+
+      yylval.typed_val_float.type = fp_type;
+      result.write (gdb::make_array_view (yylval.typed_val_float.val,
+					  fp_type->length ()),
+		    type_byte_order (fp_type),
+		    true);
+
+      return FLOAT;
     }
+
+  int_storage.emplace_back (new gdb_mpz (std::move (result)));
+  const gdb_mpz *value = int_storage.back ().get ();
+
+  int int_bits = gdbarch_int_bit (par_state->gdbarch ());
+  int long_bits = gdbarch_long_bit (par_state->gdbarch ());
+  int long_long_bits = gdbarch_long_long_bit (par_state->gdbarch ());
+
+  if (fits_in_type (1, *value, int_bits, true))
+    yylval.typed_val.type = parse_type (par_state)->builtin_int;
+  else if (fits_in_type (1, *value, long_bits, true))
+    yylval.typed_val.type = parse_type (par_state)->builtin_long;
+  else if (fits_in_type (1, *value, long_bits, false))
+    yylval.typed_val.type
+      = builtin_type (par_state->gdbarch ())->builtin_unsigned_long;
+  else if (fits_in_type (1, *value, long_long_bits, true))
+    yylval.typed_val.type = parse_type (par_state)->builtin_long_long;
+  else if (fits_in_type (1, *value, long_long_bits, false))
+    yylval.typed_val.type
+      = builtin_type (par_state->gdbarch ())->builtin_unsigned_long_long;
+  else if (fits_in_type (1, *value, 128, true))
+    yylval.typed_val.type
+      = language_lookup_primitive_type (par_state->language (),
+					par_state->gdbarch (),
+					"long_long_long_integer");
+  else if (fits_in_type (1, *value, 128, false))
+    yylval.typed_val.type
+      = language_lookup_primitive_type (par_state->language (),
+					par_state->gdbarch (),
+					"unsigned_long_long_long_integer");
   else
-    yylval.typed_val.type = type_long_long (par_state);
+    error (_("Integer literal out of range"));
 
-  yylval.typed_val.val = (LONGEST) result;
+  yylval.typed_val.val = value;
   return INT;
 }
 
 static int
 processReal (struct parser_state *par_state, const char *num0)
 {
-  yylval.typed_val_float.type = type_long_double (par_state);
+  yylval.typed_val_float.type = parse_type (par_state)->builtin_long_double;
 
   bool parsed = parse_float (num0, strlen (num0),
 			     yylval.typed_val_float.type,
@@ -451,33 +545,33 @@ processId (const char *name0, int len)
       return result;
     }
 
+  bool in_quotes = false;
   i = i0 = 0;
   while (i0 < len)
     {
-      if (isalnum (name0[i0]))
+      if (name0[i0] == COMPLETE_CHAR)
+	{
+	  /* Just ignore.  */
+	  ++i0;
+	}
+      else if (in_quotes)
+	name[i++] = name0[i0++];
+      else if (isalnum (name0[i0]))
 	{
 	  name[i] = tolower (name0[i0]);
 	  i += 1; i0 += 1;
 	}
-      else switch (name0[i0])
+      else if (isspace (name0[i0]))
+	i0 += 1;
+      else if (name0[i0] == '\'')
 	{
-	default:
-	  name[i] = name0[i0];
-	  i += 1; i0 += 1;
-	  break;
-	case ' ': case '\t':
-	  i0 += 1;
-	  break;
-	case '\'':
-	  do
-	    {
-	      name[i] = name0[i0];
-	      i += 1; i0 += 1;
-	    }
-	  while (i0 < len && name0[i0] != '\'');
-	  i0 += 1;
-	  break;
+	  /* Copy the starting quote, but not the ending quote.  */
+	  if (!in_quotes)
+	    name[i++] = name0[i0++];
+	  in_quotes = !in_quotes;
 	}
+      else
+	name[i++] = name0[i0++];
     }
   name[i] = '\000';
 
@@ -511,10 +605,12 @@ processString (const char *text, int len
 	     }
            else
 	     {
-               int chr;
-	       sscanf (p+2, "%2x", &chr);
+	       const char *end;
+	       ULONGEST chr = strtoulst (p + 2, &end, 16);
+	       if (chr > 0xff)
+		 error (_("wide strings are not yet supported"));
 	       *q = (char) chr;
-	       p += 5;
+	       p = end + 1;
 	     }
          }
        else
@@ -588,7 +684,8 @@ attributes[] = {
   { "size", TICK_SIZE },
   { "tag", TICK_TAG },
   { "val", TICK_VAL },
-  { NULL, -1 }
+  { "enum_rep", TICK_ENUM_REP },
+  { "enum_val", TICK_ENUM_VAL },
 };
 
 /* Return the syntactic code corresponding to the attribute name or
@@ -597,24 +694,52 @@ attributes[] = {
 static int
 processAttribute (const char *str)
 {
-  int i, k;
+  gdb_assert (*str == '\'');
+  ++str;
+  while (isspace (*str))
+    ++str;
 
-  for (i = 0; attributes[i].code != -1; i += 1)
-    if (strcasecmp (str, attributes[i].name) == 0)
-      return attributes[i].code;
+  int len = strlen (str);
+  if (len > 0 && str[len - 1] == COMPLETE_CHAR)
+    {
+      /* This is enforced by YY_INPUT.  */
+      gdb_assert (pstate->parse_completion);
+      yylval.sval.ptr = obstack_strndup (&temp_parse_space, str, len - 1);
+      yylval.sval.length = len - 1;
+      return TICK_COMPLETE;
+    }
 
-  for (i = 0, k = -1; attributes[i].code != -1; i += 1)
-    if (subseqMatch (str, attributes[i].name))
+  for (const auto &item : attributes)
+    if (strcasecmp (str, item.name) == 0)
+      return item.code;
+
+  std::optional<int> found;
+  for (const auto &item : attributes)
+    if (subseqMatch (str, item.name))
       {
-	if (k == -1)
-	  k = i;
+	if (!found.has_value ())
+	  found = item.code;
 	else
 	  error (_("ambiguous attribute name: `%s'"), str);
       }
-  if (k == -1)
+  if (!found.has_value ())
     error (_("unrecognized attribute: `%s'"), str);
 
-  return attributes[k].code;
+  return *found;
+}
+
+bool
+ada_tick_completer::complete (struct expression *exp,
+			      completion_tracker &tracker)
+{
+  completion_list output;
+  for (const auto &item : attributes)
+    {
+      if (strncasecmp (item.name, m_name.c_str (), m_name.length ()) == 0)
+	output.emplace_back (xstrdup (item.name));
+    }
+  tracker.add_completions (std::move (output));
+  return true;
 }
 
 /* Back up lexptr by yyleng and then to the rightmost occurrence of
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-operator.def ./gdb/ada-operator.def
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-operator.def	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ada-operator.def	1970-01-01 00:00:00.000000000 +0000
@@ -1,98 +0,0 @@
-/* Ada language operator definitions for GDB, the GNU debugger.
-
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* X IN A'RANGE(N).  N is an immediate operand, surrounded by 
-   BINOP_IN_BOUNDS before and after.  A is an array, X an index 
-   value.  Evaluates to true iff X is within range of the Nth
-   dimension (1-based) of A.  (A multi-dimensional array
-   type is represented as array of array of ...) */
-OP (BINOP_IN_BOUNDS)
-
-/* X IN L .. U.  True iff L <= X <= U.  */
-OP (TERNOP_IN_RANGE)
-
-/* Ada attributes ('Foo). */
-OP (OP_ATR_FIRST)
-OP (OP_ATR_LAST)
-OP (OP_ATR_LENGTH)
-OP (OP_ATR_IMAGE)
-OP (OP_ATR_MAX)
-OP (OP_ATR_MIN)
-OP (OP_ATR_MODULUS)
-OP (OP_ATR_POS)
-OP (OP_ATR_SIZE)
-OP (OP_ATR_TAG)
-OP (OP_ATR_VAL)
-
-/* Ada type qualification.  It is encoded as for UNOP_CAST, above, 
-   and denotes the TYPE'(EXPR) construct. */
-OP (UNOP_QUAL)
-
-/* X IN TYPE.  The `TYPE' argument is immediate, with 
-   UNOP_IN_RANGE before and after it. True iff X is a member of 
-   type TYPE (typically a subrange). */
-OP (UNOP_IN_RANGE)
-
-/* An aggregate.   A single immediate operand, N>0, gives
-   the number of component specifications that follow.  The
-   immediate operand is followed by a second OP_AGGREGATE.  
-   Next come N component specifications.  A component
-   specification is either an OP_OTHERS (others=>...), an
-   OP_CHOICES (for named associations), or other expression (for
-   positional aggregates only).  Aggregates currently
-   occur only as the right sides of assignments. */
-OP (OP_AGGREGATE)
-
-/* An others clause.  Followed by a single expression. */
-OP (OP_OTHERS)
-
-/* An aggregate component association.  A single immediate operand, N, 
-   gives the number of choices that follow.  This is followed by a second
-   OP_CHOICES operator.  Next come N operands, each of which is an
-   expression, an OP_DISCRETE_RANGE, or an OP_NAME---the latter 
-   for a simple name that must be a record component name and does 
-   not correspond to a single existing symbol.  After the N choice 
-   indicators comes an expression giving the value.
-
-   In an aggregate such as (X => E1, ...), where X is a simple
-   name, X could syntactically be either a component_selector_name 
-   or an expression used as a discrete_choice, depending on the
-   aggregate's type context.  Since this is not known at parsing
-   time, we don't attempt to disambiguate X if it has multiple
-   definitions, but instead supply an OP_NAME.  If X has a single
-   definition, we represent it with an OP_VAR_VALUE, even though
-   it may turn out to be within a record aggregate.  Aggregate 
-   evaluation can use either OP_NAMEs or OP_VAR_VALUEs to get a
-   record field name, and can evaluate OP_VAR_VALUE normally to
-   get its value as an expression.  Unfortunately, we lose out in
-   cases where X has multiple meanings and is part of an array
-   aggregate.  I hope these are not common enough to annoy users,
-   who can work around the problem in any case by putting
-   parentheses around X. */
-OP (OP_CHOICES)
-
-/* A positional aggregate component association.  The operator is 
-   followed by a single integer indicating the position in the 
-   aggregate (0-based), followed by a second OP_POSITIONAL.  Next 
-   follows a single expression giving the component value.  */
-OP (OP_POSITIONAL)
-
-/* A range of values.  Followed by two expressions giving the
-   upper and lower bounds of the range. */
-OP (OP_DISCRETE_RANGE)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-tasks.c ./gdb/ada-tasks.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-tasks.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ada-tasks.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-2019 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -64,7 +64,7 @@ enum task_states
 };
 
 /* A short description corresponding to each possible task state.  */
-static const char *task_states[] = {
+static const char * const task_states[] = {
   N_("Unactivated"),
   N_("Runnable"),
   N_("Terminated"),
@@ -85,8 +85,22 @@ static const char *task_states[] = {
   N_("Selective Wait")
 };
 
+/* Return a string representing the task state.  */
+static const char *
+get_state (unsigned value)
+{
+  if (value >= 0
+      && value <= ARRAY_SIZE (task_states)
+      && task_states[value][0] != '\0')
+    return _(task_states[value]);
+
+  static char buffer[100];
+  xsnprintf (buffer, sizeof (buffer), _("Unknown task state: %d"), value);
+  return buffer;
+}
+
 /* A longer description corresponding to each possible task state.  */
-static const char *long_task_states[] = {
+static const char * const long_task_states[] = {
   N_("Unactivated"),
   N_("Runnable"),
   N_("Terminated"),
@@ -107,6 +121,21 @@ static const char *long_task_states[] =
   N_("Blocked in selective wait statement")
 };
 
+/* Return a string representing the task state.  This uses the long
+   descriptions.  */
+static const char *
+get_long_state (unsigned value)
+{
+  if (value >= 0
+      && value <= ARRAY_SIZE (long_task_states)
+      && long_task_states[value][0] != '\0')
+    return _(long_task_states[value]);
+
+  static char buffer[100];
+  xsnprintf (buffer, sizeof (buffer), _("Unknown task state: %d"), value);
+  return buffer;
+}
+
 /* The index of certain important fields in the Ada Task Control Block
    record and sub-records.  */
 
@@ -159,10 +188,14 @@ struct ada_tasks_pspace_data
 
   /* The index of various fields in the ATCB record and sub-records.  */
   struct atcb_fieldnos atcb_fieldno {};
+
+  /* On some systems, gdbserver applies an offset to the CPU that is
+     reported.  */
+  unsigned int cpu_id_offset = 0;
 };
 
 /* Key to our per-program-space data.  */
-static const struct program_space_key<ada_tasks_pspace_data>
+static const registry<program_space>::key<ada_tasks_pspace_data>
   ada_tasks_pspace_data_handle;
 
 /* The kind of data structure used by the runtime to store the list
@@ -203,9 +236,9 @@ struct ada_tasks_inferior_data
      the list of Ada tasks.  The value of this field influences
      the interpretation of the known_tasks_addr field below:
        - ADA_TASKS_UNKNOWN: The value of known_tasks_addr hasn't
-         been determined yet;
+	 been determined yet;
        - ADA_TASKS_NOT_FOUND: The program probably does not use tasking
-         and the known_tasks_addr is irrelevant;
+	 and the known_tasks_addr is irrelevant;
        - ADA_TASKS_ARRAY: The known_tasks is an array;
        - ADA_TASKS_LIST: The known_tasks is a list.  */
   enum ada_known_tasks_kind known_tasks_kind = ADA_TASKS_UNKNOWN;
@@ -238,7 +271,7 @@ struct ada_tasks_inferior_data
 };
 
 /* Key to our per-inferior data.  */
-static const struct inferior_key<ada_tasks_inferior_data>
+static const registry<inferior>::key<ada_tasks_inferior_data>
   ada_tasks_inferior_data_handle;
 
 /* Return a string with TASKNO followed by the task name if TASK_INFO
@@ -277,7 +310,7 @@ get_ada_tasks_pspace_data (struct progra
 
    Note that we could use an observer of the inferior-created event
    to make sure that the ada-tasks per-inferior data always exists.
-   But we prefered this approach, as it avoids this entirely as long
+   But we preferred this approach, as it avoids this entirely as long
    as the user does not use any of the tasking features.  This is
    quite possible, particularly in the case where the inferior does
    not use tasking.  */
@@ -324,7 +357,7 @@ get_task_number_from_id (CORE_ADDR task_
   for (int i = 0; i < data->task_list.size (); i++)
     {
       if (data->task_list[i].task_id == task_id)
-        return i + 1;
+	return i + 1;
     }
 
   /* Task not found.  Return 0.  */
@@ -376,7 +409,7 @@ ada_get_task_info_from_ptid (ptid_t ptid
    terminated yet.  */
 
 void
-iterate_over_live_ada_tasks (ada_task_list_iterator_ftype *iterator)
+iterate_over_live_ada_tasks (ada_task_list_iterator_ftype iterator)
 {
   struct ada_tasks_inferior_data *data;
 
@@ -386,7 +419,7 @@ iterate_over_live_ada_tasks (ada_task_li
   for (ada_task_info &task : data->task_list)
     {
       if (!ada_task_is_alive (&task))
-        continue;
+	continue;
       iterator (&task);
     }
 }
@@ -397,7 +430,7 @@ iterate_over_live_ada_tasks (ada_task_li
 static void
 value_as_string (char *dest, struct value *val, int length)
 {
-  memcpy (dest, value_contents (val), length);
+  memcpy (dest, val->contents ().data (), length);
   dest[length] = '\0';
 }
 
@@ -424,17 +457,17 @@ read_fat_string_value (char *dest, struc
      to extract the string from the fat string.  */
   if (initialize_fieldnos)
     {
-      struct type *type = value_type (val);
+      struct type *type = val->type ();
       struct type *bounds_type;
 
       array_fieldno = ada_get_field_index (type, "P_ARRAY", 0);
       bounds_fieldno = ada_get_field_index (type, "P_BOUNDS", 0);
 
-      bounds_type = TYPE_FIELD_TYPE (type, bounds_fieldno);
-      if (TYPE_CODE (bounds_type) == TYPE_CODE_PTR)
-        bounds_type = TYPE_TARGET_TYPE (bounds_type);
-      if (TYPE_CODE (bounds_type) != TYPE_CODE_STRUCT)
-        error (_("Unknown task name format. Aborting"));
+      bounds_type = type->field (bounds_fieldno).type ();
+      if (bounds_type->code () == TYPE_CODE_PTR)
+	bounds_type = bounds_type->target_type ();
+      if (bounds_type->code () != TYPE_CODE_STRUCT)
+	error (_("Unknown task name format. Aborting"));
       upper_bound_fieldno = ada_get_field_index (bounds_type, "UB0", 0);
 
       initialize_fieldnos = 0;
@@ -451,7 +484,7 @@ read_fat_string_value (char *dest, struc
 
   /* Extract LEN characters from the fat string.  */
   array_val = value_ind (value_field (val, array_fieldno));
-  read_memory (value_address (array_val), (gdb_byte *) dest, len);
+  read_memory (array_val->address (), (gdb_byte *) dest, len);
 
   /* Add the NUL character to close the string.  */
   dest[len] = '\0';
@@ -487,54 +520,55 @@ ada_get_tcb_types_info (void)
      C-like) lookups to get the first match.  */
 
   struct symbol *atcb_sym =
-    lookup_symbol_in_language (atcb_name, NULL, STRUCT_DOMAIN,
+    lookup_symbol_in_language (atcb_name, NULL, SEARCH_TYPE_DOMAIN,
 			       language_c, NULL).symbol;
   const struct symbol *common_atcb_sym =
-    lookup_symbol_in_language (common_atcb_name, NULL, STRUCT_DOMAIN,
+    lookup_symbol_in_language (common_atcb_name, NULL, SEARCH_TYPE_DOMAIN,
 			       language_c, NULL).symbol;
   const struct symbol *private_data_sym =
-    lookup_symbol_in_language (private_data_name, NULL, STRUCT_DOMAIN,
+    lookup_symbol_in_language (private_data_name, NULL, SEARCH_TYPE_DOMAIN,
 			       language_c, NULL).symbol;
   const struct symbol *entry_call_record_sym =
-    lookup_symbol_in_language (entry_call_record_name, NULL, STRUCT_DOMAIN,
+    lookup_symbol_in_language (entry_call_record_name, NULL,
+			       SEARCH_TYPE_DOMAIN,
 			       language_c, NULL).symbol;
 
-  if (atcb_sym == NULL || atcb_sym->type == NULL)
+  if (atcb_sym == NULL || atcb_sym->type () == NULL)
     {
       /* In Ravenscar run-time libs, the  ATCB does not have a dynamic
-         size, so the symbol name differs.  */
+	 size, so the symbol name differs.  */
       atcb_sym = lookup_symbol_in_language (atcb_name_fixed, NULL,
-					    STRUCT_DOMAIN, language_c,
+					    SEARCH_TYPE_DOMAIN, language_c,
 					    NULL).symbol;
 
-      if (atcb_sym == NULL || atcb_sym->type == NULL)
-        return _("Cannot find Ada_Task_Control_Block type");
+      if (atcb_sym == NULL || atcb_sym->type () == NULL)
+	return _("Cannot find Ada_Task_Control_Block type");
 
-      type = atcb_sym->type;
+      type = atcb_sym->type ();
     }
   else
     {
       /* Get a static representation of the type record
-         Ada_Task_Control_Block.  */
-      type = atcb_sym->type;
+	 Ada_Task_Control_Block.  */
+      type = atcb_sym->type ();
       type = ada_template_to_fixed_record_type_1 (type, NULL, 0, NULL, 0);
     }
 
-  if (common_atcb_sym == NULL || common_atcb_sym->type == NULL)
+  if (common_atcb_sym == NULL || common_atcb_sym->type () == NULL)
     return _("Cannot find Common_ATCB type");
-  if (private_data_sym == NULL || private_data_sym->type == NULL)
+  if (private_data_sym == NULL || private_data_sym->type ()== NULL)
     return _("Cannot find Private_Data type");
-  if (entry_call_record_sym == NULL || entry_call_record_sym->type == NULL)
+  if (entry_call_record_sym == NULL || entry_call_record_sym->type () == NULL)
     return _("Cannot find Entry_Call_Record type");
 
   /* Get the type for Ada_Task_Control_Block.Common.  */
-  common_type = common_atcb_sym->type;
+  common_type = common_atcb_sym->type ();
 
   /* Get the type for Ada_Task_Control_Bloc.Common.Call.LL.  */
-  ll_type = private_data_sym->type;
+  ll_type = private_data_sym->type ();
 
   /* Get the type for Common_ATCB.Call.all.  */
-  call_type = entry_call_record_sym->type;
+  call_type = entry_call_record_sym->type ();
 
   /* Get the field indices.  */
   fieldnos.common = ada_get_field_index (type, "common", 0);
@@ -547,7 +581,7 @@ ada_get_tcb_types_info (void)
   fieldnos.image = ada_get_field_index (common_type, "task_image", 1);
   fieldnos.image_len = ada_get_field_index (common_type, "task_image_len", 1);
   fieldnos.activation_link = ada_get_field_index (common_type,
-                                                  "activation_link", 1);
+						  "activation_link", 1);
   fieldnos.call = ada_get_field_index (common_type, "call", 1);
   fieldnos.ll = ada_get_field_index (common_type, "ll", 0);
   fieldnos.base_cpu = ada_get_field_index (common_type, "base_cpu", 0);
@@ -564,6 +598,19 @@ ada_get_tcb_types_info (void)
   if (fieldnos.ll_lwp < 0)
     fieldnos.ll_lwp = ada_get_field_index (ll_type, "thread_id", 1);
 
+  /* Check for the CPU offset.  */
+  bound_minimal_symbol first_id_sym
+    = lookup_bound_minimal_symbol ("__gnat_gdb_cpu_first_id");
+  unsigned int first_id = 0;
+  if (first_id_sym.minsym != nullptr)
+    {
+      CORE_ADDR addr = first_id_sym.value_address ();
+      gdbarch *arch = current_inferior ()->arch ();
+      /* This symbol always has type uint32_t.  */
+      struct type *u32type = builtin_type (arch)->builtin_uint32;
+      first_id = value_as_long (value_at (u32type, addr));
+    }
+
   /* Set all the out parameters all at once, now that we are certain
      that there are no potential error() anymore.  */
   pspace_data = get_ada_tasks_pspace_data (current_program_space);
@@ -573,6 +620,7 @@ ada_get_tcb_types_info (void)
   pspace_data->atcb_ll_type = ll_type;
   pspace_data->atcb_call_type = call_type;
   pspace_data->atcb_fieldno = fieldnos;
+  pspace_data->cpu_id_offset = first_id;
   return NULL;
 }
 
@@ -583,7 +631,7 @@ ada_get_tcb_types_info (void)
 static ptid_t
 ptid_from_atcb_common (struct value *common_value)
 {
-  long thread = 0;
+  ULONGEST thread;
   CORE_ADDR lwp = 0;
   struct value *ll_value;
   ptid_t ptid;
@@ -658,10 +706,10 @@ read_atcb (CORE_ADDR task_id, struct ada
   if (pspace_data->atcb_fieldno.image_len == -1)
     {
       if (pspace_data->atcb_fieldno.image >= 0)
-        read_fat_string_value (task_info->name,
-                               value_field (common_value,
+	read_fat_string_value (task_info->name,
+			       value_field (common_value,
 					    pspace_data->atcb_fieldno.image),
-                               sizeof (task_info->name) - 1);
+			       sizeof (task_info->name) - 1);
       else
 	{
 	  struct bound_minimal_symbol msym;
@@ -679,7 +727,8 @@ read_atcb (CORE_ADDR task_id, struct ada
 		  task_name = p + 2;
 
 	      /* Copy the task name.  */
-	      strncpy (task_info->name, task_name, sizeof (task_info->name));
+	      strncpy (task_info->name, task_name,
+		       sizeof (task_info->name) - 1);
 	      task_info->name[sizeof (task_info->name) - 1] = 0;
 	    }
 	  else
@@ -696,7 +745,7 @@ read_atcb (CORE_ADDR task_id, struct ada
 				pspace_data->atcb_fieldno.image_len));
 
       value_as_string (task_info->name,
-                       value_field (common_value,
+		       value_field (common_value,
 				    pspace_data->atcb_fieldno.image),
 		       len);
     }
@@ -726,22 +775,22 @@ read_atcb (CORE_ADDR task_id, struct ada
       && pspace_data->atcb_fieldno.entry_calls > 0)
     {
       /* Let My_ATCB be the Ada task control block of a task calling the
-         entry of another task; then the Task_Id of the called task is
-         in My_ATCB.Entry_Calls (My_ATCB.ATC_Nesting_Level).Called_Task.  */
+	 entry of another task; then the Task_Id of the called task is
+	 in My_ATCB.Entry_Calls (My_ATCB.ATC_Nesting_Level).Called_Task.  */
       atc_nesting_level_value =
-        value_field (tcb_value, pspace_data->atcb_fieldno.atc_nesting_level);
+	value_field (tcb_value, pspace_data->atcb_fieldno.atc_nesting_level);
       entry_calls_value =
-        ada_coerce_to_simple_array_ptr
+	ada_coerce_to_simple_array_ptr
 	  (value_field (tcb_value, pspace_data->atcb_fieldno.entry_calls));
       entry_calls_value_element =
-        value_subscript (entry_calls_value,
+	value_subscript (entry_calls_value,
 			 value_as_long (atc_nesting_level_value));
       called_task_fieldno =
-        ada_get_field_index (value_type (entry_calls_value_element),
-                             "called_task", 0);
+	ada_get_field_index (entry_calls_value_element->type (),
+			     "called_task", 0);
       task_info->called_task =
-        value_as_address (value_field (entry_calls_value_element,
-                                       called_task_fieldno));
+	value_as_address (value_field (entry_calls_value_element,
+				       called_task_fieldno));
     }
 
   /* If the ATCB contains some information about RV callers, then
@@ -750,26 +799,27 @@ read_atcb (CORE_ADDR task_id, struct ada
   if (pspace_data->atcb_fieldno.call >= 0)
     {
       /* Get the ID of the caller task from Common_ATCB.Call.all.Self.
-         If Common_ATCB.Call is null, then there is no caller.  */
+	 If Common_ATCB.Call is null, then there is no caller.  */
       const CORE_ADDR call =
-        value_as_address (value_field (common_value,
+	value_as_address (value_field (common_value,
 				       pspace_data->atcb_fieldno.call));
       struct value *call_val;
 
       if (call != 0)
-        {
-          call_val =
-            value_from_contents_and_address (pspace_data->atcb_call_type,
+	{
+	  call_val =
+	    value_from_contents_and_address (pspace_data->atcb_call_type,
 					     NULL, call);
-          task_info->caller_task =
-            value_as_address
+	  task_info->caller_task =
+	    value_as_address
 	      (value_field (call_val, pspace_data->atcb_fieldno.call_self));
-        }
+	}
     }
 
   task_info->base_cpu
-    = value_as_long (value_field (common_value,
-				  pspace_data->atcb_fieldno.base_cpu));
+    = (pspace_data->cpu_id_offset
+      + value_as_long (value_field (common_value,
+				    pspace_data->atcb_fieldno.base_cpu)));
 
   /* And finally, compute the task ptid.  Note that there is not point
      in computing it if the task is no longer alive, in which case
@@ -799,7 +849,7 @@ add_ada_task (CORE_ADDR task_id, struct
 static bool
 read_known_tasks_array (struct ada_tasks_inferior_data *data)
 {
-  const int target_ptr_byte = TYPE_LENGTH (data->known_tasks_element);
+  const int target_ptr_byte = data->known_tasks_element->length ();
   const int known_tasks_size = target_ptr_byte * data->known_tasks_length;
   gdb_byte *known_tasks = (gdb_byte *) alloca (known_tasks_size);
   int i;
@@ -810,11 +860,11 @@ read_known_tasks_array (struct ada_tasks
   for (i = 0; i < data->known_tasks_length; i++)
     {
       CORE_ADDR task_id =
-        extract_typed_address (known_tasks + i * target_ptr_byte,
+	extract_typed_address (known_tasks + i * target_ptr_byte,
 			       data->known_tasks_element);
 
       if (task_id != 0)
-        add_ada_task (task_id, current_inferior ());
+	add_ada_task (task_id, current_inferior ());
     }
 
   return true;
@@ -826,7 +876,7 @@ read_known_tasks_array (struct ada_tasks
 static bool
 read_known_tasks_list (struct ada_tasks_inferior_data *data)
 {
-  const int target_ptr_byte = TYPE_LENGTH (data->known_tasks_element);
+  const int target_ptr_byte = data->known_tasks_element->length ();
   gdb_byte *known_tasks = (gdb_byte *) alloca (target_ptr_byte);
   CORE_ADDR task_id;
   const struct ada_tasks_pspace_data *pspace_data
@@ -852,7 +902,7 @@ read_known_tasks_list (struct ada_tasks_
       common_value = value_field (tcb_value, pspace_data->atcb_fieldno.common);
       task_id = value_as_address
 		  (value_field (common_value,
-                                pspace_data->atcb_fieldno.activation_link));
+				pspace_data->atcb_fieldno.activation_link));
     }
 
   return true;
@@ -877,30 +927,32 @@ ada_tasks_inferior_data_sniffer (struct
   if (msym.minsym != NULL)
     {
       data->known_tasks_kind = ADA_TASKS_ARRAY;
-      data->known_tasks_addr = BMSYMBOL_VALUE_ADDRESS (msym);
+      data->known_tasks_addr = msym.value_address ();
 
       /* Try to get pointer type and array length from the symtab.  */
-      sym = lookup_symbol_in_language (KNOWN_TASKS_NAME, NULL, VAR_DOMAIN,
+      sym = lookup_symbol_in_language (KNOWN_TASKS_NAME, NULL,
+				       SEARCH_VAR_DOMAIN,
 				       language_c, NULL).symbol;
       if (sym != NULL)
 	{
 	  /* Validate.  */
-	  struct type *type = check_typedef (SYMBOL_TYPE (sym));
+	  struct type *type = check_typedef (sym->type ());
 	  struct type *eltype = NULL;
 	  struct type *idxtype = NULL;
 
-	  if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
-	    eltype = check_typedef (TYPE_TARGET_TYPE (type));
+	  if (type->code () == TYPE_CODE_ARRAY)
+	    eltype = check_typedef (type->target_type ());
 	  if (eltype != NULL
-	      && TYPE_CODE (eltype) == TYPE_CODE_PTR)
-	    idxtype = check_typedef (TYPE_INDEX_TYPE (type));
+	      && eltype->code () == TYPE_CODE_PTR)
+	    idxtype = check_typedef (type->index_type ());
 	  if (idxtype != NULL
-	      && !TYPE_LOW_BOUND_UNDEFINED (idxtype)
-	      && !TYPE_HIGH_BOUND_UNDEFINED (idxtype))
+	      && idxtype->bounds ()->low.is_constant ()
+	      && idxtype->bounds ()->high.is_constant ())
 	    {
 	      data->known_tasks_element = eltype;
 	      data->known_tasks_length =
-		TYPE_HIGH_BOUND (idxtype) - TYPE_LOW_BOUND (idxtype) + 1;
+		(idxtype->bounds ()->high.const_val ()
+		 - idxtype->bounds ()->low.const_val () + 1);
 	      return;
 	    }
 	}
@@ -910,7 +962,7 @@ ada_tasks_inferior_data_sniffer (struct
 	 contains debug information on the task type (due to implicit with of
 	 Ada.Tasking).  */
       data->known_tasks_element =
-	builtin_type (target_gdbarch ())->builtin_data_ptr;
+	builtin_type (current_inferior ()->arch ())->builtin_data_ptr;
       data->known_tasks_length = MAX_NUMBER_OF_KNOWN_TASKS;
       return;
     }
@@ -922,17 +974,18 @@ ada_tasks_inferior_data_sniffer (struct
   if (msym.minsym != NULL)
     {
       data->known_tasks_kind = ADA_TASKS_LIST;
-      data->known_tasks_addr = BMSYMBOL_VALUE_ADDRESS (msym);
+      data->known_tasks_addr = msym.value_address ();
       data->known_tasks_length = 1;
 
-      sym = lookup_symbol_in_language (KNOWN_TASKS_LIST, NULL, VAR_DOMAIN,
+      sym = lookup_symbol_in_language (KNOWN_TASKS_LIST, NULL,
+				       SEARCH_VAR_DOMAIN,
 				       language_c, NULL).symbol;
-      if (sym != NULL && SYMBOL_VALUE_ADDRESS (sym) != 0)
+      if (sym != NULL && sym->value_address () != 0)
 	{
 	  /* Validate.  */
-	  struct type *type = check_typedef (SYMBOL_TYPE (sym));
+	  struct type *type = check_typedef (sym->type ());
 
-	  if (TYPE_CODE (type) == TYPE_CODE_PTR)
+	  if (type->code () == TYPE_CODE_PTR)
 	    {
 	      data->known_tasks_element = type;
 	      return;
@@ -941,7 +994,7 @@ ada_tasks_inferior_data_sniffer (struct
 
       /* Fallback to default values.  */
       data->known_tasks_element =
-	builtin_type (target_gdbarch ())->builtin_data_ptr;
+	builtin_type (current_inferior ()->arch ())->builtin_data_ptr;
       data->known_tasks_length = 1;
       return;
     }
@@ -997,7 +1050,7 @@ ada_build_task_list ()
 {
   struct ada_tasks_inferior_data *data;
 
-  if (!target_has_stack)
+  if (!target_has_stack ())
     error (_("Cannot inspect Ada tasks when program is not running"));
 
   data = get_ada_tasks_inferior_data (current_inferior ());
@@ -1106,12 +1159,12 @@ print_ada_task_info (struct ui_out *uiou
 	 to one task only, and this is not the task, skip
 	 to the next one.  */
       if (taskno_arg && taskno != taskno_arg)
-        continue;
+	continue;
 
       ui_out_emit_tuple tuple_emitter (uiout, NULL);
 
       /* Print a star if this task is the current task (or the task
-         currently selected).  */
+	 currently selected).  */
       if (task_info->ptid == inferior_ptid)
 	uiout->field_string ("current", "*");
       else
@@ -1126,9 +1179,9 @@ print_ada_task_info (struct ui_out *uiou
 
       /* Print the associated Thread ID.  */
       if (uiout->is_mi_like_p ())
-        {
+	{
 	  thread_info *thread = (ada_task_is_alive (task_info)
-				 ? find_thread_ptid (task_info->ptid)
+				 ? inf->find_thread (task_info->ptid)
 				 : nullptr);
 
 	  if (thread != NULL)
@@ -1143,9 +1196,9 @@ print_ada_task_info (struct ui_out *uiou
       /* Print the ID of the parent task.  */
       parent_id = get_task_number_from_id (task_info->parent, inf);
       if (parent_id)
-        uiout->field_signed ("parent-id", parent_id);
+	uiout->field_signed ("parent-id", parent_id);
       else
-        uiout->field_skip ("parent-id");
+	uiout->field_skip ("parent-id");
 
       /* Print the base priority of the task.  */
       uiout->field_signed ("priority", task_info->priority);
@@ -1162,11 +1215,11 @@ print_ada_task_info (struct ui_out *uiou
 			  get_task_number_from_id (task_info->called_task,
 						   inf));
       else
-	uiout->field_string ("state", task_states[task_info->state]);
+	uiout->field_string ("state", get_state (task_info->state));
 
       /* Finally, print the task name, without quotes around it, as mi like
 	 is not expecting quotes, and in non mi-like no need for quotes
-         as there is a specific column for the name.  */
+	 as there is a specific column for the name.  */
       uiout->field_fmt ("name",
 			(task_info->name[0] != '\0'
 			 ? ui_file_style ()
@@ -1199,26 +1252,27 @@ info_task (struct ui_out *uiout, const c
 
   if (taskno <= 0 || taskno > data->task_list.size ())
     error (_("Task ID %d not known.  Use the \"info tasks\" command to\n"
-             "see the IDs of currently known tasks"), taskno);
+	     "see the IDs of currently known tasks"), taskno);
   task_info = &data->task_list[taskno - 1];
 
   /* Print the Ada task ID.  */
-  printf_filtered (_("Ada Task: %s\n"),
-		   paddress (target_gdbarch (), task_info->task_id));
+  gdb_printf (_("Ada Task: %s\n"),
+	      paddress (current_inferior ()->arch (), task_info->task_id));
 
   /* Print the name of the task.  */
   if (task_info->name[0] != '\0')
-    printf_filtered (_("Name: %s\n"), task_info->name);
+    gdb_printf (_("Name: %s\n"), task_info->name);
   else
     fprintf_styled (gdb_stdout, metadata_style.style (), _("<no name>\n"));
 
   /* Print the TID and LWP.  */
-  printf_filtered (_("Thread: %#lx\n"), task_info->ptid.tid ());
-  printf_filtered (_("LWP: %#lx\n"), task_info->ptid.lwp ());
+  gdb_printf (_("Thread: 0x%s\n"), phex_nz (task_info->ptid.tid (),
+					    sizeof (ULONGEST)));
+  gdb_printf (_("LWP: %#lx\n"), task_info->ptid.lwp ());
 
   /* If set, print the base CPU.  */
   if (task_info->base_cpu != 0)
-    printf_filtered (_("Base CPU: %d\n"), task_info->base_cpu);
+    gdb_printf (_("Base CPU: %d\n"), task_info->base_cpu);
 
   /* Print who is the parent (if any).  */
   if (task_info->parent != 0)
@@ -1227,16 +1281,16 @@ info_task (struct ui_out *uiout, const c
     {
       struct ada_task_info *parent = &data->task_list[parent_taskno - 1];
 
-      printf_filtered (_("Parent: %d"), parent_taskno);
+      gdb_printf (_("Parent: %d"), parent_taskno);
       if (parent->name[0] != '\0')
-        printf_filtered (" (%s)", parent->name);
-      printf_filtered ("\n");
+	gdb_printf (" (%s)", parent->name);
+      gdb_printf ("\n");
     }
   else
-    printf_filtered (_("No parent\n"));
+    gdb_printf (_("No parent\n"));
 
   /* Print the base priority.  */
-  printf_filtered (_("Base Priority: %d\n"), task_info->priority);
+  gdb_printf (_("Base Priority: %d\n"), task_info->priority);
 
   /* print the task current state.  */
   {
@@ -1244,28 +1298,28 @@ info_task (struct ui_out *uiout, const c
 
     if (task_info->caller_task)
       {
-        target_taskno = get_task_number_from_id (task_info->caller_task, inf);
-        printf_filtered (_("State: Accepting rendezvous with %d"),
-                         target_taskno);
+	target_taskno = get_task_number_from_id (task_info->caller_task, inf);
+	gdb_printf (_("State: Accepting rendezvous with %d"),
+		    target_taskno);
       }
     else if (task_info->called_task)
       {
-        target_taskno = get_task_number_from_id (task_info->called_task, inf);
-        printf_filtered (_("State: Waiting on task %d's entry"),
-                         target_taskno);
+	target_taskno = get_task_number_from_id (task_info->called_task, inf);
+	gdb_printf (_("State: Waiting on task %d's entry"),
+		    target_taskno);
       }
     else
-      printf_filtered (_("State: %s"), _(long_task_states[task_info->state]));
+      gdb_printf (_("State: %s"), get_long_state (task_info->state));
 
     if (target_taskno)
       {
-        ada_task_info *target_task_info = &data->task_list[target_taskno - 1];
+	ada_task_info *target_task_info = &data->task_list[target_taskno - 1];
 
-        if (target_task_info->name[0] != '\0')
-          printf_filtered (" (%s)", target_task_info->name);
+	if (target_task_info->name[0] != '\0')
+	  gdb_printf (" (%s)", target_task_info->name);
       }
 
-    printf_filtered ("\n");
+    gdb_printf ("\n");
   }
 }
 
@@ -1295,15 +1349,15 @@ display_current_task_id (void)
   const int current_task = ada_get_task_number (inferior_thread ());
 
   if (current_task == 0)
-    printf_filtered (_("[Current task is unknown]\n"));
+    gdb_printf (_("[Current task is unknown]\n"));
   else
     {
       struct ada_tasks_inferior_data *data
 	= get_ada_tasks_inferior_data (current_inferior ());
       struct ada_task_info *task_info = &data->task_list[current_task - 1];
 
-      printf_filtered (_("[Current task is %s]\n"),
-		       task_to_str (current_task, task_info).c_str ());
+      gdb_printf (_("[Current task is %s]\n"),
+		  task_to_str (current_task, task_info).c_str ());
     }
 }
 
@@ -1319,7 +1373,7 @@ task_command_1 (const char *taskno_str,
 
   if (taskno <= 0 || taskno > data->task_list.size ())
     error (_("Task ID %d not known.  Use the \"info tasks\" command to\n"
-             "see the IDs of currently known tasks"), taskno);
+	     "see the IDs of currently known tasks"), taskno);
   task_info = &data->task_list[taskno - 1];
 
   if (!ada_task_is_alive (task_info))
@@ -1343,18 +1397,18 @@ task_command_1 (const char *taskno_str,
      computed if target_get_ada_task_ptid has not been implemented for
      our target (yet).  Rather than cause an assertion error in that case,
      it's nicer for the user to just refuse to perform the task switch.  */
-  thread_info *tp = find_thread_ptid (task_info->ptid);
+  thread_info *tp = inf->find_thread (task_info->ptid);
   if (tp == NULL)
     error (_("Unable to compute thread ID for task %s.\n"
-             "Cannot switch to this task."),
-           task_to_str (taskno, task_info).c_str ());
+	     "Cannot switch to this task."),
+	   task_to_str (taskno, task_info).c_str ());
 
   switch_to_thread (tp);
   ada_find_printable_frame (get_selected_frame (NULL));
-  printf_filtered (_("[Switching to task %s]\n"),
-		   task_to_str (taskno, task_info).c_str ());
+  gdb_printf (_("[Switching to task %s]\n"),
+	      task_to_str (taskno, task_info).c_str ());
   print_stack_frame (get_selected_frame (NULL),
-                     frame_relative_level (get_selected_frame (NULL)),
+		     frame_relative_level (get_selected_frame (NULL)),
 		     SRC_AND_LOC, 1);
 }
 
@@ -1412,61 +1466,253 @@ ada_tasks_invalidate_inferior_data (stru
 /* The 'normal_stop' observer notification callback.  */
 
 static void
-ada_tasks_normal_stop_observer (struct bpstats *unused_args, int unused_args2)
+ada_tasks_normal_stop_observer (struct bpstat *unused_args, int unused_args2)
 {
   /* The inferior has been resumed, and just stopped. This means that
      our task_list needs to be recomputed before it can be used again.  */
   ada_task_list_changed (current_inferior ());
 }
 
-/* A routine to be called when the objfiles have changed.  */
+/* Clear data associated to PSPACE and all inferiors using that program
+   space.  */
+
+static void
+ada_tasks_clear_pspace_data (program_space *pspace)
+{
+  /* The associated program-space data might have changed after
+     this objfile was added.  Invalidate all cached data.  */
+  ada_tasks_invalidate_pspace_data (pspace);
+
+  /* Invalidate the per-inferior cache for all inferiors using
+     this program space.  */
+  for (inferior *inf : all_inferiors ())
+    if (inf->pspace == pspace)
+      ada_tasks_invalidate_inferior_data (inf);
+}
+
+/* Called when a new objfile was added.  */
 
 static void
-ada_tasks_new_objfile_observer (struct objfile *objfile)
+ada_tasks_new_objfile_observer (objfile *objfile)
 {
-  struct inferior *inf;
+  ada_tasks_clear_pspace_data (objfile->pspace);
+}
+
+/* The qcs command line flags for the "task apply" commands.  Keep
+   this in sync with the "frame apply" commands.  */
+
+using qcs_flag_option_def
+  = gdb::option::flag_option_def<qcs_flags>;
+
+static const gdb::option::option_def task_qcs_flags_option_defs[] = {
+  qcs_flag_option_def {
+    "q", [] (qcs_flags *opt) { return &opt->quiet; },
+    N_("Disables printing the task information."),
+  },
+
+  qcs_flag_option_def {
+    "c", [] (qcs_flags *opt) { return &opt->cont; },
+    N_("Print any error raised by COMMAND and continue."),
+  },
+
+  qcs_flag_option_def {
+    "s", [] (qcs_flags *opt) { return &opt->silent; },
+    N_("Silently ignore any errors or empty output produced by COMMAND."),
+  },
+};
+
+/* Create an option_def_group for the "task apply all" options, with
+   FLAGS as context.  */
+
+static inline std::array<gdb::option::option_def_group, 1>
+make_task_apply_all_options_def_group (qcs_flags *flags)
+{
+  return {{
+    { {task_qcs_flags_option_defs}, flags },
+  }};
+}
+
+/* Create an option_def_group for the "task apply" options, with
+   FLAGS as context.  */
+
+static inline gdb::option::option_def_group
+make_task_apply_options_def_group (qcs_flags *flags)
+{
+  return {{task_qcs_flags_option_defs}, flags};
+}
+
+/* Implementation of 'task apply all'.  */
+
+static void
+task_apply_all_command (const char *cmd, int from_tty)
+{
+  qcs_flags flags;
+
+  auto group = make_task_apply_all_options_def_group (&flags);
+  gdb::option::process_options
+    (&cmd, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group);
 
-  /* Invalidate the relevant data in our program-space data.  */
+  validate_flags_qcs ("task apply all", &flags);
 
-  if (objfile == NULL)
+  if (cmd == nullptr || *cmd == '\0')
+    error (_("Please specify a command at the end of 'task apply all'"));
+
+  update_thread_list ();
+  ada_build_task_list ();
+
+  inferior *inf = current_inferior ();
+  struct ada_tasks_inferior_data *data = get_ada_tasks_inferior_data (inf);
+
+  /* Save a copy of the thread list and increment each thread's
+     refcount while executing the command in the context of each
+     thread, in case the command affects this.  */
+  std::vector<std::pair<int, thread_info_ref>> thr_list_cpy;
+
+  for (int i = 1; i <= data->task_list.size (); ++i)
     {
-      /* All objfiles are being cleared, so we should clear all
-	 our caches for all program spaces.  */
-      struct program_space *pspace;
+      ada_task_info &task = data->task_list[i - 1];
+      if (!ada_task_is_alive (&task))
+	continue;
 
-      for (pspace = program_spaces; pspace != NULL; pspace = pspace->next)
-        ada_tasks_invalidate_pspace_data (pspace);
+      thread_info *tp = inf->find_thread (task.ptid);
+      if (tp == nullptr)
+	warning (_("Unable to compute thread ID for task %s.\n"
+		   "Cannot switch to this task."),
+		 task_to_str (i, &task).c_str ());
+      else
+	thr_list_cpy.emplace_back (i, thread_info_ref::new_reference (tp));
     }
-  else
+
+  scoped_restore_current_thread restore_thread;
+
+  for (const auto &info : thr_list_cpy)
+    if (switch_to_thread_if_alive (info.second.get ()))
+      thread_try_catch_cmd (info.second.get (), info.first, cmd,
+			    from_tty, flags);
+}
+
+/* Implementation of 'task apply'.  */
+
+static void
+task_apply_command (const char *tidlist, int from_tty)
+{
+
+  if (tidlist == nullptr || *tidlist == '\0')
+    error (_("Please specify a task ID list"));
+
+  update_thread_list ();
+  ada_build_task_list ();
+
+  inferior *inf = current_inferior ();
+  struct ada_tasks_inferior_data *data = get_ada_tasks_inferior_data (inf);
+
+  /* Save a copy of the thread list and increment each thread's
+     refcount while executing the command in the context of each
+     thread, in case the command affects this.  */
+  std::vector<std::pair<int, thread_info_ref>> thr_list_cpy;
+
+  number_or_range_parser parser (tidlist);
+  while (!parser.finished ())
     {
-      /* The associated program-space data might have changed after
-	 this objfile was added.  Invalidate all cached data.  */
-      ada_tasks_invalidate_pspace_data (objfile->pspace);
+      int num = parser.get_number ();
+
+      if (num < 1 || num - 1 >= data->task_list.size ())
+	warning (_("no Ada Task with number %d"), num);
+      else
+	{
+	  ada_task_info &task = data->task_list[num - 1];
+	  if (!ada_task_is_alive (&task))
+	    continue;
+
+	  thread_info *tp = inf->find_thread (task.ptid);
+	  if (tp == nullptr)
+	    warning (_("Unable to compute thread ID for task %s.\n"
+		       "Cannot switch to this task."),
+		     task_to_str (num, &task).c_str ());
+	  else
+	    thr_list_cpy.emplace_back (num,
+				       thread_info_ref::new_reference (tp));
+	}
     }
 
-  /* Invalidate the per-inferior cache for all inferiors using
-     this objfile (or, in other words, for all inferiors who have
-     the same program-space as the objfile's program space).
-     If all objfiles are being cleared (OBJFILE is NULL), then
-     clear the caches for all inferiors.  */
+  qcs_flags flags;
+  const char *cmd = parser.cur_tok ();
 
-  for (inf = inferior_list; inf != NULL; inf = inf->next)
-    if (objfile == NULL || inf->pspace == objfile->pspace)
-      ada_tasks_invalidate_inferior_data (inf);
+  auto group = make_task_apply_options_def_group (&flags);
+  gdb::option::process_options
+    (&cmd, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group);
+
+  validate_flags_qcs ("task apply", &flags);
+
+  if (*cmd == '\0')
+    error (_("Please specify a command following the task ID list"));
+
+  scoped_restore_current_thread restore_thread;
+
+  for (const auto &info : thr_list_cpy)
+    if (switch_to_thread_if_alive (info.second.get ()))
+      thread_try_catch_cmd (info.second.get (), info.first, cmd,
+			    from_tty, flags);
 }
 
+void _initialize_tasks ();
 void
-_initialize_tasks (void)
+_initialize_tasks ()
 {
   /* Attach various observers.  */
-  gdb::observers::normal_stop.attach (ada_tasks_normal_stop_observer);
-  gdb::observers::new_objfile.attach (ada_tasks_new_objfile_observer);
+  gdb::observers::normal_stop.attach (ada_tasks_normal_stop_observer,
+				      "ada-tasks");
+  gdb::observers::new_objfile.attach (ada_tasks_new_objfile_observer,
+				      "ada-tasks");
+  gdb::observers::all_objfiles_removed.attach (ada_tasks_clear_pspace_data,
+					       "ada-tasks");
+
+  static struct cmd_list_element *task_cmd_list;
+  static struct cmd_list_element *task_apply_list;
+
 
   /* Some new commands provided by this module.  */
   add_info ("tasks", info_tasks_command,
-            _("Provide information about all known Ada tasks."));
-  add_cmd ("task", class_run, task_command,
-           _("Use this command to switch between Ada tasks.\n\
+	    _("Provide information about all known Ada tasks."));
+
+  add_prefix_cmd ("task", class_run, task_command,
+		  _("Use this command to switch between Ada tasks.\n\
 Without argument, this command simply prints the current task ID."),
-           &cmdlist);
+		  &task_cmd_list, 1, &cmdlist);
+
+#define TASK_APPLY_OPTION_HELP "\
+Prints per-inferior task number followed by COMMAND output.\n\
+\n\
+By default, an error raised during the execution of COMMAND\n\
+aborts \"task apply\".\n\
+\n\
+Options:\n\
+%OPTIONS%"
+
+  static const auto task_apply_opts
+    = make_task_apply_options_def_group (nullptr);
+
+  static std::string task_apply_help = gdb::option::build_help (_("\
+Apply a command to a list of tasks.\n\
+Usage: task apply ID... [OPTION]... COMMAND\n\
+ID is a space-separated list of IDs of tasks to apply COMMAND on.\n"
+TASK_APPLY_OPTION_HELP), task_apply_opts);
+
+  add_prefix_cmd ("apply", class_run,
+		  task_apply_command,
+		  task_apply_help.c_str (),
+		  &task_apply_list, 1,
+		  &task_cmd_list);
+
+  static const auto task_apply_all_opts
+    = make_task_apply_all_options_def_group (nullptr);
+
+  static std::string task_apply_all_help = gdb::option::build_help (_("\
+Apply a command to all tasks in the current inferior.\n\
+\n\
+Usage: task apply all [OPTION]... COMMAND\n"
+TASK_APPLY_OPTION_HELP), task_apply_all_opts);
+
+  add_cmd ("all", class_run, task_apply_all_command,
+	   task_apply_all_help.c_str (), &task_apply_list);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-typeprint.c ./gdb/ada-typeprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-typeprint.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ada-typeprint.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for printing Ada types for GDB, the GNU debugger.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -17,7 +17,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "bfd.h"		/* Binary File Description */
+#include "bfd.h"
 #include "gdbtypes.h"
 #include "value.h"
 #include "c-lang.h"
@@ -101,10 +101,10 @@ type_is_full_subrange_of_target_type (st
 {
   struct type *subtype;
 
-  if (TYPE_CODE (type) != TYPE_CODE_RANGE)
+  if (type->code () != TYPE_CODE_RANGE)
     return 0;
 
-  subtype = TYPE_TARGET_TYPE (type);
+  subtype = type->target_type ();
   if (subtype == NULL)
     return 0;
 
@@ -122,14 +122,14 @@ type_is_full_subrange_of_target_type (st
   return 1;
 }
 
-/* Print TYPE on STREAM, preferably as a range if BOUNDS_PREFERED_P
+/* Print TYPE on STREAM, preferably as a range if BOUNDS_PREFERRED_P
    is nonzero.  */
 
 static void
 print_range (struct type *type, struct ui_file *stream,
-	     int bounds_prefered_p)
+	     int bounds_preferred_p)
 {
-  if (!bounds_prefered_p)
+  if (!bounds_preferred_p)
     {
       /* Try stripping all TYPE_CODE_RANGE layers whose bounds
 	 are identical to the bounds of their subtype.  When
@@ -143,10 +143,10 @@ print_range (struct type *type, struct u
 
 	     array ('["00"]' .. '["ff"]') of ...  */
       while (type_is_full_subrange_of_target_type (type))
-	type = TYPE_TARGET_TYPE (type);
+	type = type->target_type ();
     }
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_RANGE:
     case TYPE_CODE_ENUM:
@@ -166,22 +166,22 @@ print_range (struct type *type, struct u
 	       access to an actual object, which is not available
 	       when the user is using the "ptype" command on a type.
 	       Print the range as an unbounded range.  */
-	    fprintf_filtered (stream, "<>");
+	    gdb_printf (stream, "<>");
 	    got_error = 1;
 	  }
 
 	if (!got_error)
 	  {
 	    ada_print_scalar (type, lo, stream);
-	    fprintf_filtered (stream, " .. ");
+	    gdb_printf (stream, " .. ");
 	    ada_print_scalar (type, hi, stream);
 	  }
       }
       break;
     default:
-      fprintf_filtered (stream, "%.*s",
-			ada_name_prefix_len (TYPE_NAME (type)),
-			TYPE_NAME (type));
+      gdb_printf (stream, "%.*s",
+		  ada_name_prefix_len (type->name ()),
+		  type->name ());
       break;
     }
 }
@@ -198,17 +198,17 @@ print_range_bound (struct type *type, co
   if (ada_scan_number (bounds, *n, &B, n))
     {
       /* STABS decodes all range types which bounds are 0 .. -1 as
-         unsigned integers (ie. the type code is TYPE_CODE_INT, not
-         TYPE_CODE_RANGE).  Unfortunately, ada_print_scalar() relies
-         on the unsigned flag to determine whether the bound should
-         be printed as a signed or an unsigned value.  This causes
-         the upper bound of the 0 .. -1 range types to be printed as
-         a very large unsigned number instead of -1.
-         To workaround this stabs deficiency, we replace the TYPE by NULL
-         to indicate default output when we detect that the bound is negative,
-         and the type is a TYPE_CODE_INT.  The bound is negative when
-         'm' is the last character of the number scanned in BOUNDS.  */
-      if (bounds[*n - 1] == 'm' && TYPE_CODE (type) == TYPE_CODE_INT)
+	 unsigned integers (ie. the type code is TYPE_CODE_INT, not
+	 TYPE_CODE_RANGE).  Unfortunately, ada_print_scalar() relies
+	 on the unsigned flag to determine whether the bound should
+	 be printed as a signed or an unsigned value.  This causes
+	 the upper bound of the 0 .. -1 range types to be printed as
+	 a very large unsigned number instead of -1.
+	 To workaround this stabs deficiency, we replace the TYPE by NULL
+	 to indicate default output when we detect that the bound is negative,
+	 and the type is a TYPE_CODE_INT.  The bound is negative when
+	 'm' is the last character of the number scanned in BOUNDS.  */
+      if (bounds[*n - 1] == 'm' && type->code () == TYPE_CODE_INT)
 	type = NULL;
       ada_print_scalar (type, B, stream);
       if (bounds[*n] == '_')
@@ -228,7 +228,7 @@ print_range_bound (struct type *type, co
 	  bound_len = pend - bound;
 	  *n += bound_len + 2;
 	}
-      fprintf_filtered (stream, "%.*s", bound_len, bound);
+      gdb_printf (stream, "%.*s", bound_len, bound);
     }
 }
 
@@ -247,37 +247,37 @@ print_dynamic_range_bound (struct type *
   if (get_int_var_value (name_buf.c_str (), B))
     ada_print_scalar (type, B, stream);
   else
-    fprintf_filtered (stream, "?");
+    gdb_printf (stream, "?");
 }
 
 /* Print RAW_TYPE as a range type, using any bound information
    following the GNAT encoding (if available).
 
-   If BOUNDS_PREFERED_P is nonzero, force the printing of the range
+   If BOUNDS_PREFERRED_P is nonzero, force the printing of the range
    using its bounds.  Otherwise, try printing the range without
    printing the value of the bounds, if possible (this is only
    considered a hint, not a guaranty).  */
 
 static void
 print_range_type (struct type *raw_type, struct ui_file *stream,
-		  int bounds_prefered_p)
+		  int bounds_preferred_p)
 {
   const char *name;
   struct type *base_type;
   const char *subtype_info;
 
   gdb_assert (raw_type != NULL);
-  name = TYPE_NAME (raw_type);
+  name = raw_type->name ();
   gdb_assert (name != NULL);
 
-  if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
-    base_type = TYPE_TARGET_TYPE (raw_type);
+  if (raw_type->code () == TYPE_CODE_RANGE)
+    base_type = raw_type->target_type ();
   else
     base_type = raw_type;
 
   subtype_info = strstr (name, "___XD");
   if (subtype_info == NULL)
-    print_range (raw_type, stream, bounds_prefered_p);
+    print_range (raw_type, stream, bounds_preferred_p);
   else
     {
       int prefix_len = subtype_info - name;
@@ -297,7 +297,7 @@ print_range_type (struct type *raw_type,
 	print_dynamic_range_bound (base_type, name, prefix_len, "___L",
 				   stream);
 
-      fprintf_filtered (stream, " .. ");
+      gdb_printf (stream, " .. ");
 
       if (*subtype_info == 'U')
 	print_range_bound (base_type, bounds_str, &n, stream);
@@ -312,55 +312,31 @@ print_range_type (struct type *raw_type,
 static void
 print_enum_type (struct type *type, struct ui_file *stream)
 {
-  int len = TYPE_NFIELDS (type);
+  int len = type->num_fields ();
   int i;
   LONGEST lastval;
 
-  fprintf_filtered (stream, "(");
-  wrap_here (" ");
+  gdb_printf (stream, "(");
+  stream->wrap_here (1);
 
   lastval = 0;
   for (i = 0; i < len; i++)
     {
       QUIT;
       if (i)
-	fprintf_filtered (stream, ", ");
-      wrap_here ("    ");
-      fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream);
-      if (lastval != TYPE_FIELD_ENUMVAL (type, i))
-	{
-	  fprintf_filtered (stream, " => %s",
-			    plongest (TYPE_FIELD_ENUMVAL (type, i)));
-	  lastval = TYPE_FIELD_ENUMVAL (type, i);
-	}
-      lastval += 1;
-    }
-  fprintf_filtered (stream, ")");
-}
-
-/* Print representation of Ada fixed-point type TYPE on STREAM.  */
-
-static void
-print_fixed_point_type (struct type *type, struct ui_file *stream)
-{
-  struct value *delta = ada_delta (type);
-  struct value *small = ada_scaling_factor (type);
-
-  if (delta == nullptr)
-    fprintf_filtered (stream, "delta ??");
-  else
-    {
-      std::string str;
-      str = target_float_to_string (value_contents (delta),
-				    value_type (delta), "%g");
-      fprintf_filtered (stream, "delta %s", str.c_str());
-      if (!value_equal (delta, small))
+	gdb_printf (stream, ", ");
+      stream->wrap_here (4);
+      fputs_styled (ada_enum_name (type->field (i).name ()),
+		    variable_name_style.style (), stream);
+      if (lastval != type->field (i).loc_enumval ())
 	{
-	  str = target_float_to_string (value_contents (small),
-					value_type (small), "%g");
-	  fprintf_filtered (stream, " <'small = %s>", str.c_str());
+	  gdb_printf (stream, " => %s",
+		      plongest (type->field (i).loc_enumval ()));
+	  lastval = type->field (i).loc_enumval ();
 	}
+      lastval += 1;
     }
+  gdb_printf (stream, ")");
 }
 
 /* Print simple (constrained) array type TYPE on STREAM.  LEVEL is the
@@ -380,7 +356,7 @@ print_array_type (struct type *type, str
     type = ada_coerce_to_simple_array_type (type);
 
   bitsize = 0;
-  fprintf_filtered (stream, "array (");
+  gdb_printf (stream, "array (");
 
   if (type == NULL)
     {
@@ -401,32 +377,39 @@ print_array_type (struct type *type, str
       bitsize = 0;
       if (range_desc_type == NULL)
 	{
-	  for (arr_type = type; TYPE_CODE (arr_type) == TYPE_CODE_ARRAY;
-	       arr_type = TYPE_TARGET_TYPE (arr_type))
+	  for (arr_type = type; arr_type->code () == TYPE_CODE_ARRAY; )
 	    {
 	      if (arr_type != type)
-		fprintf_filtered (stream, ", ");
-	      print_range (TYPE_INDEX_TYPE (arr_type), stream,
-			   0 /* bounds_prefered_p */);
-	      if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
-		bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
+		gdb_printf (stream, ", ");
+	      print_range (arr_type->index_type (), stream,
+			   0 /* bounds_preferred_p */);
+	      if (arr_type->field (0).bitsize () > 0)
+		bitsize = arr_type->field (0).bitsize ();
+	      /* A multi-dimensional array is represented using a
+		 sequence of array types.  If one of these types has a
+		 name, then it is not another dimension of the outer
+		 array, but rather the element type of the outermost
+		 array.  */
+	      arr_type = arr_type->target_type ();
+	      if (arr_type->name () != nullptr)
+		break;
 	    }
 	}
       else
 	{
 	  int k;
 
-	  n_indices = TYPE_NFIELDS (range_desc_type);
+	  n_indices = range_desc_type->num_fields ();
 	  for (k = 0, arr_type = type;
 	       k < n_indices;
-	       k += 1, arr_type = TYPE_TARGET_TYPE (arr_type))
+	       k += 1, arr_type = arr_type->target_type ())
 	    {
 	      if (k > 0)
-		fprintf_filtered (stream, ", ");
-	      print_range_type (TYPE_FIELD_TYPE (range_desc_type, k),
-				stream, 0 /* bounds_prefered_p */);
-	      if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
-		bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
+		gdb_printf (stream, ", ");
+	      print_range_type (range_desc_type->field (k).type (),
+				stream, 0 /* bounds_preferred_p */);
+	      if (arr_type->field (0).bitsize () > 0)
+		bitsize = arr_type->field (0).bitsize ();
 	    }
 	}
     }
@@ -435,19 +418,19 @@ print_array_type (struct type *type, str
       int i, i0;
 
       for (i = i0 = ada_array_arity (type); i > 0; i -= 1)
-	fprintf_filtered (stream, "%s<>", i == i0 ? "" : ", ");
+	gdb_printf (stream, "%s<>", i == i0 ? "" : ", ");
     }
 
   elt_type = ada_array_element_type (type, n_indices);
-  fprintf_filtered (stream, ") of ");
-  wrap_here ("");
+  gdb_printf (stream, ") of ");
+  stream->wrap_here (0);
   ada_print_type (elt_type, "", stream, show == 0 ? 0 : show - 1, level + 1,
 		  flags);
   /* Arrays with variable-length elements are never bit-packed in practice but
      compilers have to describe their stride so that we can properly fetch
      individual elements.  Do not say the array is packed in this case.  */
   if (bitsize > 0 && !is_dynamic_type (elt_type))
-    fprintf_filtered (stream, " <packed: %d-bit elements>", bitsize);
+    gdb_printf (stream, " <packed: %d-bit elements>", bitsize);
 }
 
 /* Print the choices encoded by field FIELD_NUM of variant-part TYPE on
@@ -455,7 +438,7 @@ print_array_type (struct type *type, str
    values.  Return non-zero if the field is an encoding of
    discriminant values, as in a standard variant record, and 0 if the
    field is not so encoded (as happens with single-component variants
-   in types annotated with pragma Unchecked_Variant).  */
+   in types annotated with pragma Unchecked_Union).  */
 
 static int
 print_choices (struct type *type, int field_num, struct ui_file *stream,
@@ -463,7 +446,7 @@ print_choices (struct type *type, int fi
 {
   int have_output;
   int p;
-  const char *name = TYPE_FIELD_NAME (type, field_num);
+  const char *name = type->field (field_num).name ();
 
   have_output = 0;
 
@@ -484,13 +467,13 @@ print_choices (struct type *type, int fi
 	  goto Huh;
 	case '_':
 	case '\0':
-	  fprintf_filtered (stream, " =>");
+	  gdb_printf (stream, " =>");
 	  return 1;
 	case 'S':
 	case 'R':
 	case 'O':
 	  if (have_output)
-	    fprintf_filtered (stream, " | ");
+	    gdb_printf (stream, " | ");
 	  have_output = 1;
 	  break;
 	}
@@ -514,22 +497,51 @@ print_choices (struct type *type, int fi
 		|| name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
 	      goto Huh;
 	    ada_print_scalar (val_type, L, stream);
-	    fprintf_filtered (stream, " .. ");
+	    gdb_printf (stream, " .. ");
 	    ada_print_scalar (val_type, U, stream);
 	    break;
 	  }
 	case 'O':
-	  fprintf_filtered (stream, "others");
+	  gdb_printf (stream, "others");
 	  p += 1;
 	  break;
 	}
     }
 
 Huh:
-  fprintf_filtered (stream, "? =>");
+  gdb_printf (stream, "? =>");
   return 0;
 }
 
+/* A helper for print_variant_clauses that prints the members of
+   VAR_TYPE.  DISCR_TYPE is the type of the discriminant (or nullptr
+   if not available).  The discriminant is contained in OUTER_TYPE.
+   STREAM, LEVEL, SHOW, and FLAGS are the same as for
+   ada_print_type.  */
+
+static void
+print_variant_clauses (struct type *var_type, struct type *discr_type,
+		       struct type *outer_type, struct ui_file *stream,
+		       int show, int level,
+		       const struct type_print_options *flags)
+{
+  for (int i = 0; i < var_type->num_fields (); i += 1)
+    {
+      gdb_printf (stream, "\n%*swhen ", level, "");
+      if (print_choices (var_type, i, stream, discr_type))
+	{
+	  if (print_record_field_types (var_type->field (i).type (),
+					outer_type, stream, show, level,
+					flags)
+	      <= 0)
+	    gdb_printf (stream, " null;");
+	}
+      else
+	print_selected_record_field_types (var_type, outer_type, i, i,
+					   stream, show, level, flags);
+    }
+}
+
 /* Assuming that field FIELD_NUM of TYPE represents variants whose
    discriminant is contained in OUTER_TYPE, print its components on STREAM.
    LEVEL is the recursion (indentation) level, in case any of the fields
@@ -544,17 +556,16 @@ print_variant_clauses (struct type *type
 		       int show, int level,
 		       const struct type_print_options *flags)
 {
-  int i;
   struct type *var_type, *par_type;
   struct type *discr_type;
 
-  var_type = TYPE_FIELD_TYPE (type, field_num);
+  var_type = type->field (field_num).type ();
   discr_type = ada_variant_discrim_type (var_type, outer_type);
 
-  if (TYPE_CODE (var_type) == TYPE_CODE_PTR)
+  if (var_type->code () == TYPE_CODE_PTR)
     {
-      var_type = TYPE_TARGET_TYPE (var_type);
-      if (var_type == NULL || TYPE_CODE (var_type) != TYPE_CODE_UNION)
+      var_type = var_type->target_type ();
+      if (var_type == NULL || var_type->code () != TYPE_CODE_UNION)
 	return;
     }
 
@@ -562,21 +573,8 @@ print_variant_clauses (struct type *type
   if (par_type != NULL)
     var_type = par_type;
 
-  for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
-    {
-      fprintf_filtered (stream, "\n%*swhen ", level + 4, "");
-      if (print_choices (var_type, i, stream, discr_type))
-	{
-	  if (print_record_field_types (TYPE_FIELD_TYPE (var_type, i),
-					outer_type, stream, show, level + 4,
-					flags)
-	      <= 0)
-	    fprintf_filtered (stream, " null;");
-	}
-      else
-	print_selected_record_field_types (var_type, outer_type, i, i,
-					   stream, show, level + 4, flags);
-    }
+  print_variant_clauses (var_type, discr_type, outer_type, stream, show,
+			 level + 4, flags);
 }
 
 /* Assuming that field FIELD_NUM of TYPE is a variant part whose
@@ -593,14 +591,14 @@ print_variant_part (struct type *type, i
 		    const struct type_print_options *flags)
 {
   const char *variant
-    = ada_variant_discrim_name (TYPE_FIELD_TYPE (type, field_num));
+    = ada_variant_discrim_name (type->field (field_num).type ());
   if (*variant == '\0')
     variant = "?";
 
-  fprintf_filtered (stream, "\n%*scase %s is", level + 4, "", variant);
+  gdb_printf (stream, "\n%*scase %s is", level + 4, "", variant);
   print_variant_clauses (type, field_num, outer_type, stream, show,
 			 level + 4, flags);
-  fprintf_filtered (stream, "\n%*send case;", level + 4, "");
+  gdb_printf (stream, "\n%*send case;", level + 4, "");
 }
 
 /* Print a description on STREAM of the fields FLD0 through FLD1 in
@@ -622,7 +620,7 @@ print_selected_record_field_types (struc
 
   flds = 0;
 
-  if (fld0 > fld1 && TYPE_STUB (type))
+  if (fld0 > fld1 && type->is_stub ())
     return -1;
 
   for (i = fld0; i <= fld1; i += 1)
@@ -632,7 +630,7 @@ print_selected_record_field_types (struc
       if (ada_is_parent_field (type, i) || ada_is_ignored_field (type, i))
 	;
       else if (ada_is_wrapper_field (type, i))
-	flds += print_record_field_types (TYPE_FIELD_TYPE (type, i), type,
+	flds += print_record_field_types (type->field (i).type (), type,
 					  stream, show, level, flags);
       else if (ada_is_variant_part (type, i))
 	{
@@ -642,17 +640,131 @@ print_selected_record_field_types (struc
       else
 	{
 	  flds += 1;
-	  fprintf_filtered (stream, "\n%*s", level + 4, "");
-	  ada_print_type (TYPE_FIELD_TYPE (type, i),
-			  TYPE_FIELD_NAME (type, i),
+	  gdb_printf (stream, "\n%*s", level + 4, "");
+	  ada_print_type (type->field (i).type (),
+			  type->field (i).name (),
 			  stream, show - 1, level + 4, flags);
-	  fprintf_filtered (stream, ";");
+	  gdb_printf (stream, ";");
 	}
     }
 
   return flds;
 }
 
+static void print_record_field_types_dynamic
+  (const gdb::array_view<variant_part> &parts,
+   int from, int to, struct type *type, struct ui_file *stream,
+   int show, int level, const struct type_print_options *flags);
+
+/* Print the choices encoded by VARIANT on STREAM.  LEVEL is the
+   indentation level.  The type of the discriminant for VARIANT is
+   given by DISR_TYPE.  */
+
+static void
+print_choices (struct type *discr_type, const variant &variant,
+	       struct ui_file *stream, int level)
+{
+  gdb_printf (stream, "\n%*swhen ", level, "");
+  if (variant.is_default ())
+    gdb_printf (stream, "others");
+  else
+    {
+      bool first = true;
+      for (const discriminant_range &range : variant.discriminants)
+	{
+	  if (!first)
+	    gdb_printf (stream, " | ");
+	  first = false;
+
+	  ada_print_scalar (discr_type, range.low, stream);
+	  if (range.low != range.high)
+	    ada_print_scalar (discr_type, range.high, stream);
+	}
+    }
+
+  gdb_printf (stream, " =>");
+}
+
+/* Print a single variant part, PART, on STREAM.  TYPE is the
+   enclosing type.  SHOW, LEVEL, and FLAGS are the usual type-printing
+   settings.  This prints information about PART and the fields it
+   controls.  It returns the index of the next field that should be
+   shown -- that is, one after the last field printed by this
+   call.  */
+
+static int
+print_variant_part (const variant_part &part,
+		    struct type *type, struct ui_file *stream,
+		    int show, int level,
+		    const struct type_print_options *flags)
+{
+  struct type *discr_type = nullptr;
+  const char *name;
+  if (part.discriminant_index == -1)
+    name = "?";
+  else
+    {
+      name = type->field (part.discriminant_index).name ();;
+      discr_type = type->field (part.discriminant_index).type ();
+    }
+
+  gdb_printf (stream, "\n%*scase %s is", level + 4, "", name);
+
+  int last_field = -1;
+  for (const variant &variant : part.variants)
+    {
+      print_choices (discr_type, variant, stream, level + 8);
+
+      if (variant.first_field == variant.last_field)
+	gdb_printf (stream, " null;");
+      else
+	{
+	  print_record_field_types_dynamic (variant.parts,
+					    variant.first_field,
+					    variant.last_field, type, stream,
+					    show, level + 8, flags);
+	  last_field = variant.last_field;
+	}
+    }
+
+  gdb_printf (stream, "\n%*send case;", level + 4, "");
+
+  return last_field;
+}
+
+/* Print some fields of TYPE to STREAM.  SHOW, LEVEL, and FLAGS are
+   the usual type-printing settings.  PARTS is the array of variant
+   parts that correspond to the range of fields to be printed.  FROM
+   and TO are the range of fields to print.  */
+
+static void
+print_record_field_types_dynamic (const gdb::array_view<variant_part> &parts,
+				  int from, int to,
+				  struct type *type, struct ui_file *stream,
+				  int show, int level,
+				  const struct type_print_options *flags)
+{
+  int field = from;
+
+  for (const variant_part &part : parts)
+    {
+      if (part.variants.empty ())
+	continue;
+
+      /* Print any non-varying fields.  */
+      int first_varying = part.variants[0].first_field;
+      print_selected_record_field_types (type, type, field,
+					 first_varying - 1, stream,
+					 show, level, flags);
+
+      field = print_variant_part (part, type, stream, show, level, flags);
+    }
+
+  /* Print any trailing fields that we were asked to print.  */
+  print_selected_record_field_types (type, type, field, to - 1, stream, show,
+				     level, flags);
+}
+
 /* Print a description on STREAM of all fields of record or union type
    TYPE, as for print_selected_record_field_types, above.  */
 
@@ -661,8 +773,23 @@ print_record_field_types (struct type *t
 			  struct ui_file *stream, int show, int level,
 			  const struct type_print_options *flags)
 {
+  struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
+  if (prop != nullptr)
+    {
+      if (prop->kind () == PROP_TYPE)
+	{
+	  type = prop->original_type ();
+	  prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
+	}
+      gdb_assert (prop->kind () == PROP_VARIANT_PARTS);
+      print_record_field_types_dynamic (*prop->variant_parts (),
+					0, type->num_fields (),
+					type, stream, show, level, flags);
+      return type->num_fields ();
+    }
+
   return print_selected_record_field_types (type, outer_type,
-					    0, TYPE_NFIELDS (type) - 1,
+					    0, type->num_fields () - 1,
 					    stream, show, level, flags);
 }
    
@@ -693,15 +820,15 @@ print_record_type (struct type *type0, s
 	 prevents a crash trying to print a NULL pointer.  */
       if (parent_name == NULL)
 	parent_name = ada_type_name (parent_type);
-      fprintf_filtered (stream, "new %s with record", parent_name);
+      gdb_printf (stream, "new %s with record", parent_name);
     }
   else if (parent_type == NULL && ada_is_tagged_type (type, 0))
-    fprintf_filtered (stream, "tagged record");
+    gdb_printf (stream, "tagged record");
   else
-    fprintf_filtered (stream, "record");
+    gdb_printf (stream, "record");
 
   if (show < 0)
-    fprintf_filtered (stream, " ... end record");
+    gdb_printf (stream, " ... end record");
   else
     {
       int flds;
@@ -714,11 +841,11 @@ print_record_type (struct type *type0, s
 					flags);
 
       if (flds > 0)
-	fprintf_filtered (stream, "\n%*send record", level, "");
+	gdb_printf (stream, "\n%*send record", level, "");
       else if (flds < 0)
-	fprintf_filtered (stream, _(" <incomplete type> end record"));
+	gdb_printf (stream, _(" <incomplete type> end record"));
       else
-	fprintf_filtered (stream, " null; end record");
+	gdb_printf (stream, " null; end record");
     }
 }
 
@@ -732,27 +859,17 @@ print_unchecked_union_type (struct type
 			    const struct type_print_options *flags)
 {
   if (show < 0)
-    fprintf_filtered (stream, "record (?) is ... end record");
-  else if (TYPE_NFIELDS (type) == 0)
-    fprintf_filtered (stream, "record (?) is null; end record");
+    gdb_printf (stream, "record (?) is ... end record");
+  else if (type->num_fields () == 0)
+    gdb_printf (stream, "record (?) is null; end record");
   else
     {
-      int i;
+      gdb_printf (stream, "record (?) is\n%*scase ? is", level + 4, "");
 
-      fprintf_filtered (stream, "record (?) is\n%*scase ? is", level + 4, "");
+      print_variant_clauses (type, nullptr, type, stream, show, level + 8, flags);
 
-      for (i = 0; i < TYPE_NFIELDS (type); i += 1)
-	{
-	  fprintf_filtered (stream, "\n%*swhen ? =>\n%*s", level + 8, "",
-			    level + 12, "");
-	  ada_print_type (TYPE_FIELD_TYPE (type, i),
-			  TYPE_FIELD_NAME (type, i),
-			  stream, show - 1, level + 12, flags);
-	  fprintf_filtered (stream, ";");
-	}
-
-      fprintf_filtered (stream, "\n%*send case;\n%*send record",
-			level + 4, "", level, "");
+      gdb_printf (stream, "\n%*send case;\n%*send record",
+		  level + 4, "", level, "");
     }
 }
 
@@ -765,51 +882,51 @@ static void
 print_func_type (struct type *type, struct ui_file *stream, const char *name,
 		 const struct type_print_options *flags)
 {
-  int i, len = TYPE_NFIELDS (type);
+  int i, len = type->num_fields ();
 
-  if (TYPE_TARGET_TYPE (type) != NULL
-      && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_VOID)
-    fprintf_filtered (stream, "procedure");
+  if (type->target_type () != NULL
+      && type->target_type ()->code () == TYPE_CODE_VOID)
+    gdb_printf (stream, "procedure");
   else
-    fprintf_filtered (stream, "function");
+    gdb_printf (stream, "function");
 
   if (name != NULL && name[0] != '\0')
     {
-      fputs_filtered (" ", stream);
+      gdb_puts (" ", stream);
       fputs_styled (name, function_name_style.style (), stream);
     }
 
   if (len > 0)
     {
-      fprintf_filtered (stream, " (");
+      gdb_printf (stream, " (");
       for (i = 0; i < len; i += 1)
 	{
 	  if (i > 0)
 	    {
-	      fputs_filtered ("; ", stream);
-	      wrap_here ("    ");
+	      gdb_puts ("; ", stream);
+	      stream->wrap_here (4);
 	    }
-	  fprintf_filtered (stream, "a%d: ", i + 1);
-	  ada_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0,
+	  gdb_printf (stream, "a%d: ", i + 1);
+	  ada_print_type (type->field (i).type (), "", stream, -1, 0,
 			  flags);
 	}
-      fprintf_filtered (stream, ")");
+      gdb_printf (stream, ")");
     }
 
-  if (TYPE_TARGET_TYPE (type) == NULL)
-    fprintf_filtered (stream, " return <unknown return type>");
-  else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
+  if (type->target_type () == NULL)
+    gdb_printf (stream, " return <unknown return type>");
+  else if (type->target_type ()->code () != TYPE_CODE_VOID)
     {
-      fprintf_filtered (stream, " return ");
-      ada_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags);
+      gdb_printf (stream, " return ");
+      ada_print_type (type->target_type (), "", stream, 0, 0, flags);
     }
 }
 
 
 /* Print a description of a type TYPE0.
    Output goes to STREAM (via stdio).
-   If VARSTRING is a non-empty string, print as an Ada variable/field
-       declaration.
+   If VARSTRING is a non-NULL, non-empty string, print as an Ada
+       variable/field declaration.
    SHOW+1 is the maximum number of levels of internal type structure
       to show (this applies to record types, enumerated types, and
       array types).
@@ -824,110 +941,130 @@ ada_print_type (struct type *type0, cons
 		struct ui_file *stream, int show, int level,
 		const struct type_print_options *flags)
 {
+  if (type0->code () == TYPE_CODE_INTERNAL_FUNCTION)
+    {
+      c_print_type (type0, "", stream, show, level,
+		    language_ada, flags);
+      return;
+    }
+
   struct type *type = ada_check_typedef (ada_get_base_type (type0));
-  char *type_name = decoded_type_name (type0);
+  /* If we can decode the original type name, use it.  However, there
+     are cases where the original type is an internally-generated type
+     with a name that can't be decoded (and whose encoded name might
+     not actually bear any relation to the type actually declared in
+     the sources). In that case, try using the name of the base type
+     in its place.
+
+     Note that we looked at the possibility of always using the name
+     of the base type. This does not always work, unfortunately, as
+     there are situations where it's the base type which has an
+     internally-generated name.  */
+  const char *type_name = decoded_type_name (type0);
+  if (type_name == nullptr)
+    type_name = decoded_type_name (type);
   int is_var_decl = (varstring != NULL && varstring[0] != '\0');
 
   if (type == NULL)
     {
       if (is_var_decl)
-	fprintf_filtered (stream, "%.*s: ",
-			  ada_name_prefix_len (varstring), varstring);
+	gdb_printf (stream, "%.*s: ",
+		    ada_name_prefix_len (varstring), varstring);
       fprintf_styled (stream, metadata_style.style (), "<null type?>");
       return;
     }
 
-  if (show > 0)
-    type = ada_check_typedef (type);
-
-  if (is_var_decl && TYPE_CODE (type) != TYPE_CODE_FUNC)
-    fprintf_filtered (stream, "%.*s: ",
-		      ada_name_prefix_len (varstring), varstring);
+  if (is_var_decl && type->code () != TYPE_CODE_FUNC)
+    gdb_printf (stream, "%.*s: ",
+		ada_name_prefix_len (varstring), varstring);
 
   if (type_name != NULL && show <= 0 && !ada_is_aligner_type (type))
     {
-      fprintf_filtered (stream, "%.*s",
-			ada_name_prefix_len (type_name), type_name);
+      gdb_printf (stream, "%.*s",
+		  ada_name_prefix_len (type_name), type_name);
       return;
     }
 
   if (ada_is_aligner_type (type))
     ada_print_type (ada_aligned_type (type), "", stream, show, level, flags);
   else if (ada_is_constrained_packed_array_type (type)
-	   && TYPE_CODE (type) != TYPE_CODE_PTR)
+	   && type->code () != TYPE_CODE_PTR)
     print_array_type (type, stream, show, level, flags);
   else
-    switch (TYPE_CODE (type))
+    switch (type->code ())
       {
       default:
-	fprintf_filtered (stream, "<");
-	c_print_type (type, "", stream, show, level, flags);
-	fprintf_filtered (stream, ">");
+	gdb_printf (stream, "<");
+	c_print_type (type, "", stream, show, level, language_ada, flags);
+	gdb_printf (stream, ">");
 	break;
       case TYPE_CODE_PTR:
       case TYPE_CODE_TYPEDEF:
-	fprintf_filtered (stream, "access ");
-	ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
+	/* An __XVL field is not truly a pointer, so don't print
+	   "access" in this case.  */
+	if (type->code () != TYPE_CODE_PTR
+	    || (varstring != nullptr
+		&& strstr (varstring, "___XVL") == nullptr))
+	  gdb_printf (stream, "access ");
+	ada_print_type (type->target_type (), "", stream, show, level,
 			flags);
 	break;
       case TYPE_CODE_REF:
-	fprintf_filtered (stream, "<ref> ");
-	ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
+	gdb_printf (stream, "<ref> ");
+	ada_print_type (type->target_type (), "", stream, show, level,
 			flags);
 	break;
       case TYPE_CODE_ARRAY:
 	print_array_type (type, stream, show, level, flags);
 	break;
       case TYPE_CODE_BOOL:
-	fprintf_filtered (stream, "(false, true)");
+	gdb_printf (stream, "(false, true)");
 	break;
       case TYPE_CODE_INT:
-	if (ada_is_fixed_point_type (type))
-	  print_fixed_point_type (type, stream);
-	else
-	  {
-	    const char *name = ada_type_name (type);
+	{
+	  const char *name = ada_type_name (type);
 
-	    if (!ada_is_range_type_name (name))
-	      fprintf_styled (stream, metadata_style.style (),
-			      _("<%s-byte integer>"),
-			      pulongest (TYPE_LENGTH (type)));
-	    else
-	      {
-		fprintf_filtered (stream, "range ");
-		print_range_type (type, stream, 1 /* bounds_prefered_p */);
-	      }
-	  }
+	  if (!ada_is_range_type_name (name))
+	    fprintf_styled (stream, metadata_style.style (),
+			    _("<%s-byte integer>"),
+			    pulongest (type->length ()));
+	  else
+	    {
+	      gdb_printf (stream, "range ");
+	      print_range_type (type, stream, 1 /* bounds_preferred_p */);
+	    }
+	}
 	break;
       case TYPE_CODE_RANGE:
-	if (ada_is_fixed_point_type (type))
-	  print_fixed_point_type (type, stream);
+	if (is_fixed_point_type (type))
+	  {
+	    gdb_printf (stream, "<");
+	    print_type_fixed_point (type, stream);
+	    gdb_printf (stream, ">");
+	  }
 	else if (ada_is_modular_type (type))
-	  fprintf_filtered (stream, "mod %s", 
-			    int_string (ada_modulus (type), 10, 0, 0, 1));
+	  gdb_printf (stream, "mod %s", 
+		      int_string (ada_modulus (type), 10, 0, 0, 1));
 	else
 	  {
-	    fprintf_filtered (stream, "range ");
-	    print_range (type, stream, 1 /* bounds_prefered_p */);
+	    gdb_printf (stream, "range ");
+	    print_range (type, stream, 1 /* bounds_preferred_p */);
 	  }
 	break;
       case TYPE_CODE_FLT:
 	fprintf_styled (stream, metadata_style.style (),
 			_("<%s-byte float>"),
-			pulongest (TYPE_LENGTH (type)));
+			pulongest (type->length ()));
 	break;
       case TYPE_CODE_ENUM:
 	if (show < 0)
-	  fprintf_filtered (stream, "(...)");
+	  gdb_printf (stream, "(...)");
 	else
 	  print_enum_type (type, stream);
 	break;
       case TYPE_CODE_STRUCT:
 	if (ada_is_array_descriptor_type (type))
 	  print_array_type (type, stream, show, level, flags);
-	else if (ada_is_bogus_array_descriptor (type))
-	  fprintf_filtered (stream,
-			    _("array (?) of ? (<mal-formed descriptor>)"));
 	else
 	  print_record_type (type, stream, show, level, flags);
 	break;
@@ -944,7 +1081,7 @@ ada_print_type (struct type *type0, cons
 
 void
 ada_print_typedef (struct type *type, struct symbol *new_symbol,
-                   struct ui_file *stream)
+		   struct ui_file *stream)
 {
   type = ada_check_typedef (type);
   ada_print_type (type, "", stream, 0, 0, &type_print_raw_options);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-unicode.py ./gdb/ada-unicode.py
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-unicode.py	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/ada-unicode.py	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,96 @@
+#!/usr/bin/env python3
+
+# Generate Unicode case-folding table for Ada.
+
+# Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+# This file is part of GDB.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This generates the ada-casefold.h header.
+# Usage:
+#   python ada-unicode.py
+
+import gdbcopyright
+
+# The start of the current range of case-conversions we are
+# processing.  If RANGE_START is None, then we're outside of a range.
+range_start = None
+# End of the current range.
+range_end = None
+# The delta between RANGE_START and the upper-case variant of that
+# character.
+upper_delta = None
+# The delta between RANGE_START and the lower-case variant of that
+# character.
+lower_delta = None
+
+# All the ranges found and completed so far.
+# Each entry is a tuple of the form (START, END, UPPER_DELTA, LOWER_DELTA).
+all_ranges = []
+
+
+def finish_range():
+    global range_start
+    global range_end
+    global upper_delta
+    global lower_delta
+    if range_start is not None:
+        all_ranges.append((range_start, range_end, upper_delta, lower_delta))
+        range_start = None
+        range_end = None
+        upper_delta = None
+        lower_delta = None
+
+
+def process_codepoint(val):
+    global range_start
+    global range_end
+    global upper_delta
+    global lower_delta
+    c = chr(val)
+    low = c.lower()
+    up = c.upper()
+    # U+00DF ("LATIN SMALL LETTER SHARP S", aka eszsett) traditionally
+    # upper-cases to the two-character string "SS" (the capital form
+    # is a relatively recent addition -- 2017).  Our simple scheme
+    # can't handle this, so we skip it.  Also, because our approach
+    # just represents runs of characters with identical folding
+    # deltas, this change must terminate the current run.
+    if (c == low and c == up) or len(low) != 1 or len(up) != 1:
+        finish_range()
+        return
+    updelta = ord(up) - val
+    lowdelta = ord(low) - val
+    if range_start is not None and (updelta != upper_delta or lowdelta != lower_delta):
+        finish_range()
+    if range_start is None:
+        range_start = val
+        upper_delta = updelta
+        lower_delta = lowdelta
+    range_end = val
+
+
+for c in range(0, 0x10FFFF):
+    process_codepoint(c)
+
+with open("ada-casefold.h", "w") as f:
+    print(
+        gdbcopyright.copyright("ada-unicode.py", "UTF-32 case-folding for GDB"),
+        file=f,
+    )
+    print("", file=f)
+    for r in all_ranges:
+        print(f"   {{{r[0]}, {r[1]}, {r[2]}, {r[3]}}},", file=f)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-valprint.c ./gdb/ada-valprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-valprint.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ada-valprint.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing Ada values for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,23 +30,12 @@
 #include "cli/cli-style.h"
 #include "gdbarch.h"
 
-static int print_field_values (struct type *, const gdb_byte *,
-			       int,
+static int print_field_values (struct value *, struct value *,
 			       struct ui_file *, int,
-			       struct value *,
 			       const struct value_print_options *,
-			       int, struct type *, int,
-			       const struct language_defn *);
-
+			       int, const struct language_defn *);
 
-/* Make TYPE unsigned if its range of values includes no negatives.  */
-static void
-adjust_type_signedness (struct type *type)
-{
-  if (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
-      && TYPE_LOW_BOUND (type) >= 0)
-    TYPE_UNSIGNED (type) = 1;
-}
+
 
 /* Assuming TYPE is a simple array type, prints its lower bound on STREAM,
    if non-standard (i.e., other than 1 for numbers, other than lower bound
@@ -73,20 +62,20 @@ print_optional_low_bound (struct ui_file
   if (low_bound > high_bound)
     return 0;
 
-  index_type = TYPE_INDEX_TYPE (type);
+  index_type = type->index_type ();
 
-  while (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
+  while (index_type->code () == TYPE_CODE_RANGE)
     {
       /* We need to know what the base type is, in order to do the
-         appropriate check below.  Otherwise, if this is a subrange
-         of an enumerated type, where the underlying value of the
-         first element is typically 0, we might test the low bound
-         against the wrong value.  */
-      index_type = TYPE_TARGET_TYPE (index_type);
+	 appropriate check below.  Otherwise, if this is a subrange
+	 of an enumerated type, where the underlying value of the
+	 first element is typically 0, we might test the low bound
+	 against the wrong value.  */
+      index_type = index_type->target_type ();
     }
 
   /* Don't print the lower bound if it's the default one.  */
-  switch (TYPE_CODE (index_type))
+  switch (index_type->code ())
     {
     case TYPE_CODE_BOOL:
     case TYPE_CODE_CHAR:
@@ -94,12 +83,13 @@ print_optional_low_bound (struct ui_file
 	return 0;
       break;
     case TYPE_CODE_ENUM:
-      if (low_bound == TYPE_FIELD_ENUMVAL (index_type, 0))
+      if (low_bound == 0)
 	return 0;
+      low_bound = index_type->field (low_bound).loc_enumval ();
       break;
     case TYPE_CODE_UNDEF:
       index_type = NULL;
-      /* FALL THROUGH */
+      [[fallthrough]];
     default:
       if (low_bound == 1)
 	return 0;
@@ -107,83 +97,64 @@ print_optional_low_bound (struct ui_file
     }
 
   ada_print_scalar (index_type, low_bound, stream);
-  fprintf_filtered (stream, " => ");
+  gdb_printf (stream, " => ");
   return 1;
 }
 
 /*  Version of val_print_array_elements for GNAT-style packed arrays.
-    Prints elements of packed array of type TYPE at bit offset
-    BITOFFSET from VALADDR on STREAM.  Formats according to OPTIONS and
-    separates with commas.  RECURSE is the recursion (nesting) level.
-    TYPE must have been decoded (as by ada_coerce_to_simple_array).  */
+    Prints elements of packed array of type TYPE from VALADDR on
+    STREAM.  Formats according to OPTIONS and separates with commas.
+    RECURSE is the recursion (nesting) level.  TYPE must have been
+    decoded (as by ada_coerce_to_simple_array).  */
 
 static void
 val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
-				 int offset,
-				 int bitoffset, struct ui_file *stream,
+				 int offset, struct ui_file *stream,
 				 int recurse,
-				 struct value *val,
 				 const struct value_print_options *options)
 {
   unsigned int i;
   unsigned int things_printed = 0;
   unsigned len;
   struct type *elttype, *index_type;
-  unsigned long bitsize = TYPE_FIELD_BITSIZE (type, 0);
-  struct value *mark = value_mark ();
+  unsigned long bitsize = type->field (0).bitsize ();
   LONGEST low = 0;
 
-  elttype = TYPE_TARGET_TYPE (type);
-  index_type = TYPE_INDEX_TYPE (type);
+  scoped_value_mark mark;
+
+  elttype = type->target_type ();
+  index_type = type->index_type ();
 
   {
     LONGEST high;
-    struct type *base_index_type;
 
-    if (get_discrete_bounds (index_type, &low, &high) < 0)
+    if (!get_discrete_bounds (index_type, &low, &high))
       len = 1;
-    else
-      len = high - low + 1;
-
-    if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
-        base_index_type = TYPE_TARGET_TYPE (index_type);
-      else
-        base_index_type = index_type;
-
-    if (TYPE_CODE (base_index_type) == TYPE_CODE_ENUM)
+    else if (low > high)
       {
-        LONGEST low_pos, high_pos;
-
-        /* Non-contiguous enumerations types can by used as index types
-           so the array length is computed from the positions of the
-           first and last literal in the enumeration type, and not from
-           the values of these literals.  */
-
-        if (!discrete_position (base_index_type, low, &low_pos)
-          || !discrete_position (base_index_type, high, &high_pos))
-          {
-            warning (_("unable to get positions in array, use bounds instead"));
-            low_pos = low;
-            high_pos = high;
-          }
-
-        /* The array length should normally be HIGH_POS - LOW_POS + 1.
-           But in Ada we allow LOW_POS to be greater than HIGH_POS for
-           empty arrays.  In that situation, the array length is just zero,
-           not negative!  */
-
-        if (low_pos > high_pos)
-          len = 0;
-        else
-          len = high_pos - low_pos + 1;
+	/* The array length should normally be HIGH_POS - LOW_POS + 1.
+	   But in Ada we allow LOW_POS to be greater than HIGH_POS for
+	   empty arrays.  In that situation, the array length is just zero,
+	   not negative!  */
+	len = 0;
       }
+    else
+      len = high - low + 1;
   }
 
+  if (index_type->code () == TYPE_CODE_RANGE)
+    index_type = index_type->target_type ();
+
   i = 0;
   annotate_array_section_begin (i, elttype);
 
   while (i < len && things_printed < options->print_max)
     {
+      /* Both this outer loop and the inner loop that checks for
+	 duplicates may allocate many values.  To avoid using too much
+	 memory, both spots release values as they work.  */
+      scoped_value_mark outer_free_values;
+
       struct value *v0, *v1;
       int i0;
 
@@ -191,15 +162,20 @@ val_print_packed_array_elements (struct
 	{
 	  if (options->prettyformat_arrays)
 	    {
-	      fprintf_filtered (stream, ",\n");
-	      print_spaces_filtered (2 + 2 * recurse, stream);
+	      gdb_printf (stream, ",\n");
+	      print_spaces (2 + 2 * recurse, stream);
 	    }
 	  else
 	    {
-	      fprintf_filtered (stream, ", ");
+	      gdb_printf (stream, ", ");
 	    }
 	}
-      wrap_here (n_spaces (2 + 2 * recurse));
+      else if (options->prettyformat_arrays)
+	{
+	  gdb_printf (stream, "\n");
+	  print_spaces (2 + 2 * recurse, stream);
+	}
+      stream->wrap_here (2 + 2 * recurse);
       maybe_print_array_index (index_type, i + low, stream, options);
 
       i0 = i;
@@ -209,6 +185,9 @@ val_print_packed_array_elements (struct
 					   bitsize, elttype);
       while (1)
 	{
+	  /* Make sure to free any values in the inner loop.  */
+	  scoped_value_mark free_values;
+
 	  i += 1;
 	  if (i >= len)
 	    break;
@@ -216,12 +195,12 @@ val_print_packed_array_elements (struct
 					       (i * bitsize) / HOST_CHAR_BIT,
 					       (i * bitsize) % HOST_CHAR_BIT,
 					       bitsize, elttype);
-	  if (TYPE_LENGTH (check_typedef (value_type (v0)))
-	      != TYPE_LENGTH (check_typedef (value_type (v1))))
+	  if (check_typedef (v0->type ())->length ()
+	      != check_typedef (v1->type ())->length ())
 	    break;
-	  if (!value_contents_eq (v0, value_embedded_offset (v0),
-				  v1, value_embedded_offset (v1),
-				  TYPE_LENGTH (check_typedef (value_type (v0)))))
+	  if (!v0->contents_eq (v0->embedded_offset (),
+				v1, v1->embedded_offset (),
+				check_typedef (v0->type ())->length ()))
 	    break;
 	}
 
@@ -229,13 +208,11 @@ val_print_packed_array_elements (struct
 	{
 	  struct value_print_options opts = *options;
 
-	  opts.deref_ref = 0;
-	  val_print (elttype,
-		     value_embedded_offset (v0), 0, stream,
-		     recurse + 1, v0, &opts, current_language);
+	  opts.deref_ref = false;
+	  common_val_print (v0, stream, recurse + 1, &opts, current_language);
 	  annotate_elt_rep (i - i0);
-	  fprintf_filtered (stream, _(" %p[<repeats %u times>%p]"),
-			    metadata_style.style ().ptr (), i - i0, nullptr);
+	  gdb_printf (stream, _(" %p[<repeats %u times>%p]"),
+		      metadata_style.style ().ptr (), i - i0, nullptr);
 	  annotate_elt_rep_end ();
 
 	}
@@ -244,27 +221,26 @@ val_print_packed_array_elements (struct
 	  int j;
 	  struct value_print_options opts = *options;
 
-	  opts.deref_ref = 0;
+	  opts.deref_ref = false;
 	  for (j = i0; j < i; j += 1)
 	    {
 	      if (j > i0)
 		{
 		  if (options->prettyformat_arrays)
 		    {
-		      fprintf_filtered (stream, ",\n");
-		      print_spaces_filtered (2 + 2 * recurse, stream);
+		      gdb_printf (stream, ",\n");
+		      print_spaces (2 + 2 * recurse, stream);
 		    }
 		  else
 		    {
-		      fprintf_filtered (stream, ", ");
+		      gdb_printf (stream, ", ");
 		    }
-		  wrap_here (n_spaces (2 + 2 * recurse));
+		  stream->wrap_here (2 + 2 * recurse);
 		  maybe_print_array_index (index_type, j + low,
 					   stream, options);
 		}
-	      val_print (elttype,
-			 value_embedded_offset (v0), 0, stream,
-			 recurse + 1, v0, &opts, current_language);
+	      common_val_print (v0, stream, recurse + 1, &opts,
+				current_language);
 	      annotate_elt ();
 	    }
 	}
@@ -273,16 +249,8 @@ val_print_packed_array_elements (struct
   annotate_array_section_end ();
   if (i < len)
     {
-      fprintf_filtered (stream, "...");
+      gdb_printf (stream, "...");
     }
-
-  value_free_to_mark (mark);
-}
-
-static struct type *
-printable_val_type (struct type *type, const gdb_byte *valaddr)
-{
-  return ada_to_fixed_type (ada_aligned_type (type), valaddr, 0, NULL, 1);
 }
 
 /* Print the character C on STREAM as part of the contents of a literal
@@ -302,12 +270,16 @@ ada_emit_char (int c, struct type *type,
   if (c <= UCHAR_MAX && isascii (c) && isprint (c))
     {
       if (c == quoter && c == '"')
-	fprintf_filtered (stream, "\"\"");
+	gdb_printf (stream, "\"\"");
       else
-	fprintf_filtered (stream, "%c", c);
+	gdb_printf (stream, "%c", c);
     }
   else
-    fprintf_filtered (stream, "[\"%0*x\"]", type_len * 2, c);
+    {
+      /* Follow GNAT's lead here and only use 6 digits for
+	 wide_wide_character.  */
+      gdb_printf (stream, "[\"%0*x\"]", std::min (6, type_len * 2), c);
+    }
 }
 
 /* Character #I of STRING, given that TYPE_LEN is the size in bytes
@@ -321,7 +293,7 @@ char_at (const gdb_byte *string, int i,
     return string[i];
   else
     return (int) extract_unsigned_integer (string + type_len * i,
-                                           type_len, byte_order);
+					   type_len, byte_order);
 }
 
 /* Print a floating-point value of type TYPE, pointed to in GDB by
@@ -337,9 +309,16 @@ ada_print_floating (const gdb_byte *vala
 
   print_floating (valaddr, type, &tmp_stream);
 
-  std::string &s = tmp_stream.string ();
+  std::string s = tmp_stream.release ();
   size_t skip_count = 0;
 
+  /* Don't try to modify a result representing an error.  */
+  if (s[0] == '<')
+    {
+      gdb_puts (s.c_str (), stream);
+      return;
+    }
+
   /* Modify for Ada rules.  */
 
   size_t pos = s.find ("inf");
@@ -370,20 +349,20 @@ ada_print_floating (const gdb_byte *vala
     {
       pos = s.find ('e');
       if (pos == std::string::npos)
-	fprintf_filtered (stream, "%s.0", s.c_str ());
+	gdb_printf (stream, "%s.0", s.c_str ());
       else
-	fprintf_filtered (stream, "%.*s.0%s", (int) pos, s.c_str (), &s[pos]);
+	gdb_printf (stream, "%.*s.0%s", (int) pos, s.c_str (), &s[pos]);
     }
   else
-    fprintf_filtered (stream, "%s", &s[skip_count]);
+    gdb_printf (stream, "%s", &s[skip_count]);
 }
 
 void
 ada_printchar (int c, struct type *type, struct ui_file *stream)
 {
-  fputs_filtered ("'", stream);
-  ada_emit_char (c, type, stream, '\'', TYPE_LENGTH (type));
-  fputs_filtered ("'", stream);
+  gdb_puts ("'", stream);
+  ada_emit_char (c, type, stream, '\'', type->length ());
+  gdb_puts ("'", stream);
 }
 
 /* [From print_type_scalar in typeprint.c].   Print VAL on STREAM in a
@@ -393,9 +372,6 @@ ada_printchar (int c, struct type *type,
 void
 ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
 {
-  unsigned int i;
-  unsigned len;
-
   if (!type)
     {
       print_longest (stream, 'd', 0, val);
@@ -404,42 +380,34 @@ ada_print_scalar (struct type *type, LON
 
   type = ada_check_typedef (type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
 
     case TYPE_CODE_ENUM:
-      len = TYPE_NFIELDS (type);
-      for (i = 0; i < len; i++)
-	{
-	  if (TYPE_FIELD_ENUMVAL (type, i) == val)
-	    {
-	      break;
-	    }
-	}
-      if (i < len)
-	{
-	  fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream);
-	}
-      else
-	{
+      {
+	std::optional<LONGEST> posn = discrete_position (type, val);
+	if (posn.has_value ())
+	  fputs_styled (ada_enum_name (type->field (*posn).name ()),
+			variable_name_style.style (), stream);
+	else
 	  print_longest (stream, 'd', 0, val);
-	}
+      }
       break;
 
     case TYPE_CODE_INT:
-      print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
+      print_longest (stream, type->is_unsigned () ? 'u' : 'd', 0, val);
       break;
 
     case TYPE_CODE_CHAR:
-      LA_PRINT_CHAR (val, type, stream);
+      current_language->printchar (val, type, stream);
       break;
 
     case TYPE_CODE_BOOL:
-      fprintf_filtered (stream, val ? "true" : "false");
+      gdb_printf (stream, val ? "true" : "false");
       break;
 
     case TYPE_CODE_RANGE:
-      ada_print_scalar (TYPE_TARGET_TYPE (type), val, stream);
+      ada_print_scalar (type->target_type (), val, stream);
       return;
 
     case TYPE_CODE_UNDEF:
@@ -484,14 +452,15 @@ printstr (struct ui_file *stream, struct
 
   if (length == 0)
     {
-      fputs_filtered ("\"\"", stream);
+      gdb_puts ("\"\"", stream);
       return;
     }
 
-  for (i = 0; i < length && things_printed < options->print_max; i += 1)
+  unsigned int print_max_chars = get_print_max_chars (options);
+  for (i = 0; i < length && things_printed < print_max_chars; i += 1)
     {
       /* Position of the character we are examining
-         to see whether it is repeated.  */
+	 to see whether it is repeated.  */
       unsigned int rep1;
       /* Number of repetitions we have detected so far.  */
       unsigned int reps;
@@ -500,7 +469,7 @@ printstr (struct ui_file *stream, struct
 
       if (need_comma)
 	{
-	  fputs_filtered (", ", stream);
+	  gdb_puts (", ", stream);
 	  need_comma = 0;
 	}
 
@@ -518,15 +487,15 @@ printstr (struct ui_file *stream, struct
 	{
 	  if (in_quotes)
 	    {
-	      fputs_filtered ("\", ", stream);
+	      gdb_puts ("\", ", stream);
 	      in_quotes = 0;
 	    }
-	  fputs_filtered ("'", stream);
+	  gdb_puts ("'", stream);
 	  ada_emit_char (char_at (string, i, type_len, byte_order),
 			 elttype, stream, '\'', type_len);
-	  fputs_filtered ("'", stream);
-	  fprintf_filtered (stream, _(" %p[<repeats %u times>%p]"),
-			    metadata_style.style ().ptr (), reps, nullptr);
+	  gdb_puts ("'", stream);
+	  gdb_printf (stream, _(" %p[<repeats %u times>%p]"),
+		      metadata_style.style ().ptr (), reps, nullptr);
 	  i = rep1 - 1;
 	  things_printed += options->repeat_count_threshold;
 	  need_comma = 1;
@@ -535,7 +504,7 @@ printstr (struct ui_file *stream, struct
 	{
 	  if (!in_quotes)
 	    {
-	      fputs_filtered ("\"", stream);
+	      gdb_puts ("\"", stream);
 	      in_quotes = 1;
 	    }
 	  ada_emit_char (char_at (string, i, type_len, byte_order),
@@ -546,10 +515,10 @@ printstr (struct ui_file *stream, struct
 
   /* Terminate the quotes if necessary.  */
   if (in_quotes)
-    fputs_filtered ("\"", stream);
+    gdb_puts ("\"", stream);
 
   if (force_ellipses || i < length)
-    fputs_filtered ("...", stream);
+    gdb_puts ("...", stream);
 }
 
 void
@@ -558,44 +527,38 @@ ada_printstr (struct ui_file *stream, st
 	      const char *encoding, int force_ellipses,
 	      const struct value_print_options *options)
 {
-  printstr (stream, type, string, length, force_ellipses, TYPE_LENGTH (type),
+  printstr (stream, type, string, length, force_ellipses, type->length (),
 	    options);
 }
 
 static int
-print_variant_part (struct type *type, int field_num,
-		    const gdb_byte *valaddr, int offset,
+print_variant_part (struct value *value, int field_num,
+		    struct value *outer_value,
 		    struct ui_file *stream, int recurse,
-		    struct value *val,
 		    const struct value_print_options *options,
 		    int comma_needed,
-		    struct type *outer_type, int outer_offset,
 		    const struct language_defn *language)
 {
-  struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
-  int which = ada_which_variant_applies (var_type, outer_type,
-					 valaddr + outer_offset);
+  struct type *type = value->type ();
+  struct type *var_type = type->field (field_num).type ();
+  int which = ada_which_variant_applies (var_type, outer_value);
 
   if (which < 0)
     return 0;
-  else
-    return print_field_values
-      (TYPE_FIELD_TYPE (var_type, which),
-       valaddr,
-       offset + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT
-       + TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT,
-       stream, recurse, val, options,
-       comma_needed, outer_type, outer_offset, language);
+
+  struct value *variant_field = value_field (value, field_num);
+  struct value *active_component = value_field (variant_field, which);
+  return print_field_values (active_component, outer_value, stream, recurse,
+			     options, comma_needed, language);
 }
 
-/* Print out fields of value at VALADDR + OFFSET having structure type TYPE.
+/* Print out fields of VALUE.
 
-   TYPE, VALADDR, OFFSET, STREAM, RECURSE, and OPTIONS have the same
-   meanings as in ada_print_value and ada_val_print.
+   STREAM, RECURSE, and OPTIONS have the same meanings as in
+   ada_print_value and ada_value_print.
 
-   OUTER_TYPE and OUTER_OFFSET give type and address of enclosing
-   record (used to get discriminant values when printing variant
-   parts).
+   OUTER_VALUE gives the enclosing record (used to get discriminant
+   values when printing variant parts).
 
    COMMA_NEEDED is 1 if fields have been printed at the current recursion
    level, so that a comma is needed before any field printed by this
@@ -604,17 +567,16 @@ print_variant_part (struct type *type, i
    Returns 1 if COMMA_NEEDED or any fields were printed.  */
 
 static int
-print_field_values (struct type *type, const gdb_byte *valaddr,
-		    int offset, struct ui_file *stream, int recurse,
-		    struct value *val,
+print_field_values (struct value *value, struct value *outer_value,
+		    struct ui_file *stream, int recurse,
 		    const struct value_print_options *options,
 		    int comma_needed,
-		    struct type *outer_type, int outer_offset,
 		    const struct language_defn *language)
 {
   int i, len;
 
-  len = TYPE_NFIELDS (type);
+  struct type *type = value->type ();
+  len = type->num_fields ();
 
   for (i = 0; i < len; i += 1)
     {
@@ -623,52 +585,49 @@ print_field_values (struct type *type, c
 
       if (ada_is_wrapper_field (type, i))
 	{
+	  struct value *field_val = ada_value_primitive_field (value, 0,
+							       i, type);
 	  comma_needed =
-	    print_field_values (TYPE_FIELD_TYPE (type, i),
-				valaddr,
-				(offset
-				 + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
-				stream, recurse, val, options,
-				comma_needed, type, offset, language);
+	    print_field_values (field_val, field_val,
+				stream, recurse, options,
+				comma_needed, language);
 	  continue;
 	}
       else if (ada_is_variant_part (type, i))
 	{
 	  comma_needed =
-	    print_variant_part (type, i, valaddr,
-				offset, stream, recurse, val,
-				options, comma_needed,
-				outer_type, outer_offset, language);
+	    print_variant_part (value, i, outer_value, stream, recurse,
+				options, comma_needed, language);
 	  continue;
 	}
 
       if (comma_needed)
-	fprintf_filtered (stream, ", ");
+	gdb_printf (stream, ", ");
       comma_needed = 1;
 
       if (options->prettyformat)
 	{
-	  fprintf_filtered (stream, "\n");
-	  print_spaces_filtered (2 + 2 * recurse, stream);
+	  gdb_printf (stream, "\n");
+	  print_spaces (2 + 2 * recurse, stream);
 	}
       else
 	{
-	  wrap_here (n_spaces (2 + 2 * recurse));
+	  stream->wrap_here (2 + 2 * recurse);
 	}
 
-      annotate_field_begin (TYPE_FIELD_TYPE (type, i));
-      fprintf_filtered (stream, "%.*s",
-			ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
-			TYPE_FIELD_NAME (type, i));
+      annotate_field_begin (type->field (i).type ());
+      gdb_printf (stream, "%.*s",
+		  ada_name_prefix_len (type->field (i).name ()),
+		  type->field (i).name ());
       annotate_field_name_end ();
-      fputs_filtered (" => ", stream);
+      gdb_puts (" => ", stream);
       annotate_field_value ();
 
-      if (TYPE_FIELD_PACKED (type, i))
+      if (type->field (i).is_packed ())
 	{
 	  /* Bitfields require special handling, especially due to byte
 	     order problems.  */
-	  if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i))
+	  if (type->field (i).is_ignored ())
 	    {
 	      fputs_styled (_("<optimized out or zero length>"),
 			    metadata_style.style (), stream);
@@ -676,32 +635,28 @@ print_field_values (struct type *type, c
 	  else
 	    {
 	      struct value *v;
-	      int bit_pos = TYPE_FIELD_BITPOS (type, i);
-	      int bit_size = TYPE_FIELD_BITSIZE (type, i);
+	      int bit_pos = type->field (i).loc_bitpos ();
+	      int bit_size = type->field (i).bitsize ();
 	      struct value_print_options opts;
 
-	      adjust_type_signedness (TYPE_FIELD_TYPE (type, i));
 	      v = ada_value_primitive_packed_val
-		    (NULL, valaddr,
-		     offset + bit_pos / HOST_CHAR_BIT,
+		    (value, nullptr,
+		     bit_pos / HOST_CHAR_BIT,
 		     bit_pos % HOST_CHAR_BIT,
-		     bit_size, TYPE_FIELD_TYPE (type, i));
+		     bit_size, type->field (i).type ());
 	      opts = *options;
-	      opts.deref_ref = 0;
-	      val_print (TYPE_FIELD_TYPE (type, i),
-			 value_embedded_offset (v), 0,
-			 stream, recurse + 1, v,
-			 &opts, language);
+	      opts.deref_ref = false;
+	      common_val_print (v, stream, recurse + 1, &opts, language);
 	    }
 	}
       else
 	{
 	  struct value_print_options opts = *options;
 
-	  opts.deref_ref = 0;
-	  val_print (TYPE_FIELD_TYPE (type, i),
-		     (offset + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
-		     0, stream, recurse + 1, val, &opts, language);
+	  opts.deref_ref = false;
+
+	  struct value *v = value_field (value, i);
+	  common_val_print (v, stream, recurse + 1, &opts, language);
 	}
       annotate_field_end ();
     }
@@ -714,13 +669,12 @@ print_field_values (struct type *type, c
 
 static void
 ada_val_print_string (struct type *type, const gdb_byte *valaddr,
-		      int offset, int offset_aligned, CORE_ADDR address,
+		      int offset_aligned,
 		      struct ui_file *stream, int recurse,
-		      struct value *original_value,
 		      const struct value_print_options *options)
 {
   enum bfd_endian byte_order = type_byte_order (type);
-  struct type *elttype = TYPE_TARGET_TYPE (type);
+  struct type *elttype = type->target_type ();
   unsigned int eltlen;
   unsigned int len;
 
@@ -729,24 +683,22 @@ ada_val_print_string (struct type *type,
      Similarly, the size of ELTTYPE should also be non-null, since
      it's a character-like type.  */
   gdb_assert (elttype != NULL);
-  gdb_assert (TYPE_LENGTH (elttype) != 0);
-
-  eltlen = TYPE_LENGTH (elttype);
-  len = TYPE_LENGTH (type) / eltlen;
+  gdb_assert (elttype->length () != 0);
 
-  if (options->prettyformat_arrays)
-    print_spaces_filtered (2 + 2 * recurse, stream);
+  eltlen = elttype->length ();
+  len = type->length () / eltlen;
 
   /* If requested, look for the first null char and only print
      elements up to it.  */
   if (options->stop_print_at_null)
     {
+      unsigned int print_max_chars = get_print_max_chars (options);
       int temp_len;
 
       /* Look for a NULL char.  */
       for (temp_len = 0;
 	   (temp_len < len
-	    && temp_len < options->print_max
+	    && temp_len < print_max_chars
 	    && char_at (valaddr + offset_aligned,
 			temp_len, eltlen, byte_order) != 0);
 	   temp_len += 1);
@@ -757,64 +709,31 @@ ada_val_print_string (struct type *type,
 	    eltlen, options);
 }
 
-/* Implement Ada val_print-ing for GNAT arrays (Eg. fat pointers,
-   thin pointers, etc).  */
+/* Implement Ada value_print'ing for the case where TYPE is a
+   TYPE_CODE_PTR.  */
 
 static void
-ada_val_print_gnat_array (struct type *type, const gdb_byte *valaddr,
-			  int offset, CORE_ADDR address,
-			  struct ui_file *stream, int recurse,
-			  struct value *original_value,
-			  const struct value_print_options *options)
+ada_value_print_ptr (struct value *val,
+		     struct ui_file *stream, int recurse,
+		     const struct value_print_options *options)
 {
-  struct value *mark = value_mark ();
-  struct value *val;
-
-  val = value_from_contents_and_address (type, valaddr + offset, address);
-  /* If this is a reference, coerce it now.  This helps taking care
-     of the case where ADDRESS is meaningless because original_value
-     was not an lval.  */
-  val = coerce_ref (val);
-  if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
-    val = ada_coerce_to_simple_array_ptr (val);
-  else
-    val = ada_coerce_to_simple_array (val);
-  if (val == NULL)
+  if (!options->format
+      && val->type ()->target_type ()->code () == TYPE_CODE_INT
+      && val->type ()->target_type ()->length () == 0)
     {
-      gdb_assert (TYPE_CODE (type) == TYPE_CODE_TYPEDEF);
-      fprintf_filtered (stream, "0x0");
+      gdb_puts ("null", stream);
+      return;
     }
-  else
-    val_print (value_type (val),
-	       value_embedded_offset (val), value_address (val),
-	       stream, recurse, val, options,
-	       language_def (language_ada));
-  value_free_to_mark (mark);
-}
 
-/* Implement Ada val_print'ing for the case where TYPE is
-   a TYPE_CODE_PTR.  */
-
-static void
-ada_val_print_ptr (struct type *type, const gdb_byte *valaddr,
-		   int offset, int offset_aligned, CORE_ADDR address,
-		   struct ui_file *stream, int recurse,
-		   struct value *original_value,
-		   const struct value_print_options *options)
-{
-  val_print (type, offset, address, stream, recurse,
-	     original_value, options, language_def (language_c));
+  common_val_print (val, stream, recurse, options, language_def (language_c));
 
+  struct type *type = ada_check_typedef (val->type ());
   if (ada_is_tag_type (type))
     {
-      struct value *val =
-	value_from_contents_and_address (type,
-					 valaddr + offset_aligned,
-					 address + offset_aligned);
-      const char *name = ada_tag_name (val);
+      gdb::unique_xmalloc_ptr<char> name = ada_tag_name (val);
 
       if (name != NULL)
-	fprintf_filtered (stream, " (%s)", name);
+	gdb_printf (stream, " (%s)", name.get ());
     }
 }
 
@@ -822,55 +741,25 @@ ada_val_print_ptr (struct type *type, co
    a TYPE_CODE_INT or TYPE_CODE_RANGE.  */
 
 static void
-ada_val_print_num (struct type *type, const gdb_byte *valaddr,
-		   int offset, int offset_aligned, CORE_ADDR address,
-		   struct ui_file *stream, int recurse,
-		   struct value *original_value,
-		   const struct value_print_options *options)
+ada_value_print_num (struct value *val, struct ui_file *stream, int recurse,
+		     const struct value_print_options *options)
 {
-  if (ada_is_fixed_point_type (type))
-    {
-      struct value *scale = ada_scaling_factor (type);
-      struct value *v = value_from_contents (type, valaddr + offset_aligned);
-      v = value_cast (value_type (scale), v);
-      v = value_binop (v, scale, BINOP_MUL);
-
-      const char *fmt = TYPE_LENGTH (type) < 4 ? "%.11g" : "%.17g";
-      std::string str
-	= target_float_to_string (value_contents (v), value_type (v), fmt);
-      fputs_filtered (str.c_str (), stream);
-      return;
-    }
-  else if (TYPE_CODE (type) == TYPE_CODE_RANGE
-	   && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ENUM
-	       || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_BOOL
-	       || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CHAR))
+  struct type *type = ada_check_typedef (val->type ());
+  const gdb_byte *valaddr = val->contents_for_printing ().data ();
+
+  if (type->code () == TYPE_CODE_RANGE
+      && (type->target_type ()->code () == TYPE_CODE_ENUM
+	  || type->target_type ()->code () == TYPE_CODE_BOOL
+	  || type->target_type ()->code () == TYPE_CODE_CHAR))
     {
       /* For enum-valued ranges, we want to recurse, because we'll end
 	 up printing the constant's name rather than its numeric
 	 value.  Character and fixed-point types are also printed
-	 differently, so recuse for those as well.  */
-      struct type *target_type = TYPE_TARGET_TYPE (type);
-
-      if (TYPE_LENGTH (type) != TYPE_LENGTH (target_type))
-	{
-	  /* Obscure case of range type that has different length from
-	     its base type.  Perform a conversion, or we will get a
-	     nonsense value.  Actually, we could use the same
-	     code regardless of lengths; I'm just avoiding a cast.  */
-	  struct value *v1
-	    = value_from_contents_and_address (type, valaddr + offset, 0);
-	  struct value *v = value_cast (target_type, v1);
-
-	  val_print (target_type,
-		     value_embedded_offset (v), 0, stream,
-		     recurse + 1, v, options,
-		     language_def (language_ada));
-	}
-      else
-	val_print (TYPE_TARGET_TYPE (type), offset,
-		   address, stream, recurse, original_value,
-		   options, language_def (language_ada));
+	 differently, so recurse for those as well.  */
+      struct type *target_type = type->target_type ();
+      val = value_cast (target_type, val);
+      common_val_print (val, stream, recurse + 1, options,
+			language_def (language_ada));
       return;
     }
   else
@@ -883,8 +772,7 @@ ada_val_print_num (struct type *type, co
 	  struct value_print_options opts = *options;
 
 	  opts.format = format;
-	  val_print_scalar_formatted (type, offset_aligned,
-				      original_value, &opts, 0, stream);
+	  value_print_scalar_formatted (val, &opts, 0, stream);
 	}
       else if (ada_is_system_address_type (type))
 	{
@@ -894,26 +782,24 @@ ada_val_print_num (struct type *type, co
 	     so we have to work-around this deficiency by handling
 	     System.Address values as a special case.  */
 
-	  struct gdbarch *gdbarch = get_type_arch (type);
+	  struct gdbarch *gdbarch = type->arch ();
 	  struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
-	  CORE_ADDR addr = extract_typed_address (valaddr + offset_aligned,
-						  ptr_type);
+	  CORE_ADDR addr = extract_typed_address (valaddr, ptr_type);
 
-	  fprintf_filtered (stream, "(");
+	  gdb_printf (stream, "(");
 	  type_print (type, "", stream, -1);
-	  fprintf_filtered (stream, ") ");
-	  fputs_filtered (paddress (gdbarch, addr), stream);
+	  gdb_printf (stream, ") ");
+	  gdb_puts (paddress (gdbarch, addr), stream);
 	}
       else
 	{
-	  val_print_scalar_formatted (type, offset_aligned,
-				      original_value, options, 0, stream);
+	  value_print_scalar_formatted (val, options, 0, stream);
 	  if (ada_is_character_type (type))
 	    {
 	      LONGEST c;
 
-	      fputs_filtered (" ", stream);
-	      c = unpack_long (type, valaddr + offset_aligned);
+	      gdb_puts (" ", stream);
+	      c = unpack_long (type, valaddr);
 	      ada_printchar (c, type, stream);
 	    }
 	}
@@ -925,127 +811,96 @@ ada_val_print_num (struct type *type, co
    a TYPE_CODE_ENUM.  */
 
 static void
-ada_val_print_enum (struct type *type, const gdb_byte *valaddr,
-		    int offset, int offset_aligned, CORE_ADDR address,
-		    struct ui_file *stream, int recurse,
-		    struct value *original_value,
+ada_val_print_enum (struct value *value, struct ui_file *stream, int recurse,
 		    const struct value_print_options *options)
 {
-  int i;
-  unsigned int len;
   LONGEST val;
 
   if (options->format)
     {
-      val_print_scalar_formatted (type, offset_aligned,
-				  original_value, options, 0, stream);
+      value_print_scalar_formatted (value, options, 0, stream);
       return;
     }
 
-  len = TYPE_NFIELDS (type);
-  val = unpack_long (type, valaddr + offset_aligned);
-  for (i = 0; i < len; i++)
-    {
-      QUIT;
-      if (val == TYPE_FIELD_ENUMVAL (type, i))
-	break;
-    }
+  struct type *type = ada_check_typedef (value->type ());
+  const gdb_byte *valaddr = value->contents_for_printing ().data ();
+  int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
 
-  if (i < len)
+  val = unpack_long (type, valaddr + offset_aligned);
+  std::optional<LONGEST> posn = discrete_position (type, val);
+  if (posn.has_value ())
     {
-      const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
+      const char *name = ada_enum_name (type->field (*posn).name ());
 
       if (name[0] == '\'')
-	fprintf_filtered (stream, "%ld %s", (long) val, name);
+	gdb_printf (stream, "%ld %ps", (long) val,
+		    styled_string (variable_name_style.style (),
+				   name));
       else
-	fputs_filtered (name, stream);
+	fputs_styled (name, variable_name_style.style (), stream);
     }
   else
     print_longest (stream, 'd', 0, val);
 }
 
-/* Implement Ada val_print'ing for the case where TYPE is
-   a TYPE_CODE_FLT.  */
+/* Implement Ada val_print'ing for the case where the type is
+   TYPE_CODE_STRUCT or TYPE_CODE_UNION.  */
 
 static void
-ada_val_print_flt (struct type *type, const gdb_byte *valaddr,
-		   int offset, int offset_aligned, CORE_ADDR address,
-		   struct ui_file *stream, int recurse,
-		   struct value *original_value,
-		   const struct value_print_options *options)
+ada_val_print_struct_union (struct value *value,
+			    struct ui_file *stream,
+			    int recurse,
+			    const struct value_print_options *options)
 {
-  if (options->format)
-    {
-      val_print (type, offset, address, stream, recurse,
-		 original_value, options, language_def (language_c));
-      return;
-    }
-
-  ada_print_floating (valaddr + offset, type, stream);
-}
-
-/* Implement Ada val_print'ing for the case where TYPE is
-   a TYPE_CODE_STRUCT or TYPE_CODE_UNION.  */
-
-static void
-ada_val_print_struct_union
-  (struct type *type, const gdb_byte *valaddr, int offset,
-   int offset_aligned, CORE_ADDR address, struct ui_file *stream,
-   int recurse, struct value *original_value,
-   const struct value_print_options *options)
-{
-  if (ada_is_bogus_array_descriptor (type))
-    {
-      fprintf_filtered (stream, "(...?)");
-      return;
-    }
+  gdb_printf (stream, "(");
 
-  fprintf_filtered (stream, "(");
-
-  if (print_field_values (type, valaddr, offset_aligned,
-			  stream, recurse, original_value, options,
-			  0, type, offset_aligned,
-			  language_def (language_ada)) != 0
+  if (print_field_values (value, value, stream, recurse, options,
+			  0, language_def (language_ada)) != 0
       && options->prettyformat)
     {
-      fprintf_filtered (stream, "\n");
-      print_spaces_filtered (2 * recurse, stream);
+      gdb_printf (stream, "\n");
+      print_spaces (2 * recurse, stream);
     }
 
-  fprintf_filtered (stream, ")");
+  gdb_printf (stream, ")");
 }
 
-/* Implement Ada val_print'ing for the case where TYPE is
-   a TYPE_CODE_ARRAY.  */
+/* Implement Ada value_print'ing for the case where TYPE is a
+   TYPE_CODE_ARRAY.  */
 
 static void
-ada_val_print_array (struct type *type, const gdb_byte *valaddr,
-		     int offset, int offset_aligned, CORE_ADDR address,
-		     struct ui_file *stream, int recurse,
-		     struct value *original_value,
-		     const struct value_print_options *options)
+ada_value_print_array (struct value *val, struct ui_file *stream, int recurse,
+		       const struct value_print_options *options)
 {
+  struct type *type = ada_check_typedef (val->type ());
+
   /* For an array of characters, print with string syntax.  */
   if (ada_is_string_type (type)
       && (options->format == 0 || options->format == 's'))
     {
-      ada_val_print_string (type, valaddr, offset, offset_aligned,
-			    address, stream, recurse, original_value,
+      const gdb_byte *valaddr = val->contents_for_printing ().data ();
+      int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
+
+      ada_val_print_string (type, valaddr, offset_aligned, stream, recurse,
 			    options);
       return;
     }
 
-  fprintf_filtered (stream, "(");
+  gdb_printf (stream, "(");
   print_optional_low_bound (stream, type, options);
-  if (TYPE_FIELD_BITSIZE (type, 0) > 0)
-    val_print_packed_array_elements (type, valaddr, offset_aligned,
-				     0, stream, recurse,
-				     original_value, options);
+
+  if (val->entirely_optimized_out ())
+    val_print_optimized_out (val, stream);
+  else if (type->field (0).bitsize () > 0)
+    {
+      const gdb_byte *valaddr = val->contents_for_printing ().data ();
+      int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
+      val_print_packed_array_elements (type, valaddr, offset_aligned,
+				       stream, recurse, options);
+    }
   else
-    val_print_array_elements (type, offset_aligned, address,
-			      stream, recurse, original_value,
-			      options, 0);
-  fprintf_filtered (stream, ")");
+    value_print_array_elements (val, stream, recurse, options, 0);
+  gdb_printf (stream, ")");
 }
 
 /* Implement Ada val_print'ing for the case where TYPE is
@@ -1063,11 +918,11 @@ ada_val_print_ref (struct type *type, co
      of the object value would be confusing to an Ada programmer.
      So, for Ada values, we print the actual dereferenced value
      regardless.  */
-  struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type));
+  struct type *elttype = check_typedef (type->target_type ());
   struct value *deref_val;
   CORE_ADDR deref_val_int;
 
-  if (TYPE_CODE (elttype) == TYPE_CODE_UNDEF)
+  if (elttype->code () == TYPE_CODE_UNDEF)
     {
       fputs_styled ("<ref to undefined type>", metadata_style.style (),
 		    stream);
@@ -1077,7 +932,7 @@ ada_val_print_ref (struct type *type, co
   deref_val = coerce_ref_if_computed (original_value);
   if (deref_val)
     {
-      if (ada_is_tagged_type (value_type (deref_val), 1))
+      if (ada_is_tagged_type (deref_val->type (), 1))
 	deref_val = ada_tag_value_at_base_address (deref_val);
 
       common_val_print (deref_val, stream, recurse + 1, options,
@@ -1088,158 +943,140 @@ ada_val_print_ref (struct type *type, co
   deref_val_int = unpack_pointer (type, valaddr + offset_aligned);
   if (deref_val_int == 0)
     {
-      fputs_filtered ("(null)", stream);
+      gdb_puts ("(null)", stream);
       return;
     }
 
   deref_val
     = ada_value_ind (value_from_pointer (lookup_pointer_type (elttype),
 					 deref_val_int));
-  if (ada_is_tagged_type (value_type (deref_val), 1))
+  if (ada_is_tagged_type (deref_val->type (), 1))
     deref_val = ada_tag_value_at_base_address (deref_val);
 
-  /* Make sure that the object does not have an unreasonable size
-     before trying to print it.  This can happen for instance with
-     references to dynamic objects whose contents is uninitialized
-     (Eg: an array whose bounds are not set yet).  */
-  ada_ensure_varsize_limit (value_type (deref_val));
-
-  if (value_lazy (deref_val))
-    value_fetch_lazy (deref_val);
-
-  val_print (value_type (deref_val),
-	     value_embedded_offset (deref_val),
-	     value_address (deref_val), stream, recurse + 1,
-	     deref_val, options, language_def (language_ada));
+  if (deref_val->lazy ())
+    deref_val->fetch_lazy ();
+
+  common_val_print (deref_val, stream, recurse + 1,
+		    options, language_def (language_ada));
 }
 
-/* See the comment on ada_val_print.  This function differs in that it
-   does not catch evaluation errors (leaving that to ada_val_print).  */
+/* See the comment on ada_value_print.  This function differs in that
+   it does not catch evaluation errors (leaving that to its
+   caller).  */
 
-static void
-ada_val_print_1 (struct type *type,
-		 int offset, CORE_ADDR address,
-		 struct ui_file *stream, int recurse,
-		 struct value *original_value,
-		 const struct value_print_options *options)
+void
+ada_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
+		       const struct value_print_options *options)
 {
-  int offset_aligned;
-  const gdb_byte *valaddr = value_contents_for_printing (original_value);
-
-  type = ada_check_typedef (type);
+  struct type *type = ada_check_typedef (val->type ());
 
   if (ada_is_array_descriptor_type (type)
       || (ada_is_constrained_packed_array_type (type)
-	  && TYPE_CODE (type) != TYPE_CODE_PTR))
+	  && type->code () != TYPE_CODE_PTR))
     {
-      ada_val_print_gnat_array (type, valaddr, offset, address,
-				stream, recurse, original_value,
-				options);
-      return;
+      /* If this is a reference, coerce it now.  This helps taking
+	 care of the case where ADDRESS is meaningless because
+	 original_value was not an lval.  */
+      val = coerce_ref (val);
+      val = ada_get_decoded_value (val);
+      if (val == nullptr)
+	{
+	  gdb_assert (type->code () == TYPE_CODE_TYPEDEF);
+	  gdb_printf (stream, "0x0");
+	  return;
+	}
     }
+  else
+    val = ada_to_fixed_value (val);
 
-  offset_aligned = offset + ada_aligned_value_addr (type, valaddr) - valaddr;
-  type = printable_val_type (type, valaddr + offset_aligned);
-  type = resolve_dynamic_type (type, valaddr + offset_aligned,
-			       address + offset_aligned);
+  type = val->type ();
+  struct type *saved_type = type;
 
-  switch (TYPE_CODE (type))
+  const gdb_byte *valaddr = val->contents_for_printing ().data ();
+  CORE_ADDR address = val->address ();
+  gdb::array_view<const gdb_byte> view
+    = gdb::make_array_view (valaddr, type->length ());
+  type = ada_check_typedef (resolve_dynamic_type (type, view, address));
+  if (type != saved_type)
+    {
+      val = val->copy ();
+      val->deprecated_set_type (type);
+    }
+
+  if (is_fixed_point_type (type))
+    type = type->fixed_point_type_base_type ();
+
+  switch (type->code ())
     {
     default:
-      val_print (type, offset, address, stream, recurse,
-		 original_value, options, language_def (language_c));
+      common_val_print (val, stream, recurse, options,
+			language_def (language_c));
       break;
 
     case TYPE_CODE_PTR:
-      ada_val_print_ptr (type, valaddr, offset, offset_aligned,
-			 address, stream, recurse, original_value,
-			 options);
+      ada_value_print_ptr (val, stream, recurse, options);
       break;
 
     case TYPE_CODE_INT:
     case TYPE_CODE_RANGE:
-      ada_val_print_num (type, valaddr, offset, offset_aligned,
-			 address, stream, recurse, original_value,
-			 options);
+      ada_value_print_num (val, stream, recurse, options);
       break;
 
     case TYPE_CODE_ENUM:
-      ada_val_print_enum (type, valaddr, offset, offset_aligned,
-			  address, stream, recurse, original_value,
-			  options);
+      ada_val_print_enum (val, stream, recurse, options);
       break;
 
     case TYPE_CODE_FLT:
-      ada_val_print_flt (type, valaddr, offset, offset_aligned,
-			 address, stream, recurse, original_value,
-			 options);
+      if (options->format)
+	{
+	  common_val_print (val, stream, recurse, options,
+			    language_def (language_c));
+	  break;
+	}
+
+      ada_print_floating (valaddr, type, stream);
       break;
 
     case TYPE_CODE_UNION:
     case TYPE_CODE_STRUCT:
-      ada_val_print_struct_union (type, valaddr, offset, offset_aligned,
-				  address, stream, recurse,
-				  original_value, options);
+      ada_val_print_struct_union (val, stream, recurse, options);
       break;
 
     case TYPE_CODE_ARRAY:
-      ada_val_print_array (type, valaddr, offset, offset_aligned,
-			   address, stream, recurse, original_value,
-			   options);
+      ada_value_print_array (val, stream, recurse, options);
       return;
 
     case TYPE_CODE_REF:
-      ada_val_print_ref (type, valaddr, offset, offset_aligned,
-			 address, stream, recurse, original_value,
+      ada_val_print_ref (type, valaddr, 0, 0,
+			 address, stream, recurse, val,
 			 options);
       break;
     }
 }
 
-/* See val_print for a description of the various parameters of this
-   function; they are identical.  */
-
-void
-ada_val_print (struct type *type,
-	       int embedded_offset, CORE_ADDR address,
-	       struct ui_file *stream, int recurse,
-	       struct value *val,
-	       const struct value_print_options *options)
-{
-  try
-    {
-      ada_val_print_1 (type, embedded_offset, address,
-		       stream, recurse, val, options);
-    }
-  catch (const gdb_exception_error &except)
-    {
-      fprintf_styled (stream, metadata_style.style (),
-		      _("<error reading variable: %s>"),
-		      except.what ());
-    }
-}
-
 void
 ada_value_print (struct value *val0, struct ui_file *stream,
 		 const struct value_print_options *options)
 {
   struct value *val = ada_to_fixed_value (val0);
-  CORE_ADDR address = value_address (val);
-  struct type *type = ada_check_typedef (value_type (val));
+  struct type *type = ada_check_typedef (val->type ());
   struct value_print_options opts;
 
-  /* If it is a pointer, indicate what it points to.  */
-  if (TYPE_CODE (type) == TYPE_CODE_PTR)
+  /* If it is a pointer, indicate what it points to; but not for
+     "void *" pointers.  */
+  if (type->code () == TYPE_CODE_PTR
+      && !(type->target_type ()->code () == TYPE_CODE_INT
+	   && type->target_type ()->length () == 0))
     {
       /* Hack:  don't print (char *) for char strings.  Their
-         type is indicated by the quoted string anyway.  */
-      if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) != sizeof (char)
-	  || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_INT 
-	  || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
+	 type is indicated by the quoted string anyway.  */
+      if (type->target_type ()->length () != sizeof (char)
+	  || type->target_type ()->code () != TYPE_CODE_INT
+	  || type->target_type ()->is_unsigned ())
 	{
-	  fprintf_filtered (stream, "(");
+	  gdb_printf (stream, "(");
 	  type_print (type, "", stream, -1);
-	  fprintf_filtered (stream, ") ");
+	  gdb_printf (stream, ") ");
 	}
     }
   else if (ada_is_array_descriptor_type (type))
@@ -1247,24 +1084,15 @@ ada_value_print (struct value *val0, str
       /* We do not print the type description unless TYPE is an array
 	 access type (this is encoded by the compiler as a typedef to
 	 a fat pointer - hence the check against TYPE_CODE_TYPEDEF).  */
-      if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
-        {
-	  fprintf_filtered (stream, "(");
+      if (type->code () == TYPE_CODE_TYPEDEF)
+	{
+	  gdb_printf (stream, "(");
 	  type_print (type, "", stream, -1);
-	  fprintf_filtered (stream, ") ");
+	  gdb_printf (stream, ") ");
 	}
     }
-  else if (ada_is_bogus_array_descriptor (type))
-    {
-      fprintf_filtered (stream, "(");
-      type_print (type, "", stream, -1);
-      fprintf_filtered (stream, ") (...?)");
-      return;
-    }
 
   opts = *options;
-  opts.deref_ref = 1;
-  val_print (type,
-	     value_embedded_offset (val), address,
-	     stream, 0, val, &opts, current_language);
+  opts.deref_ref = true;
+  common_val_print (val, stream, 0, &opts, current_language);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-varobj.c ./gdb/ada-varobj.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ada-varobj.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ada-varobj.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* varobj support for Ada.
 
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -63,10 +63,10 @@ static void
 ada_varobj_decode_var (struct value **value_ptr, struct type **type_ptr)
 {
   if (*value_ptr)
-    {
-      *value_ptr = ada_get_decoded_value (*value_ptr);
-      *type_ptr = ada_check_typedef (value_type (*value_ptr));
-    }
+    *value_ptr = ada_get_decoded_value (*value_ptr);
+
+  if (*value_ptr != nullptr)
+    *type_ptr = ada_check_typedef ((*value_ptr)->type ());
   else
     *type_ptr = ada_get_decoded_type (*type_ptr);
 }
@@ -82,7 +82,7 @@ ada_varobj_scalar_image (struct type *ty
   string_file buf;
 
   ada_print_scalar (type, val, &buf);
-  return std::move (buf.string ());
+  return buf.release ();
 }
 
 /* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair designates
@@ -102,10 +102,10 @@ ada_varobj_struct_elt (struct value *par
   if (parent_value)
     {
       value = value_field (parent_value, fieldno);
-      type = value_type (value);
+      type = value->type ();
     }
   else
-    type = TYPE_FIELD_TYPE (parent_type, fieldno);
+    type = parent_type->field (fieldno).type ();
 
   if (child_value)
     *child_value = value;
@@ -132,12 +132,12 @@ ada_varobj_ind (struct value *parent_val
 	 ada_get_decoded_value would have transformed our parent_type
 	 into a simple array pointer type.  */
       gdb_assert (parent_value == NULL);
-      gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_TYPEDEF);
+      gdb_assert (parent_type->code () == TYPE_CODE_TYPEDEF);
 
       /* Decode parent_type by the equivalent pointer to (decoded)
 	 array.  */
-      while (TYPE_CODE (parent_type) == TYPE_CODE_TYPEDEF)
-	parent_type = TYPE_TARGET_TYPE (parent_type);
+      while (parent_type->code () == TYPE_CODE_TYPEDEF)
+	parent_type = parent_type->target_type ();
       parent_type = ada_coerce_to_simple_array_type (parent_type);
       parent_type = lookup_pointer_type (parent_type);
     }
@@ -150,10 +150,10 @@ ada_varobj_ind (struct value *parent_val
   if (parent_value)
     {
       value = ada_value_ind (parent_value);
-      type = value_type (value);
+      type = value->type ();
     }
   else
-    type = TYPE_TARGET_TYPE (parent_type);
+    type = parent_type->target_type ();
 
   if (child_value)
     *child_value = value;
@@ -178,13 +178,13 @@ ada_varobj_simple_array_elt (struct valu
   if (parent_value)
     {
       struct value *index_value =
-	value_from_longest (TYPE_INDEX_TYPE (parent_type), elt_index);
+	value_from_longest (parent_type->index_type (), elt_index);
 
       value = ada_value_subscript (parent_value, 1, &index_value);
-      type = value_type (value);
+      type = value->type ();
     }
   else
-    type = TYPE_TARGET_TYPE (parent_type);
+    type = parent_type->target_type ();
 
   if (child_value)
     *child_value = value;
@@ -206,11 +206,13 @@ ada_varobj_adjust_for_child_access (stru
       one child (the struct), their children are the components of
       the struct/union type.  We handle this situation by dereferencing
       the (value, type) couple.  */
-  if (TYPE_CODE (*type) == TYPE_CODE_PTR
-      && (TYPE_CODE (TYPE_TARGET_TYPE (*type)) == TYPE_CODE_STRUCT
-          || TYPE_CODE (TYPE_TARGET_TYPE (*type)) == TYPE_CODE_UNION)
-      && !ada_is_array_descriptor_type (TYPE_TARGET_TYPE (*type))
-      && !ada_is_constrained_packed_array_type (TYPE_TARGET_TYPE (*type)))
+  if ((*type)->code () == TYPE_CODE_PTR
+      && ((*type)->target_type ()->code () == TYPE_CODE_STRUCT
+	  || (*type)->target_type ()->code () == TYPE_CODE_UNION)
+      && *value != nullptr
+      && value_as_address (*value) != 0
+      && !ada_is_array_descriptor_type ((*type)->target_type ())
+      && !ada_is_constrained_packed_array_type ((*type)->target_type ()))
     ada_varobj_ind (*value, *type, value, type);
 
   /* If this is a tagged type, we need to transform it a bit in order
@@ -219,7 +221,7 @@ ada_varobj_adjust_for_child_access (stru
   if (*value != NULL && ada_is_tagged_type (*type, 1))
     {
       *value = ada_tag_value_at_base_address (*value);
-      *type = value_type (*value);
+      *type = (*value)->type ();
     }
 }
 
@@ -234,7 +236,7 @@ ada_varobj_get_array_number_of_children
   LONGEST lo, hi;
 
   if (parent_value == NULL
-      && is_dynamic_type (TYPE_INDEX_TYPE (parent_type)))
+      && is_dynamic_type (parent_type->index_type ()))
     {
       /* This happens when listing the children of an object
 	 which does not exist in memory (Eg: when requesting
@@ -270,10 +272,10 @@ ada_varobj_get_struct_number_of_children
   int n_children = 0;
   int i;
 
-  gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT
-	      || TYPE_CODE (parent_type) == TYPE_CODE_UNION);
+  gdb_assert (parent_type->code () == TYPE_CODE_STRUCT
+	      || parent_type->code () == TYPE_CODE_UNION);
 
-  for (i = 0; i < TYPE_NFIELDS (parent_type); i++)
+  for (i = 0; i < parent_type->num_fields (); i++)
     {
       if (ada_is_ignored_field (parent_type, i))
 	continue;
@@ -325,12 +327,16 @@ static int
 ada_varobj_get_ptr_number_of_children (struct value *parent_value,
 				       struct type *parent_type)
 {
-  struct type *child_type = TYPE_TARGET_TYPE (parent_type);
+  struct type *child_type = parent_type->target_type ();
 
   /* Pointer to functions and to void do not have a child, since
      you cannot print what they point to.  */
-  if (TYPE_CODE (child_type) == TYPE_CODE_FUNC
-      || TYPE_CODE (child_type) == TYPE_CODE_VOID)
+  if (child_type->code () == TYPE_CODE_FUNC
+      || child_type->code () == TYPE_CODE_VOID)
+    return 0;
+
+  /* Only show children for non-null pointers.  */
+  if (parent_value == nullptr || value_as_address (parent_value) == 0)
     return 0;
 
   /* All other types have 1 child.  */
@@ -353,16 +359,16 @@ ada_varobj_get_number_of_children (struc
   if (ada_is_access_to_unconstrained_array (parent_type))
     return 1;
 
-  if (TYPE_CODE (parent_type) == TYPE_CODE_ARRAY)
+  if (parent_type->code () == TYPE_CODE_ARRAY)
     return ada_varobj_get_array_number_of_children (parent_value,
 						    parent_type);
 
-  if (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT
-      || TYPE_CODE (parent_type) == TYPE_CODE_UNION)
+  if (parent_type->code () == TYPE_CODE_STRUCT
+      || parent_type->code () == TYPE_CODE_UNION)
     return ada_varobj_get_struct_number_of_children (parent_value,
 						     parent_type);
 
-  if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
+  if (parent_type->code () == TYPE_CODE_PTR)
     return ada_varobj_get_ptr_number_of_children (parent_value,
 						  parent_type);
 
@@ -418,10 +424,10 @@ ada_varobj_describe_struct_child (struct
   int fieldno;
   int childno = 0;
 
-  gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT
-	      || TYPE_CODE (parent_type) == TYPE_CODE_UNION);
+  gdb_assert (parent_type->code () == TYPE_CODE_STRUCT
+	      || parent_type->code () == TYPE_CODE_UNION);
 
-  for (fieldno = 0; fieldno < TYPE_NFIELDS (parent_type); fieldno++)
+  for (fieldno = 0; fieldno < parent_type->num_fields (); fieldno++)
     {
       if (ada_is_ignored_field (parent_type, fieldno))
 	continue;
@@ -496,7 +502,7 @@ ada_varobj_describe_struct_child (struct
 		 name, except that we need to strip suffixes from it.
 		 For instance, fields with alignment constraints will
 		 have an __XVA suffix added to them.  */
-	      const char *field_name = TYPE_FIELD_NAME (parent_type, fieldno);
+	      const char *field_name = parent_type->field (fieldno).name ();
 	      int child_name_len = ada_name_prefix_len (field_name);
 
 	      *child_name = string_printf ("%.*s", child_name_len, field_name);
@@ -516,7 +522,7 @@ ada_varobj_describe_struct_child (struct
 		 name, except that we need to strip suffixes from it.
 		 For instance, fields with alignment constraints will
 		 have an __XVA suffix added to them.  */
-	      const char *field_name = TYPE_FIELD_NAME (parent_type, fieldno);
+	      const char *field_name = parent_type->field (fieldno).name ();
 	      int child_name_len = ada_name_prefix_len (field_name);
 
 	      *child_path_expr =
@@ -587,9 +593,9 @@ ada_varobj_describe_simple_array_child (
   struct type *index_type;
   int real_index;
 
-  gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_ARRAY);
+  gdb_assert (parent_type->code () == TYPE_CODE_ARRAY);
 
-  index_type = TYPE_INDEX_TYPE (parent_type);
+  index_type = parent_type->index_type ();
   real_index = child_index + ada_discrete_type_low_bound (index_type);
 
   if (child_name)
@@ -627,11 +633,11 @@ ada_varobj_describe_simple_array_child (
       std::string decoded;
 
       /* If the index type is a range type, find the base type.  */
-      while (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
-	index_type = TYPE_TARGET_TYPE (index_type);
+      while (index_type->code () == TYPE_CODE_RANGE)
+	index_type = index_type->target_type ();
 
-      if (TYPE_CODE (index_type) == TYPE_CODE_ENUM
-	  || TYPE_CODE (index_type) == TYPE_CODE_BOOL)
+      if (index_type->code () == TYPE_CODE_ENUM
+	  || index_type->code () == TYPE_CODE_BOOL)
 	{
 	  index_type_name = ada_type_name (index_type);
 	  if (index_type_name)
@@ -693,7 +699,7 @@ ada_varobj_describe_child (struct value
       return;
     }
 
-  if (TYPE_CODE (parent_type) == TYPE_CODE_ARRAY)
+  if (parent_type->code () == TYPE_CODE_ARRAY)
     {
       ada_varobj_describe_simple_array_child
 	(parent_value, parent_type, parent_name, parent_path_expr,
@@ -702,8 +708,8 @@ ada_varobj_describe_child (struct value
       return;
     }
 
-  if (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT
-      || TYPE_CODE (parent_type) == TYPE_CODE_UNION)
+  if (parent_type->code () == TYPE_CODE_STRUCT
+      || parent_type->code () == TYPE_CODE_UNION)
     {
       ada_varobj_describe_struct_child (parent_value, parent_type,
 					parent_name, parent_path_expr,
@@ -713,7 +719,7 @@ ada_varobj_describe_child (struct value
       return;
     }
 
-  if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
+  if (parent_type->code () == TYPE_CODE_PTR)
     {
       ada_varobj_describe_ptr_child (parent_value, parent_type,
 				     parent_name, parent_path_expr,
@@ -811,7 +817,7 @@ ada_varobj_get_value_image (struct value
   string_file buffer;
 
   common_val_print (value, &buffer, 0, opts, current_language);
-  return std::move (buffer.string ());
+  return buffer.release ();
 }
 
 /* Assuming that the (VALUE, TYPE) pair designates an array varobj,
@@ -856,7 +862,7 @@ ada_varobj_get_value_of_variable (struct
 {
   ada_varobj_decode_var (&value, &type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
@@ -937,10 +943,10 @@ static bool
 ada_value_is_changeable_p (const struct varobj *var)
 {
   struct type *type = (var->value != nullptr
-		       ? value_type (var->value.get ()) : var->type);
+		       ? var->value->type () : var->type);
 
-  if (TYPE_CODE (type) == TYPE_CODE_REF)
-    type = TYPE_TARGET_TYPE (type);
+  if (type->code () == TYPE_CODE_REF)
+    type = type->target_type ();
 
   if (ada_is_access_to_unconstrained_array (type))
     {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/addrmap.c ./gdb/addrmap.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/addrmap.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/addrmap.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* addrmap.c --- implementation of address map data structure.
 
-   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,179 +18,68 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "splay-tree.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "addrmap.h"
+#include "gdbsupport/selftest.h"
 
 /* Make sure splay trees can actually hold the values we want to
    store in them.  */
-gdb_static_assert (sizeof (splay_tree_key) >= sizeof (CORE_ADDR *));
-gdb_static_assert (sizeof (splay_tree_value) >= sizeof (void *));
+static_assert (sizeof (splay_tree_key) >= sizeof (CORE_ADDR *));
+static_assert (sizeof (splay_tree_value) >= sizeof (void *));
 
 
-/* The "abstract class".  */
-
-/* Functions implementing the addrmap functions for a particular
-   implementation.  */
-struct addrmap_funcs
-{
-  void (*set_empty) (struct addrmap *self,
-                     CORE_ADDR start, CORE_ADDR end_inclusive,
-                     void *obj);
-  void *(*find) (struct addrmap *self, CORE_ADDR addr);
-  struct addrmap *(*create_fixed) (struct addrmap *self,
-                                   struct obstack *obstack);
-  void (*relocate) (struct addrmap *self, CORE_ADDR offset);
-  int (*foreach) (struct addrmap *self, addrmap_foreach_fn fn, void *data);
-};
-
-
-struct addrmap
-{
-  const struct addrmap_funcs *funcs;
-};
-
-
-void
-addrmap_set_empty (struct addrmap *map,
-                   CORE_ADDR start, CORE_ADDR end_inclusive,
-                   void *obj)
-{
-  map->funcs->set_empty (map, start, end_inclusive, obj);
-}
-
-
-void *
-addrmap_find (struct addrmap *map, CORE_ADDR addr)
-{
-  return map->funcs->find (map, addr);
-}
-
-
-struct addrmap *
-addrmap_create_fixed (struct addrmap *original, struct obstack *obstack)
-{
-  return original->funcs->create_fixed (original, obstack);
-}
-
-
-/* Relocate all the addresses in MAP by OFFSET.  (This can be applied
-   to either mutable or immutable maps.)  */
-void
-addrmap_relocate (struct addrmap *map, CORE_ADDR offset)
-{
-  map->funcs->relocate (map, offset);
-}
-
-
-int
-addrmap_foreach (struct addrmap *map, addrmap_foreach_fn fn, void *data)
-{
-  return map->funcs->foreach (map, fn, data);
-}
-
 /* Fixed address maps.  */
 
-/* A transition: a point in an address map where the value changes.
-   The map maps ADDR to VALUE, but if ADDR > 0, it maps ADDR-1 to
-   something else.  */
-struct addrmap_transition
-{
-  CORE_ADDR addr;
-  void *value;
-};
-
-
-struct addrmap_fixed
-{
-  struct addrmap addrmap;
-
-  /* The number of transitions in TRANSITIONS.  */
-  size_t num_transitions;
-
-  /* An array of transitions, sorted by address.  For every point in
-     the map where either ADDR == 0 or ADDR is mapped to one value and
-     ADDR - 1 is mapped to something different, we have an entry here
-     containing ADDR and VALUE.  (Note that this means we always have
-     an entry for address 0).  */
-  struct addrmap_transition transitions[1];
-};
-
-
-static void
-addrmap_fixed_set_empty (struct addrmap *self,
-                   CORE_ADDR start, CORE_ADDR end_inclusive,
-                   void *obj)
-{
-  internal_error (__FILE__, __LINE__,
-                  "addrmap_fixed_set_empty: "
-                  "fixed addrmaps can't be changed\n");
-}
-
-
-static void *
-addrmap_fixed_find (struct addrmap *self, CORE_ADDR addr)
+void *
+addrmap_fixed::do_find (CORE_ADDR addr) const
 {
-  struct addrmap_fixed *map = (struct addrmap_fixed *) self;
-  struct addrmap_transition *bottom = &map->transitions[0];
-  struct addrmap_transition *top = &map->transitions[map->num_transitions - 1];
+  const struct addrmap_transition *bottom = &transitions[0];
+  const struct addrmap_transition *top = &transitions[num_transitions - 1];
 
   while (bottom < top)
     {
       /* This needs to round towards top, or else when top = bottom +
-         1 (i.e., two entries are under consideration), then mid ==
-         bottom, and then we may not narrow the range when (mid->addr
-         < addr).  */
-      struct addrmap_transition *mid = top - (top - bottom) / 2;
+	 1 (i.e., two entries are under consideration), then mid ==
+	 bottom, and then we may not narrow the range when (mid->addr
+	 < addr).  */
+      const addrmap_transition *mid = top - (top - bottom) / 2;
 
       if (mid->addr == addr)
-        {
-          bottom = mid;
-          break;
-        }
+	{
+	  bottom = mid;
+	  break;
+	}
       else if (mid->addr < addr)
-        /* We don't eliminate mid itself here, since each transition
-           covers all subsequent addresses until the next.  This is why
-           we must round up in computing the midpoint.  */
-        bottom = mid;
+	/* We don't eliminate mid itself here, since each transition
+	   covers all subsequent addresses until the next.  This is why
+	   we must round up in computing the midpoint.  */
+	bottom = mid;
       else
-        top = mid - 1;
+	top = mid - 1;
     }
 
   return bottom->value;
 }
 
 
-static struct addrmap *
-addrmap_fixed_create_fixed (struct addrmap *self, struct obstack *obstack)
-{
-  internal_error (__FILE__, __LINE__,
-                  _("addrmap_create_fixed is not implemented yet "
-                    "for fixed addrmaps"));
-}
-
-
-static void
-addrmap_fixed_relocate (struct addrmap *self, CORE_ADDR offset)
+void
+addrmap_fixed::relocate (CORE_ADDR offset)
 {
-  struct addrmap_fixed *map = (struct addrmap_fixed *) self;
   size_t i;
 
-  for (i = 0; i < map->num_transitions; i++)
-    map->transitions[i].addr += offset;
+  for (i = 0; i < num_transitions; i++)
+    transitions[i].addr += offset;
 }
 
 
-static int
-addrmap_fixed_foreach (struct addrmap *self, addrmap_foreach_fn fn,
-		       void *data)
+int
+addrmap_fixed::do_foreach (addrmap_foreach_fn fn) const
 {
-  struct addrmap_fixed *map = (struct addrmap_fixed *) self;
   size_t i;
 
-  for (i = 0; i < map->num_transitions; i++)
+  for (i = 0; i < num_transitions; i++)
     {
-      int res = fn (data, map->transitions[i].addr, map->transitions[i].value);
+      int res = fn (transitions[i].addr, transitions[i].value);
 
       if (res != 0)
 	return res;
@@ -200,56 +89,14 @@ addrmap_fixed_foreach (struct addrmap *s
 }
 
 
-static const struct addrmap_funcs addrmap_fixed_funcs =
-{
-  addrmap_fixed_set_empty,
-  addrmap_fixed_find,
-  addrmap_fixed_create_fixed,
-  addrmap_fixed_relocate,
-  addrmap_fixed_foreach
-};
-
-
 
 /* Mutable address maps.  */
 
-struct addrmap_mutable
-{
-  struct addrmap addrmap;
-
-  /* The obstack to use for allocations for this map.  */
-  struct obstack *obstack;
-
-  /* A splay tree, with a node for each transition; there is a
-     transition at address T if T-1 and T map to different objects.
-
-     Any addresses below the first node map to NULL.  (Unlike
-     fixed maps, we have no entry at (CORE_ADDR) 0; it doesn't 
-     simplify enough.)
-
-     The last region is assumed to end at CORE_ADDR_MAX.
-
-     Since we can't know whether CORE_ADDR is larger or smaller than
-     splay_tree_key (unsigned long) --- I think both are possible,
-     given all combinations of 32- and 64-bit hosts and targets ---
-     our keys are pointers to CORE_ADDR values.  Since the splay tree
-     library doesn't pass any closure pointer to the key free
-     function, we can't keep a freelist for keys.  Since mutable
-     addrmaps are only used temporarily right now, we just leak keys
-     from deleted nodes; they'll be freed when the obstack is freed.  */
-  splay_tree tree;
-
-  /* A freelist for splay tree nodes, allocated on obstack, and
-     chained together by their 'right' pointers.  */
-  splay_tree_node free_nodes;
-};
-
-
-/* Allocate a copy of CORE_ADDR in MAP's obstack.  */
-static splay_tree_key
-allocate_key (struct addrmap_mutable *map, CORE_ADDR addr)
+/* Allocate a copy of CORE_ADDR.  */
+splay_tree_key
+addrmap_mutable::allocate_key (CORE_ADDR addr)
 {
-  CORE_ADDR *key = XOBNEW (map->obstack, CORE_ADDR);
+  CORE_ADDR *key = XNEW (CORE_ADDR);
 
   *key = addr;
   return (splay_tree_key) key;
@@ -257,31 +104,31 @@ allocate_key (struct addrmap_mutable *ma
 
 
 /* Type-correct wrappers for splay tree access.  */
-static splay_tree_node
-addrmap_splay_tree_lookup (struct addrmap_mutable *map, CORE_ADDR addr)
+splay_tree_node
+addrmap_mutable::splay_tree_lookup (CORE_ADDR addr) const
 {
-  return splay_tree_lookup (map->tree, (splay_tree_key) &addr);
+  return ::splay_tree_lookup (tree, (splay_tree_key) &addr);
 }
 
 
-static splay_tree_node
-addrmap_splay_tree_predecessor (struct addrmap_mutable *map, CORE_ADDR addr)
+splay_tree_node
+addrmap_mutable::splay_tree_predecessor (CORE_ADDR addr) const
 {
-  return splay_tree_predecessor (map->tree, (splay_tree_key) &addr);
+  return ::splay_tree_predecessor (tree, (splay_tree_key) &addr);
 }
 
 
-static splay_tree_node
-addrmap_splay_tree_successor (struct addrmap_mutable *map, CORE_ADDR addr)
+splay_tree_node
+addrmap_mutable::splay_tree_successor (CORE_ADDR addr)
 {
-  return splay_tree_successor (map->tree, (splay_tree_key) &addr);
+  return ::splay_tree_successor (tree, (splay_tree_key) &addr);
 }
 
 
-static void
-addrmap_splay_tree_remove (struct addrmap_mutable *map, CORE_ADDR addr)
+void
+addrmap_mutable::splay_tree_remove (CORE_ADDR addr)
 {
-  splay_tree_remove (map->tree, (splay_tree_key) &addr);
+  ::splay_tree_remove (tree, (splay_tree_key) &addr);
 }
 
 
@@ -306,40 +153,35 @@ addrmap_node_set_value (splay_tree_node
 }
 
 
-static void
-addrmap_splay_tree_insert (struct addrmap_mutable *map,
-			   CORE_ADDR key, void *value)
+void
+addrmap_mutable::splay_tree_insert (CORE_ADDR key, void *value)
 {
-  splay_tree_insert (map->tree,
-                     allocate_key (map, key),
-                     (splay_tree_value) value);
+  ::splay_tree_insert (tree,
+		       allocate_key (key),
+		       (splay_tree_value) value);
 }
 
 
 /* Without changing the mapping of any address, ensure that there is a
    tree node at ADDR, even if it would represent a "transition" from
    one value to the same value.  */
-static void
-force_transition (struct addrmap_mutable *self, CORE_ADDR addr)
+void
+addrmap_mutable::force_transition (CORE_ADDR addr)
 {
-  splay_tree_node n
-    = addrmap_splay_tree_lookup (self, addr);
+  splay_tree_node n = splay_tree_lookup (addr);
 
   if (! n)
     {
-      n = addrmap_splay_tree_predecessor (self, addr);
-      addrmap_splay_tree_insert (self, addr,
-                                 n ? addrmap_node_value (n) : NULL);
+      n = splay_tree_predecessor (addr);
+      splay_tree_insert (addr, n ? addrmap_node_value (n) : NULL);
     }
 }
 
 
-static void
-addrmap_mutable_set_empty (struct addrmap *self,
-                           CORE_ADDR start, CORE_ADDR end_inclusive,
-                           void *obj)
+void
+addrmap_mutable::set_empty (CORE_ADDR start, CORE_ADDR end_inclusive,
+			    void *obj)
 {
-  struct addrmap_mutable *map = (struct addrmap_mutable *) self;
   splay_tree_node n, next;
   void *prior_value;
 
@@ -356,239 +198,285 @@ addrmap_mutable_set_empty (struct addrma
      - Second pass: remove any unnecessary transitions.  */
 
   /* Establish transitions at the start and end.  */
-  force_transition (map, start);
+  force_transition (start);
   if (end_inclusive < CORE_ADDR_MAX)
-    force_transition (map, end_inclusive + 1);
+    force_transition (end_inclusive + 1);
 
   /* Walk the area, changing all NULL regions to OBJ.  */
-  for (n = addrmap_splay_tree_lookup (map, start), gdb_assert (n);
+  for (n = splay_tree_lookup (start), gdb_assert (n);
        n && addrmap_node_key (n) <= end_inclusive;
-       n = addrmap_splay_tree_successor (map, addrmap_node_key (n)))
+       n = splay_tree_successor (addrmap_node_key (n)))
     {
       if (! addrmap_node_value (n))
-        addrmap_node_set_value (n, obj);
+	addrmap_node_set_value (n, obj);
     }
 
   /* Walk the area again, removing transitions from any value to
      itself.  Be sure to visit both the transitions we forced
      above.  */
-  n = addrmap_splay_tree_predecessor (map, start);
+  n = splay_tree_predecessor (start);
   prior_value = n ? addrmap_node_value (n) : NULL;
-  for (n = addrmap_splay_tree_lookup (map, start), gdb_assert (n);
+  for (n = splay_tree_lookup (start), gdb_assert (n);
        n && (end_inclusive == CORE_ADDR_MAX
-             || addrmap_node_key (n) <= end_inclusive + 1);
+	     || addrmap_node_key (n) <= end_inclusive + 1);
        n = next)
     {
-      next = addrmap_splay_tree_successor (map, addrmap_node_key (n));
+      next = splay_tree_successor (addrmap_node_key (n));
       if (addrmap_node_value (n) == prior_value)
-        addrmap_splay_tree_remove (map, addrmap_node_key (n));
+	splay_tree_remove (addrmap_node_key (n));
       else
-        prior_value = addrmap_node_value (n);
+	prior_value = addrmap_node_value (n);
     }
 }
 
 
-static void *
-addrmap_mutable_find (struct addrmap *self, CORE_ADDR addr)
-{
-  /* Not needed yet.  */
-  internal_error (__FILE__, __LINE__,
-                  _("addrmap_find is not implemented yet "
-                    "for mutable addrmaps"));
-}
-
-
-/* A function to pass to splay_tree_foreach to count the number of nodes
-   in the tree.  */
-static int
-splay_foreach_count (splay_tree_node n, void *closure)
-{
-  size_t *count = (size_t *) closure;
-
-  (*count)++;
-  return 0;
-}
-
-
-/* A function to pass to splay_tree_foreach to copy entries into a
-   fixed address map.  */
-static int
-splay_foreach_copy (splay_tree_node n, void *closure)
+void *
+addrmap_mutable::do_find (CORE_ADDR addr) const
 {
-  struct addrmap_fixed *fixed = (struct addrmap_fixed *) closure;
-  struct addrmap_transition *t = &fixed->transitions[fixed->num_transitions];
+  splay_tree_node n = splay_tree_lookup (addr);
+  if (n != nullptr)
+    {
+      gdb_assert (addrmap_node_key (n) == addr);
+      return addrmap_node_value (n);
+    }
 
-  t->addr = addrmap_node_key (n);
-  t->value = addrmap_node_value (n);
-  fixed->num_transitions++;
+  n = splay_tree_predecessor (addr);
+  if (n != nullptr)
+    {
+      gdb_assert (addrmap_node_key (n) < addr);
+      return addrmap_node_value (n);
+    }
 
-  return 0;
+  return nullptr;
 }
 
 
-static struct addrmap *
-addrmap_mutable_create_fixed (struct addrmap *self, struct obstack *obstack)
+addrmap_fixed::addrmap_fixed (struct obstack *obstack, addrmap_mutable *mut)
 {
-  struct addrmap_mutable *mutable_obj = (struct addrmap_mutable *) self;
-  struct addrmap_fixed *fixed;
-  size_t num_transitions;
-  size_t alloc_len;
+  size_t transition_count = 0;
 
   /* Count the number of transitions in the tree.  */
-  num_transitions = 0;
-  splay_tree_foreach (mutable_obj->tree, splay_foreach_count, &num_transitions);
+  mut->foreach ([&] (CORE_ADDR start, void *obj)
+    {
+      ++transition_count;
+      return 0;
+    });
 
   /* Include an extra entry for the transition at zero (which fixed
      maps have, but mutable maps do not.)  */
-  num_transitions++;
+  transition_count++;
 
-  alloc_len = sizeof (*fixed)
-	      + (num_transitions * sizeof (fixed->transitions[0]));
-  fixed = (struct addrmap_fixed *) obstack_alloc (obstack, alloc_len);
-  fixed->addrmap.funcs = &addrmap_fixed_funcs;
-  fixed->num_transitions = 1;
-  fixed->transitions[0].addr = 0;
-  fixed->transitions[0].value = NULL;
+  num_transitions = 1;
+  transitions = XOBNEWVEC (obstack, struct addrmap_transition,
+			   transition_count);
+  transitions[0].addr = 0;
+  transitions[0].value = NULL;
 
   /* Copy all entries from the splay tree to the array, in order 
      of increasing address.  */
-  splay_tree_foreach (mutable_obj->tree, splay_foreach_copy, fixed);
+  mut->foreach ([&] (CORE_ADDR start, void *obj)
+    {
+      transitions[num_transitions].addr = start;
+      transitions[num_transitions].value = obj;
+      ++num_transitions;
+      return 0;
+    });
 
   /* We should have filled the array.  */
-  gdb_assert (fixed->num_transitions == num_transitions);
-
-  return (struct addrmap *) fixed;
+  gdb_assert (num_transitions == transition_count);
 }
 
 
-static void
-addrmap_mutable_relocate (struct addrmap *self, CORE_ADDR offset)
+void
+addrmap_mutable::relocate (CORE_ADDR offset)
 {
   /* Not needed yet.  */
-  internal_error (__FILE__, __LINE__,
-                  _("addrmap_relocate is not implemented yet "
-                    "for mutable addrmaps"));
+  internal_error (_("addrmap_relocate is not implemented yet "
+		    "for mutable addrmaps"));
 }
 
 
-/* Struct to map addrmap's foreach function to splay_tree's version.  */
-struct mutable_foreach_data
-{
-  addrmap_foreach_fn fn;
-  void *data;
-};
-
-
 /* This is a splay_tree_foreach_fn.  */
 
 static int
 addrmap_mutable_foreach_worker (splay_tree_node node, void *data)
 {
-  struct mutable_foreach_data *foreach_data
-    = (struct mutable_foreach_data *) data;
+  addrmap_foreach_fn *fn = (addrmap_foreach_fn *) data;
 
-  return foreach_data->fn (foreach_data->data,
-			   addrmap_node_key (node),
-			   addrmap_node_value (node));
+  return (*fn) (addrmap_node_key (node), addrmap_node_value (node));
 }
 
 
-static int
-addrmap_mutable_foreach (struct addrmap *self, addrmap_foreach_fn fn,
-			 void *data)
+int
+addrmap_mutable::do_foreach (addrmap_foreach_fn fn) const
 {
-  struct addrmap_mutable *mutable_obj = (struct addrmap_mutable *) self;
-  struct mutable_foreach_data foreach_data;
-
-  foreach_data.fn = fn;
-  foreach_data.data = data;
-  return splay_tree_foreach (mutable_obj->tree, addrmap_mutable_foreach_worker,
-			     &foreach_data);
+  return splay_tree_foreach (tree, addrmap_mutable_foreach_worker, &fn);
 }
 
 
-static const struct addrmap_funcs addrmap_mutable_funcs =
-{
-  addrmap_mutable_set_empty,
-  addrmap_mutable_find,
-  addrmap_mutable_create_fixed,
-  addrmap_mutable_relocate,
-  addrmap_mutable_foreach
-};
-
-
-static void *
-splay_obstack_alloc (int size, void *closure)
+/* Compare keys as CORE_ADDR * values.  */
+static int
+splay_compare_CORE_ADDR_ptr (splay_tree_key ak, splay_tree_key bk)
 {
-  struct addrmap_mutable *map = (struct addrmap_mutable *) closure;
-  splay_tree_node n;
-
-  /* We should only be asked to allocate nodes and larger things.
-     (If, at some point in the future, this is no longer true, we can
-     just round up the size to sizeof (*n).)  */
-  gdb_assert (size >= sizeof (*n));
+  CORE_ADDR a = * (CORE_ADDR *) ak;
+  CORE_ADDR b = * (CORE_ADDR *) bk;
 
-  if (map->free_nodes)
-    {
-      n = map->free_nodes;
-      map->free_nodes = n->right;
-      return n;
-    }
+  /* We can't just return a-b here, because of over/underflow.  */
+  if (a < b)
+    return -1;
+  else if (a == b)
+    return 0;
   else
-    return obstack_alloc (map->obstack, size);
+    return 1;
 }
 
 
 static void
-splay_obstack_free (void *obj, void *closure)
+xfree_wrapper (splay_tree_key key)
+{
+  xfree ((void *) key);
+}
+
+addrmap_mutable::addrmap_mutable ()
+  : tree (splay_tree_new (splay_compare_CORE_ADDR_ptr, xfree_wrapper,
+			  nullptr /* no delete value */))
 {
-  struct addrmap_mutable *map = (struct addrmap_mutable *) closure;
-  splay_tree_node n = (splay_tree_node) obj;
+}
 
-  /* We've asserted in the allocation function that we only allocate
-     nodes or larger things, so it should be safe to put whatever
-     we get passed back on the free list.  */
-  n->right = map->free_nodes;
-  map->free_nodes = n;
+addrmap_mutable::~addrmap_mutable ()
+{
+  splay_tree_delete (tree);
 }
 
 
-/* Compare keys as CORE_ADDR * values.  */
-static int
-splay_compare_CORE_ADDR_ptr (splay_tree_key ak, splay_tree_key bk)
+/* See addrmap.h.  */
+
+void
+addrmap_dump (struct addrmap *map, struct ui_file *outfile, void *payload)
 {
-  CORE_ADDR a = * (CORE_ADDR *) ak;
-  CORE_ADDR b = * (CORE_ADDR *) bk;
+  /* True if the previously printed addrmap entry was for PAYLOAD.
+     If so, we want to print the next one as well (since the next
+     addrmap entry defines the end of the range).  */
+  bool previous_matched = false;
+
+  auto callback = [&] (CORE_ADDR start_addr, const void *obj)
+  {
+    QUIT;
+
+    bool matches = payload == nullptr || payload == obj;
+    const char *addr_str = nullptr;
+    if (matches)
+      addr_str = host_address_to_string (obj);
+    else if (previous_matched)
+      addr_str = "<ends here>";
+
+    if (matches || previous_matched)
+      gdb_printf (outfile, "  %s%s %s\n",
+		  payload != nullptr ? "  " : "",
+		  core_addr_to_string (start_addr),
+		  addr_str);
+
+    previous_matched = matches;
 
-  /* We can't just return a-b here, because of over/underflow.  */
-  if (a < b)
-    return -1;
-  else if (a == b)
     return 0;
-  else
-    return 1;
+  };
+
+  map->foreach (callback);
+}
+
+#if GDB_SELF_TEST
+namespace selftests {
+
+/* Convert P to CORE_ADDR.  */
+
+static CORE_ADDR
+core_addr (void *p)
+{
+  return (CORE_ADDR)(uintptr_t)p;
 }
 
+/* Check that &ARRAY[LOW]..&ARRAY[HIGH] has VAL in MAP.  */
 
-struct addrmap *
-addrmap_create_mutable (struct obstack *obstack)
+#define CHECK_ADDRMAP_FIND(MAP, ARRAY, LOW, HIGH, VAL)			\
+  do									\
+    {									\
+      for (unsigned i = LOW; i <= HIGH; ++i)				\
+	SELF_CHECK (MAP->find (core_addr (&ARRAY[i])) == VAL);		\
+    }									\
+  while (0)
+
+/* Entry point for addrmap unit tests.  */
+
+static void
+test_addrmap ()
 {
-  struct addrmap_mutable *map = XOBNEW (obstack, struct addrmap_mutable);
+  /* We'll verify using the addresses of the elements of this array.  */
+  char array[20];
 
-  map->addrmap.funcs = &addrmap_mutable_funcs;
-  map->obstack = obstack;
+  /* We'll verify using these values stored into the map.  */
+  void *val1 = &array[1];
+  void *val2 = &array[2];
+
+  /* Create mutable addrmap.  */
+  auto_obstack temp_obstack;
+  auto map = std::make_unique<struct addrmap_mutable> ();
+  SELF_CHECK (map != nullptr);
+
+  /* Check initial state.  */
+  CHECK_ADDRMAP_FIND (map, array, 0, 19, nullptr);
+
+  /* Insert address range into mutable addrmap.  */
+  map->set_empty (core_addr (&array[10]), core_addr (&array[12]), val1);
+  CHECK_ADDRMAP_FIND (map, array, 0, 9, nullptr);
+  CHECK_ADDRMAP_FIND (map, array, 10, 12, val1);
+  CHECK_ADDRMAP_FIND (map, array, 13, 19, nullptr);
+
+  /* Create corresponding fixed addrmap.  */
+  struct addrmap *map2
+    = new (&temp_obstack) addrmap_fixed (&temp_obstack, map.get ());
+  SELF_CHECK (map2 != nullptr);
+  CHECK_ADDRMAP_FIND (map2, array, 0, 9, nullptr);
+  CHECK_ADDRMAP_FIND (map2, array, 10, 12, val1);
+  CHECK_ADDRMAP_FIND (map2, array, 13, 19, nullptr);
 
-  /* splay_tree_new_with_allocator uses the provided allocation
-     function to allocate the main splay_tree structure itself, so our
-     free list has to be initialized before we create the tree.  */
-  map->free_nodes = NULL;
-
-  map->tree = splay_tree_new_with_allocator (splay_compare_CORE_ADDR_ptr,
-                                             NULL, /* no delete key */
-                                             NULL, /* no delete value */
-                                             splay_obstack_alloc,
-                                             splay_obstack_free,
-                                             map);
+  /* Iterate over both addrmaps.  */
+  auto callback = [&] (CORE_ADDR start_addr, void *obj)
+    {
+      if (start_addr == core_addr (nullptr))
+	SELF_CHECK (obj == nullptr);
+      else if (start_addr == core_addr (&array[10]))
+	SELF_CHECK (obj == val1);
+      else if (start_addr == core_addr (&array[13]))
+	SELF_CHECK (obj == nullptr);
+      else
+	SELF_CHECK (false);
+      return 0;
+    };
+  SELF_CHECK (map->foreach (callback) == 0);
+  SELF_CHECK (map2->foreach (callback) == 0);
+
+  /* Relocate fixed addrmap.  */
+  map2->relocate (1);
+  CHECK_ADDRMAP_FIND (map2, array, 0, 10, nullptr);
+  CHECK_ADDRMAP_FIND (map2, array, 11, 13, val1);
+  CHECK_ADDRMAP_FIND (map2, array, 14, 19, nullptr);
+
+  /* Insert partially overlapping address range into mutable addrmap.  */
+  map->set_empty (core_addr (&array[11]), core_addr (&array[13]), val2);
+  CHECK_ADDRMAP_FIND (map, array, 0, 9, nullptr);
+  CHECK_ADDRMAP_FIND (map, array, 10, 12, val1);
+  CHECK_ADDRMAP_FIND (map, array, 13, 13, val2);
+  CHECK_ADDRMAP_FIND (map, array, 14, 19, nullptr);
+}
+
+} // namespace selftests
+#endif /* GDB_SELF_TEST */
 
-  return (struct addrmap *) map;
+void _initialize_addrmap ();
+void
+_initialize_addrmap ()
+{
+#if GDB_SELF_TEST
+  selftests::register_test ("addrmap", selftests::test_addrmap);
+#endif /* GDB_SELF_TEST */
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/addrmap.h ./gdb/addrmap.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/addrmap.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/addrmap.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* addrmap.h --- interface to address map data structure.
 
-   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,6 +20,9 @@
 #ifndef ADDRMAP_H
 #define ADDRMAP_H
 
+#include "splay-tree.h"
+#include "gdbsupport/function-view.h"
+
 /* An address map is essentially a table mapping CORE_ADDRs onto GDB
    data structures, like blocks, symtabs, partial symtabs, and so on.
    An address map uses memory proportional to the number of
@@ -29,77 +32,176 @@
    Address maps come in two flavors: fixed, and mutable.  Mutable
    address maps consume more memory, but can be changed and extended.
    A fixed address map, once constructed (from a mutable address map),
-   can't be edited.  Both kinds of map are allocated in obstacks.  */
-
-/* The opaque type representing address maps.  */
-struct addrmap;
-
-/* Create a mutable address map which maps every address to NULL.
-   Allocate entries in OBSTACK.  */
-struct addrmap *addrmap_create_mutable (struct obstack *obstack);
-
-/* In the mutable address map MAP, associate the addresses from START
-   to END_INCLUSIVE that are currently associated with NULL with OBJ
-   instead.  Addresses mapped to an object other than NULL are left
-   unchanged.
-
-   As the name suggests, END_INCLUSIVE is also mapped to OBJ.  This
-   convention is unusual, but it allows callers to accurately specify
-   ranges that abut the top of the address space, and ranges that
-   cover the entire address space.
-
-   This operation seems a bit complicated for a primitive: if it's
-   needed, why not just have a simpler primitive operation that sets a
-   range to a value, wiping out whatever was there before, and then
-   let the caller construct more complicated operations from that,
-   along with some others for traversal?
-
-   It turns out this is the mutation operation we want to use all the
-   time, at least for now.  Our immediate use for address maps is to
-   represent lexical blocks whose address ranges are not contiguous.
-   We walk the tree of lexical blocks present in the debug info, and
-   only create 'struct block' objects after we've traversed all a
-   block's children.  If a lexical block declares no local variables
-   (and isn't the lexical block for a function's body), we omit it
-   from GDB's data structures entirely.
-
-   However, this means that we don't decide to create a block (and
-   thus record it in the address map) until after we've traversed its
-   children.  If we do decide to create the block, we do so at a time
-   when all its children have already been recorded in the map.  So
-   this operation --- change only those addresses left unset --- is
-   actually the operation we want to use every time.
-
-   It seems simpler to let the code which operates on the
-   representation directly deal with the hair of implementing these
-   semantics than to provide an interface which allows it to be
-   implemented efficiently, but doesn't reveal too much of the
-   representation.  */
-void addrmap_set_empty (struct addrmap *map,
-                        CORE_ADDR start, CORE_ADDR end_inclusive,
-                        void *obj);
-
-/* Return the object associated with ADDR in MAP.  */
-void *addrmap_find (struct addrmap *map, CORE_ADDR addr);
-
-/* Create a fixed address map which is a copy of the mutable address
-   map ORIGINAL.  Allocate entries in OBSTACK.  */
-struct addrmap *addrmap_create_fixed (struct addrmap *original,
-                                      struct obstack *obstack);
-
-/* Relocate all the addresses in MAP by OFFSET.  (This can be applied
-   to either mutable or immutable maps.)  */
-void addrmap_relocate (struct addrmap *map, CORE_ADDR offset);
+   can't be edited.  */
 
 /* The type of a function used to iterate over the map.
    OBJ is NULL for unmapped regions.  */
-typedef int (*addrmap_foreach_fn) (void *data, CORE_ADDR start_addr,
-				   void *obj);
-
-/* Call FN, passing it DATA, for every address in MAP, following an
-   in-order traversal.  If FN ever returns a non-zero value, the
-   iteration ceases immediately, and the value is returned.
-   Otherwise, this function returns 0.  */
-int addrmap_foreach (struct addrmap *map, addrmap_foreach_fn fn, void *data);
+using addrmap_foreach_fn
+  = gdb::function_view<int (CORE_ADDR start_addr, void *obj)>;
+using addrmap_foreach_const_fn
+  = gdb::function_view<int (CORE_ADDR start_addr, const void *obj)>;
+
+/* The base class for addrmaps.  */
+struct addrmap
+{
+  virtual ~addrmap () = default;
+
+  /* Return the object associated with ADDR in MAP.  */
+  const void *find (CORE_ADDR addr) const
+  { return this->do_find (addr); }
+
+  void *find (CORE_ADDR addr)
+  { return this->do_find (addr); }
+
+  /* Relocate all the addresses in MAP by OFFSET.  (This can be applied
+     to either mutable or immutable maps.)  */
+  virtual void relocate (CORE_ADDR offset) = 0;
+
+  /* Call FN for every address in MAP, following an in-order traversal.
+     If FN ever returns a non-zero value, the iteration ceases
+     immediately, and the value is returned.  Otherwise, this function
+     returns 0.  */
+  int foreach (addrmap_foreach_const_fn fn) const
+  { return this->do_foreach (fn); }
+
+  int foreach (addrmap_foreach_fn fn)
+  { return this->do_foreach (fn); }
+
+
+private:
+  /* Worker for find, implemented by sub-classes.  */
+  virtual void *do_find (CORE_ADDR addr) const = 0;
+
+  /* Worker for foreach, implemented by sub-classes.  */
+  virtual int do_foreach (addrmap_foreach_fn fn) const = 0;
+};
+
+struct addrmap_mutable;
+
+/* Fixed address maps.  */
+struct addrmap_fixed : public addrmap,
+		       public allocate_on_obstack
+{
+public:
+
+  addrmap_fixed (struct obstack *obstack, addrmap_mutable *mut);
+  DISABLE_COPY_AND_ASSIGN (addrmap_fixed);
+
+  void relocate (CORE_ADDR offset) override;
+
+private:
+  void *do_find (CORE_ADDR addr) const override;
+  int do_foreach (addrmap_foreach_fn fn) const override;
+
+  /* A transition: a point in an address map where the value changes.
+     The map maps ADDR to VALUE, but if ADDR > 0, it maps ADDR-1 to
+     something else.  */
+  struct addrmap_transition
+  {
+    CORE_ADDR addr;
+    void *value;
+  };
+
+  /* The number of transitions in TRANSITIONS.  */
+  size_t num_transitions;
+
+  /* An array of transitions, sorted by address.  For every point in
+     the map where either ADDR == 0 or ADDR is mapped to one value and
+     ADDR - 1 is mapped to something different, we have an entry here
+     containing ADDR and VALUE.  (Note that this means we always have
+     an entry for address 0).  */
+  struct addrmap_transition *transitions;
+};
+
+/* Mutable address maps.  */
+
+struct addrmap_mutable : public addrmap
+{
+public:
+
+  addrmap_mutable ();
+  ~addrmap_mutable ();
+  DISABLE_COPY_AND_ASSIGN (addrmap_mutable);
+
+  /* In the mutable address map MAP, associate the addresses from START
+     to END_INCLUSIVE that are currently associated with NULL with OBJ
+     instead.  Addresses mapped to an object other than NULL are left
+     unchanged.
+
+     As the name suggests, END_INCLUSIVE is also mapped to OBJ.  This
+     convention is unusual, but it allows callers to accurately specify
+     ranges that abut the top of the address space, and ranges that
+     cover the entire address space.
+
+     This operation seems a bit complicated for a primitive: if it's
+     needed, why not just have a simpler primitive operation that sets a
+     range to a value, wiping out whatever was there before, and then
+     let the caller construct more complicated operations from that,
+     along with some others for traversal?
+
+     It turns out this is the mutation operation we want to use all the
+     time, at least for now.  Our immediate use for address maps is to
+     represent lexical blocks whose address ranges are not contiguous.
+     We walk the tree of lexical blocks present in the debug info, and
+     only create 'struct block' objects after we've traversed all a
+     block's children.  If a lexical block declares no local variables
+     (and isn't the lexical block for a function's body), we omit it
+     from GDB's data structures entirely.
+
+     However, this means that we don't decide to create a block (and
+     thus record it in the address map) until after we've traversed its
+     children.  If we do decide to create the block, we do so at a time
+     when all its children have already been recorded in the map.  So
+     this operation --- change only those addresses left unset --- is
+     actually the operation we want to use every time.
+
+     It seems simpler to let the code which operates on the
+     representation directly deal with the hair of implementing these
+     semantics than to provide an interface which allows it to be
+     implemented efficiently, but doesn't reveal too much of the
+     representation.  */
+  void set_empty (CORE_ADDR start, CORE_ADDR end_inclusive,
+		  void *obj);
+  void relocate (CORE_ADDR offset) override;
+
+private:
+  void *do_find (CORE_ADDR addr) const override;
+  int do_foreach (addrmap_foreach_fn fn) const override;
+
+  /* A splay tree, with a node for each transition; there is a
+     transition at address T if T-1 and T map to different objects.
+
+     Any addresses below the first node map to NULL.  (Unlike
+     fixed maps, we have no entry at (CORE_ADDR) 0; it doesn't 
+     simplify enough.)
+
+     The last region is assumed to end at CORE_ADDR_MAX.
+
+     Since we can't know whether CORE_ADDR is larger or smaller than
+     splay_tree_key (unsigned long) --- I think both are possible,
+     given all combinations of 32- and 64-bit hosts and targets ---
+     our keys are pointers to CORE_ADDR values.  Since the splay tree
+     library doesn't pass any closure pointer to the key free
+     function, we can't keep a freelist for keys.  Since mutable
+     addrmaps are only used temporarily right now, we just leak keys
+     from deleted nodes; they'll be freed when the obstack is freed.  */
+  splay_tree tree;
+
+  /* Various helper methods.  */
+  splay_tree_key allocate_key (CORE_ADDR addr);
+  void force_transition (CORE_ADDR addr);
+  splay_tree_node splay_tree_lookup (CORE_ADDR addr) const;
+  splay_tree_node splay_tree_predecessor (CORE_ADDR addr) const;
+  splay_tree_node splay_tree_successor (CORE_ADDR addr);
+  void splay_tree_remove (CORE_ADDR addr);
+  void splay_tree_insert (CORE_ADDR key, void *value);
+};
+
+
+/* Dump the addrmap to OUTFILE.  If PAYLOAD is non-NULL, only dump any
+   components that map to PAYLOAD.  (If PAYLOAD is NULL, the entire
+   map is dumped.)  */
+void addrmap_dump (struct addrmap *map, struct ui_file *outfile,
+		   void *payload);
 
 #endif /* ADDRMAP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/agent.c ./gdb/agent.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/agent.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/agent.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2012-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,7 +27,7 @@
 
 static const char can_use_agent_on[] = "on";
 static const char can_use_agent_off[] = "off";
-static const char *can_use_agent_enum[] =
+static const char * const can_use_agent_enum[] =
 {
   can_use_agent_on,
   can_use_agent_off,
@@ -40,9 +40,9 @@ static void
 show_can_use_agent (struct ui_file *file, int from_tty,
 		    struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file,
-		    _("Debugger's willingness to use agent in inferior "
-		      "as a helper is %s.\n"), value);
+  gdb_printf (file,
+	      _("Debugger's willingness to use agent in inferior "
+		"as a helper is %s.\n"), value);
 }
 
 static void
@@ -52,7 +52,7 @@ set_can_use_agent (const char *args, int
   if (can_use && !agent_loaded_p ())
     {
       /* Since the setting was off, we may not have observed the objfiles and
-         therefore not looked up the required symbols.  Do so now.  */
+	 therefore not looked up the required symbols.  Do so now.  */
       for (objfile *objfile : current_program_space->objfiles ())
 	if (agent_look_up_symbols (objfile) == 0)
 	  break;
@@ -65,7 +65,7 @@ set_can_use_agent (const char *args, int
 static void
 agent_new_objfile (struct objfile *objfile)
 {
-  if (objfile == NULL || agent_loaded_p ())
+  if (agent_loaded_p ())
     return;
 
   if (can_use_agent == can_use_agent_off)
@@ -74,10 +74,12 @@ agent_new_objfile (struct objfile *objfi
   agent_look_up_symbols (objfile);
 }
 
+void _initialize_agent ();
 void
-_initialize_agent (void)
+_initialize_agent ()
 {
-  gdb::observers::new_objfile.attach (agent_new_objfile);
+  gdb::observers::new_objfile.attach (agent_new_objfile,
+				      "agent");
 
   add_setshow_enum_cmd ("agent", class_run,
 			can_use_agent_enum,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aix-thread.c ./gdb/aix-thread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/aix-thread.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/aix-thread.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Low level interface for debugging AIX 4.3+ pthreads.
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Written by Nick Duffek <nsd@redhat.com>.
 
    This file is part of GDB.
@@ -68,15 +68,6 @@ static bool debug_aix_thread;
 #define pthdb_tid_t	tid_t
 #endif
 
-/* Return whether to treat PID as a debuggable thread id.  */
-
-#define PD_TID(ptid)	(pd_active && ptid.tid () != 0)
-
-/* pthdb_user_t value that we pass to pthdb functions.  0 causes
-   PTHDB_BAD_USER errors, so use 1.  */
-
-#define PD_USER	1
-
 /* Success and failure values returned by pthdb callbacks.  */
 
 #define PDC_SUCCESS	PTHDB_SUCCESS
@@ -95,7 +86,7 @@ struct aix_thread_info : public private_
 static aix_thread_info *
 get_aix_thread_info (thread_info *thread)
 {
-  return static_cast<aix_thread_info *> (thread->priv.get ());
+  return gdb::checked_static_cast<aix_thread_info *> (thread->priv.get ());
 }
 
 /* Information about a thread of which libpthdebug is aware.  */
@@ -124,7 +115,7 @@ public:
 
   void detach (inferior *, int) override;
   void resume (ptid_t, int, enum gdb_signal) override;
-  ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
+  ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
 
   void fetch_registers (struct regcache *, int) override;
   void store_registers (struct regcache *, int) override;
@@ -144,29 +135,13 @@ public:
 
   const char *extra_thread_info (struct thread_info *) override;
 
-  ptid_t get_ada_task_ptid (long lwp, long thread) override;
+  ptid_t get_ada_task_ptid (long lwp, ULONGEST thread) override;
+
+  void update_thread_list () override;
 };
 
 static aix_thread_target aix_thread_ops;
 
-/* Address of the function that libpthread will call when libpthdebug
-   is ready to be initialized.  */
-
-static CORE_ADDR pd_brk_addr;
-
-/* Whether the current application is debuggable by pthdb.  */
-
-static int pd_able = 0;
-
-/* Whether a threaded application is being debugged.  */
-
-static int pd_active = 0;
-
-/* Whether the current architecture is 64-bit.  
-   Only valid when pd_able is true.  */
-
-static int arch64;
-
 /* Forward declarations for pthdb callbacks.  */
 
 static int pdc_symbol_addrs (pthdb_user_t, pthdb_symbol_t *, int);
@@ -196,9 +171,66 @@ static pthdb_callbacks_t pd_callbacks =
   NULL
 };
 
-/* Current pthdb session.  */
+/* Aix variable structure.  */
+struct aix_thread_variables
+{
+  /* Whether the current application is debuggable by pthdb.  */
+  int pd_able;
+
+  /* Whether a threaded application is being debugged.  */
+  int pd_active;
+
+  /* Current pthdb session.  */
+  pthdb_session_t pd_session;
+
+  /* Address of the function that libpthread will call when libpthdebug
+   is ready to be initialized.  */
+  CORE_ADDR pd_brk_addr;
+
+  /* Whether the current architecture is 64-bit.
+   Only valid when pd_able is true.  */
+  int arch64;
+};
+
+/* Key to our per-inferior data.  */
+static const registry<inferior>::key<aix_thread_variables>
+  aix_thread_variables_handle;
+
+/* Function to Get aix_thread_variables data.  */
+static struct aix_thread_variables*
+get_aix_thread_variables_data (struct inferior *inf)
+{
+  if (inf == NULL)
+    return NULL;
+
+  struct aix_thread_variables* data;
+
+  data = aix_thread_variables_handle.get (inf);
+  if (data == NULL)
+    data = aix_thread_variables_handle.emplace (inf);
+
+  return data;
+}
 
-static pthdb_session_t pd_session;
+/* Helper to get data for ptid in a function.  */
+
+static struct aix_thread_variables*
+get_thread_data_helper_for_ptid (ptid_t ptid)
+{
+  inferior *inf = find_inferior_ptid (current_inferior ()->process_target (),
+					ptid);
+  return get_aix_thread_variables_data (inf);
+}
+
+/* Helper to get data for pid in a function.  */
+
+static struct aix_thread_variables*
+get_thread_data_helper_for_pid (pid_t pid)
+{
+  inferior *inf = find_inferior_pid (current_inferior ()->process_target (),
+				     pid);
+  return get_aix_thread_variables_data (inf);
+}
 
 /* Return a printable representation of pthdebug function return
    STATUS.  */
@@ -266,12 +298,21 @@ ptrace_check (int req, int id, int ret)
       if (ret == -1 && errno == EPERM)
 	{
 	  if (debug_aix_thread)
-	    fprintf_unfiltered (gdb_stdlog, 
-				"ptrace (%d, %d) = %d (errno = %d)\n",
-				req, id, ret, errno);
+	    gdb_printf (gdb_stdlog, 
+			"ptrace (%d, %d) = %d (errno = %d)\n",
+			req, id, ret, errno);
 	  return ret == -1 ? 0 : 1;
 	}
-      break;
+	break;
+     case PTT_READ_VEC:
+     case PTT_READ_VSX:
+	if (debug_aix_thread)
+	  gdb_printf (gdb_stdlog,
+		      "ptrace (%d, %d) = %d (errno = %d)\n",
+		      req, id, ret, errno);
+	if (ret == -1)
+	  return -1;
+	break;
     }
   error (_("aix-thread: ptrace (%d, %d) returned %d (errno = %d %s)"),
 	 req, id, ret, errno, safe_strerror (errno));
@@ -323,7 +364,7 @@ pid_to_prc (ptid_t *ptidp)
   ptid_t ptid;
 
   ptid = *ptidp;
-  if (PD_TID (ptid))
+  if (ptid.tid () != 0)
     *ptidp = ptid_t (ptid.pid ());
 }
 
@@ -331,23 +372,23 @@ pid_to_prc (ptid_t *ptidp)
    the address of SYMBOLS[<i>].name.  */
 
 static int
-pdc_symbol_addrs (pthdb_user_t user, pthdb_symbol_t *symbols, int count)
+pdc_symbol_addrs (pthdb_user_t user_current_pid, pthdb_symbol_t *symbols, int count)
 {
   struct bound_minimal_symbol ms;
   int i;
   char *name;
 
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog,
-      "pdc_symbol_addrs (user = %ld, symbols = 0x%lx, count = %d)\n",
-      user, (long) symbols, count);
+    gdb_printf (gdb_stdlog,
+		"pdc_symbol_addrs (user_current_pid = %ld, symbols = 0x%lx, count = %d)\n",
+		user_current_pid, (long) symbols, count);
 
   for (i = 0; i < count; i++)
     {
       name = symbols[i].name;
       if (debug_aix_thread)
-	fprintf_unfiltered (gdb_stdlog, 
-			    "  symbols[%d].name = \"%s\"\n", i, name);
+	gdb_printf (gdb_stdlog, 
+		    "  symbols[%d].name = \"%s\"\n", i, name);
 
       if (!*name)
 	symbols[i].addr = 0;
@@ -357,17 +398,17 @@ pdc_symbol_addrs (pthdb_user_t user, pth
 	  if (ms.minsym == NULL)
 	    {
 	      if (debug_aix_thread)
-		fprintf_unfiltered (gdb_stdlog, " returning PDC_FAILURE\n");
+		gdb_printf (gdb_stdlog, " returning PDC_FAILURE\n");
 	      return PDC_FAILURE;
 	    }
-	  symbols[i].addr = BMSYMBOL_VALUE_ADDRESS (ms);
+	  symbols[i].addr = ms.value_address ();
 	}
       if (debug_aix_thread)
-	fprintf_unfiltered (gdb_stdlog, "  symbols[%d].addr = %s\n",
-			    i, hex_string (symbols[i].addr));
+	gdb_printf (gdb_stdlog, "  symbols[%d].addr = %s\n",
+		    i, hex_string (symbols[i].addr));
     }
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, " returning PDC_SUCCESS\n");
+    gdb_printf (gdb_stdlog, " returning PDC_SUCCESS\n");
   return PDC_SUCCESS;
 }
 
@@ -378,7 +419,7 @@ pdc_symbol_addrs (pthdb_user_t user, pth
    If successful return 0, else non-zero is returned.  */
 
 static int
-pdc_read_regs (pthdb_user_t user, 
+pdc_read_regs (pthdb_user_t user_current_pid,
 	       pthdb_tid_t tid,
 	       unsigned long long flags,
 	       pthdb_context_t *context)
@@ -394,15 +435,18 @@ pdc_read_regs (pthdb_user_t user,
   double fprs[ppc_num_fprs];
   struct ptxsprs sprs64;
   struct ptsprs sprs32;
-  
+  struct aix_thread_variables *data;
+
+  data = get_thread_data_helper_for_pid (user_current_pid);
+
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, "pdc_read_regs tid=%d flags=%s\n",
-                        (int) tid, hex_string (flags));
+    gdb_printf (gdb_stdlog, "pdc_read_regs tid=%d flags=%s\n",
+		(int) tid, hex_string (flags));
 
   /* General-purpose registers.  */
   if (flags & PTHDB_FLAG_GPRS)
     {
-      if (arch64)
+      if (data->arch64)
 	{
 	  if (!ptrace64aix (PTT_READ_GPRS, tid, 
 			    (unsigned long) gprs64, 0, NULL))
@@ -428,20 +472,56 @@ pdc_read_regs (pthdb_user_t user,
   /* Special-purpose registers.  */
   if (flags & PTHDB_FLAG_SPRS)
     {
-      if (arch64)
+      if (data->arch64)
 	{
 	  if (!ptrace64aix (PTT_READ_SPRS, tid, 
 			    (unsigned long) &sprs64, 0, NULL))
 	    memset (&sprs64, 0, sizeof (sprs64));
-      	  memcpy (&context->msr, &sprs64, sizeof(sprs64));
+	  memcpy (&context->msr, &sprs64, sizeof(sprs64));
 	}
       else
 	{
 	  if (!ptrace32 (PTT_READ_SPRS, tid, (uintptr_t) &sprs32, 0, NULL))
 	    memset (&sprs32, 0, sizeof (sprs32));
-      	  memcpy (&context->msr, &sprs32, sizeof(sprs32));
+	  memcpy (&context->msr, &sprs32, sizeof(sprs32));
 	}
     }  
+
+  /* vector registers.  */
+  __vmx_context_t vmx;
+  if (__power_vmx() && (flags & PTHDB_FLAG_REGS))
+    {
+      if (data->arch64)
+	{
+	  if (!ptrace64aix (PTT_READ_VEC, tid, (long long) &vmx, 0, 0))
+	    memset (&vmx, 0, sizeof (vmx));
+	  memcpy (&context->vmx, &vmx, sizeof(__vmx_context_t));
+	}
+      else
+	{
+	  if (!ptrace32 (PTT_READ_VEC, tid, (long long) &vmx, 0, 0))
+	    memset (&vmx, 0, sizeof (vmx));
+	   memcpy (&context->vmx, &vmx, sizeof(__vmx_context_t));
+	}
+    }
+
+  /* vsx registers.  */
+  __vsx_context_t vsx;
+  if (__power_vsx() && (flags & PTHDB_FLAG_REGS))
+    {
+      if (data->arch64)
+	{
+	  if (!ptrace64aix (PTT_READ_VSX, tid, (long long) &vsx, 0, 0))
+	    memset (&vsx, 0, sizeof (vsx));
+	  memcpy (&context->vsx, &vsx, sizeof(__vsx_context_t));
+	}
+      else
+	{
+	  if (!ptrace32 (PTT_READ_VSX, tid, (long long) &vsx, 0, 0))
+	    memset (&vsx, 0, sizeof (vsx));
+	  memcpy (&context->vsx, &vsx, sizeof(__vsx_context_t));
+	}
+    }
   return 0;
 }
 
@@ -450,7 +530,7 @@ pdc_read_regs (pthdb_user_t user,
    If successful return 0, else non-zero is returned.  */
 
 static int
-pdc_write_regs (pthdb_user_t user,
+pdc_write_regs (pthdb_user_t user_current_pid,
 		pthdb_tid_t tid,
 		unsigned long long flags,
 		pthdb_context_t *context)
@@ -461,14 +541,18 @@ pdc_write_regs (pthdb_user_t user,
      this is needed, I have implemented what I think it should do,
      however this code is untested.  */
 
+  struct aix_thread_variables *data;
+
+  data = get_thread_data_helper_for_pid (user_current_pid);
+
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, "pdc_write_regs tid=%d flags=%s\n",
-                        (int) tid, hex_string (flags));
+    gdb_printf (gdb_stdlog, "pdc_write_regs tid=%d flags=%s\n",
+		(int) tid, hex_string (flags));
 
   /* General-purpose registers.  */
   if (flags & PTHDB_FLAG_GPRS)
     {
-      if (arch64)
+      if (data->arch64)
 	ptrace64aix (PTT_WRITE_GPRS, tid, 
 		     (unsigned long) context->gpr, 0, NULL);
       else
@@ -484,7 +568,7 @@ pdc_write_regs (pthdb_user_t user,
   /* Special-purpose registers.  */
   if (flags & PTHDB_FLAG_SPRS)
     {
-      if (arch64)
+      if (data->arch64)
 	{
 	  ptrace64aix (PTT_WRITE_SPRS, tid, 
 		       (unsigned long) &context->msr, 0, NULL);
@@ -494,50 +578,81 @@ pdc_write_regs (pthdb_user_t user,
 	  ptrace32 (PTT_WRITE_SPRS, tid, (uintptr_t) &context->msr, 0, NULL);
 	}
     }
+
+  /* vector registers.  */
+  if (__power_vmx() && (flags & PTHDB_FLAG_REGS))
+    {
+      if (data->arch64)
+	ptrace64aix (PTT_WRITE_VEC, tid, (unsigned long) &context->vmx, 0, 0);
+      else
+	ptrace32 (PTT_WRITE_VEC, tid, (uintptr_t) &context->vmx, 0, 0);
+    }
+
+  /* vsx registers.  */
+  if (__power_vsx() && (flags & PTHDB_FLAG_REGS))
+    {
+      if (data->arch64)
+	ptrace64aix (PTT_WRITE_VSX, tid, (unsigned long) &context->vsx, 0, 0);
+      else
+	ptrace32 (PTT_WRITE_VSX, tid, (uintptr_t) &context->vsx, 0, 0);
+    }
   return 0;
 }
 
 /* pthdb callback: read LEN bytes from process ADDR into BUF.  */
 
 static int
-pdc_read_data (pthdb_user_t user, void *buf, 
+pdc_read_data (pthdb_user_t user_current_pid, void *buf,
 	       pthdb_addr_t addr, size_t len)
 {
   int status, ret;
+  inferior *inf = find_inferior_pid (current_inferior ()->process_target (),
+				     user_current_pid);
 
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog,
-      "pdc_read_data (user = %ld, buf = 0x%lx, addr = %s, len = %ld)\n",
-      user, (long) buf, hex_string (addr), len);
+    gdb_printf (gdb_stdlog,
+		"pdc_read_data (user_current_pid = %ld, buf = 0x%lx, addr = %s, len = %ld)\n",
+		user_current_pid, (long) buf, hex_string (addr), len);
 
-  status = target_read_memory (addr, (gdb_byte *) buf, len);
+  /* This is needed to eliminate the dependency of current thread
+     which is null so that thread reads the correct target memory.  */
+  {
+    scoped_restore_current_inferior_for_memory save_inferior (inf);
+    status = target_read_memory (addr, (gdb_byte *) buf, len);
+  }
   ret = status == 0 ? PDC_SUCCESS : PDC_FAILURE;
 
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, "  status=%d, returning %s\n",
-			status, pd_status2str (ret));
+    gdb_printf (gdb_stdlog, "  status=%d, returning %s\n",
+		status, pd_status2str (ret));
   return ret;
 }
 
 /* pthdb callback: write LEN bytes from BUF to process ADDR.  */
 
 static int
-pdc_write_data (pthdb_user_t user, void *buf, 
+pdc_write_data (pthdb_user_t user_current_pid, void *buf,
 		pthdb_addr_t addr, size_t len)
 {
   int status, ret;
+  inferior *inf = find_inferior_pid (current_inferior ()->process_target (),
+				     user_current_pid);
 
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog,
-      "pdc_write_data (user = %ld, buf = 0x%lx, addr = %s, len = %ld)\n",
-      user, (long) buf, hex_string (addr), len);
+    gdb_printf (gdb_stdlog,
+		"pdc_write_data (user_current_pid = %ld, buf = 0x%lx, addr = %s, len = %ld)\n",
+		user_current_pid, (long) buf, hex_string (addr), len);
+
+  {
+    scoped_restore_current_inferior_for_memory save_inferior (inf);
+    status = target_write_memory (addr, (gdb_byte *) buf, len);
+  }
 
-  status = target_write_memory (addr, (gdb_byte *) buf, len);
   ret = status == 0 ? PDC_SUCCESS : PDC_FAILURE;
 
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, "  status=%d, returning %s\n", status,
-			pd_status2str (ret));
+    gdb_printf (gdb_stdlog, "  status=%d, returning %s\n", status,
+		pd_status2str (ret));
   return ret;
 }
 
@@ -545,16 +660,16 @@ pdc_write_data (pthdb_user_t user, void
    in BUFP.  */
 
 static int
-pdc_alloc (pthdb_user_t user, size_t len, void **bufp)
+pdc_alloc (pthdb_user_t user_current_pid, size_t len, void **bufp)
 {
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog,
-                        "pdc_alloc (user = %ld, len = %ld, bufp = 0x%lx)\n",
-			user, len, (long) bufp);
+    gdb_printf (gdb_stdlog,
+		"pdc_alloc (user_current_pid = %ld, len = %ld, bufp = 0x%lx)\n",
+		user_current_pid, len, (long) bufp);
   *bufp = xmalloc (len);
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, 
-			"  malloc returned 0x%lx\n", (long) *bufp);
+    gdb_printf (gdb_stdlog, 
+		"  malloc returned 0x%lx\n", (long) *bufp);
 
   /* Note: xmalloc() can't return 0; therefore PDC_FAILURE will never
      be returned.  */
@@ -567,16 +682,16 @@ pdc_alloc (pthdb_user_t user, size_t len
    pointer to the result in BUFP.  */
 
 static int
-pdc_realloc (pthdb_user_t user, void *buf, size_t len, void **bufp)
+pdc_realloc (pthdb_user_t user_current_pid, void *buf, size_t len, void **bufp)
 {
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog,
-      "pdc_realloc (user = %ld, buf = 0x%lx, len = %ld, bufp = 0x%lx)\n",
-      user, (long) buf, len, (long) bufp);
+    gdb_printf (gdb_stdlog,
+		"pdc_realloc (user_current_pid = %ld, buf = 0x%lx, len = %ld, bufp = 0x%lx)\n",
+		user_current_pid, (long) buf, len, (long) bufp);
   *bufp = xrealloc (buf, len);
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, 
-			"  realloc returned 0x%lx\n", (long) *bufp);
+    gdb_printf (gdb_stdlog, 
+		"  realloc returned 0x%lx\n", (long) *bufp);
   return *bufp ? PDC_SUCCESS : PDC_FAILURE;
 }
 
@@ -584,12 +699,12 @@ pdc_realloc (pthdb_user_t user, void *bu
    realloc callback.  */
 
 static int
-pdc_dealloc (pthdb_user_t user, void *buf)
+pdc_dealloc (pthdb_user_t user_current_pid, void *buf)
 {
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, 
-			"pdc_free (user = %ld, buf = 0x%lx)\n", user,
-                        (long) buf);
+    gdb_printf (gdb_stdlog, 
+		"pdc_free (user_current_pid = %ld, buf = 0x%lx)\n", user_current_pid,
+		(long) buf);
   xfree (buf);
   return PDC_SUCCESS;
 }
@@ -632,39 +747,6 @@ pcmp (const void *p1v, const void *p2v)
   return p1->pthid < p2->pthid ? -1 : p1->pthid > p2->pthid;
 }
 
-/* iterate_over_threads() callback for counting GDB threads.
-
-   Do not count the main thread (whose tid is zero).  This matches
-   the list of threads provided by the pthreaddebug library, which
-   does not include that main thread either, and thus allows us
-   to compare the two lists.  */
-
-static int
-giter_count (struct thread_info *thread, void *countp)
-{
-  if (PD_TID (thread->ptid))
-    (*(int *) countp)++;
-  return 0;
-}
-
-/* iterate_over_threads() callback for accumulating GDB thread pids.
-
-   Do not include the main thread (whose tid is zero).  This matches
-   the list of threads provided by the pthreaddebug library, which
-   does not include that main thread either, and thus allows us
-   to compare the two lists.  */
-
-static int
-giter_accum (struct thread_info *thread, void *bufp)
-{
-  if (PD_TID (thread->ptid))
-    {
-      **(struct thread_info ***) bufp = thread;
-      (*(struct thread_info ***) bufp)++;
-    }
-  return 0;
-}
-
 /* ptid comparison function */
 
 static int
@@ -701,20 +783,23 @@ gcmp (const void *t1v, const void *t2v)
    Return 0 if none found.  */
 
 static pthdb_tid_t
-get_signaled_thread (void)
+get_signaled_thread (int pid)
 {
   struct thrdsinfo64 thrinf;
   tid_t ktid = 0;
 
   while (1)
-  {
-    if (getthrds (inferior_ptid.pid (), &thrinf, 
-          	  sizeof (thrinf), &ktid, 1) != 1)
-      break;
+    {
+      if (getthrds (pid, &thrinf,
+		    sizeof (thrinf), &ktid, 1) != 1)
+	break;
 
-    if (thrinf.ti_cursig == SIGTRAP)
-      return thrinf.ti_tid;
-  }
+      /* We also need to keep in mind Trap and interrupt or any
+	 signal that needs to be handled in pd_update ().  */
+
+      if (thrinf.ti_cursig)
+	return thrinf.ti_tid;
+    }
 
   /* Didn't find any thread stopped on a SIGTRAP signal.  */
   return 0;
@@ -734,15 +819,18 @@ get_signaled_thread (void)
        have difficulty with certain call patterns */
 
 static void
-sync_threadlists (void)
+sync_threadlists (pid_t pid)
 {
-  int cmd, status, infpid;
+  int cmd, status;
   int pcount, psize, pi, gcount, gi;
   struct pd_thread *pbuf;
   struct thread_info **gbuf, **g, *thread;
   pthdb_pthread_t pdtid;
   pthread_t pthid;
   pthdb_tid_t tid;
+  process_stratum_target *proc_target = current_inferior ()->process_target ();
+  struct aix_thread_variables *data;
+  data = get_thread_data_helper_for_pid (pid);
 
   /* Accumulate an array of libpthdebug threads sorted by pthread id.  */
 
@@ -752,11 +840,11 @@ sync_threadlists (void)
 
   for (cmd = PTHDB_LIST_FIRST;; cmd = PTHDB_LIST_NEXT)
     {
-      status = pthdb_pthread (pd_session, &pdtid, cmd);
+      status = pthdb_pthread (data->pd_session, &pdtid, cmd);
       if (status != PTHDB_SUCCESS || pdtid == PTHDB_INVALID_PTHREAD)
 	break;
 
-      status = pthdb_pthread_ptid (pd_session, pdtid, &pthid);
+      status = pthdb_pthread_ptid (data->pd_session, pdtid, &pthid);
       if (status != PTHDB_SUCCESS || pthid == PTHDB_INVALID_PTID)
 	continue;
 
@@ -773,7 +861,7 @@ sync_threadlists (void)
 
   for (pi = 0; pi < pcount; pi++)
     {
-      status = pthdb_pthread_tid (pd_session, pbuf[pi].pdtid, &tid);
+      status = pthdb_pthread_tid (data->pd_session, pbuf[pi].pdtid, &tid);
       if (status != PTHDB_SUCCESS)
 	tid = PTHDB_INVALID_TID;
       pbuf[pi].tid = tid;
@@ -783,15 +871,18 @@ sync_threadlists (void)
 
   /* Accumulate an array of GDB threads sorted by pid.  */
 
+  /* gcount is GDB thread count and pcount is pthreadlib thread count.  */
+
   gcount = 0;
-  iterate_over_threads (giter_count, &gcount);
+  for (thread_info *tp : all_threads (proc_target, ptid_t (pid)))
+    gcount++;
   g = gbuf = XNEWVEC (struct thread_info *, gcount);
-  iterate_over_threads (giter_accum, &g);
+  for (thread_info *tp : all_threads (proc_target, ptid_t (pid)))
+    *g++ = tp;
   qsort (gbuf, gcount, sizeof *gbuf, gcmp);
 
   /* Apply differences between the two arrays to GDB's thread list.  */
 
-  infpid = inferior_ptid.pid ();
   for (pi = gi = 0; pi < pcount || gi < gcount;)
     {
       if (pi == pcount)
@@ -805,7 +896,9 @@ sync_threadlists (void)
 	  priv->pdtid = pbuf[pi].pdtid;
 	  priv->tid = pbuf[pi].tid;
 
-	  thread = add_thread_with_info (ptid_t (infpid, 0, pbuf[pi].pthid), priv);
+	  thread = add_thread_with_info (proc_target,
+					 ptid_t (pid, 0, pbuf[pi].pthid),
+					 private_thread_info_up (priv));
 
 	  pi++;
 	}
@@ -814,7 +907,7 @@ sync_threadlists (void)
 	  ptid_t pptid, gptid;
 	  int cmp_result;
 
-	  pptid = ptid_t (infpid, 0, pbuf[pi].pthid);
+	  pptid = ptid_t (pid, 0, pbuf[pi].pthid);
 	  gptid = gbuf[gi]->ptid;
 	  pdtid = pbuf[pi].pdtid;
 	  tid = pbuf[pi].tid;
@@ -832,12 +925,29 @@ sync_threadlists (void)
 	    }
 	  else if (cmp_result > 0)
 	    {
-	      delete_thread (gbuf[gi]);
-	      gi++;
+	      /* This is to make the main process thread now look
+		 like a thread.  */
+
+	      if (gptid.is_pid ())
+		{
+		  thread_info *tp = proc_target->find_thread (gptid);
+		  thread_change_ptid (proc_target, gptid, pptid);
+		  aix_thread_info *priv = new aix_thread_info;
+		  priv->pdtid = pbuf[pi].pdtid;
+		  priv->tid = pbuf[pi].tid;
+		  tp->priv.reset (priv);
+		  gi++;
+		  pi++;
+		}
+	      else
+		{
+		  delete_thread (gbuf[gi]);
+		  gi++;
+		}
 	    }
 	  else
 	    {
-	      thread = add_thread (pptid);
+	      thread = add_thread (proc_target, pptid);
 
 	      aix_thread_info *priv = new aix_thread_info;
 	      thread->priv.reset (priv);
@@ -866,94 +976,101 @@ iter_tid (struct thread_info *thread, vo
 
 /* Synchronize libpthdebug's state with the inferior and with GDB,
    generate a composite process/thread <pid> for the current thread,
-   set inferior_ptid to <pid> if SET_INFPID, and return <pid>.  */
+   Return the ptid of the event thread if one can be found, else
+   return a pid-only ptid with PID.  */
 
 static ptid_t
-pd_update (int set_infpid)
+pd_update (pid_t pid)
 {
   int status;
   ptid_t ptid;
   pthdb_tid_t tid;
   struct thread_info *thread = NULL;
+  struct aix_thread_variables *data;
+
+  data = get_thread_data_helper_for_pid (pid);
 
-  if (!pd_active)
-    return inferior_ptid;
+  if (!data->pd_active)
+    return ptid_t (pid);
 
-  status = pthdb_session_update (pd_session);
+  status = pthdb_session_update (data->pd_session);
   if (status != PTHDB_SUCCESS)
-    return inferior_ptid;
+    return ptid_t (pid);
 
-  sync_threadlists ();
+  sync_threadlists (pid);
 
   /* Define "current thread" as one that just received a trap signal.  */
 
-  tid = get_signaled_thread ();
+  tid = get_signaled_thread (pid);
   if (tid != 0)
     thread = iterate_over_threads (iter_tid, &tid);
   if (!thread)
-    ptid = inferior_ptid;
+    ptid = ptid_t (pid);
   else
-    {
-      ptid = thread->ptid;
-      if (set_infpid)
-	inferior_ptid = ptid;
-    }
+    ptid = thread->ptid;
+
   return ptid;
 }
 
 /* Try to start debugging threads in the current process.
-   If successful and SET_INFPID, set inferior_ptid to reflect the
-   current thread.  */
+   If successful and there exists and we can find an event thread, return a ptid
+   for that thread.  Otherwise, return a ptid-only ptid using PID.  */
 
-static ptid_t
-pd_activate (int set_infpid)
+static void
+pd_activate (pid_t pid)
 {
   int status;
-		
-  status = pthdb_session_init (PD_USER, arch64 ? PEM_64BIT : PEM_32BIT,
-			       PTHDB_FLAG_REGS, &pd_callbacks, 
-			       &pd_session);
-  if (status != PTHDB_SUCCESS)
-    {
-      return inferior_ptid;
-    }
-  pd_active = 1;
-  return pd_update (set_infpid);
+  struct aix_thread_variables *data;
+  data = get_thread_data_helper_for_pid (pid);
+
+  status = pthdb_session_init (pid, data->arch64 ? PEM_64BIT : PEM_32BIT,
+			       PTHDB_FLAG_REGS, &pd_callbacks,
+			       &data->pd_session);
+  if (status == PTHDB_SUCCESS)
+    data->pd_active = 1;
 }
 
-/* Undo the effects of pd_activate().  */
+/* AIX implementation of update_thread_list.  */
 
-static void
-pd_deactivate (void)
+void
+aix_thread_target::update_thread_list ()
 {
-  if (!pd_active)
-    return;
-  pthdb_session_destroy (pd_session);
-  
-  pid_to_prc (&inferior_ptid);
-  pd_active = 0;
+  for (inferior *inf : all_inferiors ())
+    {
+      if (inf->pid == 0)
+	continue;
+
+      pd_update (inf->pid);
+    }
 }
 
+
 /* An object file has just been loaded.  Check whether the current
    application is pthreaded, and if so, prepare for thread debugging.  */
 
 static void
-pd_enable (void)
+pd_enable (inferior *inf)
 {
   int status;
   char *stub_name;
   struct bound_minimal_symbol ms;
+  struct aix_thread_variables *data;
+
+  if (inf == NULL)
+    return;
+
+  data = get_aix_thread_variables_data (inf);
 
   /* Don't initialize twice.  */
-  if (pd_able)
+  if (data->pd_able)
     return;
 
   /* Check application word size.  */
-  arch64 = register_size (target_gdbarch (), 0) == 8;
+  data->arch64 = register_size (current_inferior ()->arch (), 0) == 8;
 
   /* Check whether the application is pthreaded.  */
   stub_name = NULL;
-  status = pthdb_session_pthreaded (PD_USER, PTHDB_FLAG_REGS,
+  status = pthdb_session_pthreaded (inf->pid, PTHDB_FLAG_REGS,
 				    &pd_callbacks, &stub_name);
   if ((status != PTHDB_SUCCESS
        && status != PTHDB_NOT_PTHREADED) || !stub_name)
@@ -963,55 +1080,58 @@ pd_enable (void)
   ms = lookup_minimal_symbol (stub_name, NULL, NULL);
   if (ms.minsym == NULL)
     return;
-  pd_brk_addr = BMSYMBOL_VALUE_ADDRESS (ms);
-  if (!create_thread_event_breakpoint (target_gdbarch (), pd_brk_addr))
+  data->pd_brk_addr = ms.value_address ();
+  if (!create_thread_event_breakpoint (current_inferior ()->arch (),
+				       data->pd_brk_addr))
     return;
 
   /* Prepare for thread debugging.  */
-  push_target (&aix_thread_ops);
-  pd_able = 1;
+  current_inferior ()->push_target (&aix_thread_ops);
+  data->pd_able = 1;
 
   /* If we're debugging a core file or an attached inferior, the
      pthread library may already have been initialized, so try to
      activate thread debugging.  */
-  pd_activate (1);
+  pd_activate (inf->pid);
 }
 
 /* Undo the effects of pd_enable().  */
 
 static void
-pd_disable (void)
+pd_disable (inferior *inf)
 {
-  if (!pd_able)
+  struct aix_thread_variables *data;
+  data = get_aix_thread_variables_data (inf);
+
+  if (!data->pd_able)
     return;
-  if (pd_active)
-    pd_deactivate ();
-  pd_able = 0;
-  unpush_target (&aix_thread_ops);
+  if (!data->pd_active)
+    return;
+  pthdb_session_destroy (data->pd_session);
+
+  pid_to_prc (&inferior_ptid);
+  data->pd_active = 0;
+  data->pd_able = 0;
+  current_inferior ()->unpush_target (&aix_thread_ops);
 }
 
 /* new_objfile observer callback.
 
-   If OBJFILE is non-null, check whether a threaded application is
-   being debugged, and if so, prepare for thread debugging.
-
-   If OBJFILE is null, stop debugging threads.  */
+   Check whether a threaded application is being debugged, and if so, prepare
+   for thread debugging.  */
 
 static void
 new_objfile (struct objfile *objfile)
 {
-  if (objfile)
-    pd_enable ();
-  else
-    pd_disable ();
+  pd_enable (current_inferior ());
 }
 
 /* Attach to process specified by ARGS.  */
 
 static void
-aix_thread_inferior_created (struct target_ops *ops, int from_tty)
+aix_thread_inferior_created (inferior *inf)
 {
-  pd_enable ();
+  pd_enable (inf);
 }
 
 /* Detach from the process attached to by aix_thread_attach().  */
@@ -1021,7 +1141,7 @@ aix_thread_target::detach (inferior *inf
 {
   target_ops *beneath = this->beneath ();
 
-  pd_disable ();
+  pd_disable (inf);
   beneath->detach (inf, from_tty);
 }
 
@@ -1033,17 +1153,20 @@ aix_thread_target::resume (ptid_t ptid,
 {
   struct thread_info *thread;
   pthdb_tid_t tid[2];
+  struct aix_thread_variables *data;
+
+  data = get_thread_data_helper_for_ptid (ptid);
 
-  if (!PD_TID (ptid))
+  if (ptid.tid () == 0)
     {
       scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
-      
+
       inferior_ptid = ptid_t (inferior_ptid.pid ());
       beneath ()->resume (ptid, step, sig);
     }
   else
     {
-      thread = find_thread_ptid (ptid);
+      thread = current_inferior ()->find_thread (ptid);
       if (!thread)
 	error (_("aix-thread resume: unknown pthread %ld"),
 	       ptid.lwp ());
@@ -1056,7 +1179,7 @@ aix_thread_target::resume (ptid_t ptid,
 	       ptid.lwp ());
       tid[1] = 0;
 
-      if (arch64)
+      if (data->arch64)
 	ptrace64aix (PTT_CONTINUE, tid[0], (long long) 1,
 		     gdb_signal_to_host (sig), (PTRACE_TYPE_ARG5) tid);
       else
@@ -1071,33 +1194,68 @@ aix_thread_target::resume (ptid_t ptid,
 
 ptid_t
 aix_thread_target::wait (ptid_t ptid, struct target_waitstatus *status,
-			 int options)
+			 target_wait_flags options)
 {
+  struct aix_thread_variables *data;
   {
-    scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
-
     pid_to_prc (&ptid);
 
-    inferior_ptid = ptid_t (inferior_ptid.pid ());
     ptid = beneath ()->wait (ptid, status, options);
   }
 
   if (ptid.pid () == -1)
     return ptid_t (-1);
 
+  /* The target beneath does not deal with threads, so it should only return
+     pid-only ptids.  */
+  gdb_assert (ptid.is_pid ());
+
+  data = get_thread_data_helper_for_ptid (ptid);
+
   /* Check whether libpthdebug might be ready to be initialized.  */
-  if (!pd_active && status->kind == TARGET_WAITKIND_STOPPED
-      && status->value.sig == GDB_SIGNAL_TRAP)
+  if (!data->pd_active && status->kind () == TARGET_WAITKIND_STOPPED
+      && status->sig () == GDB_SIGNAL_TRAP)
     {
-      struct regcache *regcache = get_thread_regcache (ptid);
+      process_stratum_target *proc_target
+	= current_inferior ()->process_target ();
+      struct regcache *regcache = get_thread_regcache (proc_target, ptid);
       struct gdbarch *gdbarch = regcache->arch ();
 
       if (regcache_read_pc (regcache)
-	  - gdbarch_decr_pc_after_break (gdbarch) == pd_brk_addr)
-	return pd_activate (0);
+	  - gdbarch_decr_pc_after_break (gdbarch) == data->pd_brk_addr)
+	pd_activate (ptid.pid ());
     }
 
-  return pd_update (0);
+  return pd_update (ptid.pid ());
+}
+
+/* Supply AIX altivec registers, both 64 and 32 bit.  */
+
+static void 
+supply_altivec_regs (struct regcache *regcache, __vmx_context_t vmx)
+{
+  ppc_gdbarch_tdep *tdep
+    = gdbarch_tdep<ppc_gdbarch_tdep> (regcache->arch ());
+  int regno;
+  for (regno = 0; regno < ppc_num_vrs; regno++)
+    regcache->raw_supply (tdep->ppc_vr0_regnum + regno,
+			  &(vmx.__vr[regno]));
+  regcache->raw_supply (tdep->ppc_vrsave_regnum, &(vmx.__vrsave));
+  regcache->raw_supply (tdep->ppc_vrsave_regnum - 1, &(vmx.__vscr));
+}
+
+/* Supply AIX VSX registers, both 64 and 32 bit.  */
+
+static void
+supply_vsx_regs (struct regcache *regcache, __vsx_context_t vsx)
+{
+  ppc_gdbarch_tdep *tdep
+    = gdbarch_tdep<ppc_gdbarch_tdep> (regcache->arch ());
+  int regno;
+
+  for (regno = 0; regno < ppc_num_vshrs; regno++)
+    regcache->raw_supply (tdep->ppc_vsr0_upper_regnum + regno,
+			  &(vsx.__vsr_dw1[regno]));
 }
 
 /* Record that the 64-bit general-purpose registers contain VALS.  */
@@ -1105,7 +1263,8 @@ aix_thread_target::wait (ptid_t ptid, st
 static void
 supply_gprs64 (struct regcache *regcache, uint64_t *vals)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
+  ppc_gdbarch_tdep *tdep
+    = gdbarch_tdep<ppc_gdbarch_tdep> (regcache->arch ());
   int regno;
 
   for (regno = 0; regno < ppc_num_gprs; regno++)
@@ -1127,7 +1286,7 @@ static void
 supply_fprs (struct regcache *regcache, double *vals)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
   int regno;
 
   /* This function should never be called on architectures without
@@ -1145,7 +1304,7 @@ supply_fprs (struct regcache *regcache,
 static int
 special_register_p (struct gdbarch *gdbarch, int regno)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
 
   return regno == gdbarch_pc_regnum (gdbarch)
       || regno == tdep->ppc_ps_regnum
@@ -1168,7 +1327,7 @@ supply_sprs64 (struct regcache *regcache
 	       uint32_t fpscr)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
 
   regcache->raw_supply (gdbarch_pc_regnum (gdbarch), (char *) &iar);
   regcache->raw_supply (tdep->ppc_ps_regnum, (char *) &msr);
@@ -1190,7 +1349,7 @@ supply_sprs32 (struct regcache *regcache
 	       uint32_t fpscr)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
 
   regcache->raw_supply (gdbarch_pc_regnum (gdbarch), (char *) &iar);
   regcache->raw_supply (tdep->ppc_ps_regnum, (char *) &msr);
@@ -1213,21 +1372,23 @@ static void
 fetch_regs_user_thread (struct regcache *regcache, pthdb_pthread_t pdtid)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
   int status, i;
   pthdb_context_t ctx;
+  struct aix_thread_variables *data;
+  data = get_thread_data_helper_for_ptid (inferior_ptid);
 
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, 
-			"fetch_regs_user_thread %lx\n", (long) pdtid);
-  status = pthdb_pthread_context (pd_session, pdtid, &ctx);
+    gdb_printf (gdb_stdlog, 
+		"fetch_regs_user_thread %lx\n", (long) pdtid);
+  status = pthdb_pthread_context (data->pd_session, pdtid, &ctx);
   if (status != PTHDB_SUCCESS)
     error (_("aix-thread: fetch_registers: pthdb_pthread_context returned %s"),
-           pd_status2str (status));
+	   pd_status2str (status));
 
   /* General-purpose registers.  */
 
-  if (arch64)
+  if (data->arch64)
     supply_gprs64 (regcache, ctx.gpr);
   else
     for (i = 0; i < ppc_num_gprs; i++)
@@ -1240,12 +1401,18 @@ fetch_regs_user_thread (struct regcache
 
   /* Special registers.  */
 
-  if (arch64)
+  if (data->arch64)
     supply_sprs64 (regcache, ctx.iar, ctx.msr, ctx.cr, ctx.lr, ctx.ctr,
 			     ctx.xer, ctx.fpscr);
   else
     supply_sprs32 (regcache, ctx.iar, ctx.msr, ctx.cr, ctx.lr, ctx.ctr,
 			     ctx.xer, ctx.fpscr);
+
+  /* Altivec registers.  */
+  supply_altivec_regs (regcache, ctx.vmx);
+
+  /* VSX registers.  */
+  supply_vsx_regs (regcache, ctx.vsx);
 }
 
 /* Fetch register REGNO if != -1 or all registers otherwise from
@@ -1268,25 +1435,28 @@ fetch_regs_kernel_thread (struct regcach
 			  pthdb_tid_t tid)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
   uint64_t gprs64[ppc_num_gprs];
   uint32_t gprs32[ppc_num_gprs];
   double fprs[ppc_num_fprs];
   struct ptxsprs sprs64;
   struct ptsprs sprs32;
   int i;
+  struct aix_thread_variables *data;
+
+  data = get_thread_data_helper_for_ptid (regcache->ptid ());
 
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog,
-	"fetch_regs_kernel_thread tid=%lx regno=%d arch64=%d\n",
-	(long) tid, regno, arch64);
+    gdb_printf (gdb_stdlog,
+		"fetch_regs_kernel_thread tid=%lx regno=%d arch64=%d\n",
+		(long) tid, regno, data->arch64);
 
   /* General-purpose registers.  */
   if (regno == -1
       || (tdep->ppc_gp0_regnum <= regno
-          && regno < tdep->ppc_gp0_regnum + ppc_num_gprs))
+	  && regno < tdep->ppc_gp0_regnum + ppc_num_gprs))
     {
-      if (arch64)
+      if (data->arch64)
 	{
 	  if (!ptrace64aix (PTT_READ_GPRS, tid, 
 			    (unsigned long) gprs64, 0, NULL))
@@ -1302,12 +1472,44 @@ fetch_regs_kernel_thread (struct regcach
 	}
     }
 
+  /* vector registers.  */
+  if (tdep->ppc_vr0_regnum != -1)
+    {
+      int ret = 0;
+      __vmx_context_t vmx;
+      if (data->arch64)
+	ret = ptrace64aix (PTT_READ_VEC, tid, (long long) &vmx, 0, 0);
+      else
+	ret = ptrace32 (PTT_READ_VEC, tid, (uintptr_t) &vmx, 0, 0);
+      if (ret < 0)
+	memset(&vmx, 0, sizeof(__vmx_context_t));
+      for (i = 0; i < ppc_num_vrs; i++)
+	regcache->raw_supply (tdep->ppc_vr0_regnum + i, &(vmx.__vr[i]));
+      regcache->raw_supply (tdep->ppc_vrsave_regnum, &(vmx.__vrsave));
+      regcache->raw_supply (tdep->ppc_vrsave_regnum - 1, &(vmx.__vscr));
+    }
+
+  /* vsx registers.  */
+  if (tdep->ppc_vsr0_upper_regnum != -1)
+    {
+      __vsx_context_t vsx;
+      int ret = 0;
+      if (data->arch64)
+	ret = ptrace64aix (PTT_READ_VSX, tid, (long long) &vsx, 0, 0);
+      else
+	ret = ptrace32 (PTT_READ_VSX, tid, (long long) &vsx, 0, 0);
+      if (ret < 0)
+	memset(&vsx, 0, sizeof(__vsx_context_t));
+      for (i = 0; i < ppc_num_vshrs; i++)
+	regcache->raw_supply (tdep->ppc_vsr0_upper_regnum + i, &(vsx.__vsr_dw1[i]));
+    }
+
   /* Floating-point registers.  */
 
   if (ppc_floating_point_unit_p (gdbarch)
       && (regno == -1
-          || (regno >= tdep->ppc_fp0_regnum
-              && regno < tdep->ppc_fp0_regnum + ppc_num_fprs)))
+	  || (regno >= tdep->ppc_fp0_regnum
+	      && regno < tdep->ppc_fp0_regnum + ppc_num_fprs)))
     {
       if (!ptrace32 (PTT_READ_FPRS, tid, (uintptr_t) fprs, 0, NULL))
 	memset (fprs, 0, sizeof (fprs));
@@ -1318,7 +1520,7 @@ fetch_regs_kernel_thread (struct regcach
 
   if (regno == -1 || special_register_p (gdbarch, regno))
     {
-      if (arch64)
+      if (data->arch64)
 	{
 	  if (!ptrace64aix (PTT_READ_SPRS, tid, 
 			    (unsigned long) &sprs64, 0, NULL))
@@ -1350,11 +1552,15 @@ aix_thread_target::fetch_registers (stru
   struct thread_info *thread;
   pthdb_tid_t tid;
 
-  if (!PD_TID (regcache->ptid ()))
+  /* If a new inferior is born, then its pthread debug library is yet to
+     initialised and hence has no private data. So the below if condition
+     exists.  */
+
+  if (regcache->ptid ().tid () == 0)
     beneath ()->fetch_registers (regcache, regno);
   else
     {
-      thread = find_thread_ptid (regcache->ptid ());
+      thread = current_inferior ()->find_thread (regcache->ptid ());
       aix_thread_info *priv = get_aix_thread_info (thread);
       tid = priv->tid;
 
@@ -1365,12 +1571,48 @@ aix_thread_target::fetch_registers (stru
     }
 }
 
+/* Fill altivec registers.  */
+
+static void
+fill_altivec (const struct regcache *regcache, __vmx_context_t *vmx)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
+  int regno;
+
+  for (regno = 0; regno < ppc_num_vrs; regno++)
+    if (REG_VALID == regcache->get_register_status (tdep->ppc_vr0_regnum + regno))
+      regcache->raw_collect (tdep->ppc_vr0_regnum + regno,
+				     &(vmx->__vr[regno]));
+
+  if (REG_VALID == regcache->get_register_status (tdep->ppc_vrsave_regnum))
+    regcache->raw_collect (tdep->ppc_vrsave_regnum, &(vmx->__vrsave));
+  if (REG_VALID == regcache->get_register_status (tdep->ppc_vrsave_regnum - 1))
+    regcache->raw_collect (tdep->ppc_vrsave_regnum - 1, &(vmx->__vscr));
+}
+
+/* Fill vsx registers. */
+
+static void
+fill_vsx (const struct regcache *regcache, __vsx_context_t  *vsx)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
+  int regno;
+
+  for (regno = 0; regno < ppc_num_vshrs; regno++)
+    if (REG_VALID == regcache->get_register_status ( tdep->ppc_vsr0_upper_regnum + regno))
+      regcache->raw_collect (tdep->ppc_vsr0_upper_regnum + regno,
+			     &(vsx->__vsr_dw1[0]) + regno);
+}
+
 /* Store the gp registers into an array of uint32_t or uint64_t.  */
 
 static void
 fill_gprs64 (const struct regcache *regcache, uint64_t *vals)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
+  ppc_gdbarch_tdep *tdep
+    = gdbarch_tdep<ppc_gdbarch_tdep> (regcache->arch ());
   int regno;
 
   for (regno = 0; regno < ppc_num_gprs; regno++)
@@ -1382,7 +1624,8 @@ fill_gprs64 (const struct regcache *regc
 static void 
 fill_gprs32 (const struct regcache *regcache, uint32_t *vals)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
+  ppc_gdbarch_tdep *tdep
+    = gdbarch_tdep<ppc_gdbarch_tdep> (regcache->arch ());
   int regno;
 
   for (regno = 0; regno < ppc_num_gprs; regno++)
@@ -1396,7 +1639,7 @@ static void
 fill_fprs (const struct regcache *regcache, double *vals)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
   int regno;
 
   /* This function should never be called on architectures without
@@ -1420,7 +1663,7 @@ fill_sprs64 (const struct regcache *regc
 	     uint32_t *fpscr)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
 
   /* Verify that the size of the size of the IAR buffer is the
      same as the raw size of the PC (in the register cache).  If
@@ -1454,7 +1697,7 @@ fill_sprs32 (const struct regcache *regc
 	     uint32_t *fpscr)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
 
   /* Verify that the size of the size of the IAR buffer is the
      same as the raw size of the PC (in the register cache).  If
@@ -1491,29 +1734,65 @@ static void
 store_regs_user_thread (const struct regcache *regcache, pthdb_pthread_t pdtid)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
   int status, i;
   pthdb_context_t ctx;
   uint32_t int32;
   uint64_t int64;
+  struct aix_thread_variables *data;
+  data = get_thread_data_helper_for_ptid (inferior_ptid);
+  __vmx_context_t vmx;
+  __vsx_context_t  vsx;
 
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, 
-			"store_regs_user_thread %lx\n", (long) pdtid);
+    gdb_printf (gdb_stdlog, 
+		"store_regs_user_thread %lx\n", (long) pdtid);
 
   /* Retrieve the thread's current context for its non-register
      values.  */
-  status = pthdb_pthread_context (pd_session, pdtid, &ctx);
+  status = pthdb_pthread_context (data->pd_session, pdtid, &ctx);
   if (status != PTHDB_SUCCESS)
     error (_("aix-thread: store_registers: pthdb_pthread_context returned %s"),
-           pd_status2str (status));
+	   pd_status2str (status));
+
+  /* Fill altivec-registers.  */
+
+  if (__power_vmx())
+    {
+      memset(&vmx, 0, sizeof(__vmx_context_t));
+      for (i = 0; i < ppc_num_vrs; i++)
+	if (REG_VALID == regcache->get_register_status (tdep->ppc_vr0_regnum + i))
+	  {
+	    regcache->raw_collect (tdep->ppc_vr0_regnum + i,
+				   &(vmx.__vr[i]));
+	    ctx.vmx.__vr[i] = vmx.__vr[i];
+	  }
+	if (REG_VALID == regcache->get_register_status (tdep->ppc_vrsave_regnum))
+	  ctx.vmx.__vrsave = vmx.__vrsave;
+	if (REG_VALID == regcache->get_register_status (tdep->ppc_vrsave_regnum - 1))
+	  ctx.vmx.__vscr = vmx.__vscr;
+    }
+
+  /* Fill vsx registers. */
+
+  if (__power_vsx())
+    {
+      memset(&vsx, 0, sizeof(__vsx_context_t));
+      for (i = 0; i < ppc_num_vshrs; i++)
+	if (REG_VALID == regcache->get_register_status (tdep->ppc_vsr0_regnum + i))
+	  {
+	    regcache->raw_collect (tdep->ppc_vr0_regnum + i,
+				   &(vsx.__vsr_dw1[i]));
+	    ctx.vsx.__vsr_dw1[i] = vsx.__vsr_dw1[i];
+	  }
+    }
 
   /* Collect general-purpose register values from the regcache.  */
 
   for (i = 0; i < ppc_num_gprs; i++)
     if (REG_VALID == regcache->get_register_status (tdep->ppc_gp0_regnum + i))
       {
-	if (arch64)
+	if (data->arch64)
 	  {
 	    regcache->raw_collect (tdep->ppc_gp0_regnum + i, (void *) &int64);
 	    ctx.gpr[i] = int64;
@@ -1530,7 +1809,7 @@ store_regs_user_thread (const struct reg
     fill_fprs (regcache, ctx.fpr);
 
   /* Special registers (always kept in ctx as 64 bits).  */
-  if (arch64)
+  if (data->arch64)
     {
       fill_sprs64 (regcache, &ctx.iar, &ctx.msr, &ctx.cr, &ctx.lr, &ctx.ctr,
 			     &ctx.xer, &ctx.fpscr);
@@ -1561,11 +1840,11 @@ store_regs_user_thread (const struct reg
 	ctx.fpscr = tmp_fpscr;
     }
 
-  status = pthdb_pthread_setcontext (pd_session, pdtid, &ctx);
+  status = pthdb_pthread_setcontext (data->pd_session, pdtid, &ctx);
   if (status != PTHDB_SUCCESS)
     error (_("aix-thread: store_registers: "
 	     "pthdb_pthread_setcontext returned %s"),
-           pd_status2str (status));
+	   pd_status2str (status));
 }
 
 /* Store register REGNO if != -1 or all registers otherwise into
@@ -1581,24 +1860,28 @@ store_regs_kernel_thread (const struct r
 			  pthdb_tid_t tid)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
   uint64_t gprs64[ppc_num_gprs];
   uint32_t gprs32[ppc_num_gprs];
   double fprs[ppc_num_fprs];
   struct ptxsprs sprs64;
   struct ptsprs  sprs32;
+  struct aix_thread_variables *data;
+  int ret = 0;
+
+  data = get_thread_data_helper_for_ptid (regcache->ptid ());
 
   if (debug_aix_thread)
-    fprintf_unfiltered (gdb_stdlog, 
-			"store_regs_kernel_thread tid=%lx regno=%d\n",
-                        (long) tid, regno);
+    gdb_printf (gdb_stdlog, 
+		"store_regs_kernel_thread tid=%lx regno=%d\n",
+		(long) tid, regno);
 
   /* General-purpose registers.  */
   if (regno == -1
       || (tdep->ppc_gp0_regnum <= regno
-          && regno < tdep->ppc_gp0_regnum + ppc_num_fprs))
+	  && regno < tdep->ppc_gp0_regnum + ppc_num_fprs))
     {
-      if (arch64)
+      if (data->arch64)
 	{
 	  /* Pre-fetch: some regs may not be in the cache.  */
 	  ptrace64aix (PTT_READ_GPRS, tid, (unsigned long) gprs64, 0, NULL);
@@ -1618,8 +1901,8 @@ store_regs_kernel_thread (const struct r
 
   if (ppc_floating_point_unit_p (gdbarch)
       && (regno == -1
-          || (regno >= tdep->ppc_fp0_regnum
-              && regno < tdep->ppc_fp0_regnum + ppc_num_fprs)))
+	  || (regno >= tdep->ppc_fp0_regnum
+	      && regno < tdep->ppc_fp0_regnum + ppc_num_fprs)))
     {
       /* Pre-fetch: some regs may not be in the cache.  */
       ptrace32 (PTT_READ_FPRS, tid, (uintptr_t) fprs, 0, NULL);
@@ -1631,7 +1914,7 @@ store_regs_kernel_thread (const struct r
 
   if (regno == -1 || special_register_p (gdbarch, regno))
     {
-      if (arch64)
+      if (data->arch64)
 	{
 	  /* Pre-fetch: some registers won't be in the cache.  */
 	  ptrace64aix (PTT_READ_SPRS, tid, 
@@ -1677,6 +1960,56 @@ store_regs_kernel_thread (const struct r
 	  ptrace32 (PTT_WRITE_SPRS, tid, (uintptr_t) &sprs32, 0, NULL);
 	}
     }
+    
+    /* Vector registers.  */
+    if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1
+	&& (regno == -1 || (regno >= tdep->ppc_vr0_regnum
+	&& regno <= tdep->ppc_vrsave_regnum)))
+      {
+	__vmx_context_t vmx;
+	if (__power_vmx())
+	  {
+	    if (data->arch64)
+	      ret = ptrace64aix (PTT_READ_VEC, tid, (long long) &vmx, 0, 0);
+	    else
+	      ret = ptrace32 (PTT_READ_VEC, tid, (long long) &vmx, 0, 0);
+	    if (ret > 0)
+	      {
+		fill_altivec(regcache, &vmx);
+		if (data->arch64)
+		  ret = ptrace64aix (PTT_WRITE_VEC, tid, (long long) &vmx, 0, 0);
+		else
+		  ret = ptrace32 (PTT_WRITE_VEC, tid, (long long) &vmx, 0, 0);
+		if (ret < 0)
+		  perror_with_name (_("Unable to store AltiVec register after read"));
+	      }
+	  }
+      }
+
+    /* VSX registers.  */
+    if (tdep->ppc_vsr0_upper_regnum != -1 && (regno == -1
+	|| (regno >=tdep->ppc_vsr0_upper_regnum
+	&& regno < tdep->ppc_vsr0_upper_regnum + ppc_num_vshrs)))
+      {
+	__vsx_context_t vsx;
+	if (__power_vsx())
+	  {
+	    if (data->arch64)
+	      ret =  ptrace64aix (PTT_READ_VSX, tid, (long long) &vsx, 0, 0);
+	    else
+	      ret =  ptrace32 (PTT_READ_VSX, tid, (long long) &vsx, 0, 0);
+	    if (ret > 0)
+	      {
+		fill_vsx (regcache, &vsx);
+		if (data->arch64)
+		  ret = ptrace64aix (PTT_WRITE_VSX, tid, (long long) &vsx, 0, 0);
+		else
+		  ret = ptrace32 (PTT_WRITE_VSX, tid, (long long) &vsx, 0, 0);
+		if (ret < 0)
+		  perror_with_name (_("Unable to store VSX register after read"));
+	      }
+	  }
+      }
 }
 
 /* Store gdb's current view of the register set into the
@@ -1688,11 +2021,11 @@ aix_thread_target::store_registers (stru
   struct thread_info *thread;
   pthdb_tid_t tid;
 
-  if (!PD_TID (regcache->ptid ()))
+  if (regcache->ptid ().tid () == 0)
     beneath ()->store_registers (regcache, regno);
   else
     {
-      thread = find_thread_ptid (regcache->ptid ());
+      thread = current_inferior ()->find_thread (regcache->ptid ());
       aix_thread_info *priv = get_aix_thread_info (thread);
       tid = priv->tid;
 
@@ -1726,7 +2059,7 @@ aix_thread_target::mourn_inferior ()
 {
   target_ops *beneath = this->beneath ();
 
-  pd_deactivate ();
+  pd_disable (current_inferior ());
   beneath->mourn_inferior ();
 }
 
@@ -1735,12 +2068,14 @@ aix_thread_target::mourn_inferior ()
 bool
 aix_thread_target::thread_alive (ptid_t ptid)
 {
-  if (!PD_TID (ptid))
+  if (ptid.tid () == 0)
     return beneath ()->thread_alive (ptid);
 
   /* We update the thread list every time the child stops, so all
      valid threads should be in the thread list.  */
-  return in_thread_list (ptid);
+  process_stratum_target *proc_target
+    = current_inferior ()->process_target ();
+  return in_thread_list (proc_target, ptid);
 }
 
 /* Return a printable representation of composite PID for use in
@@ -1749,10 +2084,10 @@ aix_thread_target::thread_alive (ptid_t
 std::string
 aix_thread_target::pid_to_str (ptid_t ptid)
 {
-  if (!PD_TID (ptid))
+  if (ptid.tid () == 0)
     return beneath ()->pid_to_str (ptid);
 
-  return string_printf (_("Thread %ld"), ptid.tid ());
+  return string_printf (_("Thread %s"), pulongest (ptid.tid ()));
 }
 
 /* Return a printable representation of extra information about
@@ -1769,8 +2104,11 @@ aix_thread_target::extra_thread_info (st
   pthdb_detachstate_t detachstate;
   int cancelpend;
   static char *ret = NULL;
+  struct aix_thread_variables *data;
+
+  data = get_thread_data_helper_for_ptid (thread->ptid);
 
-  if (!PD_TID (thread->ptid))
+  if (thread->ptid.tid () == 0)
     return NULL;
 
   string_file buf;
@@ -1783,24 +2121,24 @@ aix_thread_target::extra_thread_info (st
     /* i18n: Like "thread-identifier %d, [state] running, suspended" */
     buf.printf (_("tid %d"), (int)tid);
 
-  status = pthdb_pthread_state (pd_session, pdtid, &state);
+  status = pthdb_pthread_state (data->pd_session, pdtid, &state);
   if (status != PTHDB_SUCCESS)
     state = PST_NOTSUP;
   buf.printf (", %s", state2str (state));
 
-  status = pthdb_pthread_suspendstate (pd_session, pdtid, 
+  status = pthdb_pthread_suspendstate (data->pd_session, pdtid,
 				       &suspendstate);
   if (status == PTHDB_SUCCESS && suspendstate == PSS_SUSPENDED)
     /* i18n: Like "Thread-Id %d, [state] running, suspended" */
     buf.printf (_(", suspended"));
 
-  status = pthdb_pthread_detachstate (pd_session, pdtid, 
+  status = pthdb_pthread_detachstate (data->pd_session, pdtid,
 				      &detachstate);
   if (status == PTHDB_SUCCESS && detachstate == PDS_DETACHED)
     /* i18n: Like "Thread-Id %d, [state] running, detached" */
     buf.printf (_(", detached"));
 
-  pthdb_pthread_cancelpend (pd_session, pdtid, &cancelpend);
+  pthdb_pthread_cancelpend (data->pd_session, pdtid, &cancelpend);
   if (status == PTHDB_SUCCESS && cancelpend)
     /* i18n: Like "Thread-Id %d, [state] running, cancel pending" */
     buf.printf (_(", cancel pending"));
@@ -1815,7 +2153,7 @@ aix_thread_target::extra_thread_info (st
 }
 
 ptid_t
-aix_thread_target::get_ada_task_ptid (long lwp, long thread)
+aix_thread_target::get_ada_task_ptid (long lwp, ULONGEST thread)
 {
   return ptid_t (inferior_ptid.pid (), 0, thread);
 }
@@ -1824,15 +2162,17 @@ aix_thread_target::get_ada_task_ptid (lo
 /* Module startup initialization function, automagically called by
    init.c.  */
 
+void _initialize_aix_thread ();
 void
-_initialize_aix_thread (void)
+_initialize_aix_thread ()
 {
   /* Notice when object files get loaded and unloaded.  */
-  gdb::observers::new_objfile.attach (new_objfile);
+  gdb::observers::new_objfile.attach (new_objfile, "aix-thread");
 
   /* Add ourselves to inferior_created event chain.
      This is needed to enable the thread target on "attach".  */
-  gdb::observers::inferior_created.attach (aix_thread_inferior_created);
+  gdb::observers::inferior_created.attach (aix_thread_inferior_created,
+					   "aix-thread");
 
   add_setshow_boolean_cmd ("aix-thread", class_maintenance, &debug_aix_thread,
 			   _("Set debugging of AIX thread module."),
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alloc.c ./gdb/alloc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alloc.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alloc.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Shared allocation functions for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -44,10 +44,7 @@
    consistent semantics and guard against typical memory management
    problems.  */
 
-/* NOTE: These are declared using PTR to ensure consistency with
-   "libiberty.h".  xfree() is GDB local.  */
-
-PTR                            /* ARI: PTR */
+void *
 xmalloc (size_t size)
 {
   void *val;
@@ -64,8 +61,8 @@ xmalloc (size_t size)
   return val;
 }
 
-PTR                              /* ARI: PTR */
-xrealloc (PTR ptr, size_t size)          /* ARI: PTR */
+void *
+xrealloc (void *ptr, size_t size)
 {
   void *val;
 
@@ -84,7 +81,7 @@ xrealloc (PTR ptr, size_t size)
   return val;
 }
 
-PTR                            /* ARI: PTR */
+void *
 xcalloc (size_t number, size_t size)
 {
   void *mem;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-bsd-nat.c ./gdb/alpha-bsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-bsd-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-bsd-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for Alpha BSD's.
 
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -17,6 +17,8 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+/* We define this to get types like register_t.  */
+#define _KERNTYPES
 #include "defs.h"
 #include "inferior.h"
 #include "regcache.h"
@@ -24,26 +26,13 @@
 #include "alpha-tdep.h"
 #include "alpha-bsd-tdep.h"
 #include "inf-ptrace.h"
+#include "netbsd-nat.h"
 
 #include <sys/types.h>
 #include <sys/ptrace.h>
 #include <machine/reg.h>
 
-#ifdef HAVE_SYS_PROCFS_H
-#include <sys/procfs.h>
-#endif
-
-#ifndef HAVE_GREGSET_T
-typedef struct reg gregset_t;
-#endif
-
-#ifndef HAVE_FPREGSET_T 
-typedef struct fpreg fpregset_t; 
-#endif 
-
-#include "gregset.h"
-
-struct alpha_bsd_nat_target final : public inf_ptrace_target
+struct alpha_bsd_nat_target final : public nbsd_nat_target
 {
   void fetch_registers (struct regcache *, int) override;
   void store_registers (struct regcache *, int) override;
@@ -51,34 +40,6 @@ struct alpha_bsd_nat_target final : publ
 
 static alpha_bsd_nat_target the_alpha_bsd_nat_target;
 
-/* Provide *regset() wrappers around the generic Alpha BSD register
-   supply/fill routines.  */
-
-void
-supply_gregset (struct regcache *regcache, const gregset_t *gregsetp)
-{
-  alphabsd_supply_reg (regcache, (const char *) gregsetp, -1);
-}
-
-void
-fill_gregset (const struct regcache *regcache, gregset_t *gregsetp, int regno)
-{
-  alphabsd_fill_reg (regcache, (char *) gregsetp, regno);
-}
-
-void
-supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp)
-{
-  alphabsd_supply_fpreg (regcache, (const char *) fpregsetp, -1);
-}
-
-void
-fill_fpregset (const struct regcache *regcache,
-	       fpregset_t *fpregsetp, int regno)
-{
-  alphabsd_fill_fpreg (regcache, (char *) fpregsetp, regno);
-}
-
 /* Determine if PT_GETREGS fetches this register.  */
 
 static int
@@ -94,12 +55,14 @@ getregs_supplies (int regno)
 void
 alpha_bsd_nat_target::fetch_registers (struct regcache *regcache, int regno)
 {
+  int lwp = regcache->ptid ().lwp ();
+
   if (regno == -1 || getregs_supplies (regno))
     {
       struct reg gregs;
 
       if (ptrace (PT_GETREGS, regcache->ptid ().pid (),
-		  (PTRACE_TYPE_ARG3) &gregs, 0) == -1)
+		  (PTRACE_TYPE_ARG3) &gregs, lwp) == -1)
 	perror_with_name (_("Couldn't get registers"));
 
       alphabsd_supply_reg (regcache, (char *) &gregs, regno);
@@ -113,7 +76,7 @@ alpha_bsd_nat_target::fetch_registers (s
       struct fpreg fpregs;
 
       if (ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
-		  (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+		  (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1)
 	perror_with_name (_("Couldn't get floating point status"));
 
       alphabsd_supply_fpreg (regcache, (char *) &fpregs, regno);
@@ -126,18 +89,20 @@ alpha_bsd_nat_target::fetch_registers (s
 void
 alpha_bsd_nat_target::store_registers (struct regcache *regcache, int regno)
 {
+  int lwp = regcache->ptid ().lwp ();
+
   if (regno == -1 || getregs_supplies (regno))
     {
       struct reg gregs;
       if (ptrace (PT_GETREGS, regcache->ptid ().pid (),
-                  (PTRACE_TYPE_ARG3) &gregs, 0) == -1)
-        perror_with_name (_("Couldn't get registers"));
+		  (PTRACE_TYPE_ARG3) &gregs, lwp) == -1)
+	perror_with_name (_("Couldn't get registers"));
 
       alphabsd_fill_reg (regcache, (char *) &gregs, regno);
 
       if (ptrace (PT_SETREGS, regcache->ptid ().pid (),
-                  (PTRACE_TYPE_ARG3) &gregs, 0) == -1)
-        perror_with_name (_("Couldn't write registers"));
+		  (PTRACE_TYPE_ARG3) &gregs, lwp) == -1)
+	perror_with_name (_("Couldn't write registers"));
 
       if (regno != -1)
 	return;
@@ -149,13 +114,13 @@ alpha_bsd_nat_target::store_registers (s
       struct fpreg fpregs;
 
       if (ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
-		  (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+		  (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1)
 	perror_with_name (_("Couldn't get floating point status"));
 
       alphabsd_fill_fpreg (regcache, (char *) &fpregs, regno);
 
       if (ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
-		  (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+		  (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1)
 	perror_with_name (_("Couldn't write floating point status"));
     }
 }
@@ -192,8 +157,9 @@ alphabsd_supply_pcb (struct regcache *re
 }
 
 
+void _initialize_alphabsd_nat ();
 void
-_initialize_alphabsd_nat (void)
+_initialize_alphabsd_nat ()
 {
   add_inf_child_target (&the_alpha_bsd_nat_target);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-bsd-tdep.c ./gdb/alpha-bsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-bsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-bsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code Alpha BSD's.
 
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,7 +23,7 @@
 #include "alpha-tdep.h"
 #include "alpha-bsd-tdep.h"
 
-/* Conviently, GDB uses the same register numbering as the
+/* Conveniently, GDB uses the same register numbering as the
    ptrace register structure used by BSD on Alpha.  */
 
 void
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-bsd-tdep.h ./gdb/alpha-bsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-bsd-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-bsd-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for Alpha BSD's.
 
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -31,7 +31,7 @@ void alphabsd_supply_fpreg (struct regca
 void alphabsd_fill_fpreg (const struct regcache *, char *, int);
 
 
-/* Functions exported from alpha-nbsd-tdep.c.  */
+/* Functions exported from alpha-netbsd-tdep.c.  */
 
 /* Iterate over supported core file register note sections. */
 void alphanbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-linux-nat.c ./gdb/alpha-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-linux-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-linux-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Low level Alpha GNU/Linux interface, for GDB when running native.
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -101,8 +101,9 @@ alpha_linux_nat_target::register_u_offse
     return FPR_BASE + regno - gdbarch_fp0_regnum (gdbarch);
 }
 
+void _initialize_alpha_linux_nat ();
 void
-_initialize_alpha_linux_nat (void)
+_initialize_alpha_linux_nat ()
 {
   linux_target = &the_alpha_linux_nat_target;
   add_inf_child_target (&the_alpha_linux_nat_target);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-linux-tdep.c ./gdb/alpha-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-linux-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-linux-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Target-dependent code for GNU/Linux on Alpha.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -64,11 +64,11 @@ enum
 
    This is somewhat complicated in that:
      (1) the expansion of the "mov" assembler macro has changed over
-         time, from "bis src,src,dst" to "bis zero,src,dst",
+	 time, from "bis src,src,dst" to "bis zero,src,dst",
      (2) the kernel has changed from using "addq" to "lda" to load the
-         syscall number,
+	 syscall number,
      (3) there is a "normal" sigreturn and an "rt" sigreturn which
-         has a different stack layout.  */
+	 has a different stack layout.  */
 
 static long
 alpha_linux_sigtramp_offset_1 (struct gdbarch *gdbarch, CORE_ADDR pc)
@@ -126,7 +126,7 @@ alpha_linux_pc_in_sigtramp (struct gdbar
 }
 
 static CORE_ADDR
-alpha_linux_sigcontext_addr (struct frame_info *this_frame)
+alpha_linux_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc;
@@ -144,7 +144,7 @@ alpha_linux_sigcontext_addr (struct fram
 	struct rt_sigframe {
 	  struct siginfo info;
 	  struct ucontext uc;
-        };
+	};
 
 	offsetof (struct rt_sigframe, uc.uc_mcontext);  */
 
@@ -354,9 +354,7 @@ alpha_linux_gdb_signal_to_target (struct
 static void
 alpha_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep;
-
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, 0);
 
   /* Hook into the DWARF CFI frame unwinder.  */
   alpha_dwarf2_init_abi (info, gdbarch);
@@ -364,7 +362,7 @@ alpha_linux_init_abi (struct gdbarch_inf
   /* Hook into the MDEBUG frame unwinder.  */
   alpha_mdebug_init_abi (info, gdbarch);
 
-  tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
   tdep->dynamic_sigtramp_offset = alpha_linux_sigtramp_offset;
   tdep->sigcontext_addr = alpha_linux_sigcontext_addr;
   tdep->pc_in_sigtramp = alpha_linux_pc_in_sigtramp;
@@ -374,11 +372,11 @@ alpha_linux_init_abi (struct gdbarch_inf
   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
 
   set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_lp64_fetch_link_map_offsets);
+    (gdbarch, linux_lp64_fetch_link_map_offsets);
 
   /* Enable TLS support.  */
   set_gdbarch_fetch_tls_load_module_address (gdbarch,
-                                             svr4_fetch_objfile_link_map);
+					     svr4_fetch_objfile_link_map);
 
   set_gdbarch_iterate_over_regset_sections
     (gdbarch, alpha_linux_iterate_over_regset_sections);
@@ -389,9 +387,10 @@ alpha_linux_init_abi (struct gdbarch_inf
 				    alpha_linux_gdb_signal_to_target);
 }
 
+void _initialize_alpha_linux_tdep ();
 void
-_initialize_alpha_linux_tdep (void)
+_initialize_alpha_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_LINUX,
-                          alpha_linux_init_abi);
+			  alpha_linux_init_abi);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-mdebug-tdep.c ./gdb/alpha-mdebug-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-mdebug-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-mdebug-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Target-dependent mdebug code for the ALPHA architecture.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -31,13 +31,12 @@
 
 /* FIXME: Some of this code should perhaps be merged with mips.  */
 
-/* *INDENT-OFF* */
 /* Layout of a stack frame on the alpha:
 
-                |				|
+		|				|
  pdr members:	|  7th ... nth arg,		|
-                |  `pushed' by caller.		|
-                |				|
+		|  `pushed' by caller.		|
+		|				|
 ----------------|-------------------------------|<--  old_sp == vfp
    ^  ^  ^  ^	|				|
    |  |  |  |	|				|
@@ -72,9 +71,8 @@
    |            |  called procedure.		|
    v            |  				|
    -------------|-------------------------------|<-- sp
-                |				|
+		|				|
 */
-/* *INDENT-ON* */
 
 #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr)
 #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
@@ -102,22 +100,22 @@ find_proc_desc (CORE_ADDR pc)
       CORE_ADDR startaddr;
       find_pc_partial_function (pc, &sh_name, &startaddr, NULL);
 
-      if (startaddr > BLOCK_START (b))
+      if (startaddr > b->start ())
 	/* This is the "pathological" case referred to in a comment in
 	   print_frame_info.  It might be better to move this check into
 	   symbol reading.  */
 	sym = NULL;
       else
-	sym = lookup_symbol (MDEBUG_EFI_SYMBOL_NAME, b, LABEL_DOMAIN,
+	sym = lookup_symbol (MDEBUG_EFI_SYMBOL_NAME, b, SEARCH_LABEL_DOMAIN,
 			     0).symbol;
     }
 
   if (sym)
     {
-      proc_desc = (struct mdebug_extra_func_info *) SYMBOL_VALUE_BYTES (sym);
+      proc_desc = (struct mdebug_extra_func_info *) sym->value_bytes ();
 
       /* Correct incorrect setjmp procedure descriptor from the library
-         to make backtrace through setjmp work.  */
+	 to make backtrace through setjmp work.  */
       if (proc_desc->pdr.pcreg == 0
 	  && strcmp (sh_name, "setjmp") == 0)
 	{
@@ -154,7 +152,7 @@ alpha_mdebug_after_prologue (CORE_ADDR p
   if (proc_desc)
     {
       /* If function is frameless, then we need to do it the hard way.  I
-         strongly suspect that frameless always means prologueless...  */
+	 strongly suspect that frameless always means prologueless...  */
       if (alpha_mdebug_frameless (proc_desc))
 	return 0;
     }
@@ -180,14 +178,14 @@ struct alpha_mdebug_unwind_cache
 {
   struct mdebug_extra_func_info *proc_desc;
   CORE_ADDR vfp;
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
 /* Extract all of the information about the frame from PROC_DESC
    and store the resulting register save locations in the structure.  */
 
 static struct alpha_mdebug_unwind_cache *
-alpha_mdebug_frame_unwind_cache (struct frame_info *this_frame, 
+alpha_mdebug_frame_unwind_cache (frame_info_ptr this_frame, 
 				 void **this_prologue_cache)
 {
   struct alpha_mdebug_unwind_cache *info;
@@ -231,14 +229,14 @@ alpha_mdebug_frame_unwind_cache (struct
       /* Clear bit for RA so we don't save it again later.  */
       mask &= ~(1 << returnreg);
 
-      info->saved_regs[returnreg].addr = reg_position;
+      info->saved_regs[returnreg].set_addr (reg_position);
       reg_position += 8;
     }
 
   for (ireg = 0; ireg <= 31; ++ireg)
     if (mask & (1 << ireg))
       {
-	info->saved_regs[ireg].addr = reg_position;
+	info->saved_regs[ireg].set_addr (reg_position);
 	reg_position += 8;
       }
 
@@ -248,14 +246,14 @@ alpha_mdebug_frame_unwind_cache (struct
   for (ireg = 0; ireg <= 31; ++ireg)
     if (mask & (1 << ireg))
       {
-	info->saved_regs[ALPHA_FP0_REGNUM + ireg].addr = reg_position;
+	info->saved_regs[ALPHA_FP0_REGNUM + ireg].set_addr (reg_position);
 	reg_position += 8;
       }
 
   /* The stack pointer of the previous frame is computed by popping
      the current stack frame.  */
-  if (!trad_frame_addr_p (info->saved_regs, ALPHA_SP_REGNUM))
-   trad_frame_set_value (info->saved_regs, ALPHA_SP_REGNUM, vfp);
+  if (!info->saved_regs[ALPHA_SP_REGNUM].is_addr ())
+    info->saved_regs[ALPHA_SP_REGNUM].set_value (vfp);
 
   return info;
 }
@@ -264,7 +262,7 @@ alpha_mdebug_frame_unwind_cache (struct
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-alpha_mdebug_frame_this_id (struct frame_info *this_frame,
+alpha_mdebug_frame_this_id (frame_info_ptr this_frame,
 			    void **this_prologue_cache,
 			    struct frame_id *this_id)
 {
@@ -277,7 +275,7 @@ alpha_mdebug_frame_this_id (struct frame
 /* Retrieve the value of REGNUM in FRAME.  Don't give up!  */
 
 static struct value *
-alpha_mdebug_frame_prev_register (struct frame_info *this_frame,
+alpha_mdebug_frame_prev_register (frame_info_ptr this_frame,
 				  void **this_prologue_cache, int regnum)
 {
   struct alpha_mdebug_unwind_cache *info
@@ -308,8 +306,8 @@ alpha_mdebug_max_frame_size_exceeded (st
 
 static int
 alpha_mdebug_frame_sniffer (const struct frame_unwind *self,
-                            struct frame_info *this_frame,
-                            void **this_cache)
+			    frame_info_ptr this_frame,
+			    void **this_cache)
 {
   CORE_ADDR pc = get_frame_address_in_block (this_frame);
   struct mdebug_extra_func_info *proc_desc;
@@ -333,7 +331,9 @@ alpha_mdebug_frame_sniffer (const struct
   return 1;
 }
 
-static const struct frame_unwind alpha_mdebug_frame_unwind = {
+static const struct frame_unwind alpha_mdebug_frame_unwind =
+{
+  "alpha mdebug",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   alpha_mdebug_frame_this_id,
@@ -343,7 +343,7 @@ static const struct frame_unwind alpha_m
 };
 
 static CORE_ADDR
-alpha_mdebug_frame_base_address (struct frame_info *this_frame,
+alpha_mdebug_frame_base_address (frame_info_ptr this_frame,
 				 void **this_prologue_cache)
 {
   struct alpha_mdebug_unwind_cache *info
@@ -353,7 +353,7 @@ alpha_mdebug_frame_base_address (struct
 }
 
 static CORE_ADDR
-alpha_mdebug_frame_locals_address (struct frame_info *this_frame,
+alpha_mdebug_frame_locals_address (frame_info_ptr this_frame,
 				   void **this_prologue_cache)
 {
   struct alpha_mdebug_unwind_cache *info
@@ -363,7 +363,7 @@ alpha_mdebug_frame_locals_address (struc
 }
 
 static CORE_ADDR
-alpha_mdebug_frame_args_address (struct frame_info *this_frame,
+alpha_mdebug_frame_args_address (frame_info_ptr this_frame,
 				 void **this_prologue_cache)
 {
   struct alpha_mdebug_unwind_cache *info
@@ -380,7 +380,7 @@ static const struct frame_base alpha_mde
 };
 
 static const struct frame_base *
-alpha_mdebug_frame_base_sniffer (struct frame_info *this_frame)
+alpha_mdebug_frame_base_sniffer (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_address_in_block (this_frame);
   struct mdebug_extra_func_info *proc_desc;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-nbsd-tdep.c ./gdb/alpha-nbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-nbsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-nbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,289 +0,0 @@
-/* Target-dependent code for NetBSD/alpha.
-
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
-
-   Contributed by Wasabi Systems, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "frame.h"
-#include "gdbcore.h"
-#include "osabi.h"
-#include "regcache.h"
-#include "regset.h"
-#include "value.h"
-
-#include "alpha-tdep.h"
-#include "alpha-bsd-tdep.h"
-#include "nbsd-tdep.h"
-#include "solib-svr4.h"
-#include "target.h"
-
-/* Core file support.  */
-
-/* Sizeof `struct reg' in <machine/reg.h>.  */
-#define ALPHANBSD_SIZEOF_GREGS	(32 * 8)
-
-/* Sizeof `struct fpreg' in <machine/reg.h.  */
-#define ALPHANBSD_SIZEOF_FPREGS	((32 * 8) + 8)
-
-/* Supply register REGNUM from the buffer specified by FPREGS and LEN
-   in the floating-point register set REGSET to register cache
-   REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
-
-static void
-alphanbsd_supply_fpregset (const struct regset *regset,
-			   struct regcache *regcache,
-			   int regnum, const void *fpregs, size_t len)
-{
-  const gdb_byte *regs = (const gdb_byte *) fpregs;
-  int i;
-
-  gdb_assert (len >= ALPHANBSD_SIZEOF_FPREGS);
-
-  for (i = ALPHA_FP0_REGNUM; i < ALPHA_FP0_REGNUM + 31; i++)
-    {
-      if (regnum == i || regnum == -1)
-	regcache->raw_supply (i, regs + (i - ALPHA_FP0_REGNUM) * 8);
-    }
-
-  if (regnum == ALPHA_FPCR_REGNUM || regnum == -1)
-    regcache->raw_supply (ALPHA_FPCR_REGNUM, regs + 32 * 8);
-}
-
-/* Supply register REGNUM from the buffer specified by GREGS and LEN
-   in the general-purpose register set REGSET to register cache
-   REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
-
-static void
-alphanbsd_aout_supply_gregset (const struct regset *regset,
-			       struct regcache *regcache,
-			       int regnum, const void *gregs, size_t len)
-{
-  const gdb_byte *regs = (const gdb_byte *) gregs;
-  int i;
-
-  /* Table to map a GDB register number to a trapframe register index.  */
-  static const int regmap[] =
-  {
-     0,   1,   2,   3,
-     4,   5,   6,   7,
-     8,   9,  10,  11,
-    12,  13,  14,  15, 
-    30,  31,  32,  16, 
-    17,  18,  19,  20,
-    21,  22,  23,  24,
-    25,  29,  26
-  };
-
-  gdb_assert (len >= ALPHANBSD_SIZEOF_GREGS);
-
-  for (i = 0; i < ARRAY_SIZE(regmap); i++)
-    {
-      if (regnum == i || regnum == -1)
-	regcache->raw_supply (i, regs + regmap[i] * 8);
-    }
-
-  if (regnum == ALPHA_PC_REGNUM || regnum == -1)
-    regcache->raw_supply (ALPHA_PC_REGNUM, regs + 31 * 8);
-
-  if (len >= ALPHANBSD_SIZEOF_GREGS + ALPHANBSD_SIZEOF_FPREGS)
-    {
-      regs += ALPHANBSD_SIZEOF_GREGS;
-      len -= ALPHANBSD_SIZEOF_GREGS;
-      alphanbsd_supply_fpregset (regset, regcache, regnum, regs, len);
-    }
-}
-
-/* Supply register REGNUM from the buffer specified by GREGS and LEN
-   in the general-purpose register set REGSET to register cache
-   REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
-
-static void
-alphanbsd_supply_gregset (const struct regset *regset,
-			  struct regcache *regcache,
-			  int regnum, const void *gregs, size_t len)
-{
-  const gdb_byte *regs = (const gdb_byte *) gregs;
-  int i;
-
-  if (len >= ALPHANBSD_SIZEOF_GREGS + ALPHANBSD_SIZEOF_FPREGS)
-    {
-      alphanbsd_aout_supply_gregset (regset, regcache, regnum, gregs, len);
-      return;
-    }
-
-  for (i = 0; i < ALPHA_ZERO_REGNUM; i++)
-    {
-      if (regnum == i || regnum == -1)
-	regcache->raw_supply (i, regs + i * 8);
-    }
-
-  if (regnum == ALPHA_PC_REGNUM || regnum == -1)
-    regcache->raw_supply (ALPHA_PC_REGNUM, regs + 31 * 8);
-}
-
-/* NetBSD/alpha register sets.  */
-
-static const struct regset alphanbsd_gregset =
-{
-  NULL,
-  alphanbsd_supply_gregset,
-  NULL,
-  REGSET_VARIABLE_SIZE
-};
-
-static const struct regset alphanbsd_fpregset =
-{
-  NULL,
-  alphanbsd_supply_fpregset
-};
-
-/* Iterate over supported core file register note sections. */
-
-void
-alphanbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
-					iterate_over_regset_sections_cb *cb,
-					void *cb_data,
-					const struct regcache *regcache)
-{
-  cb (".reg", ALPHANBSD_SIZEOF_GREGS, ALPHANBSD_SIZEOF_GREGS,
-      &alphanbsd_gregset, NULL, cb_data);
-  cb (".reg2", ALPHANBSD_SIZEOF_FPREGS, ALPHANBSD_SIZEOF_FPREGS,
-      &alphanbsd_fpregset, NULL, cb_data);
-}
-
-
-/* Signal trampolines.  */
-
-/* Under NetBSD/alpha, signal handler invocations can be identified by the
-   designated code sequence that is used to return from a signal handler.
-   In particular, the return address of a signal handler points to the
-   following code sequence:
-
-	ldq	a0, 0(sp)
-	lda	sp, 16(sp)
-	lda	v0, 295(zero)	# __sigreturn14
-	call_pal callsys
-
-   Each instruction has a unique encoding, so we simply attempt to match
-   the instruction the PC is pointing to with any of the above instructions.
-   If there is a hit, we know the offset to the start of the designated
-   sequence and can then check whether we really are executing in the
-   signal trampoline.  If not, -1 is returned, otherwise the offset from the
-   start of the return sequence is returned.  */
-static const gdb_byte sigtramp_retcode[] =
-{
-  0x00, 0x00, 0x1e, 0xa6,	/* ldq a0, 0(sp) */
-  0x10, 0x00, 0xde, 0x23,	/* lda sp, 16(sp) */
-  0x27, 0x01, 0x1f, 0x20,	/* lda v0, 295(zero) */
-  0x83, 0x00, 0x00, 0x00,	/* call_pal callsys */
-};
-#define RETCODE_NWORDS		4
-#define RETCODE_SIZE		(RETCODE_NWORDS * 4)
-
-static LONGEST
-alphanbsd_sigtramp_offset (struct gdbarch *gdbarch, CORE_ADDR pc)
-{
-  gdb_byte ret[RETCODE_SIZE], w[4];
-  LONGEST off;
-  int i;
-
-  if (target_read_memory (pc, w, 4) != 0)
-    return -1;
-
-  for (i = 0; i < RETCODE_NWORDS; i++)
-    {
-      if (memcmp (w, sigtramp_retcode + (i * 4), 4) == 0)
-	break;
-    }
-  if (i == RETCODE_NWORDS)
-    return (-1);
-
-  off = i * 4;
-  pc -= off;
-
-  if (target_read_memory (pc, ret, sizeof (ret)) != 0)
-    return -1;
-
-  if (memcmp (ret, sigtramp_retcode, RETCODE_SIZE) == 0)
-    return off;
-
-  return -1;
-}
-
-static int
-alphanbsd_pc_in_sigtramp (struct gdbarch *gdbarch,
-		 	  CORE_ADDR pc, const char *func_name)
-{
-  return (nbsd_pc_in_sigtramp (pc, func_name)
-	  || alphanbsd_sigtramp_offset (gdbarch, pc) >= 0);
-}
-
-static CORE_ADDR
-alphanbsd_sigcontext_addr (struct frame_info *frame)
-{
-  /* FIXME: This is not correct for all versions of NetBSD/alpha.
-     We will probably need to disassemble the trampoline to figure
-     out which trampoline frame type we have.  */
-  if (!get_next_frame (frame))
-    return 0;
-  return get_frame_base (get_next_frame (frame));
-}
-
-
-static void
-alphanbsd_init_abi (struct gdbarch_info info,
-                    struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  /* Hook into the DWARF CFI frame unwinder.  */
-  alpha_dwarf2_init_abi (info, gdbarch);
-
-  /* Hook into the MDEBUG frame unwinder.  */
-  alpha_mdebug_init_abi (info, gdbarch);
-
-  /* NetBSD/alpha does not provide single step support via ptrace(2); we
-     must use software single-stepping.  */
-  set_gdbarch_software_single_step (gdbarch, alpha_software_single_step);
-
-  /* NetBSD/alpha has SVR4-style shared libraries.  */
-  set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_lp64_fetch_link_map_offsets);
-
-  tdep->dynamic_sigtramp_offset = alphanbsd_sigtramp_offset;
-  tdep->pc_in_sigtramp = alphanbsd_pc_in_sigtramp;
-  tdep->sigcontext_addr = alphanbsd_sigcontext_addr;
-
-  tdep->jb_pc = 2;
-  tdep->jb_elt_size = 8;
-
-  set_gdbarch_iterate_over_regset_sections
-    (gdbarch, alphanbsd_iterate_over_regset_sections);
-}
-
-
-void
-_initialize_alphanbsd_tdep (void)
-{
-  /* Even though NetBSD/alpha used ELF since day one, it used the
-     traditional a.out-style core dump format before NetBSD 1.6, but
-     we don't support those.  */
-  gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_NETBSD,
-                          alphanbsd_init_abi);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-netbsd-tdep.c ./gdb/alpha-netbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-netbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/alpha-netbsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,292 @@
+/* Target-dependent code for NetBSD/alpha.
+
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
+
+   Contributed by Wasabi Systems, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "frame.h"
+#include "gdbcore.h"
+#include "osabi.h"
+#include "regcache.h"
+#include "regset.h"
+#include "value.h"
+
+#include "alpha-tdep.h"
+#include "alpha-bsd-tdep.h"
+#include "netbsd-tdep.h"
+#include "solib-svr4.h"
+#include "target.h"
+
+/* Core file support.  */
+
+/* Sizeof `struct reg' in <machine/reg.h>.  */
+#define ALPHANBSD_SIZEOF_GREGS	(32 * 8)
+
+/* Sizeof `struct fpreg' in <machine/reg.h.  */
+#define ALPHANBSD_SIZEOF_FPREGS	((32 * 8) + 8)
+
+/* Supply register REGNUM from the buffer specified by FPREGS and LEN
+   in the floating-point register set REGSET to register cache
+   REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
+
+static void
+alphanbsd_supply_fpregset (const struct regset *regset,
+			   struct regcache *regcache,
+			   int regnum, const void *fpregs, size_t len)
+{
+  const gdb_byte *regs = (const gdb_byte *) fpregs;
+  int i;
+
+  gdb_assert (len >= ALPHANBSD_SIZEOF_FPREGS);
+
+  for (i = ALPHA_FP0_REGNUM; i < ALPHA_FP0_REGNUM + 31; i++)
+    {
+      if (regnum == i || regnum == -1)
+	regcache->raw_supply (i, regs + (i - ALPHA_FP0_REGNUM) * 8);
+    }
+
+  if (regnum == ALPHA_FPCR_REGNUM || regnum == -1)
+    regcache->raw_supply (ALPHA_FPCR_REGNUM, regs + 32 * 8);
+}
+
+/* Supply register REGNUM from the buffer specified by GREGS and LEN
+   in the general-purpose register set REGSET to register cache
+   REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
+
+static void
+alphanbsd_aout_supply_gregset (const struct regset *regset,
+			       struct regcache *regcache,
+			       int regnum, const void *gregs, size_t len)
+{
+  const gdb_byte *regs = (const gdb_byte *) gregs;
+  int i;
+
+  /* Table to map a GDB register number to a trapframe register index.  */
+  static const int regmap[] =
+  {
+     0,   1,   2,   3,
+     4,   5,   6,   7,
+     8,   9,  10,  11,
+    12,  13,  14,  15, 
+    30,  31,  32,  16, 
+    17,  18,  19,  20,
+    21,  22,  23,  24,
+    25,  29,  26
+  };
+
+  gdb_assert (len >= ALPHANBSD_SIZEOF_GREGS);
+
+  for (i = 0; i < ARRAY_SIZE(regmap); i++)
+    {
+      if (regnum == i || regnum == -1)
+	regcache->raw_supply (i, regs + regmap[i] * 8);
+    }
+
+  if (regnum == ALPHA_PC_REGNUM || regnum == -1)
+    regcache->raw_supply (ALPHA_PC_REGNUM, regs + 31 * 8);
+
+  if (len >= ALPHANBSD_SIZEOF_GREGS + ALPHANBSD_SIZEOF_FPREGS)
+    {
+      regs += ALPHANBSD_SIZEOF_GREGS;
+      len -= ALPHANBSD_SIZEOF_GREGS;
+      alphanbsd_supply_fpregset (regset, regcache, regnum, regs, len);
+    }
+}
+
+/* Supply register REGNUM from the buffer specified by GREGS and LEN
+   in the general-purpose register set REGSET to register cache
+   REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
+
+static void
+alphanbsd_supply_gregset (const struct regset *regset,
+			  struct regcache *regcache,
+			  int regnum, const void *gregs, size_t len)
+{
+  const gdb_byte *regs = (const gdb_byte *) gregs;
+  int i;
+
+  if (len >= ALPHANBSD_SIZEOF_GREGS + ALPHANBSD_SIZEOF_FPREGS)
+    {
+      alphanbsd_aout_supply_gregset (regset, regcache, regnum, gregs, len);
+      return;
+    }
+
+  for (i = 0; i < ALPHA_ZERO_REGNUM; i++)
+    {
+      if (regnum == i || regnum == -1)
+	regcache->raw_supply (i, regs + i * 8);
+    }
+
+  if (regnum == ALPHA_PC_REGNUM || regnum == -1)
+    regcache->raw_supply (ALPHA_PC_REGNUM, regs + 31 * 8);
+}
+
+/* NetBSD/alpha register sets.  */
+
+static const struct regset alphanbsd_gregset =
+{
+  NULL,
+  alphanbsd_supply_gregset,
+  NULL,
+  REGSET_VARIABLE_SIZE
+};
+
+static const struct regset alphanbsd_fpregset =
+{
+  NULL,
+  alphanbsd_supply_fpregset
+};
+
+/* Iterate over supported core file register note sections. */
+
+void
+alphanbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
+					iterate_over_regset_sections_cb *cb,
+					void *cb_data,
+					const struct regcache *regcache)
+{
+  cb (".reg", ALPHANBSD_SIZEOF_GREGS, ALPHANBSD_SIZEOF_GREGS,
+      &alphanbsd_gregset, NULL, cb_data);
+  cb (".reg2", ALPHANBSD_SIZEOF_FPREGS, ALPHANBSD_SIZEOF_FPREGS,
+      &alphanbsd_fpregset, NULL, cb_data);
+}
+
+
+/* Signal trampolines.  */
+
+/* Under NetBSD/alpha, signal handler invocations can be identified by the
+   designated code sequence that is used to return from a signal handler.
+   In particular, the return address of a signal handler points to the
+   following code sequence:
+
+	ldq	a0, 0(sp)
+	lda	sp, 16(sp)
+	lda	v0, 295(zero)	# __sigreturn14
+	call_pal callsys
+
+   Each instruction has a unique encoding, so we simply attempt to match
+   the instruction the PC is pointing to with any of the above instructions.
+   If there is a hit, we know the offset to the start of the designated
+   sequence and can then check whether we really are executing in the
+   signal trampoline.  If not, -1 is returned, otherwise the offset from the
+   start of the return sequence is returned.  */
+static const gdb_byte sigtramp_retcode[] =
+{
+  0x00, 0x00, 0x1e, 0xa6,	/* ldq a0, 0(sp) */
+  0x10, 0x00, 0xde, 0x23,	/* lda sp, 16(sp) */
+  0x27, 0x01, 0x1f, 0x20,	/* lda v0, 295(zero) */
+  0x83, 0x00, 0x00, 0x00,	/* call_pal callsys */
+};
+#define RETCODE_NWORDS		4
+#define RETCODE_SIZE		(RETCODE_NWORDS * 4)
+
+static LONGEST
+alphanbsd_sigtramp_offset (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  gdb_byte ret[RETCODE_SIZE], w[4];
+  LONGEST off;
+  int i;
+
+  if (target_read_memory (pc, w, 4) != 0)
+    return -1;
+
+  for (i = 0; i < RETCODE_NWORDS; i++)
+    {
+      if (memcmp (w, sigtramp_retcode + (i * 4), 4) == 0)
+	break;
+    }
+  if (i == RETCODE_NWORDS)
+    return (-1);
+
+  off = i * 4;
+  pc -= off;
+
+  if (target_read_memory (pc, ret, sizeof (ret)) != 0)
+    return -1;
+
+  if (memcmp (ret, sigtramp_retcode, RETCODE_SIZE) == 0)
+    return off;
+
+  return -1;
+}
+
+static int
+alphanbsd_pc_in_sigtramp (struct gdbarch *gdbarch,
+		 	  CORE_ADDR pc, const char *func_name)
+{
+  return (nbsd_pc_in_sigtramp (pc, func_name)
+	  || alphanbsd_sigtramp_offset (gdbarch, pc) >= 0);
+}
+
+static CORE_ADDR
+alphanbsd_sigcontext_addr (frame_info_ptr frame)
+{
+  /* FIXME: This is not correct for all versions of NetBSD/alpha.
+     We will probably need to disassemble the trampoline to figure
+     out which trampoline frame type we have.  */
+  if (!get_next_frame (frame))
+    return 0;
+  return get_frame_base (get_next_frame (frame));
+}
+
+
+static void
+alphanbsd_init_abi (struct gdbarch_info info,
+		    struct gdbarch *gdbarch)
+{
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
+
+  /* Hook into the DWARF CFI frame unwinder.  */
+  alpha_dwarf2_init_abi (info, gdbarch);
+
+  /* Hook into the MDEBUG frame unwinder.  */
+  alpha_mdebug_init_abi (info, gdbarch);
+
+  nbsd_init_abi (info, gdbarch);
+
+  /* NetBSD/alpha does not provide single step support via ptrace(2); we
+     must use software single-stepping.  */
+  set_gdbarch_software_single_step (gdbarch, alpha_software_single_step);
+
+  /* NetBSD/alpha has SVR4-style shared libraries.  */
+  set_solib_svr4_fetch_link_map_offsets
+    (gdbarch, svr4_lp64_fetch_link_map_offsets);
+
+  tdep->dynamic_sigtramp_offset = alphanbsd_sigtramp_offset;
+  tdep->pc_in_sigtramp = alphanbsd_pc_in_sigtramp;
+  tdep->sigcontext_addr = alphanbsd_sigcontext_addr;
+
+  tdep->jb_pc = 2;
+  tdep->jb_elt_size = 8;
+
+  set_gdbarch_iterate_over_regset_sections
+    (gdbarch, alphanbsd_iterate_over_regset_sections);
+}
+
+
+void _initialize_alphanbsd_tdep ();
+void
+_initialize_alphanbsd_tdep ()
+{
+  /* Even though NetBSD/alpha used ELF since day one, it used the
+     traditional a.out-style core dump format before NetBSD 1.6, but
+     we don't support those.  */
+  gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_NETBSD,
+			  alphanbsd_init_abi);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-obsd-tdep.c ./gdb/alpha-obsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-obsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-obsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for OpenBSD/alpha.
 
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -69,7 +69,7 @@ alphaobsd_pc_in_sigtramp (struct gdbarch
 }
 
 static CORE_ADDR
-alphaobsd_sigcontext_addr (struct frame_info *this_frame)
+alphaobsd_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
@@ -97,7 +97,7 @@ alphaobsd_sigcontext_addr (struct frame_
 static void
 alphaobsd_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
 
   /* Hook into the DWARF CFI frame unwinder.  */
   alpha_dwarf2_init_abi (info, gdbarch);
@@ -126,9 +126,10 @@ alphaobsd_init_abi(struct gdbarch_info i
 }
 
 
+void _initialize_alphaobsd_tdep ();
 void
-_initialize_alphaobsd_tdep (void)
+_initialize_alphaobsd_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_OPENBSD,
-                          alphaobsd_init_abi);
+			  alphaobsd_init_abi);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-tdep.c ./gdb/alpha-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger.
 
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,7 @@
 #include "frame.h"
 #include "frame-unwind.h"
 #include "frame-base.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "inferior.h"
 #include "symtab.h"
 #include "value.h"
@@ -35,7 +35,6 @@
 #include "reggroups.h"
 #include "arch-utils.h"
 #include "osabi.h"
-#include "block.h"
 #include "infcall.h"
 #include "trad-frame.h"
 
@@ -99,10 +98,7 @@ alpha_register_name (struct gdbarch *gdb
     "pc",   "",     "unique"
   };
 
-  if (regno < 0)
-    return NULL;
-  if (regno >= ARRAY_SIZE(register_names))
-    return NULL;
+  static_assert (ALPHA_NUM_REGS == ARRAY_SIZE (register_names));
   return register_names[regno];
 }
 
@@ -116,7 +112,7 @@ static int
 alpha_cannot_store_register (struct gdbarch *gdbarch, int regno)
 {
   return (regno == ALPHA_ZERO_REGNUM
-          || strlen (alpha_register_name (gdbarch, regno)) == 0);
+	  || strlen (alpha_register_name (gdbarch, regno)) == 0);
 }
 
 static struct type *
@@ -139,12 +135,11 @@ alpha_register_type (struct gdbarch *gdb
 
 static int
 alpha_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
-			   struct reggroup *group)
+			   const struct reggroup *group)
 {
   /* Filter out any registers eliminated, but whose regnum is 
      reserved for backward compatibility, e.g. the vfp.  */
-  if (gdbarch_register_name (gdbarch, regnum) == NULL
-      || *gdbarch_register_name (gdbarch, regnum) == '\0')
+  if (*gdbarch_register_name (gdbarch, regnum) == '\0')
     return 0;
 
   if (group == all_reggroup)
@@ -234,11 +229,11 @@ alpha_convert_register_p (struct gdbarch
 			  struct type *type)
 {
   return (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31
-	  && TYPE_LENGTH (type) == 4);
+	  && type->length () == 4);
 }
 
 static int
-alpha_register_to_value (struct frame_info *frame, int regnum,
+alpha_register_to_value (frame_info_ptr frame, int regnum,
 			 struct type *valtype, gdb_byte *out,
 			int *optimizedp, int *unavailablep)
 {
@@ -246,8 +241,8 @@ alpha_register_to_value (struct frame_in
   struct value *value = get_frame_register_value (frame, regnum);
 
   gdb_assert (value != NULL);
-  *optimizedp = value_optimized_out (value);
-  *unavailablep = !value_entirely_available (value);
+  *optimizedp = value->optimized_out ();
+  *unavailablep = !value->entirely_available ();
 
   if (*optimizedp || *unavailablep)
     {
@@ -257,25 +252,26 @@ alpha_register_to_value (struct frame_in
 
   /* Convert to VALTYPE.  */
 
-  gdb_assert (TYPE_LENGTH (valtype) == 4);
-  alpha_sts (gdbarch, out, value_contents_all (value));
+  gdb_assert (valtype->length () == 4);
+  alpha_sts (gdbarch, out, value->contents_all ().data ());
 
   release_value (value);
   return 1;
 }
 
 static void
-alpha_value_to_register (struct frame_info *frame, int regnum,
+alpha_value_to_register (frame_info_ptr frame, int regnum,
 			 struct type *valtype, const gdb_byte *in)
 {
-  gdb_byte out[ALPHA_REGISTER_SIZE];
+  int reg_size = register_size (get_frame_arch (frame), regnum);
+  gdb_assert (valtype->length () == 4);
+  gdb_assert (reg_size <= ALPHA_REGISTER_SIZE);
 
-  gdb_assert (TYPE_LENGTH (valtype) == 4);
-  gdb_assert (register_size (get_frame_arch (frame), regnum)
-	      <= ALPHA_REGISTER_SIZE);
+  gdb_byte out[ALPHA_REGISTER_SIZE];
   alpha_lds (get_frame_arch (frame), out, in);
 
-  put_frame_register (frame, regnum, out);
+  auto out_view = gdb::make_array_view (out, reg_size);
+  put_frame_register (get_next_frame_sentinel_okay (frame), regnum, out_view);
 }
 
 
@@ -324,24 +320,24 @@ alpha_push_dummy_call (struct gdbarch *g
   for (i = 0, m_arg = alpha_args; i < nargs; i++, m_arg++)
     {
       struct value *arg = args[i];
-      struct type *arg_type = check_typedef (value_type (arg));
+      struct type *arg_type = check_typedef (arg->type ());
 
       /* Cast argument to long if necessary as the compiler does it too.  */
-      switch (TYPE_CODE (arg_type))
+      switch (arg_type->code ())
 	{
 	case TYPE_CODE_INT:
 	case TYPE_CODE_BOOL:
 	case TYPE_CODE_CHAR:
 	case TYPE_CODE_RANGE:
 	case TYPE_CODE_ENUM:
-	  if (TYPE_LENGTH (arg_type) == 4)
+	  if (arg_type->length () == 4)
 	    {
 	      /* 32-bit values must be sign-extended to 64 bits
 		 even if the base data type is unsigned.  */
 	      arg_type = builtin_type (gdbarch)->builtin_int32;
 	      arg = value_cast (arg_type, arg);
 	    }
-	  if (TYPE_LENGTH (arg_type) < ALPHA_REGISTER_SIZE)
+	  if (arg_type->length () < ALPHA_REGISTER_SIZE)
 	    {
 	      arg_type = builtin_type (gdbarch)->builtin_int64;
 	      arg = value_cast (arg_type, arg);
@@ -352,20 +348,20 @@ alpha_push_dummy_call (struct gdbarch *g
 	  /* "float" arguments loaded in registers must be passed in
 	     register format, aka "double".  */
 	  if (accumulate_size < sizeof (arg_reg_buffer)
-	      && TYPE_LENGTH (arg_type) == 4)
+	      && arg_type->length () == 4)
 	    {
 	      arg_type = builtin_type (gdbarch)->builtin_double;
 	      arg = value_cast (arg_type, arg);
 	    }
 	  /* Tru64 5.1 has a 128-bit long double, and passes this by
 	     invisible reference.  No one else uses this data type.  */
-	  else if (TYPE_LENGTH (arg_type) == 16)
+	  else if (arg_type->length () == 16)
 	    {
 	      /* Allocate aligned storage.  */
 	      sp = (sp & -16) - 16;
 
 	      /* Write the real data into the stack.  */
-	      write_memory (sp, value_contents (arg), 16);
+	      write_memory (sp, arg->contents ().data (), 16);
 
 	      /* Construct the indirection.  */
 	      arg_type = lookup_pointer_type (arg_type);
@@ -380,13 +376,13 @@ alpha_push_dummy_call (struct gdbarch *g
 
 	  /* Tru64 5.1 has a 128-bit long double, and passes this by
 	     invisible reference.  */
-	  if (TYPE_LENGTH (arg_type) == 32)
+	  if (arg_type->length () == 32)
 	    {
 	      /* Allocate aligned storage.  */
 	      sp = (sp & -16) - 16;
 
 	      /* Write the real data into the stack.  */
-	      write_memory (sp, value_contents (arg), 32);
+	      write_memory (sp, arg->contents ().data (), 32);
 
 	      /* Construct the indirection.  */
 	      arg_type = lookup_pointer_type (arg_type);
@@ -397,10 +393,10 @@ alpha_push_dummy_call (struct gdbarch *g
 	default:
 	  break;
 	}
-      m_arg->len = TYPE_LENGTH (arg_type);
+      m_arg->len = arg_type->length ();
       m_arg->offset = accumulate_size;
       accumulate_size = (accumulate_size + m_arg->len + 7) & ~7;
-      m_arg->contents = value_contents (arg);
+      m_arg->contents = arg->contents ().data ();
     }
 
   /* Determine required argument register loads, loading an argument register
@@ -478,10 +474,10 @@ alpha_extract_return_value (struct type
   gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
   ULONGEST l;
 
-  switch (TYPE_CODE (valtype))
+  switch (valtype->code ())
     {
     case TYPE_CODE_FLT:
-      switch (TYPE_LENGTH (valtype))
+      switch (valtype->length ())
 	{
 	case 4:
 	  regcache->cooked_read (ALPHA_FP0_REGNUM, raw_buffer);
@@ -498,13 +494,12 @@ alpha_extract_return_value (struct type
 	  break;
 
 	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("unknown floating point width"));
+	  internal_error (_("unknown floating point width"));
 	}
       break;
 
     case TYPE_CODE_COMPLEX:
-      switch (TYPE_LENGTH (valtype))
+      switch (valtype->length ())
 	{
 	case 8:
 	  /* ??? This isn't correct wrt the ABI, but it's what GCC does.  */
@@ -522,15 +517,14 @@ alpha_extract_return_value (struct type
 	  break;
 
 	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("unknown floating point width"));
+	  internal_error (_("unknown floating point width"));
 	}
       break;
 
     default:
       /* Assume everything else degenerates to an integer.  */
       regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l);
-      store_unsigned_integer (valbuf, TYPE_LENGTH (valtype), byte_order, l);
+      store_unsigned_integer (valbuf, valtype->length (), byte_order, l);
       break;
     }
 }
@@ -546,10 +540,10 @@ alpha_store_return_value (struct type *v
   gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
   ULONGEST l;
 
-  switch (TYPE_CODE (valtype))
+  switch (valtype->code ())
     {
     case TYPE_CODE_FLT:
-      switch (TYPE_LENGTH (valtype))
+      switch (valtype->length ())
 	{
 	case 4:
 	  alpha_lds (gdbarch, raw_buffer, valbuf);
@@ -567,13 +561,12 @@ alpha_store_return_value (struct type *v
 	  error (_("Cannot set a 128-bit long double return value."));
 
 	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("unknown floating point width"));
+	  internal_error (_("unknown floating point width"));
 	}
       break;
 
     case TYPE_CODE_COMPLEX:
-      switch (TYPE_LENGTH (valtype))
+      switch (valtype->length ())
 	{
 	case 8:
 	  /* ??? This isn't correct wrt the ABI, but it's what GCC does.  */
@@ -592,8 +585,7 @@ alpha_store_return_value (struct type *v
 	  error (_("Cannot set a 128-bit long double return value."));
 
 	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("unknown floating point width"));
+	  internal_error (_("unknown floating point width"));
 	}
       break;
 
@@ -601,7 +593,7 @@ alpha_store_return_value (struct type *v
       /* Assume everything else degenerates to an integer.  */
       /* 32-bit values must be sign-extended to 64 bits
 	 even if the base data type is unsigned.  */
-      if (TYPE_LENGTH (valtype) == 4)
+      if (valtype->length () == 4)
 	valtype = builtin_type (gdbarch)->builtin_int32;
       l = unpack_long (valtype, valbuf);
       regcache_cooked_write_unsigned (regcache, ALPHA_V0_REGNUM, l);
@@ -614,18 +606,19 @@ alpha_return_value (struct gdbarch *gdba
 		    struct type *type, struct regcache *regcache,
 		    gdb_byte *readbuf, const gdb_byte *writebuf)
 {
-  enum type_code code = TYPE_CODE (type);
+  enum type_code code = type->code ();
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
 
   if ((code == TYPE_CODE_STRUCT
        || code == TYPE_CODE_UNION
        || code == TYPE_CODE_ARRAY)
-      && gdbarch_tdep (gdbarch)->return_in_memory (type))
+      && tdep->return_in_memory (type))
     {
       if (readbuf)
 	{
 	  ULONGEST addr;
 	  regcache_raw_read_unsigned (regcache, ALPHA_V0_REGNUM, &addr);
-	  read_memory (addr, readbuf, TYPE_LENGTH (type));
+	  read_memory (addr, readbuf, type->length ());
 	}
 
       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
@@ -847,10 +840,10 @@ alpha_deal_with_atomic_sequence (struct
    into the "pc".  This routine returns true on success.  */
 
 static int
-alpha_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+alpha_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR jb_addr;
   gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
@@ -878,11 +871,10 @@ struct alpha_sigtramp_unwind_cache
 };
 
 static struct alpha_sigtramp_unwind_cache *
-alpha_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
+alpha_sigtramp_frame_unwind_cache (frame_info_ptr this_frame,
 				   void **this_prologue_cache)
 {
   struct alpha_sigtramp_unwind_cache *info;
-  struct gdbarch_tdep *tdep;
 
   if (*this_prologue_cache)
     return (struct alpha_sigtramp_unwind_cache *) *this_prologue_cache;
@@ -890,7 +882,8 @@ alpha_sigtramp_frame_unwind_cache (struc
   info = FRAME_OBSTACK_ZALLOC (struct alpha_sigtramp_unwind_cache);
   *this_prologue_cache = info;
 
-  tdep = gdbarch_tdep (get_frame_arch (this_frame));
+  gdbarch *arch = get_frame_arch (this_frame);
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (arch);
   info->sigcontext_addr = tdep->sigcontext_addr (this_frame);
 
   return info;
@@ -903,7 +896,7 @@ static CORE_ADDR
 alpha_sigtramp_register_address (struct gdbarch *gdbarch,
 				 CORE_ADDR sigcontext_addr, int regnum)
 { 
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
 
   if (regnum >= 0 && regnum < 32)
     return sigcontext_addr + tdep->sc_regs_offset + regnum * 8;
@@ -919,12 +912,12 @@ alpha_sigtramp_register_address (struct
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-alpha_sigtramp_frame_this_id (struct frame_info *this_frame,
+alpha_sigtramp_frame_this_id (frame_info_ptr this_frame,
 			      void **this_prologue_cache,
 			      struct frame_id *this_id)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
   struct alpha_sigtramp_unwind_cache *info
     = alpha_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
   CORE_ADDR stack_addr, code_addr;
@@ -961,7 +954,7 @@ alpha_sigtramp_frame_this_id (struct fra
 /* Retrieve the value of REGNUM in FRAME.  Don't give up!  */
 
 static struct value *
-alpha_sigtramp_frame_prev_register (struct frame_info *this_frame,
+alpha_sigtramp_frame_prev_register (frame_info_ptr this_frame,
 				    void **this_prologue_cache, int regnum)
 {
   struct alpha_sigtramp_unwind_cache *info
@@ -974,7 +967,7 @@ alpha_sigtramp_frame_prev_register (stru
       addr = alpha_sigtramp_register_address (get_frame_arch (this_frame),
 					      info->sigcontext_addr, regnum);
       if (addr != 0)
-        return frame_unwind_got_memory (this_frame, regnum, addr);
+	return frame_unwind_got_memory (this_frame, regnum, addr);
     }
 
   /* This extra register may actually be in the sigcontext, but our
@@ -986,8 +979,8 @@ alpha_sigtramp_frame_prev_register (stru
 
 static int
 alpha_sigtramp_frame_sniffer (const struct frame_unwind *self,
-                              struct frame_info *this_frame,
-                              void **this_prologue_cache)
+			      frame_info_ptr this_frame,
+			      void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
@@ -999,20 +992,24 @@ alpha_sigtramp_frame_sniffer (const stru
 
   /* We shouldn't even bother to try if the OSABI didn't register a
      sigcontext_addr handler or pc_in_sigtramp handler.  */
-  if (gdbarch_tdep (gdbarch)->sigcontext_addr == NULL)
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
+  if (tdep->sigcontext_addr == NULL)
     return 0;
-  if (gdbarch_tdep (gdbarch)->pc_in_sigtramp == NULL)
+
+  if (tdep->pc_in_sigtramp == NULL)
     return 0;
 
   /* Otherwise we should be in a signal frame.  */
   find_pc_partial_function (pc, &name, NULL, NULL);
-  if (gdbarch_tdep (gdbarch)->pc_in_sigtramp (gdbarch, pc, name))
+  if (tdep->pc_in_sigtramp (gdbarch, pc, name))
     return 1;
 
   return 0;
 }
 
-static const struct frame_unwind alpha_sigtramp_frame_unwind = {
+static const struct frame_unwind alpha_sigtramp_frame_unwind =
+{
+  "alpha sigtramp",
   SIGTRAMP_FRAME,
   default_frame_unwind_stop_reason,
   alpha_sigtramp_frame_this_id,
@@ -1036,7 +1033,7 @@ static int heuristic_fence_post = 0;
 static CORE_ADDR
 alpha_heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
   CORE_ADDR last_non_nop = pc;
   CORE_ADDR fence = pc - heuristic_fence_post;
   CORE_ADDR orig_pc = pc;
@@ -1097,7 +1094,7 @@ enclosing function for address %s"), pad
 
       if (!blurb_printed)
 	{
-	  printf_filtered (_("\
+	  gdb_printf (_("\
 This warning occurs if you are debugging a function without any symbols\n\
 (for example, in a stripped executable).  In that case, you may wish to\n\
 increase the size of the search with the `set heuristic-fence-post' command.\n\
@@ -1118,7 +1115,7 @@ struct alpha_heuristic_unwind_cache
 { 
   CORE_ADDR vfp;
   CORE_ADDR start_pc;
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
   int return_reg;
 };
 
@@ -1137,16 +1134,16 @@ alpha_heuristic_analyze_probing_loop (st
 
   /* The following pattern is recognized as a probing loop:
 
-        lda     REG_INDEX,NB_OF_ITERATIONS
-        lda     REG_PROBE,<immediate>(sp)
+	lda     REG_INDEX,NB_OF_ITERATIONS
+	lda     REG_PROBE,<immediate>(sp)
 
      LOOP_START:
-        stq     zero,<immediate>(REG_PROBE)
-        subq    REG_INDEX,0x1,REG_INDEX
-        lda     REG_PROBE,<immediate>(REG_PROBE)
-        bne     REG_INDEX, LOOP_START
+	stq     zero,<immediate>(REG_PROBE)
+	subq    REG_INDEX,0x1,REG_INDEX
+	lda     REG_PROBE,<immediate>(REG_PROBE)
+	bne     REG_INDEX, LOOP_START
  
-        lda     sp,<immediate>(REG_PROBE)
+	lda     sp,<immediate>(REG_PROBE)
 
      If anything different is found, the function returns without
      changing PC and FRAME_SIZE.  Otherwise, PC will point immediately
@@ -1224,7 +1221,7 @@ alpha_heuristic_analyze_probing_loop (st
 }
 
 static struct alpha_heuristic_unwind_cache *
-alpha_heuristic_frame_unwind_cache (struct frame_info *this_frame,
+alpha_heuristic_frame_unwind_cache (frame_info_ptr this_frame,
 				    void **this_prologue_cache,
 				    CORE_ADDR start_pc)
 {
@@ -1282,15 +1279,15 @@ alpha_heuristic_frame_unwind_cache (stru
 	    {
 	      reg = (word & 0x03e00000) >> 21;
 
-              /* Ignore this instruction if we have already encountered
-                 an instruction saving the same register earlier in the
-                 function code.  The current instruction does not tell
-                 us where the original value upon function entry is saved.
-                 All it says is that the function we are scanning reused
-                 that register for some computation of its own, and is now
-                 saving its result.  */
-              if (trad_frame_addr_p(info->saved_regs, reg))
-                continue;
+	      /* Ignore this instruction if we have already encountered
+		 an instruction saving the same register earlier in the
+		 function code.  The current instruction does not tell
+		 us where the original value upon function entry is saved.
+		 All it says is that the function we are scanning reused
+		 that register for some computation of its own, and is now
+		 saving its result.  */
+	      if (info->saved_regs[reg].is_addr ())
+		continue;
 
 	      if (reg == 31)
 		continue;
@@ -1305,7 +1302,7 @@ alpha_heuristic_frame_unwind_cache (stru
 		 pointer or not.  */
 	      /* Hack: temporarily add one, so that the offset is non-zero
 		 and we can tell which registers have save offsets below.  */
-	      info->saved_regs[reg].addr = (word & 0xffff) + 1;
+	      info->saved_regs[reg].set_addr ((word & 0xffff) + 1);
 
 	      /* Starting with OSF/1-3.2C, the system libraries are shipped
 		 without local symbols, but they still contain procedure
@@ -1385,13 +1382,14 @@ alpha_heuristic_frame_unwind_cache (stru
   /* Convert offsets to absolute addresses.  See above about adding
      one to the offsets to make all detected offsets non-zero.  */
   for (reg = 0; reg < ALPHA_NUM_REGS; ++reg)
-    if (trad_frame_addr_p(info->saved_regs, reg))
-      info->saved_regs[reg].addr += val - 1;
+    if (info->saved_regs[reg].is_addr ())
+      info->saved_regs[reg].set_addr (info->saved_regs[reg].addr ()
+				      + val - 1);
 
   /* The stack pointer of the previous frame is computed by popping
      the current stack frame.  */
-  if (!trad_frame_addr_p (info->saved_regs, ALPHA_SP_REGNUM))
-   trad_frame_set_value (info->saved_regs, ALPHA_SP_REGNUM, info->vfp);
+  if (!info->saved_regs[ALPHA_SP_REGNUM].is_addr ())
+   info->saved_regs[ALPHA_SP_REGNUM].set_value (info->vfp);
 
   return info;
 }
@@ -1400,7 +1398,7 @@ alpha_heuristic_frame_unwind_cache (stru
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-alpha_heuristic_frame_this_id (struct frame_info *this_frame,
+alpha_heuristic_frame_this_id (frame_info_ptr this_frame,
 			       void **this_prologue_cache,
 			       struct frame_id *this_id)
 {
@@ -1413,7 +1411,7 @@ alpha_heuristic_frame_this_id (struct fr
 /* Retrieve the value of REGNUM in FRAME.  Don't give up!  */
 
 static struct value *
-alpha_heuristic_frame_prev_register (struct frame_info *this_frame,
+alpha_heuristic_frame_prev_register (frame_info_ptr this_frame,
 				     void **this_prologue_cache, int regnum)
 {
   struct alpha_heuristic_unwind_cache *info
@@ -1428,7 +1426,9 @@ alpha_heuristic_frame_prev_register (str
   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
 }
 
-static const struct frame_unwind alpha_heuristic_frame_unwind = {
+static const struct frame_unwind alpha_heuristic_frame_unwind =
+{
+  "alpha prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   alpha_heuristic_frame_this_id,
@@ -1438,7 +1438,7 @@ static const struct frame_unwind alpha_h
 };
 
 static CORE_ADDR
-alpha_heuristic_frame_base_address (struct frame_info *this_frame,
+alpha_heuristic_frame_base_address (frame_info_ptr this_frame,
 				    void **this_prologue_cache)
 {
   struct alpha_heuristic_unwind_cache *info
@@ -1601,7 +1601,7 @@ alpha_next_pc (struct regcache *regcache
 	  || op == 0x34)	/* BSR */
 	{
  branch_taken:
-          offset = (insn & 0x001fffff);
+	  offset = (insn & 0x001fffff);
 	  if (offset & 0x00100000)
 	    offset  |= 0xffe00000;
 	  offset *= ALPHA_INSN_SIZE;
@@ -1611,14 +1611,14 @@ alpha_next_pc (struct regcache *regcache
       /* Need to determine if branch is taken; read RA.  */
       regno = (insn >> 21) & 0x1f;
       switch (op)
-        {
-          case 0x31:              /* FBEQ */
-          case 0x36:              /* FBGE */
-          case 0x37:              /* FBGT */
-          case 0x33:              /* FBLE */
-          case 0x32:              /* FBLT */
-          case 0x35:              /* FBNE */
-            regno += gdbarch_fp0_regnum (gdbarch);
+	{
+	  case 0x31:              /* FBEQ */
+	  case 0x36:              /* FBGE */
+	  case 0x37:              /* FBGT */
+	  case 0x33:              /* FBLE */
+	  case 0x32:              /* FBLT */
+	  case 0x35:              /* FBNE */
+	    regno += gdbarch_fp0_regnum (gdbarch);
 	}
       
       rav = regcache_raw_get_signed (regcache, regno);
@@ -1658,32 +1658,32 @@ alpha_next_pc (struct regcache *regcache
 	    goto branch_taken;
 	  break;
 
-        /* Floating point branches.  */
-        
-        case 0x31:              /* FBEQ */
-          if (fp_register_zero_p (rav))
-            goto branch_taken;
-          break;
-        case 0x36:              /* FBGE */
-          if (fp_register_sign_bit (rav) == 0 || fp_register_zero_p (rav))
-            goto branch_taken;
-          break;
-        case 0x37:              /* FBGT */
-          if (fp_register_sign_bit (rav) == 0 && ! fp_register_zero_p (rav))
-            goto branch_taken;
-          break;
-        case 0x33:              /* FBLE */
-          if (fp_register_sign_bit (rav) == 1 || fp_register_zero_p (rav))
-            goto branch_taken;
-          break;
-        case 0x32:              /* FBLT */
-          if (fp_register_sign_bit (rav) == 1 && ! fp_register_zero_p (rav))
-            goto branch_taken;
-          break;
-        case 0x35:              /* FBNE */
-          if (! fp_register_zero_p (rav))
-            goto branch_taken;
-          break;
+	/* Floating point branches.  */
+	
+	case 0x31:              /* FBEQ */
+	  if (fp_register_zero_p (rav))
+	    goto branch_taken;
+	  break;
+	case 0x36:              /* FBGE */
+	  if (fp_register_sign_bit (rav) == 0 || fp_register_zero_p (rav))
+	    goto branch_taken;
+	  break;
+	case 0x37:              /* FBGT */
+	  if (fp_register_sign_bit (rav) == 0 && ! fp_register_zero_p (rav))
+	    goto branch_taken;
+	  break;
+	case 0x33:              /* FBLE */
+	  if (fp_register_sign_bit (rav) == 1 || fp_register_zero_p (rav))
+	    goto branch_taken;
+	  break;
+	case 0x32:              /* FBLT */
+	  if (fp_register_sign_bit (rav) == 1 && ! fp_register_zero_p (rav))
+	    goto branch_taken;
+	  break;
+	case 0x35:              /* FBNE */
+	  if (! fp_register_zero_p (rav))
+	    goto branch_taken;
+	  break;
 	}
     }
 
@@ -1719,16 +1719,14 @@ alpha_software_single_step (struct regca
 static struct gdbarch *
 alpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
-  struct gdbarch_tdep *tdep;
-  struct gdbarch *gdbarch;
-
   /* Find a candidate among extant architectures.  */
   arches = gdbarch_list_lookup_by_info (arches, &info);
   if (arches != NULL)
     return arches->gdbarch;
 
-  tdep = XCNEW (struct gdbarch_tdep);
-  gdbarch = gdbarch_alloc (&info, tdep);
+  gdbarch *gdbarch
+    = gdbarch_alloc (&info, gdbarch_tdep_up (new alpha_gdbarch_tdep));
+  alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
 
   /* Lowest text address.  This is used by heuristic_proc_start()
      to decide when to stop looking.  */
@@ -1821,8 +1819,9 @@ alpha_dwarf2_init_abi (struct gdbarch_in
   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
 }
 
+void _initialize_alpha_tdep ();
 void
-_initialize_alpha_tdep (void)
+_initialize_alpha_tdep ()
 {
 
   gdbarch_register (bfd_arch_alpha, alpha_gdbarch_init, NULL);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-tdep.h ./gdb/alpha-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/alpha-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/alpha-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common target dependent code for GDB on Alpha systems.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,6 +19,8 @@
 #ifndef ALPHA_TDEP_H
 #define ALPHA_TDEP_H
 
+#include "gdbarch.h"
+
 struct regcache;
 
 /* Say how long (ordinary) registers are.  This is a piece of bogosity
@@ -68,38 +70,38 @@ struct regcache;
 #define ALPHA_NUM_ARG_REGS   6
 
 /* Target-dependent structure in gdbarch.  */
-struct gdbarch_tdep
+struct alpha_gdbarch_tdep : gdbarch_tdep_base
 {
-  CORE_ADDR vm_min_address;	/* Used by alpha_heuristic_proc_start.  */
+  CORE_ADDR vm_min_address = 0;	/* Used by alpha_heuristic_proc_start.  */
 
   /* If PC is inside a dynamically-generated signal trampoline function
      (i.e. one copied onto the user stack at run-time), return how many
      bytes PC is beyond the start of that function.  Otherwise, return -1.  */
-  LONGEST (*dynamic_sigtramp_offset) (struct gdbarch *, CORE_ADDR);
+  LONGEST (*dynamic_sigtramp_offset) (struct gdbarch *, CORE_ADDR) = nullptr;
 
   /* Translate a signal handler stack base address into the address of
      the sigcontext structure for that signal handler.  */
-  CORE_ADDR (*sigcontext_addr) (struct frame_info *);
+  CORE_ADDR (*sigcontext_addr) (frame_info_ptr) = nullptr;
 
   /* Does the PC fall in a signal trampoline.  */
   /* NOTE: cagney/2004-04-30: Do not copy/clone this code.  Instead
      look at tramp-frame.h and other simpler per-architecture
      sigtramp unwinders.  */
   int (*pc_in_sigtramp) (struct gdbarch *gdbarch, CORE_ADDR pc,
-			 const char *name);
+			 const char *name) = nullptr;
 
   /* If TYPE will be returned in memory, return true.  */
-  int (*return_in_memory) (struct type *type);
+  int (*return_in_memory) (struct type *type) = nullptr;
 
   /* Offset of registers in `struct sigcontext'.  */
-  int sc_pc_offset;
-  int sc_regs_offset;
-  int sc_fpregs_offset;
+  int sc_pc_offset = 0;
+  int sc_regs_offset = 0;
+  int sc_fpregs_offset = 0;
 
-  int jb_pc;			/* Offset to PC value in jump buffer.
+  int jb_pc = 0;			/* Offset to PC value in jump buffer.
 				   If htis is negative, longjmp support
 				   will be disabled.  */
-  size_t jb_elt_size;		/* And the size of each entry in the buf.  */
+  size_t jb_elt_size = 0;		/* And the size of each entry in the buf.  */
 };
 
 extern unsigned int alpha_read_insn (struct gdbarch *gdbarch, CORE_ADDR pc);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-bsd-nat.c ./gdb/amd64-bsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-bsd-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-bsd-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for AMD64 BSD's.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -33,8 +33,24 @@
 #include "amd64-nat.h"
 #include "x86-bsd-nat.h"
 #include "inf-ptrace.h"
+#include "amd64-bsd-nat.h"
 
 
+static PTRACE_TYPE_RET
+gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr,
+	    PTRACE_TYPE_ARG4 data)
+{
+#ifdef __NetBSD__
+  gdb_assert (data == 0);
+  /* Support for NetBSD threads: unlike other ptrace implementations in this
+     file, NetBSD requires that we pass both the pid and lwp.  */
+  return ptrace (request, ptid.pid (), addr, ptid.lwp ());
+#else
+  pid_t pid = get_ptrace_pid (ptid);
+  return ptrace (request, pid, addr, data);
+#endif
+}
+
 /* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
    for all registers (including the floating-point registers).  */
 
@@ -42,16 +58,13 @@ void
 amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
-#if defined(PT_GETFSBASE) || defined(PT_GETGSBASE)
-  const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-#endif
+  ptid_t ptid = regcache->ptid ();
 
   if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       struct reg regs;
 
-      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
+      if (gdb_ptrace (PT_GETREGS, ptid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
 	perror_with_name (_("Couldn't get registers"));
 
       amd64_supply_native_gregset (regcache, &regs, -1);
@@ -59,52 +72,11 @@ amd64bsd_fetch_inferior_registers (struc
 	return;
     }
 
-#ifdef PT_GETFSBASE
-  if (regnum == -1 || regnum == tdep->fsbase_regnum)
-    {
-      register_t base;
-
-      if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
-	perror_with_name (_("Couldn't get segment register fs_base"));
-
-      regcache->raw_supply (tdep->fsbase_regnum, &base);
-      if (regnum != -1)
-	return;
-    }
-#endif
-#ifdef PT_GETGSBASE
-  if (regnum == -1 || regnum == tdep->fsbase_regnum + 1)
-    {
-      register_t base;
-
-      if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
-	perror_with_name (_("Couldn't get segment register gs_base"));
-
-      regcache->raw_supply (tdep->fsbase_regnum + 1, &base);
-      if (regnum != -1)
-	return;
-    }
-#endif
-
   if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       struct fpreg fpregs;
-#ifdef PT_GETXSTATE_INFO
-      void *xstateregs;
 
-      if (x86bsd_xsave_len != 0)
-	{
-	  xstateregs = alloca (x86bsd_xsave_len);
-	  if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0)
-	      == -1)
-	    perror_with_name (_("Couldn't get extended state status"));
-
-	  amd64_supply_xsave (regcache, -1, xstateregs);
-	  return;
-	}
-#endif
-
-      if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+      if (gdb_ptrace (PT_GETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
 	perror_with_name (_("Couldn't get floating point status"));
 
       amd64_supply_fxsave (regcache, -1, &fpregs);
@@ -118,86 +90,34 @@ void
 amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
-#if defined(PT_SETFSBASE) || defined(PT_SETGSBASE)
-  const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-#endif
+  ptid_t ptid = regcache->ptid ();
 
   if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       struct reg regs;
 
-      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-        perror_with_name (_("Couldn't get registers"));
+      if (gdb_ptrace (PT_GETREGS, ptid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
+	perror_with_name (_("Couldn't get registers"));
 
       amd64_collect_native_gregset (regcache, &regs, regnum);
 
-      if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-        perror_with_name (_("Couldn't write registers"));
-
-      if (regnum != -1)
-	return;
-    }
-
-#ifdef PT_SETFSBASE
-  if (regnum == -1 || regnum == tdep->fsbase_regnum)
-    {
-      register_t base;
-
-      /* Clear the full base value to support 32-bit targets.  */
-      base = 0;
-      regcache->raw_collect (tdep->fsbase_regnum, &base);
+      if (gdb_ptrace (PT_SETREGS, ptid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
+	perror_with_name (_("Couldn't write registers"));
 
-      if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
-	perror_with_name (_("Couldn't write segment register fs_base"));
       if (regnum != -1)
 	return;
     }
-#endif
-#ifdef PT_SETGSBASE
-  if (regnum == -1 || regnum == tdep->fsbase_regnum + 1)
-    {
-      register_t base;
-
-      /* Clear the full base value to support 32-bit targets.  */
-      base = 0;
-      regcache->raw_collect (tdep->fsbase_regnum + 1, &base);
-
-      if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
-	perror_with_name (_("Couldn't write segment register gs_base"));
-      if (regnum != -1)
-	return;
-    }
-#endif
 
   if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       struct fpreg fpregs;
-#ifdef PT_GETXSTATE_INFO
-      void *xstateregs;
-
-      if (x86bsd_xsave_len != 0)
-	{
-	  xstateregs = alloca (x86bsd_xsave_len);
-	  if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0)
-	      == -1)
-	    perror_with_name (_("Couldn't get extended state status"));
-
-	  amd64_collect_xsave (regcache, regnum, xstateregs, 0);
-
-	  if (ptrace (PT_SETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs,
-		      x86bsd_xsave_len) == -1)
-	    perror_with_name (_("Couldn't write extended state status"));
-	  return;
-	}
-#endif
 
-      if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+      if (gdb_ptrace (PT_GETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
 	perror_with_name (_("Couldn't get floating point status"));
 
       amd64_collect_fxsave (regcache, regnum, &fpregs);
 
-      if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+      if (gdb_ptrace (PT_SETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
 	perror_with_name (_("Couldn't write floating point status"));
     }
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-bsd-nat.h ./gdb/amd64-bsd-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-bsd-nat.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-bsd-nat.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for modern AMD64 BSD's.
 
-   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-darwin-tdep.c ./gdb/amd64-darwin-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-darwin-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-darwin-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Darwin support for GDB, the GNU debugger.
-   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+   Copyright (C) 1997-2024 Free Software Foundation, Inc.
 
    Contributed by Apple Computer, Inc.
 
@@ -36,7 +36,7 @@
 #include "i386-darwin-tdep.h"
 #include "solib.h"
 #include "solib-darwin.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 
 /* Offsets into the struct x86_thread_state64 where we'll find the saved regs.
    From <mach/i386/thread_status.h> and amd64-tdep.h.  */
@@ -75,7 +75,7 @@ const int amd64_darwin_thread_state_num_
    address of the associated sigcontext structure.  */
 
 static CORE_ADDR
-amd64_darwin_sigcontext_addr (struct frame_info *this_frame)
+amd64_darwin_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -97,7 +97,7 @@ amd64_darwin_sigcontext_addr (struct fra
 static void
 x86_darwin_init_abi_64 (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   amd64_init_abi (info, gdbarch,
 		  amd64_target_description (X86_XSTATE_SSE_MASK, true));
@@ -113,12 +113,13 @@ x86_darwin_init_abi_64 (struct gdbarch_i
 
   tdep->jb_pc_offset = 56;
 
-  set_solib_ops (gdbarch, &darwin_so_ops);
+  set_gdbarch_so_ops (gdbarch, &darwin_so_ops);
 }
 
+void _initialize_amd64_darwin_tdep ();
 void
-_initialize_amd64_darwin_tdep (void)
+_initialize_amd64_darwin_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
-                          GDB_OSABI_DARWIN, x86_darwin_init_abi_64);
+			  GDB_OSABI_DARWIN, x86_darwin_init_abi_64);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-darwin-tdep.h ./gdb/amd64-darwin-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-darwin-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-darwin-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Darwin x86-64.
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-dicos-tdep.c ./gdb/amd64-dicos-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-dicos-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-dicos-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for DICOS running on x86-64's, for GDB.
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -46,8 +46,9 @@ amd64_dicos_osabi_sniffer (bfd *abfd)
   return GDB_OSABI_UNKNOWN;
 }
 
+void _initialize_amd64_dicos_tdep ();
 void
-_initialize_amd64_dicos_tdep (void)
+_initialize_amd64_dicos_tdep ()
 {
   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
 				  amd64_dicos_osabi_sniffer);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-fbsd-nat.c ./gdb/amd64-fbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-fbsd-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-fbsd-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for FreeBSD/amd64.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,83 +29,222 @@
 #include <sys/user.h>
 #include <machine/reg.h>
 
-#include "fbsd-nat.h"
 #include "amd64-tdep.h"
+#include "amd64-fbsd-tdep.h"
+#include "i387-tdep.h"
 #include "amd64-nat.h"
-#include "amd64-bsd-nat.h"
 #include "x86-nat.h"
-#include "gdbsupport/x86-xstate.h"
-
+#include "x86-fbsd-nat.h"
 
-class amd64_fbsd_nat_target final
-  : public amd64_bsd_nat_target<fbsd_nat_target>
+class amd64_fbsd_nat_target final : public x86_fbsd_nat_target
 {
 public:
-  /* Add some extra features to the common *BSD/amd64 target.  */
-  const struct target_desc *read_description () override;
+  void fetch_registers (struct regcache *, int) override;
+  void store_registers (struct regcache *, int) override;
 
-#if defined(HAVE_PT_GETDBREGS) && defined(USE_SIGTRAP_SIGINFO)
-  bool supports_stopped_by_hw_breakpoint () override;
-#endif
+  const struct target_desc *read_description () override;
 };
 
 static amd64_fbsd_nat_target the_amd64_fbsd_nat_target;
 
-/* Offset in `struct reg' where MEMBER is stored.  */
-#define REG_OFFSET(member) offsetof (struct reg, member)
+/* This is a layout of the amd64 'struct reg' but with i386
+   registers.  */
 
-/* At amd64fbsd64_r_reg_offset[REGNUM] you'll find the offset in
-   `struct reg' location where the GDB register REGNUM is stored.
-   Unsupported registers are marked with `-1'.  */
-static int amd64fbsd64_r_reg_offset[] =
+static const struct regcache_map_entry amd64_fbsd32_gregmap[] =
 {
-  REG_OFFSET (r_rax),
-  REG_OFFSET (r_rbx),
-  REG_OFFSET (r_rcx),
-  REG_OFFSET (r_rdx),
-  REG_OFFSET (r_rsi),
-  REG_OFFSET (r_rdi),
-  REG_OFFSET (r_rbp),
-  REG_OFFSET (r_rsp),
-  REG_OFFSET (r_r8),
-  REG_OFFSET (r_r9),
-  REG_OFFSET (r_r10),
-  REG_OFFSET (r_r11),
-  REG_OFFSET (r_r12),
-  REG_OFFSET (r_r13),
-  REG_OFFSET (r_r14),
-  REG_OFFSET (r_r15),
-  REG_OFFSET (r_rip),
-  REG_OFFSET (r_rflags),
-  REG_OFFSET (r_cs),
-  REG_OFFSET (r_ss),
-  -1,
-  -1,
-  -1,
-  -1
+  { 8, REGCACHE_MAP_SKIP, 8 },
+  { 1, I386_EDI_REGNUM, 8 },
+  { 1, I386_ESI_REGNUM, 8 },
+  { 1, I386_EBP_REGNUM, 8 },
+  { 1, I386_EBX_REGNUM, 8 },
+  { 1, I386_EDX_REGNUM, 8 },
+  { 1, I386_ECX_REGNUM, 8 },
+  { 1, I386_EAX_REGNUM, 8 },
+  { 1, REGCACHE_MAP_SKIP, 4 },	/* trapno */
+  { 1, I386_FS_REGNUM, 2 },
+  { 1, I386_GS_REGNUM, 2 },
+  { 1, REGCACHE_MAP_SKIP, 4 },	/* err */
+  { 1, I386_ES_REGNUM, 2 },
+  { 1, I386_DS_REGNUM, 2 },
+  { 1, I386_EIP_REGNUM, 8 },
+  { 1, I386_CS_REGNUM, 8 },
+  { 1, I386_EFLAGS_REGNUM, 8 },
+  { 1, I386_ESP_REGNUM, 0 },
+  { 1, I386_SS_REGNUM, 8 },
+  { 0 }
 };
-
-
-/* Mapping between the general-purpose registers in FreeBSD/amd64
-   `struct reg' format and GDB's register cache layout for
-   FreeBSD/i386.
-
-   Note that most FreeBSD/amd64 registers are 64-bit, while the
-   FreeBSD/i386 registers are all 32-bit, but since we're
-   little-endian we get away with that.  */
 
-/* From <machine/reg.h>.  */
-static int amd64fbsd32_r_reg_offset[I386_NUM_GREGS] =
+static const struct regset amd64_fbsd32_gregset =
 {
-  14 * 8, 13 * 8,		/* %eax, %ecx */
-  12 * 8, 11 * 8,		/* %edx, %ebx */
-  20 * 8, 10 * 8,		/* %esp, %ebp */
-  9 * 8, 8 * 8,			/* %esi, %edi */
-  17 * 8, 19 * 8,		/* %eip, %eflags */
-  18 * 8, 21 * 8,		/* %cs, %ss */
-  -1, -1, -1, -1		/* %ds, %es, %fs, %gs */
+  amd64_fbsd32_gregmap, regcache_supply_regset, regcache_collect_regset
 };
-
+
+/* Return the regset to use for 'struct reg' for the GDBARCH.  */
+
+static const struct regset *
+find_gregset (struct gdbarch *gdbarch)
+{
+  if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
+    return &amd64_fbsd32_gregset;
+  else
+    return &amd64_fbsd_gregset;
+}
+
+/* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
+   for all registers.  */
+
+void
+amd64_fbsd_nat_target::fetch_registers (struct regcache *regcache, int regnum)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+#if defined(PT_GETFSBASE) || defined(PT_GETGSBASE)
+  const i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
+#endif
+  pid_t pid = get_ptrace_pid (regcache->ptid ());
+  const struct regset *gregset = find_gregset (gdbarch);
+
+  if (fetch_register_set<struct reg> (regcache, regnum, PT_GETREGS, gregset))
+    {
+      if (regnum != -1)
+	return;
+    }
+
+#ifdef PT_GETFSBASE
+  if (regnum == -1 || regnum == tdep->fsbase_regnum)
+    {
+      register_t base;
+
+      if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+	perror_with_name (_("Couldn't get segment register fs_base"));
+
+      regcache->raw_supply (tdep->fsbase_regnum, &base);
+      if (regnum != -1)
+	return;
+    }
+#endif
+#ifdef PT_GETGSBASE
+  if (regnum == -1 || regnum == tdep->fsbase_regnum + 1)
+    {
+      register_t base;
+
+      if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+	perror_with_name (_("Couldn't get segment register gs_base"));
+
+      regcache->raw_supply (tdep->fsbase_regnum + 1, &base);
+      if (regnum != -1)
+	return;
+    }
+#endif
+
+  /* There is no amd64_fxsave_supplies or amd64_xsave_supplies.
+     Instead, the earlier register sets return early if the request
+     was for a specific register that was already satisified to avoid
+     fetching the FPU/XSAVE state unnecessarily.  */
+
+#ifdef PT_GETXSTATE_INFO
+  if (m_xsave_info.xsave_len != 0)
+    {
+      void *xstateregs = alloca (m_xsave_info.xsave_len);
+
+      if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
+	perror_with_name (_("Couldn't get extended state status"));
+
+      amd64_supply_xsave (regcache, regnum, xstateregs);
+      return;
+    }
+#endif
+
+  struct fpreg fpregs;
+
+  if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+    perror_with_name (_("Couldn't get floating point status"));
+
+  amd64_supply_fxsave (regcache, regnum, &fpregs);
+}
+
+/* Store register REGNUM back into the inferior.  If REGNUM is -1, do
+   this for all registers.  */
+
+void
+amd64_fbsd_nat_target::store_registers (struct regcache *regcache, int regnum)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+#if defined(PT_GETFSBASE) || defined(PT_GETGSBASE)
+  const i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
+#endif
+  pid_t pid = get_ptrace_pid (regcache->ptid ());
+  const struct regset *gregset = find_gregset (gdbarch);
+
+  if (store_register_set<struct reg> (regcache, regnum, PT_GETREGS, PT_SETREGS,
+				      gregset))
+    {
+      if (regnum != -1)
+	return;
+    }
+
+#ifdef PT_SETFSBASE
+  if (regnum == -1 || regnum == tdep->fsbase_regnum)
+    {
+      register_t base;
+
+      /* Clear the full base value to support 32-bit targets.  */
+      base = 0;
+      regcache->raw_collect (tdep->fsbase_regnum, &base);
+
+      if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+	perror_with_name (_("Couldn't write segment register fs_base"));
+      if (regnum != -1)
+	return;
+    }
+#endif
+#ifdef PT_SETGSBASE
+  if (regnum == -1 || regnum == tdep->fsbase_regnum + 1)
+    {
+      register_t base;
+
+      /* Clear the full base value to support 32-bit targets.  */
+      base = 0;
+      regcache->raw_collect (tdep->fsbase_regnum + 1, &base);
+
+      if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+	perror_with_name (_("Couldn't write segment register gs_base"));
+      if (regnum != -1)
+	return;
+    }
+#endif
+
+  /* There is no amd64_fxsave_supplies or amd64_xsave_supplies.
+     Instead, the earlier register sets return early if the request
+     was for a specific register that was already satisified to avoid
+     fetching the FPU/XSAVE state unnecessarily.  */
+
+#ifdef PT_GETXSTATE_INFO
+  if (m_xsave_info.xsave_len != 0)
+    {
+      void *xstateregs = alloca (m_xsave_info.xsave_len);
+
+      if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
+	perror_with_name (_("Couldn't get extended state status"));
+
+      amd64_collect_xsave (regcache, regnum, xstateregs, 0);
+
+      if (ptrace (PT_SETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs,
+		  m_xsave_info.xsave_len) == -1)
+	perror_with_name (_("Couldn't write extended state status"));
+      return;
+    }
+#endif
+
+  struct fpreg fpregs;
+
+  if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+    perror_with_name (_("Couldn't get floating point status"));
+
+  amd64_collect_fxsave (regcache, regnum, &fpregs);
+
+  if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
+    perror_with_name (_("Couldn't write floating point status"));
+}
 
 /* Support for debugging kernel virtual memory images.  */
 
@@ -160,37 +299,24 @@ amd64fbsd_supply_pcb (struct regcache *r
 const struct target_desc *
 amd64_fbsd_nat_target::read_description ()
 {
-#ifdef PT_GETXSTATE_INFO
-  static int xsave_probed;
-  static uint64_t xcr0;
-#endif
   struct reg regs;
   int is64;
 
+  if (inferior_ptid == null_ptid)
+    return this->beneath ()->read_description ();
+
   if (ptrace (PT_GETREGS, inferior_ptid.pid (),
 	      (PTRACE_TYPE_ARG3) &regs, 0) == -1)
     perror_with_name (_("Couldn't get registers"));
   is64 = (regs.r_cs == GSEL (GUCODE_SEL, SEL_UPL));
 #ifdef PT_GETXSTATE_INFO
-  if (!xsave_probed)
-    {
-      struct ptrace_xstate_info info;
-
-      if (ptrace (PT_GETXSTATE_INFO, inferior_ptid.pid (),
-		  (PTRACE_TYPE_ARG3) &info, sizeof (info)) == 0)
-	{
-	  x86bsd_xsave_len = info.xsave_len;
-	  xcr0 = info.xsave_mask;
-	}
-      xsave_probed = 1;
-    }
-
-  if (x86bsd_xsave_len != 0)
+  probe_xsave_layout (inferior_ptid.pid ());
+  if (m_xsave_info.xsave_len != 0)
     {
       if (is64)
-	return amd64_target_description (xcr0, true);
+	return amd64_target_description (m_xsave_info.xsave_mask, true);
       else
-	return i386_target_description (xcr0, true);
+	return i386_target_description (m_xsave_info.xsave_mask, true);
     }
 #endif
   if (is64)
@@ -199,110 +325,12 @@ amd64_fbsd_nat_target::read_description
     return i386_target_description (X86_XSTATE_SSE_MASK, true);
 }
 
-#if defined(HAVE_PT_GETDBREGS) && defined(USE_SIGTRAP_SIGINFO)
-/* Implement the supports_stopped_by_hw_breakpoints method.  */
-
-bool
-amd64_fbsd_nat_target::supports_stopped_by_hw_breakpoint ()
-{
-  return true;
-}
-#endif
-
+void _initialize_amd64fbsd_nat ();
 void
-_initialize_amd64fbsd_nat (void)
+_initialize_amd64fbsd_nat ()
 {
-  int offset;
-
-  amd64_native_gregset32_reg_offset = amd64fbsd32_r_reg_offset;
-  amd64_native_gregset64_reg_offset = amd64fbsd64_r_reg_offset;
-
   add_inf_child_target (&the_amd64_fbsd_nat_target);
 
   /* Support debugging kernel virtual memory images.  */
   bsd_kvm_add_target (amd64fbsd_supply_pcb);
-
-  /* To support the recognition of signal handlers, i386-bsd-tdep.c
-     hardcodes some constants.  Inclusion of this file means that we
-     are compiling a native debugger, which means that we can use the
-     system header files and sysctl(3) to get at the relevant
-     information.  */
-
-#define SC_REG_OFFSET amd64fbsd_sc_reg_offset
-
-  /* We only check the program counter, stack pointer and frame
-     pointer since these members of `struct sigcontext' are essential
-     for providing backtraces.  */
-
-#define SC_RIP_OFFSET SC_REG_OFFSET[AMD64_RIP_REGNUM]
-#define SC_RSP_OFFSET SC_REG_OFFSET[AMD64_RSP_REGNUM]
-#define SC_RBP_OFFSET SC_REG_OFFSET[AMD64_RBP_REGNUM]
-
-  /* Override the default value for the offset of the program counter
-     in the sigcontext structure.  */
-  offset = offsetof (struct sigcontext, sc_rip);
-
-  if (SC_RIP_OFFSET != offset)
-    {
-      warning (_("\
-offsetof (struct sigcontext, sc_rip) yields %d instead of %d.\n\
-Please report this to <bug-gdb@gnu.org>."),
-	       offset, SC_RIP_OFFSET);
-    }
-
-  SC_RIP_OFFSET = offset;
-
-  /* Likewise for the stack pointer.  */
-  offset = offsetof (struct sigcontext, sc_rsp);
-
-  if (SC_RSP_OFFSET != offset)
-    {
-      warning (_("\
-offsetof (struct sigcontext, sc_rsp) yields %d instead of %d.\n\
-Please report this to <bug-gdb@gnu.org>."),
-	       offset, SC_RSP_OFFSET);
-    }
-
-  SC_RSP_OFFSET = offset;
-
-  /* And the frame pointer.  */
-  offset = offsetof (struct sigcontext, sc_rbp);
-
-  if (SC_RBP_OFFSET != offset)
-    {
-      warning (_("\
-offsetof (struct sigcontext, sc_rbp) yields %d instead of %d.\n\
-Please report this to <bug-gdb@gnu.org>."),
-	       offset, SC_RBP_OFFSET);
-    }
-
-  SC_RBP_OFFSET = offset;
-
-#ifdef KERN_PROC_SIGTRAMP
-  /* Normally signal frames are detected via amd64fbsd_sigtramp_p.
-     However, FreeBSD 9.2 through 10.1 do not include the page holding
-     the signal code in core dumps.  These releases do provide a
-     kern.proc.sigtramp.<pid> sysctl that returns the location of the
-     signal trampoline for a running process.  We fetch the location
-     of the current (gdb) process and use this to identify signal
-     frames in core dumps from these releases.  Note that this only
-     works for core dumps of 64-bit (FreeBSD/amd64) processes and does
-     not handle core dumps of 32-bit (FreeBSD/i386) processes.  */
-  {
-    int mib[4];
-    struct kinfo_sigtramp kst;
-    size_t len;
-
-    mib[0] = CTL_KERN;
-    mib[1] = KERN_PROC;
-    mib[2] = KERN_PROC_SIGTRAMP;
-    mib[3] = getpid ();
-    len = sizeof (kst);
-    if (sysctl (mib, 4, &kst, &len, NULL, 0) == 0)
-      {
-	amd64fbsd_sigtramp_start_addr = (uintptr_t) kst.ksigtramp_start;
-	amd64fbsd_sigtramp_end_addr = (uintptr_t) kst.ksigtramp_end;
-      }
-  }
-#endif
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-fbsd-tdep.c ./gdb/amd64-fbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-fbsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-fbsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD/amd64.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,135 +18,203 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "arch-utils.h"
-#include "frame.h"
-#include "gdbcore.h"
-#include "regcache.h"
 #include "osabi.h"
 #include "regset.h"
+#include "target.h"
+#include "trad-frame.h"
+#include "tramp-frame.h"
 #include "i386-fbsd-tdep.h"
 #include "gdbsupport/x86-xstate.h"
 
 #include "amd64-tdep.h"
+#include "amd64-fbsd-tdep.h"
 #include "fbsd-tdep.h"
 #include "solib-svr4.h"
+#include "inferior.h"
 
-/* Support for signal handlers.  */
+/* The general-purpose regset consists of 22 64-bit slots, most of
+   which contain individual registers, but a few contain multiple
+   16-bit segment registers.  */
+#define AMD64_FBSD_SIZEOF_GREGSET	(22 * 8)
+
+/* The segment base register set consists of 2 64-bit registers.  */
+#define AMD64_FBSD_SIZEOF_SEGBASES_REGSET	(2 * 8)
+
+/* Register maps.  */
+
+static const struct regcache_map_entry amd64_fbsd_gregmap[] =
+{
+  { 1, AMD64_R15_REGNUM, 0 },
+  { 1, AMD64_R14_REGNUM, 0 },
+  { 1, AMD64_R13_REGNUM, 0 },
+  { 1, AMD64_R12_REGNUM, 0 },
+  { 1, AMD64_R11_REGNUM, 0 },
+  { 1, AMD64_R10_REGNUM, 0 },
+  { 1, AMD64_R9_REGNUM, 0 },
+  { 1, AMD64_R8_REGNUM, 0 },
+  { 1, AMD64_RDI_REGNUM, 0 },
+  { 1, AMD64_RSI_REGNUM, 0 },
+  { 1, AMD64_RBP_REGNUM, 0 },
+  { 1, AMD64_RBX_REGNUM, 0 },
+  { 1, AMD64_RDX_REGNUM, 0 },
+  { 1, AMD64_RCX_REGNUM, 0 },
+  { 1, AMD64_RAX_REGNUM, 0 },
+  { 1, REGCACHE_MAP_SKIP, 4 },	/* trapno */
+  { 1, AMD64_FS_REGNUM, 2 },
+  { 1, AMD64_GS_REGNUM, 2 },
+  { 1, REGCACHE_MAP_SKIP, 4 },	/* err */
+  { 1, AMD64_ES_REGNUM, 2 },
+  { 1, AMD64_DS_REGNUM, 2 },
+  { 1, AMD64_RIP_REGNUM, 0 },
+  { 1, AMD64_CS_REGNUM, 8 },
+  { 1, AMD64_EFLAGS_REGNUM, 8 },
+  { 1, AMD64_RSP_REGNUM, 0 },
+  { 1, AMD64_SS_REGNUM, 8 },
+  { 0 }
+};
+
+static const struct regcache_map_entry amd64_fbsd_segbases_regmap[] =
+{
+  { 1, AMD64_FSBASE_REGNUM, 0 },
+  { 1, AMD64_GSBASE_REGNUM, 0 },
+  { 0 }
+};
 
-/* Return whether THIS_FRAME corresponds to a FreeBSD sigtramp
-   routine.  */
+/* This layout including fsbase and gsbase was adopted in FreeBSD
+   8.0.  */
 
-static const gdb_byte amd64fbsd_sigtramp_code[] =
+static const struct regcache_map_entry amd64_fbsd_mcregmap[] =
 {
-  0x48, 0x8d, 0x7c, 0x24, 0x10, /* lea     SIGF_UC(%rsp),%rdi */
-  0x6a, 0x00,			/* pushq   $0 */
-  0x48, 0xc7, 0xc0, 0xa1, 0x01, 0x00, 0x00,
-				/* movq    $SYS_sigreturn,%rax */
-  0x0f, 0x05                    /* syscall */
+  { 1, REGCACHE_MAP_SKIP, 8 },	/* mc_onstack */
+  { 1, AMD64_RDI_REGNUM, 0 },
+  { 1, AMD64_RSI_REGNUM, 0 },
+  { 1, AMD64_RDX_REGNUM, 0 },
+  { 1, AMD64_RCX_REGNUM, 0 },
+  { 1, AMD64_R8_REGNUM, 0 },
+  { 1, AMD64_R9_REGNUM, 0 },
+  { 1, AMD64_RAX_REGNUM, 0 },
+  { 1, AMD64_RBX_REGNUM, 0 },
+  { 1, AMD64_RBP_REGNUM, 0 },
+  { 1, AMD64_R10_REGNUM, 0 },
+  { 1, AMD64_R11_REGNUM, 0 },
+  { 1, AMD64_R12_REGNUM, 0 },
+  { 1, AMD64_R13_REGNUM, 0 },
+  { 1, AMD64_R14_REGNUM, 0 },
+  { 1, AMD64_R15_REGNUM, 0 },
+  { 1, REGCACHE_MAP_SKIP, 4 },	/* mc_trapno */
+  { 1, AMD64_FS_REGNUM, 2 },
+  { 1, AMD64_GS_REGNUM, 2 },
+  { 1, REGCACHE_MAP_SKIP, 8 },	/* mc_addr */
+  { 1, REGCACHE_MAP_SKIP, 4 },	/* mc_flags */
+  { 1, AMD64_ES_REGNUM, 2 },
+  { 1, AMD64_DS_REGNUM, 2 },
+  { 1, REGCACHE_MAP_SKIP, 8 },	/* mc_err */
+  { 1, AMD64_RIP_REGNUM, 0 },
+  { 1, AMD64_CS_REGNUM, 8 },
+  { 1, AMD64_EFLAGS_REGNUM, 8 },
+  { 1, AMD64_RSP_REGNUM, 0 },
+  { 1, AMD64_SS_REGNUM, 8 },
+  { 1, REGCACHE_MAP_SKIP, 8 },	/* mc_len */
+  { 1, REGCACHE_MAP_SKIP, 8 },	/* mc_fpformat */
+  { 1, REGCACHE_MAP_SKIP, 8 },	/* mc_ownedfp */
+  { 64, REGCACHE_MAP_SKIP, 8 },	/* mc_fpstate */
+  { 1, AMD64_FSBASE_REGNUM, 0 },
+  { 1, AMD64_GSBASE_REGNUM, 0 },
+  { 0 }
 };
 
-static int
-amd64fbsd_sigtramp_p (struct frame_info *this_frame)
+/* Register set definitions.  */
+
+const struct regset amd64_fbsd_gregset =
 {
-  CORE_ADDR pc = get_frame_pc (this_frame);
-  gdb_byte buf[sizeof amd64fbsd_sigtramp_code];
+  amd64_fbsd_gregmap, regcache_supply_regset, regcache_collect_regset
+};
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
-    return 0;
-  if (memcmp (buf, amd64fbsd_sigtramp_code, sizeof amd64fbsd_sigtramp_code)
-      != 0)
-    return 0;
+const struct regset amd64_fbsd_segbases_regset =
+{
+  amd64_fbsd_segbases_regmap, regcache_supply_regset, regcache_collect_regset
+};
 
-  return 1;
-}
+/* Support for signal handlers.  */
 
-/* Assuming THIS_FRAME is for a BSD sigtramp routine, return the
-   address of the associated sigcontext structure.  */
+/* In a signal frame, rsp points to a 'struct sigframe' which is
+   defined as:
 
-static CORE_ADDR
-amd64fbsd_sigcontext_addr (struct frame_info *this_frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  CORE_ADDR sp;
-  gdb_byte buf[8];
-
-  /* The `struct sigcontext' (which really is an `ucontext_t' on
-     FreeBSD/amd64) lives at a fixed offset in the signal frame.  See
-     <machine/sigframe.h>.  */
-  get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
-  sp = extract_unsigned_integer (buf, 8, byte_order);
-  return sp + 16;
-}
-
-/* FreeBSD 5.1-RELEASE or later.  */
+   struct sigframe {
+	union {
+		__siginfohandler_t	*sf_action;
+		__sighandler_t		*sf_handler;
+	} sf_ahu;
+	ucontext_t	sf_uc;
+	...
+   }
+
+   ucontext_t is defined as:
+
+   struct __ucontext {
+	   sigset_t	uc_sigmask;
+	   mcontext_t	uc_mcontext;
+	   ...
+   };
+
+   The mcontext_t contains the general purpose register set as well
+   as the floating point or XSAVE state.  */
+
+/* NB: There is an 8 byte padding hole between sf_ahu and sf_uc. */
+#define AMD64_SIGFRAME_UCONTEXT_OFFSET 		16
+#define AMD64_UCONTEXT_MCONTEXT_OFFSET		16
+#define AMD64_SIZEOF_MCONTEXT_T			800
 
-/* Mapping between the general-purpose registers in `struct reg'
-   format and GDB's register cache layout.
+/* Implement the "init" method of struct tramp_frame.  */
 
-   Note that some registers are 32-bit, but since we're little-endian
-   we get away with that.  */
+static void
+amd64_fbsd_sigframe_init (const struct tramp_frame *self,
+			  frame_info_ptr this_frame,
+			  struct trad_frame_cache *this_cache,
+			  CORE_ADDR func)
+{
+  CORE_ADDR sp = get_frame_register_unsigned (this_frame, AMD64_RSP_REGNUM);
+  CORE_ADDR mcontext_addr
+    = (sp
+       + AMD64_SIGFRAME_UCONTEXT_OFFSET
+       + AMD64_UCONTEXT_MCONTEXT_OFFSET);
+
+  trad_frame_set_reg_regmap (this_cache, amd64_fbsd_mcregmap, mcontext_addr,
+			     AMD64_SIZEOF_MCONTEXT_T);
+
+  /* Don't bother with floating point or XSAVE state for now.  The
+     current helper routines for parsing FXSAVE and XSAVE state only
+     work with regcaches.  This could perhaps create a temporary
+     regcache, collect the register values from mc_fpstate and
+     mc_xfpustate, and then set register values in the trad_frame.  */
 
-/* From <machine/reg.h>.  */
-static int amd64fbsd_r_reg_offset[] =
-{
-  14 * 8,			/* %rax */
-  11 * 8,			/* %rbx */
-  13 * 8,			/* %rcx */
-  12 * 8,			/* %rdx */
-  9 * 8,			/* %rsi */
-  8 * 8,			/* %rdi */
-  10 * 8,			/* %rbp */
-  20 * 8,			/* %rsp */
-  7 * 8,			/* %r8 ...  */
-  6 * 8,
-  5 * 8,
-  4 * 8,
-  3 * 8,
-  2 * 8,
-  1 * 8,
-  0 * 8,			/* ... %r15 */
-  17 * 8,			/* %rip */
-  19 * 8,			/* %eflags */
-  18 * 8,			/* %cs */
-  21 * 8,			/* %ss */
-  -1,				/* %ds */
-  -1,				/* %es */
-  -1,				/* %fs */
-  -1				/* %gs */
-};
+  trad_frame_set_id (this_cache, frame_id_build (sp, func));
+}
 
-/* Location of the signal trampoline.  */
-CORE_ADDR amd64fbsd_sigtramp_start_addr;
-CORE_ADDR amd64fbsd_sigtramp_end_addr;
-
-/* From <machine/signal.h>.  */
-int amd64fbsd_sc_reg_offset[] =
-{
-  24 + 6 * 8,			/* %rax */
-  24 + 7 * 8,			/* %rbx */
-  24 + 3 * 8,			/* %rcx */
-  24 + 2 * 8,			/* %rdx */
-  24 + 1 * 8,			/* %rsi */
-  24 + 0 * 8,			/* %rdi */
-  24 + 8 * 8,			/* %rbp */
-  24 + 22 * 8,			/* %rsp */
-  24 + 4 * 8,			/* %r8 ...  */
-  24 + 5 * 8,
-  24 + 9 * 8,
-  24 + 10 * 8,
-  24 + 11 * 8,
-  24 + 12 * 8,
-  24 + 13 * 8,
-  24 + 14 * 8,			/* ... %r15 */
-  24 + 19 * 8,			/* %rip */
-  24 + 21 * 8,			/* %eflags */
-  24 + 20 * 8,			/* %cs */
-  24 + 23 * 8,			/* %ss */
-  -1,				/* %ds */
-  -1,				/* %es */
-  -1,				/* %fs */
-  -1				/* %gs */
+static const struct tramp_frame amd64_fbsd_sigframe =
+{
+  SIGTRAMP_FRAME,
+  1,
+  {
+    {0x48, ULONGEST_MAX},		/* lea	   SIGF_UC(%rsp),%rdi */
+    {0x8d, ULONGEST_MAX},
+    {0x7c, ULONGEST_MAX},
+    {0x24, ULONGEST_MAX},
+    {0x10, ULONGEST_MAX},
+    {0x6a, ULONGEST_MAX},		/* pushq   $0 */
+    {0x00, ULONGEST_MAX},
+    {0x48, ULONGEST_MAX},		/* movq	   $SYS_sigreturn,%rax */
+    {0xc7, ULONGEST_MAX},
+    {0xc0, ULONGEST_MAX},
+    {0xa1, ULONGEST_MAX},
+    {0x01, ULONGEST_MAX},
+    {0x00, ULONGEST_MAX},
+    {0x00, ULONGEST_MAX},
+    {0x0f, ULONGEST_MAX},		/* syscall */
+    {0x05, ULONGEST_MAX},
+    {TRAMP_SENTINEL_INSN, ULONGEST_MAX}
+  },
+  amd64_fbsd_sigframe_init
 };
 
 /* Implement the core_read_description gdbarch method.  */
@@ -156,7 +224,12 @@ amd64fbsd_core_read_description (struct
 				 struct target_ops *target,
 				 bfd *abfd)
 {
-  return amd64_target_description (i386fbsd_core_read_xcr0 (abfd), true);
+  x86_xsave_layout layout;
+  uint64_t xcr0 = i386_fbsd_core_read_xsave_info (abfd, layout);
+  if (xcr0 == 0)
+    xcr0 = X86_XSTATE_SSE_MASK;
+
+  return amd64_target_description (xcr0, true);
 }
 
 /* Similar to amd64_supply_fpregset, but use XSAVE extended state.  */
@@ -194,14 +267,19 @@ amd64fbsd_iterate_over_regset_sections (
 					void *cb_data,
 					const struct regcache *regcache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
-  cb (".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, &i386_gregset, NULL,
-      cb_data);
+  cb (".reg", AMD64_FBSD_SIZEOF_GREGSET, AMD64_FBSD_SIZEOF_GREGSET,
+      &amd64_fbsd_gregset, NULL, cb_data);
   cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, &amd64_fpregset,
       NULL, cb_data);
-  cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0), X86_XSTATE_SIZE (tdep->xcr0),
-      &amd64fbsd_xstateregset, "XSAVE extended state", cb_data);
+  cb (".reg-x86-segbases", AMD64_FBSD_SIZEOF_SEGBASES_REGSET,
+      AMD64_FBSD_SIZEOF_SEGBASES_REGSET, &amd64_fbsd_segbases_regset,
+      "segment bases", cb_data);
+  if (tdep->xsave_layout.sizeof_xsave != 0)
+    cb (".reg-xstate", tdep->xsave_layout.sizeof_xsave,
+	tdep->xsave_layout.sizeof_xsave, &amd64fbsd_xstateregset,
+	"XSAVE extended state", cb_data);
 }
 
 /* Implement the get_thread_local_address gdbarch method.  */
@@ -210,9 +288,8 @@ static CORE_ADDR
 amd64fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid,
 				    CORE_ADDR lm_addr, CORE_ADDR offset)
 {
-  struct regcache *regcache;
-
-  regcache = get_thread_arch_regcache (ptid, gdbarch);
+  regcache *regcache
+    = get_thread_arch_regcache (current_inferior (), ptid, gdbarch);
 
   target_fetch_registers (regcache, AMD64_FSBASE_REGNUM);
 
@@ -227,7 +304,7 @@ amd64fbsd_get_thread_local_address (stru
 static void
 amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   /* Generic FreeBSD support. */
   fbsd_init_abi (info, gdbarch);
@@ -235,21 +312,14 @@ amd64fbsd_init_abi (struct gdbarch_info
   /* Obviously FreeBSD is BSD-based.  */
   i386bsd_init_abi (info, gdbarch);
 
-  tdep->gregset_reg_offset = amd64fbsd_r_reg_offset;
-  tdep->gregset_num_regs = ARRAY_SIZE (amd64fbsd_r_reg_offset);
-  tdep->sizeof_gregset = 22 * 8;
-
   amd64_init_abi (info, gdbarch,
 		  amd64_target_description (X86_XSTATE_SSE_MASK, true));
 
-  tdep->sigtramp_p = amd64fbsd_sigtramp_p;
-  tdep->sigtramp_start = amd64fbsd_sigtramp_start_addr;
-  tdep->sigtramp_end = amd64fbsd_sigtramp_end_addr;
-  tdep->sigcontext_addr = amd64fbsd_sigcontext_addr;
-  tdep->sc_reg_offset = amd64fbsd_sc_reg_offset;
-  tdep->sc_num_regs = ARRAY_SIZE (amd64fbsd_sc_reg_offset);
+  tramp_frame_prepend_unwinder (gdbarch, &amd64_fbsd_sigframe);
 
   tdep->xsave_xcr0_offset = I386_FBSD_XSAVE_XCR0_OFFSET;
+  set_gdbarch_core_read_x86_xsave_layout
+    (gdbarch, i386_fbsd_core_read_x86_xsave_layout);
 
   /* Iterate over core file register note sections.  */
   set_gdbarch_iterate_over_regset_sections
@@ -268,8 +338,9 @@ amd64fbsd_init_abi (struct gdbarch_info
 					amd64fbsd_get_thread_local_address);
 }
 
+void _initialize_amd64fbsd_tdep ();
 void
-_initialize_amd64fbsd_tdep (void)
+_initialize_amd64fbsd_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
 			  GDB_OSABI_FREEBSD, amd64fbsd_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-fbsd-tdep.h ./gdb/amd64-fbsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-fbsd-tdep.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd64-fbsd-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,27 @@
+/* FreeBSD/amd64 target support, prototypes.
+
+   Copyright (C) 2021-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef AMD64_FBSD_TDEP_H
+#define AMD64_FBSD_TDEP_H
+
+#include "regset.h"
+
+extern const struct regset amd64_fbsd_gregset;
+
+#endif /* AMD64_FBSD_TDEP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-linux-nat.c ./gdb/amd64-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-linux-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-linux-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for GNU/Linux x86-64.
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Contributed by Jiri Smid, SuSE Labs.
 
    This file is part of GDB.
@@ -99,7 +99,7 @@ static int amd64_linux_gregset32_reg_off
 
 static void
 amd64_linux_collect_native_gregset (const struct regcache *regcache,
-			            void *gregs, int regnum)
+				    void *gregs, int regnum)
 {
   amd64_collect_native_gregset (regcache, gregs, regnum);
 
@@ -210,6 +210,7 @@ void
 amd64_linux_nat_target::fetch_registers (struct regcache *regcache, int regnum)
 {
   struct gdbarch *gdbarch = regcache->arch ();
+  const i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   int tid;
 
   /* GNU/Linux LWP ID's are process ID's.  */
@@ -235,7 +236,7 @@ amd64_linux_nat_target::fetch_registers
 
       if (have_ptrace_getregset == TRIBOOL_TRUE)
 	{
-	  char xstateregs[X86_XSTATE_MAX_SIZE];
+	  char xstateregs[tdep->xsave_layout.sizeof_xsave];
 	  struct iovec iov;
 
 	  /* Pre-4.14 kernels have a bug (fixed by commit 0852b374173b
@@ -259,30 +260,6 @@ amd64_linux_nat_target::fetch_registers
 
 	  amd64_supply_fxsave (regcache, -1, &fpregs);
 	}
-#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
-      {
-	/* PTRACE_ARCH_PRCTL is obsolete since 2.6.25, where the
-	   fs_base and gs_base fields of user_regs_struct can be
-	   used directly.  */
-	unsigned long base;
-
-	if (regnum == -1 || regnum == AMD64_FSBASE_REGNUM)
-	  {
-	    if (ptrace (PTRACE_ARCH_PRCTL, tid, &base, ARCH_GET_FS) < 0)
-	      perror_with_name (_("Couldn't get segment register fs_base"));
-
-	    regcache->raw_supply (AMD64_FSBASE_REGNUM, &base);
-	  }
-
-	if (regnum == -1 || regnum == AMD64_GSBASE_REGNUM)
-	  {
-	    if (ptrace (PTRACE_ARCH_PRCTL, tid, &base, ARCH_GET_GS) < 0)
-	      perror_with_name (_("Couldn't get segment register gs_base"));
-
-	    regcache->raw_supply (AMD64_GSBASE_REGNUM, &base);
-	  }
-      }
-#endif
     }
 }
 
@@ -294,6 +271,7 @@ void
 amd64_linux_nat_target::store_registers (struct regcache *regcache, int regnum)
 {
   struct gdbarch *gdbarch = regcache->arch ();
+  const i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   int tid;
 
   /* GNU/Linux LWP ID's are process ID's.  */
@@ -323,7 +301,7 @@ amd64_linux_nat_target::store_registers
 
       if (have_ptrace_getregset == TRIBOOL_TRUE)
 	{
-	  char xstateregs[X86_XSTATE_MAX_SIZE];
+	  char xstateregs[tdep->xsave_layout.sizeof_xsave];
 	  struct iovec iov;
 
 	  iov.iov_base = xstateregs;
@@ -348,30 +326,6 @@ amd64_linux_nat_target::store_registers
 	  if (ptrace (PTRACE_SETFPREGS, tid, 0, (long) &fpregs) < 0)
 	    perror_with_name (_("Couldn't write floating point status"));
 	}
-
-#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
-      {
-	/* PTRACE_ARCH_PRCTL is obsolete since 2.6.25, where the
-	   fs_base and gs_base fields of user_regs_struct can be
-	   used directly.  */
-	void *base;
-
-	if (regnum == -1 || regnum == AMD64_FSBASE_REGNUM)
-	  {
-	    regcache->raw_collect (AMD64_FSBASE_REGNUM, &base);
-
-	    if (ptrace (PTRACE_ARCH_PRCTL, tid, base, ARCH_SET_FS) < 0)
-	      perror_with_name (_("Couldn't write segment register fs_base"));
-	  }
-	if (regnum == -1 || regnum == AMD64_GSBASE_REGNUM)
-	  {
-
-	    regcache->raw_collect (AMD64_GSBASE_REGNUM, &base);
-	    if (ptrace (PTRACE_ARCH_PRCTL, tid, base, ARCH_SET_GS) < 0)
-	      perror_with_name (_("Couldn't write segment register gs_base"));
-	  }
-      }
-#endif
     }
 }
 
@@ -381,9 +335,9 @@ amd64_linux_nat_target::store_registers
 
 ps_err_e
 ps_get_thread_area (struct ps_prochandle *ph,
-                    lwpid_t lwpid, int idx, void **base)
+		    lwpid_t lwpid, int idx, void **base)
 {
-  if (gdbarch_bfd_arch_info (target_gdbarch ())->bits_per_word == 32)
+  if (gdbarch_bfd_arch_info (ph->thread->inf->arch ())->bits_per_word == 32)
     {
       unsigned int base_addr;
       ps_err_e result;
@@ -408,11 +362,7 @@ ps_get_thread_area (struct ps_prochandle
       switch (idx)
 	{
 	case FS:
-#ifdef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
 	    {
-	      /* PTRACE_ARCH_PRCTL is obsolete since 2.6.25, where the
-		 fs_base and gs_base fields of user_regs_struct can be
-		 used directly.  */
 	      unsigned long fs;
 	      errno = 0;
 	      fs = ptrace (PTRACE_PEEKUSER, lwpid,
@@ -423,12 +373,10 @@ ps_get_thread_area (struct ps_prochandle
 		  return PS_OK;
 		}
 	    }
-#endif
-	  if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0)
-	    return PS_OK;
+
 	  break;
+
 	case GS:
-#ifdef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE
 	    {
 	      unsigned long gs;
 	      errno = 0;
@@ -440,10 +388,8 @@ ps_get_thread_area (struct ps_prochandle
 		  return PS_OK;
 		}
 	    }
-#endif
-	  if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0)
-	    return PS_OK;
 	  break;
+
 	default:                   /* Should not happen.  */
 	  return PS_BADADDR;
 	}
@@ -478,8 +424,9 @@ amd64_linux_nat_target::low_siginfo_fixu
     return false;
 }
 
+void _initialize_amd64_linux_nat ();
 void
-_initialize_amd64_linux_nat (void)
+_initialize_amd64_linux_nat ()
 {
   amd64_native_gregset32_reg_offset = amd64_linux_gregset32_reg_offset;
   amd64_native_gregset32_num_regs = I386_LINUX_NUM_REGS;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-linux-tdep.c ./gdb/amd64-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-linux-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-linux-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux x86-64.
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Contributed by Jiri Smid, SuSE Labs.
 
    This file is part of GDB.
@@ -41,6 +41,7 @@
 #include "glibc-tdep.h"
 #include "arch/amd64.h"
 #include "target-descriptions.h"
+#include "expop.h"
 
 /* The syscall's XML filename for i386.  */
 #define XML_SYSCALL_FILENAME_AMD64 "syscalls/amd64-linux.xml"
@@ -132,7 +133,7 @@ static const gdb_byte amd64_x32_linux_si
    the routine.  Otherwise, return 0.  */
 
 static CORE_ADDR
-amd64_linux_sigtramp_start (struct frame_info *this_frame)
+amd64_linux_sigtramp_start (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch;
   const gdb_byte *sigtramp_code;
@@ -146,7 +147,7 @@ amd64_linux_sigtramp_start (struct frame
      PC is not at the start of the instruction sequence, there will be
      a few trailing readable bytes on the stack.  */
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (buf[0] != LINUX_SIGTRAMP_INSN0)
@@ -155,7 +156,7 @@ amd64_linux_sigtramp_start (struct frame
 	return 0;
 
       pc -= LINUX_SIGTRAMP_OFFSET1;
-      if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
+      if (!safe_frame_unwind_memory (this_frame, pc, buf))
 	return 0;
     }
 
@@ -174,7 +175,7 @@ amd64_linux_sigtramp_start (struct frame
    routine.  */
 
 static int
-amd64_linux_sigtramp_p (struct frame_info *this_frame)
+amd64_linux_sigtramp_p (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   const char *name;
@@ -200,7 +201,7 @@ amd64_linux_sigtramp_p (struct frame_inf
    address of the associated sigcontext structure.  */
 
 static CORE_ADDR
-amd64_linux_sigcontext_addr (struct frame_info *this_frame)
+amd64_linux_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -236,7 +237,7 @@ amd64_linux_get_syscall_number (struct g
      is stored at %rax register.  */
   regcache->cooked_read (AMD64_LINUX_ORIG_RAX_REGNUM, buf);
 
-  ret = extract_signed_integer (buf, 8, byte_order);
+  ret = extract_signed_integer (buf, byte_order);
 
   return ret;
 }
@@ -278,14 +279,12 @@ static int amd64_linux_sc_reg_offset[] =
 
 static int
 amd64_linux_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
-				 struct reggroup *group)
+				 const struct reggroup *group)
 { 
-  if (regnum == AMD64_LINUX_ORIG_RAX_REGNUM
-      || regnum == AMD64_FSBASE_REGNUM
-      || regnum == AMD64_GSBASE_REGNUM)
+  if (regnum == AMD64_LINUX_ORIG_RAX_REGNUM)
     return (group == system_reggroup
-            || group == save_reggroup
-            || group == restore_reggroup);
+	    || group == save_reggroup
+	    || group == restore_reggroup);
   return i386_register_reggroup_p (gdbarch, regnum, group);
 }
 
@@ -459,6 +458,12 @@ amd64_canonicalize_syscall (enum amd64_s
   case amd64_x32_sys_pipe:
     return gdb_sys_pipe;
 
+  case amd64_sys_pipe2:
+    return gdb_sys_pipe2;
+
+  case amd64_sys_getrandom:
+    return gdb_sys_getrandom;
+
   case amd64_sys_select:
   case amd64_x32_sys_select:
     return gdb_sys_select;
@@ -1464,7 +1469,7 @@ amd64_linux_syscall_record_common (struc
     case amd64_sys_rt_sigreturn:
     case amd64_x32_sys_rt_sigreturn:
       if (amd64_all_but_ip_registers_record (regcache))
-        return -1;
+	return -1;
       return 0;
       break;
 
@@ -1495,17 +1500,18 @@ amd64_linux_syscall_record_common (struc
 
   if (syscall_gdb == gdb_sys_no_syscall)
     {
-      printf_unfiltered (_("Process record and replay target doesn't "
-                           "support syscall number %s\n"), 
-			 pulongest (syscall_native));
+      gdb_printf (gdb_stderr,
+		  _("Process record and replay target doesn't "
+		    "support syscall number %s\n"), 
+		  pulongest (syscall_native));
       return -1;
     }
   else
     {
       ret = record_linux_system_call (syscall_gdb, regcache,
-                                      linux_record_tdep_p);
+				      linux_record_tdep_p);
       if (ret)
-        return ret;
+	return ret;
     }
 
  record_regs:
@@ -1538,8 +1544,8 @@ amd64_x32_linux_syscall_record (struct r
 
 static int
 amd64_linux_record_signal (struct gdbarch *gdbarch,
-                           struct regcache *regcache,
-                           enum gdb_signal signal)
+			   struct regcache *regcache,
+			   enum gdb_signal signal)
 {
   ULONGEST rsp;
 
@@ -1561,8 +1567,8 @@ amd64_linux_record_signal (struct gdbarc
      sp -= sizeof (struct rt_sigframe);  */
   rsp -= AMD64_LINUX_frame_size;
   if (record_full_arch_list_add_mem (rsp, AMD64_LINUX_redzone
-                                     + AMD64_LINUX_xstate
-                                     + AMD64_LINUX_frame_size))
+				     + AMD64_LINUX_xstate
+				     + AMD64_LINUX_frame_size))
     return -1;
 
   if (record_full_arch_list_add_end ())
@@ -1576,14 +1582,16 @@ amd64_linux_read_description (uint64_t x
 {
   static target_desc *amd64_linux_tdescs \
     [2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/] = {};
-  static target_desc *x32_linux_tdescs[2/*AVX*/][2/*AVX512*/] = {};
+  static target_desc *x32_linux_tdescs \
+    [2/*AVX*/][2/*AVX512*/][2/*PKRU*/] = {};
 
   target_desc **tdesc;
 
   if (is_x32)
     {
       tdesc = &x32_linux_tdescs[(xcr0_features_bit & X86_XSTATE_AVX) ? 1 : 0 ]
-	[(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0];
+	[(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0]
+	[(xcr0_features_bit & X86_XSTATE_PKRU) ? 1 : 0];
     }
   else
     {
@@ -1608,7 +1616,10 @@ amd64_linux_core_read_description (struc
 				  bfd *abfd)
 {
   /* Linux/x86-64.  */
-  uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd);
+  x86_xsave_layout layout;
+  uint64_t xcr0 = i386_linux_core_read_xsave_info (abfd, layout);
+  if (xcr0 == 0)
+    xcr0 = X86_XSTATE_SSE_MASK;
 
   return amd64_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK,
 				       gdbarch_ptr_bit (gdbarch) == 32);
@@ -1649,12 +1660,14 @@ amd64_linux_iterate_over_regset_sections
 					  void *cb_data,
 					  const struct regcache *regcache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   cb (".reg", 27 * 8, 27 * 8, &i386_gregset, NULL, cb_data);
   cb (".reg2", 512, 512, &amd64_fpregset, NULL, cb_data);
-  cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0), X86_XSTATE_SIZE (tdep->xcr0),
-      &amd64_linux_xstateregset, "XSAVE extended state", cb_data);
+  if (tdep->xsave_layout.sizeof_xsave != 0)
+    cb (".reg-xstate", tdep->xsave_layout.sizeof_xsave,
+	tdep->xsave_layout.sizeof_xsave, &amd64_linux_xstateregset,
+	"XSAVE extended state", cb_data);
 }
 
 /* The instruction sequences used in x86_64 machines for a
@@ -1733,17 +1746,16 @@ amd64_dtrace_disable_probe (struct gdbar
 /* Implementation of `gdbarch_dtrace_parse_probe_argument', as defined
    in gdbarch.h.  */
 
-static void
+static expr::operation_up
 amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch,
-				   struct expr_builder *builder,
 				   int narg)
 {
-  struct stoken str;
-
   /* DTrace probe arguments can be found on the ABI-defined places for
      regular arguments at the current PC.  The probe abstraction
      currently supports up to 12 arguments for probes.  */
 
+  using namespace expr;
+
   if (narg < 6)
     {
       static const int arg_reg_map[6] =
@@ -1757,12 +1769,7 @@ amd64_dtrace_parse_probe_argument (struc
 	};
       int regno = arg_reg_map[narg];
       const char *regname = user_reg_map_regnum_to_name (gdbarch, regno);
-
-      write_exp_elt_opcode (builder, OP_REGISTER);
-      str.ptr = regname;
-      str.length = strlen (regname);
-      write_exp_string (builder, str);
-      write_exp_elt_opcode (builder, OP_REGISTER);
+      return make_operation<register_operation> (regname);
     }
   else
     {
@@ -1770,36 +1777,31 @@ amd64_dtrace_parse_probe_argument (struc
       const char *regname = user_reg_map_regnum_to_name (gdbarch, AMD64_RSP_REGNUM);
 
       /* Displacement.  */
-      write_exp_elt_opcode (builder, OP_LONG);
-      write_exp_elt_type (builder, builtin_type (gdbarch)->builtin_long);
-      write_exp_elt_longcst (builder, narg - 6);
-      write_exp_elt_opcode (builder, OP_LONG);
+      struct type *long_type = builtin_type (gdbarch)->builtin_long;
+      operation_up disp	= make_operation<long_const_operation> (long_type,
+								narg - 6);
 
       /* Register: SP.  */
-      write_exp_elt_opcode (builder, OP_REGISTER);
-      str.ptr = regname;
-      str.length = strlen (regname);
-      write_exp_string (builder, str);
-      write_exp_elt_opcode (builder, OP_REGISTER);
+      operation_up reg = make_operation<register_operation> (regname);
 
-      write_exp_elt_opcode (builder, BINOP_ADD);
+      operation_up add = make_operation<add_operation> (std::move (disp),
+							std::move (reg));
 
       /* Cast to long. */
-      write_exp_elt_opcode (builder, UNOP_CAST);
-      write_exp_elt_type (builder,
-			  lookup_pointer_type (builtin_type (gdbarch)->builtin_long));
-      write_exp_elt_opcode (builder, UNOP_CAST);
+      operation_up cast = make_operation<unop_cast_operation> (std::move (add),
+							       long_type);
 
-      write_exp_elt_opcode (builder, UNOP_IND);
+      return make_operation<unop_ind_operation> (std::move (cast));
     }
 }
 
 static void
-amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch)
+amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch,
+			    int num_disp_step_buffers)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, num_disp_step_buffers);
 
   tdep->sigtramp_p = amd64_linux_sigtramp_p;
   tdep->sigcontext_addr = amd64_linux_sigcontext_addr;
@@ -1807,6 +1809,8 @@ amd64_linux_init_abi_common(struct gdbar
   tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset);
 
   tdep->xsave_xcr0_offset = I386_LINUX_XSAVE_XCR0_OFFSET;
+  set_gdbarch_core_read_x86_xsave_layout
+    (gdbarch, i386_linux_core_read_x86_xsave_layout);
 
   /* Add the %orig_rax register used for syscall restarting.  */
   set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc);
@@ -1816,11 +1820,11 @@ amd64_linux_init_abi_common(struct gdbar
   /* Functions for 'catch syscall'.  */
   set_xml_syscall_file_name (gdbarch, XML_SYSCALL_FILENAME_AMD64);
   set_gdbarch_get_syscall_number (gdbarch,
-                                  amd64_linux_get_syscall_number);
+				  amd64_linux_get_syscall_number);
 
   /* Enable TLS support.  */
   set_gdbarch_fetch_tls_load_module_address (gdbarch,
-                                             svr4_fetch_objfile_link_map);
+					     svr4_fetch_objfile_link_map);
 
   /* GNU/Linux uses SVR4-style shared libraries.  */
   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
@@ -1837,23 +1841,20 @@ amd64_linux_init_abi_common(struct gdbar
 
   /* Displaced stepping.  */
   set_gdbarch_displaced_step_copy_insn (gdbarch,
-                                        amd64_displaced_step_copy_insn);
+					amd64_displaced_step_copy_insn);
   set_gdbarch_displaced_step_fixup (gdbarch, amd64_displaced_step_fixup);
-  set_gdbarch_displaced_step_location (gdbarch,
-                                       linux_displaced_step_location);
 
   set_gdbarch_process_record (gdbarch, i386_process_record);
   set_gdbarch_process_record_signal (gdbarch, amd64_linux_record_signal);
 
   set_gdbarch_get_siginfo_type (gdbarch, x86_linux_get_siginfo_type);
-  set_gdbarch_handle_segmentation_fault (gdbarch,
-					 i386_linux_handle_segmentation_fault);
+  set_gdbarch_report_signal_info (gdbarch, i386_linux_report_signal_info);
 }
 
 static void
 amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   struct tdesc_arch_data *tdesc_data = info.tdesc_data;
   const struct tdesc_feature *feature;
   int valid_p;
@@ -1882,7 +1883,7 @@ amd64_linux_init_abi (struct gdbarch_inf
   if (!valid_p)
     return;
 
-  amd64_linux_init_abi_common (info, gdbarch);
+  amd64_linux_init_abi_common (info, gdbarch, 2);
 
   /* Initialize the amd64_linux_record_tdep.  */
   /* These values are the size of the type that will be used in a system
@@ -2055,7 +2056,7 @@ amd64_linux_init_abi (struct gdbarch_inf
 
   /* GNU/Linux uses SVR4-style shared libraries.  */
   set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_lp64_fetch_link_map_offsets);
+    (gdbarch, linux_lp64_fetch_link_map_offsets);
 
   /* Register DTrace handlers.  */
   set_gdbarch_dtrace_parse_probe_argument (gdbarch, amd64_dtrace_parse_probe_argument);
@@ -2067,7 +2068,7 @@ amd64_linux_init_abi (struct gdbarch_inf
 static void
 amd64_x32_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   struct tdesc_arch_data *tdesc_data = info.tdesc_data;
   const struct tdesc_feature *feature;
   int valid_p;
@@ -2097,7 +2098,7 @@ amd64_x32_linux_init_abi (struct gdbarch
   if (!valid_p)
     return;
 
-  amd64_linux_init_abi_common (info, gdbarch);
+  amd64_linux_init_abi_common (info, gdbarch, 0);
 
   /* Initialize the amd64_x32_linux_record_tdep.  */
   /* These values are the size of the type that will be used in a system
@@ -2269,11 +2270,12 @@ amd64_x32_linux_init_abi (struct gdbarch
 
   /* GNU/Linux uses SVR4-style shared libraries.  */
   set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
+    (gdbarch, linux_ilp32_fetch_link_map_offsets);
 }
 
+void _initialize_amd64_linux_tdep ();
 void
-_initialize_amd64_linux_tdep (void)
+_initialize_amd64_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
 			  GDB_OSABI_LINUX, amd64_linux_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-linux-tdep.h ./gdb/amd64-linux-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-linux-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-linux-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux AMD64.
 
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -320,6 +320,8 @@ enum amd64_syscall {
   amd64_sys_sync_file_range = 277,
   amd64_sys_vmsplice = 278,
   amd64_sys_move_pages = 279,
+  amd64_sys_pipe2 = 293,
+  amd64_sys_getrandom = 318
 };
 
 /* Enum that defines the syscall identifiers for x32 linux.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-nat.c ./gdb/amd64-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for AMD64.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -68,13 +68,6 @@ amd64_native_gregset_reg_offset (struct
   if (regnum >= num_regs)
     return -1;
 
-  /* Kernels that predate Linux 2.6.25 don't provide access to
-     these segment registers in user_regs_struct.   */
-#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
-  if (regnum == AMD64_FSBASE_REGNUM || regnum == AMD64_GSBASE_REGNUM)
-    return -1;
-#endif
-
   return reg_offset[regnum];
 }
 
@@ -136,7 +129,7 @@ amd64_collect_native_gregset (const stru
       num_regs = amd64_native_gregset32_num_regs;
 
       /* Make sure %eax, %ebx, %ecx, %edx, %esi, %edi, %ebp, %esp and
-         %eip get zero-extended to 64 bits.  */
+	 %eip get zero-extended to 64 bits.  */
       for (i = 0; i <= I386_EIP_REGNUM; i++)
 	{
 	  if (regnum == -1 || regnum == i)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-nat.h ./gdb/amd64-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-nat.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-nat.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for AMD64.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-nbsd-nat.c ./gdb/amd64-nbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-nbsd-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-nbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,67 +0,0 @@
-/* Native-dependent code for NetBSD/amd64.
-
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "target.h"
-
-#include "nbsd-nat.h"
-#include "amd64-tdep.h"
-#include "amd64-bsd-nat.h"
-#include "amd64-nat.h"
-
-/* Mapping between the general-purpose registers in NetBSD/amd64
-   `struct reg' format and GDB's register cache layout for
-   NetBSD/i386.
-
-   Note that most (if not all) NetBSD/amd64 registers are 64-bit,
-   while the NetBSD/i386 registers are all 32-bit, but since we're
-   little-endian we get away with that.  */
-
-/* From <machine/reg.h>.  */
-static int amd64nbsd32_r_reg_offset[] =
-{
-  14 * 8,			/* %eax */
-  3 * 8,			/* %ecx */
-  2 * 8,			/* %edx */
-  13 * 8,			/* %ebx */
-  24 * 8,			/* %esp */
-  12 * 8,			/* %ebp */
-  1 * 8,			/* %esi */
-  0 * 8,			/* %edi */
-  21 * 8,			/* %eip */
-  23 * 8,			/* %eflags */
-  22 * 8,			/* %cs */
-  25 * 8,			/* %ss */
-  18 * 8,			/* %ds */
-  17 * 8,			/* %es */
-  16 * 8,			/* %fs */
-  15 * 8			/* %gs */
-};
-
-static amd64_bsd_nat_target<nbsd_nat_target> the_amd64_nbsd_nat_target;
-
-void
-_initialize_amd64nbsd_nat (void)
-{
-  amd64_native_gregset32_reg_offset = amd64nbsd32_r_reg_offset;
-  amd64_native_gregset32_num_regs = ARRAY_SIZE (amd64nbsd32_r_reg_offset);
-  amd64_native_gregset64_reg_offset = amd64nbsd_r_reg_offset;
-
-  add_inf_child_target (&the_amd64_nbsd_nat_target);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-nbsd-tdep.c ./gdb/amd64-nbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-nbsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-nbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,131 +0,0 @@
-/* Target-dependent code for NetBSD/amd64.
-
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "arch-utils.h"
-#include "frame.h"
-#include "gdbcore.h"
-#include "osabi.h"
-#include "symtab.h"
-
-#include "amd64-tdep.h"
-#include "gdbsupport/x86-xstate.h"
-#include "nbsd-tdep.h"
-#include "solib-svr4.h"
-
-/* Support for signal handlers.  */
-
-/* Return whether THIS_FRAME corresponds to a NetBSD sigtramp
-   routine.  */
-
-static int
-amd64nbsd_sigtramp_p (struct frame_info *this_frame)
-{
-  CORE_ADDR pc = get_frame_pc (this_frame);
-  const char *name;
-
-  find_pc_partial_function (pc, &name, NULL, NULL);
-  return nbsd_pc_in_sigtramp (pc, name);
-}
-
-/* Assuming THIS_FRAME corresponds to a NetBSD sigtramp routine,
-   return the address of the associated mcontext structure.  */
-
-static CORE_ADDR
-amd64nbsd_mcontext_addr (struct frame_info *this_frame)
-{
-  CORE_ADDR addr;
-
-  /* The register %r15 points at `struct ucontext' upon entry of a
-     signal trampoline.  */
-  addr = get_frame_register_unsigned (this_frame, AMD64_R15_REGNUM);
-
-  /* The mcontext structure lives as offset 56 in `struct ucontext'.  */
-  return addr + 56;
-}
-
-/* NetBSD 2.0 or later.  */
-
-/* Mapping between the general-purpose registers in `struct reg'
-   format and GDB's register cache layout.  */
-
-/* From <machine/reg.h>.  */
-int amd64nbsd_r_reg_offset[] =
-{
-  14 * 8,			/* %rax */
-  13 * 8,			/* %rbx */
-  3 * 8,			/* %rcx */
-  2 * 8,			/* %rdx */
-  1 * 8,			/* %rsi */
-  0 * 8,			/* %rdi */
-  12 * 8,			/* %rbp */
-  24 * 8,			/* %rsp */
-  4 * 8,			/* %r8 ..  */
-  5 * 8,
-  6 * 8,
-  7 * 8,
-  8 * 8,
-  9 * 8,
-  10 * 8,
-  11 * 8,			/* ... %r15 */
-  21 * 8,			/* %rip */
-  23 * 8,			/* %eflags */
-  22 * 8,			/* %cs */
-  25 * 8,			/* %ss */
-  18 * 8,			/* %ds */
-  17 * 8,			/* %es */
-  16 * 8,			/* %fs */
-  15 * 8			/* %gs */
-};
-
-static void
-amd64nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  /* Initialize general-purpose register set details first.  */
-  tdep->gregset_reg_offset = amd64nbsd_r_reg_offset;
-  tdep->gregset_num_regs = ARRAY_SIZE (amd64nbsd_r_reg_offset);
-  tdep->sizeof_gregset = 26 * 8;
-
-  amd64_init_abi (info, gdbarch,
-		  amd64_target_description (X86_XSTATE_SSE_MASK, true));
-
-  tdep->jb_pc_offset = 7 * 8;
-
-  /* NetBSD has its own convention for signal trampolines.  */
-  tdep->sigtramp_p = amd64nbsd_sigtramp_p;
-  tdep->sigcontext_addr = amd64nbsd_mcontext_addr;
-  tdep->sc_reg_offset = amd64nbsd_r_reg_offset;
-  tdep->sc_num_regs = ARRAY_SIZE (amd64nbsd_r_reg_offset);
-
-  /* NetBSD uses SVR4-style shared libraries.  */
-  set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_lp64_fetch_link_map_offsets);
-}
-
-void
-_initialize_amd64nbsd_tdep (void)
-{
-  /* The NetBSD/amd64 native dependent code makes this assumption.  */
-  gdb_assert (ARRAY_SIZE (amd64nbsd_r_reg_offset) == AMD64_NUM_GREGS);
-
-  gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
-			  GDB_OSABI_NETBSD, amd64nbsd_init_abi);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-netbsd-nat.c ./gdb/amd64-netbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-netbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd64-netbsd-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,68 @@
+/* Native-dependent code for NetBSD/amd64.
+
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "target.h"
+
+#include "netbsd-nat.h"
+#include "amd64-tdep.h"
+#include "amd64-bsd-nat.h"
+#include "amd64-nat.h"
+
+/* Mapping between the general-purpose registers in NetBSD/amd64
+   `struct reg' format and GDB's register cache layout for
+   NetBSD/i386.
+
+   Note that most (if not all) NetBSD/amd64 registers are 64-bit,
+   while the NetBSD/i386 registers are all 32-bit, but since we're
+   little-endian we get away with that.  */
+
+/* From <machine/reg.h>.  */
+static int amd64nbsd32_r_reg_offset[] =
+{
+  14 * 8,			/* %eax */
+  3 * 8,			/* %ecx */
+  2 * 8,			/* %edx */
+  13 * 8,			/* %ebx */
+  24 * 8,			/* %esp */
+  12 * 8,			/* %ebp */
+  1 * 8,			/* %esi */
+  0 * 8,			/* %edi */
+  21 * 8,			/* %eip */
+  23 * 8,			/* %eflags */
+  22 * 8,			/* %cs */
+  25 * 8,			/* %ss */
+  18 * 8,			/* %ds */
+  17 * 8,			/* %es */
+  16 * 8,			/* %fs */
+  15 * 8			/* %gs */
+};
+
+static amd64_bsd_nat_target<nbsd_nat_target> the_amd64_nbsd_nat_target;
+
+void _initialize_amd64nbsd_nat ();
+void
+_initialize_amd64nbsd_nat ()
+{
+  amd64_native_gregset32_reg_offset = amd64nbsd32_r_reg_offset;
+  amd64_native_gregset32_num_regs = ARRAY_SIZE (amd64nbsd32_r_reg_offset);
+  amd64_native_gregset64_reg_offset = amd64nbsd_r_reg_offset;
+
+  add_inf_child_target (&the_amd64_nbsd_nat_target);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-netbsd-tdep.c ./gdb/amd64-netbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-netbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd64-netbsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,133 @@
+/* Target-dependent code for NetBSD/amd64.
+
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "arch-utils.h"
+#include "frame.h"
+#include "gdbcore.h"
+#include "osabi.h"
+#include "symtab.h"
+
+#include "amd64-tdep.h"
+#include "gdbsupport/x86-xstate.h"
+#include "netbsd-tdep.h"
+#include "solib-svr4.h"
+
+/* Support for signal handlers.  */
+
+/* Return whether THIS_FRAME corresponds to a NetBSD sigtramp
+   routine.  */
+
+static int
+amd64nbsd_sigtramp_p (frame_info_ptr this_frame)
+{
+  CORE_ADDR pc = get_frame_pc (this_frame);
+  const char *name;
+
+  find_pc_partial_function (pc, &name, NULL, NULL);
+  return nbsd_pc_in_sigtramp (pc, name);
+}
+
+/* Assuming THIS_FRAME corresponds to a NetBSD sigtramp routine,
+   return the address of the associated mcontext structure.  */
+
+static CORE_ADDR
+amd64nbsd_mcontext_addr (frame_info_ptr this_frame)
+{
+  CORE_ADDR addr;
+
+  /* The register %r15 points at `struct ucontext' upon entry of a
+     signal trampoline.  */
+  addr = get_frame_register_unsigned (this_frame, AMD64_R15_REGNUM);
+
+  /* The mcontext structure lives as offset 56 in `struct ucontext'.  */
+  return addr + 56;
+}
+
+/* NetBSD 2.0 or later.  */
+
+/* Mapping between the general-purpose registers in `struct reg'
+   format and GDB's register cache layout.  */
+
+/* From <machine/reg.h>.  */
+int amd64nbsd_r_reg_offset[] =
+{
+  14 * 8,			/* %rax */
+  13 * 8,			/* %rbx */
+  3 * 8,			/* %rcx */
+  2 * 8,			/* %rdx */
+  1 * 8,			/* %rsi */
+  0 * 8,			/* %rdi */
+  12 * 8,			/* %rbp */
+  24 * 8,			/* %rsp */
+  4 * 8,			/* %r8 ..  */
+  5 * 8,
+  6 * 8,
+  7 * 8,
+  8 * 8,
+  9 * 8,
+  10 * 8,
+  11 * 8,			/* ... %r15 */
+  21 * 8,			/* %rip */
+  23 * 8,			/* %eflags */
+  22 * 8,			/* %cs */
+  25 * 8,			/* %ss */
+  18 * 8,			/* %ds */
+  17 * 8,			/* %es */
+  16 * 8,			/* %fs */
+  15 * 8			/* %gs */
+};
+
+static void
+amd64nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
+
+  /* Initialize general-purpose register set details first.  */
+  tdep->gregset_reg_offset = amd64nbsd_r_reg_offset;
+  tdep->gregset_num_regs = ARRAY_SIZE (amd64nbsd_r_reg_offset);
+  tdep->sizeof_gregset = 26 * 8;
+
+  amd64_init_abi (info, gdbarch,
+		  amd64_target_description (X86_XSTATE_SSE_MASK, true));
+  nbsd_init_abi (info, gdbarch);
+
+  tdep->jb_pc_offset = 7 * 8;
+
+  /* NetBSD has its own convention for signal trampolines.  */
+  tdep->sigtramp_p = amd64nbsd_sigtramp_p;
+  tdep->sigcontext_addr = amd64nbsd_mcontext_addr;
+  tdep->sc_reg_offset = amd64nbsd_r_reg_offset;
+  tdep->sc_num_regs = ARRAY_SIZE (amd64nbsd_r_reg_offset);
+
+  /* NetBSD uses SVR4-style shared libraries.  */
+  set_solib_svr4_fetch_link_map_offsets
+    (gdbarch, svr4_lp64_fetch_link_map_offsets);
+}
+
+void _initialize_amd64nbsd_tdep ();
+void
+_initialize_amd64nbsd_tdep ()
+{
+  /* The NetBSD/amd64 native dependent code makes this assumption.  */
+  gdb_assert (ARRAY_SIZE (amd64nbsd_r_reg_offset) == AMD64_NUM_GREGS);
+
+  gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
+			  GDB_OSABI_NETBSD, amd64nbsd_init_abi);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-obsd-nat.c ./gdb/amd64-obsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-obsd-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-obsd-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for OpenBSD/amd64.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -128,8 +128,9 @@ amd64obsd_supply_pcb (struct regcache *r
 
 static amd64_bsd_nat_target<obsd_nat_target> the_amd64_obsd_nat_target;
 
+void _initialize_amd64obsd_nat ();
 void
-_initialize_amd64obsd_nat (void)
+_initialize_amd64obsd_nat ()
 {
   amd64_native_gregset32_reg_offset = amd64obsd32_r_reg_offset;
   amd64_native_gregset32_num_regs = ARRAY_SIZE (amd64obsd32_r_reg_offset);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-obsd-tdep.c ./gdb/amd64-obsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-obsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-obsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for OpenBSD/amd64.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -45,7 +45,7 @@ static const int amd64obsd_page_size = 4
    routine.  */
 
 static int
-amd64obsd_sigtramp_p (struct frame_info *this_frame)
+amd64obsd_sigtramp_p (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   CORE_ADDR start_pc = (pc & ~(amd64obsd_page_size - 1));
@@ -78,7 +78,7 @@ amd64obsd_sigtramp_p (struct frame_info
 
   /* If we can't read the instructions at START_PC, return zero.  */
   buf = (gdb_byte *) alloca ((sizeof sigreturn) + 1);
-  if (!safe_frame_unwind_memory (this_frame, start_pc + 6, buf, buflen))
+  if (!safe_frame_unwind_memory (this_frame, start_pc + 6, {buf, buflen}))
     return 0;
 
   /* Check for sigreturn(2).  Depending on how the assembler encoded
@@ -98,7 +98,7 @@ amd64obsd_sigtramp_p (struct frame_info
    address of the associated sigcontext structure.  */
 
 static CORE_ADDR
-amd64obsd_sigcontext_addr (struct frame_info *this_frame)
+amd64obsd_sigcontext_addr (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   ULONGEST offset = (pc & (amd64obsd_page_size - 1));
@@ -106,11 +106,11 @@ amd64obsd_sigcontext_addr (struct frame_
   /* The %rsp register points at `struct sigcontext' upon entry of a
      signal trampoline.  The relevant part of the trampoline is
 
-        call    *%rax
-        movq    %rsp, %rdi
-        pushq   %rdi
-        movq    $SYS_sigreturn,%rax
-        int     $0x80
+	call    *%rax
+	movq    %rsp, %rdi
+	pushq   %rdi
+	movq    $SYS_sigreturn,%rax
+	int     $0x80
 
      (see /usr/src/sys/arch/amd64/amd64/locore.S).  The `pushq'
      instruction clobbers %rsp, but its value is saved in `%rdi'.  */
@@ -238,7 +238,7 @@ amd64obsd_supply_uthread (struct regcach
       sp = read_memory_unsigned_integer (sp_addr, 8, byte_order);
 
       /* Adjust the stack pointer such that it looks as if we just
-         returned from _thread_machdep_switch.  */
+	 returned from _thread_machdep_switch.  */
       offset = amd64obsd_uthread_reg_offset[AMD64_RIP_REGNUM] + 8;
       store_unsigned_integer (buf, 8, byte_order, sp + offset);
       regcache->raw_supply (AMD64_RSP_REGNUM, buf);
@@ -250,7 +250,7 @@ amd64obsd_supply_uthread (struct regcach
 	  && (regnum == -1 || regnum == i))
 	{
 	  /* Fetch stack pointer from thread structure (if we didn't
-             do so already).  */
+	     do so already).  */
 	  if (sp == 0)
 	    sp = read_memory_unsigned_integer (sp_addr, 8, byte_order);
 
@@ -279,7 +279,7 @@ amd64obsd_collect_uthread (const struct
       int offset;
 
       /* Calculate the stack pointer (frame pointer) that will be
-         stored into the thread structure.  */
+	 stored into the thread structure.  */
       offset = amd64obsd_uthread_reg_offset[AMD64_RIP_REGNUM] + 8;
       regcache->raw_collect (AMD64_RSP_REGNUM, buf);
       sp = extract_unsigned_integer (buf, 8, byte_order) - offset;
@@ -288,7 +288,7 @@ amd64obsd_collect_uthread (const struct
       write_memory_unsigned_integer (sp_addr, 8, byte_order, sp);
 
       /* The stack pointer was (potentially) modified.  Make sure we
-         build a proper stack frame.  */
+	 build a proper stack frame.  */
       regnum = -1;
     }
 
@@ -298,7 +298,7 @@ amd64obsd_collect_uthread (const struct
 	  && (regnum == -1 || regnum == i))
 	{
 	  /* Fetch stack pointer from thread structure (if we didn't
-             calculate it already).  */
+	     calculate it already).  */
 	  if (sp == 0)
 	    sp = read_memory_unsigned_integer (sp_addr, 8, byte_order);
 
@@ -315,7 +315,7 @@ amd64obsd_collect_uthread (const struct
 #define amd64obsd_tf_reg_offset amd64obsd_sc_reg_offset
 
 static struct trad_frame_cache *
-amd64obsd_trapframe_cache (struct frame_info *this_frame, void **this_cache)
+amd64obsd_trapframe_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -362,7 +362,7 @@ amd64obsd_trapframe_cache (struct frame_
 }
 
 static void
-amd64obsd_trapframe_this_id (struct frame_info *this_frame,
+amd64obsd_trapframe_this_id (frame_info_ptr this_frame,
 			     void **this_cache, struct frame_id *this_id)
 {
   struct trad_frame_cache *cache =
@@ -372,7 +372,7 @@ amd64obsd_trapframe_this_id (struct fram
 }
 
 static struct value *
-amd64obsd_trapframe_prev_register (struct frame_info *this_frame,
+amd64obsd_trapframe_prev_register (frame_info_ptr this_frame,
 				   void **this_cache, int regnum)
 {
   struct trad_frame_cache *cache =
@@ -383,7 +383,7 @@ amd64obsd_trapframe_prev_register (struc
 
 static int
 amd64obsd_trapframe_sniffer (const struct frame_unwind *self,
-			     struct frame_info *this_frame,
+			     frame_info_ptr this_frame,
 			     void **this_prologue_cache)
 {
   ULONGEST cs;
@@ -402,10 +402,12 @@ amd64obsd_trapframe_sniffer (const struc
 		   || (startswith (name, "Xintr"))));
 }
 
-static const struct frame_unwind amd64obsd_trapframe_unwind = {
+static const struct frame_unwind amd64obsd_trapframe_unwind =
+{
   /* FIXME: kettenis/20051219: This really is more like an interrupt
      frame, but SIGTRAMP_FRAME would print <signal handler called>,
      which really is not what we want here.  */
+  "amd64 openbsd trap",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   amd64obsd_trapframe_this_id,
@@ -418,7 +420,7 @@ static const struct frame_unwind amd64ob
 static void
 amd64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   amd64_init_abi (info, gdbarch,
 		  amd64_target_description (X86_XSTATE_SSE_MASK, true));
@@ -448,8 +450,9 @@ amd64obsd_init_abi (struct gdbarch_info
   frame_unwind_prepend_unwinder (gdbarch, &amd64obsd_trapframe_unwind);
 }
 
+void _initialize_amd64obsd_tdep ();
 void
-_initialize_amd64obsd_tdep (void)
+_initialize_amd64obsd_tdep ()
 {
   /* The OpenBSD/amd64 native dependent code makes this assumption.  */
   gdb_assert (ARRAY_SIZE (amd64obsd_r_reg_offset) == AMD64_NUM_GREGS);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-ravenscar-thread.c ./gdb/amd64-ravenscar-thread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-ravenscar-thread.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd64-ravenscar-thread.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,76 @@
+/* Ravenscar x86-64 target support.
+
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "gdbarch.h"
+#include "gdbcore.h"
+#include "regcache.h"
+#include "amd64-tdep.h"
+#include "inferior.h"
+#include "ravenscar-thread.h"
+#include "amd64-ravenscar-thread.h"
+
+/* x86-64 Ravenscar stores registers as:
+
+   type Context_Buffer is record
+      RIP    : System.Address;
+      RFLAGS : EFLAGS;
+      RSP    : System.Address;
+
+      RBX    : System.Address;
+      RBP    : System.Address;
+      R12    : System.Address;
+      R13    : System.Address;
+      R14    : System.Address;
+      R15    : System.Address;
+   end record;
+*/
+static const int register_layout[] =
+{
+  /* RAX */ -1,
+  /* RBX */ 3 * 8,
+  /* RCX */ -1,
+  /* RDX */ -1,
+  /* RSI */ -1,
+  /* RDI */ -1,
+  /* RBP */ 4 * 8,
+  /* RSP */ 2 * 8,
+  /* R8 */ -1,
+  /* R9 */ -1,
+  /* R10 */ -1,
+  /* R11 */ -1,
+  /* R12 */ 5 * 8,
+  /* R13 */ 6 * 8,
+  /* R14 */ 7 * 8,
+  /* R15 */ 8 * 8,
+  /* RIP */ 0 * 8,
+  /* EFLAGS */ 1 * 8,
+};
+
+/* The ravenscar_arch_ops vector for AMD64 targets.  */
+
+static struct ravenscar_arch_ops amd64_ravenscar_ops (register_layout);
+
+/* Register amd64_ravenscar_ops in GDBARCH.  */
+
+void
+register_amd64_ravenscar_ops (struct gdbarch *gdbarch)
+{
+  set_gdbarch_ravenscar_ops (gdbarch, &amd64_ravenscar_ops);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-ravenscar-thread.h ./gdb/amd64-ravenscar-thread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-ravenscar-thread.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd64-ravenscar-thread.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,27 @@
+/* Ravenscar x86-64 target support.
+
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef AMD64_RAVENSCAR_THREAD_H
+#define AMD64_RAVENSCAR_THREAD_H
+
+struct gdbarch;
+
+extern void register_amd64_ravenscar_ops (struct gdbarch *gdbarch);
+
+#endif /* AMD64_RAVENSCAR_THREAD_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-sol2-tdep.c ./gdb/amd64-sol2-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-sol2-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-sol2-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for AMD64 Solaris.
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    Contributed by Joseph Myers, CodeSourcery, LLC.
 
@@ -63,26 +63,11 @@ static int amd64_sol2_gregset_reg_offset
 };
 
 
-/* Return whether THIS_FRAME corresponds to a Solaris sigtramp
-   routine.  */
-
-static int
-amd64_sol2_sigtramp_p (struct frame_info *this_frame)
-{
-  CORE_ADDR pc = get_frame_pc (this_frame);
-  const char *name;
-
-  find_pc_partial_function (pc, &name, NULL, NULL);
-  return (name && (strcmp ("sigacthandler", name) == 0
-		   || strcmp (name, "ucbsigvechandler") == 0
-		   || strcmp (name, "__sighndlr") == 0));
-}
-
 /* Solaris doesn't have a 'struct sigcontext', but it does have a
    'mcontext_t' that contains the saved set of machine registers.  */
 
 static CORE_ADDR
-amd64_sol2_mcontext_addr (struct frame_info *this_frame)
+amd64_sol2_mcontext_addr (frame_info_ptr this_frame)
 {
   CORE_ADDR sp, ucontext_addr;
 
@@ -95,7 +80,7 @@ amd64_sol2_mcontext_addr (struct frame_i
 static void
 amd64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   tdep->gregset_reg_offset = amd64_sol2_gregset_reg_offset;
   tdep->gregset_num_regs = ARRAY_SIZE (amd64_sol2_gregset_reg_offset);
@@ -104,22 +89,21 @@ amd64_sol2_init_abi (struct gdbarch_info
   amd64_init_abi (info, gdbarch,
 		  amd64_target_description (X86_XSTATE_SSE_MASK, true));
 
-  tdep->sigtramp_p = amd64_sol2_sigtramp_p;
+  sol2_init_abi (info, gdbarch);
+
+  tdep->sigtramp_p = sol2_sigtramp_p;
   tdep->sigcontext_addr = amd64_sol2_mcontext_addr;
   tdep->sc_reg_offset = tdep->gregset_reg_offset;
   tdep->sc_num_regs = tdep->gregset_num_regs;
 
   /* Solaris uses SVR4-style shared libraries.  */
-  set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver);
   set_solib_svr4_fetch_link_map_offsets
     (gdbarch, svr4_lp64_fetch_link_map_offsets);
-
-  /* How to print LWP PTIDs from core files.  */
-  set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str);
 }
 
+void _initialize_amd64_sol2_tdep ();
 void
-_initialize_amd64_sol2_tdep (void)
+_initialize_amd64_sol2_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
 			  GDB_OSABI_SOLARIS, amd64_sol2_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-tdep.c ./gdb/amd64-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for AMD64.
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    Contributed by Jiri Smid, SuSE Labs.
 
@@ -20,10 +20,10 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include "language.h"
 #include "opcode/i386.h"
 #include "dis-asm.h"
 #include "arch-utils.h"
-#include "block.h"
 #include "dummy-frame.h"
 #include "frame.h"
 #include "frame-base.h"
@@ -49,6 +49,7 @@
 #include "gdbsupport/byte-vector.h"
 #include "osabi.h"
 #include "x86-tdep.h"
+#include "amd64-ravenscar-thread.h"
 
 /* Note that the AMD64 architecture was previously known as x86-64.
    The latter is (forever) engraved into the canonical system name as
@@ -59,7 +60,7 @@
 
 /* Register information.  */
 
-static const char *amd64_register_names[] = 
+static const char * const amd64_register_names[] = 
 {
   "rax", "rbx", "rcx", "rdx", "rsi", "rdi", "rbp", "rsp",
 
@@ -77,7 +78,7 @@ static const char *amd64_register_names[
   "mxcsr",
 };
 
-static const char *amd64_ymm_names[] = 
+static const char * const amd64_ymm_names[] = 
 {
   "ymm0", "ymm1", "ymm2", "ymm3",
   "ymm4", "ymm5", "ymm6", "ymm7",
@@ -85,7 +86,7 @@ static const char *amd64_ymm_names[] =
   "ymm12", "ymm13", "ymm14", "ymm15"
 };
 
-static const char *amd64_ymm_avx512_names[] =
+static const char * const amd64_ymm_avx512_names[] =
 {
   "ymm16", "ymm17", "ymm18", "ymm19",
   "ymm20", "ymm21", "ymm22", "ymm23",
@@ -93,7 +94,7 @@ static const char *amd64_ymm_avx512_name
   "ymm28", "ymm29", "ymm30", "ymm31"
 };
 
-static const char *amd64_ymmh_names[] = 
+static const char * const amd64_ymmh_names[] = 
 {
   "ymm0h", "ymm1h", "ymm2h", "ymm3h",
   "ymm4h", "ymm5h", "ymm6h", "ymm7h",
@@ -101,7 +102,7 @@ static const char *amd64_ymmh_names[] =
   "ymm12h", "ymm13h", "ymm14h", "ymm15h"
 };
 
-static const char *amd64_ymmh_avx512_names[] =
+static const char * const amd64_ymmh_avx512_names[] =
 {
   "ymm16h", "ymm17h", "ymm18h", "ymm19h",
   "ymm20h", "ymm21h", "ymm22h", "ymm23h",
@@ -109,18 +110,18 @@ static const char *amd64_ymmh_avx512_nam
   "ymm28h", "ymm29h", "ymm30h", "ymm31h"
 };
 
-static const char *amd64_mpx_names[] =
+static const char * const amd64_mpx_names[] =
 {
   "bnd0raw", "bnd1raw", "bnd2raw", "bnd3raw", "bndcfgu", "bndstatus"
 };
 
-static const char *amd64_k_names[] =
+static const char * const amd64_k_names[] =
 {
   "k0", "k1", "k2", "k3",
   "k4", "k5", "k6", "k7"
 };
 
-static const char *amd64_zmmh_names[] =
+static const char * const amd64_zmmh_names[] =
 {
   "zmm0h", "zmm1h", "zmm2h", "zmm3h",
   "zmm4h", "zmm5h", "zmm6h", "zmm7h",
@@ -132,7 +133,7 @@ static const char *amd64_zmmh_names[] =
   "zmm28h", "zmm29h", "zmm30h", "zmm31h"
 };
 
-static const char *amd64_zmm_names[] =
+static const char * const amd64_zmm_names[] =
 {
   "zmm0", "zmm1", "zmm2", "zmm3",
   "zmm4", "zmm5", "zmm6", "zmm7",
@@ -144,14 +145,14 @@ static const char *amd64_zmm_names[] =
   "zmm28", "zmm29", "zmm30", "zmm31"
 };
 
-static const char *amd64_xmm_avx512_names[] = {
+static const char * const amd64_xmm_avx512_names[] = {
     "xmm16",  "xmm17",  "xmm18",  "xmm19",
     "xmm20",  "xmm21",  "xmm22",  "xmm23",
     "xmm24",  "xmm25",  "xmm26",  "xmm27",
     "xmm28",  "xmm29",  "xmm30",  "xmm31"
 };
 
-static const char *amd64_pkeys_names[] = {
+static const char * const amd64_pkeys_names[] = {
     "pkru"
 };
 
@@ -246,7 +247,7 @@ static const int amd64_dwarf_regmap_len
 static int
 amd64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   int ymm0_regnum = tdep->ymm0_regnum;
   int regnum = -1;
 
@@ -298,7 +299,7 @@ amd64_arch_reg_to_regnum (int reg)
 
 /* Register names for byte pseudo-registers.  */
 
-static const char *amd64_byte_names[] =
+static const char * const amd64_byte_names[] =
 {
   "al", "bl", "cl", "dl", "sil", "dil", "bpl", "spl",
   "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l",
@@ -310,7 +311,7 @@ static const char *amd64_byte_names[] =
 
 /* Register names for word pseudo-registers.  */
 
-static const char *amd64_word_names[] =
+static const char * const amd64_word_names[] =
 {
   "ax", "bx", "cx", "dx", "si", "di", "bp", "", 
   "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
@@ -318,7 +319,7 @@ static const char *amd64_word_names[] =
 
 /* Register names for dword pseudo-registers.  */
 
-static const char *amd64_dword_names[] =
+static const char * const amd64_dword_names[] =
 {
   "eax", "ebx", "ecx", "edx", "esi", "edi", "ebp", "esp", 
   "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d",
@@ -330,7 +331,7 @@ static const char *amd64_dword_names[] =
 static const char *
 amd64_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   if (i386_byte_regnum_p (gdbarch, regnum))
     return amd64_byte_names[regnum - tdep->al_regnum];
   else if (i386_zmm_regnum_p (gdbarch, regnum))
@@ -347,17 +348,11 @@ amd64_pseudo_register_name (struct gdbar
     return i386_pseudo_register_name (gdbarch, regnum);
 }
 
-static struct value *
-amd64_pseudo_register_read_value (struct gdbarch *gdbarch,
-				  readable_regcache *regcache,
+static value *
+amd64_pseudo_register_read_value (gdbarch *gdbarch, frame_info_ptr next_frame,
 				  int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  value *result_value = allocate_value (register_type (gdbarch, regnum));
-  VALUE_LVAL (result_value) = lval_register;
-  VALUE_REGNUM (result_value) = regnum;
-  gdb_byte *buf = value_contents_raw (result_value);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   if (i386_byte_regnum_p (gdbarch, regnum))
     {
@@ -367,52 +362,28 @@ amd64_pseudo_register_read_value (struct
       if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS)
 	{
 	  gpnum -= AMD64_NUM_LOWER_BYTE_REGS;
-	  gdb_byte raw_buf[register_size (gdbarch, gpnum)];
 
 	  /* Special handling for AH, BH, CH, DH.  */
-	  register_status status = regcache->raw_read (gpnum, raw_buf);
-	  if (status == REG_VALID)
-	    memcpy (buf, raw_buf + 1, 1);
-	  else
-	    mark_value_bytes_unavailable (result_value, 0,
-					  TYPE_LENGTH (value_type (result_value)));
+	  return pseudo_from_raw_part (next_frame, regnum, gpnum, 1);
 	}
       else
-	{
-	  gdb_byte raw_buf[register_size (gdbarch, gpnum)];
-	  register_status status = regcache->raw_read (gpnum, raw_buf);
-	  if (status == REG_VALID)
-	    memcpy (buf, raw_buf, 1);
-	  else
-	    mark_value_bytes_unavailable (result_value, 0,
-					  TYPE_LENGTH (value_type (result_value)));
-	}
+	return pseudo_from_raw_part (next_frame, regnum, gpnum, 0);
     }
   else if (i386_dword_regnum_p (gdbarch, regnum))
     {
       int gpnum = regnum - tdep->eax_regnum;
-      gdb_byte raw_buf[register_size (gdbarch, gpnum)];
-      /* Extract (always little endian).  */
-      register_status status = regcache->raw_read (gpnum, raw_buf);
-      if (status == REG_VALID)
-	memcpy (buf, raw_buf, 4);
-      else
-	mark_value_bytes_unavailable (result_value, 0,
-				      TYPE_LENGTH (value_type (result_value)));
+
+      return pseudo_from_raw_part (next_frame, regnum, gpnum, 0);
     }
   else
-    i386_pseudo_register_read_into_value (gdbarch, regcache, regnum,
-					  result_value);
-
-  return result_value;
+    return i386_pseudo_register_read_value (gdbarch, next_frame, regnum);
 }
 
 static void
-amd64_pseudo_register_write (struct gdbarch *gdbarch,
-			     struct regcache *regcache,
-			     int regnum, const gdb_byte *buf)
+amd64_pseudo_register_write (gdbarch *gdbarch, frame_info_ptr next_frame,
+			     int regnum, gdb::array_view<const gdb_byte> buf)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   if (i386_byte_regnum_p (gdbarch, regnum))
     {
@@ -421,41 +392,18 @@ amd64_pseudo_register_write (struct gdba
       if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS)
 	{
 	  gpnum -= AMD64_NUM_LOWER_BYTE_REGS;
-	  gdb_byte raw_buf[register_size (gdbarch, gpnum)];
-
-	  /* Read ... AH, BH, CH, DH.  */
-	  regcache->raw_read (gpnum, raw_buf);
-	  /* ... Modify ... (always little endian).  */
-	  memcpy (raw_buf + 1, buf, 1);
-	  /* ... Write.  */
-	  regcache->raw_write (gpnum, raw_buf);
+	  pseudo_to_raw_part (next_frame, buf, gpnum, 1);
 	}
       else
-	{
-	  gdb_byte raw_buf[register_size (gdbarch, gpnum)];
-
-	  /* Read ...  */
-	  regcache->raw_read (gpnum, raw_buf);
-	  /* ... Modify ... (always little endian).  */
-	  memcpy (raw_buf, buf, 1);
-	  /* ... Write.  */
-	  regcache->raw_write (gpnum, raw_buf);
-	}
+	pseudo_to_raw_part (next_frame, buf, gpnum, 0);
     }
   else if (i386_dword_regnum_p (gdbarch, regnum))
     {
       int gpnum = regnum - tdep->eax_regnum;
-      gdb_byte raw_buf[register_size (gdbarch, gpnum)];
-
-      /* Read ...  */
-      regcache->raw_read (gpnum, raw_buf);
-      /* ... Modify ... (always little endian).  */
-      memcpy (raw_buf, buf, 4);
-      /* ... Write.  */
-      regcache->raw_write (gpnum, raw_buf);
+      pseudo_to_raw_part (next_frame, buf, gpnum, 0);
     }
   else
-    i386_pseudo_register_write (gdbarch, regcache, regnum, buf);
+    i386_pseudo_register_write (gdbarch, next_frame, regnum, buf);
 }
 
 /* Implement the 'ax_pseudo_register_collect' gdbarch method.  */
@@ -464,7 +412,7 @@ static int
 amd64_ax_pseudo_register_collect (struct gdbarch *gdbarch,
 				  struct agent_expr *ax, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   if (i386_byte_regnum_p (gdbarch, regnum))
     {
@@ -546,27 +494,31 @@ static void amd64_classify (struct type
 static bool
 amd64_has_unaligned_fields (struct type *type)
 {
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT
-      || TYPE_CODE (type) == TYPE_CODE_UNION)
+  if (type->code () == TYPE_CODE_STRUCT
+      || type->code () == TYPE_CODE_UNION)
     {
-      for (int i = 0; i < TYPE_NFIELDS (type); i++)
+      for (int i = 0; i < type->num_fields (); i++)
 	{
-	  struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
-	  int bitpos = TYPE_FIELD_BITPOS (type, i);
-	  int align = type_align(subtype);
+	  struct type *subtype = check_typedef (type->field (i).type ());
 
 	  /* Ignore static fields, empty fields (for example nested
 	     empty structures), and bitfields (these are handled by
 	     the caller).  */
-	  if (field_is_static (&TYPE_FIELD (type, i))
-	      || (TYPE_FIELD_BITSIZE (type, i) == 0
-		  && TYPE_LENGTH (subtype) == 0)
-	      || TYPE_FIELD_PACKED (type, i))
+	  if (type->field (i).is_static ()
+	      || (type->field (i).bitsize () == 0
+		  && subtype->length () == 0)
+	      || type->field (i).is_packed ())
 	    continue;
 
+	  int bitpos = type->field (i).loc_bitpos ();
+
 	  if (bitpos % 8 != 0)
 	    return true;
 
+	  int align = type_align (subtype);
+	  if (align == 0)
+	    error (_("could not determine alignment of type"));
+
 	  int bytepos = bitpos / 8;
 	  if (bytepos % align != 0)
 	    return true;
@@ -587,28 +539,28 @@ amd64_classify_aggregate_field (struct t
 				enum amd64_reg_class theclass[2],
 				unsigned int bitoffset)
 {
-  struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
-  int bitpos = bitoffset + TYPE_FIELD_BITPOS (type, i);
-  int pos = bitpos / 64;
+  struct type *subtype = check_typedef (type->field (i).type ());
   enum amd64_reg_class subclass[2];
-  int bitsize = TYPE_FIELD_BITSIZE (type, i);
-  int endpos;
+  int bitsize = type->field (i).bitsize ();
 
   if (bitsize == 0)
-    bitsize = TYPE_LENGTH (subtype) * 8;
-  endpos = (bitpos + bitsize - 1) / 64;
+    bitsize = subtype->length () * 8;
 
   /* Ignore static fields, or empty fields, for example nested
      empty structures.*/
-  if (field_is_static (&TYPE_FIELD (type, i)) || bitsize == 0)
+  if (type->field (i).is_static () || bitsize == 0)
     return;
 
-  if (TYPE_CODE (subtype) == TYPE_CODE_STRUCT
-      || TYPE_CODE (subtype) == TYPE_CODE_UNION)
+  int bitpos = bitoffset + type->field (i).loc_bitpos ();
+  int pos = bitpos / 64;
+  int endpos = (bitpos + bitsize - 1) / 64;
+
+  if (subtype->code () == TYPE_CODE_STRUCT
+      || subtype->code () == TYPE_CODE_UNION)
     {
       /* Each field of an object is classified recursively.  */
       int j;
-      for (j = 0; j < TYPE_NFIELDS (subtype); j++)
+      for (j = 0; j < subtype->num_fields (); j++)
 	amd64_classify_aggregate_field (subtype, j, theclass, bitpos);
       return;
     }
@@ -651,9 +603,20 @@ amd64_classify_aggregate_field (struct t
 static void
 amd64_classify_aggregate (struct type *type, enum amd64_reg_class theclass[2])
 {
-  /* 1. If the size of an object is larger than two eightbytes, or it has
-        unaligned fields, it has class memory.  */
-  if (TYPE_LENGTH (type) > 16 || amd64_has_unaligned_fields (type))
+  /* 1. If the size of an object is larger than two times eight bytes, or
+	it is a non-trivial C++ object, or it has unaligned fields, then it
+	has class memory.
+
+	It is important that the trivially_copyable check is before the
+	unaligned fields check, as C++ classes with virtual base classes
+	will have fields (for the virtual base classes) with non-constant
+	loc_bitpos attributes, which will cause an assert to trigger within
+	the unaligned field check.  As classes with virtual bases are not
+	trivially copyable, checking that first avoids this problem.  */
+  if (TYPE_HAS_DYNAMIC_LENGTH (type)
+      || type->length () > 16
+      || !language_pass_by_reference (type).trivially_copyable
+      || amd64_has_unaligned_fields (type))
     {
       theclass[0] = theclass[1] = AMD64_MEMORY;
       return;
@@ -663,17 +626,17 @@ amd64_classify_aggregate (struct type *t
   theclass[0] = theclass[1] = AMD64_NO_CLASS;
 
   /* 3. Each field of an object is classified recursively so that
-        always two fields are considered. The resulting class is
-        calculated according to the classes of the fields in the
-        eightbyte: */
+	always two fields are considered. The resulting class is
+	calculated according to the classes of the fields in the
+	eightbyte: */
 
-  if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
+  if (type->code () == TYPE_CODE_ARRAY)
     {
-      struct type *subtype = check_typedef (TYPE_TARGET_TYPE (type));
+      struct type *subtype = check_typedef (type->target_type ());
 
       /* All fields in an array have the same type.  */
       amd64_classify (subtype, theclass);
-      if (TYPE_LENGTH (type) > 8 && theclass[1] == AMD64_NO_CLASS)
+      if (type->length () > 8 && theclass[1] == AMD64_NO_CLASS)
 	theclass[1] = theclass[0];
     }
   else
@@ -681,10 +644,10 @@ amd64_classify_aggregate (struct type *t
       int i;
 
       /* Structure or union.  */
-      gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT
-		  || TYPE_CODE (type) == TYPE_CODE_UNION);
+      gdb_assert (type->code () == TYPE_CODE_STRUCT
+		  || type->code () == TYPE_CODE_UNION);
 
-      for (i = 0; i < TYPE_NFIELDS (type); i++)
+      for (i = 0; i < type->num_fields (); i++)
 	amd64_classify_aggregate_field (type, i, theclass, 0);
     }
 
@@ -708,8 +671,8 @@ amd64_classify_aggregate (struct type *t
 static void
 amd64_classify (struct type *type, enum amd64_reg_class theclass[2])
 {
-  enum type_code code = TYPE_CODE (type);
-  int len = TYPE_LENGTH (type);
+  enum type_code code = type->code ();
+  int len = type->length ();
 
   theclass[0] = theclass[1] = AMD64_NO_CLASS;
 
@@ -724,10 +687,10 @@ amd64_classify (struct type *type, enum
       && (len == 1 || len == 2 || len == 4 || len == 8))
     theclass[0] = AMD64_INTEGER;
 
-  /* Arguments of types float, double, _Decimal32, _Decimal64 and __m64
-     are in class SSE.  */
+  /* Arguments of types _Float16, float, double, _Decimal32, _Decimal64 and
+     __m64 are in class SSE.  */
   else if ((code == TYPE_CODE_FLT || code == TYPE_CODE_DECFLOAT)
-	   && (len == 4 || len == 8))
+	   && (len == 2 || len == 4 || len == 8))
     /* FIXME: __m64 .  */
     theclass[0] = AMD64_SSE;
 
@@ -745,8 +708,8 @@ amd64_classify (struct type *type, enum
     /* Class X87 and X87UP.  */
     theclass[0] = AMD64_X87, theclass[1] = AMD64_X87UP;
 
-  /* Arguments of complex T where T is one of the types float or
-     double get treated as if they are implemented as:
+  /* Arguments of complex T - where T is one of the types _Float16, float or
+     double - get treated as if they are implemented as:
 
      struct complexT {
        T real;
@@ -754,7 +717,7 @@ amd64_classify (struct type *type, enum
      };
 
   */
-  else if (code == TYPE_CODE_COMPLEX && len == 8)
+  else if (code == TYPE_CODE_COMPLEX && (len == 8 || len == 4))
     theclass[0] = AMD64_SSE;
   else if (code == TYPE_CODE_COMPLEX && len == 16)
     theclass[0] = theclass[1] = AMD64_SSE;
@@ -773,17 +736,17 @@ amd64_classify (struct type *type, enum
 static enum return_value_convention
 amd64_return_value (struct gdbarch *gdbarch, struct value *function,
 		    struct type *type, struct regcache *regcache,
-		    gdb_byte *readbuf, const gdb_byte *writebuf)
+		    struct value **read_value, const gdb_byte *writebuf)
 {
   enum amd64_reg_class theclass[2];
-  int len = TYPE_LENGTH (type);
+  int len = type->length ();
   static int integer_regnum[] = { AMD64_RAX_REGNUM, AMD64_RDX_REGNUM };
   static int sse_regnum[] = { AMD64_XMM0_REGNUM, AMD64_XMM1_REGNUM };
   int integer_reg = 0;
   int sse_reg = 0;
   int i;
 
-  gdb_assert (!(readbuf && writebuf));
+  gdb_assert (!(read_value && writebuf));
 
   /* 1. Classify the return type with the classification algorithm.  */
   amd64_classify (type, theclass);
@@ -798,22 +761,29 @@ amd64_return_value (struct gdbarch *gdba
   if (theclass[0] == AMD64_MEMORY)
     {
       /* As indicated by the comment above, the ABI guarantees that we
-         can always find the return value just after the function has
-         returned.  */
+	 can always find the return value just after the function has
+	 returned.  */
 
-      if (readbuf)
+      if (read_value != nullptr)
 	{
 	  ULONGEST addr;
 
 	  regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &addr);
-	  read_memory (addr, readbuf, TYPE_LENGTH (type));
+	  *read_value = value_at_non_lval (type, addr);
 	}
 
       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
     }
 
+  gdb_byte *readbuf = nullptr;
+  if (read_value != nullptr)
+    {
+      *read_value = value::allocate (type);
+      readbuf = (*read_value)->contents_raw ().data ();
+    }
+
   /* 8. If the class is COMPLEX_X87, the real part of the value is
-        returned in %st0 and the imaginary part in %st1.  */
+	returned in %st0 and the imaginary part in %st1.  */
   if (theclass[0] == AMD64_COMPLEX_X87)
     {
       if (readbuf)
@@ -854,7 +824,7 @@ amd64_return_value (struct gdbarch *gdba
 
 	case AMD64_SSE:
 	  /* 4. If the class is SSE, the next available SSE register
-             of the sequence %xmm0, %xmm1 is used.  */
+	     of the sequence %xmm0, %xmm1 is used.  */
 	  regnum = sse_regnum[sse_reg++];
 	  break;
 
@@ -868,7 +838,7 @@ amd64_return_value (struct gdbarch *gdba
 
 	case AMD64_X87:
 	  /* 6. If the class is X87, the value is returned on the X87
-             stack in %st0 as 80-bit x87 number.  */
+	     stack in %st0 as 80-bit x87 number.  */
 	  regnum = AMD64_ST0_REGNUM;
 	  if (writebuf)
 	    i387_return_value (gdbarch, regcache);
@@ -876,7 +846,7 @@ amd64_return_value (struct gdbarch *gdba
 
 	case AMD64_X87UP:
 	  /* 7. If the class is X87UP, the value is returned together
-             with the previous X87 value in %st0.  */
+	     with the previous X87 value in %st0.  */
 	  gdb_assert (i > 0 && theclass[0] == AMD64_X87);
 	  regnum = AMD64_ST0_REGNUM;
 	  offset = 8;
@@ -939,8 +909,8 @@ if (return_method == return_method_struc
 
   for (i = 0; i < nargs; i++)
     {
-      struct type *type = value_type (args[i]);
-      int len = TYPE_LENGTH (type);
+      struct type *type = args[i]->type ();
+      int len = type->length ();
       enum amd64_reg_class theclass[2];
       int needed_integer_regs = 0;
       int needed_sse_regs = 0;
@@ -950,7 +920,7 @@ if (return_method == return_method_struc
       amd64_classify (type, theclass);
 
       /* Calculate the number of integer and SSE registers needed for
-         this argument.  */
+	 this argument.  */
       for (j = 0; j < 2; j++)
 	{
 	  if (theclass[j] == AMD64_INTEGER)
@@ -960,7 +930,7 @@ if (return_method == return_method_struc
 	}
 
       /* Check whether enough registers are available, and if the
-         argument should be passed in registers at all.  */
+	 argument should be passed in registers at all.  */
       if (integer_reg + needed_integer_regs > ARRAY_SIZE (integer_regnum)
 	  || sse_reg + needed_sse_regs > ARRAY_SIZE (sse_regnum)
 	  || (needed_integer_regs == 0 && needed_sse_regs == 0))
@@ -972,7 +942,7 @@ if (return_method == return_method_struc
       else
 	{
 	  /* The argument will be passed in registers.  */
-	  const gdb_byte *valbuf = value_contents (args[i]);
+	  const gdb_byte *valbuf = args[i]->contents ().data ();
 	  gdb_byte buf[8];
 
 	  gdb_assert (len <= 16);
@@ -1023,9 +993,9 @@ if (return_method == return_method_struc
   /* Write out the arguments to the stack.  */
   for (i = 0; i < num_stack_args; i++)
     {
-      struct type *type = value_type (stack_args[i]);
-      const gdb_byte *valbuf = value_contents (stack_args[i]);
-      int len = TYPE_LENGTH (type);
+      struct type *type = stack_args[i]->type ();
+      const gdb_byte *valbuf = stack_args[i]->contents ().data ();
+      int len = type->length ();
 
       write_memory (sp + element * 8, valbuf, len);
       element += ((len + 7) / 8);
@@ -1102,9 +1072,10 @@ struct amd64_insn
   gdb_byte *raw_insn;
 };
 
-struct amd64_displaced_step_closure : public displaced_step_closure
+struct amd64_displaced_step_copy_insn_closure
+  : public displaced_step_copy_insn_closure
 {
-  amd64_displaced_step_closure (int insn_buf_len)
+  amd64_displaced_step_copy_insn_closure (int insn_buf_len)
   : insn_buf (insn_buf_len, 0)
   {}
 
@@ -1297,7 +1268,7 @@ amd64_get_unused_input_int_reg (const st
       }
 
     /* We shouldn't get here.  */
-    internal_error (__FILE__, __LINE__, _("unable to find free reg"));
+    internal_error (_("unable to find free reg"));
   }
 }
 
@@ -1385,20 +1356,17 @@ amd64_get_insn_details (gdb_byte *insn,
    We set base = pc + insn_length so we can leave disp unchanged.  */
 
 static void
-fixup_riprel (struct gdbarch *gdbarch, amd64_displaced_step_closure *dsc,
+fixup_riprel (struct gdbarch *gdbarch,
+	      amd64_displaced_step_copy_insn_closure *dsc,
 	      CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
 {
   const struct amd64_insn *insn_details = &dsc->insn_details;
   int modrm_offset = insn_details->modrm_offset;
-  gdb_byte *insn = insn_details->raw_insn + modrm_offset;
   CORE_ADDR rip_base;
   int insn_length;
   int arch_tmp_regno, tmp_regno;
   ULONGEST orig_value;
 
-  /* %rip+disp32 addressing mode, displacement follows ModRM byte.  */
-  ++insn;
-
   /* Compute the rip-relative address.	*/
   insn_length = gdb_buffered_insn_length (gdbarch, dsc->insn_buf.data (),
 					  dsc->insn_buf.size (), from);
@@ -1438,16 +1406,15 @@ fixup_riprel (struct gdbarch *gdbarch, a
 
   regcache_cooked_write_unsigned (regs, tmp_regno, rip_base);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: %%rip-relative addressing used.\n"
-			"displaced: using temp reg %d, old value %s, new value %s\n",
-			dsc->tmp_regno, paddress (gdbarch, dsc->tmp_save),
-			paddress (gdbarch, rip_base));
+  displaced_debug_printf ("%%rip-relative addressing used.");
+  displaced_debug_printf ("using temp reg %d, old value %s, new value %s",
+			  dsc->tmp_regno, paddress (gdbarch, dsc->tmp_save),
+			  paddress (gdbarch, rip_base));
 }
 
 static void
 fixup_displaced_copy (struct gdbarch *gdbarch,
-		      amd64_displaced_step_closure *dsc,
+		      amd64_displaced_step_copy_insn_closure *dsc,
 		      CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
 {
   const struct amd64_insn *details = &dsc->insn_details;
@@ -1465,7 +1432,7 @@ fixup_displaced_copy (struct gdbarch *gd
     }
 }
 
-struct displaced_step_closure *
+displaced_step_copy_insn_closure_up
 amd64_displaced_step_copy_insn (struct gdbarch *gdbarch,
 				CORE_ADDR from, CORE_ADDR to,
 				struct regcache *regs)
@@ -1474,8 +1441,8 @@ amd64_displaced_step_copy_insn (struct g
   /* Extra space for sentinels so fixup_{riprel,displaced_copy} don't have to
      continually watch for running off the end of the buffer.  */
   int fixup_sentinel_space = len;
-  amd64_displaced_step_closure *dsc
-    = new amd64_displaced_step_closure (len + fixup_sentinel_space);
+  std::unique_ptr<amd64_displaced_step_copy_insn_closure> dsc
+    (new amd64_displaced_step_copy_insn_closure (len + fixup_sentinel_space));
   gdb_byte *buf = &dsc->insn_buf[0];
   struct amd64_insn *details = &dsc->insn_details;
 
@@ -1500,18 +1467,16 @@ amd64_displaced_step_copy_insn (struct g
 
   /* Modify the insn to cope with the address where it will be executed from.
      In particular, handle any rip-relative addressing.	 */
-  fixup_displaced_copy (gdbarch, dsc, from, to, regs);
+  fixup_displaced_copy (gdbarch, dsc.get (), from, to, regs);
 
   write_memory (to, buf, len);
 
-  if (debug_displaced)
-    {
-      fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
-			  paddress (gdbarch, from), paddress (gdbarch, to));
-      displaced_step_dump_bytes (gdb_stdlog, buf, len);
-    }
+  displaced_debug_printf ("copy %s->%s: %s",
+			  paddress (gdbarch, from), paddress (gdbarch, to),
+			  bytes_to_string (buf, len).c_str ());
 
-  return dsc;
+  /* This is a work around for a problem with g++ 4.8.  */
+  return displaced_step_copy_insn_closure_up (dsc.release ());
 }
 
 static int
@@ -1630,16 +1595,13 @@ amd64_classify_insn_at (struct gdbarch *
 			int (*pred) (const struct amd64_insn *))
 {
   struct amd64_insn details;
-  gdb_byte *buf;
-  int len, classification;
 
-  len = gdbarch_max_insn_length (gdbarch);
-  buf = (gdb_byte *) alloca (len);
+  gdb::byte_vector buf (gdbarch_max_insn_length (gdbarch));
 
-  read_code (addr, buf, len);
-  amd64_get_insn_details (buf, &details);
+  read_code (addr, buf.data (), buf.size ());
+  amd64_get_insn_details (buf.data (), &details);
 
-  classification = pred (&details);
+  int classification = pred (&details);
 
   return classification;
 }
@@ -1673,31 +1635,28 @@ amd64_insn_is_jump (struct gdbarch *gdba
 
 void
 amd64_displaced_step_fixup (struct gdbarch *gdbarch,
-			    struct displaced_step_closure *dsc_,
+			    struct displaced_step_copy_insn_closure *dsc_,
 			    CORE_ADDR from, CORE_ADDR to,
-			    struct regcache *regs)
+			    struct regcache *regs, bool completed_p)
 {
-  amd64_displaced_step_closure *dsc = (amd64_displaced_step_closure *) dsc_;
+  amd64_displaced_step_copy_insn_closure *dsc
+    = (amd64_displaced_step_copy_insn_closure *) dsc_;
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   /* The offset we applied to the instruction's address.  */
   ULONGEST insn_offset = to - from;
   gdb_byte *insn = dsc->insn_buf.data ();
   const struct amd64_insn *insn_details = &dsc->insn_details;
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: fixup (%s, %s), "
-			"insn = 0x%02x 0x%02x ...\n",
-			paddress (gdbarch, from), paddress (gdbarch, to),
-			insn[0], insn[1]);
+  displaced_debug_printf ("fixup (%s, %s), insn = 0x%02x 0x%02x ...",
+			  paddress (gdbarch, from), paddress (gdbarch, to),
+			  insn[0], insn[1]);
 
   /* If we used a tmp reg, restore it.	*/
 
   if (dsc->tmp_used)
     {
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog, "displaced: restoring reg %d to %s\n",
-			    dsc->tmp_regno, paddress (gdbarch, dsc->tmp_save));
+      displaced_debug_printf ("restoring reg %d to %s",
+			      dsc->tmp_regno, paddress (gdbarch, dsc->tmp_save));
       regcache_cooked_write_unsigned (regs, dsc->tmp_regno, dsc->tmp_save);
     }
 
@@ -1713,14 +1672,14 @@ amd64_displaced_step_fixup (struct gdbar
      the displaced instruction; make it relative to the original insn.
      Well, signal handler returns don't need relocation either, but we use the
      value of %rip to recognize those; see below.  */
-  if (! amd64_absolute_jmp_p (insn_details)
-      && ! amd64_absolute_call_p (insn_details)
-      && ! amd64_ret_p (insn_details))
+  if (!completed_p
+      || (!amd64_absolute_jmp_p (insn_details)
+	  && !amd64_absolute_call_p (insn_details)
+	  && !amd64_ret_p (insn_details)))
     {
-      ULONGEST orig_rip;
       int insn_len;
 
-      regcache_cooked_read_unsigned (regs, AMD64_RIP_REGNUM, &orig_rip);
+      CORE_ADDR pc = regcache_read_pc (regs);
 
       /* A signal trampoline system call changes the %rip, resuming
 	 execution of the main program after the signal handler has
@@ -1737,33 +1696,24 @@ amd64_displaced_step_fixup (struct gdbar
 	 it unrelocated.  Goodness help us if there are PC-relative
 	 system calls.	*/
       if (amd64_syscall_p (insn_details, &insn_len)
-	  && orig_rip != to + insn_len
 	  /* GDB can get control back after the insn after the syscall.
-	     Presumably this is a kernel bug.
-	     Fixup ensures its a nop, we add one to the length for it.  */
-	  && orig_rip != to + insn_len + 1)
-	{
-	  if (debug_displaced)
-	    fprintf_unfiltered (gdb_stdlog,
-				"displaced: syscall changed %%rip; "
-				"not relocating\n");
-	}
+	     Presumably this is a kernel bug.  Fixup ensures it's a nop, we
+	     add one to the length for it.  */
+	  && (pc < to || pc > (to + insn_len + 1)))
+	displaced_debug_printf ("syscall changed %%rip; not relocating");
       else
 	{
-	  ULONGEST rip = orig_rip - insn_offset;
+	  CORE_ADDR rip = pc - insn_offset;
 
 	  /* If we just stepped over a breakpoint insn, we don't backup
 	     the pc on purpose; this is to match behaviour without
 	     stepping.  */
 
-	  regcache_cooked_write_unsigned (regs, AMD64_RIP_REGNUM, rip);
+	  regcache_write_pc (regs, rip);
 
-	  if (debug_displaced)
-	    fprintf_unfiltered (gdb_stdlog,
-				"displaced: "
-				"relocated %%rip from %s to %s\n",
-				paddress (gdbarch, orig_rip),
-				paddress (gdbarch, rip));
+	  displaced_debug_printf ("relocated %%rip from %s to %s",
+				  paddress (gdbarch, pc),
+				  paddress (gdbarch, rip));
 	}
     }
 
@@ -1775,7 +1725,7 @@ amd64_displaced_step_fixup (struct gdbar
   /* If the instruction was a call, the return address now atop the
      stack is the address following the copied instruction.  We need
      to make it the address following the original instruction.	 */
-  if (amd64_call_p (insn_details))
+  if (completed_p && amd64_call_p (insn_details))
     {
       ULONGEST rsp;
       ULONGEST retaddr;
@@ -1786,12 +1736,9 @@ amd64_displaced_step_fixup (struct gdbar
       retaddr = (retaddr - insn_offset) & 0xffffffffffffffffULL;
       write_memory_unsigned_integer (rsp, retaddr_len, byte_order, retaddr);
 
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog,
-			    "displaced: relocated return addr at %s "
-			    "to %s\n",
-			    paddress (gdbarch, rsp),
-			    paddress (gdbarch, retaddr));
+      displaced_debug_printf ("relocated return addr at %s to %s",
+			      paddress (gdbarch, rsp),
+			      paddress (gdbarch, retaddr));
     }
 }
 
@@ -1832,21 +1779,21 @@ amd64_relocate_instruction (struct gdbar
   int len = gdbarch_max_insn_length (gdbarch);
   /* Extra space for sentinels.  */
   int fixup_sentinel_space = len;
-  gdb_byte *buf = (gdb_byte *) xmalloc (len + fixup_sentinel_space);
+  gdb::byte_vector buf (len + fixup_sentinel_space);
   struct amd64_insn insn_details;
   int offset = 0;
   LONGEST rel32, newrel;
   gdb_byte *insn;
   int insn_length;
 
-  read_memory (oldloc, buf, len);
+  read_memory (oldloc, buf.data (), len);
 
   /* Set up the sentinel space so we don't have to worry about running
      off the end of the buffer.  An excessive number of leading prefixes
      could otherwise cause this.  */
-  memset (buf + len, 0, fixup_sentinel_space);
+  memset (buf.data () + len, 0, fixup_sentinel_space);
 
-  insn = buf;
+  insn = buf.data ();
   amd64_get_insn_details (insn, &insn_details);
 
   insn_length = gdb_buffered_insn_length (gdbarch, insn, len, oldloc);
@@ -1909,12 +1856,9 @@ amd64_relocate_instruction (struct gdbar
       newrel = (oldloc - *to) + rel32;
       store_signed_integer (insn + 1, 4, byte_order, newrel);
 
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog,
-			    "Adjusted insn rel32=%s at %s to"
-			    " rel32=%s at %s\n",
-			    hex_string (rel32), paddress (gdbarch, oldloc),
-			    hex_string (newrel), paddress (gdbarch, *to));
+      displaced_debug_printf ("adjusted insn rel32=%s at %s to rel32=%s at %s",
+			      hex_string (rel32), paddress (gdbarch, oldloc),
+			      hex_string (newrel), paddress (gdbarch, *to));
 
       /* Write the adjusted jump into its displaced location.  */
       append_insns (to, 5, insn);
@@ -1938,16 +1882,13 @@ amd64_relocate_instruction (struct gdbar
       rel32 = extract_signed_integer (insn + offset, 4, byte_order);
       newrel = (oldloc - *to) + rel32;
       store_signed_integer (insn + offset, 4, byte_order, newrel);
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog,
-			    "Adjusted insn rel32=%s at %s to"
-			    " rel32=%s at %s\n",
-			    hex_string (rel32), paddress (gdbarch, oldloc),
-			    hex_string (newrel), paddress (gdbarch, *to));
+      displaced_debug_printf ("adjusted insn rel32=%s at %s to rel32=%s at %s",
+			      hex_string (rel32), paddress (gdbarch, oldloc),
+			      hex_string (newrel), paddress (gdbarch, *to));
     }
 
   /* Write the adjusted instruction into its displaced location.  */
-  append_insns (to, insn_length, buf);
+  append_insns (to, insn_length, buf.data ());
 }
 
 
@@ -2038,8 +1979,8 @@ amd64_analyze_stack_align (CORE_ADDR pc,
 
      "andq $-XXX, %rsp" can be either 4 bytes or 7 bytes:
      
-     	0x48 0x83 0xe4 0xf0			andq $-16, %rsp
-     	0x48 0x81 0xe4 0x00 0xff 0xff 0xff	andq $-256, %rsp
+	0x48 0x83 0xe4 0xf0			andq $-16, %rsp
+	0x48 0x81 0xe4 0x00 0xff 0xff 0xff	andq $-256, %rsp
    */
 
   gdb_byte buf[18];
@@ -2202,13 +2143,13 @@ amd64_x32_analyze_stack_align (CORE_ADDR
 
      "andq $-XXX, %rsp" can be either 4 bytes or 7 bytes:
      
-     	0x48 0x83 0xe4 0xf0			andq $-16, %rsp
-     	0x48 0x81 0xe4 0x00 0xff 0xff 0xff	andq $-256, %rsp
+	0x48 0x83 0xe4 0xf0			andq $-16, %rsp
+	0x48 0x81 0xe4 0x00 0xff 0xff 0xff	andq $-256, %rsp
 
      "andl $-XXX, %esp" can be either 3 bytes or 6 bytes:
      
-     	0x83 0xe4 0xf0			andl $-16, %esp
-     	0x81 0xe4 0x00 0xff 0xff 0xff	andl $-256, %esp
+	0x83 0xe4 0xf0			andl $-16, %esp
+	0x81 0xe4 0x00 0xff 0xff 0xff	andl $-256, %esp
    */
 
   gdb_byte buf[19];
@@ -2361,6 +2302,9 @@ amd64_x32_analyze_stack_align (CORE_ADDR
       pushq %rbp        0x55
       movl %esp, %ebp   0x89 0xe5 (or 0x8b 0xec)
 
+   The `endbr64` instruction can be found before these sequences, and will be
+   skipped if found.
+
    Any function that doesn't start with one of these sequences will be
    assumed to have no prologue and thus no valid frame pointer in
    %rbp.  */
@@ -2371,6 +2315,8 @@ amd64_analyze_prologue (struct gdbarch *
 			struct amd64_frame_cache *cache)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  /* The `endbr64` instruction.  */
+  static const gdb_byte endbr64[4] = { 0xf3, 0x0f, 0x1e, 0xfa };
   /* There are two variations of movq %rsp, %rbp.  */
   static const gdb_byte mov_rsp_rbp_1[3] = { 0x48, 0x89, 0xe5 };
   static const gdb_byte mov_rsp_rbp_2[3] = { 0x48, 0x8b, 0xec };
@@ -2391,16 +2337,30 @@ amd64_analyze_prologue (struct gdbarch *
 
   op = read_code_unsigned_integer (pc, 1, byte_order);
 
+  /* Check for the `endbr64` instruction, skip it if found.  */
+  if (op == endbr64[0])
+    {
+      read_code (pc + 1, buf, 3);
+
+      if (memcmp (buf, &endbr64[1], 3) == 0)
+	pc += 4;
+
+      op = read_code_unsigned_integer (pc, 1, byte_order);
+    }
+
+  if (current_pc <= pc)
+    return current_pc;
+
   if (op == 0x55)		/* pushq %rbp */
     {
       /* Take into account that we've executed the `pushq %rbp' that
-         starts this instruction sequence.  */
+	 starts this instruction sequence.  */
       cache->saved_regs[AMD64_RBP_REGNUM] = 0;
       cache->sp_offset += 8;
 
       /* If that's all, return now.  */
       if (current_pc <= pc + 1)
-        return current_pc;
+	return current_pc;
 
       read_code (pc + 1, buf, 3);
 
@@ -2413,7 +2373,7 @@ amd64_analyze_prologue (struct gdbarch *
 	  return pc + 4;
 	}
 
-      /* For X32, also check for `movq %esp, %ebp'.  */
+      /* For X32, also check for `movl %esp, %ebp'.  */
       if (gdbarch_ptr_bit (gdbarch) == 32)
 	{
 	  if (memcmp (buf, mov_esp_ebp_1, 2) == 0
@@ -2461,8 +2421,8 @@ amd64_skip_xmm_prologue (CORE_ADDR pc, C
 
   start_pc_sal = find_pc_sect_line (start_pc, NULL, 0);
   if (start_pc_sal.symtab == NULL
-      || producer_is_gcc_ge_4 (COMPUNIT_PRODUCER
-	   (SYMTAB_COMPUNIT (start_pc_sal.symtab))) < 6
+      || producer_is_gcc_ge_4 (start_pc_sal.symtab->compunit ()
+			       ->producer ()) < 6
       || start_pc_sal.pc != start_pc || pc >= start_pc_sal.end)
     return pc;
 
@@ -2486,7 +2446,7 @@ amd64_skip_xmm_prologue (CORE_ADDR pc, C
     {
       /* 0x0f 0x29 0b??000101 movaps %xmmreg?,-0x??(%rbp) */
       if (buf[offset] != 0x0f || buf[offset + 1] != 0x29
-          || (buf[offset + 2] & 0x3f) != (xmmreg << 3 | 0x5))
+	  || (buf[offset + 2] & 0x3f) != (xmmreg << 3 | 0x5))
 	return pc;
 
       /* 0b01?????? */
@@ -2527,13 +2487,15 @@ amd64_skip_prologue (struct gdbarch *gdb
 	= skip_prologue_using_sal (gdbarch, func_addr);
       struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
 
-      /* Clang always emits a line note before the prologue and another
-	 one after.  We trust clang to emit usable line notes.  */
+      /* LLVM backend (Clang/Flang) always emits a line note before the
+	 prologue and another one after.  We trust clang and newer Intel
+	 compilers to emit usable line notes.  */
       if (post_prologue_pc
 	  && (cust != NULL
-	      && COMPUNIT_PRODUCER (cust) != NULL
-	      && startswith (COMPUNIT_PRODUCER (cust), "clang ")))
-        return std::max (start_pc, post_prologue_pc);
+	      && cust->producer () != nullptr
+	      && (producer_is_llvm (cust->producer ())
+	      || producer_is_icc_ge_19 (cust->producer ()))))
+	return std::max (start_pc, post_prologue_pc);
     }
 
   amd64_init_frame_cache (&cache);
@@ -2549,7 +2511,7 @@ amd64_skip_prologue (struct gdbarch *gdb
 /* Normal frames.  */
 
 static void
-amd64_frame_cache_1 (struct frame_info *this_frame,
+amd64_frame_cache_1 (frame_info_ptr this_frame,
 		     struct amd64_frame_cache *cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -2618,7 +2580,7 @@ amd64_frame_cache_1 (struct frame_info *
 }
 
 static struct amd64_frame_cache *
-amd64_frame_cache (struct frame_info *this_frame, void **this_cache)
+amd64_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct amd64_frame_cache *cache;
 
@@ -2642,7 +2604,7 @@ amd64_frame_cache (struct frame_info *th
 }
 
 static enum unwind_stop_reason
-amd64_frame_unwind_stop_reason (struct frame_info *this_frame,
+amd64_frame_unwind_stop_reason (frame_info_ptr this_frame,
 				void **this_cache)
 {
   struct amd64_frame_cache *cache =
@@ -2659,7 +2621,7 @@ amd64_frame_unwind_stop_reason (struct f
 }
 
 static void
-amd64_frame_this_id (struct frame_info *this_frame, void **this_cache,
+amd64_frame_this_id (frame_info_ptr this_frame, void **this_cache,
 		     struct frame_id *this_id)
 {
   struct amd64_frame_cache *cache =
@@ -2677,7 +2639,7 @@ amd64_frame_this_id (struct frame_info *
 }
 
 static struct value *
-amd64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
+amd64_frame_prev_register (frame_info_ptr this_frame, void **this_cache,
 			   int regnum)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -2698,6 +2660,7 @@ amd64_frame_prev_register (struct frame_
 
 static const struct frame_unwind amd64_frame_unwind =
 {
+  "amd64 prologue",
   NORMAL_FRAME,
   amd64_frame_unwind_stop_reason,
   amd64_frame_this_id,
@@ -2730,10 +2693,10 @@ amd64_gen_return_address (struct gdbarch
    on both platforms.  */
 
 static struct amd64_frame_cache *
-amd64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
+amd64_sigtramp_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   struct amd64_frame_cache *cache;
   CORE_ADDR addr;
@@ -2770,7 +2733,7 @@ amd64_sigtramp_frame_cache (struct frame
 }
 
 static enum unwind_stop_reason
-amd64_sigtramp_frame_unwind_stop_reason (struct frame_info *this_frame,
+amd64_sigtramp_frame_unwind_stop_reason (frame_info_ptr this_frame,
 					 void **this_cache)
 {
   struct amd64_frame_cache *cache =
@@ -2783,7 +2746,7 @@ amd64_sigtramp_frame_unwind_stop_reason
 }
 
 static void
-amd64_sigtramp_frame_this_id (struct frame_info *this_frame,
+amd64_sigtramp_frame_this_id (frame_info_ptr this_frame,
 			      void **this_cache, struct frame_id *this_id)
 {
   struct amd64_frame_cache *cache =
@@ -2801,7 +2764,7 @@ amd64_sigtramp_frame_this_id (struct fra
 }
 
 static struct value *
-amd64_sigtramp_frame_prev_register (struct frame_info *this_frame,
+amd64_sigtramp_frame_prev_register (frame_info_ptr this_frame,
 				    void **this_cache, int regnum)
 {
   /* Make sure we've initialized the cache.  */
@@ -2812,10 +2775,11 @@ amd64_sigtramp_frame_prev_register (stru
 
 static int
 amd64_sigtramp_frame_sniffer (const struct frame_unwind *self,
-			      struct frame_info *this_frame,
+			      frame_info_ptr this_frame,
 			      void **this_cache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
+  gdbarch *arch = get_frame_arch (this_frame);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (arch);
 
   /* We shouldn't even bother if we don't have a sigcontext_addr
      handler.  */
@@ -2842,6 +2806,7 @@ amd64_sigtramp_frame_sniffer (const stru
 
 static const struct frame_unwind amd64_sigtramp_frame_unwind =
 {
+  "amd64 sigtramp",
   SIGTRAMP_FRAME,
   amd64_sigtramp_frame_unwind_stop_reason,
   amd64_sigtramp_frame_this_id,
@@ -2852,7 +2817,7 @@ static const struct frame_unwind amd64_s
 
 
 static CORE_ADDR
-amd64_frame_base_address (struct frame_info *this_frame, void **this_cache)
+amd64_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct amd64_frame_cache *cache =
     amd64_frame_cache (this_frame, this_cache);
@@ -2868,6 +2833,30 @@ static const struct frame_base amd64_fra
   amd64_frame_base_address
 };
 
+/* Implement core of the stack_frame_destroyed_p gdbarch method.  */
+
+static int
+amd64_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  gdb_byte insn;
+
+  std::optional<CORE_ADDR> epilogue = find_epilogue_using_linetable (pc);
+
+  /* PC is pointing at the next instruction to be executed. If it is
+     equal to the epilogue start, it means we're right before it starts,
+     so the stack is still valid.  */
+  if (epilogue)
+    return pc > epilogue;
+
+  if (target_read_memory (pc, &insn, 1))
+    return 0;   /* Can't read memory at pc.  */
+
+  if (insn != 0xc3)     /* 'ret' instruction.  */
+    return 0;
+
+  return 1;
+}
+
 /* Normal frames, but in a function epilogue.  */
 
 /* Implement the stack_frame_destroyed_p gdbarch method.
@@ -2879,36 +2868,68 @@ static const struct frame_base amd64_fra
 static int
 amd64_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  gdb_byte insn;
-  struct compunit_symtab *cust;
+  struct compunit_symtab *cust = find_pc_compunit_symtab (pc);
 
-  cust = find_pc_compunit_symtab (pc);
-  if (cust != NULL && COMPUNIT_EPILOGUE_UNWIND_VALID (cust))
-    return 0;
+  if (cust != nullptr && cust->producer () != nullptr
+      && producer_is_llvm (cust->producer ()))
+    return amd64_stack_frame_destroyed_p_1 (gdbarch, pc);
 
-  if (target_read_memory (pc, &insn, 1))
-    return 0;   /* Can't read memory at pc.  */
+  return 0;
+}
 
-  if (insn != 0xc3)     /* 'ret' instruction.  */
+static int
+amd64_epilogue_frame_sniffer_1 (const struct frame_unwind *self,
+				frame_info_ptr this_frame,
+				void **this_prologue_cache, bool override_p)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  CORE_ADDR pc = get_frame_pc (this_frame);
+
+  if (frame_relative_level (this_frame) != 0)
+    /* We're not in the inner frame, so assume we're not in an epilogue.  */
     return 0;
 
-  return 1;
+  bool unwind_valid_p
+    = compunit_epilogue_unwind_valid (find_pc_compunit_symtab (pc));
+  if (override_p)
+    {
+      if (unwind_valid_p)
+	/* Don't override the symtab unwinders, skip
+	   "amd64 epilogue override".  */
+	return 0;
+    }
+  else
+    {
+      if (!unwind_valid_p)
+	/* "amd64 epilogue override" unwinder already ran, skip
+	   "amd64 epilogue".  */
+	return 0;
+    }
+
+  /* Check whether we're in an epilogue.  */
+  return amd64_stack_frame_destroyed_p_1 (gdbarch, pc);
+}
+
+static int
+amd64_epilogue_override_frame_sniffer (const struct frame_unwind *self,
+				       frame_info_ptr this_frame,
+				       void **this_prologue_cache)
+{
+  return amd64_epilogue_frame_sniffer_1 (self, this_frame, this_prologue_cache,
+					 true);
 }
 
 static int
 amd64_epilogue_frame_sniffer (const struct frame_unwind *self,
-			      struct frame_info *this_frame,
+			      frame_info_ptr this_frame,
 			      void **this_prologue_cache)
 {
-  if (frame_relative_level (this_frame) == 0)
-    return amd64_stack_frame_destroyed_p (get_frame_arch (this_frame),
-					  get_frame_pc (this_frame));
-  else
-    return 0;
+  return amd64_epilogue_frame_sniffer_1 (self, this_frame, this_prologue_cache,
+					 false);
 }
 
 static struct amd64_frame_cache *
-amd64_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
+amd64_epilogue_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -2923,18 +2944,18 @@ amd64_epilogue_frame_cache (struct frame
 
   try
     {
-      /* Cache base will be %esp plus cache->sp_offset (-8).  */
+      /* Cache base will be %rsp plus cache->sp_offset (-8).  */
       get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
       cache->base = extract_unsigned_integer (buf, 8,
 					      byte_order) + cache->sp_offset;
 
       /* Cache pc will be the frame func.  */
-      cache->pc = get_frame_pc (this_frame);
+      cache->pc = get_frame_func (this_frame);
 
-      /* The saved %esp will be at cache->base plus 16.  */
+      /* The previous value of %rsp is cache->base plus 16.  */
       cache->saved_sp = cache->base + 16;
 
-      /* The saved %eip will be at cache->base plus 8.  */
+      /* The saved %rip will be at cache->base plus 8.  */
       cache->saved_regs[AMD64_RIP_REGNUM] = cache->base + 8;
 
       cache->base_p = 1;
@@ -2949,7 +2970,7 @@ amd64_epilogue_frame_cache (struct frame
 }
 
 static enum unwind_stop_reason
-amd64_epilogue_frame_unwind_stop_reason (struct frame_info *this_frame,
+amd64_epilogue_frame_unwind_stop_reason (frame_info_ptr this_frame,
 					 void **this_cache)
 {
   struct amd64_frame_cache *cache
@@ -2962,7 +2983,7 @@ amd64_epilogue_frame_unwind_stop_reason
 }
 
 static void
-amd64_epilogue_frame_this_id (struct frame_info *this_frame,
+amd64_epilogue_frame_this_id (frame_info_ptr this_frame,
 			      void **this_cache,
 			      struct frame_id *this_id)
 {
@@ -2972,11 +2993,23 @@ amd64_epilogue_frame_this_id (struct fra
   if (!cache->base_p)
     (*this_id) = frame_id_build_unavailable_stack (cache->pc);
   else
-    (*this_id) = frame_id_build (cache->base + 8, cache->pc);
+    (*this_id) = frame_id_build (cache->base + 16, cache->pc);
 }
 
+static const struct frame_unwind amd64_epilogue_override_frame_unwind =
+{
+  "amd64 epilogue override",
+  NORMAL_FRAME,
+  amd64_epilogue_frame_unwind_stop_reason,
+  amd64_epilogue_frame_this_id,
+  amd64_frame_prev_register,
+  NULL,
+  amd64_epilogue_override_frame_sniffer
+};
+
 static const struct frame_unwind amd64_epilogue_frame_unwind =
 {
+  "amd64 epilogue",
   NORMAL_FRAME,
   amd64_epilogue_frame_unwind_stop_reason,
   amd64_epilogue_frame_this_id,
@@ -2986,7 +3019,7 @@ static const struct frame_unwind amd64_e
 };
 
 static struct frame_id
-amd64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
+amd64_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
 {
   CORE_ADDR fp;
 
@@ -3013,7 +3046,7 @@ amd64_supply_fpregset (const struct regs
 		       int regnum, const void *fpregs, size_t len)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  const i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   gdb_assert (len >= tdep->sizeof_fpregset);
   amd64_supply_fxsave (regcache, regnum, fpregs);
@@ -3030,7 +3063,7 @@ amd64_collect_fpregset (const struct reg
 			int regnum, void *fpregs, size_t len)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  const i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   gdb_assert (len >= tdep->sizeof_fpregset);
   amd64_collect_fxsave (regcache, regnum, fpregs);
@@ -3049,13 +3082,14 @@ const struct regset amd64_fpregset =
    success.  */
 
 static int
-amd64_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+amd64_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
   gdb_byte buf[8];
   CORE_ADDR jb_addr;
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  int jb_pc_offset = gdbarch_tdep (gdbarch)->jb_pc_offset;
-  int len = TYPE_LENGTH (builtin_type (gdbarch)->builtin_func_ptr);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
+  int jb_pc_offset = tdep->jb_pc_offset;
+  int len = builtin_type (gdbarch)->builtin_func_ptr->length ();
 
   /* If JB_PC_OFFSET is -1, we have no way to find out where the
      longjmp will land.	 */
@@ -3097,7 +3131,7 @@ void
 amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch,
 		const target_desc *default_tdesc)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   const struct target_desc *tdesc = info.target_desc;
   static const char *const stap_integer_prefixes[] = { "$", NULL };
   static const char *const stap_register_prefixes[] = { "%", NULL };
@@ -3169,8 +3203,7 @@ amd64_init_abi (struct gdbarch_info info
 
   set_gdbarch_pseudo_register_read_value (gdbarch,
 					  amd64_pseudo_register_read_value);
-  set_gdbarch_pseudo_register_write (gdbarch,
-				     amd64_pseudo_register_write);
+  set_gdbarch_pseudo_register_write (gdbarch, amd64_pseudo_register_write);
   set_gdbarch_ax_pseudo_register_collect (gdbarch,
 					  amd64_ax_pseudo_register_collect);
 
@@ -3219,7 +3252,7 @@ amd64_init_abi (struct gdbarch_info info
   set_gdbarch_register_to_value (gdbarch, i387_register_to_value);
   set_gdbarch_value_to_register (gdbarch, i387_value_to_register);
 
-  set_gdbarch_return_value (gdbarch, amd64_return_value);
+  set_gdbarch_return_value_as_value (gdbarch, amd64_return_value);
 
   set_gdbarch_skip_prologue (gdbarch, amd64_skip_prologue);
 
@@ -3228,9 +3261,11 @@ amd64_init_abi (struct gdbarch_info info
   set_gdbarch_dummy_id (gdbarch, amd64_dummy_id);
 
   /* Hook the function epilogue frame unwinder.  This unwinder is
-     appended to the list first, so that it supercedes the other
+     appended to the list first, so that it supersedes the other
      unwinders in function epilogues.  */
-  frame_unwind_prepend_unwinder (gdbarch, &amd64_epilogue_frame_unwind);
+  frame_unwind_prepend_unwinder (gdbarch, &amd64_epilogue_override_frame_unwind);
+
+  frame_unwind_append_unwinder (gdbarch, &amd64_epilogue_frame_unwind);
 
   /* Hook the prologue-based frame unwinders.  */
   frame_unwind_append_unwinder (gdbarch, &amd64_sigtramp_frame_unwind);
@@ -3243,6 +3278,8 @@ amd64_init_abi (struct gdbarch_info info
 
   set_gdbarch_gen_return_address (gdbarch, amd64_gen_return_address);
 
+  set_gdbarch_stack_frame_destroyed_p (gdbarch, amd64_stack_frame_destroyed_p);
+
   /* SystemTap variables and functions.  */
   set_gdbarch_stap_integer_prefixes (gdbarch, stap_integer_prefixes);
   set_gdbarch_stap_register_prefixes (gdbarch, stap_register_prefixes);
@@ -3260,6 +3297,8 @@ amd64_init_abi (struct gdbarch_info info
 
   set_gdbarch_in_indirect_branch_thunk (gdbarch,
 					amd64_in_indirect_branch_thunk);
+
+  register_amd64_ravenscar_ops (gdbarch);
 }
 
 /* Initialize ARCH for x86-64, no osabi.  */
@@ -3274,7 +3313,7 @@ amd64_none_init_abi (gdbarch_info info,
 static struct type *
 amd64_x32_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   switch (regnum - tdep->eax_regnum)
     {
@@ -3292,7 +3331,7 @@ void
 amd64_x32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch,
 		    const target_desc *default_tdesc)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   amd64_init_abi (info, gdbarch, default_tdesc);
 
@@ -3334,13 +3373,14 @@ amd64_target_description (uint64_t xcr0,
   return *tdesc;
 }
 
+void _initialize_amd64_tdep ();
 void
-_initialize_amd64_tdep (void)
+_initialize_amd64_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_NONE,
- 			  amd64_none_init_abi);
+			  amd64_none_init_abi);
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x64_32, GDB_OSABI_NONE,
- 			  amd64_x32_none_init_abi);
+			  amd64_x32_none_init_abi);
 }
 
 
@@ -3361,7 +3401,7 @@ amd64_supply_fxsave (struct regcache *re
 		     const void *fxsave)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   i387_supply_fxsave (regcache, regnum, fxsave);
 
@@ -3384,7 +3424,7 @@ amd64_supply_xsave (struct regcache *reg
 		    const void *xsave)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   i387_supply_xsave (regcache, regnum, xsave);
 
@@ -3419,7 +3459,7 @@ amd64_collect_fxsave (const struct regca
 		      void *fxsave)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   gdb_byte *regs = (gdb_byte *) fxsave;
 
   i387_collect_fxsave (regcache, regnum, fxsave);
@@ -3440,7 +3480,7 @@ amd64_collect_xsave (const struct regcac
 		     void *xsave, int gcore)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
   gdb_byte *regs = (gdb_byte *) xsave;
 
   i387_collect_xsave (regcache, regnum, xsave, gcore);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-tdep.h ./gdb/amd64-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent definitions for AMD64.
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
    Contributed by Jiri Smid, SuSE Labs.
 
    This file is part of GDB.
@@ -22,10 +22,11 @@
 #define AMD64_TDEP_H
 
 struct gdbarch;
-struct frame_info;
+class frame_info_ptr;
 struct regcache;
 
 #include "i386-tdep.h"
+#include "infrun.h"
 
 /* Register numbers of various important registers.  */
 
@@ -87,13 +88,12 @@ enum amd64_regnum
 
 #define AMD64_NUM_REGS		(AMD64_GSBASE_REGNUM + 1)
 
-extern struct displaced_step_closure *amd64_displaced_step_copy_insn
+extern displaced_step_copy_insn_closure_up amd64_displaced_step_copy_insn
   (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to,
    struct regcache *regs);
-extern void amd64_displaced_step_fixup (struct gdbarch *gdbarch,
-					struct displaced_step_closure *closure,
-					CORE_ADDR from, CORE_ADDR to,
-					struct regcache *regs);
+extern void amd64_displaced_step_fixup
+  (struct gdbarch *gdbarch, displaced_step_copy_insn_closure *closure,
+   CORE_ADDR from, CORE_ADDR to, struct regcache *regs, bool completed_p);
 
 /* Initialize the ABI for amd64.  Uses DEFAULT_TDESC as fallback
    tdesc, if INFO does not specify one.  */
@@ -138,15 +138,10 @@ extern const struct regset amd64_fpregse
 /* Variables exported from amd64-linux-tdep.c.  */
 extern int amd64_linux_gregset_reg_offset[];
 
-/* Variables exported from amd64-nbsd-tdep.c.  */
+/* Variables exported from amd64-netbsd-tdep.c.  */
 extern int amd64nbsd_r_reg_offset[];
 
 /* Variables exported from amd64-obsd-tdep.c.  */
 extern int amd64obsd_r_reg_offset[];
 
-/* Variables exported from amd64-fbsd-tdep.c.  */
-extern CORE_ADDR amd64fbsd_sigtramp_start_addr;
-extern CORE_ADDR amd64fbsd_sigtramp_end_addr;
-extern int amd64fbsd_sc_reg_offset[];
-
 #endif /* amd64-tdep.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-windows-nat.c ./gdb/amd64-windows-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-windows-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-windows-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2008-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,7 +23,7 @@
 #include <windows.h>
 
 #define context_offset(x) (offsetof (CONTEXT, x))
-static const int mappings[] =
+const int amd64_mappings[] =
 {
   context_offset (Rax),
   context_offset (Rbx),
@@ -89,16 +89,15 @@ static const int mappings[] =
 
 /* segment_register_p_ftype implementation for amd64.  */
 
-static int
+int
 amd64_windows_segment_register_p (int regnum)
 {
   return regnum >= AMD64_CS_REGNUM && regnum <= AMD64_GS_REGNUM;
 }
 
+void _initialize_amd64_windows_nat ();
 void
-_initialize_amd64_windows_nat (void)
+_initialize_amd64_windows_nat ()
 {
-  windows_set_context_register_offsets (mappings);
-  windows_set_segment_register_p (amd64_windows_segment_register_p);
   x86_set_debug_register_length (8);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-windows-tdep.c ./gdb/amd64-windows-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd64-windows-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/amd64-windows-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -42,13 +42,78 @@ static int amd64_windows_dummy_call_inte
   AMD64_R9_REGNUM            /* %r9 */
 };
 
+/* This vector maps GDB's idea of a register's number into an offset into
+   the Windows API CONTEXT structure.  */
+static int amd64_windows_gregset_reg_offset[] =
+{
+  120, /* Rax */
+  144, /* Rbx */
+  128, /* Rcx */
+  136, /* Rdx */
+  168, /* Rsi */
+  176, /* Rdi */
+  160, /* Rbp */
+  152, /* Rsp */
+  184, /* R8 */
+  192, /* R9 */
+  200, /* R10 */
+  208, /* R11 */
+  216, /* R12 */
+  224, /* R13 */
+  232, /* R14 */
+  240, /* R15 */
+  248, /* Rip */
+  68,  /* EFlags */
+  56,  /* SegCs */
+  66,  /* SegSs */
+  58,  /* SegDs */
+  60,  /* SegEs */
+  62,  /* SegFs */
+  64,  /* SegGs */
+  288, /* FloatSave.FloatRegisters[0] */
+  304, /* FloatSave.FloatRegisters[1] */
+  320, /* FloatSave.FloatRegisters[2] */
+  336, /* FloatSave.FloatRegisters[3] */
+  352, /* FloatSave.FloatRegisters[4] */
+  368, /* FloatSave.FloatRegisters[5] */
+  384, /* FloatSave.FloatRegisters[6] */
+  400, /* FloatSave.FloatRegisters[7] */
+  256, /* FloatSave.ControlWord */
+  258, /* FloatSave.StatusWord */
+  260, /* FloatSave.TagWord */
+  268, /* FloatSave.ErrorSelector */
+  264, /* FloatSave.ErrorOffset */
+  276, /* FloatSave.DataSelector */
+  272, /* FloatSave.DataOffset */
+  268, /* FloatSave.ErrorSelector */
+  416, /* Xmm0 */
+  432, /* Xmm1 */
+  448, /* Xmm2 */
+  464, /* Xmm3 */
+  480, /* Xmm4 */
+  496, /* Xmm5 */
+  512, /* Xmm6 */
+  528, /* Xmm7 */
+  544, /* Xmm8 */
+  560, /* Xmm9 */
+  576, /* Xmm10 */
+  592, /* Xmm11 */
+  608, /* Xmm12 */
+  624, /* Xmm13 */
+  640, /* Xmm14 */
+  656, /* Xmm15 */
+  280, /* FloatSave.MxCsr */
+};
+
+#define AMD64_WINDOWS_SIZEOF_GREGSET 1232
+
 /* Return nonzero if an argument of type TYPE should be passed
    via one of the integer registers.  */
 
 static int
 amd64_windows_passed_by_integer_register (struct type *type)
 {
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
       case TYPE_CODE_INT:
       case TYPE_CODE_ENUM:
@@ -60,10 +125,11 @@ amd64_windows_passed_by_integer_register
       case TYPE_CODE_RVALUE_REF:
       case TYPE_CODE_STRUCT:
       case TYPE_CODE_UNION:
-	return (TYPE_LENGTH (type) == 1
-		|| TYPE_LENGTH (type) == 2
-		|| TYPE_LENGTH (type) == 4
-		|| TYPE_LENGTH (type) == 8);
+      case TYPE_CODE_COMPLEX:
+	return (type->length () == 1
+		|| type->length () == 2
+		|| type->length () == 4
+		|| type->length () == 8);
 
       default:
 	return 0;
@@ -76,9 +142,9 @@ amd64_windows_passed_by_integer_register
 static int
 amd64_windows_passed_by_xmm_register (struct type *type)
 {
-  return ((TYPE_CODE (type) == TYPE_CODE_FLT
-	   || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
-          && (TYPE_LENGTH (type) == 4 || TYPE_LENGTH (type) == 8));
+  return ((type->code () == TYPE_CODE_FLT
+	   || type->code () == TYPE_CODE_DECFLOAT)
+	  && (type->length () == 4 || type->length () == 8));
 }
 
 /* Return non-zero iff an argument of the given TYPE should be passed
@@ -110,11 +176,11 @@ amd64_windows_adjust_args_passed_by_poin
   int i;
 
   for (i = 0; i < nargs; i++)
-    if (amd64_windows_passed_by_pointer (value_type (args[i])))
+    if (amd64_windows_passed_by_pointer (args[i]->type ()))
       {
-	struct type *type = value_type (args[i]);
-	const gdb_byte *valbuf = value_contents (args[i]);
-	const int len = TYPE_LENGTH (type);
+	struct type *type = args[i]->type ();
+	const gdb_byte *valbuf = args[i]->contents ().data ();
+	const int len = type->length ();
 
 	/* Store a copy of that argument on the stack, aligned to
 	   a 16 bytes boundary, and then use the copy's address as
@@ -138,13 +204,13 @@ static void
 amd64_windows_store_arg_in_reg (struct regcache *regcache,
 				struct value *arg, int regno)
 {
-  struct type *type = value_type (arg);
-  const gdb_byte *valbuf = value_contents (arg);
+  struct type *type = arg->type ();
+  const gdb_byte *valbuf = arg->contents ().data ();
   gdb_byte buf[8];
 
-  gdb_assert (TYPE_LENGTH (type) <= 8);
+  gdb_assert (type->length () <= 8);
   memset (buf, 0, sizeof buf);
-  memcpy (buf, valbuf, std::min (TYPE_LENGTH (type), (ULONGEST) 8));
+  memcpy (buf, valbuf, std::min (type->length (), (ULONGEST) 8));
   regcache->cooked_write (regno, buf);
 }
 
@@ -185,8 +251,8 @@ amd64_windows_push_arguments (struct reg
 
   for (i = 0; i < nargs; i++)
     {
-      struct type *type = value_type (args[i]);
-      int len = TYPE_LENGTH (type);
+      struct type *type = args[i]->type ();
+      int len = type->length ();
       int on_stack_p = 1;
 
       if (reg_idx < ARRAY_SIZE (amd64_windows_dummy_call_integer_regs))
@@ -202,7 +268,7 @@ amd64_windows_push_arguments (struct reg
 	  else if (amd64_windows_passed_by_xmm_register (type))
 	    {
 	      amd64_windows_store_arg_in_reg
-	        (regcache, args[i], AMD64_XMM0_REGNUM + reg_idx);
+		(regcache, args[i], AMD64_XMM0_REGNUM + reg_idx);
 	      /* In case of varargs, these parameters must also be
 		 passed via the integer registers.  */
 	      amd64_windows_store_arg_in_reg
@@ -228,11 +294,11 @@ amd64_windows_push_arguments (struct reg
   /* Write out the arguments to the stack.  */
   for (i = 0; i < num_stack_args; i++)
     {
-      struct type *type = value_type (stack_args[i]);
-      const gdb_byte *valbuf = value_contents (stack_args[i]);
+      struct type *type = stack_args[i]->type ();
+      const gdb_byte *valbuf = stack_args[i]->contents ().data ();
 
-      write_memory (sp + element * 8, valbuf, TYPE_LENGTH (type));
-      element += ((TYPE_LENGTH (type) + 7) / 8);
+      write_memory (sp + element * 8, valbuf, type->length ());
+      element += ((type->length () + 7) / 8);
     }
 
   return sp;
@@ -258,7 +324,7 @@ amd64_windows_push_dummy_call
   if (return_method == return_method_struct)
     {
       /* The "hidden" argument is passed throught the first argument
-         register.  */
+	 register.  */
       const int arg_regnum = amd64_windows_dummy_call_integer_regs[0];
 
       store_unsigned_integer (buf, 8, byte_order, struct_addr);
@@ -289,47 +355,63 @@ amd64_windows_push_dummy_call
 static enum return_value_convention
 amd64_windows_return_value (struct gdbarch *gdbarch, struct value *function,
 			    struct type *type, struct regcache *regcache,
-			    gdb_byte *readbuf, const gdb_byte *writebuf)
+			    struct value **read_value, const gdb_byte *writebuf)
 {
-  int len = TYPE_LENGTH (type);
+  int len = type->length ();
   int regnum = -1;
 
   /* See if our value is returned through a register.  If it is, then
      store the associated register number in REGNUM.  */
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
       case TYPE_CODE_FLT:
-      case TYPE_CODE_DECFLOAT:
-        /* __m128, __m128i, __m128d, floats, and doubles are returned
-           via XMM0.  */
-        if (len == 4 || len == 8 || len == 16)
-          regnum = AMD64_XMM0_REGNUM;
-        break;
+	/* floats, and doubles are returned via XMM0.  */
+	if (len == 4 || len == 8)
+	  regnum = AMD64_XMM0_REGNUM;
+	break;
+      case TYPE_CODE_ARRAY:
+	/* __m128, __m128i and __m128d are returned via XMM0.  */
+	if (type->is_vector () && len == 16)
+	  {
+	    enum type_code code = type->target_type ()->code ();
+	    if (code == TYPE_CODE_INT || code == TYPE_CODE_FLT)
+	      {
+		regnum = AMD64_XMM0_REGNUM;
+		break;
+	      }
+	  }
+	[[fallthrough]];
       default:
-        /* All other values that are 1, 2, 4 or 8 bytes long are returned
-           via RAX.  */
-        if (len == 1 || len == 2 || len == 4 || len == 8)
-          regnum = AMD64_RAX_REGNUM;
-        break;
+	/* All other values that are 1, 2, 4 or 8 bytes long are returned
+	   via RAX.  */
+	if (len == 1 || len == 2 || len == 4 || len == 8)
+	  regnum = AMD64_RAX_REGNUM;
+	else if (len == 16 && type->code () == TYPE_CODE_INT)
+	  regnum = AMD64_XMM0_REGNUM;
+	break;
     }
 
   if (regnum < 0)
     {
       /* RAX contains the address where the return value has been stored.  */
-      if (readbuf)
-        {
+      if (read_value != nullptr)
+	{
 	  ULONGEST addr;
 
 	  regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &addr);
-	  read_memory (addr, readbuf, TYPE_LENGTH (type));
+	  *read_value = value_at_non_lval (type, addr);
 	}
       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
     }
   else
     {
       /* Extract the return value from the register where it was stored.  */
-      if (readbuf)
-	regcache->raw_read_part (regnum, 0, len, readbuf);
+      if (read_value != nullptr)
+	{
+	  *read_value = value::allocate (type);
+	  regcache->raw_read_part (regnum, 0, len,
+				   (*read_value)->contents_raw ().data ());
+	}
       if (writebuf)
 	regcache->raw_write_part (regnum, 0, len, writebuf);
       return RETURN_VALUE_REGISTER_CONVENTION;
@@ -351,17 +433,17 @@ amd64_skip_main_prologue (struct gdbarch
       gdb_byte buf[4];
 
       if (target_read_memory (pc + 1, buf, sizeof buf) == 0)
- 	{
- 	  struct bound_minimal_symbol s;
- 	  CORE_ADDR call_dest;
+	{
+	  struct bound_minimal_symbol s;
+	  CORE_ADDR call_dest;
 
 	  call_dest = pc + 5 + extract_signed_integer (buf, 4, byte_order);
- 	  s = lookup_minimal_symbol_by_pc (call_dest);
- 	  if (s.minsym != NULL
- 	      && s.minsym->linkage_name () != NULL
- 	      && strcmp (s.minsym->linkage_name (), "__main") == 0)
- 	    pc += 5;
- 	}
+	  s = lookup_minimal_symbol_by_pc (call_dest);
+	  if (s.minsym != NULL
+	      && s.minsym->linkage_name () != NULL
+	      && strcmp (s.minsym->linkage_name (), "__main") == 0)
+	    pc += 5;
+	}
     }
 
   return pc;
@@ -435,7 +517,7 @@ pc_in_range (CORE_ADDR pc, const struct
    Return 1 if an epilogue sequence was recognized, 0 otherwise.  */
 
 static int
-amd64_windows_frame_decode_epilogue (struct frame_info *this_frame,
+amd64_windows_frame_decode_epilogue (frame_info_ptr this_frame,
 				     struct amd64_windows_frame_cache *cache)
 {
   /* According to MSDN an epilogue "must consist of either an add RSP,constant
@@ -615,7 +697,7 @@ amd64_windows_frame_decode_epilogue (str
 /* Decode and execute unwind insns at UNWIND_INFO.  */
 
 static void
-amd64_windows_frame_decode_insns (struct frame_info *this_frame,
+amd64_windows_frame_decode_insns (frame_info_ptr this_frame,
 				  struct amd64_windows_frame_cache *cache,
 				  CORE_ADDR unwind_info)
 {
@@ -678,14 +760,10 @@ amd64_windows_frame_decode_insns (struct
 			      (gdb_byte *) &ex_ui, sizeof (ex_ui)) != 0)
 	return;
 
-      if (frame_debug)
-	fprintf_unfiltered
-	  (gdb_stdlog,
-	   "amd64_windows_frame_decodes_insn: "
-	   "%s: ver: %02x, plgsz: %02x, cnt: %02x, frame: %02x\n",
-	   paddress (gdbarch, unwind_info),
-	   ex_ui.Version_Flags, ex_ui.SizeOfPrologue,
-	   ex_ui.CountOfCodes, ex_ui.FrameRegisterOffset);
+      frame_debug_printf ("%s: ver: %02x, plgsz: %02x, cnt: %02x, frame: %02x",
+			  paddress (gdbarch, unwind_info),
+			  ex_ui.Version_Flags, ex_ui.SizeOfPrologue,
+			  ex_ui.CountOfCodes, ex_ui.FrameRegisterOffset);
 
       /* Check version.  */
       if (PEX64_UWI_VERSION (ex_ui.Version_Flags) != 1
@@ -723,10 +801,9 @@ amd64_windows_frame_decode_insns (struct
 	  get_frame_register (this_frame, frreg, buf);
 	  save_addr = extract_unsigned_integer (buf, 8, byte_order);
 
-	  if (frame_debug)
-	    fprintf_unfiltered (gdb_stdlog, "   frame_reg=%s, val=%s\n",
-				gdbarch_register_name (gdbarch, frreg),
-				paddress (gdbarch, save_addr));
+	  frame_debug_printf ("   frame_reg=%s, val=%s",
+			      gdbarch_register_name (gdbarch, frreg),
+			      paddress (gdbarch, save_addr));
 	}
 
       /* Read opcodes.  */
@@ -757,10 +834,8 @@ amd64_windows_frame_decode_insns (struct
 	     prologue has been fully executed.  */
 	  if (cache->pc >= start + p[0] || cache->pc < start)
 	    {
-	      if (frame_debug)
-		fprintf_unfiltered
-		  (gdb_stdlog, "   op #%u: off=0x%02x, insn=0x%02x\n",
-		   (unsigned) (p - insns), p[0], p[1]);
+	      frame_debug_printf ("   op #%u: off=0x%02x, insn=0x%02x",
+				  (unsigned) (p - insns), p[0], p[1]);
 
 	      /* If there is no frame registers defined, the current value of
 		 rsp is used instead.  */
@@ -834,11 +909,11 @@ amd64_windows_frame_decode_insns (struct
 		}
 
 	      /* Display address where the register was saved.  */
-	      if (frame_debug && reg >= 0)
-		fprintf_unfiltered
-		  (gdb_stdlog, "     [reg %s at %s]\n",
-		   gdbarch_register_name (gdbarch, reg),
-		   paddress (gdbarch, cache->prev_reg_addr[reg]));
+	      if (reg >= 0)
+		frame_debug_printf ("     [reg %s at %s]",
+				    gdbarch_register_name (gdbarch, reg),
+				    paddress (gdbarch,
+					      cache->prev_reg_addr[reg]));
 	    }
 
 	  /* Adjust with the length of the opcode.  */
@@ -900,14 +975,11 @@ amd64_windows_frame_decode_insns (struct
 	  unwind_info =
 	    extract_unsigned_integer (d.rva_UnwindData, 4, byte_order);
 
-	  if (frame_debug)
-	    fprintf_unfiltered
-	      (gdb_stdlog,
-	       "amd64_windows_frame_decodes_insn (next in chain):"
-	       " unwind_data=%s, start_rva=%s, end_rva=%s\n",
-	       paddress (gdbarch, unwind_info),
-	       paddress (gdbarch, cache->start_rva),
-	       paddress (gdbarch, cache->end_rva));
+	  frame_debug_printf ("next in chain: unwind_data=%s, start_rva=%s, "
+			      "end_rva=%s",
+			      paddress (gdbarch, unwind_info),
+			      paddress (gdbarch, cache->start_rva),
+			      paddress (gdbarch, cache->end_rva));
 	}
 
       /* Allow the user to break this loop.  */
@@ -918,10 +990,9 @@ amd64_windows_frame_decode_insns (struct
     cache->prev_rip_addr = cur_sp;
   cache->prev_sp = cur_sp + 8;
 
-  if (frame_debug)
-    fprintf_unfiltered (gdb_stdlog, "   prev_sp: %s, prev_pc @%s\n",
-			paddress (gdbarch, cache->prev_sp),
-			paddress (gdbarch, cache->prev_rip_addr));
+  frame_debug_printf ("   prev_sp: %s, prev_pc @%s",
+		      paddress (gdbarch, cache->prev_sp),
+		      paddress (gdbarch, cache->prev_rip_addr));
 }
 
 /* Find SEH unwind info for PC, returning 0 on success.
@@ -953,8 +1024,7 @@ amd64_windows_find_unwind_info (struct g
   pe = pe_data (sec->objfile->obfd);
   dir = &pe->pe_opthdr.DataDirectory[PE_EXCEPTION_TABLE];
 
-  base = pe->pe_opthdr.ImageBase
-    + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
+  base = pe->pe_opthdr.ImageBase + objfile->text_section_offset ();
   *image_base = base;
 
   /* Find the entry.
@@ -996,11 +1066,9 @@ amd64_windows_find_unwind_info (struct g
 	break;
     }
 
-  if (frame_debug)
-    fprintf_unfiltered
-      (gdb_stdlog,
-       "amd64_windows_find_unwind_data:  image_base=%s, unwind_data=%s\n",
-       paddress (gdbarch, base), paddress (gdbarch, *unwind_info));
+  frame_debug_printf ("image_base=%s, unwind_data=%s",
+		      paddress (gdbarch, base),
+		      paddress (gdbarch, *unwind_info));
 
   return 0;
 }
@@ -1009,7 +1077,7 @@ amd64_windows_find_unwind_info (struct g
    for THIS_FRAME.  */
 
 static struct amd64_windows_frame_cache *
-amd64_windows_frame_cache (struct frame_info *this_frame, void **this_cache)
+amd64_windows_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -1030,13 +1098,14 @@ amd64_windows_frame_cache (struct frame_
   cache->sp = extract_unsigned_integer (buf, 8, byte_order);
   cache->pc = pc;
 
+  /* If we can't find the unwind info, keep trying as though this is a
+     leaf function.  This situation can happen when PC==0, see
+     https://sourceware.org/bugzilla/show_bug.cgi?id=30255.  */
   if (amd64_windows_find_unwind_info (gdbarch, pc, &unwind_info,
 				      &cache->image_base,
 				      &cache->start_rva,
-				      &cache->end_rva))
-    return cache;
-
-  if (unwind_info == 0)
+				      &cache->end_rva)
+      || unwind_info == 0)
     {
       /* Assume a leaf function.  */
       cache->prev_sp = cache->sp + 8;
@@ -1054,7 +1123,7 @@ amd64_windows_frame_cache (struct frame_
    using the standard Windows x64 SEH info.  */
 
 static struct value *
-amd64_windows_frame_prev_register (struct frame_info *this_frame,
+amd64_windows_frame_prev_register (frame_info_ptr this_frame,
 				   void **this_cache, int regnum)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -1062,11 +1131,9 @@ amd64_windows_frame_prev_register (struc
     amd64_windows_frame_cache (this_frame, this_cache);
   CORE_ADDR prev;
 
-  if (frame_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"amd64_windows_frame_prev_register %s for sp=%s\n",
-			gdbarch_register_name (gdbarch, regnum),
-			paddress (gdbarch, cache->prev_sp));
+  frame_debug_printf ("%s for sp=%s",
+		      gdbarch_register_name (gdbarch, regnum),
+		      paddress (gdbarch, cache->prev_sp));
 
   if (regnum >= AMD64_XMM0_REGNUM && regnum <= AMD64_XMM0_REGNUM + 15)
       prev = cache->prev_xmm_addr[regnum - AMD64_XMM0_REGNUM];
@@ -1083,8 +1150,8 @@ amd64_windows_frame_prev_register (struc
   else
     prev = 0;
 
-  if (prev && frame_debug)
-    fprintf_unfiltered (gdb_stdlog, "  -> at %s\n", paddress (gdbarch, prev));
+  if (prev != 0)
+    frame_debug_printf ("  -> at %s", paddress (gdbarch, prev));
 
   if (prev)
     {
@@ -1102,7 +1169,7 @@ amd64_windows_frame_prev_register (struc
    the standard Windows x64 SEH info.  */
 
 static void
-amd64_windows_frame_this_id (struct frame_info *this_frame, void **this_cache,
+amd64_windows_frame_this_id (frame_info_ptr this_frame, void **this_cache,
 		   struct frame_id *this_id)
 {
   struct amd64_windows_frame_cache *cache =
@@ -1116,6 +1183,7 @@ amd64_windows_frame_this_id (struct fram
 
 static const struct frame_unwind amd64_windows_frame_unwind =
 {
+  "amd64 windows",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   &amd64_windows_frame_this_id,
@@ -1167,7 +1235,7 @@ amd64_windows_skip_prologue (struct gdba
 /* Check Win64 DLL jmp trampolines and find jump destination.  */
 
 static CORE_ADDR
-amd64_windows_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+amd64_windows_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
 {
   CORE_ADDR destination = 0;
   struct gdbarch *gdbarch = get_frame_arch (frame);
@@ -1209,9 +1277,13 @@ amd64_windows_auto_wide_charset (void)
   return "UTF-16";
 }
 
+/* Common parts for gdbarch initialization for Windows and Cygwin on AMD64.  */
+
 static void
-amd64_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+amd64_windows_init_abi_common (gdbarch_info info, struct gdbarch *gdbarch)
 {
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
+
   /* The dwarf2 unwinder (appended very early by i386_gdbarch_init) is
      preferred over the SEH one.  The reasons are:
      - binaries without SEH but with dwarf2 debug info are correctly handled
@@ -1228,26 +1300,95 @@ amd64_windows_init_abi (struct gdbarch_i
   amd64_init_abi (info, gdbarch,
 		  amd64_target_description (X86_XSTATE_SSE_MASK, false));
 
-  windows_init_abi (info, gdbarch);
-
-  /* On Windows, "long"s are only 32bit.  */
-  set_gdbarch_long_bit (gdbarch, 32);
-
   /* Function calls.  */
   set_gdbarch_push_dummy_call (gdbarch, amd64_windows_push_dummy_call);
-  set_gdbarch_return_value (gdbarch, amd64_windows_return_value);
+  set_gdbarch_return_value_as_value (gdbarch, amd64_windows_return_value);
   set_gdbarch_skip_main_prologue (gdbarch, amd64_skip_main_prologue);
   set_gdbarch_skip_trampoline_code (gdbarch,
 				    amd64_windows_skip_trampoline_code);
 
   set_gdbarch_skip_prologue (gdbarch, amd64_windows_skip_prologue);
 
+  tdep->gregset_reg_offset = amd64_windows_gregset_reg_offset;
+  tdep->gregset_num_regs = ARRAY_SIZE (amd64_windows_gregset_reg_offset);
+  tdep->sizeof_gregset = AMD64_WINDOWS_SIZEOF_GREGSET;
+  tdep->sizeof_fpregset = 0;
+
+  /* Core file support.  */
+  set_gdbarch_core_xfer_shared_libraries
+    (gdbarch, windows_core_xfer_shared_libraries);
+  set_gdbarch_core_pid_to_str (gdbarch, windows_core_pid_to_str);
+
   set_gdbarch_auto_wide_charset (gdbarch, amd64_windows_auto_wide_charset);
 }
 
+/* gdbarch initialization for Windows on AMD64.  */
+
+static void
+amd64_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  amd64_windows_init_abi_common (info, gdbarch);
+  windows_init_abi (info, gdbarch);
+
+  /* On Windows, "long"s are only 32bit.  */
+  set_gdbarch_long_bit (gdbarch, 32);
+}
+
+/* gdbarch initialization for Cygwin on AMD64.  */
+
+static void
+amd64_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  amd64_windows_init_abi_common (info, gdbarch);
+  cygwin_init_abi (info, gdbarch);
+}
+
+static gdb_osabi
+amd64_windows_osabi_sniffer (bfd *abfd)
+{
+  const char *target_name = bfd_get_target (abfd);
+
+  if (!streq (target_name, "pei-x86-64"))
+    return GDB_OSABI_UNKNOWN;
+
+  if (is_linked_with_cygwin_dll (abfd))
+    return GDB_OSABI_CYGWIN;
+
+  return GDB_OSABI_WINDOWS;
+}
+
+static enum gdb_osabi
+amd64_cygwin_core_osabi_sniffer (bfd *abfd)
+{
+  const char *target_name = bfd_get_target (abfd);
+
+  /* Cygwin uses elf core dumps.  Do not claim all ELF executables,
+     check whether there is a .reg section of proper size.  */
+  if (strcmp (target_name, "elf64-x86-64") == 0)
+    {
+      asection *section = bfd_get_section_by_name (abfd, ".reg");
+      if (section != nullptr
+	  && bfd_section_size (section) == AMD64_WINDOWS_SIZEOF_GREGSET)
+	return GDB_OSABI_CYGWIN;
+    }
+
+  return GDB_OSABI_UNKNOWN;
+}
+
+void _initialize_amd64_windows_tdep ();
 void
-_initialize_amd64_windows_tdep (void)
+_initialize_amd64_windows_tdep ()
 {
+  gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_WINDOWS,
+			  amd64_windows_init_abi);
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_CYGWIN,
-                          amd64_windows_init_abi);
+			  amd64_cygwin_init_abi);
+
+  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
+				  amd64_windows_osabi_sniffer);
+
+  /* Cygwin uses elf core dumps.  */
+  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
+				  amd64_cygwin_core_osabi_sniffer);
+
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd-dbgapi-target.c ./gdb/amd-dbgapi-target.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd-dbgapi-target.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd-dbgapi-target.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,2374 @@
+/* Target used to communicate with the AMD Debugger API.
+
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+
+#include "amd-dbgapi-target.h"
+#include "amdgpu-tdep.h"
+#include "async-event.h"
+#include "cli/cli-cmds.h"
+#include "cli/cli-decode.h"
+#include "cli/cli-style.h"
+#include "inf-loop.h"
+#include "inferior.h"
+#include "objfiles.h"
+#include "observable.h"
+#include "registry.h"
+#include "solib.h"
+#include "target.h"
+
+/* When true, print debug messages relating to the amd-dbgapi target.  */
+
+static bool debug_amd_dbgapi = false;
+
+/* Make a copy of S styled in green.  */
+
+static std::string
+make_green (const char *s)
+{
+  cli_style_option style (nullptr, ui_file_style::GREEN);
+  string_file sf (true);
+  gdb_printf (&sf, "%ps", styled_string (style.style(), s));
+  return sf.release ();
+}
+
+/* Debug module names.  "amd-dbgapi" is for the target debug messages (this
+   file), whereas "amd-dbgapi-lib" is for logging messages output by the
+   amd-dbgapi library.  */
+
+static const char *amd_dbgapi_debug_module_unstyled = "amd-dbgapi";
+static const char *amd_dbgapi_lib_debug_module_unstyled
+  = "amd-dbgapi-lib";
+
+/* Styled variants of the above.  */
+
+static const std::string amd_dbgapi_debug_module_styled
+  = make_green (amd_dbgapi_debug_module_unstyled);
+static const std::string amd_dbgapi_lib_debug_module_styled
+  = make_green (amd_dbgapi_lib_debug_module_unstyled);
+
+/* Return the styled or unstyled variant of the amd-dbgapi module name,
+   depending on whether gdb_stdlog can emit colors.  */
+
+static const char *
+amd_dbgapi_debug_module ()
+{
+  if (gdb_stdlog->can_emit_style_escape ())
+    return amd_dbgapi_debug_module_styled.c_str ();
+  else
+    return amd_dbgapi_debug_module_unstyled;
+}
+
+/* Same as the above, but for the amd-dbgapi-lib module name.  */
+
+static const char *
+amd_dbgapi_lib_debug_module ()
+{
+  if (gdb_stdlog->can_emit_style_escape ())
+    return amd_dbgapi_lib_debug_module_styled.c_str ();
+  else
+    return amd_dbgapi_lib_debug_module_unstyled;
+}
+
+/* Print an amd-dbgapi debug statement.  */
+
+#define amd_dbgapi_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (debug_amd_dbgapi, \
+			      amd_dbgapi_debug_module (), \
+			      fmt, ##__VA_ARGS__)
+
+/* Print amd-dbgapi start/end debug statements.  */
+
+#define AMD_DBGAPI_SCOPED_DEBUG_START_END(fmt, ...) \
+    scoped_debug_start_end (debug_amd_dbgapi, amd_dbgapi_debug_module (), \
+			    fmt, ##__VA_ARGS__)
+
+/* inferior_created observer token.  */
+
+static gdb::observers::token amd_dbgapi_target_inferior_created_observer_token;
+
+const gdb::observers::token &
+get_amd_dbgapi_target_inferior_created_observer_token ()
+{
+  return amd_dbgapi_target_inferior_created_observer_token;
+}
+
+/* A type holding coordinates, etc. info for a given wave.  */
+
+struct wave_coordinates
+{
+  /* The wave.  Set by the ctor.  */
+  amd_dbgapi_wave_id_t wave_id;
+
+  /* All these fields are initialized here to a value that is printed
+     as "?".  */
+  amd_dbgapi_dispatch_id_t dispatch_id = AMD_DBGAPI_DISPATCH_NONE;
+  amd_dbgapi_queue_id_t queue_id = AMD_DBGAPI_QUEUE_NONE;
+  amd_dbgapi_agent_id_t agent_id = AMD_DBGAPI_AGENT_NONE;
+  uint32_t group_ids[3] {UINT32_MAX, UINT32_MAX, UINT32_MAX};
+  uint32_t wave_in_group = UINT32_MAX;
+
+  explicit wave_coordinates (amd_dbgapi_wave_id_t wave_id)
+    : wave_id (wave_id)
+  {}
+
+  /* Return the target ID string for the wave this wave_coordinates is
+     for.  */
+  std::string to_string () const;
+
+  /* Pull out coordinates info from the amd-dbgapi library.  */
+  void fetch ();
+};
+
+/* A type holding info about a given wave.  */
+
+struct wave_info
+{
+  /* We cache the coordinates info because we need it after a wave
+     exits.  The wave's ID is here.  */
+  wave_coordinates coords;
+
+  /* The last resume_mode passed to amd_dbgapi_wave_resume for this
+     wave.  We track this because we are guaranteed to see a
+     WAVE_COMMAND_TERMINATED event if a stepping wave terminates, and
+     we need to know to not delete such a wave until we process that
+     event.  */
+  amd_dbgapi_resume_mode_t last_resume_mode = AMD_DBGAPI_RESUME_MODE_NORMAL;
+
+  /* Whether we've called amd_dbgapi_wave_stop for this wave and are
+     waiting for its stop event.  Similarly, we track this because
+     we're guaranteed to get a WAVE_COMMAND_TERMINATED event if the
+     wave terminates while being stopped.  */
+  bool stopping = false;
+
+  explicit wave_info (amd_dbgapi_wave_id_t wave_id)
+    : coords (wave_id)
+  {
+    coords.fetch ();
+  }
+};
+
+/* Big enough to hold the size of the largest register in bytes.  */
+#define AMDGPU_MAX_REGISTER_SIZE 256
+
+/* amd-dbgapi-specific inferior data.  */
+
+struct amd_dbgapi_inferior_info
+{
+  explicit amd_dbgapi_inferior_info (inferior *inf,
+				     bool precise_memory_requested = false)
+    : inf (inf)
+  {
+    precise_memory.requested = precise_memory_requested;
+  }
+
+  /* Backlink to inferior.  */
+  inferior *inf;
+
+  /* The amd_dbgapi_process_id for this inferior.  */
+  amd_dbgapi_process_id_t process_id = AMD_DBGAPI_PROCESS_NONE;
+
+  /* The amd_dbgapi_notifier_t for this inferior.  */
+  amd_dbgapi_notifier_t notifier = -1;
+
+  /* The status of the inferior's runtime support.  */
+  amd_dbgapi_runtime_state_t runtime_state = AMD_DBGAPI_RUNTIME_STATE_UNLOADED;
+
+  /* This value mirrors the current "forward progress needed" value for this
+     process in amd-dbgapi.  It is used to avoid unnecessary calls to
+     amd_dbgapi_process_set_progress, to reduce the noise in the logs.
+
+     Initialized to true, since that's the default in amd-dbgapi too.  */
+  bool forward_progress_required = true;
+
+  struct
+  {
+    /* Whether precise memory reporting is requested.  */
+    bool requested;
+
+    /* Whether precise memory was requested and successfully enabled by
+       dbgapi (it may not be available for the current hardware, for
+       instance).  */
+    bool enabled = false;
+  } precise_memory;
+
+  std::unordered_map<decltype (amd_dbgapi_breakpoint_id_t::handle),
+		     struct breakpoint *>
+    breakpoint_map;
+
+  /* List of pending events the amd-dbgapi target retrieved from the dbgapi.  */
+  std::list<std::pair<ptid_t, target_waitstatus>> wave_events;
+
+  /* Map of wave ID to wave_info.  We cache wave_info objects because
+     we need to access the info after the wave is gone, in the thread
+     exit nofication.  E.g.:
+	[AMDGPU Wave 1:4:1:1 (0,0,0)/0 exited]
+
+     wave_info objects are added when we first see the wave, and
+     removed from a thread_deleted observer.  */
+  std::unordered_map<decltype (amd_dbgapi_wave_id_t::handle), wave_info>
+    wave_info_map;
+};
+
+static amd_dbgapi_event_id_t process_event_queue
+  (amd_dbgapi_process_id_t process_id,
+   amd_dbgapi_event_kind_t until_event_kind = AMD_DBGAPI_EVENT_KIND_NONE);
+
+static const target_info amd_dbgapi_target_info = {
+  "amd-dbgapi",
+  N_("AMD Debugger API"),
+  N_("GPU debugging using the AMD Debugger API")
+};
+
+static amd_dbgapi_log_level_t get_debug_amd_dbgapi_lib_log_level ();
+
+struct amd_dbgapi_target final : public target_ops
+{
+  const target_info &
+  info () const override
+  {
+    return amd_dbgapi_target_info;
+  }
+  strata
+  stratum () const override
+  {
+    return arch_stratum;
+  }
+
+  void close () override;
+  void mourn_inferior () override;
+  void detach (inferior *inf, int from_tty) override;
+
+  void async (bool enable) override;
+
+  bool has_pending_events () override;
+  ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
+  void resume (ptid_t, int, enum gdb_signal) override;
+  void commit_resumed () override;
+  void stop (ptid_t ptid) override;
+
+  void fetch_registers (struct regcache *, int) override;
+  void store_registers (struct regcache *, int) override;
+
+  void update_thread_list () override;
+
+  struct gdbarch *thread_architecture (ptid_t) override;
+
+  void thread_events (int enable) override;
+
+  std::string pid_to_str (ptid_t ptid) override;
+
+  const char *thread_name (thread_info *tp) override;
+
+  const char *extra_thread_info (thread_info *tp) override;
+
+  bool thread_alive (ptid_t ptid) override;
+
+  enum target_xfer_status xfer_partial (enum target_object object,
+					const char *annex, gdb_byte *readbuf,
+					const gdb_byte *writebuf,
+					ULONGEST offset, ULONGEST len,
+					ULONGEST *xfered_len) override;
+
+  bool stopped_by_watchpoint () override;
+
+  bool stopped_by_sw_breakpoint () override;
+  bool stopped_by_hw_breakpoint () override;
+
+private:
+  /* True if we must report thread events.  */
+  bool m_report_thread_events = false;
+
+  /* Cache for the last value returned by thread_architecture.  */
+  gdbarch *m_cached_arch = nullptr;
+  ptid_t::tid_type m_cached_arch_tid = 0;
+};
+
+static struct amd_dbgapi_target the_amd_dbgapi_target;
+
+/* Per-inferior data key.  */
+
+static const registry<inferior>::key<amd_dbgapi_inferior_info>
+  amd_dbgapi_inferior_data;
+
+/* Fetch the amd_dbgapi_inferior_info data for the given inferior.  */
+
+static struct amd_dbgapi_inferior_info *
+get_amd_dbgapi_inferior_info (struct inferior *inferior)
+{
+  amd_dbgapi_inferior_info *info = amd_dbgapi_inferior_data.get (inferior);
+
+  if (info == nullptr)
+    info = amd_dbgapi_inferior_data.emplace (inferior, inferior);
+
+  return info;
+}
+
+/* The async event handler registered with the event loop, indicating that we
+   might have events to report to the core and that we'd like our wait method
+   to be called.
+
+   This is nullptr when async is disabled and non-nullptr when async is
+   enabled.
+
+   It is marked when a notifier fd tells us there's an event available.  The
+   callback triggers handle_inferior_event in order to pull the event from
+   amd-dbgapi and handle it.  */
+
+static async_event_handler *amd_dbgapi_async_event_handler = nullptr;
+
+std::string
+wave_coordinates::to_string () const
+{
+  std::string str = "AMDGPU Wave";
+
+  str += (agent_id != AMD_DBGAPI_AGENT_NONE
+	  ? string_printf (" %ld", agent_id.handle)
+	  : " ?");
+
+  str += (queue_id != AMD_DBGAPI_QUEUE_NONE
+	  ? string_printf (":%ld", queue_id.handle)
+	  : ":?");
+
+  str += (dispatch_id != AMD_DBGAPI_DISPATCH_NONE
+	  ? string_printf (":%ld", dispatch_id.handle)
+	  : ":?");
+
+  str += string_printf (":%ld", wave_id.handle);
+
+  str += (group_ids[0] != UINT32_MAX
+	  ? string_printf (" (%d,%d,%d)", group_ids[0], group_ids[1],
+			   group_ids[2])
+	  : " (?,?,?)");
+
+  str += (wave_in_group != UINT32_MAX
+	  ? string_printf ("/%d", wave_in_group)
+	  : "/?");
+
+  return str;
+}
+
+/* Read in wave_info for WAVE_ID.  */
+
+void
+wave_coordinates::fetch ()
+{
+  /* Any field that fails to be read is left with its in-class
+     initialized value, which is printed as "?".  */
+
+  amd_dbgapi_wave_get_info (wave_id, AMD_DBGAPI_WAVE_INFO_AGENT,
+			    sizeof (agent_id), &agent_id);
+  amd_dbgapi_wave_get_info (wave_id, AMD_DBGAPI_WAVE_INFO_QUEUE,
+			    sizeof (queue_id), &queue_id);
+  amd_dbgapi_wave_get_info (wave_id, AMD_DBGAPI_WAVE_INFO_DISPATCH,
+			    sizeof (dispatch_id), &dispatch_id);
+
+  amd_dbgapi_wave_get_info (wave_id,
+			    AMD_DBGAPI_WAVE_INFO_WORKGROUP_COORD,
+			    sizeof (group_ids), &group_ids);
+
+  amd_dbgapi_wave_get_info (wave_id,
+			    AMD_DBGAPI_WAVE_INFO_WAVE_NUMBER_IN_WORKGROUP,
+			    sizeof (wave_in_group), &wave_in_group);
+}
+
+/* Get the wave_info object for TP, from the wave_info map.  It is
+   assumed that the wave is in the map.  */
+
+static wave_info &
+get_thread_wave_info (thread_info *tp)
+{
+  amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (tp->inf);
+  amd_dbgapi_wave_id_t wave_id = get_amd_dbgapi_wave_id (tp->ptid);
+
+  auto it = info->wave_info_map.find (wave_id.handle);
+  gdb_assert (it != info->wave_info_map.end ());
+
+  return it->second;
+}
+
+/* Clear our async event handler.  */
+
+static void
+async_event_handler_clear ()
+{
+  gdb_assert (amd_dbgapi_async_event_handler != nullptr);
+  clear_async_event_handler (amd_dbgapi_async_event_handler);
+}
+
+/* Mark our async event handler.  */
+
+static void
+async_event_handler_mark ()
+{
+  gdb_assert (amd_dbgapi_async_event_handler != nullptr);
+  mark_async_event_handler (amd_dbgapi_async_event_handler);
+}
+
+/* Set forward progress requirement to REQUIRE for all processes of PROC_TARGET
+   matching PTID.  */
+
+static void
+require_forward_progress (ptid_t ptid, process_stratum_target *proc_target,
+			  bool require)
+{
+  for (inferior *inf : all_inferiors (proc_target))
+    {
+      if (ptid != minus_one_ptid && inf->pid != ptid.pid ())
+	continue;
+
+      amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+
+      if (info->process_id == AMD_DBGAPI_PROCESS_NONE)
+	continue;
+
+      /* Don't do unnecessary calls to amd-dbgapi to avoid polluting the logs.  */
+      if (info->forward_progress_required == require)
+	continue;
+
+      amd_dbgapi_status_t status
+	= amd_dbgapi_process_set_progress
+	    (info->process_id, (require
+				? AMD_DBGAPI_PROGRESS_NORMAL
+				: AMD_DBGAPI_PROGRESS_NO_FORWARD));
+      gdb_assert (status == AMD_DBGAPI_STATUS_SUCCESS);
+
+      info->forward_progress_required = require;
+
+      /* If ptid targets a single inferior and we have found it, no need to
+	 continue.  */
+      if (ptid != minus_one_ptid)
+	break;
+    }
+}
+
+/* See amd-dbgapi-target.h.  */
+
+amd_dbgapi_process_id_t
+get_amd_dbgapi_process_id (inferior *inf)
+{
+  return get_amd_dbgapi_inferior_info (inf)->process_id;
+}
+
+/* A breakpoint dbgapi wants us to insert, to handle shared library
+   loading/unloading.  */
+
+struct amd_dbgapi_target_breakpoint : public code_breakpoint
+{
+  amd_dbgapi_target_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
+    : code_breakpoint (gdbarch, bp_breakpoint)
+  {
+    symtab_and_line sal;
+    sal.pc = address;
+    sal.section = find_pc_overlay (sal.pc);
+    sal.pspace = current_program_space;
+    add_location (sal);
+
+    pspace = current_program_space;
+    disposition = disp_donttouch;
+  }
+
+  void re_set () override;
+  void check_status (struct bpstat *bs) override;
+};
+
+void
+amd_dbgapi_target_breakpoint::re_set ()
+{
+  /* Nothing.  */
+}
+
+void
+amd_dbgapi_target_breakpoint::check_status (struct bpstat *bs)
+{
+  struct inferior *inf = current_inferior ();
+  amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+  amd_dbgapi_status_t status;
+
+  bs->stop = 0;
+  bs->print_it = print_it_noop;
+
+  /* Find the address the breakpoint is set at.  */
+  auto match_breakpoint
+    = [bs] (const decltype (info->breakpoint_map)::value_type &value)
+      { return value.second == bs->breakpoint_at; };
+  auto it
+    = std::find_if (info->breakpoint_map.begin (), info->breakpoint_map.end (),
+		    match_breakpoint);
+
+  if (it == info->breakpoint_map.end ())
+    error (_("Could not find breakpoint_id for breakpoint at %s"),
+	   paddress (inf->arch (), bs->bp_location_at->address));
+
+  amd_dbgapi_breakpoint_id_t breakpoint_id { it->first };
+  amd_dbgapi_breakpoint_action_t action;
+
+  status = amd_dbgapi_report_breakpoint_hit
+    (breakpoint_id,
+     reinterpret_cast<amd_dbgapi_client_thread_id_t> (inferior_thread ()),
+     &action);
+
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd_dbgapi_report_breakpoint_hit failed for breakpoint %ld "
+	     "at %s (%s)"),
+	   breakpoint_id.handle, paddress (inf->arch (), bs->bp_location_at->address),
+	   get_status_string (status));
+
+  if (action == AMD_DBGAPI_BREAKPOINT_ACTION_RESUME)
+    return;
+
+  /* If the action is AMD_DBGAPI_BREAKPOINT_ACTION_HALT, we need to wait until
+     a breakpoint resume event for this breakpoint_id is seen.  */
+  amd_dbgapi_event_id_t resume_event_id
+    = process_event_queue (info->process_id,
+			   AMD_DBGAPI_EVENT_KIND_BREAKPOINT_RESUME);
+
+  /* We should always get a breakpoint_resume event after processing all
+     events generated by reporting the breakpoint hit.  */
+  gdb_assert (resume_event_id != AMD_DBGAPI_EVENT_NONE);
+
+  amd_dbgapi_breakpoint_id_t resume_breakpoint_id;
+  status = amd_dbgapi_event_get_info (resume_event_id,
+				      AMD_DBGAPI_EVENT_INFO_BREAKPOINT,
+				      sizeof (resume_breakpoint_id),
+				      &resume_breakpoint_id);
+
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd_dbgapi_event_get_info failed (%s)"), get_status_string (status));
+
+  /* The debugger API guarantees that [breakpoint_hit...resume_breakpoint]
+     sequences cannot interleave, so this breakpoint resume event must be
+     for our breakpoint_id.  */
+  if (resume_breakpoint_id != breakpoint_id)
+    error (_("breakpoint resume event is not for this breakpoint. "
+	      "Expected breakpoint_%ld, got breakpoint_%ld"),
+	   breakpoint_id.handle, resume_breakpoint_id.handle);
+
+  amd_dbgapi_event_processed (resume_event_id);
+}
+
+bool
+amd_dbgapi_target::thread_alive (ptid_t ptid)
+{
+  if (!ptid_is_gpu (ptid))
+    return beneath ()->thread_alive (ptid);
+
+  /* Check that the wave_id is valid.  */
+
+  amd_dbgapi_wave_state_t state;
+  amd_dbgapi_status_t status
+    = amd_dbgapi_wave_get_info (get_amd_dbgapi_wave_id (ptid),
+				AMD_DBGAPI_WAVE_INFO_STATE, sizeof (state),
+				&state);
+  return status == AMD_DBGAPI_STATUS_SUCCESS;
+}
+
+const char *
+amd_dbgapi_target::thread_name (thread_info *tp)
+{
+  if (!ptid_is_gpu (tp->ptid))
+    return beneath ()->thread_name (tp);
+
+  return nullptr;
+}
+
+std::string
+amd_dbgapi_target::pid_to_str (ptid_t ptid)
+{
+  if (!ptid_is_gpu (ptid))
+    return beneath ()->pid_to_str (ptid);
+
+  process_stratum_target *proc_target = current_inferior ()->process_target ();
+  inferior *inf = find_inferior_pid (proc_target, ptid.pid ());
+  gdb_assert (inf != nullptr);
+  amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+
+  auto wave_id = get_amd_dbgapi_wave_id (ptid);
+
+  auto it = info->wave_info_map.find (wave_id.handle);
+  if (it != info->wave_info_map.end ())
+    return it->second.coords.to_string ();
+
+  /* A wave we don't know about.  Shouldn't usually happen, but
+     asserting and bringing down the session is a bit too harsh.  Just
+     print all unknown info as "?"s.  */
+  return wave_coordinates (wave_id).to_string ();
+}
+
+const char *
+amd_dbgapi_target::extra_thread_info (thread_info *tp)
+{
+  if (!ptid_is_gpu (tp->ptid))
+    beneath ()->extra_thread_info (tp);
+
+  return nullptr;
+}
+
+target_xfer_status
+amd_dbgapi_target::xfer_partial (enum target_object object, const char *annex,
+			       gdb_byte *readbuf, const gdb_byte *writebuf,
+			       ULONGEST offset, ULONGEST requested_len,
+			       ULONGEST *xfered_len)
+{
+  std::optional<scoped_restore_current_thread> maybe_restore_thread;
+
+  if (!ptid_is_gpu (inferior_ptid))
+    return beneath ()->xfer_partial (object, annex, readbuf, writebuf, offset,
+				     requested_len, xfered_len);
+
+  gdb_assert (requested_len > 0);
+  gdb_assert (xfered_len != nullptr);
+
+  if (object != TARGET_OBJECT_MEMORY)
+    return TARGET_XFER_E_IO;
+
+  amd_dbgapi_process_id_t process_id
+    = get_amd_dbgapi_process_id (current_inferior ());
+  amd_dbgapi_wave_id_t wave_id = get_amd_dbgapi_wave_id (inferior_ptid);
+
+  size_t len = requested_len;
+  amd_dbgapi_status_t status;
+
+  if (readbuf != nullptr)
+    status = amd_dbgapi_read_memory (process_id, wave_id, 0,
+				     AMD_DBGAPI_ADDRESS_SPACE_GLOBAL,
+				     offset, &len, readbuf);
+  else
+    status = amd_dbgapi_write_memory (process_id, wave_id, 0,
+				      AMD_DBGAPI_ADDRESS_SPACE_GLOBAL,
+				      offset, &len, writebuf);
+
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    return TARGET_XFER_E_IO;
+
+  *xfered_len = len;
+  return TARGET_XFER_OK;
+}
+
+bool
+amd_dbgapi_target::stopped_by_watchpoint ()
+{
+  if (!ptid_is_gpu (inferior_ptid))
+    return beneath ()->stopped_by_watchpoint ();
+
+  return false;
+}
+
+void
+amd_dbgapi_target::resume (ptid_t scope_ptid, int step, enum gdb_signal signo)
+{
+  amd_dbgapi_debug_printf ("scope_ptid = %s", scope_ptid.to_string ().c_str ());
+
+  /* The amd_dbgapi_exceptions_t matching SIGNO will only be used if the
+     thread which is the target of the signal SIGNO is a GPU thread.  If so,
+     make sure that there is a corresponding amd_dbgapi_exceptions_t for SIGNO
+     before we try to resume any thread.  */
+  amd_dbgapi_exceptions_t exception = AMD_DBGAPI_EXCEPTION_NONE;
+  if (ptid_is_gpu (inferior_ptid))
+    {
+      switch (signo)
+	{
+	case GDB_SIGNAL_BUS:
+	  exception = AMD_DBGAPI_EXCEPTION_WAVE_APERTURE_VIOLATION;
+	  break;
+	case GDB_SIGNAL_SEGV:
+	  exception = AMD_DBGAPI_EXCEPTION_WAVE_MEMORY_VIOLATION;
+	  break;
+	case GDB_SIGNAL_ILL:
+	  exception = AMD_DBGAPI_EXCEPTION_WAVE_ILLEGAL_INSTRUCTION;
+	  break;
+	case GDB_SIGNAL_FPE:
+	  exception = AMD_DBGAPI_EXCEPTION_WAVE_MATH_ERROR;
+	  break;
+	case GDB_SIGNAL_ABRT:
+	  exception = AMD_DBGAPI_EXCEPTION_WAVE_ABORT;
+	  break;
+	case GDB_SIGNAL_TRAP:
+	  exception = AMD_DBGAPI_EXCEPTION_WAVE_TRAP;
+	  break;
+	case GDB_SIGNAL_0:
+	  exception = AMD_DBGAPI_EXCEPTION_NONE;
+	  break;
+	default:
+	  error (_("Resuming with signal %s is not supported by this agent."),
+		 gdb_signal_to_name (signo));
+	}
+    }
+
+  if (!ptid_is_gpu (inferior_ptid) || scope_ptid != inferior_ptid)
+    {
+      beneath ()->resume (scope_ptid, step, signo);
+
+      /* If the request is for a single thread, we are done.  */
+      if (scope_ptid == inferior_ptid)
+	return;
+    }
+
+  process_stratum_target *proc_target = current_inferior ()->process_target ();
+
+  /* Disable forward progress requirement.  */
+  require_forward_progress (scope_ptid, proc_target, false);
+
+  for (thread_info *thread : all_non_exited_threads (proc_target, scope_ptid))
+    {
+      if (!ptid_is_gpu (thread->ptid))
+	continue;
+
+      amd_dbgapi_wave_id_t wave_id = get_amd_dbgapi_wave_id (thread->ptid);
+      amd_dbgapi_status_t status;
+
+      wave_info &wi = get_thread_wave_info (thread);
+      amd_dbgapi_resume_mode_t &resume_mode = wi.last_resume_mode;
+      amd_dbgapi_exceptions_t wave_exception;
+      if (thread->ptid == inferior_ptid)
+	{
+	  resume_mode = (step
+			 ? AMD_DBGAPI_RESUME_MODE_SINGLE_STEP
+			 : AMD_DBGAPI_RESUME_MODE_NORMAL);
+	  wave_exception = exception;
+	}
+      else
+	{
+	  resume_mode = AMD_DBGAPI_RESUME_MODE_NORMAL;
+	  wave_exception = AMD_DBGAPI_EXCEPTION_NONE;
+	}
+
+      status = amd_dbgapi_wave_resume (wave_id, resume_mode, wave_exception);
+      if (status != AMD_DBGAPI_STATUS_SUCCESS
+	  /* Ignore the error that wave is no longer valid as that could
+	     indicate that the process has exited.  GDB treats resuming a
+	     thread that no longer exists as being successful.  */
+	  && status != AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID)
+	error (_("wave_resume for wave_%ld failed (%s)"), wave_id.handle,
+	       get_status_string (status));
+
+      wi.stopping = false;
+    }
+}
+
+void
+amd_dbgapi_target::commit_resumed ()
+{
+  amd_dbgapi_debug_printf ("called");
+
+  beneath ()->commit_resumed ();
+
+  process_stratum_target *proc_target = current_inferior ()->process_target ();
+  require_forward_progress (minus_one_ptid, proc_target, true);
+}
+
+/* Return a string version of RESUME_MODE, for debug log purposes.  */
+
+static const char *
+resume_mode_to_string (amd_dbgapi_resume_mode_t resume_mode)
+{
+  switch (resume_mode)
+    {
+    case AMD_DBGAPI_RESUME_MODE_NORMAL:
+      return "normal";
+    case AMD_DBGAPI_RESUME_MODE_SINGLE_STEP:
+      return "step";
+    }
+  gdb_assert_not_reached ("invalid amd_dbgapi_resume_mode_t");
+}
+
+void
+amd_dbgapi_target::stop (ptid_t ptid)
+{
+  amd_dbgapi_debug_printf ("ptid = %s", ptid.to_string ().c_str ());
+
+  bool many_threads = ptid == minus_one_ptid || ptid.is_pid ();
+
+  if (!ptid_is_gpu (ptid) || many_threads)
+    {
+      beneath ()->stop (ptid);
+
+      /* The request is for a single thread, we are done.  */
+      if (!many_threads)
+	return;
+    }
+
+  auto stop_one_thread = [this] (thread_info *thread)
+    {
+      gdb_assert (thread != nullptr);
+
+      amd_dbgapi_wave_id_t wave_id = get_amd_dbgapi_wave_id (thread->ptid);
+      amd_dbgapi_wave_state_t state;
+      amd_dbgapi_status_t status
+	= amd_dbgapi_wave_get_info (wave_id, AMD_DBGAPI_WAVE_INFO_STATE,
+				    sizeof (state), &state);
+      if (status == AMD_DBGAPI_STATUS_SUCCESS)
+	{
+	  /* If the wave is already known to be stopped then do nothing.  */
+	  if (state == AMD_DBGAPI_WAVE_STATE_STOP)
+	    return;
+
+	  status = amd_dbgapi_wave_stop (wave_id);
+	  if (status == AMD_DBGAPI_STATUS_SUCCESS)
+	    {
+	      wave_info &wi = get_thread_wave_info (thread);
+	      wi.stopping = true;
+	      return;
+	    }
+
+	  if (status != AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID)
+	    error (_("wave_stop for wave_%ld failed (%s)"), wave_id.handle,
+		   get_status_string (status));
+	}
+      else if (status != AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID)
+	error (_("wave_get_info for wave_%ld failed (%s)"), wave_id.handle,
+	       get_status_string (status));
+
+      /* The status is AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID.  The wave
+	 could have terminated since the last time the wave list was
+	 refreshed.  */
+
+      wave_info &wi = get_thread_wave_info (thread);
+      wi.stopping = true;
+
+      amd_dbgapi_debug_printf ("got AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID "
+			       "for wave_%ld, last_resume_mode=%s, "
+			       "report_thread_events=%d",
+			       wave_id.handle,
+			       resume_mode_to_string (wi.last_resume_mode),
+			       m_report_thread_events);
+
+      /* If the wave was stepping when it terminated, then it is
+	 guaranteed that we will see a WAVE_COMMAND_TERMINATED event
+	 for it.  Don't report a thread exit event or delete the
+	 thread yet, until we see such event.  */
+      if (wi.last_resume_mode == AMD_DBGAPI_RESUME_MODE_SINGLE_STEP)
+	return;
+
+      if (m_report_thread_events)
+	{
+	  get_amd_dbgapi_inferior_info (thread->inf)->wave_events.emplace_back
+	    (thread->ptid, target_waitstatus ().set_thread_exited (0));
+
+	  if (target_is_async_p ())
+	    async_event_handler_mark ();
+	}
+
+      delete_thread_silent (thread);
+    };
+
+  process_stratum_target *proc_target = current_inferior ()->process_target ();
+
+  /* Disable forward progress requirement.  */
+  require_forward_progress (ptid, proc_target, false);
+
+  if (!many_threads)
+    {
+      /* No need to iterate all non-exited threads if the request is to stop a
+	 specific thread.  */
+      stop_one_thread (proc_target->find_thread (ptid));
+      return;
+    }
+
+  for (auto *inf : all_inferiors (proc_target))
+    /* Use the threads_safe iterator since stop_one_thread may delete the
+       thread if it has exited.  */
+    for (auto *thread : inf->threads_safe ())
+      if (thread->state != THREAD_EXITED && thread->ptid.matches (ptid)
+	  && ptid_is_gpu (thread->ptid))
+	stop_one_thread (thread);
+}
+
+/* Callback for our async event handler.  */
+
+static void
+handle_target_event (gdb_client_data client_data)
+{
+  inferior_event_handler (INF_REG_EVENT);
+}
+
+struct scoped_amd_dbgapi_event_processed
+{
+  scoped_amd_dbgapi_event_processed (amd_dbgapi_event_id_t event_id)
+    : m_event_id (event_id)
+  {
+    gdb_assert (event_id != AMD_DBGAPI_EVENT_NONE);
+  }
+
+  ~scoped_amd_dbgapi_event_processed ()
+  {
+    amd_dbgapi_status_t status = amd_dbgapi_event_processed (m_event_id);
+    if (status != AMD_DBGAPI_STATUS_SUCCESS)
+      warning (_("Failed to acknowledge amd-dbgapi event %" PRIu64),
+	       m_event_id.handle);
+  }
+
+  DISABLE_COPY_AND_ASSIGN (scoped_amd_dbgapi_event_processed);
+
+private:
+  amd_dbgapi_event_id_t m_event_id;
+};
+
+/* Called when a dbgapi notifier fd is readable.  CLIENT_DATA is the
+   amd_dbgapi_inferior_info object corresponding to the notifier.  */
+
+static void
+dbgapi_notifier_handler (int err, gdb_client_data client_data)
+{
+  amd_dbgapi_inferior_info *info = (amd_dbgapi_inferior_info *) client_data;
+  int ret;
+
+  /* Drain the notifier pipe.  */
+  do
+    {
+      char buf;
+      ret = read (info->notifier, &buf, 1);
+    }
+  while (ret >= 0 || (ret == -1 && errno == EINTR));
+
+  if (info->inf->target_is_pushed (&the_amd_dbgapi_target))
+    {
+      /* The amd-dbgapi target is pushed: signal our async handler, the event
+	 will be consumed through our wait method.  */
+
+      async_event_handler_mark ();
+    }
+  else
+    {
+      /* The amd-dbgapi target is not pushed: if there's an event, the only
+	 expected one is one of the RUNTIME kind.  If the event tells us the
+	 inferior as activated the ROCm runtime, push the amd-dbgapi
+	 target.  */
+
+      amd_dbgapi_event_id_t event_id;
+      amd_dbgapi_event_kind_t event_kind;
+      amd_dbgapi_status_t status
+	= amd_dbgapi_process_next_pending_event (info->process_id, &event_id,
+						 &event_kind);
+      if (status != AMD_DBGAPI_STATUS_SUCCESS)
+	error (_("next_pending_event failed (%s)"), get_status_string (status));
+
+      if (event_id == AMD_DBGAPI_EVENT_NONE)
+	return;
+
+      gdb_assert (event_kind == AMD_DBGAPI_EVENT_KIND_RUNTIME);
+
+      scoped_amd_dbgapi_event_processed mark_event_processed (event_id);
+
+      amd_dbgapi_runtime_state_t runtime_state;
+      status = amd_dbgapi_event_get_info (event_id,
+					  AMD_DBGAPI_EVENT_INFO_RUNTIME_STATE,
+					  sizeof (runtime_state),
+					  &runtime_state);
+      if (status != AMD_DBGAPI_STATUS_SUCCESS)
+	error (_("event_get_info for event_%ld failed (%s)"),
+	       event_id.handle, get_status_string (status));
+
+      switch (runtime_state)
+	{
+	case AMD_DBGAPI_RUNTIME_STATE_LOADED_SUCCESS:
+	  gdb_assert (info->runtime_state == AMD_DBGAPI_RUNTIME_STATE_UNLOADED);
+	  info->runtime_state = runtime_state;
+	  amd_dbgapi_debug_printf ("pushing amd-dbgapi target");
+	  info->inf->push_target (&the_amd_dbgapi_target);
+
+	  /* The underlying target will already be async if we are running, but not if
+	     we are attaching.  */
+	  if (info->inf->process_target ()->is_async_p ())
+	    {
+	      scoped_restore_current_thread restore_thread;
+	      switch_to_inferior_no_thread (info->inf);
+
+	      /* Make sure our async event handler is created.  */
+	      target_async (true);
+	    }
+	  break;
+
+	case AMD_DBGAPI_RUNTIME_STATE_UNLOADED:
+	  gdb_assert (info->runtime_state
+		      == AMD_DBGAPI_RUNTIME_STATE_LOADED_ERROR_RESTRICTION);
+	  info->runtime_state = runtime_state;
+	  break;
+
+	case AMD_DBGAPI_RUNTIME_STATE_LOADED_ERROR_RESTRICTION:
+	  gdb_assert (info->runtime_state == AMD_DBGAPI_RUNTIME_STATE_UNLOADED);
+	  info->runtime_state = runtime_state;
+	  warning (_("amd-dbgapi: unable to enable GPU debugging "
+		     "due to a restriction error"));
+	  break;
+	}
+    }
+}
+
+void
+amd_dbgapi_target::async (bool enable)
+{
+  beneath ()->async (enable);
+
+  if (enable)
+    {
+      if (amd_dbgapi_async_event_handler != nullptr)
+	{
+	  /* Already enabled.  */
+	  return;
+	}
+
+      /* The library gives us one notifier file descriptor per inferior (even
+	 the ones that have not yet loaded their runtime).  Register them
+	 all with the event loop.  */
+      process_stratum_target *proc_target
+	= current_inferior ()->process_target ();
+
+      for (inferior *inf : all_non_exited_inferiors (proc_target))
+	{
+	  amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+
+	  if (info->notifier != -1)
+	    add_file_handler (info->notifier, dbgapi_notifier_handler, info,
+			      string_printf ("amd-dbgapi notifier for pid %d",
+					     inf->pid));
+	}
+
+      amd_dbgapi_async_event_handler
+	= create_async_event_handler (handle_target_event, nullptr,
+				      "amd-dbgapi");
+
+      /* There may be pending events to handle.  Tell the event loop to poll
+	 them.  */
+      async_event_handler_mark ();
+    }
+  else
+    {
+      if (amd_dbgapi_async_event_handler == nullptr)
+	return;
+
+      for (inferior *inf : all_inferiors ())
+	{
+	  amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+
+	  if (info->notifier != -1)
+	    delete_file_handler (info->notifier);
+	}
+
+      delete_async_event_handler (&amd_dbgapi_async_event_handler);
+    }
+}
+
+/* Make a ptid for a GPU wave.  See comment on ptid_is_gpu for more details.  */
+
+static ptid_t
+make_gpu_ptid (ptid_t::pid_type pid, amd_dbgapi_wave_id_t wave_id)
+{
+ return ptid_t (pid, 1, wave_id.handle);
+}
+
+/* When a thread is deleted, remove its wave_info from the inferior's
+   wave_info map.  */
+
+static void
+amd_dbgapi_thread_deleted (thread_info *tp)
+{
+  if (tp->inf->target_at (arch_stratum) == &the_amd_dbgapi_target
+      && ptid_is_gpu (tp->ptid))
+    {
+      amd_dbgapi_inferior_info *info = amd_dbgapi_inferior_data.get (tp->inf);
+      auto wave_id = get_amd_dbgapi_wave_id (tp->ptid);
+      auto it = info->wave_info_map.find (wave_id.handle);
+      gdb_assert (it != info->wave_info_map.end ());
+      info->wave_info_map.erase (it);
+    }
+}
+
+/* Register WAVE_PTID as a new thread in INF's thread list, and record
+   its wave_info in the inferior's wave_info map.  */
+
+static thread_info *
+add_gpu_thread (inferior *inf, ptid_t wave_ptid)
+{
+  process_stratum_target *proc_target = inf->process_target ();
+  amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+
+  auto wave_id = get_amd_dbgapi_wave_id (wave_ptid);
+
+  if (!info->wave_info_map.try_emplace (wave_id.handle,
+					wave_info (wave_id)).second)
+    internal_error ("wave ID %ld already in map", wave_id.handle);
+
+  /* Create new GPU threads silently to avoid spamming the terminal
+     with thousands of "[New Thread ...]" messages.  */
+  thread_info *thread = add_thread_silent (proc_target, wave_ptid);
+  set_running (proc_target, wave_ptid, true);
+  set_executing (proc_target, wave_ptid, true);
+  return thread;
+}
+
+/* Process an event that was just pulled out of the amd-dbgapi library.  */
+
+static void
+process_one_event (amd_dbgapi_event_id_t event_id,
+		   amd_dbgapi_event_kind_t event_kind)
+{
+  /* Automatically mark this event processed when going out of scope.  */
+  scoped_amd_dbgapi_event_processed mark_event_processed (event_id);
+
+  amd_dbgapi_process_id_t process_id;
+  amd_dbgapi_status_t status
+    = amd_dbgapi_event_get_info (event_id, AMD_DBGAPI_EVENT_INFO_PROCESS,
+				 sizeof (process_id), &process_id);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("event_get_info for event_%ld failed (%s)"), event_id.handle,
+	   get_status_string (status));
+
+  amd_dbgapi_os_process_id_t pid;
+  status = amd_dbgapi_process_get_info (process_id,
+					AMD_DBGAPI_PROCESS_INFO_OS_ID,
+					sizeof (pid), &pid);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("process_get_info for process_%ld failed (%s)"),
+	   process_id.handle, get_status_string (status));
+
+  auto *proc_target = current_inferior ()->process_target ();
+  inferior *inf = find_inferior_pid (proc_target, pid);
+  gdb_assert (inf != nullptr);
+  amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+
+  switch (event_kind)
+    {
+    case AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED:
+    case AMD_DBGAPI_EVENT_KIND_WAVE_STOP:
+      {
+	amd_dbgapi_wave_id_t wave_id;
+	status
+	  = amd_dbgapi_event_get_info (event_id, AMD_DBGAPI_EVENT_INFO_WAVE,
+				       sizeof (wave_id), &wave_id);
+	if (status != AMD_DBGAPI_STATUS_SUCCESS)
+	  error (_("event_get_info for event_%ld failed (%s)"),
+		 event_id.handle, get_status_string (status));
+
+	ptid_t event_ptid = make_gpu_ptid (pid, wave_id);
+	target_waitstatus ws;
+
+	amd_dbgapi_wave_stop_reasons_t stop_reason;
+	status = amd_dbgapi_wave_get_info (wave_id,
+					   AMD_DBGAPI_WAVE_INFO_STOP_REASON,
+					   sizeof (stop_reason), &stop_reason);
+	if (status == AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID
+	    && event_kind == AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED)
+	  ws.set_thread_exited (0);
+	else if (status == AMD_DBGAPI_STATUS_SUCCESS)
+	  {
+	    if (stop_reason & AMD_DBGAPI_WAVE_STOP_REASON_APERTURE_VIOLATION)
+	      ws.set_stopped (GDB_SIGNAL_BUS);
+	    else if (stop_reason
+		     & AMD_DBGAPI_WAVE_STOP_REASON_MEMORY_VIOLATION)
+	      ws.set_stopped (GDB_SIGNAL_SEGV);
+	    else if (stop_reason
+		     & AMD_DBGAPI_WAVE_STOP_REASON_ILLEGAL_INSTRUCTION)
+	      ws.set_stopped (GDB_SIGNAL_ILL);
+	    else if (stop_reason
+		     & (AMD_DBGAPI_WAVE_STOP_REASON_FP_INPUT_DENORMAL
+			| AMD_DBGAPI_WAVE_STOP_REASON_FP_DIVIDE_BY_0
+			| AMD_DBGAPI_WAVE_STOP_REASON_FP_OVERFLOW
+			| AMD_DBGAPI_WAVE_STOP_REASON_FP_UNDERFLOW
+			| AMD_DBGAPI_WAVE_STOP_REASON_FP_INEXACT
+			| AMD_DBGAPI_WAVE_STOP_REASON_FP_INVALID_OPERATION
+			| AMD_DBGAPI_WAVE_STOP_REASON_INT_DIVIDE_BY_0))
+	      ws.set_stopped (GDB_SIGNAL_FPE);
+	    else if (stop_reason
+		     & (AMD_DBGAPI_WAVE_STOP_REASON_BREAKPOINT
+			| AMD_DBGAPI_WAVE_STOP_REASON_WATCHPOINT
+			| AMD_DBGAPI_WAVE_STOP_REASON_SINGLE_STEP
+			| AMD_DBGAPI_WAVE_STOP_REASON_DEBUG_TRAP
+			| AMD_DBGAPI_WAVE_STOP_REASON_TRAP))
+	      ws.set_stopped (GDB_SIGNAL_TRAP);
+	    else if (stop_reason & AMD_DBGAPI_WAVE_STOP_REASON_ASSERT_TRAP)
+	      ws.set_stopped (GDB_SIGNAL_ABRT);
+	    else
+	      ws.set_stopped (GDB_SIGNAL_0);
+
+	    thread_info *thread = proc_target->find_thread (event_ptid);
+	    if (thread == nullptr)
+	      thread = add_gpu_thread (inf, event_ptid);
+
+	    /* If the wave is stopped because of a software breakpoint, the
+	       program counter needs to be adjusted so that it points to the
+	       breakpoint instruction.  */
+	    if ((stop_reason & AMD_DBGAPI_WAVE_STOP_REASON_BREAKPOINT) != 0)
+	      {
+		regcache *regcache = get_thread_regcache (thread);
+		gdbarch *gdbarch = regcache->arch ();
+
+		CORE_ADDR pc = regcache_read_pc (regcache);
+		CORE_ADDR adjusted_pc
+		  = pc - gdbarch_decr_pc_after_break (gdbarch);
+
+		if (adjusted_pc != pc)
+		  regcache_write_pc (regcache, adjusted_pc);
+	      }
+	  }
+	else
+	  error (_("wave_get_info for wave_%ld failed (%s)"),
+		 wave_id.handle, get_status_string (status));
+
+	info->wave_events.emplace_back (event_ptid, ws);
+	break;
+      }
+
+    case AMD_DBGAPI_EVENT_KIND_CODE_OBJECT_LIST_UPDATED:
+      /* We get here when the following sequence of events happens:
+
+	   - the inferior hits the amd-dbgapi "r_brk" internal breakpoint
+	   - amd_dbgapi_target_breakpoint::check_status calls
+	     amd_dbgapi_report_breakpoint_hit, which queues an event of this
+	     kind in dbgapi
+	   - amd_dbgapi_target_breakpoint::check_status calls
+	     process_event_queue, which pulls the event out of dbgapi, and
+	     gets us here
+
+	 When amd_dbgapi_target_breakpoint::check_status is called, the current
+	 inferior is the inferior that hit the breakpoint, which should still be
+	 the case now.  */
+      gdb_assert (inf == current_inferior ());
+      handle_solib_event ();
+      break;
+
+    case AMD_DBGAPI_EVENT_KIND_BREAKPOINT_RESUME:
+      /* Breakpoint resume events should be handled by the breakpoint
+	 action, and this code should not reach this.  */
+      gdb_assert_not_reached ("unhandled event kind");
+      break;
+
+    case AMD_DBGAPI_EVENT_KIND_RUNTIME:
+      {
+	amd_dbgapi_runtime_state_t runtime_state;
+
+	status = amd_dbgapi_event_get_info (event_id,
+					    AMD_DBGAPI_EVENT_INFO_RUNTIME_STATE,
+					    sizeof (runtime_state),
+					    &runtime_state);
+	if (status != AMD_DBGAPI_STATUS_SUCCESS)
+	  error (_("event_get_info for event_%ld failed (%s)"),
+		 event_id.handle, get_status_string (status));
+
+	gdb_assert (runtime_state == AMD_DBGAPI_RUNTIME_STATE_UNLOADED);
+	gdb_assert
+	  (info->runtime_state == AMD_DBGAPI_RUNTIME_STATE_LOADED_SUCCESS);
+
+	info->runtime_state = runtime_state;
+
+	gdb_assert (inf->target_is_pushed (&the_amd_dbgapi_target));
+	inf->unpush_target (&the_amd_dbgapi_target);
+      }
+      break;
+
+    default:
+      error (_("event kind (%d) not supported"), event_kind);
+    }
+}
+
+/* Return a textual version of KIND.  */
+
+static const char *
+event_kind_str (amd_dbgapi_event_kind_t kind)
+{
+  switch (kind)
+    {
+    case AMD_DBGAPI_EVENT_KIND_NONE:
+      return "NONE";
+
+    case AMD_DBGAPI_EVENT_KIND_WAVE_STOP:
+      return "WAVE_STOP";
+
+    case AMD_DBGAPI_EVENT_KIND_WAVE_COMMAND_TERMINATED:
+      return "WAVE_COMMAND_TERMINATED";
+
+    case AMD_DBGAPI_EVENT_KIND_CODE_OBJECT_LIST_UPDATED:
+      return "CODE_OBJECT_LIST_UPDATED";
+
+    case AMD_DBGAPI_EVENT_KIND_BREAKPOINT_RESUME:
+      return "BREAKPOINT_RESUME";
+
+    case AMD_DBGAPI_EVENT_KIND_RUNTIME:
+      return "RUNTIME";
+
+    case AMD_DBGAPI_EVENT_KIND_QUEUE_ERROR:
+      return "QUEUE_ERROR";
+    }
+
+  gdb_assert_not_reached ("unhandled amd_dbgapi_event_kind_t value");
+}
+
+/* Drain the dbgapi event queue of a given process_id, or of all processes if
+   process_id is AMD_DBGAPI_PROCESS_NONE.  Stop processing the events if an
+   event of a given kind is requested and `process_id` is not
+   AMD_DBGAPI_PROCESS_NONE.  Wave stop events that are not returned are queued
+   into their inferior's amd_dbgapi_inferior_info pending wave events. */
+
+static amd_dbgapi_event_id_t
+process_event_queue (amd_dbgapi_process_id_t process_id,
+		     amd_dbgapi_event_kind_t until_event_kind)
+{
+  /* An event of a given type can only be requested from a single
+     process_id.  */
+  gdb_assert (until_event_kind == AMD_DBGAPI_EVENT_KIND_NONE
+	      || process_id != AMD_DBGAPI_PROCESS_NONE);
+
+  while (true)
+    {
+      amd_dbgapi_event_id_t event_id;
+      amd_dbgapi_event_kind_t event_kind;
+
+      amd_dbgapi_status_t status
+	= amd_dbgapi_process_next_pending_event (process_id, &event_id,
+						 &event_kind);
+
+      if (status != AMD_DBGAPI_STATUS_SUCCESS)
+	error (_("next_pending_event failed (%s)"), get_status_string (status));
+
+      if (event_kind != AMD_DBGAPI_EVENT_KIND_NONE)
+	amd_dbgapi_debug_printf ("Pulled event from dbgapi: "
+				 "event_id.handle = %" PRIu64 ", "
+				 "event_kind = %s",
+				 event_id.handle,
+				 event_kind_str (event_kind));
+
+      if (event_id == AMD_DBGAPI_EVENT_NONE || event_kind == until_event_kind)
+	return event_id;
+
+      process_one_event (event_id, event_kind);
+    }
+}
+
+bool
+amd_dbgapi_target::has_pending_events ()
+{
+  if (amd_dbgapi_async_event_handler != nullptr
+      && async_event_handler_marked (amd_dbgapi_async_event_handler))
+    return true;
+
+  return beneath ()->has_pending_events ();
+}
+
+/* Pop one pending event from the per-inferior structures.
+
+   If PID is not -1, restrict the search to the inferior with that pid.  */
+
+static std::pair<ptid_t, target_waitstatus>
+consume_one_event (int pid)
+{
+  auto *target = current_inferior ()->process_target ();
+  struct amd_dbgapi_inferior_info *info = nullptr;
+
+  if (pid == -1)
+    {
+      for (inferior *inf : all_inferiors (target))
+	{
+	  info = get_amd_dbgapi_inferior_info (inf);
+	  if (!info->wave_events.empty ())
+	    break;
+	}
+
+      gdb_assert (info != nullptr);
+    }
+  else
+    {
+      inferior *inf = find_inferior_pid (target, pid);
+
+      gdb_assert (inf != nullptr);
+      info = get_amd_dbgapi_inferior_info (inf);
+    }
+
+  if (info->wave_events.empty ())
+    return { minus_one_ptid, {} };
+
+  auto event = info->wave_events.front ();
+  info->wave_events.pop_front ();
+
+  return event;
+}
+
+ptid_t
+amd_dbgapi_target::wait (ptid_t ptid, struct target_waitstatus *ws,
+		       target_wait_flags target_options)
+{
+  gdb_assert (!current_inferior ()->process_target ()->commit_resumed_state);
+  gdb_assert (ptid == minus_one_ptid || ptid.is_pid ());
+
+  amd_dbgapi_debug_printf ("ptid = %s", ptid.to_string ().c_str ());
+
+  ptid_t event_ptid = beneath ()->wait (ptid, ws, target_options);
+  if (event_ptid != minus_one_ptid)
+    {
+      if (ws->kind () == TARGET_WAITKIND_EXITED
+	  || ws->kind () == TARGET_WAITKIND_SIGNALLED)
+       {
+	 /* This inferior has exited so drain its dbgapi event queue.  */
+	 while (consume_one_event (event_ptid.pid ()).first
+		!= minus_one_ptid)
+	   ;
+       }
+      return event_ptid;
+    }
+
+  gdb_assert (ws->kind () == TARGET_WAITKIND_NO_RESUMED
+	      || ws->kind () == TARGET_WAITKIND_IGNORE);
+
+  /* Flush the async handler first.  */
+  if (target_is_async_p ())
+    async_event_handler_clear ();
+
+  /* There may be more events to process (either already in `wave_events` or
+     that we need to fetch from dbgapi.  Mark the async event handler so that
+     amd_dbgapi_target::wait gets called again and again, until it eventually
+     returns minus_one_ptid.  */
+  auto more_events = make_scope_exit ([] ()
+    {
+      if (target_is_async_p ())
+	async_event_handler_mark ();
+    });
+
+  auto *proc_target = current_inferior ()->process_target ();
+
+  /* Disable forward progress for the specified pid in ptid if it isn't
+     minus_on_ptid, or all attached processes if ptid is minus_one_ptid.  */
+  require_forward_progress (ptid, proc_target, false);
+
+  target_waitstatus gpu_waitstatus;
+  std::tie (event_ptid, gpu_waitstatus) = consume_one_event (ptid.pid ());
+  if (event_ptid == minus_one_ptid)
+    {
+      /* Drain the events for the current inferior from the amd_dbgapi and
+	 preserve the ordering.  */
+      auto info = get_amd_dbgapi_inferior_info (current_inferior ());
+      process_event_queue (info->process_id, AMD_DBGAPI_EVENT_KIND_NONE);
+
+      std::tie (event_ptid, gpu_waitstatus) = consume_one_event (ptid.pid ());
+      if (event_ptid == minus_one_ptid)
+	{
+	  /* If we requested a specific ptid, and nothing came out, assume
+	     another ptid may have more events, otherwise, keep the
+	     async_event_handler flushed.  */
+	  if (ptid == minus_one_ptid)
+	    more_events.release ();
+
+	  if (ws->kind () == TARGET_WAITKIND_NO_RESUMED)
+	    {
+	      /* We can't easily check that all GPU waves are stopped, and no
+		 new waves can be created (the GPU has fixed function hardware
+		 to create new threads), so even if the target beneath returns
+		 waitkind_no_resumed, we have to report waitkind_ignore if GPU
+		 debugging is enabled for at least one resumed inferior handled
+		 by the amd-dbgapi target.  */
+
+	      for (inferior *inf : all_inferiors ())
+		if (inf->target_at (arch_stratum) == &the_amd_dbgapi_target
+		    && get_amd_dbgapi_inferior_info (inf)->runtime_state
+			 == AMD_DBGAPI_RUNTIME_STATE_LOADED_SUCCESS)
+		  {
+		    ws->set_ignore ();
+		    break;
+		  }
+	    }
+
+	  /* There are no events to report, return the target beneath's
+	     waitstatus (either IGNORE or NO_RESUMED).  */
+	  return minus_one_ptid;
+	}
+    }
+
+  *ws = gpu_waitstatus;
+  return event_ptid;
+}
+
+bool
+amd_dbgapi_target::stopped_by_sw_breakpoint ()
+{
+  if (!ptid_is_gpu (inferior_ptid))
+    return beneath ()->stopped_by_sw_breakpoint ();
+
+  amd_dbgapi_wave_id_t wave_id = get_amd_dbgapi_wave_id (inferior_ptid);
+
+  amd_dbgapi_wave_stop_reasons_t stop_reason;
+  amd_dbgapi_status_t status
+    = amd_dbgapi_wave_get_info (wave_id, AMD_DBGAPI_WAVE_INFO_STOP_REASON,
+				sizeof (stop_reason), &stop_reason);
+
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    return false;
+
+  return (stop_reason & AMD_DBGAPI_WAVE_STOP_REASON_BREAKPOINT) != 0;
+}
+
+bool
+amd_dbgapi_target::stopped_by_hw_breakpoint ()
+{
+  if (!ptid_is_gpu (inferior_ptid))
+    return beneath ()->stopped_by_hw_breakpoint ();
+
+  return false;
+}
+
+/* Set the process' memory access reporting precision mode.
+
+   Warn if the requested mode is not supported on at least one agent in the
+   process.
+
+   Error out if setting the requested mode failed for some other reason.  */
+
+static void
+set_process_memory_precision (amd_dbgapi_inferior_info &info)
+{
+  auto mode = (info.precise_memory.requested
+	       ? AMD_DBGAPI_MEMORY_PRECISION_PRECISE
+	       : AMD_DBGAPI_MEMORY_PRECISION_NONE);
+  amd_dbgapi_status_t status
+    = amd_dbgapi_set_memory_precision (info.process_id, mode);
+
+  if (status == AMD_DBGAPI_STATUS_SUCCESS)
+    info.precise_memory.enabled = info.precise_memory.requested;
+  else if (status == AMD_DBGAPI_STATUS_ERROR_NOT_SUPPORTED)
+    warning (_("AMDGPU precise memory access reporting could not be enabled."));
+  else if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd_dbgapi_set_memory_precision failed (%s)"),
+	   get_status_string (status));
+}
+
+/* Make the amd-dbgapi library attach to the process behind INF.
+
+   Note that this is unrelated to the "attach" GDB concept / command.
+
+   By attaching to the process, we get a notifier fd that tells us when it
+   activates the ROCm runtime and when there are subsequent debug events.  */
+
+static void
+attach_amd_dbgapi (inferior *inf)
+{
+  AMD_DBGAPI_SCOPED_DEBUG_START_END ("inf num = %d", inf->num);
+
+  if (!target_can_async_p ())
+    {
+      warning (_("The amd-dbgapi target requires the target beneath to be "
+		 "asynchronous, GPU debugging is disabled"));
+      return;
+    }
+
+  /* dbgapi can't attach to a vfork child (a process born from a vfork that
+     hasn't exec'ed yet) while we are still attached to the parent.  It would
+     not be useful for us to attach to vfork children anyway, because vfork
+     children are very restricted in what they can do (see vfork(2)) and aren't
+     going to launch some GPU programs that we need to debug.  To avoid this
+     problem, we don't push the amd-dbgapi target / attach dbgapi in vfork
+     children.  If a vfork child execs, we'll try enabling the amd-dbgapi target
+     through the inferior_execd observer.  */
+  if (inf->vfork_parent != nullptr)
+    return;
+
+  auto *info = get_amd_dbgapi_inferior_info (inf);
+
+  /* Are we already attached?  */
+  if (info->process_id != AMD_DBGAPI_PROCESS_NONE)
+    {
+      amd_dbgapi_debug_printf
+	("already attached: process_id = %" PRIu64, info->process_id.handle);
+      return;
+    }
+
+  amd_dbgapi_status_t status
+    = amd_dbgapi_process_attach
+	(reinterpret_cast<amd_dbgapi_client_process_id_t> (inf),
+	 &info->process_id);
+  if (status == AMD_DBGAPI_STATUS_ERROR_RESTRICTION)
+    {
+      warning (_("amd-dbgapi: unable to enable GPU debugging due to a "
+		 "restriction error"));
+      return;
+    }
+  else if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    {
+      warning (_("amd-dbgapi: could not attach to process %d (%s), GPU "
+		 "debugging will not be available."), inf->pid,
+	       get_status_string (status));
+      return;
+    }
+
+  if (amd_dbgapi_process_get_info (info->process_id,
+				   AMD_DBGAPI_PROCESS_INFO_NOTIFIER,
+				   sizeof (info->notifier), &info->notifier)
+      != AMD_DBGAPI_STATUS_SUCCESS)
+    {
+      amd_dbgapi_process_detach (info->process_id);
+      info->process_id = AMD_DBGAPI_PROCESS_NONE;
+      warning (_("amd-dbgapi: could not retrieve process %d's notifier, GPU "
+		 "debugging will not be available."), inf->pid);
+      return;
+    }
+
+  amd_dbgapi_debug_printf ("process_id = %" PRIu64 ", notifier fd = %d",
+			   info->process_id.handle, info->notifier);
+
+  set_process_memory_precision (*info);
+
+  /* If GDB is attaching to a process that has the runtime loaded, there will
+     already be a "runtime loaded" event available.  Consume it and push the
+     target.  */
+  dbgapi_notifier_handler (0, info);
+
+  add_file_handler (info->notifier, dbgapi_notifier_handler, info,
+		    "amd-dbgapi notifier");
+}
+
+static void maybe_reset_amd_dbgapi ();
+
+/* Make the amd-dbgapi library detach from INF.
+
+   Note that this us unrelated to the "detach" GDB concept / command.
+
+   This undoes what attach_amd_dbgapi does.  */
+
+static void
+detach_amd_dbgapi (inferior *inf)
+{
+  AMD_DBGAPI_SCOPED_DEBUG_START_END ("inf num = %d", inf->num);
+
+  auto *info = get_amd_dbgapi_inferior_info (inf);
+
+  if (info->process_id == AMD_DBGAPI_PROCESS_NONE)
+    return;
+
+  info->runtime_state = AMD_DBGAPI_RUNTIME_STATE_UNLOADED;
+
+  amd_dbgapi_status_t status = amd_dbgapi_process_detach (info->process_id);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    warning (_("amd-dbgapi: could not detach from process %d (%s)"),
+	     inf->pid, get_status_string (status));
+
+  gdb_assert (info->notifier != -1);
+  delete_file_handler (info->notifier);
+
+  /* This is a noop if the target is not pushed.  */
+  inf->unpush_target (&the_amd_dbgapi_target);
+
+  /* Delete the breakpoints that are still active.  */
+  for (auto &&value : info->breakpoint_map)
+    delete_breakpoint (value.second);
+
+  /* Reset the amd_dbgapi_inferior_info, except for precise_memory_mode.  */
+  *info = amd_dbgapi_inferior_info (inf, info->precise_memory.requested);
+
+  maybe_reset_amd_dbgapi ();
+}
+
+void
+amd_dbgapi_target::mourn_inferior ()
+{
+  detach_amd_dbgapi (current_inferior ());
+  beneath ()->mourn_inferior ();
+}
+
+void
+amd_dbgapi_target::detach (inferior *inf, int from_tty)
+{
+  /* We're about to resume the waves by detaching the dbgapi library from the
+     inferior, so we need to remove all breakpoints that are still inserted.
+
+     Breakpoints may still be inserted because the inferior may be running in
+     non-stop mode, or because GDB changed the default setting to leave all
+     breakpoints inserted in all-stop mode when all threads are stopped.  */
+  remove_breakpoints_inf (inf);
+
+  detach_amd_dbgapi (inf);
+  beneath ()->detach (inf, from_tty);
+}
+
+void
+amd_dbgapi_target::fetch_registers (struct regcache *regcache, int regno)
+{
+  if (!ptid_is_gpu (regcache->ptid ()))
+    {
+      beneath ()->fetch_registers (regcache, regno);
+      return;
+    }
+
+  struct gdbarch *gdbarch = regcache->arch ();
+  gdb_assert (is_amdgpu_arch (gdbarch));
+
+  amdgpu_gdbarch_tdep *tdep = get_amdgpu_gdbarch_tdep (gdbarch);
+  amd_dbgapi_wave_id_t wave_id = get_amd_dbgapi_wave_id (regcache->ptid ());
+  gdb_byte raw[AMDGPU_MAX_REGISTER_SIZE];
+  amd_dbgapi_status_t status
+    = amd_dbgapi_read_register (wave_id, tdep->register_ids[regno], 0,
+				register_type (gdbarch, regno)->length (),
+				raw);
+
+  if (status == AMD_DBGAPI_STATUS_SUCCESS)
+    regcache->raw_supply (regno, raw);
+  else if (status != AMD_DBGAPI_STATUS_ERROR_REGISTER_NOT_AVAILABLE)
+    warning (_("Couldn't read register %s (#%d) (%s)."),
+	     gdbarch_register_name (gdbarch, regno), regno,
+	     get_status_string (status));
+}
+
+void
+amd_dbgapi_target::store_registers (struct regcache *regcache, int regno)
+{
+  if (!ptid_is_gpu (regcache->ptid ()))
+    {
+      beneath ()->store_registers (regcache, regno);
+      return;
+    }
+
+  struct gdbarch *gdbarch = regcache->arch ();
+  gdb_assert (is_amdgpu_arch (gdbarch));
+
+  gdb_byte raw[AMDGPU_MAX_REGISTER_SIZE];
+  regcache->raw_collect (regno, &raw);
+
+  amdgpu_gdbarch_tdep *tdep = get_amdgpu_gdbarch_tdep (gdbarch);
+
+  /* If the register has read-only bits, invalidate the value in the regcache
+     as the value actually written may differ.  */
+  if (tdep->register_properties[regno]
+      & AMD_DBGAPI_REGISTER_PROPERTY_READONLY_BITS)
+    regcache->invalidate (regno);
+
+  /* Invalidate all volatile registers if this register has the invalidate
+     volatile property.  For example, writing to VCC may change the content
+     of STATUS.VCCZ.  */
+  if (tdep->register_properties[regno]
+      & AMD_DBGAPI_REGISTER_PROPERTY_INVALIDATE_VOLATILE)
+    {
+      for (size_t r = 0; r < tdep->register_properties.size (); ++r)
+	if (tdep->register_properties[r] & AMD_DBGAPI_REGISTER_PROPERTY_VOLATILE)
+	  regcache->invalidate (r);
+    }
+
+  amd_dbgapi_wave_id_t wave_id = get_amd_dbgapi_wave_id (regcache->ptid ());
+  amd_dbgapi_status_t status
+    = amd_dbgapi_write_register (wave_id, tdep->register_ids[regno], 0,
+				 register_type (gdbarch, regno)->length (),
+				 raw);
+
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    warning (_("Couldn't write register %s (#%d)."),
+	     gdbarch_register_name (gdbarch, regno), regno);
+}
+
+struct gdbarch *
+amd_dbgapi_target::thread_architecture (ptid_t ptid)
+{
+  if (!ptid_is_gpu (ptid))
+    return beneath ()->thread_architecture (ptid);
+
+  /* We can cache the gdbarch for a given wave_id (ptid::tid) because
+     wave IDs are unique, and aren't reused.  */
+  if (ptid.tid () == m_cached_arch_tid)
+    return m_cached_arch;
+
+  amd_dbgapi_wave_id_t wave_id = get_amd_dbgapi_wave_id (ptid);
+  amd_dbgapi_architecture_id_t architecture_id;
+  amd_dbgapi_status_t status;
+
+  status = amd_dbgapi_wave_get_info (wave_id, AMD_DBGAPI_WAVE_INFO_ARCHITECTURE,
+				     sizeof (architecture_id),
+				     &architecture_id);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("Couldn't get architecture for wave_%ld"), ptid.tid ());
+
+  uint32_t elf_amdgpu_machine;
+  status = amd_dbgapi_architecture_get_info
+    (architecture_id, AMD_DBGAPI_ARCHITECTURE_INFO_ELF_AMDGPU_MACHINE,
+     sizeof (elf_amdgpu_machine), &elf_amdgpu_machine);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("Couldn't get elf_amdgpu_machine for architecture_%ld"),
+	   architecture_id.handle);
+
+  struct gdbarch_info info;
+  info.bfd_arch_info = bfd_lookup_arch (bfd_arch_amdgcn, elf_amdgpu_machine);
+  info.byte_order = BFD_ENDIAN_LITTLE;
+
+  m_cached_arch_tid = ptid.tid ();
+  m_cached_arch = gdbarch_find_by_info (info);
+  if (m_cached_arch == nullptr)
+    error (_("Couldn't get elf_amdgpu_machine (%#x)"), elf_amdgpu_machine);
+
+  return m_cached_arch;
+}
+
+void
+amd_dbgapi_target::thread_events (int enable)
+{
+  m_report_thread_events = enable;
+  beneath ()->thread_events (enable);
+}
+
+void
+amd_dbgapi_target::update_thread_list ()
+{
+  for (inferior *inf : all_inferiors ())
+    {
+      amd_dbgapi_process_id_t process_id
+	= get_amd_dbgapi_process_id (inf);
+      if (process_id == AMD_DBGAPI_PROCESS_NONE)
+	{
+	  /* The inferior may not be attached yet.  */
+	  continue;
+	}
+
+      size_t count;
+      amd_dbgapi_wave_id_t *wave_list;
+      amd_dbgapi_changed_t changed;
+      amd_dbgapi_status_t status
+	= amd_dbgapi_process_wave_list (process_id, &count, &wave_list,
+					&changed);
+      if (status != AMD_DBGAPI_STATUS_SUCCESS)
+	error (_("amd_dbgapi_wave_list failed (%s)"),
+	       get_status_string (status));
+
+      if (changed == AMD_DBGAPI_CHANGED_NO)
+	continue;
+
+      /* Create a set and free the wave list.  */
+      std::set<ptid_t::tid_type> threads;
+      for (size_t i = 0; i < count; ++i)
+	threads.emplace (wave_list[i].handle);
+
+      xfree (wave_list);
+
+      /* Prune the wave_ids that already have a thread_info.  Any thread_info
+	 which does not have a corresponding wave_id represents a wave which
+	 is gone at this point and should be deleted.  */
+      for (thread_info *tp : inf->threads_safe ())
+	if (ptid_is_gpu (tp->ptid) && tp->state != THREAD_EXITED)
+	  {
+	    auto it = threads.find (tp->ptid.tid ());
+
+	    if (it == threads.end ())
+	      {
+		auto wave_id = get_amd_dbgapi_wave_id (tp->ptid);
+		wave_info &wi = get_thread_wave_info (tp);
+
+		/* Waves that were stepping or in progress of being
+		   stopped are guaranteed to report a
+		   WAVE_COMMAND_TERMINATED event if they terminate.
+		   Don't delete such threads until we see the
+		   event.  */
+		if (wi.last_resume_mode == AMD_DBGAPI_RESUME_MODE_SINGLE_STEP
+		    || wi.stopping)
+		  {
+		    amd_dbgapi_debug_printf
+		      ("wave_%ld disappeared, keeping it"
+		       " (last_resume_mode=%s, stopping=%d)",
+		       wave_id.handle,
+		       resume_mode_to_string (wi.last_resume_mode),
+		       wi.stopping);
+		  }
+		else
+		  {
+		    amd_dbgapi_debug_printf ("wave_%ld disappeared, deleting it",
+					     wave_id.handle);
+		    delete_thread_silent (tp);
+		  }
+	      }
+	    else
+	      threads.erase (it);
+	  }
+
+      /* The wave_ids that are left require a new thread_info.  */
+      for (ptid_t::tid_type tid : threads)
+	{
+	  ptid_t wave_ptid
+	    = make_gpu_ptid (inf->pid, amd_dbgapi_wave_id_t {tid});
+	  add_gpu_thread (inf, wave_ptid);
+	}
+    }
+
+  /* Give the beneath target a chance to do extra processing.  */
+  this->beneath ()->update_thread_list ();
+}
+
+/* inferior_created observer.  */
+
+static void
+amd_dbgapi_target_inferior_created (inferior *inf)
+{
+  /* If the inferior is not running on the native target (e.g. it is running
+     on a remote target), we don't want to deal with it.  */
+  if (inf->process_target () != get_native_target ())
+    return;
+
+  attach_amd_dbgapi (inf);
+}
+
+/* Callback called when an inferior is cloned.  */
+
+static void
+amd_dbgapi_target_inferior_cloned (inferior *original_inferior,
+				   inferior *new_inferior)
+{
+  auto *orig_info = get_amd_dbgapi_inferior_info (original_inferior);
+  auto *new_info = get_amd_dbgapi_inferior_info (new_inferior);
+
+  /* At this point, the process is not started.  Therefore it is sufficient to
+     copy the precise memory request, it will be applied when the process
+     starts.  */
+  gdb_assert (new_info->process_id == AMD_DBGAPI_PROCESS_NONE);
+  new_info->precise_memory.requested = orig_info->precise_memory.requested;
+}
+
+/* inferior_execd observer.  */
+
+static void
+amd_dbgapi_inferior_execd (inferior *exec_inf, inferior *follow_inf)
+{
+  /* The inferior has EXEC'd and the process image has changed.  The dbgapi is
+     attached to the old process image, so we need to detach and re-attach to
+     the new process image.  */
+  detach_amd_dbgapi (exec_inf);
+
+  /* If using "follow-exec-mode new", carry over the precise-memory setting
+     to the new inferior (otherwise, FOLLOW_INF and ORIG_INF point to the same
+     inferior, so this is a no-op).  */
+  get_amd_dbgapi_inferior_info (follow_inf)->precise_memory.requested
+    = get_amd_dbgapi_inferior_info (exec_inf)->precise_memory.requested;
+
+  attach_amd_dbgapi (follow_inf);
+}
+
+/* inferior_forked observer.  */
+
+static void
+amd_dbgapi_inferior_forked (inferior *parent_inf, inferior *child_inf,
+			    target_waitkind fork_kind)
+{
+  if (child_inf != nullptr)
+    {
+      /* Copy precise-memory requested value from parent to child.  */
+      amd_dbgapi_inferior_info *parent_info
+	= get_amd_dbgapi_inferior_info (parent_inf);
+      amd_dbgapi_inferior_info *child_info
+	= get_amd_dbgapi_inferior_info (child_inf);
+      child_info->precise_memory.requested
+	= parent_info->precise_memory.requested;
+
+      if (fork_kind != TARGET_WAITKIND_VFORKED)
+	{
+	  scoped_restore_current_thread restore_thread;
+	  switch_to_thread (*child_inf->threads ().begin ());
+	  attach_amd_dbgapi (child_inf);
+	}
+    }
+}
+
+/* inferior_exit observer.
+
+   This covers normal exits, but also detached inferiors (including detached
+   fork parents).  */
+
+static void
+amd_dbgapi_inferior_exited (inferior *inf)
+{
+  detach_amd_dbgapi (inf);
+}
+
+/* inferior_pre_detach observer.  */
+
+static void
+amd_dbgapi_inferior_pre_detach (inferior *inf)
+{
+  /* We need to amd-dbgapi-detach before we ptrace-detach.  If the amd-dbgapi
+     target isn't pushed, do that now.  If the amd-dbgapi target is pushed,
+     we'll do it in amd_dbgapi_target::detach.  */
+  if (!inf->target_is_pushed (&the_amd_dbgapi_target))
+    detach_amd_dbgapi (inf);
+}
+
+/* get_os_pid callback.  */
+
+static amd_dbgapi_status_t
+amd_dbgapi_get_os_pid_callback
+  (amd_dbgapi_client_process_id_t client_process_id, pid_t *pid)
+{
+  inferior *inf = reinterpret_cast<inferior *> (client_process_id);
+
+  if (inf->pid == 0)
+    return AMD_DBGAPI_STATUS_ERROR_PROCESS_EXITED;
+
+  *pid = inf->pid;
+  return AMD_DBGAPI_STATUS_SUCCESS;
+}
+
+/* insert_breakpoint callback.  */
+
+static amd_dbgapi_status_t
+amd_dbgapi_insert_breakpoint_callback
+  (amd_dbgapi_client_process_id_t client_process_id,
+   amd_dbgapi_global_address_t address,
+   amd_dbgapi_breakpoint_id_t breakpoint_id)
+{
+  inferior *inf = reinterpret_cast<inferior *> (client_process_id);
+  struct amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+
+  auto it = info->breakpoint_map.find (breakpoint_id.handle);
+  if (it != info->breakpoint_map.end ())
+    return AMD_DBGAPI_STATUS_ERROR_INVALID_BREAKPOINT_ID;
+
+  /* We need to find the address in the given inferior's program space.  */
+  scoped_restore_current_thread restore_thread;
+  switch_to_inferior_no_thread (inf);
+
+  /* Create a new breakpoint.  */
+  struct obj_section *section = find_pc_section (address);
+  if (section == nullptr || section->objfile == nullptr)
+    return AMD_DBGAPI_STATUS_ERROR;
+
+  std::unique_ptr<breakpoint> bp_up
+    (new amd_dbgapi_target_breakpoint (section->objfile->arch (), address));
+
+  breakpoint *bp = install_breakpoint (true, std::move (bp_up), 1);
+
+  info->breakpoint_map.emplace (breakpoint_id.handle, bp);
+  return AMD_DBGAPI_STATUS_SUCCESS;
+}
+
+/* remove_breakpoint callback.  */
+
+static amd_dbgapi_status_t
+amd_dbgapi_remove_breakpoint_callback
+  (amd_dbgapi_client_process_id_t client_process_id,
+   amd_dbgapi_breakpoint_id_t breakpoint_id)
+{
+  inferior *inf = reinterpret_cast<inferior *> (client_process_id);
+  struct amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+
+  auto it = info->breakpoint_map.find (breakpoint_id.handle);
+  if (it == info->breakpoint_map.end ())
+    return AMD_DBGAPI_STATUS_ERROR_INVALID_BREAKPOINT_ID;
+
+  delete_breakpoint (it->second);
+  info->breakpoint_map.erase (it);
+
+  return AMD_DBGAPI_STATUS_SUCCESS;
+}
+
+/* signal_received observer.  */
+
+static void
+amd_dbgapi_target_signal_received (gdb_signal sig)
+{
+  amd_dbgapi_inferior_info *info
+    = get_amd_dbgapi_inferior_info (current_inferior ());
+
+  if (info->process_id == AMD_DBGAPI_PROCESS_NONE)
+    return;
+
+  if (!ptid_is_gpu (inferior_thread ()->ptid))
+    return;
+
+  if (sig != GDB_SIGNAL_SEGV && sig != GDB_SIGNAL_BUS)
+    return;
+
+  if (!info->precise_memory.enabled)
+    gdb_printf (_("\
+Warning: precise memory violation signal reporting is not enabled, reported\n\
+location may not be accurate.  See \"show amdgpu precise-memory\".\n"));
+}
+
+/* Style for some kinds of messages.  */
+
+static cli_style_option fatal_error_style
+  ("amd_dbgapi_fatal_error", ui_file_style::RED);
+static cli_style_option warning_style
+  ("amd_dbgapi_warning", ui_file_style::YELLOW);
+
+/* BLACK + BOLD means dark gray.  */
+static cli_style_option trace_style
+  ("amd_dbgapi_trace", ui_file_style::BLACK, ui_file_style::BOLD);
+
+/* log_message callback.  */
+
+static void
+amd_dbgapi_log_message_callback (amd_dbgapi_log_level_t level,
+				 const char *message)
+{
+  std::optional<target_terminal::scoped_restore_terminal_state> tstate;
+
+  if (target_supports_terminal_ours ())
+    {
+      tstate.emplace ();
+      target_terminal::ours_for_output ();
+    }
+
+  /* Error and warning messages are meant to be printed to the user.  */
+  if (level == AMD_DBGAPI_LOG_LEVEL_FATAL_ERROR
+      || level == AMD_DBGAPI_LOG_LEVEL_WARNING)
+    {
+      begin_line ();
+      ui_file_style style = (level == AMD_DBGAPI_LOG_LEVEL_FATAL_ERROR
+			     ? fatal_error_style : warning_style).style ();
+      gdb_printf (gdb_stderr, "%ps\n", styled_string (style, message));
+      return;
+    }
+
+  /* Print other messages as debug logs.  TRACE and VERBOSE messages are
+     very verbose, print them dark grey so it's easier to spot other messages
+     through the flood.  */
+  if (level >= AMD_DBGAPI_LOG_LEVEL_TRACE)
+    {
+      debug_prefixed_printf (amd_dbgapi_lib_debug_module (), nullptr, "%ps",
+			     styled_string (trace_style.style (), message));
+      return;
+    }
+
+  debug_prefixed_printf (amd_dbgapi_lib_debug_module (), nullptr, "%s",
+			 message);
+}
+
+/* Callbacks passed to amd_dbgapi_initialize.  */
+
+static amd_dbgapi_callbacks_t dbgapi_callbacks = {
+  .allocate_memory = malloc,
+  .deallocate_memory = free,
+  .get_os_pid = amd_dbgapi_get_os_pid_callback,
+  .insert_breakpoint = amd_dbgapi_insert_breakpoint_callback,
+  .remove_breakpoint = amd_dbgapi_remove_breakpoint_callback,
+  .log_message = amd_dbgapi_log_message_callback,
+};
+
+void
+amd_dbgapi_target::close ()
+{
+  if (amd_dbgapi_async_event_handler != nullptr)
+    delete_async_event_handler (&amd_dbgapi_async_event_handler);
+}
+
+/* Callback for "show amdgpu precise-memory".  */
+
+static void
+show_precise_memory_mode (struct ui_file *file, int from_tty,
+			  struct cmd_list_element *c, const char *value)
+{
+  amd_dbgapi_inferior_info *info
+    = get_amd_dbgapi_inferior_info (current_inferior ());
+
+  gdb_printf (file,
+	      _("AMDGPU precise memory access reporting is %s "
+		"(currently %s).\n"),
+	      info->precise_memory.requested ? "on" : "off",
+	      info->precise_memory.enabled ? "enabled" : "disabled");
+}
+
+/* Callback for "set amdgpu precise-memory".  */
+
+static void
+set_precise_memory_mode (bool value)
+{
+  amd_dbgapi_inferior_info *info
+    = get_amd_dbgapi_inferior_info (current_inferior ());
+
+  info->precise_memory.requested = value;
+
+  if (info->process_id != AMD_DBGAPI_PROCESS_NONE)
+    set_process_memory_precision (*info);
+}
+
+/* Return whether precise-memory is requested for the current inferior.  */
+
+static bool
+get_precise_memory_mode ()
+{
+  amd_dbgapi_inferior_info *info
+    = get_amd_dbgapi_inferior_info (current_inferior ());
+
+  return info->precise_memory.requested;
+}
+
+/* List of set/show amdgpu commands.  */
+struct cmd_list_element *set_amdgpu_list;
+struct cmd_list_element *show_amdgpu_list;
+
+/* List of set/show debug amd-dbgapi-lib commands.  */
+struct cmd_list_element *set_debug_amd_dbgapi_lib_list;
+struct cmd_list_element *show_debug_amd_dbgapi_lib_list;
+
+/* Mapping from amd-dbgapi log level enum values to text.  */
+
+static constexpr const char *debug_amd_dbgapi_lib_log_level_enums[] =
+{
+  /* [AMD_DBGAPI_LOG_LEVEL_NONE] = */ "off",
+  /* [AMD_DBGAPI_LOG_LEVEL_FATAL_ERROR] = */ "error",
+  /* [AMD_DBGAPI_LOG_LEVEL_WARNING] = */ "warning",
+  /* [AMD_DBGAPI_LOG_LEVEL_INFO] = */ "info",
+  /* [AMD_DBGAPI_LOG_LEVEL_TRACE] = */ "trace",
+  /* [AMD_DBGAPI_LOG_LEVEL_VERBOSE] = */ "verbose",
+  nullptr
+};
+
+/* Storage for "set debug amd-dbgapi-lib log-level".  */
+
+static const char *debug_amd_dbgapi_lib_log_level
+  = debug_amd_dbgapi_lib_log_level_enums[AMD_DBGAPI_LOG_LEVEL_WARNING];
+
+/* Get the amd-dbgapi library log level requested by the user.  */
+
+static amd_dbgapi_log_level_t
+get_debug_amd_dbgapi_lib_log_level ()
+{
+  for (size_t pos = 0;
+       debug_amd_dbgapi_lib_log_level_enums[pos] != nullptr;
+       ++pos)
+    if (debug_amd_dbgapi_lib_log_level
+	== debug_amd_dbgapi_lib_log_level_enums[pos])
+      return static_cast<amd_dbgapi_log_level_t> (pos);
+
+  gdb_assert_not_reached ("invalid log level");
+}
+
+/* Callback for "set debug amd-dbgapi log-level", apply the selected log level
+   to the library.  */
+
+static void
+set_debug_amd_dbgapi_lib_log_level (const char *args, int from_tty,
+				    struct cmd_list_element *c)
+{
+  amd_dbgapi_set_log_level (get_debug_amd_dbgapi_lib_log_level ());
+}
+
+/* Callback for "show debug amd-dbgapi log-level".  */
+
+static void
+show_debug_amd_dbgapi_lib_log_level (struct ui_file *file, int from_tty,
+				     struct cmd_list_element *c,
+				     const char *value)
+{
+  gdb_printf (file, _("The amd-dbgapi library log level is %s.\n"), value);
+}
+
+/* If the amd-dbgapi library is not attached to any process, finalize and
+   re-initialize it so that the handle ID numbers will all start from the
+   beginning again.  This is only for convenience, not essential.  */
+
+static void
+maybe_reset_amd_dbgapi ()
+{
+  for (inferior *inf : all_non_exited_inferiors ())
+    {
+      amd_dbgapi_inferior_info *info = get_amd_dbgapi_inferior_info (inf);
+
+      if (info->process_id != AMD_DBGAPI_PROCESS_NONE)
+	return;
+    }
+
+  amd_dbgapi_status_t status = amd_dbgapi_finalize ();
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd-dbgapi failed to finalize (%s)"),
+	   get_status_string (status));
+
+  status = amd_dbgapi_initialize (&dbgapi_callbacks);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd-dbgapi failed to initialize (%s)"),
+	   get_status_string (status));
+}
+
+extern initialize_file_ftype _initialize_amd_dbgapi_target;
+
+void
+_initialize_amd_dbgapi_target ()
+{
+  /* Make sure the loaded debugger library version is greater than or equal to
+     the one used to build GDB.  */
+  uint32_t major, minor, patch;
+  amd_dbgapi_get_version (&major, &minor, &patch);
+  if (major != AMD_DBGAPI_VERSION_MAJOR || minor < AMD_DBGAPI_VERSION_MINOR)
+    error (_("amd-dbgapi library version mismatch, got %d.%d.%d, need %d.%d+"),
+	   major, minor, patch, AMD_DBGAPI_VERSION_MAJOR,
+	   AMD_DBGAPI_VERSION_MINOR);
+
+  /* Initialize the AMD Debugger API.  */
+  amd_dbgapi_status_t status = amd_dbgapi_initialize (&dbgapi_callbacks);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd-dbgapi failed to initialize (%s)"),
+	   get_status_string (status));
+
+  /* Set the initial log level.  */
+  amd_dbgapi_set_log_level (get_debug_amd_dbgapi_lib_log_level ());
+
+  /* Install observers.  */
+  gdb::observers::inferior_cloned.attach (amd_dbgapi_target_inferior_cloned,
+					  "amd-dbgapi");
+  gdb::observers::signal_received.attach (amd_dbgapi_target_signal_received,
+					  "amd-dbgapi");
+  gdb::observers::inferior_created.attach
+    (amd_dbgapi_target_inferior_created,
+     amd_dbgapi_target_inferior_created_observer_token, "amd-dbgapi");
+  gdb::observers::inferior_execd.attach (amd_dbgapi_inferior_execd, "amd-dbgapi");
+  gdb::observers::inferior_forked.attach (amd_dbgapi_inferior_forked, "amd-dbgapi");
+  gdb::observers::inferior_exit.attach (amd_dbgapi_inferior_exited, "amd-dbgapi");
+  gdb::observers::inferior_pre_detach.attach (amd_dbgapi_inferior_pre_detach, "amd-dbgapi");
+  gdb::observers::thread_deleted.attach (amd_dbgapi_thread_deleted, "amd-dbgapi");
+
+  add_basic_prefix_cmd ("amdgpu", no_class,
+			_("Generic command for setting amdgpu flags."),
+			&set_amdgpu_list, 0, &setlist);
+
+  add_show_prefix_cmd ("amdgpu", no_class,
+		       _("Generic command for showing amdgpu flags."),
+		       &show_amdgpu_list, 0, &showlist);
+
+  add_setshow_boolean_cmd ("precise-memory", no_class,
+			   _("Set precise-memory mode."),
+			   _("Show precise-memory mode."), _("\
+If on, precise memory reporting is enabled if/when the inferior is running.\n\
+If off (default), precise memory reporting is disabled."),
+			   set_precise_memory_mode,
+			   get_precise_memory_mode,
+			   show_precise_memory_mode,
+			   &set_amdgpu_list, &show_amdgpu_list);
+
+  add_basic_prefix_cmd ("amd-dbgapi-lib", no_class,
+			_("Generic command for setting amd-dbgapi library "
+			  "debugging flags."),
+			&set_debug_amd_dbgapi_lib_list, 0, &setdebuglist);
+
+  add_show_prefix_cmd ("amd-dbgapi-lib", no_class,
+		       _("Generic command for showing amd-dbgapi library "
+			 "debugging flags."),
+		       &show_debug_amd_dbgapi_lib_list, 0, &showdebuglist);
+
+  add_setshow_enum_cmd ("log-level", class_maintenance,
+			debug_amd_dbgapi_lib_log_level_enums,
+			&debug_amd_dbgapi_lib_log_level,
+			_("Set the amd-dbgapi library log level."),
+			_("Show the amd-dbgapi library log level."),
+			_("off     == no logging is enabled\n"
+			  "error   == fatal errors are reported\n"
+			  "warning == fatal errors and warnings are reported\n"
+			  "info    == fatal errors, warnings, and info "
+			  "messages are reported\n"
+			  "trace   == fatal errors, warnings, info, and "
+			  "API tracing messages are reported\n"
+			  "verbose == all messages are reported"),
+			set_debug_amd_dbgapi_lib_log_level,
+			show_debug_amd_dbgapi_lib_log_level,
+			&set_debug_amd_dbgapi_lib_list,
+			&show_debug_amd_dbgapi_lib_list);
+
+  add_setshow_boolean_cmd ("amd-dbgapi", class_maintenance,
+			   &debug_amd_dbgapi,
+			   _("Set debugging of amd-dbgapi target."),
+			   _("Show debugging of amd-dbgapi target."),
+			   _("\
+When on, print debug messages relating to the amd-dbgapi target."),
+			   nullptr, nullptr,
+			   &setdebuglist, &showdebuglist);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd-dbgapi-target.h ./gdb/amd-dbgapi-target.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amd-dbgapi-target.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd-dbgapi-target.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,116 @@
+/* Target used to communicate with the AMD Debugger API.
+
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef AMD_DBGAPI_TARGET_H
+#define AMD_DBGAPI_TARGET_H 1
+
+#include "gdbsupport/observable.h"
+
+#include <amd-dbgapi/amd-dbgapi.h>
+
+struct inferior;
+
+namespace detail
+{
+
+template <typename T>
+using is_amd_dbgapi_handle
+  = gdb::Or<std::is_same<T, amd_dbgapi_address_class_id_t>,
+	    std::is_same<T, amd_dbgapi_address_space_id_t>,
+	    std::is_same<T, amd_dbgapi_architecture_id_t>,
+	    std::is_same<T, amd_dbgapi_agent_id_t>,
+	    std::is_same<T, amd_dbgapi_breakpoint_id_t>,
+	    std::is_same<T, amd_dbgapi_code_object_id_t>,
+	    std::is_same<T, amd_dbgapi_dispatch_id_t>,
+	    std::is_same<T, amd_dbgapi_displaced_stepping_id_t>,
+	    std::is_same<T, amd_dbgapi_event_id_t>,
+	    std::is_same<T, amd_dbgapi_process_id_t>,
+	    std::is_same<T, amd_dbgapi_queue_id_t>,
+	    std::is_same<T, amd_dbgapi_register_class_id_t>,
+	    std::is_same<T, amd_dbgapi_register_id_t>,
+	    std::is_same<T, amd_dbgapi_watchpoint_id_t>,
+	    std::is_same<T, amd_dbgapi_wave_id_t>>;
+
+} /* namespace detail */
+
+/* Get the token of amd-dbgapi's inferior_created observer.  */
+
+const gdb::observers::token &
+  get_amd_dbgapi_target_inferior_created_observer_token ();
+
+/* Comparison operators for amd-dbgapi handle types.  */
+
+template <typename T,
+	  typename = gdb::Requires<detail::is_amd_dbgapi_handle<T>>>
+bool
+operator== (const T &lhs, const T &rhs)
+{
+  return lhs.handle == rhs.handle;
+}
+
+template <typename T,
+	  typename = gdb::Requires<detail::is_amd_dbgapi_handle<T>>>
+bool
+operator!= (const T &lhs, const T &rhs)
+{
+  return !(lhs == rhs);
+}
+
+/* Return true if the given ptid is a GPU thread (wave) ptid.  */
+
+static inline bool
+ptid_is_gpu (ptid_t ptid)
+{
+  /* FIXME: Currently using values that are known not to conflict with other
+     processes to indicate if it is a GPU thread.  ptid.pid 1 is the init
+     process and is the only process that could have a ptid.lwp of 1.  The init
+     process cannot have a GPU.  No other process can have a ptid.lwp of 1.
+     The GPU wave ID is stored in the ptid.tid.  */
+  return ptid.pid () != 1 && ptid.lwp () == 1;
+}
+
+/* Return INF's amd_dbgapi process id.  */
+
+amd_dbgapi_process_id_t get_amd_dbgapi_process_id (inferior *inf);
+
+/* Get the amd-dbgapi wave id for PTID.  */
+
+static inline amd_dbgapi_wave_id_t
+get_amd_dbgapi_wave_id (ptid_t ptid)
+{
+  gdb_assert (ptid_is_gpu (ptid));
+  return amd_dbgapi_wave_id_t {
+    static_cast<decltype (amd_dbgapi_wave_id_t::handle)> (ptid.tid ())
+  };
+}
+
+/* Get the textual version of STATUS.
+
+   Always returns non-nullptr, and asserts that STATUS has a valid value.  */
+
+static inline const char *
+get_status_string (amd_dbgapi_status_t status)
+{
+  const char *ret;
+  status = amd_dbgapi_get_status_string (status, &ret);
+  gdb_assert (status == AMD_DBGAPI_STATUS_SUCCESS);
+  return ret;
+}
+
+#endif /* AMD_DBGAPI_TARGET_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amdgpu-tdep.c ./gdb/amdgpu-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amdgpu-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amdgpu-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,1387 @@
+/* Target-dependent code for the AMDGPU architectures.
+
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+
+#include "amd-dbgapi-target.h"
+#include "amdgpu-tdep.h"
+#include "arch-utils.h"
+#include "disasm.h"
+#include "dwarf2/frame.h"
+#include "frame-unwind.h"
+#include "gdbarch.h"
+#include "gdbsupport/selftest.h"
+#include "gdbtypes.h"
+#include "inferior.h"
+#include "objfiles.h"
+#include "observable.h"
+#include "producer.h"
+#include "reggroups.h"
+
+/* See amdgpu-tdep.h.  */
+
+bool
+is_amdgpu_arch (struct gdbarch *arch)
+{
+  gdb_assert (arch != nullptr);
+  return gdbarch_bfd_arch_info (arch)->arch == bfd_arch_amdgcn;
+}
+
+/* See amdgpu-tdep.h.  */
+
+amdgpu_gdbarch_tdep *
+get_amdgpu_gdbarch_tdep (gdbarch *arch)
+{
+  return gdbarch_tdep<amdgpu_gdbarch_tdep> (arch);
+}
+
+/* Dummy implementation of gdbarch_return_value_as_value.  */
+
+static return_value_convention
+amdgpu_return_value_as_value (gdbarch *arch, value *function, type *valtype,
+			      regcache *regcache, value **read_value,
+			      const gdb_byte *writebuf)
+{
+  gdb_assert_not_reached ("not implemented");
+}
+
+/* Return the name of register REGNUM.  */
+
+static const char *
+amdgpu_register_name (struct gdbarch *gdbarch, int regnum)
+{
+  /* The list of registers reported by amd-dbgapi for a given architecture
+     contains some duplicate names.  For instance, there is an "exec" register
+     for waves in the wave32 mode and one for the waves in the wave64 mode.
+     However, at most one register with a given name is actually allocated for
+     a specific wave.  If INFERIOR_PTID represents a GPU wave, we query
+     amd-dbgapi to know whether the requested register actually exists for the
+     current wave, so there won't be duplicates in the the register names we
+     report for that wave.
+
+     But there are two known cases where INFERIOR_PTID doesn't represent a GPU
+     wave:
+
+      - The user does "set arch amdgcn:gfxNNN" followed with "maint print
+	registers"
+      - The "register_name" selftest
+
+     In these cases, we can't query amd-dbgapi to know whether we should hide
+     the register or not.  The "register_name" selftest checks that there aren't
+     duplicates in the register names returned by the gdbarch, so if we simply
+     return all register names, that test will fail.  The other simple option is
+     to never return a register name, which is what we do here.  */
+  if (!ptid_is_gpu (inferior_ptid))
+    return "";
+
+  amd_dbgapi_wave_id_t wave_id = get_amd_dbgapi_wave_id (inferior_ptid);
+  amdgpu_gdbarch_tdep *tdep = get_amdgpu_gdbarch_tdep (gdbarch);
+
+  amd_dbgapi_register_exists_t register_exists;
+  if (amd_dbgapi_wave_register_exists (wave_id, tdep->register_ids[regnum],
+				       &register_exists)
+	!= AMD_DBGAPI_STATUS_SUCCESS
+      || register_exists != AMD_DBGAPI_REGISTER_PRESENT)
+    return "";
+
+  return tdep->register_names[regnum].c_str ();
+}
+
+/* Return the internal register number for the DWARF register number DWARF_REG.
+
+   Return -1 if there's no internal register mapping to DWARF_REG.  */
+
+static int
+amdgpu_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dwarf_reg)
+{
+  amdgpu_gdbarch_tdep *tdep = get_amdgpu_gdbarch_tdep (gdbarch);
+
+  if (dwarf_reg < tdep->dwarf_regnum_to_gdb_regnum.size ())
+    return tdep->dwarf_regnum_to_gdb_regnum[dwarf_reg];
+
+  return -1;
+}
+
+/* A hierarchy of classes to represent an amd-dbgapi register type.  */
+
+struct amd_dbgapi_register_type
+{
+  enum class kind
+    {
+      INTEGER,
+      FLOAT,
+      DOUBLE,
+      VECTOR,
+      CODE_PTR,
+      FLAGS,
+      ENUM,
+    };
+
+  amd_dbgapi_register_type (kind kind, std::string lookup_name)
+    : m_kind (kind), m_lookup_name (std::move (lookup_name))
+  {}
+
+  virtual ~amd_dbgapi_register_type () = default;
+
+  /* Return the type's kind.  */
+  kind kind () const
+  { return m_kind; }
+
+  /* Name to use for this type in the existing type map.  */
+  const std::string &lookup_name () const
+  { return m_lookup_name; }
+
+private:
+  enum kind m_kind;
+  std::string m_lookup_name;
+};
+
+using amd_dbgapi_register_type_up = std::unique_ptr<amd_dbgapi_register_type>;
+
+struct amd_dbgapi_register_type_integer : public amd_dbgapi_register_type
+{
+  amd_dbgapi_register_type_integer (bool is_unsigned, unsigned int bit_size)
+    : amd_dbgapi_register_type
+	(kind::INTEGER,
+	 string_printf ("%sint%d", is_unsigned ? "u" : "", bit_size)),
+      m_is_unsigned (is_unsigned),
+      m_bit_size (bit_size)
+  {}
+
+  bool is_unsigned () const
+  { return m_is_unsigned; }
+
+  unsigned int bit_size () const
+  { return m_bit_size; }
+
+private:
+  bool m_is_unsigned;
+  unsigned int m_bit_size;
+};
+
+struct amd_dbgapi_register_type_float : public amd_dbgapi_register_type
+{
+  amd_dbgapi_register_type_float ()
+    : amd_dbgapi_register_type (kind::FLOAT, "float")
+  {}
+};
+
+struct amd_dbgapi_register_type_double : public amd_dbgapi_register_type
+{
+  amd_dbgapi_register_type_double ()
+    : amd_dbgapi_register_type (kind::DOUBLE, "double")
+  {}
+};
+
+struct amd_dbgapi_register_type_vector : public amd_dbgapi_register_type
+{
+  amd_dbgapi_register_type_vector (const amd_dbgapi_register_type &element_type,
+				   unsigned int count)
+    : amd_dbgapi_register_type (kind::VECTOR,
+				make_lookup_name (element_type, count)),
+      m_element_type (element_type),
+      m_count (count)
+  {}
+
+  const amd_dbgapi_register_type &element_type () const
+  { return m_element_type; }
+
+  unsigned int count () const
+  { return m_count; }
+
+  static std::string make_lookup_name
+    (const amd_dbgapi_register_type &element_type, unsigned int count)
+  {
+    return string_printf ("%s[%d]", element_type.lookup_name ().c_str (),
+			  count);
+  }
+
+private:
+  const amd_dbgapi_register_type &m_element_type;
+  unsigned int m_count;
+};
+
+struct amd_dbgapi_register_type_code_ptr : public amd_dbgapi_register_type
+{
+  amd_dbgapi_register_type_code_ptr ()
+    : amd_dbgapi_register_type (kind::CODE_PTR, "void (*)()")
+  {}
+};
+
+struct amd_dbgapi_register_type_flags : public amd_dbgapi_register_type
+{
+  struct field
+  {
+    std::string name;
+    unsigned int bit_pos_start;
+    unsigned int bit_pos_end;
+    const amd_dbgapi_register_type *type;
+  };
+
+  using container_type = std::vector<field>;
+  using const_iterator_type = container_type::const_iterator;
+
+  amd_dbgapi_register_type_flags (unsigned int bit_size, std::string_view name)
+    : amd_dbgapi_register_type (kind::FLAGS,
+				make_lookup_name (bit_size, name)),
+      m_bit_size (bit_size),
+      m_name (std::move (name))
+  {}
+
+  unsigned int bit_size () const
+  { return m_bit_size; }
+
+  void add_field (std::string name, unsigned int bit_pos_start,
+		  unsigned int bit_pos_end,
+		  const amd_dbgapi_register_type *type)
+  {
+    m_fields.push_back (field {std::move (name), bit_pos_start,
+			       bit_pos_end, type});
+  }
+
+  container_type::size_type size () const
+  { return m_fields.size (); }
+
+  const field &operator[] (container_type::size_type pos) const
+  { return m_fields[pos]; }
+
+  const_iterator_type begin () const
+  { return m_fields.begin (); }
+
+  const_iterator_type end () const
+  { return m_fields.end (); }
+
+  const std::string &name () const
+  { return m_name; }
+
+  static std::string make_lookup_name (int bits, std::string_view name)
+  {
+    std::string res = string_printf ("flags%d_t ", bits);
+    res.append (name.data (), name.size ());
+    return res;
+  }
+
+private:
+  unsigned int m_bit_size;
+  container_type m_fields;
+  std::string m_name;
+};
+
+using amd_dbgapi_register_type_flags_up
+  = std::unique_ptr<amd_dbgapi_register_type_flags>;
+
+struct amd_dbgapi_register_type_enum : public amd_dbgapi_register_type
+{
+  struct enumerator
+  {
+    std::string name;
+    ULONGEST value;
+  };
+
+  using container_type = std::vector<enumerator>;
+  using const_iterator_type = container_type::const_iterator;
+
+  amd_dbgapi_register_type_enum (std::string_view name)
+    : amd_dbgapi_register_type (kind::ENUM, make_lookup_name (name)),
+      m_name (name.data (), name.length ())
+  {}
+
+  void set_bit_size (int bit_size)
+  { m_bit_size = bit_size; }
+
+  unsigned int bit_size () const
+  { return m_bit_size; }
+
+  void add_enumerator (std::string name, ULONGEST value)
+  { m_enumerators.push_back (enumerator {std::move (name), value}); }
+
+  container_type::size_type size () const
+  { return m_enumerators.size (); }
+
+  const enumerator &operator[] (container_type::size_type pos) const
+  { return m_enumerators[pos]; }
+
+  const_iterator_type begin () const
+  { return m_enumerators.begin (); }
+
+  const_iterator_type end () const
+  { return m_enumerators.end (); }
+
+  const std::string &name () const
+  { return m_name; }
+
+  static std::string make_lookup_name (std::string_view name)
+  {
+    std::string res = "enum ";
+    res.append (name.data (), name.length ());
+    return res;
+  }
+
+private:
+  unsigned int m_bit_size = 32;
+  container_type m_enumerators;
+  std::string m_name;
+};
+
+using amd_dbgapi_register_type_enum_up
+  = std::unique_ptr<amd_dbgapi_register_type_enum>;
+
+/* Map type lookup names to types.  */
+using amd_dbgapi_register_type_map
+  = std::unordered_map<std::string, amd_dbgapi_register_type_up>;
+
+/* Parse S as a ULONGEST, raise an error on overflow.  */
+
+static ULONGEST
+try_strtoulst (std::string_view s)
+{
+  errno = 0;
+  ULONGEST value = strtoulst (s.data (), nullptr, 0);
+  if (errno != 0)
+    error (_("Failed to parse integer."));
+
+  return value;
+};
+
+/* Shared regex bits.  */
+#define IDENTIFIER "[A-Za-z0-9_.]+"
+#define WS "[ \t]+"
+#define WSOPT "[ \t]*"
+
+static const amd_dbgapi_register_type &
+parse_amd_dbgapi_register_type (std::string_view type_name,
+				amd_dbgapi_register_type_map &type_map);
+
+
+/* parse_amd_dbgapi_register_type helper for enum types.  */
+
+static void
+parse_amd_dbgapi_register_type_enum_fields
+  (amd_dbgapi_register_type_enum &enum_type, std::string_view fields)
+{
+  compiled_regex regex (/* name */
+			"^(" IDENTIFIER ")"
+			WSOPT "=" WSOPT
+			/* value */
+			"([0-9]+)"
+			WSOPT "(," WSOPT ")?",
+			REG_EXTENDED,
+			_("Error in AMDGPU enum register type regex"));
+  regmatch_t matches[4];
+
+  while (!fields.empty ())
+    {
+      int res = regex.exec (fields.data (), ARRAY_SIZE (matches), matches, 0);
+      if (res == REG_NOMATCH)
+	error (_("Failed to parse enum fields"));
+
+      auto sv_from_match = [fields] (const regmatch_t &m)
+	{ return fields.substr (m.rm_so, m.rm_eo - m.rm_so); };
+
+      std::string_view name = sv_from_match (matches[1]);
+      std::string_view value_str = sv_from_match (matches[2]);
+      ULONGEST value = try_strtoulst (value_str);
+
+      if (value > std::numeric_limits<uint32_t>::max ())
+	enum_type.set_bit_size (64);
+
+      enum_type.add_enumerator (std::string (name), value);
+
+      fields = fields.substr (matches[0].rm_eo);
+    }
+}
+
+/* parse_amd_dbgapi_register_type helper for flags types.  */
+
+static void
+parse_amd_dbgapi_register_type_flags_fields
+  (amd_dbgapi_register_type_flags &flags_type,
+   int bits, std::string_view name, std::string_view fields,
+   amd_dbgapi_register_type_map &type_map)
+{
+  gdb_assert (bits == 32 || bits == 64);
+
+  std::string regex_str
+    = string_printf (/* type */
+		     "^(bool|uint%d_t|enum" WS IDENTIFIER WSOPT "(\\{[^}]*})?)"
+		     WS
+		     /* name */
+		     "(" IDENTIFIER ")" WSOPT
+		     /* bit position */
+		     "@([0-9]+)(-[0-9]+)?" WSOPT ";" WSOPT,
+		     bits);
+  compiled_regex regex (regex_str.c_str (), REG_EXTENDED,
+			_("Error in AMDGPU register type flags fields regex"));
+  regmatch_t matches[6];
+
+  while (!fields.empty ())
+    {
+      int res = regex.exec (fields.data (), ARRAY_SIZE (matches), matches, 0);
+      if (res == REG_NOMATCH)
+	error (_("Failed to parse flags type fields string"));
+
+      auto sv_from_match = [fields] (const regmatch_t &m)
+	{ return fields.substr (m.rm_so, m.rm_eo - m.rm_so); };
+
+      std::string_view field_type_str = sv_from_match (matches[1]);
+      std::string_view field_name = sv_from_match (matches[3]);
+      std::string_view pos_begin_str = sv_from_match (matches[4]);
+      ULONGEST pos_begin = try_strtoulst (pos_begin_str);
+
+      if (field_type_str == "bool")
+	flags_type.add_field (std::string (field_name), pos_begin, pos_begin,
+			      nullptr);
+      else
+	{
+	  if (matches[5].rm_so == -1)
+	    error (_("Missing end bit position"));
+
+	  std::string_view pos_end_str = sv_from_match (matches[5]);
+	  ULONGEST pos_end = try_strtoulst (pos_end_str.substr (1));
+	  const amd_dbgapi_register_type &field_type
+	    = parse_amd_dbgapi_register_type (field_type_str, type_map);
+	  flags_type.add_field (std::string (field_name), pos_begin, pos_end,
+				&field_type);
+	}
+
+      fields = fields.substr (matches[0].rm_eo);
+    }
+}
+
+/* parse_amd_dbgapi_register_type helper for scalars.  */
+
+static const amd_dbgapi_register_type &
+parse_amd_dbgapi_register_type_scalar (std::string_view name,
+				       amd_dbgapi_register_type_map &type_map)
+{
+  std::string name_str (name);
+  auto it = type_map.find (name_str);
+  if (it != type_map.end ())
+    {
+      enum amd_dbgapi_register_type::kind kind = it->second->kind ();
+      if (kind != amd_dbgapi_register_type::kind::INTEGER
+	  && kind != amd_dbgapi_register_type::kind::FLOAT
+	  && kind != amd_dbgapi_register_type::kind::DOUBLE
+	  && kind != amd_dbgapi_register_type::kind::CODE_PTR)
+	error (_("type mismatch"));
+
+      return *it->second;
+    }
+
+  amd_dbgapi_register_type_up type;
+  if (name == "int32_t")
+    type.reset (new amd_dbgapi_register_type_integer (false, 32));
+  else if (name == "uint32_t")
+    type.reset (new amd_dbgapi_register_type_integer (true, 32));
+  else if (name == "int64_t")
+    type.reset (new amd_dbgapi_register_type_integer (false, 64));
+  else if (name == "uint64_t")
+    type.reset (new amd_dbgapi_register_type_integer (true, 64));
+  else if (name == "float")
+    type.reset (new amd_dbgapi_register_type_float ());
+  else if (name == "double")
+    type.reset (new amd_dbgapi_register_type_double ());
+  else if (name == "void (*)()")
+    type.reset (new amd_dbgapi_register_type_code_ptr ());
+  else
+    error (_("unknown type %s"), name_str.c_str ());
+
+  auto insertion_pair = type_map.emplace (name, std::move (type));
+  return *insertion_pair.first->second;
+}
+
+/* Parse an amd-dbgapi register type string into an amd_dbgapi_register_type
+   object.
+
+   See the documentation of AMD_DBGAPI_REGISTER_INFO_TYPE in amd-dbgapi.h for
+   details about the format.  */
+
+static const amd_dbgapi_register_type &
+parse_amd_dbgapi_register_type (std::string_view type_str,
+				amd_dbgapi_register_type_map &type_map)
+{
+  size_t pos_open_bracket = type_str.find_last_of ('[');
+  auto sv_from_match = [type_str] (const regmatch_t &m)
+    { return type_str.substr (m.rm_so, m.rm_eo - m.rm_so); };
+
+  if (pos_open_bracket != std::string_view::npos)
+    {
+      /* Vector types.  */
+      std::string_view element_type_str
+	= type_str.substr (0, pos_open_bracket);
+      const amd_dbgapi_register_type &element_type
+	= parse_amd_dbgapi_register_type (element_type_str, type_map);
+
+      size_t pos_close_bracket = type_str.find_last_of (']');
+      gdb_assert (pos_close_bracket != std::string_view::npos);
+      std::string_view count_str_view
+	= type_str.substr (pos_open_bracket + 1,
+			    pos_close_bracket - pos_open_bracket);
+      std::string count_str (count_str_view);
+      unsigned int count = std::stoul (count_str);
+
+      std::string lookup_name
+	= amd_dbgapi_register_type_vector::make_lookup_name (element_type, count);
+      auto existing_type_it = type_map.find (lookup_name);
+      if (existing_type_it != type_map.end ())
+	{
+	  gdb_assert (existing_type_it->second->kind ()
+		      == amd_dbgapi_register_type::kind::VECTOR);
+	  return *existing_type_it->second;
+	}
+
+      amd_dbgapi_register_type_up type
+	(new amd_dbgapi_register_type_vector (element_type, count));
+      auto insertion_pair
+	= type_map.emplace (type->lookup_name (), std::move (type));
+      return *insertion_pair.first->second;
+    }
+
+  if (type_str.find ("flags32_t") == 0 || type_str.find ("flags64_t") == 0)
+    {
+      /* Split 'type_str' into 4 tokens: "(type) (name) ({ (fields) })".  */
+      compiled_regex regex ("^(flags32_t|flags64_t)"
+			    WS "(" IDENTIFIER ")" WSOPT
+			    "(\\{" WSOPT "(.*)})?",
+			    REG_EXTENDED,
+			    _("Error in AMDGPU register type regex"));
+
+      regmatch_t matches[5];
+      int res = regex.exec (type_str.data (), ARRAY_SIZE (matches), matches, 0);
+      if (res == REG_NOMATCH)
+	error (_("Failed to parse flags type string"));
+
+      std::string_view flags_keyword = sv_from_match (matches[1]);
+      unsigned int bit_size = flags_keyword == "flags32_t" ? 32 : 64;
+      std::string_view name = sv_from_match (matches[2]);
+      std::string lookup_name
+	= amd_dbgapi_register_type_flags::make_lookup_name (bit_size, name);
+      auto existing_type_it = type_map.find (lookup_name);
+
+      if (matches[3].rm_so == -1)
+	{
+	  /* No braces, lookup existing type.  */
+	  if (existing_type_it == type_map.end ())
+	    error (_("reference to unknown type %s."),
+		   std::string (name).c_str ());
+
+	  if (existing_type_it->second->kind ()
+	      != amd_dbgapi_register_type::kind::FLAGS)
+	    error (_("type mismatch"));
+
+	  return *existing_type_it->second;
+	}
+      else
+	{
+	  /* With braces, it's a definition.  */
+	  if (existing_type_it != type_map.end ())
+	    error (_("re-definition of type %s."),
+		   std::string (name).c_str ());
+
+	  amd_dbgapi_register_type_flags_up flags_type
+	    (new amd_dbgapi_register_type_flags (bit_size, name));
+	  std::string_view fields_without_braces = sv_from_match (matches[4]);
+
+	  parse_amd_dbgapi_register_type_flags_fields
+	    (*flags_type, bit_size, name, fields_without_braces, type_map);
+
+	  auto insertion_pair
+	    = type_map.emplace (flags_type->lookup_name (),
+				std::move (flags_type));
+	  return *insertion_pair.first->second;
+	}
+    }
+
+  if (type_str.find ("enum") == 0)
+    {
+      compiled_regex regex ("^enum" WS "(" IDENTIFIER ")" WSOPT "(\\{" WSOPT "([^}]*)})?",
+			    REG_EXTENDED,
+			    _("Error in AMDGPU register type enum regex"));
+
+      /* Split 'type_name' into 3 tokens: "(name) ( { (fields) } )".  */
+      regmatch_t matches[4];
+      int res = regex.exec (type_str.data (), ARRAY_SIZE (matches), matches, 0);
+      if (res == REG_NOMATCH)
+	error (_("Failed to parse flags type string"));
+
+      std::string_view name = sv_from_match (matches[1]);
+
+      std::string lookup_name
+	= amd_dbgapi_register_type_enum::make_lookup_name (name);
+      auto existing_type_it = type_map.find (lookup_name);
+
+      if (matches[2].rm_so == -1)
+	{
+	  /* No braces, lookup existing type.  */
+	  if (existing_type_it == type_map.end ())
+	    error (_("reference to unknown type %s"),
+		   std::string (name).c_str ());
+
+	  if (existing_type_it->second->kind ()
+	      != amd_dbgapi_register_type::kind::ENUM)
+	    error (_("type mismatch"));
+
+	  return *existing_type_it->second;
+	}
+      else
+	{
+	  /* With braces, it's a definition.  */
+	  if (existing_type_it != type_map.end ())
+	    error (_("re-definition of type %s"),
+		   std::string (name).c_str ());
+
+	  amd_dbgapi_register_type_enum_up enum_type
+	    (new amd_dbgapi_register_type_enum (name));
+	  std::string_view fields_without_braces = sv_from_match (matches[3]);
+
+	  parse_amd_dbgapi_register_type_enum_fields
+	    (*enum_type, fields_without_braces);
+
+	  auto insertion_pair
+	    = type_map.emplace (enum_type->lookup_name (),
+				std::move (enum_type));
+	  return *insertion_pair.first->second;
+	}
+    }
+
+  return parse_amd_dbgapi_register_type_scalar (type_str, type_map);
+}
+
+/* Convert an amd_dbgapi_register_type object to a GDB type.  */
+
+static type *
+amd_dbgapi_register_type_to_gdb_type (const amd_dbgapi_register_type &type,
+				      struct gdbarch *gdbarch)
+{
+  switch (type.kind ())
+    {
+    case amd_dbgapi_register_type::kind::INTEGER:
+      {
+	const auto &integer_type
+	  = gdb::checked_static_cast<const amd_dbgapi_register_type_integer &>
+	      (type);
+	switch (integer_type.bit_size ())
+	  {
+	  case 32:
+	    if (integer_type.is_unsigned ())
+	      return builtin_type (gdbarch)->builtin_uint32;
+	    else
+	      return builtin_type (gdbarch)->builtin_int32;
+
+	  case 64:
+	    if (integer_type.is_unsigned ())
+	      return builtin_type (gdbarch)->builtin_uint64;
+	    else
+	      return builtin_type (gdbarch)->builtin_int64;
+
+	  default:
+	    gdb_assert_not_reached ("invalid bit size");
+	  }
+      }
+
+    case amd_dbgapi_register_type::kind::VECTOR:
+      {
+	const auto &vector_type
+	  = gdb::checked_static_cast<const amd_dbgapi_register_type_vector &>
+	      (type);
+	struct type *element_type
+	  = amd_dbgapi_register_type_to_gdb_type (vector_type.element_type (),
+						  gdbarch);
+	return init_vector_type (element_type, vector_type.count ());
+      }
+
+    case amd_dbgapi_register_type::kind::FLOAT:
+      return builtin_type (gdbarch)->builtin_float;
+
+    case amd_dbgapi_register_type::kind::DOUBLE:
+      return builtin_type (gdbarch)->builtin_double;
+
+    case amd_dbgapi_register_type::kind::CODE_PTR:
+      return builtin_type (gdbarch)->builtin_func_ptr;
+
+    case amd_dbgapi_register_type::kind::FLAGS:
+      {
+	const auto &flags_type
+	  = gdb::checked_static_cast<const amd_dbgapi_register_type_flags &>
+	      (type);
+	struct type *gdb_type
+	  = arch_flags_type (gdbarch, flags_type.name ().c_str (),
+			     flags_type.bit_size ());
+
+	for (const auto &field : flags_type)
+	  {
+	    if (field.type == nullptr)
+	      {
+		gdb_assert (field.bit_pos_start == field.bit_pos_end);
+		append_flags_type_flag (gdb_type, field.bit_pos_start,
+					field.name.c_str ());
+	      }
+	    else
+	      {
+		struct type *field_type
+		  = amd_dbgapi_register_type_to_gdb_type (*field.type, gdbarch);
+		gdb_assert (field_type != nullptr);
+		append_flags_type_field
+		  (gdb_type, field.bit_pos_start,
+		   field.bit_pos_end - field.bit_pos_start + 1,
+		   field_type, field.name.c_str ());
+	      }
+	  }
+
+	return gdb_type;
+      }
+
+    case amd_dbgapi_register_type::kind::ENUM:
+      {
+	const auto &enum_type
+	  = gdb::checked_static_cast<const amd_dbgapi_register_type_enum &>
+	      (type);
+	struct type *gdb_type
+	  = (type_allocator (gdbarch)
+	     .new_type (TYPE_CODE_ENUM, enum_type.bit_size (),
+			enum_type.name ().c_str ()));
+
+	gdb_type->alloc_fields (enum_type.size ());
+	gdb_type->set_is_unsigned (true);
+
+	for (size_t i = 0; i < enum_type.size (); ++i)
+	  {
+	    const auto &field = enum_type[i];
+	    gdb_type->field (i).set_name (xstrdup (field.name.c_str ()));
+	    gdb_type->field (i).set_loc_enumval (field.value);
+	  }
+
+	return gdb_type;
+      }
+
+    default:
+      gdb_assert_not_reached ("unhandled amd_dbgapi_register_type kind");
+    }
+}
+
+static type *
+amdgpu_register_type (struct gdbarch *gdbarch, int regnum)
+{
+  amdgpu_gdbarch_tdep *tdep = get_amdgpu_gdbarch_tdep (gdbarch);
+
+  if (tdep->register_types[regnum] == nullptr)
+    {
+      /* This is done lazily (not at gdbarch initialization time), because it
+	 requires access to builtin_type, which can't be used while the gdbarch
+	 is not fully initialized.  */
+      char *bytes;
+      amd_dbgapi_status_t status
+	= amd_dbgapi_register_get_info (tdep->register_ids[regnum],
+					AMD_DBGAPI_REGISTER_INFO_TYPE,
+					sizeof (bytes), &bytes);
+      if (status != AMD_DBGAPI_STATUS_SUCCESS)
+	error (_("Failed to get register type from amd-dbgapi"));
+
+      gdb::unique_xmalloc_ptr<char> bytes_holder (bytes);
+      amd_dbgapi_register_type_map type_map;
+      const amd_dbgapi_register_type &register_type
+	= parse_amd_dbgapi_register_type (bytes, type_map);
+      tdep->register_types[regnum]
+	= amd_dbgapi_register_type_to_gdb_type (register_type, gdbarch);
+      gdb_assert (tdep->register_types[regnum] != nullptr);
+    }
+
+  return tdep->register_types[regnum];
+}
+
+static int
+amdgpu_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
+			    const reggroup *group)
+{
+  amdgpu_gdbarch_tdep *tdep = get_amdgpu_gdbarch_tdep (gdbarch);
+
+  auto it = tdep->register_class_map.find (group->name ());
+  if (it == tdep->register_class_map.end ())
+    return group == all_reggroup;
+
+  amd_dbgapi_register_class_state_t state;
+  if (amd_dbgapi_register_is_in_register_class (it->second,
+						tdep->register_ids[regnum],
+						&state)
+      != AMD_DBGAPI_STATUS_SUCCESS)
+    return group == all_reggroup;
+
+  return (state == AMD_DBGAPI_REGISTER_CLASS_STATE_MEMBER
+	  || group == all_reggroup);
+}
+
+static int
+amdgpu_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *)
+{
+  return get_amdgpu_gdbarch_tdep (gdbarch)->breakpoint_instruction_size;
+}
+
+static const gdb_byte *
+amdgpu_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
+{
+  *size = kind;
+  return get_amdgpu_gdbarch_tdep (gdbarch)->breakpoint_instruction_bytes.get ();
+}
+
+struct amdgpu_frame_cache
+{
+  CORE_ADDR base;
+  CORE_ADDR pc;
+};
+
+static amdgpu_frame_cache *
+amdgpu_frame_cache (frame_info_ptr this_frame, void **this_cache)
+{
+  if (*this_cache != nullptr)
+    return (struct amdgpu_frame_cache *) *this_cache;
+
+  struct amdgpu_frame_cache *cache
+    = FRAME_OBSTACK_ZALLOC (struct amdgpu_frame_cache);
+  (*this_cache) = cache;
+
+  cache->pc = get_frame_func (this_frame);
+  cache->base = 0;
+
+  return cache;
+}
+
+static void
+amdgpu_frame_this_id (frame_info_ptr this_frame, void **this_cache,
+		      frame_id *this_id)
+{
+  struct amdgpu_frame_cache *cache
+    = amdgpu_frame_cache (this_frame, this_cache);
+
+  if (get_frame_type (this_frame) == INLINE_FRAME)
+    (*this_id) = frame_id_build (cache->base, cache->pc);
+  else
+    (*this_id) = outer_frame_id;
+
+  frame_debug_printf ("this_frame=%d, type=%d, this_id=%s",
+		      frame_relative_level (this_frame),
+		      get_frame_type (this_frame),
+		      this_id->to_string ().c_str ());
+}
+
+static frame_id
+amdgpu_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
+{
+  return frame_id_build (0, get_frame_pc (this_frame));
+}
+
+static struct value *
+amdgpu_frame_prev_register (frame_info_ptr this_frame, void **this_cache,
+			    int regnum)
+{
+  return frame_unwind_got_register (this_frame, regnum, regnum);
+}
+
+static const frame_unwind amdgpu_frame_unwind = {
+  "amdgpu",
+  NORMAL_FRAME,
+  default_frame_unwind_stop_reason,
+  amdgpu_frame_this_id,
+  amdgpu_frame_prev_register,
+  nullptr,
+  default_frame_sniffer,
+  nullptr,
+  nullptr,
+};
+
+static int
+print_insn_amdgpu (bfd_vma memaddr, struct disassemble_info *info)
+{
+  gdb_disassemble_info *di
+    = static_cast<gdb_disassemble_info *> (info->application_data);
+
+  /* Try to read at most INSTRUCTION_SIZE bytes.  */
+
+  amd_dbgapi_size_t instruction_size = gdbarch_max_insn_length (di->arch ());
+  gdb::byte_vector buffer (instruction_size);
+
+  /* read_memory_func doesn't support partial reads, so if the read
+     fails, try one byte less, on and on until we manage to read
+     something.  A case where this would happen is if we're trying to
+     read the last instruction at the end of a file section and that
+     instruction is smaller than the largest instruction.  */
+  while (instruction_size > 0)
+    {
+      int ret = info->read_memory_func (memaddr, buffer.data (),
+					instruction_size, info);
+      if (ret == 0)
+	break;
+
+      --instruction_size;
+    }
+
+  if (instruction_size == 0)
+    {
+      info->memory_error_func (-1, memaddr, info);
+      return -1;
+    }
+
+  amd_dbgapi_architecture_id_t architecture_id;
+  amd_dbgapi_status_t status
+    = amd_dbgapi_get_architecture (gdbarch_bfd_arch_info (di->arch ())->mach,
+				   &architecture_id);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    return -1;
+
+  auto symbolizer = [] (amd_dbgapi_symbolizer_id_t symbolizer_id,
+			amd_dbgapi_global_address_t address,
+			char **symbol_text) -> amd_dbgapi_status_t
+  {
+    gdb_disassemble_info *disasm_info
+      = reinterpret_cast<gdb_disassemble_info *> (symbolizer_id);
+    gdb_printing_disassembler *disasm
+      = dynamic_cast<gdb_printing_disassembler *> (disasm_info);
+    gdb_assert (disasm != nullptr);
+
+    string_file string (disasm->stream ()->can_emit_style_escape ());
+    print_address (disasm->arch (), address, &string);
+    *symbol_text = xstrdup (string.c_str ());
+
+    return AMD_DBGAPI_STATUS_SUCCESS;
+  };
+  auto symbolizer_id = reinterpret_cast<amd_dbgapi_symbolizer_id_t> (di);
+  char *instruction_text = nullptr;
+  status = amd_dbgapi_disassemble_instruction (architecture_id, memaddr,
+					       &instruction_size,
+					       buffer.data (),
+					       &instruction_text,
+					       symbolizer_id,
+					       symbolizer);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    {
+      size_t alignment;
+      status = amd_dbgapi_architecture_get_info
+	(architecture_id,
+	 AMD_DBGAPI_ARCHITECTURE_INFO_MINIMUM_INSTRUCTION_ALIGNMENT,
+	 sizeof (alignment), &alignment);
+      if (status != AMD_DBGAPI_STATUS_SUCCESS)
+	error (_("amd_dbgapi_architecture_get_info failed"));
+
+      info->fprintf_func (di, "<illegal instruction>");
+
+      /* Skip to the next valid instruction address.  */
+      return align_up (memaddr + 1, alignment) - memaddr;
+    }
+
+  /* Print the instruction.  */
+  info->fprintf_func (di, "%s", instruction_text);
+
+  /* Free the memory allocated by the amd-dbgapi.  */
+  xfree (instruction_text);
+
+  return static_cast<int> (instruction_size);
+}
+
+static CORE_ADDR
+amdgpu_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
+{
+  CORE_ADDR func_addr;
+
+  /* See if we can determine the end of the prologue via the symbol table.
+     If so, then return either PC, or the PC after the prologue, whichever
+     is greater.  */
+  if (find_pc_partial_function (start_pc, nullptr, &func_addr, nullptr))
+    {
+      CORE_ADDR post_prologue_pc
+	= skip_prologue_using_sal (gdbarch, func_addr);
+      struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
+
+      /* Clang always emits a line note before the prologue and another
+	 one after.  We trust clang to emit usable line notes.  */
+      if (post_prologue_pc != 0
+	  && cust != nullptr
+	  && cust->producer () != nullptr
+	  && producer_is_llvm (cust->producer ()))
+	return std::max (start_pc, post_prologue_pc);
+    }
+
+  return start_pc;
+}
+
+static bool
+amdgpu_supports_arch_info (const struct bfd_arch_info *info)
+{
+  amd_dbgapi_architecture_id_t architecture_id;
+  amd_dbgapi_status_t status
+    = amd_dbgapi_get_architecture (info->mach, &architecture_id);
+
+  gdb_assert (status != AMD_DBGAPI_STATUS_ERROR_NOT_INITIALIZED);
+  return status == AMD_DBGAPI_STATUS_SUCCESS;
+}
+
+static struct gdbarch *
+amdgpu_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+{
+  /* If there is already a candidate, use it.  */
+  arches = gdbarch_list_lookup_by_info (arches, &info);
+  if (arches != nullptr)
+    return arches->gdbarch;
+
+  /* Allocate space for the new architecture.  */
+  gdbarch_up gdbarch_u
+    (gdbarch_alloc (&info, gdbarch_tdep_up (new amdgpu_gdbarch_tdep)));
+  gdbarch *gdbarch = gdbarch_u.get ();
+  amdgpu_gdbarch_tdep *tdep = gdbarch_tdep<amdgpu_gdbarch_tdep> (gdbarch);
+
+  /* Data types.  */
+  set_gdbarch_char_signed (gdbarch, 0);
+  set_gdbarch_ptr_bit (gdbarch, 64);
+  set_gdbarch_addr_bit (gdbarch, 64);
+  set_gdbarch_short_bit (gdbarch, 16);
+  set_gdbarch_int_bit (gdbarch, 32);
+  set_gdbarch_long_bit (gdbarch, 64);
+  set_gdbarch_long_long_bit (gdbarch, 64);
+  set_gdbarch_float_bit (gdbarch, 32);
+  set_gdbarch_double_bit (gdbarch, 64);
+  set_gdbarch_long_double_bit (gdbarch, 128);
+  set_gdbarch_half_format (gdbarch, floatformats_ieee_half);
+  set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
+  set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
+  set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
+
+  /* Frame interpretation.  */
+  set_gdbarch_skip_prologue (gdbarch, amdgpu_skip_prologue);
+  set_gdbarch_inner_than (gdbarch, core_addr_greaterthan);
+  dwarf2_append_unwinders (gdbarch);
+  frame_unwind_append_unwinder (gdbarch, &amdgpu_frame_unwind);
+  set_gdbarch_dummy_id (gdbarch, amdgpu_dummy_id);
+
+  /* Registers and memory.  */
+  amd_dbgapi_architecture_id_t architecture_id;
+  amd_dbgapi_status_t status
+    = amd_dbgapi_get_architecture (gdbarch_bfd_arch_info (gdbarch)->mach,
+				   &architecture_id);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    {
+      warning (_("Failed to get architecture from amd-dbgapi"));
+      return nullptr;
+    }
+
+
+  /* Add register groups.  */
+  size_t register_class_count;
+  amd_dbgapi_register_class_id_t *register_class_ids;
+  status = amd_dbgapi_architecture_register_class_list (architecture_id,
+							&register_class_count,
+							&register_class_ids);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    {
+      warning (_("Failed to get register class list from amd-dbgapi"));
+      return nullptr;
+    }
+
+  gdb::unique_xmalloc_ptr<amd_dbgapi_register_class_id_t>
+    register_class_ids_holder (register_class_ids);
+
+  for (size_t i = 0; i < register_class_count; ++i)
+    {
+      char *bytes;
+      status = amd_dbgapi_architecture_register_class_get_info
+	(register_class_ids[i], AMD_DBGAPI_REGISTER_CLASS_INFO_NAME,
+	 sizeof (bytes), &bytes);
+      if (status != AMD_DBGAPI_STATUS_SUCCESS)
+	{
+	  warning (_("Failed to get register class name from amd-dbgapi"));
+	  return nullptr;
+	}
+
+      gdb::unique_xmalloc_ptr<char> name (bytes);
+
+      auto inserted = tdep->register_class_map.emplace (name.get (),
+							register_class_ids[i]);
+      gdb_assert (inserted.second);
+
+      /* Avoid creating a user reggroup with the same name as some built-in
+	 reggroup, such as "general", "system", "vector", etc.  */
+      if (reggroup_find (gdbarch, name.get ()) != nullptr)
+	continue;
+
+      /* Allocate the reggroup in the gdbarch.  */
+      reggroup_add
+	(gdbarch, reggroup_gdbarch_new (gdbarch, name.get (), USER_REGGROUP));
+    }
+
+  /* Add registers. */
+  size_t register_count;
+  amd_dbgapi_register_id_t *register_ids;
+  status = amd_dbgapi_architecture_register_list (architecture_id,
+						  &register_count,
+						  &register_ids);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    {
+      warning (_("Failed to get register list from amd-dbgapi"));
+      return nullptr;
+    }
+
+  gdb::unique_xmalloc_ptr<amd_dbgapi_register_id_t> register_ids_holder
+    (register_ids);
+
+  tdep->register_ids.insert (tdep->register_ids.end (), &register_ids[0],
+			     &register_ids[register_count]);
+
+  tdep->register_properties.resize (register_count,
+				    AMD_DBGAPI_REGISTER_PROPERTY_NONE);
+  for (size_t regnum = 0; regnum < register_count; ++regnum)
+    {
+      auto &register_properties = tdep->register_properties[regnum];
+      if (amd_dbgapi_register_get_info (register_ids[regnum],
+					AMD_DBGAPI_REGISTER_INFO_PROPERTIES,
+					sizeof (register_properties),
+					&register_properties)
+	  != AMD_DBGAPI_STATUS_SUCCESS)
+	{
+	  warning (_("Failed to get register properties from amd-dbgapi"));
+	  return nullptr;
+	}
+    }
+
+  set_gdbarch_num_regs (gdbarch, register_count);
+  set_gdbarch_num_pseudo_regs (gdbarch, 0);
+
+  tdep->register_names.resize (register_count);
+  tdep->register_types.resize (register_count);
+  for (size_t i = 0; i < register_count; ++i)
+    {
+      /* Set amd-dbgapi register id -> gdb regnum mapping.  */
+      tdep->regnum_map.emplace (tdep->register_ids[i], i);
+
+      /* Get register name.  */
+      char *bytes;
+      status = amd_dbgapi_register_get_info (tdep->register_ids[i],
+					     AMD_DBGAPI_REGISTER_INFO_NAME,
+					     sizeof (bytes), &bytes);
+      if (status == AMD_DBGAPI_STATUS_SUCCESS)
+	{
+	  tdep->register_names[i] = bytes;
+	  xfree (bytes);
+	}
+
+      /* Get register DWARF number.  */
+      uint64_t dwarf_num;
+      status = amd_dbgapi_register_get_info (tdep->register_ids[i],
+					     AMD_DBGAPI_REGISTER_INFO_DWARF,
+					     sizeof (dwarf_num), &dwarf_num);
+      if (status == AMD_DBGAPI_STATUS_SUCCESS)
+	{
+	  if (dwarf_num >= tdep->dwarf_regnum_to_gdb_regnum.size ())
+	    tdep->dwarf_regnum_to_gdb_regnum.resize (dwarf_num + 1, -1);
+
+	  tdep->dwarf_regnum_to_gdb_regnum[dwarf_num] = i;
+	}
+    }
+
+  amd_dbgapi_register_id_t pc_register_id;
+  status = amd_dbgapi_architecture_get_info
+    (architecture_id, AMD_DBGAPI_ARCHITECTURE_INFO_PC_REGISTER,
+     sizeof (pc_register_id), &pc_register_id);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    {
+      warning (_("Failed to get PC register from amd-dbgapi"));
+      return nullptr;
+    }
+
+  set_gdbarch_pc_regnum (gdbarch, tdep->regnum_map[pc_register_id]);
+  set_gdbarch_ps_regnum (gdbarch, -1);
+  set_gdbarch_sp_regnum (gdbarch, -1);
+  set_gdbarch_fp0_regnum (gdbarch, -1);
+
+  set_gdbarch_dwarf2_reg_to_regnum (gdbarch, amdgpu_dwarf_reg_to_regnum);
+
+  set_gdbarch_return_value_as_value (gdbarch, amdgpu_return_value_as_value);
+
+  /* Register representation.  */
+  set_gdbarch_register_name (gdbarch, amdgpu_register_name);
+  set_gdbarch_register_type (gdbarch, amdgpu_register_type);
+  set_gdbarch_register_reggroup_p (gdbarch, amdgpu_register_reggroup_p);
+
+  /* Disassembly.  */
+  set_gdbarch_print_insn (gdbarch, print_insn_amdgpu);
+
+ /* Instructions.  */
+  amd_dbgapi_size_t max_insn_length = 0;
+  status = amd_dbgapi_architecture_get_info
+    (architecture_id, AMD_DBGAPI_ARCHITECTURE_INFO_LARGEST_INSTRUCTION_SIZE,
+     sizeof (max_insn_length), &max_insn_length);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd_dbgapi_architecture_get_info failed"));
+
+  set_gdbarch_max_insn_length (gdbarch, max_insn_length);
+
+  status = amd_dbgapi_architecture_get_info
+    (architecture_id, AMD_DBGAPI_ARCHITECTURE_INFO_BREAKPOINT_INSTRUCTION_SIZE,
+     sizeof (tdep->breakpoint_instruction_size),
+     &tdep->breakpoint_instruction_size);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd_dbgapi_architecture_get_info failed"));
+
+  gdb_byte *breakpoint_instruction_bytes;
+  status = amd_dbgapi_architecture_get_info
+    (architecture_id, AMD_DBGAPI_ARCHITECTURE_INFO_BREAKPOINT_INSTRUCTION,
+     sizeof (breakpoint_instruction_bytes), &breakpoint_instruction_bytes);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd_dbgapi_architecture_get_info failed"));
+
+  tdep->breakpoint_instruction_bytes.reset (breakpoint_instruction_bytes);
+
+  set_gdbarch_breakpoint_kind_from_pc (gdbarch,
+				       amdgpu_breakpoint_kind_from_pc);
+  set_gdbarch_sw_breakpoint_from_kind (gdbarch,
+				       amdgpu_sw_breakpoint_from_kind);
+
+  amd_dbgapi_size_t pc_adjust;
+  status = amd_dbgapi_architecture_get_info
+    (architecture_id,
+     AMD_DBGAPI_ARCHITECTURE_INFO_BREAKPOINT_INSTRUCTION_PC_ADJUST,
+     sizeof (pc_adjust), &pc_adjust);
+  if (status != AMD_DBGAPI_STATUS_SUCCESS)
+    error (_("amd_dbgapi_architecture_get_info failed"));
+
+  set_gdbarch_decr_pc_after_break (gdbarch, pc_adjust);
+
+  return gdbarch_u.release ();
+}
+
+#if defined GDB_SELF_TEST
+
+static void
+amdgpu_register_type_parse_test ()
+{
+  {
+    /* A type that exercises flags and enums, in particular looking up an
+       existing enum type by name. */
+    const char *flags_type_str =
+      "flags32_t mode { \
+	 enum fp_round { \
+	   NEAREST_EVEN = 0, \
+	   PLUS_INF  = 1, \
+	   MINUS_INF = 2, \
+	   ZERO      = 3 \
+	 } FP_ROUND.32 @0-1; \
+	 enum fp_round FP_ROUND.64_16 @2-3; \
+	 enum fp_denorm { \
+	   FLUSH_SRC_DST = 0, \
+	   FLUSH_DST     = 1, \
+	   FLUSH_SRC     = 2, \
+	   FLUSH_NONE    = 3 \
+	 } FP_DENORM.32 @4-5; \
+	 enum fp_denorm FP_DENORM.64_16 @6-7; \
+	 bool DX10_CLAMP @8; \
+	 bool IEEE @9; \
+	 bool LOD_CLAMPED @10; \
+	 bool DEBUG_EN @11; \
+	 bool EXCP_EN.INVALID @12; \
+	 bool EXCP_EN.DENORM @13; \
+	 bool EXCP_EN.DIV0 @14; \
+	 bool EXCP_EN.OVERFLOW @15; \
+	 bool EXCP_EN.UNDERFLOW @16; \
+	 bool EXCP_EN.INEXACT @17; \
+	 bool EXCP_EN.INT_DIV0 @18; \
+	 bool EXCP_EN.ADDR_WATCH @19; \
+	 bool FP16_OVFL @23; \
+	 bool POPS_PACKER0 @24; \
+	 bool POPS_PACKER1 @25; \
+	 bool DISABLE_PERF @26; \
+	 bool GPR_IDX_EN @27; \
+	 bool VSKIP @28; \
+	 uint32_t CSP @29-31; \
+       }";
+    amd_dbgapi_register_type_map type_map;
+    const amd_dbgapi_register_type &type
+      = parse_amd_dbgapi_register_type (flags_type_str, type_map);
+
+    gdb_assert (type.kind () == amd_dbgapi_register_type::kind::FLAGS);
+
+    const auto &f
+      = gdb::checked_static_cast<const amd_dbgapi_register_type_flags &> (type);
+    gdb_assert (f.size () == 23);
+
+    /* Check the two "FP_ROUND" fields.  */
+    auto check_fp_round_field
+      = [] (const char *name, const amd_dbgapi_register_type_flags::field &field)
+	{
+	  gdb_assert (field.name == name);
+	  gdb_assert (field.type->kind ()
+		      == amd_dbgapi_register_type::kind::ENUM);
+
+	  const auto &e
+	    = gdb::checked_static_cast<const amd_dbgapi_register_type_enum &>
+	      (*field.type);
+	  gdb_assert (e.size () == 4);
+	  gdb_assert (e[0].name == "NEAREST_EVEN");
+	  gdb_assert (e[0].value == 0);
+	  gdb_assert (e[3].name == "ZERO");
+	  gdb_assert (e[3].value == 3);
+	};
+
+    check_fp_round_field ("FP_ROUND.32", f[0]);
+    check_fp_round_field ("FP_ROUND.64_16", f[1]);
+
+    /* Check the "CSP" field.  */
+    gdb_assert (f[22].name == "CSP");
+    gdb_assert (f[22].type->kind () == amd_dbgapi_register_type::kind::INTEGER);
+
+    const auto &i
+      = gdb::checked_static_cast<const amd_dbgapi_register_type_integer &>
+	  (*f[22].type);
+    gdb_assert (i.bit_size () == 32);
+    gdb_assert (i.is_unsigned ());
+  }
+
+  {
+    /* Test the vector type.  */
+    const char *vector_type_str = "int32_t[64]";
+    amd_dbgapi_register_type_map type_map;
+    const amd_dbgapi_register_type &type
+      = parse_amd_dbgapi_register_type (vector_type_str, type_map);
+
+    gdb_assert (type.kind () == amd_dbgapi_register_type::kind::VECTOR);
+
+    const auto &v
+      = gdb::checked_static_cast<const amd_dbgapi_register_type_vector &>
+	  (type);
+    gdb_assert (v.count () == 64);
+
+    const auto &et = v.element_type ();
+    gdb_assert (et.kind () == amd_dbgapi_register_type::kind::INTEGER);
+
+    const auto &i
+      = gdb::checked_static_cast<const amd_dbgapi_register_type_integer &> (et);
+    gdb_assert (i.bit_size () == 32);
+    gdb_assert (!i.is_unsigned ());
+  }
+}
+
+#endif
+
+void _initialize_amdgpu_tdep ();
+
+void
+_initialize_amdgpu_tdep ()
+{
+  gdbarch_register (bfd_arch_amdgcn, amdgpu_gdbarch_init, NULL,
+		    amdgpu_supports_arch_info);
+#if defined GDB_SELF_TEST
+  selftests::register_test ("amdgpu-register-type-parse-flags-fields",
+			    amdgpu_register_type_parse_test);
+#endif
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amdgpu-tdep.h ./gdb/amdgpu-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/amdgpu-tdep.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amdgpu-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,93 @@
+/* Target-dependent code for the AMDGPU architectures.
+
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef AMDGPU_TDEP_H
+#define AMDGPU_TDEP_H
+
+#include "gdbarch.h"
+
+#include <amd-dbgapi/amd-dbgapi.h>
+#include <unordered_map>
+
+/* Provide std::unordered_map::Hash for amd_dbgapi_register_id_t.  */
+struct register_id_hash
+{
+  size_t
+  operator() (const amd_dbgapi_register_id_t &register_id) const
+  {
+    return std::hash<decltype (register_id.handle)> () (register_id.handle);
+  }
+};
+
+/* Provide std::unordered_map::Equal for amd_dbgapi_register_id_t.  */
+struct register_id_equal_to
+{
+  bool
+  operator() (const amd_dbgapi_register_id_t &lhs,
+	      const amd_dbgapi_register_id_t &rhs) const
+  {
+    return std::equal_to<decltype (lhs.handle)> () (lhs.handle, rhs.handle);
+  }
+};
+
+/* AMDGPU architecture specific information.  */
+struct amdgpu_gdbarch_tdep : gdbarch_tdep_base
+{
+  /* This architecture's breakpoint instruction.  */
+  gdb::unique_xmalloc_ptr<gdb_byte> breakpoint_instruction_bytes;
+  size_t breakpoint_instruction_size;
+
+  /* A vector of register_ids indexed by their equivalent gdb regnum.  */
+  std::vector<amd_dbgapi_register_id_t> register_ids;
+
+  /* A vector of register_properties indexed by their equivalent gdb regnum.  */
+  std::vector<amd_dbgapi_register_properties_t> register_properties;
+
+  /* A vector of register names indexed by their equivalent gdb regnum.  */
+  std::vector<std::string> register_names;
+
+  /* A vector of register types created from the amd-dbgapi type strings,
+     indexed by their equivalent gdb regnum.  These are computed lazily by
+     amdgpu_register_type, entries that haven't been computed yet are
+     nullptr.  */
+  std::vector<type *> register_types;
+
+  /* A vector of GDB register numbers indexed by DWARF register number.
+
+     Unused DWARF register numbers map to value -1.  */
+  std::vector<int> dwarf_regnum_to_gdb_regnum;
+
+  /* A map of gdb regnums keyed by they equivalent register_id.  */
+  std::unordered_map<amd_dbgapi_register_id_t, int, register_id_hash,
+		     register_id_equal_to>
+    regnum_map;
+
+  /* A map of register_class_ids keyed by their name.  */
+  std::unordered_map<std::string, amd_dbgapi_register_class_id_t>
+    register_class_map;
+};
+
+/* Return true if GDBARCH is of an AMDGPU architecture.  */
+bool is_amdgpu_arch (struct gdbarch *gdbarch);
+
+/* Return the amdgpu-specific data associated to ARCH.  */
+
+amdgpu_gdbarch_tdep *get_amdgpu_gdbarch_tdep (gdbarch *arch);
+
+#endif /* AMDGPU_TDEP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/annotate.c ./gdb/annotate.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/annotate.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/annotate.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Annotation routines for GDB.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,11 +25,10 @@
 #include "observable.h"
 #include "inferior.h"
 #include "infrun.h"
-#include "top.h"
 #include "source.h"
 #include "objfiles.h"
 #include "source-cache.h"
-
+#include "ui.h"
 
 /* Prototypes for local functions.  */
 
@@ -52,9 +51,9 @@ static void
 print_value_flags (struct type *t)
 {
   if (can_dereference (t))
-    printf_filtered (("*"));
+    printf_unfiltered (("*"));
   else
-    printf_filtered (("-"));
+    printf_unfiltered (("-"));
 }
 
 static void
@@ -76,42 +75,42 @@ void
 annotate_breakpoint (int num)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032breakpoint %d\n"), num);
+    printf_unfiltered (("\n\032\032breakpoint %d\n"), num);
 }
 
 void
 annotate_catchpoint (int num)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032catchpoint %d\n"), num);
+    printf_unfiltered (("\n\032\032catchpoint %d\n"), num);
 }
 
 void
 annotate_watchpoint (int num)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032watchpoint %d\n"), num);
+    printf_unfiltered (("\n\032\032watchpoint %d\n"), num);
 }
 
 void
 annotate_starting (void)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032starting\n"));
+    printf_unfiltered (("\n\032\032starting\n"));
 }
 
 void
 annotate_stopped (void)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032stopped\n"));
+    printf_unfiltered (("\n\032\032stopped\n"));
 }
 
 void
 annotate_exited (int exitstatus)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032exited %d\n"), exitstatus);
+    printf_unfiltered (("\n\032\032exited %d\n"), exitstatus);
 }
 
 void
@@ -121,35 +120,35 @@ annotate_signalled (void)
     deprecated_annotate_signalled_hook ();
 
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032signalled\n"));
+    printf_unfiltered (("\n\032\032signalled\n"));
 }
 
 void
 annotate_signal_name (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032signal-name\n"));
+    printf_unfiltered (("\n\032\032signal-name\n"));
 }
 
 void
 annotate_signal_name_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032signal-name-end\n"));
+    printf_unfiltered (("\n\032\032signal-name-end\n"));
 }
 
 void
 annotate_signal_string (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032signal-string\n"));
+    printf_unfiltered (("\n\032\032signal-string\n"));
 }
 
 void
 annotate_signal_string_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032signal-string-end\n"));
+    printf_unfiltered (("\n\032\032signal-string-end\n"));
 }
 
 void
@@ -159,42 +158,42 @@ annotate_signal (void)
     deprecated_annotate_signal_hook ();
 
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032signal\n"));
+    printf_unfiltered (("\n\032\032signal\n"));
 }
 
 void
 annotate_breakpoints_headers (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032breakpoints-headers\n"));
+    printf_unfiltered (("\n\032\032breakpoints-headers\n"));
 }
 
 void
 annotate_field (int num)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032field %d\n"), num);
+    printf_unfiltered (("\n\032\032field %d\n"), num);
 }
 
 void
 annotate_breakpoints_table (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032breakpoints-table\n"));
+    printf_unfiltered (("\n\032\032breakpoints-table\n"));
 }
 
 void
 annotate_record (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032record\n"));
+    printf_unfiltered (("\n\032\032record\n"));
 }
 
 void
 annotate_breakpoints_table_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032breakpoints-table-end\n"));
+    printf_unfiltered (("\n\032\032breakpoints-table-end\n"));
 }
 
 void
@@ -233,13 +232,15 @@ annotate_thread_changed (void)
 /* Emit notification on thread exit.  */
 
 static void
-annotate_thread_exited (struct thread_info *t, int silent)
+annotate_thread_exited (thread_info *t,
+			std::optional<ULONGEST> exit_code,
+			bool /* silent */)
 {
   if (annotation_level > 1)
     {
-      printf_filtered(("\n\032\032thread-exited,"
-                       "id=\"%d\",group-id=\"i%d\"\n"),
-                      t->global_num, t->inf->num);
+      printf_unfiltered (("\n\032\032thread-exited,"
+			  "id=\"%d\",group-id=\"i%d\"\n"),
+			 t->global_num, t->inf->num);
     }
 }
 
@@ -248,9 +249,9 @@ annotate_field_begin (struct type *type)
 {
   if (annotation_level == 2)
     {
-      printf_filtered (("\n\032\032field-begin "));
+      printf_unfiltered (("\n\032\032field-begin "));
       print_value_flags (type);
-      printf_filtered (("\n"));
+      printf_unfiltered (("\n"));
     }
 }
 
@@ -258,42 +259,42 @@ void
 annotate_field_name_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032field-name-end\n"));
+    printf_unfiltered (("\n\032\032field-name-end\n"));
 }
 
 void
 annotate_field_value (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032field-value\n"));
+    printf_unfiltered (("\n\032\032field-value\n"));
 }
 
 void
 annotate_field_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032field-end\n"));
+    printf_unfiltered (("\n\032\032field-end\n"));
 }
 
 void
 annotate_quit (void)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032quit\n"));
+    printf_unfiltered (("\n\032\032quit\n"));
 }
 
 void
 annotate_error (void)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032error\n"));
+    printf_unfiltered (("\n\032\032error\n"));
 }
 
 void
 annotate_error_begin (void)
 {
   if (annotation_level > 1)
-    fprintf_filtered (gdb_stderr, "\n\032\032error-begin\n");
+    gdb_printf (gdb_stderr, "\n\032\032error-begin\n");
 }
 
 void
@@ -301,9 +302,9 @@ annotate_value_history_begin (int histin
 {
   if (annotation_level == 2)
     {
-      printf_filtered (("\n\032\032value-history-begin %d "), histindex);
+      printf_unfiltered (("\n\032\032value-history-begin %d "), histindex);
       print_value_flags (type);
-      printf_filtered (("\n"));
+      printf_unfiltered (("\n"));
     }
 }
 
@@ -312,9 +313,9 @@ annotate_value_begin (struct type *type)
 {
   if (annotation_level == 2)
     {
-      printf_filtered (("\n\032\032value-begin "));
+      printf_unfiltered (("\n\032\032value-begin "));
       print_value_flags (type);
-      printf_filtered (("\n"));
+      printf_unfiltered (("\n"));
     }
 }
 
@@ -322,84 +323,84 @@ void
 annotate_value_history_value (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032value-history-value\n"));
+    printf_unfiltered (("\n\032\032value-history-value\n"));
 }
 
 void
 annotate_value_history_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032value-history-end\n"));
+    printf_unfiltered (("\n\032\032value-history-end\n"));
 }
 
 void
 annotate_value_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032value-end\n"));
+    printf_unfiltered (("\n\032\032value-end\n"));
 }
 
 void
 annotate_display_begin (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032display-begin\n"));
+    printf_unfiltered (("\n\032\032display-begin\n"));
 }
 
 void
 annotate_display_number_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032display-number-end\n"));
+    printf_unfiltered (("\n\032\032display-number-end\n"));
 }
 
 void
 annotate_display_format (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032display-format\n"));
+    printf_unfiltered (("\n\032\032display-format\n"));
 }
 
 void
 annotate_display_expression (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032display-expression\n"));
+    printf_unfiltered (("\n\032\032display-expression\n"));
 }
 
 void
 annotate_display_expression_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032display-expression-end\n"));
+    printf_unfiltered (("\n\032\032display-expression-end\n"));
 }
 
 void
 annotate_display_value (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032display-value\n"));
+    printf_unfiltered (("\n\032\032display-value\n"));
 }
 
 void
 annotate_display_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032display-end\n"));
+    printf_unfiltered (("\n\032\032display-end\n"));
 }
 
 void
 annotate_arg_begin (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032arg-begin\n"));
+    printf_unfiltered (("\n\032\032arg-begin\n"));
 }
 
 void
 annotate_arg_name_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032arg-name-end\n"));
+    printf_unfiltered (("\n\032\032arg-name-end\n"));
 }
 
 void
@@ -407,9 +408,9 @@ annotate_arg_value (struct type *type)
 {
   if (annotation_level == 2)
     {
-      printf_filtered (("\n\032\032arg-value "));
+      printf_unfiltered (("\n\032\032arg-value "));
       print_value_flags (type);
-      printf_filtered (("\n"));
+      printf_unfiltered (("\n"));
     }
 }
 
@@ -417,7 +418,7 @@ void
 annotate_arg_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032arg-end\n"));
+    printf_unfiltered (("\n\032\032arg-end\n"));
 }
 
 static void
@@ -425,17 +426,17 @@ annotate_source (const char *filename, i
 		 struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032source "));
+    printf_unfiltered (("\n\032\032source "));
   else
-    printf_filtered (("\032\032"));
+    printf_unfiltered (("\032\032"));
 
-  printf_filtered (("%s:%d:%d:%s:%s\n"), filename, line, character,
-		   mid ? "middle" : "beg", paddress (gdbarch, pc));
+  printf_unfiltered (("%s:%d:%d:%s:%s\n"), filename, line, character,
+		     mid ? "middle" : "beg", paddress (gdbarch, pc));
 }
 
 /* See annotate.h.  */
 
-void
+bool
 annotate_source_line (struct symtab *s, int line, int mid_statement,
 		      CORE_ADDR pc)
 {
@@ -443,16 +444,25 @@ annotate_source_line (struct symtab *s,
     {
       const std::vector<off_t> *offsets;
       if (!g_source_cache.get_line_charpos (s, &offsets))
-	return;
-
-      /* Don't index off the end of the line_charpos array.  */
+	return false;
       if (line > offsets->size ())
-	return;
+	return false;
 
       annotate_source (s->fullname, line, (int) (*offsets)[line - 1],
-		       mid_statement, get_objfile_arch (SYMTAB_OBJFILE (s)),
+		       mid_statement, s->compunit ()->objfile ()->arch (),
 		       pc);
+
+      /* Update the current symtab and line.  */
+      symtab_and_line sal;
+      sal.pspace = s->compunit ()->objfile ()->pspace;
+      sal.symtab = s;
+      sal.line = line;
+      set_current_source_symtab_and_line (sal);
+
+      return true;
     }
+
+  return false;
 }
 
 
@@ -460,99 +470,99 @@ void
 annotate_frame_begin (int level, struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   if (annotation_level > 1)
-    printf_filtered (("\n\032\032frame-begin %d %s\n"),
-		     level, paddress (gdbarch, pc));
+    printf_unfiltered (("\n\032\032frame-begin %d %s\n"),
+		       level, paddress (gdbarch, pc));
 }
 
 void
 annotate_function_call (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032function-call\n"));
+    printf_unfiltered (("\n\032\032function-call\n"));
 }
 
 void
 annotate_signal_handler_caller (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032signal-handler-caller\n"));
+    printf_unfiltered (("\n\032\032signal-handler-caller\n"));
 }
 
 void
 annotate_frame_address (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-address\n"));
+    printf_unfiltered (("\n\032\032frame-address\n"));
 }
 
 void
 annotate_frame_address_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-address-end\n"));
+    printf_unfiltered (("\n\032\032frame-address-end\n"));
 }
 
 void
 annotate_frame_function_name (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-function-name\n"));
+    printf_unfiltered (("\n\032\032frame-function-name\n"));
 }
 
 void
 annotate_frame_args (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-args\n"));
+    printf_unfiltered (("\n\032\032frame-args\n"));
 }
 
 void
 annotate_frame_source_begin (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-source-begin\n"));
+    printf_unfiltered (("\n\032\032frame-source-begin\n"));
 }
 
 void
 annotate_frame_source_file (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-source-file\n"));
+    printf_unfiltered (("\n\032\032frame-source-file\n"));
 }
 
 void
 annotate_frame_source_file_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-source-file-end\n"));
+    printf_unfiltered (("\n\032\032frame-source-file-end\n"));
 }
 
 void
 annotate_frame_source_line (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-source-line\n"));
+    printf_unfiltered (("\n\032\032frame-source-line\n"));
 }
 
 void
 annotate_frame_source_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-source-end\n"));
+    printf_unfiltered (("\n\032\032frame-source-end\n"));
 }
 
 void
 annotate_frame_where (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-where\n"));
+    printf_unfiltered (("\n\032\032frame-where\n"));
 }
 
 void
 annotate_frame_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032frame-end\n"));
+    printf_unfiltered (("\n\032\032frame-end\n"));
 }
 
 void
@@ -560,9 +570,9 @@ annotate_array_section_begin (int idx, s
 {
   if (annotation_level == 2)
     {
-      printf_filtered (("\n\032\032array-section-begin %d "), idx);
+      printf_unfiltered (("\n\032\032array-section-begin %d "), idx);
       print_value_flags (elttype);
-      printf_filtered (("\n"));
+      printf_unfiltered (("\n"));
     }
 }
 
@@ -570,28 +580,28 @@ void
 annotate_elt_rep (unsigned int repcount)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032elt-rep %u\n"), repcount);
+    printf_unfiltered (("\n\032\032elt-rep %u\n"), repcount);
 }
 
 void
 annotate_elt_rep_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032elt-rep-end\n"));
+    printf_unfiltered (("\n\032\032elt-rep-end\n"));
 }
 
 void
 annotate_elt (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032elt\n"));
+    printf_unfiltered (("\n\032\032elt\n"));
 }
 
 void
 annotate_array_section_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered (("\n\032\032array-section-end\n"));
+    printf_unfiltered (("\n\032\032array-section-end\n"));
 }
 
 /* Called when GDB is about to display the prompt.  Used to reset
@@ -614,11 +624,12 @@ breakpoint_changed (struct breakpoint *b
   annotate_breakpoints_invalid ();
 }
 
+void _initialize_annotate ();
 void
-_initialize_annotate (void)
+_initialize_annotate ()
 {
-  gdb::observers::breakpoint_created.attach (breakpoint_changed);
-  gdb::observers::breakpoint_deleted.attach (breakpoint_changed);
-  gdb::observers::breakpoint_modified.attach (breakpoint_changed);
-  gdb::observers::thread_exit.attach (annotate_thread_exited);
+  gdb::observers::breakpoint_created.attach (breakpoint_changed, "annotate");
+  gdb::observers::breakpoint_deleted.attach (breakpoint_changed, "annotate");
+  gdb::observers::breakpoint_modified.attach (breakpoint_changed, "annotate");
+  gdb::observers::thread_exit.attach (annotate_thread_exited, "annotate");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/annotate.h ./gdb/annotate.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/annotate.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/annotate.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Annotation routines for GDB.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -92,8 +92,20 @@ struct annotate_arg_emitter
    character position.
 
    MID_STATEMENT is nonzero if the PC is not at the beginning of that
-   line.  */
-extern void annotate_source_line (struct symtab *s, int line,
+   line.
+
+   The current symtab and line is updated to reflect S and LINE.
+
+   Return true if the annotation was printed and the current symtab and
+   line were updated, otherwise return false, which can happen if the
+   source file for S can't be found, or LINE is out of range.
+
+   This does leave GDB in the weird situation where, even when annotations
+   are on, we only sometimes print the annotation, and only sometimes
+   update the current symtab and line.  However, this particular annotation
+   has behaved this way for some time, and front ends that still use
+   annotations now depend on this behaviour.  */
+extern bool annotate_source_line (struct symtab *s, int line,
 				  int mid_statement, CORE_ADDR pc);
 
 extern void annotate_frame_begin (int, struct gdbarch *, CORE_ADDR);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch32.c ./gdb/arch/aarch32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch32.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/aarch32.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019 Free Software Foundation, Inc.
+/* Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,6 +19,7 @@
 #include "aarch32.h"
 
 #include "../features/arm/arm-core.c"
+#include "../features/arm/arm-tls.c"
 #include "../features/arm/arm-vfpv3.c"
 
 /* See aarch32.h.  */
@@ -26,18 +27,19 @@
 target_desc *
 aarch32_create_target_description ()
 {
-  target_desc *tdesc = allocate_target_description ();
+  target_desc_up tdesc = allocate_target_description ();
 
 #ifndef IN_PROCESS_AGENT
-  set_tdesc_architecture (tdesc, "arm");
+  set_tdesc_architecture (tdesc.get (), "arm");
 #endif
 
   long regnum = 0;
 
-  regnum = create_feature_arm_arm_core (tdesc, regnum);
+  regnum = create_feature_arm_arm_core (tdesc.get (), regnum);
   /* Create a vfpv3 feature, then a blank NEON feature.  */
-  regnum = create_feature_arm_arm_vfpv3 (tdesc, regnum);
-  tdesc_create_feature (tdesc, "org.gnu.gdb.arm.neon");
+  regnum = create_feature_arm_arm_vfpv3 (tdesc.get (), regnum);
+  tdesc_create_feature (tdesc.get (), "org.gnu.gdb.arm.neon");
+  regnum = create_feature_arm_arm_tls (tdesc.get (), regnum);
 
-  return tdesc;
+  return tdesc.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch32.h ./gdb/arch/aarch32.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch32.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/aarch32.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019 Free Software Foundation, Inc.
+/* Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64.c ./gdb/arch/aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/aarch64.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,29 +23,79 @@
 #include "../features/aarch64-fpu.c"
 #include "../features/aarch64-sve.c"
 #include "../features/aarch64-pauth.c"
+#include "../features/aarch64-mte.c"
+#include "../features/aarch64-sme.c"
+#include "../features/aarch64-sme2.c"
+#include "../features/aarch64-tls.c"
 
 /* See arch/aarch64.h.  */
 
 target_desc *
-aarch64_create_target_description (uint64_t vq, bool pauth_p)
+aarch64_create_target_description (const aarch64_features &features)
 {
-  target_desc *tdesc = allocate_target_description ();
+  target_desc_up tdesc = allocate_target_description ();
 
 #ifndef IN_PROCESS_AGENT
-  set_tdesc_architecture (tdesc, "aarch64");
+  set_tdesc_architecture (tdesc.get (), "aarch64");
 #endif
 
   long regnum = 0;
 
-  regnum = create_feature_aarch64_core (tdesc, regnum);
+  regnum = create_feature_aarch64_core (tdesc.get (), regnum);
 
-  if (vq == 0)
-    regnum = create_feature_aarch64_fpu (tdesc, regnum);
+  if (features.vq == 0)
+    regnum = create_feature_aarch64_fpu (tdesc.get (), regnum);
   else
-    regnum = create_feature_aarch64_sve (tdesc, regnum, vq);
+    regnum = create_feature_aarch64_sve (tdesc.get (), regnum, features.vq);
 
-  if (pauth_p)
-    regnum = create_feature_aarch64_pauth (tdesc, regnum);
+  if (features.pauth)
+    regnum = create_feature_aarch64_pauth (tdesc.get (), regnum);
 
-  return tdesc;
+  /* Memory tagging extension registers.  */
+  if (features.mte)
+    regnum = create_feature_aarch64_mte (tdesc.get (), regnum);
+
+  /* TLS registers.  */
+  if (features.tls > 0)
+    regnum = create_feature_aarch64_tls (tdesc.get (), regnum, features.tls);
+
+  if (features.svq)
+    regnum = create_feature_aarch64_sme (tdesc.get (), regnum,
+					 sve_vl_from_vq (features.svq));
+
+  if (features.sme2)
+    regnum = create_feature_aarch64_sme2 (tdesc.get (), regnum);
+
+  return tdesc.release ();
+}
+
+/* See arch/aarch64.h.  */
+
+CORE_ADDR
+aarch64_remove_top_bits (CORE_ADDR pointer, CORE_ADDR mask)
+{
+  /* The VA range select bit is 55.  This bit tells us if we have a
+     kernel-space address or a user-space address.  */
+  bool kernel_address = (pointer & VA_RANGE_SELECT_BIT_MASK) != 0;
+
+  /* Remove the top non-address bits.  */
+  pointer &= ~mask;
+
+  /* Sign-extend if we have a kernel-space address.  */
+  if (kernel_address)
+    pointer |= mask;
+
+  return pointer;
+}
+
+/* See arch/aarch64.h.  */
+
+CORE_ADDR
+aarch64_mask_from_pac_registers (const CORE_ADDR cmask, const CORE_ADDR dmask)
+{
+  /* If the masks differ, default to using the one with the most coverage.  */
+  if (dmask != cmask)
+    return dmask > cmask ? dmask : cmask;
+
+  return cmask;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64.h ./gdb/arch/aarch64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/aarch64.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target-dependent functionality for AArch64.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,12 +22,90 @@
 
 #include "gdbsupport/tdesc.h"
 
-/* Create the aarch64 target description.  A non zero VQ value indicates both
-   the presence of SVE and the Vector Quotient - the number of 128bit chunks in
-   an SVE Z register.  HAS_PAUTH_P indicates the presence of the PAUTH
-   feature.  */
+/* Holds information on what architectural features are available.  This is
+   used to select register sets.  */
+struct aarch64_features
+{
+  /* A non zero VQ value indicates both the presence of SVE and the
+     Vector Quotient - the number of 128-bit chunks in an SVE Z
+     register.
+
+     The maximum value for VQ is 16 (5 bits).  */
+  uint64_t vq = 0;
+  bool pauth = false;
+  bool mte = false;
+
+  /* A positive TLS value indicates the number of TLS registers available.  */
+  uint8_t tls = 0;
+  /* The allowed values for SVQ are the following:
+
+     0 - SME is not supported/available.
+     1 - SME is available, SVL is 16 bytes / 128-bit.
+     2 - SME is available, SVL is 32 bytes / 256-bit.
+     4 - SME is available, SVL is 64 bytes / 512-bit.
+     8 - SME is available, SVL is 128 bytes / 1024-bit.
+     16 - SME is available, SVL is 256 bytes / 2048-bit.
+
+     These use at most 5 bits to represent.  */
+  uint8_t svq = 0;
+
+  /* Whether SME2 is supported.  */
+  bool sme2 = false;
+};
 
-target_desc *aarch64_create_target_description (uint64_t vq, bool has_pauth_p);
+inline bool operator==(const aarch64_features &lhs, const aarch64_features &rhs)
+{
+  return lhs.vq == rhs.vq
+    && lhs.pauth == rhs.pauth
+    && lhs.mte == rhs.mte
+    && lhs.tls == rhs.tls
+    && lhs.svq == rhs.svq
+    && lhs.sme2 == rhs.sme2;
+}
+
+namespace std
+{
+  template<>
+  struct hash<aarch64_features>
+  {
+    std::size_t operator()(const aarch64_features &features) const noexcept
+    {
+      std::size_t h;
+
+      h = features.vq;
+      h = h << 1 | features.pauth;
+      h = h << 1 | features.mte;
+      /* Shift by two bits for now.  We may need to increase this in the future
+	 if more TLS registers get added.  */
+      h = h << 2 | features.tls;
+
+      /* Make sure the SVQ values are within the limits.  */
+      gdb_assert (features.svq >= 0);
+      gdb_assert (features.svq <= 16);
+      h = h << 5 | (features.svq & 0x5);
+
+      /* SME2 feature.  */
+      h = h << 1 | features.sme2;
+      return h;
+    }
+  };
+}
+
+/* Create the aarch64 target description.  */
+
+target_desc *
+  aarch64_create_target_description (const aarch64_features &features);
+
+/* Given a pointer value POINTER and a MASK of non-address bits, remove the
+   non-address bits from the pointer and sign-extend the result if required.
+   The sign-extension is required so we can handle kernel addresses
+   correctly.  */
+CORE_ADDR aarch64_remove_top_bits (CORE_ADDR pointer, CORE_ADDR mask);
+
+/* Given CMASK and DMASK the two PAC mask registers, return the correct PAC
+   mask to use for removing non-address bits from a pointer.  */
+CORE_ADDR
+aarch64_mask_from_pac_registers (const CORE_ADDR cmask, const CORE_ADDR dmask);
 
 /* Register numbers of various important registers.
    Note that on SVE, the Z registers reuse the V register numbers and the V
@@ -58,6 +136,17 @@ enum aarch64_regnum
   AARCH64_LAST_V_ARG_REGNUM = AARCH64_V0_REGNUM + 7
 };
 
+/* Sizes of various AArch64 registers.  */
+#define AARCH64_TLS_REGISTER_SIZE 8
+#define V_REGISTER_SIZE	  16
+
+/* PAC-related constants.  */
+/* Bit 55 is used to select between a kernel-space and user-space address.  */
+#define VA_RANGE_SELECT_BIT_MASK  0x80000000000000ULL
+/* Mask with 1's in bits 55~63, used to remove the top byte of pointers
+   (Top Byte Ignore).  */
+#define AARCH64_TOP_BITS_MASK	  0xff80000000000000ULL
+
 /* Pseudo register base numbers.  */
 #define AARCH64_Q0_REGNUM 0
 #define AARCH64_D0_REGNUM (AARCH64_Q0_REGNUM + AARCH64_D_REGISTER_COUNT)
@@ -68,6 +157,12 @@ enum aarch64_regnum
 
 #define AARCH64_PAUTH_DMASK_REGNUM(pauth_reg_base) (pauth_reg_base)
 #define AARCH64_PAUTH_CMASK_REGNUM(pauth_reg_base) (pauth_reg_base + 1)
+/* The high versions of these masks are used for bare metal/kernel-mode pointer
+   authentication support.  */
+#define AARCH64_PAUTH_DMASK_HIGH_REGNUM(pauth_reg_base) (pauth_reg_base + 2)
+#define AARCH64_PAUTH_CMASK_HIGH_REGNUM(pauth_reg_base) (pauth_reg_base + 3)
+
+/* This size is only meant for Linux, not bare metal.  QEMU exposes 4 masks.  */
 #define AARCH64_PAUTH_REGS_SIZE (16)
 
 #define AARCH64_X_REGS_NUM 31
@@ -77,7 +172,6 @@ enum aarch64_regnum
 #define AARCH64_NUM_REGS AARCH64_FPCR_REGNUM + 1
 #define AARCH64_SVE_NUM_REGS AARCH64_SVE_VG_REGNUM + 1
 
-
 /* There are a number of ways of expressing the current SVE vector size:
 
    VL : Vector Length.
@@ -102,4 +196,38 @@ enum aarch64_regnum
 /* Maximum supported VQ value.  Increase if required.  */
 #define AARCH64_MAX_SVE_VQ  16
 
+/* SME definitions
+
+   Some of these definitions are not found in the Architecture Reference
+   Manual, but we use them so we can keep a similar standard compared to the
+   SVE definitions that the Linux Kernel uses.  Otherwise it can get
+   confusing.
+
+   SVL : Streaming Vector Length.
+	 Although the documentation handles SVL in bits, we do it in
+	 bytes to match what we do for SVE.
+
+	 The streaming vector length dictates the size of the ZA register and
+	 the size of the SVE registers when in streaming mode.
+
+   SVQ : Streaming Vector Quotient.
+	 The number of 128-bit chunks in an SVE Z register or the size of
+	 each dimension of the SME ZA matrix.
+
+   SVG : Streaming Vector Granule.
+	 The number of 64-bit chunks in an SVE Z register or the size of
+	 half a SME ZA matrix dimension.  The SVG definition was added so
+	 we keep a familiar definition when dealing with SVE registers in
+	 streaming mode.  */
+
+/* The total number of tiles.  This is always fixed regardless of the
+   streaming vector length (svl).  */
+#define AARCH64_ZA_TILES_NUM 31
+/* svl limits for SME.  */
+#define AARCH64_SME_MIN_SVL 128
+#define AARCH64_SME_MAX_SVL 2048
+
+/* Size of the SME2 ZT0 register in bytes.  */
+#define AARCH64_SME2_ZT0_SIZE 64
+
 #endif /* ARCH_AARCH64_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-insn.c ./gdb/arch/aarch64-insn.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-insn.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/aarch64-insn.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -22,25 +22,6 @@
 /* Toggle this file's internal debugging dump.  */
 bool aarch64_debug = false;
 
-/* Extract a signed value from a bit field within an instruction
-   encoding.
-
-   INSN is the instruction opcode.
-
-   WIDTH specifies the width of the bit field to extract (in bits).
-
-   OFFSET specifies the least significant bit of the field where bits
-   are numbered zero counting from least to most significant.  */
-
-static int32_t
-extract_signed_bitfield (uint32_t insn, unsigned width, unsigned offset)
-{
-  unsigned shift_l = sizeof (int32_t) * 8 - (offset + width);
-  unsigned shift_r = sizeof (int32_t) * 8 - width;
-
-  return ((int32_t) insn << shift_l) >> shift_r;
-}
-
 /* Determine if specified bits within an instruction opcode matches a
    specific pattern.
 
@@ -74,7 +55,7 @@ aarch64_decode_adr (CORE_ADDR addr, uint
   if (decode_masked_match (insn, 0x1f000000, 0x10000000))
     {
       uint32_t immlo = (insn >> 29) & 0x3;
-      int32_t immhi = extract_signed_bitfield (insn, 19, 5) << 2;
+      int32_t immhi = sbits (insn, 5, 23) * 4;
 
       *is_adrp = (insn >> 31) & 0x1;
       *rd = (insn >> 0) & 0x1f;
@@ -88,12 +69,9 @@ aarch64_decode_adr (CORE_ADDR addr, uint
       else
 	*offset = (immhi | immlo);
 
-      if (aarch64_debug)
-	{
-	  debug_printf ("decode: 0x%s 0x%x %s x%u, #?\n",
-			core_addr_to_string_nz (addr), insn,
-			*is_adrp ?  "adrp" : "adr", *rd);
-	}
+      aarch64_debug_printf ("decode: 0x%s 0x%x %s x%u, #?",
+			    core_addr_to_string_nz (addr), insn,
+			    *is_adrp ?  "adrp" : "adr", *rd);
       return 1;
     }
   return 0;
@@ -118,7 +96,7 @@ aarch64_decode_b (CORE_ADDR addr, uint32
   if (decode_masked_match (insn, 0x7c000000, 0x14000000))
     {
       *is_bl = (insn >> 31) & 0x1;
-      *offset = extract_signed_bitfield (insn, 26, 0) << 2;
+      *offset = sbits (insn, 0, 25) * 4;
 
       if (aarch64_debug)
 	{
@@ -151,7 +129,7 @@ aarch64_decode_bcond (CORE_ADDR addr, ui
   if (decode_masked_match (insn, 0xff000010, 0x54000000))
     {
       *cond = (insn >> 0) & 0xf;
-      *offset = extract_signed_bitfield (insn, 19, 5) << 2;
+      *offset = sbits (insn, 5, 23) * 4;
 
       if (aarch64_debug)
 	{
@@ -186,7 +164,7 @@ aarch64_decode_cb (CORE_ADDR addr, uint3
       *rn = (insn >> 0) & 0x1f;
       *is64 = (insn >> 31) & 0x1;
       *is_cbnz = (insn >> 24) & 0x1;
-      *offset = extract_signed_bitfield (insn, 19, 5) << 2;
+      *offset = sbits (insn, 5, 23) * 4;
 
       if (aarch64_debug)
 	{
@@ -222,7 +200,7 @@ aarch64_decode_tb (CORE_ADDR addr, uint3
       *rt = (insn >> 0) & 0x1f;
       *is_tbnz = (insn >> 24) & 0x1;
       *bit = ((insn >> (31 - 4)) & 0x20) | ((insn >> 19) & 0x1f);
-      *imm = extract_signed_bitfield (insn, 14, 5) << 2;
+      *imm = sbits (insn, 5, 18) * 4;
 
       if (aarch64_debug)
 	{
@@ -267,7 +245,7 @@ aarch64_decode_ldr_literal (CORE_ADDR ad
 	*is64 = (insn >> 30) & 0x1;
 
       *rt = (insn >> 0) & 0x1f;
-      *offset = extract_signed_bitfield (insn, 19, 5) << 2;
+      *offset = sbits (insn, 5, 23) * 4;
 
       if (aarch64_debug)
 	debug_printf ("decode: %s 0x%x %s %s%u, #?\n",
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-insn.h ./gdb/arch/aarch64-insn.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-insn.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/aarch64-insn.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -21,6 +21,32 @@
 
 extern bool aarch64_debug;
 
+/* Print an "aarch64" debug statement.  */
+
+#define aarch64_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (aarch64_debug, "aarch64", fmt, ##__VA_ARGS__)
+
+/* Support routines for instruction parsing.  */
+
+/* Create a mask of X bits.  */
+#define submask(x) ((1L << ((x) + 1)) - 1)
+
+/* Extract the bitfield from OBJ starting at bit ST and ending at bit FN.  */
+#define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
+
+/* Extract bit ST from OBJ.  */
+#define bit(obj,st) (((obj) >> (st)) & 1)
+
+/* Extract the signed bitfield from OBJ starting at bit ST and ending at
+   bit FN.  The result is sign-extended.  */
+#define sbits(obj,st,fn) \
+  ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
+
+/* Prologue analyzer helper macros.  */
+
+/* Is the instruction "bti"?  */
+#define IS_BTI(instruction) ((instruction & 0xffffff3f) == 0xd503241f)
+
 /* List of opcodes that we need for building the jump pad and relocating
    an instruction.  */
 
@@ -40,7 +66,9 @@ enum aarch64_opcodes
   CBNZ            = 0x21000000 | B,
   TBZ             = 0x36000000 | B,
   TBNZ            = 0x37000000 | B,
+  /* BR             1101 0110 0001 1111 0000 00rr rrr0 0000 */
   /* BLR            1101 0110 0011 1111 0000 00rr rrr0 0000 */
+  BR              = 0xd61f0000,
   BLR             = 0xd63f0000,
   /* RET            1101 0110 0101 1111 0000 00rr rrr0 0000 */
   RET             = 0xd65f0000,
@@ -107,6 +135,13 @@ enum aarch64_opcodes
   NOP             = (0 << 5) | HINT,
 };
 
+/* List of useful masks.  */
+enum aarch64_masks
+{
+  /* Used for masking out an Rn argument from an opcode.  */
+  CLEAR_Rn_MASK = 0xfffffc1f,
+};
+
 /* Representation of a general purpose register of the form xN or wN.
 
    This type is used by emitting functions that take registers as operands.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-mte-linux.c ./gdb/arch/aarch64-mte-linux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-mte-linux.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/aarch64-mte-linux.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,133 @@
+/* Common Linux target-dependent functionality for AArch64 MTE
+
+   Copyright (C) 2021-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "arch/aarch64-mte-linux.h"
+
+/* See arch/aarch64-mte-linux.h */
+
+void
+aarch64_mte_pack_tags (gdb::byte_vector &tags)
+{
+  /* Nothing to pack?  */
+  if (tags.empty ())
+    return;
+
+  /* If the tags vector has an odd number of elements, add another
+     zeroed-out element to make it even.  This facilitates packing.  */
+  if ((tags.size () % 2) != 0)
+    tags.emplace_back (0);
+
+  for (int unpacked = 0, packed = 0; unpacked < tags.size ();
+       unpacked += 2, packed++)
+    tags[packed] = (tags[unpacked + 1] << 4) | tags[unpacked];
+
+  /* Now we have half the size.  */
+  tags.resize (tags.size () / 2);
+}
+
+/* See arch/aarch64-mte-linux.h */
+
+void
+aarch64_mte_unpack_tags (gdb::byte_vector &tags, bool skip_first)
+{
+  /* Nothing to unpack?  */
+  if (tags.empty ())
+    return;
+
+  /* An unpacked MTE tags vector will have twice the number of elements
+     compared to an unpacked one.  */
+  gdb::byte_vector unpacked_tags (tags.size () * 2);
+
+  int unpacked = 0, packed = 0;
+
+  if (skip_first)
+    {
+      /* We are not interested in the first unpacked element, just discard
+	 it.  */
+      unpacked_tags[unpacked] = (tags[packed] >> 4) & 0xf;
+      unpacked++;
+      packed++;
+    }
+
+  for (; packed < tags.size (); unpacked += 2, packed++)
+    {
+      unpacked_tags[unpacked] = tags[packed] & 0xf;
+      unpacked_tags[unpacked + 1] = (tags[packed] >> 4) & 0xf;
+    }
+
+  /* Update the original tags vector.  */
+  tags = std::move (unpacked_tags);
+}
+
+/* See arch/aarch64-mte-linux.h */
+
+size_t
+aarch64_mte_get_tag_granules (CORE_ADDR addr, size_t len, size_t granule_size)
+{
+  /* An empty range has 0 tag granules.  */
+  if (len == 0)
+    return 0;
+
+  /* Start address */
+  CORE_ADDR s_addr = align_down (addr, granule_size);
+  /* End address */
+  CORE_ADDR e_addr = align_down (addr + len - 1, granule_size);
+
+  /* We always have at least 1 granule because len is non-zero at this
+     point.  */
+  return 1 + (e_addr - s_addr) / granule_size;
+}
+
+/* See arch/aarch64-mte-linux.h */
+
+CORE_ADDR
+aarch64_mte_make_ltag_bits (CORE_ADDR value)
+{
+  return value & AARCH64_MTE_LOGICAL_MAX_VALUE;
+}
+
+/* See arch/aarch64-mte-linux.h */
+
+CORE_ADDR
+aarch64_mte_make_ltag (CORE_ADDR value)
+{
+  return (aarch64_mte_make_ltag_bits (value)
+	  << AARCH64_MTE_LOGICAL_TAG_START_BIT);
+}
+
+/* See arch/aarch64-mte-linux.h */
+
+CORE_ADDR
+aarch64_mte_set_ltag (CORE_ADDR address, CORE_ADDR tag)
+{
+  /* Remove the existing tag.  */
+  address &= ~aarch64_mte_make_ltag (AARCH64_MTE_LOGICAL_MAX_VALUE);
+
+  /* Return the new tagged address.  */
+  return address | aarch64_mte_make_ltag (tag);
+}
+
+/* See arch/aarch64-mte-linux.h */
+
+CORE_ADDR
+aarch64_mte_get_ltag (CORE_ADDR address)
+{
+  CORE_ADDR ltag_addr = address >> AARCH64_MTE_LOGICAL_TAG_START_BIT;
+  return aarch64_mte_make_ltag_bits (ltag_addr);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-mte-linux.h ./gdb/arch/aarch64-mte-linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-mte-linux.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/aarch64-mte-linux.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,84 @@
+/* Common Linux target-dependent definitions for AArch64 MTE
+
+   Copyright (C) 2021-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ARCH_AARCH64_MTE_LINUX_H
+#define ARCH_AARCH64_MTE_LINUX_H
+
+#include "gdbsupport/common-defs.h"
+
+/* Feature check for Memory Tagging Extension.  */
+#ifndef HWCAP2_MTE
+#define HWCAP2_MTE  (1 << 18)
+#endif
+
+/* The MTE regset consists of a single 64-bit register.  */
+#define AARCH64_LINUX_SIZEOF_MTE 8
+
+/* We have one tag per 16 bytes of memory.  */
+#define AARCH64_MTE_GRANULE_SIZE 16
+#define AARCH64_MTE_TAG_BIT_SIZE 4
+#define AARCH64_MTE_LOGICAL_TAG_START_BIT 56
+#define AARCH64_MTE_LOGICAL_MAX_VALUE 0xf
+
+/* Memory tagging definitions.  */
+#ifndef SEGV_MTEAERR
+# define SEGV_MTEAERR 8
+# define SEGV_MTESERR 9
+#endif
+
+/* Memory tag types for AArch64.  */
+enum class aarch64_memtag_type
+{
+  /* MTE logical tag contained in pointers.  */
+  mte_logical = 0,
+  /* MTE allocation tag stored in memory tag granules.  */
+  mte_allocation
+};
+
+/* Return the number of tag granules in the memory range
+   [ADDR, ADDR + LEN) given GRANULE_SIZE.  */
+extern size_t aarch64_mte_get_tag_granules (CORE_ADDR addr, size_t len,
+					    size_t granule_size);
+
+/* Return the 4-bit tag made from VALUE.  */
+extern CORE_ADDR aarch64_mte_make_ltag_bits (CORE_ADDR value);
+
+/* Return the 4-bit tag that can be OR-ed to an address.  */
+extern CORE_ADDR aarch64_mte_make_ltag (CORE_ADDR value);
+
+/* Helper to set the logical TAG for a 64-bit ADDRESS.
+
+   It is always possible to set the logical tag.  */
+extern CORE_ADDR aarch64_mte_set_ltag (CORE_ADDR address, CORE_ADDR tag);
+
+/* Helper to get the logical tag from a 64-bit ADDRESS.
+
+   It is always possible to get the logical tag.  */
+extern CORE_ADDR aarch64_mte_get_ltag (CORE_ADDR address);
+
+/* Given a TAGS vector containing 1 MTE tag per byte, pack the data as
+   2 tags per byte and resize the vector.  */
+extern void aarch64_mte_pack_tags (gdb::byte_vector &tags);
+
+/* Given a TAGS vector containing 2 MTE tags per byte, unpack the data as
+   1 tag per byte and resize the vector.  If SKIP_FIRST is TRUE, skip the
+   first unpacked element.  Otherwise leave it in the unpacked vector.  */
+extern void aarch64_mte_unpack_tags (gdb::byte_vector &tags, bool skip_first);
+
+#endif /* ARCH_AARCH64_MTE_LINUX_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-scalable-linux.c ./gdb/arch/aarch64-scalable-linux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-scalable-linux.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/aarch64-scalable-linux.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,55 @@
+/* Common Linux arch-specific functionality for AArch64 scalable
+   extensions: SVE and SME.
+
+   Copyright (C) 2023-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "arch/aarch64-scalable-linux.h"
+#include "arch/aarch64.h"
+#include "gdbsupport/byte-vector.h"
+#include "gdbsupport/common-regcache.h"
+
+/* See arch/aarch64-scalable-linux.h  */
+
+bool
+sve_state_is_empty (const struct reg_buffer_common *reg_buf)
+{
+  /* Instead of allocating a buffer with the size of the current vector
+     length, just use a buffer that is big enough for all cases.  */
+  gdb_byte zero_buffer[256];
+
+  /* Zero it out.  */
+  memset (zero_buffer, 0, 256);
+
+  /* Are any of the Z registers set (non-zero) after the first 128 bits?  */
+  for (int i = 0; i < AARCH64_SVE_Z_REGS_NUM; i++)
+    {
+      if (!reg_buf->raw_compare (AARCH64_SVE_Z0_REGNUM + i, zero_buffer,
+				 V_REGISTER_SIZE))
+	return false;
+    }
+
+  /* Are any of the P registers set (non-zero)?  */
+  for (int i = 0; i < AARCH64_SVE_P_REGS_NUM; i++)
+    {
+      if (!reg_buf->raw_compare (AARCH64_SVE_P0_REGNUM + i, zero_buffer, 0))
+	return false;
+    }
+
+  /* Is the FFR register set (non-zero)?  */
+  return reg_buf->raw_compare (AARCH64_SVE_FFR_REGNUM, zero_buffer, 0);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-scalable-linux.h ./gdb/arch/aarch64-scalable-linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/aarch64-scalable-linux.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/aarch64-scalable-linux.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,59 @@
+/* Common AArch64 Linux arch-specific definitions for the scalable
+   extensions: SVE and SME.
+
+   Copyright (C) 2023-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ARCH_AARCH64_SCALABLE_LINUX_H
+#define ARCH_AARCH64_SCALABLE_LINUX_H
+
+#include "gdbsupport/common-defs.h"
+#include "gdbsupport/common-regcache.h"
+
+/* Feature check for Scalable Matrix Extension.  */
+#ifndef HWCAP2_SME
+#define HWCAP2_SME (1 << 23)
+#endif
+
+/* Feature check for Scalable Matrix Extension 2.  */
+#ifndef HWCAP2_SME2
+#define HWCAP2_SME2   (1UL << 37)
+#define HWCAP2_SME2P1 (1UL << 38)
+#endif
+
+/* Streaming mode enabled/disabled bit.  */
+#define SVCR_SM_BIT (1 << 0)
+/* ZA enabled/disabled bit.  */
+#define SVCR_ZA_BIT (1 << 1)
+/* Mask including all valid SVCR bits.  */
+#define SVCR_BIT_MASK (SVCR_SM_BIT | SVCR_ZA_BIT)
+
+/* SVE/SSVE-related constants used for an empty SVE/SSVE register set
+   dumped to a core file.  When SME is supported, either the SVE state or
+   the SSVE state will be empty when it is dumped to a core file.  */
+#define SVE_CORE_DUMMY_SIZE 0x220
+#define SVE_CORE_DUMMY_MAX_SIZE 0x2240
+#define SVE_CORE_DUMMY_VL 0x10
+#define SVE_CORE_DUMMY_MAX_VL 0x100
+#define SVE_CORE_DUMMY_FLAGS 0x0
+#define SVE_CORE_DUMMY_RESERVED 0x0
+
+/* Return TRUE if the SVE state in the register cache REGCACHE
+   is empty (zero).  Return FALSE otherwise.  */
+extern bool sve_state_is_empty (const struct reg_buffer_common *reg_buf);
+
+#endif /* ARCH_AARCH64_SCALABLE_LINUX_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/amd64.c ./gdb/arch/amd64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/amd64.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/amd64.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,9 +25,9 @@
 #include "../features/i386/64bit-core.c"
 #include "../features/i386/64bit-linux.c"
 #include "../features/i386/64bit-mpx.c"
-#include "../features/i386/64bit-pkeys.c"
 #include "../features/i386/64bit-segments.c"
 #include "../features/i386/64bit-sse.c"
+#include "../features/i386/pkeys.c"
 
 #include "../features/i386/x32-core.c"
 
@@ -40,39 +40,40 @@ target_desc *
 amd64_create_target_description (uint64_t xcr0, bool is_x32, bool is_linux,
 				 bool segments)
 {
-  target_desc *tdesc = allocate_target_description ();
+  target_desc_up tdesc = allocate_target_description ();
 
 #ifndef IN_PROCESS_AGENT
-  set_tdesc_architecture (tdesc, is_x32 ? "i386:x64-32" : "i386:x86-64");
+  set_tdesc_architecture (tdesc.get (),
+			  is_x32 ? "i386:x64-32" : "i386:x86-64");
 
   if (is_linux)
-    set_tdesc_osabi (tdesc, "GNU/Linux");
+    set_tdesc_osabi (tdesc.get (), "GNU/Linux");
 #endif
 
   long regnum = 0;
 
   if (is_x32)
-    regnum = create_feature_i386_x32_core (tdesc, regnum);
+    regnum = create_feature_i386_x32_core (tdesc.get (), regnum);
   else
-    regnum = create_feature_i386_64bit_core (tdesc, regnum);
+    regnum = create_feature_i386_64bit_core (tdesc.get (), regnum);
 
-  regnum = create_feature_i386_64bit_sse (tdesc, regnum);
+  regnum = create_feature_i386_64bit_sse (tdesc.get (), regnum);
   if (is_linux)
-    regnum = create_feature_i386_64bit_linux (tdesc, regnum);
+    regnum = create_feature_i386_64bit_linux (tdesc.get (), regnum);
   if (segments)
-    regnum = create_feature_i386_64bit_segments (tdesc, regnum);
+    regnum = create_feature_i386_64bit_segments (tdesc.get (), regnum);
 
   if (xcr0 & X86_XSTATE_AVX)
-    regnum = create_feature_i386_64bit_avx (tdesc, regnum);
+    regnum = create_feature_i386_64bit_avx (tdesc.get (), regnum);
 
   if ((xcr0 & X86_XSTATE_MPX) && !is_x32)
-    regnum = create_feature_i386_64bit_mpx (tdesc, regnum);
+    regnum = create_feature_i386_64bit_mpx (tdesc.get (), regnum);
 
   if (xcr0 & X86_XSTATE_AVX512)
-    regnum = create_feature_i386_64bit_avx512 (tdesc, regnum);
+    regnum = create_feature_i386_64bit_avx512 (tdesc.get (), regnum);
 
-  if ((xcr0 & X86_XSTATE_PKRU) && !is_x32)
-    regnum = create_feature_i386_64bit_pkeys (tdesc, regnum);
+  if (xcr0 & X86_XSTATE_PKRU)
+    regnum = create_feature_i386_pkeys (tdesc.get (), regnum);
 
-  return tdesc;
+  return tdesc.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/amd64.h ./gdb/arch/amd64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/amd64.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/amd64.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arc.c ./gdb/arch/arc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arc.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/arc.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,125 @@
+/* Copyright (C) 2017-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+
+#include "gdbsupport/common-defs.h"
+#include "arc.h"
+#include <stdlib.h>
+#include <unordered_map>
+#include <string>
+
+/* Target description features.  */
+#include "features/arc/v1-core.c"
+#include "features/arc/v1-aux.c"
+#include "features/arc/v2-core.c"
+#include "features/arc/v2-aux.c"
+
+#ifndef GDBSERVER
+#define STATIC_IN_GDB static
+#else
+#define STATIC_IN_GDB
+#endif
+
+STATIC_IN_GDB target_desc_up
+arc_create_target_description (const struct arc_arch_features &features)
+{
+  /* Create a new target description.  */
+  target_desc_up tdesc = allocate_target_description ();
+
+#ifndef IN_PROCESS_AGENT
+  std::string arch_name;
+
+  /* Architecture names here must match the ones in
+     ARCH_INFO_STRUCT in bfd/cpu-arc.c.  */
+  if (features.isa == ARC_ISA_ARCV1 && features.reg_size == 4)
+      arch_name = "arc:ARC700";
+  else if (features.isa == ARC_ISA_ARCV2 && features.reg_size == 4)
+      arch_name = "arc:ARCv2";
+  else
+    {
+      std::string msg = string_printf
+	("Cannot determine architecture: ISA=%d; bitness=%d",
+	 features.isa, 8 * features.reg_size);
+      gdb_assert_not_reached ("%s", msg.c_str ());
+    }
+
+  set_tdesc_architecture (tdesc.get (), arch_name.c_str ());
+#endif
+
+  long regnum = 0;
+
+  switch (features.isa)
+    {
+    case ARC_ISA_ARCV1:
+      regnum = create_feature_arc_v1_core (tdesc.get (), regnum);
+      regnum = create_feature_arc_v1_aux (tdesc.get (), regnum);
+      break;
+    case ARC_ISA_ARCV2:
+      regnum = create_feature_arc_v2_core (tdesc.get (), regnum);
+      regnum = create_feature_arc_v2_aux (tdesc.get (), regnum);
+      break;
+    default:
+      std::string msg = string_printf
+	("Cannot choose target description XML: %d", features.isa);
+      gdb_assert_not_reached ("%s", msg.c_str ());
+    }
+
+  return tdesc;
+}
+
+#ifndef GDBSERVER
+
+/* Wrapper used by std::unordered_map to generate hash for features set.  */
+struct arc_arch_features_hasher
+{
+  std::size_t
+  operator() (const arc_arch_features &features) const noexcept
+  {
+    return features.hash ();
+  }
+};
+
+/* Cache of previously created target descriptions, indexed by the hash
+   of the features set used to create them.  */
+static std::unordered_map<arc_arch_features,
+			  const target_desc_up,
+			  arc_arch_features_hasher> arc_tdesc_cache;
+
+/* See arch/arc.h.  */
+
+const target_desc *
+arc_lookup_target_description (const struct arc_arch_features &features)
+{
+  /* Lookup in the cache first.  If found, return the pointer from the
+     "target_desc_up" type which is a "unique_ptr".  This should be fine
+     as the "arc_tdesc_cache" will persist until GDB terminates.  */
+  const auto it = arc_tdesc_cache.find (features);
+  if (it != arc_tdesc_cache.end ())
+    return it->second.get ();
+
+  target_desc_up tdesc = arc_create_target_description (features);
+
+
+  /* Add to the cache, and return a pointer borrowed from the
+     target_desc_up.  This is safe as the cache (and the pointers
+     contained within it) are not deleted until GDB exits.  */
+  target_desc *ptr = tdesc.get ();
+  arc_tdesc_cache.emplace (features, std::move (tdesc));
+  return ptr;
+}
+
+#endif /* !GDBSERVER */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arc.h ./gdb/arch/arc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arc.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/arc.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,87 @@
+/* Copyright (C) 2017-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ARCH_ARC_H
+#define ARCH_ARC_H
+
+#include "gdbsupport/tdesc.h"
+
+/* Supported ARC ISAs.  */
+enum arc_isa
+{
+  ARC_ISA_ARCV1 = 1,  /* a.k.a. ARCompact (ARC600, ARC700)  */
+  ARC_ISA_ARCV2	      /* such as ARC EM and ARC HS  */
+};
+
+struct arc_arch_features
+{
+  arc_arch_features (int reg_size, arc_isa isa)
+    : reg_size (reg_size), isa (isa)
+  {}
+
+  /* Register size in bytes.  Possible values are 4, and 8.  A 0 indicates
+     an uninitialised value.  */
+  const int reg_size;
+
+  /* See ARC_ISA enum.  */
+  const arc_isa isa;
+
+  /* Equality operator.  */
+  bool operator== (const struct arc_arch_features &rhs) const
+  {
+    return (reg_size == rhs.reg_size && isa == rhs.isa);
+  }
+
+  /* Inequality operator.  */
+  bool operator!= (const struct arc_arch_features &rhs) const
+  {
+    return !(*this == rhs);
+  }
+
+  /* Used by std::unordered_map to hash the feature sets.  The hash is
+     calculated in the manner below:
+     REG_SIZE |  ISA
+      5-bits  | 4-bits  */
+
+  std::size_t hash () const noexcept
+  {
+    std::size_t val = ((reg_size & 0x1f) << 8 | (isa & 0xf) << 0);
+    return val;
+  }
+};
+
+#ifdef GDBSERVER
+
+/* Create and return a target description that is compatible with FEATURES.
+   The only external client of this must be the gdbserver which manipulates
+   the returned data.  */
+
+target_desc_up arc_create_target_description
+	(const struct arc_arch_features &features);
+
+#else
+
+/* Lookup the cache for a target description matching the FEATURES.
+   If nothing is found, then create one and return it.  */
+
+const target_desc *arc_lookup_target_description
+	(const struct arc_arch_features &features);
+
+#endif /* GDBSERVER */
+
+
+#endif /* ARCH_ARC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm.c ./gdb/arch/arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/arm.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GDB on ARM systems.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,11 +22,14 @@
 #include "arm.h"
 
 #include "../features/arm/arm-core.c"
+#include "../features/arm/arm-tls.c"
 #include "../features/arm/arm-vfpv2.c"
 #include "../features/arm/arm-vfpv3.c"
 #include "../features/arm/xscale-iwmmxt.c"
 #include "../features/arm/arm-m-profile.c"
 #include "../features/arm/arm-m-profile-with-fpa.c"
+#include "../features/arm/arm-m-profile-mve.c"
+#include "../features/arm/arm-m-system.c"
 
 /* See arm.h.  */
 
@@ -42,17 +45,6 @@ thumb_insn_size (unsigned short inst1)
 /* See arm.h.  */
 
 int
-bitcount (unsigned long val)
-{
-  int nbits;
-  for (nbits = 0; val != 0; nbits++)
-    val &= val - 1;		/* Delete rightmost 1-bit in val.  */
-  return nbits;
-}
-
-/* See arm.h.  */
-
-int
 condition_true (unsigned long cond, unsigned long status_reg)
 {
   if (cond == INST_AL || cond == INST_NV)
@@ -130,7 +122,7 @@ arm_instruction_changes_pc (uint32_t thi
       case 0xd:
       case 0xe:
 	/* Coprocessor register transfer.  */
-        if (bits (this_instr, 12, 15) == 15)
+	if (bits (this_instr, 12, 15) == 15)
 	  error (_("Invalid update to pc in instruction"));
 	return 0;
       default:
@@ -161,7 +153,7 @@ arm_instruction_changes_pc (uint32_t thi
 	    return 0;
 	  }
 	/* Data processing instruction.  */
-	/* Fall through.  */
+	[[fallthrough]];
 
       case 0x1:
 	if (bits (this_instr, 12, 15) == 15)
@@ -202,7 +194,7 @@ arm_instruction_changes_pc (uint32_t thi
 	return 0;
 
       default:
-	internal_error (__FILE__, __LINE__, _("bad value in switch"));
+	internal_error (_("bad value in switch"));
       }
 }
 
@@ -330,7 +322,7 @@ thumb2_instruction_changes_pc (unsigned
 /* See arm.h.  */
 
 unsigned long
-shifted_reg_val (struct regcache *regcache, unsigned long inst,
+shifted_reg_val (reg_buffer_common *regcache, unsigned long inst,
 		 int carry, unsigned long pc_val, unsigned long status_reg)
 {
   unsigned long res, shift;
@@ -383,20 +375,20 @@ shifted_reg_val (struct regcache *regcac
 /* See arch/arm.h.  */
 
 target_desc *
-arm_create_target_description (arm_fp_type fp_type)
+arm_create_target_description (arm_fp_type fp_type, bool tls)
 {
-  target_desc *tdesc = allocate_target_description ();
+  target_desc_up tdesc = allocate_target_description ();
 
 #ifndef IN_PROCESS_AGENT
   if (fp_type == ARM_FP_TYPE_IWMMXT)
-    set_tdesc_architecture (tdesc, "iwmmxt");
+    set_tdesc_architecture (tdesc.get (), "iwmmxt");
   else
-    set_tdesc_architecture (tdesc, "arm");
+    set_tdesc_architecture (tdesc.get (), "arm");
 #endif
 
   long regnum = 0;
 
-  regnum = create_feature_arm_arm_core (tdesc, regnum);
+  regnum = create_feature_arm_arm_core (tdesc.get (), regnum);
 
   switch (fp_type)
     {
@@ -404,22 +396,25 @@ arm_create_target_description (arm_fp_ty
       break;
 
     case ARM_FP_TYPE_VFPV2:
-      regnum = create_feature_arm_arm_vfpv2 (tdesc, regnum);
+      regnum = create_feature_arm_arm_vfpv2 (tdesc.get (), regnum);
       break;
 
     case ARM_FP_TYPE_VFPV3:
-      regnum = create_feature_arm_arm_vfpv3 (tdesc, regnum);
+      regnum = create_feature_arm_arm_vfpv3 (tdesc.get (), regnum);
       break;
 
     case ARM_FP_TYPE_IWMMXT:
-      regnum = create_feature_arm_xscale_iwmmxt (tdesc, regnum);
+      regnum = create_feature_arm_xscale_iwmmxt (tdesc.get (), regnum);
       break;
 
     default:
       error (_("Invalid Arm FP type: %d"), fp_type);
     }
 
-  return tdesc;
+  if (tls)
+    regnum = create_feature_arm_arm_tls (tdesc.get (), regnum);
+
+  return tdesc.release ();
 }
 
 /* See arch/arm.h.  */
@@ -427,7 +422,7 @@ arm_create_target_description (arm_fp_ty
 target_desc *
 arm_create_mprofile_target_description (arm_m_profile_type m_type)
 {
-  target_desc *tdesc = allocate_target_description ();
+  target_desc *tdesc = allocate_target_description ().release ();
 
 #ifndef IN_PROCESS_AGENT
   set_tdesc_architecture (tdesc, "arm");
@@ -450,6 +445,17 @@ arm_create_mprofile_target_description (
       regnum = create_feature_arm_arm_m_profile_with_fpa (tdesc, regnum);
       break;
 
+    case ARM_M_TYPE_MVE:
+      regnum = create_feature_arm_arm_m_profile (tdesc, regnum);
+      regnum = create_feature_arm_arm_vfpv2 (tdesc, regnum);
+      regnum = create_feature_arm_arm_m_profile_mve (tdesc, regnum);
+      break;
+
+    case ARM_M_TYPE_SYSTEM:
+      regnum = create_feature_arm_arm_m_profile (tdesc, regnum);
+      regnum = create_feature_arm_arm_m_system (tdesc, regnum);
+      break;
+
     default:
       error (_("Invalid Arm M type: %d"), m_type);
     }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm-get-next-pcs.c ./gdb/arch/arm-get-next-pcs.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm-get-next-pcs.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/arm-get-next-pcs.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common code for ARM software single stepping support.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,6 +22,7 @@
 #include "gdbsupport/common-regcache.h"
 #include "arm.h"
 #include "arm-get-next-pcs.h"
+#include "count-one-bits.h"
 
 /* See arm-get-next-pcs.h.  */
 
@@ -31,7 +32,7 @@ arm_get_next_pcs_ctor (struct arm_get_ne
 		       int byte_order,
 		       int byte_order_for_code,
 		       int has_thumb2_breakpoint,
-		       struct regcache *regcache)
+		       reg_buffer_common *regcache)
 {
   self->ops = ops;
   self->byte_order = byte_order;
@@ -76,7 +77,7 @@ thumb_deal_with_atomic_sequence_raw (str
 
   loc += 2;
   if (!((insn1 & 0xfff0) == 0xe850
-        || ((insn1 & 0xfff0) == 0xe8d0 && (insn2 & 0x00c0) == 0x0040)))
+	|| ((insn1 & 0xfff0) == 0xe8d0 && (insn2 & 0x00c0) == 0x0040)))
     return {};
 
   /* Assume that no atomic sequence is longer than "atomic_sequence_length"
@@ -214,20 +215,20 @@ arm_deal_with_atomic_sequence_raw (struc
       loc += 4;
 
       /* Assume that there is at most one conditional branch in the atomic
-         sequence.  If a conditional branch is found, put a breakpoint in
-         its destination address.  */
+	 sequence.  If a conditional branch is found, put a breakpoint in
+	 its destination address.  */
       if (bits (insn, 24, 27) == 0xa)
 	{
-          if (last_breakpoint > 0)
-            return {}; /* More than one conditional branch found, fallback
+	  if (last_breakpoint > 0)
+	    return {}; /* More than one conditional branch found, fallback
 			  to the standard single-step code.  */
 
 	  breaks[1] = BranchDest (loc - 4, insn);
 	  last_breakpoint++;
-        }
+	}
 
       /* We do not support atomic sequences that use any *other* instructions
-         but conditional branches to change the PC.  Fall back to standard
+	 but conditional branches to change the PC.  Fall back to standard
 	 code to avoid losing control of execution.  */
       else if (arm_instruction_changes_pc (insn))
 	return {};
@@ -267,12 +268,12 @@ thumb_get_next_pcs_raw (struct arm_get_n
 {
   int byte_order = self->byte_order;
   int byte_order_for_code = self->byte_order_for_code;
+  reg_buffer_common *regcache = self->regcache;
   CORE_ADDR pc = regcache_read_pc (self->regcache);
   unsigned long pc_val = ((unsigned long) pc) + 4;	/* PC after prefetch */
   unsigned short inst1;
   CORE_ADDR nextpc = pc + 2;		/* Default is next instruction.  */
   ULONGEST status, itstate;
-  struct regcache *regcache = self->regcache;
   std::vector<CORE_ADDR> next_pcs;
 
   nextpc = MAKE_THUMB_ADDR (nextpc);
@@ -407,9 +408,9 @@ thumb_get_next_pcs_raw (struct arm_get_n
       CORE_ADDR sp;
 
       /* Fetch the saved PC from the stack.  It's stored above
-         all of the other registers.  */
-      unsigned long offset = bitcount (bits (inst1, 0, 7))
-			     * ARM_INT_REGISTER_SIZE;
+	 all of the other registers.  */
+      unsigned long offset
+	= count_one_bits (bits (inst1, 0, 7)) * ARM_INT_REGISTER_SIZE;
       sp = regcache_raw_get_unsigned (regcache, ARM_SP_REGNUM);
       nextpc = self->ops->read_mem_uint (sp + offset, 4, byte_order);
     }
@@ -496,7 +497,7 @@ thumb_get_next_pcs_raw (struct arm_get_n
 	      /* LDMIA or POP */
 	      if (!bit (inst2, 15))
 		load_pc = 0;
-	      offset = bitcount (inst2) * 4 - 4;
+	      offset = count_one_bits (inst2) * 4 - 4;
 	    }
 	  else if (!bit (inst1, 7) && bit (inst1, 8))
 	    {
@@ -652,8 +653,8 @@ arm_get_next_pcs_raw (struct arm_get_nex
   unsigned long this_instr = 0;
   unsigned long status;
   CORE_ADDR nextpc;
-  struct regcache *regcache = self->regcache;
-  CORE_ADDR pc = regcache_read_pc (self->regcache);
+  reg_buffer_common *regcache = self->regcache;
+  CORE_ADDR pc = regcache_read_pc (regcache);
   std::vector<CORE_ADDR> next_pcs;
 
   pc_val = (unsigned long) pc;
@@ -678,7 +679,7 @@ arm_get_next_pcs_raw (struct arm_get_nex
       case 0xd:
       case 0xe:
 	/* Coprocessor register transfer.  */
-        if (bits (this_instr, 12, 15) == 15)
+	if (bits (this_instr, 12, 15) == 15)
 	  error (_("Invalid update to pc in instruction"));
 	break;
       }
@@ -864,7 +865,7 @@ arm_get_next_pcs_raw (struct arm_get_nex
 		    {
 		      /* up */
 		      unsigned long reglist = bits (this_instr, 0, 14);
-		      offset = bitcount (reglist) * 4;
+		      offset = count_one_bits_l (reglist) * 4;
 		      if (bit (this_instr, 24))		/* pre */
 			offset += 4;
 		    }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm-get-next-pcs.h ./gdb/arch/arm-get-next-pcs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm-get-next-pcs.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/arm-get-next-pcs.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common code for ARM software single stepping support.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -24,6 +24,7 @@
 
 /* Forward declaration.  */
 struct arm_get_next_pcs;
+struct reg_buffer_common;
 
 /* get_next_pcs operations.  */
 struct arm_get_next_pcs_ops
@@ -50,7 +51,7 @@ struct arm_get_next_pcs
      not.  */
   int has_thumb2_breakpoint;
   /* Registry cache.  */
-  struct regcache *regcache;
+  reg_buffer_common *regcache;
 };
 
 /* Initialize arm_get_next_pcs.  */
@@ -59,7 +60,7 @@ void arm_get_next_pcs_ctor (struct arm_g
 			    int byte_order,
 			    int byte_order_for_code,
 			    int has_thumb2_breakpoint,
-			    struct regcache *regcache);
+			    reg_buffer_common *regcache);
 
 /* Find the next possible PCs after the current instruction executes.  */
 std::vector<CORE_ADDR> arm_get_next_pcs (struct arm_get_next_pcs *self);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm.h ./gdb/arch/arm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/arm.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common target dependent code for GDB on ARM systems.
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,6 +21,19 @@
 
 #include "gdbsupport/tdesc.h"
 
+/* Prologue helper macros for ARMv8.1-m PACBTI.  */
+#define IS_PAC(instruction)	(instruction == 0xf3af801d)
+#define IS_PACBTI(instruction)	(instruction == 0xf3af800d)
+#define IS_BTI(instruction)	(instruction == 0xf3af800f)
+#define IS_PACG(instruction)	((instruction & 0xfff0f0f0) == 0xfb60f000)
+#define IS_AUT(instruction)	(instruction == 0xf3af802d)
+#define IS_AUTG(instruction)	((instruction & 0xfff00ff0) == 0xfb500f00)
+
+/* DWARF register numbers according to the AADWARF32 document.  */
+enum arm_dwarf_regnum {
+  ARM_DWARF_RA_AUTH_CODE = 143
+};
+
 /* Register numbers of various important registers.  */
 
 enum gdb_regnum {
@@ -31,6 +44,7 @@ enum gdb_regnum {
   ARM_SP_REGNUM = 13,		/* Contains address of top of stack */
   ARM_LR_REGNUM = 14,		/* address to return to from a function call */
   ARM_PC_REGNUM = 15,		/* Contains program counter */
+  /* F0..F7 are the fp registers for the (obsolete) FPA architecture.  */
   ARM_F0_REGNUM = 16,		/* first floating point register */
   ARM_F3_REGNUM = 19,		/* last floating point argument register */
   ARM_F7_REGNUM = 23, 		/* last floating point register */
@@ -49,17 +63,25 @@ enum gdb_regnum {
   ARM_D31_REGNUM = ARM_D0_REGNUM + 31,
   ARM_FPSCR_REGNUM,
 
-  ARM_NUM_REGS,
-
   /* Other useful registers.  */
   ARM_FP_REGNUM = 11,		/* Frame register in ARM code, if used.  */
   THUMB_FP_REGNUM = 7,		/* Frame register in Thumb code, if used.  */
-  ARM_NUM_ARG_REGS = 4, 
   ARM_LAST_ARG_REGNUM = ARM_A4_REGNUM,
-  ARM_NUM_FP_ARG_REGS = 4,
   ARM_LAST_FP_ARG_REGNUM = ARM_F3_REGNUM
 };
 
+/* Register count constants.  */
+enum arm_register_counts {
+  /* Number of Q registers for MVE.  */
+  ARM_MVE_NUM_Q_REGS = 8,
+  /* Number of argument registers.  */
+  ARM_NUM_ARG_REGS = 4,
+  /* Number of floating point argument registers.  */
+  ARM_NUM_FP_ARG_REGS = 4,
+  /* Number of registers (old, defined as ARM_FPSCR_REGNUM + 1.  */
+  ARM_NUM_REGS = ARM_FPSCR_REGNUM + 1
+};
+
 /* Enum describing the different kinds of breakpoints.  */
 enum arm_breakpoint_kinds
 {
@@ -82,9 +104,25 @@ enum arm_m_profile_type {
    ARM_M_TYPE_M_PROFILE,
    ARM_M_TYPE_VFP_D16,
    ARM_M_TYPE_WITH_FPA,
+   ARM_M_TYPE_MVE,
+   ARM_M_TYPE_SYSTEM,
    ARM_M_TYPE_INVALID
 };
 
+/* System control registers accessible through an addresses.  */
+enum system_register_address : CORE_ADDR
+{
+  /* M-profile Floating-Point Context Control Register address, defined in
+     ARMv7-M (Section B3.2.2) and ARMv8-M (Section D1.2.99) reference
+     manuals.  */
+  FPCCR = 0xe000ef34,
+
+  /* M-profile Floating-Point Context Address Register address, defined in
+     ARMv7-M (Section B3.2.2) and ARMv8-M (Section D1.2.98) reference
+     manuals.  */
+  FPCAR = 0xe000ef38
+};
+
 /* Instruction condition field values.  */
 #define INST_EQ		0x0
 #define INST_NE		0x1
@@ -150,7 +188,7 @@ enum arm_m_profile_type {
   ((CORE_ADDR) (((unsigned long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
 
 /* Forward declaration.  */
-struct regcache;
+struct reg_buffer_common;
 
 /* Return the size in bytes of the complete Thumb instruction whose
    first halfword is INST1.  */
@@ -159,9 +197,6 @@ int thumb_insn_size (unsigned short inst
 /* Returns true if the condition evaluates to true.  */
 int condition_true (unsigned long cond, unsigned long status_reg);
 
-/* Return number of 1-bits in VAL.  */
-int bitcount (unsigned long val);
-
 /* Return 1 if THIS_INSTR might change control flow, 0 otherwise.  */
 int arm_instruction_changes_pc (uint32_t this_instr);
 
@@ -178,7 +213,7 @@ int thumb_advance_itstate (unsigned int
 
 /* Decode shifted register value.  */
 
-unsigned long shifted_reg_val (struct regcache *regcache,
+unsigned long shifted_reg_val (reg_buffer_common *regcache,
 			       unsigned long inst,
 			       int carry,
 			       unsigned long pc_val,
@@ -186,7 +221,7 @@ unsigned long shifted_reg_val (struct re
 
 /* Create an Arm target description with the given FP hardware type.  */
 
-target_desc *arm_create_target_description (arm_fp_type fp_type);
+target_desc *arm_create_target_description (arm_fp_type fp_type, bool tls);
 
 /* Create an Arm M-profile target description with the given hardware type.  */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm-linux.c ./gdb/arch/arm-linux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm-linux.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/arm-linux.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GNU/Linux on ARM systems.
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm-linux.h ./gdb/arch/arm-linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/arm-linux.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/arm-linux.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GNU/Linux on ARM systems.
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/csky.c ./gdb/arch/csky.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/csky.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/csky.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,38 @@
+/* Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "gdbsupport/common-defs.h"
+#include "csky.h"
+#include <stdlib.h>
+
+#include "../features/cskyv2-linux.c"
+
+target_desc_up
+csky_create_target_description (void)
+{
+  /* Now we should create a new target description.  */
+  target_desc_up tdesc = allocate_target_description ();
+
+#ifndef IN_PROCESS_AGENT
+  std::string arch_name = "csky";
+  set_tdesc_architecture (tdesc.get (), arch_name.c_str ());
+#endif
+
+  create_feature_cskyv2_linux (tdesc.get (), 0);
+
+  return tdesc;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/csky.h ./gdb/arch/csky.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/csky.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/csky.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,29 @@
+/* Common target-dependent functionality for CSKY
+
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ARCH_CSKY_H
+#define ARCH_CSKy_H
+
+#include "gdbsupport/tdesc.h"
+
+/* Used for gdbserver.  */
+
+target_desc_up csky_create_target_description (void);
+
+#endif /* ARCH_CSKY_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/i386.c ./gdb/arch/i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/i386.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/i386.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,47 +27,47 @@
 #include "../features/i386/32bit-avx.c"
 #include "../features/i386/32bit-avx512.c"
 #include "../features/i386/32bit-mpx.c"
-#include "../features/i386/32bit-pkeys.c"
 #include "../features/i386/32bit-segments.c"
+#include "../features/i386/pkeys.c"
 
 /* Create i386 target descriptions according to XCR0.  */
 
 target_desc *
 i386_create_target_description (uint64_t xcr0, bool is_linux, bool segments)
 {
-  target_desc *tdesc = allocate_target_description ();
+  target_desc_up tdesc = allocate_target_description ();
 
 #ifndef IN_PROCESS_AGENT
-  set_tdesc_architecture (tdesc, "i386");
+  set_tdesc_architecture (tdesc.get (), "i386");
   if (is_linux)
-    set_tdesc_osabi (tdesc, "GNU/Linux");
+    set_tdesc_osabi (tdesc.get (), "GNU/Linux");
 #endif
 
   long regnum = 0;
 
   if (xcr0 & X86_XSTATE_X87)
-    regnum = create_feature_i386_32bit_core (tdesc, regnum);
+    regnum = create_feature_i386_32bit_core (tdesc.get (), regnum);
 
   if (xcr0 & X86_XSTATE_SSE)
-    regnum = create_feature_i386_32bit_sse (tdesc, regnum);
+    regnum = create_feature_i386_32bit_sse (tdesc.get (), regnum);
 
   if (is_linux)
-    regnum = create_feature_i386_32bit_linux (tdesc, regnum);
+    regnum = create_feature_i386_32bit_linux (tdesc.get (), regnum);
 
   if (segments)
-    regnum = create_feature_i386_32bit_segments (tdesc, regnum);
+    regnum = create_feature_i386_32bit_segments (tdesc.get (), regnum);
 
   if (xcr0 & X86_XSTATE_AVX)
-    regnum = create_feature_i386_32bit_avx (tdesc, regnum);
+    regnum = create_feature_i386_32bit_avx (tdesc.get (), regnum);
 
   if (xcr0 & X86_XSTATE_MPX)
-    regnum = create_feature_i386_32bit_mpx (tdesc, regnum);
+    regnum = create_feature_i386_32bit_mpx (tdesc.get (), regnum);
 
   if (xcr0 & X86_XSTATE_AVX512)
-    regnum = create_feature_i386_32bit_avx512 (tdesc, regnum);
+    regnum = create_feature_i386_32bit_avx512 (tdesc.get (), regnum);
 
   if (xcr0 & X86_XSTATE_PKRU)
-    regnum = create_feature_i386_32bit_pkeys (tdesc, regnum);
+    regnum = create_feature_i386_pkeys (tdesc.get (), regnum);
 
-  return tdesc;
+  return tdesc.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/i386.h ./gdb/arch/i386.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/i386.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/i386.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/loongarch.c ./gdb/arch/loongarch.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/loongarch.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/loongarch.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,107 @@
+/* Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "gdbsupport/common-defs.h"
+#include "loongarch.h"
+#include <stdlib.h>
+#include <unordered_map>
+
+/* Target description features.  */
+
+#include "../features/loongarch/base32.c"
+#include "../features/loongarch/base64.c"
+#include "../features/loongarch/fpu.c"
+
+#ifndef GDBSERVER
+#define STATIC_IN_GDB static
+#else
+#define STATIC_IN_GDB
+#endif
+
+STATIC_IN_GDB target_desc_up
+loongarch_create_target_description (const struct loongarch_gdbarch_features features)
+{
+  /* Now we should create a new target description.  */
+  target_desc_up tdesc = allocate_target_description ();
+
+  std::string arch_name = "loongarch";
+
+  if (features.xlen == 4)
+    arch_name.append ("32");
+  else if (features.xlen == 8)
+    arch_name.append ("64");
+
+  if (features.fputype == SINGLE_FLOAT)
+    arch_name.append ("f");
+  else if (features.fputype == DOUBLE_FLOAT)
+    arch_name.append ("d");
+
+  set_tdesc_architecture (tdesc.get (), arch_name.c_str ());
+
+  long regnum = 0;
+
+  /* For now we only support creating 32-bit or 64-bit x-registers.  */
+  if (features.xlen == 4)
+    regnum = create_feature_loongarch_base32 (tdesc.get (), regnum);
+  else if (features.xlen == 8)
+    regnum = create_feature_loongarch_base64 (tdesc.get (), regnum);
+
+  /* For now we only support creating single float and double float.  */
+  regnum = create_feature_loongarch_fpu (tdesc.get (), regnum);
+
+  return tdesc;
+}
+
+#ifndef GDBSERVER
+
+/* Wrapper used by std::unordered_map to generate hash for feature set.  */
+struct loongarch_gdbarch_features_hasher
+{
+  std::size_t
+  operator() (const loongarch_gdbarch_features &features) const noexcept
+  {
+    return features.hash ();
+  }
+};
+
+/* Cache of previously seen target descriptions, indexed by the feature set
+   that created them.  */
+static std::unordered_map<loongarch_gdbarch_features,
+			  const target_desc_up,
+			  loongarch_gdbarch_features_hasher> loongarch_tdesc_cache;
+
+const target_desc *
+loongarch_lookup_target_description (const struct loongarch_gdbarch_features features)
+{
+  /* Lookup in the cache.  If we find it then return the pointer out of
+     the target_desc_up (which is a unique_ptr).  This is safe as the
+     loongarch_tdesc_cache will exist until GDB exits.  */
+  const auto it = loongarch_tdesc_cache.find (features);
+  if (it != loongarch_tdesc_cache.end ())
+    return it->second.get ();
+
+  target_desc_up tdesc (loongarch_create_target_description (features));
+
+  /* Add to the cache, and return a pointer borrowed from the
+     target_desc_up.  This is safe as the cache (and the pointers
+     contained within it) are not deleted until GDB exits.  */
+  target_desc *ptr = tdesc.get ();
+  loongarch_tdesc_cache.emplace (features, std::move (tdesc));
+  return ptr;
+}
+
+#endif /* !GDBSERVER */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/loongarch.h ./gdb/arch/loongarch.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/loongarch.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/loongarch.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,118 @@
+/* Common target-dependent functionality for LoongArch
+
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ARCH_LOONGARCH_H
+#define ARCH_LOONGARCH_H
+
+#include "gdbsupport/tdesc.h"
+
+/* Register numbers of various important registers.  */
+enum loongarch_regnum
+{
+  LOONGARCH_RA_REGNUM = 1,		/* Return Address.  */
+  LOONGARCH_SP_REGNUM = 3,		/* Stack Pointer.  */
+  LOONGARCH_A0_REGNUM = 4,		/* First Argument/Return Value.  */
+  LOONGARCH_A7_REGNUM = 11,		/* Seventh Argument/Syscall Number.  */
+  LOONGARCH_FP_REGNUM = 22,		/* Frame Pointer.  */
+  LOONGARCH_ORIG_A0_REGNUM = 32,	/* Syscall's original arg0.  */
+  LOONGARCH_PC_REGNUM = 33,		/* Program Counter.  */
+  LOONGARCH_BADV_REGNUM = 34,		/* Bad Vaddr for Addressing Exception.  */
+  LOONGARCH_LINUX_NUM_GREGSET = 45,	/* 32 GPR, ORIG_A0, PC, BADV, RESERVED 10.  */
+  LOONGARCH_ARG_REGNUM = 8,            /* r4-r11: general-purpose argument registers.
+					  f0-f7: floating-point argument registers.  */
+  LOONGARCH_FIRST_FP_REGNUM = LOONGARCH_LINUX_NUM_GREGSET,
+  LOONGARCH_LINUX_NUM_FPREGSET = 32,
+  LOONGARCH_FIRST_FCC_REGNUM = LOONGARCH_FIRST_FP_REGNUM + LOONGARCH_LINUX_NUM_FPREGSET,
+  LOONGARCH_LINUX_NUM_FCC = 8,
+  LOONGARCH_FCSR_REGNUM = LOONGARCH_FIRST_FCC_REGNUM + LOONGARCH_LINUX_NUM_FCC,
+};
+
+enum loongarch_fputype
+{
+  SINGLE_FLOAT = 1,
+  DOUBLE_FLOAT = 2,
+};
+
+/* The set of LoongArch architectural features that we track that impact how
+   we configure the actual gdbarch instance.  We hold one of these in the
+   gdbarch_tdep structure, and use it to distinguish between different
+   LoongArch gdbarch instances.
+
+   The information in here ideally comes from the target description,
+   however, if the target doesn't provide a target description then we will
+   create a default target description by first populating one of these
+   based on what we know about the binary being executed, and using that to
+   drive default target description creation.  */
+
+struct loongarch_gdbarch_features
+{
+  /* The size of the x-registers in bytes.  This is either 4 (loongarch32)
+     or 8 (loongarch64).  No other value is valid.  Initialise to the invalid
+     0 value so we can spot if one of these is used uninitialised.  */
+  int xlen = 0;
+
+  /* The type of floating-point.  This is either 1 (single float) or 2
+     (double float).  No other value is valid.  Initialise to the invalid
+     0 value so we can spot if one of these is used uninitialised.  */
+  int fputype = 0;
+
+  /* Equality operator.  */
+  bool operator== (const struct loongarch_gdbarch_features &rhs) const
+  {
+    return (xlen == rhs.xlen);
+  }
+
+  /* Inequality operator.  */
+  bool operator!= (const struct loongarch_gdbarch_features &rhs) const
+  {
+    return !((*this) == rhs);
+  }
+
+  /* Used by std::unordered_map to hash feature sets.  */
+  std::size_t hash () const noexcept
+  {
+    std::size_t val = (xlen & 0x1f) << 5;
+    return val;
+  }
+};
+
+#ifdef GDBSERVER
+
+/* Create and return a target description that is compatible with FEATURES.
+   This is only used directly from the gdbserver where the created target
+   description is modified after it is return.  */
+
+target_desc_up loongarch_create_target_description
+	(const struct loongarch_gdbarch_features features);
+
+#else
+
+/* Lookup an already existing target description matching FEATURES, or
+   create a new target description if this is the first time we have seen
+   FEATURES.  For the same FEATURES the same target_desc is always
+   returned.  This is important when trying to lookup gdbarch objects as
+   GDBARCH_LIST_LOOKUP_BY_INFO performs a pointer comparison on target
+   descriptions to find candidate gdbarch objects.  */
+
+const target_desc *loongarch_lookup_target_description
+	(const struct loongarch_gdbarch_features features);
+
+#endif /* GDBSERVER */
+
+#endif /* ARCH_LOONGARCH_H  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/ppc-linux-common.c ./gdb/arch/ppc-linux-common.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/ppc-linux-common.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/ppc-linux-common.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GNU/Linux on PPC systems.
 
-   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -46,7 +46,7 @@ ppc_linux_has_isa205 (CORE_ADDR hwcap)
 const struct target_desc *
 ppc_linux_match_description (struct ppc_linux_features features)
 {
-  struct target_desc *tdesc = NULL;
+  const struct target_desc *tdesc = NULL;
 
   if (features.wordsize == 8)
     {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/ppc-linux-common.h ./gdb/arch/ppc-linux-common.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/ppc-linux-common.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/ppc-linux-common.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GNU/Linux on PPC systems.
 
-   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/ppc-linux-tdesc.h ./gdb/arch/ppc-linux-tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/ppc-linux-tdesc.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/ppc-linux-tdesc.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target description declarations shared between gdb, gdbserver and IPA.
 
-   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,25 +22,25 @@
 
 struct target_desc;
 
-extern struct target_desc *tdesc_powerpc_32l;
-extern struct target_desc *tdesc_powerpc_altivec32l;
-extern struct target_desc *tdesc_powerpc_vsx32l;
-extern struct target_desc *tdesc_powerpc_isa205_32l;
-extern struct target_desc *tdesc_powerpc_isa205_altivec32l;
-extern struct target_desc *tdesc_powerpc_isa205_vsx32l;
-extern struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx32l;
-extern struct target_desc *tdesc_powerpc_isa207_vsx32l;
-extern struct target_desc *tdesc_powerpc_isa207_htm_vsx32l;
-extern struct target_desc *tdesc_powerpc_e500l;
-
-extern struct target_desc *tdesc_powerpc_64l;
-extern struct target_desc *tdesc_powerpc_altivec64l;
-extern struct target_desc *tdesc_powerpc_vsx64l;
-extern struct target_desc *tdesc_powerpc_isa205_64l;
-extern struct target_desc *tdesc_powerpc_isa205_altivec64l;
-extern struct target_desc *tdesc_powerpc_isa205_vsx64l;
-extern struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx64l;
-extern struct target_desc *tdesc_powerpc_isa207_vsx64l;
-extern struct target_desc *tdesc_powerpc_isa207_htm_vsx64l;
+extern const struct target_desc *tdesc_powerpc_32l;
+extern const struct target_desc *tdesc_powerpc_altivec32l;
+extern const struct target_desc *tdesc_powerpc_vsx32l;
+extern const struct target_desc *tdesc_powerpc_isa205_32l;
+extern const struct target_desc *tdesc_powerpc_isa205_altivec32l;
+extern const struct target_desc *tdesc_powerpc_isa205_vsx32l;
+extern const struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx32l;
+extern const struct target_desc *tdesc_powerpc_isa207_vsx32l;
+extern const struct target_desc *tdesc_powerpc_isa207_htm_vsx32l;
+extern const struct target_desc *tdesc_powerpc_e500l;
+
+extern const struct target_desc *tdesc_powerpc_64l;
+extern const struct target_desc *tdesc_powerpc_altivec64l;
+extern const struct target_desc *tdesc_powerpc_vsx64l;
+extern const struct target_desc *tdesc_powerpc_isa205_64l;
+extern const struct target_desc *tdesc_powerpc_isa205_altivec64l;
+extern const struct target_desc *tdesc_powerpc_isa205_vsx64l;
+extern const struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx64l;
+extern const struct target_desc *tdesc_powerpc_isa207_vsx64l;
+extern const struct target_desc *tdesc_powerpc_isa207_htm_vsx64l;
 
 #endif /* ARCH_PPC_LINUX_TDESC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/riscv.c ./gdb/arch/riscv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/riscv.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/riscv.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2018-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -24,46 +24,32 @@
 #include "../features/riscv/64bit-cpu.c"
 #include "../features/riscv/32bit-fpu.c"
 #include "../features/riscv/64bit-fpu.c"
+#include "../features/riscv/rv32e-xregs.c"
 
-/* Wrapper used by std::unordered_map to generate hash for feature set.  */
-struct riscv_gdbarch_features_hasher
-{
-  std::size_t
-  operator() (const riscv_gdbarch_features &features) const noexcept
-  {
-    return features.hash ();
-  }
-};
-
-/* Cache of previously seen target descriptions, indexed by the feature set
-   that created them.  */
-static std::unordered_map<riscv_gdbarch_features,
-                          target_desc *,
-                          riscv_gdbarch_features_hasher> riscv_tdesc_cache;
+#ifndef GDBSERVER
+#define STATIC_IN_GDB static
+#else
+#define STATIC_IN_GDB
+#endif
 
 /* See arch/riscv.h.  */
 
-const target_desc *
-riscv_create_target_description (struct riscv_gdbarch_features features)
+STATIC_IN_GDB target_desc_up
+riscv_create_target_description (const struct riscv_gdbarch_features features)
 {
-  /* Have we seen this feature set before?  If we have return the same
-     target description.  GDB expects that if two target descriptions are
-     the same (in content terms) then they will actually be the same
-     instance.  This is important when trying to lookup gdbarch objects as
-     GDBARCH_LIST_LOOKUP_BY_INFO performs a pointer comparison on target
-     descriptions to find candidate gdbarch objects.  */
-  const auto it = riscv_tdesc_cache.find (features);
-  if (it != riscv_tdesc_cache.end ())
-    return it->second;
-
   /* Now we should create a new target description.  */
-  target_desc *tdesc = allocate_target_description ();
+  target_desc_up tdesc = allocate_target_description ();
 
 #ifndef IN_PROCESS_AGENT
   std::string arch_name = "riscv";
 
   if (features.xlen == 4)
-    arch_name.append (":rv32i");
+    {
+      if (features.embedded)
+	arch_name.append (":rv32e");
+      else
+	arch_name.append (":rv32i");
+    }
   else if (features.xlen == 8)
     arch_name.append (":rv64i");
   else if (features.xlen == 16)
@@ -76,25 +62,75 @@ riscv_create_target_description (struct
   else if (features.flen == 16)
     arch_name.append ("q");
 
-  set_tdesc_architecture (tdesc, arch_name.c_str ());
+  set_tdesc_architecture (tdesc.get (), arch_name.c_str ());
 #endif
 
   long regnum = 0;
 
   /* For now we only support creating 32-bit or 64-bit x-registers.  */
   if (features.xlen == 4)
-    regnum = create_feature_riscv_32bit_cpu (tdesc, regnum);
+    {
+      if (features.embedded)
+	regnum = create_feature_riscv_rv32e_xregs (tdesc.get (), regnum);
+      else
+	regnum = create_feature_riscv_32bit_cpu (tdesc.get (), regnum);
+    }
   else if (features.xlen == 8)
-    regnum = create_feature_riscv_64bit_cpu (tdesc, regnum);
+    regnum = create_feature_riscv_64bit_cpu (tdesc.get (), regnum);
 
   /* For now we only support creating 32-bit or 64-bit f-registers.  */
   if (features.flen == 4)
-    regnum = create_feature_riscv_32bit_fpu (tdesc, regnum);
+    regnum = create_feature_riscv_32bit_fpu (tdesc.get (), regnum);
   else if (features.flen == 8)
-    regnum = create_feature_riscv_64bit_fpu (tdesc, regnum);
+    regnum = create_feature_riscv_64bit_fpu (tdesc.get (), regnum);
 
-  /* Add to the cache.  */
-  riscv_tdesc_cache.emplace (features, tdesc);
+  /* Currently GDB only supports vector features coming from remote
+     targets.  We don't support creating vector features on native targets
+     (yet).  */
+  if (features.vlen != 0)
+    error (_("unable to create vector feature"));
 
   return tdesc;
 }
+
+#ifndef GDBSERVER
+
+/* Wrapper used by std::unordered_map to generate hash for feature set.  */
+struct riscv_gdbarch_features_hasher
+{
+  std::size_t
+  operator() (const riscv_gdbarch_features &features) const noexcept
+  {
+    return features.hash ();
+  }
+};
+
+/* Cache of previously seen target descriptions, indexed by the feature set
+   that created them.  */
+static std::unordered_map<riscv_gdbarch_features,
+			  const target_desc_up,
+			  riscv_gdbarch_features_hasher> riscv_tdesc_cache;
+
+/* See arch/riscv.h.  */
+
+const target_desc *
+riscv_lookup_target_description (const struct riscv_gdbarch_features features)
+{
+  /* Lookup in the cache.  If we find it then return the pointer out of
+     the target_desc_up (which is a unique_ptr).  This is safe as the
+     riscv_tdesc_cache will exist until GDB exits.  */
+  const auto it = riscv_tdesc_cache.find (features);
+  if (it != riscv_tdesc_cache.end ())
+    return it->second.get ();
+
+  target_desc_up tdesc (riscv_create_target_description (features));
+
+  /* Add to the cache, and return a pointer borrowed from the
+     target_desc_up.  This is safe as the cache (and the pointers
+     contained within it) are not deleted until GDB exits.  */
+  target_desc *ptr = tdesc.get ();
+  riscv_tdesc_cache.emplace (features, std::move (tdesc));
+  return ptr;
+}
+
+#endif /* !GDBSERVER */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/riscv.h ./gdb/arch/riscv.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/riscv.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/riscv.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target-dependent functionality for RISC-V
 
-   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -46,10 +46,33 @@ struct riscv_gdbarch_features
      that there are no f-registers.  No other value is valid.  */
   int flen = 0;
 
+  /* The size of the v-registers in bytes.  The value 0 indicates a target
+     with no vector registers.  The minimum value for a 'V'-extension compliant
+     target should be 16 and 4 for an embedded subset compliant target (with
+     'Zve32*' extension), but GDB doesn't currently mind, and will accept any
+     vector size.  */
+  int vlen = 0;
+
+  /* When true this target is RV32E.  */
+  bool embedded = false;
+
+  /* Track if the target description has an fcsr, fflags, and frm
+     registers.  Some targets provide all these in their target
+     descriptions, while some only offer fcsr, while others don't even
+     offer that register.  If a target provides fcsr but not fflags and/or
+     frm, then we can emulate these registers as pseudo registers.  */
+  bool has_fcsr_reg = false;
+  bool has_fflags_reg = false;
+  bool has_frm_reg = false;
+
   /* Equality operator.  */
   bool operator== (const struct riscv_gdbarch_features &rhs) const
   {
-    return (xlen == rhs.xlen && flen == rhs.flen);
+    return (xlen == rhs.xlen && flen == rhs.flen
+	    && embedded == rhs.embedded && vlen == rhs.vlen
+	    && has_fflags_reg == rhs.has_fflags_reg
+	    && has_frm_reg == rhs.has_frm_reg
+	    && has_fcsr_reg == rhs.has_fcsr_reg);
   }
 
   /* Inequality operator.  */
@@ -61,15 +84,39 @@ struct riscv_gdbarch_features
   /* Used by std::unordered_map to hash feature sets.  */
   std::size_t hash () const noexcept
   {
-    std::size_t val = ((xlen & 0x1f) << 5 | (flen & 0x1f) << 0);
+    std::size_t val = ((embedded ? 1 : 0) << 10
+		       | (has_fflags_reg ? 1 : 0) << 11
+		       | (has_frm_reg ? 1 : 0) << 12
+		       | (has_fcsr_reg ? 1 : 0) << 13
+		       | (xlen & 0x1f) << 5
+		       | (flen & 0x1f) << 0
+		       | (vlen & 0x3fff) << 14);
     return val;
   }
 };
 
-/* Create and return a target description that is compatible with
-   FEATURES.  */
+#ifdef GDBSERVER
+
+/* Create and return a target description that is compatible with FEATURES.
+   This is only used directly from the gdbserver where the created target
+   description is modified after it is return.  */
+
+target_desc_up riscv_create_target_description
+	(const struct riscv_gdbarch_features features);
+
+#else
+
+/* Lookup an already existing target description matching FEATURES, or
+   create a new target description if this is the first time we have seen
+   FEATURES.  For the same FEATURES the same target_desc is always
+   returned.  This is important when trying to lookup gdbarch objects as
+   GDBARCH_LIST_LOOKUP_BY_INFO performs a pointer comparison on target
+   descriptions to find candidate gdbarch objects.  */
+
+const target_desc *riscv_lookup_target_description
+	(const struct riscv_gdbarch_features features);
+
+#endif /* GDBSERVER */
 
-const target_desc *riscv_create_target_description
-	(struct riscv_gdbarch_features features);
 
 #endif /* ARCH_RISCV_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/tic6x.c ./gdb/arch/tic6x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/tic6x.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/tic6x.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,20 +28,20 @@
 target_desc *
 tic6x_create_target_description (enum c6x_feature feature)
 {
-  target_desc *tdesc = allocate_target_description ();
+  target_desc_up tdesc = allocate_target_description ();
 
-  set_tdesc_architecture (tdesc, "tic6x");
-  set_tdesc_osabi (tdesc, "GNU/Linux");
+  set_tdesc_architecture (tdesc.get (), "tic6x");
+  set_tdesc_osabi (tdesc.get (), "GNU/Linux");
 
   long regnum = 0;
 
-  regnum = create_feature_tic6x_core (tdesc, regnum);
+  regnum = create_feature_tic6x_core (tdesc.get (), regnum);
 
   if (feature == C6X_GP || feature == C6X_C6XP)
-    regnum = create_feature_tic6x_gp (tdesc, regnum);
+    regnum = create_feature_tic6x_gp (tdesc.get (), regnum);
 
   if (feature == C6X_C6XP)
-    regnum = create_feature_tic6x_c6xp (tdesc, regnum);
+    regnum = create_feature_tic6x_c6xp (tdesc.get (), regnum);
 
-  return tdesc;
+  return tdesc.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/tic6x.h ./gdb/arch/tic6x.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/tic6x.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/tic6x.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/xtensa.h ./gdb/arch/xtensa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch/xtensa.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch/xtensa.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common Target-dependent code for the Xtensa port of GDB, the GNU debugger.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch-utils.c ./gdb/arch-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch-utils.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch-utils.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Dynamic architecture support for GDB, the GNU debugger.
 
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,7 @@
 
 #include "arch-utils.h"
 #include "gdbcmd.h"
-#include "inferior.h"		/* enum CALL_DUMMY_LOCATION et al.  */
+#include "inferior.h"
 #include "infrun.h"
 #include "regcache.h"
 #include "sim-regno.h"
@@ -31,6 +31,12 @@
 #include "objfiles.h"
 #include "language.h"
 #include "symtab.h"
+#include "dummy-frame.h"
+#include "frame-unwind.h"
+#include "reggroups.h"
+#include "auxv.h"
+#include "observable.h"
+#include "solib-target.h"
 
 #include "gdbsupport/version.h"
 
@@ -38,9 +44,8 @@
 
 #include "dis-asm.h"
 
-int
-default_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
-				      struct displaced_step_closure *closure)
+bool
+default_displaced_step_hw_singlestep (struct gdbarch *gdbarch)
 {
   return !gdbarch_software_single_step_p (gdbarch);
 }
@@ -71,15 +76,71 @@ legacy_register_sim_regno (struct gdbarc
      suspected that some GDB/SIM combinations may rely on this
      behaviour.  The default should be one2one_register_sim_regno
      (below).  */
-  if (gdbarch_register_name (gdbarch, regnum) != NULL
-      && gdbarch_register_name (gdbarch, regnum)[0] != '\0')
+  if (gdbarch_register_name (gdbarch, regnum)[0] != '\0')
     return regnum;
   else
     return LEGACY_SIM_REGNO_IGNORE;
 }
 
+/* See arch-utils.h */
+
+CORE_ADDR
+default_remove_non_address_bits (struct gdbarch *gdbarch, CORE_ADDR pointer)
+{
+  /* By default, just return the pointer value.  */
+  return pointer;
+}
+
+/* See arch-utils.h */
+
+std::string
+default_memtag_to_string (struct gdbarch *gdbarch, struct value *tag)
+{
+  error (_("This architecture has no method to convert a memory tag to"
+	   " a string."));
+}
+
+/* See arch-utils.h */
+
+bool
+default_tagged_address_p (struct gdbarch *gdbarch, struct value *address)
+{
+  /* By default, assume the address is untagged.  */
+  return false;
+}
+
+/* See arch-utils.h */
+
+bool
+default_memtag_matches_p (struct gdbarch *gdbarch, struct value *address)
+{
+  /* By default, assume the tags match.  */
+  return true;
+}
+
+/* See arch-utils.h */
+
+bool
+default_set_memtags (struct gdbarch *gdbarch, struct value *address,
+		     size_t length, const gdb::byte_vector &tags,
+		     memtag_type tag_type)
+{
+  /* By default, return true (successful);  */
+  return true;
+}
+
+/* See arch-utils.h */
+
+struct value *
+default_get_memtag (struct gdbarch *gdbarch, struct value *address,
+		    memtag_type tag_type)
+{
+  /* By default, return no tag.  */
+  return nullptr;
+}
+
 CORE_ADDR
-generic_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+generic_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
 {
   return 0;
 }
@@ -105,7 +166,7 @@ generic_stack_frame_destroyed_p (struct
 
 int
 default_code_of_frame_writable (struct gdbarch *gdbarch,
-				struct frame_info *frame)
+				frame_info_ptr frame)
 {
   return 1;
 }
@@ -211,13 +272,12 @@ legacy_virtual_frame_pointer (struct gdb
     *frame_regnum = gdbarch_deprecated_fp_regnum (gdbarch);
   else if (gdbarch_sp_regnum (gdbarch) >= 0
 	   && gdbarch_sp_regnum (gdbarch)
-	        < gdbarch_num_regs (gdbarch))
+		< gdbarch_num_regs (gdbarch))
     *frame_regnum = gdbarch_sp_regnum (gdbarch);
   else
     /* Should this be an internal error?  I guess so, it is reflecting
        an architectural limitation in the current design.  */
-    internal_error (__FILE__, __LINE__, 
-		    _("No virtual frame pointer available"));
+    internal_error (_("No virtual frame pointer available"));
   *frame_offset = 0;
 }
 
@@ -231,7 +291,13 @@ default_floatformat_for_type (struct gdb
 {
   const struct floatformat **format = NULL;
 
-  if (len == gdbarch_half_bit (gdbarch))
+  /* Check if this is a bfloat16 type.  It has the same size as the
+     IEEE half float type, so we use the base type name to tell them
+     apart.  */
+  if (name != nullptr && strcmp (name, "__bf16") == 0
+      && len == gdbarch_bfloat16_bit (gdbarch))
+    format = gdbarch_bfloat16_format (gdbarch);
+  else if (len == gdbarch_half_bit (gdbarch))
     format = gdbarch_half_format (gdbarch);
   else if (len == gdbarch_float_bit (gdbarch))
     format = gdbarch_float_format (gdbarch);
@@ -300,7 +366,7 @@ static const char *const endian_enum[] =
   endian_auto,
   NULL,
 };
-static const char *set_endian_string;
+static const char *set_endian_string = endian_auto;
 
 enum bfd_endian
 selected_byte_order (void)
@@ -316,18 +382,18 @@ show_endian (struct ui_file *file, int f
 {
   if (target_byte_order_user == BFD_ENDIAN_UNKNOWN)
     if (gdbarch_byte_order (get_current_arch ()) == BFD_ENDIAN_BIG)
-      fprintf_unfiltered (file, _("The target endianness is set automatically "
-				  "(currently big endian)\n"));
+      gdb_printf (file, _("The target endianness is set automatically "
+			  "(currently big endian).\n"));
     else
-      fprintf_unfiltered (file, _("The target endianness is set automatically "
-				  "(currently little endian)\n"));
+      gdb_printf (file, _("The target endianness is set automatically "
+			  "(currently little endian).\n"));
   else
     if (target_byte_order_user == BFD_ENDIAN_BIG)
-      fprintf_unfiltered (file,
-			  _("The target is assumed to be big endian\n"));
+      gdb_printf (file,
+		  _("The target is set to big endian.\n"));
     else
-      fprintf_unfiltered (file,
-			  _("The target is assumed to be little endian\n"));
+      gdb_printf (file,
+		  _("The target is set to little endian.\n"));
 }
 
 static void
@@ -335,20 +401,18 @@ set_endian (const char *ignore_args, int
 {
   struct gdbarch_info info;
 
-  gdbarch_info_init (&info);
-
   if (set_endian_string == endian_auto)
     {
       target_byte_order_user = BFD_ENDIAN_UNKNOWN;
       if (! gdbarch_update_p (info))
-	internal_error (__FILE__, __LINE__,
-			_("set_endian: architecture update failed"));
+	internal_error (_("set_endian: architecture update failed"));
     }
   else if (set_endian_string == endian_little)
     {
       info.byte_order = BFD_ENDIAN_LITTLE;
       if (! gdbarch_update_p (info))
-	printf_unfiltered (_("Little endian target not supported by GDB\n"));
+	gdb_printf (gdb_stderr,
+		    _("Little endian target not supported by GDB\n"));
       else
 	target_byte_order_user = BFD_ENDIAN_LITTLE;
     }
@@ -356,13 +420,13 @@ set_endian (const char *ignore_args, int
     {
       info.byte_order = BFD_ENDIAN_BIG;
       if (! gdbarch_update_p (info))
-	printf_unfiltered (_("Big endian target not supported by GDB\n"));
+	gdb_printf (gdb_stderr,
+		    _("Big endian target not supported by GDB\n"));
       else
 	target_byte_order_user = BFD_ENDIAN_BIG;
     }
   else
-    internal_error (__FILE__, __LINE__,
-		    _("set_endian: bad value"));
+    internal_error (_("set_endian: bad value"));
 
   show_endian (gdb_stdout, from_tty, NULL, NULL);
 }
@@ -476,12 +540,12 @@ show_architecture (struct ui_file *file,
 		   struct cmd_list_element *c, const char *value)
 {
   if (target_architecture_user == NULL)
-    fprintf_filtered (file, _("The target architecture is set "
-			      "automatically (currently %s)\n"),
-		      gdbarch_bfd_arch_info (get_current_arch ())->printable_name);
+    gdb_printf (file, _("The target architecture is set to "
+			"\"auto\" (currently \"%s\").\n"),
+		gdbarch_bfd_arch_info (get_current_arch ())->printable_name);
   else
-    fprintf_filtered (file, _("The target architecture is assumed to be %s\n"),
-		      set_architecture_string);
+    gdb_printf (file, _("The target architecture is set to \"%s\".\n"),
+		set_architecture_string);
 }
 
 
@@ -494,26 +558,23 @@ set_architecture (const char *ignore_arg
 {
   struct gdbarch_info info;
 
-  gdbarch_info_init (&info);
-
   if (strcmp (set_architecture_string, "auto") == 0)
     {
       target_architecture_user = NULL;
       if (!gdbarch_update_p (info))
-	internal_error (__FILE__, __LINE__,
-			_("could not select an architecture automatically"));
+	internal_error (_("could not select an architecture automatically"));
     }
   else
     {
       info.bfd_arch_info = bfd_scan_arch (set_architecture_string);
       if (info.bfd_arch_info == NULL)
-	internal_error (__FILE__, __LINE__,
-			_("set_architecture: bfd_scan_arch failed"));
+	internal_error (_("set_architecture: bfd_scan_arch failed"));
       if (gdbarch_update_p (info))
 	target_architecture_user = info.bfd_arch_info;
       else
-	printf_unfiltered (_("Architecture `%s' not recognized.\n"),
-			   set_architecture_string);
+	gdb_printf (gdb_stderr,
+		    _("Architecture `%s' not recognized.\n"),
+		    set_architecture_string);
     }
   show_architecture (gdb_stdout, from_tty, NULL, NULL);
 }
@@ -527,7 +588,7 @@ gdbarch_update_p (struct gdbarch_info in
 
   /* Check for the current file.  */
   if (info.abfd == NULL)
-    info.abfd = exec_bfd;
+    info.abfd = current_program_space->exec_bfd ();
   if (info.abfd == NULL)
     info.abfd = core_bfd;
 
@@ -541,30 +602,31 @@ gdbarch_update_p (struct gdbarch_info in
   if (new_gdbarch == NULL)
     {
       if (gdbarch_debug)
-	fprintf_unfiltered (gdb_stdlog, "gdbarch_update_p: "
-			    "Architecture not found\n");
+	gdb_printf (gdb_stdlog, "gdbarch_update_p: "
+		    "Architecture not found\n");
       return 0;
     }
 
   /* If it is the same old architecture, accept the request (but don't
      swap anything).  */
-  if (new_gdbarch == target_gdbarch ())
+  if (new_gdbarch == current_inferior ()->arch ())
     {
       if (gdbarch_debug)
-	fprintf_unfiltered (gdb_stdlog, "gdbarch_update_p: "
-			    "Architecture %s (%s) unchanged\n",
-			    host_address_to_string (new_gdbarch),
-			    gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
+	gdb_printf (gdb_stdlog, "gdbarch_update_p: "
+		    "Architecture %s (%s) unchanged\n",
+		    host_address_to_string (new_gdbarch),
+		    gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
       return 1;
     }
 
   /* It's a new architecture, swap it in.  */
   if (gdbarch_debug)
-    fprintf_unfiltered (gdb_stdlog, "gdbarch_update_p: "
-			"New architecture %s (%s) selected\n",
-			host_address_to_string (new_gdbarch),
-			gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
-  set_target_gdbarch (new_gdbarch);
+    gdb_printf (gdb_stdlog, "gdbarch_update_p: "
+		"New architecture %s (%s) selected\n",
+		host_address_to_string (new_gdbarch),
+		gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
+
+  current_inferior ()->set_arch (new_gdbarch);
 
   return 1;
 }
@@ -576,7 +638,6 @@ struct gdbarch *
 gdbarch_from_bfd (bfd *abfd)
 {
   struct gdbarch_info info;
-  gdbarch_info_init (&info);
 
   info.abfd = abfd;
   return gdbarch_find_by_info (info);
@@ -591,14 +652,14 @@ set_gdbarch_from_file (bfd *abfd)
   struct gdbarch_info info;
   struct gdbarch *gdbarch;
 
-  gdbarch_info_init (&info);
   info.abfd = abfd;
   info.target_desc = target_current_description ();
   gdbarch = gdbarch_find_by_info (info);
 
   if (gdbarch == NULL)
     error (_("Architecture of file not recognized."));
-  set_target_gdbarch (gdbarch);
+
+  current_inferior ()->set_arch (gdbarch);
 }
 
 /* Initialize the current architecture.  Update the ``set
@@ -621,14 +682,14 @@ static const bfd_target *default_bfd_vec
 
 static enum bfd_endian default_byte_order = BFD_ENDIAN_UNKNOWN;
 
+/* Printable names of architectures.  Used as the enum list of the
+   "set arch" command.  */
+static std::vector<const char *> arches;
+
 void
 initialize_current_architecture (void)
 {
-  const char **arches = gdbarch_printable_names ();
-  struct gdbarch_info info;
-
-  /* determine a default architecture and byte order.  */
-  gdbarch_info_init (&info);
+  arches = gdbarch_printable_names ();
   
   /* Find a default architecture.  */
   if (default_bfd_arch == NULL)
@@ -636,21 +697,22 @@ initialize_current_architecture (void)
       /* Choose the architecture by taking the first one
 	 alphabetically.  */
       const char *chosen = arches[0];
-      const char **arch;
-      for (arch = arches; *arch != NULL; arch++)
+
+      for (const char *arch : arches)
 	{
-	  if (strcmp (*arch, chosen) < 0)
-	    chosen = *arch;
+	  if (strcmp (arch, chosen) < 0)
+	    chosen = arch;
 	}
+
       if (chosen == NULL)
-	internal_error (__FILE__, __LINE__,
-			_("initialize_current_architecture: No arch"));
+	internal_error (_("initialize_current_architecture: No arch"));
+
       default_bfd_arch = bfd_scan_arch (chosen);
       if (default_bfd_arch == NULL)
-	internal_error (__FILE__, __LINE__,
-			_("initialize_current_architecture: Arch not found"));
+	internal_error (_("initialize_current_architecture: Arch not found"));
     }
 
+  gdbarch_info info;
   info.bfd_arch_info = default_bfd_arch;
 
   /* Take several guesses at a byte order.  */
@@ -690,44 +752,28 @@ initialize_current_architecture (void)
   info.byte_order_for_code = info.byte_order;
 
   if (! gdbarch_update_p (info))
-    internal_error (__FILE__, __LINE__,
-		    _("initialize_current_architecture: Selection of "
+    internal_error (_("initialize_current_architecture: Selection of "
 		      "initial architecture failed"));
 
   /* Create the ``set architecture'' command appending ``auto'' to the
      list of architectures.  */
   {
     /* Append ``auto''.  */
-    int nr;
-    for (nr = 0; arches[nr] != NULL; nr++);
-    arches = XRESIZEVEC (const char *, arches, nr + 2);
-    arches[nr + 0] = "auto";
-    arches[nr + 1] = NULL;
-    add_setshow_enum_cmd ("architecture", class_support,
-			  arches, &set_architecture_string, 
-			  _("Set architecture of target."),
-			  _("Show architecture of target."), NULL,
-			  set_architecture, show_architecture,
-			  &setlist, &showlist);
-    add_alias_cmd ("processor", "architecture", class_support, 1, &setlist);
+    set_architecture_string = "auto";
+    arches.push_back (set_architecture_string);
+    arches.push_back (nullptr);
+    set_show_commands architecture_cmds
+      = add_setshow_enum_cmd ("architecture", class_support,
+			      arches.data (), &set_architecture_string,
+			      _("Set architecture of target."),
+			      _("Show architecture of target."), NULL,
+			      set_architecture, show_architecture,
+			      &setlist, &showlist);
+    add_alias_cmd ("processor", architecture_cmds.set, class_support, 1,
+		   &setlist);
   }
 }
 
-
-/* Initialize a gdbarch info to values that will be automatically
-   overridden.  Note: Originally, this ``struct info'' was initialized
-   using memset(0).  Unfortunately, that ran into problems, namely
-   BFD_ENDIAN_BIG is zero.  An explicit initialization function that
-   can explicitly set each field to a well defined value is used.  */
-
-void
-gdbarch_info_init (struct gdbarch_info *info)
-{
-  memset (info, 0, sizeof (struct gdbarch_info));
-  info->byte_order = BFD_ENDIAN_UNKNOWN;
-  info->byte_order_for_code = info->byte_order;
-}
-
 /* Similar to init, but this time fill in the blanks.  Information is
    obtained from the global "set ..." options and explicitly
    initialized INFO fields.  */
@@ -804,7 +850,7 @@ get_current_arch (void)
   if (has_stack_frames ())
     return get_frame_arch (get_selected_frame (NULL));
   else
-    return target_gdbarch ();
+    return current_inferior ()->arch ();
 }
 
 int
@@ -858,7 +904,7 @@ default_return_in_first_hidden_param_p (
   /* Usually, the return value's address is stored the in the "first hidden"
      parameter if the return value should be passed by reference, as
      specified in ABI.  */
-  return language_pass_by_reference (type);
+  return !(language_pass_by_reference (type).trivially_copyable);
 }
 
 int default_insn_is_call (struct gdbarch *gdbarch, CORE_ADDR addr)
@@ -876,6 +922,38 @@ int default_insn_is_jump (struct gdbarch
   return 0;
 }
 
+/*  See arch-utils.h.  */
+
+bool
+default_program_breakpoint_here_p (struct gdbarch *gdbarch,
+				   CORE_ADDR address)
+{
+  int len;
+  const gdb_byte *bpoint = gdbarch_breakpoint_from_pc (gdbarch, &address, &len);
+
+  /* Software breakpoints unsupported?  */
+  if (bpoint == nullptr)
+    return false;
+
+  gdb_byte *target_mem = (gdb_byte *) alloca (len);
+
+  /* Enable the automatic memory restoration from breakpoints while
+     we read the memory.  Otherwise we may find temporary breakpoints, ones
+     inserted by GDB, and flag them as permanent breakpoints.  */
+  scoped_restore restore_memory
+    = make_scoped_restore_show_memory_breakpoints (0);
+
+  if (target_read_memory (address, target_mem, len) == 0)
+    {
+      /* Check if this is a breakpoint instruction for this architecture,
+	 including ones used by GDB.  */
+      if (memcmp (target_mem, bpoint, len) == 0)
+	return true;
+    }
+
+  return false;
+}
+
 void
 default_skip_permanent_breakpoint (struct regcache *regcache)
 {
@@ -919,13 +997,15 @@ default_gnu_triplet_regexp (struct gdbar
   return gdbarch_bfd_arch_info (gdbarch)->arch_name;
 }
 
-/* Default method for gdbarch_addressable_memory_unit_size.  By default, a memory byte has
-   a size of 1 octet.  */
+/* Default method for gdbarch_addressable_memory_unit_size.  The default is
+   based on the bits_per_byte defined in the bfd library for the current
+   architecture, this is usually 8-bits, and so this function will usually
+   return 1 indicating 1 byte is 1 octet.  */
 
 int
 default_addressable_memory_unit_size (struct gdbarch *gdbarch)
 {
-  return 1;
+  return gdbarch_bfd_arch_info (gdbarch)->bits_per_byte / 8;
 }
 
 void
@@ -957,7 +1037,7 @@ default_print_insn (bfd_vma memaddr, dis
   disassembler_ftype disassemble_fn;
 
   disassemble_fn = disassembler (info->arch, info->endian == BFD_ENDIAN_BIG,
-				 info->mach, exec_bfd);
+				 info->mach, current_program_space->exec_bfd ());
 
   gdb_assert (disassemble_fn != NULL);
   return (*disassemble_fn) (memaddr, info);
@@ -999,13 +1079,422 @@ default_type_align (struct gdbarch *gdba
 /* See arch-utils.h.  */
 
 std::string
-default_get_pc_address_flags (frame_info *frame, CORE_ADDR pc)
+default_get_pc_address_flags (frame_info_ptr frame, CORE_ADDR pc)
 {
   return "";
 }
 
+/* See arch-utils.h.  */
+void
+default_read_core_file_mappings
+  (struct gdbarch *gdbarch,
+   struct bfd *cbfd,
+   read_core_file_mappings_pre_loop_ftype pre_loop_cb,
+   read_core_file_mappings_loop_ftype loop_cb)
+{
+}
+
+/* See arch-utils.h.  */
+bool
+default_use_target_description_from_corefile_notes (struct gdbarch *gdbarch,
+						    struct bfd *corefile_bfd)
+{
+  /* Always trust the corefile target description contained in the target
+     description note.  */
+  return true;
+}
+
+CORE_ADDR
+default_get_return_buf_addr (struct type *val_type, frame_info_ptr cur_frame)
+{
+  return 0;
+}
+
+bool
+default_dwarf2_omit_typedef_p (struct type *target_type, const char *producer,
+			       const char *name)
+{
+  return false;
+}
+
+static CORE_ADDR
+default_update_call_site_pc (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  return pc;
+}
+
+/* Non-zero if we want to trace architecture code.  */
+
+#ifndef GDBARCH_DEBUG
+#define GDBARCH_DEBUG 0
+#endif
+unsigned int gdbarch_debug = GDBARCH_DEBUG;
+static void
+show_gdbarch_debug (struct ui_file *file, int from_tty,
+		    struct cmd_list_element *c, const char *value)
+{
+  gdb_printf (file, _("Architecture debugging is %s.\n"), value);
+}
+
+static const char *
+pformat (struct gdbarch *gdbarch, const struct floatformat **format)
+{
+  if (format == NULL)
+    return "(null)";
+
+  int format_index = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE ? 1 : 0;
+  return format[format_index]->name;
+}
+
+static const char *
+pstring (const char *string)
+{
+  if (string == NULL)
+    return "(null)";
+  return string;
+}
+
+static const char *
+pstring_ptr (char **string)
+{
+  if (string == NULL || *string == NULL)
+    return "(null)";
+  return *string;
+}
+
+/* Helper function to print a list of strings, represented as "const
+   char *const *".  The list is printed comma-separated.  */
+
+static const char *
+pstring_list (const char *const *list)
+{
+  static char ret[100];
+  const char *const *p;
+  size_t offset = 0;
+
+  if (list == NULL)
+    return "(null)";
+
+  ret[0] = '\0';
+  for (p = list; *p != NULL && offset < sizeof (ret); ++p)
+    {
+      size_t s = xsnprintf (ret + offset, sizeof (ret) - offset, "%s, ", *p);
+      offset += 2 + s;
+    }
+
+  if (offset > 0)
+    {
+      gdb_assert (offset - 2 < sizeof (ret));
+      ret[offset - 2] = '\0';
+    }
+
+  return ret;
+}
+
+#include "gdbarch.c"
+
+enum return_value_convention
+default_gdbarch_return_value
+     (struct gdbarch *gdbarch, struct value *function, struct type *valtype,
+      struct regcache *regcache, struct value **read_value,
+      const gdb_byte *writebuf)
+{
+  gdb_byte *readbuf = nullptr;
+
+  if (read_value != nullptr)
+    {
+      *read_value = value::allocate (valtype);
+      readbuf = (*read_value)->contents_raw ().data ();
+    }
+
+  return gdbarch->return_value (gdbarch, function, valtype, regcache,
+				readbuf, writebuf);
+}
+
+obstack *gdbarch_obstack (gdbarch *arch)
+{
+  return &arch->obstack;
+}
+
+/* See gdbarch.h.  */
+
+char *
+gdbarch_obstack_strdup (struct gdbarch *arch, const char *string)
+{
+  return obstack_strdup (&arch->obstack, string);
+}
+
+/* Free a gdbarch struct.  This should never happen in normal
+   operation --- once you've created a gdbarch, you keep it around.
+   However, if an architecture's init function encounters an error
+   building the structure, it may need to clean up a partially
+   constructed gdbarch.  */
+
+void
+gdbarch_free (struct gdbarch *arch)
+{
+  gdb_assert (arch != NULL);
+  gdb_assert (!arch->initialized_p);
+  delete arch;
+}
+
+/* See gdbarch.h.  */
+
+struct gdbarch_tdep_base *
+gdbarch_tdep_1 (struct gdbarch *gdbarch)
+{
+  if (gdbarch_debug >= 2)
+    gdb_printf (gdb_stdlog, "gdbarch_tdep_1 called\n");
+  return gdbarch->tdep.get ();
+}
+
+registry<gdbarch> *
+registry_accessor<gdbarch>::get (gdbarch *arch)
+{
+  return &arch->registry_fields;
+}
+
+/* Keep a registry of the architectures known by GDB.  */
+
+struct gdbarch_registration
+{
+  enum bfd_architecture bfd_architecture;
+  gdbarch_init_ftype *init;
+  gdbarch_dump_tdep_ftype *dump_tdep;
+  gdbarch_supports_arch_info_ftype *supports_arch_info;
+  struct gdbarch_list *arches;
+  struct gdbarch_registration *next;
+};
+
+static struct gdbarch_registration *gdbarch_registry = NULL;
+
+std::vector<const char *>
+gdbarch_printable_names ()
+{
+  /* Accumulate a list of names based on the registered list of
+     architectures.  */
+  std::vector<const char *> arches;
+
+  for (gdbarch_registration *rego = gdbarch_registry;
+       rego != nullptr;
+       rego = rego->next)
+    {
+      const struct bfd_arch_info *ap
+	= bfd_lookup_arch (rego->bfd_architecture, 0);
+      if (ap == nullptr)
+	internal_error (_("gdbarch_architecture_names: multi-arch unknown"));
+      do
+	{
+	  if (rego->supports_arch_info == nullptr
+	      || rego->supports_arch_info (ap))
+	    arches.push_back (ap->printable_name);
+	  ap = ap->next;
+	}
+      while (ap != NULL);
+    }
+
+  return arches;
+}
+
+
+void
+gdbarch_register (enum bfd_architecture bfd_architecture,
+		  gdbarch_init_ftype *init,
+		  gdbarch_dump_tdep_ftype *dump_tdep,
+		  gdbarch_supports_arch_info_ftype *supports_arch_info)
+{
+  struct gdbarch_registration **curr;
+  const struct bfd_arch_info *bfd_arch_info;
+
+  /* Check that BFD recognizes this architecture */
+  bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
+  if (bfd_arch_info == NULL)
+    {
+      internal_error (_("gdbarch: Attempt to register "
+			"unknown architecture (%d)"),
+		      bfd_architecture);
+    }
+  /* Check that we haven't seen this architecture before.  */
+  for (curr = &gdbarch_registry;
+       (*curr) != NULL;
+       curr = &(*curr)->next)
+    {
+      if (bfd_architecture == (*curr)->bfd_architecture)
+	internal_error (_("gdbarch: Duplicate registration "
+			  "of architecture (%s)"),
+			bfd_arch_info->printable_name);
+    }
+  /* log it */
+  if (gdbarch_debug)
+    gdb_printf (gdb_stdlog, "gdbarch_register (%s, %s)\n",
+		bfd_arch_info->printable_name,
+		host_address_to_string (init));
+  /* Append it */
+  (*curr) = XNEW (struct gdbarch_registration);
+  (*curr)->bfd_architecture = bfd_architecture;
+  (*curr)->init = init;
+  (*curr)->dump_tdep = dump_tdep;
+  (*curr)->supports_arch_info = supports_arch_info;
+  (*curr)->arches = NULL;
+  (*curr)->next = NULL;
+}
+
+/* Look for an architecture using gdbarch_info.  */
+
+struct gdbarch_list *
+gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
+			     const struct gdbarch_info *info)
+{
+  for (; arches != NULL; arches = arches->next)
+    {
+      if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
+	continue;
+      if (info->byte_order != arches->gdbarch->byte_order)
+	continue;
+      if (info->osabi != arches->gdbarch->osabi)
+	continue;
+      if (info->target_desc != arches->gdbarch->target_desc)
+	continue;
+      return arches;
+    }
+  return NULL;
+}
+
+
+/* Find an architecture that matches the specified INFO.  Create a new
+   architecture if needed.  Return that new architecture.  */
+
+struct gdbarch *
+gdbarch_find_by_info (struct gdbarch_info info)
+{
+  struct gdbarch *new_gdbarch;
+  struct gdbarch_registration *rego;
+
+  /* Fill in missing parts of the INFO struct using a number of
+     sources: "set ..."; INFOabfd supplied; and the global
+     defaults.  */
+  gdbarch_info_fill (&info);
+
+  /* Must have found some sort of architecture.  */
+  gdb_assert (info.bfd_arch_info != nullptr);
+
+  if (gdbarch_debug)
+    {
+      gdb_printf (gdb_stdlog,
+		  "gdbarch_find_by_info: info.bfd_arch_info %s\n",
+		  (info.bfd_arch_info != nullptr
+		   ? info.bfd_arch_info->printable_name
+		   : "(null)"));
+      gdb_printf (gdb_stdlog,
+		  "gdbarch_find_by_info: info.byte_order %d (%s)\n",
+		  info.byte_order,
+		  (info.byte_order == BFD_ENDIAN_BIG ? "big"
+		   : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
+		   : "default"));
+      gdb_printf (gdb_stdlog,
+		  "gdbarch_find_by_info: info.osabi %d (%s)\n",
+		  info.osabi, gdbarch_osabi_name (info.osabi));
+      gdb_printf (gdb_stdlog,
+		  "gdbarch_find_by_info: info.abfd %s\n",
+		  host_address_to_string (info.abfd));
+    }
+
+  /* Find the tdep code that knows about this architecture.  */
+  for (rego = gdbarch_registry;
+       rego != nullptr;
+       rego = rego->next)
+    if (rego->bfd_architecture == info.bfd_arch_info->arch)
+      break;
+  if (rego == nullptr)
+    {
+      if (gdbarch_debug)
+	gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
+		    "No matching architecture\n");
+      return nullptr;
+    }
+
+  /* Ask the tdep code for an architecture that matches "info".  */
+  new_gdbarch = rego->init (info, rego->arches);
+
+  /* Did the tdep code like it?  No.  Reject the change and revert to
+     the old architecture.  */
+  if (new_gdbarch == nullptr)
+    {
+      if (gdbarch_debug)
+	gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
+		    "Target rejected architecture\n");
+      return nullptr;
+    }
+
+  /* Is this a pre-existing architecture (as determined by already
+     being initialized)?  Move it to the front of the architecture
+     list (keeping the list sorted Most Recently Used).  */
+  if (new_gdbarch->initialized_p)
+    {
+      struct gdbarch_list **list;
+      struct gdbarch_list *self;
+      if (gdbarch_debug)
+	gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
+		    "Previous architecture %s (%s) selected\n",
+		    host_address_to_string (new_gdbarch),
+		    new_gdbarch->bfd_arch_info->printable_name);
+      /* Find the existing arch in the list.  */
+      for (list = &rego->arches;
+	   (*list) != nullptr && (*list)->gdbarch != new_gdbarch;
+	   list = &(*list)->next);
+      /* It had better be in the list of architectures.  */
+      gdb_assert ((*list) != nullptr && (*list)->gdbarch == new_gdbarch);
+      /* Unlink SELF.  */
+      self = (*list);
+      (*list) = self->next;
+      /* Insert SELF at the front.  */
+      self->next = rego->arches;
+      rego->arches = self;
+      /* Return it.  */
+      return new_gdbarch;
+    }
+
+  /* It's a new architecture.  */
+  if (gdbarch_debug)
+    gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
+		"New architecture %s (%s) selected\n",
+		host_address_to_string (new_gdbarch),
+		new_gdbarch->bfd_arch_info->printable_name);
+
+  /* Insert the new architecture into the front of the architecture
+     list (keep the list sorted Most Recently Used).  */
+  {
+    struct gdbarch_list *self = XNEW (struct gdbarch_list);
+    self->next = rego->arches;
+    self->gdbarch = new_gdbarch;
+    rego->arches = self;
+  }
+
+  /* Check that the newly installed architecture is valid.  Plug in
+     any post init values.  */
+  new_gdbarch->dump_tdep = rego->dump_tdep;
+  verify_gdbarch (new_gdbarch);
+  new_gdbarch->initialized_p = true;
+
+  if (gdbarch_debug)
+    gdbarch_dump (new_gdbarch, gdb_stdlog);
+
+  gdb::observers::new_architecture.notify (new_gdbarch);
+
+  return new_gdbarch;
+}
+
+/* See gdbarch.h.  */
+
+bool
+gdbarch_initialized_p (gdbarch *arch)
+{
+  return arch->initialized_p;
+}
+
+void _initialize_gdbarch_utils ();
 void
-_initialize_gdbarch_utils (void)
+_initialize_gdbarch_utils ()
 {
   add_setshow_enum_cmd ("endian", class_support,
 			endian_enum, &set_endian_string, 
@@ -1013,4 +1502,11 @@ _initialize_gdbarch_utils (void)
 			_("Show endianness of target."),
 			NULL, set_endian, show_endian,
 			&setlist, &showlist);
+  add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\
+Set architecture debugging."), _("\
+Show architecture debugging."), _("\
+When non-zero, architecture debugging is enabled."),
+			    NULL,
+			    show_gdbarch_debug,
+			    &setdebuglist, &showdebuglist);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch-utils.h ./gdb/arch-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arch-utils.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arch-utils.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Dynamic architecture support for GDB, the GNU debugger.
 
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,7 +22,7 @@
 
 #include "gdbarch.h"
 
-struct frame_info;
+class frame_info_ptr;
 struct minimal_symbol;
 struct type;
 struct gdbarch_info;
@@ -75,9 +75,7 @@ struct bp_manipulation_endian
   BREAK_INSN_LITTLE, BREAK_INSN_BIG>
 
 /* Default implementation of gdbarch_displaced_hw_singlestep.  */
-extern int
-  default_displaced_step_hw_singlestep (struct gdbarch *,
-					struct displaced_step_closure *);
+extern bool default_displaced_step_hw_singlestep (struct gdbarch *);
 
 /* Possible value for gdbarch_displaced_step_location:
    Place displaced instructions at the program's entry point,
@@ -134,7 +132,33 @@ extern const struct floatformat **
   default_floatformat_for_type (struct gdbarch *gdbarch,
 				const char *name, int len);
 
-extern CORE_ADDR generic_skip_trampoline_code (struct frame_info *frame,
+/* Default implementation of gdbarch_remove_non_address_bits.  */
+CORE_ADDR default_remove_non_address_bits (struct gdbarch *gdbarch,
+					   CORE_ADDR pointer);
+
+/* Default implementation of gdbarch_memtag_to_string.  */
+extern std::string default_memtag_to_string (struct gdbarch *gdbarch,
+					     struct value *tag);
+
+/* Default implementation of gdbarch_tagged_address_p.  */
+bool default_tagged_address_p (struct gdbarch *gdbarch, struct value *address);
+
+/* Default implementation of gdbarch_memtag_matches_p.  */
+extern bool default_memtag_matches_p (struct gdbarch *gdbarch,
+				       struct value *address);
+
+/* Default implementation of gdbarch_set_memtags.  */
+bool default_set_memtags (struct gdbarch *gdbarch,
+			  struct value *address, size_t length,
+			  const gdb::byte_vector &tags,
+			  memtag_type tag_type);
+
+/* Default implementation of gdbarch_get_memtag.  */
+struct value *default_get_memtag (struct gdbarch *gdbarch,
+				  struct value *address,
+				  memtag_type tag_type);
+
+extern CORE_ADDR generic_skip_trampoline_code (frame_info_ptr frame,
 					       CORE_ADDR pc);
 
 extern CORE_ADDR generic_skip_solib_resolver (struct gdbarch *gdbarch,
@@ -147,7 +171,7 @@ extern int generic_stack_frame_destroyed
 					    CORE_ADDR pc);
 
 extern int default_code_of_frame_writable (struct gdbarch *gdbarch,
-					   struct frame_info *frame);
+					   frame_info_ptr frame);
 
 /* By default, registers are not convertible.  */
 extern int generic_convert_register_p (struct gdbarch *gdbarch, int regnum,
@@ -176,12 +200,6 @@ extern enum bfd_endian selected_byte_ord
    was explicitly selected.  */
 extern const char *selected_architecture_name (void);
 
-/* Initialize a ``struct info''.  Can't use memset(0) since some
-   default values are not zero.  "fill" takes all available
-   information and fills in any unspecified fields.  */
-
-extern void gdbarch_info_init (struct gdbarch_info *info);
-
 /* Similar to init, but this time fill in the blanks.  Information is
    obtained from the global "set ..." options and explicitly
    initialized INFO fields.  */
@@ -228,6 +246,10 @@ extern int default_insn_is_call (struct
 extern int default_insn_is_ret (struct gdbarch *, CORE_ADDR);
 extern int default_insn_is_jump (struct gdbarch *, CORE_ADDR);
 
+/* Default implementation of gdbarch_program_breakpoint_here_p.  */
+extern bool default_program_breakpoint_here_p (struct gdbarch *gdbarch,
+					       CORE_ADDR addr);
+
 /* Do-nothing version of vsyscall_range.  Returns false.  */
 
 extern int default_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range);
@@ -273,7 +295,34 @@ extern ULONGEST default_type_align (stru
 				    struct type *type);
 
 /* Default implementation of gdbarch get_pc_address_flags method.  */
-extern std::string default_get_pc_address_flags (frame_info *frame,
+extern std::string default_get_pc_address_flags (frame_info_ptr frame,
 						 CORE_ADDR pc);
 
+/* Default implementation of gdbarch read_core_file_mappings method.  */
+extern void default_read_core_file_mappings
+  (struct gdbarch *gdbarch,
+   struct bfd *cbfd,
+   read_core_file_mappings_pre_loop_ftype pre_loop_cb,
+   read_core_file_mappings_loop_ftype loop_cb);
+
+/* Default implementation of gdbarch
+   use_target_description_from_corefile_notes.  */
+extern bool default_use_target_description_from_corefile_notes
+  (struct gdbarch *gdbarch,
+  struct bfd *corefile_bfd);
+
+/* Default implementation of gdbarch default_get_return_buf_addr method.  */
+extern CORE_ADDR default_get_return_buf_addr (struct type *val_typegdbarch,
+					      frame_info_ptr cur_frame);
+
+/* Default implementation of gdbarch default_dwarf2_omit_typedef_p method.  */
+extern bool default_dwarf2_omit_typedef_p (struct type *target_type,
+					   const char *producer,
+					   const char *name);
+
+extern enum return_value_convention default_gdbarch_return_value
+     (struct gdbarch *gdbarch, struct value *function, struct type *valtype,
+      struct regcache *regcache, struct value **read_value,
+      const gdb_byte *writebuf);
+
 #endif /* ARCH_UTILS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-linux-nat.c ./gdb/arc-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-linux-nat.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arc-linux-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,320 @@
+/* Native-dependent code for GNU/Linux ARC.
+
+   Copyright 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "frame.h"
+#include "inferior.h"
+#include "gdbcore.h"
+#include "regcache.h"
+#include "gdbsupport/gdb_assert.h"
+#include "target.h"
+#include "linux-nat.h"
+#include "nat/gdb_ptrace.h"
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <signal.h>
+#include <sys/user.h>
+#include <sys/ioctl.h>
+#include "gdbsupport/gdb_wait.h"
+#include <fcntl.h>
+#include <sys/procfs.h>
+#include <linux/elf.h>
+
+#include "gregset.h"
+#include "arc-tdep.h"
+#include "arc-linux-tdep.h"
+#include "arch/arc.h"
+
+/* Defines ps_err_e, struct ps_prochandle.  */
+#include "gdb_proc_service.h"
+
+/* Print an "arc-linux-nat" debug statement.  */
+
+#define arc_linux_nat_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (arc_debug, "arc-linux-nat", fmt, ##__VA_ARGS__)
+
+/* Linux starting with 4.12 supports NT_ARC_V2 note type, which adds R30,
+   R58 and R59 registers, which are specific to ARC HS and aren't
+   available in ARC 700.  */
+#if defined (NT_ARC_V2) && defined (__ARCHS__)
+#define ARC_HAS_V2_REGSET
+#endif
+
+class arc_linux_nat_target final : public linux_nat_target
+{
+public:
+  /* Add ARC register access methods.  */
+  void fetch_registers (struct regcache *, int) override;
+  void store_registers (struct regcache *, int) override;
+
+  const struct target_desc *read_description () override;
+
+  /* Handle threads  */
+  void low_prepare_to_resume (struct lwp_info *lp) override;
+};
+
+static arc_linux_nat_target the_arc_linux_nat_target;
+
+/* Read general registers from target process/thread (via ptrace)
+   into REGCACHE.  */
+
+static void
+fetch_gregs (struct regcache *regcache, int regnum)
+{
+  const int tid = get_ptrace_pid (regcache->ptid ());
+  struct iovec iov;
+  gdb_gregset_t regs;
+
+  iov.iov_base = &regs;
+  iov.iov_len = sizeof (gdb_gregset_t);
+
+  if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, (void *) &iov) < 0)
+    perror_with_name (_("Couldn't get general registers"));
+  else
+    arc_linux_supply_gregset (NULL, regcache, regnum, &regs, 0);
+}
+
+#ifdef ARC_HAS_V2_REGSET
+/* Read ARC v2 registers from target process/thread (via ptrace)
+   into REGCACHE.  */
+
+static void
+fetch_v2_regs (struct regcache *regcache, int regnum)
+{
+  const int tid = get_ptrace_pid (regcache->ptid ());
+  struct iovec iov;
+  bfd_byte v2_buffer[ARC_LINUX_SIZEOF_V2_REGSET];
+
+  iov.iov_base = &v2_buffer;
+  iov.iov_len = ARC_LINUX_SIZEOF_V2_REGSET;
+
+  if (ptrace (PTRACE_GETREGSET, tid, NT_ARC_V2, (void *) &iov) < 0)
+    perror_with_name (_("Couldn't get ARC HS registers"));
+  else
+    arc_linux_supply_v2_regset (NULL, regcache, regnum, v2_buffer, 0);
+}
+#endif
+
+/* Store general registers from REGCACHE into the target process/thread.  */
+
+static void
+store_gregs (const struct regcache *regcache, int regnum)
+{
+  const int tid = get_ptrace_pid (regcache->ptid ());
+  struct iovec iov;
+  gdb_gregset_t regs;
+
+  iov.iov_base = &regs;
+  iov.iov_len = sizeof (gdb_gregset_t);
+
+  if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, (void *) &iov) < 0)
+    perror_with_name (_("Couldn't get general registers"));
+  else
+    {
+      arc_linux_collect_gregset (NULL, regcache, regnum, regs, 0);
+
+      if (ptrace (PTRACE_SETREGSET, tid, NT_PRSTATUS, (void *) &iov) < 0)
+	perror_with_name (_("Couldn't write general registers"));
+    }
+}
+
+#ifdef ARC_HAS_V2_REGSET
+/* Store ARC v2 registers from REGCACHE into the target process/thread.  */
+
+static void
+store_v2_regs (const struct regcache *regcache, int regnum)
+{
+  const int tid = get_ptrace_pid (regcache->ptid ());
+  struct iovec iov;
+  bfd_byte v2_buffer[ARC_LINUX_SIZEOF_V2_REGSET];
+
+  iov.iov_base = &v2_buffer;
+  iov.iov_len = ARC_LINUX_SIZEOF_V2_REGSET;
+
+  if (ptrace (PTRACE_GETREGSET, tid, NT_ARC_V2, (void *) &iov) < 0)
+    perror_with_name (_("Couldn't get ARC HS registers"));
+  else
+    {
+      arc_linux_collect_v2_regset (NULL, regcache, regnum, v2_buffer, 0);
+
+      if (ptrace (PTRACE_SETREGSET, tid, NT_ARC_V2, (void *) &iov) < 0)
+	perror_with_name (_("Couldn't write ARC HS registers"));
+    }
+}
+#endif
+
+/* Target operation: Read REGNUM register (all registers if REGNUM == -1)
+   from target process into REGCACHE.  */
+
+void
+arc_linux_nat_target::fetch_registers (struct regcache *regcache, int regnum)
+{
+
+  if (regnum == -1 || regnum <= ARC_LAST_REGNUM)
+    fetch_gregs (regcache, regnum);
+
+#ifdef ARC_HAS_V2_REGSET
+  if (regnum == -1
+      || regnum == ARC_R30_REGNUM
+      || regnum == ARC_R58_REGNUM
+      || regnum == ARC_R59_REGNUM)
+      fetch_v2_regs (regcache, regnum);
+#endif
+}
+
+/* Target operation: Store REGNUM register (all registers if REGNUM == -1)
+   to the target process from REGCACHE.  */
+
+void
+arc_linux_nat_target::store_registers (struct regcache *regcache, int regnum)
+{
+  if (regnum == -1 || regnum <= ARC_LAST_REGNUM)
+    store_gregs (regcache, regnum);
+
+#ifdef ARC_HAS_V2_REGSET
+  if (regnum == -1
+      || regnum == ARC_R30_REGNUM
+      || regnum == ARC_R58_REGNUM
+      || regnum == ARC_R59_REGNUM)
+    store_v2_regs (regcache, regnum);
+#endif
+}
+
+/* Copy general purpose register(s) from REGCACHE into regset GREGS.
+   This function is exported to proc-service.c  */
+
+void
+fill_gregset (const struct regcache *regcache,
+	      gdb_gregset_t *gregs, int regnum)
+{
+  arc_linux_collect_gregset (NULL, regcache, regnum, gregs, 0);
+}
+
+/* Copy all the general purpose registers from regset GREGS into REGCACHE.
+   This function is exported to proc-service.c.  */
+
+void
+supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregs)
+{
+  arc_linux_supply_gregset (NULL, regcache, -1, gregs, 0);
+}
+
+/* ARC doesn't have separate FP registers.  This function is exported
+   to proc-service.c.  */
+
+void
+fill_fpregset (const struct regcache *regcache,
+	       gdb_fpregset_t *fpregsetp, int regnum)
+{
+  arc_linux_nat_debug_printf ("called");
+}
+
+/* ARC doesn't have separate FP registers.  This function is exported
+   to proc-service.c.  */
+
+void
+supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp)
+{
+  arc_linux_nat_debug_printf ("called");
+}
+
+/* Implement the "read_description" method of linux_nat_target.  */
+
+const struct target_desc *
+arc_linux_nat_target::read_description ()
+{
+  /* This is a native target, hence description is hardcoded.  */
+#ifdef __ARCHS__
+  arc_arch_features features (4, ARC_ISA_ARCV2);
+#else
+  arc_arch_features features (4, ARC_ISA_ARCV1);
+#endif
+  return arc_lookup_target_description (features);
+}
+
+/* As described in arc_linux_collect_gregset(), we need to write resume-PC
+   to ERET.  However by default GDB for native targets doesn't write
+   registers if they haven't been changed.  This is a callback called by
+   generic GDB, and in this callback we have to rewrite PC value so it
+   would force rewrite of register on target.  It seems that the only
+   other arch that utilizes this hook is x86/x86-64 for HW breakpoint
+   support.  But then, AFAIK no other arch has this stop_pc/eret
+   complexity.
+
+   No better way was found, other than this fake write of register value,
+   to force GDB into writing register to target.  Is there any?  */
+
+void
+arc_linux_nat_target::low_prepare_to_resume (struct lwp_info *lwp)
+{
+  /* When new processes and threads are created we do not have the address
+     space for them and calling get_thread_regcache will cause an internal
+     error in GDB.  It looks like that checking for last_resume_kind is the
+     sensible way to determine processes for which we cannot get regcache.
+     Ultimately, a better way would be removing the need for
+     low_prepare_to_resume in the first place.  */
+  if (lwp->last_resume_kind == resume_stop)
+    return;
+
+  struct regcache *regcache = get_thread_regcache (this, lwp->ptid);
+  struct gdbarch *gdbarch = regcache->arch ();
+
+  /* Read current PC value, then write it back.  It is required to call
+     invalidate(), otherwise GDB will note that new value is equal to old
+     value and will skip write.  */
+  ULONGEST new_pc;
+  regcache_cooked_read_unsigned (regcache, gdbarch_pc_regnum (gdbarch),
+				 &new_pc);
+  regcache->invalidate (gdbarch_pc_regnum (gdbarch));
+  regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch),
+				  new_pc);
+}
+
+/* Fetch the thread-local storage pointer for libthread_db.  Note that
+   this function is not called from GDB, but is called from libthread_db.
+   This is required to debug multithreaded applications with NPTL.  */
+
+ps_err_e
+ps_get_thread_area (struct ps_prochandle *ph, lwpid_t lwpid, int idx,
+		    void **base)
+{
+  arc_linux_nat_debug_printf ("called");
+
+  if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0)
+    return PS_ERR;
+
+  /* IDX is the bias from the thread pointer to the beginning of the
+     thread descriptor.  It has to be subtracted due to implementation
+     quirks in libthread_db.  */
+  *base = (void *) ((char *) *base - idx);
+
+  return PS_OK;
+}
+
+/* Suppress warning from -Wmissing-prototypes.  */
+void _initialize_arc_linux_nat ();
+void
+_initialize_arc_linux_nat ()
+{
+  /* Register the target.  */
+  linux_target = &the_arc_linux_nat_target;
+  add_inf_child_target (&the_arc_linux_nat_target);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-linux-tdep.c ./gdb/arc-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-linux-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arc-linux-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,748 @@
+/* Target dependent code for GNU/Linux ARC.
+
+   Copyright 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* GDB header files.  */
+#include "defs.h"
+#include "linux-tdep.h"
+#include "objfiles.h"
+#include "opcode/arc.h"
+#include "osabi.h"
+#include "solib-svr4.h"
+#include "disasm.h"
+
+/* ARC header files.  */
+#include "opcodes/arc-dis.h"
+#include "arc-linux-tdep.h"
+#include "arc-tdep.h"
+#include "arch/arc.h"
+
+/* Print an "arc-linux" debug statement.  */
+
+#define arc_linux_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (arc_debug, "arc-linux", fmt, ##__VA_ARGS__)
+
+#define REGOFF(offset) (offset * ARC_REGISTER_SIZE)
+
+/* arc_linux_sc_reg_offsets[i] is the offset of register i in the `struct
+   sigcontext'.  Array index is an internal GDB register number, as defined in
+   arc-tdep.h:arc_regnum.
+
+   From <include/uapi/asm/sigcontext.h> and <include/uapi/asm/ptrace.h>.
+
+   The layout of this struct is tightly bound to "arc_regnum" enum
+   in arc-tdep.h.  Any change of order in there, must be reflected
+   here as well.  */
+static const int arc_linux_sc_reg_offsets[] = {
+  /* R0 - R12.  */
+  REGOFF (22), REGOFF (21), REGOFF (20), REGOFF (19),
+  REGOFF (18), REGOFF (17), REGOFF (16), REGOFF (15),
+  REGOFF (14), REGOFF (13), REGOFF (12), REGOFF (11),
+  REGOFF (10),
+
+  /* R13 - R25.  */
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER,
+
+  REGOFF (9),			/* R26 (GP) */
+  REGOFF (8),			/* FP */
+  REGOFF (23),			/* SP */
+  ARC_OFFSET_NO_REGISTER,	/* ILINK */
+  ARC_OFFSET_NO_REGISTER,	/* R30 */
+  REGOFF (7),			/* BLINK */
+
+  /* R32 - R59.  */
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER,
+
+  REGOFF (4),			/* LP_COUNT */
+  ARC_OFFSET_NO_REGISTER,	/* RESERVED */
+  ARC_OFFSET_NO_REGISTER,	/* LIMM */
+  ARC_OFFSET_NO_REGISTER,	/* PCL */
+
+  REGOFF (6),			/* PC  */
+  REGOFF (5),			/* STATUS32 */
+  REGOFF (2),			/* LP_START */
+  REGOFF (3),			/* LP_END */
+  REGOFF (1),			/* BTA */
+};
+
+/* arc_linux_core_reg_offsets[i] is the offset in the .reg section of GDB
+   regnum i.  Array index is an internal GDB register number, as defined in
+   arc-tdep.h:arc_regnum.
+
+   From include/uapi/asm/ptrace.h in the ARC Linux sources.  */
+
+/* The layout of this struct is tightly bound to "arc_regnum" enum
+   in arc-tdep.h.  Any change of order in there, must be reflected
+   here as well.  */
+static const int arc_linux_core_reg_offsets[] = {
+  /* R0 - R12.  */
+  REGOFF (22), REGOFF (21), REGOFF (20), REGOFF (19),
+  REGOFF (18), REGOFF (17), REGOFF (16), REGOFF (15),
+  REGOFF (14), REGOFF (13), REGOFF (12), REGOFF (11),
+  REGOFF (10),
+
+  /* R13 - R25.  */
+  REGOFF (37), REGOFF (36), REGOFF (35), REGOFF (34),
+  REGOFF (33), REGOFF (32), REGOFF (31), REGOFF (30),
+  REGOFF (29), REGOFF (28), REGOFF (27), REGOFF (26),
+  REGOFF (25),
+
+  REGOFF (9),			/* R26 (GP) */
+  REGOFF (8),			/* FP */
+  REGOFF (23),			/* SP */
+  ARC_OFFSET_NO_REGISTER,	/* ILINK */
+  ARC_OFFSET_NO_REGISTER,	/* R30 */
+  REGOFF (7),			/* BLINK */
+
+  /* R32 - R59.  */
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER,
+  ARC_OFFSET_NO_REGISTER,
+
+  REGOFF (4),			/* LP_COUNT */
+  ARC_OFFSET_NO_REGISTER,	/* RESERVED */
+  ARC_OFFSET_NO_REGISTER,	/* LIMM */
+  ARC_OFFSET_NO_REGISTER,	/* PCL */
+
+  REGOFF (39),			/* PC  */
+  REGOFF (5),			/* STATUS32 */
+  REGOFF (2),			/* LP_START */
+  REGOFF (3),			/* LP_END */
+  REGOFF (1),			/* BTA */
+  REGOFF (6)			/* ERET */
+};
+
+/* Is THIS_FRAME a sigtramp function - the function that returns from
+   signal handler into normal execution flow? This is the case if the PC is
+   either at the start of, or in the middle of the two instructions:
+
+     mov r8, __NR_rt_sigreturn ; __NR_rt_sigreturn == 139
+     trap_s 0 ; `swi' for ARC700
+
+   On ARC uClibc Linux this function is called __default_rt_sa_restorer.
+
+   Returns TRUE if this is a sigtramp frame.  */
+
+static bool
+arc_linux_is_sigtramp (frame_info_ptr this_frame)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  CORE_ADDR pc = get_frame_pc (this_frame);
+
+  arc_linux_debug_printf ("pc=%s", paddress(gdbarch, pc));
+
+  static const gdb_byte insns_be_hs[] = {
+    0x20, 0x8a, 0x12, 0xc2,	/* mov  r8,nr_rt_sigreturn */
+    0x78, 0x1e			/* trap_s 0 */
+  };
+  static const gdb_byte insns_be_700[] = {
+    0x20, 0x8a, 0x12, 0xc2,	/* mov  r8,nr_rt_sigreturn */
+    0x22, 0x6f, 0x00, 0x3f	/* swi */
+  };
+
+  gdb_byte arc_sigtramp_insns[sizeof (insns_be_700)];
+  size_t insns_sz;
+  if (arc_mach_is_arcv2 (gdbarch))
+    {
+      insns_sz = sizeof (insns_be_hs);
+      memcpy (arc_sigtramp_insns, insns_be_hs, insns_sz);
+    }
+  else
+    {
+      insns_sz = sizeof (insns_be_700);
+      memcpy (arc_sigtramp_insns, insns_be_700, insns_sz);
+    }
+  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
+    {
+      /* On little endian targets, ARC code section is in what is called
+	 "middle endian", where half-words are in the big-endian order,
+	 only bytes inside the halfwords are in the little endian order.
+	 As a result it is very easy to convert big endian instruction to
+	 little endian, since it is needed to swap bytes in the halfwords,
+	 so there is no need to have information on whether that is a
+	 4-byte instruction or 2-byte.  */
+      gdb_assert ((insns_sz % 2) == 0);
+      for (int i = 0; i < insns_sz; i += 2)
+	std::swap (arc_sigtramp_insns[i], arc_sigtramp_insns[i+1]);
+    }
+
+  gdb_byte buf[insns_sz];
+
+  /* Read the memory at the PC.  Since we are stopped, any breakpoint must
+     have been removed.  */
+  if (!safe_frame_unwind_memory (this_frame, pc, {buf, insns_sz}))
+    {
+      /* Failed to unwind frame.  */
+      return FALSE;
+    }
+
+  /* Is that code the sigtramp instruction sequence?  */
+  if (memcmp (buf, arc_sigtramp_insns, insns_sz) == 0)
+    return TRUE;
+
+  /* No - look one instruction earlier in the code...  */
+  if (!safe_frame_unwind_memory (this_frame, pc - 4, {buf, insns_sz}))
+    {
+      /* Failed to unwind frame.  */
+      return FALSE;
+    }
+
+  return (memcmp (buf, arc_sigtramp_insns, insns_sz) == 0);
+}
+
+/* Get sigcontext structure of sigtramp frame - it contains saved
+   registers of interrupted frame.
+
+   Stack pointer points to the rt_sigframe structure, and sigcontext can
+   be found as in:
+
+   struct rt_sigframe {
+     struct siginfo info;
+     struct ucontext uc;
+     ...
+   };
+
+   struct ucontext {
+     unsigned long uc_flags;
+     struct ucontext *uc_link;
+     stack_t uc_stack;
+     struct sigcontext uc_mcontext;
+     sigset_t uc_sigmask;
+   };
+
+   sizeof (struct siginfo) == 0x80
+   offsetof (struct ucontext, uc_mcontext) == 0x14
+
+   GDB cannot include linux headers and use offsetof () because those are
+   target headers and GDB might be built for a different run host.  There
+   doesn't seem to be an established mechanism to figure out those offsets
+   via gdbserver, so the only way is to hardcode values in the GDB,
+   meaning that GDB will be broken if values will change.  That seems to
+   be a very unlikely scenario and other arches (aarch64, alpha, amd64,
+   etc) in GDB hardcode values.  */
+
+static CORE_ADDR
+arc_linux_sigcontext_addr (frame_info_ptr this_frame)
+{
+  const int ucontext_offset = 0x80;
+  const int sigcontext_offset = 0x14;
+  return get_frame_sp (this_frame) + ucontext_offset + sigcontext_offset;
+}
+
+/* Implement the "cannot_fetch_register" gdbarch method.  */
+
+static int
+arc_linux_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
+{
+  /* Assume that register is readable if it is unknown.  */
+  switch (regnum)
+    {
+    case ARC_ILINK_REGNUM:
+    case ARC_RESERVED_REGNUM:
+    case ARC_LIMM_REGNUM:
+      return true;
+    case ARC_R30_REGNUM:
+    case ARC_R58_REGNUM:
+    case ARC_R59_REGNUM:
+      return !arc_mach_is_arcv2 (gdbarch);
+    }
+  return (regnum > ARC_BLINK_REGNUM) && (regnum < ARC_LP_COUNT_REGNUM);
+}
+
+/* Implement the "cannot_store_register" gdbarch method.  */
+
+static int
+arc_linux_cannot_store_register (struct gdbarch *gdbarch, int regnum)
+{
+  /* Assume that register is writable if it is unknown.  */
+  switch (regnum)
+    {
+    case ARC_ILINK_REGNUM:
+    case ARC_RESERVED_REGNUM:
+    case ARC_LIMM_REGNUM:
+    case ARC_PCL_REGNUM:
+      return true;
+    case ARC_R30_REGNUM:
+    case ARC_R58_REGNUM:
+    case ARC_R59_REGNUM:
+      return !arc_mach_is_arcv2 (gdbarch);
+    }
+  return (regnum > ARC_BLINK_REGNUM) && (regnum < ARC_LP_COUNT_REGNUM);
+}
+
+/* For ARC Linux, breakpoints use the 16-bit TRAP_S 1 instruction, which
+   is 0x3e78 (little endian) or 0x783e (big endian).  */
+
+static const gdb_byte arc_linux_trap_s_be[] = { 0x78, 0x3e };
+static const gdb_byte arc_linux_trap_s_le[] = { 0x3e, 0x78 };
+static const int trap_size = 2;   /* Number of bytes to insert "trap".  */
+
+/* Implement the "breakpoint_kind_from_pc" gdbarch method.  */
+
+static int
+arc_linux_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
+{
+  return trap_size;
+}
+
+/* Implement the "sw_breakpoint_from_kind" gdbarch method.  */
+
+static const gdb_byte *
+arc_linux_sw_breakpoint_from_kind (struct gdbarch *gdbarch,
+				   int kind, int *size)
+{
+  gdb_assert (kind == trap_size);
+  *size = kind;
+  return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
+	  ? arc_linux_trap_s_be
+	  : arc_linux_trap_s_le);
+}
+
+/* Check for an atomic sequence of instructions beginning with an
+   LLOCK instruction and ending with a SCOND instruction.
+
+   These patterns are hand coded in libc's (glibc and uclibc). Take
+   a look at [1] for instance:
+
+   main+14: llock   r2,[r0]
+   main+18: brne.nt r2,0,main+30
+   main+22: scond   r3,[r0]
+   main+26: bne     main+14
+   main+30: mov_s   r0,0
+
+   If such a sequence is found, attempt to step over it.
+   A breakpoint is placed at the end of the sequence.
+
+   This function expects the INSN to be a "llock(d)" instruction.
+
+   [1]
+   https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/tree/libc/ \
+     sysdeps/linux/arc/bits/atomic.h#n46
+   */
+
+static std::vector<CORE_ADDR>
+handle_atomic_sequence (arc_instruction insn, disassemble_info *di)
+{
+  const int atomic_seq_len = 24;    /* Instruction sequence length.  */
+  std::vector<CORE_ADDR> next_pcs;
+
+  /* Sanity check.  */
+  gdb_assert (insn.insn_class == LLOCK);
+
+  /* Data size we are dealing with: LLOCK vs. LLOCKD  */
+  arc_ldst_data_size llock_data_size_mode = insn.data_size_mode;
+  /* Indicator if any conditional branch is found in the sequence.  */
+  bool found_bc = false;
+  /* Becomes true if "LLOCK(D) .. SCOND(D)" sequence is found.  */
+  bool is_pattern_valid = false;
+
+  for (int insn_count = 0; insn_count < atomic_seq_len; ++insn_count)
+    {
+      arc_insn_decode (arc_insn_get_linear_next_pc (insn),
+		       di, arc_delayed_print_insn, &insn);
+
+      if (insn.insn_class == BRCC)
+	{
+	  /* If more than one conditional branch is found, this is not
+	     the pattern we are interested in.  */
+	  if (found_bc)
+	    break;
+	  found_bc = true;
+	  continue;
+	}
+
+      /* This is almost a happy ending.  */
+      if (insn.insn_class == SCOND)
+	{
+	  /* SCOND should match the LLOCK's data size.  */
+	  if (insn.data_size_mode == llock_data_size_mode)
+	    is_pattern_valid = true;
+	  break;
+	}
+    }
+
+  if (is_pattern_valid)
+    {
+      /* Get next instruction after scond(d).  There is no limm.  */
+      next_pcs.push_back (insn.address + insn.length);
+    }
+
+  return next_pcs;
+}
+
+/* Implement the "software_single_step" gdbarch method.  */
+
+static std::vector<CORE_ADDR>
+arc_linux_software_single_step (struct regcache *regcache)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
+  struct gdb_non_printing_memory_disassembler dis (gdbarch);
+
+  /* Read current instruction.  */
+  struct arc_instruction curr_insn;
+  arc_insn_decode (regcache_read_pc (regcache), dis.disasm_info (),
+		   arc_delayed_print_insn, &curr_insn);
+
+  if (curr_insn.insn_class == LLOCK)
+    return handle_atomic_sequence (curr_insn, dis.disasm_info ());
+
+  CORE_ADDR next_pc = arc_insn_get_linear_next_pc (curr_insn);
+  std::vector<CORE_ADDR> next_pcs;
+
+  /* For instructions with delay slots, the fall thru is not the
+     instruction immediately after the current instruction, but the one
+     after that.  */
+  if (curr_insn.has_delay_slot)
+    {
+      struct arc_instruction next_insn;
+      arc_insn_decode (next_pc, dis.disasm_info (), arc_delayed_print_insn,
+		       &next_insn);
+      next_pcs.push_back (arc_insn_get_linear_next_pc (next_insn));
+    }
+  else
+    next_pcs.push_back (next_pc);
+
+  ULONGEST status32;
+  regcache_cooked_read_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
+				 &status32);
+
+  if (curr_insn.is_control_flow)
+    {
+      CORE_ADDR branch_pc = arc_insn_get_branch_target (curr_insn);
+      if (branch_pc != next_pc)
+	next_pcs.push_back (branch_pc);
+    }
+  /* Is current instruction the last in a loop body?  */
+  else if (tdep->has_hw_loops)
+    {
+      /* If STATUS32.L is 1, then ZD-loops are disabled.  */
+      if ((status32 & ARC_STATUS32_L_MASK) == 0)
+	{
+	  ULONGEST lp_end, lp_start, lp_count;
+	  regcache_cooked_read_unsigned (regcache, ARC_LP_START_REGNUM,
+					 &lp_start);
+	  regcache_cooked_read_unsigned (regcache, ARC_LP_END_REGNUM, &lp_end);
+	  regcache_cooked_read_unsigned (regcache, ARC_LP_COUNT_REGNUM,
+					 &lp_count);
+
+	  arc_linux_debug_printf ("lp_start = %s, lp_end = %s, "
+				  "lp_count = %s, next_pc = %s",
+				  paddress (gdbarch, lp_start),
+				  paddress (gdbarch, lp_end),
+				  pulongest (lp_count),
+				  paddress (gdbarch, next_pc));
+
+	  if (next_pc == lp_end && lp_count > 1)
+	    {
+	      /* The instruction is in effect a jump back to the start of
+		 the loop.  */
+	      next_pcs.push_back (lp_start);
+	    }
+	}
+    }
+
+  /* Is this a delay slot?  Then next PC is in BTA register.  */
+  if ((status32 & ARC_STATUS32_DE_MASK) != 0)
+    {
+      ULONGEST bta;
+      regcache_cooked_read_unsigned (regcache, ARC_BTA_REGNUM, &bta);
+      next_pcs.push_back (bta);
+    }
+
+  return next_pcs;
+}
+
+/* Implement the "skip_solib_resolver" gdbarch method.
+
+   See glibc_skip_solib_resolver for details.  */
+
+static CORE_ADDR
+arc_linux_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  /* For uClibc 0.9.26+.
+
+     An unresolved PLT entry points to "__dl_linux_resolve", which calls
+     "_dl_linux_resolver" to do the resolving and then eventually jumps to
+     the function.
+
+     So we look for the symbol `_dl_linux_resolver', and if we are there,
+     gdb sets a breakpoint at the return address, and continues.  */
+  struct bound_minimal_symbol resolver
+    = lookup_minimal_symbol ("_dl_linux_resolver", NULL, NULL);
+
+  if (arc_debug)
+    {
+      if (resolver.minsym != nullptr)
+	{
+	  CORE_ADDR res_addr = resolver.value_address ();
+	  arc_linux_debug_printf ("pc = %s, resolver at %s",
+				  print_core_address (gdbarch, pc),
+				  print_core_address (gdbarch, res_addr));
+	}
+      else
+	arc_linux_debug_printf ("pc = %s, no resolver found",
+				print_core_address (gdbarch, pc));
+    }
+
+  if (resolver.minsym != nullptr && resolver.value_address () == pc)
+    {
+      /* Find the return address.  */
+      return frame_unwind_caller_pc (get_current_frame ());
+    }
+  else
+    {
+      /* No breakpoint required.  */
+      return 0;
+    }
+}
+
+/* Populate REGCACHE with register REGNUM from BUF.  */
+
+static void
+supply_register (struct regcache *regcache, int regnum, const gdb_byte *buf)
+{
+  /* Skip non-existing registers.  */
+  if ((arc_linux_core_reg_offsets[regnum] == ARC_OFFSET_NO_REGISTER))
+    return;
+
+  regcache->raw_supply (regnum, buf + arc_linux_core_reg_offsets[regnum]);
+}
+
+void
+arc_linux_supply_gregset (const struct regset *regset,
+			  struct regcache *regcache,
+			  int regnum, const void *gregs, size_t size)
+{
+  static_assert (ARC_LAST_REGNUM
+		     < ARRAY_SIZE (arc_linux_core_reg_offsets));
+
+  const bfd_byte *buf = (const bfd_byte *) gregs;
+
+  /* REGNUM == -1 means writing all the registers.  */
+  if (regnum == -1)
+    for (int reg = 0; reg <= ARC_LAST_REGNUM; reg++)
+      supply_register (regcache, reg, buf);
+  else if (regnum <= ARC_LAST_REGNUM)
+    supply_register (regcache, regnum, buf);
+  else
+    gdb_assert_not_reached ("Invalid regnum in arc_linux_supply_gregset.");
+}
+
+void
+arc_linux_supply_v2_regset (const struct regset *regset,
+			    struct regcache *regcache, int regnum,
+			    const void *v2_regs, size_t size)
+{
+  const bfd_byte *buf = (const bfd_byte *) v2_regs;
+
+  /* user_regs_arcv2 is defined in linux arch/arc/include/uapi/asm/ptrace.h.  */
+  if (regnum == -1 || regnum == ARC_R30_REGNUM)
+    regcache->raw_supply (ARC_R30_REGNUM, buf);
+  if (regnum == -1 || regnum == ARC_R58_REGNUM)
+    regcache->raw_supply (ARC_R58_REGNUM, buf + REGOFF (1));
+  if (regnum == -1 || regnum == ARC_R59_REGNUM)
+    regcache->raw_supply (ARC_R59_REGNUM, buf + REGOFF (2));
+}
+
+/* Populate BUF with register REGNUM from the REGCACHE.  */
+
+static void
+collect_register (const struct regcache *regcache, struct gdbarch *gdbarch,
+		  int regnum, gdb_byte *buf)
+{
+  int offset;
+
+  /* Skip non-existing registers.  */
+  if (arc_linux_core_reg_offsets[regnum] == ARC_OFFSET_NO_REGISTER)
+    return;
+
+  /* The address where the execution has stopped is in pseudo-register
+     STOP_PC.  However, when kernel code is returning from the exception,
+     it uses the value from ERET register.  Since, TRAP_S (the breakpoint
+     instruction) commits, the ERET points to the next instruction.  In
+     other words: ERET != STOP_PC.  To jump back from the kernel code to
+     the correct address, ERET must be overwritten by GDB's STOP_PC.  Else,
+     the program will continue at the address after the current instruction.
+     */
+  if (regnum == gdbarch_pc_regnum (gdbarch))
+    offset = arc_linux_core_reg_offsets[ARC_ERET_REGNUM];
+  else
+    offset = arc_linux_core_reg_offsets[regnum];
+  regcache->raw_collect (regnum, buf + offset);
+}
+
+void
+arc_linux_collect_gregset (const struct regset *regset,
+			   const struct regcache *regcache,
+			   int regnum, void *gregs, size_t size)
+{
+  static_assert (ARC_LAST_REGNUM
+		     < ARRAY_SIZE (arc_linux_core_reg_offsets));
+
+  gdb_byte *buf = (gdb_byte *) gregs;
+  struct gdbarch *gdbarch = regcache->arch ();
+
+  /* REGNUM == -1 means writing all the registers.  */
+  if (regnum == -1)
+    for (int reg = 0; reg <= ARC_LAST_REGNUM; reg++)
+      collect_register (regcache, gdbarch, reg, buf);
+  else if (regnum <= ARC_LAST_REGNUM)
+    collect_register (regcache, gdbarch, regnum, buf);
+  else
+    gdb_assert_not_reached ("Invalid regnum in arc_linux_collect_gregset.");
+}
+
+void
+arc_linux_collect_v2_regset (const struct regset *regset,
+			     const struct regcache *regcache, int regnum,
+			     void *v2_regs, size_t size)
+{
+  bfd_byte *buf = (bfd_byte *) v2_regs;
+
+  if (regnum == -1 || regnum == ARC_R30_REGNUM)
+    regcache->raw_collect (ARC_R30_REGNUM, buf);
+  if (regnum == -1 || regnum == ARC_R58_REGNUM)
+    regcache->raw_collect (ARC_R58_REGNUM, buf + REGOFF (1));
+  if (regnum == -1 || regnum == ARC_R59_REGNUM)
+    regcache->raw_collect (ARC_R59_REGNUM, buf + REGOFF (2));
+}
+
+/* Linux regset definitions.  */
+
+static const struct regset arc_linux_gregset = {
+  arc_linux_core_reg_offsets,
+  arc_linux_supply_gregset,
+  arc_linux_collect_gregset,
+};
+
+static const struct regset arc_linux_v2_regset = {
+  NULL,
+  arc_linux_supply_v2_regset,
+  arc_linux_collect_v2_regset,
+};
+
+/* Implement the `iterate_over_regset_sections` gdbarch method.  */
+
+static void
+arc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
+					iterate_over_regset_sections_cb *cb,
+					void *cb_data,
+					const struct regcache *regcache)
+{
+  /* There are 40 registers in Linux user_regs_struct, although some of
+     them are now just a mere paddings, kept to maintain binary
+     compatibility with older tools.  */
+  const int sizeof_gregset = 40 * ARC_REGISTER_SIZE;
+
+  cb (".reg", sizeof_gregset, sizeof_gregset, &arc_linux_gregset, NULL,
+      cb_data);
+  cb (".reg-arc-v2", ARC_LINUX_SIZEOF_V2_REGSET, ARC_LINUX_SIZEOF_V2_REGSET,
+      &arc_linux_v2_regset, NULL, cb_data);
+}
+
+/* Implement the `core_read_description` gdbarch method.  */
+
+static const struct target_desc *
+arc_linux_core_read_description (struct gdbarch *gdbarch,
+				 struct target_ops *target,
+				 bfd *abfd)
+{
+  arc_arch_features features
+    = arc_arch_features_create (abfd,
+				gdbarch_bfd_arch_info (gdbarch)->mach);
+  return arc_lookup_target_description (features);
+}
+
+/* Initialization specific to Linux environment.  */
+
+static void
+arc_linux_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
+
+  arc_linux_debug_printf ("GNU/Linux OS/ABI initialization.");
+
+  /* Fill in target-dependent info in ARC-private structure.  */
+  tdep->is_sigtramp = arc_linux_is_sigtramp;
+  tdep->sigcontext_addr = arc_linux_sigcontext_addr;
+  tdep->sc_reg_offset = arc_linux_sc_reg_offsets;
+  tdep->sc_num_regs = ARRAY_SIZE (arc_linux_sc_reg_offsets);
+
+  /* If we are using Linux, we have in uClibc
+     (libc/sysdeps/linux/arc/bits/setjmp.h):
+
+     typedef int __jmp_buf[13+1+1+1];    //r13-r25, fp, sp, blink
+
+     Where "blink" is a stored PC of a caller function.
+   */
+  tdep->jb_pc = 15;
+
+  linux_init_abi (info, gdbarch, 0);
+
+  /* Set up target dependent GDB architecture entries.  */
+  set_gdbarch_cannot_fetch_register (gdbarch, arc_linux_cannot_fetch_register);
+  set_gdbarch_cannot_store_register (gdbarch, arc_linux_cannot_store_register);
+  set_gdbarch_breakpoint_kind_from_pc (gdbarch,
+				       arc_linux_breakpoint_kind_from_pc);
+  set_gdbarch_sw_breakpoint_from_kind (gdbarch,
+				       arc_linux_sw_breakpoint_from_kind);
+  set_gdbarch_fetch_tls_load_module_address (gdbarch,
+					     svr4_fetch_objfile_link_map);
+  set_gdbarch_software_single_step (gdbarch, arc_linux_software_single_step);
+  set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
+  set_gdbarch_skip_solib_resolver (gdbarch, arc_linux_skip_solib_resolver);
+  set_gdbarch_iterate_over_regset_sections
+    (gdbarch, arc_linux_iterate_over_regset_sections);
+  set_gdbarch_core_read_description (gdbarch, arc_linux_core_read_description);
+
+  /* GNU/Linux uses SVR4-style shared libraries, with 32-bit ints, longs
+     and pointers (ILP32).  */
+  set_solib_svr4_fetch_link_map_offsets (gdbarch,
+					 linux_ilp32_fetch_link_map_offsets);
+}
+
+/* Suppress warning from -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_arc_linux_tdep;
+
+void
+_initialize_arc_linux_tdep ()
+{
+  gdbarch_register_osabi (bfd_arch_arc, 0, GDB_OSABI_LINUX,
+			  arc_linux_init_osabi);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-linux-tdep.h ./gdb/arc-linux-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-linux-tdep.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arc-linux-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,52 @@
+/* Target dependent code for GNU/Linux ARC.
+
+   Copyright 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ARC_LINUX_TDEP_H
+#define ARC_LINUX_TDEP_H
+
+#include "gdbarch.h"
+#include "regset.h"
+
+#define ARC_LINUX_SIZEOF_V2_REGSET (3 * ARC_REGISTER_SIZE)
+
+/* Reads registers from the NT_PRSTATUS data array into the regcache.  */
+
+void arc_linux_supply_gregset (const struct regset *regset,
+			       struct regcache *regcache, int regnum,
+			       const void *gregs, size_t size);
+
+/* Reads registers from the NT_ARC_V2 data array into the regcache.  */
+
+void arc_linux_supply_v2_regset (const struct regset *regset,
+				 struct regcache *regcache, int regnum,
+				 const void *v2_regs, size_t size);
+
+/* Writes registers from the regcache into the NT_PRSTATUS data array.  */
+
+void arc_linux_collect_gregset (const struct regset *regset,
+				const struct regcache *regcache,
+				int regnum, void *gregs, size_t size);
+
+/* Writes registers from the regcache into the NT_ARC_V2 data array.  */
+
+void arc_linux_collect_v2_regset (const struct regset *regset,
+				  const struct regcache *regcache,
+				  int regnum, void *v2_regs, size_t size);
+
+#endif /* ARC_LINUX_TDEP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-newlib-tdep.c ./gdb/arc-newlib-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-newlib-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arc-newlib-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Newlib ARC.
 
-   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+   Copyright (C) 2016-2024 Free Software Foundation, Inc.
    Contributed by Synopsys Inc.
 
    This file is part of GDB.
@@ -24,15 +24,19 @@
 #include "arc-tdep.h"
 #include "osabi.h"
 
+/* Print an "arc-newlib" debug statement.  */
+
+#define arc_newlib_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (arc_debug, "arc-newlib", fmt, ##__VA_ARGS__)
+
 /* Implement the 'init_osabi' method of struct gdb_osabi_handler.  */
 
 static void
 arc_newlib_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  if (arc_debug)
-    debug_printf ("arc-newlib: Initialization.\n");
+  arc_newlib_debug_printf ("Initialization.");
 
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
 
   /* Offset of original PC in longjmp jump buffer (in registers).  Value of PC
      offset can be found in newlib/libc/machine/arc/setjmp.S.  */
@@ -44,8 +48,7 @@ arc_newlib_init_osabi (struct gdbarch_in
 static enum gdb_osabi
 arc_newlib_osabi_sniffer (bfd *abfd)
 {
-  if (arc_debug)
-    debug_printf ("arc-newlib: OS/ABI sniffer.\n");
+  arc_newlib_debug_printf ("OS/ABI sniffer.");
 
   /* crt0.S in libgloss for ARC defines .ivt section for interrupt handlers.
      If this section is not present then this is likely not a newlib - could be
@@ -56,8 +59,9 @@ arc_newlib_osabi_sniffer (bfd *abfd)
     return GDB_OSABI_UNKNOWN;
 }
 
+void _initialize_arc_newlib_tdep ();
 void
-_initialize_arc_newlib_tdep (void)
+_initialize_arc_newlib_tdep ()
 {
   gdbarch_register_osabi_sniffer (bfd_arch_arc, bfd_target_elf_flavour,
 				  arc_newlib_osabi_sniffer);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-tdep.c ./gdb/arc-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arc-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target dependent code for ARC architecture, for GDB.
 
-   Copyright 2005-2019 Free Software Foundation, Inc.
+   Copyright 2005-2024 Free Software Foundation, Inc.
    Contributed by Synopsys Inc.
 
    This file is part of GDB.
@@ -21,27 +21,30 @@
 /* GDB header files.  */
 #include "defs.h"
 #include "arch-utils.h"
+#include "elf-bfd.h"
 #include "disasm.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "frame-base.h"
 #include "frame-unwind.h"
 #include "gdbcore.h"
+#include "inferior.h"
+#include "reggroups.h"
 #include "gdbcmd.h"
 #include "objfiles.h"
+#include "osabi.h"
 #include "prologue-value.h"
+#include "target-descriptions.h"
 #include "trad-frame.h"
 
 /* ARC header files.  */
 #include "opcode/arc.h"
 #include "opcodes/arc-dis.h"
 #include "arc-tdep.h"
+#include "arch/arc.h"
 
 /* Standard headers.  */
 #include <algorithm>
-
-/* Default target descriptions.  */
-#include "features/arc-v2.c"
-#include "features/arc-arcompact.c"
+#include <sstream>
 
 /* The frame unwind cache for ARC.  */
 
@@ -81,68 +84,219 @@ struct arc_frame_cache
   /* Store addresses for registers saved in prologue.  During prologue analysis
      GDB stores offsets relatively to "old SP", then after old SP is evaluated,
      offsets are replaced with absolute addresses.  */
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
 /* Global debug flag.  */
 
-int arc_debug;
+bool arc_debug;
 
 /* List of "maintenance print arc" commands.  */
 
 static struct cmd_list_element *maintenance_print_arc_list = NULL;
 
-/* XML target description features.  */
+/* A set of registers that we expect to find in a tdesc_feature.  These
+   are used in ARC_TDESC_INIT when processing the target description.  */
 
-static const char core_v2_feature_name[] = "org.gnu.gdb.arc.core.v2";
-static const char
-  core_reduced_v2_feature_name[] = "org.gnu.gdb.arc.core-reduced.v2";
-static const char
-  core_arcompact_feature_name[] = "org.gnu.gdb.arc.core.arcompact";
-static const char aux_minimal_feature_name[] = "org.gnu.gdb.arc.aux-minimal";
-
-/* XML target description known registers.  */
-
-static const char *const core_v2_register_names[] = {
-  "r0", "r1", "r2", "r3",
-  "r4", "r5", "r6", "r7",
-  "r8", "r9", "r10", "r11",
-  "r12", "r13", "r14", "r15",
-  "r16", "r17", "r18", "r19",
-  "r20", "r21", "r22", "r23",
-  "r24", "r25", "gp", "fp",
-  "sp", "ilink", "r30", "blink",
-  "r32", "r33", "r34", "r35",
-  "r36", "r37", "r38", "r39",
-  "r40", "r41", "r42", "r43",
-  "r44", "r45", "r46", "r47",
-  "r48", "r49", "r50", "r51",
-  "r52", "r53", "r54", "r55",
-  "r56", "r57", "accl", "acch",
-  "lp_count", "reserved", "limm", "pcl",
+struct arc_register_feature
+{
+  /* Information for a single register.  */
+  struct register_info
+  {
+    /* The GDB register number for this register.  */
+    int regnum;
+
+    /* List of names for this register.  The first name in this list is the
+       preferred name, the name GDB will use when describing this register.  */
+    std::vector<const char *> names;
+
+    /* When true, this register must be present in this feature set.  */
+    bool required_p;
+  };
+
+  /* The name for this feature.  This is the name used to find this feature
+     within the target description.  */
+  const char *name;
+
+  /* List of all the registers that we expect to encounter in this register
+     set.  */
+  std::vector<struct register_info> registers;
 };
 
-static const char *const aux_minimal_register_names[] = {
-  "pc", "status32",
+/* Obsolete feature names for backward compatibility.  */
+static const char *ARC_CORE_V1_OBSOLETE_FEATURE_NAME
+  = "org.gnu.gdb.arc.core.arcompact";
+static const char *ARC_CORE_V2_OBSOLETE_FEATURE_NAME
+  = "org.gnu.gdb.arc.core.v2";
+static const char *ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME
+  = "org.gnu.gdb.arc.core-reduced.v2";
+static const char *ARC_AUX_OBSOLETE_FEATURE_NAME
+  = "org.gnu.gdb.arc.aux-minimal";
+/* Modern feature names.  */
+static const char *ARC_CORE_FEATURE_NAME = "org.gnu.gdb.arc.core";
+static const char *ARC_AUX_FEATURE_NAME = "org.gnu.gdb.arc.aux";
+
+/* ARCv1 (ARC600, ARC601, ARC700) general core registers feature set.
+   See also arc_update_acc_reg_names() for "accl/acch" names.  */
+
+static struct arc_register_feature arc_v1_core_reg_feature =
+{
+  ARC_CORE_FEATURE_NAME,
+  {
+    { ARC_R0_REGNUM + 0, { "r0" }, true },
+    { ARC_R0_REGNUM + 1, { "r1" }, true },
+    { ARC_R0_REGNUM + 2, { "r2" }, true },
+    { ARC_R0_REGNUM + 3, { "r3" }, true },
+    { ARC_R0_REGNUM + 4, { "r4" }, false },
+    { ARC_R0_REGNUM + 5, { "r5" }, false },
+    { ARC_R0_REGNUM + 6, { "r6" }, false },
+    { ARC_R0_REGNUM + 7, { "r7" }, false },
+    { ARC_R0_REGNUM + 8, { "r8" }, false },
+    { ARC_R0_REGNUM + 9, { "r9" }, false },
+    { ARC_R0_REGNUM + 10, { "r10" }, true },
+    { ARC_R0_REGNUM + 11, { "r11" }, true },
+    { ARC_R0_REGNUM + 12, { "r12" }, true },
+    { ARC_R0_REGNUM + 13, { "r13" }, true },
+    { ARC_R0_REGNUM + 14, { "r14" }, true },
+    { ARC_R0_REGNUM + 15, { "r15" }, true },
+    { ARC_R0_REGNUM + 16, { "r16" }, false },
+    { ARC_R0_REGNUM + 17, { "r17" }, false },
+    { ARC_R0_REGNUM + 18, { "r18" }, false },
+    { ARC_R0_REGNUM + 19, { "r19" }, false },
+    { ARC_R0_REGNUM + 20, { "r20" }, false },
+    { ARC_R0_REGNUM + 21, { "r21" }, false },
+    { ARC_R0_REGNUM + 22, { "r22" }, false },
+    { ARC_R0_REGNUM + 23, { "r23" }, false },
+    { ARC_R0_REGNUM + 24, { "r24" }, false },
+    { ARC_R0_REGNUM + 25, { "r25" }, false },
+    { ARC_R0_REGNUM + 26, { "gp" }, true },
+    { ARC_R0_REGNUM + 27, { "fp" }, true },
+    { ARC_R0_REGNUM + 28, { "sp" }, true },
+    { ARC_R0_REGNUM + 29, { "ilink1" }, false },
+    { ARC_R0_REGNUM + 30, { "ilink2" }, false },
+    { ARC_R0_REGNUM + 31, { "blink" }, true },
+    { ARC_R0_REGNUM + 32, { "r32" }, false },
+    { ARC_R0_REGNUM + 33, { "r33" }, false },
+    { ARC_R0_REGNUM + 34, { "r34" }, false },
+    { ARC_R0_REGNUM + 35, { "r35" }, false },
+    { ARC_R0_REGNUM + 36, { "r36" }, false },
+    { ARC_R0_REGNUM + 37, { "r37" }, false },
+    { ARC_R0_REGNUM + 38, { "r38" }, false },
+    { ARC_R0_REGNUM + 39, { "r39" }, false },
+    { ARC_R0_REGNUM + 40, { "r40" }, false },
+    { ARC_R0_REGNUM + 41, { "r41" }, false },
+    { ARC_R0_REGNUM + 42, { "r42" }, false },
+    { ARC_R0_REGNUM + 43, { "r43" }, false },
+    { ARC_R0_REGNUM + 44, { "r44" }, false },
+    { ARC_R0_REGNUM + 45, { "r45" }, false },
+    { ARC_R0_REGNUM + 46, { "r46" }, false },
+    { ARC_R0_REGNUM + 47, { "r47" }, false },
+    { ARC_R0_REGNUM + 48, { "r48" }, false },
+    { ARC_R0_REGNUM + 49, { "r49" }, false },
+    { ARC_R0_REGNUM + 50, { "r50" }, false },
+    { ARC_R0_REGNUM + 51, { "r51" }, false },
+    { ARC_R0_REGNUM + 52, { "r52" }, false },
+    { ARC_R0_REGNUM + 53, { "r53" }, false },
+    { ARC_R0_REGNUM + 54, { "r54" }, false },
+    { ARC_R0_REGNUM + 55, { "r55" }, false },
+    { ARC_R0_REGNUM + 56, { "r56" }, false },
+    { ARC_R0_REGNUM + 57, { "r57" }, false },
+    { ARC_R0_REGNUM + 58, { "r58", "accl" }, false },
+    { ARC_R0_REGNUM + 59, { "r59", "acch" }, false },
+    { ARC_R0_REGNUM + 60, { "lp_count" }, false },
+    { ARC_R0_REGNUM + 61, { "reserved" }, false },
+    { ARC_R0_REGNUM + 62, { "limm" }, false },
+    { ARC_R0_REGNUM + 63, { "pcl" }, true }
+  }
 };
 
-static const char *const core_arcompact_register_names[] = {
-  "r0", "r1", "r2", "r3",
-  "r4", "r5", "r6", "r7",
-  "r8", "r9", "r10", "r11",
-  "r12", "r13", "r14", "r15",
-  "r16", "r17", "r18", "r19",
-  "r20", "r21", "r22", "r23",
-  "r24", "r25", "gp", "fp",
-  "sp", "ilink1", "ilink2", "blink",
-  "r32", "r33", "r34", "r35",
-  "r36", "r37", "r38", "r39",
-  "r40", "r41", "r42", "r43",
-  "r44", "r45", "r46", "r47",
-  "r48", "r49", "r50", "r51",
-  "r52", "r53", "r54", "r55",
-  "r56", "r57", "r58", "r59",
-  "lp_count", "reserved", "limm", "pcl",
+/* ARCv2 (ARCHS) general core registers feature set.  See also
+   arc_update_acc_reg_names() for "accl/acch" names.  */
+
+static struct arc_register_feature arc_v2_core_reg_feature =
+{
+  ARC_CORE_FEATURE_NAME,
+  {
+    { ARC_R0_REGNUM + 0, { "r0" }, true },
+    { ARC_R0_REGNUM + 1, { "r1" }, true },
+    { ARC_R0_REGNUM + 2, { "r2" }, true },
+    { ARC_R0_REGNUM + 3, { "r3" }, true },
+    { ARC_R0_REGNUM + 4, { "r4" }, false },
+    { ARC_R0_REGNUM + 5, { "r5" }, false },
+    { ARC_R0_REGNUM + 6, { "r6" }, false },
+    { ARC_R0_REGNUM + 7, { "r7" }, false },
+    { ARC_R0_REGNUM + 8, { "r8" }, false },
+    { ARC_R0_REGNUM + 9, { "r9" }, false },
+    { ARC_R0_REGNUM + 10, { "r10" }, true },
+    { ARC_R0_REGNUM + 11, { "r11" }, true },
+    { ARC_R0_REGNUM + 12, { "r12" }, true },
+    { ARC_R0_REGNUM + 13, { "r13" }, true },
+    { ARC_R0_REGNUM + 14, { "r14" }, true },
+    { ARC_R0_REGNUM + 15, { "r15" }, true },
+    { ARC_R0_REGNUM + 16, { "r16" }, false },
+    { ARC_R0_REGNUM + 17, { "r17" }, false },
+    { ARC_R0_REGNUM + 18, { "r18" }, false },
+    { ARC_R0_REGNUM + 19, { "r19" }, false },
+    { ARC_R0_REGNUM + 20, { "r20" }, false },
+    { ARC_R0_REGNUM + 21, { "r21" }, false },
+    { ARC_R0_REGNUM + 22, { "r22" }, false },
+    { ARC_R0_REGNUM + 23, { "r23" }, false },
+    { ARC_R0_REGNUM + 24, { "r24" }, false },
+    { ARC_R0_REGNUM + 25, { "r25" }, false },
+    { ARC_R0_REGNUM + 26, { "gp" }, true },
+    { ARC_R0_REGNUM + 27, { "fp" }, true },
+    { ARC_R0_REGNUM + 28, { "sp" }, true },
+    { ARC_R0_REGNUM + 29, { "ilink" }, false },
+    { ARC_R0_REGNUM + 30, { "r30" }, true },
+    { ARC_R0_REGNUM + 31, { "blink" }, true },
+    { ARC_R0_REGNUM + 32, { "r32" }, false },
+    { ARC_R0_REGNUM + 33, { "r33" }, false },
+    { ARC_R0_REGNUM + 34, { "r34" }, false },
+    { ARC_R0_REGNUM + 35, { "r35" }, false },
+    { ARC_R0_REGNUM + 36, { "r36" }, false },
+    { ARC_R0_REGNUM + 37, { "r37" }, false },
+    { ARC_R0_REGNUM + 38, { "r38" }, false },
+    { ARC_R0_REGNUM + 39, { "r39" }, false },
+    { ARC_R0_REGNUM + 40, { "r40" }, false },
+    { ARC_R0_REGNUM + 41, { "r41" }, false },
+    { ARC_R0_REGNUM + 42, { "r42" }, false },
+    { ARC_R0_REGNUM + 43, { "r43" }, false },
+    { ARC_R0_REGNUM + 44, { "r44" }, false },
+    { ARC_R0_REGNUM + 45, { "r45" }, false },
+    { ARC_R0_REGNUM + 46, { "r46" }, false },
+    { ARC_R0_REGNUM + 47, { "r47" }, false },
+    { ARC_R0_REGNUM + 48, { "r48" }, false },
+    { ARC_R0_REGNUM + 49, { "r49" }, false },
+    { ARC_R0_REGNUM + 50, { "r50" }, false },
+    { ARC_R0_REGNUM + 51, { "r51" }, false },
+    { ARC_R0_REGNUM + 52, { "r52" }, false },
+    { ARC_R0_REGNUM + 53, { "r53" }, false },
+    { ARC_R0_REGNUM + 54, { "r54" }, false },
+    { ARC_R0_REGNUM + 55, { "r55" }, false },
+    { ARC_R0_REGNUM + 56, { "r56" }, false },
+    { ARC_R0_REGNUM + 57, { "r57" }, false },
+    { ARC_R0_REGNUM + 58, { "r58", "accl" }, false },
+    { ARC_R0_REGNUM + 59, { "r59", "acch" }, false },
+    { ARC_R0_REGNUM + 60, { "lp_count" }, false },
+    { ARC_R0_REGNUM + 61, { "reserved" }, false },
+    { ARC_R0_REGNUM + 62, { "limm" }, false },
+    { ARC_R0_REGNUM + 63, { "pcl" }, true }
+  }
+};
+
+/* The common auxiliary registers feature set.  The REGNUM field
+   must match the ARC_REGNUM enum in arc-tdep.h.  */
+
+static const struct arc_register_feature arc_common_aux_reg_feature =
+{
+  ARC_AUX_FEATURE_NAME,
+  {
+    { ARC_FIRST_AUX_REGNUM + 0, { "pc" }, true },
+    { ARC_FIRST_AUX_REGNUM + 1, { "status32" }, true },
+    { ARC_FIRST_AUX_REGNUM + 2, { "lp_start" }, false },
+    { ARC_FIRST_AUX_REGNUM + 3, { "lp_end" }, false },
+    { ARC_FIRST_AUX_REGNUM + 4, { "bta" }, false }
+  }
 };
 
 static char *arc_disassembler_options = NULL;
@@ -168,7 +322,7 @@ arc_insn_get_operand_value (const struct
       return insn.operands[operand_num].value;
     default:
       /* Value in instruction is a register number.  */
-      struct regcache *regcache = get_current_regcache ();
+      regcache *regcache = get_thread_regcache (inferior_thread ());
       ULONGEST value;
       regcache_cooked_read_unsigned (regcache,
 				     insn.operands[operand_num].value,
@@ -190,14 +344,14 @@ arc_insn_get_operand_value_signed (const
       /* Convert unsigned raw value to signed one.  This assumes 2's
 	 complement arithmetic, but so is the LONG_MIN value from generic
 	 defs.h and that assumption is true for ARC.  */
-      gdb_static_assert (sizeof (insn.limm_value) == sizeof (int));
+      static_assert (sizeof (insn.limm_value) == sizeof (int));
       return (((LONGEST) insn.limm_value) ^ INT_MIN) - INT_MIN;
     case ARC_OPERAND_KIND_SHIMM:
       /* Sign conversion has been done by binutils.  */
       return insn.operands[operand_num].value;
     default:
       /* Value in instruction is a register number.  */
-      struct regcache *regcache = get_current_regcache ();
+      regcache *regcache = get_thread_regcache (inferior_thread ());
       LONGEST value;
       regcache_cooked_read_signed (regcache,
 				   insn.operands[operand_num].value,
@@ -282,20 +436,20 @@ arc_insn_get_branch_target (const struct
   /* JLI and EI depend on optional AUX registers.  Not supported right now.  */
   else if (insn.insn_class == JLI)
     {
-      fprintf_unfiltered (gdb_stderr,
-			  "JLI_S instruction is not supported by the GDB.");
+      gdb_printf (gdb_stderr,
+		  "JLI_S instruction is not supported by the GDB.");
       return 0;
     }
   else if (insn.insn_class == EI)
     {
-      fprintf_unfiltered (gdb_stderr,
-			  "EI_S instruction is not supported by the GDB.");
+      gdb_printf (gdb_stderr,
+		  "EI_S instruction is not supported by the GDB.");
       return 0;
     }
   /* LEAVE_S: PC = BLINK.  */
   else if (insn.insn_class == LEAVE)
     {
-      struct regcache *regcache = get_current_regcache ();
+      regcache *regcache = get_thread_regcache (inferior_thread ());
       ULONGEST value;
       regcache_cooked_read_unsigned (regcache, ARC_BLINK_REGNUM, &value);
       return value;
@@ -337,7 +491,7 @@ arc_insn_get_branch_target (const struct
 static void
 arc_insn_dump (const struct arc_instruction &insn)
 {
-  struct gdbarch *gdbarch = target_gdbarch ();
+  struct gdbarch *gdbarch = current_inferior ()->arch ();
 
   arc_print ("Dumping arc_instruction at %s\n",
 	     paddress (gdbarch, insn.address));
@@ -449,9 +603,8 @@ arc_write_pc (struct regcache *regcache,
 {
   struct gdbarch *gdbarch = regcache->arch ();
 
-  if (arc_debug)
-    debug_printf ("arc: Writing PC, new value=%s\n",
-		  paddress (gdbarch, new_pc));
+  arc_debug_printf ("Writing PC, new value=%s",
+		    paddress (gdbarch, new_pc));
 
   regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch),
 				  new_pc);
@@ -460,16 +613,12 @@ arc_write_pc (struct regcache *regcache,
   regcache_cooked_read_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
 				 &status32);
 
-  /* Mask for DE bit is 0x40.  */
-  if (status32 & 0x40)
+  if ((status32 & ARC_STATUS32_DE_MASK) != 0)
     {
-      if (arc_debug)
-	{
-	  debug_printf ("arc: Changing PC while in delay slot.  Will "
+      arc_debug_printf ("Changing PC while in delay slot.  Will "
 			"reset STATUS32.DE bit to zero.  Value of STATUS32 "
-			"register is 0x%s\n",
+			"register is 0x%s",
 			phex (status32, ARC_REGISTER_SIZE));
-	}
 
       /* Reset bit and write to the cache.  */
       status32 &= ~0x40;
@@ -524,35 +673,35 @@ arc_virtual_frame_pointer (struct gdbarc
    The stack grows downward, so SP points below FP in memory; SP always
    points to the last used word on the stack, not the first one.
 
-                      |                       |   |
-                      |      arg word N       |   | caller's
-                      |           :           |   | frame
-                      |      arg word 10      |   |
-                      |      arg word 9       |   |
-          old SP ---> +-----------------------+ --+
-                      |                       |   |
-                      |      callee-saved     |   |
-                      |       registers       |   |
-                      |  including fp, blink  |   |
-                      |                       |   | callee's
-          new FP ---> +-----------------------+   | frame
-                      |                       |   |
-                      |         local         |   |
-                      |       variables       |   |
-                      |                       |   |
-                      |       register        |   |
-                      |      spill area       |   |
-                      |                       |   |
-                      |     outgoing args     |   |
-                      |                       |   |
-          new SP ---> +-----------------------+ --+
-                      |                       |
-                      |         unused        |
-                      |                       |
-                                  |
-                                  |
-                                  V
-                              downwards
+		      |                       |   |
+		      |      arg word N       |   | caller's
+		      |           :           |   | frame
+		      |      arg word 10      |   |
+		      |      arg word 9       |   |
+	  old SP ---> +-----------------------+ --+
+		      |                       |   |
+		      |      callee-saved     |   |
+		      |       registers       |   |
+		      |  including fp, blink  |   |
+		      |                       |   | callee's
+	  new FP ---> +-----------------------+   | frame
+		      |                       |   |
+		      |         local         |   |
+		      |       variables       |   |
+		      |                       |   |
+		      |       register        |   |
+		      |      spill area       |   |
+		      |                       |   |
+		      |     outgoing args     |   |
+		      |                       |   |
+	  new SP ---> +-----------------------+ --+
+		      |                       |
+		      |         unused        |
+		      |                       |
+				  |
+				  |
+				  V
+			      downwards
 
    The list of arguments to be passed to a function is considered to be a
    sequence of _N_ words (as though all the parameters were stored in order in
@@ -583,8 +732,7 @@ arc_push_dummy_call (struct gdbarch *gdb
 		     function_call_return_method return_method,
 		     CORE_ADDR struct_addr)
 {
-  if (arc_debug)
-    debug_printf ("arc: push_dummy_call (nargs = %d)\n", nargs);
+  arc_debug_printf ("nargs = %d", nargs);
 
   int arg_reg = ARC_FIRST_ARG_REGNUM;
 
@@ -600,9 +748,8 @@ arc_push_dummy_call (struct gdbarch *gdb
       /* Pass the return address in the first argument register.  */
       regcache_cooked_write_unsigned (regcache, arg_reg, struct_addr);
 
-      if (arc_debug)
-	debug_printf ("arc: struct return address %s passed in R%d",
-		      print_core_address (gdbarch, struct_addr), arg_reg);
+      arc_debug_printf ("struct return address %s passed in R%d",
+			print_core_address (gdbarch, struct_addr), arg_reg);
 
       arg_reg++;
     }
@@ -615,13 +762,12 @@ arc_push_dummy_call (struct gdbarch *gdb
 	 argument's size up to an integral number of words.  */
       for (int i = 0; i < nargs; i++)
 	{
-	  unsigned int len = TYPE_LENGTH (value_type (args[i]));
+	  unsigned int len = args[i]->type ()->length ();
 	  unsigned int space = align_up (len, 4);
 
 	  total_space += space;
 
-	  if (arc_debug)
-	    debug_printf ("arc: arg %d: %u bytes -> %u\n", i, len, space);
+	  arc_debug_printf ("arg %d: %u bytes -> %u", i, len, space);
 	}
 
       /* Allocate a buffer to hold a memory image of the arguments.  */
@@ -631,13 +777,13 @@ arc_push_dummy_call (struct gdbarch *gdb
       gdb_byte *data = memory_image;
       for (int i = 0; i < nargs; i++)
 	{
-	  unsigned int len = TYPE_LENGTH (value_type (args[i]));
+	  unsigned int len = args[i]->type ()->length ();
 	  unsigned int space = align_up (len, 4);
 
-	  memcpy (data, value_contents (args[i]), (size_t) len);
-	  if (arc_debug)
-	    debug_printf ("arc: copying arg %d, val 0x%08x, len %d to mem\n",
-			  i, *((int *) value_contents (args[i])), len);
+	  memcpy (data, args[i]->contents ().data (), (size_t) len);
+	  arc_debug_printf ("copying arg %d, val 0x%08x, len %d to mem",
+			    i, *((int *) args[i]->contents ().data ()),
+			    len);
 
 	  data += space;
 	}
@@ -646,9 +792,8 @@ arc_push_dummy_call (struct gdbarch *gdb
       data = memory_image;
       while (arg_reg <= ARC_LAST_ARG_REGNUM)
 	{
-	  if (arc_debug)
-	    debug_printf ("arc: passing 0x%02x%02x%02x%02x in register R%d\n",
-			  data[0], data[1], data[2], data[3], arg_reg);
+	  arc_debug_printf ("passing 0x%02x%02x%02x%02x in register R%d",
+			    data[0], data[1], data[2], data[3], arg_reg);
 
 	  /* Note we don't use write_unsigned here, since that would convert
 	     the byte order, but we are already in the correct byte order.  */
@@ -668,8 +813,7 @@ arc_push_dummy_call (struct gdbarch *gdb
 	 operation).  */
       if (total_space > 0)
 	{
-	  if (arc_debug)
-	    debug_printf ("arc: passing %d bytes on stack\n", total_space);
+	  arc_debug_printf ("passing %d bytes on stack\n", total_space);
 
 	  sp -= total_space;
 	  write_memory (sp, data, (int) total_space);
@@ -763,10 +907,9 @@ static void
 arc_extract_return_value (struct gdbarch *gdbarch, struct type *type,
 			  struct regcache *regcache, gdb_byte *valbuf)
 {
-  unsigned int len = TYPE_LENGTH (type);
+  unsigned int len = type->length ();
 
-  if (arc_debug)
-    debug_printf ("arc: extract_return_value\n");
+  arc_debug_printf ("called");
 
   if (len <= ARC_REGISTER_SIZE)
     {
@@ -777,8 +920,7 @@ arc_extract_return_value (struct gdbarch
       store_unsigned_integer (valbuf, (int) len,
 			      gdbarch_byte_order (gdbarch), val);
 
-      if (arc_debug)
-	debug_printf ("arc: returning 0x%s\n", phex (val, ARC_REGISTER_SIZE));
+      arc_debug_printf ("returning 0x%s", phex (val, ARC_REGISTER_SIZE));
     }
   else if (len <= ARC_REGISTER_SIZE * 2)
     {
@@ -794,10 +936,9 @@ arc_extract_return_value (struct gdbarch
 			      (int) len - ARC_REGISTER_SIZE,
 			      gdbarch_byte_order (gdbarch), high);
 
-      if (arc_debug)
-	debug_printf ("arc: returning 0x%s%s\n",
-		      phex (high, ARC_REGISTER_SIZE),
-		      phex (low, ARC_REGISTER_SIZE));
+      arc_debug_printf ("returning 0x%s%s",
+			phex (high, ARC_REGISTER_SIZE),
+			phex (low, ARC_REGISTER_SIZE));
     }
   else
     error (_("arc: extract_return_value: type length %u too large"), len);
@@ -817,10 +958,9 @@ static void
 arc_store_return_value (struct gdbarch *gdbarch, struct type *type,
 			struct regcache *regcache, const gdb_byte *valbuf)
 {
-  unsigned int len = TYPE_LENGTH (type);
+  unsigned int len = type->length ();
 
-  if (arc_debug)
-    debug_printf ("arc: store_return_value\n");
+  arc_debug_printf ("called");
 
   if (len <= ARC_REGISTER_SIZE)
     {
@@ -831,8 +971,7 @@ arc_store_return_value (struct gdbarch *
 				      gdbarch_byte_order (gdbarch));
       regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, val);
 
-      if (arc_debug)
-	debug_printf ("arc: storing 0x%s\n", phex (val, ARC_REGISTER_SIZE));
+      arc_debug_printf ("storing 0x%s", phex (val, ARC_REGISTER_SIZE));
     }
   else if (len <= ARC_REGISTER_SIZE * 2)
     {
@@ -848,10 +987,9 @@ arc_store_return_value (struct gdbarch *
       regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, low);
       regcache_cooked_write_unsigned (regcache, ARC_R1_REGNUM, high);
 
-      if (arc_debug)
-	debug_printf ("arc: storing 0x%s%s\n",
-		      phex (high, ARC_REGISTER_SIZE),
-		      phex (low, ARC_REGISTER_SIZE));
+      arc_debug_printf ("storing 0x%s%s",
+			phex (high, ARC_REGISTER_SIZE),
+			phex (low, ARC_REGISTER_SIZE));
     }
   else
     error (_("arc_store_return_value: type length too large."));
@@ -860,13 +998,12 @@ arc_store_return_value (struct gdbarch *
 /* Implement the "get_longjmp_target" gdbarch method.  */
 
 static int
-arc_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+arc_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
-  if (arc_debug)
-    debug_printf ("arc: get_longjmp_target\n");
+  arc_debug_printf ("called");
 
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
   int pc_offset = tdep->jb_pc * ARC_REGISTER_SIZE;
   gdb_byte buf[ARC_REGISTER_SIZE];
   CORE_ADDR jb_addr = get_frame_register_unsigned (frame, ARC_FIRST_ARG_REGNUM);
@@ -891,14 +1028,13 @@ arc_return_value (struct gdbarch *gdbarc
      function passes a hidden first parameter to the callee (in R0).  That
      parameter is the address at which the value being returned should be
      stored.  Otherwise, the result is returned in registers.  */
-  int is_struct_return = (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
-			  || TYPE_CODE (valtype) == TYPE_CODE_UNION
-			  || TYPE_LENGTH (valtype) > 2 * ARC_REGISTER_SIZE);
-
-  if (arc_debug)
-    debug_printf ("arc: return_value (readbuf = %s, writebuf = %s)\n",
-		  host_address_to_string (readbuf),
-		  host_address_to_string (writebuf));
+  int is_struct_return = (valtype->code () == TYPE_CODE_STRUCT
+			  || valtype->code () == TYPE_CODE_UNION
+			  || valtype->length () > 2 * ARC_REGISTER_SIZE);
+
+  arc_debug_printf ("readbuf = %s, writebuf = %s",
+		    host_address_to_string (readbuf),
+		    host_address_to_string (writebuf));
 
   if (writebuf != NULL)
     {
@@ -926,7 +1062,7 @@ arc_return_value (struct gdbarch *gdbarc
    frame pointer.  */
 
 static CORE_ADDR
-arc_frame_base_address (struct frame_info *this_frame, void **prologue_cache)
+arc_frame_base_address (frame_info_ptr this_frame, void **prologue_cache)
 {
   return (CORE_ADDR) get_frame_register_unsigned (this_frame, ARC_FP_REGNUM);
 }
@@ -1171,30 +1307,6 @@ arc_is_in_prologue (struct gdbarch *gdba
   return false;
 }
 
-/* Copy of gdb_buffered_insn_length_fprintf from disasm.c.  */
-
-static int ATTRIBUTE_PRINTF (2, 3)
-arc_fprintf_disasm (void *stream, const char *format, ...)
-{
-  return 0;
-}
-
-struct disassemble_info
-arc_disassemble_info (struct gdbarch *gdbarch)
-{
-  struct disassemble_info di;
-  init_disassemble_info (&di, &null_stream, arc_fprintf_disasm);
-  di.arch = gdbarch_bfd_arch_info (gdbarch)->arch;
-  di.mach = gdbarch_bfd_arch_info (gdbarch)->mach;
-  di.endian = gdbarch_byte_order (gdbarch);
-  di.read_memory_func = [](bfd_vma memaddr, gdb_byte *myaddr,
-			   unsigned int len, struct disassemble_info *info)
-    {
-      return target_read_code (memaddr, myaddr, len);
-    };
-  return di;
-}
-
 /* Analyze the prologue and update the corresponding frame cache for the frame
    unwinder for unwinding frames that doesn't have debug info.  In such
    situation GDB attempts to parse instructions in the prologue to understand
@@ -1249,10 +1361,9 @@ static CORE_ADDR
 arc_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR entrypoint,
 		      const CORE_ADDR limit_pc, struct arc_frame_cache *cache)
 {
-  if (arc_debug)
-    debug_printf ("arc: analyze_prologue (entrypoint=%s, limit_pc=%s)\n",
-		  paddress (gdbarch, entrypoint),
-		  paddress (gdbarch, limit_pc));
+  arc_debug_printf ("entrypoint=%s, limit_pc=%s",
+		    paddress (gdbarch, entrypoint),
+		    paddress (gdbarch, limit_pc));
 
   /* Prologue values.  Only core registers can be stored.  */
   pv_t regs[ARC_LAST_CORE_REGNUM + 1];
@@ -1266,11 +1377,12 @@ arc_analyze_prologue (struct gdbarch *gd
   while (current_prologue_end < limit_pc)
     {
       struct arc_instruction insn;
-      struct disassemble_info di = arc_disassemble_info (gdbarch);
-      arc_insn_decode (current_prologue_end, &di, arc_delayed_print_insn,
-		       &insn);
 
-      if (arc_debug >= 2)
+      struct gdb_non_printing_memory_disassembler dis (gdbarch);
+      arc_insn_decode (current_prologue_end, dis.disasm_info (),
+		       arc_delayed_print_insn, &insn);
+
+      if (arc_debug)
 	arc_insn_dump (insn);
 
       /* If this instruction is in the prologue, fields in the cache will be
@@ -1278,9 +1390,8 @@ arc_analyze_prologue (struct gdbarch *gd
       if (!arc_is_in_prologue (gdbarch, insn, regs, &stack))
 	{
 	  /* Found an instruction that is not in the prologue.  */
-	  if (arc_debug)
-	    debug_printf ("arc: End of prologue reached at address %s\n",
-			  paddress (gdbarch, insn.address));
+	  arc_debug_printf ("End of prologue reached at address %s",
+			    paddress (gdbarch, insn.address));
 	  break;
 	}
 
@@ -1306,7 +1417,7 @@ arc_analyze_prologue (struct gdbarch *gd
 	{
 	  CORE_ADDR offset;
 	  if (stack.find_reg (gdbarch, i, &offset))
-	    cache->saved_regs[i].addr = offset;
+	    cache->saved_regs[i].set_addr (offset);
 	}
     }
 
@@ -1341,8 +1452,7 @@ const static int MAX_PROLOGUE_LENGTH
 static CORE_ADDR
 arc_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  if (arc_debug)
-    debug_printf ("arc: skip_prologue\n");
+  arc_debug_printf ("pc = %s", paddress (gdbarch, pc));
 
   CORE_ADDR func_addr;
   const char *func_name;
@@ -1483,6 +1593,7 @@ arc_breakpoint_kind_from_pc (struct gdba
 static const gdb_byte *
 arc_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
 {
+  gdb_assert (kind == 2 || kind == 4);
   *size = kind;
 
   if (kind == sizeof (arc_brk_le))
@@ -1513,29 +1624,28 @@ static void
 arc_print_frame_cache (struct gdbarch *gdbarch, const char *message,
 		       struct arc_frame_cache *cache, int addresses_known)
 {
-  debug_printf ("arc: frame_info %s\n", message);
-  debug_printf ("arc: prev_sp = %s\n", paddress (gdbarch, cache->prev_sp));
-  debug_printf ("arc: frame_base_reg = %i\n", cache->frame_base_reg);
-  debug_printf ("arc: frame_base_offset = %s\n",
-		plongest (cache->frame_base_offset));
+  arc_debug_printf ("frame_info %s", message);
+  arc_debug_printf ("prev_sp = %s", paddress (gdbarch, cache->prev_sp));
+  arc_debug_printf ("frame_base_reg = %i", cache->frame_base_reg);
+  arc_debug_printf ("frame_base_offset = %s",
+		    plongest (cache->frame_base_offset));
 
   for (int i = 0; i <= ARC_BLINK_REGNUM; i++)
     {
-      if (trad_frame_addr_p (cache->saved_regs, i))
-	debug_printf ("arc: saved register %s at %s %s\n",
-		      gdbarch_register_name (gdbarch, i),
-		      (addresses_known) ? "address" : "offset",
-		      paddress (gdbarch, cache->saved_regs[i].addr));
+      if (cache->saved_regs[i].is_addr ())
+	arc_debug_printf ("saved register %s at %s %s",
+			  gdbarch_register_name (gdbarch, i),
+			  (addresses_known) ? "address" : "offset",
+			      paddress (gdbarch, cache->saved_regs[i].addr ()));
     }
 }
 
 /* Frame unwinder for normal frames.  */
 
 static struct arc_frame_cache *
-arc_make_frame_cache (struct frame_info *this_frame)
+arc_make_frame_cache (frame_info_ptr this_frame)
 {
-  if (arc_debug)
-    debug_printf ("arc: frame_cache\n");
+  arc_debug_printf ("called");
 
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
 
@@ -1586,8 +1696,9 @@ arc_make_frame_cache (struct frame_info
 
   for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
     {
-      if (trad_frame_addr_p (cache->saved_regs, i))
-	cache->saved_regs[i].addr += cache->prev_sp;
+      if (cache->saved_regs[i].is_addr ())
+	cache->saved_regs[i].set_addr (cache->saved_regs[i].addr ()
+				       + cache->prev_sp);
     }
 
   if (arc_debug)
@@ -1599,11 +1710,10 @@ arc_make_frame_cache (struct frame_info
 /* Implement the "this_id" frame_unwind method.  */
 
 static void
-arc_frame_this_id (struct frame_info *this_frame, void **this_cache,
+arc_frame_this_id (frame_info_ptr this_frame, void **this_cache,
 		   struct frame_id *this_id)
 {
-  if (arc_debug)
-    debug_printf ("arc: frame_this_id\n");
+  arc_debug_printf ("called");
 
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
 
@@ -1645,7 +1755,7 @@ arc_frame_this_id (struct frame_info *th
 /* Implement the "prev_register" frame_unwind method.  */
 
 static struct value *
-arc_frame_prev_register (struct frame_info *this_frame,
+arc_frame_prev_register (frame_info_ptr this_frame,
 			 void **this_cache, int regnum)
 {
   if (*this_cache == NULL)
@@ -1682,7 +1792,7 @@ arc_frame_prev_register (struct frame_in
 static void
 arc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
 			   struct dwarf2_frame_state_reg *reg,
-			   struct frame_info *info)
+			   frame_info_ptr info)
 {
   if (regnum == gdbarch_pc_regnum (gdbarch))
     /* The return address column.  */
@@ -1692,11 +1802,106 @@ arc_dwarf2_frame_init_reg (struct gdbarc
     reg->how = DWARF2_FRAME_REG_CFA;
 }
 
+/*  Signal trampoline frame unwinder.  Allows frame unwinding to happen
+    from within signal handlers.  */
+
+static struct arc_frame_cache *
+arc_make_sigtramp_frame_cache (frame_info_ptr this_frame)
+{
+  arc_debug_printf ("called");
+
+  gdbarch *arch = get_frame_arch (this_frame);
+  arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (arch);
+
+  /* Allocate new frame cache instance and space for saved register info.  */
+  struct arc_frame_cache *cache = FRAME_OBSTACK_ZALLOC (struct arc_frame_cache);
+  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+
+  /* Get the stack pointer and use it as the frame base.  */
+  cache->prev_sp = arc_frame_base_address (this_frame, NULL);
+
+  /* If the ARC-private target-dependent info doesn't have a table of
+     offsets of saved register contents within an OS signal context
+     structure, then there is nothing to analyze.  */
+  if (tdep->sc_reg_offset == NULL)
+    return cache;
+
+  /* Find the address of the sigcontext structure.  */
+  CORE_ADDR addr = tdep->sigcontext_addr (this_frame);
+
+  /* For each register, if its contents have been saved within the
+     sigcontext structure, determine the address of those contents.  */
+  gdb_assert (tdep->sc_num_regs <= (ARC_LAST_REGNUM + 1));
+  for (int i = 0; i < tdep->sc_num_regs; i++)
+    {
+      if (tdep->sc_reg_offset[i] != ARC_OFFSET_NO_REGISTER)
+	cache->saved_regs[i].set_addr (addr + tdep->sc_reg_offset[i]);
+    }
+
+  return cache;
+}
+
+/* Implement the "this_id" frame_unwind method for signal trampoline
+   frames.  */
+
+static void
+arc_sigtramp_frame_this_id (frame_info_ptr this_frame,
+			    void **this_cache, struct frame_id *this_id)
+{
+  arc_debug_printf ("called");
+
+  if (*this_cache == NULL)
+    *this_cache = arc_make_sigtramp_frame_cache (this_frame);
+
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  struct arc_frame_cache *cache = (struct arc_frame_cache *) *this_cache;
+  CORE_ADDR stack_addr = cache->prev_sp;
+  CORE_ADDR code_addr
+    = get_frame_register_unsigned (this_frame, gdbarch_pc_regnum (gdbarch));
+  *this_id = frame_id_build (stack_addr, code_addr);
+}
+
+/* Get a register from a signal handler frame.  */
+
+static struct value *
+arc_sigtramp_frame_prev_register (frame_info_ptr this_frame,
+				  void **this_cache, int regnum)
+{
+  arc_debug_printf ("regnum = %d", regnum);
+
+  /* Make sure we've initialized the cache.  */
+  if (*this_cache == NULL)
+    *this_cache = arc_make_sigtramp_frame_cache (this_frame);
+
+  struct arc_frame_cache *cache = (struct arc_frame_cache *) *this_cache;
+  return trad_frame_get_prev_register (this_frame, cache->saved_regs, regnum);
+}
+
+/* Frame sniffer for signal handler frame.  Only recognize a frame if we
+   have a sigcontext_addr handler in the target dependency.  */
+
+static int
+arc_sigtramp_frame_sniffer (const struct frame_unwind *self,
+			    frame_info_ptr this_frame,
+			    void **this_cache)
+{
+  arc_debug_printf ("called");
+
+  gdbarch *arch = get_frame_arch (this_frame);
+  arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (arch);
+
+  /* If we have a sigcontext_addr handler, then just return 1 (same as the
+     "default_frame_sniffer ()").  */
+  return (tdep->sigcontext_addr != NULL && tdep->is_sigtramp != NULL
+	  && tdep->is_sigtramp (this_frame));
+}
+
 /* Structure defining the ARC ordinary frame unwind functions.  Since we are
    the fallback unwinder, we use the default frame sniffer, which always
    accepts the frame.  */
 
 static const struct frame_unwind arc_frame_unwind = {
+  "arc prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   arc_frame_this_id,
@@ -1707,6 +1912,22 @@ static const struct frame_unwind arc_fra
   NULL
 };
 
+/* Structure defining the ARC signal frame unwind functions.  Custom
+   sniffer is used, because this frame must be accepted only in the right
+   context.  */
+
+static const struct frame_unwind arc_sigtramp_frame_unwind = {
+  "arc sigtramp",
+  SIGTRAMP_FRAME,
+  default_frame_unwind_stop_reason,
+  arc_sigtramp_frame_this_id,
+  arc_sigtramp_frame_prev_register,
+  NULL,
+  arc_sigtramp_frame_sniffer,
+  NULL,
+  NULL
+};
+
 
 static const struct frame_base arc_normal_base = {
   &arc_frame_unwind,
@@ -1715,204 +1936,280 @@ static const struct frame_base arc_norma
   arc_frame_base_address
 };
 
-/* Initialize target description for the ARC.
-
-   Returns TRUE if input tdesc was valid and in this case it will assign TDESC
-   and TDESC_DATA output parameters.  */
-
-static bool
-arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc,
-		struct tdesc_arch_data **tdesc_data)
+static enum arc_isa
+mach_type_to_arc_isa (const unsigned long mach)
 {
-  if (arc_debug)
-    debug_printf ("arc: Target description initialization.\n");
+  switch (mach)
+    {
+    case bfd_mach_arc_arc600:
+    case bfd_mach_arc_arc601:
+    case bfd_mach_arc_arc700:
+      return ARC_ISA_ARCV1;
+    case bfd_mach_arc_arcv2:
+      return ARC_ISA_ARCV2;
+    default:
+	internal_error (_("unknown machine id %lu"), mach);
+    }
+}
 
-  const struct target_desc *tdesc_loc = info.target_desc;
+/* See arc-tdep.h.  */
 
-  /* Depending on whether this is ARCompact or ARCv2 we will assign
-     different default registers sets (which will differ in exactly two core
-     registers).  GDB will also refuse to accept register feature from invalid
-     ISA - v2 features can be used only with v2 ARChitecture.  We read
-     bfd_arch_info, which looks like to be a safe bet here, as it looks like it
-     is always initialized even when we don't pass any elf file to GDB at all
-     (it uses default arch in this case).  Also GDB will call this function
-     multiple times, and if XML target description file contains architecture
-     specifications, then GDB will set this architecture to info.bfd_arch_info,
-     overriding value from ELF file if they are different.  That means that,
-     where matters, this value is always our best guess on what CPU we are
-     debugging.  It has been noted that architecture specified in tdesc file
-     has higher precedence over ELF and even "set architecture" - that is,
-     using "set architecture" command will have no effect when tdesc has "arch"
-     tag.  */
-  /* Cannot use arc_mach_is_arcv2 (), because gdbarch is not created yet.  */
-  const int is_arcv2 = (info.bfd_arch_info->mach == bfd_mach_arc_arcv2);
-  bool is_reduced_rf;
-  const char *const *core_regs;
-  const char *core_feature_name;
+arc_arch_features
+arc_arch_features_create (const bfd *abfd, const unsigned long mach)
+{
+  /* Use 4 as a fallback value.  */
+  int reg_size = 4;
 
-  /* If target doesn't provide a description - use default one.  */
-  if (!tdesc_has_registers (tdesc_loc))
+  /* Try to guess the features parameters by looking at the binary to be
+     executed.  If the user is providing a binary that does not match the
+     target, then tough luck.  This is the last effort to makes sense of
+     what's going on.  */
+  if (abfd != nullptr && bfd_get_flavour (abfd) == bfd_target_elf_flavour)
     {
-      if (is_arcv2)
-	{
-	  tdesc_loc = tdesc_arc_v2;
-	  if (arc_debug)
-	    debug_printf ("arc: Using default register set for ARC v2.\n");
-	}
+      unsigned char eclass = elf_elfheader (abfd)->e_ident[EI_CLASS];
+
+      if (eclass == ELFCLASS32)
+	reg_size = 4;
+      else if (eclass == ELFCLASS64)
+	reg_size = 8;
       else
-	{
-	  tdesc_loc = tdesc_arc_arcompact;
-	  if (arc_debug)
-	    debug_printf ("arc: Using default register set for ARCompact.\n");
-	}
+	internal_error (_("unknown ELF header class %d"), eclass);
     }
-  else
-    {
-      if (arc_debug)
-	debug_printf ("arc: Using provided register set.\n");
-    }
-  gdb_assert (tdesc_loc != NULL);
 
-  /* Now we can search for base registers.  Core registers can be either full
-     or reduced.  Summary:
+  /* MACH from a bfd_arch_info struct is used here.  It should be a safe
+     bet, as it looks like the struct is always initialized even when we
+     don't pass any elf file to GDB at all (it uses default arch in that
+     case).  */
+  arc_isa isa = mach_type_to_arc_isa (mach);
 
-     - core.v2 + aux-minimal
-     - core-reduced.v2 + aux-minimal
-     - core.arcompact + aux-minimal
+  return arc_arch_features (reg_size, isa);
+}
 
-     NB: It is entirely feasible to have ARCompact with reduced core regs, but
-     we ignore that because GCC doesn't support that and at the same time
-     ARCompact is considered obsolete, so there is not much reason to support
-     that.  */
-  const struct tdesc_feature *feature
-    = tdesc_find_feature (tdesc_loc, core_v2_feature_name);
-  if (feature != NULL)
-    {
-      /* Confirm that register and architecture match, to prevent accidents in
-	 some situations.  This code will trigger an error if:
+/* Look for obsolete core feature names in TDESC.  */
 
-	 1. XML tdesc doesn't specify arch explicitly, registers are for arch
-	 X, but ELF specifies arch Y.
+static const struct tdesc_feature *
+find_obsolete_core_names (const struct target_desc *tdesc)
+{
+  const struct tdesc_feature *feat = nullptr;
 
-	 2. XML tdesc specifies arch X, but contains registers for arch Y.
+  feat = tdesc_find_feature (tdesc, ARC_CORE_V1_OBSOLETE_FEATURE_NAME);
 
-	 It will not protect from case where XML or ELF specify arch X,
-	 registers are for the same arch X, but the real target is arch Y.  To
-	 detect this case we need to check IDENTITY register.  */
-      if (!is_arcv2)
-	{
-	  arc_print (_("Error: ARC v2 target description supplied for "
-		       "non-ARCv2 target.\n"));
-	  return false;
-	}
+  if (feat == nullptr)
+    feat = tdesc_find_feature (tdesc, ARC_CORE_V2_OBSOLETE_FEATURE_NAME);
+
+  if (feat == nullptr)
+    feat = tdesc_find_feature
+      (tdesc, ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME);
+
+  return feat;
+}
+
+/* Look for obsolete aux feature names in TDESC.  */
+
+static const struct tdesc_feature *
+find_obsolete_aux_names (const struct target_desc *tdesc)
+{
+  return tdesc_find_feature (tdesc, ARC_AUX_OBSOLETE_FEATURE_NAME);
+}
+
+/* Based on the MACH value, determines which core register features set
+   must be used.  */
 
-      is_reduced_rf = false;
-      core_feature_name = core_v2_feature_name;
-      core_regs = core_v2_register_names;
+static arc_register_feature *
+determine_core_reg_feature_set (const unsigned long mach)
+{
+  switch (mach_type_to_arc_isa (mach))
+    {
+    case ARC_ISA_ARCV1:
+      return &arc_v1_core_reg_feature;
+    case ARC_ISA_ARCV2:
+      return &arc_v2_core_reg_feature;
+    default:
+      gdb_assert_not_reached
+	("Unknown machine type to determine the core feature set.");
     }
-  else
+}
+
+/* At the moment, there is only 1 auxiliary register features set.
+   This is a place holder for future extendability.  */
+
+static const arc_register_feature *
+determine_aux_reg_feature_set ()
+{
+  return &arc_common_aux_reg_feature;
+}
+
+/* Update accumulator register names (ACCH/ACCL) for r58 and r59 in the
+   register sets.  The endianness determines the assignment:
+
+	,------.------.
+	| acch | accl |
+   ,----|------+------|
+   | LE | r59  | r58  |
+   | BE | r58  | r59  |
+   `----^------^------'  */
+
+static void
+arc_update_acc_reg_names (const int byte_order)
+{
+  const char *r58_alias
+    = byte_order == BFD_ENDIAN_LITTLE ? "accl" : "acch";
+  const char *r59_alias
+    = byte_order == BFD_ENDIAN_LITTLE ? "acch" : "accl";
+
+  /* Subscript 1 must be OK because those registers have 2 names.  */
+  arc_v1_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias;
+  arc_v1_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias;
+  arc_v2_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias;
+  arc_v2_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias;
+}
+
+/* Go through all the registers in REG_SET and check if they exist
+   in FEATURE.  The TDESC_DATA is updated with the register number
+   in REG_SET if it is found in the feature.  If a required register
+   is not found, this function returns false.  */
+
+static bool
+arc_check_tdesc_feature (struct tdesc_arch_data *tdesc_data,
+			 const struct tdesc_feature *feature,
+			 const struct arc_register_feature *reg_set)
+{
+  for (const auto &reg : reg_set->registers)
     {
-      feature = tdesc_find_feature (tdesc_loc, core_reduced_v2_feature_name);
-      if (feature != NULL)
+      bool found = false;
+
+      for (const char *name : reg.names)
 	{
-	  if (!is_arcv2)
-	    {
-	      arc_print (_("Error: ARC v2 target description supplied for "
-			   "non-ARCv2 target.\n"));
-	      return false;
-	    }
+	  found
+	    = tdesc_numbered_register (feature, tdesc_data, reg.regnum, name);
 
-	  is_reduced_rf = true;
-	  core_feature_name = core_reduced_v2_feature_name;
-	  core_regs = core_v2_register_names;
+	  if (found)
+	    break;
 	}
-      else
+
+      if (!found && reg.required_p)
 	{
-	  feature = tdesc_find_feature (tdesc_loc,
-					core_arcompact_feature_name);
-	  if (feature != NULL)
-	    {
-	      if (is_arcv2)
-		{
-		  arc_print (_("Error: ARCompact target description supplied "
-			       "for non-ARCompact target.\n"));
-		  return false;
-		}
-
-	      is_reduced_rf = false;
-	      core_feature_name = core_arcompact_feature_name;
-	      core_regs = core_arcompact_register_names;
-	    }
-	  else
+	  std::ostringstream reg_names;
+	  for (std::size_t i = 0; i < reg.names.size(); ++i)
 	    {
-	      arc_print (_("Error: Couldn't find core register feature in "
-			   "supplied target description."));
-	      return false;
+	      if (i == 0)
+		reg_names << "'" << reg.names[0] << "'";
+	      else
+		reg_names << " or '" << reg.names[0] << "'";
 	    }
+	  arc_print (_("Error: Cannot find required register(s) %s "
+		       "in feature '%s'.\n"), reg_names.str ().c_str (),
+		       feature->name.c_str ());
+	  return false;
 	}
     }
 
-  struct tdesc_arch_data *tdesc_data_loc = tdesc_data_alloc ();
+  return true;
+}
+
+/* Check for the existance of "lp_start" and "lp_end" in target description.
+   If both are present, assume there is hardware loop support in the target.
+   This can be improved by looking into "lpc_size" field of "isa_config"
+   auxiliary register.  */
+
+static bool
+arc_check_for_hw_loops (const struct target_desc *tdesc,
+			struct tdesc_arch_data *data)
+{
+  const auto feature_aux = tdesc_find_feature (tdesc, ARC_AUX_FEATURE_NAME);
+  const auto aux_regset = determine_aux_reg_feature_set ();
 
-  gdb_assert (feature != NULL);
-  int valid_p = 1;
+  if (feature_aux == nullptr)
+    return false;
 
-  for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
+  bool hw_loop_p = false;
+  const auto lp_start_name =
+    aux_regset->registers[ARC_LP_START_REGNUM - ARC_FIRST_AUX_REGNUM].names[0];
+  const auto lp_end_name =
+    aux_regset->registers[ARC_LP_END_REGNUM - ARC_FIRST_AUX_REGNUM].names[0];
+
+  hw_loop_p = tdesc_numbered_register (feature_aux, data,
+				       ARC_LP_START_REGNUM, lp_start_name);
+  hw_loop_p &= tdesc_numbered_register (feature_aux, data,
+				       ARC_LP_END_REGNUM, lp_end_name);
+
+  return hw_loop_p;
+}
+
+/* Initialize target description for the ARC.
+
+   Returns true if input TDESC was valid and in this case it will assign TDESC
+   and TDESC_DATA output parameters.  */
+
+static bool
+arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc,
+		tdesc_arch_data_up *tdesc_data)
+{
+  const struct target_desc *tdesc_loc = info.target_desc;
+  arc_debug_printf ("Target description initialization.");
+
+  /* If target doesn't provide a description, use the default ones.  */
+  if (!tdesc_has_registers (tdesc_loc))
     {
-      /* If rf16, then skip extra registers.  */
-      if (is_reduced_rf && ((i >= ARC_R4_REGNUM && i <= ARC_R9_REGNUM)
-			    || (i >= ARC_R16_REGNUM && i <= ARC_R25_REGNUM)))
-	continue;
-
-      valid_p = tdesc_numbered_register (feature, tdesc_data_loc, i,
-					 core_regs[i]);
-
-      /* - Ignore errors in extension registers - they are optional.
-	 - Ignore missing ILINK because it doesn't make sense for Linux.
-	 - Ignore missing ILINK2 when architecture is ARCompact, because it
-	 doesn't make sense for Linux targets.
-
-	 In theory those optional registers should be in separate features, but
-	 that would create numerous but tiny features, which looks like an
-	 overengineering of a rather simple task.  */
-      if (!valid_p && (i <= ARC_SP_REGNUM || i == ARC_BLINK_REGNUM
-		       || i == ARC_LP_COUNT_REGNUM || i == ARC_PCL_REGNUM
-		       || (i == ARC_R30_REGNUM && is_arcv2)))
-	{
-	  arc_print (_("Error: Cannot find required register `%s' in "
-		       "feature `%s'.\n"), core_regs[i], core_feature_name);
-	  tdesc_data_cleanup (tdesc_data_loc);
-	  return false;
-	}
+      arc_arch_features features
+	= arc_arch_features_create (info.abfd,
+				    info.bfd_arch_info->mach);
+      tdesc_loc = arc_lookup_target_description (features);
+    }
+  gdb_assert (tdesc_loc != nullptr);
+
+  arc_debug_printf ("Have got a target description");
+
+  const struct tdesc_feature *feature_core
+    = tdesc_find_feature (tdesc_loc, ARC_CORE_FEATURE_NAME);
+  const struct tdesc_feature *feature_aux
+    = tdesc_find_feature (tdesc_loc, ARC_AUX_FEATURE_NAME);
+
+  /* Maybe there still is a chance to salvage the input.  */
+  if (feature_core == nullptr)
+    feature_core = find_obsolete_core_names (tdesc_loc);
+  if (feature_aux == nullptr)
+    feature_aux = find_obsolete_aux_names (tdesc_loc);
+
+  if (feature_core == nullptr)
+    {
+      arc_print (_("Error: Cannot find required feature '%s' in supplied "
+		   "target description.\n"), ARC_CORE_FEATURE_NAME);
+      return false;
     }
 
-  /* Mandatory AUX registers are intentionally few and are common between
-     ARCompact and ARC v2, so same code can be used for both.  */
-  feature = tdesc_find_feature (tdesc_loc, aux_minimal_feature_name);
-  if (feature == NULL)
-    {
-      arc_print (_("Error: Cannot find required feature `%s' in supplied "
-		   "target description.\n"), aux_minimal_feature_name);
-      tdesc_data_cleanup (tdesc_data_loc);
+  if (feature_aux == nullptr)
+    {
+      arc_print (_("Error: Cannot find required feature '%s' in supplied "
+		   "target description.\n"), ARC_AUX_FEATURE_NAME);
       return false;
     }
 
-  for (int i = ARC_FIRST_AUX_REGNUM; i <= ARC_LAST_AUX_REGNUM; i++)
+  const arc_register_feature *arc_core_reg_feature
+    = determine_core_reg_feature_set (info.bfd_arch_info->mach);
+  const arc_register_feature *arc_aux_reg_feature
+    = determine_aux_reg_feature_set ();
+
+  tdesc_arch_data_up tdesc_data_loc = tdesc_data_alloc ();
+
+  arc_update_acc_reg_names (info.byte_order);
+
+  bool valid_p = arc_check_tdesc_feature (tdesc_data_loc.get (),
+					  feature_core,
+					  arc_core_reg_feature);
+
+  valid_p &= arc_check_tdesc_feature (tdesc_data_loc.get (),
+				      feature_aux,
+				      arc_aux_reg_feature);
+
+  if (!valid_p)
     {
-      const char *name = aux_minimal_register_names[i - ARC_FIRST_AUX_REGNUM];
-      valid_p = tdesc_numbered_register (feature, tdesc_data_loc, i, name);
-      if (!valid_p)
-	{
-	  arc_print (_("Error: Cannot find required register `%s' "
-		       "in feature `%s'.\n"),
-		     name, tdesc_feature_name (feature));
-	  tdesc_data_cleanup (tdesc_data_loc);
-	  return false;
-	}
+      arc_debug_printf ("Target description is not valid");
+      return false;
     }
 
   *tdesc = tdesc_loc;
-  *tdesc_data = tdesc_data_loc;
+  *tdesc_data = std::move (tdesc_data_loc);
 
   return true;
 }
@@ -1922,7 +2219,7 @@ arc_tdesc_init (struct gdbarch_info info
 static ULONGEST
 arc_type_align (struct gdbarch *gdbarch, struct type *type)
 {
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_PTR:
     case TYPE_CODE_FUNC:
@@ -1939,7 +2236,7 @@ arc_type_align (struct gdbarch *gdbarch,
     case TYPE_CODE_METHODPTR:
     case TYPE_CODE_MEMBERPTR:
       type = check_typedef (type);
-      return std::min<ULONGEST> (4, TYPE_LENGTH (type));
+      return std::min<ULONGEST> (4, type->length ());
     default:
       return 0;
     }
@@ -1951,19 +2248,20 @@ static struct gdbarch *
 arc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
   const struct target_desc *tdesc;
-  struct tdesc_arch_data *tdesc_data;
+  tdesc_arch_data_up tdesc_data;
 
-  if (arc_debug)
-    debug_printf ("arc: Architecture initialization.\n");
+  arc_debug_printf ("Architecture initialization.");
 
   if (!arc_tdesc_init (info, &tdesc, &tdesc_data))
-    return NULL;
+    return nullptr;
 
   /* Allocate the ARC-private target-dependent information structure, and the
      GDB target-independent information structure.  */
-  struct gdbarch_tdep *tdep = XCNEW (struct gdbarch_tdep);
+  gdbarch *gdbarch
+    = gdbarch_alloc (&info, gdbarch_tdep_up (new arc_gdbarch_tdep));
+  arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
   tdep->jb_pc = -1; /* No longjmp support by default.  */
-  struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
+  tdep->has_hw_loops = arc_check_for_hw_loops (tdesc, tdesc_data.get ());
 
   /* Data types.  */
   set_gdbarch_short_bit (gdbarch, 16);
@@ -2037,6 +2335,7 @@ arc_gdbarch_init (struct gdbarch_info in
   /* Frame unwinders and sniffers.  */
   dwarf2_frame_set_init_reg (gdbarch, arc_dwarf2_frame_init_reg);
   dwarf2_append_unwinders (gdbarch);
+  frame_unwind_append_unwinder (gdbarch, &arc_sigtramp_frame_unwind);
   frame_unwind_append_unwinder (gdbarch, &arc_frame_unwind);
   frame_base_set_default (gdbarch, &arc_normal_base);
 
@@ -2097,12 +2396,14 @@ arc_gdbarch_init (struct gdbarch_info in
 	      arc_disassembler_options = NULL;
 	      break;
 	    }
-	  set_gdbarch_disassembler_options (gdbarch,
-					    &arc_disassembler_options);
 	}
     }
 
-  tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+  set_gdbarch_disassembler_options (gdbarch, &arc_disassembler_options);
+  set_gdbarch_valid_disassembler_options (gdbarch,
+					  disassembler_options_arc ());
+
+  tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
 
   return gdbarch;
 }
@@ -2112,17 +2413,18 @@ arc_gdbarch_init (struct gdbarch_info in
 static void
 arc_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  fprintf_unfiltered (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc);
-}
+  arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
 
-/* Wrapper for "maintenance print arc" list of commands.  */
+  gdb_printf (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc);
 
-static void
-maintenance_print_arc_command (const char *args, int from_tty)
-{
-  cmd_show_list (maintenance_print_arc_list, from_tty, "");
+  gdb_printf (file, "arc_dump_tdep: is_sigtramp = <%s>\n",
+	      host_address_to_string (tdep->is_sigtramp));
+  gdb_printf (file, "arc_dump_tdep: sigcontext_addr = <%s>\n",
+	      host_address_to_string (tdep->sigcontext_addr));
+  gdb_printf (file, "arc_dump_tdep: sc_reg_offset = <%s>\n",
+	      host_address_to_string (tdep->sc_reg_offset));
+  gdb_printf (file, "arc_dump_tdep: sc_num_regs = %d\n",
+	      tdep->sc_num_regs);
 }
 
 /* This command accepts single argument - address of instruction to
@@ -2133,34 +2435,32 @@ dump_arc_instruction_command (const char
 {
   struct value *val;
   if (args != NULL && strlen (args) > 0)
-    val = evaluate_expression (parse_expression (args).get ());
+    val = parse_expression (args)->evaluate ();
   else
     val = access_value_history (0);
-  record_latest_value (val);
+  val->record_latest ();
 
   CORE_ADDR address = value_as_address (val);
   struct arc_instruction insn;
-  struct disassemble_info di = arc_disassemble_info (target_gdbarch ());
-  arc_insn_decode (address, &di, arc_delayed_print_insn, &insn);
+  gdb_non_printing_memory_disassembler dis (current_inferior ()->arch ());
+  arc_insn_decode (address, dis.disasm_info (), arc_delayed_print_insn, &insn);
   arc_insn_dump (insn);
 }
 
+void _initialize_arc_tdep ();
 void
-_initialize_arc_tdep (void)
+_initialize_arc_tdep ()
 {
   gdbarch_register (bfd_arch_arc, arc_gdbarch_init, arc_dump_tdep);
 
-  initialize_tdesc_arc_v2 ();
-  initialize_tdesc_arc_arcompact ();
-
   /* Register ARC-specific commands with gdb.  */
 
   /* Add root prefix command for "maintenance print arc" commands.  */
-  add_prefix_cmd ("arc", class_maintenance, maintenance_print_arc_command,
-		  _("ARC-specific maintenance commands for printing GDB "
-		    "internal state."),
-		  &maintenance_print_arc_list, "maintenance print arc ", 0,
-		  &maintenanceprintlist);
+  add_basic_prefix_cmd ("arc", class_maintenance,
+			_("ARC-specific maintenance commands for printing GDB "
+			  "internal state."),
+			&maintenance_print_arc_list,
+			0, &maintenanceprintlist);
 
   add_cmd ("arc-instruction", class_maintenance,
 	   dump_arc_instruction_command,
@@ -2168,10 +2468,10 @@ _initialize_arc_tdep (void)
 	   &maintenance_print_arc_list);
 
   /* Debug internals for ARC GDB.  */
-  add_setshow_zinteger_cmd ("arc", class_maintenance,
-			    &arc_debug,
-			    _("Set ARC specific debugging."),
-			    _("Show ARC specific debugging."),
-			    _("Non-zero enables ARC specific debugging."),
-			    NULL, NULL, &setdebuglist, &showdebuglist);
+  add_setshow_boolean_cmd ("arc", class_maintenance,
+			   &arc_debug,
+			   _("Set ARC specific debugging."),
+			   _("Show ARC specific debugging."),
+			   _("When set, ARC specific debugging is enabled."),
+			   NULL, NULL, &setdebuglist, &showdebuglist);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-tdep.h ./gdb/arc-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arc-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arc-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target dependent code for ARC architecture, for GDB.
 
-   Copyright 2005-2019 Free Software Foundation, Inc.
+   Copyright 2005-2024 Free Software Foundation, Inc.
    Contributed by Synopsys Inc.
 
    This file is part of GDB.
@@ -23,6 +23,8 @@
 
 /* Need disassemble_info.  */
 #include "dis-asm.h"
+#include "gdbarch.h"
+#include "arch/arc.h"
 
 /* To simplify GDB code this enum assumes that internal regnums should be same
    as architectural register numbers, i.e. PCL regnum is 63.  This allows to
@@ -34,7 +36,6 @@ enum arc_regnum
   {
     /* Core registers.  */
     ARC_R0_REGNUM = 0,
-    ARC_FIRST_CORE_REGNUM = ARC_R0_REGNUM,
     ARC_R1_REGNUM = 1,
     ARC_R4_REGNUM = 4,
     ARC_R7_REGNUM = 7,
@@ -53,6 +54,9 @@ enum arc_regnum
     ARC_R30_REGNUM,
     /* Return address from function.  */
     ARC_BLINK_REGNUM,
+    /* Accumulator registers.  */
+    ARC_R58_REGNUM = 58,
+    ARC_R59_REGNUM,
     /* Zero-delay loop counter.  */
     ARC_LP_COUNT_REGNUM = 60,
     /* Reserved register number.  There should never be a register with such
@@ -68,14 +72,23 @@ enum arc_regnum
     /* Program counter, aligned to 4-bytes, read-only.  */
     ARC_PCL_REGNUM,
     ARC_LAST_CORE_REGNUM = ARC_PCL_REGNUM,
+
     /* AUX registers.  */
     /* Actual program counter.  */
     ARC_PC_REGNUM,
     ARC_FIRST_AUX_REGNUM = ARC_PC_REGNUM,
     /* Status register.  */
     ARC_STATUS32_REGNUM,
-    ARC_LAST_REGNUM = ARC_STATUS32_REGNUM,
-    ARC_LAST_AUX_REGNUM = ARC_STATUS32_REGNUM,
+    /* Zero-delay loop start instruction.  */
+    ARC_LP_START_REGNUM,
+    /* Zero-delay loop next-after-last instruction.  */
+    ARC_LP_END_REGNUM,
+    /* Branch target address.  */
+    ARC_BTA_REGNUM,
+    /* Exception return address.  */
+    ARC_ERET_REGNUM,
+    ARC_LAST_AUX_REGNUM = ARC_ERET_REGNUM,
+    ARC_LAST_REGNUM = ARC_LAST_AUX_REGNUM,
 
     /* Additional ABI constants.  */
     ARC_FIRST_ARG_REGNUM = ARC_R0_REGNUM,
@@ -89,17 +102,46 @@ enum arc_regnum
    Longer registers are represented as pairs of 32-bit registers.  */
 #define ARC_REGISTER_SIZE  4
 
-#define arc_print(fmt, args...) fprintf_unfiltered (gdb_stdlog, fmt, ##args)
+/* STATUS32 register: hardware loops disabled bit.  */
+#define ARC_STATUS32_L_MASK (1 << 12)
+/* STATUS32 register: current instruction is a delay slot.  */
+#define ARC_STATUS32_DE_MASK (1 << 6)
+
+/* Special value for register offset arrays.  */
+#define ARC_OFFSET_NO_REGISTER (-1)
+
+#define arc_print(fmt, args...) gdb_printf (gdb_stdlog, fmt, ##args)
+
+extern bool arc_debug;
 
-extern int arc_debug;
+/* Print an "arc" debug statement.  */
+
+#define arc_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (arc_debug, "arc", fmt, ##__VA_ARGS__)
 
 /* Target-dependent information.  */
 
-struct gdbarch_tdep
+struct arc_gdbarch_tdep : gdbarch_tdep_base
 {
   /* Offset to PC value in jump buffer.  If this is negative, longjmp
      support will be disabled.  */
-  int jb_pc;
+  int jb_pc = 0;
+
+  /* Whether target has hardware (aka zero-delay) loops.  */
+  bool has_hw_loops = false;
+
+  /* Detect sigtramp.  */
+  bool (*is_sigtramp) (frame_info_ptr) = nullptr;
+
+  /* Get address of sigcontext for sigtramp.  */
+  CORE_ADDR (*sigcontext_addr) (frame_info_ptr) = nullptr;
+
+  /* Offset of registers in `struct sigcontext'.  */
+  const int *sc_reg_offset = nullptr;
+
+  /* Number of registers in sc_reg_offsets.  Most likely a ARC_LAST_REGNUM,
+     but in theory it could be less, so it is kept separate.  */
+  int sc_num_regs = 0;
 };
 
 /* Utility functions used by other ARC-specific modules.  */
@@ -144,11 +186,6 @@ arc_arch_is_em (const struct bfd_arch_in
    can't be set to an actual NULL value - that would cause a crash.  */
 int arc_delayed_print_insn (bfd_vma addr, struct disassemble_info *info);
 
-/* Return properly initialized disassemble_info for ARC disassembler - it will
-   not print disassembled instructions to stderr.  */
-
-struct disassemble_info arc_disassemble_info (struct gdbarch *gdbarch);
-
 /* Get branch/jump target address for the INSN.  Note that this function
    returns branch target and doesn't evaluate if this branch is taken or not.
    For the indirect jumps value depends in register state, hence can change.
@@ -163,4 +200,9 @@ CORE_ADDR arc_insn_get_branch_target (co
 
 CORE_ADDR arc_insn_get_linear_next_pc (const struct arc_instruction &insn);
 
+/* Create an arc_arch_features instance from the provided data.  */
+
+arc_arch_features arc_arch_features_create (const bfd *abfd,
+					    const unsigned long mach);
+
 #endif /* ARC_TDEP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-bsd-tdep.c ./gdb/arm-bsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-bsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-bsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for ARM BSD's.
 
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-fbsd-nat.c ./gdb/arm-fbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-fbsd-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-fbsd-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for FreeBSD/arm.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,8 +18,11 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include "inferior.h"
 #include "target.h"
 
+#include "elf/common.h"
+
 #include <sys/types.h>
 #include <sys/ptrace.h>
 #include <machine/reg.h>
@@ -38,56 +41,25 @@ struct arm_fbsd_nat_target : public fbsd
 
 static arm_fbsd_nat_target the_arm_fbsd_nat_target;
 
-/* Determine if PT_GETREGS fetches REGNUM.  */
-
-static bool
-getregs_supplies (int regnum)
-{
-  return ((regnum >= ARM_A1_REGNUM && regnum <= ARM_PC_REGNUM)
-	  || regnum == ARM_PS_REGNUM);
-}
-
-#ifdef PT_GETVFPREGS
-/* Determine if PT_GETVFPREGS fetches REGNUM.  */
-
-static bool
-getvfpregs_supplies (int regnum)
-{
-  return ((regnum >= ARM_D0_REGNUM && regnum <= ARM_D31_REGNUM)
-	  || regnum == ARM_FPSCR_REGNUM);
-}
-#endif
-
 /* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
    for all registers.  */
 
 void
 arm_fbsd_nat_target::fetch_registers (struct regcache *regcache, int regnum)
 {
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
-
-  if (regnum == -1 || getregs_supplies (regnum))
-    {
-      struct reg regs;
-
-      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-	perror_with_name (_("Couldn't get registers"));
-
-      regcache->supply_regset (&arm_fbsd_gregset, regnum, &regs,
-			       sizeof (regs));
-    }
-
+  fetch_register_set<struct reg> (regcache, regnum, PT_GETREGS,
+				  &arm_fbsd_gregset);
 #ifdef PT_GETVFPREGS
-  if (regnum == -1 || getvfpregs_supplies (regnum))
-    {
-      struct vfpreg vfpregs;
-
-      if (ptrace (PT_GETVFPREGS, pid, (PTRACE_TYPE_ARG3) &vfpregs, 0) == -1)
-	perror_with_name (_("Couldn't get floating point status"));
-
-      regcache->supply_regset (&arm_fbsd_vfpregset, regnum, &vfpregs,
-			       sizeof (vfpregs));
-    }
+  fetch_register_set<struct vfpreg> (regcache, regnum, PT_GETVFPREGS,
+				     &arm_fbsd_vfpregset);
+#endif
+#ifdef PT_GETREGSET
+  gdbarch *gdbarch = regcache->arch ();
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (tdep->tls_regnum > 0)
+    fetch_regset<uint32_t> (regcache, regnum, NT_ARM_TLS, &arm_fbsd_tls_regset,
+			    tdep->tls_regnum);
 #endif
 }
 
@@ -97,36 +69,19 @@ arm_fbsd_nat_target::fetch_registers (st
 void
 arm_fbsd_nat_target::store_registers (struct regcache *regcache, int regnum)
 {
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
-
-  if (regnum == -1 || getregs_supplies (regnum))
-    {
-      struct reg regs;
-
-      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-	perror_with_name (_("Couldn't get registers"));
-
-      regcache->collect_regset (&arm_fbsd_gregset, regnum, &regs,
-			       sizeof (regs));
-
-      if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-	perror_with_name (_("Couldn't write registers"));
-    }
-
+  store_register_set<struct reg> (regcache, regnum, PT_GETREGS, PT_SETREGS,
+				  &arm_fbsd_gregset);
 #ifdef PT_GETVFPREGS
-  if (regnum == -1 || getvfpregs_supplies (regnum))
-    {
-      struct vfpreg vfpregs;
-
-      if (ptrace (PT_GETVFPREGS, pid, (PTRACE_TYPE_ARG3) &vfpregs, 0) == -1)
-	perror_with_name (_("Couldn't get floating point status"));
-
-      regcache->collect_regset (&arm_fbsd_vfpregset, regnum, &vfpregs,
-				sizeof (vfpregs));
-
-      if (ptrace (PT_SETVFPREGS, pid, (PTRACE_TYPE_ARG3) &vfpregs, 0) == -1)
-	perror_with_name (_("Couldn't write floating point status"));
-    }
+  store_register_set<struct vfpreg> (regcache, regnum, PT_GETVFPREGS,
+				     PT_SETVFPREGS, &arm_fbsd_vfpregset);
+#endif
+#ifdef PT_GETREGSET
+  gdbarch *gdbarch = regcache->arch ();
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (tdep->tls_regnum > 0)
+    store_regset<uint32_t> (regcache, regnum, NT_ARM_TLS, &arm_fbsd_tls_regset,
+			    tdep->tls_regnum);
 #endif
 }
 
@@ -136,15 +91,23 @@ const struct target_desc *
 arm_fbsd_nat_target::read_description ()
 {
   const struct target_desc *desc;
+  bool tls = false;
 
-  desc = arm_fbsd_read_description_auxv (this);
+  if (inferior_ptid == null_ptid)
+    return this->beneath ()->read_description ();
+
+#ifdef PT_GETREGSET
+  tls = have_regset (inferior_ptid, NT_ARM_TLS) != 0;
+#endif
+  desc = arm_fbsd_read_description_auxv (tls);
   if (desc == NULL)
     desc = this->beneath ()->read_description ();
   return desc;
 }
 
+void _initialize_arm_fbsd_nat ();
 void
-_initialize_arm_fbsd_nat (void)
+_initialize_arm_fbsd_nat ()
 {
   add_inf_child_target (&the_arm_fbsd_nat_target);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-fbsd-tdep.c ./gdb/arm-fbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-fbsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-fbsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD/arm.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,6 +27,7 @@
 #include "auxv.h"
 #include "fbsd-tdep.h"
 #include "gdbcore.h"
+#include "inferior.h"
 #include "osabi.h"
 #include "solib-svr4.h"
 #include "trad-frame.h"
@@ -51,6 +52,14 @@ static const struct regcache_map_entry a
     { 0 }
   };
 
+/* Register numbers are relative to tdep->tls_regnum.  */
+
+static const struct regcache_map_entry arm_fbsd_tls_regmap[] =
+  {
+    { 1, 0, 4 },	/* tpidruro  */
+    { 0 }
+  };
+
 /* In a signal frame, sp points to a 'struct sigframe' which is
    defined as:
 
@@ -96,7 +105,7 @@ static const struct regcache_map_entry a
 
 static void
 arm_fbsd_sigframe_init (const struct tramp_frame *self,
-			struct frame_info *this_frame,
+			frame_info_ptr this_frame,
 			struct trad_frame_cache *this_cache,
 			CORE_ADDR func)
 {
@@ -150,7 +159,35 @@ const struct regset arm_fbsd_vfpregset =
     regcache_supply_regset, regcache_collect_regset
   };
 
-/* Implement the "regset_from_core_section" gdbarch method.  */
+static void
+arm_fbsd_supply_tls_regset (const struct regset *regset,
+			    struct regcache *regcache,
+			    int regnum, const void *buf, size_t size)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  regcache->supply_regset (regset, tdep->tls_regnum, regnum, buf, size);
+}
+
+static void
+arm_fbsd_collect_tls_regset (const struct regset *regset,
+			     const struct regcache *regcache,
+			     int regnum, void *buf, size_t size)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  regcache->collect_regset (regset, tdep->tls_regnum, regnum, buf, size);
+}
+
+const struct regset arm_fbsd_tls_regset =
+  {
+    arm_fbsd_tls_regmap,
+    arm_fbsd_supply_tls_regset, arm_fbsd_collect_tls_regset
+  };
+
+/* Implement the "iterate_over_regset_sections" gdbarch method.  */
 
 static void
 arm_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
@@ -158,11 +195,15 @@ arm_fbsd_iterate_over_regset_sections (s
 				       void *cb_data,
 				       const struct regcache *regcache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   cb (".reg", ARM_FBSD_SIZEOF_GREGSET, ARM_FBSD_SIZEOF_GREGSET,
       &arm_fbsd_gregset, NULL, cb_data);
 
+  if (tdep->tls_regnum > 0)
+    cb (".reg-aarch-tls", ARM_FBSD_SIZEOF_TLSREGSET, ARM_FBSD_SIZEOF_TLSREGSET,
+	&arm_fbsd_tls_regset, NULL, cb_data);
+
   /* While FreeBSD/arm cores do contain a NT_FPREGSET / ".reg2"
      register set, it is not populated with register values by the
      kernel but just contains all zeroes.  */
@@ -171,29 +212,43 @@ arm_fbsd_iterate_over_regset_sections (s
 	&arm_fbsd_vfpregset, "VFP floating-point", cb_data);
 }
 
-/* Lookup a target description from a target's AT_HWCAP auxiliary
-   vector.  */
+/* See arm-fbsd-tdep.h.  */
 
 const struct target_desc *
-arm_fbsd_read_description_auxv (struct target_ops *target)
+arm_fbsd_read_description_auxv (const std::optional<gdb::byte_vector> &auxv,
+				target_ops *target, gdbarch *gdbarch, bool tls)
 {
   CORE_ADDR arm_hwcap = 0;
 
-  if (target_auxv_search (target, AT_FREEBSD_HWCAP, &arm_hwcap) != 1)
-    return nullptr;
+  if (!auxv.has_value ()
+      || target_auxv_search (*auxv, target, gdbarch, AT_FREEBSD_HWCAP,
+			     &arm_hwcap) != 1)
+    return arm_read_description (ARM_FP_TYPE_NONE, tls);
 
   if (arm_hwcap & HWCAP_VFP)
     {
       if (arm_hwcap & HWCAP_NEON)
 	return aarch32_read_description ();
       else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPD32))
-	  == (HWCAP_VFPv3 | HWCAP_VFPD32))
-	return arm_read_description (ARM_FP_TYPE_VFPV3);
+	       == (HWCAP_VFPv3 | HWCAP_VFPD32))
+	return arm_read_description (ARM_FP_TYPE_VFPV3, tls);
       else
-      return arm_read_description (ARM_FP_TYPE_VFPV2);
+	return arm_read_description (ARM_FP_TYPE_VFPV2, tls);
     }
 
-  return nullptr;
+  return arm_read_description (ARM_FP_TYPE_NONE, tls);
+}
+
+/* See arm-fbsd-tdep.h.  */
+
+const struct target_desc *
+arm_fbsd_read_description_auxv (bool tls)
+{
+  const std::optional<gdb::byte_vector> &auxv = target_read_auxv ();
+  return arm_fbsd_read_description_auxv (auxv,
+					 current_inferior ()->top_target (),
+					 current_inferior ()->arch (),
+					 tls);
 }
 
 /* Implement the "core_read_description" gdbarch method.  */
@@ -203,7 +258,32 @@ arm_fbsd_core_read_description (struct g
 				struct target_ops *target,
 				bfd *abfd)
 {
-  return arm_fbsd_read_description_auxv (target);
+  asection *tls = bfd_get_section_by_name (abfd, ".reg-aarch-tls");
+
+  std::optional<gdb::byte_vector> auxv = target_read_auxv_raw (target);
+  return arm_fbsd_read_description_auxv (auxv, target, gdbarch, tls != nullptr);
+}
+
+/* Implement the get_thread_local_address gdbarch method.  */
+
+static CORE_ADDR
+arm_fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid,
+				   CORE_ADDR lm_addr, CORE_ADDR offset)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+  regcache *regcache
+    = get_thread_arch_regcache (current_inferior (), ptid, gdbarch);
+
+  target_fetch_registers (regcache, tdep->tls_regnum);
+
+  ULONGEST tpidruro;
+  if (regcache->cooked_read (tdep->tls_regnum, &tpidruro) != REG_VALID)
+    error (_("Unable to fetch %%tpidruro"));
+
+  /* %tpidruro points to the TCB whose first member is the dtv
+      pointer.  */
+  CORE_ADDR dtv_addr = tpidruro;
+  return fbsd_get_thread_local_address (gdbarch, dtv_addr, lm_addr, offset);
 }
 
 /* Implement the 'init_osabi' method of struct gdb_osabi_handler.  */
@@ -211,7 +291,7 @@ arm_fbsd_core_read_description (struct g
 static void
 arm_fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   /* Generic FreeBSD support.  */
   fbsd_init_abi (info, gdbarch);
@@ -231,12 +311,21 @@ arm_fbsd_init_abi (struct gdbarch_info i
     (gdbarch, arm_fbsd_iterate_over_regset_sections);
   set_gdbarch_core_read_description (gdbarch, arm_fbsd_core_read_description);
 
+  if (tdep->tls_regnum > 0)
+    {
+      set_gdbarch_fetch_tls_load_module_address (gdbarch,
+						 svr4_fetch_objfile_link_map);
+      set_gdbarch_get_thread_local_address (gdbarch,
+					    arm_fbsd_get_thread_local_address);
+    }
+
   /* Single stepping.  */
   set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
 }
 
+void _initialize_arm_fbsd_tdep ();
 void
-_initialize_arm_fbsd_tdep (void)
+_initialize_arm_fbsd_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_FREEBSD,
 			  arm_fbsd_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-fbsd-tdep.h ./gdb/arm-fbsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-fbsd-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-fbsd-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* FreeBSD/arm target support, prototypes.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,12 +26,16 @@
    PC, and CPSR registers.  */
 #define ARM_FBSD_SIZEOF_GREGSET  (17 * 4)
 
+/* The TLS regset consists of a single register.  */
+#define	ARM_FBSD_SIZEOF_TLSREGSET	(4)
+
 /* The VFP regset consists of 32 D registers plus FPSCR, and the whole
    structure is padded to 64-bit alignment.  */
 #define	ARM_FBSD_SIZEOF_VFPREGSET	(33 * 8)
 
 extern const struct regset arm_fbsd_gregset;
 extern const struct regset arm_fbsd_vfpregset;
+extern const struct regset arm_fbsd_tls_regset;
 
 /* Flags passed in AT_HWCAP. */
 #define	HWCAP_VFP		0x00000040
@@ -39,7 +43,17 @@ extern const struct regset arm_fbsd_vfpr
 #define	HWCAP_VFPv3		0x00002000
 #define	HWCAP_VFPD32		0x00080000
 
+/* Lookup a target description based on the AT_HWCAP value in the auxv data
+   AUXV.  */
+
+extern const struct target_desc *
+  arm_fbsd_read_description_auxv (const std::optional<gdb::byte_vector> &auxv,
+				  target_ops *target, gdbarch *gdbarch,
+				  bool tls);
+
+/* Same as the above, but read the auxv data from the current inferior.  */
+
 extern const struct target_desc *
-arm_fbsd_read_description_auxv (struct target_ops *target);
+  arm_fbsd_read_description_auxv (bool tls);
 
 #endif /* ARM_FBSD_TDEP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-linux-nat.c ./gdb/arm-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-linux-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-linux-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* GNU/Linux on ARM native support.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -135,7 +135,7 @@ fetch_fpregs (struct regcache *regcache)
     ret = ptrace (PT_GETFPREGS, tid, 0, fp);
 
   if (ret < 0)
-    perror_with_name (_("Unable to fetch the floating point registers."));
+    perror_with_name (_("Unable to fetch the floating point registers"));
 
   /* Fetch fpsr.  */
   regcache->raw_supply (ARM_FPS_REGNUM, fp + NWFPE_FPSR_OFFSET);
@@ -172,7 +172,7 @@ store_fpregs (const struct regcache *reg
     ret = ptrace (PT_GETFPREGS, tid, 0, fp);
 
   if (ret < 0)
-    perror_with_name (_("Unable to fetch the floating point registers."));
+    perror_with_name (_("Unable to fetch the floating point registers"));
 
   /* Store fpsr.  */
   if (REG_VALID == regcache->get_register_status (ARM_FPS_REGNUM))
@@ -196,7 +196,7 @@ store_fpregs (const struct regcache *reg
     ret = ptrace (PTRACE_SETFPREGS, tid, 0, fp);
 
   if (ret < 0)
-    perror_with_name (_("Unable to store floating point registers."));
+    perror_with_name (_("Unable to store floating point registers"));
 }
 
 /* Fetch all general registers of the process and store into
@@ -224,7 +224,7 @@ fetch_regs (struct regcache *regcache)
     ret = ptrace (PTRACE_GETREGS, tid, 0, &regs);
 
   if (ret < 0)
-    perror_with_name (_("Unable to fetch general registers."));
+    perror_with_name (_("Unable to fetch general registers"));
 
   aarch32_gp_regcache_supply (regcache, (uint32_t *) regs, arm_apcs_32);
 }
@@ -252,7 +252,7 @@ store_regs (const struct regcache *regca
     ret = ptrace (PTRACE_GETREGS, tid, 0, &regs);
 
   if (ret < 0)
-    perror_with_name (_("Unable to fetch general registers."));
+    perror_with_name (_("Unable to fetch general registers"));
 
   aarch32_gp_regcache_collect (regcache, (uint32_t *) regs, arm_apcs_32);
 
@@ -269,7 +269,7 @@ store_regs (const struct regcache *regca
     ret = ptrace (PTRACE_SETREGS, tid, 0, &regs);
 
   if (ret < 0)
-    perror_with_name (_("Unable to store general registers."));
+    perror_with_name (_("Unable to store general registers"));
 }
 
 /* Fetch all WMMX registers of the process and store into
@@ -286,7 +286,7 @@ fetch_wmmx_regs (struct regcache *regcac
 
   ret = ptrace (PTRACE_GETWMMXREGS, tid, 0, regbuf);
   if (ret < 0)
-    perror_with_name (_("Unable to fetch WMMX registers."));
+    perror_with_name (_("Unable to fetch WMMX registers"));
 
   for (regno = 0; regno < 16; regno++)
     regcache->raw_supply (regno + ARM_WR0_REGNUM, &regbuf[regno * 8]);
@@ -311,7 +311,7 @@ store_wmmx_regs (const struct regcache *
 
   ret = ptrace (PTRACE_GETWMMXREGS, tid, 0, regbuf);
   if (ret < 0)
-    perror_with_name (_("Unable to fetch WMMX registers."));
+    perror_with_name (_("Unable to fetch WMMX registers"));
 
   for (regno = 0; regno < 16; regno++)
     if (REG_VALID == regcache->get_register_status (regno + ARM_WR0_REGNUM))
@@ -330,7 +330,7 @@ store_wmmx_regs (const struct regcache *
   ret = ptrace (PTRACE_SETWMMXREGS, tid, 0, regbuf);
 
   if (ret < 0)
-    perror_with_name (_("Unable to store WMMX registers."));
+    perror_with_name (_("Unable to store WMMX registers"));
 }
 
 static void
@@ -339,7 +339,7 @@ fetch_vfp_regs (struct regcache *regcach
   gdb_byte regbuf[ARM_VFP3_REGS_SIZE];
   int ret, tid;
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   /* Get the thread id for the ptrace call.  */
   tid = regcache->ptid ().lwp ();
@@ -356,7 +356,7 @@ fetch_vfp_regs (struct regcache *regcach
     ret = ptrace (PTRACE_GETVFPREGS, tid, 0, regbuf);
 
   if (ret < 0)
-    perror_with_name (_("Unable to fetch VFP registers."));
+    perror_with_name (_("Unable to fetch VFP registers"));
 
   aarch32_vfp_regcache_supply (regcache, regbuf,
 			       tdep->vfp_register_count);
@@ -368,7 +368,7 @@ store_vfp_regs (const struct regcache *r
   gdb_byte regbuf[ARM_VFP3_REGS_SIZE];
   int ret, tid;
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   /* Get the thread id for the ptrace call.  */
   tid = regcache->ptid ().lwp ();
@@ -385,7 +385,7 @@ store_vfp_regs (const struct regcache *r
     ret = ptrace (PTRACE_GETVFPREGS, tid, 0, regbuf);
 
   if (ret < 0)
-    perror_with_name (_("Unable to fetch VFP registers (for update)."));
+    perror_with_name (_("Unable to fetch VFP registers (for update)"));
 
   aarch32_vfp_regcache_collect (regcache, regbuf,
 				tdep->vfp_register_count);
@@ -402,7 +402,7 @@ store_vfp_regs (const struct regcache *r
     ret = ptrace (PTRACE_SETVFPREGS, tid, 0, regbuf);
 
   if (ret < 0)
-    perror_with_name (_("Unable to store VFP registers."));
+    perror_with_name (_("Unable to store VFP registers"));
 }
 
 /* Fetch registers from the child process.  Fetch all registers if
@@ -413,7 +413,7 @@ void
 arm_linux_nat_target::fetch_registers (struct regcache *regcache, int regno)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   if (-1 == regno)
     {
@@ -450,7 +450,7 @@ void
 arm_linux_nat_target::store_registers (struct regcache *regcache, int regno)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   if (-1 == regno)
     {
@@ -515,7 +515,7 @@ supply_fpregset (struct regcache *regcac
 
 ps_err_e
 ps_get_thread_area (struct ps_prochandle *ph,
-                    lwpid_t lwpid, int idx, void **base)
+		    lwpid_t lwpid, int idx, void **base)
 {
   if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0)
     return PS_ERR;
@@ -531,13 +531,16 @@ ps_get_thread_area (struct ps_prochandle
 const struct target_desc *
 arm_linux_nat_target::read_description ()
 {
-  CORE_ADDR arm_hwcap = linux_get_hwcap (this);
+  if (inferior_ptid == null_ptid)
+    return this->beneath ()->read_description ();
+
+  CORE_ADDR arm_hwcap = linux_get_hwcap ();
 
   if (have_ptrace_getregset == TRIBOOL_UNKNOWN)
     {
       elf_gregset_t gpregs;
       struct iovec iov;
-      int tid = inferior_ptid.lwp ();
+      int tid = inferior_ptid.pid ();
 
       iov.iov_base = &gpregs;
       iov.iov_len = sizeof (gpregs);
@@ -550,13 +553,13 @@ arm_linux_nat_target::read_description (
     }
 
   if (arm_hwcap & HWCAP_IWMMXT)
-    return arm_read_description (ARM_FP_TYPE_IWMMXT);
+    return arm_read_description (ARM_FP_TYPE_IWMMXT, false);
 
   if (arm_hwcap & HWCAP_VFP)
     {
       /* Make sure that the kernel supports reading VFP registers.  Support was
 	 added in 2.6.30.  */
-      int pid = inferior_ptid.lwp ();
+      int pid = inferior_ptid.pid ();
       errno = 0;
       char *buf = (char *) alloca (ARM_VFP3_REGS_SIZE);
       if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0 && errno == EIO)
@@ -567,9 +570,9 @@ arm_linux_nat_target::read_description (
       if (arm_hwcap & HWCAP_NEON)
 	return aarch32_read_description ();
       else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
-	return arm_read_description (ARM_FP_TYPE_VFPV3);
+	return arm_read_description (ARM_FP_TYPE_VFPV3, false);
 
-      return arm_read_description (ARM_FP_TYPE_VFPV2);
+      return arm_read_description (ARM_FP_TYPE_VFPV2, false);
     }
 
   return this->beneath ()->read_description ();
@@ -619,18 +622,18 @@ arm_linux_get_hwbp_cap (void)
 	  info.bp_count = (gdb_byte)(val & 0xff);
 
       if (info.wp_count > MAX_WPTS)
-        {
-          warning (_("arm-linux-gdb supports %d hardware watchpoints but target \
-                      supports %d"), MAX_WPTS, info.wp_count);
-          info.wp_count = MAX_WPTS;
-        }
+	{
+	  warning (_("arm-linux-gdb supports %d hardware watchpoints but target \
+		      supports %d"), MAX_WPTS, info.wp_count);
+	  info.wp_count = MAX_WPTS;
+	}
 
       if (info.bp_count > MAX_BPTS)
-        {
-          warning (_("arm-linux-gdb supports %d hardware breakpoints but target \
-                      supports %d"), MAX_BPTS, info.bp_count);
-          info.bp_count = MAX_BPTS;
-        }
+	{
+	  warning (_("arm-linux-gdb supports %d hardware breakpoints but target \
+		      supports %d"), MAX_BPTS, info.bp_count);
+	  info.bp_count = MAX_BPTS;
+	}
 	  available = (info.arch != 0);
 	}
     }
@@ -717,7 +720,7 @@ struct arm_linux_hw_breakpoint
    The Linux vector is indexed as follows:
       -((i << 1) + 2): Control register for watchpoint i.
       -((i << 1) + 1): Address register for watchpoint i.
-                    0: Information register.
+		    0: Information register.
        ((i << 1) + 1): Address register for breakpoint i.
        ((i << 1) + 2): Control register for breakpoint i.
 
@@ -963,7 +966,7 @@ update_registers_callback (struct lwp_in
    =1) BPT for thread TID.  */
 static void
 arm_linux_insert_hw_breakpoint1 (const struct arm_linux_hw_breakpoint* bpt, 
-                                 int watchpoint)
+				 int watchpoint)
 {
   int pid;
   ptid_t pid_ptid;
@@ -987,14 +990,14 @@ arm_linux_insert_hw_breakpoint1 (const s
   for (i = 0; i < count; ++i)
     if (!arm_hwbp_control_is_enabled (bpts[i].control))
       {
-        bpts[i] = *bpt;
-        iterate_over_lwps (pid_ptid,
+	bpts[i] = *bpt;
+	iterate_over_lwps (pid_ptid,
 			   [=] (struct lwp_info *info)
 			   {
 			     return update_registers_callback (info, watchpoint,
 							       i);
 			   });
-        break;
+	break;
       }
 
   gdb_assert (i != count);
@@ -1004,7 +1007,7 @@ arm_linux_insert_hw_breakpoint1 (const s
    (WATCHPOINT = 1) BPT for thread TID.  */
 static void
 arm_linux_remove_hw_breakpoint1 (const struct arm_linux_hw_breakpoint *bpt, 
-                                 int watchpoint)
+				 int watchpoint)
 {
   int pid;
   gdb_byte count, i;
@@ -1028,14 +1031,14 @@ arm_linux_remove_hw_breakpoint1 (const s
   for (i = 0; i < count; ++i)
     if (arm_linux_hw_breakpoint_equal (bpt, bpts + i))
       {
-        bpts[i].control = arm_hwbp_control_disable (bpts[i].control);
+	bpts[i].control = arm_hwbp_control_disable (bpts[i].control);
 	iterate_over_lwps (pid_ptid,
 			   [=] (struct lwp_info *info)
 			   {
 			     return update_registers_callback (info, watchpoint,
 							       i);
 			   });
-        break;
+	break;
       }
 
   gdb_assert (i != count);
@@ -1241,35 +1244,35 @@ arm_linux_nat_target::low_prepare_to_res
   for (i = 0; i < arm_linux_get_hw_breakpoint_count (); i++)
     if (arm_lwp_info->bpts_changed[i])
       {
-        errno = 0;
-        if (arm_hwbp_control_is_enabled (bpts[i].control))
-          if (ptrace (PTRACE_SETHBPREGS, pid,
-              (PTRACE_TYPE_ARG3) ((i << 1) + 1), &bpts[i].address) < 0)
-            perror_with_name (_("Unexpected error setting breakpoint"));
-
-        if (bpts[i].control != 0)
-          if (ptrace (PTRACE_SETHBPREGS, pid,
-              (PTRACE_TYPE_ARG3) ((i << 1) + 2), &bpts[i].control) < 0)
-            perror_with_name (_("Unexpected error setting breakpoint"));
+	errno = 0;
+	if (arm_hwbp_control_is_enabled (bpts[i].control))
+	  if (ptrace (PTRACE_SETHBPREGS, pid,
+	      (PTRACE_TYPE_ARG3) ((i << 1) + 1), &bpts[i].address) < 0)
+	    perror_with_name (_("Unexpected error setting breakpoint"));
+
+	if (bpts[i].control != 0)
+	  if (ptrace (PTRACE_SETHBPREGS, pid,
+	      (PTRACE_TYPE_ARG3) ((i << 1) + 2), &bpts[i].control) < 0)
+	    perror_with_name (_("Unexpected error setting breakpoint"));
 
-        arm_lwp_info->bpts_changed[i] = 0;
+	arm_lwp_info->bpts_changed[i] = 0;
       }
 
   for (i = 0; i < arm_linux_get_hw_watchpoint_count (); i++)
     if (arm_lwp_info->wpts_changed[i])
       {
-        errno = 0;
-        if (arm_hwbp_control_is_enabled (wpts[i].control))
-          if (ptrace (PTRACE_SETHBPREGS, pid,
-              (PTRACE_TYPE_ARG3) -((i << 1) + 1), &wpts[i].address) < 0)
-            perror_with_name (_("Unexpected error setting watchpoint"));
-
-        if (wpts[i].control != 0)
-          if (ptrace (PTRACE_SETHBPREGS, pid,
-              (PTRACE_TYPE_ARG3) -((i << 1) + 2), &wpts[i].control) < 0)
-            perror_with_name (_("Unexpected error setting watchpoint"));
+	errno = 0;
+	if (arm_hwbp_control_is_enabled (wpts[i].control))
+	  if (ptrace (PTRACE_SETHBPREGS, pid,
+	      (PTRACE_TYPE_ARG3) -((i << 1) + 1), &wpts[i].address) < 0)
+	    perror_with_name (_("Unexpected error setting watchpoint"));
+
+	if (wpts[i].control != 0)
+	  if (ptrace (PTRACE_SETHBPREGS, pid,
+	      (PTRACE_TYPE_ARG3) -((i << 1) + 2), &wpts[i].control) < 0)
+	    perror_with_name (_("Unexpected error setting watchpoint"));
 
-        arm_lwp_info->wpts_changed[i] = 0;
+	arm_lwp_info->wpts_changed[i] = 0;
       }
 }
 
@@ -1299,8 +1302,9 @@ arm_linux_nat_target::low_new_fork (stru
   *child_state = *parent_state;
 }
 
+void _initialize_arm_linux_nat ();
 void
-_initialize_arm_linux_nat (void)
+_initialize_arm_linux_nat ()
 {
   /* Register the target.  */
   linux_target = &the_arm_linux_nat_target;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-linux-tdep.c ./gdb/arm-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-linux-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-linux-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GNU/Linux on ARM target support.
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -32,6 +32,7 @@
 #include "breakpoint.h"
 #include "auxv.h"
 #include "xml-syscall.h"
+#include "expop.h"
 
 #include "aarch32-tdep.h"
 #include "arch/arm.h"
@@ -59,7 +60,7 @@
 
 /* Under ARM GNU/Linux the traditional way of performing a breakpoint
    is to execute a particular software interrupt, rather than use a
-   particular undefined instruction to provoke a trap.  Upon exection
+   particular undefined instruction to provoke a trap.  Upon execution
    of the software interrupt the kernel stops the inferior with a
    SIGTRAP, and wakes the debugger.  */
 
@@ -276,7 +277,7 @@ static struct arm_get_next_pcs_ops arm_l
 };
 
 static void
-arm_linux_sigtramp_cache (struct frame_info *this_frame,
+arm_linux_sigtramp_cache (frame_info_ptr this_frame,
 			  struct trad_frame_cache *this_cache,
 			  CORE_ADDR func, int regs_offset)
 {
@@ -299,7 +300,7 @@ arm_linux_sigtramp_cache (struct frame_i
 /* See arm-linux.h for stack layout details.  */
 static void
 arm_linux_sigreturn_init (const struct tramp_frame *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  struct trad_frame_cache *this_cache,
 			  CORE_ADDR func)
 {
@@ -319,7 +320,7 @@ arm_linux_sigreturn_init (const struct t
 
 static void
 arm_linux_rt_sigreturn_init (const struct tramp_frame *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  struct trad_frame_cache *this_cache,
 			  CORE_ADDR func)
 {
@@ -342,7 +343,7 @@ arm_linux_rt_sigreturn_init (const struc
 
 static void
 arm_linux_restart_syscall_init (const struct tramp_frame *self,
-				struct frame_info *this_frame,
+				frame_info_ptr this_frame,
 				struct trad_frame_cache *this_cache,
 				CORE_ADDR func)
 {
@@ -711,7 +712,7 @@ arm_linux_iterate_over_regset_sections (
 					void *cb_data,
 					const struct regcache *regcache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   cb (".reg", ARM_LINUX_SIZEOF_GREGSET, ARM_LINUX_SIZEOF_GREGSET,
       &arm_linux_gregset, NULL, cb_data);
@@ -728,21 +729,22 @@ arm_linux_iterate_over_regset_sections (
 
 static const struct target_desc *
 arm_linux_core_read_description (struct gdbarch *gdbarch,
-                                 struct target_ops *target,
-                                 bfd *abfd)
+				 struct target_ops *target,
+				 bfd *abfd)
 {
-  CORE_ADDR arm_hwcap = linux_get_hwcap (target);
+  std::optional<gdb::byte_vector> auxv = target_read_auxv_raw (target);
+  CORE_ADDR arm_hwcap = linux_get_hwcap (auxv, target, gdbarch);
 
   if (arm_hwcap & HWCAP_VFP)
     {
       /* NEON implies VFPv3-D32 or no-VFP unit.  Say that we only support
-         Neon with VFPv3-D32.  */
+	 Neon with VFPv3-D32.  */
       if (arm_hwcap & HWCAP_NEON)
 	return aarch32_read_description ();
       else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
-	return arm_read_description (ARM_FP_TYPE_VFPV3);
+	return arm_read_description (ARM_FP_TYPE_VFPV3, false);
 
-      return arm_read_description (ARM_FP_TYPE_VFPV2);
+      return arm_read_description (ARM_FP_TYPE_VFPV2, false);
     }
 
   return nullptr;
@@ -754,7 +756,7 @@ arm_linux_core_read_description (struct
    will return to ARM or Thumb code.  Return 0 if it is not a
    rt_sigreturn/sigreturn syscall.  */
 static int
-arm_linux_sigreturn_return_addr (struct frame_info *frame,
+arm_linux_sigreturn_return_addr (frame_info_ptr frame,
 				 unsigned long svc_number,
 				 CORE_ADDR *pc, int *is_thumb)
 {
@@ -811,6 +813,32 @@ arm_linux_sigreturn_next_pc (struct regc
   return next_pc;
 }
 
+/* Return true if we're at execve syscall-exit-stop.  */
+
+static bool
+is_execve_syscall_exit (struct regcache *regs)
+{
+  ULONGEST reg = -1;
+
+  /* Check that lr is 0.  */
+  regcache_cooked_read_unsigned (regs, ARM_LR_REGNUM, &reg);
+  if (reg != 0)
+    return false;
+
+  /* Check that r0-r8 is 0.  */
+  for (int i = 0; i <= 8; ++i)
+    {
+      reg = -1;
+      regcache_cooked_read_unsigned (regs, ARM_A1_REGNUM + i, &reg);
+      if (reg != 0)
+	return false;
+    }
+
+  return true;
+}
+
+#define arm_sys_execve 11
+
 /* At a ptrace syscall-stop, return the syscall number.  This either
    comes from the SWI instruction (OABI) or from r7 (EABI).
 
@@ -828,6 +856,9 @@ arm_linux_get_syscall_number (struct gdb
   int is_thumb;
   ULONGEST svc_number = -1;
 
+  if (is_execve_syscall_exit (regs))
+    return arm_sys_execve;
+
   regcache_cooked_read_unsigned (regs, ARM_PC_REGNUM, &pc);
   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &cpsr);
   is_thumb = (cpsr & t_bit) != 0;
@@ -843,19 +874,24 @@ arm_linux_get_syscall_number (struct gdb
 
       /* PC gets incremented before the syscall-stop, so read the
 	 previous instruction.  */
-      unsigned long this_instr = 
-	read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
-
+      unsigned long this_instr;
+      {
+	ULONGEST val;
+	if (!safe_read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code,
+						&val))
+	  return -1;
+	this_instr = val;
+      }
       unsigned long svc_operand = (0x00ffffff & this_instr);
 
       if (svc_operand)
 	{
-          /* OABI */
+	  /* OABI */
 	  svc_number = svc_operand - 0x900000;
 	}
       else
 	{
-          /* EABI */
+	  /* EABI */
 	  regcache_cooked_read_unsigned (regs, 7, &svc_number);
 	}
     }
@@ -867,8 +903,10 @@ static CORE_ADDR
 arm_linux_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
 {
   CORE_ADDR next_pc = 0;
-  CORE_ADDR pc = regcache_read_pc (self->regcache);
-  int is_thumb = arm_is_thumb (self->regcache);
+  regcache *regcache
+    = gdb::checked_static_cast<struct regcache *> (self->regcache);
+  CORE_ADDR pc = regcache_read_pc (regcache);
+  int is_thumb = arm_is_thumb (regcache);
   ULONGEST svc_number = 0;
 
   if (is_thumb)
@@ -878,7 +916,7 @@ arm_linux_get_next_pcs_syscall_next_pc (
     }
   else
     {
-      struct gdbarch *gdbarch = self->regcache->arch ();
+      struct gdbarch *gdbarch = regcache->arch ();
       enum bfd_endian byte_order_for_code = 
 	gdbarch_byte_order_for_code (gdbarch);
       unsigned long this_instr = 
@@ -901,8 +939,7 @@ arm_linux_get_next_pcs_syscall_next_pc (
     {
       /* SIGRETURN or RT_SIGRETURN may affect the arm thumb mode, so
 	 update IS_THUMB.   */
-      next_pc = arm_linux_sigreturn_next_pc (self->regcache, svc_number,
-					     &is_thumb);
+      next_pc = arm_linux_sigreturn_next_pc (regcache, svc_number, &is_thumb);
     }
 
   /* Addresses for calling Thumb functions have the bit 0 set.  */
@@ -946,7 +983,7 @@ arm_linux_software_single_step (struct r
 static void
 arm_linux_cleanup_svc (struct gdbarch *gdbarch,
 		       struct regcache *regs,
-		       arm_displaced_step_closure *dsc)
+		       arm_displaced_step_copy_insn_closure *dsc)
 {
   ULONGEST apparent_pc;
   int within_scratch;
@@ -957,15 +994,11 @@ arm_linux_cleanup_svc (struct gdbarch *g
 		    && apparent_pc < (dsc->scratch_base
 				      + ARM_DISPLACED_MODIFIED_INSNS * 4 + 4));
 
-  if (debug_displaced)
-    {
-      fprintf_unfiltered (gdb_stdlog, "displaced: PC is apparently %.8lx after "
-			  "SVC step ", (unsigned long) apparent_pc);
-      if (within_scratch)
-        fprintf_unfiltered (gdb_stdlog, "(within scratch space)\n");
-      else
-        fprintf_unfiltered (gdb_stdlog, "(outside scratch space)\n");
-    }
+  displaced_debug_printf ("PC is apparently %.8lx after SVC step %s",
+			  (unsigned long) apparent_pc,
+			  (within_scratch
+			   ? "(within scratch space)"
+			   : "(outside scratch space)"));
 
   if (within_scratch)
     displaced_write_reg (regs, dsc, ARM_PC_REGNUM,
@@ -974,11 +1007,11 @@ arm_linux_cleanup_svc (struct gdbarch *g
 
 static int
 arm_linux_copy_svc (struct gdbarch *gdbarch, struct regcache *regs,
-		    arm_displaced_step_closure *dsc)
+		    arm_displaced_step_copy_insn_closure *dsc)
 {
   CORE_ADDR return_to = 0;
 
-  struct frame_info *frame;
+  frame_info_ptr frame;
   unsigned int svc_number = displaced_read_reg (regs, dsc, 7);
   int is_sigreturn = 0;
   int is_thumb;
@@ -991,16 +1024,12 @@ arm_linux_copy_svc (struct gdbarch *gdba
     {
       struct symtab_and_line sal;
 
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog, "displaced: found "
-			    "sigreturn/rt_sigreturn SVC call.  PC in "
-			    "frame = %lx\n",
-			    (unsigned long) get_frame_pc (frame));
-
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog, "displaced: unwind pc = %lx.  "
-			    "Setting momentary breakpoint.\n",
-			    (unsigned long) return_to);
+      displaced_debug_printf ("found sigreturn/rt_sigreturn SVC call.  "
+			      "PC in frame = %lx",
+			      (unsigned long) get_frame_pc (frame));
+
+      displaced_debug_printf ("unwind pc = %lx.  Setting momentary breakpoint.",
+			      (unsigned long) return_to);
 
       gdb_assert (inferior_thread ()->control.step_resume_breakpoint
 		  == NULL);
@@ -1018,26 +1047,22 @@ arm_linux_copy_svc (struct gdbarch *gdba
 	    = set_momentary_breakpoint (gdbarch, sal, get_frame_id (frame),
 					bp_step_resume).release ();
 
-	  /* set_momentary_breakpoint invalidates FRAME.  */
-	  frame = NULL;
-
 	  /* We need to make sure we actually insert the momentary
 	     breakpoint set above.  */
 	  insert_breakpoints ();
 	}
-      else if (debug_displaced)
-	fprintf_unfiltered (gdb_stderr, "displaced: couldn't find previous "
-			    "frame to set momentary breakpoint for "
-			    "sigreturn/rt_sigreturn\n");
+      else
+	displaced_debug_printf ("couldn't find previous frame to set momentary "
+				"breakpoint for sigreturn/rt_sigreturn");
     }
-  else if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: found SVC call\n");
+  else
+    displaced_debug_printf ("found SVC call");
 
   /* Preparation: If we detect sigreturn, set momentary breakpoint at resume
 		  location, else nothing.
      Insn: unmodified svc.
      Cleanup: if pc lands in scratch space, pc <- insn_addr + insn_size
-              else leave pc alone.  */
+	      else leave pc alone.  */
 
 
   dsc->cleanup = &arm_linux_cleanup_svc;
@@ -1065,7 +1090,7 @@ arm_linux_copy_svc (struct gdbarch *gdba
 static void
 cleanup_kernel_helper_return (struct gdbarch *gdbarch,
 			      struct regcache *regs,
-			      arm_displaced_step_closure *dsc)
+			      arm_displaced_step_copy_insn_closure *dsc)
 {
   displaced_write_reg (regs, dsc, ARM_LR_REGNUM, dsc->tmp[0], CANNOT_WRITE_PC);
   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->tmp[0], BRANCH_WRITE_PC);
@@ -1074,7 +1099,7 @@ cleanup_kernel_helper_return (struct gdb
 static void
 arm_catch_kernel_helper_return (struct gdbarch *gdbarch, CORE_ADDR from,
 				CORE_ADDR to, struct regcache *regs,
-				arm_displaced_step_closure *dsc)
+				arm_displaced_step_copy_insn_closure *dsc)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
 
@@ -1086,7 +1111,7 @@ arm_catch_kernel_helper_return (struct g
   dsc->wrote_to_pc = 1;
 
   /* Preparation: tmp[0] <- r14
-                  r14 <- <scratch space>+4
+		  r14 <- <scratch space>+4
 		  *(<scratch space>+8) <- from
      Insn: ldr pc, [r14, #4]
      Cleanup: r14 <- tmp[0], pc <- tmp[0].  */
@@ -1103,34 +1128,35 @@ arm_catch_kernel_helper_return (struct g
    the program has stepped into a Linux kernel helper routine (which must be
    handled as a special case).  */
 
-static struct displaced_step_closure *
+static displaced_step_copy_insn_closure_up
 arm_linux_displaced_step_copy_insn (struct gdbarch *gdbarch,
 				    CORE_ADDR from, CORE_ADDR to,
 				    struct regcache *regs)
 {
-  arm_displaced_step_closure *dsc = new arm_displaced_step_closure;
+  std::unique_ptr<arm_displaced_step_copy_insn_closure> dsc
+    (new arm_displaced_step_copy_insn_closure);
 
   /* Detect when we enter an (inaccessible by GDB) Linux kernel helper, and
      stop at the return location.  */
   if (from > 0xffff0000)
     {
-      if (debug_displaced)
-        fprintf_unfiltered (gdb_stdlog, "displaced: detected kernel helper "
-			    "at %.8lx\n", (unsigned long) from);
+      displaced_debug_printf ("detected kernel helper at %.8lx",
+			      (unsigned long) from);
 
-      arm_catch_kernel_helper_return (gdbarch, from, to, regs, dsc);
+      arm_catch_kernel_helper_return (gdbarch, from, to, regs, dsc.get ());
     }
   else
     {
       /* Override the default handling of SVC instructions.  */
       dsc->u.svc.copy_svc_os = arm_linux_copy_svc;
 
-      arm_process_displaced_insn (gdbarch, from, to, regs, dsc);
+      arm_process_displaced_insn (gdbarch, from, to, regs, dsc.get ());
     }
 
-  arm_displaced_init_closure (gdbarch, from, to, dsc);
+  arm_displaced_init_closure (gdbarch, from, to, dsc.get ());
 
-  return dsc;
+  /* This is a work around for a problem with g++ 4.8.  */
+  return displaced_step_copy_insn_closure_up (dsc.release ());
 }
 
 /* Implementation of `gdbarch_stap_is_single_operand', as defined in
@@ -1154,7 +1180,7 @@ arm_stap_is_single_operand (struct gdbar
    It returns one if the special token has been parsed successfully,
    or zero if the current token is not considered special.  */
 
-static int
+static expr::operation_up
 arm_stap_parse_special_token (struct gdbarch *gdbarch,
 			      struct stap_parse_info *p)
 {
@@ -1169,7 +1195,6 @@ arm_stap_parse_special_token (struct gdb
       int len, offset;
       int got_minus = 0;
       long displacement;
-      struct stoken str;
 
       ++tmp;
       start = tmp;
@@ -1179,7 +1204,7 @@ arm_stap_parse_special_token (struct gdb
 	++tmp;
 
       if (*tmp != ',')
-	return 0;
+	return {};
 
       len = tmp - start;
       regname = (char *) alloca (len + 2);
@@ -1220,43 +1245,38 @@ arm_stap_parse_special_token (struct gdb
 
       /* Skipping last `]'.  */
       if (*tmp++ != ']')
-	return 0;
+	return {};
+      p->arg = tmp;
+
+      using namespace expr;
 
       /* The displacement.  */
-      write_exp_elt_opcode (&p->pstate, OP_LONG);
-      write_exp_elt_type (&p->pstate, builtin_type (gdbarch)->builtin_long);
-      write_exp_elt_longcst (&p->pstate, displacement);
-      write_exp_elt_opcode (&p->pstate, OP_LONG);
+      struct type *long_type = builtin_type (gdbarch)->builtin_long;
       if (got_minus)
-	write_exp_elt_opcode (&p->pstate, UNOP_NEG);
+	displacement = -displacement;
+      operation_up disp = make_operation<long_const_operation> (long_type,
+								displacement);
 
       /* The register name.  */
-      write_exp_elt_opcode (&p->pstate, OP_REGISTER);
-      str.ptr = regname;
-      str.length = len;
-      write_exp_string (&p->pstate, str);
-      write_exp_elt_opcode (&p->pstate, OP_REGISTER);
+      operation_up reg
+	= make_operation<register_operation> (regname);
 
-      write_exp_elt_opcode (&p->pstate, BINOP_ADD);
+      operation_up sum
+	= make_operation<add_operation> (std::move (reg), std::move (disp));
 
       /* Casting to the expected type.  */
-      write_exp_elt_opcode (&p->pstate, UNOP_CAST);
-      write_exp_elt_type (&p->pstate, lookup_pointer_type (p->arg_type));
-      write_exp_elt_opcode (&p->pstate, UNOP_CAST);
-
-      write_exp_elt_opcode (&p->pstate, UNOP_IND);
-
-      p->arg = tmp;
+      struct type *arg_ptr_type = lookup_pointer_type (p->arg_type);
+      sum = make_operation<unop_cast_operation> (std::move (sum),
+						 arg_ptr_type);
+      return make_operation<unop_ind_operation> (std::move (sum));
     }
-  else
-    return 0;
 
-  return 1;
+  return {};
 }
 
 /* ARM process record-replay constructs: syscall, signal etc.  */
 
-struct linux_record_tdep arm_linux_record_tdep;
+static linux_record_tdep arm_linux_record_tdep;
 
 /* arm_canonicalize_syscall maps from the native arm Linux set
    of syscall ids into a canonical set of syscall ids used by
@@ -1277,7 +1297,7 @@ arm_canonicalize_syscall (int syscall)
     case 8: return gdb_sys_creat;
     case 9: return gdb_sys_link;
     case 10: return gdb_sys_unlink;
-    case 11: return gdb_sys_execve;
+    case arm_sys_execve: return gdb_sys_execve;
     case 12: return gdb_sys_chdir;
     case 13: return gdb_sys_time;
     case 14: return gdb_sys_mknod;
@@ -1623,6 +1643,7 @@ arm_canonicalize_syscall (int syscall)
     case 378: return gdb_sys_kcmp;
     case 379: return gdb_sys_finit_module;
       */
+    case 384: return gdb_sys_getrandom;
     case 983041: /* ARM_breakpoint */ return gdb_sys_no_syscall;
     case 983042: /* ARM_cacheflush */ return gdb_sys_no_syscall;
     case 983043: /* ARM_usr26 */ return gdb_sys_no_syscall;
@@ -1642,7 +1663,7 @@ arm_all_but_pc_registers_record (struct
   for (i = 0; i < ARM_PC_REGNUM; i++)
     {
       if (record_full_arch_list_add_reg (regcache, ARM_A1_REGNUM + i))
-        return -1;
+	return -1;
     }
 
   if (record_full_arch_list_add_reg (regcache, ARM_PS_REGNUM))
@@ -1663,9 +1684,10 @@ arm_linux_syscall_record (struct regcach
 
   if (syscall_gdb == gdb_sys_no_syscall)
     {
-      printf_unfiltered (_("Process record and replay target doesn't "
-                           "support syscall number %s\n"),
-                           plongest (svc_number));
+      gdb_printf (gdb_stderr,
+		  _("Process record and replay target doesn't "
+		    "support syscall number %s\n"),
+		  plongest (svc_number));
       return -1;
     }
 
@@ -1678,7 +1700,7 @@ arm_linux_syscall_record (struct regcach
    }
 
   ret = record_linux_system_call (syscall_gdb, regcache,
-                                  &arm_linux_record_tdep);
+				  &arm_linux_record_tdep);
   if (ret != 0)
     return ret;
 
@@ -1698,7 +1720,7 @@ arm_linux_syscall_record (struct regcach
 /* Implement the skip_trampoline_code gdbarch method.  */
 
 static CORE_ADDR
-arm_linux_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+arm_linux_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
 {
   CORE_ADDR target_pc = arm_skip_stub (frame, pc);
 
@@ -1727,9 +1749,9 @@ arm_linux_init_abi (struct gdbarch_info
 								    NULL };
   static const char *const stap_register_indirection_suffixes[] = { "]",
 								    NULL };
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, 1);
 
   tdep->lowest_pc = 0x8000;
   if (info.byte_order_for_code == BFD_ENDIAN_BIG)
@@ -1769,14 +1791,13 @@ arm_linux_init_abi (struct gdbarch_info
       break;
     default:
       internal_error
-	(__FILE__, __LINE__,
-         _("arm_linux_init_abi: Floating point model not supported"));
+	(_("arm_linux_init_abi: Floating point model not supported"));
       break;
     }
   tdep->jb_elt_size = ARM_LINUX_JB_ELEMENT_SIZE;
 
   set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
+    (gdbarch, linux_ilp32_fetch_link_map_offsets);
 
   /* Single stepping.  */
   set_gdbarch_software_single_step (gdbarch, arm_linux_software_single_step);
@@ -1787,7 +1808,7 @@ arm_linux_init_abi (struct gdbarch_info
 
   /* Enable TLS support.  */
   set_gdbarch_fetch_tls_load_module_address (gdbarch,
-                                             svr4_fetch_objfile_link_map);
+					     svr4_fetch_objfile_link_map);
 
   tramp_frame_prepend_unwinder (gdbarch,
 				&arm_linux_sigreturn_tramp_frame);
@@ -1815,7 +1836,6 @@ arm_linux_init_abi (struct gdbarch_info
   set_gdbarch_displaced_step_copy_insn (gdbarch,
 					arm_linux_displaced_step_copy_insn);
   set_gdbarch_displaced_step_fixup (gdbarch, arm_displaced_step_fixup);
-  set_gdbarch_displaced_step_location (gdbarch, linux_displaced_step_location);
 
   /* Reversible debugging, process record.  */
   set_gdbarch_process_record (gdbarch, arm_process_record);
@@ -2001,8 +2021,9 @@ arm_linux_init_abi (struct gdbarch_info
   set_gdbarch_gcc_target_options (gdbarch, arm_linux_gcc_target_options);
 }
 
+void _initialize_arm_linux_tdep ();
 void
-_initialize_arm_linux_tdep (void)
+_initialize_arm_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_LINUX,
 			  arm_linux_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-linux-tdep.h ./gdb/arm-linux-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-linux-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-linux-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GNU/Linux on ARM target support, prototypes.
 
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-nbsd-nat.c ./gdb/arm-nbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-nbsd-nat.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-nbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,453 +0,0 @@
-/* Native-dependent code for BSD Unix running on ARM's, for GDB.
-
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "gdbcore.h"
-#include "inferior.h"
-#include "regcache.h"
-#include "target.h"
-#include <sys/types.h>
-#include <sys/ptrace.h>
-#include <machine/reg.h>
-#include <machine/frame.h>
-
-#include "arm-tdep.h"
-#include "inf-ptrace.h"
-
-class arm_netbsd_nat_target final : public inf_ptrace_target
-{
-public:
-  /* Add our register access methods.  */
-  void fetch_registers (struct regcache *, int) override;
-  void store_registers (struct regcache *, int) override;
-};
-
-static arm_netbsd_nat_target the_arm_netbsd_nat_target;
-
-static void
-arm_supply_gregset (struct regcache *regcache, struct reg *gregset)
-{
-  int regno;
-  CORE_ADDR r_pc;
-
-  /* Integer registers.  */
-  for (regno = ARM_A1_REGNUM; regno < ARM_SP_REGNUM; regno++)
-    regcache->raw_supply (regno, (char *) &gregset->r[regno]);
-
-  regcache->raw_supply (ARM_SP_REGNUM, (char *) &gregset->r_sp);
-  regcache->raw_supply (ARM_LR_REGNUM, (char *) &gregset->r_lr);
-  /* This is ok: we're running native...  */
-  r_pc = gdbarch_addr_bits_remove (regcache->arch (), gregset->r_pc);
-  regcache->raw_supply (ARM_PC_REGNUM, (char *) &r_pc);
-
-  if (arm_apcs_32)
-    regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->r_cpsr);
-  else
-    regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->r_pc);
-}
-
-static void
-arm_supply_fparegset (struct regcache *regcache, struct fpreg *fparegset)
-{
-  int regno;
-
-  for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
-    regcache->raw_supply (regno,
-			  (char *) &fparegset->fpr[regno - ARM_F0_REGNUM]);
-
-  regcache->raw_supply (ARM_FPS_REGNUM, (char *) &fparegset->fpr_fpsr);
-}
-
-static void
-fetch_register (struct regcache *regcache, int regno)
-{
-  struct reg inferior_registers;
-  int ret;
-
-  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
-
-  if (ret < 0)
-    {
-      warning (_("unable to fetch general register"));
-      return;
-    }
-
-  switch (regno)
-    {
-    case ARM_SP_REGNUM:
-      regcache->raw_supply (ARM_SP_REGNUM, (char *) &inferior_registers.r_sp);
-      break;
-
-    case ARM_LR_REGNUM:
-      regcache->raw_supply (ARM_LR_REGNUM, (char *) &inferior_registers.r_lr);
-      break;
-
-    case ARM_PC_REGNUM:
-      /* This is ok: we're running native...  */
-      inferior_registers.r_pc = gdbarch_addr_bits_remove
-				  (regcache->arch (),
-				   inferior_registers.r_pc);
-      regcache->raw_supply (ARM_PC_REGNUM, (char *) &inferior_registers.r_pc);
-      break;
-
-    case ARM_PS_REGNUM:
-      if (arm_apcs_32)
-	regcache->raw_supply (ARM_PS_REGNUM,
-			      (char *) &inferior_registers.r_cpsr);
-      else
-	regcache->raw_supply (ARM_PS_REGNUM,
-			      (char *) &inferior_registers.r_pc);
-      break;
-
-    default:
-      regcache->raw_supply (regno, (char *) &inferior_registers.r[regno]);
-      break;
-    }
-}
-
-static void
-fetch_regs (struct regcache *regcache)
-{
-  struct reg inferior_registers;
-  int ret;
-  int regno;
-
-  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
-
-  if (ret < 0)
-    {
-      warning (_("unable to fetch general registers"));
-      return;
-    }
-
-  arm_supply_gregset (regcache, &inferior_registers);
-}
-
-static void
-fetch_fp_register (struct regcache *regcache, int regno)
-{
-  struct fpreg inferior_fp_registers;
-  int ret;
-
-  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
-
-  if (ret < 0)
-    {
-      warning (_("unable to fetch floating-point register"));
-      return;
-    }
-
-  switch (regno)
-    {
-    case ARM_FPS_REGNUM:
-      regcache->raw_supply (ARM_FPS_REGNUM,
-			    (char *) &inferior_fp_registers.fpr_fpsr);
-      break;
-
-    default:
-      regcache->raw_supply
-	(regno, (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]);
-      break;
-    }
-}
-
-static void
-fetch_fp_regs (struct regcache *regcache)
-{
-  struct fpreg inferior_fp_registers;
-  int ret;
-  int regno;
-
-  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
-
-  if (ret < 0)
-    {
-      warning (_("unable to fetch general registers"));
-      return;
-    }
-
-  arm_supply_fparegset (regcache, &inferior_fp_registers);
-}
-
-void
-arm_nbsd_nat_target::fetch_registers (struct regcache *regcache, int regno)
-{
-  if (regno >= 0)
-    {
-      if (regno < ARM_F0_REGNUM || regno > ARM_FPS_REGNUM)
-	fetch_register (regcache, regno);
-      else
-	fetch_fp_register (regcache, regno);
-    }
-  else
-    {
-      fetch_regs (regcache);
-      fetch_fp_regs (regcache);
-    }
-}
-
-
-static void
-store_register (const struct regcache *regcache, int regno)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  struct reg inferior_registers;
-  int ret;
-
-  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
-
-  if (ret < 0)
-    {
-      warning (_("unable to fetch general registers"));
-      return;
-    }
-
-  switch (regno)
-    {
-    case ARM_SP_REGNUM:
-      regcache->raw_collect (ARM_SP_REGNUM, (char *) &inferior_registers.r_sp);
-      break;
-
-    case ARM_LR_REGNUM:
-      regcache->raw_collect (ARM_LR_REGNUM, (char *) &inferior_registers.r_lr);
-      break;
-
-    case ARM_PC_REGNUM:
-      if (arm_apcs_32)
-	regcache->raw_collect (ARM_PC_REGNUM,
-			       (char *) &inferior_registers.r_pc);
-      else
-	{
-	  unsigned pc_val;
-
-	  regcache->raw_collect (ARM_PC_REGNUM, (char *) &pc_val);
-	  
-	  pc_val = gdbarch_addr_bits_remove (gdbarch, pc_val);
-	  inferior_registers.r_pc ^= gdbarch_addr_bits_remove
-				       (gdbarch, inferior_registers.r_pc);
-	  inferior_registers.r_pc |= pc_val;
-	}
-      break;
-
-    case ARM_PS_REGNUM:
-      if (arm_apcs_32)
-	regcache->raw_collect (ARM_PS_REGNUM,
-			       (char *) &inferior_registers.r_cpsr);
-      else
-	{
-	  unsigned psr_val;
-
-	  regcache->raw_collect (ARM_PS_REGNUM, (char *) &psr_val);
-
-	  psr_val ^= gdbarch_addr_bits_remove (gdbarch, psr_val);
-	  inferior_registers.r_pc = gdbarch_addr_bits_remove
-				      (gdbarch, inferior_registers.r_pc);
-	  inferior_registers.r_pc |= psr_val;
-	}
-      break;
-
-    default:
-      regcache->raw_collect (regno, (char *) &inferior_registers.r[regno]);
-      break;
-    }
-
-  ret = ptrace (PT_SETREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
-
-  if (ret < 0)
-    warning (_("unable to write register %d to inferior"), regno);
-}
-
-static void
-store_regs (const struct regcache *regcache)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  struct reg inferior_registers;
-  int ret;
-  int regno;
-
-
-  for (regno = ARM_A1_REGNUM; regno < ARM_SP_REGNUM; regno++)
-    regcache->raw_collect (regno, (char *) &inferior_registers.r[regno]);
-
-  regcache->raw_collect (ARM_SP_REGNUM, (char *) &inferior_registers.r_sp);
-  regcache->raw_collect (ARM_LR_REGNUM, (char *) &inferior_registers.r_lr);
-
-  if (arm_apcs_32)
-    {
-      regcache->raw_collect (ARM_PC_REGNUM, (char *) &inferior_registers.r_pc);
-      regcache->raw_collect (ARM_PS_REGNUM,
-			     (char *) &inferior_registers.r_cpsr);
-    }
-  else
-    {
-      unsigned pc_val;
-      unsigned psr_val;
-
-      regcache->raw_collect (ARM_PC_REGNUM, (char *) &pc_val);
-      regcache->raw_collect (ARM_PS_REGNUM, (char *) &psr_val);
-	  
-      pc_val = gdbarch_addr_bits_remove (gdbarch, pc_val);
-      psr_val ^= gdbarch_addr_bits_remove (gdbarch, psr_val);
-
-      inferior_registers.r_pc = pc_val | psr_val;
-    }
-
-  ret = ptrace (PT_SETREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
-
-  if (ret < 0)
-    warning (_("unable to store general registers"));
-}
-
-static void
-store_fp_register (const struct regcache *regcache, int regno)
-{
-  struct fpreg inferior_fp_registers;
-  int ret;
-
-  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
-
-  if (ret < 0)
-    {
-      warning (_("unable to fetch floating-point registers"));
-      return;
-    }
-
-  switch (regno)
-    {
-    case ARM_FPS_REGNUM:
-      regcache->raw_collect (ARM_FPS_REGNUM,
-			     (char *) &inferior_fp_registers.fpr_fpsr);
-      break;
-
-    default:
-      regcache->raw_collect
-	(regno, (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]);
-      break;
-    }
-
-  ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
-
-  if (ret < 0)
-    warning (_("unable to write register %d to inferior"), regno);
-}
-
-static void
-store_fp_regs (const struct regcache *regcache)
-{
-  struct fpreg inferior_fp_registers;
-  int ret;
-  int regno;
-
-
-  for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
-    regcache->raw_collect
-      (regno, (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]);
-
-  regcache->raw_collect (ARM_FPS_REGNUM,
-			 (char *) &inferior_fp_registers.fpr_fpsr);
-
-  ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
-		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
-
-  if (ret < 0)
-    warning (_("unable to store floating-point registers"));
-}
-
-void
-arm_nbsd_nat_target::store_registers (struct regcache *regcache, int regno)
-{
-  if (regno >= 0)
-    {
-      if (regno < ARM_F0_REGNUM || regno > ARM_FPS_REGNUM)
-	store_register (regcache, regno);
-      else
-	store_fp_register (regcache, regno);
-    }
-  else
-    {
-      store_regs (regcache);
-      store_fp_regs (regcache);
-    }
-}
-
-static void
-fetch_elfcore_registers (struct regcache *regcache,
-			 char *core_reg_sect, unsigned core_reg_size,
-			 int which, CORE_ADDR ignore)
-{
-  struct reg gregset;
-  struct fpreg fparegset;
-
-  switch (which)
-    {
-    case 0:	/* Integer registers.  */
-      if (core_reg_size != sizeof (struct reg))
-	warning (_("wrong size of register set in core file"));
-      else
-	{
-	  /* The memcpy may be unnecessary, but we can't really be sure
-	     of the alignment of the data in the core file.  */
-	  memcpy (&gregset, core_reg_sect, sizeof (gregset));
-	  arm_supply_gregset (regcache, &gregset);
-	}
-      break;
-
-    case 2:
-      if (core_reg_size != sizeof (struct fpreg))
-	warning (_("wrong size of FPA register set in core file"));
-      else
-	{
-	  /* The memcpy may be unnecessary, but we can't really be sure
-	     of the alignment of the data in the core file.  */
-	  memcpy (&fparegset, core_reg_sect, sizeof (fparegset));
-	  arm_supply_fparegset (regcache, &fparegset);
-	}
-      break;
-
-    default:
-      /* Don't know what kind of register request this is; just ignore it.  */
-      break;
-    }
-}
-
-static struct core_fns arm_netbsd_elfcore_fns =
-{
-  bfd_target_elf_flavour,		/* core_flavour.  */
-  default_check_format,			/* check_format.  */
-  default_core_sniffer,			/* core_sniffer.  */
-  fetch_elfcore_registers,		/* core_read_registers.  */
-  NULL
-};
-
-void
-_initialize_arm_netbsd_nat (void)
-{
-  add_inf_child_target (&the_arm_netbsd_nat_target);
-
-  deprecated_add_core_fns (&arm_netbsd_elfcore_fns);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-nbsd-tdep.c ./gdb/arm-nbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-nbsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-nbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,93 +0,0 @@
-/* Target-dependent code for NetBSD/arm.
-
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "osabi.h"
-
-#include "arch/arm.h"
-#include "arm-tdep.h"
-#include "solib-svr4.h"
-
-/* Description of the longjmp buffer.  */
-#define ARM_NBSD_JB_PC 24
-#define ARM_NBSD_JB_ELEMENT_SIZE ARM_INT_REGISTER_SIZE
-
-/* For compatibility with previous implementations of GDB on arm/NetBSD,
-   override the default little-endian breakpoint.  */
-static const gdb_byte arm_nbsd_arm_le_breakpoint[] = {0x11, 0x00, 0x00, 0xe6};
-static const gdb_byte arm_nbsd_arm_be_breakpoint[] = {0xe6, 0x00, 0x00, 0x11};
-static const gdb_byte arm_nbsd_thumb_le_breakpoint[] = {0xfe, 0xde};
-static const gdb_byte arm_nbsd_thumb_be_breakpoint[] = {0xde, 0xfe};
-
-static void
-arm_netbsd_init_abi_common (struct gdbarch_info info,
-			    struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  tdep->lowest_pc = 0x8000;
-  switch (info.byte_order)
-    {
-    case BFD_ENDIAN_LITTLE:
-      tdep->arm_breakpoint = arm_nbsd_arm_le_breakpoint;
-      tdep->thumb_breakpoint = arm_nbsd_thumb_le_breakpoint;
-      tdep->arm_breakpoint_size = sizeof (arm_nbsd_arm_le_breakpoint);
-      tdep->thumb_breakpoint_size = sizeof (arm_nbsd_thumb_le_breakpoint);
-      break;
-
-    case BFD_ENDIAN_BIG:
-      tdep->arm_breakpoint = arm_nbsd_arm_be_breakpoint;
-      tdep->thumb_breakpoint = arm_nbsd_thumb_be_breakpoint;
-      tdep->arm_breakpoint_size = sizeof (arm_nbsd_arm_be_breakpoint);
-      tdep->thumb_breakpoint_size = sizeof (arm_nbsd_thumb_be_breakpoint);
-      break;
-
-    default:
-      internal_error (__FILE__, __LINE__,
-		      _("arm_gdbarch_init: bad byte order for float format"));
-    }
-
-  tdep->jb_pc = ARM_NBSD_JB_PC;
-  tdep->jb_elt_size = ARM_NBSD_JB_ELEMENT_SIZE;
-
-  /* Single stepping.  */
-  set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
-}
-  
-static void
-arm_netbsd_elf_init_abi (struct gdbarch_info info,
-			 struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  arm_netbsd_init_abi_common (info, gdbarch);
-  if (tdep->fp_model == ARM_FLOAT_AUTO)
-    tdep->fp_model = ARM_FLOAT_SOFT_VFP;
-
-  /* NetBSD ELF uses SVR4-style shared libraries.  */
-  set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
-}
-
-void
-_initialize_arm_netbsd_tdep (void)
-{
-  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD,
-                          arm_netbsd_elf_init_abi);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-netbsd-nat.c ./gdb/arm-netbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-netbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arm-netbsd-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,363 @@
+/* Native-dependent code for BSD Unix running on ARM's, for GDB.
+
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* We define this to get types like register_t.  */
+#define _KERNTYPES
+#include "defs.h"
+#include "gdbcore.h"
+#include "inferior.h"
+#include "regcache.h"
+#include "target.h"
+#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <sys/sysctl.h>
+#include <machine/reg.h>
+#include <machine/frame.h>
+
+#include "arm-tdep.h"
+#include "arm-netbsd-tdep.h"
+#include "aarch32-tdep.h"
+#include "inf-ptrace.h"
+#include "netbsd-nat.h"
+
+class arm_netbsd_nat_target final : public nbsd_nat_target
+{
+public:
+  /* Add our register access methods.  */
+  void fetch_registers (struct regcache *, int) override;
+  void store_registers (struct regcache *, int) override;
+  const struct target_desc *read_description () override;
+};
+
+static arm_netbsd_nat_target the_arm_netbsd_nat_target;
+
+static void
+arm_supply_vfpregset (struct regcache *regcache, struct fpreg *fpregset)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (regcache->arch ());
+  if (tdep->vfp_register_count == 0)
+    return;
+
+  struct vfpreg &vfp = fpregset->fpr_vfp;
+  for (int regno = 0; regno <= tdep->vfp_register_count; regno++)
+    regcache->raw_supply (regno + ARM_D0_REGNUM, (char *) &vfp.vfp_regs[regno]);
+
+  regcache->raw_supply (ARM_FPSCR_REGNUM, (char *) &vfp.vfp_fpscr);
+}
+
+static void
+fetch_register (struct regcache *regcache, int regno)
+{
+  struct reg inferior_registers;
+  int ret;
+  int lwp = regcache->ptid ().lwp ();
+
+  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
+		(PTRACE_TYPE_ARG3) &inferior_registers, lwp);
+
+  if (ret < 0)
+    {
+      warning (_("unable to fetch general register"));
+      return;
+    }
+  arm_nbsd_supply_gregset (nullptr, regcache, regno, &inferior_registers,
+			   sizeof (inferior_registers));
+}
+
+static void
+fetch_fp_register (struct regcache *regcache, int regno)
+{
+  struct fpreg inferior_fp_registers;
+  int lwp = regcache->ptid ().lwp ();
+
+  int ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
+		    (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp);
+
+  struct vfpreg &vfp = inferior_fp_registers.fpr_vfp;
+
+  if (ret < 0)
+    {
+      warning (_("unable to fetch floating-point register"));
+      return;
+    }
+
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (regcache->arch ());
+  if (regno == ARM_FPSCR_REGNUM && tdep->vfp_register_count != 0)
+    regcache->raw_supply (ARM_FPSCR_REGNUM, (char *) &vfp.vfp_fpscr);
+  else if (regno >= ARM_D0_REGNUM
+	   && regno <= ARM_D0_REGNUM + tdep->vfp_register_count)
+    {
+      regcache->raw_supply (regno,
+			    (char *) &vfp.vfp_regs[regno - ARM_D0_REGNUM]);
+    }
+  else
+    warning (_("Invalid register number."));
+}
+
+static void
+fetch_fp_regs (struct regcache *regcache)
+{
+  struct fpreg inferior_fp_registers;
+  int lwp = regcache->ptid ().lwp ();
+  int ret;
+  int regno;
+
+  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
+		(PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp);
+
+  if (ret < 0)
+    {
+      warning (_("unable to fetch general registers"));
+      return;
+    }
+
+  arm_supply_vfpregset (regcache, &inferior_fp_registers);
+}
+
+void
+arm_netbsd_nat_target::fetch_registers (struct regcache *regcache, int regno)
+{
+  if (regno >= 0)
+    {
+      if (regno < ARM_F0_REGNUM || regno > ARM_FPS_REGNUM)
+	fetch_register (regcache, regno);
+      else
+	fetch_fp_register (regcache, regno);
+    }
+  else
+    {
+      fetch_register (regcache, -1);
+      fetch_fp_regs (regcache);
+    }
+}
+
+
+static void
+store_register (const struct regcache *regcache, int regno)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  struct reg inferior_registers;
+  int lwp = regcache->ptid ().lwp ();
+  int ret;
+
+  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
+		(PTRACE_TYPE_ARG3) &inferior_registers, lwp);
+
+  if (ret < 0)
+    {
+      warning (_("unable to fetch general registers"));
+      return;
+    }
+
+  switch (regno)
+    {
+    case ARM_SP_REGNUM:
+      regcache->raw_collect (ARM_SP_REGNUM, (char *) &inferior_registers.r_sp);
+      break;
+
+    case ARM_LR_REGNUM:
+      regcache->raw_collect (ARM_LR_REGNUM, (char *) &inferior_registers.r_lr);
+      break;
+
+    case ARM_PC_REGNUM:
+      if (arm_apcs_32)
+	regcache->raw_collect (ARM_PC_REGNUM,
+			       (char *) &inferior_registers.r_pc);
+      else
+	{
+	  unsigned pc_val;
+
+	  regcache->raw_collect (ARM_PC_REGNUM, (char *) &pc_val);
+	  
+	  pc_val = gdbarch_addr_bits_remove (gdbarch, pc_val);
+	  inferior_registers.r_pc ^= gdbarch_addr_bits_remove
+				       (gdbarch, inferior_registers.r_pc);
+	  inferior_registers.r_pc |= pc_val;
+	}
+      break;
+
+    case ARM_PS_REGNUM:
+      if (arm_apcs_32)
+	regcache->raw_collect (ARM_PS_REGNUM,
+			       (char *) &inferior_registers.r_cpsr);
+      else
+	{
+	  unsigned psr_val;
+
+	  regcache->raw_collect (ARM_PS_REGNUM, (char *) &psr_val);
+
+	  psr_val ^= gdbarch_addr_bits_remove (gdbarch, psr_val);
+	  inferior_registers.r_pc = gdbarch_addr_bits_remove
+				      (gdbarch, inferior_registers.r_pc);
+	  inferior_registers.r_pc |= psr_val;
+	}
+      break;
+
+    default:
+      regcache->raw_collect (regno, (char *) &inferior_registers.r[regno]);
+      break;
+    }
+
+  ret = ptrace (PT_SETREGS, regcache->ptid ().pid (),
+		(PTRACE_TYPE_ARG3) &inferior_registers, lwp);
+
+  if (ret < 0)
+    warning (_("unable to write register %d to inferior"), regno);
+}
+
+static void
+store_regs (const struct regcache *regcache)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  struct reg inferior_registers;
+  int lwp = regcache->ptid ().lwp ();
+  int ret;
+  int regno;
+
+
+  for (regno = ARM_A1_REGNUM; regno < ARM_SP_REGNUM; regno++)
+    regcache->raw_collect (regno, (char *) &inferior_registers.r[regno]);
+
+  regcache->raw_collect (ARM_SP_REGNUM, (char *) &inferior_registers.r_sp);
+  regcache->raw_collect (ARM_LR_REGNUM, (char *) &inferior_registers.r_lr);
+
+  if (arm_apcs_32)
+    {
+      regcache->raw_collect (ARM_PC_REGNUM, (char *) &inferior_registers.r_pc);
+      regcache->raw_collect (ARM_PS_REGNUM,
+			     (char *) &inferior_registers.r_cpsr);
+    }
+  else
+    {
+      unsigned pc_val;
+      unsigned psr_val;
+
+      regcache->raw_collect (ARM_PC_REGNUM, (char *) &pc_val);
+      regcache->raw_collect (ARM_PS_REGNUM, (char *) &psr_val);
+	  
+      pc_val = gdbarch_addr_bits_remove (gdbarch, pc_val);
+      psr_val ^= gdbarch_addr_bits_remove (gdbarch, psr_val);
+
+      inferior_registers.r_pc = pc_val | psr_val;
+    }
+
+  ret = ptrace (PT_SETREGS, regcache->ptid ().pid (),
+		(PTRACE_TYPE_ARG3) &inferior_registers, lwp);
+
+  if (ret < 0)
+    warning (_("unable to store general registers"));
+}
+
+static void
+store_fp_register (const struct regcache *regcache, int regno)
+{
+  struct fpreg inferior_fp_registers;
+  int lwp = regcache->ptid ().lwp ();
+  int ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
+		    (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp);
+  struct vfpreg &vfp = inferior_fp_registers.fpr_vfp;
+
+  if (ret < 0)
+    {
+      warning (_("unable to fetch floating-point registers"));
+      return;
+    }
+
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (regcache->arch ());
+  if (regno == ARM_FPSCR_REGNUM && tdep->vfp_register_count != 0)
+    regcache->raw_collect (ARM_FPSCR_REGNUM, (char *) &vfp.vfp_fpscr);
+  else if (regno >= ARM_D0_REGNUM
+	   && regno <= ARM_D0_REGNUM + tdep->vfp_register_count)
+    {
+      regcache->raw_collect (regno,
+			     (char *) &vfp.vfp_regs[regno - ARM_D0_REGNUM]);
+    }
+  else
+    warning (_("Invalid register number."));
+
+  ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
+		(PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp);
+
+  if (ret < 0)
+    warning (_("unable to write register %d to inferior"), regno);
+}
+
+static void
+store_fp_regs (const struct regcache *regcache)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (regcache->arch ());
+  int lwp = regcache->ptid ().lwp ();
+  if (tdep->vfp_register_count == 0)
+    return;
+
+  struct fpreg fpregs;
+  for (int regno = 0; regno <= tdep->vfp_register_count; regno++)
+    regcache->raw_collect
+      (regno + ARM_D0_REGNUM, (char *) &fpregs.fpr_vfp.vfp_regs[regno]);
+
+  regcache->raw_collect (ARM_FPSCR_REGNUM,
+			 (char *) &fpregs.fpr_vfp.vfp_fpscr);
+
+  int ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
+		    (PTRACE_TYPE_ARG3) &fpregs, lwp);
+
+  if (ret < 0)
+    warning (_("unable to store floating-point registers"));
+}
+
+void
+arm_netbsd_nat_target::store_registers (struct regcache *regcache, int regno)
+{
+  if (regno >= 0)
+    {
+      if (regno < ARM_F0_REGNUM || regno > ARM_FPS_REGNUM)
+	store_register (regcache, regno);
+      else
+	store_fp_register (regcache, regno);
+    }
+  else
+    {
+      store_regs (regcache);
+      store_fp_regs (regcache);
+    }
+}
+
+const struct target_desc *
+arm_netbsd_nat_target::read_description ()
+{
+  int flag;
+  size_t len = sizeof (flag);
+
+  if (sysctlbyname("machdep.fpu_present", &flag, &len, NULL, 0) != 0
+      || !flag)
+    return arm_read_description (ARM_FP_TYPE_NONE, false);
+
+  len = sizeof(flag);
+  if (sysctlbyname("machdep.neon_present", &flag, &len, NULL, 0) == 0 && flag)
+    return aarch32_read_description ();
+
+  return arm_read_description (ARM_FP_TYPE_VFPV3, false);
+}
+
+void _initialize_arm_netbsd_nat ();
+void
+_initialize_arm_netbsd_nat ()
+{
+  add_inf_child_target (&the_arm_netbsd_nat_target);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-netbsd-tdep.c ./gdb/arm-netbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-netbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arm-netbsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,170 @@
+/* Target-dependent code for NetBSD/arm.
+
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "osabi.h"
+
+#include "arch/arm.h"
+#include "arm-netbsd-tdep.h"
+#include "netbsd-tdep.h"
+#include "arm-tdep.h"
+#include "regset.h"
+#include "solib-svr4.h"
+
+/* Description of the longjmp buffer.  */
+#define ARM_NBSD_JB_PC 24
+#define ARM_NBSD_JB_ELEMENT_SIZE ARM_INT_REGISTER_SIZE
+
+/* For compatibility with previous implementations of GDB on arm/NetBSD,
+   override the default little-endian breakpoint.  */
+static const gdb_byte arm_nbsd_arm_le_breakpoint[] = {0x11, 0x00, 0x00, 0xe6};
+static const gdb_byte arm_nbsd_arm_be_breakpoint[] = {0xe6, 0x00, 0x00, 0x11};
+static const gdb_byte arm_nbsd_thumb_le_breakpoint[] = {0xfe, 0xde};
+static const gdb_byte arm_nbsd_thumb_be_breakpoint[] = {0xde, 0xfe};
+
+/* This matches struct reg from NetBSD's sys/arch/arm/include/reg.h:
+   https://github.com/NetBSD/src/blob/7c13e6e6773bb171f4ed3ed53013e9d24b3c1eac/sys/arch/arm/include/reg.h#L39
+ */
+struct arm_nbsd_reg
+{
+  uint32_t reg[13];
+  uint32_t sp;
+  uint32_t lr;
+  uint32_t pc;
+  uint32_t cpsr;
+};
+
+void
+arm_nbsd_supply_gregset (const struct regset *regset, struct regcache *regcache,
+			 int regnum, const void *gregs, size_t len)
+{
+  const arm_nbsd_reg *gregset = static_cast<const arm_nbsd_reg *>(gregs);
+  gdb_assert (len >= sizeof (arm_nbsd_reg));
+
+  /* Integer registers.  */
+  for (int i = ARM_A1_REGNUM; i < ARM_SP_REGNUM; i++)
+    if (regnum == -1 || regnum == i)
+      regcache->raw_supply (i, (char *) &gregset->reg[i]);
+
+  if (regnum == -1 || regnum == ARM_SP_REGNUM)
+    regcache->raw_supply (ARM_SP_REGNUM, (char *) &gregset->sp);
+
+  if (regnum == -1 || regnum == ARM_LR_REGNUM)
+    regcache->raw_supply (ARM_LR_REGNUM, (char *) &gregset->lr);
+
+  if (regnum == -1 || regnum == ARM_PC_REGNUM)
+    {
+      CORE_ADDR r_pc = gdbarch_addr_bits_remove (regcache->arch (), gregset->pc);
+      regcache->raw_supply (ARM_PC_REGNUM, (char *) &r_pc);
+    }
+
+  if (regnum == -1 || regnum == ARM_PS_REGNUM)
+    {
+      if (arm_apcs_32)
+	regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->cpsr);
+      else
+	regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->pc);
+    }
+}
+
+static const struct regset arm_nbsd_regset = {
+  nullptr,
+  arm_nbsd_supply_gregset,
+  /* We don't need a collect function because we only use this reading registers
+     (via iterate_over_regset_sections and fetch_regs/fetch_register).  */
+  nullptr,
+  0
+};
+
+static void
+arm_nbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
+				       iterate_over_regset_sections_cb *cb,
+				       void *cb_data,
+				       const struct regcache *regcache)
+{
+  cb (".reg", sizeof (arm_nbsd_reg), sizeof (arm_nbsd_reg), &arm_nbsd_regset,
+      NULL, cb_data);
+  /* cbiesinger/2020-02-12 -- as far as I can tell, ARM/NetBSD does
+     not write any floating point registers into the core file (tested
+     with NetBSD 9.1_RC1).  When it does, this function will need to read them,
+     and the arm-netbsd gdbarch will need a core_read_description function
+     to return the right description for them.  */
+}
+
+static void
+arm_netbsd_init_abi_common (struct gdbarch_info info,
+			    struct gdbarch *gdbarch)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  tdep->lowest_pc = 0x8000;
+  switch (info.byte_order)
+    {
+    case BFD_ENDIAN_LITTLE:
+      tdep->arm_breakpoint = arm_nbsd_arm_le_breakpoint;
+      tdep->thumb_breakpoint = arm_nbsd_thumb_le_breakpoint;
+      tdep->arm_breakpoint_size = sizeof (arm_nbsd_arm_le_breakpoint);
+      tdep->thumb_breakpoint_size = sizeof (arm_nbsd_thumb_le_breakpoint);
+      break;
+
+    case BFD_ENDIAN_BIG:
+      tdep->arm_breakpoint = arm_nbsd_arm_be_breakpoint;
+      tdep->thumb_breakpoint = arm_nbsd_thumb_be_breakpoint;
+      tdep->arm_breakpoint_size = sizeof (arm_nbsd_arm_be_breakpoint);
+      tdep->thumb_breakpoint_size = sizeof (arm_nbsd_thumb_be_breakpoint);
+      break;
+
+    default:
+      internal_error (_("arm_gdbarch_init: bad byte order for float format"));
+    }
+
+  tdep->jb_pc = ARM_NBSD_JB_PC;
+  tdep->jb_elt_size = ARM_NBSD_JB_ELEMENT_SIZE;
+
+  set_gdbarch_iterate_over_regset_sections
+    (gdbarch, arm_nbsd_iterate_over_regset_sections);
+  /* Single stepping.  */
+  set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
+}
+
+static void
+arm_netbsd_elf_init_abi (struct gdbarch_info info,
+			 struct gdbarch *gdbarch)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  arm_netbsd_init_abi_common (info, gdbarch);
+
+  nbsd_init_abi (info, gdbarch);
+
+  if (tdep->fp_model == ARM_FLOAT_AUTO)
+    tdep->fp_model = ARM_FLOAT_SOFT_VFP;
+
+  /* NetBSD ELF uses SVR4-style shared libraries.  */
+  set_solib_svr4_fetch_link_map_offsets
+    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
+}
+
+void _initialize_arm_netbsd_tdep ();
+void
+_initialize_arm_netbsd_tdep ()
+{
+  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD,
+			  arm_netbsd_elf_init_abi);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-netbsd-tdep.h ./gdb/arm-netbsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-netbsd-tdep.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arm-netbsd-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,27 @@
+/* NetBSD/ARM support.
+
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ARM_NBSD_TDEP_H
+#define ARM_NBSD_TDEP_H
+
+void arm_nbsd_supply_gregset
+  (const struct regset *regset, struct regcache *regcache,
+   int regnum, const void *gregs, size_t len);
+
+#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-none-tdep.c ./gdb/arm-none-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-none-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arm-none-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,213 @@
+/* none on ARM target support.
+
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "arm-tdep.h"
+#include "arch-utils.h"
+#include "regcache.h"
+#include "elf-bfd.h"
+#include "regset.h"
+#include "user-regs.h"
+
+#ifdef HAVE_ELF
+#include "elf-none-tdep.h"
+#endif
+
+/* Core file and register set support.  */
+#define ARM_NONE_SIZEOF_GREGSET (18 * ARM_INT_REGISTER_SIZE)
+
+/* Support VFP register format.  */
+#define ARM_NONE_SIZEOF_VFP (32 * 8 + 4)
+
+/* The index to access CPSR in user_regs as defined in GLIBC.  */
+#define ARM_NONE_CPSR_GREGNUM 16
+
+/* Supply register REGNUM from buffer GREGS_BUF (length LEN bytes) into
+   REGCACHE.  If REGNUM is -1 then supply all registers.  The set of
+   registers that this function will supply is limited to the general
+   purpose registers.
+
+   The layout of the registers here is based on the ARM GNU/Linux
+   layout.  */
+
+static void
+arm_none_supply_gregset (const struct regset *regset,
+			 struct regcache *regcache,
+			 int regnum, const void *gregs_buf, size_t len)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  const gdb_byte *gregs = (const gdb_byte *) gregs_buf;
+
+  for (int regno = ARM_A1_REGNUM; regno < ARM_PC_REGNUM; regno++)
+    if (regnum == -1 || regnum == regno)
+      regcache->raw_supply (regno, gregs + ARM_INT_REGISTER_SIZE * regno);
+
+  if (regnum == ARM_PS_REGNUM || regnum == -1)
+    {
+      if (arm_apcs_32)
+	regcache->raw_supply (ARM_PS_REGNUM,
+			      gregs + ARM_INT_REGISTER_SIZE
+			      * ARM_NONE_CPSR_GREGNUM);
+      else
+	regcache->raw_supply (ARM_PS_REGNUM,
+			     gregs + ARM_INT_REGISTER_SIZE * ARM_PC_REGNUM);
+    }
+
+  if (regnum == ARM_PC_REGNUM || regnum == -1)
+    {
+      gdb_byte pc_buf[ARM_INT_REGISTER_SIZE];
+
+      CORE_ADDR reg_pc
+	= extract_unsigned_integer (gregs + ARM_INT_REGISTER_SIZE
+				    * ARM_PC_REGNUM,
+				    ARM_INT_REGISTER_SIZE, byte_order);
+      reg_pc = gdbarch_addr_bits_remove (gdbarch, reg_pc);
+      store_unsigned_integer (pc_buf, ARM_INT_REGISTER_SIZE, byte_order,
+			      reg_pc);
+      regcache->raw_supply (ARM_PC_REGNUM, pc_buf);
+    }
+}
+
+/* Collect register REGNUM from REGCACHE and place it into buffer GREGS_BUF
+   (length LEN bytes).  If REGNUM is -1 then collect all registers.  The
+   set of registers that this function will collect is limited to the
+   general purpose registers.
+
+   The layout of the registers here is based on the ARM GNU/Linux
+   layout.  */
+
+static void
+arm_none_collect_gregset (const struct regset *regset,
+			  const struct regcache *regcache,
+			  int regnum, void *gregs_buf, size_t len)
+{
+  gdb_byte *gregs = (gdb_byte *) gregs_buf;
+
+  for (int regno = ARM_A1_REGNUM; regno < ARM_PC_REGNUM; regno++)
+    if (regnum == -1 || regnum == regno)
+      regcache->raw_collect (regno,
+			     gregs + ARM_INT_REGISTER_SIZE * regno);
+
+  if (regnum == ARM_PS_REGNUM || regnum == -1)
+    {
+      if (arm_apcs_32)
+	regcache->raw_collect (ARM_PS_REGNUM,
+			       gregs + ARM_INT_REGISTER_SIZE
+			       * ARM_NONE_CPSR_GREGNUM);
+      else
+	regcache->raw_collect (ARM_PS_REGNUM,
+			       gregs + ARM_INT_REGISTER_SIZE * ARM_PC_REGNUM);
+    }
+
+  if (regnum == ARM_PC_REGNUM || regnum == -1)
+    regcache->raw_collect (ARM_PC_REGNUM,
+			   gregs + ARM_INT_REGISTER_SIZE * ARM_PC_REGNUM);
+}
+
+/* Supply VFP registers from REGS_BUF into REGCACHE.  */
+
+static void
+arm_none_supply_vfp (const struct regset *regset,
+		     struct regcache *regcache,
+		     int regnum, const void *regs_buf, size_t len)
+{
+  const gdb_byte *regs = (const gdb_byte *) regs_buf;
+
+  if (regnum == ARM_FPSCR_REGNUM || regnum == -1)
+    regcache->raw_supply (ARM_FPSCR_REGNUM, regs + 32 * 8);
+
+  for (int regno = ARM_D0_REGNUM; regno <= ARM_D31_REGNUM; regno++)
+    if (regnum == -1 || regnum == regno)
+      regcache->raw_supply (regno, regs + (regno - ARM_D0_REGNUM) * 8);
+}
+
+/* Collect VFP registers from REGCACHE into REGS_BUF.  */
+
+static void
+arm_none_collect_vfp (const struct regset *regset,
+		      const struct regcache *regcache,
+		      int regnum, void *regs_buf, size_t len)
+{
+  gdb_byte *regs = (gdb_byte *) regs_buf;
+
+  if (regnum == ARM_FPSCR_REGNUM || regnum == -1)
+    regcache->raw_collect (ARM_FPSCR_REGNUM, regs + 32 * 8);
+
+  for (int regno = ARM_D0_REGNUM; regno <= ARM_D31_REGNUM; regno++)
+    if (regnum == -1 || regnum == regno)
+      regcache->raw_collect (regno, regs + (regno - ARM_D0_REGNUM) * 8);
+}
+
+/* The general purpose register set.  */
+
+static const struct regset arm_none_gregset =
+  {
+    nullptr, arm_none_supply_gregset, arm_none_collect_gregset
+  };
+
+/* The VFP register set.  */
+
+static const struct regset arm_none_vfpregset =
+  {
+    nullptr, arm_none_supply_vfp, arm_none_collect_vfp
+  };
+
+/* Iterate over core file register note sections.  */
+
+static void
+arm_none_iterate_over_regset_sections (struct gdbarch *gdbarch,
+				       iterate_over_regset_sections_cb *cb,
+				       void *cb_data,
+				       const struct regcache *regcache)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  cb (".reg", ARM_NONE_SIZEOF_GREGSET, ARM_NONE_SIZEOF_GREGSET,
+      &arm_none_gregset, nullptr, cb_data);
+
+  if (tdep->vfp_register_count > 0)
+    cb (".reg-arm-vfp", ARM_NONE_SIZEOF_VFP, ARM_NONE_SIZEOF_VFP,
+	&arm_none_vfpregset, "VFP floating-point", cb_data);
+}
+
+/* Initialize ARM bare-metal ABI info.  */
+
+static void
+arm_none_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+#ifdef HAVE_ELF
+  elf_none_init_abi (gdbarch);
+#endif
+
+  /* Iterate over registers for reading and writing bare metal ARM core
+     files.  */
+  set_gdbarch_iterate_over_regset_sections
+    (gdbarch, arm_none_iterate_over_regset_sections);
+}
+
+/* Initialize ARM bare-metal target support.  */
+
+void _initialize_arm_none_tdep ();
+void
+_initialize_arm_none_tdep ()
+{
+  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NONE,
+			  arm_none_init_abi);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-obsd-tdep.c ./gdb/arm-obsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-obsd-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-obsd-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for OpenBSD/arm.
 
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,7 +30,7 @@
 
 static void
 armobsd_sigframe_init (const struct tramp_frame *self,
-		       struct frame_info *this_frame,
+		       frame_info_ptr this_frame,
 		       struct trad_frame_cache *cache,
 		       CORE_ADDR func)
 {
@@ -76,7 +76,7 @@ static void
 armobsd_init_abi (struct gdbarch_info info,
 		  struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   if (tdep->fp_model == ARM_FLOAT_AUTO)
     tdep->fp_model = ARM_FLOAT_SOFT_VFP;
@@ -115,8 +115,9 @@ armobsd_init_abi (struct gdbarch_info in
     }
 }
 
+void _initialize_armobsd_tdep ();
 void
-_initialize_armobsd_tdep (void)
+_initialize_armobsd_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_OPENBSD,
 			  armobsd_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-pikeos-tdep.c ./gdb/arm-pikeos-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-pikeos-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-pikeos-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2016-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2016-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -81,12 +81,13 @@ arm_pikeos_osabi_sniffer (bfd *abfd)
     return GDB_OSABI_UNKNOWN;
 }
 
+void _initialize_arm_pikeos_tdep ();
 void
-_initialize_arm_pikeos_tdep (void)
+_initialize_arm_pikeos_tdep ()
 {
   /* Register the sniffer for the PikeOS targets.  */
   gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_elf_flavour,
-                                  arm_pikeos_osabi_sniffer);
+				  arm_pikeos_osabi_sniffer);
   gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_PIKEOS,
-                          arm_pikeos_init_abi);
+			  arm_pikeos_init_abi);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-symbian-tdep.c ./gdb/arm-symbian-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-symbian-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-symbian-tdep.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,131 +0,0 @@
-/* ARM Symbian OS target support.
-
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "frame.h"
-#include "objfiles.h"
-#include "osabi.h"
-#include "solib.h"
-#include "solib-target.h"
-#include "target.h"
-#include "elf-bfd.h"
-
-/* If PC is in a DLL import stub, return the address of the `real'
-   function belonging to the stub.  */
-
-static CORE_ADDR
-arm_symbian_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
-{
-  struct gdbarch *gdbarch;
-  enum bfd_endian byte_order;
-  ULONGEST insn;
-  CORE_ADDR dest;
-  gdb_byte buf[4];
-
-  if (!in_plt_section (pc))
-    return 0;
-
-  if (target_read_memory (pc, buf, 4) != 0)
-    return 0;
-
-  gdbarch = get_frame_arch (frame);
-  byte_order = gdbarch_byte_order (gdbarch);
-
-  /* ldr pc, [pc, #-4].  */
-  insn = extract_unsigned_integer (buf, 4, byte_order);
-  if (insn != 0xe51ff004)
-    return 0;
-
-  if (target_read_memory (pc + 4, buf, 4) != 0)
-    return 0;
-
-  dest = extract_unsigned_integer (buf, 4, byte_order);
-  return gdbarch_addr_bits_remove (gdbarch, dest);
-}
-
-static void
-arm_symbian_init_abi (struct gdbarch_info info,
-		      struct gdbarch *gdbarch)
-{
-  /* Shared library handling.  */
-  set_gdbarch_skip_trampoline_code (gdbarch, arm_symbian_skip_trampoline_code);
-
-  /* On this target, the toolchain outputs ELF files, with `sym' for
-     filename extension (e.g., `FOO.sym'); these are post-linker
-     processed into PE-ish DLLs (e.g., `FOO.dll'), and it's these that
-     are actually copied to and run on the target.  Naturally, when
-     listing shared libraries, Symbian stubs report the DLL filenames.
-     Setting this makes it so that GDB automatically looks for the
-     corresponding ELF files on the host's filesystem.  */
-  set_gdbarch_solib_symbols_extension (gdbarch, "sym");
-
-  /* Canonical paths on this target look like `c:\sys\bin\bar.dll',
-     for example.  */
-  set_gdbarch_has_dos_based_file_system (gdbarch, 1);
-
-  set_solib_ops (gdbarch, &solib_target_so_ops);
-}
-
-/* Recognize Symbian object files.  */
-
-static enum gdb_osabi
-arm_symbian_osabi_sniffer (bfd *abfd)
-{
-  Elf_Internal_Phdr *phdrs;
-  long phdrs_size;
-  int num_phdrs, i;
-
-  /* Symbian executables are always shared objects (ET_DYN).  */
-  if (elf_elfheader (abfd)->e_type == ET_EXEC)
-    return GDB_OSABI_UNKNOWN;
-
-  if (elf_elfheader (abfd)->e_ident[EI_OSABI] != ELFOSABI_NONE)
-    return GDB_OSABI_UNKNOWN;
-
-  /* Check for the ELF headers not being part of any PT_LOAD segment.
-     Symbian is the only GDB supported (or GNU binutils supported) ARM
-     target which uses a postlinker to flatten ELF files, dropping the
-     ELF dynamic info in the process.  */
-  phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
-  if (phdrs_size == -1)
-    return GDB_OSABI_UNKNOWN;
-
-  phdrs = (Elf_Internal_Phdr *) alloca (phdrs_size);
-  num_phdrs = bfd_get_elf_phdrs (abfd, phdrs);
-  if (num_phdrs == -1)
-    return GDB_OSABI_UNKNOWN;
-
-  for (i = 0; i < num_phdrs; i++)
-    if (phdrs[i].p_type == PT_LOAD && phdrs[i].p_offset == 0)
-      return GDB_OSABI_UNKNOWN;
-
-  /* Looks like a Symbian binary.  */
-  return GDB_OSABI_SYMBIAN;
-}
-
-void
-_initialize_arm_symbian_tdep (void)
-{
-  gdbarch_register_osabi_sniffer (bfd_arch_arm,
-				  bfd_target_elf_flavour,
-				  arm_symbian_osabi_sniffer);
-
-  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_SYMBIAN,
-			  arm_symbian_init_abi);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-tdep.c ./gdb/arm-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GDB on ARM systems.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,14 +19,15 @@
 
 #include "defs.h"
 
-#include <ctype.h>		/* XXX for isupper ().  */
+#include <ctype.h>
 
 #include "frame.h"
+#include "language.h"
 #include "inferior.h"
 #include "infrun.h"
 #include "gdbcmd.h"
 #include "gdbcore.h"
-#include "dis-asm.h"		/* For register styles.  */
+#include "dis-asm.h"
 #include "disasm.h"
 #include "regcache.h"
 #include "reggroups.h"
@@ -38,18 +39,20 @@
 #include "frame-base.h"
 #include "trad-frame.h"
 #include "objfiles.h"
-#include "dwarf2-frame.h"
+#include "dwarf2.h"
+#include "dwarf2/frame.h"
 #include "gdbtypes.h"
 #include "prologue-value.h"
 #include "remote.h"
 #include "target-descriptions.h"
 #include "user-regs.h"
 #include "observable.h"
+#include "count-one-bits.h"
 
 #include "arch/arm.h"
 #include "arch/arm-get-next-pcs.h"
 #include "arm-tdep.h"
-#include "gdb/sim-arm.h"
+#include "sim/sim-arm.h"
 
 #include "elf-bfd.h"
 #include "coff/internal.h"
@@ -59,12 +62,19 @@
 #include "record-full.h"
 #include <algorithm>
 
+#include "producer.h"
+
 #if GDB_SELF_TEST
 #include "gdbsupport/selftest.h"
 #endif
 
 static bool arm_debug;
 
+/* Print an "arm" debug statement.  */
+
+#define arm_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (arm_debug, "arm", fmt, ##__VA_ARGS__)
+
 /* Macros for setting and testing a bit in a minimal symbol that marks
    it as Thumb function.  The MSB of the minimal symbol's "info" field
    is used for this purpose.
@@ -73,14 +83,14 @@ static bool arm_debug;
    MSYMBOL_IS_SPECIAL   Tests the "special" bit in a minimal symbol.  */
 
 #define MSYMBOL_SET_SPECIAL(msym)				\
-	MSYMBOL_TARGET_FLAG_1 (msym) = 1
+	(msym)->set_target_flag_1 (true)
 
 #define MSYMBOL_IS_SPECIAL(msym)				\
-	MSYMBOL_TARGET_FLAG_1 (msym)
+	(msym)->target_flag_1 ()
 
 struct arm_mapping_symbol
 {
-  bfd_vma value;
+  CORE_ADDR value;
   char type;
 
   bool operator< (const arm_mapping_symbol &other) const
@@ -114,7 +124,7 @@ struct arm_per_bfd
 };
 
 /* Per-bfd data used for mapping symbols.  */
-static bfd_key<arm_per_bfd> arm_bfd_data_key;
+static const registry<bfd>::key<arm_per_bfd> arm_bfd_data_key;
 
 /* The list of available "set arm ..." and "show arm ..." commands.  */
 static struct cmd_list_element *setarmcmdlist = NULL;
@@ -231,7 +241,7 @@ static const char **valid_disassembly_st
 static const char *disassembly_style;
 
 /* All possible arm target descriptors.  */
-static struct target_desc *tdesc_arm_list[ARM_FP_TYPE_INVALID];
+static struct target_desc *tdesc_arm_list[ARM_FP_TYPE_INVALID][2];
 static struct target_desc *tdesc_arm_mprofile_list[ARM_M_TYPE_INVALID];
 
 /* This is used to keep the bfd arch_info in sync with the disassembly
@@ -267,7 +277,20 @@ struct arm_prologue_cache
   /* The stack pointer at the time this frame was created; i.e. the
      caller's stack pointer when this function was called.  It is used
      to identify this frame.  */
-  CORE_ADDR prev_sp;
+  CORE_ADDR sp;
+
+  /* Additional stack pointers used by M-profile with Security extension.  */
+  /* Use msp_s / psp_s to hold the values of msp / psp when there is
+     no Security extension.  */
+  CORE_ADDR msp_s;
+  CORE_ADDR msp_ns;
+  CORE_ADDR psp_s;
+  CORE_ADDR psp_ns;
+
+  /* Active stack pointer.  */
+  int active_sp_regnum;
+  int active_msp_regnum;
+  int active_psp_regnum;
 
   /* The frame base for this frame is just prev_sp - frame size.
      FRAMESIZE is the distance from the frame pointer to the
@@ -278,14 +301,292 @@ struct arm_prologue_cache
   /* The register used to hold the frame pointer for this frame.  */
   int framereg;
 
+  /* True if the return address is signed, false otherwise.  */
+  std::optional<bool> ra_signed_state;
+
   /* Saved register offsets.  */
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
+
+  arm_prologue_cache() = default;
+};
+
+
+/* Reconstruct T bit in program status register from LR value.  */
+
+static inline ULONGEST
+reconstruct_t_bit(struct gdbarch *gdbarch, CORE_ADDR lr, ULONGEST psr)
+{
+  ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
+  if (IS_THUMB_ADDR (lr))
+    psr |= t_bit;
+  else
+    psr &= ~t_bit;
+
+  return psr;
+}
+
+/* Initialize CACHE fields for which zero is not adequate (CACHE is
+   expected to have been ZALLOC'ed before calling this function).  */
+
+static void
+arm_cache_init (struct arm_prologue_cache *cache, struct gdbarch *gdbarch)
+{
+  cache->active_sp_regnum = ARM_SP_REGNUM;
+
+  cache->saved_regs = trad_frame_alloc_saved_regs (gdbarch);
+}
+
+/* Similar to the previous function, but extracts GDBARCH from FRAME.  */
+
+static void
+arm_cache_init (struct arm_prologue_cache *cache, frame_info_ptr frame)
+{
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  arm_cache_init (cache, gdbarch);
+  cache->sp = get_frame_register_unsigned (frame, ARM_SP_REGNUM);
+
+  if (tdep->have_sec_ext)
+    {
+      const CORE_ADDR msp_val
+	= get_frame_register_unsigned (frame, tdep->m_profile_msp_regnum);
+      const CORE_ADDR psp_val
+	= get_frame_register_unsigned (frame, tdep->m_profile_psp_regnum);
+
+      cache->msp_s
+	= get_frame_register_unsigned (frame, tdep->m_profile_msp_s_regnum);
+      cache->msp_ns
+	= get_frame_register_unsigned (frame, tdep->m_profile_msp_ns_regnum);
+      cache->psp_s
+	= get_frame_register_unsigned (frame, tdep->m_profile_psp_s_regnum);
+      cache->psp_ns
+	= get_frame_register_unsigned (frame, tdep->m_profile_psp_ns_regnum);
+
+      /* Identify what msp is alias for (msp_s or msp_ns).  */
+      if (msp_val == cache->msp_s)
+	cache->active_msp_regnum = tdep->m_profile_msp_s_regnum;
+      else if (msp_val == cache->msp_ns)
+	cache->active_msp_regnum = tdep->m_profile_msp_ns_regnum;
+      else
+	{
+	  warning (_("Invalid state, unable to determine msp alias, assuming "
+		     "msp_s."));
+	  cache->active_msp_regnum = tdep->m_profile_msp_s_regnum;
+	}
+
+      /* Identify what psp is alias for (psp_s or psp_ns).  */
+      if (psp_val == cache->psp_s)
+	cache->active_psp_regnum = tdep->m_profile_psp_s_regnum;
+      else if (psp_val == cache->psp_ns)
+	cache->active_psp_regnum = tdep->m_profile_psp_ns_regnum;
+      else
+	{
+	  warning (_("Invalid state, unable to determine psp alias, assuming "
+		     "psp_s."));
+	  cache->active_psp_regnum = tdep->m_profile_psp_s_regnum;
+	}
+
+      /* Identify what sp is alias for (msp_s, msp_ns, psp_s or psp_ns).  */
+      if (msp_val == cache->sp)
+	cache->active_sp_regnum = cache->active_msp_regnum;
+      else if (psp_val == cache->sp)
+	cache->active_sp_regnum = cache->active_psp_regnum;
+      else
+	{
+	  warning (_("Invalid state, unable to determine sp alias, assuming "
+		     "msp."));
+	  cache->active_sp_regnum = cache->active_msp_regnum;
+	}
+    }
+  else if (tdep->is_m)
+    {
+      cache->msp_s
+	= get_frame_register_unsigned (frame, tdep->m_profile_msp_regnum);
+      cache->psp_s
+	= get_frame_register_unsigned (frame, tdep->m_profile_psp_regnum);
+
+      /* Identify what sp is alias for (msp or psp).  */
+      if (cache->msp_s == cache->sp)
+	cache->active_sp_regnum = tdep->m_profile_msp_regnum;
+      else if (cache->psp_s == cache->sp)
+	cache->active_sp_regnum = tdep->m_profile_psp_regnum;
+      else
+	{
+	  warning (_("Invalid state, unable to determine sp alias, assuming "
+		     "msp."));
+	  cache->active_sp_regnum = tdep->m_profile_msp_regnum;
+	}
+    }
+  else
+    {
+      cache->msp_s
+	= get_frame_register_unsigned (frame, ARM_SP_REGNUM);
+
+      cache->active_sp_regnum = ARM_SP_REGNUM;
+    }
+}
+
+/* Return the requested stack pointer value (in REGNUM), taking into
+   account whether we have a Security extension or an M-profile
+   CPU.  */
+
+static CORE_ADDR
+arm_cache_get_sp_register (struct arm_prologue_cache *cache,
+			   arm_gdbarch_tdep *tdep, int regnum)
+{
+  if (tdep->have_sec_ext)
+    {
+      if (regnum == tdep->m_profile_msp_s_regnum)
+	return cache->msp_s;
+      if (regnum == tdep->m_profile_msp_ns_regnum)
+	return cache->msp_ns;
+      if (regnum == tdep->m_profile_psp_s_regnum)
+	return cache->psp_s;
+      if (regnum == tdep->m_profile_psp_ns_regnum)
+	return cache->psp_ns;
+      if (regnum == tdep->m_profile_msp_regnum)
+	return arm_cache_get_sp_register (cache, tdep, cache->active_msp_regnum);
+      if (regnum == tdep->m_profile_psp_regnum)
+	return arm_cache_get_sp_register (cache, tdep, cache->active_psp_regnum);
+      if (regnum == ARM_SP_REGNUM)
+	return arm_cache_get_sp_register (cache, tdep, cache->active_sp_regnum);
+    }
+  else if (tdep->is_m)
+    {
+      if (regnum == tdep->m_profile_msp_regnum)
+	return cache->msp_s;
+      if (regnum == tdep->m_profile_psp_regnum)
+	return cache->psp_s;
+      if (regnum == ARM_SP_REGNUM)
+	return arm_cache_get_sp_register (cache, tdep, cache->active_sp_regnum);
+    }
+  else if (regnum == ARM_SP_REGNUM)
+    return cache->sp;
+
+  gdb_assert_not_reached ("Invalid SP selection");
+}
+
+/* Return the previous stack address, depending on which SP register
+   is active.  */
+
+static CORE_ADDR
+arm_cache_get_prev_sp_value (struct arm_prologue_cache *cache, arm_gdbarch_tdep *tdep)
+{
+  CORE_ADDR val = arm_cache_get_sp_register (cache, tdep, cache->active_sp_regnum);
+  return val;
+}
+
+/* Set the active stack pointer to VAL.  */
+
+static void
+arm_cache_set_active_sp_value (struct arm_prologue_cache *cache,
+			       arm_gdbarch_tdep *tdep, CORE_ADDR val)
+{
+  if (tdep->have_sec_ext)
+    {
+      if (cache->active_sp_regnum == tdep->m_profile_msp_s_regnum)
+	cache->msp_s = val;
+      else if (cache->active_sp_regnum == tdep->m_profile_msp_ns_regnum)
+	cache->msp_ns = val;
+      else if (cache->active_sp_regnum == tdep->m_profile_psp_s_regnum)
+	cache->psp_s = val;
+      else if (cache->active_sp_regnum == tdep->m_profile_psp_ns_regnum)
+	cache->psp_ns = val;
+
+      return;
+    }
+  else if (tdep->is_m)
+    {
+      if (cache->active_sp_regnum == tdep->m_profile_msp_regnum)
+	cache->msp_s = val;
+      else if (cache->active_sp_regnum == tdep->m_profile_psp_regnum)
+	cache->psp_s = val;
+
+      return;
+    }
+  else if (cache->active_sp_regnum == ARM_SP_REGNUM)
+    {
+      cache->sp = val;
+      return;
+    }
+
+  gdb_assert_not_reached ("Invalid SP selection");
+}
+
+/* Return true if REGNUM is one of the alternative stack pointers.  */
+
+static bool
+arm_is_alternative_sp_register (arm_gdbarch_tdep *tdep, int regnum)
+{
+  if ((regnum == tdep->m_profile_msp_regnum)
+      || (regnum == tdep->m_profile_msp_s_regnum)
+      || (regnum == tdep->m_profile_msp_ns_regnum)
+      || (regnum == tdep->m_profile_psp_regnum)
+      || (regnum == tdep->m_profile_psp_s_regnum)
+      || (regnum == tdep->m_profile_psp_ns_regnum))
+    return true;
+  else
+    return false;
+}
+
+/* Set the active stack pointer to SP_REGNUM.  */
+
+static void
+arm_cache_switch_prev_sp (struct arm_prologue_cache *cache,
+			  arm_gdbarch_tdep *tdep, int sp_regnum)
+{
+  gdb_assert (arm_is_alternative_sp_register (tdep, sp_regnum));
+
+  if (tdep->have_sec_ext)
+    {
+      gdb_assert (sp_regnum != tdep->m_profile_msp_regnum
+		  && sp_regnum != tdep->m_profile_psp_regnum);
+
+      if (sp_regnum == tdep->m_profile_msp_s_regnum
+	  || sp_regnum == tdep->m_profile_psp_s_regnum)
+	{
+	  cache->active_msp_regnum = tdep->m_profile_msp_s_regnum;
+	  cache->active_psp_regnum = tdep->m_profile_psp_s_regnum;
+	}
+      else if (sp_regnum == tdep->m_profile_msp_ns_regnum
+	       || sp_regnum == tdep->m_profile_psp_ns_regnum)
+	{
+	  cache->active_msp_regnum = tdep->m_profile_msp_ns_regnum;
+	  cache->active_psp_regnum = tdep->m_profile_psp_ns_regnum;
+	}
+    }
+
+  cache->active_sp_regnum = sp_regnum;
+}
+
+namespace {
+
+/* Abstract class to read ARM instructions from memory.  */
+
+class arm_instruction_reader
+{
+public:
+  /* Read a 4 bytes instruction from memory using the BYTE_ORDER endianness.  */
+  virtual uint32_t read (CORE_ADDR memaddr, bfd_endian byte_order) const = 0;
 };
 
-static CORE_ADDR arm_analyze_prologue (struct gdbarch *gdbarch,
-				       CORE_ADDR prologue_start,
-				       CORE_ADDR prologue_end,
-				       struct arm_prologue_cache *cache);
+/* Read instructions from target memory.  */
+
+class target_arm_instruction_reader : public arm_instruction_reader
+{
+public:
+  uint32_t read (CORE_ADDR memaddr, bfd_endian byte_order) const override
+  {
+    return read_code_unsigned_integer (memaddr, 4, byte_order);
+  }
+};
+
+} /* namespace */
+
+static CORE_ADDR arm_analyze_prologue
+  (struct gdbarch *gdbarch, CORE_ADDR prologue_start, CORE_ADDR prologue_end,
+   struct arm_prologue_cache *cache, const arm_instruction_reader &insn_reader);
 
 /* Architecture version for displaced stepping.  This effects the behaviour of
    certain instructions, and really should not be hard-wired.  */
@@ -295,13 +596,16 @@ static CORE_ADDR arm_analyze_prologue (s
 /* See arm-tdep.h.  */
 
 bool arm_apcs_32 = true;
+bool arm_unwind_secure_frames = true;
 
 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode.  */
 
 int
 arm_psr_thumb_bit (struct gdbarch *gdbarch)
 {
-  if (gdbarch_tdep (gdbarch)->is_m)
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (tdep->is_m)
     return XPSR_T;
   else
     return CPSR_T;
@@ -320,20 +624,24 @@ arm_is_thumb (struct regcache *regcache)
   return (cpsr & t_bit) != 0;
 }
 
-/* Determine if FRAME is executing in Thumb mode.  */
+/* Determine if FRAME is executing in Thumb mode.  FRAME must be an ARM
+   frame.  */
 
 int
-arm_frame_is_thumb (struct frame_info *frame)
+arm_frame_is_thumb (frame_info_ptr frame)
 {
-  CORE_ADDR cpsr;
-  ULONGEST t_bit = arm_psr_thumb_bit (get_frame_arch (frame));
+  /* Check the architecture of FRAME.  */
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+  gdb_assert (gdbarch_bfd_arch_info (gdbarch)->arch == bfd_arch_arm);
 
   /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
      directly (from a signal frame or dummy frame) or by interpreting
      the saved LR (from a prologue or DWARF frame).  So consult it and
      trust the unwinders.  */
-  cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
+  CORE_ADDR cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
 
+  /* Find and extract the thumb bit.  */
+  ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
   return (cpsr & t_bit) != 0;
 }
 
@@ -350,7 +658,7 @@ arm_find_mapping_symbol (CORE_ADDR memad
   sec = find_pc_section (memaddr);
   if (sec != NULL)
     {
-      arm_per_bfd *data = arm_bfd_data_key.get (sec->objfile->obfd);
+      arm_per_bfd *data = arm_bfd_data_key.get (sec->objfile->obfd.get ());
       if (data != NULL)
 	{
 	  unsigned int section_idx = sec->the_bfd_section->index;
@@ -364,8 +672,7 @@ arm_find_mapping_symbol (CORE_ADDR memad
 	      data->section_maps_sorted[section_idx] = true;
 	    }
 
-	  struct arm_mapping_symbol map_key
-	    = { memaddr - obj_section_addr (sec), 0 };
+	  arm_mapping_symbol map_key = { memaddr - sec->addr (), 0 };
 	  arm_mapping_symbol_vec::const_iterator it
 	    = std::lower_bound (map.begin (), map.end (), map_key);
 
@@ -378,7 +685,7 @@ arm_find_mapping_symbol (CORE_ADDR memad
 	      if (it->value == map_key.value)
 		{
 		  if (start)
-		    *start = it->value + obj_section_addr (sec);
+		    *start = it->value + sec->addr ();
 		  return it->type;
 		}
 	    }
@@ -389,7 +696,7 @@ arm_find_mapping_symbol (CORE_ADDR memad
 		= it - 1;
 
 	      if (start)
-		*start = prev_it->value + obj_section_addr (sec);
+		*start = prev_it->value + sec->addr ();
 	      return prev_it->type;
 	    }
 	}
@@ -407,19 +714,21 @@ arm_pc_is_thumb (struct gdbarch *gdbarch
 {
   struct bound_minimal_symbol sym;
   char type;
-  arm_displaced_step_closure *dsc
-    = ((arm_displaced_step_closure * )
-	get_displaced_step_closure_by_addr (memaddr));
+  arm_displaced_step_copy_insn_closure *dsc = nullptr;
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (gdbarch_displaced_step_copy_insn_closure_by_addr_p (gdbarch))
+    dsc = ((arm_displaced_step_copy_insn_closure * )
+	   gdbarch_displaced_step_copy_insn_closure_by_addr
+	     (gdbarch, current_inferior (), memaddr));
 
   /* If checking the mode of displaced instruction in copy area, the mode
      should be determined by instruction on the original address.  */
   if (dsc)
     {
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog,
-			    "displaced: check mode of %.8lx instead of %.8lx\n",
-			    (unsigned long) dsc->insn_addr,
-			    (unsigned long) memaddr);
+      displaced_debug_printf ("check mode of %.8lx instead of %.8lx",
+			      (unsigned long) dsc->insn_addr,
+			      (unsigned long) memaddr);
       memaddr = dsc->insn_addr;
     }
 
@@ -434,7 +743,7 @@ arm_pc_is_thumb (struct gdbarch *gdbarch
     return 1;
 
   /* ARM v6-M and v7-M are always in Thumb mode.  */
-  if (gdbarch_tdep (gdbarch)->is_m)
+  if (tdep->is_m)
     return 1;
 
   /* If there are mapping symbols, consult them.  */
@@ -458,16 +767,37 @@ arm_pc_is_thumb (struct gdbarch *gdbarch
      "display/i $pc" always show the correct mode (though if there is
      a symbol table we will not reach here, so it still may not be
      displayed in the mode it will be executed).  */
-  if (target_has_registers)
+  if (target_has_registers ())
     return arm_frame_is_thumb (get_current_frame ());
 
   /* Otherwise we're out of luck; we assume ARM.  */
   return 0;
 }
 
+static inline bool
+arm_m_addr_is_lockup (CORE_ADDR addr)
+{
+  switch (addr)
+    {
+      /* Values for lockup state.
+	 For more details see "B1.5.15 Unrecoverable exception cases" in
+	 both ARMv6-M and ARMv7-M Architecture Reference Manuals, or
+	 see "B4.32 Lockup" in ARMv8-M Architecture Reference Manual.  */
+      case 0xeffffffe:
+      case 0xfffffffe:
+      case 0xffffffff:
+	return true;
+
+      default:
+	/* Address is not lockup.  */
+	return false;
+    }
+}
+
 /* Determine if the address specified equals any of these magic return
-   values, called EXC_RETURN, defined by the ARM v6-M and v7-M
-   architectures.
+   values, called EXC_RETURN, defined by the ARM v6-M, v7-M and v8-M
+   architectures.  Also include lockup magic PC value.
+   Check also for FNC_RETURN if we have the v8-M security extension.
 
    From ARMv6-M Reference Manual B1.5.8
    Table B1-5 Exception return behavior
@@ -497,27 +827,64 @@ arm_pc_is_thumb (struct gdbarch *gdbarch
    0xFFFFFFFD    Thread mode      Process         Basic
 
    For more details see "B1.5.8 Exception return behavior"
-   in both ARMv6-M and ARMv7-M Architecture Reference Manuals.  */
+   in both ARMv6-M and ARMv7-M Architecture Reference Manuals.
+
+   From ARMv8-M Architecture Technical Reference, D1.2.95
+   FType, Mode and SPSEL bits are to be considered when the Security
+   Extension is not implemented.
+
+   EXC_RETURN    Return To        Return Stack    Frame Type
+   0xFFFFFFA0    Handler mode     Main            Extended
+   0xFFFFFFA8    Thread mode      Main            Extended
+   0xFFFFFFAC    Thread mode      Process         Extended
+   0xFFFFFFB0    Handler mode     Main            Standard
+   0xFFFFFFB8    Thread mode      Main            Standard
+   0xFFFFFFBC    Thread mode      Process         Standard  */
 
 static int
-arm_m_addr_is_magic (CORE_ADDR addr)
+arm_m_addr_is_magic (struct gdbarch *gdbarch, CORE_ADDR addr)
 {
-  switch (addr)
+  if (arm_m_addr_is_lockup (addr))
+    return 1;
+
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+  if (tdep->have_sec_ext)
     {
-      /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
-	 the exception return behavior.  */
-      case 0xffffffe1:
-      case 0xffffffe9:
-      case 0xffffffed:
-      case 0xfffffff1:
-      case 0xfffffff9:
-      case 0xfffffffd:
-	/* Address is magic.  */
-	return 1;
+      switch ((addr & 0xff000000))
+	{
+	case 0xff000000: /* EXC_RETURN pattern.  */
+	case 0xfe000000: /* FNC_RETURN pattern.  */
+	  return 1;
+	default:
+	  return 0;
+	}
+    }
+  else
+    {
+      switch (addr)
+	{
+	  /* Values from ARMv8-M Architecture Technical Reference.  */
+	case 0xffffffa0:
+	case 0xffffffa8:
+	case 0xffffffac:
+	case 0xffffffb0:
+	case 0xffffffb8:
+	case 0xffffffbc:
+	  /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
+	     the exception return behavior.  */
+	case 0xffffffe1:
+	case 0xffffffe9:
+	case 0xffffffed:
+	case 0xfffffff1:
+	case 0xfffffff9:
+	case 0xfffffffd:
+	  /* Address is magic.  */
+	  return 1;
 
-      default:
-	/* Address is not magic.  */
-	return 0;
+	default:
+	  /* Address is not magic.  */
+	  return 0;
+	}
     }
 }
 
@@ -525,10 +892,11 @@ arm_m_addr_is_magic (CORE_ADDR addr)
 static CORE_ADDR
 arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
 {
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
   /* On M-profile devices, do not strip the low bit from EXC_RETURN
      (the magic exception return address).  */
-  if (gdbarch_tdep (gdbarch)->is_m
-      && arm_m_addr_is_magic (val))
+  if (tdep->is_m && arm_m_addr_is_magic (gdbarch, val))
     return val;
 
   if (arm_apcs_32)
@@ -549,7 +917,7 @@ skip_prologue_function (struct gdbarch *
 
   msym = lookup_minimal_symbol_by_pc (pc);
   if (msym.minsym != NULL
-      && BMSYMBOL_VALUE_ADDRESS (msym) == pc
+      && msym.value_address () == pc
       && msym.minsym->linkage_name () != NULL)
     {
       const char *name = msym.minsym->linkage_name ();
@@ -652,6 +1020,7 @@ thumb_analyze_prologue (struct gdbarch *
 			CORE_ADDR start, CORE_ADDR limit,
 			struct arm_prologue_cache *cache)
 {
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
   int i;
@@ -666,6 +1035,7 @@ thumb_analyze_prologue (struct gdbarch *
   while (start < limit)
     {
       unsigned short insn;
+      std::optional<bool> ra_signed_state;
 
       insn = read_code_unsigned_integer (start, 2, byte_order_for_code);
 
@@ -800,6 +1170,7 @@ thumb_analyze_prologue (struct gdbarch *
 
 	  inst2 = read_code_unsigned_integer (start + 2, 2,
 					      byte_order_for_code);
+	  uint32_t whole_insn = (insn << 16) | inst2;
 
 	  if ((insn & 0xf800) == 0xf000 && (inst2 & 0xe800) == 0xe800)
 	    {
@@ -849,6 +1220,35 @@ thumb_analyze_prologue (struct gdbarch *
 		regs[bits (insn, 0, 3)] = addr;
 	    }
 
+	  /* vstmdb Rn{!}, { D-registers } (aka vpush).  */
+	  else if ((insn & 0xff20) == 0xed20
+		   && (inst2 & 0x0f00) == 0x0b00
+		   && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
+	    {
+	      /* Address SP points to.  */
+	      pv_t addr = regs[bits (insn, 0, 3)];
+
+	      /* Number of registers saved.  */
+	      unsigned int number = bits (inst2, 0, 7) >> 1;
+
+	      /* First register to save.  */
+	      int vd = bits (inst2, 12, 15) | (bits (insn, 6, 6) << 4);
+
+	      if (stack.store_would_trash (addr))
+		break;
+
+	      /* Calculate offsets of saved registers.  */
+	      for (; number > 0; number--)
+		{
+		  addr = pv_add_constant (addr, -8);
+		  stack.store (addr, 8, pv_register (ARM_D0_REGNUM
+						     + vd + number, 0));
+		}
+
+	      /* Writeback SP to account for the saved registers.  */
+	      regs[bits (insn, 0, 3)] = addr;
+	    }
+
 	  else if ((insn & 0xff50) == 0xe940	/* strd Rt, Rt2,
 						   [Rn, #+/-imm]{!} */
 		   && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
@@ -930,7 +1330,7 @@ thumb_analyze_prologue (struct gdbarch *
 	       parameters from memory.  */
 	    ;
 
-	  else if ((insn & 0xffb0) == 0xe950	/* ldrd Rt, Rt2,
+	  else if ((insn & 0xff70) == 0xe950    /* ldrd Rt, Rt2,
 						   [Rn, #+/-imm] */
 		   && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
 	    /* Similarly ignore dual loads from the stack.  */
@@ -1053,7 +1453,37 @@ thumb_analyze_prologue (struct gdbarch *
 	      constant = read_memory_unsigned_integer (loc + 4, 4, byte_order);
 	      regs[bits (inst2, 8, 11)] = pv_constant (constant);
 	    }
-
+	  /* Start of ARMv8.1-m PACBTI extension instructions.  */
+	  else if (IS_PAC (whole_insn))
+	    {
+	      /* LR and SP are input registers.  PAC is in R12.  LR is
+		 signed from this point onwards.  NOP space.  */
+	      ra_signed_state = true;
+	    }
+	  else if (IS_PACBTI (whole_insn))
+	    {
+	      /* LR and SP are input registers.  PAC is in R12 and PC is a
+		 valid BTI landing pad.  LR is signed from this point onwards.
+		 NOP space.  */
+	      ra_signed_state = true;
+	    }
+	  else if (IS_BTI (whole_insn))
+	    {
+	      /* Valid BTI landing pad.  NOP space.  */
+	    }
+	  else if (IS_PACG (whole_insn))
+	    {
+	      /* Sign Rn using Rm and store the PAC in Rd.  Rd is signed from
+		 this point onwards.  */
+	      ra_signed_state = true;
+	    }
+	  else if (IS_AUT (whole_insn) || IS_AUTG (whole_insn))
+	    {
+	      /* These instructions appear close to the epilogue, when signed
+		 pointers are getting authenticated.  */
+	      ra_signed_state = false;
+	    }
+	  /* End of ARMv8.1-m PACBTI extension instructions */
 	  else if (thumb2_instruction_changes_pc (insn, inst2))
 	    {
 	      /* Don't scan past anything that might change control flow.  */
@@ -1066,6 +1496,18 @@ thumb_analyze_prologue (struct gdbarch *
 	      unrecognized_pc = start;
 	    }
 
+	  /* Make sure we are dealing with a target that supports ARMv8.1-m
+	     PACBTI.  */
+	  if (cache != nullptr && tdep->have_pacbti
+	      && ra_signed_state.has_value ())
+	    {
+	      arm_debug_printf ("Found pacbti instruction at %s",
+				paddress (gdbarch, start));
+	      arm_debug_printf ("RA is %s",
+				*ra_signed_state ? "signed" : "not signed");
+	      cache->ra_signed_state = ra_signed_state;
+	    }
+
 	  start += 2;
 	}
       else if (thumb_instruction_changes_pc (insn))
@@ -1083,9 +1525,8 @@ thumb_analyze_prologue (struct gdbarch *
       start += 2;
     }
 
-  if (arm_debug)
-    fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
-			paddress (gdbarch, start));
+  arm_debug_printf ("Prologue scan stopped at %s",
+		    paddress (gdbarch, start));
 
   if (unrecognized_pc == 0)
     unrecognized_pc = start;
@@ -1112,9 +1553,13 @@ thumb_analyze_prologue (struct gdbarch *
       cache->framesize = -regs[ARM_SP_REGNUM].k;
     }
 
-  for (i = 0; i < 16; i++)
+  for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
     if (stack.find_reg (gdbarch, i, &offset))
-      cache->saved_regs[i].addr = offset;
+      {
+	cache->saved_regs[i].set_addr (offset);
+	if (i == ARM_SP_REGNUM)
+	  arm_cache_set_active_sp_value(cache, tdep, offset);
+      }
 
   return unrecognized_pc;
 }
@@ -1324,12 +1769,18 @@ arm_skip_stack_protector(CORE_ADDR pc, s
 static CORE_ADDR
 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  CORE_ADDR func_addr, limit_pc;
+  CORE_ADDR func_addr, func_end_addr, limit_pc;
 
   /* See if we can determine the end of the prologue via the symbol table.
      If so, then return either PC, or the PC after the prologue, whichever
      is greater.  */
-  if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
+  bool func_addr_found
+    = find_pc_partial_function (pc, NULL, &func_addr, &func_end_addr);
+
+  /* Whether the function is thumb mode or not.  */
+  bool func_is_thumb = false;
+
+  if (func_addr_found)
     {
       CORE_ADDR post_prologue_pc
 	= skip_prologue_using_sal (gdbarch, func_addr);
@@ -1348,9 +1799,9 @@ arm_skip_prologue (struct gdbarch *gdbar
 	 missing (e.g. for -gstabs), assuming the GNU tools.  */
       if (post_prologue_pc
 	  && (cust == NULL
-	      || COMPUNIT_PRODUCER (cust) == NULL
-	      || startswith (COMPUNIT_PRODUCER (cust), "GNU ")
-	      || startswith (COMPUNIT_PRODUCER (cust), "clang ")))
+	      || cust->producer () == NULL
+	      || startswith (cust->producer (), "GNU ")
+	      || producer_is_llvm (cust->producer ())))
 	return post_prologue_pc;
 
       if (post_prologue_pc != 0)
@@ -1366,12 +1817,14 @@ arm_skip_prologue (struct gdbarch *gdbar
 	     associate prologue code with the opening brace; so this
 	     lets us skip the first line if we think it is the opening
 	     brace.  */
-	  if (arm_pc_is_thumb (gdbarch, func_addr))
+	  func_is_thumb = arm_pc_is_thumb (gdbarch, func_addr);
+	  if (func_is_thumb)
 	    analyzed_limit = thumb_analyze_prologue (gdbarch, func_addr,
 						     post_prologue_pc, NULL);
 	  else
-	    analyzed_limit = arm_analyze_prologue (gdbarch, func_addr,
-						   post_prologue_pc, NULL);
+	    analyzed_limit
+	      = arm_analyze_prologue (gdbarch, func_addr, post_prologue_pc,
+				      NULL, target_arm_instruction_reader ());
 
 	  if (analyzed_limit != post_prologue_pc)
 	    return func_addr;
@@ -1391,15 +1844,23 @@ arm_skip_prologue (struct gdbarch *gdbar
   if (limit_pc == 0)
     limit_pc = pc + 64;          /* Magic.  */
 
+  /* Set the correct adjustment based on whether the function is thumb mode or
+     not.  We use it to get the address of the last instruction in the
+     function (as opposed to the first address of the next function).  */
+  CORE_ADDR adjustment = func_is_thumb ? 2 : 4;
+
+  limit_pc
+    = func_end_addr == 0 ? limit_pc : std::min (limit_pc,
+						func_end_addr - adjustment);
 
   /* Check if this is Thumb code.  */
   if (arm_pc_is_thumb (gdbarch, pc))
     return thumb_analyze_prologue (gdbarch, pc, limit_pc, NULL);
   else
-    return arm_analyze_prologue (gdbarch, pc, limit_pc, NULL);
+    return arm_analyze_prologue (gdbarch, pc, limit_pc, NULL,
+				 target_arm_instruction_reader ());
 }
 
-/* *INDENT-OFF* */
 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
    This function decodes a Thumb function prologue to determine:
      1) the size of the stack frame
@@ -1419,7 +1880,6 @@ arm_skip_prologue (struct gdbarch *gdbar
    
    The comments for thumb_skip_prolog() describe the algorithm we use
    to detect the end of the prolog.  */
-/* *INDENT-ON* */
 
 static void
 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
@@ -1472,6 +1932,26 @@ arm_instruction_restores_sp (unsigned in
   return 0;
 }
 
+/* Implement immediate value decoding, as described in section A5.2.4
+   (Modified immediate constants in ARM instructions) of the ARM Architecture
+   Reference Manual (ARMv7-A and ARMv7-R edition).  */
+
+static uint32_t
+arm_expand_immediate (uint32_t imm)
+{
+  /* Immediate values are 12 bits long.  */
+  gdb_assert ((imm & 0xfffff000) == 0);
+
+  uint32_t unrotated_value = imm & 0xff;
+  uint32_t rotate_amount = (imm & 0xf00) >> 7;
+
+  if (rotate_amount == 0)
+    return unrotated_value;
+
+  return ((unrotated_value >> rotate_amount)
+	  | (unrotated_value << (32 - rotate_amount)));
+}
+
 /* Analyze an ARM mode prologue starting at PROLOGUE_START and
    continuing no further than PROLOGUE_END.  If CACHE is non-NULL,
    fill it in.  Return the first address not recognized as a prologue
@@ -1485,13 +1965,15 @@ arm_instruction_restores_sp (unsigned in
 static CORE_ADDR
 arm_analyze_prologue (struct gdbarch *gdbarch,
 		      CORE_ADDR prologue_start, CORE_ADDR prologue_end,
-		      struct arm_prologue_cache *cache)
+		      struct arm_prologue_cache *cache,
+		      const arm_instruction_reader &insn_reader)
 {
   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
   int regno;
   CORE_ADDR offset, current_pc;
   pv_t regs[ARM_FPS_REGNUM];
   CORE_ADDR unrecognized_pc = 0;
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   /* Search the prologue looking for instructions that set up the
      frame pointer, adjust the stack pointer, and save registers.
@@ -1511,8 +1993,7 @@ arm_analyze_prologue (struct gdbarch *gd
        current_pc < prologue_end;
        current_pc += 4)
     {
-      unsigned int insn
-	= read_code_unsigned_integer (current_pc, 4, byte_order_for_code);
+      uint32_t insn = insn_reader.read (current_pc, byte_order_for_code);
 
       if (insn == 0xe1a0c00d)		/* mov ip, sp */
 	{
@@ -1522,20 +2003,16 @@ arm_analyze_prologue (struct gdbarch *gd
       else if ((insn & 0xfff00000) == 0xe2800000	/* add Rd, Rn, #n */
 	       && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
 	{
-	  unsigned imm = insn & 0xff;                   /* immediate value */
-	  unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
+	  uint32_t imm = arm_expand_immediate (insn & 0xfff);
 	  int rd = bits (insn, 12, 15);
-	  imm = (imm >> rot) | (imm << (32 - rot));
 	  regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], imm);
 	  continue;
 	}
       else if ((insn & 0xfff00000) == 0xe2400000	/* sub Rd, Rn, #n */
 	       && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
 	{
-	  unsigned imm = insn & 0xff;                   /* immediate value */
-	  unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
+	  uint32_t imm = arm_expand_immediate (insn & 0xfff);
 	  int rd = bits (insn, 12, 15);
-	  imm = (imm >> rot) | (imm << (32 - rot));
 	  regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], -imm);
 	  continue;
 	}
@@ -1591,21 +2068,17 @@ arm_analyze_prologue (struct gdbarch *gd
 	}
       else if ((insn & 0xfffff000) == 0xe24cb000)	/* sub fp, ip #n */
 	{
-	  unsigned imm = insn & 0xff;			/* immediate value */
-	  unsigned rot = (insn & 0xf00) >> 7;		/* rotate amount */
-	  imm = (imm >> rot) | (imm << (32 - rot));
+	  uint32_t imm = arm_expand_immediate (insn & 0xfff);
 	  regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
 	}
       else if ((insn & 0xfffff000) == 0xe24dd000)	/* sub sp, sp #n */
 	{
-	  unsigned imm = insn & 0xff;			/* immediate value */
-	  unsigned rot = (insn & 0xf00) >> 7;		/* rotate amount */
-	  imm = (imm >> rot) | (imm << (32 - rot));
+	  uint32_t imm = arm_expand_immediate(insn & 0xfff);
 	  regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
 	}
       else if ((insn & 0xffff7fff) == 0xed6d0103	/* stfe f?,
 							   [sp, -#c]! */
-	       && gdbarch_tdep (gdbarch)->have_fpa_registers)
+	       && tdep->have_fpa_registers)
 	{
 	  if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
 	    break;
@@ -1616,7 +2089,7 @@ arm_analyze_prologue (struct gdbarch *gd
 	}
       else if ((insn & 0xffbf0fff) == 0xec2d0200	/* sfmfd f0, 4,
 							   [sp!] */
-	       && gdbarch_tdep (gdbarch)->have_fpa_registers)
+	       && tdep->have_fpa_registers)
 	{
 	  int n_saved_fp_regs;
 	  unsigned int fp_start_reg, fp_bound_reg;
@@ -1726,18 +2199,21 @@ arm_analyze_prologue (struct gdbarch *gd
 
       for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
 	if (stack.find_reg (gdbarch, regno, &offset))
-	  cache->saved_regs[regno].addr = offset;
+	  {
+	    cache->saved_regs[regno].set_addr (offset);
+	    if (regno == ARM_SP_REGNUM)
+	      arm_cache_set_active_sp_value(cache, tdep, offset);
+	  }
     }
 
-  if (arm_debug)
-    fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
-			paddress (gdbarch, unrecognized_pc));
+  arm_debug_printf ("Prologue scan stopped at %s",
+		    paddress (gdbarch, unrecognized_pc));
 
   return unrecognized_pc;
 }
 
 static void
-arm_scan_prologue (struct frame_info *this_frame,
+arm_scan_prologue (frame_info_ptr this_frame,
 		   struct arm_prologue_cache *cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -1745,6 +2221,7 @@ arm_scan_prologue (struct frame_info *th
   CORE_ADDR prologue_start, prologue_end;
   CORE_ADDR prev_pc = get_frame_pc (this_frame);
   CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   /* Assume there is no frame until proven otherwise.  */
   cache->framereg = ARM_SP_REGNUM;
@@ -1763,7 +2240,7 @@ arm_scan_prologue (struct frame_info *th
 				&prologue_end))
     {
       /* One way to find the end of the prologue (which works well
-         for unoptimized code) is to do the following:
+	 for unoptimized code) is to do the following:
 
 	    struct symtab_and_line sal = find_pc_line (prologue_start, 0);
 
@@ -1810,36 +2287,37 @@ arm_scan_prologue (struct frame_info *th
       ULONGEST return_value;
 
       /* AAPCS does not use a frame register, so we can abort here.  */
-      if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_AAPCS)
-        return;
+      if (tdep->arm_abi == ARM_ABI_AAPCS)
+	return;
 
       frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
       if (!safe_read_memory_unsigned_integer (frame_loc, 4, byte_order,
 					      &return_value))
-        return;
+	return;
       else
-        {
-          prologue_start = gdbarch_addr_bits_remove
+	{
+	  prologue_start = gdbarch_addr_bits_remove
 			     (gdbarch, return_value) - 8;
-          prologue_end = prologue_start + 64;	/* See above.  */
-        }
+	  prologue_end = prologue_start + 64;	/* See above.  */
+	}
     }
 
   if (prev_pc < prologue_end)
     prologue_end = prev_pc;
 
-  arm_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
+  arm_analyze_prologue (gdbarch, prologue_start, prologue_end, cache,
+			target_arm_instruction_reader ());
 }
 
 static struct arm_prologue_cache *
-arm_make_prologue_cache (struct frame_info *this_frame)
+arm_make_prologue_cache (frame_info_ptr this_frame)
 {
   int reg;
   struct arm_prologue_cache *cache;
-  CORE_ADDR unwound_fp;
+  CORE_ADDR unwound_fp, prev_sp;
 
   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
-  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+  arm_cache_init (cache, this_frame);
 
   arm_scan_prologue (this_frame, cache);
 
@@ -1847,13 +2325,18 @@ arm_make_prologue_cache (struct frame_in
   if (unwound_fp == 0)
     return cache;
 
-  cache->prev_sp = unwound_fp + cache->framesize;
+  arm_gdbarch_tdep *tdep =
+    gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+
+  prev_sp = unwound_fp + cache->framesize;
+  arm_cache_set_active_sp_value (cache, tdep, prev_sp);
 
   /* Calculate actual addresses of saved registers using offsets
      determined by arm_scan_prologue.  */
   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
-    if (trad_frame_addr_p (cache->saved_regs, reg))
-      cache->saved_regs[reg].addr += cache->prev_sp;
+    if (cache->saved_regs[reg].is_addr ())
+      cache->saved_regs[reg].set_addr (cache->saved_regs[reg].addr () +
+				       prev_sp);
 
   return cache;
 }
@@ -1861,7 +2344,7 @@ arm_make_prologue_cache (struct frame_in
 /* Implementation of the stop_reason hook for arm_prologue frames.  */
 
 static enum unwind_stop_reason
-arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
+arm_prologue_unwind_stop_reason (frame_info_ptr this_frame,
 				 void **this_cache)
 {
   struct arm_prologue_cache *cache;
@@ -1873,11 +2356,13 @@ arm_prologue_unwind_stop_reason (struct
 
   /* This is meant to halt the backtrace at "_start".  */
   pc = get_frame_pc (this_frame);
-  if (pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
+  gdbarch *arch = get_frame_arch (this_frame);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (arch);
+  if (pc <= tdep->lowest_pc)
     return UNWIND_OUTERMOST;
 
   /* If we've hit a wall, stop.  */
-  if (cache->prev_sp == 0)
+  if (arm_cache_get_prev_sp_value (cache, tdep) == 0)
     return UNWIND_OUTERMOST;
 
   return UNWIND_NO_REASON;
@@ -1887,7 +2372,7 @@ arm_prologue_unwind_stop_reason (struct
    and the caller's SP when we were called.  */
 
 static void
-arm_prologue_this_id (struct frame_info *this_frame,
+arm_prologue_this_id (frame_info_ptr this_frame,
 		      void **this_cache,
 		      struct frame_id *this_id)
 {
@@ -1899,6 +2384,9 @@ arm_prologue_this_id (struct frame_info
     *this_cache = arm_make_prologue_cache (this_frame);
   cache = (struct arm_prologue_cache *) *this_cache;
 
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+
   /* Use function start address as part of the frame ID.  If we cannot
      identify the start address (due to missing symbol information),
      fall back to just using the current PC.  */
@@ -1907,22 +2395,30 @@ arm_prologue_this_id (struct frame_info
   if (!func)
     func = pc;
 
-  id = frame_id_build (cache->prev_sp, func);
+  id = frame_id_build (arm_cache_get_prev_sp_value (cache, tdep), func);
   *this_id = id;
 }
 
 static struct value *
-arm_prologue_prev_register (struct frame_info *this_frame,
+arm_prologue_prev_register (frame_info_ptr this_frame,
 			    void **this_cache,
 			    int prev_regnum)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   struct arm_prologue_cache *cache;
+  CORE_ADDR sp_value;
 
   if (*this_cache == NULL)
     *this_cache = arm_make_prologue_cache (this_frame);
   cache = (struct arm_prologue_cache *) *this_cache;
 
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  /* If this frame has signed the return address, mark it as so.  */
+  if (tdep->have_pacbti && cache->ra_signed_state.has_value ()
+      && *cache->ra_signed_state)
+    set_frame_previous_pc_masked (this_frame);
+
   /* If we are asked to unwind the PC, then we need to return the LR
      instead.  The prologue may save PC, but it will point into this
      frame's prologue, not the next frame's resume location.  Also
@@ -1941,7 +2437,16 @@ arm_prologue_prev_register (struct frame
      identified by the next frame's stack pointer at the time of the call.
      The value was already reconstructed into PREV_SP.  */
   if (prev_regnum == ARM_SP_REGNUM)
-    return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
+    return frame_unwind_got_constant (this_frame, prev_regnum,
+				      arm_cache_get_prev_sp_value (cache, tdep));
+
+  /* The value might be one of the alternative SP, if so, use the
+     value already constructed.  */
+  if (arm_is_alternative_sp_register (tdep, prev_regnum))
+    {
+      sp_value = arm_cache_get_sp_register (cache, tdep, prev_regnum);
+      return frame_unwind_got_constant (this_frame, prev_regnum, sp_value);
+    }
 
   /* The CPSR may have been changed by the call instruction and by the
      called function.  The only bit we can reconstruct is the T bit,
@@ -1953,15 +2458,10 @@ arm_prologue_prev_register (struct frame
      but the processor status is likely valid.  */
   if (prev_regnum == ARM_PS_REGNUM)
     {
-      CORE_ADDR lr, cpsr;
-      ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
+      ULONGEST cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
+      CORE_ADDR lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
 
-      cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
-      lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
-      if (IS_THUMB_ADDR (lr))
-	cpsr |= t_bit;
-      else
-	cpsr &= ~t_bit;
+      cpsr = reconstruct_t_bit (gdbarch, lr, cpsr);
       return frame_unwind_got_constant (this_frame, prev_regnum, cpsr);
     }
 
@@ -1969,7 +2469,8 @@ arm_prologue_prev_register (struct frame
 				       prev_regnum);
 }
 
-struct frame_unwind arm_prologue_unwind = {
+static frame_unwind arm_prologue_unwind = {
+  "arm prologue",
   NORMAL_FRAME,
   arm_prologue_unwind_stop_reason,
   arm_prologue_this_id,
@@ -1985,7 +2486,7 @@ struct frame_unwind arm_prologue_unwind
 
 struct arm_exidx_entry
 {
-  bfd_vma addr;
+  CORE_ADDR addr;
   gdb_byte *entry;
 
   bool operator< (const arm_exidx_entry &other) const
@@ -2000,14 +2501,12 @@ struct arm_exidx_data
 };
 
 /* Per-BFD key to store exception handling information.  */
-static const struct bfd_key<arm_exidx_data> arm_exidx_data_key;
+static const registry<bfd>::key<arm_exidx_data> arm_exidx_data_key;
 
 static struct obj_section *
 arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma)
 {
-  struct obj_section *osect;
-
-  ALL_OBJFILE_OSECTIONS (objfile, osect)
+  for (obj_section *osect : objfile->sections ())
     if (bfd_section_flags (osect->the_bfd_section) & SEC_ALLOC)
       {
 	bfd_vma start, size;
@@ -2044,38 +2543,39 @@ arm_exidx_new_objfile (struct objfile *o
   LONGEST i;
 
   /* If we've already touched this file, do nothing.  */
-  if (!objfile || arm_exidx_data_key.get (objfile->obfd) != NULL)
+  if (arm_exidx_data_key.get (objfile->obfd.get ()) != nullptr)
     return;
 
   /* Read contents of exception table and index.  */
-  exidx = bfd_get_section_by_name (objfile->obfd, ELF_STRING_ARM_unwind);
+  exidx = bfd_get_section_by_name (objfile->obfd.get (),
+				   ELF_STRING_ARM_unwind);
   gdb::byte_vector exidx_data;
   if (exidx)
     {
       exidx_vma = bfd_section_vma (exidx);
       exidx_data.resize (bfd_section_size (exidx));
 
-      if (!bfd_get_section_contents (objfile->obfd, exidx,
+      if (!bfd_get_section_contents (objfile->obfd.get (), exidx,
 				     exidx_data.data (), 0,
 				     exidx_data.size ()))
 	return;
     }
 
-  extab = bfd_get_section_by_name (objfile->obfd, ".ARM.extab");
+  extab = bfd_get_section_by_name (objfile->obfd.get (), ".ARM.extab");
   gdb::byte_vector extab_data;
   if (extab)
     {
       extab_vma = bfd_section_vma (extab);
       extab_data.resize (bfd_section_size (extab));
 
-      if (!bfd_get_section_contents (objfile->obfd, extab,
+      if (!bfd_get_section_contents (objfile->obfd.get (), extab,
 				     extab_data.data (), 0,
 				     extab_data.size ()))
 	return;
     }
 
   /* Allocate exception table data structure.  */
-  data = arm_exidx_data_key.emplace (objfile->obfd);
+  data = arm_exidx_data_key.emplace (objfile->obfd.get ());
   data->section_maps.resize (objfile->obfd->section_count);
 
   /* Fill in exception table.  */
@@ -2160,7 +2660,7 @@ arm_exidx_new_objfile (struct objfile *o
 			  NULL
 			};
 
-		      CORE_ADDR pc = pers + obj_section_offset (pers_sec);
+		      CORE_ADDR pc = pers + pers_sec->offset ();
 		      int k;
 
 		      for (k = 0; personality[k]; k++)
@@ -2245,9 +2745,9 @@ arm_find_exidx_entry (CORE_ADDR memaddr,
   if (sec != NULL)
     {
       struct arm_exidx_data *data;
-      struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 };
+      struct arm_exidx_entry map_key = { memaddr - sec->addr (), 0 };
 
-      data = arm_exidx_data_key.get (sec->objfile->obfd);
+      data = arm_exidx_data_key.get (sec->objfile->obfd.get ());
       if (data != NULL)
 	{
 	  std::vector<arm_exidx_entry> &map
@@ -2265,7 +2765,7 @@ arm_find_exidx_entry (CORE_ADDR memaddr,
 		  if (idx->addr == map_key.addr)
 		    {
 		      if (start)
-			*start = idx->addr + obj_section_addr (sec);
+			*start = idx->addr + sec->addr ();
 		      return idx->entry;
 		    }
 		}
@@ -2274,7 +2774,7 @@ arm_find_exidx_entry (CORE_ADDR memaddr,
 		{
 		  idx = idx - 1;
 		  if (start)
-		    *start = idx->addr + obj_section_addr (sec);
+		    *start = idx->addr + sec->addr ();
 		  return idx->entry;
 		}
 	    }
@@ -2294,14 +2794,14 @@ arm_find_exidx_entry (CORE_ADDR memaddr,
    for the ARM Architecture" document.  */
 
 static struct arm_prologue_cache *
-arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
+arm_exidx_fill_cache (frame_info_ptr this_frame, gdb_byte *entry)
 {
   CORE_ADDR vsp = 0;
   int vsp_valid = 0;
 
   struct arm_prologue_cache *cache;
   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
-  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+  arm_cache_init (cache, this_frame);
 
   for (;;)
     {
@@ -2311,14 +2811,14 @@ arm_exidx_fill_cache (struct frame_info
 	 actual value in the current frame.  */
       if (!vsp_valid)
 	{
-	  if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
+	  if (cache->saved_regs[ARM_SP_REGNUM].is_realreg ())
 	    {
-	      int reg = cache->saved_regs[ARM_SP_REGNUM].realreg;
+	      int reg = cache->saved_regs[ARM_SP_REGNUM].realreg ();
 	      vsp = get_frame_register_unsigned (this_frame, reg);
 	    }
 	  else
 	    {
-	      CORE_ADDR addr = cache->saved_regs[ARM_SP_REGNUM].addr;
+	      CORE_ADDR addr = cache->saved_regs[ARM_SP_REGNUM].addr ();
 	      vsp = get_frame_memory_unsigned (this_frame, addr, 4);
 	    }
 
@@ -2353,7 +2853,7 @@ arm_exidx_fill_cache (struct frame_info
 	  for (i = 0; i < 12; i++)
 	    if (mask & (1 << i))
 	      {
-	        cache->saved_regs[4 + i].addr = vsp;
+		cache->saved_regs[4 + i].set_addr (vsp);
 		vsp += 4;
 	      }
 
@@ -2382,14 +2882,14 @@ arm_exidx_fill_cache (struct frame_info
 	  /* Pop r4..r[4+count].  */
 	  for (i = 0; i <= count; i++)
 	    {
-	      cache->saved_regs[4 + i].addr = vsp;
+	      cache->saved_regs[4 + i].set_addr (vsp);
 	      vsp += 4;
 	    }
 
 	  /* If indicated by flag, pop LR as well.  */
 	  if (pop_lr)
 	    {
-	      cache->saved_regs[ARM_LR_REGNUM].addr = vsp;
+	      cache->saved_regs[ARM_LR_REGNUM].set_addr (vsp);
 	      vsp += 4;
 	    }
 	}
@@ -2397,7 +2897,7 @@ arm_exidx_fill_cache (struct frame_info
 	{
 	  /* We could only have updated PC by popping into it; if so, it
 	     will show up as address.  Otherwise, copy LR into PC.  */
-	  if (!trad_frame_addr_p (cache->saved_regs, ARM_PC_REGNUM))
+	  if (!cache->saved_regs[ARM_PC_REGNUM].is_addr ())
 	    cache->saved_regs[ARM_PC_REGNUM]
 	      = cache->saved_regs[ARM_LR_REGNUM];
 
@@ -2417,7 +2917,7 @@ arm_exidx_fill_cache (struct frame_info
 	  for (i = 0; i < 4; i++)
 	    if (mask & (1 << i))
 	      {
-		cache->saved_regs[i].addr = vsp;
+		cache->saved_regs[i].set_addr (vsp);
 		vsp += 4;
 	      }
 	}
@@ -2448,7 +2948,7 @@ arm_exidx_fill_cache (struct frame_info
 	  /* Pop VFP double-precision registers D[start]..D[start+count].  */
 	  for (i = 0; i <= count; i++)
 	    {
-	      cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
+	      cache->saved_regs[ARM_D0_REGNUM + start + i].set_addr (vsp);
 	      vsp += 8;
 	    }
 
@@ -2463,7 +2963,7 @@ arm_exidx_fill_cache (struct frame_info
 	  /* Pop VFP double-precision registers D[8]..D[8+count].  */
 	  for (i = 0; i <= count; i++)
 	    {
-	      cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
+	      cache->saved_regs[ARM_D0_REGNUM + 8 + i].set_addr (vsp);
 	      vsp += 8;
 	    }
 
@@ -2483,7 +2983,7 @@ arm_exidx_fill_cache (struct frame_info
 	  /* Pop iwmmx registers WR[start]..WR[start+count].  */
 	  for (i = 0; i <= count; i++)
 	    {
-	      cache->saved_regs[ARM_WR0_REGNUM + start + i].addr = vsp;
+	      cache->saved_regs[ARM_WR0_REGNUM + start + i].set_addr (vsp);
 	      vsp += 8;
 	    }
 	}
@@ -2500,7 +3000,7 @@ arm_exidx_fill_cache (struct frame_info
 	  for (i = 0; i < 4; i++)
 	    if (mask & (1 << i))
 	      {
-		cache->saved_regs[ARM_WCGR0_REGNUM + i].addr = vsp;
+		cache->saved_regs[ARM_WCGR0_REGNUM + i].set_addr (vsp);
 		vsp += 4;
 	      }
 	}
@@ -2512,7 +3012,7 @@ arm_exidx_fill_cache (struct frame_info
 	  /* Pop iwmmx registers WR[10]..WR[10+count].  */
 	  for (i = 0; i <= count; i++)
 	    {
-	      cache->saved_regs[ARM_WR0_REGNUM + 10 + i].addr = vsp;
+	      cache->saved_regs[ARM_WR0_REGNUM + 10 + i].set_addr (vsp);
 	      vsp += 8;
 	    }
 	}
@@ -2530,7 +3030,7 @@ arm_exidx_fill_cache (struct frame_info
 	     D[16+start]..D[16+start+count].  */
 	  for (i = 0; i <= count; i++)
 	    {
-	      cache->saved_regs[ARM_D0_REGNUM + 16 + start + i].addr = vsp;
+	      cache->saved_regs[ARM_D0_REGNUM + 16 + start + i].set_addr (vsp);
 	      vsp += 8;
 	    }
 	}
@@ -2543,7 +3043,7 @@ arm_exidx_fill_cache (struct frame_info
 	  /* Pop VFP double-precision registers D[start]..D[start+count].  */
 	  for (i = 0; i <= count; i++)
 	    {
-	      cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
+	      cache->saved_regs[ARM_D0_REGNUM + start + i].set_addr (vsp);
 	      vsp += 8;
 	    }
 	}
@@ -2555,7 +3055,7 @@ arm_exidx_fill_cache (struct frame_info
 	  /* Pop VFP double-precision registers D[8]..D[8+count].  */
 	  for (i = 0; i <= count; i++)
 	    {
-	      cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
+	      cache->saved_regs[ARM_D0_REGNUM + 8 + i].set_addr (vsp);
 	      vsp += 8;
 	    }
 	}
@@ -2568,8 +3068,8 @@ arm_exidx_fill_cache (struct frame_info
 
   /* If we restore SP from a register, assume this was the frame register.
      Otherwise just fall back to SP as frame register.  */
-  if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
-    cache->framereg = cache->saved_regs[ARM_SP_REGNUM].realreg;
+  if (cache->saved_regs[ARM_SP_REGNUM].is_realreg ())
+    cache->framereg = cache->saved_regs[ARM_SP_REGNUM].realreg ();
   else
     cache->framereg = ARM_SP_REGNUM;
 
@@ -2578,7 +3078,9 @@ arm_exidx_fill_cache (struct frame_info
     = vsp - get_frame_register_unsigned (this_frame, cache->framereg);
 
   /* We already got the previous SP.  */
-  cache->prev_sp = vsp;
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+  arm_cache_set_active_sp_value (cache, tdep, vsp);
 
   return cache;
 }
@@ -2590,7 +3092,7 @@ arm_exidx_fill_cache (struct frame_info
 
 static int
 arm_exidx_unwind_sniffer (const struct frame_unwind *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -2626,26 +3128,34 @@ arm_exidx_unwind_sniffer (const struct f
 	  && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
 	exc_valid = 1;
 
-      /* We also assume exception information is valid if we're currently
-	 blocked in a system call.  The system library is supposed to
-	 ensure this, so that e.g. pthread cancellation works.  */
-      if (arm_frame_is_thumb (this_frame))
-	{
-	  ULONGEST insn;
-
-	  if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 2,
-						 2, byte_order_for_code, &insn)
-	      && (insn & 0xff00) == 0xdf00 /* svc */)
-	    exc_valid = 1;
-	}
-      else
+      /* Some syscalls keep PC pointing to the SVC instruction itself.  */
+      for (int shift = 0; shift <= 1 && !exc_valid; ++shift)
 	{
-	  ULONGEST insn;
+	  /* We also assume exception information is valid if we're currently
+	     blocked in a system call.  The system library is supposed to
+	     ensure this, so that e.g. pthread cancellation works.  */
+	  if (arm_frame_is_thumb (this_frame))
+	    {
+	      ULONGEST insn;
+
+	      if (safe_read_memory_unsigned_integer ((get_frame_pc (this_frame)
+						      - (shift ? 2 : 0)),
+						     2, byte_order_for_code,
+						     &insn)
+		  && (insn & 0xff00) == 0xdf00 /* svc */)
+		exc_valid = 1;
+	    }
+	  else
+	    {
+	      ULONGEST insn;
 
-	  if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 4,
-						 4, byte_order_for_code, &insn)
-	      && (insn & 0x0f000000) == 0x0f000000 /* svc */)
-	    exc_valid = 1;
+	      if (safe_read_memory_unsigned_integer ((get_frame_pc (this_frame)
+						      - (shift ? 4 : 0)),
+						     4, byte_order_for_code,
+						     &insn)
+		  && (insn & 0x0f000000) == 0x0f000000 /* svc */)
+		exc_valid = 1;
+	    }
 	}
 	
       /* Bail out if we don't know that exception information is valid.  */
@@ -2679,6 +3189,7 @@ arm_exidx_unwind_sniffer (const struct f
 }
 
 struct frame_unwind arm_exidx_unwind = {
+  "arm exidx",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   arm_prologue_this_id,
@@ -2688,25 +3199,30 @@ struct frame_unwind arm_exidx_unwind = {
 };
 
 static struct arm_prologue_cache *
-arm_make_epilogue_frame_cache (struct frame_info *this_frame)
+arm_make_epilogue_frame_cache (frame_info_ptr this_frame)
 {
   struct arm_prologue_cache *cache;
   int reg;
 
   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
-  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+  arm_cache_init (cache, this_frame);
 
   /* Still rely on the offset calculated from prologue.  */
   arm_scan_prologue (this_frame, cache);
 
   /* Since we are in epilogue, the SP has been restored.  */
-  cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+  arm_cache_set_active_sp_value (cache, tdep,
+				 get_frame_register_unsigned (this_frame,
+							      ARM_SP_REGNUM));
 
   /* Calculate actual addresses of saved registers using offsets
      determined by arm_scan_prologue.  */
   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
-    if (trad_frame_addr_p (cache->saved_regs, reg))
-      cache->saved_regs[reg].addr += cache->prev_sp;
+    if (cache->saved_regs[reg].is_addr ())
+      cache->saved_regs[reg].set_addr (cache->saved_regs[reg].addr ()
+				       + arm_cache_get_prev_sp_value (cache, tdep));
 
   return cache;
 }
@@ -2715,7 +3231,7 @@ arm_make_epilogue_frame_cache (struct fr
    'struct frame_uwnind' for epilogue unwinder.  */
 
 static void
-arm_epilogue_frame_this_id (struct frame_info *this_frame,
+arm_epilogue_frame_this_id (frame_info_ptr this_frame,
 			    void **this_cache,
 			    struct frame_id *this_id)
 {
@@ -2734,14 +3250,16 @@ arm_epilogue_frame_this_id (struct frame
   if (func == 0)
     func = pc;
 
-  (*this_id) = frame_id_build (cache->prev_sp, pc);
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+  *this_id = frame_id_build (arm_cache_get_prev_sp_value (cache, tdep), func);
 }
 
 /* Implementation of function hook 'prev_register' in
    'struct frame_uwnind' for epilogue unwinder.  */
 
 static struct value *
-arm_epilogue_frame_prev_register (struct frame_info *this_frame,
+arm_epilogue_frame_prev_register (frame_info_ptr this_frame,
 				  void **this_cache, int regnum)
 {
   if (*this_cache == NULL)
@@ -2760,7 +3278,7 @@ static int thumb_stack_frame_destroyed_p
 
 static int
 arm_epilogue_frame_sniffer (const struct frame_unwind *self,
-			    struct frame_info *this_frame,
+			    frame_info_ptr this_frame,
 			    void **this_prologue_cache)
 {
   if (frame_relative_level (this_frame) == 0)
@@ -2781,6 +3299,7 @@ arm_epilogue_frame_sniffer (const struct
 
 static const struct frame_unwind arm_epilogue_frame_unwind =
 {
+  "arm epilogue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   arm_epilogue_frame_this_id,
@@ -2816,7 +3335,7 @@ static const struct frame_unwind arm_epi
    The trampoline 'bx r2' doesn't belong to main.  */
 
 static CORE_ADDR
-arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
+arm_skip_bx_reg (frame_info_ptr frame, CORE_ADDR pc)
 {
   /* The heuristics of recognizing such trampoline is that FRAME is
      executing in Thumb mode and the instruction on PC is 'bx Rm'.  */
@@ -2848,14 +3367,18 @@ arm_skip_bx_reg (struct frame_info *fram
 }
 
 static struct arm_prologue_cache *
-arm_make_stub_cache (struct frame_info *this_frame)
+arm_make_stub_cache (frame_info_ptr this_frame)
 {
   struct arm_prologue_cache *cache;
 
   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
-  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+  arm_cache_init (cache, this_frame);
 
-  cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+  arm_cache_set_active_sp_value (cache, tdep,
+				 get_frame_register_unsigned (this_frame,
+							      ARM_SP_REGNUM));
 
   return cache;
 }
@@ -2863,7 +3386,7 @@ arm_make_stub_cache (struct frame_info *
 /* Our frame ID for a stub frame is the current SP and LR.  */
 
 static void
-arm_stub_this_id (struct frame_info *this_frame,
+arm_stub_this_id (frame_info_ptr this_frame,
 		  void **this_cache,
 		  struct frame_id *this_id)
 {
@@ -2873,12 +3396,15 @@ arm_stub_this_id (struct frame_info *thi
     *this_cache = arm_make_stub_cache (this_frame);
   cache = (struct arm_prologue_cache *) *this_cache;
 
-  *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+  *this_id = frame_id_build (arm_cache_get_prev_sp_value (cache, tdep),
+			     get_frame_pc (this_frame));
 }
 
 static int
 arm_stub_unwind_sniffer (const struct frame_unwind *self,
-			 struct frame_info *this_frame,
+			 frame_info_ptr this_frame,
 			 void **this_prologue_cache)
 {
   CORE_ADDR addr_in_block;
@@ -2902,6 +3428,7 @@ arm_stub_unwind_sniffer (const struct fr
 }
 
 struct frame_unwind arm_stub_unwind = {
+  "arm stub",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   arm_stub_this_id,
@@ -2915,49 +3442,415 @@ struct frame_unwind arm_stub_unwind = {
    returned.  */
 
 static struct arm_prologue_cache *
-arm_m_exception_cache (struct frame_info *this_frame)
+arm_m_exception_cache (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
   struct arm_prologue_cache *cache;
-  CORE_ADDR unwound_sp;
-  LONGEST xpsr;
 
   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
-  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+  arm_cache_init (cache, this_frame);
 
-  unwound_sp = get_frame_register_unsigned (this_frame,
-					    ARM_SP_REGNUM);
+  /* ARMv7-M Architecture Reference "B1.5.6 Exception entry behavior"
+     describes which bits in LR that define which stack was used prior
+     to the exception and if FPU is used (causing extended stack frame).  */
 
-  /* The hardware saves eight 32-bit words, comprising xPSR,
-     ReturnAddress, LR (R14), R12, R3, R2, R1, R0.  See details in
-     "B1.5.6 Exception entry behavior" in
-     "ARMv7-M Architecture Reference Manual".  */
-  cache->saved_regs[0].addr = unwound_sp;
-  cache->saved_regs[1].addr = unwound_sp + 4;
-  cache->saved_regs[2].addr = unwound_sp + 8;
-  cache->saved_regs[3].addr = unwound_sp + 12;
-  cache->saved_regs[12].addr = unwound_sp + 16;
-  cache->saved_regs[14].addr = unwound_sp + 20;
-  cache->saved_regs[15].addr = unwound_sp + 24;
-  cache->saved_regs[ARM_PS_REGNUM].addr = unwound_sp + 28;
-
-  /* If bit 9 of the saved xPSR is set, then there is a four-byte
-     aligner between the top of the 32-byte stack frame and the
-     previous context's stack pointer.  */
-  cache->prev_sp = unwound_sp + 32;
-  if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr)
-      && (xpsr & (1 << 9)) != 0)
-    cache->prev_sp += 4;
+  /* In the lockup state PC contains a lockup magic value.
+     The PC value of the the next outer frame is irreversibly
+     lost.  The other registers are intact so LR likely contains
+     PC of some frame next to the outer one, but we cannot analyze
+     the next outer frame without knowing its PC
+     therefore we do not know SP fixup for this frame.
+     Some heuristics to resynchronize SP might be possible.
+     For simplicity, just terminate the unwinding to prevent it going
+     astray and attempting to read data/addresses it shouldn't,
+     which may cause further issues due to side-effects.  */
+  CORE_ADDR pc = get_frame_pc (this_frame);
+  if (arm_m_addr_is_lockup (pc))
+    {
+      /* The lockup can be real just in the innermost frame
+	 as the CPU is stopped and cannot create more frames.
+	 If we hit lockup magic PC in the other frame, it is
+	 just a sentinel at the top of stack: do not warn then.  */
+      if (frame_relative_level (this_frame) == 0)
+	warning (_("ARM M in lockup state, stack unwinding terminated."));
 
-  return cache;
+      /* Terminate any further stack unwinding.  */
+      arm_cache_set_active_sp_value (cache, tdep, 0);
+      return cache;
+    }
+
+  CORE_ADDR lr = get_frame_register_unsigned (this_frame, ARM_LR_REGNUM);
+
+  /* ARMv7-M Architecture Reference "A2.3.1 Arm core registers"
+     states that LR is set to 0xffffffff on reset.  ARMv8-M Architecture
+     Reference "B3.3 Registers" states that LR is set to 0xffffffff on warm
+     reset if Main Extension is implemented, otherwise the value is unknown.  */
+  if (lr == 0xffffffff)
+    {
+      /* Terminate any further stack unwinding.  */
+      arm_cache_set_active_sp_value (cache, tdep, 0);
+      return cache;
+    }
+
+  /* Check FNC_RETURN indicator bits (24-31).  */
+  bool fnc_return = (((lr >> 24) & 0xff) == 0xfe);
+  if (fnc_return)
+    {
+      /* FNC_RETURN is only valid for targets with Security Extension.  */
+      if (!tdep->have_sec_ext)
+	{
+	  error (_("While unwinding an exception frame, found unexpected Link "
+		   "Register value %s that requires the security extension, "
+		   "but the extension was not found or is disabled.  This "
+		   "should not happen and may be caused by corrupt data or a "
+		   "bug in GDB."), phex (lr, ARM_INT_REGISTER_SIZE));
+	}
+
+      if (!arm_unwind_secure_frames)
+	{
+	  warning (_("Non-secure to secure stack unwinding disabled."));
+
+	  /* Terminate any further stack unwinding.  */
+	  arm_cache_set_active_sp_value (cache, tdep, 0);
+	  return cache;
+	}
+
+      ULONGEST xpsr = get_frame_register_unsigned (this_frame, ARM_PS_REGNUM);
+      if ((xpsr & 0x1ff) != 0)
+	/* Handler mode: This is the mode that exceptions are handled in.  */
+	arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_msp_s_regnum);
+      else
+	/* Thread mode: This is the normal mode that programs run in.  */
+	arm_cache_switch_prev_sp (cache, tdep, tdep->m_profile_psp_s_regnum);
+
+      CORE_ADDR unwound_sp = arm_cache_get_prev_sp_value (cache, tdep);
+
+      /* Stack layout for a function call from Secure to Non-Secure state
+	 (ARMv8-M section B3.16):
+
+	    SP Offset
+
+		    +-------------------+
+	     0x08   |                   |
+		    +-------------------+   <-- Original SP
+	     0x04   |    Partial xPSR   |
+		    +-------------------+
+	     0x00   |   Return Address  |
+		    +===================+   <-- New SP  */
+
+      cache->saved_regs[ARM_PC_REGNUM].set_addr (unwound_sp + 0x00);
+      cache->saved_regs[ARM_LR_REGNUM].set_addr (unwound_sp + 0x00);
+      cache->saved_regs[ARM_PS_REGNUM].set_addr (unwound_sp + 0x04);
+
+      arm_cache_set_active_sp_value (cache, tdep, unwound_sp + 0x08);
+
+      return cache;
+    }
+
+  /* Check EXC_RETURN indicator bits (24-31).  */
+  bool exc_return = (((lr >> 24) & 0xff) == 0xff);
+  if (exc_return)
+    {
+      int sp_regnum;
+      bool secure_stack_used = false;
+      bool default_callee_register_stacking = false;
+      bool exception_domain_is_secure = false;
+      enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+
+      /* Check EXC_RETURN bit SPSEL if Main or Thread (process) stack used.  */
+      bool process_stack_used = (bit (lr, 2) != 0);
+
+      if (tdep->have_sec_ext)
+	{
+	  secure_stack_used = (bit (lr, 6) != 0);
+	  default_callee_register_stacking = (bit (lr, 5) != 0);
+	  exception_domain_is_secure = (bit (lr, 0) != 0);
+
+	  /* Unwinding from non-secure to secure can trip security
+	     measures.  In order to avoid the debugger being
+	     intrusive, rely on the user to configure the requested
+	     mode.  */
+	  if (secure_stack_used && !exception_domain_is_secure
+	      && !arm_unwind_secure_frames)
+	    {
+	      warning (_("Non-secure to secure stack unwinding disabled."));
+
+	      /* Terminate any further stack unwinding.  */
+	      arm_cache_set_active_sp_value (cache, tdep, 0);
+	      return cache;
+	    }
+
+	  if (process_stack_used)
+	    {
+	      if (secure_stack_used)
+		/* Secure thread (process) stack used, use PSP_S as SP.  */
+		sp_regnum = tdep->m_profile_psp_s_regnum;
+	      else
+		/* Non-secure thread (process) stack used, use PSP_NS as SP.  */
+		sp_regnum = tdep->m_profile_psp_ns_regnum;
+	    }
+	  else
+	    {
+	      if (secure_stack_used)
+		/* Secure main stack used, use MSP_S as SP.  */
+		sp_regnum = tdep->m_profile_msp_s_regnum;
+	      else
+		/* Non-secure main stack used, use MSP_NS as SP.  */
+		sp_regnum = tdep->m_profile_msp_ns_regnum;
+	    }
+	}
+      else
+	{
+	  if (process_stack_used)
+	    /* Thread (process) stack used, use PSP as SP.  */
+	    sp_regnum = tdep->m_profile_psp_regnum;
+	  else
+	    /* Main stack used, use MSP as SP.  */
+	    sp_regnum = tdep->m_profile_msp_regnum;
+	}
+
+      /* Set the active SP regnum.  */
+      arm_cache_switch_prev_sp (cache, tdep, sp_regnum);
+
+      /* Fetch the SP to use for this frame.  */
+      CORE_ADDR unwound_sp = arm_cache_get_prev_sp_value (cache, tdep);
+
+      /* Exception entry context stacking are described in ARMv8-M (section
+	 B3.19) and ARMv7-M (sections B1.5.6 and B1.5.7) Architecture Reference
+	 Manuals.
+
+	 The following figure shows the structure of the stack frame when
+	 Security and Floating-point extensions are present.
+
+			      SP Offsets
+		Without                         With
+	      Callee Regs                    Callee Regs
+					(Secure -> Non-Secure)
+			+-------------------+
+		 0xA8   |                   |   0xD0
+			+===================+         --+  <-- Original SP
+		 0xA4   |        S31        |   0xCC    |
+			+-------------------+           |
+				 ...                    |  Additional FP context
+			+-------------------+           |
+		 0x68   |        S16        |   0x90    |
+			+===================+         --+
+		 0x64   |      Reserved     |   0x8C    |
+			+-------------------+           |
+		 0x60   |       FPSCR       |   0x88    |
+			+-------------------+           |
+		 0x5C   |        S15        |   0x84    |  FP context
+			+-------------------+           |
+				 ...                    |
+			+-------------------+           |
+		 0x20   |         S0        |   0x48    |
+			+===================+         --+
+		 0x1C   |       xPSR        |   0x44    |
+			+-------------------+           |
+		 0x18   |  Return address   |   0x40    |
+			+-------------------+           |
+		 0x14   |      LR(R14)      |   0x3C    |
+			+-------------------+           |
+		 0x10   |        R12        |   0x38    |  State context
+			+-------------------+           |
+		 0x0C   |         R3        |   0x34    |
+			+-------------------+           |
+				 ...                    |
+			+-------------------+           |
+		 0x00   |         R0        |   0x28    |
+			+===================+         --+
+			|        R11        |   0x24    |
+			+-------------------+           |
+				 ...                    |
+			+-------------------+           |  Additional state
+			|         R4        |   0x08    |  context when
+			+-------------------+           |  transitioning from
+			|      Reserved     |   0x04    |  Secure to Non-Secure
+			+-------------------+           |
+			|  Magic signature  |   0x00    |
+			+===================+         --+  <-- New SP  */
+
+      uint32_t sp_r0_offset = 0;
+
+      /* With the Security extension, the hardware saves R4..R11 too.  */
+      if (tdep->have_sec_ext && secure_stack_used
+	  && (!default_callee_register_stacking || !exception_domain_is_secure))
+	{
+	  /* Read R4..R11 from the integer callee registers.  */
+	  cache->saved_regs[4].set_addr (unwound_sp + 0x08);
+	  cache->saved_regs[5].set_addr (unwound_sp + 0x0C);
+	  cache->saved_regs[6].set_addr (unwound_sp + 0x10);
+	  cache->saved_regs[7].set_addr (unwound_sp + 0x14);
+	  cache->saved_regs[8].set_addr (unwound_sp + 0x18);
+	  cache->saved_regs[9].set_addr (unwound_sp + 0x1C);
+	  cache->saved_regs[10].set_addr (unwound_sp + 0x20);
+	  cache->saved_regs[11].set_addr (unwound_sp + 0x24);
+	  sp_r0_offset = 0x28;
+	}
+
+      /* The hardware saves eight 32-bit words, comprising xPSR,
+	 ReturnAddress, LR (R14), R12, R3, R2, R1, R0.  See details in
+	 "B1.5.6 Exception entry behavior" in
+	 "ARMv7-M Architecture Reference Manual".  */
+      cache->saved_regs[0].set_addr (unwound_sp + sp_r0_offset);
+      cache->saved_regs[1].set_addr (unwound_sp + sp_r0_offset + 0x04);
+      cache->saved_regs[2].set_addr (unwound_sp + sp_r0_offset + 0x08);
+      cache->saved_regs[3].set_addr (unwound_sp + sp_r0_offset + 0x0C);
+      cache->saved_regs[ARM_IP_REGNUM].set_addr (unwound_sp + sp_r0_offset
+						 + 0x10);
+      cache->saved_regs[ARM_LR_REGNUM].set_addr (unwound_sp + sp_r0_offset
+						 + 0x14);
+      cache->saved_regs[ARM_PC_REGNUM].set_addr (unwound_sp + sp_r0_offset
+						 + 0x18);
+      cache->saved_regs[ARM_PS_REGNUM].set_addr (unwound_sp + sp_r0_offset
+						 + 0x1C);
+
+      /* Check EXC_RETURN bit FTYPE if extended stack frame (FPU regs stored)
+	 type used.  */
+      bool extended_frame_used = (bit (lr, 4) == 0);
+      if (extended_frame_used)
+	{
+	  ULONGEST fpccr;
+	  ULONGEST fpcar;
+
+	  /* Read FPCCR register.  */
+	  if (!safe_read_memory_unsigned_integer (FPCCR, ARM_INT_REGISTER_SIZE,
+						 byte_order, &fpccr))
+	    {
+	      warning (_("Could not fetch required FPCCR content.  Further "
+			 "unwinding is impossible."));
+	      arm_cache_set_active_sp_value (cache, tdep, 0);
+	      return cache;
+	    }
+
+	  /* Read FPCAR register.  */
+	  if (!safe_read_memory_unsigned_integer (FPCAR, ARM_INT_REGISTER_SIZE,
+						  byte_order, &fpcar))
+	    {
+	      warning (_("Could not fetch FPCAR content. Further unwinding of "
+			 "FP register values will be unreliable."));
+	      fpcar = 0;
+	    }
+
+	  bool fpccr_aspen = bit (fpccr, 31);
+	  bool fpccr_lspen = bit (fpccr, 30);
+	  bool fpccr_ts = bit (fpccr, 26);
+	  bool fpccr_lspact = bit (fpccr, 0);
+
+	  /* The LSPEN and ASPEN bits indicate if the lazy state preservation
+	     for FP registers is enabled or disabled.  The LSPACT bit indicate,
+	     together with FPCAR, if the lazy state preservation feature is
+	     active for the current frame or for another frame.
+	     See "Lazy context save of FP state", in B1.5.7, also ARM AN298,
+	     supported by Cortex-M4F architecture for details.  */
+	  bool fpcar_points_to_this_frame = ((unwound_sp + sp_r0_offset + 0x20)
+					     == (fpcar & ~0x7));
+	  bool read_fp_regs_from_stack = (!(fpccr_aspen && fpccr_lspen
+					    && fpccr_lspact
+					    && fpcar_points_to_this_frame));
+
+	  /* Extended stack frame type used.  */
+	  if (read_fp_regs_from_stack)
+	    {
+	      CORE_ADDR addr = unwound_sp + sp_r0_offset + 0x20;
+	      for (int i = 0; i < 8; i++)
+		{
+		  cache->saved_regs[ARM_D0_REGNUM + i].set_addr (addr);
+		  addr += 8;
+		}
+	    }
+	  cache->saved_regs[ARM_FPSCR_REGNUM].set_addr (unwound_sp
+							+ sp_r0_offset + 0x60);
+
+	  if (tdep->have_sec_ext && !default_callee_register_stacking
+	      && fpccr_ts)
+	    {
+	      /* Handle floating-point callee saved registers.  */
+	      if (read_fp_regs_from_stack)
+		{
+		  CORE_ADDR addr = unwound_sp + sp_r0_offset + 0x68;
+		  for (int i = 8; i < 16; i++)
+		    {
+		      cache->saved_regs[ARM_D0_REGNUM + i].set_addr (addr);
+		      addr += 8;
+		    }
+		}
+
+	      arm_cache_set_active_sp_value (cache, tdep,
+					     unwound_sp + sp_r0_offset + 0xA8);
+	    }
+	  else
+	    {
+	      /* Offset 0x64 is reserved.  */
+	      arm_cache_set_active_sp_value (cache, tdep,
+					     unwound_sp + sp_r0_offset + 0x68);
+	    }
+	}
+      else
+	{
+	  /* Standard stack frame type used.  */
+	  arm_cache_set_active_sp_value (cache, tdep,
+					 unwound_sp + sp_r0_offset + 0x20);
+	}
+
+      /* If bit 9 of the saved xPSR is set, then there is a four-byte
+	 aligner between the top of the 32-byte stack frame and the
+	 previous context's stack pointer.  */
+      ULONGEST xpsr;
+      if (!safe_read_memory_unsigned_integer (cache->saved_regs[ARM_PS_REGNUM]
+					      .addr (), ARM_INT_REGISTER_SIZE,
+					      byte_order, &xpsr))
+	{
+	  warning (_("Could not fetch required XPSR content.  Further "
+		     "unwinding is impossible."));
+	  arm_cache_set_active_sp_value (cache, tdep, 0);
+	  return cache;
+	}
+
+      if (bit (xpsr, 9) != 0)
+	{
+	  CORE_ADDR new_sp = arm_cache_get_prev_sp_value (cache, tdep) + 4;
+	  arm_cache_set_active_sp_value (cache, tdep, new_sp);
+	}
+
+      return cache;
+    }
+
+  internal_error (_("While unwinding an exception frame, "
+		    "found unexpected Link Register value "
+		    "%s.  This should not happen and may "
+		    "be caused by corrupt data or a bug in"
+		    " GDB."),
+		  phex (lr, ARM_INT_REGISTER_SIZE));
+}
+
+/* Implementation of the stop_reason hook for arm_m_exception frames.  */
+
+static enum unwind_stop_reason
+arm_m_exception_frame_unwind_stop_reason (frame_info_ptr this_frame,
+					  void **this_cache)
+{
+  struct arm_prologue_cache *cache;
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+
+  if (*this_cache == NULL)
+    *this_cache = arm_m_exception_cache (this_frame);
+  cache = (struct arm_prologue_cache *) *this_cache;
+
+  /* If we've hit a wall, stop.  */
+  if (arm_cache_get_prev_sp_value (cache, tdep) == 0)
+    return UNWIND_OUTERMOST;
+
+  return UNWIND_NO_REASON;
 }
 
 /* Implementation of function hook 'this_id' in
    'struct frame_uwnind'.  */
 
 static void
-arm_m_exception_this_id (struct frame_info *this_frame,
+arm_m_exception_this_id (frame_info_ptr this_frame,
 			 void **this_cache,
 			 struct frame_id *this_id)
 {
@@ -2968,7 +3861,9 @@ arm_m_exception_this_id (struct frame_in
   cache = (struct arm_prologue_cache *) *this_cache;
 
   /* Our frame ID for a stub frame is the current SP and LR.  */
-  *this_id = frame_id_build (cache->prev_sp,
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+  *this_id = frame_id_build (arm_cache_get_prev_sp_value (cache, tdep),
 			     get_frame_pc (this_frame));
 }
 
@@ -2976,20 +3871,61 @@ arm_m_exception_this_id (struct frame_in
    'struct frame_uwnind'.  */
 
 static struct value *
-arm_m_exception_prev_register (struct frame_info *this_frame,
+arm_m_exception_prev_register (frame_info_ptr this_frame,
 			       void **this_cache,
 			       int prev_regnum)
 {
   struct arm_prologue_cache *cache;
+  CORE_ADDR sp_value;
 
   if (*this_cache == NULL)
     *this_cache = arm_m_exception_cache (this_frame);
   cache = (struct arm_prologue_cache *) *this_cache;
 
   /* The value was already reconstructed into PREV_SP.  */
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
   if (prev_regnum == ARM_SP_REGNUM)
     return frame_unwind_got_constant (this_frame, prev_regnum,
-				      cache->prev_sp);
+				      arm_cache_get_prev_sp_value (cache, tdep));
+
+  /* If we are asked to unwind the PC, strip the saved T bit.  */
+  if (prev_regnum == ARM_PC_REGNUM)
+    {
+      struct value *value = trad_frame_get_prev_register (this_frame,
+							  cache->saved_regs,
+							  prev_regnum);
+      CORE_ADDR pc = value_as_address (value);
+      return frame_unwind_got_constant (this_frame, prev_regnum,
+					UNMAKE_THUMB_ADDR (pc));
+    }
+
+  /* The value might be one of the alternative SP, if so, use the
+     value already constructed.  */
+  if (arm_is_alternative_sp_register (tdep, prev_regnum))
+    {
+      sp_value = arm_cache_get_sp_register (cache, tdep, prev_regnum);
+      return frame_unwind_got_constant (this_frame, prev_regnum, sp_value);
+    }
+
+  /* If we are asked to unwind the xPSR, set T bit if PC is in thumb mode.
+     LR register is unreliable as it contains FNC_RETURN or EXC_RETURN
+     pattern.  */
+  if (prev_regnum == ARM_PS_REGNUM)
+    {
+      struct gdbarch *gdbarch = get_frame_arch (this_frame);
+      struct value *value = trad_frame_get_prev_register (this_frame,
+							  cache->saved_regs,
+							  ARM_PC_REGNUM);
+      CORE_ADDR pc = value_as_address (value);
+      value = trad_frame_get_prev_register (this_frame, cache->saved_regs,
+					    ARM_PS_REGNUM);
+      ULONGEST xpsr = value_as_long (value);
+
+      /* Reconstruct the T bit; see arm_prologue_prev_register for details.  */
+      xpsr = reconstruct_t_bit (gdbarch, pc, xpsr);
+      return frame_unwind_got_constant (this_frame, ARM_PS_REGNUM, xpsr);
+    }
 
   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
 				       prev_regnum);
@@ -3000,24 +3936,27 @@ arm_m_exception_prev_register (struct fr
 
 static int
 arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
-				struct frame_info *this_frame,
+				frame_info_ptr this_frame,
 				void **this_prologue_cache)
 {
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR this_pc = get_frame_pc (this_frame);
 
   /* No need to check is_m; this sniffer is only registered for
      M-profile architectures.  */
 
   /* Check if exception frame returns to a magic PC value.  */
-  return arm_m_addr_is_magic (this_pc);
+  return arm_m_addr_is_magic (gdbarch, this_pc);
 }
 
-/* Frame unwinder for M-profile exceptions.  */
+/* Frame unwinder for M-profile exceptions (EXC_RETURN on stack),
+   lockup and secure/nonsecure interstate function calls (FNC_RETURN).  */
 
 struct frame_unwind arm_m_exception_unwind =
 {
+  "arm m exception lockup sec_fnc",
   SIGTRAMP_FRAME,
-  default_frame_unwind_stop_reason,
+  arm_m_exception_frame_unwind_stop_reason,
   arm_m_exception_this_id,
   arm_m_exception_prev_register,
   NULL,
@@ -3025,7 +3964,7 @@ struct frame_unwind arm_m_exception_unwi
 };
 
 static CORE_ADDR
-arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
+arm_normal_frame_base (frame_info_ptr this_frame, void **this_cache)
 {
   struct arm_prologue_cache *cache;
 
@@ -3033,7 +3972,9 @@ arm_normal_frame_base (struct frame_info
     *this_cache = arm_make_prologue_cache (this_frame);
   cache = (struct arm_prologue_cache *) *this_cache;
 
-  return cache->prev_sp - cache->framesize;
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (get_frame_arch (this_frame));
+  return arm_cache_get_prev_sp_value (cache, tdep) - cache->framesize;
 }
 
 struct frame_base arm_normal_base = {
@@ -3043,57 +3984,152 @@ struct frame_base arm_normal_base = {
   arm_normal_frame_base
 };
 
+struct arm_dwarf2_prev_register_cache
+{
+  /* Cached value of the corresponding stack pointer for the inner frame.  */
+  CORE_ADDR sp;
+  CORE_ADDR msp;
+  CORE_ADDR msp_s;
+  CORE_ADDR msp_ns;
+  CORE_ADDR psp;
+  CORE_ADDR psp_s;
+  CORE_ADDR psp_ns;
+};
+
 static struct value *
-arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
+arm_dwarf2_prev_register (frame_info_ptr this_frame, void **this_cache,
 			  int regnum)
 {
   struct gdbarch * gdbarch = get_frame_arch (this_frame);
-  CORE_ADDR lr, cpsr;
-  ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+  CORE_ADDR lr;
+  ULONGEST cpsr;
+  arm_dwarf2_prev_register_cache *cache
+    = ((arm_dwarf2_prev_register_cache *)
+       dwarf2_frame_get_fn_data (this_frame, this_cache,
+				 arm_dwarf2_prev_register));
+
+  if (!cache)
+    {
+      const unsigned int size = sizeof (struct arm_dwarf2_prev_register_cache);
+      cache = ((arm_dwarf2_prev_register_cache *)
+	       dwarf2_frame_allocate_fn_data (this_frame, this_cache,
+					      arm_dwarf2_prev_register, size));
+
+      if (tdep->have_sec_ext)
+	{
+	  cache->sp
+	    = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
+
+	  cache->msp_s
+	    = get_frame_register_unsigned (this_frame,
+					   tdep->m_profile_msp_s_regnum);
+	  cache->msp_ns
+	    = get_frame_register_unsigned (this_frame,
+					   tdep->m_profile_msp_ns_regnum);
+	  cache->psp_s
+	    = get_frame_register_unsigned (this_frame,
+					   tdep->m_profile_psp_s_regnum);
+	  cache->psp_ns
+	    = get_frame_register_unsigned (this_frame,
+					   tdep->m_profile_psp_ns_regnum);
+	}
+      else if (tdep->is_m)
+	{
+	  cache->sp
+	    = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
+
+	  cache->msp
+	    = get_frame_register_unsigned (this_frame,
+					   tdep->m_profile_msp_regnum);
+	  cache->psp
+	    = get_frame_register_unsigned (this_frame,
+					   tdep->m_profile_psp_regnum);
+	}
+    }
 
-  switch (regnum)
+  if (regnum == ARM_PC_REGNUM)
     {
-    case ARM_PC_REGNUM:
       /* The PC is normally copied from the return column, which
 	 describes saves of LR.  However, that version may have an
 	 extra bit set to indicate Thumb state.  The bit is not
 	 part of the PC.  */
+
+      /* Record in the frame whether the return address was signed.  */
+      if (tdep->have_pacbti)
+	{
+	  CORE_ADDR ra_auth_code
+	    = frame_unwind_register_unsigned (this_frame,
+					      tdep->pacbti_pseudo_base);
+
+	  if (ra_auth_code != 0)
+	    set_frame_previous_pc_masked (this_frame);
+	}
+
       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
       return frame_unwind_got_constant (this_frame, regnum,
 					arm_addr_bits_remove (gdbarch, lr));
-
-    case ARM_PS_REGNUM:
+    }
+  else if (regnum == ARM_PS_REGNUM)
+    {
       /* Reconstruct the T bit; see arm_prologue_prev_register for details.  */
       cpsr = get_frame_register_unsigned (this_frame, regnum);
       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
-      if (IS_THUMB_ADDR (lr))
-	cpsr |= t_bit;
-      else
-	cpsr &= ~t_bit;
+      cpsr = reconstruct_t_bit (gdbarch, lr, cpsr);
       return frame_unwind_got_constant (this_frame, regnum, cpsr);
-
-    default:
-      internal_error (__FILE__, __LINE__,
-		      _("Unexpected register %d"), regnum);
     }
-}
-
-static void
-arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
-			   struct dwarf2_frame_state_reg *reg,
-			   struct frame_info *this_frame)
-{
-  switch (regnum)
+  else if (arm_is_alternative_sp_register (tdep, regnum))
     {
-    case ARM_PC_REGNUM:
-    case ARM_PS_REGNUM:
-      reg->how = DWARF2_FRAME_REG_FN;
-      reg->loc.fn = arm_dwarf2_prev_register;
-      break;
-    case ARM_SP_REGNUM:
-      reg->how = DWARF2_FRAME_REG_CFA;
-      break;
+      /* Handle the alternative SP registers on Cortex-M.  */
+      bool override_with_sp_value = false;
+      CORE_ADDR val;
+
+      if (tdep->have_sec_ext)
+	{
+	  bool is_msp = (regnum == tdep->m_profile_msp_regnum)
+	    && (cache->msp_s == cache->sp || cache->msp_ns == cache->sp);
+	  bool is_msp_s = (regnum == tdep->m_profile_msp_s_regnum)
+	    && (cache->msp_s == cache->sp);
+	  bool is_msp_ns = (regnum == tdep->m_profile_msp_ns_regnum)
+	    && (cache->msp_ns == cache->sp);
+	  bool is_psp = (regnum == tdep->m_profile_psp_regnum)
+	    && (cache->psp_s == cache->sp || cache->psp_ns == cache->sp);
+	  bool is_psp_s = (regnum == tdep->m_profile_psp_s_regnum)
+	    && (cache->psp_s == cache->sp);
+	  bool is_psp_ns = (regnum == tdep->m_profile_psp_ns_regnum)
+	    && (cache->psp_ns == cache->sp);
+
+	  override_with_sp_value = is_msp || is_msp_s || is_msp_ns
+	    || is_psp || is_psp_s || is_psp_ns;
+
+	}
+      else if (tdep->is_m)
+	{
+	  bool is_msp = (regnum == tdep->m_profile_msp_regnum)
+	    && (cache->sp == cache->msp);
+	  bool is_psp = (regnum == tdep->m_profile_psp_regnum)
+	    && (cache->sp == cache->psp);
+
+	  override_with_sp_value = is_msp || is_psp;
+	}
+
+      if (override_with_sp_value)
+	{
+	  /* Use value of SP from previous frame.  */
+	  frame_info_ptr prev_frame = get_prev_frame (this_frame);
+	  if (prev_frame)
+	    val = get_frame_register_unsigned (prev_frame, ARM_SP_REGNUM);
+	  else
+	    val = get_frame_base (this_frame);
+	}
+      else
+	/* Use value for the register from previous frame.  */
+	val = get_frame_register_unsigned (this_frame, regnum);
+
+      return frame_unwind_got_constant (this_frame, regnum, val);
     }
+
+  internal_error (_("Unexpected register %d"), regnum);
 }
 
 /* Implement the stack_frame_destroyed_p gdbarch method.  */
@@ -3269,18 +4305,19 @@ arm_stack_frame_destroyed_p (struct gdba
 /* When arguments must be pushed onto the stack, they go on in reverse
    order.  The code below implements a FILO (stack) to do this.  */
 
-struct stack_item
+struct arm_stack_item
 {
   int len;
-  struct stack_item *prev;
+  struct arm_stack_item *prev;
   gdb_byte *data;
 };
 
-static struct stack_item *
-push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len)
+static struct arm_stack_item *
+push_stack_item (struct arm_stack_item *prev, const gdb_byte *contents,
+		 int len)
 {
-  struct stack_item *si;
-  si = XNEW (struct stack_item);
+  struct arm_stack_item *si;
+  si = XNEW (struct arm_stack_item);
   si->data = (gdb_byte *) xmalloc (len);
   si->len = len;
   si->prev = prev;
@@ -3288,10 +4325,10 @@ push_stack_item (struct stack_item *prev
   return si;
 }
 
-static struct stack_item *
-pop_stack_item (struct stack_item *si)
+static struct arm_stack_item *
+pop_stack_item (struct arm_stack_item *si)
 {
-  struct stack_item *dead = si;
+  struct arm_stack_item *dead = si;
   si = si->prev;
   xfree (dead->data);
   xfree (dead);
@@ -3305,14 +4342,14 @@ static ULONGEST
 arm_type_align (gdbarch *gdbarch, struct type *t)
 {
   t = check_typedef (t);
-  if (TYPE_CODE (t) == TYPE_CODE_ARRAY && TYPE_VECTOR (t))
+  if (t->code () == TYPE_CODE_ARRAY && t->is_vector ())
     {
       /* Use the natural alignment for vector types (the same for
 	 scalar type), but the maximum alignment is 64-bit.  */
-      if (TYPE_LENGTH (t) > 8)
+      if (t->length () > 8)
 	return 8;
       else
-	return TYPE_LENGTH (t);
+	return t->length ();
     }
 
   /* Allow the common code to calculate the alignment.  */
@@ -3347,7 +4384,7 @@ arm_vfp_cprc_unit_length (enum arm_vfp_c
     case VFP_CPRC_VEC128:
       return 16;
     default:
-      internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
+      internal_error (_("Invalid VFP CPRC type: %d."),
 		      (int) b);
     }
 }
@@ -3369,7 +4406,7 @@ arm_vfp_cprc_reg_char (enum arm_vfp_cprc
     case VFP_CPRC_VEC128:
       return 'q';
     default:
-      internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
+      internal_error (_("Invalid VFP CPRC type: %d."),
 		      (int) b);
     }
 }
@@ -3392,10 +4429,10 @@ arm_vfp_cprc_sub_candidate (struct type
 			    enum arm_vfp_cprc_base_type *base_type)
 {
   t = check_typedef (t);
-  switch (TYPE_CODE (t))
+  switch (t->code ())
     {
     case TYPE_CODE_FLT:
-      switch (TYPE_LENGTH (t))
+      switch (t->length ())
 	{
 	case 4:
 	  if (*base_type == VFP_CPRC_UNKNOWN)
@@ -3427,7 +4464,7 @@ arm_vfp_cprc_sub_candidate (struct type
 	 };
 
       */
-      switch (TYPE_LENGTH (t))
+      switch (t->length ())
 	{
 	case 8:
 	  if (*base_type == VFP_CPRC_UNKNOWN)
@@ -3450,11 +4487,11 @@ arm_vfp_cprc_sub_candidate (struct type
 
     case TYPE_CODE_ARRAY:
       {
-	if (TYPE_VECTOR (t))
+	if (t->is_vector ())
 	  {
 	    /* A 64-bit or 128-bit containerized vector type are VFP
 	       CPRCs.  */
-	    switch (TYPE_LENGTH (t))
+	    switch (t->length ())
 	      {
 	      case 8:
 		if (*base_type == VFP_CPRC_UNKNOWN)
@@ -3473,11 +4510,11 @@ arm_vfp_cprc_sub_candidate (struct type
 	    int count;
 	    unsigned unitlen;
 
-	    count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t),
+	    count = arm_vfp_cprc_sub_candidate (t->target_type (),
 						base_type);
 	    if (count == -1)
 	      return -1;
-	    if (TYPE_LENGTH (t) == 0)
+	    if (t->length () == 0)
 	      {
 		gdb_assert (count == 0);
 		return 0;
@@ -3485,8 +4522,8 @@ arm_vfp_cprc_sub_candidate (struct type
 	    else if (count == 0)
 	      return -1;
 	    unitlen = arm_vfp_cprc_unit_length (*base_type);
-	    gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
-	    return TYPE_LENGTH (t) / unitlen;
+	    gdb_assert ((t->length () % unitlen) == 0);
+	    return t->length () / unitlen;
 	  }
       }
       break;
@@ -3496,18 +4533,18 @@ arm_vfp_cprc_sub_candidate (struct type
 	int count = 0;
 	unsigned unitlen;
 	int i;
-	for (i = 0; i < TYPE_NFIELDS (t); i++)
+	for (i = 0; i < t->num_fields (); i++)
 	  {
 	    int sub_count = 0;
 
-	    if (!field_is_static (&TYPE_FIELD (t, i)))
-	      sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
+	    if (!t->field (i).is_static ())
+	      sub_count = arm_vfp_cprc_sub_candidate (t->field (i).type (),
 						      base_type);
 	    if (sub_count == -1)
 	      return -1;
 	    count += sub_count;
 	  }
-	if (TYPE_LENGTH (t) == 0)
+	if (t->length () == 0)
 	  {
 	    gdb_assert (count == 0);
 	    return 0;
@@ -3515,7 +4552,7 @@ arm_vfp_cprc_sub_candidate (struct type
 	else if (count == 0)
 	  return -1;
 	unitlen = arm_vfp_cprc_unit_length (*base_type);
-	if (TYPE_LENGTH (t) != unitlen * count)
+	if (t->length () != unitlen * count)
 	  return -1;
 	return count;
       }
@@ -3525,15 +4562,15 @@ arm_vfp_cprc_sub_candidate (struct type
 	int count = 0;
 	unsigned unitlen;
 	int i;
-	for (i = 0; i < TYPE_NFIELDS (t); i++)
+	for (i = 0; i < t->num_fields (); i++)
 	  {
-	    int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
+	    int sub_count = arm_vfp_cprc_sub_candidate (t->field (i).type (),
 							base_type);
 	    if (sub_count == -1)
 	      return -1;
 	    count = (count > sub_count ? count : sub_count);
 	  }
-	if (TYPE_LENGTH (t) == 0)
+	if (t->length () == 0)
 	  {
 	    gdb_assert (count == 0);
 	    return 0;
@@ -3541,7 +4578,7 @@ arm_vfp_cprc_sub_candidate (struct type
 	else if (count == 0)
 	  return -1;
 	unitlen = arm_vfp_cprc_unit_length (*base_type);
-	if (TYPE_LENGTH (t) != unitlen * count)
+	if (t->length () != unitlen * count)
 	  return -1;
 	return count;
       }
@@ -3579,15 +4616,18 @@ arm_vfp_call_candidate (struct type *t,
 static int
 arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
   /* Variadic functions always use the base ABI.  Assume that functions
      without debug info are not variadic.  */
-  if (func_type && TYPE_VARARGS (check_typedef (func_type)))
+  if (func_type && check_typedef (func_type)->has_varargs ())
     return 0;
+
   /* The VFP ABI is only supported as a variant of AAPCS.  */
   if (tdep->arm_abi != ARM_ABI_AAPCS)
     return 0;
-  return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
+
+  return tdep->fp_model == ARM_FLOAT_VFP;
 }
 
 /* We currently only support passing parameters in integer registers, which
@@ -3606,16 +4646,17 @@ arm_push_dummy_call (struct gdbarch *gdb
   int argnum;
   int argreg;
   int nstack;
-  struct stack_item *si = NULL;
+  struct arm_stack_item *si = NULL;
   int use_vfp_abi;
   struct type *ftype;
   unsigned vfp_regs_free = (1 << 16) - 1;
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   /* Determine the type of this function and whether the VFP ABI
      applies.  */
-  ftype = check_typedef (value_type (function));
-  if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
-    ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
+  ftype = check_typedef (function->type ());
+  if (ftype->code () == TYPE_CODE_PTR)
+    ftype = check_typedef (ftype->target_type ());
   use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
 
   /* Set the return address.  For the ARM, the return breakpoint is
@@ -3636,10 +4677,10 @@ arm_push_dummy_call (struct gdbarch *gdb
      passing register.  */
   if (return_method == return_method_struct)
     {
-      if (arm_debug)
-	fprintf_unfiltered (gdb_stdlog, "struct return in %s = %s\n",
-			    gdbarch_register_name (gdbarch, argreg),
-			    paddress (gdbarch, struct_addr));
+      arm_debug_printf ("struct return in %s = %s",
+			gdbarch_register_name (gdbarch, argreg),
+			paddress (gdbarch, struct_addr));
+
       regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
       argreg++;
     }
@@ -3656,18 +4697,18 @@ arm_push_dummy_call (struct gdbarch *gdb
       int vfp_base_count;
       int may_use_core_reg = 1;
 
-      arg_type = check_typedef (value_type (args[argnum]));
-      len = TYPE_LENGTH (arg_type);
-      target_type = TYPE_TARGET_TYPE (arg_type);
-      typecode = TYPE_CODE (arg_type);
-      val = value_contents (args[argnum]);
+      arg_type = check_typedef (args[argnum]->type ());
+      len = arg_type->length ();
+      target_type = arg_type->target_type ();
+      typecode = arg_type->code ();
+      val = args[argnum]->contents ().data ();
 
       align = type_align (arg_type);
       /* Round alignment up to a whole number of words.  */
       align = (align + ARM_INT_REGISTER_SIZE - 1)
 		& ~(ARM_INT_REGISTER_SIZE - 1);
       /* Different ABIs have different maximum alignments.  */
-      if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
+      if (tdep->arm_abi == ARM_ABI_APCS)
 	{
 	  /* The APCS ABI only requires word alignment.  */
 	  align = ARM_INT_REGISTER_SIZE;
@@ -3757,7 +4798,7 @@ arm_push_dummy_call (struct gdbarch *gdb
 	 the THUMB bit in it.  */
       if (TYPE_CODE_PTR == typecode
 	  && target_type != NULL
-	  && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type)))
+	  && TYPE_CODE_FUNC == check_typedef (target_type)->code ())
 	{
 	  CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
 	  if (arm_pc_is_thumb (gdbarch, regval))
@@ -3783,14 +4824,10 @@ arm_push_dummy_call (struct gdbarch *gdb
 	    {
 	      /* The argument is being passed in a general purpose
 		 register.  */
-	      if (byte_order == BFD_ENDIAN_BIG)
-		regval <<= (ARM_INT_REGISTER_SIZE - partial_len) * 8;
-	      if (arm_debug)
-		fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
-				    argnum,
-				    gdbarch_register_name
-				      (gdbarch, argreg),
-				    phex (regval, ARM_INT_REGISTER_SIZE));
+	      arm_debug_printf ("arg %d in %s = 0x%s", argnum,
+				gdbarch_register_name (gdbarch, argreg),
+				phex (regval, ARM_INT_REGISTER_SIZE));
+
 	      regcache_cooked_write_unsigned (regcache, argreg, regval);
 	      argreg++;
 	    }
@@ -3802,9 +4839,7 @@ arm_push_dummy_call (struct gdbarch *gdb
 	      store_unsigned_integer (buf, partial_len, byte_order, regval);
 
 	      /* Push the arguments onto the stack.  */
-	      if (arm_debug)
-		fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
-				    argnum, nstack);
+	      arm_debug_printf ("arg %d @ sp + %d", argnum, nstack);
 	      si = push_stack_item (si, buf, ARM_INT_REGISTER_SIZE);
 	      nstack += ARM_INT_REGISTER_SIZE;
 	    }
@@ -3846,37 +4881,37 @@ static void
 print_fpu_flags (struct ui_file *file, int flags)
 {
   if (flags & (1 << 0))
-    fputs_filtered ("IVO ", file);
+    gdb_puts ("IVO ", file);
   if (flags & (1 << 1))
-    fputs_filtered ("DVZ ", file);
+    gdb_puts ("DVZ ", file);
   if (flags & (1 << 2))
-    fputs_filtered ("OFL ", file);
+    gdb_puts ("OFL ", file);
   if (flags & (1 << 3))
-    fputs_filtered ("UFL ", file);
+    gdb_puts ("UFL ", file);
   if (flags & (1 << 4))
-    fputs_filtered ("INX ", file);
-  fputc_filtered ('\n', file);
+    gdb_puts ("INX ", file);
+  gdb_putc ('\n', file);
 }
 
 /* Print interesting information about the floating point processor
    (if present) or emulator.  */
 static void
 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
-		      struct frame_info *frame, const char *args)
+		      frame_info_ptr frame, const char *args)
 {
   unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
   int type;
 
   type = (status >> 24) & 127;
   if (status & (1 << 31))
-    fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
+    gdb_printf (file, _("Hardware FPU type %d\n"), type);
   else
-    fprintf_filtered (file, _("Software FPU type %d\n"), type);
+    gdb_printf (file, _("Software FPU type %d\n"), type);
   /* i18n: [floating point unit] mask */
-  fputs_filtered (_("mask: "), file);
+  gdb_puts (_("mask: "), file);
   print_fpu_flags (file, status >> 16);
   /* i18n: [floating point unit] flags */
-  fputs_filtered (_("flags: "), file);
+  gdb_puts (_("flags: "), file);
   print_fpu_flags (file, status);
 }
 
@@ -3884,12 +4919,15 @@ arm_print_float_info (struct gdbarch *gd
 static struct type *
 arm_ext_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   if (!tdep->arm_ext_type)
-    tdep->arm_ext_type
-      = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
-			 floatformats_arm_ext);
+    {
+      type_allocator alloc (gdbarch);
+      tdep->arm_ext_type
+	= init_float_type (alloc, -1, "builtin_type_arm_ext",
+			   floatformats_arm_ext);
+    }
 
   return tdep->arm_ext_type;
 }
@@ -3897,7 +4935,7 @@ arm_ext_type (struct gdbarch *gdbarch)
 static struct type *
 arm_neon_double_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   if (tdep->neon_double_type == NULL)
     {
@@ -3918,8 +4956,8 @@ arm_neon_double_type (struct gdbarch *gd
       elem = builtin_type (gdbarch)->builtin_double;
       append_composite_type_field (t, "f64", elem);
 
-      TYPE_VECTOR (t) = 1;
-      TYPE_NAME (t) = "neon_d";
+      t->set_is_vector (true);
+      t->set_name ("neon_d");
       tdep->neon_double_type = t;
     }
 
@@ -3936,7 +4974,7 @@ arm_neon_double_type (struct gdbarch *gd
 static struct type *
 arm_neon_quad_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   if (tdep->neon_quad_type == NULL)
     {
@@ -3957,30 +4995,112 @@ arm_neon_quad_type (struct gdbarch *gdba
       elem = builtin_type (gdbarch)->builtin_double;
       append_composite_type_field (t, "f64", init_vector_type (elem, 2));
 
-      TYPE_VECTOR (t) = 1;
-      TYPE_NAME (t) = "neon_q";
+      t->set_is_vector (true);
+      t->set_name ("neon_q");
       tdep->neon_quad_type = t;
     }
 
   return tdep->neon_quad_type;
 }
 
+/* Return true if REGNUM is a Q pseudo register.  Return false
+   otherwise.
+
+   REGNUM is the raw register number and not a pseudo-relative register
+   number.  */
+
+static bool
+is_q_pseudo (struct gdbarch *gdbarch, int regnum)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  /* Q pseudo registers are available for both NEON (Q0~Q15) and
+     MVE (Q0~Q7) features.  */
+  if (tdep->have_q_pseudos
+      && regnum >= tdep->q_pseudo_base
+      && regnum < (tdep->q_pseudo_base + tdep->q_pseudo_count))
+    return true;
+
+  return false;
+}
+
+/* Return true if REGNUM is a VFP S pseudo register.  Return false
+   otherwise.
+
+   REGNUM is the raw register number and not a pseudo-relative register
+   number.  */
+
+static bool
+is_s_pseudo (struct gdbarch *gdbarch, int regnum)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (tdep->have_s_pseudos
+      && regnum >= tdep->s_pseudo_base
+      && regnum < (tdep->s_pseudo_base + tdep->s_pseudo_count))
+    return true;
+
+  return false;
+}
+
+/* Return true if REGNUM is a MVE pseudo register (P0).  Return false
+   otherwise.
+
+   REGNUM is the raw register number and not a pseudo-relative register
+   number.  */
+
+static bool
+is_mve_pseudo (struct gdbarch *gdbarch, int regnum)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (tdep->have_mve
+      && regnum >= tdep->mve_pseudo_base
+      && regnum < tdep->mve_pseudo_base + tdep->mve_pseudo_count)
+    return true;
+
+  return false;
+}
+
+/* Return true if REGNUM is a PACBTI pseudo register (ra_auth_code).  Return
+   false otherwise.
+
+   REGNUM is the raw register number and not a pseudo-relative register
+   number.  */
+
+static bool
+is_pacbti_pseudo (struct gdbarch *gdbarch, int regnum)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (tdep->have_pacbti
+      && regnum >= tdep->pacbti_pseudo_base
+      && regnum < tdep->pacbti_pseudo_base + tdep->pacbti_pseudo_count)
+    return true;
+
+  return false;
+}
+
 /* Return the GDB type object for the "standard" data type of data in
    register N.  */
 
 static struct type *
 arm_register_type (struct gdbarch *gdbarch, int regnum)
 {
-  int num_regs = gdbarch_num_regs (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
-  if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
-      && regnum >= num_regs && regnum < num_regs + 32)
+  if (is_s_pseudo (gdbarch, regnum))
     return builtin_type (gdbarch)->builtin_float;
 
-  if (gdbarch_tdep (gdbarch)->have_neon_pseudos
-      && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
+  if (is_q_pseudo (gdbarch, regnum))
     return arm_neon_quad_type (gdbarch);
 
+  if (is_mve_pseudo (gdbarch, regnum))
+    return builtin_type (gdbarch)->builtin_int16;
+
+  if (is_pacbti_pseudo (gdbarch, regnum))
+    return builtin_type (gdbarch)->builtin_uint32;
+
   /* If the target description has register information, we are only
      in this function so that we can override the types of
      double-precision registers for NEON.  */
@@ -3989,8 +5109,8 @@ arm_register_type (struct gdbarch *gdbar
       struct type *t = tdesc_register_type (gdbarch, regnum);
 
       if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
-	  && TYPE_CODE (t) == TYPE_CODE_FLT
-	  && gdbarch_tdep (gdbarch)->have_neon)
+	  && t->code () == TYPE_CODE_FLT
+	  && tdep->have_neon)
 	return arm_neon_double_type (gdbarch);
       else
 	return t;
@@ -3998,7 +5118,7 @@ arm_register_type (struct gdbarch *gdbar
 
   if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
     {
-      if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
+      if (!tdep->have_fpa_registers)
 	return builtin_type (gdbarch)->builtin_void;
 
       return arm_ext_type (gdbarch);
@@ -4043,6 +5163,17 @@ arm_dwarf_reg_to_regnum (struct gdbarch
   if (reg >= 112 && reg <= 127)
     return ARM_WR0_REGNUM + reg - 112;
 
+  /* PACBTI register containing the Pointer Authentication Code.  */
+  if (reg == ARM_DWARF_RA_AUTH_CODE)
+    {
+      arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+      if (tdep->have_pacbti)
+	return tdep->pacbti_pseudo_base;
+
+      return -1;
+    }
+
   if (reg >= 192 && reg <= 199)
     return ARM_WC0_REGNUM + reg - 192;
 
@@ -4105,7 +5236,40 @@ arm_register_sim_regno (struct gdbarch *
     return SIM_ARM_FPS_REGNUM + reg;
   reg -= NUM_SREGS;
 
-  internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
+  internal_error (_("Bad REGNUM %d"), regnum);
+}
+
+static const unsigned char op_lit0 = DW_OP_lit0;
+
+static void
+arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
+			   struct dwarf2_frame_state_reg *reg,
+			   frame_info_ptr this_frame)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (is_pacbti_pseudo (gdbarch, regnum))
+    {
+      /* Initialize RA_AUTH_CODE to zero.  */
+      reg->how = DWARF2_FRAME_REG_SAVED_VAL_EXP;
+      reg->loc.exp.start = &op_lit0;
+      reg->loc.exp.len = 1;
+      return;
+    }
+
+  if (regnum == ARM_PC_REGNUM || regnum == ARM_PS_REGNUM)
+    {
+      reg->how = DWARF2_FRAME_REG_FN;
+      reg->loc.fn = arm_dwarf2_prev_register;
+    }
+  else if (regnum == ARM_SP_REGNUM)
+    reg->how = DWARF2_FRAME_REG_CFA;
+  else if (arm_is_alternative_sp_register (tdep, regnum))
+    {
+      /* Handle the alternative SP registers on Cortex-M.  */
+      reg->how = DWARF2_FRAME_REG_FN;
+      reg->loc.fn = arm_dwarf2_prev_register;
+    }
 }
 
 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
@@ -4152,9 +5316,10 @@ arm_adjust_breakpoint_address (struct gd
   int buf_len;
   enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
   int i, any, last_it, last_it_count;
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   /* If we are using BKPT breakpoints, none of this is necessary.  */
-  if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
+  if (tdep->thumb2_breakpoint == NULL)
     return bpaddr;
 
   /* ARM mode does not have this problem.  */
@@ -4172,9 +5337,12 @@ arm_adjust_breakpoint_address (struct gd
 
   bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
 
-  if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
-      && func_start > boundary)
-    boundary = func_start;
+  if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL))
+    {
+      func_start = gdbarch_addr_bits_remove (gdbarch, func_start);
+      if (func_start > boundary)
+	boundary = func_start;
+    }
 
   /* Search for a candidate IT instruction.  We have to do some fancy
      footwork to distinguish a real IT instruction from the second
@@ -4326,7 +5494,7 @@ arm_adjust_breakpoint_address (struct gd
    location.  */
 
 ULONGEST
-displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
+displaced_read_reg (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
 		    int regno)
 {
   ULONGEST ret;
@@ -4345,17 +5513,17 @@ displaced_read_reg (struct regcache *reg
       else
 	from += 4;
 
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
-			    (unsigned long) from);
+      displaced_debug_printf ("read pc value %.8lx",
+			      (unsigned long) from);
       return (ULONGEST) from;
     }
   else
     {
       regcache_cooked_read_unsigned (regs, regno, &ret);
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
-			    regno, (unsigned long) ret);
+
+      displaced_debug_printf ("read r%d value %.8lx",
+			      regno, (unsigned long) ret);
+
       return ret;
     }
 }
@@ -4374,7 +5542,7 @@ displaced_in_arm_mode (struct regcache *
 /* Write to the PC as from a branch instruction.  */
 
 static void
-branch_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
+branch_write_pc (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
 		 ULONGEST val)
 {
   if (!dsc->is_thumb)
@@ -4420,7 +5588,7 @@ bx_write_pc (struct regcache *regs, ULON
 /* Write to the PC as if from a load instruction.  */
 
 static void
-load_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
+load_write_pc (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
 	       ULONGEST val)
 {
   if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
@@ -4432,7 +5600,7 @@ load_write_pc (struct regcache *regs, ar
 /* Write to the PC as if from an ALU instruction.  */
 
 static void
-alu_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
+alu_write_pc (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
 	      ULONGEST val)
 {
   if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb)
@@ -4446,14 +5614,13 @@ alu_write_pc (struct regcache *regs, arm
    this is controlled by the WRITE_PC argument.  */
 
 void
-displaced_write_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
+displaced_write_reg (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
 		     int regno, ULONGEST val, enum pc_write_style write_pc)
 {
   if (regno == ARM_PC_REGNUM)
     {
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
-			    (unsigned long) val);
+      displaced_debug_printf ("writing pc %.8lx", (unsigned long) val);
+
       switch (write_pc)
 	{
 	case BRANCH_WRITE_PC:
@@ -4462,15 +5629,15 @@ displaced_write_reg (struct regcache *re
 
 	case BX_WRITE_PC:
 	  bx_write_pc (regs, val);
-  	  break;
+	  break;
 
 	case LOAD_WRITE_PC:
 	  load_write_pc (regs, dsc, val);
-  	  break;
+	  break;
 
 	case ALU_WRITE_PC:
 	  alu_write_pc (regs, dsc, val);
-  	  break;
+	  break;
 
 	case CANNOT_WRITE_PC:
 	  warning (_("Instruction wrote to PC in an unexpected way when "
@@ -4478,17 +5645,15 @@ displaced_write_reg (struct regcache *re
 	  break;
 
 	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("Invalid argument to displaced_write_reg"));
+	  internal_error (_("Invalid argument to displaced_write_reg"));
 	}
 
       dsc->wrote_to_pc = 1;
     }
   else
     {
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
-			    regno, (unsigned long) val);
+      displaced_debug_printf ("writing r%d value %.8lx",
+			      regno, (unsigned long) val);
       regcache_cooked_write_unsigned (regs, regno, val);
     }
 }
@@ -4529,13 +5694,11 @@ insn_references_pc (uint32_t insn, uint3
    matter what address they are executed at: in those cases, use this.  */
 
 static int
-arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn,
-		     const char *iname, arm_displaced_step_closure *dsc)
+arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn, const char *iname,
+		     arm_displaced_step_copy_insn_closure *dsc)
 {
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
-			"opcode/class '%s' unmodified\n", (unsigned long) insn,
-			iname);
+  displaced_debug_printf ("copying insn %.8lx, opcode/class '%s' unmodified",
+			  (unsigned long) insn, iname);
 
   dsc->modinsn[0] = insn;
 
@@ -4545,12 +5708,10 @@ arm_copy_unmodified (struct gdbarch *gdb
 static int
 thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1,
 			     uint16_t insn2, const char *iname,
-			     arm_displaced_step_closure *dsc)
+			     arm_displaced_step_copy_insn_closure *dsc)
 {
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x %.4x, "
-			"opcode/class '%s' unmodified\n", insn1, insn2,
-			iname);
+  displaced_debug_printf ("copying insn %.4x %.4x, opcode/class '%s' "
+			  "unmodified", insn1, insn2, iname);
 
   dsc->modinsn[0] = insn1;
   dsc->modinsn[1] = insn2;
@@ -4564,12 +5725,10 @@ thumb_copy_unmodified_32bit (struct gdba
 static int
 thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn,
 			     const char *iname,
-			     arm_displaced_step_closure *dsc)
+			     arm_displaced_step_copy_insn_closure *dsc)
 {
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x, "
-			"opcode/class '%s' unmodified\n", insn,
-			iname);
+  displaced_debug_printf ("copying insn %.4x, opcode/class '%s' unmodified",
+			  insn, iname);
 
   dsc->modinsn[0] = insn;
 
@@ -4579,8 +5738,8 @@ thumb_copy_unmodified_16bit (struct gdba
 /* Preload instructions with immediate offset.  */
 
 static void
-cleanup_preload (struct gdbarch *gdbarch,
-		 struct regcache *regs, arm_displaced_step_closure *dsc)
+cleanup_preload (struct gdbarch *gdbarch, regcache *regs,
+		 arm_displaced_step_copy_insn_closure *dsc)
 {
   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
   if (!dsc->u.preload.immed)
@@ -4589,7 +5748,7 @@ cleanup_preload (struct gdbarch *gdbarch
 
 static void
 install_preload (struct gdbarch *gdbarch, struct regcache *regs,
-		 arm_displaced_step_closure *dsc, unsigned int rn)
+		 arm_displaced_step_copy_insn_closure *dsc, unsigned int rn)
 {
   ULONGEST rn_val;
   /* Preload instructions:
@@ -4608,16 +5767,14 @@ install_preload (struct gdbarch *gdbarch
 
 static int
 arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
-		  arm_displaced_step_closure *dsc)
+		  arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int rn = bits (insn, 16, 19);
 
   if (!insn_references_pc (insn, 0x000f0000ul))
     return arm_copy_unmodified (gdbarch, insn, "preload", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
-			(unsigned long) insn);
+  displaced_debug_printf ("copying preload insn %.8lx", (unsigned long) insn);
 
   dsc->modinsn[0] = insn & 0xfff0ffff;
 
@@ -4628,7 +5785,7 @@ arm_copy_preload (struct gdbarch *gdbarc
 
 static int
 thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
-		     struct regcache *regs, arm_displaced_step_closure *dsc)
+		     regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int rn = bits (insn1, 0, 3);
   unsigned int u_bit = bit (insn1, 7);
@@ -4640,11 +5797,9 @@ thumb2_copy_preload (struct gdbarch *gdb
 
   /* PC is only allowed to use in PLI (immediate,literal) Encoding T3, and
      PLD (literal) Encoding T1.  */
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying pld/pli pc (0x%x) %c imm12 %.4x\n",
-			(unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
-			imm12);
+  displaced_debug_printf ("copying pld/pli pc (0x%x) %c imm12 %.4x",
+			  (unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
+			  imm12);
 
   if (!u_bit)
     imm12 = -1 * imm12;
@@ -4678,7 +5833,7 @@ thumb2_copy_preload (struct gdbarch *gdb
 
 static void
 install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs,
-		    arm_displaced_step_closure *dsc, unsigned int rn,
+		    arm_displaced_step_copy_insn_closure *dsc, unsigned int rn,
 		    unsigned int rm)
 {
   ULONGEST rn_val, rm_val;
@@ -4703,7 +5858,7 @@ install_preload_reg(struct gdbarch *gdba
 static int
 arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn,
 		      struct regcache *regs,
-		      arm_displaced_step_closure *dsc)
+		      arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int rn = bits (insn, 16, 19);
   unsigned int rm = bits (insn, 0, 3);
@@ -4712,9 +5867,8 @@ arm_copy_preload_reg (struct gdbarch *gd
   if (!insn_references_pc (insn, 0x000f000ful))
     return arm_copy_unmodified (gdbarch, insn, "preload reg", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
-			(unsigned long) insn);
+  displaced_debug_printf ("copying preload insn %.8lx",
+			  (unsigned long) insn);
 
   dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
 
@@ -4727,7 +5881,7 @@ arm_copy_preload_reg (struct gdbarch *gd
 static void
 cleanup_copro_load_store (struct gdbarch *gdbarch,
 			  struct regcache *regs,
-			  arm_displaced_step_closure *dsc)
+			  arm_displaced_step_copy_insn_closure *dsc)
 {
   ULONGEST rn_val = displaced_read_reg (regs, dsc, 0);
 
@@ -4739,7 +5893,7 @@ cleanup_copro_load_store (struct gdbarch
 
 static void
 install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs,
-			  arm_displaced_step_closure *dsc,
+			  arm_displaced_step_copy_insn_closure *dsc,
 			  int writeback, unsigned int rn)
 {
   ULONGEST rn_val;
@@ -4767,16 +5921,15 @@ install_copro_load_store (struct gdbarch
 static int
 arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
 			   struct regcache *regs,
-			   arm_displaced_step_closure *dsc)
+			   arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int rn = bits (insn, 16, 19);
 
   if (!insn_references_pc (insn, 0x000f0000ul))
     return arm_copy_unmodified (gdbarch, insn, "copro load/store", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
-			"load/store insn %.8lx\n", (unsigned long) insn);
+  displaced_debug_printf ("copying coprocessor load/store insn %.8lx",
+			  (unsigned long) insn);
 
   dsc->modinsn[0] = insn & 0xfff0ffff;
 
@@ -4788,7 +5941,7 @@ arm_copy_copro_load_store (struct gdbarc
 static int
 thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1,
 			      uint16_t insn2, struct regcache *regs,
-			      arm_displaced_step_closure *dsc)
+			      arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int rn = bits (insn1, 0, 3);
 
@@ -4796,9 +5949,8 @@ thumb2_copy_copro_load_store (struct gdb
     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
 					"copro load/store", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
-			"load/store insn %.4x%.4x\n", insn1, insn2);
+  displaced_debug_printf ("copying coprocessor load/store insn %.4x%.4x",
+			  insn1, insn2);
 
   dsc->modinsn[0] = insn1 & 0xfff0;
   dsc->modinsn[1] = insn2;
@@ -4816,7 +5968,7 @@ thumb2_copy_copro_load_store (struct gdb
 
 static void
 cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
-		arm_displaced_step_closure *dsc)
+		arm_displaced_step_copy_insn_closure *dsc)
 {
   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
   int branch_taken = condition_true (dsc->u.branch.cond, status);
@@ -4847,7 +5999,7 @@ cleanup_branch (struct gdbarch *gdbarch,
 
 static void
 install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs,
-		  arm_displaced_step_closure *dsc,
+		  arm_displaced_step_copy_insn_closure *dsc,
 		  unsigned int cond, int exchange, int link, long offset)
 {
   /* Implement "BL<cond> <label>" as:
@@ -4876,17 +6028,16 @@ install_b_bl_blx (struct gdbarch *gdbarc
 }
 static int
 arm_copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
-		   struct regcache *regs, arm_displaced_step_closure *dsc)
+		   regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int cond = bits (insn, 28, 31);
   int exchange = (cond == 0xf);
   int link = exchange || bit (insn, 24);
   long offset;
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
-			"%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
-			(unsigned long) insn);
+  displaced_debug_printf ("copying %s immediate insn %.8lx",
+			  (exchange) ? "blx" : (link) ? "bl" : "b",
+			  (unsigned long) insn);
   if (exchange)
     /* For BLX, set bit 0 of the destination.  The cleanup_branch function will
        then arrange the switch into Thumb mode.  */
@@ -4906,7 +6057,7 @@ arm_copy_b_bl_blx (struct gdbarch *gdbar
 static int
 thumb2_copy_b_bl_blx (struct gdbarch *gdbarch, uint16_t insn1,
 		      uint16_t insn2, struct regcache *regs,
-		      arm_displaced_step_closure *dsc)
+		      arm_displaced_step_copy_insn_closure *dsc)
 {
   int link = bit (insn2, 14);
   int exchange = link && !bit (insn2, 12);
@@ -4946,11 +6097,9 @@ thumb2_copy_b_bl_blx (struct gdbarch *gd
 	(bits (insn2, 1, 10) << 2) : (bits (insn2, 0, 10) << 1);
     }
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying %s insn "
-			"%.4x %.4x with offset %.8lx\n",
-			link ? (exchange) ? "blx" : "bl" : "b",
-			insn1, insn2, offset);
+  displaced_debug_printf ("copying %s insn %.4x %.4x with offset %.8lx",
+			  link ? (exchange) ? "blx" : "bl" : "b",
+			  insn1, insn2, offset);
 
   dsc->modinsn[0] = THUMB_NOP;
 
@@ -4961,7 +6110,7 @@ thumb2_copy_b_bl_blx (struct gdbarch *gd
 /* Copy B Thumb instructions.  */
 static int
 thumb_copy_b (struct gdbarch *gdbarch, uint16_t insn,
-	      arm_displaced_step_closure *dsc)
+	      arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int cond = 0;
   int offset = 0;
@@ -4980,10 +6129,8 @@ thumb_copy_b (struct gdbarch *gdbarch, u
       cond = INST_AL;
     }
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying b immediate insn %.4x "
-			"with offset %d\n", insn, offset);
+  displaced_debug_printf ("copying b immediate insn %.4x with offset %d",
+			  insn, offset);
 
   dsc->u.branch.cond = cond;
   dsc->u.branch.link = 0;
@@ -5001,7 +6148,7 @@ thumb_copy_b (struct gdbarch *gdbarch, u
 
 static void
 install_bx_blx_reg (struct gdbarch *gdbarch, struct regcache *regs,
-		    arm_displaced_step_closure *dsc, int link,
+		    arm_displaced_step_copy_insn_closure *dsc, int link,
 		    unsigned int cond, unsigned int rm)
 {
   /* Implement {BX,BLX}<cond> <reg>" as:
@@ -5024,7 +6171,7 @@ install_bx_blx_reg (struct gdbarch *gdba
 
 static int
 arm_copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
-		     struct regcache *regs, arm_displaced_step_closure *dsc)
+		     regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int cond = bits (insn, 28, 31);
   /* BX:  x12xxx1x
@@ -5032,9 +6179,7 @@ arm_copy_bx_blx_reg (struct gdbarch *gdb
   int link = bit (insn, 5);
   unsigned int rm = bits (insn, 0, 3);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx",
-			(unsigned long) insn);
+  displaced_debug_printf ("copying insn %.8lx", (unsigned long) insn);
 
   dsc->modinsn[0] = ARM_NOP;
 
@@ -5045,14 +6190,12 @@ arm_copy_bx_blx_reg (struct gdbarch *gdb
 static int
 thumb_copy_bx_blx_reg (struct gdbarch *gdbarch, uint16_t insn,
 		       struct regcache *regs,
-		       arm_displaced_step_closure *dsc)
+		       arm_displaced_step_copy_insn_closure *dsc)
 {
   int link = bit (insn, 7);
   unsigned int rm = bits (insn, 3, 6);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x",
-			(unsigned short) insn);
+  displaced_debug_printf ("copying insn %.4x", (unsigned short) insn);
 
   dsc->modinsn[0] = THUMB_NOP;
 
@@ -5066,7 +6209,7 @@ thumb_copy_bx_blx_reg (struct gdbarch *g
 
 static void
 cleanup_alu_imm (struct gdbarch *gdbarch,
-		 struct regcache *regs, arm_displaced_step_closure *dsc)
+		 regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
 {
   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
@@ -5076,7 +6219,7 @@ cleanup_alu_imm (struct gdbarch *gdbarch
 
 static int
 arm_copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
-		  arm_displaced_step_closure *dsc)
+		  arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int rn = bits (insn, 16, 19);
   unsigned int rd = bits (insn, 12, 15);
@@ -5087,10 +6230,9 @@ arm_copy_alu_imm (struct gdbarch *gdbarc
   if (!insn_references_pc (insn, 0x000ff000ul))
     return arm_copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
-			"%.8lx\n", is_mov ? "move" : "ALU",
-			(unsigned long) insn);
+  displaced_debug_printf ("copying immediate %s insn %.8lx",
+			  is_mov ? "move" : "ALU",
+			  (unsigned long) insn);
 
   /* Instruction is of form:
 
@@ -5125,7 +6267,7 @@ arm_copy_alu_imm (struct gdbarch *gdbarc
 static int
 thumb2_copy_alu_imm (struct gdbarch *gdbarch, uint16_t insn1,
 		     uint16_t insn2, struct regcache *regs,
-		     arm_displaced_step_closure *dsc)
+		     arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int op = bits (insn1, 5, 8);
   unsigned int rn, rm, rd;
@@ -5141,9 +6283,7 @@ thumb2_copy_alu_imm (struct gdbarch *gdb
   if (rm != ARM_PC_REGNUM && rd != ARM_PC_REGNUM)
     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ALU imm", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.4x%.4x\n",
-			"ALU", insn1, insn2);
+  displaced_debug_printf ("copying reg %s insn %.4x%.4x", "ALU", insn1, insn2);
 
   /* Instruction is of form:
 
@@ -5178,7 +6318,7 @@ thumb2_copy_alu_imm (struct gdbarch *gdb
 
 static void
 cleanup_alu_reg (struct gdbarch *gdbarch,
-		 struct regcache *regs, arm_displaced_step_closure *dsc)
+		 regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
 {
   ULONGEST rd_val;
   int i;
@@ -5193,7 +6333,7 @@ cleanup_alu_reg (struct gdbarch *gdbarch
 
 static void
 install_alu_reg (struct gdbarch *gdbarch, struct regcache *regs,
-		 arm_displaced_step_closure *dsc,
+		 arm_displaced_step_copy_insn_closure *dsc,
 		 unsigned int rd, unsigned int rn, unsigned int rm)
 {
   ULONGEST rd_val, rn_val, rm_val;
@@ -5226,7 +6366,7 @@ install_alu_reg (struct gdbarch *gdbarch
 
 static int
 arm_copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
-		  arm_displaced_step_closure *dsc)
+		  arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int op = bits (insn, 21, 24);
   int is_mov = (op == 0xd);
@@ -5234,9 +6374,8 @@ arm_copy_alu_reg (struct gdbarch *gdbarc
   if (!insn_references_pc (insn, 0x000ff00ful))
     return arm_copy_unmodified (gdbarch, insn, "ALU reg", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
-			is_mov ? "move" : "ALU", (unsigned long) insn);
+  displaced_debug_printf ("copying reg %s insn %.8lx",
+			  is_mov ? "move" : "ALU", (unsigned long) insn);
 
   if (is_mov)
     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
@@ -5251,7 +6390,7 @@ arm_copy_alu_reg (struct gdbarch *gdbarc
 static int
 thumb_copy_alu_reg (struct gdbarch *gdbarch, uint16_t insn,
 		    struct regcache *regs,
-		    arm_displaced_step_closure *dsc)
+		    arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned rm, rd;
 
@@ -5261,9 +6400,7 @@ thumb_copy_alu_reg (struct gdbarch *gdba
   if (rd != ARM_PC_REGNUM && rm != ARM_PC_REGNUM)
     return thumb_copy_unmodified_16bit (gdbarch, insn, "ALU reg", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying ALU reg insn %.4x\n",
-			(unsigned short) insn);
+  displaced_debug_printf ("copying ALU reg insn %.4x", (unsigned short) insn);
 
   dsc->modinsn[0] = ((insn & 0xff00) | 0x10);
 
@@ -5277,7 +6414,7 @@ thumb_copy_alu_reg (struct gdbarch *gdba
 static void
 cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
 			 struct regcache *regs,
-			 arm_displaced_step_closure *dsc)
+			 arm_displaced_step_copy_insn_closure *dsc)
 {
   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
   int i;
@@ -5290,7 +6427,7 @@ cleanup_alu_shifted_reg (struct gdbarch
 
 static void
 install_alu_shifted_reg (struct gdbarch *gdbarch, struct regcache *regs,
-			 arm_displaced_step_closure *dsc,
+			 arm_displaced_step_copy_insn_closure *dsc,
 			 unsigned int rd, unsigned int rn, unsigned int rm,
 			 unsigned rs)
 {
@@ -5329,7 +6466,7 @@ install_alu_shifted_reg (struct gdbarch
 static int
 arm_copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
 			  struct regcache *regs,
-			  arm_displaced_step_closure *dsc)
+			  arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int op = bits (insn, 21, 24);
   int is_mov = (op == 0xd);
@@ -5338,10 +6475,9 @@ arm_copy_alu_shifted_reg (struct gdbarch
   if (!insn_references_pc (insn, 0x000fff0ful))
     return arm_copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
-			"%.8lx\n", is_mov ? "move" : "ALU",
-			(unsigned long) insn);
+  displaced_debug_printf ("copying shifted reg %s insn %.8lx",
+			  is_mov ? "move" : "ALU",
+			  (unsigned long) insn);
 
   rn = bits (insn, 16, 19);
   rm = bits (insn, 0, 3);
@@ -5362,7 +6498,7 @@ arm_copy_alu_shifted_reg (struct gdbarch
 
 static void
 cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
-	      arm_displaced_step_closure *dsc)
+	      arm_displaced_step_copy_insn_closure *dsc)
 {
   ULONGEST rt_val, rt_val2 = 0, rn_val;
 
@@ -5391,7 +6527,7 @@ cleanup_load (struct gdbarch *gdbarch, s
 
 static void
 cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
-	       arm_displaced_step_closure *dsc)
+	       arm_displaced_step_copy_insn_closure *dsc)
 {
   ULONGEST rn_val = displaced_read_reg (regs, dsc, 2);
 
@@ -5414,7 +6550,7 @@ cleanup_store (struct gdbarch *gdbarch,
 
 static int
 arm_copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unprivileged,
-		      struct regcache *regs, arm_displaced_step_closure *dsc)
+		      regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int op1 = bits (insn, 20, 24);
   unsigned int op2 = bits (insn, 5, 6);
@@ -5430,16 +6566,14 @@ arm_copy_extra_ld_st (struct gdbarch *gd
   if (!insn_references_pc (insn, 0x000ff00ful))
     return arm_copy_unmodified (gdbarch, insn, "extra load/store", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
-			"insn %.8lx\n", unprivileged ? "unprivileged " : "",
-			(unsigned long) insn);
+  displaced_debug_printf ("copying %sextra load/store insn %.8lx",
+			  unprivileged ? "unprivileged " : "",
+			  (unsigned long) insn);
 
   opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
 
   if (opcode < 0)
-    internal_error (__FILE__, __LINE__,
-		    _("copy_extra_ld_st: instruction decode error"));
+    internal_error (_("copy_extra_ld_st: instruction decode error"));
 
   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
@@ -5488,7 +6622,7 @@ arm_copy_extra_ld_st (struct gdbarch *gd
 
 static void
 install_load_store (struct gdbarch *gdbarch, struct regcache *regs,
-		    arm_displaced_step_closure *dsc, int load,
+		    arm_displaced_step_copy_insn_closure *dsc, int load,
 		    int immed, int writeback, int size, int usermode,
 		    int rt, int rm, int rn)
 {
@@ -5525,11 +6659,11 @@ install_load_store (struct gdbarch *gdba
      Insn1: push {pc} Write address of STR instruction + offset on stack
      Insn2: pop  {r4} Read it back from stack, r4 = addr(Insn1) + offset
      Insn3: sub r4, r4, pc   r4 = addr(Insn1) + offset - pc
-                                = addr(Insn1) + offset - addr(Insn3) - 8
-                                = offset - 16
+				= addr(Insn1) + offset - addr(Insn3) - 8
+				= offset - 16
      Insn4: add r4, r4, #8   r4 = offset - 8
      Insn5: add r0, r0, r4   r0 = from + 8 + offset - 8
-                                = from + offset
+				= from + offset
      Insn6: str r0, [r2, #imm] (or str r0, [r2, r3])
 
      Otherwise we don't know what value to write for PC, since the offset is
@@ -5544,18 +6678,16 @@ install_load_store (struct gdbarch *gdba
 static int
 thumb2_copy_load_literal (struct gdbarch *gdbarch, uint16_t insn1,
 			  uint16_t insn2, struct regcache *regs,
-			  arm_displaced_step_closure *dsc, int size)
+			  arm_displaced_step_copy_insn_closure *dsc, int size)
 {
   unsigned int u_bit = bit (insn1, 7);
   unsigned int rt = bits (insn2, 12, 15);
   int imm12 = bits (insn2, 0, 11);
   ULONGEST pc_val;
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying ldr pc (0x%x) R%d %c imm12 %.4x\n",
-			(unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
-			imm12);
+  displaced_debug_printf ("copying ldr pc (0x%x) R%d %c imm12 %.4x",
+			  (unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
+			  imm12);
 
   if (!u_bit)
     imm12 = -1 * imm12;
@@ -5600,7 +6732,7 @@ thumb2_copy_load_literal (struct gdbarch
 static int
 thumb2_copy_load_reg_imm (struct gdbarch *gdbarch, uint16_t insn1,
 			  uint16_t insn2, struct regcache *regs,
-			  arm_displaced_step_closure *dsc,
+			  arm_displaced_step_copy_insn_closure *dsc,
 			  int writeback, int immed)
 {
   unsigned int rt = bits (insn2, 12, 15);
@@ -5613,10 +6745,8 @@ thumb2_copy_load_reg_imm (struct gdbarch
     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "load",
 					dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying ldr r%d [r%d] insn %.4x%.4x\n",
-			 rt, rn, insn1, insn2);
+  displaced_debug_printf ("copying ldr r%d [r%d] insn %.4x%.4x",
+			  rt, rn, insn1, insn2);
 
   install_load_store (gdbarch, regs, dsc, 1, immed, writeback, 4,
 		      0, rt, rm, rn);
@@ -5649,7 +6779,7 @@ thumb2_copy_load_reg_imm (struct gdbarch
 static int
 arm_copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
 			    struct regcache *regs,
-			    arm_displaced_step_closure *dsc,
+			    arm_displaced_step_copy_insn_closure *dsc,
 			    int load, int size, int usermode)
 {
   int immed = !bit (insn, 25);
@@ -5661,13 +6791,12 @@ arm_copy_ldr_str_ldrb_strb (struct gdbar
   if (!insn_references_pc (insn, 0x000ff00ful))
     return arm_copy_unmodified (gdbarch, insn, "load/store", dsc);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying %s%s r%d [r%d] insn %.8lx\n",
-			load ? (size == 1 ? "ldrb" : "ldr")
-			     : (size == 1 ? "strb" : "str"), usermode ? "t" : "",
-			rt, rn,
-			(unsigned long) insn);
+  displaced_debug_printf ("copying %s%s r%d [r%d] insn %.8lx",
+			  load ? (size == 1 ? "ldrb" : "ldr")
+			       : (size == 1 ? "strb" : "str"),
+			  usermode ? "t" : "",
+			  rt, rn,
+			  (unsigned long) insn);
 
   install_load_store (gdbarch, regs, dsc, load, immed, writeback, size,
 		      usermode, rt, rm, rn);
@@ -5733,7 +6862,7 @@ arm_copy_ldr_str_ldrb_strb (struct gdbar
 
 static void
 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
-			arm_displaced_step_closure *dsc)
+			arm_displaced_step_copy_insn_closure *dsc)
 {
   int inc = dsc->u.block.increment;
   int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
@@ -5758,11 +6887,10 @@ cleanup_block_load_all (struct gdbarch *
   /* We don't handle any stores here for now.  */
   gdb_assert (dsc->u.block.load != 0);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
-			"%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
-			dsc->u.block.increment ? "inc" : "dec",
-			dsc->u.block.before ? "before" : "after");
+  displaced_debug_printf ("emulating block transfer: %s %s %s",
+			  dsc->u.block.load ? "ldm" : "stm",
+			  dsc->u.block.increment ? "inc" : "dec",
+			  dsc->u.block.before ? "before" : "after");
 
   while (regmask)
     {
@@ -5794,11 +6922,12 @@ cleanup_block_load_all (struct gdbarch *
 
 static void
 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
-			arm_displaced_step_closure *dsc)
+			arm_displaced_step_copy_insn_closure *dsc)
 {
   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
   int store_executed = condition_true (dsc->u.block.cond, status);
-  CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
+  CORE_ADDR pc_stored_at, transferred_regs
+    = count_one_bits (dsc->u.block.regmask);
   CORE_ADDR stm_insn_addr;
   uint32_t pc_val;
   long offset;
@@ -5827,9 +6956,8 @@ cleanup_block_store_pc (struct gdbarch *
   stm_insn_addr = dsc->scratch_base;
   offset = pc_val - stm_insn_addr;
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
-			"STM instruction\n", offset);
+  displaced_debug_printf ("detected PC offset %.8lx for STM instruction",
+			  offset);
 
   /* Rewrite the stored PC to the proper value for the non-displaced original
      instruction.  */
@@ -5845,12 +6973,12 @@ cleanup_block_store_pc (struct gdbarch *
 static void
 cleanup_block_load_pc (struct gdbarch *gdbarch,
 		       struct regcache *regs,
-		       arm_displaced_step_closure *dsc)
+		       arm_displaced_step_copy_insn_closure *dsc)
 {
   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
   int load_executed = condition_true (dsc->u.block.cond, status);
   unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
-  unsigned int regs_loaded = bitcount (mask);
+  unsigned int regs_loaded = count_one_bits (mask);
   unsigned int num_to_shuffle = regs_loaded, clobbered;
 
   /* The method employed here will fail if the register list is fully populated
@@ -5872,15 +7000,12 @@ cleanup_block_load_pc (struct gdbarch *g
 	    {
 	      ULONGEST rval = displaced_read_reg (regs, dsc, read_reg);
 	      displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
-	      if (debug_displaced)
-		fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
-				    "loaded register r%d to r%d\n"), read_reg,
-				    write_reg);
-	    }
-	  else if (debug_displaced)
-	    fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
-				"r%d already in the right place\n"),
-				write_reg);
+	      displaced_debug_printf ("LDM: move loaded register r%d to r%d",
+				      read_reg, write_reg);
+	    }
+	  else
+	    displaced_debug_printf ("LDM: register r%d already in the right "
+				    "place", write_reg);
 
 	  clobbered &= ~(1 << write_reg);
 
@@ -5897,9 +7022,8 @@ cleanup_block_load_pc (struct gdbarch *g
 	{
 	  displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
 			       CANNOT_WRITE_PC);
-	  if (debug_displaced)
-	    fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
-				"clobbered register r%d\n"), write_reg);
+	  displaced_debug_printf ("LDM: restored clobbered register r%d",
+				  write_reg);
 	  clobbered &= ~(1 << write_reg);
 	}
     }
@@ -5925,7 +7049,7 @@ cleanup_block_load_pc (struct gdbarch *g
 static int
 arm_copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn,
 		     struct regcache *regs,
-		     arm_displaced_step_closure *dsc)
+		     arm_displaced_step_copy_insn_closure *dsc)
 {
   int load = bit (insn, 20);
   int user = bit (insn, 22);
@@ -5946,9 +7070,8 @@ arm_copy_block_xfer (struct gdbarch *gdb
       return arm_copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
     }
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
-			"%.8lx\n", (unsigned long) insn);
+  displaced_debug_printf ("copying block transfer insn %.8lx",
+			  (unsigned long) insn);
 
   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
   dsc->u.block.rn = rn;
@@ -5982,7 +7105,7 @@ arm_copy_block_xfer (struct gdbarch *gdb
 	     contiguous chunk r0...rX before doing the transfer, then shuffling
 	     registers into the correct places in the cleanup routine.  */
 	  unsigned int regmask = insn & 0xffff;
-	  unsigned int num_in_list = bitcount (regmask), new_regmask;
+	  unsigned int num_in_list = count_one_bits (regmask), new_regmask;
 	  unsigned int i;
 
 	  for (i = 0; i < num_in_list; i++)
@@ -6009,11 +7132,10 @@ arm_copy_block_xfer (struct gdbarch *gdb
 
 	  new_regmask = (1 << num_in_list) - 1;
 
-	  if (debug_displaced)
-	    fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
-				"{..., pc}: original reg list %.4x, modified "
-				"list %.4x\n"), rn, writeback ? "!" : "",
-				(int) insn & 0xffff, new_regmask);
+	  displaced_debug_printf ("LDM r%d%s, {..., pc}: original reg list "
+				  "%.4x, modified list %.4x",
+				  rn, writeback ? "!" : "",
+				  (int) insn & 0xffff, new_regmask);
 
 	  dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
 
@@ -6039,7 +7161,7 @@ arm_copy_block_xfer (struct gdbarch *gdb
 static int
 thumb2_copy_block_xfer (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
 			struct regcache *regs,
-			arm_displaced_step_closure *dsc)
+			arm_displaced_step_copy_insn_closure *dsc)
 {
   int rn = bits (insn1, 0, 3);
   int load = bit (insn1, 4);
@@ -6058,9 +7180,8 @@ thumb2_copy_block_xfer (struct gdbarch *
 					  "unpredictable ldm/stm", dsc);
     }
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
-			"%.4x%.4x\n", insn1, insn2);
+  displaced_debug_printf ("copying block transfer insn %.4x%.4x",
+			  insn1, insn2);
 
   /* Clear bit 13, since it should be always zero.  */
   dsc->u.block.regmask = (insn2 & 0xdfff);
@@ -6084,7 +7205,7 @@ thumb2_copy_block_xfer (struct gdbarch *
       else
 	{
 	  unsigned int regmask = dsc->u.block.regmask;
-	  unsigned int num_in_list = bitcount (regmask), new_regmask;
+	  unsigned int num_in_list = count_one_bits (regmask), new_regmask;
 	  unsigned int i;
 
 	  for (i = 0; i < num_in_list; i++)
@@ -6095,11 +7216,10 @@ thumb2_copy_block_xfer (struct gdbarch *
 
 	  new_regmask = (1 << num_in_list) - 1;
 
-	  if (debug_displaced)
-	    fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
-				"{..., pc}: original reg list %.4x, modified "
-				"list %.4x\n"), rn, writeback ? "!" : "",
-				(int) dsc->u.block.regmask, new_regmask);
+	  displaced_debug_printf ("LDM r%d%s, {..., pc}: original reg list "
+				  "%.4x, modified list %.4x",
+				  rn, writeback ? "!" : "",
+				  (int) dsc->u.block.regmask, new_regmask);
 
 	  dsc->modinsn[0] = insn1;
 	  dsc->modinsn[1] = (new_regmask & 0xffff);
@@ -6135,7 +7255,8 @@ CORE_ADDR
 arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
 				   CORE_ADDR val)
 {
-  return gdbarch_addr_bits_remove (self->regcache->arch (), val);
+  return gdbarch_addr_bits_remove
+    (gdb::checked_static_cast<regcache *> (self->regcache)->arch (), val);
 }
 
 /* Wrapper over syscall_next_pc for use in get_next_pcs.  */
@@ -6151,7 +7272,7 @@ arm_get_next_pcs_syscall_next_pc (struct
 int
 arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self)
 {
-  return arm_is_thumb (self->regcache);
+  return arm_is_thumb (gdb::checked_static_cast<regcache *> (self->regcache));
 }
 
 /* single_step() is called just before we want to resume the inferior,
@@ -6185,13 +7306,12 @@ arm_software_single_step (struct regcach
 
 static void
 cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
-	     arm_displaced_step_closure *dsc)
+	     arm_displaced_step_copy_insn_closure *dsc)
 {
   CORE_ADDR resume_addr = dsc->insn_addr + dsc->insn_size;
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
-			"%.8lx\n", (unsigned long) resume_addr);
+  displaced_debug_printf ("cleanup for svc, resume at %.8lx",
+			  (unsigned long) resume_addr);
 
   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
 }
@@ -6201,7 +7321,7 @@ cleanup_svc (struct gdbarch *gdbarch, st
 
 static int
 install_svc (struct gdbarch *gdbarch, struct regcache *regs,
-	     arm_displaced_step_closure *dsc)
+	     arm_displaced_step_copy_insn_closure *dsc)
 {
   /* Preparation: none.
      Insn: unmodified svc.
@@ -6223,12 +7343,11 @@ install_svc (struct gdbarch *gdbarch, st
 
 static int
 arm_copy_svc (struct gdbarch *gdbarch, uint32_t insn,
-	      struct regcache *regs, arm_displaced_step_closure *dsc)
+	      regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
 {
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
-			(unsigned long) insn);
+  displaced_debug_printf ("copying svc insn %.8lx",
+			  (unsigned long) insn);
 
   dsc->modinsn[0] = insn;
 
@@ -6237,12 +7356,10 @@ arm_copy_svc (struct gdbarch *gdbarch, u
 
 static int
 thumb_copy_svc (struct gdbarch *gdbarch, uint16_t insn,
-		struct regcache *regs, arm_displaced_step_closure *dsc)
+		regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
 {
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.4x\n",
-			insn);
+  displaced_debug_printf ("copying svc insn %.4x", insn);
 
   dsc->modinsn[0] = insn;
 
@@ -6253,12 +7370,10 @@ thumb_copy_svc (struct gdbarch *gdbarch,
 
 static int
 arm_copy_undef (struct gdbarch *gdbarch, uint32_t insn,
-		arm_displaced_step_closure *dsc)
+		arm_displaced_step_copy_insn_closure *dsc)
 {
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying undefined insn %.8lx\n",
-			(unsigned long) insn);
+  displaced_debug_printf ("copying undefined insn %.8lx",
+			  (unsigned long) insn);
 
   dsc->modinsn[0] = insn;
 
@@ -6267,13 +7382,11 @@ arm_copy_undef (struct gdbarch *gdbarch,
 
 static int
 thumb_32bit_copy_undef (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
-                       arm_displaced_step_closure *dsc)
+			arm_displaced_step_copy_insn_closure *dsc)
 {
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn "
-                       "%.4x %.4x\n", (unsigned short) insn1,
-                       (unsigned short) insn2);
+  displaced_debug_printf ("copying undefined insn %.4x %.4x",
+			  (unsigned short) insn1, (unsigned short) insn2);
 
   dsc->modinsn[0] = insn1;
   dsc->modinsn[1] = insn2;
@@ -6286,11 +7399,10 @@ thumb_32bit_copy_undef (struct gdbarch *
 
 static int
 arm_copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
-		 arm_displaced_step_closure *dsc)
+		 arm_displaced_step_copy_insn_closure *dsc)
 {
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
-			"%.8lx\n", (unsigned long) insn);
+  displaced_debug_printf ("copying unpredictable insn %.8lx",
+			  (unsigned long) insn);
 
   dsc->modinsn[0] = insn;
 
@@ -6303,7 +7415,7 @@ arm_copy_unpred (struct gdbarch *gdbarch
 static int
 arm_decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
 			      struct regcache *regs,
-			      arm_displaced_step_closure *dsc)
+			      arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
   unsigned int rn = bits (insn, 16, 19);
@@ -6349,7 +7461,7 @@ arm_decode_misc_memhint_neon (struct gdb
       case 0x65:
 	return arm_copy_preload_reg (gdbarch, insn, regs, dsc);  /* pli reg.  */
       case 0x71: case 0x75:
-        /* pld/pldw reg.  */
+	/* pld/pldw reg.  */
 	return arm_copy_preload_reg (gdbarch, insn, regs, dsc);
       case 0x63: case 0x67: case 0x73: case 0x77:
 	return arm_copy_unpred (gdbarch, insn, dsc);
@@ -6363,7 +7475,7 @@ arm_decode_misc_memhint_neon (struct gdb
 static int
 arm_decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
 			  struct regcache *regs,
-			  arm_displaced_step_closure *dsc)
+			  arm_displaced_step_copy_insn_closure *dsc)
 {
   if (bit (insn, 27) == 0)
     return arm_decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
@@ -6421,7 +7533,7 @@ arm_decode_unconditional (struct gdbarch
 
     case 0xb:
       if (bits (insn, 16, 19) == 0xf)
-        /* ldc/ldc2 lit.  */
+	/* ldc/ldc2 lit.  */
 	return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
       else
 	return arm_copy_undef (gdbarch, insn, dsc);
@@ -6448,7 +7560,7 @@ arm_decode_unconditional (struct gdbarch
 static int
 arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
 			  struct regcache *regs,
-			  arm_displaced_step_closure *dsc)
+			  arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int op2 = bits (insn, 4, 6);
   unsigned int op = bits (insn, 21, 22);
@@ -6468,7 +7580,7 @@ arm_decode_miscellaneous (struct gdbarch
 
     case 0x2:
       if (op == 0x1)
-        /* Not really supported.  */
+	/* Not really supported.  */
 	return arm_copy_unmodified (gdbarch, insn, "bxj", dsc);
       else
 	return arm_copy_undef (gdbarch, insn, dsc);
@@ -6487,9 +7599,9 @@ arm_decode_miscellaneous (struct gdbarch
       if (op == 0x1)
 	return arm_copy_unmodified (gdbarch, insn, "bkpt", dsc);
       else if (op == 0x3)
-        /* Not really supported.  */
+	/* Not really supported.  */
 	return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
-      /* Fall through.  */
+      [[fallthrough]];
 
     default:
       return arm_copy_undef (gdbarch, insn, dsc);
@@ -6499,7 +7611,7 @@ arm_decode_miscellaneous (struct gdbarch
 static int
 arm_decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn,
 		    struct regcache *regs,
-		    arm_displaced_step_closure *dsc)
+		    arm_displaced_step_copy_insn_closure *dsc)
 {
   if (bit (insn, 25))
     switch (bits (insn, 20, 24))
@@ -6545,7 +7657,7 @@ arm_decode_dp_misc (struct gdbarch *gdba
 static int
 arm_decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
 			     struct regcache *regs,
-			     arm_displaced_step_closure *dsc)
+			     arm_displaced_step_copy_insn_closure *dsc)
 {
   int a = bit (insn, 25), b = bit (insn, 4);
   uint32_t op1 = bits (insn, 20, 24);
@@ -6581,7 +7693,7 @@ arm_decode_ld_st_word_ubyte (struct gdba
 
 static int
 arm_decode_media (struct gdbarch *gdbarch, uint32_t insn,
-		  arm_displaced_step_closure *dsc)
+		  arm_displaced_step_copy_insn_closure *dsc)
 {
   switch (bits (insn, 20, 24))
     {
@@ -6638,7 +7750,7 @@ arm_decode_media (struct gdbarch *gdbarc
 static int
 arm_decode_b_bl_ldmstm (struct gdbarch *gdbarch, uint32_t insn,
 			struct regcache *regs,
-			arm_displaced_step_closure *dsc)
+			arm_displaced_step_copy_insn_closure *dsc)
 {
   if (bit (insn, 25))
     return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
@@ -6649,7 +7761,7 @@ arm_decode_b_bl_ldmstm (struct gdbarch *
 static int
 arm_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
 			  struct regcache *regs,
-			  arm_displaced_step_closure *dsc)
+			  arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int opcode = bits (insn, 20, 24);
 
@@ -6682,7 +7794,7 @@ arm_decode_ext_reg_ld_st (struct gdbarch
 static int
 thumb2_decode_dp_shift_reg (struct gdbarch *gdbarch, uint16_t insn1,
 			    uint16_t insn2,  struct regcache *regs,
-			    arm_displaced_step_closure *dsc)
+			    arm_displaced_step_copy_insn_closure *dsc)
 {
   /* PC is only allowed to be used in instruction MOV.  */
 
@@ -6703,7 +7815,7 @@ thumb2_decode_dp_shift_reg (struct gdbar
 static int
 thumb2_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint16_t insn1,
 			     uint16_t insn2,  struct regcache *regs,
-			     arm_displaced_step_closure *dsc)
+			     arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int opcode = bits (insn1, 4, 8);
 
@@ -6738,7 +7850,7 @@ thumb2_decode_ext_reg_ld_st (struct gdba
 
 static int
 arm_decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn,
-		      struct regcache *regs, arm_displaced_step_closure *dsc)
+		      regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int op1 = bits (insn, 20, 25);
   int op = bit (insn, 4);
@@ -6784,7 +7896,7 @@ arm_decode_svc_copro (struct gdbarch *gd
 static int
 thumb2_decode_svc_copro (struct gdbarch *gdbarch, uint16_t insn1,
 			 uint16_t insn2, struct regcache *regs,
-			 arm_displaced_step_closure *dsc)
+			 arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int coproc = bits (insn2, 8, 11);
   unsigned int bit_5_8 = bits (insn1, 5, 8);
@@ -6824,7 +7936,7 @@ thumb2_decode_svc_copro (struct gdbarch
 
 static void
 install_pc_relative (struct gdbarch *gdbarch, struct regcache *regs,
-		     arm_displaced_step_closure *dsc, int rd)
+		     arm_displaced_step_copy_insn_closure *dsc, int rd)
 {
   /* ADR Rd, #imm
 
@@ -6842,7 +7954,7 @@ install_pc_relative (struct gdbarch *gdb
 
 static int
 thumb_copy_pc_relative_16bit (struct gdbarch *gdbarch, struct regcache *regs,
-			      arm_displaced_step_closure *dsc,
+			      arm_displaced_step_copy_insn_closure *dsc,
 			      int rd, unsigned int imm)
 {
 
@@ -6857,15 +7969,13 @@ thumb_copy_pc_relative_16bit (struct gdb
 static int
 thumb_decode_pc_relative_16bit (struct gdbarch *gdbarch, uint16_t insn,
 				struct regcache *regs,
-				arm_displaced_step_closure *dsc)
+				arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int rd = bits (insn, 8, 10);
   unsigned int imm8 = bits (insn, 0, 7);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying thumb adr r%d, #%d insn %.4x\n",
-			rd, imm8, insn);
+  displaced_debug_printf ("copying thumb adr r%d, #%d insn %.4x",
+			  rd, imm8, insn);
 
   return thumb_copy_pc_relative_16bit (gdbarch, regs, dsc, rd, imm8);
 }
@@ -6873,7 +7983,7 @@ thumb_decode_pc_relative_16bit (struct g
 static int
 thumb_copy_pc_relative_32bit (struct gdbarch *gdbarch, uint16_t insn1,
 			      uint16_t insn2, struct regcache *regs,
-			      arm_displaced_step_closure *dsc)
+			      arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int rd = bits (insn2, 8, 11);
   /* Since immediate has the same encoding in ADR ADD and SUB, so we simply
@@ -6883,10 +7993,8 @@ thumb_copy_pc_relative_32bit (struct gdb
   unsigned int imm_3_8 = insn2 & 0x70ff;
   unsigned int imm_i = insn1 & 0x0400; /* Clear all bits except bit 10.  */
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying thumb adr r%d, #%d:%d insn %.4x%.4x\n",
-			rd, imm_i, imm_3_8, insn1, insn2);
+  displaced_debug_printf ("copying thumb adr r%d, #%d:%d insn %.4x%.4x",
+			  rd, imm_i, imm_3_8, insn1, insn2);
 
   if (bit (insn1, 7)) /* Encoding T2 */
     {
@@ -6910,7 +8018,7 @@ thumb_copy_pc_relative_32bit (struct gdb
 static int
 thumb_copy_16bit_ldr_literal (struct gdbarch *gdbarch, uint16_t insn1,
 			      struct regcache *regs,
-			      arm_displaced_step_closure *dsc)
+			      arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned int rt = bits (insn1, 8, 10);
   unsigned int pc;
@@ -6925,10 +8033,7 @@ thumb_copy_16bit_ldr_literal (struct gdb
      Insn: LDR R0, [R2, R3];
      Cleanup: R2 <- tmp2, R3 <- tmp3, Rd <- R0, R0 <- tmp0 */
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying thumb ldr r%d [pc #%d]\n"
-			, rt, imm8);
+  displaced_debug_printf ("copying thumb ldr r%d [pc #%d]", rt, imm8);
 
   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
@@ -6960,7 +8065,7 @@ thumb_copy_16bit_ldr_literal (struct gdb
 static int
 thumb_copy_cbnz_cbz (struct gdbarch *gdbarch, uint16_t insn1,
 		     struct regcache *regs,
-		     arm_displaced_step_closure *dsc)
+		     arm_displaced_step_copy_insn_closure *dsc)
 {
   int non_zero = bit (insn1, 11);
   unsigned int imm5 = (bit (insn1, 9) << 6) | (bits (insn1, 3, 7) << 1);
@@ -6983,10 +8088,9 @@ thumb_copy_cbnz_cbz (struct gdbarch *gdb
   dsc->u.branch.link = 0;
   dsc->u.branch.exchange = 0;
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copying %s [r%d = 0x%x]"
-			" insn %.4x to %.8lx\n", non_zero ? "cbnz" : "cbz",
-			rn, rn_val, insn1, dsc->u.branch.dest);
+  displaced_debug_printf ("copying %s [r%d = 0x%x] insn %.4x to %.8lx",
+			  non_zero ? "cbnz" : "cbz",
+			  rn, rn_val, insn1, dsc->u.branch.dest);
 
   dsc->modinsn[0] = THUMB_NOP;
 
@@ -6998,7 +8102,7 @@ thumb_copy_cbnz_cbz (struct gdbarch *gdb
 static int
 thumb2_copy_table_branch (struct gdbarch *gdbarch, uint16_t insn1,
 			  uint16_t insn2, struct regcache *regs,
-			  arm_displaced_step_closure *dsc)
+			  arm_displaced_step_copy_insn_closure *dsc)
 {
   ULONGEST rn_val, rm_val;
   int is_tbh = bit (insn2, 4);
@@ -7023,11 +8127,10 @@ thumb2_copy_table_branch (struct gdbarch
       halfwords = extract_unsigned_integer (buf, 1, byte_order);
     }
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: %s base 0x%x offset 0x%x"
-			" offset 0x%x\n", is_tbh ? "tbh" : "tbb",
-			(unsigned int) rn_val, (unsigned int) rm_val,
-			(unsigned int) halfwords);
+  displaced_debug_printf ("%s base 0x%x offset 0x%x offset 0x%x",
+			  is_tbh ? "tbh" : "tbb",
+			  (unsigned int) rn_val, (unsigned int) rm_val,
+			  (unsigned int) halfwords);
 
   dsc->u.branch.cond = INST_AL;
   dsc->u.branch.link = 0;
@@ -7041,7 +8144,7 @@ thumb2_copy_table_branch (struct gdbarch
 
 static void
 cleanup_pop_pc_16bit_all (struct gdbarch *gdbarch, struct regcache *regs,
-			  arm_displaced_step_closure *dsc)
+			  arm_displaced_step_copy_insn_closure *dsc)
 {
   /* PC <- r7 */
   int val = displaced_read_reg (regs, dsc, 7);
@@ -7059,7 +8162,7 @@ cleanup_pop_pc_16bit_all (struct gdbarch
 static int
 thumb_copy_pop_pc_16bit (struct gdbarch *gdbarch, uint16_t insn1,
 			 struct regcache *regs,
-			 arm_displaced_step_closure *dsc)
+			 arm_displaced_step_copy_insn_closure *dsc)
 {
   dsc->u.block.regmask = insn1 & 0x00ff;
 
@@ -7084,10 +8187,8 @@ thumb_copy_pop_pc_16bit (struct gdbarch
      Cleanup: Set registers in original reglist from r0 - rN.  Restore r0 - rN
      from tmp[] properly.
   */
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced: copying thumb pop {%.8x, pc} insn %.4x\n",
-			dsc->u.block.regmask, insn1);
+  displaced_debug_printf ("copying thumb pop {%.8x, pc} insn %.4x",
+			  dsc->u.block.regmask, insn1);
 
   if (dsc->u.block.regmask == 0xff)
     {
@@ -7102,7 +8203,7 @@ thumb_copy_pop_pc_16bit (struct gdbarch
     }
   else
     {
-      unsigned int num_in_list = bitcount (dsc->u.block.regmask);
+      unsigned int num_in_list = count_one_bits (dsc->u.block.regmask);
       unsigned int i;
       unsigned int new_regmask;
 
@@ -7111,11 +8212,9 @@ thumb_copy_pop_pc_16bit (struct gdbarch
 
       new_regmask = (1 << (num_in_list + 1)) - 1;
 
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog, _("displaced: POP "
-					  "{..., pc}: original reg list %.4x,"
-					  " modified list %.4x\n"),
-			    (int) dsc->u.block.regmask, new_regmask);
+      displaced_debug_printf ("POP {..., pc}: original reg list %.4x, "
+			      "modified list %.4x",
+			      (int) dsc->u.block.regmask, new_regmask);
 
       dsc->u.block.regmask |= 0x8000;
       dsc->u.block.writeback = 0;
@@ -7132,7 +8231,7 @@ thumb_copy_pop_pc_16bit (struct gdbarch
 static void
 thumb_process_displaced_16bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
 				    struct regcache *regs,
-				    arm_displaced_step_closure *dsc)
+				    arm_displaced_step_copy_insn_closure *dsc)
 {
   unsigned short op_bit_12_15 = bits (insn1, 12, 15);
   unsigned short op_bit_10_11 = bits (insn1, 10, 11);
@@ -7228,15 +8327,14 @@ thumb_process_displaced_16bit_insn (stru
     }
 
   if (err)
-    internal_error (__FILE__, __LINE__,
-		    _("thumb_process_displaced_16bit_insn: Instruction decode error"));
+    internal_error (_("thumb_process_displaced_16bit_insn: Instruction decode error"));
 }
 
 static int
 decode_thumb_32bit_ld_mem_hints (struct gdbarch *gdbarch,
 				 uint16_t insn1, uint16_t insn2,
 				 struct regcache *regs,
-				 arm_displaced_step_closure *dsc)
+				 arm_displaced_step_copy_insn_closure *dsc)
 {
   int rt = bits (insn2, 12, 15);
   int rn = bits (insn1, 0, 3);
@@ -7315,7 +8413,7 @@ decode_thumb_32bit_ld_mem_hints (struct
 static void
 thumb_process_displaced_32bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
 				    uint16_t insn2, struct regcache *regs,
-				    arm_displaced_step_closure *dsc)
+				    arm_displaced_step_copy_insn_closure *dsc)
 {
   int err = 0;
   unsigned short op = bit (insn2, 15);
@@ -7435,23 +8533,21 @@ thumb_process_displaced_32bit_insn (stru
     }
 
   if (err)
-    internal_error (__FILE__, __LINE__,
-		    _("thumb_process_displaced_32bit_insn: Instruction decode error"));
+    internal_error (_("thumb_process_displaced_32bit_insn: Instruction decode error"));
 
 }
 
 static void
 thumb_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
 			      struct regcache *regs,
-			      arm_displaced_step_closure *dsc)
+			      arm_displaced_step_copy_insn_closure *dsc)
 {
   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
   uint16_t insn1
     = read_memory_unsigned_integer (from, 2, byte_order_for_code);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: process thumb insn %.4x "
-			"at %.8lx\n", insn1, (unsigned long) from);
+  displaced_debug_printf ("process thumb insn %.4x at %.8lx",
+			  insn1, (unsigned long) from);
 
   dsc->is_thumb = 1;
   dsc->insn_size = thumb_insn_size (insn1);
@@ -7468,7 +8564,7 @@ thumb_process_displaced_insn (struct gdb
 void
 arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
 			    CORE_ADDR to, struct regcache *regs,
-			    arm_displaced_step_closure *dsc)
+			    arm_displaced_step_copy_insn_closure *dsc)
 {
   int err = 0;
   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
@@ -7488,10 +8584,8 @@ arm_process_displaced_insn (struct gdbar
   dsc->is_thumb = 0;
   dsc->insn_size = 4;
   insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
-			"at %.8lx\n", (unsigned long) insn,
-			(unsigned long) from);
+  displaced_debug_printf ("stepping insn %.8lx at %.8lx",
+			  (unsigned long) insn, (unsigned long) from);
 
   if ((insn & 0xf0000000) == 0xf0000000)
     err = arm_decode_unconditional (gdbarch, insn, regs, dsc);
@@ -7519,40 +8613,34 @@ arm_process_displaced_insn (struct gdbar
     }
 
   if (err)
-    internal_error (__FILE__, __LINE__,
-		    _("arm_process_displaced_insn: Instruction decode error"));
+    internal_error (_("arm_process_displaced_insn: Instruction decode error"));
 }
 
 /* Actually set up the scratch space for a displaced instruction.  */
 
 void
 arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
-			    CORE_ADDR to, arm_displaced_step_closure *dsc)
+			    CORE_ADDR to,
+			    arm_displaced_step_copy_insn_closure *dsc)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
   unsigned int i, len, offset;
   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
-  int size = dsc->is_thumb? 2 : 4;
+  int size = dsc->is_thumb ? 2 : 4;
   const gdb_byte *bkp_insn;
 
   offset = 0;
   /* Poke modified instruction(s).  */
   for (i = 0; i < dsc->numinsns; i++)
     {
-      if (debug_displaced)
-	{
-	  fprintf_unfiltered (gdb_stdlog, "displaced: writing insn ");
-	  if (size == 4)
-	    fprintf_unfiltered (gdb_stdlog, "%.8lx",
-				dsc->modinsn[i]);
-	  else if (size == 2)
-	    fprintf_unfiltered (gdb_stdlog, "%.4x",
-				(unsigned short)dsc->modinsn[i]);
-
-	  fprintf_unfiltered (gdb_stdlog, " at %.8lx\n",
-			      (unsigned long) to + offset);
+      if (size == 4)
+	displaced_debug_printf ("writing insn %.8lx at %.8lx",
+				dsc->modinsn[i], (unsigned long) to + offset);
+      else if (size == 2)
+	displaced_debug_printf ("writing insn %.4x at %.8lx",
+				(unsigned short) dsc->modinsn[i],
+				(unsigned long) to + offset);
 
-	}
       write_memory_unsigned_integer (to + offset, size,
 				     byte_order_for_code,
 				     dsc->modinsn[i]);
@@ -7574,9 +8662,8 @@ arm_displaced_init_closure (struct gdbar
   /* Put breakpoint afterwards.  */
   write_memory (to + offset, bkp_insn, len);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
-			paddress (gdbarch, from), paddress (gdbarch, to));
+  displaced_debug_printf ("copy %s->%s", paddress (gdbarch, from),
+			  paddress (gdbarch, to));
 }
 
 /* Entry point for cleaning things up after a displaced instruction has been
@@ -7584,11 +8671,36 @@ arm_displaced_init_closure (struct gdbar
 
 void
 arm_displaced_step_fixup (struct gdbarch *gdbarch,
-			  struct displaced_step_closure *dsc_,
+			  struct displaced_step_copy_insn_closure *dsc_,
 			  CORE_ADDR from, CORE_ADDR to,
-			  struct regcache *regs)
+			  struct regcache *regs, bool completed_p)
 {
-  arm_displaced_step_closure *dsc = (arm_displaced_step_closure *) dsc_;
+  /* The following block exists as a temporary measure while displaced
+     stepping is fixed architecture at a time within GDB.
+
+     In an earlier implementation of displaced stepping, if GDB thought the
+     displaced instruction had not been executed then this fix up function
+     was never called.  As a consequence, things that should be fixed by
+     this function were left in an unfixed state.
+
+     However, it's not as simple as always calling this function; this
+     function needs to be updated to decide what should be fixed up based
+     on whether the displaced step executed or not, which requires each
+     architecture to be considered individually.
+
+     Until this architecture is updated, this block replicates the old
+     behaviour; we just restore the program counter register, and leave
+     everything else unfixed.  */
+  if (!completed_p)
+    {
+      CORE_ADDR pc = regcache_read_pc (regs);
+      pc = from + (pc - to);
+      regcache_write_pc (regs, pc);
+      return;
+    }
+
+  arm_displaced_step_copy_insn_closure *dsc
+    = (arm_displaced_step_copy_insn_closure *) dsc_;
 
   if (dsc->cleanup)
     dsc->cleanup (gdbarch, regs, dsc);
@@ -7605,8 +8717,8 @@ arm_displaced_step_fixup (struct gdbarch
 static int
 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
 {
-  gdb_disassembler *di
-    = static_cast<gdb_disassembler *>(info->application_data);
+  gdb_disassemble_info *di
+    = static_cast<gdb_disassemble_info *> (info->application_data);
   struct gdbarch *gdbarch = di->arch ();
 
   if (arm_pc_is_thumb (gdbarch, memaddr))
@@ -7643,9 +8755,12 @@ gdb_print_insn_arm (bfd_vma memaddr, dis
   /* GDB is able to get bfd_mach from the exe_bfd, info->mach is
      accurate, so mark USER_SPECIFIED_MACHINE_TYPE bit.  Otherwise,
      opcodes/arm-dis.c:print_insn reset info->mach, and it will trigger
-     the assert on the mismatch of info->mach and bfd_get_mach (exec_bfd)
-     in default_print_insn.  */
-  if (exec_bfd != NULL)
+     the assert on the mismatch of info->mach and
+     bfd_get_mach (current_program_space->exec_bfd ()) in
+     default_print_insn.  */
+  if (current_program_space->exec_bfd () != NULL
+      && (current_program_space->exec_bfd ()->arch_info
+	  == gdbarch_bfd_arch_info (gdbarch)))
     info->flags |= USER_SPECIFIED_MACHINE_TYPE;
 
   return default_print_insn (memaddr, info);
@@ -7695,7 +8810,7 @@ static const gdb_byte arm_default_thumb_
 static int
 arm_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
 
   if (arm_pc_is_thumb (gdbarch, *pcptr))
@@ -7730,7 +8845,7 @@ arm_breakpoint_kind_from_pc (struct gdba
 static const gdb_byte *
 arm_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   switch (kind)
     {
@@ -7802,10 +8917,14 @@ arm_extract_return_value (struct type *t
 {
   struct gdbarch *gdbarch = regs->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
-  if (TYPE_CODE_FLT == TYPE_CODE (type))
+  while (type->code () == TYPE_CODE_RANGE)
+    type = check_typedef (type->target_type ());
+
+  if (TYPE_CODE_FLT == type->code ())
     {
-      switch (gdbarch_tdep (gdbarch)->fp_model)
+      switch (tdep->fp_model)
 	{
 	case ARM_FLOAT_FPA:
 	  {
@@ -7826,29 +8945,29 @@ arm_extract_return_value (struct type *t
 	     not using the VFP ABI code.  */
 	case ARM_FLOAT_VFP:
 	  regs->cooked_read (ARM_A1_REGNUM, valbuf);
-	  if (TYPE_LENGTH (type) > 4)
+	  if (type->length () > 4)
 	    regs->cooked_read (ARM_A1_REGNUM + 1,
 			       valbuf + ARM_INT_REGISTER_SIZE);
 	  break;
 
 	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("arm_extract_return_value: "
+	  internal_error (_("arm_extract_return_value: "
 			    "Floating point model not supported"));
 	  break;
 	}
     }
-  else if (TYPE_CODE (type) == TYPE_CODE_INT
-	   || TYPE_CODE (type) == TYPE_CODE_CHAR
-	   || TYPE_CODE (type) == TYPE_CODE_BOOL
-	   || TYPE_CODE (type) == TYPE_CODE_PTR
+  else if (type->code () == TYPE_CODE_INT
+	   || type->code () == TYPE_CODE_CHAR
+	   || type->code () == TYPE_CODE_BOOL
+	   || type->code () == TYPE_CODE_PTR
 	   || TYPE_IS_REFERENCE (type)
-	   || TYPE_CODE (type) == TYPE_CODE_ENUM)
+	   || type->code () == TYPE_CODE_ENUM
+	   || is_fixed_point_type (type))
     {
       /* If the type is a plain integer, then the access is
 	 straight-forward.  Otherwise we have to play around a bit
 	 more.  */
-      int len = TYPE_LENGTH (type);
+      int len = type->length ();
       int regno = ARM_A1_REGNUM;
       ULONGEST tmp;
 
@@ -7868,9 +8987,9 @@ arm_extract_return_value (struct type *t
   else
     {
       /* For a structure or union the behaviour is as if the value had
-         been stored to word-aligned memory and then loaded into 
-         registers with 32-bit load instruction(s).  */
-      int len = TYPE_LENGTH (type);
+	 been stored to word-aligned memory and then loaded into 
+	 registers with 32-bit load instruction(s).  */
+      int len = type->length ();
       int regno = ARM_A1_REGNUM;
       bfd_byte tmpbuf[ARM_INT_REGISTER_SIZE];
 
@@ -7899,23 +9018,28 @@ arm_return_in_memory (struct gdbarch *gd
 
   /* Simple, non-aggregate types (ie not including vectors and
      complex) are always returned in a register (or registers).  */
-  code = TYPE_CODE (type);
+  code = type->code ();
   if (TYPE_CODE_STRUCT != code && TYPE_CODE_UNION != code
       && TYPE_CODE_ARRAY != code && TYPE_CODE_COMPLEX != code)
     return 0;
 
-  if (TYPE_CODE_ARRAY == code && TYPE_VECTOR (type))
+  if (TYPE_HAS_DYNAMIC_LENGTH (type))
+    return 1;
+
+  if (TYPE_CODE_ARRAY == code && type->is_vector ())
     {
       /* Vector values should be returned using ARM registers if they
 	 are not over 16 bytes.  */
-      return (TYPE_LENGTH (type) > 16);
+      return (type->length () > 16);
     }
 
-  if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+  if (tdep->arm_abi != ARM_ABI_APCS)
     {
       /* The AAPCS says all aggregates not larger than a word are returned
 	 in a register.  */
-      if (TYPE_LENGTH (type) <= ARM_INT_REGISTER_SIZE)
+      if (type->length () <= ARM_INT_REGISTER_SIZE
+	  && language_pass_by_reference (type).trivially_copyable)
 	return 0;
 
       return 1;
@@ -7926,7 +9050,8 @@ arm_return_in_memory (struct gdbarch *gd
 
       /* All aggregate types that won't fit in a register must be returned
 	 in memory.  */
-      if (TYPE_LENGTH (type) > ARM_INT_REGISTER_SIZE)
+      if (type->length () > ARM_INT_REGISTER_SIZE
+	  || !language_pass_by_reference (type).trivially_copyable)
 	return 1;
 
       /* In the ARM ABI, "integer" like aggregate types are returned in
@@ -7968,13 +9093,12 @@ arm_return_in_memory (struct gdbarch *gd
 	     --> yes, nRc = 1
 	  */
 
-	  for (i = 0; i < TYPE_NFIELDS (type); i++)
+	  for (i = 0; i < type->num_fields (); i++)
 	    {
 	      enum type_code field_type_code;
 
 	      field_type_code
-		= TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type,
-							     i)));
+		= check_typedef (type->field (i).type ())->code ();
 
 	      /* Is it a floating point type field?  */
 	      if (field_type_code == TYPE_CODE_FLT)
@@ -7984,12 +9108,12 @@ arm_return_in_memory (struct gdbarch *gd
 		}
 
 	      /* If bitpos != 0, then we have to care about it.  */
-	      if (TYPE_FIELD_BITPOS (type, i) != 0)
+	      if (type->field (i).loc_bitpos () != 0)
 		{
 		  /* Bitfields are not addressable.  If the field bitsize is 
 		     zero, then the field is not packed.  Hence it cannot be
 		     a bitfield or any other packed type.  */
-		  if (TYPE_FIELD_BITSIZE (type, i) == 0)
+		  if (type->field (i).bitsize () == 0)
 		    {
 		      nRc = 1;
 		      break;
@@ -8012,11 +9136,15 @@ arm_store_return_value (struct type *typ
   struct gdbarch *gdbarch = regs->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
 
-  if (TYPE_CODE (type) == TYPE_CODE_FLT)
+  while (type->code () == TYPE_CODE_RANGE)
+    type = check_typedef (type->target_type ());
+
+  if (type->code () == TYPE_CODE_FLT)
     {
       gdb_byte buf[ARM_FP_REGISTER_SIZE];
+      arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
-      switch (gdbarch_tdep (gdbarch)->fp_model)
+      switch (tdep->fp_model)
 	{
 	case ARM_FLOAT_FPA:
 
@@ -8030,33 +9158,44 @@ arm_store_return_value (struct type *typ
 	     not using the VFP ABI code.  */
 	case ARM_FLOAT_VFP:
 	  regs->cooked_write (ARM_A1_REGNUM, valbuf);
-	  if (TYPE_LENGTH (type) > 4)
+	  if (type->length () > 4)
 	    regs->cooked_write (ARM_A1_REGNUM + 1,
 				valbuf + ARM_INT_REGISTER_SIZE);
 	  break;
 
 	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("arm_store_return_value: Floating "
+	  internal_error (_("arm_store_return_value: Floating "
 			    "point model not supported"));
 	  break;
 	}
     }
-  else if (TYPE_CODE (type) == TYPE_CODE_INT
-	   || TYPE_CODE (type) == TYPE_CODE_CHAR
-	   || TYPE_CODE (type) == TYPE_CODE_BOOL
-	   || TYPE_CODE (type) == TYPE_CODE_PTR
+  else if (type->code () == TYPE_CODE_INT
+	   || type->code () == TYPE_CODE_CHAR
+	   || type->code () == TYPE_CODE_BOOL
+	   || type->code () == TYPE_CODE_PTR
 	   || TYPE_IS_REFERENCE (type)
-	   || TYPE_CODE (type) == TYPE_CODE_ENUM)
+	   || type->code () == TYPE_CODE_ENUM
+	   || is_fixed_point_type (type))
     {
-      if (TYPE_LENGTH (type) <= 4)
+      if (type->length () <= 4)
 	{
 	  /* Values of one word or less are zero/sign-extended and
 	     returned in r0.  */
 	  bfd_byte tmpbuf[ARM_INT_REGISTER_SIZE];
-	  LONGEST val = unpack_long (type, valbuf);
 
-	  store_signed_integer (tmpbuf, ARM_INT_REGISTER_SIZE, byte_order, val);
+	  if (is_fixed_point_type (type))
+	    {
+	      gdb_mpz unscaled;
+	      unscaled.read (gdb::make_array_view (valbuf, type->length ()),
+			     byte_order, type->is_unsigned ());
+	      unscaled.write (gdb::make_array_view (tmpbuf, sizeof (tmpbuf)),
+			      byte_order, type->is_unsigned ());
+	    }
+	  else
+	    {
+	      LONGEST val = unpack_long (type, valbuf);
+	      store_signed_integer (tmpbuf, ARM_INT_REGISTER_SIZE, byte_order, val);
+	    }
 	  regs->cooked_write (ARM_A1_REGNUM, tmpbuf);
 	}
       else
@@ -8064,7 +9203,7 @@ arm_store_return_value (struct type *typ
 	  /* Integral values greater than one word are stored in consecutive
 	     registers starting with r0.  This will always be a multiple of
 	     the regiser size.  */
-	  int len = TYPE_LENGTH (type);
+	  int len = type->length ();
 	  int regno = ARM_A1_REGNUM;
 
 	  while (len > 0)
@@ -8078,9 +9217,9 @@ arm_store_return_value (struct type *typ
   else
     {
       /* For a structure or union the behaviour is as if the value had
-         been stored to word-aligned memory and then loaded into 
-         registers with 32-bit load instruction(s).  */
-      int len = TYPE_LENGTH (type);
+	 been stored to word-aligned memory and then loaded into 
+	 registers with 32-bit load instruction(s).  */
+      int len = type->length ();
       int regno = ARM_A1_REGNUM;
       bfd_byte tmpbuf[ARM_INT_REGISTER_SIZE];
 
@@ -8101,10 +9240,10 @@ arm_store_return_value (struct type *typ
 static enum return_value_convention
 arm_return_value (struct gdbarch *gdbarch, struct value *function,
 		  struct type *valtype, struct regcache *regcache,
-		  gdb_byte *readbuf, const gdb_byte *writebuf)
+		  struct value **read_value, const gdb_byte *writebuf)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  struct type *func_type = function ? value_type (function) : NULL;
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+  struct type *func_type = function ? function->type () : NULL;
   enum arm_vfp_cprc_base_type vfp_base_type;
   int vfp_base_count;
 
@@ -8114,6 +9253,14 @@ arm_return_value (struct gdbarch *gdbarc
       int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
       int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
       int i;
+
+      gdb_byte *readbuf = nullptr;
+      if (read_value != nullptr)
+	{
+	  *read_value = value::allocate (valtype);
+	  readbuf = (*read_value)->contents_raw ().data ();
+	}
+
       for (i = 0; i < vfp_base_count; i++)
 	{
 	  if (reg_char == 'q')
@@ -8143,15 +9290,39 @@ arm_return_value (struct gdbarch *gdbarc
       return RETURN_VALUE_REGISTER_CONVENTION;
     }
 
-  if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
-      || TYPE_CODE (valtype) == TYPE_CODE_UNION
-      || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
+  if (valtype->code () == TYPE_CODE_STRUCT
+      || valtype->code () == TYPE_CODE_UNION
+      || valtype->code () == TYPE_CODE_ARRAY)
     {
+      /* From the AAPCS document:
+
+	 Result return:
+
+	 A Composite Type larger than 4 bytes, or whose size cannot be
+	 determined statically by both caller and callee, is stored in memory
+	 at an address passed as an extra argument when the function was
+	 called (Parameter Passing, rule A.4). The memory to be used for the
+	 result may be modified at any point during the function call.
+
+	 Parameter Passing:
+
+	 A.4: If the subroutine is a function that returns a result in memory,
+	 then the address for the result is placed in r0 and the NCRN is set
+	 to r1.  */
       if (tdep->struct_return == pcc_struct_return
 	  || arm_return_in_memory (gdbarch, valtype))
-	return RETURN_VALUE_STRUCT_CONVENTION;
+	{
+	  if (read_value != nullptr)
+	    {
+	      CORE_ADDR addr;
+
+	      regcache->cooked_read (ARM_A1_REGNUM, &addr);
+	      *read_value = value_at_non_lval (valtype, addr);
+	    }
+	  return RETURN_VALUE_ABI_RETURNS_ADDRESS;
+	}
     }
-  else if (TYPE_CODE (valtype) == TYPE_CODE_COMPLEX)
+  else if (valtype->code () == TYPE_CODE_COMPLEX)
     {
       if (arm_return_in_memory (gdbarch, valtype))
 	return RETURN_VALUE_STRUCT_CONVENTION;
@@ -8160,18 +9331,22 @@ arm_return_value (struct gdbarch *gdbarc
   if (writebuf)
     arm_store_return_value (valtype, regcache, writebuf);
 
-  if (readbuf)
-    arm_extract_return_value (valtype, regcache, readbuf);
+  if (read_value != nullptr)
+    {
+      *read_value = value::allocate (valtype);
+      gdb_byte *readbuf = (*read_value)->contents_raw ().data ();
+      arm_extract_return_value (valtype, regcache, readbuf);
+    }
 
   return RETURN_VALUE_REGISTER_CONVENTION;
 }
 
 
 static int
-arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+arm_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR jb_addr;
   gdb_byte buf[ARM_INT_REGISTER_SIZE];
@@ -8220,7 +9395,7 @@ arm_skip_cmse_entry (CORE_ADDR pc, const
    = lookup_minimal_symbol (target_name, NULL, objfile);
 
   if (minsym.minsym != nullptr)
-    return BMSYMBOL_VALUE_ADDRESS (minsym);
+    return minsym.value_address ();
 
   return 0;
 }
@@ -8240,7 +9415,7 @@ arm_is_sgstubs_section (struct obj_secti
    return the target PC.  Otherwise return 0.  */
 
 CORE_ADDR
-arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
+arm_skip_stub (frame_info_ptr frame, CORE_ADDR pc)
 {
   const char *name;
   int namelen;
@@ -8267,7 +9442,7 @@ arm_skip_stub (struct frame_info *frame,
       || startswith (name, "__ARM_call_via_"))
     {
       /* Use the name suffix to determine which register contains the
-         target PC.  */
+	 target PC.  */
       static const char *table[15] =
       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
@@ -8309,7 +9484,7 @@ arm_skip_stub (struct frame_info *frame,
       objfile = (sec == NULL) ? NULL : sec->objfile;
       minsym = lookup_minimal_symbol (target_name, NULL, objfile);
       if (minsym.minsym != NULL)
-	return BMSYMBOL_VALUE_ADDRESS (minsym);
+	return minsym.value_address ();
       else
 	return 0;
     }
@@ -8324,33 +9499,17 @@ arm_skip_stub (struct frame_info *frame,
 }
 
 static void
-set_arm_command (const char *args, int from_tty)
-{
-  printf_unfiltered (_("\
-\"set arm\" must be followed by an apporpriate subcommand.\n"));
-  help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
-}
-
-static void
-show_arm_command (const char *args, int from_tty)
-{
-  cmd_show_list (showarmcmdlist, from_tty, "");
-}
-
-static void
 arm_update_current_architecture (void)
 {
-  struct gdbarch_info info;
-
   /* If the current architecture is not ARM, we have nothing to do.  */
-  if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_arm)
+  gdbarch *arch = current_inferior ()->arch ();
+  if (gdbarch_bfd_arch_info (arch)->arch != bfd_arch_arm)
     return;
 
   /* Update the architecture.  */
-  gdbarch_info_init (&info);
-
+  gdbarch_info info;
   if (!gdbarch_update_p (info))
-    internal_error (__FILE__, __LINE__, _("could not update architecture"));
+    internal_error (_("could not update architecture"));
 }
 
 static void
@@ -8367,7 +9526,7 @@ set_fp_model_sfunc (const char *args, in
       }
 
   if (fp_model == ARM_FLOAT_LAST)
-    internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
+    internal_error (_("Invalid fp model accepted: %s."),
 		    current_fp_model);
 
   arm_update_current_architecture ();
@@ -8377,17 +9536,20 @@ static void
 show_fp_model (struct ui_file *file, int from_tty,
 	       struct cmd_list_element *c, const char *value)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
-
+  gdbarch *arch = current_inferior ()->arch ();
   if (arm_fp_model == ARM_FLOAT_AUTO
-      && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
-    fprintf_filtered (file, _("\
+      && gdbarch_bfd_arch_info (arch)->arch == bfd_arch_arm)
+    {
+      arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (arch);
+
+      gdb_printf (file, _("\
 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
-		      fp_model_strings[tdep->fp_model]);
+		  fp_model_strings[tdep->fp_model]);
+    }
   else
-    fprintf_filtered (file, _("\
+    gdb_printf (file, _("\
 The current ARM floating point model is \"%s\".\n"),
-		      fp_model_strings[arm_fp_model]);
+		fp_model_strings[arm_fp_model]);
 }
 
 static void
@@ -8404,7 +9566,7 @@ arm_set_abi (const char *args, int from_
       }
 
   if (arm_abi == ARM_ABI_LAST)
-    internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
+    internal_error (_("Invalid ABI accepted: %s."),
 		    arm_abi_string);
 
   arm_update_current_architecture ();
@@ -8414,36 +9576,48 @@ static void
 arm_show_abi (struct ui_file *file, int from_tty,
 	     struct cmd_list_element *c, const char *value)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
-
+  gdbarch *arch = current_inferior ()->arch ();
   if (arm_abi_global == ARM_ABI_AUTO
-      && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
-    fprintf_filtered (file, _("\
+      && gdbarch_bfd_arch_info (arch)->arch == bfd_arch_arm)
+    {
+      arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (arch);
+
+      gdb_printf (file, _("\
 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
-		      arm_abi_strings[tdep->arm_abi]);
+		  arm_abi_strings[tdep->arm_abi]);
+    }
   else
-    fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
-		      arm_abi_string);
+    gdb_printf (file, _("The current ARM ABI is \"%s\".\n"),
+		arm_abi_string);
 }
 
 static void
 arm_show_fallback_mode (struct ui_file *file, int from_tty,
 			struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file,
-		    _("The current execution mode assumed "
-		      "(when symbols are unavailable) is \"%s\".\n"),
-		    arm_fallback_mode_string);
+  gdb_printf (file,
+	      _("The current execution mode assumed "
+		"(when symbols are unavailable) is \"%s\".\n"),
+	      arm_fallback_mode_string);
 }
 
 static void
 arm_show_force_mode (struct ui_file *file, int from_tty,
 		     struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file,
-		    _("The current execution mode assumed "
-		      "(even when symbols are available) is \"%s\".\n"),
-		    arm_force_mode_string);
+  gdb_printf (file,
+	      _("The current execution mode assumed "
+		"(even when symbols are available) is \"%s\".\n"),
+	      arm_force_mode_string);
+}
+
+static void
+arm_show_unwind_secure_frames (struct ui_file *file, int from_tty,
+			 struct cmd_list_element *c, const char *value)
+{
+  gdb_printf (file,
+	      _("Usage of non-secure to secure exception stack unwinding is %s.\n"),
+	      arm_unwind_secure_frames ? "on" : "off");
 }
 
 /* If the user changes the register disassembly style used for info
@@ -8472,50 +9646,56 @@ show_disassembly_style_sfunc (struct ui_
   const char *opt;
 
   FOR_EACH_DISASSEMBLER_OPTION (opt, options)
-    if (CONST_STRNEQ (opt, "reg-names-"))
+    if (startswith (opt, "reg-names-"))
       {
 	style = &opt[strlen ("reg-names-")];
 	len = strcspn (style, ",");
       }
 
-  fprintf_unfiltered (file, "The disassembly style is \"%.*s\".\n", len, style);
+  gdb_printf (file, "The disassembly style is \"%.*s\".\n", len, style);
 }
 
 /* Return the ARM register name corresponding to register I.  */
 static const char *
 arm_register_name (struct gdbarch *gdbarch, int i)
 {
-  const int num_regs = gdbarch_num_regs (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
-  if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
-      && i >= num_regs && i < num_regs + 32)
+  if (is_s_pseudo (gdbarch, i))
     {
-      static const char *const vfp_pseudo_names[] = {
+      static const char *const s_pseudo_names[] = {
 	"s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
 	"s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
 	"s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
 	"s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
       };
 
-      return vfp_pseudo_names[i - num_regs];
+      return s_pseudo_names[i - tdep->s_pseudo_base];
     }
 
-  if (gdbarch_tdep (gdbarch)->have_neon_pseudos
-      && i >= num_regs + 32 && i < num_regs + 32 + 16)
+  if (is_q_pseudo (gdbarch, i))
     {
-      static const char *const neon_pseudo_names[] = {
+      static const char *const q_pseudo_names[] = {
 	"q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
 	"q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
       };
 
-      return neon_pseudo_names[i - num_regs - 32];
+      return q_pseudo_names[i - tdep->q_pseudo_base];
     }
 
+  if (is_mve_pseudo (gdbarch, i))
+    return "p0";
+
+  /* RA_AUTH_CODE is used for unwinding only.  Do not assign it a name.  */
+  if (is_pacbti_pseudo (gdbarch, i))
+    return "";
+
   if (i >= ARRAY_SIZE (arm_register_names))
     /* These registers are only supported on targets which supply
        an XML description.  */
     return "";
 
+  /* Non-pseudo registers.  */
   return arm_register_names[i];
 }
 
@@ -8568,9 +9748,9 @@ arm_record_special_symbol (struct gdbarc
   if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
     return;
 
-  data = arm_bfd_data_key.get (objfile->obfd);
+  data = arm_bfd_data_key.get (objfile->obfd.get ());
   if (data == NULL)
-    data = arm_bfd_data_key.emplace (objfile->obfd,
+    data = arm_bfd_data_key.emplace (objfile->obfd.get (),
 				     objfile->obfd->section_count);
   arm_mapping_symbol_vec &map
     = data->section_maps[bfd_asymbol_section (sym)->index];
@@ -8616,69 +9796,93 @@ arm_neon_quad_read (struct gdbarch *gdba
 {
   char name_buf[4];
   gdb_byte reg_buf[8];
-  int offset, double_regnum;
+  int double_regnum;
   enum register_status status;
 
   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
 					       strlen (name_buf));
 
-  /* d0 is always the least significant half of q0.  */
-  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
-    offset = 8;
-  else
-    offset = 0;
-
   status = regcache->raw_read (double_regnum, reg_buf);
   if (status != REG_VALID)
     return status;
-  memcpy (buf + offset, reg_buf, 8);
+  memcpy (buf, reg_buf, 8);
 
-  offset = 8 - offset;
   status = regcache->raw_read (double_regnum + 1, reg_buf);
   if (status != REG_VALID)
     return status;
-  memcpy (buf + offset, reg_buf, 8);
+  memcpy (buf + 8, reg_buf, 8);
 
   return REG_VALID;
 }
 
-static enum register_status
-arm_pseudo_read (struct gdbarch *gdbarch, readable_regcache *regcache,
-		 int regnum, gdb_byte *buf)
+/* Read the contents of a NEON quad register, by reading from two double
+   registers, and return it as a value.  QUAD_REG_INDEX is the index of the quad
+   register, in [0, 15].  */
+
+static value *
+arm_neon_quad_read_value (gdbarch *gdbarch, frame_info_ptr next_frame,
+			  int pseudo_reg_num, int quad_reg_index)
 {
-  const int num_regs = gdbarch_num_regs (gdbarch);
-  char name_buf[4];
-  gdb_byte reg_buf[8];
-  int offset, double_regnum;
+  std::string raw_reg_name = string_printf ("d%d", quad_reg_index << 1);
+  int double_regnum
+    = user_reg_map_name_to_regnum (gdbarch, raw_reg_name.c_str (),
+				   raw_reg_name.length ());
+
+  return pseudo_from_concat_raw (next_frame, pseudo_reg_num, double_regnum,
+				 double_regnum + 1);
+}
+
+/* Read the contents of the MVE pseudo register REGNUM and return it as a
+   value.  */
+static value *
+arm_mve_pseudo_read_value (gdbarch *gdbarch, frame_info_ptr next_frame,
+			   int pseudo_reg_num)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
-  gdb_assert (regnum >= num_regs);
-  regnum -= num_regs;
+  /* P0 is the first 16 bits of VPR.  */
+  return pseudo_from_raw_part (next_frame, pseudo_reg_num,
+			       tdep->mve_vpr_regnum, 0);
+}
+
+static value *
+arm_pseudo_read_value (gdbarch *gdbarch, frame_info_ptr next_frame,
+		       const int pseudo_reg_num)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
-  if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
-    /* Quad-precision register.  */
-    return arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
+  gdb_assert (pseudo_reg_num >= gdbarch_num_regs (gdbarch));
+
+  if (is_q_pseudo (gdbarch, pseudo_reg_num))
+    {
+      /* Quad-precision register.  */
+      return arm_neon_quad_read_value (gdbarch, next_frame, pseudo_reg_num,
+				       pseudo_reg_num - tdep->q_pseudo_base);
+    }
+  else if (is_mve_pseudo (gdbarch, pseudo_reg_num))
+    return arm_mve_pseudo_read_value (gdbarch, next_frame, pseudo_reg_num);
   else
     {
-      enum register_status status;
+      int s_reg_index = pseudo_reg_num - tdep->s_pseudo_base;
 
       /* Single-precision register.  */
-      gdb_assert (regnum < 32);
+      gdb_assert (s_reg_index < 32);
 
       /* s0 is always the least significant half of d0.  */
+      int offset;
       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
-	offset = (regnum & 1) ? 0 : 4;
+	offset = (s_reg_index & 1) ? 0 : 4;
       else
-	offset = (regnum & 1) ? 4 : 0;
+	offset = (s_reg_index & 1) ? 4 : 0;
+
+      std::string raw_reg_name = string_printf ("d%d", s_reg_index >> 1);
+      int double_regnum
+	= user_reg_map_name_to_regnum (gdbarch, raw_reg_name.c_str (),
+				       raw_reg_name.length ());
 
-      xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
-      double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
-						   strlen (name_buf));
-
-      status = regcache->raw_read (double_regnum, reg_buf);
-      if (status == REG_VALID)
-	memcpy (buf, reg_buf + offset, 4);
-      return status;
+      return pseudo_from_raw_part (next_frame, pseudo_reg_num, double_regnum,
+				   offset);
     }
 }
 
@@ -8694,66 +9898,87 @@ arm_neon_quad_write (struct gdbarch *gdb
 		     int regnum, const gdb_byte *buf)
 {
   char name_buf[4];
-  int offset, double_regnum;
+  int double_regnum;
 
   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
 					       strlen (name_buf));
 
-  /* d0 is always the least significant half of q0.  */
-  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
-    offset = 8;
-  else
-    offset = 0;
+  regcache->raw_write (double_regnum, buf);
+  regcache->raw_write (double_regnum + 1, buf + 8);
+}
+
+static void
+arm_neon_quad_write (gdbarch *gdbarch, frame_info_ptr next_frame,
+		     int quad_reg_index, gdb::array_view<const gdb_byte> buf)
+{
+  std::string raw_reg_name = string_printf ("d%d", quad_reg_index << 1);
+  int double_regnum
+    = user_reg_map_name_to_regnum (gdbarch, raw_reg_name.data (),
+				   raw_reg_name.length ());
 
-  regcache->raw_write (double_regnum, buf + offset);
-  offset = 8 - offset;
-  regcache->raw_write (double_regnum + 1, buf + offset);
+  pseudo_to_concat_raw (next_frame, buf, double_regnum, double_regnum + 1);
 }
 
+/* Store the contents of BUF to the MVE pseudo register REGNUM.  */
+
 static void
-arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
-		  int regnum, const gdb_byte *buf)
+arm_mve_pseudo_write (gdbarch *gdbarch, frame_info_ptr next_frame,
+		      int pseudo_reg_num, gdb::array_view<const gdb_byte> buf)
 {
-  const int num_regs = gdbarch_num_regs (gdbarch);
-  char name_buf[4];
-  gdb_byte reg_buf[8];
-  int offset, double_regnum;
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  /* P0 is the first 16 bits of VPR.  */
+  pseudo_to_raw_part(next_frame, buf, tdep->mve_vpr_regnum, 0);
+}
+
+static void
+arm_pseudo_write (gdbarch *gdbarch, frame_info_ptr next_frame,
+		  const int pseudo_reg_num,
+		  gdb::array_view<const gdb_byte> buf)
+{
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
-  gdb_assert (regnum >= num_regs);
-  regnum -= num_regs;
+  gdb_assert (pseudo_reg_num >= gdbarch_num_regs (gdbarch));
 
-  if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
-    /* Quad-precision register.  */
-    arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
+  if (is_q_pseudo (gdbarch, pseudo_reg_num))
+    {
+      /* Quad-precision register.  */
+      arm_neon_quad_write (gdbarch, next_frame,
+			   pseudo_reg_num - tdep->q_pseudo_base, buf);
+    }
+  else if (is_mve_pseudo (gdbarch, pseudo_reg_num))
+    arm_mve_pseudo_write (gdbarch, next_frame, pseudo_reg_num, buf);
   else
     {
+      int s_reg_index = pseudo_reg_num - tdep->s_pseudo_base;
+
       /* Single-precision register.  */
-      gdb_assert (regnum < 32);
+      gdb_assert (s_reg_index < 32);
 
       /* s0 is always the least significant half of d0.  */
+      int offset;
       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
-	offset = (regnum & 1) ? 0 : 4;
+	offset = (s_reg_index & 1) ? 0 : 4;
       else
-	offset = (regnum & 1) ? 4 : 0;
+	offset = (s_reg_index & 1) ? 4 : 0;
 
-      xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
-      double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
-						   strlen (name_buf));
+      std::string raw_reg_name = string_printf ("d%d", s_reg_index >> 1);
+      int double_regnum
+	= user_reg_map_name_to_regnum (gdbarch, raw_reg_name.c_str (),
+				       raw_reg_name.length ());
 
-      regcache->raw_read (double_regnum, reg_buf);
-      memcpy (reg_buf + offset, buf, 4);
-      regcache->raw_write (double_regnum, reg_buf);
+      pseudo_to_raw_part (next_frame, buf, double_regnum, offset);
     }
 }
 
 static struct value *
-value_of_arm_user_reg (struct frame_info *frame, const void *baton)
+value_of_arm_user_reg (frame_info_ptr frame, const void *baton)
 {
   const int *reg_p = (const int *) baton;
-  return value_of_register (*reg_p, frame);
+  return value_of_register (*reg_p, get_next_frame_sentinel_okay (frame));
 }
-
+
 static enum gdb_osabi
 arm_elf_osabi_sniffer (bfd *abfd)
 {
@@ -8765,9 +9990,10 @@ arm_elf_osabi_sniffer (bfd *abfd)
   if (elfosabi == ELFOSABI_ARM)
     /* GNU tools use this value.  Check note sections in this case,
        as well.  */
-    bfd_map_over_sections (abfd,
-			   generic_elf_osabi_sniff_abi_tag_sections, 
-			   &osabi);
+    {
+      for (asection *sect : gdb_bfd_sections (abfd))
+	generic_elf_osabi_sniff_abi_tag_sections (abfd, sect, &osabi);
+    }
 
   /* Anything else will be handled by the generic ELF sniffer.  */
   return osabi;
@@ -8775,7 +10001,7 @@ arm_elf_osabi_sniffer (bfd *abfd)
 
 static int
 arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
-			  struct reggroup *group)
+			 const struct reggroup *group)
 {
   /* FPS register's type is INT, but belongs to float_reggroup.  Beside
      this, FPS register belongs to save_regroup, restore_reggroup, and
@@ -8800,7 +10026,9 @@ arm_register_reggroup_p (struct gdbarch
 static void
 arm_register_g_packet_guesses (struct gdbarch *gdbarch)
 {
-  if (gdbarch_tdep (gdbarch)->is_m)
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (tdep->is_m)
     {
       const target_desc *tdesc;
 
@@ -8822,6 +10050,15 @@ arm_register_g_packet_guesses (struct gd
       register_remote_g_packet_guess (gdbarch,
 				      ARM_CORE_REGS_SIZE + ARM_VFP2_REGS_SIZE,
 				      tdesc);
+      /* M-profile plus MVE.  */
+      tdesc = arm_read_mprofile_description (ARM_M_TYPE_MVE);
+      register_remote_g_packet_guess (gdbarch, ARM_CORE_REGS_SIZE
+				      + ARM_VFP2_REGS_SIZE
+				      + ARM_INT_REGISTER_SIZE, tdesc);
+
+      /* M-profile system (stack pointers).  */
+      tdesc = arm_read_mprofile_description (ARM_M_TYPE_SYSTEM);
+      register_remote_g_packet_guess (gdbarch, 2 * ARM_INT_REGISTER_SIZE, tdesc);
     }
 
   /* Otherwise we don't have a useful guess.  */
@@ -8830,10 +10067,11 @@ arm_register_g_packet_guesses (struct gd
 /* Implement the code_of_frame_writable gdbarch method.  */
 
 static int
-arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
+arm_code_of_frame_writable (struct gdbarch *gdbarch, frame_info_ptr frame)
 {
-  if (gdbarch_tdep (gdbarch)->is_m
-      && get_frame_type (frame) == SIGTRAMP_FRAME)
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
+
+  if (tdep->is_m && get_frame_type (frame) == SIGTRAMP_FRAME)
     {
       /* M-profile exception frames return to some magic PCs, where
 	 isn't writable at all.  */
@@ -8854,6 +10092,17 @@ arm_gnu_triplet_regexp (struct gdbarch *
   return gdbarch_bfd_arch_info (gdbarch)->arch_name;
 }
 
+/* Implement the "get_pc_address_flags" gdbarch method.  */
+
+static std::string
+arm_get_pc_address_flags (frame_info_ptr frame, CORE_ADDR pc)
+{
+  if (get_frame_pc_masked (frame))
+    return "PAC";
+
+  return "";
+}
+
 /* Initialize the current architecture based on INFO.  If possible,
    re-use an architecture from ARCHES, which is a list of
    architectures already created during this debugging session.
@@ -8864,18 +10113,32 @@ arm_gnu_triplet_regexp (struct gdbarch *
 static struct gdbarch *
 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
-  struct gdbarch_tdep *tdep;
-  struct gdbarch *gdbarch;
   struct gdbarch_list *best_arch;
   enum arm_abi_kind arm_abi = arm_abi_global;
   enum arm_float_model fp_model = arm_fp_model;
-  struct tdesc_arch_data *tdesc_data = NULL;
-  int i, is_m = 0;
-  int vfp_register_count = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
-  int have_wmmx_registers = 0;
-  int have_neon = 0;
-  int have_fpa_registers = 1;
+  tdesc_arch_data_up tdesc_data;
+  int i;
+  bool is_m = false;
+  bool have_sec_ext = false;
+  int vfp_register_count = 0;
+  bool have_s_pseudos = false, have_q_pseudos = false;
+  bool have_wmmx_registers = false;
+  bool have_neon = false;
+  bool have_fpa_registers = true;
   const struct target_desc *tdesc = info.target_desc;
+  bool have_vfp = false;
+  bool have_mve = false;
+  bool have_pacbti = false;
+  int mve_vpr_regnum = -1;
+  int register_count = ARM_NUM_REGS;
+  bool have_m_profile_msp = false;
+  int m_profile_msp_regnum = -1;
+  int m_profile_psp_regnum = -1;
+  int m_profile_msp_ns_regnum = -1;
+  int m_profile_psp_ns_regnum = -1;
+  int m_profile_msp_s_regnum = -1;
+  int m_profile_psp_s_regnum = -1;
+  int tls_regnum = 0;
 
   /* If we have an object to base this architecture on, try to determine
      its ABI.  */
@@ -8990,8 +10253,37 @@ arm_gdbarch_init (struct gdbarch_info in
 	      if (!tdesc_has_registers (tdesc)
 		  && (attr_arch == TAG_CPU_ARCH_V6_M
 		      || attr_arch == TAG_CPU_ARCH_V6S_M
+		      || attr_arch == TAG_CPU_ARCH_V7E_M
+		      || attr_arch == TAG_CPU_ARCH_V8M_BASE
+		      || attr_arch == TAG_CPU_ARCH_V8M_MAIN
+		      || attr_arch == TAG_CPU_ARCH_V8_1M_MAIN
 		      || attr_profile == 'M'))
-		is_m = 1;
+		is_m = true;
+
+	      /* Look for attributes that indicate support for ARMv8.1-m
+		 PACBTI.  */
+	      if (!tdesc_has_registers (tdesc) && is_m)
+		{
+		  int attr_pac_extension
+		    = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
+						Tag_PAC_extension);
+
+		  int attr_bti_extension
+		    = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
+						Tag_BTI_extension);
+
+		  int attr_pacret_use
+		    = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
+						Tag_PACRET_use);
+
+		  int attr_bti_use
+		    = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
+						Tag_BTI_use);
+
+		  if (attr_pac_extension != 0 || attr_bti_extension != 0
+		      || attr_pacret_use != 0 || attr_bti_use != 0)
+		    have_pacbti = true;
+		}
 #endif
 	    }
 
@@ -9049,35 +10341,61 @@ arm_gdbarch_init (struct gdbarch_info in
 	  if (feature == NULL)
 	    return NULL;
 	  else
-	    is_m = 1;
+	    is_m = true;
 	}
 
       tdesc_data = tdesc_data_alloc ();
 
       valid_p = 1;
       for (i = 0; i < ARM_SP_REGNUM; i++)
-	valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
+	valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i,
 					    arm_register_names[i]);
-      valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
+      valid_p &= tdesc_numbered_register_choices (feature, tdesc_data.get (),
 						  ARM_SP_REGNUM,
 						  arm_sp_names);
-      valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
+      valid_p &= tdesc_numbered_register_choices (feature, tdesc_data.get (),
 						  ARM_LR_REGNUM,
 						  arm_lr_names);
-      valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
+      valid_p &= tdesc_numbered_register_choices (feature, tdesc_data.get (),
 						  ARM_PC_REGNUM,
 						  arm_pc_names);
       if (is_m)
-	valid_p &= tdesc_numbered_register (feature, tdesc_data,
+	valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
 					    ARM_PS_REGNUM, "xpsr");
       else
-	valid_p &= tdesc_numbered_register (feature, tdesc_data,
+	valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
 					    ARM_PS_REGNUM, "cpsr");
 
       if (!valid_p)
+	return NULL;
+
+      if (is_m)
 	{
-	  tdesc_data_cleanup (tdesc_data);
-	  return NULL;
+	  feature = tdesc_find_feature (tdesc,
+					"org.gnu.gdb.arm.m-system");
+	  if (feature != nullptr)
+	    {
+	      /* MSP */
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+						  register_count, "msp");
+	      if (!valid_p)
+		{
+		  warning (_("M-profile m-system feature is missing required register msp."));
+		  return nullptr;
+		}
+	      have_m_profile_msp = true;
+	      m_profile_msp_regnum = register_count++;
+
+	      /* PSP */
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+						  register_count, "psp");
+	      if (!valid_p)
+		{
+		  warning (_("M-profile m-system feature is missing required register psp."));
+		  return nullptr;
+		}
+	      m_profile_psp_regnum = register_count++;
+	    }
 	}
 
       feature = tdesc_find_feature (tdesc,
@@ -9086,16 +10404,13 @@ arm_gdbarch_init (struct gdbarch_info in
 	{
 	  valid_p = 1;
 	  for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
-	    valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
+	    valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i,
 						arm_register_names[i]);
 	  if (!valid_p)
-	    {
-	      tdesc_data_cleanup (tdesc_data);
-	      return NULL;
-	    }
+	    return NULL;
 	}
       else
-	have_fpa_registers = 0;
+	have_fpa_registers = false;
 
       feature = tdesc_find_feature (tdesc,
 				    "org.gnu.gdb.xscale.iwmmxt");
@@ -9111,27 +10426,24 @@ arm_gdbarch_init (struct gdbarch_info in
 	  valid_p = 1;
 	  for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
 	    valid_p
-	      &= tdesc_numbered_register (feature, tdesc_data, i,
+	      &= tdesc_numbered_register (feature, tdesc_data.get (), i,
 					  iwmmxt_names[i - ARM_WR0_REGNUM]);
 
 	  /* Check for the control registers, but do not fail if they
 	     are missing.  */
 	  for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
-	    tdesc_numbered_register (feature, tdesc_data, i,
+	    tdesc_numbered_register (feature, tdesc_data.get (), i,
 				     iwmmxt_names[i - ARM_WR0_REGNUM]);
 
 	  for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
 	    valid_p
-	      &= tdesc_numbered_register (feature, tdesc_data, i,
+	      &= tdesc_numbered_register (feature, tdesc_data.get (), i,
 					  iwmmxt_names[i - ARM_WR0_REGNUM]);
 
 	  if (!valid_p)
-	    {
-	      tdesc_data_cleanup (tdesc_data);
-	      return NULL;
-	    }
+	    return NULL;
 
-	  have_wmmx_registers = 1;
+	  have_wmmx_registers = true;
 	}
 
       /* If we have a VFP unit, check whether the single precision registers
@@ -9153,7 +10465,7 @@ arm_gdbarch_init (struct gdbarch_info in
 	  valid_p = 1;
 	  for (i = 0; i < 32; i++)
 	    {
-	      valid_p &= tdesc_numbered_register (feature, tdesc_data,
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
 						  ARM_D0_REGNUM + i,
 						  vfp_double_names[i]);
 	      if (!valid_p)
@@ -9163,16 +10475,15 @@ arm_gdbarch_init (struct gdbarch_info in
 	    valid_p = 1;
 
 	  /* Also require FPSCR.  */
-	  valid_p &= tdesc_numbered_register (feature, tdesc_data,
+	  valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
 					      ARM_FPSCR_REGNUM, "fpscr");
 	  if (!valid_p)
-	    {
-	      tdesc_data_cleanup (tdesc_data);
-	      return NULL;
-	    }
+	    return NULL;
+
+	  have_vfp = true;
 
 	  if (tdesc_unnumbered_register (feature, "s0") == 0)
-	    have_vfp_pseudos = 1;
+	    have_s_pseudos = true;
 
 	  vfp_register_count = i;
 
@@ -9185,19 +10496,128 @@ arm_gdbarch_init (struct gdbarch_info in
 	    {
 	      /* NEON requires 32 double-precision registers.  */
 	      if (i != 32)
-		{
-		  tdesc_data_cleanup (tdesc_data);
-		  return NULL;
-		}
+		return NULL;
 
 	      /* If there are quad registers defined by the stub, use
 		 their type; otherwise (normally) provide them with
 		 the default type.  */
 	      if (tdesc_unnumbered_register (feature, "q0") == 0)
-		have_neon_pseudos = 1;
+		have_q_pseudos = true;
+	    }
+	}
+
+      /* Check for the TLS register feature.  */
+      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.arm.tls");
+      if (feature != nullptr)
+	{
+	  valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+					      register_count, "tpidruro");
+	  if (!valid_p)
+	    return nullptr;
+
+	  tls_regnum = register_count;
+	  register_count++;
+	}
+
+      /* Check for MVE after all the checks for GPR's, VFP and Neon.
+	 MVE (Helium) is an M-profile extension.  */
+      if (is_m)
+	{
+	  /* Do we have the MVE feature?  */
+	  feature = tdesc_find_feature (tdesc,"org.gnu.gdb.arm.m-profile-mve");
+
+	  if (feature != nullptr)
+	    {
+	      /* If we have MVE, we must always have the VPR register.  */
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+						  register_count, "vpr");
+	      if (!valid_p)
+		{
+		  warning (_("MVE feature is missing required register vpr."));
+		  return nullptr;
+		}
+
+	      have_mve = true;
+	      mve_vpr_regnum = register_count;
+	      register_count++;
+
+	      /* We can't have Q pseudo registers available here, as that
+		 would mean we have NEON features, and that is only available
+		 on A and R profiles.  */
+	      gdb_assert (!have_q_pseudos);
+
+	      /* Given we have a M-profile target description, if MVE is
+		 enabled and there are VFP registers, we should have Q
+		 pseudo registers (Q0 ~ Q7).  */
+	      if (have_vfp)
+		have_q_pseudos = true;
+	    }
+
+	  /* Do we have the ARMv8.1-m PACBTI feature?  */
+	  feature = tdesc_find_feature (tdesc,
+					"org.gnu.gdb.arm.m-profile-pacbti");
+	  if (feature != nullptr)
+	    {
+	      /* By advertising this feature, the target acknowledges the
+		 presence of the ARMv8.1-m PACBTI extensions.
+
+		 We don't care for any particular registers in this group, so
+		 the target is free to include whatever it deems appropriate.
+
+		 The expectation is for this feature to include the PAC
+		 keys.  */
+	      have_pacbti = true;
+	    }
 
-	      have_neon = 1;
+	  /* Do we have the Security extension?  */
+	  feature = tdesc_find_feature (tdesc,
+					"org.gnu.gdb.arm.secext");
+	  if (feature != nullptr)
+	    {
+	      /* Secure/Non-secure stack pointers.  */
+	      /* MSP_NS */
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+						 register_count, "msp_ns");
+	      if (!valid_p)
+		{
+		  warning (_("M-profile secext feature is missing required register msp_ns."));
+		  return nullptr;
+		}
+	      m_profile_msp_ns_regnum = register_count++;
+
+	      /* PSP_NS */
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+						 register_count, "psp_ns");
+	      if (!valid_p)
+		{
+		  warning (_("M-profile secext feature is missing required register psp_ns."));
+		  return nullptr;
+		}
+	      m_profile_psp_ns_regnum = register_count++;
+
+	      /* MSP_S */
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+						 register_count, "msp_s");
+	      if (!valid_p)
+		{
+		  warning (_("M-profile secext feature is missing required register msp_s."));
+		  return nullptr;
+		}
+	      m_profile_msp_s_regnum = register_count++;
+
+	      /* PSP_S */
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
+						 register_count, "psp_s");
+	      if (!valid_p)
+		{
+		  warning (_("M-profile secext feature is missing required register psp_s."));
+		  return nullptr;
+		}
+	      m_profile_psp_s_regnum = register_count++;
+
+	      have_sec_ext = true;
 	    }
+
 	}
     }
 
@@ -9206,12 +10626,13 @@ arm_gdbarch_init (struct gdbarch_info in
        best_arch != NULL;
        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
     {
-      if (arm_abi != ARM_ABI_AUTO
-	  && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
+      arm_gdbarch_tdep *tdep
+	= gdbarch_tdep<arm_gdbarch_tdep> (best_arch->gdbarch);
+
+      if (arm_abi != ARM_ABI_AUTO && arm_abi != tdep->arm_abi)
 	continue;
 
-      if (fp_model != ARM_FLOAT_AUTO
-	  && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
+      if (fp_model != ARM_FLOAT_AUTO && fp_model != tdep->fp_model)
 	continue;
 
       /* There are various other properties in tdep that we do not
@@ -9220,7 +10641,12 @@ arm_gdbarch_init (struct gdbarch_info in
 	 automatically disqualified.  */
 
       /* Do check is_m, though, since it might come from the binary.  */
-      if (is_m != gdbarch_tdep (best_arch->gdbarch)->is_m)
+      if (is_m != tdep->is_m)
+	continue;
+
+      /* Also check for ARMv8.1-m PACBTI support, since it might come from
+	 the binary.  */
+      if (have_pacbti != tdep->have_pacbti)
 	continue;
 
       /* Found a match.  */
@@ -9228,29 +10654,49 @@ arm_gdbarch_init (struct gdbarch_info in
     }
 
   if (best_arch != NULL)
-    {
-      if (tdesc_data != NULL)
-	tdesc_data_cleanup (tdesc_data);
-      return best_arch->gdbarch;
-    }
+    return best_arch->gdbarch;
 
-  tdep = XCNEW (struct gdbarch_tdep);
-  gdbarch = gdbarch_alloc (&info, tdep);
+  gdbarch *gdbarch
+    = gdbarch_alloc (&info, gdbarch_tdep_up (new arm_gdbarch_tdep));
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   /* Record additional information about the architecture we are defining.
      These are gdbarch discriminators, like the OSABI.  */
   tdep->arm_abi = arm_abi;
   tdep->fp_model = fp_model;
   tdep->is_m = is_m;
+  tdep->have_sec_ext = have_sec_ext;
   tdep->have_fpa_registers = have_fpa_registers;
   tdep->have_wmmx_registers = have_wmmx_registers;
   gdb_assert (vfp_register_count == 0
 	      || vfp_register_count == 16
 	      || vfp_register_count == 32);
   tdep->vfp_register_count = vfp_register_count;
-  tdep->have_vfp_pseudos = have_vfp_pseudos;
-  tdep->have_neon_pseudos = have_neon_pseudos;
+  tdep->have_s_pseudos = have_s_pseudos;
+  tdep->have_q_pseudos = have_q_pseudos;
   tdep->have_neon = have_neon;
+  tdep->tls_regnum = tls_regnum;
+
+  /* Adjust the MVE feature settings.  */
+  if (have_mve)
+    {
+      tdep->have_mve = true;
+      tdep->mve_vpr_regnum = mve_vpr_regnum;
+    }
+
+  /* Adjust the PACBTI feature settings.  */
+  tdep->have_pacbti = have_pacbti;
+
+  /* Adjust the M-profile stack pointers settings.  */
+  if (have_m_profile_msp)
+    {
+      tdep->m_profile_msp_regnum = m_profile_msp_regnum;
+      tdep->m_profile_psp_regnum = m_profile_psp_regnum;
+      tdep->m_profile_msp_ns_regnum = m_profile_msp_ns_regnum;
+      tdep->m_profile_psp_ns_regnum = m_profile_psp_ns_regnum;
+      tdep->m_profile_msp_s_regnum = m_profile_msp_s_regnum;
+      tdep->m_profile_psp_s_regnum = m_profile_psp_s_regnum;
+    }
 
   arm_register_g_packet_guesses (gdbarch);
 
@@ -9274,8 +10720,7 @@ arm_gdbarch_init (struct gdbarch_info in
       break;
 
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("arm_gdbarch_init: bad byte order for float format"));
+      internal_error (_("arm_gdbarch_init: bad byte order for float format"));
     }
 
   /* On ARM targets char defaults to unsigned.  */
@@ -9293,7 +10738,9 @@ arm_gdbarch_init (struct gdbarch_info in
   /* Note: for displaced stepping, this includes the breakpoint, and one word
      of additional scratch space.  This setting isn't used for anything beside
      displaced stepping at present.  */
-  set_gdbarch_max_insn_length (gdbarch, 4 * ARM_DISPLACED_MODIFIED_INSNS);
+  set_gdbarch_displaced_step_buffer_length
+    (gdbarch, 4 * ARM_DISPLACED_MODIFIED_INSNS);
+  set_gdbarch_max_insn_length (gdbarch, 4);
 
   /* This should be low enough for everything.  */
   tdep->lowest_pc = 0x20;
@@ -9337,13 +10784,13 @@ arm_gdbarch_init (struct gdbarch_info in
   /* Information about registers, etc.  */
   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
-  set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
+  set_gdbarch_num_regs (gdbarch, register_count);
   set_gdbarch_register_type (gdbarch, arm_register_type);
   set_gdbarch_register_reggroup_p (gdbarch, arm_register_reggroup_p);
 
   /* This "info float" is FPA-specific.  Use the generic version if we
      do not have FPA.  */
-  if (gdbarch_tdep (gdbarch)->have_fpa_registers)
+  if (tdep->have_fpa_registers)
     set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
 
   /* Internal <-> external register number maps.  */
@@ -9353,7 +10800,7 @@ arm_gdbarch_init (struct gdbarch_info in
   set_gdbarch_register_name (gdbarch, arm_register_name);
 
   /* Returning results.  */
-  set_gdbarch_return_value (gdbarch, arm_return_value);
+  set_gdbarch_return_value_as_value (gdbarch, arm_return_value);
 
   /* Disassembly.  */
   set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
@@ -9420,31 +10867,70 @@ arm_gdbarch_init (struct gdbarch_info in
       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
     }
 
-  if (have_vfp_pseudos)
-    {
-      /* NOTE: These are the only pseudo registers used by
-	 the ARM target at the moment.  If more are added, a
-	 little more care in numbering will be needed.  */
-
-      int num_pseudos = 32;
-      if (have_neon_pseudos)
-	num_pseudos += 16;
-      set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
-      set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
-      set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
-    }
+  /* Hook used to decorate frames with signed return addresses, only available
+     for ARMv8.1-m PACBTI.  */
+  if (is_m && have_pacbti)
+    set_gdbarch_get_pc_address_flags (gdbarch, arm_get_pc_address_flags);
 
-  if (tdesc_data)
+  if (tdesc_data != nullptr)
     {
       set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
 
-      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+      tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
+      register_count = gdbarch_num_regs (gdbarch);
 
       /* Override tdesc_register_type to adjust the types of VFP
 	 registers for NEON.  */
       set_gdbarch_register_type (gdbarch, arm_register_type);
     }
 
+  /* Initialize the pseudo register data.  */
+  int num_pseudos = 0;
+  if (tdep->have_s_pseudos)
+    {
+      /* VFP single precision pseudo registers (S0~S31).  */
+      tdep->s_pseudo_base = register_count;
+      tdep->s_pseudo_count = 32;
+      num_pseudos += tdep->s_pseudo_count;
+
+      if (tdep->have_q_pseudos)
+	{
+	  /* NEON quad precision pseudo registers (Q0~Q15).  */
+	  tdep->q_pseudo_base = register_count + num_pseudos;
+
+	  if (have_neon)
+	    tdep->q_pseudo_count = 16;
+	  else if (have_mve)
+	    tdep->q_pseudo_count = ARM_MVE_NUM_Q_REGS;
+
+	  num_pseudos += tdep->q_pseudo_count;
+	}
+    }
+
+  /* Do we have any MVE pseudo registers?  */
+  if (have_mve)
+    {
+      tdep->mve_pseudo_base = register_count + num_pseudos;
+      tdep->mve_pseudo_count = 1;
+      num_pseudos += tdep->mve_pseudo_count;
+    }
+
+  /* Do we have any ARMv8.1-m PACBTI pseudo registers.  */
+  if (have_pacbti)
+    {
+      tdep->pacbti_pseudo_base = register_count + num_pseudos;
+      tdep->pacbti_pseudo_count = 1;
+      num_pseudos += tdep->pacbti_pseudo_count;
+    }
+
+  /* Set some pseudo register hooks, if we have pseudo registers.  */
+  if (tdep->have_s_pseudos || have_mve || have_pacbti)
+    {
+      set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
+      set_gdbarch_pseudo_register_read_value (gdbarch, arm_pseudo_read_value);
+      set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
+    }
+
   /* Add standard register aliases.  We add aliases even for those
      names which are used by the current architecture - it's simpler,
      and does no harm, since nothing ever lists user registers.  */
@@ -9463,24 +10949,76 @@ arm_gdbarch_init (struct gdbarch_info in
 static void
 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   if (tdep == NULL)
     return;
 
-  fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
-		      (unsigned long) tdep->lowest_pc);
+  gdb_printf (file, _("arm_dump_tdep: fp_model = %i\n"),
+	      (int) tdep->fp_model);
+  gdb_printf (file, _("arm_dump_tdep: have_fpa_registers = %i\n"),
+	      (int) tdep->have_fpa_registers);
+  gdb_printf (file, _("arm_dump_tdep: have_wmmx_registers = %i\n"),
+	      (int) tdep->have_wmmx_registers);
+  gdb_printf (file, _("arm_dump_tdep: vfp_register_count = %i\n"),
+	      (int) tdep->vfp_register_count);
+  gdb_printf (file, _("arm_dump_tdep: have_s_pseudos = %s\n"),
+	      tdep->have_s_pseudos ? "true" : "false");
+  gdb_printf (file, _("arm_dump_tdep: s_pseudo_base = %i\n"),
+	      (int) tdep->s_pseudo_base);
+  gdb_printf (file, _("arm_dump_tdep: s_pseudo_count = %i\n"),
+	      (int) tdep->s_pseudo_count);
+  gdb_printf (file, _("arm_dump_tdep: have_q_pseudos = %s\n"),
+	      tdep->have_q_pseudos ? "true" : "false");
+  gdb_printf (file, _("arm_dump_tdep: q_pseudo_base = %i\n"),
+	      (int) tdep->q_pseudo_base);
+  gdb_printf (file, _("arm_dump_tdep: q_pseudo_count = %i\n"),
+	      (int) tdep->q_pseudo_count);
+  gdb_printf (file, _("arm_dump_tdep: have_neon = %i\n"),
+	      (int) tdep->have_neon);
+  gdb_printf (file, _("arm_dump_tdep: have_mve = %s\n"),
+	      tdep->have_mve ? "yes" : "no");
+  gdb_printf (file, _("arm_dump_tdep: mve_vpr_regnum = %i\n"),
+	      tdep->mve_vpr_regnum);
+  gdb_printf (file, _("arm_dump_tdep: mve_pseudo_base = %i\n"),
+	      tdep->mve_pseudo_base);
+  gdb_printf (file, _("arm_dump_tdep: mve_pseudo_count = %i\n"),
+	      tdep->mve_pseudo_count);
+  gdb_printf (file, _("arm_dump_tdep: m_profile_msp_regnum = %i\n"),
+	      tdep->m_profile_msp_regnum);
+  gdb_printf (file, _("arm_dump_tdep: m_profile_psp_regnum = %i\n"),
+	      tdep->m_profile_psp_regnum);
+  gdb_printf (file, _("arm_dump_tdep: m_profile_msp_ns_regnum = %i\n"),
+	      tdep->m_profile_msp_ns_regnum);
+  gdb_printf (file, _("arm_dump_tdep: m_profile_psp_ns_regnum = %i\n"),
+	      tdep->m_profile_psp_ns_regnum);
+  gdb_printf (file, _("arm_dump_tdep: m_profile_msp_s_regnum = %i\n"),
+	      tdep->m_profile_msp_s_regnum);
+  gdb_printf (file, _("arm_dump_tdep: m_profile_psp_s_regnum = %i\n"),
+	      tdep->m_profile_psp_s_regnum);
+  gdb_printf (file, _("arm_dump_tdep: Lowest pc = 0x%lx\n"),
+	      (unsigned long) tdep->lowest_pc);
+  gdb_printf (file, _("arm_dump_tdep: have_pacbti = %s\n"),
+	      tdep->have_pacbti ? "yes" : "no");
+  gdb_printf (file, _("arm_dump_tdep: pacbti_pseudo_base = %i\n"),
+	      tdep->pacbti_pseudo_base);
+  gdb_printf (file, _("arm_dump_tdep: pacbti_pseudo_count = %i\n"),
+	      tdep->pacbti_pseudo_count);
+  gdb_printf (file, _("arm_dump_tdep: is_m = %s\n"),
+	      tdep->is_m ? "yes" : "no");
 }
 
 #if GDB_SELF_TEST
 namespace selftests
 {
 static void arm_record_test (void);
+static void arm_analyze_prologue_test ();
 }
 #endif
 
+void _initialize_arm_tdep ();
 void
-_initialize_arm_tdep (void)
+_initialize_arm_tdep ()
 {
   long length;
   int i, j;
@@ -9490,7 +11028,7 @@ _initialize_arm_tdep (void)
   gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
 
   /* Add ourselves to objfile event chain.  */
-  gdb::observers::new_objfile.attach (arm_exidx_new_objfile);
+  gdb::observers::new_objfile.attach (arm_exidx_new_objfile, "arm-tdep");
 
   /* Register an ELF OS ABI sniffer for ARM binaries.  */
   gdbarch_register_osabi_sniffer (bfd_arch_arm,
@@ -9498,32 +11036,31 @@ _initialize_arm_tdep (void)
 				  arm_elf_osabi_sniffer);
 
   /* Add root prefix command for all "set arm"/"show arm" commands.  */
-  add_prefix_cmd ("arm", no_class, set_arm_command,
-		  _("Various ARM-specific commands."),
-		  &setarmcmdlist, "set arm ", 0, &setlist);
-
-  add_prefix_cmd ("arm", no_class, show_arm_command,
-		  _("Various ARM-specific commands."),
-		  &showarmcmdlist, "show arm ", 0, &showlist);
-
+  add_setshow_prefix_cmd ("arm", no_class,
+			  _("Various ARM-specific commands."),
+			  _("Various ARM-specific commands."),
+			  &setarmcmdlist, &showarmcmdlist,
+			  &setlist, &showlist);
 
   arm_disassembler_options = xstrdup ("reg-names-std");
   const disasm_options_t *disasm_options
     = &disassembler_options_arm ()->options;
   int num_disassembly_styles = 0;
   for (i = 0; disasm_options->name[i] != NULL; i++)
-    if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
+    if (startswith (disasm_options->name[i], "reg-names-"))
       num_disassembly_styles++;
 
   /* Initialize the array that will be passed to add_setshow_enum_cmd().  */
   valid_disassembly_styles = XNEWVEC (const char *,
 				      num_disassembly_styles + 1);
   for (i = j = 0; disasm_options->name[i] != NULL; i++)
-    if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
+    if (startswith (disasm_options->name[i], "reg-names-"))
       {
 	size_t offset = strlen ("reg-names-");
 	const char *style = disasm_options->name[i];
 	valid_disassembly_styles[j++] = &style[offset];
+	if (strcmp (&style[offset], "std") == 0)
+	  disassembly_style = &style[offset];
 	length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
 			   disasm_options->description[i]);
 	rdptr += length;
@@ -9590,6 +11127,15 @@ vfp - VFP co-processor."),
 			NULL, NULL, arm_show_force_mode,
 			&setarmcmdlist, &showarmcmdlist);
 
+  /* Add a command to stop triggering security exceptions when
+     unwinding exception stacks.  */
+  add_setshow_boolean_cmd ("unwind-secure-frames", no_class, &arm_unwind_secure_frames,
+			   _("Set usage of non-secure to secure exception stack unwinding."),
+			   _("Show usage of non-secure to secure exception stack unwinding."),
+			   _("When on, the debugger can trigger memory access traps."),
+			   NULL, arm_show_unwind_secure_frames,
+			   &setarmcmdlist, &showarmcmdlist);
+
   /* Debugging flag.  */
   add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
 			   _("Set ARM debugging."),
@@ -9601,6 +11147,7 @@ vfp - VFP co-processor."),
 
 #if GDB_SELF_TEST
   selftests::register_test ("arm-record", selftests::arm_record_test);
+  selftests::register_test ("arm_analyze_prologue", selftests::arm_analyze_prologue_test);
 #endif
 
 }
@@ -9617,33 +11164,33 @@ vfp - VFP co-processor."),
 #define INSN_S_L_BIT_NUM 20
 
 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
-        do  \
-          { \
-            unsigned int reg_len = LENGTH; \
-            if (reg_len) \
-              { \
-                REGS = XNEWVEC (uint32_t, reg_len); \
-                memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
-              } \
-          } \
-        while (0)
+	do  \
+	  { \
+	    unsigned int reg_len = LENGTH; \
+	    if (reg_len) \
+	      { \
+		REGS = XNEWVEC (uint32_t, reg_len); \
+		memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
+	      } \
+	  } \
+	while (0)
 
 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
-        do  \
-          { \
-            unsigned int mem_len = LENGTH; \
-            if (mem_len) \
-            { \
-              MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
-              memcpy(&MEMS->len, &RECORD_BUF[0], \
-                     sizeof(struct arm_mem_r) * LENGTH); \
-            } \
-          } \
-          while (0)
+	do  \
+	  { \
+	    unsigned int mem_len = LENGTH; \
+	    if (mem_len) \
+	      { \
+		MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
+		memcpy(&MEMS->len, &RECORD_BUF[0], \
+		       sizeof(struct arm_mem_r) * LENGTH); \
+	      } \
+	  } \
+	  while (0)
 
 /* Checks whether insn is already recorded or yet to be decoded. (boolean expression).  */
 #define INSN_RECORDED(ARM_RECORD) \
-        (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
+	(0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
 
 /* ARM memory record structure.  */
 struct arm_mem_r
@@ -9657,7 +11204,7 @@ struct arm_mem_r
    contains list of to-be-modified registers and
    memory blocks (on return from decode_insn()).  */
 
-typedef struct insn_decode_record_t
+struct arm_insn_decode_record
 {
   struct gdbarch *gdbarch;
   struct regcache *regcache;
@@ -9670,7 +11217,7 @@ typedef struct insn_decode_record_t
   uint32_t reg_rec_count;       /* No of reg records.  */
   uint32_t *arm_regs;           /* Registers to be saved for this record.  */
   struct arm_mem_r *arm_mems;   /* Memory to be saved for this record.  */
-} insn_decode_record;
+};
 
 
 /* Checks ARM SBZ and SBO mandatory fields.  */
@@ -9689,9 +11236,9 @@ sbo_sbz (uint32_t insn, uint32_t bit_num
   while (ones)
     {
       if (!(ones & sbo))
-        {
-          return 0;
-        }
+	{
+	  return 0;
+	}
       ones = ones >> 1;
     }
   return 1;
@@ -9703,23 +11250,23 @@ enum arm_record_result
   ARM_RECORD_FAILURE = 1
 };
 
-typedef enum
+enum arm_record_strx_t
 {
   ARM_RECORD_STRH=1,
   ARM_RECORD_STRD
-} arm_record_strx_t;
+};
 
-typedef enum
+enum record_type_t
 {
   ARM_RECORD=1,
   THUMB_RECORD,
   THUMB2_RECORD
-} record_type_t;
+};
 
 
 static int
-arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf, 
-                 uint32_t *record_buf_mem, arm_record_strx_t str_type)
+arm_record_strx (arm_insn_decode_record *arm_insn_r, uint32_t *record_buf, 
+		 uint32_t *record_buf_mem, arm_record_strx_t str_type)
 {
 
   struct regcache *reg_cache = arm_insn_r->regcache;
@@ -9738,36 +11285,36 @@ arm_record_strx (insn_decode_record *arm
       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
       regcache_raw_read_unsigned (reg_cache, reg_src1,
-                                  &u_regval[0]);
+				  &u_regval[0]);
       if (ARM_PC_REGNUM == reg_src1)
-        {
-          /* If R15 was used as Rn, hence current PC+8.  */
-          u_regval[0] = u_regval[0] + 8;
-        }
+	{
+	  /* If R15 was used as Rn, hence current PC+8.  */
+	  u_regval[0] = u_regval[0] + 8;
+	}
       offset_8 = (immed_high << 4) | immed_low;
       /* Calculate target store address.  */
       if (14 == arm_insn_r->opcode)
-        {
-          tgt_mem_addr = u_regval[0] + offset_8;
-        }
-      else
-        {
-          tgt_mem_addr = u_regval[0] - offset_8;
-        }
+	{
+	  tgt_mem_addr = u_regval[0] + offset_8;
+	}
+      else
+	{
+	  tgt_mem_addr = u_regval[0] - offset_8;
+	}
       if (ARM_RECORD_STRH == str_type)
-        {
-          record_buf_mem[0] = 2;
-          record_buf_mem[1] = tgt_mem_addr;
-          arm_insn_r->mem_rec_count = 1;
-        }
+	{
+	  record_buf_mem[0] = 2;
+	  record_buf_mem[1] = tgt_mem_addr;
+	  arm_insn_r->mem_rec_count = 1;
+	}
       else if (ARM_RECORD_STRD == str_type)
-        {
-          record_buf_mem[0] = 4;
-          record_buf_mem[1] = tgt_mem_addr;
-          record_buf_mem[2] = 4;
-          record_buf_mem[3] = tgt_mem_addr + 4;
-          arm_insn_r->mem_rec_count = 2;
-        }
+	{
+	  record_buf_mem[0] = 4;
+	  record_buf_mem[1] = tgt_mem_addr;
+	  record_buf_mem[2] = 4;
+	  record_buf_mem[3] = tgt_mem_addr + 4;
+	  arm_insn_r->mem_rec_count = 2;
+	}
     }
   else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
     {
@@ -9779,36 +11326,36 @@ arm_record_strx (insn_decode_record *arm
       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
       if (15 == reg_src2)
-        {
-          /* If R15 was used as Rn, hence current PC+8.  */
-          u_regval[0] = u_regval[0] + 8;
-        }
+	{
+	  /* If R15 was used as Rn, hence current PC+8.  */
+	  u_regval[0] = u_regval[0] + 8;
+	}
       /* Calculate target store address, Rn +/- Rm, register offset.  */
       if (12 == arm_insn_r->opcode)
-        {
-          tgt_mem_addr = u_regval[0] + u_regval[1];
-        }
-      else
-        {
-          tgt_mem_addr = u_regval[1] - u_regval[0];
-        }
+	{
+	  tgt_mem_addr = u_regval[0] + u_regval[1];
+	}
+      else
+	{
+	  tgt_mem_addr = u_regval[1] - u_regval[0];
+	}
       if (ARM_RECORD_STRH == str_type)
-        {
-          record_buf_mem[0] = 2;
-          record_buf_mem[1] = tgt_mem_addr;
-          arm_insn_r->mem_rec_count = 1;
-        }
+	{
+	  record_buf_mem[0] = 2;
+	  record_buf_mem[1] = tgt_mem_addr;
+	  arm_insn_r->mem_rec_count = 1;
+	}
       else if (ARM_RECORD_STRD == str_type)
-        {
-          record_buf_mem[0] = 4;
-          record_buf_mem[1] = tgt_mem_addr;
-          record_buf_mem[2] = 4;
-          record_buf_mem[3] = tgt_mem_addr + 4;
-          arm_insn_r->mem_rec_count = 2;
-        }
+	{
+	  record_buf_mem[0] = 4;
+	  record_buf_mem[1] = tgt_mem_addr;
+	  record_buf_mem[2] = 4;
+	  record_buf_mem[3] = tgt_mem_addr + 4;
+	  arm_insn_r->mem_rec_count = 2;
+	}
     }
   else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
-           || 2 == arm_insn_r->opcode  || 6 == arm_insn_r->opcode)
+	   || 2 == arm_insn_r->opcode  || 6 == arm_insn_r->opcode)
     {
       /* 3) Store, immediate pre-indexed.  */
       /* 5) Store, immediate post-indexed.  */
@@ -9819,33 +11366,33 @@ arm_record_strx (insn_decode_record *arm
       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
       /* Calculate target store address, Rn +/- Rm, register offset.  */
       if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
-        {
-          tgt_mem_addr = u_regval[0] + offset_8;
-        }
-      else
-        {
-          tgt_mem_addr = u_regval[0] - offset_8;
-        }
+	{
+	  tgt_mem_addr = u_regval[0] + offset_8;
+	}
+      else
+	{
+	  tgt_mem_addr = u_regval[0] - offset_8;
+	}
       if (ARM_RECORD_STRH == str_type)
-        {
-          record_buf_mem[0] = 2;
-          record_buf_mem[1] = tgt_mem_addr;
-          arm_insn_r->mem_rec_count = 1;
-        }
+	{
+	  record_buf_mem[0] = 2;
+	  record_buf_mem[1] = tgt_mem_addr;
+	  arm_insn_r->mem_rec_count = 1;
+	}
       else if (ARM_RECORD_STRD == str_type)
-        {
-          record_buf_mem[0] = 4;
-          record_buf_mem[1] = tgt_mem_addr;
-          record_buf_mem[2] = 4;
-          record_buf_mem[3] = tgt_mem_addr + 4;
-          arm_insn_r->mem_rec_count = 2;
-        }
+	{
+	  record_buf_mem[0] = 4;
+	  record_buf_mem[1] = tgt_mem_addr;
+	  record_buf_mem[2] = 4;
+	  record_buf_mem[3] = tgt_mem_addr + 4;
+	  arm_insn_r->mem_rec_count = 2;
+	}
       /* Record Rn also as it changes.  */
       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
       arm_insn_r->reg_rec_count = 1;
     }
   else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
-           || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
+	   || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
     {
       /* 4) Store, register pre-indexed.  */
       /* 6) Store, register post -indexed.  */
@@ -9855,27 +11402,27 @@ arm_record_strx (insn_decode_record *arm
       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
       /* Calculate target store address, Rn +/- Rm, register offset.  */
       if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
-        {
-          tgt_mem_addr = u_regval[0] + u_regval[1];
-        }
-      else
-        {
-          tgt_mem_addr = u_regval[1] - u_regval[0];
-        }
+	{
+	  tgt_mem_addr = u_regval[0] + u_regval[1];
+	}
+      else
+	{
+	  tgt_mem_addr = u_regval[1] - u_regval[0];
+	}
       if (ARM_RECORD_STRH == str_type)
-        {
-          record_buf_mem[0] = 2;
-          record_buf_mem[1] = tgt_mem_addr;
-          arm_insn_r->mem_rec_count = 1;
-        }
+	{
+	  record_buf_mem[0] = 2;
+	  record_buf_mem[1] = tgt_mem_addr;
+	  arm_insn_r->mem_rec_count = 1;
+	}
       else if (ARM_RECORD_STRD == str_type)
-        {
-          record_buf_mem[0] = 4;
-          record_buf_mem[1] = tgt_mem_addr;
-          record_buf_mem[2] = 4;
-          record_buf_mem[3] = tgt_mem_addr + 4;
-          arm_insn_r->mem_rec_count = 2;
-        }
+	{
+	  record_buf_mem[0] = 4;
+	  record_buf_mem[1] = tgt_mem_addr;
+	  record_buf_mem[2] = 4;
+	  record_buf_mem[3] = tgt_mem_addr + 4;
+	  arm_insn_r->mem_rec_count = 2;
+	}
       /* Record Rn also as it changes.  */
       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
       arm_insn_r->reg_rec_count = 1;
@@ -9886,7 +11433,7 @@ arm_record_strx (insn_decode_record *arm
 /* Handling ARM extension space insns.  */
 
 static int
-arm_record_extension_space (insn_decode_record *arm_insn_r)
+arm_record_extension_space (arm_insn_decode_record *arm_insn_r)
 {
   int ret = 0;  /* Return value: -1:record failure ;  0:success  */
   uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
@@ -9903,14 +11450,14 @@ arm_record_extension_space (insn_decode_
   if (arm_insn_r->cond)
     {
       /* PLD has no affect on architectural state, it just affects
-         the caches.  */
+	 the caches.  */
       if (5 == ((opcode1 & 0xE0) >> 5))
-        {
-          /* BLX(1) */
-          record_buf[0] = ARM_PS_REGNUM;
-          record_buf[1] = ARM_LR_REGNUM;
-          arm_insn_r->reg_rec_count = 2;
-        }
+	{
+	  /* BLX(1) */
+	  record_buf[0] = ARM_PS_REGNUM;
+	  record_buf[1] = ARM_LR_REGNUM;
+	  arm_insn_r->reg_rec_count = 2;
+	}
       /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn.  */
     }
 
@@ -9920,7 +11467,7 @@ arm_record_extension_space (insn_decode_
     {
       ret = -1;
       /* Undefined instruction on ARM V5; need to handle if later 
-         versions define it.  */
+	 versions define it.  */
     }
 
   opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
@@ -9933,19 +11480,19 @@ arm_record_extension_space (insn_decode_
     {
       /* Handle MLA(S) and MUL(S).  */
       if (in_inclusive_range (insn_op1, 0U, 3U))
-      {
-        record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-        record_buf[1] = ARM_PS_REGNUM;
-        arm_insn_r->reg_rec_count = 2;
-      }
+	{
+	  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+	  record_buf[1] = ARM_PS_REGNUM;
+	  arm_insn_r->reg_rec_count = 2;
+	}
       else if (in_inclusive_range (insn_op1, 4U, 15U))
-      {
-        /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
-        record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
-        record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
-        record_buf[2] = ARM_PS_REGNUM;
-        arm_insn_r->reg_rec_count = 3;
-      }
+	{
+	  /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
+	  record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
+	  record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
+	  record_buf[2] = ARM_PS_REGNUM;
+	  arm_insn_r->reg_rec_count = 3;
+	}
     }
 
   opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
@@ -9958,113 +11505,113 @@ arm_record_extension_space (insn_decode_
       && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
     {
       if (!bit (arm_insn_r->arm_insn,25))
-        {
-          if (!bits (arm_insn_r->arm_insn, 4, 7))
-            {
-              if ((0 == insn_op1) || (2 == insn_op1))
-                {
-                  /* MRS.  */
-                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-                  arm_insn_r->reg_rec_count = 1;
-                }
-              else if (1 == insn_op1)
-                {
-                  /* CSPR is going to be changed.  */
-                  record_buf[0] = ARM_PS_REGNUM;
-                  arm_insn_r->reg_rec_count = 1;
-                }
-              else if (3 == insn_op1)
-                {
-                  /* SPSR is going to be changed.  */
-                  /* We need to get SPSR value, which is yet to be done.  */
-                  return -1;
-                }
-            }
-          else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
-            {
-              if (1 == insn_op1)
-                {
-                  /* BX.  */
-                  record_buf[0] = ARM_PS_REGNUM;
-                  arm_insn_r->reg_rec_count = 1;
-                }
-              else if (3 == insn_op1)
-                {
-                  /* CLZ.  */
-                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-                  arm_insn_r->reg_rec_count = 1;
-                }
-            }
-          else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
-            {
-              /* BLX.  */
-              record_buf[0] = ARM_PS_REGNUM;
-              record_buf[1] = ARM_LR_REGNUM;
-              arm_insn_r->reg_rec_count = 2;
-            }
-          else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
-            {
-              /* QADD, QSUB, QDADD, QDSUB */
-              record_buf[0] = ARM_PS_REGNUM;
-              record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
-              arm_insn_r->reg_rec_count = 2;
-            }
-          else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
-            {
-              /* BKPT.  */
-              record_buf[0] = ARM_PS_REGNUM;
-              record_buf[1] = ARM_LR_REGNUM;
-              arm_insn_r->reg_rec_count = 2;
-
-              /* Save SPSR also;how?  */
-              return -1;
-            }
-          else if(8 == bits (arm_insn_r->arm_insn, 4, 7) 
-                  || 10 == bits (arm_insn_r->arm_insn, 4, 7)
-                  || 12 == bits (arm_insn_r->arm_insn, 4, 7)
-                  || 14 == bits (arm_insn_r->arm_insn, 4, 7)
-                 )
-            {
-              if (0 == insn_op1 || 1 == insn_op1)
-                {
-                  /* SMLA<x><y>, SMLAW<y>, SMULW<y>.  */
-                  /* We dont do optimization for SMULW<y> where we
-                     need only Rd.  */
-                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-                  record_buf[1] = ARM_PS_REGNUM;
-                  arm_insn_r->reg_rec_count = 2;
-                }
-              else if (2 == insn_op1)
-                {
-                  /* SMLAL<x><y>.  */
-                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-                  record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
-                  arm_insn_r->reg_rec_count = 2;
-                }
-              else if (3 == insn_op1)
-                {
-                  /* SMUL<x><y>.  */
-                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-                  arm_insn_r->reg_rec_count = 1;
-                }
-            }
-        }
-      else
-        {
-          /* MSR : immediate form.  */
-          if (1 == insn_op1)
-            {
-              /* CSPR is going to be changed.  */
-              record_buf[0] = ARM_PS_REGNUM;
-              arm_insn_r->reg_rec_count = 1;
-            }
-          else if (3 == insn_op1)
-            {
-              /* SPSR is going to be changed.  */
-              /* we need to get SPSR value, which is yet to be done  */
-              return -1;
-            }
-        }
+	{
+	  if (!bits (arm_insn_r->arm_insn, 4, 7))
+	    {
+	      if ((0 == insn_op1) || (2 == insn_op1))
+		{
+		  /* MRS.  */
+		  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+		  arm_insn_r->reg_rec_count = 1;
+		}
+	      else if (1 == insn_op1)
+		{
+		  /* CSPR is going to be changed.  */
+		  record_buf[0] = ARM_PS_REGNUM;
+		  arm_insn_r->reg_rec_count = 1;
+		}
+	      else if (3 == insn_op1)
+		{
+		  /* SPSR is going to be changed.  */
+		  /* We need to get SPSR value, which is yet to be done.  */
+		  return -1;
+		}
+	    }
+	  else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
+	    {
+	      if (1 == insn_op1)
+		{
+		  /* BX.  */
+		  record_buf[0] = ARM_PS_REGNUM;
+		  arm_insn_r->reg_rec_count = 1;
+		}
+	      else if (3 == insn_op1)
+		{
+		  /* CLZ.  */
+		  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+		  arm_insn_r->reg_rec_count = 1;
+		}
+	    }
+	  else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
+	    {
+	      /* BLX.  */
+	      record_buf[0] = ARM_PS_REGNUM;
+	      record_buf[1] = ARM_LR_REGNUM;
+	      arm_insn_r->reg_rec_count = 2;
+	    }
+	  else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
+	    {
+	      /* QADD, QSUB, QDADD, QDSUB */
+	      record_buf[0] = ARM_PS_REGNUM;
+	      record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
+	      arm_insn_r->reg_rec_count = 2;
+	    }
+	  else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
+	    {
+	      /* BKPT.  */
+	      record_buf[0] = ARM_PS_REGNUM;
+	      record_buf[1] = ARM_LR_REGNUM;
+	      arm_insn_r->reg_rec_count = 2;
+
+	      /* Save SPSR also;how?  */
+	      return -1;
+	    }
+	  else if(8 == bits (arm_insn_r->arm_insn, 4, 7) 
+		  || 10 == bits (arm_insn_r->arm_insn, 4, 7)
+		  || 12 == bits (arm_insn_r->arm_insn, 4, 7)
+		  || 14 == bits (arm_insn_r->arm_insn, 4, 7)
+		 )
+	    {
+	      if (0 == insn_op1 || 1 == insn_op1)
+		{
+		  /* SMLA<x><y>, SMLAW<y>, SMULW<y>.  */
+		  /* We dont do optimization for SMULW<y> where we
+		     need only Rd.  */
+		  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+		  record_buf[1] = ARM_PS_REGNUM;
+		  arm_insn_r->reg_rec_count = 2;
+		}
+	      else if (2 == insn_op1)
+		{
+		  /* SMLAL<x><y>.  */
+		  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+		  record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
+		  arm_insn_r->reg_rec_count = 2;
+		}
+	      else if (3 == insn_op1)
+		{
+		  /* SMUL<x><y>.  */
+		  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+		  arm_insn_r->reg_rec_count = 1;
+		}
+	    }
+	}
+      else
+	{
+	  /* MSR : immediate form.  */
+	  if (1 == insn_op1)
+	    {
+	      /* CSPR is going to be changed.  */
+	      record_buf[0] = ARM_PS_REGNUM;
+	      arm_insn_r->reg_rec_count = 1;
+	    }
+	  else if (3 == insn_op1)
+	    {
+	      /* SPSR is going to be changed.  */
+	      /* we need to get SPSR value, which is yet to be done  */
+	      return -1;
+	    }
+	}
     }
 
   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
@@ -10079,52 +11626,52 @@ arm_record_extension_space (insn_decode_
     {
       /* SWP/SWPB.  */
       if (0 == insn_op1)
-        {
-          /* These insn, changes register and memory as well.  */
-          /* SWP or SWPB insn.  */
-          /* Get memory address given by Rn.  */
-          reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
-          regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
-          /* SWP insn ?, swaps word.  */
-          if (8 == arm_insn_r->opcode)
-            {
-              record_buf_mem[0] = 4;
-            }
-          else
-            {
-              /* SWPB insn, swaps only byte.  */
-              record_buf_mem[0] = 1;
-            }
-          record_buf_mem[1] = u_regval;
-          arm_insn_r->mem_rec_count = 1;
-          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-          arm_insn_r->reg_rec_count = 1;
-        }
+	{
+	  /* These insn, changes register and memory as well.  */
+	  /* SWP or SWPB insn.  */
+	  /* Get memory address given by Rn.  */
+	  reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
+	  regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
+	  /* SWP insn ?, swaps word.  */
+	  if (8 == arm_insn_r->opcode)
+	    {
+	      record_buf_mem[0] = 4;
+	    }
+	  else
+	    {
+	      /* SWPB insn, swaps only byte.  */
+	      record_buf_mem[0] = 1;
+	    }
+	  record_buf_mem[1] = u_regval;
+	  arm_insn_r->mem_rec_count = 1;
+	  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+	  arm_insn_r->reg_rec_count = 1;
+	}
       else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
-        {
-          /* STRH.  */
-          arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
-                          ARM_RECORD_STRH);
-        }
+	{
+	  /* STRH.  */
+	  arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
+			  ARM_RECORD_STRH);
+	}
       else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
-        {
-          /* LDRD.  */
-          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-          record_buf[1] = record_buf[0] + 1;
-          arm_insn_r->reg_rec_count = 2;
-        }
+	{
+	  /* LDRD.  */
+	  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+	  record_buf[1] = record_buf[0] + 1;
+	  arm_insn_r->reg_rec_count = 2;
+	}
       else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
-        {
-          /* STRD.  */
-          arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
-                        ARM_RECORD_STRD);
-        }
+	{
+	  /* STRD.  */
+	  arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
+			ARM_RECORD_STRD);
+	}
       else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
-        {
-          /* LDRH, LDRSB, LDRSH.  */
-          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-          arm_insn_r->reg_rec_count = 1;
-        }
+	{
+	  /* LDRH, LDRSB, LDRSH.  */
+	  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+	  arm_insn_r->reg_rec_count = 1;
+	}
 
     }
 
@@ -10149,7 +11696,7 @@ arm_record_extension_space (insn_decode_
 /* Handling opcode 000 insns.  */
 
 static int
-arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
+arm_record_data_proc_misc_ld_str (arm_insn_decode_record *arm_insn_r)
 {
   struct regcache *reg_cache = arm_insn_r->regcache;
   uint32_t record_buf[8], record_buf_mem[8];
@@ -10238,20 +11785,20 @@ arm_record_data_proc_misc_ld_str (insn_d
       /* Handle multiply instructions.  */
       /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL.  */
       if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
-	  {
-	    /* Handle MLA and MUL.  */
-	    record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
-	    record_buf[1] = ARM_PS_REGNUM;
-	    arm_insn_r->reg_rec_count = 2;
-	  }
-	else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
-	  {
-	    /* Handle SMLAL, SMULL, UMLAL, UMULL.  */
-	    record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
-	    record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
-	    record_buf[2] = ARM_PS_REGNUM;
-	    arm_insn_r->reg_rec_count = 3;
-	  }
+	{
+	  /* Handle MLA and MUL.  */
+	  record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
+	  record_buf[1] = ARM_PS_REGNUM;
+	  arm_insn_r->reg_rec_count = 2;
+	}
+      else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
+	{
+	  /* Handle SMLAL, SMULL, UMLAL, UMULL.  */
+	  record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
+	  record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
+	  record_buf[2] = ARM_PS_REGNUM;
+	  arm_insn_r->reg_rec_count = 3;
+	}
     }
   else if (9 == arm_insn_r->decode  && opcode1 > 0x10)
     {
@@ -10442,7 +11989,7 @@ arm_record_data_proc_misc_ld_str (insn_d
 /* Handling opcode 001 insns.  */
 
 static int
-arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
+arm_record_data_proc_imm (arm_insn_decode_record *arm_insn_r)
 {
   uint32_t record_buf[8], record_buf_mem[8];
 
@@ -10456,21 +12003,21 @@ arm_record_data_proc_imm (insn_decode_re
     {
       /* Handle MSR insn.  */
       if (9 == arm_insn_r->opcode)
-        {
-          /* CSPR is going to be changed.  */
-          record_buf[0] = ARM_PS_REGNUM;
-          arm_insn_r->reg_rec_count = 1;
-        }
-      else
-        {
-          /* SPSR is going to be changed.  */
-        }
+	{
+	  /* CSPR is going to be changed.  */
+	  record_buf[0] = ARM_PS_REGNUM;
+	  arm_insn_r->reg_rec_count = 1;
+	}
+      else
+	{
+	  /* SPSR is going to be changed.  */
+	}
     }
   else if (arm_insn_r->opcode <= 15)
     {
       /* Normal data processing insns.  */
       /* Out of 11 shifter operands mode, all the insn modifies destination
-         register, which is specified by 13-16 decode.  */
+	 register, which is specified by 13-16 decode.  */
       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
       record_buf[1] = ARM_PS_REGNUM;
       arm_insn_r->reg_rec_count = 2;
@@ -10486,7 +12033,7 @@ arm_record_data_proc_imm (insn_decode_re
 }
 
 static int
-arm_record_media (insn_decode_record *arm_insn_r)
+arm_record_media (arm_insn_decode_record *arm_insn_r)
 {
   uint32_t record_buf[8];
 
@@ -10570,7 +12117,7 @@ arm_record_media (insn_decode_record *ar
 /* Handle ARM mode instructions with opcode 010.  */
 
 static int
-arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
+arm_record_ld_st_imm_offset (arm_insn_decode_record *arm_insn_r)
 {
   struct regcache *reg_cache = arm_insn_r->regcache;
 
@@ -10661,7 +12208,7 @@ arm_record_ld_st_imm_offset (insn_decode
 /* Handling opcode 011 insns.  */
 
 static int
-arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
+arm_record_ld_st_reg_offset (arm_insn_decode_record *arm_insn_r)
 {
   struct regcache *reg_cache = arm_insn_r->regcache;
 
@@ -10688,235 +12235,235 @@ arm_record_ld_st_reg_offset (insn_decode
     {
       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
       /* LDR insn has a capability to do branching, if
-         MOV LR, PC is preceded by LDR insn having Rn as R15
-         in that case, it emulates branch and link insn, and hence we
-         need to save CSPR and PC as well.  */
+	 MOV LR, PC is preceded by LDR insn having Rn as R15
+	 in that case, it emulates branch and link insn, and hence we
+	 need to save CSPR and PC as well.  */
       if (15 != reg_dest)
-        {
-          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
-          arm_insn_r->reg_rec_count = 1;
-        }
-      else
-        {
-          record_buf[0] = reg_dest;
-          record_buf[1] = ARM_PS_REGNUM;
-          arm_insn_r->reg_rec_count = 2;
-        }
+	{
+	  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+	  arm_insn_r->reg_rec_count = 1;
+	}
+      else
+	{
+	  record_buf[0] = reg_dest;
+	  record_buf[1] = ARM_PS_REGNUM;
+	  arm_insn_r->reg_rec_count = 2;
+	}
     }
   else
     {
       if (! bits (arm_insn_r->arm_insn, 4, 11))
-        {
-          /* Store insn, register offset and register pre-indexed,
-             register post-indexed.  */
-          /* Get Rm.  */
-          reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
-          /* Get Rn.  */
-          reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
-          regcache_raw_read_unsigned (reg_cache, reg_src1
-                                      , &u_regval[0]);
-          regcache_raw_read_unsigned (reg_cache, reg_src2
-                                      , &u_regval[1]);
-          if (15 == reg_src2)
-            {
-              /* If R15 was used as Rn, hence current PC+8.  */
-              /* Pre-indexed mode doesnt reach here ; illegal insn.  */
-                u_regval[0] = u_regval[0] + 8;
-            }
-          /* Calculate target store address, Rn +/- Rm, register offset.  */
-          /* U == 1.  */
-          if (bit (arm_insn_r->arm_insn, 23))
-            {
-              tgt_mem_addr = u_regval[0] + u_regval[1];
-            }
-          else
-            {
-              tgt_mem_addr = u_regval[1] - u_regval[0];
-            }
-
-          switch (arm_insn_r->opcode)
-            {
-              /* STR.  */
-              case 8:
-              case 12:
-              /* STR.  */    
-              case 9:
-              case 13:
-              /* STRT.  */
-              case 1:
-              case 5:
-              /* STR.  */
-              case 0:
-              case 4:
-                record_buf_mem[0] = 4;
-              break;
-
-              /* STRB.  */
-              case 10:
-              case 14:
-              /* STRB.  */
-              case 11:
-              case 15:
-              /* STRBT.  */    
-              case 3:
-              case 7:
-              /* STRB.  */
-              case 2:
-              case 6:
-                record_buf_mem[0] = 1;
-              break;
-
-              default:
-                gdb_assert_not_reached ("no decoding pattern found");
-              break;
-            }
-          record_buf_mem[1] = tgt_mem_addr;
-          arm_insn_r->mem_rec_count = 1;
-
-          if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
-              || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
-              || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
-              || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
-              || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
-              || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
-             )
-            {
-              /* Rn is going to be changed in pre-indexed mode and
-                 post-indexed mode as well.  */
-              record_buf[0] = reg_src2;
-              arm_insn_r->reg_rec_count = 1;
-            }
-        }
-      else
-        {
-          /* Store insn, scaled register offset; scaled pre-indexed.  */
-          offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
-          /* Get Rm.  */
-          reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
-          /* Get Rn.  */
-          reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
-          /* Get shift_imm.  */
-          shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
-          regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
-          regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
-          regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
-          /* Offset_12 used as shift.  */
-          switch (offset_12)
-            {
-              case 0:
-                /* Offset_12 used as index.  */
-                offset_12 = u_regval[0] << shift_imm;
-              break;
-
-              case 1:
-                offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
-              break;
-
-              case 2:
-                if (!shift_imm)
-                  {
-                    if (bit (u_regval[0], 31))
-                      {
-                        offset_12 = 0xFFFFFFFF;
-                      }
-                    else
-                      {
-                        offset_12 = 0;
-                      }
-                  }
-                else
-                  {
-                    /* This is arithmetic shift.  */
-                    offset_12 = s_word >> shift_imm;
-                  }
-                break;
-
-              case 3:
-                if (!shift_imm)
-                  {
-                    regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
-                                                &u_regval[1]);
-                    /* Get C flag value and shift it by 31.  */
-                    offset_12 = (((bit (u_regval[1], 29)) << 31) \
-                                  | (u_regval[0]) >> 1);
-                  }
-                else
-                  {
-                    offset_12 = (u_regval[0] >> shift_imm) \
-                                | (u_regval[0] <<
-                                (sizeof(uint32_t) - shift_imm));
-                  }
-              break;
-
-              default:
-                gdb_assert_not_reached ("no decoding pattern found");
-              break;
-            }
-
-          regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
-          /* bit U set.  */
-          if (bit (arm_insn_r->arm_insn, 23))
-            {
-              tgt_mem_addr = u_regval[1] + offset_12;
-            }
-          else
-            {
-              tgt_mem_addr = u_regval[1] - offset_12;
-            }
-
-          switch (arm_insn_r->opcode)
-            {
-              /* STR.  */
-              case 8:
-              case 12:
-              /* STR.  */    
-              case 9:
-              case 13:
-              /* STRT.  */
-              case 1:
-              case 5:
-              /* STR.  */
-              case 0:
-              case 4:
-                record_buf_mem[0] = 4;
-              break;
-
-              /* STRB.  */
-              case 10:
-              case 14:
-              /* STRB.  */
-              case 11:
-              case 15:
-              /* STRBT.  */    
-              case 3:
-              case 7:
-              /* STRB.  */
-              case 2:
-              case 6:
-                record_buf_mem[0] = 1;
-              break;
-
-              default:
-                gdb_assert_not_reached ("no decoding pattern found");
-              break;
-            }
-          record_buf_mem[1] = tgt_mem_addr;
-          arm_insn_r->mem_rec_count = 1;
-
-          if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
-              || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
-              || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
-              || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
-              || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
-              || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
-             )
-            {
-              /* Rn is going to be changed in register scaled pre-indexed
-                 mode,and scaled post indexed mode.  */
-              record_buf[0] = reg_src2;
-              arm_insn_r->reg_rec_count = 1;
-            }
-        }
+	{
+	  /* Store insn, register offset and register pre-indexed,
+	     register post-indexed.  */
+	  /* Get Rm.  */
+	  reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
+	  /* Get Rn.  */
+	  reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
+	  regcache_raw_read_unsigned (reg_cache, reg_src1
+				      , &u_regval[0]);
+	  regcache_raw_read_unsigned (reg_cache, reg_src2
+				      , &u_regval[1]);
+	  if (15 == reg_src2)
+	    {
+	      /* If R15 was used as Rn, hence current PC+8.  */
+	      /* Pre-indexed mode doesnt reach here ; illegal insn.  */
+		u_regval[0] = u_regval[0] + 8;
+	    }
+	  /* Calculate target store address, Rn +/- Rm, register offset.  */
+	  /* U == 1.  */
+	  if (bit (arm_insn_r->arm_insn, 23))
+	    {
+	      tgt_mem_addr = u_regval[0] + u_regval[1];
+	    }
+	  else
+	    {
+	      tgt_mem_addr = u_regval[1] - u_regval[0];
+	    }
+
+	  switch (arm_insn_r->opcode)
+	    {
+	      /* STR.  */
+	      case 8:
+	      case 12:
+	      /* STR.  */    
+	      case 9:
+	      case 13:
+	      /* STRT.  */
+	      case 1:
+	      case 5:
+	      /* STR.  */
+	      case 0:
+	      case 4:
+		record_buf_mem[0] = 4;
+	      break;
+
+	      /* STRB.  */
+	      case 10:
+	      case 14:
+	      /* STRB.  */
+	      case 11:
+	      case 15:
+	      /* STRBT.  */    
+	      case 3:
+	      case 7:
+	      /* STRB.  */
+	      case 2:
+	      case 6:
+		record_buf_mem[0] = 1;
+	      break;
+
+	      default:
+		gdb_assert_not_reached ("no decoding pattern found");
+	      break;
+	    }
+	  record_buf_mem[1] = tgt_mem_addr;
+	  arm_insn_r->mem_rec_count = 1;
+
+	  if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
+	      || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
+	      || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
+	      || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
+	      || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
+	      || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
+	     )
+	    {
+	      /* Rn is going to be changed in pre-indexed mode and
+		 post-indexed mode as well.  */
+	      record_buf[0] = reg_src2;
+	      arm_insn_r->reg_rec_count = 1;
+	    }
+	}
+      else
+	{
+	  /* Store insn, scaled register offset; scaled pre-indexed.  */
+	  offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
+	  /* Get Rm.  */
+	  reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
+	  /* Get Rn.  */
+	  reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
+	  /* Get shift_imm.  */
+	  shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
+	  regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
+	  regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
+	  regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
+	  /* Offset_12 used as shift.  */
+	  switch (offset_12)
+	    {
+	      case 0:
+		/* Offset_12 used as index.  */
+		offset_12 = u_regval[0] << shift_imm;
+	      break;
+
+	      case 1:
+		offset_12 = (!shift_imm) ? 0 : u_regval[0] >> shift_imm;
+	      break;
+
+	      case 2:
+		if (!shift_imm)
+		  {
+		    if (bit (u_regval[0], 31))
+		      {
+			offset_12 = 0xFFFFFFFF;
+		      }
+		    else
+		      {
+			offset_12 = 0;
+		      }
+		  }
+		else
+		  {
+		    /* This is arithmetic shift.  */
+		    offset_12 = s_word >> shift_imm;
+		  }
+		break;
+
+	      case 3:
+		if (!shift_imm)
+		  {
+		    regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
+						&u_regval[1]);
+		    /* Get C flag value and shift it by 31.  */
+		    offset_12 = (((bit (u_regval[1], 29)) << 31) \
+				  | (u_regval[0]) >> 1);
+		  }
+		else
+		  {
+		    offset_12 = (u_regval[0] >> shift_imm) \
+				| (u_regval[0] <<
+				(sizeof(uint32_t) - shift_imm));
+		  }
+	      break;
+
+	      default:
+		gdb_assert_not_reached ("no decoding pattern found");
+	      break;
+	    }
+
+	  regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
+	  /* bit U set.  */
+	  if (bit (arm_insn_r->arm_insn, 23))
+	    {
+	      tgt_mem_addr = u_regval[1] + offset_12;
+	    }
+	  else
+	    {
+	      tgt_mem_addr = u_regval[1] - offset_12;
+	    }
+
+	  switch (arm_insn_r->opcode)
+	    {
+	      /* STR.  */
+	      case 8:
+	      case 12:
+	      /* STR.  */    
+	      case 9:
+	      case 13:
+	      /* STRT.  */
+	      case 1:
+	      case 5:
+	      /* STR.  */
+	      case 0:
+	      case 4:
+		record_buf_mem[0] = 4;
+	      break;
+
+	      /* STRB.  */
+	      case 10:
+	      case 14:
+	      /* STRB.  */
+	      case 11:
+	      case 15:
+	      /* STRBT.  */    
+	      case 3:
+	      case 7:
+	      /* STRB.  */
+	      case 2:
+	      case 6:
+		record_buf_mem[0] = 1;
+	      break;
+
+	      default:
+		gdb_assert_not_reached ("no decoding pattern found");
+	      break;
+	    }
+	  record_buf_mem[1] = tgt_mem_addr;
+	  arm_insn_r->mem_rec_count = 1;
+
+	  if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
+	      || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
+	      || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
+	      || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
+	      || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
+	      || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
+	     )
+	    {
+	      /* Rn is going to be changed in register scaled pre-indexed
+		 mode,and scaled post indexed mode.  */
+	      record_buf[0] = reg_src2;
+	      arm_insn_r->reg_rec_count = 1;
+	    }
+	}
     }
 
   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
@@ -10927,7 +12474,7 @@ arm_record_ld_st_reg_offset (insn_decode
 /* Handle ARM mode instructions with opcode 100.  */
 
 static int
-arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
+arm_record_ld_st_multiple (arm_insn_decode_record *arm_insn_r)
 {
   struct regcache *reg_cache = arm_insn_r->regcache;
   uint32_t register_count = 0, register_bits;
@@ -11027,7 +12574,7 @@ arm_record_ld_st_multiple (insn_decode_r
 /* Handling opcode 101 insns.  */
 
 static int
-arm_record_b_bl (insn_decode_record *arm_insn_r)
+arm_record_b_bl (arm_insn_decode_record *arm_insn_r)
 {
   uint32_t record_buf[8];
 
@@ -11036,10 +12583,10 @@ arm_record_b_bl (insn_decode_record *arm
   /* Note: BLX(1) doesnt fall here but instead it falls into
      extension space.  */
   if (bit (arm_insn_r->arm_insn, 24))
-  {
-    record_buf[0] = ARM_LR_REGNUM;
-    arm_insn_r->reg_rec_count = 1;
-  }
+    {
+      record_buf[0] = ARM_LR_REGNUM;
+      arm_insn_r->reg_rec_count = 1;
+    }
 
   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
 
@@ -11047,11 +12594,12 @@ arm_record_b_bl (insn_decode_record *arm
 }
 
 static int
-arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
+arm_record_unsupported_insn (arm_insn_decode_record *arm_insn_r)
 {
-  printf_unfiltered (_("Process record does not support instruction "
-		       "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
-		     paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
+  gdb_printf (gdb_stderr,
+	      _("Process record does not support instruction "
+		"0x%0x at address %s.\n"),arm_insn_r->arm_insn,
+	      paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
 
   return -1;
 }
@@ -11059,7 +12607,7 @@ arm_record_unsupported_insn (insn_decode
 /* Record handler for vector data transfer instructions.  */
 
 static int
-arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
+arm_record_vdata_transfer_insn (arm_insn_decode_record *arm_insn_r)
 {
   uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
   uint32_t record_buf[4];
@@ -11080,62 +12628,62 @@ arm_record_vdata_transfer_insn (insn_dec
     {
       /* Handle VMOV instruction.  */
       if (bits_a == 0x00)
-        {
+	{
 	  record_buf[0] = reg_t;
-          arm_insn_r->reg_rec_count = 1;
-        }
+	  arm_insn_r->reg_rec_count = 1;
+	}
       /* Handle VMRS instruction.  */
       else if (bits_a == 0x07)
-        {
-          if (reg_t == 15)
-            reg_t = ARM_PS_REGNUM;
-
-          record_buf[0] = reg_t;
-          arm_insn_r->reg_rec_count = 1;
-        }
+	{
+	  if (reg_t == 15)
+	    reg_t = ARM_PS_REGNUM;
+
+	  record_buf[0] = reg_t;
+	  arm_insn_r->reg_rec_count = 1;
+	}
     }
   else if (!bit_l && !bit_c)
     {
       /* Handle VMOV instruction.  */
       if (bits_a == 0x00)
-        {
+	{
 	  record_buf[0] = ARM_D0_REGNUM + reg_v;
 
-          arm_insn_r->reg_rec_count = 1;
-        }
+	  arm_insn_r->reg_rec_count = 1;
+	}
       /* Handle VMSR instruction.  */
       else if (bits_a == 0x07)
-        {
-          record_buf[0] = ARM_FPSCR_REGNUM;
-          arm_insn_r->reg_rec_count = 1;
-        }
+	{
+	  record_buf[0] = ARM_FPSCR_REGNUM;
+	  arm_insn_r->reg_rec_count = 1;
+	}
     }
   else if (!bit_l && bit_c)
     {
       /* Handle VMOV instruction.  */
       if (!(bits_a & 0x04))
-        {
-          record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
-                          + ARM_D0_REGNUM;
-          arm_insn_r->reg_rec_count = 1;
-        }
+	{
+	  record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
+			  + ARM_D0_REGNUM;
+	  arm_insn_r->reg_rec_count = 1;
+	}
       /* Handle VDUP instruction.  */
       else
-        {
-          if (bit (arm_insn_r->arm_insn, 21))
-            {
-              reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
-              record_buf[0] = reg_v + ARM_D0_REGNUM;
-              record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
-              arm_insn_r->reg_rec_count = 2;
-            }
-          else
-            {
-              reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
-              record_buf[0] = reg_v + ARM_D0_REGNUM;
-              arm_insn_r->reg_rec_count = 1;
-            }
-        }
+	{
+	  if (bit (arm_insn_r->arm_insn, 21))
+	    {
+	      reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
+	      record_buf[0] = reg_v + ARM_D0_REGNUM;
+	      record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
+	      arm_insn_r->reg_rec_count = 2;
+	    }
+	  else
+	    {
+	      reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
+	      record_buf[0] = reg_v + ARM_D0_REGNUM;
+	      arm_insn_r->reg_rec_count = 1;
+	    }
+	}
     }
 
   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
@@ -11145,7 +12693,7 @@ arm_record_vdata_transfer_insn (insn_dec
 /* Record handler for extension register load/store instructions.  */
 
 static int
-arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
+arm_record_exreg_ld_st_insn (arm_insn_decode_record *arm_insn_r)
 {
   uint32_t opcode, single_reg;
   uint8_t op_vldm_vstm;
@@ -11340,7 +12888,7 @@ arm_record_exreg_ld_st_insn (insn_decode
 /* Record handler for arm/thumb mode VFP data processing instructions.  */
 
 static int
-arm_record_vfp_data_proc_insn (insn_decode_record *arm_insn_r)
+arm_record_vfp_data_proc_insn (arm_insn_decode_record *arm_insn_r)
 {
   uint32_t opc1, opc2, opc3, dp_op_sz, bit_d, reg_vd;
   uint32_t record_buf[4];
@@ -11360,189 +12908,189 @@ arm_record_vfp_data_proc_insn (insn_deco
   if (opc1 == 0x00)
     {
       if (bit (arm_insn_r->arm_insn, 10))
-        {
-          if (bit (arm_insn_r->arm_insn, 6))
-            curr_insn_type = INSN_T0;
-          else
-            curr_insn_type = INSN_T1;
-        }
-      else
-        {
-          if (dp_op_sz)
-            curr_insn_type = INSN_T1;
-          else
-            curr_insn_type = INSN_T2;
-        }
+	{
+	  if (bit (arm_insn_r->arm_insn, 6))
+	    curr_insn_type = INSN_T0;
+	  else
+	    curr_insn_type = INSN_T1;
+	}
+      else
+	{
+	  if (dp_op_sz)
+	    curr_insn_type = INSN_T1;
+	  else
+	    curr_insn_type = INSN_T2;
+	}
     }
   /* Handle VNMLA, VNMLS, VNMUL.  */
   else if (opc1 == 0x01)
     {
       if (dp_op_sz)
-        curr_insn_type = INSN_T1;
+	curr_insn_type = INSN_T1;
       else
-        curr_insn_type = INSN_T2;
+	curr_insn_type = INSN_T2;
     }
   /* Handle VMUL.  */
   else if (opc1 == 0x02 && !(opc3 & 0x01))
     {
       if (bit (arm_insn_r->arm_insn, 10))
-        {
-          if (bit (arm_insn_r->arm_insn, 6))
-            curr_insn_type = INSN_T0;
-          else
-            curr_insn_type = INSN_T1;
-        }
-      else
-        {
-          if (dp_op_sz)
-            curr_insn_type = INSN_T1;
-          else
-            curr_insn_type = INSN_T2;
-        }
+	{
+	  if (bit (arm_insn_r->arm_insn, 6))
+	    curr_insn_type = INSN_T0;
+	  else
+	    curr_insn_type = INSN_T1;
+	}
+      else
+	{
+	  if (dp_op_sz)
+	    curr_insn_type = INSN_T1;
+	  else
+	    curr_insn_type = INSN_T2;
+	}
     }
   /* Handle VADD, VSUB.  */
   else if (opc1 == 0x03)
     {
       if (!bit (arm_insn_r->arm_insn, 9))
-        {
-          if (bit (arm_insn_r->arm_insn, 6))
-            curr_insn_type = INSN_T0;
-          else
-            curr_insn_type = INSN_T1;
-        }
-      else
-        {
-          if (dp_op_sz)
-            curr_insn_type = INSN_T1;
-          else
-            curr_insn_type = INSN_T2;
-        }
+	{
+	  if (bit (arm_insn_r->arm_insn, 6))
+	    curr_insn_type = INSN_T0;
+	  else
+	    curr_insn_type = INSN_T1;
+	}
+      else
+	{
+	  if (dp_op_sz)
+	    curr_insn_type = INSN_T1;
+	  else
+	    curr_insn_type = INSN_T2;
+	}
     }
   /* Handle VDIV.  */
   else if (opc1 == 0x08)
     {
       if (dp_op_sz)
-        curr_insn_type = INSN_T1;
+	curr_insn_type = INSN_T1;
       else
-        curr_insn_type = INSN_T2;
+	curr_insn_type = INSN_T2;
     }
   /* Handle all other vfp data processing instructions.  */
   else if (opc1 == 0x0b)
     {
       /* Handle VMOV.  */
       if (!(opc3 & 0x01) || (opc2 == 0x00 && opc3 == 0x01))
-        {
-          if (bit (arm_insn_r->arm_insn, 4))
-            {
-              if (bit (arm_insn_r->arm_insn, 6))
-                curr_insn_type = INSN_T0;
-              else
-                curr_insn_type = INSN_T1;
-            }
-          else
-            {
-              if (dp_op_sz)
-                curr_insn_type = INSN_T1;
-              else
-                curr_insn_type = INSN_T2;
-            }
-        }
+	{
+	  if (bit (arm_insn_r->arm_insn, 4))
+	    {
+	      if (bit (arm_insn_r->arm_insn, 6))
+		curr_insn_type = INSN_T0;
+	      else
+		curr_insn_type = INSN_T1;
+	    }
+	  else
+	    {
+	      if (dp_op_sz)
+		curr_insn_type = INSN_T1;
+	      else
+		curr_insn_type = INSN_T2;
+	    }
+	}
       /* Handle VNEG and VABS.  */
       else if ((opc2 == 0x01 && opc3 == 0x01)
-              || (opc2 == 0x00 && opc3 == 0x03))
-        {
-          if (!bit (arm_insn_r->arm_insn, 11))
-            {
-              if (bit (arm_insn_r->arm_insn, 6))
-                curr_insn_type = INSN_T0;
-              else
-                curr_insn_type = INSN_T1;
-            }
-          else
-            {
-              if (dp_op_sz)
-                curr_insn_type = INSN_T1;
-              else
-                curr_insn_type = INSN_T2;
-            }
-        }
+	      || (opc2 == 0x00 && opc3 == 0x03))
+	{
+	  if (!bit (arm_insn_r->arm_insn, 11))
+	    {
+	      if (bit (arm_insn_r->arm_insn, 6))
+		curr_insn_type = INSN_T0;
+	      else
+		curr_insn_type = INSN_T1;
+	    }
+	  else
+	    {
+	      if (dp_op_sz)
+		curr_insn_type = INSN_T1;
+	      else
+		curr_insn_type = INSN_T2;
+	    }
+	}
       /* Handle VSQRT.  */
       else if (opc2 == 0x01 && opc3 == 0x03)
-        {
-          if (dp_op_sz)
-            curr_insn_type = INSN_T1;
-          else
-            curr_insn_type = INSN_T2;
-        }
+	{
+	  if (dp_op_sz)
+	    curr_insn_type = INSN_T1;
+	  else
+	    curr_insn_type = INSN_T2;
+	}
       /* Handle VCVT.  */
       else if (opc2 == 0x07 && opc3 == 0x03)
-        {
-          if (!dp_op_sz)
-            curr_insn_type = INSN_T1;
-          else
-            curr_insn_type = INSN_T2;
-        }
+	{
+	  if (!dp_op_sz)
+	    curr_insn_type = INSN_T1;
+	  else
+	    curr_insn_type = INSN_T2;
+	}
       else if (opc3 & 0x01)
-        {
-          /* Handle VCVT.  */
-          if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
-            {
-              if (!bit (arm_insn_r->arm_insn, 18))
-                curr_insn_type = INSN_T2;
-              else
-                {
-                  if (dp_op_sz)
-                    curr_insn_type = INSN_T1;
-                  else
-                    curr_insn_type = INSN_T2;
-                }
-            }
-          /* Handle VCVT.  */
-          else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
-            {
-              if (dp_op_sz)
-                curr_insn_type = INSN_T1;
-              else
-                curr_insn_type = INSN_T2;
-            }
-          /* Handle VCVTB, VCVTT.  */
-          else if ((opc2 & 0x0e) == 0x02)
-            curr_insn_type = INSN_T2;
-          /* Handle VCMP, VCMPE.  */
-          else if ((opc2 & 0x0e) == 0x04)
-            curr_insn_type = INSN_T3;
-        }
+	{
+	  /* Handle VCVT.  */
+	  if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
+	    {
+	      if (!bit (arm_insn_r->arm_insn, 18))
+		curr_insn_type = INSN_T2;
+	      else
+		{
+		  if (dp_op_sz)
+		    curr_insn_type = INSN_T1;
+		  else
+		    curr_insn_type = INSN_T2;
+		}
+	    }
+	  /* Handle VCVT.  */
+	  else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
+	    {
+	      if (dp_op_sz)
+		curr_insn_type = INSN_T1;
+	      else
+		curr_insn_type = INSN_T2;
+	    }
+	  /* Handle VCVTB, VCVTT.  */
+	  else if ((opc2 & 0x0e) == 0x02)
+	    curr_insn_type = INSN_T2;
+	  /* Handle VCMP, VCMPE.  */
+	  else if ((opc2 & 0x0e) == 0x04)
+	    curr_insn_type = INSN_T3;
+	}
     }
 
   switch (curr_insn_type)
     {
       case INSN_T0:
-        reg_vd = reg_vd | (bit_d << 4);
-        record_buf[0] = reg_vd + ARM_D0_REGNUM;
-        record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
-        arm_insn_r->reg_rec_count = 2;
-        break;
+	reg_vd = reg_vd | (bit_d << 4);
+	record_buf[0] = reg_vd + ARM_D0_REGNUM;
+	record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
+	arm_insn_r->reg_rec_count = 2;
+	break;
 
       case INSN_T1:
-        reg_vd = reg_vd | (bit_d << 4);
-        record_buf[0] = reg_vd + ARM_D0_REGNUM;
-        arm_insn_r->reg_rec_count = 1;
-        break;
+	reg_vd = reg_vd | (bit_d << 4);
+	record_buf[0] = reg_vd + ARM_D0_REGNUM;
+	arm_insn_r->reg_rec_count = 1;
+	break;
 
       case INSN_T2:
-        reg_vd = (reg_vd << 1) | bit_d;
-        record_buf[0] = reg_vd + ARM_D0_REGNUM;
-        arm_insn_r->reg_rec_count = 1;
-        break;
+	reg_vd = (reg_vd << 1) | bit_d;
+	record_buf[0] = reg_vd + ARM_D0_REGNUM;
+	arm_insn_r->reg_rec_count = 1;
+	break;
 
       case INSN_T3:
-        record_buf[0] = ARM_FPSCR_REGNUM;
-        arm_insn_r->reg_rec_count = 1;
-        break;
+	record_buf[0] = ARM_FPSCR_REGNUM;
+	arm_insn_r->reg_rec_count = 1;
+	break;
 
       default:
-        gdb_assert_not_reached ("no decoding pattern found");
-        break;
+	gdb_assert_not_reached ("no decoding pattern found");
+	break;
     }
 
   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
@@ -11552,7 +13100,7 @@ arm_record_vfp_data_proc_insn (insn_deco
 /* Handling opcode 110 insns.  */
 
 static int
-arm_record_asimd_vfp_coproc (insn_decode_record *arm_insn_r)
+arm_record_asimd_vfp_coproc (arm_insn_decode_record *arm_insn_r)
 {
   uint32_t op1, op1_ebit, coproc;
 
@@ -11564,40 +13112,40 @@ arm_record_asimd_vfp_coproc (insn_decode
     {
       /* Handle extension register ld/st instructions.  */
       if (!(op1 & 0x20))
-        return arm_record_exreg_ld_st_insn (arm_insn_r);
+	return arm_record_exreg_ld_st_insn (arm_insn_r);
 
       /* 64-bit transfers between arm core and extension registers.  */
       if ((op1 & 0x3e) == 0x04)
-        return arm_record_exreg_ld_st_insn (arm_insn_r);
+	return arm_record_exreg_ld_st_insn (arm_insn_r);
     }
   else
     {
       /* Handle coprocessor ld/st instructions.  */
       if (!(op1 & 0x3a))
-        {
-          /* Store.  */
-          if (!op1_ebit)
-            return arm_record_unsupported_insn (arm_insn_r);
-          else
-            /* Load.  */
-            return arm_record_unsupported_insn (arm_insn_r);
-        }
+	{
+	  /* Store.  */
+	  if (!op1_ebit)
+	    return arm_record_unsupported_insn (arm_insn_r);
+	  else
+	    /* Load.  */
+	    return arm_record_unsupported_insn (arm_insn_r);
+	}
 
       /* Move to coprocessor from two arm core registers.  */
       if (op1 == 0x4)
-        return arm_record_unsupported_insn (arm_insn_r);
+	return arm_record_unsupported_insn (arm_insn_r);
 
       /* Move to two arm core registers from coprocessor.  */
       if (op1 == 0x5)
-        {
-          uint32_t reg_t[2];
+	{
+	  uint32_t reg_t[2];
 
-          reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
-          reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
-          arm_insn_r->reg_rec_count = 2;
+	  reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
+	  reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
+	  arm_insn_r->reg_rec_count = 2;
 
-          REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
-          return 0;
+	  REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
+	  return 0;
        }
     }
   return arm_record_unsupported_insn (arm_insn_r);
@@ -11606,10 +13154,11 @@ arm_record_asimd_vfp_coproc (insn_decode
 /* Handling opcode 111 insns.  */
 
 static int
-arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
+arm_record_coproc_data_proc (arm_insn_decode_record *arm_insn_r)
 {
   uint32_t op, op1_ebit, coproc, bits_24_25;
-  struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep> (arm_insn_r->gdbarch);
   struct regcache *reg_cache = arm_insn_r->regcache;
 
   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
@@ -11622,23 +13171,23 @@ arm_record_coproc_data_proc (insn_decode
   if (bits_24_25 == 0x3)
     {
       if (tdep->arm_syscall_record != NULL)
-        {
-          ULONGEST svc_operand, svc_number;
+	{
+	  ULONGEST svc_operand, svc_number;
+
+	  svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
 
-          svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
+	  if (svc_operand)  /* OABI.  */
+	    svc_number = svc_operand - 0x900000;
+	  else /* EABI.  */
+	    regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
 
-          if (svc_operand)  /* OABI.  */
-            svc_number = svc_operand - 0x900000;
-          else /* EABI.  */
-            regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
-
-          return tdep->arm_syscall_record (reg_cache, svc_number);
-        }
-      else
-        {
-          printf_unfiltered (_("no syscall record support\n"));
-          return -1;
-        }
+	  return tdep->arm_syscall_record (reg_cache, svc_number);
+	}
+      else
+	{
+	  gdb_printf (gdb_stderr, _("no syscall record support\n"));
+	  return -1;
+	}
     }
   else if (bits_24_25 == 0x02)
     {
@@ -11736,7 +13285,7 @@ arm_record_coproc_data_proc (insn_decode
 /* Handling opcode 000 insns.  */
 
 static int
-thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
+thumb_record_shift_add_sub (arm_insn_decode_record *thumb_insn_r)
 {
   uint32_t record_buf[8];
   uint32_t reg_src1 = 0;
@@ -11756,7 +13305,7 @@ thumb_record_shift_add_sub (insn_decode_
 /* Handling opcode 001 insns.  */
 
 static int
-thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
+thumb_record_add_sub_cmp_mov (arm_insn_decode_record *thumb_insn_r)
 {
   uint32_t record_buf[8];
   uint32_t reg_src1 = 0;
@@ -11775,7 +13324,7 @@ thumb_record_add_sub_cmp_mov (insn_decod
 /* Handling opcode 010 insns.  */
 
 static int
-thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
+thumb_record_ld_st_reg_offset (arm_insn_decode_record *thumb_insn_r)
 {
   struct regcache *reg_cache =  thumb_insn_r->regcache;
   uint32_t record_buf[8], record_buf_mem[8];
@@ -11793,28 +13342,28 @@ thumb_record_ld_st_reg_offset (insn_deco
       uint32_t opB = bits (thumb_insn_r->arm_insn, 9, 11);
 
       if (in_inclusive_range (opB, 4U, 7U))
-        {
-          /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH.  */
-          reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
-          record_buf[0] = reg_src1;
-          thumb_insn_r->reg_rec_count = 1;
-        }
+	{
+	  /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH.  */
+	  reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
+	  record_buf[0] = reg_src1;
+	  thumb_insn_r->reg_rec_count = 1;
+	}
       else if (in_inclusive_range (opB, 0U, 2U))
-        {
-          /* STR(2), STRB(2), STRH(2) .  */
-          reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
-          reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
-          regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
-          regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
-          if (0 == opB)
-            record_buf_mem[0] = 4;    /* STR (2).  */
-          else if (2 == opB)
-            record_buf_mem[0] = 1;    /*  STRB (2).  */
-          else if (1 == opB)
-            record_buf_mem[0] = 2;    /* STRH (2).  */
-          record_buf_mem[1] = u_regval[0] + u_regval[1];
-          thumb_insn_r->mem_rec_count = 1;
-        }
+	{
+	  /* STR(2), STRB(2), STRH(2) .  */
+	  reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
+	  reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
+	  regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
+	  regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
+	  if (0 == opB)
+	    record_buf_mem[0] = 4;    /* STR (2).  */
+	  else if (2 == opB)
+	    record_buf_mem[0] = 1;    /*  STRB (2).  */
+	  else if (1 == opB)
+	    record_buf_mem[0] = 2;    /* STRH (2).  */
+	  record_buf_mem[1] = u_regval[0] + u_regval[1];
+	  thumb_insn_r->mem_rec_count = 1;
+	}
     }
   else if (bit (thumb_insn_r->arm_insn, 11))
     {
@@ -11830,28 +13379,28 @@ thumb_record_ld_st_reg_offset (insn_deco
       opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
       opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
       if ((3 == opcode2) && (!opcode3))
-        {
-          /* Branch with exchange.  */
-          record_buf[0] = ARM_PS_REGNUM;
-          thumb_insn_r->reg_rec_count = 1;
-        }
+	{
+	  /* Branch with exchange.  */
+	  record_buf[0] = ARM_PS_REGNUM;
+	  thumb_insn_r->reg_rec_count = 1;
+	}
       else
-        {
+	{
 	  /* Format 8; special data processing insns.  */
 	  record_buf[0] = ARM_PS_REGNUM;
 	  record_buf[1] = (bit (thumb_insn_r->arm_insn, 7) << 3
 			   | bits (thumb_insn_r->arm_insn, 0, 2));
-          thumb_insn_r->reg_rec_count = 2;
-        }
+	  thumb_insn_r->reg_rec_count = 2;
+	}
     }
   else
     {
       /* Format 5; data processing insns.  */
       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
       if (bit (thumb_insn_r->arm_insn, 7))
-        {
-          reg_src1 = reg_src1 + 8;
-        }
+	{
+	  reg_src1 = reg_src1 + 8;
+	}
       record_buf[0] = ARM_PS_REGNUM;
       record_buf[1] = reg_src1;
       thumb_insn_r->reg_rec_count = 2;
@@ -11859,7 +13408,7 @@ thumb_record_ld_st_reg_offset (insn_deco
 
   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
-             record_buf_mem);
+	     record_buf_mem);
 
   return 0;
 }
@@ -11867,7 +13416,7 @@ thumb_record_ld_st_reg_offset (insn_deco
 /* Handling opcode 001 insns.  */
 
 static int
-thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
+thumb_record_ld_st_imm_offset (arm_insn_decode_record *thumb_insn_r)
 {
   struct regcache *reg_cache = thumb_insn_r->regcache;
   uint32_t record_buf[8], record_buf_mem[8];
@@ -11899,7 +13448,7 @@ thumb_record_ld_st_imm_offset (insn_deco
 
   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count, 
-             record_buf_mem);
+	     record_buf_mem);
 
   return 0;
 }
@@ -11907,7 +13456,7 @@ thumb_record_ld_st_imm_offset (insn_deco
 /* Handling opcode 100 insns.  */
 
 static int
-thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
+thumb_record_ld_st_stack (arm_insn_decode_record *thumb_insn_r)
 {
   struct regcache *reg_cache = thumb_insn_r->regcache;
   uint32_t record_buf[8], record_buf_mem[8];
@@ -11955,7 +13504,7 @@ thumb_record_ld_st_stack (insn_decode_re
 
   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
-             record_buf_mem);
+	     record_buf_mem);
 
   return 0;
 }
@@ -11963,7 +13512,7 @@ thumb_record_ld_st_stack (insn_decode_re
 /* Handling opcode 101 insns.  */
 
 static int
-thumb_record_misc (insn_decode_record *thumb_insn_r)
+thumb_record_misc (arm_insn_decode_record *thumb_insn_r)
 {
   struct regcache *reg_cache = thumb_insn_r->regcache;
 
@@ -12068,11 +13617,12 @@ thumb_record_misc (insn_decode_record *t
 	  record_buf[1] = ARM_LR_REGNUM;
 	  thumb_insn_r->reg_rec_count = 2;
 	  /* We need to save SPSR value, which is not yet done.  */
-	  printf_unfiltered (_("Process record does not support instruction "
-			       "0x%0x at address %s.\n"),
-			     thumb_insn_r->arm_insn,
-			     paddress (thumb_insn_r->gdbarch,
-				       thumb_insn_r->this_addr));
+	  gdb_printf (gdb_stderr,
+		      _("Process record does not support instruction "
+			"0x%0x at address %s.\n"),
+		      thumb_insn_r->arm_insn,
+		      paddress (thumb_insn_r->gdbarch,
+				thumb_insn_r->this_addr));
 	  return -1;
 
 	case 0xf:
@@ -12085,7 +13635,7 @@ thumb_record_misc (insn_decode_record *t
 
   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
-             record_buf_mem);
+	     record_buf_mem);
 
   return 0;
 }
@@ -12093,9 +13643,10 @@ thumb_record_misc (insn_decode_record *t
 /* Handling opcode 110 insns.  */
 
 static int
-thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)                
+thumb_record_ldm_stm_swi (arm_insn_decode_record *thumb_insn_r)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
+  arm_gdbarch_tdep *tdep
+    = gdbarch_tdep<arm_gdbarch_tdep>  (thumb_insn_r->gdbarch);
   struct regcache *reg_cache = thumb_insn_r->regcache;
 
   uint32_t ret = 0; /* function return value: -1:record failure ;  0:success  */
@@ -12117,12 +13668,12 @@ thumb_record_ldm_stm_swi (insn_decode_re
       /* Get Rn.  */
       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
       while (register_bits)
-        {
-          if (register_bits & 0x00000001)
-            record_buf[index++] = register_count;
-          register_bits = register_bits >> 1;
-          register_count++;
-        }
+	{
+	  if (register_bits & 0x00000001)
+	    record_buf[index++] = register_count;
+	  register_bits = register_bits >> 1;
+	  register_count++;
+	}
       record_buf[index++] = reg_src1;
       thumb_insn_r->reg_rec_count = index;
     }
@@ -12134,34 +13685,34 @@ thumb_record_ldm_stm_swi (insn_decode_re
       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
       while (register_bits)
-        {
-          if (register_bits & 0x00000001)
-            register_count++;
-          register_bits = register_bits >> 1;
-        }
+	{
+	  if (register_bits & 0x00000001)
+	    register_count++;
+	  register_bits = register_bits >> 1;
+	}
       start_address = u_regval;
       thumb_insn_r->mem_rec_count = register_count;
       while (register_count)
-        {
-          record_buf_mem[(register_count * 2) - 1] = start_address;
-          record_buf_mem[(register_count * 2) - 2] = 4;
-          start_address = start_address + 4;
-          register_count--;
-        }
+	{
+	  record_buf_mem[(register_count * 2) - 1] = start_address;
+	  record_buf_mem[(register_count * 2) - 2] = 4;
+	  start_address = start_address + 4;
+	  register_count--;
+	}
     }
   else if (0x1F == opcode1)
     {
-        /* Handle arm syscall insn.  */
-        if (tdep->arm_syscall_record != NULL)
-          {
-            regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
-            ret = tdep->arm_syscall_record (reg_cache, u_regval);
-          }
-        else
-          {
-            printf_unfiltered (_("no syscall record support\n"));
-            return -1;
-          }
+	/* Handle arm syscall insn.  */
+	if (tdep->arm_syscall_record != NULL)
+	  {
+	    regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
+	    ret = tdep->arm_syscall_record (reg_cache, u_regval);
+	  }
+	else
+	  {
+	    gdb_printf (gdb_stderr, _("no syscall record support\n"));
+	    return -1;
+	  }
     }
 
   /* B (1), conditional branch is automatically taken care in process_record,
@@ -12169,7 +13720,7 @@ thumb_record_ldm_stm_swi (insn_decode_re
 
   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
-             record_buf_mem);
+	     record_buf_mem);
 
   return ret;
 }
@@ -12177,7 +13728,7 @@ thumb_record_ldm_stm_swi (insn_decode_re
 /* Handling opcode 111 insns.  */
 
 static int
-thumb_record_branch (insn_decode_record *thumb_insn_r)
+thumb_record_branch (arm_insn_decode_record *thumb_insn_r)
 {
   uint32_t record_buf[8];
   uint32_t bits_h = 0;
@@ -12209,7 +13760,7 @@ thumb_record_branch (insn_decode_record
 /* Handler for thumb2 load/store multiple instructions.  */
 
 static int
-thumb2_record_ld_st_multiple (insn_decode_record *thumb2_insn_r)
+thumb2_record_ld_st_multiple (arm_insn_decode_record *thumb2_insn_r)
 {
   struct regcache *reg_cache = thumb2_insn_r->regcache;
 
@@ -12226,77 +13777,77 @@ thumb2_record_ld_st_multiple (insn_decod
   if (0 == op || 3 == op)
     {
       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
-        {
-          /* Handle RFE instruction.  */
-          record_buf[0] = ARM_PS_REGNUM;
-          thumb2_insn_r->reg_rec_count = 1;
-        }
-      else
-        {
-          /* Handle SRS instruction after reading banked SP.  */
-          return arm_record_unsupported_insn (thumb2_insn_r);
-        }
+	{
+	  /* Handle RFE instruction.  */
+	  record_buf[0] = ARM_PS_REGNUM;
+	  thumb2_insn_r->reg_rec_count = 1;
+	}
+      else
+	{
+	  /* Handle SRS instruction after reading banked SP.  */
+	  return arm_record_unsupported_insn (thumb2_insn_r);
+	}
     }
   else if (1 == op || 2 == op)
     {
       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
-        {
-          /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions.  */
-          register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
-          while (register_bits)
-            {
-              if (register_bits & 0x00000001)
-                record_buf[index++] = register_count;
-
-              register_count++;
-              register_bits = register_bits >> 1;
-            }
-          record_buf[index++] = reg_rn;
-          record_buf[index++] = ARM_PS_REGNUM;
-          thumb2_insn_r->reg_rec_count = index;
-        }
-      else
-        {
-          /* Handle STM/STMIA/STMEA and STMDB/STMFD.  */
-          register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
-          regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
-          while (register_bits)
-            {
-              if (register_bits & 0x00000001)
-                register_count++;
-
-              register_bits = register_bits >> 1;
-            }
-
-          if (1 == op)
-            {
-              /* Start address calculation for LDMDB/LDMEA.  */
-              start_address = u_regval;
-            }
-          else if (2 == op)
-            {
-              /* Start address calculation for LDMDB/LDMEA.  */
-              start_address = u_regval - register_count * 4;
-            }
-
-          thumb2_insn_r->mem_rec_count = register_count;
-          while (register_count)
-            {
-              record_buf_mem[register_count * 2 - 1] = start_address;
-              record_buf_mem[register_count * 2 - 2] = 4;
-              start_address = start_address + 4;
-              register_count--;
-            }
-          record_buf[0] = reg_rn;
-          record_buf[1] = ARM_PS_REGNUM;
-          thumb2_insn_r->reg_rec_count = 2;
-        }
+	{
+	  /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions.  */
+	  register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
+	  while (register_bits)
+	    {
+	      if (register_bits & 0x00000001)
+		record_buf[index++] = register_count;
+
+	      register_count++;
+	      register_bits = register_bits >> 1;
+	    }
+	  record_buf[index++] = reg_rn;
+	  record_buf[index++] = ARM_PS_REGNUM;
+	  thumb2_insn_r->reg_rec_count = index;
+	}
+      else
+	{
+	  /* Handle STM/STMIA/STMEA and STMDB/STMFD.  */
+	  register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
+	  regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
+	  while (register_bits)
+	    {
+	      if (register_bits & 0x00000001)
+		register_count++;
+
+	      register_bits = register_bits >> 1;
+	    }
+
+	  if (1 == op)
+	    {
+	      /* Start address calculation for LDMDB/LDMEA.  */
+	      start_address = u_regval;
+	    }
+	  else if (2 == op)
+	    {
+	      /* Start address calculation for LDMDB/LDMEA.  */
+	      start_address = u_regval - register_count * 4;
+	    }
+
+	  thumb2_insn_r->mem_rec_count = register_count;
+	  while (register_count)
+	    {
+	      record_buf_mem[register_count * 2 - 1] = start_address;
+	      record_buf_mem[register_count * 2 - 2] = 4;
+	      start_address = start_address + 4;
+	      register_count--;
+	    }
+	  record_buf[0] = reg_rn;
+	  record_buf[1] = ARM_PS_REGNUM;
+	  thumb2_insn_r->reg_rec_count = 2;
+	}
     }
 
   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
-            record_buf_mem);
+	    record_buf_mem);
   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-            record_buf);
+	    record_buf);
   return ARM_RECORD_SUCCESS;
 }
 
@@ -12304,7 +13855,7 @@ thumb2_record_ld_st_multiple (insn_decod
    instructions.  */
 
 static int
-thumb2_record_ld_st_dual_ex_tbb (insn_decode_record *thumb2_insn_r)
+thumb2_record_ld_st_dual_ex_tbb (arm_insn_decode_record *thumb2_insn_r)
 {
   struct regcache *reg_cache = thumb2_insn_r->regcache;
 
@@ -12323,19 +13874,19 @@ thumb2_record_ld_st_dual_ex_tbb (insn_de
   if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
     {
       if(!(1 == op1 && 1 == op2 && (0 == op3 || 1 == op3)))
-        {
-          reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
-          record_buf[0] = reg_dest1;
-          record_buf[1] = ARM_PS_REGNUM;
-          thumb2_insn_r->reg_rec_count = 2;
-        }
+	{
+	  reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
+	  record_buf[0] = reg_dest1;
+	  record_buf[1] = ARM_PS_REGNUM;
+	  thumb2_insn_r->reg_rec_count = 2;
+	}
 
       if (3 == op2 || (op1 & 2) || (1 == op1 && 1 == op2 && 7 == op3))
-        {
-          reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
-          record_buf[2] = reg_dest2;
-          thumb2_insn_r->reg_rec_count = 3;
-        }
+	{
+	  reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
+	  record_buf[2] = reg_dest2;
+	  thumb2_insn_r->reg_rec_count = 3;
+	}
     }
   else
     {
@@ -12343,77 +13894,77 @@ thumb2_record_ld_st_dual_ex_tbb (insn_de
       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
 
       if (0 == op1 && 0 == op2)
-        {
-          /* Handle STREX.  */
-          offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
-          address = u_regval[0] + (offset_imm * 4);
-          record_buf_mem[0] = 4;
-          record_buf_mem[1] = address;
-          thumb2_insn_r->mem_rec_count = 1;
-          reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
-          record_buf[0] = reg_rd;
-          thumb2_insn_r->reg_rec_count = 1;
-        }
+	{
+	  /* Handle STREX.  */
+	  offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
+	  address = u_regval[0] + (offset_imm * 4);
+	  record_buf_mem[0] = 4;
+	  record_buf_mem[1] = address;
+	  thumb2_insn_r->mem_rec_count = 1;
+	  reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
+	  record_buf[0] = reg_rd;
+	  thumb2_insn_r->reg_rec_count = 1;
+	}
       else if (1 == op1 && 0 == op2)
-        {
-          reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
-          record_buf[0] = reg_rd;
-          thumb2_insn_r->reg_rec_count = 1;
-          address = u_regval[0];
-          record_buf_mem[1] = address;
-
-          if (4 == op3)
-            {
-              /* Handle STREXB.  */
-              record_buf_mem[0] = 1;
-              thumb2_insn_r->mem_rec_count = 1;
-            }
-          else if (5 == op3)
-            {
-              /* Handle STREXH.  */
-              record_buf_mem[0] = 2 ;
-              thumb2_insn_r->mem_rec_count = 1;
-            }
-          else if (7 == op3)
-            {
-              /* Handle STREXD.  */
-              address = u_regval[0];
-              record_buf_mem[0] = 4;
-              record_buf_mem[2] = 4;
-              record_buf_mem[3] = address + 4;
-              thumb2_insn_r->mem_rec_count = 2;
-            }
-        }
-      else
-        {
-          offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
-
-          if (bit (thumb2_insn_r->arm_insn, 24))
-            {
-              if (bit (thumb2_insn_r->arm_insn, 23))
-                offset_addr = u_regval[0] + (offset_imm * 4);
-              else
-                offset_addr = u_regval[0] - (offset_imm * 4);
-
-              address = offset_addr;
-            }
-          else
-            address = u_regval[0];
-
-          record_buf_mem[0] = 4;
-          record_buf_mem[1] = address;
-          record_buf_mem[2] = 4;
-          record_buf_mem[3] = address + 4;
-          thumb2_insn_r->mem_rec_count = 2;
-          record_buf[0] = reg_rn;
-          thumb2_insn_r->reg_rec_count = 1;
-        }
+	{
+	  reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
+	  record_buf[0] = reg_rd;
+	  thumb2_insn_r->reg_rec_count = 1;
+	  address = u_regval[0];
+	  record_buf_mem[1] = address;
+
+	  if (4 == op3)
+	    {
+	      /* Handle STREXB.  */
+	      record_buf_mem[0] = 1;
+	      thumb2_insn_r->mem_rec_count = 1;
+	    }
+	  else if (5 == op3)
+	    {
+	      /* Handle STREXH.  */
+	      record_buf_mem[0] = 2 ;
+	      thumb2_insn_r->mem_rec_count = 1;
+	    }
+	  else if (7 == op3)
+	    {
+	      /* Handle STREXD.  */
+	      address = u_regval[0];
+	      record_buf_mem[0] = 4;
+	      record_buf_mem[2] = 4;
+	      record_buf_mem[3] = address + 4;
+	      thumb2_insn_r->mem_rec_count = 2;
+	    }
+	}
+      else
+	{
+	  offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
+
+	  if (bit (thumb2_insn_r->arm_insn, 24))
+	    {
+	      if (bit (thumb2_insn_r->arm_insn, 23))
+		offset_addr = u_regval[0] + (offset_imm * 4);
+	      else
+		offset_addr = u_regval[0] - (offset_imm * 4);
+
+	      address = offset_addr;
+	    }
+	  else
+	    address = u_regval[0];
+
+	  record_buf_mem[0] = 4;
+	  record_buf_mem[1] = address;
+	  record_buf_mem[2] = 4;
+	  record_buf_mem[3] = address + 4;
+	  thumb2_insn_r->mem_rec_count = 2;
+	  record_buf[0] = reg_rn;
+	  thumb2_insn_r->reg_rec_count = 1;
+	}
     }
 
   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-            record_buf);
+	    record_buf);
   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
-            record_buf_mem);
+	    record_buf_mem);
   return ARM_RECORD_SUCCESS;
 }
 
@@ -12421,7 +13972,7 @@ thumb2_record_ld_st_dual_ex_tbb (insn_de
    instructions.  */
 
 static int
-thumb2_record_data_proc_sreg_mimm (insn_decode_record *thumb2_insn_r)
+thumb2_record_data_proc_sreg_mimm (arm_insn_decode_record *thumb2_insn_r)
 {
   uint32_t reg_rd, op;
   uint32_t record_buf[8];
@@ -12442,7 +13993,7 @@ thumb2_record_data_proc_sreg_mimm (insn_
     }
 
   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-            record_buf);
+	    record_buf);
   return ARM_RECORD_SUCCESS;
 }
 
@@ -12450,7 +14001,7 @@ thumb2_record_data_proc_sreg_mimm (insn_
    registers.  */
 
 static int
-thumb2_record_ps_dest_generic (insn_decode_record *thumb2_insn_r)
+thumb2_record_ps_dest_generic (arm_insn_decode_record *thumb2_insn_r)
 {
   uint32_t reg_rd;
   uint32_t record_buf[8];
@@ -12462,14 +14013,14 @@ thumb2_record_ps_dest_generic (insn_deco
   thumb2_insn_r->reg_rec_count = 2;
 
   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-            record_buf);
+	    record_buf);
   return ARM_RECORD_SUCCESS;
 }
 
 /* Handler for thumb2 branch and miscellaneous control instructions.  */
 
 static int
-thumb2_record_branch_misc_cntrl (insn_decode_record *thumb2_insn_r)
+thumb2_record_branch_misc_cntrl (arm_insn_decode_record *thumb2_insn_r)
 {
   uint32_t op, op1, op2;
   uint32_t record_buf[8];
@@ -12482,16 +14033,16 @@ thumb2_record_branch_misc_cntrl (insn_de
   if (!(op1 & 0x2) && 0x38 == op)
     {
       if (!(op2 & 0x3))
-        {
-          /* CPSR is going to be changed.  */
-          record_buf[0] = ARM_PS_REGNUM;
-          thumb2_insn_r->reg_rec_count = 1;
-        }
-      else
-        {
-          arm_record_unsupported_insn(thumb2_insn_r);
-          return -1;
-        }
+	{
+	  /* CPSR is going to be changed.  */
+	  record_buf[0] = ARM_PS_REGNUM;
+	  thumb2_insn_r->reg_rec_count = 1;
+	}
+      else
+	{
+	  arm_record_unsupported_insn(thumb2_insn_r);
+	  return -1;
+	}
     }
   else if (4 == (op1 & 0x5) || 5 == (op1 & 0x5))
     {
@@ -12502,14 +14053,14 @@ thumb2_record_branch_misc_cntrl (insn_de
     }
 
   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-            record_buf);
+	    record_buf);
   return ARM_RECORD_SUCCESS;
 }
 
 /* Handler for thumb2 store single data item instructions.  */
 
 static int
-thumb2_record_str_single_data (insn_decode_record *thumb2_insn_r)
+thumb2_record_str_single_data (arm_insn_decode_record *thumb2_insn_r)
 {
   struct regcache *reg_cache = thumb2_insn_r->regcache;
 
@@ -12536,29 +14087,29 @@ thumb2_record_str_single_data (insn_deco
     {
       /* T3 encoding.  */
       if ((0 == op1 || 1 == op1 || 2 == op1) && !(op2 & 0x20))
-        {
-          /* Handle STRB (register).  */
-          reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
-          regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
-          shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
-          offset_addr = u_regval[1] << shift_imm;
-          address = u_regval[0] + offset_addr;
-        }
-      else
-        {
-          offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
-          if (bit (thumb2_insn_r->arm_insn, 10))
-            {
-              if (bit (thumb2_insn_r->arm_insn, 9))
-                offset_addr = u_regval[0] + offset_imm;
-              else
-                offset_addr = u_regval[0] - offset_imm;
-
-              address = offset_addr;
-            }
-          else
-            address = u_regval[0];
-        }
+	{
+	  /* Handle STRB (register).  */
+	  reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
+	  regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
+	  shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
+	  offset_addr = u_regval[1] << shift_imm;
+	  address = u_regval[0] + offset_addr;
+	}
+      else
+	{
+	  offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
+	  if (bit (thumb2_insn_r->arm_insn, 10))
+	    {
+	      if (bit (thumb2_insn_r->arm_insn, 9))
+		offset_addr = u_regval[0] + offset_imm;
+	      else
+		offset_addr = u_regval[0] - offset_imm;
+
+	      address = offset_addr;
+	    }
+	  else
+	    address = u_regval[0];
+	}
     }
 
   switch (op1)
@@ -12566,22 +14117,22 @@ thumb2_record_str_single_data (insn_deco
       /* Store byte instructions.  */
       case 4:
       case 0:
-        record_buf_mem[0] = 1;
-        break;
+	record_buf_mem[0] = 1;
+	break;
       /* Store half word instructions.  */
       case 1:
       case 5:
-        record_buf_mem[0] = 2;
-        break;
+	record_buf_mem[0] = 2;
+	break;
       /* Store word instructions.  */
       case 2:
       case 6:
-        record_buf_mem[0] = 4;
-        break;
+	record_buf_mem[0] = 4;
+	break;
 
       default:
-        gdb_assert_not_reached ("no decoding pattern found");
-        break;
+	gdb_assert_not_reached ("no decoding pattern found");
+	break;
     }
 
   record_buf_mem[1] = address;
@@ -12590,16 +14141,16 @@ thumb2_record_str_single_data (insn_deco
   thumb2_insn_r->reg_rec_count = 1;
 
   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-            record_buf);
+	    record_buf);
   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
-            record_buf_mem);
+	    record_buf_mem);
   return ARM_RECORD_SUCCESS;
 }
 
 /* Handler for thumb2 load memory hints instructions.  */
 
 static int
-thumb2_record_ld_mem_hints (insn_decode_record *thumb2_insn_r)
+thumb2_record_ld_mem_hints (arm_insn_decode_record *thumb2_insn_r)
 {
   uint32_t record_buf[8];
   uint32_t reg_rt, reg_rn;
@@ -12615,7 +14166,7 @@ thumb2_record_ld_mem_hints (insn_decode_
       thumb2_insn_r->reg_rec_count = 3;
 
       REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-                record_buf);
+		record_buf);
       return ARM_RECORD_SUCCESS;
     }
 
@@ -12625,7 +14176,7 @@ thumb2_record_ld_mem_hints (insn_decode_
 /* Handler for thumb2 load word instructions.  */
 
 static int
-thumb2_record_ld_word (insn_decode_record *thumb2_insn_r)
+thumb2_record_ld_word (arm_insn_decode_record *thumb2_insn_r)
 {
   uint32_t record_buf[8];
 
@@ -12634,7 +14185,7 @@ thumb2_record_ld_word (insn_decode_recor
   thumb2_insn_r->reg_rec_count = 2;
 
   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-            record_buf);
+	    record_buf);
   return ARM_RECORD_SUCCESS;
 }
 
@@ -12642,7 +14193,7 @@ thumb2_record_ld_word (insn_decode_recor
    divide instructions.  */
 
 static int
-thumb2_record_lmul_lmla_div (insn_decode_record *thumb2_insn_r)
+thumb2_record_lmul_lmla_div (arm_insn_decode_record *thumb2_insn_r)
 {
   uint32_t opcode1 = 0, opcode2 = 0;
   uint32_t record_buf[8];
@@ -12671,14 +14222,14 @@ thumb2_record_lmul_lmla_div (insn_decode
     return ARM_RECORD_FAILURE;
 
   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-            record_buf);
+	    record_buf);
   return ARM_RECORD_SUCCESS;
 }
 
 /* Record handler for thumb32 coprocessor instructions.  */
 
 static int
-thumb2_record_coproc_insn (insn_decode_record *thumb2_insn_r)
+thumb2_record_coproc_insn (arm_insn_decode_record *thumb2_insn_r)
 {
   if (bit (thumb2_insn_r->arm_insn, 25))
     return arm_record_coproc_data_proc (thumb2_insn_r);
@@ -12689,7 +14240,7 @@ thumb2_record_coproc_insn (insn_decode_r
 /* Record handler for advance SIMD structure load/store instructions.  */
 
 static int
-thumb2_record_asimd_struct_ld_st (insn_decode_record *thumb2_insn_r)
+thumb2_record_asimd_struct_ld_st (arm_insn_decode_record *thumb2_insn_r)
 {
   struct regcache *reg_cache = thumb2_insn_r->regcache;
   uint32_t l_bit, a_bit, b_bits;
@@ -12714,151 +14265,151 @@ thumb2_record_asimd_struct_ld_st (insn_d
       address = u_regval;
 
       if (!a_bit)
-        {
-          /* Handle VST1.  */
-          if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
-            {
-              if (b_bits == 0x07)
-                bf_regs = 1;
-              else if (b_bits == 0x0a)
-                bf_regs = 2;
-              else if (b_bits == 0x06)
-                bf_regs = 3;
-              else if (b_bits == 0x02)
-                bf_regs = 4;
-              else
-                bf_regs = 0;
-
-              for (index_r = 0; index_r < bf_regs; index_r++)
-                {
-                  for (index_e = 0; index_e < f_elem; index_e++)
-                    {
-                      record_buf_mem[index_m++] = f_ebytes;
-                      record_buf_mem[index_m++] = address;
-                      address = address + f_ebytes;
-                      thumb2_insn_r->mem_rec_count += 1;
-                    }
-                }
-            }
-          /* Handle VST2.  */
-          else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
-            {
-              if (b_bits == 0x09 || b_bits == 0x08)
-                bf_regs = 1;
-              else if (b_bits == 0x03)
-                bf_regs = 2;
-              else
-                bf_regs = 0;
-
-              for (index_r = 0; index_r < bf_regs; index_r++)
-                for (index_e = 0; index_e < f_elem; index_e++)
-                  {
-                    for (loop_t = 0; loop_t < 2; loop_t++)
-                      {
-                        record_buf_mem[index_m++] = f_ebytes;
-                        record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
-                        thumb2_insn_r->mem_rec_count += 1;
-                      }
-                    address = address + (2 * f_ebytes);
-                  }
-            }
-          /* Handle VST3.  */
-          else if ((b_bits & 0x0e) == 0x04)
-            {
-              for (index_e = 0; index_e < f_elem; index_e++)
-                {
-                  for (loop_t = 0; loop_t < 3; loop_t++)
-                    {
-                      record_buf_mem[index_m++] = f_ebytes;
-                      record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
-                      thumb2_insn_r->mem_rec_count += 1;
-                    }
-                  address = address + (3 * f_ebytes);
-                }
-            }
-          /* Handle VST4.  */
-          else if (!(b_bits & 0x0e))
-            {
-              for (index_e = 0; index_e < f_elem; index_e++)
-                {
-                  for (loop_t = 0; loop_t < 4; loop_t++)
-                    {
-                      record_buf_mem[index_m++] = f_ebytes;
-                      record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
-                      thumb2_insn_r->mem_rec_count += 1;
-                    }
-                  address = address + (4 * f_ebytes);
-                }
-            }
-        }
-      else
-        {
-          uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
-
-          if (bft_size == 0x00)
-            f_ebytes = 1;
-          else if (bft_size == 0x01)
-            f_ebytes = 2;
-          else if (bft_size == 0x02)
-            f_ebytes = 4;
-          else
-            f_ebytes = 0;
-
-          /* Handle VST1.  */
-          if (!(b_bits & 0x0b) || b_bits == 0x08)
-            thumb2_insn_r->mem_rec_count = 1;
-          /* Handle VST2.  */
-          else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
-            thumb2_insn_r->mem_rec_count = 2;
-          /* Handle VST3.  */
-          else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
-            thumb2_insn_r->mem_rec_count = 3;
-          /* Handle VST4.  */
-          else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
-            thumb2_insn_r->mem_rec_count = 4;
-
-          for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
-            {
-              record_buf_mem[index_m] = f_ebytes;
-              record_buf_mem[index_m] = address + (index_m * f_ebytes);
-            }
-        }
+	{
+	  /* Handle VST1.  */
+	  if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
+	    {
+	      if (b_bits == 0x07)
+		bf_regs = 1;
+	      else if (b_bits == 0x0a)
+		bf_regs = 2;
+	      else if (b_bits == 0x06)
+		bf_regs = 3;
+	      else if (b_bits == 0x02)
+		bf_regs = 4;
+	      else
+		bf_regs = 0;
+
+	      for (index_r = 0; index_r < bf_regs; index_r++)
+		{
+		  for (index_e = 0; index_e < f_elem; index_e++)
+		    {
+		      record_buf_mem[index_m++] = f_ebytes;
+		      record_buf_mem[index_m++] = address;
+		      address = address + f_ebytes;
+		      thumb2_insn_r->mem_rec_count += 1;
+		    }
+		}
+	    }
+	  /* Handle VST2.  */
+	  else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
+	    {
+	      if (b_bits == 0x09 || b_bits == 0x08)
+		bf_regs = 1;
+	      else if (b_bits == 0x03)
+		bf_regs = 2;
+	      else
+		bf_regs = 0;
+
+	      for (index_r = 0; index_r < bf_regs; index_r++)
+		for (index_e = 0; index_e < f_elem; index_e++)
+		  {
+		    for (loop_t = 0; loop_t < 2; loop_t++)
+		      {
+			record_buf_mem[index_m++] = f_ebytes;
+			record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
+			thumb2_insn_r->mem_rec_count += 1;
+		      }
+		    address = address + (2 * f_ebytes);
+		  }
+	    }
+	  /* Handle VST3.  */
+	  else if ((b_bits & 0x0e) == 0x04)
+	    {
+	      for (index_e = 0; index_e < f_elem; index_e++)
+		{
+		  for (loop_t = 0; loop_t < 3; loop_t++)
+		    {
+		      record_buf_mem[index_m++] = f_ebytes;
+		      record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
+		      thumb2_insn_r->mem_rec_count += 1;
+		    }
+		  address = address + (3 * f_ebytes);
+		}
+	    }
+	  /* Handle VST4.  */
+	  else if (!(b_bits & 0x0e))
+	    {
+	      for (index_e = 0; index_e < f_elem; index_e++)
+		{
+		  for (loop_t = 0; loop_t < 4; loop_t++)
+		    {
+		      record_buf_mem[index_m++] = f_ebytes;
+		      record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
+		      thumb2_insn_r->mem_rec_count += 1;
+		    }
+		  address = address + (4 * f_ebytes);
+		}
+	    }
+	}
+      else
+	{
+	  uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
+
+	  if (bft_size == 0x00)
+	    f_ebytes = 1;
+	  else if (bft_size == 0x01)
+	    f_ebytes = 2;
+	  else if (bft_size == 0x02)
+	    f_ebytes = 4;
+	  else
+	    f_ebytes = 0;
+
+	  /* Handle VST1.  */
+	  if (!(b_bits & 0x0b) || b_bits == 0x08)
+	    thumb2_insn_r->mem_rec_count = 1;
+	  /* Handle VST2.  */
+	  else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
+	    thumb2_insn_r->mem_rec_count = 2;
+	  /* Handle VST3.  */
+	  else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
+	    thumb2_insn_r->mem_rec_count = 3;
+	  /* Handle VST4.  */
+	  else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
+	    thumb2_insn_r->mem_rec_count = 4;
+
+	  for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
+	    {
+	      record_buf_mem[index_m] = f_ebytes;
+	      record_buf_mem[index_m] = address + (index_m * f_ebytes);
+	    }
+	}
     }
   else
     {
       if (!a_bit)
-        {
-          /* Handle VLD1.  */
-          if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
-            thumb2_insn_r->reg_rec_count = 1;
-          /* Handle VLD2.  */
-          else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
-            thumb2_insn_r->reg_rec_count = 2;
-          /* Handle VLD3.  */
-          else if ((b_bits & 0x0e) == 0x04)
-            thumb2_insn_r->reg_rec_count = 3;
-          /* Handle VLD4.  */
-          else if (!(b_bits & 0x0e))
-            thumb2_insn_r->reg_rec_count = 4;
-        }
-      else
-        {
-          /* Handle VLD1.  */
-          if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
-            thumb2_insn_r->reg_rec_count = 1;
-          /* Handle VLD2.  */
-          else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
-            thumb2_insn_r->reg_rec_count = 2;
-          /* Handle VLD3.  */
-          else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
-            thumb2_insn_r->reg_rec_count = 3;
-          /* Handle VLD4.  */
-          else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
-            thumb2_insn_r->reg_rec_count = 4;
-
-          for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
-            record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
-        }
+	{
+	  /* Handle VLD1.  */
+	  if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
+	    thumb2_insn_r->reg_rec_count = 1;
+	  /* Handle VLD2.  */
+	  else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
+	    thumb2_insn_r->reg_rec_count = 2;
+	  /* Handle VLD3.  */
+	  else if ((b_bits & 0x0e) == 0x04)
+	    thumb2_insn_r->reg_rec_count = 3;
+	  /* Handle VLD4.  */
+	  else if (!(b_bits & 0x0e))
+	    thumb2_insn_r->reg_rec_count = 4;
+	}
+      else
+	{
+	  /* Handle VLD1.  */
+	  if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
+	    thumb2_insn_r->reg_rec_count = 1;
+	  /* Handle VLD2.  */
+	  else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
+	    thumb2_insn_r->reg_rec_count = 2;
+	  /* Handle VLD3.  */
+	  else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
+	    thumb2_insn_r->reg_rec_count = 3;
+	  /* Handle VLD4.  */
+	  else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
+	    thumb2_insn_r->reg_rec_count = 4;
+
+	  for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
+	    record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
+	}
     }
 
   if (bits (thumb2_insn_r->arm_insn, 0, 3) != 15)
@@ -12868,16 +14419,16 @@ thumb2_record_asimd_struct_ld_st (insn_d
     }
 
   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
-            record_buf);
+	    record_buf);
   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
-            record_buf_mem);
+	    record_buf_mem);
   return 0;
 }
 
 /* Decodes thumb2 instruction type and invokes its record handler.  */
 
 static unsigned int
-thumb2_record_decode_insn_handler (insn_decode_record *thumb2_insn_r)
+thumb2_record_decode_insn_handler (arm_insn_decode_record *thumb2_insn_r)
 {
   uint32_t op, op1, op2;
 
@@ -12888,150 +14439,131 @@ thumb2_record_decode_insn_handler (insn_
   if (op1 == 0x01)
     {
       if (!(op2 & 0x64 ))
-        {
-          /* Load/store multiple instruction.  */
-          return thumb2_record_ld_st_multiple (thumb2_insn_r);
-        }
+	{
+	  /* Load/store multiple instruction.  */
+	  return thumb2_record_ld_st_multiple (thumb2_insn_r);
+	}
       else if ((op2 & 0x64) == 0x4)
-        {
-          /* Load/store (dual/exclusive) and table branch instruction.  */
-          return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
-        }
+	{
+	  /* Load/store (dual/exclusive) and table branch instruction.  */
+	  return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
+	}
       else if ((op2 & 0x60) == 0x20)
-        {
-          /* Data-processing (shifted register).  */
-          return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
-        }
+	{
+	  /* Data-processing (shifted register).  */
+	  return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
+	}
       else if (op2 & 0x40)
-        {
-          /* Co-processor instructions.  */
-          return thumb2_record_coproc_insn (thumb2_insn_r);
-        }
+	{
+	  /* Co-processor instructions.  */
+	  return thumb2_record_coproc_insn (thumb2_insn_r);
+	}
     }
   else if (op1 == 0x02)
     {
       if (op)
-        {
-          /* Branches and miscellaneous control instructions.  */
-          return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
-        }
+	{
+	  /* Branches and miscellaneous control instructions.  */
+	  return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
+	}
       else if (op2 & 0x20)
-        {
-          /* Data-processing (plain binary immediate) instruction.  */
-          return thumb2_record_ps_dest_generic (thumb2_insn_r);
-        }
-      else
-        {
-          /* Data-processing (modified immediate).  */
-          return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
-        }
+	{
+	  /* Data-processing (plain binary immediate) instruction.  */
+	  return thumb2_record_ps_dest_generic (thumb2_insn_r);
+	}
+      else
+	{
+	  /* Data-processing (modified immediate).  */
+	  return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
+	}
     }
   else if (op1 == 0x03)
     {
       if (!(op2 & 0x71 ))
-        {
-          /* Store single data item.  */
-          return thumb2_record_str_single_data (thumb2_insn_r);
-        }
+	{
+	  /* Store single data item.  */
+	  return thumb2_record_str_single_data (thumb2_insn_r);
+	}
       else if (!((op2 & 0x71) ^ 0x10))
-        {
-          /* Advanced SIMD or structure load/store instructions.  */
-          return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
-        }
+	{
+	  /* Advanced SIMD or structure load/store instructions.  */
+	  return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
+	}
       else if (!((op2 & 0x67) ^ 0x01))
-        {
-          /* Load byte, memory hints instruction.  */
-          return thumb2_record_ld_mem_hints (thumb2_insn_r);
-        }
+	{
+	  /* Load byte, memory hints instruction.  */
+	  return thumb2_record_ld_mem_hints (thumb2_insn_r);
+	}
       else if (!((op2 & 0x67) ^ 0x03))
-        {
-          /* Load halfword, memory hints instruction.  */
-          return thumb2_record_ld_mem_hints (thumb2_insn_r);
-        }
+	{
+	  /* Load halfword, memory hints instruction.  */
+	  return thumb2_record_ld_mem_hints (thumb2_insn_r);
+	}
       else if (!((op2 & 0x67) ^ 0x05))
-        {
-          /* Load word instruction.  */
-          return thumb2_record_ld_word (thumb2_insn_r);
-        }
+	{
+	  /* Load word instruction.  */
+	  return thumb2_record_ld_word (thumb2_insn_r);
+	}
       else if (!((op2 & 0x70) ^ 0x20))
-        {
-          /* Data-processing (register) instruction.  */
-          return thumb2_record_ps_dest_generic (thumb2_insn_r);
-        }
+	{
+	  /* Data-processing (register) instruction.  */
+	  return thumb2_record_ps_dest_generic (thumb2_insn_r);
+	}
       else if (!((op2 & 0x78) ^ 0x30))
-        {
-          /* Multiply, multiply accumulate, abs diff instruction.  */
-          return thumb2_record_ps_dest_generic (thumb2_insn_r);
-        }
+	{
+	  /* Multiply, multiply accumulate, abs diff instruction.  */
+	  return thumb2_record_ps_dest_generic (thumb2_insn_r);
+	}
       else if (!((op2 & 0x78) ^ 0x38))
-        {
-          /* Long multiply, long multiply accumulate, and divide.  */
-          return thumb2_record_lmul_lmla_div (thumb2_insn_r);
-        }
+	{
+	  /* Long multiply, long multiply accumulate, and divide.  */
+	  return thumb2_record_lmul_lmla_div (thumb2_insn_r);
+	}
       else if (op2 & 0x40)
-        {
-          /* Co-processor instructions.  */
-          return thumb2_record_coproc_insn (thumb2_insn_r);
-        }
+	{
+	  /* Co-processor instructions.  */
+	  return thumb2_record_coproc_insn (thumb2_insn_r);
+	}
    }
 
   return -1;
 }
 
 namespace {
-/* Abstract memory reader.  */
+/* Abstract instruction reader.  */
 
-class abstract_memory_reader
+class abstract_instruction_reader
 {
 public:
-  /* Read LEN bytes of target memory at address MEMADDR, placing the
-     results in GDB's memory at BUF.  Return true on success.  */
+  /* Read one instruction of size LEN from address MEMADDR and using
+     BYTE_ORDER endianness.  */
 
-  virtual bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) = 0;
+  virtual ULONGEST read (CORE_ADDR memaddr, const size_t len,
+			 enum bfd_endian byte_order) = 0;
 };
 
 /* Instruction reader from real target.  */
 
-class instruction_reader : public abstract_memory_reader
+class instruction_reader : public abstract_instruction_reader
 {
  public:
-  bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
+  ULONGEST read (CORE_ADDR memaddr, const size_t len,
+		 enum bfd_endian byte_order) override
   {
-    if (target_read_memory (memaddr, buf, len))
-      return false;
-    else
-      return true;
+    return read_code_unsigned_integer (memaddr, len, byte_order);
   }
 };
 
 } // namespace
 
-/* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success 
-and positive val on failure.  */
-
-static int
-extract_arm_insn (abstract_memory_reader& reader,
-		  insn_decode_record *insn_record, uint32_t insn_size)
-{
-  gdb_byte buf[insn_size];
-
-  memset (&buf[0], 0, insn_size);
-  
-  if (!reader.read (insn_record->this_addr, buf, insn_size))
-    return 1;
-  insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
-                           insn_size, 
-			   gdbarch_byte_order_for_code (insn_record->gdbarch));
-  return 0;
-}
-
-typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
+typedef int (*sti_arm_hdl_fp_t) (arm_insn_decode_record*);
 
 /* Decode arm/thumb insn depending on condition cods and opcodes; and
    dispatch it.  */
 
 static int
-decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
+decode_insn (abstract_instruction_reader &reader,
+	     arm_insn_decode_record *arm_record,
 	     record_type_t record_type, uint32_t insn_size)
 {
 
@@ -13065,19 +14597,12 @@ decode_insn (abstract_memory_reader &rea
 
   uint32_t ret = 0;    /* return value: negative:failure   0:success.  */
   uint32_t insn_id = 0;
+  enum bfd_endian code_endian
+    = gdbarch_byte_order_for_code (arm_record->gdbarch);
+  arm_record->arm_insn
+    = reader.read (arm_record->this_addr, insn_size, code_endian);
 
-  if (extract_arm_insn (reader, arm_record, insn_size))
-    {
-      if (record_debug)
-	{
-	  printf_unfiltered (_("Process record: error reading memory at "
-			       "addr %s len = %d.\n"),
-			     paddress (arm_record->gdbarch,
-				       arm_record->this_addr), insn_size);
-	}
-      return -1;
-    }
-  else if (ARM_RECORD == record_type)
+  if (ARM_RECORD == record_type)
     {
       arm_record->cond = bits (arm_record->arm_insn, 28, 31);
       insn_id = bits (arm_record->arm_insn, 25, 27);
@@ -13137,43 +14662,41 @@ decode_insn (abstract_memory_reader &rea
 #if GDB_SELF_TEST
 namespace selftests {
 
-/* Provide both 16-bit and 32-bit thumb instructions.  */
+/* Instruction reader class for selftests.
+
+   For 16-bit Thumb instructions, an array of uint16_t should be used.
 
-class instruction_reader_thumb : public abstract_memory_reader
+   For 32-bit Thumb instructions and regular 32-bit Arm instructions, an array
+   of uint32_t should be used.  */
+
+template<typename T>
+class instruction_reader_selftest : public abstract_instruction_reader
 {
 public:
   template<size_t SIZE>
-  instruction_reader_thumb (enum bfd_endian endian,
-			    const uint16_t (&insns)[SIZE])
-    : m_endian (endian), m_insns (insns), m_insns_size (SIZE)
+  instruction_reader_selftest (const T (&insns)[SIZE])
+    : m_insns (insns), m_insns_size (SIZE)
   {}
 
-  bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
+  ULONGEST read (CORE_ADDR memaddr, const size_t length,
+		 enum bfd_endian byte_order) override
   {
-    SELF_CHECK (len == 4 || len == 2);
-    SELF_CHECK (memaddr % 2 == 0);
-    SELF_CHECK ((memaddr / 2) < m_insns_size);
+    SELF_CHECK (length == sizeof (T));
+    SELF_CHECK (memaddr % sizeof (T) == 0);
+    SELF_CHECK ((memaddr / sizeof (T)) < m_insns_size);
 
-    store_unsigned_integer (buf, 2, m_endian, m_insns[memaddr / 2]);
-    if (len == 4)
-      {
-	store_unsigned_integer (&buf[2], 2, m_endian,
-				m_insns[memaddr / 2 + 1]);
-      }
-    return true;
+    return m_insns[memaddr / sizeof (T)];
   }
 
 private:
-  enum bfd_endian m_endian;
-  const uint16_t *m_insns;
-  size_t m_insns_size;
+  const T *m_insns;
+  const size_t m_insns_size;
 };
 
 static void
 arm_record_test (void)
 {
   struct gdbarch_info info;
-  gdbarch_info_init (&info);
   info.bfd_arch_info = bfd_scan_arch ("arm");
 
   struct gdbarch *gdbarch = gdbarch_find_by_info (info);
@@ -13182,11 +14705,13 @@ arm_record_test (void)
 
   /* 16-bit Thumb instructions.  */
   {
-    insn_decode_record arm_record;
+    arm_insn_decode_record arm_record;
 
-    memset (&arm_record, 0, sizeof (insn_decode_record));
+    memset (&arm_record, 0, sizeof (arm_insn_decode_record));
     arm_record.gdbarch = gdbarch;
 
+    /* Use the endian-free representation of the instructions here.  The test
+       will handle endianness conversions.  */
     static const uint16_t insns[] = {
       /* db b2	uxtb	r3, r3 */
       0xb2db,
@@ -13194,8 +14719,7 @@ arm_record_test (void)
       0x58cd,
     };
 
-    enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
-    instruction_reader_thumb reader (endian, insns);
+    instruction_reader_selftest<uint16_t> reader (insns);
     int ret = decode_insn (reader, &arm_record, THUMB_RECORD,
 			   THUMB_INSN_SIZE_BYTES);
 
@@ -13216,18 +14740,19 @@ arm_record_test (void)
 
   /* 32-bit Thumb-2 instructions.  */
   {
-    insn_decode_record arm_record;
+    arm_insn_decode_record arm_record;
 
-    memset (&arm_record, 0, sizeof (insn_decode_record));
+    memset (&arm_record, 0, sizeof (arm_insn_decode_record));
     arm_record.gdbarch = gdbarch;
 
-    static const uint16_t insns[] = {
-      /* 1d ee 70 7f	 mrc	15, 0, r7, cr13, cr0, {3} */
-      0xee1d, 0x7f70,
+    /* Use the endian-free representation of the instruction here.  The test
+       will handle endianness conversions.  */
+    static const uint32_t insns[] = {
+      /* mrc	15, 0, r7, cr13, cr0, {3} */
+      0x7f70ee1d,
     };
 
-    enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
-    instruction_reader_thumb reader (endian, insns);
+    instruction_reader_selftest<uint32_t> reader (insns);
     int ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
 			   THUMB2_INSN_SIZE_BYTES);
 
@@ -13236,14 +14761,89 @@ arm_record_test (void)
     SELF_CHECK (arm_record.reg_rec_count == 1);
     SELF_CHECK (arm_record.arm_regs[0] == 7);
   }
+
+  /* 32-bit instructions.  */
+  {
+    arm_insn_decode_record arm_record;
+
+    memset (&arm_record, 0, sizeof (arm_insn_decode_record));
+    arm_record.gdbarch = gdbarch;
+
+    /* Use the endian-free representation of the instruction here.  The test
+       will handle endianness conversions.  */
+    static const uint32_t insns[] = {
+      /* mov     r5, r0 */
+      0xe1a05000,
+    };
+
+    instruction_reader_selftest<uint32_t> reader (insns);
+    int ret = decode_insn (reader, &arm_record, ARM_RECORD,
+			   ARM_INSN_SIZE_BYTES);
+
+    SELF_CHECK (ret == 0);
+  }
+}
+
+/* Instruction reader from manually cooked instruction sequences.  */
+
+class test_arm_instruction_reader : public arm_instruction_reader
+{
+public:
+  explicit test_arm_instruction_reader (gdb::array_view<const uint32_t> insns)
+    : m_insns (insns)
+  {}
+
+  uint32_t read (CORE_ADDR memaddr, enum bfd_endian byte_order) const override
+  {
+    SELF_CHECK (memaddr % 4 == 0);
+    SELF_CHECK (memaddr / 4 < m_insns.size ());
+
+    return m_insns[memaddr / 4];
+  }
+
+private:
+  const gdb::array_view<const uint32_t> m_insns;
+};
+
+static void
+arm_analyze_prologue_test ()
+{
+  for (bfd_endian endianness : {BFD_ENDIAN_LITTLE, BFD_ENDIAN_BIG})
+    {
+      struct gdbarch_info info;
+      info.byte_order = endianness;
+      info.byte_order_for_code = endianness;
+      info.bfd_arch_info = bfd_scan_arch ("arm");
+
+      struct gdbarch *gdbarch = gdbarch_find_by_info (info);
+
+      SELF_CHECK (gdbarch != NULL);
+
+      /* The "sub" instruction contains an immediate value rotate count of 0,
+	 which resulted in a 32-bit shift of a 32-bit value, caught by
+	 UBSan.  */
+      const uint32_t insns[] = {
+	  0xe92d4ff0, /* push    {r4, r5, r6, r7, r8, r9, sl, fp, lr} */
+	  0xe1a05000, /* mov     r5, r0 */
+	  0xe5903020, /* ldr     r3, [r0, #32] */
+	  0xe24dd044, /* sub     sp, sp, #68     ; 0x44 */
+      };
+
+      test_arm_instruction_reader mem_reader (insns);
+      arm_prologue_cache cache;
+      arm_cache_init (&cache, gdbarch);
+
+      arm_analyze_prologue (gdbarch, 0, sizeof (insns) - 1, &cache, mem_reader);
+    }
 }
+
 } // namespace selftests
 #endif /* GDB_SELF_TEST */
 
 /* Cleans up local record registers and memory allocations.  */
 
 static void 
-deallocate_reg_mem (insn_decode_record *record)
+deallocate_reg_mem (arm_insn_decode_record *record)
 {
   xfree (record->arm_regs);
   xfree (record->arm_mems);    
@@ -13265,9 +14865,9 @@ arm_process_record (struct gdbarch *gdba
 
   ULONGEST u_regval = 0;
 
-  insn_decode_record arm_record;
+  arm_insn_decode_record arm_record;
 
-  memset (&arm_record, 0, sizeof (insn_decode_record));
+  memset (&arm_record, 0, sizeof (arm_insn_decode_record));
   arm_record.regcache = regcache;
   arm_record.this_addr = insn_addr;
   arm_record.gdbarch = gdbarch;
@@ -13275,23 +14875,16 @@ arm_process_record (struct gdbarch *gdba
 
   if (record_debug > 1)
     {
-      fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
-			  "addr = %s\n",
-      paddress (gdbarch, arm_record.this_addr));
+      gdb_printf (gdb_stdlog, "Process record: arm_process_record "
+		  "addr = %s\n",
+		  paddress (gdbarch, arm_record.this_addr));
     }
 
   instruction_reader reader;
-  if (extract_arm_insn (reader, &arm_record, 2))
-    {
-      if (record_debug)
-	{
-	  printf_unfiltered (_("Process record: error reading memory at "
-			       "addr %s len = %d.\n"),
-			     paddress (arm_record.gdbarch,
-				       arm_record.this_addr), 2);
-	}
-      return -1;
-    }
+  enum bfd_endian code_endian
+    = gdbarch_byte_order_for_code (arm_record.gdbarch);
+  arm_record.arm_insn
+    = reader.read (arm_record.this_addr, 2, code_endian);
 
   /* Check the insn, whether it is thumb or arm one.  */
 
@@ -13359,14 +14952,14 @@ arm_process_record (struct gdbarch *gdba
 /* See arm-tdep.h.  */
 
 const target_desc *
-arm_read_description (arm_fp_type fp_type)
+arm_read_description (arm_fp_type fp_type, bool tls)
 {
-  struct target_desc *tdesc = tdesc_arm_list[fp_type];
+  struct target_desc *tdesc = tdesc_arm_list[fp_type][tls];
 
   if (tdesc == nullptr)
     {
-      tdesc = arm_create_target_description (fp_type);
-      tdesc_arm_list[fp_type] = tdesc;
+      tdesc = arm_create_target_description (fp_type, tls);
+      tdesc_arm_list[fp_type][tls] = tdesc;
     }
 
   return tdesc;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-tdep.h ./gdb/arm-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-tdep.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common target dependent code for GDB on ARM systems.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -87,57 +87,88 @@ enum struct_return
 };
 
 /* Target-dependent structure in gdbarch.  */
-struct gdbarch_tdep
+struct arm_gdbarch_tdep : gdbarch_tdep_base
 {
   /* The ABI for this architecture.  It should never be set to
      ARM_ABI_AUTO.  */
-  enum arm_abi_kind arm_abi;
+  enum arm_abi_kind arm_abi {};
 
-  enum arm_float_model fp_model; /* Floating point calling conventions.  */
+  enum arm_float_model fp_model {}; /* Floating point calling conventions.  */
 
-  int have_fpa_registers;	/* Does the target report the FPA registers?  */
-  int have_wmmx_registers;	/* Does the target report the WMMX registers?  */
+  bool have_fpa_registers = false;	/* Does the target report the FPA registers?  */
+  bool have_wmmx_registers = false;	/* Does the target report the WMMX registers?  */
   /* The number of VFP registers reported by the target.  It is zero
      if VFP registers are not supported.  */
-  int vfp_register_count;
-  int have_vfp_pseudos;		/* Are we synthesizing the single precision
+  int vfp_register_count = 0;
+  bool have_s_pseudos = false;	/* Are we synthesizing the single precision
 				   VFP registers?  */
-  int have_neon_pseudos;	/* Are we synthesizing the quad precision
-				   NEON registers?  Requires
-				   have_vfp_pseudos.  */
-  int have_neon;		/* Do we have a NEON unit?  */
-
-  int is_m;			/* Does the target follow the "M" profile.  */
-  CORE_ADDR lowest_pc;		/* Lowest address at which instructions 
+  int s_pseudo_base = 0;	/* Register number for the first S pseudo
+				   register.  */
+  int s_pseudo_count = 0;	/* Number of S pseudo registers.  */
+  bool have_q_pseudos = false;	/* Are we synthesizing the quad precision
+				   Q (NEON or MVE) registers?  Requires
+				   have_s_pseudos.  */
+  int q_pseudo_base = 0;	/* Register number for the first quad
+				   precision pseudo register.  */
+  int q_pseudo_count = 0;	/* Number of quad precision pseudo
+				   registers.  */
+  bool have_neon = false;	/* Do we have a NEON unit?  */
+
+  bool have_mve = false;	/* Do we have a MVE extension?  */
+  int mve_vpr_regnum = 0;	/* MVE VPR register number.  */
+  int mve_pseudo_base = 0;	/* Number of the first MVE pseudo register.  */
+  int mve_pseudo_count = 0;	/* Total number of MVE pseudo registers.  */
+
+  bool have_pacbti = false;	/* True if we have the ARMv8.1-m PACBTI
+				   extensions.  */
+  int pacbti_pseudo_base = 0;	/* Number of the first PACBTI pseudo
+				   register.  */
+  int pacbti_pseudo_count = 0;	/* Total number of PACBTI pseudo registers.  */
+
+  int m_profile_msp_regnum = ARM_SP_REGNUM;	/* M-profile MSP register number.  */
+  int m_profile_psp_regnum = ARM_SP_REGNUM;	/* M-profile PSP register number.  */
+
+  /* Secure and Non-secure stack pointers with security extension.  */
+  int m_profile_msp_ns_regnum = ARM_SP_REGNUM;	/* M-profile MSP_NS register number.  */
+  int m_profile_psp_ns_regnum = ARM_SP_REGNUM;	/* M-profile PSP_NS register number.  */
+  int m_profile_msp_s_regnum = ARM_SP_REGNUM;	/* M-profile MSP_S register number.  */
+  int m_profile_psp_s_regnum = ARM_SP_REGNUM;	/* M-profile PSP_S register number.  */
+
+  int tls_regnum = 0;		/* Number of the tpidruro register.  */
+
+  bool is_m = false;		/* Does the target follow the "M" profile.  */
+  bool have_sec_ext = false;	/* Do we have security extensions?  */
+  CORE_ADDR lowest_pc = 0;	/* Lowest address at which instructions
 				   will appear.  */
 
-  const gdb_byte *arm_breakpoint;	/* Breakpoint pattern for an ARM insn.  */
-  int arm_breakpoint_size;	/* And its size.  */
-  const gdb_byte *thumb_breakpoint;	/* Breakpoint pattern for a Thumb insn.  */
-  int thumb_breakpoint_size;	/* And its size.  */
+  const gdb_byte *arm_breakpoint = nullptr;	/* Breakpoint pattern for an ARM insn.  */
+  int arm_breakpoint_size = 0;	/* And its size.  */
+  const gdb_byte *thumb_breakpoint = nullptr;	/* Breakpoint pattern for a Thumb insn.  */
+  int thumb_breakpoint_size = 0;	/* And its size.  */
 
   /* If the Thumb breakpoint is an undefined instruction (which is
      affected by IT blocks) rather than a BKPT instruction (which is
      not), then we need a 32-bit Thumb breakpoint to preserve the
      instruction count in IT blocks.  */
-  const gdb_byte *thumb2_breakpoint;
-  int thumb2_breakpoint_size;
+  const gdb_byte *thumb2_breakpoint = nullptr;
+  int thumb2_breakpoint_size = 0;
 
-  int jb_pc;			/* Offset to PC value in jump buffer.
+  int jb_pc = 0;			/* Offset to PC value in jump buffer.
 				   If this is negative, longjmp support
 				   will be disabled.  */
-  size_t jb_elt_size;		/* And the size of each entry in the buf.  */
+  size_t jb_elt_size = 0;		/* And the size of each entry in the buf.  */
 
   /* Convention for returning structures.  */
-  enum struct_return struct_return;
+  enum struct_return struct_return {};
 
   /* ISA-specific data types.  */
-  struct type *arm_ext_type;
-  struct type *neon_double_type;
-  struct type *neon_quad_type;
+  struct type *arm_ext_type = nullptr;
+  struct type *neon_double_type = nullptr;
+  struct type *neon_quad_type = nullptr;
 
    /* syscall record.  */
-  int (*arm_syscall_record) (struct regcache *regcache, unsigned long svc_number);
+  int (*arm_syscall_record) (struct regcache *regcache,
+			     unsigned long svc_number) = nullptr;
 };
 
 /* Structures used for displaced stepping.  */
@@ -149,7 +180,8 @@ struct gdbarch_tdep
    sequence) and any scratch words, etc.  */
 #define ARM_DISPLACED_MODIFIED_INSNS	8
 
-struct arm_displaced_step_closure : public displaced_step_closure
+struct arm_displaced_step_copy_insn_closure
+  : public displaced_step_copy_insn_closure
 {
   ULONGEST tmp[DISPLACED_TEMPS];
   int rd;
@@ -194,9 +226,9 @@ struct arm_displaced_step_closure : publ
     struct
     {
       /* If non-NULL, override generic SVC handling (e.g. for a particular
-         OS).  */
+	 OS).  */
       int (*copy_svc_os) (struct gdbarch *gdbarch, struct regcache *regs,
-			  arm_displaced_step_closure *dsc);
+			  arm_displaced_step_copy_insn_closure *dsc);
     } svc;
   } u;
 
@@ -215,7 +247,7 @@ struct arm_displaced_step_closure : publ
   CORE_ADDR insn_addr;
   CORE_ADDR scratch_base;
   void (*cleanup) (struct gdbarch *, struct regcache *,
-		   arm_displaced_step_closure *);
+		   arm_displaced_step_copy_insn_closure *);
 };
 
 /* Values for the WRITE_PC argument to displaced_write_reg.  If the register
@@ -234,19 +266,20 @@ enum pc_write_style
 extern void
   arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
 			      CORE_ADDR to, struct regcache *regs,
-			      arm_displaced_step_closure *dsc);
+			      arm_displaced_step_copy_insn_closure *dsc);
 extern void
   arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
-			      CORE_ADDR to, arm_displaced_step_closure *dsc);
+			      CORE_ADDR to,
+			      arm_displaced_step_copy_insn_closure *dsc);
 extern ULONGEST
-  displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
+  displaced_read_reg (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
 		      int regno);
 extern void
   displaced_write_reg (struct regcache *regs,
-		       arm_displaced_step_closure *dsc, int regno,
+		       arm_displaced_step_copy_insn_closure *dsc, int regno,
 		       ULONGEST val, enum pc_write_style write_pc);
 
-CORE_ADDR arm_skip_stub (struct frame_info *, CORE_ADDR);
+CORE_ADDR arm_skip_stub (frame_info_ptr, CORE_ADDR);
 
 ULONGEST arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr,
 							int len,
@@ -259,11 +292,12 @@ int arm_get_next_pcs_is_thumb (struct ar
 
 std::vector<CORE_ADDR> arm_software_single_step (struct regcache *);
 int arm_is_thumb (struct regcache *regcache);
-int arm_frame_is_thumb (struct frame_info *frame);
+int arm_frame_is_thumb (frame_info_ptr frame);
 
 extern void arm_displaced_step_fixup (struct gdbarch *,
-				      struct displaced_step_closure *,
-				      CORE_ADDR, CORE_ADDR, struct regcache *);
+				      displaced_step_copy_insn_closure *,
+				      CORE_ADDR, CORE_ADDR,
+				      struct regcache *, bool);
 
 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode.  */
 extern int arm_psr_thumb_bit (struct gdbarch *);
@@ -273,7 +307,7 @@ extern int arm_psr_thumb_bit (struct gdb
 extern int arm_pc_is_thumb (struct gdbarch *, CORE_ADDR);
 
 extern int arm_process_record (struct gdbarch *gdbarch, 
-                               struct regcache *regcache, CORE_ADDR addr);
+			       struct regcache *regcache, CORE_ADDR addr);
 /* Functions exported from arm-bsd-tdep.h.  */
 
 /* Return the appropriate register set for the core section identified
@@ -286,7 +320,7 @@ extern void
 				       const struct regcache *regcache);
 
 /* Get the correct Arm target description with given FP hardware type.  */
-const target_desc *arm_read_description (arm_fp_type fp_type);
+const target_desc *arm_read_description (arm_fp_type fp_type, bool tls);
 
 /* Get the correct Arm M-Profile target description with given hardware
    type.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-wince-tdep.c ./gdb/arm-wince-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/arm-wince-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/arm-wince-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,7 +1,7 @@
 /* Target-dependent code for Windows CE running on ARM processors,
    for GDB.
 
-   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Copyright (C) 2007-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -36,7 +36,7 @@ static const gdb_byte arm_wince_thumb_le
 #define ARM_WINCE_JB_PC			10
 
 static CORE_ADDR
-arm_pe_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+arm_pe_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -115,7 +115,7 @@ arm_wince_skip_main_prologue (struct gdb
 static void
 arm_wince_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
   windows_init_abi (info, gdbarch);
 
@@ -154,12 +154,13 @@ arm_wince_osabi_sniffer (bfd *abfd)
   return GDB_OSABI_UNKNOWN;
 }
 
+void _initialize_arm_wince_tdep ();
 void
-_initialize_arm_wince_tdep (void)
+_initialize_arm_wince_tdep ()
 {
   gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_coff_flavour,
-                                  arm_wince_osabi_sniffer);
+				  arm_wince_osabi_sniffer);
 
   gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_WINCE,
-                          arm_wince_init_abi);
+			  arm_wince_init_abi);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/async-event.c ./gdb/async-event.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/async-event.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/async-event.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,372 @@
+/* Async events for the GDB event loop.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "async-event.h"
+
+#include "ser-event.h"
+#include "top.h"
+#include "ui.h"
+
+/* PROC is a function to be invoked when the READY flag is set.  This
+   happens when there has been a signal and the corresponding signal
+   handler has 'triggered' this async_signal_handler for execution.
+   The actual work to be done in response to a signal will be carried
+   out by PROC at a later time, within process_event.  This provides a
+   deferred execution of signal handlers.
+
+   Async_init_signals takes care of setting up such an
+   async_signal_handler for each interesting signal.  */
+
+struct async_signal_handler
+{
+  /* If ready, call this handler  from the main event loop, using
+     invoke_async_handler.  */
+  int ready;
+
+  /* Pointer to next handler.  */
+  struct async_signal_handler *next_handler;
+
+  /* Function to call to do the work.  */
+  sig_handler_func *proc;
+
+  /* Argument to PROC.  */
+  gdb_client_data client_data;
+
+  /* User-friendly name of this handler.  */
+  const char *name;
+};
+
+/* PROC is a function to be invoked when the READY flag is set.  This
+   happens when the event has been marked with
+   MARK_ASYNC_EVENT_HANDLER.  The actual work to be done in response
+   to an event will be carried out by PROC at a later time, within
+   process_event.  This provides a deferred execution of event
+   handlers.  */
+struct async_event_handler
+{
+  /* If ready, call this handler from the main event loop, using
+     invoke_event_handler.  */
+  int ready;
+
+  /* Pointer to next handler.  */
+  struct async_event_handler *next_handler;
+
+  /* Function to call to do the work.  */
+  async_event_handler_func *proc;
+
+  /* Argument to PROC.  */
+  gdb_client_data client_data;
+
+  /* User-friendly name of this handler.  */
+  const char *name;
+};
+
+/* All the async_signal_handlers gdb is interested in are kept onto
+   this list.  */
+static struct
+{
+  /* Pointer to first in handler list.  */
+  async_signal_handler *first_handler;
+
+  /* Pointer to last in handler list.  */
+  async_signal_handler *last_handler;
+}
+sighandler_list;
+
+/* All the async_event_handlers gdb is interested in are kept onto
+   this list.  */
+static struct
+{
+  /* Pointer to first in handler list.  */
+  async_event_handler *first_handler;
+
+  /* Pointer to last in handler list.  */
+  async_event_handler *last_handler;
+}
+async_event_handler_list;
+
+
+/* This event is signalled whenever an asynchronous handler needs to
+   defer an action to the event loop.  */
+static struct serial_event *async_signal_handlers_serial_event;
+
+/* Callback registered with ASYNC_SIGNAL_HANDLERS_SERIAL_EVENT.  */
+
+static void
+async_signals_handler (int error, gdb_client_data client_data)
+{
+  /* Do nothing.  Handlers are run by invoke_async_signal_handlers
+     from instead.  */
+}
+
+void
+initialize_async_signal_handlers (void)
+{
+  async_signal_handlers_serial_event = make_serial_event ();
+
+  add_file_handler (serial_event_fd (async_signal_handlers_serial_event),
+		    async_signals_handler, NULL, "async-signals");
+}
+
+
+
+/* Create an asynchronous handler, allocating memory for it.
+   Return a pointer to the newly created handler.
+   This pointer will be used to invoke the handler by 
+   invoke_async_signal_handler.
+   PROC is the function to call with CLIENT_DATA argument 
+   whenever the handler is invoked.  */
+async_signal_handler *
+create_async_signal_handler (sig_handler_func * proc,
+			     gdb_client_data client_data,
+			     const char *name)
+{
+  async_signal_handler *async_handler_ptr;
+
+  async_handler_ptr = XNEW (async_signal_handler);
+  async_handler_ptr->ready = 0;
+  async_handler_ptr->next_handler = NULL;
+  async_handler_ptr->proc = proc;
+  async_handler_ptr->client_data = client_data;
+  async_handler_ptr->name = name;
+  if (sighandler_list.first_handler == NULL)
+    sighandler_list.first_handler = async_handler_ptr;
+  else
+    sighandler_list.last_handler->next_handler = async_handler_ptr;
+  sighandler_list.last_handler = async_handler_ptr;
+  return async_handler_ptr;
+}
+
+/* Mark the handler (ASYNC_HANDLER_PTR) as ready.  This information
+   will be used when the handlers are invoked, after we have waited
+   for some event.  The caller of this function is the interrupt
+   handler associated with a signal.  */
+void
+mark_async_signal_handler (async_signal_handler *async_handler_ptr)
+{
+  if (debug_event_loop != debug_event_loop_kind::OFF)
+    {
+      /* This is called by signal handlers, so we print it "by hand" using
+	 the async-signal-safe methods.  */
+      const char head[] = ("[event-loop] mark_async_signal_handler: marking"
+			   "async signal handler `");
+      gdb_stdlog->write_async_safe (head, strlen (head));
+
+      gdb_stdlog->write_async_safe (async_handler_ptr->name,
+				    strlen (async_handler_ptr->name));
+
+      const char tail[] = "`\n";
+      gdb_stdlog->write_async_safe (tail, strlen (tail));
+    }
+
+  async_handler_ptr->ready = 1;
+  serial_event_set (async_signal_handlers_serial_event);
+}
+
+/* See event-loop.h.  */
+
+void
+clear_async_signal_handler (async_signal_handler *async_handler_ptr)
+{
+  event_loop_debug_printf ("clearing async signal handler `%s`",
+			   async_handler_ptr->name);
+  async_handler_ptr->ready = 0;
+}
+
+/* See event-loop.h.  */
+
+int
+async_signal_handler_is_marked (async_signal_handler *async_handler_ptr)
+{
+  return async_handler_ptr->ready;
+}
+
+/* Call all the handlers that are ready.  Returns true if any was
+   indeed ready.  */
+
+int
+invoke_async_signal_handlers (void)
+{
+  async_signal_handler *async_handler_ptr;
+  int any_ready = 0;
+
+  /* We're going to handle all pending signals, so no need to wake up
+     the event loop again the next time around.  Note this must be
+     cleared _before_ calling the callbacks, to avoid races.  */
+  serial_event_clear (async_signal_handlers_serial_event);
+
+  /* Invoke all ready handlers.  */
+
+  while (1)
+    {
+      for (async_handler_ptr = sighandler_list.first_handler;
+	   async_handler_ptr != NULL;
+	   async_handler_ptr = async_handler_ptr->next_handler)
+	{
+	  if (async_handler_ptr->ready)
+	    break;
+	}
+      if (async_handler_ptr == NULL)
+	break;
+      any_ready = 1;
+      async_handler_ptr->ready = 0;
+      /* Async signal handlers have no connection to whichever was the
+	 current UI, and thus always run on the main one.  */
+      current_ui = main_ui;
+      event_loop_debug_printf ("invoking async signal handler `%s`",
+			       async_handler_ptr->name);
+      (*async_handler_ptr->proc) (async_handler_ptr->client_data);
+    }
+
+  return any_ready;
+}
+
+/* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
+   Free the space allocated for it.  */
+void
+delete_async_signal_handler (async_signal_handler ** async_handler_ptr)
+{
+  async_signal_handler *prev_ptr;
+
+  if (sighandler_list.first_handler == (*async_handler_ptr))
+    {
+      sighandler_list.first_handler = (*async_handler_ptr)->next_handler;
+      if (sighandler_list.first_handler == NULL)
+	sighandler_list.last_handler = NULL;
+    }
+  else
+    {
+      prev_ptr = sighandler_list.first_handler;
+      while (prev_ptr && prev_ptr->next_handler != (*async_handler_ptr))
+	prev_ptr = prev_ptr->next_handler;
+      gdb_assert (prev_ptr);
+      prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
+      if (sighandler_list.last_handler == (*async_handler_ptr))
+	sighandler_list.last_handler = prev_ptr;
+    }
+  xfree ((*async_handler_ptr));
+  (*async_handler_ptr) = NULL;
+}
+
+/* See async-event.h.  */
+
+async_event_handler *
+create_async_event_handler (async_event_handler_func *proc,
+			    gdb_client_data client_data,
+			    const char *name)
+{
+  async_event_handler *h;
+
+  h = XNEW (struct async_event_handler);
+  h->ready = 0;
+  h->next_handler = NULL;
+  h->proc = proc;
+  h->client_data = client_data;
+  h->name = name;
+  if (async_event_handler_list.first_handler == NULL)
+    async_event_handler_list.first_handler = h;
+  else
+    async_event_handler_list.last_handler->next_handler = h;
+  async_event_handler_list.last_handler = h;
+  return h;
+}
+
+/* Mark the handler (ASYNC_HANDLER_PTR) as ready.  This information
+   will be used by gdb_do_one_event.  The caller will be whoever
+   created the event source, and wants to signal that the event is
+   ready to be handled.  */
+void
+mark_async_event_handler (async_event_handler *async_handler_ptr)
+{
+  event_loop_debug_printf ("marking async event handler `%s` "
+			   "(previous state was %d)",
+			   async_handler_ptr->name,
+			   async_handler_ptr->ready);
+  async_handler_ptr->ready = 1;
+}
+
+/* See event-loop.h.  */
+
+void
+clear_async_event_handler (async_event_handler *async_handler_ptr)
+{
+  event_loop_debug_printf ("clearing async event handler `%s`",
+			   async_handler_ptr->name);
+  async_handler_ptr->ready = 0;
+}
+
+/* See event-loop.h.  */
+
+bool
+async_event_handler_marked (async_event_handler *handler)
+{
+  return handler->ready;
+}
+
+/* Check if asynchronous event handlers are ready, and call the
+   handler function for one that is.  */
+
+int
+check_async_event_handlers ()
+{
+  async_event_handler *async_handler_ptr;
+
+  for (async_handler_ptr = async_event_handler_list.first_handler;
+       async_handler_ptr != NULL;
+       async_handler_ptr = async_handler_ptr->next_handler)
+    {
+      if (async_handler_ptr->ready)
+	{
+	  event_loop_debug_printf ("invoking async event handler `%s`",
+				   async_handler_ptr->name);
+	  (*async_handler_ptr->proc) (async_handler_ptr->client_data);
+	  return 1;
+	}
+    }
+
+  return 0;
+}
+
+/* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
+   Free the space allocated for it.  */
+void
+delete_async_event_handler (async_event_handler **async_handler_ptr)
+{
+  async_event_handler *prev_ptr;
+
+  if (async_event_handler_list.first_handler == *async_handler_ptr)
+    {
+      async_event_handler_list.first_handler
+	= (*async_handler_ptr)->next_handler;
+      if (async_event_handler_list.first_handler == NULL)
+	async_event_handler_list.last_handler = NULL;
+    }
+  else
+    {
+      prev_ptr = async_event_handler_list.first_handler;
+      while (prev_ptr && prev_ptr->next_handler != *async_handler_ptr)
+	prev_ptr = prev_ptr->next_handler;
+      gdb_assert (prev_ptr);
+      prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
+      if (async_event_handler_list.last_handler == (*async_handler_ptr))
+	async_event_handler_list.last_handler = prev_ptr;
+    }
+  xfree (*async_handler_ptr);
+  *async_handler_ptr = NULL;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/async-event.h ./gdb/async-event.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/async-event.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/async-event.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,90 @@
+/* Async events for the GDB event loop.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ASYNC_EVENT_H
+#define ASYNC_EVENT_H
+
+#include "gdbsupport/event-loop.h"
+
+struct async_signal_handler;
+struct async_event_handler;
+typedef void (sig_handler_func) (gdb_client_data);
+
+/* Type of async event handler callbacks.
+
+   DATA is the client data originally passed to create_async_event_handler.
+
+   The callback is called when the async event handler is marked.  The callback
+   is responsible for clearing the async event handler if it no longer needs
+   to be called.  */
+
+typedef void (async_event_handler_func) (gdb_client_data);
+
+extern struct async_signal_handler *
+  create_async_signal_handler (sig_handler_func *proc,
+			       gdb_client_data client_data,
+			       const char *name);
+extern void delete_async_signal_handler (struct async_signal_handler **);
+
+/* Call the handler from HANDLER the next time through the event
+   loop.  */
+extern void mark_async_signal_handler (struct async_signal_handler *handler);
+
+/* Returns true if HANDLER is marked ready.  */
+
+extern int
+  async_signal_handler_is_marked (struct async_signal_handler *handler);
+
+/* Mark HANDLER as NOT ready.  */
+
+extern void clear_async_signal_handler (struct async_signal_handler *handler);
+
+/* Create and register an asynchronous event source in the event loop,
+   and set PROC as its callback.  CLIENT_DATA is passed as argument to
+   PROC upon its invocation.  Returns a pointer to an opaque structure
+   used to mark as ready and to later delete this event source from
+   the event loop.
+
+   NAME is a user-friendly name for the handler, used in debug statements.  The
+   name is not copied: its lifetime should be at least as long as that of the
+   handler.  */
+
+extern struct async_event_handler *
+  create_async_event_handler (async_event_handler_func *proc,
+			      gdb_client_data client_data,
+			      const char *name);
+
+/* Remove the event source pointed by HANDLER_PTR created by
+   CREATE_ASYNC_EVENT_HANDLER from the event loop, and release it.  */
+extern void
+  delete_async_event_handler (struct async_event_handler **handler_ptr);
+
+/* Call the handler from HANDLER the next time through the event
+   loop.  */
+extern void mark_async_event_handler (struct async_event_handler *handler);
+
+/* Return true if HANDLER is marked.  */
+extern bool async_event_handler_marked (async_event_handler *handler);
+
+/* Mark the handler (ASYNC_HANDLER_PTR) as NOT ready.  */
+
+extern void clear_async_event_handler (struct async_event_handler *handler);
+
+extern void initialize_async_signal_handlers (void);
+
+#endif /* ASYNC_EVENT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/auto-load.c ./gdb/auto-load.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/auto-load.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/auto-load.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB routines for supporting auto-loaded scripts.
 
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,7 @@
 #include <ctype.h>
 #include "auto-load.h"
 #include "progspace.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
 #include "ui-out.h"
 #include "filenames.h"
 #include "command.h"
@@ -51,6 +51,9 @@
    followed by the path of a python script to load.  */
 #define AUTO_SECTION_NAME ".debug_gdb_scripts"
 
+/* The section to look in for the name of a separate debug file.  */
+#define DEBUGLINK_SECTION_NAME ".gnu_debuglink"
+
 static void maybe_print_unsupported_script_warning
   (struct auto_load_pspace_info *, struct objfile *objfile,
    const struct extension_language_defn *language,
@@ -61,8 +64,9 @@ static void maybe_print_script_not_found
    const struct extension_language_defn *language,
    const char *section_name, unsigned offset);
 
-/* Value of the 'set debug auto-load' configuration variable.  */
-static bool debug_auto_load = false;
+/* See auto-load.h.  */
+
+bool debug_auto_load = false;
 
 /* "show" command for the debug_auto_load configuration variable.  */
 
@@ -70,9 +74,9 @@ static void
 show_debug_auto_load (struct ui_file *file, int from_tty,
 		      struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Debugging output for files "
-			    "of 'set auto-load ...' is %s.\n"),
-		    value);
+  gdb_printf (file, _("Debugging output for files "
+		      "of 'set auto-load ...' is %s.\n"),
+	      value);
 }
 
 /* User-settable option to enable/disable auto-loading of GDB_AUTO_FILE_NAME
@@ -88,14 +92,14 @@ static void
 show_auto_load_gdb_scripts (struct ui_file *file, int from_tty,
 			    struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Auto-loading of canned sequences of commands "
-			    "scripts is %s.\n"),
-		    value);
+  gdb_printf (file, _("Auto-loading of canned sequences of commands "
+		      "scripts is %s.\n"),
+	      value);
 }
 
-/* Return non-zero if auto-loading gdb scripts is enabled.  */
+/* See auto-load.h.  */
 
-int
+bool
 auto_load_gdb_scripts_enabled (const struct extension_language_defn *extlang)
 {
   return auto_load_gdb_scripts;
@@ -128,15 +132,15 @@ static void
 show_auto_load_local_gdbinit (struct ui_file *file, int from_tty,
 			      struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Auto-loading of .gdbinit script from current "
-			    "directory is %s.\n"),
-		    value);
+  gdb_printf (file, _("Auto-loading of .gdbinit script from current "
+		      "directory is %s.\n"),
+	      value);
 }
 
 /* Directory list from which to load auto-loaded scripts.  It is not checked
    for absolute paths but they are strongly recommended.  It is initialized by
    _initialize_auto_load.  */
-static char *auto_load_dir;
+static std::string auto_load_dir = AUTO_LOAD_DIR;
 
 /* "set" command for the auto_load_dir configuration variable.  */
 
@@ -144,11 +148,8 @@ static void
 set_auto_load_dir (const char *args, int from_tty, struct cmd_list_element *c)
 {
   /* Setting the variable to "" resets it to the compile time defaults.  */
-  if (auto_load_dir[0] == '\0')
-    {
-      xfree (auto_load_dir);
-      auto_load_dir = xstrdup (AUTO_LOAD_DIR);
-    }
+  if (auto_load_dir.empty ())
+    auto_load_dir = AUTO_LOAD_DIR;
 }
 
 /* "show" command for the auto_load_dir configuration variable.  */
@@ -157,20 +158,20 @@ static void
 show_auto_load_dir (struct ui_file *file, int from_tty,
 		    struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("List of directories from which to load "
-			    "auto-loaded scripts is %s.\n"),
-		    value);
+  gdb_printf (file, _("List of directories from which to load "
+		      "auto-loaded scripts is %s.\n"),
+	      value);
 }
 
 /* Directory list safe to hold auto-loaded files.  It is not checked for
    absolute paths but they are strongly recommended.  It is initialized by
    _initialize_auto_load.  */
-static char *auto_load_safe_path;
+static std::string auto_load_safe_path = AUTO_LOAD_SAFE_PATH;
 
 /* Vector of directory elements of AUTO_LOAD_SAFE_PATH with each one normalized
    by tilde_expand and possibly each entries has added its gdb_realpath
    counterpart.  */
-std::vector<gdb::unique_xmalloc_ptr<char>> auto_load_safe_path_vec;
+static std::vector<gdb::unique_xmalloc_ptr<char>> auto_load_safe_path_vec;
 
 /* Expand $datadir and $debugdir in STRING according to the rules of
    substitute_path_component.  */
@@ -180,11 +181,10 @@ auto_load_expand_dir_vars (const char *s
 {
   char *s = xstrdup (string);
   substitute_path_component (&s, "$datadir", gdb_datadir.c_str ());
-  substitute_path_component (&s, "$debugdir", debug_file_directory);
+  substitute_path_component (&s, "$debugdir", debug_file_directory.c_str ());
 
   if (debug_auto_load && strcmp (s, string) != 0)
-    fprintf_unfiltered (gdb_stdlog,
-			_("auto-load: Expanded $-variables to \"%s\".\n"), s);
+    auto_load_debug_printf ("Expanded $-variables to \"%s\".", s);
 
   std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
     = dirnames_to_char_ptr_vec (s);
@@ -198,12 +198,11 @@ auto_load_expand_dir_vars (const char *s
 static void
 auto_load_safe_path_vec_update (void)
 {
-  if (debug_auto_load)
-    fprintf_unfiltered (gdb_stdlog,
-			_("auto-load: Updating directories of \"%s\".\n"),
-			auto_load_safe_path);
+  auto_load_debug_printf ("Updating directories of \"%s\".",
+			  auto_load_safe_path.c_str ());
 
-  auto_load_safe_path_vec = auto_load_expand_dir_vars (auto_load_safe_path);
+  auto_load_safe_path_vec
+    = auto_load_expand_dir_vars (auto_load_safe_path.c_str ());
   size_t len = auto_load_safe_path_vec.size ();
 
   /* Apply tilde_expand and gdb_realpath to each AUTO_LOAD_SAFE_PATH_VEC
@@ -222,23 +221,18 @@ auto_load_safe_path_vec_update (void)
       if (debug_auto_load)
 	{
 	  if (strcmp (in_vec.get (), original.get ()) == 0)
-	    fprintf_unfiltered (gdb_stdlog,
-				_("auto-load: Using directory \"%s\".\n"),
-				in_vec.get ());
+	    auto_load_debug_printf ("Using directory \"%s\".",
+				    in_vec.get ());
 	  else
-	    fprintf_unfiltered (gdb_stdlog,
-				_("auto-load: Resolved directory \"%s\" "
-				  "as \"%s\".\n"),
-				original.get (), in_vec.get ());
+	    auto_load_debug_printf ("Resolved directory \"%s\" as \"%s\".",
+				    original.get (), in_vec.get ());
 	}
 
       /* If gdb_realpath returns a different content, append it.  */
       if (strcmp (real_path.get (), in_vec.get ()) != 0)
 	{
-	  if (debug_auto_load)
-	    fprintf_unfiltered (gdb_stdlog,
-				_("auto-load: And canonicalized as \"%s\".\n"),
-				real_path.get ());
+	  auto_load_debug_printf ("And canonicalized as \"%s\".",
+				  real_path.get ());
 
 	  auto_load_safe_path_vec.push_back (std::move (real_path));
 	}
@@ -260,11 +254,8 @@ set_auto_load_safe_path (const char *arg
 			 int from_tty, struct cmd_list_element *c)
 {
   /* Setting the variable to "" resets it to the compile time defaults.  */
-  if (auto_load_safe_path[0] == '\0')
-    {
-      xfree (auto_load_safe_path);
-      auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
-    }
+  if (auto_load_safe_path.empty ())
+    auto_load_safe_path = AUTO_LOAD_SAFE_PATH;
 
   auto_load_safe_path_vec_update ();
 }
@@ -284,12 +275,12 @@ show_auto_load_safe_path (struct ui_file
   for (cs = value; *cs && (*cs == DIRNAME_SEPARATOR || IS_DIR_SEPARATOR (*cs));
        cs++);
   if (*cs == 0)
-    fprintf_filtered (file, _("Auto-load files are safe to load from any "
-			      "directory.\n"));
+    gdb_printf (file, _("Auto-load files are safe to load from any "
+			"directory.\n"));
   else
-    fprintf_filtered (file, _("List of directories from which it is safe to "
-			      "auto-load files is %s.\n"),
-		      value);
+    gdb_printf (file, _("List of directories from which it is safe to "
+			"auto-load files is %s.\n"),
+		value);
 }
 
 /* "add-auto-load-safe-path" command for the auto_load_safe_path configuration
@@ -298,17 +289,14 @@ show_auto_load_safe_path (struct ui_file
 static void
 add_auto_load_safe_path (const char *args, int from_tty)
 {
-  char *s;
-
   if (args == NULL || *args == 0)
     error (_("\
 Directory argument required.\n\
 Use 'set auto-load safe-path /' for disabling the auto-load safe-path security.\
 "));
 
-  s = xstrprintf ("%s%c%s", auto_load_safe_path, DIRNAME_SEPARATOR, args);
-  xfree (auto_load_safe_path);
-  auto_load_safe_path = s;
+  auto_load_safe_path = string_printf ("%s%c%s", auto_load_safe_path.c_str (),
+				       DIRNAME_SEPARATOR, args);
 
   auto_load_safe_path_vec_update ();
 }
@@ -319,14 +307,11 @@ Use 'set auto-load safe-path /' for disa
 static void
 add_auto_load_dir (const char *args, int from_tty)
 {
-  char *s;
-
   if (args == NULL || *args == 0)
     error (_("Directory argument required."));
 
-  s = xstrprintf ("%s%c%s", auto_load_dir, DIRNAME_SEPARATOR, args);
-  xfree (auto_load_dir);
-  auto_load_dir = s;
+  auto_load_dir = string_printf ("%s%c%s", auto_load_dir.c_str (),
+				 DIRNAME_SEPARATOR, args);
 }
 
 /* Implementation for filename_is_in_pattern overwriting the caller's FILENAME
@@ -338,10 +323,8 @@ filename_is_in_pattern_1 (char *filename
   size_t pattern_len = strlen (pattern);
   size_t filename_len = strlen (filename);
 
-  if (debug_auto_load)
-    fprintf_unfiltered (gdb_stdlog, _("auto-load: Matching file \"%s\" "
-				      "to pattern \"%s\"\n"),
-			filename, pattern);
+  auto_load_debug_printf ("Matching file \"%s\" to pattern \"%s\"",
+			  filename, pattern);
 
   /* Trim trailing slashes ("/") from PATTERN.  Even for "d:\" paths as
      trailing slashes are trimmed also from FILENAME it still matches
@@ -355,35 +338,28 @@ filename_is_in_pattern_1 (char *filename
      IS_DIR_SEPARATOR character, such as the 'C:\x.exe' filename.  */
   if (pattern_len == 0)
     {
-      if (debug_auto_load)
-	fprintf_unfiltered (gdb_stdlog,
-			    _("auto-load: Matched - empty pattern\n"));
+      auto_load_debug_printf ("Matched - empty pattern");
       return 1;
     }
 
   for (;;)
     {
       /* Trim trailing slashes ("/").  PATTERN also has slashes trimmed the
-         same way so they will match.  */
+	 same way so they will match.  */
       while (filename_len && IS_DIR_SEPARATOR (filename[filename_len - 1]))
 	filename_len--;
       filename[filename_len] = '\0';
       if (filename_len == 0)
 	{
-	  if (debug_auto_load)
-	    fprintf_unfiltered (gdb_stdlog,
-				_("auto-load: Not matched - pattern \"%s\".\n"),
-				pattern);
+	  auto_load_debug_printf ("Not matched - pattern \"%s\".", pattern);
 	  return 0;
 	}
 
       if (gdb_filename_fnmatch (pattern, filename, FNM_FILE_NAME | FNM_NOESCAPE)
 	  == 0)
 	{
-	  if (debug_auto_load)
-	    fprintf_unfiltered (gdb_stdlog, _("auto-load: Matched - file "
-					      "\"%s\" to pattern \"%s\".\n"),
-				filename, pattern);
+	  auto_load_debug_printf ("Matched - file \"%s\" to pattern \"%s\".",
+				  filename, pattern);
 	  return 1;
 	}
 
@@ -434,10 +410,8 @@ filename_is_in_auto_load_safe_path_vec (
 	{
 	  *filename_realp = gdb_realpath (filename);
 	  if (debug_auto_load && strcmp (filename_realp->get (), filename) != 0)
-	    fprintf_unfiltered (gdb_stdlog,
-				_("auto-load: Resolved "
-				  "file \"%s\" as \"%s\".\n"),
-				filename, filename_realp->get ());
+	    auto_load_debug_printf ("Resolved file \"%s\" as \"%s\".",
+				    filename, filename_realp->get ());
 	}
 
       if (strcmp (filename_realp->get (), filename) != 0)
@@ -451,75 +425,76 @@ filename_is_in_auto_load_safe_path_vec (
 
   if (pattern != NULL)
     {
-      if (debug_auto_load)
-	fprintf_unfiltered (gdb_stdlog, _("auto-load: File \"%s\" matches "
-					  "directory \"%s\".\n"),
-			    filename, pattern);
+      auto_load_debug_printf ("File \"%s\" matches directory \"%s\".",
+			      filename, pattern);
       return 1;
     }
 
   return 0;
 }
 
-/* Return 1 if FILENAME is located in one of the directories of
-   AUTO_LOAD_SAFE_PATH.  Otherwise call warning and return 0.  FILENAME does
-   not have to be an absolute path.
-
-   Existence of FILENAME is not checked.  Function will still give a warning
-   even if the caller would quietly skip non-existing file in unsafe
-   directory.  */
+/* See auto-load.h.  */
 
-int
-file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...)
+bool
+file_is_auto_load_safe (const char *filename)
 {
   gdb::unique_xmalloc_ptr<char> filename_real;
-  static int advice_printed = 0;
-
-  if (debug_auto_load)
-    {
-      va_list debug_args;
-
-      va_start (debug_args, debug_fmt);
-      vfprintf_unfiltered (gdb_stdlog, debug_fmt, debug_args);
-      va_end (debug_args);
-    }
+  static bool advice_printed = false;
 
   if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
-    return 1;
+    return true;
 
   auto_load_safe_path_vec_update ();
   if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
-    return 1;
+    return true;
 
   warning (_("File \"%ps\" auto-loading has been declined by your "
 	     "`auto-load safe-path' set to \"%s\"."),
 	   styled_string (file_name_style.style (), filename_real.get ()),
-	   auto_load_safe_path);
+	   auto_load_safe_path.c_str ());
 
   if (!advice_printed)
     {
-      const char *homedir = getenv ("HOME");
-
-      if (homedir == NULL)
-	homedir = "$HOME";
-      std::string homeinit = string_printf ("%s/%s", homedir, GDBINIT);
+      /* Find the existing home directory config file.  */
+      struct stat buf;
+      std::string home_config = find_gdb_home_config_file (GDBINIT, &buf);
+      if (home_config.empty ())
+	{
+	  /* The user doesn't have an existing home directory config file,
+	     so we should suggest a suitable path for them to use.  */
+	  std::string config_dir_file
+	    = get_standard_config_filename (GDBINIT);
+	  if (!config_dir_file.empty ())
+	    home_config = config_dir_file;
+	  else
+	    {
+	      const char *homedir = getenv ("HOME");
+	      if (homedir == nullptr)
+		homedir = "$HOME";
+	      home_config = (std::string (homedir) + SLASH_STRING
+			     + std::string (GDBINIT));
+	    }
+	}
 
-      printf_filtered (_("\
+      gdb_printf (_("\
 To enable execution of this file add\n\
 \tadd-auto-load-safe-path %s\n\
-line to your configuration file \"%s\".\n\
+line to your configuration file \"%ps\".\n\
 To completely disable this security protection add\n\
 \tset auto-load safe-path /\n\
-line to your configuration file \"%s\".\n\
+line to your configuration file \"%ps\".\n\
 For more information about this security protection see the\n\
 \"Auto-loading safe path\" section in the GDB manual.  E.g., run from the shell:\n\
 \tinfo \"(gdb)Auto-loading safe path\"\n"),
 		       filename_real.get (),
-		       homeinit.c_str (), homeinit.c_str ());
-      advice_printed = 1;
+		       styled_string (file_name_style.style (),
+				      home_config.c_str ()),
+		       styled_string (file_name_style.style (),
+				      home_config.c_str ()));
+      advice_printed = true;
     }
 
-  return 0;
+  return false;
 }
 
 /* For scripts specified in .debug_gdb_scripts, multiple objfiles may load
@@ -529,13 +504,10 @@ For more information about this security
 
 struct auto_load_pspace_info
 {
-  auto_load_pspace_info () = default;
-  ~auto_load_pspace_info ();
-
   /* For each program space we keep track of loaded scripts, both when
      specified as file names and as scripts to be executed directly.  */
-  struct htab *loaded_script_files = nullptr;
-  struct htab *loaded_script_texts = nullptr;
+  htab_up loaded_script_files;
+  htab_up loaded_script_texts;
 
   /* Non-zero if we've issued the warning about an auto-load script not being
      supported.  We only want to issue this warning once.  */
@@ -557,23 +529,15 @@ struct loaded_script
      inaccessible), or NULL for loaded_script_texts.  */
   const char *full_path;
 
-  /* Non-zero if this script has been loaded.  */
-  int loaded;
+  /* True if this script has been loaded.  */
+  bool loaded;
 
   const struct extension_language_defn *language;
 };
 
 /* Per-program-space data key.  */
-static const struct program_space_key<struct auto_load_pspace_info>
-  auto_load_pspace_data;
-
-auto_load_pspace_info::~auto_load_pspace_info ()
-{
-  if (loaded_script_files)
-    htab_delete (loaded_script_files);
-  if (loaded_script_texts)
-    htab_delete (loaded_script_texts);
-}
+static const registry<program_space>::key<auto_load_pspace_info>
+     auto_load_pspace_data;
 
 /* Get the current autoload data.  If none is found yet, add it now.  This
    function always returns a valid object.  */
@@ -621,14 +585,16 @@ init_loaded_scripts_info (struct auto_lo
      Space for each entry is obtained with one malloc so we can free them
      easily.  */
 
-  pspace_info->loaded_script_files = htab_create (31,
-						  hash_loaded_script_entry,
-						  eq_loaded_script_entry,
-						  xfree);
-  pspace_info->loaded_script_texts = htab_create (31,
-						  hash_loaded_script_entry,
-						  eq_loaded_script_entry,
-						  xfree);
+  pspace_info->loaded_script_files.reset
+    (htab_create (31,
+		  hash_loaded_script_entry,
+		  eq_loaded_script_entry,
+		  xfree));
+  pspace_info->loaded_script_texts.reset
+    (htab_create (31,
+		  hash_loaded_script_entry,
+		  eq_loaded_script_entry,
+		  xfree));
 
   pspace_info->unsupported_script_warning_printed = false;
   pspace_info->script_not_found_warning_printed = false;
@@ -650,24 +616,24 @@ get_auto_load_pspace_data_for_loading (s
 }
 
 /* Add script file NAME in LANGUAGE to hash table of PSPACE_INFO.
-   LOADED 1 if the script has been (is going to) be loaded, 0 otherwise
-   (such as if it has not been found).
+   LOADED is true if the script has been (is going to) be loaded, false
+   otherwise (such as if it has not been found).
    FULL_PATH is NULL if the script wasn't found.
+
    The result is true if the script was already in the hash table.  */
 
-static int
-maybe_add_script_file (struct auto_load_pspace_info *pspace_info, int loaded,
+static bool
+maybe_add_script_file (struct auto_load_pspace_info *pspace_info, bool loaded,
 		       const char *name, const char *full_path,
 		       const struct extension_language_defn *language)
 {
-  struct htab *htab = pspace_info->loaded_script_files;
+  struct htab *htab = pspace_info->loaded_script_files.get ();
   struct loaded_script **slot, entry;
-  int in_hash_table;
 
   entry.name = name;
   entry.language = language;
   slot = (struct loaded_script **) htab_find_slot (htab, &entry, INSERT);
-  in_hash_table = *slot != NULL;
+  bool in_hash_table = *slot != NULL;
 
   /* If this script is not in the hash table, add it.  */
 
@@ -699,23 +665,23 @@ maybe_add_script_file (struct auto_load_
 }
 
 /* Add script contents NAME in LANGUAGE to hash table of PSPACE_INFO.
-   LOADED 1 if the script has been (is going to) be loaded, 0 otherwise
-   (such as if it has not been found).
+   LOADED is true if the script has been (is going to) be loaded, false
+   otherwise (such as if it has not been found).
+
    The result is true if the script was already in the hash table.  */
 
-static int
+static bool
 maybe_add_script_text (struct auto_load_pspace_info *pspace_info,
-		       int loaded, const char *name,
+		       bool loaded, const char *name,
 		       const struct extension_language_defn *language)
 {
-  struct htab *htab = pspace_info->loaded_script_texts;
+  struct htab *htab = pspace_info->loaded_script_texts.get ();
   struct loaded_script **slot, entry;
-  int in_hash_table;
 
   entry.name = name;
   entry.language = language;
   slot = (struct loaded_script **) htab_find_slot (htab, &entry, INSERT);
-  in_hash_table = *slot != NULL;
+  bool in_hash_table = *slot != NULL;
 
   /* If this script is not in the hash table, add it.  */
 
@@ -740,12 +706,9 @@ maybe_add_script_text (struct auto_load_
 /* Clear the table of loaded section scripts.  */
 
 static void
-clear_section_scripts (void)
+clear_section_scripts (program_space *pspace)
 {
-  struct program_space *pspace = current_program_space;
-  struct auto_load_pspace_info *info;
-
-  info = auto_load_pspace_data.get (pspace);
+  auto_load_pspace_info *info = auto_load_pspace_data.get (pspace);
   if (info != NULL && info->loaded_script_files != NULL)
     auto_load_pspace_data.clear (pspace);
 }
@@ -766,9 +729,10 @@ auto_load_objfile_script_1 (struct objfi
 
   gdb_file_up input = gdb_fopen_cloexec (filename.c_str (), "r");
   debugfile = filename.c_str ();
-  if (debug_auto_load)
-    fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file \"%s\" %s.\n"),
-			debugfile, input ? _("exists") : _("does not exist"));
+
+  auto_load_debug_printf ("Attempted file \"%ps\" %s.",
+			  styled_string (file_name_style.style (), debugfile),
+			  input != nullptr ? "exists" : "does not exist");
 
   std::string debugfile_holder;
   if (!input)
@@ -777,12 +741,16 @@ auto_load_objfile_script_1 (struct objfi
 	 directory.  */
 
       std::vector<gdb::unique_xmalloc_ptr<char>> vec
-	= auto_load_expand_dir_vars (auto_load_dir);
+	= auto_load_expand_dir_vars (auto_load_dir.c_str ());
 
-      if (debug_auto_load)
-	fprintf_unfiltered (gdb_stdlog, _("auto-load: Searching 'set auto-load "
-					  "scripts-directory' path \"%s\".\n"),
-			    auto_load_dir);
+      auto_load_debug_printf
+	("Searching 'set auto-load scripts-directory' path \"%s\".",
+	 auto_load_dir.c_str ());
+
+      /* Convert Windows file name from c:/dir/file to /c/dir/file.  */
+      if (HAS_DRIVE_SPEC (debugfile))
+	filename = (std::string("\\") + debugfile[0]
+		    + STRIP_DRIVE_SPEC (debugfile));
 
       for (const gdb::unique_xmalloc_ptr<char> &dir : vec)
 	{
@@ -791,11 +759,14 @@ auto_load_objfile_script_1 (struct objfi
 	  debugfile = debugfile_holder.c_str ();
 
 	  input = gdb_fopen_cloexec (debugfile, "r");
-	  if (debug_auto_load)
-	    fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file "
-					      "\"%s\" %s.\n"),
-				debugfile,
-				input ? _("exists") : _("does not exist"));
+
+	  auto_load_debug_printf ("Attempted file \"%ps\" %s.",
+				  styled_string (file_name_style.style (),
+						 debugfile),
+				  (input != nullptr
+				   ? "exists"
+				   : "does not exist"));
+
 	  if (input != NULL)
 	    break;
 	}
@@ -803,20 +774,18 @@ auto_load_objfile_script_1 (struct objfi
 
   if (input)
     {
-      int is_safe;
       struct auto_load_pspace_info *pspace_info;
 
-      is_safe
-	= file_is_auto_load_safe (debugfile,
-				  _("auto-load: Loading %s script \"%s\""
-				    " by extension for objfile \"%s\".\n"),
-				  ext_lang_name (language),
-				  debugfile, objfile_name (objfile));
+      auto_load_debug_printf
+	("Loading %s script \"%s\" by extension for objfile \"%s\".",
+	 ext_lang_name (language), debugfile, objfile_name (objfile));
+
+      bool is_safe = file_is_auto_load_safe (debugfile);
 
       /* Add this script to the hash table too so
 	 "info auto-load ${lang}-scripts" can print it.  */
       pspace_info
-	= get_auto_load_pspace_data_for_loading (current_program_space);
+	= get_auto_load_pspace_data_for_loading (objfile->pspace);
       maybe_add_script_file (pspace_info, is_safe, debugfile, debugfile,
 			     language);
 
@@ -855,23 +824,60 @@ auto_load_objfile_script (struct objfile
   gdb::unique_xmalloc_ptr<char> realname
     = gdb_realpath (objfile_name (objfile));
 
-  if (!auto_load_objfile_script_1 (objfile, realname.get (), language))
+  if (auto_load_objfile_script_1 (objfile, realname.get (), language))
+    return;
+
+  /* For Windows/DOS .exe executables, strip the .exe suffix, so that
+     FOO-gdb.gdb could be used for FOO.exe, and try again.  */
+
+  size_t len = strlen (realname.get ());
+  const size_t lexe = sizeof (".exe") - 1;
+
+  if (len > lexe && strcasecmp (realname.get () + len - lexe, ".exe") == 0)
     {
-      /* For Windows/DOS .exe executables, strip the .exe suffix, so that
-	 FOO-gdb.gdb could be used for FOO.exe, and try again.  */
+      len -= lexe;
+      realname.get ()[len] = '\0';
+
+      auto_load_debug_printf
+	("Stripped .exe suffix, retrying with \"%s\".", realname.get ());
+
+      auto_load_objfile_script_1 (objfile, realname.get (), language);
+      return;
+    }
 
-      size_t len = strlen (realname.get ());
-      const size_t lexe = sizeof (".exe") - 1;
+  /* If OBJFILE is a separate debug file and its name does not match
+     the name given in the parent's .gnu_debuglink section, try to
+     find the auto-load script using the parent's path and the
+     debuglink name.  */
+
+  struct objfile *parent = objfile->separate_debug_objfile_backlink;
+  if (parent != nullptr)
+    {
+      uint32_t crc32;
+      gdb::unique_xmalloc_ptr<char> debuglink
+	(bfd_get_debug_link_info (parent->obfd.get (), &crc32));
 
-      if (len > lexe && strcasecmp (realname.get () + len - lexe, ".exe") == 0)
+      if (debuglink.get () != nullptr
+	  && strcmp (debuglink.get (), lbasename (realname.get ())) != 0)
 	{
-	  len -= lexe;
-	  realname.get ()[len] = '\0';
-	  if (debug_auto_load)
-	    fprintf_unfiltered (gdb_stdlog, _("auto-load: Stripped .exe suffix, "
-					      "retrying with \"%s\".\n"),
-				realname.get ());
-	  auto_load_objfile_script_1 (objfile, realname.get (), language);
+	  /* Replace the last component of the parent's path with the
+	     debuglink name.  */
+
+	  std::string p_realname = gdb_realpath (objfile_name (parent)).get ();
+	  size_t last = p_realname.find_last_of ('/');
+
+	  if (last != std::string::npos)
+	    {
+	      p_realname.replace (last + 1, std::string::npos,
+				  debuglink.get ());
+
+	      auto_load_debug_printf
+		("Debug filename mismatch, retrying with \"%s\".",
+		 p_realname.c_str ());
+
+	      auto_load_objfile_script_1 (objfile,
+					  p_realname.c_str (), language);
+	    }
 	}
     }
 }
@@ -887,7 +893,6 @@ source_script_file (struct auto_load_psp
 		    const char *section_name, unsigned int offset,
 		    const char *file)
 {
-  int in_hash_table;
   objfile_script_sourcer_func *sourcer;
 
   /* Skip this script if support is not compiled in.  */
@@ -909,18 +914,17 @@ source_script_file (struct auto_load_psp
       return;
     }
 
-  gdb::optional<open_script> opened = find_and_open_script (file,
+  std::optional<open_script> opened = find_and_open_script (file,
 							    1 /*search_path*/);
 
   if (opened)
     {
-      if (!file_is_auto_load_safe (opened->full_path.get (),
-				   _("auto-load: Loading %s script "
-				     "\"%s\" from section \"%s\" of "
-				     "objfile \"%s\".\n"),
-				   ext_lang_name (language),
-				   opened->full_path.get (),
-				   section_name, objfile_name (objfile)))
+      auto_load_debug_printf
+	("Loading %s script \"%s\" from section \"%s\" of objfile \"%s\".",
+	 ext_lang_name (language), opened->full_path.get (),
+	 section_name, objfile_name (objfile));
+
+      if (!file_is_auto_load_safe (opened->full_path.get ()))
 	opened.reset ();
     }
   else
@@ -937,11 +941,10 @@ source_script_file (struct auto_load_psp
 					    section_name, offset);
     }
 
-  in_hash_table = maybe_add_script_file (pspace_info, bool (opened), file,
-					 (opened
-					  ? opened->full_path.get ()
-					  : NULL),
-					 language);
+  bool in_hash_table
+    = maybe_add_script_file (pspace_info, bool (opened), file,
+			     (opened ? opened->full_path.get (): NULL),
+			     language);
 
   /* If this file is not currently loaded, load it.  */
   if (opened && !in_hash_table)
@@ -963,7 +966,6 @@ execute_script_contents (struct auto_loa
   objfile_script_executor_func *executor;
   const char *newline, *script_text;
   const char *name;
-  int is_safe, in_hash_table;
 
   /* The first line of the script is the name of the script.
      It must not contain any kind of space character.  */
@@ -1017,14 +1019,14 @@ of file %ps."),
       return;
     }
 
-  is_safe = file_is_auto_load_safe (objfile_name (objfile),
-				    _("auto-load: Loading %s script "
-				      "\"%s\" from section \"%s\" of "
-				      "objfile \"%s\".\n"),
-				    ext_lang_name (language), name,
-				    section_name, objfile_name (objfile));
+  auto_load_debug_printf
+    ("Loading %s script \"%s\" from section \"%s\" of objfile \"%s\".",
+     ext_lang_name (language), name, section_name, objfile_name (objfile));
+
+  bool is_safe = file_is_auto_load_safe (objfile_name (objfile));
 
-  in_hash_table = maybe_add_script_text (pspace_info, is_safe, name, language);
+  bool in_hash_table
+    = maybe_add_script_text (pspace_info, is_safe, name, language);
 
   /* If this file is not currently loaded, load it.  */
   if (is_safe && !in_hash_table)
@@ -1047,12 +1049,10 @@ static void
 source_section_scripts (struct objfile *objfile, const char *section_name,
 			const char *start, const char *end)
 {
-  const char *p;
-  struct auto_load_pspace_info *pspace_info;
+  auto_load_pspace_info *pspace_info
+    = get_auto_load_pspace_data_for_loading (objfile->pspace);
 
-  pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
-
-  for (p = start; p < end; ++p)
+  for (const char *p = start; p < end; ++p)
     {
       const char *entry;
       const struct extension_language_defn *language;
@@ -1114,7 +1114,7 @@ source_section_scripts (struct objfile *
 static void
 auto_load_section_scripts (struct objfile *objfile, const char *section_name)
 {
-  bfd *abfd = objfile->obfd;
+  bfd *abfd = objfile->obfd.get ();
   asection *scripts_sect;
   bfd_byte *data = NULL;
 
@@ -1138,7 +1138,11 @@ auto_load_section_scripts (struct objfil
     }
 }
 
-/* Load any auto-loaded scripts for OBJFILE.  */
+/* Load any auto-loaded scripts for OBJFILE.
+
+   Two flavors of auto-loaded scripts are supported.
+   1) based on the path to the objfile
+   2) from .debug_gdb_scripts section  */
 
 void
 load_auto_scripts_for_objfile (struct objfile *objfile)
@@ -1160,25 +1164,6 @@ load_auto_scripts_for_objfile (struct ob
   auto_load_section_scripts (objfile, AUTO_SECTION_NAME);
 }
 
-/* This is a new_objfile observer callback to auto-load scripts.
-
-   Two flavors of auto-loaded scripts are supported.
-   1) based on the path to the objfile
-   2) from .debug_gdb_scripts section  */
-
-static void
-auto_load_new_objfile (struct objfile *objfile)
-{
-  if (!objfile)
-    {
-      /* OBJFILE is NULL when loading a new "main" symbol-file.  */
-      clear_section_scripts ();
-      return;
-    }
-
-  load_auto_scripts_for_objfile (objfile);
-}
-
 /* Collect scripts to be printed in a vec.  */
 
 struct collect_matching_scripts_data
@@ -1259,15 +1244,14 @@ print_scripts (const std::vector<loaded_
    PATTERN.  FROM_TTY is the usual GDB boolean for user interactivity.  */
 
 void
-auto_load_info_scripts (const char *pattern, int from_tty,
-			const struct extension_language_defn *language)
+auto_load_info_scripts (program_space *pspace, const char *pattern,
+			int from_tty, const extension_language_defn *language)
 {
   struct ui_out *uiout = current_uiout;
-  struct auto_load_pspace_info *pspace_info;
 
   dont_repeat ();
 
-  pspace_info = get_auto_load_pspace_data (current_program_space);
+  auto_load_pspace_info *pspace_info = get_auto_load_pspace_data (pspace);
 
   if (pattern && *pattern)
     {
@@ -1292,7 +1276,7 @@ auto_load_info_scripts (const char *patt
       collect_matching_scripts_data data (&script_files, language);
 
       /* Pass a pointer to scripts as VEC_safe_push can realloc space.  */
-      htab_traverse_noresize (pspace_info->loaded_script_files,
+      htab_traverse_noresize (pspace_info->loaded_script_files.get (),
 			      collect_matching_scripts, &data);
 
       std::sort (script_files.begin (), script_files.end (),
@@ -1304,7 +1288,7 @@ auto_load_info_scripts (const char *patt
       collect_matching_scripts_data data (&script_texts, language);
 
       /* Pass a pointer to scripts as VEC_safe_push can realloc space.  */
-      htab_traverse_noresize (pspace_info->loaded_script_texts,
+      htab_traverse_noresize (pspace_info->loaded_script_texts.get (),
 			      collect_matching_scripts, &data);
 
       std::sort (script_texts.begin (), script_texts.end (),
@@ -1344,7 +1328,8 @@ auto_load_info_scripts (const char *patt
 static void
 info_auto_load_gdb_scripts (const char *pattern, int from_tty)
 {
-  auto_load_info_scripts (pattern, from_tty, &extension_language_gdb);
+  auto_load_info_scripts (current_program_space, pattern, from_tty,
+			  &extension_language_gdb);
 }
 
 /* Implement 'info auto-load local-gdbinit'.  */
@@ -1353,15 +1338,15 @@ static void
 info_auto_load_local_gdbinit (const char *args, int from_tty)
 {
   if (auto_load_local_gdbinit_pathname == NULL)
-    printf_filtered (_("Local .gdbinit file was not found.\n"));
+    gdb_printf (_("Local .gdbinit file was not found.\n"));
   else if (auto_load_local_gdbinit_loaded)
-    printf_filtered (_("Local .gdbinit file \"%ps\" has been loaded.\n"),
-		     styled_string (file_name_style.style (),
-				    auto_load_local_gdbinit_pathname));
+    gdb_printf (_("Local .gdbinit file \"%ps\" has been loaded.\n"),
+		styled_string (file_name_style.style (),
+			       auto_load_local_gdbinit_pathname));
   else
-    printf_filtered (_("Local .gdbinit file \"%ps\" has not been loaded.\n"),
-		     styled_string (file_name_style.style (),
-				    auto_load_local_gdbinit_pathname));
+    gdb_printf (_("Local .gdbinit file \"%ps\" has not been loaded.\n"),
+		styled_string (file_name_style.style (),
+			       auto_load_local_gdbinit_pathname));
 }
 
 /* Print an "unsupported script" warning if it has not already been printed.
@@ -1435,7 +1420,7 @@ set_auto_load_cmd (const char *args, int
 	     "otherwise check the auto-load sub-commands."));
 
   for (list = *auto_load_set_cmdlist_get (); list != NULL; list = list->next)
-    if (list->var_type == var_boolean)
+    if (list->var->type () == var_boolean)
       {
 	gdb_assert (list->type == set_cmd);
 	do_set_command (args, from_tty, list);
@@ -1454,21 +1439,11 @@ auto_load_set_cmdlist_get (void)
 Auto-loading specific settings.\n\
 Configure various auto-load-specific variables such as\n\
 automatic loading of Python scripts."),
-		    &retval, "set auto-load ",
-		    1/*allow-unknown*/, &setlist);
+		    &retval, 1/*allow-unknown*/, &setlist);
 
   return &retval;
 }
 
-/* Command "show auto-load" displays summary of all the current
-   "show auto-load " settings.  */
-
-static void
-show_auto_load_cmd (const char *args, int from_tty)
-{
-  cmd_show_list (*auto_load_show_cmdlist_get (), from_tty, "");
-}
-
 /* Initialize "show auto-load " commands prefix and return it.  */
 
 struct cmd_list_element **
@@ -1477,12 +1452,11 @@ auto_load_show_cmdlist_get (void)
   static struct cmd_list_element *retval;
 
   if (retval == NULL)
-    add_prefix_cmd ("auto-load", class_maintenance, show_auto_load_cmd, _("\
+    add_show_prefix_cmd ("auto-load", class_maintenance, _("\
 Show auto-loading specific settings.\n\
 Show configuration of various auto-load-specific variables such as\n\
 automatic loading of Python scripts."),
-		    &retval, "show auto-load ",
-		    0/*allow-unknown*/, &showlist);
+			 &retval, 0/*allow-unknown*/, &showlist);
 
   return &retval;
 }
@@ -1503,7 +1477,7 @@ info_auto_load_cmd (const char *args, in
     {
       ui_out_emit_tuple option_emitter (uiout, "option");
 
-      gdb_assert (!list->prefixlist);
+      gdb_assert (!list->is_prefix ());
       gdb_assert (list->type == not_set_cmd);
 
       uiout->field_string ("name", list->name);
@@ -1524,22 +1498,29 @@ auto_load_info_cmdlist_get (void)
 Print current status of auto-loaded files.\n\
 Print whether various files like Python scripts or .gdbinit files have been\n\
 found and/or loaded."),
-		    &retval, "info auto-load ",
-		    0/*allow-unknown*/, &infolist);
+		    &retval, 0/*allow-unknown*/, &infolist);
 
   return &retval;
 }
 
+/* See auto-load.h.  */
+
+gdb::observers::token auto_load_new_objfile_observer_token;
+
+void _initialize_auto_load ();
 void
-_initialize_auto_load (void)
+_initialize_auto_load ()
 {
   struct cmd_list_element *cmd;
-  char *scripts_directory_help, *gdb_name_help, *python_name_help;
-  char *guile_name_help;
+  gdb::unique_xmalloc_ptr<char> scripts_directory_help, gdb_name_help,
+    python_name_help, guile_name_help;
   const char *suffix;
 
-  gdb::observers::new_objfile.attach (auto_load_new_objfile);
-
+  gdb::observers::new_objfile.attach (load_auto_scripts_for_objfile,
+				      auto_load_new_objfile_observer_token,
+				      "auto-load");
+  gdb::observers::all_objfiles_removed.attach (clear_section_scripts,
+					       "auto-load");
   add_setshow_boolean_cmd ("gdb-scripts", class_support,
 			   &auto_load_gdb_scripts, _("\
 Enable or disable auto-loading of canned sequences of commands scripts."), _("\
@@ -1575,8 +1556,6 @@ This option has security implications fo
 Usage: info auto-load local-gdbinit"),
 	   auto_load_info_cmdlist_get ());
 
-  auto_load_dir = xstrdup (AUTO_LOAD_DIR);
-
   suffix = ext_lang_auto_load_suffix (get_ext_lang_defn (EXT_LANG_GDB));
   gdb_name_help
     = xstrprintf (_("\
@@ -1611,24 +1590,18 @@ having 'set auto-load ... off'.\n\
 Directories listed here need to be present also \
 in the 'set auto-load safe-path'\n\
 option."),
-		  gdb_name_help,
-		  python_name_help ? python_name_help : "",
-		  guile_name_help ? guile_name_help : "");
+		  gdb_name_help.get (),
+		  python_name_help.get () ? python_name_help.get () : "",
+		  guile_name_help.get () ? guile_name_help.get () : "");
 
   add_setshow_optional_filename_cmd ("scripts-directory", class_support,
 				     &auto_load_dir, _("\
 Set the list of directories from which to load auto-loaded scripts."), _("\
 Show the list of directories from which to load auto-loaded scripts."),
-				     scripts_directory_help,
+				     scripts_directory_help.get (),
 				     set_auto_load_dir, show_auto_load_dir,
 				     auto_load_set_cmdlist_get (),
 				     auto_load_show_cmdlist_get ());
-  xfree (scripts_directory_help);
-  xfree (python_name_help);
-  xfree (gdb_name_help);
-  xfree (guile_name_help);
-
-  auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
   auto_load_safe_path_vec_update ();
   add_setshow_optional_filename_cmd ("safe-path", class_support,
 				     &auto_load_safe_path, _("\
@@ -1648,7 +1621,8 @@ This option has security implications fo
 				     show_auto_load_safe_path,
 				     auto_load_set_cmdlist_get (),
 				     auto_load_show_cmdlist_get ());
-  gdb::observers::gdb_datadir_changed.attach (auto_load_gdb_datadir_changed);
+  gdb::observers::gdb_datadir_changed.attach (auto_load_gdb_datadir_changed,
+					      "auto-load");
 
   cmd = add_cmd ("add-auto-load-safe-path", class_support,
 		 add_auto_load_safe_path,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/auto-load.h ./gdb/auto-load.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/auto-load.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/auto-load.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB routines for supporting auto-loaded scripts.
 
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,30 +25,58 @@ struct program_space;
 struct auto_load_pspace_info;
 struct extension_language_defn;
 
+namespace gdb {
+namespace observers {
+struct token;
+} /* namespace observers */
+} /* namespace gdb */
+
+/* Value of the 'set debug auto-load' configuration variable.  */
+
+extern bool debug_auto_load;
+
+/* Print an "auto-load" debug statement.  */
+
+#define auto_load_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (debug_auto_load, "auto-load", fmt, ##__VA_ARGS__)
+
 extern bool global_auto_load;
 
 extern bool auto_load_local_gdbinit;
 extern char *auto_load_local_gdbinit_pathname;
 extern bool auto_load_local_gdbinit_loaded;
 
+/* Token used for the auto_load_new_objfile observer, so other observers can
+   specify it as a dependency. */
+extern gdb::observers::token auto_load_new_objfile_observer_token;
+
 extern struct auto_load_pspace_info *
   get_auto_load_pspace_data_for_loading (struct program_space *pspace);
 extern void auto_load_objfile_script (struct objfile *objfile,
 				      const struct extension_language_defn *);
 extern void load_auto_scripts_for_objfile (struct objfile *objfile);
 extern char auto_load_info_scripts_pattern_nl[];
-extern void auto_load_info_scripts (const char *pattern, int from_tty,
-				    const struct extension_language_defn *);
+extern void auto_load_info_scripts (program_space *pspace, const char *pattern,
+				    int from_tty,
+				    const extension_language_defn *);
 
 extern struct cmd_list_element **auto_load_set_cmdlist_get (void);
 extern struct cmd_list_element **auto_load_show_cmdlist_get (void);
 extern struct cmd_list_element **auto_load_info_cmdlist_get (void);
 
-extern int file_is_auto_load_safe (const char *filename,
-				   const char *debug_fmt, ...)
-  ATTRIBUTE_PRINTF (2, 3);
+/* Return true if FILENAME is located in one of the directories of
+   AUTO_LOAD_SAFE_PATH.  Otherwise call warning and return false.  FILENAME does
+   not have to be an absolute path.
+
+   Existence of FILENAME is not checked.  Function will still give a warning
+   even if the caller would quietly skip non-existing file in unsafe
+   directory.  */
+
+extern bool file_is_auto_load_safe (const char *filename);
+
+/* Return true if auto-loading gdb scripts is enabled.  */
 
-extern int auto_load_gdb_scripts_enabled
+extern bool auto_load_gdb_scripts_enabled
   (const struct extension_language_defn *extlang);
 
 #endif /* AUTO_LOAD_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/auxv.c ./gdb/auxv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/auxv.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/auxv.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Auxiliary vector support for GDB, the GNU debugger.
 
-   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Copyright (C) 2004-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -46,23 +46,21 @@ procfs_xfer_auxv (gdb_byte *readbuf,
 		  ULONGEST len,
 		  ULONGEST *xfered_len)
 {
-  int fd;
   ssize_t l;
 
   std::string pathname = string_printf ("/proc/%d/auxv", inferior_ptid.pid ());
-  fd = gdb_open_cloexec (pathname, writebuf != NULL ? O_WRONLY : O_RDONLY, 0);
-  if (fd < 0)
+  scoped_fd fd
+    = gdb_open_cloexec (pathname, writebuf != NULL ? O_WRONLY : O_RDONLY, 0);
+  if (fd.get () < 0)
     return TARGET_XFER_E_IO;
 
   if (offset != (ULONGEST) 0
-      && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
+      && lseek (fd.get (), (off_t) offset, SEEK_SET) != (off_t) offset)
     l = -1;
   else if (readbuf != NULL)
-    l = read (fd, readbuf, (size_t) len);
+    l = read (fd.get (), readbuf, (size_t) len);
   else
-    l = write (fd, writebuf, (size_t) len);
-
-  (void) close (fd);
+    l = write (fd.get (), writebuf, (size_t) len);
 
   if (l < 0)
     return TARGET_XFER_E_IO;
@@ -85,8 +83,9 @@ ld_so_xfer_auxv (gdb_byte *readbuf,
 {
   struct bound_minimal_symbol msym;
   CORE_ADDR data_address, pointer_address;
-  struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
-  size_t ptr_size = TYPE_LENGTH (ptr_type);
+  gdbarch *arch = current_inferior ()->arch ();
+  type *ptr_type = builtin_type (arch)->builtin_data_ptr;
+  size_t ptr_size = ptr_type->length ();
   size_t auxv_pair_size = 2 * ptr_size;
   gdb_byte *ptr_buf = (gdb_byte *) alloca (ptr_size);
   LONGEST retval;
@@ -96,14 +95,14 @@ ld_so_xfer_auxv (gdb_byte *readbuf,
   if (msym.minsym == NULL)
     return TARGET_XFER_E_IO;
 
-  if (MSYMBOL_SIZE (msym.minsym) != ptr_size)
+  if (msym.minsym->size () != ptr_size)
     return TARGET_XFER_E_IO;
 
   /* POINTER_ADDRESS is a location where the `_dl_auxv' variable
      resides.  DATA_ADDRESS is the inferior value present in
      `_dl_auxv', therefore the real inferior AUXV address.  */
 
-  pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
+  pointer_address = msym.value_address ();
 
   /* The location of the _dl_auxv symbol may no longer be correct if
      ld.so runs at a different address than the one present in the
@@ -192,8 +191,8 @@ ld_so_xfer_auxv (gdb_byte *readbuf,
       len -= block;
 
       /* Check terminal AT_NULL.  This function is being called
-         indefinitely being extended its READBUF until it returns EOF
-         (0).  */
+	 indefinitely being extended its READBUF until it returns EOF
+	 (0).  */
 
       while (block >= auxv_pair_size)
 	{
@@ -236,7 +235,7 @@ memory_xfer_auxv (struct target_ops *ops
       this function only when attaching to a process.
       */
 
-  if (current_inferior ()->attach_flag != 0)
+  if (current_inferior ()->attach_flag)
     {
       enum target_xfer_status ret;
 
@@ -248,48 +247,82 @@ memory_xfer_auxv (struct target_ops *ops
   return procfs_xfer_auxv (readbuf, writebuf, offset, len, xfered_len);
 }
 
-/* Read one auxv entry from *READPTR, not reading locations >= ENDPTR.
-   Return 0 if *READPTR is already at the end of the buffer.
-   Return -1 if there is insufficient buffer for a whole entry.
-   Return 1 if an entry was read into *TYPEP and *VALP.  */
-int
-default_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
-		   gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
-{
-  const int sizeof_auxv_field = gdbarch_ptr_bit (target_gdbarch ())
-				/ TARGET_CHAR_BIT;
-  const enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
-  gdb_byte *ptr = *readptr;
+/* This function compared to other auxv_parse functions: it takes the size of
+   the auxv type field as a parameter.  */
+
+static int
+generic_auxv_parse (struct gdbarch *gdbarch, const gdb_byte **readptr,
+		    const gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp,
+		    int sizeof_auxv_type)
+{
+  struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
+  const int sizeof_auxv_val = ptr_type->length ();
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  const gdb_byte *ptr = *readptr;
 
   if (endptr == ptr)
     return 0;
 
-  if (endptr - ptr < sizeof_auxv_field * 2)
+  if (endptr - ptr < 2 * sizeof_auxv_val)
     return -1;
 
-  *typep = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order);
-  ptr += sizeof_auxv_field;
-  *valp = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order);
-  ptr += sizeof_auxv_field;
+  *typep = extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order);
+  /* Even if the auxv type takes less space than an auxv value, there is
+     padding after the type such that the value is aligned on a multiple of
+     its size (and this is why we advance by `sizeof_auxv_val` and not
+     `sizeof_auxv_type`).  */
+  ptr += sizeof_auxv_val;
+  *valp = extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order);
+  ptr += sizeof_auxv_val;
 
   *readptr = ptr;
   return 1;
 }
 
+/* See auxv.h.  */
+
+int
+default_auxv_parse (struct target_ops *ops, const gdb_byte **readptr,
+		    const gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
+{
+  gdbarch *gdbarch = current_inferior ()->arch ();
+  struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
+  const int sizeof_auxv_type = ptr_type->length ();
+
+  return generic_auxv_parse (gdbarch, readptr, endptr, typep, valp,
+			     sizeof_auxv_type);
+}
+
+/* See auxv.h.  */
+
+int
+svr4_auxv_parse (struct gdbarch *gdbarch, const gdb_byte **readptr,
+		 const gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
+{
+  struct type *int_type = builtin_type (gdbarch)->builtin_int;
+  const int sizeof_auxv_type = int_type->length ();
+
+  return generic_auxv_parse (gdbarch, readptr, endptr, typep, valp,
+			     sizeof_auxv_type);
+}
+
 /* Read one auxv entry from *READPTR, not reading locations >= ENDPTR.
+
+   Use the auxv_parse method from GDBARCH, if defined, else use the auxv_parse
+   method of OPS.
+
    Return 0 if *READPTR is already at the end of the buffer.
    Return -1 if there is insufficient buffer for a whole entry.
    Return 1 if an entry was read into *TYPEP and *VALP.  */
-int
-target_auxv_parse (gdb_byte **readptr,
-		   gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
-{
-  struct gdbarch *gdbarch = target_gdbarch();
 
+static int
+parse_auxv (target_ops *ops, gdbarch *gdbarch, const gdb_byte **readptr,
+	    const gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
+{
   if (gdbarch_auxv_parse_p (gdbarch))
     return gdbarch_auxv_parse (gdbarch, readptr, endptr, typep, valp);
 
-  return current_top_target ()->auxv_parse (readptr, endptr, typep, valp);
+  return ops->auxv_parse (readptr, endptr, typep, valp);
 }
 
 
@@ -298,11 +331,11 @@ target_auxv_parse (gdb_byte **readptr,
     overhead of transfering data from a remote target to the local host.  */
 struct auxv_info
 {
-  gdb::optional<gdb::byte_vector> data;
+  std::optional<gdb::byte_vector> data;
 };
 
 /* Per-inferior data key for auxv.  */
-static const struct inferior_key<auxv_info> auxv_inferior_data;
+static const registry<inferior>::key<auxv_info> auxv_inferior_data;
 
 /* Invalidate INF's auxv cache.  */
 
@@ -312,53 +345,54 @@ invalidate_auxv_cache_inf (struct inferi
   auxv_inferior_data.clear (inf);
 }
 
-/* Invalidate current inferior's auxv cache.  */
+/* Invalidate the auxv cache for all inferiors using PSPACE.  */
 
 static void
-invalidate_auxv_cache (void)
+auxv_all_objfiles_removed (program_space *pspace)
 {
-  invalidate_auxv_cache_inf (current_inferior ());
+  for (inferior *inf : all_inferiors ())
+    if (inf->pspace == current_program_space)
+      invalidate_auxv_cache_inf (inf);
 }
 
-/* Fetch the auxv object from inferior INF.  If auxv is cached already,
-   return a pointer to the cache.  If not, fetch the auxv object from the
-   target and cache it.  This function always returns a valid INFO pointer.  */
+/* See auxv.h.  */
 
-static struct auxv_info *
-get_auxv_inferior_data (struct target_ops *ops)
+const std::optional<gdb::byte_vector> &
+target_read_auxv ()
 {
-  struct auxv_info *info;
-  struct inferior *inf = current_inferior ();
+  inferior *inf = current_inferior ();
+  auxv_info *info = auxv_inferior_data.get (inf);
 
-  info = auxv_inferior_data.get (inf);
-  if (info == NULL)
+  if (info == nullptr)
     {
       info = auxv_inferior_data.emplace (inf);
-      info->data = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL);
+      info->data = target_read_auxv_raw (inf->top_target ());
     }
 
-  return info;
+  return info->data;
 }
 
-/* Extract the auxiliary vector entry with a_type matching MATCH.
-   Return zero if no such entry was found, or -1 if there was
-   an error getting the information.  On success, return 1 after
-   storing the entry's value field in *VALP.  */
-int
-target_auxv_search (struct target_ops *ops, CORE_ADDR match, CORE_ADDR *valp)
+/* See auxv.h.  */
+
+std::optional<gdb::byte_vector>
+target_read_auxv_raw (target_ops *ops)
 {
-  CORE_ADDR type, val;
-  auxv_info *info = get_auxv_inferior_data (ops);
+  return target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL);
+}
 
-  if (!info->data)
-    return -1;
+/* See auxv.h.  */
 
-  gdb_byte *data = info->data->data ();
-  gdb_byte *ptr = data;
-  size_t len = info->data->size ();
+int
+target_auxv_search (const gdb::byte_vector &auxv, target_ops *ops,
+		    gdbarch *gdbarch, CORE_ADDR match, CORE_ADDR *valp)
+{
+  CORE_ADDR type, val;
+  const gdb_byte *data = auxv.data ();
+  const gdb_byte *ptr = data;
+  size_t len = auxv.size ();
 
   while (1)
-    switch (target_auxv_parse (&ptr, data + len, &type, &val))
+    switch (parse_auxv (ops, gdbarch, &ptr, data + len, &type, &val))
       {
       case 1:			/* Here's an entry, check it.  */
 	if (type == match)
@@ -372,10 +406,21 @@ target_auxv_search (struct target_ops *o
       default:			/* Bogosity.  */
 	return -1;
       }
-
-  /*NOTREACHED*/
 }
 
+/* See auxv.h.  */
+
+int
+target_auxv_search (CORE_ADDR match, CORE_ADDR *valp)
+{
+  const std::optional<gdb::byte_vector> &auxv = target_read_auxv ();
+
+  if (!auxv.has_value ())
+    return -1;
+
+  return target_auxv_search (*auxv, current_inferior ()->top_target (),
+			     current_inferior ()->arch (), match, valp);
+}
 
 /* Print the description of a single AUXV entry on the specified file.  */
 
@@ -384,15 +429,16 @@ fprint_auxv_entry (struct ui_file *file,
 		   const char *description, enum auxv_format format,
 		   CORE_ADDR type, CORE_ADDR val)
 {
-  fprintf_filtered (file, ("%-4s %-20s %-30s "),
-		    plongest (type), name, description);
+  gdbarch *arch = current_inferior ()->arch ();
+  gdb_printf (file, ("%-4s %-20s %-30s "),
+	      plongest (type), name, description);
   switch (format)
     {
     case AUXV_FORMAT_DEC:
-      fprintf_filtered (file, ("%s\n"), plongest (val));
+      gdb_printf (file, ("%s\n"), plongest (val));
       break;
     case AUXV_FORMAT_HEX:
-      fprintf_filtered (file, ("%s\n"), paddress (target_gdbarch (), val));
+      gdb_printf (file, ("%s\n"), paddress (arch, val));
       break;
     case AUXV_FORMAT_STR:
       {
@@ -400,10 +446,10 @@ fprint_auxv_entry (struct ui_file *file,
 
 	get_user_print_options (&opts);
 	if (opts.addressprint)
-	  fprintf_filtered (file, ("%s "), paddress (target_gdbarch (), val));
-	val_print_string (builtin_type (target_gdbarch ())->builtin_char,
+	  gdb_printf (file, ("%s "), paddress (arch, val));
+	val_print_string (builtin_type (arch)->builtin_char,
 			  NULL, val, -1, file, &opts);
-	fprintf_filtered (file, ("\n"));
+	gdb_printf (file, ("\n"));
       }
       break;
     }
@@ -451,6 +497,10 @@ default_print_auxv_entry (struct gdbarch
 	   AUXV_FORMAT_STR);
       TAG (AT_RANDOM, _("Address of 16 random bytes"), AUXV_FORMAT_HEX);
       TAG (AT_HWCAP2, _("Extension of AT_HWCAP"), AUXV_FORMAT_HEX);
+      TAG (AT_RSEQ_FEATURE_SIZE, _("rseq supported feature size"),
+	   AUXV_FORMAT_DEC);
+      TAG (AT_RSEQ_ALIGN, _("rseq allocation alignment"),
+	   AUXV_FORMAT_DEC);
       TAG (AT_EXECFN, _("File name of executable"), AUXV_FORMAT_STR);
       TAG (AT_SECURE, _("Boolean, was exec setuid-like?"), AUXV_FORMAT_DEC);
       TAG (AT_SYSINFO, _("Special system info/entry points"), AUXV_FORMAT_HEX);
@@ -458,9 +508,21 @@ default_print_auxv_entry (struct gdbarch
 	   AUXV_FORMAT_HEX);
       TAG (AT_L1I_CACHESHAPE, _("L1 Instruction cache information"),
 	   AUXV_FORMAT_HEX);
+      TAG (AT_L1I_CACHESIZE, _("L1 Instruction cache size"), AUXV_FORMAT_HEX);
+      TAG (AT_L1I_CACHEGEOMETRY, _("L1 Instruction cache geometry"),
+	   AUXV_FORMAT_HEX);
       TAG (AT_L1D_CACHESHAPE, _("L1 Data cache information"), AUXV_FORMAT_HEX);
+      TAG (AT_L1D_CACHESIZE, _("L1 Data cache size"), AUXV_FORMAT_HEX);
+      TAG (AT_L1D_CACHEGEOMETRY, _("L1 Data cache geometry"),
+	   AUXV_FORMAT_HEX);
       TAG (AT_L2_CACHESHAPE, _("L2 cache information"), AUXV_FORMAT_HEX);
+      TAG (AT_L2_CACHESIZE, _("L2 cache size"), AUXV_FORMAT_HEX);
+      TAG (AT_L2_CACHEGEOMETRY, _("L2 cache geometry"), AUXV_FORMAT_HEX);
       TAG (AT_L3_CACHESHAPE, _("L3 cache information"), AUXV_FORMAT_HEX);
+      TAG (AT_L3_CACHESIZE, _("L3 cache size"), AUXV_FORMAT_HEX);
+      TAG (AT_L3_CACHEGEOMETRY, _("L3 cache geometry"), AUXV_FORMAT_HEX);
+      TAG (AT_MINSIGSTKSZ, _("Minimum stack size for signal delivery"),
+	   AUXV_FORMAT_HEX);
       TAG (AT_SUN_UID, _("Effective user ID"), AUXV_FORMAT_DEC);
       TAG (AT_SUN_RUID, _("Real user ID"), AUXV_FORMAT_DEC);
       TAG (AT_SUN_GID, _("Effective group ID"), AUXV_FORMAT_DEC);
@@ -504,22 +566,23 @@ default_print_auxv_entry (struct gdbarch
 
 /* Print the contents of the target's AUXV on the specified file.  */
 
-int
-fprint_target_auxv (struct ui_file *file, struct target_ops *ops)
+static int
+fprint_target_auxv (struct ui_file *file)
 {
-  struct gdbarch *gdbarch = target_gdbarch ();
+  gdbarch *gdbarch = current_inferior ()->arch ();
   CORE_ADDR type, val;
   int ents = 0;
-  auxv_info *info = get_auxv_inferior_data (ops);
+  const std::optional<gdb::byte_vector> &auxv = target_read_auxv ();
 
-  if (!info->data)
+  if (!auxv.has_value ())
     return -1;
 
-  gdb_byte *data = info->data->data ();
-  gdb_byte *ptr = data;
-  size_t len = info->data->size ();
+  const gdb_byte *data = auxv->data ();
+  const gdb_byte *ptr = data;
+  size_t len = auxv->size ();
 
-  while (target_auxv_parse (&ptr, data + len, &type, &val) > 0)
+  while (parse_auxv (current_inferior ()->top_target (), gdbarch, &ptr,
+		     data + len, &type, &val) > 0)
     {
       gdbarch_print_auxv_entry (gdbarch, file, type, val);
       ++ents;
@@ -533,11 +596,11 @@ fprint_target_auxv (struct ui_file *file
 static void
 info_auxv_command (const char *cmd, int from_tty)
 {
-  if (! target_has_stack)
+  if (! target_has_stack ())
     error (_("The program has no auxiliary information now."));
   else
     {
-      int ents = fprint_target_auxv (gdb_stdout, current_top_target ());
+      int ents = fprint_target_auxv (gdb_stdout);
 
       if (ents < 0)
 	error (_("No auxiliary vector found, or failed reading it."));
@@ -546,15 +609,17 @@ info_auxv_command (const char *cmd, int
     }
 }
 
+void _initialize_auxv ();
 void
-_initialize_auxv (void)
+_initialize_auxv ()
 {
   add_info ("auxv", info_auxv_command,
 	    _("Display the inferior's auxiliary vector.\n\
 This is information provided by the operating system at program startup."));
 
   /* Observers used to invalidate the auxv cache when needed.  */
-  gdb::observers::inferior_exit.attach (invalidate_auxv_cache_inf);
-  gdb::observers::inferior_appeared.attach (invalidate_auxv_cache_inf);
-  gdb::observers::executable_changed.attach (invalidate_auxv_cache);
+  gdb::observers::inferior_exit.attach (invalidate_auxv_cache_inf, "auxv");
+  gdb::observers::inferior_appeared.attach (invalidate_auxv_cache_inf, "auxv");
+  gdb::observers::all_objfiles_removed.attach (auxv_all_objfiles_removed,
+					       "auxv");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/auxv.h ./gdb/auxv.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/auxv.h	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/auxv.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Auxiliary vector support for GDB, the GNU debugger.
 
-   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Copyright (C) 2004-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,26 +25,52 @@
 /* See "include/elf/common.h" for the definition of valid AT_* values.  */
 
 /* The default implementation of to_auxv_parse, used by the target
-   stack.  */
+   stack.
 
-extern int default_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
-			       gdb_byte *endptr, CORE_ADDR *typep,
+   Read one auxv entry from *READPTR, not reading locations >= ENDPTR.
+   Return 0 if *READPTR is already at the end of the buffer.
+   Return -1 if there is insufficient buffer for a whole entry.
+   Return 1 if an entry was read into *TYPEP and *VALP.  */
+extern int default_auxv_parse (struct target_ops *ops, const gdb_byte **readptr,
+			       const gdb_byte *endptr, CORE_ADDR *typep,
 			       CORE_ADDR *valp);
 
-/* Read one auxv entry from *READPTR, not reading locations >= ENDPTR.
+/* The SVR4 psABI implementation of to_auxv_parse, that uses an int to
+   store the type rather than long as assumed by the default parser.
+
+   Read one auxv entry from *READPTR, not reading locations >= ENDPTR.
    Return 0 if *READPTR is already at the end of the buffer.
    Return -1 if there is insufficient buffer for a whole entry.
    Return 1 if an entry was read into *TYPEP and *VALP.  */
-extern int target_auxv_parse (gdb_byte **readptr, gdb_byte *endptr,
-			      CORE_ADDR *typep, CORE_ADDR *valp);
+extern int svr4_auxv_parse (struct gdbarch *gdbarch, const gdb_byte **readptr,
+			    const gdb_byte *endptr, CORE_ADDR *typep,
+			    CORE_ADDR *valp);
+
+/* Read auxv data from the current inferior's target stack.  */
+
+extern const std::optional<gdb::byte_vector> &target_read_auxv ();
+
+/* Read auxv data from OPS.  */
+
+extern std::optional<gdb::byte_vector> target_read_auxv_raw (target_ops *ops);
+
+/* Search AUXV for an entry with a_type matching MATCH.
+
+   OPS and GDBARCH are the target and architecture to use to parse auxv entries.
 
-/* Extract the auxiliary vector entry with a_type matching MATCH.
    Return zero if no such entry was found, or -1 if there was
    an error getting the information.  On success, return 1 after
    storing the entry's value field in *VALP.  */
-extern int target_auxv_search (struct target_ops *ops,
+
+extern int target_auxv_search (const gdb::byte_vector &auxv,
+			       target_ops *ops, gdbarch *gdbarch,
 			       CORE_ADDR match, CORE_ADDR *valp);
 
+/* Same as the above, but read the auxv data from the current inferior.  Use
+   the current inferior's top target and arch to parse auxv entries.  */
+
+extern int target_auxv_search (CORE_ADDR match, CORE_ADDR *valp);
+
 /* Print a description of a single AUXV entry on the specified file.  */
 enum auxv_format { AUXV_FORMAT_DEC, AUXV_FORMAT_HEX, AUXV_FORMAT_STR };
 
@@ -59,9 +85,6 @@ extern void default_print_auxv_entry (st
 				      struct ui_file *file, CORE_ADDR type,
 				      CORE_ADDR val);
 
-/* Print the contents of the target's AUXV on the specified file.  */
-extern int fprint_target_auxv (struct ui_file *file, struct target_ops *ops);
-
 extern target_xfer_partial_ftype memory_xfer_auxv;
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/avr-tdep.c ./gdb/avr-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/avr-tdep.c	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/avr-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Atmel AVR, for GDB.
 
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -37,6 +37,7 @@
 #include "dis-asm.h"
 #include "objfiles.h"
 #include <algorithm>
+#include "gdbarch.h"
 
 /* AVR Background:
 
@@ -111,7 +112,7 @@ enum
   AVR_LAST_PUSHED_REGNUM = 17,
 
   AVR_ARG1_REGNUM = 24,         /* Single byte argument */
-  AVR_ARGN_REGNUM = 25,         /* Multi byte argments */
+  AVR_ARGN_REGNUM = 25,         /* Multi byte arguments */
   AVR_LAST_ARG_REGNUM = 8,      /* Last argument register */
 
   AVR_RET1_REGNUM = 24,         /* Single byte return value */
@@ -185,21 +186,21 @@ struct avr_unwind_cache
   int size;
   int prologue_type;
   /* Table indicating the location of each and every register.  */
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
-struct gdbarch_tdep
+struct avr_gdbarch_tdep : gdbarch_tdep_base
 {
   /* Number of bytes stored to the stack by call instructions.
      2 bytes for avr1-5 and avrxmega1-5, 3 bytes for avr6 and avrxmega6-7.  */
-  int call_length;
+  int call_length = 0;
 
   /* Type for void.  */
-  struct type *void_type;
+  struct type *void_type = nullptr;
   /* Type for a function returning void.  */
-  struct type *func_void_type;
+  struct type *func_void_type = nullptr;
   /* Type for a pointer to a function.  Used for the type of PC.  */
-  struct type *pc_type;
+  struct type *pc_type = nullptr;
 };
 
 /* Lookup the name of a register given it's number.  */
@@ -215,10 +216,8 @@ avr_register_name (struct gdbarch *gdbar
     "SREG", "SP", "PC2",
     "pc"
   };
-  if (regnum < 0)
-    return NULL;
-  if (regnum >= (sizeof (register_names) / sizeof (*register_names)))
-    return NULL;
+  static_assert (ARRAY_SIZE (register_names)
+		     == (AVR_NUM_REGS + AVR_NUM_PSEUDO_REGS));
   return register_names[regnum];
 }
 
@@ -230,14 +229,18 @@ avr_register_type (struct gdbarch *gdbar
 {
   if (reg_nr == AVR_PC_REGNUM)
     return builtin_type (gdbarch)->builtin_uint32;
+
+  avr_gdbarch_tdep *tdep = gdbarch_tdep<avr_gdbarch_tdep> (gdbarch);
   if (reg_nr == AVR_PSEUDO_PC_REGNUM)
-    return gdbarch_tdep (gdbarch)->pc_type;
+    return tdep->pc_type;
+
   if (reg_nr == AVR_SP_REGNUM)
     return builtin_type (gdbarch)->builtin_data_ptr;
+
   return builtin_type (gdbarch)->builtin_uint8;
 }
 
-/* Instruction address checks and convertions.  */
+/* Instruction address checks and conversions.  */
 
 static CORE_ADDR
 avr_make_iaddr (CORE_ADDR x)
@@ -256,7 +259,7 @@ avr_convert_iaddr_to_raw (CORE_ADDR x)
   return ((x) & 0xffffffff);
 }
 
-/* SRAM address checks and convertions.  */
+/* SRAM address checks and conversions.  */
 
 static CORE_ADDR
 avr_make_saddr (CORE_ADDR x)
@@ -274,7 +277,7 @@ avr_convert_saddr_to_raw (CORE_ADDR x)
   return ((x) & 0xffffffff);
 }
 
-/* EEPROM address checks and convertions.  I don't know if these will ever
+/* EEPROM address checks and conversions.  I don't know if these will ever
    actually be used, but I've added them just the same.  TRoth */
 
 /* TRoth/2002-04-08: Commented out for now to allow fix for problem with large
@@ -310,22 +313,22 @@ avr_address_to_pointer (struct gdbarch *
   if (AVR_TYPE_ADDRESS_CLASS_FLASH (type))
     {
       /* A data pointer in flash is byte addressed.  */
-      store_unsigned_integer (buf, TYPE_LENGTH (type), byte_order,
+      store_unsigned_integer (buf, type->length (), byte_order,
 			      avr_convert_iaddr_to_raw (addr));
     }
   /* Is it a code address?  */
-  else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
-	   || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD)
+  else if (type->target_type ()->code () == TYPE_CODE_FUNC
+	   || type->target_type ()->code () == TYPE_CODE_METHOD)
     {
       /* A code pointer is word (16 bits) addressed.  We shift the address down
 	 by 1 bit to convert it to a pointer.  */
-      store_unsigned_integer (buf, TYPE_LENGTH (type), byte_order,
+      store_unsigned_integer (buf, type->length (), byte_order,
 			      avr_convert_iaddr_to_raw (addr >> 1));
     }
   else
     {
       /* Strip off any upper segment bits.  */
-      store_unsigned_integer (buf, TYPE_LENGTH (type), byte_order,
+      store_unsigned_integer (buf, type->length (), byte_order,
 			      avr_convert_saddr_to_raw (addr));
     }
 }
@@ -336,7 +339,7 @@ avr_pointer_to_address (struct gdbarch *
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR addr
-    = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order);
+    = extract_unsigned_integer (buf, type->length (), byte_order);
 
   /* Is it a data address in flash?  */
   if (AVR_TYPE_ADDRESS_CLASS_FLASH (type))
@@ -345,9 +348,9 @@ avr_pointer_to_address (struct gdbarch *
       return avr_make_iaddr (addr);
     }
   /* Is it a code address?  */
-  else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
-	   || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD
-	   || TYPE_CODE_SPACE (TYPE_TARGET_TYPE (type)))
+  else if (type->target_type ()->code () == TYPE_CODE_FUNC
+	   || type->target_type ()->code () == TYPE_CODE_METHOD
+	   || TYPE_CODE_SPACE (type->target_type ()))
     {
       /* A code pointer is word (16 bits) addressed so we shift it up
 	 by 1 bit to convert it to an address.  */
@@ -363,7 +366,10 @@ avr_integer_to_address (struct gdbarch *
 {
   ULONGEST addr = unpack_long (type, buf);
 
-  return avr_make_saddr (addr);
+  if (TYPE_DATA_SPACE (type))
+    return avr_make_saddr (addr);
+  else
+    return avr_make_iaddr (addr);
 }
 
 static CORE_ADDR
@@ -379,12 +385,12 @@ static void
 avr_write_pc (struct regcache *regcache, CORE_ADDR val)
 {
   regcache_cooked_write_unsigned (regcache, AVR_PC_REGNUM,
-                                  avr_convert_iaddr_to_raw (val));
+				  avr_convert_iaddr_to_raw (val));
 }
 
 static enum register_status
 avr_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
-                          int regnum, gdb_byte *buf)
+			  int regnum, gdb_byte *buf)
 {
   ULONGEST val;
   enum register_status status;
@@ -399,13 +405,13 @@ avr_pseudo_register_read (struct gdbarch
       store_unsigned_integer (buf, 4, gdbarch_byte_order (gdbarch), val);
       return status;
     default:
-      internal_error (__FILE__, __LINE__, _("invalid regnum"));
+      internal_error (_("invalid regnum"));
     }
 }
 
 static void
 avr_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
-                           int regnum, const gdb_byte *buf)
+			   int regnum, const gdb_byte *buf)
 {
   ULONGEST val;
 
@@ -417,7 +423,7 @@ avr_pseudo_register_write (struct gdbarc
       regcache_raw_write_unsigned (regcache, AVR_PC_REGNUM, val);
       break;
     default:
-      internal_error (__FILE__, __LINE__, _("invalid regnum"));
+      internal_error (_("invalid regnum"));
     }
 }
 
@@ -430,87 +436,87 @@ avr_pseudo_register_write (struct gdbarc
    This information is stored in the avr_unwind_cache structure.
 
    Some devices lack the sbiw instruction, so on those replace this:
-        sbiw    r28, XX
+	sbiw    r28, XX
    with this:
-        subi    r28,lo8(XX)
-        sbci    r29,hi8(XX)
+	subi    r28,lo8(XX)
+	sbci    r29,hi8(XX)
 
    A typical AVR function prologue with a frame pointer might look like this:
-        push    rXX        ; saved regs
-        ...
-        push    r28
-        push    r29
-        in      r28,__SP_L__
-        in      r29,__SP_H__
-        sbiw    r28,<LOCALS_SIZE>
-        in      __tmp_reg__,__SREG__
-        cli
-        out     __SP_H__,r29
-        out     __SREG__,__tmp_reg__
-        out     __SP_L__,r28
+	push    rXX        ; saved regs
+	...
+	push    r28
+	push    r29
+	in      r28,__SP_L__
+	in      r29,__SP_H__
+	sbiw    r28,<LOCALS_SIZE>
+	in      __tmp_reg__,__SREG__
+	cli
+	out     __SP_H__,r29
+	out     __SREG__,__tmp_reg__
+	out     __SP_L__,r28
 
    A typical AVR function prologue without a frame pointer might look like
    this:
-        push    rXX        ; saved regs
-        ...
+	push    rXX        ; saved regs
+	...
 
    A main function prologue looks like this:
-        ldi     r28,lo8(<RAM_ADDR> - <LOCALS_SIZE>)
-        ldi     r29,hi8(<RAM_ADDR> - <LOCALS_SIZE>)
-        out     __SP_H__,r29
-        out     __SP_L__,r28
+	ldi     r28,lo8(<RAM_ADDR> - <LOCALS_SIZE>)
+	ldi     r29,hi8(<RAM_ADDR> - <LOCALS_SIZE>)
+	out     __SP_H__,r29
+	out     __SP_L__,r28
 
    A signal handler prologue looks like this:
-        push    __zero_reg__
-        push    __tmp_reg__
-        in      __tmp_reg__, __SREG__
-        push    __tmp_reg__
-        clr     __zero_reg__
-        push    rXX             ; save registers r18:r27, r30:r31
-        ...
-        push    r28             ; save frame pointer
-        push    r29
-        in      r28, __SP_L__
-        in      r29, __SP_H__
-        sbiw    r28, <LOCALS_SIZE>
-        out     __SP_H__, r29
-        out     __SP_L__, r28
-        
+	push    __zero_reg__
+	push    __tmp_reg__
+	in      __tmp_reg__, __SREG__
+	push    __tmp_reg__
+	clr     __zero_reg__
+	push    rXX             ; save registers r18:r27, r30:r31
+	...
+	push    r28             ; save frame pointer
+	push    r29
+	in      r28, __SP_L__
+	in      r29, __SP_H__
+	sbiw    r28, <LOCALS_SIZE>
+	out     __SP_H__, r29
+	out     __SP_L__, r28
+	
    A interrupt handler prologue looks like this:
-        sei
-        push    __zero_reg__
-        push    __tmp_reg__
-        in      __tmp_reg__, __SREG__
-        push    __tmp_reg__
-        clr     __zero_reg__
-        push    rXX             ; save registers r18:r27, r30:r31
-        ...
-        push    r28             ; save frame pointer
-        push    r29
-        in      r28, __SP_L__
-        in      r29, __SP_H__
-        sbiw    r28, <LOCALS_SIZE>
-        cli
-        out     __SP_H__, r29
-        sei     
-        out     __SP_L__, r28
+	sei
+	push    __zero_reg__
+	push    __tmp_reg__
+	in      __tmp_reg__, __SREG__
+	push    __tmp_reg__
+	clr     __zero_reg__
+	push    rXX             ; save registers r18:r27, r30:r31
+	...
+	push    r28             ; save frame pointer
+	push    r29
+	in      r28, __SP_L__
+	in      r29, __SP_H__
+	sbiw    r28, <LOCALS_SIZE>
+	cli
+	out     __SP_H__, r29
+	sei     
+	out     __SP_L__, r28
 
    A `-mcall-prologues' prologue looks like this (Note that the megas use a
    jmp instead of a rjmp, thus the prologue is one word larger since jmp is a
    32 bit insn and rjmp is a 16 bit insn):
-        ldi     r26,lo8(<LOCALS_SIZE>)
-        ldi     r27,hi8(<LOCALS_SIZE>)
-        ldi     r30,pm_lo8(.L_foo_body)
-        ldi     r31,pm_hi8(.L_foo_body)
-        rjmp    __prologue_saves__+RRR
-        .L_foo_body:  */
+	ldi     r26,lo8(<LOCALS_SIZE>)
+	ldi     r27,hi8(<LOCALS_SIZE>)
+	ldi     r30,pm_lo8(.L_foo_body)
+	ldi     r31,pm_hi8(.L_foo_body)
+	rjmp    __prologue_saves__+RRR
+	.L_foo_body:  */
 
 /* Not really part of a prologue, but still need to scan for it, is when a
    function prologue moves values passed via registers as arguments to new
    registers.  In this case, all local variables live in registers, so there
    may be some register saves.  This is what it looks like:
-        movw    rMM, rNN
-        ...
+	movw    rMM, rNN
+	...
 
    There could be multiple movw's.  If the target doesn't have a movw insn, it
    will use two mov insns.  This could be done after any of the above prologue
@@ -566,9 +572,9 @@ avr_scan_prologue (struct gdbarch *gdbar
 	      if (vpc + 4 + sizeof (img) < len
 		  && memcmp (prologue + vpc + 4, img, sizeof (img)) == 0)
 		{
-                  info->prologue_type = AVR_PROLOGUE_MAIN;
-                  info->base = locals;
-                  return pc_beg + 4;
+		  info->prologue_type = AVR_PROLOGUE_MAIN;
+		  info->base = locals;
+		  return pc_beg + 4;
 		}
 	    }
 	}
@@ -624,59 +630,59 @@ avr_scan_prologue (struct gdbarch *gdbar
       insn = extract_unsigned_integer (&prologue[vpc + 8], 2, byte_order);
       /* rjmp __prologue_saves__+RRR */
       if ((insn & 0xf000) == 0xc000)
-        {
-          /* Extract PC relative offset from RJMP */
-          i = (insn & 0xfff) | (insn & 0x800 ? (-1 ^ 0xfff) : 0);
-          /* Convert offset to byte addressable mode */
-          i *= 2;
-          /* Destination address */
-          i += pc_beg + 10;
+	{
+	  /* Extract PC relative offset from RJMP */
+	  i = (insn & 0xfff) | (insn & 0x800 ? (-1 ^ 0xfff) : 0);
+	  /* Convert offset to byte addressable mode */
+	  i *= 2;
+	  /* Destination address */
+	  i += pc_beg + 10;
 
-          if (body_addr != (pc_beg + 10)/2)
-            break;
+	  if (body_addr != (pc_beg + 10)/2)
+	    break;
 
-          pc_offset += 2;
-        }
+	  pc_offset += 2;
+	}
       else if ((insn & 0xfe0e) == 0x940c)
-        {
-          /* Extract absolute PC address from JMP */
-          i = (((insn & 0x1) | ((insn & 0x1f0) >> 3) << 16)
+	{
+	  /* Extract absolute PC address from JMP */
+	  i = (((insn & 0x1) | ((insn & 0x1f0) >> 3) << 16)
 	       | (extract_unsigned_integer (&prologue[vpc + 10], 2, byte_order)
 		  & 0xffff));
-          /* Convert address to byte addressable mode */
-          i *= 2;
+	  /* Convert address to byte addressable mode */
+	  i *= 2;
 
-          if (body_addr != (pc_beg + 12)/2)
-            break;
+	  if (body_addr != (pc_beg + 12)/2)
+	    break;
 
-          pc_offset += 4;
-        }
+	  pc_offset += 4;
+	}
       else
-        break;
+	break;
 
       /* Resolve offset (in words) from __prologue_saves__ symbol.
-         Which is a pushes count in `-mcall-prologues' mode */
-      num_pushes = AVR_MAX_PUSHES - (i - BMSYMBOL_VALUE_ADDRESS (msymbol)) / 2;
+	 Which is a pushes count in `-mcall-prologues' mode */
+      num_pushes = AVR_MAX_PUSHES - (i - msymbol.value_address ()) / 2;
 
       if (num_pushes > AVR_MAX_PUSHES)
-        {
-          fprintf_unfiltered (gdb_stderr, _("Num pushes too large: %d\n"),
-                              num_pushes);
-          num_pushes = 0;
-        }
+	{
+	  gdb_printf (gdb_stderr, _("Num pushes too large: %d\n"),
+		      num_pushes);
+	  num_pushes = 0;
+	}
 
       if (num_pushes)
 	{
 	  int from;
 
-	  info->saved_regs[AVR_FP_REGNUM + 1].addr = num_pushes;
+	  info->saved_regs[AVR_FP_REGNUM + 1].set_addr (num_pushes);
 	  if (num_pushes >= 2)
-	    info->saved_regs[AVR_FP_REGNUM].addr = num_pushes - 1;
+	    info->saved_regs[AVR_FP_REGNUM].set_addr (num_pushes - 1);
 
 	  i = 0;
 	  for (from = AVR_LAST_PUSHED_REGNUM + 1 - (num_pushes - 2);
 	       from <= AVR_LAST_PUSHED_REGNUM; ++from)
-	    info->saved_regs [from].addr = ++i;
+	    info->saved_regs [from].set_addr (++i);
 	}
       info->size = loc_size + num_pushes;
       info->prologue_type = AVR_PROLOGUE_CALL;
@@ -702,22 +708,22 @@ avr_scan_prologue (struct gdbarch *gdbar
       if (len >= sizeof (img)
 	  && memcmp (prologue, img, sizeof (img)) == 0)
 	{
-          info->prologue_type = AVR_PROLOGUE_INTR;
+	  info->prologue_type = AVR_PROLOGUE_INTR;
 	  vpc += sizeof (img);
-          info->saved_regs[AVR_SREG_REGNUM].addr = 3;
-          info->saved_regs[0].addr = 2;
-          info->saved_regs[1].addr = 1;
-          info->size += 3;
+	  info->saved_regs[AVR_SREG_REGNUM].set_addr (3);
+	  info->saved_regs[0].set_addr (2);
+	  info->saved_regs[1].set_addr (1);
+	  info->size += 3;
 	}
       else if (len >= sizeof (img) - 2
 	       && memcmp (img + 2, prologue, sizeof (img) - 2) == 0)
 	{
-          info->prologue_type = AVR_PROLOGUE_SIG;
-          vpc += sizeof (img) - 2;
-          info->saved_regs[AVR_SREG_REGNUM].addr = 3;
-          info->saved_regs[0].addr = 2;
-          info->saved_regs[1].addr = 1;
-          info->size += 2;
+	  info->prologue_type = AVR_PROLOGUE_SIG;
+	  vpc += sizeof (img) - 2;
+	  info->saved_regs[AVR_SREG_REGNUM].set_addr (3);
+	  info->saved_regs[0].set_addr (2);
+	  info->saved_regs[1].set_addr (1);
+	  info->size += 2;
 	}
     }
 
@@ -732,7 +738,7 @@ avr_scan_prologue (struct gdbarch *gdbar
 	  /* Bits 4-9 contain a mask for registers R0-R32.  */
 	  int regno = (insn & 0x1f0) >> 4;
 	  info->size++;
-	  info->saved_regs[regno].addr = info->size;
+	  info->saved_regs[regno].set_addr (info->size);
 	  scan_stage = 1;
 	}
       else
@@ -742,22 +748,22 @@ avr_scan_prologue (struct gdbarch *gdbar
   gdb_assert (vpc < AVR_MAX_PROLOGUE_SIZE);
 
   /* Handle static small stack allocation using rcall or push.  */
-
+  avr_gdbarch_tdep *tdep = gdbarch_tdep<avr_gdbarch_tdep> (gdbarch);
   while (scan_stage == 1 && vpc < len)
     {
       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
       if (insn == 0xd000)	/* rcall .+0 */
-        {
-          info->size += gdbarch_tdep (gdbarch)->call_length;
-          vpc += 2;
-        }
+	{
+	  info->size += tdep->call_length;
+	  vpc += 2;
+	}
       else if (insn == 0x920f || insn == 0x921f)  /* push r0 or push r1 */
-        {
-          info->size += 1;
-          vpc += 2;
-        }
+	{
+	  info->size += 1;
+	  vpc += 2;
+	}
       else
-        break;
+	break;
     }
 
   /* Second stage of the prologue scanning.
@@ -783,7 +789,7 @@ avr_scan_prologue (struct gdbarch *gdbar
   /* Third stage of the prologue scanning.  (Really two stages).
      Scan for:
      sbiw r28,XX or subi r28,lo8(XX)
-                    sbci r29,hi8(XX)
+		    sbci r29,hi8(XX)
      in __tmp_reg__,__SREG__
      cli
      out __SP_H__,r29
@@ -813,10 +819,10 @@ avr_scan_prologue (struct gdbarch *gdbar
 
       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
       if ((insn & 0xff30) == 0x9720)	/* sbiw r28,XXX */
-        {
-          locals_size = (insn & 0xf) | ((insn & 0xc0) >> 2);
-          vpc += 2;
-        }
+	{
+	  locals_size = (insn & 0xf) | ((insn & 0xc0) >> 2);
+	  vpc += 2;
+	}
       else if ((insn & 0xf0f0) == 0x50c0)	/* subi r28,lo8(XX) */
 	{
 	  locals_size = (insn & 0xf) | ((insn & 0xf00) >> 4);
@@ -826,28 +832,28 @@ avr_scan_prologue (struct gdbarch *gdbar
 	  locals_size += ((insn & 0xf) | ((insn & 0xf00) >> 4)) << 8;
 	}
       else
-        return pc_beg + vpc;
+	return pc_beg + vpc;
 
       /* Scan the last part of the prologue.  May not be present for interrupt
-         or signal handler functions, which is why we set the prologue type
-         when we saw the beginning of the prologue previously.  */
+	 or signal handler functions, which is why we set the prologue type
+	 when we saw the beginning of the prologue previously.  */
 
       if (vpc + sizeof (img_sig) < len
 	  && memcmp (prologue + vpc, img_sig, sizeof (img_sig)) == 0)
-        {
-          vpc += sizeof (img_sig);
-        }
+	{
+	  vpc += sizeof (img_sig);
+	}
       else if (vpc + sizeof (img_int) < len 
 	       && memcmp (prologue + vpc, img_int, sizeof (img_int)) == 0)
-        {
-          vpc += sizeof (img_int);
-        }
+	{
+	  vpc += sizeof (img_int);
+	}
       if (vpc + sizeof (img) < len
 	  && memcmp (prologue + vpc, img, sizeof (img)) == 0)
-        {
-          info->prologue_type = AVR_PROLOGUE_NORMAL;
-          vpc += sizeof (img);
-        }
+	{
+	  info->prologue_type = AVR_PROLOGUE_NORMAL;
+	  vpc += sizeof (img);
+	}
 
       info->size += locals_size;
 
@@ -861,11 +867,11 @@ avr_scan_prologue (struct gdbarch *gdbar
     {
       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
       if ((insn & 0xff00) == 0x0100)	/* movw rXX, rYY */
-        continue;
+	continue;
       else if ((insn & 0xfc00) == 0x2c00) /* mov rXX, rYY */
-        continue;
+	continue;
       else
-          break;
+	  break;
     }
     
   return pc_beg + vpc;
@@ -889,7 +895,7 @@ avr_skip_prologue (struct gdbarch *gdbar
   {
     CORE_ADDR prologue_end = pc;
     struct avr_unwind_cache info = {0};
-    struct trad_frame_saved_reg saved_regs[AVR_NUM_REGS];
+    trad_frame_saved_reg saved_regs[AVR_NUM_REGS];
 
     info.saved_regs = saved_regs;
     
@@ -935,30 +941,30 @@ avr_return_value (struct gdbarch *gdbarc
      register holds the LSB.  */
   int lsb_reg;
 
-  if ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
-       || TYPE_CODE (valtype) == TYPE_CODE_UNION
-       || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
-      && TYPE_LENGTH (valtype) > 8)
+  if ((valtype->code () == TYPE_CODE_STRUCT
+       || valtype->code () == TYPE_CODE_UNION
+       || valtype->code () == TYPE_CODE_ARRAY)
+      && valtype->length () > 8)
     return RETURN_VALUE_STRUCT_CONVENTION;
 
-  if (TYPE_LENGTH (valtype) <= 2)
+  if (valtype->length () <= 2)
     lsb_reg = 24;
-  else if (TYPE_LENGTH (valtype) <= 4)
+  else if (valtype->length () <= 4)
     lsb_reg = 22;
-  else if (TYPE_LENGTH (valtype) <= 8)
+  else if (valtype->length () <= 8)
     lsb_reg = 18;
   else
     gdb_assert_not_reached ("unexpected type length");
 
   if (writebuf != NULL)
     {
-      for (i = 0; i < TYPE_LENGTH (valtype); i++)
+      for (i = 0; i < valtype->length (); i++)
 	regcache->cooked_write (lsb_reg + i, writebuf + i);
     }
 
   if (readbuf != NULL)
     {
-      for (i = 0; i < TYPE_LENGTH (valtype); i++)
+      for (i = 0; i < valtype->length (); i++)
 	regcache->cooked_read (lsb_reg + i, readbuf + i);
     }
 
@@ -973,15 +979,14 @@ avr_return_value (struct gdbarch *gdbarc
    for it IS the sp for the next frame.  */
 
 static struct avr_unwind_cache *
-avr_frame_unwind_cache (struct frame_info *this_frame,
-                        void **this_prologue_cache)
+avr_frame_unwind_cache (frame_info_ptr this_frame,
+			void **this_prologue_cache)
 {
   CORE_ADDR start_pc, current_pc;
   ULONGEST prev_sp;
   ULONGEST this_base;
   struct avr_unwind_cache *info;
   struct gdbarch *gdbarch;
-  struct gdbarch_tdep *tdep;
   int i;
 
   if (*this_prologue_cache)
@@ -1006,20 +1011,20 @@ avr_frame_unwind_cache (struct frame_inf
       ULONGEST high_base;       /* High byte of FP */
 
       /* The SP was moved to the FP.  This indicates that a new frame
-         was created.  Get THIS frame's FP value by unwinding it from
-         the next frame.  */
+	 was created.  Get THIS frame's FP value by unwinding it from
+	 the next frame.  */
       this_base = get_frame_register_unsigned (this_frame, AVR_FP_REGNUM);
       high_base = get_frame_register_unsigned (this_frame, AVR_FP_REGNUM + 1);
       this_base += (high_base << 8);
       
       /* The FP points at the last saved register.  Adjust the FP back
-         to before the first saved register giving the SP.  */
+	 to before the first saved register giving the SP.  */
       prev_sp = this_base + info->size; 
    }
   else
     {
       /* Assume that the FP is this frame's SP but with that pushed
-         stack space added back.  */
+	 stack space added back.  */
       this_base = get_frame_register_unsigned (this_frame, AVR_SP_REGNUM);
       prev_sp = this_base + info->size;
     }
@@ -1034,26 +1039,27 @@ avr_frame_unwind_cache (struct frame_inf
   /* Adjust all the saved registers so that they contain addresses and not
      offsets.  */
   for (i = 0; i < gdbarch_num_regs (gdbarch) - 1; i++)
-    if (info->saved_regs[i].addr > 0)
-      info->saved_regs[i].addr = info->prev_sp - info->saved_regs[i].addr;
+    if (info->saved_regs[i].is_addr ())
+      info->saved_regs[i].set_addr (info->prev_sp
+				    - info->saved_regs[i].addr ());
 
   /* Except for the main and startup code, the return PC is always saved on
      the stack and is at the base of the frame.  */
 
   if (info->prologue_type != AVR_PROLOGUE_MAIN)
-    info->saved_regs[AVR_PC_REGNUM].addr = info->prev_sp;
+    info->saved_regs[AVR_PC_REGNUM].set_addr (info->prev_sp);
 
   /* The previous frame's SP needed to be computed.  Save the computed
      value.  */
-  tdep = gdbarch_tdep (gdbarch);
-  trad_frame_set_value (info->saved_regs, AVR_SP_REGNUM,
-                        info->prev_sp - 1 + tdep->call_length);
+  avr_gdbarch_tdep *tdep = gdbarch_tdep<avr_gdbarch_tdep> (gdbarch);
+  info->saved_regs[AVR_SP_REGNUM].set_value (info->prev_sp
+					     - 1 + tdep->call_length);
 
   return info;
 }
 
 static CORE_ADDR
-avr_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
+avr_unwind_pc (struct gdbarch *gdbarch, frame_info_ptr next_frame)
 {
   ULONGEST pc;
 
@@ -1063,7 +1069,7 @@ avr_unwind_pc (struct gdbarch *gdbarch,
 }
 
 static CORE_ADDR
-avr_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
+avr_unwind_sp (struct gdbarch *gdbarch, frame_info_ptr next_frame)
 {
   ULONGEST sp;
 
@@ -1076,9 +1082,9 @@ avr_unwind_sp (struct gdbarch *gdbarch,
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-avr_frame_this_id (struct frame_info *this_frame,
-                   void **this_prologue_cache,
-                   struct frame_id *this_id)
+avr_frame_this_id (frame_info_ptr this_frame,
+		   void **this_prologue_cache,
+		   struct frame_id *this_id)
 {
   struct avr_unwind_cache *info
     = avr_frame_unwind_cache (this_frame, this_prologue_cache);
@@ -1101,7 +1107,7 @@ avr_frame_this_id (struct frame_info *th
 }
 
 static struct value *
-avr_frame_prev_register (struct frame_info *this_frame,
+avr_frame_prev_register (frame_info_ptr this_frame,
 			 void **this_prologue_cache, int regnum)
 {
   struct avr_unwind_cache *info
@@ -1109,8 +1115,8 @@ avr_frame_prev_register (struct frame_in
 
   if (regnum == AVR_PC_REGNUM || regnum == AVR_PSEUDO_PC_REGNUM)
     {
-      if (trad_frame_addr_p (info->saved_regs, AVR_PC_REGNUM))
-        {
+      if (info->saved_regs[AVR_PC_REGNUM].is_addr ())
+	{
 	  /* Reading the return PC from the PC register is slightly
 	     abnormal.  register_size(AVR_PC_REGNUM) says it is 4 bytes,
 	     but in reality, only two bytes (3 in upcoming mega256) are
@@ -1127,21 +1133,21 @@ avr_frame_prev_register (struct frame_in
 	  int i;
 	  gdb_byte buf[3];
 	  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-	  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+	  avr_gdbarch_tdep *tdep = gdbarch_tdep<avr_gdbarch_tdep> (gdbarch);
 
-	  read_memory (info->saved_regs[AVR_PC_REGNUM].addr,
-                       buf, tdep->call_length);
+	  read_memory (info->saved_regs[AVR_PC_REGNUM].addr (),
+		       buf, tdep->call_length);
 
 	  /* Extract the PC read from memory as a big-endian.  */
 	  pc = 0;
 	  for (i = 0; i < tdep->call_length; i++)
 	    pc = (pc << 8) | buf[i];
 
-          if (regnum == AVR_PC_REGNUM)
-            pc <<= 1;
+	  if (regnum == AVR_PC_REGNUM)
+	    pc <<= 1;
 
 	  return frame_unwind_got_constant (this_frame, regnum, pc);
-        }
+	}
 
       return frame_unwind_got_optimized (this_frame, regnum);
     }
@@ -1150,6 +1156,7 @@ avr_frame_prev_register (struct frame_in
 }
 
 static const struct frame_unwind avr_frame_unwind = {
+  "avr prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   avr_frame_this_id,
@@ -1159,7 +1166,7 @@ static const struct frame_unwind avr_fra
 };
 
 static CORE_ADDR
-avr_frame_base_address (struct frame_info *this_frame, void **this_cache)
+avr_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct avr_unwind_cache *info
     = avr_frame_unwind_cache (this_frame, this_cache);
@@ -1179,7 +1186,7 @@ static const struct frame_base avr_frame
    save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint.  */
 
 static struct frame_id
-avr_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
+avr_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
 {
   ULONGEST base;
 
@@ -1190,18 +1197,19 @@ avr_dummy_id (struct gdbarch *gdbarch, s
 /* When arguments must be pushed onto the stack, they go on in reverse
    order.  The below implements a FILO (stack) to do this.  */
 
-struct stack_item
+struct avr_stack_item
 {
   int len;
-  struct stack_item *prev;
+  struct avr_stack_item *prev;
   gdb_byte *data;
 };
 
-static struct stack_item *
-push_stack_item (struct stack_item *prev, const bfd_byte *contents, int len)
+static struct avr_stack_item *
+push_stack_item (struct avr_stack_item *prev, const bfd_byte *contents,
+		 int len)
 {
-  struct stack_item *si;
-  si = XNEW (struct stack_item);
+  struct avr_stack_item *si;
+  si = XNEW (struct avr_stack_item);
   si->data = (gdb_byte *) xmalloc (len);
   si->len = len;
   si->prev = prev;
@@ -1209,11 +1217,10 @@ push_stack_item (struct stack_item *prev
   return si;
 }
 
-static struct stack_item *pop_stack_item (struct stack_item *si);
-static struct stack_item *
-pop_stack_item (struct stack_item *si)
+static struct avr_stack_item *
+pop_stack_item (struct avr_stack_item *si)
 {
-  struct stack_item *dead = si;
+  struct avr_stack_item *dead = si;
   si = si->prev;
   xfree (dead->data);
   xfree (dead);
@@ -1261,28 +1268,29 @@ pop_stack_item (struct stack_item *si)
 
 static CORE_ADDR
 avr_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
-                     struct regcache *regcache, CORE_ADDR bp_addr,
-                     int nargs, struct value **args, CORE_ADDR sp,
+		     struct regcache *regcache, CORE_ADDR bp_addr,
+		     int nargs, struct value **args, CORE_ADDR sp,
 		     function_call_return_method return_method,
 		     CORE_ADDR struct_addr)
 {
   int i;
   gdb_byte buf[3];
-  int call_length = gdbarch_tdep (gdbarch)->call_length;
+  avr_gdbarch_tdep *tdep = gdbarch_tdep<avr_gdbarch_tdep> (gdbarch);
+  int call_length = tdep->call_length;
   CORE_ADDR return_pc = avr_convert_iaddr_to_raw (bp_addr);
   int regnum = AVR_ARGN_REGNUM;
-  struct stack_item *si = NULL;
+  struct avr_stack_item *si = NULL;
 
   if (return_method == return_method_struct)
     {
       regcache_cooked_write_unsigned
-        (regcache, regnum--, (struct_addr >> 8) & 0xff);
+	(regcache, regnum--, (struct_addr >> 8) & 0xff);
       regcache_cooked_write_unsigned
-        (regcache, regnum--, struct_addr & 0xff);
+	(regcache, regnum--, struct_addr & 0xff);
       /* SP being post decremented, we need to reserve one byte so that the
-         return address won't overwrite the result (or vice-versa).  */
+	 return address won't overwrite the result (or vice-versa).  */
       if (sp == struct_addr)
-        sp--;
+	sp--;
     }
 
   for (i = 0; i < nargs; i++)
@@ -1290,35 +1298,35 @@ avr_push_dummy_call (struct gdbarch *gdb
       int last_regnum;
       int j;
       struct value *arg = args[i];
-      struct type *type = check_typedef (value_type (arg));
-      const bfd_byte *contents = value_contents (arg);
-      int len = TYPE_LENGTH (type);
+      struct type *type = check_typedef (arg->type ());
+      const bfd_byte *contents = arg->contents ().data ();
+      int len = type->length ();
 
       /* Calculate the potential last register needed.
-         E.g. For length 2, registers regnum and regnum-1 (say 25 and 24)
-         shall be used. So, last needed register will be regnum-1(24).  */
+	 E.g. For length 2, registers regnum and regnum-1 (say 25 and 24)
+	 shall be used. So, last needed register will be regnum-1(24).  */
       last_regnum = regnum - (len + (len & 1)) + 1;
 
       /* If there are registers available, use them.  Once we start putting
-         stuff on the stack, all subsequent args go on stack.  */
+	 stuff on the stack, all subsequent args go on stack.  */
       if ((si == NULL) && (last_regnum >= AVR_LAST_ARG_REGNUM))
-        {
-          /* Skip a register for odd length args.  */
-          if (len & 1)
-            regnum--;
-
-          /* Write MSB of argument into register and subsequent bytes in
-             decreasing register numbers.  */
-          for (j = 0; j < len; j++)
-            regcache_cooked_write_unsigned
-              (regcache, regnum--, contents[len - j - 1]);
-        }
+	{
+	  /* Skip a register for odd length args.  */
+	  if (len & 1)
+	    regnum--;
+
+	  /* Write MSB of argument into register and subsequent bytes in
+	     decreasing register numbers.  */
+	  for (j = 0; j < len; j++)
+	    regcache_cooked_write_unsigned
+	      (regcache, regnum--, contents[len - j - 1]);
+	}
       /* No registers available, push the args onto the stack.  */
       else
-        {
-          /* From here on, we don't care about regnum.  */
-          si = push_stack_item (si, contents, len);
-        }
+	{
+	  /* From here on, we don't care about regnum.  */
+	  si = push_stack_item (si, contents, len);
+	}
     }
 
   /* Push args onto the stack.  */
@@ -1369,7 +1377,7 @@ avr_dwarf_reg_to_regnum (struct gdbarch
    This method maps DW_AT_address_class attributes to a
    type_instance_flag_value.  */
 
-static int
+static type_instance_flags
 avr_address_class_type_flags (int byte_size, int dwarf2_addr_class)
 {
   /* The value 1 of the DW_AT_address_class attribute corresponds to the
@@ -1386,7 +1394,8 @@ avr_address_class_type_flags (int byte_s
    Convert a type_instance_flag_value to an address space qualifier.  */
 
 static const char*
-avr_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
+avr_address_class_type_flags_to_name (struct gdbarch *gdbarch,
+				      type_instance_flags type_flags)
 {
   if (type_flags & AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH)
     return "flash";
@@ -1398,18 +1407,18 @@ avr_address_class_type_flags_to_name (st
 
    Convert an address space qualifier to a type_instance_flag_value.  */
 
-static int
+static bool
 avr_address_class_name_to_type_flags (struct gdbarch *gdbarch,
-                                      const char* name,
-                                      int *type_flags_ptr)
+				      const char* name,
+				      type_instance_flags *type_flags_ptr)
 {
   if (strcmp (name, "flash") == 0)
     {
       *type_flags_ptr = AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH;
-      return 1;
+      return true;
     }
   else
-    return 0;
+    return false;
 }
 
 /* Initialize the gdbarch structure for the AVR's.  */
@@ -1417,8 +1426,6 @@ avr_address_class_name_to_type_flags (st
 static struct gdbarch *
 avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
-  struct gdbarch *gdbarch;
-  struct gdbarch_tdep *tdep;
   struct gdbarch_list *best_arch;
   int call_length;
 
@@ -1450,22 +1457,26 @@ avr_gdbarch_init (struct gdbarch_info in
        best_arch != NULL;
        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
     {
-      if (gdbarch_tdep (best_arch->gdbarch)->call_length == call_length)
+      avr_gdbarch_tdep *tdep
+	= gdbarch_tdep<avr_gdbarch_tdep> (best_arch->gdbarch);
+
+      if (tdep->call_length == call_length)
 	return best_arch->gdbarch;
     }
 
   /* None found, create a new architecture from the information provided.  */
-  tdep = XCNEW (struct gdbarch_tdep);
-  gdbarch = gdbarch_alloc (&info, tdep);
+  gdbarch *gdbarch
+    = gdbarch_alloc (&info, gdbarch_tdep_up (new avr_gdbarch_tdep));
+  avr_gdbarch_tdep *tdep = gdbarch_tdep<avr_gdbarch_tdep> (gdbarch);
   
   tdep->call_length = call_length;
 
   /* Create a type for PC.  We can't use builtin types here, as they may not
      be defined.  */
-  tdep->void_type = arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
-			       "void");
+  type_allocator alloc (gdbarch);
+  tdep->void_type = alloc.new_type (TYPE_CODE_VOID, TARGET_CHAR_BIT, "void");
   tdep->func_void_type = make_function_type (tdep->void_type, NULL);
-  tdep->pc_type = arch_pointer_type (gdbarch, 4 * TARGET_CHAR_BIT, NULL,
+  tdep->pc_type = init_pointer_type (alloc, 4 * TARGET_CHAR_BIT, NULL,
 				     tdep->func_void_type);
 
   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
@@ -1499,7 +1510,8 @@ avr_gdbarch_init (struct gdbarch_info in
 
   set_gdbarch_num_pseudo_regs (gdbarch, AVR_NUM_PSEUDO_REGS);
   set_gdbarch_pseudo_register_read (gdbarch, avr_pseudo_register_read);
-  set_gdbarch_pseudo_register_write (gdbarch, avr_pseudo_register_write);
+  set_gdbarch_deprecated_pseudo_register_write (gdbarch,
+						avr_pseudo_register_write);
 
   set_gdbarch_return_value (gdbarch, avr_return_value);
 
@@ -1555,14 +1567,15 @@ avr_io_reg_read_command (const char *arg
   unsigned int val;
 
   /* Find out how many io registers the target has.  */
-  gdb::optional<gdb::byte_vector> buf
-    = target_read_alloc (current_top_target (), TARGET_OBJECT_AVR, "avr.io_reg");
+  std::optional<gdb::byte_vector> buf
+    = target_read_alloc (current_inferior ()->top_target (),
+			 TARGET_OBJECT_AVR, "avr.io_reg");
 
   if (!buf)
     {
-      fprintf_unfiltered (gdb_stderr,
-			  _("ERR: info io_registers NOT supported "
-			    "by current target\n"));
+      gdb_printf (gdb_stderr,
+		  _("ERR: info io_registers NOT supported "
+		    "by current target\n"));
       return;
     }
 
@@ -1570,14 +1583,12 @@ avr_io_reg_read_command (const char *arg
 
   if (sscanf (bufstr, "%x", &nreg) != 1)
     {
-      fprintf_unfiltered (gdb_stderr,
-			  _("Error fetching number of io registers\n"));
+      gdb_printf (gdb_stderr,
+		  _("Error fetching number of io registers\n"));
       return;
     }
 
-  reinitialize_more_filter ();
-
-  printf_unfiltered (_("Target has %u io registers:\n\n"), nreg);
+  gdb_printf (_("Target has %u io registers:\n\n"), nreg);
 
   /* only fetch up to 8 registers at a time to keep the buffer small */
   int step = 8;
@@ -1587,25 +1598,26 @@ avr_io_reg_read_command (const char *arg
       /* how many registers this round? */
       int j = step;
       if ((i+j) >= nreg)
-        j = nreg - i;           /* last block is less than 8 registers */
+	j = nreg - i;           /* last block is less than 8 registers */
 
       snprintf (query, sizeof (query) - 1, "avr.io_reg:%x,%x", i, j);
-      buf = target_read_alloc (current_top_target (), TARGET_OBJECT_AVR, query);
+      buf = target_read_alloc (current_inferior ()->top_target (),
+			       TARGET_OBJECT_AVR, query);
 
       if (!buf)
-        {
-          fprintf_unfiltered (gdb_stderr,
-			      _("ERR: error reading avr.io_reg:%x,%x\n"),
-			      i, j);
-          return;
-        }
+	{
+	  gdb_printf (gdb_stderr,
+		      _("ERR: error reading avr.io_reg:%x,%x\n"),
+		      i, j);
+	  return;
+	}
 
       const char *p = (const char *) buf->data ();
       for (int k = i; k < (i + j); k++)
 	{
 	  if (sscanf (p, "%[^,],%x;", query, &val) == 2)
 	    {
-	      printf_filtered ("[%02x] %-15s : %02x\n", k, query, val);
+	      gdb_printf ("[%02x] %-15s : %02x\n", k, query, val);
 	      while ((*p != ';') && (*p != '\0'))
 		p++;
 	      p++;		/* skip over ';' */
@@ -1616,10 +1628,11 @@ avr_io_reg_read_command (const char *arg
     }
 }
 
+void _initialize_avr_tdep ();
 void
-_initialize_avr_tdep (void)
+_initialize_avr_tdep ()
 {
-  register_gdbarch_init (bfd_arch_avr, avr_gdbarch_init);
+  gdbarch_register (bfd_arch_avr, avr_gdbarch_init);
 
   /* Add a new command to allow the user to query the avr remote target for
      the values of the io space registers in a saner way than just using
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax_cxx_compile_stdcxx.m4 ./gdb/ax_cxx_compile_stdcxx.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax_cxx_compile_stdcxx.m4	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/ax_cxx_compile_stdcxx.m4	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2019 Free Software Foundation, Inc.
+# Copyright (c) 2016-2024 Free Software Foundation, Inc.
 #
 # Originally based on the AX_CXX_COMPILE_STDCXX macro found at the url
 # below.
@@ -19,13 +19,13 @@
 #
 #   Check for baseline language coverage in the compiler for the specified
 #   version of the C++ standard.  If necessary, add switches to CXX and
-#   CXXCPP to enable support.  VERSION may be '11' (for the C++11 standard)
-#   or '14' (for the C++14 standard).
+#   CXXCPP to enable support.  VERSION may be '11', '14', '17', or '20' for
+#   the respective C++ standard version.
 #
 #   The second argument, if specified, indicates whether you insist on an
 #   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
 #   -std=c++11).  If neither is specified, you get whatever works, with
-#   preference for an extended mode.
+#   preference for no added switch, and then for an extended mode.
 #
 #   The third argument, if specified 'mandatory' or if left unspecified,
 #   indicates that baseline support for the specified C++ standard is
@@ -42,14 +42,17 @@
 #   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
 #   Copyright (c) 2015 Paul Norman <penorman@mac.com>
 #   Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
-#   Copyright (c) 2016 Krzesimir Nowak <qdlacz@gmail.com>
+#   Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
+#   Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
+#   Copyright (c) 2020 Jason Merrill <jason@redhat.com>
+#   Copyright (c) 2021 JÃ¶rn Heusipp <osmanx@problemloesungsmaschine.de>
 #
 #   Copying and distribution of this file, with or without modification, are
 #   permitted in any medium without royalty provided the copyright notice
 #   and this notice are preserved.  This file is offered as-is, without any
 #   warranty.
 
-#serial 8
+#serial 18
 
 dnl  This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
 dnl  (serial version number 13).
@@ -58,6 +61,7 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
   m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
         [$1], [14], [ax_cxx_compile_alternatives="14 1y"],
         [$1], [17], [ax_cxx_compile_alternatives="17 1z"],
+        [$1], [20], [ax_cxx_compile_alternatives="20"],
         [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
   m4_if([$2], [], [],
         [$2], [ext], [],
@@ -70,14 +74,16 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
   AC_LANG_PUSH([C++])dnl
   CXX_DIALECT=""
   ac_success=no
-  AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
-  ax_cv_cxx_compile_cxx$1,
-  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
-    [ax_cv_cxx_compile_cxx$1=yes],
-    [ax_cv_cxx_compile_cxx$1=no])])
-  if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
-    ac_success=yes
-  fi
+
+  m4_if([$2], [], [dnl
+    AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
+		   ax_cv_cxx_compile_cxx$1,
+      [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+        [ax_cv_cxx_compile_cxx$1=yes],
+        [ax_cv_cxx_compile_cxx$1=no])])
+    if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
+      ac_success=yes
+    fi])
 
   m4_if([$2], [noext], [], [dnl
   if test x$ac_success = xno; then
@@ -94,6 +100,10 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
          CXX="$ac_save_CXX"])
       if eval test x\$$cachevar = xyes; then
         CXX_DIALECT="$switch"
+        CXX="$CXX $switch"
+        if test -n "$CXXCPP" ; then
+          CXXCPP="$CXXCPP $switch"
+        fi
         ac_success=yes
         break
       fi
@@ -105,9 +115,18 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
     dnl HP's aCC needs +std=c++11 according to:
     dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
     dnl Cray's crayCC needs "-h std=c++11"
+    dnl MSVC needs -std:c++NN for C++17 and later (default is C++14)
     for alternative in ${ax_cxx_compile_alternatives}; do
-      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
-        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}" MSVC; do
+        if test x"$switch" = xMSVC; then
+          dnl AS_TR_SH maps both `:` and `=` to `_` so -std:c++17 would collide
+          dnl with -std=c++17.  We suffix the cache variable name with _MSVC to
+          dnl avoid this.
+          switch=-std:c++${alternative}
+          cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_${switch}_MSVC])
+        else
+          cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+        fi
         AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
                        $cachevar,
           [ac_save_CXX="$CXX"
@@ -118,6 +137,10 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
            CXX="$ac_save_CXX"])
         if eval test x\$$cachevar = xyes; then
           CXX_DIALECT="$switch"
+          CXX="$CXX $switch"
+          if test -n "$CXXCPP" ; then
+            CXXCPP="$CXXCPP $switch"
+          fi
           ac_success=yes
           break
         fi
@@ -152,7 +175,6 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbo
   _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
 )
 
-
 dnl  Test body for checking C++14 support
 
 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
@@ -160,12 +182,24 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbo
   _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
 )
 
+dnl  Test body for checking C++17 support
+
 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
   _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
   _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
   _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
 )
 
+dnl  Test body for checking C++20 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20],
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_20
+)
+
+
 dnl  Tests for new features in C++11
 
 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
@@ -177,7 +211,11 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbo
 
 #error "This is not a C++ compiler"
 
-#elif __cplusplus < 201103L
+// MSVC always sets __cplusplus to 199711L in older versions; newer versions
+// only set it correctly if /Zc:__cplusplus is specified as well as a
+// /std:c++NN switch:
+// https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
+#elif __cplusplus < 201103L && !defined _MSC_VER
 
 #error "This is not a C++11 compiler"
 
@@ -202,11 +240,13 @@ namespace cxx11
 
     struct Base
     {
+      virtual ~Base() {}
       virtual void f() {}
     };
 
     struct Derived : public Base
     {
+      virtual ~Derived() override {}
       virtual void f() override {}
     };
 
@@ -466,7 +506,7 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbo
 
 #error "This is not a C++ compiler"
 
-#elif __cplusplus < 201402L
+#elif __cplusplus < 201402L && !defined _MSC_VER
 
 #error "This is not a C++14 compiler"
 
@@ -590,20 +630,12 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbo
 
 #error "This is not a C++ compiler"
 
-#elif __cplusplus <= 201402L
+#elif __cplusplus < 201703L && !defined _MSC_VER
 
 #error "This is not a C++17 compiler"
 
 #else
 
-#if defined(__clang__)
-  #define REALLY_CLANG
-#else
-  #if defined(__GNUC__)
-    #define REALLY_GCC
-  #endif
-#endif
-
 #include <initializer_list>
 #include <utility>
 #include <type_traits>
@@ -611,16 +643,12 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbo
 namespace cxx17
 {
 
-#if !defined(REALLY_CLANG)
   namespace test_constexpr_lambdas
   {
 
-    // TODO: test it with clang++ from git
-
     constexpr int foo = [](){return 42;}();
 
   }
-#endif // !defined(REALLY_CLANG)
 
   namespace test::nested_namespace::definitions
   {
@@ -855,12 +883,9 @@ namespace cxx17
 
   }
 
-#if !defined(REALLY_CLANG)
   namespace test_template_argument_deduction_for_class_templates
   {
 
-    // TODO: test it with clang++ from git
-
     template <typename T1, typename T2>
     struct pair
     {
@@ -879,7 +904,6 @@ namespace cxx17
     }
 
   }
-#endif // !defined(REALLY_CLANG)
 
   namespace test_non_type_auto_template_parameters
   {
@@ -893,12 +917,9 @@ namespace cxx17
 
   }
 
-#if !defined(REALLY_CLANG)
   namespace test_structured_bindings
   {
 
-    // TODO: test it with clang++ from git
-
     int arr[2] = { 1, 2 };
     std::pair<int, int> pr = { 1, 2 };
 
@@ -930,14 +951,10 @@ namespace cxx17
     const auto [ x3, y3 ] = f3();
 
   }
-#endif // !defined(REALLY_CLANG)
 
-#if !defined(REALLY_CLANG)
   namespace test_exception_spec_type_system
   {
 
-    // TODO: test it with clang++ from git
-
     struct Good {};
     struct Bad {};
 
@@ -955,7 +972,6 @@ namespace cxx17
     static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
 
   }
-#endif // !defined(REALLY_CLANG)
 
   namespace test_inline_variables
   {
@@ -980,6 +996,36 @@ namespace cxx17
 
 }  // namespace cxx17
 
-#endif  // __cplusplus <= 201402L
+#endif  // __cplusplus < 201703L && !defined _MSC_VER
+
+]])
+
+
+dnl  Tests for new features in C++20
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 202002L && !defined _MSC_VER
+
+#error "This is not a C++20 compiler"
+
+#else
+
+#include <version>
+
+namespace cxx20
+{
+
+// As C++20 supports feature test macros in the standard, there is no
+// immediate need to actually test for feature availability on the
+// Autoconf side.
+
+}  // namespace cxx20
+
+#endif  // __cplusplus < 202002L && !defined _MSC_VER
 
 ]])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax-gdb.c ./gdb/ax-gdb.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax-gdb.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/ax-gdb.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB-specific functions for operating on agent expressions.
 
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -45,6 +45,7 @@
 #include "typeprint.h"
 #include "valprint.h"
 #include "c-lang.h"
+#include "expop.h"
 
 #include "gdbsupport/format.h"
 
@@ -69,14 +70,9 @@
 /* Prototypes for local functions.  */
 
 /* There's a standard order to the arguments of these functions:
-   union exp_element ** --- pointer into expression
    struct agent_expr * --- agent expression buffer to generate code into
    struct axs_value * --- describes value left on top of stack  */
 
-static struct value *const_var_ref (struct symbol *var);
-static struct value *const_expr (union exp_element **pc);
-static struct value *maybe_const_expr (union exp_element **pc);
-
 static void gen_traced_pop (struct agent_expr *, struct axs_value *);
 
 static void gen_sign_extend (struct agent_expr *, struct type *);
@@ -147,117 +143,13 @@ static void gen_struct_ref (struct agent
 			    const char *operand_name);
 static void gen_static_field (struct agent_expr *ax, struct axs_value *value,
 			      struct type *type, int fieldno);
-static void gen_repeat (struct expression *exp, union exp_element **pc,
-			struct agent_expr *ax, struct axs_value *value);
-static void gen_sizeof (struct expression *exp, union exp_element **pc,
-			struct agent_expr *ax, struct axs_value *value,
-			struct type *size_type);
 static void gen_expr_binop_rest (struct expression *exp,
-				 enum exp_opcode op, union exp_element **pc,
+				 enum exp_opcode op,
 				 struct agent_expr *ax,
 				 struct axs_value *value,
 				 struct axs_value *value1,
 				 struct axs_value *value2);
-
-
-/* Detecting constant expressions.  */
-
-/* If the variable reference at *PC is a constant, return its value.
-   Otherwise, return zero.
-
-   Hey, Wally!  How can a variable reference be a constant?
-
-   Well, Beav, this function really handles the OP_VAR_VALUE operator,
-   not specifically variable references.  GDB uses OP_VAR_VALUE to
-   refer to any kind of symbolic reference: function names, enum
-   elements, and goto labels are all handled through the OP_VAR_VALUE
-   operator, even though they're constants.  It makes sense given the
-   situation.
-
-   Gee, Wally, don'cha wonder sometimes if data representations that
-   subvert commonly accepted definitions of terms in favor of heavily
-   context-specific interpretations are really just a tool of the
-   programming hegemony to preserve their power and exclude the
-   proletariat?  */
-
-static struct value *
-const_var_ref (struct symbol *var)
-{
-  struct type *type = SYMBOL_TYPE (var);
-
-  switch (SYMBOL_CLASS (var))
-    {
-    case LOC_CONST:
-      return value_from_longest (type, (LONGEST) SYMBOL_VALUE (var));
-
-    case LOC_LABEL:
-      return value_from_pointer (type, (CORE_ADDR) SYMBOL_VALUE_ADDRESS (var));
 
-    default:
-      return 0;
-    }
-}
-
-
-/* If the expression starting at *PC has a constant value, return it.
-   Otherwise, return zero.  If we return a value, then *PC will be
-   advanced to the end of it.  If we return zero, *PC could be
-   anywhere.  */
-static struct value *
-const_expr (union exp_element **pc)
-{
-  enum exp_opcode op = (*pc)->opcode;
-  struct value *v1;
-
-  switch (op)
-    {
-    case OP_LONG:
-      {
-	struct type *type = (*pc)[1].type;
-	LONGEST k = (*pc)[2].longconst;
-
-	(*pc) += 4;
-	return value_from_longest (type, k);
-      }
-
-    case OP_VAR_VALUE:
-      {
-	struct value *v = const_var_ref ((*pc)[2].symbol);
-
-	(*pc) += 4;
-	return v;
-      }
-
-      /* We could add more operators in here.  */
-
-    case UNOP_NEG:
-      (*pc)++;
-      v1 = const_expr (pc);
-      if (v1)
-	return value_neg (v1);
-      else
-	return 0;
-
-    default:
-      return 0;
-    }
-}
-
-
-/* Like const_expr, but guarantee also that *PC is undisturbed if the
-   expression is not constant.  */
-static struct value *
-maybe_const_expr (union exp_element **pc)
-{
-  union exp_element *tentative_pc = *pc;
-  struct value *v = const_expr (&tentative_pc);
-
-  /* If we got a value, then update the real PC.  */
-  if (v)
-    *pc = tentative_pc;
-
-  return v;
-}
 
 
 /* Generating bytecode from GDB expressions: general assumptions */
@@ -316,9 +208,9 @@ gen_trace_static_fields (struct agent_ex
 
   type = check_typedef (type);
 
-  for (i = TYPE_NFIELDS (type) - 1; i >= nbases; i--)
+  for (i = type->num_fields () - 1; i >= nbases; i--)
     {
-      if (field_is_static (&TYPE_FIELD (type, i)))
+      if (type->field (i).is_static ())
 	{
 	  gen_static_field (ax, &value, type, i);
 	  if (value.optimized_out)
@@ -327,9 +219,9 @@ gen_trace_static_fields (struct agent_ex
 	    {
 	    case axs_lvalue_memory:
 	      {
-	        /* Initialize the TYPE_LENGTH if it is a typedef.  */
-	        check_typedef (value.type);
-		ax_const_l (ax, TYPE_LENGTH (value.type));
+		/* Initialize the TYPE_LENGTH if it is a typedef.  */
+		check_typedef (value.type);
+		ax_const_l (ax, value.type->length ());
 		ax_simple (ax, aop_trace);
 	      }
 	      break;
@@ -362,8 +254,8 @@ gen_traced_pop (struct agent_expr *ax, s
 {
   int string_trace = 0;
   if (ax->trace_string
-      && TYPE_CODE (value->type) == TYPE_CODE_PTR
-      && c_textual_element_type (check_typedef (TYPE_TARGET_TYPE (value->type)),
+      && value->type->code () == TYPE_CODE_PTR
+      && c_textual_element_type (check_typedef (value->type->target_type ()),
 				 's'))
     string_trace = 1;
 
@@ -396,11 +288,11 @@ gen_traced_pop (struct agent_expr *ax, s
 	  else
 	    {
 	      /* There's no point in trying to use a trace_quick bytecode
-	         here, since "trace_quick SIZE pop" is three bytes, whereas
-	         "const8 SIZE trace" is also three bytes, does the same
-	         thing, and the simplest code which generates that will also
-	         work correctly for objects with large sizes.  */
-	      ax_const_l (ax, TYPE_LENGTH (value->type));
+		 here, since "trace_quick SIZE pop" is three bytes, whereas
+		 "const8 SIZE trace" is also three bytes, does the same
+		 thing, and the simplest code which generates that will also
+		 work correctly for objects with large sizes.  */
+	      ax_const_l (ax, value->type->length ());
 	      ax_simple (ax, aop_trace);
 	    }
 	}
@@ -429,8 +321,8 @@ gen_traced_pop (struct agent_expr *ax, s
 
   /* To trace C++ classes with static fields stored elsewhere.  */
   if (ax->tracing
-      && (TYPE_CODE (value->type) == TYPE_CODE_STRUCT
-	  || TYPE_CODE (value->type) == TYPE_CODE_UNION))
+      && (value->type->code () == TYPE_CODE_STRUCT
+	  || value->type->code () == TYPE_CODE_UNION))
     gen_trace_static_fields (ax, value->type);
 }
 
@@ -444,8 +336,8 @@ static void
 gen_sign_extend (struct agent_expr *ax, struct type *type)
 {
   /* Do we need to sign-extend this?  */
-  if (!TYPE_UNSIGNED (type))
-    ax_ext (ax, TYPE_LENGTH (type) * TARGET_CHAR_BIT);
+  if (!type->is_unsigned ())
+    ax_ext (ax, type->length () * TARGET_CHAR_BIT);
 }
 
 
@@ -455,12 +347,22 @@ gen_sign_extend (struct agent_expr *ax,
 static void
 gen_extend (struct agent_expr *ax, struct type *type)
 {
-  int bits = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
+  int bits = type->length () * TARGET_CHAR_BIT;
 
   /* I just had to.  */
-  ((TYPE_UNSIGNED (type) ? ax_zero_ext : ax_ext) (ax, bits));
+  ((type->is_unsigned () ? ax_zero_ext : ax_ext) (ax, bits));
 }
 
+/* A helper that returns the target type if TYPE is a range type, or
+   otherwise just returns TYPE.  */
+
+static struct type *
+strip_range_type (struct type *type)
+{
+  if (type->code () == TYPE_CODE_RANGE)
+    return type->target_type ();
+  return type;
+}
 
 /* Assume that the top of the stack contains a value of type "pointer
    to TYPE"; generate code to fetch its value.  Note that TYPE is the
@@ -471,13 +373,12 @@ gen_fetch (struct agent_expr *ax, struct
   if (ax->tracing)
     {
       /* Record the area of memory we're about to fetch.  */
-      ax_trace_quick (ax, TYPE_LENGTH (type));
+      ax_trace_quick (ax, type->length ());
     }
 
-  if (TYPE_CODE (type) == TYPE_CODE_RANGE)
-    type = TYPE_TARGET_TYPE (type);
+  type = strip_range_type (type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_PTR:
     case TYPE_CODE_REF:
@@ -487,8 +388,8 @@ gen_fetch (struct agent_expr *ax, struct
     case TYPE_CODE_CHAR:
     case TYPE_CODE_BOOL:
       /* It's a scalar value, so we know how to dereference it.  How
-         many bytes long is it?  */
-      switch (TYPE_LENGTH (type))
+	 many bytes long is it?  */
+      switch (type->length ())
 	{
 	case 8 / TARGET_CHAR_BIT:
 	  ax_simple (ax, aop_ref8);
@@ -508,8 +409,7 @@ gen_fetch (struct agent_expr *ax, struct
 	     implementing something we should be (this code's fault).
 	     In any case, it's a bug the user shouldn't see.  */
 	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("gen_fetch: strange size"));
+	  internal_error (_("gen_fetch: strange size"));
 	}
 
       gen_sign_extend (ax, type);
@@ -520,7 +420,7 @@ gen_fetch (struct agent_expr *ax, struct
 	 type.  Error out and give callers a chance to handle the failure
 	 gracefully.  */
       error (_("gen_fetch: Unsupported type code `%s'."),
-	     TYPE_NAME (type));
+	     type->name ());
     }
 }
 
@@ -607,7 +507,7 @@ gen_offset (struct agent_expr *ax, int o
 static void
 gen_sym_offset (struct agent_expr *ax, struct symbol *var)
 {
-  gen_offset (ax, SYMBOL_VALUE (var));
+  gen_offset (ax, var->value_longest ());
 }
 
 
@@ -618,37 +518,34 @@ static void
 gen_var_ref (struct agent_expr *ax, struct axs_value *value, struct symbol *var)
 {
   /* Dereference any typedefs.  */
-  value->type = check_typedef (SYMBOL_TYPE (var));
+  value->type = check_typedef (var->type ());
   value->optimized_out = 0;
 
-  if (SYMBOL_COMPUTED_OPS (var) != NULL)
-    {
-      SYMBOL_COMPUTED_OPS (var)->tracepoint_var_ref (var, ax, value);
-      return;
-    }
+  if (const symbol_computed_ops *computed_ops = var->computed_ops ();
+      computed_ops != nullptr)
+    return computed_ops->tracepoint_var_ref (var, ax, value);
 
   /* I'm imitating the code in read_var_value.  */
-  switch (SYMBOL_CLASS (var))
+  switch (var->aclass ())
     {
     case LOC_CONST:		/* A constant, like an enum value.  */
-      ax_const_l (ax, (LONGEST) SYMBOL_VALUE (var));
+      ax_const_l (ax, (LONGEST) var->value_longest ());
       value->kind = axs_rvalue;
       break;
 
     case LOC_LABEL:		/* A goto label, being used as a value.  */
-      ax_const_l (ax, (LONGEST) SYMBOL_VALUE_ADDRESS (var));
+      ax_const_l (ax, (LONGEST) var->value_address ());
       value->kind = axs_rvalue;
       break;
 
     case LOC_CONST_BYTES:
-      internal_error (__FILE__, __LINE__,
-		      _("gen_var_ref: LOC_CONST_BYTES "
+      internal_error (_("gen_var_ref: LOC_CONST_BYTES "
 			"symbols are not supported"));
 
       /* Variable at a fixed location in memory.  Easy.  */
     case LOC_STATIC:
       /* Push the address of the variable.  */
-      ax_const_l (ax, SYMBOL_VALUE_ADDRESS (var));
+      ax_const_l (ax, var->value_address ());
       value->kind = axs_lvalue_memory;
       break;
 
@@ -679,26 +576,24 @@ gen_var_ref (struct agent_expr *ax, stru
       break;
 
     case LOC_BLOCK:
-      ax_const_l (ax, BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var)));
+      ax_const_l (ax, var->value_block ()->entry_pc ());
       value->kind = axs_rvalue;
       break;
 
     case LOC_REGISTER:
       /* Don't generate any code at all; in the process of treating
-         this as an lvalue or rvalue, the caller will generate the
-         right code.  */
+	 this as an lvalue or rvalue, the caller will generate the
+	 right code.  */
       value->kind = axs_lvalue_register;
-      value->u.reg
-	= SYMBOL_REGISTER_OPS (var)->register_number (var, ax->gdbarch);
+      value->u.reg = var->register_ops ()->register_number (var, ax->gdbarch);
       break;
 
       /* A lot like LOC_REF_ARG, but the pointer lives directly in a
-         register, not on the stack.  Simpler than LOC_REGISTER
-         because it's just like any other case where the thing
+	 register, not on the stack.  Simpler than LOC_REGISTER
+	 because it's just like any other case where the thing
 	 has a real address.  */
     case LOC_REGPARM_ADDR:
-      ax_reg (ax,
-	      SYMBOL_REGISTER_OPS (var)->register_number (var, ax->gdbarch));
+      ax_reg (ax, var->register_ops ()->register_number (var, ax->gdbarch));
       value->kind = axs_lvalue_memory;
       break;
 
@@ -711,13 +606,13 @@ gen_var_ref (struct agent_expr *ax, stru
 	  error (_("Couldn't resolve symbol `%s'."), var->print_name ());
 
 	/* Push the address of the variable.  */
-	ax_const_l (ax, BMSYMBOL_VALUE_ADDRESS (msym));
+	ax_const_l (ax, msym.value_address ());
 	value->kind = axs_lvalue_memory;
       }
       break;
 
     case LOC_COMPUTED:
-      gdb_assert_not_reached (_("LOC_COMPUTED variable missing a method"));
+      gdb_assert_not_reached ("LOC_COMPUTED variable missing a method");
 
     case LOC_OPTIMIZED_OUT:
       /* Flag this, but don't say anything; leave it up to callers to
@@ -775,10 +670,10 @@ require_rvalue (struct agent_expr *ax, s
   /* Only deal with scalars, structs and such may be too large
      to fit in a stack entry.  */
   value->type = check_typedef (value->type);
-  if (TYPE_CODE (value->type) == TYPE_CODE_ARRAY
-      || TYPE_CODE (value->type) == TYPE_CODE_STRUCT
-      || TYPE_CODE (value->type) == TYPE_CODE_UNION
-      || TYPE_CODE (value->type) == TYPE_CODE_FUNC)
+  if (value->type->code () == TYPE_CODE_ARRAY
+      || value->type->code () == TYPE_CODE_STRUCT
+      || value->type->code () == TYPE_CODE_UNION
+      || value->type->code () == TYPE_CODE_FUNC)
     error (_("Value not scalar: cannot be an rvalue."));
 
   switch (value->kind)
@@ -794,10 +689,10 @@ require_rvalue (struct agent_expr *ax, s
 
     case axs_lvalue_register:
       /* There's nothing on the stack, but value->u.reg is the
-         register number containing the value.
+	 register number containing the value.
 
-         When we add floating-point support, this is going to have to
-         change.  What about SPARC register pairs, for example?  */
+	 When we add floating-point support, this is going to have to
+	 change.  What about SPARC register pairs, for example?  */
       ax_reg (ax, value->u.reg);
       gen_extend (ax, value->type);
       break;
@@ -831,7 +726,7 @@ gen_usual_unary (struct agent_expr *ax,
      the stack.  Should we tweak the type?  */
 
   /* Some types require special handling.  */
-  switch (TYPE_CODE (value->type))
+  switch (value->type->code ())
     {
       /* Functions get converted to a pointer to the function.  */
     case TYPE_CODE_FUNC:
@@ -840,10 +735,10 @@ gen_usual_unary (struct agent_expr *ax,
       break;
 
       /* Arrays get converted to a pointer to their first element, and
-         are no longer an lvalue.  */
+	 are no longer an lvalue.  */
     case TYPE_CODE_ARRAY:
       {
-	struct type *elements = TYPE_TARGET_TYPE (value->type);
+	struct type *elements = value->type->target_type ();
 
 	value->type = lookup_pointer_type (elements);
 	value->kind = axs_rvalue;
@@ -853,7 +748,7 @@ gen_usual_unary (struct agent_expr *ax,
       break;
 
       /* Don't try to convert structures and unions to rvalues.  Let the
-         consumer signal an error.  */
+	 consumer signal an error.  */
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
       return;
@@ -869,10 +764,10 @@ gen_usual_unary (struct agent_expr *ax,
 static int
 type_wider_than (struct type *type1, struct type *type2)
 {
-  return (TYPE_LENGTH (type1) > TYPE_LENGTH (type2)
-	  || (TYPE_LENGTH (type1) == TYPE_LENGTH (type2)
-	      && TYPE_UNSIGNED (type1)
-	      && !TYPE_UNSIGNED (type2)));
+  return (type1->length () > type2->length ()
+	  || (type1->length () == type2->length ()
+	      && type1->is_unsigned ()
+	      && !type2->is_unsigned ()));
 }
 
 
@@ -892,22 +787,22 @@ gen_conversion (struct agent_expr *ax, s
 
   /* If we're converting to a narrower type, then we need to clear out
      the upper bits.  */
-  if (TYPE_LENGTH (to) < TYPE_LENGTH (from))
+  if (to->length () < from->length ())
     gen_extend (ax, to);
 
   /* If the two values have equal width, but different signednesses,
      then we need to extend.  */
-  else if (TYPE_LENGTH (to) == TYPE_LENGTH (from))
+  else if (to->length () == from->length ())
     {
-      if (TYPE_UNSIGNED (from) != TYPE_UNSIGNED (to))
+      if (from->is_unsigned () != to->is_unsigned ())
 	gen_extend (ax, to);
     }
 
   /* If we're converting to a wider type, and becoming unsigned, then
      we need to zero out any possible sign bits.  */
-  else if (TYPE_LENGTH (to) > TYPE_LENGTH (from))
+  else if (to->length () > from->length ())
     {
-      if (TYPE_UNSIGNED (to))
+      if (to->is_unsigned ())
 	gen_extend (ax, to);
     }
 }
@@ -919,7 +814,6 @@ static int
 is_nontrivial_conversion (struct type *from, struct type *to)
 {
   agent_expr_up ax (new agent_expr (NULL, 0));
-  int nontrivial;
 
   /* Actually generate the code, and see if anything came out.  At the
      moment, it would be trivial to replicate the code in
@@ -928,8 +822,7 @@ is_nontrivial_conversion (struct type *f
      way allows this function to be independent of the logic in
      gen_conversion.  */
   gen_conversion (ax.get (), from, to);
-  nontrivial = ax->len > 0;
-  return nontrivial;
+  return !ax->buf.empty ();
 }
 
 
@@ -942,28 +835,31 @@ static void
 gen_usual_arithmetic (struct agent_expr *ax, struct axs_value *value1,
 		      struct axs_value *value2)
 {
+  struct type *type1 = strip_range_type (value1->type);
+  struct type *type2 = strip_range_type (value2->type);
+
   /* Do the usual binary conversions.  */
-  if (TYPE_CODE (value1->type) == TYPE_CODE_INT
-      && TYPE_CODE (value2->type) == TYPE_CODE_INT)
+  if (type1->code () == TYPE_CODE_INT
+      && type2->code () == TYPE_CODE_INT)
     {
       /* The ANSI integral promotions seem to work this way: Order the
-         integer types by size, and then by signedness: an n-bit
-         unsigned type is considered "wider" than an n-bit signed
-         type.  Promote to the "wider" of the two types, and always
-         promote at least to int.  */
+	 integer types by size, and then by signedness: an n-bit
+	 unsigned type is considered "wider" than an n-bit signed
+	 type.  Promote to the "wider" of the two types, and always
+	 promote at least to int.  */
       struct type *target = max_type (builtin_type (ax->gdbarch)->builtin_int,
-				      max_type (value1->type, value2->type));
+				      max_type (type1, type2));
 
       /* Deal with value2, on the top of the stack.  */
-      gen_conversion (ax, value2->type, target);
+      gen_conversion (ax, type2, target);
 
       /* Deal with value1, not on the top of the stack.  Don't
-         generate the `swap' instructions if we're not actually going
-         to do anything.  */
-      if (is_nontrivial_conversion (value1->type, target))
+	 generate the `swap' instructions if we're not actually going
+	 to do anything.  */
+      if (is_nontrivial_conversion (type1, target))
 	{
 	  ax_simple (ax, aop_swap);
-	  gen_conversion (ax, value1->type, target);
+	  gen_conversion (ax, type1, target);
 	  ax_simple (ax, aop_swap);
 	}
 
@@ -1002,14 +898,15 @@ gen_cast (struct agent_expr *ax, struct
   require_rvalue (ax, value);
   /* Dereference typedefs.  */
   type = check_typedef (type);
+  type = strip_range_type (type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_PTR:
     case TYPE_CODE_REF:
     case TYPE_CODE_RVALUE_REF:
       /* It's implementation-defined, and I'll bet this is what GCC
-         does.  */
+	 does.  */
       break;
 
     case TYPE_CODE_ARRAY:
@@ -1021,10 +918,10 @@ gen_cast (struct agent_expr *ax, struct
     case TYPE_CODE_ENUM:
     case TYPE_CODE_BOOL:
       /* We don't have to worry about the size of the value, because
-         all our integral values are fully sign-extended, and when
-         casting pointers we can do anything we like.  Is there any
-         way for us to know what GCC actually does with a cast like
-         this?  */
+	 all our integral values are fully sign-extended, and when
+	 casting pointers we can do anything we like.  Is there any
+	 way for us to know what GCC actually does with a cast like
+	 this?  */
       break;
 
     case TYPE_CODE_INT:
@@ -1033,9 +930,9 @@ gen_cast (struct agent_expr *ax, struct
 
     case TYPE_CODE_VOID:
       /* We could pop the value, and rely on everyone else to check
-         the type and notice that this value doesn't occupy a stack
-         slot.  But for now, leave the value on the stack, and
-         preserve the "value == stack element" assumption.  */
+	 the type and notice that this value doesn't occupy a stack
+	 slot.  But for now, leave the value on the stack, and
+	 preserve the "value == stack element" assumption.  */
       break;
 
     default:
@@ -1054,11 +951,11 @@ gen_cast (struct agent_expr *ax, struct
 static void
 gen_scale (struct agent_expr *ax, enum agent_op op, struct type *type)
 {
-  struct type *element = TYPE_TARGET_TYPE (type);
+  struct type *element = type->target_type ();
 
-  if (TYPE_LENGTH (element) != 1)
+  if (element->length () != 1)
     {
-      ax_const_l (ax, TYPE_LENGTH (element));
+      ax_const_l (ax, element->length ());
       ax_simple (ax, op);
     }
 }
@@ -1069,8 +966,8 @@ static void
 gen_ptradd (struct agent_expr *ax, struct axs_value *value,
 	    struct axs_value *value1, struct axs_value *value2)
 {
-  gdb_assert (pointer_type (value1->type));
-  gdb_assert (TYPE_CODE (value2->type) == TYPE_CODE_INT);
+  gdb_assert (value1->type->is_pointer_or_reference ());
+  gdb_assert (strip_range_type (value2->type)->code () == TYPE_CODE_INT);
 
   gen_scale (ax, aop_mul, value1->type);
   ax_simple (ax, aop_add);
@@ -1085,8 +982,8 @@ static void
 gen_ptrsub (struct agent_expr *ax, struct axs_value *value,
 	    struct axs_value *value1, struct axs_value *value2)
 {
-  gdb_assert (pointer_type (value1->type));
-  gdb_assert (TYPE_CODE (value2->type) == TYPE_CODE_INT);
+  gdb_assert (value1->type->is_pointer_or_reference ());
+  gdb_assert (strip_range_type (value2->type)->code () == TYPE_CODE_INT);
 
   gen_scale (ax, aop_mul, value1->type);
   ax_simple (ax, aop_sub);
@@ -1102,11 +999,11 @@ gen_ptrdiff (struct agent_expr *ax, stru
 	     struct axs_value *value1, struct axs_value *value2,
 	     struct type *result_type)
 {
-  gdb_assert (pointer_type (value1->type));
-  gdb_assert (pointer_type (value2->type));
+  gdb_assert (value1->type->is_pointer_or_reference ());
+  gdb_assert (value2->type->is_pointer_or_reference ());
 
-  if (TYPE_LENGTH (TYPE_TARGET_TYPE (value1->type))
-      != TYPE_LENGTH (TYPE_TARGET_TYPE (value2->type)))
+  if (value1->type->target_type ()->length ()
+      != value2->type->target_type ()->length ())
     error (_("\
 First argument of `-' is a pointer, but second argument is neither\n\
 an integer nor a pointer of the same type."));
@@ -1122,7 +1019,7 @@ gen_equal (struct agent_expr *ax, struct
 	   struct axs_value *value1, struct axs_value *value2,
 	   struct type *result_type)
 {
-  if (pointer_type (value1->type) || pointer_type (value2->type))
+  if (value1->type->is_pointer_or_reference () || value2->type->is_pointer_or_reference ())
     ax_simple (ax, aop_equal);
   else
     gen_binop (ax, value, value1, value2,
@@ -1136,7 +1033,7 @@ gen_less (struct agent_expr *ax, struct
 	  struct axs_value *value1, struct axs_value *value2,
 	  struct type *result_type)
 {
-  if (pointer_type (value1->type) || pointer_type (value2->type))
+  if (value1->type->is_pointer_or_reference () || value2->type->is_pointer_or_reference ())
     ax_simple (ax, aop_less_unsigned);
   else
     gen_binop (ax, value, value1, value2,
@@ -1158,15 +1055,15 @@ gen_binop (struct agent_expr *ax, struct
 	   int may_carry, const char *name)
 {
   /* We only handle INT op INT.  */
-  if ((TYPE_CODE (value1->type) != TYPE_CODE_INT)
-      || (TYPE_CODE (value2->type) != TYPE_CODE_INT))
+  struct type *type1 = strip_range_type (value1->type);
+  if ((type1->code () != TYPE_CODE_INT)
+      || (strip_range_type (value2->type)->code () != TYPE_CODE_INT))
     error (_("Invalid combination of types in %s."), name);
 
-  ax_simple (ax,
-	     TYPE_UNSIGNED (value1->type) ? op_unsigned : op);
+  ax_simple (ax, type1->is_unsigned () ? op_unsigned : op);
   if (may_carry)
-    gen_extend (ax, value1->type);	/* catch overflow */
-  value->type = value1->type;
+    gen_extend (ax, type1);	/* catch overflow */
+  value->type = type1;
   value->kind = axs_rvalue;
 }
 
@@ -1175,8 +1072,9 @@ static void
 gen_logical_not (struct agent_expr *ax, struct axs_value *value,
 		 struct type *result_type)
 {
-  if (TYPE_CODE (value->type) != TYPE_CODE_INT
-      && TYPE_CODE (value->type) != TYPE_CODE_PTR)
+  struct type *type = strip_range_type (value->type);
+  if (type->code () != TYPE_CODE_INT
+      && type->code () != TYPE_CODE_PTR)
     error (_("Invalid type of operand to `!'."));
 
   ax_simple (ax, aop_log_not);
@@ -1187,11 +1085,12 @@ gen_logical_not (struct agent_expr *ax,
 static void
 gen_complement (struct agent_expr *ax, struct axs_value *value)
 {
-  if (TYPE_CODE (value->type) != TYPE_CODE_INT)
+  struct type *type = strip_range_type (value->type);
+  if (type->code () != TYPE_CODE_INT)
     error (_("Invalid type of operand to `~'."));
 
   ax_simple (ax, aop_bit_not);
-  gen_extend (ax, value->type);
+  gen_extend (ax, type);
 }
 
 
@@ -1204,19 +1103,18 @@ gen_deref (struct axs_value *value)
 {
   /* The caller should check the type, because several operators use
      this, and we don't know what error message to generate.  */
-  if (!pointer_type (value->type))
-    internal_error (__FILE__, __LINE__,
-		    _("gen_deref: expected a pointer"));
+  if (!value->type->is_pointer_or_reference ())
+    internal_error (_("gen_deref: expected a pointer"));
 
   /* We've got an rvalue now, which is a pointer.  We want to yield an
      lvalue, whose address is exactly that pointer.  So we don't
      actually emit any code; we just change the type from "Pointer to
      T" to "T", and mark the value as an lvalue in memory.  Leave it
      to the consumer to actually dereference it.  */
-  value->type = check_typedef (TYPE_TARGET_TYPE (value->type));
-  if (TYPE_CODE (value->type) == TYPE_CODE_VOID)
+  value->type = check_typedef (value->type->target_type ());
+  if (value->type->code () == TYPE_CODE_VOID)
     error (_("Attempt to dereference a generic pointer."));
-  value->kind = ((TYPE_CODE (value->type) == TYPE_CODE_FUNC)
+  value->kind = ((value->type->code () == TYPE_CODE_FUNC)
 		 ? axs_rvalue : axs_lvalue_memory);
 }
 
@@ -1228,7 +1126,7 @@ gen_address_of (struct axs_value *value)
   /* Special case for taking the address of a function.  The ANSI
      standard describes this as a special case, too, so this
      arrangement is not without motivation.  */
-  if (TYPE_CODE (value->type) == TYPE_CODE_FUNC)
+  if (value->type->code () == TYPE_CODE_FUNC)
     /* The value's already an rvalue on the stack, so we just need to
        change the type.  */
     value->type = lookup_pointer_type (value->type);
@@ -1309,8 +1207,7 @@ gen_bitfield_ref (struct agent_expr *ax,
 
   /* Can we fetch the number of bits requested at all?  */
   if ((end - start) > ((1 << num_ops) * 8))
-    internal_error (__FILE__, __LINE__,
-		    _("gen_bitfield_ref: bitfield too wide"));
+    internal_error (_("gen_bitfield_ref: bitfield too wide"));
 
   /* Note that we know here that we only need to try each opcode once.
      That may not be true on machines with weird byte sizes.  */
@@ -1322,7 +1219,7 @@ gen_bitfield_ref (struct agent_expr *ax,
       int op_size = 8 << op;
 
       /* The stack at this point, from bottom to top, contains zero or
-         more fragments, then the address.  */
+	 more fragments, then the address.  */
 
       /* Does this fetch fit within the bitfield?  */
       if (offset + op_size <= bound_end)
@@ -1399,7 +1296,7 @@ gen_bitfield_ref (struct agent_expr *ax,
     ax_simple (ax, aop_bit_or);
 
   /* Sign- or zero-extend the value as appropriate.  */
-  ((TYPE_UNSIGNED (type) ? ax_zero_ext : ax_ext) (ax, end - start));
+  ((type->is_unsigned () ? ax_zero_ext : ax_ext) (ax, end - start));
 
   /* This is *not* an lvalue.  Ugh.  */
   value->kind = axs_rvalue;
@@ -1416,19 +1313,19 @@ gen_primitive_field (struct agent_expr *
 		     int offset, int fieldno, struct type *type)
 {
   /* Is this a bitfield?  */
-  if (TYPE_FIELD_PACKED (type, fieldno))
-    gen_bitfield_ref (ax, value, TYPE_FIELD_TYPE (type, fieldno),
+  if (type->field (fieldno).is_packed ())
+    gen_bitfield_ref (ax, value, type->field (fieldno).type (),
 		      (offset * TARGET_CHAR_BIT
-		       + TYPE_FIELD_BITPOS (type, fieldno)),
+		       + type->field (fieldno).loc_bitpos ()),
 		      (offset * TARGET_CHAR_BIT
-		       + TYPE_FIELD_BITPOS (type, fieldno)
-		       + TYPE_FIELD_BITSIZE (type, fieldno)));
+		       + type->field (fieldno).loc_bitpos ()
+		       + type->field (fieldno).bitsize ()));
   else
     {
       gen_offset (ax, offset
-		  + TYPE_FIELD_BITPOS (type, fieldno) / TARGET_CHAR_BIT);
+		  + type->field (fieldno).loc_bitpos () / TARGET_CHAR_BIT);
       value->kind = axs_lvalue_memory;
-      value->type = TYPE_FIELD_TYPE (type, fieldno);
+      value->type = type->field (fieldno).type ();
     }
 }
 
@@ -1444,9 +1341,9 @@ gen_struct_ref_recursive (struct agent_e
 
   type = check_typedef (type);
 
-  for (i = TYPE_NFIELDS (type) - 1; i >= nbases; i--)
+  for (i = type->num_fields () - 1; i >= nbases; i--)
     {
-      const char *this_name = TYPE_FIELD_NAME (type, i);
+      const char *this_name = type->field (i).name ();
 
       if (this_name)
 	{
@@ -1456,7 +1353,7 @@ gen_struct_ref_recursive (struct agent_e
 		 "this") will have been generated already, which will
 		 be unnecessary but not harmful if the static field is
 		 being handled as a global.  */
-	      if (field_is_static (&TYPE_FIELD (type, i)))
+	      if (type->field (i).is_static ())
 		{
 		  gen_static_field (ax, value, type, i);
 		  if (value->optimized_out)
@@ -1471,8 +1368,7 @@ gen_struct_ref_recursive (struct agent_e
 	    }
 #if 0 /* is this right? */
 	  if (this_name[0] == '\0')
-	    internal_error (__FILE__, __LINE__,
-			    _("find_field: anonymous unions not supported"));
+	    internal_error (_("find_field: anonymous unions not supported"));
 #endif
 	}
     }
@@ -1510,7 +1406,7 @@ gen_struct_ref (struct agent_expr *ax, s
   /* Follow pointers until we reach a non-pointer.  These aren't the C
      semantics, but they're what the normal GDB evaluator does, so we
      should at least be consistent.  */
-  while (pointer_type (value->type))
+  while (value->type->is_pointer_or_reference ())
     {
       require_rvalue (ax, value);
       gen_deref (value);
@@ -1518,8 +1414,8 @@ gen_struct_ref (struct agent_expr *ax, s
   type = check_typedef (value->type);
 
   /* This must yield a structure or a union.  */
-  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
-      && TYPE_CODE (type) != TYPE_CODE_UNION)
+  if (type->code () != TYPE_CODE_STRUCT
+      && type->code () != TYPE_CODE_UNION)
     error (_("The left operand of `%s' is not a %s."),
 	   operator_name, operand_name);
 
@@ -1533,31 +1429,32 @@ gen_struct_ref (struct agent_expr *ax, s
   
   if (!found)
     error (_("Couldn't find member named `%s' in struct/union/class `%s'"),
-	   field, TYPE_NAME (type));
+	   field, type->name ());
 }
 
 static int
 gen_namespace_elt (struct agent_expr *ax, struct axs_value *value,
-		   const struct type *curtype, char *name);
+		   const struct type *curtype, const char *name);
 static int
 gen_maybe_namespace_elt (struct agent_expr *ax, struct axs_value *value,
-			 const struct type *curtype, char *name);
+			 const struct type *curtype, const char *name);
 
 static void
 gen_static_field (struct agent_expr *ax, struct axs_value *value,
 		  struct type *type, int fieldno)
 {
-  if (TYPE_FIELD_LOC_KIND (type, fieldno) == FIELD_LOC_KIND_PHYSADDR)
+  if (type->field (fieldno).loc_kind () == FIELD_LOC_KIND_PHYSADDR)
     {
-      ax_const_l (ax, TYPE_FIELD_STATIC_PHYSADDR (type, fieldno));
+      ax_const_l (ax, type->field (fieldno).loc_physaddr ());
       value->kind = axs_lvalue_memory;
-      value->type = TYPE_FIELD_TYPE (type, fieldno);
+      value->type = type->field (fieldno).type ();
       value->optimized_out = 0;
     }
   else
     {
-      const char *phys_name = TYPE_FIELD_STATIC_PHYSNAME (type, fieldno);
-      struct symbol *sym = lookup_symbol (phys_name, 0, VAR_DOMAIN, 0).symbol;
+      const char *phys_name = type->field (fieldno).loc_physname ();
+      struct symbol *sym = lookup_symbol (phys_name, 0,
+					  SEARCH_VAR_DOMAIN, 0).symbol;
 
       if (sym)
 	{
@@ -1578,23 +1475,22 @@ gen_static_field (struct agent_expr *ax,
 
 static int
 gen_struct_elt_for_reference (struct agent_expr *ax, struct axs_value *value,
-			      struct type *type, char *fieldname)
+			      struct type *type, const char *fieldname)
 {
   struct type *t = type;
   int i;
 
-  if (TYPE_CODE (t) != TYPE_CODE_STRUCT
-      && TYPE_CODE (t) != TYPE_CODE_UNION)
-    internal_error (__FILE__, __LINE__,
-		    _("non-aggregate type to gen_struct_elt_for_reference"));
+  if (t->code () != TYPE_CODE_STRUCT
+      && t->code () != TYPE_CODE_UNION)
+    internal_error (_("non-aggregate type to gen_struct_elt_for_reference"));
 
-  for (i = TYPE_NFIELDS (t) - 1; i >= TYPE_N_BASECLASSES (t); i--)
+  for (i = t->num_fields () - 1; i >= TYPE_N_BASECLASSES (t); i--)
     {
-      const char *t_field_name = TYPE_FIELD_NAME (t, i);
+      const char *t_field_name = t->field (i).name ();
 
       if (t_field_name && strcmp (t_field_name, fieldname) == 0)
 	{
-	  if (field_is_static (&TYPE_FIELD (t, i)))
+	  if (t->field (i).is_static ())
 	    {
 	      gen_static_field (ax, value, t, i);
 	      if (value->optimized_out)
@@ -1603,7 +1499,7 @@ gen_struct_elt_for_reference (struct age
 		       fieldname);
 	      return 1;
 	    }
-	  if (TYPE_FIELD_PACKED (t, i))
+	  if (t->field (i).is_packed ())
 	    error (_("pointers to bitfield members not allowed"));
 
 	  /* FIXME we need a way to do "want_address" equivalent */	  
@@ -1623,13 +1519,13 @@ gen_struct_elt_for_reference (struct age
 
 static int
 gen_namespace_elt (struct agent_expr *ax, struct axs_value *value,
-		   const struct type *curtype, char *name)
+		   const struct type *curtype, const char *name)
 {
   int found = gen_maybe_namespace_elt (ax, value, curtype, name);
 
   if (!found)
     error (_("No symbol \"%s\" in namespace \"%s\"."), 
-	   name, TYPE_NAME (curtype));
+	   name, curtype->name ());
 
   return found;
 }
@@ -1642,14 +1538,14 @@ gen_namespace_elt (struct agent_expr *ax
 
 static int
 gen_maybe_namespace_elt (struct agent_expr *ax, struct axs_value *value,
-			 const struct type *curtype, char *name)
+			 const struct type *curtype, const char *name)
 {
-  const char *namespace_name = TYPE_NAME (curtype);
+  const char *namespace_name = curtype->name ();
   struct block_symbol sym;
 
   sym = cp_lookup_symbol_namespace (namespace_name, name,
 				    block_for_pc (ax->scope),
-				    VAR_DOMAIN);
+				    SEARCH_VAR_DOMAIN);
 
   if (sym.symbol == NULL)
     return 0;
@@ -1666,9 +1562,9 @@ gen_maybe_namespace_elt (struct agent_ex
 
 static int
 gen_aggregate_elt_ref (struct agent_expr *ax, struct axs_value *value,
-		       struct type *type, char *field)
+		       struct type *type, const char *field)
 {
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
@@ -1678,13 +1574,155 @@ gen_aggregate_elt_ref (struct agent_expr
       return gen_namespace_elt (ax, value, type, field);
       break;
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("non-aggregate type in gen_aggregate_elt_ref"));
+      internal_error (_("non-aggregate type in gen_aggregate_elt_ref"));
     }
 
   return 0;
 }
 
+
+
+namespace expr
+{
+
+void
+operation::generate_ax (struct expression *exp,
+			struct agent_expr *ax,
+			struct axs_value *value,
+			struct type *cast_type)
+{
+  if (constant_p ())
+    {
+      struct value *v = evaluate (nullptr, exp, EVAL_AVOID_SIDE_EFFECTS);
+      ax_const_l (ax, value_as_long (v));
+      value->kind = axs_rvalue;
+      value->type = check_typedef (v->type ());
+    }
+  else
+    {
+      do_generate_ax (exp, ax, value, cast_type);
+      if (cast_type != nullptr)
+	gen_cast (ax, value, cast_type);
+    }
+}
+
+void
+scope_operation::do_generate_ax (struct expression *exp,
+				 struct agent_expr *ax,
+				 struct axs_value *value,
+				 struct type *cast_type)
+{
+  struct type *type = std::get<0> (m_storage);
+  const std::string &name = std::get<1> (m_storage);
+  int found = gen_aggregate_elt_ref (ax, value, type, name.c_str ());
+  if (!found)
+    error (_("There is no field named %s"), name.c_str ());
+}
+
+void
+long_const_operation::do_generate_ax (struct expression *exp,
+				      struct agent_expr *ax,
+				      struct axs_value *value,
+				      struct type *cast_type)
+{
+  LONGEST val = as_longest ();
+  gen_int_literal (ax, value, val, std::get<0> (m_storage));
+}
+
+void
+var_msym_value_operation::do_generate_ax (struct expression *exp,
+					  struct agent_expr *ax,
+					  struct axs_value *value,
+					  struct type *cast_type)
+{
+  const bound_minimal_symbol &b = std::get<0> (m_storage);
+  gen_msym_var_ref (ax, value, b.minsym, b.objfile);
+
+  if (value->type->code () == TYPE_CODE_ERROR)
+    {
+      if (cast_type == nullptr)
+	error_unknown_type (b.minsym->linkage_name ());
+      value->type = cast_type;
+    }
+}
+
+void
+register_operation::do_generate_ax (struct expression *exp,
+				    struct agent_expr *ax,
+				    struct axs_value *value,
+				    struct type *cast_type)
+{
+  const char *name = std::get<0> (m_storage).c_str ();
+  int len = std::get<0> (m_storage).size ();
+  int reg;
+
+  reg = user_reg_map_name_to_regnum (ax->gdbarch, name, len);
+  if (reg == -1)
+    internal_error (_("Register $%s not available"), name);
+  /* No support for tracing user registers yet.  */
+  if (reg >= gdbarch_num_cooked_regs (ax->gdbarch))
+    error (_("'%s' is a user-register; "
+	     "GDB cannot yet trace user-register contents."),
+	   name);
+  value->kind = axs_lvalue_register;
+  value->u.reg = reg;
+  value->type = register_type (ax->gdbarch, reg);
+}
+
+void
+internalvar_operation::do_generate_ax (struct expression *exp,
+				       struct agent_expr *ax,
+				       struct axs_value *value,
+				       struct type *cast_type)
+{
+  struct internalvar *var = std::get<0> (m_storage);
+  const char *name = internalvar_name (var);
+  struct trace_state_variable *tsv;
+
+  tsv = find_trace_state_variable (name);
+  if (tsv)
+    {
+      ax_tsv (ax, aop_getv, tsv->number);
+      if (ax->tracing)
+	ax_tsv (ax, aop_tracev, tsv->number);
+      /* Trace state variables are always 64-bit integers.  */
+      value->kind = axs_rvalue;
+      value->type = builtin_type (ax->gdbarch)->builtin_long_long;
+    }
+  else if (! compile_internalvar_to_ax (var, ax, value))
+    error (_("$%s is not a trace state variable; GDB agent "
+	     "expressions cannot use convenience variables."), name);
+}
+
+void
+ternop_cond_operation::do_generate_ax (struct expression *exp,
+				       struct agent_expr *ax,
+				       struct axs_value *value,
+				       struct type *cast_type)
+{
+  struct axs_value value1, value2, value3;
+  int if1, end;
+
+  std::get<0> (m_storage)->generate_ax (exp, ax, &value1);
+  gen_usual_unary (ax, &value1);
+  /* For (A ? B : C), it's easiest to generate subexpression
+     bytecodes in order, but if_goto jumps on true, so we invert
+     the sense of A.  Then we can do B by dropping through, and
+     jump to do C.  */
+  gen_logical_not (ax, &value1, builtin_type (ax->gdbarch)->builtin_int);
+  if1 = ax_goto (ax, aop_if_goto);
+  std::get<1> (m_storage)->generate_ax (exp, ax, &value2);
+  gen_usual_unary (ax, &value2);
+  end = ax_goto (ax, aop_goto);
+  ax_label (ax, if1, ax->buf.size ());
+  std::get<2> (m_storage)->generate_ax (exp, ax, &value3);
+  gen_usual_unary (ax, &value3);
+  ax_label (ax, end, ax->buf.size ());
+  /* This is arbitrary - what if B and C are incompatible types? */
+  value->type = value2.type;
+  value->kind = value2.kind;
+}
+
 /* Generate code for GDB's magical `repeat' operator.
    LVALUE @ INT creates an array INT elements long, and whose elements
    have the same type as LVALUE, located in memory so that LVALUE is
@@ -1696,579 +1734,342 @@ gen_aggregate_elt_ref (struct agent_expr
    without changing the type system, having values that occupy two
    stack slots, doing weird things with sizeof, etc.  So we require
    the right operand to be a constant expression.  */
-static void
-gen_repeat (struct expression *exp, union exp_element **pc,
-	    struct agent_expr *ax, struct axs_value *value)
+void
+repeat_operation::do_generate_ax (struct expression *exp,
+				  struct agent_expr *ax,
+				  struct axs_value *value,
+				  struct type *cast_type)
 {
   struct axs_value value1;
 
   /* We don't want to turn this into an rvalue, so no conversions
      here.  */
-  gen_expr (exp, pc, ax, &value1);
+  std::get<0> (m_storage)->generate_ax (exp, ax, &value1);
   if (value1.kind != axs_lvalue_memory)
     error (_("Left operand of `@' must be an object in memory."));
 
   /* Evaluate the length; it had better be a constant.  */
-  {
-    struct value *v = const_expr (pc);
-    int length;
-
-    if (!v)
-      error (_("Right operand of `@' must be a "
-	       "constant, in agent expressions."));
-    if (TYPE_CODE (value_type (v)) != TYPE_CODE_INT)
-      error (_("Right operand of `@' must be an integer."));
-    length = value_as_long (v);
-    if (length <= 0)
-      error (_("Right operand of `@' must be positive."));
-
-    /* The top of the stack is already the address of the object, so
-       all we need to do is frob the type of the lvalue.  */
-    {
-      /* FIXME-type-allocation: need a way to free this type when we are
-         done with it.  */
-      struct type *array
-	= lookup_array_range_type (value1.type, 0, length - 1);
+  if (!std::get<1> (m_storage)->constant_p ())
+    error (_("Right operand of `@' must be a "
+	     "constant, in agent expressions."));
+
+  struct value *v
+    = std::get<1> (m_storage)->evaluate (nullptr, exp,
+					 EVAL_AVOID_SIDE_EFFECTS);
+  if (v->type ()->code () != TYPE_CODE_INT)
+    error (_("Right operand of `@' must be an integer."));
+  int length = value_as_long (v);
+  if (length <= 0)
+    error (_("Right operand of `@' must be positive."));
+
+  /* The top of the stack is already the address of the object, so
+     all we need to do is frob the type of the lvalue.  */
+  /* FIXME-type-allocation: need a way to free this type when we are
+     done with it.  */
+  struct type *array
+    = lookup_array_range_type (value1.type, 0, length - 1);
 
-      value->kind = axs_lvalue_memory;
-      value->type = array;
-    }
-  }
+  value->kind = axs_lvalue_memory;
+  value->type = array;
 }
 
+void
+comma_operation::do_generate_ax (struct expression *exp,
+				 struct agent_expr *ax,
+				 struct axs_value *value,
+				 struct type *cast_type)
+{
+  /* Note that we need to be a little subtle about generating code
+     for comma.  In C, we can do some optimizations here because
+     we know the left operand is only being evaluated for effect.
+     However, if the tracing kludge is in effect, then we always
+     need to evaluate the left hand side fully, so that all the
+     variables it mentions get traced.  */
+  struct axs_value value1;
+  std::get<0> (m_storage)->generate_ax (exp, ax, &value1);
+  /* Don't just dispose of the left operand.  We might be tracing,
+     in which case we want to emit code to trace it if it's an
+     lvalue.  */
+  gen_traced_pop (ax, &value1);
+  std::get<1> (m_storage)->generate_ax (exp, ax, value);
+  /* It's the consumer's responsibility to trace the right operand.  */
+}
 
-/* Emit code for the `sizeof' operator.
-   *PC should point at the start of the operand expression; we advance it
-   to the first instruction after the operand.  */
-static void
-gen_sizeof (struct expression *exp, union exp_element **pc,
-	    struct agent_expr *ax, struct axs_value *value,
-	    struct type *size_type)
+void
+unop_sizeof_operation::do_generate_ax (struct expression *exp,
+				       struct agent_expr *ax,
+				       struct axs_value *value,
+				       struct type *cast_type)
 {
   /* We don't care about the value of the operand expression; we only
      care about its type.  However, in the current arrangement, the
      only way to find an expression's type is to generate code for it.
      So we generate code for the operand, and then throw it away,
      replacing it with code that simply pushes its size.  */
-  int start = ax->len;
+  int start = ax->buf.size ();
 
-  gen_expr (exp, pc, ax, value);
+  std::get<0> (m_storage)->generate_ax (exp, ax, value);
 
   /* Throw away the code we just generated.  */
-  ax->len = start;
+  ax->buf.resize (start);
 
-  ax_const_l (ax, TYPE_LENGTH (value->type));
+  ax_const_l (ax, value->type->length ());
   value->kind = axs_rvalue;
-  value->type = size_type;
+  value->type = builtin_type (ax->gdbarch)->builtin_int;
 }
-
 
-/* Generate bytecode for a cast to TO_TYPE.  Advance *PC over the
-   subexpression.  */
-
-static void
-gen_expr_for_cast (struct expression *exp, union exp_element **pc,
-		   struct agent_expr *ax, struct axs_value *value,
-		   struct type *to_type)
+void
+unop_cast_operation::do_generate_ax (struct expression *exp,
+				     struct agent_expr *ax,
+				     struct axs_value *value,
+				     struct type *cast_type)
 {
-  enum exp_opcode op = (*pc)[0].opcode;
-
-  /* Don't let symbols be handled with gen_expr because that throws an
-     "unknown type" error for no-debug data symbols.  Instead, we want
-     the cast to reinterpret such symbols.  */
-  if (op == OP_VAR_MSYM_VALUE || op == OP_VAR_VALUE)
-    {
-      if (op == OP_VAR_VALUE)
-	{
-	  gen_var_ref (ax, value, (*pc)[2].symbol);
-
-	  if (value->optimized_out)
-	    error (_("`%s' has been optimized out, cannot use"),
-		   (*pc)[2].symbol->print_name ());
-	}
-      else
-	gen_msym_var_ref (ax, value, (*pc)[2].msymbol, (*pc)[1].objfile);
-      if (TYPE_CODE (value->type) == TYPE_CODE_ERROR)
-	value->type = to_type;
-      (*pc) += 4;
-    }
-  else
-    gen_expr (exp, pc, ax, value);
-  gen_cast (ax, value, to_type);
+  std::get<0> (m_storage)->generate_ax (exp, ax, value,
+					std::get<1> (m_storage));
 }
 
-/* Generating bytecode from GDB expressions: general recursive thingy  */
-
-/* XXX: i18n */
-/* A gen_expr function written by a Gen-X'er guy.
-   Append code for the subexpression of EXPR starting at *POS_P to AX.  */
 void
-gen_expr (struct expression *exp, union exp_element **pc,
-	  struct agent_expr *ax, struct axs_value *value)
+unop_extract_operation::do_generate_ax (struct expression *exp,
+					struct agent_expr *ax,
+					struct axs_value *value,
+					struct type *cast_type)
 {
-  /* Used to hold the descriptions of operand expressions.  */
-  struct axs_value value1, value2, value3;
-  enum exp_opcode op = (*pc)[0].opcode, op2;
-  int if1, go1, if2, go2, end;
-  struct type *int_type = builtin_type (ax->gdbarch)->builtin_int;
-
-  /* If we're looking at a constant expression, just push its value.  */
-  {
-    struct value *v = maybe_const_expr (pc);
-
-    if (v)
-      {
-	ax_const_l (ax, value_as_long (v));
-	value->kind = axs_rvalue;
-	value->type = check_typedef (value_type (v));
-	return;
-      }
-  }
-
-  /* Otherwise, go ahead and generate code for it.  */
-  switch (op)
-    {
-      /* Binary arithmetic operators.  */
-    case BINOP_ADD:
-    case BINOP_SUB:
-    case BINOP_MUL:
-    case BINOP_DIV:
-    case BINOP_REM:
-    case BINOP_LSH:
-    case BINOP_RSH:
-    case BINOP_SUBSCRIPT:
-    case BINOP_BITWISE_AND:
-    case BINOP_BITWISE_IOR:
-    case BINOP_BITWISE_XOR:
-    case BINOP_EQUAL:
-    case BINOP_NOTEQUAL:
-    case BINOP_LESS:
-    case BINOP_GTR:
-    case BINOP_LEQ:
-    case BINOP_GEQ:
-      (*pc)++;
-      gen_expr (exp, pc, ax, &value1);
-      gen_usual_unary (ax, &value1);
-      gen_expr_binop_rest (exp, op, pc, ax, value, &value1, &value2);
-      break;
-
-    case BINOP_LOGICAL_AND:
-      (*pc)++;
-      /* Generate the obvious sequence of tests and jumps.  */
-      gen_expr (exp, pc, ax, &value1);
-      gen_usual_unary (ax, &value1);
-      if1 = ax_goto (ax, aop_if_goto);
-      go1 = ax_goto (ax, aop_goto);
-      ax_label (ax, if1, ax->len);
-      gen_expr (exp, pc, ax, &value2);
-      gen_usual_unary (ax, &value2);
-      if2 = ax_goto (ax, aop_if_goto);
-      go2 = ax_goto (ax, aop_goto);
-      ax_label (ax, if2, ax->len);
-      ax_const_l (ax, 1);
-      end = ax_goto (ax, aop_goto);
-      ax_label (ax, go1, ax->len);
-      ax_label (ax, go2, ax->len);
-      ax_const_l (ax, 0);
-      ax_label (ax, end, ax->len);
-      value->kind = axs_rvalue;
-      value->type = int_type;
-      break;
-
-    case BINOP_LOGICAL_OR:
-      (*pc)++;
-      /* Generate the obvious sequence of tests and jumps.  */
-      gen_expr (exp, pc, ax, &value1);
-      gen_usual_unary (ax, &value1);
-      if1 = ax_goto (ax, aop_if_goto);
-      gen_expr (exp, pc, ax, &value2);
-      gen_usual_unary (ax, &value2);
-      if2 = ax_goto (ax, aop_if_goto);
-      ax_const_l (ax, 0);
-      end = ax_goto (ax, aop_goto);
-      ax_label (ax, if1, ax->len);
-      ax_label (ax, if2, ax->len);
-      ax_const_l (ax, 1);
-      ax_label (ax, end, ax->len);
-      value->kind = axs_rvalue;
-      value->type = int_type;
-      break;
-
-    case TERNOP_COND:
-      (*pc)++;
-      gen_expr (exp, pc, ax, &value1);
-      gen_usual_unary (ax, &value1);
-      /* For (A ? B : C), it's easiest to generate subexpression
-	 bytecodes in order, but if_goto jumps on true, so we invert
-	 the sense of A.  Then we can do B by dropping through, and
-	 jump to do C.  */
-      gen_logical_not (ax, &value1, int_type);
-      if1 = ax_goto (ax, aop_if_goto);
-      gen_expr (exp, pc, ax, &value2);
-      gen_usual_unary (ax, &value2);
-      end = ax_goto (ax, aop_goto);
-      ax_label (ax, if1, ax->len);
-      gen_expr (exp, pc, ax, &value3);
-      gen_usual_unary (ax, &value3);
-      ax_label (ax, end, ax->len);
-      /* This is arbitrary - what if B and C are incompatible types? */
-      value->type = value2.type;
-      value->kind = value2.kind;
-      break;
-
-    case BINOP_ASSIGN:
-      (*pc)++;
-      if ((*pc)[0].opcode == OP_INTERNALVAR)
-	{
-	  char *name = internalvar_name ((*pc)[1].internalvar);
-	  struct trace_state_variable *tsv;
-
-	  (*pc) += 3;
-	  gen_expr (exp, pc, ax, value);
-	  tsv = find_trace_state_variable (name);
-	  if (tsv)
-	    {
-	      ax_tsv (ax, aop_setv, tsv->number);
-	      if (ax->tracing)
-		ax_tsv (ax, aop_tracev, tsv->number);
-	    }
-	  else
-	    error (_("$%s is not a trace state variable, "
-		     "may not assign to it"), name);
-	}
-      else
-	error (_("May only assign to trace state variables"));
-      break;
-
-    case BINOP_ASSIGN_MODIFY:
-      (*pc)++;
-      op2 = (*pc)[0].opcode;
-      (*pc)++;
-      (*pc)++;
-      if ((*pc)[0].opcode == OP_INTERNALVAR)
-	{
-	  char *name = internalvar_name ((*pc)[1].internalvar);
-	  struct trace_state_variable *tsv;
-
-	  (*pc) += 3;
-	  tsv = find_trace_state_variable (name);
-	  if (tsv)
-	    {
-	      /* The tsv will be the left half of the binary operation.  */
-	      ax_tsv (ax, aop_getv, tsv->number);
-	      if (ax->tracing)
-		ax_tsv (ax, aop_tracev, tsv->number);
-	      /* Trace state variables are always 64-bit integers.  */
-	      value1.kind = axs_rvalue;
-	      value1.type = builtin_type (ax->gdbarch)->builtin_long_long;
-	      /* Now do right half of expression.  */
-	      gen_expr_binop_rest (exp, op2, pc, ax, value, &value1, &value2);
-	      /* We have a result of the binary op, set the tsv.  */
-	      ax_tsv (ax, aop_setv, tsv->number);
-	      if (ax->tracing)
-		ax_tsv (ax, aop_tracev, tsv->number);
-	    }
-	  else
-	    error (_("$%s is not a trace state variable, "
-		     "may not assign to it"), name);
-	}
-      else
-	error (_("May only assign to trace state variables"));
-      break;
-
-      /* Note that we need to be a little subtle about generating code
-         for comma.  In C, we can do some optimizations here because
-         we know the left operand is only being evaluated for effect.
-         However, if the tracing kludge is in effect, then we always
-         need to evaluate the left hand side fully, so that all the
-         variables it mentions get traced.  */
-    case BINOP_COMMA:
-      (*pc)++;
-      gen_expr (exp, pc, ax, &value1);
-      /* Don't just dispose of the left operand.  We might be tracing,
-         in which case we want to emit code to trace it if it's an
-         lvalue.  */
-      gen_traced_pop (ax, &value1);
-      gen_expr (exp, pc, ax, value);
-      /* It's the consumer's responsibility to trace the right operand.  */
-      break;
-
-    case OP_LONG:		/* some integer constant */
-      {
-	struct type *type = (*pc)[1].type;
-	LONGEST k = (*pc)[2].longconst;
-
-	(*pc) += 4;
-	gen_int_literal (ax, value, k, type);
-      }
-      break;
+  std::get<0> (m_storage)->generate_ax (exp, ax, value);
 
-    case OP_VAR_VALUE:
-      gen_var_ref (ax, value, (*pc)[2].symbol);
+  struct type *to_type = get_type ();
 
-      if (value->optimized_out)
-	error (_("`%s' has been optimized out, cannot use"),
-	       (*pc)[2].symbol->print_name ());
+  if (!is_scalar_type (to_type))
+    error (_("can't generate agent expression to extract non-scalar type"));
 
-      if (TYPE_CODE (value->type) == TYPE_CODE_ERROR)
-	error_unknown_type ((*pc)[2].symbol->print_name ());
-
-      (*pc) += 4;
-      break;
-
-    case OP_VAR_MSYM_VALUE:
-      gen_msym_var_ref (ax, value, (*pc)[2].msymbol, (*pc)[1].objfile);
-
-      if (TYPE_CODE (value->type) == TYPE_CODE_ERROR)
-	error_unknown_type ((*pc)[2].msymbol->linkage_name ());
-
-      (*pc) += 4;
-      break;
-
-    case OP_REGISTER:
-      {
-	const char *name = &(*pc)[2].string;
-	int reg;
-
-	(*pc) += 4 + BYTES_TO_EXP_ELEM ((*pc)[1].longconst + 1);
-	reg = user_reg_map_name_to_regnum (ax->gdbarch, name, strlen (name));
-	if (reg == -1)
-	  internal_error (__FILE__, __LINE__,
-			  _("Register $%s not available"), name);
-	/* No support for tracing user registers yet.  */
-	if (reg >= gdbarch_num_cooked_regs (ax->gdbarch))
-	  error (_("'%s' is a user-register; "
-		   "GDB cannot yet trace user-register contents."),
-		 name);
-	value->kind = axs_lvalue_register;
-	value->u.reg = reg;
-	value->type = register_type (ax->gdbarch, reg);
-      }
-      break;
-
-    case OP_INTERNALVAR:
-      {
-	struct internalvar *var = (*pc)[1].internalvar;
-	const char *name = internalvar_name (var);
-	struct trace_state_variable *tsv;
-
-	(*pc) += 3;
-	tsv = find_trace_state_variable (name);
-	if (tsv)
-	  {
-	    ax_tsv (ax, aop_getv, tsv->number);
-	    if (ax->tracing)
-	      ax_tsv (ax, aop_tracev, tsv->number);
-	    /* Trace state variables are always 64-bit integers.  */
-	    value->kind = axs_rvalue;
-	    value->type = builtin_type (ax->gdbarch)->builtin_long_long;
-	  }
-	else if (! compile_internalvar_to_ax (var, ax, value))
-	  error (_("$%s is not a trace state variable; GDB agent "
-		   "expressions cannot use convenience variables."), name);
-      }
-      break;
-
-      /* Weirdo operator: see comments for gen_repeat for details.  */
-    case BINOP_REPEAT:
-      /* Note that gen_repeat handles its own argument evaluation.  */
-      (*pc)++;
-      gen_repeat (exp, pc, ax, value);
-      break;
-
-    case UNOP_CAST:
-      {
-	struct type *type = (*pc)[1].type;
-
-	(*pc) += 3;
-	gen_expr_for_cast (exp, pc, ax, value, type);
-      }
-      break;
-
-    case UNOP_CAST_TYPE:
-      {
-	int offset;
-	struct value *val;
-	struct type *type;
-
-	++*pc;
-	offset = *pc - exp->elts;
-	val = evaluate_subexp (NULL, exp, &offset, EVAL_AVOID_SIDE_EFFECTS);
-	type = value_type (val);
-	*pc = &exp->elts[offset];
-	gen_expr_for_cast (exp, pc, ax, value, type);
-      }
-      break;
-
-    case UNOP_MEMVAL:
-      {
-	struct type *type = check_typedef ((*pc)[1].type);
-
-	(*pc) += 3;
-	gen_expr (exp, pc, ax, value);
-
-	/* If we have an axs_rvalue or an axs_lvalue_memory, then we
-	   already have the right value on the stack.  For
-	   axs_lvalue_register, we must convert.  */
-	if (value->kind == axs_lvalue_register)
-	  require_rvalue (ax, value);
-
-	value->type = type;
-	value->kind = axs_lvalue_memory;
-      }
-      break;
-
-    case UNOP_MEMVAL_TYPE:
-      {
-	int offset;
-	struct value *val;
-	struct type *type;
-
-	++*pc;
-	offset = *pc - exp->elts;
-	val = evaluate_subexp (NULL, exp, &offset, EVAL_AVOID_SIDE_EFFECTS);
-	type = value_type (val);
-	*pc = &exp->elts[offset];
-
-	gen_expr (exp, pc, ax, value);
-
-	/* If we have an axs_rvalue or an axs_lvalue_memory, then we
-	   already have the right value on the stack.  For
-	   axs_lvalue_register, we must convert.  */
-	if (value->kind == axs_lvalue_register)
-	  require_rvalue (ax, value);
-
-	value->type = type;
-	value->kind = axs_lvalue_memory;
-      }
-      break;
+  if (to_type->is_unsigned ())
+    gen_extend (ax, to_type);
+  else
+    gen_sign_extend (ax, to_type);
+}
 
-    case UNOP_PLUS:
-      (*pc)++;
-      /* + FOO is equivalent to 0 + FOO, which can be optimized.  */
-      gen_expr (exp, pc, ax, value);
-      gen_usual_unary (ax, value);
-      break;
-      
-    case UNOP_NEG:
-      (*pc)++;
-      /* -FOO is equivalent to 0 - FOO.  */
-      gen_int_literal (ax, &value1, 0,
-		       builtin_type (ax->gdbarch)->builtin_int);
-      gen_usual_unary (ax, &value1);	/* shouldn't do much */
-      gen_expr (exp, pc, ax, &value2);
-      gen_usual_unary (ax, &value2);
-      gen_usual_arithmetic (ax, &value1, &value2);
-      gen_binop (ax, value, &value1, &value2, aop_sub, aop_sub, 1, "negation");
-      break;
+void
+unop_memval_operation::do_generate_ax (struct expression *exp,
+				       struct agent_expr *ax,
+				       struct axs_value *value,
+				       struct type *cast_type)
+{
+  std::get<0> (m_storage)->generate_ax (exp, ax, value);
+  /* If we have an axs_rvalue or an axs_lvalue_memory, then we
+     already have the right value on the stack.  For
+     axs_lvalue_register, we must convert.  */
+  if (value->kind == axs_lvalue_register)
+    require_rvalue (ax, value);
 
-    case UNOP_LOGICAL_NOT:
-      (*pc)++;
-      gen_expr (exp, pc, ax, value);
-      gen_usual_unary (ax, value);
-      gen_logical_not (ax, value, int_type);
-      break;
+  value->type = std::get<1> (m_storage);
+  value->kind = axs_lvalue_memory;
+}
 
-    case UNOP_COMPLEMENT:
-      (*pc)++;
-      gen_expr (exp, pc, ax, value);
-      gen_usual_unary (ax, value);
-      gen_integral_promotions (ax, value);
-      gen_complement (ax, value);
-      break;
+void
+unop_memval_type_operation::do_generate_ax (struct expression *exp,
+					    struct agent_expr *ax,
+					    struct axs_value *value,
+					    struct type *cast_type)
+{
+  struct value *val
+    = std::get<0> (m_storage)->evaluate (nullptr, exp,
+					 EVAL_AVOID_SIDE_EFFECTS);
+  struct type *type = val->type ();
+
+  std::get<1> (m_storage)->generate_ax (exp, ax, value);
+
+  /* If we have an axs_rvalue or an axs_lvalue_memory, then we
+     already have the right value on the stack.  For
+     axs_lvalue_register, we must convert.  */
+  if (value->kind == axs_lvalue_register)
+    require_rvalue (ax, value);
 
-    case UNOP_IND:
-      (*pc)++;
-      gen_expr (exp, pc, ax, value);
-      gen_usual_unary (ax, value);
-      if (!pointer_type (value->type))
-	error (_("Argument of unary `*' is not a pointer."));
-      gen_deref (value);
-      break;
+  value->type = type;
+  value->kind = axs_lvalue_memory;
+}
 
-    case UNOP_ADDR:
-      (*pc)++;
-      gen_expr (exp, pc, ax, value);
-      gen_address_of (value);
-      break;
+void
+op_this_operation::do_generate_ax (struct expression *exp,
+				   struct agent_expr *ax,
+				   struct axs_value *value,
+				   struct type *cast_type)
+{
+  struct symbol *sym, *func;
+  const struct block *b;
+  const struct language_defn *lang;
+
+  b = block_for_pc (ax->scope);
+  func = b->linkage_function ();
+  lang = language_def (func->language ());
+
+  sym = lookup_language_this (lang, b).symbol;
+  if (!sym)
+    error (_("no `%s' found"), lang->name_of_this ());
 
-    case UNOP_SIZEOF:
-      (*pc)++;
-      /* Notice that gen_sizeof handles its own operand, unlike most
-         of the other unary operator functions.  This is because we
-         have to throw away the code we generate.  */
-      gen_sizeof (exp, pc, ax, value,
-		  builtin_type (ax->gdbarch)->builtin_int);
-      break;
+  gen_var_ref (ax, value, sym);
 
-    case STRUCTOP_STRUCT:
-    case STRUCTOP_PTR:
-      {
-	int length = (*pc)[1].longconst;
-	char *name = &(*pc)[2].string;
+  if (value->optimized_out)
+    error (_("`%s' has been optimized out, cannot use"),
+	   sym->print_name ());
+}
 
-	(*pc) += 4 + BYTES_TO_EXP_ELEM (length + 1);
-	gen_expr (exp, pc, ax, value);
-	if (op == STRUCTOP_STRUCT)
-	  gen_struct_ref (ax, value, name, ".", "structure or union");
-	else if (op == STRUCTOP_PTR)
-	  gen_struct_ref (ax, value, name, "->",
-			  "pointer to a structure or union");
-	else
-	  /* If this `if' chain doesn't handle it, then the case list
-	     shouldn't mention it, and we shouldn't be here.  */
-	  internal_error (__FILE__, __LINE__,
-			  _("gen_expr: unhandled struct case"));
-      }
-      break;
+void
+assign_operation::do_generate_ax (struct expression *exp,
+				  struct agent_expr *ax,
+				  struct axs_value *value,
+				  struct type *cast_type)
+{
+  operation *subop = std::get<0> (m_storage).get ();
+  if (subop->opcode () != OP_INTERNALVAR)
+    error (_("May only assign to trace state variables"));
+
+  internalvar_operation *ivarop
+    = gdb::checked_static_cast<internalvar_operation *> (subop);
+
+  const char *name = internalvar_name (ivarop->get_internalvar ());
+  struct trace_state_variable *tsv;
+
+  std::get<1> (m_storage)->generate_ax (exp, ax, value);
+  tsv = find_trace_state_variable (name);
+  if (tsv)
+    {
+      ax_tsv (ax, aop_setv, tsv->number);
+      if (ax->tracing)
+	ax_tsv (ax, aop_tracev, tsv->number);
+    }
+  else
+    error (_("$%s is not a trace state variable, "
+	     "may not assign to it"), name);
+}
 
-    case OP_THIS:
-      {
-	struct symbol *sym, *func;
-	const struct block *b;
-	const struct language_defn *lang;
+void
+assign_modify_operation::do_generate_ax (struct expression *exp,
+					 struct agent_expr *ax,
+					 struct axs_value *value,
+					 struct type *cast_type)
+{
+  operation *subop = std::get<1> (m_storage).get ();
+  if (subop->opcode () != OP_INTERNALVAR)
+    error (_("May only assign to trace state variables"));
+
+  internalvar_operation *ivarop
+    = gdb::checked_static_cast<internalvar_operation *> (subop);
+
+  const char *name = internalvar_name (ivarop->get_internalvar ());
+  struct trace_state_variable *tsv;
+
+  tsv = find_trace_state_variable (name);
+  if (tsv)
+    {
+      /* The tsv will be the left half of the binary operation.  */
+      ax_tsv (ax, aop_getv, tsv->number);
+      if (ax->tracing)
+	ax_tsv (ax, aop_tracev, tsv->number);
+      /* Trace state variables are always 64-bit integers.  */
+      struct axs_value value1, value2;
+      value1.kind = axs_rvalue;
+      value1.type = builtin_type (ax->gdbarch)->builtin_long_long;
+      /* Now do right half of expression.  */
+      std::get<2> (m_storage)->generate_ax (exp, ax, &value2);
+      gen_expr_binop_rest (exp, std::get<0> (m_storage), ax,
+			   value, &value1, &value2);
+      /* We have a result of the binary op, set the tsv.  */
+      ax_tsv (ax, aop_setv, tsv->number);
+      if (ax->tracing)
+	ax_tsv (ax, aop_tracev, tsv->number);
+    }
+  else
+    error (_("$%s is not a trace state variable, "
+	     "may not assign to it"), name);
+}
 
-	b = block_for_pc (ax->scope);
-	func = block_linkage_function (b);
-	lang = language_def (SYMBOL_LANGUAGE (func));
+void
+unop_cast_type_operation::do_generate_ax (struct expression *exp,
+					  struct agent_expr *ax,
+					  struct axs_value *value,
+					  struct type *cast_type)
+{
+  struct value *val
+    = std::get<0> (m_storage)->evaluate (nullptr, exp,
+					 EVAL_AVOID_SIDE_EFFECTS);
+  std::get<1> (m_storage)->generate_ax (exp, ax, value, val->type ());
+}
 
-	sym = lookup_language_this (lang, b).symbol;
-	if (!sym)
-	  error (_("no `%s' found"), lang->la_name_of_this);
+void
+var_value_operation::do_generate_ax (struct expression *exp,
+				     struct agent_expr *ax,
+				     struct axs_value *value,
+				     struct type *cast_type)
+{
+  gen_var_ref (ax, value, std::get<0> (m_storage).symbol);
 
-	gen_var_ref (ax, value, sym);
+  if (value->optimized_out)
+    error (_("`%s' has been optimized out, cannot use"),
+	   std::get<0> (m_storage).symbol->print_name ());
 
-	if (value->optimized_out)
-	  error (_("`%s' has been optimized out, cannot use"),
-		 sym->print_name ());
+  if (value->type->code () == TYPE_CODE_ERROR)
+    {
+      if (cast_type == nullptr)
+	error_unknown_type (std::get<0> (m_storage).symbol->print_name ());
+      value->type = cast_type;
+    }
+}
 
-	(*pc) += 2;
-      }
-      break;
+void
+logical_and_operation::do_generate_ax (struct expression *exp,
+				       struct agent_expr *ax,
+				       struct axs_value *value,
+				       struct type *cast_type)
+{
+  struct axs_value value1, value2;
+  int if1, go1, if2, go2, end;
 
-    case OP_SCOPE:
-      {
-	struct type *type = (*pc)[1].type;
-	int length = longest_to_int ((*pc)[2].longconst);
-	char *name = &(*pc)[3].string;
-	int found;
-
-	found = gen_aggregate_elt_ref (ax, value, type, name);
-	if (!found)
-	  error (_("There is no field named %s"), name);
-	(*pc) += 5 + BYTES_TO_EXP_ELEM (length + 1);
-      }
-      break;
+  /* Generate the obvious sequence of tests and jumps.  */
+  std::get<0> (m_storage)->generate_ax (exp, ax, &value1);
+  gen_usual_unary (ax, &value1);
+  if1 = ax_goto (ax, aop_if_goto);
+  go1 = ax_goto (ax, aop_goto);
+  ax_label (ax, if1, ax->buf.size ());
+  std::get<1> (m_storage)->generate_ax (exp, ax, &value2);
+  gen_usual_unary (ax, &value2);
+  if2 = ax_goto (ax, aop_if_goto);
+  go2 = ax_goto (ax, aop_goto);
+  ax_label (ax, if2, ax->buf.size ());
+  ax_const_l (ax, 1);
+  end = ax_goto (ax, aop_goto);
+  ax_label (ax, go1, ax->buf.size ());
+  ax_label (ax, go2, ax->buf.size ());
+  ax_const_l (ax, 0);
+  ax_label (ax, end, ax->buf.size ());
+  value->kind = axs_rvalue;
+  value->type = builtin_type (ax->gdbarch)->builtin_int;
+}
 
-    case OP_TYPE:
-    case OP_TYPEOF:
-    case OP_DECLTYPE:
-      error (_("Attempt to use a type name as an expression."));
+void
+logical_or_operation::do_generate_ax (struct expression *exp,
+				      struct agent_expr *ax,
+				      struct axs_value *value,
+				      struct type *cast_type)
+{
+  struct axs_value value1, value2;
+  int if1, if2, end;
+
+  /* Generate the obvious sequence of tests and jumps.  */
+  std::get<0> (m_storage)->generate_ax (exp, ax, &value1);
+  gen_usual_unary (ax, &value1);
+  if1 = ax_goto (ax, aop_if_goto);
+  std::get<1> (m_storage)->generate_ax (exp, ax, &value2);
+  gen_usual_unary (ax, &value2);
+  if2 = ax_goto (ax, aop_if_goto);
+  ax_const_l (ax, 0);
+  end = ax_goto (ax, aop_goto);
+  ax_label (ax, if1, ax->buf.size ());
+  ax_label (ax, if2, ax->buf.size ());
+  ax_const_l (ax, 1);
+  ax_label (ax, end, ax->buf.size ());
+  value->kind = axs_rvalue;
+  value->type = builtin_type (ax->gdbarch)->builtin_int;
+}
 
-    default:
-      error (_("Unsupported operator %s (%d) in expression."),
-	     op_name (exp, op), op);
-    }
 }
 
 /* This handles the middle-to-right-side of code generation for binary
@@ -2277,38 +2078,37 @@ gen_expr (struct expression *exp, union
 
 static void
 gen_expr_binop_rest (struct expression *exp,
-		     enum exp_opcode op, union exp_element **pc,
+		     enum exp_opcode op,
 		     struct agent_expr *ax, struct axs_value *value,
 		     struct axs_value *value1, struct axs_value *value2)
 {
   struct type *int_type = builtin_type (ax->gdbarch)->builtin_int;
 
-  gen_expr (exp, pc, ax, value2);
   gen_usual_unary (ax, value2);
   gen_usual_arithmetic (ax, value1, value2);
   switch (op)
     {
     case BINOP_ADD:
-      if (TYPE_CODE (value1->type) == TYPE_CODE_INT
-	  && pointer_type (value2->type))
+      if (strip_range_type (value1->type)->code () == TYPE_CODE_INT
+	  && value2->type->is_pointer_or_reference ())
 	{
 	  /* Swap the values and proceed normally.  */
 	  ax_simple (ax, aop_swap);
 	  gen_ptradd (ax, value, value2, value1);
 	}
-      else if (pointer_type (value1->type)
-	       && TYPE_CODE (value2->type) == TYPE_CODE_INT)
+      else if (value1->type->is_pointer_or_reference ()
+	       && strip_range_type (value2->type)->code () == TYPE_CODE_INT)
 	gen_ptradd (ax, value, value1, value2);
       else
 	gen_binop (ax, value, value1, value2,
 		   aop_add, aop_add, 1, "addition");
       break;
     case BINOP_SUB:
-      if (pointer_type (value1->type)
-	  && TYPE_CODE (value2->type) == TYPE_CODE_INT)
+      if (value1->type->is_pointer_or_reference ()
+	  && strip_range_type (value2->type)->code () == TYPE_CODE_INT)
 	gen_ptrsub (ax,value, value1, value2);
-      else if (pointer_type (value1->type)
-	       && pointer_type (value2->type))
+      else if (value1->type->is_pointer_or_reference ()
+	       && value2->type->is_pointer_or_reference ())
 	/* FIXME --- result type should be ptrdiff_t */
 	gen_ptrdiff (ax, value, value1, value2,
 		     builtin_type (ax->gdbarch)->builtin_long);
@@ -2351,12 +2151,12 @@ gen_expr_binop_rest (struct expression *
 	       an array or pointer type (like a plain int variable for
 	       example), then report this as an error.  */
 	    type = check_typedef (value1->type);
-	    if (TYPE_CODE (type) != TYPE_CODE_ARRAY
-		&& TYPE_CODE (type) != TYPE_CODE_PTR)
+	    if (type->code () != TYPE_CODE_ARRAY
+		&& type->code () != TYPE_CODE_PTR)
 	      {
-		if (TYPE_NAME (type))
+		if (type->name ())
 		  error (_("cannot subscript something of type `%s'"),
-			 TYPE_NAME (type));
+			 type->name ());
 		else
 		  error (_("cannot subscript requested type"));
 	      }
@@ -2417,10 +2217,107 @@ gen_expr_binop_rest (struct expression *
     default:
       /* We should only list operators in the outer case statement
 	 that we actually handle in the inner case statement.  */
-      internal_error (__FILE__, __LINE__,
-		      _("gen_expr: op case sets don't match"));
+      internal_error (_("gen_expr: op case sets don't match"));
+    }
+}
+
+/* A helper function that emits a binop based on two operations.  */
+
+void
+gen_expr_binop (struct expression *exp,
+		enum exp_opcode op,
+		expr::operation *lhs, expr::operation *rhs,
+		struct agent_expr *ax, struct axs_value *value)
+{
+  struct axs_value value1, value2;
+
+  lhs->generate_ax (exp, ax, &value1);
+  gen_usual_unary (ax, &value1);
+  rhs->generate_ax (exp, ax, &value2);
+  gen_expr_binop_rest (exp, op, ax, value, &value1, &value2);
+}
+
+/* A helper function that emits a structop based on an operation and a
+   member name.  */
+
+void
+gen_expr_structop (struct expression *exp,
+		   enum exp_opcode op,
+		   expr::operation *lhs,
+		   const char *name,
+		   struct agent_expr *ax, struct axs_value *value)
+{
+  lhs->generate_ax (exp, ax, value);
+  if (op == STRUCTOP_STRUCT)
+    gen_struct_ref (ax, value, name, ".", "structure or union");
+  else if (op == STRUCTOP_PTR)
+    gen_struct_ref (ax, value, name, "->",
+		    "pointer to a structure or union");
+  else
+    /* If this `if' chain doesn't handle it, then the case list
+       shouldn't mention it, and we shouldn't be here.  */
+    internal_error (_("gen_expr: unhandled struct case"));
+}
+
+/* A helper function that emits a unary operation.  */
+
+void
+gen_expr_unop (struct expression *exp,
+	       enum exp_opcode op,
+	       expr::operation *lhs,
+	       struct agent_expr *ax, struct axs_value *value)
+{
+  struct axs_value value1, value2;
+
+  switch (op)
+    {
+    case UNOP_NEG:
+      gen_int_literal (ax, &value1, 0,
+		       builtin_type (ax->gdbarch)->builtin_int);
+      gen_usual_unary (ax, &value1);	/* shouldn't do much */
+      lhs->generate_ax (exp, ax, &value2);
+      gen_usual_unary (ax, &value2);
+      gen_usual_arithmetic (ax, &value1, &value2);
+      gen_binop (ax, value, &value1, &value2, aop_sub, aop_sub, 1, "negation");
+      break;
+
+    case UNOP_PLUS:
+      /* + FOO is equivalent to 0 + FOO, which can be optimized.  */
+      lhs->generate_ax (exp, ax, value);
+      gen_usual_unary (ax, value);
+      break;
+
+    case UNOP_LOGICAL_NOT:
+      lhs->generate_ax (exp, ax, value);
+      gen_usual_unary (ax, value);
+      gen_logical_not (ax, value,  builtin_type (ax->gdbarch)->builtin_int);
+      break;
+
+    case UNOP_COMPLEMENT:
+      lhs->generate_ax (exp, ax, value);
+      gen_usual_unary (ax, value);
+      gen_integral_promotions (ax, value);
+      gen_complement (ax, value);
+      break;
+
+    case UNOP_IND:
+      lhs->generate_ax (exp, ax, value);
+      gen_usual_unary (ax, value);
+      if (!value->type->is_pointer_or_reference ())
+	error (_("Argument of unary `*' is not a pointer."));
+      gen_deref (value);
+      break;
+
+    case UNOP_ADDR:
+      lhs->generate_ax (exp, ax, value);
+      gen_address_of (value);
+      break;
+
+    default:
+      gdb_assert_not_reached ("invalid case in gen_expr_unop");
     }
 }
+
 
 
 /* Given a single variable and a scope, generate bytecodes to trace
@@ -2435,7 +2332,7 @@ gen_trace_for_var (CORE_ADDR scope, stru
   agent_expr_up ax (new agent_expr (gdbarch, scope));
   struct axs_value value;
 
-  ax->tracing = 1;
+  ax->tracing = true;
   ax->trace_string = trace_string;
   gen_var_ref (ax.get (), &value, var);
 
@@ -2466,14 +2363,12 @@ gen_trace_for_expr (CORE_ADDR scope, str
 		    int trace_string)
 {
   agent_expr_up ax (new agent_expr (expr->gdbarch, scope));
-  union exp_element *pc;
   struct axs_value value;
 
-  pc = expr->elts;
-  ax->tracing = 1;
+  ax->tracing = true;
   ax->trace_string = trace_string;
   value.optimized_out = 0;
-  gen_expr (expr, &pc, ax.get (), &value);
+  expr->op->generate_ax (expr, ax.get (), &value);
 
   /* Make sure we record the final object, and get rid of it.  */
   gen_traced_pop (ax.get (), &value);
@@ -2495,13 +2390,11 @@ agent_expr_up
 gen_eval_for_expr (CORE_ADDR scope, struct expression *expr)
 {
   agent_expr_up ax (new agent_expr (expr->gdbarch, scope));
-  union exp_element *pc;
   struct axs_value value;
 
-  pc = expr->elts;
-  ax->tracing = 0;
+  ax->tracing = false;
   value.optimized_out = 0;
-  gen_expr (expr, &pc, ax.get (), &value);
+  expr->op->generate_ax (expr, ax.get (), &value);
 
   require_rvalue (ax.get (), &value);
 
@@ -2518,7 +2411,7 @@ gen_trace_for_return_address (CORE_ADDR
   agent_expr_up ax (new agent_expr (gdbarch, scope));
   struct axs_value value;
 
-  ax->tracing = 1;
+  ax->tracing = true;
   ax->trace_string = trace_string;
 
   gdbarch_gen_return_address (gdbarch, ax.get (), &value, scope);
@@ -2543,20 +2436,18 @@ gen_printf (CORE_ADDR scope, struct gdba
 	    int nargs, struct expression **exprs)
 {
   agent_expr_up ax (new agent_expr (gdbarch, scope));
-  union exp_element *pc;
   struct axs_value value;
   int tem;
 
   /* We're computing values, not doing side effects.  */
-  ax->tracing = 0;
+  ax->tracing = false;
 
   /* Evaluate and push the args on the stack in reverse order,
      for simplicity of collecting them on the target side.  */
   for (tem = nargs - 1; tem >= 0; --tem)
     {
-      pc = exprs[tem]->elts;
       value.optimized_out = 0;
-      gen_expr (exprs[tem], &pc, ax.get (), &value);
+      exprs[tem]->op->generate_ax (exprs[tem], ax.get (), &value);
       require_rvalue (ax.get (), &value);
     }
 
@@ -2584,7 +2475,7 @@ agent_eval_command_one (const char *exp,
   if (!eval)
     {
       if (*exp == '/')
-        exp = decode_agent_options (exp, &trace_string);
+	exp = decode_agent_options (exp, &trace_string);
     }
 
   agent_expr_up agent;
@@ -2618,7 +2509,7 @@ agent_eval_command_one (const char *exp,
 }
 
 static void
-agent_command_1 (const char *exp, int eval)
+maint_agent_command_1 (const char *exp, int eval)
 {
   /* We don't deal with overlay debugging at the moment.  We need to
      think more carefully about this.  If you copy this code into
@@ -2634,14 +2525,14 @@ agent_command_1 (const char *exp, int ev
     {
       struct linespec_result canonical;
 
-      event_location_up location
-	= new_linespec_location (&exp, symbol_name_match_type::WILD);
-      decode_line_full (location.get (), DECODE_LINE_FUNFIRSTLINE, NULL,
+      location_spec_up locspec
+	= new_linespec_location_spec (&exp, symbol_name_match_type::WILD);
+      decode_line_full (locspec.get (), DECODE_LINE_FUNFIRSTLINE, NULL,
 			NULL, 0, &canonical,
 			NULL, NULL);
       exp = skip_spaces (exp);
       if (exp[0] == ',')
-        {
+	{
 	  exp++;
 	  exp = skip_spaces (exp);
 	}
@@ -2656,9 +2547,9 @@ agent_command_1 (const char *exp, int ev
 }
 
 static void
-agent_command (const char *exp, int from_tty)
+maint_agent_command (const char *exp, int from_tty)
 {
-  agent_command_1 (exp, 0);
+  maint_agent_command_1 (exp, 0);
 }
 
 /* Parse the given expression, compile it into an agent expression
@@ -2666,9 +2557,9 @@ agent_command (const char *exp, int from
    expression.  */
 
 static void
-agent_eval_command (const char *exp, int from_tty)
+maint_agent_eval_command (const char *exp, int from_tty)
 {
-  agent_command_1 (exp, 1);
+  maint_agent_command_1 (exp, 1);
 }
 
 /* Parse the given expression, compile it into an agent expression
@@ -2677,7 +2568,7 @@ agent_eval_command (const char *exp, int
 static void
 maint_agent_printf_command (const char *cmdrest, int from_tty)
 {
-  struct frame_info *fi = get_current_frame ();	/* need current scope */
+  frame_info_ptr fi = get_current_frame ();	/* need current scope */
   const char *format_start, *format_end;
 
   /* We don't deal with overlay debugging at the moment.  We need to
@@ -2719,7 +2610,8 @@ maint_agent_printf_command (const char *
       const char *cmd1;
 
       cmd1 = cmdrest;
-      expression_up expr = parse_exp_1 (&cmd1, 0, (struct block *) 0, 1);
+      expression_up expr = parse_exp_1 (&cmd1, 0, (struct block *) 0,
+					PARSER_COMMA_TERMINATES);
       argvec.push_back (expr.release ());
       cmdrest = cmd1;
       if (*cmdrest == ',')
@@ -2743,10 +2635,11 @@ maint_agent_printf_command (const char *
 
 /* Initialization code.  */
 
+void _initialize_ax_gdb ();
 void
-_initialize_ax_gdb (void)
+_initialize_ax_gdb ()
 {
-  add_cmd ("agent", class_maintenance, agent_command,
+  add_cmd ("agent", class_maintenance, maint_agent_command,
 	   _("\
 Translate an expression into remote agent bytecode for tracing.\n\
 Usage: maint agent [-at LOCATION,] EXPRESSION\n\
@@ -2754,7 +2647,7 @@ If -at is given, generate remote agent b
 If not, generate remote agent bytecode for current frame pc address."),
 	   &maintenancelist);
 
-  add_cmd ("agent-eval", class_maintenance, agent_eval_command,
+  add_cmd ("agent-eval", class_maintenance, maint_agent_eval_command,
 	   _("\
 Translate an expression into remote agent bytecode for evaluation.\n\
 Usage: maint agent-eval [-at LOCATION,] EXPRESSION\n\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax-gdb.h ./gdb/ax-gdb.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax-gdb.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/ax-gdb.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* GDB-specific functions for operating on agent expressions
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,10 +19,9 @@
 #ifndef AX_GDB_H
 #define AX_GDB_H
 
-#include "ax.h"  /* For agent_expr_up.  */
+#include "ax.h"
 
 struct expression;
-union exp_element;
 
 /* Types and enums */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax-general.c ./gdb/ax-general.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax-general.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/ax-general.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Functions for manipulating expressions designed to be executed on the agent
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,8 +28,6 @@
 #include "value.h"
 #include "user-regs.h"
 
-static void grow_expr (struct agent_expr *x, int n);
-
 static void append_const (struct agent_expr *x, LONGEST val, int n);
 
 static LONGEST read_const (struct agent_expr *x, int o, int n);
@@ -38,59 +36,18 @@ static void generic_ext (struct agent_ex
 
 /* Functions for building expressions.  */
 
-agent_expr::agent_expr (struct gdbarch *gdbarch, CORE_ADDR scope)
-{
-  this->len = 0;
-  this->size = 1;		/* Change this to a larger value once
-				   reallocation code is tested.  */
-  this->buf = (unsigned char *) xmalloc (this->size);
-
-  this->gdbarch = gdbarch;
-  this->scope = scope;
-
-  /* Bit vector for registers used.  */
-  this->reg_mask_len = 1;
-  this->reg_mask = XCNEWVEC (unsigned char, this->reg_mask_len);
-
-  this->tracing = 0;
-  this->trace_string = 0;
-}
-
-agent_expr::~agent_expr ()
-{
-  xfree (this->buf);
-  xfree (this->reg_mask);
-}
-
-/* Make sure that X has room for at least N more bytes.  This doesn't
-   affect the length, just the allocated size.  */
-static void
-grow_expr (struct agent_expr *x, int n)
-{
-  if (x->len + n > x->size)
-    {
-      x->size *= 2;
-      if (x->size < x->len + n)
-	x->size = x->len + n + 10;
-      x->buf = (unsigned char *) xrealloc (x->buf, x->size);
-    }
-}
-
-
 /* Append the low N bytes of VAL as an N-byte integer to the
    expression X, in big-endian order.  */
 static void
 append_const (struct agent_expr *x, LONGEST val, int n)
 {
-  int i;
-
-  grow_expr (x, n);
-  for (i = n - 1; i >= 0; i--)
+  size_t len = x->buf.size ();
+  x->buf.resize (len + n);
+  for (int i = n - 1; i >= 0; i--)
     {
-      x->buf[x->len + i] = val & 0xff;
+      x->buf[len + i] = val & 0xff;
       val >>= 8;
     }
-  x->len += n;
 }
 
 
@@ -103,7 +60,7 @@ read_const (struct agent_expr *x, int o,
   LONGEST accum = 0;
 
   /* Make sure we're not reading off the end of the expression.  */
-  if (o + n > x->len)
+  if (o + n > x->buf.size ())
     error (_("GDB bug: ax-general.c (read_const): incomplete constant"));
 
   for (i = 0; i < n; i++)
@@ -117,8 +74,7 @@ read_const (struct agent_expr *x, int o,
 void
 ax_raw_byte (struct agent_expr *x, gdb_byte byte)
 {
-  grow_expr (x, 1);
-  x->buf[x->len++] = byte;
+  x->buf.push_back (byte);
 }
 
 /* Append a simple operator OP to EXPR.  */
@@ -154,9 +110,8 @@ generic_ext (struct agent_expr *x, enum
     error (_("GDB bug: ax-general.c (generic_ext): "
 	     "opcode has inadequate range"));
 
-  grow_expr (x, 2);
-  x->buf[x->len++] = op;
-  x->buf[x->len++] = n;
+  x->buf.push_back (op);
+  x->buf.push_back (n);
 }
 
 
@@ -185,9 +140,8 @@ ax_trace_quick (struct agent_expr *x, in
     error (_("GDB bug: ax-general.c (ax_trace_quick): "
 	     "size out of range for trace_quick"));
 
-  grow_expr (x, 2);
-  x->buf[x->len++] = aop_trace_quick;
-  x->buf[x->len++] = n;
+  x->buf.push_back (aop_trace_quick);
+  x->buf.push_back (n);
 }
 
 
@@ -200,12 +154,10 @@ ax_trace_quick (struct agent_expr *x, in
 int
 ax_goto (struct agent_expr *x, enum agent_op op)
 {
-  grow_expr (x, 3);
-  x->buf[x->len + 0] = op;
-  x->buf[x->len + 1] = 0xff;
-  x->buf[x->len + 2] = 0xff;
-  x->len += 3;
-  return x->len - 2;
+  x->buf.push_back (op);
+  x->buf.push_back (0xff);
+  x->buf.push_back (0xff);
+  return x->buf.size () - 2;
 }
 
 /* Suppose a given call to ax_goto returns some value PATCH.  When you
@@ -244,7 +196,7 @@ ax_const_l (struct agent_expr *x, LONGES
       LONGEST lim = ((LONGEST) 1) << (size - 1);
 
       if (-lim <= l && l <= lim - 1)
-        break;
+	break;
     }
 
   /* Emit the right opcode...  */
@@ -292,13 +244,11 @@ ax_reg (struct agent_expr *x, int reg)
 
       /* Make sure the register number is in range.  */
       if (reg < 0 || reg > 0xffff)
-        error (_("GDB bug: ax-general.c (ax_reg): "
+	error (_("GDB bug: ax-general.c (ax_reg): "
 		 "register number out of range"));
-      grow_expr (x, 3);
-      x->buf[x->len] = aop_reg;
-      x->buf[x->len + 1] = (reg >> 8) & 0xff;
-      x->buf[x->len + 2] = (reg) & 0xff;
-      x->len += 3;
+      x->buf.push_back (aop_reg);
+      x->buf.push_back ((reg >> 8) & 0xff);
+      x->buf.push_back ((reg) & 0xff);
     }
 }
 
@@ -309,15 +259,12 @@ ax_tsv (struct agent_expr *x, enum agent
 {
   /* Make sure the tsv number is in range.  */
   if (num < 0 || num > 0xffff)
-    internal_error (__FILE__, __LINE__, 
-		    _("ax-general.c (ax_tsv): variable "
+    internal_error (_("ax-general.c (ax_tsv): variable "
 		      "number is %d, out of range"), num);
 
-  grow_expr (x, 3);
-  x->buf[x->len] = op;
-  x->buf[x->len + 1] = (num >> 8) & 0xff;
-  x->buf[x->len + 2] = (num) & 0xff;
-  x->len += 3;
+  x->buf.push_back (op);
+  x->buf.push_back ((num >> 8) & 0xff);
+  x->buf.push_back ((num) & 0xff);
 }
 
 /* Append a string to the expression.  Note that the string is going
@@ -332,16 +279,14 @@ ax_string (struct agent_expr *x, const c
 
   /* Make sure the string length is reasonable.  */
   if (slen < 0 || slen > 0xffff)
-    internal_error (__FILE__, __LINE__, 
-		    _("ax-general.c (ax_string): string "
+    internal_error (_("ax-general.c (ax_string): string "
 		      "length is %d, out of allowed range"), slen);
 
-  grow_expr (x, 2 + slen + 1);
-  x->buf[x->len++] = ((slen + 1) >> 8) & 0xff;
-  x->buf[x->len++] = (slen + 1) & 0xff;
+  x->buf.push_back (((slen + 1) >> 8) & 0xff);
+  x->buf.push_back ((slen + 1) & 0xff);
   for (i = 0; i < slen; ++i)
-    x->buf[x->len++] = str[i];
-  x->buf[x->len++] = '\0';
+    x->buf.push_back (str[i]);
+  x->buf.push_back ('\0');
 }
 
 
@@ -349,7 +294,36 @@ ax_string (struct agent_expr *x, const c
 /* Functions for disassembling agent expressions, and otherwise
    debugging the expression compiler.  */
 
-struct aop_map aop_map[] =
+/* An entry in the opcode map.  */
+struct aop_map
+  {
+
+    /* The name of the opcode.  Null means that this entry is not a
+       valid opcode --- a hole in the opcode space.  */
+    const char *name;
+
+    /* All opcodes take no operands from the bytecode stream, or take
+       unsigned integers of various sizes.  If this is a positive number
+       n, then the opcode is followed by an n-byte operand, which should
+       be printed as an unsigned integer.  If this is zero, then the
+       opcode takes no operands from the bytecode stream.
+
+       If we get more complicated opcodes in the future, don't add other
+       magic values of this; that's a crock.  Add an `enum encoding'
+       field to this, or something like that.  */
+    int op_size;
+
+    /* The size of the data operated upon, in bits, for bytecodes that
+       care about that (ref and const).  Zero for all others.  */
+    int data_size;
+
+    /* Number of stack elements consumed, and number produced.  */
+    int consumed, produced;
+  };
+
+/* Map of the bytecodes, indexed by bytecode number.  */
+
+static struct aop_map aop_map[] =
 {
   {0, 0, 0, 0, 0}
 #define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) \
@@ -365,40 +339,37 @@ ax_print (struct ui_file *f, struct agen
 {
   int i;
 
-  fprintf_filtered (f, _("Scope: %s\n"), paddress (x->gdbarch, x->scope));
-  fprintf_filtered (f, _("Reg mask:"));
-  for (i = 0; i < x->reg_mask_len; ++i)
-    fprintf_filtered (f, _(" %02x"), x->reg_mask[i]);
-  fprintf_filtered (f, _("\n"));
-
-  /* Check the size of the name array against the number of entries in
-     the enum, to catch additions that people didn't sync.  */
-  if ((sizeof (aop_map) / sizeof (aop_map[0]))
-      != aop_last)
-    error (_("GDB bug: ax-general.c (ax_print): opcode map out of sync"));
+  gdb_printf (f, _("Scope: %s\n"), paddress (x->gdbarch, x->scope));
+  gdb_printf (f, _("Reg mask:"));
+  for (i = 0; i < x->reg_mask.size (); ++i)
+    {
+      if ((i % 8) == 0)
+	gdb_printf (f, " ");
+      gdb_printf (f, _("%d"), (int) x->reg_mask[i]);
+    }
+  gdb_printf (f, _("\n"));
 
-  for (i = 0; i < x->len;)
+  for (i = 0; i < x->buf.size ();)
     {
       enum agent_op op = (enum agent_op) x->buf[i];
 
-      if (op >= (sizeof (aop_map) / sizeof (aop_map[0]))
-	  || !aop_map[op].name)
+      if (op >= ARRAY_SIZE (aop_map) || aop_map[op].name == nullptr)
 	{
-	  fprintf_filtered (f, _("%3d  <bad opcode %02x>\n"), i, op);
+	  gdb_printf (f, _("%3d  <bad opcode %02x>\n"), i, op);
 	  i++;
 	  continue;
 	}
-      if (i + 1 + aop_map[op].op_size > x->len)
+      if (i + 1 + aop_map[op].op_size > x->buf.size ())
 	{
-	  fprintf_filtered (f, _("%3d  <incomplete opcode %s>\n"),
-			    i, aop_map[op].name);
+	  gdb_printf (f, _("%3d  <incomplete opcode %s>\n"),
+		      i, aop_map[op].name);
 	  break;
 	}
 
-      fprintf_filtered (f, "%3d  %s", i, aop_map[op].name);
+      gdb_printf (f, "%3d  %s", i, aop_map[op].name);
       if (aop_map[op].op_size > 0)
 	{
-	  fputs_filtered (" ", f);
+	  gdb_puts (" ", f);
 
 	  print_longest (f, 'd', 0,
 			 read_const (x, i + 1, aop_map[op].op_size));
@@ -412,11 +383,11 @@ ax_print (struct ui_file *f, struct agen
 	  nargs = x->buf[i++];
 	  slen = x->buf[i++];
 	  slen = slen * 256 + x->buf[i++];
-	  fprintf_filtered (f, _(" \"%s\", %d args"),
-			    &(x->buf[i]), nargs);
+	  gdb_printf (f, _(" \"%s\", %d args"),
+		      &(x->buf[i]), nargs);
 	  i += slen - 1;
 	}
-      fprintf_filtered (f, "\n");
+      gdb_printf (f, "\n");
       i += 1 + aop_map[op].op_size;
     }
 }
@@ -438,28 +409,14 @@ ax_reg_mask (struct agent_expr *ax, int
     }
   else
     {
-      int byte;
-
       /* Get the remote register number.  */
       reg = gdbarch_remote_register_number (ax->gdbarch, reg);
-      byte = reg / 8;
 
       /* Grow the bit mask if necessary.  */
-      if (byte >= ax->reg_mask_len)
-        {
-          /* It's not appropriate to double here.  This isn't a
-	     string buffer.  */
-          int new_len = byte + 1;
-          unsigned char *new_reg_mask
-	    = XRESIZEVEC (unsigned char, ax->reg_mask, new_len);
-
-          memset (new_reg_mask + ax->reg_mask_len, 0,
-	          (new_len - ax->reg_mask_len) * sizeof (ax->reg_mask[0]));
-          ax->reg_mask_len = new_len;
-          ax->reg_mask = new_reg_mask;
-        }
+      if (reg >= ax->reg_mask.size ())
+	ax->reg_mask.resize (reg + 1);
 
-      ax->reg_mask[byte] |= 1 << (reg % 8);
+      ax->reg_mask[reg] = true;
     }
 }
 
@@ -473,30 +430,30 @@ ax_reqs (struct agent_expr *ax)
 
   /* Jump target table.  targets[i] is non-zero iff we have found a
      jump to offset i.  */
-  char *targets = (char *) alloca (ax->len * sizeof (targets[0]));
+  char *targets = (char *) alloca (ax->buf.size () * sizeof (targets[0]));
 
   /* Instruction boundary table.  boundary[i] is non-zero iff our scan
      has reached an instruction starting at offset i.  */
-  char *boundary = (char *) alloca (ax->len * sizeof (boundary[0]));
+  char *boundary = (char *) alloca (ax->buf.size () * sizeof (boundary[0]));
 
   /* Stack height record.  If either targets[i] or boundary[i] is
      non-zero, heights[i] is the height the stack should have before
      executing the bytecode at that point.  */
-  int *heights = (int *) alloca (ax->len * sizeof (heights[0]));
+  int *heights = (int *) alloca (ax->buf.size () * sizeof (heights[0]));
 
   /* Pointer to a description of the present op.  */
   struct aop_map *op;
 
-  memset (targets, 0, ax->len * sizeof (targets[0]));
-  memset (boundary, 0, ax->len * sizeof (boundary[0]));
+  memset (targets, 0, ax->buf.size () * sizeof (targets[0]));
+  memset (boundary, 0, ax->buf.size () * sizeof (boundary[0]));
 
   ax->max_height = ax->min_height = height = 0;
   ax->flaw = agent_flaw_none;
   ax->max_data_size = 0;
 
-  for (i = 0; i < ax->len; i += 1 + op->op_size)
+  for (i = 0; i < ax->buf.size (); i += 1 + op->op_size)
     {
-      if (ax->buf[i] > (sizeof (aop_map) / sizeof (aop_map[0])))
+      if (ax->buf[i] >= ARRAY_SIZE (aop_map))
 	{
 	  ax->flaw = agent_flaw_bad_instruction;
 	  return;
@@ -510,15 +467,15 @@ ax_reqs (struct agent_expr *ax)
 	  return;
 	}
 
-      if (i + 1 + op->op_size > ax->len)
+      if (i + 1 + op->op_size > ax->buf.size ())
 	{
 	  ax->flaw = agent_flaw_incomplete_instruction;
 	  return;
 	}
 
       /* If this instruction is a forward jump target, does the
-         current stack height match the stack height at the jump
-         source?  */
+	 current stack height match the stack height at the jump
+	 source?  */
       if (targets[i] && (heights[i] != height))
 	{
 	  ax->flaw = agent_flaw_height_mismatch;
@@ -539,20 +496,20 @@ ax_reqs (struct agent_expr *ax)
 	ax->max_data_size = op->data_size;
 
       /* For jump instructions, check that the target is a valid
-         offset.  If it is, record the fact that that location is a
-         jump target, and record the height we expect there.  */
+	 offset.  If it is, record the fact that that location is a
+	 jump target, and record the height we expect there.  */
       if (aop_goto == op - aop_map
 	  || aop_if_goto == op - aop_map)
 	{
 	  int target = read_const (ax, i + 1, 2);
-	  if (target < 0 || target >= ax->len)
+	  if (target < 0 || target >= ax->buf.size ())
 	    {
 	      ax->flaw = agent_flaw_bad_jump;
 	      return;
 	    }
 
 	  /* Do we have any information about what the stack height
-             should be at the target?  */
+	     should be at the target?  */
 	  if (targets[target] || boundary[target])
 	    {
 	      if (heights[target] != height)
@@ -562,15 +519,15 @@ ax_reqs (struct agent_expr *ax)
 		}
 	    }
 
-          /* Record the target, along with the stack height we expect.  */
-          targets[target] = 1;
-          heights[target] = height;
+	  /* Record the target, along with the stack height we expect.  */
+	  targets[target] = 1;
+	  heights[target] = height;
 	}
 
       /* For unconditional jumps with a successor, check that the
-         successor is a target, and pick up its stack height.  */
+	 successor is a target, and pick up its stack height.  */
       if (aop_goto == op - aop_map
-	  && i + 3 < ax->len)
+	  && i + 3 < ax->buf.size ())
 	{
 	  if (!targets[i + 3])
 	    {
@@ -591,7 +548,7 @@ ax_reqs (struct agent_expr *ax)
     }
 
   /* Check that all the targets are on boundaries.  */
-  for (i = 0; i < ax->len; i++)
+  for (i = 0; i < ax->buf.size (); i++)
     if (targets[i] && !boundary[i])
       {
 	ax->flaw = agent_flaw_bad_jump;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax.h ./gdb/ax.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ax.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/ax.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Definitions for expressions designed to be executed on the agent
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -81,18 +81,13 @@ enum agent_flaws
 struct agent_expr
   {
     /* Construct an empty agent expression.  */
-    explicit agent_expr (struct gdbarch *gdbarch, CORE_ADDR scope);
-
-    ~agent_expr ();
+    agent_expr (struct gdbarch *gdbarch, CORE_ADDR scope)
+      : gdbarch (gdbarch),
+	scope (scope)
+    { }
 
     /* The bytes of the expression.  */
-    unsigned char *buf;
-
-    /* The number of bytecode in the expression.  */
-    int len;
-
-    /* Allocated space available currently.  */
-    int size;
+    gdb::byte_vector buf;
 
     /* The target architecture assumed to be in effect.  */
     struct gdbarch *gdbarch;
@@ -116,14 +111,10 @@ struct agent_expr
     int max_data_size;
 
     /* Bit vector of registers needed.  Register R is needed iff
-
-       reg_mask[R / 8] & (1 << (R % 8))
-
-       is non-zero.  Note!  You may not assume that this bitmask is long
-       enough to hold bits for all the registers of the machine; the
-       agent expression code has no idea how many registers the machine
-       has.  However, the bitmask is reg_mask_len bytes long, so the
-       valid register numbers run from 0 to reg_mask_len * 8 - 1.
+       reg_mask[R] is non-zero.  Note!  You may not assume that this
+       bitmask is long enough to hold bits for all the registers of
+       the machine; the agent expression code has no idea how many
+       registers the machine has.
 
        Also note that this mask may contain registers that are needed
        for the original collection expression to work, but that are
@@ -132,8 +123,7 @@ struct agent_expr
        compiler sets the mask bit and skips generating a bytecode whose
        result is going to be discarded anyway.
     */
-    int reg_mask_len;
-    unsigned char *reg_mask;
+    std::vector<bool> reg_mask;
 
     /* For the data tracing facility, we need to insert `trace' bytecodes
        before each data fetch; this records all the memory that the
@@ -141,16 +131,16 @@ struct agent_expr
        be available when the user later tries to evaluate the expression
        in GDB.
 
-       Setting the flag 'tracing' to non-zero enables the code that
+       Setting the flag 'tracing' to true enables the code that
        emits the trace bytecodes at the appropriate points.  */
 
-    unsigned int tracing : 1;
+    bool tracing = false;
 
     /* This indicates that pointers to chars should get an added
        tracenz bytecode to record nonzero bytes, up to a length that
        is the value of trace_string.  */
 
-    int trace_string;
+    int trace_string = 0;
   };
 
 /* An agent_expr owning pointer.  */
@@ -164,7 +154,6 @@ enum agent_op
     aop_ ## NAME = VALUE,
 #include "gdbsupport/ax.def"
 #undef DEFOP
-    aop_last
   };
 
 
@@ -231,36 +220,6 @@ extern void ax_string (struct agent_expr
 /* Disassemble the expression EXPR, writing to F.  */
 extern void ax_print (struct ui_file *f, struct agent_expr * EXPR);
 
-/* An entry in the opcode map.  */
-struct aop_map
-  {
-
-    /* The name of the opcode.  Null means that this entry is not a
-       valid opcode --- a hole in the opcode space.  */
-    const char *name;
-
-    /* All opcodes take no operands from the bytecode stream, or take
-       unsigned integers of various sizes.  If this is a positive number
-       n, then the opcode is followed by an n-byte operand, which should
-       be printed as an unsigned integer.  If this is zero, then the
-       opcode takes no operands from the bytecode stream.
-
-       If we get more complicated opcodes in the future, don't add other
-       magic values of this; that's a crock.  Add an `enum encoding'
-       field to this, or something like that.  */
-    int op_size;
-
-    /* The size of the data operated upon, in bits, for bytecodes that
-       care about that (ref and const).  Zero for all others.  */
-    int data_size;
-
-    /* Number of stack elements consumed, and number produced.  */
-    int consumed, produced;
-  };
-
-/* Map of the bytecodes, indexed by bytecode number.  */
-extern struct aop_map aop_map[];
-
 /* Given an agent expression AX, analyze and update its requirements.  */
 
 extern void ax_reqs (struct agent_expr *ax);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bcache.c ./gdb/bcache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bcache.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bcache.c	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
    Written by Fred Fish <fnf@cygnus.com>
    Rewritten by Jim Blandy <jimb@cygnus.com>
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,7 +20,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "bcache.h"
 
 #include <algorithm>
@@ -68,7 +68,7 @@ bcache::expand_hash_table ()
      so we roughly double the table size each time.  After we fall off 
      the end of this table, we just double.  Don't laugh --- there have
      been executables sighted with a gigabyte of debug info.  */
-  static unsigned long sizes[] = { 
+  static const unsigned long sizes[] = {
     1021, 2053, 4099, 8191, 16381, 32771,
     65537, 131071, 262144, 524287, 1048573, 2097143,
     4194301, 8388617, 16777213, 33554467, 67108859, 134217757,
@@ -85,10 +85,10 @@ bcache::expand_hash_table ()
 
   /* Find the next size.  */
   new_num_buckets = m_num_buckets * 2;
-  for (i = 0; i < (sizeof (sizes) / sizeof (sizes[0])); i++)
-    if (sizes[i] > m_num_buckets)
+  for (unsigned long a_size : sizes)
+    if (a_size > m_num_buckets)
       {
-	new_num_buckets = sizes[i];
+	new_num_buckets = a_size;
 	break;
       }
 
@@ -113,7 +113,7 @@ bcache::expand_hash_table ()
 	  struct bstring **new_bucket;
 	  next = s->next;
 
-	  new_bucket = &new_buckets[(m_hash_function (&s->d.data, s->length)
+	  new_bucket = &new_buckets[(this->hash (&s->d.data, s->length)
 				     % new_num_buckets)];
 	  s->next = *new_bucket;
 	  *new_bucket = s;
@@ -140,15 +140,15 @@ bcache::expand_hash_table ()
    returning an old entry.  */
 
 const void *
-bcache::insert (const void *addr, int length, int *added)
+bcache::insert (const void *addr, int length, bool *added)
 {
   unsigned long full_hash;
   unsigned short half_hash;
   int hash_index;
   struct bstring *s;
 
-  if (added)
-    *added = 0;
+  if (added != nullptr)
+    *added = false;
 
   /* Lazily initialize the obstack.  This can save quite a bit of
      memory in some cases.  */
@@ -167,7 +167,7 @@ bcache::insert (const void *addr, int le
   m_total_count++;
   m_total_size += length;
 
-  full_hash = m_hash_function (addr, length);
+  full_hash = this->hash (addr, length);
 
   half_hash = (full_hash >> 16);
   hash_index = full_hash % m_num_buckets;
@@ -180,7 +180,7 @@ bcache::insert (const void *addr, int le
       if (s->half_hash == half_hash)
 	{
 	  if (s->length == length
-	      && m_compare_function (&s->d.data, addr, length))
+	      && this->compare (&s->d.data, addr, length))
 	    return &s->d.data;
 	  else
 	    m_half_hash_miss_count++;
@@ -203,21 +203,28 @@ bcache::insert (const void *addr, int le
     m_unique_size += length;
     m_structure_size += BSTRING_SIZE (length);
 
-    if (added)
-      *added = 1;
+    if (added != nullptr)
+      *added = true;
 
     return &newobj->d.data;
   }
 }
 
 
-/* Compare the byte string at ADDR1 of lenght LENGHT to the
-   string at ADDR2.  Return 1 if they are equal.  */
+/* See bcache.h.  */
+
+unsigned long
+bcache::hash (const void *addr, int length)
+{
+  return fast_hash (addr, length, 0);
+}
+
+/* See bcache.h.  */
 
 int
-bcache::compare (const void *addr1, const void *addr2, int length)
+bcache::compare (const void *left, const void *right, int length)
 {
-  return memcmp (addr1, addr2, length) == 0;
+  return memcmp (left, right, length) == 0;
 }
 
 /* Free all the storage associated with BCACHE.  */
@@ -238,15 +245,15 @@ print_percentage (int portion, int total
 {
   if (total == 0)
     /* i18n: Like "Percentage of duplicates, by count: (not applicable)".  */
-    printf_filtered (_("(not applicable)\n"));
+    gdb_printf (_("(not applicable)\n"));
   else
-    printf_filtered ("%3d%%\n", (int) (portion * 100.0 / total));
+    gdb_printf ("%3d%%\n", (int) (portion * 100.0 / total));
 }
 
 
 /* Print statistics on BCACHE's memory usage and efficacity at
    eliminating duplication.  NAME should describe the kind of data
-   BCACHE holds.  Statistics are printed using `printf_filtered' and
+   BCACHE holds.  Statistics are printed using `gdb_printf' and
    its ilk.  */
 void
 bcache::print_statistics (const char *type)
@@ -318,59 +325,59 @@ bcache::print_statistics (const char *ty
     xfree (entry_size);
   }
 
-  printf_filtered (_("  M_Cached '%s' statistics:\n"), type);
-  printf_filtered (_("    Total object count:  %ld\n"), m_total_count);
-  printf_filtered (_("    Unique object count: %lu\n"), m_unique_count);
-  printf_filtered (_("    Percentage of duplicates, by count: "));
+  gdb_printf (_("  M_Cached '%s' statistics:\n"), type);
+  gdb_printf (_("    Total object count:  %ld\n"), m_total_count);
+  gdb_printf (_("    Unique object count: %lu\n"), m_unique_count);
+  gdb_printf (_("    Percentage of duplicates, by count: "));
   print_percentage (m_total_count - m_unique_count, m_total_count);
-  printf_filtered ("\n");
+  gdb_printf ("\n");
 
-  printf_filtered (_("    Total object size:   %ld\n"), m_total_size);
-  printf_filtered (_("    Unique object size:  %ld\n"), m_unique_size);
-  printf_filtered (_("    Percentage of duplicates, by size:  "));
+  gdb_printf (_("    Total object size:   %ld\n"), m_total_size);
+  gdb_printf (_("    Unique object size:  %ld\n"), m_unique_size);
+  gdb_printf (_("    Percentage of duplicates, by size:  "));
   print_percentage (m_total_size - m_unique_size, m_total_size);
-  printf_filtered ("\n");
+  gdb_printf ("\n");
 
-  printf_filtered (_("    Max entry size:     %d\n"), max_entry_size);
-  printf_filtered (_("    Average entry size: "));
+  gdb_printf (_("    Max entry size:     %d\n"), max_entry_size);
+  gdb_printf (_("    Average entry size: "));
   if (m_unique_count > 0)
-    printf_filtered ("%ld\n", m_unique_size / m_unique_count);
+    gdb_printf ("%ld\n", m_unique_size / m_unique_count);
   else
     /* i18n: "Average entry size: (not applicable)".  */
-    printf_filtered (_("(not applicable)\n"));    
-  printf_filtered (_("    Median entry size:  %d\n"), median_entry_size);
-  printf_filtered ("\n");
+    gdb_printf (_("(not applicable)\n"));    
+  gdb_printf (_("    Median entry size:  %d\n"), median_entry_size);
+  gdb_printf ("\n");
 
-  printf_filtered (_("    \
+  gdb_printf (_("    \
 Total memory used by bcache, including overhead: %ld\n"),
-		   m_structure_size);
-  printf_filtered (_("    Percentage memory overhead: "));
+	      m_structure_size);
+  gdb_printf (_("    Percentage memory overhead: "));
   print_percentage (m_structure_size - m_unique_size, m_unique_size);
-  printf_filtered (_("    Net memory savings:         "));
+  gdb_printf (_("    Net memory savings:         "));
   print_percentage (m_total_size - m_structure_size, m_total_size);
-  printf_filtered ("\n");
+  gdb_printf ("\n");
 
-  printf_filtered (_("    Hash table size:           %3d\n"), 
-		   m_num_buckets);
-  printf_filtered (_("    Hash table expands:        %lu\n"),
-		   m_expand_count);
-  printf_filtered (_("    Hash table hashes:         %lu\n"),
-		   m_total_count + m_expand_hash_count);
-  printf_filtered (_("    Half hash misses:          %lu\n"),
-		   m_half_hash_miss_count);
-  printf_filtered (_("    Hash table population:     "));
+  gdb_printf (_("    Hash table size:           %3d\n"), 
+	      m_num_buckets);
+  gdb_printf (_("    Hash table expands:        %lu\n"),
+	      m_expand_count);
+  gdb_printf (_("    Hash table hashes:         %lu\n"),
+	      m_total_count + m_expand_hash_count);
+  gdb_printf (_("    Half hash misses:          %lu\n"),
+	      m_half_hash_miss_count);
+  gdb_printf (_("    Hash table population:     "));
   print_percentage (occupied_buckets, m_num_buckets);
-  printf_filtered (_("    Median hash chain length:  %3d\n"),
-		   median_chain_length);
-  printf_filtered (_("    Average hash chain length: "));
+  gdb_printf (_("    Median hash chain length:  %3d\n"),
+	      median_chain_length);
+  gdb_printf (_("    Average hash chain length: "));
   if (m_num_buckets > 0)
-    printf_filtered ("%3lu\n", m_unique_count / m_num_buckets);
+    gdb_printf ("%3lu\n", m_unique_count / m_num_buckets);
   else
     /* i18n: "Average hash chain length: (not applicable)".  */
-    printf_filtered (_("(not applicable)\n"));
-  printf_filtered (_("    Maximum hash chain length: %3d\n"), 
-		   max_chain_length);
-  printf_filtered ("\n");
+    gdb_printf (_("(not applicable)\n"));
+  gdb_printf (_("    Maximum hash chain length: %3d\n"), 
+	      max_chain_length);
+  gdb_printf ("\n");
 }
 
 int
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bcache.h ./gdb/bcache.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bcache.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bcache.h	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
    Written by Fred Fish <fnf@cygnus.com>
    Rewritten by Jim Blandy <jimb@cygnus.com>
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -142,39 +142,35 @@ struct bstring;
 
 struct bcache
 {
-  /* Allocate a bcache.  HASH_FN and COMPARE_FN can be used to pass in
-     custom hash, and compare functions to be used by this bcache.  If
-     HASH_FUNCTION is NULL fast_hash() is used and if COMPARE_FUNCTION is
-     NULL memcmp() is used.  */
-
-  explicit bcache (unsigned long (*hash_fn)(const void *,
-					    int length) = nullptr,
-		   int (*compare_fn)(const void *, const void *,
-				     int length) = nullptr)
-    : m_hash_function (hash_fn == nullptr ? default_hash : hash_fn),
-      m_compare_function (compare_fn == nullptr ? compare : compare_fn)
-  {
-  }
-
-  ~bcache ();
+  virtual ~bcache ();
 
   /* Find a copy of the LENGTH bytes at ADDR in BCACHE.  If BCACHE has
      never seen those bytes before, add a copy of them to BCACHE.  In
      either case, return a pointer to BCACHE's copy of that string.
-     Since the cached value is ment to be read-only, return a const
+     Since the cached value is meant to be read-only, return a const
      buffer.  If ADDED is not NULL, set *ADDED to true if the bytes
      were newly added to the cache, or to false if the bytes were
      found in the cache.  */
 
-  const void *insert (const void *addr, int length, int *added = nullptr);
+  const void *insert (const void *addr, int length, bool *added = nullptr);
 
   /* Print statistics on this bcache's memory usage and efficacity at
      eliminating duplication.  TYPE should be a string describing the
      kind of data this bcache holds.  Statistics are printed using
-     `printf_filtered' and its ilk.  */
+     `gdb_printf' and its ilk.  */
   void print_statistics (const char *type);
   int memory_used ();
 
+protected:
+
+  /* Hash function to be used for this bcache object.  Defaults to
+     fast_hash.  */
+  virtual unsigned long hash (const void *addr, int length);
+
+  /* Compare function to be used for this bcache object.  Defaults to
+     memcmp.  */
+  virtual int compare (const void *left, const void *right, int length);
+
 private:
 
   /* All the bstrings are allocated here.  */
@@ -205,21 +201,6 @@ private:
      length/data compare missed.  */
   unsigned long m_half_hash_miss_count = 0;
 
-  /* Hash function to be used for this bcache object.  */
-  unsigned long (*m_hash_function)(const void *addr, int length);
-
-  /* Compare function to be used for this bcache object.  */
-  int (*m_compare_function)(const void *, const void *, int length);
-
-  /* Default compare function.  */
-  static int compare (const void *addr1, const void *addr2, int length);
-
-  /* Default hash function.  */
-  static unsigned long default_hash (const void *ptr, int length)
-  {
-    return fast_hash (ptr, length, 0);
-  }
-
   /* Expand the hash table.  */
   void expand_hash_table ();
 };
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfd-target.c ./gdb/bfd-target.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfd-target.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bfd-target.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Very simple "bfd" target, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -34,8 +34,7 @@ static const target_info target_bfd_targ
 class target_bfd : public target_ops
 {
 public:
-  explicit target_bfd (struct bfd *bfd);
-  ~target_bfd () override;
+  explicit target_bfd (const gdb_bfd_ref_ptr &bfd);
 
   const target_info &info () const override
   { return target_bfd_target_info; }
@@ -51,7 +50,7 @@ public:
 		  ULONGEST offset, ULONGEST len,
 		  ULONGEST *xfered_len) override;
 
-  target_section_table *get_section_table () override;
+  const std::vector<target_section> *get_section_table () override;
 
 private:
   /* The BFD we're wrapping.  */
@@ -60,7 +59,7 @@ private:
   /* The section table build from the ALLOC sections in BFD.  Note
      that we can't rely on extracting the BFD from a random section in
      the table, since the table can be legitimately empty.  */
-  struct target_section_table m_table;
+  std::vector<target_section> m_table;
 };
 
 target_xfer_status
@@ -76,38 +75,29 @@ target_bfd::xfer_partial (target_object
       {
 	return section_table_xfer_memory_partial (readbuf, writebuf,
 						  offset, len, xfered_len,
-						  m_table.sections,
-						  m_table.sections_end,
-						  NULL);
+						  m_table);
       }
     default:
       return TARGET_XFER_E_IO;
     }
 }
 
-target_section_table *
+const std::vector<target_section> *
 target_bfd::get_section_table ()
 {
   return &m_table;
 }
 
-target_bfd::target_bfd (struct bfd *abfd)
-  : m_bfd (gdb_bfd_ref_ptr::new_reference (abfd))
+target_bfd::target_bfd (const gdb_bfd_ref_ptr &abfd)
+  : m_bfd (abfd),
+    m_table (build_section_table (abfd.get ()))
 {
-  m_table.sections = NULL;
-  m_table.sections_end = NULL;
-  build_section_table (abfd, &m_table.sections, &m_table.sections_end);
 }
 
-target_bfd::~target_bfd ()
+target_ops_up
+target_bfd_reopen (const gdb_bfd_ref_ptr &abfd)
 {
-  xfree (m_table.sections);
-}
-
-target_ops *
-target_bfd_reopen (struct bfd *abfd)
-{
-  return new target_bfd (abfd);
+  return target_ops_up (new target_bfd (abfd));
 }
 
 void
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfd-target.h ./gdb/bfd-target.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfd-target.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bfd-target.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Very simple "bfd" target, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,12 +20,11 @@
 #ifndef BFD_TARGET_H
 #define BFD_TARGET_H
 
-struct bfd;
+#include "gdb_bfd.h"
+
 struct target_ops;
 
-/* Given an existing BFD, re-open it as a "struct target_ops".  This
-   acquires a new reference to the BFD.  This reference will be
-   released when the target is closed.  */
-struct target_ops *target_bfd_reopen (struct bfd *bfd);
+/* Given an existing BFD, re-open it as a "struct target_ops".  */
+target_ops_up target_bfd_reopen (const gdb_bfd_ref_ptr &bfd);
 
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfin-linux-tdep.c ./gdb/bfin-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfin-linux-tdep.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bfin-linux-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Analog Devices Blackfin processor, for GDB.
 
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    Contributed by Analog Devices, Inc.
 
@@ -95,7 +95,7 @@ static const int bfin_linux_sigcontext_r
 
 static void
 bfin_linux_sigframe_init (const struct tramp_frame *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  struct trad_frame_cache *this_cache,
 			  CORE_ADDR func)
 {
@@ -150,7 +150,7 @@ bfin_linux_get_syscall_number (struct gd
 static void
 bfin_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, 0);
 
   /* Set the sigtramp frame sniffer.  */
   tramp_frame_prepend_unwinder (gdbarch, &bfin_linux_sigframe);
@@ -158,12 +158,13 @@ bfin_linux_init_abi (struct gdbarch_info
   /* Functions for 'catch syscall'.  */
   set_xml_syscall_file_name (gdbarch, "syscalls/bfin-linux.xml");
   set_gdbarch_get_syscall_number (gdbarch,
-                                  bfin_linux_get_syscall_number);
+				  bfin_linux_get_syscall_number);
 }
 
+void _initialize_bfin_linux_tdep ();
 void
-_initialize_bfin_linux_tdep (void)
+_initialize_bfin_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_bfin, 0, GDB_OSABI_LINUX,
-                          bfin_linux_init_abi);
+			  bfin_linux_init_abi);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfin-tdep.c ./gdb/bfin-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfin-tdep.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bfin-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Analog Devices Blackfin processor, for GDB.
 
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    Contributed by Analog Devices, Inc.
 
@@ -30,8 +30,8 @@
 #include "trad-frame.h"
 #include "dis-asm.h"
 #include "sim-regno.h"
-#include "gdb/sim-bfin.h"
-#include "dwarf2-frame.h"
+#include "sim/sim-bfin.h"
+#include "dwarf2/frame.h"
 #include "symtab.h"
 #include "elf-bfd.h"
 #include "elf/bfin.h"
@@ -288,7 +288,7 @@ bfin_alloc_frame_cache (void)
 }
 
 static struct bfin_frame_cache *
-bfin_frame_cache (struct frame_info *this_frame, void **this_cache)
+bfin_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct bfin_frame_cache *cache;
   int i;
@@ -340,7 +340,7 @@ bfin_frame_cache (struct frame_info *thi
 }
 
 static void
-bfin_frame_this_id (struct frame_info *this_frame,
+bfin_frame_this_id (frame_info_ptr this_frame,
 		    void **this_cache,
 		    struct frame_id *this_id)
 {
@@ -355,7 +355,7 @@ bfin_frame_this_id (struct frame_info *t
 }
 
 static struct value *
-bfin_frame_prev_register (struct frame_info *this_frame,
+bfin_frame_prev_register (frame_info_ptr this_frame,
 			  void **this_cache,
 			  int regnum)
 {
@@ -374,6 +374,7 @@ bfin_frame_prev_register (struct frame_i
 
 static const struct frame_unwind bfin_frame_unwind =
 {
+  "bfin prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   bfin_frame_this_id,
@@ -508,9 +509,9 @@ bfin_push_dummy_call (struct gdbarch *gd
 
   for (i = nargs - 1; i >= 0; i--)
     {
-      struct type *value_type = value_enclosing_type (args[i]);
+      struct type *value_type = args[i]->enclosing_type ();
 
-      total_len += (TYPE_LENGTH (value_type) + 3) & ~3;
+      total_len += align_up (value_type->length (), 4);
     }
 
   /* At least twelve bytes of stack space must be allocated for the function's
@@ -524,12 +525,12 @@ bfin_push_dummy_call (struct gdbarch *gd
 
   for (i = nargs - 1; i >= 0; i--)
     {
-      struct type *value_type = value_enclosing_type (args[i]);
+      struct type *value_type = args[i]->enclosing_type ();
       struct type *arg_type = check_typedef (value_type);
-      int container_len = (TYPE_LENGTH (arg_type) + 3) & ~3;
+      int container_len = align_up (arg_type->length (), 4);
 
       sp -= container_len;
-      write_memory (sp, value_contents (args[i]), container_len);
+      write_memory (sp, args[i]->contents ().data (), container_len);
     }
 
   /* Initialize R0, R1, and R2 to the first 3 words of parameters.  */
@@ -597,7 +598,7 @@ bfin_sw_breakpoint_from_kind (struct gdb
 
   *size = kind;
 
-  if (strcmp (target_shortname, "sim") == 0)
+  if (strcmp (target_shortname (), "sim") == 0)
     return bfin_sim_breakpoint;
   else
     return bfin_breakpoint;
@@ -611,7 +612,7 @@ bfin_extract_return_value (struct type *
   struct gdbarch *gdbarch = regs->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   bfd_byte *valbuf = dst;
-  int len = TYPE_LENGTH (type);
+  int len = type->length ();
   ULONGEST tmp;
   int regno = BFIN_R0_REGNUM;
 
@@ -640,7 +641,7 @@ bfin_store_return_value (struct type *ty
      registers starting with R0.  This will always be a multiple of
      the register size.  */
 
-  int len = TYPE_LENGTH (type);
+  int len = type->length ();
   int regno = BFIN_R0_REGNUM;
 
   gdb_assert (len <= 8);
@@ -667,7 +668,7 @@ bfin_return_value (struct gdbarch *gdbar
 		   gdb_byte *readbuf,
 		   const gdb_byte *writebuf)
 {
-  if (TYPE_LENGTH (type) > 8)
+  if (type->length () > 8)
     return RETURN_VALUE_STRUCT_CONVENTION;
 
   if (readbuf)
@@ -695,8 +696,7 @@ bfin_pseudo_register_read (struct gdbarc
   enum register_status status;
 
   if (regnum != BFIN_CC_REGNUM)
-    internal_error (__FILE__, __LINE__,
-		    _("invalid register number %d"), regnum);
+    internal_error (_("invalid register number %d"), regnum);
 
   /* Extract the CC bit from the ASTAT register.  */
   status = regcache->raw_read (BFIN_ASTAT_REGNUM, buf);
@@ -715,8 +715,7 @@ bfin_pseudo_register_write (struct gdbar
   gdb_byte buf[BFIN_MAX_REGISTER_SIZE];
 
   if (regnum != BFIN_CC_REGNUM)
-    internal_error (__FILE__, __LINE__,
-		    _("invalid register number %d"), regnum);
+    internal_error (_("invalid register number %d"), regnum);
 
   /* Overlay the CC bit in the ASTAT register.  */
   regcache->raw_read (BFIN_ASTAT_REGNUM, buf);
@@ -725,7 +724,7 @@ bfin_pseudo_register_write (struct gdbar
 }
 
 static CORE_ADDR
-bfin_frame_base_address (struct frame_info *this_frame, void **this_cache)
+bfin_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct bfin_frame_cache *cache = bfin_frame_cache (this_frame, this_cache);
 
@@ -733,7 +732,7 @@ bfin_frame_base_address (struct frame_in
 }
 
 static CORE_ADDR
-bfin_frame_local_address (struct frame_info *this_frame, void **this_cache)
+bfin_frame_local_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct bfin_frame_cache *cache = bfin_frame_cache (this_frame, this_cache);
 
@@ -741,7 +740,7 @@ bfin_frame_local_address (struct frame_i
 }
 
 static CORE_ADDR
-bfin_frame_args_address (struct frame_info *this_frame, void **this_cache)
+bfin_frame_args_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct bfin_frame_cache *cache = bfin_frame_cache (this_frame, this_cache);
 
@@ -759,13 +758,14 @@ static const struct frame_base bfin_fram
 static CORE_ADDR
 bfin_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
 {
-  return (address & ~0x3);
+  return align_down (address, 4);
 }
 
 enum bfin_abi
 bfin_abi (struct gdbarch *gdbarch)
 {
-  return gdbarch_tdep (gdbarch)->bfin_abi;
+  bfin_gdbarch_tdep *tdep = gdbarch_tdep<bfin_gdbarch_tdep> (gdbarch);
+  return tdep->bfin_abi;
 }
 
 /* Initialize the current architecture based on INFO.  If possible,
@@ -778,8 +778,6 @@ bfin_abi (struct gdbarch *gdbarch)
 static struct gdbarch *
 bfin_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
-  struct gdbarch_tdep *tdep;
-  struct gdbarch *gdbarch;
   enum bfin_abi abi;
 
   abi = BFIN_ABI_FLAT;
@@ -790,19 +788,25 @@ bfin_gdbarch_init (struct gdbarch_info i
        arches != NULL;
        arches = gdbarch_list_lookup_by_info (arches->next, &info))
     {
-      if (gdbarch_tdep (arches->gdbarch)->bfin_abi != abi)
+      bfin_gdbarch_tdep *tdep
+	= gdbarch_tdep<bfin_gdbarch_tdep> (arches->gdbarch);
+
+      if (tdep->bfin_abi != abi)
 	continue;
+
       return arches->gdbarch;
     }
 
-  tdep = XCNEW (struct gdbarch_tdep);
-  gdbarch = gdbarch_alloc (&info, tdep);
+  gdbarch *gdbarch
+    = gdbarch_alloc (&info, gdbarch_tdep_up (new bfin_gdbarch_tdep));
+  bfin_gdbarch_tdep *tdep = gdbarch_tdep<bfin_gdbarch_tdep> (gdbarch);
 
   tdep->bfin_abi = abi;
 
   set_gdbarch_num_regs (gdbarch, BFIN_NUM_REGS);
   set_gdbarch_pseudo_register_read (gdbarch, bfin_pseudo_register_read);
-  set_gdbarch_pseudo_register_write (gdbarch, bfin_pseudo_register_write);
+  set_gdbarch_deprecated_pseudo_register_write (gdbarch,
+						bfin_pseudo_register_write);
   set_gdbarch_num_pseudo_regs (gdbarch, BFIN_NUM_PSEUDO_REGS);
   set_gdbarch_sp_regnum (gdbarch, BFIN_SP_REGNUM);
   set_gdbarch_pc_regnum (gdbarch, BFIN_PC_REGNUM);
@@ -833,8 +837,9 @@ bfin_gdbarch_init (struct gdbarch_info i
   return gdbarch;
 }
 
+void _initialize_bfin_tdep ();
 void
-_initialize_bfin_tdep (void)
+_initialize_bfin_tdep ()
 {
-  register_gdbarch_init (bfd_arch_bfin, bfin_gdbarch_init);
+  gdbarch_register (bfd_arch_bfin, bfin_gdbarch_init);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfin-tdep.h ./gdb/bfin-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bfin-tdep.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bfin-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Analog Devices Blackfin processor, for GDB.
 
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    Contributed by Analog Devices, Inc.
 
@@ -22,6 +22,8 @@
 #ifndef BFIN_TDEP_H
 #define BFIN_TDEP_H
 
+#include "gdbarch.h"
+
 enum gdb_regnum {
   /* Core Registers */
   BFIN_R0_REGNUM = 0,
@@ -94,10 +96,10 @@ enum bfin_abi
 };
 
 /* Target-dependent structure in gdbarch.  */
-struct gdbarch_tdep
+struct bfin_gdbarch_tdep : gdbarch_tdep_base
 {
   /* Which ABI is in use?  */
-  enum bfin_abi bfin_abi;
+  enum bfin_abi bfin_abi {};
 };
 
 /* Return the Blackfin ABI associated with GDBARCH.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/block.c ./gdb/block.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/block.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/block.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Block-related functions for the GNU debugger, GDB.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,7 @@
 #include "block.h"
 #include "symtab.h"
 #include "symfile.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "cp-support.h"
 #include "addrmap.h"
 #include "gdbtypes.h"
@@ -37,94 +37,87 @@ struct block_namespace_info : public all
   struct using_direct *using_decl = nullptr;
 };
 
-static void block_initialize_namespace (struct block *block,
-					struct obstack *obstack);
-
 /* See block.h.  */
 
 struct objfile *
-block_objfile (const struct block *block)
+block::objfile () const
 {
   const struct global_block *global_block;
 
-  if (BLOCK_FUNCTION (block) != NULL)
-    return symbol_objfile (BLOCK_FUNCTION (block));
+  if (function () != nullptr)
+    return function ()->objfile ();
 
-  global_block = (struct global_block *) block_global_block (block);
-  return COMPUNIT_OBJFILE (global_block->compunit_symtab);
+  global_block = (struct global_block *) this->global_block ();
+  return global_block->compunit_symtab->objfile ();
 }
 
 /* See block.  */
 
 struct gdbarch *
-block_gdbarch (const struct block *block)
+block::gdbarch () const
 {
-  if (BLOCK_FUNCTION (block) != NULL)
-    return symbol_arch (BLOCK_FUNCTION (block));
+  if (function () != nullptr)
+    return function ()->arch ();
 
-  return get_objfile_arch (block_objfile (block));
+  return objfile ()->arch ();
 }
 
 /* See block.h.  */
 
 bool
-contained_in (const struct block *a, const struct block *b,
-	      bool allow_nested)
+block::contains (const struct block *a, bool allow_nested) const
 {
-  if (!a || !b)
+  if (a == nullptr)
     return false;
 
   do
     {
-      if (a == b)
+      if (a == this)
 	return true;
       /* If A is a function block, then A cannot be contained in B,
-         except if A was inlined.  */
-      if (!allow_nested && BLOCK_FUNCTION (a) != NULL && !block_inlined_p (a))
-        return false;
-      a = BLOCK_SUPERBLOCK (a);
+	 except if A was inlined.  */
+      if (!allow_nested && a->function () != NULL && !a->inlined_p ())
+	return false;
+      a = a->superblock ();
     }
   while (a != NULL);
 
   return false;
 }
 
-
-/* Return the symbol for the function which contains a specified
-   lexical block, described by a struct block BL.  The return value
-   will not be an inlined function; the containing function will be
-   returned instead.  */
+/* See block.h.  */
 
 struct symbol *
-block_linkage_function (const struct block *bl)
+block::linkage_function () const
 {
-  while ((BLOCK_FUNCTION (bl) == NULL || block_inlined_p (bl))
-	 && BLOCK_SUPERBLOCK (bl) != NULL)
-    bl = BLOCK_SUPERBLOCK (bl);
+  const block *bl = this;
+
+  while ((bl->function () == NULL || bl->inlined_p ())
+	 && bl->superblock () != NULL)
+    bl = bl->superblock ();
 
-  return BLOCK_FUNCTION (bl);
+  return bl->function ();
 }
 
-/* Return the symbol for the function which contains a specified
-   block, described by a struct block BL.  The return value will be
-   the closest enclosing function, which might be an inline
-   function.  */
+/* See block.h.  */
 
 struct symbol *
-block_containing_function (const struct block *bl)
+block::containing_function () const
 {
-  while (BLOCK_FUNCTION (bl) == NULL && BLOCK_SUPERBLOCK (bl) != NULL)
-    bl = BLOCK_SUPERBLOCK (bl);
+  const block *bl = this;
+
+  while (bl->function () == NULL && bl->superblock () != NULL)
+    bl = bl->superblock ();
 
-  return BLOCK_FUNCTION (bl);
+  return bl->function ();
 }
 
-/* Return one if BL represents an inlined function.  */
+/* See block.h.  */
 
-int
-block_inlined_p (const struct block *bl)
+bool
+block::inlined_p () const
 {
-  return BLOCK_FUNCTION (bl) != NULL && SYMBOL_INLINED (BLOCK_FUNCTION (bl));
+  return function () != nullptr && function ()->is_inlined ();
 }
 
 /* A helper function that checks whether PC is in the blockvector BL.
@@ -138,8 +131,8 @@ find_block_in_blockvector (const struct
 
   /* If we have an addrmap mapping code addresses to blocks, then use
      that.  */
-  if (BLOCKVECTOR_MAP (bl))
-    return (const struct block *) addrmap_find (BLOCKVECTOR_MAP (bl), pc);
+  if (bl->map ())
+    return (const struct block *) bl->map ()->find (pc);
 
   /* Otherwise, use binary search to find the last block that starts
      before PC.
@@ -147,15 +140,15 @@ find_block_in_blockvector (const struct
      They both have the same START,END values.
      Historically this code would choose STATIC_BLOCK over GLOBAL_BLOCK but the
      fact that this choice was made was subtle, now we make it explicit.  */
-  gdb_assert (BLOCKVECTOR_NBLOCKS (bl) >= 2);
+  gdb_assert (bl->blocks ().size () >= 2);
   bot = STATIC_BLOCK;
-  top = BLOCKVECTOR_NBLOCKS (bl);
+  top = bl->blocks ().size ();
 
   while (top - bot > 1)
     {
       half = (top - bot + 1) >> 1;
-      b = BLOCKVECTOR_BLOCK (bl, bot + half);
-      if (BLOCK_START (b) <= pc)
+      b = bl->block (bot + half);
+      if (b->start () <= pc)
 	bot += half;
       else
 	top = bot + half;
@@ -165,8 +158,10 @@ find_block_in_blockvector (const struct
 
   while (bot >= STATIC_BLOCK)
     {
-      b = BLOCKVECTOR_BLOCK (bl, bot);
-      if (BLOCK_END (b) > pc)
+      b = bl->block (bot);
+      if (!(b->start () <= pc))
+	return NULL;
+      if (b->end () > pc)
 	return b;
       bot--;
     }
@@ -195,7 +190,7 @@ blockvector_for_pc_sect (CORE_ADDR pc, s
 	return 0;
     }
 
-  bl = COMPUNIT_BLOCKVECTOR (cust);
+  bl = cust->blockvector ();
 
   /* Then search that symtab for the smallest block that wins.  */
   b = find_block_in_blockvector (bl, pc);
@@ -223,15 +218,15 @@ struct call_site *
 call_site_for_pc (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   struct compunit_symtab *cust;
-  void **slot = NULL;
+  call_site *cs = nullptr;
 
   /* -1 as tail call PC can be already after the compilation unit range.  */
   cust = find_pc_compunit_symtab (pc - 1);
 
-  if (cust != NULL && COMPUNIT_CALL_SITE_HTAB (cust) != NULL)
-    slot = htab_find_slot (COMPUNIT_CALL_SITE_HTAB (cust), &pc, NO_INSERT);
+  if (cust != nullptr)
+    cs = cust->find_call_site (pc);
 
-  if (slot == NULL)
+  if (cs == nullptr)
     {
       struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (pc);
 
@@ -245,7 +240,7 @@ call_site_for_pc (struct gdbarch *gdbarc
 		    : msym.minsym->print_name ()));
     }
 
-  return (struct call_site *) *slot;
+  return cs;
 }
 
 /* Return the blockvector immediately containing the innermost lexical block
@@ -286,138 +281,123 @@ block_for_pc (CORE_ADDR pc)
 /* Now come some functions designed to deal with C++ namespace issues.
    The accessors are safe to use even in the non-C++ case.  */
 
-/* This returns the namespace that BLOCK is enclosed in, or "" if it
-   isn't enclosed in a namespace at all.  This travels the chain of
-   superblocks looking for a scope, if necessary.  */
+/* See block.h.  */
 
 const char *
-block_scope (const struct block *block)
+block::scope () const
 {
-  for (; block != NULL; block = BLOCK_SUPERBLOCK (block))
-    {
-      if (BLOCK_NAMESPACE (block) != NULL
-	  && BLOCK_NAMESPACE (block)->scope != NULL)
-	return BLOCK_NAMESPACE (block)->scope;
+  for (const block *block = this;
+       block != nullptr;
+       block = block->superblock ())
+    {
+      if (block->m_namespace_info != nullptr
+	  && block->m_namespace_info->scope != nullptr)
+	return block->m_namespace_info->scope;
     }
 
   return "";
 }
 
-/* Set BLOCK's scope member to SCOPE; if needed, allocate memory via
-   OBSTACK.  (It won't make a copy of SCOPE, however, so that already
-   has to be allocated correctly.)  */
+/* See block.h.  */
 
 void
-block_set_scope (struct block *block, const char *scope,
-		 struct obstack *obstack)
+block::initialize_namespace (struct obstack *obstack)
 {
-  block_initialize_namespace (block, obstack);
+  if (m_namespace_info == nullptr)
+    m_namespace_info = new (obstack) struct block_namespace_info;
+}
 
-  BLOCK_NAMESPACE (block)->scope = scope;
+/* See block.h.  */
+
+void
+block::set_scope (const char *scope, struct obstack *obstack)
+{
+  if (scope == nullptr || scope[0] == '\0')
+    {
+      /* Don't bother.  */
+      return;
+    }
+
+  initialize_namespace (obstack);
+  m_namespace_info->scope = scope;
 }
 
-/* This returns the using directives list associated with BLOCK, if
-   any.  */
+/* See block.h.  */
 
 struct using_direct *
-block_using (const struct block *block)
+block::get_using () const
 {
-  if (block == NULL || BLOCK_NAMESPACE (block) == NULL)
-    return NULL;
+  if (m_namespace_info == nullptr)
+    return nullptr;
   else
-    return BLOCK_NAMESPACE (block)->using_decl;
+    return m_namespace_info->using_decl;
 }
 
-/* Set BLOCK's using member to USING; if needed, allocate memory via
-   OBSTACK.  (It won't make a copy of USING, however, so that already
-   has to be allocated correctly.)  */
+/* See block.h.  */
 
 void
-block_set_using (struct block *block,
-		 struct using_direct *using_decl,
-		 struct obstack *obstack)
+block::set_using (struct using_direct *using_decl, struct obstack *obstack)
 {
-  block_initialize_namespace (block, obstack);
-
-  BLOCK_NAMESPACE (block)->using_decl = using_decl;
-}
-
-/* If BLOCK_NAMESPACE (block) is NULL, allocate it via OBSTACK and
-   initialize its members to zero.  */
+  if (using_decl == nullptr)
+    {
+      /* Don't bother.  */
+      return;
+    }
 
-static void
-block_initialize_namespace (struct block *block, struct obstack *obstack)
-{
-  if (BLOCK_NAMESPACE (block) == NULL)
-    BLOCK_NAMESPACE (block) = new (obstack) struct block_namespace_info ();
+  initialize_namespace (obstack);
+  m_namespace_info->using_decl = using_decl;
 }
 
-/* Return the static block associated to BLOCK.  Return NULL if block
-   is NULL or if block is a global block.  */
+/* See block.h.  */
 
 const struct block *
-block_static_block (const struct block *block)
+block::static_block () const
 {
-  if (block == NULL || BLOCK_SUPERBLOCK (block) == NULL)
-    return NULL;
+  if (superblock () == nullptr)
+    return nullptr;
 
-  while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) != NULL)
-    block = BLOCK_SUPERBLOCK (block);
+  const block *block = this;
+  while (block->superblock ()->superblock () != NULL)
+    block = block->superblock ();
 
   return block;
 }
 
-/* Return the static block associated to BLOCK.  Return NULL if block
-   is NULL.  */
+/* See block.h.  */
 
 const struct block *
-block_global_block (const struct block *block)
+block::global_block () const
 {
-  if (block == NULL)
-    return NULL;
+  const block *block = this;
 
-  while (BLOCK_SUPERBLOCK (block) != NULL)
-    block = BLOCK_SUPERBLOCK (block);
+  while (block->superblock () != NULL)
+    block = block->superblock ();
 
   return block;
 }
 
-/* Allocate a block on OBSTACK, and initialize its elements to
-   zero/NULL.  This is useful for creating "dummy" blocks that don't
-   correspond to actual source files.
-
-   Warning: it sets the block's BLOCK_MULTIDICT to NULL, which isn't a
-   valid value.  If you really don't want the block to have a
-   dictionary, then you should subsequently set its BLOCK_MULTIDICT to
-   dict_create_linear (obstack, NULL).  */
+/* See block.h.  */
 
-struct block *
-allocate_block (struct obstack *obstack)
+const struct block *
+block::function_block () const
 {
-  struct block *bl = OBSTACK_ZALLOC (obstack, struct block);
-
-  return bl;
-}
+  const block *block = this;
 
-/* Allocate a global block.  */
+  while (block != nullptr && block->function () == nullptr)
+    block = block->superblock ();
 
-struct block *
-allocate_global_block (struct obstack *obstack)
-{
-  struct global_block *bl = OBSTACK_ZALLOC (obstack, struct global_block);
-
-  return &bl->block;
+  return block;
 }
 
-/* Set the compunit of the global block.  */
+/* See block.h.  */
 
 void
-set_block_compunit_symtab (struct block *block, struct compunit_symtab *cu)
+block::set_compunit_symtab (struct compunit_symtab *cu)
 {
   struct global_block *gb;
 
-  gdb_assert (BLOCK_SUPERBLOCK (block) == NULL);
-  gb = (struct global_block *) block;
+  gdb_assert (superblock () == NULL);
+  gb = (struct global_block *) this;
   gdb_assert (gb->compunit_symtab == NULL);
   gb->compunit_symtab = cu;
 }
@@ -425,16 +405,16 @@ set_block_compunit_symtab (struct block
 /* See block.h.  */
 
 struct dynamic_prop *
-block_static_link (const struct block *block)
+block::static_link () const
 {
-  struct objfile *objfile = block_objfile (block);
+  struct objfile *objfile = this->objfile ();
 
   /* Only objfile-owned blocks that materialize top function scopes can have
      static links.  */
-  if (objfile == NULL || BLOCK_FUNCTION (block) == NULL)
+  if (objfile == NULL || function () == NULL)
     return NULL;
 
-  return (struct dynamic_prop *) objfile_lookup_static_link (objfile, block);
+  return (struct dynamic_prop *) objfile_lookup_static_link (objfile, this);
 }
 
 /* Return the compunit of the global block.  */
@@ -444,7 +424,7 @@ get_block_compunit_symtab (const struct
 {
   struct global_block *gb;
 
-  gdb_assert (BLOCK_SUPERBLOCK (block) == NULL);
+  gdb_assert (block->superblock () == NULL);
   gb = (struct global_block *) block;
   gdb_assert (gb->compunit_symtab != NULL);
   return gb->compunit_symtab;
@@ -458,22 +438,24 @@ get_block_compunit_symtab (const struct
 
 static void
 initialize_block_iterator (const struct block *block,
-			   struct block_iterator *iter)
+			   struct block_iterator *iter,
+			   const lookup_name_info *name = nullptr)
 {
   enum block_enum which;
   struct compunit_symtab *cu;
 
   iter->idx = -1;
+  iter->name = name;
 
-  if (BLOCK_SUPERBLOCK (block) == NULL)
+  if (block->superblock () == NULL)
     {
       which = GLOBAL_BLOCK;
       cu = get_block_compunit_symtab (block);
     }
-  else if (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL)
+  else if (block->superblock ()->superblock () == NULL)
     {
       which = STATIC_BLOCK;
-      cu = get_block_compunit_symtab (BLOCK_SUPERBLOCK (block));
+      cu = get_block_compunit_symtab (block->superblock ());
     }
   else
     {
@@ -541,9 +523,8 @@ block_iterator_step (struct block_iterat
 	  if (cust == NULL)
 	    return  NULL;
 
-	  block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
-				     iterator->which);
-	  sym = mdict_iterator_first (BLOCK_MULTIDICT (block),
+	  block = cust->blockvector ()->block (iterator->which);
+	  sym = mdict_iterator_first (block->multidict (),
 				      &iterator->mdict_iter);
 	}
       else
@@ -560,38 +541,12 @@ block_iterator_step (struct block_iterat
     }
 }
 
-/* See block.h.  */
-
-struct symbol *
-block_iterator_first (const struct block *block,
-		      struct block_iterator *iterator)
-{
-  initialize_block_iterator (block, iterator);
-
-  if (iterator->which == FIRST_LOCAL_BLOCK)
-    return mdict_iterator_first (block->multidict, &iterator->mdict_iter);
-
-  return block_iterator_step (iterator, 1);
-}
-
-/* See block.h.  */
-
-struct symbol *
-block_iterator_next (struct block_iterator *iterator)
-{
-  if (iterator->which == FIRST_LOCAL_BLOCK)
-    return mdict_iterator_next (&iterator->mdict_iter);
-
-  return block_iterator_step (iterator, 0);
-}
-
 /* Perform a single step for a "match" block iterator, iterating
    across symbol tables as needed.  Returns the next symbol, or NULL
    when iteration is complete.  */
 
 static struct symbol *
 block_iter_match_step (struct block_iterator *iterator,
-		       const lookup_name_info &name,
 		       int first)
 {
   struct symbol *sym;
@@ -610,13 +565,12 @@ block_iter_match_step (struct block_iter
 	  if (cust == NULL)
 	    return  NULL;
 
-	  block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
-				     iterator->which);
-	  sym = mdict_iter_match_first (BLOCK_MULTIDICT (block), name,
+	  block = cust->blockvector ()->block (iterator->which);
+	  sym = mdict_iter_match_first (block->multidict (), *iterator->name,
 					&iterator->mdict_iter);
 	}
       else
-	sym = mdict_iter_match_next (name, &iterator->mdict_iter);
+	sym = mdict_iter_match_next (*iterator->name, &iterator->mdict_iter);
 
       if (sym != NULL)
 	return sym;
@@ -632,63 +586,82 @@ block_iter_match_step (struct block_iter
 /* See block.h.  */
 
 struct symbol *
-block_iter_match_first (const struct block *block,
-			const lookup_name_info &name,
-			struct block_iterator *iterator)
+block_iterator_first (const struct block *block,
+		      struct block_iterator *iterator,
+		      const lookup_name_info *name)
 {
-  initialize_block_iterator (block, iterator);
+  initialize_block_iterator (block, iterator, name);
+
+  if (name == nullptr)
+    {
+      if (iterator->which == FIRST_LOCAL_BLOCK)
+	return mdict_iterator_first (block->multidict (),
+				     &iterator->mdict_iter);
+
+      return block_iterator_step (iterator, 1);
+    }
 
   if (iterator->which == FIRST_LOCAL_BLOCK)
-    return mdict_iter_match_first (block->multidict, name,
+    return mdict_iter_match_first (block->multidict (), *name,
 				   &iterator->mdict_iter);
 
-  return block_iter_match_step (iterator, name, 1);
+  return block_iter_match_step (iterator, 1);
 }
 
 /* See block.h.  */
 
 struct symbol *
-block_iter_match_next (const lookup_name_info &name,
-		       struct block_iterator *iterator)
+block_iterator_next (struct block_iterator *iterator)
 {
+  if (iterator->name == nullptr)
+    {
+      if (iterator->which == FIRST_LOCAL_BLOCK)
+	return mdict_iterator_next (&iterator->mdict_iter);
+
+      return block_iterator_step (iterator, 0);
+    }
+
   if (iterator->which == FIRST_LOCAL_BLOCK)
-    return mdict_iter_match_next (name, &iterator->mdict_iter);
+    return mdict_iter_match_next (*iterator->name, &iterator->mdict_iter);
 
-  return block_iter_match_step (iterator, name, 0);
+  return block_iter_match_step (iterator, 0);
 }
 
-/* Return true if symbol A is the best match possible for DOMAIN.  */
+/* See block.h.  */
 
-static bool
-best_symbol (struct symbol *a, const domain_enum domain)
+bool
+best_symbol (struct symbol *a, const domain_search_flags domain)
 {
-  return (SYMBOL_DOMAIN (a) == domain
-	  && SYMBOL_CLASS (a) != LOC_UNRESOLVED);
+  if (a->aclass () == LOC_UNRESOLVED)
+    return false;
+
+  if ((domain & SEARCH_VAR_DOMAIN) != 0)
+    return a->domain () == VAR_DOMAIN;
+
+  return a->matches (domain);
 }
 
-/* Return symbol B if it is a better match than symbol A for DOMAIN.
-   Otherwise return A.  */
+/* See block.h.  */
 
-static struct symbol *
-better_symbol (struct symbol *a, struct symbol *b, const domain_enum domain)
+struct symbol *
+better_symbol (struct symbol *a, struct symbol *b,
+	       const domain_search_flags domain)
 {
   if (a == NULL)
     return b;
   if (b == NULL)
     return a;
 
-  if (SYMBOL_DOMAIN (a) == domain
-      && SYMBOL_DOMAIN (b) != domain)
+  if (a->matches (domain) && !b->matches (domain))
     return a;
-  if (SYMBOL_DOMAIN (b) == domain
-      && SYMBOL_DOMAIN (a) != domain)
+
+  if (b->matches (domain) && !a->matches (domain))
     return b;
 
-  if (SYMBOL_CLASS (a) != LOC_UNRESOLVED
-      && SYMBOL_CLASS (b) == LOC_UNRESOLVED)
+  if (a->aclass () != LOC_UNRESOLVED && b->aclass () == LOC_UNRESOLVED)
     return a;
-  if (SYMBOL_CLASS (b) != LOC_UNRESOLVED
-      && SYMBOL_CLASS (a) == LOC_UNRESOLVED)
+
+  if (b->aclass () != LOC_UNRESOLVED && a->aclass () == LOC_UNRESOLVED)
     return b;
 
   return a;
@@ -708,18 +681,15 @@ better_symbol (struct symbol *a, struct
 struct symbol *
 block_lookup_symbol (const struct block *block, const char *name,
 		     symbol_name_match_type match_type,
-		     const domain_enum domain)
+		     const domain_search_flags domain)
 {
-  struct block_iterator iter;
-  struct symbol *sym;
-
   lookup_name_info lookup_name (name, match_type);
 
-  if (!BLOCK_FUNCTION (block))
+  if (!block->function ())
     {
       struct symbol *other = NULL;
 
-      ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
+      for (struct symbol *sym : block_iterator_range (block, &lookup_name))
 	{
 	  /* See comment related to PR gcc/debug/91507 in
 	     block_lookup_symbol_primary.  */
@@ -729,8 +699,7 @@ block_lookup_symbol (const struct block
 	     STRUCT vs VAR domain symbols.  So if a matching symbol is found,
 	     make sure there is no "better" matching symbol, i.e., one with
 	     exactly the same domain.  PR 16253.  */
-	  if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
-				     SYMBOL_DOMAIN (sym), domain))
+	  if (sym->matches (domain))
 	    other = better_symbol (other, sym, domain);
 	}
       return other;
@@ -748,13 +717,12 @@ block_lookup_symbol (const struct block
 
       struct symbol *sym_found = NULL;
 
-      ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
+      for (struct symbol *sym : block_iterator_range (block, &lookup_name))
 	{
-	  if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
-				     SYMBOL_DOMAIN (sym), domain))
+	  if (sym->matches (domain))
 	    {
 	      sym_found = sym;
-	      if (!SYMBOL_IS_ARGUMENT (sym))
+	      if (!sym->is_argument ())
 		{
 		  break;
 		}
@@ -768,7 +736,7 @@ block_lookup_symbol (const struct block
 
 struct symbol *
 block_lookup_symbol_primary (const struct block *block, const char *name,
-			     const domain_enum domain)
+			     const domain_search_flags domain)
 {
   struct symbol *sym, *other;
   struct mdict_iterator mdict_iter;
@@ -776,12 +744,12 @@ block_lookup_symbol_primary (const struc
   lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
 
   /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK.  */
-  gdb_assert (BLOCK_SUPERBLOCK (block) == NULL
-	      || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL);
+  gdb_assert (block->superblock () == NULL
+	      || block->superblock ()->superblock () == NULL);
 
   other = NULL;
-  for (sym
-	 = mdict_iter_match_first (block->multidict, lookup_name, &mdict_iter);
+  for (sym = mdict_iter_match_first (block->multidict (), lookup_name,
+				     &mdict_iter);
        sym != NULL;
        sym = mdict_iter_match_next (lookup_name, &mdict_iter))
     {
@@ -815,12 +783,11 @@ block_lookup_symbol_primary (const struc
       if (best_symbol (sym, domain))
 	return sym;
 
-      /* This is a bit of a hack, but symbol_matches_domain might ignore
+      /* This is a bit of a hack, but 'matches' might ignore
 	 STRUCT vs VAR domain symbols.  So if a matching symbol is found,
 	 make sure there is no "better" matching symbol, i.e., one with
 	 exactly the same domain.  PR 16253.  */
-      if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
-				 SYMBOL_DOMAIN (sym), domain))
+      if (sym->matches (domain))
 	other = better_symbol (other, sym, domain);
     }
 
@@ -830,64 +797,39 @@ block_lookup_symbol_primary (const struc
 /* See block.h.  */
 
 struct symbol *
-block_find_symbol (const struct block *block, const char *name,
-		   const domain_enum domain,
-		   block_symbol_matcher_ftype *matcher, void *data)
+block_find_symbol (const struct block *block, const lookup_name_info &name,
+		   const domain_search_flags domain, struct symbol **stub)
 {
-  struct block_iterator iter;
-  struct symbol *sym;
-
-  lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
-
   /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK.  */
-  gdb_assert (BLOCK_SUPERBLOCK (block) == NULL
-	      || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL);
+  gdb_assert (block->superblock () == NULL
+	      || block->superblock ()->superblock () == NULL);
 
-  ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
+  for (struct symbol *sym : block_iterator_range (block, &name))
     {
-      /* MATCHER is deliberately called second here so that it never sees
-	 a non-domain-matching symbol.  */
-      if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
-				 SYMBOL_DOMAIN (sym), domain)
-	  && matcher (sym, data))
-	return sym;
-    }
-  return NULL;
-}
+      if (!sym->matches (domain))
+	continue;
 
-/* See block.h.  */
-
-int
-block_find_non_opaque_type (struct symbol *sym, void *data)
-{
-  return !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym));
-}
-
-/* See block.h.  */
-
-int
-block_find_non_opaque_type_preferred (struct symbol *sym, void *data)
-{
-  struct symbol **best = (struct symbol **) data;
+      if (!TYPE_IS_OPAQUE (sym->type ()))
+	return sym;
 
-  if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
-    return 1;
-  *best = sym;
-  return 0;
+      if (stub != nullptr)
+	*stub = sym;
+    }
+  return nullptr;
 }
 
 /* See block.h.  */
 
 struct blockranges *
 make_blockranges (struct objfile *objfile,
-                  const std::vector<blockrange> &rangevec)
+		  const std::vector<blockrange> &rangevec)
 {
   struct blockranges *blr;
   size_t n = rangevec.size();
 
   blr = (struct blockranges *)
     obstack_alloc (&objfile->objfile_obstack,
-                   sizeof (struct blockranges)
+		   sizeof (struct blockranges)
 		   + (n - 1) * sizeof (struct blockrange));
 
   blr->nranges = n;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/blockframe.c ./gdb/blockframe.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/blockframe.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/blockframe.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,7 +1,7 @@
 /* Get info from stack frames; convert between frames, blocks,
    functions and pc values.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -52,7 +52,7 @@
    slot instruction.  */
 
 const struct block *
-get_frame_block (struct frame_info *frame, CORE_ADDR *addr_in_block)
+get_frame_block (frame_info_ptr frame, CORE_ADDR *addr_in_block)
 {
   CORE_ADDR pc;
   const struct block *bl;
@@ -72,10 +72,10 @@ get_frame_block (struct frame_info *fram
 
   while (inline_count > 0)
     {
-      if (block_inlined_p (bl))
+      if (bl->inlined_p ())
 	inline_count--;
 
-      bl = BLOCK_SUPERBLOCK (bl);
+      bl = bl->superblock ();
       gdb_assert (bl != NULL);
     }
 
@@ -91,19 +91,19 @@ get_pc_function_start (CORE_ADDR pc)
   bl = block_for_pc (pc);
   if (bl)
     {
-      struct symbol *symbol = block_linkage_function (bl);
+      struct symbol *symbol = bl->linkage_function ();
 
       if (symbol)
 	{
-	  bl = SYMBOL_BLOCK_VALUE (symbol);
-	  return BLOCK_ENTRY_PC (bl);
+	  bl = symbol->value_block ();
+	  return bl->entry_pc ();
 	}
     }
 
   msymbol = lookup_minimal_symbol_by_pc (pc);
   if (msymbol.minsym)
     {
-      CORE_ADDR fstart = BMSYMBOL_VALUE_ADDRESS (msymbol);
+      CORE_ADDR fstart = msymbol.value_address ();
 
       if (find_pc_section (fstart))
 	return fstart;
@@ -115,17 +115,17 @@ get_pc_function_start (CORE_ADDR pc)
 /* Return the symbol for the function executing in frame FRAME.  */
 
 struct symbol *
-get_frame_function (struct frame_info *frame)
+get_frame_function (frame_info_ptr frame)
 {
   const struct block *bl = get_frame_block (frame, 0);
 
   if (bl == NULL)
     return NULL;
 
-  while (BLOCK_FUNCTION (bl) == NULL && BLOCK_SUPERBLOCK (bl) != NULL)
-    bl = BLOCK_SUPERBLOCK (bl);
+  while (bl->function () == NULL && bl->superblock () != NULL)
+    bl = bl->superblock ();
 
-  return BLOCK_FUNCTION (bl);
+  return bl->function ();
 }
 
 
@@ -139,7 +139,7 @@ find_pc_sect_function (CORE_ADDR pc, str
 
   if (b == 0)
     return 0;
-  return block_linkage_function (b);
+  return b->linkage_function ();
 }
 
 /* Return the function containing pc value PC.
@@ -162,7 +162,7 @@ find_pc_sect_containing_function (CORE_A
   if (bl == nullptr)
     return nullptr;
 
-  return block_containing_function (bl);
+  return bl->containing_function ();
 }
 
 /* These variables are used to cache the most recent result of
@@ -191,7 +191,7 @@ find_pc_sect_containing_function (CORE_A
 
 static CORE_ADDR cache_pc_function_low = 0;
 static CORE_ADDR cache_pc_function_high = 0;
-static const char *cache_pc_function_name = 0;
+static const general_symbol_info *cache_pc_function_sym = nullptr;
 static struct obj_section *cache_pc_function_section = NULL;
 static const struct block *cache_pc_function_block = nullptr;
 
@@ -202,7 +202,7 @@ clear_pc_function_cache (void)
 {
   cache_pc_function_low = 0;
   cache_pc_function_high = 0;
-  cache_pc_function_name = (char *) 0;
+  cache_pc_function_sym = nullptr;
   cache_pc_function_section = NULL;
   cache_pc_function_block = nullptr;
 }
@@ -210,8 +210,10 @@ clear_pc_function_cache (void)
 /* See symtab.h.  */
 
 bool
-find_pc_partial_function (CORE_ADDR pc, const char **name, CORE_ADDR *address,
-			  CORE_ADDR *endaddr, const struct block **block)
+find_pc_partial_function_sym (CORE_ADDR pc,
+			      const struct general_symbol_info **sym,
+			      CORE_ADDR *address, CORE_ADDR *endaddr,
+			      const struct block **block)
 {
   struct obj_section *section;
   struct symbol *f;
@@ -236,19 +238,7 @@ find_pc_partial_function (CORE_ADDR pc,
     goto return_cached_value;
 
   msymbol = lookup_minimal_symbol_by_pc_section (mapped_pc, section);
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      if (objfile->sf)
-	{
-	  compunit_symtab
-	    = objfile->sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol,
-							     mapped_pc,
-							     section,
-							     0);
-	}
-      if (compunit_symtab != NULL)
-	break;
-    }
+  compunit_symtab = find_pc_sect_compunit_symtab (mapped_pc, section);
 
   if (compunit_symtab != NULL)
     {
@@ -264,12 +254,12 @@ find_pc_partial_function (CORE_ADDR pc,
       f = find_pc_sect_function (mapped_pc, section);
       if (f != NULL
 	  && (msymbol.minsym == NULL
-	      || (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (f))
-		  >= BMSYMBOL_VALUE_ADDRESS (msymbol))))
+	      || (f->value_block ()->entry_pc ()
+		  >= msymbol.value_address ())))
 	{
-	  const struct block *b = SYMBOL_BLOCK_VALUE (f);
+	  const struct block *b = f->value_block ();
 
-	  cache_pc_function_name = f->linkage_name ();
+	  cache_pc_function_sym = f;
 	  cache_pc_function_section = section;
 	  cache_pc_function_block = b;
 
@@ -286,26 +276,26 @@ find_pc_partial_function (CORE_ADDR pc,
 	     comment preceding declaration of find_pc_partial_function
 	     in symtab.h for more information.  */
 
-	  if (BLOCK_CONTIGUOUS_P (b))
+	  if (b->is_contiguous ())
 	    {
-	      cache_pc_function_low = BLOCK_START (b);
-	      cache_pc_function_high = BLOCK_END (b);
+	      cache_pc_function_low = b->start ();
+	      cache_pc_function_high = b->end ();
 	    }
 	  else
 	    {
-	      int i;
-	      for (i = 0; i < BLOCK_NRANGES (b); i++)
-	        {
-		  if (BLOCK_RANGE_START (b, i) <= mapped_pc
-		      && mapped_pc < BLOCK_RANGE_END (b, i))
+	      bool found = false;
+	      for (const blockrange &range : b->ranges ())
+		{
+		  if (range.start () <= mapped_pc && mapped_pc < range.end ())
 		    {
-		      cache_pc_function_low = BLOCK_RANGE_START (b, i);
-		      cache_pc_function_high = BLOCK_RANGE_END (b, i);
+		      cache_pc_function_low = range.start ();
+		      cache_pc_function_high = range.end ();
+		      found = true;
 		      break;
 		    }
 		}
 	      /* Above loop should exit via the break.  */
-	      gdb_assert (i < BLOCK_NRANGES (b));
+	      gdb_assert (found);
 	    }
 
 
@@ -325,8 +315,8 @@ find_pc_partial_function (CORE_ADDR pc,
   if (msymbol.minsym == NULL)
     {
       /* No available symbol.  */
-      if (name != NULL)
-	*name = 0;
+      if (sym != nullptr)
+	*sym = 0;
       if (address != NULL)
 	*address = 0;
       if (endaddr != NULL)
@@ -336,8 +326,8 @@ find_pc_partial_function (CORE_ADDR pc,
       return false;
     }
 
-  cache_pc_function_low = BMSYMBOL_VALUE_ADDRESS (msymbol);
-  cache_pc_function_name = msymbol.minsym->linkage_name ();
+  cache_pc_function_low = msymbol.value_address ();
+  cache_pc_function_sym = msymbol.minsym;
   cache_pc_function_section = section;
   cache_pc_function_high = minimal_symbol_upper_bound (msymbol);
   cache_pc_function_block = nullptr;
@@ -352,8 +342,8 @@ find_pc_partial_function (CORE_ADDR pc,
 	*address = cache_pc_function_low;
     }
 
-  if (name)
-    *name = cache_pc_function_name;
+  if (sym != nullptr)
+    *sym = cache_pc_function_sym;
 
   if (endaddr)
     {
@@ -380,35 +370,47 @@ find_pc_partial_function (CORE_ADDR pc,
 /* See symtab.h.  */
 
 bool
+find_pc_partial_function (CORE_ADDR pc, const char **name, CORE_ADDR *address,
+			  CORE_ADDR *endaddr, const struct block **block)
+{
+  const general_symbol_info *gsi;
+  bool r = find_pc_partial_function_sym (pc, &gsi, address, endaddr, block);
+  if (name != nullptr)
+    *name = r ? gsi->linkage_name () : nullptr;
+  return r;
+}
+
+
+/* See symtab.h.  */
+
+bool
 find_function_entry_range_from_pc (CORE_ADDR pc, const char **name,
 				   CORE_ADDR *address, CORE_ADDR *endaddr)
 {
   const struct block *block;
   bool status = find_pc_partial_function (pc, name, address, endaddr, &block);
 
-  if (status && block != nullptr && !BLOCK_CONTIGUOUS_P (block))
+  if (status && block != nullptr && !block->is_contiguous ())
     {
-      CORE_ADDR entry_pc = BLOCK_ENTRY_PC (block);
+      CORE_ADDR entry_pc = block->entry_pc ();
 
-      for (int i = 0; i < BLOCK_NRANGES (block); i++)
-        {
-	  if (BLOCK_RANGE_START (block, i) <= entry_pc
-	      && entry_pc < BLOCK_RANGE_END (block, i))
+      for (const blockrange &range : block->ranges ())
+	{
+	  if (range.start () <= entry_pc && entry_pc < range.end ())
 	    {
 	      if (address != nullptr)
-	        *address = BLOCK_RANGE_START (block, i);
+		*address = range.start ();
 
 	      if (endaddr != nullptr)
-	        *endaddr = BLOCK_RANGE_END (block, i);
+		*endaddr = range.end ();
 
 	      return status;
 	    }
 	}
 
       /* It's an internal error if we exit the above loop without finding
-         the range.  */
-      internal_error (__FILE__, __LINE__,
-                      _("Entry block not found in find_function_entry_range_from_pc"));
+	 the range.  */
+      internal_error (_("Entry block not found in find_function_entry_range_from_pc"));
     }
 
   return status;
@@ -421,8 +423,8 @@ find_function_type (CORE_ADDR pc)
 {
   struct symbol *sym = find_pc_function (pc);
 
-  if (sym != NULL && BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) == pc)
-    return SYMBOL_TYPE (sym);
+  if (sym != NULL && sym->value_block ()->entry_pc () == pc)
+    return sym->type ();
 
   return NULL;
 }
@@ -437,15 +439,15 @@ find_gnu_ifunc_target_type (CORE_ADDR re
     {
       /* Get the return type of the resolver.  */
       struct type *resolver_ret_type
-	= check_typedef (TYPE_TARGET_TYPE (resolver_type));
+	= check_typedef (resolver_type->target_type ());
 
       /* If we found a pointer to function, then the resolved type
 	 is the type of the pointed-to function.  */
-      if (TYPE_CODE (resolver_ret_type) == TYPE_CODE_PTR)
+      if (resolver_ret_type->code () == TYPE_CODE_PTR)
 	{
 	  struct type *resolved_type
-	    = TYPE_TARGET_TYPE (resolver_ret_type);
-	  if (TYPE_CODE (check_typedef (resolved_type)) == TYPE_CODE_FUNC)
+	    = resolver_ret_type->target_type ();
+	  if (check_typedef (resolved_type)->code () == TYPE_CODE_FUNC)
 	    return resolved_type;
 	}
     }
@@ -457,21 +459,17 @@ find_gnu_ifunc_target_type (CORE_ADDR re
    at least as old as the selected frame. Return NULL if there is no
    such frame.  If BLOCK is NULL, just return NULL.  */
 
-struct frame_info *
+frame_info_ptr
 block_innermost_frame (const struct block *block)
 {
-  struct frame_info *frame;
-
   if (block == NULL)
     return NULL;
 
-  frame = get_selected_frame_if_set ();
-  if (frame == NULL)
-    frame = get_current_frame ();
+  frame_info_ptr frame = get_selected_frame ();
   while (frame != NULL)
     {
       const struct block *frame_block = get_frame_block (frame, NULL);
-      if (frame_block != NULL && contained_in (frame_block, block))
+      if (frame_block != NULL && block->contains (frame_block))
 	return frame;
 
       frame = get_prev_frame (frame);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/block.h ./gdb/block.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/block.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/block.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Code dealing with blocks for GDB.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,6 +21,7 @@
 #define BLOCK_H
 
 #include "dictionary.h"
+#include "gdbsupport/array-view.h"
 
 /* Opaque declarations.  */
 
@@ -38,19 +39,35 @@ struct addrmap;
 
 struct blockrange
 {
-  blockrange (CORE_ADDR startaddr_, CORE_ADDR endaddr_)
-    : startaddr (startaddr_),
-      endaddr (endaddr_)
+  blockrange (CORE_ADDR start, CORE_ADDR end)
+    : m_start (start),
+      m_end (end)
   {
   }
 
+  /* Return this blockrange's start address.  */
+  CORE_ADDR start () const
+  { return m_start; }
+
+  /* Set this blockrange's start address.  */
+  void set_start (CORE_ADDR start)
+  { m_start = start; }
+
+  /* Return this blockrange's end address.  */
+  CORE_ADDR end () const
+  { return m_end; }
+
+  /* Set this blockrange's end address.  */
+  void set_end (CORE_ADDR end)
+  { m_end = end; }
+
   /* Lowest address in this range.  */
 
-  CORE_ADDR startaddr;
+  CORE_ADDR m_start;
 
   /* One past the highest address in the range.  */
 
-  CORE_ADDR endaddr;
+  CORE_ADDR m_end;
 };
 
 /* Two or more non-contiguous ranges in the same order as that provided
@@ -88,195 +105,350 @@ struct blockranges
    This implies that within the body of one function
    the blocks appear in the order of a depth-first tree walk.  */
 
-struct block
+struct block : public allocate_on_obstack
 {
+  /* Return this block's start address.  */
+  CORE_ADDR start () const
+  { return m_start; }
+
+  /* Set this block's start address.  */
+  void set_start (CORE_ADDR start)
+  { m_start = start; }
+
+  /* Return this block's end address.  */
+  CORE_ADDR end () const
+  { return m_end; }
+
+  /* Set this block's end address.  */
+  void set_end (CORE_ADDR end)
+  { m_end = end; }
+
+  /* Return this block's function symbol.  */
+  symbol *function () const
+  { return m_function; }
+
+  /* Set this block's function symbol.  */
+  void set_function (symbol *function)
+  { m_function = function; }
+
+  /* Return this block's superblock.  */
+  const block *superblock () const
+  { return m_superblock; }
+
+  /* Set this block's superblock.  */
+  void set_superblock (const block *superblock)
+  { m_superblock = superblock; }
+
+  /* Return this block's multidict.  */
+  multidictionary *multidict () const
+  { return m_multidict; }
+
+  /* Return an iterator range for this block's multidict.  */
+  iterator_range<mdict_iterator_wrapper> multidict_symbols () const
+  { return iterator_range<mdict_iterator_wrapper> (m_multidict); }
+
+  /* Set this block's multidict.  */
+  void set_multidict (multidictionary *multidict)
+  { m_multidict = multidict; }
 
-  /* Addresses in the executable code that are in this block.  */
+  /* Return a view on this block's ranges.  */
+  gdb::array_view<blockrange> ranges ()
+  {
+    if (m_ranges == nullptr)
+      return {};
+    else
+      return gdb::make_array_view (m_ranges->range, m_ranges->nranges);
+  }
 
-  CORE_ADDR startaddr;
-  CORE_ADDR endaddr;
+  /* Const version of the above.  */
+  gdb::array_view<const blockrange> ranges () const
+  {
+    if (m_ranges == nullptr)
+      return {};
+    else
+      return gdb::make_array_view (m_ranges->range, m_ranges->nranges);
+  }
 
-  /* The symbol that names this block, if the block is the body of a
-     function (real or inlined); otherwise, zero.  */
+  /* Set this block's ranges array.  */
+  void set_ranges (blockranges *ranges)
+  { m_ranges = ranges; }
+
+  /* Return true if all addresses within this block are contiguous.  */
+  bool is_contiguous () const
+  { return this->ranges ().size () <= 1; }
+
+  /* Return the "entry PC" of this block.
+
+     The entry PC is the lowest (start) address for the block when all addresses
+     within the block are contiguous.  If non-contiguous, then use the start
+     address for the first range in the block.
+
+     At the moment, this almost matches what DWARF specifies as the entry
+     pc.  (The missing bit is support for DW_AT_entry_pc which should be
+     preferred over range data and the low_pc.)
+
+     Once support for DW_AT_entry_pc is added, I expect that an entry_pc
+     field will be added to one of these data structures.  Once that's done,
+     the entry_pc field can be set from the dwarf reader (and other readers
+     too).  ENTRY_PC can then be redefined to be less DWARF-centric.  */
 
-  struct symbol *function;
+  CORE_ADDR entry_pc () const
+  {
+    if (this->is_contiguous ())
+      return this->start ();
+    else
+      return this->ranges ()[0].start ();
+  }
 
-  /* The `struct block' for the containing block, or 0 if none.
+  /* Return the objfile of this block.  */
 
-     The superblock of a top-level local block (i.e. a function in the
-     case of C) is the STATIC_BLOCK.  The superblock of the
-     STATIC_BLOCK is the GLOBAL_BLOCK.  */
+  struct objfile *objfile () const;
 
-  const struct block *superblock;
+  /* Return the architecture of this block.  */
 
-  /* This is used to store the symbols in the block.  */
+  struct gdbarch *gdbarch () const;
 
-  struct multidictionary *multidict;
+  /* Return true if BL represents an inlined function.  */
 
-  /* Contains information about namespace-related info relevant to this block:
-     using directives and the current namespace scope.  */
+  bool inlined_p () const;
 
-  struct block_namespace_info *namespace_info;
+  /* This returns the namespace that this block is enclosed in, or ""
+     if it isn't enclosed in a namespace at all.  This travels the
+     chain of superblocks looking for a scope, if necessary.  */
 
-  /* Address ranges for blocks with non-contiguous ranges.  If this
-     is NULL, then there is only one range which is specified by
-     startaddr and endaddr above.  */
+  const char *scope () const;
 
-  struct blockranges *ranges;
-};
+  /* Set this block's scope member to SCOPE; if needed, allocate
+     memory via OBSTACK.  (It won't make a copy of SCOPE, however, so
+     that already has to be allocated correctly.)  */
 
-/* The global block is singled out so that we can provide a back-link
-   to the compunit symtab.  */
+  void set_scope (const char *scope, struct obstack *obstack);
 
-struct global_block
-{
-  /* The block.  */
+  /* This returns the using directives list associated with this
+     block, if any.  */
 
-  struct block block;
+  struct using_direct *get_using () const;
 
-  /* This holds a pointer to the compunit symtab holding this block.  */
+  /* Set this block's using member to USING; if needed, allocate
+     memory via OBSTACK.  (It won't make a copy of USING, however, so
+     that already has to be allocated correctly.)  */
 
-  struct compunit_symtab *compunit_symtab;
-};
+  void set_using (struct using_direct *using_decl, struct obstack *obstack);
 
-#define BLOCK_START(bl)		(bl)->startaddr
-#define BLOCK_END(bl)		(bl)->endaddr
-#define BLOCK_FUNCTION(bl)	(bl)->function
-#define BLOCK_SUPERBLOCK(bl)	(bl)->superblock
-#define BLOCK_MULTIDICT(bl)	(bl)->multidict
-#define BLOCK_NAMESPACE(bl)	(bl)->namespace_info
+  /* Return the symbol for the function which contains a specified
+     lexical block, described by a struct block.  The return value
+     will not be an inlined function; the containing function will be
+     returned instead.  */
 
-/* Accessor for ranges field within block BL.  */
+  struct symbol *linkage_function () const;
 
-#define BLOCK_RANGES(bl)	(bl)->ranges
+  /* Return the symbol for the function which contains a specified
+     block, described by a struct block.  The return value will be the
+     closest enclosing function, which might be an inline
+     function.  */
 
-/* Number of ranges within a block.  */
+  struct symbol *containing_function () const;
 
-#define BLOCK_NRANGES(bl)	(bl)->ranges->nranges
+  /* Return the static block associated with this block.  Return NULL
+     if block is a global block.  */
 
-/* Access range array for block BL.  */
+  const struct block *static_block () const;
 
-#define BLOCK_RANGE(bl)		(bl)->ranges->range
+  /* Return true if this block is a static block.  */
 
-/* Are all addresses within a block contiguous?  */
+  bool is_static_block () const
+  {
+    const block *sup = superblock ();
+    if (sup == nullptr)
+      return false;
+    return sup->is_global_block ();
+  }
 
-#define BLOCK_CONTIGUOUS_P(bl)	(BLOCK_RANGES (bl) == nullptr \
-				 || BLOCK_NRANGES (bl) <= 1)
+  /* Return the static block associated with block.  */
 
-/* Obtain the start address of the Nth range for block BL.  */
+  const struct block *global_block () const;
 
-#define BLOCK_RANGE_START(bl,n) (BLOCK_RANGE (bl)[n].startaddr)
+  /* Return true if this block is a global block.  */
 
-/* Obtain the end address of the Nth range for block BL.  */
+  bool is_global_block () const
+  { return superblock () == nullptr; }
 
-#define BLOCK_RANGE_END(bl,n)	(BLOCK_RANGE (bl)[n].endaddr)
+  /* Return the function block for this block.  Returns nullptr if
+     there is no enclosing function, i.e., if this block is a static
+     or global block.  */
 
-/* Define the "entry pc" for a block BL to be the lowest (start) address
-   for the block when all addresses within the block are contiguous.  If
-   non-contiguous, then use the start address for the first range in the
-   block.
+  const struct block *function_block () const;
 
-   At the moment, this almost matches what DWARF specifies as the entry
-   pc.  (The missing bit is support for DW_AT_entry_pc which should be
-   preferred over range data and the low_pc.)
+  /* Set the compunit of this block, which must be a global block.  */
 
-   Once support for DW_AT_entry_pc is added, I expect that an entry_pc
-   field will be added to one of these data structures.  Once that's done,
-   the entry_pc field can be set from the dwarf reader (and other readers
-   too).  BLOCK_ENTRY_PC can then be redefined to be less DWARF-centric.  */
+  void set_compunit_symtab (struct compunit_symtab *);
 
-#define BLOCK_ENTRY_PC(bl)	(BLOCK_CONTIGUOUS_P (bl) \
-				 ? BLOCK_START (bl) \
-				 : BLOCK_RANGE_START (bl,0))
+  /* Return a property to evaluate the static link associated to this
+     block.
 
-struct blockvector
-{
-  /* Number of blocks in the list.  */
-  int nblocks;
-  /* An address map mapping addresses to blocks in this blockvector.
-     This pointer is zero if the blocks' start and end addresses are
-     enough.  */
-  struct addrmap *map;
-  /* The blocks themselves.  */
-  struct block *block[1];
-};
+     In the context of nested functions (available in Pascal, Ada and
+     GNU C, for instance), a static link (as in DWARF's
+     DW_AT_static_link attribute) for a function is a way to get the
+     frame corresponding to the enclosing function.
 
-#define BLOCKVECTOR_NBLOCKS(blocklist) (blocklist)->nblocks
-#define BLOCKVECTOR_BLOCK(blocklist,n) (blocklist)->block[n]
-#define BLOCKVECTOR_MAP(blocklist) ((blocklist)->map)
+     Note that only objfile-owned and function-level blocks can have a
+     static link.  Return NULL if there is no such property.  */
 
-/* Return the objfile of BLOCK, which must be non-NULL.  */
+  struct dynamic_prop *static_link () const;
 
-extern struct objfile *block_objfile (const struct block *block);
+  /* Return true if block A is lexically nested within this block, or
+     if A and this block have the same pc range.  Return false
+     otherwise.  If ALLOW_NESTED is true, then block A is considered
+     to be in this block if A is in a nested function in this block's
+     function.  If ALLOW_NESTED is false (the default), then blocks in
+     nested functions are not considered to be contained.  */
 
-/* Return the architecture of BLOCK, which must be non-NULL.  */
+  bool contains (const struct block *a, bool allow_nested = false) const;
 
-extern struct gdbarch *block_gdbarch (const struct block *block);
+private:
 
-extern struct symbol *block_linkage_function (const struct block *);
+  /* If the namespace_info is NULL, allocate it via OBSTACK and
+     initialize its members to zero.  */
+  void initialize_namespace (struct obstack *obstack);
 
-extern struct symbol *block_containing_function (const struct block *);
+  /* Addresses in the executable code that are in this block.  */
 
-extern int block_inlined_p (const struct block *block);
+  CORE_ADDR m_start = 0;
+  CORE_ADDR m_end = 0;
 
-/* Return true if block A is lexically nested within block B, or if a
-   and b have the same pc range.  Return false otherwise.  If
-   ALLOW_NESTED is true, then block A is considered to be in block B
-   if A is in a nested function in B's function.  If ALLOW_NESTED is
-   false (the default), then blocks in nested functions are not
-   considered to be contained.  */
+  /* The symbol that names this block, if the block is the body of a
+     function (real or inlined); otherwise, zero.  */
 
-extern bool contained_in (const struct block *a, const struct block *b,
-			  bool allow_nested = false);
+  struct symbol *m_function = nullptr;
 
-extern const struct blockvector *blockvector_for_pc (CORE_ADDR,
-					       const struct block **);
+  /* The `struct block' for the containing block, or 0 if none.
 
-extern const struct blockvector *
-  blockvector_for_pc_sect (CORE_ADDR, struct obj_section *,
-			   const struct block **, struct compunit_symtab *);
+     The superblock of a top-level local block (i.e. a function in the
+     case of C) is the STATIC_BLOCK.  The superblock of the
+     STATIC_BLOCK is the GLOBAL_BLOCK.  */
 
-extern int blockvector_contains_pc (const struct blockvector *bv, CORE_ADDR pc);
+  const struct block *m_superblock = nullptr;
 
-extern struct call_site *call_site_for_pc (struct gdbarch *gdbarch,
-					   CORE_ADDR pc);
+  /* This is used to store the symbols in the block.  */
 
-extern const struct block *block_for_pc (CORE_ADDR);
+  struct multidictionary *m_multidict = nullptr;
 
-extern const struct block *block_for_pc_sect (CORE_ADDR, struct obj_section *);
+  /* Contains information about namespace-related info relevant to this block:
+     using directives and the current namespace scope.  */
 
-extern const char *block_scope (const struct block *block);
+  struct block_namespace_info *m_namespace_info = nullptr;
 
-extern void block_set_scope (struct block *block, const char *scope,
-			     struct obstack *obstack);
+  /* Address ranges for blocks with non-contiguous ranges.  If this
+     is NULL, then there is only one range which is specified by
+     startaddr and endaddr above.  */
 
-extern struct using_direct *block_using (const struct block *block);
+  struct blockranges *m_ranges = nullptr;
+};
 
-extern void block_set_using (struct block *block,
-			     struct using_direct *using_decl,
-			     struct obstack *obstack);
+/* The global block is singled out so that we can provide a back-link
+   to the compunit symtab.  */
 
-extern const struct block *block_static_block (const struct block *block);
+struct global_block : public block
+{
+  /* This holds a pointer to the compunit symtab holding this block.  */
 
-extern const struct block *block_global_block (const struct block *block);
+  struct compunit_symtab *compunit_symtab = nullptr;
+};
 
-extern struct block *allocate_block (struct obstack *obstack);
+struct blockvector
+{
+  /* Return a view on the blocks of this blockvector.  */
+  gdb::array_view<struct block *> blocks ()
+  {
+    return gdb::array_view<struct block *> (m_blocks, m_num_blocks);
+  }
 
-extern struct block *allocate_global_block (struct obstack *obstack);
+  /* Const version of the above.  */
+  gdb::array_view<const struct block *const> blocks () const
+  {
+    const struct block **blocks = (const struct block **) m_blocks;
+    return gdb::array_view<const struct block *const> (blocks, m_num_blocks);
+  }
 
-extern void set_block_compunit_symtab (struct block *,
-				       struct compunit_symtab *);
+  /* Return the block at index I.  */
+  struct block *block (size_t i)
+  { return this->blocks ()[i]; }
+
+  /* Const version of the above.  */
+  const struct block *block (size_t i) const
+  { return this->blocks ()[i]; }
+
+  /* Set the block at index I.  */
+  void set_block (int i, struct block *block)
+  { m_blocks[i] = block; }
+
+  /* Set the number of blocks of this blockvector.
+
+     The storage of blocks is done using a flexible array member, so the number
+     of blocks set here must agree with what was effectively allocated.  */
+  void set_num_blocks (int num_blocks)
+  { m_num_blocks = num_blocks; }
+
+  /* Return the number of blocks in this blockvector.  */
+  int num_blocks () const
+  { return m_num_blocks; }
+
+  /* Return the global block of this blockvector.  */
+  struct block *global_block ()
+  { return this->block (GLOBAL_BLOCK); }
+
+  /* Const version of the above.  */
+  const struct block *global_block () const
+  { return this->block (GLOBAL_BLOCK); }
+
+  /* Return the static block of this blockvector.  */
+  struct block *static_block ()
+  { return this->block (STATIC_BLOCK); }
+
+  /* Const version of the above.  */
+  const struct block *static_block () const
+  { return this->block (STATIC_BLOCK); }
+
+  /* Return the address -> block map of this blockvector.  */
+  addrmap *map ()
+  { return m_map; }
+
+  /* Const version of the above.  */
+  const addrmap *map () const
+  { return m_map; }
+
+  /* Set this blockvector's address -> block map.  */
+  void set_map (addrmap *map)
+  { m_map = map; }
 
-/* Return a property to evaluate the static link associated to BLOCK.
+private:
+  /* An address map mapping addresses to blocks in this blockvector.
+     This pointer is zero if the blocks' start and end addresses are
+     enough.  */
+  struct addrmap *m_map;
 
-   In the context of nested functions (available in Pascal, Ada and GNU C, for
-   instance), a static link (as in DWARF's DW_AT_static_link attribute) for a
-   function is a way to get the frame corresponding to the enclosing function.
+  /* Number of blocks in the list.  */
+  int m_num_blocks;
 
-   Note that only objfile-owned and function-level blocks can have a static
-   link.  Return NULL if there is no such property.  */
+  /* The blocks themselves.  */
+  struct block *m_blocks[1];
+};
 
-extern struct dynamic_prop *block_static_link (const struct block *block);
+extern const struct blockvector *blockvector_for_pc (CORE_ADDR,
+					       const struct block **);
+
+extern const struct blockvector *
+  blockvector_for_pc_sect (CORE_ADDR, struct obj_section *,
+			   const struct block **, struct compunit_symtab *);
+
+extern int blockvector_contains_pc (const struct blockvector *bv, CORE_ADDR pc);
+
+extern struct call_site *call_site_for_pc (struct gdbarch *gdbarch,
+					   CORE_ADDR pc);
+
+extern const struct block *block_for_pc (CORE_ADDR);
+
+extern const struct block *block_for_pc_sect (CORE_ADDR, struct obj_section *);
 
 /* A block iterator.  This structure should be treated as though it
    were opaque; it is only defined here because we want to support
@@ -293,6 +465,9 @@ struct block_iterator
     const struct block *block;
   } d;
 
+  /* If we're trying to match a name, this will be non-NULL.  */
+  const lookup_name_info *name;
+
   /* If we're iterating over a single block, this is always -1.
      Otherwise, it holds the index of the current "included" symtab in
      the canonical symtab (that is, d.symtab->includes[idx]), with -1
@@ -312,10 +487,13 @@ struct block_iterator
 };
 
 /* Initialize ITERATOR to point at the first symbol in BLOCK, and
-   return that first symbol, or NULL if BLOCK is empty.  */
+   return that first symbol, or NULL if BLOCK is empty.  If NAME is
+   not NULL, only return symbols matching that name.  */
 
-extern struct symbol *block_iterator_first (const struct block *block,
-					    struct block_iterator *iterator);
+extern struct symbol *block_iterator_first
+     (const struct block *block,
+      struct block_iterator *iterator,
+      const lookup_name_info *name = nullptr);
 
 /* Advance ITERATOR, and return the next symbol, or NULL if there are
    no more symbols.  Don't call this if you've previously received
@@ -324,95 +502,95 @@ extern struct symbol *block_iterator_fir
 
 extern struct symbol *block_iterator_next (struct block_iterator *iterator);
 
-/* Initialize ITERATOR to point at the first symbol in BLOCK whose
-   search_name () matches NAME, and return that first symbol, or
-   NULL if there are no such symbols.  */
-
-extern struct symbol *block_iter_match_first (const struct block *block,
-					      const lookup_name_info &name,
-					      struct block_iterator *iterator);
-
-/* Advance ITERATOR to point at the next symbol in BLOCK whose
-   search_name () matches NAME, or NULL if there are no more such
-   symbols.  Don't call this if you've previously received NULL from
-   block_iterator_match_first or block_iterator_match_next on this
-   iteration.  And don't call it unless ITERATOR was created by a
-   previous call to block_iter_match_first with the same NAME.  */
+/* An iterator that wraps a block_iterator.  The naming here is
+   unfortunate, but block_iterator was named before gdb switched to
+   C++.  */
+struct block_iterator_wrapper
+{
+  typedef block_iterator_wrapper self_type;
+  typedef struct symbol *value_type;
+
+  explicit block_iterator_wrapper (const struct block *block,
+				   const lookup_name_info *name = nullptr)
+    : m_sym (block_iterator_first (block, &m_iter, name))
+  {
+  }
+
+  block_iterator_wrapper ()
+    : m_sym (nullptr)
+  {
+  }
+
+  value_type operator* () const
+  {
+    return m_sym;
+  }
+
+  bool operator== (const self_type &other) const
+  {
+    return m_sym == other.m_sym;
+  }
+
+  bool operator!= (const self_type &other) const
+  {
+    return m_sym != other.m_sym;
+  }
+
+  self_type &operator++ ()
+  {
+    m_sym = block_iterator_next (&m_iter);
+    return *this;
+  }
+
+private:
+
+  struct symbol *m_sym;
+  struct block_iterator m_iter;
+};
+
+/* An iterator range for block_iterator_wrapper.  */
 
-extern struct symbol *block_iter_match_next
-  (const lookup_name_info &name, struct block_iterator *iterator);
+typedef iterator_range<block_iterator_wrapper> block_iterator_range;
+
+/* Return true if symbol A is the best match possible for DOMAIN.  */
+
+extern bool best_symbol (struct symbol *a, const domain_search_flags domain);
+
+/* Return symbol B if it is a better match than symbol A for DOMAIN.
+   Otherwise return A.  */
+
+extern struct symbol *better_symbol (struct symbol *a, struct symbol *b,
+				     const domain_search_flags domain);
 
 /* Search BLOCK for symbol NAME in DOMAIN.  */
 
 extern struct symbol *block_lookup_symbol (const struct block *block,
 					   const char *name,
 					   symbol_name_match_type match_type,
-					   const domain_enum domain);
+					   const domain_search_flags domain);
 
 /* Search BLOCK for symbol NAME in DOMAIN but only in primary symbol table of
    BLOCK.  BLOCK must be STATIC_BLOCK or GLOBAL_BLOCK.  Function is useful if
    one iterates all global/static blocks of an objfile.  */
 
-extern struct symbol *block_lookup_symbol_primary (const struct block *block,
-						   const char *name,
-						   const domain_enum domain);
-
-/* The type of the MATCHER argument to block_find_symbol.  */
-
-typedef int (block_symbol_matcher_ftype) (struct symbol *, void *);
-
-/* Find symbol NAME in BLOCK and in DOMAIN that satisfies MATCHER.
-   DATA is passed unchanged to MATCHER.
-   BLOCK must be STATIC_BLOCK or GLOBAL_BLOCK.  */
+extern struct symbol *block_lookup_symbol_primary
+     (const struct block *block,
+      const char *name,
+      const domain_search_flags domain);
+
+/* Find symbol NAME in BLOCK and in DOMAIN.  This will return a
+   matching symbol whose type is not a "opaque", see TYPE_IS_OPAQUE.
+   If STUB is non-NULL, an otherwise matching symbol whose type is a
+   opaque will be stored here.  */
 
 extern struct symbol *block_find_symbol (const struct block *block,
-					 const char *name,
-					 const domain_enum domain,
-					 block_symbol_matcher_ftype *matcher,
-					 void *data);
-
-/* A matcher function for block_find_symbol to find only symbols with
-   non-opaque types.  */
-
-extern int block_find_non_opaque_type (struct symbol *sym, void *data);
-
-/* A matcher function for block_find_symbol to prefer symbols with
-   non-opaque types.  The way to use this function is as follows:
-
-   struct symbol *with_opaque = NULL;
-   struct symbol *sym
-     = block_find_symbol (block, name, domain,
-                          block_find_non_opaque_type_preferred, &with_opaque);
-
-   At this point if SYM is non-NULL then a non-opaque type has been found.
-   Otherwise, if WITH_OPAQUE is non-NULL then an opaque type has been found.
-   Otherwise, the symbol was not found.  */
-
-extern int block_find_non_opaque_type_preferred (struct symbol *sym,
-						 void *data);
-
-/* Macro to loop through all symbols in BLOCK, in no particular
-   order.  ITER helps keep track of the iteration, and must be a
-   struct block_iterator.  SYM points to the current symbol.  */
-
-#define ALL_BLOCK_SYMBOLS(block, iter, sym)		\
-  for ((sym) = block_iterator_first ((block), &(iter));	\
-       (sym);						\
-       (sym) = block_iterator_next (&(iter)))
-
-/* Macro to loop through all symbols in BLOCK with a name that matches
-   NAME, in no particular order.  ITER helps keep track of the
-   iteration, and must be a struct block_iterator.  SYM points to the
-   current symbol.  */
-
-#define ALL_BLOCK_SYMBOLS_WITH_NAME(block, name, iter, sym)		\
-  for ((sym) = block_iter_match_first ((block), (name), &(iter));	\
-       (sym) != NULL;							\
-       (sym) = block_iter_match_next ((name), &(iter)))
+					 const lookup_name_info &name,
+					 const domain_search_flags domain,
+					 struct symbol **stub);
 
 /* Given a vector of pairs, allocate and build an obstack allocated
    blockranges struct for a block.  */
 struct blockranges *make_blockranges (struct objfile *objfile,
-                                      const std::vector<blockrange> &rangevec);
+				      const std::vector<blockrange> &rangevec);
 
 #endif /* BLOCK_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bpf-tdep.c ./gdb/bpf-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bpf-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/bpf-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,387 @@
+/* Target-dependent code for BPF.
+
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "arch-utils.h"
+#include "dis-asm.h"
+#include "frame.h"
+#include "frame-unwind.h"
+#include "trad-frame.h"
+#include "symtab.h"
+#include "value.h"
+#include "gdbcmd.h"
+#include "breakpoint.h"
+#include "inferior.h"
+#include "regcache.h"
+#include "target.h"
+#include "dwarf2/frame.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+#include "remote.h"
+#include "gdbarch.h"
+
+
+/* eBPF registers.  */
+
+enum bpf_regnum
+{
+  BPF_R0_REGNUM,		/* return value */
+  BPF_R1_REGNUM,
+  BPF_R2_REGNUM,
+  BPF_R3_REGNUM,
+  BPF_R4_REGNUM,
+  BPF_R5_REGNUM,
+  BPF_R6_REGNUM,
+  BPF_R7_REGNUM,
+  BPF_R8_REGNUM,
+  BPF_R9_REGNUM,
+  BPF_R10_REGNUM,		/* sp */
+  BPF_PC_REGNUM,
+};
+
+#define BPF_NUM_REGS	(BPF_PC_REGNUM + 1)
+
+/* Target-dependent structure in gdbarch.  */
+struct bpf_gdbarch_tdep : gdbarch_tdep_base
+{
+};
+
+
+/* Internal debugging facilities.  */
+
+/* When this is set to non-zero debugging information will be
+   printed.  */
+
+static unsigned int bpf_debug_flag = 0;
+
+/* The show callback for 'show debug bpf'.  */
+
+static void
+show_bpf_debug (struct ui_file *file, int from_tty,
+		struct cmd_list_element *c, const char *value)
+{
+  gdb_printf (file, _("Debugging of BPF is %s.\n"), value);
+}
+
+
+/* BPF registers.  */
+
+static const char *bpf_register_names[] =
+{
+  "r0",   "r1",  "r2",    "r3",   "r4",   "r5",   "r6",   "r7",
+  "r8",   "r9",  "r10",   "pc"
+};
+
+/* Return the name of register REGNUM.  */
+
+static const char *
+bpf_register_name (struct gdbarch *gdbarch, int reg)
+{
+  static_assert (ARRAY_SIZE (bpf_register_names) == BPF_NUM_REGS);
+  return bpf_register_names[reg];
+}
+
+/* Return the GDB type of register REGNUM.  */
+
+static struct type *
+bpf_register_type (struct gdbarch *gdbarch, int reg)
+{
+  if (reg == BPF_R10_REGNUM)
+    return builtin_type (gdbarch)->builtin_data_ptr;
+  else if (reg == BPF_PC_REGNUM)
+    return builtin_type (gdbarch)->builtin_func_ptr;
+  return builtin_type (gdbarch)->builtin_int64;
+}
+
+/* Return the GDB register number corresponding to DWARF's REG.  */
+
+static int
+bpf_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
+{
+  if (reg >= 0 && reg < BPF_NUM_REGS)
+    return reg;
+  return -1;
+}
+
+/* Implement the "print_insn" gdbarch method.  */
+
+static int
+bpf_gdb_print_insn (bfd_vma memaddr, disassemble_info *info)
+{
+  info->symbols = NULL;
+  return default_print_insn (memaddr, info);
+}
+
+
+/* Return PC of first real instruction of the function starting at
+   START_PC.  */
+
+static CORE_ADDR
+bpf_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
+{
+  gdb_printf (gdb_stdlog,
+	      "Skipping prologue: start_pc=%s\n",
+	      paddress (gdbarch, start_pc));
+  /* XXX: to be completed.  */
+  return start_pc + 0;
+}
+
+
+/* Frame unwinder.
+
+   XXX it is not clear how to unwind in eBPF, since the stack is not
+   guaranteed to be contiguous, and therefore no relative stack
+   addressing can be done in the callee in order to access the
+   caller's stack frame.  To explore with xBPF, which will relax this
+   restriction.  */
+
+/* Given THIS_FRAME, return its ID.  */
+
+static void
+bpf_frame_this_id (frame_info_ptr this_frame,
+		   void **this_prologue_cache,
+		   struct frame_id *this_id)
+{
+  /* Note that THIS_ID defaults to the outermost frame if we don't set
+     anything here.  See frame.c:compute_frame_id.  */
+}
+
+/* Return the reason why we can't unwind past THIS_FRAME.  */
+
+static enum unwind_stop_reason
+bpf_frame_unwind_stop_reason (frame_info_ptr this_frame,
+			      void **this_cache)
+{
+  return UNWIND_OUTERMOST;
+}
+
+/* Ask THIS_FRAME to unwind its register.  */
+
+static struct value *
+bpf_frame_prev_register (frame_info_ptr this_frame,
+			 void **this_prologue_cache, int regnum)
+{
+  return frame_unwind_got_register (this_frame, regnum, regnum);
+}
+
+/* Frame unwinder machinery for BPF.  */
+
+static const struct frame_unwind bpf_frame_unwind =
+{
+  "bpf prologue",
+  NORMAL_FRAME,
+  bpf_frame_unwind_stop_reason,
+  bpf_frame_this_id,
+  bpf_frame_prev_register,
+  NULL,
+  default_frame_sniffer
+};
+
+
+/* Breakpoints.  */
+
+/* Enum describing the different kinds of breakpoints.  We currently
+   just support one, implemented by the brkpt xbpf instruction.   */
+
+enum bpf_breakpoint_kinds
+{
+  BPF_BP_KIND_BRKPT = 0,
+};
+
+/* Implement the breakpoint_kind_from_pc gdbarch method.  */
+
+static int
+bpf_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *start_pc)
+{
+  /* We support just one kind of breakpoint.  */
+  return BPF_BP_KIND_BRKPT;
+}
+
+/* Implement the sw_breakpoint_from_kind gdbarch method.  */
+
+static const gdb_byte *
+bpf_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
+{
+  static unsigned char brkpt_insn[]
+    = {0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+  switch (kind)
+    {
+    case BPF_BP_KIND_BRKPT:
+      *size = 8;
+      return brkpt_insn;
+    default:
+      gdb_assert_not_reached ("unexpected BPF breakpoint kind");
+    }
+}
+
+
+/* Assuming THIS_FRAME is a dummy frame, return its frame ID.  */
+
+static struct frame_id
+bpf_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
+{
+  CORE_ADDR sp = get_frame_register_unsigned (this_frame,
+					      gdbarch_sp_regnum (gdbarch));
+  return frame_id_build (sp, get_frame_pc (this_frame));
+}
+
+/* Implement the push dummy call gdbarch callback.  */
+
+static CORE_ADDR
+bpf_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+		     struct regcache *regcache, CORE_ADDR bp_addr,
+		     int nargs, struct value **args, CORE_ADDR sp,
+		     function_call_return_method return_method,
+		     CORE_ADDR struct_addr)
+{
+  gdb_printf (gdb_stdlog, "Pushing dummy call: sp=%s\n",
+	      paddress (gdbarch, sp));
+  /* XXX writeme  */
+  return sp;
+}
+
+/* Extract a function return value of TYPE from REGCACHE,
+   and copy it into VALBUF.  */
+
+static void
+bpf_extract_return_value (struct type *type, struct regcache *regcache,
+			  gdb_byte *valbuf)
+{
+  int len = type->length ();
+  gdb_byte vbuf[8];
+
+  gdb_assert (len <= 8);
+  regcache->cooked_read (BPF_R0_REGNUM, vbuf);
+  memcpy (valbuf, vbuf + 8 - len, len);
+}
+
+/* Store the function return value of type TYPE from VALBUF into REGNAME.  */
+
+static void
+bpf_store_return_value (struct type *type, struct regcache *regcache,
+			const gdb_byte *valbuf)
+{
+  int len = type->length ();
+  gdb_byte vbuf[8];
+
+  gdb_assert (len <= 8);
+  memset (vbuf, 0, sizeof (vbuf));
+  memcpy (vbuf + 8 - len, valbuf, len);
+  regcache->cooked_write (BPF_R0_REGNUM, vbuf);
+}
+
+/* Handle function's return value.  */
+
+static enum return_value_convention
+bpf_return_value (struct gdbarch *gdbarch, struct value *function,
+		  struct type *type, struct regcache *regcache,
+		  gdb_byte *readbuf, const gdb_byte *writebuf)
+{
+  int len = type->length ();
+
+  if (len > 8)
+    return RETURN_VALUE_STRUCT_CONVENTION;
+
+  if (readbuf != NULL)
+    bpf_extract_return_value (type, regcache, readbuf);
+  if (writebuf != NULL)
+    bpf_store_return_value (type, regcache, writebuf);
+
+  return RETURN_VALUE_REGISTER_CONVENTION;
+}
+
+
+/* Initialize the current architecture based on INFO.  If possible, re-use an
+   architecture from ARCHES, which is a list of architectures already created
+   during this debugging session.  */
+
+static struct gdbarch *
+bpf_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+{
+  /* If there is already a candidate, use it.  */
+  arches = gdbarch_list_lookup_by_info (arches, &info);
+  if (arches != NULL)
+    return arches->gdbarch;
+
+  /* Allocate space for the new architecture.  */
+  gdbarch *gdbarch
+    = gdbarch_alloc (&info, gdbarch_tdep_up (new bpf_gdbarch_tdep));
+
+  /* Information about registers, etc.  */
+  set_gdbarch_num_regs (gdbarch, BPF_NUM_REGS);
+  set_gdbarch_register_name (gdbarch, bpf_register_name);
+  set_gdbarch_register_type (gdbarch, bpf_register_type);
+
+  /* Register numbers of various important registers.  */
+  set_gdbarch_sp_regnum (gdbarch, BPF_R10_REGNUM);
+  set_gdbarch_pc_regnum (gdbarch, BPF_PC_REGNUM);
+
+  /* Map DWARF2 registers to GDB registers.  */
+  set_gdbarch_dwarf2_reg_to_regnum (gdbarch, bpf_dwarf2_reg_to_regnum);
+
+  /* Call dummy code.  */
+  set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
+  set_gdbarch_dummy_id (gdbarch, bpf_dummy_id);
+  set_gdbarch_push_dummy_call (gdbarch, bpf_push_dummy_call);
+
+  /* Returning results.  */
+  set_gdbarch_return_value (gdbarch, bpf_return_value);
+
+  /* Advance PC across function entry code.  */
+  set_gdbarch_skip_prologue (gdbarch, bpf_skip_prologue);
+
+  /* Stack grows downward.  */
+  set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
+
+  /* Breakpoint manipulation.  */
+  set_gdbarch_breakpoint_kind_from_pc (gdbarch, bpf_breakpoint_kind_from_pc);
+  set_gdbarch_sw_breakpoint_from_kind (gdbarch, bpf_sw_breakpoint_from_kind);
+
+  /* Frame handling.  */
+  set_gdbarch_frame_args_skip (gdbarch, 8);
+
+  /* Disassembly.  */
+  set_gdbarch_print_insn (gdbarch, bpf_gdb_print_insn);
+
+  /* Hook in ABI-specific overrides, if they have been registered.  */
+  gdbarch_init_osabi (info, gdbarch);
+
+  /* Install unwinders.  */
+  frame_unwind_append_unwinder (gdbarch, &bpf_frame_unwind);
+
+  return gdbarch;
+}
+
+void _initialize_bpf_tdep ();
+void
+_initialize_bpf_tdep ()
+{
+  gdbarch_register (bfd_arch_bpf, bpf_gdbarch_init);
+
+  /* Add commands 'set/show debug bpf'.  */
+  add_setshow_zuinteger_cmd ("bpf", class_maintenance,
+			     &bpf_debug_flag,
+			     _("Set BPF debugging."),
+			     _("Show BPF debugging."),
+			     _("Enables BPF specific debugging output."),
+			     NULL,
+			     &show_bpf_debug,
+			     &setdebuglist, &showdebuglist);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-exec.c ./gdb/break-catch-exec.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-exec.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/break-catch-exec.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,226 @@
+/* Everything about exec catchpoints, for GDB.
+
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+
+#include "annotate.h"
+#include "arch-utils.h"
+#include "breakpoint.h"
+#include "cli/cli-decode.h"
+#include "inferior.h"
+#include "mi/mi-common.h"
+#include "target.h"
+#include "valprint.h"
+
+/* Exec catchpoints.  */
+
+/* An instance of this type is used to represent an exec catchpoint.
+   A breakpoint is really of this type iff its ops pointer points to
+   CATCH_EXEC_BREAKPOINT_OPS.  */
+
+struct exec_catchpoint : public catchpoint
+{
+  exec_catchpoint (struct gdbarch *gdbarch, bool temp, const char *cond_string)
+    : catchpoint (gdbarch, temp, cond_string)
+  {
+  }
+
+  int insert_location (struct bp_location *) override;
+  int remove_location (struct bp_location *,
+		       enum remove_bp_reason reason) override;
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace,
+		      CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  bool print_one (const bp_location **) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+
+  /* Filename of a program whose exec triggered this catchpoint.
+     This field is only valid immediately after this catchpoint has
+     triggered.  */
+  gdb::unique_xmalloc_ptr<char> exec_pathname;
+};
+
+int
+exec_catchpoint::insert_location (struct bp_location *bl)
+{
+  return target_insert_exec_catchpoint (inferior_ptid.pid ());
+}
+
+int
+exec_catchpoint::remove_location (struct bp_location *bl,
+				  enum remove_bp_reason reason)
+{
+  return target_remove_exec_catchpoint (inferior_ptid.pid ());
+}
+
+int
+exec_catchpoint::breakpoint_hit (const struct bp_location *bl,
+				 const address_space *aspace,
+				 CORE_ADDR bp_addr,
+				 const target_waitstatus &ws)
+{
+  if (ws.kind () != TARGET_WAITKIND_EXECD)
+    return 0;
+
+  exec_pathname = make_unique_xstrdup (ws.execd_pathname ());
+  return 1;
+}
+
+enum print_stop_action
+exec_catchpoint::print_it (const bpstat *bs) const
+{
+  struct ui_out *uiout = current_uiout;
+
+  annotate_catchpoint (number);
+  maybe_print_thread_hit_breakpoint (uiout);
+  if (disposition == disp_del)
+    uiout->text ("Temporary catchpoint ");
+  else
+    uiout->text ("Catchpoint ");
+  if (uiout->is_mi_like_p ())
+    {
+      uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_EXEC));
+      uiout->field_string ("disp", bpdisp_text (disposition));
+    }
+  uiout->field_signed ("bkptno", number);
+  uiout->text (" (exec'd ");
+  uiout->field_string ("new-exec", exec_pathname.get ());
+  uiout->text ("), ");
+
+  return PRINT_SRC_AND_LOC;
+}
+
+bool
+exec_catchpoint::print_one (const bp_location **last_loc) const
+{
+  struct value_print_options opts;
+  struct ui_out *uiout = current_uiout;
+
+  get_user_print_options (&opts);
+
+  /* Field 4, the address, is omitted (which makes the columns
+     not line up too nicely with the headers, but the effect
+     is relatively readable).  */
+  if (opts.addressprint)
+    uiout->field_skip ("addr");
+  annotate_field (5);
+  uiout->text ("exec");
+  if (exec_pathname != NULL)
+    {
+      uiout->text (", program \"");
+      uiout->field_string ("what", exec_pathname.get ());
+      uiout->text ("\" ");
+    }
+
+  if (uiout->is_mi_like_p ())
+    uiout->field_string ("catch-type", "exec");
+
+  return true;
+}
+
+void
+exec_catchpoint::print_mention () const
+{
+  gdb_printf (_("Catchpoint %d (exec)"), number);
+}
+
+/* Implement the "print_recreate" method for exec catchpoints.  */
+
+void
+exec_catchpoint::print_recreate (struct ui_file *fp) const
+{
+  gdb_printf (fp, "catch exec");
+  print_recreate_thread (fp);
+}
+
+/* This function attempts to parse an optional "if <cond>" clause
+   from the arg string.  If one is not found, it returns NULL.
+
+   Else, it returns a pointer to the condition string.  (It does not
+   attempt to evaluate the string against a particular block.)  And,
+   it updates arg to point to the first character following the parsed
+   if clause in the arg string.  */
+
+const char *
+ep_parse_optional_if_clause (const char **arg)
+{
+  const char *cond_string;
+
+  if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
+    return NULL;
+
+  /* Skip the "if" keyword.  */
+  (*arg) += 2;
+
+  /* Skip any extra leading whitespace, and record the start of the
+     condition string.  */
+  *arg = skip_spaces (*arg);
+  cond_string = *arg;
+
+  /* Assume that the condition occupies the remainder of the arg
+     string.  */
+  (*arg) += strlen (cond_string);
+
+  return cond_string;
+}
+
+/* Commands to deal with catching events, such as signals, exceptions,
+   process start/exit, etc.  */
+
+static void
+catch_exec_command_1 (const char *arg, int from_tty,
+		      struct cmd_list_element *command)
+{
+  struct gdbarch *gdbarch = get_current_arch ();
+  const char *cond_string = NULL;
+  bool temp = command->context () == CATCH_TEMPORARY;
+
+  if (!arg)
+    arg = "";
+  arg = skip_spaces (arg);
+
+  /* The allowed syntax is:
+     catch exec
+     catch exec if <cond>
+
+     First, check if there's an if clause.  */
+  cond_string = ep_parse_optional_if_clause (&arg);
+
+  if ((*arg != '\0') && !isspace (*arg))
+    error (_("Junk at end of arguments."));
+
+  std::unique_ptr<exec_catchpoint> c
+    (new exec_catchpoint (gdbarch, temp, cond_string));
+
+  install_breakpoint (0, std::move (c), 1);
+}
+
+void _initialize_break_catch_exec ();
+void
+_initialize_break_catch_exec ()
+{
+  add_catch_command ("exec", _("Catch calls to exec."),
+		     catch_exec_command_1,
+		     NULL,
+		     CATCH_PERMANENT,
+		     CATCH_TEMPORARY);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-fork.c ./gdb/break-catch-fork.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-fork.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/break-catch-fork.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,260 @@
+/* Everything about vfork catchpoints, for GDB.
+
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+
+#include "annotate.h"
+#include "arch-utils.h"
+#include "breakpoint.h"
+#include "cli/cli-decode.h"
+#include "inferior.h"
+#include "mi/mi-common.h"
+#include "target.h"
+#include "valprint.h"
+
+/* An instance of this type is used to represent a fork or vfork
+   catchpoint.  A breakpoint is really of this type iff its ops pointer points
+   to CATCH_FORK_BREAKPOINT_OPS.  */
+
+struct fork_catchpoint : public catchpoint
+{
+  fork_catchpoint (struct gdbarch *gdbarch, bool temp,
+		   const char *cond_string, bool is_vfork_)
+    : catchpoint (gdbarch, temp, cond_string),
+      is_vfork (is_vfork_)
+  {
+  }
+
+  int insert_location (struct bp_location *) override;
+  int remove_location (struct bp_location *,
+		       enum remove_bp_reason reason) override;
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace,
+		      CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  bool print_one (const bp_location **) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+
+  /* True if the breakpoint is for vfork, false for fork.  */
+  bool is_vfork;
+
+  /* Process id of a child process whose forking triggered this
+     catchpoint.  This field is only valid immediately after this
+     catchpoint has triggered.  */
+  ptid_t forked_inferior_pid = null_ptid;
+};
+
+/* Implement the "insert" method for fork catchpoints.  */
+
+int
+fork_catchpoint::insert_location (struct bp_location *bl)
+{
+  if (is_vfork)
+    return target_insert_vfork_catchpoint (inferior_ptid.pid ());
+  else
+    return target_insert_fork_catchpoint (inferior_ptid.pid ());
+}
+
+/* Implement the "remove" method for fork catchpoints.  */
+
+int
+fork_catchpoint::remove_location (struct bp_location *bl,
+				  enum remove_bp_reason reason)
+{
+  if (is_vfork)
+    return target_remove_vfork_catchpoint (inferior_ptid.pid ());
+  else
+    return target_remove_fork_catchpoint (inferior_ptid.pid ());
+}
+
+/* Implement the "breakpoint_hit" method for fork catchpoints.  */
+
+int
+fork_catchpoint::breakpoint_hit (const struct bp_location *bl,
+				 const address_space *aspace,
+				 CORE_ADDR bp_addr,
+				 const target_waitstatus &ws)
+{
+  if (ws.kind () != (is_vfork
+		     ? TARGET_WAITKIND_VFORKED
+		     : TARGET_WAITKIND_FORKED))
+    return 0;
+
+  forked_inferior_pid = ws.child_ptid ();
+  return 1;
+}
+
+/* Implement the "print_it" method for fork catchpoints.  */
+
+enum print_stop_action
+fork_catchpoint::print_it (const bpstat *bs) const
+{
+  struct ui_out *uiout = current_uiout;
+
+  annotate_catchpoint (number);
+  maybe_print_thread_hit_breakpoint (uiout);
+  if (disposition == disp_del)
+    uiout->text ("Temporary catchpoint ");
+  else
+    uiout->text ("Catchpoint ");
+  if (uiout->is_mi_like_p ())
+    {
+      uiout->field_string ("reason",
+			   async_reason_lookup (is_vfork
+						? EXEC_ASYNC_VFORK
+						: EXEC_ASYNC_FORK));
+      uiout->field_string ("disp", bpdisp_text (disposition));
+    }
+  uiout->field_signed ("bkptno", number);
+  if (is_vfork)
+    uiout->text (" (vforked process ");
+  else
+    uiout->text (" (forked process ");
+  uiout->field_signed ("newpid", forked_inferior_pid.pid ());
+  uiout->text ("), ");
+  return PRINT_SRC_AND_LOC;
+}
+
+/* Implement the "print_one" method for fork catchpoints.  */
+
+bool
+fork_catchpoint::print_one (const bp_location **last_loc) const
+{
+  struct value_print_options opts;
+  struct ui_out *uiout = current_uiout;
+
+  get_user_print_options (&opts);
+
+  /* Field 4, the address, is omitted (which makes the columns not
+     line up too nicely with the headers, but the effect is relatively
+     readable).  */
+  if (opts.addressprint)
+    uiout->field_skip ("addr");
+  annotate_field (5);
+  const char *name = is_vfork ? "vfork" : "fork";
+  uiout->text (name);
+  if (forked_inferior_pid != null_ptid)
+    {
+      uiout->text (", process ");
+      uiout->field_signed ("what", forked_inferior_pid.pid ());
+      uiout->spaces (1);
+    }
+
+  if (uiout->is_mi_like_p ())
+    uiout->field_string ("catch-type", name);
+
+  return true;
+}
+
+/* Implement the "print_mention" method for fork catchpoints.  */
+
+void
+fork_catchpoint::print_mention () const
+{
+  gdb_printf (_("Catchpoint %d (%s)"), number,
+	      is_vfork ? "vfork" : "fork");
+}
+
+/* Implement the "print_recreate" method for fork catchpoints.  */
+
+void
+fork_catchpoint::print_recreate (struct ui_file *fp) const
+{
+  gdb_printf (fp, "catch %s", is_vfork ? "vfork" : "fork");
+  print_recreate_thread (fp);
+}
+
+static void
+create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
+				    bool temp, const char *cond_string,
+				    bool is_vfork)
+{
+  std::unique_ptr<fork_catchpoint> c
+    (new fork_catchpoint (gdbarch, temp, cond_string, is_vfork));
+
+  install_breakpoint (0, std::move (c), 1);
+}
+
+enum catch_fork_kind
+{
+  catch_fork_temporary, catch_vfork_temporary,
+  catch_fork_permanent, catch_vfork_permanent
+};
+
+static void
+catch_fork_command_1 (const char *arg, int from_tty,
+		      struct cmd_list_element *command)
+{
+  struct gdbarch *gdbarch = get_current_arch ();
+  const char *cond_string = NULL;
+  catch_fork_kind fork_kind;
+
+  fork_kind = (catch_fork_kind) (uintptr_t) command->context ();
+  bool temp = (fork_kind == catch_fork_temporary
+	       || fork_kind == catch_vfork_temporary);
+
+  if (!arg)
+    arg = "";
+  arg = skip_spaces (arg);
+
+  /* The allowed syntax is:
+     catch [v]fork
+     catch [v]fork if <cond>
+
+     First, check if there's an if clause.  */
+  cond_string = ep_parse_optional_if_clause (&arg);
+
+  if ((*arg != '\0') && !isspace (*arg))
+    error (_("Junk at end of arguments."));
+
+  /* If this target supports it, create a fork or vfork catchpoint
+     and enable reporting of such events.  */
+  switch (fork_kind)
+    {
+    case catch_fork_temporary:
+    case catch_fork_permanent:
+      create_fork_vfork_event_catchpoint (gdbarch, temp, cond_string, false);
+      break;
+    case catch_vfork_temporary:
+    case catch_vfork_permanent:
+      create_fork_vfork_event_catchpoint (gdbarch, temp, cond_string, true);
+      break;
+    default:
+      error (_("unsupported or unknown fork kind; cannot catch it"));
+      break;
+    }
+}
+
+void _initialize_break_catch_fork ();
+void
+_initialize_break_catch_fork ()
+{
+  add_catch_command ("fork", _("Catch calls to fork."),
+		     catch_fork_command_1,
+		     NULL,
+		     (void *) (uintptr_t) catch_fork_permanent,
+		     (void *) (uintptr_t) catch_fork_temporary);
+  add_catch_command ("vfork", _("Catch calls to vfork."),
+		     catch_fork_command_1,
+		     NULL,
+		     (void *) (uintptr_t) catch_vfork_permanent,
+		     (void *) (uintptr_t) catch_vfork_temporary);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-load.c ./gdb/break-catch-load.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-load.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/break-catch-load.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,286 @@
+/* Everything about load/unload catchpoints, for GDB.
+
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+
+#include "annotate.h"
+#include "arch-utils.h"
+#include "breakpoint.h"
+#include "cli/cli-decode.h"
+#include "mi/mi-common.h"
+#include "progspace.h"
+#include "solist.h"
+#include "target.h"
+#include "valprint.h"
+
+/* An instance of this type is used to represent an solib catchpoint.
+   A breakpoint is really of this type iff its ops pointer points to
+   CATCH_SOLIB_BREAKPOINT_OPS.  */
+
+struct solib_catchpoint : public catchpoint
+{
+  solib_catchpoint (struct gdbarch *gdbarch, bool temp,
+		    const char *cond_string,
+		    bool is_load_, const char *arg)
+    : catchpoint (gdbarch, temp, cond_string),
+      is_load (is_load_),
+      regex (arg == nullptr ? nullptr : make_unique_xstrdup (arg)),
+      compiled (arg == nullptr
+		? nullptr
+		: new compiled_regex (arg, REG_NOSUB, _("Invalid regexp")))
+  {
+  }
+
+  int insert_location (struct bp_location *) override;
+  int remove_location (struct bp_location *,
+		       enum remove_bp_reason reason) override;
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace,
+		      CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+  void check_status (struct bpstat *bs) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  bool print_one (const bp_location **) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+
+  /* True for "catch load", false for "catch unload".  */
+  bool is_load;
+
+  /* Regular expression to match, if any.  COMPILED is only valid when
+     REGEX is non-NULL.  */
+  gdb::unique_xmalloc_ptr<char> regex;
+  std::unique_ptr<compiled_regex> compiled;
+};
+
+int
+solib_catchpoint::insert_location (struct bp_location *ignore)
+{
+  return 0;
+}
+
+int
+solib_catchpoint::remove_location (struct bp_location *ignore,
+				   enum remove_bp_reason reason)
+{
+  return 0;
+}
+
+int
+solib_catchpoint::breakpoint_hit (const struct bp_location *bl,
+				  const address_space *aspace,
+				  CORE_ADDR bp_addr,
+				  const target_waitstatus &ws)
+{
+  if (ws.kind () == TARGET_WAITKIND_LOADED)
+    return 1;
+
+  for (breakpoint &other : all_breakpoints ())
+    {
+      if (&other == bl->owner)
+	continue;
+
+      if (other.type != bp_shlib_event)
+	continue;
+
+      if (pspace != NULL && other.pspace != pspace)
+	continue;
+
+      for (bp_location &other_bl : other.locations ())
+	{
+	  if (other.breakpoint_hit (&other_bl, aspace, bp_addr, ws))
+	    return 1;
+	}
+    }
+
+  return 0;
+}
+
+void
+solib_catchpoint::check_status (struct bpstat *bs)
+{
+  if (is_load)
+    {
+      for (shobj *iter : current_program_space->added_solibs)
+	{
+	  if (!regex
+	      || compiled->exec (iter->so_name.c_str (), 0, nullptr, 0) == 0)
+	    return;
+	}
+    }
+  else
+    {
+      for (const std::string &iter : current_program_space->deleted_solibs)
+	{
+	  if (!regex
+	      || compiled->exec (iter.c_str (), 0, NULL, 0) == 0)
+	    return;
+	}
+    }
+
+  bs->stop = false;
+  bs->print_it = print_it_noop;
+}
+
+enum print_stop_action
+solib_catchpoint::print_it (const bpstat *bs) const
+{
+  struct ui_out *uiout = current_uiout;
+
+  annotate_catchpoint (this->number);
+  maybe_print_thread_hit_breakpoint (uiout);
+  if (this->disposition == disp_del)
+    uiout->text ("Temporary catchpoint ");
+  else
+    uiout->text ("Catchpoint ");
+  uiout->field_signed ("bkptno", this->number);
+  uiout->text ("\n");
+  if (uiout->is_mi_like_p ())
+    uiout->field_string ("disp", bpdisp_text (this->disposition));
+  print_solib_event (true);
+  return PRINT_SRC_AND_LOC;
+}
+
+bool
+solib_catchpoint::print_one (const bp_location **locs) const
+{
+  struct value_print_options opts;
+  struct ui_out *uiout = current_uiout;
+
+  get_user_print_options (&opts);
+  /* Field 4, the address, is omitted (which makes the columns not
+     line up too nicely with the headers, but the effect is relatively
+     readable).  */
+  if (opts.addressprint)
+    {
+      annotate_field (4);
+      uiout->field_skip ("addr");
+    }
+
+  std::string msg;
+  annotate_field (5);
+  if (is_load)
+    {
+      if (regex)
+	msg = string_printf (_("load of library matching %s"),
+			     regex.get ());
+      else
+	msg = _("load of library");
+    }
+  else
+    {
+      if (regex)
+	msg = string_printf (_("unload of library matching %s"),
+			     regex.get ());
+      else
+	msg = _("unload of library");
+    }
+  uiout->field_string ("what", msg);
+
+  if (uiout->is_mi_like_p ())
+    uiout->field_string ("catch-type", is_load ? "load" : "unload");
+
+  return true;
+}
+
+void
+solib_catchpoint::print_mention () const
+{
+  gdb_printf (_("Catchpoint %d (%s)"), number,
+	      is_load ? "load" : "unload");
+}
+
+void
+solib_catchpoint::print_recreate (struct ui_file *fp) const
+{
+  gdb_printf (fp, "%s %s",
+	      disposition == disp_del ? "tcatch" : "catch",
+	      is_load ? "load" : "unload");
+  if (regex)
+    gdb_printf (fp, " %s", regex.get ());
+  gdb_printf (fp, "\n");
+}
+
+/* See breakpoint.h.  */
+
+void
+add_solib_catchpoint (const char *arg, bool is_load, bool is_temp, bool enabled)
+{
+  struct gdbarch *gdbarch = get_current_arch ();
+
+  if (!arg)
+    arg = "";
+  arg = skip_spaces (arg);
+  if (*arg == '\0')
+    arg = nullptr;
+
+  auto c = std::make_unique<solib_catchpoint> (gdbarch, is_temp, nullptr,
+					       is_load, arg);
+
+  c->enable_state = enabled ? bp_enabled : bp_disabled;
+
+  install_breakpoint (0, std::move (c), 1);
+}
+
+/* A helper function that does all the work for "catch load" and
+   "catch unload".  */
+
+static void
+catch_load_or_unload (const char *arg, int from_tty, int is_load,
+		      struct cmd_list_element *command)
+{
+  const int enabled = 1;
+  bool temp = command->context () == CATCH_TEMPORARY;
+
+  add_solib_catchpoint (arg, is_load, temp, enabled);
+}
+
+static void
+catch_load_command_1 (const char *arg, int from_tty,
+		      struct cmd_list_element *command)
+{
+  catch_load_or_unload (arg, from_tty, 1, command);
+}
+
+static void
+catch_unload_command_1 (const char *arg, int from_tty,
+			struct cmd_list_element *command)
+{
+  catch_load_or_unload (arg, from_tty, 0, command);
+}
+
+void _initialize_break_catch_load ();
+void
+_initialize_break_catch_load ()
+{
+  add_catch_command ("load", _("Catch loads of shared libraries.\n\
+Usage: catch load [REGEX]\n\
+If REGEX is given, only stop for libraries matching the regular expression."),
+		     catch_load_command_1,
+		     NULL,
+		     CATCH_PERMANENT,
+		     CATCH_TEMPORARY);
+  add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
+Usage: catch unload [REGEX]\n\
+If REGEX is given, only stop for libraries matching the regular expression."),
+		     catch_unload_command_1,
+		     NULL,
+		     CATCH_PERMANENT,
+		     CATCH_TEMPORARY);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-sig.c ./gdb/break-catch-sig.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-sig.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/break-catch-sig.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Everything about signal catchpoints, for GDB.
 
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,17 +29,39 @@
 #include "cli/cli-utils.h"
 #include "completer.h"
 #include "cli/cli-style.h"
+#include "cli/cli-decode.h"
 
 #include <string>
 
 #define INTERNAL_SIGNAL(x) ((x) == GDB_SIGNAL_TRAP || (x) == GDB_SIGNAL_INT)
 
-/* An instance of this type is used to represent a signal catchpoint.
-   A breakpoint is really of this type iff its ops pointer points to
-   SIGNAL_CATCHPOINT_OPS.  */
+/* An instance of this type is used to represent a signal
+   catchpoint.  */
 
-struct signal_catchpoint : public breakpoint
+struct signal_catchpoint : public catchpoint
 {
+  signal_catchpoint (struct gdbarch *gdbarch, bool temp,
+		     std::vector<gdb_signal> &&sigs,
+		     bool catch_all_)
+    : catchpoint (gdbarch, temp, nullptr),
+      signals_to_be_caught (std::move (sigs)),
+      catch_all (catch_all_)
+  {
+  }
+
+  int insert_location (struct bp_location *) override;
+  int remove_location (struct bp_location *,
+		       enum remove_bp_reason reason) override;
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace,
+		      CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  bool print_one (const bp_location **) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+  bool explains_signal (enum gdb_signal) override;
+
   /* Signal numbers used for the 'catch signal' feature.  If no signal
      has been specified for filtering, it is empty.  Otherwise,
      it holds a list of all signals to be caught.  */
@@ -54,13 +76,9 @@ struct signal_catchpoint : public breakp
   bool catch_all;
 };
 
-/* The breakpoint_ops structure to be used in signal catchpoints.  */
-
-static struct breakpoint_ops signal_catchpoint_ops;
-
 /* Count of each signal.  */
 
-static unsigned int *signal_catch_counts;
+static unsigned int signal_catch_counts[GDB_SIGNAL_LAST];
 
 
 
@@ -80,13 +98,13 @@ signal_to_name_or_int (enum gdb_signal s
 
 
 
-/* Implement the "insert_location" breakpoint_ops method for signal
-   catchpoints.  */
+/* Implement the "insert_location" method for signal catchpoints.  */
 
-static int
-signal_catchpoint_insert_location (struct bp_location *bl)
+int
+signal_catchpoint::insert_location (struct bp_location *bl)
 {
-  struct signal_catchpoint *c = (struct signal_catchpoint *) bl->owner;
+  signal_catchpoint *c
+    = gdb::checked_static_cast<signal_catchpoint *> (bl->owner);
 
   if (!c->signals_to_be_caught.empty ())
     {
@@ -107,14 +125,14 @@ signal_catchpoint_insert_location (struc
   return 0;
 }
 
-/* Implement the "remove_location" breakpoint_ops method for signal
-   catchpoints.  */
+/* Implement the "remove_location" method for signal catchpoints.  */
 
-static int
-signal_catchpoint_remove_location (struct bp_location *bl,
-				   enum remove_bp_reason reason)
+int
+signal_catchpoint::remove_location (struct bp_location *bl,
+				    enum remove_bp_reason reason)
 {
-  struct signal_catchpoint *c = (struct signal_catchpoint *) bl->owner;
+  signal_catchpoint *c
+    = gdb::checked_static_cast<signal_catchpoint *> (bl->owner);
 
   if (!c->signals_to_be_caught.empty ())
     {
@@ -141,23 +159,22 @@ signal_catchpoint_remove_location (struc
   return 0;
 }
 
-/* Implement the "breakpoint_hit" breakpoint_ops method for signal
-   catchpoints.  */
+/* Implement the "breakpoint_hit" method for signal catchpoints.  */
 
-static int
-signal_catchpoint_breakpoint_hit (const struct bp_location *bl,
-				  const address_space *aspace,
-				  CORE_ADDR bp_addr,
-				  const struct target_waitstatus *ws)
+int
+signal_catchpoint::breakpoint_hit (const struct bp_location *bl,
+				   const address_space *aspace,
+				   CORE_ADDR bp_addr,
+				   const target_waitstatus &ws)
 {
-  const struct signal_catchpoint *c
-    = (const struct signal_catchpoint *) bl->owner;
+  const signal_catchpoint *c
+    = gdb::checked_static_cast<const signal_catchpoint *> (bl->owner);
   gdb_signal signal_number;
 
-  if (ws->kind != TARGET_WAITKIND_STOPPED)
+  if (ws.kind () != TARGET_WAITKIND_STOPPED)
     return 0;
 
-  signal_number = ws->value.sig;
+  signal_number = ws.sig ();
 
   /* If we are catching specific signals in this breakpoint, then we
      must guarantee that the called signal is the same signal we are
@@ -174,38 +191,32 @@ signal_catchpoint_breakpoint_hit (const
     return c->catch_all || !INTERNAL_SIGNAL (signal_number);
 }
 
-/* Implement the "print_it" breakpoint_ops method for signal
-   catchpoints.  */
+/* Implement the "print_it" method for signal catchpoints.  */
 
-static enum print_stop_action
-signal_catchpoint_print_it (bpstat bs)
+enum print_stop_action
+signal_catchpoint::print_it (const bpstat *bs) const
 {
-  struct breakpoint *b = bs->breakpoint_at;
-  ptid_t ptid;
   struct target_waitstatus last;
   const char *signal_name;
   struct ui_out *uiout = current_uiout;
 
-  get_last_target_status (&ptid, &last);
+  get_last_target_status (nullptr, nullptr, &last);
 
-  signal_name = signal_to_name_or_int (last.value.sig);
+  signal_name = signal_to_name_or_int (last.sig ());
 
-  annotate_catchpoint (b->number);
+  annotate_catchpoint (number);
   maybe_print_thread_hit_breakpoint (uiout);
 
-  printf_filtered (_("Catchpoint %d (signal %s), "), b->number, signal_name);
+  gdb_printf (_("Catchpoint %d (signal %s), "), number, signal_name);
 
   return PRINT_SRC_AND_LOC;
 }
 
-/* Implement the "print_one" breakpoint_ops method for signal
-   catchpoints.  */
+/* Implement the "print_one" method for signal catchpoints.  */
 
-static void
-signal_catchpoint_print_one (struct breakpoint *b,
-			     struct bp_location **last_loc)
+bool
+signal_catchpoint::print_one (const bp_location **last_loc) const
 {
-  struct signal_catchpoint *c = (struct signal_catchpoint *) b;
   struct value_print_options opts;
   struct ui_out *uiout = current_uiout;
 
@@ -218,18 +229,18 @@ signal_catchpoint_print_one (struct brea
     uiout->field_skip ("addr");
   annotate_field (5);
 
-  if (c->signals_to_be_caught.size () > 1)
+  if (signals_to_be_caught.size () > 1)
     uiout->text ("signals \"");
   else
     uiout->text ("signal \"");
 
-  if (!c->signals_to_be_caught.empty ())
+  if (!signals_to_be_caught.empty ())
     {
       std::string text;
 
       bool first = true;
-      for (gdb_signal iter : c->signals_to_be_caught)
-        {
+      for (gdb_signal iter : signals_to_be_caught)
+	{
 	  const char *name = signal_to_name_or_int (iter);
 
 	  if (!first)
@@ -237,75 +248,70 @@ signal_catchpoint_print_one (struct brea
 	  first = false;
 
 	  text += name;
-        }
-      uiout->field_string ("what", text.c_str ());
+	}
+      uiout->field_string ("what", text);
     }
   else
     uiout->field_string ("what",
-			 c->catch_all ? "<any signal>" : "<standard signals>",
+			 catch_all ? "<any signal>" : "<standard signals>",
 			 metadata_style.style ());
   uiout->text ("\" ");
 
   if (uiout->is_mi_like_p ())
     uiout->field_string ("catch-type", "signal");
+
+  return true;
 }
 
-/* Implement the "print_mention" breakpoint_ops method for signal
-   catchpoints.  */
+/* Implement the "print_mention" method for signal catchpoints.  */
 
-static void
-signal_catchpoint_print_mention (struct breakpoint *b)
+void
+signal_catchpoint::print_mention () const
 {
-  struct signal_catchpoint *c = (struct signal_catchpoint *) b;
-
-  if (!c->signals_to_be_caught.empty ())
+  if (!signals_to_be_caught.empty ())
     {
-      if (c->signals_to_be_caught.size () > 1)
-        printf_filtered (_("Catchpoint %d (signals"), b->number);
+      if (signals_to_be_caught.size () > 1)
+	gdb_printf (_("Catchpoint %d (signals"), number);
       else
-        printf_filtered (_("Catchpoint %d (signal"), b->number);
+	gdb_printf (_("Catchpoint %d (signal"), number);
 
-      for (gdb_signal iter : c->signals_to_be_caught)
-        {
+      for (gdb_signal iter : signals_to_be_caught)
+	{
 	  const char *name = signal_to_name_or_int (iter);
 
-	  printf_filtered (" %s", name);
-        }
-      printf_filtered (")");
+	  gdb_printf (" %s", name);
+	}
+      gdb_printf (")");
     }
-  else if (c->catch_all)
-    printf_filtered (_("Catchpoint %d (any signal)"), b->number);
+  else if (catch_all)
+    gdb_printf (_("Catchpoint %d (any signal)"), number);
   else
-    printf_filtered (_("Catchpoint %d (standard signals)"), b->number);
+    gdb_printf (_("Catchpoint %d (standard signals)"), number);
 }
 
-/* Implement the "print_recreate" breakpoint_ops method for signal
-   catchpoints.  */
+/* Implement the "print_recreate" method for signal catchpoints.  */
 
-static void
-signal_catchpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
+void
+signal_catchpoint::print_recreate (struct ui_file *fp) const
 {
-  struct signal_catchpoint *c = (struct signal_catchpoint *) b;
-
-  fprintf_unfiltered (fp, "catch signal");
+  gdb_printf (fp, "catch signal");
 
-  if (!c->signals_to_be_caught.empty ())
+  if (!signals_to_be_caught.empty ())
     {
-      for (gdb_signal iter : c->signals_to_be_caught)
-	fprintf_unfiltered (fp, " %s", signal_to_name_or_int (iter));
+      for (gdb_signal iter : signals_to_be_caught)
+	gdb_printf (fp, " %s", signal_to_name_or_int (iter));
     }
-  else if (c->catch_all)
-    fprintf_unfiltered (fp, " all");
-  fputc_unfiltered ('\n', fp);
+  else if (catch_all)
+    gdb_printf (fp, " all");
+  gdb_putc ('\n', fp);
 }
 
-/* Implement the "explains_signal" breakpoint_ops method for signal
-   catchpoints.  */
+/* Implement the "explains_signal" method for signal catchpoints.  */
 
-static int
-signal_catchpoint_explains_signal (struct breakpoint *b, enum gdb_signal sig)
+bool
+signal_catchpoint::explains_signal (enum gdb_signal sig)
 {
-  return 1;
+  return true;
 }
 
 /* Create a new signal catchpoint.  TEMPFLAG is true if this should be
@@ -321,10 +327,8 @@ create_signal_catchpoint (int tempflag,
 {
   struct gdbarch *gdbarch = get_current_arch ();
 
-  std::unique_ptr<signal_catchpoint> c (new signal_catchpoint ());
-  init_catchpoint (c.get (), gdbarch, tempflag, NULL, &signal_catchpoint_ops);
-  c->signals_to_be_caught = std::move (filter);
-  c->catch_all = catch_all;
+  std::unique_ptr<signal_catchpoint> c
+    (new signal_catchpoint (gdbarch, tempflag, std::move (filter), catch_all));
 
   install_breakpoint (0, std::move (c), 1);
 }
@@ -390,7 +394,7 @@ catch_signal_command (const char *arg, i
   bool catch_all = false;
   std::vector<gdb_signal> filter;
 
-  tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
+  tempflag = command->context () == CATCH_TEMPORARY;
 
   arg = skip_spaces (arg);
 
@@ -406,32 +410,10 @@ catch_signal_command (const char *arg, i
   create_signal_catchpoint (tempflag, std::move (filter), catch_all);
 }
 
-static void
-initialize_signal_catchpoint_ops (void)
-{
-  struct breakpoint_ops *ops;
-
-  initialize_breakpoint_ops ();
-
-  ops = &signal_catchpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->insert_location = signal_catchpoint_insert_location;
-  ops->remove_location = signal_catchpoint_remove_location;
-  ops->breakpoint_hit = signal_catchpoint_breakpoint_hit;
-  ops->print_it = signal_catchpoint_print_it;
-  ops->print_one = signal_catchpoint_print_one;
-  ops->print_mention = signal_catchpoint_print_mention;
-  ops->print_recreate = signal_catchpoint_print_recreate;
-  ops->explains_signal = signal_catchpoint_explains_signal;
-}
-
+void _initialize_break_catch_sig ();
 void
-_initialize_break_catch_sig (void)
+_initialize_break_catch_sig ()
 {
-  initialize_signal_catchpoint_ops ();
-
-  signal_catch_counts = XCNEWVEC (unsigned int, GDB_SIGNAL_LAST);
-
   add_catch_command ("signal", _("\
 Catch signals by their names and/or numbers.\n\
 Usage: catch signal [[NAME|NUMBER] [NAME|NUMBER]...|all]\n\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-syscall.c ./gdb/break-catch-syscall.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-syscall.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/break-catch-syscall.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Everything about syscall catchpoints, for GDB.
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,13 +30,32 @@
 #include "observable.h"
 #include "xml-syscall.h"
 #include "cli/cli-style.h"
+#include "cli/cli-decode.h"
 
-/* An instance of this type is used to represent a syscall catchpoint.
-   A breakpoint is really of this type iff its ops pointer points to
-   CATCH_SYSCALL_BREAKPOINT_OPS.  */
+/* An instance of this type is used to represent a syscall
+   catchpoint.  */
 
-struct syscall_catchpoint : public breakpoint
+struct syscall_catchpoint : public catchpoint
 {
+  syscall_catchpoint (struct gdbarch *gdbarch, bool tempflag,
+		      std::vector<int> &&calls)
+    : catchpoint (gdbarch, tempflag, nullptr),
+      syscalls_to_be_caught (std::move (calls))
+  {
+  }
+
+  int insert_location (struct bp_location *) override;
+  int remove_location (struct bp_location *,
+		       enum remove_bp_reason reason) override;
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace,
+		      CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  bool print_one (const bp_location **) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+
   /* Syscall numbers used for the 'catch syscall' feature.  If no
      syscall has been specified for filtering, it is empty.
      Otherwise, it holds a list of all syscalls to be caught.  */
@@ -60,7 +79,7 @@ struct catch_syscall_inferior_data
   int total_syscalls_count;
 };
 
-static const struct inferior_key<struct catch_syscall_inferior_data>
+static const registry<inferior>::key<catch_syscall_inferior_data>
   catch_syscall_inferior_data;
 
 static struct catch_syscall_inferior_data *
@@ -75,23 +94,21 @@ get_catch_syscall_inferior_data (struct
   return inf_data;
 }
 
-/* Implement the "insert" breakpoint_ops method for syscall
-   catchpoints.  */
+/* Implement the "insert" method for syscall catchpoints.  */
 
-static int
-insert_catch_syscall (struct bp_location *bl)
+int
+syscall_catchpoint::insert_location (struct bp_location *bl)
 {
-  struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
   struct inferior *inf = current_inferior ();
   struct catch_syscall_inferior_data *inf_data
     = get_catch_syscall_inferior_data (inf);
 
   ++inf_data->total_syscalls_count;
-  if (c->syscalls_to_be_caught.empty ())
+  if (syscalls_to_be_caught.empty ())
     ++inf_data->any_syscall_count;
   else
     {
-      for (int iter : c->syscalls_to_be_caught)
+      for (int iter : syscalls_to_be_caught)
 	{
 	  if (iter >= inf_data->syscalls_counts.size ())
 	    inf_data->syscalls_counts.resize (iter + 1);
@@ -105,29 +122,28 @@ insert_catch_syscall (struct bp_location
 					inf_data->syscalls_counts);
 }
 
-/* Implement the "remove" breakpoint_ops method for syscall
-   catchpoints.  */
+/* Implement the "remove" method for syscall catchpoints.  */
 
-static int
-remove_catch_syscall (struct bp_location *bl, enum remove_bp_reason reason)
+int
+syscall_catchpoint::remove_location (struct bp_location *bl,
+				     enum remove_bp_reason reason)
 {
-  struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
   struct inferior *inf = current_inferior ();
   struct catch_syscall_inferior_data *inf_data
     = get_catch_syscall_inferior_data (inf);
 
   --inf_data->total_syscalls_count;
-  if (c->syscalls_to_be_caught.empty ())
+  if (syscalls_to_be_caught.empty ())
     --inf_data->any_syscall_count;
   else
     {
-      for (int iter : c->syscalls_to_be_caught)
+      for (int iter : syscalls_to_be_caught)
 	{
 	  if (iter >= inf_data->syscalls_counts.size ())
 	    /* Shouldn't happen.  */
 	    continue;
-          --inf_data->syscalls_counts[iter];
-        }
+	  --inf_data->syscalls_counts[iter];
+	}
     }
 
   return target_set_syscall_catchpoint (inferior_ptid.pid (),
@@ -136,31 +152,29 @@ remove_catch_syscall (struct bp_location
 					inf_data->syscalls_counts);
 }
 
-/* Implement the "breakpoint_hit" breakpoint_ops method for syscall
-   catchpoints.  */
+/* Implement the "breakpoint_hit" method for syscall catchpoints.  */
 
-static int
-breakpoint_hit_catch_syscall (const struct bp_location *bl,
-			      const address_space *aspace, CORE_ADDR bp_addr,
-			      const struct target_waitstatus *ws)
+int
+syscall_catchpoint::breakpoint_hit (const struct bp_location *bl,
+				    const address_space *aspace,
+				    CORE_ADDR bp_addr,
+				    const target_waitstatus &ws)
 {
   /* We must check if we are catching specific syscalls in this
      breakpoint.  If we are, then we must guarantee that the called
      syscall is the same syscall we are catching.  */
   int syscall_number = 0;
-  const struct syscall_catchpoint *c
-    = (const struct syscall_catchpoint *) bl->owner;
 
-  if (ws->kind != TARGET_WAITKIND_SYSCALL_ENTRY
-      && ws->kind != TARGET_WAITKIND_SYSCALL_RETURN)
+  if (ws.kind () != TARGET_WAITKIND_SYSCALL_ENTRY
+      && ws.kind () != TARGET_WAITKIND_SYSCALL_RETURN)
     return 0;
 
-  syscall_number = ws->value.syscall_number;
+  syscall_number = ws.syscall_number ();
 
   /* Now, checking if the syscall is the same.  */
-  if (!c->syscalls_to_be_caught.empty ())
+  if (!syscalls_to_be_caught.empty ())
     {
-      for (int iter : c->syscalls_to_be_caught)
+      for (int iter : syscalls_to_be_caught)
 	if (syscall_number == iter)
 	  return 1;
 
@@ -170,51 +184,47 @@ breakpoint_hit_catch_syscall (const stru
   return 1;
 }
 
-/* Implement the "print_it" breakpoint_ops method for syscall
-   catchpoints.  */
+/* Implement the "print_it" method for syscall catchpoints.  */
 
-static enum print_stop_action
-print_it_catch_syscall (bpstat bs)
+enum print_stop_action
+syscall_catchpoint::print_it (const bpstat *bs) const
 {
   struct ui_out *uiout = current_uiout;
-  struct breakpoint *b = bs->breakpoint_at;
   /* These are needed because we want to know in which state a
      syscall is.  It can be in the TARGET_WAITKIND_SYSCALL_ENTRY
      or TARGET_WAITKIND_SYSCALL_RETURN, and depending on it we
      must print "called syscall" or "returned from syscall".  */
-  ptid_t ptid;
   struct target_waitstatus last;
   struct syscall s;
-  struct gdbarch *gdbarch = bs->bp_location_at->gdbarch;
 
-  get_last_target_status (&ptid, &last);
+  get_last_target_status (nullptr, nullptr, &last);
 
-  get_syscall_by_number (gdbarch, last.value.syscall_number, &s);
+  get_syscall_by_number (gdbarch, last.syscall_number (), &s);
 
-  annotate_catchpoint (b->number);
+  annotate_catchpoint (this->number);
   maybe_print_thread_hit_breakpoint (uiout);
 
-  if (b->disposition == disp_del)
+  if (this->disposition == disp_del)
     uiout->text ("Temporary catchpoint ");
   else
     uiout->text ("Catchpoint ");
   if (uiout->is_mi_like_p ())
     {
       uiout->field_string ("reason",
-			   async_reason_lookup (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY
+			   async_reason_lookup (last.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
 						? EXEC_ASYNC_SYSCALL_ENTRY
 						: EXEC_ASYNC_SYSCALL_RETURN));
-      uiout->field_string ("disp", bpdisp_text (b->disposition));
+      uiout->field_string ("disp", bpdisp_text (this->disposition));
     }
-  uiout->field_signed ("bkptno", b->number);
+  print_num_locno (bs, uiout);
 
-  if (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY)
+  if (last.kind () == TARGET_WAITKIND_SYSCALL_ENTRY)
     uiout->text (" (call to syscall ");
   else
     uiout->text (" (returned from syscall ");
 
   if (s.name == NULL || uiout->is_mi_like_p ())
-    uiout->field_signed ("syscall-number", last.value.syscall_number);
+    uiout->field_signed ("syscall-number", last.syscall_number ());
   if (s.name != NULL)
     uiout->field_string ("syscall-name", s.name);
 
@@ -223,17 +233,13 @@ print_it_catch_syscall (bpstat bs)
   return PRINT_SRC_AND_LOC;
 }
 
-/* Implement the "print_one" breakpoint_ops method for syscall
-   catchpoints.  */
+/* Implement the "print_one" method for syscall catchpoints.  */
 
-static void
-print_one_catch_syscall (struct breakpoint *b,
-			 struct bp_location **last_loc)
+bool
+syscall_catchpoint::print_one (const bp_location **last_loc) const
 {
-  struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
   struct value_print_options opts;
   struct ui_out *uiout = current_uiout;
-  struct gdbarch *gdbarch = b->loc->gdbarch;
 
   get_user_print_options (&opts);
   /* Field 4, the address, is omitted (which makes the columns not
@@ -243,35 +249,31 @@ print_one_catch_syscall (struct breakpoi
     uiout->field_skip ("addr");
   annotate_field (5);
 
-  if (c->syscalls_to_be_caught.size () > 1)
+  if (syscalls_to_be_caught.size () > 1)
     uiout->text ("syscalls \"");
   else
     uiout->text ("syscall \"");
 
-  if (!c->syscalls_to_be_caught.empty ())
+  if (!syscalls_to_be_caught.empty ())
     {
-      char *text = xstrprintf ("%s", "");
+      std::string text;
 
-      for (int iter : c->syscalls_to_be_caught)
-        {
-          char *previous_text = text;
-          struct syscall s;
-          get_syscall_by_number (gdbarch, iter, &s);
-
-          if (s.name != NULL)
-            text = xstrprintf ("%s%s, ", text, s.name);
-          else
-            text = xstrprintf ("%s%d, ", text, iter);
-
-          /* We have to xfree previous_text because xstrprintf dynamically
-	     allocates new space for text on every call.  */
-	  xfree (previous_text);
-        }
-      /* Remove the last comma.  */
-      text[strlen (text) - 2] = '\0';
-      uiout->field_string ("what", text);
-      /* xfree last text.  */
-      xfree (text);
+      bool first = true;
+      for (int iter : syscalls_to_be_caught)
+	{
+	  struct syscall s;
+	  get_syscall_by_number (gdbarch, iter, &s);
+
+	  if (!first)
+	    text += ", ";
+	  first = false;
+
+	  if (s.name != NULL)
+	    text += s.name;
+	  else
+	    text += std::to_string (iter);
+	}
+      uiout->field_string ("what", text.c_str ());
     }
   else
     uiout->field_string ("what", "<any syscall>", metadata_style.style ());
@@ -279,87 +281,74 @@ print_one_catch_syscall (struct breakpoi
 
   if (uiout->is_mi_like_p ())
     uiout->field_string ("catch-type", "syscall");
+
+  return true;
 }
 
-/* Implement the "print_mention" breakpoint_ops method for syscall
-   catchpoints.  */
+/* Implement the "print_mention" method for syscall catchpoints.  */
 
-static void
-print_mention_catch_syscall (struct breakpoint *b)
+void
+syscall_catchpoint::print_mention () const
 {
-  struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
-  struct gdbarch *gdbarch = b->loc->gdbarch;
-
-  if (!c->syscalls_to_be_caught.empty ())
+  if (!syscalls_to_be_caught.empty ())
     {
-      if (c->syscalls_to_be_caught.size () > 1)
-        printf_filtered (_("Catchpoint %d (syscalls"), b->number);
+      if (syscalls_to_be_caught.size () > 1)
+	gdb_printf (_("Catchpoint %d (syscalls"), number);
       else
-        printf_filtered (_("Catchpoint %d (syscall"), b->number);
+	gdb_printf (_("Catchpoint %d (syscall"), number);
+
+      for (int iter : syscalls_to_be_caught)
+	{
+	  struct syscall s;
+	  get_syscall_by_number (gdbarch, iter, &s);
 
-      for (int iter : c->syscalls_to_be_caught)
-        {
-          struct syscall s;
-          get_syscall_by_number (gdbarch, iter, &s);
-
-          if (s.name != NULL)
-            printf_filtered (" '%s' [%d]", s.name, s.number);
-          else
-            printf_filtered (" %d", s.number);
-        }
-      printf_filtered (")");
+	  if (s.name != NULL)
+	    gdb_printf (" '%s' [%d]", s.name, s.number);
+	  else
+	    gdb_printf (" %d", s.number);
+	}
+      gdb_printf (")");
     }
   else
-    printf_filtered (_("Catchpoint %d (any syscall)"),
-                     b->number);
+    gdb_printf (_("Catchpoint %d (any syscall)"), number);
 }
 
-/* Implement the "print_recreate" breakpoint_ops method for syscall
-   catchpoints.  */
+/* Implement the "print_recreate" method for syscall catchpoints.  */
 
-static void
-print_recreate_catch_syscall (struct breakpoint *b, struct ui_file *fp)
+void
+syscall_catchpoint::print_recreate (struct ui_file *fp) const
 {
-  struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
-  struct gdbarch *gdbarch = b->loc->gdbarch;
+  gdb_printf (fp, "catch syscall");
 
-  fprintf_unfiltered (fp, "catch syscall");
-
-  for (int iter : c->syscalls_to_be_caught)
+  for (int iter : syscalls_to_be_caught)
     {
       struct syscall s;
 
       get_syscall_by_number (gdbarch, iter, &s);
       if (s.name != NULL)
-	fprintf_unfiltered (fp, " %s", s.name);
+	gdb_printf (fp, " %s", s.name);
       else
-	fprintf_unfiltered (fp, " %d", s.number);
+	gdb_printf (fp, " %d", s.number);
     }
 
-  print_recreate_thread (b, fp);
+  print_recreate_thread (fp);
 }
 
-/* The breakpoint_ops structure to be used in syscall catchpoints.  */
-
-static struct breakpoint_ops catch_syscall_breakpoint_ops;
-
 /* Returns non-zero if 'b' is a syscall catchpoint.  */
 
 static int
 syscall_catchpoint_p (struct breakpoint *b)
 {
-  return (b->ops == &catch_syscall_breakpoint_ops);
+  return dynamic_cast<syscall_catchpoint *> (b) != nullptr;
 }
 
 static void
-create_syscall_event_catchpoint (int tempflag, std::vector<int> &&filter,
-                                 const struct breakpoint_ops *ops)
+create_syscall_event_catchpoint (int tempflag, std::vector<int> &&filter)
 {
   struct gdbarch *gdbarch = get_current_arch ();
 
-  std::unique_ptr<syscall_catchpoint> c (new syscall_catchpoint ());
-  init_catchpoint (c.get (), gdbarch, tempflag, NULL, ops);
-  c->syscalls_to_be_caught = std::move (filter);
+  std::unique_ptr<syscall_catchpoint> c
+    (new syscall_catchpoint (gdbarch, tempflag, std::move (filter)));
 
   install_breakpoint (0, std::move (c), 1);
 }
@@ -370,7 +359,7 @@ static std::vector<int>
 catch_syscall_split_args (const char *arg)
 {
   std::vector<int> result;
-  struct gdbarch *gdbarch = target_gdbarch ();
+  gdbarch *gdbarch = current_inferior ()->arch ();
 
   while (*arg != '\0')
     {
@@ -391,6 +380,8 @@ catch_syscall_split_args (const char *ar
       syscall_number = (int) strtol (cur_name, &endptr, 0);
       if (*endptr == '\0')
 	{
+	  if (syscall_number < 0)
+	    error (_("Unknown syscall number '%d'."), syscall_number);
 	  get_syscall_by_number (gdbarch, syscall_number, &s);
 	  result.push_back (s.number);
 	}
@@ -438,7 +429,7 @@ catch_syscall_command_1 (const char *arg
     error (_("The feature 'catch syscall' is not supported on \
 this architecture yet."));
 
-  tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
+  tempflag = command->context () == CATCH_TEMPORARY;
 
   arg = skip_spaces (arg);
 
@@ -457,8 +448,7 @@ this architecture yet."));
   if (arg != NULL)
     filter = catch_syscall_split_args (arg);
 
-  create_syscall_event_catchpoint (tempflag, std::move (filter),
-				   &catch_syscall_breakpoint_ops);
+  create_syscall_event_catchpoint (tempflag, std::move (filter));
 }
 
 
@@ -475,8 +465,10 @@ is_syscall_catchpoint_enabled (struct br
     return 0;
 }
 
-int
-catch_syscall_enabled (void)
+/* See breakpoint.h.  */
+
+bool
+catch_syscall_enabled ()
 {
   struct catch_syscall_inferior_data *inf_data
     = get_catch_syscall_inferior_data (current_inferior ());
@@ -484,40 +476,38 @@ catch_syscall_enabled (void)
   return inf_data->total_syscalls_count != 0;
 }
 
-/* Helper function for catching_syscall_number.  If B is a syscall
-   catchpoint for SYSCALL_NUMBER, return 1 (which will make
-   'breakpoint_find_if' return).  Otherwise, return 0.  */
+/* Helper function for catching_syscall_number.  return true if B is a syscall
+   catchpoint for SYSCALL_NUMBER, else false.  */
 
-static int
-catching_syscall_number_1 (struct breakpoint *b,
-			   void *data)
+static bool
+catching_syscall_number_1 (struct breakpoint *b, int syscall_number)
 {
-  int syscall_number = (int) (uintptr_t) data;
-
   if (is_syscall_catchpoint_enabled (b))
     {
-      struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
+      syscall_catchpoint *c
+	= gdb::checked_static_cast<syscall_catchpoint *> (b);
 
       if (!c->syscalls_to_be_caught.empty ())
 	{
 	  for (int iter : c->syscalls_to_be_caught)
 	    if (syscall_number == iter)
-	      return 1;
+	      return true;
 	}
       else
-	return 1;
+	return true;
     }
 
-  return 0;
+  return false;
 }
 
-int
+bool
 catching_syscall_number (int syscall_number)
 {
-  struct breakpoint *b = breakpoint_find_if (catching_syscall_number_1,
-					 (void *) (uintptr_t) syscall_number);
+  for (breakpoint &b : all_breakpoints ())
+    if (catching_syscall_number_1 (&b, syscall_number))
+      return true;
 
-  return b != NULL;
+  return false;
 }
 
 /* Complete syscall names.  Used by "catch syscall".  */
@@ -525,7 +515,7 @@ catching_syscall_number (int syscall_num
 static void
 catch_syscall_completer (struct cmd_list_element *cmd,
 			 completion_tracker &tracker,
-                         const char *text, const char *word)
+			 const char *text, const char *word)
 {
   struct gdbarch *gdbarch = get_current_arch ();
   gdb::unique_xmalloc_ptr<const char *> group_list;
@@ -581,31 +571,12 @@ clear_syscall_counts (struct inferior *i
   inf_data->syscalls_counts.clear ();
 }
 
-static void
-initialize_syscall_catchpoint_ops (void)
-{
-  struct breakpoint_ops *ops;
-
-  initialize_breakpoint_ops ();
-
-  /* Syscall catchpoints.  */
-  ops = &catch_syscall_breakpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->insert_location = insert_catch_syscall;
-  ops->remove_location = remove_catch_syscall;
-  ops->breakpoint_hit = breakpoint_hit_catch_syscall;
-  ops->print_it = print_it_catch_syscall;
-  ops->print_one = print_one_catch_syscall;
-  ops->print_mention = print_mention_catch_syscall;
-  ops->print_recreate = print_recreate_catch_syscall;
-}
-
+void _initialize_break_catch_syscall ();
 void
-_initialize_break_catch_syscall (void)
+_initialize_break_catch_syscall ()
 {
-  initialize_syscall_catchpoint_ops ();
-
-  gdb::observers::inferior_exit.attach (clear_syscall_counts);
+  gdb::observers::inferior_exit.attach (clear_syscall_counts,
+					"break-catch-syscall");
 
   add_catch_command ("syscall", _("\
 Catch system calls by their names, groups and/or numbers.\n\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-throw.c ./gdb/break-catch-throw.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/break-catch-throw.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/break-catch-throw.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Everything about catch/throw catchpoints, for GDB.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,15 +27,16 @@
 #include "valprint.h"
 #include "cli/cli-utils.h"
 #include "completer.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "mi/mi-common.h"
 #include "linespec.h"
 #include "probe.h"
 #include "objfiles.h"
 #include "cp-abi.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
 #include "cp-support.h"
 #include "location.h"
+#include "cli/cli-decode.h"
 
 /* Each spot where we may place an exception-related catchpoint has
    two names: the SDT probe point and the function name.  This
@@ -62,12 +63,37 @@ static const struct exception_names exce
   { "-probe-stap libstdcxx:catch", "__cxa_begin_catch" }
 };
 
-static struct breakpoint_ops gnu_v3_exception_catchpoint_ops;
+/* The type of an exception catchpoint.  Unlike most catchpoints, this
+   one is implemented with code breakpoints, so it inherits struct
+   code_breakpoint, not struct catchpoint.  */
+
+struct exception_catchpoint : public code_breakpoint
+{
+  exception_catchpoint (struct gdbarch *gdbarch,
+			bool temp, const char *cond_string_,
+			enum exception_event_kind kind_,
+			std::string &&except_rx)
+    : code_breakpoint (gdbarch, bp_catchpoint, temp, cond_string_),
+      kind (kind_),
+      exception_rx (std::move (except_rx)),
+      pattern (exception_rx.empty ()
+	       ? nullptr
+	       : new compiled_regex (exception_rx.c_str (), REG_NOSUB,
+				     _("invalid type-matching regexp")))
+  {
+    pspace = current_program_space;
+    re_set ();
+  }
+
+  void re_set () override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  bool print_one (const bp_location **) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+  void print_one_detail (struct ui_out *) const override;
+  void check_status (struct bpstat *bs) override;
+  struct bp_location *allocate_location () override;
 
-/* The type of an exception catchpoint.  */
-
-struct exception_catchpoint : public breakpoint
-{
   /* The kind of exception catchpoint.  */
 
   enum exception_event_kind kind;
@@ -88,7 +114,7 @@ struct exception_catchpoint : public bre
 bool
 is_exception_catchpoint (breakpoint *bp)
 {
-  return bp->ops == &gnu_v3_exception_catchpoint_ops;
+  return dynamic_cast<exception_catchpoint *> (bp) != nullptr;
 }
 
 
@@ -100,7 +126,7 @@ is_exception_catchpoint (breakpoint *bp)
 static void
 fetch_probe_arguments (struct value **arg0, struct value **arg1)
 {
-  struct frame_info *frame = get_selected_frame (_("No frame selected"));
+  frame_info_ptr frame = get_selected_frame (_("No frame selected"));
   CORE_ADDR pc = get_frame_pc (frame);
   struct bound_probe pc_probe;
   unsigned n_args;
@@ -129,72 +155,60 @@ fetch_probe_arguments (struct value **ar
 
 
 
-/* A helper function that returns a value indicating the kind of the
-   exception catchpoint B.  */
-
-static enum exception_event_kind
-classify_exception_breakpoint (struct breakpoint *b)
-{
-  struct exception_catchpoint *cp = (struct exception_catchpoint *) b;
-
-  return cp->kind;
-}
-
 /* Implement the 'check_status' method.  */
 
-static void
-check_status_exception_catchpoint (struct bpstats *bs)
+void
+exception_catchpoint::check_status (struct bpstat *bs)
 {
-  struct exception_catchpoint *self
-    = (struct exception_catchpoint *) bs->breakpoint_at;
   std::string type_name;
 
-  bkpt_breakpoint_ops.check_status (bs);
-  if (bs->stop == 0)
+  this->breakpoint::check_status (bs);
+  if (!bs->stop)
     return;
 
-  if (self->pattern == NULL)
+  if (this->pattern == NULL)
     return;
 
+  const char *name = nullptr;
+  gdb::unique_xmalloc_ptr<char> canon;
   try
     {
       struct value *typeinfo_arg;
-      std::string canon;
 
       fetch_probe_arguments (NULL, &typeinfo_arg);
       type_name = cplus_typename_from_type_info (typeinfo_arg);
 
       canon = cp_canonicalize_string (type_name.c_str ());
-      if (!canon.empty ())
-	std::swap (type_name, canon);
+      name = (canon != nullptr
+	      ? canon.get ()
+	      : type_name.c_str ());
     }
   catch (const gdb_exception_error &e)
     {
       exception_print (gdb_stderr, e);
     }
 
-  if (!type_name.empty ())
+  if (name != nullptr)
     {
-      if (self->pattern->exec (type_name.c_str (), 0, NULL, 0) != 0)
-	bs->stop = 0;
+      if (this->pattern->exec (name, 0, NULL, 0) != 0)
+	bs->stop = false;
     }
 }
 
 /* Implement the 're_set' method.  */
 
-static void
-re_set_exception_catchpoint (struct breakpoint *self)
+void
+exception_catchpoint::re_set ()
 {
   std::vector<symtab_and_line> sals;
-  enum exception_event_kind kind = classify_exception_breakpoint (self);
   struct program_space *filter_pspace = current_program_space;
 
   /* We first try to use the probe interface.  */
   try
     {
-      event_location_up location
-	= new_probe_location (exception_functions[kind].probe);
-      sals = parse_probes (location.get (), filter_pspace, NULL);
+      location_spec_up locspec
+	= new_probe_location_spec (exception_functions[kind].probe);
+      sals = parse_probes (locspec.get (), filter_pspace, NULL);
     }
   catch (const gdb_exception_error &e)
     {
@@ -202,14 +216,10 @@ re_set_exception_catchpoint (struct brea
 	 catchpoint mode.  */
       try
 	{
-	  struct explicit_location explicit_loc;
-
-	  initialize_explicit_location (&explicit_loc);
-	  explicit_loc.function_name
-	    = ASTRDUP (exception_functions[kind].function);
-	  event_location_up location = new_explicit_location (&explicit_loc);
-	  sals = self->ops->decode_location (self, location.get (),
-					     filter_pspace);
+	  location_spec_up locspec
+	    = (new_explicit_location_spec_function
+	       (exception_functions[kind].function));
+	  sals = this->decode_location_spec (locspec.get (), filter_pspace);
 	}
       catch (const gdb_exception_error &ex)
 	{
@@ -220,24 +230,22 @@ re_set_exception_catchpoint (struct brea
 	}
     }
 
-  update_breakpoint_locations (self, filter_pspace, sals, {});
+  update_breakpoint_locations (this, filter_pspace, sals, {});
 }
 
-static enum print_stop_action
-print_it_exception_catchpoint (bpstat bs)
+enum print_stop_action
+exception_catchpoint::print_it (const bpstat *bs) const
 {
   struct ui_out *uiout = current_uiout;
-  struct breakpoint *b = bs->breakpoint_at;
   int bp_temp;
-  enum exception_event_kind kind = classify_exception_breakpoint (b);
 
-  annotate_catchpoint (b->number);
+  annotate_catchpoint (number);
   maybe_print_thread_hit_breakpoint (uiout);
 
-  bp_temp = b->disposition == disp_del;
+  bp_temp = disposition == disp_del;
   uiout->text (bp_temp ? "Temporary catchpoint "
 		       : "Catchpoint ");
-  uiout->field_signed ("bkptno", b->number);
+  print_num_locno (bs, uiout);
   uiout->text ((kind == EX_EVENT_THROW ? " (exception thrown), "
 		: (kind == EX_EVENT_CATCH ? " (exception caught), "
 		   : " (exception rethrown), ")));
@@ -245,18 +253,16 @@ print_it_exception_catchpoint (bpstat bs
     {
       uiout->field_string ("reason",
 			   async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
-      uiout->field_string ("disp", bpdisp_text (b->disposition));
+      uiout->field_string ("disp", bpdisp_text (disposition));
     }
   return PRINT_SRC_AND_LOC;
 }
 
-static void
-print_one_exception_catchpoint (struct breakpoint *b, 
-				struct bp_location **last_loc)
+bool
+exception_catchpoint::print_one (const bp_location **last_loc) const
 {
   struct value_print_options opts;
   struct ui_out *uiout = current_uiout;
-  enum exception_event_kind kind = classify_exception_breakpoint (b);
 
   get_user_print_options (&opts);
 
@@ -284,75 +290,70 @@ print_one_exception_catchpoint (struct b
 	uiout->field_string ("catch-type", "catch");
       break;
     }
+
+  return true;
 }
 
 /* Implement the 'print_one_detail' method.  */
 
-static void
-print_one_detail_exception_catchpoint (const struct breakpoint *b,
-				       struct ui_out *uiout)
+void
+exception_catchpoint::print_one_detail (struct ui_out *uiout) const
 {
-  const struct exception_catchpoint *cp
-    = (const struct exception_catchpoint *) b;
-
-  if (!cp->exception_rx.empty ())
+  if (!exception_rx.empty ())
     {
       uiout->text (_("\tmatching: "));
-      uiout->field_string ("regexp", cp->exception_rx.c_str ());
+      uiout->field_string ("regexp", exception_rx);
       uiout->text ("\n");
     }
 }
 
-static void
-print_mention_exception_catchpoint (struct breakpoint *b)
+void
+exception_catchpoint::print_mention () const
 {
   struct ui_out *uiout = current_uiout;
   int bp_temp;
-  enum exception_event_kind kind = classify_exception_breakpoint (b);
 
-  bp_temp = b->disposition == disp_del;
+  bp_temp = disposition == disp_del;
   uiout->message ("%s %d %s",
 		  (bp_temp ? _("Temporary catchpoint ") : _("Catchpoint")),
-		  b->number,
+		  number,
 		  (kind == EX_EVENT_THROW
 		   ? _("(throw)") : (kind == EX_EVENT_CATCH
 				     ? _("(catch)") : _("(rethrow)"))));
 }
 
-/* Implement the "print_recreate" breakpoint_ops method for throw and
-   catch catchpoints.  */
+/* Implement the "print_recreate" method for throw and catch
+   catchpoints.  */
 
-static void
-print_recreate_exception_catchpoint (struct breakpoint *b, 
-				     struct ui_file *fp)
+void
+exception_catchpoint::print_recreate (struct ui_file *fp) const
 {
   int bp_temp;
-  enum exception_event_kind kind = classify_exception_breakpoint (b);
 
-  bp_temp = b->disposition == disp_del;
-  fprintf_unfiltered (fp, bp_temp ? "tcatch " : "catch ");
+  bp_temp = disposition == disp_del;
+  gdb_printf (fp, bp_temp ? "tcatch " : "catch ");
   switch (kind)
     {
     case EX_EVENT_THROW:
-      fprintf_unfiltered (fp, "throw");
+      gdb_printf (fp, "throw");
       break;
     case EX_EVENT_CATCH:
-      fprintf_unfiltered (fp, "catch");
+      gdb_printf (fp, "catch");
       break;
     case EX_EVENT_RETHROW:
-      fprintf_unfiltered (fp, "rethrow");
+      gdb_printf (fp, "rethrow");
       break;
     }
-  print_recreate_thread (b, fp);
+  print_recreate_thread (fp);
 }
 
-/* Implement the "allocate_location" breakpoint_ops method for throw
-   and catch catchpoints.  */
+/* Implement the "allocate_location" method for throw and catch
+   catchpoints.  */
 
-static bp_location *
-allocate_location_exception_catchpoint (breakpoint *self)
+bp_location *
+exception_catchpoint::allocate_location ()
 {
-  return new bp_location (self, bp_loc_software_breakpoint);
+  return new bp_location (this, bp_loc_software_breakpoint);
 }
 
 static void
@@ -360,23 +361,11 @@ handle_gnu_v3_exceptions (int tempflag,
 			  const char *cond_string,
 			  enum exception_event_kind ex_event, int from_tty)
 {
-  std::unique_ptr<compiled_regex> pattern;
-
-  if (!except_rx.empty ())
-    {
-      pattern.reset (new compiled_regex (except_rx.c_str (), REG_NOSUB,
-					 _("invalid type-matching regexp")));
-    }
-
-  std::unique_ptr<exception_catchpoint> cp (new exception_catchpoint ());
+  struct gdbarch *gdbarch = get_current_arch ();
 
-  init_catchpoint (cp.get (), get_current_arch (), tempflag, cond_string,
-		   &gnu_v3_exception_catchpoint_ops);
-  cp->kind = ex_event;
-  cp->exception_rx = std::move (except_rx);
-  cp->pattern = std::move (pattern);
-
-  re_set_exception_catchpoint (cp.get ());
+  std::unique_ptr<exception_catchpoint> cp
+    (new exception_catchpoint (gdbarch, tempflag, cond_string,
+			       ex_event, std::move (except_rx)));
 
   install_breakpoint (0, std::move (cp), 1);
 }
@@ -454,7 +443,7 @@ static void
 catch_catch_command (const char *arg, int from_tty,
 		     struct cmd_list_element *command)
 {
-  bool tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
+  bool tempflag = command->context () == CATCH_TEMPORARY;
 
   catch_exception_event (EX_EVENT_CATCH, arg, tempflag, from_tty);
 }
@@ -465,7 +454,7 @@ static void
 catch_throw_command (const char *arg, int from_tty,
 		     struct cmd_list_element *command)
 {
-  bool tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
+  bool tempflag = command->context () == CATCH_TEMPORARY;
 
   catch_exception_event (EX_EVENT_THROW, arg, tempflag, from_tty);
 }
@@ -476,7 +465,7 @@ static void
 catch_rethrow_command (const char *arg, int from_tty,
 		       struct cmd_list_element *command)
 {
-  bool tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
+  bool tempflag = command->context () == CATCH_TEMPORARY;
 
   catch_exception_event (EX_EVENT_RETHROW, arg, tempflag, from_tty);
 }
@@ -507,53 +496,31 @@ static const struct internalvar_funcs ex
 {
   compute_exception,
   NULL,
-  NULL
 };
 
 
 
-static void
-initialize_throw_catchpoint_ops (void)
-{
-  struct breakpoint_ops *ops;
-
-  initialize_breakpoint_ops ();
-
-  /* GNU v3 exception catchpoints.  */
-  ops = &gnu_v3_exception_catchpoint_ops;
-  *ops = bkpt_breakpoint_ops;
-  ops->re_set = re_set_exception_catchpoint;
-  ops->print_it = print_it_exception_catchpoint;
-  ops->print_one = print_one_exception_catchpoint;
-  ops->print_mention = print_mention_exception_catchpoint;
-  ops->print_recreate = print_recreate_exception_catchpoint;
-  ops->print_one_detail = print_one_detail_exception_catchpoint;
-  ops->check_status = check_status_exception_catchpoint;
-  ops->allocate_location = allocate_location_exception_catchpoint;
-}
-
+void _initialize_break_catch_throw ();
 void
-_initialize_break_catch_throw (void)
+_initialize_break_catch_throw ()
 {
-  initialize_throw_catchpoint_ops ();
-
   /* Add catch and tcatch sub-commands.  */
   add_catch_command ("catch", _("\
 Catch an exception, when caught."),
 		     catch_catch_command,
-                     NULL,
+		     NULL,
 		     CATCH_PERMANENT,
 		     CATCH_TEMPORARY);
   add_catch_command ("throw", _("\
 Catch an exception, when thrown."),
 		     catch_throw_command,
-                     NULL,
+		     NULL,
 		     CATCH_PERMANENT,
 		     CATCH_TEMPORARY);
   add_catch_command ("rethrow", _("\
 Catch an exception, when rethrown."),
 		     catch_rethrow_command,
-                     NULL,
+		     NULL,
 		     CATCH_PERMANENT,
 		     CATCH_TEMPORARY);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/breakpoint.c ./gdb/breakpoint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/breakpoint.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/breakpoint.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Everything about breakpoints, for GDB.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -53,10 +53,11 @@
 #include "memattr.h"
 #include "ada-lang.h"
 #include "top.h"
+#include "ui.h"
 #include "valprint.h"
 #include "jit.h"
 #include "parser-defs.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
 #include "probe.h"
 #include "cli/cli-utils.h"
 #include "stack.h"
@@ -67,6 +68,8 @@
 #include "thread-fsm.h"
 #include "tid-parse.h"
 #include "cli/cli-style.h"
+#include "cli/cli-decode.h"
+#include <unordered_set>
 
 /* readline include files */
 #include "readline/tilde.h"
@@ -79,83 +82,67 @@
 #include <algorithm>
 #include "progspace-and-thread.h"
 #include "gdbsupport/array-view.h"
-#include "gdbsupport/gdb_optional.h"
+#include <optional>
+#include "gdbsupport/common-utils.h"
 
 /* Prototypes for local functions.  */
 
 static void map_breakpoint_numbers (const char *,
 				    gdb::function_view<void (breakpoint *)>);
 
-static void breakpoint_re_set_default (struct breakpoint *);
-
 static void
-  create_sals_from_location_default (const struct event_location *location,
-				     struct linespec_result *canonical,
-				     enum bptype type_wanted);
-
-static void create_breakpoints_sal_default (struct gdbarch *,
-					    struct linespec_result *,
-					    gdb::unique_xmalloc_ptr<char>,
-					    gdb::unique_xmalloc_ptr<char>,
-					    enum bptype,
-					    enum bpdisp, int, int,
-					    int,
-					    const struct breakpoint_ops *,
-					    int, int, int, unsigned);
-
-static std::vector<symtab_and_line> decode_location_default
-  (struct breakpoint *b, const struct event_location *location,
-   struct program_space *search_pspace);
+  create_sals_from_location_spec_default (location_spec *locspec,
+					  linespec_result *canonical);
+
+static void create_breakpoints_sal (struct gdbarch *,
+				    struct linespec_result *,
+				    gdb::unique_xmalloc_ptr<char>,
+				    gdb::unique_xmalloc_ptr<char>,
+				    enum bptype,
+				    enum bpdisp, int, int, int,
+				    int,
+				    int, int, int, unsigned);
 
 static int can_use_hardware_watchpoint
     (const std::vector<value_ref_ptr> &vals);
 
-static void mention (struct breakpoint *);
+static void mention (const breakpoint *);
+
+static breakpoint *add_to_breakpoint_chain (std::unique_ptr<breakpoint> &&b);
 
-static struct breakpoint *set_raw_breakpoint_without_location (struct gdbarch *,
-							       enum bptype,
-							       const struct breakpoint_ops *);
-static struct bp_location *add_location_to_breakpoint (struct breakpoint *,
-						       const struct symtab_and_line *);
-
-/* This function is used in gdbtk sources and thus can not be made
-   static.  */
-struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch,
-				       struct symtab_and_line,
-				       enum bptype,
-				       const struct breakpoint_ops *);
+static breakpoint *add_to_breakpoint_chain (std::unique_ptr<breakpoint> &&b);
 
 static struct breakpoint *
   momentary_breakpoint_from_master (struct breakpoint *orig,
 				    enum bptype type,
-				    const struct breakpoint_ops *ops,
-				    int loc_enabled);
+				    int loc_enabled, int thread);
 
-static void breakpoint_adjustment_warning (CORE_ADDR, CORE_ADDR, int, int);
+static void breakpoint_adjustment_warning (CORE_ADDR, CORE_ADDR, int, bool);
 
 static CORE_ADDR adjust_breakpoint_address (struct gdbarch *gdbarch,
 					    CORE_ADDR bpaddr,
-                                            enum bptype bptype);
+					    enum bptype bptype,
+					    struct program_space *pspace);
 
-static void describe_other_breakpoints (struct gdbarch *,
-					struct program_space *, CORE_ADDR,
-					struct obj_section *, int);
-
-static int watchpoint_locations_match (struct bp_location *loc1,
-				       struct bp_location *loc2);
-
-static int breakpoint_location_address_match (struct bp_location *bl,
-					      const struct address_space *aspace,
-					      CORE_ADDR addr);
-
-static int breakpoint_location_address_range_overlap (struct bp_location *,
-						      const address_space *,
-						      CORE_ADDR, int);
+static bool watchpoint_locations_match (const struct bp_location *loc1,
+					const struct bp_location *loc2);
+
+static bool breakpoint_locations_match (const struct bp_location *loc1,
+					const struct bp_location *loc2,
+					bool sw_hw_bps_match = false);
+
+static bool breakpoint_location_address_match (struct bp_location *bl,
+					       const struct address_space *aspace,
+					       CORE_ADDR addr);
+
+static bool breakpoint_location_address_range_overlap (struct bp_location *,
+						       const address_space *,
+						       CORE_ADDR, int);
 
 static int remove_breakpoint (struct bp_location *);
 static int remove_breakpoint_1 (struct bp_location *, enum remove_bp_reason);
 
-static enum print_stop_action print_bp_stop_message (bpstat bs);
+static enum print_stop_action print_bp_stop_message (bpstat *bs);
 
 static int hw_breakpoint_used_count (void);
 
@@ -168,11 +155,16 @@ static int hw_watchpoint_used_count_othe
 static void enable_breakpoint_disp (struct breakpoint *, enum bpdisp,
 				    int count);
 
-static void free_bp_location (struct bp_location *loc);
-static void incref_bp_location (struct bp_location *loc);
 static void decref_bp_location (struct bp_location **loc);
 
-static struct bp_location *allocate_bp_location (struct breakpoint *bpt);
+static std::vector<symtab_and_line> bkpt_probe_decode_location_spec
+     (struct breakpoint *b,
+      location_spec *locspec,
+      struct program_space *search_pspace);
+
+static bool bl_address_is_meaningful (bp_location *loc);
+
+static int find_loc_num_by_location (const bp_location *loc);
 
 /* update_global_location_list's modes of operation wrt to whether to
    insert locations now.  */
@@ -209,6 +201,68 @@ enum ugll_insert_mode
   UGLL_INSERT
 };
 
+/* Return a textual version of INSERT_MODE.  */
+
+static const char *
+ugll_insert_mode_text (ugll_insert_mode insert_mode)
+{
+/* Make sure the compiler warns if a new ugll_insert_mode enumerator is added
+   but not handled here.  */
+DIAGNOSTIC_PUSH
+DIAGNOSTIC_ERROR_SWITCH
+  switch (insert_mode)
+    {
+    case UGLL_DONT_INSERT:
+      return "UGLL_DONT_INSERT";
+    case UGLL_MAY_INSERT:
+      return "UGLL_MAY_INSERT";
+    case UGLL_INSERT:
+      return "UGLL_INSERT";
+    }
+DIAGNOSTIC_POP
+
+  gdb_assert_not_reached ("must handle all enum values");
+}
+
+/* Return a textual version of REASON.  */
+
+static const char *
+remove_bp_reason_str (remove_bp_reason reason)
+{
+/* Make sure the compiler warns if a new remove_bp_reason enumerator is added
+   but not handled here.  */
+DIAGNOSTIC_PUSH
+DIAGNOSTIC_ERROR_SWITCH
+  switch (reason)
+    {
+    case REMOVE_BREAKPOINT:
+      return "regular remove";
+    case DETACH_BREAKPOINT:
+      return "detach";
+    }
+DIAGNOSTIC_POP
+
+  gdb_assert_not_reached ("must handle all enum values");
+}
+
+/* Return a textual version of breakpoint location BL describing number,
+   location and address.  */
+
+static std::string
+breakpoint_location_address_str (const bp_location *bl)
+{
+  std::string str = string_printf ("Breakpoint %d (%s) at address %s",
+				   bl->owner->number,
+				   host_address_to_string (bl),
+				   paddress (bl->gdbarch, bl->address));
+
+  std::string loc_string = bl->to_string ();
+  if (!loc_string.empty ())
+    str += string_printf (" %s", loc_string.c_str ());
+
+  return str;
+}
+
 static void update_global_location_list (enum ugll_insert_mode);
 
 static void update_global_location_list_nothrow (enum ugll_insert_mode);
@@ -221,36 +275,181 @@ static void set_tracepoint_count (int nu
 
 static bool is_masked_watchpoint (const struct breakpoint *b);
 
-static struct bp_location **get_first_locp_gte_addr (CORE_ADDR address);
+/* Return true if B refers to a static tracepoint set by marker ("-m"),
+   zero otherwise.  */
 
-/* Return 1 if B refers to a static tracepoint set by marker ("-m"), zero
-   otherwise.  */
+static bool strace_marker_p (struct breakpoint *b);
 
-static int strace_marker_p (struct breakpoint *b);
+static void bkpt_probe_create_sals_from_location_spec
+     (location_spec *locspec,
+      struct linespec_result *canonical);
+static void tracepoint_probe_create_sals_from_location_spec
+     (location_spec *locspec,
+      struct linespec_result *canonical);
 
-/* The breakpoint_ops structure to be inherited by all breakpoint_ops
-   that are implemented on top of software or hardware breakpoints
-   (user breakpoints, internal and momentary breakpoints, etc.).  */
-static struct breakpoint_ops bkpt_base_breakpoint_ops;
+const struct breakpoint_ops code_breakpoint_ops =
+{
+  create_sals_from_location_spec_default,
+  create_breakpoints_sal,
+};
 
-/* Internal breakpoints class type.  */
-static struct breakpoint_ops internal_breakpoint_ops;
+/* Breakpoints set on probes.  */
+static const struct breakpoint_ops bkpt_probe_breakpoint_ops =
+{
+  bkpt_probe_create_sals_from_location_spec,
+  create_breakpoints_sal,
+};
 
-/* Momentary breakpoints class type.  */
-static struct breakpoint_ops momentary_breakpoint_ops;
+/* Tracepoints set on probes.  */
+static const struct breakpoint_ops tracepoint_probe_breakpoint_ops =
+{
+  tracepoint_probe_create_sals_from_location_spec,
+  create_breakpoints_sal,
+};
 
-/* The breakpoint_ops structure to be used in regular user created
-   breakpoints.  */
-struct breakpoint_ops bkpt_breakpoint_ops;
+/* Implementation of abstract dtors.  These must exist to satisfy the
+   linker.  */
 
-/* Breakpoints set on probes.  */
-static struct breakpoint_ops bkpt_probe_breakpoint_ops;
+breakpoint::~breakpoint ()
+{
+}
 
-/* Tracepoints set on probes.  */
-static struct breakpoint_ops tracepoint_probe_breakpoint_ops;
+code_breakpoint::~code_breakpoint ()
+{
+}
+
+catchpoint::~catchpoint ()
+{
+}
+
+/* The structure to be used in regular breakpoints.  */
+struct ordinary_breakpoint : public code_breakpoint
+{
+  using code_breakpoint::code_breakpoint;
+
+  int resources_needed (const struct bp_location *) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+};
+
+/* Internal breakpoints.  These typically have a lifetime the same as
+   the program, and they end up installed on the breakpoint chain with
+   a negative breakpoint number.  They're visible in "maint info
+   breakpoints", but not "info breakpoints".  */
+struct internal_breakpoint : public code_breakpoint
+{
+  internal_breakpoint (struct gdbarch *gdbarch,
+		       enum bptype type, CORE_ADDR address)
+    : code_breakpoint (gdbarch, type)
+  {
+    symtab_and_line sal;
+    sal.pc = address;
+    sal.section = find_pc_overlay (sal.pc);
+    sal.pspace = current_program_space;
+    add_location (sal);
+
+    pspace = current_program_space;
+    disposition = disp_donttouch;
+  }
+
+  void re_set () override;
+  void check_status (struct bpstat *bs) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  void print_mention () const override;
+};
+
+/* Momentary breakpoints.  These typically have a lifetime of some run
+   control command only, are always thread-specific, and have 0 for
+   breakpoint number.  I.e., there can be many momentary breakpoints
+   on the breakpoint chain and they all same the same number (zero).
+   They're visible in "maint info breakpoints", but not "info
+   breakpoints".  */
+struct momentary_breakpoint : public code_breakpoint
+{
+  momentary_breakpoint (struct gdbarch *gdbarch_, enum bptype bptype,
+			program_space *pspace_,
+			const struct frame_id &frame_id_,
+			int thread_)
+    : code_breakpoint (gdbarch_, bptype)
+  {
+    /* If FRAME_ID is valid, it should be a real frame, not an inlined
+       or tail-called one.  */
+    gdb_assert (!frame_id_artificial_p (frame_id));
+
+    /* Momentary breakpoints are always thread-specific.  */
+    gdb_assert (thread_ > 0);
+
+    pspace = pspace_;
+    enable_state = bp_enabled;
+    disposition = disp_donttouch;
+    frame_id = frame_id_;
+    thread = thread_;
+
+    /* The inferior should have been set by the parent constructor.  */
+    gdb_assert (inferior == -1);
+  }
+
+  void re_set () override;
+  void check_status (struct bpstat *bs) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  void print_mention () const override;
+};
+
+/* DPrintf breakpoints.  */
+struct dprintf_breakpoint : public ordinary_breakpoint
+{
+  using ordinary_breakpoint::ordinary_breakpoint;
+
+  void re_set () override;
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace,
+		      CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+  void print_recreate (struct ui_file *fp) const override;
+  void after_condition_true (struct bpstat *bs) override;
+};
+
+/* Ranged breakpoints.  */
+struct ranged_breakpoint : public ordinary_breakpoint
+{
+  explicit ranged_breakpoint (struct gdbarch *gdbarch,
+			      const symtab_and_line &sal_start,
+			      int length,
+			      location_spec_up start_locspec,
+			      location_spec_up end_locspec)
+    : ordinary_breakpoint (gdbarch, bp_hardware_breakpoint)
+  {
+    bp_location *bl = add_location (sal_start);
+    bl->length = length;
+
+    disposition = disp_donttouch;
+
+    locspec = std::move (start_locspec);
+    locspec_range_end = std::move (end_locspec);
+  }
+
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace,
+		      CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+  int resources_needed (const struct bp_location *) override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  bool print_one (const bp_location **) const override;
+  void print_one_detail (struct ui_out *) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+};
 
-/* Dynamic printf class type.  */
-struct breakpoint_ops dprintf_breakpoint_ops;
+/* Static tracepoints with marker (`-m').  */
+struct static_marker_tracepoint : public tracepoint
+{
+  using tracepoint::tracepoint;
+
+  std::vector<symtab_and_line> decode_location_spec
+       (struct location_spec *locspec,
+	struct program_space *search_pspace) override;
+};
 
 /* The style in which to perform a dynamic printf.  This is a user
    option because different output options have different tradeoffs;
@@ -275,7 +474,7 @@ static const char *dprintf_style = dprin
    copied into the command, so it can be anything that GDB can
    evaluate to a callable address, not necessarily a function name.  */
 
-static char *dprintf_function;
+static std::string dprintf_function = "printf";
 
 /* The channel to use for dynamic printf if the preferred style is to
    call into the inferior; if a nonempty string, it will be passed to
@@ -285,7 +484,7 @@ static char *dprintf_function;
    "stderr", this could be an app-specific expression like
    "mystreams[curlogger]".  */
 
-static char *dprintf_channel;
+static std::string dprintf_channel;
 
 /* True if dprintf commands should continue to operate even if GDB
    has disconnected.  */
@@ -323,10 +522,10 @@ show_can_use_hw_watchpoints (struct ui_f
 			     struct cmd_list_element *c,
 			     const char *value)
 {
-  fprintf_filtered (file,
-		    _("Debugger's willingness to use "
-		      "watchpoint hardware is %s.\n"),
-		    value);
+  gdb_printf (file,
+	      _("Debugger's willingness to use "
+		"watchpoint hardware is %s.\n"),
+	      value);
 }
 
 /* If AUTO_BOOLEAN_FALSE, gdb will not attempt to create pending breakpoints.
@@ -339,10 +538,10 @@ show_pending_break_support (struct ui_fi
 			    struct cmd_list_element *c,
 			    const char *value)
 {
-  fprintf_filtered (file,
-		    _("Debugger's behavior regarding "
-		      "pending breakpoints is %s.\n"),
-		    value);
+  gdb_printf (file,
+	      _("Debugger's behavior regarding "
+		"pending breakpoints is %s.\n"),
+	      value);
 }
 
 /* If true, gdb will automatically use hardware breakpoints for breakpoints
@@ -355,9 +554,9 @@ show_automatic_hardware_breakpoints (str
 				     struct cmd_list_element *c,
 				     const char *value)
 {
-  fprintf_filtered (file,
-		    _("Automatic usage of hardware breakpoints is %s.\n"),
-		    value);
+  gdb_printf (file,
+	      _("Automatic usage of hardware breakpoints is %s.\n"),
+	      value);
 }
 
 /* If on, GDB keeps breakpoints inserted even if the inferior is
@@ -373,8 +572,24 @@ static void
 show_always_inserted_mode (struct ui_file *file, int from_tty,
 		     struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"),
-		    value);
+  gdb_printf (file, _("Always inserted breakpoint mode is %s.\n"),
+	      value);
+}
+
+/* True if breakpoint debug output is enabled.  */
+static bool debug_breakpoint = false;
+
+/* Print a "breakpoint" debug statement.  */
+#define breakpoint_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (debug_breakpoint, "breakpoint", fmt, \
+			      ##__VA_ARGS__)
+
+/* "show debug breakpoint" implementation.  */
+static void
+show_debug_breakpoint (struct ui_file *file, int from_tty,
+		       struct cmd_list_element *c, const char *value)
+{
+  gdb_printf (file, _("Breakpoint location debugging is %s.\n"), value);
 }
 
 /* See breakpoint.h.  */
@@ -382,14 +597,14 @@ show_always_inserted_mode (struct ui_fil
 int
 breakpoints_should_be_inserted_now (void)
 {
-  if (gdbarch_has_global_breakpoints (target_gdbarch ()))
+  if (gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
     {
       /* If breakpoints are global, they should be inserted even if no
 	 thread under gdb's control is running, or even if there are
 	 no threads under GDB's control yet.  */
       return 1;
     }
-  else if (target_has_execution)
+  else
     {
       if (always_inserted_mode)
 	{
@@ -398,14 +613,15 @@ breakpoints_should_be_inserted_now (void
 	  return 1;
 	}
 
-      if (threads_are_executing ())
-	return 1;
+      for (inferior *inf : all_inferiors ())
+	if (inf->has_execution ()
+	    && threads_are_executing (inf->process_target ()))
+	  return 1;
 
       /* Don't remove breakpoints yet if, even though all threads are
 	 stopped, we still have events to process.  */
       for (thread_info *tp : all_non_exited_threads ())
-	if (tp->resumed
-	    && tp->suspend.waitstatus_pending_p)
+	if (tp->resumed () && tp->has_pending_waitstatus ())
 	  return 1;
     }
   return 0;
@@ -461,7 +677,7 @@ breakpoint_condition_evaluation_mode (vo
 /* Return true if GDB should evaluate breakpoint conditions or false
    otherwise.  */
 
-static int
+static bool
 gdb_evaluates_breakpoint_condition_p (void)
 {
   const char *mode = breakpoint_condition_evaluation_mode ();
@@ -478,57 +694,105 @@ static int overlay_events_enabled;
 /* See description in breakpoint.h. */
 bool target_exact_watchpoints = false;
 
-/* Walk the following statement or block through all breakpoints.
-   ALL_BREAKPOINTS_SAFE does so even if the statement deletes the
-   current breakpoint.  */
+/* Chains of all breakpoints defined.  */
 
-#define ALL_BREAKPOINTS(B)  for (B = breakpoint_chain; B; B = B->next)
+static intrusive_list<breakpoint> breakpoint_chain;
 
-#define ALL_BREAKPOINTS_SAFE(B,TMP)	\
-	for (B = breakpoint_chain;	\
-	     B ? (TMP=B->next, 1): 0;	\
-	     B = TMP)
-
-/* Similar iterator for the low-level breakpoints.  SAFE variant is
-   not provided so update_global_location_list must not be called
-   while executing the block of ALL_BP_LOCATIONS.  */
-
-#define ALL_BP_LOCATIONS(B,BP_TMP)					\
-	for (BP_TMP = bp_locations;					\
-	     BP_TMP < bp_locations + bp_locations_count && (B = *BP_TMP);\
-	     BP_TMP++)
-
-/* Iterates through locations with address ADDRESS for the currently selected
-   program space.  BP_LOCP_TMP points to each object.  BP_LOCP_START points
-   to where the loop should start from.
-   If BP_LOCP_START is a NULL pointer, the macro automatically seeks the
-   appropriate location to start with.  */
-
-#define ALL_BP_LOCATIONS_AT_ADDR(BP_LOCP_TMP, BP_LOCP_START, ADDRESS)	\
-	for (BP_LOCP_START = BP_LOCP_START == NULL ? get_first_locp_gte_addr (ADDRESS) : BP_LOCP_START, \
-	     BP_LOCP_TMP = BP_LOCP_START;				\
-	     BP_LOCP_START						\
-	     && (BP_LOCP_TMP < bp_locations + bp_locations_count	\
-	     && (*BP_LOCP_TMP)->address == ADDRESS);			\
-	     BP_LOCP_TMP++)
-
-/* Iterator for tracepoints only.  */
-
-#define ALL_TRACEPOINTS(B)  \
-  for (B = breakpoint_chain; B; B = B->next)  \
-    if (is_tracepoint (B))
+/* See breakpoint.h.  */
 
-/* Chains of all breakpoints defined.  */
+breakpoint_range
+all_breakpoints ()
+{
+  return breakpoint_range (breakpoint_chain.begin (), breakpoint_chain.end ());
+}
+
+/* See breakpoint.h.  */
+
+breakpoint_safe_range
+all_breakpoints_safe ()
+{
+  return breakpoint_safe_range (all_breakpoints ());
+}
 
-static struct breakpoint *breakpoint_chain;
+/* See breakpoint.h.  */
+
+tracepoint_range
+all_tracepoints ()
+{
+  return tracepoint_range (tracepoint_iterator (breakpoint_chain.begin ()),
+			   tracepoint_iterator (breakpoint_chain.end ()));
+}
 
 /* Array is sorted by bp_location_is_less_than - primarily by the ADDRESS.  */
 
-static struct bp_location **bp_locations;
+static std::vector<bp_location *> bp_locations;
+
+/* See breakpoint.h.  */
+
+const std::vector<bp_location *> &
+all_bp_locations ()
+{
+  return bp_locations;
+}
+
+/* Range to iterate over breakpoint locations at a given address.  */
+
+struct bp_locations_at_addr_range
+{
+  using iterator = std::vector<bp_location *>::iterator;
+
+  bp_locations_at_addr_range (CORE_ADDR addr)
+  {
+    struct compare
+    {
+      bool operator() (const bp_location *loc, CORE_ADDR addr_) const
+      { return loc->address < addr_; }
+
+      bool operator() (CORE_ADDR addr_, const bp_location *loc) const
+      { return addr_ < loc->address; }
+    };
+
+    auto it_pair = std::equal_range (bp_locations.begin (), bp_locations.end (),
+				     addr, compare ());
+
+    m_begin = it_pair.first;
+    m_end = it_pair.second;
+  }
 
-/* Number of elements of BP_LOCATIONS.  */
+  iterator begin () const
+  { return m_begin; }
 
-static unsigned bp_locations_count;
+  iterator end () const
+  { return m_end; }
+
+private:
+  iterator m_begin;
+  iterator m_end;
+};
+
+/* Return a range to iterate over all breakpoint locations exactly at address
+   ADDR.
+
+   If it's needed to iterate multiple times on the same range, it's possible
+   to save the range in a local variable and use it multiple times:
+
+     auto range = all_bp_locations_at_addr (addr);
+
+     for (bp_location *loc : range)
+       // use loc
+
+     for (bp_location *loc : range)
+       // use loc
+
+   This saves a bit of time, as it avoids re-doing the binary searches to find
+   the range's boundaries.  Just remember not to change the bp_locations vector
+   in the mean time, as it could make the range's iterators stale.  */
+
+static bp_locations_at_addr_range
+all_bp_locations_at_addr (CORE_ADDR addr)
+{
+  return bp_locations_at_addr_range (addr);
+}
 
 /* Maximum alignment offset between bp_target_info.PLACED_ADDRESS and
    ADDRESS for the current elements of BP_LOCATIONS which get a valid
@@ -569,25 +833,8 @@ static struct cmd_list_element *breakpoi
 static struct cmd_list_element *breakpoint_show_cmdlist;
 struct cmd_list_element *save_cmdlist;
 
-/* See declaration at breakpoint.h.  */
-
-struct breakpoint *
-breakpoint_find_if (int (*func) (struct breakpoint *b, void *d),
-		    void *user_data)
-{
-  struct breakpoint *b = NULL;
-
-  ALL_BREAKPOINTS (b)
-    {
-      if (func (b, user_data) != 0)
-	break;
-    }
-
-  return b;
-}
-
 /* Return whether a breakpoint is an active enabled breakpoint.  */
-static int
+static bool
 breakpoint_enabled (struct breakpoint *b)
 {
   return (b->enable_state == bp_enabled);
@@ -628,10 +875,8 @@ scoped_rbreak_breakpoints::~scoped_rbrea
 void
 clear_breakpoint_hit_counts (void)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-    b->hit_count = 0;
+  for (breakpoint &b : all_breakpoints ())
+    b.hit_count = 0;
 }
 
 
@@ -641,13 +886,24 @@ clear_breakpoint_hit_counts (void)
 struct breakpoint *
 get_breakpoint (int num)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-    if (b->number == num)
-      return b;
+  for (breakpoint &b : all_breakpoints ())
+    if (b.number == num)
+      return &b;
   
-  return NULL;
+  return nullptr;
+}
+
+/* Return TRUE if NUM refer to an existing breakpoint that has
+   multiple code locations.  */
+
+static bool
+has_multiple_locations (int num)
+{
+  for (breakpoint &b : all_breakpoints ())
+    if (b.number == num)
+      return b.has_multiple_locations ();
+
+  return false;
 }
 
 
@@ -658,8 +914,6 @@ get_breakpoint (int num)
 static void
 mark_breakpoint_modified (struct breakpoint *b)
 {
-  struct bp_location *loc;
-
   /* This is only meaningful if the target is
      evaluating conditions and if the user has
      opted for condition evaluation on the target's
@@ -671,8 +925,8 @@ mark_breakpoint_modified (struct breakpo
   if (!is_breakpoint (b))
     return;
 
-  for (loc = b->loc; loc; loc = loc->next)
-    loc->condition_changed = condition_modified;
+  for (bp_location &loc : b->locations ())
+    loc.condition_changed = condition_modified;
 }
 
 /* Mark location as "conditions have changed" in case the target supports
@@ -724,7 +978,6 @@ set_condition_evaluation_mode (const cha
   /* Only update the mode if the user picked a different one.  */
   if (new_mode != old_mode)
     {
-      struct bp_location *loc, **loc_tmp;
       /* If the user switched to a different evaluation mode, we
 	 need to synch the changes with the target as follows:
 
@@ -736,15 +989,15 @@ set_condition_evaluation_mode (const cha
 	{
 	  /* Mark everything modified and synch conditions with the
 	     target.  */
-	  ALL_BP_LOCATIONS (loc, loc_tmp)
+	  for (bp_location *loc : all_bp_locations ())
 	    mark_breakpoint_location_modified (loc);
-  	}
+	}
       else
 	{
 	  /* Manually mark non-duplicate locations to synch conditions
 	     with the target.  We do this to remove all the conditions the
 	     target knows about.  */
-	  ALL_BP_LOCATIONS (loc, loc_tmp)
+	  for (bp_location *loc : all_bp_locations ())
 	    if (is_breakpoint (loc->owner) && loc->inserted)
 	      loc->needs_update = 1;
 	}
@@ -764,136 +1017,227 @@ show_condition_evaluation_mode (struct u
 				struct cmd_list_element *c, const char *value)
 {
   if (condition_evaluation_mode == condition_evaluation_auto)
-    fprintf_filtered (file,
-		      _("Breakpoint condition evaluation "
-			"mode is %s (currently %s).\n"),
-		      value,
-		      breakpoint_condition_evaluation_mode ());
-  else
-    fprintf_filtered (file, _("Breakpoint condition evaluation mode is %s.\n"),
-		      value);
-}
-
-/* A comparison function for bp_location AP and BP that is used by
-   bsearch.  This comparison function only cares about addresses, unlike
-   the more general bp_location_is_less_than function.  */
-
-static int
-bp_locations_compare_addrs (const void *ap, const void *bp)
-{
-  const struct bp_location *a = *(const struct bp_location **) ap;
-  const struct bp_location *b = *(const struct bp_location **) bp;
-
-  if (a->address == b->address)
-    return 0;
+    gdb_printf (file,
+		_("Breakpoint condition evaluation "
+		  "mode is %s (currently %s).\n"),
+		value,
+		breakpoint_condition_evaluation_mode ());
   else
-    return ((a->address > b->address) - (a->address < b->address));
+    gdb_printf (file, _("Breakpoint condition evaluation mode is %s.\n"),
+		value);
 }
 
-/* Helper function to skip all bp_locations with addresses
-   less than ADDRESS.  It returns the first bp_location that
-   is greater than or equal to ADDRESS.  If none is found, just
-   return NULL.  */
+/* Parse COND_STRING in the context of LOC and set as the condition
+   expression of LOC.  BP_NUM is the number of LOC's owner, LOC_NUM is
+   the number of LOC within its owner.  In case of parsing error, mark
+   LOC as DISABLED_BY_COND.  In case of success, unset DISABLED_BY_COND.  */
 
-static struct bp_location **
-get_first_locp_gte_addr (CORE_ADDR address)
+static void
+set_breakpoint_location_condition (const char *cond_string, bp_location *loc,
+				   int bp_num, int loc_num)
 {
-  struct bp_location dummy_loc;
-  struct bp_location *dummy_locp = &dummy_loc;
-  struct bp_location **locp_found = NULL;
+  bool has_junk = false;
+  try
+    {
+      expression_up new_exp = parse_exp_1 (&cond_string, loc->address,
+					   block_for_pc (loc->address), 0);
+      if (*cond_string != 0)
+	has_junk = true;
+      else
+	{
+	  loc->cond = std::move (new_exp);
+	  if (loc->disabled_by_cond && loc->enabled)
+	    gdb_printf (_("Breakpoint %d's condition is now valid at "
+			  "location %d, enabling.\n"),
+			bp_num, loc_num);
 
-  /* Initialize the dummy location's address field.  */
-  dummy_loc.address = address;
+	  loc->disabled_by_cond = false;
+	}
+    }
+  catch (const gdb_exception_error &e)
+    {
+      if (loc->enabled)
+	{
+	  /* Warn if a user-enabled location is now becoming disabled-by-cond.
+	     BP_NUM is 0 if the breakpoint is being defined for the first
+	     time using the "break ... if ..." command, and non-zero if
+	     already defined.  */
+	  if (bp_num != 0)
+	    warning (_("failed to validate condition at location %d.%d, "
+		       "disabling:\n  %s"), bp_num, loc_num, e.what ());
+	  else
+	    warning (_("failed to validate condition at location %d, "
+		       "disabling:\n  %s"), loc_num, e.what ());
+	}
 
-  /* Find a close match to the first location at ADDRESS.  */
-  locp_found = ((struct bp_location **)
-		bsearch (&dummy_locp, bp_locations, bp_locations_count,
-			 sizeof (struct bp_location **),
-			 bp_locations_compare_addrs));
+      loc->disabled_by_cond = true;
+    }
 
-  /* Nothing was found, nothing left to do.  */
-  if (locp_found == NULL)
-    return NULL;
+  if (has_junk)
+    error (_("Garbage '%s' follows condition"), cond_string);
+}
 
-  /* We may have found a location that is at ADDRESS but is not the first in the
-     location's list.  Go backwards (if possible) and locate the first one.  */
-  while ((locp_found - 1) >= bp_locations
-	 && (*(locp_found - 1))->address == address)
-    locp_found--;
+/* See breakpoint.h.  */
 
-  return locp_found;
+void
+notify_breakpoint_modified (breakpoint *b)
+{
+  interps_notify_breakpoint_modified (b);
+  gdb::observers::breakpoint_modified.notify (b);
 }
 
 void
 set_breakpoint_condition (struct breakpoint *b, const char *exp,
-			  int from_tty)
+			  int from_tty, bool force)
 {
-  xfree (b->cond_string);
-  b->cond_string = NULL;
-
-  if (is_watchpoint (b))
-    {
-      struct watchpoint *w = (struct watchpoint *) b;
-
-      w->cond_exp.reset ();
-    }
-  else
+  if (*exp == 0)
     {
-      struct bp_location *loc;
+      b->cond_string.reset ();
 
-      for (loc = b->loc; loc; loc = loc->next)
+      if (is_watchpoint (b))
+	gdb::checked_static_cast<watchpoint *> (b)->cond_exp.reset ();
+      else
 	{
-	  loc->cond.reset ();
-
-	  /* No need to free the condition agent expression
-	     bytecode (if we have one).  We will handle this
-	     when we go through update_global_location_list.  */
+	  int loc_num = 1;
+	  for (bp_location &loc : b->locations ())
+	    {
+	      loc.cond.reset ();
+	      if (loc.disabled_by_cond && loc.enabled)
+		gdb_printf (_("Breakpoint %d's condition is now valid at "
+			      "location %d, enabling.\n"),
+			    b->number, loc_num);
+	      loc.disabled_by_cond = false;
+	      loc_num++;
+
+	      /* No need to free the condition agent expression
+		 bytecode (if we have one).  We will handle this
+		 when we go through update_global_location_list.  */
+	    }
 	}
-    }
 
-  if (*exp == 0)
-    {
       if (from_tty)
-	printf_filtered (_("Breakpoint %d now unconditional.\n"), b->number);
+	gdb_printf (_("Breakpoint %d now unconditional.\n"), b->number);
     }
   else
     {
-      const char *arg = exp;
-
-      /* I don't know if it matters whether this is the string the user
-	 typed in or the decompiled expression.  */
-      b->cond_string = xstrdup (arg);
-      b->condition_not_parsed = 0;
-
       if (is_watchpoint (b))
 	{
-	  struct watchpoint *w = (struct watchpoint *) b;
-
 	  innermost_block_tracker tracker;
-	  arg = exp;
-	  w->cond_exp = parse_exp_1 (&arg, 0, 0, 0, &tracker);
-	  if (*arg)
+	  const char *arg = exp;
+	  expression_up new_exp = parse_exp_1 (&arg, 0, 0, 0, &tracker);
+	  if (*arg != 0)
 	    error (_("Junk at end of expression"));
+	  watchpoint *w = gdb::checked_static_cast<watchpoint *> (b);
+	  w->cond_exp = std::move (new_exp);
 	  w->cond_exp_valid_block = tracker.block ();
 	}
       else
 	{
-	  struct bp_location *loc;
+	  /* Parse and set condition expressions.  We make two passes.
+	     In the first, we parse the condition string to see if it
+	     is valid in at least one location.  If so, the condition
+	     would be accepted.  So we go ahead and set the locations'
+	     conditions.  In case no valid case is found, we throw
+	     the error and the condition string will be rejected.
+	     This two-pass approach is taken to avoid setting the
+	     state of locations in case of a reject.  */
+	  for (const bp_location &loc : b->locations ())
+	    {
+	      try
+		{
+		  const char *arg = exp;
+		  parse_exp_1 (&arg, loc.address,
+			       block_for_pc (loc.address), 0);
+		  if (*arg != 0)
+		    error (_("Junk at end of expression"));
+		  break;
+		}
+	      catch (const gdb_exception_error &e)
+		{
+		  /* Condition string is invalid.  If this happens to
+		     be the last loc, abandon (if not forced) or continue
+		     (if forced).  */
+		  if (&loc == &b->last_loc () && !force)
+		    throw;
+		}
+	    }
 
-	  for (loc = b->loc; loc; loc = loc->next)
+	  /* If we reach here, the condition is valid at some locations.  */
+	  int loc_num = 1;
+	  for (bp_location &loc : b->locations ())
 	    {
-	      arg = exp;
-	      loc->cond =
-		parse_exp_1 (&arg, loc->address,
-			     block_for_pc (loc->address), 0);
-	      if (*arg)
-		error (_("Junk at end of expression"));
+	      set_breakpoint_location_condition (exp, &loc, b->number, loc_num);
+	      loc_num++;
 	    }
 	}
+
+      /* We know that the new condition parsed successfully.  The
+	 condition string of the breakpoint can be safely updated.  */
+      b->cond_string = make_unique_xstrdup (exp);
+      b->condition_not_parsed = 0;
     }
   mark_breakpoint_modified (b);
 
-  gdb::observers::breakpoint_modified.notify (b);
+  notify_breakpoint_modified (b);
+}
+
+/* See breakpoint.h.  */
+
+void
+set_breakpoint_condition (int bpnum, const char *exp, int from_tty,
+			  bool force)
+{
+  for (breakpoint &b : all_breakpoints ())
+    if (b.number == bpnum)
+      {
+	/* Check if this breakpoint has a "stop" method implemented in an
+	   extension language.  This method and conditions entered into GDB
+	   from the CLI are mutually exclusive.  */
+	const struct extension_language_defn *extlang
+	  = get_breakpoint_cond_ext_lang (&b, EXT_LANG_NONE);
+
+	if (extlang != NULL)
+	  {
+	    error (_("Only one stop condition allowed.  There is currently"
+		     " a %s stop condition defined for this breakpoint."),
+		   ext_lang_capitalized_name (extlang));
+	  }
+	set_breakpoint_condition (&b, exp, from_tty, force);
+
+	if (is_breakpoint (&b))
+	  update_global_location_list (UGLL_MAY_INSERT);
+
+	return;
+      }
+
+  error (_("No breakpoint number %d."), bpnum);
+}
+
+/* The options for the "condition" command.  */
+
+struct condition_command_opts
+{
+  /* For "-force".  */
+  bool force_condition = false;
+};
+
+static const gdb::option::option_def condition_command_option_defs[] = {
+
+  gdb::option::flag_option_def<condition_command_opts> {
+    "force",
+    [] (condition_command_opts *opts) { return &opts->force_condition; },
+    N_("Set the condition even if it is invalid for all current locations."),
+  },
+
+};
+
+/* Create an option_def_group for the "condition" options, with
+   CC_OPTS as context.  */
+
+static inline gdb::option::option_def_group
+make_condition_command_options_def_group (condition_command_opts *cc_opts)
+{
+  return {{condition_command_option_defs}, cc_opts};
 }
 
 /* Completion for the "condition" command.  */
@@ -901,33 +1245,45 @@ set_breakpoint_condition (struct breakpo
 static void
 condition_completer (struct cmd_list_element *cmd,
 		     completion_tracker &tracker,
-		     const char *text, const char *word)
+		     const char *text, const char * /*word*/)
 {
-  const char *space;
+  bool has_no_arguments = (*text == '\0');
+  condition_command_opts cc_opts;
+  const auto group = make_condition_command_options_def_group (&cc_opts);
+  if (gdb::option::complete_options
+      (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, group))
+    return;
 
   text = skip_spaces (text);
-  space = skip_to_space (text);
+  const char *space = skip_to_space (text);
   if (*space == '\0')
     {
       int len;
-      struct breakpoint *b;
 
       if (text[0] == '$')
 	{
+	  tracker.advance_custom_word_point_by (1);
 	  /* We don't support completion of history indices.  */
 	  if (!isdigit (text[1]))
 	    complete_internalvar (tracker, &text[1]);
 	  return;
 	}
 
+      /* Suggest the "-force" flag if no arguments are given.  If
+	 arguments were passed, they either already include the flag,
+	 or we are beyond the point of suggesting it because it's
+	 positionally the first argument.  */
+      if (has_no_arguments)
+	gdb::option::complete_on_all_options (tracker, group);
+
       /* We're completing the breakpoint number.  */
       len = strlen (text);
 
-      ALL_BREAKPOINTS (b)
+      for (breakpoint &b : all_breakpoints ())
 	{
 	  char number[50];
 
-	  xsnprintf (number, sizeof (number), "%d", b->number);
+	  xsnprintf (number, sizeof (number), "%d", b.number);
 
 	  if (strncmp (number, text, len) == 0)
 	    tracker.add_completion (make_unique_xstrdup (number));
@@ -936,8 +1292,11 @@ condition_completer (struct cmd_list_ele
       return;
     }
 
-  /* We're completing the expression part.  */
-  text = skip_spaces (space);
+  /* We're completing the expression part.  Skip the breakpoint num.  */
+  const char *exp_start = skip_spaces (space);
+  tracker.advance_custom_word_point_by (exp_start - text);
+  text = exp_start;
+  const char *word = advance_to_expression_complete_word_point (tracker, text);
   expression_completer (cmd, tracker, text, word);
 }
 
@@ -946,7 +1305,6 @@ condition_completer (struct cmd_list_ele
 static void
 condition_command (const char *arg, int from_tty)
 {
-  struct breakpoint *b;
   const char *p;
   int bnum;
 
@@ -954,34 +1312,18 @@ condition_command (const char *arg, int
     error_no_arg (_("breakpoint number"));
 
   p = arg;
+
+  /* Check if the "-force" flag was passed.  */
+  condition_command_opts cc_opts;
+  const auto group = make_condition_command_options_def_group (&cc_opts);
+  gdb::option::process_options
+    (&p, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, group);
+
   bnum = get_number (&p);
   if (bnum == 0)
     error (_("Bad breakpoint argument: '%s'"), arg);
 
-  ALL_BREAKPOINTS (b)
-    if (b->number == bnum)
-      {
-	/* Check if this breakpoint has a "stop" method implemented in an
-	   extension language.  This method and conditions entered into GDB
-	   from the CLI are mutually exclusive.  */
-	const struct extension_language_defn *extlang
-	  = get_breakpoint_cond_ext_lang (b, EXT_LANG_NONE);
-
-	if (extlang != NULL)
-	  {
-	    error (_("Only one stop condition allowed.  There is currently"
-		     " a %s stop condition defined for this breakpoint."),
-		   ext_lang_capitalized_name (extlang));
-	  }
-	set_breakpoint_condition (b, p, from_tty);
-
-	if (is_breakpoint (b))
-	  update_global_location_list (UGLL_MAY_INSERT);
-
-	return;
-      }
-
-  error (_("No breakpoint number %d."), bnum);
+  set_breakpoint_condition (bnum, p, from_tty, cc_opts.force_condition);
 }
 
 /* Check that COMMAND do not contain commands that are suitable
@@ -1013,8 +1355,10 @@ check_no_tracepoint_commands (struct com
     }
 }
 
-struct longjmp_breakpoint : public breakpoint
+struct longjmp_breakpoint : public momentary_breakpoint
 {
+  using momentary_breakpoint::momentary_breakpoint;
+
   ~longjmp_breakpoint () override;
 };
 
@@ -1025,13 +1369,8 @@ is_tracepoint_type (bptype type)
 {
   return (type == bp_tracepoint
 	  || type == bp_fast_tracepoint
-	  || type == bp_static_tracepoint);
-}
-
-static bool
-is_longjmp_type (bptype type)
-{
-  return type == bp_longjmp || type == bp_exception;
+	  || type == bp_static_tracepoint
+	  || type == bp_static_marker_tracepoint);
 }
 
 /* See breakpoint.h.  */
@@ -1045,19 +1384,43 @@ is_tracepoint (const struct breakpoint *
 /* Factory function to create an appropriate instance of breakpoint given
    TYPE.  */
 
-static std::unique_ptr<breakpoint>
-new_breakpoint_from_type (bptype type)
+template<typename... Arg>
+static std::unique_ptr<code_breakpoint>
+new_breakpoint_from_type (struct gdbarch *gdbarch, bptype type,
+			  Arg&&... args)
 {
-  breakpoint *b;
+  code_breakpoint *b;
 
-  if (is_tracepoint_type (type))
-    b = new tracepoint ();
-  else if (is_longjmp_type (type))
-    b = new longjmp_breakpoint ();
-  else
-    b = new breakpoint ();
+  switch (type)
+    {
+    case bp_breakpoint:
+    case bp_hardware_breakpoint:
+      b = new ordinary_breakpoint (gdbarch, type,
+				   std::forward<Arg> (args)...);
+      break;
+
+    case bp_fast_tracepoint:
+    case bp_static_tracepoint:
+    case bp_tracepoint:
+      b = new tracepoint (gdbarch, type,
+			  std::forward<Arg> (args)...);
+      break;
+
+    case bp_static_marker_tracepoint:
+      b = new static_marker_tracepoint (gdbarch, type,
+					std::forward<Arg> (args)...);
+      break;
 
-  return std::unique_ptr<breakpoint> (b);
+    case bp_dprintf:
+      b = new dprintf_breakpoint (gdbarch, type,
+				  std::forward<Arg> (args)...);
+      break;
+
+    default:
+      gdb_assert_not_reached ("invalid type");
+    }
+
+  return std::unique_ptr<code_breakpoint> (b);
 }
 
 /* A helper function that validates that COMMANDS are valid for a
@@ -1070,13 +1433,13 @@ validate_commands_for_breakpoint (struct
 {
   if (is_tracepoint (b))
     {
-      struct tracepoint *t = (struct tracepoint *) b;
+      tracepoint *t = gdb::checked_static_cast<tracepoint *> (b);
       struct command_line *c;
       struct command_line *while_stepping = 0;
 
       /* Reset the while-stepping step count.  The previous commands
-         might have included a while-stepping action, while the new
-         ones might not.  */
+	 might have included a while-stepping action, while the new
+	 ones might not.  */
       t->step_count = 0;
 
       /* We need to verify that each top-level element of commands is
@@ -1096,7 +1459,8 @@ validate_commands_for_breakpoint (struct
 	      if (b->type == bp_fast_tracepoint)
 		error (_("The 'while-stepping' command "
 			 "cannot be used for fast tracepoint"));
-	      else if (b->type == bp_static_tracepoint)
+	      else if (b->type == bp_static_tracepoint
+		       || b->type == bp_static_marker_tracepoint)
 		error (_("The 'while-stepping' command "
 			 "cannot be used for static tracepoint"));
 
@@ -1107,7 +1471,7 @@ validate_commands_for_breakpoint (struct
 		while_stepping = c;
 	    }
 
-	  validate_actionline (c->line, b);
+	  validate_actionline (c->line, t);
 	}
       if (while_stepping)
 	{
@@ -1134,16 +1498,15 @@ validate_commands_for_breakpoint (struct
 std::vector<breakpoint *>
 static_tracepoints_here (CORE_ADDR addr)
 {
-  struct breakpoint *b;
   std::vector<breakpoint *> found;
-  struct bp_location *loc;
 
-  ALL_BREAKPOINTS (b)
-    if (b->type == bp_static_tracepoint)
+  for (breakpoint &b : all_breakpoints ())
+    if (b.type == bp_static_tracepoint
+	|| b.type == bp_static_marker_tracepoint)
       {
-	for (loc = b->loc; loc; loc = loc->next)
-	  if (loc->address == addr)
-	    found.push_back (b);
+	for (bp_location &loc : b.locations ())
+	  if (loc.address == addr)
+	    found.push_back (&b);
       }
 
   return found;
@@ -1159,7 +1522,7 @@ breakpoint_set_commands (struct breakpoi
   validate_commands_for_breakpoint (b, commands.get ());
 
   b->commands = std::move (commands);
-  gdb::observers::breakpoint_modified.notify (b);
+  notify_breakpoint_modified (b);
 }
 
 /* Set the internal `silent' flag on the breakpoint.  Note that this
@@ -1173,33 +1536,64 @@ breakpoint_set_silent (struct breakpoint
 
   b->silent = silent;
   if (old_silent != silent)
-    gdb::observers::breakpoint_modified.notify (b);
+    notify_breakpoint_modified (b);
 }
 
-/* Set the thread for this breakpoint.  If THREAD is -1, make the
-   breakpoint work for any thread.  */
+/* See breakpoint.h.  */
 
 void
 breakpoint_set_thread (struct breakpoint *b, int thread)
 {
-  int old_thread = b->thread;
+  /* THREAD should be -1, meaning no thread restriction, or it should be a
+     valid global thread-id, which are greater than zero.  */
+  gdb_assert (thread == -1 || thread > 0);
+
+  /* It is not valid to set a thread restriction for a breakpoint that
+     already has task or inferior restriction.  */
+  gdb_assert (thread == -1 || (b->task == -1 && b->inferior == -1));
 
+  int old_thread = b->thread;
   b->thread = thread;
   if (old_thread != thread)
-    gdb::observers::breakpoint_modified.notify (b);
+    notify_breakpoint_modified (b);
+}
+
+/* See breakpoint.h.  */
+
+void
+breakpoint_set_inferior (struct breakpoint *b, int inferior)
+{
+  /* INFERIOR should be -1, meaning no inferior restriction, or it should
+     be a valid inferior number, which are greater than zero.  */
+  gdb_assert (inferior == -1 || inferior > 0);
+
+  /* It is not valid to set an inferior restriction for a breakpoint that
+     already has a task or thread restriction.  */
+  gdb_assert (inferior == -1 || (b->task == -1 && b->thread == -1));
+
+  int old_inferior = b->inferior;
+  b->inferior = inferior;
+  if (old_inferior != inferior)
+    notify_breakpoint_modified (b);
 }
 
-/* Set the task for this breakpoint.  If TASK is 0, make the
-   breakpoint work for any task.  */
+/* See breakpoint.h.  */
 
 void
 breakpoint_set_task (struct breakpoint *b, int task)
 {
-  int old_task = b->task;
+  /* TASK should be -1, meaning no task restriction, or it should be a
+     valid task-id, which are greater than zero.  */
+  gdb_assert (task == -1 || task > 0);
+
+  /* It is not valid to set a task restriction for a breakpoint that
+     already has a thread or inferior restriction.  */
+  gdb_assert (task == -1 || (b->thread == -1 && b->inferior == -1));
 
+  int old_task = b->task;
   b->task = task;
   if (old_task != task)
-    gdb::observers::breakpoint_modified.notify (b);
+    notify_breakpoint_modified (b);
 }
 
 static void
@@ -1216,13 +1610,23 @@ commands_command_1 (const char *arg, int
 
   if (arg == NULL || !*arg)
     {
+      /* Argument not explicitly given.  Synthesize it.  */
       if (breakpoint_count - prev_breakpoint_count > 1)
 	new_arg = string_printf ("%d-%d", prev_breakpoint_count + 1,
 				 breakpoint_count);
       else if (breakpoint_count > 0)
 	new_arg = string_printf ("%d", breakpoint_count);
-      arg = new_arg.c_str ();
     }
+  else
+    {
+      /* Create a copy of ARG.  This is needed because the "commands"
+	 command may be coming from a script.  In that case, the read
+	 line buffer is going to be overwritten in the lambda of
+	 'map_breakpoint_numbers' below when reading the next line
+	 before we are are done parsing the breakpoint numbers.  */
+      new_arg = arg;
+    }
+  arg = new_arg.c_str ();
 
   map_breakpoint_numbers
     (arg, [&] (breakpoint *b)
@@ -1241,7 +1645,9 @@ commands_command_1 (const char *arg, int
 
 	       auto do_validate = [=] (const char *line)
 				  {
-				    validate_actionline (line, b);
+				    tracepoint *t
+				      = gdb::checked_static_cast<tracepoint *> (b);
+				    validate_actionline (line, t);
 				  };
 	       gdb::function_view<void (const char *)> validator;
 	       if (is_tracepoint (b))
@@ -1258,7 +1664,7 @@ commands_command_1 (const char *arg, int
 	 {
 	   validate_commands_for_breakpoint (b, cmd.get ());
 	   b->commands = cmd;
-	   gdb::observers::breakpoint_modified.notify (b);
+	   notify_breakpoint_modified (b);
 	 }
      });
 }
@@ -1281,19 +1687,19 @@ commands_from_control_command (const cha
   return simple_control;
 }
 
-/* Return non-zero if BL->TARGET_INFO contains valid information.  */
+/* Return true if BL->TARGET_INFO contains valid information.  */
 
-static int
+static bool
 bp_location_has_shadow (struct bp_location *bl)
 {
   if (bl->loc_type != bp_loc_software_breakpoint)
-    return 0;
+    return false;
   if (!bl->inserted)
-    return 0;
+    return false;
   if (bl->target_info.shadow_len == 0)
     /* BL isn't valid, or doesn't shadow memory.  */
-    return 0;
-  return 1;
+    return false;
+  return true;
 }
 
 /* Update BUF, which is LEN bytes read from the target address
@@ -1317,7 +1723,7 @@ one_breakpoint_xfer_memory (gdb_byte *re
   int bptoffset = 0;
 
   if (!breakpoint_address_match (target_info->placed_address_space, 0,
-				 current_program_space->aspace, 0))
+				 current_program_space->aspace.get (), 0))
     {
       /* The breakpoint is inserted in a different address space.  */
       return;
@@ -1422,7 +1828,7 @@ breakpoint_xfer_memory (gdb_byte *readbu
      report higher one.  */
 
   bc_l = 0;
-  bc_r = bp_locations_count;
+  bc_r = bp_locations.size ();
   while (bc_l + 1 < bc_r)
     {
       struct bp_location *bl;
@@ -1467,29 +1873,30 @@ breakpoint_xfer_memory (gdb_byte *readbu
 
   /* Now do full processing of the found relevant range of elements.  */
 
-  for (bc = bc_l; bc < bp_locations_count; bc++)
-  {
-    struct bp_location *bl = bp_locations[bc];
+  for (bc = bc_l; bc < bp_locations.size (); bc++)
+    {
+      struct bp_location *bl = bp_locations[bc];
 
-    /* bp_location array has BL->OWNER always non-NULL.  */
-    if (bl->owner->type == bp_none)
-      warning (_("reading through apparently deleted breakpoint #%d?"),
-	       bl->owner->number);
-
-    /* Performance optimization: any further element can no longer affect BUF
-       content.  */
-
-    if (bl->address >= bp_locations_placed_address_before_address_max
-	&& memaddr + len <= (bl->address
-			     - bp_locations_placed_address_before_address_max))
-      break;
+      /* bp_location array has BL->OWNER always non-NULL.  */
+      if (bl->owner->type == bp_none)
+	warning (_("reading through apparently deleted breakpoint #%d?"),
+		 bl->owner->number);
 
-    if (!bp_location_has_shadow (bl))
-      continue;
+      /* Performance optimization: any further element can no longer affect BUF
+	 content.  */
 
-    one_breakpoint_xfer_memory (readbuf, writebuf, writebuf_org,
-				memaddr, len, &bl->target_info, bl->gdbarch);
-  }
+      if (bl->address >= bp_locations_placed_address_before_address_max
+	  && (memaddr + len
+	      <= (bl->address
+		  - bp_locations_placed_address_before_address_max)))
+	break;
+
+      if (!bp_location_has_shadow (bl))
+	continue;
+
+      one_breakpoint_xfer_memory (readbuf, writebuf, writebuf_org,
+				  memaddr, len, &bl->target_info, bl->gdbarch);
+    }
 }
 
 /* See breakpoint.h.  */
@@ -1530,13 +1937,13 @@ is_watchpoint (const struct breakpoint *
    and in any state.  It is presently left to the target allowing
    memory accesses when threads are running.  */
 
-static int
+static bool
 watchpoint_in_thread_scope (struct watchpoint *b)
 {
   return (b->pspace == current_program_space
 	  && (b->watchpoint_thread == null_ptid
 	      || (inferior_ptid == b->watchpoint_thread
-		  && !inferior_thread ()->executing)));
+		  && !inferior_thread ()->executing ())));
 }
 
 /* Set watchpoint B to disp_del_at_next_stop, even including its possible
@@ -1554,6 +1961,7 @@ watchpoint_del_at_next_stop (struct watc
       w->related_breakpoint = w;
     }
   w->disposition = disp_del_at_next_stop;
+  disable_breakpoint (w);
 }
 
 /* Extract a bitfield value from value VAL using the bit parameters contained in
@@ -1567,50 +1975,34 @@ extract_bitfield_from_watchpoint_value (
   if (val == NULL)
     return NULL;
 
-  bit_val = allocate_value (value_type (val));
+  bit_val = value::allocate (val->type ());
 
-  unpack_value_bitfield (bit_val,
-			 w->val_bitpos,
-			 w->val_bitsize,
-			 value_contents_for_printing (val),
-			 value_offset (val),
-			 val);
+  val->unpack_bitfield (bit_val,
+			w->val_bitpos,
+			w->val_bitsize,
+			val->contents_for_printing ().data (),
+			val->offset ());
 
   return bit_val;
 }
 
-/* Allocate a dummy location and add it to B, which must be a software
-   watchpoint.  This is required because even if a software watchpoint
-   is not watching any memory, bpstat_stop_status requires a location
-   to be able to report stops.  */
+/* Allocate a dummy location and add it to B.  This is required
+   because bpstat_stop_status requires a location to be able to report
+   stops.  */
 
 static void
-software_watchpoint_add_no_memory_location (struct breakpoint *b,
-					    struct program_space *pspace)
+add_dummy_location (struct breakpoint *b,
+		    struct program_space *pspace)
 {
-  gdb_assert (b->type == bp_watchpoint && b->loc == NULL);
+  gdb_assert (!b->has_locations ());
 
-  b->loc = allocate_bp_location (b);
-  b->loc->pspace = pspace;
-  b->loc->address = -1;
-  b->loc->length = -1;
-}
-
-/* Returns true if B is a software watchpoint that is not watching any
-   memory (e.g., "watch $pc").  */
-
-static bool
-is_no_memory_software_watchpoint (struct breakpoint *b)
-{
-  return (b->type == bp_watchpoint
-	  && b->loc != NULL
-	  && b->loc->next == NULL
-	  && b->loc->address == -1
-	  && b->loc->length == -1);
+  bp_location *loc = new bp_location (b, bp_loc_other);
+  loc->pspace = pspace;
+  b->add_location (*loc);
 }
 
 /* Assuming that B is a watchpoint:
-   - Reparse watchpoint expression, if REPARSE is non-zero
+   - Reparse watchpoint expression, if REPARSE is true
    - Evaluate expression and store the result in B->val
    - Evaluate the condition if there is one, and store the result
      in b->loc->cond.
@@ -1662,11 +2054,9 @@ is_no_memory_software_watchpoint (struct
    watchpoint removal from inferior.  */
 
 static void
-update_watchpoint (struct watchpoint *b, int reparse)
+update_watchpoint (struct watchpoint *b, bool reparse)
 {
-  int within_current_scope;
-  struct frame_id saved_frame_id;
-  int frame_saved;
+  bool within_current_scope;
 
   /* If this is a local watchpoint, we only want to check if the
      watchpoint frame is in scope if the current thread is the thread
@@ -1676,15 +2066,15 @@ update_watchpoint (struct watchpoint *b,
 
   if (b->disposition == disp_del_at_next_stop)
     return;
- 
-  frame_saved = 0;
+
+  std::optional<scoped_restore_selected_frame> restore_frame;
 
   /* Determine if the watchpoint is within scope.  */
   if (b->exp_valid_block == NULL)
-    within_current_scope = 1;
+    within_current_scope = true;
   else
     {
-      struct frame_info *fi = get_current_frame ();
+      frame_info_ptr fi = get_current_frame ();
       struct gdbarch *frame_arch = get_frame_arch (fi);
       CORE_ADDR frame_pc = get_frame_pc (fi);
 
@@ -1696,12 +2086,11 @@ update_watchpoint (struct watchpoint *b,
 	return;
 
       /* Save the current frame's ID so we can restore it after
-         evaluating the watchpoint expression on its own frame.  */
+	 evaluating the watchpoint expression on its own frame.  */
       /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
-         took a frame parameter, so that we didn't have to change the
-         selected frame.  */
-      frame_saved = 1;
-      saved_frame_id = get_frame_id (get_selected_frame (NULL));
+	 took a frame parameter, so that we didn't have to change the
+	 selected frame.  */
+      restore_frame.emplace ();
 
       fi = frame_find_by_id (b->watchpoint_frame);
       within_current_scope = (fi != NULL);
@@ -1712,14 +2101,16 @@ update_watchpoint (struct watchpoint *b,
   /* We don't free locations.  They are stored in the bp_location array
      and update_global_location_list will eventually delete them and
      remove breakpoints if needed.  */
-  b->loc = NULL;
+  b->clear_locations ();
 
   if (within_current_scope && reparse)
     {
       const char *s;
 
       b->exp.reset ();
-      s = b->exp_string_reparse ? b->exp_string_reparse : b->exp_string;
+      s = (b->exp_string_reparse
+	   ? b->exp_string_reparse.get ()
+	   : b->exp_string.get ());
       b->exp = parse_exp_1 (&s, 0, b->exp_valid_block, 0);
       /* If the meaning of expression itself changed, the old value is
 	 no longer relevant.  We don't want to report a watchpoint hit
@@ -1735,7 +2126,7 @@ update_watchpoint (struct watchpoint *b,
 	{
 	  b->cond_exp.reset ();
 
-	  s = b->cond_string;
+	  s = b->cond_string.get ();
 	  b->cond_exp = parse_exp_1 (&s, 0, b->cond_exp_valid_block, 0);
 	}
     }
@@ -1745,14 +2136,14 @@ update_watchpoint (struct watchpoint *b,
      don't try to insert watchpoint.  We don't automatically delete
      such watchpoint, though, since failure to parse expression
      is different from out-of-scope watchpoint.  */
-  if (!target_has_execution)
+  if (!target_has_execution ())
     {
       /* Without execution, memory can't change.  No use to try and
 	 set watchpoint locations.  The watchpoint will be reset when
 	 the target gains execution, through breakpoint_re_set.  */
       if (!can_use_hw_watchpoints)
 	{
-	  if (b->ops->works_in_software_mode (b))
+	  if (b->works_in_software_mode ())
 	    b->type = bp_watchpoint;
 	  else
 	    error (_("Can't set read/access watchpoint when "
@@ -1761,12 +2152,12 @@ update_watchpoint (struct watchpoint *b,
     }
   else if (within_current_scope && b->exp)
     {
-      int pc = 0;
       std::vector<value_ref_ptr> val_chain;
       struct value *v, *result;
       struct program_space *frame_pspace;
 
-      fetch_subexp_value (b->exp.get (), &pc, &v, &result, &val_chain, 0);
+      fetch_subexp_value (b->exp.get (), b->exp->op.get (), &v, &result,
+			  &val_chain, false);
 
       /* Avoid setting b->val if it's already set.  The meaning of
 	 b->val is 'the last value' user saw, and we should update
@@ -1795,29 +2186,28 @@ update_watchpoint (struct watchpoint *b,
 	     must watch it.  If the first value returned is
 	     still lazy, that means an error occurred reading it;
 	     watch it anyway in case it becomes readable.  */
-	  if (VALUE_LVAL (v) == lval_memory
-	      && (v == val_chain[0] || ! value_lazy (v)))
+	  if (v->lval () == lval_memory
+	      && (v == val_chain[0] || ! v->lazy ()))
 	    {
-	      struct type *vtype = check_typedef (value_type (v));
+	      struct type *vtype = check_typedef (v->type ());
 
 	      /* We only watch structs and arrays if user asked
 		 for it explicitly, never if they just happen to
 		 appear in the middle of some value chain.  */
 	      if (v == result
-		  || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
-		      && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
+		  || (vtype->code () != TYPE_CODE_STRUCT
+		      && vtype->code () != TYPE_CODE_ARRAY))
 		{
 		  CORE_ADDR addr;
 		  enum target_hw_bp_type type;
-		  struct bp_location *loc, **tmp;
 		  int bitpos = 0, bitsize = 0;
 
-		  if (value_bitsize (v) != 0)
+		  if (v->bitsize () != 0)
 		    {
 		      /* Extract the bit parameters out from the bitfield
 			 sub-expression.  */
-		      bitpos = value_bitpos (v);
-		      bitsize = value_bitsize (v);
+		      bitpos = v->bitpos ();
+		      bitsize = v->bitsize ();
 		    }
 		  else if (v == result && b->val_bitsize != 0)
 		    {
@@ -1828,7 +2218,7 @@ update_watchpoint (struct watchpoint *b,
 		      bitsize = b->val_bitsize;
 		    }
 
-		  addr = value_address (v);
+		  addr = v->address ();
 		  if (bitsize != 0)
 		    {
 		      /* Skip the bytes that don't contain the bitfield.  */
@@ -1841,14 +2231,12 @@ update_watchpoint (struct watchpoint *b,
 		  else if (b->type == bp_access_watchpoint)
 		    type = hw_access;
 
-		  loc = allocate_bp_location (b);
-		  for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next))
-		    ;
-		  *tmp = loc;
-		  loc->gdbarch = get_type_arch (value_type (v));
-
+		  bp_location *loc = b->allocate_location ();
+		  loc->gdbarch = v->type ()->arch ();
 		  loc->pspace = frame_pspace;
-		  loc->address = address_significant (loc->gdbarch, addr);
+		  loc->address
+		    = gdbarch_remove_non_address_bits (loc->gdbarch, addr);
+		  b->add_location (*loc);
 
 		  if (bitsize != 0)
 		    {
@@ -1856,22 +2244,35 @@ update_watchpoint (struct watchpoint *b,
 		      loc->length = ((bitpos % 8) + bitsize + 7) / 8;
 		    }
 		  else
-		    loc->length = TYPE_LENGTH (value_type (v));
+		    loc->length = v->type ()->length ();
 
 		  loc->watchpoint_type = type;
 		}
 	    }
 	}
 
+      /* Helper function to bundle possibly emitting a warning along with
+	 changing the type of B to bp_watchpoint.  */
+      auto change_type_to_bp_watchpoint = [] (breakpoint *bp)
+      {
+	/* Only warn for breakpoints that have been assigned a +ve number,
+	   anything else is either an internal watchpoint (which we don't
+	   currently create) or has not yet been finalized, in which case
+	   this change of type will be occurring before the user is told
+	   the type of this watchpoint.  */
+	if (bp->type == bp_hardware_watchpoint && bp->number > 0)
+	  warning (_("watchpoint %d downgraded to software watchpoint"),
+		   bp->number);
+	bp->type = bp_watchpoint;
+      };
+
       /* Change the type of breakpoint between hardware assisted or
-	 an ordinary watchpoint depending on the hardware support
-	 and free hardware slots.  REPARSE is set when the inferior
-	 is started.  */
-      if (reparse)
+	 an ordinary watchpoint depending on the hardware support and
+	 free hardware slots.  Recheck the number of free hardware slots
+	 as the value chain may have changed.  */
 	{
 	  int reg_cnt;
 	  enum bp_loc_type loc_type;
-	  struct bp_location *bl;
 
 	  reg_cnt = can_use_hardware_watchpoint (val_chain);
 
@@ -1912,7 +2313,7 @@ update_watchpoint (struct watchpoint *b,
 		= target_can_use_hardware_watchpoint (type, i, other_type_used);
 	      if (target_resources_ok <= 0)
 		{
-		  int sw_mode = b->ops->works_in_software_mode (b);
+		  bool sw_mode = b->works_in_software_mode ();
 
 		  if (target_resources_ok == 0 && !sw_mode)
 		    error (_("Target does not support this type of "
@@ -1922,7 +2323,7 @@ update_watchpoint (struct watchpoint *b,
 			     "resources for this watchpoint."));
 
 		  /* Downgrade to software watchpoint.  */
-		  b->type = bp_watchpoint;
+		  change_type_to_bp_watchpoint (b);
 		}
 	      else
 		{
@@ -1933,7 +2334,7 @@ update_watchpoint (struct watchpoint *b,
 		  b->type = type;
 		}
 	    }
-	  else if (!b->ops->works_in_software_mode (b))
+	  else if (!b->works_in_software_mode ())
 	    {
 	      if (!can_use_hw_watchpoints)
 		error (_("Can't set read/access watchpoint when "
@@ -1943,55 +2344,53 @@ update_watchpoint (struct watchpoint *b,
 			 "read/access watchpoint."));
 	    }
 	  else
-	    b->type = bp_watchpoint;
+	    change_type_to_bp_watchpoint (b);
 
-	  loc_type = (b->type == bp_watchpoint? bp_loc_other
+	  loc_type = (b->type == bp_watchpoint? bp_loc_software_watchpoint
 		      : bp_loc_hardware_watchpoint);
-	  for (bl = b->loc; bl; bl = bl->next)
-	    bl->loc_type = loc_type;
+
+	  for (bp_location &bl : b->locations ())
+	    bl.loc_type = loc_type;
 	}
 
       /* If a software watchpoint is not watching any memory, then the
 	 above left it without any location set up.  But,
 	 bpstat_stop_status requires a location to be able to report
 	 stops, so make sure there's at least a dummy one.  */
-      if (b->type == bp_watchpoint && b->loc == NULL)
-	software_watchpoint_add_no_memory_location (b, frame_pspace);
+      if (b->type == bp_watchpoint && !b->has_locations ())
+	add_dummy_location (b, frame_pspace);
     }
   else if (!within_current_scope)
     {
-      printf_filtered (_("\
+      gdb_printf (_("\
 Watchpoint %d deleted because the program has left the block\n\
 in which its expression is valid.\n"),
-		       b->number);
+		  b->number);
       watchpoint_del_at_next_stop (b);
     }
-
-  /* Restore the selected frame.  */
-  if (frame_saved)
-    select_frame (frame_find_by_id (saved_frame_id));
 }
 
-
-/* Returns 1 iff breakpoint location should be
+/* Returns true iff breakpoint location should be
    inserted in the inferior.  We don't differentiate the type of BL's owner
    (breakpoint vs. tracepoint), although insert_location in tracepoint's
    breakpoint_ops is not defined, because in insert_bp_location,
    tracepoint's insert_location will not be called.  */
-static int
+
+static bool
 should_be_inserted (struct bp_location *bl)
 {
   if (bl->owner == NULL || !breakpoint_enabled (bl->owner))
-    return 0;
+    return false;
 
   if (bl->owner->disposition == disp_del_at_next_stop)
-    return 0;
+    return false;
 
-  if (!bl->enabled || bl->shlib_disabled || bl->duplicate)
-    return 0;
+  if (!bl->enabled || bl->disabled_by_cond
+      || bl->shlib_disabled || bl->duplicate)
+    return false;
 
   if (user_breakpoint_p (bl->owner) && bl->pspace->executing_startup)
-    return 0;
+    return false;
 
   /* This is set for example, when we're attached to the parent of a
      vfork, and have detached from the child.  The child is running
@@ -2002,7 +2401,7 @@ should_be_inserted (struct bp_location *
      the child could still trip on the parent's breakpoints.  Since
      the parent is blocked anyway, it won't miss any breakpoint.  */
   if (bl->pspace->breakpoints_not_allowed)
-    return 0;
+    return false;
 
   /* Don't insert a breakpoint if we're trying to step past its
      location, except if the breakpoint is a single-step breakpoint,
@@ -2010,7 +2409,7 @@ should_be_inserted (struct bp_location *
      a breakpoint.  */
   if ((bl->loc_type == bp_loc_software_breakpoint
        || bl->loc_type == bp_loc_hardware_breakpoint)
-      && stepping_past_instruction_at (bl->pspace->aspace,
+      && stepping_past_instruction_at (bl->pspace->aspace.get (),
 				       bl->address)
       /* The single-step breakpoint may be inserted at the location
 	 we're trying to step if the instruction branches to itself.
@@ -2022,14 +2421,9 @@ should_be_inserted (struct bp_location *
       && !(bl->owner->type == bp_single_step
 	   && thread_is_stepping_over_breakpoint (bl->owner->thread)))
     {
-      if (debug_infrun)
-	{
-	  fprintf_unfiltered (gdb_stdlog,
-			      "infrun: skipping breakpoint: "
-			      "stepping past insn at: %s\n",
-			      paddress (bl->gdbarch, bl->address));
-	}
-      return 0;
+      infrun_debug_printf ("skipping breakpoint: stepping past insn at: %s",
+			   paddress (bl->gdbarch, bl->address));
+      return false;
     }
 
   /* Don't insert watchpoints if we're trying to step past the
@@ -2037,33 +2431,25 @@ should_be_inserted (struct bp_location *
   if ((bl->loc_type == bp_loc_hardware_watchpoint)
       && stepping_past_nonsteppable_watchpoint ())
     {
-      if (debug_infrun)
-	{
-	  fprintf_unfiltered (gdb_stdlog,
-			      "infrun: stepping past non-steppable watchpoint. "
-			      "skipping watchpoint at %s:%d\n",
-			      paddress (bl->gdbarch, bl->address),
-			      bl->length);
-	}
-      return 0;
+      infrun_debug_printf ("stepping past non-steppable watchpoint. "
+			   "skipping watchpoint at %s:%d",
+			   paddress (bl->gdbarch, bl->address), bl->length);
+      return false;
     }
 
-  return 1;
+  return true;
 }
 
 /* Same as should_be_inserted but does the check assuming
    that the location is not duplicated.  */
 
-static int
+static bool
 unduplicated_should_be_inserted (struct bp_location *bl)
 {
-  int result;
-  const int save_duplicate = bl->duplicate;
+  scoped_restore restore_bl_duplicate
+    = make_scoped_restore (&bl->duplicate, 0);
 
-  bl->duplicate = 0;
-  result = should_be_inserted (bl);
-  bl->duplicate = save_duplicate;
-  return result;
+  return should_be_inserted (bl);
 }
 
 /* Parses a conditional described by an expression COND into an
@@ -2106,10 +2492,8 @@ parse_cond_to_aexpr (CORE_ADDR scope, st
 static void
 build_target_condition_list (struct bp_location *bl)
 {
-  struct bp_location **locp = NULL, **loc2p;
-  int null_condition_or_parse_error = 0;
+  bool null_condition_or_parse_error = false;
   int modified = bl->needs_update;
-  struct bp_location *loc;
 
   /* Release conditions left over from a previous insert.  */
   bl->target_info.conditions.clear ();
@@ -2122,14 +2506,19 @@ build_target_condition_list (struct bp_l
       || !target_supports_evaluation_of_breakpoint_conditions ())
     return;
 
+  auto loc_range = all_bp_locations_at_addr (bl->address);
+
   /* Do a first pass to check for locations with no assigned
-     conditions or conditions that fail to parse to a valid agent expression
-     bytecode.  If any of these happen, then it's no use to send conditions
-     to the target since this location will always trigger and generate a
-     response back to GDB.  */
-  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
+     conditions or conditions that fail to parse to a valid agent
+     expression bytecode.  If any of these happen, then it's no use to
+     send conditions to the target since this location will always
+     trigger and generate a response back to GDB.  Note we consider
+     all locations at the same address irrespective of type, i.e.,
+     even if the locations aren't considered duplicates (e.g.,
+     software breakpoint and hardware breakpoint at the same
+     address).  */
+  for (bp_location *loc : loc_range)
     {
-      loc = (*loc2p);
       if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
 	{
 	  if (modified)
@@ -2146,7 +2535,7 @@ build_target_condition_list (struct bp_l
 	     went wrong or we have a null condition expression.  */
 	  if (!loc->cond_bytecode)
 	    {
-	      null_condition_or_parse_error = 1;
+	      null_condition_or_parse_error = true;
 	      break;
 	    }
 	}
@@ -2160,9 +2549,8 @@ build_target_condition_list (struct bp_l
      being evaluated by GDB or the remote stub.  */
   if (null_condition_or_parse_error)
     {
-      ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
+      for (bp_location *loc : loc_range)
 	{
-	  loc = (*loc2p);
 	  if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
 	    {
 	      /* Only go as far as the first NULL bytecode is
@@ -2175,22 +2563,24 @@ build_target_condition_list (struct bp_l
 	}
     }
 
-  /* No NULL conditions or failed bytecode generation.  Build a condition list
-     for this location's address.  */
-  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
-    {
-      loc = (*loc2p);
-      if (loc->cond
-	  && is_breakpoint (loc->owner)
-	  && loc->pspace->num == bl->pspace->num
-	  && loc->owner->enable_state == bp_enabled
-	  && loc->enabled)
-	{
-	  /* Add the condition to the vector.  This will be used later
-	     to send the conditions to the target.  */
-	  bl->target_info.conditions.push_back (loc->cond_bytecode.get ());
-	}
-    }
+  /* No NULL conditions or failed bytecode generation.  Build a
+     condition list for this location's address.  If we have software
+     and hardware locations at the same address, they aren't
+     considered duplicates, but we still merge all the conditions
+     anyway, as it's simpler, and doesn't really make a practical
+     difference.  */
+  for (bp_location *loc : loc_range)
+    if (loc->cond
+	&& is_breakpoint (loc->owner)
+	&& loc->pspace->num == bl->pspace->num
+	&& loc->owner->enable_state == bp_enabled
+	&& loc->enabled
+	&& !loc->disabled_by_cond)
+      {
+	/* Add the condition to the vector.  This will be used later
+	   to send the conditions to the target.  */
+	bl->target_info.conditions.push_back (loc->cond_bytecode.get ());
+      }
 
   return;
 }
@@ -2244,7 +2634,8 @@ parse_cmd_to_aexpr (CORE_ADDR scope, cha
       const char *cmd1;
 
       cmd1 = cmdrest;
-      expression_up expr = parse_exp_1 (&cmd1, scope, block_for_pc (scope), 1);
+      expression_up expr = parse_exp_1 (&cmd1, scope, block_for_pc (scope),
+					PARSER_COMMA_TERMINATES);
       argvec.push_back (expr.release ());
       cmdrest = cmd1;
       if (*cmdrest == ',')
@@ -2279,10 +2670,8 @@ parse_cmd_to_aexpr (CORE_ADDR scope, cha
 static void
 build_target_command_list (struct bp_location *bl)
 {
-  struct bp_location **locp = NULL, **loc2p;
-  int null_command_or_parse_error = 0;
+  bool null_command_or_parse_error = false;
   int modified = bl->needs_update;
-  struct bp_location *loc;
 
   /* Clear commands left over from a previous insert.  */
   bl->target_info.tcommands.clear ();
@@ -2294,27 +2683,25 @@ build_target_command_list (struct bp_loc
   if (dprintf_style != dprintf_style_agent)
     return;
 
-  /* For now, if we have any duplicate location that isn't a dprintf,
-     don't install the target-side commands, as that would make the
-     breakpoint not be reported to the core, and we'd lose
+  auto loc_range = all_bp_locations_at_addr (bl->address);
+
+  /* For now, if we have any location at the same address that isn't a
+     dprintf, don't install the target-side commands, as that would
+     make the breakpoint not be reported to the core, and we'd lose
      control.  */
-  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
-    {
-      loc = (*loc2p);
-      if (is_breakpoint (loc->owner)
-	  && loc->pspace->num == bl->pspace->num
-	  && loc->owner->type != bp_dprintf)
-	return;
-    }
+  for (bp_location *loc : loc_range)
+    if (is_breakpoint (loc->owner)
+	&& loc->pspace->num == bl->pspace->num
+	&& loc->owner->type != bp_dprintf)
+      return;
 
   /* Do a first pass to check for locations with no assigned
      conditions or conditions that fail to parse to a valid agent expression
      bytecode.  If any of these happen, then it's no use to send conditions
      to the target since this location will always trigger and generate a
      response back to GDB.  */
-  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
+  for (bp_location *loc : loc_range)
     {
-      loc = (*loc2p);
       if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
 	{
 	  if (modified)
@@ -2325,14 +2712,14 @@ build_target_command_list (struct bp_loc
 		 need to parse the command to bytecodes again.  */
 	      loc->cmd_bytecode
 		= parse_cmd_to_aexpr (bl->address,
-				      loc->owner->extra_string);
+				      loc->owner->extra_string.get ());
 	    }
 
 	  /* If we have a NULL bytecode expression, it means something
 	     went wrong or we have a null command expression.  */
 	  if (!loc->cmd_bytecode)
 	    {
-	      null_command_or_parse_error = 1;
+	      null_command_or_parse_error = true;
 	      break;
 	    }
 	}
@@ -2342,38 +2729,40 @@ build_target_command_list (struct bp_loc
      and so clean up.  */
   if (null_command_or_parse_error)
     {
-      ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
-	{
-	  loc = (*loc2p);
-	  if (is_breakpoint (loc->owner)
-	      && loc->pspace->num == bl->pspace->num)
-	    {
-	      /* Only go as far as the first NULL bytecode is
-		 located.  */
-	      if (loc->cmd_bytecode == NULL)
-		return;
+      for (bp_location *loc : loc_range)
+	if (is_breakpoint (loc->owner)
+	    && loc->pspace->num == bl->pspace->num)
+	  {
+	    /* Only go as far as the first NULL bytecode is
+	       located.  */
+	    if (loc->cmd_bytecode == NULL)
+	      return;
 
-	      loc->cmd_bytecode.reset ();
-	    }
-	}
+	    loc->cmd_bytecode.reset ();
+	  }
     }
 
-  /* No NULL commands or failed bytecode generation.  Build a command list
-     for this location's address.  */
-  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
-    {
-      loc = (*loc2p);
-      if (loc->owner->extra_string
-	  && is_breakpoint (loc->owner)
-	  && loc->pspace->num == bl->pspace->num
-	  && loc->owner->enable_state == bp_enabled
-	  && loc->enabled)
-	{
-	  /* Add the command to the vector.  This will be used later
-	     to send the commands to the target.  */
-	  bl->target_info.tcommands.push_back (loc->cmd_bytecode.get ());
-	}
-    }
+  /* No NULL commands or failed bytecode generation.  Build a command
+     list for all duplicate locations at this location's address.
+     Note that here we must care for whether the breakpoint location
+     types are considered duplicates, otherwise, say, if we have a
+     software and hardware location at the same address, the target
+     could end up running the commands twice.  For the moment, we only
+     support targets-side commands with dprintf, but it doesn't hurt
+     to be pedantically correct in case that changes.  */
+  for (bp_location *loc : loc_range)
+    if (breakpoint_locations_match (bl, loc)
+	&& loc->owner->extra_string
+	&& is_breakpoint (loc->owner)
+	&& loc->pspace->num == bl->pspace->num
+	&& loc->owner->enable_state == bp_enabled
+	&& loc->enabled
+	&& !loc->disabled_by_cond)
+      {
+	/* Add the command to the vector.  This will be used later
+	   to send the commands to the target.  */
+	bl->target_info.tcommands.push_back (loc->cmd_bytecode.get ());
+      }
 
   bl->target_info.persist = 0;
   /* Maybe flag this location as persistent.  */
@@ -2387,7 +2776,7 @@ build_target_command_list (struct bp_loc
    registers state.  */
 
 static int
-breakpoint_kind (struct bp_location *bl, CORE_ADDR *addr)
+breakpoint_kind (const struct bp_location *bl, CORE_ADDR *addr)
 {
   if (bl->owner->type == bp_single_step)
     {
@@ -2403,6 +2792,29 @@ breakpoint_kind (struct bp_location *bl,
     return gdbarch_breakpoint_kind_from_pc (bl->gdbarch, addr);
 }
 
+/* Rethrow the currently handled exception, if it's a TARGET_CLOSE_ERROR.
+   E is either the currently handled exception, or a copy, or a sliced copy,
+   so we can't rethrow that one, but we can use it to inspect the properties
+   of the currently handled exception.  */
+
+static void
+rethrow_on_target_close_error (const gdb_exception &e)
+{
+  if (e.reason == 0)
+    return;
+  /* Can't set the breakpoint.  */
+
+  if (e.error != TARGET_CLOSE_ERROR)
+    return;
+
+  /* If the target has closed then it will have deleted any breakpoints
+     inserted within the target inferior, as a result any further attempts
+     to interact with the breakpoint objects is not possible.  Just rethrow
+     the error.  Don't use e to rethrow, to prevent object slicing of the
+     exception.  */
+  throw;
+}
+
 /* Insert a low-level "breakpoint" of some type.  BL is the breakpoint
    location.  Any error messages are printed to TMP_ERROR_STREAM; and
    DISABLED_BREAKS, and HW_BREAKPOINT_ERROR are used to report problems.
@@ -2423,6 +2835,8 @@ insert_bp_location (struct bp_location *
   if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
     return 0;
 
+  breakpoint_debug_printf ("%s", breakpoint_location_address_str (bl).c_str ());
+
   /* Note we don't initialize bl->target_info, as that wipes out
      the breakpoint location's shadow_contents if the breakpoint
      is still inserted at that location.  This in turn breaks
@@ -2433,7 +2847,7 @@ insert_bp_location (struct bp_location *
      read the breakpoint instead of returning the data saved in
      the breakpoint location's shadow contents.  */
   bl->target_info.reqstd_address = bl->address;
-  bl->target_info.placed_address_space = bl->pspace->aspace;
+  bl->target_info.placed_address_space = bl->pspace->aspace.get ();
   bl->target_info.length = bl->length;
 
   /* When working with target-side conditions, we must pass all the conditions
@@ -2449,72 +2863,31 @@ insert_bp_location (struct bp_location *
       bl->needs_update = 0;
     }
 
+  /* If "set breakpoint auto-hw" is "on" and a software breakpoint was
+     set at a read-only address, then a breakpoint location will have
+     been changed to hardware breakpoint before we get here.  If it is
+     "off" however, error out before actually trying to insert the
+     breakpoint, with a nicer error message.  */
   if (bl->loc_type == bp_loc_software_breakpoint
-      || bl->loc_type == bp_loc_hardware_breakpoint)
+      && !automatic_hardware_breakpoints)
     {
-      if (bl->owner->type != bp_hardware_breakpoint)
-	{
-	  /* If the explicitly specified breakpoint type
-	     is not hardware breakpoint, check the memory map to see
-	     if the breakpoint address is in read only memory or not.
-
-	     Two important cases are:
-	     - location type is not hardware breakpoint, memory
-	     is readonly.  We change the type of the location to
-	     hardware breakpoint.
-	     - location type is hardware breakpoint, memory is
-	     read-write.  This means we've previously made the
-	     location hardware one, but then the memory map changed,
-	     so we undo.
-	     
-	     When breakpoints are removed, remove_breakpoints will use
-	     location types we've just set here, the only possible
-	     problem is that memory map has changed during running
-	     program, but it's not going to work anyway with current
-	     gdb.  */
-	  struct mem_region *mr 
-	    = lookup_mem_region (bl->target_info.reqstd_address);
-	  
-	  if (mr)
-	    {
-	      if (automatic_hardware_breakpoints)
-		{
-		  enum bp_loc_type new_type;
-		  
-		  if (mr->attrib.mode != MEM_RW)
-		    new_type = bp_loc_hardware_breakpoint;
-		  else 
-		    new_type = bp_loc_software_breakpoint;
-		  
-		  if (new_type != bl->loc_type)
-		    {
-		      static int said = 0;
+      mem_region *mr = lookup_mem_region (bl->address);
 
-		      bl->loc_type = new_type;
-		      if (!said)
-			{
-			  fprintf_filtered (gdb_stdout,
-					    _("Note: automatically using "
-					      "hardware breakpoints for "
-					      "read-only addresses.\n"));
-			  said = 1;
-			}
-		    }
-		}
-	      else if (bl->loc_type == bp_loc_software_breakpoint
-		       && mr->attrib.mode != MEM_RW)
-		{
-		  fprintf_unfiltered (tmp_error_stream,
-				      _("Cannot insert breakpoint %d.\n"
-					"Cannot set software breakpoint "
-					"at read-only address %s\n"),
-				      bl->owner->number,
-				      paddress (bl->gdbarch, bl->address));
-		  return 1;
-		}
-	    }
+      if (mr != nullptr && mr->attrib.mode != MEM_RW)
+	{
+	  gdb_printf (tmp_error_stream,
+		      _("Cannot insert breakpoint %d.\n"
+			"Cannot set software breakpoint "
+			"at read-only address %s\n"),
+		      bl->owner->number,
+		      paddress (bl->gdbarch, bl->address));
+	  return 1;
 	}
-        
+    }
+
+  if (bl->loc_type == bp_loc_software_breakpoint
+      || bl->loc_type == bp_loc_hardware_breakpoint)
+    {
       /* First check to see if we have to handle an overlay.  */
       if (overlay_debugging == ovly_off
 	  || bl->section == NULL
@@ -2525,12 +2898,13 @@ insert_bp_location (struct bp_location *
 	    {
 	      int val;
 
-	      val = bl->owner->ops->insert_location (bl);
+	      val = bl->owner->insert_location (bl);
 	      if (val)
 		bp_excpt = gdb_exception {RETURN_ERROR, GENERIC_ERROR};
 	    }
 	  catch (gdb_exception &e)
 	    {
+	      rethrow_on_target_close_error (e);
 	      bp_excpt = std::move (e);
 	    }
 	}
@@ -2570,14 +2944,15 @@ insert_bp_location (struct bp_location *
 		    }
 		  catch (gdb_exception &e)
 		    {
+		      rethrow_on_target_close_error (e);
 		      bp_excpt = std::move (e);
 		    }
 
 		  if (bp_excpt.reason != 0)
-		    fprintf_unfiltered (tmp_error_stream,
-					"Overlay breakpoint %d "
-					"failed: in ROM?\n",
-					bl->owner->number);
+		    gdb_printf (tmp_error_stream,
+				"Overlay breakpoint %d "
+				"failed: in ROM?\n",
+				bl->owner->number);
 		}
 	    }
 	  /* Shall we set a breakpoint at the VMA? */
@@ -2585,17 +2960,18 @@ insert_bp_location (struct bp_location *
 	    {
 	      /* Yes.  This overlay section is mapped into memory.  */
 	      try
-	        {
+		{
 		  int val;
 
-	          val = bl->owner->ops->insert_location (bl);
+		  val = bl->owner->insert_location (bl);
 		  if (val)
 		    bp_excpt = gdb_exception {RETURN_ERROR, GENERIC_ERROR};
-	        }
-	      catch (gdb_exception &e)
-	        {
+		}
+	      catch (gdb_exception_error &e)
+		{
+		  rethrow_on_target_close_error (e);
 		  bp_excpt = std::move (e);
-	        }
+		}
 	    }
 	  else
 	    {
@@ -2608,6 +2984,7 @@ insert_bp_location (struct bp_location *
       if (bp_excpt.reason != 0)
 	{
 	  /* Can't set the breakpoint.  */
+	  gdb_assert (bl->owner != nullptr);
 
 	  /* In some cases, we might not be able to insert a
 	     breakpoint in a shared library that has already been
@@ -2627,19 +3004,19 @@ insert_bp_location (struct bp_location *
 	    {
 	      /* See also: disable_breakpoints_in_shlibs.  */
 	      bl->shlib_disabled = 1;
-	      gdb::observers::breakpoint_modified.notify (bl->owner);
+	      notify_breakpoint_modified (bl->owner);
 	      if (!*disabled_breaks)
 		{
-		  fprintf_unfiltered (tmp_error_stream, 
-				      "Cannot insert breakpoint %d.\n", 
-				      bl->owner->number);
-		  fprintf_unfiltered (tmp_error_stream, 
-				      "Temporarily disabling shared "
-				      "library breakpoints:\n");
+		  gdb_printf (tmp_error_stream, 
+			      "Cannot insert breakpoint %d.\n", 
+			      bl->owner->number);
+		  gdb_printf (tmp_error_stream, 
+			      "Temporarily disabling shared "
+			      "library breakpoints:\n");
 		}
 	      *disabled_breaks = 1;
-	      fprintf_unfiltered (tmp_error_stream,
-				  "breakpoint #%d\n", bl->owner->number);
+	      gdb_printf (tmp_error_stream,
+			  "breakpoint #%d\n", bl->owner->number);
 	      return 0;
 	    }
 	  else
@@ -2648,13 +3025,13 @@ insert_bp_location (struct bp_location *
 		{
 		  *hw_breakpoint_error = 1;
 		  *hw_bp_error_explained_already = bp_excpt.message != NULL;
-                  fprintf_unfiltered (tmp_error_stream,
-                                      "Cannot insert hardware breakpoint %d%s",
-                                      bl->owner->number,
-				      bp_excpt.message ? ":" : ".\n");
-                  if (bp_excpt.message != NULL)
-                    fprintf_unfiltered (tmp_error_stream, "%s.\n",
-					bp_excpt.what ());
+		  gdb_printf (tmp_error_stream,
+			      "Cannot insert hardware breakpoint %d%s",
+			      bl->owner->number,
+			      bp_excpt.message ? ":" : ".\n");
+		  if (bp_excpt.message != NULL)
+		    gdb_printf (tmp_error_stream, "%s.\n",
+				bp_excpt.what ());
 		}
 	      else
 		{
@@ -2664,17 +3041,17 @@ insert_bp_location (struct bp_location *
 			= memory_error_message (TARGET_XFER_E_IO,
 						bl->gdbarch, bl->address);
 
-		      fprintf_unfiltered (tmp_error_stream,
-					  "Cannot insert breakpoint %d.\n"
-					  "%s\n",
-					  bl->owner->number, message.c_str ());
+		      gdb_printf (tmp_error_stream,
+				  "Cannot insert breakpoint %d.\n"
+				  "%s\n",
+				  bl->owner->number, message.c_str ());
 		    }
 		  else
 		    {
-		      fprintf_unfiltered (tmp_error_stream,
-					  "Cannot insert breakpoint %d: %s\n",
-					  bl->owner->number,
-					  bp_excpt.what ());
+		      gdb_printf (tmp_error_stream,
+				  "Cannot insert breakpoint %d: %s\n",
+				  bl->owner->number,
+				  bp_excpt.what ());
 		    }
 		}
 	      return 1;
@@ -2688,27 +3065,20 @@ insert_bp_location (struct bp_location *
     }
 
   else if (bl->loc_type == bp_loc_hardware_watchpoint
-	   /* NOTE drow/2003-09-08: This state only exists for removing
-	      watchpoints.  It's not clear that it's necessary...  */
 	   && bl->owner->disposition != disp_del_at_next_stop)
     {
       int val;
 
-      gdb_assert (bl->owner->ops != NULL
-		  && bl->owner->ops->insert_location != NULL);
-
-      val = bl->owner->ops->insert_location (bl);
+      val = bl->owner->insert_location (bl);
 
       /* If trying to set a read-watchpoint, and it turns out it's not
 	 supported, try emulating one with an access watchpoint.  */
       if (val == 1 && bl->watchpoint_type == hw_read)
 	{
-	  struct bp_location *loc, **loc_temp;
-
 	  /* But don't try to insert it, if there's already another
 	     hw_access location that would be considered a duplicate
 	     of this one.  */
-	  ALL_BP_LOCATIONS (loc, loc_temp)
+	  for (bp_location *loc : all_bp_locations ())
 	    if (loc != bl
 		&& loc->watchpoint_type == hw_access
 		&& watchpoint_locations_match (bl, loc))
@@ -2724,7 +3094,7 @@ insert_bp_location (struct bp_location *
 	  if (val == 1)
 	    {
 	      bl->watchpoint_type = hw_access;
-	      val = bl->owner->ops->insert_location (bl);
+	      val = bl->owner->insert_location (bl);
 
 	      if (val)
 		/* Back to the original value.  */
@@ -2739,10 +3109,7 @@ insert_bp_location (struct bp_location *
     {
       int val;
 
-      gdb_assert (bl->owner->ops != NULL
-		  && bl->owner->ops->insert_location != NULL);
-
-      val = bl->owner->ops->insert_location (bl);
+      val = bl->owner->insert_location (bl);
       if (val)
 	{
 	  bl->owner->enable_state = bp_disabled;
@@ -2773,36 +3140,19 @@ of catchpoint."), bl->owner->number);
 void
 breakpoint_program_space_exit (struct program_space *pspace)
 {
-  struct breakpoint *b, *b_temp;
-  struct bp_location *loc, **loc_temp;
-
   /* Remove any breakpoint that was set through this program space.  */
-  ALL_BREAKPOINTS_SAFE (b, b_temp)
-    {
-      if (b->pspace == pspace)
-	delete_breakpoint (b);
-    }
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.pspace == pspace)
+      delete_breakpoint (&b);
 
   /* Breakpoints set through other program spaces could have locations
      bound to PSPACE as well.  Remove those.  */
-  ALL_BP_LOCATIONS (loc, loc_temp)
-    {
-      struct bp_location *tmp;
-
-      if (loc->pspace == pspace)
-	{
-	  /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL.  */
-	  if (loc->owner->loc == loc)
-	    loc->owner->loc = loc->next;
-	  else
-	    for (tmp = loc->owner->loc; tmp->next != NULL; tmp = tmp->next)
-	      if (tmp->next == loc)
-		{
-		  tmp->next = loc->next;
-		  break;
-		}
-	}
-    }
+  for (bp_location *loc : all_bp_locations ())
+    if (loc->pspace == pspace)
+      {
+	/* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL.  */
+	loc->owner->unadd_location (*loc);
+      }
 
   /* Now update the global location list to permanently delete the
      removed locations above.  */
@@ -2816,35 +3166,24 @@ breakpoint_program_space_exit (struct pr
 void
 insert_breakpoints (void)
 {
-  struct breakpoint *bpt;
-
-  ALL_BREAKPOINTS (bpt)
-    if (is_hardware_watchpoint (bpt))
+  for (breakpoint &bpt : all_breakpoints ())
+    if (is_hardware_watchpoint (&bpt))
       {
-	struct watchpoint *w = (struct watchpoint *) bpt;
+	watchpoint &w = gdb::checked_static_cast<watchpoint &> (bpt);
 
-	update_watchpoint (w, 0 /* don't reparse.  */);
+	update_watchpoint (&w, false /* don't reparse.  */);
       }
 
   /* Updating watchpoints creates new locations, so update the global
      location list.  Explicitly tell ugll to insert locations and
-     ignore breakpoints_always_inserted_mode.  */
+     ignore breakpoints_always_inserted_mode.  Also,
+     update_global_location_list tries to "upgrade" software
+     breakpoints to hardware breakpoints to handle "set breakpoint
+     auto-hw", so we need to call it even if we don't have new
+     locations.  */
   update_global_location_list (UGLL_INSERT);
 }
 
-/* Invoke CALLBACK for each of bp_location.  */
-
-void
-iterate_over_bp_locations (walk_bp_location_callback callback)
-{
-  struct bp_location *loc, **loc_tmp;
-
-  ALL_BP_LOCATIONS (loc, loc_tmp)
-    {
-      callback (loc, NULL);
-    }
-}
-
 /* This is used when we need to synch breakpoint conditions between GDB and the
    target.  It is the case with deleting and disabling of breakpoints when using
    always-inserted mode.  */
@@ -2852,7 +3191,6 @@ iterate_over_bp_locations (walk_bp_locat
 static void
 update_inserted_breakpoint_locations (void)
 {
-  struct bp_location *bl, **blp_tmp;
   int error_flag = 0;
   int val = 0;
   int disabled_breaks = 0;
@@ -2867,7 +3205,7 @@ update_inserted_breakpoint_locations (vo
 
   scoped_restore_current_pspace_and_thread restore_pspace_thread;
 
-  ALL_BP_LOCATIONS (bl, blp_tmp)
+  for (bp_location *bl : all_bp_locations ())
     {
       /* We only want to update software breakpoints and hardware
 	 breakpoints.  */
@@ -2886,8 +3224,8 @@ update_inserted_breakpoint_locations (vo
 	 to select an inferior to insert breakpoint to.  In fact, even
 	 if we aren't attached to any process yet, we should still
 	 insert breakpoints.  */
-      if (!gdbarch_has_global_breakpoints (target_gdbarch ())
-	  && inferior_ptid == null_ptid)
+      if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ())
+	  && (inferior_ptid == null_ptid || !target_has_execution ()))
 	continue;
 
       val = insert_bp_location (bl, &tmp_error_stream, &disabled_breaks,
@@ -2899,7 +3237,7 @@ update_inserted_breakpoint_locations (vo
   if (error_flag)
     {
       target_terminal::ours_for_output ();
-      error_stream (tmp_error_stream);
+      error (("%s"), tmp_error_stream.c_str ());
     }
 }
 
@@ -2908,8 +3246,6 @@ update_inserted_breakpoint_locations (vo
 static void
 insert_breakpoint_locations (void)
 {
-  struct breakpoint *bpt;
-  struct bp_location *bl, **blp_tmp;
   int error_flag = 0;
   int val = 0;
   int disabled_breaks = 0;
@@ -2924,7 +3260,7 @@ insert_breakpoint_locations (void)
 
   scoped_restore_current_pspace_and_thread restore_pspace_thread;
 
-  ALL_BP_LOCATIONS (bl, blp_tmp)
+  for (bp_location *bl : all_bp_locations ())
     {
       if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
 	continue;
@@ -2936,14 +3272,20 @@ insert_breakpoint_locations (void)
 	  && !valid_global_thread_id (bl->owner->thread))
 	continue;
 
+      /* Or inferior specific breakpoints if the inferior no longer
+	 exists.  */
+      if (bl->owner->inferior != -1
+	  && !valid_global_inferior_id (bl->owner->inferior))
+	continue;
+
       switch_to_program_space_and_thread (bl->pspace);
 
       /* For targets that support global breakpoints, there's no need
 	 to select an inferior to insert breakpoint to.  In fact, even
 	 if we aren't attached to any process yet, we should still
 	 insert breakpoints.  */
-      if (!gdbarch_has_global_breakpoints (target_gdbarch ())
-	  && inferior_ptid == null_ptid)
+      if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ())
+	  && (inferior_ptid == null_ptid || !target_has_execution ()))
 	continue;
 
       val = insert_bp_location (bl, &tmp_error_stream, &disabled_breaks,
@@ -2954,36 +3296,36 @@ insert_breakpoint_locations (void)
 
   /* If we failed to insert all locations of a watchpoint, remove
      them, as half-inserted watchpoint is of limited use.  */
-  ALL_BREAKPOINTS (bpt)  
+  for (breakpoint &bpt : all_breakpoints ())
     {
-      int some_failed = 0;
-      struct bp_location *loc;
+      bool some_failed = false;
 
-      if (!is_hardware_watchpoint (bpt))
+      if (!is_hardware_watchpoint (&bpt))
 	continue;
 
-      if (!breakpoint_enabled (bpt))
+      if (!breakpoint_enabled (&bpt))
 	continue;
 
-      if (bpt->disposition == disp_del_at_next_stop)
+      if (bpt.disposition == disp_del_at_next_stop)
 	continue;
-      
-      for (loc = bpt->loc; loc; loc = loc->next)
-	if (!loc->inserted && should_be_inserted (loc))
+
+      for (bp_location &loc : bpt.locations ())
+	if (!loc.inserted && should_be_inserted (&loc))
 	  {
-	    some_failed = 1;
+	    some_failed = true;
 	    break;
 	  }
+
       if (some_failed)
 	{
-	  for (loc = bpt->loc; loc; loc = loc->next)
-	    if (loc->inserted)
-	      remove_breakpoint (loc);
+	  for (bp_location &loc : bpt.locations ())
+	    if (loc.inserted)
+	      remove_breakpoint (&loc);
 
 	  hw_breakpoint_error = 1;
 	  tmp_error_stream.printf ("Could not insert "
 				   "hardware watchpoint %d.\n",
-				   bpt->number);
+				   bpt.number);
 	  error_flag = -1;
 	}
     }
@@ -2991,14 +3333,14 @@ insert_breakpoint_locations (void)
   if (error_flag)
     {
       /* If a hardware breakpoint or watchpoint was inserted, add a
-         message about possibly exhausted resources.  */
+	 message about possibly exhausted resources.  */
       if (hw_breakpoint_error && !hw_bp_error_explained_already)
 	{
 	  tmp_error_stream.printf ("Could not insert hardware breakpoints:\n\
 You may have requested too many hardware breakpoints/watchpoints.\n");
 	}
       target_terminal::ours_for_output ();
-      error_stream (tmp_error_stream);
+      error (("%s"), tmp_error_stream.c_str ());
     }
 }
 
@@ -3009,14 +3351,12 @@ You may have requested too many hardware
 int
 remove_breakpoints (void)
 {
-  struct bp_location *bl, **blp_tmp;
   int val = 0;
 
-  ALL_BP_LOCATIONS (bl, blp_tmp)
-  {
+  for (bp_location *bl : all_bp_locations ())
     if (bl->inserted && !is_tracepoint (bl->owner))
       val |= remove_breakpoint (bl);
-  }
+
   return val;
 }
 
@@ -3024,22 +3364,41 @@ remove_breakpoints (void)
    that thread.  */
 
 static void
-remove_threaded_breakpoints (struct thread_info *tp, int silent)
+remove_threaded_breakpoints (thread_info *tp,
+			     std::optional<ULONGEST> /* exit_code */,
+			     int /* silent */)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+  for (breakpoint &b : all_breakpoints_safe ())
     {
-      if (b->thread == tp->global_num && user_breakpoint_p (b))
+      if (b.thread == tp->global_num && user_breakpoint_p (&b))
 	{
-	  b->disposition = disp_del_at_next_stop;
-
-	  printf_filtered (_("\
+	  gdb_printf (_("\
 Thread-specific breakpoint %d deleted - thread %s no longer in the thread list.\n"),
-			   b->number, print_thread_id (tp));
+		      b.number, print_thread_id (tp));
+	  delete_breakpoint (&b);
+       }
+    }
+}
+
+/* Called when inferior INF has been removed from GDB.  Remove associated
+   per-inferior breakpoints.  */
 
-	  /* Hide it from the user.  */
-	  b->number = 0;
+static void
+remove_inferior_breakpoints (struct inferior *inf)
+{
+  for (breakpoint &b : all_breakpoints_safe ())
+    {
+      if (b.inferior == inf->num && user_breakpoint_p (&b))
+	{
+	  /* Tell the user the breakpoint has been deleted.  But only for
+	     breakpoints that would not normally have been deleted at the
+	     next stop anyway.  */
+	  if (b.disposition != disp_del
+	      && b.disposition != disp_del_at_next_stop)
+	    gdb_printf (_("\
+Inferior-specific breakpoint %d deleted - inferior %d has been removed.\n"),
+			b.number, inf->num);
+	  delete_breakpoint (&b);
        }
     }
 }
@@ -3049,21 +3408,22 @@ Thread-specific breakpoint %d deleted -
 void
 remove_breakpoints_inf (inferior *inf)
 {
-  struct bp_location *bl, **blp_tmp;
   int val;
 
-  ALL_BP_LOCATIONS (bl, blp_tmp)
-  {
-    if (bl->pspace != inf->pspace)
-      continue;
+  breakpoint_debug_printf ("inf->num = %d", inf->num);
 
-    if (bl->inserted && !bl->target_info.persist)
-      {
-	val = remove_breakpoint (bl);
-	if (val != 0)
-	  return;
-      }
-  }
+  for (bp_location *bl : all_bp_locations ())
+    {
+      if (bl->pspace != inf->pspace)
+	continue;
+
+      if (bl->inserted && !bl->target_info.persist)
+	{
+	  val = remove_breakpoint (bl);
+	  if (val != 0)
+	    return;
+	}
+    }
 }
 
 static int internal_breakpoint_number = -1;
@@ -3086,21 +3446,45 @@ set_breakpoint_number (int internal, str
     }
 }
 
+/* Create a TYPE breakpoint on ADDRESS from an object file with GDBARCH.  */
+
 static struct breakpoint *
 create_internal_breakpoint (struct gdbarch *gdbarch,
-			    CORE_ADDR address, enum bptype type,
-			    const struct breakpoint_ops *ops)
+			    CORE_ADDR address, enum bptype type)
 {
-  symtab_and_line sal;
-  sal.pc = address;
-  sal.section = find_pc_overlay (sal.pc);
-  sal.pspace = current_program_space;
+  std::unique_ptr<internal_breakpoint> b
+    (new internal_breakpoint (gdbarch, type, address));
 
-  breakpoint *b = set_raw_breakpoint (gdbarch, sal, type, ops);
   b->number = internal_breakpoint_number--;
-  b->disposition = disp_donttouch;
 
-  return b;
+  return add_to_breakpoint_chain (std::move (b));
+}
+
+/* Create a TYPE breakpoint on minimal symbol MSYM from an object file with
+   GDBARCH.  */
+
+static struct breakpoint *
+create_internal_breakpoint (struct gdbarch *gdbarch,
+			    struct bound_minimal_symbol &msym, enum bptype type)
+{
+  CORE_ADDR address;
+
+  address = msym.value_address ();
+
+  address = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, address, current_inferior ()->top_target ());
+
+  /* Note that we're not using gdbarch_addr_bits_remove here, because that's
+     related to addresses in $pc.  We're getting the address from the
+     minimal symbol table.  */
+
+  /* Is gdbarch_deprecated_function_start_offset needed here?  Or is that dealt
+     with elsewhere?  Needs testing on vax.  */
+
+  if (gdbarch_skip_entrypoint_p (gdbarch))
+    address = gdbarch_skip_entrypoint (gdbarch, address);
+
+  return create_internal_breakpoint (gdbarch, address, type);
 }
 
 static const char *const longjmp_names[] =
@@ -3113,10 +3497,10 @@ static const char *const longjmp_names[]
 struct breakpoint_objfile_data
 {
   /* Minimal symbol for "_ovly_debug_event" (if any).  */
-  struct bound_minimal_symbol overlay_msym {};
+  struct bound_minimal_symbol overlay_msym;
 
   /* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any).  */
-  struct bound_minimal_symbol longjmp_msym[NUM_LONGJMP_NAMES] {};
+  struct bound_minimal_symbol longjmp_msym[NUM_LONGJMP_NAMES];
 
   /* True if we have looked for longjmp probes.  */
   int longjmp_searched = 0;
@@ -3126,10 +3510,10 @@ struct breakpoint_objfile_data
   std::vector<probe *> longjmp_probes;
 
   /* Minimal symbol for "std::terminate()" (if any).  */
-  struct bound_minimal_symbol terminate_msym {};
+  struct bound_minimal_symbol terminate_msym;
 
   /* Minimal symbol for "_Unwind_DebugHook" (if any).  */
-  struct bound_minimal_symbol exception_msym {};
+  struct bound_minimal_symbol exception_msym;
 
   /* True if we have looked for exception probes.  */
   int exception_searched = 0;
@@ -3139,7 +3523,7 @@ struct breakpoint_objfile_data
   std::vector<probe *> exception_probes;
 };
 
-static const struct objfile_key<breakpoint_objfile_data>
+static const registry<objfile>::key<breakpoint_objfile_data>
   breakpoint_objfile_key;
 
 /* Minimal symbol not found sentinel.  */
@@ -3147,7 +3531,7 @@ static struct minimal_symbol msym_not_fo
 
 /* Returns TRUE if MSYM point to the "not found" sentinel.  */
 
-static int
+static bool
 msym_not_found_p (const struct minimal_symbol *msym)
 {
   return msym == &msym_not_found;
@@ -3177,7 +3561,6 @@ create_overlay_event_breakpoint (void)
       struct breakpoint *b;
       struct breakpoint_objfile_data *bp_objfile_data;
       CORE_ADDR addr;
-      struct explicit_location explicit_loc;
 
       bp_objfile_data = get_breakpoint_objfile_data (objfile);
 
@@ -3198,282 +3581,324 @@ create_overlay_event_breakpoint (void)
 	  bp_objfile_data->overlay_msym = m;
 	}
 
-      addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym);
-      b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
-                                      bp_overlay_event,
-				      &internal_breakpoint_ops);
-      initialize_explicit_location (&explicit_loc);
-      explicit_loc.function_name = ASTRDUP (func_name);
-      b->location = new_explicit_location (&explicit_loc);
+      addr = bp_objfile_data->overlay_msym.value_address ();
+      b = create_internal_breakpoint (objfile->arch (), addr,
+				      bp_overlay_event);
+      b->locspec = new_explicit_location_spec_function (func_name);
 
       if (overlay_debugging == ovly_auto)
-        {
-          b->enable_state = bp_enabled;
-          overlay_events_enabled = 1;
-        }
+	{
+	  b->enable_state = bp_enabled;
+	  overlay_events_enabled = 1;
+	}
       else
        {
-         b->enable_state = bp_disabled;
-         overlay_events_enabled = 0;
+	 b->enable_state = bp_disabled;
+	 overlay_events_enabled = 0;
        }
     }
 }
 
-static void
-create_longjmp_master_breakpoint (void)
+/* Install a master longjmp breakpoint for OBJFILE using a probe.  Return
+   true if a breakpoint was installed.  */
+
+static bool
+create_longjmp_master_breakpoint_probe (objfile *objfile)
 {
-  struct program_space *pspace;
+  struct gdbarch *gdbarch = objfile->arch ();
+  struct breakpoint_objfile_data *bp_objfile_data
+    = get_breakpoint_objfile_data (objfile);
 
-  scoped_restore_current_program_space restore_pspace;
+  if (!bp_objfile_data->longjmp_searched)
+    {
+      std::vector<probe *> ret
+	= find_probes_in_objfile (objfile, "libc", "longjmp");
 
-  ALL_PSPACES (pspace)
-  {
-    set_current_program_space (pspace);
+      if (!ret.empty ())
+	{
+	  /* We are only interested in checking one element.  */
+	  probe *p = ret[0];
 
-    for (objfile *objfile : current_program_space->objfiles ())
-      {
-	int i;
-	struct gdbarch *gdbarch;
-	struct breakpoint_objfile_data *bp_objfile_data;
+	  if (!p->can_evaluate_arguments ())
+	    {
+	      /* We cannot use the probe interface here,
+		 because it does not know how to evaluate
+		 arguments.  */
+	      ret.clear ();
+	    }
+	}
+      bp_objfile_data->longjmp_probes = ret;
+      bp_objfile_data->longjmp_searched = 1;
+    }
 
-	gdbarch = get_objfile_arch (objfile);
+  if (bp_objfile_data->longjmp_probes.empty ())
+    return false;
 
-	bp_objfile_data = get_breakpoint_objfile_data (objfile);
+  for (probe *p : bp_objfile_data->longjmp_probes)
+    {
+      struct breakpoint *b;
 
-	if (!bp_objfile_data->longjmp_searched)
-	  {
-	    std::vector<probe *> ret
-	      = find_probes_in_objfile (objfile, "libc", "longjmp");
+      b = create_internal_breakpoint (gdbarch,
+				      p->get_relocated_address (objfile),
+				      bp_longjmp_master);
+      b->locspec = new_probe_location_spec ("-probe-stap libc:longjmp");
+      b->enable_state = bp_disabled;
+    }
 
-	    if (!ret.empty ())
-	      {
-		/* We are only interested in checking one element.  */
-		probe *p = ret[0];
+  return true;
+}
 
-		if (!p->can_evaluate_arguments ())
-		  {
-		    /* We cannot use the probe interface here, because it does
-		       not know how to evaluate arguments.  */
-		    ret.clear ();
-		  }
-	      }
-	    bp_objfile_data->longjmp_probes = ret;
-	    bp_objfile_data->longjmp_searched = 1;
-	  }
+/* Install master longjmp breakpoints for OBJFILE using longjmp_names.
+   Return true if at least one breakpoint was installed.  */
 
-	if (!bp_objfile_data->longjmp_probes.empty ())
-	  {
-	    for (probe *p : bp_objfile_data->longjmp_probes)
-	      {
-		struct breakpoint *b;
+static bool
+create_longjmp_master_breakpoint_names (objfile *objfile)
+{
+  struct gdbarch *gdbarch = objfile->arch ();
+  if (!gdbarch_get_longjmp_target_p (gdbarch))
+    return false;
 
-		b = create_internal_breakpoint (gdbarch,
-						p->get_relocated_address (objfile),
-						bp_longjmp_master,
-						&internal_breakpoint_ops);
-		b->location = new_probe_location ("-probe-stap libc:longjmp");
-		b->enable_state = bp_disabled;
-	      }
+  struct breakpoint_objfile_data *bp_objfile_data
+    = get_breakpoint_objfile_data (objfile);
+  unsigned int installed_bp = 0;
 
-	    continue;
-	  }
+  for (int i = 0; i < NUM_LONGJMP_NAMES; i++)
+    {
+      struct breakpoint *b;
+      const char *func_name;
+      CORE_ADDR addr;
 
-	if (!gdbarch_get_longjmp_target_p (gdbarch))
-	  continue;
+      if (msym_not_found_p (bp_objfile_data->longjmp_msym[i].minsym))
+	continue;
 
-	for (i = 0; i < NUM_LONGJMP_NAMES; i++)
-	  {
-	    struct breakpoint *b;
-	    const char *func_name;
-	    CORE_ADDR addr;
-	    struct explicit_location explicit_loc;
+      func_name = longjmp_names[i];
+      if (bp_objfile_data->longjmp_msym[i].minsym == NULL)
+	{
+	  struct bound_minimal_symbol m;
 
-	    if (msym_not_found_p (bp_objfile_data->longjmp_msym[i].minsym))
+	  m = lookup_minimal_symbol_text (func_name, objfile);
+	  if (m.minsym == NULL)
+	    {
+	      /* Prevent future lookups in this objfile.  */
+	      bp_objfile_data->longjmp_msym[i].minsym = &msym_not_found;
 	      continue;
+	    }
+	  bp_objfile_data->longjmp_msym[i] = m;
+	}
 
-	    func_name = longjmp_names[i];
-	    if (bp_objfile_data->longjmp_msym[i].minsym == NULL)
-	      {
-		struct bound_minimal_symbol m;
+      addr = bp_objfile_data->longjmp_msym[i].value_address ();
+      b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master);
+      b->locspec = new_explicit_location_spec_function (func_name);
+      b->enable_state = bp_disabled;
+      installed_bp++;
+    }
 
-		m = lookup_minimal_symbol_text (func_name, objfile);
-		if (m.minsym == NULL)
-		  {
-		    /* Prevent future lookups in this objfile.  */
-		    bp_objfile_data->longjmp_msym[i].minsym = &msym_not_found;
-		    continue;
-		  }
-		bp_objfile_data->longjmp_msym[i] = m;
-	      }
+  return installed_bp > 0;
+}
 
-	    addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i]);
-	    b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master,
-					    &internal_breakpoint_ops);
-	    initialize_explicit_location (&explicit_loc);
-	    explicit_loc.function_name = ASTRDUP (func_name);
-	    b->location = new_explicit_location (&explicit_loc);
-	    b->enable_state = bp_disabled;
-	  }
-      }
-  }
+/* Create a master longjmp breakpoint.  */
+
+static void
+create_longjmp_master_breakpoint (void)
+{
+  scoped_restore_current_program_space restore_pspace;
+
+  for (struct program_space *pspace : program_spaces)
+    {
+      set_current_program_space (pspace);
+
+      for (objfile *obj : current_program_space->objfiles ())
+	{
+	  /* Skip separate debug object, it's handled in the loop below.  */
+	  if (obj->separate_debug_objfile_backlink != nullptr)
+	    continue;
+
+	  /* Try a probe kind breakpoint on main objfile.  */
+	  if (create_longjmp_master_breakpoint_probe (obj))
+	    continue;
+
+	  /* Try longjmp_names kind breakpoints on main and separate_debug
+	     objfiles.  */
+	  for (objfile *debug_objfile : obj->separate_debug_objfiles ())
+	    if (create_longjmp_master_breakpoint_names (debug_objfile))
+	      break;
+	}
+    }
 }
 
 /* Create a master std::terminate breakpoint.  */
 static void
 create_std_terminate_master_breakpoint (void)
 {
-  struct program_space *pspace;
   const char *const func_name = "std::terminate()";
 
   scoped_restore_current_program_space restore_pspace;
+  scoped_restore_current_language save_language;
+  set_language (language_cplus);
 
-  ALL_PSPACES (pspace)
-  {
-    CORE_ADDR addr;
-
-    set_current_program_space (pspace);
+  for (struct program_space *pspace : program_spaces)
+    {
+      set_current_program_space (pspace);
 
-    for (objfile *objfile : current_program_space->objfiles ())
-      {
-	struct breakpoint *b;
-	struct breakpoint_objfile_data *bp_objfile_data;
-	struct explicit_location explicit_loc;
+      for (objfile *objfile : current_program_space->objfiles ())
+	{
+	  struct breakpoint *b;
+	  struct breakpoint_objfile_data *bp_objfile_data;
 
-	bp_objfile_data = get_breakpoint_objfile_data (objfile);
+	  bp_objfile_data = get_breakpoint_objfile_data (objfile);
 
-	if (msym_not_found_p (bp_objfile_data->terminate_msym.minsym))
-	  continue;
+	  if (msym_not_found_p (bp_objfile_data->terminate_msym.minsym))
+	    continue;
 
-	if (bp_objfile_data->terminate_msym.minsym == NULL)
-	  {
-	    struct bound_minimal_symbol m;
+	  if (bp_objfile_data->terminate_msym.minsym == NULL)
+	    {
+	      struct bound_minimal_symbol m;
 
-	    m = lookup_minimal_symbol (func_name, NULL, objfile);
-	    if (m.minsym == NULL || (MSYMBOL_TYPE (m.minsym) != mst_text
-				     && MSYMBOL_TYPE (m.minsym) != mst_file_text))
-	      {
-		/* Prevent future lookups in this objfile.  */
-		bp_objfile_data->terminate_msym.minsym = &msym_not_found;
-		continue;
-	      }
-	    bp_objfile_data->terminate_msym = m;
-	  }
+	      m = lookup_minimal_symbol (func_name, NULL, objfile);
+	      if (m.minsym == NULL || (m.minsym->type () != mst_text
+				       && m.minsym->type () != mst_file_text))
+		{
+		  /* Prevent future lookups in this objfile.  */
+		  bp_objfile_data->terminate_msym.minsym = &msym_not_found;
+		  continue;
+		}
+	      bp_objfile_data->terminate_msym = m;
+	    }
 
-	addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym);
-	b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
-					bp_std_terminate_master,
-					&internal_breakpoint_ops);
-	initialize_explicit_location (&explicit_loc);
-	explicit_loc.function_name = ASTRDUP (func_name);
-	b->location = new_explicit_location (&explicit_loc);
-	b->enable_state = bp_disabled;
-      }
-  }
+	  b = create_internal_breakpoint (objfile->arch (),
+					  bp_objfile_data->terminate_msym,
+					  bp_std_terminate_master);
+	  b->locspec = new_explicit_location_spec_function (func_name);
+	  b->enable_state = bp_disabled;
+	}
+    }
 }
 
-/* Install a master breakpoint on the unwinder's debug hook.  */
+/* Install a master breakpoint on the unwinder's debug hook for OBJFILE using a
+   probe.  Return true if a breakpoint was installed.  */
 
-static void
-create_exception_master_breakpoint (void)
+static bool
+create_exception_master_breakpoint_probe (objfile *objfile)
 {
-  const char *const func_name = "_Unwind_DebugHook";
+  struct breakpoint *b;
+  struct gdbarch *gdbarch;
+  struct breakpoint_objfile_data *bp_objfile_data;
 
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      struct breakpoint *b;
-      struct gdbarch *gdbarch;
-      struct breakpoint_objfile_data *bp_objfile_data;
-      CORE_ADDR addr;
-      struct explicit_location explicit_loc;
+  bp_objfile_data = get_breakpoint_objfile_data (objfile);
 
-      bp_objfile_data = get_breakpoint_objfile_data (objfile);
+  /* We prefer the SystemTap probe point if it exists.  */
+  if (!bp_objfile_data->exception_searched)
+    {
+      std::vector<probe *> ret
+	= find_probes_in_objfile (objfile, "libgcc", "unwind");
 
-      /* We prefer the SystemTap probe point if it exists.  */
-      if (!bp_objfile_data->exception_searched)
+      if (!ret.empty ())
 	{
-	  std::vector<probe *> ret
-	    = find_probes_in_objfile (objfile, "libgcc", "unwind");
+	  /* We are only interested in checking one element.  */
+	  probe *p = ret[0];
 
-	  if (!ret.empty ())
+	  if (!p->can_evaluate_arguments ())
 	    {
-	      /* We are only interested in checking one element.  */
-	      probe *p = ret[0];
-
-	      if (!p->can_evaluate_arguments ())
-		{
-		  /* We cannot use the probe interface here, because it does
-		     not know how to evaluate arguments.  */
-		  ret.clear ();
-		}
+	      /* We cannot use the probe interface here, because it does
+		 not know how to evaluate arguments.  */
+	      ret.clear ();
 	    }
-	  bp_objfile_data->exception_probes = ret;
-	  bp_objfile_data->exception_searched = 1;
 	}
+      bp_objfile_data->exception_probes = ret;
+      bp_objfile_data->exception_searched = 1;
+    }
 
-      if (!bp_objfile_data->exception_probes.empty ())
-	{
-	  gdbarch = get_objfile_arch (objfile);
+  if (bp_objfile_data->exception_probes.empty ())
+    return false;
 
-	  for (probe *p : bp_objfile_data->exception_probes)
-	    {
-	      b = create_internal_breakpoint (gdbarch,
-					      p->get_relocated_address (objfile),
-					      bp_exception_master,
-					      &internal_breakpoint_ops);
-	      b->location = new_probe_location ("-probe-stap libgcc:unwind");
-	      b->enable_state = bp_disabled;
-	    }
+  gdbarch = objfile->arch ();
 
-	  continue;
-	}
+  for (probe *p : bp_objfile_data->exception_probes)
+    {
+      b = create_internal_breakpoint (gdbarch,
+				      p->get_relocated_address (objfile),
+				      bp_exception_master);
+      b->locspec = new_probe_location_spec ("-probe-stap libgcc:unwind");
+      b->enable_state = bp_disabled;
+    }
 
-      /* Otherwise, try the hook function.  */
+  return true;
+}
 
-      if (msym_not_found_p (bp_objfile_data->exception_msym.minsym))
-	continue;
+/* Install a master breakpoint on the unwinder's debug hook for OBJFILE using
+   _Unwind_DebugHook.  Return true if a breakpoint was installed.  */
 
-      gdbarch = get_objfile_arch (objfile);
+static bool
+create_exception_master_breakpoint_hook (objfile *objfile)
+{
+  const char *const func_name = "_Unwind_DebugHook";
+  struct breakpoint *b;
+  struct gdbarch *gdbarch;
+  struct breakpoint_objfile_data *bp_objfile_data;
 
-      if (bp_objfile_data->exception_msym.minsym == NULL)
-	{
-	  struct bound_minimal_symbol debug_hook;
+  bp_objfile_data = get_breakpoint_objfile_data (objfile);
 
-	  debug_hook = lookup_minimal_symbol (func_name, NULL, objfile);
-	  if (debug_hook.minsym == NULL)
-	    {
-	      bp_objfile_data->exception_msym.minsym = &msym_not_found;
-	      continue;
-	    }
+  if (msym_not_found_p (bp_objfile_data->exception_msym.minsym))
+    return false;
 
-	  bp_objfile_data->exception_msym = debug_hook;
+  gdbarch = objfile->arch ();
+
+  if (bp_objfile_data->exception_msym.minsym == NULL)
+    {
+      struct bound_minimal_symbol debug_hook;
+
+      debug_hook = lookup_minimal_symbol_text (func_name, objfile);
+      if (debug_hook.minsym == NULL)
+	{
+	  bp_objfile_data->exception_msym.minsym = &msym_not_found;
+	  return false;
 	}
 
-      addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym);
-      addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
-						 current_top_target ());
-      b = create_internal_breakpoint (gdbarch, addr, bp_exception_master,
-				      &internal_breakpoint_ops);
-      initialize_explicit_location (&explicit_loc);
-      explicit_loc.function_name = ASTRDUP (func_name);
-      b->location = new_explicit_location (&explicit_loc);
-      b->enable_state = bp_disabled;
+      bp_objfile_data->exception_msym = debug_hook;
+    }
+
+  b = create_internal_breakpoint (gdbarch, bp_objfile_data->exception_msym,
+				  bp_exception_master);
+  b->locspec = new_explicit_location_spec_function (func_name);
+  b->enable_state = bp_disabled;
+
+  return true;
+}
+
+/* Install a master breakpoint on the unwinder's debug hook.  */
+
+static void
+create_exception_master_breakpoint (void)
+{
+  for (objfile *obj : current_program_space->objfiles ())
+    {
+      /* Skip separate debug object.  */
+      if (obj->separate_debug_objfile_backlink)
+	continue;
+
+      /* Try a probe kind breakpoint.  */
+      if (create_exception_master_breakpoint_probe (obj))
+	continue;
+
+      /* Iterate over main and separate debug objects and try an
+	 _Unwind_DebugHook kind breakpoint.  */
+      for (objfile *debug_objfile : obj->separate_debug_objfiles ())
+	if (create_exception_master_breakpoint_hook (debug_objfile))
+	  break;
     }
 }
 
 /* Does B have a location spec?  */
 
-static int
-breakpoint_event_location_empty_p (const struct breakpoint *b)
+static bool
+breakpoint_location_spec_empty_p (const struct breakpoint *b)
 {
-  return b->location != NULL && event_location_empty_p (b->location.get ());
+  return (b->locspec != nullptr && b->locspec->empty_p ());
 }
 
 void
 update_breakpoints_after_exec (void)
 {
-  struct breakpoint *b, *b_tmp;
-  struct bp_location *bploc, **bplocp_tmp;
-
   /* We're about to delete breakpoints from GDB's lists.  If the
      INSERTED flag is true, GDB will try to lift the breakpoints by
      writing the breakpoints' "shadow contents" back into memory.  The
@@ -3482,118 +3907,117 @@ update_breakpoints_after_exec (void)
      breakpoints out as soon as it detects an exec.  We don't do that
      here instead, because there may be other attempts to delete
      breakpoints after detecting an exec and before reaching here.  */
-  ALL_BP_LOCATIONS (bploc, bplocp_tmp)
+  for (bp_location *bploc : all_bp_locations ())
     if (bploc->pspace == current_program_space)
       gdb_assert (!bploc->inserted);
 
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-  {
-    if (b->pspace != current_program_space)
-      continue;
-
-    /* Solib breakpoints must be explicitly reset after an exec().  */
-    if (b->type == bp_shlib_event)
-      {
-	delete_breakpoint (b);
+  for (breakpoint &b : all_breakpoints_safe ())
+    {
+      if (b.pspace != current_program_space)
 	continue;
-      }
 
-    /* JIT breakpoints must be explicitly reset after an exec().  */
-    if (b->type == bp_jit_event)
-      {
-	delete_breakpoint (b);
-	continue;
-      }
+      /* Solib breakpoints must be explicitly reset after an exec().  */
+      if (b.type == bp_shlib_event)
+	{
+	  delete_breakpoint (&b);
+	  continue;
+	}
 
-    /* Thread event breakpoints must be set anew after an exec(),
-       as must overlay event and longjmp master breakpoints.  */
-    if (b->type == bp_thread_event || b->type == bp_overlay_event
-	|| b->type == bp_longjmp_master || b->type == bp_std_terminate_master
-	|| b->type == bp_exception_master)
-      {
-	delete_breakpoint (b);
-	continue;
-      }
+      /* JIT breakpoints must be explicitly reset after an exec().  */
+      if (b.type == bp_jit_event)
+	{
+	  delete_breakpoint (&b);
+	  continue;
+	}
 
-    /* Step-resume breakpoints are meaningless after an exec().  */
-    if (b->type == bp_step_resume || b->type == bp_hp_step_resume)
-      {
-	delete_breakpoint (b);
-	continue;
-      }
+      /* Thread event breakpoints must be set anew after an exec(),
+	 as must overlay event and longjmp master breakpoints.  */
+      if (b.type == bp_thread_event || b.type == bp_overlay_event
+	  || b.type == bp_longjmp_master || b.type == bp_std_terminate_master
+	  || b.type == bp_exception_master)
+	{
+	  delete_breakpoint (&b);
+	  continue;
+	}
 
-    /* Just like single-step breakpoints.  */
-    if (b->type == bp_single_step)
-      {
-	delete_breakpoint (b);
-	continue;
-      }
+      /* Step-resume breakpoints are meaningless after an exec().  */
+      if (b.type == bp_step_resume || b.type == bp_hp_step_resume)
+	{
+	  delete_breakpoint (&b);
+	  continue;
+	}
 
-    /* Longjmp and longjmp-resume breakpoints are also meaningless
-       after an exec.  */
-    if (b->type == bp_longjmp || b->type == bp_longjmp_resume
-	|| b->type == bp_longjmp_call_dummy
-	|| b->type == bp_exception || b->type == bp_exception_resume)
-      {
-	delete_breakpoint (b);
-	continue;
-      }
+      /* Just like single-step breakpoints.  */
+      if (b.type == bp_single_step)
+	{
+	  delete_breakpoint (&b);
+	  continue;
+	}
 
-    if (b->type == bp_catchpoint)
-      {
-        /* For now, none of the bp_catchpoint breakpoints need to
-           do anything at this point.  In the future, if some of
-           the catchpoints need to something, we will need to add
-           a new method, and call this method from here.  */
-        continue;
-      }
+      /* Longjmp and longjmp-resume breakpoints are also meaningless
+	 after an exec.  */
+      if (b.type == bp_longjmp || b.type == bp_longjmp_resume
+	  || b.type == bp_longjmp_call_dummy
+	  || b.type == bp_exception || b.type == bp_exception_resume)
+	{
+	  delete_breakpoint (&b);
+	  continue;
+	}
 
-    /* bp_finish is a special case.  The only way we ought to be able
-       to see one of these when an exec() has happened, is if the user
-       caught a vfork, and then said "finish".  Ordinarily a finish just
-       carries them to the call-site of the current callee, by setting
-       a temporary bp there and resuming.  But in this case, the finish
-       will carry them entirely through the vfork & exec.
-
-       We don't want to allow a bp_finish to remain inserted now.  But
-       we can't safely delete it, 'cause finish_command has a handle to
-       the bp on a bpstat, and will later want to delete it.  There's a
-       chance (and I've seen it happen) that if we delete the bp_finish
-       here, that its storage will get reused by the time finish_command
-       gets 'round to deleting the "use to be a bp_finish" breakpoint.
-       We really must allow finish_command to delete a bp_finish.
-
-       In the absence of a general solution for the "how do we know
-       it's safe to delete something others may have handles to?"
-       problem, what we'll do here is just uninsert the bp_finish, and
-       let finish_command delete it.
-
-       (We know the bp_finish is "doomed" in the sense that it's
-       momentary, and will be deleted as soon as finish_command sees
-       the inferior stopped.  So it doesn't matter that the bp's
-       address is probably bogus in the new a.out, unlike e.g., the
-       solib breakpoints.)  */
+      if (b.type == bp_catchpoint)
+	{
+	  /* For now, none of the bp_catchpoint breakpoints need to
+	     do anything at this point.  In the future, if some of
+	     the catchpoints need to something, we will need to add
+	     a new method, and call this method from here.  */
+	  continue;
+	}
 
-    if (b->type == bp_finish)
-      {
-	continue;
-      }
+      /* bp_finish is a special case.  The only way we ought to be able
+	 to see one of these when an exec() has happened, is if the user
+	 caught a vfork, and then said "finish".  Ordinarily a finish just
+	 carries them to the call-site of the current callee, by setting
+	 a temporary bp there and resuming.  But in this case, the finish
+	 will carry them entirely through the vfork & exec.
+
+	 We don't want to allow a bp_finish to remain inserted now.  But
+	 we can't safely delete it, 'cause finish_command has a handle to
+	 the bp on a bpstat, and will later want to delete it.  There's a
+	 chance (and I've seen it happen) that if we delete the bp_finish
+	 here, that its storage will get reused by the time finish_command
+	 gets 'round to deleting the "use to be a bp_finish" breakpoint.
+	 We really must allow finish_command to delete a bp_finish.
+
+	 In the absence of a general solution for the "how do we know
+	 it's safe to delete something others may have handles to?"
+	 problem, what we'll do here is just uninsert the bp_finish, and
+	 let finish_command delete it.
+
+	 (We know the bp_finish is "doomed" in the sense that it's
+	 momentary, and will be deleted as soon as finish_command sees
+	 the inferior stopped.  So it doesn't matter that the bp's
+	 address is probably bogus in the new a.out, unlike e.g., the
+	 solib breakpoints.)  */
 
-    /* Without a symbolic address, we have little hope of the
-       pre-exec() address meaning the same thing in the post-exec()
-       a.out.  */
-    if (breakpoint_event_location_empty_p (b))
-      {
-	delete_breakpoint (b);
-	continue;
-      }
-  }
+      if (b.type == bp_finish)
+	{
+	  continue;
+	}
+
+      /* Without a symbolic address, we have little hope of the
+	 pre-exec() address meaning the same thing in the post-exec()
+	 a.out.  */
+      if (breakpoint_location_spec_empty_p (&b))
+	{
+	  delete_breakpoint (&b);
+	  continue;
+	}
+    }
 }
 
 int
 detach_breakpoints (ptid_t ptid)
 {
-  struct bp_location *bl, **blp_tmp;
   int val = 0;
   scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
   struct inferior *inf = current_inferior ();
@@ -3603,23 +4027,24 @@ detach_breakpoints (ptid_t ptid)
 
   /* Set inferior_ptid; remove_breakpoint_1 uses this global.  */
   inferior_ptid = ptid;
-  ALL_BP_LOCATIONS (bl, blp_tmp)
-  {
-    if (bl->pspace != inf->pspace)
-      continue;
+  for (bp_location *bl : all_bp_locations ())
+    {
+      if (bl->pspace != inf->pspace)
+	continue;
 
-    /* This function must physically remove breakpoints locations
-       from the specified ptid, without modifying the breakpoint
-       package's state.  Locations of type bp_loc_other are only
-       maintained at GDB side.  So, there is no need to remove
-       these bp_loc_other locations.  Moreover, removing these
-       would modify the breakpoint package's state.  */
-    if (bl->loc_type == bp_loc_other)
-      continue;
+      /* This function must physically remove breakpoints locations
+	 from the specified ptid, without modifying the breakpoint
+	 package's state.  Locations of type bp_loc_other and
+	 bp_loc_software_watchpoint are only maintained at GDB side,
+	 so there is no need to remove them.  Moreover, removing these
+	 would modify the breakpoint package's state.  */
+      if (bl->loc_type == bp_loc_other
+	  || bl->loc_type == bp_loc_software_watchpoint)
+	continue;
 
-    if (bl->inserted)
-      val |= remove_breakpoint_1 (bl, DETACH_BREAKPOINT);
-  }
+      if (bl->inserted)
+	val |= remove_breakpoint_1 (bl, DETACH_BREAKPOINT);
+    }
 
   return val;
 }
@@ -3633,6 +4058,10 @@ detach_breakpoints (ptid_t ptid)
 static int
 remove_breakpoint_1 (struct bp_location *bl, enum remove_bp_reason reason)
 {
+  breakpoint_debug_printf ("%s due to %s",
+			   breakpoint_location_address_str (bl).c_str (),
+			   remove_bp_reason_str (reason));
+
   int val;
 
   /* BL is never in moribund_locations by our callers.  */
@@ -3679,7 +4108,7 @@ remove_breakpoint_1 (struct bp_location
 	      && !memory_validate_breakpoint (bl->gdbarch, &bl->target_info))
 	    val = 0;
 	  else
-	    val = bl->owner->ops->remove_location (bl, reason);
+	    val = bl->owner->remove_location (bl, reason);
 	}
       else
 	{
@@ -3714,7 +4143,7 @@ remove_breakpoint_1 (struct bp_location
 		 wrong code with the saved shadow contents.  */
 	      if (bl->loc_type == bp_loc_hardware_breakpoint
 		  || section_is_mapped (bl->section))
-		val = bl->owner->ops->remove_location (bl, reason);
+		val = bl->owner->remove_location (bl, reason);
 	      else
 		val = 0;
 	    }
@@ -3748,11 +4177,8 @@ remove_breakpoint_1 (struct bp_location
     }
   else if (bl->loc_type == bp_loc_hardware_watchpoint)
     {
-      gdb_assert (bl->owner->ops != NULL
-		  && bl->owner->ops->remove_location != NULL);
-
       bl->inserted = (reason == DETACH_BREAKPOINT);
-      bl->owner->ops->remove_location (bl, reason);
+      bl->owner->remove_location (bl, reason);
 
       /* Failure to remove any of the hardware watchpoints comes here.  */
       if (reason == REMOVE_BREAKPOINT && bl->inserted)
@@ -3760,13 +4186,10 @@ remove_breakpoint_1 (struct bp_location
 		 bl->owner->number);
     }
   else if (bl->owner->type == bp_catchpoint
-           && breakpoint_enabled (bl->owner)
-           && !bl->duplicate)
+	   && breakpoint_enabled (bl->owner)
+	   && !bl->duplicate)
     {
-      gdb_assert (bl->owner->ops != NULL
-		  && bl->owner->ops->remove_location != NULL);
-
-      val = bl->owner->ops->remove_location (bl, reason);
+      val = bl->owner->remove_location (bl, reason);
       if (val)
 	return val;
 
@@ -3798,9 +4221,7 @@ remove_breakpoint (struct bp_location *b
 void
 mark_breakpoints_out (void)
 {
-  struct bp_location *bl, **blp_tmp;
-
-  ALL_BP_LOCATIONS (bl, blp_tmp)
+  for (bp_location *bl : all_bp_locations ())
     if (bl->pspace == current_program_space)
       bl->inserted = 0;
 }
@@ -3820,94 +4241,93 @@ mark_breakpoints_out (void)
 void
 breakpoint_init_inferior (enum inf_context context)
 {
-  struct breakpoint *b, *b_tmp;
   struct program_space *pspace = current_program_space;
 
   /* If breakpoint locations are shared across processes, then there's
      nothing to do.  */
-  if (gdbarch_has_global_breakpoints (target_gdbarch ()))
+  if (gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
     return;
 
   mark_breakpoints_out ();
 
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-  {
-    if (b->loc && b->loc->pspace != pspace)
-      continue;
+  for (breakpoint &b : all_breakpoints_safe ())
+    {
+      if (b.has_locations () && b.first_loc ().pspace != pspace)
+	continue;
 
-    switch (b->type)
-      {
-      case bp_call_dummy:
-      case bp_longjmp_call_dummy:
+      switch (b.type)
+	{
+	case bp_call_dummy:
+	case bp_longjmp_call_dummy:
 
-	/* If the call dummy breakpoint is at the entry point it will
-	   cause problems when the inferior is rerun, so we better get
-	   rid of it.  */
+	  /* If the call dummy breakpoint is at the entry point it will
+	     cause problems when the inferior is rerun, so we better get
+	     rid of it.  */
 
-      case bp_watchpoint_scope:
+	case bp_watchpoint_scope:
 
-	/* Also get rid of scope breakpoints.  */
+	  /* Also get rid of scope breakpoints.  */
 
-      case bp_shlib_event:
+	case bp_shlib_event:
 
-	/* Also remove solib event breakpoints.  Their addresses may
-	   have changed since the last time we ran the program.
-	   Actually we may now be debugging against different target;
-	   and so the solib backend that installed this breakpoint may
-	   not be used in by the target.  E.g.,
+	  /* Also remove solib event breakpoints.  Their addresses may
+	     have changed since the last time we ran the program.
+	     Actually we may now be debugging against different target;
+	     and so the solib backend that installed this breakpoint may
+	     not be used in by the target.  E.g.,
+
+	     (gdb) file prog-linux
+	     (gdb) run               # native linux target
+	     ...
+	     (gdb) kill
+	     (gdb) file prog-win.exe
+	     (gdb) tar rem :9999     # remote Windows gdbserver.
+	  */
 
-	   (gdb) file prog-linux
-	   (gdb) run               # native linux target
-	   ...
-	   (gdb) kill
-	   (gdb) file prog-win.exe
-	   (gdb) tar rem :9999     # remote Windows gdbserver.
-	*/
+	case bp_step_resume:
 
-      case bp_step_resume:
+	  /* Also remove step-resume breakpoints.  */
 
-	/* Also remove step-resume breakpoints.  */
+	case bp_single_step:
 
-      case bp_single_step:
+	  /* Also remove single-step breakpoints.  */
 
-	/* Also remove single-step breakpoints.  */
+	  delete_breakpoint (&b);
+	  break;
 
-	delete_breakpoint (b);
-	break;
+	case bp_watchpoint:
+	case bp_hardware_watchpoint:
+	case bp_read_watchpoint:
+	case bp_access_watchpoint:
+	  {
+	    watchpoint &w = gdb::checked_static_cast<watchpoint &> (b);
 
-      case bp_watchpoint:
-      case bp_hardware_watchpoint:
-      case bp_read_watchpoint:
-      case bp_access_watchpoint:
-	{
-	  struct watchpoint *w = (struct watchpoint *) b;
-
-	  /* Likewise for watchpoints on local expressions.  */
-	  if (w->exp_valid_block != NULL)
-	    delete_breakpoint (b);
-	  else
-	    {
-	      /* Get rid of existing locations, which are no longer
-		 valid.  New ones will be created in
-		 update_watchpoint, when the inferior is restarted.
-		 The next update_global_location_list call will
-		 garbage collect them.  */
-	      b->loc = NULL;
+	    /* Likewise for watchpoints on local expressions.  */
+	    if (w.exp_valid_block != NULL)
+	      delete_breakpoint (&b);
+	    else
+	      {
+		/* Get rid of existing locations, which are no longer
+		   valid.  New ones will be created in
+		   update_watchpoint, when the inferior is restarted.
+		   The next update_global_location_list call will
+		   garbage collect them.  */
+		b.clear_locations ();
 
-	      if (context == inf_starting)
-		{
-		  /* Reset val field to force reread of starting value in
-		     insert_breakpoints.  */
-		  w->val.reset (nullptr);
-		  w->val_valid = false;
-		}
-	    }
+		if (context == inf_starting)
+		  {
+		    /* Reset val field to force reread of starting value in
+		       insert_breakpoints.  */
+		    w.val.reset (nullptr);
+		    w.val_valid = false;
+		  }
+	      }
+	  }
+	  break;
+	default:
+	  break;
 	}
-	break;
-      default:
-	break;
-      }
-  }
+    }
 
   /* Get rid of the moribund locations.  */
   for (bp_location *bl : moribund_locations)
@@ -3933,10 +4353,9 @@ breakpoint_init_inferior (enum inf_conte
 enum breakpoint_here
 breakpoint_here_p (const address_space *aspace, CORE_ADDR pc)
 {
-  struct bp_location *bl, **blp_tmp;
-  int any_breakpoint_here = 0;
+  bool any_breakpoint_here = false;
 
-  ALL_BP_LOCATIONS (bl, blp_tmp)
+  for (bp_location *bl : all_bp_locations ())
     {
       if (bl->loc_type != bp_loc_software_breakpoint
 	  && bl->loc_type != bp_loc_hardware_breakpoint)
@@ -3954,7 +4373,7 @@ breakpoint_here_p (const address_space *
 	  else if (bl->permanent)
 	    return permanent_breakpoint_here;
 	  else
-	    any_breakpoint_here = 1;
+	    any_breakpoint_here = true;
 	}
     }
 
@@ -3967,9 +4386,7 @@ int
 breakpoint_in_range_p (const address_space *aspace,
 		       CORE_ADDR addr, ULONGEST len)
 {
-  struct bp_location *bl, **blp_tmp;
-
-  ALL_BP_LOCATIONS (bl, blp_tmp)
+  for (bp_location *bl : all_bp_locations ())
     {
       if (bl->loc_type != bp_loc_software_breakpoint
 	  && bl->loc_type != bp_loc_hardware_breakpoint)
@@ -4007,25 +4424,22 @@ moribund_breakpoint_here_p (const addres
   return 0;
 }
 
-/* Returns non-zero iff BL is inserted at PC, in address space
-   ASPACE.  */
+/* Returns true iff BL is inserted at PC, in address space ASPACE.  */
 
-static int
-bp_location_inserted_here_p (struct bp_location *bl,
+static bool
+bp_location_inserted_here_p (const struct bp_location *bl,
 			     const address_space *aspace, CORE_ADDR pc)
 {
   if (bl->inserted
-      && breakpoint_address_match (bl->pspace->aspace, bl->address,
+      && breakpoint_address_match (bl->pspace->aspace.get (), bl->address,
 				   aspace, pc))
     {
-      if (overlay_debugging
-	  && section_is_overlay (bl->section)
-	  && !section_is_mapped (bl->section))
-	return 0;		/* unmapped overlay -- can't be a match */
-      else
-	return 1;
+      /* An unmapped overlay can't be a match.  */
+      return !(overlay_debugging
+	       && section_is_overlay (bl->section)
+	       && !section_is_mapped (bl->section));
     }
-  return 0;
+  return false;
 }
 
 /* Returns non-zero iff there's a breakpoint inserted at PC.  */
@@ -4033,12 +4447,8 @@ bp_location_inserted_here_p (struct bp_l
 int
 breakpoint_inserted_here_p (const address_space *aspace, CORE_ADDR pc)
 {
-  struct bp_location **blp, **blp_tmp = NULL;
-
-  ALL_BP_LOCATIONS_AT_ADDR (blp, blp_tmp, pc)
+  for (bp_location *bl : all_bp_locations_at_addr (pc))
     {
-      struct bp_location *bl = *blp;
-
       if (bl->loc_type != bp_loc_software_breakpoint
 	  && bl->loc_type != bp_loc_hardware_breakpoint)
 	continue;
@@ -4056,12 +4466,8 @@ int
 software_breakpoint_inserted_here_p (const address_space *aspace,
 				     CORE_ADDR pc)
 {
-  struct bp_location **blp, **blp_tmp = NULL;
-
-  ALL_BP_LOCATIONS_AT_ADDR (blp, blp_tmp, pc)
+  for (bp_location *bl : all_bp_locations_at_addr (pc))
     {
-      struct bp_location *bl = *blp;
-
       if (bl->loc_type != bp_loc_software_breakpoint)
 	continue;
 
@@ -4078,12 +4484,8 @@ int
 hardware_breakpoint_inserted_here_p (const address_space *aspace,
 				     CORE_ADDR pc)
 {
-  struct bp_location **blp, **blp_tmp = NULL;
-
-  ALL_BP_LOCATIONS_AT_ADDR (blp, blp_tmp, pc)
+  for (bp_location *bl : all_bp_locations_at_addr (pc))
     {
-      struct bp_location *bl = *blp;
-
       if (bl->loc_type != bp_loc_hardware_breakpoint)
 	continue;
 
@@ -4098,27 +4500,23 @@ int
 hardware_watchpoint_inserted_in_range (const address_space *aspace,
 				       CORE_ADDR addr, ULONGEST len)
 {
-  struct breakpoint *bpt;
-
-  ALL_BREAKPOINTS (bpt)
+  for (breakpoint &bpt : all_breakpoints ())
     {
-      struct bp_location *loc;
-
-      if (bpt->type != bp_hardware_watchpoint
-	  && bpt->type != bp_access_watchpoint)
+      if (bpt.type != bp_hardware_watchpoint
+	  && bpt.type != bp_access_watchpoint)
 	continue;
 
-      if (!breakpoint_enabled (bpt))
+      if (!breakpoint_enabled (&bpt))
 	continue;
 
-      for (loc = bpt->loc; loc; loc = loc->next)
-	if (loc->pspace->aspace == aspace && loc->inserted)
+      for (bp_location &loc : bpt.locations ())
+	if (loc.pspace->aspace.get () == aspace && loc.inserted)
 	  {
 	    CORE_ADDR l, h;
 
 	    /* Check for intersection.  */
-	    l = std::max<CORE_ADDR> (loc->address, addr);
-	    h = std::min<CORE_ADDR> (loc->address + loc->length, addr + len);
+	    l = std::max<CORE_ADDR> (loc.address, addr);
+	    h = std::min<CORE_ADDR> (loc.address + loc.length, addr + len);
 	    if (l < h)
 	      return 1;
 	  }
@@ -4134,23 +4532,14 @@ is_catchpoint (struct breakpoint *b)
   return (b->type == bp_catchpoint);
 }
 
-/* Frees any storage that is part of a bpstat.  Does not walk the
-   'next' chain.  */
-
-bpstats::~bpstats ()
-{
-  if (bp_location_at != NULL)
-    decref_bp_location (&bp_location_at);
-}
-
 /* Clear a bpstat so that it says we are not at any breakpoint.
    Also free any storage that is part of a bpstat.  */
 
 void
-bpstat_clear (bpstat *bsp)
+bpstat_clear (bpstat **bsp)
 {
-  bpstat p;
-  bpstat q;
+  bpstat *p;
+  bpstat *q;
 
   if (bsp == 0)
     return;
@@ -4164,7 +4553,7 @@ bpstat_clear (bpstat *bsp)
   *bsp = NULL;
 }
 
-bpstats::bpstats (const bpstats &other)
+bpstat::bpstat (const bpstat &other)
   : next (NULL),
     bp_location_at (other.bp_location_at),
     breakpoint_at (other.breakpoint_at),
@@ -4174,26 +4563,25 @@ bpstats::bpstats (const bpstats &other)
     print_it (other.print_it)
 {
   if (other.old_val != NULL)
-    old_val = release_value (value_copy (other.old_val.get ()));
-  incref_bp_location (bp_location_at);
+    old_val = release_value (other.old_val->copy ());
 }
 
 /* Return a copy of a bpstat.  Like "bs1 = bs2" but all storage that
    is part of the bpstat is copied as well.  */
 
-bpstat
-bpstat_copy (bpstat bs)
+bpstat *
+bpstat_copy (bpstat *bs)
 {
-  bpstat p = NULL;
-  bpstat tmp;
-  bpstat retval = NULL;
+  bpstat *p = nullptr;
+  bpstat *tmp;
+  bpstat *retval = nullptr;
 
   if (bs == NULL)
     return bs;
 
   for (; bs != NULL; bs = bs->next)
     {
-      tmp = new bpstats (*bs);
+      tmp = new bpstat (*bs);
 
       if (p == NULL)
 	/* This is the first thing in the chain.  */
@@ -4208,8 +4596,8 @@ bpstat_copy (bpstat bs)
 
 /* Find the bpstat associated with this breakpoint.  */
 
-bpstat
-bpstat_find_breakpoint (bpstat bsp, struct breakpoint *breakpoint)
+bpstat *
+bpstat_find_breakpoint (bpstat *bsp, struct breakpoint *breakpoint)
 {
   if (bsp == NULL)
     return NULL;
@@ -4225,7 +4613,7 @@ bpstat_find_breakpoint (bpstat bsp, stru
 /* See breakpoint.h.  */
 
 bool
-bpstat_explains_signal (bpstat bsp, enum gdb_signal sig)
+bpstat_explains_signal (bpstat *bsp, enum gdb_signal sig)
 {
   for (; bsp != NULL; bsp = bsp->next)
     {
@@ -4238,8 +4626,7 @@ bpstat_explains_signal (bpstat bsp, enum
 	}
       else
 	{
-	  if (bsp->breakpoint_at->ops->explains_signal (bsp->breakpoint_at,
-							sig))
+	  if (bsp->breakpoint_at->explains_signal (sig))
 	    return true;
 	}
     }
@@ -4247,18 +4634,10 @@ bpstat_explains_signal (bpstat bsp, enum
   return false;
 }
 
-/* Put in *NUM the breakpoint number of the first breakpoint we are
-   stopped at.  *BSP upon return is a bpstat which points to the
-   remaining breakpoints stopped at (but which is not guaranteed to be
-   good for anything but further calls to bpstat_num).
-
-   Return 0 if passed a bpstat which does not indicate any breakpoints.
-   Return -1 if stopped at a breakpoint that has been deleted since
-   we set it.
-   Return 1 otherwise.  */
+/* See breakpoint.h.  */
 
 int
-bpstat_num (bpstat *bsp, int *num)
+bpstat_num (bpstat **bsp, int *num)
 {
   struct breakpoint *b;
 
@@ -4277,12 +4656,58 @@ bpstat_num (bpstat *bsp, int *num)
   return 1;
 }
 
+/* See breakpoint.h  */
+
+int
+bpstat_locno (const bpstat *bs)
+{
+  const struct breakpoint *b = bs->breakpoint_at;
+  const struct bp_location *bl = bs->bp_location_at.get ();
+
+  if (b != nullptr && b->has_multiple_locations ())
+    {
+      int locno = 1;
+
+      for (bp_location &loc : b->locations ())
+	{
+	  if (bl == &loc)
+	    return locno;
+
+	  ++locno;
+	}
+
+      warning (_("location number not found for breakpoint %d address %s."),
+	       b->number, paddress (bl->gdbarch, bl->address));
+    }
+
+  return 0;
+}
+
+/* See breakpoint.h.  */
+
+void
+print_num_locno (const bpstat *bs, struct ui_out *uiout)
+{
+  struct breakpoint *b = bs->breakpoint_at;
+
+  if (b == nullptr)
+    uiout->text (_("deleted breakpoint"));
+  else
+    {
+      uiout->field_signed ("bkptno", b->number);
+
+      int locno = bpstat_locno (bs);
+      if (locno != 0)
+	uiout->message (".%pF", signed_field ("locno", locno));
+    }
+}
+
 /* See breakpoint.h.  */
 
 void
 bpstat_clear_actions (void)
 {
-  bpstat bs;
+  bpstat *bs;
 
   if (inferior_ptid == null_ptid)
     return;
@@ -4315,15 +4740,28 @@ breakpoint_about_to_proceed (void)
   breakpoint_proceeded = 1;
 }
 
-/* Return non-zero iff CMD as the first line of a command sequence is `silent'
+/* Return true iff CMD as the first line of a command sequence is `silent'
    or its equivalent.  */
 
-static int
+static bool
 command_line_is_silent (struct command_line *cmd)
 {
   return cmd && (strcmp ("silent", cmd->line) == 0);
 }
 
+/* Sets the $_hit_bpnum and $_hit_locno to bpnum and locno.
+   A locno 0 is changed to 1 to e.g. let the user do
+     (gdb) disable $_hit_bpnum.$_hit_locno
+   for a single location breakpoint.  */
+
+static void
+set_hit_convenience_vars (int bpnum, int locno)
+{
+  set_internalvar_integer (lookup_internalvar ("_hit_bpnum"), bpnum);
+  set_internalvar_integer (lookup_internalvar ("_hit_locno"),
+			   (locno > 0 ? locno : 1));
+}
+
 /* Execute all the commands associated with all the breakpoints at
    this location.  Any of these commands could cause the process to
    proceed beyond this point, etc.  We look out for such changes by
@@ -4333,16 +4771,16 @@ command_line_is_silent (struct command_l
    case, it is the caller's responsibility to recall it again with the
    bpstat of the current thread.  */
 
-static int
-bpstat_do_actions_1 (bpstat *bsp)
+static bool
+bpstat_do_actions_1 (bpstat **bsp)
 {
-  bpstat bs;
-  int again = 0;
+  bpstat *bs;
+  bool again = false;
 
   /* Avoid endless recursion if a `source' command is contained
      in bs->commands.  */
   if (executing_breakpoint_commands)
-    return 0;
+    return false;
 
   scoped_restore save_executing
     = make_scoped_restore (&executing_breakpoint_commands, 1);
@@ -4352,21 +4790,45 @@ bpstat_do_actions_1 (bpstat *bsp)
   /* This pointer will iterate over the list of bpstat's.  */
   bs = *bsp;
 
+  /* The $_hit_* convenience variables are set before running the
+     commands of BS.  In case we have several bs, after the loop,
+     we set again the variables to the first printed bpnum and locno.
+     For multiple breakpoints, this ensures the variables are set to the
+     breakpoint printed for the user. */
+  int printed_hit_bpnum = -1;
+  int printed_hit_locno = -1;
+
   breakpoint_proceeded = 0;
   for (; bs != NULL; bs = bs->next)
     {
       struct command_line *cmd = NULL;
 
+      /* Set the _hit_* convenience variables before running BS's commands.  */
+      {
+	const struct breakpoint *b = bs->breakpoint_at;
+	if (b != nullptr)
+	  {
+	    int locno = bpstat_locno (bs);
+
+	    set_hit_convenience_vars (b->number, locno);
+	    if (printed_hit_locno == -1 && bs->print)
+	      {
+		printed_hit_bpnum = b->number;
+		printed_hit_locno = locno;
+	      }
+	  }
+      }
+
       /* Take ownership of the BSP's command tree, if it has one.
 
-         The command tree could legitimately contain commands like
-         'step' and 'next', which call clear_proceed_status, which
-         frees stop_bpstat's command tree.  To make sure this doesn't
-         free the tree we're executing out from under us, we need to
-         take ownership of the tree ourselves.  Since a given bpstat's
-         commands are only executed once, we don't need to copy it; we
-         can clear the pointer in the bpstat, and make sure we free
-         the tree when we're done.  */
+	 The command tree could legitimately contain commands like
+	 'step' and 'next', which call clear_proceed_status, which
+	 frees the bpstat BS and its command tree.  To make sure this doesn't
+	 free the tree we're executing out from under us, we need to
+	 take ownership of the tree ourselves.  Since a given bpstat's
+	 commands are only executed once, we don't need to copy it; we
+	 can clear the pointer in the bpstat, and make sure we free
+	 the tree when we're done.  */
       counted_command_line ccmd = bs->commands;
       bs->commands = NULL;
       if (ccmd != NULL)
@@ -4380,6 +4842,8 @@ bpstat_do_actions_1 (bpstat *bsp)
       while (cmd != NULL)
 	{
 	  execute_control_command (cmd);
+	  /* After execute_control_command, if breakpoint_proceeded is true,
+	     BS has been freed and cannot be accessed anymore.  */
 
 	  if (breakpoint_proceeded)
 	    break;
@@ -4408,10 +4872,16 @@ bpstat_do_actions_1 (bpstat *bsp)
 	       command, and can easily blow up GDB stack.  Instead, we
 	       return true, which will trigger the caller to recall us
 	       with the new stop_bpstat.  */
-	    again = 1;
+	    again = true;
 	  break;
 	}
     }
+
+  /* Now that we have executed the commands of all bs, set the _hit_*
+     convenience variables to the printed values.  */
+  if (printed_hit_locno != -1)
+    set_hit_convenience_vars (printed_hit_bpnum, printed_hit_locno);
+
   return again;
 }
 
@@ -4421,11 +4891,11 @@ bpstat_do_actions_1 (bpstat *bsp)
 static thread_info *
 get_bpstat_thread ()
 {
-  if (inferior_ptid == null_ptid || !target_has_execution)
+  if (inferior_ptid == null_ptid || !target_has_execution ())
     return NULL;
 
   thread_info *tp = inferior_thread ();
-  if (tp->state == THREAD_EXITED || tp->executing)
+  if (tp->state == THREAD_EXITED || tp->executing ())
     return NULL;
   return tp;
 }
@@ -4478,13 +4948,12 @@ maybe_print_thread_hit_breakpoint (struc
 
   if (show_thread_that_caused_stop ())
     {
-      const char *name;
       struct thread_info *thr = inferior_thread ();
 
       uiout->text ("Thread ");
       uiout->field_string ("thread-id", print_thread_id (thr));
 
-      name = thr->name != NULL ? thr->name : target_thread_name (thr);
+      const char *name = thread_name (thr);
       if (name != NULL)
 	{
 	  uiout->text (" \"");
@@ -4503,20 +4972,18 @@ maybe_print_thread_hit_breakpoint (struc
    normal_stop().  */
 
 static enum print_stop_action
-print_bp_stop_message (bpstat bs)
+print_bp_stop_message (bpstat *bs)
 {
   switch (bs->print_it)
     {
     case print_it_noop:
       /* Nothing should be printed for this bpstat entry.  */
       return PRINT_UNKNOWN;
-      break;
 
     case print_it_done:
       /* We still want to print the frame, but we already printed the
-         relevant messages.  */
+	 relevant messages.  */
       return PRINT_SRC_AND_LOC;
-      break;
 
     case print_it_normal:
       {
@@ -4528,21 +4995,18 @@ print_bp_stop_message (bpstat bs)
 	  return PRINT_UNKNOWN;
 
 	/* Normal case.  Call the breakpoint's print_it method.  */
-	return b->ops->print_it (bs);
+	return b->print_it (bs);
       }
-      break;
 
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("print_bp_stop_message: unrecognized enum value"));
-      break;
+      internal_error (_("print_bp_stop_message: unrecognized enum value"));
     }
 }
 
-/* A helper function that prints a shared library stopped event.  */
+/* See breakpoint.h.  */
 
-static void
-print_solib_event (int is_catchpoint)
+void
+print_solib_event (bool is_catchpoint)
 {
   bool any_deleted = !current_program_space->deleted_solibs.empty ();
   bool any_added = !current_program_space->added_solibs.empty ();
@@ -4580,7 +5044,7 @@ print_solib_event (int is_catchpoint)
       current_uiout->text (_("  Inferior loaded "));
       ui_out_emit_list list_emitter (current_uiout, "added");
       bool first = true;
-      for (so_list *iter : current_program_space->added_solibs)
+      for (shobj *iter : current_program_space->added_solibs)
 	{
 	  if (!first)
 	    current_uiout->text ("    ");
@@ -4613,7 +5077,7 @@ print_solib_event (int is_catchpoint)
    further info to be printed.  */
 
 enum print_stop_action
-bpstat_print (bpstat bs, int kind)
+bpstat_print (bpstat *bs, target_waitkind kind)
 {
   enum print_stop_action val;
 
@@ -4625,7 +5089,7 @@ bpstat_print (bpstat bs, int kind)
     {
       val = print_bp_stop_message (bs);
       if (val == PRINT_SRC_ONLY 
-	  || val == PRINT_SRC_AND_LOC 
+	  || val == PRINT_SRC_AND_LOC
 	  || val == PRINT_NOTHING)
 	return val;
     }
@@ -4635,7 +5099,7 @@ bpstat_print (bpstat bs, int kind)
      OS-level shared library event, do the same thing.  */
   if (kind == TARGET_WAITKIND_LOADED)
     {
-      print_solib_event (0);
+      print_solib_event (false);
       return PRINT_NOTHING;
     }
 
@@ -4649,32 +5113,27 @@ bpstat_print (bpstat bs, int kind)
 static bool
 breakpoint_cond_eval (expression *exp)
 {
-  struct value *mark = value_mark ();
-  bool res = value_true (evaluate_expression (exp));
-
-  value_free_to_mark (mark);
-  return res;
+  scoped_value_mark mark;
+  return value_true (exp->evaluate ());
 }
 
 /* Allocate a new bpstat.  Link it to the FIFO list by BS_LINK_POINTER.  */
 
-bpstats::bpstats (struct bp_location *bl, bpstat **bs_link_pointer)
+bpstat::bpstat (struct bp_location *bl, bpstat ***bs_link_pointer)
   : next (NULL),
-    bp_location_at (bl),
+    bp_location_at (bp_location_ref_ptr::new_reference (bl)),
     breakpoint_at (bl->owner),
     commands (NULL),
     print (0),
     stop (0),
     print_it (print_it_normal)
 {
-  incref_bp_location (bl);
   **bs_link_pointer = this;
   *bs_link_pointer = &next;
 }
 
-bpstats::bpstats ()
+bpstat::bpstat ()
   : next (NULL),
-    bp_location_at (NULL),
     breakpoint_at (NULL),
     commands (NULL),
     print (0),
@@ -4687,37 +5146,36 @@ bpstats::bpstats ()
    watchpoints have triggered, according to the target.  */
 
 int
-watchpoints_triggered (struct target_waitstatus *ws)
+watchpoints_triggered (const target_waitstatus &ws)
 {
   bool stopped_by_watchpoint = target_stopped_by_watchpoint ();
   CORE_ADDR addr;
-  struct breakpoint *b;
 
   if (!stopped_by_watchpoint)
     {
       /* We were not stopped by a watchpoint.  Mark all watchpoints
 	 as not triggered.  */
-      ALL_BREAKPOINTS (b)
-	if (is_hardware_watchpoint (b))
+      for (breakpoint &b : all_breakpoints ())
+	if (is_hardware_watchpoint (&b))
 	  {
-	    struct watchpoint *w = (struct watchpoint *) b;
+	    watchpoint &w = gdb::checked_static_cast<watchpoint &> (b);
 
-	    w->watchpoint_triggered = watch_triggered_no;
+	    w.watchpoint_triggered = watch_triggered_no;
 	  }
 
       return 0;
     }
 
-  if (!target_stopped_data_address (current_top_target (), &addr))
+  if (!target_stopped_data_address (current_inferior ()->top_target (), &addr))
     {
       /* We were stopped by a watchpoint, but we don't know where.
 	 Mark all watchpoints as unknown.  */
-      ALL_BREAKPOINTS (b)
-	if (is_hardware_watchpoint (b))
+      for (breakpoint &b : all_breakpoints ())
+	if (is_hardware_watchpoint (&b))
 	  {
-	    struct watchpoint *w = (struct watchpoint *) b;
+	    watchpoint &w = gdb::checked_static_cast<watchpoint &> (b);
 
-	    w->watchpoint_triggered = watch_triggered_unknown;
+	    w.watchpoint_triggered = watch_triggered_unknown;
 	  }
 
       return 1;
@@ -4727,32 +5185,31 @@ watchpoints_triggered (struct target_wai
      affected by this data address as triggered, and all others as not
      triggered.  */
 
-  ALL_BREAKPOINTS (b)
-    if (is_hardware_watchpoint (b))
+  for (breakpoint &b : all_breakpoints ())
+    if (is_hardware_watchpoint (&b))
       {
-	struct watchpoint *w = (struct watchpoint *) b;
-	struct bp_location *loc;
+	watchpoint &w = gdb::checked_static_cast<watchpoint &> (b);
 
-	w->watchpoint_triggered = watch_triggered_no;
-	for (loc = b->loc; loc; loc = loc->next)
+	w.watchpoint_triggered = watch_triggered_no;
+	for (bp_location &loc : b.locations ())
 	  {
-	    if (is_masked_watchpoint (b))
+	    if (is_masked_watchpoint (&b))
 	      {
-		CORE_ADDR newaddr = addr & w->hw_wp_mask;
-		CORE_ADDR start = loc->address & w->hw_wp_mask;
+		CORE_ADDR newaddr = addr & w.hw_wp_mask;
+		CORE_ADDR start = loc.address & w.hw_wp_mask;
 
 		if (newaddr == start)
 		  {
-		    w->watchpoint_triggered = watch_triggered_yes;
+		    w.watchpoint_triggered = watch_triggered_yes;
 		    break;
 		  }
 	      }
 	    /* Exact match not required.  Within range is sufficient.  */
-	    else if (target_watchpoint_addr_within_range (current_top_target (),
-							 addr, loc->address,
-							 loc->length))
+	    else if (target_watchpoint_addr_within_range
+		       (current_inferior ()->top_target (), addr, loc.address,
+			loc.length))
 	      {
-		w->watchpoint_triggered = watch_triggered_yes;
+		w.watchpoint_triggered = watch_triggered_yes;
 		break;
 	      }
 	  }
@@ -4784,15 +5241,14 @@ enum wp_check_result
    changed.  */
 
 static wp_check_result
-watchpoint_check (bpstat bs)
+watchpoint_check (bpstat *bs)
 {
-  struct watchpoint *b;
-  struct frame_info *fr;
-  int within_current_scope;
+  frame_info_ptr fr;
+  bool within_current_scope;
 
   /* BS is built from an existing struct breakpoint.  */
   gdb_assert (bs->breakpoint_at != NULL);
-  b = (struct watchpoint *) bs->breakpoint_at;
+  watchpoint *b = gdb::checked_static_cast<watchpoint *> (bs->breakpoint_at);
 
   /* If this is a local watchpoint, we only want to check if the
      watchpoint frame is in scope if the current thread is the thread
@@ -4801,10 +5257,10 @@ watchpoint_check (bpstat bs)
     return WP_IGNORE;
 
   if (b->exp_valid_block == NULL)
-    within_current_scope = 1;
+    within_current_scope = true;
   else
     {
-      struct frame_info *frame = get_current_frame ();
+      frame_info_ptr frame = get_current_frame ();
       struct gdbarch *frame_arch = get_frame_arch (frame);
       CORE_ADDR frame_pc = get_frame_pc (frame);
 
@@ -4831,9 +5287,8 @@ watchpoint_check (bpstat bs)
 
 	  function = get_frame_function (fr);
 	  if (function == NULL
-	      || !contained_in (b->exp_valid_block,
-				SYMBOL_BLOCK_VALUE (function)))
-	    within_current_scope = 0;
+	      || !function->value_block ()->contains (b->exp_valid_block))
+	    within_current_scope = false;
 	}
 
       if (within_current_scope)
@@ -4846,11 +5301,10 @@ watchpoint_check (bpstat bs)
   if (within_current_scope)
     {
       /* We use value_{,free_to_}mark because it could be a *long*
-         time before we return to the command level and call
-         free_all_values.  We can't call free_all_values because we
-         might be in the middle of evaluating a function call.  */
+	 time before we return to the command level and call
+	 free_all_values.  We can't call free_all_values because we
+	 might be in the middle of evaluating a function call.  */
 
-      int pc = 0;
       struct value *mark;
       struct value *new_val;
 
@@ -4861,7 +5315,8 @@ watchpoint_check (bpstat bs)
 	return WP_VALUE_CHANGED;
 
       mark = value_mark ();
-      fetch_subexp_value (b->exp.get (), &pc, &new_val, NULL, NULL, 0);
+      fetch_subexp_value (b->exp.get (), b->exp->op.get (), &new_val,
+			  NULL, NULL, false);
 
       if (b->val_bitsize != 0)
 	new_val = extract_bitfield_from_watchpoint_value (b, new_val);
@@ -4891,21 +5346,21 @@ watchpoint_check (bpstat bs)
   else
     {
       /* This seems like the only logical thing to do because
-         if we temporarily ignored the watchpoint, then when
-         we reenter the block in which it is valid it contains
-         garbage (in the case of a function, it may have two
-         garbage values, one before and one after the prologue).
-         So we can't even detect the first assignment to it and
-         watch after that (since the garbage may or may not equal
-         the first value assigned).  */
+	 if we temporarily ignored the watchpoint, then when
+	 we reenter the block in which it is valid it contains
+	 garbage (in the case of a function, it may have two
+	 garbage values, one before and one after the prologue).
+	 So we can't even detect the first assignment to it and
+	 watch after that (since the garbage may or may not equal
+	 the first value assigned).  */
       /* We print all the stop information in
-	 breakpoint_ops->print_it, but in this case, by the time we
-	 call breakpoint_ops->print_it this bp will be deleted
+	 breakpointprint_it, but in this case, by the time we
+	 call breakpoint->print_it this bp will be deleted
 	 already.  So we have no choice but print the information
 	 here.  */
 
       SWITCH_THRU_ALL_UIS ()
-        {
+	{
 	  struct ui_out *uiout = current_uiout;
 
 	  if (uiout->is_mi_like_p ())
@@ -4929,185 +5384,179 @@ watchpoint_check (bpstat bs)
    breakpoint location BL.  This function does not check if we should
    stop, only if BL explains the stop.  */
 
-static int
+static bool
 bpstat_check_location (const struct bp_location *bl,
 		       const address_space *aspace, CORE_ADDR bp_addr,
-		       const struct target_waitstatus *ws)
+		       const target_waitstatus &ws)
 {
   struct breakpoint *b = bl->owner;
 
   /* BL is from an existing breakpoint.  */
   gdb_assert (b != NULL);
 
-  return b->ops->breakpoint_hit (bl, aspace, bp_addr, ws);
+  return b->breakpoint_hit (bl, aspace, bp_addr, ws);
 }
 
 /* Determine if the watched values have actually changed, and we
-   should stop.  If not, set BS->stop to 0.  */
+   should stop.  If not, set BS->stop to false.  */
 
 static void
-bpstat_check_watchpoint (bpstat bs)
+bpstat_check_watchpoint (bpstat *bs)
 {
   const struct bp_location *bl;
-  struct watchpoint *b;
 
   /* BS is built for existing struct breakpoint.  */
-  bl = bs->bp_location_at;
+  bl = bs->bp_location_at.get ();
   gdb_assert (bl != NULL);
-  b = (struct watchpoint *) bs->breakpoint_at;
-  gdb_assert (b != NULL);
+  watchpoint *b = gdb::checked_static_cast<watchpoint *> (bs->breakpoint_at);
+
+  bool must_check_value = false;
 
+  if (b->type == bp_watchpoint)
+    /* For a software watchpoint, we must always check the
+       watched value.  */
+    must_check_value = true;
+  else if (b->watchpoint_triggered == watch_triggered_yes)
+    /* We have a hardware watchpoint (read, write, or access)
+       and the target earlier reported an address watched by
+       this watchpoint.  */
+    must_check_value = true;
+  else if (b->watchpoint_triggered == watch_triggered_unknown
+	   && b->type == bp_hardware_watchpoint)
+    /* We were stopped by a hardware watchpoint, but the target could
+       not report the data address.  We must check the watchpoint's
+       value.  Access and read watchpoints are out of luck; without
+       a data address, we can't figure it out.  */
+    must_check_value = true;
+
+  if (must_check_value)
     {
-      int must_check_value = 0;
-      
-      if (b->type == bp_watchpoint)
-	/* For a software watchpoint, we must always check the
-	   watched value.  */
-	must_check_value = 1;
-      else if (b->watchpoint_triggered == watch_triggered_yes)
-	/* We have a hardware watchpoint (read, write, or access)
-	   and the target earlier reported an address watched by
-	   this watchpoint.  */
-	must_check_value = 1;
-      else if (b->watchpoint_triggered == watch_triggered_unknown
-	       && b->type == bp_hardware_watchpoint)
-	/* We were stopped by a hardware watchpoint, but the target could
-	   not report the data address.  We must check the watchpoint's
-	   value.  Access and read watchpoints are out of luck; without
-	   a data address, we can't figure it out.  */
-	must_check_value = 1;
+      wp_check_result e;
 
-      if (must_check_value)
+      try
+	{
+	  e = watchpoint_check (bs);
+	}
+      catch (const gdb_exception_error &ex)
 	{
-	  wp_check_result e;
+	  exception_fprintf (gdb_stderr, ex,
+			     "Error evaluating expression "
+			     "for watchpoint %d\n",
+			     b->number);
 
-	  try
+	  SWITCH_THRU_ALL_UIS ()
 	    {
-	      e = watchpoint_check (bs);
-	    }
-	  catch (const gdb_exception &ex)
-	    {
-	      exception_fprintf (gdb_stderr, ex,
-				 "Error evaluating expression "
-				 "for watchpoint %d\n",
-				 b->number);
-
-	      SWITCH_THRU_ALL_UIS ()
-		{
-		  printf_filtered (_("Watchpoint %d deleted.\n"),
-				   b->number);
-		}
-	      watchpoint_del_at_next_stop (b);
-	      e = WP_DELETED;
+	      gdb_printf (_("Watchpoint %d deleted.\n"),
+			  b->number);
 	    }
+	  watchpoint_del_at_next_stop (b);
+	  e = WP_DELETED;
+	}
 
-	  switch (e)
+      switch (e)
+	{
+	case WP_DELETED:
+	  /* We've already printed what needs to be printed.  */
+	  bs->print_it = print_it_done;
+	  /* Stop.  */
+	  break;
+	case WP_IGNORE:
+	  bs->print_it = print_it_noop;
+	  bs->stop = false;
+	  break;
+	case WP_VALUE_CHANGED:
+	  if (b->type == bp_read_watchpoint)
 	    {
-	    case WP_DELETED:
-	      /* We've already printed what needs to be printed.  */
-	      bs->print_it = print_it_done;
-	      /* Stop.  */
-	      break;
-	    case WP_IGNORE:
-	      bs->print_it = print_it_noop;
-	      bs->stop = 0;
-	      break;
-	    case WP_VALUE_CHANGED:
-	      if (b->type == bp_read_watchpoint)
-		{
-		  /* There are two cases to consider here:
+	      /* There are two cases to consider here:
 
-		     1. We're watching the triggered memory for reads.
-		     In that case, trust the target, and always report
-		     the watchpoint hit to the user.  Even though
-		     reads don't cause value changes, the value may
-		     have changed since the last time it was read, and
-		     since we're not trapping writes, we will not see
-		     those, and as such we should ignore our notion of
-		     old value.
-
-		     2. We're watching the triggered memory for both
-		     reads and writes.  There are two ways this may
-		     happen:
-
-		     2.1. This is a target that can't break on data
-		     reads only, but can break on accesses (reads or
-		     writes), such as e.g., x86.  We detect this case
-		     at the time we try to insert read watchpoints.
-
-		     2.2. Otherwise, the target supports read
-		     watchpoints, but, the user set an access or write
-		     watchpoint watching the same memory as this read
-		     watchpoint.
-
-		     If we're watching memory writes as well as reads,
-		     ignore watchpoint hits when we find that the
-		     value hasn't changed, as reads don't cause
-		     changes.  This still gives false positives when
-		     the program writes the same value to memory as
-		     what there was already in memory (we will confuse
-		     it for a read), but it's much better than
-		     nothing.  */
+		 1. We're watching the triggered memory for reads.
+		 In that case, trust the target, and always report
+		 the watchpoint hit to the user.  Even though
+		 reads don't cause value changes, the value may
+		 have changed since the last time it was read, and
+		 since we're not trapping writes, we will not see
+		 those, and as such we should ignore our notion of
+		 old value.
+
+		 2. We're watching the triggered memory for both
+		 reads and writes.  There are two ways this may
+		 happen:
+
+		 2.1. This is a target that can't break on data
+		 reads only, but can break on accesses (reads or
+		 writes), such as e.g., x86.  We detect this case
+		 at the time we try to insert read watchpoints.
+
+		 2.2. Otherwise, the target supports read
+		 watchpoints, but, the user set an access or write
+		 watchpoint watching the same memory as this read
+		 watchpoint.
+
+		 If we're watching memory writes as well as reads,
+		 ignore watchpoint hits when we find that the
+		 value hasn't changed, as reads don't cause
+		 changes.  This still gives false positives when
+		 the program writes the same value to memory as
+		 what there was already in memory (we will confuse
+		 it for a read), but it's much better than
+		 nothing.  */
 
-		  int other_write_watchpoint = 0;
+	      int other_write_watchpoint = 0;
 
-		  if (bl->watchpoint_type == hw_read)
-		    {
-		      struct breakpoint *other_b;
+	      if (bl->watchpoint_type == hw_read)
+		{
+		  for (breakpoint &other_b : all_breakpoints ())
+		    if (other_b.type == bp_hardware_watchpoint
+			|| other_b.type == bp_access_watchpoint)
+		      {
+			watchpoint &other_w =
+			  gdb::checked_static_cast<watchpoint &> (other_b);
 
-		      ALL_BREAKPOINTS (other_b)
-			if (other_b->type == bp_hardware_watchpoint
-			    || other_b->type == bp_access_watchpoint)
+			if (other_w.watchpoint_triggered
+			    == watch_triggered_yes)
 			  {
-			    struct watchpoint *other_w =
-			      (struct watchpoint *) other_b;
-
-			    if (other_w->watchpoint_triggered
-				== watch_triggered_yes)
-			      {
-				other_write_watchpoint = 1;
-				break;
-			      }
+			    other_write_watchpoint = 1;
+			    break;
 			  }
-		    }
-
-		  if (other_write_watchpoint
-		      || bl->watchpoint_type == hw_access)
-		    {
-		      /* We're watching the same memory for writes,
-			 and the value changed since the last time we
-			 updated it, so this trap must be for a write.
-			 Ignore it.  */
-		      bs->print_it = print_it_noop;
-		      bs->stop = 0;
-		    }
+		      }
 		}
-	      break;
-	    case WP_VALUE_NOT_CHANGED:
-	      if (b->type == bp_hardware_watchpoint
-		  || b->type == bp_watchpoint)
+
+	      if (other_write_watchpoint
+		  || bl->watchpoint_type == hw_access)
 		{
-		  /* Don't stop: write watchpoints shouldn't fire if
-		     the value hasn't changed.  */
+		  /* We're watching the same memory for writes,
+		     and the value changed since the last time we
+		     updated it, so this trap must be for a write.
+		     Ignore it.  */
 		  bs->print_it = print_it_noop;
-		  bs->stop = 0;
+		  bs->stop = false;
 		}
-	      /* Stop.  */
-	      break;
-	    default:
-	      /* Can't happen.  */
-	      break;
 	    }
+	  break;
+	case WP_VALUE_NOT_CHANGED:
+	  if (b->type == bp_hardware_watchpoint
+	      || b->type == bp_watchpoint)
+	    {
+	      /* Don't stop: write watchpoints shouldn't fire if
+		 the value hasn't changed.  */
+	      bs->print_it = print_it_noop;
+	      bs->stop = false;
+	    }
+	  /* Stop.  */
+	  break;
+	default:
+	  /* Can't happen.  */
+	  break;
 	}
-      else	/* must_check_value == 0 */
-	{
-	  /* This is a case where some watchpoint(s) triggered, but
-	     not at the address of this watchpoint, or else no
-	     watchpoint triggered after all.  So don't print
-	     anything for this watchpoint.  */
-	  bs->print_it = print_it_noop;
-	  bs->stop = 0;
-	}
+    }
+  else	/* !must_check_value */
+    {
+      /* This is a case where some watchpoint(s) triggered, but
+	 not at the address of this watchpoint, or else no
+	 watchpoint triggered after all.  So don't print
+	 anything for this watchpoint.  */
+      bs->print_it = print_it_noop;
+      bs->stop = false;
     }
 }
 
@@ -5117,8 +5566,10 @@ bpstat_check_watchpoint (bpstat bs)
    breakpoint, set BS->stop to 0.  */
 
 static void
-bpstat_check_breakpoint_conditions (bpstat bs, thread_info *thread)
+bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
 {
+  INFRUN_SCOPED_DEBUG_ENTER_EXIT;
+
   const struct bp_location *bl;
   struct breakpoint *b;
   /* Assume stop.  */
@@ -5128,19 +5579,26 @@ bpstat_check_breakpoint_conditions (bpst
   gdb_assert (bs->stop);
 
   /* BS is built for existing struct breakpoint.  */
-  bl = bs->bp_location_at;
+  bl = bs->bp_location_at.get ();
   gdb_assert (bl != NULL);
   b = bs->breakpoint_at;
   gdb_assert (b != NULL);
 
+  infrun_debug_printf ("thread = %s, breakpoint %d.%d",
+		       thread->ptid.to_string ().c_str (),
+		       b->number, find_loc_num_by_location (bl));
+
   /* Even if the target evaluated the condition on its end and notified GDB, we
      need to do so again since GDB does not know if we stopped due to a
      breakpoint or a single step breakpoint.  */
 
   if (frame_id_p (b->frame_id)
-      && !frame_id_eq (b->frame_id, get_stack_frame_id (get_current_frame ())))
+      && b->frame_id != get_stack_frame_id (get_current_frame ()))
     {
-      bs->stop = 0;
+      infrun_debug_printf ("incorrect frame %s not %s, not stopping",
+			   get_stack_frame_id (get_current_frame ()).to_string ().c_str (),
+			   b->frame_id.to_string ().c_str ());
+      bs->stop = false;
       return;
     }
 
@@ -5148,9 +5606,11 @@ bpstat_check_breakpoint_conditions (bpst
      evaluating the condition if this isn't the specified
      thread/task.  */
   if ((b->thread != -1 && b->thread != thread->global_num)
-      || (b->task != 0 && b->task != ada_get_task_number (thread)))
+      || (b->inferior != -1 && b->inferior != thread->inf->num)
+      || (b->task != -1 && b->task != ada_get_task_number (thread)))
     {
-      bs->stop = 0;
+      infrun_debug_printf ("incorrect thread or task, not stopping");
+      bs->stop = false;
       return;
     }
 
@@ -5160,29 +5620,26 @@ bpstat_check_breakpoint_conditions (bpst
 
   if (is_watchpoint (b))
     {
-      struct watchpoint *w = (struct watchpoint *) b;
+      watchpoint *w = gdb::checked_static_cast<watchpoint *> (b);
 
       cond = w->cond_exp.get ();
     }
   else
     cond = bl->cond.get ();
 
-  if (cond && b->disposition != disp_del_at_next_stop)
+  if (cond != nullptr && b->disposition != disp_del_at_next_stop)
     {
-      int within_current_scope = 1;
-      struct watchpoint * w;
+      bool within_current_scope = true;
 
-      /* We use value_mark and value_free_to_mark because it could
-	 be a long time before we return to the command level and
-	 call free_all_values.  We can't call free_all_values
-	 because we might be in the middle of evaluating a
-	 function call.  */
-      struct value *mark = value_mark ();
+      /* We use scoped_value_mark because it could be a long time
+	 before we return to the command level and call
+	 free_all_values.  We can't call free_all_values because we
+	 might be in the middle of evaluating a function call.  */
+      scoped_value_mark mark;
 
+      watchpoint *w = nullptr;
       if (is_watchpoint (b))
-	w = (struct watchpoint *) b;
-      else
-	w = NULL;
+	w = gdb::checked_static_cast<watchpoint *> (b);
 
       /* Need to select the frame, with all that implies so that
 	 the conditions will have the right context.  Because we
@@ -5194,7 +5651,7 @@ bpstat_check_breakpoint_conditions (bpst
 	select_frame (get_current_frame ());
       else
 	{
-	  struct frame_info *frame;
+	  frame_info_ptr frame;
 
 	  /* For local watchpoint expressions, which particular
 	     instance of a local is being watched matters, so we
@@ -5214,7 +5671,7 @@ bpstat_check_breakpoint_conditions (bpst
 	  if (frame != NULL)
 	    select_frame (frame);
 	  else
-	    within_current_scope = 0;
+	    within_current_scope = false;
 	}
       if (within_current_scope)
 	{
@@ -5222,10 +5679,19 @@ bpstat_check_breakpoint_conditions (bpst
 	    {
 	      condition_result = breakpoint_cond_eval (cond);
 	    }
-	  catch (const gdb_exception &ex)
+	  catch (const gdb_exception_error &ex)
 	    {
-	      exception_fprintf (gdb_stderr, ex,
-				 "Error in testing breakpoint condition:\n");
+	      int locno = bpstat_locno (bs);
+	      if (locno != 0)
+		exception_fprintf
+		  (gdb_stderr, ex,
+		   "Error in testing condition for breakpoint %d.%d:\n",
+		   b->number, locno);
+	      else
+		exception_fprintf
+		  (gdb_stderr, ex,
+		   "Error in testing condition for breakpoint %d:\n",
+		   b->number);
 	    }
 	}
       else
@@ -5236,28 +5702,37 @@ bpstat_check_breakpoint_conditions (bpst
 	     watchpoint, unconditionally report it.  */
 	}
       /* FIXME-someday, should give breakpoint #.  */
-      value_free_to_mark (mark);
     }
 
-  if (cond && !condition_result)
+  if (cond != nullptr && !condition_result)
     {
-      bs->stop = 0;
+      infrun_debug_printf ("condition_result = false, not stopping");
+      bs->stop = false;
+      return;
     }
   else if (b->ignore_count > 0)
     {
+      infrun_debug_printf ("ignore count %d, not stopping",
+			   b->ignore_count);
       b->ignore_count--;
-      bs->stop = 0;
+      bs->stop = false;
       /* Increase the hit count even though we don't stop.  */
       ++(b->hit_count);
-      gdb::observers::breakpoint_modified.notify (b);
-    }	
+      notify_breakpoint_modified (b);
+      return;
+    }
+
+  if (bs->stop)
+    infrun_debug_printf ("stopping at this breakpoint");
+  else
+    infrun_debug_printf ("not stopping at this breakpoint");
 }
 
 /* Returns true if we need to track moribund locations of LOC's type
    on the current target.  */
 
-static int
-need_moribund_for_location_type (struct bp_location *loc)
+static bool
+need_moribund_for_location_type (const struct bp_location *loc)
 {
   return ((loc->loc_type == bp_loc_software_breakpoint
 	   && !target_supports_stopped_by_sw_breakpoint ())
@@ -5267,53 +5742,53 @@ need_moribund_for_location_type (struct
 
 /* See breakpoint.h.  */
 
-bpstat
+bpstat *
 build_bpstat_chain (const address_space *aspace, CORE_ADDR bp_addr,
-		    const struct target_waitstatus *ws)
+		    const target_waitstatus &ws)
 {
-  struct breakpoint *b;
-  bpstat bs_head = NULL, *bs_link = &bs_head;
+  bpstat *bs_head = nullptr, **bs_link = &bs_head;
 
-  ALL_BREAKPOINTS (b)
+  for (breakpoint &b : all_breakpoints ())
     {
-      if (!breakpoint_enabled (b))
+      if (!breakpoint_enabled (&b))
 	continue;
 
-      for (bp_location *bl = b->loc; bl != NULL; bl = bl->next)
+      for (bp_location &bl : b.locations ())
 	{
 	  /* For hardware watchpoints, we look only at the first
 	     location.  The watchpoint_check function will work on the
 	     entire expression, not the individual locations.  For
 	     read watchpoints, the watchpoints_triggered function has
 	     checked all locations already.  */
-	  if (b->type == bp_hardware_watchpoint && bl != b->loc)
+	  if (b.type == bp_hardware_watchpoint && &bl != &b.first_loc ())
 	    break;
 
-	  if (!bl->enabled || bl->shlib_disabled)
+	  if (!bl.enabled || bl.disabled_by_cond || bl.shlib_disabled)
 	    continue;
 
-	  if (!bpstat_check_location (bl, aspace, bp_addr, ws))
+	  if (!bpstat_check_location (&bl, aspace, bp_addr, ws))
 	    continue;
 
 	  /* Come here if it's a watchpoint, or if the break address
 	     matches.  */
 
-	  bpstat bs = new bpstats (bl, &bs_link);	/* Alloc a bpstat to
+	  bpstat *bs = new bpstat (&bl, &bs_link);	/* Alloc a bpstat to
 							   explain stop.  */
 
 	  /* Assume we stop.  Should we find a watchpoint that is not
 	     actually triggered, or if the condition of the breakpoint
 	     evaluates as false, we'll reset 'stop' to 0.  */
-	  bs->stop = 1;
-	  bs->print = 1;
+	  bs->stop = true;
+	  bs->print = true;
 
 	  /* If this is a scope breakpoint, mark the associated
 	     watchpoint as triggered so that we will handle the
 	     out-of-scope event.  We'll get to the watchpoint next
 	     iteration.  */
-	  if (b->type == bp_watchpoint_scope && b->related_breakpoint != b)
+	  if (b.type == bp_watchpoint_scope && b.related_breakpoint != &b)
 	    {
-	      struct watchpoint *w = (struct watchpoint *) b->related_breakpoint;
+	      watchpoint *w
+		= gdb::checked_static_cast<watchpoint *> (b.related_breakpoint);
 
 	      w->watchpoint_triggered = watch_triggered_yes;
 	    }
@@ -5329,10 +5804,10 @@ build_bpstat_chain (const address_space
 	  if (breakpoint_location_address_match (loc, aspace, bp_addr)
 	      && need_moribund_for_location_type (loc))
 	    {
-	      bpstat bs = new bpstats (loc, &bs_link);
+	      bpstat *bs = new bpstat (loc, &bs_link);
 	      /* For hits of moribund locations, we should just proceed.  */
-	      bs->stop = 0;
-	      bs->print = 0;
+	      bs->stop = false;
+	      bs->print = false;
 	      bs->print_it = print_it_noop;
 	    }
 	}
@@ -5343,16 +5818,16 @@ build_bpstat_chain (const address_space
 
 /* See breakpoint.h.  */
 
-bpstat
+bpstat *
 bpstat_stop_status (const address_space *aspace,
 		    CORE_ADDR bp_addr, thread_info *thread,
-		    const struct target_waitstatus *ws,
-		    bpstat stop_chain)
+		    const target_waitstatus &ws,
+		    bpstat *stop_chain)
 {
   struct breakpoint *b = NULL;
   /* First item of allocated bpstat's.  */
-  bpstat bs_head = stop_chain;
-  bpstat bs;
+  bpstat *bs_head = stop_chain;
+  bpstat *bs;
   int need_remove_insert;
   int removed_any;
 
@@ -5390,7 +5865,7 @@ bpstat_stop_status (const address_space
 	continue;
 
       b = bs->breakpoint_at;
-      b->ops->check_status (bs);
+      b->check_status (bs);
       if (bs->stop)
 	{
 	  bpstat_check_breakpoint_conditions (bs, thread);
@@ -5398,7 +5873,6 @@ bpstat_stop_status (const address_space
 	  if (bs->stop)
 	    {
 	      ++(b->hit_count);
-	      gdb::observers::breakpoint_modified.notify (b);
 
 	      /* We will stop here.  */
 	      if (b->disposition == disp_disable)
@@ -5408,14 +5882,15 @@ bpstat_stop_status (const address_space
 		    b->enable_state = bp_disabled;
 		  removed_any = 1;
 		}
+	      notify_breakpoint_modified (b);
 	      if (b->silent)
-		bs->print = 0;
+		bs->print = false;
 	      bs->commands = b->commands;
 	      if (command_line_is_silent (bs->commands
 					  ? bs->commands.get () : NULL))
-		bs->print = 0;
+		bs->print = false;
 
-	      b->ops->after_condition_true (bs);
+	      b->after_condition_true (bs);
 	    }
 
 	}
@@ -5437,9 +5912,10 @@ bpstat_stop_status (const address_space
 	  && bs->breakpoint_at
 	  && is_hardware_watchpoint (bs->breakpoint_at))
 	{
-	  struct watchpoint *w = (struct watchpoint *) bs->breakpoint_at;
+	  watchpoint *w
+	    = gdb::checked_static_cast<watchpoint *> (bs->breakpoint_at);
 
-	  update_watchpoint (w, 0 /* don't reparse.  */);
+	  update_watchpoint (w, false /* don't reparse.  */);
 	  need_remove_insert = 1;
 	}
 
@@ -5451,23 +5927,44 @@ bpstat_stop_status (const address_space
   return bs_head;
 }
 
+/* See breakpoint.h.  */
+
+bpstat *
+bpstat_stop_status_nowatch (const address_space *aspace, CORE_ADDR bp_addr,
+			    thread_info *thread, const target_waitstatus &ws)
+{
+  gdb_assert (!target_stopped_by_watchpoint ());
+
+  /* Clear all watchpoints' 'watchpoint_triggered' value from a
+     previous stop to avoid confusing bpstat_stop_status.  */
+  watchpoints_triggered (ws);
+
+  return bpstat_stop_status (aspace, bp_addr, thread, ws);
+}
+
 static void
-handle_jit_event (void)
+handle_jit_event (CORE_ADDR address)
 {
-  struct frame_info *frame;
   struct gdbarch *gdbarch;
 
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog, "handling bp_jit_event\n");
+  infrun_debug_printf ("handling bp_jit_event");
 
   /* Switch terminal for any messages produced by
      breakpoint_re_set.  */
   target_terminal::ours_for_output ();
 
-  frame = get_current_frame ();
-  gdbarch = get_frame_arch (frame);
-
-  jit_event_handler (gdbarch);
+  gdbarch = get_frame_arch (get_current_frame ());
+  /* This event is caused by a breakpoint set in `jit_breakpoint_re_set`,
+     thus it is expected that its objectfile can be found through
+     minimal symbol lookup.  If it doesn't work (and assert fails), it
+     most likely means that `jit_breakpoint_re_set` was changes and this
+     function needs to be updated too.  */
+  bound_minimal_symbol jit_bp_sym = lookup_minimal_symbol_by_pc (address);
+  gdb_assert (jit_bp_sym.objfile != nullptr);
+  objfile *objfile = jit_bp_sym.objfile;
+  if (objfile->separate_debug_objfile_backlink)
+    objfile = objfile->separate_debug_objfile_backlink;
+  jit_event_handler (gdbarch, objfile);
 
   target_terminal::inferior ();
 }
@@ -5477,10 +5974,10 @@ handle_jit_event (void)
 /* Decide what infrun needs to do with this bpstat.  */
 
 struct bpstat_what
-bpstat_what (bpstat bs_head)
+bpstat_what (bpstat *bs_head)
 {
   struct bpstat_what retval;
-  bpstat bs;
+  bpstat *bs;
 
   retval.main_action = BPSTAT_WHAT_KEEP_CHECKING;
   retval.call_dummy = STOP_NONE;
@@ -5598,7 +6095,8 @@ bpstat_what (bpstat bs_head)
 	    {
 	      /* Some catchpoints are implemented with breakpoints.
 		 For those, we need to step over the breakpoint.  */
-	      if (bs->bp_location_at->loc_type != bp_loc_other)
+	      if (bs->bp_location_at->loc_type == bp_loc_software_breakpoint
+		  || bs->bp_location_at->loc_type == bp_loc_hardware_breakpoint)
 		this_action = BPSTAT_WHAT_SINGLE;
 	    }
 	  break;
@@ -5620,11 +6118,11 @@ bpstat_what (bpstat bs_head)
 	case bp_tracepoint:
 	case bp_fast_tracepoint:
 	case bp_static_tracepoint:
+	case bp_static_marker_tracepoint:
 	  /* Tracepoint hits should not be reported back to GDB, and
 	     if one got through somehow, it should have been filtered
 	     out already.  */
-	  internal_error (__FILE__, __LINE__,
-			  _("bpstat_what: tracepoint encountered"));
+	  internal_error (_("bpstat_what: tracepoint encountered"));
 	  break;
 	case bp_gnu_ifunc_resolver:
 	  /* Step over it (and insert bp_gnu_ifunc_resolver_return).  */
@@ -5644,8 +6142,7 @@ bpstat_what (bpstat bs_head)
 	  break;
 
 	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("bpstat_what: unhandled bptype %d"), (int) bptype);
+	  internal_error (_("bpstat_what: unhandled bptype %d"), (int) bptype);
 	}
 
       retval.main_action = std::max (retval.main_action, this_action);
@@ -5655,9 +6152,9 @@ bpstat_what (bpstat bs_head)
 }
 
 void
-bpstat_run_callbacks (bpstat bs_head)
+bpstat_run_callbacks (bpstat *bs_head)
 {
-  bpstat bs;
+  bpstat *bs;
 
   for (bs = bs_head; bs != NULL; bs = bs->next)
     {
@@ -5668,13 +6165,15 @@ bpstat_run_callbacks (bpstat bs_head)
       switch (b->type)
 	{
 	case bp_jit_event:
-	  handle_jit_event ();
+	  handle_jit_event (bs->bp_location_at->address);
 	  break;
 	case bp_gnu_ifunc_resolver:
-	  gnu_ifunc_resolver_stop (b);
+	  gnu_ifunc_resolver_stop
+	    (gdb::checked_static_cast<code_breakpoint *> (b));
 	  break;
 	case bp_gnu_ifunc_resolver_return:
-	  gnu_ifunc_resolver_return_stop (b);
+	  gnu_ifunc_resolver_return_stop
+	    (gdb::checked_static_cast<code_breakpoint *> (b));
 	  break;
 	}
     }
@@ -5685,18 +6184,19 @@ bpstat_run_callbacks (bpstat bs_head)
 bool
 bpstat_should_step ()
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-    if (breakpoint_enabled (b) && b->type == bp_watchpoint && b->loc != NULL)
+  for (breakpoint &b : all_breakpoints ())
+    if (breakpoint_enabled (&b)
+	&& b.type == bp_watchpoint
+	&& b.has_locations ())
       return true;
+
   return false;
 }
 
 /* See breakpoint.h.  */
 
 bool
-bpstat_causes_stop (bpstat bs)
+bpstat_causes_stop (bpstat *bs)
 {
   for (; bs != NULL; bs = bs->next)
     if (bs->stop)
@@ -5707,14 +6207,13 @@ bpstat_causes_stop (bpstat bs)
 
 
 
-/* Compute a string of spaces suitable to indent the next line
+/* Compute a number of spaces suitable to indent the next line
    so it starts at the position corresponding to the table column
    named COL_NAME in the currently active table of UIOUT.  */
 
-static char *
+static int
 wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
 {
-  static char wrap_indent[80];
   int i, total_width, width, align;
   const char *text;
 
@@ -5722,18 +6221,12 @@ wrap_indent_at_field (struct ui_out *uio
   for (i = 1; uiout->query_table_field (i, &width, &align, &text); i++)
     {
       if (strcmp (text, col_name) == 0)
-	{
-	  gdb_assert (total_width < sizeof wrap_indent);
-	  memset (wrap_indent, ' ', total_width);
-	  wrap_indent[total_width] = 0;
-
-	  return wrap_indent;
-	}
+	return total_width;
 
       total_width += width + 1;
     }
 
-  return NULL;
+  return 0;
 }
 
 /* Determine if the locations of this breakpoint will have their conditions
@@ -5745,9 +6238,8 @@ wrap_indent_at_field (struct ui_out *uio
 */
 
 static const char *
-bp_condition_evaluator (struct breakpoint *b)
+bp_condition_evaluator (const breakpoint *b)
 {
-  struct bp_location *bl;
   char host_evals = 0;
   char target_evals = 0;
 
@@ -5761,9 +6253,9 @@ bp_condition_evaluator (struct breakpoin
       || !target_supports_evaluation_of_breakpoint_conditions ())
     return condition_evaluation_host;
 
-  for (bl = b->loc; bl; bl = bl->next)
+  for (bp_location &bl : b->locations ())
     {
-      if (bl->cond_bytecode)
+      if (bl.cond_bytecode)
 	target_evals++;
       else
 	host_evals++;
@@ -5781,7 +6273,7 @@ bp_condition_evaluator (struct breakpoin
    similar to bp_condition_evaluator, but for locations.  */
 
 static const char *
-bp_location_condition_evaluator (struct bp_location *bl)
+bp_location_condition_evaluator (const struct bp_location *bl)
 {
   if (bl && !is_breakpoint (bl->owner))
     return NULL;
@@ -5799,8 +6291,7 @@ bp_location_condition_evaluator (struct
 /* Print the LOC location out of the list of B->LOC locations.  */
 
 static void
-print_breakpoint_location (struct breakpoint *b,
-			   struct bp_location *loc)
+print_breakpoint_location (const breakpoint *b, const bp_location *loc)
 {
   struct ui_out *uiout = current_uiout;
 
@@ -5813,7 +6304,7 @@ print_breakpoint_location (struct breakp
     set_current_program_space (loc->pspace);
 
   if (b->display_canonical)
-    uiout->field_string ("what", event_location_to_string (b->location.get ()));
+    uiout->field_string ("what", b->locspec->to_string ());
   else if (loc && loc->symtab)
     {
       const struct symbol *sym = loc->symbol;
@@ -5847,8 +6338,7 @@ print_breakpoint_location (struct breakp
     }
   else
     {
-      uiout->field_string ("pending",
-			   event_location_to_string (b->location.get ()));
+      uiout->field_string ("pending", b->locspec->to_string ());
       /* If extra_string is available, it could be holding a condition
 	 or dprintf arguments.  In either case, make sure it is printed,
 	 too, but only for non-MI streams.  */
@@ -5858,7 +6348,7 @@ print_breakpoint_location (struct breakp
 	    uiout->text (",");
 	  else
 	    uiout->text (" ");
-	  uiout->text (b->extra_string);
+	  uiout->text (b->extra_string.get ());
 	}
     }
 
@@ -5913,6 +6403,7 @@ bptype_string (enum bptype type)
     {bp_tracepoint, "tracepoint"},
     {bp_fast_tracepoint, "fast tracepoint"},
     {bp_static_tracepoint, "static tracepoint"},
+    {bp_static_marker_tracepoint, "static marker tracepoint"},
     {bp_dprintf, "dprintf"},
     {bp_jit_event, "jit events"},
     {bp_gnu_ifunc_resolver, "STT_GNU_IFUNC resolver"},
@@ -5921,8 +6412,7 @@ bptype_string (enum bptype type)
 
   if (((int) type >= (sizeof (bptypes) / sizeof (bptypes[0])))
       || ((int) type != bptypes[(int) type].type))
-    internal_error (__FILE__, __LINE__,
-		    _("bptypes table does not describe type #%d."),
+    internal_error (_("bptypes table does not describe type #%d."),
 		    (int) type);
 
   return bptypes[(int) type].description;
@@ -5967,25 +6457,30 @@ output_thread_groups (struct ui_out *uio
     }
 }
 
+/* See breakpoint.h. */
+
+bool fix_breakpoint_script_output_globally = false;
+
 /* Print B to gdb_stdout.  If RAW_LOC, print raw breakpoint locations
    instead of going via breakpoint_ops::print_one.  This makes "maint
    info breakpoints" show the software breakpoint locations of
    catchpoints, which are considered internal implementation
-   detail.  */
+   detail.  Returns true if RAW_LOC is false and if the breakpoint's
+   print_one method did something; false otherwise.  */
 
-static void
+static bool
 print_one_breakpoint_location (struct breakpoint *b,
 			       struct bp_location *loc,
 			       int loc_number,
-			       struct bp_location **last_loc,
+			       const bp_location **last_loc,
 			       int allflag, bool raw_loc)
 {
   struct command_line *l;
   static char bpenables[] = "nynny";
 
   struct ui_out *uiout = current_uiout;
-  int header_of_multiple = 0;
-  int part_of_multiple = (loc != NULL);
+  bool header_of_multiple = false;
+  bool part_of_multiple = (loc != NULL);
   struct value_print_options opts;
 
   get_user_print_options (&opts);
@@ -5994,11 +6489,13 @@ print_one_breakpoint_location (struct br
   /* See comment in print_one_breakpoint concerning treatment of
      breakpoints with single disabled location.  */
   if (loc == NULL 
-      && (b->loc != NULL 
-	  && (b->loc->next != NULL || !b->loc->enabled)))
-    header_of_multiple = 1;
-  if (loc == NULL)
-    loc = b->loc;
+      && (b->has_locations ()
+	  && (b->has_multiple_locations ()
+	      || !b->first_loc ().enabled || b->first_loc ().disabled_by_cond)))
+    header_of_multiple = true;
+
+  if (loc == NULL && b->has_locations ())
+    loc = &b->first_loc ();
 
   annotate_record ();
 
@@ -6026,18 +6523,49 @@ print_one_breakpoint_location (struct br
   /* 4 */
   annotate_field (3);
   if (part_of_multiple)
-    uiout->field_string ("enabled", loc->enabled ? "y" : "n");
+    {
+      /* For locations that are disabled because of an invalid
+	 condition, display "N*" on the CLI, where "*" refers to a
+	 footnote below the table.  For MI, simply display a "N"
+	 without a footnote.  On the CLI, for enabled locations whose
+	 breakpoint is disabled, display "y-".  */
+      auto get_enable_state = [uiout, loc] () -> const char *
+	{
+	  if (uiout->is_mi_like_p ())
+	    {
+	      if (loc->disabled_by_cond)
+		return "N";
+	      else if (!loc->enabled)
+		return "n";
+	      else
+		return "y";
+	    }
+	  else
+	    {
+	      if (loc->disabled_by_cond)
+		return "N*";
+	      else if (!loc->enabled)
+		return "n";
+	      else if (!breakpoint_enabled (loc->owner))
+		return "y-";
+	      else
+		return "y";
+	    }
+	};
+      uiout->field_string ("enabled", get_enable_state ());
+    }
   else
     uiout->field_fmt ("enabled", "%c", bpenables[(int) b->enable_state]);
 
   /* 5 and 6 */
-  if (!raw_loc && b->ops != NULL && b->ops->print_one != NULL)
-    b->ops->print_one (b, last_loc);
+  bool result = false;
+  if (!raw_loc && b->print_one (last_loc))
+    result = true;
   else
     {
       if (is_watchpoint (b))
 	{
-	  struct watchpoint *w = (struct watchpoint *) b;
+	  watchpoint *w = gdb::checked_static_cast<watchpoint *> (b);
 
 	  /* Field 4, the address, is omitted (which makes the columns
 	     not line up too nicely with the headers, but the effect
@@ -6045,7 +6573,7 @@ print_one_breakpoint_location (struct br
 	  if (opts.addressprint)
 	    uiout->field_skip ("addr");
 	  annotate_field (5);
-	  uiout->field_string ("what", w->exp_string);
+	  uiout->field_string ("what", w->exp_string.get ());
 	}
       else if (!is_catchpoint (b) || is_exception_catchpoint (b)
 	       || is_ada_exception_catchpoint (b))
@@ -6056,7 +6584,7 @@ print_one_breakpoint_location (struct br
 	      if (header_of_multiple)
 		uiout->field_string ("addr", "<MULTIPLE>",
 				     metadata_style.style ());
-	      else if (b->loc == NULL || loc->shlib_disabled)
+	      else if (!b->has_locations () || loc->shlib_disabled)
 		uiout->field_string ("addr", "<PENDING>",
 				     metadata_style.style ());
 	      else
@@ -6066,8 +6594,8 @@ print_one_breakpoint_location (struct br
 	  annotate_field (5);
 	  if (!header_of_multiple)
 	    print_breakpoint_location (b, loc);
-	  if (b->loc)
-	    *last_loc = b->loc;
+	  if (b->has_locations ())
+	    *last_loc = &b->first_loc ();
 	}
     }
 
@@ -6082,46 +6610,47 @@ print_one_breakpoint_location (struct br
 	    inf_nums.push_back (inf->num);
 	}
 
-        /* For backward compatibility, don't display inferiors in CLI unless
-	   there are several.  Always display for MI. */
-	if (allflag
-	    || (!gdbarch_has_global_breakpoints (target_gdbarch ())
-		&& (number_of_program_spaces () > 1
-		    || number_of_inferiors () > 1)
-		/* LOC is for existing B, it cannot be in
-		   moribund_locations and thus having NULL OWNER.  */
-		&& loc->owner->type != bp_catchpoint))
+      /* For backward compatibility, don't display inferiors in CLI unless
+	 there are several.  Always display for MI. */
+      if (allflag
+	  || (!gdbarch_has_global_breakpoints (current_inferior ()->arch ())
+	      && (program_spaces.size () > 1
+		  || number_of_inferiors () > 1)
+	      /* LOC is for existing B, it cannot be in
+		 moribund_locations and thus having NULL OWNER.  */
+	      && loc->owner->type != bp_catchpoint))
 	mi_only = 0;
       output_thread_groups (uiout, "thread-groups", inf_nums, mi_only);
     }
 
-  if (!part_of_multiple)
+  /* In the MI output, each location of a thread or task specific
+     breakpoint includes the relevant thread or task ID.  This is done for
+     backwards compatibility reasons.
+
+     For the CLI output, the thread/task information is printed on a
+     separate line, see the 'stop only in thread' and 'stop only in task'
+     output below.  */
+  if (part_of_multiple && uiout->is_mi_like_p ())
     {
       if (b->thread != -1)
-	{
-	  /* FIXME: This seems to be redundant and lost here; see the
-	     "stop only in" line a little further down.  */
-	  uiout->text (" thread ");
-	  uiout->field_signed ("thread", b->thread);
-	}
-      else if (b->task != 0)
-	{
-	  uiout->text (" task ");
-	  uiout->field_signed ("task", b->task);
-	}
+	uiout->field_signed ("thread", b->thread);
+      else if (b->task != -1)
+	uiout->field_signed ("task", b->task);
+      else if (b->inferior != -1)
+	uiout->field_signed ("inferior", b->inferior);
     }
 
   uiout->text ("\n");
 
   if (!part_of_multiple)
-    b->ops->print_one_detail (b, uiout);
+    b->print_one_detail (uiout);
 
   if (part_of_multiple && frame_id_p (b->frame_id))
     {
       annotate_field (6);
       uiout->text ("\tstop only in stack frame at ");
       /* FIXME: cagney/2002-12-01: Shouldn't be poking around inside
-         the frame ID.  */
+	 the frame ID.  */
       uiout->field_core_addr ("frame",
 			      b->gdbarch, b->frame_id.stack_addr);
       uiout->text ("\n");
@@ -6134,7 +6663,7 @@ print_one_breakpoint_location (struct br
 	uiout->text ("\ttrace only if ");
       else
 	uiout->text ("\tstop only if ");
-      uiout->field_string ("cond", b->cond_string);
+      uiout->field_string ("cond", b->cond_string.get ());
 
       /* Print whether the target is doing the breakpoint's condition
 	 evaluation.  If GDB is doing the evaluation, don't print anything.  */
@@ -6163,7 +6692,21 @@ print_one_breakpoint_location (struct br
 	}
       uiout->text ("\n");
     }
-  
+
+  if (!part_of_multiple && b->task != -1)
+    {
+      uiout->text ("\tstop only in task ");
+      uiout->field_signed ("task", b->task);
+      uiout->text ("\n");
+    }
+
+  if (!part_of_multiple && b->inferior != -1)
+    {
+      uiout->text ("\tstop only in inferior ");
+      uiout->field_signed ("inferior", b->inferior);
+      uiout->text ("\n");
+    }
+
   if (!part_of_multiple)
     {
       if (b->hit_count)
@@ -6216,7 +6759,7 @@ print_one_breakpoint_location (struct br
 
   if (!part_of_multiple && is_tracepoint (b))
     {
-      struct tracepoint *tp = (struct tracepoint *) b;
+      tracepoint *tp = gdb::checked_static_cast<tracepoint *> (b);
 
       if (tp->traceframe_usage)
 	{
@@ -6230,13 +6773,25 @@ print_one_breakpoint_location (struct br
   if (!part_of_multiple && l)
     {
       annotate_field (9);
-      ui_out_emit_tuple tuple_emitter (uiout, "script");
+
+      bool use_fixed_output =
+	(uiout->test_flags (fix_breakpoint_script_output)
+	 || fix_breakpoint_script_output_globally);
+
+      std::optional<ui_out_emit_tuple> tuple_emitter;
+      std::optional<ui_out_emit_list> list_emitter;
+
+      if (use_fixed_output)
+	list_emitter.emplace (uiout, "script");
+      else
+	tuple_emitter.emplace (uiout, "script");
+
       print_command_lines (uiout, l, 4);
     }
 
   if (is_tracepoint (b))
     {
-      struct tracepoint *t = (struct tracepoint *) b;
+      tracepoint *t = gdb::checked_static_cast<tracepoint *> (b);
 
       if (!part_of_multiple && t->pass_count)
 	{
@@ -6270,15 +6825,19 @@ print_one_breakpoint_location (struct br
     {
       if (is_watchpoint (b))
 	{
-	  struct watchpoint *w = (struct watchpoint *) b;
+	  watchpoint *w = gdb::checked_static_cast<watchpoint *> (b);
 
-	  uiout->field_string ("original-location", w->exp_string);
+	  uiout->field_string ("original-location", w->exp_string.get ());
+	}
+      else if (b->locspec != nullptr)
+	{
+	  const char *str = b->locspec->to_string ();
+	  if (str != nullptr)
+	    uiout->field_string ("original-location", str);
 	}
-      else if (b->location != NULL
-	       && event_location_to_string (b->location.get ()) != NULL)
-	uiout->field_string ("original-location",
-			     event_location_to_string (b->location.get ()));
     }
+
+  return result;
 }
 
 /* See breakpoint.h. */
@@ -6286,17 +6845,17 @@ print_one_breakpoint_location (struct br
 bool fix_multi_location_breakpoint_output_globally = false;
 
 static void
-print_one_breakpoint (struct breakpoint *b,
-		      struct bp_location **last_loc, 
-		      int allflag)
+print_one_breakpoint (breakpoint *b, const bp_location **last_loc, int allflag)
 {
   struct ui_out *uiout = current_uiout;
   bool use_fixed_output
     = (uiout->test_flags (fix_multi_location_breakpoint_output)
        || fix_multi_location_breakpoint_output_globally);
 
-  gdb::optional<ui_out_emit_tuple> bkpt_tuple_emitter (gdb::in_place, uiout, "bkpt");
-  print_one_breakpoint_location (b, NULL, 0, last_loc, allflag, false);
+  std::optional<ui_out_emit_tuple> bkpt_tuple_emitter (std::in_place, uiout,
+						       "bkpt");
+  bool printed = print_one_breakpoint_location (b, NULL, 0, last_loc,
+						allflag, false);
 
   /* The mi2 broken format: the main breakpoint tuple ends here, the locations
      are outside.  */
@@ -6306,9 +6865,7 @@ print_one_breakpoint (struct breakpoint
   /* If this breakpoint has custom print function,
      it's already printed.  Otherwise, print individual
      locations, if any.  */
-  if (b->ops == NULL
-      || b->ops->print_one == NULL
-      || allflag)
+  if (!printed || allflag)
     {
       /* If breakpoint has a single location that is disabled, we
 	 print it as if it had several locations, since otherwise it's
@@ -6326,9 +6883,12 @@ print_one_breakpoint (struct breakpoint
 	  && (!is_catchpoint (b) || is_exception_catchpoint (b)
 	      || is_ada_exception_catchpoint (b))
 	  && (allflag
-	      || (b->loc && (b->loc->next || !b->loc->enabled))))
+	      || (b->has_locations ()
+		  && (b->has_multiple_locations ()
+		      || !b->first_loc ().enabled
+		      || b->first_loc ().disabled_by_cond))))
 	{
-	  gdb::optional<ui_out_emit_list> locations_list;
+	  std::optional<ui_out_emit_list> locations_list;
 
 	  /* For MI version <= 2, keep the behavior where GDB outputs an invalid
 	     MI record.  For later versions, place breakpoint locations in a
@@ -6337,11 +6897,12 @@ print_one_breakpoint (struct breakpoint
 	    locations_list.emplace (uiout, "locations");
 
 	  int n = 1;
-	  for (bp_location *loc = b->loc; loc != NULL; loc = loc->next, ++n)
+	  for (bp_location &loc : b->locations ())
 	    {
 	      ui_out_emit_tuple loc_tuple_emitter (uiout, NULL);
-	      print_one_breakpoint_location (b, loc, n, last_loc,
+	      print_one_breakpoint_location (b, &loc, n, last_loc,
 					     allflag, allflag);
+	      n++;
 	    }
 	}
     }
@@ -6351,18 +6912,13 @@ static int
 breakpoint_address_bits (struct breakpoint *b)
 {
   int print_address_bits = 0;
-  struct bp_location *loc;
 
-  /* Software watchpoints that aren't watching memory don't have an
-     address to print.  */
-  if (is_no_memory_software_watchpoint (b))
-    return 0;
-
-  for (loc = b->loc; loc; loc = loc->next)
+  for (bp_location &loc : b->locations ())
     {
-      int addr_bit;
+      if (!bl_address_is_meaningful (&loc))
+	continue;
 
-      addr_bit = gdbarch_addr_bit (loc->gdbarch);
+      int addr_bit = gdbarch_addr_bit (loc.gdbarch);
       if (addr_bit > print_address_bits)
 	print_address_bits = addr_bit;
     }
@@ -6375,7 +6931,7 @@ breakpoint_address_bits (struct breakpoi
 void
 print_breakpoint (breakpoint *b)
 {
-  struct bp_location *dummy_loc = NULL;
+  const bp_location *dummy_loc = nullptr;
   print_one_breakpoint (b, &dummy_loc, 0);
 }
 
@@ -6393,7 +6949,7 @@ user_breakpoint_p (struct breakpoint *b)
 int
 pending_breakpoint_p (struct breakpoint *b)
 {
-  return b->loc == NULL;
+  return !b->has_locations ();
 }
 
 /* Print information on breakpoints (including watchpoints and tracepoints).
@@ -6413,44 +6969,44 @@ static int
 breakpoint_1 (const char *bp_num_list, bool show_internal,
 	      bool (*filter) (const struct breakpoint *))
 {
-  struct breakpoint *b;
-  struct bp_location *last_loc = NULL;
+  const bp_location *last_loc = nullptr;
   int nr_printable_breakpoints;
   struct value_print_options opts;
   int print_address_bits = 0;
   int print_type_col_width = 14;
   struct ui_out *uiout = current_uiout;
+  bool has_disabled_by_cond_location = false;
 
   get_user_print_options (&opts);
 
   /* Compute the number of rows in the table, as well as the size
      required for address fields.  */
   nr_printable_breakpoints = 0;
-  ALL_BREAKPOINTS (b)
+  for (breakpoint &b : all_breakpoints ())
     {
       /* If we have a filter, only list the breakpoints it accepts.  */
-      if (filter && !filter (b))
+      if (filter && !filter (&b))
 	continue;
 
       /* If we have a BP_NUM_LIST string, it is a list of breakpoints to
 	 accept.  Skip the others.  */
       if (bp_num_list != NULL && *bp_num_list != '\0')
 	{
-	  if (show_internal && parse_and_eval_long (bp_num_list) != b->number)
+	  if (show_internal && parse_and_eval_long (bp_num_list) != b.number)
 	    continue;
-	  if (!show_internal && !number_is_in_list (bp_num_list, b->number))
+	  if (!show_internal && !number_is_in_list (bp_num_list, b.number))
 	    continue;
 	}
 
-      if (show_internal || user_breakpoint_p (b))
+      if (show_internal || user_breakpoint_p (&b))
 	{
 	  int addr_bit, type_len;
 
-	  addr_bit = breakpoint_address_bits (b);
+	  addr_bit = breakpoint_address_bits (&b);
 	  if (addr_bit > print_address_bits)
 	    print_address_bits = addr_bit;
 
-	  type_len = strlen (bptype_string (b->type));
+	  type_len = strlen (bptype_string (b.type));
 	  if (type_len > print_type_col_width)
 	    print_type_col_width = type_len;
 
@@ -6494,11 +7050,11 @@ breakpoint_1 (const char *bp_num_list, b
     if (nr_printable_breakpoints > 0)
       annotate_breakpoints_table ();
 
-    ALL_BREAKPOINTS (b)
+    for (breakpoint &b : all_breakpoints ())
       {
 	QUIT;
 	/* If we have a filter, only list the breakpoints it accepts.  */
-	if (filter && !filter (b))
+	if (filter && !filter (&b))
 	  continue;
 
 	/* If we have a BP_NUM_LIST string, it is a list of breakpoints to
@@ -6508,19 +7064,24 @@ breakpoint_1 (const char *bp_num_list, b
 	  {
 	    if (show_internal)	/* maintenance info breakpoint */
 	      {
-		if (parse_and_eval_long (bp_num_list) != b->number)
+		if (parse_and_eval_long (bp_num_list) != b.number)
 		  continue;
 	      }
 	    else		/* all others */
 	      {
-		if (!number_is_in_list (bp_num_list, b->number))
+		if (!number_is_in_list (bp_num_list, b.number))
 		  continue;
 	      }
 	  }
 	/* We only print out user settable breakpoints unless the
 	   show_internal is set.  */
-	if (show_internal || user_breakpoint_p (b))
-	  print_one_breakpoint (b, &last_loc, show_internal);
+	if (show_internal || user_breakpoint_p (&b))
+	  {
+	    print_one_breakpoint (&b, &last_loc, show_internal);
+	    for (bp_location &loc : b.locations ())
+	      if (loc.disabled_by_cond)
+		has_disabled_by_cond_location = true;
+	  }
       }
   }
 
@@ -6541,6 +7102,10 @@ breakpoint_1 (const char *bp_num_list, b
     {
       if (last_loc && !server_command)
 	set_next_address (last_loc->gdbarch, last_loc->address);
+
+      if (has_disabled_by_cond_location && !uiout->is_mi_like_p ())
+	uiout->message (_("(*): Breakpoint condition is invalid at this "
+			  "location.\n"));
     }
 
   /* FIXME?  Should this be moved up so that it is only called when
@@ -6561,7 +7126,7 @@ default_collect_info (void)
   /* If it has no value (which is frequently the case), say nothing; a
      message like "No default-collect." gets in user's face when it's
      not wanted.  */
-  if (!*default_collect)
+  if (default_collect.empty ())
     return;
 
   /* The following phrase lines up nicely with per-tracepoint collect
@@ -6602,60 +7167,62 @@ maintenance_info_breakpoints (const char
   default_collect_info ();
 }
 
-static int
+static bool
 breakpoint_has_pc (struct breakpoint *b,
 		   struct program_space *pspace,
 		   CORE_ADDR pc, struct obj_section *section)
 {
-  struct bp_location *bl = b->loc;
-
-  for (; bl; bl = bl->next)
+  for (bp_location &bl : b->locations ())
     {
-      if (bl->pspace == pspace
-	  && bl->address == pc
-	  && (!overlay_debugging || bl->section == section))
-	return 1;	  
+      if (bl.pspace == pspace
+	  && bl.address == pc
+	  && (!overlay_debugging || bl.section == section))
+	return true;
     }
-  return 0;
+  return false;
 }
 
-/* Print a message describing any user-breakpoints set at PC.  This
-   concerns with logical breakpoints, so we match program spaces, not
-   address spaces.  */
+/* See breakpoint.h.  */
 
-static void
+void
 describe_other_breakpoints (struct gdbarch *gdbarch,
 			    struct program_space *pspace, CORE_ADDR pc,
 			    struct obj_section *section, int thread)
 {
   int others = 0;
-  struct breakpoint *b;
 
-  ALL_BREAKPOINTS (b)
-    others += (user_breakpoint_p (b)
-               && breakpoint_has_pc (b, pspace, pc, section));
+  for (breakpoint &b : all_breakpoints ())
+    others += (user_breakpoint_p (&b)
+	       && breakpoint_has_pc (&b, pspace, pc, section));
+
   if (others > 0)
     {
       if (others == 1)
-	printf_filtered (_("Note: breakpoint "));
+	gdb_printf (_("Note: breakpoint "));
       else /* if (others == ???) */
-	printf_filtered (_("Note: breakpoints "));
-      ALL_BREAKPOINTS (b)
-	if (user_breakpoint_p (b) && breakpoint_has_pc (b, pspace, pc, section))
+	gdb_printf (_("Note: breakpoints "));
+      for (breakpoint &b : all_breakpoints ())
+	if (user_breakpoint_p (&b)
+	    && breakpoint_has_pc (&b, pspace, pc, section))
 	  {
 	    others--;
-	    printf_filtered ("%d", b->number);
-	    if (b->thread == -1 && thread != -1)
-	      printf_filtered (" (all threads)");
-	    else if (b->thread != -1)
-	      printf_filtered (" (thread %d)", b->thread);
-	    printf_filtered ("%s%s ",
-			     ((b->enable_state == bp_disabled
-			       || b->enable_state == bp_call_disabled)
-			      ? " (disabled)"
-			      : ""),
-			     (others > 1) ? "," 
-			     : ((others == 1) ? " and" : ""));
+	    gdb_printf ("%d", b.number);
+	    if (b.thread == -1 && thread != -1)
+	      gdb_printf (" (all threads)");
+	    else if (b.thread != -1)
+	      {
+		struct thread_info *thr = find_thread_global_id (b.thread);
+		gdb_printf (" (thread %s)", print_thread_id (thr));
+	      }
+	    else if (b.task != -1)
+	      gdb_printf (" (task %d)", b.task);
+	    gdb_printf ("%s%s ",
+			((b.enable_state == bp_disabled
+			  || b.enable_state == bp_call_disabled)
+			 ? " (disabled)"
+			 : ""),
+			(others > 1) ? "," 
+			: ((others == 1) ? " and" : ""));
 	  }
       current_uiout->message (_("also set at pc %ps.\n"),
 			      styled_string (address_style.style (),
@@ -6684,12 +7251,12 @@ bl_address_is_meaningful (bp_location *l
 /* Assuming LOC1 and LOC2's owners are hardware watchpoints, returns
    true if LOC1 and LOC2 represent the same watchpoint location.  */
 
-static int
-watchpoint_locations_match (struct bp_location *loc1, 
-			    struct bp_location *loc2)
+static bool
+watchpoint_locations_match (const struct bp_location *loc1,
+			    const struct bp_location *loc2)
 {
-  struct watchpoint *w1 = (struct watchpoint *) loc1->owner;
-  struct watchpoint *w2 = (struct watchpoint *) loc2->owner;
+  watchpoint *w1 = gdb::checked_static_cast<watchpoint *> (loc1->owner);
+  watchpoint *w2 = gdb::checked_static_cast<watchpoint *> (loc2->owner);
 
   /* Both of them must exist.  */
   gdb_assert (w1 != NULL);
@@ -6711,7 +7278,7 @@ watchpoint_locations_match (struct bp_lo
 						    loc2->length,
 						    loc2->watchpoint_type,
 						    w2->cond_exp.get ())))
-    return 0;
+    return false;
 
   /* Note that this checks the owner's type, not the location's.  In
      case the target does not support read watchpoints, but does
@@ -6731,7 +7298,7 @@ int
 breakpoint_address_match (const address_space *aspace1, CORE_ADDR addr1,
 			  const address_space *aspace2, CORE_ADDR addr2)
 {
-  return ((gdbarch_has_global_breakpoints (target_gdbarch ())
+  return ((gdbarch_has_global_breakpoints (current_inferior ()->arch ())
 	   || aspace1 == aspace2)
 	  && addr1 == addr2);
 }
@@ -6741,13 +7308,13 @@ breakpoint_address_match (const address_
    matches ASPACE2.  On targets that have global breakpoints, the address
    space doesn't really matter.  */
 
-static int
+static bool
 breakpoint_address_match_range (const address_space *aspace1,
 				CORE_ADDR addr1,
 				int len1, const address_space *aspace2,
 				CORE_ADDR addr2)
 {
-  return ((gdbarch_has_global_breakpoints (target_gdbarch ())
+  return ((gdbarch_has_global_breakpoints (current_inferior ()->arch ())
 	   || aspace1 == aspace2)
 	  && addr2 >= addr1 && addr2 < addr1 + len1);
 }
@@ -6757,15 +7324,15 @@ breakpoint_address_match_range (const ad
    matches the breakpoint's address space.  On targets that have global
    breakpoints, the address space doesn't really matter.  */
 
-static int
+static bool
 breakpoint_location_address_match (struct bp_location *bl,
 				   const address_space *aspace,
 				   CORE_ADDR addr)
 {
-  return (breakpoint_address_match (bl->pspace->aspace, bl->address,
+  return (breakpoint_address_match (bl->pspace->aspace.get (), bl->address,
 				    aspace, addr)
 	  || (bl->length
-	      && breakpoint_address_match_range (bl->pspace->aspace,
+	      && breakpoint_address_match_range (bl->pspace->aspace.get (),
 						 bl->address, bl->length,
 						 aspace, addr)));
 }
@@ -6776,13 +7343,13 @@ breakpoint_location_address_match (struc
    space.  On targets that have global breakpoints, the address space
    doesn't really matter.  */
 
-static int
+static bool
 breakpoint_location_address_range_overlap (struct bp_location *bl,
 					   const address_space *aspace,
 					   CORE_ADDR addr, int len)
 {
-  if (gdbarch_has_global_breakpoints (target_gdbarch ())
-      || bl->pspace->aspace == aspace)
+  if (gdbarch_has_global_breakpoints (current_inferior ()->arch ())
+      || bl->pspace->aspace.get () == aspace)
     {
       int bl_len = bl->length != 0 ? bl->length : 1;
 
@@ -6796,9 +7363,9 @@ breakpoint_location_address_range_overla
    Then, if LOC1 and LOC2 represent the same tracepoint location, returns
    true, otherwise returns false.  */
 
-static int
-tracepoint_locations_match (struct bp_location *loc1,
-			    struct bp_location *loc2)
+static bool
+tracepoint_locations_match (const struct bp_location *loc1,
+			    const struct bp_location *loc2)
 {
   if (is_tracepoint (loc1->owner) && is_tracepoint (loc2->owner))
     /* Since tracepoint locations are never duplicated with others', tracepoint
@@ -6806,16 +7373,19 @@ tracepoint_locations_match (struct bp_lo
        different locations.  */
     return (loc1->address == loc2->address && loc1->owner == loc2->owner);
   else
-    return 0;
+    return false;
 }
 
 /* Assuming LOC1 and LOC2's types' have meaningful target addresses
    (bl_address_is_meaningful), returns true if LOC1 and LOC2 represent
-   the same location.  */
+   the same location.  If SW_HW_BPS_MATCH is true, then software
+   breakpoint locations and hardware breakpoint locations match,
+   otherwise they don't.  */
 
-static int
-breakpoint_locations_match (struct bp_location *loc1, 
-			    struct bp_location *loc2)
+static bool
+breakpoint_locations_match (const struct bp_location *loc1,
+			    const struct bp_location *loc2,
+			    bool sw_hw_bps_match)
 {
   int hw_point1, hw_point2;
 
@@ -6827,21 +7397,26 @@ breakpoint_locations_match (struct bp_lo
   hw_point2 = is_hardware_watchpoint (loc2->owner);
 
   if (hw_point1 != hw_point2)
-    return 0;
+    return false;
   else if (hw_point1)
     return watchpoint_locations_match (loc1, loc2);
   else if (is_tracepoint (loc1->owner) || is_tracepoint (loc2->owner))
     return tracepoint_locations_match (loc1, loc2);
   else
-    /* We compare bp_location.length in order to cover ranged breakpoints.  */
-    return (breakpoint_address_match (loc1->pspace->aspace, loc1->address,
-				     loc2->pspace->aspace, loc2->address)
+    /* We compare bp_location.length in order to cover ranged
+       breakpoints.  Keep this in sync with
+       bp_location_is_less_than.  */
+    return (breakpoint_address_match (loc1->pspace->aspace.get (),
+				      loc1->address,
+				      loc2->pspace->aspace.get (),
+				      loc2->address)
+	    && (loc1->loc_type == loc2->loc_type || sw_hw_bps_match)
 	    && loc1->length == loc2->length);
 }
 
 static void
 breakpoint_adjustment_warning (CORE_ADDR from_addr, CORE_ADDR to_addr,
-                               int bnum, int have_bnum)
+			       int bnum, bool have_bnum)
 {
   /* The longest string possibly returned by hex_string_custom
      is 50 chars.  These must be at least that big for safety.  */
@@ -6852,7 +7427,7 @@ breakpoint_adjustment_warning (CORE_ADDR
   strcpy (astr2, hex_string_custom ((unsigned long) to_addr, 8));
   if (have_bnum)
     warning (_("Breakpoint %d address previously adjusted from %s to %s."),
-             bnum, astr1, astr2);
+	     bnum, astr1, astr2);
   else
     warning (_("Breakpoint address adjusted from %s to %s."), astr1, astr2);
 }
@@ -6864,8 +7439,11 @@ breakpoint_adjustment_warning (CORE_ADDR
 
 static CORE_ADDR
 adjust_breakpoint_address (struct gdbarch *gdbarch,
-			   CORE_ADDR bpaddr, enum bptype bptype)
+			   CORE_ADDR bpaddr, enum bptype bptype,
+			   struct program_space *pspace)
 {
+  gdb_assert (pspace != nullptr);
+
   if (bptype == bp_watchpoint
       || bptype == bp_hardware_watchpoint
       || bptype == bp_read_watchpoint
@@ -6873,7 +7451,7 @@ adjust_breakpoint_address (struct gdbarc
       || bptype == bp_catchpoint)
     {
       /* Watchpoints and the various bp_catch_* eventpoints should not
-         have their addresses modified.  */
+	 have their addresses modified.  */
       return bpaddr;
     }
   else if (bptype == bp_single_step)
@@ -6890,20 +7468,28 @@ adjust_breakpoint_address (struct gdbarc
     {
       CORE_ADDR adjusted_bpaddr = bpaddr;
 
+      /* Some targets have architectural constraints on the placement
+	 of breakpoint instructions.  Obtain the adjusted address.  */
       if (gdbarch_adjust_breakpoint_address_p (gdbarch))
 	{
-	  /* Some targets have architectural constraints on the placement
-	     of breakpoint instructions.  Obtain the adjusted address.  */
-	  adjusted_bpaddr = gdbarch_adjust_breakpoint_address (gdbarch, bpaddr);
+	  /* Targets that implement this adjustment function will likely
+	     inspect either the symbol table, target memory at BPADDR, or
+	     even state registers, so ensure a suitable thread (and its
+	     associated program space) are currently selected.  */
+	  scoped_restore_current_pspace_and_thread restore_pspace_thread;
+	  switch_to_program_space_and_thread (pspace);
+	  adjusted_bpaddr
+	    = gdbarch_adjust_breakpoint_address (gdbarch, bpaddr);
 	}
 
-      adjusted_bpaddr = address_significant (gdbarch, adjusted_bpaddr);
+      adjusted_bpaddr
+	= gdbarch_remove_non_address_bits (gdbarch, adjusted_bpaddr);
 
       /* An adjusted breakpoint address can significantly alter
-         a user's expectations.  Print a warning if an adjustment
+	 a user's expectations.  Print a warning if an adjustment
 	 is required.  */
       if (adjusted_bpaddr != bpaddr)
-	breakpoint_adjustment_warning (bpaddr, adjusted_bpaddr, 0, 0);
+	breakpoint_adjustment_warning (bpaddr, adjusted_bpaddr, 0, false);
 
       return adjusted_bpaddr;
     }
@@ -6939,20 +7525,29 @@ bp_location_from_bp_type (bptype type)
     case bp_gnu_ifunc_resolver_return:
     case bp_dprintf:
       return bp_loc_software_breakpoint;
+
     case bp_hardware_breakpoint:
       return bp_loc_hardware_breakpoint;
+
     case bp_hardware_watchpoint:
     case bp_read_watchpoint:
     case bp_access_watchpoint:
       return bp_loc_hardware_watchpoint;
+
     case bp_watchpoint:
-    case bp_catchpoint:
+      return bp_loc_software_watchpoint;
+
     case bp_tracepoint:
     case bp_fast_tracepoint:
     case bp_static_tracepoint:
+    case bp_static_marker_tracepoint:
+      return bp_loc_tracepoint;
+
+    case bp_catchpoint:
       return bp_loc_other;
+
     default:
-      internal_error (__FILE__, __LINE__, _("unknown breakpoint type"));
+      internal_error (_("unknown breakpoint type"));
     }
 }
 
@@ -6962,6 +7557,7 @@ bp_location::bp_location (breakpoint *ow
   this->cond_bytecode = NULL;
   this->shlib_disabled = 0;
   this->enabled = 1;
+  this->disabled_by_cond = false;
 
   this->loc_type = type;
 
@@ -6969,7 +7565,7 @@ bp_location::bp_location (breakpoint *ow
       || this->loc_type == bp_loc_hardware_breakpoint)
     mark_breakpoint_location_modified (this);
 
-  this->refc = 1;
+  incref ();
 }
 
 bp_location::bp_location (breakpoint *owner)
@@ -6978,26 +7574,15 @@ bp_location::bp_location (breakpoint *ow
 {
 }
 
-/* Allocate a struct bp_location.  */
-
-static struct bp_location *
-allocate_bp_location (struct breakpoint *bpt)
-{
-  return bpt->ops->allocate_location (bpt);
-}
-
-static void
-free_bp_location (struct bp_location *loc)
-{
-  delete loc;
-}
-
-/* Increment reference count.  */
+/* See breakpoint.h.  */
 
-static void
-incref_bp_location (struct bp_location *bl)
+std::string
+bp_location::to_string () const
 {
-  ++bl->refc;
+  string_file stb;
+  ui_out_redirect_pop redir (current_uiout, &stb);
+  print_breakpoint_location (this->owner, this);
+  return stb.release ();
 }
 
 /* Decrement reference count.  If the reference count reaches 0,
@@ -7006,10 +7591,7 @@ incref_bp_location (struct bp_location *
 static void
 decref_bp_location (struct bp_location **blp)
 {
-  gdb_assert ((*blp)->refc > 0);
-
-  if (--(*blp)->refc == 0)
-    free_bp_location (*blp);
+  bp_location_ref_policy::decref (*blp);
   *blp = NULL;
 }
 
@@ -7018,55 +7600,12 @@ decref_bp_location (struct bp_location *
 static breakpoint *
 add_to_breakpoint_chain (std::unique_ptr<breakpoint> &&b)
 {
-  struct breakpoint *b1;
-  struct breakpoint *result = b.get ();
-
   /* Add this breakpoint to the end of the chain so that a list of
      breakpoints will come out in order of increasing numbers.  */
 
-  b1 = breakpoint_chain;
-  if (b1 == 0)
-    breakpoint_chain = b.release ();
-  else
-    {
-      while (b1->next)
-	b1 = b1->next;
-      b1->next = b.release ();
-    }
-
-  return result;
-}
-
-/* Initializes breakpoint B with type BPTYPE and no locations yet.  */
-
-static void
-init_raw_breakpoint_without_location (struct breakpoint *b,
-				      struct gdbarch *gdbarch,
-				      enum bptype bptype,
-				      const struct breakpoint_ops *ops)
-{
-  gdb_assert (ops != NULL);
-
-  b->ops = ops;
-  b->type = bptype;
-  b->gdbarch = gdbarch;
-  b->language = current_language->la_language;
-  b->input_radix = input_radix;
-  b->related_breakpoint = b;
-}
-
-/* Helper to set_raw_breakpoint below.  Creates a breakpoint
-   that has type BPTYPE and has no locations as yet.  */
-
-static struct breakpoint *
-set_raw_breakpoint_without_location (struct gdbarch *gdbarch,
-				     enum bptype bptype,
-				     const struct breakpoint_ops *ops)
-{
-  std::unique_ptr<breakpoint> b = new_breakpoint_from_type (bptype);
+  breakpoint_chain.push_back (*b.release ());
 
-  init_raw_breakpoint_without_location (b.get (), gdbarch, bptype, ops);
-  return add_to_breakpoint_chain (std::move (b));
+  return &breakpoint_chain.back ();
 }
 
 /* Initialize loc->function_name.  */
@@ -7083,21 +7622,22 @@ set_breakpoint_location_function (struct
       const char *function_name;
 
       if (loc->msymbol != NULL
-	  && (MSYMBOL_TYPE (loc->msymbol) == mst_text_gnu_ifunc
-	      || MSYMBOL_TYPE (loc->msymbol) == mst_data_gnu_ifunc))
+	  && (loc->msymbol->type () == mst_text_gnu_ifunc
+	      || loc->msymbol->type () == mst_data_gnu_ifunc))
 	{
 	  struct breakpoint *b = loc->owner;
 
 	  function_name = loc->msymbol->linkage_name ();
 
-	  if (b->type == bp_breakpoint && b->loc == loc
-	      && loc->next == NULL && b->related_breakpoint == b)
+	  if (b->type == bp_breakpoint
+	      && b->has_single_location ()
+	      && b->related_breakpoint == b)
 	    {
 	      /* Create only the whole new breakpoint of this type but do not
 		 mess more complicated breakpoints with multiple locations.  */
 	      b->type = bp_gnu_ifunc_resolver;
 	      /* Remember the resolver's address for use by the return
-	         breakpoint.  */
+		 breakpoint.  */
 	      loc->related_address = loc->address;
 	    }
 	}
@@ -7105,7 +7645,7 @@ set_breakpoint_location_function (struct
 	find_pc_partial_function (loc->address, &function_name, NULL, NULL);
 
       if (function_name)
-	loc->function_name = xstrdup (function_name);
+	loc->function_name = make_unique_xstrdup (function_name);
     }
 }
 
@@ -7114,66 +7654,13 @@ struct gdbarch *
 get_sal_arch (struct symtab_and_line sal)
 {
   if (sal.section)
-    return get_objfile_arch (sal.section->objfile);
+    return sal.section->objfile->arch ();
   if (sal.symtab)
-    return get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
+    return sal.symtab->compunit ()->objfile ()->arch ();
 
   return NULL;
 }
 
-/* Low level routine for partially initializing a breakpoint of type
-   BPTYPE.  The newly created breakpoint's address, section, source
-   file name, and line number are provided by SAL.
-
-   It is expected that the caller will complete the initialization of
-   the newly created breakpoint struct as well as output any status
-   information regarding the creation of a new breakpoint.  */
-
-static void
-init_raw_breakpoint (struct breakpoint *b, struct gdbarch *gdbarch,
-		     struct symtab_and_line sal, enum bptype bptype,
-		     const struct breakpoint_ops *ops)
-{
-  init_raw_breakpoint_without_location (b, gdbarch, bptype, ops);
-
-  add_location_to_breakpoint (b, &sal);
-
-  if (bptype != bp_catchpoint)
-    gdb_assert (sal.pspace != NULL);
-
-  /* Store the program space that was used to set the breakpoint,
-     except for ordinary breakpoints, which are independent of the
-     program space.  */
-  if (bptype != bp_breakpoint && bptype != bp_hardware_breakpoint)
-    b->pspace = sal.pspace;
-}
-
-/* set_raw_breakpoint is a low level routine for allocating and
-   partially initializing a breakpoint of type BPTYPE.  The newly
-   created breakpoint's address, section, source file name, and line
-   number are provided by SAL.  The newly created and partially
-   initialized breakpoint is added to the breakpoint chain and
-   is also returned as the value of this function.
-
-   It is expected that the caller will complete the initialization of
-   the newly created breakpoint struct as well as output any status
-   information regarding the creation of a new breakpoint.  In
-   particular, set_raw_breakpoint does NOT set the breakpoint
-   number!  Care should be taken to not allow an error to occur
-   prior to completing the initialization of the breakpoint.  If this
-   should happen, a bogus breakpoint will be left on the chain.  */
-
-struct breakpoint *
-set_raw_breakpoint (struct gdbarch *gdbarch,
-		    struct symtab_and_line sal, enum bptype bptype,
-		    const struct breakpoint_ops *ops)
-{
-  std::unique_ptr<breakpoint> b = new_breakpoint_from_type (bptype);
-
-  init_raw_breakpoint (b.get (), gdbarch, sal, bptype, ops);
-  return add_to_breakpoint_chain (std::move (b));
-}
-
 /* Call this routine when stepping and nexting to enable a breakpoint
    if we do a longjmp() or 'throw' in TP.  FRAME is the frame which
    initiated the operation.  */
@@ -7181,26 +7668,21 @@ set_raw_breakpoint (struct gdbarch *gdba
 void
 set_longjmp_breakpoint (struct thread_info *tp, struct frame_id frame)
 {
-  struct breakpoint *b, *b_tmp;
   int thread = tp->global_num;
 
   /* To avoid having to rescan all objfile symbols at every step,
      we maintain a list of continually-inserted but always disabled
      longjmp "master" breakpoints.  Here, we simply create momentary
      clones of those and enable them for the requested thread.  */
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    if (b->pspace == current_program_space
-	&& (b->type == bp_longjmp_master
-	    || b->type == bp_exception_master))
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.pspace == current_program_space
+	&& (b.type == bp_longjmp_master
+	    || b.type == bp_exception_master))
       {
-	enum bptype type = b->type == bp_longjmp_master ? bp_longjmp : bp_exception;
-	struct breakpoint *clone;
-
+	bptype type = b.type == bp_longjmp_master ? bp_longjmp : bp_exception;
 	/* longjmp_breakpoint_ops ensures INITIATING_FRAME is cleared again
 	   after their removal.  */
-	clone = momentary_breakpoint_from_master (b, type,
-						  &momentary_breakpoint_ops, 1);
-	clone->thread = thread;
+	momentary_breakpoint_from_master (&b, type, 1, thread);
       }
 
   tp->initiating_frame = frame;
@@ -7210,26 +7692,28 @@ set_longjmp_breakpoint (struct thread_in
 void
 delete_longjmp_breakpoint (int thread)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    if (b->type == bp_longjmp || b->type == bp_exception)
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.type == bp_longjmp || b.type == bp_exception)
       {
-	if (b->thread == thread)
-	  delete_breakpoint (b);
+	if (b.thread == thread)
+	  {
+	    gdb_assert (b.inferior == -1);
+	    delete_breakpoint (&b);
+	  }
       }
 }
 
 void
 delete_longjmp_breakpoint_at_next_stop (int thread)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    if (b->type == bp_longjmp || b->type == bp_exception)
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.type == bp_longjmp || b.type == bp_exception)
       {
-	if (b->thread == thread)
-	  b->disposition = disp_del_at_next_stop;
+	if (b.thread == thread)
+	  {
+	    gdb_assert (b.inferior == -1);
+	    b.disposition = disp_del_at_next_stop;
+	  }
       }
 }
 
@@ -7241,17 +7725,15 @@ delete_longjmp_breakpoint_at_next_stop (
 struct breakpoint *
 set_longjmp_breakpoint_for_call_dummy (void)
 {
-  struct breakpoint *b, *retval = NULL;
+  breakpoint *retval = nullptr;
 
-  ALL_BREAKPOINTS (b)
-    if (b->pspace == current_program_space && b->type == bp_longjmp_master)
+  for (breakpoint &b : all_breakpoints ())
+    if (b.pspace == current_program_space && b.type == bp_longjmp_master)
       {
-	struct breakpoint *new_b;
-
-	new_b = momentary_breakpoint_from_master (b, bp_longjmp_call_dummy,
-						  &momentary_breakpoint_ops,
-						  1);
-	new_b->thread = inferior_thread ()->global_num;
+	int thread = inferior_thread ()->global_num;
+	breakpoint *new_b
+	  = momentary_breakpoint_from_master (&b, bp_longjmp_call_dummy,
+					      1, thread);
 
 	/* Link NEW_B into the chain of RETVAL breakpoints.  */
 
@@ -7271,64 +7753,112 @@ set_longjmp_breakpoint_for_call_dummy (v
    TP.  Remove those which can no longer be found in the current frame
    stack.
 
-   You should call this function only at places where it is safe to currently
-   unwind the whole stack.  Failed stack unwind would discard live dummy
-   frames.  */
+   If the unwind fails then there is not sufficient information to discard
+   dummy frames.  In this case, elide the clean up and the dummy frames will
+   be cleaned up next time this function is called from a location where
+   unwinding is possible.  */
 
 void
 check_longjmp_breakpoint_for_call_dummy (struct thread_info *tp)
 {
-  struct breakpoint *b, *b_tmp;
+  /* We would need to delete breakpoints other than the current one while
+     iterating, so all_breakpoints_safe is not sufficient to make that safe.
+     Save all breakpoints to delete in that set and delete them at the end.  */
+  std::unordered_set<breakpoint *> to_delete;
+
+  for (struct breakpoint &b : all_breakpoints ())
+    {
+      if (b.type == bp_longjmp_call_dummy && b.thread == tp->global_num)
+	{
+	  gdb_assert (b.inferior == -1);
+	  struct breakpoint *dummy_b = b.related_breakpoint;
+
+	  /* Find the bp_call_dummy breakpoint in the list of breakpoints
+	     chained off b->related_breakpoint.  */
+	  while (dummy_b != &b && dummy_b->type != bp_call_dummy)
+	    dummy_b = dummy_b->related_breakpoint;
+
+	  /* If there was no bp_call_dummy breakpoint then there's nothing
+	     more to do.  Or, if the dummy frame associated with the
+	     bp_call_dummy is still on the stack then we need to leave this
+	     bp_call_dummy in place.  */
+	  if (dummy_b->type != bp_call_dummy
+	      || frame_find_by_id (dummy_b->frame_id) != NULL)
+	    continue;
 
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    if (b->type == bp_longjmp_call_dummy && b->thread == tp->global_num)
-      {
-	struct breakpoint *dummy_b = b->related_breakpoint;
+	  /* We didn't find the dummy frame on the stack, this could be
+	     because we have longjmp'd to a stack frame that is previous to
+	     the dummy frame, or it could be because the stack unwind is
+	     broken at some point between the longjmp frame and the dummy
+	     frame.
+
+	     Next we figure out why the stack unwind stopped.  If it looks
+	     like the unwind is complete then we assume the dummy frame has
+	     been jumped over, however, if the unwind stopped for an
+	     unexpected reason then we assume the stack unwind is currently
+	     broken, and that we will (eventually) return to the dummy
+	     frame.
+
+	     It might be tempting to consider using frame_id_inner here, but
+	     that is not safe.   There is no guarantee that the stack frames
+	     we are looking at here are even on the same stack as the
+	     original dummy frame, hence frame_id_inner can't be used.  See
+	     the comments on frame_id_inner for more details.  */
+	  bool unwind_finished_unexpectedly = false;
+	  for (frame_info_ptr fi = get_current_frame (); fi != nullptr; )
+	    {
+	      frame_info_ptr prev = get_prev_frame (fi);
+	      if (prev == nullptr)
+		{
+		  /* FI is the last stack frame.  Why did this frame not
+		     unwind further?  */
+		  auto stop_reason = get_frame_unwind_stop_reason (fi);
+		  if (stop_reason != UNWIND_NO_REASON
+		      && stop_reason != UNWIND_OUTERMOST)
+		    unwind_finished_unexpectedly = true;
+		}
+	      fi = prev;
+	    }
+	  if (unwind_finished_unexpectedly)
+	    continue;
 
-	while (dummy_b != b && dummy_b->type != bp_call_dummy)
-	  dummy_b = dummy_b->related_breakpoint;
-	if (dummy_b->type != bp_call_dummy
-	    || frame_find_by_id (dummy_b->frame_id) != NULL)
-	  continue;
-	
-	dummy_frame_discard (dummy_b->frame_id, tp);
+	  dummy_frame_discard (dummy_b->frame_id, tp);
 
-	while (b->related_breakpoint != b)
-	  {
-	    if (b_tmp == b->related_breakpoint)
-	      b_tmp = b->related_breakpoint->next;
-	    delete_breakpoint (b->related_breakpoint);
-	  }
-	delete_breakpoint (b);
-      }
+	  for (breakpoint *related_breakpoint = b.related_breakpoint;
+	       related_breakpoint != &b;
+	       related_breakpoint = related_breakpoint->related_breakpoint)
+	    to_delete.insert (b.related_breakpoint);
+
+	  to_delete.insert (&b);
+	}
+    }
+
+  for (breakpoint *b : to_delete)
+    delete_breakpoint (b);
 }
 
 void
 enable_overlay_breakpoints (void)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-    if (b->type == bp_overlay_event)
-    {
-      b->enable_state = bp_enabled;
-      update_global_location_list (UGLL_MAY_INSERT);
-      overlay_events_enabled = 1;
-    }
+  for (breakpoint &b : all_breakpoints ())
+    if (b.type == bp_overlay_event)
+      {
+	b.enable_state = bp_enabled;
+	update_global_location_list (UGLL_MAY_INSERT);
+	overlay_events_enabled = 1;
+      }
 }
 
 void
 disable_overlay_breakpoints (void)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-    if (b->type == bp_overlay_event)
-    {
-      b->enable_state = bp_disabled;
-      update_global_location_list (UGLL_DONT_INSERT);
-      overlay_events_enabled = 0;
-    }
+  for (breakpoint &b : all_breakpoints ())
+    if (b.type == bp_overlay_event)
+      {
+	b.enable_state = bp_disabled;
+	update_global_location_list (UGLL_DONT_INSERT);
+	overlay_events_enabled = 0;
+      }
 }
 
 /* Set an active std::terminate breakpoint for each std::terminate
@@ -7336,14 +7866,12 @@ disable_overlay_breakpoints (void)
 void
 set_std_terminate_breakpoint (void)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    if (b->pspace == current_program_space
-	&& b->type == bp_std_terminate_master)
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.pspace == current_program_space
+	&& b.type == bp_std_terminate_master)
       {
-	momentary_breakpoint_from_master (b, bp_std_terminate,
-					  &momentary_breakpoint_ops, 1);
+	momentary_breakpoint_from_master (&b, bp_std_terminate, 1,
+					  inferior_thread ()->global_num);
       }
 }
 
@@ -7351,11 +7879,9 @@ set_std_terminate_breakpoint (void)
 void
 delete_std_terminate_breakpoint (void)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    if (b->type == bp_std_terminate)
-      delete_breakpoint (b);
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.type == bp_std_terminate)
+      delete_breakpoint (&b);
 }
 
 struct breakpoint *
@@ -7363,12 +7889,11 @@ create_thread_event_breakpoint (struct g
 {
   struct breakpoint *b;
 
-  b = create_internal_breakpoint (gdbarch, address, bp_thread_event,
-				  &internal_breakpoint_ops);
+  b = create_internal_breakpoint (gdbarch, address, bp_thread_event);
 
   b->enable_state = bp_enabled;
-  /* location has to be used or breakpoint_re_set will delete me.  */
-  b->location = new_address_location (b->loc->address, NULL, 0);
+  /* locspec has to be used or breakpoint_re_set will delete me.  */
+  b->locspec = new_address_location_spec (b->first_loc ().address, NULL, 0);
 
   update_global_location_list_nothrow (UGLL_MAY_INSERT);
 
@@ -7386,8 +7911,7 @@ struct lang_and_radix
 struct breakpoint *
 create_jit_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
 {
-  return create_internal_breakpoint (gdbarch, address, bp_jit_event,
-				     &internal_breakpoint_ops);
+  return create_internal_breakpoint (gdbarch, address, bp_jit_event);
 }
 
 /* Remove JIT code registration and unregistration breakpoint(s).  */
@@ -7395,23 +7919,19 @@ create_jit_event_breakpoint (struct gdba
 void
 remove_jit_event_breakpoints (void)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    if (b->type == bp_jit_event
-	&& b->loc->pspace == current_program_space)
-      delete_breakpoint (b);
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.type == bp_jit_event
+	&& b.first_loc ().pspace == current_program_space)
+      delete_breakpoint (&b);
 }
 
 void
 remove_solib_event_breakpoints (void)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    if (b->type == bp_shlib_event
-	&& b->loc->pspace == current_program_space)
-      delete_breakpoint (b);
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.type == bp_shlib_event
+	&& b.first_loc ().pspace == current_program_space)
+      delete_breakpoint (&b);
 }
 
 /* See breakpoint.h.  */
@@ -7419,12 +7939,10 @@ remove_solib_event_breakpoints (void)
 void
 remove_solib_event_breakpoints_at_next_stop (void)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    if (b->type == bp_shlib_event
-	&& b->loc->pspace == current_program_space)
-      b->disposition = disp_del_at_next_stop;
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.type == bp_shlib_event
+	&& b.first_loc ().pspace == current_program_space)
+      b.disposition = disp_del_at_next_stop;
 }
 
 /* Helper for create_solib_event_breakpoint /
@@ -7437,8 +7955,7 @@ create_solib_event_breakpoint_1 (struct
 {
   struct breakpoint *b;
 
-  b = create_internal_breakpoint (gdbarch, address, bp_shlib_event,
-				  &internal_breakpoint_ops);
+  b = create_internal_breakpoint (gdbarch, address, bp_shlib_event);
   update_global_location_list_nothrow (insert_mode);
   return b;
 }
@@ -7459,7 +7976,7 @@ create_and_insert_solib_event_breakpoint
   /* Explicitly tell update_global_location_list to insert
      locations.  */
   b = create_solib_event_breakpoint_1 (gdbarch, address, UGLL_INSERT);
-  if (!b->loc->inserted)
+  if (!b->first_loc ().inserted)
     {
       delete_breakpoint (b);
       return NULL;
@@ -7473,30 +7990,28 @@ create_and_insert_solib_event_breakpoint
 void
 disable_breakpoints_in_shlibs (void)
 {
-  struct bp_location *loc, **locp_tmp;
-
-  ALL_BP_LOCATIONS (loc, locp_tmp)
-  {
-    /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL.  */
-    struct breakpoint *b = loc->owner;
+  for (bp_location *loc : all_bp_locations ())
+    {
+      /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL.  */
+      struct breakpoint *b = loc->owner;
 
-    /* We apply the check to all breakpoints, including disabled for
-       those with loc->duplicate set.  This is so that when breakpoint
-       becomes enabled, or the duplicate is removed, gdb will try to
-       insert all breakpoints.  If we don't set shlib_disabled here,
-       we'll try to insert those breakpoints and fail.  */
-    if (((b->type == bp_breakpoint)
-	 || (b->type == bp_jit_event)
-	 || (b->type == bp_hardware_breakpoint)
-	 || (is_tracepoint (b)))
-	&& loc->pspace == current_program_space
-	&& !loc->shlib_disabled
-	&& solib_name_from_address (loc->pspace, loc->address)
-	)
-      {
-	loc->shlib_disabled = 1;
-      }
-  }
+      /* We apply the check to all breakpoints, including disabled for
+	 those with loc->duplicate set.  This is so that when breakpoint
+	 becomes enabled, or the duplicate is removed, gdb will try to
+	 insert all breakpoints.  If we don't set shlib_disabled here,
+	 we'll try to insert those breakpoints and fail.  */
+      if (((b->type == bp_breakpoint)
+	   || (b->type == bp_jit_event)
+	   || (b->type == bp_hardware_breakpoint)
+	   || (is_tracepoint (b)))
+	  && loc->pspace == current_program_space
+	  && !loc->shlib_disabled
+	  && solib_name_from_address (loc->pspace, loc->address)
+	  )
+	{
+	  loc->shlib_disabled = 1;
+	}
+    }
 }
 
 /* Disable any breakpoints and tracepoints that are in SOLIB upon
@@ -7504,45 +8019,44 @@ disable_breakpoints_in_shlibs (void)
    disabled ones can just stay disabled.  */
 
 static void
-disable_breakpoints_in_unloaded_shlib (struct so_list *solib)
+disable_breakpoints_in_unloaded_shlib (program_space *pspace, const shobj &solib)
 {
-  struct bp_location *loc, **locp_tmp;
-  int disabled_shlib_breaks = 0;
-
-  ALL_BP_LOCATIONS (loc, locp_tmp)
-  {
-    /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL.  */
-    struct breakpoint *b = loc->owner;
+  bool disabled_shlib_breaks = false;
 
-    if (solib->pspace == loc->pspace
-	&& !loc->shlib_disabled
-	&& (((b->type == bp_breakpoint
-	      || b->type == bp_jit_event
-	      || b->type == bp_hardware_breakpoint)
-	     && (loc->loc_type == bp_loc_hardware_breakpoint
-		 || loc->loc_type == bp_loc_software_breakpoint))
-	    || is_tracepoint (b))
-	&& solib_contains_address_p (solib, loc->address))
-      {
-	loc->shlib_disabled = 1;
-	/* At this point, we cannot rely on remove_breakpoint
-	   succeeding so we must mark the breakpoint as not inserted
-	   to prevent future errors occurring in remove_breakpoints.  */
-	loc->inserted = 0;
-
-	/* This may cause duplicate notifications for the same breakpoint.  */
-	gdb::observers::breakpoint_modified.notify (b);
+  for (bp_location *loc : all_bp_locations ())
+    {
+      /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL.  */
+      struct breakpoint *b = loc->owner;
 
-	if (!disabled_shlib_breaks)
-	  {
-	    target_terminal::ours_for_output ();
-	    warning (_("Temporarily disabling breakpoints "
-		       "for unloaded shared library \"%s\""),
-		     solib->so_name);
-	  }
-	disabled_shlib_breaks = 1;
-      }
-  }
+      if (pspace == loc->pspace
+	  && !loc->shlib_disabled
+	  && (((b->type == bp_breakpoint
+		|| b->type == bp_jit_event
+		|| b->type == bp_hardware_breakpoint)
+	       && (loc->loc_type == bp_loc_hardware_breakpoint
+		   || loc->loc_type == bp_loc_software_breakpoint))
+	      || is_tracepoint (b))
+	  && solib_contains_address_p (solib, loc->address))
+	{
+	  loc->shlib_disabled = 1;
+	  /* At this point, we cannot rely on remove_breakpoint
+	     succeeding so we must mark the breakpoint as not inserted
+	     to prevent future errors occurring in remove_breakpoints.  */
+	  loc->inserted = 0;
+
+	  /* This may cause duplicate notifications for the same breakpoint.  */
+	  notify_breakpoint_modified (b);
+
+	  if (!disabled_shlib_breaks)
+	    {
+	      target_terminal::ours_for_output ();
+	      warning (_("Temporarily disabling breakpoints "
+			 "for unloaded shared library \"%s\""),
+		       solib.so_name.c_str ());
+	    }
+	  disabled_shlib_breaks = true;
+	}
+    }
 }
 
 /* Disable any breakpoints and tracepoints in OBJFILE upon
@@ -7552,11 +8066,6 @@ disable_breakpoints_in_unloaded_shlib (s
 static void
 disable_breakpoints_in_freed_objfile (struct objfile *objfile)
 {
-  struct breakpoint *b;
-
-  if (objfile == NULL)
-    return;
-
   /* OBJF_SHARED|OBJF_USERLOADED objfiles are dynamic modules manually
      managed by the user with add-symbol-file/remove-symbol-file.
      Similarly to how breakpoints in shared libraries are handled in
@@ -7572,562 +8081,88 @@ disable_breakpoints_in_freed_objfile (st
       || (objfile->flags & OBJF_USERLOADED) == 0)
     return;
 
-  ALL_BREAKPOINTS (b)
+  for (breakpoint &b : all_breakpoints ())
     {
-      struct bp_location *loc;
-      int bp_modified = 0;
+      bool bp_modified = false;
 
-      if (!is_breakpoint (b) && !is_tracepoint (b))
+      if (!is_breakpoint (&b) && !is_tracepoint (&b))
 	continue;
 
-      for (loc = b->loc; loc != NULL; loc = loc->next)
+      for (bp_location &loc : b.locations ())
 	{
-	  CORE_ADDR loc_addr = loc->address;
+	  CORE_ADDR loc_addr = loc.address;
 
-	  if (loc->loc_type != bp_loc_hardware_breakpoint
-	      && loc->loc_type != bp_loc_software_breakpoint)
+	  if (loc.loc_type != bp_loc_hardware_breakpoint
+	      && loc.loc_type != bp_loc_software_breakpoint)
 	    continue;
 
-	  if (loc->shlib_disabled != 0)
+	  if (loc.shlib_disabled != 0)
 	    continue;
 
-	  if (objfile->pspace != loc->pspace)
+	  if (objfile->pspace != loc.pspace)
 	    continue;
 
-	  if (loc->loc_type != bp_loc_hardware_breakpoint
-	      && loc->loc_type != bp_loc_software_breakpoint)
+	  if (loc.loc_type != bp_loc_hardware_breakpoint
+	      && loc.loc_type != bp_loc_software_breakpoint)
 	    continue;
 
 	  if (is_addr_in_objfile (loc_addr, objfile))
 	    {
-	      loc->shlib_disabled = 1;
+	      loc.shlib_disabled = 1;
 	      /* At this point, we don't know whether the object was
 		 unmapped from the inferior or not, so leave the
 		 inserted flag alone.  We'll handle failure to
 		 uninsert quietly, in case the object was indeed
 		 unmapped.  */
 
-	      mark_breakpoint_location_modified (loc);
+	      mark_breakpoint_location_modified (&loc);
 
-	      bp_modified = 1;
+	      bp_modified = true;
 	    }
 	}
 
       if (bp_modified)
-	gdb::observers::breakpoint_modified.notify (b);
-    }
-}
-
-/* FORK & VFORK catchpoints.  */
-
-/* An instance of this type is used to represent a fork or vfork
-   catchpoint.  A breakpoint is really of this type iff its ops pointer points
-   to CATCH_FORK_BREAKPOINT_OPS.  */
-
-struct fork_catchpoint : public breakpoint
-{
-  /* Process id of a child process whose forking triggered this
-     catchpoint.  This field is only valid immediately after this
-     catchpoint has triggered.  */
-  ptid_t forked_inferior_pid;
-};
-
-/* Implement the "insert" breakpoint_ops method for fork
-   catchpoints.  */
-
-static int
-insert_catch_fork (struct bp_location *bl)
-{
-  return target_insert_fork_catchpoint (inferior_ptid.pid ());
-}
-
-/* Implement the "remove" breakpoint_ops method for fork
-   catchpoints.  */
-
-static int
-remove_catch_fork (struct bp_location *bl, enum remove_bp_reason reason)
-{
-  return target_remove_fork_catchpoint (inferior_ptid.pid ());
-}
-
-/* Implement the "breakpoint_hit" breakpoint_ops method for fork
-   catchpoints.  */
-
-static int
-breakpoint_hit_catch_fork (const struct bp_location *bl,
-			   const address_space *aspace, CORE_ADDR bp_addr,
-			   const struct target_waitstatus *ws)
-{
-  struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
-
-  if (ws->kind != TARGET_WAITKIND_FORKED)
-    return 0;
-
-  c->forked_inferior_pid = ws->value.related_pid;
-  return 1;
-}
-
-/* Implement the "print_it" breakpoint_ops method for fork
-   catchpoints.  */
-
-static enum print_stop_action
-print_it_catch_fork (bpstat bs)
-{
-  struct ui_out *uiout = current_uiout;
-  struct breakpoint *b = bs->breakpoint_at;
-  struct fork_catchpoint *c = (struct fork_catchpoint *) bs->breakpoint_at;
-
-  annotate_catchpoint (b->number);
-  maybe_print_thread_hit_breakpoint (uiout);
-  if (b->disposition == disp_del)
-    uiout->text ("Temporary catchpoint ");
-  else
-    uiout->text ("Catchpoint ");
-  if (uiout->is_mi_like_p ())
-    {
-      uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_FORK));
-      uiout->field_string ("disp", bpdisp_text (b->disposition));
-    }
-  uiout->field_signed ("bkptno", b->number);
-  uiout->text (" (forked process ");
-  uiout->field_signed ("newpid", c->forked_inferior_pid.pid ());
-  uiout->text ("), ");
-  return PRINT_SRC_AND_LOC;
-}
-
-/* Implement the "print_one" breakpoint_ops method for fork
-   catchpoints.  */
-
-static void
-print_one_catch_fork (struct breakpoint *b, struct bp_location **last_loc)
-{
-  struct fork_catchpoint *c = (struct fork_catchpoint *) b;
-  struct value_print_options opts;
-  struct ui_out *uiout = current_uiout;
-
-  get_user_print_options (&opts);
-
-  /* Field 4, the address, is omitted (which makes the columns not
-     line up too nicely with the headers, but the effect is relatively
-     readable).  */
-  if (opts.addressprint)
-    uiout->field_skip ("addr");
-  annotate_field (5);
-  uiout->text ("fork");
-  if (c->forked_inferior_pid != null_ptid)
-    {
-      uiout->text (", process ");
-      uiout->field_signed ("what", c->forked_inferior_pid.pid ());
-      uiout->spaces (1);
-    }
-
-  if (uiout->is_mi_like_p ())
-    uiout->field_string ("catch-type", "fork");
-}
-
-/* Implement the "print_mention" breakpoint_ops method for fork
-   catchpoints.  */
-
-static void
-print_mention_catch_fork (struct breakpoint *b)
-{
-  printf_filtered (_("Catchpoint %d (fork)"), b->number);
-}
-
-/* Implement the "print_recreate" breakpoint_ops method for fork
-   catchpoints.  */
-
-static void
-print_recreate_catch_fork (struct breakpoint *b, struct ui_file *fp)
-{
-  fprintf_unfiltered (fp, "catch fork");
-  print_recreate_thread (b, fp);
-}
-
-/* The breakpoint_ops structure to be used in fork catchpoints.  */
-
-static struct breakpoint_ops catch_fork_breakpoint_ops;
-
-/* Implement the "insert" breakpoint_ops method for vfork
-   catchpoints.  */
-
-static int
-insert_catch_vfork (struct bp_location *bl)
-{
-  return target_insert_vfork_catchpoint (inferior_ptid.pid ());
-}
-
-/* Implement the "remove" breakpoint_ops method for vfork
-   catchpoints.  */
-
-static int
-remove_catch_vfork (struct bp_location *bl, enum remove_bp_reason reason)
-{
-  return target_remove_vfork_catchpoint (inferior_ptid.pid ());
-}
-
-/* Implement the "breakpoint_hit" breakpoint_ops method for vfork
-   catchpoints.  */
-
-static int
-breakpoint_hit_catch_vfork (const struct bp_location *bl,
-			    const address_space *aspace, CORE_ADDR bp_addr,
-			    const struct target_waitstatus *ws)
-{
-  struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
-
-  if (ws->kind != TARGET_WAITKIND_VFORKED)
-    return 0;
-
-  c->forked_inferior_pid = ws->value.related_pid;
-  return 1;
-}
-
-/* Implement the "print_it" breakpoint_ops method for vfork
-   catchpoints.  */
-
-static enum print_stop_action
-print_it_catch_vfork (bpstat bs)
-{
-  struct ui_out *uiout = current_uiout;
-  struct breakpoint *b = bs->breakpoint_at;
-  struct fork_catchpoint *c = (struct fork_catchpoint *) b;
-
-  annotate_catchpoint (b->number);
-  maybe_print_thread_hit_breakpoint (uiout);
-  if (b->disposition == disp_del)
-    uiout->text ("Temporary catchpoint ");
-  else
-    uiout->text ("Catchpoint ");
-  if (uiout->is_mi_like_p ())
-    {
-      uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_VFORK));
-      uiout->field_string ("disp", bpdisp_text (b->disposition));
-    }
-  uiout->field_signed ("bkptno", b->number);
-  uiout->text (" (vforked process ");
-  uiout->field_signed ("newpid", c->forked_inferior_pid.pid ());
-  uiout->text ("), ");
-  return PRINT_SRC_AND_LOC;
-}
-
-/* Implement the "print_one" breakpoint_ops method for vfork
-   catchpoints.  */
-
-static void
-print_one_catch_vfork (struct breakpoint *b, struct bp_location **last_loc)
-{
-  struct fork_catchpoint *c = (struct fork_catchpoint *) b;
-  struct value_print_options opts;
-  struct ui_out *uiout = current_uiout;
-
-  get_user_print_options (&opts);
-  /* Field 4, the address, is omitted (which makes the columns not
-     line up too nicely with the headers, but the effect is relatively
-     readable).  */
-  if (opts.addressprint)
-    uiout->field_skip ("addr");
-  annotate_field (5);
-  uiout->text ("vfork");
-  if (c->forked_inferior_pid != null_ptid)
-    {
-      uiout->text (", process ");
-      uiout->field_signed ("what", c->forked_inferior_pid.pid ());
-      uiout->spaces (1);
-    }
-
-  if (uiout->is_mi_like_p ())
-    uiout->field_string ("catch-type", "vfork");
-}
-
-/* Implement the "print_mention" breakpoint_ops method for vfork
-   catchpoints.  */
-
-static void
-print_mention_catch_vfork (struct breakpoint *b)
-{
-  printf_filtered (_("Catchpoint %d (vfork)"), b->number);
-}
-
-/* Implement the "print_recreate" breakpoint_ops method for vfork
-   catchpoints.  */
-
-static void
-print_recreate_catch_vfork (struct breakpoint *b, struct ui_file *fp)
-{
-  fprintf_unfiltered (fp, "catch vfork");
-  print_recreate_thread (b, fp);
-}
-
-/* The breakpoint_ops structure to be used in vfork catchpoints.  */
-
-static struct breakpoint_ops catch_vfork_breakpoint_ops;
-
-/* An instance of this type is used to represent an solib catchpoint.
-   A breakpoint is really of this type iff its ops pointer points to
-   CATCH_SOLIB_BREAKPOINT_OPS.  */
-
-struct solib_catchpoint : public breakpoint
-{
-  ~solib_catchpoint () override;
-
-  /* True for "catch load", false for "catch unload".  */
-  unsigned char is_load;
-
-  /* Regular expression to match, if any.  COMPILED is only valid when
-     REGEX is non-NULL.  */
-  char *regex;
-  std::unique_ptr<compiled_regex> compiled;
-};
-
-solib_catchpoint::~solib_catchpoint ()
-{
-  xfree (this->regex);
-}
-
-static int
-insert_catch_solib (struct bp_location *ignore)
-{
-  return 0;
-}
-
-static int
-remove_catch_solib (struct bp_location *ignore, enum remove_bp_reason reason)
-{
-  return 0;
-}
-
-static int
-breakpoint_hit_catch_solib (const struct bp_location *bl,
-			    const address_space *aspace,
-			    CORE_ADDR bp_addr,
-			    const struct target_waitstatus *ws)
-{
-  struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
-  struct breakpoint *other;
-
-  if (ws->kind == TARGET_WAITKIND_LOADED)
-    return 1;
-
-  ALL_BREAKPOINTS (other)
-  {
-    struct bp_location *other_bl;
-
-    if (other == bl->owner)
-      continue;
-
-    if (other->type != bp_shlib_event)
-      continue;
-
-    if (self->pspace != NULL && other->pspace != self->pspace)
-      continue;
-
-    for (other_bl = other->loc; other_bl != NULL; other_bl = other_bl->next)
-      {
-	if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
-	  return 1;
-      }
-  }
-
-  return 0;
-}
-
-static void
-check_status_catch_solib (struct bpstats *bs)
-{
-  struct solib_catchpoint *self
-    = (struct solib_catchpoint *) bs->breakpoint_at;
-
-  if (self->is_load)
-    {
-      for (so_list *iter : current_program_space->added_solibs)
-	{
-	  if (!self->regex
-	      || self->compiled->exec (iter->so_name, 0, NULL, 0) == 0)
-	    return;
-	}
-    }
-  else
-    {
-      for (const std::string &iter : current_program_space->deleted_solibs)
-	{
-	  if (!self->regex
-	      || self->compiled->exec (iter.c_str (), 0, NULL, 0) == 0)
-	    return;
-	}
-    }
-
-  bs->stop = 0;
-  bs->print_it = print_it_noop;
-}
-
-static enum print_stop_action
-print_it_catch_solib (bpstat bs)
-{
-  struct breakpoint *b = bs->breakpoint_at;
-  struct ui_out *uiout = current_uiout;
-
-  annotate_catchpoint (b->number);
-  maybe_print_thread_hit_breakpoint (uiout);
-  if (b->disposition == disp_del)
-    uiout->text ("Temporary catchpoint ");
-  else
-    uiout->text ("Catchpoint ");
-  uiout->field_signed ("bkptno", b->number);
-  uiout->text ("\n");
-  if (uiout->is_mi_like_p ())
-    uiout->field_string ("disp", bpdisp_text (b->disposition));
-  print_solib_event (1);
-  return PRINT_SRC_AND_LOC;
-}
-
-static void
-print_one_catch_solib (struct breakpoint *b, struct bp_location **locs)
-{
-  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
-  struct value_print_options opts;
-  struct ui_out *uiout = current_uiout;
-
-  get_user_print_options (&opts);
-  /* Field 4, the address, is omitted (which makes the columns not
-     line up too nicely with the headers, but the effect is relatively
-     readable).  */
-  if (opts.addressprint)
-    {
-      annotate_field (4);
-      uiout->field_skip ("addr");
-    }
-
-  std::string msg;
-  annotate_field (5);
-  if (self->is_load)
-    {
-      if (self->regex)
-	msg = string_printf (_("load of library matching %s"), self->regex);
-      else
-	msg = _("load of library");
+	notify_breakpoint_modified (&b);
     }
-  else
-    {
-      if (self->regex)
-	msg = string_printf (_("unload of library matching %s"), self->regex);
-      else
-	msg = _("unload of library");
-    }
-  uiout->field_string ("what", msg);
-
-  if (uiout->is_mi_like_p ())
-    uiout->field_string ("catch-type", self->is_load ? "load" : "unload");
-}
-
-static void
-print_mention_catch_solib (struct breakpoint *b)
-{
-  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
-
-  printf_filtered (_("Catchpoint %d (%s)"), b->number,
-		   self->is_load ? "load" : "unload");
-}
-
-static void
-print_recreate_catch_solib (struct breakpoint *b, struct ui_file *fp)
-{
-  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
-
-  fprintf_unfiltered (fp, "%s %s",
-		      b->disposition == disp_del ? "tcatch" : "catch",
-		      self->is_load ? "load" : "unload");
-  if (self->regex)
-    fprintf_unfiltered (fp, " %s", self->regex);
-  fprintf_unfiltered (fp, "\n");
 }
 
-static struct breakpoint_ops catch_solib_breakpoint_ops;
-
-/* Shared helper function (MI and CLI) for creating and installing
-   a shared object event catchpoint.  If IS_LOAD is non-zero then
-   the events to be caught are load events, otherwise they are
-   unload events.  If IS_TEMP is non-zero the catchpoint is a
-   temporary one.  If ENABLED is non-zero the catchpoint is
-   created in an enabled state.  */
+/* See breakpoint.h.  */
 
-void
-add_solib_catchpoint (const char *arg, int is_load, int is_temp, int enabled)
+breakpoint::breakpoint (struct gdbarch *gdbarch_, enum bptype bptype,
+			bool temp, const char *cond_string_)
+  : type (bptype),
+    disposition (temp ? disp_del : disp_donttouch),
+    gdbarch (gdbarch_),
+    language (current_language->la_language),
+    input_radix (::input_radix),
+    cond_string (cond_string_ != nullptr
+		 ? make_unique_xstrdup (cond_string_)
+		 : nullptr),
+    related_breakpoint (this)
 {
-  struct gdbarch *gdbarch = get_current_arch ();
-
-  if (!arg)
-    arg = "";
-  arg = skip_spaces (arg);
-
-  std::unique_ptr<solib_catchpoint> c (new solib_catchpoint ());
-
-  if (*arg != '\0')
-    {
-      c->compiled.reset (new compiled_regex (arg, REG_NOSUB,
-					     _("Invalid regexp")));
-      c->regex = xstrdup (arg);
-    }
-
-  c->is_load = is_load;
-  init_catchpoint (c.get (), gdbarch, is_temp, NULL,
-		   &catch_solib_breakpoint_ops);
-
-  c->enable_state = enabled ? bp_enabled : bp_disabled;
-
-  install_breakpoint (0, std::move (c), 1);
 }
 
-/* A helper function that does all the work for "catch load" and
-   "catch unload".  */
+/* See breakpoint.h.  */
 
-static void
-catch_load_or_unload (const char *arg, int from_tty, int is_load,
-		      struct cmd_list_element *command)
+catchpoint::catchpoint (struct gdbarch *gdbarch, bool temp,
+			const char *cond_string)
+  : breakpoint (gdbarch, bp_catchpoint, temp, cond_string)
 {
-  int tempflag;
-  const int enabled = 1;
+  add_dummy_location (this, current_program_space);
 
-  tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
-
-  add_solib_catchpoint (arg, is_load, tempflag, enabled);
+  pspace = current_program_space;
 }
 
-static void
-catch_load_command_1 (const char *arg, int from_tty,
-		      struct cmd_list_element *command)
-{
-  catch_load_or_unload (arg, from_tty, 1, command);
-}
+/* Notify interpreters and observers that breakpoint B was created.  */
 
 static void
-catch_unload_command_1 (const char *arg, int from_tty,
-			struct cmd_list_element *command)
+notify_breakpoint_created (breakpoint *b)
 {
-  catch_load_or_unload (arg, from_tty, 0, command);
-}
-
-/* Initialize a new breakpoint of the bp_catchpoint kind.  If TEMPFLAG
-   is non-zero, then make the breakpoint temporary.  If COND_STRING is
-   not NULL, then store it in the breakpoint.  OPS, if not NULL, is
-   the breakpoint_ops structure associated to the catchpoint.  */
-
-void
-init_catchpoint (struct breakpoint *b,
-		 struct gdbarch *gdbarch, int tempflag,
-		 const char *cond_string,
-		 const struct breakpoint_ops *ops)
-{
-  symtab_and_line sal;
-  sal.pspace = current_program_space;
-
-  init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint, ops);
-
-  b->cond_string = (cond_string == NULL) ? NULL : xstrdup (cond_string);
-  b->disposition = tempflag ? disp_del : disp_donttouch;
+  interps_notify_breakpoint_created (b);
+  gdb::observers::breakpoint_created.notify (b);
 }
 
-void
+breakpoint *
 install_breakpoint (int internal, std::unique_ptr<breakpoint> &&arg, int update_gll)
 {
   breakpoint *b = add_to_breakpoint_chain (std::move (arg));
@@ -8136,163 +8171,28 @@ install_breakpoint (int internal, std::u
     set_tracepoint_count (breakpoint_count);
   if (!internal)
     mention (b);
-  gdb::observers::breakpoint_created.notify (b);
+
+  notify_breakpoint_created (b);
 
   if (update_gll)
     update_global_location_list (UGLL_MAY_INSERT);
-}
-
-static void
-create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
-				    int tempflag, const char *cond_string,
-                                    const struct breakpoint_ops *ops)
-{
-  std::unique_ptr<fork_catchpoint> c (new fork_catchpoint ());
-
-  init_catchpoint (c.get (), gdbarch, tempflag, cond_string, ops);
-
-  c->forked_inferior_pid = null_ptid;
-
-  install_breakpoint (0, std::move (c), 1);
-}
-
-/* Exec catchpoints.  */
-
-/* An instance of this type is used to represent an exec catchpoint.
-   A breakpoint is really of this type iff its ops pointer points to
-   CATCH_EXEC_BREAKPOINT_OPS.  */
-
-struct exec_catchpoint : public breakpoint
-{
-  ~exec_catchpoint () override;
-
-  /* Filename of a program whose exec triggered this catchpoint.
-     This field is only valid immediately after this catchpoint has
-     triggered.  */
-  char *exec_pathname;
-};
-
-/* Exec catchpoint destructor.  */
-
-exec_catchpoint::~exec_catchpoint ()
-{
-  xfree (this->exec_pathname);
-}
-
-static int
-insert_catch_exec (struct bp_location *bl)
-{
-  return target_insert_exec_catchpoint (inferior_ptid.pid ());
-}
-
-static int
-remove_catch_exec (struct bp_location *bl, enum remove_bp_reason reason)
-{
-  return target_remove_exec_catchpoint (inferior_ptid.pid ());
-}
-
-static int
-breakpoint_hit_catch_exec (const struct bp_location *bl,
-			   const address_space *aspace, CORE_ADDR bp_addr,
-			   const struct target_waitstatus *ws)
-{
-  struct exec_catchpoint *c = (struct exec_catchpoint *) bl->owner;
-
-  if (ws->kind != TARGET_WAITKIND_EXECD)
-    return 0;
-
-  c->exec_pathname = xstrdup (ws->value.execd_pathname);
-  return 1;
-}
-
-static enum print_stop_action
-print_it_catch_exec (bpstat bs)
-{
-  struct ui_out *uiout = current_uiout;
-  struct breakpoint *b = bs->breakpoint_at;
-  struct exec_catchpoint *c = (struct exec_catchpoint *) b;
-
-  annotate_catchpoint (b->number);
-  maybe_print_thread_hit_breakpoint (uiout);
-  if (b->disposition == disp_del)
-    uiout->text ("Temporary catchpoint ");
-  else
-    uiout->text ("Catchpoint ");
-  if (uiout->is_mi_like_p ())
-    {
-      uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_EXEC));
-      uiout->field_string ("disp", bpdisp_text (b->disposition));
-    }
-  uiout->field_signed ("bkptno", b->number);
-  uiout->text (" (exec'd ");
-  uiout->field_string ("new-exec", c->exec_pathname);
-  uiout->text ("), ");
-
-  return PRINT_SRC_AND_LOC;
-}
-
-static void
-print_one_catch_exec (struct breakpoint *b, struct bp_location **last_loc)
-{
-  struct exec_catchpoint *c = (struct exec_catchpoint *) b;
-  struct value_print_options opts;
-  struct ui_out *uiout = current_uiout;
-
-  get_user_print_options (&opts);
-
-  /* Field 4, the address, is omitted (which makes the columns
-     not line up too nicely with the headers, but the effect
-     is relatively readable).  */
-  if (opts.addressprint)
-    uiout->field_skip ("addr");
-  annotate_field (5);
-  uiout->text ("exec");
-  if (c->exec_pathname != NULL)
-    {
-      uiout->text (", program \"");
-      uiout->field_string ("what", c->exec_pathname);
-      uiout->text ("\" ");
-    }
-
-  if (uiout->is_mi_like_p ())
-    uiout->field_string ("catch-type", "exec");
-}
 
-static void
-print_mention_catch_exec (struct breakpoint *b)
-{
-  printf_filtered (_("Catchpoint %d (exec)"), b->number);
-}
-
-/* Implement the "print_recreate" breakpoint_ops method for exec
-   catchpoints.  */
-
-static void
-print_recreate_catch_exec (struct breakpoint *b, struct ui_file *fp)
-{
-  fprintf_unfiltered (fp, "catch exec");
-  print_recreate_thread (b, fp);
+  return b;
 }
 
-static struct breakpoint_ops catch_exec_breakpoint_ops;
-
 static int
 hw_breakpoint_used_count (void)
 {
   int i = 0;
-  struct breakpoint *b;
-  struct bp_location *bl;
 
-  ALL_BREAKPOINTS (b)
-  {
-    if (b->type == bp_hardware_breakpoint && breakpoint_enabled (b))
-      for (bl = b->loc; bl; bl = bl->next)
+  for (breakpoint &b : all_breakpoints ())
+    if (b.type == bp_hardware_breakpoint && breakpoint_enabled (&b))
+      for (bp_location &bl : b.locations ())
 	{
 	  /* Special types of hardware breakpoints may use more than
 	     one register.  */
-	  i += b->ops->resources_needed (bl);
+	  i += b.resources_needed (&bl);
 	}
-  }
 
   return i;
 }
@@ -8304,16 +8204,15 @@ static int
 hw_watchpoint_use_count (struct breakpoint *b)
 {
   int i = 0;
-  struct bp_location *bl;
 
   if (!breakpoint_enabled (b))
     return 0;
 
-  for (bl = b->loc; bl; bl = bl->next)
+  for (bp_location &bl : b->locations ())
     {
       /* Special types of hardware watchpoints may use more than
 	 one register.  */
-      i += b->ops->resources_needed (bl);
+      i += b->resources_needed (&bl);
     }
 
   return i;
@@ -8329,19 +8228,18 @@ hw_watchpoint_used_count_others (struct
 				 enum bptype type, int *other_type_used)
 {
   int i = 0;
-  struct breakpoint *b;
 
   *other_type_used = 0;
-  ALL_BREAKPOINTS (b)
+  for (breakpoint &b : all_breakpoints ())
     {
-      if (b == except)
+      if (&b == except)
 	continue;
-      if (!breakpoint_enabled (b))
+      if (!breakpoint_enabled (&b))
 	continue;
 
-      if (b->type == type)
-	i += hw_watchpoint_use_count (b);
-      else if (is_hardware_watchpoint (b))
+      if (b.type == type)
+	i += hw_watchpoint_use_count (&b);
+      else if (is_hardware_watchpoint (&b))
 	*other_type_used = 1;
     }
 
@@ -8351,31 +8249,23 @@ hw_watchpoint_used_count_others (struct
 void
 disable_watchpoints_before_interactive_call_start (void)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-  {
-    if (is_watchpoint (b) && breakpoint_enabled (b))
+  for (breakpoint &b : all_breakpoints ())
+    if (is_watchpoint (&b) && breakpoint_enabled (&b))
       {
-	b->enable_state = bp_call_disabled;
+	b.enable_state = bp_call_disabled;
 	update_global_location_list (UGLL_DONT_INSERT);
       }
-  }
 }
 
 void
 enable_watchpoints_after_interactive_call_stop (void)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-  {
-    if (is_watchpoint (b) && b->enable_state == bp_call_disabled)
+  for (breakpoint &b : all_breakpoints ())
+    if (is_watchpoint (&b) && b.enable_state == bp_call_disabled)
       {
-	b->enable_state = bp_enabled;
+	b.enable_state = bp_enabled;
 	update_global_location_list (UGLL_MAY_INSERT);
       }
-  }
 }
 
 void
@@ -8392,24 +8282,19 @@ enable_breakpoints_after_startup (void)
   breakpoint_re_set ();
 }
 
-/* Create a new single-step breakpoint for thread THREAD, with no
-   locations.  */
+/* Allocate a new momentary breakpoint.  */
 
-static struct breakpoint *
-new_single_step_breakpoint (int thread, struct gdbarch *gdbarch)
-{
-  std::unique_ptr<breakpoint> b (new breakpoint ());
-
-  init_raw_breakpoint_without_location (b.get (), gdbarch, bp_single_step,
-					&momentary_breakpoint_ops);
-
-  b->disposition = disp_donttouch;
-  b->frame_id = null_frame_id;
-
-  b->thread = thread;
-  gdb_assert (b->thread != 0);
-
-  return add_to_breakpoint_chain (std::move (b));
+template<typename... Arg>
+static momentary_breakpoint *
+new_momentary_breakpoint (struct gdbarch *gdbarch, enum bptype type,
+			  Arg&&... args)
+{
+  if (type == bp_longjmp || type == bp_exception)
+    return new longjmp_breakpoint (gdbarch, type,
+				   std::forward<Arg> (args)...);
+  else
+    return new momentary_breakpoint (gdbarch, type,
+				     std::forward<Arg> (args)...);
 }
 
 /* Set a momentary breakpoint of type TYPE at address specified by
@@ -8420,22 +8305,21 @@ breakpoint_up
 set_momentary_breakpoint (struct gdbarch *gdbarch, struct symtab_and_line sal,
 			  struct frame_id frame_id, enum bptype type)
 {
-  struct breakpoint *b;
-
   /* If FRAME_ID is valid, it should be a real frame, not an inlined or
      tail-called one.  */
   gdb_assert (!frame_id_artificial_p (frame_id));
 
-  b = set_raw_breakpoint (gdbarch, sal, type, &momentary_breakpoint_ops);
-  b->enable_state = bp_enabled;
-  b->disposition = disp_donttouch;
-  b->frame_id = frame_id;
+  std::unique_ptr<momentary_breakpoint> b
+    (new_momentary_breakpoint (gdbarch, type, sal.pspace, frame_id,
+			       inferior_thread ()->global_num));
 
-  b->thread = inferior_thread ()->global_num;
+  b->add_location (sal);
+
+  breakpoint_up bp (add_to_breakpoint_chain (std::move (b)));
 
   update_global_location_list_nothrow (UGLL_MAY_INSERT);
 
-  return breakpoint_up (b);
+  return bp;
 }
 
 /* Make a momentary breakpoint based on the master breakpoint ORIG.
@@ -8445,34 +8329,30 @@ set_momentary_breakpoint (struct gdbarch
 static struct breakpoint *
 momentary_breakpoint_from_master (struct breakpoint *orig,
 				  enum bptype type,
-				  const struct breakpoint_ops *ops,
-				  int loc_enabled)
+				  int loc_enabled,
+				  int thread)
 {
-  struct breakpoint *copy;
-
-  copy = set_raw_breakpoint_without_location (orig->gdbarch, type, ops);
-  copy->loc = allocate_bp_location (copy);
-  set_breakpoint_location_function (copy->loc);
-
-  copy->loc->gdbarch = orig->loc->gdbarch;
-  copy->loc->requested_address = orig->loc->requested_address;
-  copy->loc->address = orig->loc->address;
-  copy->loc->section = orig->loc->section;
-  copy->loc->pspace = orig->loc->pspace;
-  copy->loc->probe = orig->loc->probe;
-  copy->loc->line_number = orig->loc->line_number;
-  copy->loc->symtab = orig->loc->symtab;
-  copy->loc->enabled = loc_enabled;
-  copy->frame_id = orig->frame_id;
-  copy->thread = orig->thread;
-  copy->pspace = orig->pspace;
-
-  copy->enable_state = bp_enabled;
-  copy->disposition = disp_donttouch;
-  copy->number = internal_breakpoint_number--;
+  std::unique_ptr<breakpoint> copy
+    (new_momentary_breakpoint (orig->gdbarch, type, orig->pspace,
+			       orig->frame_id, thread));
+  const bp_location &orig_loc = orig->first_loc ();
+  bp_location *copy_loc = copy->allocate_location ();
+  copy->add_location (*copy_loc);
+  set_breakpoint_location_function (copy_loc);
+
+  copy_loc->gdbarch = orig_loc.gdbarch;
+  copy_loc->requested_address = orig_loc.requested_address;
+  copy_loc->address = orig_loc.address;
+  copy_loc->section = orig_loc.section;
+  copy_loc->pspace = orig_loc.pspace;
+  copy_loc->probe = orig_loc.probe;
+  copy_loc->line_number = orig_loc.line_number;
+  copy_loc->symtab = orig_loc.symtab;
+  copy_loc->enabled = loc_enabled;
 
+  breakpoint *b = add_to_breakpoint_chain (std::move (copy));
   update_global_location_list_nothrow (UGLL_DONT_INSERT);
-  return copy;
+  return b;
 }
 
 /* Make a deep copy of momentary breakpoint ORIG.  Returns NULL if
@@ -8485,7 +8365,8 @@ clone_momentary_breakpoint (struct break
   if (orig == NULL)
     return NULL;
 
-  return momentary_breakpoint_from_master (orig, orig->type, orig->ops, 0);
+  return momentary_breakpoint_from_master (orig, orig->type, 0,
+					   orig->thread);
 }
 
 breakpoint_up
@@ -8506,58 +8387,108 @@ set_momentary_breakpoint_at_pc (struct g
 /* Tell the user we have just set a breakpoint B.  */
 
 static void
-mention (struct breakpoint *b)
+mention (const breakpoint *b)
 {
-  b->ops->print_mention (b);
+  b->print_mention ();
   current_uiout->text ("\n");
 }
 
 
-static int bp_loc_is_permanent (struct bp_location *loc);
+static bool bp_loc_is_permanent (struct bp_location *loc);
 
-static struct bp_location *
-add_location_to_breakpoint (struct breakpoint *b,
-			    const struct symtab_and_line *sal)
+/* Handle "set breakpoint auto-hw on".
+
+   If the explicitly specified breakpoint type is not hardware
+   breakpoint, check the memory map to see whether the breakpoint
+   address is in read-only memory.
+
+   - location type is not hardware breakpoint, memory is read-only.
+   We change the type of the location to hardware breakpoint.
+
+   - location type is hardware breakpoint, memory is read-write.  This
+   means we've previously made the location hardware one, but then the
+   memory map changed, so we undo.
+*/
+
+static void
+handle_automatic_hardware_breakpoints (bp_location *bl)
+{
+  if (automatic_hardware_breakpoints
+      && bl->owner->type != bp_hardware_breakpoint
+      && (bl->loc_type == bp_loc_software_breakpoint
+	  || bl->loc_type == bp_loc_hardware_breakpoint))
+    {
+      /* When breakpoints are removed, remove_breakpoints will use
+	 location types we've just set here, the only possible problem
+	 is that memory map has changed during running program, but
+	 it's not going to work anyway with current gdb.  */
+      mem_region *mr = lookup_mem_region (bl->address);
+
+      if (mr != nullptr)
+	{
+	  enum bp_loc_type new_type;
+
+	  if (mr->attrib.mode != MEM_RW)
+	    new_type = bp_loc_hardware_breakpoint;
+	  else
+	    new_type = bp_loc_software_breakpoint;
+
+	  if (new_type != bl->loc_type)
+	    {
+	      static bool said = false;
+
+	      bl->loc_type = new_type;
+	      if (!said)
+		{
+		  gdb_printf (_("Note: automatically using "
+				"hardware breakpoints for "
+				"read-only addresses.\n"));
+		  said = true;
+		}
+	    }
+	}
+    }
+}
+
+bp_location *
+code_breakpoint::add_location (const symtab_and_line &sal)
 {
-  struct bp_location *loc, **tmp;
   CORE_ADDR adjusted_address;
-  struct gdbarch *loc_gdbarch = get_sal_arch (*sal);
+  struct gdbarch *loc_gdbarch = get_sal_arch (sal);
 
   if (loc_gdbarch == NULL)
-    loc_gdbarch = b->gdbarch;
+    loc_gdbarch = gdbarch;
 
   /* Adjust the breakpoint's address prior to allocating a location.
-     Once we call allocate_bp_location(), that mostly uninitialized
+     Once we call allocate_location(), that mostly uninitialized
      location will be placed on the location chain.  Adjustment of the
      breakpoint may cause target_read_memory() to be called and we do
      not want its scan of the location chain to find a breakpoint and
      location that's only been partially initialized.  */
   adjusted_address = adjust_breakpoint_address (loc_gdbarch,
-						sal->pc, b->type);
+						sal.pc, type,
+						sal.pspace);
 
   /* Sort the locations by their ADDRESS.  */
-  loc = allocate_bp_location (b);
-  for (tmp = &(b->loc); *tmp != NULL && (*tmp)->address <= adjusted_address;
-       tmp = &((*tmp)->next))
-    ;
-  loc->next = *tmp;
-  *tmp = loc;
-
-  loc->requested_address = sal->pc;
-  loc->address = adjusted_address;
-  loc->pspace = sal->pspace;
-  loc->probe.prob = sal->prob;
-  loc->probe.objfile = sal->objfile;
-  gdb_assert (loc->pspace != NULL);
-  loc->section = sal->section;
-  loc->gdbarch = loc_gdbarch;
-  loc->line_number = sal->line;
-  loc->symtab = sal->symtab;
-  loc->symbol = sal->symbol;
-  loc->msymbol = sal->msymbol;
-  loc->objfile = sal->objfile;
+  bp_location *new_loc = this->allocate_location ();
 
-  set_breakpoint_location_function (loc);
+  new_loc->requested_address = sal.pc;
+  new_loc->address = adjusted_address;
+  new_loc->pspace = sal.pspace;
+  new_loc->probe.prob = sal.prob;
+  new_loc->probe.objfile = sal.objfile;
+  gdb_assert (new_loc->pspace != NULL);
+  new_loc->section = sal.section;
+  new_loc->gdbarch = loc_gdbarch;
+  new_loc->line_number = sal.line;
+  new_loc->symtab = sal.symtab;
+  new_loc->symbol = sal.symbol;
+  new_loc->msymbol = sal.msymbol;
+  new_loc->objfile = sal.objfile;
+
+  breakpoint::add_location (*new_loc);
+
+  set_breakpoint_location_function (new_loc);
 
   /* While by definition, permanent breakpoints are already present in the
      code, we don't mark the location as inserted.  Normally one would expect
@@ -8572,49 +8503,17 @@ add_location_to_breakpoint (struct break
      (If GDB later needs to continue execution past the permanent breakpoint,
      it manually increments the PC, thus avoiding executing the breakpoint
      instruction.)  */
-  if (bp_loc_is_permanent (loc))
-    loc->permanent = 1;
+  if (bp_loc_is_permanent (new_loc))
+    new_loc->permanent = 1;
 
-  return loc;
+  return new_loc;
 }
 
 
-/* See breakpoint.h.  */
-
-int
-program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address)
-{
-  int len;
-  CORE_ADDR addr;
-  const gdb_byte *bpoint;
-  gdb_byte *target_mem;
-
-  addr = address;
-  bpoint = gdbarch_breakpoint_from_pc (gdbarch, &addr, &len);
-
-  /* Software breakpoints unsupported?  */
-  if (bpoint == NULL)
-    return 0;
-
-  target_mem = (gdb_byte *) alloca (len);
-
-  /* Enable the automatic memory restoration from breakpoints while
-     we read the memory.  Otherwise we could say about our temporary
-     breakpoints they are permanent.  */
-  scoped_restore restore_memory
-    = make_scoped_restore_show_memory_breakpoints (0);
-
-  if (target_read_memory (address, target_mem, len) == 0
-      && memcmp (target_mem, bpoint, len) == 0)
-    return 1;
+/* Return true if LOC is pointing to a permanent breakpoint,
+   return false otherwise.  */
 
-  return 0;
-}
-
-/* Return 1 if LOC is pointing to a permanent breakpoint,
-   return 0 otherwise.  */
-
-static int
+static bool
 bp_loc_is_permanent (struct bp_location *loc)
 {
   gdb_assert (loc != NULL);
@@ -8622,14 +8521,14 @@ bp_loc_is_permanent (struct bp_location
   /* If we have a non-breakpoint-backed catchpoint or a software
      watchpoint, just return 0.  We should not attempt to read from
      the addresses the locations of these breakpoint types point to.
-     program_breakpoint_here_p, below, will attempt to read
+     gdbarch_program_breakpoint_here_p, below, will attempt to read
      memory.  */
   if (!bl_address_is_meaningful (loc))
-    return 0;
+    return false;
 
   scoped_restore_current_pspace_and_thread restore_pspace_thread;
   switch_to_program_space_and_thread (loc->pspace);
-  return program_breakpoint_here_p (loc->gdbarch, loc->address);
+  return gdbarch_program_breakpoint_here_p (loc->gdbarch, loc->address);
 }
 
 /* Build a command list for the dprintf corresponding to the current
@@ -8638,8 +8537,8 @@ bp_loc_is_permanent (struct bp_location
 static void
 update_dprintf_command_list (struct breakpoint *b)
 {
-  char *dprintf_args = b->extra_string;
-  char *printf_line = NULL;
+  const char *dprintf_args = b->extra_string.get ();
+  gdb::unique_xmalloc_ptr<char> printf_line = nullptr;
 
   if (!dprintf_args)
     return;
@@ -8659,17 +8558,17 @@ update_dprintf_command_list (struct brea
     printf_line = xstrprintf ("printf %s", dprintf_args);
   else if (strcmp (dprintf_style, dprintf_style_call) == 0)
     {
-      if (!dprintf_function)
+      if (dprintf_function.empty ())
 	error (_("No function supplied for dprintf call"));
 
-      if (dprintf_channel && strlen (dprintf_channel) > 0)
+      if (!dprintf_channel.empty ())
 	printf_line = xstrprintf ("call (void) %s (%s,%s)",
-				  dprintf_function,
-				  dprintf_channel,
+				  dprintf_function.c_str (),
+				  dprintf_channel.c_str (),
 				  dprintf_args);
       else
 	printf_line = xstrprintf ("call (void) %s (%s)",
-				  dprintf_function,
+				  dprintf_function.c_str (),
 				  dprintf_args);
     }
   else if (strcmp (dprintf_style, dprintf_style_agent) == 0)
@@ -8683,14 +8582,13 @@ update_dprintf_command_list (struct brea
 	}
     }
   else
-    internal_error (__FILE__, __LINE__,
-		    _("Invalid dprintf style."));
+    internal_error (_("Invalid dprintf style."));
 
   gdb_assert (printf_line != NULL);
 
   /* Manufacture a printf sequence.  */
   struct command_line *printf_cmd_line
-    = new struct command_line (simple_control, printf_line);
+    = new struct command_line (simple_control, printf_line.release ());
   breakpoint_set_commands (b, counted_command_line (printf_cmd_line,
 						    command_lines_deleter ()));
 }
@@ -8702,32 +8600,25 @@ static void
 update_dprintf_commands (const char *args, int from_tty,
 			 struct cmd_list_element *c)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-    {
-      if (b->type == bp_dprintf)
-	update_dprintf_command_list (b);
-    }
-}
-
-/* Create a breakpoint with SAL as location.  Use LOCATION
-   as a description of the location, and COND_STRING
-   as condition expression.  If LOCATION is NULL then create an
-   "address location" from the address in the SAL.  */
-
-static void
-init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
-		     gdb::array_view<const symtab_and_line> sals,
-		     event_location_up &&location,
-		     gdb::unique_xmalloc_ptr<char> filter,
-		     gdb::unique_xmalloc_ptr<char> cond_string,
-		     gdb::unique_xmalloc_ptr<char> extra_string,
-		     enum bptype type, enum bpdisp disposition,
-		     int thread, int task, int ignore_count,
-		     const struct breakpoint_ops *ops, int from_tty,
-		     int enabled, int internal, unsigned flags,
-		     int display_canonical)
+  for (breakpoint &b : all_breakpoints ())
+    if (b.type == bp_dprintf)
+	update_dprintf_command_list (&b);
+}
+
+code_breakpoint::code_breakpoint (struct gdbarch *gdbarch_,
+				  enum bptype type_,
+				  gdb::array_view<const symtab_and_line> sals,
+				  location_spec_up &&locspec_,
+				  gdb::unique_xmalloc_ptr<char> filter_,
+				  gdb::unique_xmalloc_ptr<char> cond_string_,
+				  gdb::unique_xmalloc_ptr<char> extra_string_,
+				  enum bpdisp disposition_,
+				  int thread_, int task_, int inferior_,
+				  int ignore_count_,
+				  int from_tty,
+				  int enabled_, unsigned flags,
+				  int display_canonical_)
+  : breakpoint (gdbarch_, type_)
 {
   int i;
 
@@ -8747,136 +8638,133 @@ init_breakpoint_sal (struct breakpoint *
 
   gdb_assert (!sals.empty ());
 
-  for (const auto &sal : sals)
-    {
-      struct bp_location *loc;
-
-      if (from_tty)
-	{
-	  struct gdbarch *loc_gdbarch = get_sal_arch (sal);
-	  if (!loc_gdbarch)
-	    loc_gdbarch = gdbarch;
+  /* At most one of thread, task, or inferior can be set on any breakpoint.  */
+  gdb_assert (((thread == -1 ? 0 : 1)
+	       + (task == -1 ? 0 : 1)
+	       + (inferior == -1 ? 0 : 1)) <= 1);
 
-	  describe_other_breakpoints (loc_gdbarch,
-				      sal.pspace, sal.pc, sal.section, thread);
-	}
+  thread = thread_;
+  task = task_;
+  inferior = inferior_;
 
-      if (&sal == &sals[0])
-	{
-	  init_raw_breakpoint (b, gdbarch, sal, type, ops);
-	  b->thread = thread;
-	  b->task = task;
-
-	  b->cond_string = cond_string.release ();
-	  b->extra_string = extra_string.release ();
-	  b->ignore_count = ignore_count;
-	  b->enable_state = enabled ? bp_enabled : bp_disabled;
-	  b->disposition = disposition;
-
-	  if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
-	    b->loc->inserted = 1;
-
-	  if (type == bp_static_tracepoint)
-	    {
-	      struct tracepoint *t = (struct tracepoint *) b;
-	      struct static_tracepoint_marker marker;
+  cond_string = std::move (cond_string_);
+  extra_string = std::move (extra_string_);
+  ignore_count = ignore_count_;
+  enable_state = enabled_ ? bp_enabled : bp_disabled;
+  disposition = disposition_;
 
-	      if (strace_marker_p (b))
-		{
-		  /* We already know the marker exists, otherwise, we
-		     wouldn't see a sal for it.  */
-		  const char *p
-		    = &event_location_to_string (b->location.get ())[3];
-		  const char *endp;
-
-		  p = skip_spaces (p);
+  if (type == bp_static_tracepoint
+      || type == bp_static_marker_tracepoint)
+    {
+      auto *t = gdb::checked_static_cast<tracepoint *> (this);
+      struct static_tracepoint_marker marker;
 
-		  endp = skip_to_space (p);
+      if (strace_marker_p (this))
+	{
+	  /* We already know the marker exists, otherwise, we wouldn't
+	     see a sal for it.  */
+	  const char *p = &locspec_->to_string ()[3];
+	  const char *endp;
 
-		  t->static_trace_marker_id.assign (p, endp - p);
+	  p = skip_spaces (p);
 
-		  printf_filtered (_("Probed static tracepoint "
-				     "marker \"%s\"\n"),
-				   t->static_trace_marker_id.c_str ());
-		}
-	      else if (target_static_tracepoint_marker_at (sal.pc, &marker))
-		{
-		  t->static_trace_marker_id = std::move (marker.str_id);
+	  endp = skip_to_space (p);
 
-		  printf_filtered (_("Probed static tracepoint "
-				     "marker \"%s\"\n"),
-				   t->static_trace_marker_id.c_str ());
-		}
-	      else
-		warning (_("Couldn't determine the static "
-			   "tracepoint marker to probe"));
-	    }
+	  t->static_trace_marker_id.assign (p, endp - p);
 
-	  loc = b->loc;
+	  gdb_printf (_("Probed static tracepoint marker \"%s\"\n"),
+		      t->static_trace_marker_id.c_str ());
 	}
-      else
+      else if (target_static_tracepoint_marker_at (sals[0].pc, &marker))
 	{
-	  loc = add_location_to_breakpoint (b, &sal);
-	  if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
-	    loc->inserted = 1;
+	  t->static_trace_marker_id = std::move (marker.str_id);
+
+	  gdb_printf (_("Probed static tracepoint marker \"%s\"\n"),
+		      t->static_trace_marker_id.c_str ());
 	}
+      else
+	warning (_("Couldn't determine the static tracepoint marker to probe"));
+    }
 
-      if (b->cond_string)
+  for (const auto &sal : sals)
+    {
+      if (from_tty)
 	{
-	  const char *arg = b->cond_string;
+	  struct gdbarch *loc_gdbarch = get_sal_arch (sal);
+	  if (loc_gdbarch == nullptr)
+	    loc_gdbarch = gdbarch;
 
-	  loc->cond = parse_exp_1 (&arg, loc->address,
-				   block_for_pc (loc->address), 0);
-	  if (*arg)
-              error (_("Garbage '%s' follows condition"), arg);
+	  describe_other_breakpoints (loc_gdbarch,
+				      sal.pspace, sal.pc, sal.section, thread);
 	}
 
+      bp_location *new_loc = add_location (sal);
+      if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
+	new_loc->inserted = 1;
+
+      /* Do not set breakpoint locations conditions yet.  As locations
+	 are inserted, they get sorted based on their addresses.  Let
+	 the list stabilize to have reliable location numbers.  */
+
       /* Dynamic printf requires and uses additional arguments on the
 	 command line, otherwise it's an error.  */
       if (type == bp_dprintf)
 	{
-	  if (b->extra_string)
-	    update_dprintf_command_list (b);
+	  if (extra_string != nullptr)
+	    update_dprintf_command_list (this);
 	  else
 	    error (_("Format string required"));
 	}
-      else if (b->extra_string)
-	error (_("Garbage '%s' at end of command"), b->extra_string);
+      else if (extra_string != nullptr)
+	error (_("Garbage '%s' at end of command"), extra_string.get ());
+    }
+
+  /* The order of the locations is now stable.  Set the location
+     condition using the location's number.  */
+  int loc_num = 1;
+  for (bp_location &bl : locations ())
+    {
+      if (cond_string != nullptr)
+	set_breakpoint_location_condition (cond_string.get (), &bl,
+					   number, loc_num);
+
+      ++loc_num;
     }
 
-  b->display_canonical = display_canonical;
-  if (location != NULL)
-    b->location = std::move (location);
+  display_canonical = display_canonical_;
+  if (locspec_ != nullptr)
+    locspec = std::move (locspec_);
   else
-    b->location = new_address_location (b->loc->address, NULL, 0);
-  b->filter = std::move (filter);
+    locspec = new_address_location_spec (this->first_loc ().address, NULL, 0);
+  filter = std::move (filter_);
 }
 
 static void
 create_breakpoint_sal (struct gdbarch *gdbarch,
 		       gdb::array_view<const symtab_and_line> sals,
-		       event_location_up &&location,
+		       location_spec_up &&locspec,
 		       gdb::unique_xmalloc_ptr<char> filter,
 		       gdb::unique_xmalloc_ptr<char> cond_string,
 		       gdb::unique_xmalloc_ptr<char> extra_string,
 		       enum bptype type, enum bpdisp disposition,
-		       int thread, int task, int ignore_count,
-		       const struct breakpoint_ops *ops, int from_tty,
+		       int thread, int task, int inferior, int ignore_count,
+		       int from_tty,
 		       int enabled, int internal, unsigned flags,
 		       int display_canonical)
 {
-  std::unique_ptr<breakpoint> b = new_breakpoint_from_type (type);
-
-  init_breakpoint_sal (b.get (), gdbarch,
-		       sals, std::move (location),
-		       std::move (filter),
-		       std::move (cond_string),
-		       std::move (extra_string),
-		       type, disposition,
-		       thread, task, ignore_count,
-		       ops, from_tty,
-		       enabled, internal, flags,
-		       display_canonical);
+  std::unique_ptr<code_breakpoint> b
+    = new_breakpoint_from_type (gdbarch,
+				type,
+				sals,
+				std::move (locspec),
+				std::move (filter),
+				std::move (cond_string),
+				std::move (extra_string),
+				disposition,
+				thread, task, inferior, ignore_count,
+				from_tty,
+				enabled, flags,
+				display_canonical);
 
   install_breakpoint (internal, std::move (b), 0);
 }
@@ -8902,8 +8790,9 @@ create_breakpoints_sal (struct gdbarch *
 			gdb::unique_xmalloc_ptr<char> cond_string,
 			gdb::unique_xmalloc_ptr<char> extra_string,
 			enum bptype type, enum bpdisp disposition,
-			int thread, int task, int ignore_count,
-			const struct breakpoint_ops *ops, int from_tty,
+			int thread, int task, int inferior,
+			int ignore_count,
+			int from_tty,
 			int enabled, int internal, unsigned flags)
 {
   if (canonical->pre_expanded)
@@ -8913,41 +8802,43 @@ create_breakpoints_sal (struct gdbarch *
     {
       /* Note that 'location' can be NULL in the case of a plain
 	 'break', without arguments.  */
-      event_location_up location
-	= (canonical->location != NULL
-	   ? copy_event_location (canonical->location.get ()) : NULL);
+      location_spec_up locspec
+	= (canonical->locspec != nullptr
+	   ? canonical->locspec->clone ()
+	   : nullptr);
       gdb::unique_xmalloc_ptr<char> filter_string
 	(lsal.canonical != NULL ? xstrdup (lsal.canonical) : NULL);
 
       create_breakpoint_sal (gdbarch, lsal.sals,
-			     std::move (location),
+			     std::move (locspec),
 			     std::move (filter_string),
 			     std::move (cond_string),
 			     std::move (extra_string),
 			     type, disposition,
-			     thread, task, ignore_count, ops,
+			     thread, task, inferior, ignore_count,
 			     from_tty, enabled, internal, flags,
 			     canonical->special_display);
     }
 }
 
-/* Parse LOCATION which is assumed to be a SAL specification possibly
+/* Parse LOCSPEC which is assumed to be a SAL specification possibly
    followed by conditionals.  On return, SALS contains an array of SAL
-   addresses found.  LOCATION points to the end of the SAL (for
-   linespec locations).
+   addresses found.  LOCSPEC points to the end of the SAL (for
+   linespec locspecs).
 
    The array and the line spec strings are allocated on the heap, it is
    the caller's responsibility to free them.  */
 
 static void
-parse_breakpoint_sals (const struct event_location *location,
+parse_breakpoint_sals (location_spec *locspec,
 		       struct linespec_result *canonical)
 {
   struct symtab_and_line cursal;
 
-  if (event_location_type (location) == LINESPEC_LOCATION)
+  if (locspec->type () == LINESPEC_LOCATION_SPEC)
     {
-      const char *spec = get_linespec_location (location)->spec_string;
+      const char *spec
+	= as_linespec_location_spec (locspec)->spec_string.get ();
 
       if (spec == NULL)
 	{
@@ -8997,15 +8888,15 @@ parse_breakpoint_sals (const struct even
     {
       const char *spec = NULL;
 
-      if (event_location_type (location) == LINESPEC_LOCATION)
-	spec = get_linespec_location (location)->spec_string;
+      if (locspec->type () == LINESPEC_LOCATION_SPEC)
+	spec = as_linespec_location_spec (locspec)->spec_string.get ();
 
       if (!cursal.symtab
 	  || (spec != NULL
 	      && strchr ("+-", spec[0]) != NULL
 	      && spec[1] != '['))
 	{
-	  decode_line_full (location, DECODE_LINE_FUNFIRSTLINE, NULL,
+	  decode_line_full (locspec, DECODE_LINE_FUNFIRSTLINE, NULL,
 			    get_last_displayed_symtab (),
 			    get_last_displayed_line (),
 			    canonical, NULL, NULL);
@@ -9013,7 +8904,7 @@ parse_breakpoint_sals (const struct even
 	}
     }
 
-  decode_line_full (location, DECODE_LINE_FUNFIRSTLINE, NULL,
+  decode_line_full (locspec, DECODE_LINE_FUNFIRSTLINE, NULL,
 		    cursal.symtab, cursal.line, canonical, NULL, NULL);
 }
 
@@ -9055,22 +8946,29 @@ check_fast_tracepoint_sals (struct gdbar
     }
 }
 
-/* Given TOK, a string specification of condition and thread, as
-   accepted by the 'break' command, extract the condition
-   string and thread number and set *COND_STRING and *THREAD.
-   PC identifies the context at which the condition should be parsed.
-   If no condition is found, *COND_STRING is set to NULL.
-   If no thread is found, *THREAD is set to -1.  */
+/* Given TOK, a string specification of condition and thread, as accepted
+   by the 'break' command, extract the condition string into *COND_STRING.
+   If no condition string is found then *COND_STRING is set to nullptr.
+
+   If the breakpoint specification has an associated thread, task, or
+   inferior, these are extracted into *THREAD, *TASK, and *INFERIOR
+   respectively, otherwise these arguments are set to -1 (for THREAD and
+   INFERIOR) or 0 (for TASK).
+
+   PC identifies the context at which the condition should be parsed.  */
 
 static void
 find_condition_and_thread (const char *tok, CORE_ADDR pc,
-			   char **cond_string, int *thread, int *task,
-			   char **rest)
+			   gdb::unique_xmalloc_ptr<char> *cond_string,
+			   int *thread, int *inferior, int *task,
+			   gdb::unique_xmalloc_ptr<char> *rest)
 {
-  *cond_string = NULL;
+  cond_string->reset ();
   *thread = -1;
-  *task = 0;
-  *rest = NULL;
+  *inferior = -1;
+  *task = -1;
+  rest->reset ();
+  bool force = false;
 
   while (tok && *tok)
     {
@@ -9083,8 +8981,8 @@ find_condition_and_thread (const char *t
 
       if ((*tok == '"' || *tok == ',') && rest)
 	{
-	  *rest = savestring (tok, strlen (tok));
-	  return;
+	  rest->reset (savestring (tok, strlen (tok)));
+	  break;
 	}
 
       end_tok = skip_to_space (tok);
@@ -9094,15 +8992,39 @@ find_condition_and_thread (const char *t
       if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
 	{
 	  tok = cond_start = end_tok + 1;
-	  parse_exp_1 (&tok, pc, block_for_pc (pc), 0);
+	  try
+	    {
+	      parse_exp_1 (&tok, pc, block_for_pc (pc), 0);
+	    }
+	  catch (const gdb_exception_error &)
+	    {
+	      if (!force)
+		throw;
+	      else
+		tok = tok + strlen (tok);
+	    }
 	  cond_end = tok;
-	  *cond_string = savestring (cond_start, cond_end - cond_start);
+	  cond_string->reset (savestring (cond_start, cond_end - cond_start));
+	}
+      else if (toklen >= 1 && strncmp (tok, "-force-condition", toklen) == 0)
+	{
+	  tok = tok + toklen;
+	  force = true;
 	}
       else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
 	{
 	  const char *tmptok;
 	  struct thread_info *thr;
 
+	  if (*thread != -1)
+	    error(_("You can specify only one thread."));
+
+	  if (*task != -1)
+	    error (_("You can specify only one of thread or task."));
+
+	  if (*inferior != -1)
+	    error (_("You can specify only one of inferior or thread."));
+
 	  tok = end_tok + 1;
 	  thr = parse_thread_id (tok, &tmptok);
 	  if (tok == tmptok)
@@ -9110,10 +9032,39 @@ find_condition_and_thread (const char *t
 	  *thread = thr->global_num;
 	  tok = tmptok;
 	}
+      else if (toklen >= 1 && strncmp (tok, "inferior", toklen) == 0)
+	{
+	  if (*inferior != -1)
+	    error(_("You can specify only one inferior."));
+
+	  if (*task != -1)
+	    error (_("You can specify only one of inferior or task."));
+
+	  if (*thread != -1)
+	    error (_("You can specify only one of inferior or thread."));
+
+	  char *tmptok;
+	  tok = end_tok + 1;
+	  *inferior = strtol (tok, &tmptok, 0);
+	  if (tok == tmptok)
+	    error (_("Junk after inferior keyword."));
+	  if (!valid_global_inferior_id (*inferior))
+	    error (_("Unknown inferior number %d."), *inferior);
+	  tok = tmptok;
+	}
       else if (toklen >= 1 && strncmp (tok, "task", toklen) == 0)
 	{
 	  char *tmptok;
 
+	  if (*task != -1)
+	    error(_("You can specify only one task."));
+
+	  if (*thread != -1)
+	    error (_("You can specify only one of thread or task."));
+
+	  if (*inferior != -1)
+	    error (_("You can specify only one of inferior or task."));
+
 	  tok = end_tok + 1;
 	  *task = strtol (tok, &tmptok, 0);
 	  if (tok == tmptok)
@@ -9124,14 +9075,68 @@ find_condition_and_thread (const char *t
 	}
       else if (rest)
 	{
-	  *rest = savestring (tok, strlen (tok));
-	  return;
+	  rest->reset (savestring (tok, strlen (tok)));
+	  break;
 	}
       else
 	error (_("Junk at end of arguments."));
     }
 }
 
+/* Call 'find_condition_and_thread' for each sal in SALS until a parse
+   succeeds.  The parsed values are written to COND_STRING, THREAD,
+   TASK, and REST.  See the comment of 'find_condition_and_thread'
+   for the description of these parameters and INPUT.  */
+
+static void
+find_condition_and_thread_for_sals (const std::vector<symtab_and_line> &sals,
+				    const char *input,
+				    gdb::unique_xmalloc_ptr<char> *cond_string,
+				    int *thread, int *inferior, int *task,
+				    gdb::unique_xmalloc_ptr<char> *rest)
+{
+  int num_failures = 0;
+  for (auto &sal : sals)
+    {
+      gdb::unique_xmalloc_ptr<char> cond;
+      int thread_id = -1;
+      int inferior_id = -1;
+      int task_id = -1;
+      gdb::unique_xmalloc_ptr<char> remaining;
+
+      /* Here we want to parse 'arg' to separate condition from thread
+	 number.  But because parsing happens in a context and the
+	 contexts of sals might be different, try each until there is
+	 success.  Finding one successful parse is sufficient for our
+	 goal.  When setting the breakpoint we'll re-parse the
+	 condition in the context of each sal.  */
+      try
+	{
+	  find_condition_and_thread (input, sal.pc, &cond, &thread_id,
+				     &inferior_id, &task_id, &remaining);
+	  *cond_string = std::move (cond);
+	  /* A value of -1 indicates that these fields are unset.  At most
+	     one of these fields should be set (to a value other than -1)
+	     at this point.  */
+	  gdb_assert (((thread_id == -1 ? 1 : 0)
+		       + (task_id == -1 ? 1 : 0)
+		       + (inferior_id == -1 ? 1 : 0)) >= 2);
+	  *thread = thread_id;
+	  *inferior = inferior_id;
+	  *task = task_id;
+	  *rest = std::move (remaining);
+	  break;
+	}
+      catch (const gdb_exception_error &e)
+	{
+	  num_failures++;
+	  /* If no sal remains, do not continue.  */
+	  if (num_failures == sals.size ())
+	    throw;
+	}
+    }
+}
+
 /* Decode a static tracepoint marker spec.  */
 
 static std::vector<symtab_and_line>
@@ -9170,45 +9175,46 @@ decode_static_tracepoint_spec (const cha
    according to IS_TRACEPOINT.  */
 
 static const struct breakpoint_ops *
-breakpoint_ops_for_event_location_type (enum event_location_type location_type,
-					bool is_tracepoint)
+breakpoint_ops_for_location_spec_type (enum location_spec_type locspec_type,
+				       bool is_tracepoint)
 {
   if (is_tracepoint)
     {
-      if (location_type == PROBE_LOCATION)
+      if (locspec_type == PROBE_LOCATION_SPEC)
 	return &tracepoint_probe_breakpoint_ops;
       else
-	return &tracepoint_breakpoint_ops;
+	return &code_breakpoint_ops;
     }
   else
     {
-      if (location_type == PROBE_LOCATION)
+      if (locspec_type == PROBE_LOCATION_SPEC)
 	return &bkpt_probe_breakpoint_ops;
       else
-	return &bkpt_breakpoint_ops;
+	return &code_breakpoint_ops;
     }
 }
 
 /* See breakpoint.h.  */
 
 const struct breakpoint_ops *
-breakpoint_ops_for_event_location (const struct event_location *location,
-				   bool is_tracepoint)
+breakpoint_ops_for_location_spec (const location_spec *locspec,
+				  bool is_tracepoint)
 {
-  if (location != nullptr)
-    return breakpoint_ops_for_event_location_type
-      (event_location_type (location), is_tracepoint);
-  return is_tracepoint ? &tracepoint_breakpoint_ops : &bkpt_breakpoint_ops;
+  if (locspec != nullptr)
+    return (breakpoint_ops_for_location_spec_type
+	    (locspec->type (), is_tracepoint));
+  return &code_breakpoint_ops;
 }
 
 /* See breakpoint.h.  */
 
 int
 create_breakpoint (struct gdbarch *gdbarch,
-		   const struct event_location *location,
+		   location_spec *locspec,
 		   const char *cond_string,
-		   int thread, const char *extra_string,
-		   int parse_extra,
+		   int thread, int inferior,
+		   const char *extra_string,
+		   bool force_condition, int parse_extra,
 		   int tempflag, enum bptype type_wanted,
 		   int ignore_count,
 		   enum auto_boolean pending_break_support,
@@ -9217,10 +9223,14 @@ create_breakpoint (struct gdbarch *gdbar
 		   unsigned flags)
 {
   struct linespec_result canonical;
-  int pending = 0;
-  int task = 0;
+  bool pending = false;
+  int task = -1;
   int prev_bkpt_count = breakpoint_count;
 
+  gdb_assert (thread == -1 || thread > 0);
+  gdb_assert (inferior == -1 || inferior > 0);
+  gdb_assert (thread == -1 || inferior == -1);
+
   gdb_assert (ops != NULL);
 
   /* If extra_string isn't useful, set it to NULL.  */
@@ -9229,7 +9239,7 @@ create_breakpoint (struct gdbarch *gdbar
 
   try
     {
-      ops->create_sals_from_location (location, &canonical, type_wanted);
+      ops->create_sals_from_location_spec (locspec, &canonical);
     }
   catch (const gdb_exception_error &e)
     {
@@ -9245,7 +9255,7 @@ create_breakpoint (struct gdbarch *gdbar
 
 	  exception_print (gdb_stderr, e);
 
-          /* If pending breakpoint support is auto query and the user
+	  /* If pending breakpoint support is auto query and the user
 	     selects no, then simply return the error code.  */
 	  if (pending_break_support == AUTO_BOOLEAN_AUTO
 	      && !nquery (_("Make %s pending on future shared library load? "),
@@ -9256,7 +9266,7 @@ create_breakpoint (struct gdbarch *gdbar
 	     a pending breakpoint and selected yes, or pending
 	     breakpoint behavior is on and thus a pending breakpoint
 	     is defaulted on behalf of the user.  */
-	  pending = 1;
+	  pending = true;
 	}
       else
 	throw;
@@ -9289,68 +9299,94 @@ create_breakpoint (struct gdbarch *gdbar
       gdb::unique_xmalloc_ptr<char> extra_string_copy;
 
       if (parse_extra)
-        {
-	  char *rest;
-	  char *cond;
+	{
+	  gdb::unique_xmalloc_ptr<char> rest;
+	  gdb::unique_xmalloc_ptr<char> cond;
 
 	  const linespec_sals &lsal = canonical.lsals[0];
 
-	  /* Here we only parse 'arg' to separate condition
-	     from thread number, so parsing in context of first
-	     sal is OK.  When setting the breakpoint we'll
-	     re-parse it in context of each sal.  */
-
-	  find_condition_and_thread (extra_string, lsal.sals[0].pc,
-				     &cond, &thread, &task, &rest);
-	  cond_string_copy.reset (cond);
-	  extra_string_copy.reset (rest);
-        }
+	  find_condition_and_thread_for_sals (lsal.sals, extra_string,
+					      &cond, &thread, &inferior,
+					      &task, &rest);
+	  cond_string_copy = std::move (cond);
+	  extra_string_copy = std::move (rest);
+	}
       else
-        {
+	{
 	  if (type_wanted != bp_dprintf
 	      && extra_string != NULL && *extra_string != '\0')
 		error (_("Garbage '%s' at end of location"), extra_string);
 
+	  /* Check the validity of the condition.  We should error out
+	     if the condition is invalid at all of the locations and
+	     if it is not forced.  In the PARSE_EXTRA case above, this
+	     check is done when parsing the EXTRA_STRING.  */
+	  if (cond_string != nullptr && !force_condition)
+	    {
+	      int num_failures = 0;
+	      const linespec_sals &lsal = canonical.lsals[0];
+	      for (const auto &sal : lsal.sals)
+		{
+		  const char *cond = cond_string;
+		  try
+		    {
+		      parse_exp_1 (&cond, sal.pc, block_for_pc (sal.pc), 0);
+		      /* One success is sufficient to keep going.  */
+		      break;
+		    }
+		  catch (const gdb_exception_error &)
+		    {
+		      num_failures++;
+		      /* If this is the last sal, error out.  */
+		      if (num_failures == lsal.sals.size ())
+			throw;
+		    }
+		}
+	    }
+
 	  /* Create a private copy of condition string.  */
 	  if (cond_string)
 	    cond_string_copy.reset (xstrdup (cond_string));
 	  /* Create a private copy of any extra string.  */
 	  if (extra_string)
 	    extra_string_copy.reset (xstrdup (extra_string));
-        }
+	}
 
       ops->create_breakpoints_sal (gdbarch, &canonical,
 				   std::move (cond_string_copy),
 				   std::move (extra_string_copy),
 				   type_wanted,
 				   tempflag ? disp_del : disp_donttouch,
-				   thread, task, ignore_count, ops,
+				   thread, task, inferior, ignore_count,
 				   from_tty, enabled, internal, flags);
     }
   else
     {
-      std::unique_ptr <breakpoint> b = new_breakpoint_from_type (type_wanted);
-
-      init_raw_breakpoint_without_location (b.get (), gdbarch, type_wanted, ops);
-      b->location = copy_event_location (location);
+      std::unique_ptr <breakpoint> b = new_breakpoint_from_type (gdbarch,
+								 type_wanted);
+      b->locspec = locspec->clone ();
 
       if (parse_extra)
 	b->cond_string = NULL;
       else
 	{
 	  /* Create a private copy of condition string.  */
-	  b->cond_string = cond_string != NULL ? xstrdup (cond_string) : NULL;
+	  b->cond_string.reset (cond_string != NULL
+				? xstrdup (cond_string)
+				: NULL);
 	  b->thread = thread;
 	}
 
       /* Create a private copy of any extra string.  */
-      b->extra_string = extra_string != NULL ? xstrdup (extra_string) : NULL;
+      b->extra_string.reset (extra_string != NULL
+			     ? xstrdup (extra_string)
+			     : NULL);
       b->ignore_count = ignore_count;
       b->disposition = tempflag ? disp_del : disp_donttouch;
       b->condition_not_parsed = 1;
       b->enable_state = enabled ? bp_enabled : bp_disabled;
       if ((type_wanted != bp_breakpoint
-           && type_wanted != bp_hardware_breakpoint) || thread != -1)
+	   && type_wanted != bp_hardware_breakpoint) || thread != -1)
 	b->pspace = current_program_space;
 
       install_breakpoint (internal, std::move (b), 0);
@@ -9383,13 +9419,16 @@ break_command_1 (const char *arg, int fl
 			     ? bp_hardware_breakpoint
 			     : bp_breakpoint);
 
-  event_location_up location = string_to_event_location (&arg, current_language);
-  const struct breakpoint_ops *ops = breakpoint_ops_for_event_location
-    (location.get (), false /* is_tracepoint */);
+  location_spec_up locspec = string_to_location_spec (&arg, current_language);
+  const struct breakpoint_ops *ops
+    = breakpoint_ops_for_location_spec (locspec.get (),
+					false /* is_tracepoint */);
 
   create_breakpoint (get_current_arch (),
-		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     locspec.get (),
+		     NULL,
+		     -1 /* thread */, -1 /* inferior */,
+		     arg, false, 1 /* parse arg */,
 		     tempflag, type_wanted,
 		     0 /* Ignore count */,
 		     pending_break_support,
@@ -9415,7 +9454,7 @@ resolve_sal_pc (struct symtab_and_line *
       sal->pc = pc;
 
       /* If this SAL corresponds to a breakpoint inserted using a line
-         number, then skip the function prologue if necessary.  */
+	 number, then skip the function prologue if necessary.  */
       if (sal->explicit_line)
 	skip_prologue_sal (sal);
     }
@@ -9427,29 +9466,26 @@ resolve_sal_pc (struct symtab_and_line *
       struct symbol *sym;
 
       bv = blockvector_for_pc_sect (sal->pc, 0, &b,
-				    SYMTAB_COMPUNIT (sal->symtab));
+				    sal->symtab->compunit ());
       if (bv != NULL)
 	{
-	  sym = block_linkage_function (b);
+	  sym = b->linkage_function ();
 	  if (sym != NULL)
-	    {
-	      fixup_symbol_section (sym, SYMTAB_OBJFILE (sal->symtab));
-	      sal->section = SYMBOL_OBJ_SECTION (SYMTAB_OBJFILE (sal->symtab),
-						 sym);
-	    }
+	    sal->section
+	      = sym->obj_section (sal->symtab->compunit ()->objfile ());
 	  else
 	    {
 	      /* It really is worthwhile to have the section, so we'll
-	         just have to look harder. This case can be executed
-	         if we have line numbers but no functions (as can
-	         happen in assembly source).  */
+		 just have to look harder. This case can be executed
+		 if we have line numbers but no functions (as can
+		 happen in assembly source).  */
 
 	      scoped_restore_current_pspace_and_thread restore_pspace_thread;
 	      switch_to_program_space_and_thread (sal->pspace);
 
 	      bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (sal->pc);
 	      if (msym.minsym)
-		sal->section = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym);
+		sal->section = msym.obj_section ();
 	    }
 	}
     }
@@ -9479,79 +9515,6 @@ thbreak_command (const char *arg, int fr
   break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
 }
 
-static void
-stop_command (const char *arg, int from_tty)
-{
-  printf_filtered (_("Specify the type of breakpoint to set.\n\
-Usage: stop in <function | address>\n\
-       stop at <line>\n"));
-}
-
-static void
-stopin_command (const char *arg, int from_tty)
-{
-  int badInput = 0;
-
-  if (arg == NULL)
-    badInput = 1;
-  else if (*arg != '*')
-    {
-      const char *argptr = arg;
-      int hasColon = 0;
-
-      /* Look for a ':'.  If this is a line number specification, then
-         say it is bad, otherwise, it should be an address or
-         function/method name.  */
-      while (*argptr && !hasColon)
-	{
-	  hasColon = (*argptr == ':');
-	  argptr++;
-	}
-
-      if (hasColon)
-	badInput = (*argptr != ':');	/* Not a class::method */
-      else
-	badInput = isdigit (*arg);	/* a simple line number */
-    }
-
-  if (badInput)
-    printf_filtered (_("Usage: stop in <function | address>\n"));
-  else
-    break_command_1 (arg, 0, from_tty);
-}
-
-static void
-stopat_command (const char *arg, int from_tty)
-{
-  int badInput = 0;
-
-  if (arg == NULL || *arg == '*')	/* no line number */
-    badInput = 1;
-  else
-    {
-      const char *argptr = arg;
-      int hasColon = 0;
-
-      /* Look for a ':'.  If there is a '::' then get out, otherwise
-         it is probably a line number.  */
-      while (*argptr && !hasColon)
-	{
-	  hasColon = (*argptr == ':');
-	  argptr++;
-	}
-
-      if (hasColon)
-	badInput = (*argptr == ':');	/* we have class::method */
-      else
-	badInput = !isdigit (*arg);	/* not a line number */
-    }
-
-  if (badInput)
-    printf_filtered (_("Usage: stop at LINE\n"));
-  else
-    break_command_1 (arg, 0, from_tty);
-}
-
 /* The dynamic printf command is mostly like a regular breakpoint, but
    with a prewired command list consisting of a single output command,
    built from extra arguments supplied on the dprintf command
@@ -9560,7 +9523,7 @@ stopat_command (const char *arg, int fro
 static void
 dprintf_command (const char *arg, int from_tty)
 {
-  event_location_up location = string_to_event_location (&arg, current_language);
+  location_spec_up locspec = string_to_location_spec (&arg, current_language);
 
   /* If non-NULL, ARG should have been advanced past the location;
      the next character must be ','.  */
@@ -9576,12 +9539,13 @@ dprintf_command (const char *arg, int fr
     }
 
   create_breakpoint (get_current_arch (),
-		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     locspec.get (),
+		     NULL, -1, -1,
+		     arg, false, 1 /* parse arg */,
 		     0, bp_dprintf,
 		     0 /* Ignore count */,
 		     pending_break_support,
-		     &dprintf_breakpoint_ops,
+		     &code_breakpoint_ops,
 		     from_tty,
 		     1 /* enabled */,
 		     0 /* internal */,
@@ -9594,52 +9558,48 @@ agent_printf_command (const char *arg, i
   error (_("May only run agent-printf on the target"));
 }
 
-/* Implement the "breakpoint_hit" breakpoint_ops method for
-   ranged breakpoints.  */
+/* Implement the "breakpoint_hit" method for ranged breakpoints.  */
 
-static int
-breakpoint_hit_ranged_breakpoint (const struct bp_location *bl,
-				  const address_space *aspace,
-				  CORE_ADDR bp_addr,
-				  const struct target_waitstatus *ws)
+int
+ranged_breakpoint::breakpoint_hit (const struct bp_location *bl,
+				   const address_space *aspace,
+				   CORE_ADDR bp_addr,
+				   const target_waitstatus &ws)
 {
-  if (ws->kind != TARGET_WAITKIND_STOPPED
-      || ws->value.sig != GDB_SIGNAL_TRAP)
+  if (ws.kind () != TARGET_WAITKIND_STOPPED
+      || ws.sig () != GDB_SIGNAL_TRAP)
     return 0;
 
-  return breakpoint_address_match_range (bl->pspace->aspace, bl->address,
-					 bl->length, aspace, bp_addr);
+  return breakpoint_address_match_range (bl->pspace->aspace.get (),
+					 bl->address, bl->length, aspace,
+					 bp_addr);
 }
 
-/* Implement the "resources_needed" breakpoint_ops method for
-   ranged breakpoints.  */
+/* Implement the "resources_needed" method for ranged breakpoints.  */
 
-static int
-resources_needed_ranged_breakpoint (const struct bp_location *bl)
+int
+ranged_breakpoint::resources_needed (const struct bp_location *bl)
 {
   return target_ranged_break_num_registers ();
 }
 
-/* Implement the "print_it" breakpoint_ops method for
-   ranged breakpoints.  */
+/* Implement the "print_it" method for ranged breakpoints.  */
 
-static enum print_stop_action
-print_it_ranged_breakpoint (bpstat bs)
+enum print_stop_action
+ranged_breakpoint::print_it (const bpstat *bs) const
 {
-  struct breakpoint *b = bs->breakpoint_at;
-  struct bp_location *bl = b->loc;
   struct ui_out *uiout = current_uiout;
 
-  gdb_assert (b->type == bp_hardware_breakpoint);
+  gdb_assert (type == bp_hardware_breakpoint);
 
   /* Ranged breakpoints have only one location.  */
-  gdb_assert (bl && bl->next == NULL);
+  gdb_assert (this->has_single_location ());
 
-  annotate_breakpoint (b->number);
+  annotate_breakpoint (number);
 
   maybe_print_thread_hit_breakpoint (uiout);
 
-  if (b->disposition == disp_del)
+  if (disposition == disp_del)
     uiout->text ("Temporary ranged breakpoint ");
   else
     uiout->text ("Ranged breakpoint ");
@@ -9647,96 +9607,84 @@ print_it_ranged_breakpoint (bpstat bs)
     {
       uiout->field_string ("reason",
 		      async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
-      uiout->field_string ("disp", bpdisp_text (b->disposition));
+      uiout->field_string ("disp", bpdisp_text (disposition));
     }
-  uiout->field_signed ("bkptno", b->number);
+  print_num_locno (bs, uiout);
   uiout->text (", ");
 
   return PRINT_SRC_AND_LOC;
 }
 
-/* Implement the "print_one" breakpoint_ops method for
-   ranged breakpoints.  */
+/* Implement the "print_one" method for ranged breakpoints.  */
 
-static void
-print_one_ranged_breakpoint (struct breakpoint *b,
-			     struct bp_location **last_loc)
+bool
+ranged_breakpoint::print_one (const bp_location **last_loc) const
 {
-  struct bp_location *bl = b->loc;
   struct value_print_options opts;
   struct ui_out *uiout = current_uiout;
 
   /* Ranged breakpoints have only one location.  */
-  gdb_assert (bl && bl->next == NULL);
+  gdb_assert (this->has_single_location ());
 
   get_user_print_options (&opts);
 
   if (opts.addressprint)
     /* We don't print the address range here, it will be printed later
-       by print_one_detail_ranged_breakpoint.  */
+       by ranged_breakpoint::print_one_detail.  */
     uiout->field_skip ("addr");
   annotate_field (5);
-  print_breakpoint_location (b, bl);
-  *last_loc = bl;
+  print_breakpoint_location (this, &this->first_loc ());
+  *last_loc = &this->first_loc ();
+
+  return true;
 }
 
-/* Implement the "print_one_detail" breakpoint_ops method for
-   ranged breakpoints.  */
+/* Implement the "print_one_detail" method for ranged breakpoints.  */
 
-static void
-print_one_detail_ranged_breakpoint (const struct breakpoint *b,
-				    struct ui_out *uiout)
+void
+ranged_breakpoint::print_one_detail (struct ui_out *uiout) const
 {
   CORE_ADDR address_start, address_end;
-  struct bp_location *bl = b->loc;
+  const bp_location &bl = this->first_loc ();
   string_file stb;
 
-  gdb_assert (bl);
-
-  address_start = bl->address;
-  address_end = address_start + bl->length - 1;
+  address_start = bl.address;
+  address_end = address_start + bl.length - 1;
 
   uiout->text ("\taddress range: ");
   stb.printf ("[%s, %s]",
-	      print_core_address (bl->gdbarch, address_start),
-	      print_core_address (bl->gdbarch, address_end));
+	      print_core_address (bl.gdbarch, address_start),
+	      print_core_address (bl.gdbarch, address_end));
   uiout->field_stream ("addr", stb);
   uiout->text ("\n");
 }
 
-/* Implement the "print_mention" breakpoint_ops method for
-   ranged breakpoints.  */
+/* Implement the "print_mention" method for ranged breakpoints.  */
 
-static void
-print_mention_ranged_breakpoint (struct breakpoint *b)
+void
+ranged_breakpoint::print_mention () const
 {
-  struct bp_location *bl = b->loc;
+  const bp_location &bl = this->first_loc ();
   struct ui_out *uiout = current_uiout;
 
-  gdb_assert (bl);
-  gdb_assert (b->type == bp_hardware_breakpoint);
+  gdb_assert (type == bp_hardware_breakpoint);
 
   uiout->message (_("Hardware assisted ranged breakpoint %d from %s to %s."),
-		  b->number, paddress (bl->gdbarch, bl->address),
-		  paddress (bl->gdbarch, bl->address + bl->length - 1));
+		  number, paddress (bl.gdbarch, bl.address),
+		  paddress (bl.gdbarch, bl.address + bl.length - 1));
 }
 
-/* Implement the "print_recreate" breakpoint_ops method for
-   ranged breakpoints.  */
+/* Implement the "print_recreate" method for ranged breakpoints.  */
 
-static void
-print_recreate_ranged_breakpoint (struct breakpoint *b, struct ui_file *fp)
+void
+ranged_breakpoint::print_recreate (struct ui_file *fp) const
 {
-  fprintf_unfiltered (fp, "break-range %s, %s",
-		      event_location_to_string (b->location.get ()),
-		      event_location_to_string (b->location_range_end.get ()));
-  print_recreate_thread (b, fp);
+  gdb_printf (fp, "break-range %s, %s",
+	      locspec->to_string (),
+	      locspec_range_end->to_string ());
+  print_recreate_thread (fp);
 }
 
-/* The breakpoint_ops structure to be used in ranged breakpoints.  */
-
-static struct breakpoint_ops ranged_breakpoint_ops;
-
 /* Find the address where the end of the breakpoint range should be
    placed, given the SAL of the end of the range.  This is so that if
    the user provides a line number, the end of the range is set to the
@@ -9776,7 +9724,6 @@ break_range_command (const char *arg, in
   struct linespec_result canonical_start, canonical_end;
   int bp_count, can_use_bp, length;
   CORE_ADDR end;
-  struct breakpoint *b;
 
   /* We don't support software ranged breakpoints.  */
   if (target_ranged_break_num_registers () < 0)
@@ -9794,9 +9741,9 @@ break_range_command (const char *arg, in
     error(_("No address range specified."));
 
   arg_start = arg;
-  event_location_up start_location = string_to_event_location (&arg,
-							       current_language);
-  parse_breakpoint_sals (start_location.get (), &canonical_start);
+  location_spec_up start_locspec
+    = string_to_location_spec (&arg, current_language);
+  parse_breakpoint_sals (start_locspec.get (), &canonical_start);
 
   if (arg[0] != ',')
     error (_("Too few arguments."));
@@ -9815,18 +9762,19 @@ break_range_command (const char *arg, in
   arg++;	/* Skip the comma.  */
   arg = skip_spaces (arg);
 
-  /* Parse the end location.  */
+  /* Parse the end location specification.  */
 
   arg_start = arg;
 
   /* We call decode_line_full directly here instead of using
-     parse_breakpoint_sals because we need to specify the start location's
-     symtab and line as the default symtab and line for the end of the
-     range.  This makes it possible to have ranges like "foo.c:27, +14",
-     where +14 means 14 lines from the start location.  */
-  event_location_up end_location = string_to_event_location (&arg,
-							     current_language);
-  decode_line_full (end_location.get (), DECODE_LINE_FUNFIRSTLINE, NULL,
+     parse_breakpoint_sals because we need to specify the start
+     location spec's symtab and line as the default symtab and line
+     for the end of the range.  This makes it possible to have ranges
+     like "foo.c:27, +14", where +14 means 14 lines from the start
+     location spec.  */
+  location_spec_up end_locspec
+    = string_to_location_spec (&arg, current_language);
+  decode_line_full (end_locspec.get (), DECODE_LINE_FUNFIRSTLINE, NULL,
 		    sal_start.symtab, sal_start.line,
 		    &canonical_end, NULL, NULL);
 
@@ -9857,149 +9805,47 @@ break_range_command (const char *arg, in
       return;
     }
 
-  /* Now set up the breakpoint.  */
-  b = set_raw_breakpoint (get_current_arch (), sal_start,
-			  bp_hardware_breakpoint, &ranged_breakpoint_ops);
-  set_breakpoint_count (breakpoint_count + 1);
-  b->number = breakpoint_count;
-  b->disposition = disp_donttouch;
-  b->location = std::move (start_location);
-  b->location_range_end = std::move (end_location);
-  b->loc->length = length;
+  /* Now set up the breakpoint and install it.  */
 
-  mention (b);
-  gdb::observers::breakpoint_created.notify (b);
-  update_global_location_list (UGLL_MAY_INSERT);
+  std::unique_ptr<breakpoint> br
+    (new ranged_breakpoint (get_current_arch (),
+			    sal_start, length,
+			    std::move (start_locspec),
+			    std::move (end_locspec)));
+
+  install_breakpoint (false, std::move (br), true);
 }
 
-/*  Return non-zero if EXP is verified as constant.  Returned zero
-    means EXP is variable.  Also the constant detection may fail for
-    some constant expressions and in such case still falsely return
-    zero.  */
+/* See breakpoint.h.  */
 
-static int
-watchpoint_exp_is_const (const struct expression *exp)
+watchpoint::~watchpoint ()
 {
-  int i = exp->nelts;
-
-  while (i > 0)
-    {
-      int oplenp, argsp;
+  /* Make sure to unlink the destroyed watchpoint from the related
+     breakpoint ring.  */
 
-      /* We are only interested in the descriptor of each element.  */
-      operator_length (exp, i, &oplenp, &argsp);
-      i -= oplenp;
-
-      switch (exp->elts[i].opcode)
-	{
-	case BINOP_ADD:
-	case BINOP_SUB:
-	case BINOP_MUL:
-	case BINOP_DIV:
-	case BINOP_REM:
-	case BINOP_MOD:
-	case BINOP_LSH:
-	case BINOP_RSH:
-	case BINOP_LOGICAL_AND:
-	case BINOP_LOGICAL_OR:
-	case BINOP_BITWISE_AND:
-	case BINOP_BITWISE_IOR:
-	case BINOP_BITWISE_XOR:
-	case BINOP_EQUAL:
-	case BINOP_NOTEQUAL:
-	case BINOP_LESS:
-	case BINOP_GTR:
-	case BINOP_LEQ:
-	case BINOP_GEQ:
-	case BINOP_REPEAT:
-	case BINOP_COMMA:
-	case BINOP_EXP:
-	case BINOP_MIN:
-	case BINOP_MAX:
-	case BINOP_INTDIV:
-	case BINOP_CONCAT:
-	case TERNOP_COND:
-	case TERNOP_SLICE:
-
-	case OP_LONG:
-	case OP_FLOAT:
-	case OP_LAST:
-	case OP_COMPLEX:
-	case OP_STRING:
-	case OP_ARRAY:
-	case OP_TYPE:
-	case OP_TYPEOF:
-	case OP_DECLTYPE:
-	case OP_TYPEID:
-	case OP_NAME:
-	case OP_OBJC_NSSTRING:
-
-	case UNOP_NEG:
-	case UNOP_LOGICAL_NOT:
-	case UNOP_COMPLEMENT:
-	case UNOP_ADDR:
-	case UNOP_HIGH:
-	case UNOP_CAST:
-
-	case UNOP_CAST_TYPE:
-	case UNOP_REINTERPRET_CAST:
-	case UNOP_DYNAMIC_CAST:
-	  /* Unary, binary and ternary operators: We have to check
-	     their operands.  If they are constant, then so is the
-	     result of that operation.  For instance, if A and B are
-	     determined to be constants, then so is "A + B".
-
-	     UNOP_IND is one exception to the rule above, because the
-	     value of *ADDR is not necessarily a constant, even when
-	     ADDR is.  */
-	  break;
-
-	case OP_VAR_VALUE:
-	  /* Check whether the associated symbol is a constant.
-
-	     We use SYMBOL_CLASS rather than TYPE_CONST because it's
-	     possible that a buggy compiler could mark a variable as
-	     constant even when it is not, and TYPE_CONST would return
-	     true in this case, while SYMBOL_CLASS wouldn't.
-
-	     We also have to check for function symbols because they
-	     are always constant.  */
-	  {
-	    struct symbol *s = exp->elts[i + 2].symbol;
+  breakpoint *bpt = this;
+  while (bpt->related_breakpoint != this)
+    bpt = bpt->related_breakpoint;
 
-	    if (SYMBOL_CLASS (s) != LOC_BLOCK
-		&& SYMBOL_CLASS (s) != LOC_CONST
-		&& SYMBOL_CLASS (s) != LOC_CONST_BYTES)
-	      return 0;
-	    break;
-	  }
-
-	/* The default action is to return 0 because we are using
-	   the optimistic approach here: If we don't know something,
-	   then it is not a constant.  */
-	default:
-	  return 0;
-	}
-    }
-
-  return 1;
+  bpt->related_breakpoint = this->related_breakpoint;
 }
 
-/* Watchpoint destructor.  */
+/*  Return non-zero if EXP is verified as constant.  Returned zero
+    means EXP is variable.  Also the constant detection may fail for
+    some constant expressions and in such case still falsely return
+    zero.  */
 
-watchpoint::~watchpoint ()
+static bool
+watchpoint_exp_is_const (const struct expression *exp)
 {
-  xfree (this->exp_string);
-  xfree (this->exp_string_reparse);
+  return exp->op->constant_p ();
 }
 
-/* Implement the "re_set" breakpoint_ops method for watchpoints.  */
+/* Implement the "re_set" method for watchpoints.  */
 
-static void
-re_set_watchpoint (struct breakpoint *b)
+void
+watchpoint::re_set ()
 {
-  struct watchpoint *w = (struct watchpoint *) b;
-
   /* Watchpoint can be either on expression using entirely global
      variables, or it can be on local variables.
 
@@ -10021,44 +9867,42 @@ re_set_watchpoint (struct breakpoint *b)
      I'm not sure we'll ever be called in this case.
 
      If a local watchpoint's frame id is still valid, then
-     w->exp_valid_block is likewise valid, and we can safely use it.
+     exp_valid_block is likewise valid, and we can safely use it.
 
      Don't do anything about disabled watchpoints, since they will be
      reevaluated again when enabled.  */
-  update_watchpoint (w, 1 /* reparse */);
+  update_watchpoint (this, true /* reparse */);
 }
 
-/* Implement the "insert" breakpoint_ops method for hardware watchpoints.  */
+/* Implement the "insert" method for hardware watchpoints.  */
 
-static int
-insert_watchpoint (struct bp_location *bl)
+int
+watchpoint::insert_location (struct bp_location *bl)
 {
-  struct watchpoint *w = (struct watchpoint *) bl->owner;
-  int length = w->exact ? 1 : bl->length;
+  int length = exact ? 1 : bl->length;
 
   return target_insert_watchpoint (bl->address, length, bl->watchpoint_type,
-				   w->cond_exp.get ());
+				   cond_exp.get ());
 }
 
-/* Implement the "remove" breakpoint_ops method for hardware watchpoints.  */
+/* Implement the "remove" method for hardware watchpoints.  */
 
-static int
-remove_watchpoint (struct bp_location *bl, enum remove_bp_reason reason)
+int
+watchpoint::remove_location (struct bp_location *bl,
+			     enum remove_bp_reason reason)
 {
-  struct watchpoint *w = (struct watchpoint *) bl->owner;
-  int length = w->exact ? 1 : bl->length;
+  int length = exact ? 1 : bl->length;
 
   return target_remove_watchpoint (bl->address, length, bl->watchpoint_type,
-				   w->cond_exp.get ());
+				   cond_exp.get ());
 }
 
-static int
-breakpoint_hit_watchpoint (const struct bp_location *bl,
-			   const address_space *aspace, CORE_ADDR bp_addr,
-			   const struct target_waitstatus *ws)
+int
+watchpoint::breakpoint_hit (const struct bp_location *bl,
+			    const address_space *aspace, CORE_ADDR bp_addr,
+			    const target_waitstatus &ws)
 {
   struct breakpoint *b = bl->owner;
-  struct watchpoint *w = (struct watchpoint *) b;
 
   /* Continuable hardware watchpoints are treated as non-existent if the
      reason we stopped wasn't a hardware watchpoint (we didn't stop on
@@ -10067,75 +9911,67 @@ breakpoint_hit_watchpoint (const struct
      been defined.  Also skip watchpoints which we know did not trigger
      (did not match the data address).  */
   if (is_hardware_watchpoint (b)
-      && w->watchpoint_triggered == watch_triggered_no)
+      && watchpoint_triggered == watch_triggered_no)
     return 0;
 
   return 1;
 }
 
-static void
-check_status_watchpoint (bpstat bs)
+void
+watchpoint::check_status (bpstat *bs)
 {
-  gdb_assert (is_watchpoint (bs->breakpoint_at));
-
   bpstat_check_watchpoint (bs);
 }
 
-/* Implement the "resources_needed" breakpoint_ops method for
-   hardware watchpoints.  */
+/* Implement the "resources_needed" method for hardware
+   watchpoints.  */
 
-static int
-resources_needed_watchpoint (const struct bp_location *bl)
+int
+watchpoint::resources_needed (const struct bp_location *bl)
 {
-  struct watchpoint *w = (struct watchpoint *) bl->owner;
-  int length = w->exact? 1 : bl->length;
+  int length = exact? 1 : bl->length;
 
   return target_region_ok_for_hw_watchpoint (bl->address, length);
 }
 
-/* Implement the "works_in_software_mode" breakpoint_ops method for
-   hardware watchpoints.  */
+/* Implement the "works_in_software_mode" method for hardware
+   watchpoints.  */
 
-static int
-works_in_software_mode_watchpoint (const struct breakpoint *b)
+bool
+watchpoint::works_in_software_mode () const
 {
   /* Read and access watchpoints only work with hardware support.  */
-  return b->type == bp_watchpoint || b->type == bp_hardware_watchpoint;
+  return type == bp_watchpoint || type == bp_hardware_watchpoint;
 }
 
-static enum print_stop_action
-print_it_watchpoint (bpstat bs)
+enum print_stop_action
+watchpoint::print_it (const bpstat *bs) const
 {
-  struct breakpoint *b;
   enum print_stop_action result;
-  struct watchpoint *w;
   struct ui_out *uiout = current_uiout;
 
   gdb_assert (bs->bp_location_at != NULL);
 
-  b = bs->breakpoint_at;
-  w = (struct watchpoint *) b;
-
-  annotate_watchpoint (b->number);
+  annotate_watchpoint (this->number);
   maybe_print_thread_hit_breakpoint (uiout);
 
   string_file stb;
 
-  gdb::optional<ui_out_emit_tuple> tuple_emitter;
-  switch (b->type)
+  std::optional<ui_out_emit_tuple> tuple_emitter;
+  switch (this->type)
     {
     case bp_watchpoint:
     case bp_hardware_watchpoint:
       if (uiout->is_mi_like_p ())
 	uiout->field_string
 	  ("reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
-      mention (b);
+      mention (this);
       tuple_emitter.emplace (uiout, "value");
       uiout->text ("\nOld value = ");
       watchpoint_value_print (bs->old_val.get (), &stb);
       uiout->field_stream ("old", stb);
       uiout->text ("\nNew value = ");
-      watchpoint_value_print (w->val.get (), &stb);
+      watchpoint_value_print (val.get (), &stb);
       uiout->field_stream ("new", stb);
       uiout->text ("\n");
       /* More than one watchpoint may have been triggered.  */
@@ -10146,10 +9982,10 @@ print_it_watchpoint (bpstat bs)
       if (uiout->is_mi_like_p ())
 	uiout->field_string
 	  ("reason", async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
-      mention (b);
+      mention (this);
       tuple_emitter.emplace (uiout, "value");
       uiout->text ("\nValue = ");
-      watchpoint_value_print (w->val.get (), &stb);
+      watchpoint_value_print (val.get (), &stb);
       uiout->field_stream ("value", stb);
       uiout->text ("\n");
       result = PRINT_UNKNOWN;
@@ -10162,7 +9998,7 @@ print_it_watchpoint (bpstat bs)
 	    uiout->field_string
 	      ("reason",
 	       async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
-	  mention (b);
+	  mention (this);
 	  tuple_emitter.emplace (uiout, "value");
 	  uiout->text ("\nOld value = ");
 	  watchpoint_value_print (bs->old_val.get (), &stb);
@@ -10171,7 +10007,7 @@ print_it_watchpoint (bpstat bs)
 	}
       else
 	{
-	  mention (b);
+	  mention (this);
 	  if (uiout->is_mi_like_p ())
 	    uiout->field_string
 	      ("reason",
@@ -10179,7 +10015,7 @@ print_it_watchpoint (bpstat bs)
 	  tuple_emitter.emplace (uiout, "value");
 	  uiout->text ("\nValue = ");
 	}
-      watchpoint_value_print (w->val.get (), &stb);
+      watchpoint_value_print (val.get (), &stb);
       uiout->field_stream ("new", stb);
       uiout->text ("\n");
       result = PRINT_UNKNOWN;
@@ -10191,17 +10027,15 @@ print_it_watchpoint (bpstat bs)
   return result;
 }
 
-/* Implement the "print_mention" breakpoint_ops method for hardware
-   watchpoints.  */
+/* Implement the "print_mention" method for hardware watchpoints.  */
 
-static void
-print_mention_watchpoint (struct breakpoint *b)
+void
+watchpoint::print_mention () const
 {
-  struct watchpoint *w = (struct watchpoint *) b;
   struct ui_out *uiout = current_uiout;
   const char *tuple_name;
 
-  switch (b->type)
+  switch (type)
     {
     case bp_watchpoint:
       uiout->text ("Watchpoint ");
@@ -10220,123 +10054,120 @@ print_mention_watchpoint (struct breakpo
       tuple_name = "hw-awpt";
       break;
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("Invalid hardware watchpoint type."));
+      internal_error (_("Invalid hardware watchpoint type."));
     }
 
   ui_out_emit_tuple tuple_emitter (uiout, tuple_name);
-  uiout->field_signed ("number", b->number);
+  uiout->field_signed ("number", number);
   uiout->text (": ");
-  uiout->field_string ("exp", w->exp_string);
+  uiout->field_string ("exp", exp_string.get ());
 }
 
-/* Implement the "print_recreate" breakpoint_ops method for
-   watchpoints.  */
+/* Implement the "print_recreate" method for watchpoints.  */
 
-static void
-print_recreate_watchpoint (struct breakpoint *b, struct ui_file *fp)
+void
+watchpoint::print_recreate (struct ui_file *fp) const
 {
-  struct watchpoint *w = (struct watchpoint *) b;
-
-  switch (b->type)
+  switch (type)
     {
     case bp_watchpoint:
     case bp_hardware_watchpoint:
-      fprintf_unfiltered (fp, "watch");
+      gdb_printf (fp, "watch");
       break;
     case bp_read_watchpoint:
-      fprintf_unfiltered (fp, "rwatch");
+      gdb_printf (fp, "rwatch");
       break;
     case bp_access_watchpoint:
-      fprintf_unfiltered (fp, "awatch");
+      gdb_printf (fp, "awatch");
       break;
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("Invalid watchpoint type."));
+      internal_error (_("Invalid watchpoint type."));
     }
 
-  fprintf_unfiltered (fp, " %s", w->exp_string);
-  print_recreate_thread (b, fp);
+  gdb_printf (fp, " %s", exp_string.get ());
+  print_recreate_thread (fp);
 }
 
-/* Implement the "explains_signal" breakpoint_ops method for
-   watchpoints.  */
+/* Implement the "explains_signal" method for watchpoints.  */
 
-static int
-explains_signal_watchpoint (struct breakpoint *b, enum gdb_signal sig)
+bool
+watchpoint::explains_signal (enum gdb_signal sig)
 {
   /* A software watchpoint cannot cause a signal other than
      GDB_SIGNAL_TRAP.  */
-  if (b->type == bp_watchpoint && sig != GDB_SIGNAL_TRAP)
-    return 0;
+  if (type == bp_watchpoint && sig != GDB_SIGNAL_TRAP)
+    return false;
 
-  return 1;
+  return true;
 }
 
-/* The breakpoint_ops structure to be used in hardware watchpoints.  */
+struct masked_watchpoint : public watchpoint
+{
+  using watchpoint::watchpoint;
 
-static struct breakpoint_ops watchpoint_breakpoint_ops;
+  int insert_location (struct bp_location *) override;
+  int remove_location (struct bp_location *,
+		       enum remove_bp_reason reason) override;
+  int resources_needed (const struct bp_location *) override;
+  bool works_in_software_mode () const override;
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  void print_one_detail (struct ui_out *) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+};
 
-/* Implement the "insert" breakpoint_ops method for
-   masked hardware watchpoints.  */
+/* Implement the "insert" method for masked hardware watchpoints.  */
 
-static int
-insert_masked_watchpoint (struct bp_location *bl)
+int
+masked_watchpoint::insert_location (struct bp_location *bl)
 {
-  struct watchpoint *w = (struct watchpoint *) bl->owner;
-
-  return target_insert_mask_watchpoint (bl->address, w->hw_wp_mask,
+  return target_insert_mask_watchpoint (bl->address, hw_wp_mask,
 					bl->watchpoint_type);
 }
 
-/* Implement the "remove" breakpoint_ops method for
-   masked hardware watchpoints.  */
+/* Implement the "remove" method for masked hardware watchpoints.  */
 
-static int
-remove_masked_watchpoint (struct bp_location *bl, enum remove_bp_reason reason)
+int
+masked_watchpoint::remove_location (struct bp_location *bl,
+				    enum remove_bp_reason reason)
 {
-  struct watchpoint *w = (struct watchpoint *) bl->owner;
-
-  return target_remove_mask_watchpoint (bl->address, w->hw_wp_mask,
-				        bl->watchpoint_type);
+  return target_remove_mask_watchpoint (bl->address, hw_wp_mask,
+					bl->watchpoint_type);
 }
 
-/* Implement the "resources_needed" breakpoint_ops method for
-   masked hardware watchpoints.  */
+/* Implement the "resources_needed" method for masked hardware
+   watchpoints.  */
 
-static int
-resources_needed_masked_watchpoint (const struct bp_location *bl)
+int
+masked_watchpoint::resources_needed (const struct bp_location *bl)
 {
-  struct watchpoint *w = (struct watchpoint *) bl->owner;
-
-  return target_masked_watch_num_registers (bl->address, w->hw_wp_mask);
+  return target_masked_watch_num_registers (bl->address, hw_wp_mask);
 }
 
-/* Implement the "works_in_software_mode" breakpoint_ops method for
-   masked hardware watchpoints.  */
+/* Implement the "works_in_software_mode" method for masked hardware
+   watchpoints.  */
 
-static int
-works_in_software_mode_masked_watchpoint (const struct breakpoint *b)
+bool
+masked_watchpoint::works_in_software_mode () const
 {
-  return 0;
+  return false;
 }
 
-/* Implement the "print_it" breakpoint_ops method for
-   masked hardware watchpoints.  */
+/* Implement the "print_it" method for masked hardware
+   watchpoints.  */
 
-static enum print_stop_action
-print_it_masked_watchpoint (bpstat bs)
+enum print_stop_action
+masked_watchpoint::print_it (const bpstat *bs) const
 {
-  struct breakpoint *b = bs->breakpoint_at;
   struct ui_out *uiout = current_uiout;
 
   /* Masked watchpoints have only one location.  */
-  gdb_assert (b->loc && b->loc->next == NULL);
+  gdb_assert (this->has_single_location ());
 
-  annotate_watchpoint (b->number);
+  annotate_watchpoint (this->number);
   maybe_print_thread_hit_breakpoint (uiout);
 
-  switch (b->type)
+  switch (this->type)
     {
     case bp_hardware_watchpoint:
       if (uiout->is_mi_like_p ())
@@ -10357,11 +10188,10 @@ print_it_masked_watchpoint (bpstat bs)
 	   async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
       break;
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("Invalid hardware watchpoint type."));
+      internal_error (_("Invalid hardware watchpoint type."));
     }
 
-  mention (b);
+  mention (this);
   uiout->text (_("\n\
 Check the underlying instruction at PC for the memory\n\
 address and value which triggered this watchpoint.\n"));
@@ -10371,34 +10201,30 @@ address and value which triggered this w
   return PRINT_UNKNOWN;
 }
 
-/* Implement the "print_one_detail" breakpoint_ops method for
-   masked hardware watchpoints.  */
+/* Implement the "print_one_detail" method for masked hardware
+   watchpoints.  */
 
-static void
-print_one_detail_masked_watchpoint (const struct breakpoint *b,
-				    struct ui_out *uiout)
+void
+masked_watchpoint::print_one_detail (struct ui_out *uiout) const
 {
-  struct watchpoint *w = (struct watchpoint *) b;
-
   /* Masked watchpoints have only one location.  */
-  gdb_assert (b->loc && b->loc->next == NULL);
+  gdb_assert (this->has_single_location ());
 
   uiout->text ("\tmask ");
-  uiout->field_core_addr ("mask", b->loc->gdbarch, w->hw_wp_mask);
+  uiout->field_core_addr ("mask", this->first_loc ().gdbarch, hw_wp_mask);
   uiout->text ("\n");
 }
 
-/* Implement the "print_mention" breakpoint_ops method for
-   masked hardware watchpoints.  */
+/* Implement the "print_mention" method for masked hardware
+   watchpoints.  */
 
-static void
-print_mention_masked_watchpoint (struct breakpoint *b)
+void
+masked_watchpoint::print_mention () const
 {
-  struct watchpoint *w = (struct watchpoint *) b;
   struct ui_out *uiout = current_uiout;
   const char *tuple_name;
 
-  switch (b->type)
+  switch (type)
     {
     case bp_hardware_watchpoint:
       uiout->text ("Masked hardware watchpoint ");
@@ -10413,64 +10239,55 @@ print_mention_masked_watchpoint (struct
       tuple_name = "hw-awpt";
       break;
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("Invalid hardware watchpoint type."));
+      internal_error (_("Invalid hardware watchpoint type."));
     }
 
   ui_out_emit_tuple tuple_emitter (uiout, tuple_name);
-  uiout->field_signed ("number", b->number);
+  uiout->field_signed ("number", number);
   uiout->text (": ");
-  uiout->field_string ("exp", w->exp_string);
+  uiout->field_string ("exp", exp_string.get ());
 }
 
-/* Implement the "print_recreate" breakpoint_ops method for
-   masked hardware watchpoints.  */
+/* Implement the "print_recreate" method for masked hardware
+   watchpoints.  */
 
-static void
-print_recreate_masked_watchpoint (struct breakpoint *b, struct ui_file *fp)
+void
+masked_watchpoint::print_recreate (struct ui_file *fp) const
 {
-  struct watchpoint *w = (struct watchpoint *) b;
-  char tmp[40];
-
-  switch (b->type)
+  switch (type)
     {
     case bp_hardware_watchpoint:
-      fprintf_unfiltered (fp, "watch");
+      gdb_printf (fp, "watch");
       break;
     case bp_read_watchpoint:
-      fprintf_unfiltered (fp, "rwatch");
+      gdb_printf (fp, "rwatch");
       break;
     case bp_access_watchpoint:
-      fprintf_unfiltered (fp, "awatch");
+      gdb_printf (fp, "awatch");
       break;
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("Invalid hardware watchpoint type."));
+      internal_error (_("Invalid hardware watchpoint type."));
     }
 
-  sprintf_vma (tmp, w->hw_wp_mask);
-  fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string, tmp);
-  print_recreate_thread (b, fp);
+  gdb_printf (fp, " %s mask 0x%s", exp_string.get (),
+	      phex (hw_wp_mask, sizeof (CORE_ADDR)));
+  print_recreate_thread (fp);
 }
 
-/* The breakpoint_ops structure to be used in masked hardware watchpoints.  */
-
-static struct breakpoint_ops masked_watchpoint_breakpoint_ops;
-
 /* Tell whether the given watchpoint is a masked hardware watchpoint.  */
 
 static bool
 is_masked_watchpoint (const struct breakpoint *b)
 {
-  return b->ops == &masked_watchpoint_breakpoint_ops;
+  return dynamic_cast<const masked_watchpoint *> (b) != nullptr;
 }
 
 /* accessflag:  hw_write:  watch write, 
-                hw_read:   watch read, 
+		hw_read:   watch read, 
 		hw_access: watch access (read or write) */
 static void
 watch_command_1 (const char *arg, int accessflag, int from_tty,
-		 int just_location, int internal)
+		 bool just_location, bool internal)
 {
   struct breakpoint *scope_breakpoint = NULL;
   const struct block *exp_valid_block = NULL, *cond_exp_valid_block = NULL;
@@ -10484,11 +10301,12 @@ watch_command_1 (const char *arg, int ac
   const char *cond_end = NULL;
   enum bptype bp_type;
   int thread = -1;
-  int pc = 0;
+  int inferior = -1;
   /* Flag to indicate whether we are going to use masks for
      the hardware watchpoint.  */
-  int use_mask = 0;
+  bool use_mask = false;
   CORE_ADDR mask = 0;
+  int task = -1;
 
   /* Make sure that we actually have parameters to parse.  */
   if (arg != NULL && arg[0] != '\0')
@@ -10535,31 +10353,58 @@ watch_command_1 (const char *arg, int ac
 	      if (thread != -1)
 		error(_("You can specify only one thread."));
 
+	      if (task != -1)
+		error (_("You can specify only one of thread or task."));
+
+	      if (inferior != -1)
+		error (_("You can specify only one of inferior or thread."));
+
 	      /* Extract the thread ID from the next token.  */
 	      thr = parse_thread_id (value_start, &endp);
-
-	      /* Check if the user provided a valid thread ID.  */
-	      if (*endp != ' ' && *endp != '\t' && *endp != '\0')
-		invalid_thread_id_error (value_start);
+	      if (value_start == endp)
+		error (_("Junk after thread keyword."));
 
 	      thread = thr->global_num;
 	    }
+	  else if (toklen == 4 && startswith (tok, "task"))
+	    {
+	      char *tmp;
+
+	      if (task != -1)
+		error(_("You can specify only one task."));
+
+	      if (thread != -1)
+		error (_("You can specify only one of thread or task."));
+
+	      if (inferior != -1)
+		error (_("You can specify only one of inferior or task."));
+
+	      task = strtol (value_start, &tmp, 0);
+	      if (tmp == value_start)
+		error (_("Junk after task keyword."));
+	      if (!valid_task_id (task))
+		error (_("Unknown task %d."), task);
+	    }
+	  else if (toklen == 8 && startswith (tok, "inferior"))
+	    {
+	      /* Support for watchpoints will be added in a later commit.  */
+	      error (_("Cannot use 'inferior' keyword with watchpoints"));
+	    }
 	  else if (toklen == 4 && startswith (tok, "mask"))
 	    {
 	      /* We've found a "mask" token, which means the user wants to
 		 create a hardware watchpoint that is going to have the mask
 		 facility.  */
-	      struct value *mask_value, *mark;
+	      struct value *mask_value;
 
 	      if (use_mask)
 		error(_("You can specify only one mask."));
 
-	      use_mask = just_location = 1;
+	      use_mask = just_location = true;
 
-	      mark = value_mark ();
+	      scoped_value_mark mark;
 	      mask_value = parse_to_comma_and_eval (&value_start);
 	      mask = value_as_address (mask_value);
-	      value_free_to_mark (mark);
 	    }
 	  else
 	    /* We didn't recognize what we found.  We should stop here.  */
@@ -10601,13 +10446,13 @@ watch_command_1 (const char *arg, int ac
   exp_valid_block = tracker.block ();
   struct value *mark = value_mark ();
   struct value *val_as_value = nullptr;
-  fetch_subexp_value (exp.get (), &pc, &val_as_value, &result, NULL,
+  fetch_subexp_value (exp.get (), exp->op.get (), &val_as_value, &result, NULL,
 		      just_location);
 
   if (val_as_value != NULL && just_location)
     {
-      saved_bitpos = value_bitpos (val_as_value);
-      saved_bitsize = value_bitsize (val_as_value);
+      saved_bitpos = val_as_value->bitpos ();
+      saved_bitsize = val_as_value->bitsize ();
     }
 
   value_ref_ptr val;
@@ -10651,7 +10496,7 @@ watch_command_1 (const char *arg, int ac
   if (*tok)
     error (_("Junk at end of command."));
 
-  frame_info *wp_frame = block_innermost_frame (exp_valid_block);
+  frame_info_ptr wp_frame = block_innermost_frame (exp_valid_block);
 
   /* Save this because create_internal_breakpoint below invalidates
      'wp_frame'.  */
@@ -10670,10 +10515,9 @@ watch_command_1 (const char *arg, int ac
 	  gdbarch *caller_arch = frame_unwind_caller_arch (wp_frame);
 	  CORE_ADDR caller_pc = frame_unwind_caller_pc (wp_frame);
 
- 	  scope_breakpoint
+	  scope_breakpoint
 	    = create_internal_breakpoint (caller_arch, caller_pc,
-					  bp_watchpoint_scope,
-					  &momentary_breakpoint_ops);
+					  bp_watchpoint_scope);
 
 	  /* create_internal_breakpoint could invalidate WP_FRAME.  */
 	  wp_frame = NULL;
@@ -10687,12 +10531,13 @@ watch_command_1 (const char *arg, int ac
 	  scope_breakpoint->frame_id = caller_frame_id;
 
 	  /* Set the address at which we will stop.  */
-	  scope_breakpoint->loc->gdbarch = caller_arch;
-	  scope_breakpoint->loc->requested_address = caller_pc;
-	  scope_breakpoint->loc->address
-	    = adjust_breakpoint_address (scope_breakpoint->loc->gdbarch,
-					 scope_breakpoint->loc->requested_address,
-					 scope_breakpoint->type);
+	  bp_location &loc = scope_breakpoint->first_loc ();
+	  loc.gdbarch = caller_arch;
+	  loc.requested_address = caller_pc;
+	  loc.address
+	    = adjust_breakpoint_address (loc.gdbarch, loc.requested_address,
+					 scope_breakpoint->type,
+					 current_program_space);
 	}
     }
 
@@ -10708,15 +10553,17 @@ watch_command_1 (const char *arg, int ac
   else
     bp_type = bp_hardware_watchpoint;
 
-  std::unique_ptr<watchpoint> w (new watchpoint ());
-
+  std::unique_ptr<watchpoint> w;
   if (use_mask)
-    init_raw_breakpoint_without_location (w.get (), NULL, bp_type,
-					  &masked_watchpoint_breakpoint_ops);
+    w.reset (new masked_watchpoint (nullptr, bp_type));
   else
-    init_raw_breakpoint_without_location (w.get (), NULL, bp_type,
-					  &watchpoint_breakpoint_ops);
+    w.reset (new watchpoint (nullptr, bp_type));
+
+  /* At most one of thread or task can be set on a watchpoint.  */
+  gdb_assert (thread == -1 || task == -1);
   w->thread = thread;
+  w->inferior = inferior;
+  w->task = task;
   w->disposition = disp_donttouch;
   w->pspace = current_program_space;
   w->exp = std::move (exp);
@@ -10724,17 +10571,17 @@ watch_command_1 (const char *arg, int ac
   w->cond_exp_valid_block = cond_exp_valid_block;
   if (just_location)
     {
-      struct type *t = value_type (val.get ());
+      struct type *t = val->type ();
       CORE_ADDR addr = value_as_address (val.get ());
 
       w->exp_string_reparse
-	= current_language->la_watch_location_expression (t, addr).release ();
+	= current_language->watch_location_expression (t, addr);
 
       w->exp_string = xstrprintf ("-location %.*s",
 				  (int) (exp_end - exp_start), exp_start);
     }
   else
-    w->exp_string = savestring (exp_start, exp_end - exp_start);
+    w->exp_string.reset (savestring (exp_start, exp_end - exp_start));
 
   if (use_mask)
     {
@@ -10749,7 +10596,7 @@ watch_command_1 (const char *arg, int ac
     }
 
   if (cond_start)
-    w->cond_string = savestring (cond_start, cond_end - cond_start);
+    w->cond_string.reset (savestring (cond_start, cond_end - cond_start));
   else
     w->cond_string = 0;
 
@@ -10777,7 +10624,7 @@ watch_command_1 (const char *arg, int ac
 
   /* Finally update the new watchpoint.  This creates the locations
      that should be inserted.  */
-  update_watchpoint (w.get (), 1);
+  update_watchpoint (w.get (), true /* reparse */);
 
   install_breakpoint (internal, std::move (w), 1);
 }
@@ -10820,9 +10667,9 @@ can_use_hardware_watchpoint (const std::
     {
       struct value *v = iter.get ();
 
-      if (VALUE_LVAL (v) == lval_memory)
+      if (v->lval () == lval_memory)
 	{
-	  if (v != head && value_lazy (v))
+	  if (v != head && v->lazy ())
 	    /* A lazy memory lvalue in the chain is one that GDB never
 	       needed to fetch; we either just used its address (e.g.,
 	       `a' in `a.b') or we never needed it at all (e.g., `a'
@@ -10832,23 +10679,23 @@ can_use_hardware_watchpoint (const std::
 	  else
 	    {
 	      /* Ahh, memory we actually used!  Check if we can cover
-                 it with hardware watchpoints.  */
-	      struct type *vtype = check_typedef (value_type (v));
+		 it with hardware watchpoints.  */
+	      struct type *vtype = check_typedef (v->type ());
 
 	      /* We only watch structs and arrays if user asked for it
 		 explicitly, never if they just happen to appear in a
 		 middle of some value chain.  */
 	      if (v == head
-		  || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
-		      && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
+		  || (vtype->code () != TYPE_CODE_STRUCT
+		      && vtype->code () != TYPE_CODE_ARRAY))
 		{
-		  CORE_ADDR vaddr = value_address (v);
+		  CORE_ADDR vaddr = v->address ();
 		  int len;
 		  int num_regs;
 
 		  len = (target_exact_watchpoints
 			 && is_scalar_type_recursive (vtype))?
-		    1 : TYPE_LENGTH (value_type (v));
+		    1 : v->type ()->length ();
 
 		  num_regs = target_region_ok_for_hw_watchpoint (vaddr, len);
 		  if (!num_regs)
@@ -10858,10 +10705,9 @@ can_use_hardware_watchpoint (const std::
 		}
 	    }
 	}
-      else if (VALUE_LVAL (v) != not_lval
-	       && deprecated_value_modifiable (v) == 0)
+      else if (v->lval () != not_lval && !v->deprecated_modifiable ())
 	return 0;	/* These are values from the history (e.g., $1).  */
-      else if (VALUE_LVAL (v) == lval_register)
+      else if (v->lval () == lval_register)
 	return 0;	/* Cannot watch a register with a HW watchpoint.  */
     }
 
@@ -10871,25 +10717,79 @@ can_use_hardware_watchpoint (const std::
 }
 
 void
-watch_command_wrapper (const char *arg, int from_tty, int internal)
+watch_command_wrapper (const char *arg, int from_tty, bool internal)
 {
   watch_command_1 (arg, hw_write, from_tty, 0, internal);
 }
 
+/* Options for the watch, awatch, and rwatch commands.  */
+
+struct watch_options
+{
+  /* For -location.  */
+  bool location = false;
+};
+
+/* Definitions of options for the "watch", "awatch", and "rwatch" commands.
+
+   Historically GDB always accepted both '-location' and '-l' flags for
+   these commands (both flags being synonyms).  When converting to the
+   newer option scheme only '-location' is added here.  That's fine (for
+   backward compatibility) as any non-ambiguous prefix of a flag will be
+   accepted, so '-l', '-loc', are now all accepted.
+
+   What this means is that, if in the future, we add any new flag here
+   that starts with '-l' then this will break backward compatibility, so
+   please, don't do that!  */
+
+static const gdb::option::option_def watch_option_defs[] = {
+  gdb::option::flag_option_def<watch_options> {
+    "location",
+    [] (watch_options *opt) { return &opt->location; },
+    N_("\
+This evaluates EXPRESSION and watches the memory to which is refers.\n\
+-l can be used as a short form of -location."),
+  },
+};
+
+/* Returns the option group used by 'watch', 'awatch', and 'rwatch'
+   commands.  */
+
+static gdb::option::option_def_group
+make_watch_options_def_group (watch_options *opts)
+{
+  return {{watch_option_defs}, opts};
+}
+
 /* A helper function that looks for the "-location" argument and then
    calls watch_command_1.  */
 
 static void
 watch_maybe_just_location (const char *arg, int accessflag, int from_tty)
 {
-  int just_location = 0;
+  watch_options opts;
+  auto grp = make_watch_options_def_group (&opts);
+  gdb::option::process_options
+    (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
+  if (arg != nullptr && *arg == '\0')
+    arg = nullptr;
 
-  if (arg
-      && (check_for_argument (&arg, "-location", sizeof ("-location") - 1)
-	  || check_for_argument (&arg, "-l", sizeof ("-l") - 1)))
-    just_location = 1;
+  watch_command_1 (arg, accessflag, from_tty, opts.location, false);
+}
 
-  watch_command_1 (arg, accessflag, from_tty, just_location, 0);
+/* Command completion for 'watch', 'awatch', and 'rwatch' commands.   */
+static void
+watch_command_completer (struct cmd_list_element *ignore,
+			 completion_tracker &tracker,
+			 const char *text, const char * /*word*/)
+{
+  const auto group = make_watch_options_def_group (nullptr);
+  if (gdb::option::complete_options
+      (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
+    return;
+
+  const char *word = advance_to_expression_complete_word_point (tracker, text);
+  expression_completer (ignore, tracker, text, word);
 }
 
 static void
@@ -10899,7 +10799,7 @@ watch_command (const char *arg, int from
 }
 
 void
-rwatch_command_wrapper (const char *arg, int from_tty, int internal)
+rwatch_command_wrapper (const char *arg, int from_tty, bool internal)
 {
   watch_command_1 (arg, hw_read, from_tty, 0, internal);
 }
@@ -10911,7 +10811,7 @@ rwatch_command (const char *arg, int fro
 }
 
 void
-awatch_command_wrapper (const char *arg, int from_tty, int internal)
+awatch_command_wrapper (const char *arg, int from_tty, bool internal)
 {
   watch_command_1 (arg, hw_access, from_tty, 0, internal);
 }
@@ -10932,20 +10832,15 @@ struct until_break_fsm : public thread_f
   /* The thread that was current when the command was executed.  */
   int thread;
 
-  /* The breakpoint set at the destination location.  */
-  breakpoint_up location_breakpoint;
-
-  /* Breakpoint set at the return address in the caller frame.  May be
-     NULL.  */
-  breakpoint_up caller_breakpoint;
+  /* The breakpoint set at the return address in the caller frame,
+     plus breakpoints at all the destination locations.  */
+  std::vector<breakpoint_up> breakpoints;
 
   until_break_fsm (struct interp *cmd_interp, int thread,
-		   breakpoint_up &&location_breakpoint,
-		   breakpoint_up &&caller_breakpoint)
+		   std::vector<breakpoint_up> &&breakpoints)
     : thread_fsm (cmd_interp),
       thread (thread),
-      location_breakpoint (std::move (location_breakpoint)),
-      caller_breakpoint (std::move (caller_breakpoint))
+      breakpoints (std::move (breakpoints))
   {
   }
 
@@ -10960,12 +10855,13 @@ struct until_break_fsm : public thread_f
 bool
 until_break_fsm::should_stop (struct thread_info *tp)
 {
-  if (bpstat_find_breakpoint (tp->control.stop_bpstat,
-			      location_breakpoint.get ()) != NULL
-      || (caller_breakpoint != NULL
-	  && bpstat_find_breakpoint (tp->control.stop_bpstat,
-				     caller_breakpoint.get ()) != NULL))
-    set_finished ();
+  for (const breakpoint_up &bp : breakpoints)
+    if (bpstat_find_breakpoint (tp->control.stop_bpstat,
+				bp.get ()) != NULL)
+      {
+	set_finished ();
+	break;
+      }
 
   return true;
 }
@@ -10977,8 +10873,7 @@ void
 until_break_fsm::clean_up (struct thread_info *)
 {
   /* Clean up our temporary breakpoints.  */
-  location_breakpoint.reset ();
-  caller_breakpoint.reset ();
+  breakpoints.clear ();
   delete_longjmp_breakpoint (thread);
 }
 
@@ -10994,7 +10889,7 @@ until_break_fsm::do_async_reply_reason (
 void
 until_break_command (const char *arg, int from_tty, int anywhere)
 {
-  struct frame_info *frame;
+  frame_info_ptr frame;
   struct gdbarch *frame_gdbarch;
   struct frame_id stack_frame_id;
   struct frame_id caller_frame_id;
@@ -11006,26 +10901,22 @@ until_break_command (const char *arg, in
   /* Set a breakpoint where the user wants it and at return from
      this function.  */
 
-  event_location_up location = string_to_event_location (&arg, current_language);
+  location_spec_up locspec = string_to_location_spec (&arg, current_language);
 
   std::vector<symtab_and_line> sals
     = (last_displayed_sal_is_valid ()
-       ? decode_line_1 (location.get (), DECODE_LINE_FUNFIRSTLINE, NULL,
+       ? decode_line_1 (locspec.get (), DECODE_LINE_FUNFIRSTLINE, NULL,
 			get_last_displayed_symtab (),
 			get_last_displayed_line ())
-       : decode_line_1 (location.get (), DECODE_LINE_FUNFIRSTLINE,
+       : decode_line_1 (locspec.get (), DECODE_LINE_FUNFIRSTLINE,
 			NULL, NULL, 0));
 
-  if (sals.size () != 1)
+  if (sals.empty ())
     error (_("Couldn't get information on specified line."));
 
-  symtab_and_line &sal = sals[0];
-
   if (*arg)
     error (_("Junk at end of arguments."));
 
-  resolve_sal_pc (&sal);
-
   tp = inferior_thread ();
   thread = tp->global_num;
 
@@ -11042,9 +10933,9 @@ until_break_command (const char *arg, in
   /* Keep within the current frame, or in frames called by the current
      one.  */
 
-  breakpoint_up caller_breakpoint;
+  std::vector<breakpoint_up> breakpoints;
 
-  gdb::optional<delete_longjmp_breakpoint_cleanup> lj_deleter;
+  std::optional<delete_longjmp_breakpoint_cleanup> lj_deleter;
 
   if (frame_id_p (caller_frame_id))
     {
@@ -11054,33 +10945,36 @@ until_break_command (const char *arg, in
       sal2 = find_pc_line (frame_unwind_caller_pc (frame), 0);
       sal2.pc = frame_unwind_caller_pc (frame);
       caller_gdbarch = frame_unwind_caller_arch (frame);
-      caller_breakpoint = set_momentary_breakpoint (caller_gdbarch,
-						    sal2,
-						    caller_frame_id,
-						    bp_until);
 
-      set_longjmp_breakpoint (tp, caller_frame_id);
+      breakpoint_up caller_breakpoint
+	= set_momentary_breakpoint (caller_gdbarch, sal2,
+				    caller_frame_id, bp_until);
+      breakpoints.emplace_back (std::move (caller_breakpoint));
+
+      set_longjmp_breakpoint (tp, stack_frame_id);
       lj_deleter.emplace (thread);
     }
 
-  /* set_momentary_breakpoint could invalidate FRAME.  */
-  frame = NULL;
-
-  breakpoint_up location_breakpoint;
-  if (anywhere)
-    /* If the user told us to continue until a specified location,
-       we don't specify a frame at which we need to stop.  */
-    location_breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
-						    null_frame_id, bp_until);
-  else
-    /* Otherwise, specify the selected frame, because we want to stop
-       only at the very same frame.  */
-    location_breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
-						    stack_frame_id, bp_until);
-
-  tp->thread_fsm = new until_break_fsm (command_interp (), tp->global_num,
-					std::move (location_breakpoint),
-					std::move (caller_breakpoint));
+  /* If the user told us to continue until a specified location, we
+     don't specify a frame at which we need to stop.  Otherwise,
+     specify the selected frame, because we want to stop only at the
+     very same frame.  */
+  frame_id stop_frame_id = anywhere ? null_frame_id : stack_frame_id;
+
+  for (symtab_and_line &sal : sals)
+    {
+      resolve_sal_pc (&sal);
+
+      breakpoint_up location_breakpoint
+	= set_momentary_breakpoint (frame_gdbarch, sal,
+				    stop_frame_id, bp_until);
+      breakpoints.emplace_back (std::move (location_breakpoint));
+    }
+
+  tp->set_thread_fsm
+    (std::unique_ptr<thread_fsm>
+     (new until_break_fsm (command_interp (), tp->global_num,
+			   std::move (breakpoints))));
 
   if (lj_deleter)
     lj_deleter->release ();
@@ -11088,176 +10982,8 @@ until_break_command (const char *arg, in
   proceed (-1, GDB_SIGNAL_DEFAULT);
 }
 
-/* This function attempts to parse an optional "if <cond>" clause
-   from the arg string.  If one is not found, it returns NULL.
-
-   Else, it returns a pointer to the condition string.  (It does not
-   attempt to evaluate the string against a particular block.)  And,
-   it updates arg to point to the first character following the parsed
-   if clause in the arg string.  */
-
-const char *
-ep_parse_optional_if_clause (const char **arg)
-{
-  const char *cond_string;
-
-  if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
-    return NULL;
-
-  /* Skip the "if" keyword.  */
-  (*arg) += 2;
-
-  /* Skip any extra leading whitespace, and record the start of the
-     condition string.  */
-  *arg = skip_spaces (*arg);
-  cond_string = *arg;
-
-  /* Assume that the condition occupies the remainder of the arg
-     string.  */
-  (*arg) += strlen (cond_string);
-
-  return cond_string;
-}
-
-/* Commands to deal with catching events, such as signals, exceptions,
-   process start/exit, etc.  */
-
-typedef enum
-{
-  catch_fork_temporary, catch_vfork_temporary,
-  catch_fork_permanent, catch_vfork_permanent
-}
-catch_fork_kind;
-
-static void
-catch_fork_command_1 (const char *arg, int from_tty,
-		      struct cmd_list_element *command)
-{
-  struct gdbarch *gdbarch = get_current_arch ();
-  const char *cond_string = NULL;
-  catch_fork_kind fork_kind;
-  int tempflag;
-
-  fork_kind = (catch_fork_kind) (uintptr_t) get_cmd_context (command);
-  tempflag = (fork_kind == catch_fork_temporary
-	      || fork_kind == catch_vfork_temporary);
-
-  if (!arg)
-    arg = "";
-  arg = skip_spaces (arg);
-
-  /* The allowed syntax is:
-     catch [v]fork
-     catch [v]fork if <cond>
-
-     First, check if there's an if clause.  */
-  cond_string = ep_parse_optional_if_clause (&arg);
-
-  if ((*arg != '\0') && !isspace (*arg))
-    error (_("Junk at end of arguments."));
-
-  /* If this target supports it, create a fork or vfork catchpoint
-     and enable reporting of such events.  */
-  switch (fork_kind)
-    {
-    case catch_fork_temporary:
-    case catch_fork_permanent:
-      create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
-                                          &catch_fork_breakpoint_ops);
-      break;
-    case catch_vfork_temporary:
-    case catch_vfork_permanent:
-      create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
-                                          &catch_vfork_breakpoint_ops);
-      break;
-    default:
-      error (_("unsupported or unknown fork kind; cannot catch it"));
-      break;
-    }
-}
-
-static void
-catch_exec_command_1 (const char *arg, int from_tty,
-		      struct cmd_list_element *command)
-{
-  struct gdbarch *gdbarch = get_current_arch ();
-  int tempflag;
-  const char *cond_string = NULL;
-
-  tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
-
-  if (!arg)
-    arg = "";
-  arg = skip_spaces (arg);
-
-  /* The allowed syntax is:
-     catch exec
-     catch exec if <cond>
-
-     First, check if there's an if clause.  */
-  cond_string = ep_parse_optional_if_clause (&arg);
-
-  if ((*arg != '\0') && !isspace (*arg))
-    error (_("Junk at end of arguments."));
-
-  std::unique_ptr<exec_catchpoint> c (new exec_catchpoint ());
-  init_catchpoint (c.get (), gdbarch, tempflag, cond_string,
-		   &catch_exec_breakpoint_ops);
-  c->exec_pathname = NULL;
-
-  install_breakpoint (0, std::move (c), 1);
-}
-
-void
-init_ada_exception_breakpoint (struct breakpoint *b,
-			       struct gdbarch *gdbarch,
-			       struct symtab_and_line sal,
-			       const char *addr_string,
-			       const struct breakpoint_ops *ops,
-			       int tempflag,
-			       int enabled,
-			       int from_tty)
-{
-  if (from_tty)
-    {
-      struct gdbarch *loc_gdbarch = get_sal_arch (sal);
-      if (!loc_gdbarch)
-	loc_gdbarch = gdbarch;
-
-      describe_other_breakpoints (loc_gdbarch,
-				  sal.pspace, sal.pc, sal.section, -1);
-      /* FIXME: brobecker/2006-12-28: Actually, re-implement a special
-         version for exception catchpoints, because two catchpoints
-         used for different exception names will use the same address.
-         In this case, a "breakpoint ... also set at..." warning is
-         unproductive.  Besides, the warning phrasing is also a bit
-         inappropriate, we should use the word catchpoint, and tell
-         the user what type of catchpoint it is.  The above is good
-         enough for now, though.  */
-    }
-
-  init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint, ops);
-
-  b->enable_state = enabled ? bp_enabled : bp_disabled;
-  b->disposition = tempflag ? disp_del : disp_donttouch;
-  b->location = string_to_event_location (&addr_string,
-					  language_def (language_ada));
-  b->language = language_ada;
-}
-
-static void
-catch_command (const char *arg, int from_tty)
-{
-  error (_("Catch requires an event name."));
-}
 
 
-static void
-tcatch_command (const char *arg, int from_tty)
-{
-  error (_("Catch requires an event name."));
-}
-
 /* Compare two breakpoints and return a strcmp-like result.  */
 
 static int
@@ -11283,7 +11009,6 @@ compare_breakpoints (const breakpoint *a
 static void
 clear_command (const char *arg, int from_tty)
 {
-  struct breakpoint *b;
   int default_match;
 
   std::vector<symtab_and_line> decoded_sals;
@@ -11339,46 +11064,46 @@ clear_command (const char *arg, int from
       const char *sal_fullname;
 
       /* If exact pc given, clear bpts at that pc.
-         If line given (pc == 0), clear all bpts on specified line.
-         If defaulting, clear all bpts on default line
-         or at default pc.
-
-         defaulting    sal.pc != 0    tests to do
-
-         0              1             pc
-         1              1             pc _and_ line
-         0              0             line
-         1              0             <can't happen> */
+	 If line given (pc == 0), clear all bpts on specified line.
+	 If defaulting, clear all bpts on default line
+	 or at default pc.
+
+	 defaulting    sal.pc != 0    tests to do
+
+	 0              1             pc
+	 1              1             pc _and_ line
+	 0              0             line
+	 1              0             <can't happen> */
 
       sal_fullname = (sal.symtab == NULL
 		      ? NULL : symtab_to_fullname (sal.symtab));
 
       /* Find all matching breakpoints and add them to 'found'.  */
-      ALL_BREAKPOINTS (b)
+      for (breakpoint &b : all_breakpoints ())
 	{
 	  int match = 0;
 	  /* Are we going to delete b?  */
-	  if (b->type != bp_none && !is_watchpoint (b))
+	  if (b.type != bp_none && !is_watchpoint (&b)
+	      && user_breakpoint_p (&b))
 	    {
-	      struct bp_location *loc = b->loc;
-	      for (; loc; loc = loc->next)
+	      for (bp_location &loc : b.locations ())
 		{
 		  /* If the user specified file:line, don't allow a PC
 		     match.  This matches historical gdb behavior.  */
 		  int pc_match = (!sal.explicit_line
 				  && sal.pc
-				  && (loc->pspace == sal.pspace)
-				  && (loc->address == sal.pc)
-				  && (!section_is_overlay (loc->section)
-				      || loc->section == sal.section));
+				  && (loc.pspace == sal.pspace)
+				  && (loc.address == sal.pc)
+				  && (!section_is_overlay (loc.section)
+				      || loc.section == sal.section));
 		  int line_match = 0;
 
 		  if ((default_match || sal.explicit_line)
-		      && loc->symtab != NULL
+		      && loc.symtab != NULL
 		      && sal_fullname != NULL
-		      && sal.pspace == loc->pspace
-		      && loc->line_number == sal.line
-		      && filename_cmp (symtab_to_fullname (loc->symtab),
+		      && sal.pspace == loc.pspace
+		      && loc.line_number == sal.line
+		      && filename_cmp (symtab_to_fullname (loc.symtab),
 				       sal_fullname) == 0)
 		    line_match = 1;
 
@@ -11391,7 +11116,7 @@ clear_command (const char *arg, int from
 	    }
 
 	  if (match)
-	    found.push_back (b);
+	    found.push_back (&b);
 	}
     }
 
@@ -11422,19 +11147,19 @@ clear_command (const char *arg, int from
   if (from_tty)
     {
       if (found.size () == 1)
-	printf_unfiltered (_("Deleted breakpoint "));
+	gdb_printf (_("Deleted breakpoint "));
       else
-	printf_unfiltered (_("Deleted breakpoints "));
+	gdb_printf (_("Deleted breakpoints "));
     }
 
   for (breakpoint *iter : found)
     {
       if (from_tty)
-	printf_unfiltered ("%d ", iter->number);
+	gdb_printf ("%d ", iter->number);
       delete_breakpoint (iter);
     }
   if (from_tty)
-    putchar_unfiltered ('\n');
+    gdb_putc ('\n');
 }
 
 /* Delete breakpoint in BS if they are `delete' breakpoints and
@@ -11442,27 +11167,23 @@ clear_command (const char *arg, int from
    This is called after any breakpoint is hit, or after errors.  */
 
 void
-breakpoint_auto_delete (bpstat bs)
+breakpoint_auto_delete (bpstat *bs)
 {
-  struct breakpoint *b, *b_tmp;
-
   for (; bs; bs = bs->next)
     if (bs->breakpoint_at
 	&& bs->breakpoint_at->disposition == disp_del
 	&& bs->stop)
       delete_breakpoint (bs->breakpoint_at);
 
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-  {
-    if (b->disposition == disp_del_at_next_stop)
-      delete_breakpoint (b);
-  }
+  for (breakpoint &b : all_breakpoints_safe ())
+    if (b.disposition == disp_del_at_next_stop)
+      delete_breakpoint (&b);
 }
 
 /* A comparison function for bp_location AP and BP being interfaced to
    std::sort.  Sort elements primarily by their ADDRESS (no matter what
    bl_address_is_meaningful says), secondarily by ordering first
-   permanent elements and terciarily just ensuring the array is sorted
+   permanent elements and tertiarily just ensuring the array is sorted
    stable way despite std::sort being an unstable algorithm.  */
 
 static int
@@ -11482,6 +11203,18 @@ bp_location_is_less_than (const bp_locat
   if (a->permanent != b->permanent)
     return a->permanent > b->permanent;
 
+  /* Sort by type in order to make duplicate determination easier.
+     See update_global_location_list.  This is kept in sync with
+     breakpoint_locations_match.  */
+  if (a->loc_type < b->loc_type)
+    return true;
+
+  /* Likewise, for range-breakpoints, sort by length.  */
+  if (a->loc_type == bp_loc_hardware_breakpoint
+      && b->loc_type == bp_loc_hardware_breakpoint
+      && a->length < b->length)
+    return true;
+
   /* Make the internal GDB representation stable across GDB runs
      where A and B memory inside GDB can differ.  Breakpoint locations of
      the same type at the same address can be sorted in arbitrary order.  */
@@ -11499,12 +11232,10 @@ bp_location_is_less_than (const bp_locat
 static void
 bp_locations_target_extensions_update (void)
 {
-  struct bp_location *bl, **blp_tmp;
-
   bp_locations_placed_address_before_address_max = 0;
   bp_locations_shadow_len_after_address_max = 0;
 
-  ALL_BP_LOCATIONS (bl, blp_tmp)
+  for (bp_location *bl : all_bp_locations ())
     {
       CORE_ADDR start, end, addr;
 
@@ -11533,18 +11264,15 @@ bp_locations_target_extensions_update (v
 static void
 download_tracepoint_locations (void)
 {
-  struct breakpoint *b;
   enum tribool can_download_tracepoint = TRIBOOL_UNKNOWN;
 
   scoped_restore_current_pspace_and_thread restore_pspace_thread;
 
-  ALL_TRACEPOINTS (b)
+  for (breakpoint &b : all_tracepoints ())
     {
-      struct bp_location *bl;
-      struct tracepoint *t;
-      int bp_location_downloaded = 0;
+      bool bp_location_downloaded = false;
 
-      if ((b->type == bp_fast_tracepoint
+      if ((b.type == bp_fast_tracepoint
 	   ? !may_insert_fast_tracepoints
 	   : !may_insert_tracepoints))
 	continue;
@@ -11560,25 +11288,26 @@ download_tracepoint_locations (void)
       if (can_download_tracepoint == TRIBOOL_FALSE)
 	break;
 
-      for (bl = b->loc; bl; bl = bl->next)
+      for (bp_location &bl : b.locations ())
 	{
 	  /* In tracepoint, locations are _never_ duplicated, so
 	     should_be_inserted is equivalent to
 	     unduplicated_should_be_inserted.  */
-	  if (!should_be_inserted (bl) || bl->inserted)
+	  if (!should_be_inserted (&bl) || bl.inserted)
 	    continue;
 
-	  switch_to_program_space_and_thread (bl->pspace);
+	  switch_to_program_space_and_thread (bl.pspace);
 
-	  target_download_tracepoint (bl);
+	  target_download_tracepoint (&bl);
 
-	  bl->inserted = 1;
-	  bp_location_downloaded = 1;
+	  bl.inserted = 1;
+	  bp_location_downloaded = true;
 	}
-      t = (struct tracepoint *) b;
-      t->number_on_target = b->number;
+
+      tracepoint &t = gdb::checked_static_cast<tracepoint &> (b);
+      t.number_on_target = b.number;
       if (bp_location_downloaded)
-	gdb::observers::breakpoint_modified.notify (b);
+	notify_breakpoint_modified (&b);
     }
 }
 
@@ -11616,8 +11345,6 @@ swap_insertion (struct bp_location *left
 static void
 force_breakpoint_reinsertion (struct bp_location *bl)
 {
-  struct bp_location **locp = NULL, **loc2p;
-  struct bp_location *loc;
   CORE_ADDR address = 0;
   int pspace_num;
 
@@ -11636,10 +11363,8 @@ force_breakpoint_reinsertion (struct bp_
      the same program space as the location
      as "its condition has changed".  We need to
      update the conditions on the target's side.  */
-  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, address)
+  for (bp_location *loc : all_bp_locations_at_addr (address))
     {
-      loc = *loc2p;
-
       if (!is_breakpoint (loc->owner)
 	  || pspace_num != loc->pspace->num)
 	continue;
@@ -11656,6 +11381,7 @@ force_breakpoint_reinsertion (struct bp_
       loc->cond_bytecode.reset ();
     }
 }
+
 /* Called whether new breakpoints are created, or existing breakpoints
    deleted, to update the global location list and recompute which
    locations are duplicate of which.
@@ -11667,13 +11393,14 @@ force_breakpoint_reinsertion (struct bp_
 static void
 update_global_location_list (enum ugll_insert_mode insert_mode)
 {
-  struct breakpoint *b;
-  struct bp_location **locp, *loc;
   /* Last breakpoint location address that was marked for update.  */
   CORE_ADDR last_addr = 0;
   /* Last breakpoint location program space that was marked for update.  */
   int last_pspace_num = -1;
 
+  breakpoint_debug_printf ("insert_mode = %s",
+			   ugll_insert_mode_text (insert_mode));
+
   /* Used in the duplicates detection below.  When iterating over all
      bp_locations, points to the first bp_location of a given address.
      Breakpoints and watchpoints of different types are never
@@ -11687,24 +11414,22 @@ update_global_location_list (enum ugll_i
 
   /* Saved former bp_locations array which we compare against the newly
      built bp_locations from the current state of ALL_BREAKPOINTS.  */
-  struct bp_location **old_locp;
-  unsigned old_locations_count;
-  gdb::unique_xmalloc_ptr<struct bp_location *> old_locations (bp_locations);
-
-  old_locations_count = bp_locations_count;
-  bp_locations = NULL;
-  bp_locations_count = 0;
-
-  ALL_BREAKPOINTS (b)
-    for (loc = b->loc; loc; loc = loc->next)
-      bp_locations_count++;
-
-  bp_locations = XNEWVEC (struct bp_location *, bp_locations_count);
-  locp = bp_locations;
-  ALL_BREAKPOINTS (b)
-    for (loc = b->loc; loc; loc = loc->next)
-      *locp++ = loc;
-  std::sort (bp_locations, bp_locations + bp_locations_count,
+  std::vector<bp_location *> old_locations = std::move (bp_locations);
+  bp_locations.clear ();
+
+  for (breakpoint &b : all_breakpoints ())
+    for (bp_location &loc : b.locations ())
+      bp_locations.push_back (&loc);
+
+  /* See if we need to "upgrade" a software breakpoint to a hardware
+     breakpoint.  Do this before deciding whether locations are
+     duplicates.  Also do this before sorting because sorting order
+     depends on location type.  */
+  for (bp_location *loc : bp_locations)
+    if (!loc->inserted && should_be_inserted (loc))
+	handle_automatic_hardware_breakpoints (loc);
+
+  std::sort (bp_locations.begin (), bp_locations.end (),
 	     bp_location_is_less_than);
 
   bp_locations_target_extensions_update ();
@@ -11719,46 +11444,41 @@ update_global_location_list (enum ugll_i
      LOCP is kept in sync with OLD_LOCP, each pointing to the current
      and former bp_location array state respectively.  */
 
-  locp = bp_locations;
-  for (old_locp = old_locations.get ();
-       old_locp < old_locations.get () + old_locations_count;
-       old_locp++)
+  size_t loc_i = 0;
+  for (bp_location *old_loc : old_locations)
     {
-      struct bp_location *old_loc = *old_locp;
-      struct bp_location **loc2p;
-
       /* Tells if 'old_loc' is found among the new locations.  If
 	 not, we have to free it.  */
-      int found_object = 0;
+      bool found_object = false;
       /* Tells if the location should remain inserted in the target.  */
-      int keep_in_target = 0;
-      int removed = 0;
+      bool keep_in_target = false;
+      bool removed = false;
 
       /* Skip LOCP entries which will definitely never be needed.
 	 Stop either at or being the one matching OLD_LOC.  */
-      while (locp < bp_locations + bp_locations_count
-	     && (*locp)->address < old_loc->address)
-	locp++;
-
-      for (loc2p = locp;
-	   (loc2p < bp_locations + bp_locations_count
-	    && (*loc2p)->address == old_loc->address);
-	   loc2p++)
+      while (loc_i < bp_locations.size ()
+	     && bp_locations[loc_i]->address < old_loc->address)
+	loc_i++;
+
+      for (size_t loc2_i = loc_i;
+	   (loc2_i < bp_locations.size ()
+	    && bp_locations[loc2_i]->address == old_loc->address);
+	   loc2_i++)
 	{
 	  /* Check if this is a new/duplicated location or a duplicated
 	     location that had its condition modified.  If so, we want to send
 	     its condition to the target if evaluation of conditions is taking
 	     place there.  */
-	  if ((*loc2p)->condition_changed == condition_modified
+	  if (bp_locations[loc2_i]->condition_changed == condition_modified
 	      && (last_addr != old_loc->address
 		  || last_pspace_num != old_loc->pspace->num))
 	    {
-	      force_breakpoint_reinsertion (*loc2p);
+	      force_breakpoint_reinsertion (bp_locations[loc2_i]);
 	      last_pspace_num = old_loc->pspace->num;
 	    }
 
-	  if (*loc2p == old_loc)
-	    found_object = 1;
+	  if (bp_locations[loc2_i] == old_loc)
+	    found_object = true;
 	}
 
       /* We have already handled this address, update it so that we don't
@@ -11784,7 +11504,7 @@ update_global_location_list (enum ugll_i
 	    {
 	      /* The location is still present in the location list,
 		 and still should be inserted.  Don't do anything.  */
-	      keep_in_target = 1;
+	      keep_in_target = true;
 	    }
 	  else
 	    {
@@ -11800,12 +11520,15 @@ update_global_location_list (enum ugll_i
 	      /* OLD_LOC comes from existing struct breakpoint.  */
 	      if (bl_address_is_meaningful (old_loc))
 		{
-		  for (loc2p = locp;
-		       (loc2p < bp_locations + bp_locations_count
-			&& (*loc2p)->address == old_loc->address);
-		       loc2p++)
+		  for (size_t loc2_i = loc_i;
+		       (loc2_i < bp_locations.size ()
+			&& bp_locations[loc2_i]->address == old_loc->address);
+		       loc2_i++)
 		    {
-		      struct bp_location *loc2 = *loc2p;
+		      bp_location *loc2 = bp_locations[loc2_i];
+
+		      if (loc2 == old_loc)
+			continue;
 
 		      if (breakpoint_locations_match (loc2, old_loc))
 			{
@@ -11821,11 +11544,10 @@ update_global_location_list (enum ugll_i
 			  /* loc2 is a duplicated location. We need to check
 			     if it should be inserted in case it will be
 			     unduplicated.  */
-			  if (loc2 != old_loc
-			      && unduplicated_should_be_inserted (loc2))
+			  if (unduplicated_should_be_inserted (loc2))
 			    {
 			      swap_insertion (old_loc, loc2);
-			      keep_in_target = 1;
+			      keep_in_target = true;
 			      break;
 			    }
 			}
@@ -11845,11 +11567,11 @@ update_global_location_list (enum ugll_i
 		     Note that at this point, old_loc->owner is still
 		     valid, as delete_breakpoint frees the breakpoint
 		     only after calling us.  */
-		  printf_filtered (_("warning: Error removing "
-				     "breakpoint %d\n"), 
-				   old_loc->owner->number);
+		  warning (_("error removing breakpoint %d at %s"),
+			   old_loc->owner->number,
+			   paddress (old_loc->gdbarch, old_loc->address));
 		}
-	      removed = 1;
+	      removed = true;
 	    }
 	}
 
@@ -11903,7 +11625,18 @@ update_global_location_list (enum ugll_i
 		 around.  We simply always ignore hardware watchpoint
 		 traps we can no longer explain.  */
 
-	      old_loc->events_till_retirement = 3 * (thread_count () + 1);
+	      process_stratum_target *proc_target = nullptr;
+	      for (inferior *inf : all_inferiors ())
+		if (inf->pspace == old_loc->pspace)
+		  {
+		    proc_target = inf->process_target ();
+		    break;
+		  }
+	      if (proc_target != nullptr)
+		old_loc->events_till_retirement
+		  = 3 * (thread_count (proc_target) + 1);
+	      else
+		old_loc->events_till_retirement = 1;
 	      old_loc->owner = NULL;
 
 	      moribund_locations.push_back (old_loc);
@@ -11930,12 +11663,13 @@ update_global_location_list (enum ugll_i
   wp_loc_first = NULL;
   awp_loc_first = NULL;
   rwp_loc_first = NULL;
-  ALL_BP_LOCATIONS (loc, locp)
+
+  for (bp_location *loc : all_bp_locations ())
     {
       /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always
 	 non-NULL.  */
       struct bp_location **loc_first_p;
-      b = loc->owner;
+      breakpoint *b = loc->owner;
 
       if (!unduplicated_should_be_inserted (loc)
 	  || !bl_address_is_meaningful (loc)
@@ -12037,9 +11771,9 @@ update_global_location_list_nothrow (enu
 /* Clear BKP from a BPS.  */
 
 static void
-bpstat_remove_bp_location (bpstat bps, struct breakpoint *bpt)
+bpstat_remove_bp_location (bpstat *bps, struct breakpoint *bpt)
 {
-  bpstat bs;
+  bpstat *bs;
 
   for (bs = bps; bs; bs = bs->next)
     if (bs->breakpoint_at == bpt)
@@ -12060,11 +11794,10 @@ bpstat_remove_breakpoint_callback (struc
   return 0;
 }
 
-/* Helper for breakpoint and tracepoint breakpoint_ops->mention
-   callbacks.  */
+/* See breakpoint.h.  */
 
-static void
-say_where (struct breakpoint *b)
+void
+code_breakpoint::say_where () const
 {
   struct value_print_options opts;
 
@@ -12072,287 +11805,220 @@ say_where (struct breakpoint *b)
 
   /* i18n: cagney/2005-02-11: Below needs to be merged into a
      single string.  */
-  if (b->loc == NULL)
+  if (!this->has_locations ())
     {
       /* For pending locations, the output differs slightly based
-	 on b->extra_string.  If this is non-NULL, it contains either
+	 on extra_string.  If this is non-NULL, it contains either
 	 a condition or dprintf arguments.  */
-      if (b->extra_string == NULL)
+      if (extra_string == NULL)
 	{
-	  printf_filtered (_(" (%s) pending."),
-			   event_location_to_string (b->location.get ()));
+	  gdb_printf (_(" (%s) pending."), locspec->to_string ());
 	}
-      else if (b->type == bp_dprintf)
+      else if (type == bp_dprintf)
 	{
-	  printf_filtered (_(" (%s,%s) pending."),
-			   event_location_to_string (b->location.get ()),
-			   b->extra_string);
+	  gdb_printf (_(" (%s,%s) pending."),
+		      locspec->to_string (),
+		      extra_string.get ());
 	}
       else
 	{
-	  printf_filtered (_(" (%s %s) pending."),
-			   event_location_to_string (b->location.get ()),
-			   b->extra_string);
+	  gdb_printf (_(" (%s %s) pending."),
+		      locspec->to_string (),
+		      extra_string.get ());
 	}
     }
   else
     {
-      if (opts.addressprint || b->loc->symtab == NULL)
-	printf_filtered (" at %ps",
-			 styled_string (address_style.style (),
-					paddress (b->loc->gdbarch,
-						  b->loc->address)));
-      if (b->loc->symtab != NULL)
+      const bp_location &bl = this->first_loc ();
+      if (opts.addressprint || bl.symtab == nullptr)
+	gdb_printf (" at %ps",
+		    styled_string (address_style.style (),
+				   paddress (bl.gdbarch,
+					     bl.address)));
+      if (bl.symtab != NULL)
 	{
 	  /* If there is a single location, we can print the location
 	     more nicely.  */
-	  if (b->loc->next == NULL)
+	  if (!this->has_multiple_locations ())
 	    {
 	      const char *filename
-		= symtab_to_filename_for_display (b->loc->symtab);
-	      printf_filtered (": file %ps, line %d.",
-			       styled_string (file_name_style.style (),
-					      filename),
-			       b->loc->line_number);
+		= symtab_to_filename_for_display (bl.symtab);
+	      gdb_printf (": file %ps, line %d.",
+			  styled_string (file_name_style.style (),
+					 filename),
+			  bl.line_number);
 	    }
 	  else
 	    /* This is not ideal, but each location may have a
 	       different file name, and this at least reflects the
 	       real situation somewhat.  */
-	    printf_filtered (": %s.",
-			     event_location_to_string (b->location.get ()));
+	    gdb_printf (": %s.", locspec->to_string ());
 	}
 
-      if (b->loc->next)
+      if (this->has_multiple_locations ())
 	{
-	  struct bp_location *loc = b->loc;
-	  int n = 0;
-	  for (; loc; loc = loc->next)
-	    ++n;
-	  printf_filtered (" (%d locations)", n);
+	  int n = std::distance (m_locations.begin (), m_locations.end ());
+	  gdb_printf (" (%d locations)", n);
 	}
     }
 }
 
-bp_location::~bp_location ()
-{
-  xfree (function_name);
-}
-
-/* Destructor for the breakpoint base class.  */
-
-breakpoint::~breakpoint ()
-{
-  xfree (this->cond_string);
-  xfree (this->extra_string);
-}
+/* See breakpoint.h.  */
 
-static struct bp_location *
-base_breakpoint_allocate_location (struct breakpoint *self)
+bp_location_range breakpoint::locations () const
 {
-  return new bp_location (self);
+  return bp_location_range (m_locations.begin (), m_locations.end ());
 }
 
-static void
-base_breakpoint_re_set (struct breakpoint *b)
+struct bp_location *
+breakpoint::allocate_location ()
 {
-  /* Nothing to re-set. */
+  return new bp_location (this);
 }
 
-#define internal_error_pure_virtual_called() \
-  gdb_assert_not_reached ("pure virtual function called")
+/* See breakpoint.h.  */
 
-static int
-base_breakpoint_insert_location (struct bp_location *bl)
+void
+breakpoint::add_location (bp_location &loc)
 {
-  internal_error_pure_virtual_called ();
-}
+  gdb_assert (loc.owner == this);
+  gdb_assert (!loc.is_linked ());
 
-static int
-base_breakpoint_remove_location (struct bp_location *bl,
-				 enum remove_bp_reason reason)
-{
-  internal_error_pure_virtual_called ();
+  auto ub = std::upper_bound (m_locations.begin (), m_locations.end (),
+			      loc,
+			      [] (const bp_location &left,
+				  const bp_location &right)
+				{ return left.address < right.address; });
+  m_locations.insert (ub, loc);
 }
 
-static int
-base_breakpoint_breakpoint_hit (const struct bp_location *bl,
-				const address_space *aspace,
-				CORE_ADDR bp_addr,
-				const struct target_waitstatus *ws)
-{
-  internal_error_pure_virtual_called ();
-}
+/* See breakpoint.h.  */
 
-static void
-base_breakpoint_check_status (bpstat bs)
+void
+breakpoint::unadd_location (bp_location &loc)
 {
-  /* Always stop.   */
-}
-
-/* A "works_in_software_mode" breakpoint_ops method that just internal
-   errors.  */
+  gdb_assert (loc.owner == this);
+  gdb_assert (loc.is_linked ());
 
-static int
-base_breakpoint_works_in_software_mode (const struct breakpoint *b)
-{
-  internal_error_pure_virtual_called ();
+  m_locations.erase (m_locations.iterator_to (loc));
 }
 
-/* A "resources_needed" breakpoint_ops method that just internal
-   errors.  */
+#define internal_error_pure_virtual_called() \
+  gdb_assert_not_reached ("pure virtual function called")
 
-static int
-base_breakpoint_resources_needed (const struct bp_location *bl)
+int
+breakpoint::insert_location (struct bp_location *bl)
 {
   internal_error_pure_virtual_called ();
 }
 
-static enum print_stop_action
-base_breakpoint_print_it (bpstat bs)
+int
+breakpoint::remove_location (struct bp_location *bl,
+			     enum remove_bp_reason reason)
 {
   internal_error_pure_virtual_called ();
 }
 
-static void
-base_breakpoint_print_one_detail (const struct breakpoint *self,
-				  struct ui_out *uiout)
-{
-  /* nothing */
-}
-
-static void
-base_breakpoint_print_mention (struct breakpoint *b)
+int
+breakpoint::breakpoint_hit (const struct bp_location *bl,
+			    const address_space *aspace,
+			    CORE_ADDR bp_addr,
+			    const target_waitstatus &ws)
 {
   internal_error_pure_virtual_called ();
 }
 
-static void
-base_breakpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
+int
+breakpoint::resources_needed (const struct bp_location *bl)
 {
   internal_error_pure_virtual_called ();
 }
 
-static void
-base_breakpoint_create_sals_from_location
-  (const struct event_location *location,
-   struct linespec_result *canonical,
-   enum bptype type_wanted)
+enum print_stop_action
+breakpoint::print_it (const bpstat *bs) const
 {
   internal_error_pure_virtual_called ();
 }
 
-static void
-base_breakpoint_create_breakpoints_sal (struct gdbarch *gdbarch,
-					struct linespec_result *c,
-					gdb::unique_xmalloc_ptr<char> cond_string,
-					gdb::unique_xmalloc_ptr<char> extra_string,
-					enum bptype type_wanted,
-					enum bpdisp disposition,
-					int thread,
-					int task, int ignore_count,
-					const struct breakpoint_ops *o,
-					int from_tty, int enabled,
-					int internal, unsigned flags)
+void
+breakpoint::print_mention () const
 {
   internal_error_pure_virtual_called ();
 }
 
-static std::vector<symtab_and_line>
-base_breakpoint_decode_location (struct breakpoint *b,
-				 const struct event_location *location,
-				 struct program_space *search_pspace)
+void
+breakpoint::print_recreate (struct ui_file *fp) const
 {
   internal_error_pure_virtual_called ();
 }
 
-/* The default 'explains_signal' method.  */
-
-static int
-base_breakpoint_explains_signal (struct breakpoint *b, enum gdb_signal sig)
-{
-  return 1;
-}
-
-/* The default "after_condition_true" method.  */
-
-static void
-base_breakpoint_after_condition_true (struct bpstats *bs)
-{
-  /* Nothing to do.   */
-}
-
-struct breakpoint_ops base_breakpoint_ops =
-{
-  base_breakpoint_allocate_location,
-  base_breakpoint_re_set,
-  base_breakpoint_insert_location,
-  base_breakpoint_remove_location,
-  base_breakpoint_breakpoint_hit,
-  base_breakpoint_check_status,
-  base_breakpoint_resources_needed,
-  base_breakpoint_works_in_software_mode,
-  base_breakpoint_print_it,
-  NULL,
-  base_breakpoint_print_one_detail,
-  base_breakpoint_print_mention,
-  base_breakpoint_print_recreate,
-  base_breakpoint_create_sals_from_location,
-  base_breakpoint_create_breakpoints_sal,
-  base_breakpoint_decode_location,
-  base_breakpoint_explains_signal,
-  base_breakpoint_after_condition_true,
-};
-
 /* Default breakpoint_ops methods.  */
 
-static void
-bkpt_re_set (struct breakpoint *b)
+void
+code_breakpoint::re_set ()
 {
   /* FIXME: is this still reachable?  */
-  if (breakpoint_event_location_empty_p (b))
+  if (breakpoint_location_spec_empty_p (this))
     {
       /* Anything without a location can't be re-set.  */
-      delete_breakpoint (b);
+      delete_breakpoint (this);
       return;
     }
 
-  breakpoint_re_set_default (b);
+  re_set_default ();
 }
 
-static int
-bkpt_insert_location (struct bp_location *bl)
+int
+code_breakpoint::insert_location (struct bp_location *bl)
 {
   CORE_ADDR addr = bl->target_info.reqstd_address;
 
   bl->target_info.kind = breakpoint_kind (bl, &addr);
   bl->target_info.placed_address = addr;
 
+  int result;
   if (bl->loc_type == bp_loc_hardware_breakpoint)
-    return target_insert_hw_breakpoint (bl->gdbarch, &bl->target_info);
+    result = target_insert_hw_breakpoint (bl->gdbarch, &bl->target_info);
   else
-    return target_insert_breakpoint (bl->gdbarch, &bl->target_info);
+    result = target_insert_breakpoint (bl->gdbarch, &bl->target_info);
+
+  if (result == 0 && bl->probe.prob != nullptr)
+    {
+      /* The insertion was successful, now let's set the probe's semaphore
+	 if needed.  */
+      bl->probe.prob->set_semaphore (bl->probe.objfile, bl->gdbarch);
+    }
+
+  return result;
 }
 
-static int
-bkpt_remove_location (struct bp_location *bl, enum remove_bp_reason reason)
+int
+code_breakpoint::remove_location (struct bp_location *bl,
+				  enum remove_bp_reason reason)
 {
+  if (bl->probe.prob != nullptr)
+    {
+      /* Let's clear the semaphore before removing the location.  */
+      bl->probe.prob->clear_semaphore (bl->probe.objfile, bl->gdbarch);
+    }
+
   if (bl->loc_type == bp_loc_hardware_breakpoint)
     return target_remove_hw_breakpoint (bl->gdbarch, &bl->target_info);
   else
     return target_remove_breakpoint (bl->gdbarch, &bl->target_info, reason);
 }
 
-static int
-bkpt_breakpoint_hit (const struct bp_location *bl,
-		     const address_space *aspace, CORE_ADDR bp_addr,
-		     const struct target_waitstatus *ws)
+int
+code_breakpoint::breakpoint_hit (const struct bp_location *bl,
+				 const address_space *aspace,
+				 CORE_ADDR bp_addr,
+				 const target_waitstatus &ws)
 {
-  if (ws->kind != TARGET_WAITKIND_STOPPED
-      || ws->value.sig != GDB_SIGNAL_TRAP)
+  if (ws.kind () != TARGET_WAITKIND_STOPPED
+      || ws.sig () != GDB_SIGNAL_TRAP)
     return 0;
 
-  if (!breakpoint_address_match (bl->pspace->aspace, bl->address,
+  if (!breakpoint_address_match (bl->pspace->aspace.get (), bl->address,
 				 aspace, bp_addr))
     return 0;
 
@@ -12364,10 +12030,11 @@ bkpt_breakpoint_hit (const struct bp_loc
   return 1;
 }
 
-static int
-dprintf_breakpoint_hit (const struct bp_location *bl,
-			const address_space *aspace, CORE_ADDR bp_addr,
-			const struct target_waitstatus *ws)
+int
+dprintf_breakpoint::breakpoint_hit (const struct bp_location *bl,
+				    const address_space *aspace,
+				    CORE_ADDR bp_addr,
+				    const target_waitstatus &ws)
 {
   if (dprintf_style == dprintf_style_agent
       && target_can_run_breakpoint_commands ())
@@ -12378,154 +12045,135 @@ dprintf_breakpoint_hit (const struct bp_
       return 0;
     }
 
-  return bkpt_breakpoint_hit (bl, aspace, bp_addr, ws);
+  return this->ordinary_breakpoint::breakpoint_hit (bl, aspace, bp_addr, ws);
 }
 
-static int
-bkpt_resources_needed (const struct bp_location *bl)
+int
+ordinary_breakpoint::resources_needed (const struct bp_location *bl)
 {
-  gdb_assert (bl->owner->type == bp_hardware_breakpoint);
+  gdb_assert (type == bp_hardware_breakpoint);
 
   return 1;
 }
 
-static enum print_stop_action
-bkpt_print_it (bpstat bs)
+enum print_stop_action
+ordinary_breakpoint::print_it (const bpstat *bs) const
 {
-  struct breakpoint *b;
   const struct bp_location *bl;
   int bp_temp;
   struct ui_out *uiout = current_uiout;
 
-  gdb_assert (bs->bp_location_at != NULL);
-
-  bl = bs->bp_location_at;
-  b = bs->breakpoint_at;
+  bl = bs->bp_location_at.get ();
 
-  bp_temp = b->disposition == disp_del;
+  bp_temp = disposition == disp_del;
   if (bl->address != bl->requested_address)
     breakpoint_adjustment_warning (bl->requested_address,
 				   bl->address,
-				   b->number, 1);
-  annotate_breakpoint (b->number);
+				   number, true);
+  annotate_breakpoint (number);
   maybe_print_thread_hit_breakpoint (uiout);
 
   if (uiout->is_mi_like_p ())
     {
       uiout->field_string ("reason",
 			   async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
-      uiout->field_string ("disp", bpdisp_text (b->disposition));
+      uiout->field_string ("disp", bpdisp_text (disposition));
     }
+
   if (bp_temp)
-    uiout->message ("Temporary breakpoint %pF, ",
-		    signed_field ("bkptno", b->number));
+    uiout->text ("Temporary breakpoint ");
   else
-    uiout->message ("Breakpoint %pF, ",
-		    signed_field ("bkptno", b->number));
+    uiout->text ("Breakpoint ");
+  print_num_locno (bs, uiout);
+  uiout->text (", ");
 
   return PRINT_SRC_AND_LOC;
 }
 
-static void
-bkpt_print_mention (struct breakpoint *b)
+void
+ordinary_breakpoint::print_mention () const
 {
   if (current_uiout->is_mi_like_p ())
     return;
 
-  switch (b->type)
+  switch (type)
     {
     case bp_breakpoint:
     case bp_gnu_ifunc_resolver:
-      if (b->disposition == disp_del)
-	printf_filtered (_("Temporary breakpoint"));
+      if (disposition == disp_del)
+	gdb_printf (_("Temporary breakpoint"));
       else
-	printf_filtered (_("Breakpoint"));
-      printf_filtered (_(" %d"), b->number);
-      if (b->type == bp_gnu_ifunc_resolver)
-	printf_filtered (_(" at gnu-indirect-function resolver"));
+	gdb_printf (_("Breakpoint"));
+      gdb_printf (_(" %d"), number);
+      if (type == bp_gnu_ifunc_resolver)
+	gdb_printf (_(" at gnu-indirect-function resolver"));
       break;
     case bp_hardware_breakpoint:
-      printf_filtered (_("Hardware assisted breakpoint %d"), b->number);
+      gdb_printf (_("Hardware assisted breakpoint %d"), number);
       break;
     case bp_dprintf:
-      printf_filtered (_("Dprintf %d"), b->number);
+      gdb_printf (_("Dprintf %d"), number);
       break;
     }
 
-  say_where (b);
+  say_where ();
 }
 
-static void
-bkpt_print_recreate (struct breakpoint *tp, struct ui_file *fp)
+void
+ordinary_breakpoint::print_recreate (struct ui_file *fp) const
 {
-  if (tp->type == bp_breakpoint && tp->disposition == disp_del)
-    fprintf_unfiltered (fp, "tbreak");
-  else if (tp->type == bp_breakpoint)
-    fprintf_unfiltered (fp, "break");
-  else if (tp->type == bp_hardware_breakpoint
-	   && tp->disposition == disp_del)
-    fprintf_unfiltered (fp, "thbreak");
-  else if (tp->type == bp_hardware_breakpoint)
-    fprintf_unfiltered (fp, "hbreak");
+  if (type == bp_breakpoint && disposition == disp_del)
+    gdb_printf (fp, "tbreak");
+  else if (type == bp_breakpoint)
+    gdb_printf (fp, "break");
+  else if (type == bp_hardware_breakpoint
+	   && disposition == disp_del)
+    gdb_printf (fp, "thbreak");
+  else if (type == bp_hardware_breakpoint)
+    gdb_printf (fp, "hbreak");
   else
-    internal_error (__FILE__, __LINE__,
-		    _("unhandled breakpoint type %d"), (int) tp->type);
+    internal_error (_("unhandled breakpoint type %d"), (int) type);
 
-  fprintf_unfiltered (fp, " %s",
-		      event_location_to_string (tp->location.get ()));
+  gdb_printf (fp, " %s", locspec->to_string ());
 
   /* Print out extra_string if this breakpoint is pending.  It might
      contain, for example, conditions that were set by the user.  */
-  if (tp->loc == NULL && tp->extra_string != NULL)
-    fprintf_unfiltered (fp, " %s", tp->extra_string);
+  if (!this->has_locations () && extra_string != NULL)
+    gdb_printf (fp, " %s", extra_string.get ());
 
-  print_recreate_thread (tp, fp);
+  print_recreate_thread (fp);
 }
 
-static void
-bkpt_create_sals_from_location (const struct event_location *location,
-				struct linespec_result *canonical,
-				enum bptype type_wanted)
+std::vector<symtab_and_line>
+code_breakpoint::decode_location_spec (location_spec *locspec,
+				       program_space *search_pspace)
 {
-  create_sals_from_location_default (location, canonical, type_wanted);
-}
+  if (locspec->type () == PROBE_LOCATION_SPEC)
+    return bkpt_probe_decode_location_spec (this, locspec, search_pspace);
 
-static void
-bkpt_create_breakpoints_sal (struct gdbarch *gdbarch,
-			     struct linespec_result *canonical,
-			     gdb::unique_xmalloc_ptr<char> cond_string,
-			     gdb::unique_xmalloc_ptr<char> extra_string,
-			     enum bptype type_wanted,
-			     enum bpdisp disposition,
-			     int thread,
-			     int task, int ignore_count,
-			     const struct breakpoint_ops *ops,
-			     int from_tty, int enabled,
-			     int internal, unsigned flags)
-{
-  create_breakpoints_sal_default (gdbarch, canonical,
-				  std::move (cond_string),
-				  std::move (extra_string),
-				  type_wanted,
-				  disposition, thread, task,
-				  ignore_count, ops, from_tty,
-				  enabled, internal, flags);
-}
+  struct linespec_result canonical;
 
-static std::vector<symtab_and_line>
-bkpt_decode_location (struct breakpoint *b,
-		      const struct event_location *location,
-		      struct program_space *search_pspace)
-{
-  return decode_location_default (b, location, search_pspace);
+  decode_line_full (locspec, DECODE_LINE_FUNFIRSTLINE, search_pspace,
+		    NULL, 0, &canonical, multiple_symbols_all,
+		    filter.get ());
+
+  /* We should get 0 or 1 resulting SALs.  */
+  gdb_assert (canonical.lsals.size () < 2);
+
+  if (!canonical.lsals.empty ())
+    {
+      const linespec_sals &lsal = canonical.lsals[0];
+      return std::move (lsal.sals);
+    }
+  return {};
 }
 
 /* Virtual table for internal breakpoints.  */
 
-static void
-internal_bkpt_re_set (struct breakpoint *b)
+void
+internal_breakpoint::re_set ()
 {
-  switch (b->type)
+  switch (type)
     {
       /* Delete overlay event and longjmp master breakpoints; they
 	 will be reset later by breakpoint_re_set.  */
@@ -12533,11 +12181,11 @@ internal_bkpt_re_set (struct breakpoint
     case bp_longjmp_master:
     case bp_std_terminate_master:
     case bp_exception_master:
-      delete_breakpoint (b);
+      delete_breakpoint (this);
       break;
 
       /* This breakpoint is special, it's set up when the inferior
-         starts and we really don't want to touch it.  */
+	 starts and we really don't want to touch it.  */
     case bp_shlib_event:
 
       /* Like bp_shlib_event, this breakpoint type is special.  Once
@@ -12547,80 +12195,76 @@ internal_bkpt_re_set (struct breakpoint
     }
 }
 
-static void
-internal_bkpt_check_status (bpstat bs)
+void
+internal_breakpoint::check_status (bpstat *bs)
 {
-  if (bs->breakpoint_at->type == bp_shlib_event)
+  if (type == bp_shlib_event)
     {
       /* If requested, stop when the dynamic linker notifies GDB of
 	 events.  This allows the user to get control and place
 	 breakpoints in initializer routines for dynamically loaded
 	 objects (among other things).  */
-      bs->stop = stop_on_solib_events;
-      bs->print = stop_on_solib_events;
+      bs->stop = stop_on_solib_events != 0;
+      bs->print = stop_on_solib_events != 0;
     }
   else
-    bs->stop = 0;
+    bs->stop = false;
 }
 
-static enum print_stop_action
-internal_bkpt_print_it (bpstat bs)
+enum print_stop_action
+internal_breakpoint::print_it (const bpstat *bs) const
 {
-  struct breakpoint *b;
-
-  b = bs->breakpoint_at;
-
-  switch (b->type)
+  switch (type)
     {
     case bp_shlib_event:
       /* Did we stop because the user set the stop_on_solib_events
 	 variable?  (If so, we report this as a generic, "Stopped due
 	 to shlib event" message.) */
-      print_solib_event (0);
+      print_solib_event (false);
       break;
 
     case bp_thread_event:
       /* Not sure how we will get here.
 	 GDB should not stop for these breakpoints.  */
-      printf_filtered (_("Thread Event Breakpoint: gdb should not stop!\n"));
+      gdb_printf (_("Thread Event Breakpoint: gdb should not stop!\n"));
       break;
 
     case bp_overlay_event:
       /* By analogy with the thread event, GDB should not stop for these.  */
-      printf_filtered (_("Overlay Event Breakpoint: gdb should not stop!\n"));
+      gdb_printf (_("Overlay Event Breakpoint: gdb should not stop!\n"));
       break;
 
     case bp_longjmp_master:
       /* These should never be enabled.  */
-      printf_filtered (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
+      gdb_printf (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
       break;
 
     case bp_std_terminate_master:
       /* These should never be enabled.  */
-      printf_filtered (_("std::terminate Master Breakpoint: "
-			 "gdb should not stop!\n"));
+      gdb_printf (_("std::terminate Master Breakpoint: "
+		    "gdb should not stop!\n"));
       break;
 
     case bp_exception_master:
       /* These should never be enabled.  */
-      printf_filtered (_("Exception Master Breakpoint: "
-			 "gdb should not stop!\n"));
+      gdb_printf (_("Exception Master Breakpoint: "
+		    "gdb should not stop!\n"));
       break;
     }
 
   return PRINT_NOTHING;
 }
 
-static void
-internal_bkpt_print_mention (struct breakpoint *b)
+void
+internal_breakpoint::print_mention () const
 {
   /* Nothing to mention.  These breakpoints are internal.  */
 }
 
 /* Virtual table for momentary breakpoints  */
 
-static void
-momentary_bkpt_re_set (struct breakpoint *b)
+void
+momentary_breakpoint::re_set ()
 {
   /* Keep temporary breakpoints, which can be encountered when we step
      over a dlopen call and solib_add is resetting the breakpoints.
@@ -12628,20 +12272,20 @@ momentary_bkpt_re_set (struct breakpoint
      or by breakpoint_init_inferior when we rerun the executable.  */
 }
 
-static void
-momentary_bkpt_check_status (bpstat bs)
+void
+momentary_breakpoint::check_status (bpstat *bs)
 {
   /* Nothing.  The point of these breakpoints is causing a stop.  */
 }
 
-static enum print_stop_action
-momentary_bkpt_print_it (bpstat bs)
+enum print_stop_action
+momentary_breakpoint::print_it (const bpstat *bs) const
 {
   return PRINT_UNKNOWN;
 }
 
-static void
-momentary_bkpt_print_mention (struct breakpoint *b)
+void
+momentary_breakpoint::print_mention () const
 {
   /* Nothing to mention.  These breakpoints are internal.  */
 }
@@ -12659,211 +12303,120 @@ longjmp_breakpoint::~longjmp_breakpoint
     tp->initiating_frame = null_frame_id;
 }
 
-/* Specific methods for probe breakpoints.  */
-
-static int
-bkpt_probe_insert_location (struct bp_location *bl)
-{
-  int v = bkpt_insert_location (bl);
-
-  if (v == 0)
-    {
-      /* The insertion was successful, now let's set the probe's semaphore
-	 if needed.  */
-      bl->probe.prob->set_semaphore (bl->probe.objfile, bl->gdbarch);
-    }
-
-  return v;
-}
-
-static int
-bkpt_probe_remove_location (struct bp_location *bl,
-			    enum remove_bp_reason reason)
-{
-  /* Let's clear the semaphore before removing the location.  */
-  bl->probe.prob->clear_semaphore (bl->probe.objfile, bl->gdbarch);
-
-  return bkpt_remove_location (bl, reason);
-}
-
 static void
-bkpt_probe_create_sals_from_location (const struct event_location *location,
-				      struct linespec_result *canonical,
-				      enum bptype type_wanted)
+bkpt_probe_create_sals_from_location_spec (location_spec *locspec,
+					   struct linespec_result *canonical)
+
 {
   struct linespec_sals lsal;
 
-  lsal.sals = parse_probes (location, NULL, canonical);
-  lsal.canonical
-    = xstrdup (event_location_to_string (canonical->location.get ()));
+  lsal.sals = parse_probes (locspec, NULL, canonical);
+  lsal.canonical = xstrdup (canonical->locspec->to_string ());
   canonical->lsals.push_back (std::move (lsal));
 }
 
 static std::vector<symtab_and_line>
-bkpt_probe_decode_location (struct breakpoint *b,
-			    const struct event_location *location,
-			    struct program_space *search_pspace)
+bkpt_probe_decode_location_spec (struct breakpoint *b,
+				 location_spec *locspec,
+				 program_space *search_pspace)
 {
-  std::vector<symtab_and_line> sals = parse_probes (location, search_pspace, NULL);
+  std::vector<symtab_and_line> sals
+    = parse_probes (locspec, search_pspace, NULL);
   if (sals.empty ())
     error (_("probe not found"));
   return sals;
 }
 
-/* The breakpoint_ops structure to be used in tracepoints.  */
-
-static void
-tracepoint_re_set (struct breakpoint *b)
-{
-  breakpoint_re_set_default (b);
-}
-
-static int
-tracepoint_breakpoint_hit (const struct bp_location *bl,
-			   const address_space *aspace, CORE_ADDR bp_addr,
-			   const struct target_waitstatus *ws)
+int
+tracepoint::breakpoint_hit (const struct bp_location *bl,
+			    const address_space *aspace, CORE_ADDR bp_addr,
+			    const target_waitstatus &ws)
 {
   /* By definition, the inferior does not report stops at
      tracepoints.  */
   return 0;
 }
 
-static void
-tracepoint_print_one_detail (const struct breakpoint *self,
-			     struct ui_out *uiout)
+void
+tracepoint::print_one_detail (struct ui_out *uiout) const
 {
-  struct tracepoint *tp = (struct tracepoint *) self;
-  if (!tp->static_trace_marker_id.empty ())
+  if (!static_trace_marker_id.empty ())
     {
-      gdb_assert (self->type == bp_static_tracepoint);
+      gdb_assert (type == bp_static_tracepoint
+		  || type == bp_static_marker_tracepoint);
 
       uiout->message ("\tmarker id is %pF\n",
 		      string_field ("static-tracepoint-marker-string-id",
-				    tp->static_trace_marker_id.c_str ()));
+				    static_trace_marker_id.c_str ()));
     }
 }
 
-static void
-tracepoint_print_mention (struct breakpoint *b)
+void
+tracepoint::print_mention () const
 {
   if (current_uiout->is_mi_like_p ())
     return;
 
-  switch (b->type)
+  switch (type)
     {
     case bp_tracepoint:
-      printf_filtered (_("Tracepoint"));
-      printf_filtered (_(" %d"), b->number);
+      gdb_printf (_("Tracepoint"));
+      gdb_printf (_(" %d"), number);
       break;
     case bp_fast_tracepoint:
-      printf_filtered (_("Fast tracepoint"));
-      printf_filtered (_(" %d"), b->number);
+      gdb_printf (_("Fast tracepoint"));
+      gdb_printf (_(" %d"), number);
       break;
     case bp_static_tracepoint:
-      printf_filtered (_("Static tracepoint"));
-      printf_filtered (_(" %d"), b->number);
+    case bp_static_marker_tracepoint:
+      gdb_printf (_("Static tracepoint"));
+      gdb_printf (_(" %d"), number);
       break;
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("unhandled tracepoint type %d"), (int) b->type);
+      internal_error (_("unhandled tracepoint type %d"), (int) type);
     }
 
-  say_where (b);
+  say_where ();
 }
 
-static void
-tracepoint_print_recreate (struct breakpoint *self, struct ui_file *fp)
+void
+tracepoint::print_recreate (struct ui_file *fp) const
 {
-  struct tracepoint *tp = (struct tracepoint *) self;
-
-  if (self->type == bp_fast_tracepoint)
-    fprintf_unfiltered (fp, "ftrace");
-  else if (self->type == bp_static_tracepoint)
-    fprintf_unfiltered (fp, "strace");
-  else if (self->type == bp_tracepoint)
-    fprintf_unfiltered (fp, "trace");
+  if (type == bp_fast_tracepoint)
+    gdb_printf (fp, "ftrace");
+  else if (type == bp_static_tracepoint
+	   || type == bp_static_marker_tracepoint)
+    gdb_printf (fp, "strace");
+  else if (type == bp_tracepoint)
+    gdb_printf (fp, "trace");
   else
-    internal_error (__FILE__, __LINE__,
-		    _("unhandled tracepoint type %d"), (int) self->type);
+    internal_error (_("unhandled tracepoint type %d"), (int) type);
 
-  fprintf_unfiltered (fp, " %s",
-		      event_location_to_string (self->location.get ()));
-  print_recreate_thread (self, fp);
-
-  if (tp->pass_count)
-    fprintf_unfiltered (fp, "  passcount %d\n", tp->pass_count);
-}
-
-static void
-tracepoint_create_sals_from_location (const struct event_location *location,
-				      struct linespec_result *canonical,
-				      enum bptype type_wanted)
-{
-  create_sals_from_location_default (location, canonical, type_wanted);
-}
-
-static void
-tracepoint_create_breakpoints_sal (struct gdbarch *gdbarch,
-				   struct linespec_result *canonical,
-				   gdb::unique_xmalloc_ptr<char> cond_string,
-				   gdb::unique_xmalloc_ptr<char> extra_string,
-				   enum bptype type_wanted,
-				   enum bpdisp disposition,
-				   int thread,
-				   int task, int ignore_count,
-				   const struct breakpoint_ops *ops,
-				   int from_tty, int enabled,
-				   int internal, unsigned flags)
-{
-  create_breakpoints_sal_default (gdbarch, canonical,
-				  std::move (cond_string),
-				  std::move (extra_string),
-				  type_wanted,
-				  disposition, thread, task,
-				  ignore_count, ops, from_tty,
-				  enabled, internal, flags);
-}
+  gdb_printf (fp, " %s", locspec->to_string ());
+  print_recreate_thread (fp);
 
-static std::vector<symtab_and_line>
-tracepoint_decode_location (struct breakpoint *b,
-			    const struct event_location *location,
-			    struct program_space *search_pspace)
-{
-  return decode_location_default (b, location, search_pspace);
+  if (pass_count)
+    gdb_printf (fp, "  passcount %d\n", pass_count);
 }
 
-struct breakpoint_ops tracepoint_breakpoint_ops;
-
 /* Virtual table for tracepoints on static probes.  */
 
 static void
-tracepoint_probe_create_sals_from_location
-  (const struct event_location *location,
-   struct linespec_result *canonical,
-   enum bptype type_wanted)
-{
-  /* We use the same method for breakpoint on probes.  */
-  bkpt_probe_create_sals_from_location (location, canonical, type_wanted);
-}
-
-static std::vector<symtab_and_line>
-tracepoint_probe_decode_location (struct breakpoint *b,
-				  const struct event_location *location,
-				  struct program_space *search_pspace)
+tracepoint_probe_create_sals_from_location_spec
+  (location_spec *locspec,
+   struct linespec_result *canonical)
 {
   /* We use the same method for breakpoint on probes.  */
-  return bkpt_probe_decode_location (b, location, search_pspace);
+  bkpt_probe_create_sals_from_location_spec (locspec, canonical);
 }
 
-/* Dprintf breakpoint_ops methods.  */
-
-static void
-dprintf_re_set (struct breakpoint *b)
+void
+dprintf_breakpoint::re_set ()
 {
-  breakpoint_re_set_default (b);
+  re_set_default ();
 
   /* extra_string should never be non-NULL for dprintf.  */
-  gdb_assert (b->extra_string != NULL);
+  gdb_assert (extra_string != NULL);
 
   /* 1 - connect to target 1, that can run breakpoint commands.
      2 - create a dprintf, which resolves fine.
@@ -12875,23 +12428,20 @@ dprintf_re_set (struct breakpoint *b)
      answers for target_can_run_breakpoint_commands().
      Given absence of finer grained resetting, we get to do
      it all the time.  */
-  if (b->extra_string != NULL)
-    update_dprintf_command_list (b);
+  if (extra_string != NULL)
+    update_dprintf_command_list (this);
 }
 
-/* Implement the "print_recreate" breakpoint_ops method for dprintf.  */
+/* Implement the "print_recreate" method for dprintf.  */
 
-static void
-dprintf_print_recreate (struct breakpoint *tp, struct ui_file *fp)
+void
+dprintf_breakpoint::print_recreate (struct ui_file *fp) const
 {
-  fprintf_unfiltered (fp, "dprintf %s,%s",
-		      event_location_to_string (tp->location.get ()),
-		      tp->extra_string);
-  print_recreate_thread (tp, fp);
+  gdb_printf (fp, "dprintf %s,%s", locspec->to_string (), extra_string.get ());
+  print_recreate_thread (fp);
 }
 
-/* Implement the "after_condition_true" breakpoint_ops method for
-   dprintf.
+/* Implement the "after_condition_true" method for dprintf.
 
    dprintf's are implemented with regular commands in their command
    list, but we run the commands here instead of before presenting the
@@ -12899,53 +12449,43 @@ dprintf_print_recreate (struct breakpoin
    also makes it so that the commands of multiple dprintfs at the same
    address are all handled.  */
 
-static void
-dprintf_after_condition_true (struct bpstats *bs)
+void
+dprintf_breakpoint::after_condition_true (struct bpstat *bs)
 {
-  struct bpstats tmp_bs;
-  struct bpstats *tmp_bs_p = &tmp_bs;
-
   /* dprintf's never cause a stop.  This wasn't set in the
      check_status hook instead because that would make the dprintf's
      condition not be evaluated.  */
-  bs->stop = 0;
+  bs->stop = false;
 
   /* Run the command list here.  Take ownership of it instead of
      copying.  We never want these commands to run later in
      bpstat_do_actions, if a breakpoint that causes a stop happens to
      be set at same address as this dprintf, or even if running the
      commands here throws.  */
-  tmp_bs.commands = bs->commands;
-  bs->commands = NULL;
-
-  bpstat_do_actions_1 (&tmp_bs_p);
-
-  /* 'tmp_bs.commands' will usually be NULL by now, but
-     bpstat_do_actions_1 may return early without processing the whole
-     list.  */
+  counted_command_line cmds = std::move (bs->commands);
+  gdb_assert (cmds != nullptr);
+  execute_control_commands (cmds.get (), 0);
 }
 
 /* The breakpoint_ops structure to be used on static tracepoints with
    markers (`-m').  */
 
 static void
-strace_marker_create_sals_from_location (const struct event_location *location,
-					 struct linespec_result *canonical,
-					 enum bptype type_wanted)
+strace_marker_create_sals_from_location_spec (location_spec *locspec,
+					      struct linespec_result *canonical)
 {
   struct linespec_sals lsal;
   const char *arg_start, *arg;
 
-  arg = arg_start = get_linespec_location (location)->spec_string;
+  arg = arg_start = as_linespec_location_spec (locspec)->spec_string.get ();
   lsal.sals = decode_static_tracepoint_spec (&arg);
 
   std::string str (arg_start, arg - arg_start);
   const char *ptr = str.c_str ();
-  canonical->location
-    = new_linespec_location (&ptr, symbol_name_match_type::FULL);
+  canonical->locspec
+    = new_linespec_location_spec (&ptr, symbol_name_match_type::FULL);
 
-  lsal.canonical
-    = xstrdup (event_location_to_string (canonical->location.get ()));
+  lsal.canonical = xstrdup (canonical->locspec->to_string ());
   canonical->lsals.push_back (std::move (lsal));
 }
 
@@ -12957,8 +12497,8 @@ strace_marker_create_breakpoints_sal (st
 				      enum bptype type_wanted,
 				      enum bpdisp disposition,
 				      int thread,
-				      int task, int ignore_count,
-				      const struct breakpoint_ops *ops,
+				      int task, int inferior,
+				      int ignore_count,
 				      int from_tty, int enabled,
 				      int internal, unsigned flags)
 {
@@ -12973,18 +12513,21 @@ strace_marker_create_breakpoints_sal (st
 
   for (size_t i = 0; i < lsal.sals.size (); i++)
     {
-      event_location_up location
-	= copy_event_location (canonical->location.get ());
+      location_spec_up locspec = canonical->locspec->clone ();
+
+      std::unique_ptr<tracepoint> tp
+	(new tracepoint (gdbarch,
+			 type_wanted,
+			 lsal.sals[i],
+			 std::move (locspec),
+			 NULL,
+			 std::move (cond_string),
+			 std::move (extra_string),
+			 disposition,
+			 thread, task, inferior, ignore_count,
+			 from_tty, enabled, flags,
+			 canonical->special_display));
 
-      std::unique_ptr<tracepoint> tp (new tracepoint ());
-      init_breakpoint_sal (tp.get (), gdbarch, lsal.sals[i],
-			   std::move (location), NULL,
-			   std::move (cond_string),
-			   std::move (extra_string),
-			   type_wanted, disposition,
-			   thread, task, ignore_count, ops,
-			   from_tty, enabled, internal, flags,
-			   canonical->special_display);
       /* Given that its possible to have multiple markers with
 	 the same string id, if the user is creating a static
 	 tracepoint by marker id ("strace -m MARKER_ID"), then
@@ -12997,31 +12540,43 @@ strace_marker_create_breakpoints_sal (st
     }
 }
 
-static std::vector<symtab_and_line>
-strace_marker_decode_location (struct breakpoint *b,
-			       const struct event_location *location,
-			       struct program_space *search_pspace)
+std::vector<symtab_and_line>
+static_marker_tracepoint::decode_location_spec (location_spec *locspec,
+						program_space *search_pspace)
 {
-  struct tracepoint *tp = (struct tracepoint *) b;
-  const char *s = get_linespec_location (location)->spec_string;
+  const char *s = as_linespec_location_spec (locspec)->spec_string.get ();
 
   std::vector<symtab_and_line> sals = decode_static_tracepoint_spec (&s);
-  if (sals.size () > tp->static_trace_marker_id_idx)
+  if (sals.size () > static_trace_marker_id_idx)
     {
-      sals[0] = sals[tp->static_trace_marker_id_idx];
+      sals[0] = sals[static_trace_marker_id_idx];
       sals.resize (1);
       return sals;
     }
   else
-    error (_("marker %s not found"), tp->static_trace_marker_id.c_str ());
+    error (_("marker %s not found"), static_trace_marker_id.c_str ());
 }
 
-static struct breakpoint_ops strace_marker_breakpoint_ops;
+/* Static tracepoints with marker (`-m').  */
+static struct breakpoint_ops strace_marker_breakpoint_ops =
+{
+  strace_marker_create_sals_from_location_spec,
+  strace_marker_create_breakpoints_sal,
+};
 
-static int
+static bool
 strace_marker_p (struct breakpoint *b)
 {
-  return b->ops == &strace_marker_breakpoint_ops;
+  return b->type == bp_static_marker_tracepoint;
+}
+
+/* Notify interpreters and observers that breakpoint B was deleted.  */
+
+static void
+notify_breakpoint_deleted (breakpoint *b)
+{
+  interps_notify_breakpoint_deleted (b);
+  gdb::observers::breakpoint_deleted.notify (b);
 }
 
 /* Delete a breakpoint and clean up all traces of it in the data
@@ -13030,8 +12585,6 @@ strace_marker_p (struct breakpoint *b)
 void
 delete_breakpoint (struct breakpoint *bpt)
 {
-  struct breakpoint *b;
-
   gdb_assert (bpt != NULL);
 
   /* Has this bp already been deleted?  This can happen because
@@ -13061,9 +12614,9 @@ delete_breakpoint (struct breakpoint *bp
       struct watchpoint *w;
 
       if (bpt->type == bp_watchpoint_scope)
-	w = (struct watchpoint *) bpt->related_breakpoint;
+	w = gdb::checked_static_cast<watchpoint *> (bpt->related_breakpoint);
       else if (bpt->related_breakpoint->type == bp_watchpoint_scope)
-	w = (struct watchpoint *) bpt;
+	w = gdb::checked_static_cast<watchpoint *> (bpt);
       else
 	w = NULL;
       if (w != NULL)
@@ -13081,17 +12634,9 @@ delete_breakpoint (struct breakpoint *bp
      a problem in that process, we'll be asked to delete the half-created
      watchpoint.  In that case, don't announce the deletion.  */
   if (bpt->number)
-    gdb::observers::breakpoint_deleted.notify (bpt);
+    notify_breakpoint_deleted (bpt);
 
-  if (breakpoint_chain == bpt)
-    breakpoint_chain = bpt->next;
-
-  ALL_BREAKPOINTS (b)
-    if (b->next == bpt)
-    {
-      b->next = bpt->next;
-      break;
-    }
+  breakpoint_chain.erase (breakpoint_chain.iterator_to (*bpt));
 
   /* Be sure no bpstat's are pointing at the breakpoint after it's
      been freed.  */
@@ -13110,7 +12655,11 @@ delete_breakpoint (struct breakpoint *bp
      belong to this breakpoint.  Do this before freeing the breakpoint
      itself, since remove_breakpoint looks at location's owner.  It
      might be better design to have location completely
-     self-contained, but it's not the case now.  */
+     self-contained, but it's not the case now.
+
+     Clear the location linked list first, otherwise, the intrusive_list
+     destructor accesses the locations after they are freed.  */
+  bpt->clear_locations ();
   update_global_location_list (UGLL_DONT_INSERT);
 
   /* On the chance that someone will soon try again to delete this
@@ -13157,8 +12706,6 @@ iterate_over_related_breakpoints (struct
 static void
 delete_command (const char *arg, int from_tty)
 {
-  struct breakpoint *b, *b_tmp;
-
   dont_repeat ();
 
   if (arg == 0)
@@ -13166,10 +12713,10 @@ delete_command (const char *arg, int fro
       int breaks_to_delete = 0;
 
       /* Delete all breakpoints if no argument.  Do not delete
-         internal breakpoints, these have to be deleted with an
-         explicit breakpoint number argument.  */
-      ALL_BREAKPOINTS (b)
-	if (user_breakpoint_p (b))
+	 internal breakpoints, these have to be deleted with an
+	 explicit breakpoint number argument.  */
+      for (breakpoint &b : all_breakpoints ())
+	if (user_breakpoint_p (&b))
 	  {
 	    breaks_to_delete = 1;
 	    break;
@@ -13178,11 +12725,9 @@ delete_command (const char *arg, int fro
       /* Ask user only if there are some breakpoints to delete.  */
       if (!from_tty
 	  || (breaks_to_delete && query (_("Delete all breakpoints? "))))
-	{
-	  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-	    if (user_breakpoint_p (b))
-	      delete_breakpoint (b);
-	}
+	for (breakpoint &b : all_breakpoints_safe ())
+	  if (user_breakpoint_p (&b))
+	    delete_breakpoint (&b);
     }
   else
     map_breakpoint_numbers
@@ -13196,54 +12741,47 @@ delete_command (const char *arg, int fro
    PSPACE is NULL, all locations of all program spaces are
    considered.  */
 
-static int
+static bool
 all_locations_are_pending (struct breakpoint *b, struct program_space *pspace)
 {
-  struct bp_location *loc;
-
-  for (loc = b->loc; loc != NULL; loc = loc->next)
+  for (bp_location &loc : b->locations ())
     if ((pspace == NULL
-	 || loc->pspace == pspace)
-	&& !loc->shlib_disabled
-	&& !loc->pspace->executing_startup)
-      return 0;
-  return 1;
+	 || loc.pspace == pspace)
+	&& !loc.shlib_disabled
+	&& !loc.pspace->executing_startup)
+      return false;
+  return true;
 }
 
 /* Subroutine of update_breakpoint_locations to simplify it.
-   Return non-zero if multiple fns in list LOC have the same name.
+   Return true if multiple fns in list LOCS have the same name.
    Null names are ignored.  */
 
-static int
-ambiguous_names_p (struct bp_location *loc)
+static bool
+ambiguous_names_p (const bp_location_range &locs)
 {
-  struct bp_location *l;
-  htab_t htab = htab_create_alloc (13, htab_hash_string, streq_hash, NULL,
-				   xcalloc, xfree);
+  htab_up htab (htab_create_alloc (13, htab_hash_string, htab_eq_string, NULL,
+				   xcalloc, xfree));
 
-  for (l = loc; l != NULL; l = l->next)
+  for (const bp_location &l : locs)
     {
       const char **slot;
-      const char *name = l->function_name;
+      const char *name = l.function_name.get ();
 
       /* Allow for some names to be NULL, ignore them.  */
       if (name == NULL)
 	continue;
 
-      slot = (const char **) htab_find_slot (htab, (const void *) name,
+      slot = (const char **) htab_find_slot (htab.get (), (const void *) name,
 					     INSERT);
       /* NOTE: We can assume slot != NULL here because xcalloc never
 	 returns NULL.  */
       if (*slot != NULL)
-	{
-	  htab_delete (htab);
-	  return 1;
-	}
+	return true;
       *slot = name;
     }
 
-  htab_delete (htab);
-  return 0;
+  return false;
 }
 
 /* When symbols change, it probably means the sources changed as well,
@@ -13280,9 +12818,8 @@ ambiguous_names_p (struct bp_location *l
    precisely because it confuses tools).  */
 
 static struct symtab_and_line
-update_static_tracepoint (struct breakpoint *b, struct symtab_and_line sal)
+update_static_tracepoint (tracepoint *tp, struct symtab_and_line sal)
 {
-  struct tracepoint *tp = (struct tracepoint *) b;
   struct static_tracepoint_marker marker;
   CORE_ADDR pc;
 
@@ -13294,7 +12831,7 @@ update_static_tracepoint (struct breakpo
     {
       if (tp->static_trace_marker_id != marker.str_id)
 	warning (_("static tracepoint %d changed probed marker from %s to %s"),
-		 b->number, tp->static_trace_marker_id.c_str (),
+		 tp->number, tp->static_trace_marker_id.c_str (),
 		 marker.str_id.c_str ());
 
       tp->static_trace_marker_id = std::move (marker.str_id);
@@ -13318,7 +12855,6 @@ update_static_tracepoint (struct breakpo
 	  struct symbol *sym;
 	  struct static_tracepoint_marker *tpmarker;
 	  struct ui_out *uiout = current_uiout;
-	  struct explicit_location explicit_loc;
 
 	  tpmarker = &markers[0];
 
@@ -13326,7 +12862,7 @@ update_static_tracepoint (struct breakpo
 
 	  warning (_("marker for static tracepoint %d (%s) not "
 		     "found at previous line number"),
-		   b->number, tp->static_trace_marker_id.c_str ());
+		   tp->number, tp->static_trace_marker_id.c_str ());
 
 	  symtab_and_line sal2 = find_pc_line (tpmarker->address, 0);
 	  sym = find_pc_sect_function (tpmarker->address, NULL);
@@ -13352,16 +12888,16 @@ update_static_tracepoint (struct breakpo
 	  uiout->field_signed ("line", sal2.line);
 	  uiout->text ("\n");
 
-	  b->loc->line_number = sal2.line;
-	  b->loc->symtab = sym != NULL ? sal2.symtab : NULL;
+	  tp->first_loc ().line_number = sal2.line;
+	  tp->first_loc ().symtab = sym != NULL ? sal2.symtab : NULL;
 
-	  b->location.reset (NULL);
-	  initialize_explicit_location (&explicit_loc);
-	  explicit_loc.source_filename
-	    = ASTRDUP (symtab_to_filename_for_display (sal2.symtab));
-	  explicit_loc.line_offset.offset = b->loc->line_number;
-	  explicit_loc.line_offset.sign = LINE_OFFSET_NONE;
-	  b->location = new_explicit_location (&explicit_loc);
+	  std::unique_ptr<explicit_location_spec> els
+	    (new explicit_location_spec
+	     (symtab_to_filename_for_display (sal2.symtab)));
+	  els->line_offset.offset = tp->first_loc ().line_number;
+	  els->line_offset.sign = LINE_OFFSET_NONE;
+
+	  tp->locspec = std::move (els);
 
 	  /* Might be nice to check if function changed, and warn if
 	     so.  */
@@ -13370,69 +12906,56 @@ update_static_tracepoint (struct breakpo
   return sal;
 }
 
-/* Returns 1 iff locations A and B are sufficiently same that
+/* Returns true iff location lists A and B are sufficiently same that
    we don't need to report breakpoint as changed.  */
 
-static int
-locations_are_equal (struct bp_location *a, struct bp_location *b)
+static bool
+locations_are_equal (const bp_location_list &a, const bp_location_range &b)
 {
-  while (a && b)
+  auto a_iter = a.begin ();
+  auto b_iter = b.begin ();
+
+  for (; a_iter != a.end () && b_iter != b.end (); ++a_iter, ++b_iter)
     {
-      if (a->address != b->address)
-	return 0;
+      if (a_iter->address != b_iter->address)
+	return false;
 
-      if (a->shlib_disabled != b->shlib_disabled)
-	return 0;
+      if (a_iter->shlib_disabled != b_iter->shlib_disabled)
+	return false;
 
-      if (a->enabled != b->enabled)
-	return 0;
+      if (a_iter->enabled != b_iter->enabled)
+	return false;
 
-      a = a->next;
-      b = b->next;
+      if (a_iter->disabled_by_cond != b_iter->disabled_by_cond)
+	return false;
     }
 
-  if ((a == NULL) != (b == NULL))
-    return 0;
-
-  return 1;
+  return (a_iter == a.end ()) == (b_iter == b.end ());
 }
 
-/* Split all locations of B that are bound to PSPACE out of B's
-   location list to a separate list and return that list's head.  If
-   PSPACE is NULL, hoist out all locations of B.  */
+/* See breakpoint.h.  */
 
-static struct bp_location *
-hoist_existing_locations (struct breakpoint *b, struct program_space *pspace)
+bp_location_list
+breakpoint::steal_locations (program_space *pspace)
 {
-  struct bp_location head;
-  struct bp_location *i = b->loc;
-  struct bp_location **i_link = &b->loc;
-  struct bp_location *hoisted = &head;
-
   if (pspace == NULL)
-    {
-      i = b->loc;
-      b->loc = NULL;
-      return i;
-    }
+    return std::move (m_locations);
 
-  head.next = NULL;
+  bp_location_list ret;
 
-  while (i != NULL)
+  for (auto it = m_locations.begin (); it != m_locations.end (); )
     {
-      if (i->pspace == pspace)
+      if (it->pspace == pspace)
 	{
-	  *i_link = i->next;
-	  i->next = NULL;
-	  hoisted->next = i;
-	  hoisted = i;
+	  bp_location &loc = *it;
+	  it = m_locations.erase (it);
+	  ret.push_back (loc);
 	}
       else
-	i_link = &i->next;
-      i = *i_link;
+	++it;
     }
 
-  return head.next;
+  return ret;
 }
 
 /* Create new breakpoint locations for B (a hardware or software
@@ -13442,21 +12965,20 @@ hoist_existing_locations (struct breakpo
    untouched.  */
 
 void
-update_breakpoint_locations (struct breakpoint *b,
+update_breakpoint_locations (code_breakpoint *b,
 			     struct program_space *filter_pspace,
 			     gdb::array_view<const symtab_and_line> sals,
 			     gdb::array_view<const symtab_and_line> sals_end)
 {
-  struct bp_location *existing_locations;
-
   if (!sals_end.empty () && (sals.size () != 1 || sals_end.size () != 1))
     {
       /* Ranged breakpoints have only one start location and one end
 	 location.  */
       b->enable_state = bp_disabled;
-      printf_unfiltered (_("Could not reset ranged breakpoint %d: "
-			   "multiple locations found\n"),
-			 b->number);
+      gdb_printf (gdb_stderr,
+		  _("Could not reset ranged breakpoint %d: "
+		    "multiple locations found\n"),
+		  b->number);
       return;
     }
 
@@ -13469,7 +12991,7 @@ update_breakpoint_locations (struct brea
   if (all_locations_are_pending (b, filter_pspace) && sals.empty ())
     return;
 
-  existing_locations = hoist_existing_locations (b, filter_pspace);
+  bp_location_list existing_locations = b->steal_locations (filter_pspace);
 
   for (const auto &sal : sals)
     {
@@ -13477,7 +12999,7 @@ update_breakpoint_locations (struct brea
 
       switch_to_program_space_and_thread (sal.pspace);
 
-      new_loc = add_location_to_breakpoint (b, &sal);
+      new_loc = b->add_location (sal);
 
       /* Reparse conditions, they might contain references to the
 	 old symtab.  */
@@ -13485,7 +13007,7 @@ update_breakpoint_locations (struct brea
 	{
 	  const char *s;
 
-	  s = b->cond_string;
+	  s = b->cond_string.get ();
 	  try
 	    {
 	      new_loc->cond = parse_exp_1 (&s, sal.pc,
@@ -13494,10 +13016,7 @@ update_breakpoint_locations (struct brea
 	    }
 	  catch (const gdb_exception_error &e)
 	    {
-	      warning (_("failed to reevaluate condition "
-			 "for breakpoint %d: %s"), 
-		       b->number, e.what ());
-	      new_loc->enabled = 0;
+	      new_loc->disabled_by_cond = true;
 	    }
 	}
 
@@ -13512,35 +13031,45 @@ update_breakpoint_locations (struct brea
   /* If possible, carry over 'disable' status from existing
      breakpoints.  */
   {
-    struct bp_location *e = existing_locations;
     /* If there are multiple breakpoints with the same function name,
        e.g. for inline functions, comparing function names won't work.
        Instead compare pc addresses; this is just a heuristic as things
        may have moved, but in practice it gives the correct answer
        often enough until a better solution is found.  */
-    int have_ambiguous_names = ambiguous_names_p (b->loc);
+    int have_ambiguous_names = ambiguous_names_p (b->locations ());
 
-    for (; e; e = e->next)
+    for (const bp_location &e : existing_locations)
       {
-	if (!e->enabled && e->function_name)
+	if ((!e.enabled || e.disabled_by_cond) && e.function_name)
 	  {
-	    struct bp_location *l = b->loc;
 	    if (have_ambiguous_names)
 	      {
-		for (; l; l = l->next)
-		  if (breakpoint_locations_match (e, l))
-		    {
-		      l->enabled = 0;
-		      break;
-		    }
+		for (bp_location &l : b->locations ())
+		  {
+		    /* Ignore software vs hardware location type at
+		       this point, because with "set breakpoint
+		       auto-hw", after a re-set, locations that were
+		       hardware can end up as software, or vice versa.
+		       As mentioned above, this is an heuristic and in
+		       practice should give the correct answer often
+		       enough.  */
+		    if (breakpoint_locations_match (&e, &l, true))
+		      {
+			l.enabled = e.enabled;
+			l.disabled_by_cond = e.disabled_by_cond;
+			break;
+		      }
+		  }
 	      }
 	    else
 	      {
-		for (; l; l = l->next)
-		  if (l->function_name
-		      && strcmp (e->function_name, l->function_name) == 0)
+		for (bp_location &l : b->locations ())
+		  if (l.function_name
+		      && strcmp (e.function_name.get (),
+				 l.function_name.get ()) == 0)
 		    {
-		      l->enabled = 0;
+		      l.enabled = e.enabled;
+		      l.disabled_by_cond = e.disabled_by_cond;
 		      break;
 		    }
 	      }
@@ -13548,30 +13077,29 @@ update_breakpoint_locations (struct brea
       }
   }
 
-  if (!locations_are_equal (existing_locations, b->loc))
-    gdb::observers::breakpoint_modified.notify (b);
+  if (!locations_are_equal (existing_locations, b->locations ()))
+    notify_breakpoint_modified (b);
 }
 
-/* Find the SaL locations corresponding to the given LOCATION.
+/* Find the SaL locations corresponding to the given LOCSPEC.
    On return, FOUND will be 1 if any SaL was found, zero otherwise.  */
 
-static std::vector<symtab_and_line>
-location_to_sals (struct breakpoint *b, struct event_location *location,
-		  struct program_space *search_pspace, int *found)
+std::vector<symtab_and_line>
+code_breakpoint::location_spec_to_sals (location_spec *locspec,
+					struct program_space *search_pspace,
+					int *found)
 {
   struct gdb_exception exception;
 
-  gdb_assert (b->ops != NULL);
-
   std::vector<symtab_and_line> sals;
 
   try
     {
-      sals = b->ops->decode_location (b, location, search_pspace);
+      sals = decode_location_spec (locspec, search_pspace);
     }
   catch (gdb_exception_error &e)
     {
-      int not_found_and_ok = 0;
+      int not_found_and_ok = false;
 
       /* For pending breakpoints, it's expected that parsing will
 	 fail until the right shared library is loaded.  User has
@@ -13581,14 +13109,15 @@ location_to_sals (struct breakpoint *b,
 	 breakpoint being disabled, and don't want to see more
 	 errors.  */
       if (e.error == NOT_FOUND_ERROR
-	  && (b->condition_not_parsed
-	      || (b->loc != NULL
+	  && (condition_not_parsed
+	      || (this->has_locations ()
 		  && search_pspace != NULL
-		  && b->loc->pspace != search_pspace)
-	      || (b->loc && b->loc->shlib_disabled)
-	      || (b->loc && b->loc->pspace->executing_startup)
-	      || b->enable_state == bp_disabled))
-	not_found_and_ok = 1;
+		  && this->first_loc ().pspace != search_pspace)
+	      || (this->has_locations () && this->first_loc ().shlib_disabled)
+	      || (this->has_locations ()
+		  && this->first_loc ().pspace->executing_startup)
+	      || enable_state == bp_disabled))
+	not_found_and_ok = true;
 
       if (!not_found_and_ok)
 	{
@@ -13598,7 +13127,7 @@ location_to_sals (struct breakpoint *b,
 	     have separate 'warning emitted' flag.  Since this
 	     happens only when a binary has changed, I don't know
 	     which approach is better.  */
-	  b->enable_state = bp_disabled;
+	  enable_state = bp_disabled;
 	  throw;
 	}
 
@@ -13609,29 +13138,30 @@ location_to_sals (struct breakpoint *b,
     {
       for (auto &sal : sals)
 	resolve_sal_pc (&sal);
-      if (b->condition_not_parsed && b->extra_string != NULL)
+      if (condition_not_parsed && extra_string != NULL)
 	{
-	  char *cond_string, *extra_string;
-	  int thread, task;
+	  gdb::unique_xmalloc_ptr<char> local_cond, local_extra;
+	  int local_thread, local_task, local_inferior;
 
-	  find_condition_and_thread (b->extra_string, sals[0].pc,
-				     &cond_string, &thread, &task,
-				     &extra_string);
-	  gdb_assert (b->cond_string == NULL);
-	  if (cond_string)
-	    b->cond_string = cond_string;
-	  b->thread = thread;
-	  b->task = task;
-	  if (extra_string)
-	    {
-	      xfree (b->extra_string);
-	      b->extra_string = extra_string;
-	    }
-	  b->condition_not_parsed = 0;
+	  find_condition_and_thread_for_sals (sals, extra_string.get (),
+					      &local_cond, &local_thread,
+					      &local_inferior,
+					      &local_task, &local_extra);
+	  gdb_assert (cond_string == nullptr);
+	  if (local_cond != nullptr)
+	    cond_string = std::move (local_cond);
+	  thread = local_thread;
+	  task = local_task;
+	  if (local_extra != nullptr)
+	    extra_string = std::move (local_extra);
+	  condition_not_parsed = 0;
 	}
 
-      if (b->type == bp_static_tracepoint && !strace_marker_p (b))
-	sals[0] = update_static_tracepoint (b, sals[0]);
+      if (type == bp_static_tracepoint)
+	{
+	  tracepoint *t = gdb::checked_static_cast<tracepoint *> (this);
+	  sals[0] = update_static_tracepoint (t, sals[0]);
+	}
 
       *found = 1;
     }
@@ -13645,89 +13175,39 @@ location_to_sals (struct breakpoint *b,
    breakpoints.  Reevaluate the breakpoint and recreate its
    locations.  */
 
-static void
-breakpoint_re_set_default (struct breakpoint *b)
+void
+code_breakpoint::re_set_default ()
 {
   struct program_space *filter_pspace = current_program_space;
   std::vector<symtab_and_line> expanded, expanded_end;
 
   int found;
-  std::vector<symtab_and_line> sals = location_to_sals (b, b->location.get (),
-							filter_pspace, &found);
+  std::vector<symtab_and_line> sals = location_spec_to_sals (locspec.get (),
+							     filter_pspace,
+							     &found);
   if (found)
     expanded = std::move (sals);
 
-  if (b->location_range_end != NULL)
+  if (locspec_range_end != nullptr)
     {
       std::vector<symtab_and_line> sals_end
-	= location_to_sals (b, b->location_range_end.get (),
-			    filter_pspace, &found);
+	= location_spec_to_sals (locspec_range_end.get (),
+				 filter_pspace, &found);
       if (found)
 	expanded_end = std::move (sals_end);
     }
 
-  update_breakpoint_locations (b, filter_pspace, expanded, expanded_end);
+  update_breakpoint_locations (this, filter_pspace, expanded, expanded_end);
 }
 
 /* Default method for creating SALs from an address string.  It basically
    calls parse_breakpoint_sals.  Return 1 for success, zero for failure.  */
 
 static void
-create_sals_from_location_default (const struct event_location *location,
-				   struct linespec_result *canonical,
-				   enum bptype type_wanted)
-{
-  parse_breakpoint_sals (location, canonical);
-}
-
-/* Call create_breakpoints_sal for the given arguments.  This is the default
-   function for the `create_breakpoints_sal' method of
-   breakpoint_ops.  */
-
-static void
-create_breakpoints_sal_default (struct gdbarch *gdbarch,
-				struct linespec_result *canonical,
-				gdb::unique_xmalloc_ptr<char> cond_string,
-				gdb::unique_xmalloc_ptr<char> extra_string,
-				enum bptype type_wanted,
-				enum bpdisp disposition,
-				int thread,
-				int task, int ignore_count,
-				const struct breakpoint_ops *ops,
-				int from_tty, int enabled,
-				int internal, unsigned flags)
-{
-  create_breakpoints_sal (gdbarch, canonical,
-			  std::move (cond_string),
-			  std::move (extra_string),
-			  type_wanted, disposition,
-			  thread, task, ignore_count, ops, from_tty,
-			  enabled, internal, flags);
-}
-
-/* Decode the line represented by S by calling decode_line_full.  This is the
-   default function for the `decode_location' method of breakpoint_ops.  */
-
-static std::vector<symtab_and_line>
-decode_location_default (struct breakpoint *b,
-			 const struct event_location *location,
-			 struct program_space *search_pspace)
+create_sals_from_location_spec_default (location_spec *locspec,
+					struct linespec_result *canonical)
 {
-  struct linespec_result canonical;
-
-  decode_line_full (location, DECODE_LINE_FUNFIRSTLINE, search_pspace,
-		    NULL, 0, &canonical, multiple_symbols_all,
-		    b->filter.get ());
-
-  /* We should get 0 or 1 resulting SALs.  */
-  gdb_assert (canonical.lsals.size () < 2);
-
-  if (!canonical.lsals.empty ())
-    {
-      const linespec_sals &lsal = canonical.lsals[0];
-      return std::move (lsal.sals);
-    }
-  return {};
+  parse_breakpoint_sals (locspec, canonical);
 }
 
 /* Reset a breakpoint.  */
@@ -13738,7 +13218,7 @@ breakpoint_re_set_one (breakpoint *b)
   input_radix = b->input_radix;
   set_language (b->language);
 
-  b->ops->re_set (b);
+  b->re_set ();
 }
 
 /* Re-set breakpoint locations for the current program space.
@@ -13747,8 +13227,6 @@ breakpoint_re_set_one (breakpoint *b)
 void
 breakpoint_re_set (void)
 {
-  struct breakpoint *b, *b_tmp;
-
   {
     scoped_restore_current_language save_language;
     scoped_restore save_input_radix = make_scoped_restore (&input_radix);
@@ -13772,17 +13250,17 @@ breakpoint_re_set (void)
        breakpoint 1, we'd insert the locations of breakpoint 2, which
        hadn't been re-set yet, and thus may have stale locations.  */
 
-    ALL_BREAKPOINTS_SAFE (b, b_tmp)
+    for (breakpoint &b : all_breakpoints_safe ())
       {
 	try
 	  {
-	    breakpoint_re_set_one (b);
+	    breakpoint_re_set_one (&b);
 	  }
 	catch (const gdb_exception &ex)
 	  {
 	    exception_fprintf (gdb_stderr, ex,
 			       "Error in re-setting breakpoint %d: ",
-			       b->number);
+			       b.number);
 	  }
       }
 
@@ -13813,7 +13291,7 @@ breakpoint_re_set_thread (struct breakpo
 	 selected as current, and unless this was a vfork will have a
 	 different program space from the original thread.  Reset that
 	 as well.  */
-      b->loc->pspace = current_program_space;
+      b->first_loc ().pspace = current_program_space;
     }
 }
 
@@ -13824,40 +13302,38 @@ breakpoint_re_set_thread (struct breakpo
 void
 set_ignore_count (int bptnum, int count, int from_tty)
 {
-  struct breakpoint *b;
-
   if (count < 0)
     count = 0;
 
-  ALL_BREAKPOINTS (b)
-    if (b->number == bptnum)
-    {
-      if (is_tracepoint (b))
-	{
-	  if (from_tty && count != 0)
-	    printf_filtered (_("Ignore count ignored for tracepoint %d."),
-			     bptnum);
-	  return;
-	}
-      
-      b->ignore_count = count;
-      if (from_tty)
-	{
-	  if (count == 0)
-	    printf_filtered (_("Will stop next time "
-			       "breakpoint %d is reached."),
-			     bptnum);
-	  else if (count == 1)
-	    printf_filtered (_("Will ignore next crossing of breakpoint %d."),
-			     bptnum);
-	  else
-	    printf_filtered (_("Will ignore next %d "
-			       "crossings of breakpoint %d."),
-			     count, bptnum);
-	}
-      gdb::observers::breakpoint_modified.notify (b);
-      return;
-    }
+  for (breakpoint &b : all_breakpoints ())
+    if (b.number == bptnum)
+      {
+	if (is_tracepoint (&b))
+	  {
+	    if (from_tty && count != 0)
+	      gdb_printf (_("Ignore count ignored for tracepoint %d."),
+			  bptnum);
+	    return;
+	  }
+
+	b.ignore_count = count;
+	if (from_tty)
+	  {
+	    if (count == 0)
+	      gdb_printf (_("Will stop next time "
+			    "breakpoint %d is reached."),
+			  bptnum);
+	    else if (count == 1)
+	      gdb_printf (_("Will ignore next crossing of breakpoint %d."),
+			  bptnum);
+	    else
+	      gdb_printf (_("Will ignore next %d "
+			    "crossings of breakpoint %d."),
+			  count, bptnum);
+	  }
+	notify_breakpoint_modified (&b);
+	return;
+      }
 
   error (_("No breakpoint number %d."), bptnum);
 }
@@ -13883,7 +13359,7 @@ ignore_command (const char *args, int fr
 		    longest_to_int (value_as_long (parse_and_eval (p))),
 		    from_tty);
   if (from_tty)
-    printf_filtered ("\n");
+    gdb_printf ("\n");
 }
 
 
@@ -13901,21 +13377,19 @@ map_breakpoint_number_range (std::pair<i
     }
   else
     {
-      struct breakpoint *b, *tmp;
-
       for (int i = bp_num_range.first; i <= bp_num_range.second; i++)
 	{
 	  bool match = false;
 
-	  ALL_BREAKPOINTS_SAFE (b, tmp)
-	    if (b->number == i)
+	  for (breakpoint &b : all_breakpoints_safe ())
+	    if (b.number == i)
 	      {
 		match = true;
-		function (b);
+		function (&b);
 		break;
 	      }
 	  if (!match)
-	    printf_unfiltered (_("No breakpoint number %d.\n"), i);
+	    gdb_printf (_("No breakpoint number %d.\n"), i);
 	}
     }
 }
@@ -13945,13 +13419,7 @@ map_breakpoint_numbers (const char *args
 static struct bp_location *
 find_location_by_number (int bp_num, int loc_num)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-    if (b->number == bp_num)
-      {
-	break;
-      }
+  breakpoint *b = get_breakpoint (bp_num);
 
   if (!b || b->number != bp_num)
     error (_("Bad breakpoint number '%d'"), bp_num);
@@ -13960,9 +13428,9 @@ find_location_by_number (int bp_num, int
     error (_("Bad breakpoint location number '%d'"), loc_num);
 
   int n = 0;
-  for (bp_location *loc = b->loc; loc != NULL; loc = loc->next)
+  for (bp_location &loc : b->locations ())
     if (++n == loc_num)
-      return loc;
+      return &loc;
 
   error (_("Bad breakpoint location number '%d'"), loc_num);
 }
@@ -14101,6 +13569,10 @@ enable_disable_bp_num_loc (int bp_num, i
   struct bp_location *loc = find_location_by_number (bp_num, loc_num);
   if (loc != NULL)
     {
+      if (loc->disabled_by_cond && enable)
+	error (_("Breakpoint %d's condition is invalid at location %d, "
+		 "cannot enable."), bp_num, loc_num);
+
       if (loc->enabled != enable)
 	{
 	  loc->enabled = enable;
@@ -14113,7 +13585,64 @@ enable_disable_bp_num_loc (int bp_num, i
     }
   update_global_location_list (UGLL_DONT_INSERT);
 
-  gdb::observers::breakpoint_modified.notify (loc->owner);
+  notify_breakpoint_modified (loc->owner);
+}
+
+/* Calculates LOC_NUM for LOC by traversing the bp_location chain of LOC's
+   owner.  1-based indexing.  -1 signals NOT FOUND.  */
+
+static int
+find_loc_num_by_location (const bp_location *loc)
+{
+  if (loc != nullptr && loc->owner != nullptr)
+    {
+      /* Locations use 1-based indexing.  */
+      int loc_num = 1;
+      for (bp_location &it : loc->owner->locations ())
+	{
+	  if (&it == loc)
+	    return loc_num;
+	  loc_num++;
+	}
+    }
+  return -1;
+}
+
+/* Enable or disable a breakpoint location LOC.  ENABLE
+   specifies whether to enable or disable.  */
+
+void
+enable_disable_bp_location (bp_location *loc, bool enable)
+{
+  if (loc == nullptr)
+    error (_("Breakpoint location is invalid."));
+
+  if (loc->owner == nullptr)
+    error (_("Breakpoint location does not have an owner breakpoint."));
+
+  if (loc->disabled_by_cond && enable)
+    {
+      int loc_num = find_loc_num_by_location (loc);
+      if (loc_num == -1)
+	error (_("Breakpoint location LOC_NUM could not be found."));
+      else
+	error (_("Breakpoint %d's condition is invalid at location %d, "
+		 "cannot enable."), loc->owner->number, loc_num);
+    }
+
+  if (loc->enabled != enable)
+    {
+      loc->enabled = enable;
+      mark_breakpoint_location_modified (loc);
+    }
+
+  if (target_supports_enable_disable_tracepoint ()
+      && current_trace_status ()->running && loc->owner
+      && is_tracepoint (loc->owner))
+    target_disable_tracepoint (loc);
+
+  update_global_location_list (UGLL_DONT_INSERT);
+  notify_breakpoint_modified (loc->owner);
 }
 
 /* Enable or disable a range of breakpoint locations.  BP_NUM is the
@@ -14152,15 +13681,13 @@ disable_breakpoint (struct breakpoint *b
   if (target_supports_enable_disable_tracepoint ()
       && current_trace_status ()->running && is_tracepoint (bpt))
     {
-      struct bp_location *location;
-     
-      for (location = bpt->loc; location; location = location->next)
-	target_disable_tracepoint (location);
+      for (bp_location &location : bpt->locations ())
+	target_disable_tracepoint (&location);
     }
 
   update_global_location_list (UGLL_DONT_INSERT);
 
-  gdb::observers::breakpoint_modified.notify (bpt);
+  notify_breakpoint_modified (bpt);
 }
 
 /* Enable or disable the breakpoint(s) or breakpoint location(s)
@@ -14173,15 +13700,13 @@ enable_disable_command (const char *args
 {
   if (args == 0)
     {
-      struct breakpoint *bpt;
-
-      ALL_BREAKPOINTS (bpt)
-	if (user_breakpoint_p (bpt))
+      for (breakpoint &bpt : all_breakpoints ())
+	if (user_breakpoint_p (&bpt))
 	  {
 	    if (enable)
-	      enable_breakpoint (bpt);
+	      enable_breakpoint (&bpt);
 	    else
-	      disable_breakpoint (bpt);
+	      disable_breakpoint (&bpt);
 	  }
     }
   else
@@ -14195,9 +13720,13 @@ enable_disable_command (const char *args
 	  extract_bp_number_and_location (num, bp_num_range, bp_loc_range);
 
 	  if (bp_loc_range.first == bp_loc_range.second
-	      && bp_loc_range.first == 0)
+	      && (bp_loc_range.first == 0
+		  || (bp_loc_range.first == 1
+		      && bp_num_range.first == bp_num_range.second
+		      && !has_multiple_locations (bp_num_range.first))))
 	    {
-	      /* Handle breakpoint ids with formats 'x' or 'x-z'.  */
+	      /* Handle breakpoint ids with formats 'x' or 'x-z'
+		 or 'y.1' where y has only one code location.  */
 	      map_breakpoint_number_range (bp_num_range,
 					   enable
 					   ? enable_breakpoint
@@ -14252,13 +13781,13 @@ enable_breakpoint_disp (struct breakpoin
 
       try
 	{
-	  struct watchpoint *w = (struct watchpoint *) bpt;
+	  watchpoint *w = gdb::checked_static_cast<watchpoint *> (bpt);
 
 	  orig_enable_state = bpt->enable_state;
 	  bpt->enable_state = bp_enabled;
-	  update_watchpoint (w, 1 /* reparse */);
+	  update_watchpoint (w, true /* reparse */);
 	}
-      catch (const gdb_exception &e)
+      catch (const gdb_exception_error &e)
 	{
 	  bpt->enable_state = orig_enable_state;
 	  exception_fprintf (gdb_stderr, e, _("Cannot enable watchpoint %d: "),
@@ -14275,17 +13804,15 @@ enable_breakpoint_disp (struct breakpoin
   if (target_supports_enable_disable_tracepoint ()
       && current_trace_status ()->running && is_tracepoint (bpt))
     {
-      struct bp_location *location;
-
-      for (location = bpt->loc; location; location = location->next)
-	target_enable_tracepoint (location);
+      for (bp_location &location : bpt->locations ())
+	target_enable_tracepoint (&location);
     }
 
   bpt->disposition = disposition;
   bpt->enable_count = count;
   update_global_location_list (UGLL_MAY_INSERT);
 
-  gdb::observers::breakpoint_modified.notify (bpt);
+  notify_breakpoint_modified (bpt);
 }
 
 
@@ -14355,16 +13882,6 @@ enable_delete_command (const char *args,
      });
 }
 
-static void
-set_breakpoint_cmd (const char *args, int from_tty)
-{
-}
-
-static void
-show_breakpoint_cmd (const char *args, int from_tty)
-{
-}
-
 /* Invalidate last known value of any hardware watchpoint if
    the memory which that value represents has been written to by
    GDB itself.  */
@@ -14374,25 +13891,21 @@ invalidate_bp_value_on_memory_change (st
 				      CORE_ADDR addr, ssize_t len,
 				      const bfd_byte *data)
 {
-  struct breakpoint *bp;
-
-  ALL_BREAKPOINTS (bp)
-    if (bp->enable_state == bp_enabled
-	&& bp->type == bp_hardware_watchpoint)
+  for (breakpoint &bp : all_breakpoints ())
+    if (bp.enable_state == bp_enabled
+	&& bp.type == bp_hardware_watchpoint)
       {
-	struct watchpoint *wp = (struct watchpoint *) bp;
+	watchpoint &wp = gdb::checked_static_cast<watchpoint &> (bp);
 
-	if (wp->val_valid && wp->val != nullptr)
+	if (wp.val_valid && wp.val != nullptr)
 	  {
-	    struct bp_location *loc;
-
-	    for (loc = bp->loc; loc != NULL; loc = loc->next)
-	      if (loc->loc_type == bp_loc_hardware_watchpoint
-		  && loc->address + loc->length > addr
-		  && addr + len > loc->address)
+	    for (bp_location &loc : bp.locations ())
+	      if (loc.loc_type == bp_loc_hardware_watchpoint
+		  && loc.address + loc.length > addr
+		  && addr + len > loc.address)
 		{
-		  wp->val = NULL;
-		  wp->val_valid = false;
+		  wp.val = NULL;
+		  wp.val_valid = false;
 		}
 	  }
       }
@@ -14411,15 +13924,25 @@ insert_single_step_breakpoint (struct gd
 
   if (tp->control.single_step_breakpoints == NULL)
     {
+      std::unique_ptr<breakpoint> b
+	(new momentary_breakpoint (gdbarch, bp_single_step,
+				   current_program_space,
+				   null_frame_id,
+				   tp->global_num));
+
       tp->control.single_step_breakpoints
-	= new_single_step_breakpoint (tp->global_num, gdbarch);
+	= add_to_breakpoint_chain (std::move (b));
     }
 
   sal = find_pc_line (pc, 0);
   sal.pc = pc;
   sal.section = find_pc_overlay (pc);
   sal.explicit_pc = 1;
-  add_location_to_breakpoint (tp->control.single_step_breakpoints, &sal);
+
+  auto *ss_bp
+    = (gdb::checked_static_cast<momentary_breakpoint *>
+       (tp->control.single_step_breakpoints));
+  ss_bp->add_location (sal);
 
   update_global_location_list (UGLL_INSERT);
 }
@@ -14429,14 +13952,14 @@ insert_single_step_breakpoint (struct gd
 int
 insert_single_step_breakpoints (struct gdbarch *gdbarch)
 {
-  struct regcache *regcache = get_current_regcache ();
+  regcache *regcache = get_thread_regcache (inferior_thread ());
   std::vector<CORE_ADDR> next_pcs;
 
   next_pcs = gdbarch_software_single_step (gdbarch, regcache);
 
   if (!next_pcs.empty ())
     {
-      struct frame_info *frame = get_current_frame ();
+      frame_info_ptr frame = get_current_frame ();
       const address_space *aspace = get_frame_address_space (frame);
 
       for (CORE_ADDR pc : next_pcs)
@@ -14455,11 +13978,9 @@ breakpoint_has_location_inserted_here (s
 				       const address_space *aspace,
 				       CORE_ADDR pc)
 {
-  struct bp_location *loc;
-
-  for (loc = bp->loc; loc != NULL; loc = loc->next)
-    if (loc->inserted
-	&& breakpoint_location_address_match (loc, aspace, pc))
+  for (bp_location &loc : bp->locations ())
+    if (loc.inserted
+	&& breakpoint_location_address_match (&loc, aspace, pc))
       return 1;
 
   return 0;
@@ -14472,12 +13993,10 @@ int
 single_step_breakpoint_inserted_here_p (const address_space *aspace,
 					CORE_ADDR pc)
 {
-  struct breakpoint *bpt;
-
-  ALL_BREAKPOINTS (bpt)
+  for (breakpoint &bpt : all_breakpoints ())
     {
-      if (bpt->type == bp_single_step
-	  && breakpoint_has_location_inserted_here (bpt, aspace, pc))
+      if (bpt.type == bp_single_step
+	  && breakpoint_has_location_inserted_here (&bpt, aspace, pc))
 	return 1;
     }
   return 0;
@@ -14496,14 +14015,14 @@ set_tracepoint_count (int num)
 static void
 trace_command (const char *arg, int from_tty)
 {
-  event_location_up location = string_to_event_location (&arg,
-							 current_language);
-  const struct breakpoint_ops *ops = breakpoint_ops_for_event_location
-    (location.get (), true /* is_tracepoint */);
+  location_spec_up locspec = string_to_location_spec (&arg,
+						      current_language);
+  const struct breakpoint_ops *ops = breakpoint_ops_for_location_spec
+    (locspec.get (), true /* is_tracepoint */);
 
   create_breakpoint (get_current_arch (),
-		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     locspec.get (),
+		     NULL, -1, -1, arg, false, 1 /* parse arg */,
 		     0 /* tempflag */,
 		     bp_tracepoint /* type_wanted */,
 		     0 /* Ignore count */,
@@ -14517,16 +14036,16 @@ trace_command (const char *arg, int from
 static void
 ftrace_command (const char *arg, int from_tty)
 {
-  event_location_up location = string_to_event_location (&arg,
-							 current_language);
+  location_spec_up locspec = string_to_location_spec (&arg,
+						      current_language);
   create_breakpoint (get_current_arch (),
-		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     locspec.get (),
+		     NULL, -1, -1, arg, false, 1 /* parse arg */,
 		     0 /* tempflag */,
 		     bp_fast_tracepoint /* type_wanted */,
 		     0 /* Ignore count */,
 		     pending_break_support,
-		     &tracepoint_breakpoint_ops,
+		     &code_breakpoint_ops,
 		     from_tty,
 		     1 /* enabled */,
 		     0 /* internal */, 0);
@@ -14537,27 +14056,31 @@ ftrace_command (const char *arg, int fro
 static void
 strace_command (const char *arg, int from_tty)
 {
-  struct breakpoint_ops *ops;
-  event_location_up location;
+  const struct breakpoint_ops *ops;
+  location_spec_up locspec;
+  enum bptype type;
 
   /* Decide if we are dealing with a static tracepoint marker (`-m'),
      or with a normal static tracepoint.  */
   if (arg && startswith (arg, "-m") && isspace (arg[2]))
     {
       ops = &strace_marker_breakpoint_ops;
-      location = new_linespec_location (&arg, symbol_name_match_type::FULL);
+      locspec = new_linespec_location_spec (&arg,
+					    symbol_name_match_type::FULL);
+      type = bp_static_marker_tracepoint;
     }
   else
     {
-      ops = &tracepoint_breakpoint_ops;
-      location = string_to_event_location (&arg, current_language);
+      ops = &code_breakpoint_ops;
+      locspec = string_to_location_spec (&arg, current_language);
+      type = bp_static_tracepoint;
     }
 
   create_breakpoint (get_current_arch (),
-		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     locspec.get (),
+		     NULL, -1, -1, arg, false, 1 /* parse arg */,
 		     0 /* tempflag */,
-		     bp_static_tracepoint /* type_wanted */,
+		     type /* type_wanted */,
 		     0 /* Ignore count */,
 		     pending_break_support,
 		     ops,
@@ -14572,8 +14095,8 @@ strace_command (const char *arg, int fro
 static struct uploaded_tp *this_utp;
 static int next_cmd;
 
-static char *
-read_uploaded_action (void)
+static const char *
+read_uploaded_action (std::string &buffer)
 {
   char *rslt = nullptr;
 
@@ -14620,17 +14143,18 @@ create_tracepoint_from_upload (struct up
 	       "has no source form, ignoring it"),
 	     utp->number);
 
-  event_location_up location = string_to_event_location (&addr_str,
-							 current_language);
+  location_spec_up locspec = string_to_location_spec (&addr_str,
+						      current_language);
   if (!create_breakpoint (get_current_arch (),
-			  location.get (),
-			  utp->cond_string.get (), -1, addr_str,
+			  locspec.get (),
+			  utp->cond_string.get (), -1, -1, addr_str,
+			  false /* force_condition */,
 			  0 /* parse cond/thread */,
 			  0 /* tempflag */,
 			  utp->type /* type_wanted */,
 			  0 /* Ignore count */,
 			  pending_break_support,
-			  &tracepoint_breakpoint_ops,
+			  &code_breakpoint_ops,
 			  0 /* from_tty */,
 			  utp->enabled /* enabled */,
 			  0 /* internal */,
@@ -14719,8 +14243,6 @@ disable_trace_command (const char *args,
 static void
 delete_trace_command (const char *arg, int from_tty)
 {
-  struct breakpoint *b, *b_tmp;
-
   dont_repeat ();
 
   if (arg == 0)
@@ -14728,11 +14250,11 @@ delete_trace_command (const char *arg, i
       int breaks_to_delete = 0;
 
       /* Delete all breakpoints if no argument.
-         Do not delete internal or call-dummy breakpoints, these
-         have to be deleted with an explicit breakpoint number 
+	 Do not delete internal or call-dummy breakpoints, these
+	 have to be deleted with an explicit breakpoint number 
 	 argument.  */
-      ALL_TRACEPOINTS (b)
-	if (is_tracepoint (b) && user_breakpoint_p (b))
+      for (breakpoint &tp : all_tracepoints ())
+	if (is_tracepoint (&tp) && user_breakpoint_p (&tp))
 	  {
 	    breaks_to_delete = 1;
 	    break;
@@ -14742,9 +14264,9 @@ delete_trace_command (const char *arg, i
       if (!from_tty
 	  || (breaks_to_delete && query (_("Delete all tracepoints? "))))
 	{
-	  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-	    if (is_tracepoint (b) && user_breakpoint_p (b))
-	      delete_breakpoint (b);
+	  for (breakpoint &b : all_breakpoints_safe ())
+	    if (is_tracepoint (&b) && user_breakpoint_p (&b))
+	      delete_breakpoint (&b);
 	}
     }
   else
@@ -14761,10 +14283,10 @@ static void
 trace_pass_set_count (struct tracepoint *tp, int count, int from_tty)
 {
   tp->pass_count = count;
-  gdb::observers::breakpoint_modified.notify (tp);
+  notify_breakpoint_modified (tp);
   if (from_tty)
-    printf_filtered (_("Setting tracepoint %d's passcount to %d\n"),
-		     tp->number, count);
+    gdb_printf (_("Setting tracepoint %d's passcount to %d\n"),
+		tp->number, count);
 }
 
 /* Set passcount for tracepoint.
@@ -14776,7 +14298,6 @@ trace_pass_set_count (struct tracepoint
 static void
 trace_pass_command (const char *args, int from_tty)
 {
-  struct tracepoint *t1;
   ULONGEST count;
 
   if (args == 0 || *args == 0)
@@ -14788,21 +14309,19 @@ trace_pass_command (const char *args, in
   args = skip_spaces (args);
   if (*args && strncasecmp (args, "all", 3) == 0)
     {
-      struct breakpoint *b;
-
       args += 3;			/* Skip special argument "all".  */
       if (*args)
 	error (_("Junk at end of arguments."));
 
-      ALL_TRACEPOINTS (b)
-      {
-	t1 = (struct tracepoint *) b;
-	trace_pass_set_count (t1, count, from_tty);
-      }
+      for (breakpoint &b : all_tracepoints ())
+	{
+	  tracepoint &t1 = gdb::checked_static_cast<tracepoint &> (b);
+	  trace_pass_set_count (&t1, count, from_tty);
+	}
     }
   else if (*args == '\0')
     {
-      t1 = get_tracepoint_by_number (&args, NULL);
+      tracepoint *t1 = get_tracepoint_by_number (&args, NULL);
       if (t1)
 	trace_pass_set_count (t1, count, from_tty);
     }
@@ -14811,7 +14330,7 @@ trace_pass_command (const char *args, in
       number_or_range_parser parser (args);
       while (!parser.finished ())
 	{
-	  t1 = get_tracepoint_by_number (&args, &parser);
+	  tracepoint *t1 = get_tracepoint_by_number (&args, &parser);
 	  if (t1)
 	    trace_pass_set_count (t1, count, from_tty);
 	}
@@ -14821,11 +14340,9 @@ trace_pass_command (const char *args, in
 struct tracepoint *
 get_tracepoint (int num)
 {
-  struct breakpoint *t;
-
-  ALL_TRACEPOINTS (t)
-    if (t->number == num)
-      return (struct tracepoint *) t;
+  for (breakpoint &t : all_tracepoints ())
+    if (t.number == num)
+      return gdb::checked_static_cast<tracepoint *> (&t);
 
   return NULL;
 }
@@ -14837,14 +14354,12 @@ get_tracepoint (int num)
 struct tracepoint *
 get_tracepoint_by_number_on_target (int num)
 {
-  struct breakpoint *b;
-
-  ALL_TRACEPOINTS (b)
+  for (breakpoint &b : all_tracepoints ())
     {
-      struct tracepoint *t = (struct tracepoint *) b;
+      tracepoint &t = gdb::checked_static_cast<tracepoint &> (b);
 
-      if (t->number_on_target == num)
-	return t;
+      if (t.number_on_target == num)
+	return &t;
     }
 
   return NULL;
@@ -14859,7 +14374,6 @@ struct tracepoint *
 get_tracepoint_by_number (const char **arg,
 			  number_or_range_parser *parser)
 {
-  struct breakpoint *t;
   int tpnum;
   const char *instring = arg == NULL ? NULL : *arg;
 
@@ -14876,33 +14390,34 @@ get_tracepoint_by_number (const char **a
   if (tpnum <= 0)
     {
       if (instring && *instring)
-	printf_filtered (_("bad tracepoint number at or near '%s'\n"), 
-			 instring);
+	gdb_printf (_("bad tracepoint number at or near '%s'\n"), 
+		    instring);
       else
-	printf_filtered (_("No previous tracepoint\n"));
+	gdb_printf (_("No previous tracepoint\n"));
       return NULL;
     }
 
-  ALL_TRACEPOINTS (t)
-    if (t->number == tpnum)
-    {
-      return (struct tracepoint *) t;
-    }
+  for (breakpoint &t : all_tracepoints ())
+    if (t.number == tpnum)
+      return gdb::checked_static_cast<tracepoint *> (&t);
 
-  printf_unfiltered ("No tracepoint number %d.\n", tpnum);
+  gdb_printf ("No tracepoint number %d.\n", tpnum);
   return NULL;
 }
 
 void
-print_recreate_thread (struct breakpoint *b, struct ui_file *fp)
+breakpoint::print_recreate_thread (struct ui_file *fp) const
 {
-  if (b->thread != -1)
-    fprintf_unfiltered (fp, " thread %d", b->thread);
+  if (thread != -1)
+    {
+      struct thread_info *thr = find_thread_global_id (thread);
+      gdb_printf (fp, " thread %s", print_full_thread_id (thr));
+    }
 
-  if (b->task != 0)
-    fprintf_unfiltered (fp, " task %d", b->task);
+  if (task != -1)
+    gdb_printf (fp, " task %d", task);
 
-  fprintf_unfiltered (fp, "\n");
+  gdb_printf (fp, "\n");
 }
 
 /* Save information on user settable breakpoints (watchpoints, etc) to
@@ -14914,34 +14429,33 @@ static void
 save_breakpoints (const char *filename, int from_tty,
 		  bool (*filter) (const struct breakpoint *))
 {
-  struct breakpoint *tp;
-  int any = 0;
+  bool any = false;
   int extra_trace_bits = 0;
 
   if (filename == 0 || *filename == 0)
     error (_("Argument required (file name in which to save)"));
 
   /* See if we have anything to save.  */
-  ALL_BREAKPOINTS (tp)
-  {
-    /* Skip internal and momentary breakpoints.  */
-    if (!user_breakpoint_p (tp))
-      continue;
+  for (breakpoint &tp : all_breakpoints ())
+    {
+      /* Skip internal and momentary breakpoints.  */
+      if (!user_breakpoint_p (&tp))
+	continue;
 
-    /* If we have a filter, only save the breakpoints it accepts.  */
-    if (filter && !filter (tp))
-      continue;
+      /* If we have a filter, only save the breakpoints it accepts.  */
+      if (filter && !filter (&tp))
+	continue;
 
-    any = 1;
+      any = true;
 
-    if (is_tracepoint (tp))
-      {
-	extra_trace_bits = 1;
+      if (is_tracepoint (&tp))
+	{
+	  extra_trace_bits = 1;
 
-	/* We can stop searching.  */
-	break;
-      }
-  }
+	  /* We can stop searching.  */
+	  break;
+	}
+    }
 
   if (!any)
     {
@@ -14960,69 +14474,63 @@ save_breakpoints (const char *filename,
   if (extra_trace_bits)
     save_trace_state_variables (&fp);
 
-  ALL_BREAKPOINTS (tp)
-  {
-    /* Skip internal and momentary breakpoints.  */
-    if (!user_breakpoint_p (tp))
-      continue;
+  for (breakpoint &tp : all_breakpoints ())
+    {
+      /* Skip internal and momentary breakpoints.  */
+      if (!user_breakpoint_p (&tp))
+	continue;
+
+      /* If we have a filter, only save the breakpoints it accepts.  */
+      if (filter && !filter (&tp))
+	continue;
 
-    /* If we have a filter, only save the breakpoints it accepts.  */
-    if (filter && !filter (tp))
-      continue;
+      tp.print_recreate (&fp);
 
-    tp->ops->print_recreate (tp, &fp);
+      /* Note, we can't rely on tp->number for anything, as we can't
+	 assume the recreated breakpoint numbers will match.  Use $bpnum
+	 instead.  */
 
-    /* Note, we can't rely on tp->number for anything, as we can't
-       assume the recreated breakpoint numbers will match.  Use $bpnum
-       instead.  */
+      if (tp.cond_string)
+	fp.printf ("  condition $bpnum %s\n", tp.cond_string.get ());
 
-    if (tp->cond_string)
-      fp.printf ("  condition $bpnum %s\n", tp->cond_string);
+      if (tp.ignore_count)
+	fp.printf ("  ignore $bpnum %d\n", tp.ignore_count);
 
-    if (tp->ignore_count)
-      fp.printf ("  ignore $bpnum %d\n", tp->ignore_count);
+      if (tp.type != bp_dprintf && tp.commands)
+	{
+	  fp.puts ("  commands\n");
 
-    if (tp->type != bp_dprintf && tp->commands)
-      {
-	fp.puts ("  commands\n");
-	
-	current_uiout->redirect (&fp);
-	try
-	  {
-	    print_command_lines (current_uiout, tp->commands.get (), 2);
-	  }
-	catch (const gdb_exception &ex)
-	  {
-	  current_uiout->redirect (NULL);
-	    throw;
-	  }
+	  ui_out_redirect_pop redir (current_uiout, &fp);
+	  print_command_lines (current_uiout, tp.commands.get (), 2);
 
-	current_uiout->redirect (NULL);
-	fp.puts ("  end\n");
-      }
+	  fp.puts ("  end\n");
+	}
 
-    if (tp->enable_state == bp_disabled)
-      fp.puts ("disable $bpnum\n");
+      if (tp.enable_state == bp_disabled)
+	fp.puts ("disable $bpnum\n");
 
-    /* If this is a multi-location breakpoint, check if the locations
-       should be individually disabled.  Watchpoint locations are
-       special, and not user visible.  */
-    if (!is_watchpoint (tp) && tp->loc && tp->loc->next)
-      {
-	struct bp_location *loc;
-	int n = 1;
+      /* If this is a multi-location breakpoint, check if the locations
+	 should be individually disabled.  Watchpoint locations are
+	 special, and not user visible.  */
+      if (!is_watchpoint (&tp) && tp.has_multiple_locations ())
+	{
+	  int n = 1;
 
-	for (loc = tp->loc; loc != NULL; loc = loc->next, n++)
-	  if (!loc->enabled)
-	    fp.printf ("disable $bpnum.%d\n", n);
-      }
-  }
+	  for (bp_location &loc : tp.locations ())
+	    {
+	      if (!loc.enabled)
+		fp.printf ("disable $bpnum.%d\n", n);
 
-  if (extra_trace_bits && *default_collect)
-    fp.printf ("set default-collect %s\n", default_collect);
+	      n++;
+	    }
+	}
+    }
+
+  if (extra_trace_bits && !default_collect.empty ())
+    fp.printf ("set default-collect %s\n", default_collect.c_str ());
 
   if (from_tty)
-    printf_filtered (_("Saved to file '%s'.\n"), expanded_filename.get ());
+    gdb_printf (_("Saved to file '%s'.\n"), expanded_filename.get ());
 }
 
 /* The `save breakpoints' command.  */
@@ -15041,27 +14549,11 @@ save_tracepoints_command (const char *ar
   save_breakpoints (args, from_tty, is_tracepoint);
 }
 
-/* Create a vector of all tracepoints.  */
-
-std::vector<breakpoint *>
-all_tracepoints (void)
-{
-  std::vector<breakpoint *> tp_vec;
-  struct breakpoint *tp;
-
-  ALL_TRACEPOINTS (tp)
-  {
-    tp_vec.push_back (tp);
-  }
-
-  return tp_vec;
-}
-
 
 /* This help string is used to consolidate all the help string for specifying
    locations used by several commands.  */
 
-#define LOCATION_HELP_STRING \
+#define LOCATION_SPEC_HELP_STRING \
 "Linespecs are colon-separated lists of location parameters, such as\n\
 source filename, function name, label name, and line number.\n\
 Example: To specify the start of a label named \"the_top\" in the\n\
@@ -15091,7 +14583,8 @@ specified name as a complete fully-quali
    command.  */
 
 #define BREAK_ARGS_HELP(command) \
-command" [PROBE_MODIFIER] [LOCATION] [thread THREADNUM] [if CONDITION]\n\
+command" [PROBE_MODIFIER] [LOCATION] [thread THREADNUM]\n\
+\t[-force-condition] [if CONDITION]\n\
 PROBE_MODIFIER shall be present if the command is to be placed in a\n\
 probe point.  Accepted values are `-probe' (for a generic, automatically\n\
 guessed probe type), `-probe-stap' (for a SystemTap probe) or \n\
@@ -15104,7 +14597,10 @@ stack frame.  This is useful for breakin
 \n\
 THREADNUM is the number from \"info threads\".\n\
 CONDITION is a boolean expression.\n\
-\n" LOCATION_HELP_STRING "\n\n\
+\n\
+With the \"-force-condition\" flag, the condition is defined even when\n\
+it is invalid for all current locations.\n\
+\n" LOCATION_SPEC_HELP_STRING "\n\n\
 Multiple breakpoints at one place are permitted, and useful if their\n\
 conditions are different.\n\
 \n\
@@ -15118,7 +14614,7 @@ static struct cmd_list_element *tcatch_c
 
 void
 add_catch_command (const char *name, const char *docstring,
-		   cmd_const_sfunc_ftype *sfunc,
+		   cmd_func_ftype *func,
 		   completer_ftype *completer,
 		   void *user_data_catch,
 		   void *user_data_tcatch)
@@ -15127,51 +14623,26 @@ add_catch_command (const char *name, con
 
   command = add_cmd (name, class_breakpoint, docstring,
 		     &catch_cmdlist);
-  set_cmd_sfunc (command, sfunc);
-  set_cmd_context (command, user_data_catch);
+  command->func = func;
+  command->set_context (user_data_catch);
   set_cmd_completer (command, completer);
 
   command = add_cmd (name, class_breakpoint, docstring,
 		     &tcatch_cmdlist);
-  set_cmd_sfunc (command, sfunc);
-  set_cmd_context (command, user_data_tcatch);
+  command->func = func;
+  command->set_context (user_data_tcatch);
   set_cmd_completer (command, completer);
 }
 
-static void
-save_command (const char *arg, int from_tty)
-{
-  printf_unfiltered (_("\"save\" must be followed by "
-		       "the name of a save subcommand.\n"));
-  help_list (save_cmdlist, "save ", all_commands, gdb_stdout);
-}
-
-struct breakpoint *
-iterate_over_breakpoints (gdb::function_view<bool (breakpoint *)> callback)
-{
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-    {
-      if (callback (b))
-	return b;
-    }
-
-  return NULL;
-}
-
-/* Zero if any of the breakpoint's locations could be a location where
-   functions have been inlined, nonzero otherwise.  */
+/* False if any of the breakpoint's locations could be a location where
+   functions have been inlined, true otherwise.  */
 
-static int
+static bool
 is_non_inline_function (struct breakpoint *b)
 {
   /* The shared library event breakpoint is set on the address of a
      non-inline function.  */
-  if (b->type == bp_shlib_event)
-    return 1;
-
-  return 0;
+  return (b->type == bp_shlib_event);
 }
 
 /* Nonzero if the specified PC cannot be a location where functions
@@ -15179,20 +14650,17 @@ is_non_inline_function (struct breakpoin
 
 int
 pc_at_non_inline_function (const address_space *aspace, CORE_ADDR pc,
-			   const struct target_waitstatus *ws)
+			   const target_waitstatus &ws)
 {
-  struct breakpoint *b;
-  struct bp_location *bl;
-
-  ALL_BREAKPOINTS (b)
+  for (breakpoint &b : all_breakpoints ())
     {
-      if (!is_non_inline_function (b))
+      if (!is_non_inline_function (&b))
 	continue;
 
-      for (bl = b->loc; bl != NULL; bl = bl->next)
+      for (bp_location &bl : b.locations ())
 	{
-	  if (!bl->shlib_disabled
-	      && bpstat_check_location (bl, aspace, pc, ws))
+	  if (!bl.shlib_disabled
+	      && bpstat_check_location (&bl, aspace, pc, ws))
 	    return 1;
 	}
     }
@@ -15205,189 +14673,11 @@ pc_at_non_inline_function (const address
 void
 breakpoint_free_objfile (struct objfile *objfile)
 {
-  struct bp_location **locp, *loc;
-
-  ALL_BP_LOCATIONS (loc, locp)
-    if (loc->symtab != NULL && SYMTAB_OBJFILE (loc->symtab) == objfile)
+  for (bp_location *loc : all_bp_locations ())
+    if (loc->symtab != NULL && loc->symtab->compunit ()->objfile () == objfile)
       loc->symtab = NULL;
 }
 
-void
-initialize_breakpoint_ops (void)
-{
-  static int initialized = 0;
-
-  struct breakpoint_ops *ops;
-
-  if (initialized)
-    return;
-  initialized = 1;
-
-  /* The breakpoint_ops structure to be inherit by all kinds of
-     breakpoints (real breakpoints, i.e., user "break" breakpoints,
-     internal and momentary breakpoints, etc.).  */
-  ops = &bkpt_base_breakpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->re_set = bkpt_re_set;
-  ops->insert_location = bkpt_insert_location;
-  ops->remove_location = bkpt_remove_location;
-  ops->breakpoint_hit = bkpt_breakpoint_hit;
-  ops->create_sals_from_location = bkpt_create_sals_from_location;
-  ops->create_breakpoints_sal = bkpt_create_breakpoints_sal;
-  ops->decode_location = bkpt_decode_location;
-
-  /* The breakpoint_ops structure to be used in regular breakpoints.  */
-  ops = &bkpt_breakpoint_ops;
-  *ops = bkpt_base_breakpoint_ops;
-  ops->re_set = bkpt_re_set;
-  ops->resources_needed = bkpt_resources_needed;
-  ops->print_it = bkpt_print_it;
-  ops->print_mention = bkpt_print_mention;
-  ops->print_recreate = bkpt_print_recreate;
-
-  /* Ranged breakpoints.  */
-  ops = &ranged_breakpoint_ops;
-  *ops = bkpt_breakpoint_ops;
-  ops->breakpoint_hit = breakpoint_hit_ranged_breakpoint;
-  ops->resources_needed = resources_needed_ranged_breakpoint;
-  ops->print_it = print_it_ranged_breakpoint;
-  ops->print_one = print_one_ranged_breakpoint;
-  ops->print_one_detail = print_one_detail_ranged_breakpoint;
-  ops->print_mention = print_mention_ranged_breakpoint;
-  ops->print_recreate = print_recreate_ranged_breakpoint;
-
-  /* Internal breakpoints.  */
-  ops = &internal_breakpoint_ops;
-  *ops = bkpt_base_breakpoint_ops;
-  ops->re_set = internal_bkpt_re_set;
-  ops->check_status = internal_bkpt_check_status;
-  ops->print_it = internal_bkpt_print_it;
-  ops->print_mention = internal_bkpt_print_mention;
-
-  /* Momentary breakpoints.  */
-  ops = &momentary_breakpoint_ops;
-  *ops = bkpt_base_breakpoint_ops;
-  ops->re_set = momentary_bkpt_re_set;
-  ops->check_status = momentary_bkpt_check_status;
-  ops->print_it = momentary_bkpt_print_it;
-  ops->print_mention = momentary_bkpt_print_mention;
-
-  /* Probe breakpoints.  */
-  ops = &bkpt_probe_breakpoint_ops;
-  *ops = bkpt_breakpoint_ops;
-  ops->insert_location = bkpt_probe_insert_location;
-  ops->remove_location = bkpt_probe_remove_location;
-  ops->create_sals_from_location = bkpt_probe_create_sals_from_location;
-  ops->decode_location = bkpt_probe_decode_location;
-
-  /* Watchpoints.  */
-  ops = &watchpoint_breakpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->re_set = re_set_watchpoint;
-  ops->insert_location = insert_watchpoint;
-  ops->remove_location = remove_watchpoint;
-  ops->breakpoint_hit = breakpoint_hit_watchpoint;
-  ops->check_status = check_status_watchpoint;
-  ops->resources_needed = resources_needed_watchpoint;
-  ops->works_in_software_mode = works_in_software_mode_watchpoint;
-  ops->print_it = print_it_watchpoint;
-  ops->print_mention = print_mention_watchpoint;
-  ops->print_recreate = print_recreate_watchpoint;
-  ops->explains_signal = explains_signal_watchpoint;
-
-  /* Masked watchpoints.  */
-  ops = &masked_watchpoint_breakpoint_ops;
-  *ops = watchpoint_breakpoint_ops;
-  ops->insert_location = insert_masked_watchpoint;
-  ops->remove_location = remove_masked_watchpoint;
-  ops->resources_needed = resources_needed_masked_watchpoint;
-  ops->works_in_software_mode = works_in_software_mode_masked_watchpoint;
-  ops->print_it = print_it_masked_watchpoint;
-  ops->print_one_detail = print_one_detail_masked_watchpoint;
-  ops->print_mention = print_mention_masked_watchpoint;
-  ops->print_recreate = print_recreate_masked_watchpoint;
-
-  /* Tracepoints.  */
-  ops = &tracepoint_breakpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->re_set = tracepoint_re_set;
-  ops->breakpoint_hit = tracepoint_breakpoint_hit;
-  ops->print_one_detail = tracepoint_print_one_detail;
-  ops->print_mention = tracepoint_print_mention;
-  ops->print_recreate = tracepoint_print_recreate;
-  ops->create_sals_from_location = tracepoint_create_sals_from_location;
-  ops->create_breakpoints_sal = tracepoint_create_breakpoints_sal;
-  ops->decode_location = tracepoint_decode_location;
-
-  /* Probe tracepoints.  */
-  ops = &tracepoint_probe_breakpoint_ops;
-  *ops = tracepoint_breakpoint_ops;
-  ops->create_sals_from_location = tracepoint_probe_create_sals_from_location;
-  ops->decode_location = tracepoint_probe_decode_location;
-
-  /* Static tracepoints with marker (`-m').  */
-  ops = &strace_marker_breakpoint_ops;
-  *ops = tracepoint_breakpoint_ops;
-  ops->create_sals_from_location = strace_marker_create_sals_from_location;
-  ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal;
-  ops->decode_location = strace_marker_decode_location;
-
-  /* Fork catchpoints.  */
-  ops = &catch_fork_breakpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->insert_location = insert_catch_fork;
-  ops->remove_location = remove_catch_fork;
-  ops->breakpoint_hit = breakpoint_hit_catch_fork;
-  ops->print_it = print_it_catch_fork;
-  ops->print_one = print_one_catch_fork;
-  ops->print_mention = print_mention_catch_fork;
-  ops->print_recreate = print_recreate_catch_fork;
-
-  /* Vfork catchpoints.  */
-  ops = &catch_vfork_breakpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->insert_location = insert_catch_vfork;
-  ops->remove_location = remove_catch_vfork;
-  ops->breakpoint_hit = breakpoint_hit_catch_vfork;
-  ops->print_it = print_it_catch_vfork;
-  ops->print_one = print_one_catch_vfork;
-  ops->print_mention = print_mention_catch_vfork;
-  ops->print_recreate = print_recreate_catch_vfork;
-
-  /* Exec catchpoints.  */
-  ops = &catch_exec_breakpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->insert_location = insert_catch_exec;
-  ops->remove_location = remove_catch_exec;
-  ops->breakpoint_hit = breakpoint_hit_catch_exec;
-  ops->print_it = print_it_catch_exec;
-  ops->print_one = print_one_catch_exec;
-  ops->print_mention = print_mention_catch_exec;
-  ops->print_recreate = print_recreate_catch_exec;
-
-  /* Solib-related catchpoints.  */
-  ops = &catch_solib_breakpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->insert_location = insert_catch_solib;
-  ops->remove_location = remove_catch_solib;
-  ops->breakpoint_hit = breakpoint_hit_catch_solib;
-  ops->check_status = check_status_catch_solib;
-  ops->print_it = print_it_catch_solib;
-  ops->print_one = print_one_catch_solib;
-  ops->print_mention = print_mention_catch_solib;
-  ops->print_recreate = print_recreate_catch_solib;
-
-  ops = &dprintf_breakpoint_ops;
-  *ops = bkpt_base_breakpoint_ops;
-  ops->re_set = dprintf_re_set;
-  ops->resources_needed = bkpt_resources_needed;
-  ops->print_it = bkpt_print_it;
-  ops->print_mention = bkpt_print_mention;
-  ops->print_recreate = dprintf_print_recreate;
-  ops->after_condition_true = dprintf_after_condition_true;
-  ops->breakpoint_hit = dprintf_breakpoint_hit;
-}
-
 /* Chain containing all defined "enable breakpoint" subcommands.  */
 
 static struct cmd_list_element *enablebreaklist = NULL;
@@ -15396,18 +14686,19 @@ static struct cmd_list_element *enablebr
 
 cmd_list_element *commands_cmd_element = nullptr;
 
+void _initialize_breakpoint ();
 void
-_initialize_breakpoint (void)
+_initialize_breakpoint ()
 {
   struct cmd_list_element *c;
 
-  initialize_breakpoint_ops ();
+  gdb::observers::solib_unloaded.attach (disable_breakpoints_in_unloaded_shlib,
+					 "breakpoint");
+  gdb::observers::free_objfile.attach (disable_breakpoints_in_freed_objfile,
+				       "breakpoint");
+  gdb::observers::memory_changed.attach (invalidate_bp_value_on_memory_change,
+					 "breakpoint");
 
-  gdb::observers::solib_unloaded.attach (disable_breakpoints_in_unloaded_shlib);
-  gdb::observers::free_objfile.attach (disable_breakpoints_in_freed_objfile);
-  gdb::observers::memory_changed.attach (invalidate_bp_value_on_memory_change);
-
-  breakpoint_chain = 0;
   /* Don't bother to call set_breakpoint_count.  $bpnum isn't useful
      before a breakpoint is set.  */
   breakpoint_count = 0;
@@ -15430,11 +14721,19 @@ Type a line containing \"end\" to indica
 Give \"silent\" as the first line to make the breakpoint silent;\n\
 then no output is printed when it is hit, except what the commands print."));
 
-  c = add_com ("condition", class_breakpoint, condition_command, _("\
+  const auto cc_opts = make_condition_command_options_def_group (nullptr);
+  static std::string condition_command_help
+    = gdb::option::build_help (_("\
 Specify breakpoint number N to break only if COND is true.\n\
-Usage is `condition N COND', where N is an integer and COND is an\n\
-expression to be evaluated whenever breakpoint N is reached."));
-  set_cmd_completer (c, condition_completer);
+Usage is `condition [OPTION] N COND', where N is an integer and COND\n\
+is an expression to be evaluated whenever breakpoint N is reached.\n\
+\n\
+Options:\n\
+%OPTIONS%"), cc_opts);
+
+  c = add_com ("condition", class_breakpoint, condition_command,
+	       condition_command_help.c_str ());
+  set_cmd_completer_handle_brkchars (c, condition_completer);
 
   c = add_com ("tbreak", class_breakpoint, tbreak_command, _("\
 Set a temporary breakpoint.\n\
@@ -15461,16 +14760,17 @@ so it will be deleted when hit.\n\
 BREAK_ARGS_HELP ("thbreak")));
   set_cmd_completer (c, location_completer);
 
-  add_prefix_cmd ("enable", class_breakpoint, enable_command, _("\
+  cmd_list_element *enable_cmd
+    = add_prefix_cmd ("enable", class_breakpoint, enable_command, _("\
 Enable all or some breakpoints.\n\
 Usage: enable [BREAKPOINTNUM]...\n\
 Give breakpoint numbers (separated by spaces) as arguments.\n\
 With no subcommand, breakpoints are enabled until you command otherwise.\n\
 This is used to cancel the effect of the \"disable\" command.\n\
 With a subcommand you can enable temporarily."),
-		  &enablelist, "enable ", 1, &cmdlist);
+		      &enablelist, 1, &cmdlist);
 
-  add_com_alias ("en", "enable", class_breakpoint, 1);
+  add_com_alias ("en", enable_cmd, class_breakpoint, 1);
 
   add_prefix_cmd ("breakpoints", class_breakpoint, enable_command, _("\
 Enable all or some breakpoints.\n\
@@ -15478,7 +14778,7 @@ Usage: enable breakpoints [BREAKPOINTNUM
 Give breakpoint numbers (separated by spaces) as arguments.\n\
 This is used to cancel the effect of the \"disable\" command.\n\
 May be abbreviated to simply \"enable\"."),
-		   &enablebreaklist, "enable breakpoints ", 1, &enablelist);
+		   &enablebreaklist, 1, &enablelist);
 
   add_cmd ("once", no_class, enable_once_command, _("\
 Enable some breakpoints for one hit.\n\
@@ -15518,17 +14818,18 @@ If a breakpoint is hit while enabled in
 the count is decremented; when it reaches zero, the breakpoint is disabled."),
 	   &enablelist);
 
-  add_prefix_cmd ("disable", class_breakpoint, disable_command, _("\
+  cmd_list_element *disable_cmd
+    = add_prefix_cmd ("disable", class_breakpoint, disable_command, _("\
 Disable all or some breakpoints.\n\
 Usage: disable [BREAKPOINTNUM]...\n\
 Arguments are breakpoint numbers with spaces in between.\n\
 To disable all breakpoints, give no argument.\n\
 A disabled breakpoint is not forgotten, but has no effect until re-enabled."),
-		  &disablelist, "disable ", 1, &cmdlist);
-  add_com_alias ("dis", "disable", class_breakpoint, 1);
-  add_com_alias ("disa", "disable", class_breakpoint, 1);
+		      &disablelist, 1, &cmdlist);
+  add_com_alias ("dis", disable_cmd, class_breakpoint, 1);
+  add_com_alias ("disa", disable_cmd, class_breakpoint, 1);
 
-  add_cmd ("breakpoints", class_alias, disable_command, _("\
+  add_cmd ("breakpoints", class_breakpoint, disable_command, _("\
 Disable all or some breakpoints.\n\
 Usage: disable breakpoints [BREAKPOINTNUM]...\n\
 Arguments are breakpoint numbers with spaces in between.\n\
@@ -15537,18 +14838,19 @@ A disabled breakpoint is not forgotten,
 This command may be abbreviated \"disable\"."),
 	   &disablelist);
 
-  add_prefix_cmd ("delete", class_breakpoint, delete_command, _("\
+  cmd_list_element *delete_cmd
+    = add_prefix_cmd ("delete", class_breakpoint, delete_command, _("\
 Delete all or some breakpoints.\n\
 Usage: delete [BREAKPOINTNUM]...\n\
 Arguments are breakpoint numbers with spaces in between.\n\
 To delete all breakpoints, give no argument.\n\
 \n\
 Also a prefix command for deletion of other GDB objects."),
-		  &deletelist, "delete ", 1, &cmdlist);
-  add_com_alias ("d", "delete", class_breakpoint, 1);
-  add_com_alias ("del", "delete", class_breakpoint, 1);
+		      &deletelist, 1, &cmdlist);
+  add_com_alias ("d", delete_cmd, class_breakpoint, 1);
+  add_com_alias ("del", delete_cmd, class_breakpoint, 1);
 
-  add_cmd ("breakpoints", class_alias, delete_command, _("\
+  add_cmd ("breakpoints", class_breakpoint, delete_command, _("\
 Delete all or some breakpoints or auto-display expressions.\n\
 Usage: delete breakpoints [BREAKPOINTNUM]...\n\
 Arguments are breakpoint numbers with spaces in between.\n\
@@ -15556,53 +14858,30 @@ To delete all breakpoints, give no argum
 This command may be abbreviated \"delete\"."),
 	   &deletelist);
 
-  add_com ("clear", class_breakpoint, clear_command, _("\
+  cmd_list_element *clear_cmd
+   = add_com ("clear", class_breakpoint, clear_command, _("\
 Clear breakpoint at specified location.\n\
 Argument may be a linespec, explicit, or address location as described below.\n\
 \n\
 With no argument, clears all breakpoints in the line that the selected frame\n\
 is executing in.\n"
-"\n" LOCATION_HELP_STRING "\n\n\
+"\n" LOCATION_SPEC_HELP_STRING "\n\n\
 See also the \"delete\" command which clears breakpoints by number."));
-  add_com_alias ("cl", "clear", class_breakpoint, 1);
+  add_com_alias ("cl", clear_cmd, class_breakpoint, 1);
 
-  c = add_com ("break", class_breakpoint, break_command, _("\
+  cmd_list_element *break_cmd
+    = add_com ("break", class_breakpoint, break_command, _("\
 Set breakpoint at specified location.\n"
 BREAK_ARGS_HELP ("break")));
-  set_cmd_completer (c, location_completer);
+  set_cmd_completer (break_cmd, location_completer);
 
-  add_com_alias ("b", "break", class_run, 1);
-  add_com_alias ("br", "break", class_run, 1);
-  add_com_alias ("bre", "break", class_run, 1);
-  add_com_alias ("brea", "break", class_run, 1);
-
-  if (dbx_commands)
-    {
-      add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command, _("\
-Break in function/address or break at a line in the current file."),
-			     &stoplist, "stop ", 1, &cmdlist);
-      add_cmd ("in", class_breakpoint, stopin_command,
-	       _("Break in function or address."), &stoplist);
-      add_cmd ("at", class_breakpoint, stopat_command,
-	       _("Break at a line in the current file."), &stoplist);
-      add_com ("status", class_info, info_breakpoints_command, _("\
-Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
-The \"Type\" column indicates one of:\n\
-\tbreakpoint     - normal breakpoint\n\
-\twatchpoint     - watchpoint\n\
-The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
-the disposition of the breakpoint after it gets hit.  \"dis\" means that the\n\
-breakpoint will be disabled.  The \"Address\" and \"What\" columns indicate the\n\
-address and file/line number respectively.\n\
-\n\
-Convenience variable \"$_\" and default examine address for \"x\"\n\
-are set to the address of the last breakpoint listed unless the command\n\
-is prefixed with \"server \".\n\n\
-Convenience variable \"$bpnum\" contains the number of the last\n\
-breakpoint set."));
-    }
+  add_com_alias ("b", break_cmd, class_run, 1);
+  add_com_alias ("br", break_cmd, class_run, 1);
+  add_com_alias ("bre", break_cmd, class_run, 1);
+  add_com_alias ("brea", break_cmd, class_run, 1);
 
-  add_info ("breakpoints", info_breakpoints_command, _("\
+  cmd_list_element *info_breakpoints_cmd
+    = add_info ("breakpoints", info_breakpoints_command, _("\
 Status of specified breakpoints (all user-settable breakpoints if no argument).\n\
 The \"Type\" column indicates one of:\n\
 \tbreakpoint     - normal breakpoint\n\
@@ -15618,7 +14897,7 @@ is prefixed with \"server \".\n\n\
 Convenience variable \"$bpnum\" contains the number of the last\n\
 breakpoint set."));
 
-  add_info_alias ("b", "breakpoints", 1);
+  add_info_alias ("b", info_breakpoints_cmd, 1);
 
   add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints, _("\
 Status of all breakpoints, or breakpoint number NUMBER.\n\
@@ -15641,72 +14920,56 @@ Convenience variable \"$bpnum\" contains
 breakpoint set."),
 	   &maintenanceinfolist);
 
-  add_prefix_cmd ("catch", class_breakpoint, catch_command, _("\
+  add_basic_prefix_cmd ("catch", class_breakpoint, _("\
 Set catchpoints to catch events."),
-		  &catch_cmdlist, "catch ",
-		  0/*allow-unknown*/, &cmdlist);
+			&catch_cmdlist,
+			0/*allow-unknown*/, &cmdlist);
 
-  add_prefix_cmd ("tcatch", class_breakpoint, tcatch_command, _("\
+  add_basic_prefix_cmd ("tcatch", class_breakpoint, _("\
 Set temporary catchpoints to catch events."),
-		  &tcatch_cmdlist, "tcatch ",
-		  0/*allow-unknown*/, &cmdlist);
+			&tcatch_cmdlist,
+			0/*allow-unknown*/, &cmdlist);
 
-  add_catch_command ("fork", _("Catch calls to fork."),
-		     catch_fork_command_1,
-                     NULL,
-		     (void *) (uintptr_t) catch_fork_permanent,
-		     (void *) (uintptr_t) catch_fork_temporary);
-  add_catch_command ("vfork", _("Catch calls to vfork."),
-		     catch_fork_command_1,
-                     NULL,
-		     (void *) (uintptr_t) catch_vfork_permanent,
-		     (void *) (uintptr_t) catch_vfork_temporary);
-  add_catch_command ("exec", _("Catch calls to exec."),
-		     catch_exec_command_1,
-                     NULL,
-		     CATCH_PERMANENT,
-		     CATCH_TEMPORARY);
-  add_catch_command ("load", _("Catch loads of shared libraries.\n\
-Usage: catch load [REGEX]\n\
-If REGEX is given, only stop for libraries matching the regular expression."),
-		     catch_load_command_1,
-		     NULL,
-		     CATCH_PERMANENT,
-		     CATCH_TEMPORARY);
-  add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
-Usage: catch unload [REGEX]\n\
-If REGEX is given, only stop for libraries matching the regular expression."),
-		     catch_unload_command_1,
-		     NULL,
-		     CATCH_PERMANENT,
-		     CATCH_TEMPORARY);
+  const auto opts = make_watch_options_def_group (nullptr);
 
-  c = add_com ("watch", class_breakpoint, watch_command, _("\
-Set a watchpoint for an expression.\n\
-Usage: watch [-l|-location] EXPRESSION\n\
-A watchpoint stops execution of your program whenever the value of\n\
-an expression changes.\n\
-If -l or -location is given, this evaluates EXPRESSION and watches\n\
-the memory to which it refers."));
-  set_cmd_completer (c, expression_completer);
-
-  c = add_com ("rwatch", class_breakpoint, rwatch_command, _("\
-Set a read watchpoint for an expression.\n\
-Usage: rwatch [-l|-location] EXPRESSION\n\
-A watchpoint stops execution of your program whenever the value of\n\
-an expression is read.\n\
-If -l or -location is given, this evaluates EXPRESSION and watches\n\
-the memory to which it refers."));
-  set_cmd_completer (c, expression_completer);
-
-  c = add_com ("awatch", class_breakpoint, awatch_command, _("\
-Set a watchpoint for an expression.\n\
-Usage: awatch [-l|-location] EXPRESSION\n\
+  static const std::string watch_help = gdb::option::build_help (_("\
+Set a watchpoint for EXPRESSION.\n\
+Usage: watch [-location] EXPRESSION\n\
+\n\
+Options:\n\
+%OPTIONS%\n\
+\n\
 A watchpoint stops execution of your program whenever the value of\n\
-an expression is either read or written.\n\
-If -l or -location is given, this evaluates EXPRESSION and watches\n\
-the memory to which it refers."));
-  set_cmd_completer (c, expression_completer);
+an expression changes."), opts);
+  c = add_com ("watch", class_breakpoint, watch_command,
+	       watch_help.c_str ());
+  set_cmd_completer_handle_brkchars (c, watch_command_completer);
+
+  static const std::string rwatch_help = gdb::option::build_help (_("\
+Set a read watchpoint for EXPRESSION.\n\
+Usage: rwatch [-location] EXPRESSION\n\
+\n\
+Options:\n\
+%OPTIONS%\n\
+\n\
+A read watchpoint stops execution of your program whenever the value of\n\
+an expression is read."), opts);
+  c = add_com ("rwatch", class_breakpoint, rwatch_command,
+	       rwatch_help.c_str ());
+  set_cmd_completer_handle_brkchars (c, watch_command_completer);
+
+  static const std::string awatch_help = gdb::option::build_help (_("\
+Set an access watchpoint for EXPRESSION.\n\
+Usage: awatch [-location] EXPRESSION\n\
+\n\
+Options:\n\
+%OPTIONS%\n\
+\n\
+An access watchpoint stops execution of your program whenever the value\n\
+of an expression is either read or written."), opts);
+  c = add_com ("awatch", class_breakpoint, awatch_command,
+	       awatch_help.c_str ());
+  set_cmd_completer_handle_brkchars (c, watch_command_completer);
 
   add_info ("watchpoints", info_watchpoints_command, _("\
 Status of specified watchpoints (all watchpoints if no argument)."));
@@ -15729,17 +14992,18 @@ hardware.)"),
 
   /* Tracepoint manipulation commands.  */
 
-  c = add_com ("trace", class_breakpoint, trace_command, _("\
+  cmd_list_element *trace_cmd
+    = add_com ("trace", class_breakpoint, trace_command, _("\
 Set a tracepoint at specified location.\n\
 \n"
 BREAK_ARGS_HELP ("trace") "\n\
 Do \"help tracepoints\" for info on other tracepoint commands."));
-  set_cmd_completer (c, location_completer);
+  set_cmd_completer (trace_cmd, location_completer);
 
-  add_com_alias ("tp", "trace", class_alias, 0);
-  add_com_alias ("tr", "trace", class_alias, 1);
-  add_com_alias ("tra", "trace", class_alias, 1);
-  add_com_alias ("trac", "trace", class_alias, 1);
+  add_com_alias ("tp", trace_cmd, class_breakpoint, 0);
+  add_com_alias ("tr", trace_cmd, class_breakpoint, 1);
+  add_com_alias ("tra", trace_cmd, class_breakpoint, 1);
+  add_com_alias ("trac", trace_cmd, class_breakpoint, 1);
 
   c = add_com ("ftrace", class_breakpoint, ftrace_command, _("\
 Set a fast tracepoint at specified location.\n\
@@ -15762,7 +15026,7 @@ tracing library.  You can inspect it whe
 by printing the $_sdata variable like any other convenience variable.\n\
 \n\
 CONDITION is a boolean expression.\n\
-\n" LOCATION_HELP_STRING "\n\n\
+\n" LOCATION_SPEC_HELP_STRING "\n\n\
 Multiple tracepoints at one place are permitted, and useful if their\n\
 conditions are different.\n\
 \n\
@@ -15770,19 +15034,21 @@ Do \"help breakpoints\" for info on othe
 Do \"help tracepoints\" for info on other tracepoint commands."));
   set_cmd_completer (c, location_completer);
 
-  add_info ("tracepoints", info_tracepoints_command, _("\
+  cmd_list_element *info_tracepoints_cmd
+    = add_info ("tracepoints", info_tracepoints_command, _("\
 Status of specified tracepoints (all tracepoints if no argument).\n\
 Convenience variable \"$tpnum\" contains the number of the\n\
 last tracepoint set."));
 
-  add_info_alias ("tp", "tracepoints", 1);
+  add_info_alias ("tp", info_tracepoints_cmd, 1);
 
-  add_cmd ("tracepoints", class_trace, delete_trace_command, _("\
+  cmd_list_element *delete_tracepoints_cmd
+    = add_cmd ("tracepoints", class_trace, delete_trace_command, _("\
 Delete specified tracepoints.\n\
 Arguments are tracepoint numbers, separated by spaces.\n\
 No argument means delete all tracepoints."),
 	   &deletelist);
-  add_alias_cmd ("tr", "tracepoints", class_trace, 1, &deletelist);
+  add_alias_cmd ("tr", delete_tracepoints_cmd, class_trace, 1, &deletelist);
 
   c = add_cmd ("tracepoints", class_trace, disable_trace_command, _("\
 Disable specified tracepoints.\n\
@@ -15804,10 +15070,10 @@ The trace will end when the tracepoint h
 Usage: passcount COUNT TPNUM, where TPNUM may also be \"all\";\n\
 if TPNUM is omitted, passcount refers to the last tracepoint defined."));
 
-  add_prefix_cmd ("save", class_breakpoint, save_command,
-		  _("Save breakpoint definitions as a script."),
-		  &save_cmdlist, "save ",
-		  0/*allow-unknown*/, &cmdlist);
+  add_basic_prefix_cmd ("save", class_breakpoint,
+			_("Save breakpoint definitions as a script."),
+			&save_cmdlist,
+			0/*allow-unknown*/, &cmdlist);
 
   c = add_cmd ("breakpoints", class_breakpoint, save_breakpoints_command, _("\
 Save current breakpoint definitions as a script.\n\
@@ -15817,27 +15083,27 @@ session to restore them."),
 	       &save_cmdlist);
   set_cmd_completer (c, filename_completer);
 
-  c = add_cmd ("tracepoints", class_trace, save_tracepoints_command, _("\
+  cmd_list_element *save_tracepoints_cmd
+    = add_cmd ("tracepoints", class_trace, save_tracepoints_command, _("\
 Save current tracepoint definitions as a script.\n\
 Use the 'source' command in another debug session to restore them."),
 	       &save_cmdlist);
-  set_cmd_completer (c, filename_completer);
+  set_cmd_completer (save_tracepoints_cmd, filename_completer);
 
-  c = add_com_alias ("save-tracepoints", "save tracepoints", class_trace, 0);
+  c = add_com_alias ("save-tracepoints", save_tracepoints_cmd, class_trace, 0);
   deprecate_cmd (c, "save tracepoints");
 
-  add_prefix_cmd ("breakpoint", class_maintenance, set_breakpoint_cmd, _("\
+  add_setshow_prefix_cmd ("breakpoint", class_maintenance,
+			  _("\
 Breakpoint specific settings.\n\
 Configure various breakpoint-specific variables such as\n\
 pending breakpoint behavior."),
-		  &breakpoint_set_cmdlist, "set breakpoint ",
-		  0/*allow-unknown*/, &setlist);
-  add_prefix_cmd ("breakpoint", class_maintenance, show_breakpoint_cmd, _("\
+			  _("\
 Breakpoint specific settings.\n\
 Configure various breakpoint-specific variables such as\n\
 pending breakpoint behavior."),
-		  &breakpoint_show_cmdlist, "show breakpoint ",
-		  0/*allow-unknown*/, &showlist);
+			  &breakpoint_set_cmdlist, &breakpoint_show_cmdlist,
+			  &setlist, &showlist);
 
   add_setshow_auto_boolean_cmd ("pending", no_class,
 				&pending_break_support, _("\
@@ -15880,6 +15146,15 @@ when execution stops."),
 				&breakpoint_set_cmdlist,
 				&breakpoint_show_cmdlist);
 
+  add_setshow_boolean_cmd ("breakpoint", class_maintenance,
+			   &debug_breakpoint, _("\
+Set breakpoint location debugging."), _("\
+Show breakpoint location debugging."), _("\
+When on, breakpoint location specific debugging is enabled."),
+			   NULL,
+			   show_debug_breakpoint,
+			   &setdebuglist, &showdebuglist);
+
   add_setshow_enum_cmd ("condition-evaluation", class_breakpoint,
 			condition_evaluation_enums,
 			&condition_evaluation_mode_1, _("\
@@ -15891,7 +15166,7 @@ breakpoint conditions will be downloaded
 supports such feature) and conditions will be evaluated on the target's side.\n\
 If this is set to \"auto\" (default), this will be automatically set to\n\
 \"target\" if it supports condition evaluation, otherwise it will\n\
-be set to \"gdb\""),
+be set to \"host\"."),
 			   &set_condition_evaluation_mode,
 			   &show_condition_evaluation_mode,
 			   &breakpoint_set_cmdlist,
@@ -15904,7 +15179,7 @@ where START-LOCATION and END-LOCATION ca
   LINENUM, for that line in the current file,\n\
   FILE:LINENUM, for that line in that file,\n\
   +OFFSET, for that number of lines after the current line\n\
-           or the start of the range\n\
+	   or the start of the range\n\
   FUNCTION, for the first line in that function,\n\
   FILE:FUNCTION, to distinguish among like-named static functions.\n\
   *ADDRESS, for the instruction at that address.\n\
@@ -15917,7 +15192,7 @@ range (including START-LOCATION and END-
 Set a dynamic printf at specified location.\n\
 dprintf location,format string,arg1,arg2,...\n\
 location may be a linespec, explicit, or address location.\n"
-"\n" LOCATION_HELP_STRING));
+"\n" LOCATION_SPEC_HELP_STRING));
   set_cmd_completer (c, location_completer);
 
   add_setshow_enum_cmd ("dprintf-style", class_support,
@@ -15933,7 +15208,6 @@ output stream by setting dprintf-functio
 			update_dprintf_commands, NULL,
 			&setlist, &showlist);
 
-  dprintf_function = xstrdup ("printf");
   add_setshow_string_cmd ("dprintf-function", class_support,
 			  &dprintf_function, _("\
 Set the function to use for dynamic printf."), _("\
@@ -15941,7 +15215,6 @@ Show the function to use for dynamic pri
 			  update_dprintf_commands, NULL,
 			  &setlist, &showlist);
 
-  dprintf_channel = xstrdup ("");
   add_setshow_string_cmd ("dprintf-channel", class_support,
 			  &dprintf_channel, _("\
 Set the channel to use for dynamic printf."), _("\
@@ -15967,6 +15240,10 @@ This is useful for formatted output in u
 
   automatic_hardware_breakpoints = true;
 
-  gdb::observers::about_to_proceed.attach (breakpoint_about_to_proceed);
-  gdb::observers::thread_exit.attach (remove_threaded_breakpoints);
+  gdb::observers::about_to_proceed.attach (breakpoint_about_to_proceed,
+					   "breakpoint");
+  gdb::observers::thread_exit.attach (remove_threaded_breakpoints,
+				      "breakpoint");
+  gdb::observers::inferior_removed.attach (remove_inferior_breakpoints,
+					   "breakpoint");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/breakpoint.h ./gdb/breakpoint.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/breakpoint.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/breakpoint.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Data structures associated with breakpoints in GDB.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,15 +28,21 @@
 #include "location.h"
 #include <vector>
 #include "gdbsupport/array-view.h"
+#include "gdbsupport/filtered-iterator.h"
 #include "gdbsupport/function-view.h"
+#include "gdbsupport/next-iterator.h"
+#include "gdbsupport/iterator-range.h"
+#include "gdbsupport/refcounted-object.h"
+#include "gdbsupport/safe-iterator.h"
 #include "cli/cli-script.h"
+#include "target/waitstatus.h"
 
 struct block;
 struct gdbpy_breakpoint_object;
 struct gdbscm_breakpoint_object;
 struct number_or_range_parser;
 struct thread_info;
-struct bpstats;
+struct bpstat;
 struct bp_location;
 struct linespec_result;
 struct linespec_sals;
@@ -178,6 +184,8 @@ enum bptype
     bp_tracepoint,
     bp_fast_tracepoint,
     bp_static_tracepoint,
+    /* Like bp_static_tracepoint but for static markers.  */
+    bp_static_marker_tracepoint,
 
     /* A dynamic printf stops at the given location, does a formatted
        print, then automatically continues.  (Although this is sort of
@@ -307,15 +315,15 @@ enum bp_loc_type
 {
   bp_loc_software_breakpoint,
   bp_loc_hardware_breakpoint,
+  bp_loc_software_watchpoint,
   bp_loc_hardware_watchpoint,
+  bp_loc_tracepoint,
   bp_loc_other			/* Miscellaneous...  */
 };
 
-class bp_location
+class bp_location : public refcounted_object, public intrusive_list_node<bp_location>
 {
 public:
-  bp_location () = default;
-
   /* Construct a bp_location with the type inferred from OWNER's
      type.  */
   explicit bp_location (breakpoint *owner);
@@ -323,14 +331,7 @@ public:
   /* Construct a bp_location with type TYPE.  */
   bp_location (breakpoint *owner, bp_loc_type type);
 
-  virtual ~bp_location ();
-
-  /* Chain pointer to the next breakpoint location for
-     the same parent breakpoint.  */
-  bp_location *next = NULL;
-
-  /* The reference count.  */
-  int refc = 0;
+  virtual ~bp_location () = default;
 
   /* Type of this breakpoint location.  */
   bp_loc_type loc_type {};
@@ -387,6 +388,12 @@ public:
   /* Is this particular location enabled.  */
   bool enabled = false;
   
+  /* Is this particular location disabled because the condition
+     expression is invalid at this location.  For a location to be
+     reported as enabled, the ENABLED field above has to be true *and*
+     the DISABLED_BY_COND field has to be false.  */
+  bool disabled_by_cond = false;
+
   /* True if this breakpoint is now inserted.  */
   bool inserted = false;
 
@@ -459,7 +466,7 @@ public:
      with it.  */
   bound_probe probe {};
 
-  char *function_name = NULL;
+  gdb::unique_xmalloc_ptr<char> function_name;
 
   /* Details of the placed breakpoint, when inserted.  */
   bp_target_info target_info {};
@@ -491,7 +498,7 @@ public:
   struct symtab *symtab = NULL;
 
   /* The symbol found by the location parser, if any.  This may be used to
-     ascertain when an event location was set at a different location than
+     ascertain when a location spec was set at a different location than
      the one originally selected by parsing, e.g., inlined symbols.  */
   const struct symbol *symbol = NULL;
 
@@ -502,8 +509,33 @@ public:
 
   /* The objfile the symbol or minimal symbol were found in.  */
   const struct objfile *objfile = NULL;
+
+  /* Return a string representation of the bp_location.
+     This is only meant to be used in debug messages.  */
+  std::string to_string () const;
+};
+
+/* A policy class for bp_location reference counting.  */
+struct bp_location_ref_policy
+{
+  static void incref (bp_location *loc)
+  {
+    loc->incref ();
+  }
+
+  static void decref (bp_location *loc)
+  {
+    gdb_assert (loc->refcount () > 0);
+    loc->decref ();
+    if (loc->refcount () == 0)
+      delete loc;
+  }
 };
 
+/* A gdb::ref_ptr that has been specialized for bp_location.  */
+typedef gdb::ref_ptr<bp_location, bp_location_ref_policy>
+     bp_location_ref_ptr;
+
 /* The possible return values for print_bpstat, print_it_normal,
    print_it_done, print_it_noop.  */
 enum print_stop_action
@@ -530,24 +562,163 @@ enum print_stop_action
 
 struct breakpoint_ops
 {
+  /* Create SALs from location spec, storing the result in
+     linespec_result.
+
+     For an explanation about the arguments, see the function
+     `create_sals_from_location_spec_default'.
+
+     This function is called inside `create_breakpoint'.  */
+  void (*create_sals_from_location_spec) (location_spec *locspec,
+					  struct linespec_result *canonical);
+
+  /* This method will be responsible for creating a breakpoint given its SALs.
+     Usually, it just calls `create_breakpoints_sal' (for ordinary
+     breakpoints).  However, there may be some special cases where we might
+     need to do some tweaks, e.g., see
+     `strace_marker_create_breakpoints_sal'.
+
+     This function is called inside `create_breakpoint'.  */
+  void (*create_breakpoints_sal) (struct gdbarch *,
+				  struct linespec_result *,
+				  gdb::unique_xmalloc_ptr<char>,
+				  gdb::unique_xmalloc_ptr<char>,
+				  enum bptype, enum bpdisp, int, int, int,
+				  int, int, int, int, unsigned);
+};
+
+enum watchpoint_triggered
+{
+  /* This watchpoint definitely did not trigger.  */
+  watch_triggered_no = 0,
+
+  /* Some hardware watchpoint triggered, and it might have been this
+     one, but we do not know which it was.  */
+  watch_triggered_unknown,
+
+  /* This hardware watchpoint definitely did trigger.  */
+  watch_triggered_yes  
+};
+
+/* Some targets (e.g., embedded PowerPC) need two debug registers to set
+   a watchpoint over a memory region.  If this flag is true, GDB will use
+   only one register per watchpoint, thus assuming that all accesses that
+   modify a memory location happen at its starting address. */
+
+extern bool target_exact_watchpoints;
+
+using bp_location_list = intrusive_list<bp_location>;
+using bp_location_iterator = bp_location_list::iterator;
+using bp_location_range = iterator_range<bp_location_iterator>;
+
+/* Note that the ->silent field is not currently used by any commands
+   (though the code is in there if it was to be, and set_raw_breakpoint
+   does set it to 0).  I implemented it because I thought it would be
+   useful for a hack I had to put in; I'm going to leave it in because
+   I can see how there might be times when it would indeed be useful */
+
+/* Abstract base class representing all kinds of breakpoints.  */
+
+struct breakpoint : public intrusive_list_node<breakpoint>
+{
+  breakpoint (struct gdbarch *gdbarch_, enum bptype bptype,
+	      bool temp = true, const char *cond_string = nullptr);
+
+  DISABLE_COPY_AND_ASSIGN (breakpoint);
+
+  virtual ~breakpoint () = 0;
+
   /* Allocate a location for this breakpoint.  */
-  struct bp_location * (*allocate_location) (struct breakpoint *);
+  virtual struct bp_location *allocate_location ();
+
+  /* Return a range of this breakpoint's locations.  */
+  bp_location_range locations () const;
+
+  /* Add LOC to the location list of this breakpoint, sorted by address
+     (using LOC.ADDRESS).
+
+     LOC must have this breakpoint as its owner.  LOC must not already be linked
+     in a location list.  */
+  void add_location (bp_location &loc);
+
+  /* Remove LOC from this breakpoint's location list.  The name is a bit funny
+     because remove_location is already taken, and means something else.
+
+     LOC must be have this breakpoints as its owner.  LOC must be linked in this
+     breakpoint's location list.  */
+  void unadd_location (bp_location &loc);
+
+  /* Clear the location list of this breakpoint.  */
+  void clear_locations ()
+  { m_locations.clear (); }
+
+  /* Split all locations of this breakpoint that are bound to PSPACE out of its
+     location list to a separate list and return that list.  If
+     PSPACE is nullptr, hoist out all locations.  */
+  bp_location_list steal_locations (program_space *pspace);
+
+  /* Return true if this breakpoint has a least one location.  */
+  bool has_locations () const
+  { return !m_locations.empty (); }
+
+  /* Return true if this breakpoint has a single location.  */
+  bool has_single_location () const
+  {
+    if (!this->has_locations ())
+      return false;
+
+    return std::next (m_locations.begin ()) == m_locations.end ();
+  }
+
+  /* Return true if this breakpoint has multiple locations.  */
+  bool has_multiple_locations () const
+  {
+    if (!this->has_locations ())
+      return false;
+
+    return std::next (m_locations.begin ()) != m_locations.end ();
+  }
+
+  /* Return a reference to the first location of this breakpoint.  */
+  bp_location &first_loc ()
+  {
+    gdb_assert (this->has_locations ());
+    return m_locations.front ();
+  }
+
+  /* Return a reference to the first location of this breakpoint.  */
+  const bp_location &first_loc () const
+  {
+    gdb_assert (this->has_locations ());
+    return m_locations.front ();
+  }
+
+  /* Return a reference to the last location of this breakpoint.  */
+  const bp_location &last_loc () const
+  {
+    gdb_assert (this->has_locations ());
+    return m_locations.back ();
+  }
 
   /* Reevaluate a breakpoint.  This is necessary after symbols change
      (e.g., an executable or DSO was loaded, or the inferior just
      started).  */
-  void (*re_set) (struct breakpoint *self);
+  virtual void re_set ()
+  {
+    /* Nothing to re-set.  */
+  }
 
   /* Insert the breakpoint or watchpoint or activate the catchpoint.
      Return 0 for success, 1 if the breakpoint, watchpoint or
      catchpoint type is not supported, -1 for failure.  */
-  int (*insert_location) (struct bp_location *);
+  virtual int insert_location (struct bp_location *);
 
   /* Remove the breakpoint/catchpoint that was previously inserted
      with the "insert" method above.  Return 0 for success, 1 if the
      breakpoint, watchpoint or catchpoint type is not supported,
      -1 for failure.  */
-  int (*remove_location) (struct bp_location *, enum remove_bp_reason reason);
+  virtual int remove_location (struct bp_location *,
+			       enum remove_bp_reason reason);
 
   /* Return true if it the target has stopped due to hitting
      breakpoint location BL.  This function does not check if we
@@ -555,38 +726,41 @@ struct breakpoint_ops
      space in which the event occurred, BP_ADDR is the address at
      which the inferior stopped, and WS is the target_waitstatus
      describing the event.  */
-  int (*breakpoint_hit) (const struct bp_location *bl,
-			 const address_space *aspace,
-			 CORE_ADDR bp_addr,
-			 const struct target_waitstatus *ws);
+  virtual int breakpoint_hit (const struct bp_location *bl,
+			      const address_space *aspace,
+			      CORE_ADDR bp_addr,
+			      const target_waitstatus &ws);
 
   /* Check internal conditions of the breakpoint referred to by BS.
-     If we should not stop for this breakpoint, set BS->stop to 0.  */
-  void (*check_status) (struct bpstats *bs);
+     If we should not stop for this breakpoint, set BS->stop to
+     false.  */
+  virtual void check_status (struct bpstat *bs)
+  {
+    /* Always stop.  */
+  }
 
   /* Tell how many hardware resources (debug registers) are needed
      for this breakpoint.  If this function is not provided, then
      the breakpoint or watchpoint needs one debug register.  */
-  int (*resources_needed) (const struct bp_location *);
-
-  /* Tell whether we can downgrade from a hardware watchpoint to a software
-     one.  If not, the user will not be able to enable the watchpoint when
-     there are not enough hardware resources available.  */
-  int (*works_in_software_mode) (const struct breakpoint *);
+  virtual int resources_needed (const struct bp_location *);
 
   /* The normal print routine for this breakpoint, called when we
      hit it.  */
-  enum print_stop_action (*print_it) (struct bpstats *bs);
+  virtual enum print_stop_action print_it (const bpstat *bs) const;
 
   /* Display information about this breakpoint, for "info
-     breakpoints".  */
-  void (*print_one) (struct breakpoint *, struct bp_location **);
+     breakpoints".  Returns false if this method should use the
+     default behavior.  */
+  virtual bool print_one (const bp_location **) const
+  {
+    return false;
+  }
 
   /* Display extra information about this breakpoint, below the normal
      breakpoint description in "info breakpoints".
 
      In the example below, the "address range" line was printed
-     by print_one_detail_ranged_breakpoint.
+     by ranged_breakpoint::print_one_detail.
 
      (gdb) info breakpoints
      Num     Type           Disp Enb Address    What
@@ -594,105 +768,32 @@ struct breakpoint_ops
 	     address range: [0x10000458, 0x100004c7]
 
    */
-  void (*print_one_detail) (const struct breakpoint *, struct ui_out *);
+  virtual void print_one_detail (struct ui_out *) const
+  {
+    /* Nothing.  */
+  }
 
   /* Display information about this breakpoint after setting it
      (roughly speaking; this is called from "mention").  */
-  void (*print_mention) (struct breakpoint *);
+  virtual void print_mention () const;
 
   /* Print to FP the CLI command that recreates this breakpoint.  */
-  void (*print_recreate) (struct breakpoint *, struct ui_file *fp);
-
-  /* Create SALs from location, storing the result in linespec_result.
-
-     For an explanation about the arguments, see the function
-     `create_sals_from_location_default'.
-
-     This function is called inside `create_breakpoint'.  */
-  void (*create_sals_from_location) (const struct event_location *location,
-				     struct linespec_result *canonical,
-				     enum bptype type_wanted);
-
-  /* This method will be responsible for creating a breakpoint given its SALs.
-     Usually, it just calls `create_breakpoints_sal' (for ordinary
-     breakpoints).  However, there may be some special cases where we might
-     need to do some tweaks, e.g., see
-     `strace_marker_create_breakpoints_sal'.
-
-     This function is called inside `create_breakpoint'.  */
-  void (*create_breakpoints_sal) (struct gdbarch *,
-				  struct linespec_result *,
-				  gdb::unique_xmalloc_ptr<char>,
-				  gdb::unique_xmalloc_ptr<char>,
-				  enum bptype, enum bpdisp, int, int,
-				  int, const struct breakpoint_ops *,
-				  int, int, int, unsigned);
-
-  /* Given the location (second parameter), this method decodes it and
-     returns the SAL locations related to it.  For ordinary
-     breakpoints, it calls `decode_line_full'.  If SEARCH_PSPACE is
-     not NULL, symbol search is restricted to just that program space.
-
-     This function is called inside `location_to_sals'.  */
-  std::vector<symtab_and_line> (*decode_location)
-    (struct breakpoint *b,
-     const struct event_location *location,
-     struct program_space *search_pspace);
+  virtual void print_recreate (struct ui_file *fp) const;
 
   /* Return true if this breakpoint explains a signal.  See
      bpstat_explains_signal.  */
-  int (*explains_signal) (struct breakpoint *, enum gdb_signal);
+  virtual bool explains_signal (enum gdb_signal)
+  {
+    return true;
+  }
 
   /* Called after evaluating the breakpoint's condition,
      and only if it evaluated true.  */
-  void (*after_condition_true) (struct bpstats *bs);
-};
-
-/* Helper for breakpoint_ops->print_recreate implementations.  Prints
-   the "thread" or "task" condition of B, and then a newline.
-
-   Necessary because most breakpoint implementations accept
-   thread/task conditions at the end of the spec line, like "break foo
-   thread 1", which needs outputting before any breakpoint-type
-   specific extra command necessary for B's recreation.  */
-extern void print_recreate_thread (struct breakpoint *b, struct ui_file *fp);
-
-enum watchpoint_triggered
-{
-  /* This watchpoint definitely did not trigger.  */
-  watch_triggered_no = 0,
-
-  /* Some hardware watchpoint triggered, and it might have been this
-     one, but we do not know which it was.  */
-  watch_triggered_unknown,
-
-  /* This hardware watchpoint definitely did trigger.  */
-  watch_triggered_yes  
-};
-
-/* Some targets (e.g., embedded PowerPC) need two debug registers to set
-   a watchpoint over a memory region.  If this flag is true, GDB will use
-   only one register per watchpoint, thus assuming that all accesses that
-   modify a memory location happen at its starting address. */
-
-extern bool target_exact_watchpoints;
-
-/* Note that the ->silent field is not currently used by any commands
-   (though the code is in there if it was to be, and set_raw_breakpoint
-   does set it to 0).  I implemented it because I thought it would be
-   useful for a hack I had to put in; I'm going to leave it in because
-   I can see how there might be times when it would indeed be useful */
-
-/* This is for all kinds of breakpoints.  */
-
-struct breakpoint
-{
-  virtual ~breakpoint ();
-
-  /* Methods associated with this breakpoint.  */
-  const breakpoint_ops *ops = NULL;
+  virtual void after_condition_true (struct bpstat *bs)
+  {
+    /* Nothing to do.  */
+  }
 
-  breakpoint *next = NULL;
   /* Type of breakpoint.  */
   bptype type = bp_none;
   /* Zero means disabled; remember the info but don't break here.  */
@@ -702,9 +803,6 @@ struct breakpoint
   /* Number assigned to distinguish breakpoints.  */
   int number = 0;
 
-  /* Location(s) associated with this high-level breakpoint.  */
-  bp_location *loc = NULL;
-
   /* True means a silent breakpoint (don't print frame info if we stop
      here).  */
   bool silent = false;
@@ -730,44 +828,48 @@ struct breakpoint
      non-thread-specific ordinary breakpoints this is NULL.  */
   program_space *pspace = NULL;
 
-  /* Location we used to set the breakpoint.  */
-  event_location_up location;
+  /* The location specification we used to set the breakpoint.  */
+  location_spec_up locspec;
 
   /* The filter that should be passed to decode_line_full when
      re-setting this breakpoint.  This may be NULL.  */
   gdb::unique_xmalloc_ptr<char> filter;
 
-  /* For a ranged breakpoint, the location we used to find the end of
-     the range.  */
-  event_location_up location_range_end;
+  /* For a ranged breakpoint, the location specification we used to
+     find the end of the range.  */
+  location_spec_up locspec_range_end;
 
   /* Architecture we used to set the breakpoint.  */
-  struct gdbarch *gdbarch = NULL;
+  struct gdbarch *gdbarch;
   /* Language we used to set the breakpoint.  */
-  enum language language = language_unknown;
+  enum language language;
   /* Input radix we used to set the breakpoint.  */
-  int input_radix = 0;
+  int input_radix;
   /* String form of the breakpoint condition (malloc'd), or NULL if
      there is no condition.  */
-  char *cond_string = NULL;
+  gdb::unique_xmalloc_ptr<char> cond_string;
 
   /* String form of extra parameters, or NULL if there are none.
      Malloc'd.  */
-  char *extra_string = NULL;
+  gdb::unique_xmalloc_ptr<char> extra_string;
 
   /* Holds the address of the related watchpoint_scope breakpoint when
      using watchpoints on local variables (might the concept of a
      related breakpoint be useful elsewhere, if not just call it the
      watchpoint_scope breakpoint or something like that.  FIXME).  */
-  breakpoint *related_breakpoint = NULL;
+  breakpoint *related_breakpoint;
 
   /* Thread number for thread-specific breakpoint, or -1 if don't
      care.  */
   int thread = -1;
 
-  /* Ada task number for task-specific breakpoint, or 0 if don't
+  /* Inferior number for inferior-specific breakpoint, or -1 if this
+     breakpoint is for all inferiors.  */
+  int inferior = -1;
+
+  /* Ada task number for task-specific breakpoint, or -1 if don't
      care.  */
-  int task = 0;
+  int task = -1;
 
   /* Count of the number of times this breakpoint was taken, dumped
      with the info, but not used for anything else.  Useful for seeing
@@ -789,19 +891,123 @@ struct breakpoint
 
   /* Same as py_bp_object, but for Scheme.  */
   gdbscm_breakpoint_object *scm_bp_object = NULL;
+
+protected:
+
+  /* Helper for breakpoint_ops->print_recreate implementations.  Prints
+     the "thread" or "task" condition of B, and then a newline.
+
+     Necessary because most breakpoint implementations accept
+     thread/task conditions at the end of the spec line, like "break foo
+     thread 1", which needs outputting before any breakpoint-type
+     specific extra command necessary for B's recreation.  */
+  void print_recreate_thread (struct ui_file *fp) const;
+
+  /* Location(s) associated with this high-level breakpoint.  */
+  bp_location_list m_locations;
+};
+
+/* Abstract base class representing code breakpoints.  User "break"
+   breakpoints, internal and momentary breakpoints, etc.  IOW, any
+   kind of breakpoint whose locations are created from SALs.  */
+struct code_breakpoint : public breakpoint
+{
+  using breakpoint::breakpoint;
+
+  /* Create a breakpoint with SALS as locations.  Use LOCATION as a
+     description of the location, and COND_STRING as condition
+     expression.  If LOCATION is NULL then create an "address
+     location" from the address in the SAL.  */
+  code_breakpoint (struct gdbarch *gdbarch, bptype type,
+		   gdb::array_view<const symtab_and_line> sals,
+		   location_spec_up &&locspec,
+		   gdb::unique_xmalloc_ptr<char> filter,
+		   gdb::unique_xmalloc_ptr<char> cond_string,
+		   gdb::unique_xmalloc_ptr<char> extra_string,
+		   enum bpdisp disposition,
+		   int thread, int task, int inferior, int ignore_count,
+		   int from_tty,
+		   int enabled, unsigned flags,
+		   int display_canonical);
+
+  ~code_breakpoint () override = 0;
+
+  /* Add a location for SAL to this breakpoint.  */
+  bp_location *add_location (const symtab_and_line &sal);
+
+  void re_set () override;
+  int insert_location (struct bp_location *) override;
+  int remove_location (struct bp_location *,
+		       enum remove_bp_reason reason) override;
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace,
+		      CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+
+protected:
+
+  /* Given the location spec, this method decodes it and returns the
+     SAL locations related to it.  For ordinary breakpoints, it calls
+     `decode_line_full'.  If SEARCH_PSPACE is not NULL, symbol search
+     is restricted to just that program space.
+
+     This function is called inside `location_spec_to_sals'.  */
+  virtual std::vector<symtab_and_line> decode_location_spec
+    (location_spec *locspec,
+     struct program_space *search_pspace);
+
+  /* Helper method that does the basic work of re_set.  */
+  void re_set_default ();
+
+  /* Find the SaL locations corresponding to the given LOCATION.
+     On return, FOUND will be 1 if any SaL was found, zero otherwise.  */
+
+  std::vector<symtab_and_line> location_spec_to_sals
+       (location_spec *locspec,
+	struct program_space *search_pspace,
+	int *found);
+
+  /* Helper for breakpoint and tracepoint breakpoint->mention
+     callbacks.  */
+  void say_where () const;
 };
 
-/* An instance of this type is used to represent a watchpoint.  */
+/* An instance of this type is used to represent a watchpoint,
+   a.k.a. a data breakpoint.  */
 
 struct watchpoint : public breakpoint
 {
-  ~watchpoint () override;
+  using breakpoint::breakpoint;
+
+  void re_set () override;
+  int insert_location (struct bp_location *) override;
+  int remove_location (struct bp_location *,
+		       enum remove_bp_reason reason) override;
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace,
+		      CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+  void check_status (struct bpstat *bs) override;
+  int resources_needed (const struct bp_location *) override;
+
+  /* Tell whether we can downgrade from a hardware watchpoint to a software
+     one.  If not, the user will not be able to enable the watchpoint when
+     there are not enough hardware resources available.  */
+  virtual bool works_in_software_mode () const;
+
+  enum print_stop_action print_it (const bpstat *bs) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+  bool explains_signal (enum gdb_signal) override;
+
+  /* Destructor for WATCHPOINT.  */
+  ~watchpoint ();
 
   /* String form of exp to use for displaying to the user (malloc'd),
      or NULL if none.  */
-  char *exp_string;
+  gdb::unique_xmalloc_ptr<char> exp_string;
   /* String form to use for reparsing of EXP (malloc'd) or NULL.  */
-  char *exp_string_reparse;
+  gdb::unique_xmalloc_ptr<char> exp_string_reparse;
 
   /* The expression we are watching, or NULL if not a watchpoint.  */
   expression_up exp;
@@ -849,20 +1055,6 @@ struct watchpoint : public breakpoint
   CORE_ADDR hw_wp_mask;
 };
 
-/* Given a function FUNC (struct breakpoint *B, void *DATA) and
-   USER_DATA, call FUNC for every known breakpoint passing USER_DATA
-   as argument.
-
-   If FUNC returns 1, the loop stops and the current
-   'struct breakpoint' being processed is returned.  If FUNC returns
-   zero, the loop continues.
-
-   This function returns either a 'struct breakpoint' pointer or NULL.
-   It was based on BFD's bfd_sections_find_if function.  */
-
-extern struct breakpoint *breakpoint_find_if
-  (int (*func) (struct breakpoint *b, void *d), void *user_data);
-
 /* Return true if BPT is either a software breakpoint or a hardware
    breakpoint.  */
 
@@ -881,22 +1073,31 @@ extern bool is_exception_catchpoint (bre
 /* An instance of this type is used to represent all kinds of
    tracepoints.  */
 
-struct tracepoint : public breakpoint
+struct tracepoint : public code_breakpoint
 {
+  using code_breakpoint::code_breakpoint;
+
+  int breakpoint_hit (const struct bp_location *bl,
+		      const address_space *aspace, CORE_ADDR bp_addr,
+		      const target_waitstatus &ws) override;
+  void print_one_detail (struct ui_out *uiout) const override;
+  void print_mention () const override;
+  void print_recreate (struct ui_file *fp) const override;
+
   /* Number of times this tracepoint should single-step and collect
      additional data.  */
-  long step_count;
+  long step_count = 0;
 
   /* Number of times this tracepoint should be hit before
      disabling/ending.  */
-  int pass_count;
+  int pass_count = 0;
 
   /* The number of the tracepoint on the target.  */
-  int number_on_target;
+  int number_on_target = 0;
 
   /* The total space taken by all the trace frames for this
      tracepoint.  */
-  ULONGEST traceframe_usage;
+  ULONGEST traceframe_usage = 0;
 
   /* The static tracepoint marker id, if known.  */
   std::string static_trace_marker_id;
@@ -907,7 +1108,18 @@ struct tracepoint : public breakpoint
      the array of markers we found for the given marker ID for which
      this static tracepoint corresponds.  When resetting breakpoints,
      we will use this index to try to find the same marker again.  */
-  int static_trace_marker_id_idx;
+  int static_trace_marker_id_idx = 0;
+};
+
+/* The abstract base class for catchpoints.  */
+
+struct catchpoint : public breakpoint
+{
+  /* If TEMP is true, then make the breakpoint temporary.  If
+     COND_STRING is not NULL, then store it in the breakpoint.  */
+  catchpoint (struct gdbarch *gdbarch, bool temp, const char *cond_string);
+
+  ~catchpoint () override = 0;
 };
 
 
@@ -915,22 +1127,20 @@ struct tracepoint : public breakpoint
    status").  This provides the ability to determine whether we have
    stopped at a breakpoint, and what we should do about it.  */
 
-typedef struct bpstats *bpstat;
-
 /* Clears a chain of bpstat, freeing storage
    of each.  */
-extern void bpstat_clear (bpstat *);
+extern void bpstat_clear (bpstat **);
 
 /* Return a copy of a bpstat.  Like "bs1 = bs2" but all storage that
    is part of the bpstat is copied as well.  */
-extern bpstat bpstat_copy (bpstat);
+extern bpstat *bpstat_copy (bpstat *);
 
 /* Build the (raw) bpstat chain for the stop information given by ASPACE,
    BP_ADDR, and WS.  Returns the head of the bpstat chain.  */
 
-extern bpstat build_bpstat_chain (const address_space *aspace,
+extern bpstat *build_bpstat_chain (const address_space *aspace,
 				  CORE_ADDR bp_addr,
-				  const struct target_waitstatus *ws);
+				  const target_waitstatus &ws);
 
 /* Get a bpstat associated with having just stopped at address
    BP_ADDR in thread PTID.  STOP_CHAIN may be supplied as a previously
@@ -950,13 +1160,31 @@ extern bpstat build_bpstat_chain (const
    several reasons concurrently.)
 
    Each element of the chain has valid next, breakpoint_at,
-   commands, FIXME??? fields.  */
+   commands, FIXME??? fields.
+
+   watchpoints_triggered must be called beforehand to set up each
+   watchpoint's watchpoint_triggered value.
+
+*/
 
-extern bpstat bpstat_stop_status (const address_space *aspace,
+extern bpstat *bpstat_stop_status (const address_space *aspace,
 				  CORE_ADDR pc, thread_info *thread,
-				  const struct target_waitstatus *ws,
-				  bpstat stop_chain = NULL);
+				  const target_waitstatus &ws,
+				  bpstat *stop_chain = nullptr);
+
+/* Like bpstat_stop_status, but clears all watchpoints'
+   watchpoint_triggered flag.  Unlike with bpstat_stop_status, there's
+   no need to call watchpoint_triggered beforehand.  You'll typically
+   use this variant when handling a known-non-watchpoint event, like a
+   fork or exec event.  */
+
+extern bpstat *bpstat_stop_status_nowatch (const address_space *aspace,
+					   CORE_ADDR bp_addr,
+					   thread_info *thread,
+					   const target_waitstatus &ws);
 
+
+
 /* This bpstat_what stuff tells wait_for_inferior what to do with a
    breakpoint (a challenging task).
 
@@ -1053,32 +1281,30 @@ struct bpstat_what
   };
 
 /* Tell what to do about this bpstat.  */
-struct bpstat_what bpstat_what (bpstat);
+struct bpstat_what bpstat_what (bpstat *);
 
 /* Run breakpoint event callbacks associated with the breakpoints that
    triggered.  */
-extern void bpstat_run_callbacks (bpstat bs_head);
+extern void bpstat_run_callbacks (bpstat *bs_head);
 
 /* Find the bpstat associated with a breakpoint.  NULL otherwise.  */
-bpstat bpstat_find_breakpoint (bpstat, struct breakpoint *);
+bpstat *bpstat_find_breakpoint (bpstat *, struct breakpoint *);
 
 /* True if a signal that we got in target_wait() was due to
    circumstances explained by the bpstat; the signal is therefore not
    random.  */
-extern bool bpstat_explains_signal (bpstat, enum gdb_signal);
+extern bool bpstat_explains_signal (bpstat *, enum gdb_signal);
 
 /* True if this bpstat causes a stop.  */
-extern bool bpstat_causes_stop (bpstat);
+extern bool bpstat_causes_stop (bpstat *);
 
 /* True if we should step constantly (e.g. watchpoints on machines
    without hardware support).  This isn't related to a specific bpstat,
    just to things like whether watchpoints are set.  */
 extern bool bpstat_should_step ();
 
-/* Print a message indicating what happened.  Returns nonzero to
-   say that only the source line should be printed after this (zero
-   return means print the frame as well as the source line).  */
-extern enum print_stop_action bpstat_print (bpstat, int);
+/* Print a message indicating what happened.  */
+extern enum print_stop_action bpstat_print (bpstat *bs, target_waitkind kind);
 
 /* Put in *NUM the breakpoint number of the first breakpoint we are
    stopped at.  *BSP upon return is a bpstat which points to the
@@ -1089,7 +1315,21 @@ extern enum print_stop_action bpstat_pri
    Return -1 if stopped at a breakpoint that has been deleted since
    we set it.
    Return 1 otherwise.  */
-extern int bpstat_num (bpstat *, int *);
+extern int bpstat_num (bpstat **, int *);
+
+/* If BS indicates a breakpoint and this breakpoint has several code locations,
+   return the location number of BS, otherwise return 0.  */
+
+extern int bpstat_locno (const bpstat *bs);
+
+/* Print BS breakpoint number optionally followed by a . and breakpoint locno.
+
+   For a breakpoint with only one code location, outputs the signed field
+   "bkptno" breakpoint number of BS (as returned by bpstat_num).
+   If BS has several code locations, outputs a '.' character followed by
+   the signed field "locno" (as returned by bpstat_locno).  */
+
+extern void print_num_locno (const bpstat *bs, struct ui_out *);
 
 /* Perform actions associated with the stopped inferior.  Actually, we
    just use this for breakpoint commands.  Perhaps other actions will
@@ -1120,19 +1360,18 @@ enum bp_print_how
     print_it_done
   };
 
-struct bpstats
+struct bpstat
   {
-    bpstats ();
-    bpstats (struct bp_location *bl, bpstat **bs_link_pointer);
-    ~bpstats ();
+    bpstat ();
+    bpstat (struct bp_location *bl, bpstat ***bs_link_pointer);
 
-    bpstats (const bpstats &);
-    bpstats &operator= (const bpstats &) = delete;
+    bpstat (const bpstat &);
+    bpstat &operator= (const bpstat &) = delete;
 
     /* Linked list because there can be more than one breakpoint at
        the same place, and a bpstat reflects the fact that all have
        been hit.  */
-    bpstat next;
+    bpstat *next;
 
     /* Location that caused the stop.  Locations are refcounted, so
        this will never be NULL.  Note that this location may end up
@@ -1149,7 +1388,7 @@ struct bpstats
        What this means is that we should not (in most cases) follow
        the `bpstat->bp_location->owner' link, but instead use the
        `breakpoint_at' field below.  */
-    struct bp_location *bp_location_at;
+    bp_location_ref_ptr bp_location_at;
 
     /* Breakpoint that caused the stop.  This is nullified if the
        breakpoint ends up being deleted.  See comments on
@@ -1163,11 +1402,11 @@ struct bpstats
     /* Old value associated with a watchpoint.  */
     value_ref_ptr old_val;
 
-    /* Nonzero if this breakpoint tells us to print the frame.  */
-    char print;
+    /* True if this breakpoint tells us to print the frame.  */
+    bool print;
 
-    /* Nonzero if this breakpoint tells us to stop.  */
-    char stop;
+    /* True if this breakpoint tells us to stop.  */
+    bool stop;
 
     /* Tell bpstat_print and print_bp_stop_message how to print stuff
        associated with this element of the bpstat chain.  */
@@ -1194,11 +1433,6 @@ enum breakpoint_here
 
 /* Prototypes for breakpoint-related functions.  */
 
-/* Return 1 if there's a program/permanent breakpoint planted in
-   memory at ADDRESS, return 0 otherwise.  */
-
-extern int program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address);
-
 extern enum breakpoint_here breakpoint_here_p (const address_space *,
 					       CORE_ADDR);
 
@@ -1250,7 +1484,7 @@ extern void until_break_command (const c
 /* Initialize a struct bp_location.  */
 
 extern void update_breakpoint_locations
-  (struct breakpoint *b,
+  (code_breakpoint *b,
    struct program_space *filter_pspace,
    gdb::array_view<const symtab_and_line> sals,
    gdb::array_view<const symtab_and_line> sals_end);
@@ -1283,11 +1517,7 @@ extern void set_ignore_count (int, int,
 
 extern void breakpoint_init_inferior (enum inf_context);
 
-extern void breakpoint_auto_delete (bpstat);
-
-typedef void (*walk_bp_location_callback) (struct bp_location *, void *);
-
-extern void iterate_over_bp_locations (walk_bp_location_callback);
+extern void breakpoint_auto_delete (bpstat *);
 
 /* Return the chain of command lines to execute when this breakpoint
    is hit.  */
@@ -1299,17 +1529,12 @@ const char *bpdisp_text (enum bpdisp dis
 
 extern void break_command (const char *, int);
 
-extern void watch_command_wrapper (const char *, int, int);
-extern void awatch_command_wrapper (const char *, int, int);
-extern void rwatch_command_wrapper (const char *, int, int);
+extern void watch_command_wrapper (const char *, int, bool);
+extern void awatch_command_wrapper (const char *, int, bool);
+extern void rwatch_command_wrapper (const char *, int, bool);
 extern void tbreak_command (const char *, int);
 
-extern struct breakpoint_ops base_breakpoint_ops;
-extern struct breakpoint_ops bkpt_breakpoint_ops;
-extern struct breakpoint_ops tracepoint_breakpoint_ops;
-extern struct breakpoint_ops dprintf_breakpoint_ops;
-
-extern void initialize_breakpoint_ops (void);
+extern const struct breakpoint_ops code_breakpoint_ops;
 
 /* Arguments to pass as context to some catch command handlers.  */
 #define CATCH_PERMANENT ((void *) (uintptr_t) 0)
@@ -1321,45 +1546,30 @@ extern void initialize_breakpoint_ops (v
 
 extern void
   add_catch_command (const char *name, const char *docstring,
-		     cmd_const_sfunc_ftype *sfunc,
+		     cmd_func_ftype *func,
 		     completer_ftype *completer,
 		     void *user_data_catch,
 		     void *user_data_tcatch);
 
-/* Initialize a breakpoint struct for Ada exception catchpoints.  */
-
-extern void
-  init_ada_exception_breakpoint (struct breakpoint *b,
-				 struct gdbarch *gdbarch,
-				 struct symtab_and_line sal,
-				 const char *addr_string,
-				 const struct breakpoint_ops *ops,
-				 int tempflag,
-				 int enabled,
-				 int from_tty);
-
-extern void init_catchpoint (struct breakpoint *b,
-			     struct gdbarch *gdbarch, int tempflag,
-			     const char *cond_string,
-			     const struct breakpoint_ops *ops);
-
 /* Add breakpoint B on the breakpoint list, and notify the user, the
    target and breakpoint_created observers of its existence.  If
    INTERNAL is non-zero, the breakpoint number will be allocated from
    the internal breakpoint count.  If UPDATE_GLL is non-zero,
-   update_global_location_list will be called.  */
+   update_global_location_list will be called.
+
+   Takes ownership of B, and returns a non-owning reference to it.  */
 
-extern void install_breakpoint (int internal, std::unique_ptr<breakpoint> &&b,
-				int update_gll);
+extern breakpoint *install_breakpoint
+  (int internal, std::unique_ptr<breakpoint> &&b, int update_gll);
 
-/* Returns the breakpoint ops appropriate for use with with LOCATION and
-   according to IS_TRACEPOINT.  Use this to ensure, for example, that you pass
-   the correct ops to create_breakpoint for probe locations.  If LOCATION is
-   NULL, returns bkpt_breakpoint_ops (or tracepoint_breakpoint_ops, if
-   IS_TRACEPOINT is true).  */
+/* Returns the breakpoint ops appropriate for use with with LOCSPEC
+   and according to IS_TRACEPOINT.  Use this to ensure, for example,
+   that you pass the correct ops to create_breakpoint for probe
+   location specs.  If LOCSPEC is NULL, returns
+   code_breakpoint_ops.  */
 
-extern const struct breakpoint_ops *breakpoint_ops_for_event_location
-  (const struct event_location *location, bool is_tracepoint);
+extern const struct breakpoint_ops *breakpoint_ops_for_location_spec
+  (const location_spec *locspec, bool is_tracepoint);
 
 /* Flags that can be passed down to create_breakpoint, etc., to affect
    breakpoint creation in several ways.  */
@@ -1371,29 +1581,36 @@ enum breakpoint_create_flags
     CREATE_BREAKPOINT_FLAGS_INSERTED = 1 << 0
   };
 
-/* Set a breakpoint.  This function is shared between CLI and MI functions
-   for setting a breakpoint at LOCATION.
+/* Set a breakpoint.  This function is shared between CLI and MI
+   functions for setting a breakpoint at LOCSPEC.
 
    This function has two major modes of operations, selected by the
    PARSE_EXTRA parameter.
 
-   If PARSE_EXTRA is zero, LOCATION is just the breakpoint's location,
-   with condition, thread, and extra string specified by the COND_STRING,
-   THREAD, and EXTRA_STRING parameters.
+   If PARSE_EXTRA is zero, LOCSPEC is just the breakpoint's location
+   spec, with condition, thread, and extra string specified by the
+   COND_STRING, THREAD, and EXTRA_STRING parameters.
 
    If PARSE_EXTRA is non-zero, this function will attempt to extract
    the condition, thread, and extra string from EXTRA_STRING, ignoring
    the similarly named parameters.
 
+   If FORCE_CONDITION is true, the condition is accepted even when it is
+   invalid at all of the locations.  However, if PARSE_EXTRA is non-zero,
+   the FORCE_CONDITION parameter is ignored and the corresponding argument
+   is parsed from EXTRA_STRING.
+
    If INTERNAL is non-zero, the breakpoint number will be allocated
    from the internal breakpoint count.
 
    Returns true if any breakpoint was created; false otherwise.  */
 
 extern int create_breakpoint (struct gdbarch *gdbarch,
-			      const struct event_location *location,
+			      struct location_spec *locspec,
 			      const char *cond_string, int thread,
+			      int inferior,
 			      const char *extra_string,
+			      bool force_condition,
 			      int parse_extra,
 			      int tempflag, enum bptype wanted_type,
 			      int ignore_count,
@@ -1528,15 +1745,30 @@ extern void breakpoint_set_commands (str
 
 extern void breakpoint_set_silent (struct breakpoint *b, int silent);
 
+/* Set the thread for this breakpoint.  If THREAD is -1, make the
+   breakpoint work for any thread.  Passing a value other than -1 for
+   THREAD should only be done if b->task is 0; it is not valid to try and
+   set both a thread and task restriction on a breakpoint.  */
+
 extern void breakpoint_set_thread (struct breakpoint *b, int thread);
 
+/* Set the inferior for breakpoint B to INFERIOR.  If INFERIOR is -1, make
+   the breakpoint work for any inferior.  */
+
+extern void breakpoint_set_inferior (struct breakpoint *b, int inferior);
+
+/* Set the task for this breakpoint.  If TASK is -1, make the breakpoint
+   work for any task.  Passing a value other than -1 for TASK should only
+   be done if b->thread is -1; it is not valid to try and set both a thread
+   and task restriction on a breakpoint.  */
+
 extern void breakpoint_set_task (struct breakpoint *b, int task);
 
 /* Clear the "inserted" flag in all breakpoints.  */
 extern void mark_breakpoints_out (void);
 
 extern struct breakpoint *create_jit_event_breakpoint (struct gdbarch *,
-                                                       CORE_ADDR);
+						       CORE_ADDR);
 
 extern struct breakpoint *create_solib_event_breakpoint (struct gdbarch *,
 							 CORE_ADDR);
@@ -1566,9 +1798,14 @@ extern void disable_breakpoints_in_shlib
 extern bool is_catchpoint (struct breakpoint *b);
 
 /* Shared helper function (MI and CLI) for creating and installing
-   a shared object event catchpoint.  */
-extern void add_solib_catchpoint (const char *arg, int is_load, int is_temp,
-                                  int enabled);
+   a shared object event catchpoint.  If IS_LOAD is true then
+   the events to be caught are load events, otherwise they are
+   unload events.  If IS_TEMP is true the catchpoint is a
+   temporary one.  If ENABLED is true the catchpoint is
+   created in an enabled state.  */
+
+extern void add_solib_catchpoint (const char *arg, bool is_load, bool is_temp,
+				  bool enabled);
 
 /* Create and insert a new software single step breakpoint for the
    current thread.  May be called multiple times; each time will add a
@@ -1583,9 +1820,10 @@ extern void insert_single_step_breakpoin
    otherwise, return false.  */
 extern int insert_single_step_breakpoints (struct gdbarch *);
 
-/* Check if any hardware watchpoints have triggered, according to the
-   target.  */
-int watchpoints_triggered (struct target_waitstatus *);
+/* Check whether any hardware watchpoints have triggered or not,
+   according to the target, and record it in each watchpoint's
+   'watchpoint_triggered' field.  */
+int watchpoints_triggered (const target_waitstatus &);
 
 /* Helper for transparent breakpoint hiding for memory read and write
    routines.
@@ -1616,18 +1854,27 @@ extern int breakpoints_should_be_inserte
    in our opinion won't ever trigger.  */
 extern void breakpoint_retire_moribund (void);
 
-/* Set break condition of breakpoint B to EXP.  */
+/* Set break condition of breakpoint B to EXP.
+   If FORCE, define the condition even if it is invalid in
+   all of the breakpoint locations.  */
 extern void set_breakpoint_condition (struct breakpoint *b, const char *exp,
-				      int from_tty);
+				      int from_tty, bool force);
 
-/* Checks if we are catching syscalls or not.
-   Returns 0 if not, greater than 0 if we are.  */
-extern int catch_syscall_enabled (void);
+/* Set break condition for the breakpoint with number BPNUM to EXP.
+   Raise an error if no breakpoint with the given number is found.
+   Also raise an error if the breakpoint already has stop conditions.
+   If FORCE, define the condition even if it is invalid in
+   all of the breakpoint locations.  */
+extern void set_breakpoint_condition (int bpnum, const char *exp,
+				      int from_tty, bool force);
+
+/* Checks if we are catching syscalls or not.  */
+extern bool catch_syscall_enabled ();
 
 /* Checks if we are catching syscalls with the specific
    syscall_number.  Used for "filtering" the catchpoints.
-   Returns 0 if not, greater than 0 if we are.  */
-extern int catching_syscall_number (int syscall_number);
+   Returns false if not, true if we are.  */
+extern bool catching_syscall_number (int syscall_number);
 
 /* Return a tracepoint with the given number if found.  */
 extern struct tracepoint *get_tracepoint (int num);
@@ -1639,9 +1886,6 @@ extern struct tracepoint *
   get_tracepoint_by_number (const char **arg,
 			    number_or_range_parser *parser);
 
-/* Return a vector of all tracepoints currently defined.  */
-extern std::vector<breakpoint *> all_tracepoints (void);
-
 /* Return true if B is of tracepoint kind.  */
 
 extern bool is_tracepoint (const struct breakpoint *b);
@@ -1662,23 +1906,61 @@ public:
   DISABLE_COPY_AND_ASSIGN (scoped_rbreak_breakpoints);
 };
 
-/* Breakpoint iterator function.
+/* Breakpoint linked list iterator.  */
+
+using breakpoint_list = intrusive_list<breakpoint>;
+
+using breakpoint_iterator = breakpoint_list::iterator;
+
+/* Breakpoint linked list range.  */
+
+using breakpoint_range = iterator_range<breakpoint_iterator>;
+
+/* Return a range to iterate over all breakpoints.  */
+
+breakpoint_range all_breakpoints ();
+
+/* Breakpoint linked list range, safe against deletion of the current
+   breakpoint while iterating.  */
+
+using breakpoint_safe_range = basic_safe_range<breakpoint_range>;
+
+/* Return a range to iterate over all breakpoints.  This range is safe against
+   deletion of the current breakpoint while iterating.  */
+
+breakpoint_safe_range all_breakpoints_safe ();
+
+/* Breakpoint filter to only keep tracepoints.  */
+
+struct tracepoint_filter
+{
+  bool operator() (breakpoint &b)
+  { return is_tracepoint (&b); }
+};
+
+/* Breakpoint linked list iterator, filtering to only keep tracepoints.  */
+
+using tracepoint_iterator
+  = filtered_iterator<breakpoint_iterator, tracepoint_filter>;
+
+/* Breakpoint linked list range, filtering to only keep tracepoints.  */
 
-   Calls a callback function once for each breakpoint, so long as the
-   callback function returns false.  If the callback function returns
-   true, the iteration will end and the current breakpoint will be
-   returned.  This can be useful for implementing a search for a
-   breakpoint with arbitrary attributes, or for applying an operation
-   to every breakpoint.  */
-extern struct breakpoint *iterate_over_breakpoints
-  (gdb::function_view<bool (breakpoint *)>);
+using tracepoint_range = iterator_range<tracepoint_iterator>;
+
+/* Return a range to iterate over all tracepoints.  */
+
+tracepoint_range all_tracepoints ();
+
+/* Return a range to iterate over all breakpoint locations.  */
+
+const std::vector<bp_location *> &all_bp_locations ();
 
 /* Nonzero if the specified PC cannot be a location where functions
    have been inlined.  */
 
 extern int pc_at_non_inline_function (const address_space *aspace,
 				      CORE_ADDR pc,
-				      const struct target_waitstatus *ws);
+				      const target_waitstatus &ws);
 
 extern int user_breakpoint_p (struct breakpoint *);
 
@@ -1707,6 +1989,11 @@ extern cmd_list_element *commands_cmd_el
 
 extern bool fix_multi_location_breakpoint_output_globally;
 
+/* Whether to use the fixed output when printing information about
+   commands attached to a breakpoint.  */
+
+extern bool fix_breakpoint_script_output_globally;
+
 /* Deal with "catch catch", "catch throw", and "catch rethrow" commands and
    the MI equivalents.  Sets up to catch events of type EX_EVENT.  When
    TEMPFLAG is true only the next matching event is caught after which the
@@ -1717,4 +2004,28 @@ extern void catch_exception_event (enum
 				   const char *regex, bool tempflag,
 				   int from_tty);
 
+/* A helper function that prints a shared library stopped event.
+   IS_CATCHPOINT is true if the event is due to a "catch load"
+   catchpoint, false otherwise.  */
+
+extern void print_solib_event (bool is_catchpoint);
+
+/* Print a message describing any user-breakpoints set at PC.  This
+   concerns with logical breakpoints, so we match program spaces, not
+   address spaces.  */
+
+extern void describe_other_breakpoints (struct gdbarch *,
+					struct program_space *, CORE_ADDR,
+					struct obj_section *, int);
+
+/* Enable or disable a breakpoint location LOC.  ENABLE
+   specifies whether to enable or disable.  */
+
+extern void enable_disable_bp_location (bp_location *loc, bool enable);
+
+
+/* Notify interpreters and observers that breakpoint B was modified.  */
+
+extern void notify_breakpoint_modified (breakpoint *b);
+
 #endif /* !defined (BREAKPOINT_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bsd-kvm.c ./gdb/bsd-kvm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bsd-kvm.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bsd-kvm.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* BSD Kernel Data Access Library (libkvm) interface.
 
-   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Copyright (C) 2004-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,14 +21,17 @@
 #include "defs.h"
 #include "cli/cli-cmds.h"
 #include "command.h"
+#include "filenames.h"
 #include "frame.h"
 #include "regcache.h"
 #include "target.h"
 #include "process-stratum-target.h"
 #include "value.h"
 #include "gdbcore.h"
-#include "inferior.h"          /* for get_exec_file */
+#include "inferior.h"
 #include "gdbthread.h"
+#include "gdbsupport/pathstuff.h"
+#include "gdbsupport/gdb_tilde_expand.h"
 
 #include <fcntl.h>
 #include <kvm.h>
@@ -46,7 +49,7 @@
 #include "bsd-kvm.h"
 
 /* Kernel memory device file.  */
-static const char *bsd_kvm_corefile;
+static std::string bsd_kvm_corefile;
 
 /* Kernel memory interface descriptor.  */
 static kvm_t *core_kd;
@@ -106,40 +109,34 @@ static void
 bsd_kvm_target_open (const char *arg, int from_tty)
 {
   char errbuf[_POSIX2_LINE_MAX];
-  char *execfile = NULL;
+  const char *execfile = NULL;
   kvm_t *temp_kd;
-  char *filename = NULL;
+  std::string filename;
 
   target_preopen (from_tty);
 
   if (arg)
     {
-      char *temp;
-
-      filename = tilde_expand (arg);
-      if (filename[0] != '/')
-	{
-	  temp = concat (current_directory, "/", filename, (char *)NULL);
-	  xfree (filename);
-	  filename = temp;
-	}
+      filename = gdb_tilde_expand (arg);
+      if (!IS_ABSOLUTE_PATH (filename))
+	filename = gdb_abspath (filename.c_str ());
     }
 
   execfile = get_exec_file (0);
-  temp_kd = kvm_openfiles (execfile, filename, NULL,
+  temp_kd = kvm_openfiles (execfile, filename.c_str (), NULL,
 			   write_files ? O_RDWR : O_RDONLY, errbuf);
   if (temp_kd == NULL)
     error (("%s"), errbuf);
 
   bsd_kvm_corefile = filename;
-  unpush_target (&bsd_kvm_ops);
+  current_inferior ()->unpush_target (&bsd_kvm_ops);
   core_kd = temp_kd;
-  push_target (&bsd_kvm_ops);
+  current_inferior ()->push_target (&bsd_kvm_ops);
 
-  add_thread_silent (bsd_kvm_ptid);
-  inferior_ptid = bsd_kvm_ptid;
+  thread_info *thr = add_thread_silent (&bsd_kvm_ops, bsd_kvm_ptid);
+  switch_to_thread (thr);
 
-  target_fetch_registers (get_current_regcache (), -1);
+  target_fetch_registers (get_thread_regcache (thr), -1);
 
   reinit_frame_cache ();
   print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC, 1);
@@ -155,8 +152,9 @@ bsd_kvm_target::close ()
       core_kd = NULL;
     }
 
-  inferior_ptid = null_ptid;
-  discard_all_inferiors ();
+  bsd_kvm_corefile.clear ();
+  switch_to_no_thread ();
+  exit_inferior (current_inferior ());
 }
 
 static LONGEST
@@ -203,11 +201,11 @@ bsd_kvm_target::xfer_partial (enum targe
 void
 bsd_kvm_target::files_info ()
 {
-  if (bsd_kvm_corefile && strcmp (bsd_kvm_corefile, _PATH_MEM) != 0)
-    printf_filtered (_("\tUsing the kernel crash dump %s.\n"),
-		     bsd_kvm_corefile);
+  if (bsd_kvm_corefile != _PATH_MEM)
+    gdb_printf (_("\tUsing the kernel crash dump %s.\n"),
+		bsd_kvm_corefile.c_str ());
   else
-    printf_filtered (_("\tUsing the currently running kernel.\n"));
+    gdb_printf (_("\tUsing the currently running kernel.\n"));
 }
 
 /* Fetch process control block at address PADDR.  */
@@ -238,7 +236,7 @@ bsd_kvm_target::fetch_registers (struct
   /* On dumping core, BSD kernels store the faulting context (PCB)
      in the variable "dumppcb".  */
   memset (nl, 0, sizeof nl);
-  nl[0].n_name = "_dumppcb";
+  nl[0].n_name = (char *) "_dumppcb";
 
   if (kvm_nlist (core_kd, nl) == -1)
     error (("%s"), kvm_geterr (core_kd));
@@ -256,7 +254,7 @@ bsd_kvm_target::fetch_registers (struct
      "proc0paddr".  */
 
   memset (nl, 0, sizeof nl);
-  nl[0].n_name = "_proc0paddr";
+  nl[0].n_name = (char *) "_proc0paddr";
 
   if (kvm_nlist (core_kd, nl) == -1)
     error (("%s"), kvm_geterr (core_kd));
@@ -280,7 +278,7 @@ bsd_kvm_target::fetch_registers (struct
      variable "thread0".  */
 
   memset (nl, 0, sizeof nl);
-  nl[0].n_name = "_thread0";
+  nl[0].n_name = (char *) "_thread0";
 
   if (kvm_nlist (core_kd, nl) == -1)
     error (("%s"), kvm_geterr (core_kd));
@@ -336,7 +334,7 @@ bsd_kvm_proc_cmd (const char *arg, int f
   if (kvm_read (core_kd, addr, &bsd_kvm_paddr, sizeof bsd_kvm_paddr) == -1)
     error (("%s"), kvm_geterr (core_kd));
 
-  target_fetch_registers (get_current_regcache (), -1);
+  target_fetch_registers (get_thread_regcache (inferior_thread ()), -1);
 
   reinit_frame_cache ();
   print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC, 1);
@@ -356,7 +354,7 @@ bsd_kvm_pcb_cmd (const char *arg, int fr
 
   bsd_kvm_paddr = (struct pcb *)(u_long) parse_and_eval_address (arg);
 
-  target_fetch_registers (get_current_regcache (), -1);
+  target_fetch_registers (get_thread_regcache (inferior_thread ()), -1);
 
   reinit_frame_cache ();
   print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC, 1);
@@ -388,7 +386,7 @@ bsd_kvm_add_target (int (*supply_pcb)(st
   
   add_prefix_cmd ("kvm", class_obscure, bsd_kvm_cmd, _("\
 Generic command for manipulating the kernel memory interface."),
-		  &bsd_kvm_cmdlist, "kvm ", 0, &cmdlist);
+		  &bsd_kvm_cmdlist, 0, &cmdlist);
 
 #ifndef HAVE_STRUCT_THREAD_TD_PCB
   add_cmd ("proc", class_obscure, bsd_kvm_proc_cmd,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bsd-kvm.h ./gdb/bsd-kvm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bsd-kvm.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bsd-kvm.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* BSD Kernel Data Access Library (libkvm) interface.
 
-   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Copyright (C) 2004-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bsd-uthread.c ./gdb/bsd-uthread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bsd-uthread.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bsd-uthread.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* BSD user-level threads support.
 
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,7 +29,7 @@
 #include "symfile.h"
 #include "target.h"
 
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 
 #include "bsd-uthread.h"
 
@@ -53,7 +53,7 @@ struct bsd_uthread_target final : public
   void fetch_registers (struct regcache *, int) override;
   void store_registers (struct regcache *, int) override;
 
-  ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
+  ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
   void resume (ptid_t, int, enum gdb_signal) override;
 
   bool thread_alive (ptid_t ptid) override;
@@ -70,24 +70,24 @@ static bsd_uthread_target bsd_uthread_op
 
 /* Architecture-specific operations.  */
 
-/* Per-architecture data key.  */
-static struct gdbarch_data *bsd_uthread_data;
-
 struct bsd_uthread_ops
 {
   /* Supply registers for an inactive thread to a register cache.  */
-  void (*supply_uthread)(struct regcache *, int, CORE_ADDR);
+  void (*supply_uthread)(struct regcache *, int, CORE_ADDR) = nullptr;
 
   /* Collect registers for an inactive thread from a register cache.  */
-  void (*collect_uthread)(const struct regcache *, int, CORE_ADDR);
+  void (*collect_uthread)(const struct regcache *, int, CORE_ADDR) = nullptr;
 };
 
-static void *
-bsd_uthread_init (struct obstack *obstack)
-{
-  struct bsd_uthread_ops *ops;
+/* Per-architecture data key.  */
+static const registry<gdbarch>::key<struct bsd_uthread_ops> bsd_uthread_data;
 
-  ops = OBSTACK_ZALLOC (obstack, struct bsd_uthread_ops);
+static struct bsd_uthread_ops *
+get_bsd_uthread (struct gdbarch *gdbarch)
+{
+  struct bsd_uthread_ops *ops = bsd_uthread_data.get (gdbarch);
+  if (ops == nullptr)
+    ops = bsd_uthread_data.emplace (gdbarch);
   return ops;
 }
 
@@ -99,8 +99,7 @@ bsd_uthread_set_supply_uthread (struct g
 				void (*supply_uthread) (struct regcache *,
 							int, CORE_ADDR))
 {
-  struct bsd_uthread_ops *ops
-    = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
+  struct bsd_uthread_ops *ops = get_bsd_uthread (gdbarch);
 
   ops->supply_uthread = supply_uthread;
 }
@@ -113,8 +112,7 @@ bsd_uthread_set_collect_uthread (struct
 			 void (*collect_uthread) (const struct regcache *,
 						  int, CORE_ADDR))
 {
-  struct bsd_uthread_ops *ops
-    = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
+  struct bsd_uthread_ops *ops = get_bsd_uthread (gdbarch);
 
   ops->collect_uthread = collect_uthread;
 }
@@ -127,7 +125,7 @@ bsd_uthread_set_collect_uthread (struct
 static void
 bsd_uthread_check_magic (CORE_ADDR addr)
 {
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
+  bfd_endian byte_order = gdbarch_byte_order (current_inferior ()->arch ());
   ULONGEST magic = read_memory_unsigned_integer (addr, 4, byte_order);
 
   if (magic != BSD_UTHREAD_PTHREAD_MAGIC)
@@ -151,9 +149,9 @@ static int bsd_uthread_thread_next_offse
 static int bsd_uthread_thread_ctx_offset;
 
 /* Name of shared threads library.  */
-static const char *bsd_uthread_solib_name;
+static std::string bsd_uthread_solib_name;
 
-/* Non-zero if the thread startum implemented by this module is active.  */
+/* Non-zero if the thread stratum implemented by this module is active.  */
 static int bsd_uthread_active;
 
 static CORE_ADDR
@@ -163,7 +161,7 @@ bsd_uthread_lookup_address (const char *
 
   sym = lookup_minimal_symbol (name, NULL, objfile);
   if (sym.minsym)
-    return BMSYMBOL_VALUE_ADDRESS (sym);
+    return sym.value_address ();
 
   return 0;
 }
@@ -171,7 +169,7 @@ bsd_uthread_lookup_address (const char *
 static int
 bsd_uthread_lookup_offset (const char *name, struct objfile *objfile)
 {
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
+  bfd_endian byte_order = gdbarch_byte_order (current_inferior ()->arch ());
   CORE_ADDR addr;
 
   addr = bsd_uthread_lookup_address (name, objfile);
@@ -184,7 +182,8 @@ bsd_uthread_lookup_offset (const char *n
 static CORE_ADDR
 bsd_uthread_read_memory_address (CORE_ADDR addr)
 {
-  struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
+  type *ptr_type
+    = builtin_type (current_inferior ()->arch ())->builtin_data_ptr;
   return read_memory_typed_address (addr, ptr_type);
 }
 
@@ -195,9 +194,8 @@ bsd_uthread_read_memory_address (CORE_AD
 static int
 bsd_uthread_activate (struct objfile *objfile)
 {
-  struct gdbarch *gdbarch = target_gdbarch ();
-  struct bsd_uthread_ops *ops
-    = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
+  gdbarch *gdbarch = current_inferior ()->arch ();
+  struct bsd_uthread_ops *ops = get_bsd_uthread (gdbarch);
 
   /* Skip if the thread stratum has already been activated.  */
   if (bsd_uthread_active)
@@ -231,7 +229,7 @@ bsd_uthread_activate (struct objfile *ob
   bsd_uthread_thread_ctx_offset =
     bsd_uthread_lookup_offset ("_thread_ctx_offset", objfile);
 
-  push_target (&bsd_uthread_ops);
+  current_inferior ()->push_target (&bsd_uthread_ops);
   bsd_uthread_active = 1;
   return 1;
 }
@@ -247,7 +245,7 @@ bsd_uthread_target::close ()
   bsd_uthread_thread_state_offset = 0;
   bsd_uthread_thread_next_offset = 0;
   bsd_uthread_thread_ctx_offset = 0;
-  bsd_uthread_solib_name = NULL;
+  bsd_uthread_solib_name.clear ();
 }
 
 /* Deactivate the thread stratum implemented by this module.  */
@@ -259,17 +257,17 @@ bsd_uthread_deactivate (void)
   if (!bsd_uthread_active)
     return;
 
-  unpush_target (&bsd_uthread_ops);
+  current_inferior ()->unpush_target (&bsd_uthread_ops);
 }
 
 static void
-bsd_uthread_inferior_created (struct target_ops *ops, int from_tty)
+bsd_uthread_inferior_created (inferior *inf)
 {
   bsd_uthread_activate (NULL);
 }
 
 /* Likely candidates for the threads library.  */
-static const char *bsd_uthread_solib_names[] =
+static const char * const bsd_uthread_solib_names[] =
 {
   "/usr/lib/libc_r.so",		/* FreeBSD */
   "/usr/lib/libpthread.so",	/* OpenBSD */
@@ -277,19 +275,19 @@ static const char *bsd_uthread_solib_nam
 };
 
 static void
-bsd_uthread_solib_loaded (struct so_list *so)
+bsd_uthread_solib_loaded (shobj &so)
 {
-  const char **names = bsd_uthread_solib_names;
+  const char * const *names = bsd_uthread_solib_names;
 
   for (names = bsd_uthread_solib_names; *names; names++)
     {
-      if (startswith (so->so_original_name, *names))
+      if (startswith (so.so_original_name, *names))
 	{
 	  solib_read_symbols (so, 0);
 
-	  if (bsd_uthread_activate (so->objfile))
+	  if (bsd_uthread_activate (so.objfile))
 	    {
-	      bsd_uthread_solib_name = so->so_original_name;
+	      bsd_uthread_solib_name = so.so_original_name;
 	      return;
 	    }
 	}
@@ -297,12 +295,12 @@ bsd_uthread_solib_loaded (struct so_list
 }
 
 static void
-bsd_uthread_solib_unloaded (struct so_list *so)
+bsd_uthread_solib_unloaded (program_space *pspace, const shobj &so)
 {
-  if (!bsd_uthread_solib_name)
+  if (bsd_uthread_solib_name.empty ())
     return;
 
-  if (strcmp (so->so_original_name, bsd_uthread_solib_name) == 0)
+  if (so.so_original_name == bsd_uthread_solib_name)
     bsd_uthread_deactivate ();
 }
 
@@ -317,8 +315,7 @@ void
 bsd_uthread_target::fetch_registers (struct regcache *regcache, int regnum)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct bsd_uthread_ops *uthread_ops
-    = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
+  struct bsd_uthread_ops *uthread_ops = get_bsd_uthread (gdbarch);
   ptid_t ptid = regcache->ptid ();
   CORE_ADDR addr = ptid.tid ();
   CORE_ADDR active_addr;
@@ -349,8 +346,7 @@ void
 bsd_uthread_target::store_registers (struct regcache *regcache, int regnum)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct bsd_uthread_ops *uthread_ops
-    = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
+  struct bsd_uthread_ops *uthread_ops = get_bsd_uthread (gdbarch);
   ptid_t ptid = regcache->ptid ();
   CORE_ADDR addr = ptid.tid ();
   CORE_ADDR active_addr;
@@ -370,25 +366,27 @@ bsd_uthread_target::store_registers (str
   else
     {
       /* Updating the thread that is currently running; pass the
-         request to the layer beneath.  */
+	 request to the layer beneath.  */
       beneath ()->store_registers (regcache, regnum);
     }
 }
 
 ptid_t
 bsd_uthread_target::wait (ptid_t ptid, struct target_waitstatus *status,
-			  int options)
+			  target_wait_flags options)
 {
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
+  bfd_endian byte_order = gdbarch_byte_order (current_inferior ()->arch ());
   CORE_ADDR addr;
+  process_stratum_target *beneath
+    = as_process_stratum_target (this->beneath ());
 
   /* Pass the request to the layer beneath.  */
-  ptid = beneath ()->wait (ptid, status, options);
+  ptid = beneath->wait (ptid, status, options);
 
   /* If the process is no longer alive, there's no point in figuring
      out the thread ID.  It will fail anyway.  */
-  if (status->kind == TARGET_WAITKIND_SIGNALLED
-      || status->kind == TARGET_WAITKIND_EXITED)
+  if (status->kind () == TARGET_WAITKIND_SIGNALLED
+      || status->kind () == TARGET_WAITKIND_EXITED)
     return ptid;
 
   /* Fetch the corresponding thread ID, and augment the returned
@@ -399,9 +397,9 @@ bsd_uthread_target::wait (ptid_t ptid, s
       gdb_byte buf[4];
 
       /* FIXME: For executables linked statically with the threads
-         library, we end up here before the program has actually been
-         executed.  In that case ADDR will be garbage since it has
-         been read from the wrong virtual memory image.  */
+	 library, we end up here before the program has actually been
+	 executed.  In that case ADDR will be garbage since it has
+	 been read from the wrong virtual memory image.  */
       if (target_read_memory (addr, buf, 4) == 0)
 	{
 	  ULONGEST magic = extract_unsigned_integer (buf, 4, byte_order);
@@ -414,13 +412,13 @@ bsd_uthread_target::wait (ptid_t ptid, s
      ptid with tid set, then ptid is still the initial thread of
      the process.  Notify GDB core about it.  */
   if (inferior_ptid.tid () == 0
-      && ptid.tid () != 0 && !in_thread_list (ptid))
-    thread_change_ptid (inferior_ptid, ptid);
+      && ptid.tid () != 0 && !in_thread_list (beneath, ptid))
+    thread_change_ptid (beneath, inferior_ptid, ptid);
 
   /* Don't let the core see a ptid without a corresponding thread.  */
-  thread_info *thread = find_thread_ptid (ptid);
+  thread_info *thread = beneath->find_thread (ptid);
   if (thread == NULL || thread->state == THREAD_EXITED)
-    add_thread (ptid);
+    add_thread (beneath, ptid);
 
   return ptid;
 }
@@ -435,7 +433,7 @@ bsd_uthread_target::resume (ptid_t ptid,
 bool
 bsd_uthread_target::thread_alive (ptid_t ptid)
 {
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
+  bfd_endian byte_order = gdbarch_byte_order (current_inferior ()->arch ());
   CORE_ADDR addr = ptid.tid ();
 
   if (addr != 0)
@@ -467,16 +465,18 @@ bsd_uthread_target::update_thread_list (
     {
       ptid_t ptid = ptid_t (pid, 0, addr);
 
-      thread_info *thread = find_thread_ptid (ptid);
+      process_stratum_target *proc_target
+	= as_process_stratum_target (this->beneath ());
+      thread_info *thread = proc_target->find_thread (ptid);
       if (thread == nullptr || thread->state == THREAD_EXITED)
 	{
 	  /* If INFERIOR_PTID doesn't have a tid member yet, then ptid
 	     is still the initial thread of the process.  Notify GDB
 	     core about it.  */
 	  if (inferior_ptid.tid () == 0)
-	    thread_change_ptid (inferior_ptid, ptid);
+	    thread_change_ptid (proc_target, inferior_ptid, ptid);
 	  else
-	    add_thread (ptid);
+	    add_thread (proc_target, ptid);
 	}
 
       addr = bsd_uthread_read_memory_address (addr + offset);
@@ -484,7 +484,7 @@ bsd_uthread_target::update_thread_list (
 }
 
 /* Possible states a thread can be in.  */
-static const char *bsd_uthread_state[] =
+static const char * const bsd_uthread_state[] =
 {
   "RUNNING",
   "SIGTHREAD",
@@ -514,7 +514,7 @@ static const char *bsd_uthread_state[] =
 const char *
 bsd_uthread_target::extra_thread_info (thread_info *info)
 {
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
+  bfd_endian byte_order = gdbarch_byte_order (current_inferior ()->arch ());
   CORE_ADDR addr = info->ptid.tid ();
 
   if (addr != 0)
@@ -534,18 +534,21 @@ std::string
 bsd_uthread_target::pid_to_str (ptid_t ptid)
 {
   if (ptid.tid () != 0)
-    return string_printf ("process %d, thread 0x%lx",
-			  ptid.pid (), ptid.tid ());
+    return string_printf ("process %d, thread 0x%s",
+			  ptid.pid (),
+			  phex_nz (ptid.tid (), sizeof (ULONGEST)));
 
   return normal_pid_to_str (ptid);
 }
 
+void _initialize_bsd_uthread ();
 void
-_initialize_bsd_uthread (void)
+_initialize_bsd_uthread ()
 {
-  bsd_uthread_data = gdbarch_data_register_pre_init (bsd_uthread_init);
-
-  gdb::observers::inferior_created.attach (bsd_uthread_inferior_created);
-  gdb::observers::solib_loaded.attach (bsd_uthread_solib_loaded);
-  gdb::observers::solib_unloaded.attach (bsd_uthread_solib_unloaded);
+  gdb::observers::inferior_created.attach (bsd_uthread_inferior_created,
+					   "bsd-uthread");
+  gdb::observers::solib_loaded.attach (bsd_uthread_solib_loaded,
+				       "bsd-uthread");
+  gdb::observers::solib_unloaded.attach (bsd_uthread_solib_unloaded,
+					 "bsd-uthread");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bsd-uthread.h ./gdb/bsd-uthread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bsd-uthread.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/bsd-uthread.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* BSD user-level threads support.
 
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/btrace.c ./gdb/btrace.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/btrace.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/btrace.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Branch trace support for GDB, the GNU debugger.
 
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2024 Free Software Foundation, Inc.
 
    Contributed by Intel Corp. <markus.t.metzger@intel.com>
 
@@ -29,7 +29,6 @@
 #include "disasm.h"
 #include "source.h"
 #include "filenames.h"
-#include "xml-support.h"
 #include "regcache.h"
 #include "gdbsupport/rsp-low.h"
 #include "gdbcmd.h"
@@ -62,8 +61,8 @@ static void btrace_add_pc (struct thread
   do									\
     {									\
       if (record_debug != 0)						\
-        fprintf_unfiltered (gdb_stdlog,					\
-			    "[btrace] " msg "\n", ##args);		\
+	gdb_printf (gdb_stdlog,						\
+		    "[btrace] " msg "\n", ##args);			\
     }									\
   while (0)
 
@@ -102,7 +101,7 @@ ftrace_print_filename (const struct btra
   sym = bfun->sym;
 
   if (sym != NULL)
-    filename = symtab_to_filename_for_display (symbol_symtab (sym));
+    filename = symtab_to_filename_for_display (sym->symtab ());
   else
     filename = "<unknown>";
 
@@ -210,8 +209,8 @@ ftrace_function_switched (const struct b
 	return 1;
 
       /* Check the location of those functions, as well.  */
-      bfname = symtab_to_fullname (symbol_symtab (sym));
-      fname = symtab_to_fullname (symbol_symtab (fun));
+      bfname = symtab_to_fullname (sym->symtab ());
+      fname = symtab_to_fullname (fun->symtab ());
       if (filename_cmp (fname, bfname) != 0)
 	return 1;
     }
@@ -265,7 +264,7 @@ ftrace_new_function (struct btrace_threa
 static void
 ftrace_update_caller (struct btrace_function *bfun,
 		      struct btrace_function *caller,
-		      enum btrace_function_flag flags)
+		      btrace_function_flags flags)
 {
   if (bfun->up != 0)
     ftrace_debug (bfun, "updating caller");
@@ -283,7 +282,7 @@ static void
 ftrace_fixup_caller (struct btrace_thread_info *btinfo,
 		     struct btrace_function *bfun,
 		     struct btrace_function *caller,
-		     enum btrace_function_flag flags)
+		     btrace_function_flags flags)
 {
   unsigned int prev, next;
 
@@ -1052,12 +1051,17 @@ btrace_compute_ftrace_bts (struct thread
 			   const struct btrace_data_bts *btrace,
 			   std::vector<unsigned int> &gaps)
 {
+ /* We may end up doing target calls that require the current thread to be TP,
+    for example reading memory through gdb_insn_length.  Make sure TP is the
+    current thread.  */
+  scoped_restore_current_thread restore_thread;
+  switch_to_thread (tp);
+
   struct btrace_thread_info *btinfo;
-  struct gdbarch *gdbarch;
   unsigned int blk;
   int level;
 
-  gdbarch = target_gdbarch ();
+  gdbarch *gdbarch = current_inferior ()->arch ();
   btinfo = &tp->btrace;
   blk = btrace->blocks->size ();
 
@@ -1222,6 +1226,9 @@ handle_pt_insn_events (struct btrace_thr
 	  break;
 
 	case ptev_enabled:
+	  if (event.status_update != 0)
+	    break;
+
 	  if (event.variant.enabled.resumed == 0 && !btinfo->functions.empty ())
 	    {
 	      bfun = ftrace_new_gap (btinfo, BDE_PT_DISABLED, gaps);
@@ -1424,6 +1431,12 @@ btrace_compute_ftrace_pt (struct thread_
 			  const struct btrace_data_pt *btrace,
 			  std::vector<unsigned int> &gaps)
 {
+ /* We may end up doing target calls that require the current thread to be TP,
+    for example reading memory through btrace_pt_readmem_callback.  Make sure
+    TP is the current thread.  */
+  scoped_restore_current_thread restore_thread;
+  switch_to_thread (tp);
+
   struct btrace_thread_info *btinfo;
   struct pt_insn_decoder *decoder;
   struct pt_config config;
@@ -1497,7 +1510,7 @@ btrace_compute_ftrace_pt (struct thread_
 			  const struct btrace_data_pt *btrace,
 			  std::vector<unsigned int> &gaps)
 {
-  internal_error (__FILE__, __LINE__, _("Unexpected branch trace format."));
+  internal_error (_("Unexpected branch trace format."));
 }
 
 #endif /* defined (HAVE_LIBIPT)  */
@@ -1533,7 +1546,7 @@ btrace_compute_ftrace_1 (struct thread_i
       return;
     }
 
-  internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
+  internal_error (_("Unknown branch trace format."));
 }
 
 static void
@@ -1592,7 +1605,8 @@ void
 btrace_enable (struct thread_info *tp, const struct btrace_config *conf)
 {
   if (tp->btrace.target != NULL)
-    return;
+    error (_("Recording already enabled on thread %s (%s)."),
+	   print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ());
 
 #if !defined (HAVE_LIBIPT)
   if (conf->format == BTRACE_FORMAT_PT)
@@ -1600,13 +1614,13 @@ btrace_enable (struct thread_info *tp, c
 #endif /* !defined (HAVE_LIBIPT) */
 
   DEBUG ("enable thread %s (%s)", print_thread_id (tp),
-	 target_pid_to_str (tp->ptid).c_str ());
+	 tp->ptid.to_string ().c_str ());
 
-  tp->btrace.target = target_enable_btrace (tp->ptid, conf);
+  tp->btrace.target = target_enable_btrace (tp, conf);
 
-  /* We're done if we failed to enable tracing.  */
   if (tp->btrace.target == NULL)
-    return;
+    error (_("Failed to enable recording on thread %s (%s)."),
+	   print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ());
 
   /* We need to undo the enable in case of errors.  */
   try
@@ -1651,10 +1665,11 @@ btrace_disable (struct thread_info *tp)
   struct btrace_thread_info *btp = &tp->btrace;
 
   if (btp->target == NULL)
-    return;
+    error (_("Recording not enabled on thread %s (%s)."),
+	   print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ());
 
   DEBUG ("disable thread %s (%s)", print_thread_id (tp),
-	 target_pid_to_str (tp->ptid).c_str ());
+	 tp->ptid.to_string ().c_str ());
 
   target_disable_btrace (btp->target);
   btp->target = NULL;
@@ -1673,7 +1688,7 @@ btrace_teardown (struct thread_info *tp)
     return;
 
   DEBUG ("teardown thread %s (%s)", print_thread_id (tp),
-	 target_pid_to_str (tp->ptid).c_str ());
+	 tp->ptid.to_string ().c_str ());
 
   target_teardown_btrace (btp->target);
   btp->target = NULL;
@@ -1791,7 +1806,7 @@ btrace_stitch_trace (struct btrace_data
       return -1;
     }
 
-  internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
+  internal_error (_("Unknown branch trace format."));
 }
 
 /* Clear the branch trace histories in BTINFO.  */
@@ -1895,7 +1910,7 @@ btrace_fetch (struct thread_info *tp, co
   int errcode;
 
   DEBUG ("fetch thread %s (%s)", print_thread_id (tp),
-	 target_pid_to_str (tp->ptid).c_str ());
+	 tp->ptid.to_string ().c_str ());
 
   btinfo = &tp->btrace;
   tinfo = btinfo->target;
@@ -1908,11 +1923,12 @@ btrace_fetch (struct thread_info *tp, co
   if (btinfo->replay != NULL)
     return;
 
-  /* With CLI usage, TP->PTID always equals INFERIOR_PTID here.  Now that we
-     can store a gdb.Record object in Python referring to a different thread
-     than the current one, temporarily set INFERIOR_PTID.  */
-  scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
-  inferior_ptid = tp->ptid;
+  /* With CLI usage, TP is always the current thread when we get here.
+     However, since we can also store a gdb.Record object in Python
+     referring to a different thread than the current one, we need to
+     temporarily set the current thread.  */
+  scoped_restore_current_thread restore_thread;
+  switch_to_thread (tp);
 
   /* We should not be called on running or exited threads.  */
   gdb_assert (can_access_registers_thread (tp));
@@ -1971,7 +1987,7 @@ btrace_clear (struct thread_info *tp)
   struct btrace_thread_info *btinfo;
 
   DEBUG ("clear thread %s (%s)", print_thread_id (tp),
-	 target_pid_to_str (tp->ptid).c_str ());
+	 tp->ptid.to_string ().c_str ());
 
   /* Make sure btrace frames that may hold a pointer into the branch
      trace data are destroyed.  */
@@ -1999,323 +2015,6 @@ btrace_free_objfile (struct objfile *obj
     btrace_clear (tp);
 }
 
-#if defined (HAVE_LIBEXPAT)
-
-/* Check the btrace document version.  */
-
-static void
-check_xml_btrace_version (struct gdb_xml_parser *parser,
-			  const struct gdb_xml_element *element,
-			  void *user_data,
-			  std::vector<gdb_xml_value> &attributes)
-{
-  const char *version
-    = (const char *) xml_find_attribute (attributes, "version")->value.get ();
-
-  if (strcmp (version, "1.0") != 0)
-    gdb_xml_error (parser, _("Unsupported btrace version: \"%s\""), version);
-}
-
-/* Parse a btrace "block" xml record.  */
-
-static void
-parse_xml_btrace_block (struct gdb_xml_parser *parser,
-			const struct gdb_xml_element *element,
-			void *user_data,
-			std::vector<gdb_xml_value> &attributes)
-{
-  struct btrace_data *btrace;
-  ULONGEST *begin, *end;
-
-  btrace = (struct btrace_data *) user_data;
-
-  switch (btrace->format)
-    {
-    case BTRACE_FORMAT_BTS:
-      break;
-
-    case BTRACE_FORMAT_NONE:
-      btrace->format = BTRACE_FORMAT_BTS;
-      btrace->variant.bts.blocks = new std::vector<btrace_block>;
-      break;
-
-    default:
-      gdb_xml_error (parser, _("Btrace format error."));
-    }
-
-  begin = (ULONGEST *) xml_find_attribute (attributes, "begin")->value.get ();
-  end = (ULONGEST *) xml_find_attribute (attributes, "end")->value.get ();
-  btrace->variant.bts.blocks->emplace_back (*begin, *end);
-}
-
-/* Parse a "raw" xml record.  */
-
-static void
-parse_xml_raw (struct gdb_xml_parser *parser, const char *body_text,
-	       gdb_byte **pdata, size_t *psize)
-{
-  gdb_byte *bin;
-  size_t len, size;
-
-  len = strlen (body_text);
-  if (len % 2 != 0)
-    gdb_xml_error (parser, _("Bad raw data size."));
-
-  size = len / 2;
-
-  gdb::unique_xmalloc_ptr<gdb_byte> data ((gdb_byte *) xmalloc (size));
-  bin = data.get ();
-
-  /* We use hex encoding - see gdbsupport/rsp-low.h.  */
-  while (len > 0)
-    {
-      char hi, lo;
-
-      hi = *body_text++;
-      lo = *body_text++;
-
-      if (hi == 0 || lo == 0)
-	gdb_xml_error (parser, _("Bad hex encoding."));
-
-      *bin++ = fromhex (hi) * 16 + fromhex (lo);
-      len -= 2;
-    }
-
-  *pdata = data.release ();
-  *psize = size;
-}
-
-/* Parse a btrace pt-config "cpu" xml record.  */
-
-static void
-parse_xml_btrace_pt_config_cpu (struct gdb_xml_parser *parser,
-				const struct gdb_xml_element *element,
-				void *user_data,
-				std::vector<gdb_xml_value> &attributes)
-{
-  struct btrace_data *btrace;
-  const char *vendor;
-  ULONGEST *family, *model, *stepping;
-
-  vendor =
-    (const char *) xml_find_attribute (attributes, "vendor")->value.get ();
-  family
-    = (ULONGEST *) xml_find_attribute (attributes, "family")->value.get ();
-  model
-    = (ULONGEST *) xml_find_attribute (attributes, "model")->value.get ();
-  stepping
-    = (ULONGEST *) xml_find_attribute (attributes, "stepping")->value.get ();
-
-  btrace = (struct btrace_data *) user_data;
-
-  if (strcmp (vendor, "GenuineIntel") == 0)
-    btrace->variant.pt.config.cpu.vendor = CV_INTEL;
-
-  btrace->variant.pt.config.cpu.family = *family;
-  btrace->variant.pt.config.cpu.model = *model;
-  btrace->variant.pt.config.cpu.stepping = *stepping;
-}
-
-/* Parse a btrace pt "raw" xml record.  */
-
-static void
-parse_xml_btrace_pt_raw (struct gdb_xml_parser *parser,
-			 const struct gdb_xml_element *element,
-			 void *user_data, const char *body_text)
-{
-  struct btrace_data *btrace;
-
-  btrace = (struct btrace_data *) user_data;
-  parse_xml_raw (parser, body_text, &btrace->variant.pt.data,
-		 &btrace->variant.pt.size);
-}
-
-/* Parse a btrace "pt" xml record.  */
-
-static void
-parse_xml_btrace_pt (struct gdb_xml_parser *parser,
-		     const struct gdb_xml_element *element,
-		     void *user_data,
-		     std::vector<gdb_xml_value> &attributes)
-{
-  struct btrace_data *btrace;
-
-  btrace = (struct btrace_data *) user_data;
-  btrace->format = BTRACE_FORMAT_PT;
-  btrace->variant.pt.config.cpu.vendor = CV_UNKNOWN;
-  btrace->variant.pt.data = NULL;
-  btrace->variant.pt.size = 0;
-}
-
-static const struct gdb_xml_attribute block_attributes[] = {
-  { "begin", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
-  { "end", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
-  { NULL, GDB_XML_AF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_attribute btrace_pt_config_cpu_attributes[] = {
-  { "vendor", GDB_XML_AF_NONE, NULL, NULL },
-  { "family", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
-  { "model", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
-  { "stepping", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
-  { NULL, GDB_XML_AF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_element btrace_pt_config_children[] = {
-  { "cpu", btrace_pt_config_cpu_attributes, NULL, GDB_XML_EF_OPTIONAL,
-    parse_xml_btrace_pt_config_cpu, NULL },
-  { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_element btrace_pt_children[] = {
-  { "pt-config", NULL, btrace_pt_config_children, GDB_XML_EF_OPTIONAL, NULL,
-    NULL },
-  { "raw", NULL, NULL, GDB_XML_EF_OPTIONAL, NULL, parse_xml_btrace_pt_raw },
-  { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_attribute btrace_attributes[] = {
-  { "version", GDB_XML_AF_NONE, NULL, NULL },
-  { NULL, GDB_XML_AF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_element btrace_children[] = {
-  { "block", block_attributes, NULL,
-    GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL, parse_xml_btrace_block, NULL },
-  { "pt", NULL, btrace_pt_children, GDB_XML_EF_OPTIONAL, parse_xml_btrace_pt,
-    NULL },
-  { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_element btrace_elements[] = {
-  { "btrace", btrace_attributes, btrace_children, GDB_XML_EF_NONE,
-    check_xml_btrace_version, NULL },
-  { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
-};
-
-#endif /* defined (HAVE_LIBEXPAT) */
-
-/* See btrace.h.  */
-
-void
-parse_xml_btrace (struct btrace_data *btrace, const char *buffer)
-{
-#if defined (HAVE_LIBEXPAT)
-
-  int errcode;
-  btrace_data result;
-  result.format = BTRACE_FORMAT_NONE;
-
-  errcode = gdb_xml_parse_quick (_("btrace"), "btrace.dtd", btrace_elements,
-				 buffer, &result);
-  if (errcode != 0)
-    error (_("Error parsing branch trace."));
-
-  /* Keep parse results.  */
-  *btrace = std::move (result);
-
-#else  /* !defined (HAVE_LIBEXPAT) */
-
-  error (_("Cannot process branch trace.  XML support was disabled at "
-	   "compile time."));
-
-#endif  /* !defined (HAVE_LIBEXPAT) */
-}
-
-#if defined (HAVE_LIBEXPAT)
-
-/* Parse a btrace-conf "bts" xml record.  */
-
-static void
-parse_xml_btrace_conf_bts (struct gdb_xml_parser *parser,
-			  const struct gdb_xml_element *element,
-			  void *user_data,
-			  std::vector<gdb_xml_value> &attributes)
-{
-  struct btrace_config *conf;
-  struct gdb_xml_value *size;
-
-  conf = (struct btrace_config *) user_data;
-  conf->format = BTRACE_FORMAT_BTS;
-  conf->bts.size = 0;
-
-  size = xml_find_attribute (attributes, "size");
-  if (size != NULL)
-    conf->bts.size = (unsigned int) *(ULONGEST *) size->value.get ();
-}
-
-/* Parse a btrace-conf "pt" xml record.  */
-
-static void
-parse_xml_btrace_conf_pt (struct gdb_xml_parser *parser,
-			  const struct gdb_xml_element *element,
-			  void *user_data,
-			  std::vector<gdb_xml_value> &attributes)
-{
-  struct btrace_config *conf;
-  struct gdb_xml_value *size;
-
-  conf = (struct btrace_config *) user_data;
-  conf->format = BTRACE_FORMAT_PT;
-  conf->pt.size = 0;
-
-  size = xml_find_attribute (attributes, "size");
-  if (size != NULL)
-    conf->pt.size = (unsigned int) *(ULONGEST *) size->value.get ();
-}
-
-static const struct gdb_xml_attribute btrace_conf_pt_attributes[] = {
-  { "size", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
-  { NULL, GDB_XML_AF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_attribute btrace_conf_bts_attributes[] = {
-  { "size", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
-  { NULL, GDB_XML_AF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_element btrace_conf_children[] = {
-  { "bts", btrace_conf_bts_attributes, NULL, GDB_XML_EF_OPTIONAL,
-    parse_xml_btrace_conf_bts, NULL },
-  { "pt", btrace_conf_pt_attributes, NULL, GDB_XML_EF_OPTIONAL,
-    parse_xml_btrace_conf_pt, NULL },
-  { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_attribute btrace_conf_attributes[] = {
-  { "version", GDB_XML_AF_NONE, NULL, NULL },
-  { NULL, GDB_XML_AF_NONE, NULL, NULL }
-};
-
-static const struct gdb_xml_element btrace_conf_elements[] = {
-  { "btrace-conf", btrace_conf_attributes, btrace_conf_children,
-    GDB_XML_EF_NONE, NULL, NULL },
-  { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
-};
-
-#endif /* defined (HAVE_LIBEXPAT) */
-
-/* See btrace.h.  */
-
-void
-parse_xml_btrace_conf (struct btrace_config *conf, const char *xml)
-{
-#if defined (HAVE_LIBEXPAT)
-
-  int errcode;
-  errcode = gdb_xml_parse_quick (_("btrace-conf"), "btrace-conf.dtd",
-				 btrace_conf_elements, xml, conf);
-  if (errcode != 0)
-    error (_("Error parsing branch trace configuration."));
-
-#else  /* !defined (HAVE_LIBEXPAT) */
-
-  error (_("Cannot process the branch trace configuration.  XML support "
-	   "was disabled at compile time."));
-
-#endif  /* !defined (HAVE_LIBEXPAT) */
-}
-
 /* See btrace.h.  */
 
 const struct btrace_insn *
@@ -2834,122 +2533,122 @@ pt_print_packet (const struct pt_packet
   switch (packet->type)
     {
     default:
-      printf_unfiltered (("[??: %x]"), packet->type);
+      gdb_printf (("[??: %x]"), packet->type);
       break;
 
     case ppt_psb:
-      printf_unfiltered (("psb"));
+      gdb_printf (("psb"));
       break;
 
     case ppt_psbend:
-      printf_unfiltered (("psbend"));
+      gdb_printf (("psbend"));
       break;
 
     case ppt_pad:
-      printf_unfiltered (("pad"));
+      gdb_printf (("pad"));
       break;
 
     case ppt_tip:
-      printf_unfiltered (("tip %u: 0x%" PRIx64 ""),
-			 packet->payload.ip.ipc,
-			 packet->payload.ip.ip);
+      gdb_printf (("tip %u: 0x%" PRIx64 ""),
+		  packet->payload.ip.ipc,
+		  packet->payload.ip.ip);
       break;
 
     case ppt_tip_pge:
-      printf_unfiltered (("tip.pge %u: 0x%" PRIx64 ""),
-			 packet->payload.ip.ipc,
-			 packet->payload.ip.ip);
+      gdb_printf (("tip.pge %u: 0x%" PRIx64 ""),
+		  packet->payload.ip.ipc,
+		  packet->payload.ip.ip);
       break;
 
     case ppt_tip_pgd:
-      printf_unfiltered (("tip.pgd %u: 0x%" PRIx64 ""),
-			 packet->payload.ip.ipc,
-			 packet->payload.ip.ip);
+      gdb_printf (("tip.pgd %u: 0x%" PRIx64 ""),
+		  packet->payload.ip.ipc,
+		  packet->payload.ip.ip);
       break;
 
     case ppt_fup:
-      printf_unfiltered (("fup %u: 0x%" PRIx64 ""),
-			 packet->payload.ip.ipc,
-			 packet->payload.ip.ip);
+      gdb_printf (("fup %u: 0x%" PRIx64 ""),
+		  packet->payload.ip.ipc,
+		  packet->payload.ip.ip);
       break;
 
     case ppt_tnt_8:
-      printf_unfiltered (("tnt-8 %u: 0x%" PRIx64 ""),
-			 packet->payload.tnt.bit_size,
-			 packet->payload.tnt.payload);
+      gdb_printf (("tnt-8 %u: 0x%" PRIx64 ""),
+		  packet->payload.tnt.bit_size,
+		  packet->payload.tnt.payload);
       break;
 
     case ppt_tnt_64:
-      printf_unfiltered (("tnt-64 %u: 0x%" PRIx64 ""),
-			 packet->payload.tnt.bit_size,
-			 packet->payload.tnt.payload);
+      gdb_printf (("tnt-64 %u: 0x%" PRIx64 ""),
+		  packet->payload.tnt.bit_size,
+		  packet->payload.tnt.payload);
       break;
 
     case ppt_pip:
-      printf_unfiltered (("pip %" PRIx64 "%s"), packet->payload.pip.cr3,
-			 packet->payload.pip.nr ? (" nr") : (""));
+      gdb_printf (("pip %" PRIx64 "%s"), packet->payload.pip.cr3,
+		  packet->payload.pip.nr ? (" nr") : (""));
       break;
 
     case ppt_tsc:
-      printf_unfiltered (("tsc %" PRIx64 ""), packet->payload.tsc.tsc);
+      gdb_printf (("tsc %" PRIx64 ""), packet->payload.tsc.tsc);
       break;
 
     case ppt_cbr:
-      printf_unfiltered (("cbr %u"), packet->payload.cbr.ratio);
+      gdb_printf (("cbr %u"), packet->payload.cbr.ratio);
       break;
 
     case ppt_mode:
       switch (packet->payload.mode.leaf)
 	{
 	default:
-	  printf_unfiltered (("mode %u"), packet->payload.mode.leaf);
+	  gdb_printf (("mode %u"), packet->payload.mode.leaf);
 	  break;
 
 	case pt_mol_exec:
-	  printf_unfiltered (("mode.exec%s%s"),
-			     packet->payload.mode.bits.exec.csl
-			     ? (" cs.l") : (""),
-			     packet->payload.mode.bits.exec.csd
-			     ? (" cs.d") : (""));
+	  gdb_printf (("mode.exec%s%s"),
+		      packet->payload.mode.bits.exec.csl
+		      ? (" cs.l") : (""),
+		      packet->payload.mode.bits.exec.csd
+		      ? (" cs.d") : (""));
 	  break;
 
 	case pt_mol_tsx:
-	  printf_unfiltered (("mode.tsx%s%s"),
-			     packet->payload.mode.bits.tsx.intx
-			     ? (" intx") : (""),
-			     packet->payload.mode.bits.tsx.abrt
-			     ? (" abrt") : (""));
+	  gdb_printf (("mode.tsx%s%s"),
+		      packet->payload.mode.bits.tsx.intx
+		      ? (" intx") : (""),
+		      packet->payload.mode.bits.tsx.abrt
+		      ? (" abrt") : (""));
 	  break;
 	}
       break;
 
     case ppt_ovf:
-      printf_unfiltered (("ovf"));
+      gdb_printf (("ovf"));
       break;
 
     case ppt_stop:
-      printf_unfiltered (("stop"));
+      gdb_printf (("stop"));
       break;
 
     case ppt_vmcs:
-      printf_unfiltered (("vmcs %" PRIx64 ""), packet->payload.vmcs.base);
+      gdb_printf (("vmcs %" PRIx64 ""), packet->payload.vmcs.base);
       break;
 
     case ppt_tma:
-      printf_unfiltered (("tma %x %x"), packet->payload.tma.ctc,
-			 packet->payload.tma.fc);
+      gdb_printf (("tma %x %x"), packet->payload.tma.ctc,
+		  packet->payload.tma.fc);
       break;
 
     case ppt_mtc:
-      printf_unfiltered (("mtc %x"), packet->payload.mtc.ctc);
+      gdb_printf (("mtc %x"), packet->payload.mtc.ctc);
       break;
 
     case ppt_cyc:
-      printf_unfiltered (("cyc %" PRIx64 ""), packet->payload.cyc.value);
+      gdb_printf (("cyc %" PRIx64 ""), packet->payload.cyc.value);
       break;
 
     case ppt_mnt:
-      printf_unfiltered (("mnt %" PRIx64 ""), packet->payload.mnt.payload);
+      gdb_printf (("mnt %" PRIx64 ""), packet->payload.mnt.payload);
       break;
     }
 }
@@ -3131,9 +2830,9 @@ btrace_maint_print_packets (struct btrac
 	  {
 	    const btrace_block &block = blocks.at (blk);
 
-	    printf_unfiltered ("%u\tbegin: %s, end: %s\n", blk,
-			       core_addr_to_string_nz (block.begin),
-			       core_addr_to_string_nz (block.end));
+	    gdb_printf ("%u\tbegin: %s, end: %s\n", blk,
+			core_addr_to_string_nz (block.begin),
+			core_addr_to_string_nz (block.end));
 	  }
 
 	btinfo->maint.variant.bts.packet_history.begin = begin;
@@ -3152,15 +2851,15 @@ btrace_maint_print_packets (struct btrac
 	  {
 	    const struct btrace_pt_packet &packet = packets.at (pkt);
 
-	    printf_unfiltered ("%u\t", pkt);
-	    printf_unfiltered ("0x%" PRIx64 "\t", packet.offset);
+	    gdb_printf ("%u\t", pkt);
+	    gdb_printf ("0x%" PRIx64 "\t", packet.offset);
 
 	    if (packet.errcode == pte_ok)
 	      pt_print_packet (&packet.packet);
 	    else
-	      printf_unfiltered ("[error: %s]", pt_errstr (packet.errcode));
+	      gdb_printf ("[error: %s]", pt_errstr (packet.errcode));
 
-	    printf_unfiltered ("\n");
+	    gdb_printf ("\n");
 	  }
 
 	btinfo->maint.variant.pt.packet_history.begin = begin;
@@ -3228,7 +2927,7 @@ maint_btrace_packet_history_cmd (const c
   struct btrace_thread_info *btinfo;
   unsigned int size, begin, end, from, to;
 
-  thread_info *tp = find_thread_ptid (inferior_ptid);
+  thread_info *tp = current_inferior ()->find_thread (inferior_ptid);
   if (tp == NULL)
     error (_("No thread."));
 
@@ -3238,7 +2937,7 @@ maint_btrace_packet_history_cmd (const c
   btrace_maint_update_packets (btinfo, &begin, &end, &from, &to);
   if (begin == end)
     {
-      printf_unfiltered (_("No trace.\n"));
+      gdb_printf (_("No trace.\n"));
       return;
     }
 
@@ -3358,51 +3057,6 @@ maint_btrace_clear_cmd (const char *args
   btrace_clear (tp);
 }
 
-/* The "maintenance btrace" command.  */
-
-static void
-maint_btrace_cmd (const char *args, int from_tty)
-{
-  help_list (maint_btrace_cmdlist, "maintenance btrace ", all_commands,
-	     gdb_stdout);
-}
-
-/* The "maintenance set btrace" command.  */
-
-static void
-maint_btrace_set_cmd (const char *args, int from_tty)
-{
-  help_list (maint_btrace_set_cmdlist, "maintenance set btrace ", all_commands,
-	     gdb_stdout);
-}
-
-/* The "maintenance show btrace" command.  */
-
-static void
-maint_btrace_show_cmd (const char *args, int from_tty)
-{
-  help_list (maint_btrace_show_cmdlist, "maintenance show btrace ",
-	     all_commands, gdb_stdout);
-}
-
-/* The "maintenance set btrace pt" command.  */
-
-static void
-maint_btrace_pt_set_cmd (const char *args, int from_tty)
-{
-  help_list (maint_btrace_pt_set_cmdlist, "maintenance set btrace pt ",
-	     all_commands, gdb_stdout);
-}
-
-/* The "maintenance show btrace pt" command.  */
-
-static void
-maint_btrace_pt_show_cmd (const char *args, int from_tty)
-{
-  help_list (maint_btrace_pt_show_cmdlist, "maintenance show btrace pt ",
-	     all_commands, gdb_stdout);
-}
-
 /* The "maintenance info btrace" command.  */
 
 static void
@@ -3425,8 +3079,8 @@ maint_info_btrace_cmd (const char *args,
   if (conf == NULL)
     error (_("No btrace configuration."));
 
-  printf_unfiltered (_("Format: %s.\n"),
-		     btrace_format_string (conf->format));
+  gdb_printf (_("Format: %s.\n"),
+	      btrace_format_string (conf->format));
 
   switch (conf->format)
     {
@@ -3434,8 +3088,8 @@ maint_info_btrace_cmd (const char *args,
       break;
 
     case BTRACE_FORMAT_BTS:
-      printf_unfiltered (_("Number of packets: %zu.\n"),
-			 btinfo->data.variant.bts.blocks->size ());
+      gdb_printf (_("Number of packets: %zu.\n"),
+		  btinfo->data.variant.bts.blocks->size ());
       break;
 
 #if defined (HAVE_LIBIPT)
@@ -3444,14 +3098,14 @@ maint_info_btrace_cmd (const char *args,
 	struct pt_version version;
 
 	version = pt_library_version ();
-	printf_unfiltered (_("Version: %u.%u.%u%s.\n"), version.major,
-			   version.minor, version.build,
-			   version.ext != NULL ? version.ext : "");
+	gdb_printf (_("Version: %u.%u.%u%s.\n"), version.major,
+		    version.minor, version.build,
+		    version.ext != NULL ? version.ext : "");
 
 	btrace_maint_update_pt_packets (btinfo);
-	printf_unfiltered (_("Number of packets: %zu.\n"),
-			   ((btinfo->maint.variant.pt.packets == nullptr)
-			    ? 0 : btinfo->maint.variant.pt.packets->size ()));
+	gdb_printf (_("Number of packets: %zu.\n"),
+		    ((btinfo->maint.variant.pt.packets == nullptr)
+		     ? 0 : btinfo->maint.variant.pt.packets->size ()));
       }
       break;
 #endif /* defined (HAVE_LIBIPT)  */
@@ -3465,42 +3119,38 @@ show_maint_btrace_pt_skip_pad  (struct u
 				  struct cmd_list_element *c,
 				  const char *value)
 {
-  fprintf_filtered (file, _("Skip PAD packets is %s.\n"), value);
+  gdb_printf (file, _("Skip PAD packets is %s.\n"), value);
 }
 
 
 /* Initialize btrace maintenance commands.  */
 
+void _initialize_btrace ();
 void
-_initialize_btrace (void)
+_initialize_btrace ()
 {
   add_cmd ("btrace", class_maintenance, maint_info_btrace_cmd,
 	   _("Info about branch tracing data."), &maintenanceinfolist);
 
-  add_prefix_cmd ("btrace", class_maintenance, maint_btrace_cmd,
-		  _("Branch tracing maintenance commands."),
-		  &maint_btrace_cmdlist, "maintenance btrace ",
-		  0, &maintenancelist);
-
-  add_prefix_cmd ("btrace", class_maintenance, maint_btrace_set_cmd, _("\
-Set branch tracing specific variables."),
-                  &maint_btrace_set_cmdlist, "maintenance set btrace ",
-                  0, &maintenance_set_cmdlist);
-
-  add_prefix_cmd ("pt", class_maintenance, maint_btrace_pt_set_cmd, _("\
-Set Intel Processor Trace specific variables."),
-                  &maint_btrace_pt_set_cmdlist, "maintenance set btrace pt ",
-                  0, &maint_btrace_set_cmdlist);
-
-  add_prefix_cmd ("btrace", class_maintenance, maint_btrace_show_cmd, _("\
-Show branch tracing specific variables."),
-                  &maint_btrace_show_cmdlist, "maintenance show btrace ",
-                  0, &maintenance_show_cmdlist);
-
-  add_prefix_cmd ("pt", class_maintenance, maint_btrace_pt_show_cmd, _("\
-Show Intel Processor Trace specific variables."),
-                  &maint_btrace_pt_show_cmdlist, "maintenance show btrace pt ",
-                  0, &maint_btrace_show_cmdlist);
+  add_basic_prefix_cmd ("btrace", class_maintenance,
+			_("Branch tracing maintenance commands."),
+			&maint_btrace_cmdlist, 0, &maintenancelist);
+
+  add_setshow_prefix_cmd ("btrace", class_maintenance,
+			  _("Set branch tracing specific variables."),
+			  _("Show branch tracing specific variables."),
+			  &maint_btrace_set_cmdlist,
+			  &maint_btrace_show_cmdlist,
+			  &maintenance_set_cmdlist,
+			  &maintenance_show_cmdlist);
+
+  add_setshow_prefix_cmd ("pt", class_maintenance,
+			  _("Set Intel Processor Trace specific variables."),
+			  _("Show Intel Processor Trace specific variables."),
+			  &maint_btrace_pt_set_cmdlist,
+			  &maint_btrace_pt_show_cmdlist,
+			  &maint_btrace_set_cmdlist,
+			  &maint_btrace_show_cmdlist);
 
   add_setshow_boolean_cmd ("skip-pad", class_maintenance,
 			   &maint_btrace_pt_skip_pad, _("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/btrace.h ./gdb/btrace.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/btrace.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/btrace.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Branch trace support for GDB, the GNU debugger.
 
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2024 Free Software Foundation, Inc.
 
    Contributed by Intel Corp. <markus.t.metzger@intel.com>.
 
@@ -27,7 +27,7 @@
    list of sequential control-flow blocks, one such list per thread.  */
 
 #include "gdbsupport/btrace-common.h"
-#include "target/waitstatus.h" /* For enum target_stop_reason.  */
+#include "target/waitstatus.h"
 #include "gdbsupport/enum-flags.h"
 
 #if defined (HAVE_LIBIPT)
@@ -393,12 +393,6 @@ extern void btrace_clear (struct thread_
 /* Clear the branch trace for all threads when an object file goes away.  */
 extern void btrace_free_objfile (struct objfile *);
 
-/* Parse a branch trace xml document XML into DATA.  */
-extern void parse_xml_btrace (struct btrace_data *data, const char *xml);
-
-/* Parse a branch trace configuration xml document XML into CONF.  */
-extern void parse_xml_btrace_conf (struct btrace_config *conf, const char *xml);
-
 /* Dereference a branch trace instruction iterator.  Return a pointer to the
    instruction the iterator points to.
    May return NULL if the iterator points to a gap in the trace.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bt-utils.c ./gdb/bt-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bt-utils.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/bt-utils.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,174 @@
+/* Copyright (C) 2021-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "bt-utils.h"
+#include "command.h"
+#include "gdbcmd.h"
+#include "ui.h"
+#include "cli/cli-decode.h"
+
+/* See bt-utils.h.  */
+
+void
+gdb_internal_backtrace_set_cmd (const char *args, int from_tty,
+				cmd_list_element *c)
+{
+  gdb_assert (c->type == set_cmd);
+  gdb_assert (c->var.has_value ());
+  gdb_assert (c->var->type () == var_boolean);
+
+#ifndef GDB_PRINT_INTERNAL_BACKTRACE
+  if (c->var->get<bool> ())
+    {
+      c->var->set<bool> (false);
+      error (_("support for this feature is not compiled into GDB"));
+    }
+#endif
+}
+
+#ifdef GDB_PRINT_INTERNAL_BACKTRACE
+#ifdef GDB_PRINT_INTERNAL_BACKTRACE_USING_LIBBACKTRACE
+
+/* Callback used by libbacktrace if it encounters an error.  */
+
+static void
+libbacktrace_error (void *data, const char *errmsg, int errnum)
+{
+  /* A negative errnum indicates no debug info was available, just
+     skip printing a backtrace in this case.  */
+  if (errnum < 0)
+    return;
+
+  const auto sig_write = [] (const char *msg) -> void
+  {
+    gdb_stderr->write_async_safe (msg, strlen (msg));
+  };
+
+  sig_write ("error creating backtrace: ");
+  sig_write (errmsg);
+  if (errnum > 0)
+    {
+      char buf[20];
+      snprintf (buf, sizeof (buf), ": %d", errnum);
+      buf[sizeof (buf) - 1] = '\0';
+
+      sig_write (buf);
+    }
+  sig_write ("\n");
+}
+
+/* Callback used by libbacktrace to print a single stack frame.  */
+
+static int
+libbacktrace_print (void *data, uintptr_t pc, const char *filename,
+		    int lineno, const char *function)
+{
+  const auto sig_write = [] (const char *msg) -> void
+  {
+    gdb_stderr->write_async_safe (msg, strlen (msg));
+  };
+
+  /* Buffer to print addresses and line numbers into.  An 8-byte address
+     with '0x' prefix and a null terminator requires 20 characters.  This
+     also feels like it should be enough to represent line numbers in most
+     files.  We are also careful to ensure we don't overflow this buffer.  */
+  char buf[20];
+
+  snprintf (buf, sizeof (buf), "0x%" PRIxPTR " ", pc);
+  buf[sizeof (buf) - 1] = '\0';
+  sig_write (buf);
+  sig_write (function == nullptr ? "???" : function);
+  if (filename != nullptr)
+    {
+      sig_write ("\n\t");
+      sig_write (filename);
+      sig_write (":");
+      snprintf (buf, sizeof (buf), "%d", lineno);
+      buf[sizeof (buf) - 1] = '\0';
+      sig_write (buf);
+    }
+  sig_write ("\n");
+
+  return function != nullptr && strcmp (function, "main") == 0;
+}
+
+/* Write a backtrace to GDB's stderr in an async safe manner.  This is a
+   backtrace of GDB, not any running inferior, and is to be used when GDB
+   crashes or hits some other error condition.  */
+
+static void
+gdb_internal_backtrace_1 ()
+{
+  static struct backtrace_state *state = nullptr;
+
+  if (state == nullptr)
+    state = backtrace_create_state (nullptr, 0, libbacktrace_error, nullptr);
+
+  backtrace_full (state, 0, libbacktrace_print, libbacktrace_error, nullptr);
+}
+
+#elif defined GDB_PRINT_INTERNAL_BACKTRACE_USING_EXECINFO
+
+/* See the comment on previous version of this function.  */
+
+static void
+gdb_internal_backtrace_1 ()
+{
+  const auto sig_write = [] (const char *msg) -> void
+  {
+    gdb_stderr->write_async_safe (msg, strlen (msg));
+  };
+
+  /* Allow up to 25 frames of backtrace.  */
+  void *buffer[25];
+  int frames = backtrace (buffer, ARRAY_SIZE (buffer));
+
+  backtrace_symbols_fd (buffer, frames, gdb_stderr->fd ());
+  if (frames == ARRAY_SIZE (buffer))
+    sig_write (_("Backtrace might be incomplete.\n"));
+}
+
+#else
+#error "unexpected internal backtrace policy"
+#endif
+#endif /* GDB_PRINT_INTERNAL_BACKTRACE */
+
+/* See bt-utils.h.  */
+
+void
+gdb_internal_backtrace ()
+{
+  if (current_ui == nullptr)
+    return;
+
+#ifdef GDB_PRINT_INTERNAL_BACKTRACE
+  const auto sig_write = [] (const char *msg) -> void
+  {
+    gdb_stderr->write_async_safe (msg, strlen (msg));
+  };
+
+  sig_write (_("----- Backtrace -----\n"));
+
+  if (gdb_stderr->fd () > -1)
+    gdb_internal_backtrace_1 ();
+  else
+    sig_write (_("Backtrace unavailable\n"));
+
+  sig_write ("---------------------\n");
+#endif
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bt-utils.h ./gdb/bt-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/bt-utils.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/bt-utils.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,74 @@
+/* Copyright (C) 2021-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Support for printing a backtrace when GDB hits an error.  This is not
+   for printing backtraces of the inferior, but backtraces of GDB itself.  */
+
+#ifndef BT_UTILS_H
+#define BT_UTILS_H
+
+#ifdef HAVE_LIBBACKTRACE
+# include "backtrace.h"
+# include "backtrace-supported.h"
+# if BACKTRACE_SUPPORTED && (! BACKTRACE_USES_MALLOC)
+#  define GDB_PRINT_INTERNAL_BACKTRACE
+#  define GDB_PRINT_INTERNAL_BACKTRACE_USING_LIBBACKTRACE
+# endif
+#endif
+
+#if defined HAVE_EXECINFO_H			\
+  && defined HAVE_EXECINFO_BACKTRACE		\
+  && !defined GDB_PRINT_INTERNAL_BACKTRACE_USING_LIBBACKTRACE
+# include <execinfo.h>
+# define GDB_PRINT_INTERNAL_BACKTRACE
+# define GDB_PRINT_INTERNAL_BACKTRACE_USING_EXECINFO
+#endif
+
+/* Define GDB_PRINT_INTERNAL_BACKTRACE_INIT_ON.  This is a boolean value
+   that can be used as an initial value for a set/show user setting, where
+   the setting controls printing a GDB internal backtrace.
+
+   If backtrace printing is supported then this will have the value true,
+   but if backtrace printing is not supported then this has the value
+   false.  */
+#ifdef GDB_PRINT_INTERNAL_BACKTRACE
+# define GDB_PRINT_INTERNAL_BACKTRACE_INIT_ON true
+#else
+# define GDB_PRINT_INTERNAL_BACKTRACE_INIT_ON false
+#endif
+
+/* Print a backtrace of the current GDB process to the current
+   gdb_stderr.  The output is done in a signal async manner, so it is safe
+   to call from signal handlers.  */
+
+extern void gdb_internal_backtrace ();
+
+/* A generic function that can be used as the set function for any set
+   command that enables printing of an internal backtrace.  Command C must
+   be a boolean set command.
+
+   If GDB doesn't support printing a backtrace, and the user has tried to
+   set the variable associated with command C to true, then the associated
+   variable will be set back to false, and an error thrown.
+
+   If GDB does support printing a backtrace then this function does
+   nothing.  */
+
+extern void gdb_internal_backtrace_set_cmd (const char *args, int from_tty,
+					    cmd_list_element *c);
+
+#endif /* BT_UTILS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/build-id.c ./gdb/build-id.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/build-id.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/build-id.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* build-id-related functions.
 
-   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+   Copyright (C) 1991-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,12 +26,19 @@
 #include "objfiles.h"
 #include "filenames.h"
 #include "gdbcore.h"
+#include "cli/cli-style.h"
 
 /* See build-id.h.  */
 
 const struct bfd_build_id *
 build_id_bfd_get (bfd *abfd)
 {
+  /* Dynamic objfiles such as ones created by JIT reader API
+     have no underlying bfd structure (that is, objfile->obfd
+     is NULL).  */
+  if (abfd == nullptr)
+    return nullptr;
+
   if (!bfd_check_format (abfd, bfd_object)
       && !bfd_check_format (abfd, bfd_core))
     return NULL;
@@ -57,7 +64,7 @@ build_id_verify (bfd *abfd, size_t check
     warning (_("File \"%s\" has no build-id, file skipped"),
 	     bfd_get_filename (abfd));
   else if (found->size != check_len
-           || memcmp (found->data, check, found->size) != 0)
+	   || memcmp (found->data, check, found->size) != 0)
     warning (_("File \"%s\" has a different build-id, file skipped"),
 	     bfd_get_filename (abfd));
   else
@@ -76,30 +83,37 @@ build_id_to_debug_bfd_1 (const std::stri
 {
   if (separate_debug_file_debug)
     {
-      printf_unfiltered (_("  Trying %s..."), link.c_str ());
-      gdb_flush (gdb_stdout);
+      gdb_printf (gdb_stdlog, _("  Trying %s..."), link.c_str ());
+      gdb_flush (gdb_stdlog);
     }
 
   /* lrealpath() is expensive even for the usually non-existent files.  */
-  gdb::unique_xmalloc_ptr<char> filename;
-  if (access (link.c_str (), F_OK) == 0)
-    filename.reset (lrealpath (link.c_str ()));
+  gdb::unique_xmalloc_ptr<char> filename_holder;
+  const char *filename = nullptr;
+  if (is_target_filename (link))
+    filename = link.c_str ();
+  else if (access (link.c_str (), F_OK) == 0)
+    {
+      filename_holder.reset (lrealpath (link.c_str ()));
+      filename = filename_holder.get ();
+    }
 
   if (filename == NULL)
     {
       if (separate_debug_file_debug)
-	printf_unfiltered (_(" no, unable to compute real path\n"));
+	gdb_printf (gdb_stdlog,
+		    _(" no, unable to compute real path\n"));
 
       return {};
     }
 
   /* We expect to be silent on the non-existing files.  */
-  gdb_bfd_ref_ptr debug_bfd = gdb_bfd_open (filename.get (), gnutarget, -1);
+  gdb_bfd_ref_ptr debug_bfd = gdb_bfd_open (filename, gnutarget);
 
   if (debug_bfd == NULL)
     {
       if (separate_debug_file_debug)
-	printf_unfiltered (_(" no, unable to open.\n"));
+	gdb_printf (gdb_stdlog, _(" no, unable to open.\n"));
 
       return {};
     }
@@ -107,13 +121,13 @@ build_id_to_debug_bfd_1 (const std::stri
   if (!build_id_verify (debug_bfd.get(), build_id_len, build_id))
     {
       if (separate_debug_file_debug)
-	printf_unfiltered (_(" no, build-id does not match.\n"));
+	gdb_printf (gdb_stdlog, _(" no, build-id does not match.\n"));
 
       return {};
     }
 
   if (separate_debug_file_debug)
-    printf_unfiltered (_(" yes!\n"));
+    gdb_printf (gdb_stdlog, _(" yes!\n"));
 
   return debug_bfd;
 }
@@ -130,7 +144,7 @@ build_id_to_bfd_suffix (size_t build_id_
      cause "/.build-id/..." lookups.  */
 
   std::vector<gdb::unique_xmalloc_ptr<char>> debugdir_vec
-    = dirnames_to_char_ptr_vec (debug_file_directory);
+    = dirnames_to_char_ptr_vec (debug_file_directory.c_str ());
 
   for (const gdb::unique_xmalloc_ptr<char> &debugdir : debugdir_vec)
     {
@@ -140,7 +154,7 @@ build_id_to_bfd_suffix (size_t build_id_
       /* Compute where the file named after the build-id would be.
 
 	 If debugdir is "/usr/lib/debug" and the build-id is abcdef, this will
-         give "/usr/lib/debug/.build-id/ab/cdef.debug".  */
+	 give "/usr/lib/debug/.build-id/ab/cdef.debug".  */
       std::string link = debugdir.get ();
       link += "/.build-id/";
 
@@ -161,13 +175,10 @@ build_id_to_bfd_suffix (size_t build_id_
 	return debug_bfd;
 
       /* Try to look under the sysroot as well.  If the sysroot is
-         "/the/sysroot", it will give
-         "/the/sysroot/usr/lib/debug/.build-id/ab/cdef.debug".
+	 "/the/sysroot", it will give
+	 "/the/sysroot/usr/lib/debug/.build-id/ab/cdef.debug".  */
 
-         Don't do it if the sysroot is the target system ("target:").  It
-         could work in theory, but the lrealpath in build_id_to_debug_bfd_1
-         only works with local paths.  */
-      if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) != 0)
+      if (!gdb_sysroot.empty ())
 	{
 	  link = gdb_sysroot + link;
 	  debug_bfd = build_id_to_debug_bfd_1 (link, build_id_len, build_id);
@@ -198,16 +209,18 @@ build_id_to_exec_bfd (size_t build_id_le
 /* See build-id.h.  */
 
 std::string
-find_separate_debug_file_by_buildid (struct objfile *objfile)
+find_separate_debug_file_by_buildid (struct objfile *objfile,
+				     deferred_warnings *warnings)
 {
   const struct bfd_build_id *build_id;
 
-  build_id = build_id_bfd_get (objfile->obfd);
+  build_id = build_id_bfd_get (objfile->obfd.get ());
   if (build_id != NULL)
     {
       if (separate_debug_file_debug)
-	printf_unfiltered (_("\nLooking for separate debug info (build-id) for "
-			     "%s\n"), objfile_name (objfile));
+	gdb_printf (gdb_stdlog,
+		    _("\nLooking for separate debug info (build-id) for "
+		      "%s\n"), objfile_name (objfile));
 
       gdb_bfd_ref_ptr abfd (build_id_to_debug_bfd (build_id->size,
 						   build_id->data));
@@ -215,8 +228,15 @@ find_separate_debug_file_by_buildid (str
       if (abfd != NULL
 	  && filename_cmp (bfd_get_filename (abfd.get ()),
 			   objfile_name (objfile)) == 0)
-	warning (_("\"%s\": separate debug info file has no debug info"),
-		 bfd_get_filename (abfd.get ()));
+	{
+	  if (separate_debug_file_debug)
+	    gdb_printf (gdb_stdlog, "\"%s\": separate debug info file has no "
+			"debug info", bfd_get_filename (abfd.get ()));
+	  warnings->warn (_("\"%ps\": separate debug info file has no "
+			    "debug info"),
+			  styled_string (file_name_style.style (),
+					 bfd_get_filename (abfd.get ())));
+	}
       else if (abfd != NULL)
 	return std::string (bfd_get_filename (abfd.get ()));
     }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/build-id.h ./gdb/build-id.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/build-id.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/build-id.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* build-id-related functions.
 
-   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+   Copyright (C) 1991-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -49,10 +49,16 @@ extern gdb_bfd_ref_ptr build_id_to_exec_
 
 /* Find the separate debug file for OBJFILE, by using the build-id
    associated with OBJFILE's BFD.  If successful, returns the file name for the
-   separate debug file, otherwise, return an empty string.  */
+   separate debug file, otherwise, return an empty string.
+
+   Any warnings that are generated by the lookup process should be added to
+   WARNINGS.  If some other mechanism can be used to lookup the debug
+   information then the warning will not be shown, however, if GDB fails to
+   find suitable debug information using any approach, then any warnings
+   will be printed.  */
 
 extern std::string find_separate_debug_file_by_buildid
-  (struct objfile *objfile);
+  (struct objfile *objfile, deferred_warnings *warnings);
 
 /* Return an hex-string representation of BUILD_ID.  */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/buildsym.c ./gdb/buildsym.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/buildsym.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/buildsym.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support routines for building symbol tables in GDB's internal format.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,20 +19,20 @@
 #include "defs.h"
 #include "buildsym-legacy.h"
 #include "bfd.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
+#include "gdbsupport/pathstuff.h"
 #include "symtab.h"
 #include "symfile.h"
 #include "objfiles.h"
 #include "gdbtypes.h"
 #include "complaints.h"
-#include "expression.h"		/* For "enum exp_opcode" used by...  */
-#include "filenames.h"		/* For DOSish file names.  */
+#include "expression.h"
+#include "filenames.h"
 #include "macrotab.h"
-#include "demangle.h"		/* Needed by SYMBOL_INIT_DEMANGLED_NAME.  */
+#include "demangle.h"
 #include "block.h"
 #include "cp-support.h"
 #include "dictionary.h"
-#include "addrmap.h"
 #include <algorithm>
 
 /* For cleanup_undefined_stabs_types and finish_global_stabs (somewhat
@@ -49,21 +49,15 @@ struct pending_block
     struct block *block;
   };
 
-/* Initial sizes of data structures.  These are realloc'd larger if
-   needed, and realloc'd down to the size actually used, when
-   completed.  */
-
-#define	INITIAL_LINE_VECTOR_LENGTH	1000
-
-
 buildsym_compunit::buildsym_compunit (struct objfile *objfile_,
 				      const char *name,
 				      const char *comp_dir_,
+				      const char *name_for_id,
 				      enum language language_,
 				      CORE_ADDR last_addr)
   : m_objfile (objfile_),
     m_last_source_file (name == nullptr ? nullptr : xstrdup (name)),
-    m_comp_dir (comp_dir_ == nullptr ? nullptr : xstrdup (comp_dir_)),
+    m_comp_dir (comp_dir_ == nullptr ? "" : comp_dir_),
     m_language (language_),
     m_last_source_start_addr (last_addr)
 {
@@ -77,7 +71,7 @@ buildsym_compunit::buildsym_compunit (st
      It can happen that the debug info provides a different path to NAME than
      DIRNAME,NAME.  We cope with this in watch_main_source_file_lossage but
      that only works if the main_subfile doesn't have a symtab yet.  */
-  start_subfile (name);
+  start_subfile (name, name_for_id);
   /* Save this so that we don't have to go looking for it at the end
      of the subfiles list.  */
   m_main_subfile = m_current_subfile;
@@ -95,9 +89,7 @@ buildsym_compunit::~buildsym_compunit ()
        subfile = nextsub)
     {
       nextsub = subfile->next;
-      xfree (subfile->name);
-      xfree (subfile->line_vector);
-      xfree (subfile);
+      delete subfile;
     }
 
   struct pending *next, *next1;
@@ -120,7 +112,7 @@ buildsym_compunit::get_macro_table ()
 {
   if (m_pending_macros == nullptr)
     m_pending_macros = new_macro_table (&m_objfile->per_bfd->storage_obstack,
-					&m_objfile->per_bfd->macro_cache,
+					&m_objfile->per_bfd->string_cache,
 					m_compunit_symtab);
   return m_pending_macros;
 }
@@ -135,7 +127,7 @@ add_symbol_to_list (struct symbol *symbo
   struct pending *link;
 
   /* If this is an alias for another symbol, don't add it.  */
-  if (symbol->name && symbol->name[0] == '#')
+  if (symbol->linkage_name () && symbol->linkage_name ()[0] == '#')
     return;
 
   /* We keep PENDINGSIZE symbols in each link of the list.  If we
@@ -213,80 +205,79 @@ buildsym_compunit::finish_block_internal
      CORE_ADDR start, CORE_ADDR end,
      int is_global, int expandable)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (m_objfile);
+  struct gdbarch *gdbarch = m_objfile->arch ();
   struct pending *next, *next1;
   struct block *block;
   struct pending_block *pblock;
   struct pending_block *opblock;
 
-  block = (is_global
-	   ? allocate_global_block (&m_objfile->objfile_obstack)
-	   : allocate_block (&m_objfile->objfile_obstack));
+  if (is_global)
+    block = new (&m_objfile->objfile_obstack) global_block;
+  else
+    block = new (&m_objfile->objfile_obstack) struct block;
 
   if (symbol)
     {
-      BLOCK_MULTIDICT (block)
-	= mdict_create_linear (&m_objfile->objfile_obstack, *listhead);
+      block->set_multidict
+	(mdict_create_linear (&m_objfile->objfile_obstack, *listhead));
     }
   else
     {
       if (expandable)
 	{
-	  BLOCK_MULTIDICT (block) = mdict_create_hashed_expandable (m_language);
-	  mdict_add_pending (BLOCK_MULTIDICT (block), *listhead);
+	  block->set_multidict
+	    (mdict_create_hashed_expandable (m_language));
+	  mdict_add_pending (block->multidict (), *listhead);
 	}
       else
 	{
-	  BLOCK_MULTIDICT (block) =
-	    mdict_create_hashed (&m_objfile->objfile_obstack, *listhead);
+	  block->set_multidict
+	    (mdict_create_hashed (&m_objfile->objfile_obstack, *listhead));
 	}
     }
 
-  BLOCK_START (block) = start;
-  BLOCK_END (block) = end;
+  block->set_start (start);
+  block->set_end (end);
 
   /* Put the block in as the value of the symbol that names it.  */
 
   if (symbol)
     {
-      struct type *ftype = SYMBOL_TYPE (symbol);
-      struct mdict_iterator miter;
-      SYMBOL_BLOCK_VALUE (symbol) = block;
-      BLOCK_FUNCTION (block) = symbol;
+      struct type *ftype = symbol->type ();
+      symbol->set_value_block (block);
+      symbol->set_section_index (SECT_OFF_TEXT (m_objfile));
+      block->set_function (symbol);
 
-      if (TYPE_NFIELDS (ftype) <= 0)
+      if (ftype->num_fields () <= 0)
 	{
 	  /* No parameter type information is recorded with the
 	     function's type.  Set that from the type of the
 	     parameter symbols.  */
 	  int nparams = 0, iparams;
-	  struct symbol *sym;
 
 	  /* Here we want to directly access the dictionary, because
 	     we haven't fully initialized the block yet.  */
-	  ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (block), miter, sym)
+	  for (struct symbol *sym : block->multidict_symbols ())
 	    {
-	      if (SYMBOL_IS_ARGUMENT (sym))
+	      if (sym->is_argument ())
 		nparams++;
 	    }
 	  if (nparams > 0)
 	    {
-	      TYPE_NFIELDS (ftype) = nparams;
-	      TYPE_FIELDS (ftype) = (struct field *)
-		TYPE_ALLOC (ftype, nparams * sizeof (struct field));
+	      ftype->alloc_fields (nparams);
 
 	      iparams = 0;
 	      /* Here we want to directly access the dictionary, because
 		 we haven't fully initialized the block yet.  */
-	      ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (block), miter, sym)
+	      for (struct symbol *sym : block->multidict_symbols ())
 		{
 		  if (iparams == nparams)
 		    break;
 
-		  if (SYMBOL_IS_ARGUMENT (sym))
+		  if (sym->is_argument ())
 		    {
-		      TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
-		      TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
+		      ftype->field (iparams).set_type (sym->type ());
+		      ftype->field (iparams).set_is_artificial (false);
 		      iparams++;
 		    }
 		}
@@ -294,9 +285,7 @@ buildsym_compunit::finish_block_internal
 	}
     }
   else
-    {
-      BLOCK_FUNCTION (block) = NULL;
-    }
+    block->set_function (nullptr);
 
   if (static_link != NULL)
     objfile_register_static_link (m_objfile, block, static_link);
@@ -313,7 +302,7 @@ buildsym_compunit::finish_block_internal
   /* Check to be sure that the blocks have an end address that is
      greater than starting address.  */
 
-  if (BLOCK_END (block) < BLOCK_START (block))
+  if (block->end () < block->start ())
     {
       if (symbol)
 	{
@@ -325,11 +314,11 @@ buildsym_compunit::finish_block_internal
 	{
 	  complaint (_("block end address %s less than block "
 		       "start address %s (patched it)"),
-		     paddress (gdbarch, BLOCK_END (block)),
-		     paddress (gdbarch, BLOCK_START (block)));
+		     paddress (gdbarch, block->end ()),
+		     paddress (gdbarch, block->start ()));
 	}
       /* Better than nothing.  */
-      BLOCK_END (block) = BLOCK_START (block);
+      block->set_end (block->start ());
     }
 
   /* Install this block as the superblock of all blocks made since the
@@ -340,7 +329,7 @@ buildsym_compunit::finish_block_internal
        pblock && pblock != old_blocks; 
        pblock = pblock->next)
     {
-      if (BLOCK_SUPERBLOCK (pblock->block) == NULL)
+      if (pblock->block->superblock () == NULL)
 	{
 	  /* Check to be sure the blocks are nested as we receive
 	     them.  If the compiler/assembler/linker work, this just
@@ -349,9 +338,9 @@ buildsym_compunit::finish_block_internal
 	     Skip blocks which correspond to a function; they're not
 	     physically nested inside this other blocks, only
 	     lexically nested.  */
-	  if (BLOCK_FUNCTION (pblock->block) == NULL
-	      && (BLOCK_START (pblock->block) < BLOCK_START (block)
-		  || BLOCK_END (pblock->block) > BLOCK_END (block)))
+	  if (pblock->block->function () == NULL
+	      && (pblock->block->start () < block->start ()
+		  || pblock->block->end () > block->end ()))
 	    {
 	      if (symbol)
 		{
@@ -362,26 +351,27 @@ buildsym_compunit::finish_block_internal
 		{
 		  complaint (_("inner block (%s-%s) not "
 			       "inside outer block (%s-%s)"),
-			     paddress (gdbarch, BLOCK_START (pblock->block)),
-			     paddress (gdbarch, BLOCK_END (pblock->block)),
-			     paddress (gdbarch, BLOCK_START (block)),
-			     paddress (gdbarch, BLOCK_END (block)));
+			     paddress (gdbarch, pblock->block->start ()),
+			     paddress (gdbarch, pblock->block->end ()),
+			     paddress (gdbarch, block->start ()),
+			     paddress (gdbarch, block->end ()));
 		}
-	      if (BLOCK_START (pblock->block) < BLOCK_START (block))
-		BLOCK_START (pblock->block) = BLOCK_START (block);
-	      if (BLOCK_END (pblock->block) > BLOCK_END (block))
-		BLOCK_END (pblock->block) = BLOCK_END (block);
+
+	      if (pblock->block->start () < block->start ())
+		pblock->block->set_start (block->start ());
+
+	      if (pblock->block->end () > block->end ())
+		pblock->block->set_end (block->end ());
 	    }
-	  BLOCK_SUPERBLOCK (pblock->block) = block;
+	  pblock->block->set_superblock (block);
 	}
       opblock = pblock;
     }
 
-  block_set_using (block,
-		   (is_global
-		    ? m_global_using_directives
-		    : m_local_using_directives),
-		   &m_objfile->objfile_obstack);
+  block->set_using ((is_global
+		     ? m_global_using_directives
+		     : m_local_using_directives),
+		    &m_objfile->objfile_obstack);
   if (is_global)
     m_global_using_directives = NULL;
   else
@@ -420,14 +410,11 @@ buildsym_compunit::record_block_range (s
      become interesting.  Note that even if this block doesn't have
      any "interesting" ranges, some later block might, so we still
      need to record this block in the addrmap.  */
-  if (start != BLOCK_START (block)
-      || end_inclusive + 1 != BLOCK_END (block))
+  if (start != block->start ()
+      || end_inclusive + 1 != block->end ())
     m_pending_addrmap_interesting = true;
 
-  if (m_pending_addrmap == nullptr)
-    m_pending_addrmap = addrmap_create_mutable (&m_pending_addrmap_obstack);
-
-  addrmap_set_empty (m_pending_addrmap, start, end_inclusive, block);
+  m_pending_addrmap.set_empty (start, end_inclusive, block);
 }
 
 struct blockvector *
@@ -454,21 +441,20 @@ buildsym_compunit::make_blockvector ()
      each block into the list after its subblocks in order to make
      sure this is true.  */
 
-  BLOCKVECTOR_NBLOCKS (blockvector) = i;
+  blockvector->set_num_blocks (i);
   for (next = m_pending_blocks; next; next = next->next)
-    {
-      BLOCKVECTOR_BLOCK (blockvector, --i) = next->block;
-    }
+    blockvector->set_block (--i, next->block);
 
   free_pending_blocks ();
 
   /* If we needed an address map for this symtab, record it in the
      blockvector.  */
-  if (m_pending_addrmap != nullptr && m_pending_addrmap_interesting)
-    BLOCKVECTOR_MAP (blockvector)
-      = addrmap_create_fixed (m_pending_addrmap, &m_objfile->objfile_obstack);
+  if (m_pending_addrmap_interesting)
+    blockvector->set_map
+      (new (&m_objfile->objfile_obstack) addrmap_fixed
+       (&m_objfile->objfile_obstack, &m_pending_addrmap));
   else
-    BLOCKVECTOR_MAP (blockvector) = 0;
+    blockvector->set_map (nullptr);
 
   /* Some compilers output blocks in the wrong order, but we depend on
      their being in the right order so we can binary search.  Check the
@@ -476,15 +462,15 @@ buildsym_compunit::make_blockvector ()
      Note: Remember that the first two blocks are the global and static
      blocks.  We could special case that fact and begin checking at block 2.
      To avoid making that assumption we do not.  */
-  if (BLOCKVECTOR_NBLOCKS (blockvector) > 1)
+  if (blockvector->num_blocks () > 1)
     {
-      for (i = 1; i < BLOCKVECTOR_NBLOCKS (blockvector); i++)
+      for (i = 1; i < blockvector->num_blocks (); i++)
 	{
-	  if (BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i - 1))
-	      > BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i)))
+	  if (blockvector->block (i - 1)->start ()
+	      > blockvector->block (i)->start ())
 	    {
 	      CORE_ADDR start
-		= BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i));
+		= blockvector->block (i)->start ();
 
 	      complaint (_("block at %s out of order"),
 			 hex_string ((LONGEST) start));
@@ -494,61 +480,32 @@ buildsym_compunit::make_blockvector ()
 
   return (blockvector);
 }
-
-/* Start recording information about source code that came from an
-   included (or otherwise merged-in) source file with a different
-   name.  NAME is the name of the file (cannot be NULL).  */
+
+/* See buildsym.h.  */
 
 void
-buildsym_compunit::start_subfile (const char *name)
+buildsym_compunit::start_subfile (const char *name, const char *name_for_id)
 {
-  const char *subfile_dirname;
-  struct subfile *subfile;
-
-  subfile_dirname = m_comp_dir.get ();
-
   /* See if this subfile is already registered.  */
 
-  for (subfile = m_subfiles; subfile; subfile = subfile->next)
-    {
-      char *subfile_name;
-
-      /* If NAME is an absolute path, and this subfile is not, then
-	 attempt to create an absolute path to compare.  */
-      if (IS_ABSOLUTE_PATH (name)
-	  && !IS_ABSOLUTE_PATH (subfile->name)
-	  && subfile_dirname != NULL)
-	subfile_name = concat (subfile_dirname, SLASH_STRING,
-			       subfile->name, (char *) NULL);
-      else
-	subfile_name = subfile->name;
+  symtab_create_debug_printf ("name = %s, name_for_id = %s", name, name_for_id);
 
-      if (FILENAME_CMP (subfile_name, name) == 0)
-	{
-	  m_current_subfile = subfile;
-	  if (subfile_name != subfile->name)
-	    xfree (subfile_name);
-	  return;
-	}
-      if (subfile_name != subfile->name)
-	xfree (subfile_name);
-    }
+  for (subfile *subfile = m_subfiles; subfile; subfile = subfile->next)
+    if (FILENAME_CMP (subfile->name_for_id.c_str (), name_for_id) == 0)
+      {
+	symtab_create_debug_printf ("found existing symtab with name_for_id %s",
+				    subfile->name_for_id.c_str ());
+	m_current_subfile = subfile;
+	return;
+      }
 
   /* This subfile is not known.  Add an entry for it.  */
 
-  subfile = XNEW (struct subfile);
-  memset (subfile, 0, sizeof (struct subfile));
-  subfile->buildsym_compunit = this;
-
-  subfile->next = m_subfiles;
-  m_subfiles = subfile;
-
-  m_current_subfile = subfile;
-
-  subfile->name = xstrdup (name);
+  subfile_up subfile (new struct subfile);
+  subfile->name = name;
+  subfile->name_for_id = name_for_id;
 
-  /* Initialize line-number recording for this subfile.  */
-  subfile->line_vector = NULL;
+  m_current_subfile = subfile.get ();
 
   /* Default the source language to whatever can be deduced from the
      filename.  If nothing can be deduced (such as for a C/C++ include
@@ -561,22 +518,19 @@ buildsym_compunit::start_subfile (const
      until after all the symbols have been processed for a given
      source file.  */
 
-  subfile->language = deduce_language_from_filename (subfile->name);
-  if (subfile->language == language_unknown
-      && subfile->next != NULL)
-    {
-      subfile->language = subfile->next->language;
-    }
+  subfile->language = deduce_language_from_filename (subfile->name.c_str ());
+  if (subfile->language == language_unknown && m_subfiles != nullptr)
+    subfile->language = m_subfiles->language;
 
   /* If the filename of this subfile ends in .C, then change the
      language of any pending subfiles from C to C++.  We also accept
      any other C++ suffixes accepted by deduce_language_from_filename.  */
   /* Likewise for f2c.  */
 
-  if (subfile->name)
+  if (!subfile->name.empty ())
     {
       struct subfile *s;
-      enum language sublang = deduce_language_from_filename (subfile->name);
+      language sublang = deduce_language_from_filename (subfile->name.c_str ());
 
       if (sublang == language_cplus || sublang == language_fortran)
 	for (s = m_subfiles; s != NULL; s = s->next)
@@ -586,12 +540,14 @@ buildsym_compunit::start_subfile (const
 
   /* And patch up this file if necessary.  */
   if (subfile->language == language_c
-      && subfile->next != NULL
-      && (subfile->next->language == language_cplus
-	  || subfile->next->language == language_fortran))
-    {
-      subfile->language = subfile->next->language;
-    }
+      && m_subfiles != nullptr
+      && (m_subfiles->language == language_cplus
+	  || m_subfiles->language == language_fortran))
+    subfile->language = m_subfiles->language;
+
+  /* Link this subfile at the front of the subfile list.  */
+  subfile->next = m_subfiles;
+  m_subfiles = subfile.release ();
 }
 
 /* For stabs readers, the first N_SO symbol is assumed to be the
@@ -611,26 +567,28 @@ buildsym_compunit::patch_subfile_names (
 					const char *name)
 {
   if (subfile != NULL
-      && m_comp_dir == NULL
-      && subfile->name != NULL
-      && IS_DIR_SEPARATOR (subfile->name[strlen (subfile->name) - 1]))
-    {
-      m_comp_dir.reset (subfile->name);
-      subfile->name = xstrdup (name);
+      && m_comp_dir.empty ()
+      && !subfile->name.empty ()
+      && IS_DIR_SEPARATOR (subfile->name.back ()))
+    {
+      m_comp_dir = std::move (subfile->name);
+      subfile->name = name;
+      subfile->name_for_id = name;
       set_last_source_file (name);
 
       /* Default the source language to whatever can be deduced from
-         the filename.  If nothing can be deduced (such as for a C/C++
-         include file with a ".h" extension), then inherit whatever
-         language the previous subfile had.  This kludgery is
-         necessary because there is no standard way in some object
-         formats to record the source language.  Also, when symtabs
-         are allocated we try to deduce a language then as well, but
-         it is too late for us to use that information while reading
-         symbols, since symtabs aren't allocated until after all the
-         symbols have been processed for a given source file.  */
+	 the filename.  If nothing can be deduced (such as for a C/C++
+	 include file with a ".h" extension), then inherit whatever
+	 language the previous subfile had.  This kludgery is
+	 necessary because there is no standard way in some object
+	 formats to record the source language.  Also, when symtabs
+	 are allocated we try to deduce a language then as well, but
+	 it is too late for us to use that information while reading
+	 symbols, since symtabs aren't allocated until after all the
+	 symbols have been processed for a given source file.  */
 
-      subfile->language = deduce_language_from_filename (subfile->name);
+      subfile->language
+	= deduce_language_from_filename (subfile->name.c_str ());
       if (subfile->language == language_unknown
 	  && subfile->next != NULL)
 	{
@@ -648,8 +606,8 @@ void
 buildsym_compunit::push_subfile ()
 {
   gdb_assert (m_current_subfile != NULL);
-  gdb_assert (m_current_subfile->name != NULL);
-  m_subfile_stack.push_back (m_current_subfile->name);
+  gdb_assert (!m_current_subfile->name.empty ());
+  m_subfile_stack.push_back (m_current_subfile->name.c_str ());
 }
 
 const char *
@@ -666,36 +624,9 @@ buildsym_compunit::pop_subfile ()
 
 void
 buildsym_compunit::record_line (struct subfile *subfile, int line,
-				CORE_ADDR pc)
+				unrelocated_addr pc, linetable_entry_flags flags)
 {
-  struct linetable_entry *e;
-
-  /* Ignore the dummy line number in libg.o */
-  if (line == 0xffff)
-    {
-      return;
-    }
-
-  /* Make sure line vector exists and is big enough.  */
-  if (!subfile->line_vector)
-    {
-      subfile->line_vector_length = INITIAL_LINE_VECTOR_LENGTH;
-      subfile->line_vector = (struct linetable *)
-	xmalloc (sizeof (struct linetable)
-	   + subfile->line_vector_length * sizeof (struct linetable_entry));
-      subfile->line_vector->nitems = 0;
-      m_have_line_numbers = true;
-    }
-
-  if (subfile->line_vector->nitems + 1 >= subfile->line_vector_length)
-    {
-      subfile->line_vector_length *= 2;
-      subfile->line_vector = (struct linetable *)
-	xrealloc ((char *) subfile->line_vector,
-		  (sizeof (struct linetable)
-		   + (subfile->line_vector_length
-		      * sizeof (struct linetable_entry))));
-    }
+  m_have_line_numbers = true;
 
   /* Normally, we treat lines as unsorted.  But the end of sequence
      marker is special.  We sort line markers at the same PC by line
@@ -710,40 +641,37 @@ buildsym_compunit::record_line (struct s
      end of sequence markers.  All we lose is the ability to set
      breakpoints at some lines which contain no instructions
      anyway.  */
-  if (line == 0 && subfile->line_vector->nitems > 0)
+  if (line == 0)
     {
-      e = subfile->line_vector->item + subfile->line_vector->nitems - 1;
-      while (subfile->line_vector->nitems > 0 && e->pc == pc)
-	{
-	  e--;
-	  subfile->line_vector->nitems--;
-	}
-    }
+      std::optional<int> last_line;
 
-  e = subfile->line_vector->item + subfile->line_vector->nitems++;
-  e->line = line;
-  e->pc = pc;
-}
+      while (!subfile->line_vector_entries.empty ())
+	{
+	  linetable_entry *last = &subfile->line_vector_entries.back ();
+	  last_line = last->line;
 
-/* Needed in order to sort line tables from IBM xcoff files.  Sigh!  */
+	  if (last->unrelocated_pc () != pc)
+	    break;
 
-static bool
-lte_is_less_than (const linetable_entry &ln1, const linetable_entry &ln2)
-{
-  /* Note: this code does not assume that CORE_ADDRs can fit in ints.
-     Please keep it that way.  */
-  if (ln1.pc < ln2.pc)
-    return true;
+	  subfile->line_vector_entries.pop_back ();
+	}
 
-  if (ln1.pc > ln2.pc)
-    return false;
+      /* Ignore an end-of-sequence marker marking an empty sequence.  */
+      if (!last_line.has_value () || *last_line == 0)
+	return;
+    }
 
-  /* If pc equal, sort by line.  I'm not sure whether this is optimum
-     behavior (see comment at struct linetable in symtab.h).  */
-  return ln1.line < ln2.line;
+  subfile->line_vector_entries.emplace_back ();
+  linetable_entry &e = subfile->line_vector_entries.back ();
+  e.line = line;
+  e.is_stmt = (flags & LEF_IS_STMT) != 0;
+  e.set_unrelocated_pc (pc);
+  e.prologue_end = (flags & LEF_PROLOGUE_END) != 0;
+  e.epilogue_begin = (flags & LEF_EPILOGUE_BEGIN) != 0;
 }
+
 
-/* Subroutine of end_symtab to simplify it.  Look for a subfile that
+/* Subroutine of end_compunit_symtab to simplify it.  Look for a subfile that
    matches the main source file's basename.  If there is only one, and
    if the main source file doesn't have any symbol or line number
    information, then copy this file's symtab and line_vector to the
@@ -764,10 +692,10 @@ buildsym_compunit::watch_main_source_fil
   /* If the main source file doesn't have any line number or symbol
      info, look for an alias in another subfile.  */
 
-  if (mainsub->line_vector == NULL
+  if (mainsub->line_vector_entries.empty ()
       && mainsub->symtab == NULL)
     {
-      const char *mainbase = lbasename (mainsub->name);
+      const char *mainbase = lbasename (mainsub->name.c_str ());
       int nr_matches = 0;
       struct subfile *prevsub;
       struct subfile *mainsub_alias = NULL;
@@ -780,7 +708,7 @@ buildsym_compunit::watch_main_source_fil
 	{
 	  if (subfile == mainsub)
 	    continue;
-	  if (filename_cmp (lbasename (subfile->name), mainbase) == 0)
+	  if (filename_cmp (lbasename (subfile->name.c_str ()), mainbase) == 0)
 	    {
 	      ++nr_matches;
 	      mainsub_alias = subfile;
@@ -797,27 +725,31 @@ buildsym_compunit::watch_main_source_fil
 	     Copy its line_vector and symtab to the main subfile
 	     and then discard it.  */
 
-	  mainsub->line_vector = mainsub_alias->line_vector;
-	  mainsub->line_vector_length = mainsub_alias->line_vector_length;
+	  symtab_create_debug_printf ("using subfile %s as the main subfile",
+				      mainsub_alias->name.c_str ());
+
+	  mainsub->line_vector_entries
+	    = std::move (mainsub_alias->line_vector_entries);
 	  mainsub->symtab = mainsub_alias->symtab;
 
 	  if (prev_mainsub_alias == NULL)
 	    m_subfiles = mainsub_alias->next;
 	  else
 	    prev_mainsub_alias->next = mainsub_alias->next;
-	  xfree (mainsub_alias->name);
-	  xfree (mainsub_alias);
+
+	  delete mainsub_alias;
 	}
     }
 }
 
-/* Implementation of the first part of end_symtab.  It allows modifying
-   STATIC_BLOCK before it gets finalized by end_symtab_from_static_block.
-   If the returned value is NULL there is no blockvector created for
-   this symtab (you still must call end_symtab_from_static_block).
+/* Implementation of the first part of end_compunit_symtab.  It allows modifying
+   STATIC_BLOCK before it gets finalized by
+   end_compunit_symtab_from_static_block.  If the returned value is NULL there
+   is no blockvector created for this symtab (you still must call
+   end_compunit_symtab_from_static_block).
 
-   END_ADDR is the same as for end_symtab: the address of the end of the
-   file's text.
+   END_ADDR is the same as for end_compunit_symtab: the address of the end of
+   the file's text.
 
    If EXPANDABLE is non-zero the STATIC_BLOCK dictionary is made
    expandable.
@@ -826,8 +758,9 @@ buildsym_compunit::watch_main_source_fil
    not contain any symbols.  */
 
 struct block *
-buildsym_compunit::end_symtab_get_static_block (CORE_ADDR end_addr,
-						int expandable, int required)
+buildsym_compunit::end_compunit_symtab_get_static_block (CORE_ADDR end_addr,
+							 int expandable,
+							 int required)
 {
   /* Finish the lexical context of the last function in the file; pop
      the context stack.  */
@@ -847,15 +780,14 @@ buildsym_compunit::end_symtab_get_static
 	     same.  FIXME: Find out why it is happening.  This is not
 	     believed to happen in most cases (even for coffread.c);
 	     it used to be an abort().  */
-	  complaint (_("Context stack not empty in end_symtab"));
+	  complaint (_("Context stack not empty in end_compunit_symtab"));
 	  m_context_stack.clear ();
 	}
     }
 
-  /* Reordered executables may have out of order pending blocks; if
-     OBJF_REORDERED is true, then sort the pending blocks.  */
-
-  if ((m_objfile->flags & OBJF_REORDERED) && m_pending_blocks)
+  /* Executables may have out of order pending blocks; sort the
+     pending blocks.  */
+  if (m_pending_blocks != nullptr)
     {
       struct pending_block *pb;
 
@@ -870,7 +802,7 @@ buildsym_compunit::end_symtab_get_static
       std::stable_sort (barray.begin (), barray.end (),
 			[] (const block *a, const block *b)
 			{
-			  return BLOCK_START (a) > BLOCK_START (b);
+			  return a->start () > b->start ();
 			});
 
       int i = 0;
@@ -911,13 +843,14 @@ buildsym_compunit::end_symtab_get_static
     }
 }
 
-/* Subroutine of end_symtab_from_static_block to simplify it.
+/* Subroutine of end_compunit_symtab_from_static_block to simplify it.
    Handle the "have blockvector" case.
-   See end_symtab_from_static_block for a description of the arguments.  */
+   See end_compunit_symtab_from_static_block for a description of the
+   arguments.  */
 
 struct compunit_symtab *
-buildsym_compunit::end_symtab_with_blockvector (struct block *static_block,
-						int section, int expandable)
+buildsym_compunit::end_compunit_symtab_with_blockvector
+  (struct block *static_block, int expandable)
 {
   struct compunit_symtab *cu = m_compunit_symtab;
   struct blockvector *blockvector;
@@ -927,7 +860,7 @@ buildsym_compunit::end_symtab_with_block
   gdb_assert (static_block != NULL);
   gdb_assert (m_subfiles != NULL);
 
-  end_addr = BLOCK_END (static_block);
+  end_addr = static_block->end ();
 
   /* Create the GLOBAL_BLOCK and build the blockvector.  */
   finish_block_internal (NULL, get_global_symbols (), NULL, NULL,
@@ -952,42 +885,45 @@ buildsym_compunit::end_symtab_with_block
        subfile != NULL;
        subfile = subfile->next)
     {
-      int linetablesize = 0;
-
-      if (subfile->line_vector)
+      if (!subfile->line_vector_entries.empty ())
 	{
-	  linetablesize = sizeof (struct linetable) +
-	    subfile->line_vector->nitems * sizeof (struct linetable_entry);
-
-	  /* Like the pending blocks, the line table may be
-	     scrambled in reordered executables.  Sort it if
-	     OBJF_REORDERED is true.  */
-	  if (m_objfile->flags & OBJF_REORDERED)
-	    std::sort (subfile->line_vector->item,
-		       subfile->line_vector->item
-			 + subfile->line_vector->nitems,
-		       lte_is_less_than);
+	  /* Like the pending blocks, the line table may be scrambled
+	     in reordered executables.  Sort it.  It is important to
+	     preserve the order of lines at the same address, as this
+	     maintains the inline function caller/callee
+	     relationships, this is why std::stable_sort is used.  */
+	  std::stable_sort (subfile->line_vector_entries.begin (),
+			    subfile->line_vector_entries.end ());
 	}
 
       /* Allocate a symbol table if necessary.  */
       if (subfile->symtab == NULL)
-	subfile->symtab = allocate_symtab (cu, subfile->name);
+	subfile->symtab = allocate_symtab (cu, subfile->name.c_str (),
+					   subfile->name_for_id.c_str ());
+
       struct symtab *symtab = subfile->symtab;
 
       /* Fill in its components.  */
 
-      if (subfile->line_vector)
+      if (!subfile->line_vector_entries.empty ())
 	{
-	  /* Reallocate the line table on the symbol obstack.  */
-	  SYMTAB_LINETABLE (symtab) = (struct linetable *)
-	    obstack_alloc (&m_objfile->objfile_obstack, linetablesize);
-	  memcpy (SYMTAB_LINETABLE (symtab), subfile->line_vector,
-		  linetablesize);
+	  /* Reallocate the line table on the objfile obstack.  */
+	  size_t n_entries = subfile->line_vector_entries.size ();
+	  size_t entry_array_size = n_entries * sizeof (struct linetable_entry);
+	  int linetablesize = sizeof (struct linetable) + entry_array_size;
+
+	  struct linetable *new_table
+	    = XOBNEWVAR (&m_objfile->objfile_obstack, struct linetable,
+			 linetablesize);
+
+	  new_table->nitems = n_entries;
+	  memcpy (new_table->item,
+		  subfile->line_vector_entries.data (), entry_array_size);
+
+	  symtab->set_linetable (new_table);
 	}
       else
-	{
-	  SYMTAB_LINETABLE (symtab) = NULL;
-	}
+	symtab->set_linetable (nullptr);
 
       /* Use whatever language we have been using for this
 	 subfile, not the one that was deduced in allocate_symtab
@@ -995,84 +931,60 @@ buildsym_compunit::end_symtab_with_block
 	 we created the subfile, and we may have altered our
 	 opinion of what language it is from things we found in
 	 the symbols.  */
-      symtab->language = subfile->language;
+      symtab->set_language (subfile->language);
     }
 
-  /* Make sure the symtab of main_subfile is the first in its list.  */
-  {
-    struct symtab *main_symtab, *prev_symtab;
-
-    main_symtab = m_main_subfile->symtab;
-    prev_symtab = NULL;
-    for (symtab *symtab : compunit_filetabs (cu))
-      {
-	if (symtab == main_symtab)
-	  {
-	    if (prev_symtab != NULL)
-	      {
-		prev_symtab->next = main_symtab->next;
-		main_symtab->next = COMPUNIT_FILETABS (cu);
-		COMPUNIT_FILETABS (cu) = main_symtab;
-	      }
-	    break;
-	  }
-	prev_symtab = symtab;
-      }
-    gdb_assert (main_symtab == COMPUNIT_FILETABS (cu));
-  }
+  /* Make sure the filetab of main_subfile is the primary filetab of the CU.  */
+  cu->set_primary_filetab (m_main_subfile->symtab);
 
   /* Fill out the compunit symtab.  */
 
-  if (m_comp_dir != NULL)
+  if (!m_comp_dir.empty ())
     {
       /* Reallocate the dirname on the symbol obstack.  */
-      const char *comp_dir = m_comp_dir.get ();
-      COMPUNIT_DIRNAME (cu) = obstack_strdup (&m_objfile->objfile_obstack,
-					      comp_dir);
+      cu->set_dirname (obstack_strdup (&m_objfile->objfile_obstack,
+				       m_comp_dir.c_str ()));
     }
 
   /* Save the debug format string (if any) in the symtab.  */
-  COMPUNIT_DEBUGFORMAT (cu) = m_debugformat;
+  cu->set_debugformat (m_debugformat);
 
   /* Similarly for the producer.  */
-  COMPUNIT_PRODUCER (cu) = m_producer;
+  cu->set_producer (m_producer);
 
-  COMPUNIT_BLOCKVECTOR (cu) = blockvector;
+  cu->set_blockvector (blockvector);
   {
-    struct block *b = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
+    struct block *b = blockvector->global_block ();
 
-    set_block_compunit_symtab (b, cu);
+    b->set_compunit_symtab (cu);
   }
 
-  COMPUNIT_BLOCK_LINE_SECTION (cu) = section;
-
-  COMPUNIT_MACRO_TABLE (cu) = release_macros ();
+  cu->set_macro_table (release_macros ());
 
   /* Default any symbols without a specified symtab to the primary symtab.  */
   {
     int block_i;
 
     /* The main source file's symtab.  */
-    struct symtab *symtab = COMPUNIT_FILETABS (cu);
+    struct symtab *symtab = cu->primary_filetab ();
 
-    for (block_i = 0; block_i < BLOCKVECTOR_NBLOCKS (blockvector); block_i++)
+    for (block_i = 0; block_i < blockvector->num_blocks (); block_i++)
       {
-	struct block *block = BLOCKVECTOR_BLOCK (blockvector, block_i);
-	struct symbol *sym;
-	struct mdict_iterator miter;
+	struct block *block = blockvector->block (block_i);
 
 	/* Inlined functions may have symbols not in the global or
 	   static symbol lists.  */
-	if (BLOCK_FUNCTION (block) != NULL)
-	  if (symbol_symtab (BLOCK_FUNCTION (block)) == NULL)
-	    symbol_set_symtab (BLOCK_FUNCTION (block), symtab);
+	if (block->function () != nullptr
+	    && block->function ()->symtab () == nullptr)
+	    block->function ()->set_symtab (symtab);
 
 	/* Note that we only want to fix up symbols from the local
-	   blocks, not blocks coming from included symtabs.  That is why
-	   we use ALL_DICT_SYMBOLS here and not ALL_BLOCK_SYMBOLS.  */
-	ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (block), miter, sym)
-	  if (symbol_symtab (sym) == NULL)
-	    symbol_set_symtab (sym, symtab);
+	   blocks, not blocks coming from included symtabs.  That is
+	   why we use an mdict iterator here and not a block
+	   iterator.  */
+	for (struct symbol *sym : block->multidict_symbols ())
+	  if (sym->symtab () == NULL)
+	    sym->set_symtab (symtab);
       }
   }
 
@@ -1081,18 +993,15 @@ buildsym_compunit::end_symtab_with_block
   return cu;
 }
 
-/* Implementation of the second part of end_symtab.  Pass STATIC_BLOCK
-   as value returned by end_symtab_get_static_block.
-
-   SECTION is the same as for end_symtab: the section number
-   (in objfile->section_offsets) of the blockvector and linetable.
+/* Implementation of the second part of end_compunit_symtab.  Pass STATIC_BLOCK
+   as value returned by end_compunit_symtab_get_static_block.
 
    If EXPANDABLE is non-zero the GLOBAL_BLOCK dictionary is made
    expandable.  */
 
 struct compunit_symtab *
-buildsym_compunit::end_symtab_from_static_block (struct block *static_block,
-						 int section, int expandable)
+buildsym_compunit::end_compunit_symtab_from_static_block
+  (struct block *static_block, int expandable)
 {
   struct compunit_symtab *cu;
 
@@ -1110,7 +1019,7 @@ buildsym_compunit::end_symtab_from_stati
       cu = NULL;
     }
   else
-    cu = end_symtab_with_blockvector (static_block, section, expandable);
+    cu = end_compunit_symtab_with_blockvector (static_block, expandable);
 
   return cu;
 }
@@ -1120,11 +1029,9 @@ buildsym_compunit::end_symtab_from_stati
    them), then make the struct symtab for that file and put it in the
    list of all such.
 
-   END_ADDR is the address of the end of the file's text.  SECTION is
-   the section number (in objfile->section_offsets) of the blockvector
-   and linetable.
+   END_ADDR is the address of the end of the file's text.
 
-   Note that it is possible for end_symtab() to return NULL.  In
+   Note that it is possible for end_compunit_symtab() to return NULL.  In
    particular, for the DWARF case at least, it will return NULL when
    it finds a compilation unit that has exactly one DIE, a
    TAG_compile_unit DIE.  This can happen when we link in an object
@@ -1133,27 +1040,28 @@ buildsym_compunit::end_symtab_from_stati
    never know about this empty file (FIXME).
 
    If you need to modify STATIC_BLOCK before it is finalized you should
-   call end_symtab_get_static_block and end_symtab_from_static_block
-   yourself.  */
+   call end_compunit_symtab_get_static_block and
+   end_compunit_symtab_from_static_block yourself.  */
 
 struct compunit_symtab *
-buildsym_compunit::end_symtab (CORE_ADDR end_addr, int section)
+buildsym_compunit::end_compunit_symtab (CORE_ADDR end_addr)
 {
   struct block *static_block;
 
-  static_block = end_symtab_get_static_block (end_addr, 0, 0);
-  return end_symtab_from_static_block (static_block, section, 0);
+  static_block = end_compunit_symtab_get_static_block (end_addr, 0, 0);
+  return end_compunit_symtab_from_static_block (static_block, 0);
 }
 
-/* Same as end_symtab except create a symtab that can be later added to.  */
+/* Same as end_compunit_symtab except create a symtab that can be later added
+   to.  */
 
 struct compunit_symtab *
-buildsym_compunit::end_expandable_symtab (CORE_ADDR end_addr, int section)
+buildsym_compunit::end_expandable_symtab (CORE_ADDR end_addr)
 {
   struct block *static_block;
 
-  static_block = end_symtab_get_static_block (end_addr, 1, 0);
-  return end_symtab_from_static_block (static_block, section, 1);
+  static_block = end_compunit_symtab_get_static_block (end_addr, 1, 0);
+  return end_compunit_symtab_from_static_block (static_block, 1);
 }
 
 /* Subroutine of augment_type_symtab to simplify it.
@@ -1171,13 +1079,13 @@ set_missing_symtab (struct pending *pend
     {
       for (i = 0; i < pending->nsyms; ++i)
 	{
-	  if (symbol_symtab (pending->symbol[i]) == NULL)
-	    symbol_set_symtab (pending->symbol[i], COMPUNIT_FILETABS (cu));
+	  if (pending->symbol[i]->symtab () == NULL)
+	    pending->symbol[i]->set_symtab (cu->primary_filetab ());
 	}
     }
 }
 
-/* Same as end_symtab, but for the case where we're adding more symbols
+/* Same as end_compunit_symtab, but for the case where we're adding more symbols
    to an existing symtab that is known to contain only type information.
    This is the case for DWARF4 Type Units.  */
 
@@ -1185,7 +1093,7 @@ void
 buildsym_compunit::augment_type_symtab ()
 {
   struct compunit_symtab *cust = m_compunit_symtab;
-  const struct blockvector *blockvector = COMPUNIT_BLOCKVECTOR (cust);
+  struct blockvector *blockvector = cust->blockvector ();
 
   if (!m_context_stack.empty ())
     complaint (_("Context stack not empty in augment_type_symtab"));
@@ -1198,25 +1106,24 @@ buildsym_compunit::augment_type_symtab (
 
   if (m_file_symbols != NULL)
     {
-      struct block *block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK);
+      struct block *block = blockvector->static_block ();
 
       /* First mark any symbols without a specified symtab as belonging
 	 to the primary symtab.  */
       set_missing_symtab (m_file_symbols, cust);
 
-      mdict_add_pending (BLOCK_MULTIDICT (block), m_file_symbols);
+      mdict_add_pending (block->multidict (), m_file_symbols);
     }
 
   if (m_global_symbols != NULL)
     {
-      struct block *block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
+      struct block *block = blockvector->global_block ();
 
       /* First mark any symbols without a specified symtab as belonging
 	 to the primary symtab.  */
       set_missing_symtab (m_global_symbols, cust);
 
-      mdict_add_pending (BLOCK_MULTIDICT (block),
-			m_global_symbols);
+      mdict_add_pending (block->multidict (), m_global_symbols);
     }
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/buildsym.h ./gdb/buildsym.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/buildsym.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/buildsym.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Build symbol tables in GDB's internal format.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,7 +19,9 @@
 #if !defined (BUILDSYM_H)
 #define BUILDSYM_H 1
 
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
+#include "symtab.h"
+#include "addrmap.h"
 
 struct objfile;
 struct symbol;
@@ -45,18 +47,27 @@ struct dynamic_prop;
 
 struct subfile
 {
-  struct subfile *next;
-  /* Space for this is malloc'd.  */
-  char *name;
-  /* Space for this is malloc'd.  */
-  struct linetable *line_vector;
-  int line_vector_length;
-  /* The "containing" compunit.  */
-  struct buildsym_compunit *buildsym_compunit;
-  enum language language;
-  struct symtab *symtab;
+  subfile () = default;
+
+  /* There's nothing wrong with copying a subfile, but we don't need to, so use
+     this to avoid copying one by mistake.  */
+  DISABLE_COPY_AND_ASSIGN (subfile);
+
+  struct subfile *next = nullptr;
+  std::string name;
+
+  /* This field is analoguous in function to symtab::filename_for_id.
+
+     It is used to look up existing subfiles in calls to start_subfile.  */
+  std::string name_for_id;
+
+  std::vector<linetable_entry> line_vector_entries;
+  enum language language = language_unknown;
+  struct symtab *symtab = nullptr;
 };
 
+using subfile_up = std::unique_ptr<subfile>;
+
 /* Record the symbols defined for each context in a list.  We don't
    create a struct block for the context until we know how long to
    make it.  */
@@ -110,18 +121,48 @@ struct context_stack
 
   };
 
+/* Flags associated with a linetable entry.  */
+
+enum linetable_entry_flag : unsigned
+{
+  /* Indicates this PC is a good location to place a breakpoint at LINE.  */
+  LEF_IS_STMT = 1 << 1,
+
+  /* Indicates this PC is a good location to place a breakpoint at the first
+     instruction past a function prologue.  */
+  LEF_PROLOGUE_END = 1 << 2,
+
+  /* Indicated that this PC is part of the epilogue of a function, making
+     software watchpoints unreliable.  */
+  LEF_EPILOGUE_BEGIN = 1 << 3,
+};
+DEF_ENUM_FLAGS_TYPE (enum linetable_entry_flag, linetable_entry_flags);
+
+
 /* Buildsym's counterpart to struct compunit_symtab.  */
 
 struct buildsym_compunit
 {
   /* Start recording information about a primary source file (IOW, not an
      included source file).
+
      COMP_DIR is the directory in which the compilation unit was compiled
-     (or NULL if not known).  */
+     (or NULL if not known).
+
+     NAME and NAME_FOR_ID have the same purpose as for the start_subfile
+     method.  */
+
+  buildsym_compunit (struct objfile *objfile_, const char *name,
+		     const char *comp_dir_, const char *name_for_id,
+		     enum language language_, CORE_ADDR last_addr);
+
+  /* Same as above, but passes NAME for NAME_FOR_ID.  */
 
   buildsym_compunit (struct objfile *objfile_, const char *name,
 		     const char *comp_dir_, enum language language_,
-		     CORE_ADDR last_addr);
+		     CORE_ADDR last_addr)
+    : buildsym_compunit (objfile_, name, comp_dir_, name, language_, last_addr)
+  {}
 
   /* Reopen an existing compunit_symtab so that additional symbols can
      be added to it.  Arguments are as for the main constructor.  CUST
@@ -132,7 +173,7 @@ struct buildsym_compunit
 		     CORE_ADDR last_addr, struct compunit_symtab *cust)
     : m_objfile (objfile_),
       m_last_source_file (name == nullptr ? nullptr : xstrdup (name)),
-      m_comp_dir (comp_dir_ == nullptr ? nullptr : xstrdup (comp_dir_)),
+      m_comp_dir (comp_dir_ == nullptr ? "" : comp_dir_),
       m_compunit_symtab (cust),
       m_language (language_),
       m_last_source_start_addr (last_addr)
@@ -179,7 +220,22 @@ struct buildsym_compunit
   void record_block_range (struct block *block,
 			   CORE_ADDR start, CORE_ADDR end_inclusive);
 
-  void start_subfile (const char *name);
+  /* Start recording information about source code that comes from a source
+     file.  This sets the current subfile, creating it if necessary.
+
+     NAME is the user-visible name of the subfile.
+
+     NAME_FOR_ID is a name that must be stable between the different calls to
+     start_subfile referring to the same file (it is used for looking up
+     existing subfiles).  It can be equal to NAME if NAME follows that rule.  */
+  void start_subfile (const char *name, const char *name_for_id);
+
+  /* Same as above, but passes NAME for NAME_FOR_ID.  */
+
+  void start_subfile (const char *name)
+  {
+    return start_subfile (name, name);
+  }
 
   void patch_subfile_names (struct subfile *subfile, const char *name);
 
@@ -187,7 +243,8 @@ struct buildsym_compunit
 
   const char *pop_subfile ();
 
-  void record_line (struct subfile *subfile, int line, CORE_ADDR pc);
+  void record_line (struct subfile *subfile, int line, unrelocated_addr pc,
+		    linetable_entry_flags flags);
 
   struct compunit_symtab *get_compunit_symtab ()
   {
@@ -270,16 +327,15 @@ struct buildsym_compunit
 
   struct context_stack pop_context ();
 
-  struct block *end_symtab_get_static_block (CORE_ADDR end_addr,
-					     int expandable, int required);
+  struct block *end_compunit_symtab_get_static_block
+    (CORE_ADDR end_addr, int expandable, int required);
 
-  struct compunit_symtab *end_symtab_from_static_block
-      (struct block *static_block, int section, int expandable);
+  struct compunit_symtab *end_compunit_symtab_from_static_block
+    (struct block *static_block, int expandable);
 
-  struct compunit_symtab *end_symtab (CORE_ADDR end_addr, int section);
+  struct compunit_symtab *end_compunit_symtab (CORE_ADDR end_addr);
 
-  struct compunit_symtab *end_expandable_symtab (CORE_ADDR end_addr,
-						 int section);
+  struct compunit_symtab *end_expandable_symtab (CORE_ADDR end_addr);
 
   void augment_type_symtab ();
 
@@ -298,8 +354,8 @@ private:
 
   void watch_main_source_file_lossage ();
 
-  struct compunit_symtab *end_symtab_with_blockvector
-      (struct block *static_block, int section, int expandable);
+  struct compunit_symtab *end_compunit_symtab_with_blockvector
+    (struct block *static_block, int expandable);
 
   /* The objfile we're reading debug info from.  */
   struct objfile *m_objfile;
@@ -319,7 +375,7 @@ private:
   gdb::unique_xmalloc_ptr<char> m_last_source_file;
 
   /* E.g., DW_AT_comp_dir if DWARF.  Space for this is malloc'd.  */
-  gdb::unique_xmalloc_ptr<char> m_comp_dir;
+  std::string m_comp_dir;
 
   /* Space for this is not malloc'd, and is assumed to have at least
      the same lifetime as objfile.  */
@@ -366,12 +422,7 @@ private:
   /* The mutable address map for the compilation unit whose symbols
      we're currently reading.  The symtabs' shared blockvector will
      point to a fixed copy of this.  */
-  struct addrmap *m_pending_addrmap = nullptr;
-
-  /* The obstack on which we allocate pending_addrmap.
-     If pending_addrmap is NULL, this is uninitialized; otherwise, it is
-     initialized (and holds pending_addrmap).  */
-  auto_obstack m_pending_addrmap_obstack;
+  struct addrmap_mutable m_pending_addrmap;
 
   /* True if we recorded any ranges in the addrmap that are different
      from those in the blockvector already.  We set this to false when
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/buildsym-legacy.c ./gdb/buildsym-legacy.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/buildsym-legacy.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/buildsym-legacy.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Legacy support routines for building symbol tables in GDB's internal format.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,7 @@
 #include "symtab.h"
 
 /* The work-in-progress of the compunit we are building.
-   This is created first, before any subfiles by start_symtab.  */
+   This is created first, before any subfiles by start_compunit_symtab.  */
 
 static struct buildsym_compunit *buildsym_compunit;
 
@@ -79,33 +79,6 @@ get_last_source_start_addr ()
 
 /* See buildsym.h.  */
 
-struct using_direct **
-get_local_using_directives ()
-{
-  gdb_assert (buildsym_compunit != nullptr);
-  return buildsym_compunit->get_local_using_directives ();
-}
-
-/* See buildsym.h.  */
-
-void
-set_local_using_directives (struct using_direct *new_local)
-{
-  gdb_assert (buildsym_compunit != nullptr);
-  buildsym_compunit->set_local_using_directives (new_local);
-}
-
-/* See buildsym.h.  */
-
-struct using_direct **
-get_global_using_directives ()
-{
-  gdb_assert (buildsym_compunit != nullptr);
-  return buildsym_compunit->get_global_using_directives ();
-}
-
-/* See buildsym.h.  */
-
 bool
 outermost_context_p ()
 {
@@ -115,15 +88,6 @@ outermost_context_p ()
 
 /* See buildsym.h.  */
 
-struct context_stack *
-get_current_context_stack ()
-{
-  gdb_assert (buildsym_compunit != nullptr);
-  return buildsym_compunit->get_current_context_stack ();
-}
-
-/* See buildsym.h.  */
-
 int
 get_context_stack_depth ()
 {
@@ -207,11 +171,11 @@ free_buildsym_compunit (void)
 }
 
 struct compunit_symtab *
-end_symtab (CORE_ADDR end_addr, int section)
+end_compunit_symtab (CORE_ADDR end_addr)
 {
   gdb_assert (buildsym_compunit != nullptr);
   struct compunit_symtab *result
-    = buildsym_compunit->end_symtab (end_addr, section);
+    = buildsym_compunit->end_compunit_symtab (end_addr);
   free_buildsym_compunit ();
   return result;
 }
@@ -241,24 +205,18 @@ finish_block (struct symbol *symbol, str
 }
 
 void
-record_block_range (struct block *block, CORE_ADDR start,
-		    CORE_ADDR end_inclusive)
+record_line (struct subfile *subfile, int line, unrelocated_addr pc)
 {
   gdb_assert (buildsym_compunit != nullptr);
-  buildsym_compunit->record_block_range (block, start, end_inclusive);
+  /* Assume every line entry is a statement start, that is a good place to
+     put a breakpoint for that line number.  */
+  buildsym_compunit->record_line (subfile, line, pc, LEF_IS_STMT);
 }
 
-void
-record_line (struct subfile *subfile, int line, CORE_ADDR pc)
-{
-  gdb_assert (buildsym_compunit != nullptr);
-  buildsym_compunit->record_line (subfile, line, pc);
-}
-
-/* Start a new symtab for a new source file in OBJFILE.  Called, for example,
-   when a stabs symbol of type N_SO is seen, or when a DWARF
-   TAG_compile_unit DIE is seen.  It indicates the start of data for
-   one original source file.
+/* Start a new compunit_symtab for a new source file in OBJFILE.  Called, for
+   example, when a stabs symbol of type N_SO is seen, or when a DWARF
+   DW_TAG_compile_unit DIE is seen.  It indicates the start of data for one
+   original source file.
 
    NAME is the name of the file (cannot be NULL).  COMP_DIR is the
    directory in which the file was compiled (or NULL if not known).
@@ -268,8 +226,9 @@ record_line (struct subfile *subfile, in
    the filename.  */
 
 struct compunit_symtab *
-start_symtab (struct objfile *objfile, const char *name, const char *comp_dir,
-	      CORE_ADDR start_addr, enum language language)
+start_compunit_symtab (struct objfile *objfile, const char *name,
+		       const char *comp_dir, CORE_ADDR start_addr,
+		       enum language language)
 {
   /* These should have been reset either by successful completion of building
      a symtab, or by the scoped_free_pendings destructor.  */
@@ -281,51 +240,6 @@ start_symtab (struct objfile *objfile, c
   return buildsym_compunit->get_compunit_symtab ();
 }
 
-/* Restart compilation for a symtab.
-   CUST is the result of end_expandable_symtab.
-   NAME, START_ADDR are the source file we are resuming with.
-
-   This is used when a symtab is built from multiple sources.
-   The symtab is first built with start_symtab/end_expandable_symtab
-   and then for each additional piece call restart_symtab/augment_*_symtab.
-   Note: At the moment there is only augment_type_symtab.  */
-
-void
-restart_symtab (struct compunit_symtab *cust,
-		const char *name, CORE_ADDR start_addr)
-{
-  /* These should have been reset either by successful completion of building
-     a symtab, or by the scoped_free_pendings destructor.  */
-  gdb_assert (buildsym_compunit == nullptr);
-
-  buildsym_compunit
-    = new struct buildsym_compunit (COMPUNIT_OBJFILE (cust),
-				    name,
-				    COMPUNIT_DIRNAME (cust),
-				    compunit_language (cust),
-				    start_addr,
-				    cust);
-}
-
-/* See buildsym.h.  */
-
-struct compunit_symtab *
-buildsym_compunit_symtab (void)
-{
-  gdb_assert (buildsym_compunit != NULL);
-
-  return buildsym_compunit->get_compunit_symtab ();
-}
-
-/* See buildsym.h.  */
-
-struct macro_table *
-get_macro_table (void)
-{
-  gdb_assert (buildsym_compunit != NULL);
-  return buildsym_compunit->get_macro_table ();
-}
-
 /* At end of reading syms, or in case of quit, ensure everything
    associated with building symtabs is freed.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/buildsym-legacy.h ./gdb/buildsym-legacy.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/buildsym-legacy.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/buildsym-legacy.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Build symbol tables in GDB's internal format - legacy APIs
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,20 +30,20 @@
    The basic way this module is used is as follows:
 
    scoped_free_pendings free_pending;
-   cust = start_symtab (...);
+   cust = start_compunit_symtab (...);
    ... read debug info ...
-   cust = end_symtab (...);
+   cust = end_compunit_symtab (...);
 
-   The compunit symtab pointer ("cust") is returned from both start_symtab
-   and end_symtab to simplify the debug info readers.
+   The compunit symtab pointer ("cust") is returned from both
+   start_compunit_symtab and end_compunit_symtab to simplify the debug info readers.
 
    dbxread.c and xcoffread.c use another variation:
 
    scoped_free_pendings free_pending;
-   cust = start_symtab (...);
+   cust = start_compunit_symtab (...);
    ... read debug info ...
-   cust = end_symtab (...);
-   ... start_symtab + read + end_symtab repeated ...
+   cust = end_compunit_symtab (...);
+   ... start_compunit_symtab + read + end_compunit_symtab repeated ...
 */
 
 class scoped_free_pendings
@@ -62,9 +62,6 @@ extern struct block *finish_block (struc
 				   CORE_ADDR start,
 				   CORE_ADDR end);
 
-extern void record_block_range (struct block *,
-                                CORE_ADDR start, CORE_ADDR end_inclusive);
-
 extern void start_subfile (const char *name);
 
 extern void patch_subfile_names (struct subfile *subfile, const char *name);
@@ -73,22 +70,20 @@ extern void push_subfile ();
 
 extern const char *pop_subfile ();
 
-extern struct compunit_symtab *end_symtab (CORE_ADDR end_addr, int section);
+extern struct compunit_symtab *end_compunit_symtab (CORE_ADDR end_addr);
 
 extern struct context_stack *push_context (int desc, CORE_ADDR valu);
 
 extern struct context_stack pop_context ();
 
-extern void record_line (struct subfile *subfile, int line, CORE_ADDR pc);
-
-extern struct compunit_symtab *start_symtab (struct objfile *objfile,
-					     const char *name,
-					     const char *comp_dir,
-					     CORE_ADDR start_addr,
-					     enum language language);
+extern void record_line (struct subfile *subfile, int line,
+			 unrelocated_addr pc);
 
-extern void restart_symtab (struct compunit_symtab *cust,
-			    const char *name, CORE_ADDR start_addr);
+extern struct compunit_symtab *start_compunit_symtab (struct objfile *objfile,
+						      const char *name,
+						      const char *comp_dir,
+						      CORE_ADDR start_addr,
+						      enum language language);
 
 /* Record the name of the debug format in the current pending symbol
    table.  FORMAT must be a string with a lifetime at least as long as
@@ -111,50 +106,20 @@ extern void set_last_source_file (const
 
 extern const char *get_last_source_file (void);
 
-/* Return the compunit symtab object.
-   It is only valid to call this between calls to start_symtab and the
-   end_symtab* functions.  */
-
-extern struct compunit_symtab *buildsym_compunit_symtab (void);
-
-/* Return the macro table.
-   Initialize it if this is the first use.
-   It is only valid to call this between calls to start_symtab and the
-   end_symtab* functions.  */
-
-extern struct macro_table *get_macro_table (void);
-
 /* Set the last source start address.  Can only be used between
-   start_symtab and end_symtab* calls.  */
+   start_compunit_symtab and end_compunit_symtab* calls.  */
 
 extern void set_last_source_start_addr (CORE_ADDR addr);
 
 /* Get the last source start address.  Can only be used between
-   start_symtab and end_symtab* calls.  */
+   start_compunit_symtab and end_compunit_symtab* calls.  */
 
 extern CORE_ADDR get_last_source_start_addr ();
 
-/* Return the local using directives.  */
-
-extern struct using_direct **get_local_using_directives ();
-
-/* Set the list of local using directives.  */
-
-extern void set_local_using_directives (struct using_direct *new_local);
-
-/* Return the global using directives.  */
-
-extern struct using_direct **get_global_using_directives ();
-
 /* True if the context stack is empty.  */
 
 extern bool outermost_context_p ();
 
-/* Return the top of the context stack, or nullptr if there is an
-   entry.  */
-
-extern struct context_stack *get_current_context_stack ();
-
 /* Return the context stack depth.  */
 
 extern int get_context_stack_depth ();
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-exp.c ./gdb/c-exp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-exp.c	2019-12-11 01:52:52.000000000 +0000
+++ ./gdb/c-exp.c	2024-02-01 01:52:09.000000000 +0000
@@ -1,21 +1,19 @@
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* Bison implementation for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-   
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -28,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -46,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.0.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,15 +58,11 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
 /* Copy the first part of user declarations.  */
-
-/* Line 189 of yacc.c  */
-#line 36 "c-exp.y"
+#line 36 "c-exp.y" /* yacc.c:339  */
 
 
 #include "defs.h"
@@ -79,9 +73,6 @@
 #include "language.h"
 #include "c-lang.h"
 #include "c-support.h"
-#include "bfd.h" /* Required by objfiles.h.  */
-#include "symfile.h" /* Required by objfiles.h.  */
-#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
 #include "charset.h"
 #include "block.h"
 #include "cp-support.h"
@@ -90,6 +81,8 @@
 #include "typeprint.h"
 #include "cp-abi.h"
 #include "type-stack.h"
+#include "target-float.h"
+#include "c-exp.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 
@@ -158,15 +151,17 @@ static void yyerror (const char *);
 
 static int type_aggregate_p (struct type *);
 
+using namespace expr;
 
+#line 157 "c-exp.c.tmp" /* yacc.c:339  */
 
-/* Line 189 of yacc.c  */
-#line 165 "c-exp.c.tmp"
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULLPTRPTR nullptr
+#  else
+#   define YY_NULLPTRPTR 0
+#  endif
+# endif
 
 /* Enabling verbose error messages.  */
 #ifdef YYERROR_VERBOSE
@@ -176,157 +171,168 @@ static int type_aggregate_p (struct type
 # define YYERROR_VERBOSE 0
 #endif
 
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
 
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
 
-/* Tokens.  */
+/* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     INT = 258,
-     FLOAT = 259,
-     STRING = 260,
-     NSSTRING = 261,
-     SELECTOR = 262,
-     CHAR = 263,
-     NAME = 264,
-     UNKNOWN_CPP_NAME = 265,
-     COMPLETE = 266,
-     TYPENAME = 267,
-     CLASSNAME = 268,
-     OBJC_LBRAC = 269,
-     NAME_OR_INT = 270,
-     OPERATOR = 271,
-     STRUCT = 272,
-     CLASS = 273,
-     UNION = 274,
-     ENUM = 275,
-     SIZEOF = 276,
-     ALIGNOF = 277,
-     UNSIGNED = 278,
-     COLONCOLON = 279,
-     TEMPLATE = 280,
-     ERROR = 281,
-     NEW = 282,
-     DELETE = 283,
-     REINTERPRET_CAST = 284,
-     DYNAMIC_CAST = 285,
-     STATIC_CAST = 286,
-     CONST_CAST = 287,
-     ENTRY = 288,
-     TYPEOF = 289,
-     DECLTYPE = 290,
-     TYPEID = 291,
-     SIGNED_KEYWORD = 292,
-     LONG = 293,
-     SHORT = 294,
-     INT_KEYWORD = 295,
-     CONST_KEYWORD = 296,
-     VOLATILE_KEYWORD = 297,
-     DOUBLE_KEYWORD = 298,
-     DOLLAR_VARIABLE = 299,
-     ASSIGN_MODIFY = 300,
-     TRUEKEYWORD = 301,
-     FALSEKEYWORD = 302,
-     ABOVE_COMMA = 303,
-     OROR = 304,
-     ANDAND = 305,
-     NOTEQUAL = 306,
-     EQUAL = 307,
-     GEQ = 308,
-     LEQ = 309,
-     RSH = 310,
-     LSH = 311,
-     DECREMENT = 312,
-     INCREMENT = 313,
-     UNARY = 314,
-     DOT_STAR = 315,
-     ARROW_STAR = 316,
-     ARROW = 317,
-     BLOCKNAME = 318,
-     FILENAME = 319,
-     DOTDOTDOT = 320
-   };
+  enum yytokentype
+  {
+    INT = 258,
+    COMPLEX_INT = 259,
+    FLOAT = 260,
+    COMPLEX_FLOAT = 261,
+    STRING = 262,
+    NSSTRING = 263,
+    SELECTOR = 264,
+    CHAR = 265,
+    NAME = 266,
+    UNKNOWN_CPP_NAME = 267,
+    COMPLETE = 268,
+    TYPENAME = 269,
+    CLASSNAME = 270,
+    OBJC_LBRAC = 271,
+    NAME_OR_INT = 272,
+    OPERATOR = 273,
+    STRUCT = 274,
+    CLASS = 275,
+    UNION = 276,
+    ENUM = 277,
+    SIZEOF = 278,
+    ALIGNOF = 279,
+    UNSIGNED = 280,
+    COLONCOLON = 281,
+    TEMPLATE = 282,
+    ERROR = 283,
+    NEW = 284,
+    DELETE = 285,
+    REINTERPRET_CAST = 286,
+    DYNAMIC_CAST = 287,
+    STATIC_CAST = 288,
+    CONST_CAST = 289,
+    ENTRY = 290,
+    TYPEOF = 291,
+    DECLTYPE = 292,
+    TYPEID = 293,
+    SIGNED_KEYWORD = 294,
+    LONG = 295,
+    SHORT = 296,
+    INT_KEYWORD = 297,
+    CONST_KEYWORD = 298,
+    VOLATILE_KEYWORD = 299,
+    DOUBLE_KEYWORD = 300,
+    RESTRICT = 301,
+    ATOMIC = 302,
+    FLOAT_KEYWORD = 303,
+    COMPLEX = 304,
+    DOLLAR_VARIABLE = 305,
+    ASSIGN_MODIFY = 306,
+    TRUEKEYWORD = 307,
+    FALSEKEYWORD = 308,
+    ABOVE_COMMA = 309,
+    OROR = 310,
+    ANDAND = 311,
+    EQUAL = 312,
+    NOTEQUAL = 313,
+    LEQ = 314,
+    GEQ = 315,
+    LSH = 316,
+    RSH = 317,
+    UNARY = 318,
+    INCREMENT = 319,
+    DECREMENT = 320,
+    ARROW = 321,
+    ARROW_STAR = 322,
+    DOT_STAR = 323,
+    BLOCKNAME = 324,
+    FILENAME = 325,
+    DOTDOTDOT = 326
+  };
 #endif
 /* Tokens.  */
 #define INT 258
-#define FLOAT 259
-#define STRING 260
-#define NSSTRING 261
-#define SELECTOR 262
-#define CHAR 263
-#define NAME 264
-#define UNKNOWN_CPP_NAME 265
-#define COMPLETE 266
-#define TYPENAME 267
-#define CLASSNAME 268
-#define OBJC_LBRAC 269
-#define NAME_OR_INT 270
-#define OPERATOR 271
-#define STRUCT 272
-#define CLASS 273
-#define UNION 274
-#define ENUM 275
-#define SIZEOF 276
-#define ALIGNOF 277
-#define UNSIGNED 278
-#define COLONCOLON 279
-#define TEMPLATE 280
-#define ERROR 281
-#define NEW 282
-#define DELETE 283
-#define REINTERPRET_CAST 284
-#define DYNAMIC_CAST 285
-#define STATIC_CAST 286
-#define CONST_CAST 287
-#define ENTRY 288
-#define TYPEOF 289
-#define DECLTYPE 290
-#define TYPEID 291
-#define SIGNED_KEYWORD 292
-#define LONG 293
-#define SHORT 294
-#define INT_KEYWORD 295
-#define CONST_KEYWORD 296
-#define VOLATILE_KEYWORD 297
-#define DOUBLE_KEYWORD 298
-#define DOLLAR_VARIABLE 299
-#define ASSIGN_MODIFY 300
-#define TRUEKEYWORD 301
-#define FALSEKEYWORD 302
-#define ABOVE_COMMA 303
-#define OROR 304
-#define ANDAND 305
-#define NOTEQUAL 306
-#define EQUAL 307
-#define GEQ 308
-#define LEQ 309
-#define RSH 310
-#define LSH 311
-#define DECREMENT 312
-#define INCREMENT 313
-#define UNARY 314
-#define DOT_STAR 315
-#define ARROW_STAR 316
-#define ARROW 317
-#define BLOCKNAME 318
-#define FILENAME 319
-#define DOTDOTDOT 320
-
+#define COMPLEX_INT 259
+#define FLOAT 260
+#define COMPLEX_FLOAT 261
+#define STRING 262
+#define NSSTRING 263
+#define SELECTOR 264
+#define CHAR 265
+#define NAME 266
+#define UNKNOWN_CPP_NAME 267
+#define COMPLETE 268
+#define TYPENAME 269
+#define CLASSNAME 270
+#define OBJC_LBRAC 271
+#define NAME_OR_INT 272
+#define OPERATOR 273
+#define STRUCT 274
+#define CLASS 275
+#define UNION 276
+#define ENUM 277
+#define SIZEOF 278
+#define ALIGNOF 279
+#define UNSIGNED 280
+#define COLONCOLON 281
+#define TEMPLATE 282
+#define ERROR 283
+#define NEW 284
+#define DELETE 285
+#define REINTERPRET_CAST 286
+#define DYNAMIC_CAST 287
+#define STATIC_CAST 288
+#define CONST_CAST 289
+#define ENTRY 290
+#define TYPEOF 291
+#define DECLTYPE 292
+#define TYPEID 293
+#define SIGNED_KEYWORD 294
+#define LONG 295
+#define SHORT 296
+#define INT_KEYWORD 297
+#define CONST_KEYWORD 298
+#define VOLATILE_KEYWORD 299
+#define DOUBLE_KEYWORD 300
+#define RESTRICT 301
+#define ATOMIC 302
+#define FLOAT_KEYWORD 303
+#define COMPLEX 304
+#define DOLLAR_VARIABLE 305
+#define ASSIGN_MODIFY 306
+#define TRUEKEYWORD 307
+#define FALSEKEYWORD 308
+#define ABOVE_COMMA 309
+#define OROR 310
+#define ANDAND 311
+#define EQUAL 312
+#define NOTEQUAL 313
+#define LEQ 314
+#define GEQ 315
+#define LSH 316
+#define RSH 317
+#define UNARY 318
+#define INCREMENT 319
+#define DECREMENT 320
+#define ARROW 321
+#define ARROW_STAR 322
+#define DOT_STAR 323
+#define BLOCKNAME 324
+#define FILENAME 325
+#define DOTDOTDOT 326
 
+/* Value type.  */
+#if ! defined c_exp_YYSTYPE && ! defined c_exp_YYSTYPE_IS_DECLARED
 
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union c_exp_YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
-#line 132 "c-exp.y"
+#line 132 "c-exp.y" /* yacc.c:355  */
 
     LONGEST lval;
     struct {
@@ -354,38 +360,37 @@ typedef union YYSTYPE
     struct objc_class_str theclass;
   
 
+#line 364 "c-exp.c.tmp" /* yacc.c:355  */
+};
 
-/* Line 214 of yacc.c  */
-#line 360 "c-exp.c.tmp"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
+typedef union c_exp_YYSTYPE c_exp_YYSTYPE;
+# define c_exp_YYSTYPE_IS_TRIVIAL 1
+# define c_exp_YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
+extern c_exp_YYSTYPE yylval;
+
+int yyparse (void);
 
-/* Line 264 of yacc.c  */
-#line 159 "c-exp.y"
 
-/* YYSTYPE gets defined by %union */
+
+/* Copy the second part of user declarations.  */
+#line 159 "c-exp.y" /* yacc.c:358  */
+
+/* c_exp_YYSTYPE gets defined by %union */
 static int parse_number (struct parser_state *par_state,
-			 const char *, int, int, YYSTYPE *);
+			 const char *, int, int, c_exp_YYSTYPE *);
 static struct stoken operator_stoken (const char *);
 static struct stoken typename_stoken (const char *);
 static void check_parameter_typelist (std::vector<struct type *> *);
-static void write_destructor_name (struct parser_state *par_state,
-				   struct stoken);
 
-#ifdef YYBISON
-static void c_print_token (FILE *file, int type, YYSTYPE value);
+#if defined(YYBISON) && YYBISON < 30800
+static void c_print_token (FILE *file, int type, c_exp_YYSTYPE value);
 #define YYPRINT(FILE, TYPE, VALUE) c_print_token (FILE, TYPE, VALUE)
 #endif
 
-
-/* Line 264 of yacc.c  */
-#line 389 "c-exp.c.tmp"
+#line 394 "c-exp.c.tmp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -399,11 +404,8 @@ typedef unsigned char yytype_uint8;
 
 #ifdef YYTYPE_INT8
 typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
 #ifdef YYTYPE_UINT16
@@ -423,8 +425,7 @@ typedef short int yytype_int16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -435,42 +436,71 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
 #  endif
 # endif
 # ifndef YY_
-#  define YY_(msgid) msgid
+#  define YY_(Msgid) Msgid
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+#  define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
 # endif
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
+# define YYUSE(E) ((void) (E))
 #else
-# define YYUSE(e) /* empty */
+# define YYUSE(E) /* empty */
 #endif
 
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
 #else
-static int
-YYID (yyi)
-    int yyi;
+# define YY_INITIAL_VALUE(Value) Value
 #endif
-{
-  return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
 #endif
 
+
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
 /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
@@ -487,11 +517,11 @@ YYID (yyi)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
+      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
 #     endif
 #    endif
 #   endif
@@ -499,8 +529,8 @@ YYID (yyi)
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+   /* Pacify GCC's 'empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -514,25 +544,23 @@ YYID (yyi)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined xmalloc) \
-	     && (defined YYFREE || defined xfree)))
+             && (defined YYFREE || defined xfree)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC xmalloc
-#   if ! defined xmalloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined xmalloc && ! defined EXIT_SUCCESS
 void *xmalloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE xfree
-#   if ! defined xfree && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined xfree && ! defined EXIT_SUCCESS
 void xfree (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -542,97 +570,103 @@ void xfree (void *); /* INFRINGES ON USE
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined c_exp_YYSTYPE_IS_TRIVIAL && c_exp_YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
-union yyalloc
+union c_exp_yyalloc
 {
   yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
+  c_exp_YYSTYPE yyvs_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (sizeof (union c_exp_yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+     ((N) * (sizeof (yytype_int16) + sizeof (c_exp_YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
+# define YYCOPY_NEEDED 1
 
 /* Relocate STACK from its old location to the new one.  The
    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
+    do                                                                  \
+      {                                                                 \
+        YYSIZE_T yynewbytes;                                            \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                 \
+    while (0)
 
 #endif
 
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(Dst, Src, Count) \
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYSIZE_T yyi;                         \
+          for (yyi = 0; yyi < (Count); yyi++)   \
+            (Dst)[yyi] = (Src)[yyi];            \
+        }                                       \
+      while (0)
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  171
+#define YYFINAL  177
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1712
+#define YYLAST   1742
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  90
+#define YYNTOKENS  96
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  50
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  275
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  432
+#define YYNRULES  285
+/* YYNSTATES -- Number of states.  */
+#define YYNSTATES  442
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   320
+#define YYMAXUTOK   326
 
-#define YYTRANSLATE(YYX)						\
+#define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, without out-of-bounds checking.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    84,     2,     2,     2,    70,    56,     2,
-      76,    83,    68,    66,    48,    67,    74,    69,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    87,     2,
-      59,    50,    60,    51,    65,     2,     2,     2,     2,     2,
+       2,     2,     2,    90,     2,     2,     2,    76,    62,     2,
+      85,    89,    74,    72,    54,    73,    82,    75,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    93,     2,
+      65,    56,    66,    57,    71,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    75,     2,    86,    55,     2,     2,     2,     2,     2,
+       2,    84,     2,    92,    61,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    88,    54,    89,    85,     2,     2,     2,
+       2,     2,     2,    94,    60,    95,    91,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -650,911 +684,747 @@ static const yytype_uint8 yytranslate[]
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    49,    52,    53,    57,    58,    61,    62,
-      63,    64,    71,    72,    73,    77,    78,    79,    80,    81,
-      82
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    55,
+      58,    59,    63,    64,    67,    68,    69,    70,    77,    78,
+      79,    80,    81,    83,    86,    87,    88
 };
 
 #if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     5,     7,     9,    14,    19,    24,    26,
-      30,    33,    36,    39,    42,    45,    48,    51,    54,    57,
-      60,    65,    70,    73,    78,    82,    87,    91,    96,   102,
-     106,   110,   114,   119,   123,   128,   134,   138,   142,   147,
-     152,   153,   159,   160,   166,   167,   173,   175,   177,   179,
-     182,   186,   189,   192,   193,   199,   203,   204,   210,   212,
-     213,   215,   219,   225,   230,   232,   234,   236,   240,   242,
-     246,   251,   256,   260,   264,   268,   272,   276,   280,   284,
-     288,   292,   296,   300,   304,   308,   312,   316,   320,   324,
-     328,   332,   336,   342,   346,   350,   352,   354,   356,   358,
-     360,   362,   367,   372,   380,   388,   396,   404,   406,   409,
-     411,   413,   415,   417,   419,   421,   425,   428,   432,   436,
-     441,   447,   449,   452,   454,   457,   459,   460,   464,   466,
-     468,   470,   471,   472,   477,   478,   482,   484,   487,   489,
-     492,   494,   497,   499,   501,   505,   508,   510,   513,   515,
-     518,   521,   525,   529,   532,   536,   538,   540,   542,   544,
-     546,   549,   553,   556,   560,   564,   568,   571,   574,   578,
-     583,   587,   591,   596,   600,   605,   609,   614,   617,   621,
-     624,   628,   631,   635,   637,   640,   643,   646,   650,   653,
-     656,   660,   663,   666,   670,   673,   676,   680,   683,   685,
-     688,   690,   696,   699,   702,   704,   706,   708,   710,   712,
-     716,   718,   722,   724,   727,   730,   731,   734,   737,   740,
-     742,   744,   746,   749,   752,   757,   762,   767,   772,   775,
-     778,   781,   784,   787,   790,   793,   796,   799,   802,   805,
-     808,   811,   814,   817,   820,   823,   826,   829,   832,   835,
-     838,   841,   844,   847,   850,   853,   857,   861,   865,   868,
-     870,   872,   874,   876,   878,   880,   882,   884,   886,   888,
-     890,   892,   894,   896,   898,   900
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int16 yyrhs[] =
-{
-      91,     0,    -1,    93,    -1,    92,    -1,   126,    -1,    34,
-      76,    94,    83,    -1,    34,    76,   126,    83,    -1,    35,
-      76,    94,    83,    -1,    94,    -1,    93,    48,    94,    -1,
-      68,    94,    -1,    56,    94,    -1,    67,    94,    -1,    66,
-      94,    -1,    84,    94,    -1,    85,    94,    -1,    72,    94,
-      -1,    71,    94,    -1,    94,    72,    -1,    94,    71,    -1,
-      36,    76,    94,    83,    -1,    36,    76,    92,    83,    -1,
-      21,    94,    -1,    22,    76,    92,    83,    -1,    94,    79,
-     137,    -1,    94,    79,   137,    11,    -1,    94,    79,    11,
-      -1,    94,    79,    85,   138,    -1,    94,    79,    85,   138,
-      11,    -1,    94,    79,   112,    -1,    94,    78,    94,    -1,
-      94,    74,   137,    -1,    94,    74,   137,    11,    -1,    94,
-      74,    11,    -1,    94,    74,    85,   138,    -1,    94,    74,
-      85,   138,    11,    -1,    94,    74,   112,    -1,    94,    77,
-      94,    -1,    94,    75,    93,    86,    -1,    94,    14,    93,
-      86,    -1,    -1,    14,    12,    95,    98,    86,    -1,    -1,
-      14,    13,    96,    98,    86,    -1,    -1,    14,    94,    97,
-      98,    86,    -1,   138,    -1,    99,    -1,   100,    -1,    99,
-     100,    -1,   138,    87,    94,    -1,    87,    94,    -1,    48,
-      94,    -1,    -1,    94,    76,   101,   104,    83,    -1,    94,
-      76,    83,    -1,    -1,    10,    76,   102,   104,    83,    -1,
-      88,    -1,    -1,    94,    -1,   104,    48,    94,    -1,    94,
-      76,   129,    83,   114,    -1,    94,    76,    83,   114,    -1,
-     105,    -1,   105,    -1,   106,    -1,   107,    24,   138,    -1,
-      89,    -1,   103,   104,   108,    -1,   103,    92,   108,    94,
-      -1,    76,    92,    83,    94,    -1,    76,    93,    83,    -1,
-      94,    65,    94,    -1,    94,    68,    94,    -1,    94,    69,
-      94,    -1,    94,    70,    94,    -1,    94,    66,    94,    -1,
-      94,    67,    94,    -1,    94,    64,    94,    -1,    94,    63,
-      94,    -1,    94,    58,    94,    -1,    94,    57,    94,    -1,
-      94,    62,    94,    -1,    94,    61,    94,    -1,    94,    59,
-      94,    -1,    94,    60,    94,    -1,    94,    56,    94,    -1,
-      94,    55,    94,    -1,    94,    54,    94,    -1,    94,    53,
-      94,    -1,    94,    52,    94,    -1,    94,    51,    94,    87,
-      94,    -1,    94,    50,    94,    -1,    94,    45,    94,    -1,
-       3,    -1,     8,    -1,    15,    -1,     4,    -1,   111,    -1,
-      44,    -1,     7,    76,   138,    83,    -1,    21,    76,   126,
-      83,    -1,    29,    59,    92,    60,    76,    94,    83,    -1,
-      31,    59,    92,    60,    76,    94,    83,    -1,    30,    59,
-      92,    60,    76,    94,    83,    -1,    32,    59,    92,    60,
-      76,    94,    83,    -1,     5,    -1,   109,     5,    -1,   109,
-      -1,     6,    -1,    46,    -1,    47,    -1,    80,    -1,    81,
-      -1,   110,    24,   138,    -1,   139,    33,    -1,   110,    24,
-     138,    -1,    12,    24,   138,    -1,    12,    24,    85,   138,
-      -1,    12,    24,   138,    24,   138,    -1,   112,    -1,    24,
-     139,    -1,   139,    -1,    65,     9,    -1,   135,    -1,    -1,
-     114,   113,   114,    -1,   115,    -1,   135,    -1,   116,    -1,
-      -1,    -1,   118,    68,   119,   117,    -1,    -1,    68,   120,
-     117,    -1,    56,    -1,    56,   118,    -1,    53,    -1,    53,
-     118,    -1,   118,    -1,   121,   123,    -1,   121,    -1,   123,
-      -1,    76,   122,    83,    -1,   123,   124,    -1,   124,    -1,
-     123,   125,    -1,   125,    -1,    75,    86,    -1,    14,    86,
-      -1,    75,     3,    86,    -1,    14,     3,    86,    -1,    76,
-      83,    -1,    76,   129,    83,    -1,   131,    -1,    12,    -1,
-      40,    -1,    38,    -1,    39,    -1,    38,    40,    -1,    38,
-      37,    40,    -1,    38,    37,    -1,    37,    38,    40,    -1,
-      23,    38,    40,    -1,    38,    23,    40,    -1,    38,    23,
-      -1,    38,    38,    -1,    38,    38,    40,    -1,    38,    38,
-      37,    40,    -1,    38,    38,    37,    -1,    37,    38,    38,
-      -1,    37,    38,    38,    40,    -1,    23,    38,    38,    -1,
-      23,    38,    38,    40,    -1,    38,    38,    23,    -1,    38,
-      38,    23,    40,    -1,    39,    40,    -1,    39,    37,    40,
-      -1,    39,    37,    -1,    23,    39,    40,    -1,    39,    23,
-      -1,    39,    23,    40,    -1,    43,    -1,    38,    43,    -1,
-      17,   138,    -1,    17,    11,    -1,    17,   138,    11,    -1,
-      18,   138,    -1,    18,    11,    -1,    18,   138,    11,    -1,
-      19,   138,    -1,    19,    11,    -1,    19,   138,    11,    -1,
-      20,   138,    -1,    20,    11,    -1,    20,   138,    11,    -1,
-      23,   128,    -1,    23,    -1,    37,   128,    -1,    37,    -1,
-      25,   138,    59,   126,    60,    -1,   116,   127,    -1,   127,
-     116,    -1,    12,    -1,    40,    -1,    38,    -1,    39,    -1,
-     130,    -1,   130,    48,    82,    -1,   126,    -1,   130,    48,
-     126,    -1,   127,    -1,   131,   122,    -1,   127,   133,    -1,
-      -1,   118,   133,    -1,    41,    42,    -1,    42,    41,    -1,
-     134,    -1,    41,    -1,    42,    -1,    16,    27,    -1,    16,
-      28,    -1,    16,    27,    75,    86,    -1,    16,    28,    75,
-      86,    -1,    16,    27,    14,    86,    -1,    16,    28,    14,
-      86,    -1,    16,    66,    -1,    16,    67,    -1,    16,    68,
-      -1,    16,    69,    -1,    16,    70,    -1,    16,    55,    -1,
-      16,    56,    -1,    16,    54,    -1,    16,    85,    -1,    16,
-      84,    -1,    16,    50,    -1,    16,    59,    -1,    16,    60,
-      -1,    16,    45,    -1,    16,    64,    -1,    16,    63,    -1,
-      16,    58,    -1,    16,    57,    -1,    16,    62,    -1,    16,
-      61,    -1,    16,    53,    -1,    16,    52,    -1,    16,    72,
-      -1,    16,    71,    -1,    16,    48,    -1,    16,    78,    -1,
-      16,    79,    -1,    16,    76,    83,    -1,    16,    75,    86,
-      -1,    16,    14,    86,    -1,    16,   132,    -1,   138,    -1,
-      43,    -1,    40,    -1,    38,    -1,    39,    -1,    37,    -1,
-      23,    -1,     9,    -1,    80,    -1,    12,    -1,    15,    -1,
-      10,    -1,   136,    -1,     9,    -1,    80,    -1,   136,    -1,
-      10,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   277,   277,   278,   281,   285,   289,   295,   302,   303,
-     308,   312,   316,   320,   324,   328,   332,   336,   340,   344,
-     348,   352,   356,   360,   364,   370,   377,   387,   393,   400,
-     408,   412,   418,   425,   435,   441,   448,   456,   460,   464,
-     474,   473,   498,   497,   514,   513,   522,   524,   527,   528,
-     531,   533,   535,   542,   539,   553,   563,   562,   588,   592,
-     595,   599,   603,   624,   636,   643,   644,   647,   655,   658,
-     665,   669,   673,   679,   683,   687,   691,   695,   699,   703,
-     707,   711,   715,   719,   723,   727,   731,   735,   739,   743,
-     747,   751,   755,   759,   763,   770,   777,   786,   799,   806,
-     809,   815,   822,   841,   846,   850,   854,   861,   878,   896,
-     929,   938,   946,   956,   964,   970,   983,   998,  1017,  1030,
-    1054,  1063,  1064,  1094,  1172,  1179,  1180,  1183,  1186,  1187,
-    1191,  1192,  1197,  1196,  1200,  1199,  1202,  1204,  1206,  1208,
-    1212,  1219,  1221,  1222,  1225,  1227,  1235,  1243,  1250,  1258,
-    1260,  1262,  1264,  1268,  1273,  1285,  1299,  1301,  1304,  1307,
-    1310,  1313,  1316,  1319,  1322,  1325,  1328,  1331,  1334,  1337,
-    1340,  1343,  1346,  1349,  1352,  1355,  1358,  1361,  1364,  1367,
-    1370,  1373,  1376,  1379,  1384,  1389,  1394,  1400,  1406,  1411,
-    1417,  1423,  1428,  1434,  1440,  1444,  1449,  1455,  1458,  1461,
-    1464,  1470,  1475,  1477,  1481,  1482,  1489,  1496,  1506,  1508,
-    1517,  1526,  1533,  1534,  1541,  1545,  1546,  1549,  1550,  1553,
-    1557,  1559,  1563,  1565,  1567,  1569,  1571,  1573,  1575,  1577,
-    1579,  1581,  1583,  1585,  1587,  1589,  1591,  1593,  1595,  1597,
-    1599,  1601,  1641,  1643,  1645,  1647,  1649,  1651,  1653,  1655,
-    1657,  1659,  1661,  1663,  1665,  1667,  1669,  1671,  1673,  1696,
-    1697,  1698,  1699,  1700,  1701,  1702,  1705,  1706,  1707,  1708,
-    1709,  1710,  1713,  1714,  1722,  1735
+       0,   277,   277,   278,   281,   285,   289,   293,   300,   301,
+     306,   310,   314,   318,   322,   332,   336,   340,   344,   348,
+     352,   356,   360,   364,   368,   375,   385,   394,   401,   411,
+     419,   423,   435,   445,   454,   461,   471,   479,   483,   487,
+     497,   496,   516,   515,   527,   526,   532,   534,   537,   538,
+     541,   543,   545,   552,   549,   565,   574,   573,   592,   596,
+     599,   603,   607,   622,   632,   639,   640,   643,   650,   653,
+     662,   666,   676,   682,   686,   690,   694,   698,   702,   706,
+     710,   714,   724,   734,   744,   754,   764,   774,   778,   782,
+     786,   802,   818,   835,   845,   854,   861,   874,   883,   894,
+     903,   926,   929,   935,   942,   961,   965,   969,   973,   980,
+     997,  1015,  1047,  1057,  1063,  1071,  1079,  1085,  1099,  1112,
+    1129,  1140,  1156,  1165,  1166,  1177,  1249,  1250,  1254,  1256,
+    1258,  1260,  1262,  1267,  1275,  1276,  1280,  1281,  1286,  1285,
+    1289,  1288,  1291,  1293,  1295,  1297,  1301,  1308,  1310,  1311,
+    1314,  1316,  1324,  1332,  1339,  1347,  1349,  1351,  1353,  1357,
+    1362,  1374,  1381,  1384,  1387,  1390,  1393,  1396,  1399,  1402,
+    1405,  1408,  1411,  1414,  1417,  1420,  1423,  1426,  1429,  1432,
+    1435,  1438,  1441,  1444,  1447,  1450,  1453,  1456,  1459,  1464,
+    1469,  1474,  1477,  1480,  1483,  1499,  1501,  1503,  1507,  1512,
+    1518,  1524,  1529,  1535,  1541,  1546,  1552,  1558,  1562,  1567,
+    1576,  1581,  1583,  1587,  1588,  1595,  1602,  1612,  1614,  1623,
+    1632,  1639,  1640,  1647,  1651,  1652,  1655,  1656,  1659,  1663,
+    1665,  1669,  1671,  1673,  1675,  1677,  1679,  1681,  1683,  1685,
+    1687,  1689,  1691,  1693,  1695,  1697,  1699,  1701,  1703,  1705,
+    1707,  1747,  1749,  1751,  1753,  1755,  1757,  1759,  1761,  1763,
+    1765,  1767,  1769,  1771,  1773,  1775,  1777,  1779,  1802,  1803,
+    1804,  1805,  1806,  1807,  1808,  1809,  1812,  1813,  1814,  1815,
+    1816,  1817,  1820,  1821,  1829,  1842
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || 0
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "INT", "FLOAT", "STRING", "NSSTRING",
-  "SELECTOR", "CHAR", "NAME", "UNKNOWN_CPP_NAME", "COMPLETE", "TYPENAME",
-  "CLASSNAME", "OBJC_LBRAC", "NAME_OR_INT", "OPERATOR", "STRUCT", "CLASS",
-  "UNION", "ENUM", "SIZEOF", "ALIGNOF", "UNSIGNED", "COLONCOLON",
-  "TEMPLATE", "ERROR", "NEW", "DELETE", "REINTERPRET_CAST", "DYNAMIC_CAST",
-  "STATIC_CAST", "CONST_CAST", "ENTRY", "TYPEOF", "DECLTYPE", "TYPEID",
-  "SIGNED_KEYWORD", "LONG", "SHORT", "INT_KEYWORD", "CONST_KEYWORD",
-  "VOLATILE_KEYWORD", "DOUBLE_KEYWORD", "DOLLAR_VARIABLE", "ASSIGN_MODIFY",
-  "TRUEKEYWORD", "FALSEKEYWORD", "','", "ABOVE_COMMA", "'='", "'?'",
-  "OROR", "ANDAND", "'|'", "'^'", "'&'", "NOTEQUAL", "EQUAL", "'<'", "'>'",
-  "GEQ", "LEQ", "RSH", "LSH", "'@'", "'+'", "'-'", "'*'", "'/'", "'%'",
-  "DECREMENT", "INCREMENT", "UNARY", "'.'", "'['", "'('", "DOT_STAR",
-  "ARROW_STAR", "ARROW", "BLOCKNAME", "FILENAME", "DOTDOTDOT", "')'",
-  "'!'", "'~'", "']'", "':'", "'{'", "'}'", "$accept", "start", "type_exp",
-  "exp1", "exp", "$@1", "$@2", "$@3", "msglist", "msgarglist", "msgarg",
-  "$@4", "$@5", "lcurly", "arglist", "function_method",
-  "function_method_void", "function_method_void_or_typelist", "rcurly",
-  "string_exp", "block", "variable", "qualified_name", "space_identifier",
-  "const_or_volatile", "cv_with_space_id",
-  "const_or_volatile_or_space_identifier_noopt",
-  "const_or_volatile_or_space_identifier", "ptr_operator", "$@6", "$@7",
+  "$end", "error", "$undefined", "INT", "COMPLEX_INT", "FLOAT",
+  "COMPLEX_FLOAT", "STRING", "NSSTRING", "SELECTOR", "CHAR", "NAME",
+  "UNKNOWN_CPP_NAME", "COMPLETE", "TYPENAME", "CLASSNAME", "OBJC_LBRAC",
+  "NAME_OR_INT", "OPERATOR", "STRUCT", "CLASS", "UNION", "ENUM", "SIZEOF",
+  "ALIGNOF", "UNSIGNED", "COLONCOLON", "TEMPLATE", "ERROR", "NEW",
+  "DELETE", "REINTERPRET_CAST", "DYNAMIC_CAST", "STATIC_CAST",
+  "CONST_CAST", "ENTRY", "TYPEOF", "DECLTYPE", "TYPEID", "SIGNED_KEYWORD",
+  "LONG", "SHORT", "INT_KEYWORD", "CONST_KEYWORD", "VOLATILE_KEYWORD",
+  "DOUBLE_KEYWORD", "RESTRICT", "ATOMIC", "FLOAT_KEYWORD", "COMPLEX",
+  "DOLLAR_VARIABLE", "ASSIGN_MODIFY", "TRUEKEYWORD", "FALSEKEYWORD", "','",
+  "ABOVE_COMMA", "'='", "'?'", "OROR", "ANDAND", "'|'", "'^'", "'&'",
+  "EQUAL", "NOTEQUAL", "'<'", "'>'", "LEQ", "GEQ", "LSH", "RSH", "'@'",
+  "'+'", "'-'", "'*'", "'/'", "'%'", "UNARY", "INCREMENT", "DECREMENT",
+  "ARROW", "ARROW_STAR", "'.'", "DOT_STAR", "'['", "'('", "BLOCKNAME",
+  "FILENAME", "DOTDOTDOT", "')'", "'!'", "'~'", "']'", "':'", "'{'", "'}'",
+  "$accept", "start", "type_exp", "exp1", "exp", "$@1", "$@2", "$@3",
+  "msglist", "msgarglist", "msgarg", "$@4", "$@5", "lcurly", "arglist",
+  "function_method", "function_method_void",
+  "function_method_void_or_typelist", "rcurly", "string_exp", "block",
+  "variable", "qualified_name", "const_or_volatile", "single_qualifier",
+  "qualifier_seq_noopt", "qualifier_seq", "ptr_operator", "$@6", "$@7",
   "ptr_operator_ts", "abs_decl", "direct_abs_decl", "array_mod",
-  "func_mod", "type", "typebase", "type_name", "parameter_typelist",
-  "nonempty_typelist", "ptype", "conversion_type_id",
+  "func_mod", "type", "scalar_type", "typebase", "type_name",
+  "parameter_typelist", "nonempty_typelist", "ptype", "conversion_type_id",
   "conversion_declarator", "const_and_volatile", "const_or_volatile_noopt",
-  "oper", "field_name", "name", "name_not_typename", 0
+  "oper", "field_name", "name", "name_not_typename", YY_NULLPTRPTR
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,    44,   303,
-      61,    63,   304,   305,   124,    94,    38,   306,   307,    60,
-      62,   308,   309,   310,   311,    64,    43,    45,    42,    47,
-      37,   312,   313,   314,    46,    91,    40,   315,   316,   317,
-     318,   319,   320,    41,    33,   126,    93,    58,   123,   125
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,    44,   309,    61,    63,   310,   311,
+     124,    94,    38,   312,   313,    60,    62,   314,   315,   316,
+     317,    64,    43,    45,    42,    47,    37,   318,   319,   320,
+     321,   322,    46,   323,    91,    40,   324,   325,   326,    41,
+      33,   126,    93,    58,   123,   125
 };
 # endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    90,    91,    91,    92,    92,    92,    92,    93,    93,
-      94,    94,    94,    94,    94,    94,    94,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    94,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    94,    94,    94,    94,
-      95,    94,    96,    94,    97,    94,    98,    98,    99,    99,
-     100,   100,   100,   101,    94,    94,   102,    94,   103,   104,
-     104,   104,   105,   106,    94,   107,   107,    94,   108,    94,
-      94,    94,    94,    94,    94,    94,    94,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    94,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    94,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    94,   109,   109,    94,
-      94,    94,    94,   110,   110,   110,   111,   111,   112,   112,
-     112,   111,   111,   111,   113,   114,   114,   115,   116,   116,
-     117,   117,   119,   118,   120,   118,   118,   118,   118,   118,
-     121,   122,   122,   122,   123,   123,   123,   123,   123,   124,
-     124,   124,   124,   125,   125,   126,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   128,   128,   128,   128,   129,   129,
-     130,   130,   131,   131,   132,   133,   133,   134,   134,   135,
-     135,   135,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   137,
-     137,   137,   137,   137,   137,   137,   138,   138,   138,   138,
-     138,   138,   139,   139,   139,   139
-};
+#define YYPACT_NINF -225
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-225)))
+
+#define YYTABLE_NINF -128
+
+#define yytable_value_is_error(Yytable_value) \
+  0
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+static const yytype_int16 yypact[] =
 {
-       0,     2,     1,     1,     1,     4,     4,     4,     1,     3,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       4,     4,     2,     4,     3,     4,     3,     4,     5,     3,
-       3,     3,     4,     3,     4,     5,     3,     3,     4,     4,
-       0,     5,     0,     5,     0,     5,     1,     1,     1,     2,
-       3,     2,     2,     0,     5,     3,     0,     5,     1,     0,
-       1,     3,     5,     4,     1,     1,     1,     3,     1,     3,
-       4,     4,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     5,     3,     3,     1,     1,     1,     1,     1,
-       1,     4,     4,     7,     7,     7,     7,     1,     2,     1,
-       1,     1,     1,     1,     1,     3,     2,     3,     3,     4,
-       5,     1,     2,     1,     2,     1,     0,     3,     1,     1,
-       1,     0,     0,     4,     0,     3,     1,     2,     1,     2,
-       1,     2,     1,     1,     3,     2,     1,     2,     1,     2,
-       2,     3,     3,     2,     3,     1,     1,     1,     1,     1,
-       2,     3,     2,     3,     3,     3,     2,     2,     3,     4,
-       3,     3,     4,     3,     4,     3,     4,     2,     3,     2,
-       3,     2,     3,     1,     2,     2,     2,     3,     2,     2,
-       3,     2,     2,     3,     2,     2,     3,     2,     1,     2,
-       1,     5,     2,     2,     1,     1,     1,     1,     1,     3,
-       1,     3,     1,     2,     2,     0,     2,     2,     2,     1,
-       1,     1,     2,     2,     4,     4,     4,     4,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     3,     3,     3,     2,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1
+     408,  -225,  -225,  -225,  -225,  -225,  -225,   -24,  -225,  -225,
+     -11,    30,   592,  -225,   855,   241,   270,   278,   288,   684,
+       4,    87,    29,   208,    35,    44,    53,    59,    45,    46,
+      49,   199,   589,    83,  -225,  -225,  -225,  -225,  -225,  -225,
+    -225,   312,  -225,  -225,  -225,   776,    68,   776,   776,   776,
+     776,   776,   408,   117,  -225,   776,   776,  -225,   149,  -225,
+     101,  1380,   408,   130,  -225,   141,   184,   170,  -225,  -225,
+    -225,  1671,  -225,  -225,    73,   201,  -225,   163,   208,  -225,
+     147,    30,  -225,  1380,  -225,   118,    -2,    11,  -225,  -225,
+    -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,
+    -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,
+    -225,  -225,  -225,   119,   123,  -225,  -225,   772,  -225,  -225,
+    -225,  -225,  -225,  -225,  -225,  -225,   202,  -225,   215,  -225,
+     219,  -225,   221,    30,   408,   647,  1635,  -225,     6,   172,
+    -225,  -225,  -225,  -225,  -225,   171,  1635,  1635,  1635,  1635,
+     500,   776,   408,   150,  -225,  -225,   193,   200,   121,  -225,
+    -225,   205,   206,  -225,  -225,   647,  -225,  -225,   647,   647,
+     647,   647,   647,   162,   -30,   647,   647,  -225,   776,   776,
+     776,   776,   776,   776,   776,   776,   776,   776,   776,   776,
+     776,   776,   776,   776,   776,   776,   776,   776,   776,   776,
+     776,   776,  -225,  -225,    51,   776,   232,   776,   776,  1022,
+     161,  1380,   -29,   208,  -225,   208,  -225,    73,    73,    19,
+     -32,   187,  -225,    20,   966,   188,     1,  -225,    13,  -225,
+    -225,  -225,   176,   776,   208,   242,    40,    40,    40,  -225,
+     175,   177,   178,   186,  -225,  -225,    88,  -225,  -225,  -225,
+    -225,  -225,   190,   204,   255,  -225,  -225,  1671,   243,   246,
+     247,   249,  1128,   209,  1164,   218,  1200,   266,  -225,  -225,
+    -225,   277,   279,  -225,  -225,  -225,   776,  -225,  1380,   -22,
+    1380,  1380,   891,   317,  1441,  1475,  1502,  1536,  1563,  1563,
+     485,   485,   485,   485,   577,   577,   669,   287,   287,   647,
+     647,   647,  -225,    30,  -225,  -225,  -225,  -225,  -225,  -225,
+    -225,   208,  -225,   309,  -225,   120,  -225,   208,  -225,   311,
+     120,   -20,    34,   776,  -225,   236,   272,  -225,   776,   776,
+    -225,  -225,   302,  -225,   237,  -225,   188,   188,    73,   238,
+    -225,  -225,   245,   250,  -225,    13,  1058,  -225,  -225,  -225,
+      -5,  -225,   208,   776,   776,   239,    40,  -225,   251,   244,
+     248,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,  -225,
+     280,   253,   258,   262,   263,  -225,  -225,  -225,  -225,  -225,
+    -225,  -225,  -225,   647,  -225,   776,   337,  -225,   345,  -225,
+    -225,   331,   351,  -225,  -225,  -225,    21,    61,  1094,   647,
+    1380,  -225,    73,  -225,  -225,  -225,  -225,    73,  -225,  -225,
+    1380,  1380,  -225,  -225,   251,   776,  -225,  -225,  -225,   776,
+     776,   776,   776,  1414,  -225,  -225,  -225,  -225,  -225,  -225,
+    -225,  -225,  -225,  1380,  1236,  1272,  1308,  1344,  -225,  -225,
+    -225,  -225
 };
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+     Performed when YYTABLE does not specify something else to do.  Zero
+     means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-     126,    95,    98,   107,   110,     0,    96,   272,   275,   156,
-       0,    97,   126,     0,     0,     0,     0,     0,     0,   198,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   200,
-     158,   159,   157,   220,   221,   183,   100,   111,   112,     0,
-       0,     0,     0,     0,     0,   126,   273,   114,     0,     0,
-      58,     0,     3,     2,     8,    59,    64,    66,     0,   109,
-       0,    99,   121,     0,   128,   126,     4,   212,   155,   219,
-     129,   274,   123,     0,    56,     0,    40,    42,    44,   156,
-       0,   222,   223,   241,   252,   238,   249,   248,   235,   233,
-     234,   245,   244,   239,   240,   247,   246,   243,   242,   228,
-     229,   230,   231,   232,   251,   250,     0,     0,   253,   254,
-     237,   236,   215,   258,   266,   270,   186,   268,   269,   267,
-     271,   185,   189,   188,   192,   191,   195,   194,     0,   126,
-      22,   126,   204,   206,   207,   205,   197,   275,   273,   122,
-       0,   126,   126,   126,   126,   126,     0,   126,   206,   207,
-     199,   166,   162,   167,   160,   184,   181,   179,   177,   217,
-     218,    11,    13,    12,    10,    17,    16,     0,     0,    14,
-      15,     1,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    95,    96,    99,   100,   109,   112,     0,    97,   282,
+     285,   195,     0,    98,     0,     0,     0,     0,     0,     0,
+       0,   192,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   194,   163,   164,   162,   128,   129,   188,   131,   130,
+     189,     0,   102,   113,   114,     0,     0,     0,     0,     0,
+       0,     0,     0,   283,   116,     0,     0,    58,     0,     3,
+       2,     8,    59,    64,    66,     0,   111,     0,   101,   123,
+     134,     0,     4,   196,   221,   161,   284,   125,     0,    56,
+       0,    40,    42,    44,   195,     0,   231,   232,   250,   261,
+     247,   258,   257,   244,   242,   243,   253,   254,   248,   249,
+     255,   256,   251,   252,   237,   238,   239,   240,   241,   259,
+     260,   263,   262,     0,     0,   246,   245,   224,   267,   276,
+     280,   199,   278,   279,   277,   281,   198,   202,   201,   205,
+     204,   208,   207,     0,     0,    22,     0,   213,   215,   216,
+     214,   191,   285,   283,   124,     0,     0,     0,     0,     0,
+       0,     0,     0,   215,   216,   193,   171,   167,   172,   165,
+     190,   186,   184,   182,   197,    11,   132,   133,    13,    12,
+      10,    16,    17,     0,     0,    14,    15,     1,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    19,    18,     0,     0,
-      53,     0,     0,     0,     0,    60,     0,     0,   108,     0,
-       0,   126,   202,   203,     0,   138,   136,   134,     0,   126,
-     140,   142,   213,   143,   146,   148,   116,     0,    59,     0,
-     118,     0,     0,     0,   257,     0,     0,     0,     0,   256,
-     255,   215,   214,   187,   190,   193,   196,     0,     0,   173,
-     164,   180,   126,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   171,   163,   165,   161,   175,   170,   168,   182,
-     178,     0,    72,     9,     0,    94,    93,     0,    91,    90,
-      89,    88,    87,    82,    81,    85,    86,    84,    83,    80,
-      79,    73,    77,    78,    74,    75,    76,    33,   268,   265,
-     264,   262,   263,   261,   260,     0,    36,    31,   259,     0,
-      55,    59,   210,     0,   208,    37,    30,    26,     0,    29,
-      24,    68,     0,     0,    69,    67,   117,   124,   127,   125,
-       0,   150,   139,   137,   131,     0,   149,   153,     0,     0,
-     132,   141,   126,   145,   147,   101,     0,   119,     0,     0,
-       0,     0,    47,    48,    46,     0,     0,   226,   224,   227,
-     225,   132,   216,   102,    23,   174,     0,     0,     0,     0,
-       0,     5,     6,     7,    21,    20,   172,   176,   169,    71,
-      39,     0,    34,    32,    38,    63,     0,   126,   126,    27,
-      25,    70,    61,   152,   130,   135,   151,   144,   154,   131,
-      57,   120,    52,    51,    41,    49,     0,     0,    43,    45,
-     201,     0,     0,     0,     0,    92,    35,    54,    62,   209,
-     211,    28,   133,    50,     0,     0,     0,     0,   103,   105,
-     104,   106
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,    51,   167,   168,    54,   231,   232,   233,   351,   352,
-     353,   311,   228,    55,   206,    56,    57,    58,   322,    59,
-      60,    61,    62,   211,    63,    64,    65,   395,   220,   399,
-     334,   221,   222,   223,   224,   225,    66,    67,   136,   339,
-     314,    68,   113,   242,    69,    70,    71,   307,   354,    72
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    18,    19,     0,     0,     0,     0,     0,    53,
+       0,    60,     0,     0,   110,     0,   134,   211,   212,     0,
+     144,   142,   140,     0,     0,   146,   148,   222,   149,   152,
+     154,   118,     0,    59,     0,   120,     0,     0,     0,   266,
+       0,     0,     0,     0,   265,   264,   224,   223,   200,   203,
+     206,   209,     0,     0,   178,   169,   185,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   176,   168,   170,
+     166,   180,   175,   173,   187,   183,     0,    72,     9,     0,
+      94,    93,     0,    91,    90,    89,    88,    87,    81,    82,
+      85,    86,    83,    84,    79,    80,    73,    77,    78,    74,
+      75,    76,    26,   278,   275,   274,   272,   273,   271,   269,
+     270,     0,    29,    24,   268,    30,    33,     0,    36,    31,
+      37,     0,    55,    59,   219,     0,   217,    68,     0,     0,
+      69,    67,   119,   135,     0,   156,   145,   143,   137,     0,
+     155,   159,     0,     0,   138,   147,     0,   151,   153,   103,
+       0,   121,     0,     0,     0,     0,    47,    48,    46,     0,
+       0,   235,   233,   236,   234,   138,   225,   104,    23,   179,
+       0,     0,     0,     0,     0,     5,     6,     7,    21,    20,
+     177,   181,   174,    71,    39,     0,    27,    25,    34,    32,
+      38,   229,   230,    63,   228,   126,     0,   127,     0,    70,
+      61,   158,   136,   141,   157,   150,   160,   137,    57,   122,
+      52,    51,    41,    49,     0,     0,    43,    45,   210,     0,
+       0,     0,     0,    92,    28,    35,   226,   227,    54,    62,
+     218,   220,   139,    50,     0,     0,     0,     0,   105,   107,
+     106,   108
 };
 
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -221
-static const yytype_int16 yypact[] =
+  /* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
 {
-     488,  -221,  -221,  -221,  -221,   -25,  -221,  -221,    -5,    49,
-     660,  -221,   907,    67,    77,   143,   200,   746,    24,   195,
-      27,   255,    31,    36,    51,    60,    54,    58,    80,   215,
-     165,   201,  -221,    97,   122,  -221,  -221,  -221,  -221,   832,
-     832,   832,   832,   832,   832,   488,   166,  -221,   832,   832,
-    -221,   194,  -221,   148,  1365,   402,   174,  -221,   175,   209,
-     196,  -221,  -221,   154,  -221,  1669,  -221,    76,    28,  -221,
-     157,  -221,   192,   255,  -221,    43,    49,  -221,  1365,  -221,
-     146,    30,    47,  -221,  -221,  -221,  -221,  -221,  -221,  -221,
-    -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,
-    -221,  -221,  -221,  -221,  -221,  -221,   151,   156,  -221,  -221,
-    -221,  -221,   644,  -221,  -221,  -221,  -221,  -221,  -221,  -221,
-    -221,   233,  -221,   238,  -221,   239,  -221,   245,    49,   488,
-     254,   349,  -221,    91,   218,  -221,  -221,  -221,  -221,  -221,
-     210,   349,   349,   349,   349,   574,   832,   488,   111,  -221,
-    -221,   226,   237,   220,  -221,  -221,   247,   248,  -221,  -221,
-    -221,   254,   254,   254,   254,   254,   254,   211,    19,   254,
-     254,  -221,   832,   832,   832,   832,   832,   832,   832,   832,
-     832,   832,   832,   832,   832,   832,   832,   832,   832,   832,
-     832,   832,   832,   832,   832,   832,  -221,  -221,   236,   832,
-    1024,   832,   832,   280,   189,  1365,   -32,   255,  -221,   255,
-     284,   -16,    76,  -221,    -1,   -33,   229,  -221,     5,  1015,
-     230,    50,  -221,    85,  -221,  -221,  -221,   216,   832,   255,
-     276,    53,    53,    53,  -221,   219,   221,   222,   223,  -221,
-    -221,   133,  -221,  -221,  -221,  -221,  -221,   227,   228,   264,
-    -221,  -221,  1669,   246,   262,   267,   274,  1096,   231,  1155,
-     241,  1190,   296,  -221,  -221,  -221,   301,   302,  -221,  -221,
-    -221,   832,  -221,  1365,   -26,  1365,  1365,   944,  1424,  1456,
-    1483,  1515,  1542,  1574,  1574,  1601,  1601,  1601,  1601,   385,
-     385,   471,   557,   557,   254,   254,   254,  -221,    49,  -221,
-    -221,  -221,  -221,  -221,  -221,   255,  -221,   332,  -221,   -20,
-      73,   832,  -221,   261,   298,   207,   207,  -221,   255,  -221,
-     336,  -221,   832,   832,  -221,  -221,   324,  -221,  -221,  -221,
-     266,  -221,   230,   230,    76,   268,  -221,  -221,   270,   272,
-    -221,    85,  1062,  -221,  -221,  -221,    26,  -221,   255,   832,
-     832,   271,    53,  -221,   263,   273,   277,  -221,  -221,  -221,
-    -221,  -221,  -221,  -221,  -221,  -221,   304,   282,   286,   294,
-     297,  -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,   254,
-    -221,   832,   345,  -221,  -221,  -221,    63,   -16,  1094,   364,
-    -221,   254,  1365,  -221,  -221,  -221,  -221,  -221,  -221,    76,
-    -221,  -221,  1365,  1365,  -221,  -221,   263,   832,  -221,  -221,
-    -221,   832,   832,   832,   832,  1397,  -221,  -221,  -221,  -221,
-    -221,  -221,  -221,  1365,  1225,  1260,  1295,  1330,  -221,  -221,
-    -221,  -221
+    -225,  -225,     5,    15,   -12,  -225,  -225,  -225,  -124,  -225,
+      48,  -225,  -225,  -225,  -220,  -225,  -225,  -225,   194,  -225,
+    -225,  -225,  -151,     8,   -70,   -72,    14,  -114,  -225,  -225,
+    -225,   212,   197,  -224,  -222,  -122,   396,    17,   407,   234,
+    -225,  -225,  -225,   213,  -225,  -225,    -7,   256,     3,   441
 };
 
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
+  /* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
 {
-    -221,  -221,     1,    14,   -10,  -221,  -221,  -221,  -192,  -221,
-      25,  -221,  -221,  -221,  -213,  -221,  -221,  -221,   170,  -221,
-    -221,  -221,  -179,  -221,  -194,  -221,   -62,   -21,  -103,  -221,
-    -221,  -221,   160,   159,  -220,  -217,  -125,    15,   353,   193,
-    -221,  -221,  -221,   153,  -221,  -190,    -3,   197,    33,   375
+      -1,    58,   173,   174,    61,   236,   237,   238,   355,   356,
+     357,   323,   233,    62,   212,    63,    64,    65,   328,    66,
+      67,    68,    69,   393,    70,    71,   403,   225,   407,   338,
+     226,   227,   228,   229,   230,    72,    73,    74,   141,   343,
+     326,    75,   118,   247,   394,   395,    76,   313,   358,    77
 };
 
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -127
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule whose
+     number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      78,    52,   330,   343,   247,   213,   344,   130,   335,   241,
-     120,   120,   120,   120,    53,   346,   323,   328,   120,   306,
-     258,   329,   172,   216,   319,    33,    34,   112,   172,   161,
-     162,   163,   164,   165,   166,   217,     7,   137,   169,   170,
-     355,   356,   214,    12,   235,   205,   121,   123,   125,   127,
-     213,    73,   114,   115,   140,   117,   204,   321,   118,    12,
-     380,   237,   114,   115,   214,   117,   384,   172,   118,    12,
-     120,    74,   120,    75,   323,   312,   114,   115,   116,   117,
-     212,   215,   118,    12,   216,   331,   114,   115,   122,   117,
-     141,   336,   118,    12,   312,   142,   217,  -126,   386,   214,
-     131,   349,   272,   218,   219,   236,   227,   138,   230,   400,
-     143,   323,   332,   333,    33,    34,   385,    33,    34,   144,
-     329,   343,   238,   119,   344,   218,   219,   366,   229,   249,
-     145,   250,   248,   119,   146,   257,   259,   261,   241,   159,
-     350,  -126,   253,   254,   255,   256,   417,   119,   260,   262,
-     213,   263,   114,   115,   124,   117,   147,   119,   118,    12,
-     218,   342,   273,   160,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   215,   274,   151,   216,
-    -113,   315,   316,   418,   171,   120,   172,   329,   -65,   207,
-     120,   361,   152,   153,   120,   154,   120,   132,   155,   114,
-     115,   126,   117,   309,   208,   118,    12,   312,   205,   210,
-     209,   173,  -125,   119,   156,   226,   120,   132,   120,   120,
-     120,   308,   234,   133,   134,   135,   308,   239,   157,   240,
-     325,   158,   326,   266,   243,   114,   115,   297,   298,   244,
-     245,   118,    12,   148,   149,   135,   246,   267,   251,   299,
-     268,   379,   347,   420,   114,   115,   264,   117,   173,   252,
-     118,    12,   394,   300,   301,   302,   303,   265,   321,   304,
-     119,   198,   199,   200,   201,   202,   203,   269,   270,   114,
-     115,   317,   298,   327,   271,   118,    12,   217,   340,   345,
-     348,   205,   120,   299,   365,   357,   367,   358,   359,   360,
-     363,   364,   391,   392,   372,   120,   119,   300,   301,   302,
-     303,   305,   368,   304,   374,   196,   197,   369,   198,   199,
-     200,   201,   202,   203,   370,   119,   376,   394,   382,   402,
-     403,   377,   378,   383,   387,   120,   388,   390,  -115,   120,
-     407,   389,   393,   397,   396,   398,   416,   404,   411,   408,
-     119,    79,   412,   409,   410,   318,    13,    14,    15,    16,
-     413,   415,    19,   414,    21,   421,   324,   405,   422,   338,
-     341,   401,   150,    26,    27,   406,    29,    30,    31,    32,
-      33,    34,    35,   313,   362,   139,     0,   423,     0,   173,
-     320,   424,   425,   426,   427,     1,     2,     3,     4,     5,
-       6,     7,     8,     0,     9,     0,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,     0,     0,
-       0,    22,    23,    24,    25,     0,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,     0,    37,    38,
-     190,   191,   192,   193,   194,   195,   196,   197,    39,   198,
-     199,   200,   201,   202,   203,     0,     0,  -126,    40,    41,
-      42,     0,     0,    43,    44,     0,     0,     0,    45,     0,
-       0,     0,    46,    47,     0,   173,    48,    49,     0,     0,
-      50,     1,     2,     3,     4,     5,     6,     7,     8,     0,
-       9,     0,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,     0,     0,     0,    22,    23,    24,
-      25,     0,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,     0,    37,    38,     0,   191,   192,   193,
-     194,   195,   196,   197,    39,   198,   199,   200,   201,   202,
-     203,     0,     0,     0,    40,    41,    42,     0,     0,    43,
-      44,     0,     0,     0,    45,     0,     0,     0,    46,    47,
-       0,   173,    48,    49,     0,     0,    50,     1,     2,     3,
-       4,     5,     6,     7,     8,     0,     9,     0,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-       0,     0,     0,    22,    23,    24,    25,     0,     0,     0,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,     0,
-      37,    38,     0,     0,     0,   193,   194,   195,   196,   197,
-      39,   198,   199,   200,   201,   202,   203,     0,     0,     0,
-      40,    41,    42,     0,     0,    43,    44,     0,     0,     0,
-      45,     0,     0,     0,    46,    47,     0,     0,    48,    49,
-       0,     0,    50,     1,     2,     3,     4,     5,     6,     7,
-       8,     0,    76,    77,    10,    11,    12,     0,     0,     0,
-       0,    17,    18,     0,    20,    33,    34,     0,     0,    22,
-      23,    24,    25,     0,     0,     0,    28,   215,     0,     0,
-     216,     0,     0,     0,    36,     0,    37,    38,     0,  -126,
-       0,     0,   217,     0,     0,     0,    39,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    40,    41,    42,     0,
-       0,    43,    44,     0,     0,     0,    45,     0,     0,     0,
-      46,    47,     0,     0,    48,    49,     0,     0,    50,     1,
-       2,     3,     4,     5,     6,     7,     8,     0,   128,     0,
-      10,    11,    12,     0,     0,     0,     0,    17,    18,     0,
-      20,     0,     0,     0,     0,    22,    23,    24,    25,     0,
-       0,     0,    28,     0,     0,     0,     0,     0,     0,     0,
-      36,     0,    37,    38,     0,     0,     0,     0,     0,     0,
-       0,     0,    39,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    40,    41,    42,     0,     0,    43,    44,     0,
-       0,     0,   129,     0,     0,     0,    46,    47,     0,     0,
-      48,    49,     0,     0,    50,     1,     2,     3,     4,     5,
-       6,     7,     8,     0,   128,     0,    10,    11,    12,     0,
-       0,     0,     0,    17,    18,     0,    20,     0,     0,     0,
-       0,    22,    23,    24,    25,     0,     0,     0,    28,     0,
-       0,     0,     0,     0,     0,     0,    36,     0,    37,    38,
-       0,     0,     0,     0,     0,     0,     0,     0,    39,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    40,    41,
-      42,     0,     0,    43,    44,     0,     0,     0,    45,     0,
-       0,     0,    46,    47,     0,     0,    48,    49,     0,    79,
-      50,    80,     0,     0,    13,    14,    15,    16,     0,     0,
-      19,     0,    21,     0,    81,    82,     0,     0,     0,     0,
-       0,     0,     0,     0,    29,    30,    31,    32,    33,    34,
-      35,     0,    83,     0,     0,    84,     0,    85,   173,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,     0,    99,   100,   101,   102,   103,   104,   105,
-       0,     0,   106,   107,     0,   108,   109,     0,     0,   174,
-       0,   110,   111,     0,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,     0,   198,   199,
-     200,   201,   202,   203,     0,     0,     0,    79,     0,   214,
-       0,   381,    13,    14,    15,    16,    79,     0,    19,     0,
-      21,    13,    14,    15,    16,     0,     0,    19,     0,    21,
-       0,     0,    29,    30,    31,    32,    33,    34,    35,     0,
-       0,    29,    30,    31,    32,    33,    34,    35,   215,     0,
-       0,   216,     0,     0,    79,     0,     0,     0,     0,    13,
-      14,    15,    16,   217,     0,    19,     0,    21,     0,  -126,
-     218,   219,     0,     0,     0,     0,     0,     0,   337,    29,
-      30,    31,    32,    33,    34,    35,    79,   310,     0,     0,
-     173,    13,    14,    15,    16,     0,     0,    19,     0,    21,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,    34,    35,     0,     0,
-       0,   174,     0,     0,     0,   337,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   173,
-     198,   199,   200,   201,   202,   203,   419,     0,     0,   371,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     174,     0,     0,     0,   173,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,     0,   198,
-     199,   200,   201,   202,   203,   174,     0,     0,   373,   173,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,     0,   198,   199,   200,   201,   202,   203,
-     174,     0,     0,   375,   173,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,     0,   198,
-     199,   200,   201,   202,   203,   174,     0,     0,   428,   173,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,     0,   198,   199,   200,   201,   202,   203,
-     174,     0,     0,   429,   173,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,     0,   198,
-     199,   200,   201,   202,   203,   174,     0,     0,   430,   173,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,     0,   198,   199,   200,   201,   202,   203,
-     174,   173,     0,   431,     0,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   173,   198,
-     199,   200,   201,   202,   203,     0,     0,     0,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+      83,   216,   218,   246,   347,    59,   348,   135,   125,   125,
+     125,   125,   252,   350,   240,    60,   125,   219,   126,   128,
+     130,   132,   334,   339,   178,   329,   145,   242,   263,   219,
+     221,   117,   178,   165,   178,   168,   169,   170,   171,   172,
+       9,   142,   222,   175,   176,   218,   254,    14,   255,   329,
+     211,   119,   120,   312,   122,   318,    80,   123,    14,   277,
+    -127,    78,   119,   120,   302,   303,   327,   210,   123,    14,
+     384,   125,   390,   125,    79,   329,   304,   391,   392,   166,
+     167,   232,   241,   235,   408,   223,   224,   324,   217,   136,
+     305,   306,   307,   308,   353,   243,   309,   223,   346,   310,
+     146,   137,   324,   396,   391,   392,   336,   337,   161,   147,
+     428,   335,   340,   359,   360,   143,    35,    36,   148,    38,
+      39,   347,   162,   348,   149,   163,   124,   138,   139,   140,
+     150,   151,   246,   354,   152,   370,   179,   124,   262,   264,
+     266,   253,   311,  -115,    46,   218,   271,   220,   333,   177,
+     221,   258,   259,   260,   261,   178,   -65,   265,   119,   120,
+     272,   122,   365,   273,   123,    14,   278,   213,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     267,   214,   268,   315,   279,   320,   215,   125,   231,   125,
+     204,   205,   206,   207,   208,   209,   125,   314,   125,   314,
+     239,   244,   245,   137,   256,   248,   331,   219,   332,   119,
+     120,   211,   122,   321,   324,   123,    14,   125,   249,   125,
+     125,   125,   250,   124,   251,   269,   257,   351,   234,   153,
+     154,   140,   270,   119,   120,   316,   303,   274,   275,   123,
+      14,   276,   119,   120,   121,   122,   327,   304,   123,    14,
+     220,   222,   344,   221,   383,   349,   402,   361,   352,   362,
+     363,   305,   306,   307,   308,   222,   431,   309,   364,   367,
+     310,   119,   120,   127,   122,   223,   224,   123,    14,   119,
+     120,   129,   122,   368,   124,   123,    14,   369,   376,   119,
+     120,   131,   122,   179,   125,   123,    14,   378,   380,   371,
+     125,   211,   372,   373,   386,   374,   399,   400,   124,   381,
+     388,   382,   387,   317,   389,   397,   398,   124,  -117,   401,
+     404,   412,   333,   179,   405,   402,   416,    21,   419,   406,
+     417,   410,   411,   420,   415,   125,   418,   421,   422,   125,
+     424,    31,    32,    33,    34,   409,   124,    37,   425,   414,
+      40,   199,   200,   201,   124,   202,   203,   204,   205,   206,
+     207,   208,   209,   423,   124,   426,   184,   185,   186,   187,
      188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     173,   198,   199,   200,   201,   202,   203,   178,   179,   180,
+     198,   199,   200,   201,   427,   202,   203,   204,   205,   206,
+     207,   208,   209,   433,   413,   429,   330,   434,   435,   436,
+     437,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,   432,    11,   345,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,   342,   164,   155,    24,
+      25,    26,    27,   325,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,   366,
+      43,    44,   319,   144,     0,     0,     0,     0,     0,     0,
+      45,     0,     0,     0,     0,     0,     0,     0,     0,    46,
+      47,    48,    49,     0,     0,     0,    50,    51,     0,     0,
+       0,     0,     0,    52,    53,    54,     0,     0,    55,    56,
+       0,   179,    57,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,     0,    11,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,     0,     0,
+       0,    24,    25,    26,    27,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,     0,    43,    44,   194,   195,   196,   197,   198,   199,
+     200,   201,    45,   202,   203,   204,   205,   206,   207,   208,
+     209,    46,    47,    48,    49,     0,     0,     0,    50,    51,
+       0,     0,     0,     0,     0,    52,    53,    54,     0,     0,
+      55,    56,     0,   179,    57,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,     0,    81,    82,    12,    13,
+      14,     0,     0,     0,   156,    19,    20,     0,    22,     0,
+       0,     0,     0,    24,    25,    26,    27,     0,   157,   158,
+      30,   159,     0,     0,   160,     0,     0,     0,     0,     0,
+       0,     0,    42,     0,    43,    44,     0,     0,   196,   197,
+     198,   199,   200,   201,    45,   202,   203,   204,   205,   206,
+     207,   208,   209,   179,    47,    48,    49,     0,     0,     0,
+      50,    51,     0,     0,     0,     0,     0,    52,    53,    54,
+       0,     0,    55,    56,     0,   179,    57,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,     0,   133,     0,
+      12,    13,    14,     0,     0,     0,     0,    19,    20,     0,
+      22,     0,     0,     0,     0,    24,    25,    26,    27,     0,
+       0,     0,    30,     0,     0,   202,   203,   204,   205,   206,
+     207,   208,   209,     0,    42,     0,    43,    44,     0,     0,
+       0,   197,   198,   199,   200,   201,    45,   202,   203,   204,
+     205,   206,   207,   208,   209,     0,    47,    48,    49,     0,
+       0,     0,    50,    51,     0,     0,     0,     0,     0,   134,
+      53,    54,     0,     0,    55,    56,     0,     0,    57,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,     0,
+     133,     0,    12,    13,    14,     0,     0,     0,     0,    19,
+      20,     0,    22,     0,     0,     0,     0,    24,    25,    26,
+      27,     0,     0,     0,    30,    35,    36,     0,    38,    39,
+       0,     0,     0,     0,     0,     0,    42,     0,    43,    44,
+       0,   220,     0,     0,   221,     0,     0,     0,    45,     0,
+       0,     0,     0,    46,     0,     0,   222,     0,    47,    48,
+      49,     0,     0,     0,    50,    51,     0,     0,     0,     0,
+       0,    52,    53,    54,     0,     0,    55,    56,     0,    84,
+      57,    85,     0,     0,    15,    16,    17,    18,     0,     0,
+      21,     0,    23,     0,    86,    87,     0,     0,     0,     0,
+       0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,     0,    88,   179,     0,    89,
+       0,    90,     0,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,    46,   104,   105,   106,
+     107,   108,     0,   109,   110,   111,   112,     0,     0,   113,
+     114,     0,   180,     0,     0,   115,   116,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,     0,   202,
+     203,   204,   205,   206,   207,   208,   209,     0,     0,     0,
+      84,     0,   219,     0,   385,    15,    16,    17,    18,     0,
+       0,    21,     0,    23,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   220,     0,     0,   221,     0,
+       0,     0,     0,     0,     0,     0,    84,    46,     0,     0,
+     222,    15,    16,    17,    18,     0,     0,    21,     0,    23,
+     223,   224,     0,     0,     0,   341,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    84,     0,     0,     0,     0,    15,    16,    17,
+      18,     0,     0,    21,     0,    23,     0,     0,     0,     0,
+       0,     0,     0,    46,     0,     0,     0,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    84,     0,
+       0,   322,     0,    15,    16,    17,    18,     0,     0,    21,
+       0,    23,     0,     0,     0,     0,     0,     0,     0,    46,
+       0,     0,     0,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,   179,     0,     0,   341,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    46,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   180,
+     179,     0,   430,     0,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,     0,   202,   203,   204,   205,
+     206,   207,   208,   209,     0,   180,   179,   375,     0,     0,
      181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   173,   198,   199,
-     200,   201,   202,   203,     0,     0,     0,     0,     0,     0,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   173,
-     198,   199,   200,   201,   202,   203,     0,     0,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   173,   198,   199,   200,
-     201,   202,   203,     0,     0,     0,     0,     0,     0,     0,
-       0,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   173,   198,
-     199,   200,   201,   202,   203,     0,     0,     0,     0,   182,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,     0,   202,   203,   204,   205,   206,   207,   208,   209,
+       0,   180,   179,   377,     0,     0,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,     0,   202,   203,
+     204,   205,   206,   207,   208,   209,     0,   180,   179,   379,
+       0,     0,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,     0,   202,   203,   204,   205,   206,   207,
+     208,   209,     0,   180,   179,   438,     0,     0,   181,   182,
      183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   173,   198,   199,   200,   201,
-     202,   203,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,     0,   198,   199,
-     200,   201,   202,   203,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,     0,   198,   199,   200,   201,   202,
-     203,    79,     0,     0,     0,     0,    13,    14,    15,    16,
-       0,     0,    19,     0,    21,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    29,    30,    31,    32,
-      33,    34,    35
+     193,   194,   195,   196,   197,   198,   199,   200,   201,     0,
+     202,   203,   204,   205,   206,   207,   208,   209,     0,   180,
+     179,   439,     0,     0,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,     0,   202,   203,   204,   205,
+     206,   207,   208,   209,     0,   180,   179,   440,     0,     0,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,     0,   202,   203,   204,   205,   206,   207,   208,   209,
+     179,   180,     0,   441,     0,     0,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   179,   202,   203,
+     204,   205,   206,   207,   208,   209,     0,     0,     0,     0,
+       0,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   179,   202,   203,   204,   205,   206,   207,   208,   209,
+       0,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   179,   202,
+     203,   204,   205,   206,   207,   208,   209,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   179,   202,   203,   204,   205,   206,   207,   208,
+     209,     0,     0,     0,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   179,
+     202,   203,   204,   205,   206,   207,   208,   209,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,     0,   202,   203,   204,   205,   206,   207,
+     208,   209,     0,     0,     0,     0,     0,     0,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+       0,   202,   203,   204,   205,   206,   207,   208,   209,    84,
+       0,     0,     0,     0,    15,    16,    17,    18,     0,     0,
+      21,     0,    23,     0,     0,     0,     0,     0,     0,     0,
+       0,    28,    29,     0,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    84,     0,     0,     0,     0,
+      15,    16,    17,    18,     0,     0,    21,     0,    23,     0,
+       0,     0,     0,     0,     0,     0,    46,     0,     0,     0,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    46
 };
 
 static const yytype_int16 yycheck[] =
 {
-      10,     0,     3,   223,   129,    67,   223,    17,     3,   112,
-      13,    14,    15,    16,     0,   228,    48,   211,    21,   198,
-     145,   211,    48,    56,   203,    41,    42,    12,    48,    39,
-      40,    41,    42,    43,    44,    68,     9,    10,    48,    49,
-     232,   233,    14,    16,    14,    55,    13,    14,    15,    16,
-     112,    76,     9,    10,    21,    12,    55,    89,    15,    16,
-      86,    14,     9,    10,    14,    12,    86,    48,    15,    16,
-      73,    76,    75,    24,    48,   200,     9,    10,    11,    12,
-      65,    53,    15,    16,    56,    86,     9,    10,    11,    12,
-      59,    86,    15,    16,   219,    59,    68,    24,   311,    14,
-      76,    48,    83,    75,    76,    75,    73,    80,    75,    83,
-      59,    48,   215,   216,    41,    42,   310,    41,    42,    59,
-     310,   341,    75,    80,   341,    75,    76,   252,    85,    38,
-      76,    40,   131,    80,    76,   145,   146,   147,   241,    42,
-      87,    65,   141,   142,   143,   144,    83,    80,   147,    38,
-     212,    40,     9,    10,    11,    12,    76,    80,    15,    16,
-      75,    76,   172,    41,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,    53,   173,    23,    56,
-      24,   201,   202,   387,     0,   198,    48,   387,    24,    24,
-     203,    68,    37,    38,   207,    40,   209,    12,    43,     9,
-      10,    11,    12,   199,     5,    15,    16,   342,   228,    65,
-      24,    14,    65,    80,    23,    33,   229,    12,   231,   232,
-     233,   198,    86,    38,    39,    40,   203,    86,    37,    83,
-     207,    40,   209,    23,    11,     9,    10,    11,    12,    11,
-      11,    15,    16,    38,    39,    40,    11,    37,    40,    23,
-      40,   271,   229,   388,     9,    10,    40,    12,    14,    59,
-      15,    16,   334,    37,    38,    39,    40,    40,    89,    43,
-      80,    74,    75,    76,    77,    78,    79,    40,    40,     9,
-      10,    11,    12,     9,    83,    15,    16,    68,    68,    83,
-      24,   311,   305,    23,    40,    86,    60,    86,    86,    86,
-      83,    83,   322,   323,    83,   318,    80,    37,    38,    39,
-      40,    85,    60,    43,    83,    71,    72,    60,    74,    75,
-      76,    77,    78,    79,    60,    80,    40,   399,   305,   349,
-     350,    40,    40,    11,    83,   348,    48,    11,    24,   352,
-      87,   318,    86,    83,    86,    83,    11,    86,    76,    86,
-      80,    12,    76,    86,    60,    85,    17,    18,    19,    20,
-      76,   381,    23,    76,    25,    11,   206,   352,   399,   219,
-     221,   348,    29,    34,    35,   352,    37,    38,    39,    40,
-      41,    42,    43,   200,   241,    20,    -1,   407,    -1,    14,
-     203,   411,   412,   413,   414,     3,     4,     5,     6,     7,
-       8,     9,    10,    -1,    12,    -1,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    -1,    -1,
-      -1,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    -1,    46,    47,
-      65,    66,    67,    68,    69,    70,    71,    72,    56,    74,
-      75,    76,    77,    78,    79,    -1,    -1,    65,    66,    67,
-      68,    -1,    -1,    71,    72,    -1,    -1,    -1,    76,    -1,
-      -1,    -1,    80,    81,    -1,    14,    84,    85,    -1,    -1,
-      88,     3,     4,     5,     6,     7,     8,     9,    10,    -1,
-      12,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    -1,    -1,    -1,    29,    30,    31,
-      32,    -1,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    -1,    46,    47,    -1,    66,    67,    68,
-      69,    70,    71,    72,    56,    74,    75,    76,    77,    78,
-      79,    -1,    -1,    -1,    66,    67,    68,    -1,    -1,    71,
-      72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    80,    81,
-      -1,    14,    84,    85,    -1,    -1,    88,     3,     4,     5,
-       6,     7,     8,     9,    10,    -1,    12,    -1,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      -1,    -1,    -1,    29,    30,    31,    32,    -1,    -1,    -1,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    -1,
-      46,    47,    -1,    -1,    -1,    68,    69,    70,    71,    72,
-      56,    74,    75,    76,    77,    78,    79,    -1,    -1,    -1,
-      66,    67,    68,    -1,    -1,    71,    72,    -1,    -1,    -1,
-      76,    -1,    -1,    -1,    80,    81,    -1,    -1,    84,    85,
-      -1,    -1,    88,     3,     4,     5,     6,     7,     8,     9,
-      10,    -1,    12,    13,    14,    15,    16,    -1,    -1,    -1,
-      -1,    21,    22,    -1,    24,    41,    42,    -1,    -1,    29,
-      30,    31,    32,    -1,    -1,    -1,    36,    53,    -1,    -1,
-      56,    -1,    -1,    -1,    44,    -1,    46,    47,    -1,    65,
-      -1,    -1,    68,    -1,    -1,    -1,    56,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,    -1,
-      -1,    71,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,
-      80,    81,    -1,    -1,    84,    85,    -1,    -1,    88,     3,
-       4,     5,     6,     7,     8,     9,    10,    -1,    12,    -1,
-      14,    15,    16,    -1,    -1,    -1,    -1,    21,    22,    -1,
-      24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    -1,
-      -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      44,    -1,    46,    47,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    66,    67,    68,    -1,    -1,    71,    72,    -1,
-      -1,    -1,    76,    -1,    -1,    -1,    80,    81,    -1,    -1,
-      84,    85,    -1,    -1,    88,     3,     4,     5,     6,     7,
-       8,     9,    10,    -1,    12,    -1,    14,    15,    16,    -1,
-      -1,    -1,    -1,    21,    22,    -1,    24,    -1,    -1,    -1,
-      -1,    29,    30,    31,    32,    -1,    -1,    -1,    36,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    44,    -1,    46,    47,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      68,    -1,    -1,    71,    72,    -1,    -1,    -1,    76,    -1,
-      -1,    -1,    80,    81,    -1,    -1,    84,    85,    -1,    12,
-      88,    14,    -1,    -1,    17,    18,    19,    20,    -1,    -1,
-      23,    -1,    25,    -1,    27,    28,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    37,    38,    39,    40,    41,    42,
-      43,    -1,    45,    -1,    -1,    48,    -1,    50,    14,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    -1,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    75,    76,    -1,    78,    79,    -1,    -1,    45,
-      -1,    84,    85,    -1,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    -1,    74,    75,
-      76,    77,    78,    79,    -1,    -1,    -1,    12,    -1,    14,
-      -1,    87,    17,    18,    19,    20,    12,    -1,    23,    -1,
-      25,    17,    18,    19,    20,    -1,    -1,    23,    -1,    25,
-      -1,    -1,    37,    38,    39,    40,    41,    42,    43,    -1,
-      -1,    37,    38,    39,    40,    41,    42,    43,    53,    -1,
-      -1,    56,    -1,    -1,    12,    -1,    -1,    -1,    -1,    17,
-      18,    19,    20,    68,    -1,    23,    -1,    25,    -1,    65,
-      75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,    37,
-      38,    39,    40,    41,    42,    43,    12,    83,    -1,    -1,
-      14,    17,    18,    19,    20,    -1,    -1,    23,    -1,    25,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    39,    40,    41,    42,    43,    -1,    -1,
-      -1,    45,    -1,    -1,    -1,    83,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    14,
-      74,    75,    76,    77,    78,    79,    82,    -1,    -1,    83,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      45,    -1,    -1,    -1,    14,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    74,
-      75,    76,    77,    78,    79,    45,    -1,    -1,    83,    14,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    -1,    74,    75,    76,    77,    78,    79,
-      45,    -1,    -1,    83,    14,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    74,
-      75,    76,    77,    78,    79,    45,    -1,    -1,    83,    14,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    -1,    74,    75,    76,    77,    78,    79,
-      45,    -1,    -1,    83,    14,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    74,
-      75,    76,    77,    78,    79,    45,    -1,    -1,    83,    14,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    -1,    74,    75,    76,    77,    78,    79,
-      45,    14,    -1,    83,    -1,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    14,    74,
-      75,    76,    77,    78,    79,    -1,    -1,    -1,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      12,    71,    74,   117,   228,     0,   228,    19,    15,    16,
+      17,    18,   134,   233,    16,     0,    23,    16,    15,    16,
+      17,    18,     3,     3,    54,    54,    23,    16,   150,    16,
+      62,    14,    54,    45,    54,    47,    48,    49,    50,    51,
+      11,    12,    74,    55,    56,   117,    40,    18,    42,    54,
+      62,    11,    12,   204,    14,   206,    26,    17,    18,    89,
+      26,    85,    11,    12,    13,    14,    95,    62,    17,    18,
+      92,    78,    92,    80,    85,    54,    25,    43,    44,    11,
+      12,    78,    84,    80,    89,    84,    85,   209,    71,    85,
+      39,    40,    41,    42,    54,    84,    45,    84,    85,    48,
+      65,    14,   224,   323,    43,    44,   220,   221,    25,    65,
+      89,    92,    92,   237,   238,    86,    43,    44,    65,    46,
+      47,   345,    39,   345,    65,    42,    86,    40,    41,    42,
+      85,    85,   246,    93,    85,   257,    16,    86,   150,   151,
+     152,   136,    91,    26,    71,   217,    25,    59,   218,     0,
+      62,   146,   147,   148,   149,    54,    26,   152,    11,    12,
+      39,    14,    74,    42,    17,    18,   178,    26,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+      40,     7,    42,   205,   179,   207,    26,   204,    35,   206,
+      80,    81,    82,    83,    84,    85,   213,   204,   215,   206,
+      92,    92,    89,    14,    42,    13,   213,    16,   215,    11,
+      12,   233,    14,   208,   346,    17,    18,   234,    13,   236,
+     237,   238,    13,    86,    13,    42,    65,   234,    91,    40,
+      41,    42,    42,    11,    12,    13,    14,    42,    42,    17,
+      18,    89,    11,    12,    13,    14,    95,    25,    17,    18,
+      59,    74,    74,    62,   276,    89,   338,    92,    26,    92,
+      92,    39,    40,    41,    42,    74,   398,    45,    92,    89,
+      48,    11,    12,    13,    14,    84,    85,    17,    18,    11,
+      12,    13,    14,    89,    86,    17,    18,    42,    89,    11,
+      12,    13,    14,    16,   311,    17,    18,    89,    42,    66,
+     317,   323,    66,    66,   311,    66,   328,   329,    86,    42,
+     317,    42,    13,    91,    13,    89,    54,    86,    26,    92,
+      92,    92,   402,    16,    89,   407,    92,    25,    85,    89,
+      92,   353,   354,    85,    93,   352,    66,    85,    85,   356,
+      13,    39,    40,    41,    42,   352,    86,    45,    13,   356,
+      48,    74,    75,    76,    86,    78,    79,    80,    81,    82,
+      83,    84,    85,   385,    86,    44,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      14,    74,    75,    76,    77,    78,    79,    53,    54,    55,
+      73,    74,    75,    76,    43,    78,    79,    80,    81,    82,
+      83,    84,    85,   415,   356,   397,   212,   419,   420,   421,
+     422,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,   407,    14,   226,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,   224,    41,    31,    31,
+      32,    33,    34,   209,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,   246,
+      52,    53,   206,    22,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,
+      72,    73,    74,    -1,    -1,    -1,    78,    79,    -1,    -1,
+      -1,    -1,    -1,    85,    86,    87,    -1,    -1,    90,    91,
+      -1,    16,    94,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    -1,    14,    -1,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      -1,    31,    32,    33,    34,    -1,    -1,    -1,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    -1,    52,    53,    69,    70,    71,    72,    73,    74,
+      75,    76,    62,    78,    79,    80,    81,    82,    83,    84,
+      85,    71,    72,    73,    74,    -1,    -1,    -1,    78,    79,
+      -1,    -1,    -1,    -1,    -1,    85,    86,    87,    -1,    -1,
+      90,    91,    -1,    16,    94,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    -1,    14,    15,    16,    17,
+      18,    -1,    -1,    -1,    25,    23,    24,    -1,    26,    -1,
+      -1,    -1,    -1,    31,    32,    33,    34,    -1,    39,    40,
+      38,    42,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    50,    -1,    52,    53,    -1,    -1,    71,    72,
+      73,    74,    75,    76,    62,    78,    79,    80,    81,    82,
+      83,    84,    85,    16,    72,    73,    74,    -1,    -1,    -1,
+      78,    79,    -1,    -1,    -1,    -1,    -1,    85,    86,    87,
+      -1,    -1,    90,    91,    -1,    16,    94,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    -1,    14,    -1,
+      16,    17,    18,    -1,    -1,    -1,    -1,    23,    24,    -1,
+      26,    -1,    -1,    -1,    -1,    31,    32,    33,    34,    -1,
+      -1,    -1,    38,    -1,    -1,    78,    79,    80,    81,    82,
+      83,    84,    85,    -1,    50,    -1,    52,    53,    -1,    -1,
+      -1,    72,    73,    74,    75,    76,    62,    78,    79,    80,
+      81,    82,    83,    84,    85,    -1,    72,    73,    74,    -1,
+      -1,    -1,    78,    79,    -1,    -1,    -1,    -1,    -1,    85,
+      86,    87,    -1,    -1,    90,    91,    -1,    -1,    94,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    -1,
+      14,    -1,    16,    17,    18,    -1,    -1,    -1,    -1,    23,
+      24,    -1,    26,    -1,    -1,    -1,    -1,    31,    32,    33,
+      34,    -1,    -1,    -1,    38,    43,    44,    -1,    46,    47,
+      -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,    52,    53,
+      -1,    59,    -1,    -1,    62,    -1,    -1,    -1,    62,    -1,
+      -1,    -1,    -1,    71,    -1,    -1,    74,    -1,    72,    73,
+      74,    -1,    -1,    -1,    78,    79,    -1,    -1,    -1,    -1,
+      -1,    85,    86,    87,    -1,    -1,    90,    91,    -1,    14,
+      94,    16,    -1,    -1,    19,    20,    21,    22,    -1,    -1,
+      25,    -1,    27,    -1,    29,    30,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    -1,    51,    16,    -1,    54,
+      -1,    56,    -1,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    -1,    78,    79,    80,    81,    -1,    -1,    84,
+      85,    -1,    51,    -1,    -1,    90,    91,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    -1,    78,
+      79,    80,    81,    82,    83,    84,    85,    -1,    -1,    -1,
+      14,    -1,    16,    -1,    93,    19,    20,    21,    22,    -1,
+      -1,    25,    -1,    27,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,    62,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    14,    71,    -1,    -1,
+      74,    19,    20,    21,    22,    -1,    -1,    25,    -1,    27,
+      84,    85,    -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,
+      -1,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    14,    -1,    -1,    -1,    -1,    19,    20,    21,
+      22,    -1,    -1,    25,    -1,    27,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    71,    -1,    -1,    -1,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    14,    -1,
+      -1,    89,    -1,    19,    20,    21,    22,    -1,    -1,    25,
+      -1,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,
+      -1,    -1,    -1,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    16,    -1,    -1,    89,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,
+      16,    -1,    88,    -1,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
+      82,    83,    84,    85,    -1,    51,    16,    89,    -1,    -1,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    14,    74,    75,
-      76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    14,
-      74,    75,    76,    77,    78,    79,    -1,    -1,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    14,    74,    75,    76,
-      77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    14,    74,
-      75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,    57,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    -1,    78,    79,    80,    81,    82,    83,    84,    85,
+      -1,    51,    16,    89,    -1,    -1,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    -1,    78,    79,
+      80,    81,    82,    83,    84,    85,    -1,    51,    16,    89,
+      -1,    -1,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    -1,    78,    79,    80,    81,    82,    83,
+      84,    85,    -1,    51,    16,    89,    -1,    -1,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    14,    74,    75,    76,    77,
-      78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    -1,    74,    75,
-      76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    -1,    74,    75,    76,    77,    78,
-      79,    12,    -1,    -1,    -1,    -1,    17,    18,    19,    20,
-      -1,    -1,    23,    -1,    25,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
-      41,    42,    43
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    -1,
+      78,    79,    80,    81,    82,    83,    84,    85,    -1,    51,
+      16,    89,    -1,    -1,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
+      82,    83,    84,    85,    -1,    51,    16,    89,    -1,    -1,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    -1,    78,    79,    80,    81,    82,    83,    84,    85,
+      16,    51,    -1,    89,    -1,    -1,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    16,    78,    79,
+      80,    81,    82,    83,    84,    85,    -1,    -1,    -1,    -1,
+      -1,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    16,    78,    79,    80,    81,    82,    83,    84,    85,
+      -1,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    16,    78,
+      79,    80,    81,    82,    83,    84,    85,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    16,    78,    79,    80,    81,    82,    83,    84,
+      85,    -1,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    16,
+      78,    79,    80,    81,    82,    83,    84,    85,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    -1,    78,    79,    80,    81,    82,    83,
+      84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      -1,    78,    79,    80,    81,    82,    83,    84,    85,    14,
+      -1,    -1,    -1,    -1,    19,    20,    21,    22,    -1,    -1,
+      25,    -1,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    14,    -1,    -1,    -1,    -1,
+      19,    20,    21,    22,    -1,    -1,    25,    -1,    27,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    71
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,     5,     6,     7,     8,     9,    10,    12,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    29,    30,    31,    32,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    46,    47,    56,
-      66,    67,    68,    71,    72,    76,    80,    81,    84,    85,
-      88,    91,    92,    93,    94,   103,   105,   106,   107,   109,
-     110,   111,   112,   114,   115,   116,   126,   127,   131,   134,
-     135,   136,   139,    76,    76,    24,    12,    13,    94,    12,
-      14,    27,    28,    45,    48,    50,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    66,
-      67,    68,    69,    70,    71,    72,    75,    76,    78,    79,
-      84,    85,   127,   132,     9,    10,    11,    12,    15,    80,
-     136,   138,    11,   138,    11,   138,    11,   138,    12,    76,
-      94,    76,    12,    38,    39,    40,   128,    10,    80,   139,
-     138,    59,    59,    59,    59,    76,    76,    76,    38,    39,
-     128,    23,    37,    38,    40,    43,    23,    37,    40,    42,
-      41,    94,    94,    94,    94,    94,    94,    92,    93,    94,
-      94,     0,    48,    14,    45,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    74,    75,
-      76,    77,    78,    79,    92,    94,   104,    24,     5,    24,
-      65,   113,   127,   116,    14,    53,    56,    68,    75,    76,
-     118,   121,   122,   123,   124,   125,    33,   138,   102,    85,
-     138,    95,    96,    97,    86,    14,    75,    14,    75,    86,
-      83,   118,   133,    11,    11,    11,    11,   126,    92,    38,
-      40,    40,    59,    92,    92,    92,    92,    94,   126,    94,
-      92,    94,    38,    40,    40,    40,    23,    37,    40,    40,
-      40,    83,    83,    94,    93,    94,    94,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    94,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    94,    11,    12,    23,
-      37,    38,    39,    40,    43,    85,   112,   137,   138,    93,
-      83,   101,   126,   129,   130,    94,    94,    11,    85,   112,
-     137,    89,   108,    48,   108,   138,   138,     9,   114,   135,
-       3,    86,   118,   118,   120,     3,    86,    83,   122,   129,
-      68,   123,    76,   124,   125,    83,   104,   138,    24,    48,
-      87,    98,    99,   100,   138,    98,    98,    86,    86,    86,
-      86,    68,   133,    83,    83,    40,   126,    60,    60,    60,
-      60,    83,    83,    83,    83,    83,    40,    40,    40,    94,
-      86,    87,   138,    11,    86,   114,   104,    83,    48,   138,
-      11,    94,    94,    86,   116,   117,    86,    83,    83,   119,
-      83,   138,    94,    94,    86,   100,   138,    87,    86,    86,
-      60,    76,    76,    76,    76,    94,    11,    83,   114,    82,
-     126,    11,   117,    94,    94,    94,    94,    94,    83,    83,
-      83,    83
+       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    14,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    31,    32,    33,    34,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    52,    53,    62,    71,    72,    73,    74,
+      78,    79,    85,    86,    87,    90,    91,    94,    97,    98,
+      99,   100,   109,   111,   112,   113,   115,   116,   117,   118,
+     120,   121,   131,   132,   133,   137,   142,   145,    85,    85,
+      26,    14,    15,   100,    14,    16,    29,    30,    51,    54,
+      56,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    72,    73,    74,    75,    76,    78,
+      79,    80,    81,    84,    85,    90,    91,   133,   138,    11,
+      12,    13,    14,    17,    86,   142,   144,    13,   144,    13,
+     144,    13,   144,    14,    85,   100,    85,    14,    40,    41,
+      42,   134,    12,    86,   145,   144,    65,    65,    65,    65,
+      85,    85,    85,    40,    41,   134,    25,    39,    40,    42,
+      45,    25,    39,    42,   132,   100,    11,    12,   100,   100,
+     100,   100,   100,    98,    99,   100,   100,     0,    54,    16,
+      51,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    78,    79,    80,    81,    82,    83,    84,    85,
+      98,   100,   110,    26,     7,    26,   120,   133,   121,    16,
+      59,    62,    74,    84,    85,   123,   126,   127,   128,   129,
+     130,    35,   144,   108,    91,   144,   101,   102,   103,    92,
+      16,    84,    16,    84,    92,    89,   123,   139,    13,    13,
+      13,    13,   131,    98,    40,    42,    42,    65,    98,    98,
+      98,    98,   100,   131,   100,    98,   100,    40,    42,    42,
+      42,    25,    39,    42,    42,    42,    89,    89,   100,    99,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,    13,    14,    25,    39,    40,    41,    42,    45,
+      48,    91,   118,   143,   144,   100,    13,    91,   118,   143,
+     100,    99,    89,   107,   131,   135,   136,    95,   114,    54,
+     114,   144,   144,   120,     3,    92,   123,   123,   125,     3,
+      92,    89,   127,   135,    74,   128,    85,   129,   130,    89,
+     110,   144,    26,    54,    93,   104,   105,   106,   144,   104,
+     104,    92,    92,    92,    92,    74,   139,    89,    89,    42,
+     131,    66,    66,    66,    66,    89,    89,    89,    89,    89,
+      42,    42,    42,   100,    92,    93,   144,    13,   144,    13,
+      92,    43,    44,   119,   140,   141,   110,    89,    54,   100,
+     100,    92,   121,   122,    92,    89,    89,   124,    89,   144,
+     100,   100,    92,   106,   144,    93,    92,    92,    66,    85,
+      85,    85,    85,   100,    13,    13,    44,    43,    89,   119,
+      88,   131,   122,   100,   100,   100,   100,   100,    89,    89,
+      89,    89
 };
 
-#define yyerrok		(yyerrstatus = 0)
-#define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
-#define YYEOF		0
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    96,    97,    97,    98,    98,    98,    98,    99,    99,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     101,   100,   102,   100,   103,   100,   104,   104,   105,   105,
+     106,   106,   106,   107,   100,   100,   108,   100,   109,   110,
+     110,   110,   111,   112,   100,   113,   113,   100,   114,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   115,
+     115,   100,   100,   100,   100,   116,   116,   116,   117,   117,
+     118,   118,   118,   117,   117,   117,   119,   119,   120,   120,
+     120,   120,   120,   120,   121,   121,   122,   122,   124,   123,
+     125,   123,   123,   123,   123,   123,   126,   127,   127,   127,
+     128,   128,   128,   128,   128,   129,   129,   129,   129,   130,
+     130,   131,   132,   132,   132,   132,   132,   132,   132,   132,
+     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
+     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
+     132,   132,   132,   132,   132,   133,   133,   133,   133,   133,
+     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
+     133,   133,   133,   134,   134,   134,   134,   135,   135,   136,
+     136,   137,   137,   138,   139,   139,   140,   140,   141,   141,
+     141,   142,   142,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   142,   143,   143,
+     143,   143,   143,   143,   143,   143,   144,   144,   144,   144,
+     144,   144,   145,   145,   145,   145
+};
 
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     1,     1,     4,     4,     4,     1,     3,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       4,     4,     2,     4,     3,     4,     3,     4,     5,     3,
+       3,     3,     4,     3,     4,     5,     3,     3,     4,     4,
+       0,     5,     0,     5,     0,     5,     1,     1,     1,     2,
+       3,     2,     2,     0,     5,     3,     0,     5,     1,     0,
+       1,     3,     5,     4,     1,     1,     1,     3,     1,     3,
+       4,     4,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     5,     3,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     4,     4,     7,     7,     7,     7,     1,
+       2,     1,     1,     1,     1,     1,     1,     3,     2,     3,
+       3,     4,     5,     1,     2,     1,     1,     0,     1,     1,
+       1,     1,     2,     2,     1,     2,     1,     0,     0,     4,
+       0,     3,     1,     2,     1,     2,     1,     2,     1,     1,
+       3,     2,     1,     2,     1,     2,     2,     3,     3,     2,
+       3,     1,     1,     1,     1,     2,     3,     2,     3,     3,
+       3,     2,     2,     3,     4,     3,     3,     4,     3,     4,
+       3,     4,     2,     3,     2,     3,     2,     3,     1,     1,
+       2,     2,     1,     2,     1,     1,     1,     2,     2,     2,
+       3,     2,     2,     3,     2,     2,     3,     2,     2,     3,
+       5,     2,     2,     1,     1,     1,     1,     1,     3,     1,
+       3,     1,     2,     2,     0,     2,     2,     2,     1,     1,
+       1,     2,     2,     4,     4,     4,     4,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     3,     3,     3,     2,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1
+};
 
 
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
+#define YYEMPTY         (-2)
+#define YYEOF           0
+
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-#define YYFAIL		goto yyerrlab
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
+#define YYBACKUP(Token, Value)                                  \
+do                                                              \
+  if (yychar == YYEMPTY)                                        \
+    {                                                           \
+      yychar = (Token);                                         \
+      yylval = (Value);                                         \
+      YYPOPSTACK (yylen);                                       \
+      yystate = *yyssp;                                         \
+      goto yybackup;                                            \
+    }                                                           \
+  else                                                          \
+    {                                                           \
       yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
-while (YYID (0))
-
-
-#define YYTERROR	1
-#define YYERRCODE	256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))                                                    \
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (YYID (0))
-#endif
+      YYERROR;                                                  \
+    }                                                           \
+while (0)
+
+/* Error token number */
+#define YYTERROR        1
+#define YYERRCODE       256
 
 
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-	      (Loc).first_line, (Loc).first_column,	\
-	      (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -1564,54 +1434,46 @@ while (YYID (0))
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-do {									  \
-  if (yydebug)								  \
-    {									  \
-      YYFPRINTF (stderr, "%s ", Title);					  \
-      yy_symbol_print (stderr,						  \
-		  Type, Value); \
-      YYFPRINTF (stderr, "\n");						  \
-    }									  \
-} while (YYID (0))
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
+} while (0)
 
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Type, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT.  |
+`----------------------------------------*/
+
 static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_value_print (FILE *yyoutput, int yytype, c_exp_YYSTYPE const * const yyvaluep)
 {
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YYUSE (yytype);
 }
 
 
@@ -1619,22 +1481,11 @@ yy_symbol_value_print (yyoutput, yytype,
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
 static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_print (FILE *yyoutput, int yytype, c_exp_YYSTYPE const * const yyvaluep)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyoutput, "%s %s (",
+             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
   YYFPRINTF (yyoutput, ")");
@@ -1645,16 +1496,8 @@ yy_symbol_print (yyoutput, yytype, yyval
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1665,49 +1508,42 @@ yy_stack_print (yybottom, yytop)
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top)                            \
+do {                                                            \
+  if (yydebug)                                                  \
+    yy_stack_print ((Bottom), (Top));                           \
+} while (0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
 static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, c_exp_YYSTYPE *yyvsp, int yyrule)
 {
+  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned long int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
+             yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       		       );
+      yy_symbol_print (stderr,
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                                              );
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -1721,7 +1557,7 @@ int yydebug;
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1736,7 +1572,6 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
 
 #if YYERROR_VERBOSE
 
@@ -1745,15 +1580,8 @@ int yydebug;
 #   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static YYSIZE_T
 yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
 {
   YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
@@ -1769,16 +1597,8 @@ yystrlen (yystr)
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static char *
 yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
 {
   char *yyd = yydest;
   const char *yys = yysrc;
@@ -1808,27 +1628,27 @@ yytnamerr (char *yyres, const char *yyst
       char const *yyp = yystr;
 
       for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
+        switch (*++yyp)
+          {
+          case '\'':
+          case ',':
+            goto do_not_strip_quotes;
+
+          case '\\':
+            if (*++yyp != '\\')
+              goto do_not_strip_quotes;
+            /* Fall through.  */
+          default:
+            if (yyres)
+              yyres[yyn] = *yyp;
+            yyn++;
+            break;
+
+          case '"':
+            if (yyres)
+              yyres[yyn] = '\0';
+            return yyn;
+          }
     do_not_strip_quotes: ;
     }
 
@@ -1839,211 +1659,187 @@ yytnamerr (char *yyres, const char *yyst
 }
 # endif
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
 {
-  int yyn = yypact[yystate];
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = YY_NULLPTRPTR;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
+    {
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                {
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]);
+                  if (! (yysize <= yysize1
+                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                    return 2;
+                  yysize = yysize1;
+                }
+              }
+        }
+    }
 
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
+  switch (yycount)
     {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-	{
-	  /* Avoid sprintf, as that infringes on the user's name space.
-	     Don't have undefined behavior even if the translation
-	     produced a string with the wrong number of "%s"s.  */
-	  char *yyp = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
     }
+
+  {
+    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+      return 2;
+    yysize = yysize1;
+  }
+
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
+    }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
+yydestruct (const char *yymsg, int yytype, c_exp_YYSTYPE *yyvaluep)
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
-/* Prevent warnings from -Wmissing-prototypes.  */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
+
 
 
 /* The lookahead symbol.  */
 int yychar;
 
 /* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-
+c_exp_YYSTYPE yylval;
 /* Number of syntax errors so far.  */
 int yynerrs;
 
 
+/*----------.
+| yyparse.  |
+`----------*/
 
-/*-------------------------.
-| yyparse or yypush_parse.  |
-`-------------------------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
-
-
     int yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
     /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
+       'yyss': related to states.
+       'yyvs': related to semantic values.
 
-       Refer to the stacks thru separate pointers, to allow yyoverflow
+       Refer to the stacks through separate pointers, to allow yyoverflow
        to xreallocate them elsewhere.  */
 
     /* The state stack.  */
@@ -2052,19 +1848,19 @@ yyparse ()
     yytype_int16 *yyssp;
 
     /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
+    c_exp_YYSTYPE yyvsa[YYINITDEPTH];
+    c_exp_YYSTYPE *yyvs;
+    c_exp_YYSTYPE *yyvsp;
 
     YYSIZE_T yystacksize;
 
   int yyn;
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  int yytoken = 0;
   /* The variables used to return semantic value and location from the
      action routines.  */
-  YYSTYPE yyval;
+  c_exp_YYSTYPE yyval;
 
 #if YYERROR_VERBOSE
   /* Buffer for error messages, and its allocated size.  */
@@ -2079,9 +1875,8 @@ yyparse ()
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
   yystacksize = YYINITDEPTH;
 
   YYDPRINTF ((stderr, "Starting parse\n"));
@@ -2090,14 +1885,6 @@ yyparse ()
   yyerrstatus = 0;
   yynerrs = 0;
   yychar = YYEMPTY; /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-  yyssp = yyss;
-  yyvsp = yyvs;
-
   goto yysetstate;
 
 /*------------------------------------------------------------.
@@ -2118,23 +1905,23 @@ yyparse ()
 
 #ifdef yyoverflow
       {
-	/* Give user a chance to xreallocate the stack.  Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
-
-	/* Each stack pointer address is followed by the size of the
-	   data in use in that stack, in bytes.  This used to be a
-	   conditional around just the two extra args, but that might
-	   be undefined if yyoverflow is a macro.  */
-	yyoverflow (YY_("memory exhausted"),
-		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-		    &yystacksize);
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        c_exp_YYSTYPE *yyvs1 = yyvs;
+        yytype_int16 *yyss1 = yyss;
+
+        /* Each stack pointer address is followed by the size of the
+           data in use in that stack, in bytes.  This used to be a
+           conditional around just the two extra args, but that might
+           be undefined if yyoverflow is a macro.  */
+        yyoverflow (YY_("memory exhausted"),
+                    &yyss1, yysize * sizeof (*yyssp),
+                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yystacksize);
 
-	yyss = yyss1;
-	yyvs = yyvs1;
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
@@ -2142,22 +1929,22 @@ yyparse ()
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
+        goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-	yystacksize = YYMAXDEPTH;
+        yystacksize = YYMAXDEPTH;
 
       {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss_alloc, yyss);
-	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+        yytype_int16 *yyss1 = yyss;
+        union c_exp_yyalloc *yyptr =
+          (union c_exp_yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+        if (! yyptr)
+          goto yyexhaustedlab;
+        YYSTACK_RELOCATE (yyss_alloc, yyss);
+        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
+        if (yyss1 != yyssa)
+          YYSTACK_FREE (yyss1);
       }
 # endif
 #endif /* no yyoverflow */
@@ -2166,10 +1953,10 @@ yyparse ()
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+                  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -2189,7 +1976,7 @@ yybackup:
 
   /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
   /* Not known => get a lookahead token if don't already have one.  */
@@ -2198,7 +1985,7 @@ yybackup:
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
@@ -2220,8 +2007,8 @@ yybackup:
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-	goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
@@ -2238,7 +2025,9 @@ yybackup:
   yychar = YYEMPTY;
 
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
   goto yynewstate;
 
@@ -2261,7 +2050,7 @@ yyreduce:
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
+     '$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -2275,804 +2064,836 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-
-/* Line 1455 of yacc.c  */
-#line 282 "c-exp.y"
-    { write_exp_elt_opcode(pstate, OP_TYPE);
-			  write_exp_elt_type(pstate, (yyvsp[(1) - (1)].tval));
-			  write_exp_elt_opcode(pstate, OP_TYPE);}
+#line 282 "c-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<type_operation> ((yyvsp[0].tval));
+			}
+#line 2073 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 5:
-
-/* Line 1455 of yacc.c  */
-#line 286 "c-exp.y"
+#line 286 "c-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_TYPEOF);
+			  pstate->wrap<typeof_operation> ();
 			}
+#line 2081 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 6:
-
-/* Line 1455 of yacc.c  */
-#line 290 "c-exp.y"
+#line 290 "c-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_TYPE);
-			  write_exp_elt_type (pstate, (yyvsp[(3) - (4)].tval));
-			  write_exp_elt_opcode (pstate, OP_TYPE);
+			  pstate->push_new<type_operation> ((yyvsp[-1].tval));
 			}
+#line 2089 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 7:
-
-/* Line 1455 of yacc.c  */
-#line 296 "c-exp.y"
+#line 294 "c-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_DECLTYPE);
+			  pstate->wrap<decltype_operation> ();
 			}
+#line 2097 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 9:
-
-/* Line 1455 of yacc.c  */
-#line 304 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_COMMA); }
+#line 302 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<comma_operation> (); }
+#line 2103 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 10:
-
-/* Line 1455 of yacc.c  */
-#line 309 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
+#line 307 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unop_ind_operation> (); }
+#line 2109 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 11:
-
-/* Line 1455 of yacc.c  */
-#line 313 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
+#line 311 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unop_addr_operation> (); }
+#line 2115 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 12:
-
-/* Line 1455 of yacc.c  */
-#line 317 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_NEG); }
+#line 315 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unary_neg_operation> (); }
+#line 2121 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 13:
-
-/* Line 1455 of yacc.c  */
-#line 321 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PLUS); }
+#line 319 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unary_plus_operation> (); }
+#line 2127 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 14:
-
-/* Line 1455 of yacc.c  */
-#line 325 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+#line 323 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap<opencl_not_operation> ();
+			  else
+			    pstate->wrap<unary_logical_not_operation> ();
+			}
+#line 2139 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 15:
-
-/* Line 1455 of yacc.c  */
-#line 329 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+#line 333 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unary_complement_operation> (); }
+#line 2145 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 16:
-
-/* Line 1455 of yacc.c  */
-#line 333 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
+#line 337 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<preinc_operation> (); }
+#line 2151 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 17:
-
-/* Line 1455 of yacc.c  */
-#line 337 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
+#line 341 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<predec_operation> (); }
+#line 2157 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 18:
-
-/* Line 1455 of yacc.c  */
-#line 341 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
+#line 345 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<postinc_operation> (); }
+#line 2163 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 19:
-
-/* Line 1455 of yacc.c  */
-#line 345 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
+#line 349 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<postdec_operation> (); }
+#line 2169 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 20:
-
-/* Line 1455 of yacc.c  */
-#line 349 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_TYPEID); }
+#line 353 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<typeid_operation> (); }
+#line 2175 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 21:
-
-/* Line 1455 of yacc.c  */
-#line 353 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_TYPEID); }
+#line 357 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<typeid_operation> (); }
+#line 2181 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 22:
-
-/* Line 1455 of yacc.c  */
-#line 357 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+#line 361 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unop_sizeof_operation> (); }
+#line 2187 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 23:
-
-/* Line 1455 of yacc.c  */
-#line 361 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ALIGNOF); }
+#line 365 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unop_alignof_operation> (); }
+#line 2193 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 24:
-
-/* Line 1455 of yacc.c  */
-#line 365 "c-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  write_exp_string (pstate, (yyvsp[(3) - (3)].sval));
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+#line 369 "c-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<structop_ptr_operation>
+			    (pstate->pop (), copy_name ((yyvsp[0].sval)));
+			}
+#line 2202 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 25:
-
-/* Line 1455 of yacc.c  */
-#line 371 "c-exp.y"
-    { pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  write_exp_string (pstate, (yyvsp[(3) - (4)].sval));
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+#line 376 "c-exp.y" /* yacc.c:1646  */
+    {
+			  structop_base_operation *op
+			    = new structop_ptr_operation (pstate->pop (),
+							  copy_name ((yyvsp[-1].sval)));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2214 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 26:
-
-/* Line 1455 of yacc.c  */
-#line 378 "c-exp.y"
-    { struct stoken s;
-			  pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  s.ptr = "";
-			  s.length = 0;
-			  write_exp_string (pstate, s);
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+#line 386 "c-exp.y" /* yacc.c:1646  */
+    {
+			  structop_base_operation *op
+			    = new structop_ptr_operation (pstate->pop (), "");
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2225 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 27:
-
-/* Line 1455 of yacc.c  */
-#line 388 "c-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  write_destructor_name (pstate, (yyvsp[(4) - (4)].sval));
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+#line 395 "c-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<structop_ptr_operation>
+			    (pstate->pop (), "~" + copy_name ((yyvsp[0].sval)));
+			}
+#line 2234 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 28:
-
-/* Line 1455 of yacc.c  */
-#line 394 "c-exp.y"
-    { pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  write_destructor_name (pstate, (yyvsp[(4) - (5)].sval));
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+#line 402 "c-exp.y" /* yacc.c:1646  */
+    {
+			  structop_base_operation *op
+			    = new structop_ptr_operation (pstate->pop (),
+							  "~" + copy_name ((yyvsp[-1].sval)));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2246 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
-#line 401 "c-exp.y"
+#line 412 "c-exp.y" /* yacc.c:1646  */
     { /* exp->type::name becomes exp->*(&type::name) */
 			  /* Note: this doesn't work if name is a
 			     static member!  FIXME */
-			  write_exp_elt_opcode (pstate, UNOP_ADDR);
-			  write_exp_elt_opcode (pstate, STRUCTOP_MPTR); }
+			  pstate->wrap<unop_addr_operation> ();
+			  pstate->wrap2<structop_mptr_operation> (); }
+#line 2256 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
-#line 409 "c-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_MPTR); }
+#line 420 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<structop_mptr_operation> (); }
+#line 2262 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 31:
-
-/* Line 1455 of yacc.c  */
-#line 413 "c-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_exp_string (pstate, (yyvsp[(3) - (3)].sval));
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 424 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->push_new<opencl_structop_operation>
+			      (pstate->pop (), copy_name ((yyvsp[0].sval)));
+			  else
+			    pstate->push_new<structop_operation>
+			      (pstate->pop (), copy_name ((yyvsp[0].sval)));
+			}
+#line 2276 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 32:
-
-/* Line 1455 of yacc.c  */
-#line 419 "c-exp.y"
-    { pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_exp_string (pstate, (yyvsp[(3) - (4)].sval));
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 436 "c-exp.y" /* yacc.c:1646  */
+    {
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (),
+						      copy_name ((yyvsp[-1].sval)));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2288 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 33:
-
-/* Line 1455 of yacc.c  */
-#line 426 "c-exp.y"
-    { struct stoken s;
-			  pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  s.ptr = "";
-			  s.length = 0;
-			  write_exp_string (pstate, s);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 446 "c-exp.y" /* yacc.c:1646  */
+    {
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (), "");
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2299 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 34:
-
-/* Line 1455 of yacc.c  */
-#line 436 "c-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_destructor_name (pstate, (yyvsp[(4) - (4)].sval));
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 455 "c-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<structop_operation>
+			    (pstate->pop (), "~" + copy_name ((yyvsp[0].sval)));
+			}
+#line 2308 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 35:
-
-/* Line 1455 of yacc.c  */
-#line 442 "c-exp.y"
-    { pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_destructor_name (pstate, (yyvsp[(4) - (5)].sval));
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 462 "c-exp.y" /* yacc.c:1646  */
+    {
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (),
+						      "~" + copy_name ((yyvsp[-1].sval)));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2320 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
-#line 449 "c-exp.y"
+#line 472 "c-exp.y" /* yacc.c:1646  */
     { /* exp.type::name becomes exp.*(&type::name) */
 			  /* Note: this doesn't work if name is a
 			     static member!  FIXME */
-			  write_exp_elt_opcode (pstate, UNOP_ADDR);
-			  write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); }
+			  pstate->wrap<unop_addr_operation> ();
+			  pstate->wrap2<structop_member_operation> (); }
+#line 2330 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 37:
-
-/* Line 1455 of yacc.c  */
-#line 457 "c-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); }
+#line 480 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<structop_member_operation> (); }
+#line 2336 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
-#line 461 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+#line 484 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<subscript_operation> (); }
+#line 2342 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 39:
-
-/* Line 1455 of yacc.c  */
-#line 465 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+#line 488 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<subscript_operation> (); }
+#line 2348 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
-#line 474 "c-exp.y"
+#line 497 "c-exp.y" /* yacc.c:1646  */
     {
 			  CORE_ADDR theclass;
 
-			  std::string copy = copy_name ((yyvsp[(2) - (2)].tsym).stoken);
+			  std::string copy = copy_name ((yyvsp[0].tsym).stoken);
 			  theclass = lookup_objc_class (pstate->gdbarch (),
 							copy.c_str ());
 			  if (theclass == 0)
 			    error (_("%s is not an ObjC Class"),
 				   copy.c_str ());
-			  write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate,
-					      parse_type (pstate)->builtin_int);
-			  write_exp_elt_longcst (pstate, (LONGEST) theclass);
-			  write_exp_elt_opcode (pstate, OP_LONG);
+			  pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_int,
+			     (LONGEST) theclass);
 			  start_msglist();
 			}
+#line 2367 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 41:
-
-/* Line 1455 of yacc.c  */
-#line 491 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			  end_msglist (pstate);
-			  write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			}
+#line 512 "c-exp.y" /* yacc.c:1646  */
+    { end_msglist (pstate); }
+#line 2373 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
-#line 498 "c-exp.y"
+#line 516 "c-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate,
-					    parse_type (pstate)->builtin_int);
-			  write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[(2) - (2)].theclass).theclass);
-			  write_exp_elt_opcode (pstate, OP_LONG);
+			  pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_int,
+			     (LONGEST) (yyvsp[0].theclass).theclass);
 			  start_msglist();
 			}
+#line 2384 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 43:
-
-/* Line 1455 of yacc.c  */
-#line 507 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			  end_msglist (pstate);
-			  write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			}
+#line 523 "c-exp.y" /* yacc.c:1646  */
+    { end_msglist (pstate); }
+#line 2390 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 44:
-
-/* Line 1455 of yacc.c  */
-#line 514 "c-exp.y"
+#line 527 "c-exp.y" /* yacc.c:1646  */
     { start_msglist(); }
+#line 2396 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 45:
-
-/* Line 1455 of yacc.c  */
-#line 516 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			  end_msglist (pstate);
-			  write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			}
+#line 529 "c-exp.y" /* yacc.c:1646  */
+    { end_msglist (pstate); }
+#line 2402 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 46:
-
-/* Line 1455 of yacc.c  */
-#line 523 "c-exp.y"
-    { add_msglist(&(yyvsp[(1) - (1)].sval), 0); }
+#line 533 "c-exp.y" /* yacc.c:1646  */
+    { add_msglist(&(yyvsp[0].sval), 0); }
+#line 2408 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 50:
-
-/* Line 1455 of yacc.c  */
-#line 532 "c-exp.y"
-    { add_msglist(&(yyvsp[(1) - (3)].sval), 1); }
+#line 542 "c-exp.y" /* yacc.c:1646  */
+    { add_msglist(&(yyvsp[-2].sval), 1); }
+#line 2414 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 51:
-
-/* Line 1455 of yacc.c  */
-#line 534 "c-exp.y"
+#line 544 "c-exp.y" /* yacc.c:1646  */
     { add_msglist(0, 1);   }
+#line 2420 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 52:
-
-/* Line 1455 of yacc.c  */
-#line 536 "c-exp.y"
+#line 546 "c-exp.y" /* yacc.c:1646  */
     { add_msglist(0, 0);   }
+#line 2426 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 53:
-
-/* Line 1455 of yacc.c  */
-#line 542 "c-exp.y"
+#line 552 "c-exp.y" /* yacc.c:1646  */
     { pstate->start_arglist (); }
+#line 2432 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 54:
-
-/* Line 1455 of yacc.c  */
-#line 544 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate,
-						 pstate->end_arglist ());
-			  write_exp_elt_opcode (pstate, OP_FUNCALL); }
+#line 554 "c-exp.y" /* yacc.c:1646  */
+    {
+			  std::vector<operation_up> args
+			    = pstate->pop_vector (pstate->end_arglist ());
+			  pstate->push_new<funcall_operation>
+			    (pstate->pop (), std::move (args));
+			}
+#line 2443 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 55:
-
-/* Line 1455 of yacc.c  */
-#line 554 "c-exp.y"
-    { pstate->start_arglist ();
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate,
-						 pstate->end_arglist ());
-			  write_exp_elt_opcode (pstate, OP_FUNCALL); }
+#line 566 "c-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<funcall_operation>
+			    (pstate->pop (), std::vector<operation_up> ());
+			}
+#line 2452 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 56:
-
-/* Line 1455 of yacc.c  */
-#line 563 "c-exp.y"
+#line 574 "c-exp.y" /* yacc.c:1646  */
     {
 			  /* This could potentially be a an argument defined
 			     lookup function (Koenig).  */
-			  write_exp_elt_opcode (pstate, OP_ADL_FUNC);
-			  write_exp_elt_block
-			    (pstate, pstate->expression_context_block);
-			  write_exp_elt_sym (pstate,
-					     NULL); /* Placeholder.  */
-			  write_exp_string (pstate, (yyvsp[(1) - (2)].ssym).stoken);
-			  write_exp_elt_opcode (pstate, OP_ADL_FUNC);
-
-			/* This is to save the value of arglist_len
-			   being accumulated by an outer function call.  */
-
+			  /* This is to save the value of arglist_len
+			     being accumulated by an outer function call.  */
 			  pstate->start_arglist ();
 			}
+#line 2464 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 57:
-
-/* Line 1455 of yacc.c  */
-#line 580 "c-exp.y"
+#line 582 "c-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate,
-						 pstate->end_arglist ());
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
+			  std::vector<operation_up> args
+			    = pstate->pop_vector (pstate->end_arglist ());
+			  pstate->push_new<adl_func_operation>
+			    (copy_name ((yyvsp[-4].ssym).stoken),
+			     pstate->expression_context_block,
+			     std::move (args));
 			}
+#line 2477 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 58:
-
-/* Line 1455 of yacc.c  */
-#line 589 "c-exp.y"
+#line 593 "c-exp.y" /* yacc.c:1646  */
     { pstate->start_arglist (); }
+#line 2483 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 60:
-
-/* Line 1455 of yacc.c  */
-#line 596 "c-exp.y"
+#line 600 "c-exp.y" /* yacc.c:1646  */
     { pstate->arglist_len = 1; }
+#line 2489 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 61:
-
-/* Line 1455 of yacc.c  */
-#line 600 "c-exp.y"
+#line 604 "c-exp.y" /* yacc.c:1646  */
     { pstate->arglist_len++; }
+#line 2495 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 62:
-
-/* Line 1455 of yacc.c  */
-#line 604 "c-exp.y"
+#line 608 "c-exp.y" /* yacc.c:1646  */
     {
-			  std::vector<struct type *> *type_list = (yyvsp[(3) - (5)].tvec);
-			  LONGEST len = type_list->size ();
-
-			  write_exp_elt_opcode (pstate, TYPE_INSTANCE);
+			  std::vector<struct type *> *type_list = (yyvsp[-2].tvec);
 			  /* Save the const/volatile qualifiers as
 			     recorded by the const_or_volatile
 			     production's actions.  */
-			  write_exp_elt_longcst
-			    (pstate,
-			     (cpstate->type_stack
-			      .follow_type_instance_flags ()));
-			  write_exp_elt_longcst (pstate, len);
-			  for (type *type_elt : *type_list)
-			    write_exp_elt_type (pstate, type_elt);
-			  write_exp_elt_longcst(pstate, len);
-			  write_exp_elt_opcode (pstate, TYPE_INSTANCE);
+			  type_instance_flags flags
+			    = (cpstate->type_stack
+			       .follow_type_instance_flags ());
+			  pstate->push_new<type_instance_operation>
+			    (flags, std::move (*type_list),
+			     pstate->pop ());
 			}
+#line 2512 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 63:
-
-/* Line 1455 of yacc.c  */
-#line 625 "c-exp.y"
-    { write_exp_elt_opcode (pstate, TYPE_INSTANCE);
-			 /* See above.  */
-			 write_exp_elt_longcst
-			   (pstate,
-			    cpstate->type_stack.follow_type_instance_flags ());
-			 write_exp_elt_longcst (pstate, 0);
-			 write_exp_elt_longcst (pstate, 0);
-			 write_exp_elt_opcode (pstate, TYPE_INSTANCE);
+#line 623 "c-exp.y" /* yacc.c:1646  */
+    {
+			  type_instance_flags flags
+			    = (cpstate->type_stack
+			       .follow_type_instance_flags ());
+			  pstate->push_new<type_instance_operation>
+			    (flags, std::vector<type *> (), pstate->pop ());
 		       }
+#line 2524 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 67:
-
-/* Line 1455 of yacc.c  */
-#line 648 "c-exp.y"
+#line 644 "c-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_FUNC_STATIC_VAR);
-			  write_exp_string (pstate, (yyvsp[(3) - (3)].sval));
-			  write_exp_elt_opcode (pstate, OP_FUNC_STATIC_VAR);
+			  pstate->push_new<func_static_var_operation>
+			    (pstate->pop (), copy_name ((yyvsp[0].sval)));
 			}
+#line 2533 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 68:
-
-/* Line 1455 of yacc.c  */
-#line 656 "c-exp.y"
+#line 651 "c-exp.y" /* yacc.c:1646  */
     { (yyval.lval) = pstate->end_arglist () - 1; }
+#line 2539 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 69:
-
-/* Line 1455 of yacc.c  */
-#line 659 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ARRAY);
-			  write_exp_elt_longcst (pstate, (LONGEST) 0);
-			  write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[(3) - (3)].lval));
-			  write_exp_elt_opcode (pstate, OP_ARRAY); }
+#line 654 "c-exp.y" /* yacc.c:1646  */
+    {
+			  std::vector<operation_up> args
+			    = pstate->pop_vector ((yyvsp[0].lval) + 1);
+			  pstate->push_new<array_operation> (0, (yyvsp[0].lval),
+							     std::move (args));
+			}
+#line 2550 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 70:
-
-/* Line 1455 of yacc.c  */
-#line 666 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_MEMVAL_TYPE); }
+#line 663 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<unop_memval_type_operation> (); }
+#line 2556 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 71:
-
-/* Line 1455 of yacc.c  */
-#line 670 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+#line 667 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_cast_type_operation> ();
+			  else
+			    pstate->wrap2<unop_cast_type_operation> ();
+			}
+#line 2568 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 72:
-
-/* Line 1455 of yacc.c  */
-#line 674 "c-exp.y"
+#line 677 "c-exp.y" /* yacc.c:1646  */
     { }
+#line 2574 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 73:
-
-/* Line 1455 of yacc.c  */
-#line 680 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
+#line 683 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<repeat_operation> (); }
+#line 2580 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 74:
-
-/* Line 1455 of yacc.c  */
-#line 684 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MUL); }
+#line 687 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<mul_operation> (); }
+#line 2586 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 75:
-
-/* Line 1455 of yacc.c  */
-#line 688 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_DIV); }
+#line 691 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<div_operation> (); }
+#line 2592 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 76:
-
-/* Line 1455 of yacc.c  */
-#line 692 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REM); }
+#line 695 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<rem_operation> (); }
+#line 2598 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 77:
-
-/* Line 1455 of yacc.c  */
-#line 696 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ADD); }
+#line 699 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<add_operation> (); }
+#line 2604 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 78:
-
-/* Line 1455 of yacc.c  */
-#line 700 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUB); }
+#line 703 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<sub_operation> (); }
+#line 2610 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 79:
-
-/* Line 1455 of yacc.c  */
-#line 704 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LSH); }
+#line 707 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<lsh_operation> (); }
+#line 2616 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 80:
-
-/* Line 1455 of yacc.c  */
-#line 708 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_RSH); }
+#line 711 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<rsh_operation> (); }
+#line 2622 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 81:
-
-/* Line 1455 of yacc.c  */
-#line 712 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 715 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_equal_operation> ();
+			  else
+			    pstate->wrap2<equal_operation> ();
+			}
+#line 2634 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 82:
-
-/* Line 1455 of yacc.c  */
-#line 716 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 725 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_notequal_operation> ();
+			  else
+			    pstate->wrap2<notequal_operation> ();
+			}
+#line 2646 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 83:
-
-/* Line 1455 of yacc.c  */
-#line 720 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LEQ); }
+#line 735 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_leq_operation> ();
+			  else
+			    pstate->wrap2<leq_operation> ();
+			}
+#line 2658 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 84:
-
-/* Line 1455 of yacc.c  */
-#line 724 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GEQ); }
+#line 745 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_geq_operation> ();
+			  else
+			    pstate->wrap2<geq_operation> ();
+			}
+#line 2670 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 85:
-
-/* Line 1455 of yacc.c  */
-#line 728 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LESS); }
+#line 755 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_less_operation> ();
+			  else
+			    pstate->wrap2<less_operation> ();
+			}
+#line 2682 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 86:
-
-/* Line 1455 of yacc.c  */
-#line 732 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GTR); }
+#line 765 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_gtr_operation> ();
+			  else
+			    pstate->wrap2<gtr_operation> ();
+			}
+#line 2694 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 87:
-
-/* Line 1455 of yacc.c  */
-#line 736 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 775 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<bitwise_and_operation> (); }
+#line 2700 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 88:
-
-/* Line 1455 of yacc.c  */
-#line 740 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 779 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<bitwise_xor_operation> (); }
+#line 2706 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 89:
-
-/* Line 1455 of yacc.c  */
-#line 744 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 783 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<bitwise_ior_operation> (); }
+#line 2712 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 90:
-
-/* Line 1455 of yacc.c  */
-#line 748 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 787 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    {
+			      operation_up rhs = pstate->pop ();
+			      operation_up lhs = pstate->pop ();
+			      pstate->push_new<opencl_logical_binop_operation>
+				(BINOP_LOGICAL_AND, std::move (lhs),
+				 std::move (rhs));
+			    }
+			  else
+			    pstate->wrap2<logical_and_operation> ();
+			}
+#line 2730 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 91:
-
-/* Line 1455 of yacc.c  */
-#line 752 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 803 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    {
+			      operation_up rhs = pstate->pop ();
+			      operation_up lhs = pstate->pop ();
+			      pstate->push_new<opencl_logical_binop_operation>
+				(BINOP_LOGICAL_OR, std::move (lhs),
+				 std::move (rhs));
+			    }
+			  else
+			    pstate->wrap2<logical_or_operation> ();
+			}
+#line 2748 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 92:
-
-/* Line 1455 of yacc.c  */
-#line 756 "c-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_COND); }
+#line 819 "c-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up last = pstate->pop ();
+			  operation_up mid = pstate->pop ();
+			  operation_up first = pstate->pop ();
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->push_new<opencl_ternop_cond_operation>
+			      (std::move (first), std::move (mid),
+			       std::move (last));
+			  else
+			    pstate->push_new<ternop_cond_operation>
+			      (std::move (first), std::move (mid),
+			       std::move (last));
+			}
+#line 2767 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 93:
-
-/* Line 1455 of yacc.c  */
-#line 760 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+#line 836 "c-exp.y" /* yacc.c:1646  */
+    {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_assign_operation> ();
+			  else
+			    pstate->wrap2<assign_operation> ();
+			}
+#line 2779 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 94:
-
-/* Line 1455 of yacc.c  */
-#line 764 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
-			  write_exp_elt_opcode (pstate, (yyvsp[(2) - (3)].opcode));
-			  write_exp_elt_opcode (pstate,
-						BINOP_ASSIGN_MODIFY); }
+#line 846 "c-exp.y" /* yacc.c:1646  */
+    {
+			  operation_up rhs = pstate->pop ();
+			  operation_up lhs = pstate->pop ();
+			  pstate->push_new<assign_modify_operation>
+			    ((yyvsp[-1].opcode), std::move (lhs), std::move (rhs));
+			}
+#line 2790 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 95:
-
-/* Line 1455 of yacc.c  */
-#line 771 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate, (yyvsp[(1) - (1)].typed_val_int).type);
-			  write_exp_elt_longcst (pstate, (LONGEST) ((yyvsp[(1) - (1)].typed_val_int).val));
-			  write_exp_elt_opcode (pstate, OP_LONG); }
+#line 855 "c-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<long_const_operation>
+			    ((yyvsp[0].typed_val_int).type, (yyvsp[0].typed_val_int).val);
+			}
+#line 2799 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 96:
-
-/* Line 1455 of yacc.c  */
-#line 778 "c-exp.y"
+#line 862 "c-exp.y" /* yacc.c:1646  */
     {
-			  struct stoken_vector vec;
-			  vec.len = 1;
-			  vec.tokens = &(yyvsp[(1) - (1)].tsval);
-			  write_exp_string_vector (pstate, (yyvsp[(1) - (1)].tsval).type, &vec);
+			  operation_up real
+			    = (make_operation<long_const_operation>
+			       ((yyvsp[0].typed_val_int).type->target_type (), 0));
+			  operation_up imag
+			    = (make_operation<long_const_operation>
+			       ((yyvsp[0].typed_val_int).type->target_type (), (yyvsp[0].typed_val_int).val));
+			  pstate->push_new<complex_operation>
+			    (std::move (real), std::move (imag), (yyvsp[0].typed_val_int).type);
 			}
+#line 2814 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 97:
-
-/* Line 1455 of yacc.c  */
-#line 787 "c-exp.y"
-    { YYSTYPE val;
-			  parse_number (pstate, (yyvsp[(1) - (1)].ssym).stoken.ptr,
-					(yyvsp[(1) - (1)].ssym).stoken.length, 0, &val);
-			  write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate, val.typed_val_int.type);
-			  write_exp_elt_longcst (pstate,
-					    (LONGEST) val.typed_val_int.val);
-			  write_exp_elt_opcode (pstate, OP_LONG);
+#line 875 "c-exp.y" /* yacc.c:1646  */
+    {
+			  struct stoken_vector vec;
+			  vec.len = 1;
+			  vec.tokens = &(yyvsp[0].tsval);
+			  pstate->push_c_string ((yyvsp[0].tsval).type, &vec);
 			}
+#line 2825 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 98:
-
-/* Line 1455 of yacc.c  */
-#line 800 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_FLOAT);
-			  write_exp_elt_type (pstate, (yyvsp[(1) - (1)].typed_val_float).type);
-			  write_exp_elt_floatcst (pstate, (yyvsp[(1) - (1)].typed_val_float).val);
-			  write_exp_elt_opcode (pstate, OP_FLOAT); }
+#line 884 "c-exp.y" /* yacc.c:1646  */
+    { c_exp_YYSTYPE val;
+			  parse_number (pstate, (yyvsp[0].ssym).stoken.ptr,
+					(yyvsp[0].ssym).stoken.length, 0, &val);
+			  pstate->push_new<long_const_operation>
+			    (val.typed_val_int.type,
+			     val.typed_val_int.val);
+			}
+#line 2837 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 99:
+#line 895 "c-exp.y" /* yacc.c:1646  */
+    {
+			  float_data data;
+			  std::copy (std::begin ((yyvsp[0].typed_val_float).val), std::end ((yyvsp[0].typed_val_float).val),
+				     std::begin (data));
+			  pstate->push_new<float_const_operation> ((yyvsp[0].typed_val_float).type, data);
+			}
+#line 2848 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 100:
-
-/* Line 1455 of yacc.c  */
-#line 810 "c-exp.y"
+#line 904 "c-exp.y" /* yacc.c:1646  */
     {
-			  write_dollar_variable (pstate, (yyvsp[(1) - (1)].sval));
+			  struct type *underlying = (yyvsp[0].typed_val_float).type->target_type ();
+
+			  float_data val;
+			  target_float_from_host_double (val.data (),
+							 underlying, 0);
+			  operation_up real
+			    = (make_operation<float_const_operation>
+			       (underlying, val));
+
+			  std::copy (std::begin ((yyvsp[0].typed_val_float).val), std::end ((yyvsp[0].typed_val_float).val),
+				     std::begin (val));
+			  operation_up imag
+			    = (make_operation<float_const_operation>
+			       (underlying, val));
+
+			  pstate->push_new<complex_operation>
+			    (std::move (real), std::move (imag),
+			     (yyvsp[0].typed_val_float).type);
 			}
+#line 2873 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 101:
-
-/* Line 1455 of yacc.c  */
-#line 816 "c-exp.y"
+  case 102:
+#line 930 "c-exp.y" /* yacc.c:1646  */
     {
-			  write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR);
-			  write_exp_string (pstate, (yyvsp[(3) - (4)].sval));
-			  write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR); }
+			  pstate->push_dollar ((yyvsp[0].sval));
+			}
+#line 2881 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 102:
+  case 103:
+#line 936 "c-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<objc_selector_operation>
+			    (copy_name ((yyvsp[-1].sval)));
+			}
+#line 2890 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 823 "c-exp.y"
-    { struct type *type = (yyvsp[(3) - (4)].tval);
-			  write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate, lookup_signed_typename
-					      (pstate->language (),
-					       "int"));
+  case 104:
+#line 943 "c-exp.y" /* yacc.c:1646  */
+    { struct type *type = (yyvsp[-1].tval);
+			  struct type *int_type
+			    = lookup_signed_typename (pstate->language (),
+						      "int");
 			  type = check_typedef (type);
 
 			    /* $5.3.3/2 of the C++ Standard (n3290 draft)
@@ -3080,47 +2901,42 @@ yyreduce:
 			       or a reference type, the result is the size of
 			       the referenced type."  */
 			  if (TYPE_IS_REFERENCE (type))
-			    type = check_typedef (TYPE_TARGET_TYPE (type));
-			  write_exp_elt_longcst (pstate,
-						 (LONGEST) TYPE_LENGTH (type));
-			  write_exp_elt_opcode (pstate, OP_LONG); }
-    break;
+			    type = check_typedef (type->target_type ());
 
-  case 103:
-
-/* Line 1455 of yacc.c  */
-#line 842 "c-exp.y"
-    { write_exp_elt_opcode (pstate,
-						UNOP_REINTERPRET_CAST); }
-    break;
-
-  case 104:
-
-/* Line 1455 of yacc.c  */
-#line 847 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+			  pstate->push_new<long_const_operation>
+			    (int_type, type->length ());
+			}
+#line 2911 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 105:
-
-/* Line 1455 of yacc.c  */
-#line 851 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_DYNAMIC_CAST); }
+#line 962 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<reinterpret_cast_operation> (); }
+#line 2917 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 106:
+#line 966 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<unop_cast_type_operation> (); }
+#line 2923 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 107:
+#line 970 "c-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<dynamic_cast_operation> (); }
+#line 2929 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 855 "c-exp.y"
+  case 108:
+#line 974 "c-exp.y" /* yacc.c:1646  */
     { /* We could do more error checking here, but
 			     it doesn't seem worthwhile.  */
-			  write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+			  pstate->wrap2<unop_cast_type_operation> (); }
+#line 2937 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 107:
-
-/* Line 1455 of yacc.c  */
-#line 862 "c-exp.y"
+  case 109:
+#line 981 "c-exp.y" /* yacc.c:1646  */
     {
 			  /* We copy the string here, and not in the
 			     lexer, to guarantee that we do not leak a
@@ -3131,17 +2947,16 @@ yyreduce:
 			  (yyval.svec).len = 1;
 			  (yyval.svec).tokens = vec;
 
-			  vec->type = (yyvsp[(1) - (1)].tsval).type;
-			  vec->length = (yyvsp[(1) - (1)].tsval).length;
-			  vec->ptr = (char *) xmalloc ((yyvsp[(1) - (1)].tsval).length + 1);
-			  memcpy (vec->ptr, (yyvsp[(1) - (1)].tsval).ptr, (yyvsp[(1) - (1)].tsval).length + 1);
+			  vec->type = (yyvsp[0].tsval).type;
+			  vec->length = (yyvsp[0].tsval).length;
+			  vec->ptr = (char *) xmalloc ((yyvsp[0].tsval).length + 1);
+			  memcpy (vec->ptr, (yyvsp[0].tsval).ptr, (yyvsp[0].tsval).length + 1);
 			}
+#line 2957 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 108:
-
-/* Line 1455 of yacc.c  */
-#line 879 "c-exp.y"
+  case 110:
+#line 998 "c-exp.y" /* yacc.c:1646  */
     {
 			  /* Note that we NUL-terminate here, but just
 			     for convenience.  */
@@ -3150,26 +2965,25 @@ yyreduce:
 			  (yyval.svec).tokens = XRESIZEVEC (struct typed_stoken,
 						  (yyval.svec).tokens, (yyval.svec).len);
 
-			  p = (char *) xmalloc ((yyvsp[(2) - (2)].tsval).length + 1);
-			  memcpy (p, (yyvsp[(2) - (2)].tsval).ptr, (yyvsp[(2) - (2)].tsval).length + 1);
+			  p = (char *) xmalloc ((yyvsp[0].tsval).length + 1);
+			  memcpy (p, (yyvsp[0].tsval).ptr, (yyvsp[0].tsval).length + 1);
 
-			  (yyval.svec).tokens[(yyval.svec).len - 1].type = (yyvsp[(2) - (2)].tsval).type;
-			  (yyval.svec).tokens[(yyval.svec).len - 1].length = (yyvsp[(2) - (2)].tsval).length;
+			  (yyval.svec).tokens[(yyval.svec).len - 1].type = (yyvsp[0].tsval).type;
+			  (yyval.svec).tokens[(yyval.svec).len - 1].length = (yyvsp[0].tsval).length;
 			  (yyval.svec).tokens[(yyval.svec).len - 1].ptr = p;
 			}
+#line 2977 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 109:
-
-/* Line 1455 of yacc.c  */
-#line 897 "c-exp.y"
+  case 111:
+#line 1016 "c-exp.y" /* yacc.c:1646  */
     {
 			  int i;
 			  c_string_type type = C_STRING;
 
-			  for (i = 0; i < (yyvsp[(1) - (1)].svec).len; ++i)
+			  for (i = 0; i < (yyvsp[0].svec).len; ++i)
 			    {
-			      switch ((yyvsp[(1) - (1)].svec).tokens[i].type)
+			      switch ((yyvsp[0].svec).tokens[i].type)
 				{
 				case C_STRING:
 				  break;
@@ -3177,120 +2991,107 @@ yyreduce:
 				case C_STRING_16:
 				case C_STRING_32:
 				  if (type != C_STRING
-				      && type != (yyvsp[(1) - (1)].svec).tokens[i].type)
+				      && type != (yyvsp[0].svec).tokens[i].type)
 				    error (_("Undefined string concatenation."));
-				  type = (enum c_string_type_values) (yyvsp[(1) - (1)].svec).tokens[i].type;
+				  type = (enum c_string_type_values) (yyvsp[0].svec).tokens[i].type;
 				  break;
 				default:
 				  /* internal error */
-				  internal_error (__FILE__, __LINE__,
-						  "unrecognized type in string concatenation");
+				  internal_error ("unrecognized type in string concatenation");
 				}
 			    }
 
-			  write_exp_string_vector (pstate, type, &(yyvsp[(1) - (1)].svec));
-			  for (i = 0; i < (yyvsp[(1) - (1)].svec).len; ++i)
-			    xfree ((yyvsp[(1) - (1)].svec).tokens[i].ptr);
-			  xfree ((yyvsp[(1) - (1)].svec).tokens);
+			  pstate->push_c_string (type, &(yyvsp[0].svec));
+			  for (i = 0; i < (yyvsp[0].svec).len; ++i)
+			    xfree ((yyvsp[0].svec).tokens[i].ptr);
+			  xfree ((yyvsp[0].svec).tokens);
 			}
+#line 3011 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 110:
-
-/* Line 1455 of yacc.c  */
-#line 932 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_OBJC_NSSTRING);
-			  write_exp_string (pstate, (yyvsp[(1) - (1)].sval));
-			  write_exp_elt_opcode (pstate, OP_OBJC_NSSTRING); }
+  case 112:
+#line 1050 "c-exp.y" /* yacc.c:1646  */
+    {
+			  pstate->push_new<objc_nsstring_operation>
+			    (copy_name ((yyvsp[0].sval)));
+			}
+#line 3020 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 111:
-
-/* Line 1455 of yacc.c  */
-#line 939 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_LONG);
-                          write_exp_elt_type (pstate,
-					  parse_type (pstate)->builtin_bool);
-                          write_exp_elt_longcst (pstate, (LONGEST) 1);
-                          write_exp_elt_opcode (pstate, OP_LONG); }
+  case 113:
+#line 1058 "c-exp.y" /* yacc.c:1646  */
+    { pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_bool, 1);
+			}
+#line 3028 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 112:
-
-/* Line 1455 of yacc.c  */
-#line 947 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_LONG);
-                          write_exp_elt_type (pstate,
-					  parse_type (pstate)->builtin_bool);
-                          write_exp_elt_longcst (pstate, (LONGEST) 0);
-                          write_exp_elt_opcode (pstate, OP_LONG); }
+  case 114:
+#line 1064 "c-exp.y" /* yacc.c:1646  */
+    { pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_bool, 0);
+			}
+#line 3036 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 113:
-
-/* Line 1455 of yacc.c  */
-#line 957 "c-exp.y"
+  case 115:
+#line 1072 "c-exp.y" /* yacc.c:1646  */
     {
-			  if ((yyvsp[(1) - (1)].ssym).sym.symbol)
-			    (yyval.bval) = SYMBOL_BLOCK_VALUE ((yyvsp[(1) - (1)].ssym).sym.symbol);
+			  if ((yyvsp[0].ssym).sym.symbol)
+			    (yyval.bval) = (yyvsp[0].ssym).sym.symbol->value_block ();
 			  else
 			    error (_("No file or function \"%s\"."),
-				   copy_name ((yyvsp[(1) - (1)].ssym).stoken).c_str ());
+				   copy_name ((yyvsp[0].ssym).stoken).c_str ());
 			}
+#line 3048 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 114:
-
-/* Line 1455 of yacc.c  */
-#line 965 "c-exp.y"
+  case 116:
+#line 1080 "c-exp.y" /* yacc.c:1646  */
     {
-			  (yyval.bval) = (yyvsp[(1) - (1)].bval);
+			  (yyval.bval) = (yyvsp[0].bval);
 			}
+#line 3056 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 115:
-
-/* Line 1455 of yacc.c  */
-#line 971 "c-exp.y"
+  case 117:
+#line 1086 "c-exp.y" /* yacc.c:1646  */
     {
-			  std::string copy = copy_name ((yyvsp[(3) - (3)].sval));
+			  std::string copy = copy_name ((yyvsp[0].sval));
 			  struct symbol *tem
-			    = lookup_symbol (copy.c_str (), (yyvsp[(1) - (3)].bval),
-					     VAR_DOMAIN, NULL).symbol;
+			    = lookup_symbol (copy.c_str (), (yyvsp[-2].bval),
+					     SEARCH_FUNCTION_DOMAIN,
+					     nullptr).symbol;
 
-			  if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
+			  if (tem == nullptr)
 			    error (_("No function \"%s\" in specified context."),
 				   copy.c_str ());
-			  (yyval.bval) = SYMBOL_BLOCK_VALUE (tem); }
+			  (yyval.bval) = tem->value_block (); }
+#line 3072 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 116:
-
-/* Line 1455 of yacc.c  */
-#line 984 "c-exp.y"
-    { struct symbol *sym = (yyvsp[(1) - (2)].ssym).sym.symbol;
+  case 118:
+#line 1100 "c-exp.y" /* yacc.c:1646  */
+    { struct symbol *sym = (yyvsp[-1].ssym).sym.symbol;
 
-			  if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym)
+			  if (sym == NULL || !sym->is_argument ()
 			      || !symbol_read_needs_frame (sym))
 			    error (_("@entry can be used only for function "
 				     "parameters, not for \"%s\""),
-				   copy_name ((yyvsp[(1) - (2)].ssym).stoken).c_str ());
+				   copy_name ((yyvsp[-1].ssym).stoken).c_str ());
 
-			  write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
-			  write_exp_elt_sym (pstate, sym);
-			  write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
+			  pstate->push_new<var_entry_value_operation> (sym);
 			}
+#line 3087 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 117:
-
-/* Line 1455 of yacc.c  */
-#line 999 "c-exp.y"
+  case 119:
+#line 1113 "c-exp.y" /* yacc.c:1646  */
     {
-			  std::string copy = copy_name ((yyvsp[(3) - (3)].sval));
+			  std::string copy = copy_name ((yyvsp[0].sval));
 			  struct block_symbol sym
-			    = lookup_symbol (copy.c_str (), (yyvsp[(1) - (3)].bval),
-					     VAR_DOMAIN, NULL);
+			    = lookup_symbol (copy.c_str (), (yyvsp[-2].bval),
+					     SEARCH_VFT, NULL);
 
 			  if (sym.symbol == 0)
 			    error (_("No symbol \"%s\" in specified context."),
@@ -3298,109 +3099,73 @@ yyreduce:
 			  if (symbol_read_needs_frame (sym.symbol))
 			    pstate->block_tracker->update (sym);
 
-			  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-			  write_exp_elt_block (pstate, sym.block);
-			  write_exp_elt_sym (pstate, sym.symbol);
-			  write_exp_elt_opcode (pstate, OP_VAR_VALUE); }
+			  pstate->push_new<var_value_operation> (sym);
+			}
+#line 3106 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 118:
-
-/* Line 1455 of yacc.c  */
-#line 1018 "c-exp.y"
+  case 120:
+#line 1130 "c-exp.y" /* yacc.c:1646  */
     {
-			  struct type *type = (yyvsp[(1) - (3)].tsym).type;
+			  struct type *type = (yyvsp[-2].tsym).type;
 			  type = check_typedef (type);
 			  if (!type_aggregate_p (type))
 			    error (_("`%s' is not defined as an aggregate type."),
 				   TYPE_SAFE_NAME (type));
 
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
-			  write_exp_elt_type (pstate, type);
-			  write_exp_string (pstate, (yyvsp[(3) - (3)].sval));
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
+			  pstate->push_new<scope_operation> (type,
+							     copy_name ((yyvsp[0].sval)));
 			}
+#line 3121 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 119:
-
-/* Line 1455 of yacc.c  */
-#line 1031 "c-exp.y"
+  case 121:
+#line 1141 "c-exp.y" /* yacc.c:1646  */
     {
-			  struct type *type = (yyvsp[(1) - (4)].tsym).type;
-			  struct stoken tmp_token;
-			  char *buf;
+			  struct type *type = (yyvsp[-3].tsym).type;
 
 			  type = check_typedef (type);
 			  if (!type_aggregate_p (type))
 			    error (_("`%s' is not defined as an aggregate type."),
 				   TYPE_SAFE_NAME (type));
-			  buf = (char *) alloca ((yyvsp[(4) - (4)].sval).length + 2);
-			  tmp_token.ptr = buf;
-			  tmp_token.length = (yyvsp[(4) - (4)].sval).length + 1;
-			  buf[0] = '~';
-			  memcpy (buf+1, (yyvsp[(4) - (4)].sval).ptr, (yyvsp[(4) - (4)].sval).length);
-			  buf[tmp_token.length] = 0;
+			  std::string name = "~" + std::string ((yyvsp[0].sval).ptr,
+								(yyvsp[0].sval).length);
 
 			  /* Check for valid destructor name.  */
-			  destructor_name_p (tmp_token.ptr, (yyvsp[(1) - (4)].tsym).type);
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
-			  write_exp_elt_type (pstate, type);
-			  write_exp_string (pstate, tmp_token);
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
+			  destructor_name_p (name.c_str (), (yyvsp[-3].tsym).type);
+			  pstate->push_new<scope_operation> (type,
+							     std::move (name));
 			}
+#line 3141 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 120:
-
-/* Line 1455 of yacc.c  */
-#line 1055 "c-exp.y"
+  case 122:
+#line 1157 "c-exp.y" /* yacc.c:1646  */
     {
-			  std::string copy = copy_name ((yyvsp[(3) - (5)].sval));
+			  std::string copy = copy_name ((yyvsp[-2].sval));
 			  error (_("No type \"%s\" within class "
 				   "or namespace \"%s\"."),
-				 copy.c_str (), TYPE_SAFE_NAME ((yyvsp[(1) - (5)].tsym).type));
+				 copy.c_str (), TYPE_SAFE_NAME ((yyvsp[-4].tsym).type));
 			}
+#line 3152 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 122:
-
-/* Line 1455 of yacc.c  */
-#line 1065 "c-exp.y"
+  case 124:
+#line 1167 "c-exp.y" /* yacc.c:1646  */
     {
-			  std::string name = copy_name ((yyvsp[(2) - (2)].ssym).stoken);
-			  struct symbol *sym;
-			  struct bound_minimal_symbol msymbol;
-
-			  sym
+			  std::string name = copy_name ((yyvsp[0].ssym).stoken);
+			  struct block_symbol sym
 			    = lookup_symbol (name.c_str (),
 					     (const struct block *) NULL,
-					     VAR_DOMAIN, NULL).symbol;
-			  if (sym)
-			    {
-			      write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-			      write_exp_elt_block (pstate, NULL);
-			      write_exp_elt_sym (pstate, sym);
-			      write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-			      break;
-			    }
-
-			  msymbol = lookup_bound_minimal_symbol (name.c_str ());
-			  if (msymbol.minsym != NULL)
-			    write_exp_msymbol (pstate, msymbol);
-			  else if (!have_full_symbols () && !have_partial_symbols ())
-			    error (_("No symbol table is loaded.  Use the \"file\" command."));
-			  else
-			    error (_("No symbol \"%s\" in current context."),
-				   name.c_str ());
+					     SEARCH_VFT, NULL);
+			  pstate->push_symbol (name.c_str (), sym);
 			}
+#line 3165 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 123:
-
-/* Line 1455 of yacc.c  */
-#line 1095 "c-exp.y"
-    { struct block_symbol sym = (yyvsp[(1) - (1)].ssym).sym;
+  case 125:
+#line 1178 "c-exp.y" /* yacc.c:1646  */
+    { struct block_symbol sym = (yyvsp[0].ssym).sym;
 
 			  if (sym.symbol)
 			    {
@@ -3415,30 +3180,25 @@ yyreduce:
 			      bound_minimal_symbol resolver
 				= find_gnu_ifunc (sym.symbol);
 			      if (resolver.minsym != NULL)
-				write_exp_msymbol (pstate, resolver);
+				pstate->push_new<var_msym_value_operation>
+				  (resolver);
 			      else
-				{
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				  write_exp_elt_block (pstate, sym.block);
-				  write_exp_elt_sym (pstate, sym.symbol);
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				}
+				pstate->push_new<var_value_operation> (sym);
 			    }
-			  else if ((yyvsp[(1) - (1)].ssym).is_a_field_of_this)
+			  else if ((yyvsp[0].ssym).is_a_field_of_this)
 			    {
 			      /* C++: it hangs off of `this'.  Must
-			         not inadvertently convert from a method call
+				 not inadvertently convert from a method call
 				 to data ref.  */
 			      pstate->block_tracker->update (sym);
-			      write_exp_elt_opcode (pstate, OP_THIS);
-			      write_exp_elt_opcode (pstate, OP_THIS);
-			      write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			      write_exp_string (pstate, (yyvsp[(1) - (1)].ssym).stoken);
-			      write_exp_elt_opcode (pstate, STRUCTOP_PTR);
+			      operation_up thisop
+				= make_operation<op_this_operation> ();
+			      pstate->push_new<structop_ptr_operation>
+				(std::move (thisop), copy_name ((yyvsp[0].ssym).stoken));
 			    }
 			  else
 			    {
-			      std::string arg = copy_name ((yyvsp[(1) - (1)].ssym).stoken);
+			      std::string arg = copy_name ((yyvsp[0].ssym).stoken);
 
 			      bound_minimal_symbol msymbol
 				= lookup_bound_minimal_symbol (arg.c_str ());
@@ -3459,867 +3219,822 @@ yyreduce:
 				 is important for example for "p
 				 *__errno_location()".  */
 			      symbol *alias_target
-				= ((msymbol.minsym->type != mst_text_gnu_ifunc
-				    && msymbol.minsym->type != mst_data_gnu_ifunc)
+				= ((msymbol.minsym->type () != mst_text_gnu_ifunc
+				    && msymbol.minsym->type () != mst_data_gnu_ifunc)
 				   ? find_function_alias_target (msymbol)
 				   : NULL);
 			      if (alias_target != NULL)
 				{
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				  write_exp_elt_block
-				    (pstate, SYMBOL_BLOCK_VALUE (alias_target));
-				  write_exp_elt_sym (pstate, alias_target);
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
+				  block_symbol bsym { alias_target,
+				    alias_target->value_block () };
+				  pstate->push_new<var_value_operation> (bsym);
 				}
 			      else
-				write_exp_msymbol (pstate, msymbol);
+				pstate->push_new<var_msym_value_operation>
+				  (msymbol);
 			    }
 			}
+#line 3239 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 124:
+  case 128:
+#line 1255 "c-exp.y" /* yacc.c:1646  */
+    { cpstate->type_stack.insert (tp_const); }
+#line 3245 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 129:
+#line 1257 "c-exp.y" /* yacc.c:1646  */
+    { cpstate->type_stack.insert (tp_volatile); }
+#line 3251 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1173 "c-exp.y"
+  case 130:
+#line 1259 "c-exp.y" /* yacc.c:1646  */
+    { cpstate->type_stack.insert (tp_atomic); }
+#line 3257 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 131:
+#line 1261 "c-exp.y" /* yacc.c:1646  */
+    { cpstate->type_stack.insert (tp_restrict); }
+#line 3263 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 132:
+#line 1263 "c-exp.y" /* yacc.c:1646  */
     {
 		  cpstate->type_stack.insert (pstate,
-					      copy_name ((yyvsp[(2) - (2)].ssym).stoken).c_str ());
+					      copy_name ((yyvsp[0].ssym).stoken).c_str ());
 		}
+#line 3272 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 132:
+  case 133:
+#line 1268 "c-exp.y" /* yacc.c:1646  */
+    {
+		  cpstate->type_stack.insert (pstate,
+					      copy_name ((yyvsp[0].ssym).stoken).c_str ());
+		}
+#line 3281 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1197 "c-exp.y"
+  case 138:
+#line 1286 "c-exp.y" /* yacc.c:1646  */
     { cpstate->type_stack.insert (tp_pointer); }
+#line 3287 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 134:
-
-/* Line 1455 of yacc.c  */
-#line 1200 "c-exp.y"
+  case 140:
+#line 1289 "c-exp.y" /* yacc.c:1646  */
     { cpstate->type_stack.insert (tp_pointer); }
+#line 3293 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 136:
-
-/* Line 1455 of yacc.c  */
-#line 1203 "c-exp.y"
+  case 142:
+#line 1292 "c-exp.y" /* yacc.c:1646  */
     { cpstate->type_stack.insert (tp_reference); }
+#line 3299 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 137:
-
-/* Line 1455 of yacc.c  */
-#line 1205 "c-exp.y"
+  case 143:
+#line 1294 "c-exp.y" /* yacc.c:1646  */
     { cpstate->type_stack.insert (tp_reference); }
+#line 3305 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 138:
-
-/* Line 1455 of yacc.c  */
-#line 1207 "c-exp.y"
+  case 144:
+#line 1296 "c-exp.y" /* yacc.c:1646  */
     { cpstate->type_stack.insert (tp_rvalue_reference); }
+#line 3311 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 139:
-
-/* Line 1455 of yacc.c  */
-#line 1209 "c-exp.y"
+  case 145:
+#line 1298 "c-exp.y" /* yacc.c:1646  */
     { cpstate->type_stack.insert (tp_rvalue_reference); }
+#line 3317 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 140:
-
-/* Line 1455 of yacc.c  */
-#line 1213 "c-exp.y"
+  case 146:
+#line 1302 "c-exp.y" /* yacc.c:1646  */
     {
 			  (yyval.type_stack) = cpstate->type_stack.create ();
 			  cpstate->type_stacks.emplace_back ((yyval.type_stack));
 			}
+#line 3326 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 141:
-
-/* Line 1455 of yacc.c  */
-#line 1220 "c-exp.y"
-    { (yyval.type_stack) = (yyvsp[(2) - (2)].type_stack)->append ((yyvsp[(1) - (2)].type_stack)); }
+  case 147:
+#line 1309 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.type_stack) = (yyvsp[0].type_stack)->append ((yyvsp[-1].type_stack)); }
+#line 3332 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 144:
-
-/* Line 1455 of yacc.c  */
-#line 1226 "c-exp.y"
-    { (yyval.type_stack) = (yyvsp[(2) - (3)].type_stack); }
+  case 150:
+#line 1315 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.type_stack) = (yyvsp[-1].type_stack); }
+#line 3338 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 145:
-
-/* Line 1455 of yacc.c  */
-#line 1228 "c-exp.y"
+  case 151:
+#line 1317 "c-exp.y" /* yacc.c:1646  */
     {
-			  cpstate->type_stack.push ((yyvsp[(1) - (2)].type_stack));
-			  cpstate->type_stack.push ((yyvsp[(2) - (2)].lval));
+			  cpstate->type_stack.push ((yyvsp[-1].type_stack));
+			  cpstate->type_stack.push ((yyvsp[0].lval));
 			  cpstate->type_stack.push (tp_array);
 			  (yyval.type_stack) = cpstate->type_stack.create ();
 			  cpstate->type_stacks.emplace_back ((yyval.type_stack));
 			}
+#line 3350 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 146:
-
-/* Line 1455 of yacc.c  */
-#line 1236 "c-exp.y"
+  case 152:
+#line 1325 "c-exp.y" /* yacc.c:1646  */
     {
-			  cpstate->type_stack.push ((yyvsp[(1) - (1)].lval));
+			  cpstate->type_stack.push ((yyvsp[0].lval));
 			  cpstate->type_stack.push (tp_array);
 			  (yyval.type_stack) = cpstate->type_stack.create ();
 			  cpstate->type_stacks.emplace_back ((yyval.type_stack));
 			}
+#line 3361 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 147:
-
-/* Line 1455 of yacc.c  */
-#line 1244 "c-exp.y"
+  case 153:
+#line 1333 "c-exp.y" /* yacc.c:1646  */
     {
-			  cpstate->type_stack.push ((yyvsp[(1) - (2)].type_stack));
-			  cpstate->type_stack.push ((yyvsp[(2) - (2)].tvec));
+			  cpstate->type_stack.push ((yyvsp[-1].type_stack));
+			  cpstate->type_stack.push ((yyvsp[0].tvec));
 			  (yyval.type_stack) = cpstate->type_stack.create ();
 			  cpstate->type_stacks.emplace_back ((yyval.type_stack));
 			}
+#line 3372 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 148:
-
-/* Line 1455 of yacc.c  */
-#line 1251 "c-exp.y"
+  case 154:
+#line 1340 "c-exp.y" /* yacc.c:1646  */
     {
-			  cpstate->type_stack.push ((yyvsp[(1) - (1)].tvec));
+			  cpstate->type_stack.push ((yyvsp[0].tvec));
 			  (yyval.type_stack) = cpstate->type_stack.create ();
 			  cpstate->type_stacks.emplace_back ((yyval.type_stack));
 			}
+#line 3382 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 149:
-
-/* Line 1455 of yacc.c  */
-#line 1259 "c-exp.y"
+  case 155:
+#line 1348 "c-exp.y" /* yacc.c:1646  */
     { (yyval.lval) = -1; }
+#line 3388 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 150:
-
-/* Line 1455 of yacc.c  */
-#line 1261 "c-exp.y"
+  case 156:
+#line 1350 "c-exp.y" /* yacc.c:1646  */
     { (yyval.lval) = -1; }
+#line 3394 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 151:
-
-/* Line 1455 of yacc.c  */
-#line 1263 "c-exp.y"
-    { (yyval.lval) = (yyvsp[(2) - (3)].typed_val_int).val; }
+  case 157:
+#line 1352 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[-1].typed_val_int).val; }
+#line 3400 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 152:
-
-/* Line 1455 of yacc.c  */
-#line 1265 "c-exp.y"
-    { (yyval.lval) = (yyvsp[(2) - (3)].typed_val_int).val; }
+  case 158:
+#line 1354 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[-1].typed_val_int).val; }
+#line 3406 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 153:
-
-/* Line 1455 of yacc.c  */
-#line 1269 "c-exp.y"
+  case 159:
+#line 1358 "c-exp.y" /* yacc.c:1646  */
     {
 			  (yyval.tvec) = new std::vector<struct type *>;
 			  cpstate->type_lists.emplace_back ((yyval.tvec));
 			}
+#line 3415 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 154:
-
-/* Line 1455 of yacc.c  */
-#line 1274 "c-exp.y"
-    { (yyval.tvec) = (yyvsp[(2) - (3)].tvec); }
-    break;
-
-  case 156:
-
-/* Line 1455 of yacc.c  */
-#line 1300 "c-exp.y"
-    { (yyval.tval) = (yyvsp[(1) - (1)].tsym).type; }
+  case 160:
+#line 1363 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tvec) = (yyvsp[-1].tvec); }
+#line 3421 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 157:
-
-/* Line 1455 of yacc.c  */
-#line 1302 "c-exp.y"
+  case 162:
+#line 1382 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "int"); }
+#line 3428 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 158:
-
-/* Line 1455 of yacc.c  */
-#line 1305 "c-exp.y"
+  case 163:
+#line 1385 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3435 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 159:
-
-/* Line 1455 of yacc.c  */
-#line 1308 "c-exp.y"
+  case 164:
+#line 1388 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "short"); }
+#line 3442 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 160:
-
-/* Line 1455 of yacc.c  */
-#line 1311 "c-exp.y"
+  case 165:
+#line 1391 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3449 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 161:
-
-/* Line 1455 of yacc.c  */
-#line 1314 "c-exp.y"
+  case 166:
+#line 1394 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3456 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 162:
-
-/* Line 1455 of yacc.c  */
-#line 1317 "c-exp.y"
+  case 167:
+#line 1397 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3463 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 163:
-
-/* Line 1455 of yacc.c  */
-#line 1320 "c-exp.y"
+  case 168:
+#line 1400 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3470 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 164:
-
-/* Line 1455 of yacc.c  */
-#line 1323 "c-exp.y"
+  case 169:
+#line 1403 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long"); }
+#line 3477 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 165:
-
-/* Line 1455 of yacc.c  */
-#line 1326 "c-exp.y"
+  case 170:
+#line 1406 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long"); }
+#line 3484 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 166:
-
-/* Line 1455 of yacc.c  */
-#line 1329 "c-exp.y"
+  case 171:
+#line 1409 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long"); }
+#line 3491 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 167:
-
-/* Line 1455 of yacc.c  */
-#line 1332 "c-exp.y"
+  case 172:
+#line 1412 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3498 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 168:
-
-/* Line 1455 of yacc.c  */
-#line 1335 "c-exp.y"
+  case 173:
+#line 1415 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3505 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 169:
-
-/* Line 1455 of yacc.c  */
-#line 1338 "c-exp.y"
+  case 174:
+#line 1418 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3512 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 170:
-
-/* Line 1455 of yacc.c  */
-#line 1341 "c-exp.y"
+  case 175:
+#line 1421 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3519 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 171:
-
-/* Line 1455 of yacc.c  */
-#line 1344 "c-exp.y"
+  case 176:
+#line 1424 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3526 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 172:
-
-/* Line 1455 of yacc.c  */
-#line 1347 "c-exp.y"
+  case 177:
+#line 1427 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3533 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 173:
-
-/* Line 1455 of yacc.c  */
-#line 1350 "c-exp.y"
+  case 178:
+#line 1430 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long long"); }
+#line 3540 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 174:
-
-/* Line 1455 of yacc.c  */
-#line 1353 "c-exp.y"
+  case 179:
+#line 1433 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long long"); }
+#line 3547 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 175:
-
-/* Line 1455 of yacc.c  */
-#line 1356 "c-exp.y"
+  case 180:
+#line 1436 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long long"); }
+#line 3554 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 176:
-
-/* Line 1455 of yacc.c  */
-#line 1359 "c-exp.y"
+  case 181:
+#line 1439 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long long"); }
+#line 3561 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 177:
-
-/* Line 1455 of yacc.c  */
-#line 1362 "c-exp.y"
+  case 182:
+#line 1442 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "short"); }
+#line 3568 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 178:
-
-/* Line 1455 of yacc.c  */
-#line 1365 "c-exp.y"
+  case 183:
+#line 1445 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "short"); }
+#line 3575 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 179:
-
-/* Line 1455 of yacc.c  */
-#line 1368 "c-exp.y"
+  case 184:
+#line 1448 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "short"); }
+#line 3582 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 180:
-
-/* Line 1455 of yacc.c  */
-#line 1371 "c-exp.y"
+  case 185:
+#line 1451 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "short"); }
+#line 3589 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 181:
-
-/* Line 1455 of yacc.c  */
-#line 1374 "c-exp.y"
+  case 186:
+#line 1454 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "short"); }
+#line 3596 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 182:
-
-/* Line 1455 of yacc.c  */
-#line 1377 "c-exp.y"
+  case 187:
+#line 1457 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "short"); }
+#line 3603 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 183:
-
-/* Line 1455 of yacc.c  */
-#line 1380 "c-exp.y"
+  case 188:
+#line 1460 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_typename (pstate->language (),
 						"double",
 						NULL,
 						0); }
+#line 3612 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 184:
+  case 189:
+#line 1465 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = lookup_typename (pstate->language (),
+						"float",
+						NULL,
+						0); }
+#line 3621 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1385 "c-exp.y"
+  case 190:
+#line 1470 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_typename (pstate->language (),
 						"long double",
 						NULL,
 						0); }
+#line 3630 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 185:
+  case 191:
+#line 1475 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+							 (yyvsp[0].tsym).type->name ()); }
+#line 3637 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 192:
+#line 1478 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+							 "int"); }
+#line 3644 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 193:
+#line 1481 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+						       (yyvsp[0].tsym).type->name ()); }
+#line 3651 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 194:
+#line 1484 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+						       "int"); }
+#line 3658 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1390 "c-exp.y"
+  case 195:
+#line 1500 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = (yyvsp[0].tsym).type; }
+#line 3664 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 196:
+#line 1502 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = (yyvsp[0].tval); }
+#line 3670 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 197:
+#line 1504 "c-exp.y" /* yacc.c:1646  */
+    {
+			  (yyval.tval) = init_complex_type (nullptr, (yyvsp[0].tval));
+			}
+#line 3678 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
+
+  case 198:
+#line 1508 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval)
-			    = lookup_struct (copy_name ((yyvsp[(2) - (2)].sval)).c_str (),
+			    = lookup_struct (copy_name ((yyvsp[0].sval)).c_str (),
 					     pstate->expression_context_block);
 			}
+#line 3687 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 186:
-
-/* Line 1455 of yacc.c  */
-#line 1395 "c-exp.y"
+  case 199:
+#line 1513 "c-exp.y" /* yacc.c:1646  */
     {
 			  pstate->mark_completion_tag (TYPE_CODE_STRUCT,
 						       "", 0);
 			  (yyval.tval) = NULL;
 			}
+#line 3697 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 187:
-
-/* Line 1455 of yacc.c  */
-#line 1401 "c-exp.y"
+  case 200:
+#line 1519 "c-exp.y" /* yacc.c:1646  */
     {
 			  pstate->mark_completion_tag (TYPE_CODE_STRUCT,
-						       (yyvsp[(2) - (3)].sval).ptr, (yyvsp[(2) - (3)].sval).length);
+						       (yyvsp[-1].sval).ptr, (yyvsp[-1].sval).length);
 			  (yyval.tval) = NULL;
 			}
+#line 3707 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 188:
-
-/* Line 1455 of yacc.c  */
-#line 1407 "c-exp.y"
+  case 201:
+#line 1525 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_struct
-			    (copy_name ((yyvsp[(2) - (2)].sval)).c_str (),
+			    (copy_name ((yyvsp[0].sval)).c_str (),
 			     pstate->expression_context_block);
 			}
+#line 3716 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 189:
-
-/* Line 1455 of yacc.c  */
-#line 1412 "c-exp.y"
+  case 202:
+#line 1530 "c-exp.y" /* yacc.c:1646  */
     {
 			  pstate->mark_completion_tag (TYPE_CODE_STRUCT,
 						       "", 0);
 			  (yyval.tval) = NULL;
 			}
+#line 3726 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 190:
-
-/* Line 1455 of yacc.c  */
-#line 1418 "c-exp.y"
+  case 203:
+#line 1536 "c-exp.y" /* yacc.c:1646  */
     {
 			  pstate->mark_completion_tag (TYPE_CODE_STRUCT,
-						       (yyvsp[(2) - (3)].sval).ptr, (yyvsp[(2) - (3)].sval).length);
+						       (yyvsp[-1].sval).ptr, (yyvsp[-1].sval).length);
 			  (yyval.tval) = NULL;
 			}
+#line 3736 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 191:
-
-/* Line 1455 of yacc.c  */
-#line 1424 "c-exp.y"
+  case 204:
+#line 1542 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval)
-			    = lookup_union (copy_name ((yyvsp[(2) - (2)].sval)).c_str (),
+			    = lookup_union (copy_name ((yyvsp[0].sval)).c_str (),
 					    pstate->expression_context_block);
 			}
+#line 3745 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 192:
-
-/* Line 1455 of yacc.c  */
-#line 1429 "c-exp.y"
+  case 205:
+#line 1547 "c-exp.y" /* yacc.c:1646  */
     {
 			  pstate->mark_completion_tag (TYPE_CODE_UNION,
 						       "", 0);
 			  (yyval.tval) = NULL;
 			}
+#line 3755 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 193:
-
-/* Line 1455 of yacc.c  */
-#line 1435 "c-exp.y"
+  case 206:
+#line 1553 "c-exp.y" /* yacc.c:1646  */
     {
 			  pstate->mark_completion_tag (TYPE_CODE_UNION,
-						       (yyvsp[(2) - (3)].sval).ptr, (yyvsp[(2) - (3)].sval).length);
+						       (yyvsp[-1].sval).ptr, (yyvsp[-1].sval).length);
 			  (yyval.tval) = NULL;
 			}
+#line 3765 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 194:
-
-/* Line 1455 of yacc.c  */
-#line 1441 "c-exp.y"
-    { (yyval.tval) = lookup_enum (copy_name ((yyvsp[(2) - (2)].sval)).c_str (),
+  case 207:
+#line 1559 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = lookup_enum (copy_name ((yyvsp[0].sval)).c_str (),
 					    pstate->expression_context_block);
 			}
+#line 3773 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 195:
-
-/* Line 1455 of yacc.c  */
-#line 1445 "c-exp.y"
+  case 208:
+#line 1563 "c-exp.y" /* yacc.c:1646  */
     {
 			  pstate->mark_completion_tag (TYPE_CODE_ENUM, "", 0);
 			  (yyval.tval) = NULL;
 			}
+#line 3782 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 196:
-
-/* Line 1455 of yacc.c  */
-#line 1450 "c-exp.y"
+  case 209:
+#line 1568 "c-exp.y" /* yacc.c:1646  */
     {
-			  pstate->mark_completion_tag (TYPE_CODE_ENUM, (yyvsp[(2) - (3)].sval).ptr,
-						       (yyvsp[(2) - (3)].sval).length);
+			  pstate->mark_completion_tag (TYPE_CODE_ENUM, (yyvsp[-1].sval).ptr,
+						       (yyvsp[-1].sval).length);
 			  (yyval.tval) = NULL;
 			}
+#line 3792 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 197:
-
-/* Line 1455 of yacc.c  */
-#line 1456 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
-							 TYPE_NAME((yyvsp[(2) - (2)].tsym).type)); }
-    break;
-
-  case 198:
-
-/* Line 1455 of yacc.c  */
-#line 1459 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
-							 "int"); }
-    break;
-
-  case 199:
-
-/* Line 1455 of yacc.c  */
-#line 1462 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
-						       TYPE_NAME((yyvsp[(2) - (2)].tsym).type)); }
-    break;
-
-  case 200:
-
-/* Line 1455 of yacc.c  */
-#line 1465 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
-						       "int"); }
-    break;
-
-  case 201:
-
-/* Line 1455 of yacc.c  */
-#line 1471 "c-exp.y"
+  case 210:
+#line 1577 "c-exp.y" /* yacc.c:1646  */
     { (yyval.tval) = lookup_template_type
-			    (copy_name((yyvsp[(2) - (5)].sval)).c_str (), (yyvsp[(4) - (5)].tval),
+			    (copy_name((yyvsp[-3].sval)).c_str (), (yyvsp[-1].tval),
 			     pstate->expression_context_block);
 			}
+#line 3801 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 202:
-
-/* Line 1455 of yacc.c  */
-#line 1476 "c-exp.y"
-    { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[(2) - (2)].tval)); }
+  case 211:
+#line 1582 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[0].tval)); }
+#line 3807 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 203:
-
-/* Line 1455 of yacc.c  */
-#line 1478 "c-exp.y"
-    { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[(1) - (2)].tval)); }
+  case 212:
+#line 1584 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval)); }
+#line 3813 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 205:
-
-/* Line 1455 of yacc.c  */
-#line 1483 "c-exp.y"
+  case 214:
+#line 1589 "c-exp.y" /* yacc.c:1646  */
     {
 		  (yyval.tsym).stoken.ptr = "int";
 		  (yyval.tsym).stoken.length = 3;
 		  (yyval.tsym).type = lookup_signed_typename (pstate->language (),
 						    "int");
 		}
+#line 3824 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 206:
-
-/* Line 1455 of yacc.c  */
-#line 1490 "c-exp.y"
+  case 215:
+#line 1596 "c-exp.y" /* yacc.c:1646  */
     {
 		  (yyval.tsym).stoken.ptr = "long";
 		  (yyval.tsym).stoken.length = 4;
 		  (yyval.tsym).type = lookup_signed_typename (pstate->language (),
 						    "long");
 		}
+#line 3835 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 207:
-
-/* Line 1455 of yacc.c  */
-#line 1497 "c-exp.y"
+  case 216:
+#line 1603 "c-exp.y" /* yacc.c:1646  */
     {
 		  (yyval.tsym).stoken.ptr = "short";
 		  (yyval.tsym).stoken.length = 5;
 		  (yyval.tsym).type = lookup_signed_typename (pstate->language (),
 						    "short");
 		}
+#line 3846 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 208:
-
-/* Line 1455 of yacc.c  */
-#line 1507 "c-exp.y"
-    { check_parameter_typelist ((yyvsp[(1) - (1)].tvec)); }
+  case 217:
+#line 1613 "c-exp.y" /* yacc.c:1646  */
+    { check_parameter_typelist ((yyvsp[0].tvec)); }
+#line 3852 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 209:
-
-/* Line 1455 of yacc.c  */
-#line 1509 "c-exp.y"
+  case 218:
+#line 1615 "c-exp.y" /* yacc.c:1646  */
     {
-			  (yyvsp[(1) - (3)].tvec)->push_back (NULL);
-			  check_parameter_typelist ((yyvsp[(1) - (3)].tvec));
-			  (yyval.tvec) = (yyvsp[(1) - (3)].tvec);
+			  (yyvsp[-2].tvec)->push_back (NULL);
+			  check_parameter_typelist ((yyvsp[-2].tvec));
+			  (yyval.tvec) = (yyvsp[-2].tvec);
 			}
+#line 3862 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 210:
-
-/* Line 1455 of yacc.c  */
-#line 1518 "c-exp.y"
+  case 219:
+#line 1624 "c-exp.y" /* yacc.c:1646  */
     {
 		  std::vector<struct type *> *typelist
 		    = new std::vector<struct type *>;
 		  cpstate->type_lists.emplace_back (typelist);
 
-		  typelist->push_back ((yyvsp[(1) - (1)].tval));
+		  typelist->push_back ((yyvsp[0].tval));
 		  (yyval.tvec) = typelist;
 		}
+#line 3875 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 211:
-
-/* Line 1455 of yacc.c  */
-#line 1527 "c-exp.y"
+  case 220:
+#line 1633 "c-exp.y" /* yacc.c:1646  */
     {
-		  (yyvsp[(1) - (3)].tvec)->push_back ((yyvsp[(3) - (3)].tval));
-		  (yyval.tvec) = (yyvsp[(1) - (3)].tvec);
+		  (yyvsp[-2].tvec)->push_back ((yyvsp[0].tval));
+		  (yyval.tvec) = (yyvsp[-2].tvec);
 		}
+#line 3884 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 213:
-
-/* Line 1455 of yacc.c  */
-#line 1535 "c-exp.y"
+  case 222:
+#line 1641 "c-exp.y" /* yacc.c:1646  */
     {
-		  cpstate->type_stack.push ((yyvsp[(2) - (2)].type_stack));
-		  (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[(1) - (2)].tval));
+		  cpstate->type_stack.push ((yyvsp[0].type_stack));
+		  (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval));
 		}
+#line 3893 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 214:
-
-/* Line 1455 of yacc.c  */
-#line 1542 "c-exp.y"
-    { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[(1) - (2)].tval)); }
+  case 223:
+#line 1648 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval)); }
+#line 3899 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 219:
-
-/* Line 1455 of yacc.c  */
-#line 1554 "c-exp.y"
+  case 228:
+#line 1660 "c-exp.y" /* yacc.c:1646  */
     { cpstate->type_stack.insert (tp_const);
 			  cpstate->type_stack.insert (tp_volatile);
 			}
+#line 3907 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 220:
-
-/* Line 1455 of yacc.c  */
-#line 1558 "c-exp.y"
+  case 229:
+#line 1664 "c-exp.y" /* yacc.c:1646  */
     { cpstate->type_stack.insert (tp_const); }
+#line 3913 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 221:
-
-/* Line 1455 of yacc.c  */
-#line 1560 "c-exp.y"
+  case 230:
+#line 1666 "c-exp.y" /* yacc.c:1646  */
     { cpstate->type_stack.insert (tp_volatile); }
+#line 3919 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 222:
-
-/* Line 1455 of yacc.c  */
-#line 1564 "c-exp.y"
+  case 231:
+#line 1670 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (" new"); }
+#line 3925 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 223:
-
-/* Line 1455 of yacc.c  */
-#line 1566 "c-exp.y"
+  case 232:
+#line 1672 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (" delete"); }
+#line 3931 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 224:
-
-/* Line 1455 of yacc.c  */
-#line 1568 "c-exp.y"
+  case 233:
+#line 1674 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (" new[]"); }
+#line 3937 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 225:
-
-/* Line 1455 of yacc.c  */
-#line 1570 "c-exp.y"
+  case 234:
+#line 1676 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (" delete[]"); }
+#line 3943 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 226:
-
-/* Line 1455 of yacc.c  */
-#line 1572 "c-exp.y"
+  case 235:
+#line 1678 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (" new[]"); }
+#line 3949 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 227:
-
-/* Line 1455 of yacc.c  */
-#line 1574 "c-exp.y"
+  case 236:
+#line 1680 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (" delete[]"); }
+#line 3955 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 228:
-
-/* Line 1455 of yacc.c  */
-#line 1576 "c-exp.y"
+  case 237:
+#line 1682 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("+"); }
+#line 3961 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 229:
-
-/* Line 1455 of yacc.c  */
-#line 1578 "c-exp.y"
+  case 238:
+#line 1684 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("-"); }
+#line 3967 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 230:
-
-/* Line 1455 of yacc.c  */
-#line 1580 "c-exp.y"
+  case 239:
+#line 1686 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("*"); }
+#line 3973 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 231:
-
-/* Line 1455 of yacc.c  */
-#line 1582 "c-exp.y"
+  case 240:
+#line 1688 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("/"); }
+#line 3979 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 232:
-
-/* Line 1455 of yacc.c  */
-#line 1584 "c-exp.y"
+  case 241:
+#line 1690 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("%"); }
+#line 3985 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 233:
-
-/* Line 1455 of yacc.c  */
-#line 1586 "c-exp.y"
+  case 242:
+#line 1692 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("^"); }
+#line 3991 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 234:
-
-/* Line 1455 of yacc.c  */
-#line 1588 "c-exp.y"
+  case 243:
+#line 1694 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("&"); }
+#line 3997 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 235:
-
-/* Line 1455 of yacc.c  */
-#line 1590 "c-exp.y"
+  case 244:
+#line 1696 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("|"); }
+#line 4003 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 236:
-
-/* Line 1455 of yacc.c  */
-#line 1592 "c-exp.y"
+  case 245:
+#line 1698 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("~"); }
+#line 4009 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 237:
-
-/* Line 1455 of yacc.c  */
-#line 1594 "c-exp.y"
+  case 246:
+#line 1700 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("!"); }
+#line 4015 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 238:
-
-/* Line 1455 of yacc.c  */
-#line 1596 "c-exp.y"
+  case 247:
+#line 1702 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("="); }
+#line 4021 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 239:
-
-/* Line 1455 of yacc.c  */
-#line 1598 "c-exp.y"
+  case 248:
+#line 1704 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("<"); }
+#line 4027 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 240:
-
-/* Line 1455 of yacc.c  */
-#line 1600 "c-exp.y"
+  case 249:
+#line 1706 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (">"); }
+#line 4033 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 241:
-
-/* Line 1455 of yacc.c  */
-#line 1602 "c-exp.y"
+  case 250:
+#line 1708 "c-exp.y" /* yacc.c:1646  */
     { const char *op = " unknown";
-			  switch ((yyvsp[(2) - (2)].opcode))
+			  switch ((yyvsp[0].opcode))
 			    {
 			    case BINOP_RSH:
 			      op = ">>=";
@@ -4357,246 +4072,234 @@ yyreduce:
 
 			  (yyval.sval) = operator_stoken (op);
 			}
+#line 4077 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 242:
-
-/* Line 1455 of yacc.c  */
-#line 1642 "c-exp.y"
+  case 251:
+#line 1748 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("<<"); }
+#line 4083 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 243:
-
-/* Line 1455 of yacc.c  */
-#line 1644 "c-exp.y"
+  case 252:
+#line 1750 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (">>"); }
+#line 4089 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 244:
-
-/* Line 1455 of yacc.c  */
-#line 1646 "c-exp.y"
+  case 253:
+#line 1752 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("=="); }
+#line 4095 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 245:
-
-/* Line 1455 of yacc.c  */
-#line 1648 "c-exp.y"
+  case 254:
+#line 1754 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("!="); }
+#line 4101 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 246:
-
-/* Line 1455 of yacc.c  */
-#line 1650 "c-exp.y"
+  case 255:
+#line 1756 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("<="); }
+#line 4107 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 247:
-
-/* Line 1455 of yacc.c  */
-#line 1652 "c-exp.y"
+  case 256:
+#line 1758 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (">="); }
+#line 4113 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 248:
-
-/* Line 1455 of yacc.c  */
-#line 1654 "c-exp.y"
+  case 257:
+#line 1760 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("&&"); }
+#line 4119 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 249:
-
-/* Line 1455 of yacc.c  */
-#line 1656 "c-exp.y"
+  case 258:
+#line 1762 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("||"); }
+#line 4125 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 250:
-
-/* Line 1455 of yacc.c  */
-#line 1658 "c-exp.y"
+  case 259:
+#line 1764 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("++"); }
+#line 4131 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 251:
-
-/* Line 1455 of yacc.c  */
-#line 1660 "c-exp.y"
+  case 260:
+#line 1766 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("--"); }
+#line 4137 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 252:
-
-/* Line 1455 of yacc.c  */
-#line 1662 "c-exp.y"
+  case 261:
+#line 1768 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken (","); }
+#line 4143 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 253:
-
-/* Line 1455 of yacc.c  */
-#line 1664 "c-exp.y"
+  case 262:
+#line 1770 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("->*"); }
+#line 4149 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 254:
-
-/* Line 1455 of yacc.c  */
-#line 1666 "c-exp.y"
+  case 263:
+#line 1772 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("->"); }
+#line 4155 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 255:
-
-/* Line 1455 of yacc.c  */
-#line 1668 "c-exp.y"
+  case 264:
+#line 1774 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("()"); }
+#line 4161 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 256:
-
-/* Line 1455 of yacc.c  */
-#line 1670 "c-exp.y"
+  case 265:
+#line 1776 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("[]"); }
+#line 4167 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 257:
-
-/* Line 1455 of yacc.c  */
-#line 1672 "c-exp.y"
+  case 266:
+#line 1778 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = operator_stoken ("[]"); }
+#line 4173 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 258:
-
-/* Line 1455 of yacc.c  */
-#line 1674 "c-exp.y"
-    { string_file buf;
-
-			  c_print_type ((yyvsp[(2) - (2)].tval), NULL, &buf, -1, 0,
+  case 267:
+#line 1780 "c-exp.y" /* yacc.c:1646  */
+    {
+			  string_file buf;
+			  c_print_type ((yyvsp[0].tval), NULL, &buf, -1, 0,
+					pstate->language ()->la_language,
 					&type_print_raw_options);
+			  std::string name = buf.release ();
 
 			  /* This also needs canonicalization.  */
-			  std::string canon
-			    = cp_canonicalize_string (buf.c_str ());
-			  if (canon.empty ())
-			    canon = std::move (buf.string ());
-			  (yyval.sval) = operator_stoken ((" " + canon).c_str ());
+			  gdb::unique_xmalloc_ptr<char> canon
+			    = cp_canonicalize_string (name.c_str ());
+			  if (canon != nullptr)
+			    name = canon.get ();
+			  (yyval.sval) = operator_stoken ((" " + name).c_str ());
 			}
+#line 4192 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 260:
-
-/* Line 1455 of yacc.c  */
-#line 1697 "c-exp.y"
+  case 269:
+#line 1803 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = typename_stoken ("double"); }
+#line 4198 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 261:
+  case 270:
+#line 1804 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.sval) = typename_stoken ("float"); }
+#line 4204 "c-exp.c.tmp" /* yacc.c:1646  */
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1698 "c-exp.y"
+  case 271:
+#line 1805 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = typename_stoken ("int"); }
+#line 4210 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 262:
-
-/* Line 1455 of yacc.c  */
-#line 1699 "c-exp.y"
+  case 272:
+#line 1806 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = typename_stoken ("long"); }
+#line 4216 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 263:
-
-/* Line 1455 of yacc.c  */
-#line 1700 "c-exp.y"
+  case 273:
+#line 1807 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = typename_stoken ("short"); }
+#line 4222 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 264:
-
-/* Line 1455 of yacc.c  */
-#line 1701 "c-exp.y"
+  case 274:
+#line 1808 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = typename_stoken ("signed"); }
+#line 4228 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 265:
-
-/* Line 1455 of yacc.c  */
-#line 1702 "c-exp.y"
+  case 275:
+#line 1809 "c-exp.y" /* yacc.c:1646  */
     { (yyval.sval) = typename_stoken ("unsigned"); }
+#line 4234 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 266:
-
-/* Line 1455 of yacc.c  */
-#line 1705 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].ssym).stoken; }
+  case 276:
+#line 1812 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.sval) = (yyvsp[0].ssym).stoken; }
+#line 4240 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 267:
-
-/* Line 1455 of yacc.c  */
-#line 1706 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].ssym).stoken; }
+  case 277:
+#line 1813 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.sval) = (yyvsp[0].ssym).stoken; }
+#line 4246 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 268:
-
-/* Line 1455 of yacc.c  */
-#line 1707 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].tsym).stoken; }
+  case 278:
+#line 1814 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.sval) = (yyvsp[0].tsym).stoken; }
+#line 4252 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 269:
-
-/* Line 1455 of yacc.c  */
-#line 1708 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].ssym).stoken; }
+  case 279:
+#line 1815 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.sval) = (yyvsp[0].ssym).stoken; }
+#line 4258 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 270:
-
-/* Line 1455 of yacc.c  */
-#line 1709 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].ssym).stoken; }
+  case 280:
+#line 1816 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.sval) = (yyvsp[0].ssym).stoken; }
+#line 4264 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 271:
-
-/* Line 1455 of yacc.c  */
-#line 1710 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].sval); }
+  case 281:
+#line 1817 "c-exp.y" /* yacc.c:1646  */
+    { (yyval.sval) = (yyvsp[0].sval); }
+#line 4270 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
-  case 274:
-
-/* Line 1455 of yacc.c  */
-#line 1723 "c-exp.y"
+  case 284:
+#line 1830 "c-exp.y" /* yacc.c:1646  */
     {
 			  struct field_of_this_result is_a_field_of_this;
 
-			  (yyval.ssym).stoken = (yyvsp[(1) - (1)].sval);
+			  (yyval.ssym).stoken = (yyvsp[0].sval);
 			  (yyval.ssym).sym
-			    = lookup_symbol ((yyvsp[(1) - (1)].sval).ptr,
+			    = lookup_symbol ((yyvsp[0].sval).ptr,
 					     pstate->expression_context_block,
-					     VAR_DOMAIN,
+					     SEARCH_VFT,
 					     &is_a_field_of_this);
 			  (yyval.ssym).is_a_field_of_this
 			    = is_a_field_of_this.type != NULL;
 			}
+#line 4287 "c-exp.c.tmp" /* yacc.c:1646  */
     break;
 
 
-
-/* Line 1455 of yacc.c  */
-#line 4599 "c-exp.c.tmp"
+#line 4291 "c-exp.c.tmp" /* yacc.c:1646  */
       default: break;
     }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
@@ -4605,7 +4308,7 @@ yyreduce:
 
   *++yyvsp = yyval;
 
-  /* Now `shift' the result of the reduction.  Determine what state
+  /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
 
@@ -4620,10 +4323,14 @@ yyreduce:
   goto yynewstate;
 
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error.  |
+`--------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -4631,37 +4338,36 @@ yyerrlab:
 #if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
       {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
-
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (yymsg);
-	  }
-	else
-	  {
-	    yyerror (YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
@@ -4670,20 +4376,20 @@ yyerrlab:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-	 error, discard it.  */
+         error, discard it.  */
 
       if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
       else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval);
-	  yychar = YYEMPTY;
-	}
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval);
+          yychar = YYEMPTY;
+        }
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -4702,7 +4408,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -4715,35 +4421,37 @@ yyerrorlab:
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
+      if (!yypact_value_is_default (yyn))
+        {
+          yyn += YYTERROR;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+            {
+              yyn = yytable[yyn];
+              if (0 < yyn)
+                break;
+            }
+        }
 
       /* Pop the current state because it cannot handle the error token.  */
       if (yyssp == yyss)
-	YYABORT;
+        YYABORT;
 
 
       yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp);
+                  yystos[yystate], yyvsp);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
     }
 
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
 
   /* Shift the error token.  */
@@ -4767,7 +4475,7 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+#if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -4779,16 +4487,21 @@ yyexhaustedlab:
 
 yyreturn:
   if (yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval);
-  /* Do not reclaim the symbols of the rule which action triggered
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval);
+    }
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp);
+                  yystos[*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -4799,32 +4512,11 @@ yyreturn:
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
+#line 1845 "c-exp.y" /* yacc.c:1906  */
 
 
-
-/* Line 1675 of yacc.c  */
-#line 1738 "c-exp.y"
-
-
-/* Like write_exp_string, but prepends a '~'.  */
-
-static void
-write_destructor_name (struct parser_state *par_state, struct stoken token)
-{
-  char *copy = (char *) alloca (token.length + 1);
-
-  copy[0] = '~';
-  memcpy (&copy[1], token.ptr, token.length);
-
-  token.ptr = copy;
-  ++token.length;
-
-  write_exp_string (par_state, token);
-}
-
 /* Returns a stoken of the operator name given by OP (which does not
    include the string "operator").  */
 
@@ -4860,11 +4552,11 @@ typename_stoken (const char *type)
 static int
 type_aggregate_p (struct type *type)
 {
-  return (TYPE_CODE (type) == TYPE_CODE_STRUCT
-	  || TYPE_CODE (type) == TYPE_CODE_UNION
-	  || TYPE_CODE (type) == TYPE_CODE_NAMESPACE
-	  || (TYPE_CODE (type) == TYPE_CODE_ENUM
-	      && TYPE_DECLARED_CLASS (type)));
+  return (type->code () == TYPE_CODE_STRUCT
+	  || type->code () == TYPE_CODE_UNION
+	  || type->code () == TYPE_CODE_NAMESPACE
+	  || (type->code () == TYPE_CODE_ENUM
+	      && type->is_declared_class ()));
 }
 
 /* Validate a parameter typelist.  */
@@ -4878,7 +4570,7 @@ check_parameter_typelist (std::vector<st
   for (ix = 0; ix < params->size (); ++ix)
     {
       type = (*params)[ix];
-      if (type != NULL && TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID)
+      if (type != NULL && check_typedef (type)->code () == TYPE_CODE_VOID)
 	{
 	  if (ix == 0)
 	    {
@@ -4903,11 +4595,10 @@ check_parameter_typelist (std::vector<st
 
 static int
 parse_number (struct parser_state *par_state,
-	      const char *buf, int len, int parsed_float, YYSTYPE *putithere)
+	      const char *buf, int len, int parsed_float, c_exp_YYSTYPE *putithere)
 {
   ULONGEST n = 0;
   ULONGEST prevn = 0;
-  ULONGEST un;
 
   int i = 0;
   int c;
@@ -4917,12 +4608,12 @@ parse_number (struct parser_state *par_s
   /* Number of "L" suffixes encountered.  */
   int long_p = 0;
 
-  /* We have found a "L" or "U" suffix.  */
+  /* Imaginary number.  */
+  bool imaginary_p = false;
+
+  /* We have found a "L" or "U" (or "i") suffix.  */
   int found_suffix = 0;
 
-  ULONGEST high_bit;
-  struct type *signed_type;
-  struct type *unsigned_type;
   char *p;
 
   p = (char *) alloca (len);
@@ -4930,6 +4621,12 @@ parse_number (struct parser_state *par_s
 
   if (parsed_float)
     {
+      if (len >= 1 && p[len - 1] == 'i')
+	{
+	  imaginary_p = true;
+	  --len;
+	}
+
       /* Handle suffixes for decimal floating-point: "df", "dd" or "dl".  */
       if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'f')
 	{
@@ -4972,8 +4669,13 @@ parse_number (struct parser_state *par_s
       if (!parse_float (p, len,
 			putithere->typed_val_float.type,
 			putithere->typed_val_float.val))
-        return ERROR;
-      return FLOAT;
+	return ERROR;
+
+      if (imaginary_p)
+	putithere->typed_val_float.type
+	  = init_complex_type (nullptr, putithere->typed_val_float.type);
+
+      return imaginary_p ? COMPLEX_FLOAT : FLOAT;
     }
 
   /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
@@ -5022,7 +4724,7 @@ parse_number (struct parser_state *par_s
       c = *p++;
       if (c >= 'A' && c <= 'Z')
 	c += 'a' - 'A';
-      if (c != 'l' && c != 'u')
+      if (c != 'l' && c != 'u' && c != 'i')
 	n *= base;
       if (c >= '0' && c <= '9')
 	{
@@ -5048,24 +4750,23 @@ parse_number (struct parser_state *par_s
 	      unsigned_p = 1;
 	      found_suffix = 1;
 	    }
+	  else if (c == 'i')
+	    {
+	      imaginary_p = true;
+	      found_suffix = 1;
+	    }
 	  else
 	    return ERROR;	/* Char not a digit */
 	}
       if (i >= base)
 	return ERROR;		/* Invalid digit in this base */
 
-      /* Portably test for overflow (only works for nonzero values, so make
-	 a second check for zero).  FIXME: Can't we just make n and prevn
-	 unsigned and avoid this?  */
-      if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
-	unsigned_p = 1;		/* Try something unsigned */
-
-      /* Portably test for unsigned overflow.
-	 FIXME: This check is wrong; for example it doesn't find overflow
-	 on 0x123456789 when LONGEST is 32 bits.  */
-      if (c != 'l' && c != 'u' && n != 0)
-	{	
-	  if (unsigned_p && prevn >= n)
+      if (c != 'l' && c != 'u' && c != 'i')
+	{
+	  /* Test for overflow.  */
+	  if (prevn == 0 && n == 0)
+	    ;
+	  else if (prevn >= n)
 	    error (_("Numeric constant too large."));
 	}
       prevn = n;
@@ -5082,60 +4783,51 @@ parse_number (struct parser_state *par_s
      or gdbarch_long_bit will be that big, sometimes not.  To deal with
      the case where it is we just always shift the value more than
      once, with fewer bits each time.  */
-
-  un = n >> 2;
-  if (long_p == 0
-      && (un >> (gdbarch_int_bit (par_state->gdbarch ()) - 2)) == 0)
-    {
-      high_bit
-	= ((ULONGEST)1) << (gdbarch_int_bit (par_state->gdbarch ()) - 1);
-
-      /* A large decimal (not hex or octal) constant (between INT_MAX
-	 and UINT_MAX) is a long or unsigned long, according to ANSI,
-	 never an unsigned int, but this code treats it as unsigned
-	 int.  This probably should be fixed.  GCC gives a warning on
-	 such constants.  */
-
-      unsigned_type = parse_type (par_state)->builtin_unsigned_int;
-      signed_type = parse_type (par_state)->builtin_int;
-    }
-  else if (long_p <= 1
-	   && (un >> (gdbarch_long_bit (par_state->gdbarch ()) - 2)) == 0)
-    {
-      high_bit
-	= ((ULONGEST)1) << (gdbarch_long_bit (par_state->gdbarch ()) - 1);
-      unsigned_type = parse_type (par_state)->builtin_unsigned_long;
-      signed_type = parse_type (par_state)->builtin_long;
-    }
+  int int_bits = gdbarch_int_bit (par_state->gdbarch ());
+  int long_bits = gdbarch_long_bit (par_state->gdbarch ());
+  int long_long_bits = gdbarch_long_long_bit (par_state->gdbarch ());
+  bool have_signed
+    /* No 'u' suffix.  */
+    = !unsigned_p;
+  bool have_unsigned
+    = ((/* 'u' suffix.  */
+	unsigned_p)
+       || (/* Not a decimal.  */
+	   base != 10)
+       || (/* Allowed as a convenience, in case decimal doesn't fit in largest
+	      signed type.  */
+	   !fits_in_type (1, n, long_long_bits, true)));
+  bool have_int
+    /* No 'l' or 'll' suffix.  */
+    = long_p == 0;
+  bool have_long
+    /* No 'll' suffix.  */
+    = long_p <= 1;
+  if (have_int && have_signed && fits_in_type (1, n, int_bits, true))
+    putithere->typed_val_int.type = parse_type (par_state)->builtin_int;
+  else if (have_int && have_unsigned && fits_in_type (1, n, int_bits, false))
+    putithere->typed_val_int.type
+      = parse_type (par_state)->builtin_unsigned_int;
+  else if (have_long && have_signed && fits_in_type (1, n, long_bits, true))
+    putithere->typed_val_int.type = parse_type (par_state)->builtin_long;
+  else if (have_long && have_unsigned && fits_in_type (1, n, long_bits, false))
+    putithere->typed_val_int.type
+      = parse_type (par_state)->builtin_unsigned_long;
+  else if (have_signed && fits_in_type (1, n, long_long_bits, true))
+    putithere->typed_val_int.type
+      = parse_type (par_state)->builtin_long_long;
+  else if (have_unsigned && fits_in_type (1, n, long_long_bits, false))
+    putithere->typed_val_int.type
+      = parse_type (par_state)->builtin_unsigned_long_long;
   else
-    {
-      int shift;
-      if (sizeof (ULONGEST) * HOST_CHAR_BIT
-	  < gdbarch_long_long_bit (par_state->gdbarch ()))
-	/* A long long does not fit in a LONGEST.  */
-	shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
-      else
-	shift = (gdbarch_long_long_bit (par_state->gdbarch ()) - 1);
-      high_bit = (ULONGEST) 1 << shift;
-      unsigned_type = parse_type (par_state)->builtin_unsigned_long_long;
-      signed_type = parse_type (par_state)->builtin_long_long;
-    }
-
-   putithere->typed_val_int.val = n;
-
-   /* If the high bit of the worked out type is set then this number
-      has to be unsigned. */
-
-   if (unsigned_p || (n & high_bit))
-     {
-       putithere->typed_val_int.type = unsigned_type;
-     }
-   else
-     {
-       putithere->typed_val_int.type = signed_type;
-     }
+    error (_("Numeric constant too large."));
+  putithere->typed_val_int.val = n;
+
+   if (imaginary_p)
+     putithere->typed_val_int.type
+       = init_complex_type (nullptr, putithere->typed_val_int.type);
 
-   return INT;
+   return imaginary_p ? COMPLEX_INT : INT;
 }
 
 /* Temporary obstack used for holding strings.  */
@@ -5417,15 +5109,19 @@ enum token_flag
 
   FLAG_CXX = 1,
 
+  /* If this bit is set, the token is C-only.  */
+
+  FLAG_C = 2,
+
   /* If this bit is set, the token is conditional: if there is a
      symbol of the same name, then the token is a symbol; otherwise,
      the token is a keyword.  */
 
-  FLAG_SHADOW = 2
+  FLAG_SHADOW = 4
 };
 DEF_ENUM_FLAGS_TYPE (enum token_flag, token_flags);
 
-struct token
+struct c_token
 {
   const char *oper;
   int token;
@@ -5433,15 +5129,15 @@ struct token
   token_flags flags;
 };
 
-static const struct token tokentab3[] =
+static const struct c_token tokentab3[] =
   {
     {">>=", ASSIGN_MODIFY, BINOP_RSH, 0},
     {"<<=", ASSIGN_MODIFY, BINOP_LSH, 0},
-    {"->*", ARROW_STAR, BINOP_END, FLAG_CXX},
-    {"...", DOTDOTDOT, BINOP_END, 0}
+    {"->*", ARROW_STAR, OP_NULL, FLAG_CXX},
+    {"...", DOTDOTDOT, OP_NULL, 0}
   };
 
-static const struct token tokentab2[] =
+static const struct c_token tokentab2[] =
   {
     {"+=", ASSIGN_MODIFY, BINOP_ADD, 0},
     {"-=", ASSIGN_MODIFY, BINOP_SUB, 0},
@@ -5451,28 +5147,28 @@ static const struct token tokentab2[] =
     {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 0},
     {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND, 0},
     {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 0},
-    {"++", INCREMENT, BINOP_END, 0},
-    {"--", DECREMENT, BINOP_END, 0},
-    {"->", ARROW, BINOP_END, 0},
-    {"&&", ANDAND, BINOP_END, 0},
-    {"||", OROR, BINOP_END, 0},
+    {"++", INCREMENT, OP_NULL, 0},
+    {"--", DECREMENT, OP_NULL, 0},
+    {"->", ARROW, OP_NULL, 0},
+    {"&&", ANDAND, OP_NULL, 0},
+    {"||", OROR, OP_NULL, 0},
     /* "::" is *not* only C++: gdb overrides its meaning in several
        different ways, e.g., 'filename'::func, function::variable.  */
-    {"::", COLONCOLON, BINOP_END, 0},
-    {"<<", LSH, BINOP_END, 0},
-    {">>", RSH, BINOP_END, 0},
-    {"==", EQUAL, BINOP_END, 0},
-    {"!=", NOTEQUAL, BINOP_END, 0},
-    {"<=", LEQ, BINOP_END, 0},
-    {">=", GEQ, BINOP_END, 0},
-    {".*", DOT_STAR, BINOP_END, FLAG_CXX}
+    {"::", COLONCOLON, OP_NULL, 0},
+    {"<<", LSH, OP_NULL, 0},
+    {">>", RSH, OP_NULL, 0},
+    {"==", EQUAL, OP_NULL, 0},
+    {"!=", NOTEQUAL, OP_NULL, 0},
+    {"<=", LEQ, OP_NULL, 0},
+    {">=", GEQ, OP_NULL, 0},
+    {".*", DOT_STAR, OP_NULL, FLAG_CXX}
   };
 
 /* Identifier-like tokens.  Only type-specifiers than can appear in
    multi-word type names (for example 'double' can appear in 'long
    double') need to be listed here.  type-specifiers that are only ever
-   single word (like 'float') are handled by the classify_name function.  */
-static const struct token ident_tokens[] =
+   single word (like 'char') are handled by the classify_name function.  */
+static const struct c_token ident_tokens[] =
   {
     {"unsigned", UNSIGNED, OP_NULL, 0},
     {"template", TEMPLATE, OP_NULL, FLAG_CXX},
@@ -5483,27 +5179,35 @@ static const struct token ident_tokens[]
     {"_Alignof", ALIGNOF, OP_NULL, 0},
     {"alignof", ALIGNOF, OP_NULL, FLAG_CXX},
     {"double", DOUBLE_KEYWORD, OP_NULL, 0},
+    {"float", FLOAT_KEYWORD, OP_NULL, 0},
     {"false", FALSEKEYWORD, OP_NULL, FLAG_CXX},
     {"class", CLASS, OP_NULL, FLAG_CXX},
     {"union", UNION, OP_NULL, 0},
     {"short", SHORT, OP_NULL, 0},
     {"const", CONST_KEYWORD, OP_NULL, 0},
+    {"restrict", RESTRICT, OP_NULL, FLAG_C | FLAG_SHADOW},
+    {"__restrict__", RESTRICT, OP_NULL, 0},
+    {"__restrict", RESTRICT, OP_NULL, 0},
+    {"_Atomic", ATOMIC, OP_NULL, 0},
     {"enum", ENUM, OP_NULL, 0},
     {"long", LONG, OP_NULL, 0},
+    {"_Complex", COMPLEX, OP_NULL, 0},
+    {"__complex__", COMPLEX, OP_NULL, 0},
+
     {"true", TRUEKEYWORD, OP_NULL, FLAG_CXX},
     {"int", INT_KEYWORD, OP_NULL, 0},
     {"new", NEW, OP_NULL, FLAG_CXX},
     {"delete", DELETE, OP_NULL, FLAG_CXX},
     {"operator", OPERATOR, OP_NULL, FLAG_CXX},
 
-    {"and", ANDAND, BINOP_END, FLAG_CXX},
+    {"and", ANDAND, OP_NULL, FLAG_CXX},
     {"and_eq", ASSIGN_MODIFY, BINOP_BITWISE_AND, FLAG_CXX},
     {"bitand", '&', OP_NULL, FLAG_CXX},
     {"bitor", '|', OP_NULL, FLAG_CXX},
     {"compl", '~', OP_NULL, FLAG_CXX},
     {"not", '!', OP_NULL, FLAG_CXX},
-    {"not_eq", NOTEQUAL, BINOP_END, FLAG_CXX},
-    {"or", OROR, BINOP_END, FLAG_CXX},
+    {"not_eq", NOTEQUAL, OP_NULL, FLAG_CXX},
+    {"or", OROR, OP_NULL, FLAG_CXX},
     {"or_eq", ASSIGN_MODIFY, BINOP_BITWISE_IOR, FLAG_CXX},
     {"xor", '^', OP_NULL, FLAG_CXX},
     {"xor_eq", ASSIGN_MODIFY, BINOP_BITWISE_XOR, FLAG_CXX},
@@ -5524,17 +5228,13 @@ static const struct token ident_tokens[]
 
 
 static void
-scan_macro_expansion (char *expansion)
+scan_macro_expansion (const char *expansion)
 {
-  const char *copy;
-
   /* We'd better not be trying to push the stack twice.  */
   gdb_assert (! cpstate->macro_original_text);
 
-  /* Copy to the obstack, and then free the intermediate
-     expansion.  */
-  copy = obstack_strdup (&cpstate->expansion_obstack, expansion);
-  xfree (expansion);
+  /* Copy to the obstack.  */
+  const char *copy = obstack_strdup (&cpstate->expansion_obstack, expansion);
 
   /* Save the old lexptr value, so we can return to it when we're done
      parsing the expanded text.  */
@@ -5592,7 +5292,6 @@ lex_one_token (struct parser_state *par_
 {
   int c;
   int namelen;
-  unsigned int i;
   const char *tokstart;
   bool saw_structop = last_was_structop;
 
@@ -5604,59 +5303,60 @@ lex_one_token (struct parser_state *par_
   /* Check if this is a macro invocation that we need to expand.  */
   if (! scanning_macro_expansion ())
     {
-      char *expanded = macro_expand_next (&pstate->lexptr,
-                                          standard_macro_lookup,
-                                          expression_macro_scope);
+      gdb::unique_xmalloc_ptr<char> expanded
+	= macro_expand_next (&pstate->lexptr, *expression_macro_scope);
 
-      if (expanded)
-        scan_macro_expansion (expanded);
+      if (expanded != nullptr)
+	scan_macro_expansion (expanded.get ());
     }
 
   pstate->prev_lexptr = pstate->lexptr;
 
   tokstart = pstate->lexptr;
   /* See if it is a special token of length 3.  */
-  for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
-    if (strncmp (tokstart, tokentab3[i].oper, 3) == 0)
+  for (const auto &token : tokentab3)
+    if (strncmp (tokstart, token.oper, 3) == 0)
       {
-	if ((tokentab3[i].flags & FLAG_CXX) != 0
+	if ((token.flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	gdb_assert ((token.flags & FLAG_C) == 0);
 
 	pstate->lexptr += 3;
-	yylval.opcode = tokentab3[i].opcode;
-	return tokentab3[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   /* See if it is a special token of length 2.  */
-  for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
-    if (strncmp (tokstart, tokentab2[i].oper, 2) == 0)
+  for (const auto &token : tokentab2)
+    if (strncmp (tokstart, token.oper, 2) == 0)
       {
-	if ((tokentab2[i].flags & FLAG_CXX) != 0
+	if ((token.flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	gdb_assert ((token.flags & FLAG_C) == 0);
 
 	pstate->lexptr += 2;
-	yylval.opcode = tokentab2[i].opcode;
-	if (tokentab2[i].token == ARROW)
+	yylval.opcode = token.opcode;
+	if (token.token == ARROW)
 	  last_was_structop = 1;
-	return tokentab2[i].token;
+	return token.token;
       }
 
   switch (c = *tokstart)
     {
     case 0:
       /* If we were just scanning the result of a macro expansion,
-         then we need to resume scanning the original text.
+	 then we need to resume scanning the original text.
 	 If we're parsing for field name completion, and the previous
 	 token allows such completion, return a COMPLETE token.
-         Otherwise, we were already scanning the original text, and
-         we're really done.  */
+	 Otherwise, we were already scanning the original text, and
+	 we're really done.  */
       if (scanning_macro_expansion ())
-        {
-          finished_macro_expansion ();
-          goto retry;
-        }
+	{
+	  finished_macro_expansion ();
+	  goto retry;
+	}
       else if (saw_name_at_eof)
 	{
 	  saw_name_at_eof = 0;
@@ -5665,7 +5365,7 @@ lex_one_token (struct parser_state *par_
       else if (par_state->parse_completion && saw_structop)
 	return COMPLETE;
       else
-        return 0;
+	return 0;
 
     case ' ':
     case '\t':
@@ -5692,8 +5392,8 @@ lex_one_token (struct parser_state *par_
 
     case ',':
       if (pstate->comma_terminates
-          && paren_depth == 0
-          && ! scanning_macro_expansion ())
+	  && paren_depth == 0
+	  && ! scanning_macro_expansion ())
 	return 0;
       pstate->lexptr++;
       return c;
@@ -5705,7 +5405,7 @@ lex_one_token (struct parser_state *par_
 	  last_was_structop = true;
 	  goto symbol;		/* Nope, must be a symbol. */
 	}
-      /* FALL THRU.  */
+      [[fallthrough]];
 
     case '0':
     case '1':
@@ -5719,7 +5419,7 @@ lex_one_token (struct parser_state *par_
     case '9':
       {
 	/* It's a number.  */
-	int got_dot = 0, got_e = 0, toktype;
+	int got_dot = 0, got_e = 0, got_p = 0, toktype;
 	const char *p = tokstart;
 	int hex = input_radix > 10;
 
@@ -5739,13 +5439,16 @@ lex_one_token (struct parser_state *par_
 	    /* This test includes !hex because 'e' is a valid hex digit
 	       and thus does not indicate a floating point number when
 	       the radix is hex.  */
-	    if (!hex && !got_e && (*p == 'e' || *p == 'E'))
+	    if (!hex && !got_e && !got_p && (*p == 'e' || *p == 'E'))
 	      got_dot = got_e = 1;
+	    else if (!got_e && !got_p && (*p == 'p' || *p == 'P'))
+	      got_dot = got_p = 1;
 	    /* This test does not include !hex, because a '.' always indicates
 	       a decimal floating point number regardless of the radix.  */
 	    else if (!got_dot && *p == '.')
 	      got_dot = 1;
-	    else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
+	    else if (((got_e && (p[-1] == 'e' || p[-1] == 'E'))
+		      || (got_p && (p[-1] == 'p' || p[-1] == 'P')))
 		     && (*p == '-' || *p == '+'))
 	      /* This is the sign of the exponent, not the end of the
 		 number.  */
@@ -5758,8 +5461,8 @@ lex_one_token (struct parser_state *par_
 	      break;
 	  }
 	toktype = parse_number (par_state, tokstart, p - tokstart,
-				got_dot|got_e, &yylval);
-        if (toktype == ERROR)
+				got_dot | got_e | got_p, &yylval);
+	if (toktype == ERROR)
 	  {
 	    char *err_copy = (char *) alloca (p - tokstart + 1);
 
@@ -5799,7 +5502,7 @@ lex_one_token (struct parser_state *par_
 	    return ENTRY;
 	  }
       }
-      /* FALLTHRU */
+      [[fallthrough]];
     case '+':
     case '-':
     case '*':
@@ -5826,7 +5529,7 @@ lex_one_token (struct parser_state *par_
     case 'U':
       if (tokstart[1] != '"' && tokstart[1] != '\'')
 	break;
-      /* Fall through.  */
+      [[fallthrough]];
     case '\'':
     case '"':
 
@@ -5923,22 +5626,26 @@ lex_one_token (struct parser_state *par_
 
   /* Catch specific keywords.  */
   std::string copy = copy_name (yylval.sval);
-  for (i = 0; i < sizeof ident_tokens / sizeof ident_tokens[0]; i++)
-    if (copy == ident_tokens[i].oper)
+  for (const auto &token : ident_tokens)
+    if (copy == token.oper)
       {
-	if ((ident_tokens[i].flags & FLAG_CXX) != 0
+	if ((token.flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	if ((token.flags & FLAG_C) != 0
+	    && par_state->language ()->la_language != language_c
+	    && par_state->language ()->la_language != language_objc)
+	  break;
 
-	if ((ident_tokens[i].flags & FLAG_SHADOW) != 0)
+	if ((token.flags & FLAG_SHADOW) != 0)
 	  {
 	    struct field_of_this_result is_a_field_of_this;
 
 	    if (lookup_symbol (copy.c_str (),
 			       pstate->expression_context_block,
-			       VAR_DOMAIN,
+			       SEARCH_VFT,
 			       (par_state->language ()->la_language
-			        == language_cplus ? &is_a_field_of_this
+				== language_cplus ? &is_a_field_of_this
 				: NULL)).symbol
 		!= NULL)
 	      {
@@ -5949,8 +5656,8 @@ lex_one_token (struct parser_state *par_
 
 	/* It is ok to always set this, even though we don't always
 	   strictly need to.  */
-	yylval.opcode = ident_tokens[i].opcode;
-	return ident_tokens[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   if (*tokstart == '$')
@@ -5967,22 +5674,22 @@ lex_one_token (struct parser_state *par_
 }
 
 /* An object of this type is pushed on a FIFO by the "outer" lexer.  */
-struct token_and_value
+struct c_token_and_value
 {
   int token;
-  YYSTYPE value;
+  c_exp_YYSTYPE value;
 };
 
 /* A FIFO of tokens that have been read but not yet returned to the
    parser.  */
-static std::vector<token_and_value> token_fifo;
+static std::vector<c_token_and_value> token_fifo;
 
 /* Non-zero if the lexer should return tokens from the FIFO.  */
 static int popping;
 
 /* Temporary storage for c_lex; this holds symbol names as they are
    built up.  */
-auto_obstack name_obstack;
+static auto_obstack name_obstack;
 
 /* Classify a NAME token.  The contents of the token are in `yylval'.
    Updates yylval and returns the new token type.  BLOCK is the block
@@ -6004,11 +5711,11 @@ classify_name (struct parser_state *par_
      we can refer to it unconditionally below.  */
   memset (&is_a_field_of_this, 0, sizeof (is_a_field_of_this));
 
-  bsym = lookup_symbol (copy.c_str (), block, VAR_DOMAIN,
-			par_state->language ()->la_name_of_this
+  bsym = lookup_symbol (copy.c_str (), block, SEARCH_VFT,
+			par_state->language ()->name_of_this ()
 			? &is_a_field_of_this : NULL);
 
-  if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)
+  if (bsym.symbol && bsym.symbol->aclass () == LOC_BLOCK)
     {
       yylval.ssym.sym = bsym;
       yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
@@ -6027,11 +5734,11 @@ classify_name (struct parser_state *par_
 	{
 	  struct field_of_this_result inner_is_a_field_of_this;
 
-	  bsym = lookup_symbol (copy.c_str (), block, STRUCT_DOMAIN,
+	  bsym = lookup_symbol (copy.c_str (), block, SEARCH_STRUCT_DOMAIN,
 				&inner_is_a_field_of_this);
 	  if (bsym.symbol != NULL)
 	    {
-	      yylval.tsym.type = SYMBOL_TYPE (bsym.symbol);
+	      yylval.tsym.type = bsym.symbol->type ();
 	      return TYPENAME;
 	    }
 	}
@@ -6050,16 +5757,17 @@ classify_name (struct parser_state *par_
 	  symtab = lookup_symtab (copy.c_str ());
 	  if (symtab)
 	    {
-	      yylval.bval = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab),
-					       STATIC_BLOCK);
+	      yylval.bval
+		= symtab->compunit ()->blockvector ()->static_block ();
+
 	      return FILENAME;
 	    }
 	}
     }
 
-  if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_TYPEDEF)
+  if (bsym.symbol && bsym.symbol->aclass () == LOC_TYPEDEF)
     {
-      yylval.tsym.type = SYMBOL_TYPE (bsym.symbol);
+      yylval.tsym.type = bsym.symbol->type ();
       return TYPENAME;
     }
 
@@ -6076,7 +5784,7 @@ classify_name (struct parser_state *par_
 	  sym = lookup_struct_typedef (copy.c_str (),
 				       par_state->expression_context_block, 1);
 	  if (sym)
-	    yylval.theclass.type = SYMBOL_TYPE (sym);
+	    yylval.theclass.type = sym->type ();
 	  return CLASSNAME;
 	}
     }
@@ -6088,7 +5796,7 @@ classify_name (struct parser_state *par_
       && ((copy[0] >= 'a' && copy[0] < 'a' + input_radix - 10)
 	  || (copy[0] >= 'A' && copy[0] < 'A' + input_radix - 10)))
     {
-      YYSTYPE newlval;	/* Its value is ignored.  */
+      c_exp_YYSTYPE newlval;	/* Its value is ignored.  */
       int hextype = parse_number (par_state, copy.c_str (), yylval.sval.length,
 				  0, &newlval);
 
@@ -6133,7 +5841,7 @@ classify_inner_name (struct parser_state
   std::string copy = copy_name (yylval.ssym.stoken);
   /* N.B. We assume the symbol can only be in VAR_DOMAIN.  */
   yylval.ssym.sym = cp_lookup_nested_symbol (type, copy.c_str (), block,
-					     VAR_DOMAIN);
+					     SEARCH_VFT);
 
   /* If no symbol was found, search for a matching base class named
      COPY.  This will allow users to enter qualified names of class members
@@ -6152,7 +5860,7 @@ classify_inner_name (struct parser_state
       return ERROR;
     }
 
-  switch (SYMBOL_CLASS (yylval.ssym.sym.symbol))
+  switch (yylval.ssym.sym.symbol->aclass ())
     {
     case LOC_BLOCK:
     case LOC_LABEL:
@@ -6172,13 +5880,13 @@ classify_inner_name (struct parser_state
       return ERROR;
 
     case LOC_TYPEDEF:
-      yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym.symbol);
+      yylval.tsym.type = yylval.ssym.sym.symbol->type ();
       return TYPENAME;
 
     default:
       return NAME;
     }
-  internal_error (__FILE__, __LINE__, _("not reached"));
+  internal_error (_("not reached"));
 }
 
 /* The outer level of a two-level lexer.  This calls the inner lexer
@@ -6196,7 +5904,7 @@ classify_inner_name (struct parser_state
 static int
 yylex (void)
 {
-  token_and_value current;
+  c_token_and_value current;
   int first_was_coloncolon, last_was_coloncolon;
   struct type *context_type = NULL;
   int last_to_examine, next_to_examine, checkpoint;
@@ -6272,7 +5980,7 @@ yylex (void)
 
   while (next_to_examine <= last_to_examine)
     {
-      token_and_value next;
+      c_token_and_value next;
 
       next = token_fifo[next_to_examine];
       ++next_to_examine;
@@ -6369,7 +6077,7 @@ c_parse (struct parser_state *par_state)
     = make_scoped_restore (&expression_macro_scope, macro_scope.get ());
 
   scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
-							parser_debug);
+							par_state->debug);
 
   /* Initialize some state used by the lexer.  */
   last_was_structop = false;
@@ -6380,16 +6088,20 @@ c_parse (struct parser_state *par_state)
   popping = 0;
   name_obstack.clear ();
 
-  return yyparse ();
+  int result = yyparse ();
+  if (!result)
+    pstate->set_operation (pstate->pop ());
+  return result;
 }
 
-#ifdef YYBISON
+#if defined(YYBISON) && YYBISON < 30800
+
 
 /* This is called via the YYPRINT macro when parser debugging is
    enabled.  It prints a token's value.  */
 
 static void
-c_print_token (FILE *file, int type, YYSTYPE value)
+c_print_token (FILE *file, int type, c_exp_YYSTYPE value)
 {
   switch (type)
     {
@@ -6444,9 +6156,5 @@ c_print_token (FILE *file, int type, YYS
 static void
 yyerror (const char *msg)
 {
-  if (pstate->prev_lexptr)
-    pstate->lexptr = pstate->prev_lexptr;
-
-  error (_("A %s in expression, near `%s'."), msg, pstate->lexptr);
+  pstate->parse_error (msg);
 }
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-exp.h ./gdb/c-exp.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-exp.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/c-exp.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,220 @@
+/* Definitions for C expressions
+
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef C_EXP_H
+#define C_EXP_H
+
+#include "expop.h"
+#include "objc-lang.h"
+
+extern struct value *eval_op_objc_selector (struct type *expect_type,
+					    struct expression *exp,
+					    enum noside noside,
+					    const char *sel);
+extern struct value *opencl_value_cast (struct type *type, struct value *arg);
+extern struct value *eval_opencl_assign (struct type *expect_type,
+					 struct expression *exp,
+					 enum noside noside,
+					 enum exp_opcode op,
+					 struct value *arg1,
+					 struct value *arg2);
+extern struct value *opencl_relop (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside, enum exp_opcode op,
+				   struct value *arg1, struct value *arg2);
+extern struct value *opencl_logical_not (struct type *expect_type,
+					 struct expression *exp,
+					 enum noside noside,
+					 enum exp_opcode op,
+					 struct value *arg);
+
+namespace expr
+{
+
+class c_string_operation
+  : public tuple_holding_operation<enum c_string_type_values,
+				   std::vector<std::string>>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return OP_STRING; }
+};
+
+class objc_nsstring_operation
+  : public tuple_holding_operation<std::string>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    const std::string &str = std::get<0> (m_storage);
+    return value_nsstring (exp->gdbarch, str.c_str (), str.size () + 1);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_OBJC_NSSTRING; }
+};
+
+class objc_selector_operation
+  : public tuple_holding_operation<std::string>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return eval_op_objc_selector (expect_type, exp, noside,
+				  std::get<0> (m_storage).c_str ());
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_OBJC_SELECTOR; }
+};
+
+/* An Objective C message call.  */
+class objc_msgcall_operation
+  : public tuple_holding_operation<CORE_ADDR, operation_up,
+				   std::vector<operation_up>>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return OP_OBJC_MSGCALL; }
+};
+
+using opencl_cast_type_operation = cxx_cast_operation<UNOP_CAST_TYPE,
+						      opencl_value_cast>;
+
+/* Binary operations, as needed for OpenCL.  */
+template<enum exp_opcode OP, binary_ftype FUNC,
+	 typename BASE = maybe_constant_operation<operation_up, operation_up>>
+class opencl_binop_operation
+  : public BASE
+{
+public:
+
+  using BASE::BASE;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *lhs
+      = std::get<0> (this->m_storage)->evaluate (nullptr, exp, noside);
+    value *rhs
+      = std::get<1> (this->m_storage)->evaluate (lhs->type (), exp,
+						 noside);
+    return FUNC (expect_type, exp, noside, OP, lhs, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP; }
+};
+
+using opencl_assign_operation = opencl_binop_operation<BINOP_ASSIGN,
+						       eval_opencl_assign,
+						       assign_operation>;
+using opencl_equal_operation = opencl_binop_operation<BINOP_EQUAL,
+						      opencl_relop>;
+using opencl_notequal_operation = opencl_binop_operation<BINOP_NOTEQUAL,
+							 opencl_relop>;
+using opencl_less_operation = opencl_binop_operation<BINOP_LESS,
+						     opencl_relop>;
+using opencl_gtr_operation = opencl_binop_operation<BINOP_GTR,
+						    opencl_relop>;
+using opencl_geq_operation = opencl_binop_operation<BINOP_GEQ,
+						    opencl_relop>;
+using opencl_leq_operation = opencl_binop_operation<BINOP_LEQ,
+						    opencl_relop>;
+
+using opencl_not_operation = unop_operation<UNOP_LOGICAL_NOT,
+					    opencl_logical_not>;
+
+/* STRUCTOP_STRUCT implementation for OpenCL.  */
+class opencl_structop_operation
+  : public structop_base_operation
+{
+public:
+
+  using structop_base_operation::structop_base_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return STRUCTOP_STRUCT; }
+};
+
+/* This handles the "&&" and "||" operations for OpenCL.  */
+class opencl_logical_binop_operation
+  : public tuple_holding_operation<enum exp_opcode,
+				   operation_up, operation_up>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return std::get<0> (m_storage); }
+};
+
+/* The ?: ternary operator for OpenCL.  */
+class opencl_ternop_cond_operation
+  : public tuple_holding_operation<operation_up, operation_up, operation_up>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return TERNOP_COND; }
+};
+
+}/* namespace expr */
+
+#endif /* C_EXP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-exp.y ./gdb/c-exp.y
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-exp.y	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/c-exp.y	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* YACC parser for C expressions, for GDB.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -43,9 +43,6 @@
 #include "language.h"
 #include "c-lang.h"
 #include "c-support.h"
-#include "bfd.h" /* Required by objfiles.h.  */
-#include "symfile.h" /* Required by objfiles.h.  */
-#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
 #include "charset.h"
 #include "block.h"
 #include "cp-support.h"
@@ -54,6 +51,8 @@
 #include "typeprint.h"
 #include "cp-abi.h"
 #include "type-stack.h"
+#include "target-float.h"
+#include "c-exp.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 
@@ -122,6 +121,7 @@ static void yyerror (const char *);
 
 static int type_aggregate_p (struct type *);
 
+using namespace expr;
 %}
 
 /* Although the yacc "value" of an expression is not used,
@@ -163,10 +163,8 @@ static int parse_number (struct parser_s
 static struct stoken operator_stoken (const char *);
 static struct stoken typename_stoken (const char *);
 static void check_parameter_typelist (std::vector<struct type *> *);
-static void write_destructor_name (struct parser_state *par_state,
-				   struct stoken);
 
-#ifdef YYBISON
+#if defined(YYBISON) && YYBISON < 30800
 static void c_print_token (FILE *file, int type, YYSTYPE value);
 #define YYPRINT(FILE, TYPE, VALUE) c_print_token (FILE, TYPE, VALUE)
 #endif
@@ -174,7 +172,7 @@ static void c_print_token (FILE *file, i
 
 %type <voidval> exp exp1 type_exp start variable qualified_name lcurly function_method
 %type <lval> rcurly
-%type <tval> type typebase
+%type <tval> type typebase scalar_type
 %type <tvec> nonempty_typelist func_mod parameter_typelist
 /* %type <bval> block */
 
@@ -185,8 +183,8 @@ static void c_print_token (FILE *file, i
 
 %type <type_stack> ptr_operator_ts abs_decl direct_abs_decl
 
-%token <typed_val_int> INT
-%token <typed_val_float> FLOAT
+%token <typed_val_int> INT COMPLEX_INT
+%token <typed_val_float> FLOAT COMPLEX_FLOAT
 
 /* Both NAME and TYPENAME tokens represent symbols in the input,
    and both convey their data as strings.
@@ -237,6 +235,8 @@ static void c_print_token (FILE *file, i
 /* Special type cases, put in to allow the parser to distinguish different
    legal basetypes.  */
 %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
+%token RESTRICT ATOMIC
+%token FLOAT_KEYWORD COMPLEX
 
 %token <sval> DOLLAR_VARIABLE
 
@@ -279,190 +279,213 @@ start   :	exp1
 	;
 
 type_exp:	type
-			{ write_exp_elt_opcode(pstate, OP_TYPE);
-			  write_exp_elt_type(pstate, $1);
-			  write_exp_elt_opcode(pstate, OP_TYPE);}
+			{
+			  pstate->push_new<type_operation> ($1);
+			}
 	|	TYPEOF '(' exp ')'
 			{
-			  write_exp_elt_opcode (pstate, OP_TYPEOF);
+			  pstate->wrap<typeof_operation> ();
 			}
 	|	TYPEOF '(' type ')'
 			{
-			  write_exp_elt_opcode (pstate, OP_TYPE);
-			  write_exp_elt_type (pstate, $3);
-			  write_exp_elt_opcode (pstate, OP_TYPE);
+			  pstate->push_new<type_operation> ($3);
 			}
 	|	DECLTYPE '(' exp ')'
 			{
-			  write_exp_elt_opcode (pstate, OP_DECLTYPE);
+			  pstate->wrap<decltype_operation> ();
 			}
 	;
 
 /* Expressions, including the comma operator.  */
 exp1	:	exp
 	|	exp1 ',' exp
-			{ write_exp_elt_opcode (pstate, BINOP_COMMA); }
+			{ pstate->wrap2<comma_operation> (); }
 	;
 
 /* Expressions, not including the comma operator.  */
 exp	:	'*' exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_IND); }
+			{ pstate->wrap<unop_ind_operation> (); }
 	;
 
 exp	:	'&' exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_ADDR); }
+			{ pstate->wrap<unop_addr_operation> (); }
 	;
 
 exp	:	'-' exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_NEG); }
+			{ pstate->wrap<unary_neg_operation> (); }
 	;
 
 exp	:	'+' exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_PLUS); }
+			{ pstate->wrap<unary_plus_operation> (); }
 	;
 
 exp	:	'!' exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap<opencl_not_operation> ();
+			  else
+			    pstate->wrap<unary_logical_not_operation> ();
+			}
 	;
 
 exp	:	'~' exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+			{ pstate->wrap<unary_complement_operation> (); }
 	;
 
 exp	:	INCREMENT exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
+			{ pstate->wrap<preinc_operation> (); }
 	;
 
 exp	:	DECREMENT exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
+			{ pstate->wrap<predec_operation> (); }
 	;
 
 exp	:	exp INCREMENT    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
+			{ pstate->wrap<postinc_operation> (); }
 	;
 
 exp	:	exp DECREMENT    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
+			{ pstate->wrap<postdec_operation> (); }
 	;
 
 exp	:	TYPEID '(' exp ')' %prec UNARY
-			{ write_exp_elt_opcode (pstate, OP_TYPEID); }
+			{ pstate->wrap<typeid_operation> (); }
 	;
 
 exp	:	TYPEID '(' type_exp ')' %prec UNARY
-			{ write_exp_elt_opcode (pstate, OP_TYPEID); }
+			{ pstate->wrap<typeid_operation> (); }
 	;
 
 exp	:	SIZEOF exp       %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+			{ pstate->wrap<unop_sizeof_operation> (); }
 	;
 
 exp	:	ALIGNOF '(' type_exp ')'	%prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_ALIGNOF); }
+			{ pstate->wrap<unop_alignof_operation> (); }
 	;
 
 exp	:	exp ARROW field_name
-			{ write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  write_exp_string (pstate, $3);
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+			{
+			  pstate->push_new<structop_ptr_operation>
+			    (pstate->pop (), copy_name ($3));
+			}
 	;
 
 exp	:	exp ARROW field_name COMPLETE
-			{ pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  write_exp_string (pstate, $3);
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+			{
+			  structop_base_operation *op
+			    = new structop_ptr_operation (pstate->pop (),
+							  copy_name ($3));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
 	;
 
 exp	:	exp ARROW COMPLETE
-			{ struct stoken s;
-			  pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  s.ptr = "";
-			  s.length = 0;
-			  write_exp_string (pstate, s);
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+			{
+			  structop_base_operation *op
+			    = new structop_ptr_operation (pstate->pop (), "");
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
 	;
 
 exp	:	exp ARROW '~' name
-			{ write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  write_destructor_name (pstate, $4);
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+			{
+			  pstate->push_new<structop_ptr_operation>
+			    (pstate->pop (), "~" + copy_name ($4));
+			}
 	;
 
 exp	:	exp ARROW '~' name COMPLETE
-			{ pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			  write_destructor_name (pstate, $4);
-			  write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
+			{
+			  structop_base_operation *op
+			    = new structop_ptr_operation (pstate->pop (),
+							  "~" + copy_name ($4));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
 	;
 
 exp	:	exp ARROW qualified_name
 			{ /* exp->type::name becomes exp->*(&type::name) */
 			  /* Note: this doesn't work if name is a
 			     static member!  FIXME */
-			  write_exp_elt_opcode (pstate, UNOP_ADDR);
-			  write_exp_elt_opcode (pstate, STRUCTOP_MPTR); }
+			  pstate->wrap<unop_addr_operation> ();
+			  pstate->wrap2<structop_mptr_operation> (); }
 	;
 
 exp	:	exp ARROW_STAR exp
-			{ write_exp_elt_opcode (pstate, STRUCTOP_MPTR); }
+			{ pstate->wrap2<structop_mptr_operation> (); }
 	;
 
 exp	:	exp '.' field_name
-			{ write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_exp_string (pstate, $3);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->push_new<opencl_structop_operation>
+			      (pstate->pop (), copy_name ($3));
+			  else
+			    pstate->push_new<structop_operation>
+			      (pstate->pop (), copy_name ($3));
+			}
 	;
 
 exp	:	exp '.' field_name COMPLETE
-			{ pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_exp_string (pstate, $3);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+			{
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (),
+						      copy_name ($3));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
 	;
 
 exp	:	exp '.' COMPLETE
-			{ struct stoken s;
-			  pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  s.ptr = "";
-			  s.length = 0;
-			  write_exp_string (pstate, s);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+			{
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (), "");
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
 	;
 
 exp	:	exp '.' '~' name
-			{ write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_destructor_name (pstate, $4);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+			{
+			  pstate->push_new<structop_operation>
+			    (pstate->pop (), "~" + copy_name ($4));
+			}
 	;
 
 exp	:	exp '.' '~' name COMPLETE
-			{ pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_destructor_name (pstate, $4);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+			{
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (),
+						      "~" + copy_name ($4));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
 	;
 
 exp	:	exp '.' qualified_name
 			{ /* exp.type::name becomes exp.*(&type::name) */
 			  /* Note: this doesn't work if name is a
 			     static member!  FIXME */
-			  write_exp_elt_opcode (pstate, UNOP_ADDR);
-			  write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); }
+			  pstate->wrap<unop_addr_operation> ();
+			  pstate->wrap2<structop_member_operation> (); }
 	;
 
 exp	:	exp DOT_STAR exp
-			{ write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); }
+			{ pstate->wrap2<structop_member_operation> (); }
 	;
 
 exp	:	exp '[' exp1 ']'
-			{ write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+			{ pstate->wrap2<subscript_operation> (); }
 	;
 
 exp	:	exp OBJC_LBRAC exp1 ']'
-			{ write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+			{ pstate->wrap2<subscript_operation> (); }
 	;
 
 /*
@@ -480,43 +503,30 @@ exp	: 	OBJC_LBRAC TYPENAME
 			  if (theclass == 0)
 			    error (_("%s is not an ObjC Class"),
 				   copy.c_str ());
-			  write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate,
-					      parse_type (pstate)->builtin_int);
-			  write_exp_elt_longcst (pstate, (LONGEST) theclass);
-			  write_exp_elt_opcode (pstate, OP_LONG);
+			  pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_int,
+			     (LONGEST) theclass);
 			  start_msglist();
 			}
 		msglist ']'
-			{ write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			  end_msglist (pstate);
-			  write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			}
+			{ end_msglist (pstate); }
 	;
 
 exp	:	OBJC_LBRAC CLASSNAME
 			{
-			  write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate,
-					    parse_type (pstate)->builtin_int);
-			  write_exp_elt_longcst (pstate, (LONGEST) $2.theclass);
-			  write_exp_elt_opcode (pstate, OP_LONG);
+			  pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_int,
+			     (LONGEST) $2.theclass);
 			  start_msglist();
 			}
 		msglist ']'
-			{ write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			  end_msglist (pstate);
-			  write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			}
+			{ end_msglist (pstate); }
 	;
 
 exp	:	OBJC_LBRAC exp
 			{ start_msglist(); }
 		msglist ']'
-			{ write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			  end_msglist (pstate);
-			  write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
-			}
+			{ end_msglist (pstate); }
 	;
 
 msglist :	name
@@ -541,21 +551,22 @@ exp	:	exp '('
 			   being accumulated by an outer function call.  */
 			{ pstate->start_arglist (); }
 		arglist ')'	%prec ARROW
-			{ write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate,
-						 pstate->end_arglist ());
-			  write_exp_elt_opcode (pstate, OP_FUNCALL); }
+			{
+			  std::vector<operation_up> args
+			    = pstate->pop_vector (pstate->end_arglist ());
+			  pstate->push_new<funcall_operation>
+			    (pstate->pop (), std::move (args));
+			}
 	;
 
 /* This is here to disambiguate with the production for
    "func()::static_var" further below, which uses
    function_method_void.  */
 exp	:	exp '(' ')' %prec ARROW
-			{ pstate->start_arglist ();
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate,
-						 pstate->end_arglist ());
-			  write_exp_elt_opcode (pstate, OP_FUNCALL); }
+			{
+			  pstate->push_new<funcall_operation>
+			    (pstate->pop (), std::vector<operation_up> ());
+			}
 	;
 
 
@@ -563,25 +574,18 @@ exp	:	UNKNOWN_CPP_NAME '('
 			{
 			  /* This could potentially be a an argument defined
 			     lookup function (Koenig).  */
-			  write_exp_elt_opcode (pstate, OP_ADL_FUNC);
-			  write_exp_elt_block
-			    (pstate, pstate->expression_context_block);
-			  write_exp_elt_sym (pstate,
-					     NULL); /* Placeholder.  */
-			  write_exp_string (pstate, $1.stoken);
-			  write_exp_elt_opcode (pstate, OP_ADL_FUNC);
-
-			/* This is to save the value of arglist_len
-			   being accumulated by an outer function call.  */
-
+			  /* This is to save the value of arglist_len
+			     being accumulated by an outer function call.  */
 			  pstate->start_arglist ();
 			}
 		arglist ')'	%prec ARROW
 			{
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate,
-						 pstate->end_arglist ());
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
+			  std::vector<operation_up> args
+			    = pstate->pop_vector (pstate->end_arglist ());
+			  pstate->push_new<adl_func_operation>
+			    (copy_name ($1.stoken),
+			     pstate->expression_context_block,
+			     std::move (args));
 			}
 	;
 
@@ -603,33 +607,25 @@ arglist	:	arglist ',' exp   %prec ABOVE_
 function_method:       exp '(' parameter_typelist ')' const_or_volatile
 			{
 			  std::vector<struct type *> *type_list = $3;
-			  LONGEST len = type_list->size ();
-
-			  write_exp_elt_opcode (pstate, TYPE_INSTANCE);
 			  /* Save the const/volatile qualifiers as
 			     recorded by the const_or_volatile
 			     production's actions.  */
-			  write_exp_elt_longcst
-			    (pstate,
-			     (cpstate->type_stack
-			      .follow_type_instance_flags ()));
-			  write_exp_elt_longcst (pstate, len);
-			  for (type *type_elt : *type_list)
-			    write_exp_elt_type (pstate, type_elt);
-			  write_exp_elt_longcst(pstate, len);
-			  write_exp_elt_opcode (pstate, TYPE_INSTANCE);
+			  type_instance_flags flags
+			    = (cpstate->type_stack
+			       .follow_type_instance_flags ());
+			  pstate->push_new<type_instance_operation>
+			    (flags, std::move (*type_list),
+			     pstate->pop ());
 			}
 	;
 
 function_method_void:	    exp '(' ')' const_or_volatile
-		       { write_exp_elt_opcode (pstate, TYPE_INSTANCE);
-			 /* See above.  */
-			 write_exp_elt_longcst
-			   (pstate,
-			    cpstate->type_stack.follow_type_instance_flags ());
-			 write_exp_elt_longcst (pstate, 0);
-			 write_exp_elt_longcst (pstate, 0);
-			 write_exp_elt_opcode (pstate, TYPE_INSTANCE);
+		       {
+			  type_instance_flags flags
+			    = (cpstate->type_stack
+			       .follow_type_instance_flags ());
+			  pstate->push_new<type_instance_operation>
+			    (flags, std::vector<type *> (), pstate->pop ());
 		       }
        ;
 
@@ -646,9 +642,8 @@ function_method_void_or_typelist: functi
 
 exp     :       function_method_void_or_typelist COLONCOLON name
 			{
-			  write_exp_elt_opcode (pstate, OP_FUNC_STATIC_VAR);
-			  write_exp_string (pstate, $3);
-			  write_exp_elt_opcode (pstate, OP_FUNC_STATIC_VAR);
+			  pstate->push_new<func_static_var_operation>
+			    (pstate->pop (), copy_name ($3));
 			}
 	;
 
@@ -656,18 +651,26 @@ rcurly	:	'}'
 			{ $$ = pstate->end_arglist () - 1; }
 	;
 exp	:	lcurly arglist rcurly	%prec ARROW
-			{ write_exp_elt_opcode (pstate, OP_ARRAY);
-			  write_exp_elt_longcst (pstate, (LONGEST) 0);
-			  write_exp_elt_longcst (pstate, (LONGEST) $3);
-			  write_exp_elt_opcode (pstate, OP_ARRAY); }
+			{
+			  std::vector<operation_up> args
+			    = pstate->pop_vector ($3 + 1);
+			  pstate->push_new<array_operation> (0, $3,
+							     std::move (args));
+			}
 	;
 
 exp	:	lcurly type_exp rcurly exp  %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_MEMVAL_TYPE); }
+			{ pstate->wrap2<unop_memval_type_operation> (); }
 	;
 
 exp	:	'(' type_exp ')' exp  %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_cast_type_operation> ();
+			  else
+			    pstate->wrap2<unop_cast_type_operation> ();
+			}
 	;
 
 exp	:	'(' exp1 ')'
@@ -677,101 +680,195 @@ exp	:	'(' exp1 ')'
 /* Binary operators in order of decreasing precedence.  */
 
 exp	:	exp '@' exp
-			{ write_exp_elt_opcode (pstate, BINOP_REPEAT); }
+			{ pstate->wrap2<repeat_operation> (); }
 	;
 
 exp	:	exp '*' exp
-			{ write_exp_elt_opcode (pstate, BINOP_MUL); }
+			{ pstate->wrap2<mul_operation> (); }
 	;
 
 exp	:	exp '/' exp
-			{ write_exp_elt_opcode (pstate, BINOP_DIV); }
+			{ pstate->wrap2<div_operation> (); }
 	;
 
 exp	:	exp '%' exp
-			{ write_exp_elt_opcode (pstate, BINOP_REM); }
+			{ pstate->wrap2<rem_operation> (); }
 	;
 
 exp	:	exp '+' exp
-			{ write_exp_elt_opcode (pstate, BINOP_ADD); }
+			{ pstate->wrap2<add_operation> (); }
 	;
 
 exp	:	exp '-' exp
-			{ write_exp_elt_opcode (pstate, BINOP_SUB); }
+			{ pstate->wrap2<sub_operation> (); }
 	;
 
 exp	:	exp LSH exp
-			{ write_exp_elt_opcode (pstate, BINOP_LSH); }
+			{ pstate->wrap2<lsh_operation> (); }
 	;
 
 exp	:	exp RSH exp
-			{ write_exp_elt_opcode (pstate, BINOP_RSH); }
+			{ pstate->wrap2<rsh_operation> (); }
 	;
 
 exp	:	exp EQUAL exp
-			{ write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_equal_operation> ();
+			  else
+			    pstate->wrap2<equal_operation> ();
+			}
 	;
 
 exp	:	exp NOTEQUAL exp
-			{ write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_notequal_operation> ();
+			  else
+			    pstate->wrap2<notequal_operation> ();
+			}
 	;
 
 exp	:	exp LEQ exp
-			{ write_exp_elt_opcode (pstate, BINOP_LEQ); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_leq_operation> ();
+			  else
+			    pstate->wrap2<leq_operation> ();
+			}
 	;
 
 exp	:	exp GEQ exp
-			{ write_exp_elt_opcode (pstate, BINOP_GEQ); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_geq_operation> ();
+			  else
+			    pstate->wrap2<geq_operation> ();
+			}
 	;
 
 exp	:	exp '<' exp
-			{ write_exp_elt_opcode (pstate, BINOP_LESS); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_less_operation> ();
+			  else
+			    pstate->wrap2<less_operation> ();
+			}
 	;
 
 exp	:	exp '>' exp
-			{ write_exp_elt_opcode (pstate, BINOP_GTR); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_gtr_operation> ();
+			  else
+			    pstate->wrap2<gtr_operation> ();
+			}
 	;
 
 exp	:	exp '&' exp
-			{ write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+			{ pstate->wrap2<bitwise_and_operation> (); }
 	;
 
 exp	:	exp '^' exp
-			{ write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+			{ pstate->wrap2<bitwise_xor_operation> (); }
 	;
 
 exp	:	exp '|' exp
-			{ write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+			{ pstate->wrap2<bitwise_ior_operation> (); }
 	;
 
 exp	:	exp ANDAND exp
-			{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    {
+			      operation_up rhs = pstate->pop ();
+			      operation_up lhs = pstate->pop ();
+			      pstate->push_new<opencl_logical_binop_operation>
+				(BINOP_LOGICAL_AND, std::move (lhs),
+				 std::move (rhs));
+			    }
+			  else
+			    pstate->wrap2<logical_and_operation> ();
+			}
 	;
 
 exp	:	exp OROR exp
-			{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    {
+			      operation_up rhs = pstate->pop ();
+			      operation_up lhs = pstate->pop ();
+			      pstate->push_new<opencl_logical_binop_operation>
+				(BINOP_LOGICAL_OR, std::move (lhs),
+				 std::move (rhs));
+			    }
+			  else
+			    pstate->wrap2<logical_or_operation> ();
+			}
 	;
 
 exp	:	exp '?' exp ':' exp	%prec '?'
-			{ write_exp_elt_opcode (pstate, TERNOP_COND); }
+			{
+			  operation_up last = pstate->pop ();
+			  operation_up mid = pstate->pop ();
+			  operation_up first = pstate->pop ();
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->push_new<opencl_ternop_cond_operation>
+			      (std::move (first), std::move (mid),
+			       std::move (last));
+			  else
+			    pstate->push_new<ternop_cond_operation>
+			      (std::move (first), std::move (mid),
+			       std::move (last));
+			}
 	;
 
 exp	:	exp '=' exp
-			{ write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+			{
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_assign_operation> ();
+			  else
+			    pstate->wrap2<assign_operation> ();
+			}
 	;
 
 exp	:	exp ASSIGN_MODIFY exp
-			{ write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
-			  write_exp_elt_opcode (pstate, $2);
-			  write_exp_elt_opcode (pstate,
-						BINOP_ASSIGN_MODIFY); }
+			{
+			  operation_up rhs = pstate->pop ();
+			  operation_up lhs = pstate->pop ();
+			  pstate->push_new<assign_modify_operation>
+			    ($2, std::move (lhs), std::move (rhs));
+			}
 	;
 
 exp	:	INT
-			{ write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate, $1.type);
-			  write_exp_elt_longcst (pstate, (LONGEST) ($1.val));
-			  write_exp_elt_opcode (pstate, OP_LONG); }
+			{
+			  pstate->push_new<long_const_operation>
+			    ($1.type, $1.val);
+			}
+	;
+
+exp	:	COMPLEX_INT
+			{
+			  operation_up real
+			    = (make_operation<long_const_operation>
+			       ($1.type->target_type (), 0));
+			  operation_up imag
+			    = (make_operation<long_const_operation>
+			       ($1.type->target_type (), $1.val));
+			  pstate->push_new<complex_operation>
+			    (std::move (real), std::move (imag), $1.type);
+			}
 	;
 
 exp	:	CHAR
@@ -779,7 +876,7 @@ exp	:	CHAR
 			  struct stoken_vector vec;
 			  vec.len = 1;
 			  vec.tokens = &$1;
-			  write_exp_string_vector (pstate, $1.type, &vec);
+			  pstate->push_c_string ($1.type, &vec);
 			}
 	;
 
@@ -787,20 +884,43 @@ exp	:	NAME_OR_INT
 			{ YYSTYPE val;
 			  parse_number (pstate, $1.stoken.ptr,
 					$1.stoken.length, 0, &val);
-			  write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate, val.typed_val_int.type);
-			  write_exp_elt_longcst (pstate,
-					    (LONGEST) val.typed_val_int.val);
-			  write_exp_elt_opcode (pstate, OP_LONG);
+			  pstate->push_new<long_const_operation>
+			    (val.typed_val_int.type,
+			     val.typed_val_int.val);
 			}
 	;
 
 
 exp	:	FLOAT
-			{ write_exp_elt_opcode (pstate, OP_FLOAT);
-			  write_exp_elt_type (pstate, $1.type);
-			  write_exp_elt_floatcst (pstate, $1.val);
-			  write_exp_elt_opcode (pstate, OP_FLOAT); }
+			{
+			  float_data data;
+			  std::copy (std::begin ($1.val), std::end ($1.val),
+				     std::begin (data));
+			  pstate->push_new<float_const_operation> ($1.type, data);
+			}
+	;
+
+exp	:	COMPLEX_FLOAT
+			{
+			  struct type *underlying = $1.type->target_type ();
+
+			  float_data val;
+			  target_float_from_host_double (val.data (),
+							 underlying, 0);
+			  operation_up real
+			    = (make_operation<float_const_operation>
+			       (underlying, val));
+
+			  std::copy (std::begin ($1.val), std::end ($1.val),
+				     std::begin (val));
+			  operation_up imag
+			    = (make_operation<float_const_operation>
+			       (underlying, val));
+
+			  pstate->push_new<complex_operation>
+			    (std::move (real), std::move (imag),
+			     $1.type);
+			}
 	;
 
 exp	:	variable
@@ -808,23 +928,22 @@ exp	:	variable
 
 exp	:	DOLLAR_VARIABLE
 			{
-			  write_dollar_variable (pstate, $1);
+			  pstate->push_dollar ($1);
 			}
 	;
 
 exp	:	SELECTOR '(' name ')'
 			{
-			  write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR);
-			  write_exp_string (pstate, $3);
-			  write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR); }
+			  pstate->push_new<objc_selector_operation>
+			    (copy_name ($3));
+			}
 	;
 
 exp	:	SIZEOF '(' type ')'	%prec UNARY
 			{ struct type *type = $3;
-			  write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate, lookup_signed_typename
-					      (pstate->language (),
-					       "int"));
+			  struct type *int_type
+			    = lookup_signed_typename (pstate->language (),
+						      "int");
 			  type = check_typedef (type);
 
 			    /* $5.3.3/2 of the C++ Standard (n3290 draft)
@@ -832,29 +951,29 @@ exp	:	SIZEOF '(' type ')'	%prec UNARY
 			       or a reference type, the result is the size of
 			       the referenced type."  */
 			  if (TYPE_IS_REFERENCE (type))
-			    type = check_typedef (TYPE_TARGET_TYPE (type));
-			  write_exp_elt_longcst (pstate,
-						 (LONGEST) TYPE_LENGTH (type));
-			  write_exp_elt_opcode (pstate, OP_LONG); }
+			    type = check_typedef (type->target_type ());
+
+			  pstate->push_new<long_const_operation>
+			    (int_type, type->length ());
+			}
 	;
 
 exp	:	REINTERPRET_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
-			{ write_exp_elt_opcode (pstate,
-						UNOP_REINTERPRET_CAST); }
+			{ pstate->wrap2<reinterpret_cast_operation> (); }
 	;
 
 exp	:	STATIC_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+			{ pstate->wrap2<unop_cast_type_operation> (); }
 	;
 
 exp	:	DYNAMIC_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_DYNAMIC_CAST); }
+			{ pstate->wrap2<dynamic_cast_operation> (); }
 	;
 
 exp	:	CONST_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
 			{ /* We could do more error checking here, but
 			     it doesn't seem worthwhile.  */
-			  write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+			  pstate->wrap2<unop_cast_type_operation> (); }
 	;
 
 string_exp:
@@ -914,12 +1033,11 @@ exp	:	string_exp
 				  break;
 				default:
 				  /* internal error */
-				  internal_error (__FILE__, __LINE__,
-						  "unrecognized type in string concatenation");
+				  internal_error ("unrecognized type in string concatenation");
 				}
 			    }
 
-			  write_exp_string_vector (pstate, type, &$1);
+			  pstate->push_c_string (type, &$1);
 			  for (i = 0; i < $1.len; ++i)
 			    free ($1.tokens[i].ptr);
 			  free ($1.tokens);
@@ -929,26 +1047,23 @@ exp	:	string_exp
 exp     :	NSSTRING	/* ObjC NextStep NSString constant
 				 * of the form '@' '"' string '"'.
 				 */
-			{ write_exp_elt_opcode (pstate, OP_OBJC_NSSTRING);
-			  write_exp_string (pstate, $1);
-			  write_exp_elt_opcode (pstate, OP_OBJC_NSSTRING); }
+			{
+			  pstate->push_new<objc_nsstring_operation>
+			    (copy_name ($1));
+			}
 	;
 
 /* C++.  */
 exp     :       TRUEKEYWORD
-                        { write_exp_elt_opcode (pstate, OP_LONG);
-                          write_exp_elt_type (pstate,
-					  parse_type (pstate)->builtin_bool);
-                          write_exp_elt_longcst (pstate, (LONGEST) 1);
-                          write_exp_elt_opcode (pstate, OP_LONG); }
+			{ pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_bool, 1);
+			}
 	;
 
 exp     :       FALSEKEYWORD
-                        { write_exp_elt_opcode (pstate, OP_LONG);
-                          write_exp_elt_type (pstate,
-					  parse_type (pstate)->builtin_bool);
-                          write_exp_elt_longcst (pstate, (LONGEST) 0);
-                          write_exp_elt_opcode (pstate, OP_LONG); }
+			{ pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_bool, 0);
+			}
 	;
 
 /* end of C++.  */
@@ -956,7 +1071,7 @@ exp     :       FALSEKEYWORD
 block	:	BLOCKNAME
 			{
 			  if ($1.sym.symbol)
-			    $$ = SYMBOL_BLOCK_VALUE ($1.sym.symbol);
+			    $$ = $1.sym.symbol->value_block ();
 			  else
 			    error (_("No file or function \"%s\"."),
 				   copy_name ($1.stoken).c_str ());
@@ -972,26 +1087,25 @@ block	:	block COLONCOLON name
 			  std::string copy = copy_name ($3);
 			  struct symbol *tem
 			    = lookup_symbol (copy.c_str (), $1,
-					     VAR_DOMAIN, NULL).symbol;
+					     SEARCH_FUNCTION_DOMAIN,
+					     nullptr).symbol;
 
-			  if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
+			  if (tem == nullptr)
 			    error (_("No function \"%s\" in specified context."),
 				   copy.c_str ());
-			  $$ = SYMBOL_BLOCK_VALUE (tem); }
+			  $$ = tem->value_block (); }
 	;
 
 variable:	name_not_typename ENTRY
 			{ struct symbol *sym = $1.sym.symbol;
 
-			  if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym)
+			  if (sym == NULL || !sym->is_argument ()
 			      || !symbol_read_needs_frame (sym))
 			    error (_("@entry can be used only for function "
 				     "parameters, not for \"%s\""),
 				   copy_name ($1.stoken).c_str ());
 
-			  write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
-			  write_exp_elt_sym (pstate, sym);
-			  write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
+			  pstate->push_new<var_entry_value_operation> (sym);
 			}
 	;
 
@@ -1000,7 +1114,7 @@ variable:	block COLONCOLON name
 			  std::string copy = copy_name ($3);
 			  struct block_symbol sym
 			    = lookup_symbol (copy.c_str (), $1,
-					     VAR_DOMAIN, NULL);
+					     SEARCH_VFT, NULL);
 
 			  if (sym.symbol == 0)
 			    error (_("No symbol \"%s\" in specified context."),
@@ -1008,10 +1122,8 @@ variable:	block COLONCOLON name
 			  if (symbol_read_needs_frame (sym.symbol))
 			    pstate->block_tracker->update (sym);
 
-			  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-			  write_exp_elt_block (pstate, sym.block);
-			  write_exp_elt_sym (pstate, sym.symbol);
-			  write_exp_elt_opcode (pstate, OP_VAR_VALUE); }
+			  pstate->push_new<var_value_operation> (sym);
+			}
 	;
 
 qualified_name:	TYPENAME COLONCOLON name
@@ -1022,34 +1134,24 @@ qualified_name:	TYPENAME COLONCOLON name
 			    error (_("`%s' is not defined as an aggregate type."),
 				   TYPE_SAFE_NAME (type));
 
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
-			  write_exp_elt_type (pstate, type);
-			  write_exp_string (pstate, $3);
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
+			  pstate->push_new<scope_operation> (type,
+							     copy_name ($3));
 			}
 	|	TYPENAME COLONCOLON '~' name
 			{
 			  struct type *type = $1.type;
-			  struct stoken tmp_token;
-			  char *buf;
 
 			  type = check_typedef (type);
 			  if (!type_aggregate_p (type))
 			    error (_("`%s' is not defined as an aggregate type."),
 				   TYPE_SAFE_NAME (type));
-			  buf = (char *) alloca ($4.length + 2);
-			  tmp_token.ptr = buf;
-			  tmp_token.length = $4.length + 1;
-			  buf[0] = '~';
-			  memcpy (buf+1, $4.ptr, $4.length);
-			  buf[tmp_token.length] = 0;
+			  std::string name = "~" + std::string ($4.ptr,
+								$4.length);
 
 			  /* Check for valid destructor name.  */
-			  destructor_name_p (tmp_token.ptr, $1.type);
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
-			  write_exp_elt_type (pstate, type);
-			  write_exp_string (pstate, tmp_token);
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
+			  destructor_name_p (name.c_str (), $1.type);
+			  pstate->push_new<scope_operation> (type,
+							     std::move (name));
 			}
 	|	TYPENAME COLONCOLON name COLONCOLON name
 			{
@@ -1064,30 +1166,11 @@ variable:	qualified_name
 	|	COLONCOLON name_not_typename
 			{
 			  std::string name = copy_name ($2.stoken);
-			  struct symbol *sym;
-			  struct bound_minimal_symbol msymbol;
-
-			  sym
+			  struct block_symbol sym
 			    = lookup_symbol (name.c_str (),
 					     (const struct block *) NULL,
-					     VAR_DOMAIN, NULL).symbol;
-			  if (sym)
-			    {
-			      write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-			      write_exp_elt_block (pstate, NULL);
-			      write_exp_elt_sym (pstate, sym);
-			      write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-			      break;
-			    }
-
-			  msymbol = lookup_bound_minimal_symbol (name.c_str ());
-			  if (msymbol.minsym != NULL)
-			    write_exp_msymbol (pstate, msymbol);
-			  else if (!have_full_symbols () && !have_partial_symbols ())
-			    error (_("No symbol table is loaded.  Use the \"file\" command."));
-			  else
-			    error (_("No symbol \"%s\" in current context."),
-				   name.c_str ());
+					     SEARCH_VFT, NULL);
+			  pstate->push_symbol (name.c_str (), sym);
 			}
 	;
 
@@ -1107,26 +1190,21 @@ variable:	name_not_typename
 			      bound_minimal_symbol resolver
 				= find_gnu_ifunc (sym.symbol);
 			      if (resolver.minsym != NULL)
-				write_exp_msymbol (pstate, resolver);
+				pstate->push_new<var_msym_value_operation>
+				  (resolver);
 			      else
-				{
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				  write_exp_elt_block (pstate, sym.block);
-				  write_exp_elt_sym (pstate, sym.symbol);
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				}
+				pstate->push_new<var_value_operation> (sym);
 			    }
 			  else if ($1.is_a_field_of_this)
 			    {
 			      /* C++: it hangs off of `this'.  Must
-			         not inadvertently convert from a method call
+				 not inadvertently convert from a method call
 				 to data ref.  */
 			      pstate->block_tracker->update (sym);
-			      write_exp_elt_opcode (pstate, OP_THIS);
-			      write_exp_elt_opcode (pstate, OP_THIS);
-			      write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-			      write_exp_string (pstate, $1.stoken);
-			      write_exp_elt_opcode (pstate, STRUCTOP_PTR);
+			      operation_up thisop
+				= make_operation<op_this_operation> ();
+			      pstate->push_new<structop_ptr_operation>
+				(std::move (thisop), copy_name ($1.stoken));
 			    }
 			  else
 			    {
@@ -1151,54 +1229,65 @@ variable:	name_not_typename
 				 is important for example for "p
 				 *__errno_location()".  */
 			      symbol *alias_target
-				= ((msymbol.minsym->type != mst_text_gnu_ifunc
-				    && msymbol.minsym->type != mst_data_gnu_ifunc)
+				= ((msymbol.minsym->type () != mst_text_gnu_ifunc
+				    && msymbol.minsym->type () != mst_data_gnu_ifunc)
 				   ? find_function_alias_target (msymbol)
 				   : NULL);
 			      if (alias_target != NULL)
 				{
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				  write_exp_elt_block
-				    (pstate, SYMBOL_BLOCK_VALUE (alias_target));
-				  write_exp_elt_sym (pstate, alias_target);
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
+				  block_symbol bsym { alias_target,
+				    alias_target->value_block () };
+				  pstate->push_new<var_value_operation> (bsym);
 				}
 			      else
-				write_exp_msymbol (pstate, msymbol);
+				pstate->push_new<var_msym_value_operation>
+				  (msymbol);
 			    }
 			}
 	;
 
-space_identifier : '@' NAME
-		{
-		  cpstate->type_stack.insert (pstate,
-					      copy_name ($2.stoken).c_str ());
-		}
-	;
-
 const_or_volatile: const_or_volatile_noopt
 	|
 	;
 
-cv_with_space_id : const_or_volatile space_identifier const_or_volatile
+single_qualifier:
+		CONST_KEYWORD
+			{ cpstate->type_stack.insert (tp_const); }
+	| 	VOLATILE_KEYWORD
+			{ cpstate->type_stack.insert (tp_volatile); }
+	| 	ATOMIC
+			{ cpstate->type_stack.insert (tp_atomic); }
+	| 	RESTRICT
+			{ cpstate->type_stack.insert (tp_restrict); }
+	|	'@' NAME
+		{
+		  cpstate->type_stack.insert (pstate,
+					      copy_name ($2.stoken).c_str ());
+		}
+	|	'@' UNKNOWN_CPP_NAME
+		{
+		  cpstate->type_stack.insert (pstate,
+					      copy_name ($2.stoken).c_str ());
+		}
 	;
 
-const_or_volatile_or_space_identifier_noopt: cv_with_space_id
-	| const_or_volatile_noopt
+qualifier_seq_noopt:
+		single_qualifier
+	| 	qualifier_seq_noopt single_qualifier
 	;
 
-const_or_volatile_or_space_identifier:
-		const_or_volatile_or_space_identifier_noopt
+qualifier_seq:
+		qualifier_seq_noopt
 	|
 	;
 
 ptr_operator:
 		ptr_operator '*'
 			{ cpstate->type_stack.insert (tp_pointer); }
-		const_or_volatile_or_space_identifier
+		qualifier_seq
 	|	'*'
 			{ cpstate->type_stack.insert (tp_pointer); }
-		const_or_volatile_or_space_identifier
+		qualifier_seq
 	|	'&'
 			{ cpstate->type_stack.insert (tp_reference); }
 	|	'&' ptr_operator
@@ -1285,20 +1374,11 @@ func_mod:	'(' ')'
 type	:	ptype
 	;
 
-/* Implements (approximately): (type-qualifier)* type-specifier.
+/* A helper production that recognizes scalar types that can validly
+   be used with _Complex.  */
 
-   When type-specifier is only ever a single word, like 'float' then these
-   arrive as pre-built TYPENAME tokens thanks to the classify_name
-   function.  However, when a type-specifier can contain multiple words,
-   for example 'double' can appear as just 'double' or 'long double', and
-   similarly 'long' can appear as just 'long' or in 'long double', then
-   these type-specifiers are parsed into their own tokens in the function
-   lex_one_token and the ident_tokens array.  These separate tokens are all
-   recognised here.  */
-typebase
-	:	TYPENAME
-			{ $$ = $1.type; }
-	|	INT_KEYWORD
+scalar_type:
+		INT_KEYWORD
 			{ $$ = lookup_signed_typename (pstate->language (),
 						       "int"); }
 	|	LONG
@@ -1381,11 +1461,49 @@ typebase
 						"double",
 						NULL,
 						0); }
+	|	FLOAT_KEYWORD
+			{ $$ = lookup_typename (pstate->language (),
+						"float",
+						NULL,
+						0); }
 	|	LONG DOUBLE_KEYWORD
 			{ $$ = lookup_typename (pstate->language (),
 						"long double",
 						NULL,
 						0); }
+	|	UNSIGNED type_name
+			{ $$ = lookup_unsigned_typename (pstate->language (),
+							 $2.type->name ()); }
+	|	UNSIGNED
+			{ $$ = lookup_unsigned_typename (pstate->language (),
+							 "int"); }
+	|	SIGNED_KEYWORD type_name
+			{ $$ = lookup_signed_typename (pstate->language (),
+						       $2.type->name ()); }
+	|	SIGNED_KEYWORD
+			{ $$ = lookup_signed_typename (pstate->language (),
+						       "int"); }
+	;
+
+/* Implements (approximately): (type-qualifier)* type-specifier.
+
+   When type-specifier is only ever a single word, like 'float' then these
+   arrive as pre-built TYPENAME tokens thanks to the classify_name
+   function.  However, when a type-specifier can contain multiple words,
+   for example 'double' can appear as just 'double' or 'long double', and
+   similarly 'long' can appear as just 'long' or in 'long double', then
+   these type-specifiers are parsed into their own tokens in the function
+   lex_one_token and the ident_tokens array.  These separate tokens are all
+   recognised here.  */
+typebase
+	:	TYPENAME
+			{ $$ = $1.type; }
+	|	scalar_type
+			{ $$ = $1; }
+	|	COMPLEX scalar_type
+			{
+			  $$ = init_complex_type (nullptr, $2);
+			}
 	|	STRUCT name
 			{ $$
 			    = lookup_struct (copy_name ($2).c_str (),
@@ -1452,29 +1570,17 @@ typebase
 						       $2.length);
 			  $$ = NULL;
 			}
-	|	UNSIGNED type_name
-			{ $$ = lookup_unsigned_typename (pstate->language (),
-							 TYPE_NAME($2.type)); }
-	|	UNSIGNED
-			{ $$ = lookup_unsigned_typename (pstate->language (),
-							 "int"); }
-	|	SIGNED_KEYWORD type_name
-			{ $$ = lookup_signed_typename (pstate->language (),
-						       TYPE_NAME($2.type)); }
-	|	SIGNED_KEYWORD
-			{ $$ = lookup_signed_typename (pstate->language (),
-						       "int"); }
-                /* It appears that this rule for templates is never
-                   reduced; template recognition happens by lookahead
-                   in the token processing code in yylex. */
+		/* It appears that this rule for templates is never
+		   reduced; template recognition happens by lookahead
+		   in the token processing code in yylex. */
 	|	TEMPLATE name '<' type '>'
 			{ $$ = lookup_template_type
 			    (copy_name($2).c_str (), $4,
 			     pstate->expression_context_block);
 			}
-	| const_or_volatile_or_space_identifier_noopt typebase
+	|	qualifier_seq_noopt typebase
 			{ $$ = cpstate->type_stack.follow_types ($2); }
-	| typebase const_or_volatile_or_space_identifier_noopt
+	|	typebase qualifier_seq_noopt
 			{ $$ = cpstate->type_stack.follow_types ($1); }
 	;
 
@@ -1671,17 +1777,19 @@ oper:	OPERATOR NEW
 	|	OPERATOR OBJC_LBRAC ']'
 			{ $$ = operator_stoken ("[]"); }
 	|	OPERATOR conversion_type_id
-			{ string_file buf;
-
+			{
+			  string_file buf;
 			  c_print_type ($2, NULL, &buf, -1, 0,
+					pstate->language ()->la_language,
 					&type_print_raw_options);
+			  std::string name = buf.release ();
 
 			  /* This also needs canonicalization.  */
-			  std::string canon
-			    = cp_canonicalize_string (buf.c_str ());
-			  if (canon.empty ())
-			    canon = std::move (buf.string ());
-			  $$ = operator_stoken ((" " + canon).c_str ());
+			  gdb::unique_xmalloc_ptr<char> canon
+			    = cp_canonicalize_string (name.c_str ());
+			  if (canon != nullptr)
+			    name = canon.get ();
+			  $$ = operator_stoken ((" " + name).c_str ());
 			}
 	;
 
@@ -1689,12 +1797,11 @@ oper:	OPERATOR NEW
    match the 'name' rule to appear as fields within a struct.  The example
    that initially motivated this was the RISC-V target which models the
    floating point registers as a union with fields called 'float' and
-   'double'.  The 'float' string becomes a TYPENAME token and can appear
-   anywhere a 'name' can, however 'double' is its own token,
-   DOUBLE_KEYWORD, and doesn't match the 'name' rule.*/
+   'double'.  */
 field_name
 	:	name
 	|	DOUBLE_KEYWORD { $$ = typename_stoken ("double"); }
+	|	FLOAT_KEYWORD { $$ = typename_stoken ("float"); }
 	|	INT_KEYWORD { $$ = typename_stoken ("int"); }
 	|	LONG { $$ = typename_stoken ("long"); }
 	|	SHORT { $$ = typename_stoken ("short"); }
@@ -1727,7 +1834,7 @@ name_not_typename :	NAME
 			  $$.sym
 			    = lookup_symbol ($1.ptr,
 					     pstate->expression_context_block,
-					     VAR_DOMAIN,
+					     SEARCH_VFT,
 					     &is_a_field_of_this);
 			  $$.is_a_field_of_this
 			    = is_a_field_of_this.type != NULL;
@@ -1737,22 +1844,6 @@ name_not_typename :	NAME
 
 %%
 
-/* Like write_exp_string, but prepends a '~'.  */
-
-static void
-write_destructor_name (struct parser_state *par_state, struct stoken token)
-{
-  char *copy = (char *) alloca (token.length + 1);
-
-  copy[0] = '~';
-  memcpy (&copy[1], token.ptr, token.length);
-
-  token.ptr = copy;
-  ++token.length;
-
-  write_exp_string (par_state, token);
-}
-
 /* Returns a stoken of the operator name given by OP (which does not
    include the string "operator").  */
 
@@ -1788,11 +1879,11 @@ typename_stoken (const char *type)
 static int
 type_aggregate_p (struct type *type)
 {
-  return (TYPE_CODE (type) == TYPE_CODE_STRUCT
-	  || TYPE_CODE (type) == TYPE_CODE_UNION
-	  || TYPE_CODE (type) == TYPE_CODE_NAMESPACE
-	  || (TYPE_CODE (type) == TYPE_CODE_ENUM
-	      && TYPE_DECLARED_CLASS (type)));
+  return (type->code () == TYPE_CODE_STRUCT
+	  || type->code () == TYPE_CODE_UNION
+	  || type->code () == TYPE_CODE_NAMESPACE
+	  || (type->code () == TYPE_CODE_ENUM
+	      && type->is_declared_class ()));
 }
 
 /* Validate a parameter typelist.  */
@@ -1806,7 +1897,7 @@ check_parameter_typelist (std::vector<st
   for (ix = 0; ix < params->size (); ++ix)
     {
       type = (*params)[ix];
-      if (type != NULL && TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID)
+      if (type != NULL && check_typedef (type)->code () == TYPE_CODE_VOID)
 	{
 	  if (ix == 0)
 	    {
@@ -1835,7 +1926,6 @@ parse_number (struct parser_state *par_s
 {
   ULONGEST n = 0;
   ULONGEST prevn = 0;
-  ULONGEST un;
 
   int i = 0;
   int c;
@@ -1845,12 +1935,12 @@ parse_number (struct parser_state *par_s
   /* Number of "L" suffixes encountered.  */
   int long_p = 0;
 
-  /* We have found a "L" or "U" suffix.  */
+  /* Imaginary number.  */
+  bool imaginary_p = false;
+
+  /* We have found a "L" or "U" (or "i") suffix.  */
   int found_suffix = 0;
 
-  ULONGEST high_bit;
-  struct type *signed_type;
-  struct type *unsigned_type;
   char *p;
 
   p = (char *) alloca (len);
@@ -1858,6 +1948,12 @@ parse_number (struct parser_state *par_s
 
   if (parsed_float)
     {
+      if (len >= 1 && p[len - 1] == 'i')
+	{
+	  imaginary_p = true;
+	  --len;
+	}
+
       /* Handle suffixes for decimal floating-point: "df", "dd" or "dl".  */
       if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'f')
 	{
@@ -1900,8 +1996,13 @@ parse_number (struct parser_state *par_s
       if (!parse_float (p, len,
 			putithere->typed_val_float.type,
 			putithere->typed_val_float.val))
-        return ERROR;
-      return FLOAT;
+	return ERROR;
+
+      if (imaginary_p)
+	putithere->typed_val_float.type
+	  = init_complex_type (nullptr, putithere->typed_val_float.type);
+
+      return imaginary_p ? COMPLEX_FLOAT : FLOAT;
     }
 
   /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
@@ -1950,7 +2051,7 @@ parse_number (struct parser_state *par_s
       c = *p++;
       if (c >= 'A' && c <= 'Z')
 	c += 'a' - 'A';
-      if (c != 'l' && c != 'u')
+      if (c != 'l' && c != 'u' && c != 'i')
 	n *= base;
       if (c >= '0' && c <= '9')
 	{
@@ -1976,24 +2077,23 @@ parse_number (struct parser_state *par_s
 	      unsigned_p = 1;
 	      found_suffix = 1;
 	    }
+	  else if (c == 'i')
+	    {
+	      imaginary_p = true;
+	      found_suffix = 1;
+	    }
 	  else
 	    return ERROR;	/* Char not a digit */
 	}
       if (i >= base)
 	return ERROR;		/* Invalid digit in this base */
 
-      /* Portably test for overflow (only works for nonzero values, so make
-	 a second check for zero).  FIXME: Can't we just make n and prevn
-	 unsigned and avoid this?  */
-      if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
-	unsigned_p = 1;		/* Try something unsigned */
-
-      /* Portably test for unsigned overflow.
-	 FIXME: This check is wrong; for example it doesn't find overflow
-	 on 0x123456789 when LONGEST is 32 bits.  */
-      if (c != 'l' && c != 'u' && n != 0)
-	{	
-	  if (unsigned_p && prevn >= n)
+      if (c != 'l' && c != 'u' && c != 'i')
+	{
+	  /* Test for overflow.  */
+	  if (prevn == 0 && n == 0)
+	    ;
+	  else if (prevn >= n)
 	    error (_("Numeric constant too large."));
 	}
       prevn = n;
@@ -2010,60 +2110,51 @@ parse_number (struct parser_state *par_s
      or gdbarch_long_bit will be that big, sometimes not.  To deal with
      the case where it is we just always shift the value more than
      once, with fewer bits each time.  */
-
-  un = n >> 2;
-  if (long_p == 0
-      && (un >> (gdbarch_int_bit (par_state->gdbarch ()) - 2)) == 0)
-    {
-      high_bit
-	= ((ULONGEST)1) << (gdbarch_int_bit (par_state->gdbarch ()) - 1);
-
-      /* A large decimal (not hex or octal) constant (between INT_MAX
-	 and UINT_MAX) is a long or unsigned long, according to ANSI,
-	 never an unsigned int, but this code treats it as unsigned
-	 int.  This probably should be fixed.  GCC gives a warning on
-	 such constants.  */
-
-      unsigned_type = parse_type (par_state)->builtin_unsigned_int;
-      signed_type = parse_type (par_state)->builtin_int;
-    }
-  else if (long_p <= 1
-	   && (un >> (gdbarch_long_bit (par_state->gdbarch ()) - 2)) == 0)
-    {
-      high_bit
-	= ((ULONGEST)1) << (gdbarch_long_bit (par_state->gdbarch ()) - 1);
-      unsigned_type = parse_type (par_state)->builtin_unsigned_long;
-      signed_type = parse_type (par_state)->builtin_long;
-    }
+  int int_bits = gdbarch_int_bit (par_state->gdbarch ());
+  int long_bits = gdbarch_long_bit (par_state->gdbarch ());
+  int long_long_bits = gdbarch_long_long_bit (par_state->gdbarch ());
+  bool have_signed
+    /* No 'u' suffix.  */
+    = !unsigned_p;
+  bool have_unsigned
+    = ((/* 'u' suffix.  */
+	unsigned_p)
+       || (/* Not a decimal.  */
+	   base != 10)
+       || (/* Allowed as a convenience, in case decimal doesn't fit in largest
+	      signed type.  */
+	   !fits_in_type (1, n, long_long_bits, true)));
+  bool have_int
+    /* No 'l' or 'll' suffix.  */
+    = long_p == 0;
+  bool have_long
+    /* No 'll' suffix.  */
+    = long_p <= 1;
+  if (have_int && have_signed && fits_in_type (1, n, int_bits, true))
+    putithere->typed_val_int.type = parse_type (par_state)->builtin_int;
+  else if (have_int && have_unsigned && fits_in_type (1, n, int_bits, false))
+    putithere->typed_val_int.type
+      = parse_type (par_state)->builtin_unsigned_int;
+  else if (have_long && have_signed && fits_in_type (1, n, long_bits, true))
+    putithere->typed_val_int.type = parse_type (par_state)->builtin_long;
+  else if (have_long && have_unsigned && fits_in_type (1, n, long_bits, false))
+    putithere->typed_val_int.type
+      = parse_type (par_state)->builtin_unsigned_long;
+  else if (have_signed && fits_in_type (1, n, long_long_bits, true))
+    putithere->typed_val_int.type
+      = parse_type (par_state)->builtin_long_long;
+  else if (have_unsigned && fits_in_type (1, n, long_long_bits, false))
+    putithere->typed_val_int.type
+      = parse_type (par_state)->builtin_unsigned_long_long;
   else
-    {
-      int shift;
-      if (sizeof (ULONGEST) * HOST_CHAR_BIT
-	  < gdbarch_long_long_bit (par_state->gdbarch ()))
-	/* A long long does not fit in a LONGEST.  */
-	shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
-      else
-	shift = (gdbarch_long_long_bit (par_state->gdbarch ()) - 1);
-      high_bit = (ULONGEST) 1 << shift;
-      unsigned_type = parse_type (par_state)->builtin_unsigned_long_long;
-      signed_type = parse_type (par_state)->builtin_long_long;
-    }
-
-   putithere->typed_val_int.val = n;
-
-   /* If the high bit of the worked out type is set then this number
-      has to be unsigned. */
-
-   if (unsigned_p || (n & high_bit))
-     {
-       putithere->typed_val_int.type = unsigned_type;
-     }
-   else
-     {
-       putithere->typed_val_int.type = signed_type;
-     }
+    error (_("Numeric constant too large."));
+  putithere->typed_val_int.val = n;
 
-   return INT;
+   if (imaginary_p)
+     putithere->typed_val_int.type
+       = init_complex_type (nullptr, putithere->typed_val_int.type);
+
+   return imaginary_p ? COMPLEX_INT : INT;
 }
 
 /* Temporary obstack used for holding strings.  */
@@ -2345,15 +2436,19 @@ enum token_flag
 
   FLAG_CXX = 1,
 
+  /* If this bit is set, the token is C-only.  */
+
+  FLAG_C = 2,
+
   /* If this bit is set, the token is conditional: if there is a
      symbol of the same name, then the token is a symbol; otherwise,
      the token is a keyword.  */
 
-  FLAG_SHADOW = 2
+  FLAG_SHADOW = 4
 };
 DEF_ENUM_FLAGS_TYPE (enum token_flag, token_flags);
 
-struct token
+struct c_token
 {
   const char *oper;
   int token;
@@ -2361,15 +2456,15 @@ struct token
   token_flags flags;
 };
 
-static const struct token tokentab3[] =
+static const struct c_token tokentab3[] =
   {
     {">>=", ASSIGN_MODIFY, BINOP_RSH, 0},
     {"<<=", ASSIGN_MODIFY, BINOP_LSH, 0},
-    {"->*", ARROW_STAR, BINOP_END, FLAG_CXX},
-    {"...", DOTDOTDOT, BINOP_END, 0}
+    {"->*", ARROW_STAR, OP_NULL, FLAG_CXX},
+    {"...", DOTDOTDOT, OP_NULL, 0}
   };
 
-static const struct token tokentab2[] =
+static const struct c_token tokentab2[] =
   {
     {"+=", ASSIGN_MODIFY, BINOP_ADD, 0},
     {"-=", ASSIGN_MODIFY, BINOP_SUB, 0},
@@ -2379,28 +2474,28 @@ static const struct token tokentab2[] =
     {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 0},
     {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND, 0},
     {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 0},
-    {"++", INCREMENT, BINOP_END, 0},
-    {"--", DECREMENT, BINOP_END, 0},
-    {"->", ARROW, BINOP_END, 0},
-    {"&&", ANDAND, BINOP_END, 0},
-    {"||", OROR, BINOP_END, 0},
+    {"++", INCREMENT, OP_NULL, 0},
+    {"--", DECREMENT, OP_NULL, 0},
+    {"->", ARROW, OP_NULL, 0},
+    {"&&", ANDAND, OP_NULL, 0},
+    {"||", OROR, OP_NULL, 0},
     /* "::" is *not* only C++: gdb overrides its meaning in several
        different ways, e.g., 'filename'::func, function::variable.  */
-    {"::", COLONCOLON, BINOP_END, 0},
-    {"<<", LSH, BINOP_END, 0},
-    {">>", RSH, BINOP_END, 0},
-    {"==", EQUAL, BINOP_END, 0},
-    {"!=", NOTEQUAL, BINOP_END, 0},
-    {"<=", LEQ, BINOP_END, 0},
-    {">=", GEQ, BINOP_END, 0},
-    {".*", DOT_STAR, BINOP_END, FLAG_CXX}
+    {"::", COLONCOLON, OP_NULL, 0},
+    {"<<", LSH, OP_NULL, 0},
+    {">>", RSH, OP_NULL, 0},
+    {"==", EQUAL, OP_NULL, 0},
+    {"!=", NOTEQUAL, OP_NULL, 0},
+    {"<=", LEQ, OP_NULL, 0},
+    {">=", GEQ, OP_NULL, 0},
+    {".*", DOT_STAR, OP_NULL, FLAG_CXX}
   };
 
 /* Identifier-like tokens.  Only type-specifiers than can appear in
    multi-word type names (for example 'double' can appear in 'long
    double') need to be listed here.  type-specifiers that are only ever
-   single word (like 'float') are handled by the classify_name function.  */
-static const struct token ident_tokens[] =
+   single word (like 'char') are handled by the classify_name function.  */
+static const struct c_token ident_tokens[] =
   {
     {"unsigned", UNSIGNED, OP_NULL, 0},
     {"template", TEMPLATE, OP_NULL, FLAG_CXX},
@@ -2411,27 +2506,35 @@ static const struct token ident_tokens[]
     {"_Alignof", ALIGNOF, OP_NULL, 0},
     {"alignof", ALIGNOF, OP_NULL, FLAG_CXX},
     {"double", DOUBLE_KEYWORD, OP_NULL, 0},
+    {"float", FLOAT_KEYWORD, OP_NULL, 0},
     {"false", FALSEKEYWORD, OP_NULL, FLAG_CXX},
     {"class", CLASS, OP_NULL, FLAG_CXX},
     {"union", UNION, OP_NULL, 0},
     {"short", SHORT, OP_NULL, 0},
     {"const", CONST_KEYWORD, OP_NULL, 0},
+    {"restrict", RESTRICT, OP_NULL, FLAG_C | FLAG_SHADOW},
+    {"__restrict__", RESTRICT, OP_NULL, 0},
+    {"__restrict", RESTRICT, OP_NULL, 0},
+    {"_Atomic", ATOMIC, OP_NULL, 0},
     {"enum", ENUM, OP_NULL, 0},
     {"long", LONG, OP_NULL, 0},
+    {"_Complex", COMPLEX, OP_NULL, 0},
+    {"__complex__", COMPLEX, OP_NULL, 0},
+
     {"true", TRUEKEYWORD, OP_NULL, FLAG_CXX},
     {"int", INT_KEYWORD, OP_NULL, 0},
     {"new", NEW, OP_NULL, FLAG_CXX},
     {"delete", DELETE, OP_NULL, FLAG_CXX},
     {"operator", OPERATOR, OP_NULL, FLAG_CXX},
 
-    {"and", ANDAND, BINOP_END, FLAG_CXX},
+    {"and", ANDAND, OP_NULL, FLAG_CXX},
     {"and_eq", ASSIGN_MODIFY, BINOP_BITWISE_AND, FLAG_CXX},
     {"bitand", '&', OP_NULL, FLAG_CXX},
     {"bitor", '|', OP_NULL, FLAG_CXX},
     {"compl", '~', OP_NULL, FLAG_CXX},
     {"not", '!', OP_NULL, FLAG_CXX},
-    {"not_eq", NOTEQUAL, BINOP_END, FLAG_CXX},
-    {"or", OROR, BINOP_END, FLAG_CXX},
+    {"not_eq", NOTEQUAL, OP_NULL, FLAG_CXX},
+    {"or", OROR, OP_NULL, FLAG_CXX},
     {"or_eq", ASSIGN_MODIFY, BINOP_BITWISE_IOR, FLAG_CXX},
     {"xor", '^', OP_NULL, FLAG_CXX},
     {"xor_eq", ASSIGN_MODIFY, BINOP_BITWISE_XOR, FLAG_CXX},
@@ -2452,17 +2555,13 @@ static const struct token ident_tokens[]
 
 
 static void
-scan_macro_expansion (char *expansion)
+scan_macro_expansion (const char *expansion)
 {
-  const char *copy;
-
   /* We'd better not be trying to push the stack twice.  */
   gdb_assert (! cpstate->macro_original_text);
 
-  /* Copy to the obstack, and then free the intermediate
-     expansion.  */
-  copy = obstack_strdup (&cpstate->expansion_obstack, expansion);
-  xfree (expansion);
+  /* Copy to the obstack.  */
+  const char *copy = obstack_strdup (&cpstate->expansion_obstack, expansion);
 
   /* Save the old lexptr value, so we can return to it when we're done
      parsing the expanded text.  */
@@ -2520,7 +2619,6 @@ lex_one_token (struct parser_state *par_
 {
   int c;
   int namelen;
-  unsigned int i;
   const char *tokstart;
   bool saw_structop = last_was_structop;
 
@@ -2532,59 +2630,60 @@ lex_one_token (struct parser_state *par_
   /* Check if this is a macro invocation that we need to expand.  */
   if (! scanning_macro_expansion ())
     {
-      char *expanded = macro_expand_next (&pstate->lexptr,
-                                          standard_macro_lookup,
-                                          expression_macro_scope);
+      gdb::unique_xmalloc_ptr<char> expanded
+	= macro_expand_next (&pstate->lexptr, *expression_macro_scope);
 
-      if (expanded)
-        scan_macro_expansion (expanded);
+      if (expanded != nullptr)
+	scan_macro_expansion (expanded.get ());
     }
 
   pstate->prev_lexptr = pstate->lexptr;
 
   tokstart = pstate->lexptr;
   /* See if it is a special token of length 3.  */
-  for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
-    if (strncmp (tokstart, tokentab3[i].oper, 3) == 0)
+  for (const auto &token : tokentab3)
+    if (strncmp (tokstart, token.oper, 3) == 0)
       {
-	if ((tokentab3[i].flags & FLAG_CXX) != 0
+	if ((token.flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	gdb_assert ((token.flags & FLAG_C) == 0);
 
 	pstate->lexptr += 3;
-	yylval.opcode = tokentab3[i].opcode;
-	return tokentab3[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   /* See if it is a special token of length 2.  */
-  for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
-    if (strncmp (tokstart, tokentab2[i].oper, 2) == 0)
+  for (const auto &token : tokentab2)
+    if (strncmp (tokstart, token.oper, 2) == 0)
       {
-	if ((tokentab2[i].flags & FLAG_CXX) != 0
+	if ((token.flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	gdb_assert ((token.flags & FLAG_C) == 0);
 
 	pstate->lexptr += 2;
-	yylval.opcode = tokentab2[i].opcode;
-	if (tokentab2[i].token == ARROW)
+	yylval.opcode = token.opcode;
+	if (token.token == ARROW)
 	  last_was_structop = 1;
-	return tokentab2[i].token;
+	return token.token;
       }
 
   switch (c = *tokstart)
     {
     case 0:
       /* If we were just scanning the result of a macro expansion,
-         then we need to resume scanning the original text.
+	 then we need to resume scanning the original text.
 	 If we're parsing for field name completion, and the previous
 	 token allows such completion, return a COMPLETE token.
-         Otherwise, we were already scanning the original text, and
-         we're really done.  */
+	 Otherwise, we were already scanning the original text, and
+	 we're really done.  */
       if (scanning_macro_expansion ())
-        {
-          finished_macro_expansion ();
-          goto retry;
-        }
+	{
+	  finished_macro_expansion ();
+	  goto retry;
+	}
       else if (saw_name_at_eof)
 	{
 	  saw_name_at_eof = 0;
@@ -2593,7 +2692,7 @@ lex_one_token (struct parser_state *par_
       else if (par_state->parse_completion && saw_structop)
 	return COMPLETE;
       else
-        return 0;
+	return 0;
 
     case ' ':
     case '\t':
@@ -2620,8 +2719,8 @@ lex_one_token (struct parser_state *par_
 
     case ',':
       if (pstate->comma_terminates
-          && paren_depth == 0
-          && ! scanning_macro_expansion ())
+	  && paren_depth == 0
+	  && ! scanning_macro_expansion ())
 	return 0;
       pstate->lexptr++;
       return c;
@@ -2633,7 +2732,7 @@ lex_one_token (struct parser_state *par_
 	  last_was_structop = true;
 	  goto symbol;		/* Nope, must be a symbol. */
 	}
-      /* FALL THRU.  */
+      [[fallthrough]];
 
     case '0':
     case '1':
@@ -2647,7 +2746,7 @@ lex_one_token (struct parser_state *par_
     case '9':
       {
 	/* It's a number.  */
-	int got_dot = 0, got_e = 0, toktype;
+	int got_dot = 0, got_e = 0, got_p = 0, toktype;
 	const char *p = tokstart;
 	int hex = input_radix > 10;
 
@@ -2667,13 +2766,16 @@ lex_one_token (struct parser_state *par_
 	    /* This test includes !hex because 'e' is a valid hex digit
 	       and thus does not indicate a floating point number when
 	       the radix is hex.  */
-	    if (!hex && !got_e && (*p == 'e' || *p == 'E'))
+	    if (!hex && !got_e && !got_p && (*p == 'e' || *p == 'E'))
 	      got_dot = got_e = 1;
+	    else if (!got_e && !got_p && (*p == 'p' || *p == 'P'))
+	      got_dot = got_p = 1;
 	    /* This test does not include !hex, because a '.' always indicates
 	       a decimal floating point number regardless of the radix.  */
 	    else if (!got_dot && *p == '.')
 	      got_dot = 1;
-	    else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
+	    else if (((got_e && (p[-1] == 'e' || p[-1] == 'E'))
+		      || (got_p && (p[-1] == 'p' || p[-1] == 'P')))
 		     && (*p == '-' || *p == '+'))
 	      /* This is the sign of the exponent, not the end of the
 		 number.  */
@@ -2686,8 +2788,8 @@ lex_one_token (struct parser_state *par_
 	      break;
 	  }
 	toktype = parse_number (par_state, tokstart, p - tokstart,
-				got_dot|got_e, &yylval);
-        if (toktype == ERROR)
+				got_dot | got_e | got_p, &yylval);
+	if (toktype == ERROR)
 	  {
 	    char *err_copy = (char *) alloca (p - tokstart + 1);
 
@@ -2727,7 +2829,7 @@ lex_one_token (struct parser_state *par_
 	    return ENTRY;
 	  }
       }
-      /* FALLTHRU */
+      [[fallthrough]];
     case '+':
     case '-':
     case '*':
@@ -2754,7 +2856,7 @@ lex_one_token (struct parser_state *par_
     case 'U':
       if (tokstart[1] != '"' && tokstart[1] != '\'')
 	break;
-      /* Fall through.  */
+      [[fallthrough]];
     case '\'':
     case '"':
 
@@ -2851,22 +2953,26 @@ lex_one_token (struct parser_state *par_
 
   /* Catch specific keywords.  */
   std::string copy = copy_name (yylval.sval);
-  for (i = 0; i < sizeof ident_tokens / sizeof ident_tokens[0]; i++)
-    if (copy == ident_tokens[i].oper)
+  for (const auto &token : ident_tokens)
+    if (copy == token.oper)
       {
-	if ((ident_tokens[i].flags & FLAG_CXX) != 0
+	if ((token.flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	if ((token.flags & FLAG_C) != 0
+	    && par_state->language ()->la_language != language_c
+	    && par_state->language ()->la_language != language_objc)
+	  break;
 
-	if ((ident_tokens[i].flags & FLAG_SHADOW) != 0)
+	if ((token.flags & FLAG_SHADOW) != 0)
 	  {
 	    struct field_of_this_result is_a_field_of_this;
 
 	    if (lookup_symbol (copy.c_str (),
 			       pstate->expression_context_block,
-			       VAR_DOMAIN,
+			       SEARCH_VFT,
 			       (par_state->language ()->la_language
-			        == language_cplus ? &is_a_field_of_this
+				== language_cplus ? &is_a_field_of_this
 				: NULL)).symbol
 		!= NULL)
 	      {
@@ -2877,8 +2983,8 @@ lex_one_token (struct parser_state *par_
 
 	/* It is ok to always set this, even though we don't always
 	   strictly need to.  */
-	yylval.opcode = ident_tokens[i].opcode;
-	return ident_tokens[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   if (*tokstart == '$')
@@ -2895,7 +3001,7 @@ lex_one_token (struct parser_state *par_
 }
 
 /* An object of this type is pushed on a FIFO by the "outer" lexer.  */
-struct token_and_value
+struct c_token_and_value
 {
   int token;
   YYSTYPE value;
@@ -2903,14 +3009,14 @@ struct token_and_value
 
 /* A FIFO of tokens that have been read but not yet returned to the
    parser.  */
-static std::vector<token_and_value> token_fifo;
+static std::vector<c_token_and_value> token_fifo;
 
 /* Non-zero if the lexer should return tokens from the FIFO.  */
 static int popping;
 
 /* Temporary storage for c_lex; this holds symbol names as they are
    built up.  */
-auto_obstack name_obstack;
+static auto_obstack name_obstack;
 
 /* Classify a NAME token.  The contents of the token are in `yylval'.
    Updates yylval and returns the new token type.  BLOCK is the block
@@ -2932,11 +3038,11 @@ classify_name (struct parser_state *par_
      we can refer to it unconditionally below.  */
   memset (&is_a_field_of_this, 0, sizeof (is_a_field_of_this));
 
-  bsym = lookup_symbol (copy.c_str (), block, VAR_DOMAIN,
-			par_state->language ()->la_name_of_this
+  bsym = lookup_symbol (copy.c_str (), block, SEARCH_VFT,
+			par_state->language ()->name_of_this ()
 			? &is_a_field_of_this : NULL);
 
-  if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)
+  if (bsym.symbol && bsym.symbol->aclass () == LOC_BLOCK)
     {
       yylval.ssym.sym = bsym;
       yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
@@ -2955,11 +3061,11 @@ classify_name (struct parser_state *par_
 	{
 	  struct field_of_this_result inner_is_a_field_of_this;
 
-	  bsym = lookup_symbol (copy.c_str (), block, STRUCT_DOMAIN,
+	  bsym = lookup_symbol (copy.c_str (), block, SEARCH_STRUCT_DOMAIN,
 				&inner_is_a_field_of_this);
 	  if (bsym.symbol != NULL)
 	    {
-	      yylval.tsym.type = SYMBOL_TYPE (bsym.symbol);
+	      yylval.tsym.type = bsym.symbol->type ();
 	      return TYPENAME;
 	    }
 	}
@@ -2978,16 +3084,17 @@ classify_name (struct parser_state *par_
 	  symtab = lookup_symtab (copy.c_str ());
 	  if (symtab)
 	    {
-	      yylval.bval = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab),
-					       STATIC_BLOCK);
+	      yylval.bval
+		= symtab->compunit ()->blockvector ()->static_block ();
+
 	      return FILENAME;
 	    }
 	}
     }
 
-  if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_TYPEDEF)
+  if (bsym.symbol && bsym.symbol->aclass () == LOC_TYPEDEF)
     {
-      yylval.tsym.type = SYMBOL_TYPE (bsym.symbol);
+      yylval.tsym.type = bsym.symbol->type ();
       return TYPENAME;
     }
 
@@ -3004,7 +3111,7 @@ classify_name (struct parser_state *par_
 	  sym = lookup_struct_typedef (copy.c_str (),
 				       par_state->expression_context_block, 1);
 	  if (sym)
-	    yylval.theclass.type = SYMBOL_TYPE (sym);
+	    yylval.theclass.type = sym->type ();
 	  return CLASSNAME;
 	}
     }
@@ -3061,7 +3168,7 @@ classify_inner_name (struct parser_state
   std::string copy = copy_name (yylval.ssym.stoken);
   /* N.B. We assume the symbol can only be in VAR_DOMAIN.  */
   yylval.ssym.sym = cp_lookup_nested_symbol (type, copy.c_str (), block,
-					     VAR_DOMAIN);
+					     SEARCH_VFT);
 
   /* If no symbol was found, search for a matching base class named
      COPY.  This will allow users to enter qualified names of class members
@@ -3080,7 +3187,7 @@ classify_inner_name (struct parser_state
       return ERROR;
     }
 
-  switch (SYMBOL_CLASS (yylval.ssym.sym.symbol))
+  switch (yylval.ssym.sym.symbol->aclass ())
     {
     case LOC_BLOCK:
     case LOC_LABEL:
@@ -3100,13 +3207,13 @@ classify_inner_name (struct parser_state
       return ERROR;
 
     case LOC_TYPEDEF:
-      yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym.symbol);
+      yylval.tsym.type = yylval.ssym.sym.symbol->type ();
       return TYPENAME;
 
     default:
       return NAME;
     }
-  internal_error (__FILE__, __LINE__, _("not reached"));
+  internal_error (_("not reached"));
 }
 
 /* The outer level of a two-level lexer.  This calls the inner lexer
@@ -3124,7 +3231,7 @@ classify_inner_name (struct parser_state
 static int
 yylex (void)
 {
-  token_and_value current;
+  c_token_and_value current;
   int first_was_coloncolon, last_was_coloncolon;
   struct type *context_type = NULL;
   int last_to_examine, next_to_examine, checkpoint;
@@ -3200,7 +3307,7 @@ yylex (void)
 
   while (next_to_examine <= last_to_examine)
     {
-      token_and_value next;
+      c_token_and_value next;
 
       next = token_fifo[next_to_examine];
       ++next_to_examine;
@@ -3297,7 +3404,7 @@ c_parse (struct parser_state *par_state)
     = make_scoped_restore (&expression_macro_scope, macro_scope.get ());
 
   scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
-							parser_debug);
+							par_state->debug);
 
   /* Initialize some state used by the lexer.  */
   last_was_structop = false;
@@ -3308,10 +3415,14 @@ c_parse (struct parser_state *par_state)
   popping = 0;
   name_obstack.clear ();
 
-  return yyparse ();
+  int result = yyparse ();
+  if (!result)
+    pstate->set_operation (pstate->pop ());
+  return result;
 }
 
-#ifdef YYBISON
+#if defined(YYBISON) && YYBISON < 30800
+
 
 /* This is called via the YYPRINT macro when parser debugging is
    enabled.  It prints a token's value.  */
@@ -3372,8 +3483,5 @@ c_print_token (FILE *file, int type, YYS
 static void
 yyerror (const char *msg)
 {
-  if (pstate->prev_lexptr)
-    pstate->lexptr = pstate->prev_lexptr;
-
-  error (_("A %s in expression, near `%s'."), msg, pstate->lexptr);
+  pstate->parse_error (msg);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cgen-remap.h ./gdb/cgen-remap.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cgen-remap.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/cgen-remap.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,53 @@
+/* Copyright (C) 2023-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef CGEN_REMAP_H
+#define CGEN_REMAP_H
+
+/* Remap cgen interface names, so we can have multiple cgen generated include
+   files in gdb without violating c++ ODR.  */
+
+/* Define GDB_CGEN_REMAP_PREFIX to the desired remapping prefix before
+   including this file.  */
+#ifndef GDB_CGEN_REMAP_PREFIX
+# error "GDB_CGEN_REMAP_PREFIX not defined"
+#endif
+
+#define GDB_CGEN_REMAP_2(PREFIX, SYM) PREFIX ## _ ## SYM
+#define GDB_CGEN_REMAP_1(PREFIX, SYM) GDB_CGEN_REMAP_2 (PREFIX, SYM)
+#define GDB_CGEN_REMAP(SYM) GDB_CGEN_REMAP_1 (GDB_CGEN_REMAP_PREFIX, SYM)
+
+#define cgen_operand_type	GDB_CGEN_REMAP (cgen_operand_type)
+#define cgen_hw_type		GDB_CGEN_REMAP (cgen_hw_type)
+#define cgen_ifld		GDB_CGEN_REMAP (cgen_ifld)
+#define cgen_insn		GDB_CGEN_REMAP (cgen_insn)
+#define cgen_cpu_desc		GDB_CGEN_REMAP (cgen_cpu_desc)
+#define cgen_fields		GDB_CGEN_REMAP (cgen_fields)
+#define cgen_insn_list		GDB_CGEN_REMAP (cgen_insn_list)
+#define cgen_maybe_multi_ifield	GDB_CGEN_REMAP (cgen_maybe_multi_ifield)
+#define CGEN_OPINST             GDB_CGEN_REMAP (CGEN_OPINST)
+#define CGEN_IFMT_IFLD		GDB_CGEN_REMAP (CGEN_IFMT_IFLD)
+#define CGEN_INSN_ATTR_TYPE	GDB_CGEN_REMAP (CGEN_INSN_ATTR_TYPE)
+#define CGEN_IBASE		GDB_CGEN_REMAP (CGEN_IBASE)
+#define CGEN_HW_ENTRY		GDB_CGEN_REMAP (CGEN_HW_ENTRY)
+#define CGEN_HW_TABLE		GDB_CGEN_REMAP (CGEN_HW_TABLE)
+#define CGEN_INSN_TABLE		GDB_CGEN_REMAP (CGEN_INSN_TABLE)
+#define CGEN_OPERAND_TABLE	GDB_CGEN_REMAP (CGEN_OPERAND_TABLE)
+#define CGEN_OPERAND		GDB_CGEN_REMAP (CGEN_OPERAND)
+#define CGEN_MAYBE_MULTI_IFLD	GDB_CGEN_REMAP (CGEN_MAYBE_MULTI_IFLD)
+
+#endif /* CGEN_REMAP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog ./gdb/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog	1970-01-01 00:00:00.000000000 +0000
@@ -1,16432 +0,0 @@
-2019-12-10  Christian Biesinger  <cbiesinger@google.com>
-
-	* gdbsupport/safe-strerror.c: Supress the unused function warning
-	for select_strerror_r.
-
-2019-12-10  Christian Biesinger  <cbiesinger@google.com>
-
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* gdbsupport/agent.c (gdb_connect_sync_socket): Call
-	safe_strerror instead of strerror.
-	* gdbsupport/common.m4: Don't check for strerror.
-	* gdbsupport/safe-strerror.c: Support both the glibc version
-	of strerror_r and the XSI version.
-
-2019-12-10  Tom Tromey  <tromey@adacore.com>
-
-	* ada-typeprint.c (print_choices): Use a single "?".
-	(print_variant_part): Print "?" if the discriminant name
-	is not known.
-
-2019-12-10  George Barrett  <bob@bob131.so>
-
-	Fix scripted probe breakpoints.
-	* breakpoint.c (tracepoint_probe_breakpoint_ops): Move
-	declaration forward.
-	(breakpoint_ops_for_event_location_type)
-	(breakpoint_ops_for_event_location): Add function definitions.
-	(break_command_1, trace_command): Use
-	breakpoint_ops_for_event_location.
-	* breakpoint.h (breakpoint_ops_for_event_location): Add function
-	declarations.
-	* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Use
-	breakpoint_ops_for_event_location.
-	* python/py-breakpoint.c (bppy_init): Use
-	breakpoint_ops_for_event_location.
-
-2019-12-09  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
-
-	* gdbtypes.c (rank_one_type): Return INCOMPATIBLE_TYPE_BADNESS
-	when ranking an lvalue argument for an rvalue parameter.
-
-2019-12-08  Wataru Ashihara  <wataash@wataash.com>
-
-	* darwin-nat.c (darwin_nat_target::create_inferior): Fix
-	template argument for scoped_restore_tmpl from bool to int.
-
-2019-12-07  Keith Seitz  <keiths@redhat.com>
-
-	* build-id.c (build_id_bfd_get): Permit bfd_core, too.
-	(build_id_to_debug_bfd): Make static, rewriting to use
-	build_id_to_bfd_suffix.
-	(build_id_to_bfd_suffix): Copy of build_id_to_debug_bfd,
-	adding `suffix' parameter. Append SUFFIX to file names
-	when searching for matching files.
-	(build_id_to_debug_bfd): Use build_id_to_bfd_suffix.
-	(build_id_to_exec_bfd): Likewise.
-	* build-id.h (build_id_to_debug_bfd): Clarify that function
-	searches for BFD of debug info file.
-	(build_id_to_exec_bfd): Declare.
-	* corelow.c: Include build-id.h.
-	(locate_exec_from_corefile_build_id): New function.
-	(core_target_open): If no executable BFD is found,
-	search for a core file BFD using build-id.
-
-2019-12-06  Christian Biesinger  <cbiesinger@google.com>
-
-	* bcache.c: Put in namespace gdb.
-	* bcache.h: Likewise.
-	* gdbtypes.c (check_types_worklist): Update.
-	(types_deeply_equal): Update.
-	* macrotab.c (struct macro_table) <bcache>: Update.
-	(new_macro_table): Update.
-	* macrotab.h (struct bcache): Put this forward declaration
-	inside namespace gdb.
-	(new_macro_table): Update.
-	* objfiles.h (struct objfile_per_bfd_storage) <filename_cache>:
-	Update.
-	<macro_cache>: Update.
-	* psymtab.h: (psymtab_storage) <psymbol_cache>: Update.
-
-2019-12-06  Tom de Vries  <tdevries@suse.de>
-
-	PR symtab/24971
-	* block.c (best_symbol, better_symbol): New function.
-	(block_lookup_symbol_primary, block_lookup_symbol): Prefer def over
-	decl.
-
-2019-12-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
-
-	* gdbtypes.h: Define the REFERENCE_SEE_THROUGH_BADNESS value.
-	* gdbtypes.c (rank_one_type): Use REFERENCE_SEE_THROUGH_BADNESS
-	for ranking see-through reference cases.
-
-2019-12-06  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	* stack.c (faas_command): Check a command is provided.
-	* thread.c (taas_command, tfaas_command): Likewise.
-
-2019-12-05  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	* inferior.c (prune_inferiors):  Only call delete_inferior,
-	Do not modify the inferior list.
-
-2019-12-05  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* c-exp.y: Update calls to lookup_typename,
-	lookup_signed_typename and lookup_unsigned_typename.
-	* c-lang.c (evaluate_subexp_c): Likewise.
-	* cp-namespace.c (cp_lookup_symbol_imports_or_template):
-	Likewise.
-	* eval.c (binop_promote): Likewise.
-	* gdbtypes.c (lookup_typename): Remove gdbarch parameter.
-	(lookup_unsigned_typename): Likewise.
-	(lookup_signed_typename): Likewise.
-	* gdbtypes.h (lookup_unsigned_typename): Likewise.
-	(lookup_signed_typename): Likewise.
-	(lookup_typename): Likewise.
-	* guile/scm-type.c (tyscm_lookup_typename): Update calls to
-	lookup_typename, lookup_signed_typename,
-	lookup_unsigned_typename.
-	* m2-exp.y: Likewise.
-	* printcmd.c (printf_wide_c_string): Likewise.
-	(ui_printf): Likewise.
-	* python/py-type.c (typy_lookup_typename): Likewise.
-	* python/py-xmethods.c (python_xmethod_worker::invoke):
-	Likewise.
-	* rust-exp.y: Likewise.
-
-2019-12-04  Christian Biesinger  <cbiesinger@google.com>
-
-	* configure.nat (obsd64): Add missing files x86-nat.o and
-	nat/x86-dregs.o.
-
-2019-12-04  Tom Tromey  <tom@tromey.com>
-
-	* valprint.c (val_print_string): Use metadata_style.
-	* go-valprint.c (print_go_string): Use metadata style.
-	* p-valprint.c (pascal_object_print_static_field): Use metadata
-	style.
-	* cp-valprint.c (cp_print_static_field): Use metadata style.
-
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
-
-	* f-exp.y (COMPLEX_KEYWORD, SINGLE, DOUBLE, PRECISION): New
-	tokens.
-	(typebase): New patterns for complex, single/double precision, and
-	single/double complex.
-	(f77_keywords): Change token for complex keyword, and add single,
-	double, and precision keywords.
-
-2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* avr-tdep.c (_initialize_avr_tdep): Improve help of command
-	"info io_registers".
-
-2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* regcache.c (cooked_read_test): Initialize thread list of
-	mock_inferior.
-
-2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* aarch64-linux-tdep.c: Remove includes.
-
-2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* aarch64-tdep.c: Remove includes.
-
-2019-12-04  Simon Marchi  <simon.marchi@efficios.com>
-
-	* filtered-iterator.h (filtered_iterator) <operator==,
-	operator!=>: Compare wrapped iterators, not wrapped pointers.
-	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
-	unittests/filtered_iterator-selftests.c.
-	* unittests/filtered_iterator-selftests.c: New file.
-
-2019-12-04  Tom Tromey  <tromey@adacore.com>
-
-	* gdbtypes.c (create_range_type): Inherit endianity
-	from base type.
-
-2019-12-04  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (decode_constrained_packed_array)
-	(ada_value_assign, value_assign_to_component): Update.
-	* dwarf2loc.c (rw_pieced_value, access_memory)
-	(dwarf2_compile_expr_to_ax): Update.
-	* dwarf2read.c (dwarf2_add_field): Update.
-	* eval.c (evaluate_subexp_standard): Update.
-	* gdbarch.c, gdbarch.h: Rebuild.
-	* gdbarch.sh (bits_big_endian): Remove.
-	* gdbtypes.h (union field_location): Update comment.
-	* target-descriptions.c (make_gdb_type): Update.
-	* valarith.c (value_bit_index): Update.
-	* value.c (struct value) <bitpos>: Update comment.
-	(unpack_bits_as_long, modify_field): Update.
-	* value.h (value_bitpos): Update comment.
-
-2019-12-04  Tom Tromey  <tromey@adacore.com>
-
-	* gdbtypes.c (type_byte_order): Move earlier.  Assert for unknown
-	endian-ness.
-
-2019-12-04  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.c (dwarf2_init_float_type)
-	(dwarf2_init_complex_target_type): Add byte_order parameter.
-	(read_base_type): Compute byte order earlier.
-	* gdbtypes.c (init_float_type): Add byte_order parameter.
-	* gdbtypes.h (init_float_type): Add byte_order parameter.
-
-2019-12-04  Tom Tromey  <tromey@adacore.com>
-
-	* unittests/tui-selftests.c: Conditionally include tui-winsource.h.
-
-2019-12-04  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.c (process_structure_scope): Initialize
-	"discr_offset".
-
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* mi/mi-symbol-cmds.c (mi_symbol_info): Take extra parameter, and
-	add it into the search spec.
-	(parse_max_results_option): New function.
-	(mi_info_functions_or_variables): Parse -max-results flag and pass
-	it to mi_symbol_info.
-	(mi_cmd_symbol_info_modules): Likewise.
-	(mi_cmd_symbol_info_types): Likewise.
-	* symtab.c (global_symbol_searcher::add_matching_symbols): Change
-	return type to bool, change result container into a set, and don't
-	add new results if we have enough already.
-	(global_symbol_searcher::add_matching_msymbols): Change return
-	type to bool, and don't add new results if we have enough already.
-	(sort_search_symbols_remove_dups): Delete.
-	(global_symbol_searcher::search): Early exit from search loop when
-	we have enough results.  Use a std::set to collect the results
-	from calling add_matching_symbols.
-	* symtab.h (global_symbol_searcher) <set_max_seach_results>: New
-	member function.
-	(global_symbol_searcher) <m_max_search_results>: New member
-	variable.
-	(global_symbol_searcher) <add_matching_symbols>: Update header
-	comment and change return type to bool.
-	(global_symbol_searcher) <add_matching_msymbols>: Update header
-	comment and change return type to bool.
-
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* symtab.c (symbol_search::compare_search_syms): Update header
-	comment.
-	(global_symbol_searcher::is_suitable_msymbol): New function.
-	(global_symbol_searcher::expand_symtabs): New function.
-	(global_symbol_searcher::add_matching_symbols): New function.
-	(global_symbol_searcher::add_matching_msymbols): New function.
-	(global_symbol_searcher::search): Move most of the content
-	into the new functions above, and call them as needed.
-	* symtab.h (global_symbol_searcher) <expand_symtabs>: New member
-	function.
-	(global_symbol_searcher) <add_matching_symbols>: New member
-	function.
-	(global_symbol_searcher) <add_matching_msymbols>: New member
-	function.
-	(global_symbol_searcher) <is_suitable_msymbol>: New member
-	function.
-
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* mi/mi-cmds.c (mi_cmds): Add -symbol-info-module-functions and
-	-symbol-info-module-variables entries.
-	* mi/mi-cmds.h (mi_cmd_symbol_info_module_functions): Declare.
-	(mi_cmd_symbol_info_module_variables): Declare.
-	* mi/mi-symbol-cmds.c
-	(module_symbol_search_iterator): New typedef.
-	(output_module_symbols_in_single_module_and_file): New function.
-	(output_module_symbols_in_single_module): New function.
-	(mi_info_module_functions_or_variables): New function.
-	(mi_cmd_symbol_info_module_functions): New function.
-	(mi_cmd_symbol_info_module_variables): New function.
-	* NEWS: Mention new MI command.
-
-2019-12-03  Christian Biesinger  <cbiesinger@google.com>
-
-	* bcache.c (hash): Remove.
-	(hash_continue): Remove.
-	* bcache.h (hash): Remove.
-	(hash_continue): Remove.
-	(struct bcache) <ctor>: Update.
-	* psymtab.c (psymbol_hash): Update.
-	* stabsread.c (hashname): Update.
-	* utils.h (fast_hash): Add an argument for a start value,
-	defaulting to zero.
-
-2019-12-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	* symtab.c (symbol_cache_clear_slot):  Move close to cleared type.
-	(destroy_block_symbol_cache): New function.
-	(symbol_cache:~symbol_cache) Call destroy_block_symbol_cache.
-	(resize_symbol_cache): Likewise.
-
-2019-12-02  Tom Tromey  <tom@tromey.com>
-
-	* unittests/tui-selftests.c (run_tests): Make conditional.
-	(_initialize_tui_selftest): Make conditional.
-
-2019-12-02  Christian Biesinger  <cbiesinger@google.com>
-
-	* aix-thread.c (debug_aix_thread): Change type to bool.
-
-2019-12-02  Luis Machado  <luis.machado@linaro.org>
-
-	* infrun.c (follow_fork_inferior): Remove outdated FIXME comment.
-
-2019-12-01  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2read.c (read_tag_string_type): Read the fields required to
-	make a dynamic string, and possibly create a dynamic range for the
-	string.
-	(attr_to_dynamic_prop): Setup is_reference based on the type of
-	attribute being processed.
-	* gdbtypes.c (is_dynamic_type_internal): Handle TYPE_CODE_STRING.
-	(resolve_dynamic_array): Rename to...
-	(resolve_dynamic_array_or_string): ...this, update header comment,
-	and accept TYPE_CODE_STRING.
-	(resolve_dynamic_type_internal): Handle TYPE_CODE_STRING.
-
-2019-12-01  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2read.c (dwarf2_per_cu_int_type): New function, takes most
-	of its implementation from...
-	(dwarf2_per_cu_addr_sized_int_type): ...here, which now just calls
-	the new function.
-
-2019-12-01  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2read.c (read_subrange_type): Read bit and byte stride and
-	create a range with stride where appropriate.
-	* f-valprint.c: Include 'gdbarch.h'.
-	(f77_print_array_1): Take the stride into account when walking the
-	array.  Also convert the stride into addressable units.
-	* gdbtypes.c (create_range_type): Initialise the stride to
-	constant zero.
-	(create_range_type_with_stride): New function, initialise the
-	range as normal, and then setup the stride.
-	(has_static_range): Include the stride here.  Also change the
-	return type to bool.
-	(create_array_type_with_stride): Consider the range stride if the
-	array isn't given its own stride.
-	(resolve_dynamic_range): Resolve the stride if needed.
-	* gdbtypes.h (struct range_bounds) <stride>: New member variable.
-	(struct range_bounds) <flag_is_byte_stride>: New member variable.
-	(TYPE_BIT_STRIDE): Define.
-	(TYPE_ARRAY_BIT_STRIDE): Define.
-	(create_range_type_with_stride): Declare.
-	* valarith.c (value_subscripted_rvalue): Take range stride into
-	account when walking the array.
-
-2019-12-01  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_all_windows_info): Treat inactive TUI
-	specially.
-
-2019-12-01  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_copy_source_line): Don't advance past
-	\0.
-	* unittests/tui-selftests.c: New file.
-	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add tui-selftests.c.
-
-2019-12-01  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c (tui_enable): Call tui_update_variables earlier.
-
-2019-12-01  Tom Tromey  <tom@tromey.com>
-
-	* NEWS: Document new settings.
-	* tui/tui-wingeneral.c (box_win): Apply appropriate border style.
-	* tui/tui-win.c (_initialize_tui_win): Add border style
-	observers.
-	* tui/tui-io.h (tui_apply_style): Declare.
-	* tui/tui-io.c (tui_apply_style): Rename from apply_style.  No
-	longer static.
-	(apply_ansi_escape, tui_set_reverse_mode): Update.
-	* cli/cli-style.h (class cli_style_option) <add_setshow_commands>:
-	Add "skip_intensity" parameter.
-	<changed>: New member.
-	<do_set_value>: Declare.
-	(tui_border_style, tui_active_border_style): Declare.
-	* cli/cli-style.c (tui_border_style, tui_active_border_style): New
-	globals.
-	(cli_style_option): Initialize "changed".
-	(cli_style_option::do_set_value): New function.
-	(cli_style_option::add_setshow_commands): Add "skip_intensity"
-	parameter.  Update.
-	(STYLE_ADD_SETSHOW_COMMANDS): Add "SKIP" parameter.
-	(_initialize_cli_style): Update.  Create TUI border style
-	commands.
-
-2019-12-01  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_copy_source_line): Add "ndigits"
-	parameter.
-	* tui/tui-winsource.c (tui_copy_source_line): Add "ndigits"
-	parameter.
-	* tui/tui-win.h (compact_source): Declare.
-	* tui/tui-win.c (compact_source): New global.
-	(tui_set_compact_source, tui_show_compact_source): New functions.
-	(_initialize_tui_win): Add "compact-source" setting.
-	* tui/tui-source.c (tui_source_window::set_contents): Handle
-	compact_source setting.
-	* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
-	* NEWS: Document new setting.
-
-2019-11-30  Tom Tromey  <tom@tromey.com>
-
-	* dwarf2read.c (dwarf2_add_field): Include field offset when
-	computing variant part length.
-
-2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	* NEWS:  Mention define-prefix.  Tell that command names can now
-	contain a . character.
-
-2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* command.h (valid_cmd_char_p): Declare.
-	* cli/cli-decode.c (valid_cmd_char_p): New function factorizing
-	the check of valid command char.
-	(find_command_name_length, valid_user_defined_cmd_name_p): Use
-	valid_cmd_char_p.
-	* cli/cli-script.c (validate_comname): Likewise.
-	* completer.c (gdb_completer_command_word_break_characters):
-	Do not remove . from the word break char, update comments.
-	(complete_line_internal_1): Use valid_cmd_char_p.
-	* guile/scm-cmd.c (gdbscm_parse_command_name): Likewise.
-	* python/py-cmd.c (gdbpy_parse_command_name): Likewise.
-
-2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* cli/cli-script.c (do_define_command): Ensure a redefined
-	prefix command is kept as a prefix command.
-	(define_prefix_command): New function.
-	(show_user_1): Report user defined prefixes.
-	(_initialize_cli_script):  Create the new 'define-prefix' command.
-	Add completers for 'define' and 'document'.
-	* top.c (execute_command):  If command is a user-defined prefix only
-	command, report the list of commands for this prefix command.
-
-2019-11-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
-
-	* valops.c (find_oload_champ): Improve debug output.
-
-2019-11-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
-
-	* valops.c (find_oload_champ): Print part of debug messages
-	before the badness vector is std::move'd.
-
-2019-11-28  Tom Tromey  <tom@tromey.com>
-
-	* value.c (creal_internal_fn): Fix comment.
-
-2019-11-28  Tom Tromey  <tom@tromey.com>
-
-	* gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count,
-	flag_bound_evaluated>: Now unsigned.
-
-2019-11-28  Tom Tromey  <tom@tromey.com>
-
-	* guile/guile-internal.h (vlscm_scm_from_value_unsafe): Don't
-	declare.
-
-2019-11-28  Mihails Strasuns  <mihails.strasuns@intel.com>
-
-	* jit.c (jit_bfd_try_read_symtab): Fix printed function name in the
-	debug output.
-	* jit.c (jit_unregister_code): Add debug print to match
-	`jit_register_code`.
-
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
-
-	* NEWS: Mention the new multithreaded symbol loading.
-
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
-
-	* maint.c (n_worker_threads): Default to 0.
-	(worker_threads_disabled): New function.
-	* maint.h (worker_threads_disabled): New function.
-	* minsyms.c (minimal_symbol_reader::record_full): Call symbol_set_names
-	here if worker_threads_disabled () is true.
-	(minimal_symbol_reader::install): Skip all threading if
-	worker_threads_disabled () is true.
-
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
-
-	* minsyms.c (add_minsym_to_hash_table): Use a previously computed
-	hash code if possible.
-	(add_minsym_to_demangled_hash_table): Likewise.
-	(minimal_symbol_reader::install): Compute the hash codes for msymbol
-	on the background thread.
-	* symtab.h (struct minimal_symbol) <hash_value, demangled_hash_value>:
-	Add these fields.
-
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
-
-	* minsyms.c (minimal_symbol_reader::install): Also compute the hash
-	of the mangled name on the background thread.
-	* symtab.c (symbol_set_names): Allow passing in the hash of the
-	linkage_name.
-	* symtab.h (symbol_set_names): Likewise.
-
-2019-11-27  Kevin Buettner  <kevinb@redhat.com>
-
-	* dwarf2read.c (inherit_abstract_dies): Ensure that delayed
-	physnames are computed for inherited DIEs.
-
-2019-11-27  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.h (struct dwarf2_per_objfile): Remove unnecessary
-	backslashes.
-	* cp-support.c: Remove unnecessary backslashes.
-
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
-
-	* ada-exp.y (write_ambiguous_var): Replace SYMBOL_SET_LINKAGE_NAME
-	with sym->set_linkage_name.
-	* coffread.c (coff_read_enum_type): Likewise.
-	* mdebugread.c (parse_symbol): Likewise.
-	* stabsread.c (patch_block_stabs): Likewise.
-	(define_symbol): Likewise.
-	(read_enum_type): Likewise.
-	(common_block_end): Likewise.
-	* symtab.h (struct general_symbol_info) <set_linkage_name>: New
-	function.
-	(SYMBOL_SET_LINKAGE_NAME): Remove.
-	* xcoffread.c (process_xcoff_symbol): Replace SYMBOL_SET_LINKAGE_NAME
-	with sym->set_linkage_name.
-
-2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* mi/mi-cmds.c (mi_cmds): Add 'symbol-info-modules' entry.
-	* mi/mi-cmds.h (mi_cmd_symbol_info_modules): Declare.
-	* mi/mi-symbol-cmds.c (mi_cmd_symbol_info_modules): New function.
-	* NEWS: Mention new MI command.
-
-2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* mi/mi-cmds.c (mi_cmds): Add '-symbol-info-functions',
-	'-symbol-info-types', and '-symbol-info-variables'.
-	* mi/mi-cmds.h (mi_cmd_symbol_info_functions): Declare.
-	(mi_cmd_symbol_info_types): Declare.
-	(mi_cmd_symbol_info_variables): Declare.
-	* mi/mi-symbol-cmds.c: Add 'source.h' and 'mi-getopt.h' includes.
-	(output_debug_symbol): New function.
-	(output_nondebug_symbol): New function.
-	(mi_symbol_info): New function.
-	(mi_info_functions_or_variables): New function.
-	(mi_cmd_symbol_info_functions): New function.
-	(mi_cmd_symbol_info_types): New function.
-	(mi_cmd_symbol_info_variables): New function.
-	* NEWS: Mention new commands.
-
-2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* symtab.c (symbol_to_info_string): New function, most content
-	moved from print_symbol_info, but updated to return a std::string.
-	(print_symbol_info): Update to use symbol_to_info_string and print
-	returned string.
-	* symtab.h (symbol_to_info_string): Declare new function.
-
-2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* python/python.c (gdbpy_rbreak): Convert to using
-	global_symbol_searcher.
-	* symtab.c (file_matches): Convert return type to bool, change
-	file list to std::vector, update header comment.
-	(search_symbols): Rename to...
-	(global_symbol_searcher::search): ...this and update now its
-	a member function of global_symbol_searcher.  Take account of the
-	changes to file_matches.
-	(symtab_symbol_info): Convert to using global_symbol_searcher.
-	(rbreak_command): Likewise.
-	(search_module_symbols): Likewise.
-	* symtab.h (enum symbol_search): Update comment.
-	(search_symbols): Remove declaration.
-	(class global_symbol_searcher): New class.
-
-2019-11-26  Tom Tromey  <tromey@adacore.com>
-
-	* cp-support.c (_initialize_cp_support): Conditionally initialize
-	gdb_demangle_attempt_core_dump.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* python/py-function.c (fnpy_init): Update.
-	* value.h (add_internal_function): Adjust declaration.
-	* value.c (function_destroyer): Remove.
-	(do_add_internal_function): Don't set destroyer or copy name.
-	(add_internal_function): Take unique_xmalloc_ptr<char> for name.
-	Set name_allocated.
-	* python/py-cmd.c (cmdpy_destroyer): Don't free "name".
-	(cmdpy_init): Set name_allocated.
-	* cli/cli-decode.h (struct cmd_list_element) <name_allocated>: New
-	member.
-	(~cmd_list_element): Free "name" if needed.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* value.h (add_internal_function): Add new overload.  Move
-	documentation from value.h.
-	* value.c (do_add_internal_function): New function.
-	(add_internal_function): Use it.  Add new overload.
-	(function_destroyer): Don't free doc.
-	* python/py-function.c (fnpy_init): Update.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* python/py-cmd.c (cmdpy_destroyer): Don't free "doc".
-	(cmdpy_init): Set "doc_allocated".
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* gdbsupport/thread-pool.c (thread_pool::set_thread_count): Set
-	name of worker thread.
-	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for
-	pthread_setname_np.
-	* configure, config.in: Rebuild.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* python/python.c (class gdbpy_gil): New.
-	(struct gdbpy_event): Add constructor, destructor, operator().
-	(gdbpy_post_event): Use run_on_main_thread.
-	(gdbpy_initialize_events): Remove.
-	(do_start_initialization): Update.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* NEWS: Add entry.
-	* maint.c (_initialize_maint_cmds): Add "worker-threads" maint
-	commands.  Call update_thread_pool_size.
-	(update_thread_pool_size, maintenance_set_worker_threads): New
-	functions.
-	(n_worker_threads): New global.
-
-2019-11-26  Christian Biesinger  <cbiesinger@google.com>
-	    Tom Tromey  <tom@tromey.com>
-
-	* minsyms.c (minimal_symbol_reader::install): Use
-	parallel_for_each.
-	* gdbsupport/parallel-for.h: New file.
-	* Makefile.in (HFILES_NO_SRCDIR): Add gdbsupport/parallel-for.h.
-
-2019-11-26  Christian Biesinger  <cbiesinger@google.com>
-	    Tom Tromey  <tom@tromey.com>
-
-	* gdbsupport/thread-pool.h: New file.
-	* gdbsupport/thread-pool.c: New file.
-	* Makefile.in (COMMON_SFILES): Add thread-pool.c.
-	(HFILES_NO_SRCDIR): Add thread-pool.h.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* event-top.h (thread_local_segv_handler): Declare.
-	* event-top.c (thread_local_segv_handler): New global.
-	(install_handle_sigsegv, handle_sigsegv): New functions.
-	(async_init_signals): Install SIGSEGV handler.
-	* cp-support.c (gdb_demangle_jmp_buf): Change type.  Now
-	thread-local.
-	(report_failed_demangle): New function.
-	(gdb_demangle): Make core_dump_allowed atomic.  Remove signal
-	handler-setting code, instead use segv_handler.  Run warning code
-	on main thread.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* run-on-main-thread.c: New file.
-	* run-on-main-thread.h: New file.
-	* unittests/main-thread-selftests.c: New file.
-	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
-	main-thread-selftests.c.
-	(HFILES_NO_SRCDIR): Add run-on-main-thread.h.
-	(COMMON_SFILES): Add run-on-main-thread.c.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* main.c (setup_alternate_signal_stack): Remove.
-	(captured_main_1): Use gdb::alternate_signal_stack.
-	* gdbsupport/alt-stack.h: New file.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* gdbsupport/signals-state-save-restore.c (original_signal_mask):
-	Remove comment.
-	(save_original_signals_state, restore_original_signals_state): Use
-	gdb_sigmask.
-	* linux-nat.c (block_child_signals, restore_child_signals_mask)
-	(_initialize_linux_nat): Use gdb_sigmask.
-	* guile/guile.c (_initialize_guile): Use block_signals.
-	* Makefile.in (HFILES_NO_SRCDIR): Add gdb-sigmask.h.
-	* gdbsupport/gdb-sigmask.h: New file.
-	* event-top.c (async_sigtstp_handler): Use gdb_sigmask.
-	* cp-support.c (gdb_demangle): Use gdb_sigmask.
-	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for
-	pthread_sigmask.
-	* configure, config.in: Rebuild.
-	* gdbsupport/block-signals.h: New file.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* acinclude.m4: Include ax_pthread.m4.
-	* Makefile.in (PTHREAD_CFLAGS, PTHREAD_LIBS): New variables.
-	(INTERNAL_CFLAGS_BASE): Use PTHREAD_CFLAGS.
-	(CLIBS): Use PTHREAD_LIBS.
-	(aclocal_m4_deps): Add ax_pthread.m4.
-	* config.in, configure: Rebuild.
-	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for std::thread.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* symtab.h (struct minimal_symbol) <name_set>: New member.
-	* minsyms.c (minimal_symbol_reader::record_full): Copy name.
-	Don't call symbol_set_names.
-	(minimal_symbol_reader::install): Call symbol_set_names.
-
-2019-11-26  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* python/python.c (gdbpy_enter::~gdbpy_enter): Release GIL after
-	restore_active_ext_lang, as GIL is needed for (indirectly)
-	called PyOS_InterruptOccurred.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* sparc-nat.c (sparc_xfer_wcookie): Sync declaration with
-	definition.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* remote-sim.c (simulator_command): Make static, remove
-	declaration.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* unittests/array-view-selftests.c (check_ptr_size_ctor2): Make
-	static.
-	* unittests/basic_string_view/capacity/1.cc (test01): Likewise.
-	* unittests/basic_string_view/cons/char/1.cc (test01): Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/cons/char/2.cc (test03): Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/cons/char/3.cc (test05): Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/element_access/char/1.cc (test01):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/element_access/char/empty.cc (main):
-	Likewise.
-	* unittests/basic_string_view/element_access/char/front_back.cc
-	(test01): Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/inserters/char/2.cc (test05):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/modifiers/remove_prefix/char/1.cc
-	(test01): Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/modifiers/remove_suffix/char/1.cc
-	(test01): Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/modifiers/swap/char/1.cc (test01):
-	Likewise.
-	* unittests/basic_string_view/operations/compare/char/1.cc
-	(test01): Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operations/compare/char/13650.cc
-	(test01): Likewise.
-	* unittests/basic_string_view/operations/copy/char/1.cc (test01):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operations/data/char/1.cc (test01):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operations/find/char/1.cc (test01):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operations/find/char/2.cc (test02):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operations/find/char/3.cc (test03):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operations/find/char/4.cc (main):
-	Likewise.
-	* unittests/basic_string_view/operations/rfind/char/1.cc (test01):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operations/rfind/char/2.cc (test02):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operations/rfind/char/3.cc (test03):
-	Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operations/substr/char/1.cc
-	(test01): Likewise.
-	(main): Likewise.
-	* unittests/basic_string_view/operators/char/2.cc (main):
-	Likewise.
-	* unittests/optional/assignment/1.cc (test): Likewise.
-	* unittests/optional/assignment/2.cc (test): Likewise.
-	* unittests/optional/assignment/3.cc (test): Likewise.
-	* unittests/optional/assignment/4.cc (test): Likewise.
-	* unittests/optional/assignment/5.cc (test): Likewise.
-	* unittests/optional/assignment/6.cc (test): Likewise.
-	* unittests/optional/assignment/7.cc (test): Likewise.
-	* unittests/optional/cons/copy.cc (test): Likewise.
-	* unittests/optional/cons/default.cc (test): Likewise.
-	* unittests/optional/cons/move.cc (test): Likewise.
-	* unittests/optional/cons/value.cc (test): Likewise.
-	* unittests/optional/in_place.cc (test): Likewise.
-	* unittests/optional/observers/1.cc (test): Likewise.
-	* unittests/optional/observers/2.cc (test): Likewise.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* tui-win.h (tui_set_var_cmd): Remove.
-	* tui-win.c (tui_set_var_cmd): Make static.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* breakpoint.h (hbreak_command_wrapper, thbreak_command_wrapper,
-	rbreak_command_wrapper): Remove.
-	* symtab.c (rbreak_command_wrapper): Remove.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* inferior.h (info_terminal_command): Remove declaration.
-	* inflow.c (info_terminal_command): Make static.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* inferior.c (exit_inferior_silent): Remove.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* dictionary.c (dict_empty, mdict_empty): Remove.
-	* dictionary.c (mdict_empty): Remove.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	 * arc-tdep.c (arc_insn_get_memory_base_reg): Make static.
-	 (arc_insn_get_memory_offset): Likewise.
-	 (arc_insn_dump): Likewise.
-	 * cp-support.c (test_cp_symbol_name_matches): Likewise.
-	 * csky-linux-tdep.c (csky_supply_fregset): Likewise.
-	 * dictionary.c (dict_iterator_next): Likewise.
-	 (dict_iter_match_first): Likewise.
-	 (dict_iter_match_next): Likewise.
-	 * f-lang.c (evaluate_subexp_f): Likewise.
-	 * hppa-tdep.c (hppa_read_pc): Likewise.
-	 * i386-tdep.c (i386_floatformat_for_type): Likewise.
-	 * parse.c (write_exp_elt_msym): Likewise.
-	 * ppc-linux-tdep.c (ppc_floatformat_for_type): Likewise.
-	 * remote.c (remote_packet_size): Likewise.
-	 (remote_notif_stop_parse): Likewise.
-	 * rs6000-aix-tdep.c (aix_sighandle_frame_sniffer): Likewise.
-	 * s12z-tdep.c (s12z_disassemble_info): Likewise.
-	 * source.c (prepare_path_for_appending): Likewise.
-	 * sparc64-linux-tdep.c
-	 (sparc64_linux_handle_segmentation_fault); Likewise.
-	 * stack.c (frame_selection_by_function_completer): Likewise.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* completer.c (set_gdb_completion_word_break_characters):
-	Remove.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* dwarf-index-write.c: Include dwarf-index-write.h.
-	* mi/mi-interp.c: Include mi/mi-interp.h.
-
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* aarch32-tdep.c: Include aarch32-tdep.h.
-	* aarch32-tdep.h: Forward-declare struct target_desc.
-
-2019-11-26  Christian Biesinger  <cbiesinger@google.com>
-
-	* linux-nat.c (detach_one_lwp): Call safe_strerror instead of
-	strerror.
-	* nto-procfs.c (nto_procfs_target::create_inferior): Likewise.
-	* windows-nat.c (windows_nat_target::create_inferior): Likewise.
-
-2019-11-25  Tom de Vries  <tdevries@suse.de>
-
-	* contrib/words.sh: Add -c option.
-
-2019-11-25  Christian Biesinger  <cbiesinger@google.com>
-
-	* solib.c (solib_find_1): Change int to bool.
-	(exec_file_find): Change int to bool.
-	(solib_find): Change int to bool.
-	(solib_read_symbols): Change int to bool.
-	(solib_used): Change int to bool.
-	(solib_add): Change int to bool.
-	(info_sharedlibrary_command): Change int to bool.
-	(solib_contains_address_p): Change int to bool.
-	(solib_keep_data_in_core): Change int to bool.
-	(in_solib_dynsym_resolve_code): Change int to bool.
-	(reload_shared_libraries_1): Change int to bool.
-	(gdb_sysroot_changed): Change int to bool.
-	* solib.h (solib_read_symbols): Change int to bool.
-	(solib_contains_address_p): Change int to bool.
-	(solib_keep_data_in_core): Change int to bool.
-	(in_solib_dynsym_resolve_code): Change int to bool.
-	(libpthread_name_p): Change int to bool.
-
-2019-11-25  Luis Machado  <luis.machado@linaro.org>
-
-	* NEWS (New Commands): Mention "set debug remote-packet-max-chars".
-	* remote.c (REMOTE_DEBUG_MAX_CHAR): Remove.
-	(remote_packet_max_chars): New static global.
-	(show_remote_packet_max_chars): New function.
-	(remote_target::putpkt_binary): Adjust to use new
-	remote_packet_max_chars option.
-	(remote_target::getpkt_or_notif_sane_1): Likewise.
-	(_initialize_remote): Register new remote-packet-max-chars option.
-
-2019-11-24  Simon Marchi  <simon.marchi@efficios.com>
-
-	* m68k-linux-nat.c: Include gdbarch.h.
-
-2019-11-24  Tom Tromey  <tom@tromey.com>
-
-	* symfile.c (read_symbols): Update.
-	* psymtab.c (require_partial_symbols): Change type of "verbose" to
-	bool.
-	(psym_map_symtabs_matching_filename, find_pc_sect_psymtab)
-	(psym_lookup_symbol, psym_find_last_source_symtab)
-	(psym_forget_cached_source_info, psym_print_stats)
-	(psym_expand_symtabs_for_function, psym_expand_all_symtabs)
-	(psym_expand_symtabs_with_fullname, psym_map_symbol_filenames)
-	(psym_map_matching_symbols, psym_expand_symtabs_matching)
-	(psym_find_compunit_symtab_by_address)
-	(maintenance_print_psymbols, maintenance_info_psymtabs)
-	(maintenance_check_psymtabs): Update.
-	* psymtab.h (require_partial_symbols): Change type of "verbose" to
-	bool.
-
-2019-11-22  Tom Tromey  <tom@tromey.com>
-
-	* observable.h: Update comments.
-
-2019-11-22  Tom Tromey  <tromey@adacore.com>
-
-	* ada-tasks.c (ada_task_is_alive): Make parameter const.
-	(print_ada_task_info): Don't try to fetch thread id if task is not
-	alive.
-
-2019-11-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* ada-exp.y: Update.
-	* ada-lang.c (sort_choices): Update.
-	(ada_print_symbol_signature): Update.
-	(resolve_subexp): Update.
-	(ada_parse_renaming): Update.
-	(ada_read_renaming_var_value): Update.
-	(lesseq_defined_than): Update.
-	(remove_extra_symbols): Update.
-	(remove_irrelevant_renamings): Update.
-	(ada_add_block_symbols): Update.
-	(ada_collect_symbol_completion_matches): Update.
-	(ada_is_renaming_symbol): Update.
-	(aggregate_assign_from_choices): Update.
-	(ada_evaluate_subexp): Update.
-	(ada_has_this_exception_support): Update.
-	(ada_is_non_standard_exception_sym): Update.
-	(ada_add_exceptions_from_frame): Update.
-	(ada_add_global_exceptions): Update.
-	(ada_print_subexp): Update.
-	* ax-gdb.c (gen_var_ref): Update.
-	(gen_maybe_namespace_elt): Update.
-	(gen_expr_for_cast): Update.
-	(gen_expr): Update.
-	* block.h: Update.
-	* blockframe.c (find_pc_partial_function): Update.
-	* breakpoint.c (print_breakpoint_location): Update.
-	(update_static_tracepoint): Update.
-	* btrace.c (ftrace_print_function_name): Update.
-	(ftrace_function_switched): Update.
-	* buildsym.c (find_symbol_in_list): Update.
-	* c-exp.y: Update.
-	* c-typeprint.c (c_print_typedef): Update.
-	(c_type_print_template_args): Update.
-	* cli/cli-cmds.c (edit_command): Update.
-	(list_command): Update.
-	(print_sal_location): Update.
-	* coffread.c (patch_opaque_types): Update.
-	(process_coff_symbol): Update.
-	(coff_read_enum_type): Update.
-	* compile/compile-c-symbols.c (c_symbol_substitution_name): Update.
-	(convert_one_symbol): Update.
-	(hash_symname): Update.
-	(eq_symname): Update.
-	* compile/compile-cplus-symbols.c (convert_one_symbol): Update.
-	* compile/compile-cplus-types.c (debug_print_scope): Update.
-	* compile/compile-loc2c.c (do_compile_dwarf_expr_to_c): Update.
-	* compile/compile-object-load.c (get_out_value_type): Update.
-	* cp-namespace.c (cp_scan_for_anonymous_namespaces): Update.
-	(search_symbol_list): Update.
-	(cp_lookup_symbol_imports_or_template): Update.
-	* cp-support.c (overload_list_add_symbol): Update.
-	* ctfread.c (psymtab_to_symtab): Update.
-	* dbxread.c (cp_set_block_scope): Update.
-	* dictionary.c (iter_match_first_hashed): Update.
-	(iter_match_next_hashed): Update.
-	(insert_symbol_hashed): Update.
-	(iter_match_next_linear): Update.
-	* dictionary.h: Update.
-	* dwarf2loc.c (func_get_frame_base_dwarf_block): Update.
-	(locexpr_describe_location_piece): Update.
-	(locexpr_describe_location_1): Update.
-	(locexpr_generate_c_location): Update.
-	(loclist_describe_location): Update.
-	(loclist_generate_c_location): Update.
-	* dwarf2read.c (dw2_debug_names_lookup_symbol): Update.
-	(read_func_scope): Update.
-	(process_enumeration_scope): Update.
-	(new_symbol): Update.
-	(dwarf2_const_value): Update.
-	(dwarf2_symbol_mark_computed): Update.
-	* eval.c (evaluate_funcall): Update.
-	(evaluate_subexp_standard): Update.
-	* expprint.c (print_subexp_standard): Update.
-	(dump_subexp_body_standard): Update.
-	* f-valprint.c (info_common_command_for_block): Update.
-	* findvar.c (get_hosting_frame): Update.
-	(default_read_var_value): Update.
-	* go-lang.c (go_symbol_package_name): Update.
-	* guile/scm-block.c (bkscm_print_block_smob): Update.
-	* guile/scm-symbol.c (syscm_print_symbol_smob): Update.
-	(gdbscm_symbol_name): Update.
-	(gdbscm_symbol_linkage_name): Update.
-	(gdbscm_symbol_print_name): Update.
-	* infcall.c (get_function_name): Update.
-	* infcmd.c (jump_command): Update.
-	(finish_command): Update.
-	* infrun.c (insert_exception_resume_breakpoint): Update.
-	* linespec.c (canonicalize_linespec): Update.
-	(create_sals_line_offset): Update.
-	(convert_linespec_to_sals): Update.
-	(complete_label): Update.
-	(find_label_symbols_in_block): Update.
-	* m2-typeprint.c (m2_print_typedef): Update.
-	* mdebugread.c (mdebug_reg_to_regnum): Update.
-	(parse_symbol): Update.
-	(mylookup_symbol): Update.
-	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
-	(list_args_or_locals): Update.
-	* objc-lang.c (compare_selectors): Update.
-	(info_selectors_command): Update.
-	(compare_classes): Update.
-	(info_classes_command): Update.
-	(find_imps): Update.
-	* p-typeprint.c (pascal_print_typedef): Update.
-	* printcmd.c (build_address_symbolic): Update.
-	(info_address_command): Update.
-	(print_variable_and_value): Update.
-	* python/py-framefilter.c (extract_sym): Update.
-	(py_print_single_arg): Update.
-	* python/py-symbol.c (sympy_str): Update.
-	(sympy_get_name): Update.
-	(sympy_get_linkage_name): Update.
-	* python/python.c (gdbpy_rbreak): Update.
-	* record-btrace.c (btrace_get_bfun_name): Update.
-	(btrace_call_history): Update.
-	* rust-lang.c (rust_print_typedef): Update.
-	* solib-frv.c (frv_fdpic_find_canonical_descriptor): Update.
-	* stabsread.c (stab_reg_to_regnum): Update.
-	(define_symbol): Update.
-	(read_enum_type): Update.
-	(common_block_end): Update.
-	(cleanup_undefined_types_1): Update.
-	(scan_file_globals): Update.
-	* stack.c (print_frame_arg): Update.
-	(print_frame_args): Update.
-	(find_frame_funname): Update.
-	(info_frame_command_core): Update.
-	(iterate_over_block_locals): Update.
-	(print_block_frame_labels): Update.
-	(do_print_variable_and_value): Update.
-	(iterate_over_block_arg_vars): Update.
-	(return_command): Update.
-	* symmisc.c (dump_symtab_1): Update.
-	(print_symbol): Update.
-	* symtab.c (eq_symbol_entry): Update.
-	(symbol_cache_dump): Update.
-	(lookup_language_this): Update.
-	(find_pc_sect_line): Update.
-	(skip_prologue_sal): Update.
-	(symbol_search::compare_search_syms): Update.
-	(treg_matches_sym_type_name): Update.
-	(search_symbols): Update.
-	(print_symbol_info): Update.
-	(rbreak_command): Update.
-	(completion_list_add_symbol): Update.
-	(find_gnu_ifunc): Update.
-	(get_symbol_address): Update.
-	(search_module_symbols): Update.
-	(info_module_subcommand): Update.
-	* symtab.h (SYMBOL_NATURAL_NAME): Remove.
-	(SYMBOL_LINKAGE_NAME): Remove.
-	(SYMBOL_DEMANGLED_NAME): Remove.
-	(SYMBOL_PRINT_NAME): Remove.
-	(SYMBOL_SEARCH_NAME): Remove.
-	* tracepoint.c (set_traceframe_context): Update.
-	(validate_actionline): Update.
-	(collection_list::collect_symbol): Update.
-	(encode_actions_1): Update.
-	(info_scope_command): Update.
-	(print_one_static_tracepoint_marker): Update.
-	* typeprint.c (typedef_hash_table::add_template_parameters): Update.
-	* valops.c (address_of_variable): Update.
-	(find_overload_match): Update.
-	(find_oload_champ): Update.
-
-2019-11-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* ada-lang.c (ada_lookup_simple_minsym): Update.
-	(ada_collect_symbol_completion_matches): Update.
-	* ada-tasks.c (read_atcb): Update.
-	* amd64-windows-tdep.c (amd64_skip_main_prologue): Update.
-	(amd64_windows_skip_trampoline_code): Update.
-	* arm-tdep.c (skip_prologue_function): Update.
-	(arm_skip_stack_protector): Update.
-	* arm-wince-tdep.c (arm_pe_skip_trampoline_code): Update.
-	(arm_wince_skip_main_prologue): Update.
-	* ax-gdb.c (gen_expr): Update.
-	* block.c (call_site_for_pc): Update.
-	* blockframe.c (find_pc_partial_function): Update.
-	* breakpoint.c (set_breakpoint_location_function): Update.
-	* btrace.c (ftrace_print_function_name): Update.
-	(ftrace_function_switched): Update.
-	* c-valprint.c (print_unpacked_pointer): Update.
-	* coffread.c (coff_symfile_read): Update.
-	* compile/compile-c-symbols.c (convert_symbol_bmsym): Update.
-	* compile/compile-cplus-symbols.c (convert_symbol_bmsym): Update.
-	* dwarf-index-write.c (write_psymbols): Update.
-	* dwarf2loc.c (call_site_to_target_addr): Update.
-	(func_verify_no_selftailcall): Update.
-	(tailcall_dump): Update.
-	(call_site_find_chain_1): Update.
-	(dwarf_expr_reg_to_entry_parameter): Update.
-	* elfread.c (elf_gnu_ifunc_record_cache): Update.
-	* eval.c (evaluate_funcall): Update.
-	(evaluate_subexp_standard): Update.
-	(evaluate_subexp_for_sizeof): Update.
-	* expprint.c (print_subexp_standard): Update.
-	(dump_subexp_body_standard): Update.
-	* frame.c (get_prev_frame_always_1): Update.
-	* frv-tdep.c (frv_skip_main_prologue): Update.
-	* gnu-v2-abi.c (gnuv2_value_rtti_type): Update.
-	* gnu-v3-abi.c (gnuv3_rtti_type): Update.
-	(gnuv3_get_typename_from_type_info): Update.
-	(gnuv3_skip_trampoline): Update.
-	* hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Update.
-	* i386-tdep.c (i386_skip_main_prologue): Update.
-	(i386_pe_skip_trampoline_code): Update.
-	* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Update.
-	* infcall.c (get_function_name): Update.
-	* linespec.c (minsym_found): Update.
-	* linux-fork.c (info_checkpoints_command): Update.
-	* m32c-tdep.c (m32c_m16c_address_to_pointer): Update.
-	(m32c_m16c_pointer_to_address): Update.
-	* maint.c (maintenance_translate_address): Update.
-	* minsyms.c (add_minsym_to_hash_table): Update.
-	(add_minsym_to_demangled_hash_table): Update.
-	(lookup_minimal_symbol_mangled): Update.
-	(lookup_minimal_symbol_demangled): Update.
-	(lookup_minimal_symbol_linkage): Update.
-	(lookup_minimal_symbol_text): Update.
-	(lookup_minimal_symbol_by_pc_name): Update.
-	(minimal_symbol_is_less_than): Update.
-	(compact_minimal_symbols): Update.
-	(build_minimal_symbol_hash_tables): Update.
-	(find_solib_trampoline_target): Update.
-	* mips-tdep.c (mips_stub_frame_sniffer): Update.
-	(mips_skip_pic_trampoline_code): Update.
-	* msp430-tdep.c (msp430_skip_trampoline_code): Update.
-	* objc-lang.c (info_selectors_command): Update.
-	(info_classes_command): Update.
-	(find_methods): Update.
-	(find_imps): Update.
-	* p-valprint.c (pascal_val_print): Update.
-	* ppc-linux-tdep.c (powerpc_linux_in_dynsym_resolve_code): Update.
-	* ppc-sysv-tdep.c (convert_code_addr_to_desc_addr): Update.
-	* printcmd.c (build_address_symbolic): Update.
-	(info_symbol_command): Update.
-	* psymtab.c (psymbol_name_matches): Update.
-	(match_partial_symbol): Update.
-	(lookup_partial_symbol): Update.
-	(print_partial_symbols): Update.
-	(sort_pst_symbols): Update.
-	(maintenance_check_psymtabs): Update.
-	* python/py-framefilter.c (py_print_frame): Update.
-	* python/python.c (gdbpy_rbreak): Update.
-	* record-btrace.c (btrace_get_bfun_name): Update.
-	(btrace_call_history): Update.
-	* rs6000-tdep.c (rs6000_skip_main_prologue): Update.
-	(rs6000_skip_trampoline_code): Update.
-	* sol-thread.c (info_cb): Update.
-	* stabsread.c (scan_file_globals): Update.
-	* stack.c (find_frame_funname): Update.
-	(info_frame_command_core): Update.
-	* symmisc.c (dump_msymbols): Update.
-	* symtab.c (symbol_natural_name): Rename to..,
-	(general_symbol_info::natural_name): ...this.
-	(symbol_demangled_name): Rename to...
-	(general_symbol_info::demangled_name): ...this.
-	(symbol_search_name): Rename to...
-	(general_symbol_info::search_name): ...this.
-	(symbol_matches_search_name): Update.
-	(find_pc_sect_line): Update.
-	(skip_prologue_sal): Update.
-	(search_symbols): Update.
-	(print_msymbol_info): Update.
-	(rbreak_command): Update.
-	(completion_list_add_msymbol): Update.
-	(completion_list_objc_symbol): Update.
-	(get_msymbol_address): Update.
-	* symtab.h (struct general_symbol_info): Add member functions
-	natural_name (), linkage_name (), print_name (), demangled_name (),
-	and search_name ().
-	(SYMBOL_NATURAL_NAME): Update.
-	(symbol_natural_name): Move to a member function on general_symbol_info.
-	(SYMBOL_DEMANGLED_NAME): Update.
-	(symbol_demangled_name): Move to a member function on
-	general_symbol_info.
-	(SYMBOL_SEARCH_NAME): Update.
-	(symbol_search_name): Move to a member function on general_symbol_info.
-	(MSYMBOL_NATURAL_NAME): Remove.
-	(MSYMBOL_LINKAGE_NAME): Remove.
-	(MSYMBOL_PRINT_NAME): Remove.
-	(MSYMBOL_DEMANGLED_NAME): Remove.
-	(MSYMBOL_SEARCH_NAME): Remove.
-	* x86-tdep.c (x86_in_indirect_branch_thunk): Update.
-
-2019-11-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.c (create_demangled_names_hash): Use per_bfd->
-	minimal_symbol_count for computing the initial size, if greater
-	than our default size.
-
-2019-11-22  Tom de Vries  <tdevries@suse.de>
-
-	* contrib/words.sh: Improve words extraction.
-
-2019-11-22  Tom de Vries  <tdevries@suse.de>
-
-	* contrib/words.sh: Combine sed invocations.
-
-2019-11-21  Christian Biesinger  <cbiesinger@google.com>
-
-	* Makefile.in: Update.
-	* demangle.c: Rename to...
-	* gdb-demangle.c: ..this.
-	(is_cplus_marker): Change return type to bool.
-	(_initialize_demangler): Rename to...
-	(_initialize_gdb_demangle): ...this.
-	* gdb-demangle.h (is_cplus_marker): Change return type to bool.
-	* symtab.h (demangle): Remove declaration; instead include
-	gdb-demangle.h.
-
-2019-11-21  Tom Tromey  <tromey@adacore.com>
-
-	* gdbsupport/format.c (format_pieces): Parse %I64d.
-	* unittests/format_pieces-selftests.c (test_windows_formats): New
-	function.
-	(run_tests): Call it.
-
-2019-11-21  Peeter Joot  <peeter.joot@lzlabs.com>
-
-	Byte reverse display of variables with DW_END_big, DW_END_little
-	(DW_AT_endianity) dwarf attributes if different than the native
-	byte order.
-	* ada-lang.c (ada_value_binop):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* ada-valprint.c (printstr):
-	(ada_val_print_string):
-	* ada-lang.c (value_pointer):
-	(ada_value_binop):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* c-lang.c (c_get_string):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* c-valprint.c (c_val_print_array):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* cp-valprint.c (cp_print_class_member):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* dwarf2loc.c (rw_pieced_value):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* dwarf2read.c (read_base_type): Handle DW_END_big,
-	DW_END_little
-	* f-lang.c (f_get_encoding):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* findvar.c (default_read_var_value):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* gdbtypes.c (check_types_equal):
-	Require matching TYPE_ENDIANITY_NOT_DEFAULT if set.
-	(recursive_dump_type): Print TYPE_ENDIANITY_BIG,
-	and TYPE_ENDIANITY_LITTLE if set.
-	(type_byte_order): new function.
-	* gdbtypes.h (TYPE_ENDIANITY_NOT_DEFAULT): New macro.
-	(struct main_type) <flag_endianity_not_default>:
-	New field.
-	(type_byte_order): New function.
-	* infcmd.c (default_print_one_register_info):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* p-lang.c (pascal_printstr):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* p-valprint.c (pascal_val_print):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* printcmd.c (print_scalar_formatted):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* solib-darwin.c (darwin_current_sos):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* solib-svr4.c (solib_svr4_r_ldsomap):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* stap-probe.c (stap_modify_semaphore):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* target-float.c (target_float_same_format_p):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* valarith.c (scalar_binop):
-	(value_bit_index):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* valops.c (value_cast):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* valprint.c (generic_emit_char):
-	(generic_printstr):
-	(val_print_string):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* value.c (unpack_long):
-	(unpack_bits_as_long):
-	(unpack_value_bitfield):
-	(modify_field):
-	(pack_long):
-	(pack_unsigned_long):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* findvar.c (unsigned_pointer_to_address):
-	(signed_pointer_to_address):
-	(unsigned_address_to_pointer):
-	(address_to_signed_pointer):
-	(default_read_var_value):
-	(default_value_from_register):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* gnu-v3-abi.c (gnuv3_make_method_ptr):
-	Use type_byte_order instead of gdbarch_byte_order.
-	* riscv-tdep.c (riscv_print_one_register_info):
-	Use type_byte_order instead of gdbarch_byte_order.
-
-2019-11-21  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* top.c (current_ui_gdb_stdout_ptr): Spell out by hand.
-	(current_ui_gdb_stdin_ptr): Likewise.
-	(current_ui_gdb_stderr_ptr): Likewise.
-	(current_ui_gdb_stdlog_ptr): Likewise.
-	(current_ui_current_uiout_ptr): Likewise.
-	(gen_ret_current_ui_field_ptr): Remove.
-
-2019-11-21  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/24956
-	* cli/cli-script.c (execute_control_command): Only switch to
-	INTERP_CONSOLE's ui_out when INTERP_MI is active.
-
-2019-11-19  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_partial_win_by_name): Move from tui-data.c.
-	Now static.  Change type of "name".
-	(tui_set_win_height_command): Don't copy "arg".
-	* tui/tui-data.h (tui_partial_win_by_name): Don't declare.
-	* tui/tui-data.c (tui_partial_win_by_name): Move to tui-win.c.
-
-2019-11-19  Ali Tamur <tamur@google.com>
-
-	* dwarf2read.c (dw2_get_file_names_reader): Replace "if (attr)" with
-	"if (attr != nullptr)".
-	(dwarf2_find_base_address): Likewise.
-	(dwarf2_build_include_psymtabs): Likewise.
-	(read_cutu_die_from_dwo): Likewise.
-	(read_func_scope): Likewise.
-	(read_call_site_scope): Likewise.
-	(dwarf2_get_pc_bounds): Likewise.
-	(dwarf2_record_block_ranges): Likewise.
-	(dwarf2_add_field): Likewise.
-	(dwarf2_add_member_fn): Likewise.
-	(read_structure_type): Likewise.
-	(read_enumeration_type): Likewise.
-	(read_array_type): Likewise.
-	(read_array_order): Likewise.
-	(read_set_type): Likewise.
-	(read_common_block): Likewise.
-	(read_tag_reference_type): Likewise.
-	(read_tag_string_type): Likewise.
-	(read_subroutine_type): Likewise.
-	(read_base_type): Likewise.
-	(read_subrange_type): Likewise.
-	(new_symbol): Likewise.
-	(prepare_one_comp_unit): Likewise.
-
-2019-11-19  Tom Tromey  <tromey@adacore.com>
-
-	* windows-nat.c (windows_nat_target::attach): Include GetLastError
-	result in error when DebugActiveProcess fails.
-
-2019-11-18  Sergio Durigan Junior  <sergiodj@redhat.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	https://bugzilla.redhat.com/show_bug.cgi?id=1765117
-	* target.c (target_stack::push): Call 'unpush' if there's a
-	target on top of the stack.
-
-2019-11-18  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* python/py-block.c (blpy_dealloc): Call tp_free.
-	(blpy_block_syms_dealloc): Likewise.
-	* python/py-finishbreakpoint.c (bpfinishpy_dealloc): Likewise.
-	* python/py-inferior.c (infpy_dealloc): Likewise.
-	* python/py-lazy-string.c (stpy_dealloc): Likewise.
-	* python/py-linetable.c (ltpy_iterator_dealloc): Likewise.
-	* python/py-symbol.c (sympy_dealloc): Likewise.
-	* python/py-symtab.c (stpy_dealloc): Likewise.
-	* python/py-type.c (typy_iterator_dealloc): Likewise.
-
-2019-11-18  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.h (struct symbol) <owner>: Initialize explicitly in the
-	constructor instead of using a class initializer.
-
-2019-11-15  Christian Biesinger  <cbiesinger@google.com>
-
-	* Makefile.in: Replace {posix,mingw}-strerror.c with safe-strerror.c.
-	* configure: Regenerate.
-	* configure.ac: Don't source common.host.
-	* gdbsupport/common.host: Remove.
-	* gdbsupport/mingw-strerror.c: Remove.
-	* gdbsupport/posix-strerror.c: Rename to...
-	* gdbsupport/safe-strerror.c: ...this.
-
-2019-11-15  Christian Biesinger  <cbiesinger@google.com>
-
-	* maint.c (scoped_command_stats::print_time): Use localtime_r
-	instead of localtime (provided through gnulib if necessary).
-	* nat/linux-osdata.c (time_from_time_t): Use ctime_r instead
-	of ctime.
-
-2019-11-15  Christian Biesinger  <cbiesinger@google.com>
-
-	* gdbsupport/common-defs.h: Include time.h before pathmax.h to
-	avoid compile errors.
-
-2019-11-15  Christian Biesinger  <cbiesinger@google.com>
-
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* gdbsupport/common.m4: No longer check for strerror_r.
-	* gdbsupport/posix-strerror.c (safe_strerror): Always call the
-	POSIX version of strerror_r, now that gnulib provides it if
-	necessary.
-
-2019-11-14  Christian Biesinger  <cbiesinger@google.com>
-
-	* README (`configure' options): Update.
-
-2019-11-14  Tom Tromey  <tromey@adacore.com>
-
-	* eval.c (evaluate_subexp_standard) <BINOP_ASSIGN>: Do not pass an
-	expected type for the RHS if the LHS is a convenience variable.
-
-2019-11-14  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* unittests/vec-utils-selftests.c (unordered_remove_tests::obj):
-	Provide explicit default and copy constructor.
-
-2019-11-14  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* python/py-finishbreakpoint.c (gdbpy_breakpoint_created):
-	only call Py_INCREF (newbp) in the bppy_pending_object case.
-
-2019-11-13  Tom Tromey  <tromey@adacore.com>
-
-	PR build/25182:
-	* psympriv.h (partial_symbol): Remove static assert.
-	* symtab.h (general_symbol_info, symbol): Remove static assert.
-
-2019-11-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdbsupport/format.c (format_pieces::format_pieces): Support
-	printf 'z' size modifier.
-	* gdbsupport/format.h (enum argclass): Add size_t_arg.
-	* printcmd.c (ui_printf):  Handle size_t_arg.
-	* ui-out.c (ui_out::vmessage): Likewise.
-	* unittests/format_pieces-selftests.c (test_format_int_sizes): New
-	function.
-	(run_tests): Call test_format_int_sizes.
-
-2019-11-12  Christian Biesinger  <cbiesinger@google.com>
-
-	* ada-exp.y (write_ambiguous_var): Update.
-	* buildsym.c (add_symbol_to_list): Update.
-	* dwarf2read.c (read_variable): Update.
-	(new_symbol): Update.
-	* jit.c (finalize_symtab): Update.
-	* language.c (language_alloc_type_symbol): Update.
-	* symtab.c (fixup_symbol_section): Update.
-	(initialize_objfile_symbol_1): Move code to...
-	(initialize_objfile_symbol): ...here. Remove now-unnecessary memset.
-	(allocate_symbol): Update.
-	(allocate_template_symbol): Update.
-	(get_symbol_address): Update.
-	* symtab.h (struct symbol): Inherit from general_symbol_info instead
-	of having as a field, and add a constructor.
-	(SYMBOL_VALUE): Update.
-	(SYMBOL_VALUE_ADDRESS): Update.
-	(SET_SYMBOL_VALUE_ADDRESS): Update.
-	(SYMBOL_VALUE_BYTES): Update.
-	(SYMBOL_VALUE_COMMON_BLOCK): Update.
-	(SYMBOL_BLOCK_VALUE): Update.
-	(SYMBOL_VALUE_CHAIN): Update.
-	(SYMBOL_LANGUAGE): Update.
-	(SYMBOL_SECTION): Update.
-	(SYMBOL_OBJ_SECTION): Update.
-	(SYMBOL_SET_LANGUAGE): Update.
-	(SYMBOL_SET_LINKAGE_NAME): Update.
-	(SYMBOL_SET_NAMES): Update.
-	(SYMBOL_NATURAL_NAME): Update.
-	(SYMBOL_LINKAGE_NAME): Update.
-	(SYMBOL_DEMANGLED_NAME): Update.
-	(SYMBOL_SEARCH_NAME): Update.
-	(SYMBOL_MATCHES_SEARCH_NAME): Update.
-	(struct symbol): Update.
-	(struct template_symbol): Update.
-	(struct rust_vtable_symbol): Update.
-	* xcoffread.c (SYMBOL_DUP): Update.
-
-2019-11-12  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_layout): Set current_layout.
-	(show_source_disasm_command, show_data)
-	(show_source_or_disasm_and_command): Don't set current_layout.
-
-2019-11-12  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (_initialize_tui_layout): Move to end.
-
-2019-11-12  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (resize_message): New global.
-	(show_tui_resize_message): New function.
-	(tui_async_resize_screen): Print message if requested.
-	(_initialize_tui_win): Add tui-resize-message setting.
-	* NEWS: Add entry for new commands.
-
-2019-11-11  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c (tui_initialize_readline): Add new bindable readline
-	functions.
-
-2019-11-11  Christian Biesinger  <cbiesinger@google.com>
-
-	* nat/linux-osdata.c (user_from_uid): Use getpwuid_r.
-
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* python/py-symbol.c (gdbpy_lookup_static_symbols): New
-	function.
-	* python/python-internal.h (gdbpy_lookup_static_symbols):
-	Declare new function.
-	* python/python.c (python_GdbMethods): Add
-	gdb.lookup_static_symbols method.
-	* NEWS: Mention gdb.lookup_static_symbols.
-
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* python/py-symbol.c (gdbpy_lookup_static_symbol): Lookup in
-	static block of current object file first.  Also fix typo in
-	header comment.
-
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* stack.c (set_last_displayed_sal): Delete.
-	(last_displayed_sal_valid): Delete.
-	(last_displayed_pspace): Delete.
-	(last_displayed_addr): Delete.
-	(last_displayed_symtab): Delete.
-	(last_displayed_line): Delete.
-	(class last_displayed_symtab_info_type): New.
-	(last_displayed_symtab_info): New static global variable.
-	(print_frame_info): Call methods on last_displayed_symtab_info.
-	(clear_last_displayed_sal): Update header comment, and make use of
-	last_displayed_symtab_info.
-	(last_displayed_sal_is_valid): Likewise.
-	(get_last_displayed_pspace): Likewise.
-	(get_last_displayed_addr): Likewise.
-	(get_last_displayed_symtab): Likewise.
-	(get_last_displayed_line): Likewise.
-	(get_last_displayed_sal): Likewise.
-	* stack.h (clear_last_displayed_sal): Update header comment.
-	(last_displayed_sal_is_valid): Likewise.
-	(get_last_displayed_pspace): Likewise.
-	(get_last_displayed_addr): Likewise.
-	(get_last_displayed_symtab): Likewise.
-	(get_last_displayed_line): Likewise.
-	(get_last_displayed_sal): Likewise.
-
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* stack.c (frame_show_address): Convert return type to bool.
-	* stack.h (frame_show_address): Likewise, and update header
-	comment.
-
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add new file to the list.
-	* unittests/vec-utils-selftests.c: New file.
-	* gdbsupport/gdb_vecs.h (unordered_remove): Avoid self move assign.
-
-2019-11-10  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_unhighlight_win): Use can_box.
-	(tui_highlight_win): Likewise.
-	(tui_win_info::check_and_display_highlight_if_needed): Likewise.
-	* tui/tui-data.h (struct tui_win_info) <can_highlight>: Remove.
-	* tui/tui-command.h (struct tui_cmd_window) <tui_cmd_window>:
-	Don't set can_highlight.
-
-2019-11-10  Tom Tromey  <tom@tromey.com>
-
-	* cli/cli-style.h (class cli_style_option) <cli_style_option>:
-	Remove unused declaration.
-
-2019-11-08  Tom Tromey  <tromey@adacore.com>
-
-	* top.c (read_command_file): Update.
-	(command_line_input): Make return type const.
-	* python/py-gdb-readline.c: Update.
-	* linespec.c (decode_line_2): Update.
-	* defs.h (command_line_input): Make return type const.
-	* cli/cli-script.c (read_next_line): Make return type const.
-	* ada-lang.c (get_selections): Update.
-
-2019-11-06  Christian Biesinger  <cbiesinger@google.com>
-
-	* linux-tdep.c (linux_info_proc): Use strtok_r instead of strtok.
-	* mi/mi-main.c (output_cores): Likewise.
-	* nat/linux-osdata.c (linux_xfer_osdata_cpus): Likewise.
-	(linux_xfer_osdata_modules): Likewise.
-	* remote.c (register_remote_support_xml): Likewise.
-	* sparc64-tdep.c (adi_is_addr_mapped): Likewise.
-	* xml-syscall.c (syscall_create_syscall_desc): Likewise.
-
-2019-11-06  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-interp.c: Don't include readline.h.
-	* tui/tui-hooks.c: Don't include readline.h.
-	* symmisc.c: Include tilde.h, not readline.h.
-	* symfile.c: Include tilde.h, not readline.h.
-	* source.c: Include tilde.h, not readline.h.
-	* solib.c: Include tilde.h, not readline.h.
-	* psymtab.c: Include tilde.h, not readline.h.
-	* exec.c: Include tilde.h, not readline.h.
-	* corelow.c: Include tilde.h, not readline.h.
-	* cli/cli-dump.c: Include tilde.h, not readline.h.
-	* cli/cli-cmds.c: Don't include readline.h.
-
-2019-11-05  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-disasm.c (struct tui_asm_line) <addr_size>: New member.
-	(tui_disassemble): Set addr_size.
-	(tui_disasm_window::set_contents): Use addr_size.
-
-2019-11-05  Tom Tromey  <tom@tromey.com>
-
-	* rust-lang.c (rust_language_defn): Update.
-	* python/py-value.c (valpy_string): Call c_get_string.
-	* p-lang.c (pascal_language_defn): Update.
-	* opencl-lang.c (opencl_language_defn): Update.
-	* objc-lang.c (objc_language_defn): Update.
-	* m2-lang.c (m2_language_defn): Update.
-	* language.c (unknown_language_defn, auto_language_defn): Update.
-	(default_get_string): Remove.
-	* guile/scm-value.c (gdbscm_value_to_string): Use c_get_string.
-	* go-lang.c (go_language_defn): Update.
-	* f-lang.c (f_language_defn): Update.
-	* d-lang.c (d_language_defn): Update.
-	* c-lang.c (c_language_defn, cplus_language_defn)
-	(asm_language_defn, minimal_language_defn): Update.
-	* ada-lang.c (ada_language_defn): Update.
-	* language.h (struct language_defn) <la_get_string>: Remove.
-	(LA_GET_STRING): Remove.
-	(default_get_string): Don't declare.
-
-2019-11-05  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-source.h (struct tui_source_window): Inline
-	constructor.  Remove destructor.
-	<style_changed, m_observable>: Move to superclass.
-	* tui/tui-winsource.h (tui_copy_source_line): Declare.
-	(struct tui_source_window_base): Move private members to end.
-	<style_changed, m_observable>: Move from tui_source_window.
-	* tui/tui-winsource.c (tui_copy_source_line): Move from
-	tui-source.c.  Rename from copy_source_line.  Add special handling
-	for negative line number.
-	(tui_source_window_base::style_changed): Move from
-	tui_source_window.
-	(tui_source_window_base): Register observer.
-	(~tui_source_window_base): New.
-	* tui/tui-source.c (copy_source_line): Move to tui-winsource.c;
-	rename.
-	(tui_source_window::set_contents): Use tui_copy_source_line.
-	(tui_source_window::tui_source_window): Move to tui-source.h.
-	(tui_source_window::~tui_source_window): Remove.
-	(tui_source_window::style_changed): Move to superclass.
-	* tui/tui-disasm.c (tui_disassemble): Create string file with
-	styling, when possible.  Add "addr_size" parameter.
-	(tui_disasm_window::set_contents): Use tui_copy_source_line.
-	Don't compute maximum size.
-	(len_without_escapes): New function
-
-2019-11-05  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_element) <line>: Now a
-	std::string.
-	* tui/tui-winsource.c (tui_show_source_line): Update.
-	* tui/tui-source.c (tui_source_window::set_contents): Update.
-	* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
-
-2019-11-05  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.h (gdb_static_assert): Put && operator at the beginning
-	of the line instead of the end.
-
-2019-11-04  Christian Biesinger  <cbiesinger@google.com>
-
-	* psympriv.h: Add static_asserts for sizeof (general_symbol_info)
-	and sizeof (symbol).
-	* symtab.h: Add a static_assert for sizeof (partial_symbol).
-
-2019-11-04  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
-
-	* NEWS (Changes since GDB 8.3): Document Solaris 10 removal.
-	* configure.host: Mark *-*-solaris2.10* obsolete.
-	* configure.tgt: Mark Solaris < 11 obsolete.
-	* MAINTAINERS (Target Instruction Set Architectures) <sparc>:
-	Update target triplet.
-
-2019-11-01  Tom Tromey  <tromey@adacore.com>
-
-	* utils.c (print_sys_errmsg): Simplify.
-
-2019-11-01  Tom Tromey  <tromey@adacore.com>
-
-	* gdbsupport/mingw-strerror.c (safe_strerror): Constify result.
-
-2019-11-01  Christian Biesinger  <cbiesinger@google.com>
-
-	* configure: Regenerate.
-	* configure.ac: Remove check for strerror_r.
-	* gdbsupport/common.m4: Check for strerror_r.
-
-2019-11-01  Luis Machado  <luis.machado@linaro.org>
-
-	PR gdb/25124
-
-	* arm-tdep.c (arm_per_objfile): Rename to ...
-	(arm_per_bfd): ... this.
-	(arm_objfile_data_key): Rename to ...
-	(arm_bfd_data_key): ... this.
-	(arm_find_mapping_symbol): Adjust access to new bfd_key-based
-	data.
-	(arm_record_special_symbol): Likewise.
-
-2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* ada-typeprint.c (ada_print_typedef): Don't print newline at the
-	end.
-	* c-typeprint.c (c_print_typedef): Likewise.
-	* f-typeprint.c (f_print_typedef): Likewise.
-	* m2-typeprint.c (m2_print_typedef): Likewise.
-	* p-typeprint.c (pascal_print_typedef): Likewise.
-	* rust-lang.c (rust_print_typedef): Likewise.
-	* symtab.c (print_symbol_info): Print a newline after calling
-	typedef_print.
-
-2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* symtab.c (info_module_cmdlist): New variable.
-	(info_module_command): New function.
-	(search_module_symbols): New function.
-	(info_module_subcommand): New function.
-	(struct info_modules_var_func_options): New struct.
-	(info_modules_var_func_options_defs): New variable.
-	(make_info_modules_var_func_options_def_group): New function.
-	(info_module_functions_command): New function.
-	(info_module_variables_command): New function.
-	(info_module_var_func_command_completer): New function.
-	(_initialize_symtab): Register new 'info module functions' and
-	'info module variables' commands.
-	* symtab.h (typedef symbol_search_in_module): New typedef.
-	(search_module_symbols): Declare new function.
-	* NEWS: Mention new commands.
-
-2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2read.c (dw2_symtab_iter_next): Handle MODULE_DOMAIN.
-	(dw2_expand_marked_cus): Handle MODULES_DOMAIN.
-	(dw2_debug_names_iterator::next): Handle MODULE_DOMAIN and
-	MODULES_DOMAIN.
-	(scan_partial_symbols): Only create partial module symbols for non
-	declarations.
-	* psymtab.c (recursively_search_psymtabs): Handle MODULE_DOMAIN
-	and MODULES_DOMAIN.
-	* symtab.c (search_domain_name): Likewise.
-	(search_symbols): Likewise.
-	(print_symbol_info): Likewise.
-	(symtab_symbol_info): Likewise.
-	(info_modules_command): New function.
-	(_initialize_symtab): Register 'info modules' command.
-	* symtab.h (enum search_domain): Add MODULES_DOMAIN.
-	* NEWS: Mention new 'info modules' command.
-
-2019-10-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* NEWS: Mention $_gdb_setting, $_gdb_setting_str, $_gdb_maint_setting
-	and $_gdb_maint_setting_str.
-
-2019-10-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* cli/cli-cmds.c (setting_cmd, value_from_setting)
-	(gdb_setting_internal_fn, gdb_maint_setting_internal_fn)
-	(str_value_from_setting, gdb_setting_str_internal_fn)
-	(gdb_maint_setting_str_internal_fn): New functions.
-	(_initialize_cli_cmds): Define the new convenience functions.
-	* gdb/cli/cli-setshow.h (get_setshow_command_value_string): Constify.
-	* gdb/cli/cli-setshow.c (get_setshow_command_value_string): Constify.
-
-2019-10-31  Christian Biesinger  <cbiesinger@google.com>
-
-	* agent.c (set_can_use_agent): When the setting is turned on,
-	look up agent symbols if we don't have them yet.
-	(agent_new_objfile): Don't look up agent symbols when the agent
-	setting is off.
-
-2019-10-31  Christian Biesinger  <cbiesinger@google.com>
-
-	* config.in: Regenerate.
-
-2019-10-31  Christian Biesinger  <cbiesinger@google.com>
-
-	* configure: Regenerate.
-	* configure.ac: Check for strerror_r.
-	* gdbsupport/common-utils.h (safe_strerror): Change return value
-	to const char * and document that this function is now threadsafe.
-	* gdbsupport/posix-strerror.c (safe_strerror): Make buf
-	thread_local and call strerror_r, if available.
-	* utils.c (perror_string): Update.
-	(print_sys_errmsg): Update.
-
-2019-10-31  Luis Machado  <luis.machado@linaro.org>
-
-	* arm-tdep.c (arm_exidx_data_key): Use bfd_key instead of
-	objfile_key.
-	(arm_exidx_new_objfile): Adjust to use objfile->obfd instead of
-	objfile to fetch per-bfd data.
-	(arm_find_exidx_entry): Likewise.
-
-2019-10-31  Christian Biesinger  <cbiesinger@google.com>
-
-	* gdbsupport/agent.c (debug_agent): Change type to bool.
-	(use_agent): Likewise.
-	(all_agent_symbols_look_up): Likewise.
-	(agent_loaded_p): Change return value to bool.
-	(agent_look_up_symbols): Update.
-	(agent_capability_check): Change return value to bool.
-	* gdbsupport/agent.h (agent_loaded_p): Likewise.
-	(debug_agent): Change type to bool.
-	(use_agent): Likewise.
-	(agent_capability_check): Change return value to bool.
-
-2019-10-30  Christian Biesinger  <cbiesinger@google.com>
-
-	* minsyms.c (clear_minimal_symbol_hash_tables): New function.
-	(build_minimal_symbol_hash_tables): Code to clear the table moved
-	to clear_minimal_symbol_hash_tables.
-	(minimal_symbol_reader::install): Call clear_minimal_symbol_hash_tables
-	when needed.
-
-2019-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* infcmd.c: Remove includes.
-	* infrun.c: Remove includes.
-
-2019-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* ada-lang.h (GROW_VECT): Move to ada-lang.c.
-	(grow_vect): Remove declaration.
-	(ada_type_of_array): Remove declaration.
-	(ada_update_initial_language): Remove declaration.
-	(ada_fold_name): Remove declaration.
-	(ada_fill_in_ada_prototype): Remove declaration.
-	(user_select_syms): Remove declaration.
-	(get_selections): Remove declaration.
-	(ada_tag_type): Remove declaration.
-	(ada_value_tag): Remove declaration.
-	(ada_is_others_clause): Remove declaration.
-	(ada_in_variant): Remove declaration.
-	(ada_value_struct_elt): Remove declaration.
-	(ada_attribute_name): Remove declaration.
-	(ada_system_address_type): Remove declaration.
-	* ada-lang.c (ada_watch_location_expression): Make static.
-	(GROW_VECT): Move here from ada-lang.h.
-	(grow_vect): Make static.
-	(ada_update_initial_language): Make static.
-	(ada_fold_name): Make static.
-	(ada_type_of_array): Make static.
-	(encoded_ordered_before): Move up.
-	(sort_choices): Move up.
-	(print_signatures): Move up.
-	(ada_print_symbol_signature): Move up.
-	(get_selections): Move up and make static.
-	(user_select_syms): Move up and make static.
-	(ada_value_struct_elt): Move up and make static.
-	(ada_tag_type): Make static.
-	(ada_value_tag): Make static.
-	(ada_is_others_clause): Make static.
-	(ada_in_variant): Make static.
-	(ada_attribute_name): Make static.
-
-2019-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* ada-lang.c: Remove includes.
-	* ada-typeprint.c: Remove includes.
-	* ada-valprint.c: Remove includes.
-
-2019-10-29  Simon Marchi  <simon.marchi@efficios.com>
-
-	* addrmap.c: Add static assertions of type size, moved from
-	_initialize_addrmap.
-	(_initialize_addrmap): Remove.
-
-2019-10-29  Christian Biesinger  <cbiesinger@google.com>
-
-	* coffread.c (record_minimal_symbol): Update.
-	(process_coff_symbol): Update.
-	* dbxread.c (read_dbx_symtab): Update.
-	* dwarf2read.c (add_partial_symbol): Update.
-	(fixup_go_packaging): Update.
-	(load_partial_dies): Update.
-	(new_symbol): Update.
-	* elfread.c (record_minimal_symbol): Change signature to use
-	gdb::string_view instead of name+len.
-	(elf_symtab_read): Update.
-	(elf_rel_plt_read): Update.
-	* mdebugread.c (parse_partial_symbols): Update.
-	(handle_psymbol_enumerators): Update.
-	(new_symbol): Update.
-	* minsyms.c (minimal_symbol_reader::record_full): Change signature
-	to use gdb::string_view instead of name+len.
-	* minsyms.h (class minimal_symbol_reader) <record_full>: Likewise.
-	* psympriv.h (add_psymbol_to_list): Likewise.
-	* psymtab.c (add_psymbol_to_bcache): Likewise.
-	(add_psymbol_to_list): Likewise.
-	* stabsread.c (define_symbol): Update.
-	* symtab.c (symbol_set_names): Change signature to use gdb::string_view.
-	* symtab.h (SYMBOL_SET_NAMES): Likewise.
-	(symbol_set_names): Likewise.
-	* xcoffread.c (scan_xcoff_symtab): Update.
-
-2019-10-29  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.h (symbol_set_names): Document that copy_name must be
-	set to true for non-nullterminated strings.
-	* symtab.c (symbol_set_names): Only make a nullterminated copy of
-	linkage_name if the entry was not found and we need to demangle.
-
-2019-10-29  Christian Biesinger  <cbiesinger@google.com>
-
-	* Makefile.in (HFILES_NO_SRCDIR): Add gdb_binary_search.h.
-	* dwarf2-frame.c (bsearch_fde_cmp): Update.
-	(dwarf2_frame_find_fde): Replace bsearch with gdb::binary_search.
-	* gdbsupport/gdb_binary_search.h: New file.
-
-2019-10-29  Christian Biesinger  <cbiesinger@google.com>
-
-	* NEWS: Mention new --with-system-gdbinit-dir option.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* configure.ac: Add new option --with-system-gdbinit-dir.
-	* extension.c (get_ext_lang_of_file): Return extension_language_gdb
-	for a ".gdb" suffix.
-	* main.c (get_init_files): Change system_gdbinit argument to
-	a vector and return the files in SYSTEM_GDBINIT_DIR in
-	addition to SYSTEM_GDBINIT.
-	(captured_main_1): Update.
-	(print_gdb_help): Update.
-	* top.c (print_gdb_configuration): Also print the value of
-	SYSTEM_GDBINIT_DIR.
-
-2019-10-28  Christian Biesinger  <cbiesinger@google.com>
-
-	* gdbsupport/common-utils.h (startswith): Add an overloaded version
-	that takes gdb::string_view arguments.
-
-2019-10-26  Tom de Vries  <tdevries@suse.de>
-
-	* aarch64-linux-tdep.c: Fix typos in comments.
-	* aarch64-tdep.c: Same.
-	* ada-lang.c: Same.
-	* amd64-nat.c: Same.
-	* arc-tdep.c: Same.
-	* arch/aarch64-insn.c: Same.
-	* block.c: Same.
-	* breakpoint.h: Same.
-	* btrace.h: Same.
-	* c-varobj.c: Same.
-	* cli/cli-decode.c: Same.
-	* cli/cli-script.c: Same.
-	* cli/cli-utils.h: Same.
-	* coff-pe-read.c: Same.
-	* coffread.c: Same.
-	* compile/compile-cplus-symbols.c: Same.
-	* compile/compile-object-run.c: Same.
-	* completer.c: Same.
-	* corelow.c: Same.
-	* cp-support.c: Same.
-	* demangle.c: Same.
-	* dwarf-index-write.c: Same.
-	* dwarf2-frame.c: Same.
-	* dwarf2-frame.h: Same.
-	* eval.c: Same.
-	* frame-base.h: Same.
-	* frame.h: Same.
-	* gdbcmd.h: Same.
-	* gdbtypes.h: Same.
-	* gnu-nat.c: Same.
-	* guile/scm-objfile.c: Same.
-	* i386-tdep.c: Same.
-	* i386-tdep.h: Same.
-	* infcall.c: Same.
-	* infcall.h: Same.
-	* linux-nat.c: Same.
-	* m68k-tdep.c: Same.
-	* macroexp.c: Same.
-	* memattr.c: Same.
-	* mi/mi-cmd-disas.c: Same.
-	* mi/mi-getopt.h: Same.
-	* mi/mi-main.c: Same.
-	* minsyms.c: Same.
-	* nat/aarch64-sve-linux-sigcontext.h: Same.
-	* objfiles.h: Same.
-	* ppc-linux-nat.c: Same.
-	* ppc-linux-tdep.c: Same.
-	* ppc-tdep.h: Same.
-	* progspace.h: Same.
-	* prologue-value.h: Same.
-	* python/py-evtregistry.c: Same.
-	* python/py-instruction.h: Same.
-	* record-btrace.c: Same.
-	* record-full.c: Same.
-	* remote.c: Same.
-	* rs6000-tdep.c: Same.
-	* ser-tcp.c: Same.
-	* sol-thread.c: Same.
-	* sparc-sol2-tdep.c: Same.
-	* sparc64-tdep.c: Same.
-	* stabsread.c: Same.
-	* symfile.c: Same.
-	* symtab.h: Same.
-	* target.c: Same.
-	* tracepoint.c: Same.
-	* tui/tui-data.h: Same.
-	* tui/tui-io.c: Same.
-	* tui/tui-win.c: Same.
-	* tui/tui.c: Same.
-	* unittests/rsp-low-selftests.c: Same.
-	* user-regs.h: Same.
-	* utils.c: Same.
-	* utils.h: Same.
-	* valarith.c: Same.
-	* valops.c: Same.
-	* valprint.c: Same.
-	* valprint.h: Same.
-	* value.c: Same.
-	* value.h: Same.
-	* varobj.c: Same.
-	* x86-nat.h: Same.
-	* xtensa-tdep.c: Same.
-
-2019-10-25  Ali Tamur <tamur@google.com>
-
-	* charset.c (find_charset_names): Reflect API change.
-
-2019-10-25  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.c (struct demangled_name_entry): Change demangled name
-	to a unique_xmalloc_ptr<char>, now that we don't allocate it as
-	part of the struct anymore.
-	(symbol_set_names): No longer obstack allocate + copy the demangled
-	name, just store the allocated name from bfd.
-
-2019-10-25  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2-frame.c (dwarf2_cie_table): Now a typedef.
-	(bsearch_cie_cmp, add_cie): Remove.
-	(find_cie): Reimplement.
-	(decode_frame_entry_1, decode_frame_entry): Change type.  Update.
-	(dwarf2_build_frame_info): Update.
-
-2019-10-24  H.J. Lu  <hongjiu.lu@intel.com>
-
-	PR gdb/25126
-	* symfile.c (reread_symbols): Call forget_cached_source_info to
-	clear the stale source cache.
-
-2019-10-24  Christian Biesinger  <cbiesinger@google.com>
-
-	* configure: Regenerate.
-	* configure.ac: Remove code that sets python_has_threads.
-
-2019-10-24  Christian Biesinger  <cbiesinger@google.com>
-
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* configure.ac: Remove the code that uses sed to get the python
-	version and defines HAVE_LIBPYTHON2_6 / HAVE_LIBPYTHON2_7.
-
-2019-10-24  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* python/py-progspace.c (pspy_block_for_pc): Return None for all
-	error paths.
-
-2019-10-23  Tom Tromey  <tom@tromey.com>
-
-	* arc-tdep.c: Remove ".." from include.
-	* frv-tdep.c: Remove ".." from include.
-	* lm32-tdep.c: Remove ".." from include.
-	* microblaze-tdep.c: Remove ".." from include.
-	* or1k-tdep.h: Remove ".." from include.
-	* s12z-tdep.c: Remove ".." from include.
-	* Makefile.in (OPCODES_CFLAGS): Add comment.
-	(TOP_CFLAGS): New variable.
-	(INTERNAL_CFLAGS_BASE): Add TOP_CFLAGS.
-
-2019-10-23  Tom Tromey  <tom@tromey.com>
-
-	* Makefile.in (READLINE_DIR): Update.
-
-2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
-
-	* infcall.c (call_function_by_hand_dummy): Fix the function
-	comment.  And extract out a code section into...
-	(reserve_stack_space): ...this new function.
-
-2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
-
-	* infcall.c (value_arg_coerce): Remove an unused parameter.
-	(call_function_by_hand_dummy): Update the call to
-	'value_arg_coerce'.
-
-2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
-
-	* infcall.c (call_function_by_hand_dummy): Refactor.
-
-2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
-
-	* MAINTAINERS (Write After Approval): Add Tankut Baris Aktemur.
-
-2019-10-23  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-	* configure.ac: Don't check for sigprocmask.
-	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for sigprocmask.
-
-2019-10-23  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-	* acinclude.m4: Use m4_include, not sinclude.
-
-2019-10-23  Tom de Vries  <tdevries@suse.de>
-
-	PR breakpoints/24687
-	* symtab.c (iterate_over_some_symtabs): Apply gdb_realpath on fullname.
-
-2019-10-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.c (struct demangled_name_entry) <language>: Change from
-	bitfield to regular variable.
-
-2019-10-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.c (struct demangled_name_entry): Add a constructor.
-	(free_demangled_name_entry): New function to call the destructor
-	for demangled_name_entry.
-	(create_demangled_names_hash): Pass free_demangled_name_entry to
-	htab_create_alloc.
-	(symbol_set_names): Call placement new for demangled_name_entry.
-	* utils.c: No longer include xxhash.h here, now that fast_hash
-	is inlined in the header.
-	* utils.h: Instead, include it here.
-
-2019-10-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* Makefile.in: Link with libxxhash.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* configure.ac: Search for libxxhash.
-	* utils.c (fast_hash): Use xxhash if present.
-
-2019-10-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* utils.h (fast_hash): New function.
-	* symtab.c (hash_demangled_name_entry): Call new function
-	fast_hash.
-
-2019-10-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.c (struct demangled_name_entry): Change type of mangled
-	to gdb::string_view. Also adds a constructor that takes the
-	mangled name.
-	(hash_demangled_name_entry): Update.
-	(eq_demangled_name_entry): Update.
-	(free_demangled_name_entry): New function to call the destructor
-	now that this is not a POD anymore.
-	(create_demangled_names_hash): Pass free_demangled_name_entry to
-	htab_create_alloc.
-	(symbol_set_names): Update.
-
-2019-10-21  Ali Tamur  <tamu@google.com>
-
-	* dwarf2read.c (dir_index): Change type.
-	(file_name_index): Likewise.
-	(line_header::include_dir_at): Change comment and implementation on
-	whether it is DWARF 5.
-	(line_header::is_valid_file_index): New function.
-	(line_header::file_name_at): Change comment and implementation on
-	whether it is DWARF 5.
-	(line_header::file_names): Change to private field renamed as
-	m_file_names and introduce a new accessor method.
-	(line_header::file_names_size): New method.
-	(line_header::include_dirs): Change to private field and rename as
-	m_include_dirs.
-	(dw2_get_file_names_reader): Define local var at a smaller scope and
-	reflect API change.
-	(dwarf2_cu::setup_type_unit_groups): Reflect API change.
-	(process_structure_scope): Likewise.
-	(line_header::add_include_dir): Change message and reflect renaming.
-	(line_header::add_file_name): Likewise.
-	(read_formatted_entries): Handle DW_FORM_data16.
-	(dwarf_decode_line_header): Fix line header length calculation.
-	(psymtab_include_file_name): Change comment and API.
-	(lnp_state_machine::m_file): Update comment and reflect type change.
-	(lnp_state_machine::record_line): Reflect type change.
-	(dwarf_decode_lines): Reflect API change.
-	(file_file_name): Likewise.
-	(file_full_name): Likewise.
-
-2019-10-21  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* objfiles.c (sort_cmp): Ensure that !(a < a) holds true.
-
-2019-10-21  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_exec_info_content): Remove typedef.
-
-2019-10-21  Tom Tromey  <tom@tromey.com>
-
-	* configure.ac (nm.h): Conditionally create nm.h link.  Subst
-	NM_H.   Use AC_CONFIG_LINKS.
-	* configure: Rebuild.
-	* Makefile.in (NM_H): New variable.
-	(generated_files): Add NM_H.  Remove gcore.
-	(nm.h, stamp-nmh): New targets.
-
-2019-10-20  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (unlink_objfile, put_objfile_before): Don't declare.
-	* objfiles.c (unlink_objfile): Move earlier.  Now static.  Remove
-	obsolete comment.
-	(put_objfile_before): Now static.
-
-2019-10-19  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* gdbsupport/common-utils.h (startswith): Change return type to
-	bool.
-
-2019-10-19  Christian Biesinger  <cbiesinger@google.com>
-
-	* bcache.c (bcache::print_statistics): Use std::sort instead of qsort.
-	* breakpoint.c (bp_locations_compare): Rename to...
-	(bp_location_is_less_than): ...this, and change to std::sort semantics.
-	(update_global_location_list): Use std::sort instead of qsort.
-	* buildsym.c (compare_line_numbers): Rename to...
-	(lte_is_less_than): ...this, and change to std::sort semantics.
-	(buildsym_compunit::end_symtab_with_blockvector): Use std::sort
-	instead of qsort.
-	* disasm.c (compare_lines): Rename to...
-	(line_is_less_than): ...this, and change to std::sort semantics.
-	(do_mixed_source_and_assembly_deprecated): Call std::sort instead
-	of qsort.
-	* dwarf2-frame.c (qsort_fde_cmp): Rename to...
-	(fde_is_less_than): ...this, and change to std::sort semantics.
-	(dwarf2_build_frame_info): Call std::sort instead of qsort.
-	* mdebugread.c (compare_blocks):
-	(block_is_less_than): ...this, and change to std::sort semantics.
-	(sort_blocks): Call std::sort instead of qsort.
-	* objfiles.c (qsort_cmp): Rename to...
-	(sort_cmp): ...this, and change to std::sort semantics.
-	(update_section_map): Call std::sort instead of qsort.
-	* remote.c (compare_pnums): Remove.
-	(map_regcache_remote_table): Call std::sort instead of qsort.
-	* utils.c (compare_positive_ints): Remove.
-	* utils.h (compare_positive_ints): Remove.
-	* xcoffread.c (compare_lte): Remove.
-	(arrange_linetable): Call std::sort instead of qsort.
-
-2019-10-19  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* symfile.c (init_entry_point_info): Fix typo.
-	* i386-darwin-tdep.c (darwin_dwarf_signal_frame_p): Fix typo.
-
-2019-10-18  Tom de Vries  <tdevries@suse.de>
-
-	* aarch64-tdep.c: Fix typos in comments.
-	* ada-lang.c: Same.
-	* ada-tasks.c: Same.
-	* alpha-tdep.c: Same.
-	* alpha-tdep.h: Same.
-	* amd64-nat.c: Same.
-	* amd64-windows-tdep.c: Same.
-	* arc-tdep.c: Same.
-	* arc-tdep.h: Same.
-	* arch-utils.c: Same.
-	* arm-nbsd-tdep.c: Same.
-	* arm-tdep.c: Same.
-	* ax-gdb.c: Same.
-	* blockframe.c: Same.
-	* btrace.c: Same.
-	* c-varobj.c: Same.
-	* coff-pe-read.c: Same.
-	* coffread.c: Same.
-	* cris-tdep.c: Same.
-	* darwin-nat.c: Same.
-	* dbxread.c: Same.
-	* dcache.c: Same.
-	* disasm.c: Same.
-	* dtrace-probe.c: Same.
-	* dwarf-index-write.c: Same.
-	* dwarf2-frame-tailcall.c: Same.
-	* dwarf2-frame.c: Same.
-	* dwarf2read.c: Same.
-	* eval.c: Same.
-	* exceptions.c: Same.
-	* fbsd-tdep.c: Same.
-	* findvar.c: Same.
-	* frame.c: Same.
-	* frv-tdep.c: Same.
-	* gnu-v3-abi.c: Same.
-	* go32-nat.c: Same.
-	* h8300-tdep.c: Same.
-	* hppa-tdep.c: Same.
-	* i386-linux-tdep.c: Same.
-	* i386-tdep.c: Same.
-	* ia64-libunwind-tdep.c: Same.
-	* ia64-tdep.c: Same.
-	* infcmd.c: Same.
-	* infrun.c: Same.
-	* linespec.c: Same.
-	* linux-nat.c: Same.
-	* linux-thread-db.c: Same.
-	* machoread.c: Same.
-	* mdebugread.c: Same.
-	* mep-tdep.c: Same.
-	* mn10300-tdep.c: Same.
-	* namespace.c: Same.
-	* objfiles.c: Same.
-	* opencl-lang.c: Same.
-	* or1k-tdep.c: Same.
-	* osabi.c: Same.
-	* ppc-linux-nat.c: Same.
-	* ppc-linux-tdep.c: Same.
-	* ppc-sysv-tdep.c: Same.
-	* printcmd.c: Same.
-	* procfs.c: Same.
-	* record-btrace.c: Same.
-	* record-full.c: Same.
-	* remote-fileio.c: Same.
-	* remote.c: Same.
-	* rs6000-tdep.c: Same.
-	* s12z-tdep.c: Same.
-	* score-tdep.c: Same.
-	* ser-base.c: Same.
-	* ser-go32.c: Same.
-	* skip.c: Same.
-	* sol-thread.c: Same.
-	* solib-svr4.c: Same.
-	* solib.c: Same.
-	* source.c: Same.
-	* sparc-nat.c: Same.
-	* sparc-sol2-tdep.c: Same.
-	* sparc-tdep.c: Same.
-	* sparc64-tdep.c: Same.
-	* stabsread.c: Same.
-	* stack.c: Same.
-	* symfile.c: Same.
-	* symtab.c: Same.
-	* target-descriptions.c: Same.
-	* target-float.c: Same.
-	* thread.c: Same.
-	* utils.c: Same.
-	* valops.c: Same.
-	* valprint.c: Same.
-	* value.c: Same.
-	* varobj.c: Same.
-	* windows-nat.c: Same.
-	* xcoffread.c: Same.
-	* xstormy16-tdep.c: Same.
-	* xtensa-tdep.c: Same.
-
-2019-10-17  Tom Tromey  <tromey@adacore.com>
-
-	* configure: Rebuild.
-	* configure.ac: Use AC_CONFIG_HEADERS.  Create stamp-h there, not
-	in AC_CONFIG_FILES invocation.
-	* Makefile.in (Makefile, data-directory/Makefile, stamp-h): Use
-	new-style config.status invocation.
-
-2019-10-17  Tom de Vries  <tdevries@suse.de>
-
-	* arm-nbsd-nat.c: Fix typos in comments.
-	* arm-tdep.c: Same.
-	* darwin-nat-info.c: Same.
-	* dwarf2read.c: Same.
-	* elfread.c: Same.
-	* event-top.c: Same.
-	* findvar.c: Same.
-	* gdbtypes.c: Same.
-	* hppa-tdep.c: Same.
-	* i386-tdep.c: Same.
-	* jit.c: Same.
-	* main.c: Same.
-	* mdebugread.c: Same.
-	* moxie-tdep.c: Same.
-	* nto-procfs.c: Same.
-	* osabi.c: Same.
-	* ppc-linux-tdep.c: Same.
-	* remote.c: Same.
-	* riscv-tdep.c: Same.
-	* s390-tdep.c: Same.
-	* sh-tdep.c: Same.
-	* sparc-linux-tdep.c: Same.
-	* sparc-nat.c: Same.
-	* stack.c: Same.
-	* target-descriptions.c: Same.
-	* top.c: Same.
-	* varobj.c: Same.
-
-2019-10-16  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (struct objfile) <original_name>: Now const.
-
-2019-10-16  Christian Biesinger  <cbiesinger@google.com>
-
-	* gdbsupport/gdb_setjmp.h (SIGSETJMP): Allow passing in the value to
-	pass on to sigsetjmp's second argument.
-	* cp-support.c (gdb_demangle): Unblock SIGSEGV if we caught a crash.
-
-2019-10-16  Keith Seitz  <keiths@redhat.com>
-
-	PR gdb/23567
-	* dwarf2read.c (dwarf2_per_objfile::locate_sections): Discard
-	sections whose size is greater than the file size.
-
-2019-10-16  Jim Wilson  <jimw@sifive.com>
-
-	* riscv-tdep.c (riscv_gcc_target_options): New.
-	(riscv_gnu_triplet_regexp): New.
-	(riscv_gdbarch_init): Call set_gdbarch_gcc_triplet_options and
-	set_gdbarch_gnu_triplet_regexp.
-
-2019-10-16  Christian Biesinger  <cbiesinger@google.com>
-
-	* Makefile.in: Add xml-builtin.h.
-	* features/feature_to_c.sh: Add an include for xml-builtin.h
-	to ensure that the compiler checks that the types match.
-	* xml-builtin.h: New file.
-	* xml-support.c (fetch_xml_builtin): Add missing const.
-	* xml-support.h: Remove declaration of xml_builtins.
-
-2019-10-16  Tom de Vries  <tdevries@suse.de>
-
-	PR tdep/25096
-	* amd64-tdep.c (amd64_classify_aggregate_field): Factor out of ...
-	(amd64_classify_aggregate): ... here.
-	(amd64_classify_aggregate_field): Handled fiels of nested structs
-	recursively.
-
-2019-10-16  Tom de Vries  <tdevries@suse.de>
-
-	PR tdep/24104
-	* amd64-tdep.c (amd64_push_arguments): Handle AMD64_NO_CLASS in loop
-	that handles 'theclass'.
-
-2019-10-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* linespec.c (decode_digits_ordinary): Update comment.
-	* make-target-delegates: No longer need to handle VEC case.
-	* memrange.c (normalize_mem_ranges): Update comment.
-	* namespace.c (add_using_directive): Update comment.
-	* objc-lang.c (uniquify_strings): Update comment.
-	* ppc-linux-nat.c (struct thread_points): Update comment.
-	* probe.h (find_probes_in_objfile): Update comment.
-	* target.h (enum flash_preserve_mode): Update comment.
-	* varobj.c (varobj_restrict_range): Update comment.
-	* varobj.h (varobj_list_children): Update comment.
-
-2019-10-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* Makefile.in: Remove references to vec.h and vec.c.
-	* aarch64-tdep.c: No longer include vec.h.
-	* ada-lang.c: Likewise.
-	* ada-lang.h: Likewise.
-	* arm-tdep.c: Likewise.
-	* ax.h: Likewise.
-	* breakpoint.h: Likewise.
-	* charset.c: Likewise.
-	* cp-support.h: Likewise.
-	* dtrace-probe.c: Likewise.
-	* dwarf2read.c: Likewise.
-	* extension.h: Likewise.
-	* gdb_bfd.c: Likewise.
-	* gdbsupport/gdb_vecs.h: Likewise.
-	* gdbsupport/vec.c: Remove.
-	* gdbsupport/vec.h: Remove.
-	* gdbthread.h: Likewise.
-	* guile/scm-type.c: Likewise.
-	* inline-frame.c: Likewise.
-	* machoread.c: Likewise.
-	* memattr.c: Likewise.
-	* memrange.h: Likewise.
-	* namespace.h: Likewise.
-	* nat/linux-btrace.h: Likewise.
-	* osdata.c: Likewise.
-	* parser-defs.h: Likewise.
-	* progspace.h: Likewise.
-	* python/py-type.c: Likewise.
-	* record-btrace.c: Likewise.
-	* rust-exp.y: Likewise.
-	* solib-target.c: Likewise.
-	* stap-probe.c: Likewise.
-	* target-descriptions.c: Likewise.
-	* target-memory.c: Likewise.
-	* target.h: Likewise.
-	* varobj.c: Likewise.
-	* varobj.h: Likewise.
-	* xml-support.h: Likewise.
-
-2019-10-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/dwarf2read.c (dwarf2_per_objfile::~dwarf2_per_objfile):
-	Update for new std::vector based implementation.
-	(process_psymtab_comp_unit_reader): Likewise.
-	(scan_partial_symbols): Likewise.
-	(recursively_compute_inclusions): Likewise.
-	(compute_compunit_symtab_includes): Likewise.
-	(process_imported_unit_die): Likewise.
-	(queue_and_load_dwo_tu): Likewise.
-	(follow_die_sig_1): Likewise.
-	* gdb/dwarf2read.h: Remove DEF_VEC_P.
-	(typedef dwarf2_per_cu_ptr): Remove.
-	(struct dwarf2_per_cu_data) <imported_symtabs_empty>: New
-	function.
-	(struct dwarf2_per_cu_data) <imported_symtabs_push>: New function.
-	(struct dwarf2_per_cu_data) <imported_symtabs_size>: New function.
-	(struct dwarf2_per_cu_data) <imported_symtabs_free>: New function.
-	(struct dwarf2_per_cu_data) <imported_symtabs>: Change to
-	std::vector.
-
-2019-10-15  Tom Tromey  <tromey@adacore.com>
-
-	* windows-nat.c (windows_nat_target::resume): Use %x when logging
-	TID.
-
-2019-10-15  Tom Tromey  <tromey@adacore.com>
-
-	* windows-nat.c (windows_nat_target::fetch_registers)
-	(windows_nat_target::store_registers): Rename "pid" to "tid".
-
-2019-10-15  Tom Tromey  <tromey@adacore.com>
-
-	* gdbarch.h, gdbarch.c: Rebuild.
-	* gdbarch.sh (gcc_target_options): Change return type to
-	std::string.
-	* compile/compile.c (get_args): Update.
-	* nios2-tdep.c (nios2_gcc_target_options): Return std::string.
-	* arm-linux-tdep.c (arm_linux_gcc_target_options): Return
-	std::string.
-	* aarch64-linux-tdep.c (aarch64_linux_gcc_target_options): Return
-	std::string.
-	* arch-utils.c (default_gcc_target_options): Return std::string.
-	* arch-utils.h (default_gcc_target_options): Return std::string.
-	* s390-tdep.c (s390_gcc_target_options): Return std::string.
-
-2019-10-15  Christian Biesinger  <cbiesinger@google.com>
-
-	* breakpoint.c (breakpoint_chain): Make static.
-	* tui/tui-winsource.c: Call iterate_over_breakpoints instead
-	of accessing breakpoint_chain.
-
-2019-10-15  Christian Biesinger  <cbiesinger@google.com>
-
-	* breakpoint.c (iterate_over_breakpoints): Change function pointer
-	to a gdb::function_view and return value to bool.
-	* breakpoint.h (iterate_over_breakpoints): Likewise.
-	* dummy-frame.c (pop_dummy_frame_bpt): Update.
-	(pop_dummy_frame): Update.
-	* guile/scm-breakpoint.c (bpscm_build_bp_list): Update.
-	(gdbscm_breakpoints): Update.
-	* python/py-breakpoint.c (build_bp_list): Update.
-	(gdbpy_breakpoints): Update.
-	* python/py-finishbreakpoint.c (bpfinishpy_detect_out_scope_cb):
-	Update.
-	(bpfinishpy_handle_stop): Update.
-	(bpfinishpy_handle_exit): Update.
-	* solib-svr4.c (svr4_update_solib_event_breakpoint): Update.
-	(svr4_update_solib_event_breakpoints): Update.
-
-2019-10-15  Andreas Arnez  <arnez@linux.ibm.com>
-
-	* s390-tdep.c (s390_effective_inner_type): Ignore static fields
-	when unwrapping single-field structs.
-
-2019-10-14  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* dwarf2read.c: Remove includes.
-
-2019-10-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* ui-out.c (ui_out::call_do_message): Silence
-	-Wformat-nonliteral warning.
-
-2019-10-12  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* breakpoint.c: Remove some includes: continuations.h, skip.h,
-	mi/mi-main.h, readline/readline.h, readline/history.h.  Add
-	include: readline/tilde.h.
-
-2019-10-12  Christian Biesinger  <cbiesinger@google.com>
-
-	* remote.c (remote_target::get_trace_status): Remove declaration of
-	trace_regblock_size.
-
-2019-10-12  Christian Biesinger  <cbiesinger@google.com>
-
-	* cli/cli-cmds.c (max_user_call_depth): Move comment to header.
-	(show_user): Remove declaration of cmdlist.
-	* cli/cli-cmds.h (max_user_call_depth): Declare.
-	* cli/cli-script.c (execute_user_command): Remove declaration
-	of max_user_call_depth.
-
-2019-10-11  Jim Wilson  <jimw@sifive.com>
-
-	* gdbsupport/print-utils.h (pulongest): Fix comment.
-	(plongest): Likewise.
-	(phex): Add missing comment, mention leading zeros.
-	(phex_nz): Add mention of no leading zeros to comment.
-
-	* riscv-tdep.c (riscv_push_dummy_code): Change %lld to %s and use
-	plongest instead of unsigned long long cast.
-
-2019-10-10  Christian Biesinger  <cbiesinger@google.com>
-
-	* main.c (captured_main_1): Include gdbtk.h and remove declarations
-	for external_editor_command and gdbtk_test.
-
-2019-10-10  Christian Biesinger  <cbiesinger@google.com>
-
-	* mi/mi-cmd-var.c (varobjdebug): Remove declaration.
-	* varobj.c (varobjdebug): Move comment to...
-	* varobj.h (varobjdebug): ...here, and declare.
-
-2019-10-09  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_data_window::show_registers): Don't call
-	erase_data_content.
-
-2019-10-09  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h (tui_delete_win): Don't declare.
-	* tui/tui-stack.c (tui_locator_window::rerender): Update.
-	* tui/tui-command.c (tui_cmd_window::resize)
-	(tui_refresh_cmd_win): Update.
-	* tui/tui-win.c (tui_resize_all, tui_set_focus_command): Update.
-	* tui/tui.c (tui_rl_other_window, tui_enable): Update.
-	* tui/tui-data.c (~tui_gen_win_info): Remove.
-	* tui/tui-layout.c (tui_gen_win_info::resize): Update.
-	* tui/tui-io.c (update_cmdwin_start_line, tui_putc, tui_puts)
-	(tui_redisplay_readline, tui_mld_flush)
-	(tui_mld_erase_entire_line, tui_mld_getc, tui_getc): Update.
-	* tui/tui-regs.c (tui_data_window::delete_data_content_windows)
-	(tui_data_window::erase_data_content)
-	(tui_data_item_window::rerender)
-	(tui_data_item_window::refresh_window): Update.
-	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window)
-	(box_win, tui_gen_win_info::make_window)
-	(tui_gen_win_info::make_visible): Update.
-	(tui_delete_win): Remove.
-	* tui/tui-winsource.c
-	(tui_source_window_base::do_erase_source_content): Update.
-	(tui_show_source_line, tui_source_window_base::update_tab_width)
-	(tui_source_window_base::update_exec_info): Update.
-	* tui/tui-data.h (struct curses_deleter): New.
-	(struct tui_gen_win_info) <handle>: Now a unique_ptr.
-	(struct tui_gen_win_info) <~tui_gen_win_info>: Define.
-
-2019-10-09  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h (struct tui_gen_win_info): Don't declare.
-
-2019-10-09  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.c (tui_win_is_auxiliary): Remove.
-	* tui/tui-data.h (tui_win_is_auxiliary): Don't declare.
-
-2019-10-09  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-disasm.c (tui_get_low_disassembly_address): Compute
-	window height directly.
-	* tui/tui-layout.h (tui_default_win_viewport_height): Don't
-	declare.
-	* tui/tui-layout.c (tui_default_win_height): Remove.
-	(tui_default_win_viewport_height): Remove.
-
-2019-10-09  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.h: Remove comments.
-
-2019-10-09  Tom de Vries  <tdevries@suse.de>
-
-	* python/lib/gdb/printer/bound_registers.py: Use
-	'^builtin_type_bound128' as regexp argument for
-	add_builtin_pretty_printer.
-
-2019-10-09  Christian Biesinger  <cbiesinger@google.com>
-
-	* guile/guile.c (guile_extension_script_ops): Remove forward
-	declaration and mark as static.
-	(guile_script_ops): Likewise.
-	(extension_language_guile): Move further down in the file so
-	it can reference the definitions for guile_{extension_,}script_ops.
-
-2019-10-09  Andreas Arnez  <arnez@linux.ibm.com>
-
-	* s390-tdep.c (390_process_record): Handle new arch13 instructions
-	except SORTL, DFLTCC, and KDSA.
-
-2019-10-08  Tom Tromey  <tromey@adacore.com>
-
-	* windows-nat.c (struct windows_thread_info_struct) <sf>: Remove.
-	(struct safe_symbol_file_add_args): Remove.
-
-2019-10-08  Tom Tromey  <tromey@adacore.com>
-
-	* windows-nat.c: Don't include buildsym-legacy.h.
-
-2019-10-08  Tom Tromey  <tromey@adacore.com>
-
-	* contrib/ari/gdb_ari.sh (%p): Allow gdb-specific %p extensions.
-
-2019-10-08  Christian Biesinger  <cbiesinger@google.com>
-
-	* gdbtypes.c (overload_debug): Move comment to header.
-	* gdbtypes.h (overload_debug): Declare.
-	* valops.c: Remove declaration of overload_debug, instead
-	include gdbtypes.h.
-
-2019-10-08  Christian Biesinger  <cbiesinger@google.com>
-
-	* language.c (show_language_command): Pass lang_frame_mismatch_warn
-	through _().
-	(lang_frame_mismatch_warn): Make const, mark with N_(), and
-	move comment...
-	* language.h (lang_frame_mismatch_warn): ... here. Also add
-	declaration.
-	* top.c (lang_frame_mismatch_warn): Remove declaration.
-	(check_frame_language_change): Pass lang_frame_mismatch_warn
-	through _().
-
-2019-10-07  Christian Biesinger  <cbiesinger@google.com>
-
-	* c-lang.h (vtbl_ptr_name): Declare.
-	* cp-valprint.c (vtbl_ptr_name): Remove "extern" now that we get
-	it from the header.
-	* stabsread.c (define_symbol): Remove declaration of vtbl_ptr_name.
-
-2019-10-07  Christian Biesinger  <cbiesinger@google.com>
-
-	* charset.c (your_gdb_wchar_t_is_bogus): Replace with a
-	gdb_static_assert.
-
-2019-10-07  Weimin Pan  <weimin.pan@oracle.com>
-
-	* ../Makefile.def (dependencies): Add all-libctf to all-gdb
-	* ../Makefile.in: Add "all-gdb: maybe-all-libctf"
-	* ctfread.c: New file.
-	* ctfread.h: New file.
-	* elfread.c: Include ctfread.h.
-	(struct elfinfo text_p): New member ctfsect.
-	(elf_locate_sections): Mark CTF section.
-	(elf_symfile_read): Call elfctf_build_psymtabs.
-	* Makefile.in (LIBCTF): Add.
-	(CLIBS): Use it.
-	(CDEPS): Likewise.
-	(DIST): Add ctfread.c.
-
-2019-10-07  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* ctfread.c (struct nextfield): Renamed to ...
-	(struct ctf_nextfield): ... this.
-	(struct field_info): Renamed to ...
-	(strut ctf_field_info): ... this.
-	(attach_fields_to_type): Update for renamed structures.
-	(ctf_add_member_cb): Likewise.
-	(ctf_add_enum_member_cb): Likewise.
-	(process_struct_members): Likewise.
-	(process_enum_type): Likewise.
-
-2019-10-07  Weimin Pan  <weimin.pan@oracle.com>
-
-	* tracectf.h: Rename, was ctf.h.
-	* tracectf.c: Rename, was ctf.c, replace ctf.h with tracectf.h.
-	* tracefile.c: Likewise.
-	* tracepoint.c: Remove unused include ctf.h.
-	* mi/mi-main.c: Likewise.
-	* Makefile.in Replace ctf.c with tracectf.c.
-
-2019-10-06  Joel Brobecker  <brobecker@adacore.com>
-
-	* version.in: Change version number to "9.0.50.DATE-git".
-
-2019-10-03  Tom Tromey  <tom@tromey.com>
-
-	PR rust/24976:
-	* dwarf2read.c (quirk_rust_enum): Handle single-element unions.
-
-2019-10-03  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-lang.c (f_language_defn): Use cp_get_symbol_name_matcher and
-	cp_search_name_hash.
-	* NEWS: Add entry about nested function support.
-
-2019-10-03  Bernhard Heckel  <bernhard.heckel@intel.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* cp-namespace.c (cp_search_static_and_baseclasses): Only search
-	for nested static variables when searchin VAR_DOMAIN.
-	* dwarf2read.c (add_partial_symbol): Add nested subroutines to the
-	global scope, update comment.
-	(add_partial_subprogram): Call add_partial_subprogram recursively
-	for nested subroutines when processinng Fortran.
-	(load_partial_dies): Process the child entities of a subprogram
-	when processing Fortran.
-	(partial_die_parent_scope): Handle building scope
-	for Fortran nested functions.
-	(process_die): Record that nested functions have a scope.
-	(new_symbol): Always record Fortran subprograms on the global
-	symbol list.
-	(determine_prefix): How to build the prefix for Fortran
-	subprograms.
-
-2019-10-03  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* linux-nat.c (linux_nat_filter_event): Don't ignore SIGSTOP if we
-	have just sent the thread a SIGSTOP and are waiting for it to
-	arrive.
-
-2019-10-03  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* btrace.c (btrace_add_pc): Remove whitespace before the template
-	parameter in 'std::vector <...>'.
-	(parse_xml_btrace_block): Likewise.
-	(btrace_maint_decode_pt): Likewise.
-	(btrace_maint_update_packets): Likewise.
-	(btrace_maint_print_packets): Likewise.
-	* btrace.h (struct btrace_maint_info): Likewise.
-	* dwarf2read.c (struct type_unit_group): Likewise.
-	(build_type_psymtabs_reader): Likewise.
-	* gdbsupport/btrace-common.c (btrace_data_append): Likewise.
-	* gdbsupport/btrace-common.h (struct btrace_data_bts): Likewise.
-	* nat/linux-btrace.c (perf_event_read_bts): Likewise.
-
-2019-10-03  Tom de Vries  <tdevries@suse.de>
-
-	* cli/cli-style.c (_initialize_cli_style): Adding a '.' at the end of
-	the first line of the help text for set/show style metadata.
-
-2019-10-02  Tom Tromey  <tromey@adacore.com>
-
-	* Makefile.in (COMMON_SFILES): Add common-inferior.c.
-	* gdbsupport/common-inferior.c: New file.
-	* infcmd.c (startup_with_shell): Don't define.
-	* nat/fork-inferior.h (startup_with_shell): Don't declare.
-	* gdbsupport/common-inferior.h (startup_with_shell): Declare.
-	* inferior.h (startup_with_shell): Don't declare.
-
-2019-10-02  Christian Biesinger  <cbiesinger@google.com>
-
-	* gdbsupport/gdb_assert.h: Include errors.h.
-	* gdbsupport/gdb_string_view.h: Include gdb_assert.h.
-
-2019-10-02  Tom Tromey  <tromey@adacore.com>
-
-	* NEWS: Add $_ada_exception entry.
-	* ada-lang.c (struct ada_catchpoint): Add constructor.
-	<m_kind>: New member.
-	(allocate_location_exception, re_set_exception): Remove
-	"ex" parameter.
-	(should_stop_exception): Compute $_ada_exception.
-	(check_status_exception, print_it_exception)
-	(print_one_exception, print_mention_exception): Remove
-	"ex" parameter.
-	(allocate_location_catch_exception, re_set_catch_exception)
-	(check_status_exception, print_it_catch_exception)
-	(print_one_catch_exception, print_mention_catch_exception)
-	(print_recreate_catch_exception)
-	(allocate_location_catch_exception_unhandled)
-	(re_set_catch_exception_unhandled)
-	(check_status_exception, print_it_catch_exception_unhandled)
-	(print_one_catch_exception_unhandled)
-	(print_mention_catch_exception_unhandled)
-	(print_recreate_catch_exception_unhandled)
-	(allocate_location_catch_assert, re_set_catch_assert)
-	(check_status_assert, print_it_catch_assert)
-	(print_one_catch_assert, print_mention_catch_assert)
-	(print_recreate_catch_assert)
-	(allocate_location_catch_handlers, re_set_catch_handlers)
-	(check_status_handlers, print_it_catch_handlers)
-	(print_one_catch_handlers, print_mention_catch_handlers)
-	(print_recreate_catch_handlers): Remove.
-	(create_ada_exception_catchpoint): Update.
-	(initialize_ada_catchpoint_ops): Update.
-
-2019-10-02  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_lookup_simple_minsyms): Remove.
-	(create_excep_cond_exprs): Simplify exception string computation.
-	(ada_exception_catchpoint_cond_string): Likewise.
-
-2019-10-02  Tom Tromey  <tromey@adacore.com>
-
-	* symmisc.c (dump_msymbols): Don't use MSYMBOL_VALUE_ADDRESS.
-	* ada-lang.c (lesseq_defined_than): Handle
-	LOC_STATIC.
-	* dwarf2read.c (dwarf2_per_objfile): Add can_copy
-	parameter.
-	(dwarf2_has_info): Likewise.
-	(new_symbol): Set maybe_copied on symbol when
-	appropriate.
-	* dwarf2read.h (dwarf2_per_objfile): Add can_copy
-	parameter.
-	<can_copy>: New member.
-	* elfread.c (record_minimal_symbol): Set maybe_copied
-	on symbol when appropriate.
-	(elf_symfile_read): Update call to dwarf2_has_info.
-	* minsyms.c (lookup_minimal_symbol_linkage): New
-	function.
-	* minsyms.h (lookup_minimal_symbol_linkage): Declare.
-	* symtab.c (get_symbol_address, get_msymbol_address):
-	New functions.
-	* symtab.h (get_symbol_address, get_msymbol_address):
-	Declare.
-	(SYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_ADDRESS): Handle
-	maybe_copied.
-	(struct symbol, struct minimal_symbol) <maybe_copied>:
-	New member.
-
-2019-10-02  Tom Tromey  <tromey@adacore.com>
-
-	* source.c (struct current_source_location): New.
-	(current_source_key): New global.
-	(current_source_symtab, current_source_line)
-	(current_source_pspace): Remove.
-	(get_source_location): New function.
-	(get_current_source_symtab_and_line)
-	(set_default_source_symtab_and_line)
-	(set_current_source_symtab_and_line)
-	(clear_current_source_symtab_and_line, select_source_symtab)
-	(info_source_command, print_source_lines_base)
-	(info_line_command, search_command_helper, _initialize_source):
-	Update.
-
-2019-10-02  Tom Tromey  <tromey@adacore.com>
-
-	* source.c (select_source_symtab): Don't call
-	decode_line_with_current_source.
-
-2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* symtab.c (lookup_global_symbol): Search global block.
-
-2019-10-02  Tom Tromey  <tromey@adacore.com>
-
-	* coffread.c (process_coff_symbol): Update.
-	* dwarf2read.c (var_decode_location, new_symbol): Update.
-	* mdebugread.c (parse_symbol): Update.
-	* objfiles.c (relocate_one_symbol): Update.
-	* stabsread.c (define_symbol, fix_common_block)
-	(scan_file_globals): Update.
-	* symtab.h (SYMBOL_VALUE_ADDRESS): Expand to an rvalue.
-	(SET_SYMBOL_VALUE_ADDRESS): New macro.
-	* xcoffread.c (process_xcoff_symbol): Update.
-
-2019-10-02  Andreas Arnez  <arnez@linux.ibm.com>
-
-	* MAINTAINERS: Update my email address.
-
-2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2read.c (struct type_unit_group) <tus>: Convert to
-	std::vector.
-	(build_type_psymtabs_reader): Update for std::vector.
-	(build_type_psymtab_dependencies): Likewise.
-	* dwarf2read.h: Remove use of DEF_VEC_P.
-	(typedef sig_type_ptr): Delete.
-
-2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* btrace.c (btrace_maint_clear): Update to handle change from VEC
-	to std::vector.
-	(btrace_maint_decode_pt): Likewise, and move allocation of the
-	vector outside of the loop.
-	(btrace_maint_update_packets): Update to handle change from VEC to
-	std::vector.
-	(btrace_maint_print_packets): Likewise.
-	(maint_info_btrace_cmd): Likewise.
-	* btrace.h: Remove use of DEF_VEC_O.
-	(typedef btrace_pt_packet_s): Delete.
-	(struct btrace_maint_info) <packets>: Change fromm VEC to
-	std::vector.
-	* gdbsupport/btrace-common.h: Remove 'vec.h' include.
-
-2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* btrace.c (btrace_compute_ftrace_bts): Update for std::vector,
-	make accesses into the vector constant references.
-	(btrace_add_pc): Update for std::vector.
-	(btrace_stitch_bts): Likewise.
-	(parse_xml_btrace_block): Likewise.
-	(btrace_maint_update_packets): Likewise.
-	(btrace_maint_print_packets): Likewise.
-	(maint_info_btrace_cmd): Likewise.
-	* gdbsupport/btrace-common.c (btrace_data::fini): Update for
-	std::vector.
-	(btrace_data::empty): Likewise.
-	(btrace_data_append): Likewise.
-	* gdbsupport/btrace-common.h: Remove use of DEF_VEC_O.
-	(typedef btrace_block_s): Delete.
-	(struct btrace_block): Add constructor.
-	(struct btrace_data_bts) <blocks>: Change to std::vector.
-	* nat/linux-btrace.c (perf_event_read_bts): Update for
-	std::vector.
-	(linux_read_bts): Likewise.
-
-2019-10-01  Tom Tromey  <tom@tromey.com>
-
-	* cli/cli-logging.c (show_logging_filename): Use styled_string.
-
-2019-10-01  Tom Tromey  <tom@tromey.com>
-
-	* stack.c (print_frame, info_frame_command_core): Use
-	styled_string.
-	* linux-thread-db.c (try_thread_db_load_1)
-	(try_thread_db_load_from_pdir_1): Use styled_string.
-	* auto-load.c (file_is_auto_load_safe, execute_script_contents)
-	(auto_load_section_scripts, info_auto_load_local_gdbinit)
-	(maybe_print_unsupported_script_warning)
-	(maybe_print_script_not_found_warning): Use styled_string.
-	* ada-lang.c (user_select_syms): Use styled_string.
-
-2019-10-01  Tom Tromey  <tom@tromey.com>
-
-	* p-lang.c (pascal_printstr): Use metadata style.
-	* value.c (show_convenience): Use metadata style.
-	* valprint.c (valprint_check_validity, val_print_optimized_out)
-	(val_print_not_saved, val_print_unavailable)
-	(val_print_invalid_address, generic_val_print, val_print)
-	(value_check_printable, val_print_array_elements): Use metadata
-	style.
-	* ui-out.h (class ui_out) <field_fmt>: New overload.
-	<do_field_fmt>: Add style parameter.
-	* ui-out.c (ui_out::field_fmt): New overload.
-	* typeprint.c (type_print_unknown_return_type)
-	(val_print_not_allocated, val_print_not_associated): Use metadata
-	style.
-	* tui/tui-out.h (class tui_ui_out) <do_field_fmt>: Add style
-	parameter.
-	* tui/tui-out.c (tui_ui_out::do_field_fmt): Update.
-	* tracepoint.c (tvariables_info_1): Use metadata style.
-	* stack.c (print_frame_arg, print_frame_info, print_frame)
-	(info_frame_command_core): Use metadata style.
-	* skip.c (info_skip_command): Use metadata style.
-	* rust-lang.c (rust_print_enum): Use metadata style.
-	* python/py-prettyprint.c (print_stack_unless_memory_error): Use
-	metadata style.
-	* python/py-framefilter.c (py_print_single_arg): Use metadata
-	style.
-	* printcmd.c (do_one_display, print_variable_and_value): Use
-	metadata style.
-	* p-valprint.c (pascal_val_print)
-	(pascal_object_print_value_fields): Use metadata style.
-	* p-typeprint.c (pascal_type_print_base): Use metadata style.
-	* mi/mi-out.h (class mi_ui_out) <do_field_fmt>: Add style
-	parameter.
-	* mi/mi-out.c (mi_ui_out::do_field_fmt): Update.
-	* m2-valprint.c (m2_print_long_set): Use metadata style.
-	* m2-typeprint.c (m2_print_type): Use metadata style.
-	* infcmd.c (print_return_value_1): Use metadata style.
-	* gnu-v3-abi.c (print_one_vtable): Use metadata style.
-	* f-valprint.c (info_common_command_for_block): Use metadata
-	style.
-	* f-typeprint.c (f_type_print_base): Use metadata style.
-	* expprint.c (print_subexp_standard): Use metadata style.
-	* cp-valprint.c (cp_print_value_fields): Use metadata style.
-	* cli/cli-style.h (class cli_style_option): Add constructor.
-	(metadata_style): Declare.
-	* cli/cli-style.c (metadata_style): New global.
-	(_initialize_cli_style): Register metadata style.
-	* cli-out.h (class cli_ui_out) <do_field_fmt>: Add style
-	parameter.
-	* cli-out.c (cli_ui_out::do_field_fmt): Update.
-	* c-typeprint.c (c_type_print_base_struct_union)
-	(c_type_print_base_1): Use metadata style.
-	* breakpoint.c (watchpoint_value_print)
-	(print_one_breakpoint_location): Use metadata style.
-	* break-catch-syscall.c (print_one_catch_syscall): Use metadata
-	style.
-	* break-catch-sig.c (signal_catchpoint_print_one): Use metadata
-	style.
-	* ada-valprint.c (val_print_packed_array_elements, printstr)
-	(print_field_values, ada_val_print_ref, ada_val_print): Use
-	metadata style.
-	* ada-typeprint.c (print_array_type, ada_print_type): Use metadata
-	style.
-	* ada-tasks.c (print_ada_task_info, info_task): Use metadata
-	style.
-	* ada-lang.c (user_select_syms): Use metadata style.
-
-2019-10-01  Tom Tromey  <tom@tromey.com>
-
-	* cli/cli-cmds.c (pwd_command): Style output.
-
-2019-10-01  Pedro Alves  <palves@redhat.com>
-	    Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (print_symbol_info): Use %ps.
-	(print_msymbol_info): Use %ps.
-	* symfile.c (symbol_file_add_with_addrs): Use %ps.
-	* printcmd.c (print_variable_and_value): Use %ps.
-	* macrocmd.c (show_pp_source_pos): Use %ps.
-	* infrun.c (print_exited_reason): Use ui_out::message.
-	* breakpoint.c (watchpoint_check, print_one_breakpoint_location)
-	(describe_other_breakpoints): Use ui_out::message and new
-	formats.
-	(say_where): Use new formats.
-	(bkpt_print_it, tracepoint_print_one_detail): Use ui_out::message
-	and new formats.
-
-2019-10-01  Pedro Alves  <palves@redhat.com>
-	    Tom Tromey  <tom@tromey.com>
-
-	* unittests/format_pieces-selftests.c: Add gdb_format parameter.
-	(test_gdb_formats): New function.
-	(run_tests): Call it.
-	(test_format_specifier): Update.
-	* utils.h (fputs_filtered): Update comment.
-	(vfprintf_styled, vfprintf_styled_no_gdbfmt)
-	(fputs_styled_unfiltered): Declare.
-	* utils.c (fputs_styled_unfiltered): New function.
-	(vfprintf_maybe_filtered): Add gdbfmt parameter.
-	(vfprintf_filtered): Update.
-	(vfprintf_unfiltered, vprintf_filtered): Update.
-	(vfprintf_styled, vfprintf_styled_no_gdbfmt): New functions.
-	* ui-out.h (enum ui_out_flag) <unfiltered_output,
-	disallow_ui_out_field>: New constants.
-	(enum class field_kind): New.
-	(struct base_field_s, struct signed_field_s): New.
-	(signed_field): New function.
-	(struct string_field_s): New.
-	(string_field): New function.
-	(struct styled_string_s): New.
-	(styled_string): New function.
-	(class ui_out) <message>: Add comment.
-	<vmessage, call_do_message>: New methods.
-	<do_message>: Add style parameter.
-	* ui-out.c (ui_out::call_do_message, ui_out::vmessage): New
-	methods.
-	(ui_out::message): Rewrite.
-	* mi/mi-out.h (class mi_ui_out) <do_message>: Add style
-	parameter.
-	* mi/mi-out.c (mi_ui_out::do_message): Add style parameter.
-	* gdbsupport/format.h (class format_pieces) <format_pieces>: Add
-	gdb_extensions parameter.
-	(class format_piece): Add parameter to constructor.
-	(n_int_args): New field.
-	* gdbsupport/format.c (format_pieces::format_pieces): Add
-	gdb_extensions parameter.  Handle '*'.
-	* cli-out.h (class cli_ui_out) <do_message>: Add style parameter.
-	* cli-out.c (cli_ui_out::do_message): Add style parameter.  Call
-	vfprintf_styled_no_gdbfmt.
-	(cli_ui_out::do_field_string, cli_ui_out::do_spaces)
-	(cli_ui_out::do_text, cli_ui_out::field_separator): Allow
-	unfiltered output.
-	* ui-style.h (struct ui_file_style) <ptr>: New method.
-
-2019-10-01  Tom Tromey  <tom@tromey.com>
-
-	* unittests/format_pieces-selftests.c: Update.  Add final format.
-	* gdbsupport/format.c (format_pieces::format_pieces): Don't add
-	empty literal pieces.
-
-2019-10-01  Tom Tromey  <tom@tromey.com>
-
-	* ui-out.h (enum class ui_out_style_kind): Remove.
-	(class ui_out) <field_string, field_stsream, do_field_string>:
-	Change type of "style".
-	* ui-out.c (ui_out::field_core_addr, ui_out::field_stream)
-	(ui_out::field_string): Update.
-	* tui/tui-out.h (class tui_ui_out) <do_field_string>: Change type
-	of "style".
-	* tui/tui-out.c (tui_ui_out::do_field_string): Update.
-	* tracepoint.c (print_one_static_tracepoint_marker): Update.
-	* stack.c (print_frame_arg, print_frame_info, print_frame):
-	Update.
-	* source.c (print_source_lines_base): Update.
-	* solib.c (info_sharedlibrary_command): Update.
-	* skip.c (info_skip_command): Update.
-	* record-btrace.c (btrace_call_history_src_line)
-	(btrace_call_history): Update.
-	* python/py-framefilter.c (py_print_frame): Update.
-	* mi/mi-out.h (class mi_ui_out) <do_field_string>: Change type of
-	"style".
-	* mi/mi-out.c (mi_ui_out::do_table_header)
-	(mi_ui_out::do_field_signed, mi_ui_out::do_field_unsigned)
-	(mi_ui_out::do_field_string): Update.
-	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
-	Update.
-	* cli-out.h (class cli_ui_out) <do_field_string>: Change type of
-	"style".
-	* cli-out.c (cli_ui_out::do_table_header)
-	(cli_ui_out::do_field_signed, cli_ui_out::do_field_unsigned)
-	(cli_ui_out::do_field_skip, cli_ui_out::do_field_string)
-	(cli_ui_out::do_field_fmt): Update.
-	* breakpoint.c (print_breakpoint_location): Update.
-	(update_static_tracepoint): Update.
-
-2019-10-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* main.c (relocate_gdbinit_path_maybe_in_datadir): Remove std::string
-	conversion of gdb_datadir.
-	(captured_main_1): Remove xstrdup when assigning to gdb_datadir,
-	remove not needed c_str ().
-
-2019-09-30  Ali Tamur <tamur@google.com>
-
-	* dwarf2read.c (skip_one_die): Handle DW_FORM_strx forms.
-	(dwarf2_string_attr): Likewise.
-
-2019-09-30  Ali Tamur <tamur@google.com>
-
-	* dwarf2read.c (process_full_comp_unit): Remove whitespace at the EOL.
-	(process_full_type_unit): Likewise.
-	(dump_die_shallow): Likewise.
-	(cu_debug_loc_section): Likewise.
-
-2019-09-28  Christian Biesinger  <cbiesinger@google.com>
-
-	* minsyms.c (compare_minimal_symbols): Rename to...
-	(minimal_symbol_is_less_than): ...this, and adjust to STL
-	conventions (return bool, take arguments as references)
-	(minimal_symbol_reader::install): Call std::sort instead
-	of qsort.
-
-2019-09-29  Christian Biesinger  <cbiesinger@google.com>
-
-	* minsyms.h (msymbol_hash): Document that this is a case-insensitive
-	hash and why.
-	* objfiles.h (struct objfile_per_bfd_storage) <demangled_names_hash,
-	msymbol_hash, msymbol_demangled_hash>: Improve comments.
-
-2019-09-30  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* psymtab.c (add_psymbol_to_list): Move comment to psympriv.h.
-	* psympriv.h (add_psymbol_to_list): Move comment here and update
-	it.
-
-2019-09-29  Tom de Vries  <tdevries@suse.de>
-
-	* contrib/cc-with-tweaks.sh (get_tmpdir): New function.
-	Use $tmpdir/$(basename "$output_file").dwz instead of
-	"${output_file}.dwz".
-
-2019-09-28  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	PR gdb/25045
-	* hppa-linux-nat.c: Include gdbarch.h.
-
-2019-09-26  Christian Biesinger  <cbiesinger@google.com>
-
-	* blockframe.c (find_pc_partial_function): Change return type to bool.
-	* elfread.c (elf_gnu_ifunc_resolve_name): Likewise.
-	* minsyms.c (in_gnu_ifunc_stub): Likewise.
-	(stub_gnu_ifunc_resolve_name): Likewise.
-	* symtab.c (compare_filenames_for_search): Likewise.
-	(compare_glob_filenames_for_search): Likewise.
-	(matching_obj_sections): Likewise.
-	(symbol_matches_domain): Likewise.
-	(find_line_symtab): Change out param EXACT_MATCH to bool *.
-	(find_line_pc): Change return type to bool.
-	(find_line_pc_range): Likewise.
-	(producer_is_realview): Likewise.
-	* symtab.h (symbol_matches_domain): Likewise.
-	(find_pc_partial_function): Likewise.
-	(find_pc_line_pc_range): Likewise.
-	(in_gnu_ifunc_stub): Likewise.
-	(struct gnu_ifunc_fns) <gnu_ifunc_resolve_name>: Likewise.
-	(find_line_pc): Likewise.
-	(find_line_pc_range): Likewise.
-	(matching_obj_sections): Likewise.
-	(find_line_symtab): Change out parameter to bool.
-	(producer_is_realview): Change return type to bool.
-	(compare_filenames_for_search): Likewise.
-	(compare_glob_filenames_for_search): Likewise.
-
-2019-09-26  Tom Tromey  <tom@tromey.com>
-
-	* Makefile.in (COMMON_SFILES): Remove gdb_usleep.c.
-	(HFILES_NO_SRCDIR): Remove gdb_usleep.h.
-	* gdb_usleep.h: Remove.
-	* gdb_usleep.c: Remove.
-	* utils.c: Don't include gdb_usleep.h.
-
-2019-09-26  Tom Tromey  <tromey@adacore.com>
-
-	* python/py-type.c (type_to_type_object): Call check_typedef
-	for stub types.
-
-2019-09-26  Tom Tromey  <tom@tromey.com>
-
-	* utils.h (initialize_utils): Don't declare.
-	* top.c (gdb_init): Don't call initialize_utils.
-	* utils.c (initialize_utils): Remove.  Move contents...
-	(_initialize_utils): ... here.
-
-2019-09-25  Tom Tromey  <tom@tromey.com>
-
-	* python/py-objfile.c (objfpy_get_build_id): Use bin2hex.
-	* utils.h (make_hex_string): Don't declare.
-	* utils.c (make_hex_string): Remove.
-
-2019-09-24  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/23815
-	* amd64-linux-nat.c (amd64_linux_nat_target::fetch_registers):
-	Initialize xstateregs before ptrace PTRACE_GETREGSET call.
-
-2019-09-23  Dimitar Dimitrov  <dimitar@dinux.eu>
-
-	* NEWS: Mention new simulator port for PRU.
-
-2019-09-23  Christian Biesinger  <cbiesinger@google.com>
-
-	* ada-exp.y (write_object_remaining): Update.
-	* ada-lang.c (ada_decode): Return a std::string instead of a char*
-	and eliminate the static buffer.
-	(ada_decode_symbol): Update.
-	(ada_la_decode): Update.
-	(ada_sniff_from_mangled_name): Update.
-	(is_valid_name_for_wild_match): Update.
-	(ada_lookup_name_info::matches): Update and simplify.
-	(name_matches_regex): Update.
-	(ada_add_global_exceptions): Update.
-	* ada-lang.h (ada_decode): Update signature.
-	* ada-varobj.c (ada_varobj_describe_simple_array_child): Update.
-	* dwarf-index-write.c (debug_names::insert): Update.
-
-2019-09-21  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* solib-svr4.c (svr4_iterate_over_objfiles_in_search_order): Fix
-	formatting.
-
-2019-09-21  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* breakpoint.h (bp_location) <inserted, permanent, duplicate>:
-	Change "nonzero" to "true" in documentation.
-
-2019-09-20  Christian Biesinger  <cbiesinger@google.com>
-
-	* solib-darwin.c (darwin_lookup_lib_symbol): Remove.
-	(_initialize_darwin_solib): Don't set
-	darwin_so_ops.lookup_lib_global_symbol.
-	* solib-svr4.c (set_solib_svr4_fetch_link_map_offsets): Call
-	set_gdbarch_iterate_over_objfiles_in_search_order.
-	(elf_lookup_lib_symbol): Rename to...
-	(svr4_iterate_over_objfiles_in_search_order): this, and update
-	to iterate semantics.
-	(_initialize_svr4_solib): Don't set lookup_lib_global_symbol.
-	* solib.c (solib_global_lookup): Remove.
-	* solist.h (struct target_so_ops): Remove lookup_lib_global_symbol.
-	(solib_global_lookup): Remove.
-	* symtab.c (lookup_global_or_static_symbol): Remove call to
-	solib_global_lookup.
-
-2019-09-20  Joel Brobecker  <brobecker@adacore.com>
-
-	* NEWS: Move entries about default MI version now being
-	version 3, and about the GDB/MI fix for multi-location
-	breakpoints to the "since GDB 8.3" section.
-
-2019-09-20  Joel Brobecker  <brobecker@adacore.com>
-
-	GDB 8.3.1 released.
-
-2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* NEWS: Mention that Cell/B.E. debugging support was removed.
-	* MAINTAINERS: Remove spu target.
-
-	* config/djgpp/fnchange.lst: Remove entries for removed files.
-
-	* Makefile.in (ALL_TARGET_OBS): Remove solib-spu.o,
-	spu-multiarch.o, and spu-tdep.o.
-	(HFILES_NO_SRCDIR): Remove solib-spu.h and spu-tdep.h.
-	(ALLDEPFILES): Remove solib-spu.c, spu-linux-nat.c,
-	spu-multiarch.c, and spu-tdep.c.
-	* spu-linux-nat.c: Remove file.
-	* spu-multiarch.c: Remove file.
-	* spu-tdep.c: Remove file.
-	* spu-tdep.h: Remove file.
-	* solib-spu.c: Remove file.
-	* solib-spu.h: Remove file.
-
-	* configure.host (powerpc64*-*-linux*): Remove Cell/B.E. support.
-	* configure.nat (spu-linux): Remove.
-	* configure.tgt (powerpc*-*-linux*): Remove solib-spu.o and
-	solib-multiarch.o from gdb_target_obs.
-	(spu*-*-*): Remove.
-
-	* arch/ppc-linux-common.h (struct ppc_linux_features): Remove "cell"
-	feature flag.
-	(ppc_linux_no_features): Update.
-	* arch/ppc-linux-common.c (ppc_linux_match_description): Remove
-	Cell/B.E. support.
-	* arch/ppc-linux-tdesc.h (tdesc_powerpc_cell32l): Remove declaration.
-	(tdesc_powerpc_cell64l): Likewise.
-	* nat/ppc-linux.h (PPC_FEATURE_CELL): Remove.
-	* ppc-linux-nat.c (ppc_linux_nat_target::read_description): Remove
-	Cell/B.E. support.
-	* ppc-linux-tdep.h: Do not include "solib-spu.h" or "spu-tdep.h".
-	Do not include "features/rs6000/powerpc-cell32l.c" or
-	"features/rs6000/powerpc-cell64l.c".
-	(ppc_linux_spu_section): Remove.
-	(ppc_linux_core_read_description): Remove Cell/B.E. support.
-	(spe_context_objfile, spe_context_lm_addr, spe_context_offset,
-	spe_context_cache_ptid, spe_context_cache_ptid): Remove.
-	(ppc_linux_spe_context_lookup): Remove.
-	(ppc_linux_spe_context_inferior_created): Remove.
-	(ppc_linux_spe_context_solib_loaded): Remove.
-	(ppc_linux_spe_context_solib_unloaded): Remove.
-	(ppc_linux_spe_context): Remove.
-	(struct ppu2spu_cache): Remove.
-	(ppu2spu_prev_arch, ppu2spu_this_id, ppu2spu_prev_register): Remove.
-	(struct ppu2spu_data): Remove.
-	(ppu2spu_unwind_register, ppu2spu_sniffer, ppu2spu_dealloc_cache,
-	ppu2spu_unwind): Remove.
-	(ppc_linux_init_abi): Remove Cell/B.E. support.
-	* rs6000-tdep.h (rs6000_gdbarch_init): Remove Cell/B.E. support.
-
-	* features/Makefile (rs6000/powerpc-cell32l-expedite): Remove.
-	(rs6000/powerpc-cell64l-expedite): Likewise
-	(WHICH): Remove rs6000/powerpc-cell32l and rs6000/powerpc-cell64l.
-	(XMLTOC): Remove rs6000/powerpc-cell32l.xml and
-	rs6000/powerpc-cell64l.xml.
-	* features/rs6000/powerpc-cell32l.xml: Remove.
-	* features/rs6000/powerpc-cell64l.xml: Likewise.
-	* features/rs6000/powerpc-cell32l.c: Remove generated file.
-	* features/rs6000/powerpc-cell64l.c: Likewise.
-	* regformats/rs6000/powerpc-cell32l.dat: Remove generated file.
-	* regformats/rs6000/powerpc-cell64l.dat: Likewise.
-	* regformats/reg-spu.dat: Remove.
-
-	* target.h (enum target_object): Remove TARGET_OBJECT_SPU.
-	* corelow.c (struct spuid_list): Remove.
-	(add_to_spuid_list): Remove.
-	(core_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
-	* remote.c (PACKET_qXfer_spu_read, PACKET_qXfer_spu_write): Remove.
-	(remote_protocol_features): Remove associated entries.
-	(_initialize_remote): No longer initialize them.
-	(remote_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
-	* linux-nat.c (SPUFS_MAGIC): Remove.
-	(linux_proc_xfer_spu): Remove.
-	(spu_enumerate_spu_ids): Remove.
-	(linux_nat_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
-	* linux-tdep.c (-linux_spu_make_corefile_notes): Remove.
-	(linux_make_corefile_notes): No longer call it.
-
-	* regcache.c (cooked_read_test): Remove bfd_arch_spu special case.
-	(cooked_write_test): Likewise.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* NEWS: Mention case-sensitivity of TUI commands.
-	* tui/tui-win.c (tui_set_focus_command): Now case-sensitive.
-	(tui_set_win_height_command, parse_scrolling_args): Likewise.
-	* tui/tui-layout.c (tui_layout_command): Now case-sensitive.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-source.c (tui_source_window::set_contents): Use
-	make_unique_xstrdup.
-	* tui/tui-disasm.c (tui_disasm_window::set_contents): Use
-	make_unique_xstrdup.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.c: Remove separator comments.
-	* tui/tui-layout.c: Remove separator comments.
-	* tui/tui-win.c: Remove separator comments.
-	* tui/tui-wingeneral.c: Remove separator comments.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.h (strcat_to_buf): Don't declare.
-	* tui/tui.c (strcat_to_buf): Remove.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-source.h (struct tui_source_window) <m_fullname>: Rename
-	from "fullname".
-	* tui/tui-source.c (tui_source_window::set_contents)
-	(tui_source_window::location_matches_p)
-	(tui_source_window::maybe_update): Update.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_window) <get_current_group>:
-	Update.
-	<m_regs_content, m_regs_column_count, m_current_group>: Add "m_"
-	prefix.
-	* tui/tui-regs.c (tui_data_window::last_regs_line_no)
-	(tui_data_window::line_from_reg_element_no)
-	(tui_data_window::first_reg_element_no_inline)
-	(tui_data_window::show_registers)
-	(tui_data_window::show_register_group)
-	(tui_data_window::display_registers_from)
-	(tui_data_window::display_registers_from_line)
-	(tui_data_window::first_data_item_displayed)
-	(tui_data_window::delete_data_content_windows)
-	(tui_data_window::erase_data_content)
-	(tui_data_window::do_scroll_vertical)
-	(tui_data_window::refresh_window)
-	(tui_data_window::check_register_values): Update.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.h (MAX_LOCATOR_ELEMENT_LEN): Remove define.
-	(struct tui_locator_window) <full_name, proc_name>: Now
-	std::string.
-	* tui/tui-stack.c (tui_locator_window::make_status_line)
-	(tui_locator_window::set_locator_fullname)
-	(tui_locator_window::set_locator_info): Update.
-	* tui/tui-source.c (tui_source_window::set_contents)
-	(tui_source_window::showing_source_p): Update.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.c (tui_locator_window::set_locator_fullname):
-	Don't call tui_locator_win_info_ptr.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_resize_all): Don't call refresh.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Use 1 as
-	height for locator.
-	* tui/tui-stack.c (tui_locator_window::rerender): Call scrollok.
-	* tui/tui-layout.c (show_source_disasm_command, show_data)
-	(show_source_or_disasm_and_command): Use 1 as height for locator.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c (tui_enable): Update.
-	* tui/tui-win.c (tui_sigwinch_handler, tui_async_resize_screen):
-	Update.
-	* tui/tui-data.h (tui_win_resized, tui_set_win_resized_to):
-	Update.
-	* tui/tui-data.c (win_resized): Now bool.
-	(tui_win_resized): Return bool.
-	(tui_set_win_resized_to): Accept a bool.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_window) <show_register_group>:
-	Change type of "refresh_values_only".
-	* tui/tui-regs.c (tui_data_window::show_register_group): Change
-	type of "refresh_values_only".
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-disasm.c (struct tui_asm_line) <addr_string, insn>: Now
-	std::string.
-	(tui_disassemble): Add "pos" parameter.
-	(tui_disasm_window::set_contents): Simplify.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<show_source_content>: Now private.
-	* tui/tui-winsource.c
-	(tui_source_window_base::show_source_content): Don't handle empty
-	content case.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_source_disasm_command)
-	(show_source_or_disasm_and_command): Don't call
-	show_source_content.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.h (struct tui_locator_window) <make_status_line>:
-	Declare.
-	* tui/tui-stack.c (tui_locator_window::make_status_line): Rename
-	from tui_make_status_line.
-	(tui_locator_window::rerender): Update.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.c (tui_make_status_line): Return std::string.
-	(tui_locator_window::rerender): Update.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<~tui_source_window_base>: Don't declare.
-	<fullname>: Remove.
-	* tui/tui-winsource.c (~tui_source_window_base): Remove.
-	* tui/tui-source.h (struct tui_source_window) <fullname>: New
-	member.
-	* tui/tui-source.c (tui_source_window::set_contents): Update.
-	(tui_source_window::location_matches_p)
-	(tui_source_window::maybe_update): Update.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (~tui_source_element): Remove.
-	(tui_source_element): Update.
-	(struct tui_source_element) <line>: Now a unique_xmalloc_ptr.
-	* tui/tui-winsource.c (tui_show_source_line): Update.
-	* tui/tui-source.c (tui_source_window::set_contents): Update.
-	* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
-
-2019-09-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (tui_clear_source_windows_detail): Don't
-	declare.
-	* tui/tui-layout.c (tui_add_win_to_layout): Don't call
-	tui_clear_source_windows_detail.
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<clear_detail>: Don't declare.
-	* tui/tui-winsource.c (tui_source_window_base::clear_detail):
-	Remove.
-	* tui/tui-data.c (tui_clear_source_windows_detail): Remove.
-
-2019-09-20  Tom Tromey  <tromey@adacore.com>
-
-	PR ada/24919:
-	* block.c (contained_in): Fix final return value.
-
-2019-09-20  Alan Modra  <amodra@gmail.com>
-
-	* gdb_bfd.c (gdb_bfd_ref, gdb_bfd_unref): Use bfd_set_usrdata.
-	* dwarf2read.c (dwarf2_read_gdb_index, dwarf2_read_debug_names),
-	(read_indirect_string_from_dwz): Use bfd accessor.
-	* dwarf2read.h (struct dwz_file <filename>): Likewise.
-	* machoread.c (macho_symfile_read_all_oso): Likewise.
-	* solib.c (solib_bfd_open): Likewise.
-
-2019-09-19  Christian Biesinger  <cbiesinger@google.com>
-
-	* eval.c: Move declaration of overload_resolution to...
-	* value.h: ...here.
-
-2019-09-19  Christian Biesinger  <cbiesinger@google.com>
-
-	* arm-linux-nat.c: Remove extern declaration for arm_apcs_32.
-	* arm-linux-tdep.c: Likewise.
-	* arm-nbsd-nat.c: Likewise.
-	* arm-tdep.h: Declare arm_apcs_32.
-	* arm-tdep.c: Move documentation for arm_apcs_32 to arm-tdep.h.
-
-2019-09-19  Christian Biesinger  <cbiesinger@google.com>
-
-	* dwarf2loc.c: Remove extern declaration of dwarf_always_disassemble.
-	* dwarf2read.h: Declare dwarf_always_disassemble.
-
-2019-09-19  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/25009
-	* source-cache.c (source_cache::ensure): Catch exception thrown during
-	construction of the highlighter.
-
-2019-09-18  Alan Modra  <amodra@gmail.com>
-
-	* aarch64-linux-tdep.c, * arm-tdep.c, * auto-load.c,
-	* coff-pe-read.c, * coffread.c, * corelow.c, * dbxread.c,
-	* dicos-tdep.c, * dwarf2-frame.c, * dwarf2read.c, * elfread.c,
-	* exec.c, * fbsd-tdep.c, * gcore.c, * gdb_bfd.c, * gdb_bfd.h,
-	* hppa-tdep.c, * i386-cygwin-tdep.c, * i386-fbsd-tdep.c,
-	* i386-linux-tdep.c, * jit.c, * linux-tdep.c, * machoread.c,
-	* maint.c, * mdebugread.c, * minidebug.c, * mips-linux-tdep.c,
-	* mips-sde-tdep.c, * mips-tdep.c, * mipsread.c, * nto-tdep.c,
-	* objfiles.c, * objfiles.h, * osabi.c, * ppc-linux-tdep.c,
-	* ppc64-tdep.c, * record-btrace.c, * record-full.c, * remote.c,
-	* rs6000-aix-tdep.c, * rs6000-tdep.c, * s390-linux-tdep.c,
-	* s390-tdep.c, * solib-aix.c, * solib-dsbt.c, * solib-frv.c,
-	* solib-spu.c, * solib-svr4.c, * solib-target.c,
-	* spu-linux-nat.c, * spu-tdep.c, * symfile-mem.c, * symfile.c,
-	* symmisc.c, * symtab.c, * target.c, * windows-nat.c,
-	* xcoffread.c, * cli/cli-dump.c, * compile/compile-object-load.c,
-	* mi/mi-interp.c: Update throughout for bfd section macro and
-	function changes.
-	* gcore (gcore_create_callback): Use bfd_set_section_lma.
-	* spu-tdep.c (spu_overlay_new_objfile): Likewise.
-
-2019-09-18  Tom Tromey  <tom@tromey.com>
-
-	* NEWS: Add entry.
-	* tui/tui.c (tui_initialize_readline): Set name of keymap.  Do not
-	call rl_initialize.
-	(tui_enable): Do not call rl_initialize.
-
-2019-09-18  Christian Groessler  <chris@groessler.org>
-
-	* alpha-linux-nat.c: Include gdbarch.h.
-
-2019-09-18  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* ui-file.c: Include cli/cli-style.h.
-	(term_cli_styling): Remove cli_styling declaration.
-
-2019-09-18  Alan Modra  <amodra@gmail.com>
-
-	* arm-tdep.c (arm_record_special_symbol): Update bfd_get_section
-	to bfd_asymbol_section.
-
-2019-09-18  Alan Modra  <amodra@gmail.com>
-
-	* amd64-dicos-tdep.c (amd64_dicos_osabi_sniffer): Constify target.
-	* i386-cygwin-tdep.c (i386_cygwin_init_abi): Likewise.
-	* i386-dicos-tdep.c (i386_dicos_osabi_sniffer): Likewise.
-
-2019-09-18  Alan Modra  <amodra@gmail.com>
-
-	* solib-spu.c (spu_bfd_open): Use bfd_set_filename.
-	* spu-linux-nat.c (spu_bfd_open): Likewise.
-
-2019-09-18  Christian Biesinger  <cbiesinger@google.com>
-
-	* dwarf2loc.c: Change extern declaration of dwarf_always_disassemble
-	to bool to match definition in dwarf2read.c.
-
-2019-09-17  Christian Biesinger  <cbiesinger@google.com>
-
-	* ada-lang.c (ada_ignore_descriptive_types_p): Change to bool.
-	(print_signatures): Likewise.
-	(trust_pad_over_xvs): Likewise.
-	* arch/aarch64-insn.c (aarch64_debug): Likewise.
-	* arch/aarch64-insn.h (aarch64_debug): Likewise.
-	* arm-linux-nat.c (arm_apcs_32): Likewise.
-	* arm-linux-tdep.c (arm_apcs_32): Likewise.
-	* arm-nbsd-nat.c (arm_apcs_32): Likewise.
-	* arm-tdep.c (arm_debug): Likewise.
-	(arm_apcs_32): Likewise.
-	* auto-load.c (debug_auto_load): Likewise.
-	(auto_load_gdb_scripts): Likewise.
-	(global_auto_load): Likewise.
-	(auto_load_local_gdbinit): Likewise.
-	(auto_load_local_gdbinit_loaded): Likewise.
-	* auto-load.h (global_auto_load): Likewise.
-	(auto_load_local_gdbinit): Likewise.
-	(auto_load_local_gdbinit_loaded): Likewise.
-	* breakpoint.c (disconnected_dprintf): Likewise.
-	(breakpoint_proceeded): Likewise.
-	(automatic_hardware_breakpoints): Likewise.
-	(always_inserted_mode): Likewise.
-	(target_exact_watchpoints): Likewise.
-	(_initialize_breakpoint): Update.
-	* breakpoint.h (target_exact_watchpoints): Change to bool.
-	* btrace.c (maint_btrace_pt_skip_pad): Likewise.
-	* cli/cli-cmds.c (trace_commands): Likewise.
-	* cli/cli-cmds.h (trace_commands): Likewise.
-	* cli/cli-decode.c (add_setshow_boolean_cmd): Change int* argument
-	to bool*.
-	* cli/cli-logging.c (logging_overwrite): Change to bool.
-	(logging_redirect): Likewise.
-	(debug_redirect): Likewise.
-	* cli/cli-option.h (option_def) <boolean>: Change return type to bool*.
-	(struct boolean_option_def) <get_var_address_cb_>: Change return type
-	to bool.
-	<boolean_option_def>: Update.
-	(struct flag_option_def): Change default type of Context to bool
-	from int.
-	<flag_option_def>: Change return type of var_address_cb_ to bool*.
-	* cli/cli-setshow.c (do_set_command): Cast to bool* instead of int*.
-	(get_setshow_command_value_string): Likewise.
-	* cli/cli-style.c (cli_styling): Change to bool.
-	(source_styling): Likewise.
-	* cli/cli-style.h (source_styling): Likewise.
-	(cli_styling): Likewise.
-	* cli/cli-utils.h (struct qcs_flags) <quiet, cont, silent>: Change
-	to bool.
-	* command.h (var_types): Update comment.
-	(add_setshow_boolean_cmd): Change int* var argument to bool*.
-	* compile/compile-cplus-types.c (debug_compile_cplus_types): Change to
-	bool.
-	(debug_compile_cplus_scopes): Likewise.
-	* compile/compile-internal.h (compile_debug): Likewise.
-	* compile/compile.c (compile_debug): Likewise.
-	(struct compile_options) <raw>: Likewise.
-	* cp-support.c (catch_demangler_crashes): Likewise.
-	* cris-tdep.c (usr_cmd_cris_version_valid): Likewise.
-	(usr_cmd_cris_dwarf2_cfi): Likewise.
-	* csky-tdep.c (csky_debug): Likewise.
-	* darwin-nat.c (enable_mach_exceptions): Likewise.
-	* dcache.c (dcache_enabled_p): Likewise.
-	* defs.h (info_verbose): Likewise.
-	* demangle.c (demangle): Likewise.
-	(asm_demangle): Likewise.
-	* dwarf-index-cache.c (debug_index_cache): Likewise.
-	* dwarf2-frame.c (dwarf2_frame_unwinders_enabled_p): Likewise.
-	* dwarf2-frame.h (dwarf2_frame_unwinders_enabled_p): Likewise.
-	* dwarf2read.c (check_physname): Likewise.
-	(use_deprecated_index_sections): Likewise.
-	(dwarf_always_disassemble): Likewise.
-	* eval.c (overload_resolution): Likewise.
-	* event-top.c (set_editing_cmd_var): Likewise.
-	(exec_done_display_p): Likewise.
-	* event-top.h (set_editing_cmd_var): Likewise.
-	(exec_done_display_p): Likewise.
-	* exec.c (write_files): Likewise.
-	* fbsd-nat.c (debug_fbsd_lwp): Likewise
-	(debug_fbsd_nat): Likewise.
-	* frame.h (struct frame_print_options) <print_raw_frame_arguments>:
-	Likewise.
-	(struct set_backtrace_options) <backtrace_past_main>: Likewise.
-	<backtrace_past_entry> Likewise.
-	* gdb-demangle.h (demangle): Likewise.
-	(asm_demangle): Likewise.
-	* gdb_bfd.c (bfd_sharing): Likewise.
-	* gdbcore.h (write_files): Likewise.
-	* gdbsupport/common-debug.c (show_debug_regs): Likewise.
-	* gdbsupport/common-debug.h (show_debug_regs): Likewise.
-	* gdbthread.h (print_thread_events): Likewise.
-	* gdbtypes.c (opaque_type_resolution): Likewise.
-	(strict_type_checking): Likewise.
-	* gnu-nat.c (gnu_debug_flag): Likewise.
-	* guile/scm-auto-load.c (auto_load_guile_scripts): Likewise.
-	* guile/scm-param.c (pascm_variable): Add boolval.
-	(add_setshow_generic): Update.
-	(pascm_param_value): Update.
-	(pascm_set_param_value_x): Update.
-	* hppa-tdep.c (hppa_debug): Change to bool..
-	* infcall.c (may_call_functions_p): Likewise.
-	(coerce_float_to_double_p): Likewise.
-	(unwind_on_signal_p): Likewise.
-	(unwind_on_terminating_exception_p): Likewise.
-	* infcmd.c (startup_with_shell): Likewise.
-	* inferior.c (print_inferior_events): Likewise.
-	* inferior.h (startup_with_shell): Likewise.
-	(print_inferior_events): Likewise.
-	* infrun.c (step_stop_if_no_debug): Likewise.
-	(detach_fork): Likewise.
-	(debug_displaced): Likewise.
-	(disable_randomization): Likewise.
-	(non_stop): Likewise.
-	(non_stop_1): Likewise.
-	(observer_mode): Likewise.
-	(observer_mode_1): Likewise.
-	(set_observer_mode): Update.
-	(sched_multi): Change to bool.
-	* infrun.h (debug_displaced): Likewise.
-	(sched_multi): Likewise.
-	(step_stop_if_no_debug): Likewise.
-	(non_stop): Likewise.
-	(disable_randomization): Likewise.
-	* linux-tdep.c (use_coredump_filter): Likewise.
-	(dump_excluded_mappings): Likewise.
-	* linux-thread-db.c (auto_load_thread_db): Likewise.
-	(check_thread_db_on_load): Likewise.
-	* main.c (captured_main_1): Update.
-	* maint-test-options.c (struct test_options_opts) <flag_opt, xx1_opt,
-	xx2_opt, boolean_opt>: Change to bool.
-	* maint-test-settings.c (maintenance_test_settings_boolean): Likewise.
-	* maint.c (maintenance_profile_p): Likewise.
-	(per_command_time): Likewise.
-	(per_command_space): Likewise.
-	(per_command_symtab): Likewise.
-	* memattr.c (inaccessible_by_default): Likewise.
-	* mi/mi-main.c (mi_async): Likewise.
-	(mi_async_1): Likewise.
-	* mips-tdep.c (mips64_transfers_32bit_regs_p): Likewise.
-	* nat/fork-inferior.h (startup_with_shell): Likewise.
-	* nat/linux-namespaces.c (debug_linux_namespaces): Likewise.
-	* nat/linux-namespaces.h (debug_linux_namespaces): Likewise.
-	* nios2-tdep.c (nios2_debug): Likewise.
-	* or1k-tdep.c (or1k_debug): Likewise.
-	* parse.c (parser_debug): Likewise.
-	* parser-defs.h (parser_debug): Likewise.
-	* printcmd.c (print_symbol_filename): Likewise.
-	* proc-api.c (procfs_trace): Likewise.
-	* python/py-auto-load.c (auto_load_python_scripts): Likewise.
-	* python/py-param.c (union parmpy_variable): Add "bool boolval" field.
-	(set_parameter_value): Update.
-	(add_setshow_generic): Update.
-	* python/py-value.c (copy_py_bool_obj): Change argument from int*
-	to bool*.
-	* python/python.c (gdbpy_parameter_value): Cast to bool* instead of
-	int*.
-	* ravenscar-thread.c (ravenscar_task_support): Change to bool.
-	* record-btrace.c (record_btrace_target::store_registers): Update.
-	* record-full.c (record_full_memory_query): Change to bool.
-	(record_full_stop_at_limit): Likewise.
-	* record-full.h (record_full_memory_query): Likewise.
-	* remote-notif.c (notif_debug): Likewise.
-	* remote-notif.h (notif_debug): Likewise.
-	* remote.c (use_range_stepping): Likewise.
-	(interrupt_on_connect): Likewise.
-	(remote_break): Likewise.
-	* ser-tcp.c (tcp_auto_retry): Likewise.
-	* ser-unix.c (serial_hwflow): Likewise.
-	* skip.c (debug_skip): Likewise.
-	* solib-aix.c (solib_aix_debug): Likewise.
-	* spu-tdep.c (spu_stop_on_load_p): Likewise.
-	(spu_auto_flush_cache_p): Likewise.
-	* stack.c (struct backtrace_cmd_options) <full, no_filters, hide>:
-	Likewise.
-	(struct info_print_options) <quiet>: Likewise.
-	* symfile-debug.c (debug_symfile): Likewise.
-	* symfile.c (auto_solib_add): Likewise.
-	(separate_debug_file_debug): Likewise.
-	* symfile.h (auto_solib_add): Likewise.
-	(separate_debug_file_debug): Likewise.
-	* symtab.c (basenames_may_differ): Likewise.
-	(struct filename_partial_match_opts) <dirname, basename>: Likewise.
-	(struct info_print_options) <quiet, exclude_minsyms>: Likewise.
-	(struct info_types_options) <quiet>: Likewise.
-	* symtab.h (demangle): Likewise.
-	(basenames_may_differ): Likewise.
-	* target-dcache.c (stack_cache_enabled_1): Likewise.
-	(code_cache_enabled_1): Likewise.
-	* target.c (trust_readonly): Likewise.
-	(may_write_registers): Likewise.
-	(may_write_memory): Likewise.
-	(may_insert_breakpoints): Likewise.
-	(may_insert_tracepoints): Likewise.
-	(may_insert_fast_tracepoints): Likewise.
-	(may_stop): Likewise.
-	(auto_connect_native_target): Likewise.
-	(target_stop_and_wait): Update.
-	(target_async_permitted): Change to bool.
-	(target_async_permitted_1): Likewise.
-	(may_write_registers_1): Likewise.
-	(may_write_memory_1): Likewise.
-	(may_insert_breakpoints_1): Likewise.
-	(may_insert_tracepoints_1): Likewise.
-	(may_insert_fast_tracepoints_1): Likewise.
-	(may_stop_1): Likewise.
-	* target.h (target_async_permitted): Likewise.
-	(may_write_registers): Likewise.
-	(may_write_memory): Likewise.
-	(may_insert_breakpoints): Likewise.
-	(may_insert_tracepoints): Likewise.
-	(may_insert_fast_tracepoints): Likewise.
-	(may_stop): Likewise.
-	* thread.c (struct info_threads_opts) <show_global_ids>: Likewise.
-	(make_thread_apply_all_options_def_group): Change argument from int*
-	to bool*.
-	(thread_apply_all_command): Update.
-	(print_thread_events): Change to bool.
-	* top.c (confirm): Likewise.
-	(command_editing_p): Likewise.
-	(history_expansion_p): Likewise.
-	(write_history_p): Likewise.
-	(info_verbose): Likewise.
-	* top.h (confirm): Likewise.
-	(history_expansion_p): Likewise.
-	* tracepoint.c (disconnected_tracing): Likewise.
-	(circular_trace_buffer): Likewise.
-	* typeprint.c (print_methods): Likewise.
-	(print_typedefs): Likewise.
-	* utils.c (debug_timestamp): Likewise.
-	(sevenbit_strings): Likewise.
-	(pagination_enabled): Likewise.
-	* utils.h (sevenbit_strings): Likewise.
-	(pagination_enabled): Likewise.
-	* valops.c (overload_resolution): Likewise.
-	* valprint.h (struct value_print_options) <prettyformat_arrays,
-	prettyformat_structs, vtblprint, unionprint, addressprint, objectprint,
-	stop_print_at_null, print_array_indexes, deref_ref, static_field_print,
-	pascal_static_field_print, raw, summary, symbol_print, finish_print>:
-	Likewise.
-	* windows-nat.c (new_console): Likewise.
-	(cygwin_exceptions): Likewise.
-	(new_group): Likewise.
-	(debug_exec): Likewise.
-	(debug_events): Likewise.
-	(debug_memory): Likewise.
-	(debug_exceptions): Likewise.
-	(useshell): Likewise.
-	* windows-tdep.c (maint_display_all_tib): Likewise.
-	* xml-support.c (debug_xml): Likewise.
-
-2019-09-17  Mike Gulick  <mgulick@mathworks.com>
-
-	* source.c (prepare_path_for_appending): New function.
-	(openp): Make use of new function.
-	(find_and_open_source): Search for the compilation directory and
-	source file as a relative path beneath the directory search path.
-
-2019-09-17  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* source-cache.c (source_cache::get_line_charpos): Catch
-	exceptions and return false, this matches the behaviour documented
-	in the header file.
-
-2019-09-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* ada-tasks.c (info_task): Remove quoting of the task's name.
-
-2019-09-16  Christian Biesinger  <cbiesinger@google.com>
-
-	* symfile.c (auto_solib_add): Replace comment with a reference
-	to the header file.
-
-2019-09-14  Christian Biesinger  <cbiesinger@google.com>
-
-	* NEWS: Mention that gdb can now be compiled with Python 3
-	on Windows.
-
-2019-09-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* maint.c (maint_print_section_data::maint_print_section_data):
-	Force use of 'float log10 (float)' by casting the argument to
-	float.
-
-2019-09-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* maint.c: Add 'cmath' include.
-	(struct maint_print_section_data): New structure.
-	(print_section_index): New function.
-	(print_bfd_section_info): Add header comment, small whitespace
-	cleanup, and update to call new print_section_index function.
-	(print_objfile_section_info): Likewise.
-	(maint_obj_section_from_bfd_section): New function.
-	(print_bfd_section_info_maybe_relocated): New function.
-	(maintenance_info_sections): Add header comment, always use
-	bfd_map_over_sections instead of ALL_OBJFILE_OSECTIONS.
-
-2019-09-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* psymtab.c (find_pc_sect_psymtab): Move baseaddr local into more
-	inner scope, add check that the objfile has psymtabs before
-	checking psymtabs_addrmap.
-	* psymtab.h (psymtab_storage) <psymtabs_addrmap>: Extend comment.
-
-2019-09-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* NEWS: Announce that Ada task names are now shown at more places,
-	and between quotes (except in info task output).
-	* gdb/ada-tasks.c (task_to_str): New function.
-	(display_current_task_id): Call task_to_str.
-	(task_command_1): Likewise.
-	(print_ada_task_info): In non-mi mode, Properly align headers and data
-	when task-id length is > 9 (9 is the default for a 32 bits CORE_ADDR).
-
-2019-09-12  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
-
-	* procfs.c (procfs_target::wait) <PR_FAULTED>: Get signal from
-	prstatus.pr_lwp.pr_info instead of making it up.
-
-2019-09-11  Christian Biesinger  <cbiesinger@google.com>
-
-	* auto-load.c (auto_load_expand_dir_vars): Update.
-	* defs.h (gdb_datadir): Change to std::string.
-	(python_libdir): Likewise.
-	(relocate_gdb_directory): Change return type to std::string.
-	* guile/guile.c (gdbscm_data_directory): Update.
-	(initialize_scheme_side): Update.
-	* jit.c (jit_reader_dir): Change to std::string.
-	(jit_reader_load_command): Update.
-	* main.c (gdb_datadir): Change to std::string.
-	(python_libdir): Likewise.
-	(set_gdb_data_directory): Update.
-	(relocate_path): Change to return std::string.
-	(relocate_gdb_directory): Change to return std::string.
-	(relocate_gdbinit_path_maybe_in_datadir): Update.
-	(captured_main_1): Update.
-	* python/python.c (do_start_initialization): Update.
-	* top.c (show_gdb_datadir): Update.
-	* xml-syscall.c (xml_init_syscalls_info): Update.
-	(init_syscalls_info): Update.
-
-2019-09-11  Christian Biesinger  <cbiesinger@google.com>
-
-	* main.c (relocate_gdbinit_path_maybe_in_datadir): Factor this code
-	out of get_init_files.
-	(get_init_files): Update.
-
-2019-09-11  Christian Biesinger  <cbiesinger@google.com>
-
-	* main.c (get_init_files): Change to use std::string.
-	(captured_main_1): Update.
-	(print_gdb_help): Update.
-
-2019-09-11  Ali Tamur  <tamur@google.com>
-
-	*gdb/target-float.c (host_float_ops<T>::to_longest): Update
-	implementation.
-
-2019-09-11  Christian Biesinger  <cbiesinger@google.com>
-
-	* dbxread.c (read_dbx_symtab): Update.
-	* dwarf2read.c (load_partial_dies): Update.
-	* mdebugread.c (parse_partial_symbols): Update.
-	(handle_psymbol_enumerators): Update.
-	* psympriv.h (add_psymbol_to_list): Change type of copy_names to bool.
-	* psymtab.c (add_psymbol_to_bcache): Likewise.
-	(add_psymbol_to_list): Likewise.
-	* symtab.c (symbol_set_names): Likewise.
-	* symtab.h (symbol_set_names): Likewise.
-	* xcoffread.c (scan_xcoff_symtab): Update.
-
-2019-09-11  Tom Tromey  <tom@tromey.com>
-
-	* symfile-mem.c (symbol_file_add_from_memory): Use
-	bfd_set_filename.
-	* solib-darwin.c (darwin_bfd_open): Use bfd_set_filename.
-	* solib-aix.c (solib_aix_bfd_open): Use bfd_set_filename.
-
-2019-09-10  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf-index-write.c (write_psymbols): Extend error message.
-	(debug_names::insert): Add Ada code.
-	(debug_names::write_psymbols): Remove Ada check.
-	(debug_names) <m_string_obstack>: New member.
-	* dwarf2read.c (gdb_index_symbol_name_matcher): Remove.
-	(gdb_index_symbol_name_matcher::matches): Remove.
-	(mapped_index_base::find_name_components_bounds): Add "lang"
-	parameter.
-	(mapped_index_base::build_name_components): Also split names
-	according to Ada syntax.
-	(dw2_expand_symtabs_matching_symbol): Loop over languages.  Change
-	type of "match_callback".
-	(check_match, check_find_bounds_finds)
-	(dw2_expand_symtabs_matching): Update.
-	(dw2_debug_names_iterator): Add new constructor.
-	(dw2_debug_names_map_matching_symbols): New function.
-	(dw2_debug_names_expand_symtabs_matching): Update.
-	(dwarf2_debug_names_functions): Use
-	dw2_debug_names_map_matching_symbols.
-
-2019-09-10  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.c (dw2_get_file_names_reader): Add the
-	CU's file name to the results.
-
-2019-09-10  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (add_nonlocal_symbols): Combine calls to
-	map_matching_symbols.  Update.
-	* dwarf2read.c (dw2_map_matching_symbols): Update.
-	* psymtab.c (match_partial_symbol): Change type; update.
-	(psym_map_matching_symbols): Likewise.
-	* symfile-debug.c (debug_qf_map_matching_symbols): Change
-	type; update.
-	* symfile.h (struct quick_symbol_functions)
-	<map_matching_symbols>: Change "name" to be a lookup_name_info.
-	Remove "match".
-
-2019-09-10  Tom Tromey  <tromey@adacore.com>
-
-	* psymtab.c (map_block): Remove.
-	(psym_map_matching_symbols): Use iterate_over_symbols_terminated.
-	* symtab.c (iterate_over_symbols_terminated): New function.
-	* symtab.c (iterate_over_symbols_terminated): Declare.
-
-2019-09-10  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_iterate_over_symbols): Return bool.
-	* language.h (struct language_defn) <la_iterate_over_symbols>:
-	Return bool.
-	* symtab.c (iterate_over_symbols): Return bool.
-	* symtab.h (iterate_over_symbols): Return bool.
-
-2019-09-10  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (aux_add_nonlocal_symbols): Change type.
-	(add_nonlocal_symbols): Update.
-	* dwarf2read.c (dw2_map_matching_symbols): Change type.
-	* psymtab.c (map_block, psym_map_matching_symbols): Change type.
-	* symfile-debug.c (debug_qf_map_matching_symbols): Change type.
-	* symfile.h (struct quick_symbol_functions) <map_matching_symbols>:
-	Change type of "callback".  Remove "data".
-
-
-2019-09-09  Ali Tamur  <tamur@google.com>
-
-	* dwarf2read.c (comp_unit_head): Update comment.                     
-	(dwarf2_dwo_name): New function declaration.                             
-	(dwarf_unit_type_name): New function declaration.                        
-	(read_comp_unit_head): Add support for new compilation units,            
-	DW_UT_partial, DW_UT_skeleton, DW_UT_split_compile, DW_UT_split_type.    
-	Particularly, DW_UT_skeleton and DW_UT_split_compile have dwo_id         
-	(currently named as "signature") in their header. Also clarify error     
-	messages.                                                                
-	(lookup_dwo_id): New function. Returns the dwo id of the given           
-	compile unit.                                                            
-	(lookup_dwo_unit): Use the new lookup_dwo_id function.                   
-	(init_cutu_and_read_dies): Use the new dwarf2_dwo_name and lookup_dwo_id 
-	functions.                                                               
-	(create_dwo_cu_reader): Use the added lookup_dwo_id function.            
-	(dwarf2_dwo_name): Get the dwo name if present.                          
-	(dwarf_unit_type_name): Convert DW_UT_* types to string for diagnostic   
-	purposes.
-
-2019-09-09  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_all_windows_info): Use ui_out.
-
-2019-09-09  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* python/python.c (do_start_initialization): Make progname_copy static,
-	to avoid a leak report.
-
-2019-09-08  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (box_win): Truncate long window titles.
-
-2019-09-07  Simon Marchi  <simon.marchi@efficios.com>
-
-	* dwarf2read.c (struct dw2_symtab_iterator) <block_index>:
-	Change type to gdb::optional<block_enum>.
-	(dw2_symtab_iter_init): Change block_index parameter type
-	to gdb::optional<block_enum>.
-	(dw2_lookup_symbol): Change block_index parameter
-	type to block_enum.c
-	(dw2_debug_names_lookup_symbol): Likewise.
-	* psymtab.c (psym_lookup_symbol): Likewise.
-	* symfile-debug.c (debug_qf_lookup_symbol): Likewise.
-	* symfile.h (struct quick_symbol_functions) <lookup_symbol>:
-	Likewise.
-
-2019-09-06  Christian Biesinger  <cbiesinger@google.com>
-
-	* defs.h (relocate_gdb_directory): Change int to bool in
-	signature and rename flag to relocatable.
-	* main.c (relocate_path): Likewise.
-	(relocate_gdb_directory): Likewise.
-
-2019-09-06  Alan Modra  <amodra@gmail.com>
-
-	* coffread.c (coff_symfile_read): Constify filename variable.
-	* dbxread.c (dbx_symfile_init, coffstab_build_psymtabs),
-	(elfstab_build_psymtabs, stabsect_build_psymtabs): Likewise.
-	* gdb_bfd.c (gdb_bfd_close_or_warn): Likewise.
-	* solib.c (reload_shared_libraries_1): Likewise.
-	* symfile.c (reread_symbols): Likewise.
-	* solib-aix.c (solib_aix_bfd_open): Add cast for xfree of filename.
-	* solib-darwin.c (darwin_bfd_open): Likewise.
-	* symfile-mem.c (symbol_file_add_from_memory): Likewise.
-
-2019-09-03  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* psymtab.c (print_partial_symbols): Handle missing domain_enum
-	values MODULE_DOMAIN and COMMON_BLOCK_DOMAIN.
-
-2019-09-03  Tom Tromey  <tromey@adacore.com>
-
-	* ada-valprint.c (ada_val_print_num): Don't recurse for range
-	types.
-	(has_negatives): Unbias a range type bound.
-	* dwarf2read.c (read_subrange_type): Handle DW_AT_GNU_bias.
-	* gdbtypes.c (operator==): Handle new field.
-	(create_range_type): Add "bias" parameter.
-	(create_static_range_type, resolve_dynamic_range): Update.
-	* gdbtypes.h (struct range_bounds) <bias>: New member.
-	(create_range_type): Add bias parameter.
-	* printcmd.c (print_scalar_formatted): Unbias range types.
-	* value.c (unpack_long): Unbias range types.
-	(pack_long): Bias range types.
-
-2019-09-02  Alan Hayward  <alan.hayward@arm.com>
-
-	* solib-svr4.c (svr4_find_and_create_probe_breakpoints): Check all
-	probe arguments.
-
-2019-09-02  Alan Hayward  <alan.hayward@arm.com>
-
-	* break-catch-throw.c (fetch_probe_arguments): Use gdbarch.
-	* dtrace-probe.c (dtrace_probe::get_argument_count): Likewise.
-	* probe.c (probe_safe_evaluate_at_pc) (compute_probe_arg)
-	(compile_probe_arg): Likewise.
-	* probe.h (get_argument_count): Likewise.
-	* solib-svr4.c (solib_event_probe_action): Likewise.
-	* stap-probe.c (stap_probe::get_argument_count): Likewise.
-
-2019-09-02  Alan Hayward  <alan.hayward@arm.com>
-
-	* solib-svr4.c (svr4_find_and_create_probe_breakpoints): Move
-	code to here...
-	(svr4_create_solib_event_breakpoints): ...from here.
-
-2019-08-30  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* nat/fork-inferior.c (trace_start_error): Remove "\nError: "
-	suffix from warning message.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<refresh_all>: Don't declare.
-	* tui/tui-winsource.c (tui_source_window_base::refresh_all):
-	Remove.
-	* tui/tui-win.c (tui_refresh_all_win): Don't call refresh_all or
-	tui_show_locator_content.
-	* tui/tui-regs.h (struct tui_data_window) <refresh_all>: Don't
-	declare.
-	* tui/tui-regs.c (tui_data_window::refresh_all): Remove.
-	* tui/tui-data.h (struct tui_win_info) <refresh_all>: Don't
-	declare.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-io.c (tui_cont_sig): Don't call wrefresh.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.c (_initialize_tui_stack): Move later.
-	Remove unnecessary forward declarations.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.c (tui_locator_window::set_locator_fullname): Call
-	rerender.
-	(tui_update_locator_fullname, tui_show_frame_info): Don't call
-	tui_show_locator_content.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.c (tui_show_locator_content): Move lower.  Rewrite.
-	(tui_locator_window::rerender): Rewrite using body of previous
-	tui_show_locator_content.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.h (struct tui_locator_window) <set_locator_info,
-	set_locator_fullname>: New methods.
-	* tui/tui-stack.c (tui_locator_window::set_locator_fullname):
-	Rename from tui_set_locator_fullname.
-	(tui_locator_window::set_locator_info): Rename from
-	tui_set_locator_info.  Return bool.
-	(tui_update_locator_fullname, tui_show_frame_info): Update.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_layout): Don't call tui_refresh_all.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Don't
-	call touchwin.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (box_win): Assume win_info and
-	win_info->handle cannot be NULL.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_item_window) <rerender,
-	refresh_window>: Declare.
-	* tui/tui-regs.c (tui_data_window::display_registers_from): Call
-	resize.
-	(tui_data_item_window::rerender): Rename from
-	tui_display_register.
-	(tui_data_item_window::refresh_window): New method.
-	* tui/tui-layout.c (tui_gen_win_info::resize): Do nothing on
-	no-op.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_window) <regs_content,
-	regs_column_count, current_group>: Move later.  Now private.
-	<get_current_group>: New method.
-	* tui/tui-regs.c (tui_reg_command): Update.
-	* tui/tui-layout.c (tui_set_layout): Update.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_data_window::display_registers_from_line)
-	(tui_data_window::rerender): Don't call
-	check_and_display_highlight_if_needed.
-	(tui_data_window::refresh_all): Remove call to
-	erase_data_content.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_data_window::last_regs_line_no)
-	(tui_data_window::display_registers_from)
-	(tui_data_window::display_reg_element_at_line)
-	(tui_data_window::display_registers_from_line): Remove checks of
-	"empty".
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_window) <display_all_data>:
-	Don't declare.
-	* tui/tui-regs.c (tui_data_window::show_registers): Call
-	rerender.
-	(tui_data_window::rerender): Rename from display_all_data.
-	(tui_data_window::rerender): Remove old implementation.
-
-2019-08-30  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_data_window::display_all_data): Change
-	text.
-	* tui/tui-data.h (NO_DATA_STRING): Remove define.
-
-2019-08-29  Bernhard Wodok  <barto@gmx.net>
-	    Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR win32/24284
-	* mingw-hdep.c (gdb_select): Handle case when 'n' is zero.
-
-2019-08-28  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* symtab.c (search_symbols): Don't include MODULE_DOMAIN symbols
-	when searching for types.
-
-2019-08-28  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-lang.c (f_language_defn): Use f_print_typedef.
-	* f-lang.h (f_print_typedef): Declare.
-	* f-typeprint.c (f_print_typedef): Define.
-
-2019-08-27  Christian Biesinger  <cbiesinger@google.com>
-
-	* nat/linux-namespaces.c (mnsh_main): Initialize fd (to -1).
-
-2019-08-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* cli/cli-utils.c (info_print_options_defs): Delete.
-	(make_info_print_options_def_group): Delete.
-	(extract_info_print_options): Delete.
-	(info_print_command_completer): Delete.
-	(info_print_args_help): Add extra parameter, and optionally
-	include text about -n flag.
-	* cli/cli-utils.h (struct info_print_options): Delete.
-	(extract_info_print_options): Delete declaration.
-	(info_print_command_completer): Delete declaration.
-	(info_print_args_help): Add extra parameter, extend header
-	comment.
-	* python/python.c (gdbpy_rbreak): Pass additional parameter to
-	search_symbols.
-	* stack.c (struct info_print_options): New type.
-	(info_print_options_defs): New file scoped variable.
-	(make_info_print_options_def_group): New static function.
-	(info_print_command_completer): New static function.
-	(info_locals_command): Update to use new local functions.
-	(info_args_command): Likewise.
-	(_initialize_stack): Add extra parameter to calls to
-	info_print_args_help.
-	* symtab.c (search_symbols): Add extra parameter, use this to
-	possibly excluse non-debug symbols.
-	(symtab_symbol_info): Add extra parameter, which is passed on to
-	search_symbols.
-	(struct info_print_options): New type.
-	(info_print_options_defs): New file scoped variable.
-	(make_info_print_options_def_group): New static function.
-	(info_print_command_completer): New static function.
-	(info_variables_command): Update to use local functions, and pass
-	extra parameter through to symtab_symbol_info.
-	(info_functions_command): Likewise.
-	(info_types_command): Pass additional argument through to
-	symtab_symbol_info.
-	(rbreak_command): Pass extra argument to search_symbols.
-	(_initialize_symtab): Add extra arguments for calls to
-	info_print_args_help, and update help text for 'info variables',
-	'whereis', and 'info functions' commands.
-	* symtab.h (search_symbols): Add extra argument to declaration.
-	* NEWS: Mention new flags.
-
-2019-08-26  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.c (lookup_static_symbol): Call the new function (and move
-	it down to be next to lookup_global_symbol).
-	(struct global_sym_lookup_data): Add block_enum member and rename to...
-	(struct global_or_static_sym_lookup_data): ...this.
-	(lookup_symbol_global_iterator_cb): Pass block_index instead of
-	GLOBAL_BLOCK to lookup_symbol_in_objfile and rename to...
-	(lookup_symbol_global_or_static_iterator_cb): ...this.
-	(lookup_global_or_static_symbol): New function.
-	(lookup_global_symbol): Call new function.
-
-2019-08-26  Tom de Vries  <tdevries@suse.de>
-
-	PR c++/24852
-	* break-catch-throw.c (fetch_probe_arguments): Improve error mesage
-	when pc_probe.prob == NULL.
-
-2019-08-25  Simon Marchi  <simon.marchi@efficios.com>
-
-	* dwarf2read.c (dw2_debug_names_iterator::next): Rename local
-	variable symbol_linkage to symbol_linkage_.
-
-2019-08-25  Simon Marchi  <simon.marchi@efficios.com>
-
-	* dwarf2read.c (dw2_debug_names_iterator::next): Use enum to
-	represent whether the symbol is static, dynamic, or we don't
-	know.
-
-2019-08-25  Yoshinori Sato <ysato@users.sourceforge.jp>
-
-        * gdb/rx-tdep.c (rx_register_names): New.
-        (rx_register_name): Delete.
-        (rx_psw_type): Delete.
-        (rx_fpsw_type): Delete.
-        (rx_register_type): Delete.
-        (rx_gdbarch_init): Convert target-descriptions.
-        (_initialize_rx_tdep): Add initialize_tdesc_rx.
-        * gdb/features/Makefile: Add rx.xml.
-        * gdb/features/rx.xml: New.
-        * gdb/features/rx.c: Generated.
-        * gdb/NEWS: Mention target description support.
-
-2019-08-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.c (symbol_cache_lookup): Always initialize *bsc_ptr and
-	*slot_ptr.
-
-2019-08-23  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* configure.ac: Don't check for 'dlfcn.h' (moved to
-	gdbsupport/common.m4).
-	* Makefile.in (COMMON_SFILES): Move 'gdb-dlfcn.c' to
-	'gdbsupport/'.
-	(HFILES_NO_SRCDIR): Likewise, for 'gdb-dlfcn.h'.
-	* compile/compile-c-support.c: Include
-	'gdbsupport/gdb-dlfcn.h'.
-	* gdbsupport/common.m4: Check for 'dlfcn.h'.
-	* gdb-dlfcn.c: Move to...
-	* gdbsupport/gdb-dlfcn.c: ... here.
-	* gdb-dlfcn.h: Move to...
-	* gdbsupport/gdb-dlfcn.h: ... here.
-
-2019-08-23  Sandra Loosemore  <sandra@codesourcery.com>
-
-	* nios2-tdep.c (struct reg_value): Improve comments.  Make
-	the offset field signed.
-
-2019-08-22  Christian Biesinger  <cbiesinger@google.com>
-
-	* python/lib/gdb/__init__.py (_execute_file): New function.
-	* python/python.c (python_run_simple_file): Call gdb._execute_file
-	on Windows.
-
-2019-08-22  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-exp.y (yylex): Remove is_a_field_of_this local variable, and
-	all uses as this was never set to anything but a zero value.
-
-2019-08-21  Bogdan Harjoc  <harjoc@gmail.com>
-
-	* cli/cli-cmds.c (with_command_1): Error out if no arguments.
-
-2019-08-21  Christian Biesinger  <cbiesinger@google.com>
-
-	* tui/tui-data.h (tui_gen_win_info): Add an =default
-	move constructor, required by some GCC versions.
-
-2019-08-21  Jinke Fan  <fanjinke51@yeah.net>
-
-	* go32-nat.c (go32_sysinfo): Add hygon_p.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_window) <last_regs_line_no,
-	line_from_reg_element_no, first_reg_element_no_inline,
-	display_all_data, delete_data_content_windows,
-	erase_data_content>: Now private.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (box_win): Change type of highlight_flag.
-	(tui_unhighlight_win, tui_highlight_win)
-	(tui_win_info::make_window): Update.
-	* tui/tui-data.h (HILITE, NO_HILITE): Remove.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (PROC_PREFIX, LINE_PREFIX, PC_PREFIX)
-	(MIN_LINE_WIDTH, MIN_PROC_WIDTH, MAX_TARGET_WIDTH)
-	(MAX_PID_WIDTH): Move to tui-stack.c.
-	* tui/tui-stack.c (PROC_PREFIX, LINE_PREFIX, PC_PREFIX)
-	(MIN_LINE_WIDTH, MIN_PROC_WIDTH, MAX_TARGET_WIDTH)
-	(MAX_PID_WIDTH): Move from tui-data.h.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h (tui_make_window): Don't declare.
-	* tui/tui-wingeneral.c (box_win): Change type of win_info.
-	(box_win): Update.
-	(tui_gen_win_info::make_window): Rename from tui_make_window.
-	(tui_win_info::make_window): New method.
-	(tui_gen_win_info::make_visible): Update.
-	* tui/tui-source.c (tui_source_window::set_contents): Update.
-	* tui/tui-regs.c (tui_data_window::show_register_group): Update.
-	(tui_data_window::display_registers_from): Update.
-	* tui/tui-layout.c (tui_gen_win_info::resize): Update.
-	* tui/tui-data.h (struct tui_gen_win_info) <make_window>:
-	Declare.
-	<can_box>: Remove.
-	<title>: Remove.
-	(struct tui_win_info) <make_window>: Declare.
-	<can_box>: Now virtual.
-	<title>: New member.
-	* tui/tui-data.c (~tui_gen_win_info): Don't free title.
-	* tui/tui-command.c (tui_cmd_window::resize): Update.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_window) <display_regs>: Remove.
-	* tui/tui-regs.c (tui_data_window::show_registers): Update.
-	(tui_data_window::check_register_values): Update.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_window): Use
-	DISABLE_COPY_AND_ASSIGN.
-	<regs_content>: Change type, removing unique_ptr.
-	<tui_data_window>: Add move constructor.
-	* tui/tui-regs.c (tui_data_window::show_registers)
-	(tui_data_window::show_register_group)
-	(tui_data_window::display_registers_from)
-	(tui_data_window::display_registers_from)
-	(tui_data_window::first_data_item_displayed)
-	(tui_data_window::delete_data_content_windows)
-	(tui_data_window::rerender, tui_data_window::refresh_window)
-	(tui_data_window::check_register_values): Update.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_window) <show_registers,
-	show_register_group>: Declare.
-	(tui_show_register_group): Don't declare.
-	* tui/tui-regs.c (tui_data_window::show_registers): Rename from
-	tui_show_registers.
-	(tui_data_window::show_register_group): Rename from
-	tui_show_register_group.
-	(tui_data_window::check_register_values, tui_reg_command):
-	Update.
-	* tui/tui-layout.c (tui_set_layout): Update.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_window) <check_register_values>:
-	Declare.
-	(tui_check_register_values): Don't declare.
-	* tui/tui-regs.c (tui_data_window::check_register_values): Rename
-	from tui_check_register_values.
-	* tui/tui-hooks.c (tui_register_changed): Update.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_reg_layout): Move later.
-	(tui_show_registers): Don't enable TUI mode or change layout.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_item_window)
-	<~tui_data_item_window>: Remove.
-	<content>: Now a unique_xmalloc_ptr.
-	* tui/tui-regs.c (tui_register_format): Return a
-	unique_xmalloc_ptr.
-	(tui_get_register): Update.
-	(~tui_data_item_window): Remove.
-	(tui_data_window::display_registers_from, tui_display_register):
-	Update.
-	* tui/tui-io.h (tui_expand_tabs): Update.
-	* tui/tui-io.c (tui_expand_tabs): Return a unique_xmalloc_ptr.
-	Remove "col" parameter.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_item_window) <value>: Remove
-	field.
-	* tui/tui-regs.c (~tui_data_item_window): Update.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_register_format, tui_get_register): Move
-	earlier.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_reg_command): Remove NULL check.
-
-2019-08-20  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-source.h (struct tui_source_window): Update.
-	* tui/tui-regs.c (tui_show_registers): Update.
-	* tui/tui-disasm.h (struct tui_disasm_window): Update.
-	* tui/tui-data.h (NO_SRC_STRING, NO_DISASSEM_STRING)
-	(NO_REGS_STRING): Remove defines.
-
-2019-08-20  Conrad Meyer  <cem@FreeBSD.org>
-
-	* remote.c (remote_target::remote_btrace_maybe_reopen): Avoid
-	unnecessary thread walk if remote doesn't support the packet.
-
-2019-08-19  Tom Tromey  <tromey@adacore.com>
-
-	* python/py-value.c (value_has_field): Fix indentation.
-
-2019-08-19  Tom Tromey  <tromey@adacore.com>
-
-	* printcmd.c (do_one_display, info_display_command): Update.
-	* block.h (contained_in): Return bool.  Add allow_nested
-	parameter.
-	* block.c (contained_in): Return bool.  Add allow_nested
-	parameter.
-
-2019-08-19  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-	* configure.ac: Disallow the combination of -static-libstdc++ and
-	source highlight.
-	* source-cache.c (get_language_name): Handle rust.
-	(source_cache::get_source_lines): Ignore highlighting exceptions.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.h (enum tui_win_type) <EXEC_INFO_WIN>: Remove.
-	* tui/tui-winsource.h (struct tui_exec_info_window): Remove.
-	(struct tui_source_window_base) <make_visible, refresh_window,
-	resize>: Remove methods.
-	<execution_info>: Remove field.
-	* tui/tui-winsource.c (tui_source_window_base::do_erase_source_content)
-	(tui_show_source_line, tui_source_window_base)
-	(~tui_source_window_base): Update.
-	(tui_source_window_base::resize)
-	(tui_source_window_base::make_visible)
-	(tui_source_window_base::refresh_window): Remove.
-	(tui_source_window_base::update_exec_info): Update.
-	* tui/tui-source.c (tui_source_window::set_contents): Update.
-	* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-hooks.c (tui_remove_hooks): Don't set
-	deprecated_query_hook.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_update_source_windows_with_addr)
-	(tui_update_source_windows_with_line): Update.
-	* tui/tui-source.h (struct tui_source_window)
-	<show_symtab_source>: Declare.
-	(tui_show_symtab_source): Don't declare.
-	* tui/tui-source.c (tui_show_symtab_source): Rename from
-	tui_show_symtab_source.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<set_contents>: Declare.
-	* tui/tui-winsource.c
-	(tui_source_window_base::update_source_window_as_is): Update.
-	* tui/tui-source.h (struct tui_source_window) <set_contents>:
-	Declare.
-	(tui_set_source_content): Don't declare.
-	* tui/tui-source.c (tui_source_window::set_contents): Rename from
-	tui_set_source_content.
-	* tui/tui-disasm.h (struct tui_disasm_window) <set_contents>:
-	Declare.
-	(tui_set_disassem_content): Don't declare.
-	* tui/tui-disasm.c (tui_disasm_window::set_contents): Rename from
-	tui_set_disassem_content.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<update_breakpoint_info>: Declare.
-	(tui_update_breakpoint_info): Don't declare.
-	* tui/tui-winsource.c (tui_source_window_base::update_source_window_as_is)
-	(tui_update_all_breakpoint_info): Update.
-	(tui_source_window_base::update_breakpoint_info): Rename from
-	tui_update_breakpoint_info.
-	(tui_source_window_base::update_exec_info): Update.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<update_source_window>: Declare.
-	(tui_update_source_window): Don't declare.
-	* tui/tui-winsource.c
-	(tui_source_window_base::update_source_window): Rename from
-	tui_update_source_window.
-	(tui_source_window_base::rerender): Update.
-	* tui/tui-source.c (tui_source_window::maybe_update): Update.
-	* tui/tui-disasm.c (tui_show_disassem)
-	(tui_show_disassem_and_update_source)
-	(tui_disasm_window::maybe_update): Update.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<update_source_window_as_is>: Declare.
-	(tui_update_source_window_as_is): Don't declare.
-	* tui/tui-winsource.c (tui_update_source_window): Update
-	(tui_source_window_base::update_source_window_as_is): Rename from
-	tui_update_source_window_as_is.
-	(tui_source_window_base::refill): Update.
-	* tui/tui-source.c (tui_show_symtab_source): Update.
-	* tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical):
-	Update.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_update_source_window)
-	(tui_update_source_window_as_is): Remove "noerror" parameter.
-	* tui/tui-winsource.c (tui_update_source_window)
-	(tui_update_source_window_as_is): Remove "noerror" parameter.
-	(tui_update_source_windows_with_addr)
-	(tui_update_source_windows_with_line)
-	(tui_source_window_base::rerender)
-	(tui_source_window_base::refill): Update.
-	* tui/tui-source.h (tui_set_source_content)
-	(tui_show_symtab_source): Remove "noerror" parameter.
-	* tui/tui-source.c (tui_set_source_content): Remove "noerror"
-	parameter.
-	(tui_show_symtab_source): Likewise.
-	(tui_source_window::maybe_update): Update.
-	* tui/tui-disasm.c (tui_show_disassem)
-	(tui_show_disassem_and_update_source)
-	(tui_disasm_window::do_scroll_vertical)
-	(tui_disasm_window::maybe_update): Update.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c (tui_is_window_visible): Update.
-	* tui/tui-wingeneral.c (tui_make_window)
-	(tui_gen_win_info::make_visible, tui_refresh_all): Update.
-	* tui/tui-win.c (window_name_completer, tui_refresh_all_win)
-	(tui_set_focus_command, tui_all_windows_info, update_tab_width)
-	(tui_set_win_height_command, parse_scrolling_args): Update.
-	* tui/tui-source.c (tui_source_window::style_changed): Update.
-	* tui/tui-regs.c (tui_show_registers)
-	(tui_data_window::first_data_item_displayed)
-	(tui_data_window::delete_data_content_windows)
-	(tui_check_register_values, tui_reg_command): Update.
-	* tui/tui-disasm.c (tui_show_disassem): Update.
-	* tui/tui-data.h (struct tui_gen_win_info) <is_visible>: New
-	method.
-	<is_visible>: Remove field.
-	* tui/tui-data.c (tui_next_win, tui_prev_win)
-	(tui_delete_invisible_windows): Update.
-
-2019-08-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<m_has_locator>: Remove.
-	* tui/tui-layout.c (show_source_disasm_command, show_data)
-	(show_source_or_disasm_and_command): Update.
-
-2019-08-16  Alan Hayward  <alan.hayward@arm.com>
-
-	* NEWS (Other MI changes): New subsection.
-	* aarch64-tdep.c (aarch64_get_pc_address_flags): New function.
-	(aarch64_gdbarch_init): Add aarch64_get_pc_address_flags.
-	* arch-utils.c (default_get_pc_address_flags): New function.
-	* arch-utils.h (default_get_pc_address_flags): New declaration.
-	* gdbarch.sh: Add get_pc_address_flags.
-	* gdbarch.c: Regenerate.
-	* gdbarch.h: Likewise.
-	* stack.c (print_pc): New function.
-	(print_frame_info) (print_frame): Call print_pc.
-
-2019-08-16  Tom de Vries  <tdevries@suse.de>
-
-	* maint.c (maintenance_info_sections): Also handle !ALLOBJ case using
-	print_objfile_section_info.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-io.c (tui_puts_internal): Check TUI_CMD_WIN before
-	calling update_cmdwin_start_line.
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<do_make_visible_with_new_height, set_new_height>: Don't declare.
-	<rerender>: Declare.
-	* tui/tui-winsource.c (tui_source_window_base::update_tab_width):
-	Call rerender.
-	(tui_source_window_base::set_new_height): Remove.
-	(tui_source_window_base::rerender): Rename from
-	do_make_visible_with_new_height.
-	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Use
-	resize method.
-	(tui_win_info::make_invisible_and_set_new_height)
-	(tui_win_info::make_visible_with_new_height): Remove.
-	* tui/tui-stack.h (struct tui_locator_window) <rerender>:
-	Declare.
-	* tui/tui-stack.c (tui_locator_window::rerender): New method.
-	* tui/tui-regs.h (struct tui_data_window) <set_new_height,
-	do_make_visible_with_new_height>: Don't declare.
-	<rerender>: Declare.
-	* tui/tui-regs.c (tui_data_window::rerender): Rename from
-	set_new_height.
-	(tui_data_window::do_make_visible_with_new_height): Remove.
-	* tui/tui-layout.c (show_source_disasm_command, show_data): Don't
-	call tui_show_locator_content.
-	(tui_gen_win_info::resize): Call rerender.
-	(show_source_or_disasm_and_command): Don't call
-	tui_show_locator_content.
-	* tui/tui-data.h (struct tui_gen_win_info) <rerender>: New
-	method.
-	(struct tui_win_info) <rerender>: Declare.
-	<set_new_height, make_invisible_and_set_new_height,
-	make_visible_with_new_height>: Don't declare.
-	* tui/tui-data.c (tui_win_list::rerender): New method.
-	* tui/tui-command.h (struct tui_cmd_window)
-	<do_make_visible_with_new_height>: Don't declare.
-	* tui/tui-command.c
-	(tui_cmd_window::do_make_visible_with_new_height): Remove.
-
-2019-08-15  Tom Tromey  <tromey@adacore.com>
-
-	* ada-exp.y (convert_char_literal): Handle "Q%c" encoding.
-	* ada-lang.c (ada_enum_name): Likewise.
-
-2019-08-15  Christian Biesinger  <cbiesinger@google.com>
-
-	* python/lib/gdb/__init__.py (GdbOutputFile): Rename to have a
-	leading underscore.
-	(GdbOutputErrorFile): Likewise.
-	(global scope): Adjust constructor calls to GdbOutput{,Error}File
-	accordingly.
-	(execute_unwinders): Rename to have a leading underscore.
-	(auto_load_packages): Likewise.
-	(global scope): Adjust call to auto_load_packages accordingly.
-	(GdbSetPythonDirectory): Likewise.
-	* python/py-unwind.c (pyuw_sniffer): Call _execute_unwinders
-	instead of execute_unwinders.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_layout, show_source_disasm_command)
-	(show_data): Don't change window visibility.
-	(tui_gen_win_info::resize): Remove special case for command
-	window.  Use wresize, when available.
-	(show_source_or_disasm_and_command): Don't change window
-	visibility.
-	* tui/tui-command.h (struct tui_cmd_window) <resize>: Declare.
-	<make_visible>: New method.
-	* tui/tui-command.c (tui_cmd_window::resize): New method.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_iterator): New.
-	(struct tui_source_windows): New.
-	* tui/tui-winsource.c (tui_display_main): Update.
-	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
-	(new_height_ok, parse_scrolling_args): Update.
-	* tui/tui-layout.c (show_layout, show_data): Update.
-	* tui/tui-data.h (tui_source_windows, tui_clear_source_windows)
-	(tui_add_to_source_windows): Don't declare.
-	* tui/tui-data.c (source_windows, tui_source_windows)
-	(tui_clear_source_windows, tui_add_to_source_windows): Remove.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base) <resize>:
-	Rename from reset.
-	* tui/tui-winsource.c (tui_source_window_base::resize): Rename.
-	* tui/tui-layout.c (show_source_disasm_command, show_data):
-	Update.
-	(tui_gen_win_info::resize): Rename.
-	(show_source_or_disasm_and_command): Update.
-	* tui/tui-data.h (struct tui_gen_win_info) <resize>: Rename from
-	reset.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.c (tui_initialize_static_data): Remove.
-	* tui/tui-interp.c (tui_interp::init): Don't call
-	tui_initialize_static_data.
-	* tui/tui-data.h (tui_initialize_static_data): Don't declare.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (tui_default_win_viewport_height): Don't
-	examine tui_win_list.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_clear_source_content): Don't declare.
-	* tui/tui-winsource.c (tui_update_source_window_as_is): Don't call
-	tui_clear_source_content.
-	(tui_clear_source_content): Remove.
-	(tui_source_window_base::do_erase_source_content): Hoist call to
-	content.clear().
-	* tui/tui-stack.c (tui_show_frame_info): Don't call
-	tui_clear_source_content.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<do_erase_source_content>: New method.
-	<erase_source_content>: New method.
-	(tui_erase_source_content): Don't declare.
-	* tui/tui-winsource.c (tui_clear_source_content): Update.
-	(tui_source_window_base::do_erase_source_content): Rename from
-	tui_erase_source_content.
-	(tui_source_window_base::show_source_content): Update.
-	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update.
-	* tui/tui-source.h (struct tui_source_window)
-	<erase_source_content>: New method.
-	* tui/tui-disasm.h (struct tui_disasm_window)
-	<erase_source_content>: New method.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_alloc_source_buffer): Don't declare.
-	(struct tui_source_element): Add DISABLE_COPY_AND_ASSIGN, and move
-	constructor.
-	* tui/tui-winsource.c (tui_alloc_source_buffer): Remove.
-	* tui/tui-source.c (tui_set_source_content): Update.
-	* tui/tui-disasm.c (tui_set_disassem_content): Update.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_line_is_displayed): Don't declare.
-	* tui/tui-winsource.c (tui_line_is_displayed): Move to
-	tui-source.c.
-	* tui/tui-source.h (struct tui_source_window) <line_is_displayed>:
-	Declare.
-	* tui/tui-source.c (tui_source_window::line_is_displayed): New
-	method.
-	(tui_source_window::maybe_update): Update.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_addr_is_displayed): Don't declare.
-	* tui/tui-winsource.c (tui_addr_is_displayed): Move to
-	tui-disasm.c.
-	* tui/tui-disasm.h (struct tui_disasm_window) <addr_is_displayed>:
-	Declare.
-	* tui/tui-disasm.c (tui_disasm_window::addr_is_displayed): New
-	method.
-	(tui_disasm_window::maybe_update): Update.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<maybe_update>: Declare.
-	* tui/tui-stack.c (tui_show_frame_info): Call maybe_update
-	method.
-	* tui/tui-source.h (struct tui_source_window) <maybe_update>:
-	Declare.
-	* tui/tui-source.c (tui_source_window::maybe_update): New method.
-	* tui/tui-disasm.h (struct tui_disasm_window) <maybe_update>:
-	Declare.
-	* tui/tui-disasm.c (tui_disasm_window::maybe_update): New method.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.c (tui_make_status_line): Use string constructor.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c: Include tui-stack.h.
-	* tui/tui-stack.h (MAX_LOCATOR_ELEMENT_LEN)
-	(struct tui_locator_window): Move from tui-data.h.
-	* tui/tui-stack.c (_locator, tui_locator_win_info_ptr)
-	(tui_initialize_static_data): Move from tui-data.c.
-	* tui/tui-data.h (MAX_LOCATOR_ELEMENT_LEN)
-	(struct tui_locator_window): Move to tui-stack.c.
-	* tui/tui-data.c (_locator, tui_locator_win_info_ptr)
-	(tui_initialize_static_data): Move to tui-stack.c.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_source_disasm_command)
-	(show_source_or_disasm_and_command): Use make_visible method, not
-	tui_make_window.
-	* tui/tui-command.h (struct tui_cmd_window) <make_visible>:
-	Remove.
-
-2019-08-15  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h (tui_make_window): Update.
-	* tui/tui-wingeneral.c (tui_make_window): Remove "box_it"
-	parameter.
-	(tui_gen_win_info::make_visible): Update.
-	* tui/tui-regs.c (tui_data_window::display_registers_from):
-	Update.
-	* tui/tui-layout.c (show_source_disasm_command)
-	(show_source_or_disasm_and_command): Update.
-	* tui/tui-data.h (struct tui_gen_win_info) <can_box>: New method.
-	(enum tui_box): Remove.
-	(struct tui_win_info) <can_box>: New method.
-	* tui/tui-command.h (struct tui_cmd_window) <can_box>: New
-	method.
-
-2019-08-15  Tom de Vries  <tdevries@suse.de>
-
-	* linux-nat-trad.c: Include gdbarch.h.
-
-2019-08-14  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c (aarch64_analyze_prologue): Allow any valid
-	register sizes.
-
-2019-08-14  Tom Tromey  <tromey@adacore.com>
-
-	* darwin-nat.c: Include gdbarch.h.
-	* darwin-nat-info.c: Include gdbarch.h.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (struct tui_gen_win_info) <last_visible_line>:
-	Remove.
-	* tui/tui-data.c (tui_initialize_static_data): Update.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_exec_info_window)
-	<~tui_exec_info_window, maybe_allocate_content, get_content,
-	m_content>: Remove.
-	(struct tui_source_window_base) <set_exec_info_content,
-	show_exec_info_content>: Don't declare.
-	* tui/tui-winsource.c
-	(tui_exec_info_window::maybe_allocate_content): Remove.
-	(tui_source_window_base::update_exec_info): Rename from
-	set_exec_info_content.
-	(tui_source_window_base::show_exec_info_content)
-	(tui_source_window_base::update_exec_info): Remove.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_clear_exec_info_content): Don't
-	declare.
-	* tui/tui-winsource.c (tui_update_source_window_as_is)
-	(tui_update_source_windows_with_addr, tui_erase_source_content):
-	Update.
-	(tui_clear_exec_info_content): Remove.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_erase_exec_info_content): Don't
-	declare.
-	* tui/tui-winsource.c (tui_source_window_base::refresh_all): Don't
-	call tui_erase_exec_info_content.
-	(tui_clear_exec_info_content): Rename from
-	tui_erase_exec_info_content.
-	(tui_clear_exec_info_content): Delete.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<show_exec_info_content>: Declare.
-	(tui_show_exec_info_content): Don't declare.
-	* tui/tui-winsource.c
-	(tui_source_window_base::show_exec_info_content): Rename from
-	tui_show_exec_info_content.
-	(tui_source_window_base::update_exec_info): Update.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (enum tui_bp_flag, tui_bp_flags, struct tui_source_element)
-	(TUI_BP_HIT_POS, TUI_BP_BREAK_POS, TUI_EXEC_POS)
-	(TUI_EXECINFO_SIZE, tui_exec_info_content): Move ...
-	* tui/tui-winsource.h (enum tui_bp_flag, tui_bp_flags, struct
-	tui_source_element, TUI_BP_HIT_POS, TUI_BP_BREAK_POS)
-	(TUI_EXEC_POS, TUI_EXECINFO_SIZE, tui_exec_info_content):
-	... here.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<update_exec_info>: Declare.
-	(tui_update_exec_info): Don't declare.
-	* tui/tui-winsource.c (tui_update_source_window_as_is)
-	(tui_source_window_base::refresh_all)
-	(tui_update_all_breakpoint_info): Update.
-	(tui_source_window_base::update_exec_info): Rename from
-	tui_update_exec_info.
-	* tui/tui-stack.c (tui_show_frame_info): Update.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<set_exec_info_content>: Declare.
-	(tui_set_exec_info_content): Don't declare.
-	* tui/tui-winsource.c
-	(tui_source_window_base::set_exec_info_content): Rename from
-	tui_set_exec_info_content.
-	(tui_update_exec_info): Update.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<show_source_content>: Declare.
-	(tui_show_source_content): Don't declare.
-	* tui/tui-winsource.c (tui_update_source_window_as_is): Update.
-	(tui_source_window_base::show_source_content): Rename from
-	tui_show_source_content.
-	(tui_source_window_base::refresh_all): Update.
-	* tui/tui-layout.c (show_source_disasm_command)
-	(show_source_or_disasm_and_command): Update.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_erase_source_content)
-	(tui_show_source_content, tui_source_window_base::refresh_all):
-	Update.
-	* tui/tui-wingeneral.h
-	(tui_check_and_display_highlight_if_needed): Don't declare.
-	* tui/tui-wingeneral.c
-	(tui_win_info::check_and_display_highlight_if_needed): Rename from
-	check_and_display_highlight_if_needed.
-	* tui/tui-win.c (tui_rehighlight_all)
-	(tui_win_info::make_visible_with_new_height): Update.
-	* tui/tui-regs.c (tui_data_window::display_registers_from_line)
-	(tui_data_window::erase_data_content)
-	(tui_data_window::display_all_data): Update.
-	* tui/tui-data.h (struct tui_win_info)
-	<check_and_display_highlight_if_needed>: Declare.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_resize_all): Call
-	tui_delete_invisible_windows.
-	* tui/tui-layout.c (show_layout): Call
-	tui_delete_invisible_windows.
-	* tui/tui-data.h (tui_delete_invisible_windows): Declare.
-	* tui/tui-data.c (tui_delete_invisible_windows): New function.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-disasm.c (tui_show_disassem): Add assertion.  Don't call
-	tui_add_win_to_layout.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.h (tui_default_win_height): Don't declare.
-	* tui/tui-layout.c (tui_default_win_height): Now static.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_layout): Unify all layout cases into a
-	single switch.
-	(show_source_disasm_command, show_source_or_disasm_and_command):
-	Don't check current layout.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (make_all_visible): Remove.
-	(tui_make_all_invisible): Simplify.
-	* tui/tui-layout.c (tui_make_all_invisible): Move from
-	tui-wingeneral.c; simplify.
-	(show_layout): Hoist call to tui_make_all_invisible.
-	(show_data): Don't call tui_make_all_invisible.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h (tui_make_all_visible): Don't declare.
-	* tui/tui-wingeneral.c (tui_make_all_visible): Remove.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (current_layout, tui_current_layout): Move from
-	tui-data.c.
-	(show_source_disasm_command, show_data)
-	(show_source_or_disasm_and_command): Don't use
-	tui_set_current_layout_to.
-	* tui/tui-data.h (tui_set_current_layout_to): Don't declare.
-	* tui/tui-data.c (current_layout, tui_current_layout): Move to
-	tui-layout.c.
-	(tui_set_current_layout_to): Remove.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (tui_set_layout): Update.
-	* tui/tui-data.h (struct tui_layout_def): Remove.
-	(tui_layout_def): Don't declare.
-	* tui/tui-data.c (layout_def): Remove.
-	(tui_layout_def): Remove.
-
-2019-08-13  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_source_window_base)
-	<clear_detail>: No longer "override".
-	* tui/tui-regs.h (struct tui_data_window) <clear_detail>: Remove.
-	* tui/tui-regs.c (tui_data_window::clear_detail): Remove.
-	* tui/tui-data.h (struct tui_win_info) <clear_detail>: Remove.
-	* tui/tui-command.h (struct tui_cmd_window) <clear_detail>:
-	Remove.
-	* tui/tui-command.c (tui_cmd_window::clear_detail): Remove.
-
-2019-08-13  Tom Tromey  <tromey@adacore.com>
-
-	* tracepoint.c: Don't include readline.h or history.h.
-
-2019-08-12  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-	* configure.ac: Check for readline 7.
-	* NEWS: Mention readline 7 requirement.
-	* README: Update.
-
-2019-08-12  Tom Tromey  <tom@tromey.com>
-
-	* mingw-hdep.c (gdb_select): Remove readline hack.
-
-2019-08-09  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* blockframe.c (find_pc_partial_function): Set *block to nullptr
-	when the function fails.
-
-2019-08-09  Andreas Arnez  <arnez@linux.ibm.com>
-
-	* s390-tdep.c (s390_type_align): New function.
-	(s390_gdbarch_init): Set it as type_align gdbarch method.
-
-2019-08-09  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/24591
-	* dwarf2read.c (dwarf2_fetch_die_loc_sect_off): Adjust pc_high and
-	pc_low with relocation offset.
-
-2019-08-07  Tom Tromey  <tromey@adacore.com>
-
-	* stack.c (print_frame_arg, read_frame_local, read_frame_arg)
-	(print_frame_args): Update.
-	* python/py-framefilter.c (py_print_single_arg, enumerate_args):
-	Update.
-	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
-	* frame.h (struct frame_arg): Add initializers.
-	<error>: Now a unique_xmalloc_ptr.
-
-2019-08-07  Alan Hayward  <alan.hayward@arm.com>
-
-	* NEWS: Expand the Pointer Authentication entry.
-	* aarch64-tdep.c (aarch64_frame_unmask_address): Rename from this.
-	(aarch64_frame_unmask_lr): ... to this.
-	(aarch64_prologue_prev_register, aarch64_dwarf2_prev_register):
-	Call aarch64_frame_unmask_lr.
-	* frame.c (struct frame_info): Add "masked" variable.
-	(frame_set_previous_pc_masked) (frame_get_pc_masked): New functions.
-	(fprint_frame): Check for masked pc.
-	* frame.h (frame_set_previous_pc_masked) (frame_get_pc_masked): New
-	declarations.
-	* python/py-framefilter.c (py_print_frame): Check for masked pc.
-	* stack.c (print_frame): Check for masked pc.
-
-2019-08-06  Tom Tromey  <tom@tromey.com>
-
-	* stabsread.c (patch_block_stabs, read_one_struct_field)
-	(read_enum_type): Use obstack_strndup.
-	* rust-exp.y (rust_parser::copy_name): Use obstack_strndup.
-	* gdb_obstack.h (obstack_strndup): Use obstack_strndup.
-	* dwarf2read.c (guess_full_die_structure_name)
-	(anonymous_struct_prefix): Use obstack_strndup.
-	* dbxread.c (cp_set_block_scope): Use obstack_strndup.
-	* c-exp.y (yylex): Use obstack_strndup.
-	* ada-exp.y (write_object_renaming, write_ambiguous_var)
-	(write_var_or_type): Use obstack_strndup.
-
-2019-08-06  Tom Tromey  <tom@tromey.com>
-
-	* symfile.c (reread_symbols): Use obstack_strdup.
-	* stabsread.c (read_type): Use obstack_strdup.
-	* gdb_obstack.h (obstack_strdup): New overload.
-	* dwarf2read.c (dwarf2_compute_name, create_dwo_unit_in_dwp_v1)
-	(create_dwo_unit_in_dwp_v2, build_error_marker_type)
-	(dwarf2_canonicalize_name): Use obstack_strdup.
-	* dbxread.c (read_dbx_symtab): Use obstack_strdup.
-	* cp-support.c (inspect_type, replace_typedefs_qualified_name):
-	Use obstack_strdup.
-
-2019-08-06  Tom Tromey  <tom@tromey.com>
-
-	* gdb_obstack.h (obstack_strdup): Define.
-	* gdb_obstack.c (obstack_strdup): Don't define.
-
-2019-08-06  Tom Tromey  <tom@tromey.com>
-
-	* xcoffread.c (SYMNAME_ALLOC, process_xcoff_symbol): Use
-	obstack_strdup.
-	* typeprint.c (typedef_hash_table::find_global_typedef): Use
-	obstack_strdup.
-	* symfile.c (allocate_compunit_symtab): Use obstack_strdup.
-	* stabsread.c (common_block_start): Use obstack_strdup.
-	* objfiles.c (set_objfile_main_name, objfile): Use
-	obstack_strdup.
-	* namespace.c (add_using_directive): Use obstack_strdup.
-	* mdebugread.c (parse_symbol, parse_type): Use obstack_strdup.
-	* jit.c (finalize_symtab): Use obstack_strdup.
-	* dwarf2read.c (fixup_go_packaging, dwarf2_physname)
-	(guess_partial_die_structure_name, partial_die_info::fixup)
-	(dwarf2_name): Use obstack_strdup.
-	* coffread.c (coff_read_struct_type, coff_read_enum_type): Use
-	obstack_strdup.
-	* c-exp.y (scan_macro_expansion): Use obstack_strdup.
-	* buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Use
-	obstack_strdup.
-	* ada-lang.c (ada_decode_symbol): Use obstack_strdup.
-
-2019-08-07  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* unittests/help-doc-selftests.c: New file.
-	* Makefile.in: Add the new file.
-
-2019-08-07  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* cli/cli-decode.h (print_doc_line): Add for_value_prefix argument.
-	* cli/cli-decode.c (print_doc_line): Likewise.  It now prints
-	the full first line, except when FOR_VALUE_PREFIX.  In this case,
-	the trailing '.' is not output, and the first character is uppercased.
-	(print_help_for_command): Update call to print_doc_line.
-	(print_doc_of_command): Likewise.
-	* cli/cli-setshow.c (deprecated_show_value_hack): Likewise.
-	* cli/cli-option.c (append_indented_doc): Do not append newline.
-	(build_help_option): Append newline after first appended_indented_doc
-	only if a second call is done.
-	(build_help): Append 2 new lines before each option, except the first
-	one.
-	* compile/compile.c (_initialize_compile): Add new lines after
-	%OPTIONS%, when not at the end of the help.
-	Change help doc or code
-	producing the help doc to respect the invariants.
-	* maint-test-options.c (_initialize_maint_test_options): Likewise.
-	Also removed the new line after 'Options:', as all other commands
-	do not put an empty line between 'Options:' and the first option.
-	* printcmd.c (_initialize_printcmd): Likewise.
-	* stack.c (_initialize_stack): Likewise.
-	* interps.c (interpreter_exec_cmd): Fix "Usage:" line that was
-	incorrectly telling COMMAND is optional.
-	* ada-lang.c (_initialize_ada_language): Change help doc or code
-	producing the help doc to respect the invariants.
-	* ada-tasks.c (_initialize_ada_tasks): Likewise.
-	* breakpoint.c (_initialize_breakpoint): Likewise.
-	* cli/cli-cmds.c (_initialize_cli_cmds): Likewise.
-	* cli/cli-logging.c (_initialize_cli_logging): Likewise.
-	* cli/cli-setshow.c (_initialize_cli_setshow): Likewise.
-	* cli/cli-style.c (cli_style_option::add_setshow_commands,
-	_initialize_cli_style): Likewise.
-	* corelow.c (core_target_info): Likewise.
-	* dwarf-index-cache.c (_initialize_index_cache): Likewise.
-	* dwarf2read.c (_initialize_dwarf2_read): Likewise.
-	* filesystem.c (_initialize_filesystem): Likewise.
-	* frame.c (_initialize_frame): Likewise.
-	* gnu-nat.c (add_task_commands): Likewise.
-	* infcall.c (_initialize_infcall): Likewise.
-	* infcmd.c (_initialize_infcmd): Likewise.
-	* interps.c (_initialize_interpreter): Likewise.
-	* language.c (_initialize_language): Likewise.
-	* linux-fork.c (_initialize_linux_fork): Likewise.
-	* maint-test-settings.c (_initialize_maint_test_settings): Likewise.
-	* maint.c (_initialize_maint_cmds): Likewise.
-	* memattr.c (_initialize_mem): Likewise.
-	* printcmd.c (_initialize_printcmd): Likewise.
-	* python/lib/gdb/function/strfns.py (_MemEq, _StrLen, _StrEq,
-	_RegEx): Likewise.
-	* ravenscar-thread.c (_initialize_ravenscar): Likewise.
-	* record-btrace.c (_initialize_record_btrace): Likewise.
-	* record-full.c (_initialize_record_full): Likewise.
-	* record.c (_initialize_record): Likewise.
-	* regcache-dump.c (_initialize_regcache_dump): Likewise.
-	* regcache.c (_initialize_regcache): Likewise.
-	* remote.c (add_packet_config_cmd, init_remote_threadtests,
-	_initialize_remote): Likewise.
-	* ser-tcp.c (_initialize_ser_tcp): Likewise.
-	* serial.c (_initialize_serial): Likewise.
-	* skip.c (_initialize_step_skip): Likewise.
-	* source.c (_initialize_source): Likewise.
-	* stack.c (_initialize_stack): Likewise.
-	* symfile.c (_initialize_symfile): Likewise.
-	* symtab.c (_initialize_symtab): Likewise.
-	* target-descriptions.c (_initialize_target_descriptions): Likewise.
-	* top.c (init_main): Likewise.
-	* tracefile-tfile.c (tfile_target_info): Likewise.
-	* tracepoint.c (_initialize_tracepoint): Likewise.
-	* tui/tui-win.c (_initialize_tui_win): Likewise.
-	* utils.c (add_internal_problem_command): Likewise.
-	* valprint.c (value_print_option_defs): Likewise.
-
-2019-08-06  Frank Ch. Eigler  <fche@redhat.com>
-
-	PR build/24886
-	* configure.ac: Drop enable-libmcheck support.
-	* configure, config.in: Rebuild.
-	* libmcheck.m4: Remove.
-	* acinclude.m4: Don't include it.
-	* Makefile.in: Don't distribute it.
-	* top.c (print_gdb_configuration): Don't mention it.
-
-2019-08-06  Tom Tromey  <tom@tromey.com>
-
-	* utils.c (set_output_style): Sometimes pass stream to
-	emit_style_escape.
-	* ui-out.h (class ui_out) <can_emit_style_escape>: Declare.
-	* record-btrace.c (btrace_insn_history): Update.
-	* mi/mi-out.h (class mi_ui_out) <can_emit_style_escape>: New
-	method.
-	* disasm.h (gdb_pretty_print_disassembler): Add uiout parameter.
-	Update initializers.
-	<m_uiout>: New field.
-	<m_di>: Move lower.
-	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
-	Remove "uiout" parameter.
-	(dump_insns): Update.
-	* cli-out.h (class cli_ui_out) <can_emit_style_escape>: Declare.
-	* cli-out.c (cli_ui_out::can_emit_style_escape): New method.
-
-2019-08-06  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.c (symbol_cache_lookup): Change int to enum block_enum.
-	(error_in_psymtab_expansion): Likewise.
-	(lookup_symbol_via_quick_fns): Likewise.
-	(basic_lookup_transparent_type_quick): Likewise.
-	(basic_lookup_transparent_type_1): Likewise.
-
-2019-08-06  Tom Tromey  <tromey@adacore.com>
-
-	* source.c (last_source_error): Now bool.
-	(print_source_lines_base): Make "noprint" bool.  Only open
-	source file when last_source_visited changes.
-
-2019-08-06  Tom Tromey  <tromey@adacore.com>
-
-	* annotate.c (annotate_source_line): Use g_source_cache.
-	* source-cache.c (source_cache::get_plain_source_lines): Change
-	parameters.  Populate m_offset_cache.
-	(source_cache::ensure): New method.
-	(source_cache::get_line_charpos): New method.
-	(extract_lines): Move lower.  Change parameters.
-	(source_cache::get_source_lines): Move lower.
-	* source-cache.h (class source_cache): Update comment.
-	<get_line_charpos>: New method.
-	<get_source_lines>: Update comment.
-	<clear>: Clear m_offset_cache.
-	<get_plain_source_lines>: Change parameters.
-	<ensure>: New method
-	<m_offset_cache>: New member.
-	* source.c (forget_cached_source_info_for_objfile): Update.
-	(info_source_command): Use g_source_cache.
-	(find_source_lines, open_source_file_with_line_charpos): Remove.
-	(print_source_lines_base, search_command_helper): Use g_source_cache.
-	* source.h (open_source_file_with_line_charpos): Don't declare.
-	* symtab.h (struct symtab) <nlines, line_charpos>: Remove.
-	* tui/tui-source.c (tui_source_window::do_scroll_vertical):
-	Use g_source_cache.
-
-2019-08-06  Tom Tromey  <tromey@adacore.com>
-
-	* source-cache.c (source_cache::get_plain_source_lines):
-	Remove "first_line" and "last_line" parameters.
-	(source_cache::get_source_lines): Cache plain text.
-	* source-cache.h (class source_cache)
-	<get_plain_source_lines>: Update.
-
-2019-08-06  Tom Tromey  <tromey@adacore.com>
-
-	* source-cache.c (extract_lines): No longer a method.
-	Changed type of parameter.  Include final newline.
-	(selftests::extract_lines_test): New function.
-	(_initialize_source_cache): Likewise.
-	* source-cache.h (class source_cache)
-	<extract_lines>: Don't declare.
-
-2019-08-06  Tom Tromey  <tromey@adacore.com>
-
-	* breakpoint.c (init_breakpoint_sal): Update.
-	(breakpoint): Update.
-	* breakpoint.h (struct breakpoint) <filter>: Now a
-	unique_xmalloc_ptr.
-
-2019-08-05  Christian Biesinger  <cbiesinger@google.com>
-
-	* NEWS: Mention dictionary access on blocks.
-	* python/py-block.c (blpy_getitem): New function.
-	(block_object_as_mapping): New struct.
-	(block_object_type): Use new struct for tp_as_mapping field.
-
-2019-08-05  Christian Biesinger  <cbiesinger@google.com>
-
-	* objfiles.h (objfile): Add a comment describing partial symbols.
-
-2019-08-05  Tom Tromey  <tromey@adacore.com>
-
-	* compile/compile.c (_initialize_compile): Use _(), not N_().
-	* thread.c (_initialize_thread): Use _(), not N_().
-	* stack.c (_initialize_stack): Use _(), not N_().
-	* printcmd.c (_initialize_printcmd): Use _(), not N_().
-
-2019-08-04  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* dwarf2read.c (struct dw2_symtab_iterator):
-	<want_specific_block>: Remove.
-	<block_index>: Change type to gdb::optional.
-	(dw2_symtab_iter_init): Remove WANT_SPECIFIC_BLOCK parameter,
-	change type of BLOCK_INDEX parameter to gdb::optional.
-	(dw2_symtab_iter_next): Re-write in function of gdb::optional.
-	(dw2_lookup_symbol): Don't pass argument for
-	WANT_SPECIFIC_BLOCK.
-	(dw2_expand_symtabs_for_function): Don't pass argument for
-	WANT_SPECIFIC_BLOCK, pass empty optional for BLOCK_INDEX.
-	(class dw2_debug_names_iterator)
-	<dw2_debug_names_iterator>: Remove WANT_SPECIFIC_BLOCK
-	parameter, change BLOCK_INDEX type to gdb::optional.
-	<m_want_specific_block>: Remove.
-	<m_block_index>: Change type to gdb::optional.
-	(dw2_debug_names_iterator::next): Change type of IS_STATIC to
-	gdb::optional.  Re-write in function of gdb::optional.
-	(dw2_debug_names_lookup_symbol): Don't pass argument for
-	WANT_SPECIFIC_BLOCK.
-	(dw2_debug_names_expand_symtabs_for_function): Don't pass
-	argument for WANT_SPECIFIC_BLOCK, pass empty optional for
-	BLOCK_INDEX.
-
-2019-08-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-        * NEWS: Mention changes to "info sources" command.
-
-2019-08-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* symtab.c (filename_partial_match_opts): New struct type.
-	(struct output_source_filename_data): New members
-	regexp, c_regexp, partial_match.
-	(output_source_filename): Use new members to decide to print file.
-	(info_sources_option_defs): New variable.
-	(make_info_sources_options_def_group, print_info_sources_header,
-	info_sources_command_completer):
-	New functions.
-	(info_sources_command): Read new optional arguments.
-	(_initialize_symtab): Update info sources help.
-
-2019-08-02  Alexandre Oliva <oliva@adacore.com>
-
-	* ada-lang.c (exception_support_info_v0): Renamed from...
-	(default_exception_support_info): ... this.  Create new
-	definition for v1.
-	(ada_has_this_exception_support): Look up catch_handlers_sym.
-	(ada_exception_support_info_sniffer): Try v0 after default.
-
-2019-08-01  Tom Tromey  <tromey@adacore.com>
-
-	* ia64-libunwind-tdep.h (struct libunwind_descr): Include
-	gdbarch.h.
-
-2019-08-01  Christian Biesinger  <cbiesinger@google.com>
-
-	* s12z-tdep.c: Fix include path for s12z-opc.h.
-
-2019-08-01  Alan Hayward  <alan.hayward@arm.com>
-
-	* NEWS: Require GNU make 3.82.
-
-2019-07-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h (tui_copy_win, tui_box_win): Don't
-	declare.
-
-2019-07-30  Tom Tromey  <tromey@adacore.com>
-
-	* block.c (contained_in): Remove BLOCK_FUNCTION check.
-
-2019-07-30  Kevin Buettner  <kevinb@redhat.com>
-
-	* printcmd.c (print_address_symbolic): Print negative offsets.
-	(build_address_symbolic): Force signed arithmetic when computing
-	offset.
-
-2019-07-30  Christian Biesinger  <cbiesinger@google.com>
-
-	PR/24474: Add a function to lookup static variables.
-	* NEWS: Mention this new function.
-	* python/py-symbol.c (gdbpy_lookup_static_symbol): New function.
-	* python/python-internal.h (gdbpy_lookup_static_symbol): New function.
-	* python/python.c (python_GdbMethods): Add new function.
-
-2019-07-29  Christian Biesinger  <cbiesinger@google.com>
-
-	* NEWS: Mention new functions Objfile.lookup_{global,static}_symbol.
-	* python/py-objfile.c (objfpy_lookup_global_symbol): New function.
-	(objfpy_lookup_static_symbol): New function.
-	(objfile_object_methods): Add new functions.
-
-2019-07-29  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* NEWS: Mention 'set|show print frame-info'.  Mention new
-	'presence' value for 'frame-arguments'.  Mention new '-frame-info'
-	backtrace argument.  Mention that python frame filtering code
-	is now consistent with what 'backtrace' command prints.
-
-2019-07-29  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* frame.h (enum print_what): New value 'SHORT_LOCATION', update
-	comments.
-	(print_frame_info_auto, print_frame_info_source_line,
-	print_frame_info_location, print_frame_info_source_and_location,
-	print_frame_info_location_and_address, print_frame_info_short_location):
-	New declarations.
-	(struct frame_print_options): New member print_frame_info.
-	* extension.h (enum ext_lang_frame_args): New value CLI_PRESENCE.
-	* stack.h (get_user_print_what_frame_info): New declaration.
-	(frame_show_address): New declaration.
-	* stack.c (print_frame_arguments_choices): New value 'presence'.
-	(print_frame_info_auto, print_frame_info_source_line,
-	print_frame_info_location, print_frame_info_source_and_location,
-	print_frame_info_location_and_address, print_frame_info_short_location,
-	print_frame_info_choices, print_frame_info_print_what): New definitions.
-	(print_frame_args): Only print dots for args if print frame-arguments
-	is 'presence'.
-	(frame_print_option_defs): New element for "frame-info".
-	(get_user_print_what_frame_info): New function.
-	(frame_show_address): Make non static.  Move comment to stack.h.
-	(print_frame_info_to_print_what): New function.
-	(print_frame_info): Update comment.  Use fp_opts.print_frame_info
-	to decide what to print.
-	(backtrace_command_1): Handle the new print_frame_arguments_presence
-	value.
-	(_initialize_stack): Call add_setshow_enum_cmd for frame-info.
-	* python/py-framefilter.c (py_print_args): Handle CLI_PRESENCE.
-	(py_print_frame): In non-mi mode, use LOCATION as default for
-	print_what, similarly to frame information printed directly by
-	backtrace command. Handle frame-info user option in non MI mode.
-
-2019-07-27  Kevin Buettner  <kevinb@redhat.com>
-
-	* linux-thread-db.c (thread_db_target::thread_handle_to_thread_info):
-	Add case for debugging 32-bit target on 64-bit host.  Revise
-	comment.
-
-2019-07-27  Kevin Buettner  <kevinb@redhat.com>
-
-	* infrun.c (fill_in_stop_func): Use find_pc_partial_function
-	instead of find_function_entry_range_from_pc.
-
-2019-07-27  Kevin Buettner  <kevinb@redhat.com>
-
-	* stack.c (find_frame_funname): Remove code which preferred
-	minsym over symtab sym in "certain pathological cases".
-
-	* valprint.h (build_address_symbolic): Add "prefer_sym_over_minsym"
-	parameter.  Change type of "do_demangle" to bool.
-	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
-	Pass suitable "prefer_sym_over_minsym" flag to
-	build_address_symbolic().  Don't output "+" for negative offsets.
-	* printcmd.c (print_address_symbolic): Update invocation of
-	build_address_symbolic to include a "prefer_sym_over_minsym"
-	flag.
-	(build_address_symbolic): Add "prefer_sym_over_minsym" parameter.
-	Restrict cases in which use of minimal symbol is preferred to that
-	of a found symbol.  Update comments.
-
-	* dwarf2-frame.c (dwarf2_frame_cache): Don't decode FDE instructions
-	for entry pc when entry pc is out of range for that FDE.
-
-2019-07-26  Brian Callahan  <bcallah@openbsd.org>
-
-	PR gdb/24839:
-	* gdb/obsd-nat.c (obsd_nat_target::pid_to_str): Fix typo in return
-	type.
-
-2019-07-25  Christian Biesinger  <cbiesinger@google.com>
-
-	* python/py-objfile.c (add_separate_debug_file): Fix comment about
-	this function's Python signature.
-
-
-2019-07-24  Christian Biesinger  <cbiesinger@google.com>
-
-	* compile/compile-object-load.c (compile_object_load): Pass GLOBAL_SCOPE.
-	* solib-spu.c (spu_lookup_lib_symbol): Pass GLOBAL_SCOPE.
-	* solib-svr4.c (elf_lookup_lib_symbol): Pass GLOBAL_SCOPE.
-	* symtab.c (lookup_global_symbol_from_objfile): Add a scope parameter.
-	* symtab.h (lookup_global_symbol_from_objfile): Likewise.
-
-
-2019-07-24  Yoshinori Sato  <ysato@users.sourceforge.jp>
-
-	* h8300-tdep.c (h8300_register_name_common): New.
-	h8300_register_name): Use h8300_register_name_common.
-	(h8300s_register_name): Likewise.
-	(h8300sx_register_name): Likewise.
-	(h8300h_register_nam): New.
-	(h8300_gdbarch_init): Use h8300h_register_name in h8300h machine.
-
-
-2019-07-23  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
-
-	* arm-tdep.c (arm_skip_cmse_entry): New function.
-	(arm_is_sgstubs_section): New function.
-	(arm_skip_stub): Add call to arm_skip_cmse_entry function.
-
-2019-07-22  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_win_info::make_invisible_and_set_new_height):
-	Don't self-assign.
-
-2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* c-typeprint.c (c_print_typedef): Pass -1 instead of 0 to
-	type_print.
-
-2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* symtab.c (search_symbols): Adjust msymbol matching type arrays
-	so that GDB doesn't match any msymbols when searching in the
-	TYPES_DOMAIN.
-	(print_symbol_info): Print using typedef_print or type_print based
-	on the type of the symbol.  Add updated FIXME comment moved from...
-	(_initialize_symtab): ... move and update FIXME comment to above.
-
-2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* NEWS: Mention adding -q option to "info types".
-	* symtab.c (struct info_types_options): New struct.
-	(info_types_options_defs): New variable.
-	(make_info_types_options_def_group): New function.
-	(info_types_command): Use gdb::option framework to parse options.
-	(info_types_command_completer): New function.
-	(_initialize_symtab): Extend the help text on "info types" and
-	register command completer.
-
-2019-07-21  Christian Biesinger  <cbiesinger@google.com>
-
-	* symtab.c (lookup_symbol_in_objfile_symtabs): Change int to block_enum.
-	(lookup_symbol_in_objfile): Change int to block_enum and add a
-	gdb_assert to make sure block_index is GLOBAL_BLOCK or STATIC_BLOCK.
-
-2019-07-20  Christian Biesinger  <cbiesinger@google.com>
-
-	* MAINTAINERS (Write After Approval): Add self.
-
-2019-07-19  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* riscv-tdep.c (riscv_push_dummy_code): Write a 4-byte nop
-	instruction to the dummy code region.
-
-2019-07-19  Tom Tromey  <tromey@adacore.com>
-
-	* contrib/ari/gdb_ari.sh: Mention C++11, not ISO C 90.
-	(ARGSUSED, PARAMS, __func__): Remove rules.
-
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
-
-	* arm-tdep.c (_initialize_arm_tdep): Remove xml tests.
-	* features/arm/arm-with-iwmmxt.c: Remove.
-	* features/arm/arm-with-iwmmxt.xml: Remove.
-	* features/arm/arm-with-m-fpa-layout.c: Remove.
-	* features/arm/arm-with-m-fpa-layout.xml: Remove.
-	* features/arm/arm-with-m-vfp-d16.c: Remove.
-	* features/arm/arm-with-m-vfp-d16.xml: Remove.
-	* features/arm/arm-with-m.c: Remove.
-	* features/arm/arm-with-m.xml: Remove.
-	* features/arm/arm-with-neon.c: Remove.
-	* features/arm/arm-with-neon.xml: Remove.
-	* features/arm/arm-with-vfpv2.c: Remove.
-	* features/arm/arm-with-vfpv2.xml: Remove.
-	* features/arm/arm-with-vfpv3.c: Remove.
-	* features/arm/arm-with-vfpv3.xml: Remove.
-
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
-
-	* arm-tdep.c (_initialize_arm_tdep): Add xml regression tests.
-
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
-
-	* arch/aarch32.c (aarch32_create_target_description): Create
-	target descriptions using features.
-	* arch/arm.c (arm_create_target_description)
-	(arm_create_mprofile_target_description): Likewise.
-	* arm-tdep.c (_initialize_arm_tdep): Remove tdesc init calls.
-
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
-
-	* Makefile.in: Add new files.
-	* aarch32-tdep.c: New file.
-	* aarch32-tdep.h: New file.
-	* aarch64-linux-nat.c (aarch64_linux_nat_target::read_description):
-	Call aarch32_read_description.
-	* arch/aarch32.c: New file.
-	* arch/aarch32.h: New file.
-	* arch/arm.c (arm_create_target_description)
-	(arm_create_mprofile_target_description): New function.
-	* arch/arm.h (arm_fp_type, arm_m_profile_type): New enum.
-	(arm_create_target_description)
-	(arm_create_mprofile_target_description): New declaration.
-	* arm-fbsd-tdep.c (arm_fbsd_read_description_auxv): Call
-	read_description functions.
-	* arm-linux-nat.c (arm_linux_nat_target::read_description):
-	Likewise.
-	* arm-linux-tdep.c (arm_linux_core_read_description): Likewise.
-	* arm-tdep.c (tdesc_arm_list): New variable.
-	(arm_register_g_packet_guesses): Call create description functions.
-	(arm_read_description) (arm_read_mprofile_description): New
-	function.
-	* arm-tdep.h (arm_read_description)
-	(arm_read_mprofile_description): Add declaration.
-	* configure.tgt: Add new files.
-
-2019-07-18  Guillaume LABARTHE  <guillaume.labarthe@gmail.com>
-
-	* top.c (new_ui_command): Open specified terminal just once.
-
-2019-07-18  Tom Tromey  <tromey@adacore.com>
-
-	* symtab.c (main_name): Constify return type.
-	* symfile.c (set_initial_language): Update.
-	* symtab.h (main_name): Constify return type.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_update_source_window)
-	(tui_update_source_window_as_is)
-	(tui_update_source_windows_with_line): Remove return.
-	* tui/tui-disasm.c (tui_show_disassem)
-	(tui_show_disassem_and_update_source): Remove return.
-	* tui/tui.c (tui_reset): Remove return.
-	* tui/tui-wingeneral.c
-	(tui_check_and_display_highlight_if_needed): Remove return.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (parse_scrolling_args): Throw separate errors.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (struct tui_exec_info_window)
-	(struct tui_source_window_base): Move from tui-data.h.
-	* tui/tui-winsource.c: Move many method definitions from
-	elsewhere.  Remove "structuring" comments.
-	* tui/tui-wingeneral.c (tui_source_window_base::make_visible)
-	(tui_source_window_base::refresh_window): Move to
-	tui-winsource.c.
-	* tui/tui-win.c (tui_source_window_base::refresh_all)
-	(tui_source_window_base::update_tab_width)
-	(tui_source_window_base::set_new_height)
-	(tui_source_window_base::do_make_visible_with_new_height): Move to
-	tui-winsource.c.
-	* tui/tui-source.h: Update.
-	* tui/tui-source.c (tui_source_window_base::reset): Move to
-	tui-winsource.c.
-	* tui/tui-disasm.h: Update.
-	* tui/tui-data.h (struct tui_exec_info_window): Move to
-	tui-winsource.h.
-	(struct tui_source_window_base): Likewise.
-	* tui/tui-data.c (tui_source_window_base::clear_detail)
-	(tui_source_window_base, ~tui_source_window_base): Move to
-	tui-winsource.c.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_resize_all)
-	(tui_source_window_base::update_tab_width)
-	(tui_adjust_win_heights): Update.
-	(tui_win_info::make_invisible_and_set_new_height): Rename from
-	make_invisible_and_set_new_height.
-	* tui/tui-data.h (struct tui_win_info)
-	<make_invisible_and_set_new_height>: New method.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c: Update.
-	* tui/tui-source.h (struct tui_source_window): Move from
-	tui-data.h.
-	* tui/tui-layout.c: Update.
-	* tui/tui-disasm.c: Update.
-	* tui/tui-data.h (struct tui_source_window): Move to
-	tui-source.h.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-disasm.h (struct tui_disasm_window): Move from
-	tui-data.h.
-	* tui/tui-data.h (struct tui_disasm_window): Move to
-	tui-disasm.h.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (struct tui_data_item_window): Move from
-	tui-data.h.
-	* tui/tui-regs.c (tui_data_item_window): Move from tui-data.c.
-	* tui/tui-data.h (struct tui_data_item_window): Move to
-	tui-regs.h.
-	* tui/tui-data.c (~tui_data_item_window): Move to tui-regs.c.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c: Update.
-	* tui/tui-win.c (tui_cmd_window::do_make_visible_with_new_height)
-	(tui_cmd_window::max_height): Move to tui-command.c.
-	* tui/tui-layout.c: Update.
-	* tui/tui-data.h (struct tui_cmd_window): Move to tui-command.h.
-	* tui/tui-data.c (tui_cmd_window::clear_detail): Move to
-	tui-command.c.
-	* tui/tui-command.h (struct tui_cmd_window): Move from
-	tui-data.h.
-	* tui/tui-command.c: Remove "structuring" comments.
-	(tui_cmd_window::clear_detail)
-	(tui_cmd_window::do_make_visible_with_new_height)
-	(tui_cmd_window::max_height): Move from elsewhere.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-io.c (tui_dispatch_ctrl_char): Move from tui-command.c.
-	Now static.
-	* tui/tui-command.h (tui_dispatch_ctrl_char): Don't declare.
-	* tui/tui-command.c (tui_dispatch_ctrl_char): Move to tui-io.c.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c: Update.
-	* tui/tui-wingeneral.c (tui_data_window::refresh_window): Move to
-	tui-regs.c.
-	* tui/tui-windata.h: Remove file.
-	* tui/tui-windata.c: Remove file.
-	* tui/tui-win.c (tui_data_window::set_new_height)
-	(tui_data_window::do_make_visible_with_new_height): Move to
-	tui-regs.c.
-	* tui/tui-regs.h (struct tui_data_window): Move from tui-data.h.
-	* tui/tui-regs.c: Remove "structuring" comments.
-	(tui_data_window::first_data_item_displayed)
-	(tui_data_window::delete_data_content_windows)
-	(tui_data_window::erase_data_content)
-	(tui_data_window::display_all_data)
-	(tui_data_window::refresh_all)
-	(tui_data_window::do_scroll_vertical)
-	(tui_data_window::clear_detail, tui_data_window::set_new_height)
-	(tui_data_window::do_make_visible_with_new_height)
-	(tui_data_window::refresh_window): Move from elsewhere.
-	(_initialize_tui_regs): Move to end of file.
-	* tui/tui-layout.c: Update.
-	* tui/tui-hooks.c: Update.
-	* tui/tui-data.h (struct tui_data_window): Move to tui-regs.h.
-	* tui/tui-data.c (tui_data_window::clear_detail): Move to
-	tui-regs.c.
-	* Makefile.in (SUBDIR_TUI_SRCS): Remove tui-windata.c.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is
-	seen.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_source_window_base::set_new_height)
-	(tui_source_window_base::do_make_visible_with_new_height): Use
-	m_has_locator field directly.
-	* tui/tui-data.h (struct tui_win_info) <has_locator>: Remove
-	method.
-	(struct tui_source_window_base) <has_locator>: Likewise.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h (tui_make_visible, tui_make_invisible):
-	Don't declare.
-	* tui/tui-wingeneral.c (tui_make_visible, tui_make_invisible):
-	Remove.
-	* tui/tui-win.c (tui_source_window_base::set_new_height)
-	(tui_source_window_base::set_new_height)
-	(make_invisible_and_set_new_height)
-	(tui_source_window_base::do_make_visible_with_new_height)
-	(tui_source_window_base::do_make_visible_with_new_height):
-	Update.
-	* tui/tui-layout.c (show_source_disasm_command, show_data)
-	(show_source_or_disasm_and_command): Update.
-	* tui/tui-layout.c (show_layout): Update.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (make_data_window): Remove.
-	(show_data): Unify creation and re-initialization cases.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (make_source_window, make_disasm_window):
-	Remove.
-	(show_data): Unify creation and re-initialization cases.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (make_command_window): Remove.
-	(show_source_disasm_command, show_source_or_disasm_and_command):
-	Unify creation and re-initialization cases.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_source_or_disasm_and_command): Unify
-	creation and re-initialization cases.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_get_register): Return void.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_gen_win_info::make_visible):
-	Simplify.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_source_disasm_command): Simplify window
-	resetting.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.h (tui_set_layout_by_name): Don't declare.
-	* tui/tui-regs.c (tui_reg_layout): New function.
-	(tui_show_registers, tui_reg_command): Use it.
-	* tui/tui-layout.c (LAYOUT_USAGE): Remove.
-	(tui_layout_command): Rename from tui_set_layout_by_name.  Change
-	parameters.
-	(tui_layout_command): Remove.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.h (tui/tui-layout): Return void.
-	* tui/tui-layout.c (tui_set_layout): Return void.  Add assert.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_source_disasm_command, show_data):
-	Update.
-	(reset_locator): Remove.
-	(show_source_or_disasm_and_command): Update.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-source.c (tui_source_window_base::reset): Remove
-	win_type parameter.
-	* tui/tui-layout.c (make_command_window, make_source_window)
-	(make_disasm_window, make_data_window)
-	(show_source_disasm_command, show_data, tui_gen_win_info::reset)
-	(reset_locator, show_source_or_disasm_and_command): Update.
-	* tui/tui-data.h (struct tui_gen_win_info) <reset>: Remove
-	win_type parameter.
-	(struct tui_source_window_base) <reset>: Likewise.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_source_disasm_command): Use
-	reset_locator.
-	(reset_locator): New function.
-	(init_and_make_win): Remove.
-	(show_source_or_disasm_and_command): Use reset_locator.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_set_exec_info_content): Remove
-	condition.
-	* tui/tui-wingeneral.c (tui_source_window_base::make_visible):
-	Remove condition.
-	* tui/tui-source.c (tui_source_window_base::reset): New method.
-	* tui/tui-layout.c (make_command_window): Don't call
-	init_and_make_win.
-	(make_source_window, make_disasm_window): Don't call
-	make_source_or_disasm_window.
-	(make_data_window): Don't call init_and_make_win.  Change calling
-	convention.
-	(show_source_disasm_command, show_data): Simplify.
-	(make_source_or_disasm_window): Remove.
-	(show_source_or_disasm_and_command): Simplify.
-	* tui/tui-data.h (struct tui_gen_win_info) <reset>: Now virtual.
-	(struct tui_source_window_base) <reset>: Likewise.
-	<execution_info>: Remove initializer.
-	* tui/tui-data.c (tui_source_window_base): Initialize
-	execution_info.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (tui_set_layout): Remove regs_populate
-	variable.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c (tui_rl_other_window): Update.
-	* tui/tui-wingeneral.c (tui_data_window::refresh_window): Call
-	superclass method first.  Always iterate over regs_content.
-	(tui_unhighlight_win, tui_highlight_win): Use refresh_window
-	method.
-	* tui/tui-win.c (tui_set_focus_command): Update.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_set_focus_command): Rename from
-	tui_set_focus.  Call tui_enable.
-	(tui_set_focus_command): Remove.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_show_exec_info_content): Don't call
-	refresh_window.
-	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Call
-	touchwin.
-	(tui_data_window::refresh_window): Call refresh_window on data
-	items.  Always call superclass refresh_window.
-	(tui_win_info::refresh): Remove.
-	(tui_source_window_base::refresh_window): Update.
-	(tui_refresh_all): Update.
-	* tui/tui-layout.c (show_source_disasm_command): Remove call to
-	refresh_window.
-	(show_source_or_disasm_and_command): Likewise.
-	* tui/tui-data.h (struct tui_win_info) <refresh>: Remove.
-	(struct tui_source_window_base) <refresh>: Likewise.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_clear_source_content)
-	(tui_show_source_content): Update.
-	* tui/tui-source.c (tui_source_window::showing_source_p): Check
-	whether content is empty.
-	* tui/tui-data.h (struct tui_source_window_base) <content_in_use>:
-	Remove.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_erase_source_content): Clear the
-	window's contents.
-	* tui/tui-source.h (tui_set_source_content_nil): Don't declare.
-	* tui/tui-source.c (tui_set_source_content_nil): Remove.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (UNDEFINED_ITEM): Remove define.
-	(struct tui_data_item_window): Update.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (MAX_CONTENT_COUNT, TUI_NULL_STR)
-	(DEFAULT_HISTORY_COUNT, WITH_LOCATOR, NO_LOCATOR): Remove
-	defines.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_erase_source_content)
-	(tui_clear_source_content): Remove "display_prompt" parameter.
-	* tui/tui-winsource.c (tui_update_source_window_as_is)
-	(tui_update_source_windows_with_addr): Update.
-	(tui_clear_source_content): Remove "display_prompt" parameter.
-	(tui_erase_source_content): Likewise.  Simplify.
-	(tui_show_source_content): Update.
-	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update.
-	* tui/tui-stack.c (tui_show_frame_info): Update.
-	* tui/tui-data.h (EMPTY_SOURCE_PROMPT, NO_EMPTY_SOURCE_PROMPT):
-	Remove defines.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_update_source_window_as_is): Update.
-	* tui/tui-disasm.h (tui_set_disassem_content): Add win_info
-	parameter.
-	* tui/tui-disasm.c (tui_set_disassem_content): Add win_info
-	parameter.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_clear_source_content)
-	(tui_show_source_content, tui_show_exec_info_content)
-	(tui_clear_exec_info_content): Update.
-	* tui/tui-stack.c (tui_show_locator_content): Update.
-	(tui_show_frame_info): Update.
-	* tui/tui-source.h (tui_source_window): Don't declare.
-	* tui/tui-source.c (tui_source_window::showing_source_p): Rename
-	from tui_source_is_displayed.
-	* tui/tui-data.h (struct tui_gen_win_info) <content_in_use>:
-	Remove field.
-	(struct tui_source_window_base) <content_in_use>: New field.  Now
-	bool.
-	(struct tui_source_window) <showing_source_p>: New method.
-	(TUI_SRC_WIN): Change cast.
-	* tui/tui-data.c (tui_initialize_static_data): Update.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_update_breakpoint_info): Use
-	location_matches_p.
-	* tui/tui-source.c (tui_source_window::location_matches_p): New
-	method.
-	* tui/tui-disasm.c (tui_disasm_window::location_matches_p): New
-	method.
-	* tui/tui-data.h (struct tui_source_window_base)
-	<location_matches_p>: New method.
-	(struct tui_source_window, struct tui_disasm_window)
-	<location_matches_p>: Likewise.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_set_win_height_command): Rename from
-	tui_set_win_height.
-	(tui_set_win_height_command): Remove.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-source.c (tui_source_window): New constructor.  Add
-	observer.
-	(~tui_source_window): New destructor.
-	(tui_source_window::style_changed): New method.
-	* tui/tui-hooks.c (tui_redisplay_source): Remove.
-	(tui_attach_detach_observers): Update.
-	* tui/tui-data.h (struct tui_source_window): Make constructor not
-	inline.  Add destructor.
-	(struct tui_source_window) <style_changed>: New method.
-	<m_observable>: New member.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.c (tui_clear_source_windows_detail): Fix typo.
-	* tui/tui-win.c (tui_resize_all): Fix typo.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h (tui_refresh_all): Update.
-	* tui/tui-wingeneral.c (make_all_visible): Use foreach.
-	(tui_refresh_all): Remove "list" parameter.  Use foreach.
-	* tui/tui-win.c (window_name_completer): Use foreach.
-	(tui_refresh_all_win, tui_rehighlight_all, tui_all_windows_info)
-	(update_tab_width): Likewise.
-	* tui/tui-layout.c (show_layout): Update.
-	* tui/tui-data.h (class tui_window_iterator): New.
-	(struct all_tui_windows): New.
-	* tui/tui-data.c (tui_partial_win_by_name): Use foreach.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_reg_next, tui_reg_prev): Add "current_group"
-	parameter.  Don't reference globals.
-	(tui_reg_command): Update.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_show_registers): Simplify.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_show_registers): Update.
-	(tui_show_register_group): Add win_info parameter.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_data_window::display_reg_element_at_line):
-	Rename from tui_display_reg_element_at_line.
-	(tui_data_window::display_registers_from_line): Update.
-	* tui/tui-data.h (struct tui_data_window)
-	<display_reg_element_at_line>: New method.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (tui_display_registers_from)
-	(tui_display_registers_from_line): Don't declare.
-	* tui/tui-windata.c (tui_data_window::display_all_data)
-	(tui_data_window::refresh_all)
-	(tui_data_window::do_scroll_vertical): Update.
-	* tui/tui-regs.c (tui_data_window::display_registers_from): Rename
-	from tui_display_registers_from.
-	(tui_display_reg_element_at_line): Update.
-	(tui_data_window::display_registers_from_line): Rename from
-	tui_display_registers_from_line.
-	* tui/tui-data.h (struct tui_data_window) <display_registers_from,
-	display_registers_from_line>: New methods.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.h (tui_erase_data_content): Don't declare.
-	* tui/tui-windata.c (tui_data_window::erase_data_content): Rename
-	from tui_erase_data_content.
-	(tui_data_window::display_all_data)
-	(tui_data_window::refresh_all)
-	(tui_data_window::do_scroll_vertical): Update.
-	* tui/tui-regs.c (tui_show_registers): Update.
-	* tui/tui-data.h (struct tui_data_window) <erase_data_content>:
-	New method.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.h (tui_delete_data_content_windows): Don't
-	declare.
-	* tui/tui-windata.c
-	(tui_data_window::delete_data_content_windows): Rename from
-	tui_delete_data_content_windows.
-	(tui_data_window::display_all_data)
-	(tui_data_window::do_scroll_vertical): Update.
-	* tui/tui-data.h (struct tui_data_window)
-	<delete_data_content_windows>: New method.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.h (tui_refresh_data_win): Don't declare.
-	* tui/tui-regs.h (tui_first_reg_element_inline): Don't declare.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.h (tui_display_all_data): Don't declare.
-	* tui/tui-windata.c (tui_data_window::display_all_data): Rename
-	from tui_display_all_data.
-	* tui/tui-win.c
-	(tui_data_window::do_make_visible_with_new_height): Update.
-	* tui/tui-regs.c (tui_show_registers): Update.
-	* tui/tui-layout.c (tui_set_layout): Update.
-	* tui/tui-data.h (struct tui_data_window) <display_all_data>: New
-	method.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.h (tui_display_data_from): Don't declare.
-	* tui/tui-windata.c (tui_display_data_from): Remove.
-	(tui_data_window::refresh_all): Update.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.h (tui_display_data_from_line): Don't declare.
-	* tui/tui-windata.c (tui_display_data_from_line): Remove.
-	(tui_display_data_from, tui_data_window::do_scroll_vertical): Call
-	tui_display_registers_from_line.
-	* tui/tui-regs.h (tui_display_registers_from_line): Update.
-	* tui/tui-regs.c (tui_display_registers_from_line): Remove
-	"force_display" parameter.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (tui_first_reg_element_no_inline): Don't
-	declare.
-	* tui/tui-regs.c (tui_data_window::first_reg_element_no_inline):
-	Rename from tui_first_reg_element_no_inline.
-	(tui_display_reg_element_at_line)
-	(tui_display_registers_from_line): Update.
-	* tui/tui-data.h (struct tui_data_window)
-	<first_reg_element_no_inline>: New method.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.c (tui_display_data_from)
-	(tui_data_window::do_scroll_vertical): Update.
-	* tui/tui-regs.h (tui_line_from_reg_element_no): Don't declare.
-	* tui/tui-regs.c (tui_data_window::line_from_reg_element_no):
-	Rename from tui_line_from_reg_element_no.
-	(tui_display_registers_from_line): Update.
-	* tui/tui-data.h (struct tui_data_window)
-	<line_from_reg_element_no>: New method.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.h (tui_last_regs_line_no): Don't declare.
-	* tui/tui-regs.c (tui_data_window::last_regs_line_no): Rename from
-	tui_last_regs_line_no.
-	(tui_display_reg_element_at_line)
-	(tui_display_registers_from_line): Update.
-	* tui/tui-data.h (struct tui_data_window) <last_regs_line_no>: New
-	method.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	PR tui/24722:
-	* tui/tui-winsource.h (tui_update_all_breakpoint_info)
-	(tui_update_breakpoint_info): Add "being_deleted" parameter.
-	* tui/tui-winsource.c (tui_update_source_window_as_is): Update.
-	(tui_update_all_breakpoint_info): Add "being_deleted" parameter.
-	(tui_update_breakpoint_info): Likewise.
-	* tui/tui-hooks.c (tui_event_create_breakpoint)
-	(tui_event_delete_breakpoint, tui_event_modify_breakpoint):
-	Update.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-stack.c (tui_show_frame_info): Consolidate "if"s.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_update_source_window_as_is)
-	(tui_update_source_windows_with_addr): Update.
-	* tui/tui-source.h (tui_set_source_content)
-	(tui_show_symtab_source): Add "win_info" parameter.
-	* tui/tui-source.c (tui_set_source_content): Add "win_info"
-	parameter.
-	(tui_show_symtab_source): Likewise.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c
-	(tui_check_and_display_highlight_if_needed): Check can_highlight.
-
-2019-07-17  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (struct tui_win_info) <can_scroll>: New method.
-	(struct tui_cmd_window) <can_scroll>: New method.
-	* tui/tui-command.c (tui_dispatch_ctrl_char): Use can_scroll
-	method.
-
-2019-07-17  Tom Tromey  <tromey@adacore.com>
-
-	* ui-out.h (class ui_out) <field_signed, field_fmt_signed,
-	do_field_signed>: Rename.  Change type of "value".
-	* ui-out.c (ui_out::field_signed): Rename from field_int.
-	Change type of "value".
-	(ui_out::field_fmt_signed): Rename from field_fmt_int.  Change
-	type of "value".
-	* tui/tui-out.h (class tui_ui_out) <do_field_signed>: Rename from
-	do_field_int.  Change type of "value".
-	* tui/tui-out.c (tui_ui_out::do_field_signed): Rename from
-	do_field_int.  Change type of "value".
-	* tracepoint.c (trace_status_mi, tfind_1)
-	(print_one_static_tracepoint_marker): Update.
-	* thread.c (print_thread_info_1, print_selected_thread_frame):
-	Update.
-	* stack.c (print_frame, print_frame_info): Update.
-	* spu-tdep.c (info_spu_signal_command, info_spu_dma_cmdlist):
-	Update.
-	* source.c (print_source_lines_base): Update.
-	* skip.c (info_skip_command): Update.
-	* record-btrace.c (btrace_ui_out_decode_error)
-	(btrace_call_history_src_line): Update.
-	* python/py-framefilter.c (py_print_single_arg, py_print_frame):
-	Update.
-	* progspace.c (print_program_space): Update.
-	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Update.
-	* mi/mi-out.h (class mi_ui_out) <do_field_signed>: Rename from
-	do_field_int.  Change type of "value".
-	* mi/mi-out.c (mi_ui_out::do_table_begin)
-	(mi_ui_out::do_table_header): Update.
-	(mi_ui_out::do_field_signed): Rename from do_field_int.  Change
-	type of "value".
-	* mi/mi-main.c (mi_cmd_thread_list_ids, print_one_inferior)
-	(mi_cmd_data_list_changed_registers, output_register)
-	(mi_cmd_data_read_memory, mi_load_progress)
-	(mi_cmd_trace_frame_collected): Update.
-	* mi/mi-interp.c (mi_on_normal_stop_1, mi_output_solib_attribs):
-	Update.
-	* mi/mi-cmd-var.c (print_varobj, mi_cmd_var_create)
-	(mi_cmd_var_delete, mi_cmd_var_info_num_children)
-	(mi_cmd_var_list_children, varobj_update_one): Update.
-	* mi/mi-cmd-stack.c (mi_cmd_stack_info_depth)
-	(mi_cmd_stack_list_args, list_arg_or_local): Update.
-	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file): Update.
-	* inferior.c (print_inferior): Update.
-	* gdb_bfd.c (print_one_bfd): Update.
-	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
-	Update.
-	* darwin-nat-info.c (darwin_debug_regions_recurse): Update.
-	* cli-out.h (class cli_ui_out) <do_field_signed>: Rename from
-	do_field_int.  Change type of "value".
-	* cli-out.c (cli_ui_out::do_field_signed): Rename from
-	do_field_int.  Change type of "value".
-	* breakpoint.c (watchpoint_check, print_breakpoint_location)
-	(print_one_breakpoint_location, print_it_catch_fork)
-	(print_one_catch_fork, print_it_catch_vfork)
-	(print_one_catch_vfork, print_it_catch_solib)
-	(print_it_catch_exec, print_it_ranged_breakpoint)
-	(print_mention_watchpoint, print_mention_masked_watchpoint)
-	(bkpt_print_it, update_static_tracepoint): Update.
-	* break-catch-throw.c (print_it_exception_catchpoint): Update.
-	* break-catch-syscall.c (print_it_catch_syscall): Update.
-	* ada-tasks.c (print_ada_task_info): Update.
-	* ada-lang.c (print_it_exception, print_mention_exception):
-	Update.
-
-2019-07-17  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	PR breakpoints/24541
-	* gdbarch.c: Regenerate.
-	* gdbarch.h: Regenerate.
-	* gdbarch.sh: Adjust return type and parameter types for
-	'stap_adjust_register'.
-	(i386_stap_adjust_register): Adjust signature and return new
-	register name.
-	* stap-probe.c (stap_parse_register_operand): Adjust use of
-	'gdbarch_stap_adjust_register'.
-
-2019-07-17  Tom Tromey  <tromey@adacore.com>
-
-	* s390-linux-nat.c (s390_watch_area): Remove typedef.  Don't
-	declare VEC.
-	(struct s390_debug_reg_state) <watch_areas, break_areas>: Now
-	std::vector.
-	(struct s390_process_info): Add initializers.
-	(s390_add_process): Use new.
-	(s390_linux_nat_target::low_forget_process): Use delete.
-	(s390_linux_nat_target::low_new_fork)
-	(s390_linux_nat_target::stopped_by_watchpoint)
-	(s390_linux_nat_target::low_prepare_to_resume)
-	(s390_linux_nat_target::insert_watchpoint)
-	(s390_linux_nat_target::insert_hw_breakpoint)
-	(s390_linux_nat_target::remove_watchpoint)
-	(s390_linux_nat_target::remove_hw_breakpoint): Update.
-
-2019-07-16  John Baldwin  <jhb@FreeBSD.org>
-
-	* aarch64-fbsd-nat.c: Include regcache.h.
-	(getregs_supplies, getfpregs_supplies): Remove unused gdbarch
-	argument.
-	(aarch64_fbsd_nat_target::fetch_registers)
-	(aarch64_fbsd_nat_target::store_registers): Remove gdbarch
-	variable.
-	* arm-fbsd-nat.c, riscv-fbsd-nat.c: Likewise.
-
-2019-07-16  John Baldwin  <jhb@FreeBSD.org>
-
-	* fbsd-nat.c: Include gdbarch.h.
-
-2019-07-15  Tom Tromey  <tromey@adacore.com>
-
-	* mi/mi-out.c (mi_ui_out::do_field_int): Use plongest.
-
-2019-07-15  Tom Tromey  <tromey@adacore.com>
-
-	* mi/mi-out.h (class mi_ui_out) <do_field_unsigned>: Declare.
-	* mi/mi-out.c (mi_ui_out::do_field_unsigned): New method.
-	* cli-out.h (class cli_ui_out) <do_field_unsigned>: Declare.
-	* cli-out.c (cli_ui_out::do_field_int): New method.
-	* ui-out.c (ui_out::field_unsigned): New method.
-	* symfile.c (generic_load): Use field_unsigned.
-	(print_transfer_performance): Likewise.
-	* record-btrace.c (ui_out_field_uint): Remove.
-	(btrace_call_history_insn_range, btrace_call_history): Use
-	field_unsigned.
-	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): Use
-	field_unsigned.
-	* ui-out.h (class ui_out) <field_unsigned>: New method.
-	<do_field_unsigned>: Likewise.
-
-2019-07-15  Tom Tromey  <tromey@adacore.com>
-
-	* mi/mi-main.c (list_available_thread_groups): Use field_string.
-	* mi/mi-interp.c (mi_memory_changed): Use field_string.
-	* target.c (flash_erase_command): Use field_string.
-	* infrun.c (print_signal_received_reason): Use field_string.
-	* i386-tdep.c (i386_mpx_print_bounds): Use field_string.
-	* breakpoint.c (maybe_print_thread_hit_breakpoint): Use
-	field_string.
-	* ada-tasks.c (print_ada_task_info): Use field_string.
-
-2019-07-15  Tom Tromey  <tromey@adacore.com>
-
-	* target.c (flash_erase_command): Use field_core_addr.
-	* symfile.c (generic_load): Use field_core_addr.
-	* sparc64-linux-tdep.c (sparc64_linux_handle_segmentation_fault):
-	Use field_core_addr.
-	* i386-linux-tdep.c (i386_linux_handle_segmentation_fault): Use
-	field_core_addr.
-
-2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2loc.c (dwarf2_evaluate_property): Sign extend property
-	value if its desired type is smaller than a CORE_ADDR and signed.
-
-2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2loc.c (dwarf2_evaluate_property): Update to take account
-	of changes to field names, and use new is_reference field to
-	decide if a property is a reference or not.
-	* dwarf2loc.h (struct dwarf2_locexpr_baton): Add 'is_reference'
-	field.
-	(struct dwarf2_property_baton): Update header comment, rename
-	'referenced_type' to 'property_type' and update comments.
-	* dwarf2read.c (attr_to_dynamic_prop): Add extra parameter to hold
-	default property type, store in property baton, update to take
-	accound of renamed field.
-	(read_func_scope): Update call to attr_to_dynamic_prop.
-	(read_array_type): Likewise.
-	(dwarf2_per_cu_addr_sized_int_type): New function.
-	(read_subrange_index_type): Move type finding code to
-	dwarf2_per_cu_addr_sized_int_type.
-	(read_subrange_type): Update calls to attr_to_dynamic_prop.
-	(dwarf2_per_cu_addr_type): New function.
-	(set_die_type): Update calls to attr_to_dynamic_prop.
-
-2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2read.c (read_subrange_index_type): New function.
-	(read_subrange_type): Move code into new function and call it.
-	* gdbtypes.c (create_range_type): Add some asserts.
-
-2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2loc.c (dwarf2_evaluate_property): Change return type, and
-	update return statements.
-	* dwarf2loc.h (dwarf2_evaluate_property): Update return type on
-	declaration, and update comment to match.
-	* gdbtypes.c (resolve_dynamic_array): Update call to
-	dwarf2_evaluate_property to match new return type.
-
-2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* valarith.c (value_subscripted_rvalue): Change lowerbound
-	parameter type from int to LONGEST.
-	* value.h (value_subscripted_rvalue): Likewise in declaration.
-
-2019-07-11  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* cli/cli-utils.c (info_print_command_completer): New function.
-	* cli/cli-utils.h: Add 'completer.h' include, and forward
-	declaration for 'struct cmd_list_element'.
-	(info_print_command_completer): Declare.
-	* stack.c (_initialize_stack): Add completer for 'info locals' and
-	'info args'.
-	* symtab.c (_initialize_symtab): Add completer for 'info
-	variables' and 'info functions'.
-	* NEWS: Mention completion for additional info commands.
-
-2019-07-11  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* cli/cli-utils.c (extract_info_print_args): Delete.
-	(extract_arg_maybe_quoted): Delete.
-	(info_print_options_defs): New variable.
-	(make_info_print_options_def_group): New function.
-	(extract_info_print_options): Define new function.
-	* cli/cli-utils.h (extract_info_print_args): Delete.
-	(struct info_print_options): New structure.
-	(extract_info_print_options): Declare new function.
-	* stack.c (info_locals_command): Update to use new
-	extract_info_print_options, also add a header comment.
-	(info_args_command): Likewise.
-	* symtab.c (info_variables_command): Likewise.
-	(info_functions_command): Likewise.
-
-2019-07-11  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* cli/cli-option.c (parse_option): Use extract_string_maybe_quoted
-	to extract string arguments.
-	* common/common-utils.c (extract_string_maybe_quoted): New function.
-	* common/common-utils.h (extract_string_maybe_quoted): Declare.
-
-2019-07-11  Tom Tromey  <tromey@adacore.com>
-
-	* main.c (get_init_files): Use GDBINIT, not gdbinit.
-	* auto-load.c (file_is_auto_load_safe): Use GDBINIT, not gdbinit.
-	* top.h (gdbinit): Don't declare.
-	* cli/cli-cmds.c (init_cli_cmds): Remove, merging contents
-	into...
-	(_initialize_cli_cmds): ...here.  Use GDBINIT, not gdbinit.
-	* top.c (gdb_init): Don't call init_cli_cmds.
-	(gdbinit): Remove.
-	* cli/cli-cmds.h (init_cli_cmds): Don't declare.
-
-2019-07-11  Tom Tromey  <tromey@adacore.com>
-
-	* python/py-inferior.c (add_thread_object): Don't use thread_obj
-	after it has been moved.
-
-2019-07-10  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* valops.c (value_must_coerce_to_target): Change return type to
-	bool.
-	* value.h (value_must_coerce_to_target): Likewise.
-
-2019-07-10  Simon Marchi  <simon.marchi@efficios.com>
-
-	* breakpoint.c (is_hardware_watchpoint): Remove
-	forward-declaration.
-	(is_masked_watchpoint): Change return type to bool.
-	(is_tracepoint): Likewise.
-	(is_breakpoint): Likewise.
-	(is_hardware_watchpoint): Likewise.
-	(is_watchpoint): Likewise.
-	(is_no_memory_software_watchpoint): Likewise.
-	(is_catchpoint): Likewise.
-	(breakpoint_1): Make FILTER parameter's return type bool.
-	is_masked_watchpoint): Change return type to bool.
-	(save_breakpoints): Make FILTER parameter's return type bool.
-	* breakpoint.h (is_breakpoint): Change return type to bool.
-	(is_watchpoint): Likewise.
-	(is_catchpoint): Likewise.
-	(is_tracepoint): Likewise.
-
-2019-07-10  Tom Tromey  <tom@tromey.com>
-
-	* defs.h: Don't include gdbarch.h.
-	* aarch64-ravenscar-thread.c, aarch64-tdep.c, alpha-bsd-tdep.h,
-	alpha-linux-tdep.c, alpha-mdebug-tdep.c, arch-utils.h, arm-tdep.h,
-	ax-general.c, btrace.c, buildsym-legacy.c, buildsym.h, c-lang.c,
-	cli/cli-decode.h, cli/cli-dump.c, cli/cli-script.h,
-	cli/cli-style.h, coff-pe-read.h, compile/compile-c-support.c,
-	compile/compile-cplus.h, compile/compile-loc2c.c, corefile.c,
-	cp-valprint.c, cris-linux-tdep.c, ctf.c, d-lang.c, d-namespace.c,
-	dcache.c, dicos-tdep.c, dictionary.c, disasm-selftests.c,
-	dummy-frame.c, dummy-frame.h, dwarf2-frame-tailcall.c,
-	dwarf2expr.c, expression.h, f-lang.c, frame-base.c,
-	frame-unwind.c, frv-linux-tdep.c, gdbarch-selftests.c, gdbtypes.h,
-	go-lang.c, hppa-nbsd-tdep.c, hppa-obsd-tdep.c, i386-dicos-tdep.c,
-	i386-tdep.h, ia64-vms-tdep.c, interps.h, language.c,
-	linux-record.c, location.h, m2-lang.c, m32r-linux-tdep.c,
-	mem-break.c, memattr.c, mn10300-linux-tdep.c, nios2-linux-tdep.c,
-	objfiles.h, opencl-lang.c, or1k-linux-tdep.c, p-lang.c,
-	parser-defs.h, ppc-tdep.h, probe.h, python/py-record-btrace.c,
-	record-btrace.c, record.h, regcache-dump.c, regcache.h,
-	riscv-fbsd-tdep.c, riscv-linux-tdep.c, rust-exp.y,
-	sh-linux-tdep.c, sh-nbsd-tdep.c, source-cache.c,
-	sparc-nbsd-tdep.c, sparc-obsd-tdep.c, sparc-ravenscar-thread.c,
-	sparc64-fbsd-tdep.c, std-regs.c, target-descriptions.h,
-	target-float.c, tic6x-linux-tdep.c, tilegx-linux-tdep.c, top.c,
-	tracefile.c, trad-frame.c, type-stack.h, ui-style.c, utils.c,
-	utils.h, valarith.c, valprint.c, varobj.c, x86-tdep.c,
-	xml-support.h, xtensa-linux-tdep.c, cli/cli-cmds.h: Update.
-	* s390-linux-nat.c, procfs.c, inf-ptrace.c: Likewise.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.h (is_ada_exception_catchpoint): Declare.
-	* breakpoint.c (init_ada_exception_breakpoint): Register as
-	bp_catchpoint.
-	(print_one_breakpoint_location, print_one_breakpoint): Use
-	is_ada_exception_catchpoint.
-	* ada-lang.c (class ada_catchpoint_location): Pass
-	bp_loc_software_breakpoint to bp_location constructor.
-	(is_ada_exception_catchpoint): New function.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* arm-tdep.c (arm_exidx_entry_s): Remove typedef.  Don't define
-	VEC.
-	(struct arm_exidx_entry): New method operator<.
-	(struct arm_exidx_data) <section_maps>: Change type.
-	(arm_exidx_data_free): Remove.
-	(arm_exidx_data_key): Change type.  Move lower.
-	(arm_exidx_new_objfile): Update.
-	(arm_compare_exidx_entries): Remove.
-	(arm_find_exidx_entry, _initialize_arm_tdep)
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* solib-spu.c (ocl_program_data_key): Change type.
-	(append_ocl_sos, ocl_enable_break, _initialize_spu_solib):
-	Update.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* solib-aix.c (lm_info_aix_p): Remove typedef.  Don't define VEC.
-	(struct solib_aix_inferior_data) <library_list>: Change type.
-	(solib_aix_inferior_data_handle): Change type.
-	(get_solib_aix_inferior_data): Update.
-	(solib_aix_free_library_list): Remove.
-	(library_list_start_library): Update.
-	(solib_aix_parse_libraries, solib_aix_get_library_list): Change
-	return type.
-	(solib_aix_get_library_list)
-	(solib_aix_solib_create_inferior_hook, solib_aix_current_sos)
-	(solib_aix_normal_stop_observer, _initialize_solib_aix): Update.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* solib-dsbt.c (struct dsbt_info): Add initializers.
-	(solib_dsbt_pspace_data): Change type.
-	(dsbt_pspace_data_cleanup): Remove.
-	(get_dsbt_info, _initialize_dsbt_solib): Update.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* spu-tdep.c (spu_overlay_data): Change type.
-	(spu_get_overlay_table, spu_overlay_new_objfile)
-	(_initialize_spu_tdep): Update.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* gdb-stabs.h (struct dbx_symfile_info): Add initializers and
-	destructor.
-	(dbx_objfile_data_key): Change type and declare later.
-	(DBX_SYMFILE_INFO): Rewrite.
-	* dbxread.c (dbx_objfile_data_key): Change type.
-	(dbx_symfile_init): Update.
-	(~dbx_symfile_info): Rename from dbx_free_symfile_info.  Update.
-	(coffstab_build_psymtabs, elfstab_build_psymtabs)
-	(stabsect_build_psymtabs, _initialize_dbxread): Update.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* jit.c (jit_program_space_key): Change type.  Move lower.
-	(get_jit_program_space_data): Update.
-	(jit_program_space_data_cleanup): Remove.
-	(jit_breakpoint_deleted, free_objfile_data, _initialize_jit):
-	Update.
-	(struct jit_program_space_data): Add initializers.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* solib-darwin.c (struct darwin_info): Add initializers.
-	(solib_darwin_pspace_data): Change type.
-	(darwin_pspace_data_cleanup): Remove.
-	(get_darwin_info, _initialize_darwin_solib): Update.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* remote-sim.c (struct sim_inferior_data): Add initializers,
-	constructor, and destructor.
-	(sim_inferior_data_key): Change type.  Move lower.
-	(check_for_duplicate_sim_descriptor): Update.
-	(get_sim_inferior_data): Use new.  Update.
-	(~sim_inferior_data_cleanup): Rename from
-	sim_inferior_data_cleanup.  Simplify.
-	(gdbsim_close_inferior, simulator_command)
-	(sim_command_completer, _initialize_remote_sim): Update.
-	(next_pid, INITIAL_PID): Move earlier.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* python/python-internal.h (create_thread_object): Return
-	gdbpy_ref.
-	* python/py-infthread.c (create_thread_object): Return gdbpy_ref.
-	* python/py-inferior.c (struct threadlist_entry): Add
-	constructor.
-	<thread_obj>: Now a gdbpy_ref.
-	(thread_to_thread_object): Update.
-	(add_thread_object): Use new.
-	(delete_thread_object): Use delete.
-	(infpy_threads): Update.
-	(py_free_inferior): Update.  Construct "inf_obj" after acquiring
-	GIL.
-
-2019-07-10  Tom Tromey  <tromey@adacore.com>
-
-	* valops.c (value_cast): Specialize error message for Ada.
-
-2019-07-10  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* breakpoint.c (breakpoint_1): Update doc and parameter names.
-
-2019-07-10  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* breakpoint.h (bpstat_explains_signal, bpstat_causes_stop,
-	bpstat_should_step): Return bool, adjust comments.
-	* breakpoint.c (bpstat_explains_signal, bpstat_causes_stop,
-	bpstat_should_step): Likewise.
-
-2019-07-10  Alan Hayward  <alan.hayward@arm.com>
-
-	* features/Makefile: Use feature target descriptions for Arm.
-	* features/arm/arm-core.c: Generate new file.
-	* features/arm/arm-fpa.c: Likewise.
-	* features/arm/arm-m-profile-with-fpa.xml: Likewise.
-	* features/arm/arm-m-profile.c: Likewise.
-	* features/arm/arm-vfpv2.c: Likewise.
-	* features/arm/arm-vfpv3.c: Likewise.
-	* features/arm/xscale-iwmmxt.c: Likewise.
-	* target-descriptions.c (maint_print_c_tdesc_cmd): Add Arm.
-
-2019-07-10  Alan Hayward  <alan.hayward@arm.com>
-
-	* arm-linux-nat.c (arm_linux_nat_target::read_description): Check
-	ptrace earlier.
-
-2019-07-10  Alan Hayward  <alan.hayward@arm.com>
-
-	* features/aarch64-pauth.c: Regenerate.
-
-2019-07-09  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* breakpoint.h (struct bpstat_what) <is_longjmp>: Change type to
-	bool.
-	(bpstat_what): Use false instead of 0.
-
-2019-07-09  Pedro Alves  <palves@redhat.com>
-
-	* break-catch-throw.c (is_exception_catchpoint): New.
-	* breakpoint.c (print_one_breakpoint_location): New parameter
-	'raw_loc'.  Handle it.  Use
-	is_watchpoint/is_catchpoint/is_exception_catchpoint instead of
-	looking at the breakpoint's type.
-	(print_one_breakpoint): If handling "maint info breakpoints", also
-	print locations of exception catchpoints.
-	* breakpoint.h (is_exception_catchpoint): Declare.
-
-2019-07-09  Pedro Alves  <palves@redhat.com>
-
-	* break-catch-throw.c (print_one_exception_catchpoint): Skip the
-	"addr" field.
-	(allocate_location_exception_catchpoint): New.
-	(handle_gnu_v3_exceptions): Don't reset 'type' to bp_breakpoint.
-	(initialize_throw_catchpoint_ops): Install
-	allocate_location_exception_catchpoint as allocate_location
-	method.
-	* breakpoint.c (bpstat_what) <bp_catch>: Set action to
-	BPSTAT_WHAT_SINGLE if not stopping and the location's type is not
-	bp_loc_other.
-	(breakpoint_address_is_meaningful): Delete.
-	(bl_address_is_meaningful): New.
-	(breakpoint_locations_match): Adjust comment.
-	(bp_location_from_bp_type): New, factored out of...
-	(bp_location::bp_location(breakpoint *)): ... this.
-	(bp_location::bp_location(breakpoint *, bp_loc_type)): New,
-	factored out of...
-	(bp_location::bp_location(breakpoint *)): ... this.  Reimplement.
-	(bp_loc_is_permanent): Use bl_address_is_meaningful instead of
-	breakpoint_address_is_meaningful.
-	(bp_locations_compare): Adjust comment.
-	(update_global_location_list): Use bl_address_is_meaningful
-	instead of breakpoint_address_is_meaningful.
-	* breakpoint.h (bp_location::bp_location(breakpoint *)): New
-	explicit.
-	(bp_location::bp_location(breakpoint *, bp_loc_type)): Declare.
-	* python/py-breakpoint.c (bppy_get_location): No longer check
-	whether location is null.
-
-2019-07-09  Pedro Alves  <palves@redhat.com>
-
-	PR c++/15468
-	* breakpoint.c (print_one_breakpoint_location): Remove
-	single-location assert.
-
-2019-07-09  Tom Tromey  <tom@tromey.com>
-
-	* contrib/ari/gdb_ari.sh: Change common to gdbsupport.
-	* configure: Rebuild.
-	* configure.ac: Change common to gdbsupport.
-	* gdbsupport: Rename from common.
-	* acinclude.m4: Change common to gdbsupport.
-	* Makefile.in (CONFIG_SRC_SUBDIR, COMMON_SFILES)
-	(HFILES_NO_SRCDIR, stamp-version, ALLDEPFILES): Change common to
-	gdbsupport.
-	* aarch64-tdep.c, ada-lang.c, ada-lang.h, agent.c, alloc.c,
-	amd64-darwin-tdep.c, amd64-dicos-tdep.c, amd64-fbsd-nat.c,
-	amd64-fbsd-tdep.c, amd64-linux-nat.c, amd64-linux-tdep.c,
-	amd64-nbsd-tdep.c, amd64-obsd-tdep.c, amd64-sol2-tdep.c,
-	amd64-tdep.c, amd64-windows-tdep.c, arch-utils.c,
-	arch/aarch64-insn.c, arch/aarch64.c, arch/aarch64.h, arch/amd64.c,
-	arch/amd64.h, arch/arm-get-next-pcs.c, arch/arm-linux.c,
-	arch/arm.c, arch/i386.c, arch/i386.h, arch/ppc-linux-common.c,
-	arch/riscv.c, arch/riscv.h, arch/tic6x.c, arm-tdep.c, auto-load.c,
-	auxv.c, ax-gdb.c, ax-general.c, ax.h, breakpoint.c, breakpoint.h,
-	btrace.c, btrace.h, build-id.c, build-id.h, c-lang.h, charset.c,
-	charset.h, cli/cli-cmds.c, cli/cli-cmds.h, cli/cli-decode.c,
-	cli/cli-dump.c, cli/cli-option.h, cli/cli-script.c,
-	coff-pe-read.c, command.h, compile/compile-c-support.c,
-	compile/compile-c.h, compile/compile-cplus-symbols.c,
-	compile/compile-cplus-types.c, compile/compile-cplus.h,
-	compile/compile-loc2c.c, compile/compile.c, completer.c,
-	completer.h, contrib/ari/gdb_ari.sh, corefile.c, corelow.c,
-	cp-support.c, cp-support.h, cp-valprint.c, csky-tdep.c, ctf.c,
-	darwin-nat.c, debug.c, defs.h, disasm-selftests.c, disasm.c,
-	disasm.h, dtrace-probe.c, dwarf-index-cache.c,
-	dwarf-index-cache.h, dwarf-index-write.c, dwarf2-frame.c,
-	dwarf2expr.c, dwarf2loc.c, dwarf2read.c, event-loop.c,
-	event-top.c, exceptions.c, exec.c, extension.h, fbsd-nat.c,
-	features/aarch64-core.c, features/aarch64-fpu.c,
-	features/aarch64-pauth.c, features/aarch64-sve.c,
-	features/i386/32bit-avx.c, features/i386/32bit-avx512.c,
-	features/i386/32bit-core.c, features/i386/32bit-linux.c,
-	features/i386/32bit-mpx.c, features/i386/32bit-pkeys.c,
-	features/i386/32bit-segments.c, features/i386/32bit-sse.c,
-	features/i386/64bit-avx.c, features/i386/64bit-avx512.c,
-	features/i386/64bit-core.c, features/i386/64bit-linux.c,
-	features/i386/64bit-mpx.c, features/i386/64bit-pkeys.c,
-	features/i386/64bit-segments.c, features/i386/64bit-sse.c,
-	features/i386/x32-core.c, features/riscv/32bit-cpu.c,
-	features/riscv/32bit-csr.c, features/riscv/32bit-fpu.c,
-	features/riscv/64bit-cpu.c, features/riscv/64bit-csr.c,
-	features/riscv/64bit-fpu.c, features/tic6x-c6xp.c,
-	features/tic6x-core.c, features/tic6x-gp.c, filename-seen-cache.h,
-	findcmd.c, findvar.c, fork-child.c, gcore.c, gdb_bfd.c, gdb_bfd.h,
-	gdb_proc_service.h, gdb_regex.c, gdb_select.h, gdb_usleep.c,
-	gdbarch-selftests.c, gdbthread.h, gdbtypes.h, gnu-nat.c,
-	go32-nat.c, guile/guile.c, guile/scm-ports.c,
-	guile/scm-safe-call.c, guile/scm-type.c, i386-fbsd-nat.c,
-	i386-fbsd-tdep.c, i386-go32-tdep.c, i386-linux-nat.c,
-	i386-linux-tdep.c, i386-tdep.c, i387-tdep.c,
-	ia64-libunwind-tdep.c, ia64-linux-nat.c, inf-child.c,
-	inf-ptrace.c, infcall.c, infcall.h, infcmd.c, inferior-iter.h,
-	inferior.c, inferior.h, inflow.c, inflow.h, infrun.c, infrun.h,
-	inline-frame.c, language.h, linespec.c, linux-fork.c, linux-nat.c,
-	linux-tdep.c, linux-thread-db.c, location.c, machoread.c,
-	macrotab.h, main.c, maint.c, maint.h, memattr.c, memrange.h,
-	mi/mi-cmd-break.h, mi/mi-cmd-env.c, mi/mi-cmd-stack.c,
-	mi/mi-cmd-var.c, mi/mi-interp.c, mi/mi-main.c, mi/mi-parse.h,
-	minsyms.c, mips-linux-tdep.c, namespace.h,
-	nat/aarch64-linux-hw-point.c, nat/aarch64-linux-hw-point.h,
-	nat/aarch64-linux.c, nat/aarch64-sve-linux-ptrace.c,
-	nat/amd64-linux-siginfo.c, nat/fork-inferior.c,
-	nat/linux-btrace.c, nat/linux-btrace.h, nat/linux-namespaces.c,
-	nat/linux-nat.h, nat/linux-osdata.c, nat/linux-personality.c,
-	nat/linux-procfs.c, nat/linux-ptrace.c, nat/linux-ptrace.h,
-	nat/linux-waitpid.c, nat/mips-linux-watch.c,
-	nat/mips-linux-watch.h, nat/ppc-linux.c, nat/x86-dregs.c,
-	nat/x86-dregs.h, nat/x86-linux-dregs.c, nat/x86-linux.c,
-	nto-procfs.c, nto-tdep.c, objfile-flags.h, objfiles.c, objfiles.h,
-	obsd-nat.c, observable.h, osdata.c, p-valprint.c, parse.c,
-	parser-defs.h, ppc-linux-nat.c, printcmd.c, probe.c, proc-api.c,
-	procfs.c, producer.c, progspace.h, psymtab.h,
-	python/py-framefilter.c, python/py-inferior.c, python/py-ref.h,
-	python/py-type.c, python/python.c, record-btrace.c, record-full.c,
-	record.c, record.h, regcache-dump.c, regcache.c, regcache.h,
-	remote-fileio.c, remote-fileio.h, remote-sim.c, remote.c,
-	riscv-tdep.c, rs6000-aix-tdep.c, rust-exp.y, s12z-tdep.c,
-	selftest-arch.c, ser-base.c, ser-event.c, ser-pipe.c, ser-tcp.c,
-	ser-unix.c, skip.c, solib-aix.c, solib-target.c, solib.c,
-	source-cache.c, source.c, source.h, sparc-nat.c, spu-linux-nat.c,
-	stack.c, stap-probe.c, symfile-add-flags.h, symfile.c, symfile.h,
-	symtab.c, symtab.h, target-descriptions.c, target-descriptions.h,
-	target-memory.c, target.c, target.h, target/waitstatus.c,
-	target/waitstatus.h, thread-iter.h, thread.c, tilegx-tdep.c,
-	top.c, top.h, tracefile-tfile.c, tracefile.c, tracepoint.c,
-	tracepoint.h, tui/tui-io.c, ui-file.c, ui-out.h,
-	unittests/array-view-selftests.c,
-	unittests/child-path-selftests.c, unittests/cli-utils-selftests.c,
-	unittests/common-utils-selftests.c,
-	unittests/copy_bitwise-selftests.c, unittests/environ-selftests.c,
-	unittests/format_pieces-selftests.c,
-	unittests/function-view-selftests.c,
-	unittests/lookup_name_info-selftests.c,
-	unittests/memory-map-selftests.c, unittests/memrange-selftests.c,
-	unittests/mkdir-recursive-selftests.c,
-	unittests/observable-selftests.c,
-	unittests/offset-type-selftests.c, unittests/optional-selftests.c,
-	unittests/parse-connection-spec-selftests.c,
-	unittests/ptid-selftests.c, unittests/rsp-low-selftests.c,
-	unittests/scoped_fd-selftests.c,
-	unittests/scoped_mmap-selftests.c,
-	unittests/scoped_restore-selftests.c,
-	unittests/string_view-selftests.c, unittests/style-selftests.c,
-	unittests/tracepoint-selftests.c, unittests/unpack-selftests.c,
-	unittests/utils-selftests.c, unittests/xml-utils-selftests.c,
-	utils.c, utils.h, valarith.c, valops.c, valprint.c, value.c,
-	value.h, varobj.c, varobj.h, windows-nat.c, x86-linux-nat.c,
-	xml-support.c, xml-support.h, xml-tdesc.h, xstormy16-tdep.c,
-	xtensa-linux-nat.c, dwarf2read.h: Change common to gdbsupport.
-
-2019-07-09  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* linespec.c (decode_digits_list_mode): Set explicit_line to a
-	bool value.
-	(decode_digits_ordinary): Set explicit_line field in sal.
-	* symtab.c (skip_prologue_sal): Don't skip prologue for a
-	symtab_and_line that was set on an explicit line number in
-	assembler code.  Do always update the recorded symtab and line if
-	we do skip the prologue.
-
-2019-07-09  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* breakpoint.c (set_breakpoint_location_function): Remove
-	explicit_loc parameter.
-	(momentary_breakpoint_from_master): Update call to
-	set_breakpoint_location_function.
-	(add_location_to_breakpoint): Likewise.
-
-2019-07-09  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* riscv-tdep.c (riscv_features_from_gdbarch_info): Don't modify
-	required features based on default bfd type when no specific bfd
-	is present.
-
-2019-07-08  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* NEWS: Mention that GDB printf and eval commands can now print
-	C-style and Ada-style convenience var strings without
-	calling the inferior.
-	* printcmd.c (printf_c_string): Locally print GDB internal var
-	instead of transiting via the inferior.
-	(printf_wide_c_string): Likewise.
-
-2019-07-04  Alan Hayward  <alan.hayward@arm.com>
-
-	PR breakpoints/25011
-	* symfile.c (symbol_file_command): Call solib_create_inferior_hook.
-
-2019-07-04  Tom Tromey  <tom@tromey.com>
-
-	PR tui/24724:
-	* tui/tui-winsource.c (tui_clear_source_content): Update.
-	(tui_source_window_base::set_is_exec_point_at): Fix comment.
-	(tui_update_breakpoint_info): Update.
-	(tui_set_exec_info_content): Update.
-	* tui/tui-source.c (tui_set_source_content_nil): Update.
-	* tui/tui-disasm.c (tui_set_disassem_content): Don't set
-	has_break.
-	* tui/tui-data.h (enum tui_bp_flag): New.
-	(tui_bp_flags): New enum flags type.
-	(struct tui_source_element) <break_mode>: Change type.  Rename
-	from has_break.
-	(TUI_BP_ENABLED, TUI_BP_DISABLED, TUI_BP_HIT)
-	(TUI_BP_CONDITIONAL, TUI_BP_HARDWARE): Don't define.  Now enum
-	constants.
-	* tui/tui-winsource.h: Fix comment.
-
-2019-07-04  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch32-linux-nat.h (VFP_REGS_SIZE): Remove define.
-	* aarch64-linux-nat.c (fetch_fpregs_from_thread)
-	(store_fpregs_to_thread)
-	(aarch64_linux_nat_target::read_description): Use ARM_VFP3_REGS_SIZE.
-	* arch/arm.h (IWMMXT_VEC_REGISTER_SIZE, ARM_CORE_REGS_SIZE)
-	(ARM_FP_REGS_SIZE, ARM_VFP2_REGS_SIZE, ARM_VFP3_REGS_SIZE)
-	(IWMMXT_REGS_SIZE): Add define.
-	* arm-linux-nat.c (IWMMXT_REGS_SIZE): Remove define.
-	(fetch_vfp_regs, store_vfp_regs)
-	(arm_linux_nat_target::read_description): Use ARM_VFP3_REGS_SIZE.
-	* arm-tdep.c (arm_register_g_packet_guesses): Use new defines.
-
-2019-07-04  Alan Hayward  <alan.hayward@arm.com>
-
-        * arch/arm-get-next-pcs.c (thumb_get_next_pcs_raw): Use ARM_
-        defines.
-        * arch/arm-linux.c (arm_linux_sigreturn_next_pc_offset): Likewise.
-        * arch/arm.h (INT_REGISTER_SIZE) Rename from...
-        (ARM_INT_REGISTER_SIZE): ...to this.
-        (ARM_FP_REGISTER_SIZE) (ARM_VFP_REGISTER_SIZE): Add define.
-        * arm-linux-tdep.c (ARM_LINUX_JB_ELEMENT_SIZE)
-        (ARM_LINUX_SIZEOF_GREGSET, arm_linux_supply_gregset)
-        (arm_linux_collect_gregset, supply_nwfpe_register)
-        (collect_nwfpe_register, arm_linux_collect_nwfpe): Use ARM_
-        defines.
-        * arm-linux-tdep.h (ARM_LINUX_SIZEOF_NWFPE, NWFPE_FPSR_OFFSET)
-        (NWFPE_FPCR_OFFSET, NWFPE_TAGS_OFFSET): Likewise
-        * arm-nbsd-tdep.c (ARM_NBSD_JB_ELEMENT_SIZE): Likewise.
-        * arm-tdep.c (arm_push_dummy_call, arm_extract_return_value)
-        (arm_return_in_memory, arm_store_return_value)
-        (arm_get_longjmp_target, arm_register_g_packet_guesses)
-        (arm_record_ld_st_multiple): Likewise.
-        * arm-tdep.h (FP_REGISTER_SIZE, VFP_REGISTER_SIZE): Remove.
-        * arm-wince-tdep.c (ARM_WINCE_JB_ELEMENT_SIZE): Use ARM_ defines.
-
-2019-07-04  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-linux-tdep.c (aarch64_linux_init_abi): Use
-	AARCH64_DISPLACED_MODIFIED_INSNS.
-	* aarch64-tdep.c (struct aarch64_displaced_step_data)
-	(aarch64_displaced_step_copy_insn): Likewise.
-	* aarch64-tdep.h (DISPLACED_MODIFIED_INSNS): Rename from..
-	(AARCH64_DISPLACED_MODIFIED_INSNS): ...to this.
-	* arm-linux-tdep.c (arm_linux_cleanup_svc): Use
-	ARM_DISPLACED_MODIFIED_INSNS.
-	* arm-tdep.c (arm_gdbarch_init): Likewise.
-	* arm-tdep.h (DISPLACED_MODIFIED_INSNS): Rename from..
-	(ARM_DISPLACED_MODIFIED_INSNS): ...to this.
-	(struct arm_displaced_step_closure): Use
-	ARM_DISPLACED_MODIFIED_INSNS.
-
-2019-07-04  Alan Hayward  <alan.hayward@arm.com>
-
-	* features/Makefile: Remove unused xml files.
-	* features/aarch64.xml: Remove.
-	* features/i386/amd64-avx-avx512-linux.xml: Remove.
-	* features/i386/amd64-avx-avx512.xml: Remove.
-	* features/i386/amd64-avx-linux.xml: Remove.
-	* features/i386/amd64-avx-mpx-avx512-pku-linux.xml: Remove.
-	* features/i386/amd64-avx-mpx-avx512-pku.xml: Remove.
-	* features/i386/amd64-avx-mpx-linux.xml: Remove.
-	* features/i386/amd64-avx-mpx.xml: Remove.
-	* features/i386/amd64-avx.xml: Remove.
-	* features/i386/amd64-linux.xml: Remove.
-	* features/i386/amd64-mpx-linux.xml: Remove.
-	* features/i386/amd64-mpx.xml: Remove.
-	* features/i386/amd64.xml: Remove.
-	* features/i386/i386-avx-avx512-linux.xml: Remove.
-	* features/i386/i386-avx-avx512.xml: Remove.
-	* features/i386/i386-avx-linux.xml: Remove.
-	* features/i386/i386-avx-mpx-avx512-pku-linux.xml: Remove.
-	* features/i386/i386-avx-mpx-avx512-pku.xml: Remove.
-	* features/i386/i386-avx-mpx-linux.xml: Remove.
-	* features/i386/i386-avx-mpx.xml: Remove.
-	* features/i386/i386-avx.xml: Remove.
-	* features/i386/i386-linux.xml: Remove.
-	* features/i386/i386-mmx-linux.xml: Remove.
-	* features/i386/i386-mmx.xml: Remove.
-	* features/i386/i386-mpx-linux.xml: Remove.
-	* features/i386/i386-mpx.xml: Remove.
-	* features/i386/i386.xml: Remove.
-	* features/i386/x32-avx-avx512-linux.xml: Remove.
-	* features/i386/x32-avx-linux.xml: Remove.
-	* features/i386/x32-linux.xml: Remove.
-
-2019-07-04  Alan Hayward  <alan.hayward@arm.com>
-
-	* regformats/aarch64.dat: Remove.
-	* regformats/i386/amd64-avx-avx512-linux.dat: Remove.
-	* regformats/i386/amd64-avx-linux.dat: Remove.
-	* regformats/i386/amd64-avx-mpx-avx512-pku-linux.dat: Remove.
-	* regformats/i386/amd64-avx-mpx-linux.dat: Remove.
-	* regformats/i386/amd64-linux.dat: Remove.
-	* regformats/i386/amd64-mpx-linux.dat: Remove.
-	* regformats/i386/amd64.dat: Remove.
-	* regformats/i386/i386-avx-avx512-linux.dat: Remove.
-	* regformats/i386/i386-avx-linux.dat: Remove.
-	* regformats/i386/i386-avx-mpx-avx512-pku-linux.dat: Remove.
-	* regformats/i386/i386-avx-mpx-linux.dat: Remove.
-	* regformats/i386/i386-linux.dat: Remove.
-	* regformats/i386/i386-mmx-linux.dat: Remove.
-	* regformats/i386/i386-mpx-linux.dat: Remove.
-	* regformats/i386/i386.dat: Remove.
-	* regformats/i386/x32-avx-avx512-linux.dat: Remove.
-	* regformats/i386/x32-avx-linux.dat: Remove.
-	* regformats/i386/x32-linux.dat: Remove.
-
-2019-07-04  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c: Remove xml self tests.
-	* amd64-linux-tdep.c: Likewise.
-	* amd64-tdep.c: Likewise.
-	* i386-linux-tdep.c: Likewise.
-	* i386-tdep.c: Likewise.
-
-2019-07-03  Pedro Alves  <palves@redhat.com>
-
-	PR cli/24732
-	* cli/cli-cmds.c (struct pipe_cmd_opts): New.
-	(pipe_cmd_option_defs): New.
-	(make_pipe_cmd_options_def_group): New.
-	(pipe_command): Use gdb::option::process_options.
-	(pipe_command_completer): New function.
-	(_initialize_cli_cmds): Install completer for "pipe" command.
-
-2019-07-03  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-option.c (union option_value) <string>: New field.
-	(struct option_def_and_value): Add ctor, move ctor, dtor and
-	use DISABLE_COPY_AND_ASSIGN.
-	(option_def_and_value::clear_value): New.
-	(parse_option, save_option_value_in_ctx, get_val_type_str)
-	(add_setshow_cmds_for_options): Handle var_string.
-	* cli-option.h (union option_def::var_address) <string>: New
-	field.
-	(struct string_option_def): New.
-	* maint-test-options.c (struct test_options_opts): Add default
-	ctor and use DISABLE_COPY_AND_ASSIGN.
-	<string_opt>: New field.
-	(test_options_opts::~test_options_opts): New.
-	(test_options_opts::dump): Also dump "-string".
-	(test_options_option_defs): Install "string.
-
-2019-07-03  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-option.c (parse_option) <var_enum>: Don't return an
-	option_value with a null enumeration.
-	(complete_options): Save the option values in the context.
-	(save_option_value_in_ctx): New, factored out from ...
-	(process_options): ... here.
-	* cli/cli-utils.c (get_ulongest): Don't advance PP until the end
-	of the function.
-	* maint-test-options.c (test_options_opts::dump): New, factored
-	out from ...
-	(maintenance_test_options_command_mode): ... here.
-	(maintenance_test_options_command_completion_result): Delete.
-	(maintenance_test_options_command_completion_text): Update
-	comment.
-	(maintenance_show_test_options_completion_result): Change
-	prototype.  Just print
-	maintenance_test_options_command_completion_text.
-	(save_completion_result): New.
-	(maintenance_test_options_completer_mode): Pass options context to
-	complete_options, and then save a dump.
-	(_initialize_maint_test_options): Use add_cmd to install "maint
-	show test-options-completion-result".
-
-2019-07-03  Pedro Alves  <palves@redhat.com>
-
-	* NEWS (New commands): Mention "with" and "maint with".
-	* cli/cli-cmds.c (with_command_1, with_command_completer_1)
-	(with_command, with_command_completer): New.
-	(pipe_command): Adjust to new repeat_previous
-	interface.
-	(_initialize_cli_cmds): Install the "with" command and its "w"
-	alias.
-	* cli/cli-cmds.h (with_command_1, with_command_completer_1): New
-	declarations.
-	* cli/cli-setshow.c (parse_cli_var_uinteger)
-	(parse_cli_var_zuinteger_unlimited, do_set_command): Handle empty
-	argument strings for all var_types.
-	(get_setshow_command_value_string): New, factored out from ...
-	(do_show_command): ... this.
-	* cli/cli-setshow.h: Include <string>.
-	(get_setshow_command_value_string): Declare.
-	* command.h (repeat_previous): Now returns const char *.  Adjust
-	comment.
-	* maint.c: Include "cli/cli-cmds.h".
-	(maintenance_with_cmd, maintenance_with_cmd_completer): New.
-	(_initialize_maint_cmds): Register the "maintenance with" command.
-	* top.c (repeat_previous): Move bits from pipe_command here:
-	Return the saved command line, if any; error out if there's no
-	command to relaunch.
-
-2019-07-03  Pedro Alves  <palves@redhat.com>
-
-	* NEWS (New commands): Mention "maint set/show test-settings"
-	instead of "maint test-settings".
-	* maint-test-settings.c (maintenance_test_settings_list): Delete.
-	(maintenance_test_settings_set_list): Rename to ...
-	(maintenance_set_test_settings_list): ... this.
-	(maintenance_test_settings_show_list): Rename to  ...
-	(maintenance_show_test_settings_list): ... this.
-	(maintenance_test_settings_cmd): Delete.
-	(maintenance_test_settings_set_cmd): ...
-	(maintenance_set_test_settings_cmd): ... this.
-	(maintenance_test_settings_show_cmd): ...
-	(maintenance_show_test_settings_cmd): ... this.
-	(maintenance_test_settings_show_value_cmd):
-	(maintenance_show_test_settings_value_cmd): ... this.
-	(_initialize_maint_test_settings): No longer install the "maint
-	test-settings" prefix command.  Rename "maint test-settings set"
-	to "maint set test-settings", and "maint test-settings show" to
-	"maint show test-settings".  Adjust all subcommands.
-
-2019-07-03  Pedro Alves  <palves@redhat.com>
-
-	* maint-test-settings.c: Fix file's intro comment.  Replace all
-	references to "test-options" with references to "test-settings",
-	in comments.
-
-2019-07-03  Pedro Alves  <palves@redhat.com>
-
-	* maint-test-settings.c (maintenance_test_settings_xxx)
-	(maintenance_test_settings_yyy, maintenance_test_settings_zzz):
-	New.
-	(maintenance_test_settings_enums): Use them.
-	(maintenance_test_settings_enum): Default to
-	maintenance_test_settings_xxx.
-	(_initialize_maint_test_settings): Initialize
-	MAINTENANCE_TEST_SETTINGS_FILENAME.
-
-2019-07-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* breakpoint.h (remove_breakpoints_inf): Change return type to
-	void, move function documentation here.
-	* breakpoint.c (remove_breakpoints_inf): Change return type to
-	void, move function documentation to header.
-
-2019-07-02  Pedro Alves  <palves@redhat.com>
-
-	* NEWS (Completion improvements): Mention "info threads".
-	* thread.c (struct info_threads_opts, info_threads_option_defs)
-	(make_info_threads_options_def_group): New.
-	(info_threads_command): Use gdb::option::process_options.
-	(info_threads_command_completer): New.
-	(_initialize_thread): Use gdb::option::build_help to build the
-	help text for "info threads".
-
-2019-07-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* defs.h (generic_load): Move from here...
-	* symfile.h (generic_load): ... to here.  Rename name parameter
-	to args.
-	* symfile.c (generic_load): Add comment.
-
-2019-07-01  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.c
-	(dw2_debug_names_iterator::find_vec_in_debug_names): Hoist
-	declaration of without_params.  Fix formatting.
-
-2019-07-01  Tom Tromey  <tromey@adacore.com>
-
-	* ada-exp.y (find_primitive_type): Update.
-	* ada-lang.h (ada_lookup_symbol): Update.
-	* ada-lang.c (ada_lookup_symbol): Remove "is_a_field_of_this"
-	parameter.
-	(ada_lookup_encoded_symbol, ada_lookup_symbol_nonlocal): Update.
-
-2019-06-28  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR breakpoints/24541
-	* gdbarch.c: Regenerate.
-	* gdbarch.h: Regenerate.
-	* gdbarch.sh: Add 'stap_adjust_register'.
-	* i386-tdep.c: Include '<unordered_set>'.
-	(i386_stap_adjust_register): New function.
-	(i386_elf_init_abi): Register 'i386_stap_adjust_register'.
-	* stap-probe.c (stap_parse_register_operand): Call
-	'gdbarch_stap_adjust_register'.
-
-2019-06-28  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR python/24742
-	https://bugzilla.redhat.com/show_bug.cgi?id=1723564
-	* python/python.c (do_start_initialization): Use 'xmalloc'
-	instead of 'PyMem_Malloc'.
-
-2019-06-28  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.c (partial_die_info::read): Prefer the linkage name
-	for Ada.
-
-2019-06-27  Tom Tromey  <tromey@adacore.com>
-
-	* arm-tdep.c (arm_objfile_data_key): Move lower.  Change type to
-	objfile_key.
-	(arm_find_mapping_symbol, arm_record_special_symbol)
-	(_initialize_arm_tdep): Update.
-	(arm_objfile_data_free): Remove.
-
-2019-06-27  Tom Tromey  <tromey@adacore.com>
-
-	* cp-valprint.c (cp_print_value_fields): Pass opts, not options,
-	to cp_print_static_field.
-
-2019-06-26  Tom Tromey  <tromey@adacore.com>
-
-	* minsyms.c (lookup_minimal_symbol_solib_trampoline): Remove.
-	* minsyms.h (lookup_minimal_symbol_solib_trampoline): Don't
-	declare.
-
-2019-06-26  Alan Hayward  <alan.hayward@arm.com>
-
-	* features/aarch64-core.c (create_feature_aarch64_core):
-	Regenerate.
-	* features/aarch64-core.xml: Add cpsr flags.
-
-2019-06-26  Alan Hayward  <alan.hayward@arm.com>
-
-	* arm-tdep.c (arm_gnu_triplet_regexp): New function.
-	(arm_gdbarch_init): Add arm_gnu_triplet_regexp.
-
-2019-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* arm-tdep.c (struct arm_per_objfile) <section_maps_sorted>: New
-	field.
-	(arm_find_mapping_symbol): Sort mapping symbol vectors on first
-	use.
-	(arm_record_special_symbol): Don't insert new symbol in sorted
-	position, push it at the end.
-
-2019-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* arm-tdep.c (struct arm_mapping_symbol) (operator <): New.
-	(arm_mapping_symbol_s): Remove.
-	(DEF_VEC_O(arm_mapping_symbol_s)): Remove.
-	(arm_mapping_symbol_vec): New typedef.
-	(struct arm_per_objfile): Add constructor.
-	<section_maps>: Change type to
-	std::unique_ptr<arm_mapping_symbol_vec[]>.
-	(arm_compare_mapping_symbols): Remove.
-	(arm_find_mapping_symbol): Adjust to section_maps type change.
-	(arm_objfile_data_free): Call delete on arm_per_objfile.
-	(arm_record_special_symbol): Adjust to section_maps type change.
-	Allocate arm_per_objfile with new.
-
-2019-06-25  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* cli/cli-cmds.c (alias_command): Compare the alias prefix
-	with the command prefix.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_delete_win): Remove "return".
-	* tui/tui-data.c (~tui_gen_win_info): Remove "if".
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (init_and_make_win): Assert on unrecognized
-	type.
-	* tui/tui-data.h (struct tui_gen_win_info): Make constructor
-	protected.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c
-	(tui_source_window_base::set_is_exec_point_at): Add check against
-	LOA_ADDRESS.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-source.c (tui_set_source_content): Don't check before
-	xfree.
-	* tui/tui-disasm.c (tui_disassemble): Don't check before xfree.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_update_source_window_as_is)
-	(tui_alloc_source_buffer, tui_line_is_displayed)
-	(tui_addr_is_displayed): Change type of win_info.
-	* tui/tui-winsource.c (tui_update_source_window_as_is)
-	(tui_clear_source_content, tui_show_source_line)
-	(tui_show_source_content, tui_source_window_base::refill)
-	(tui_source_window_base::set_is_exec_point_at)
-	(tui_source_window_base::set_is_exec_point_at)
-	(tui_update_breakpoint_info, tui_set_exec_info_content): Update.
-	(tui_alloc_source_buffer, tui_line_is_displayed)
-	(tui_addr_is_displayed): Change type of win_info.  Update.
-	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
-	(tui_source_window_base::do_make_visible_with_new_height):
-	Update.
-	* tui/tui-source.c (tui_set_source_content)
-	(tui_set_source_content_nil)
-	(tui_source_window::do_scroll_vertical): Update.
-	* tui/tui-layout.c (show_layout): Update.
-	* tui/tui-disasm.c (tui_set_disassem_content)
-	(tui_disasm_window::do_scroll_vertical): Update.
-	* tui/tui-data.h (tui_win_content): Remove.
-	(struct tui_gen_win_info) <content, content_size>: Remove.
-	(struct tui_source_element): Add initializers and destructor.
-	(union tui_which_element, struct tui_win_element): Remove.
-	(struct tui_source_window_base) <content>: New field.
-	(struct tui_data_window): Remove destructor.
-	(tui_alloc_content, tui_free_win_content)
-	(tui_free_all_source_wins_content): Don't declare.
-	* tui/tui-data.c (tui_initialize_static_data): Update.
-	(init_content_element, tui_alloc_content): Remove.
-	(~tui_gen_win_info): Update.
-	(~tui_data_window, tui_free_all_source_wins_content)
-	(tui_free_win_content, free_content, free_content_elements):
-	Remove.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_clear_source_content)
-	(tui_erase_source_content, tui_show_source_content): Change type
-	of win_info.
-	* tui/tui-winsource.c (tui_clear_source_content)
-	(tui_erase_source_content, tui_show_source_content): Change type
-	of win_info.
-	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update.
-	* tui/tui-source.h (tui_set_source_content_nil): Change type of
-	win_info.
-	* tui/tui-source.c (tui_set_source_content_nil): Change type of
-	win_info.
-	* tui/tui-layout.c (show_source_or_disasm_and_command): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_clear_source_content)
-	(tui_source_window_base::set_is_exec_point_at): Update.
-	* tui/tui-source.c (tui_set_source_content_nil): Update.
-	* tui/tui-data.h (struct tui_source_element) <is_exec_point>: Now
-	a bool.
-	* tui/tui-data.c (init_content_element): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_gen_win_info::make_visible): Update.
-	* tui/tui-win.c (make_invisible_and_set_new_height): Update.
-	* tui/tui-layout.c (init_and_make_win): Update.
-	* tui/tui.h (enum tui_win_type): Update.
-	* tui/tui-data.h (tui_win_is_auxiliary): Rename from
-	tui_win_is_auxillary.
-	* tui/tui-data.c (tui_win_is_auxiliary): Rename from
-	tui_win_is_auxillary.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_data_window::refresh_window): Update.
-	* tui/tui-windata.c (tui_data_window::first_data_item_displayed)
-	(tui_delete_data_content_windows, tui_display_all_data)
-	(tui_data_window::do_scroll_vertical, tui_display_data_from):
-	Update.
-	* tui/tui-win.c (tui_data_window::set_new_height): Simplify.
-	* tui/tui-regs.c (tui_last_regs_line_no)
-	(tui_line_from_reg_element_no, tui_first_reg_element_no_inline)
-	(tui_show_registers): Update.
-	(tui_show_register_group): Return void.  Update.
-	(tui_display_registers_from, tui_display_reg_element_at_line)
-	(tui_display_registers_from_line, tui_check_register_values):
-	Update.
-	* tui/tui-data.h (union tui_which_element) <data_window>: Remove
-	member.
-	(struct tui_data_window) <regs_content>: Now a std::vector.
-	<regs_content_count>: Remove.
-	(tui_add_content_elements, tui_free_data_content): Don't declare.
-	* tui/tui-data.c (tui_data_window::clear_detail): Update.
-	(init_content_element): Remove DATA_WIN case.  Add assert.
-	(tui_add_content_elements): Remove.
-	(tui_data_window): Update.
-	(tui_free_data_content): Remove.
-	(free_content_elements): Remove DATA_WIN case.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.c (tui_data_item_window): Update.
-	* tui/tui-windata.h (tui_check_data_values): Don't declare.
-	* tui/tui-windata.c (tui_display_all_data)
-	(tui_display_data_from_line): Update.
-	(tui_check_data_values): Remove.
-	* tui/tui-regs.c (tui_show_register_group)
-	(tui_display_reg_element_at_line): Update.
-	* tui/tui-hooks.c (tui_register_changed)
-	(tui_refresh_frame_and_register_information): Call
-	tui_check_register_values.
-	* tui/tui-data.h (struct tui_data_window) <data_content,
-	data_content_count, data_type>: Remove.
-	(enum tui_data_type): Remove.
-
-	* tui/tui-data.c (tui_data_window::clear_detail)
-	(~tui_data_window): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.h (tui_first_data_item_displayed): Don't
-	declare.
-	* tui/tui-windata.c (tui_data_window::first_data_item_displayed):
-	Rename from tui_first_data_item_displayed.  Update.
-	(tui_data_window::refresh_all)
-	(tui_data_window::do_scroll_vertical): Update.
-	* tui/tui-data.h (struct tui_data_window)
-	<first_data_item_displayed>: Declare new method.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (tui_init_generic_part): Don't declare.
-	* tui/tui-data.c (tui_init_generic_part): Remove, moving
-	contents...
-	(tui_initialize_static_data): ...here.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_show_registers, tui_show_register_group)
-	(tui_display_registers_from, tui_check_register_values): Update.
-	(tui_display_register): Remove win_info parameter; update.
-	(tui_get_register): Change type of parameters.
-	* tui/tui-data.h (struct tui_data_element): Remove.
-	(union tui_which_element) <data>: Remove.
-	<data_window>: Change type.
-	(struct tui_data_item_window): New.
-	* tui/tui-data.c (init_content_element): Remove DATA_ITEM_WIN
-	case.  Add assert.
-	(~tui_data_item_window): New destructor.
-	(free_content_elements): Remove DATA_ITEM_WIN case.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.h (enum tui_win_type) <MAX_WINDOWS, UNDEFINED_WIN>:
-	Remove.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (struct tui_command_element): Remove.
-	(union tui_which_element) <command>: Remove.
-	* tui/tui-data.c (init_content_element): Remove CMD_WIN case.  Add
-	assert.
-	(free_content_elements): Remove CMD_WIN case.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (tui_set_layout): Update.
-	* tui/tui-data.h (struct tui_layout_def) <split>: Remove.
-	* tui/tui-data.c (layout_def): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_refresh_all): Update.
-	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
-	(tui_source_window_base::set_new_height): Update.
-	* tui/tui-stack.c (tui_make_status_line): Change parameter type.
-	Update.
-	(tui_set_locator_fullname, tui_set_locator_info)
-	(tui_show_frame_info): Update.
-	* tui/tui-source.c (tui_set_source_content)
-	(tui_source_is_displayed): Update.
-	* tui/tui-layout.c (show_source_disasm_command, show_data)
-	(show_source_or_disasm_and_command): Update.
-	* tui/tui-disasm.c (tui_set_disassem_content)
-	(tui_get_begin_asm_address): Update.
-	* tui/tui-data.h (struct tui_locator_element): Remove.
-	(union tui_which_element) <locator>: Remove.
-	(struct tui_locator_window): New.
-	(tui_locator_win_info_ptr): Change return type.
-	* tui/tui-data.c (_locator): Change type.
-	(tui_locator_win_info_ptr): Change return type.
-	(init_content_element): Remove LOCATOR_WIN case.  Add assert.
-	(tui_alloc_content): Add assert.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c
-	(tui_exec_info_window::maybe_allocate_content): New method.
-	(tui_set_exec_info_content, tui_show_exec_info_content): Update.
-	* tui/tui-layout.c (init_and_make_win): Add EXEC_INFO_WIN case.
-	(make_source_or_disasm_window): Add cast.
-	* tui/tui-data.h (union tui_which_element) <simple_string>:
-	Remove.
-	(struct tui_source_info): New.
-	(struct tui_source_window_base) <execution_info>: Change type.
-	* tui/tui-data.c (init_content_element): Remove EXEC_INFO_WIN
-	case, and add assert.
-	(tui_alloc_content): Add assert.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (tui_alloc_win_info): Don't declare.
-	* tui/tui-layout.c (init_and_make_win): Use "new" directly.
-	* tui/tui-data.c (tui_alloc_win_info): Remove.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_set_win_focus_to): Don't check window type.
-	* tui/tui-wingeneral.c (tui_unhighlight_win): Check
-	can_highlight.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_source_window_base::update_tab_width): Call
-	make_visible_with_new_height method.
-	(tui_win_info::make_visible_with_new_height): New method.
-	(tui_source_window_base::do_make_visible_with_new_height)
-	(tui_data_window::do_make_visible_with_new_height)
-	(tui_cmd_window::do_make_visible_with_new_height): New methods.
-	(make_visible_with_new_height): Remove.
-	(tui_resize_all, tui_adjust_win_heights): Use
-	make_visible_with_new_height method.
-	* tui/tui-data.h (struct tui_win_info)
-	<do_make_visible_with_new_height, make_visible_with_new_height>:
-	New methods.
-	(struct tui_source_window_base, struct tui_data_window)
-	(struct tui_cmd_window) <do_make_visible_with_new_height>: New
-	methods.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_source_window_base::update_tab_width): New
-	method.
-	(update_tab_width): Call update_tab_width method.
-	* tui/tui-data.h (struct tui_win_info)
-	(struct tui_source_window_base) <update_tab_width>: New methods.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h (tui_make_window): Change type of "box_it"
-	parameter.
-	* tui/tui-wingeneral.c (tui_make_window): Change type of "box_it"
-	parameter.
-	(tui_gen_win_info::make_visible): Update.
-	* tui/tui-layout.c (init_and_make_win): Change type of "box_it"
-	parameter.
-	* tui/tui-data.h (enum tui_box): New enum.
-	(BOX_WINDOW, DONT_BOX_WINDOW): Remove defines.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (make_source_or_disasm_window): Always use
-	init_and_make_win for EXEC_INFO_WIN.
-	* tui/tui-data.h (struct tui_gen_win_info) <~tui_gen_win_info>: No
-	longer inline.
-	(struct tui_win_info) <~tui_win_info>: Inline.
-	(tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr):
-	Don't declare.
-	* tui/tui-data.c (source_win, disasm_win): Remove globals.
-	(tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr):
-	Remove.
-	(tui_initialize_static_data): Update.
-	(~tui_gen_win_info): Handle more cleanup here.
-	(~tui_source_window_base): Delete "execution_info".
-	(~tui_win_info): Move code to ~tui_gen_win_info; remove.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (make_command_window): Don't set
-	can_highlight.
-	(show_source_disasm_command): Call the reset method.
-	(show_data): Don't set can_highlight.  Call the reset method.
-	(tui_gen_win_info::reset): Rename from init_gen_win_info
-	(init_and_make_win): Simplify.  Return tui_gen_win_info.
-	(show_source_or_disasm_and_command): Call the reset method.
-	* tui/tui-data.h (struct tui_gen_win_info) <reset>: New method.
-	(struct tui_cmd_window): Set can_highlight.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_gen_win_info::make_visible): Rename
-	from make_visible.
-	(tui_make_visible, tui_make_invisible): Rewrite.
-	(tui_win_info::make_visible): Remove.
-	(tui_source_window_base::make_visible): Update.
-	* tui/tui-data.h (struct tui_gen_win_info) <make_visible>: New
-	method.  Moved from...
-	(struct tui_win_info) <make_visible>: ...here.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c
-	(tui_source_window_base::do_scroll_horizontal): Remove direction
-	parameter.
-	* tui/tui-windata.c (tui_data_window::do_scroll_vertical): Remove
-	direction parameter.
-	* tui/tui-win.c (tui_win_info::forward_scroll)
-	(tui_win_info::backward_scroll, tui_win_info::left_scroll)
-	(tui_win_info::right_scroll): Update.
-	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Remove
-	direction parameter.
-	* tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Remove
-	direction parameter.
-	* tui/tui-data.h (enum tui_scroll_direction): Remove.
-	(struct tui_win_info) <do_scroll_vertical, do_scroll_horizontal>:
-	Remove direction parameter.
-	(struct tui_source_window_base, struct tui_source_window)
-	(struct tui_disasm_window, struct tui_data_window)
-	(struct tui_cmd_window): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_set_exec_info_content)
-	(tui_show_exec_info_content, tui_erase_exec_info_content)
-	(tui_clear_exec_info_content, tui_update_exec_info): Change
-	argument to tui_source_window_base.
-	* tui/tui-winsource.c (tui_set_exec_info_content)
-	(tui_show_exec_info_content, tui_erase_exec_info_content)
-	(tui_clear_exec_info_content, tui_update_exec_info): Change
-	argument to tui_source_window_base.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_set_exec_info_content): Return void.
-	* tui/tui-winsource.c (tui_set_exec_info_content): Return void.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_set_exec_info_content): Remove NULL
-	check.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_alloc_source_buffer): Change return
-	type to void.
-	* tui/tui-winsource.c (tui_alloc_source_buffer): Change return
-	type to void.
-	* tui/tui-source.c (tui_set_source_content): Update.
-	* tui/tui-disasm.c (tui_set_disassem_content): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (window_name_completer, tui_set_focus)
-	(tui_all_windows_info): Use name method.
-	* tui/tui-data.h (struct tui_gen_win_info)
-	(struct tui_source_window, struct tui_disasm_window)
-	(struct tui_data_window, struct tui_cmd_window) <name>: New
-	method.
-	(tui_win_name): Don't declare.
-	* tui/tui-data.c (tui_partial_win_by_name): Use name method.
-	(tui_win_name): Remove.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_update_source_window)
-	(tui_update_source_window_as_is): Change parameter type.
-	* tui/tui-winsource.c (tui_update_source_window): Change win_info
-	to be a tui_source_window_base.
-	(tui_update_source_window_as_is): Likewise.
-	* tui/tui-win.c (make_visible_with_new_height): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_erase_source_content)
-	(tui_show_source_content, tui_show_exec_info_content)
-	(tui_erase_exec_info_content): Use refresh_window method.
-	* tui/tui-wingeneral.h (tui_refresh_win): Don't declare.
-	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Rename
-	from tui_refresh_win.
-	(tui_data_window::refresh_window): New method.
-	(tui_win_info::refresh, tui_source_window_base::refresh)
-	(tui_refresh_all): Use refresh_window method.
-	* tui/tui-stack.c (tui_show_locator_content): Call refresh_window
-	method.
-	* tui/tui-regs.c (tui_display_register): Call refresh_window
-	method.
-	* tui/tui-layout.c (show_source_disasm_command)
-	(show_source_or_disasm_and_command): Call refresh_window method.
-	* tui/tui-data.h (struct tui_gen_win_info)
-	(struct tui_data_window, struct tui_cmd_window) <refresh_window>:
-	New method.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c (tui_rl_other_window, tui_enable)
-	(tui_is_window_visible, tui_get_command_dimension): Update.
-	* tui/tui-winsource.c (tui_update_source_window_as_is)
-	(tui_clear_source_content, tui_erase_source_content)
-	(tui_show_source_line, tui_source_window_base::refill)
-	(tui_source_window_base::do_scroll_horizontal)
-	(tui_source_window_base::set_is_exec_point_at)
-	(tui_update_breakpoint_info, tui_set_exec_info_content)
-	(tui_alloc_source_buffer, tui_line_is_displayed)
-	(tui_addr_is_displayed): Update.
-	* tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win)
-	(tui_check_and_display_highlight_if_needed)
-	(tui_win_info::make_visible, tui_win_info::refresh)
-	(tui_refresh_all): Update.
-	* tui/tui-windata.c (tui_first_data_item_displayed)
-	(tui_delete_data_content_windows, tui_erase_data_content)
-	(tui_display_all_data, tui_data_window::refresh_all)
-	(tui_check_data_values): Update.
-	* tui/tui-win.c (window_name_completer, tui_update_gdb_sizes)
-	(tui_set_win_focus_to, tui_win_info::forward_scroll)
-	(tui_win_info::backward_scroll, tui_refresh_all_win)
-	(tui_resize_all, tui_set_focus, tui_all_windows_info)
-	(update_tab_width, tui_set_win_height, tui_adjust_win_heights)
-	(tui_source_window_base::set_new_height)
-	(tui_data_window::set_new_height)
-	(make_invisible_and_set_new_height)
-	(make_visible_with_new_height, new_height_ok)
-	(parse_scrolling_args): Update.
-	* tui/tui-stack.c (tui_show_frame_info): Update.
-	* tui/tui-source.c (tui_set_source_content)
-	(tui_set_source_content_nil, tui_source_is_displayed)
-	(tui_source_window::do_scroll_vertical): Update.
-	* tui/tui-regs.c (tui_show_registers, tui_show_register_group)
-	(tui_display_registers_from, tui_display_reg_element_at_line)
-	(tui_check_register_values, tui_reg_command): Update.
-	* tui/tui-layout.c (tui_default_win_height)
-	(show_source_disasm_command, show_data, init_and_make_win)
-	(show_source_or_disasm_and_command): Update.
-	* tui/tui-io.c (update_cmdwin_start_line, tui_putc, tui_puts)
-	(tui_redisplay_readline, tui_mld_flush)
-	(tui_mld_erase_entire_line, tui_mld_getc, tui_cont_sig)
-	(tui_getc): Update.
-	* tui/tui-disasm.c (tui_set_disassem_content)
-	(tui_disasm_window::do_scroll_vertical): Update.
-	* tui/tui-data.h (struct tui_gen_win_info) <~tui_gen_win_info>:
-	Now virtual.
-	(struct tui_win_info): Derive from tui_gen_win_info.
-	<~tui_win_info>: Mark as override.
-	<generic>: Remove member.
-	* tui/tui-data.c (tui_cmd_window::clear_detail, tui_next_win)
-	(tui_prev_win, tui_partial_win_by_name, tui_win_info)
-	(~tui_data_window, ~tui_win_info)
-	(tui_free_all_source_wins_content): Update.
-	* tui/tui-command.c (tui_refresh_cmd_win): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (init_and_make_win): Use new.
-	* tui/tui-data.h (struct tui_gen_win_info): Add constructor,
-	destructor, initializers.
-	(tui_alloc_generic_win_info): Don't declare.
-	* tui/tui-data.c (_locator): Add argument to constructor.
-	(source_win, disasm_win): New globals.
-	(exec_info): Remove.
-	(tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr):
-	Update.
-	(tui_alloc_generic_win_info): Remove.
-	(init_content_element): Use new.
-	(tui_win_info::tui_win_info): Update.
-	(free_content_elements) <case DATA_WIN>: Use delete.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_refresh_win): Update.
-	* tui/tui-windata.c (tui_first_data_item_displayed)
-	(tui_delete_data_content_windows): Update.
-	* tui/tui-win.c (tui_data_window::set_new_height): Update.
-	* tui/tui-regs.c (tui_show_registers, tui_show_register_group)
-	(tui_display_registers_from, tui_check_register_values): Update.
-	* tui/tui-data.h (union tui_which_element) <data_window>: Now a
-	pointer.
-	* tui/tui-data.c (init_content_element): Update.  Allocate the new
-	window.
-	(tui_free_data_content): Update.
-	(free_content_elements) <case DATA_WIN>: Free the window.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win):
-	Update.
-	* tui/tui-layout.c (make_command_window)
-	(show_source_disasm_command, show_data, init_and_make_win)
-	(show_source_or_disasm_and_command): Update.
-	* tui/tui-data.h (struct tui_win_info) <set_highlight>: New
-	method.
-	<can_highight, is_highlighted>: Now bool.
-	(tui_set_win_highlight): Don't declare.
-	* tui/tui-data.c (tui_set_win_highlight): Remove.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (make_visible): Remove check of window
-	type.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_win_info::max_height)
-	(tui_cmd_window::max_height): New methods.
-	(new_height_ok): Call max_height.
-	* tui/tui-data.h (struct tui_win_info, struct tui_cmd_window)
-	<max_height>: New method.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_source_window_base::set_new_height)
-	(tui_data_window::set_new_height): New methods.
-	(make_invisible_and_set_new_height): Call set_new_height method.
-	* tui/tui-data.h (struct tui_win_info)
-	(struct tui_source_window_base, struct tui_data_window)
-	<set_new_height>: New method.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.c (tui_rl_other_window): Call the refresh_all method.
-	* tui/tui-windata.c (tui_data_window::refresh_all): Rename from
-	tui_refresh_data_win.
-	* tui/tui-win.c (tui_source_window_base::refresh_all): New
-	method.
-	(tui_refresh_all_win): Call the refresh_all method.
-	(tui_set_focus): Likewise.
-	* tui/tui-data.h (struct tui_win_info) <refresh_all>: New method.
-	(struct tui_source_window_base, struct tui_data_window) <refresh>:
-	Likewise.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_refill_source_window)
-	(tui_set_is_exec_point_at): Don't declare.
-	* tui/tui-winsource.c (tui_update_source_windows_with_addr)
-	(tui_source_window_base::refill): Rename from
-	tui_refill_source_window.
-	(tui_source_window_base::do_scroll_horizontal): Update.
-	(tui_source_window_base::set_is_exec_point_at): Rename from
-	tui_set_is_exec_point_at.
-	(tui_update_all_breakpoint_info): Update.
-	* tui/tui-stack.c (tui_show_frame_info): Update.
-	* tui/tui-layout.c (show_data): Add cast.
-	* tui/tui-hooks.c (tui_redisplay_source): Call refill method.
-	* tui/tui-data.h (struct tui_source_window_base) <refill,
-	set_is_exec_point_at>: New methods.
-	(tui_source_windows, tui_add_to_source_windows): Update types.
-	(tui_add_to_source_windows): Remove redundant declaration.
-	* tui/tui-data.c (source_windows): Store tui_source_window_base.
-	(tui_source_windows): Change return type.
-	(tui_clear_source_windows_detail): Update.
-	(tui_add_to_source_windows): Change type of parameter.
-	(tui_free_all_source_wins_content): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_win_info::refresh)
-	(tui_source_window_base::refresh): New methods.
-	(tui_refresh_all): Call the refresh method.
-	* tui/tui-data.h (struct tui_win_info)
-	(struct tui_source_window_base) <refresh>: New method.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui.h (tui_is_window_visible): Return bool.
-	* tui/tui.c (tui_is_window_visible): Return bool.
-	* tui/tui-wingeneral.c (tui_make_window, make_visible)
-	(tui_make_visible, tui_make_invisible)
-	(tui_win_info::make_visible)
-	(tui_source_window_base::make_visible, make_all_visible)
-	(tui_make_all_visible, tui_make_all_invisible): Update.
-	* tui/tui-windata.c (tui_delete_data_content_windows): Update.
-	* tui/tui-data.h (struct tui_gen_win_info) <is_visible>: Now
-	bool.
-	(struct tui_win_info, struct tui_source_window_base)
-	(struct tui_cmd_window) <make_visible>: Change parameter to bool.
-	* tui/tui-data.c (tui_init_generic_part): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_win_info::make_visible)
-	(tui_source_window_base::make_visible): New methods.
-	(make_all_visible): Make method call.
-	* tui/tui-data.h (struct tui_win_info) <make_visible>: New method.
-	(struct tui_source_window_base, struct tui_cmd_window): Override
-	make_visible.
-	(tui_win_is_source_type): Don't declare.
-	* tui/tui-data.c (tui_win_is_source_type): Remove.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_source_or_disasm_and_command): Remove
-	NULL check.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (struct tui_data_window, struct tui_cmd_window):
-	Inline constructor.  Add initializers for members.
-	* tui/tui-data.c (tui_data_window, tui_cmd_window): Remove
-	constructors; now inline in class.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-regs.c (tui_show_registers): Update.
-	* tui/tui-data.h (struct tui_data_window) <display_regs>: Now
-	bool.
-	* tui/tui-data.c (tui_data_window::clear_detail)
-	(tui_data_window): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.c (tui_display_all_data)
-	(tui_display_data_from_line, tui_display_data_from)
-	(tui_check_data_values, tui_data_window::do_scroll_vertical):
-	Update.
-	* tui/tui-regs.c (tui_last_regs_line_no)
-	(tui_line_from_reg_element_no, tui_first_reg_element_no_inline)
-	(tui_show_registers, tui_show_register_group)
-	(tui_display_registers_from, tui_display_reg_element_at_line)
-	(tui_display_registers_from_line, tui_check_register_values)
-	(tui_reg_next, tui_reg_prev): Update.
-	* tui/tui-layout.c (tui_set_layout, show_data): Update.
-	* tui/tui-data.h (struct tui_data_info): Remove.  Move contents to
-	tui_data_window.
-	(struct tui_win_info) <detail>: Remove.  Add new fields from
-	tui_data_info.
-	(TUI_DATA_WIN): Add cast.
-	* tui/tui-data.c (tui_data_window::clear_detail, tui_data_window)
-	(~tui_data_window): Simplify.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (show_source_disasm_command)
-	(show_source_or_disasm_and_command): Update.
-	* tui/tui-io.c (update_cmdwin_start_line)
-	(tui_redisplay_readline): Update.
-	* tui/tui-data.h (struct tui_command_info): Remove.
-	(struct tui_win_info) <detail>: Remove command_info member.
-	(struct tui_data_window) <start_line>: New member, from
-	tui_command_info.
-	(TUI_CMD_WIN): Add casts.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_update_source_window)
-	(tui_refill_source_window)
-	(tui_source_window_base::do_scroll_horizontal)
-	(tui_update_breakpoint_info, tui_set_exec_info_content)
-	(tui_show_exec_info_content, tui_erase_exec_info_content)
-	(tui_clear_exec_info_content): Update.
-	* tui/tui-wingeneral.c (make_all_visible, tui_refresh_all):
-	Update.
-	* tui/tui-win.c (make_invisible_and_set_new_height)
-	(make_visible_with_new_height): Update.
-	* tui/tui-source.c (tui_set_source_content)
-	(tui_show_symtab_source): Update.
-	* tui/tui-layout.c (extract_display_start_addr)
-	(show_source_disasm_command, show_data)
-	(make_source_or_disasm_window)
-	(show_source_or_disasm_and_command): Update.
-	* tui/tui-disasm.c (tui_set_disassem_content): Simplify.
-	(tui_disasm_window::do_scroll_vertical): Remove shadowing
-	"gdbarch".
-	* tui/tui-data.h (struct tui_source_info): Remove.  Move contents
-	to tui_source_window_base.
-	(struct tui_win_info) <detail>: Remove source_info member.
-	(struct tui_source_window_base) <has_locator>: Inline.
-	Move contents from tui_source_info; rename has_locator member to
-	m_has_locator.
-	(TUI_SRC_WIN, TUI_DISASM_WIN): Add casts.
-	* tui/tui-data.c (tui_source_window_base::has_locator): Move to
-	header file.
-	(tui_source_window_base::clear_detail, ~tui_source_window_base):
-	Simplify.
-	(tui_free_all_source_wins_content): Cast to
-	tui_source_window_base.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (make_invisible_and_set_new_height)
-	(make_visible_with_new_height): Call has_locator method.
-	* tui/tui-layout.c (show_source_disasm_command, show_data)
-	(show_source_or_disasm_and_command): Update for bool change.
-	* tui/tui-data.h (struct tui_source_info) <has_locator>: Now bool.
-	(tui_win_info) <has_locator>: New method.
-	(struct tui_source_window_base) <has_locator>: New method.
-	(tui_win_has_locator): Don't declare.
-	* tui/tui-data.c (tui_source_window_base::has_locator): Rename
-	from tui_win_has_locator.
-	(tui_source_window_base): Use false, not FALSE.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (tui_clear_win_detail): Don't declare.
-	* tui/tui-data.c (tui_clear_source_windows_detail): Call the
-	clear_detail method directly.
-	(tui_clear_win_detail): Remove.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Use
-	"this", not TUI_DISASM_WIN.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.h (tui_horizontal_source_scroll):  Don't
-	declare.
-	* tui/tui-winsource.c
-	(tui_source_window_base::do_scroll_horizontal): Rename from
-	tui_horizontal_source_scroll.
-	* tui/tui-windata.h (tui_vertical_data_scroll): Don't declare.
-	* tui/tui-windata.c (tui_data_window::do_scroll_vertical): Rename
-	from tui_vertical_data_scroll.
-	* tui/tui-win.h (tui_scroll): Don't declare.
-	* tui/tui-win.c (tui_win_info::forward_scroll)
-	(tui_win_info::backward_scroll, tui_win_info::left_scroll)
-	(tui_win_info::right_scroll): Rename and update.
-	(tui_scroll_forward_command, tui_scroll_backward_command)
-	(tui_scroll_left_command, tui_scroll_right_command): Update.
-	(tui_scroll): Remove.
-	* tui/tui-source.h: Don't declare tui_vertical_source_scroll.
-	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Rename
-	from tui_vertical_source_scroll.
-	* tui/tui-disasm.h (tui_vertical_disassem_scroll): Don't declare.
-	* tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Rename
-	from tui_vertical_disassem_scroll.
-	* tui/tui-data.h (struct tui_win_info) <do_scroll_vertical,
-	do_scroll_horizontal>: New methods.
-	<forward_scroll, backward_scroll, left_scroll, right_scroll>:
-	Likewise.
-	(struct tui_source_window_base): Add do_scroll_horizontal.
-	(struct tui_source_window, struct tui_disasm_window): Add
-	do_scroll_vertical.
-	(struct tui_data_window, struct tui_cmd_window): Add
-	do_scroll_horizontal and do_scroll_vertical.
-	* tui/tui-command.c (tui_dispatch_ctrl_char): Use method calls.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (struct tui_source_window_base): New struct.
-	(struct tui_source_window): Derive from tui_source_window_base.
-	(struct tui_disasm_window): New struct.
-	* tui/tui-data.c (tui_source_window_base::clear_detail): Rename
-	from tui_source_window::clear_detail.
-	(tui_source_window_base): Rename from tui_source_window.
-	(~tui_source_window_base): Rename from ~tui_source_window.
-	(tui_alloc_win_info): Create a tui_disasm_window.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (struct tui_source_window)
-	(struct tui_data_window): Declare destructors.
-	* tui/tui-data.c (~tui_source_window, ~tui_data_window): New
-	destructors.
-	(tui_win_info): Simplify.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-winsource.c (tui_display_main)
-	(tui_update_source_windows_with_addr)
-	(tui_update_all_breakpoint_info): Update.
-	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
-	(new_height_ok, parse_scrolling_args): Update.
-	* tui/tui-stack.c (tui_show_frame_info): Update.
-	* tui/tui-data.h (struct tui_list): Remove.
-	(tui_source_windows): Return a reference to a std::vector.
-	* tui/tui-data.c (source_windows): Now a std::vector.
-	(tui_source_windows): Change return type.
-	(tui_clear_source_windows): Rewrite.
-	(tui_clear_source_windows_detail, tui_add_to_source_windows)
-	(tui_free_all_source_wins_content): Rewrite.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (struct tui_win_info, struct tui_source_window)
-	(struct tui_data_window, struct tui_cmd_window): Declare
-	clear_detail method.
-	* tui/tui-data.c (tui_source_window::clear_detail)
-	(tui_cmd_window::clear_detail, tui_data_window::clear_detail): New
-	methods.
-	(tui_clear_win_detail): Simplify.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (make_source_window, make_disasm_window)
-	(make_source_or_disasm_window): Remove win_info_ptr parameter.
-	Return the new window.
-	(show_source_disasm_command, show_data)
-	(show_source_or_disasm_and_command): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (make_command_window): Remove win_info_ptr
-	parameter.  Return the new window.
-	(show_source_disasm_command): Update and remove NULL check.
-	(show_source_or_disasm_and_command): Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-layout.c (init_and_make_win): Remove NULL check.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (struct tui_win_info): Make constructor
-	protected.  Make destructor virtual.  Add initializers.
-	(tui_source_window, tui_data_window, tui_cmd_window): New
-	classes.
-	* tui/tui-data.c (tui_win_info): Rename from init_win_info.  Now a
-	constructor.  Add "type" parameter.
-	(tui_source_window, tui_data_window, tui_cmd_window): New
-	constructors.
-	(tui_alloc_win_info): Instantiate the appropriate subclass.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-win.c (tui_resize_all): Use delete.
-	* tui/tui-data.h (struct tui_win_info) <~tui_win_info>: Declare
-	destructor.
-	(tui_free_window): Don't declare.
-	* tui/tui-data.c (~tui_win_info): Rename from tui_free_window.
-	Update.
-
-2019-06-25  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (struct tui_win_info): Add constructor.
-	* tui/tui-data.c (tui_alloc_win_info): Use new.
-	(tui_free_window): Use delete.
-
-2019-06-22  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-windata.h (tui_first_data_element_no_in_line): Don't
-	declare.
-	* tui/tui-windata.c (tui_first_data_element_no_in_line): Remove.
-
-2019-06-22  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (tui_del_window, tui_del_data_windows): Don't
-	declare.
-	* tui/tui-data.c (tui_del_window, tui_del_data_windows): Remove.
-
-2019-06-22  Tom de Vries  <tdevries@suse.de>
-
-	* dwarf2read.c (create_addrmap_from_aranges)
-	(read_debug_names_from_section): Print ptrdiff_t using '%s' and plongest
-	instead of '%zu'.
-
-2019-06-21  Simon Marchi  <simon.marchi@efficios.com>
-
-	* dwarf2read.h (dwarf2_section_info_def): Remove.
-	(DEF_VEC_O (dwarf2_section_info_def)): Remove.
-	* dwarf2read.c (struct dwo_sections) <types>: Change type to
-	std::vector<dwarf2_section_info>.
-	(struct dwo_file) <~dwo_file>: Remove.
-	(dwarf2_per_objfile::~dwarf2_per_objfile): Don't manually free
-	types field.
-	(dwarf2_per_objfile::locate_sections): Adjust to std::vector.
-	(dwarf2_read_debug_names): Likewise.
-	(create_debug_types_hash_table): Change parameter type to
-	array_view, adjust code accordingly.
-	(dwarf2_locate_dwo_sections): Adjust to std::vector.
-	(partial_die_info::fixup): Likewise.
-	(determine_prefix): Likewise.
-	* dwarf-index-write.c (write_psymtabs_to_index): Adjust.
-
-2019-06-21  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* dwarf2read.c (struct dwo_file) <dbfd>: Change type to
-	gdb_bfd_ref_ptr.
-	<~dwo_file>: Remove call to gdb_bfd_unref.
-	(open_and_init_dwo_file): Move gdb_bfd_ref_ptr into dbfd field. Call
-	gdb_bfd_ref_ptr::get.
-
-2019-06-21  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* dwarf2read.h (struct dwarf2_per_objfile) <dwo_files>: Change
-	type to htab_up.
-	* dwarf2read.c (struct dwo_file): Initialize fields.
-	<~dwo_file>: New.
-	(free_dwo_file): Remove, move content to ~dwo_file.
-	(struct dwo_file_deleter): Remove.
-	(dwo_file_up>: Remove custom deleter.
-	(free_dwo_files): Remove.
-	(dwarf2_per_objfile::~dwarf2_per_objfile): Don't explicitly free
-	dwo_files.
-	(process_skeletonless_type_units): Call unique_ptr::get.
-	(allocate_dwo_file_hash_table): Add deleter to created hash
-	table.  Change return type to htab_up.
-	(lookup_dwo_file_slot): Don't memset dwo_file, call
-	unique_ptr::get.
-	(create_dwo_unit_in_dwp_v1): Allocate dwo_file with new.
-	(create_dwo_unit_in_dwp_v2): Likewise.
-	(open_and_init_dwo_file): Likewise.
-	(free_dwo_file_from_slot): Remove.
-
-2019-06-21  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* dwarf2read.h (struct dwarf2_section_info) <readin,
-	is_virtual>: Change type to bool.
-	* dwarf2read.c (dwarf2_read_section, create_dwp_v2_section): Use
-	true instead of 1.
-
-2019-06-19  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (tui_init_content_element): Don't declare.
-
-2019-06-19  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.h (tui_init_win_info): Don't declare.
-
-2019-06-19  Tom de Vries  <tdevries@suse.de>
-
-	* dwarf2read.h (abstract_to_concrete): Change type to
-	std::unordered_map<sect_offset, std::vector<sect_offset>,
-	gdb::hash_enum<sect_offset>>.
-
-2019-06-19  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_evaluate_subexp) <case OP_ATR_FIRST>: Handle
-	EVAL_AVOID_SIDE_EFFECTS specially.
-
-2019-06-19  Tom Tromey  <tromey@adacore.com>
-
-	* source-cache.c (highlighter): New global.
-	(source_cache::get_source_lines): Create a highlighter on demand.
-
-2019-06-18  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* defs.h (deprecated_interactive_hook): Delete declaration.
-	* interps.c (clear_interpreter_hooks): Remove use of
-	deprecated_interactive_hook.
-	* top.c (deprecated_interactive_hook): Delete definition.
-	* utils.c (maybe_quit): Remove use of deprecated_interactive_hook.
-
-2019-06-18  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/24515
-	* dwarf2read.h (abstract_to_concrete): Change type from
-	std::unordered_map<die_info_ptr, std::vector<die_info_ptr>> to
-	std::unordered_map<sect_offset, std::vector<sect_offset>>.
-	* dwarf2read.c (read_variable): Update.
-	(dwarf2_fetch_die_loc_sect_off): Update.
-
-2019-06-17  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/24617
-	* common/pathstuff.c (child_path): Make sure parent_len > 0 before
-	accessing parent[parent_len - 1].
-
-2019-06-17  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	PR gdb/24364
-	* gdb/dtrace-probe.c (dtrace_static_probe_ops::get_probe): Don't
-	call dtrace_process_dof with NULL dof.
-
-2019-06-16  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/24445
-	* contrib/gdb-add-index.sh: Update to handle dwz-m-ed executable.
-
-2019-06-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win)
-	(make_all_visible): Use address of member.
-
-2019-06-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.c (tui_clear_win_detail, init_win_info)
-	(tui_free_window, free_content, free_content_elements): Remove
-	unnecessary cast.
-	* tui/tui-windata.c (tui_display_all_data): Remove unnecessary
-	cast.
-	* tui/tui-regs.c (tui_show_register_group)
-	(tui_display_registers_from, tui_display_reg_element_at_line):
-	Remove unnecessary cast.
-
-2019-06-16  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* linux-nat.c (normal_mask): Delete.
-	(_initialize_linux_nat): Don't initialise normal_mask.
-
-2019-06-16  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	PR gdb/24445
-	* dwarf-index-write.h (write_psymtabs_to_index): Add
-	dwz_basename parameter.
-	* dwarf-index-write.c (write_gdbindex): Move file writing to
-	write_gdbindex_1.  Change return type void.
-	(assert_file_size): Move up, remove filename parameter.
-	(write_gdbindex_1): New function.
-	(write_debug_names): Change return type to void, call
-	assert_file_size.
-	(struct index_wip_file): New struct.
-	(write_psymtabs_to_index): Add dwz_basename parameter.  Move
-	file logic to index_wip_file.  Write index for dwz file if
-	needed.
-	(save_gdb_index_command): Pass basename of dwz file, if present.
-	* dwarf-index-cache.c (index_cache::store): Obtain and pass
-	build-id of dwz file, if present.
-	* dwarf2read.c (struct dwz_file): Move to dwarf2read.h.
-	(dwarf2_get_dwz_file): Likewise.
-	* dwarf2read.h (struct dwz_file): Move from dwarf2read.c.
-	(dwarf2_get_dwz_file): Likewise.
-
-2019-06-16  Tom Tromey  <tom@tromey.com>
-
-	* coffread.c (process_coff_symbol): Use xstrdup.
-	* value.c (create_internalvar): Use xstrdup.
-
-2019-06-16  Tom Tromey  <tom@tromey.com>
-
-	* valops.c (value_cast, value_slice): Remove unnecessary cast.
-	* breakpoint.c (stopin_command, stopat_command)
-	(until_break_command, decode_location_default): Remove unnecessary
-	cast.
-	* utils.c (subset_compare): Remove unnecessary cast.
-	* ada-lang.c (ada_update_initial_language): Remove unnecessary
-	cast.
-	* linespec.c (decode_line_with_last_displayed): Remove unnecessary
-	cast.
-	* infcmd.c (path_command): Remove unnecessary cast.
-	* coffread.c (decode_type): Remove unnecessary cast.
-	* xcoffread.c (read_xcoff_symtab): Remove unnecessary cast.
-	* mipsread.c (mipscoff_symfile_read): Remove unnecessary cast.
-	* tui/tui-stack.c (tui_show_locator_content)
-	(tui_show_frame_info): Remove unnecessary cast.
-	* tui/tui-win.c (tui_scroll_forward_command)
-	(tui_scroll_backward_command, tui_set_focus, tui_set_win_height)
-	(parse_scrolling_args): Remove unnecessary cast.
-	* tui/tui-data.c (init_win_info, tui_del_window)
-	(tui_free_window, tui_del_data_windows, tui_free_data_content)
-	(free_content_elements): Remove unnecessary cast.
-	* tui/tui-windata.c (tui_first_data_item_displayed): Remove
-	unnecessary cast.
-	* tui/tui-source.c (tui_set_source_content)
-	(tui_vertical_source_scroll): Remove unnecessary cast.
-	* tui/tui-layout.c (tui_default_win_height): Remove unnecessary
-	cast.
-	* tui/tui-io.c (tui_initialize_io): Remove unnecessary cast.
-	* tui/tui-regs.c (tui_display_registers_from)
-	(tui_display_register): Remove unnecessary cast.
-	* tui/tui-wingeneral.c (tui_refresh_win, tui_delete_win)
-	(tui_unhighlight_win, tui_highlight_win, tui_make_window)
-	(make_visible): Remove unnecessary cast.
-	* tui/tui-winsource.c (tui_erase_source_content)
-	(tui_update_breakpoint_info, tui_set_exec_info_content): Remove
-	unnecessary cast.
-	* ax-gdb.c (agent_command_1): Remove unnecessary cast.
-	* cli/cli-setshow.c (cmd_show_list): Remove unnecessary cast.
-	* stabsread.c (read_type, read_array_type, read_range_type):
-	Remove unnecessary cast.
-	* mdebugread.c (mdebug_build_psymtabs): Remove unnecessary cast.
-	(parse_symbol, parse_type, upgrade_type, parse_external)
-	(parse_partial_symbols, psymtab_to_symtab_1, cross_ref): Remove
-	unnecessary cast.
-	* gdb_bfd.c (gdb_bfd_map_section): Remove unnecessary cast.
-
-2019-06-16  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-data.c (tui_alloc_generic_win_info)
-	(tui_alloc_win_info, tui_add_content_elements): Remove NULL
-	checks.
-
-2019-06-16  Bernhard Heckel  <bernhard.heckel@intel.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-typeprint.c (f_print_type): Don't return early for not
-	associated or not allocated types.
-	(f_type_print_varspec_suffix): Add print_rank parameter and print
-	ranks of array types in case they dangling.
-	(f_type_print_base): Add print_rank parameter.
-
-2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* NEWS: Mention new MI commands.
-	* break-catch-throw.c (enum exception_event_kind): Move to
-	breakpoint.h.
-	(print_mention_exception_catchpoint): Output text as a single
-	message.
-	(catch_exception_command_1): Rename to...
-	(catch_exception_event): ...this, make non-static, update header
-	command, and change some parameter types.
-	(catch_catch_command): Update for changes to
-	catch_exception_command_1.
-	(catch_throw_command): Likewise.
-	(catch_rethrow_command): Likewise.
-	* breakpoint.c (enum exception_event_kind): Delete.
-	* breakpoint.h (enum exception_event_kind): Moved here from
-	break-catch-throw.c.
-	(catch_exception_event): Declare.
-	* mi/mi-cmd-catch.c (mi_cmd_catch_exception_event): New function.
-	(mi_cmd_catch_throw): New function.
-	(mi_cmd_catch_rethrow): New function.
-	(mi_cmd_catch_catch): New function.
-	* mi/mi-cmds.c (mi_cmds): Add 'catch-throw', 'catch-rethrow', and
-	'catch-catch' entries.
-	* mi/mi-cmds.h (mi_cmd_catch_throw): Declare.
-	(mi_cmd_catch_rethrow): Declare.
-	(mi_cmd_catch_catch): Declare.
-
-2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* annotate.c (annotate_source_line): Change return type to void,
-	update implementation to match.
-	* annotate.h (annotate_source_line): Change return type to void,
-	update header comment.
-	* stack.c (print_frame_info): Don't change what frame information
-	is printed based on whether annotations are on or not.
-
-2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* annotate.c: Add 'source.h' and 'objfiles.h' includes.
-	(annotate_source): Make static.
-	(annotate_source_line): Moved from source.c and renamed from
-	identify_source_line.  Update the return type.
-	* annotate.h (annotate_source): Delete declaration.
-	(annotate_source_line): Declaration moved from source.h, and
-	renamed from identify_source_line.  Return type updated.
-	* source.c (identify_source_line): Moved to annotate.c and renamed
-	to annotate_source_line.
-	(info_line_command): Remove check of annotation_level.
-	* source.h (identify_source_line): Move declaration to annotate.h
-	and rename to annotate_source_line.
-	* stack.c: Add 'annotate.h' include.
-	(print_frame_info): Remove check of annotation_level before
-	calling annotate_source_line.
-
-2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* source-cache.c (source_cache::get_plain_source_lines): Use
-	open_source_file_with_line_charpos instead of just
-	open_source_file, remove call to find_source_lines.
-	(source_cache::get_source_lines): Likewise.
-	* source.c (find_source_lines): Make static.
-	(get_filename_and_charpos): Renamed into...
-	(open_source_file_with_line_charpos): ..this along with changes to
-	return a scoped_fd, and some other minor clean ups.
-	(identify_source_line): Use open_source_file_with_line_charpos.
-	(search_command_helper): Use open_source_file_with_line_charpos
-	instead of just open_source_file, remove call to
-	find_source_lines.
-	* source.h (open_source_file_with_line_charpos): Declare new
-	function.
-	(find_source_lines): Delete declaration.
-
-2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* source.c (get_filename_and_charpos): Remove fullname
-	parameter.
-	(identify_source_line): Update call to get_filename_and_charpos.
-
-2019-06-14  Tom Tromey  <tromey@adacore.com>
-
-	PR gdb/24502:
-	* ui-style.h (skip_ansi_escape): Update comment.
-	* ui-file.h (class no_terminal_escape_file): New class.
-	* ui-file.c (no_terminal_escape_file::write)
-	(no_terminal_escape_file::puts): New methods.
-	* cli/cli-logging.c (handle_redirections): Use
-	no_terminal_escape_file.
-
-2019-06-14  Tom Tromey  <tromey@adacore.com>
-
-	* NEWS: Move convenience variable news above Python news.
-
-2019-06-14  Tom Tromey  <tom@tromey.com>
-
-	* gnulib: Move directory to top-level.
-	* configure.ac: Don't configure gnulib.
-	* configure: Rebuild.
-	* common/common-defs.h: Use new path to gnulib.
-	* Makefile.in (GNULIB_BUILDDIR): Now ../gnulib.
-	(GNULIB_H): Remove.
-	(INCGNU): Look in new gnulib location.
-	(HFILES_NO_SRCDIR): Remove gnulib files.
-	(SUBDIR, REQUIRED_SUBDIRS): Remove gnulib.
-	(generated_files): Remove GNULIB_H.
-	($(LIBGNU), all-lib): Remove targets.
-	(distclean): Don't mention GNULIB_BUILDDIR.
-	($(GNULIB_BUILDDIR)/Makefile): Remove target.
-
-2019-06-14  Tom Tromey  <tromey@adacore.com>
-
-	* symfile.c (add_symbol_file_command): Remove obsolete comment.
-	Warn if symbol file does not provide any symbols.
-
-2019-06-14  Tom Tromey  <tromey@adacore.com>
-
-	* source.c (find_and_open_source): Respect basenames_may_differ.
-
-2019-06-14  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* annotate.c (annotate_breakpoints_invalid): Make use of
-	scoped_restore_terminal_state.
-	(annotate_frames_invalid): Likewise.
-
-2019-06-14  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_evaluate_subexp) <case BINOP_ASSIGN>: Always
-	allow assignment to an internalvar.
-
-2019-06-14  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lex.l: Allow "_" in attribute names.
-
-2019-06-14  Tom Tromey  <tromey@adacore.com>
-
-	PR gdb/24653:
-	* regcache.c (registers_changed): Don't call alloca.
-	* top.c (execute_command): Don't call alloca.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-setshow.c (cli/cli-setshow.c): New parameter
-	'expression'.  When parsing an expression, error out if there's
-	junk after "unlimited".
-	(parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited)
-	(do_set_command): Adjust calls to is_unlimited_literal.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* compile/compile.c (make_compile_options_def_group): Add braces
-	around array_view initializer.
-	* thread.c (make_thread_apply_all_options_def_group)
-	(make_thread_apply_all_options_def_group): Likewise.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* NEWS (New commands): Mention "maint test-options
-	require-delimiter", "maint test-options unknown-is-error", "maint
-	test-options unknown-is-operand" and "maint show
-	test-options-completion-result".
-	(New command options, command completion): New section.
-	(Completion improvements): New section.
-	Mention that you can abbreviate "unlimited".
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-utils.c (parse_flags, parse_flags_qcs): Delete.
-	* cli/cli-utils.h (parse_flags, parse_flags_qcs): Delete.
-	* unittests/cli-utils-selftests.c (test_parse_flags)
-	(test_parse_flags_qcs): Delete.
-	(test_cli_utils): Don't call deleted functions.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* thread.c: Include "cli/cli-option.h".
-	(tp_array_compar_ascending): Global.
-	(tp_array_compar): Delete function.
-	(tp_array_compar_ascending, tp_array_compar_descending): New
-	functions.
-	(ascending_option_def, qcs_flag_option_def)
-	(thr_qcs_flags_option_defs)
-	(make_thread_apply_all_options_def_group)
-	(make_thread_apply_options_def_group): New.
-	(thread_apply_all_command): Use gdb::option::process_options.
-	(thread_apply_command_completer)
-	(thread_apply_all_command_completer): New.
-	(thread_apply_command): Use gdb::option::process_options.
-	(_initialize_thread): Delete THREAD_APPLY_FLAGS_HELP, replace it
-	with a new THREAD_APPLY_OPTION_HELP.  Use gdb::option::build_help
-	to generate help text of "thread apply".  Adjust "taas"'s help.
-	* tid-parse.c (tid_range_parser::in_thread_range): New method.
-	* tid-parse.h (tid_range_parser::in_thread_range): New method.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* thread.c (thread_apply_command): Check for invalid TID with
-	isdigit instead of !isalpha.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-utils.c (parse_flags_qcs): Use validate_flags_qcs.
-	(validate_flags_qcs): New.
-	* cli/cli-utils.h (struct qcs_flags): Change field types to int.
-	(validate_flags_qcs): Declare.
-	* stack.c (qcs_flag_option_def, fr_qcs_flags_option_defs): New.
-	(make_frame_apply_options_def_group): New.
-	(frame_apply_command_count): Process options with
-	gdb::option::process_options.
-	(frame_apply_completer): New.
-	(frame_apply_level_completer, frame_apply_all_completer)
-	(frame_apply_completer): New.
-	(_initialize_stack): Update help of "frame apply", "frame apply
-	level", "frame apply all" and "faas" to mention supported options
-	and install command completers.
-	* stack.h (frame_apply_all_completer): Declare.
-	* thread.c: Include "stack.h".
-	(tfaas_command): Add "--".
-	(_initialize_thread): Update help "tfaas" to mention supported
-	options and install command completer.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* completer.c (complete_nested_command_line): New.
-	(gdb_completion_word_break_characters_throw): Add assertion.
-	* completer.h (complete_nested_command_line): Declare.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* stack.c (parse_backtrace_qualifiers): New.
-	(backtrace_command): Use it.
-	(backtrace_command_completer): Complete on qualifiers.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* frame.c: Include "cli/cli-option.h.
-	(user_set_backtrace_options): New.
-	(backtrace_past_main, backtrace_past_entry, backtrace_limit):
-	Delete.
-	(get_prev_frame): Adjust.
-	(boolean_option_def, uinteger_option_def)
-	(set_backtrace_option_defs): New.
-	(_initialize_frame): Adjust and use
-	gdb::option::add_setshow_cmds_for_options to install "set
-	backtrace past-main" and "set backtrace past-entry".
-	* frame.h: Include "cli/cli-option.h".
-	(struct frame_print_options): Forward declare.
-	(print_frame_arguments_all, print_frame_arguments_scalars)
-	(print_frame_arguments_none): Declare.
-	(print_entry_values): Delete declaration.
-	(struct frame_print_options, user_frame_print_options): New.
-	(struct set_backtrace_options): New.
-	(set_backtrace_option_defs, user_set_backtrace_options): Declare.
-	* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames)
-	(mi_cmd_stack_list_locals, mi_cmd_stack_list_args)
-	(mi_cmd_stack_list_variables): Pass down USER_FRAME_PRINT_OPTIONS.
-	(list_args_or_locals): Add frame_print_options parameter.
-	(mi_cmd_stack_info_frame): Pass down USER_FRAME_PRINT_OPTIONS.
-	* python/py-framefilter.c (enumerate_args): Pass down
-	USER_FRAME_PRINT_OPTIONS.
-	* stack.c: Include "cli/cli-option.h".
-	(print_frame_arguments_all, print_frame_arguments_scalars)
-	(print_frame_arguments_none): Declare.
-	(print_raw_frame_arguments, print_entry_values): Delete.
-	(user_frame_print_options): New.
-	(boolean_option_def, enum_option_def, frame_print_option_defs):
-	New.
-	(struct backtrace_cmd_options): New.
-	(bt_flag_option_def): New.
-	(backtrace_command_option_defs): New.
-	(print_stack_frame): Pass down USER_FRAME_PRINT_OPTIONS.
-	(print_frame_arg, read_frame_arg, print_frame_args)
-	(print_frame_info, print_frame): Add frame_print_options parameter
-	and use it.
-	(info_frame_command_core): Pass down USER_FRAME_PRINT_OPTIONS.
-	(backtrace_command_1): Add frame_print_options and
-	backtrace_cmd_options parameters and use them.
-	(make_backtrace_options_def_group): New.
-	(backtrace_command): Process command options with
-	gdb::option::process_options.
-	(backtrace_command_completer): New.
-	(_initialize_stack): Extend "backtrace"'s help to mention
-	supported options.  Install completer for "backtrace".
-	Install some settings commands with add_setshow_cmds_for_options.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* NEWS (Changed commands): Mention set/show print raw-frame-arguments,
-	and that "set/show print raw frame-arguments" are now deprecated.
-
-	* cli/cli-decode.c (add_setshow_boolean_cmd): Now returns the
-	command.
-	* command.h (add_setshow_boolean_cmd): Return cmd_list_element *.
-	* stack.c (_initialize_stack): Install "set/show print
-	raw-frame-arguments", and deprecate "set/show print raw
-	frame-arguments".
-	* valprint.c (_initialize_valprint): Deprecate "set/show print
-	raw".
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* compile/compile.c (struct compile_options): New.
-	(compile_flag_option_def, compile_command_option_defs)
-	(make_compile_options_def_group): New.
-	(compile_file_command): Handle options with
-	gdb::option::process_options.
-	(compile_file_command_completer): New function.
-	(compile_code_command): Handle options with
-	gdb::option::process_options.
-	(compile_code_command_completer): New function.
-	(_initialize_compiler): Install completers for "compile code" and
-	"compile file".  Mention available options in "compile code" and
-	"compile code"'s help.
-	* completer.c (advance_to_completion_word): New, factored out from
-	...
-	(advance_to_expression_complete_word_point): ... this.
-	(advance_to_filename_complete_word_point): New.
-	* completer.h (advance_to_filename_complete_word_point): New
-	declaration.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* compile/compile.c: Include "cli/cli-option.h".
-	(compile_print_value): Scope data pointer is now a
-	value_print_options pointer; adjust.
-	(compile_print_command): Process options.  Scope data pointer is
-	now a value_print_options pointer; adjust.
-	(_initialize_compile): Update "compile print"'s help to include
-	supported options.  Install a completer for "compile print".
-	* cp-valprint.c (show_vtblprint, show_objectprint)
-	(show_static_field_print): Delete.
-	(_initialize_cp_valprint): Don't install "set print
-	static-members", "set print vtbl", "set print object" here.
-	* printcmd.c: Include "cli/cli-option.h" and
-	"common/gdb_optional.h".
-	(print_command_parse_format): Rework to fill in a
-	value_print_options instead of a format_data.
-	(print_value): Change parameter type from format_data pointer to
-	value_print_options reference.  Adjust.
-	(print_command_1): Process options.  Adjust to pass down a
-	value_print_options.
-	(print_command_completer): New.
-	(_initialize_printcmd): Install print_command_completer as
-	handle_brkchars completer for the "print" command.  Update
-	"print"'s help to include supported options.
-	* valprint.c: Include "cli/cli-option.h".
-	(show_vtblprint, show_objectprint, show_static_field_print): Moved
-	here from cp-valprint.c.
-	(boolean_option_def, uinteger_option_def)
-	(value_print_option_defs, make_value_print_options_def_group):
-	New.  Use gdb::option::add_setshow_cmds_for_options to install
-	"set print elements", "set print null-stop", "set print repeats",
-	"set print pretty", "set print union", "set print array", "set
-	print address", "set print symbol", "set print array-indexes".
-	* valprint.h: Include <string> and "cli/cli-option.h".
-	(make_value_print_options_def_group): Declare.
-	(print_value): Change parameter type from format_data pointer to
-	value_print_options reference.
-	(print_command_completer): Declare.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (SUBDIR_CLI_SRCS): Add cli/cli-option.c.
-	(COMMON_SFILES): Add maint-test-settings.c.
-	* cli/cli-decode.c (boolean_enums): New global, factored out from
-	...
-	(add_setshow_boolean_cmd): ... here.
-	* cli/cli-decode.h (boolean_enums): Declare.
-	* cli/cli-option.c: New file.
-	* cli/cli-option.h: New file.
-	* cli/cli-setshow.c (parse_cli_boolean_value(const char **)): New,
-	factored out from ...
-	(parse_cli_boolean_value(const char *)): ... this.
-	(is_unlimited_literal): Change parameter type to pointer to
-	pointer.  Adjust and advance ARG pointer.
-	(parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited)
-	(parse_cli_var_enum): New, factored out from ...
-	(do_set_command): ... this.  Adjust.
-	* cli/cli-setshow.h (parse_cli_boolean_value)
-	(parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited)
-	(parse_cli_var_enum): Declare.
-	* cli/cli-utils.c: Include "cli/cli-option.h".
-	(get_ulongest): New.
-	* cli/cli-utils.h (get_ulongest): Declare.
-	(check_for_argument): New overloads.
-	* maint-test-options.c: New file.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-utils.c (number_or_range_parser::get_number): Do not
-	parse a range if "-" is at the end of the string.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-setshow.c (parse_auto_binary_operation)
-	(parse_cli_boolean_value): Don't allow "o".
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (COMMON_SFILES): Add maint-test-settings.c.
-	* NEWS: Mention maint test-settings KIND.
-	* maint-test-settings.c: New file.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-decode.c (add_setshow_cmd_full): Remove "show"
-	completer.
-	(add_setshow_string_cmd, add_setshow_string_noescape_cmd): Remove
-	"set" completers.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-setshow.c (do_set_command) <var_enum>: Detect junk
-	after item.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* cli/cli-setshow.c (is_unlimited_literal): Allow abbreviations.
-
-2019-06-13  Pedro Alves <palves@redhat.com>
-
-	* ax-gdb.c (agent_command_1): Remove skip_spaces call.
-	* breakpoint.c (watch_maybe_just_location): Remove skip_spaces
-	call.
-	* cli/cli-cmds.c (apropos_command): Remove skip_spaces call.
-	* cli/cli-utils.c (extract_info_print_args): Remove skip_spaces
-	calls.
-	(check_for_argument): Skip spaces after argument.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* thread.c (thread_apply_command): Adjust TID parsing.
-	* tid-parse.c (tid_range_parser::finished): Ensure parsing end is
-	detected before end of string.
-	(tid_is_in_list): Error out if LIST is invalid.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* completer.c (complete_line_internal_1): Rewind completion word
-	point.
-	(completion_tracker::advance_custom_word_point_by): Change
-	parameter type to int.
-	* completer.h (completion_tracker::advance_custom_word_point_by):
-	Likewise.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* completer.c (advance_to_completion_word): Handle delimiters.
-
-2019-06-11  Bernhard Heckel  <bernhard.heckel@intel.com>
-
-	* dwarf2read.c (add_partial_symbol): Skip nameless modules.
-
-2019-06-11  Tom Tromey  <tom@tromey.com>
-
-	* common/common-utils.c (xmalloc, xrealloc, xcalloc)
-	(xmalloc_failed): Move to alloc.c.
-	* alloc.c: New file.
-	* Makefile.in (COMMON_SFILES): Add alloc.c.
-
-2019-06-11  Tom Tromey  <tom@tromey.com>
-
-	* nat/linux-waitpid.c: Don't include server.h.
-	(linux_debug): Remove.
-	(my_waitpid): Update.
-
-2019-06-11  Tom Tromey  <tromey@adacore.com>
-
-	* infcall.c (_initialize_infcall): Remove trailing newline from
-	help.
-	* user-regs.c (_initialize_user_regs): Remove trailing newline
-	from help.
-	* typeprint.c (_initialize_typeprint): Remove trailing newline
-	from help.
-	* reverse.c (_initialize_reverse): Remove trailing newlines from
-	help.
-	* tracepoint.c (_initialize_tracepoint): Remove trailing newlines
-	from help.
-	* language.c (add_set_language_command): Remove trailing newline
-	from help.
-	* infcmd.c (_initialize_infcmd): Remove trailing newlines from
-	help.
-	* disasm.c (_initialize_disasm): Remove trailing newline from
-	help.
-	* top.c (init_main): Remove trailing newline from help.
-	* interps.c (_initialize_interpreter): Remove trailing newline
-	from help.
-	* btrace.c (_initialize_btrace): Remove trailing newlines from
-	help.
-	* breakpoint.c (_initialize_breakpoint): Remove trailing newline
-	from help.
-	* python/python.c (_initialize_python): Remove trailing newline
-	from help.
-	* spu-tdep.c (_initialize_spu_tdep): Remove trailing newlines from
-	help.
-	* tui/tui-win.c (_initialize_tui_win): Remove trailing newlines
-	from help.  Reformat some text.
-	* tui/tui-stack.c (_initialize_tui_stack): Remove trailing newline
-	from help.
-	* tui/tui-layout.c (_initialize_tui_layout): Remove trailing
-	newline from help.
-
-2019-06-11  Tom Tromey  <tromey@adacore.com>
-
-	* darwin-nat.c (darwin_decode_exception_message)
-	(darwin_decode_message, darwin_nat_target::kill): Fix shadowing.
-
-2019-06-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* valops.c (value_slice): Check for not allocated or not
-	associated values.
-
-2019-06-10  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/24618
-	* dwarf2read.c (struct mapped_index::symbol_name_slot_invalid): Make
-	sure an empty slot (defined by a 32-bit zero pair) is recognized as
-	invalid.
-
-2019-06-10  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/24611
-	* linespec.c (linespec_lexer_lex_string): Remove incorrect
-	"++(PARSER_STREAM (parser))" for "[abi"-prefixed colon.  Add assert.
-
-2019-06-10  Tom de Vries  <tdevries@suse.de>
-
-	PR symtab/24545
-	* symtab.c (struct demangled_name_entry): Add language field.
-	(symbol_set_names):  Revert "[gdb/symtab] Fix language of duplicate
-	static minimal symbol".  Set and use language field.
-
-2019-06-10  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (_initialize_ada_language): Update help text.
-
-2019-06-10  Tom Tromey  <tromey@adacore.com>
-
-	* m32c-tdep.c (m32c_m16c_address_to_pointer): Don't end warning
-	with a newline.
-	* guile/guile.c (handle_boot_error): Don't end warning with a
-	newline.
-	* cli/cli-cmds.c (exit_status_set_internal_vars): Don't end
-	warning with a newline.
-	* s12z-tdep.c (s12z_skip_prologue): Don't end warning with a
-	newline.
-	(s12z_frame_cache): Likewise.
-	* dwarf-index-cache.c (index_cache::store): Don't end warning with
-	a newline.
-	* solib-svr4.c (disable_probes_interface): Don't end warning with
-	a newline.
-	* nat/fork-inferior.c (fork_inferior): Don't end warning with a
-	newline.
-	* python/python.c (do_finish_initialization): Don't end warning
-	with a newline.
-
-2019-06-10  Tom Tromey  <tom@tromey.com>
-
-	* python/py-breakpoint.c (gdbpy_breakpoint_created)
-	(gdbpy_breakpoint_deleted, gdbpy_breakpoint_modified): Use
-	gdbpy_enter.
-
-2019-06-10  Tom Tromey  <tromey@adacore.com>
-
-	* elfread.c (elf_read_minimal_symbols): Don't set the dbx objfile
-	data.
-	(elf_new_init): Don't call stabsread_new_init.
-	* dbxread.c (coffstab_build_psymtabs): Set dbx objfile data.
-	(elfstab_build_psymtabs): Likewise.  Call stabsread_new_init.
-	* coffread.c (coff_symfile_init): Don't set the dbx objfile data.
-
-2019-06-10  Tom de Vries  <tdevries@suse.de>
-
-	PR symtab/16264
-	PR symtab/24517
-	* dwarf2read.c (read_func_scope): Handle DW_AT_main_subprogram.
-
-2019-06-06  Ð ÑƒÑ�Ð»Ð°Ð½ Ð˜Ð¶Ð±ÑƒÐ»Ð°Ñ‚Ð¾Ð² <lrn1986@gmail.com>
-
-	* source.c (find_and_open_source): Also rewrite relative file
-	names.
-
-2019-04-26  Amos Bird  <amosbird@gmail.com>
-
-	* annotate.c (annotate_thread_exited): Add "thread-exited"
-	annotation.
-
-2019-06-06  Tom Tromey  <tromey@adacore.com>
-
-	* maint.h (class scoped_command_stats): Use
-	DISABLE_COPY_AND_ASSIGN.
-	<print_time>: New method.
-	* maint.c (scoped_command_stats, ~scoped_command_stats): Call
-	print_time.
-	(scoped_command_stats::print_time): New method.
-
-2019-06-05  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* riscv-tdep.c (riscv_insn::decode): Gracefully ignore
-	instructions of lengths 6 or 8 bytes.
-
-2019-06-04  Pedro Alves  <palves@redhat.com>
-
-	* common/gdb_unique_ptr.h (make_unique_xstrdup): New.
-
-	* ada-lang.c (catch_ada_completer): Use make_unique_xstrdup.
-	* breakpoint.c (condition_completer): Likewise.
-	* cli/cli-dump.c (scan_expression): Likewise.
-	* common/filestuff.c (mkdir_recursive): Likewise.
-	* common/gdb_tilde_expand.c (gdb_tilde_expand_up)
-	* common/pathstuff.c (gdb_realpath, gdb_realpath_keepfile)
-	(gdb_abspath): Likewise.
-	* compile/compile-cplus-types.c
-	(compile_cplus_instance::decl_name): Likewise.
-	* completer.c (complete_explicit_location):
-	(signal_completer, reg_or_group_completer_1): Likewise.
-	* cp-support.c (cp_remove_params_if_any): Likewise.
-	* fbsd-tdep.c (fbsd_core_vnode_path): Likewise.
-	* guile/scm-safe-call.c (gdbscm_safe_eval_string): Likewise.
-	* infcmd.c (strip_bg_char): Likewise.
-	* linespec.c (copy_token_string): Likewise.
-	* mi/mi-main.c (output_cores): Likewise.
-	* psymtab.c (psymtab_search_name):
-	* symfile.c (test_set_ext_lang_command): Likewise.
-	* target.c (target_fileio_read_stralloc): Likewise.
-	* tui/tui-regs.c (tui_reggroup_completer): Likewise.
-	* value.c (complete_internalvar): Likewise.
-
-2019-06-04  Christian Biesinger  <cbiesinger@google.com>
-
-	Add objfile property to gdb.Type.
-	* NEWS: Mention Python API addition.
-	* python/py-type.c (typy_get_objfile): New method.
-
-2019-06-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* NEWS: Mention the new set|show style [title|highlight].
-	Mention changes to "show style", "help" and "apropos".
-
-2019-06-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* cli/cli-decode.h (apropos_cmd): Add verbose argument.
-	* cli/cli-decode.c (apropos_cmd): Likewise.  Use print_doc_of_command
-	instead of print_help_for_command.
-	(print_doc_of_command): New function.
-	(help_list): Add 'apropos -v word' suggestion.
-	(print_help_for_command): Style the command name using title style.
-	* cli/cli-cmds.c (apropos_command): Parse optional -v flag.
-	(_initialize_cli_cmds): Describe -v in apropos_command help.
-
-2019-06-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* cli/cli-style.h (cli_style_option): Add name in constructor,
-	add m_name class member, add constructor with intensity,
-	add name class function.
-	(cli_style_option::add_setshow_commands): Remove name argument.
-	(highlight_style, title_style): New styles.
-	* cli/cli-style.c (do_show): New function that shows a style
-	characteristic styling the style name with itself.
-	(set_style_name): New function.
-	(STYLE_ADD_SETSHOW_COMMANDS): Remove NAME arguments.
-	Update all callers according to the changes in cli/cli-style.h.
-	* utils.h (fputs_highlighted): New function.
-	* utils.c (fputs_highlighted): Likewise.
-
-2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* NEWS: Mention new pipe command and new convenience variables.
-
-2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* cli/cli-cmds.c (pipe_command): New function.
-	(_initialize_cli_cmds): Call add_com for pipe_command.
-	Define | as an alias for pipe.
-	(exit_status_set_internal_vars): New function.
-	(shell_escape): Call exit_status_set_internal_vars.
-	cli/cli-decode.c (find_command_name_length): Recognize | as
-	a single character command.
-
-2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdbcmd.h (execute_command_to_ui_file): New declaration.
-	top.c (execute_command_to_ui_file): New function, mostly a copy
-	of execute_command_to_string.
-	(execute_command_to_string): Implement by calling
-	execute_command_to_ui_file.
-
-2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* top.h (saved_command_line): Remove declaration.
-	* top.c (previous_saved_command_line, previous_repeat_arguments):
-	New variables.
-	(saved_command_line): Make static, define together with other
-	'repeat variables'.
-	(dont_repeat): Clear repeat_arguments.
-	(repeat_previous, get_saved_command_line, save_command_line):
-	New functions.
-	(gdb_init): Initialize saved_command_line
-	and previous_saved_command_line.
-	* main.c (captured_main_1): Remove saved_command_line initialization.
-	* event-top.c (handle_line_of_input): Update to use
-	the new 'repeat' related functions instead of direct access to
-	saved_command_line.
-	* command.h (repeat_previous, get_saved_command_line,
-	save_command_line): New declarations.
-	(dont_repeat): Add comment.
-
-2019-05-30  Tom Tromey  <tromey@adacore.com>
-
-	* gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count>:
-	Fix comment.
-	(TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED): Rewrite comment.
-
-2019-05-30  Jan Vrany  <jan.vrany@fit.cvut.cz>
-
-	PR cli/24587
-	* completer.c (complete): Initialize variable word.
-
-2019-05-29  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192
-	Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1715008
-	* dwarf2read.c (dwarf_decode_macro_bytes): Move check to see if
-	'body' is NULL to the outter 'if', protecting the '!is_define'
-	situation as well.
-
-2019-05-29  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.c (partial_die_parent_scope): Call dwarf_tag_name.
-	(dwarf_unknown): New function.
-	(dwarf_tag_name, dwarf_attr_name, dwarf_form_name)
-	(dwarf_type_encoding_name): Use dwarf_unknown.
-
-2019-05-29  Tom Tromey  <tromey@adacore.com>
-
-	PR c++/20020:
-	* cp-valprint.c (cp_print_value_fields): Call
-	cp_print_static_field inside "try".
-
-2019-05-29  Tom Tromey  <tromey@adacore.com>
-
-	* inflow.c (struct terminal_info): Add default operator=.
-	* configure: Rebuild.
-	* warning.m4 (AM_GDB_WARNINGS): Add -Wdeprecated-copy,
-	-Wdeprecated-copy-dtor, -Wredundant-move.
-
-2019-05-29  Tom Tromey  <tromey@adacore.com>
-
-	* NEWS: Add entry.
-	* infcmd.c (print_return_value_1): Handle finish_print
-	option.
-	(show_print_finish): New function.
-	(_initialize_infcmd): Add "set/show print finish" commands.
-	* valprint.c (user_print_options): Initialize new member.
-	* valprint.h (struct value_print_options) <finish_print>: New
-	member.
-
-2019-05-28  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_remove_Xbn_suffix)
-	(find_old_style_renaming_symbol)
-	(parse_old_style_renaming): Remove.
-	(ada_find_renaming_symbol): Don't call
-	find_old_style_renaming_symbol.
-	(ada_is_renaming_symbol): Rename from
-	ada_find_renaming_symbol.  Remove "block" parameter.  Return
-	bool.  Now static.
-	(ada_read_var_value): Update and simplify.
-	* ada-exp.y (write_var_or_type): Remove old code.
-
-2019-05-28  Alan Hayward  <alan.hayward@arm.com>
-
-	PR gdb/25010
-	* event-top.c: Remove include comment.
-	* inflow.c (class scoped_ignore_sigttou): Move from here...
-	* inflow.h (class scoped_ignore_sigttou): ...to here.
-	* ser-unix.c (hardwire_drain_output): Block SIGTTOU during drain.
-	* top.c:  Remove include comment.
-
-2019-05-27  Tom Tromey  <tom@tromey.com>
-
-	* NEWS: Fix typo.
-
-2019-05-22  Tom Tromey  <tromey@adacore.com>
-
-	* target.c (target_follow_exec): Constify parameter.
-	* target-delegates.c: Rebuild.
-	* remote.c (remote_target::follow_exec): Constify parameter.
-	* infrun.c (follow_exec): Constify parameter.
-	* target.h (struct target_ops) <follow_exec>: Constify parameter.
-	(target_follow_exec): Likewise.
-
-2019-05-22  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c (aarch64_execute_dwarf_cfa_vendor_op): Treat
-	DW_CFA_AARCH64_negate_ra_state as nop on non pauth targets.
-
-2019-05-22  Alan Hayward  <alan.hayward@arm.com>
-
-	* NEWS: Add debugredirect and testsuite sections.
-
-2019-05-22  Simon Cook  <simon.cook@embecosm.com>
-
-	* riscv-tdep.c (riscv_gdbarch_init): Support determining flen from
-	target descriptions using exclusively floating point register name
-	aliases.
-
-2019-05-21  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	PR gdb/18644:
-	* f-lang.c (build_fortran_types): Handle the case where
-	gdbarch_floatformat_for_type returns a nullptr.
-
-2019-05-21  Tom de Vries  <tdevries@suse.de>
-
-	PR cli/24587
-	* cli/cli-cmds.c (complete_command): Fix use of unitialized variable.
-
-2019-05-18  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	PR gdb/18644:
-	* f-lang.c (build_fortran_types): Use floatformats_ia64_quad for
-	16-byte floats.
-	* i386-tdep.c (i386_floatformat_for_type): Use
-	floatformats_ia64_quad for the 16-byte floating point component
-	within a fortran 32-byte complex number.
-
-2019-05-18  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2read.c (struct cu_partial_die_info): Add constructor,
-	delete default constructor.
-	(find_partial_die): Update to return const struct.
-	(partial_die_parent_scope): Move variable declaration into scope
-	of its use and change its type to auto.
-	(guess_partial_die_structure_name): Likewise.
-	(partial_die_info::fixup): Likewise.
-
-2019-05-17  Tom Tromey  <tromey@adacore.com>
-
-	* source.c (find_and_open_source): Remove cast.
-
-2019-05-17  Tom Tromey  <tromey@adacore.com>
-
-	* annotate.c (annotate_source): Make "filename" const.
-	* annotate.h (annotate_source): Use const.
-
-2019-05-17  Alan Hayward  <alan.hayward@arm.com>
-
-	* disasm.c (set_disassembler_options): Send errors to stderr.
-
-2019-05-17  Alan Hayward  <alan.hayward@arm.com>
-
-	* cli/cli-interp.c (struct saved_output_files): Add saved entry.
-	(cli_interp_base::set_logging): Check debug_redirect.
-	* cli/cli-interp.h (set_logging): Add debug_redirect parameter.
-	* cli/cli-logging.c (debug_redirect): Add static variable.
-	(pop_output_files): Add default param.
-	(handle_redirections): Print debug setting.
-	(show_logging_command): Likewise.
-	(_initialize_cli_logging): Add debugredirect command.
-	* interps.c (current_interp_set_logging): Add debug_redirect
-	parameter.
-	* interps.h (set_logging): Add debug_redirect parameter.
-	(current_interp_set_logging): Likewise.
-	* mi/mi-common.h: Likewise.
-	* mi/mi-interp.c (mi_interp::set_logging): Likewise.
-
-2019-05-17  Alan Hayward  <alan.hayward@arm.com>
-	    Tom Tromey  <tromey@adacore.com>
-
-	* cli/cli-interp.c (cli_interp_base::set_logging): Create tee_file
-	directly.
-	* cli/cli-interp.h (make_logging_output): Remove declaration.
-	* cli/cli-logging.c (make_logging_output): Remove function.
-	* mi/mi-interp.c (mi_interp::set_logging): Create tee_file
-	directly.
-	* ui-file.c (tee_file::tee_file): Remove bools.
-	(tee_file::~tee_file): Remove deletes.
-	* ui-file.h (tee_file): Remove bools.
-
-2019-01-28  Jan Vrany  <jan.vrany@fit.cvut.cz>
-
-	* mi/mi-cmds.h (mi_cmd_complete): New function.
-	* mi/mi-main.c (mi_cmd_complete): Likewise.
-	* mi/mi-cmds.c: Define new MI command -complete.
-	* NEWS: Mention new -complete command.
-
-2019-01-24  Jan Vrany  <jan.vrany@fit.cvut.cz>
-
-	* completer.h (complete): New function.
-	* completer.c (complete): Likewise.
-	* cli/cli-cmds.c: (complete_command): Update to use new complete()
-	function defined in completer.h.
-
-2019-05-17  Jan Vrany  <jan.vrany@fit.cvut.cz>
-
-	* MAINTAINERS (Write After Approval): Add myself.
-
-2019-05-17  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/24094
-	* dwarf2read.c (struct cu_partial_die_info): New struct.
-	(find_partial_die): Return cu_partial_die_info.
-	(partial_die_parent_scope, guess_partial_die_structure_name)
-	(partial_die_info::fixup): Handle new return type of find_partial_die.
-
-2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR breakpoints/24541
-	* stap-probe.c (stap_parse_register_operand): Make "regname" an
-	"std::string", simplifying the algorithm.
-
-2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* stap-probe.c (handle_stap_probe): Fix complaint formatting.
-	(stap_static_probe_ops::get_probes): Likewise.
-
-2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* stap-probe.c (stap_parse_register_operand): Make "if (*p->arg ==
-	'-')" and "else if".
-	(stap_parse_single_operand): Join checks for
-	"gdbarch_stap_parse_special_token_p" and
-	"gdbarch_stap_parse_special_token" in the same "if" statement.
-	Invert check when verifying for operation on register
-	displacement.
-
-2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* stap-probe.c (stap_get_opcode): Update comment.
-	(stap_get_expected_argument_type): Likewise.
-	(handle_stap_probe): Likewise.
-
-2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* i386-tdep.c (i386_stap_parse_special_token_triplet): Change
-	return type to 'bool'.  Adjust comment.  Use 'bool' when
-	appropriate.
-	(i386_stap_parse_special_token_three_arg_disp): Likewise.
-	* stap-probe.c (stap_parse_argument_1): Likewise.
-	(stap_is_operator): Likewise.
-	(stap_is_generic_prefix): Likewise.
-	(stap_is_register_prefix): Likewise.
-	(stap_is_register_indirection_prefix): Likewise.
-	(stap_is_integer_prefix): Likewise.
-	(stap_generic_check_suffix): Likewise.
-	(stap_check_integer_suffix): Likewise.
-	(stap_check_register_suffix): Likewise.
-	(stap_check_register_indirection_suffix): Likewise.
-	(stap_parse_register_operand): Likewise.
-	(stap_parse_single_operand): Likewise.
-	(stap_parse_argument_1): Likewise.
-	(stap_probe::get_argument_count): Likewise.
-	(stap_is_operator): Likewise.
-
-2019-05-16  Tom Tromey  <tromey@adacore.com>
-
-	* darwin-nat.c (thread_info_from_private_thread_info): Add struct
-	keyword to foreach.
-
-2019-05-15  Simon Marchi  <simon.marchi@efficios.com>
-
-	* linux-thread-db.c (try_thread_db_load_1): Change return type
-	to bool.
-	(try_thread_db_load): Likewise.
-	(try_thread_db_load_from_pdir_1): Likewise.
-	(try_thread_db_load_from_pdir): Likewise.
-	(try_thread_db_load_from_sdir): Likewise.
-	(try_thread_db_load_from_dir): Likewise.
-	(thread_db_load_search): Likewise.
-	(has_libpthread): Likewise.
-	(thread_db_load): Likewise.
-
-2019-05-15  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192
-	* dwarf2read.c (parse_macro_definition): Check whether 'body' is
-	NULL, and complain/return if that's the case.
-
-2019-05-15  John Darrington <john@darrington.wattle.id.au>
-
-	* s12z-tdep.c (push_pull_get_stack_adjustment): New function.
-	(advance, posn, abstract_read_memory): New functions.
-	[struct mem_read_abstraction]: New struct.
-	(s12z_frame_cache): Use opcodes API to interpret stack frame code.
-
-2019-05-14  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (coerce_unspec_val_to_type): Only set address when
-	value is not lval_memory.
-
-2019-05-14  Tom Tromey  <tromey@adacore.com>
-
-	* solib.c (info_sharedlibrary_command): Style the file name.
-
-2019-05-14  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c (aarch64_vnh_type): Add half view.
-	(aarch64_vnv_type): Likewise.
-	* target-descriptions.c (make_gdb_type): Add TDESC_TYPE_IEEE_HALF.
-	* common/tdesc.c: Likewise.
-	* common/tdesc.h (enum tdesc_type_kind): Likewise.
-	* features/aarch64-fpu.c (create_feature_aarch64_fpu): Regenerate.
-	* features/aarch64-fpu.xml: Add ieee half view.
-	* features/aarch64-sve.c (create_feature_aarch64_fpu): Likewise.
-	* gdbtypes.c (gdbtypes_post_init): Add builtin_half
-	* gdbtypes.h (struct builtin_type): Likewise.
-	(struct objfile_type): Likewise.
-
-2019-05-12  Paul Naert  <paul.naert@polymtl.ca>
-
-	* language.c (language_sniff_from_mangled_name): Fix "langauge"
-	typo.
-	* location.h (string_to_event_location): Likewise.
-
-2019-05-11  Joel Brobecker  <brobecker@adacore.com>
-
-	GDB 8.3 released.
-
-2019-05-10  Simon Marchi  <simon.marchi@efficios.com>
-
-	* breakpoint.h (fix_multi_location_breakpoint_output_globally):
-	New variable declaration.
-	* breakpoint.c (fix_multi_location_breakpoint_output_globally):
-	New variable.
-	(print_one_breakpoint): Use ui_out::test_flags and new global
-	variable to compute use_fixed_output.
-	* mi/mi-main.h (mi_multi_location_breakpoint_output_fixed):
-	Remove.
-	* mi/mi-main.c (fix_multi_location_breakpoint_output): Remove.
-	(mi_multi_location_breakpoint_output_fixed): Remove.
-	(mi_cmd_fix_multi_location_breakpoint_output): Adjust to set the
-	new variable.
-	* mi/mi-out.c (mi_ui_out::mi_ui_out): Set
-	fix_multi_location_breakpoint_output flag if version >= 3.
-	* ui-out.h (enum ui_out_flag)
-	<fix_multi_location_breakpoint_output>: New enumerator.
-
-2019-05-10  Simon Marchi  <simon.marchi@efficios.com>
-
-	* contrib/cc-with-tweaks.sh: Validate dwz's work.
-
-2019-05-10  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (catch_ada_completer): New function.
-	(_initialize_ada_language): Use it.
-
-2019-05-10  Tom Tromey  <tromey@adacore.com>
-
-	* thread.c (print_thread_info): Make "requested_threads" const.
-	* gdbthread.h (print_thread_info): Make "requested_threads"
-	const.
-	* ada-tasks.c (print_ada_task_info): Make "taskno_str" const.
-	* ada-lang.h (print_ada_task_info): Make "taskno_str" const.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* gdbtypes.c (objfile_type_data): Change type.
-	(objfile_type, _initialize_gdbtypes): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* dwarf2-frame.c (dwarf2_frame_objfile_data): Change type.
-	(dwarf2_frame_find_fde, dwarf2_build_frame_info)
-	(_initialize_dwarf2_frame): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* objc-lang.c (objc_objfile_data): Change type.
-	(find_methods): Update.
-	(_initialize_objc_lang): Remove.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* stabsread.c (rs6000_builtin_type_data): Change type.
-	(rs6000_builtin_type, _initialize_stabsread): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* mips-tdep.c (mips_pdr_data): Remove.
-	(_initialize_mips_tdep): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* hppa-tdep.c (hppa_objfile_priv_data): Change type.
-	(hppa_init_objfile_priv_data, read_unwind_info)
-	(find_unwind_entry, _initialize_hppa_tdep): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* elfread.c (elf_objfile_gnu_ifunc_cache_data): Change type.
-	(elf_gnu_ifunc_record_cache): Update.  Don't allocate hash table
-	on obstack.
-	(elf_gnu_ifunc_resolve_by_cache, _initialize_elfread): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* mdebugread.c (basic_type_data): Change type.
-	(basic_type, _initialize_mdebugread): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* common/gdb_unique_ptr.h (struct noop_deleter): New.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* nto-tdep.c (nto_inferior_data_reg): Change type.
-	(nto_inferior_data): Update.
-	(nto_inferior_data_cleanup, nto_new_inferior_data)
-	(_initialize_nto_tdep): Remove.
-	* nto-tdep.h (struct nto_inferior_data): Add initializers.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* ada-lang.c (struct ada_inferior_data): Add initializers.
-	(ada_inferior_data): Change type.
-	(ada_inferior_data_cleanup): Remove.
-	(get_ada_inferior_data, ada_inferior_exit)
-	(struct ada_pspace_data): Add initializers, destructor.
-	(ada_pspace_data_handle): Change type.
-	(get_ada_pspace_data): Update.
-	(ada_pspace_data_cleanup): Remove.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* coffread.c (struct coff_symfile_info): Add initializers.
-	(coff_objfile_data_key): Move lower.  Change type.
-	(coff_symfile_init, coff_symfile_read, _initialize_coffread):
-	Update.
-	(coff_free_info): Remove.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* fbsd-tdep.c (struct fbsd_pspace_data): Add initializers.
-	(fbsd_pspace_data_handle): Move lower.  Change type.
-	(get_fbsd_pspace_data): Update.
-	(fbsd_pspace_data_cleanup): Remove.
-	(_initialize_fbsd_tdep): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* ada-tasks.c (ada_tasks_pspace_data_handle): Change type.
-	(get_ada_tasks_pspace_data): Update.
-	(ada_tasks_pspace_data_cleanup): Remove.
-	(_initialize_tasks): Update.
-	(ada_tasks_inferior_data_handle): Change type.
-	(get_ada_tasks_inferior_data): Update.
-	(ada_tasks_inferior_data_cleanup): Remove.
-	(struct ada_tasks_pspace_data): Add initializers.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* symfile.h (struct sym_probe_fns) <sym_get_probes>: Change type.
-	* symfile-debug.c (debug_sym_get_probes): Change type.
-	* stap-probe.c (handle_stap_probe):
-	(stap_static_probe_ops::get_probes): Change type.
-	* probe.h (class static_probe_ops) <get_probes>: Change type.
-	* probe.c (class any_static_probe_ops) <get_probes>: Change type.
-	(parse_probes_in_pspace): Update.
-	(find_probes_in_objfile, find_probe_by_pc, collect_probes):
-	Update.
-	(any_static_probe_ops::get_probes): Change type.
-	* elfread.c (elfread_data): New typedef.
-	(probe_key): Change type.
-	(elf_get_probes): Likewise.  Update.
-	(probe_key_free): Remove.
-	(_initialize_elfread): Update.
-	* dtrace-probe.c (class dtrace_static_probe_ops) <get_probes>:
-	Change type.
-	(dtrace_process_dof_probe, dtrace_process_dof)
-	(dtrace_static_probe_ops::get_probe): Change type.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* xcoffread.c (struct xcoff_symfile_info): Rename from
-	coff_symfile_info.  Add initializers.
-	(xcoff_objfile_data_key): Move lower.  Change type.
-	(XCOFF_DATA): Rewrite.
-	(xcoff_free_info): Remove.
-	(xcoff_symfile_init, _initialize_xcoffread, read_xcoff_symtab)
-	(read_symbol, read_symbol_lineno, find_linenos, init_stringtab)
-	(xcoff_initial_scan): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* solib-svr4.c (struct svr4_info): Add initializers and
-	destructor.
-	<probes_table>: Now an htab_up.
-	(solib_svr4_pspace_data): Change type.
-	(free_probes_table): Simplify.
-	(~svr4_info): Rename from svr4_pspace_data_cleanup.
-	(get_svr4_info, probes_table_htab_remove_objfile_probes)
-	(probes_table_remove_objfile_probes, register_solib_event_probe)
-	(solib_event_probe_at, svr4_update_solib_event_breakpoint)
-	(_initialize_svr4_solib): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* remote.c (remote_pspace_data): Change type.
-	(remote_pspace_data_cleanup): Remove.
-	(get_remote_exec_file, set_pspace_remote_exec_file)
-	(_initialize_remote): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* breakpoint.c (breakpoint_objfile_key): Change type.
-	(get_breakpoint_objfile_data): Update.
-	(free_breakpoint_objfile_data): Remove.
-	(_initialize_breakpoint): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* linux-tdep.c (struct linux_info): Add initializers.
-	(linux_inferior_data): Move.  Change type.
-	(invalidate_linux_cache_inf): Update.
-	(linux_inferior_data_cleanup): Remove.
-	(get_linux_inferior_data, _initialize_linux_tdep): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* auxv.c (auxv_inferior_data): Move.  Change type.
-	(auxv_inferior_data_cleanup): Remove.
-	(invalidate_auxv_cache_inf): Rewrite.
-	(get_auxv_inferior_data, _initialize_auxv): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* symfile-debug.c (struct debug_sym_fns_data): Add initializers.
-	(symfile_debug_objfile_data_key): Change type.
-	(symfile_debug_installed, debug_qf_has_symbols)
-	(debug_qf_find_last_source_symtab)
-	(debug_qf_forget_cached_source_info)
-	(debug_qf_map_symtabs_matching_filename, debug_qf_lookup_symbol)
-	(debug_qf_print_stats, debug_qf_dump)
-	(debug_qf_expand_symtabs_for_function)
-	(debug_qf_expand_all_symtabs)
-	(debug_qf_expand_symtabs_with_fullname)
-	(debug_qf_map_matching_symbols)
-	(debug_qf_expand_symtabs_matching)
-	(debug_qf_find_pc_sect_compunit_symtab)
-	(debug_qf_map_symbol_filenames)
-	(debug_qf_find_compunit_symtab_by_address, debug_sym_get_probes)
-	(debug_sym_new_init, debug_sym_init, debug_sym_read)
-	(debug_sym_read_psymbols, debug_sym_finish, debug_sym_offsets)
-	(debug_sym_read_linetable, debug_sym_relocate): Update.
-	(symfile_debug_free_objfile): Remove.
-	(install_symfile_debug_logging, _initialize_symfile_debug):
-	Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* dwarf2read.h (struct dwarf2_per_objfile): Don't inherit from
-	allocate_on_obstack.
-	* dwarf2read.c (dwarf2_objfile_data_key): Change type.
-	(get_dwarf2_per_objfile): Update.
-	(set_dwarf2_per_objfile): Remove.
-	(dwarf2_has_info, dwarf2_get_section_info): Update.
-	(dwarf2_free_objfile): Remove.
-	(_initialize_dwarf2_read): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* auto-load.c (struct auto_load_pspace_info): Add destructor and
-	initializers.
-	<unsupported_script_warning_printed,
-	script_not_found_warning_printed>: Now bool.
-	(auto_load_pspace_data): Change type.
-	(~auto_load_pspace_info): Rename from
-	auto_load_pspace_data_cleanup.
-	(get_auto_load_pspace_data, init_loaded_scripts_info)
-	(clear_section_scripts, maybe_print_unsupported_script_warning)
-	(maybe_print_script_not_found_warning, _initialize_auto_load):
-	Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.c (objfile_pspace_info): Add destructor and
-	initializers.
-	(objfiles_pspace_data): Change type.
-	(~objfile_pspace_info): Rename from objfiles_pspace_data_cleanup.
-	(get_objfile_pspace_data): Update.
-	(objfiles_bfd_data): Change type.
-	(get_objfile_bfd_data): Update.
-	(objfile_bfd_data_free, _initialize_objfiles): Remove.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* break-catch-syscall.c (catch_syscall_inferior_data): Move.
-	Change type.
-	(get_catch_syscall_inferior_data): Update.
-	(catch_syscall_inferior_data_cleanup): Remove.
-	(_initialize_break_catch_syscall): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* inflow.c (struct terminal_info): Add destructor and
-	initializers.
-	(inflow_inferior_data): Change type.
-	(~terminal_info): Rename from inflow_inferior_data_cleanup.
-	(get_inflow_inferior_data, inflow_inferior_exit)
-	(swap_terminal_info, _initialize_inflow): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* target-dcache.c (target_dcache_cleanup): Remove.
-	(target_dcache_aspace_key): Change type.
-	(target_dcache_init_p, target_dcache_invalidate)
-	(target_dcache_get, target_dcache_get_or_init)
-	(_initialize_target_dcache): Update.
-	* dcache.h (struct dcache_deleter): New.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (struct symbol_cache): Add destructor and
-	initializers.
-	(symbol_cache_key): Move.  Change type.
-	(make_symbol_cache, free_symbol_cache): Remove.
-	(get_symbol_cache): Update.
-	(symbol_cache_cleanup): Remove.
-	(ALL_PSPACES, symbol_cache_flush)
-	(maintenance_print_symbol_cache)
-	(maintenance_print_symbol_cache_statistics, _initialize_symtab):
-	Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (struct main_info): Add destructor and initializers.
-	(main_progspace_key): Move.  Change type.
-	(get_main_info): Update.
-	(main_info_cleanup): Remove.
-	(_initialize_symtab): Update.
-
-2019-05-08  Tom Tromey  <tom@tromey.com>
-
-	* registry.h (DECLARE_REGISTRY): Define the _key class.
-
-2019-05-08  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* NEWS: Merge two 'New commands' sections.
-
-2019-05-08  Joel Brobecker  <brobecker@adacore.com>
-
-	* ada-valprint.c (ada_val_print_gnat_array): Remove language
-	parameter and use Ada language definition instead.
-	(ada_val_print_ptr): Remove unused language parameter.
-	(ada_val_print_num): Remove language parameter and use Ada language
-	definition instead.
-	(ada_val_print_enum, ada_val_print_flt): Remove unused language
-	parameter.
-	(ada_val_print_struct_union, ada_val_print_ref): Remove language
-	parameter and use Ada language definition instead.
-	(ada_val_print_1): Update all ada_val_print_xxx calls.
-	Remove language parameter.
-	(ada_val_print): Update ada_val_print_1 call.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* remote.c (remote_hw_watchpoint_limit)
-	(remote_hw_watchpoint_length_limit, remote_hw_breakpoint_limit):
-	Now static.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* maint.c (_initialize_maint_cmds): Move initialization code to
-	remote.c.
-	(watchdog, show_watchdog): Move to remote.c.
-	* remote.c (watchdog, show_watchdog): Move from maint.c.  Make
-	"watchdog" static.
-	(_initialize_remote): Move initialization code from maint.c.
-	* defs.h (watchdog): Don't declare.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* tui/tui-interp.c: Include main.h.
-	* interps.c: Include main.h.
-	* main.h (interpreter_p): Declare.
-	* defs.h (interpreter_p): Don't declare.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2loc.c: Include dwarf2read.h.
-	* defs.h (read_unsigned_leb128): Don't declare.
-	* dwarf2read.h (read_unsigned_leb128): Declare.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* utils.c (fputs_maybe_filtered): Call can_emit_style_escape as a
-	method.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* utils.c (fputs_maybe_filtered): Reset style after paging, even
-	when no wrap column is set.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* c-lang.c (c_get_string): Handle non-C-style arrays.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* typeprint.c (print_offset_data::update): Print the bit offset,
-	not the number of bits remaining.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* typeprint.c (print_offset_data::maybe_print_hole): Add extra
-	padding at end of comment.
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2loc.c (dwarf2_evaluate_property) <PROP_ADDR_OFFSET>:
-	Compare main types.
-
-2019-05-06  Tom Tromey  <tom@tromey.com>
-
-	* common/scoped_mmap.c: Include common-defs.h.
-	* common/scoped_mmap.h: Don't include config.h.
-
-2019-05-04  Tom Tromey  <tom@tromey.com>
-
-	* aarch64-tdep.c (stack_item_t): Remove typedef and DEF_VEC.
-	(struct aarch64_call_info): Add initializers.
-	<si>: Now a std::vector.
-	(pass_on_stack, aarch64_push_dummy_call): Update.
-
-2019-05-04  Simon Marchi  <simon.marchi@efficios.com>
-	    Tom Tromey  <tom@tromey.com>
-
-	* ppc-linux-nat.c (thread_points_p): Remove typedef and DEF_VEC.
-	(ppc_threads): Now a std::vector.  Now static.
-	(hwdebug_find_thread_points_by_tid)
-	(ppc_linux_nat_target::low_new_thread, ppc_linux_thread_exit):
-	Update.
-
-2019-05-04  Tom Tromey  <tom@tromey.com>
-
-	* arc-tdep.c (arc_tdesc_init): Return bool.
-
-2019-05-04  Tom Tromey  <tom@tromey.com>
-
-	* arm-linux-nat.c (arm_linux_nat_target::can_use_hw_breakpoint):
-	Use gdb_assert_not_reached.
-
-2019-05-04  Tom Tromey  <tom@tromey.com>
-
-	* compile/compile-cplus-types.c (compile_cplus_convert_enum): Use
-	"false".
-
-2019-05-04  Tom Tromey  <tom@tromey.com>
-
-	* arc-tdep.c (arc_tdesc_init): Use bool.
-
-2019-05-04  Tom Tromey  <tom@tromey.com>
-
-	* stack.c (select_frame_for_mi): Use "false", not "FALSE".
-
-2019-05-04  Tom Tromey  <tom@tromey.com>
-
-	* cli/cli-cmds.c (valid_command_p): Return bool.
-
-2019-05-04  Tom Tromey  <tom@tromey.com>
-
-	* cli/cli-decode.c (valid_user_defined_cmd_name_p): Return bool.
-	* command.h (valid_user_defined_cmd_name_p): Channge return type.
-
-2019-05-04  Raul Tambre  <raul@tambre.ee>
-
-	* python/lib/gdb/prompt.py (_ExtendedPrompt)
-	<before_prompt_hook, get_show_string>: Fix incorrect use of 'is'
-	operator for comparison.
-
-2019-05-04  Tom Tromey  <tom@tromey.com>
-
-	* psymtab.c (psymbol_name_matches, match_partial_symbol)
-	(lookup_partial_symbol, print_partial_symbols)
-	(recursively_search_psymtabs, sort_pst_symbols, psymbol_hash)
-	(psymbol_compare): Update.
-	(add_psymbol_to_bcache): Clear the entire psymbol.
-	(maintenance_check_psymtabs): Update.
-	* psympriv.h (struct partial_symbol): Don't derive from
-	general_symbol_info.
-	<obj_section, unrelocated_address, address,
-	set_unrelocated_address>: Update.
-	<ginfo>: New member.
-	* dwarf-index-write.c (write_psymbols, debug_names::insert)
-	(debug_names::write_psymbols): Update.
-
-2019-05-04  Tom de Vries  <tdevries@suse.de>
-
-	* contrib/cc-with-tweaks.sh: Support -n arg.
-
-2019-05-04  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* corelow.c (core_target::detach): Ensure frame cache and
-	register caches are cleared.
-	inferior.c (exit_inferior_1): Likewise.
-
-2019-05-03  Sandra Loosemore  <sandra@codesourcery.com>
-	    Tom Tromey  <tom@tromey.com>
-
-	* dictionary.c (collate_pending_symbols_by_language): Remove
-	"struct" from foreach.
-	* symtab.c (lookup_global_symbol_from_objfile)
-	(lookup_symbol_in_objfile_from_linkage_name): Remove "struct" from
-	foreach.
-	* ser-tcp.c (net_open): Remove "struct" from foreach.
-	* objfiles.c (objfile_relocate, objfile_rebase)
-	(objfile_has_symbols): Remove "struct" from foreach.
-	* minsyms.c (lookup_minimal_symbol_by_pc_section): Remove "struct"
-	from foreach.
-	* dwarf2read.c (handle_struct_member_die): Remove "struct" from
-	foreach.
-	* darwin-nat.c (thread_info_from_private_thread_info): Remove
-	"struct" from foreach.
-	* ada-lang.c (create_excep_cond_exprs)
-	(ada_exception_catchpoint_cond_string): Remove "struct" from
-	foreach.
-
-2019-05-03  Tom Tromey  <tromey@adacore.com>
-
-	* ada-exp.y (convert_char_literal): Check suffix of each
-	enumerator.
-
-2019-05-03  Dilyan Palauzov  <dilyan.palauzov@aegee.org>
-
-	PR ada/21406:
-	* ada-exp.y (yywrap): Don't define.
-	* ada-lex.l (%option): Add noyywrap
-	(yywrap): Remove.
-
-2019-05-03  Eli Zaretskii  <eliz@gnu.org>
-
-	* common/common-defs.h [__MINGW32__ || __CYGWIN__]: Define
-	_WIN32_WINNT to the XP level, unless already defined to a higher
-	level.
-
-	* unittests/parse-connection-spec-selftests.c:
-	* ser-tcp.c:
-	* common/netstuff.c [USE_WIN32API]:  Remove the _WIN32_WINNT
-	override.
-
-	* symfile.c (find_separate_debug_file): Remove colon from the
-	drive spec of DOS/Windows file names of the target, so that the
-	file name produced from DEBUGDIR and the target's directory will
-	be valid on DOS/Windows systems.
-
-2019-05-02  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* rust-lang.c (val_print_struct): Handle printing structures
-	containing strings.
-
-2019-05-02  Tom Tromey  <tromey@adacore.com>
-
-	* valarith.c (_initialize_valarith): Remove.
-
-2019-05-01  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_value_primitive_field): Treat more fields as
-	bitfields.
-
-2019-05-01  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_value_assign): Correctly compute starting offset
-	for big-endian copies.
-
-2019-04-30  Ali Tamur  <tamur@google.com>
-	* gdb/dwarf2read.c (read_3_bytes): New declaration.
-	(read_attribute_value): Added DW_FORM_strx1-4 cases.
-	(read_3_bytes): New function.
-
-2019-04-30  Joel Brobecker  <brobecker@adacore.com>
-
-	* windows-nat.c (main_thread_id): Delete.
-	(handle_output_debug_string): Replace main_thread_id by
-	current_event.dwThreadId.
-	(fake_create_process): Likewise.
-	(get_windows_debug_event) <CREATE_PROCESS_DEBUG_EVENT>:
-	Do not set main_thread_id.
-	<LOAD_DLL_DEBUG_EVENT>: Replace main_thread_id by
-	current_event.dwThreadId.
-	<UNLOAD_DLL_DEBUG_EVENT>: Likewise.
-
-2019-04-30  Joel Brobecker  <brobecker@adacore.com>
-
-	* windows-nat.c (get_windows_debug_event) <EXIT_PROCESS_DEBUG_EVENT>:
-	Use current_event.dwThreadId instead of main_thread_id.
-
-2019-04-30  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_lookup_simple_minsyms): New function.
-	(create_excep_cond_exprs): Iterate over program spaces.
-	(ada_exception_catchpoint_cond_string): Examine all minimal
-	symbols for exception types.
-
-2019-04-30  Tom Tromey  <tromey@adacore.com>
-
-	PR c++/24470:
-	* dwarf2read.c (process_structure_scope): Handle case where type
-	has template parameters but no symbol was created.
-
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
-
-	* f-typeprint.c (f_type_print_base): Print 'allocatable' type
-	qualifier.
-	* gdbtypes.h (TYPE_IS_ALLOCATABLE): Define.
-
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-typeprint.c (f_print_type): Update rules for printing
-	whitespace.
-	(f_type_print_varspec_suffix): Likewise.
-
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
-
-	* f-typeprint.c (f_type_print_varspec_suffix): Handle printing
-	function arguments.
-
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-lang.c (build_fortran_types): Change name of void type to
-	lower case.
-	* f-typeprint.c (f_type_print_base): Print the name of the void
-	type, rather than a fixed string.
-	* f-valprint.c (f_decorations): Use lower case void string.
-
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
-
-	* dwarf2read.c (dwarf2_init_complex_target_type): Use different
-	types for Fortran.
-
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
-	    David Lecomber  <david.lecomber@arm.com>
-
-	* f-exp.y (BINOP_INTRINSIC): New token.
-	(exp): New parser rule handling BINOP_INTRINSIC.
-	(f77_keywords): Add new builtin procedures.
-	* f-lang.c (evaluate_subexp_f): Handle BINOP_MOD, UNOP_FORTRAN_CEILING,
-	UNOP_FORTRAN_FLOOR, BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX.
-	(operator_length_f): Handle UNOP_FORTRAN_CEILING,
-	UNOP_FORTRAN_FLOOR, BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX.
-	(print_unop_subexp_f): New function.
-	(print_binop_subexp_f): New function.
-	(print_subexp_f): Handle UNOP_FORTRAN_CEILING, UNOP_FORTRAN_FLOOR,
-	BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX.
-	(dump_subexp_body_f): Likewise.
-	(operator_check_f): Likewise.
-	* fortran-operator.def: Add UNOP_FORTRAN_CEILING, UNOP_FORTRAN_FLOOR,
-	BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX
-
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/expprint.c (dump_subexp_body_standard): Remove use of
-	UNOP_KIND.
-	* gdb/expression.h (exp_opcode): Include 'fortran-operator.def'.
-	* gdb/f-exp.y (exp): Rename UNOP_KIND to UNOP_FORTRAN_KIND.
-	* gdb/f-lang.c (evaluate_subexp_f): Likewise.
-	(operator_length_f): New fuction.
-	(print_subexp_f): New function.
-	(op_name_f): New function.
-	(dump_subexp_body_f): New function.
-	(operator_check_f): New function.
-	(exp_descriptor_f): Replace standard expression handling functions
-	with new functions.
-	* gdb/fortran-operator.def: New file.
-	* gdb/parse.c (operator_length_standard): Remove use of UNOP_KIND.
-	* gdb/std-operator.def: Remove UNOP_KIND.
-
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* std-operator.def: Remove unbalanced, stray double quote
-	character.
-
-2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
-	    Daniel Everett  <daniel.everett@arm.com>
-	    Nick Forrington  <nick.forrington@arm.com>
-	    Richard Bunt  <richard.bunt@arm.com>
-
-	* cp-valprint.c (cp_print_value_fields): Allow an additional level
-	of depth when printing anonymous structs or unions.
-	* guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer):
-	Don't print either the top-level value, or the children if the
-	max-depth is exceeded.
-	(ppscm_print_children): When printing the key of a map, allow one
-	extra level of depth.
-	* python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Don't
-	print either the top-level value, or the children if the max-depth
-	is exceeded.
-	(print_children): When printing the key of a map, allow one extra
-	level of depth.
-	* python/py-value.c (valpy_format_string): Add max_depth keyword.
-	* valprint.c: (PRINT_MAX_DEPTH_DEFAULT): Define.
-	(user_print_options): Initialise max_depth field.
-	(val_print_scalar_or_string_type_p): New function.
-	(val_print): Check to see if the max depth has been reached.
-	(val_print_check_max_depth): Define new function.
-	(show_print_max_depth): New function.
-	(_initialize_valprint): Add 'print max-depth' option.
-	* valprint.h (struct value_print_options) <max_depth>: New field.
-	(val_print_check_max_depth): Declare new function.
-	* NEWS: Document new feature.
-
-2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* ada-lang.c (ada_language_defn): Initialise new field.
-	* c-lang.c (c_is_string_type_p): New function.
-	(c_language_defn): Initialise new field.
-	(cplus_language_defn): Initialise new field.
-	(asm_language_defn): Initialise new field.
-	(minimal_language_defn): Initialise new field.
-	* c-lang.h (c_is_string_type_p): Declare new function.
-	* d-lang.c (d_language_defn): Initialise new field.
-	* f-lang.c (f_is_string_type_p): New function.
-	(f_language_defn): Initialise new field.
-	* go-lang.c (go_is_string_type_p): New function.
-	(go_language_defn): Initialise new field.
-	* language.c (default_is_string_type_p): New function.
-	(unknown_language_defn): Initialise new field.
-	(auto_language_defn): Initialise new field.
-	* language.h (struct language_defn) <la_is_string_type_p>: New
-	member variable.
-	(default_is_string_type_p): Declare new function.
-	* m2-lang.c (m2_language_defn): Initialise new field.
-	* objc-lang.c (objc_language_defn): Initialise new field.
-	* opencl-lang.c (opencl_language_defn): Initialise new field.
-	* p-lang.c (pascal_is_string_type_p): New function.
-	(pascal_language_defn): Initialise new field.
-	* rust-lang.c (rust_is_string_type_p): New function.
-	(rust_language_defn): Initialise new field.
-
-2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* language.h (struct language_defn) <la_struct_too_deep_ellipsis>:
-	New field.
-	* ada-lang.c (ada_language_defn): Initialise new field.
-	* c-lang.c (c_language_defn): Likewise.
-	(cplus_language_defn): Likewise.
-	(asm_language_defn): Likewise.
-	(minimal_language_defn): Likewise.
-	* d-lang.c (d_language_defn): Likewise.
-	* f-lang.c (f_language_defn): Likewise.
-	* go-lang.c (go_language_defn): Likewise.
-	* language.c (unknown_language_defn): Likewise.
-	(auto_language_defn): Likewise.
-	* m2-lang.c (m2_language_defn): Likewise.
-	* objc-lang.c (objc_language_defn): Likewise.
-	* opencl-lang.c (opencl_language_defn): Likewise.
-	* p-lang.c (pascal_language_defn): Likewise.
-	* rust-lang.c (rust_language_defn): Likewise.
-
-2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* ada-lang.c (ada_is_character_type): Change return type to bool.
-	(ada_is_string_type): Likewise.
-	* ada-lang.h (ada_is_character_type): Update declaration
-	(ada_is_string_type): Likewise.
-
-2019-04-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	Support style in 'frame|thread apply'
-
-	* gdbcmd.h (execute_command_to_string): New term_out parameter.
-	* record.c (record_start, record_stop): Update callers of
-	execute_command_to_string with false.
-	* guile/guile.c (gdbscm_execute_gdb_command): Likewise.
-	* ui-file.h (class ui_file): New term_out and can_emit_style_escape
-	methods.
-	(class string_file): New constructor with term_out parameter.
-	Override methods term_out and can_emit_style_escape.  New member
-	term_out.
-	(class stdio_file): Override can_emit_style_escape.
-	(class tee_file): Override term_out and can_emit_style_escape.
-	* utils.h (can_emit_style_escape): Remove.
-	* utils.c (can_emit_style_escape): Likewise.
-	Update all callers of can_emit_style_escape (SOMESTREAM) to
-	SOMESTREAM->can_emit_style_escape.
-	* source-cache.c (source_cache::get_source_lines): Likewise.
-	* stack.c (frame_apply_command_count): Call execute_command_to_string
-	passing the term_out characteristic of the current gdb_stdout.
-	* thread.c (thr_try_catch_cmd): Likewise.
-	* top.c (execute_command_to_string): pass term_out parameter
-	to construct the string_file for the command output.
-	* ui-file.c (term_cli_styling): New function (most code moved
-	from utils.c can_emit_style_escape).
-	(string_file::string_file, string_file::can_emit_style_escape,
-	stdio_file::can_emit_style_escape, tee_file::term_out,
-	tee_file::can_emit_style_escape): New functions.
-
-2019-04-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* NEWS: Mention the new set|show may-call-functions.
-	* infcall.c (may_call_functions_p): New variable.
-	(show_may_call_functions_p): New function.
-	(call_function_by_hand_dummy): Throws an error if not
-	may-call-functions.
-	(_initialize_infcall): Call add_setshow_boolean_cmd for
-	may-call-functions.
-
-2019-04-25  Keith Seitz  <keiths@redhat.com>
-
-	PR c++/24367
-	* cp-support.c (inspect_type): Don't attempt substitutions
-	of symbol with the same name.
-
-2019-04-25  Tom Tromey  <tromey@adacore.com>
-
-	PR gdb/24475:
-	* event-top.c (gdb_rl_callback_handler): Make "gdb_rl_expt"
-	static.
-
-2019-04-25  Tom Tromey  <tromey@adacore.com>
-
-	* xml-support.c (struct gdb_xml_parser) <set_error>: Take an
-	rvalue reference.
-	(gdb_xml_start_element_wrapper, gdb_xml_end_element_wrapper)
-	(gdb_xml_parser::parse): Use std::move.
-	* python/python-internal.h (gdbpy_convert_exception): Take a const
-	reference.
-	* python/py-value.c (valpy_getitem, valpy_nonzero): Use
-	std::move.
-	* python/py-utils.c (gdbpy_convert_exception): Take a const
-	reference.
-	* python/py-inferior.c (infpy_write_memory, infpy_search_memory):
-	Use std::move.
-	* python/py-breakpoint.c (bppy_set_condition, bppy_set_commands):
-	Use std::move.
-	* mi/mi-main.c (mi_print_exception): Take a const reference.
-	* main.c (handle_command_errors): Take a const reference.
-	* linespec.c (parse_linespec): Use std::move.
-	* infcall.c (run_inferior_call): Use std::move.
-	(call_function_by_hand_dummy): Use std::move.
-	* exec.c (try_open_exec_file): Use std::move.
-	* exceptions.h (exception_print, exception_fprintf)
-	(exception_print_same): Update.
-	* exceptions.c (print_exception, exception_print)
-	(exception_fprintf, exception_print_same): Change parameters to
-	const reference.
-	* event-top.c (gdb_rl_callback_read_char_wrapper): Update.
-	* common/new-op.c: Use std::move.
-	* common/common-exceptions.h (struct gdb_exception): Add move
-	constructor.
-	(struct gdb_exception_error, struct gdb_exception_quit, struct
-	gdb_quit_bad_alloc): Change constructor to move constructor.
-	(throw_exception): Change parameter to rvalue reference.
-	* common/common-exceptions.c (throw_exception): Take rvalue
-	reference.
-	* cli/cli-interp.c (safe_execute_command): Use std::move.
-	* breakpoint.c (insert_bp_location, location_to_sals): Use
-	std::move.
-
-2019-04-25  Tom Tromey  <tromey@adacore.com>
-
-	* guile/scm-exception.c (gdbscm_scm_from_gdb_exception)
-	(gdbscm_throw_gdb_exception): Take a gdbscm_gdb_exception.
-	* guile/scm-block.c, guile/scm-breakpoint.c, guile/scm-cmd.c,
-	guile/scm-disasm.c, guile/scm-frame.c, guile/scm-lazy-string.c,
-	guile/scm-math.c, guile/scm-param.c, guile/scm-ports.c,
-	guile/scm-symbol.c, guile/scm-symtab.c, guile/scm-type.c,
-	guile/scm-value.c: Use unpack.
-	* guile/guile-internal.h (gdbscm_scm_from_gdb_exception): Take a
-	gdbscm_gdb_exception.
-	(gdbscm_throw_gdb_exception): Likewise.
-	(struct gdbscm_gdb_exception): New.
-	(unpack): New function.
-	(gdbscm_wrap): Use unpack.
-
-2019-04-25  Tom Tromey  <tromey@adacore.com>
-
-	* event-top.c (gdb_rl_callback_read_char_wrapper_noexcept)
-	(gdb_rl_callback_handler): Use std::move.
-	* common/common-exceptions.h (struct gdb_exception): Add move
-	assignment operator.
-	(throw_exception_sjlj): Change "exception" to const reference.
-	* common/common-exceptions.c (exceptions_state_mc_catch): Update.
-	(throw_exception_sjlj): Change "exception" to const reference.
-
-2019-04-25  Tom Tromey  <tromey@adacore.com>
-
-	* xml-support.c (gdb_xml_parser::gdb_xml_parser): Update.
-	* python/py-value.c (valpy_getitem, valpy_nonzero): Update.
-	* python/py-inferior.c (infpy_write_memory, infpy_search_memory):
-	Update.
-	* python/py-breakpoint.c (bppy_set_condition, bppy_set_commands):
-	Update.
-	* mi/mi-interp.c (mi_interp::exec): Update.
-	* linespec.c (parse_linespec): Update.
-	* infcall.c (run_inferior_call): Update.
-	* guile/scm-value.c (gdbscm_value_to_lazy_string): Update.
-	* guile/scm-symbol.c (gdbscm_lookup_symbol)
-	(gdbscm_lookup_global_symbol): Update.
-	* guile/scm-param.c (gdbscm_parameter_value): Update.
-	* guile/scm-frame.c (gdbscm_frame_read_register)
-	(gdbscm_frame_read_var): Update.
-	* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Update.
-	* exec.c (try_open_exec_file): Update.
-	* event-top.c (gdb_rl_callback_read_char_wrapper_noexcept)
-	(gdb_rl_callback_handler): Update.
-	* common/common-exceptions.h (exception_none): Don't declare.
-	* common/common-exceptions.c (exception_none): Don't define.
-	(struct catcher) <exception>: Update.
-	* cli/cli-interp.c (safe_execute_command): Update.
-	* breakpoint.c (insert_bp_location, location_to_sals): Update.
-
-2019-04-25  Ali Tamur  <tamur@google.com>
-
-	* dwarf2read.c (skip_one_die): Add DW_FORM_strx.
-	(read_attribute_value): Likewise.
-	(dwarf2_read_addr_index): Update comment.
-	(read_str_index): Add DW_FORM_strx.
-	(dwarf2_string_attr): Likewise.
-	(dwarf2_const_value_attr): Likewise.
-	(dump_die_shallow): Likewise.
-	(dwarf2_fetch_constant_bytes): Likewise.
-	(skip_form_bytes): Likewise.
-	* testsuite/lib/dwarf.exp (_handle_DW_FORM): Add DW_FORM_strx.
-
-2019-04-25  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR corefiles/11608
-	PR corefiles/18187
-	* linux-tdep.c (dump_mapping_p): Add new parameters ADDR and
-	OFFSET.  Verify if current mapping contains an ELF header.
-	(linux_find_memory_regions_full): Adjust call to
-	dump_mapping_p.
-
-2019-04-25  Sandra Loosemore  <sandra@codesourcery.com>
-	    Kang Li <kanglictf@gmail.com>
-
-	PR gdb/21600
-
-	* dwarf2-frame.c (read_initial_length): Be consistent about using
-	unsigned representation of length.
-	(decode_frame_entry_1): Likewise.  Check for wraparound of
-	end pointer as well as buffer overflow.
-
-2019-04-24  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* aarch64-tdep.c (aarch64_gdbarch_init): Use "pulongest" to print
-	"vq".
-
-2019-04-24  Tom Tromey  <tromey@adacore.com>
-
-	* amd64-tdep.c (amd64_has_unaligned_fields): Ignore bitfields.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* s12z-tdep.c (s12z_unwind_pc): Delete.
-	(s12z_unwind_sp): Delete.
-	(s12z_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* rl78-tdep.c (rl78_unwind_sp): Delete.
-	(rl78_gdbarch_init): Don't register deleted function with gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* xstormy16-tdep.c (xstormy16_unwind_sp): Delete.
-	(xstormy16_unwind_pc): Delete.
-	(xstormy16_dummy_id): Delete.
-	(xstormy16_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* vax-tdep.c (vax_unwind_pc): Delete.
-	(vax_gdbarch_init): Don't register deleted function with gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* v850-tdep.c (v850_unwind_sp): Delete.
-	(v850_unwind_pc): Delete.
-	(v850_dummy_id): Delete.
-	(v850_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* tilegx-tdep.c (tilegx_unwind_sp): Delete.
-	(tilegx_unwind_pc): Delete.
-	(tilegx_unwind_dummy_id): Delete.
-	(tilegx_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* tic6x-tdep.c (tic6x_unwind_sp): Delete.
-	(tic6x_dummy_id): Delete.
-	(tic6x_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* sparc-tdep.c (sparc_unwind_pc): Delete.
-	(sparc32_gdbarch_init): Don't register deleted function with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* sh-tdep.c (sh_unwind_sp): Delete.
-	(sh_unwind_pc): Delete.
-	(sh_dummy_id): Delete.
-	(sh_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* score-tdep.c (score_unwind_sp): Delete.
-	(score_unwind_pc): Delete.
-	(score_dummy_id): Delete.
-	(score_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* rx-tdep.c (rx_unwind_pc): Delete.
-	(rx_unwind_sp): Delete.
-	(rx_dummy_id): Delete.
-	(rx_gdbarch_init): Don't register deleted functions with
-	gdbarch.  Update comment.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* rs6000-tdep.c (rs6000_unwind_pc): Delete.
-	(rs6000_dummy_id): Delete.
-	(rs6000_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* or1k-tdep.c (or1k_dummy_id): Delete.
-	(or1k_gdbarch_init): Don't register deleted function with gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* nios2-tdep.c (nios2_dummy_id): Delete.
-	(nios2_unwind_sp): Delete.
-	(nios2_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* nds32-tdep.c (nds32_dummy_id): Delete.
-	(nds32_unwind_pc): Delete.
-	(nds32_unwind_sp): Delete.
-	(nds32_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* msp430-tdep.c (msp430_unwind_pc): Delete.
-	(msp430_unwind_sp): Delete.
-	(msp430_dummy_id): Delete.
-	(msp430_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* moxie-tdep.c (moxie_unwind_sp): Delete.
-	(moxie_unwind_pc): Delete.
-	(moxie_dummy_id): Delete.
-	(moxie_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* mn10300-tdep.c (mn10300_dummy_id): Delete.
-	(mn10300_unwind_pc): Delete.
-	(mn10300_unwind_sp): Delete.
-	(mn10300_push_dummy_call): Use gdbarch_unwind_sp not
-	mn10300_unwind_sp.
-	(mn10300_frame_unwind_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* mep-tdep.c (mep_unwind_pc): Delete.
-	(mep_unwind_sp): Delete.
-	(mep_dummy_id): Delete.
-	(mep_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* m68hc11-tdep.c (m68hc11_unwind_pc): Delete.
-	(m68hc11_unwind_sp): Delete.
-	(m68hc11_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* m32r-tdep.c (m32r_unwind_sp): Delete.
-	(m32r_unwind_pc): Delete.
-	(m32r_dummy_id): Delete.
-	(m32r_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* m32c-tdep.c (m32c_unwind_pc): Delete.
-	(m32c_unwind_sp): Delete.
-	(m32c_dummy_id): Delete.
-	(m32c_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/lm32-tdep.c (lm32_unwind_sp): Delete.
-	(lm32_unwind_pc): Delete.
-	(lm32_dummy_id): Delete.
-	(lm32_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/iq2000-tdep.c (iq2000_unwind_sp): Delete.
-	(iq2000_unwind_pc): Delete.
-	(iq2000_dummy_id): Delete.
-	(iq2000_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* nds32-tdep.c (nds32_type_align): Delete.
-	(nds32_push_dummy_call): Use type_align instead.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* arm-tdep.c (arm_type_align): Only handle vector override case.
-	(arm_push_dummy_call): Use type_align.
-	(arm_gdbarch_init): Register arm_type_align gdbarch function.
-
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* aarch64-tdep.c (aarch64_type_align): Only handle vector override
-	case.
-	(pass_on_stack): Use type_align.
-	(aarch64_gdbarch_init): Register aarch64_type_align gdbarch
-	function.
-
-2019-04-23  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.c (line_header::file_name_at): Remove unused
-	overload.
-
-2019-04-23  Tom de Vries  <tdevries@suse.de>
-
-	PR gdb/24438
-	* contrib/cc-with-tweaks.sh: Remove superfluous .alt file after dwz
-	invocation.
-
-
-2019-03-27  Ali Tamur  <tamur@google.com>
-
-	* dwarf2-frame.c(dwarf_expr_executor::get_addr_index): Update comment
-	* dwarf2expr.c(dwarf_expr_context::execute_stack_op): Add DW_OP_addrx
-	* dwarf2expr.h(dwarf_expr_context::offset): Update comment
-	(dwarf_expr_context::get_addr_index): Likewise
-	* dwarf2loc.c(dwarf_evaluate_loc_desc::get_addr_index): Likewise
-	(symbol_needs_eval_context::get_addr_index): Likewise
-	(disassemble_dwarf_expression): Add DW_OP_addrx
-	* dwarf2read.c(attr_value_as_address): Add DW_FORM_addrx
-	(read_cutu_die_from_dwo): Update comment
-	(skip_one_die): Add DW_FORM_addrx
-	(read_attribute_value): Likewise
-	(var_decode_location): Add DW_OP_addrx
-	(dwarf2_const_value_attr): Add DW_FORM_addrx
-	(dump_die_shallow): Likewise
-	(dwarf2_fetch_constant_bytes): Likewise
-	(decode_locdesc): Add DW_OP_addrx
-	(skip_form_bytes): Add DW_FORM_addrx
-
-2019-04-22  Ali Tamur  <tamur@google.com>
-
-	* MAINTAINERS (Write After Approval): Add self.
-
-2019-04-22  Simon Marchi  <simon.marchi@efficios.com>
-
-	* solib-svr4.c (get_svr4_info): Add pspace parameter.
-	(svr4_keep_data_in_core): Pass current_program_space to get_svr4_info.
-	(open_symbol_file_object): Likewise.
-	(svr4_default_sos): Add info parameter.
-	(svr4_read_so_list): Likewise.
-	(svr4_current_sos_direct): Adjust functions calls to pass down
-	info.
-	(svr4_current_sos_1): Add info parameter.
-	(svr4_current_sos): Call get_svr4_info, pass info down to
-	svr4_current_sos_1.
-	(svr4_fetch_objfile_link_map): Pass objfile->pspace to
-	get_svr4_info.
-	(svr4_in_dynsym_resolve_code): Pass current_program_space to
-	get_svr4_info.
-	(probes_table_htab_remove_objfile_probes): Pass objfile->pspace
-	to get_svr4_info.
-	(probes_table_remove_objfile_probes): Likewise.
-	(register_solib_event_probe): Add info parameter.
-	(solist_update_incremental): Pass info parameter down to
-	svr4_read_so_list.
-	(disable_probes_interface): Add info parameter.
-	(svr4_handle_solib_event): Pass current_program_space to
-	get_svr4_info.  Adjust disable_probes_interface cleanup.
-	(svr4_create_probe_breakpoints): Add info parameter, pass it
-	down to register_solib_event_probe.
-	(svr4_create_solib_event_breakpoints): Add info parameter,
-	pass it down to svr4_create_probe_breakpoints.
-	(enable_break): Pass info down to
-	svr4_create_solib_event_breakpoints.
-	(svr4_solib_create_inferior_hook): Pass current_program_space to
-	get_svr4_info.
-	(svr4_clear_solib): Likewise.
-
-2019-04-22  Pedro Alves  <palves@redhat.com>
-
-	* solib-svr4.c (svr4_free_objfile_observer): New.
-	(probe_and_action::objfile): New field.
-	(probes_table_htab_remove_objfile_probes)
-	(probes_table_remove_objfile_probes): New functions.
-	(register_solib_event_probe): Add 'objfile' parameter.  Store it
-	in the new probe_and_action.  Don't store the probe in 'lookup'.
-	(svr4_create_probe_breakpoints): Pass objfile to
-	register_solib_event_probe.
-	(_initialize_svr4_solib): Register a free_objfile observer.
-
-2019-04-19  Tom Tromey  <tom@tromey.com>
-
-	* common/queue.h: Remove.
-
-2019-04-19  Tom Tromey  <tom@tromey.com>
-
-	* event-loop.c: Don't include "common/queue.h".
-
-2019-04-19  Tom Tromey  <tom@tromey.com>
-
-	* remote.c (remote_target): Use delete.
-	* remote-notif.h: Include <list>, not "common/queue.h".
-	(notif_client_p): Remove typedef.
-	(remote_notif_state): Add constructor, destructor, initializer.
-	<notif_queue>: Now a std::list.
-	(remote_notif_state_xfree): Don't declare.
-	* remote-notif.c (remote_notif_process, handle_notification)
-	(remote_notif_state_allocate): Update.
-	(~remote_notif_state): Rename from remote_notif_state_xfree.
-
-2019-04-19  Tom Tromey  <tom@tromey.com>
-
-	* symfile.c (reread_symbols): Update.
-	* objfiles.c (objfile_register_static_link)
-	(objfile_lookup_static_link): Update
-	(~objfile) Don't delete static_links.
-	* objfiles.h (struct objfile) <static_links>: Now an htab_up.
-
-2019-04-19  Tom Tromey  <tom@tromey.com>
-
-	* type-stack.h (struct type_stack) <insert>: Constify string.
-	* type-stack.c (type_stack::insert): Constify string.
-	* gdbtypes.h (lookup_template_type): Update.
-	(address_space_name_to_int): Update.
-	* gdbtypes.c (address_space_name_to_int): Make space_identifier
-	const.
-	(lookup_template_type): Make name const.
-	* c-exp.y: Update rules.
-	(lex_one_token, classify_name, classify_inner_name)
-	(c_print_token): Update.
-	* p-exp.y: Update rules.
-	(yylex): Update.
-	* f-exp.y: Update rules.
-	(yylex): Update.
-	* d-exp.y: Update rules.
-	(lex_one_token, classify_name, classify_inner_name): Update.
-	* parse.c (write_dollar_variable, copy_name): Return std::string.
-	* parser-defs.h (copy_name): Change return type.
-	* m2-exp.y: Update rules.
-	(yylex): Update.
-	* go-exp.y (lex_one_token): Update.
-	Update rules.
-	(classify_unsafe_function, classify_packaged_name)
-	(classify_name, yylex): Update.
-
-2019-04-19  Sergei Trofimovich <siarheit@google.com>
-
-	* configure.ac: add --enable-source-highlight switch.
-	* configure: Regenerate.
-	* top.c (print_gdb_version): plumb --enable-source-highlight
-	status to "show configuration".
-
-2019-04-19  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_is_variant_part, ada_to_fixed_type_1):
-	Check ADA_TYPE_P.
-	(empty_record, ada_template_to_fixed_record_type_1)
-	(template_to_static_fixed_type)
-	(to_record_with_fixed_variant_part): Use INIT_NONE_SPECIFIC.
-	* cp-abi.c (value_rtti_type): Check HAVE_CPLUS_STRUCT.
-	* gdbtypes.h (INIT_NONE_SPECIFIC, ADA_TYPE_P): New
-	macros.
-
-2019-04-19  Ilya Yu. Malakhov  <malakhov@mcst.ru>
-
-	PR symtab/24423:
-	* source.c (print_source_lines_base): Advance "iter" when a
-	control character is seen.
-
-2019-04-19  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* inferior.h (struct infcall_suspend_state_deleter):
-	Catch exception in destructor to avoid crash.
-
-2019-04-19  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* cli/cli-cmds.c (_initialize_cli_cmds): Move "shell" "!" alias
-	close to the add_com "shell".
-
-2019-04-18  Tom Tromey  <tromey@adacore.com>
-
-	* process-stratum-target.h (class process_stratum_target)
-	<stratum>: Add "final".
-
-2019-04-17  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.c (dwarf2_init_complex_target_type): Check "tt"
-	against nullptr before use.
-
-2019-04-17  Alan Hayward  <alan.hayward@arm.com>
-
-	* nat/linux-waitpid.c (linux_debug): Call debug_vprintf.
-
-2019-04-17  Jim Wilson  <jimw@sifive.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* riscv-tdep.c (riscv_breakpoint_kind_from_pc): Hanndle case where
-	code read might fail, assume 4-byte breakpoint in that case.
-
-2019-04-15  Leszek Swirski  <leszeks@google.com>
-
-	* amd64-tdep.c (amd64_classify_aggregate): Use cp_pass_by_reference
-	rather than a hand-rolled POD check when checking for forced MEMORY
-	classification.
-
-2019-04-15  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-linux-nat.c (store_sveregs_to_thread): Set vector length.
-	* nat/aarch64-sve-linux-ptrace.c (aarch64_sve_set_vq): New
-	function.
-	(aarch64_sve_regs_copy_to_reg_buf): Remove VG checks.
-	(aarch64_sve_regs_copy_from_reg_buf): Likewise.
-	* nat/aarch64-sve-linux-ptrace.h (aarch64_sve_set_vq): New
-	declaration.
-
-2019-04-15  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-linux-nat.c
-	(aarch64_linux_nat_target::thread_architecture): Add override.
-	* aarch64-tdep.c (aarch64_gdbarch_init): Ensure different tdesc for
-	each VQ.
-
-2019-04-15  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c (aarch64_gdbarch_init): Move gdbarch lookup.
-
-2019-04-13  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* dwarf2read.c (dwarf2_init_complex_target_type): Handle complex
-	target types of size 96-bits, add some additional comments, and
-	check that the builtin type we found was the correct size.
-
-2019-04-12  Eli Zaretskii  <eliz@gnu.org>
-
-	* utils.c (prompt_for_continue): Don't restore the styling at the
-	end, as applied_style has the wrong value.  This fixes styling in
-	long lists of file names that are interrupted by the "Continue?"
-	prompt.
-
-2019-04-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* ada-lang.c (ada_language_defn): Remove use of LANG_MAGIC.
-	* c-lang.c (c_language_defn): Likewise.
-	(cplus_language_defn): Likewise.
-	(asm_language_defn): Likewise.
-	(minimal_language_defn): Likewise.
-	* d-lang.c (d_language_defn): Likewise.
-	* f-lang.c (f_language_defn): Likewise.
-	* go-lang.c (go_language_defn): Likewise.
-	* language.c (unknown_language_defn): Likewise.
-	(auto_language_defn): Likewise.
-	* language.h (struct language_defn): Remove la_magic field.
-	(LANG_MAGIC): Delete.
-	* m2-lang.c (m2_language_defn): Remove use of LANG_MAGIC.
-	* objc-lang.c (objc_language_defn): Likewise.
-	* opencl-lang.c (opencl_language_defn): Likewise.
-	* p-lang.c (pascal_language_defn): Likewise.
-	* rust-lang.c (rust_language_defn): Likewise.
-
-2019-04-11  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* riscv-tdep.c (riscv_type_align): New function.
-	(riscv_type_alignment): Delete.
-	(riscv_arg_location): Use 'type_align'.
-	(riscv_gdbarch_init): Register riscv_type_align gdbarch function.
-
-2019-04-11  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdbtypes.c (type_align): A struct with no non-static fields also
-	has alignment of 1.
-
-2019-04-11  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* riscv-tdep.c (riscv_call_arg_complex_float): Fix offset of first
-	component to 0.
-	(riscv_struct_info::riscv_struct_info): Initialise m_offsets
-	member.
-	(riscv_struct_info::analyse): New implementation using new
-	analyse_inner member function.
-	(riscv_struct_info::field_offset): New member function.
-	(riscv_struct_info::m_offsets): New member variable.
-	(riscv_struct_info::analyse_inner): New private member function,
-	takes the old implementation of riscv_struct_info::analyse but
-	extended to track field offsets.
-	(riscv_call_arg_struct): Update the struct folding special cases
-	to handle cases where empty C++ structs, which are non-zero
-	length, are found.
-	(riscv_arg_location): Initialise the length of each location, a
-	non-zero length now indicates the location is in use.
-	(riscv_push_dummy_call): Allow for the first location having a
-	non-zero offset when setting up arguments.
-	(riscv_return_value): Likewise, but for return values.
-
-2019-04-11  Tom Tromey  <tromey@adacore.com>
-
-	* utils.c (internal_vproblem): Make "msg" const.
-
-2019-04-11  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c (aarch64_analyze_prologue_test): Reset saved regs.
-	* trad-frame.c (trad_frame_reset_saved_regs): New function.
-	(trad_frame_alloc_saved_regs): Call trad_frame_reset_saved_regs.
-	* trad-frame.h (trad_frame_reset_saved_regs): New declaration.
-
-2019-04-10  Kevin Buettner  <kevinb@redhat.com>
-
-	* amd64-linux-nat.c (amd64_linux_collect_native_gregset): New
-	function.
-	(fill_gregset): Call amd64_linux_collect_native_gregset instead
-	of amd64_collect_native_gregset.
-	(amd64_linux_nat_target::store_registers): Likewise.
-
-2019-04-10  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (lookup_global_symbol_from_objfile)
-	(lookup_symbol_in_objfile_from_linkage_name): Use the iterator.
-	* objfiles.h (class separate_debug_iterator): New.
-	(class separate_debug_range): New.
-	(struct objfile) <separate_debug_objfiles>: New method.
-	(objfile_separate_debug_iterate): Don't declare.
-	* objfiles.c (separate_debug_iterator::operator++): Rename from
-	objfile_separate_debug_iterate.
-	(objfile_relocate, objfile_rebase, objfile_has_symbols): Use the
-	iterator.
-	* minsyms.c (lookup_minimal_symbol_by_pc_section): Use the
-	iterator.
-
-2019-04-10  Tom Tromey  <tom@tromey.com>
-
-	* symfile.c (reread_symbols): Remove old comment.
-	* objfiles.c (free_all_objfiles): Fix a typo.
-
-2019-04-10  Tom Tromey  <tom@tromey.com>
-
-	* ia64-tdep.c (ia64_get_dyn_info_list): Use foreach.
-	* minsyms.c (lookup_minimal_symbol): Use foreach.
-	(lookup_minimal_symbol_text, lookup_minimal_symbol_by_pc_name)
-	(lookup_minimal_symbol_solib_trampoline): Likewise.
-	* symfile.c (reread_symbols): Use foreach.
-
-2019-04-09  Ivan Begert  <ivanbegert@gmail.com>
-	    Tom Tromey  <tromey@adacore.com>
-
-	PR rust/24414:
-	* rust-exp.y (rust_parser::lex_number): Use strtoulst.
-	(rust_lex_int_test): Change "value" to be LONGEST.
-	(rust_lex_tests): Add test for long integer literal.
-
-2019-04-09  Tom Tromey  <tromey@adacore.com>
-
-	* remote.c (remote_target::remote_add_inferior): Change fake_pid_p
-	to bool.
-	(extended_remote_target::attach): Update.
-	(remote_target::remote_notice_new_inferior): Update.
-	(remote_target::add_current_inferior_and_thread): Update.
-	* inferior.c (exit_inferior_1): Use "false".
-	* corelow.c (add_to_thread_list): Make fake_pid_p bool.
-
-2019-04-09  Simon Marchi  <simon.marchi@efficios.com>
-
-	* infcmd.c (run_command_1): Pass -qualified to tbreak when using
-	the "start" command.
-
-2019-04-08  Kevin Buettner  <kevinb@redhat.com>
-
-	* python/py-inferior.c (infpy_thread_from_thread_handle):
-	Adjust comments to reflect renaming of thread_from_thread_handle
-	to thread_from_handle.  Adjust keywords.  Fix type error message.
-	(inferior_object_methods): Add thread_from_handle.  Retain
-	thread_from_thread_handle, but mark it as deprecated.
-
-2019-04-08  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdbthread.h (find_thread_by_handle): Revise declaration.
-	* thread.c (find_thread_by_handle): Likewise.  Adjust
-	implementation too.
-	* python/py-inferior.c (infpy_thread_from_thread_handle): Add
-	support for buffer objects as handles.
-
-2019-04-08  Kevin Buettner  <kevinb@redhat.com>
-
-	* python/py-infthread.c (thpy_thread_handle): New function.
-	(thread_object_methods): Register thpy_thread_handle.
-
-2019-04-08  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdbthread.h (thread_to_thread_handle): Declare.
-	* thread.c (gdbtypes.h): Include.
-	(thread_to_thread_handle): New function.
-
-	* target.h (struct target_ops): Add thread_info_to_thread_handle.
-	(target_thread_info_to_thread_handle): Declare.
-	* target.c (target_thread_info_to_thread_handle): New function.
-	* target-debug.h (target_debug_print_gdb_byte_vector): Define.
-	* target-delegates.c: Regenerate.
-
-	* linux-thread-db.c (class thread_db_target): Add method
-	thread_info_to_thread_handle.
-	(thread_db_target::thread_info_to_thread_handle): Define.
-	* remote.c (class remote_target): Add new method
-	thread_info_to_thread_handle.
-	(remote_target::thread_info_to_thread_handle): Define.
-
-2019-04-08  Pedro Alves  <palves@redhat.com>
-
-	* common/common-exceptions.c (throw_exception): Don't create
-	named object to throw; throw directly.
-	(throw_it): Likewise.  Don't initialize gdb_exception::message
-	here, with new; pass FMT and AP to the ctor instead.
-	* common/common-exceptions.h: Include <string>.
-	(gdb_exception::gdb_exception(enum return_reason, enum errors,
-	const char *, va_list)): New ctor.  Use std::make_shared.
-	(gdb_exception_error::gdb_exception_error(enum return_reason, enum
-	errors)): Delete.
-	(gdb_exception_error::gdb_exception_error(enum errors, const char
-	*, va_list)): New.
-	(gdb_exception_error::gdb_exception_error(const gdb_exception &)):
-	Add assertion.
-	(gdb_exception_quit::gdb_exception_quit(enum return_reason, enum
-	errors)): Delete.
-	(gdb_exception_quit::gdb_exception_quit(const char *, va_list)): New.
-	(gdb_exception_quit::gdb_exception_quit(const gdb_exception &)):
-	Add assertion.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* valops.c (value_rtti_indirect_type): Replace throw_exception
-	with throw.
-	* tracefile-tfile.c (tfile_target_open): Replace throw_exception
-	with throw.
-	* thread.c (thr_try_catch_cmd): Replace throw_exception with
-	throw.
-	* target.c (target_translate_tls_address): Replace throw_exception
-	with throw.
-	* stack.c (frame_apply_command_count): Replace throw_exception
-	with throw.
-	* solib-spu.c (append_ocl_sos): Replace throw_exception with
-	throw.
-	* s390-tdep.c (s390_frame_unwind_cache): Replace throw_exception
-	with throw.
-	* rs6000-tdep.c (rs6000_frame_cache)
-	(rs6000_epilogue_frame_cache): Replace throw_exception with throw.
-	* remote.c: Replace throw_exception with throw.
-	* record-full.c (record_full_message, record_full_wait_1)
-	(record_full_restore): Replace throw_exception with throw.
-	* record-btrace.c:
-	(get_thread_current_frame_id, record_btrace_start_replaying)
-	(cmd_record_btrace_bts_start, cmd_record_btrace_pt_start)
-	(cmd_record_btrace_start): Replace throw_exception with throw.
-	* parse.c (parse_exp_in_context_1): Replace throw_exception with
-	throw.
-	* linux-nat.c (detach_one_lwp, linux_resume_one_lwp)
-	(resume_stopped_resumed_lwps): Replace throw_exception with throw.
-	* linespec.c:
-	(find_linespec_symbols): Replace throw_exception with throw.
-	* infrun.c (displaced_step_prepare, resume): Replace
-	throw_exception with throw.
-	* infcmd.c (post_create_inferior): Replace throw_exception with
-	throw.
-	* inf-loop.c (inferior_event_handler): Replace throw_exception
-	with throw.
-	* i386-tdep.c (i386_frame_cache, i386_epilogue_frame_cache)
-	(i386_sigtramp_frame_cache): Replace throw_exception with throw.
-	* frame.c (frame_unwind_pc, get_prev_frame_if_no_cycle)
-	(get_prev_frame_always, get_frame_pc_if_available)
-	(get_frame_address_in_block_if_available, get_frame_language):
-	Replace throw_exception with throw.
-	* frame-unwind.c (frame_unwind_try_unwinder): Replace
-	throw_exception with throw.
-	* eval.c (fetch_subexp_value, evaluate_var_value)
-	(evaluate_funcall, evaluate_subexp_standard): Replace
-	throw_exception with throw.
-	* dwarf2loc.c (call_site_find_chain)
-	(dwarf2_evaluate_loc_desc_full, dwarf2_locexpr_baton_eval):
-	Replace throw_exception with throw.
-	* dwarf2-frame.c (dwarf2_frame_cache): Replace throw_exception
-	with throw.
-	* darwin-nat.c (darwin_attach_pid): Replace throw_exception with
-	throw.
-	* cp-abi.c (baseclass_offset): Replace throw_exception with throw.
-	* completer.c (complete_line_internal): Replace throw_exception
-	with throw.
-	* compile/compile-object-run.c (compile_object_run): Replace
-	throw_exception with throw.
-	* cli/cli-script.c (process_next_line): Replace throw_exception
-	with throw.
-	* btrace.c (btrace_compute_ftrace_pt, btrace_compute_ftrace)
-	(btrace_enable, btrace_maint_update_pt_packets): Replace
-	throw_exception with throw.
-	* breakpoint.c (create_breakpoint, save_breakpoints): Replace
-	throw_exception with throw.
-	* break-catch-throw.c (re_set_exception_catchpoint): Replace
-	throw_exception with throw.
-	* amd64-tdep.c (amd64_frame_cache, amd64_sigtramp_frame_cache)
-	(amd64_epilogue_frame_cache): Replace throw_exception with throw.
-	* aarch64-tdep.c (aarch64_make_prologue_cache)
-	(aarch64_make_stub_cache): Replace throw_exception with throw.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* common/common-exceptions.c (throw_exception): Rename from
-	throw_exception_cxx.  Remove old copy.  Make argument const.
-	(throw_it): Create and throw exception objects directly.
-	* common/common-exceptions.h (throw_exception): Make argument
-	const.
-	(struct gdb_exception_error): Add constructor.
-	(struct gdb_exception_quit): Add constructor.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* common/common-exceptions.h (exception_rethrow): Don't declare.
-	(TRY_SJLJ): Update comment.
-	(TRY, CATCH, END_CATCH): Remove.
-	* common/common-exceptions.c (exception_rethrow): Remove.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* common/common-exceptions.h (gdb_exception_RETURN_MASK_ALL):
-	Remove.
-	(gdb_exception_error): Rename from
-	gdb_exception_RETURN_MASK_ERROR.
-	(gdb_exception_quit): Rename from gdb_exception_RETURN_MASK_QUIT.
-	(gdb_quit_bad_alloc): Update.
-	* aarch64-tdep.c: Update.
-	* ada-lang.c: Update.
-	* ada-typeprint.c: Update.
-	* ada-valprint.c: Update.
-	* amd64-tdep.c: Update.
-	* arch-utils.c: Update.
-	* break-catch-throw.c: Update.
-	* breakpoint.c: Update.
-	* btrace.c: Update.
-	* c-varobj.c: Update.
-	* cli/cli-cmds.c: Update.
-	* cli/cli-interp.c: Update.
-	* cli/cli-script.c: Update.
-	* common/common-exceptions.c: Update.
-	* common/new-op.c: Update.
-	* common/selftest.c: Update.
-	* compile/compile-c-symbols.c: Update.
-	* compile/compile-cplus-symbols.c: Update.
-	* compile/compile-object-load.c: Update.
-	* compile/compile-object-run.c: Update.
-	* completer.c: Update.
-	* corelow.c: Update.
-	* cp-abi.c: Update.
-	* cp-support.c: Update.
-	* cp-valprint.c: Update.
-	* darwin-nat.c: Update.
-	* disasm-selftests.c: Update.
-	* dtrace-probe.c: Update.
-	* dwarf-index-cache.c: Update.
-	* dwarf-index-write.c: Update.
-	* dwarf2-frame-tailcall.c: Update.
-	* dwarf2-frame.c: Update.
-	* dwarf2loc.c: Update.
-	* dwarf2read.c: Update.
-	* eval.c: Update.
-	* event-loop.c: Update.
-	* event-top.c: Update.
-	* exec.c: Update.
-	* f-valprint.c: Update.
-	* fbsd-tdep.c: Update.
-	* frame-unwind.c: Update.
-	* frame.c: Update.
-	* gdbtypes.c: Update.
-	* gnu-v3-abi.c: Update.
-	* guile/guile-internal.h: Update.
-	* guile/scm-block.c: Update.
-	* guile/scm-breakpoint.c: Update.
-	* guile/scm-cmd.c: Update.
-	* guile/scm-disasm.c: Update.
-	* guile/scm-frame.c: Update.
-	* guile/scm-lazy-string.c: Update.
-	* guile/scm-math.c: Update.
-	* guile/scm-param.c: Update.
-	* guile/scm-ports.c: Update.
-	* guile/scm-pretty-print.c: Update.
-	* guile/scm-symbol.c: Update.
-	* guile/scm-symtab.c: Update.
-	* guile/scm-type.c: Update.
-	* guile/scm-value.c: Update.
-	* i386-linux-tdep.c: Update.
-	* i386-tdep.c: Update.
-	* inf-loop.c: Update.
-	* infcall.c: Update.
-	* infcmd.c: Update.
-	* infrun.c: Update.
-	* jit.c: Update.
-	* language.c: Update.
-	* linespec.c: Update.
-	* linux-fork.c: Update.
-	* linux-nat.c: Update.
-	* linux-tdep.c: Update.
-	* linux-thread-db.c: Update.
-	* main.c: Update.
-	* mi/mi-cmd-break.c: Update.
-	* mi/mi-cmd-stack.c: Update.
-	* mi/mi-interp.c: Update.
-	* mi/mi-main.c: Update.
-	* objc-lang.c: Update.
-	* p-valprint.c: Update.
-	* parse.c: Update.
-	* ppc-linux-tdep.c: Update.
-	* printcmd.c: Update.
-	* python/py-arch.c: Update.
-	* python/py-breakpoint.c: Update.
-	* python/py-cmd.c: Update.
-	* python/py-finishbreakpoint.c: Update.
-	* python/py-frame.c: Update.
-	* python/py-framefilter.c: Update.
-	* python/py-gdb-readline.c: Update.
-	* python/py-inferior.c: Update.
-	* python/py-infthread.c: Update.
-	* python/py-lazy-string.c: Update.
-	* python/py-linetable.c: Update.
-	* python/py-objfile.c: Update.
-	* python/py-param.c: Update.
-	* python/py-prettyprint.c: Update.
-	* python/py-progspace.c: Update.
-	* python/py-record-btrace.c: Update.
-	* python/py-record.c: Update.
-	* python/py-symbol.c: Update.
-	* python/py-type.c: Update.
-	* python/py-unwind.c: Update.
-	* python/py-utils.c: Update.
-	* python/py-value.c: Update.
-	* python/python.c: Update.
-	* record-btrace.c: Update.
-	* record-full.c: Update.
-	* remote-fileio.c: Update.
-	* remote.c: Update.
-	* riscv-tdep.c: Update.
-	* rs6000-aix-tdep.c: Update.
-	* rs6000-tdep.c: Update.
-	* rust-exp.y: Update.
-	* rust-lang.c: Update.
-	* s390-tdep.c: Update.
-	* selftest-arch.c: Update.
-	* solib-dsbt.c: Update.
-	* solib-frv.c: Update.
-	* solib-spu.c: Update.
-	* solib-svr4.c: Update.
-	* solib.c: Update.
-	* sparc64-linux-tdep.c: Update.
-	* stack.c: Update.
-	* symfile-mem.c: Update.
-	* symmisc.c: Update.
-	* target.c: Update.
-	* thread.c: Update.
-	* top.c: Update.
-	* tracefile-tfile.c: Update.
-	* tui/tui.c: Update.
-	* typeprint.c: Update.
-	* unittests/cli-utils-selftests.c: Update.
-	* unittests/parse-connection-spec-selftests.c: Update.
-	* valops.c: Update.
-	* valprint.c: Update.
-	* value.c: Update.
-	* varobj.c: Update.
-	* windows-nat.c: Update.
-	* x86-linux-nat.c: Update.
-	* xml-support.c: Update.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* xml-support.c: Use C++ exception handling.
-	* x86-linux-nat.c: Use C++ exception handling.
-	* windows-nat.c: Use C++ exception handling.
-	* varobj.c: Use C++ exception handling.
-	* value.c: Use C++ exception handling.
-	* valprint.c: Use C++ exception handling.
-	* valops.c: Use C++ exception handling.
-	* unittests/parse-connection-spec-selftests.c: Use C++ exception
-	handling.
-	* unittests/cli-utils-selftests.c: Use C++ exception handling.
-	* typeprint.c: Use C++ exception handling.
-	* tui/tui.c: Use C++ exception handling.
-	* tracefile-tfile.c: Use C++ exception handling.
-	* top.c: Use C++ exception handling.
-	* thread.c: Use C++ exception handling.
-	* target.c: Use C++ exception handling.
-	* symmisc.c: Use C++ exception handling.
-	* symfile-mem.c: Use C++ exception handling.
-	* stack.c: Use C++ exception handling.
-	* sparc64-linux-tdep.c: Use C++ exception handling.
-	* solib.c: Use C++ exception handling.
-	* solib-svr4.c: Use C++ exception handling.
-	* solib-spu.c: Use C++ exception handling.
-	* solib-frv.c: Use C++ exception handling.
-	* solib-dsbt.c: Use C++ exception handling.
-	* selftest-arch.c: Use C++ exception handling.
-	* s390-tdep.c: Use C++ exception handling.
-	* rust-lang.c: Use C++ exception handling.
-	* rust-exp.y: Use C++ exception handling.
-	* rs6000-tdep.c: Use C++ exception handling.
-	* rs6000-aix-tdep.c: Use C++ exception handling.
-	* riscv-tdep.c: Use C++ exception handling.
-	* remote.c: Use C++ exception handling.
-	* remote-fileio.c: Use C++ exception handling.
-	* record-full.c: Use C++ exception handling.
-	* record-btrace.c: Use C++ exception handling.
-	* python/python.c: Use C++ exception handling.
-	* python/py-value.c: Use C++ exception handling.
-	* python/py-utils.c: Use C++ exception handling.
-	* python/py-unwind.c: Use C++ exception handling.
-	* python/py-type.c: Use C++ exception handling.
-	* python/py-symbol.c: Use C++ exception handling.
-	* python/py-record.c: Use C++ exception handling.
-	* python/py-record-btrace.c: Use C++ exception handling.
-	* python/py-progspace.c: Use C++ exception handling.
-	* python/py-prettyprint.c: Use C++ exception handling.
-	* python/py-param.c: Use C++ exception handling.
-	* python/py-objfile.c: Use C++ exception handling.
-	* python/py-linetable.c: Use C++ exception handling.
-	* python/py-lazy-string.c: Use C++ exception handling.
-	* python/py-infthread.c: Use C++ exception handling.
-	* python/py-inferior.c: Use C++ exception handling.
-	* python/py-gdb-readline.c: Use C++ exception handling.
-	* python/py-framefilter.c: Use C++ exception handling.
-	* python/py-frame.c: Use C++ exception handling.
-	* python/py-finishbreakpoint.c: Use C++ exception handling.
-	* python/py-cmd.c: Use C++ exception handling.
-	* python/py-breakpoint.c: Use C++ exception handling.
-	* python/py-arch.c: Use C++ exception handling.
-	* printcmd.c: Use C++ exception handling.
-	* ppc-linux-tdep.c: Use C++ exception handling.
-	* parse.c: Use C++ exception handling.
-	* p-valprint.c: Use C++ exception handling.
-	* objc-lang.c: Use C++ exception handling.
-	* mi/mi-main.c: Use C++ exception handling.
-	* mi/mi-interp.c: Use C++ exception handling.
-	* mi/mi-cmd-stack.c: Use C++ exception handling.
-	* mi/mi-cmd-break.c: Use C++ exception handling.
-	* main.c: Use C++ exception handling.
-	* linux-thread-db.c: Use C++ exception handling.
-	* linux-tdep.c: Use C++ exception handling.
-	* linux-nat.c: Use C++ exception handling.
-	* linux-fork.c: Use C++ exception handling.
-	* linespec.c: Use C++ exception handling.
-	* language.c: Use C++ exception handling.
-	* jit.c: Use C++ exception handling.
-	* infrun.c: Use C++ exception handling.
-	* infcmd.c: Use C++ exception handling.
-	* infcall.c: Use C++ exception handling.
-	* inf-loop.c: Use C++ exception handling.
-	* i386-tdep.c: Use C++ exception handling.
-	* i386-linux-tdep.c: Use C++ exception handling.
-	* guile/scm-value.c: Use C++ exception handling.
-	* guile/scm-type.c: Use C++ exception handling.
-	* guile/scm-symtab.c: Use C++ exception handling.
-	* guile/scm-symbol.c: Use C++ exception handling.
-	* guile/scm-pretty-print.c: Use C++ exception handling.
-	* guile/scm-ports.c: Use C++ exception handling.
-	* guile/scm-param.c: Use C++ exception handling.
-	* guile/scm-math.c: Use C++ exception handling.
-	* guile/scm-lazy-string.c: Use C++ exception handling.
-	* guile/scm-frame.c: Use C++ exception handling.
-	* guile/scm-disasm.c: Use C++ exception handling.
-	* guile/scm-cmd.c: Use C++ exception handling.
-	* guile/scm-breakpoint.c: Use C++ exception handling.
-	* guile/scm-block.c: Use C++ exception handling.
-	* guile/guile-internal.h: Use C++ exception handling.
-	* gnu-v3-abi.c: Use C++ exception handling.
-	* gdbtypes.c: Use C++ exception handling.
-	* frame.c: Use C++ exception handling.
-	* frame-unwind.c: Use C++ exception handling.
-	* fbsd-tdep.c: Use C++ exception handling.
-	* f-valprint.c: Use C++ exception handling.
-	* exec.c: Use C++ exception handling.
-	* event-top.c: Use C++ exception handling.
-	* event-loop.c: Use C++ exception handling.
-	* eval.c: Use C++ exception handling.
-	* dwarf2read.c: Use C++ exception handling.
-	* dwarf2loc.c: Use C++ exception handling.
-	* dwarf2-frame.c: Use C++ exception handling.
-	* dwarf2-frame-tailcall.c: Use C++ exception handling.
-	* dwarf-index-write.c: Use C++ exception handling.
-	* dwarf-index-cache.c: Use C++ exception handling.
-	* dtrace-probe.c: Use C++ exception handling.
-	* disasm-selftests.c: Use C++ exception handling.
-	* darwin-nat.c: Use C++ exception handling.
-	* cp-valprint.c: Use C++ exception handling.
-	* cp-support.c: Use C++ exception handling.
-	* cp-abi.c: Use C++ exception handling.
-	* corelow.c: Use C++ exception handling.
-	* completer.c: Use C++ exception handling.
-	* compile/compile-object-run.c: Use C++ exception handling.
-	* compile/compile-object-load.c: Use C++ exception handling.
-	* compile/compile-cplus-symbols.c: Use C++ exception handling.
-	* compile/compile-c-symbols.c: Use C++ exception handling.
-	* common/selftest.c: Use C++ exception handling.
-	* common/new-op.c: Use C++ exception handling.
-	* cli/cli-script.c: Use C++ exception handling.
-	* cli/cli-interp.c: Use C++ exception handling.
-	* cli/cli-cmds.c: Use C++ exception handling.
-	* c-varobj.c: Use C++ exception handling.
-	* btrace.c: Use C++ exception handling.
-	* breakpoint.c: Use C++ exception handling.
-	* break-catch-throw.c: Use C++ exception handling.
-	* arch-utils.c: Use C++ exception handling.
-	* amd64-tdep.c: Use C++ exception handling.
-	* ada-valprint.c: Use C++ exception handling.
-	* ada-typeprint.c: Use C++ exception handling.
-	* ada-lang.c: Use C++ exception handling.
-	* aarch64-tdep.c: Use C++ exception handling.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* xml-support.c (gdb_xml_parser::parse): Update.
-	* x86-linux-nat.c (x86_linux_nat_target::enable_btrace): Update.
-	* value.c (show_convenience): Update.
-	* unittests/cli-utils-selftests.c (test_number_or_range_parser)
-	(test_parse_flags_qcs): Update.
-	* thread.c (thr_try_catch_cmd): Update.
-	* target.c (target_translate_tls_address): Update.
-	* stack.c (print_frame_arg, read_frame_local, read_frame_arg)
-	(info_frame_command_core, frame_apply_command_count): Update.
-	* rust-exp.y (rust_lex_exception_test): Update.
-	* riscv-tdep.c (riscv_print_one_register_info): Update.
-	* remote.c (remote_target::enable_btrace): Update.
-	* record-btrace.c (record_btrace_enable_warn): Update.
-	* python/py-utils.c (gdbpy_convert_exception): Update.
-	* printcmd.c (do_one_display, print_variable_and_value): Update.
-	* mi/mi-main.c (mi_print_exception): Update.
-	* mi/mi-interp.c (mi_cmd_interpreter_exec): Use SCOPE_EXIT.
-	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
-	* linux-nat.c (linux_nat_target::attach): Update.
-	* linux-fork.c (class scoped_switch_fork_info): Update.
-	* infrun.c (displaced_step_prepare): Update.
-	* infcall.c (call_function_by_hand_dummy): Update.
-	* guile/scm-exception.c (gdbscm_scm_from_gdb_exception): Update.
-	* gnu-v3-abi.c (print_one_vtable): Update.
-	* frame.c (get_prev_frame_always): Update.
-	* f-valprint.c (info_common_command_for_block): Update.
-	* exec.c (try_open_exec_file): Update.
-	* exceptions.c (print_exception, exception_print)
-	(exception_fprintf, exception_print_same): Update.
-	* dwarf2-frame.c (dwarf2_build_frame_info): Update.
-	* dwarf-index-cache.c (index_cache::store)
-	(index_cache::lookup_gdb_index): Update.
-	* darwin-nat.c (maybe_cache_shell): Update.
-	* cp-valprint.c (cp_print_value_fields): Update.
-	* compile/compile-cplus-symbols.c (gcc_cplus_convert_symbol)
-	(gcc_cplus_symbol_address): Update.
-	* compile/compile-c-symbols.c (gcc_convert_symbol)
-	(gcc_symbol_address, generate_c_for_for_one_variable): Update.
-	* common/selftest.c: Update.
-	* common/common-exceptions.h (struct gdb_exception) <message>: Now
-	a std::string.
-	(exception_try_scope_entry, exception_try_scope_exit): Don't
-	declare.
-	(struct exception_try_scope): Remove.
-	(TRY): Don't use exception_try_scope.
-	(struct gdb_exception): Add constructor, operator=.
-	<what>: New method.
-	(struct gdb_exception_RETURN_MASK_ALL)
-	(struct gdb_exception_RETURN_MASK_ERROR)
-	(struct gdb_exception_RETURN_MASK_QUIT): Add constructor.
-	(struct gdb_quit_bad_alloc): Update.
-	* common/common-exceptions.c (exception_none): Change
-	initializer.
-	(struct catcher) <state, exception>: Initialize inline.
-	<prev>: Remove member.
-	(current_catcher): Remove.
-	(catchers): New global.
-	(exceptions_state_mc_init): Simplify.
-	(catcher_pop): Remove.
-	(exceptions_state_mc, exceptions_state_mc_catch): Update.
-	(try_scope_depth, exception_try_scope_entry)
-	(exception_try_scope_exit): Remove.
-	(throw_exception_sjlj): Update.
-	(exception_messages, exception_messages_size): Remove.
-	(throw_it): Simplify.
-	(gdb_exception_sliced_copy): Remove.
-	(throw_exception_cxx): Update.
-	* cli/cli-script.c (script_from_file): Update.
-	* breakpoint.c (insert_bp_location, update_breakpoint_locations):
-	Update.
-	* ada-valprint.c (ada_val_print): Update.
-	* ada-lang.c (ada_to_fixed_type_1, ada_exception_name_addr)
-	(create_excep_cond_exprs): Update.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* common/common-exceptions.h (GDB_XCPT_SJMP, GDB_XCPT_TRY)
-	(GDB_XCPT_RAW_TRY, GDB_XCPT): Remove.
-	(TRY, CATCH, END_CATCH): Remove some definitions.
-	* common/common-exceptions.c: Don't use GDB_XCPT.
-	(catcher_list_size): Remove.
-	(throw_exception, throw_it): Simplify.
-
-2019-04-05  Tom Tromey  <tom@tromey.com>
-
-	Revert the header-sorting patch.
-	* ft32-tdep.c: Revert.
-	* frv-tdep.c: Revert.
-	* frv-linux-tdep.c: Revert.
-	* frame.c: Revert.
-	* frame-unwind.c: Revert.
-	* frame-base.c: Revert.
-	* fork-child.c: Revert.
-	* findvar.c: Revert.
-	* findcmd.c: Revert.
-	* filesystem.c: Revert.
-	* filename-seen-cache.h: Revert.
-	* filename-seen-cache.c: Revert.
-	* fbsd-tdep.c: Revert.
-	* fbsd-nat.h: Revert.
-	* fbsd-nat.c: Revert.
-	* f-valprint.c: Revert.
-	* f-typeprint.c: Revert.
-	* f-lang.c: Revert.
-	* extension.h: Revert.
-	* extension.c: Revert.
-	* extension-priv.h: Revert.
-	* expprint.c: Revert.
-	* exec.h: Revert.
-	* exec.c: Revert.
-	* exceptions.c: Revert.
-	* event-top.c: Revert.
-	* event-loop.c: Revert.
-	* eval.c: Revert.
-	* elfread.c: Revert.
-	* dwarf2read.h: Revert.
-	* dwarf2read.c: Revert.
-	* dwarf2loc.c: Revert.
-	* dwarf2expr.h: Revert.
-	* dwarf2expr.c: Revert.
-	* dwarf2-frame.c: Revert.
-	* dwarf2-frame-tailcall.c: Revert.
-	* dwarf-index-write.h: Revert.
-	* dwarf-index-write.c: Revert.
-	* dwarf-index-common.c: Revert.
-	* dwarf-index-cache.h: Revert.
-	* dwarf-index-cache.c: Revert.
-	* dummy-frame.c: Revert.
-	* dtrace-probe.c: Revert.
-	* disasm.h: Revert.
-	* disasm.c: Revert.
-	* disasm-selftests.c: Revert.
-	* dictionary.c: Revert.
-	* dicos-tdep.c: Revert.
-	* demangle.c: Revert.
-	* dcache.h: Revert.
-	* dcache.c: Revert.
-	* darwin-nat.h: Revert.
-	* darwin-nat.c: Revert.
-	* darwin-nat-info.c: Revert.
-	* d-valprint.c: Revert.
-	* d-namespace.c: Revert.
-	* d-lang.c: Revert.
-	* ctf.c: Revert.
-	* csky-tdep.c: Revert.
-	* csky-linux-tdep.c: Revert.
-	* cris-tdep.c: Revert.
-	* cris-linux-tdep.c: Revert.
-	* cp-valprint.c: Revert.
-	* cp-support.c: Revert.
-	* cp-namespace.c: Revert.
-	* cp-abi.c: Revert.
-	* corelow.c: Revert.
-	* corefile.c: Revert.
-	* continuations.c: Revert.
-	* completer.h: Revert.
-	* completer.c: Revert.
-	* complaints.c: Revert.
-	* coffread.c: Revert.
-	* coff-pe-read.c: Revert.
-	* cli-out.h: Revert.
-	* cli-out.c: Revert.
-	* charset.c: Revert.
-	* c-varobj.c: Revert.
-	* c-valprint.c: Revert.
-	* c-typeprint.c: Revert.
-	* c-lang.c: Revert.
-	* buildsym.c: Revert.
-	* buildsym-legacy.c: Revert.
-	* build-id.h: Revert.
-	* build-id.c: Revert.
-	* btrace.c: Revert.
-	* bsd-uthread.c: Revert.
-	* breakpoint.h: Revert.
-	* breakpoint.c: Revert.
-	* break-catch-throw.c: Revert.
-	* break-catch-syscall.c: Revert.
-	* break-catch-sig.c: Revert.
-	* blockframe.c: Revert.
-	* block.c: Revert.
-	* bfin-tdep.c: Revert.
-	* bfin-linux-tdep.c: Revert.
-	* bfd-target.c: Revert.
-	* bcache.c: Revert.
-	* ax-general.c: Revert.
-	* ax-gdb.h: Revert.
-	* ax-gdb.c: Revert.
-	* avr-tdep.c: Revert.
-	* auxv.c: Revert.
-	* auto-load.c: Revert.
-	* arm-wince-tdep.c: Revert.
-	* arm-tdep.c: Revert.
-	* arm-symbian-tdep.c: Revert.
-	* arm-pikeos-tdep.c: Revert.
-	* arm-obsd-tdep.c: Revert.
-	* arm-nbsd-tdep.c: Revert.
-	* arm-nbsd-nat.c: Revert.
-	* arm-linux-tdep.c: Revert.
-	* arm-linux-nat.c: Revert.
-	* arm-fbsd-tdep.c: Revert.
-	* arm-fbsd-nat.c: Revert.
-	* arm-bsd-tdep.c: Revert.
-	* arch-utils.c: Revert.
-	* arc-tdep.c: Revert.
-	* arc-newlib-tdep.c: Revert.
-	* annotate.h: Revert.
-	* annotate.c: Revert.
-	* amd64-windows-tdep.c: Revert.
-	* amd64-windows-nat.c: Revert.
-	* amd64-tdep.c: Revert.
-	* amd64-sol2-tdep.c: Revert.
-	* amd64-obsd-tdep.c: Revert.
-	* amd64-obsd-nat.c: Revert.
-	* amd64-nbsd-tdep.c: Revert.
-	* amd64-nbsd-nat.c: Revert.
-	* amd64-nat.c: Revert.
-	* amd64-linux-tdep.c: Revert.
-	* amd64-linux-nat.c: Revert.
-	* amd64-fbsd-tdep.c: Revert.
-	* amd64-fbsd-nat.c: Revert.
-	* amd64-dicos-tdep.c: Revert.
-	* amd64-darwin-tdep.c: Revert.
-	* amd64-bsd-nat.c: Revert.
-	* alpha-tdep.c: Revert.
-	* alpha-obsd-tdep.c: Revert.
-	* alpha-nbsd-tdep.c: Revert.
-	* alpha-mdebug-tdep.c: Revert.
-	* alpha-linux-tdep.c: Revert.
-	* alpha-linux-nat.c: Revert.
-	* alpha-bsd-tdep.c: Revert.
-	* alpha-bsd-nat.c: Revert.
-	* aix-thread.c: Revert.
-	* agent.c: Revert.
-	* addrmap.c: Revert.
-	* ada-varobj.c: Revert.
-	* ada-valprint.c: Revert.
-	* ada-typeprint.c: Revert.
-	* ada-tasks.c: Revert.
-	* ada-lang.c: Revert.
-	* aarch64-tdep.c: Revert.
-	* aarch64-ravenscar-thread.c: Revert.
-	* aarch64-newlib-tdep.c: Revert.
-	* aarch64-linux-tdep.c: Revert.
-	* aarch64-linux-nat.c: Revert.
-	* aarch64-fbsd-tdep.c: Revert.
-	* aarch64-fbsd-nat.c: Revert.
-	* aarch32-linux-nat.c: Revert.
-
-2019-04-05  Tom Tromey  <tom@tromey.com>
-
-	* ft32-tdep.c: Sort headers.
-	* frv-tdep.c: Sort headers.
-	* frv-linux-tdep.c: Sort headers.
-	* frame.c: Sort headers.
-	* frame-unwind.c: Sort headers.
-	* frame-base.c: Sort headers.
-	* fork-child.c: Sort headers.
-	* findvar.c: Sort headers.
-	* findcmd.c: Sort headers.
-	* filesystem.c: Sort headers.
-	* filename-seen-cache.h: Sort headers.
-	* filename-seen-cache.c: Sort headers.
-	* fbsd-tdep.c: Sort headers.
-	* fbsd-nat.h: Sort headers.
-	* fbsd-nat.c: Sort headers.
-	* f-valprint.c: Sort headers.
-	* f-typeprint.c: Sort headers.
-	* f-lang.c: Sort headers.
-	* extension.h: Sort headers.
-	* extension.c: Sort headers.
-	* extension-priv.h: Sort headers.
-	* expprint.c: Sort headers.
-	* exec.h: Sort headers.
-	* exec.c: Sort headers.
-	* exceptions.c: Sort headers.
-	* event-top.c: Sort headers.
-	* event-loop.c: Sort headers.
-	* eval.c: Sort headers.
-	* elfread.c: Sort headers.
-	* dwarf2read.h: Sort headers.
-	* dwarf2read.c: Sort headers.
-	* dwarf2loc.c: Sort headers.
-	* dwarf2expr.h: Sort headers.
-	* dwarf2expr.c: Sort headers.
-	* dwarf2-frame.c: Sort headers.
-	* dwarf2-frame-tailcall.c: Sort headers.
-	* dwarf-index-write.h: Sort headers.
-	* dwarf-index-write.c: Sort headers.
-	* dwarf-index-common.c: Sort headers.
-	* dwarf-index-cache.h: Sort headers.
-	* dwarf-index-cache.c: Sort headers.
-	* dummy-frame.c: Sort headers.
-	* dtrace-probe.c: Sort headers.
-	* disasm.h: Sort headers.
-	* disasm.c: Sort headers.
-	* disasm-selftests.c: Sort headers.
-	* dictionary.c: Sort headers.
-	* dicos-tdep.c: Sort headers.
-	* demangle.c: Sort headers.
-	* dcache.h: Sort headers.
-	* dcache.c: Sort headers.
-	* darwin-nat.h: Sort headers.
-	* darwin-nat.c: Sort headers.
-	* darwin-nat-info.c: Sort headers.
-	* d-valprint.c: Sort headers.
-	* d-namespace.c: Sort headers.
-	* d-lang.c: Sort headers.
-	* ctf.c: Sort headers.
-	* csky-tdep.c: Sort headers.
-	* csky-linux-tdep.c: Sort headers.
-	* cris-tdep.c: Sort headers.
-	* cris-linux-tdep.c: Sort headers.
-	* cp-valprint.c: Sort headers.
-	* cp-support.c: Sort headers.
-	* cp-namespace.c: Sort headers.
-	* cp-abi.c: Sort headers.
-	* corelow.c: Sort headers.
-	* corefile.c: Sort headers.
-	* continuations.c: Sort headers.
-	* completer.h: Sort headers.
-	* completer.c: Sort headers.
-	* complaints.c: Sort headers.
-	* coffread.c: Sort headers.
-	* coff-pe-read.c: Sort headers.
-	* cli-out.h: Sort headers.
-	* cli-out.c: Sort headers.
-	* charset.c: Sort headers.
-	* c-varobj.c: Sort headers.
-	* c-valprint.c: Sort headers.
-	* c-typeprint.c: Sort headers.
-	* c-lang.c: Sort headers.
-	* buildsym.c: Sort headers.
-	* buildsym-legacy.c: Sort headers.
-	* build-id.h: Sort headers.
-	* build-id.c: Sort headers.
-	* btrace.c: Sort headers.
-	* bsd-uthread.c: Sort headers.
-	* breakpoint.h: Sort headers.
-	* breakpoint.c: Sort headers.
-	* break-catch-throw.c: Sort headers.
-	* break-catch-syscall.c: Sort headers.
-	* break-catch-sig.c: Sort headers.
-	* blockframe.c: Sort headers.
-	* block.c: Sort headers.
-	* bfin-tdep.c: Sort headers.
-	* bfin-linux-tdep.c: Sort headers.
-	* bfd-target.c: Sort headers.
-	* bcache.c: Sort headers.
-	* ax-general.c: Sort headers.
-	* ax-gdb.h: Sort headers.
-	* ax-gdb.c: Sort headers.
-	* avr-tdep.c: Sort headers.
-	* auxv.c: Sort headers.
-	* auto-load.c: Sort headers.
-	* arm-wince-tdep.c: Sort headers.
-	* arm-tdep.c: Sort headers.
-	* arm-symbian-tdep.c: Sort headers.
-	* arm-pikeos-tdep.c: Sort headers.
-	* arm-obsd-tdep.c: Sort headers.
-	* arm-nbsd-tdep.c: Sort headers.
-	* arm-nbsd-nat.c: Sort headers.
-	* arm-linux-tdep.c: Sort headers.
-	* arm-linux-nat.c: Sort headers.
-	* arm-fbsd-tdep.c: Sort headers.
-	* arm-fbsd-nat.c: Sort headers.
-	* arm-bsd-tdep.c: Sort headers.
-	* arch-utils.c: Sort headers.
-	* arc-tdep.c: Sort headers.
-	* arc-newlib-tdep.c: Sort headers.
-	* annotate.h: Sort headers.
-	* annotate.c: Sort headers.
-	* amd64-windows-tdep.c: Sort headers.
-	* amd64-windows-nat.c: Sort headers.
-	* amd64-tdep.c: Sort headers.
-	* amd64-sol2-tdep.c: Sort headers.
-	* amd64-obsd-tdep.c: Sort headers.
-	* amd64-obsd-nat.c: Sort headers.
-	* amd64-nbsd-tdep.c: Sort headers.
-	* amd64-nbsd-nat.c: Sort headers.
-	* amd64-nat.c: Sort headers.
-	* amd64-linux-tdep.c: Sort headers.
-	* amd64-linux-nat.c: Sort headers.
-	* amd64-fbsd-tdep.c: Sort headers.
-	* amd64-fbsd-nat.c: Sort headers.
-	* amd64-dicos-tdep.c: Sort headers.
-	* amd64-darwin-tdep.c: Sort headers.
-	* amd64-bsd-nat.c: Sort headers.
-	* alpha-tdep.c: Sort headers.
-	* alpha-obsd-tdep.c: Sort headers.
-	* alpha-nbsd-tdep.c: Sort headers.
-	* alpha-mdebug-tdep.c: Sort headers.
-	* alpha-linux-tdep.c: Sort headers.
-	* alpha-linux-nat.c: Sort headers.
-	* alpha-bsd-tdep.c: Sort headers.
-	* alpha-bsd-nat.c: Sort headers.
-	* aix-thread.c: Sort headers.
-	* agent.c: Sort headers.
-	* addrmap.c: Sort headers.
-	* ada-varobj.c: Sort headers.
-	* ada-valprint.c: Sort headers.
-	* ada-typeprint.c: Sort headers.
-	* ada-tasks.c: Sort headers.
-	* ada-lang.c: Sort headers.
-	* aarch64-tdep.c: Sort headers.
-	* aarch64-ravenscar-thread.c: Sort headers.
-	* aarch64-newlib-tdep.c: Sort headers.
-	* aarch64-linux-tdep.c: Sort headers.
-	* aarch64-linux-nat.c: Sort headers.
-	* aarch64-fbsd-tdep.c: Sort headers.
-	* aarch64-fbsd-nat.c: Sort headers.
-	* aarch32-linux-nat.c: Sort headers.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* varobj.c (varobj_create): Update.
-	* rust-exp.y (struct rust_parser) <update_innermost_block,
-	lookup_symbol>: New methods.
-	(rust_parser::update_innermost_block, rust_parser::lookup_symbol):
-	Rename.
-	(rust_parser::rust_lookup_type)
-	(rust_parser::convert_ast_to_expression, rust_lex_tests): Update.
-	* printcmd.c (display_command, do_one_display): Update.
-	* parser-defs.h (struct parser_state) <parser_state>: Add
-	"tracker" parameter.
-	(block_tracker): New member.
-	(class innermost_block_tracker) <innermost_block_tracker>: Add
-	"types" parameter.
-	<reset>: Remove method.
-	(innermost_block): Don't declare.
-	(null_post_parser): Update.
-	* parse.c (innermost_block): Remove global.
-	(write_dollar_variable): Update.
-	(parse_exp_1, parse_exp_in_context): Add "tracker" parameter.
-	Remove "tracker_types" parameter.
-	(parse_expression): Add "tracker" parameter.
-	(parse_expression_for_completion): Update.
-	(null_post_parser): Add "tracker" parameter.
-	* p-exp.y: Update rules.
-	* m2-exp.y: Update rules.
-	* language.h (struct language_defn) <la_post_parser>: Add
-	"tracker" parameter.
-	* go-exp.y: Update rules.
-	* f-exp.y: Update rules.
-	* expression.h (parse_expression, parse_exp_1): Add "tracker"
-	parameter.
-	* d-exp.y: Update rules.
-	* c-exp.y: Update rules.
-	* breakpoint.c (set_breakpoint_condition): Create an
-	innermost_block_tracker.
-	(watch_command_1): Likewise.
-	* ada-lang.c (resolve): Add "tracker" parameter.
-	(resolve_subexp): Likewise.
-	* ada-exp.y (write_var_from_sym): Update.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* type-stack.h: New file.
-	* type-stack.c: New file.
-	* parser-defs.h (enum type_pieces, union type_stack_elt): Move to
-	type-stack.h.
-	(insert_into_type_stack, insert_type, push_type, push_type_int)
-	(insert_type_address_space, pop_type, pop_type_int)
-	(pop_typelist, pop_type_stack, append_type_stack)
-	(push_type_stack, get_type_stack, push_typelist)
-	(follow_type_instance_flags, follow_types): Don't declare.
-	* parse.c (type_stack): Remove global.
-	(parse_exp_in_context): Update.
-	(insert_into_type_stack, insert_type, push_type, push_type_int)
-	(insert_type_address_space, pop_type, pop_type_int)
-	(pop_typelist, pop_type_stack, append_type_stack)
-	(push_type_stack, get_type_stack, push_typelist)
-	(follow_type_instance_flags, follow_types): Remove (moved to
-	type-stack.c).
-	* f-exp.y (type_stack): New global.
-	Update rules.
-	(push_kind_type, f_parse): Update.
-	* d-exp.y (type_stack): New global.
-	Update rules.
-	(d_parse): Update.
-	* c-exp.y (struct c_parse_state) <type_stack>: New member.
-	Update rules.
-	* Makefile.in (COMMON_SFILES): Add type-stack.c.
-	(HFILES_NO_SRCDIR): Add type-stack.h.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* rust-exp.y (rust_parser::lex_identifier, rustyylex)
-	(rust_parser::convert_ast_to_expression, rust_parse)
-	(rust_lex_test_completion, rust_lex_tests): Update.
-	* parser-defs.h (struct expr_completion_state): New.
-	(struct parser_state) <parser_state>: Add completion parameter.
-	<mark_struct_expression, mark_completion_tag>: New methods.
-	<parse_completion, m_completion_state>: New members.
-	(prefixify_expression, null_post_parser): Update.
-	(mark_struct_expression, mark_completion_tag): Don't declare.
-	* parse.c (parse_completion, expout_last_struct)
-	(expout_tag_completion_type, expout_completion_name): Remove
-	globals.
-	(parser_state::mark_struct_expression)
-	(parser_state::mark_completion_tag): Now methods.
-	(prefixify_expression): Add last_struct parameter.
-	(prefixify_subexp): Likewise.
-	(parse_exp_1): Update.
-	(parse_exp_in_context): Add cstate parameter.  Update.
-	(parse_expression_for_completion): Create an
-	expr_completion_state.
-	(null_post_parser): Add "completion" parameter.
-	* p-exp.y: Update rules.
-	(yylex): Update.
-	* language.h (struct language_defn) <la_post_parser>: Add
-	"completing" parameter.
-	* go-exp.y: Update rules.
-	(lex_one_token): Update.
-	* expression.h (parse_completion): Don't declare.
-	* d-exp.y: Update rules.
-	(lex_one_token): Update rules.
-	* c-exp.y: Update rules.
-	(lex_one_token): Update.
-	* ada-lang.c (resolve): Add "parse_completion" parameter.
-	(resolve_subexp): Likewise.
-	(ada_resolve_function): Likewise.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* parser-defs.h (struct parser_state) <start_arglist,
-	end_arglist>: New methods.
-	<arglist_len, m_funcall_chain>: New members.
-	(arglist_len, start_arglist, end_arglist): Don't declare.
-	* parse.c (arglist_len, funcall_chain): Remove global.
-	(start_arglist, end_arglist): Remove functions.
-	(parse_exp_in_context): Update.
-	* p-exp.y: Update rules.
-	* m2-exp.y: Update rules.
-	* go-exp.y: Update rules.
-	* f-exp.y: Update rules.
-	* d-exp.y: Update rules.
-	* c-exp.y: Update rules.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* rust-exp.y (struct rust_parser) <lex_hex, lex_escape,
-	lex_operator, push_back>: New methods.
-	Update all rules.
-	(rust_parser::lex_hex, lex_escape): Rename and update.
-	(rust_parser::lex_string, rust_parser::lex_identifier): Update.
-	(rust_parser::lex_operator): Rename and update.
-	(rust_parser::lex_number, rustyylex, rustyyerror)
-	(rust_lex_test_init, rust_lex_test_sequence)
-	(rust_lex_test_push_back, rust_lex_tests): Update.
-	* parser-defs.h (struct parser_state) <parser_state>: Add "input"
-	parameter.
-	<lexptr, prev_lexptr>: New members.
-	(lexptr, prev_lexptr): Don't declare.
-	* parse.c (lexptr, prev_lexptr): Remove globals.
-	(parse_exp_in_context): Update.
-	* p-exp.y (yylex, yyerror): Update.
-	* m2-exp.y (parse_number, yylex, yyerror): Update.
-	* go-exp.y (lex_one_token, yyerror): Update.
-	* f-exp.y (match_string_literal, yylex, yyerror): Update.
-	* d-exp.y (lex_one_token, yyerror): Update.
-	* c-exp.y (scan_macro_expansion, finished_macro_expansion)
-	(lex_one_token, yyerror): Update.
-	* ada-lex.l (YY_INPUT): Update.
-	(rewind_to_char): Update.
-	* ada-exp.y (yyerror): Update.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* rust-exp.y (rustyylex, rust_lex_tests): Update.
-	* parser-defs.h (struct parser_state) <parser_state>: Add new
-	parameter.
-	<comma_terminates>: New member.
-	(comma_terminates): Don't declare global.
-	* parse.c (comma_terminates): Remove global.
-	(parse_exp_in_context): Update.
-	* p-exp.y (yylex): Update.
-	* m2-exp.y (yylex): Update.
-	* go-exp.y (lex_one_token): Update.
-	* f-exp.y (yylex): Update.
-	* d-exp.y (lex_one_token): Update.
-	* c-exp.y (lex_one_token): Update.
-	* ada-lex.l: Update.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* rust-exp.y (struct rust_parser) <paren_depth>: New member.
-	(rustyylex, rust_lex_test_init, rust_lex_test_one)
-	(rust_lex_test_sequence, rust_lex_test_push_back): Update.
-	* parser-defs.h (paren_depth): Don't declare.
-	* parse.c (paren_depth): Remove global.
-	(parse_exp_in_context): Update.
-	* p-exp.y (paren_depth): New global.
-	(pascal_parse): Initialize it.
-	* m2-exp.y (paren_depth): New global.
-	(m2_parse): Initialize it.
-	* go-exp.y (paren_depth): New global.
-	(go_parse): Initialize it.
-	* f-exp.y (paren_depth): New global.
-	(f_parse): Initialize it.
-	* d-exp.y (paren_depth): New global.
-	(d_parse): Initialize it.
-	* c-exp.y (paren_depth): New global.
-	(c_parse): Initialize it.
-	* ada-lex.l (paren_depth): New global.
-	(lexer_init): Initialize it.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* rust-exp.y (rust_parser::crate_name, rust_parser::super_name)
-	(rust_parser::convert_ast_to_type)
-	(rust_parser::convert_ast_to_expression, rust_lex_tests): Update.
-	* parser-defs.h (struct parser_state) <parser_state>: Add
-	parameters.  Initialize new members.
-	<expression_context_block, expression_context_pc>: New members.
-	* parse.c (expression_context_block, expression_context_pc):
-	Remove globals.
-	(parse_exp_in_context): Update.
-	* p-exp.y: Update all rules.
-	(yylex): Update.
-	* m2-exp.y: Update all rules.
-	(yylex): Update.
-	* go-exp.y (yylex): Update.
-	* f-exp.y (yylex): Update.
-	* d-exp.y: Update all rules.
-	(yylex): Update.
-	* c-exp.y: Update all rules.
-	(lex_one_token, classify_name, yylex, c_parse): Update.
-	* ada-exp.y (write_var_or_type, write_name_assoc): Update.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* gdbarch.h, gdbarch.c: Rebuild.
-	* gdbarch.sh (dtrace_parse_probe_argument): Change type.
-	* stap-probe.h: 
-	(struct stap_parse_info): Replace "parser_state" with
-	"expr_builder".
-	* parser-defs.h (struct expr_builder): Rename from "parser_state".
-	(parser_state): New class.
-	* parse.c (expr_builder): Rename.
-	(expr_builder::release): Rename.
-	(write_exp_elt, write_exp_elt_opcode, write_exp_elt_sym)
-	(write_exp_elt_msym, write_exp_elt_block, write_exp_elt_objfile)
-	(write_exp_elt_longcst, write_exp_elt_floatcst)
-	(write_exp_elt_type, write_exp_elt_intern, write_exp_string)
-	(write_exp_string_vector, write_exp_bitstring)
-	(write_exp_msymbol, mark_struct_expression)
-	(write_dollar_variable)
-	(insert_type_address_space, increase_expout_size): Replace
-	"parser_state" with "expr_builder".
-	* dtrace-probe.c: Replace "parser_state" with "expr_builder".
-	* amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Replace
-	"parser_state" with "expr_builder".
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* rust-exp.y: Replace "parse_language" with method call.
-	* p-exp.y: 
-	(yylex): Replace "parse_language" with method call.
-	* m2-exp.y: 
-	(yylex): Replace "parse_language" with method call.
-	* go-exp.y (classify_name): Replace "parse_language" with method
-	call.
-	* f-exp.y (yylex): Replace "parse_language" with method call.
-	* d-exp.y (lex_one_token): Replace "parse_language" with method
-	call.
-	* c-exp.y: 
-	(lex_one_token, classify_name, yylex): Replace "parse_language"
-	with method call.
-	* ada-exp.y (find_primitive_type, type_char)
-	(type_system_address): Replace "parse_language" with method call.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* rust-exp.y: Replace "parse_gdbarch" with method call.
-	* parse.c (write_dollar_variable, insert_type_address_space):
-	Replace "parse_gdbarch" with method call.
-	* p-exp.y (parse_type, yylex): Replace "parse_gdbarch" with method
-	call.
-	* objc-lang.c (end_msglist): Replace "parse_gdbarch" with method
-	call.
-	* m2-exp.y (parse_type, parse_m2_type, yylex): Replace
-	"parse_gdbarch" with method call.
-	* go-exp.y (parse_type, classify_name): Replace "parse_gdbarch"
-	with method call.
-	* f-exp.y (parse_type, parse_f_type, yylex): Replace
-	"parse_gdbarch" with method call.
-	* d-exp.y (parse_type, parse_d_type, lex_one_token): Replace
-	"parse_gdbarch" with method call.
-	* c-exp.y (parse_type, parse_number, classify_name): Replace
-	"parse_gdbarch" with method call.
-	* ada-lex.l: Replace "parse_gdbarch" with method call.
-	* ada-exp.y (parse_type, find_primitive_type, type_char)
-	(type_system_address): Replace "parse_gdbarch" with method call.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* dtrace-probe.c (dtrace_probe::build_arg_exprs): Update.
-	* stap-probe.c (stap_parse_argument): Update.
-	* stap-probe.h (struct stap_parse_info) <stap_parse_info>: Remove
-	initial_size parameter.
-	* rust-exp.y (rust_lex_tests): Update.
-	* parse.c (parser_state): Update.
-	(parse_exp_in_context): Update.
-	* parser-defs.h (struct parser_state) <parser_state>: Remove
-	"initial_size" parameter.
-
-2019-04-04  Tom Tromey  <tom@tromey.com>
-
-	* parser-defs.h (increase_expout_size): Don't declare.
-	* parse.c (increase_expout_size): Now static.
-
-2019-04-04  Thomas Schwinge  <thomas@codesourcery.com>
-
-	* gnu-nat.c (gnu_nat_target::wait): Fix
-	target_waitstatus_to_string call.
-
-2019-04-01  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* eval.c (evaluate_subexp_standard): Handle internal functions
-	during Fortran function call handling.
-
-2019-04-01  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* NEWS: Mention new internal functions.
-	* dwarf2read.c (dwarf2_init_complex_target_type): New function.
-	(read_base_type): Use dwarf2_init_complex_target_type.
-	* value.c (creal_internal_fn): New function.
-	(cimag_internal_fn): New function.
-	(_initialize_values): Register new internal functions.
-
-2019-04-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* infrun.c (stop_all_threads): If debug_infrun, always
-	trace the wait status after wait_one, using
-	target_waitstatus_to_string and target_pid_to_str.
-	(handle_inferior_event): Replace various trace of
-	wait status kind by a single trace.
-	* gdb/gnu-nat.c (gnu_nat_target::wait): Replace local
-	wait status kind image by target_waitstatus_to_string.
-	* target/waitstatus.c (target_waitstatus_to_string): Fix
-	obsolete comment.
-
-2019-04-01  Tom Tromey  <tromey@adacore.com>
-
-	PR symtab/23331:
-	* dwarf2read.c (partial_die_info::read): Handle DW_AT_ranges.
-
-2019-04-01  Sergio Durigan Junior  <sergiodj@redhat.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* top.c (quit_force): Call 'finalize_values'.
-	* value.c (finalize_values): New function.
-	* value.h (finalize_values): Declare.
-
-2019-03-30  Eli Zaretskii  <eliz@gnu.org>
-
-	* NEWS: Announce $_gdb_major and $_gdb_minor.
-
-	* top.c (init_gdb_version_vars): New function.
-	(gdb_init): Call init_gdb_version_vars.
-
-2019-03-29  Tom Tromey  <tromey@adacore.com>
-
-	* printcmd.c (_initialize_printcmd): Add usage lines.  Update some
-	help text.  Remove dead code.
-
-2019-03-29  Keith Seitz  <keiths@redhat.com>
-
-	From Siddhesh Poyarekar:
-	* f-lang.h (f77_get_upperbound): Return LONGEST.
-	(f77_get_lowerbound): Likewise.
-	* f-typeprint.c (f_type_print_varspec_suffix): Expand
-	UPPER_BOUND and LOWER_BOUND to LONGEST.  Use plongest to format
-	print them.
-	(f_type_print_base): Expand UPPER_BOUND to LONGEST.  Use
-	plongest to format print it.
-	* f-valprint.c (f77_get_lowerbound): Return LONGEST.
-	(f77_get_upperbound): Likewise.
-	(f77_get_dynamic_length_of_aggregate): Expand UPPER_BOUND,
-	LOWER_BOUND to LONGEST.
-	(f77_create_arrayprint_offset_tbl): Likewise.
-
-2019-03-29  Keith Seitz  <keiths@redhat.com>
-
-	* ada-lang.c (ada_template_to_fixed_record_type_1): Use
-	%s/pulongest for TYPE_LENGTH instead of %d in format
-	strings.
-	* ada-typerint.c (ada_print_type): Likewise.
-	* amd64-windows-tdep.c (amd64_windows_store_arg_in_reg): Likewise.
-	* compile/compile-c-support.c (generate_register_struct): Likewise.
-	* gdbtypes.c (recursive_dump_type): Likewise.
-	* gdbtypes.h (struct type) <length>: Change type to ULONGEST.
-	* m2-typeprint.c (m2_array):  Use %s/pulongest for TYPE_LENGTH
-	instead of %d in format strings.
-	* riscv-tdep.c (riscv_type_alignment): Cast second argument
-	to std::min to ULONGEST.
-	* symmisc.c (print_symbol): Use %s/pulongest for TYPE_LENGTH
-	instead of %d in format strings.
-	* tracepoint.c (info_scope_command): Likewise.
-	* typeprint.c (print_offset_data::update)
-	(print_offset_data::finish): Likewise.
-	* xtensa-tdep.c (xtensa_store_return_value)
-	(xtensa_push_dummy_call): Likewise.
-
-2019-03-28  Jon Turney  <jon.turney@dronecode.org.uk>
-
-	* windows-nat.c (display_selector): Fixed format specifications
-	for 64-bit Cygwin.
-
-2019-03-28  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* infrun.c (follow_exec): Call target_terminal::ours_for_output.
-
-2019-03-28  Sandra Loosemore  <sandra@codesourcery.com>
-
-	* nios2-tdep.h (struct gdbarch_tdep): Add is_kernel_helper.
-	* nios2-tdep.c (nios2_get_next_pc): Skip over kernel helpers.
-	* nios2-linux-tdep.c (nios2_linux_is_kernel_helper): New.
-	(nios2_linux_init_abi): Install it.
-
-2019-03-28  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c (aarch64_vnv_type): Use vector types.
-
-2019-03-28  Alan Hayward  <alan.hayward@arm.com>
-
-	* features/aarch64-sve.c (create_feature_aarch64_sve): Add q view.
-
-2019-03-24  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	    Tom Tromey  <tromey@adacore.com>
-
-	* minsyms.c (minimal_symbol_upper_bound): Fix buffer overflow.
-
-2019-03-26  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb-gdb.py.in (StructMainTypePrettyPrinter.bound_img): New method.
-	(StructMainTypePrettyPrinter.bounds_img): Use new "bound_img"
-	method to compute the bounds of range types. Also print "[evaluated]"
-	if the bounds' values come from a dynamic evaluation.
-
-2019-03-26  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* cp-valprint.c (cp_print_value_fields): Don't print trailing
-	whitespace when pretty printing is on.
-
-2019-03-26  Alan Hayward  <alan.hayward@arm.com>
-
-	* ppc-linux-nat.c: Add include.
-
-2019-03-26  Alan Hayward  <alan.hayward@arm.com>
-
-	* NEWS: Mention AArch64 Pointer Authentication.
-
-2019-03-26  Alan Hayward  <alan.hayward@arm.com>
-
-	* arm-linux-nat.c: Add include.
-
-2019-03-25  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* source-cache.c (source_cache::get_source_lines): Re-read
-	fullname after calling open_source_file.
-
-2019-03-25  John Baldwin  <jhb@FreeBSD.org>
-
-	* NEWS: Mention TLS support for FreeBSD.
-
-2019-03-25  Tom Tromey  <tromey@adacore.com>
-
-	* minsyms.c (BUNCH_SIZE): Update comment.
-	(~minimal_symbol_reader): Remove old comment.
-	(compact_minimal_symbols): Update comment.
-	(minimal_symbol_reader::install): Remove old comment.  Update
-	other comments.
-
-2019-03-25  Alan Hayward  <alan.hayward@arm.com>
-
-	* s390-linux-nat.c: Add include.
-
-2019-03-25  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-linux-nat.c (aarch64_linux_nat_target::read_description):
-	Call linux_get_hwcap.
-	* aarch64-linux-tdep.c (aarch64_linux_core_read_description):
-	Likewise.
-	(aarch64_linux_get_hwcap): Remove function.
-	* aarch64-linux-tdep.h (aarch64_linux_get_hwcap): Remove
-	declaration.
-	* arm-linux-nat.c (arm_linux_nat_target::read_description):Call
-	linux_get_hwcap.
-	* arm-linux-tdep.c (arm_linux_core_read_description): Likewise.
-	* linux-tdep.c (linux_get_hwcap): Add function.
-	(linux_get_hwcap2): Likewise.
-	* linux-tdep.h (linux_get_hwcap): Add declaration.
-	(linux_get_hwcap2): Likewise.
-	* ppc-linux-nat.c (ppc_linux_get_hwcap): Remove function.
-	(ppc_linux_get_hwcap2): Likewise.
-	(ppc_linux_nat_target::region_ok_for_hw_watchpoint): Call
-	linux_get_hwcap.
-	(ppc_linux_nat_target::insert_watchpoint): Likewise.
-	(ppc_linux_nat_target::watchpoint_addr_within_range): Likewise.
-	(ppc_linux_nat_target::read_description): Likewise.
-	* ppc-linux-tdep.c (ppc_linux_core_read_description): Likewise.
-	* s390-linux-nat.c: Likewise.
-	* s390-linux-tdep.c (s390_core_read_description): Likewise.
-
-2019-03-24  Tom Tromey  <tom@tromey.com>
-
-	* ada-lang.c (standard_lookup): Simplify initialization.
-	(ada_lookup_symbol_nonlocal): Simplify return.
-	* solib-spu.c (spu_lookup_lib_symbol): Simplify return.
-	* solib-darwin.c (darwin_lookup_lib_symbol): Simplify return.
-	* solib-svr4.c (elf_lookup_lib_symbol): Simplify return.
-	* rust-lang.c (rust_lookup_symbol_nonlocal): Simplify
-	initialization.
-	* solib.c (solib_global_lookup): Simplify.
-	* symtab.c (null_block_symbol): Remove.
-	(symbol_cache_lookup): Simplify returns.
-	(lookup_language_this): Simplify returns.
-	(lookup_symbol_aux): Simplify return.
-	(lookup_local_symbol): Simplify returns.
-	(lookup_global_symbol_from_objfile): Simplify return.
-	(lookup_symbol_in_objfile_symtabs)
-	(lookup_symbol_in_objfile_from_linkage_name): Simplify return.
-	(lookup_symbol_via_quick_fns, lookup_symbol_in_static_block)
-	(lookup_static_symbol, lookup_global_symbol): Simplify return.
-	* cp-namespace.c (cp_lookup_bare_symbol)
-	(cp_search_static_and_baseclasses, cp_lookup_symbol_via_imports)
-	(cp_lookup_symbol_via_all_imports, cp_lookup_nested_symbol_1)
-	(cp_lookup_nested_symbol): Don't use null_block_symbol.
-	(cp_lookup_symbol_via_imports): Simplify initialization.
-	(find_symbol_in_baseclass): Likewise.
-	* symtab.h (null_block_symbol): Remove.
-	* d-namespace.c (d_lookup_symbol): Don't use null_block_symbol.
-	(d_lookup_nested_symbol, d_lookup_symbol_imports)
-	(d_lookup_symbol_module): Likewise.
-	(find_symbol_in_baseclass): Simplify initialization.
-
-2019-03-24  Tom Tromey  <tom@tromey.com>
-
-	* expression.h: Don't include symtab.h.
-	(struct block): Forward declare.
-
-2019-03-24  Tom Tromey  <tom@tromey.com>
-
-	* c-exp.y (typebase): Remove casts.
-	* gdbtypes.c (lookup_unsigned_typename, )
-	(lookup_signed_typename): Remove cast.
-	* eval.c (parse_to_comma_and_eval): Remove cast.
-	* parse.c (write_dollar_variable): Remove cast.
-	* block.h (struct block) <superblock>: Now const.
-	* symfile-debug.c (debug_qf_map_matching_symbols): Update.
-	* psymtab.c (psym_map_matching_symbols): Make "block" const.
-	(map_block): Make "block" const.
-	* symfile.h (struct quick_symbol_functions)
-	<map_matching_symbols>: Constify block argument to "callback".
-	* symtab.c (basic_lookup_transparent_type_quick): Make "block"
-	const.
-	(find_pc_sect_compunit_symtab): Make "b" const.
-	(find_symbol_at_address): Likewise.
-	(search_symbols): Likewise.
-	* dwarf2read.c (dw2_lookup_symbol): Make "block" const.
-	(dw2_debug_names_lookup_symbol): Likewise.
-	(dw2_map_matching_symbols): Update.
-	* p-valprint.c (pascal_val_print): Remove "block".
-	* ada-lang.c (ada_add_global_exceptions): Make "b" const.
-	(aux_add_nonlocal_symbols): Make "block" const.
-	(resolve_subexp): Remove cast.
-	* linespec.c (iterate_over_all_matching_symtabs): Make "block"
-	const.
-	(iterate_over_file_blocks): Likewise.
-	* f-exp.y (%union) <bval>: Remove.
-	* coffread.c (patch_opaque_types): Make "b" const.
-	* spu-tdep.c (spu_catch_start): Make "block" const.
-	* c-valprint.c (print_unpacked_pointer): Remove "block".
-	* symmisc.c (dump_symtab_1): Make "b" const.
-	(block_depth): Make "block" const.
-	* d-exp.y (%union) <bval>: Remove.
-	* cp-support.h (cp_lookup_rtti_type): Update.
-	* cp-support.c (cp_lookup_rtti_type): Make "block" const.
-	* psymtab.c (psym_lookup_symbol): Make "block" const.
-	(maintenance_check_psymtabs): Make "b" const.
-	* python/py-framefilter.c (extract_sym): Make "sym_block" const.
-	(enumerate_locals, enumerate_args): Update.
-	* python/py-symtab.c (stpy_global_block): Make "block" const.
-	(stpy_static_block): Likewise.
-	* inline-frame.c (block_starting_point_at): Make "new_block"
-	const.
-	* block.c (find_block_in_blockvector): Make return type const.
-	(blockvector_for_pc_sect): Make "b" const.
-	(find_block_in_blockvector): Make "b" const.
-
-2019-03-23  Tom Tromey  <tom@tromey.com>
-
-	* varobj.c (varobj_create): Update.
-	* symfile.c (clear_symtab_users): Don't reset innermost_block.
-	* printcmd.c (display_command, do_one_display): Don't reset
-	innermost_block.
-	* parser-defs.h (enum innermost_block_tracker_type): Move to
-	expression.h.
-	(innermost_block): Update comment.
-	* parse.c (parse_exp_1): Add tracker_types parameter.
-	(parse_exp_in_context): Rename from parse_exp_in_context_1.  Add
-	tracker_types parameter.  Reset innermost_block.
-	(parse_exp_in_context): Remove.
-	(parse_expression_for_completion): Update.
-	* objfiles.c (~objfile): Don't reset expression_context_block or
-	innermost_block.
-	* expression.h (enum innermost_block_tracker_type): Move from
-	parser-defs.h.
-	(parse_exp_1): Add tracker_types parameter.
-	* breakpoint.c (set_breakpoint_condition, watch_command_1): Don't
-	reset innermost_block.
-
-2019-03-23  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h: Include bcache.h.
-
-2019-03-23  Tom Tromey  <tom@tromey.com>
-
-	* linespec.c (get_current_search_block): Use
-	scoped_restore_current_language.
-	* symmisc.c (dump_symtab): Use scoped_restore_current_language.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* aarch64-linux-tdep.c
-	(aarch64_linux_iterate_over_regset_sections): Check for pauth
-	section.
-	* aarch64-linux-tdep.h (AARCH64_LINUX_SIZEOF_PAUTH): New define.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* aarch64-tdep.c (aarch64_analyze_prologue): Check for pauth
-	instructions.
-	(aarch64_analyze_prologue_test): Add PACIASP test.
-	(aarch64_prologue_prev_register): Unmask PC value.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* aarch64-tdep.c (aarch64_frame_unmask_address): New function.
-	(aarch64_dwarf2_prev_register): Unmask PC value.
-	(aarch64_dwarf2_frame_init_reg): Init pauth registers.
-	(aarch64_execute_dwarf_cfa_vendor_op): Check for
-	DW_CFA_AARCH64_negate_ra_state.
-	(aarch64_gdbarch_init): Add aarch64_execute_dwarf_cfa_vendor_op.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* aarch64-tdep.c (aarch64_dwarf_reg_to_regnum): Check for pauth
-	registers.
-	(aarch64_pseudo_register_name): Likewise.
-	(aarch64_pseudo_register_type): Likewise.
-	(aarch64_pseudo_register_reggroup_p): Likewise.
-	(aarch64_gdbarch_init): Add pauth registers.
-	* aarch64-tdep.h (AARCH64_DWARF_PAUTH_RA_STATE): New define.
-	(AARCH64_DWARF_PAUTH_DMASK): Likewise.
-	(AARCH64_DWARF_PAUTH_CMASK): Likewise.
-	(struct gdbarch_tdep): Add regnum for ra_state.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* arch/aarch64.h (AARCH64_PAUTH_REGS_SIZE): New define.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* aarch64-linux-nat.c (fetch_pauth_masks_from_thread): New
-	function.
-	(aarch64_linux_nat_target::fetch_registers): Read pauth registers.
-	* aarch64-tdep.c (aarch64_cannot_store_register): New function.
-	(aarch64_gdbarch_init): Add puth registers.
-	* aarch64-tdep.h (struct gdbarch_tdep): Add pauth features.
-	* arch/aarch64.h (AARCH64_PAUTH_DMASK_REGNUM): New define.
-	(AARCH64_PAUTH_CMASK_REGNUM): Likewise.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* aarch64-linux-nat.c
-	(aarch64_linux_nat_target::read_description): Read PACA hwcap.
-	* aarch64-linux-tdep.c
-	(aarch64_linux_core_read_description): Likewise.
-	(aarch64_linux_get_hwcap): New function.
-	* aarch64-linux-tdep.h (AARCH64_HWCAP_PACA): New define.
-	(aarch64_linux_get_hwcap): New declaration.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* aarch64-linux-nat.c
-	(aarch64_linux_nat_target::read_description): Add pauth param.
-	* aarch64-linux-tdep.c
-	(aarch64_linux_core_read_description): Likewise.
-	* aarch64-tdep.c (struct target_desc): Add in pauth.
-	(aarch64_read_description): Add pauth param.
-	(aarch64_gdbarch_init): Likewise.
-	* aarch64-tdep.h (aarch64_read_description): Likewise.
-	* arch/aarch64.c (aarch64_create_target_description): Likewise.
-	* arch/aarch64.h (aarch64_create_target_description): Likewise.
-	* features/Makefile: Add new files.
-	* features/aarch64-pauth.c: New file.
-	* features/aarch64-pauth.xml: New file.
-
-2019-03-20  Tom Tromey  <tromey@adacore.com>
-
-	* infrun.c (handle_inferior_event): Rename from
-	handle_inferior_event_1.  Create a scoped_value_mark.
-	(handle_inferior_event): Remove.
-
-2019-03-19  Tom Tromey  <tromey@adacore.com>
-
-	* mi/mi-interp.c (mi_on_normal_stop_1): Only show displays once.
-	* infrun.h (print_stop_event): Add "displays" parameter.
-	* infrun.c (print_stop_event): Add "displays" parameter.
-
-2019-03-19  Pedro Alves  <palves@redhat.com>
-
-	* tui/tui-out.c (tui_ui_out::do_field_string): Simplify.
-	(tui_ui_out::do_text): Add comments.  Reset M_LINE to 0 instead of
-	to -1.  Fix TABs vs spaces.
-	(tui_ui_out::tui_ui_out): Don't initialize fields here.
-	* tui/tui-out.h (tui_ui_out) Add intro comments.
-	<m_line, m_start_of_line>: In-class initialize, and add describing
-	comment.
-
-2019-03-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* arm-linux-nat.c (arm_linux_insert_hw_breakpoint1): Fix
-	variable names.
-	(arm_linux_remove_hw_breakpoint1): Use a gdb::function_view.
-
-2019-03-18  Pedro Alves  <palves@redhat.com>
-	    Eli Zaretskii <eliz@gnu.org>
-
-	* tui/tui-out.c (tui_ui_out::tui_ui_out): Fix initialization of
-	m_line and m_start_of_line.
-
-2019-03-18  Eli Zaretskii  <eliz@gnu.org>
-
-	* tui/tui-io.c (gdb_wgetch): Don't echo CR.
-	(tui_getc): When gdb_wgetch returns a CR, behave the same as when
-	it returns a newline.  This fixes a regression in TU mode, whereby
-	the next line is output on the same screen line as the user input.
-
-2019-03-18  Tom Tromey  <tromey@adacore.com>
-
-	* minsyms.c (minimal_symbol_reader::install): Remove call to
-	obstack_blank.
-
-2019-03-18  Pedro Alves  <palves@redhat.com>
-
-	* tui/tui-io.c (reverse_mode_p, reverse_save_bg, reverse_save_fg):
-	New globals.
-	(apply_style): New, factored out from ...
-	(apply_ansi_escape): ... this.  Handle reverse video mode.
-	(tui_set_reverse_mode): New function.
-	* tui/tui-io.h (tui_set_reverse_mode): New declaration.
-	* tui/tui-winsource.c (tui_show_source_line): Use
-	tui_set_reverse_mode instead of setting A_STANDOUT.
-	* ui-style.h (struct ui_file_style) <set_reverse, set_fg, set_bg>:
-	New setter methods.
-
-2019-03-18  Hannes Domani  <ssbssa@yahoo.de>
-
-	* tui/tui-source.c (copy_source_line): Fix handling of 'column'.
-	Handle tabs.
-
-2019-03-18  Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (empty_array): Add "high" parameter.
-	(ada_evaluate_subexp): Update.
-
-2019-03-17  Sergei Trofimovich <siarheit@google.com>
-
-	* unittests/string_view-selftests.c: Define
-	_initialize_string_view_selftests unconditionally.
-
-2019-03-17  Vladimir Martyanov  <vilgeforce@gmail.com>
-
-	PR gdb/24350
-	* windows-nat.c (windows_make_so): Remove unused text_vma variable.
-
-2019-03-17  Vladimir Martyanov  <vilgeforce@gmail.com>
-
-	PR gdb/24351
-	* windows-nat.c (display_selector): Fix format specifiers.
-
-2019-03-17  Eli Zaretskii  <eliz@gnu.org>
-
-	* tui/tui-winsource.c (tui_set_is_exec_point_at): Call
-	tui_refill_source_window instead of tui_refresh_win, to update the
-	current execution line.  This fixes redisplay of the current line
-	when stepping through the code with "next" or "step".
-
-2019-03-16  Eli Zaretskii  <eliz@gnu.org>
-
-	* source-cache.c (source_cache::get_source_lines): Call
-	find_source_lines to initialize s->nlines.  This fixes vertical
-	scrolling of TUI source window when the DOWN arrow is pressed.
-
-2019-03-16  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* auto-load.c (_initialize_auto_load): Fix 'This options has'.
-	linux-thread-db.c (_initialize_thread_db): Likewise.
-
-2019-03-16  Eli Zaretskii  <eliz@gnu.org>
-
-	* tui/tui-winsource.c (tui_show_source_line): Revert "Use
-	wclrtoeol in tui_show_source_line".  This reverts changes made in
-	commit 4a3045920bbe4e50a0f4920b0fdc4e88ef23015c.
-
-2019-03-15  Tom Tromey  <tom@tromey.com>
-
-	* symtab.h (struct minimal_symbol): Derive from
-	general_symbol_info.
-	(MSYMBOL_VALUE, MSYMBOL_VALUE_RAW_ADDRESS)
-	(MSYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_BYTES)
-	(MSYMBOL_BLOCK_VALUE, MSYMBOL_VALUE_CHAIN, MSYMBOL_LANGUAGE)
-	(MSYMBOL_SECTION, MSYMBOL_OBJ_SECTION, MSYMBOL_NATURAL_NAME)
-	(MSYMBOL_LINKAGE_NAME, MSYMBOL_DEMANGLED_NAME)
-	(MSYMBOL_SEARCH_NAME): Update.
-	(MSYMBOL_SET_LANGUAGE, MSYMBOL_SET_NAMES): Remove.
-	* solib.c (gdb_bfd_lookup_symbol_from_symtab): Don't use memset.
-	* minsyms.c (minimal_symbol_reader::record_full): Update.
-
-2019-03-15  Tom Tromey  <tom@tromey.com>
-
-	* minsyms.c (minimal_symbol_reader::install): Use memcpy.
-
-2019-03-15  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (struct objfile_per_bfd_storage) <msymbols>: Now a
-	unique_xmalloc_ptr.
-	(objfile::msymbols_range::begin, objfile::msymbols_range::end):
-	Update.
-	* minsyms.c (lookup_minimal_symbol_by_pc_section)
-	(build_minimal_symbol_hash_tables)
-	(minimal_symbol_reader::install): Update.
-
-2019-03-15  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (create_demangled_names_hash): Update.
-	(symbol_set_names): Update.
-	* objfiles.h (struct objfile_per_bfd_storage)
-	<demangled_names_hash>: Now an htab_up.
-	* objfiles.c (objfile_per_bfd_storage): Simplify.
-
-2019-03-15  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (struct objfile_per_bfd_storage): Declare
-	destructor.
-	* objfiles.c (objfile_per_bfd_storage::~objfile_per_bfd_storage):
-	New.
-	(get_objfile_bfd_data): Use new.  Don't initialize
-	language_of_main.
-	(free_objfile_per_bfd_storage): Remove.
-	(objfile_bfd_data_free, objfile::~objfile): Use delete.
-
-2019-03-15  Tom Tromey  <tom@tromey.com>
-
-	* symfile.c (reread_symbols): Update.
-	* objfiles.c (objfile::objfile): Update.
-	* minsyms.h (terminate_minimal_symbol_table): Don't declare.
-	* minsyms.c (lookup_minimal_symbol_by_pc_section): Update
-	comment.
-	(minimal_symbol_reader::install): Update.
-	(terminate_minimal_symbol_table): Remove.
-	* jit.c (jit_object_close_impl): Update.
-
-2019-03-15  Tom Tromey  <tom@tromey.com>
-
-	* minsyms.c (minimal_symbol_reader::record_full): Remove some
-	initializations.
-
-2019-03-15  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (struct objfile_per_bfd_storage)
-	<demangled_hash_languages>: Now a bitset.
-	* minsyms.c (add_minsym_to_demangled_hash_table): Update.
-	(lookup_minimal_symbol): Update.
-
-2019-03-15  Tom Tromey  <tom@tromey.com>
-
-	* minsyms.h (class minimal_symbol_reader) <record_with_info>:
-	Don't return the symbol.
-	* coffread.c (record_minimal_symbol): Use record_full.
-
-2019-03-14  Eli Zaretskii  <eliz@gnu.org>
-
-	The MS-Windows port of ncurses fails to switch to a color pair if
-	one or both of the colors are the implicit default colors.  This
-	change records the default colors when TUI is initialized, and
-	then specifies them explicitly when a color pair uses the default
-	colors.  This allows color styling in TUI mode on MS-Windows.
-
-	* tui/tui-io.c [__MINGW32__]: Include windows.h.  Declare
-	ncurses_norm_attr.
-	(tui_initialize_io) [__MINGW32__]: Record the default terminal
-	colors in ncurses_norm_attr.
-	(apply_ansi_escape) [__MINGW32__]: If a color in a color pair is
-	"none", replace it with the default color recorded in
-	ncurses_norm_attr.
-
-2019-03-14  Tom Tromey  <tromey@adacore.com>
-
-	* source-cache.h (class source_cache) <get_source_lines>: Return
-	std::string.
-	* source-cache.c (source_cache::extract_lines): Handle case where
-	first_pos==npos.  Return std::string.
-	(source_cache::get_source_lines): Update.
-
-2019-03-14  Tom Tromey  <tromey@adacore.com>
-
-	* NEWS: Add item for "style sources" commands.
-	* source-cache.c (source_cache::get_source_lines): Check
-	source_styling.
-	* cli/cli-style.c (source_styling): New global.
-	(_initialize_cli_style): Add "style sources" commands.
-	(show_style_sources): New function.
-	* cli/cli-style.h (source_styling): Declare.
-
-2019-03-14  Pedro Alves  <palves@redhat.com>
-	    Tom Tromey  <tromey@adacore.com>
-
-	* tui/tui-winsource.h (tui_refill_source_window): Declare.
-	* tui/tui-winsource.c (tui_refill_source_window): New function,
-	from...
-	(tui_horizontal_source_scroll): ... here.  Move some logic.
-	* cli/cli-style.c (set_style_enabled): Notify new observable.
-	* tui/tui-hooks.c (tui_redisplay_source): New function.
-	(tui_attach_detach_observers): Attach or detach
-	tui_redisplay_source.
-	* observable.h (source_styling_changed): New observable.
-	* observable.c: Define source_styling_changed observable.
-
-2019-03-13  Tom Tromey  <tromey@adacore.com>
-
-	* i386-gnu-nat.c (i386_gnu_nat_target::fetch_registers)
-	(i386_gnu_nat_target::store_registers): Update.
-	* target-debug.h (target_debug_print_std_string): New macro.
-	* x86-linux-nat.c (x86_linux_nat_target::enable_btrace): Update.
-	* windows-tdep.c (display_one_tib): Update.
-	* tui/tui-stack.c (tui_make_status_line): Update.
-	* top.c (print_inferior_quit_action): Update.
-	* thread.c (thr_try_catch_cmd): Update.
-	(add_thread_with_info): Update.
-	(thread_target_id_str): Update.
-	(thr_try_catch_cmd): Update.
-	(thread_command): Update.
-	(thread_find_command): Update.
-	* record-btrace.c (record_btrace_target::info_record)
-	(record_btrace_resume_thread, record_btrace_target::resume)
-	(record_btrace_cancel_resume, record_btrace_step_thread)
-	(record_btrace_target::wait, record_btrace_target::wait)
-	(record_btrace_target::wait, record_btrace_target::stop): Update.
-	* progspace.c (print_program_space): Update.
-	* process-stratum-target.c
-	(process_stratum_target::thread_address_space): Update.
-	* linux-fork.c (linux_fork_mourn_inferior)
-	(detach_checkpoint_command, info_checkpoints_command)
-	(linux_fork_context): Update.
-	(linux_fork_detach): Update.
-	(class scoped_switch_fork_info): Update.
-	(delete_checkpoint_command): Update.
-	* infrun.c (follow_fork_inferior): Update.
-	(follow_fork_inferior): Update.
-	(proceed_after_vfork_done): Update.
-	(handle_vfork_child_exec_or_exit): Update.
-	(follow_exec): Update.
-	(displaced_step_prepare_throw): Update.
-	(displaced_step_restore): Update.
-	(start_step_over): Update.
-	(resume_1): Update.
-	(clear_proceed_status_thread): Update.
-	(proceed): Update.
-	(print_target_wait_results): Update.
-	(do_target_wait): Update.
-	(context_switch): Update.
-	(stop_all_threads): Update.
-	(restart_threads): Update.
-	(finish_step_over): Update.
-	(handle_signal_stop): Update.
-	(switch_back_to_stepped_thread): Update.
-	(keep_going_pass_signal): Update.
-	(print_exited_reason): Update.
-	(normal_stop): Update.
-	* inferior.c (inferior_pid_to_str): Change return type.
-	(print_selected_inferior): Update.
-	(add_inferior): Update.
-	(detach_inferior): Update.
-	* dummy-frame.c (fprint_dummy_frames): Update.
-	* dcache.c (dcache_info_1): Update.
-	* btrace.c (btrace_enable, btrace_disable, btrace_teardown)
-	(btrace_fetch, btrace_clear): Update.
-	* linux-tdep.c (linux_core_pid_to_str): Change return type.
-	* i386-cygwin-tdep.c (i386_windows_core_pid_to_str): Change return
-	type.
-	* fbsd-tdep.c (fbsd_core_pid_to_str): Change return type.
-	* sol2-tdep.h (sol2_core_pid_to_str): Change return type.
-	* sol2-tdep.c (sol2_core_pid_to_str): Change return type.
-	* gdbarch.c, gdbarch.h: Rebuild.
-	* gdbarch.sh (core_pid_to_str): Change return type.
-	* windows-nat.c (struct windows_nat_target) <pid_to_str>: Change
-	return type.
-	(windows_nat_target::pid_to_str): Change return type.
-	(windows_delete_thread): Update.
-	(windows_nat_target::attach): Update.
-	(windows_nat_target::files_info): Update.
-	* target-delegates.c: Rebuild.
-	* sol-thread.c (class sol_thread_target) <pid_to_str>: Change
-	return type.
-	(sol_thread_target::pid_to_str): Change return type.
-	* remote.c (class remote_target) <pid_to_str>: Change return
-	type.
-	(remote_target::pid_to_str): Change return type.
-	(extended_remote_target::attach, remote_target::remote_stop_ns)
-	(remote_target::remote_notif_remove_queued_reply)
-	(remote_target::push_stop_reply, remote_target::disable_btrace):
-	Update.
-	(extended_remote_target::attach): Update.
-	* remote-sim.c (struct gdbsim_target) <pid_to_str>: Change return
-	type.
-	(gdbsim_target::pid_to_str): Change return type.
-	* ravenscar-thread.c (struct ravenscar_thread_target)
-	<pid_to_str>: Change return type.
-	(ravenscar_thread_target::pid_to_str): Change return type.
-	* procfs.c (class procfs_target) <pid_to_str>: Change return
-	type.
-	(procfs_target::pid_to_str): Change return type.
-	(procfs_target::attach): Update.
-	(procfs_target::detach): Update.
-	(procfs_target::fetch_registers): Update.
-	(procfs_target::store_registers): Update.
-	(procfs_target::wait): Update.
-	(procfs_target::files_info): Update.
-	* obsd-nat.c (obsd_nat_target::pid_to_str): Change return type.
-	* nto-procfs.c (struct nto_procfs_target) <pid_to_str>: Change
-	return type.
-	(nto_procfs_target::pid_to_str): Change return type.
-	(nto_procfs_target::files_info, nto_procfs_target::attach): Update.
-	* linux-thread-db.c (class thread_db_target) <pid_to_str>: Change
-	return type.
-	* linux-nat.c (linux_nat_target::pid_to_str): Change return type.
-	(exit_lwp): Update.
-	(attach_proc_task_lwp_callback, get_detach_signal)
-	(detach_one_lwp, resume_lwp, linux_nat_target::resume)
-	(linux_nat_target::resume, wait_lwp, stop_callback)
-	(maybe_clear_ignore_sigint, stop_wait_callback, status_callback)
-	(save_stop_reason, select_event_lwp, linux_nat_filter_event)
-	(linux_nat_wait_1, resume_stopped_resumed_lwps)
-	(linux_nat_target::wait, linux_nat_stop_lwp): Update.
-	* inf-ptrace.c (inf_ptrace_target::pid_to_str): Change return
-	type.
-	(inf_ptrace_target::attach): Update.
-	(inf_ptrace_target::files_info): Update.
-	* go32-nat.c (struct go32_nat_target) <pid_to_str>: Change return
-	type.
-	(go32_nat_target::pid_to_str): Change return type.
-	* gnu-nat.c (gnu_nat_target::pid_to_str): Change return type.
-	(gnu_nat_target::wait): Update.
-	(gnu_nat_target::wait): Update.
-	(gnu_nat_target::resume): Update.
-	* fbsd-nat.c (fbsd_nat_target::pid_to_str): Change return type.
-	(fbsd_nat_target::wait): Update.
-	* darwin-nat.c (darwin_nat_target::pid_to_str): Change return
-	type.
-	(darwin_nat_target::attach): Update.
-	* corelow.c (class core_target) <pid_to_str>: Change return type.
-	(core_target::pid_to_str): Change return type.
-	* target.c (normal_pid_to_str): Change return type.
-	(default_pid_to_str): Likewise.
-	(target_pid_to_str): Change return type.
-	(target_translate_tls_address): Update.
-	(target_announce_detach): Update.
-	* bsd-uthread.c (struct bsd_uthread_target) <pid_to_str>: Change
-	return type.
-	(bsd_uthread_target::pid_to_str): Change return type.
-	* bsd-kvm.c (class bsd_kvm_target) <pid_to_str>: Change return
-	type.
-	(bsd_kvm_target::pid_to_str): Change return type.
-	* aix-thread.c (class aix_thread_target) <pid_to_str>: Change
-	return type.
-	(aix_thread_target::pid_to_str): Change return type.
-	* target.h (struct target_ops) <pid_to_str>: Change return type.
-	(target_pid_to_str, normal_pid_to_str): Likewise.
-	* obsd-nat.h (class obsd_nat_target) <pid_to_str>: Change return
-	type.
-	* linux-nat.h (class linux_nat_target) <pid_to_str>: Change return
-	type.
-	* inf-ptrace.h (struct inf_ptrace_target) <pid_to_str>: Change
-	return type.
-	* gnu-nat.h (struct gnu_nat_target) <pid_to_str>: Change return
-	type.
-	* fbsd-nat.h (class fbsd_nat_target) <pid_to_str>: Change return
-	type.
-	* darwin-nat.h (class darwin_nat_target) <pid_to_str>: Change
-	return type.
-
-2019-03-13  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* NEWS: Mention that the new default MI version is 3.  Mention
-	changes to the output of commands and events that deal with
-	multi-location breakpoints.
-	* breakpoint.c: Include "mi/mi-out.h".
-	(print_one_breakpoint): Change output syntax if using MI version
-	>= 3.
-	* mi/mi-main.h (mi_cmd_fix_multi_location_breakpoint_output):
-	New.
-	(mi_multi_location_breakpoint_output_fixed): New.
-	* mi/mi-main.c (fix_multi_location_breakpoint_output): New.
-	(mi_cmd_fix_multi_location_breakpoint_output): New.
-	(mi_multi_location_breakpoint_output_fixed): New.
-	* mi/mi-cmds.c (mi_cmds): Register command
-	-fix-multi-location-breakpoint-output.
-	* mi/mi-out.c (mi_out_new): Instantiate version 3 when using
-	interpreter "mi".
-
-2019-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* mi/mi-out.h (mi_out_new): Change parameter to const char *.
-	* mi/mi-out.c (mi_out_new): Change parameter to const char *,
-	instantiate mi_ui_out based on interpreter name.
-	* mi/mi-interp.c (mi_interp::init): Use the new mi_out_new.
-	* mi/mi-main.c (mi_load_progress): Likewise.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* NEWS: Combine separate "New targets" sections for 8.3.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* ppc-fbsd-tdep.c (ppcfbsd_get_thread_local_address): New.
-	(ppcfbsd_init_abi): Install gdbarch
-	"fetch_tls_load_module_address" and "get_thread_local_address"
-	methods.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* riscv-fbsd-tdep.c (riscv_fbsd_get_thread_local_address): New.
-	(riscv_fbsd_init_abi): Install gdbarch
-	"fetch_tls_load_module_address" and "get_thread_local_address"
-	methods.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* i386-fbsd-tdep.c (i386fbsd_get_thread_local_address): New.
-	(i386fbsd_init_abi): Install gdbarch
-	"fetch_tls_load_module_address" and "get_thread_local_address"
-	methods.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* amd64-fbsd-tdep.c (amd64fbsd_get_thread_local_address): New.
-	(amd64fbsd_init_abi): Install gdbarch
-	"fetch_tls_load_module_address" and "get_thread_local_address"
-	methods.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* fbsd-tdep.c (fbsd_pspace_data_handle): New variable.
-	(struct fbsd_pspace_data): New type.
-	(get_fbsd_pspace_data, fbsd_pspace_data_cleanup)
-	(fbsd_read_integer_by_name, fbsd_fetch_rtld_offsets)
-	(fbsd_get_tls_index, fbsd_get_thread_local_address): New function.
-	(_initialize_fbsd_tdep): Initialize 'fbsd_pspace_data_handle'.
-	* fbsd-tdep.c (fbsd_get_thread_local_address): New prototype.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdbtypes.c (lookup_struct_elt): New function.
-	(lookup_struct_elt_type): Reimplement via lookup_struct_elt.
-	* gdbtypes.h (struct struct_elt): New type.
-	(lookup_struct_elt): New prototype.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdbtypes.c (lookup_struct_elt_type): Update comment and
-	remove disabled code block.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdbarch.sh (get_thread_local_address): New method.
-	* gdbarch.h, gdbarch.c: Regenerate.
-	* target.c (target_translate_tls_address): Use
-	gdbarch_get_thread_local_address if present instead of
-	target::get_thread_local_address.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* target.h (target::get_thread_local_address): Update comment.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* solib-svr4.c (svr4_fetch_objfile_link_map): Look for
-	objfile->separate_debug_objfile_backlink if not NULL.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* amd64-bsd-nat.c (amd64bsd_fetch_inferior_registers): Use
-	tdep->fsbase_regnum instead of constants for fs_base and gs_base.
-	(amd64bsd_store_inferior_registers): Likewise.
-	* amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description):
-	Enable segment base registers.
-	* i386-bsd-nat.c (i386bsd_fetch_inferior_registers): Use
-	PT_GETFSBASE and PT_GETGSBASE.
-	(i386bsd_store_inferior_registers): Use PT_SETFSBASE and
-	PT_SETGSBASE.
-	* i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Enable
-	segment base registers.
-	* i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description):
-	Update calls to i386_target_description to add 'segments'
-	parameter.
-	* amd64-tdep.c (amd64_init_abi): Set tdep->fsbase_regnum.  Don't
-	add segment base registers.
-	* arch/i386.c (i386_create_target_description): Add 'segments'
-	parameter to enable segment base registers.
-	* arch/i386.h (i386_create_target_description): Likewise.
-	* features/i386/32bit-segments.xml: New file.
-	* features/i386/32bit-segments.c: Generate.
-	* i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Update
-	call to i386_target_description to add 'segments' parameter.
-	* i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise.
-	* i386-go32-tdep.c (i386_go32_init_abi): Likewise.
-	* i386-linux-tdep.c (i386_linux_read_description): Likewise.
-	* i386-tdep.c (i386_validate_tdesc_p): Add segment base registers
-	if feature is present.
-	(i386_gdbarch_init): Pass I386_NUM_REGS to set_gdbarch_num_regs.
-	Add 'segments' parameter to call to i386_target_description.
-	(i386_target_description): Add 'segments' parameter to enable
-	segment base registers.
-	(_initialize_i386_tdep) [GDB_SELF_TEST]: Add 'segments' parameter
-	to call to i386_target_description.
-	* i386-tdep.h (struct gdbarch_tdep): Add 'fsbase_regnum'.
-	(enum i386_regnum): Add I386_FSBASE_REGNUM and I386_GSBASE_REGNUM.
-	Define I386_NUM_REGS.
-	(i386_target_description): Add 'segments' parameter to enable
-	segment base registers.
-
-2019-03-12  Eli Zaretskii  <eliz@gnu.org>
-
-	PR/24325
-	* source-cache.c: #undef open and close, to avoid unresolved
-	externals during linking.
-
-2019-03-12  Tom Tromey  <tromey@adacore.com>
-
-	* remote.c (magic_null_ptid, not_sent_ptid, any_thread_ptid): Now
-	const.  Add initializers.
-	(_initialize_remote): Don't initialize ptid globals.
-
-2019-03-12  Pedro Alves  <palves@redhat.com>
-
-	* yy-remap.h [TEST_CPNAMES] (YYFPRINTF): Don't define.
-
-2019-03-12  Pedro Alves  <palves@redhat.com>
-
-	* cp-name-parser.y (main): Remove unused 'len' variable.
-
-2019-03-12  Tom Tromey  <tromey@adacore.com>
-
-	* common/ptid.c (null_ptid, minus_one_ptid): Now const.
-	* common/ptid.h (null_ptid, minus_one_ptid): Now const.
-
-2019-03-12  Tom Tromey  <tromey@adacore.com>
-
-	* linux-nat.c (iterate_over_lwps): Update.
-	(stop_callback): Remove parameter.
-	(stop_wait_callback, detach_callback, resume_set_callback)
-	(select_singlestep_lwp_callback, set_ignore_sigint)
-	(status_callback, resumed_callback, resume_clear_callback)
-	(kill_callback, kill_wait_callback, linux_nat_stop_lwp): Remove
-	data parameter.
-	(linux_nat_target::detach, linux_nat_target::resume)
-	(linux_stop_and_wait_all_lwps, select_event_lwp)
-	(linux_nat_filter_event, linux_nat_wait_1)
-	(linux_nat_target::kill, linux_nat_target::stop)
-	(linux_nat_target::stop): Update.
-	(linux_nat_resume_callback): Change type.
-	(resume_stopped_resumed_lwps, count_events_callback)
-	(select_event_lwp_callback): Likewise.
-	(linux_stop_lwp, linux_nat_stop_lwp): Update.
-	* arm-linux-nat.c (struct update_registers_data): Remove.
-	(update_registers_callback): Change type.
-	(arm_linux_insert_hw_breakpoint1): Update.
-	* nat/x86-linux-dregs.c (update_debug_registers_callback): Remove
-	parameter.
-	(x86_linux_dr_set_addr): Update.
-	(x86_linux_dr_set_control): Update.
-	* nat/linux-nat.h (iterate_over_lwps_ftype): Remove parameter.
-	(iterate_over_lwps): Use gdb::function_view.
-	* nat/aarch64-linux-hw-point.c (struct
-	aarch64_dr_update_callback_param): Remove.
-	(debug_reg_change_callback): Change type.
-	(aarch64_notify_debug_reg_change): Update.
-	* s390-linux-nat.c (s390_refresh_per_info): Update.
-
-2019-03-11  Tom Tromey  <tromey@adacore.com>
-
-	* dwarf2read.c (dwarf2_find_containing_comp_unit): Remove
-	redundant assignment to "this_cu".
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type): Remove unnecessary cases from switch.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_set): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_struct): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_complex): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_float): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_bool): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_range): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_char): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_enum): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_int): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_func): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_array): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdbtypes.c (rank_one_type_parm_ptr): New function extracted
-	from...
-	(rank_one_type): ... this.
-
-2019-02-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* inferior.c (initialize_inferiors): Ensure 'help set/show print
-	inferior-events' shows the example events.
-
-2019-03-08  Eli Zaretskii  <eliz@gnu.org>
-
-	Support styling on native MS-Windows console
-
-	PR/24315
-	* utils.c (can_emit_style_escape) [_WIN32]: Don't disable styling
-	on MS-Windows if $TERM is not defined.
-
-	* cli/cli-style.c: Set cli_styling to 1 in the MinGW build.
-
-	* posix-hdep.c (gdb_console_fputs):
-	* mingw-hdep.c (rgb_to_16colors, gdb_console_fputs): New
-	functions.
-	* ui-file.h (gdb_console_fputs): Add prototype.
-
-	* ui-file.c (stdio_file::puts): Call gdb_console_fputs, and fall
-	back to fputs only if the former returns zero.
-
-2019-03-07  Tom Tromey  <tom@tromey.com>
-
-	* symmisc.c (print_symbol_bcache_statistics): Update.
-	(print_objfile_statistics): Update.
-	* symfile.c (allocate_symtab): Update.
-	* stabsread.c: Don't include bcache.h.
-	* psymtab.h (struct psymbol_bcache): Don't declare.
-	(class psymtab_storage) <psymbol_cache>: Now a bcache.
-	(psymbol_bcache_init, psymbol_bcache_free)
-	(psymbol_bcache_get_bcache): Don't declare.
-	* psymtab.c (struct psymbol_bcache): Remove.
-	(psymtab_storage::psymtab_storage): Update.
-	(psymtab_storage::~psymtab_storage): Update.
-	(psymbol_bcache_init, psymbol_bcache_free)
-	(psymbol_bcache_get_bcache, psymbol_bcache_full): Remove.
-	(add_psymbol_to_bcache): Update.
-	(allocate_psymtab): Update.
-	* objfiles.h (struct objfile_per_bfd_storage) <filename_cache,
-	macro_cache>: No longer pointers.
-	* objfiles.c (get_objfile_bfd_data): Don't call bcache_xmalloc.
-	(free_objfile_per_bfd_storage): Don't call bcache_xfree.
-	* macrotab.c (macro_bcache): Update.
-	* macroexp.c: Don't include bcache.h.
-	* gdbtypes.c (check_types_worklist): Update.
-	(types_deeply_equal): Remove TRY/CATCH.  Update.
-	* elfread.c (elf_symtab_read): Update.
-	* dwarf2read.c: Don't include bcache.h.
-	* buildsym.c (buildsym_compunit::get_macro_table): Update.
-	* bcache.h (bcache, bcache_full, bcache_xffree, bcache_xmalloc)
-	(print_bcache_statistics, bcache_memory_used): Don't declare.
-	(struct bcache): Move from bcache.c.  Add constructor, destructor,
-	methods.  Rename all data members.
-	* bcache.c (struct bcache): Move to bcache.h.
-	(bcache::expand_hash_table): Rename from expand_hash_table.
-	(bcache): Remove.
-	(bcache::insert): Rename from bcache_full.
-	(bcache::compare): Rename from bcache_compare.
-	(bcache_xmalloc): Remove.
-	(bcache::~bcache): Rename from bcache_xfree.
-	(bcache::print_statistics): Rename from print_bcache_statistics.
-	(bcache::memory_used): Rename from bcache_memory_used.
-
-2019-03-07  Pedro Alves  <palves@redhat.com>
-
-	* infrun.c (normal_stop): Also check for
-	TARGET_WAITKIND_NO_RESUMED before referring to inferior_thread().
-
-2019-03-07  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-lang.c (value_from_host_double): Moved to...
-	* value.c (value_from_host_double): ...here.
-	* value.h (value_from_host_double): Declare.
-	* guile/scm-math.c (vlscm_convert_typed_number): Use
-	value_from_host_double.
-	(vlscm_convert_number): Likewise.
-	* guile/scm-value.c (gdbscm_value_to_real): Likewise.
-	* python/py-value.c (convert_value_from_python): Likewise.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* gcore.c (write_gcore_file): Use SCOPE_EXIT.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* utils.h (free_current_contents): Don't declare.
-	* utils.c (free_current_contents): Remove.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* top.c (quit_force): Update.
-	* main.c (captured_command_loop): Update.
-	* common/new-op.c (operator new): Update.
-	* common/common-exceptions.c (struct catcher)
-	<save_cleanup_chain>: Remove member.
-	(exceptions_state_mc_init): Update.
-	(exception_try_scope_entry): Return nullptr.
-	(exception_try_scope_exit, exception_rethrow)
-	(throw_exception_sjlj, throw_exception_cxx): Update.
-	* common/cleanups.h (make_cleanup, make_cleanup_dtor)
-	(all_cleanups, do_cleanups, discard_cleanups)
-	(discard_final_cleanups, save_cleanups, save_final_cleanups)
-	(restore_cleanups, restore_final_cleanups): Don't declare.
-	(do_final_cleanups): Remove parameter.
-	* common/cleanups.c (cleanup_chain, make_cleanup)
-	(make_cleanup_dtor, all_cleanups, do_cleanups)
-	(discard_my_cleanups, discard_cleanups)
-	(discard_final_cleanups, save_my_cleanups, save_cleanups)
-	(save_final_cleanups, restore_my_cleanups, restore_cleanups)
-	(null_cleanup): Remove.
-	(do_final_cleanups): Remove parameter.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* remote.c (remote_target::remote_parse_stop_reply): Use
-	unique_xmalloc_ptr.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* stabsread.c (struct stabs_field_info): Rename from field_info.
-	<list, fnlist>: Add initializers.
-	<obstack>: New member.
-	(read_member_functions, read_struct_fields, read_baseclasses):
-	Allocate on obstack.  Don't use cleanups.
-	(read_one_struct_field, read_member_functions, read_struct_fields)
-	(read_baseclasses, read_tilde_fields, attach_fn_fields_to_type)
-	(attach_fields_to_type, read_cpp_abbrev, read_member_functions)
-	(read_struct_type): Update.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* nat/linux-namespaces.c (linux_mntns_access_fs): Use SCOPE_EXIT.
-	* common/filestuff.h (make_cleanup_close): Don't declare.
-	* common/filestuff.c (do_close_cleanup, make_cleanup_close):
-	Remove.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* solib-aix.c: Use make_scope_exit.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* solib-svr4.c (svr4_parse_libraries, svr4_current_sos_direct):
-	Use make_scope_exit.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* solib-svr4.c (disable_probes_interface): Remove parameter.
-	(svr4_handle_solib_event): Use make_scope_exit.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* remote.c (struct stop_reply_deleter): Remove.
-	(stop_reply_up): Update.
-	(struct stop_reply): Derive from notif_event.  Don't typedef.
-	<regcache>: Now a std::vector.
-	(stop_reply_xfree): Remove.
-	(stop_reply::~stop_reply): Rename from stop_reply_dtr.
-	(remote_notif_stop_alloc_reply): Return a unique_ptr.  Use new.
-	(remote_target::discard_pending_stop_replies): Use delete.
-	(remote_target::remote_parse_stop_reply): Update.
-	(remote_target::process_stop_reply): Update.
-	* remote-notif.h (struct notif_event): Add virtual destructor.
-	Remove "dtr" member.
-	(struct notif_client) <alloc_event>: Return a unique_ptr.
-	(notif_event_xfree): Don't declare.
-	(notif_event_up): New typedef.
-	* remote-notif.c (remote_notif_ack, remote_notif_parse): Update.
-	(notif_event_xfree, do_notif_event_xfree): Remove.
-	(remote_notif_state_xfree): Update.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* infrun.c (displaced_step_clear_cleanup): Now a
-	forward_scope_exit type.
-	(displaced_step_prepare_throw): Update.
-	(displaced_step_fixup): Update.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* inferior.h (class inferior): Update comment.
-	* gdbthread.h (class thread_info): Update comment.
-
-2019-03-06  Joel Brobecker  <brobecker@adacore.com>
-	    Tom Tromey  <tom@tromey.com>
-
-	* stabsread.h (struct stab_section_list): Remove.
-	(coffstab_build_psymtabs): Update.
-	* dbxread.c (symbuf_sections): Now a std::vector.
-	(sect_idx): New global.
-	(fill_symbuf): Update.
-	(coffstab_build_psymtabs): Change type of stabsects parameter.
-	Update.
-	* coffread.c (struct coff_symfile_info) <stabsects>: Now a
-	std::vector.
-	(linetab, linetab_offset, linetab_size, stringtab): Move earlier.
-	(coff_locate_sections): Update.
-	(coff_symfile_read): Remove cleanups.  Update.
-	(init_stringtab): Add storage parameter.
-	(free_stringtab, free_stringtab_cleanup): Remove.
-	(init_lineno): Add storage parameter.
-	(free_linetab, free_linetab_cleanup): Remove.
-
-2019-03-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-fork.c (fork_info::clobber_regs): Delete.
-	(fork_load_infrun_state): Remove reference to 'clobber_regs'.
-	(fork_save_infrun_state): Remove 'clobber_regs' parameter.  Update
-	comment.  Adjust.
-	(scoped_switch_fork_info::scoped_switch_fork_info)
-	(checkpoint_command, linux_fork_context): Adjust
-	fork_save_infrun_state calls.
-
-2019-03-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-fork.c (inf_has_multiple_thread_cb): Delete.
-	(inf_has_multiple_threads): Return 'bool' and rewrite using
-	inferior_info::threads().
-
-2019-03-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-fork.c: Include <list>.
-	(fork_list): Now a std::list instance.
-	(fork_info): Add ctor, dtor, and in-class initialize all fields.
-	(forks_exist_p, find_last_fork): Adjust.
-	(new_fork): Delete.
-	(one_fork_p): New.
-	(add_fork): Adjust.
-	(free_fork): Delete, folded into fork_info::~fork_info().
-	(delete_fork, find_fork_ptid, find_fork_id, find_fork_pid):
-	Adjust.
-	(init_fork_list): Delete.
-	(linux_fork_killall, linux_fork_mourn_inferior)
-	(linux_fork_detach, info_checkpoints_command): Adjust.
-	(_initialize_linux_fork): No longer call init_fork_list.
-
-2019-03-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-fork.c (new_fork): New, split out of ...
-	(add_fork): ... this.  Return void.  Move "first fork" special
-	case from here, to ...
-	(checkpoint_command): ... here.
-	* linux-linux.h (add_fork): Return void.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-exp.y (direct_abs_decl): Handle TYPE*SIZE type names.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
-	    David Lecomber  <david.lecomber@arm.com>
-
-	* f-exp.y: New token, UNOP_INTRINSIC.
-	(exp): New pattern using UNOP_INTRINSIC token.
-	(f77_keywords): Add 'abs' keyword.
-	* f-lang.c: Add 'target-float.h' and 'math.h' includes.
-	(value_from_host_double): New function.
-	(evaluate_subexp_f): Support UNOP_ABS.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-lang.c (build_fortran_types): Use TYPE_CODE_CHAR for character
-	types.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-exp.y (convert_to_kind_type): Handle integer (kind=8).
-	* f-lang.c (build_fortran_types): Setup builtin_integer_s8.
-	* f-lang.h (struct builtin_f_type): Add builtin_integer_s8 field.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-exp.y (convert_to_kind_type): Handle more type kinds.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
-
-	* expprint.c (dump_subexp_body_standard): Support UNOP_KIND.
-	* f-exp.y: Define 'KIND' token.
-	(exp): New pattern for KIND expressions.
-	(ptype): Handle types with a kind extension.
-	(direct_abs_decl): Extend to spot kind extensions.
-	(f77_keywords): Add 'kind' to the list.
-	(push_kind_type): New function.
-	(convert_to_kind_type): New function.
-	* f-lang.c (evaluate_subexp_f): Support UNOP_KIND.
-	* parse.c (operator_length_standard): Likewise.
-	* parser-defs.h (enum type_pieces): Add tp_kind.
-	* std-operator.def: Add UNOP_KIND.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-exp.y (f_parse): Set yydebug.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-lang.c (evaluate_subexp_f): New function.
-	(exp_descriptor_f): New global.
-	(f_language_defn): Use exp_descriptor_f instead of
-	exp_descriptor_standard.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-exp.y (struct token): Add comments.
-	(dot_ops): Remove uppercase versions and the end marker.
-	(f77_keywords): Likewise.
-	(yylex): Use ARRAY_SIZE to iterate over dot_ops, assert all
-	entries in the dot_ops array are case insensitive, and use
-	strncasecmp to compare strings.  Also some whitespace cleanup in
-	this area.  Similar for the f77_keywords array, except entries in
-	this list might be case sensitive.
-
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* f-exp.y (struct f77_boolean_val): Add comments.
-	(boolean_values): Remove uppercase versions, and end marker.
-	(yylex): Use ARRAY_SIZE for iterating over boolean_values array,
-	and use strncasecmp to achieve case insensitivity.  Additionally,
-	perform whitespace cleanup around this code.
-
-2019-03-06  Tom Tromey  <tromey@adacore.com>
-
-	* remote-sim.c (gdbsim_target_open): Use result of
-	gdb_argv::release.
-
-2019-03-06  Richard Bunt  <richard.bunt@arm.com>
-	Dirk Schubert  <dirk.schubert@arm.com>
-	Chris January  <chris.january@arm.com>
-
-	* eval.c (evaluate_subexp_standard): Call Fortran argument
-	wrapping logic.
-	* f-lang.c (struct value): A value which can be passed into a
-	Fortran function call.
-	(fortran_argument_convert): Wrap Fortran arguments in a pointer
-	where appropriate.
-	(struct type): Value ready for a Fortran function call.
-	(fortran_preserve_arg_pointer): Undo check_typedef, the pointer
-	is needed.
-	* f-lang.h (fortran_argument_convert): Declaration.
-	(fortran_preserve_arg_pointer): Declaration.
-	* infcall.c (value_arg_coerce): Call Fortran argument logic.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* python/py-prettyprint.c (print_string_repr): Remove #if.
-	* python/py-utils.c (unicode_to_encoded_string): Remove #if.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* target.c (the_dummy_target): Move later.  Change type to
-	"dummy_target".
-	(initialize_targets): Don't initialize the_dummy_target.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* gdb_bfd.c (gdb_bfd_fdopenr): Remove.
-	* gdb_bfd.h (gdb_bfd_fdopenr): Don't declare.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* windows-nat.c (windows_nat_target::attach)
-	(windows_nat_target::detach): Don't call gdb_flush.
-	* valprint.c (generic_val_print, val_print, val_print_string):
-	Don't call gdb_flush.
-	* utils.c (defaulted_query): Don't call gdb_flush.
-	* typeprint.c (print_type_scalar): Don't call gdb_flush.
-	* target.c (target_announce_detach): Don't call gdb_flush.
-	* sparc64-tdep.c (adi_print_versions): Don't call gdb_flush.
-	* remote.c (extended_remote_target::attach): Don't call
-	gdb_flush.
-	* procfs.c (procfs_target::detach): Don't call gdb_flush.
-	* printcmd.c (do_examine): Don't call gdb_flush.
-	(info_display_command): Don't call gdb_flush.
-	* p-valprint.c (pascal_val_print): Don't call gdb_flush.
-	* nto-procfs.c (nto_procfs_target::attach): Don't call gdb_flush.
-	* memattr.c (info_mem_command): Don't call gdb_flush.
-	* mdebugread.c (mdebug_build_psymtabs): Don't call gdb_flush.
-	* m2-valprint.c (m2_val_print): Don't call gdb_flush.
-	* infrun.c (follow_exec, handle_command): Don't call gdb_flush.
-	* inf-ptrace.c (inf_ptrace_target::attach): Don't call gdb_flush.
-	* hppa-tdep.c (unwind_command): Don't call gdb_flush.
-	* gnu-nat.c (gnu_nat_target::attach): Don't call gdb_flush.
-	(gnu_nat_target::detach): Don't call gdb_flush.
-	* f-valprint.c (f_val_print): Don't call gdb_flush.
-	* darwin-nat.c (darwin_nat_target::attach): Don't call gdb_flush.
-	* cli/cli-script.c (read_command_lines): Don't call gdb_flush.
-	* cli/cli-cmds.c (shell_escape, print_disassembly): Don't call
-	gdb_flush.
-	* c-valprint.c (c_val_print): Don't call gdb_flush.
-	* ada-valprint.c (ada_print_scalar): Don't call gdb_flush.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* varobj.c (update_dynamic_varobj_children): Update.
-	(install_default_visualizer): Use reset, not release.
-	* value.c (set_internalvar): Update.
-	* dwarf2loc.c (value_of_dwarf_reg_entry): Update.
-	* common/gdb_ref_ptr.h (class ref_ptr) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* remote.c (class scoped_remote_fd) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* macroexp.c (struct macro_buffer) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* nat/linux-btrace.c (linux_enable_bts, linux_enable_pt): Update.
-	* common/scoped_mmap.h (class scoped_mmap) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* common/scoped_fd.h (class scoped_fd) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* parser-defs.h (struct parser_state) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
-
-2019-03-05  Tom Tromey  <tromey@adacore.com>
-
-	* utils.h (class gdb_argv) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
-	* common/common-defs.h (ATTRIBUTE_UNUSED_RESULT): Define.
-
-2019-03-02  Eli Zaretskii  <eliz@gnu.org>
-
-	* xml-syscall.c (xml_list_syscalls_by_group): Drop 'struct' from
-	for-loop range, to avoid compiler warnings.
-
-	* tui/tui.c (tui_enable) [__MINGW32__]: Don't declare 'cap', to
-	avoid compiler warnings about unused variables.
-
-	* NEWS: Mention end of support for native debugging on MS-Windows
-	before XP.
-
-	PR gdb/24292
-	* common/netstuff.c:
-	* gdbserver/gdbreplay.c
-	* gdbserver/remote-utils.c:
-	* ser-tcp.c:
-	* unittests/parse-connection-spec-selftests.c [USE_WIN32API]:
-	Include ws2tcpip.h instead of wsiapi.h and winsock2.h.  Redefine
-	_WIN32_WINNT to 0x0501 if defined to a smaller value, as
-	'getaddrinfo' and 'freeaddrinfo' were not available before
-	Windows XP, and mingw.org's MinGW headers by default define
-	_WIN32_WINNT to 0x500.
-
-2019-03-01  Gary Benson <gbenson@redhat.com>
-
-	* coffread.c (coff_start_symtab): Remove unnecessary xstrdup.
-
-2019-02-28  Brian Vandenberg  <phantall@gmail.com>
-	    Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
-
-	PR gdb/8527
-	* procfs.c (proc_wait_for_stop): Wrap write of PCWSTOP in
-	set_sigint_trap, clear_sigint_trap.
-
-2019-02-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* target.c (target_detach): Clear the regcache and the
-	frame cache.
-
-2019-02-27  Pedro Alves  <palves@redhat.com>
-
-	* utils.c (set_screen_size): When we cap the height/width sizes,
-	tweak the corresponding command variable to show "unlimited":
-
-2019-02-27  Saagar Jha  <saagar@saagarjha.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* utils.c (set_screen_size): Reduce "infinite" rows and columns
-	before calling rl_set_screen_size.
-
-2019-02-27  Tom Tromey  <tromey@adacore.com>
-
-	* configure.ac (HAVE_LIBPYTHON2_4, HAVE_LIBPYTHON2_5): Never
-	define.
-	* python/py-value.c: Remove Python 2.4 workaround.
-	* python/py-utils.c (gdb_pymodule_addobject): Remove Python 2.4
-	workaround.
-	* python/py-type.c (convert_field, gdbpy_initialize_types): Remove
-	Python 2.4 workaround.
-	* python/python-internal.h: Remove Python 2.4 comment.
-	(Py_ssize_t): Don't define.
-	(PyVarObject_HEAD_INIT, Py_TYPE): Don't define.
-	(gdb_Py_DECREF): Remove Python 2.4 workaround.
-	(gdb_PyObject_GetAttrString, PyObject_GetAttrString): Remove.
-	(gdb_PyObject_HasAttrString, PyObject_HasAttrString): Remove.
-	* python/python.c (do_start_initialization): Remove Python 2.4
-	workaround.
-	* python/py-prettyprint.c (class dummy_python_frame): Remove.
-	(print_children): Remove Python 2.4 workaround.
-	* python/py-inferior.c (buffer_procs): Remove Python 2.4
-	workaround.
-	(CHARBUFFERPROC_NAME): Remove.
-	* python/py-breakpoint.c (gdbpy_initialize_breakpoints): Remove
-	Python 2.4 workaround.
-
-2019-02-27  Kevin Buettner  <kevinb@redhat.com>
-
-	* NEWS: Note minimum Python version.
-
-2019-02-27  Kevin Buettner  <kevinb@redhat.com>
-
-	* python/py-inferior.c (infpy_write_memory): Remove non-IS_PY3K
-	code from these functions.  Remove corresponding ifdefs.  Use
-	Py_buffer_up instead of explicit calls to PyBuffer_Release.
-	Remove gotos and target of gotos.
-	(infpy_search_memory): Likewise.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/hppa-tdep.c (hppa_dummy_id): Delete.
-	(hppa_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/h8300-tdep.c (h8300_unwind_pc): Delete.
-	(h8300_unwind_sp): Delete.
-	(h8300_dummy_id): Delete.
-	(h8300_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/ft32-tdep.c (ft32_dummy_id): Delete.
-	(ft32_unwind_pc): Delete.
-	(ft32_unwind_sp): Delete.
-	(ft32_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/frv-tdep.c (frv_dummy_id): Delete.
-	(frv_unwind_pc): Delete.
-	(frv_unwind_sp): Delete.
-	(frv_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/riscv-tdep.c (riscv_dummy_id): Delete.
-	(riscv_unwind_pc): Delete.
-	(riscv_unwind_sp): Delete.
-	(riscv_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/csky-tdep.c (csky_dummy_id): Delete.
-	(csky_unwind_pc): Delete.
-	(csky_unwind_sp): Delete.
-	(csky_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/cris-tdep.c (cris_dummy_id): Delete.
-	(cris_unwind_pc): Delete.
-	(cris_unwind_sp): Delete.
-	(cris_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/bfin-tdep.c (bfin_dummy_id): Delete.
-	(bfin_unwind_pc): Delete.
-	(bfin_gdbarch_init): Don't register deleted functions with gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/arm-tdep.c (arm_dummy_id): Delete.
-	(arm_unwind_pc): Delete.
-	(arm_unwind_sp): Delete.
-	(arm_gdbarch_init): Don't register deleted functions with gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/arc-tdep.c (arc_dummy_id): Delete.
-	(arc_unwind_pc): Delete.
-	(arc_unwind_sp): Delete.
-	(arc_gdbarch_init): Don't register deleted functions with gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/alpha-tdep.c (alpha_dummy_id): Delete.
-	(alpha_unwind_pc): Delete.
-	(alpha_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb/aarch64-tdep.c (aarch64_dummy_id): Delete.
-	(aarch64_unwind_pc): Delete.
-	(aarch64_unwind_sp): Delete.
-	(aarch64_gdbarch_init): Don't register deleted functions with
-	gdbarch.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdbtypes.c (type_align): Don't consider static members when
-	computing structure alignment.
-
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* arc-tdep.c (arc_type_align): Provide alignment for basic types,
-	return 0 for other types.
-	* arch-utils.c (default_type_align): Always return 0.
-	* gdbarch.h: Regenerate.
-	* gdbarch.sh (type_align): Extend comment.
-	* gdbtypes.c (type_align): Add additional comments, always call
-	gdbarch_type_align before applying the default rules.
-	* i386-tdep.c (i386_type_align): Return 0 as the default rule,
-	generic code will then apply a suitable default.
-	* nios2-tdep.c (nios2_type_align): Provide alignment for basic
-	types, return 0 for other types.
-
-2019-02-27  Joel Brobecker  <brobecker@adacore.com>
-
-	* NEWS: Create a new section for the next release branch.
-	Rename the section of the current branch, now that it has
-	been cut.
-
-2019-02-27  Joel Brobecker  <brobecker@adacore.com>
-
-	GDB 8.3 branch created (143420fb0d5ae54323ba9953f0818c194635228d):
-	* version.in: Bump version to 8.3.50.DATE-git.
-
-2019-02-26  Simon Marchi  <simon.marchi@efficios.com>
-
-	* aix-thread.c (ptid_cmp): Remove unused variable.
-	(get_signaled_thread): Likewise.
-	(store_regs_user_thread): Likewise.
-	(store_regs_kernel_thread): Likewise.
-	(fetch_regs_kernel_thread): Remove shadowed variable.
-
-2019-02-26  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* features/riscv/32bit-cpu.xml: Add register numbers.
-	* features/riscv/32bit-fpu.c: Regenerate.
-	* features/riscv/32bit-fpu.xml: Add register numbers.
-	* features/riscv/64bit-cpu.xml: Add register numbers.
-	* features/riscv/64bit-fpu.c: Regenerate.
-	* features/riscv/64bit-fpu.xml: Add register numbers.
-
-2019-02-26  Kevin Buettner  <kevinb@redhat.com>
-
-	* NEWS: Mention two argument form of gdb.Value constructor.
-	* python/py-value.c (convert_buffer_and_type_to_value): New
-	function.
-	(valpy_new): Parse arguments via gdb_PyArg_ParseTupleAndKeywords.
-	Add support for handling an optional second argument.  Call
-	convert_buffer_and_type_to_value as appropriate.
-	* python/python-internal.h (Py_buffer_deleter): New struct.
-	(Py_buffer_up): New typedef.
-
-2019-02-25  John Baldwin  <jhb@FreeBSD.org>
-
-	* dwarf2read.c (dwarf2_get_dwz_file): Reset dwz_bfd to nullptr
-	instead of releasing ownership.
-
-2019-02-25  Jordan Rupprecht  <rupprecht@google.com>
-
-	* dwarf2read.c (open_and_init_dwp_file): Call
-	elf_numsections instead of bfd_count_sections to initialize
-	dwp_file->num_sections.
-
-2019-02-25  Tom Tromey  <tromey@adacore.com>
-
-	* solib-darwin.c (darwin_get_dyld_bfd): Don't release dyld_bfd.
-
-2019-02-23  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gcore.in: Add '--readnever' option when invoking GDB.
-
-2019-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* MAINTAINERS: Update my email address.
-
-2019-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* build-id.c (build_id_to_debug_bfd_1): New function.
-	(build_id_to_debug_bfd): Look for separate debug file in
-	sysroot.
-
-2019-02-22  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdbarch.sh: Update the copyright year range that is placed into
-	generated files.
-
-2019-02-22  Keith Seitz  <keiths@redhat.com>
-
-	PR symtab/23853
-	* linespec.c (create_sals_line_offset): Search for the default
-	symtab's filename instead of its fullname.
-
-2019-02-21  Alan Hayward  <alan.hayward@arm.com>
-
-	* NEWS: Update style defaults.
-
-2019-02-21  Alan Hayward  <alan.hayward@arm.com>
-
-	* main.c (captured_main_1): Disable styling in batch mode.
-
-2019-02-20  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (symtab_symbol_info): Fix typos.
-
-2019-02-20  Tom Tromey  <tromey@adacore.com>
-
-	* findcmd.c (_initialize_mem_search): Use upper case for
-	metasyntactic variables.
-
-2019-02-20  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c (aarch64_add_reggroups): New function.
-	(aarch64_gdbarch_init): Call aarch64_add_reggroups.
-
-2019-02-19  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* top.h (source_file_name): Change to std::string.
-	* top.c (source_file_name): Likewise.
-	(command_line_input): Adjust.
-	* cli/cli-script.c (script_from_file): Adjust.
-
-2019-02-19  Tom Tromey  <tromey@adacore.com>
-
-	* ravenscar-thread.c
-	(ravenscar_thread_target::update_thread_list): Don't call
-	ada_build_task_list.
-	* ada-lang.h (ada_build_task_list): Don't declare.
-	* ada-tasks.c (struct ada_tasks_inferior_data)
-	<task_list_valid_p>: Now bool.
-	(read_known_tasks, ada_task_list_changed)
-	(ada_tasks_invalidate_inferior_data): Update.
-	(read_known_tasks_array): Return bool.
-	(read_known_tasks_list): Likewise.
-	(read_known_tasks): Return void.
-	(ada_build_task_list): Now static.
-
-2019-02-18  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdbtypes.c (type_align): Allow alignment of TYPE_CODE_METHODPTR
-	and TYPE_CODE_MEMBERPTR to be overridden by the gdbarch.
-
-2019-02-18  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* ada-task.c (_initialize_tasks): Use 'with_cleanup' register
-	variant for ada_tasks_pspace_data_handle and
-	ada_tasks_inferior_data_handle.
-	(ada_tasks_pspace_data_cleanup): New function.
-	(ada_tasks_inferior_data_cleanup): New function.
-
-2019-02-17  Tom Tromey  <tom@tromey.com>
-
-	* macrotab.h (macro_source_fullname): Return a std::string.
-	* macrotab.c (macro_include, check_for_redefinition)
-	(macro_undef, macro_lookup_definition, foreach_macro)
-	(foreach_macro_in_scope): Update.
-	(macro_source_fullname): Return a std::string.
-	* macrocmd.c (show_pp_source_pos): Update.
-
-2019-02-17  Tom Tromey  <tom@tromey.com>
-
-	* macrocmd.c (show_pp_source_pos): Style the file names.
-
-2019-02-17  Tom Tromey  <tom@tromey.com>
-
-	PR tui/24197:
-	* tui/tui-source.c (tui_set_source_content_nil): Rewrite.
-
-2019-02-17  Tom Tromey  <tom@tromey.com>
-
-	* ada-lang.c (user_select_syms): Use filtered printing.
-	* utils.c (wrap_style): New global.
-	(desired_style): Remove.
-	(emit_style_escape): Add stream parameter.
-	(set_output_style, reset_terminal_style, prompt_for_continue):
-	Update.
-	(flush_wrap_buffer): Only flush gdb_stdout.
-	(wrap_here): Set wrap_style.
-	(fputs_maybe_filtered): Clear the wrap buffer on exception.  Don't
-	treat escape sequences as a character.  Change when wrap buffer is
-	flushed.
-	(fputs_styled): Do not set the output style when the default is
-	requested.
-	* ui-style.h (struct ui_file_style) <is_default>: New method.
-	* source.c (print_source_lines_base): Emit escape sequences in one
-	piece.
-
-2019-02-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbtypes.c (type_align): Handle TYPE_CODE_RANGE the same as
-	integers and enumeration types.
-
-2019-02-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* ada-lang.c (standard_lookup): Use ada_lookup_encoded_symbol
-	instead of lookup_symbol_in_language
-	(do_exact_match): New function.
-	(ada_get_symbol_name_matcher): Return do_exact_match when
-	doing a verbatim match.
-
-2019-02-15  Tom Tromey  <tromey@adacore.com>
-
-	* ravenscar-thread.c (ravenscar_thread_target::resume)
-	(ravenscar_thread_target::wait): Special case wildcard requests.
-
-2019-02-15  Tom Tromey  <tromey@adacore.com>
-
-	* ravenscar-thread.c (base_ptid): Remove.
-	(struct ravenscar_thread_target) <close>: New method.
-	<m_base_ptid>: New member.
-	<update_inferior_ptid, active_task, task_is_currently_active,
-	runtime_initialized>: Declare methods.
-	<ravenscar_thread_target>: Add constructor.
-	(ravenscar_thread_target::task_is_currently_active)
-	(ravenscar_thread_target::update_inferior_ptid)
-	(ravenscar_runtime_initialized): Rename.  Now methods.
-	(ravenscar_thread_target::resume, ravenscar_thread_target::wait)
-	(ravenscar_thread_target::update_thread_list): Update.
-	(ravenscar_thread_target::active_task): Now method.
-	(ravenscar_thread_target::store_registers)
-	(ravenscar_thread_target::prepare_to_store)
-	(ravenscar_thread_target::prepare_to_store)
-	(ravenscar_thread_target::mourn_inferior): Update.
-	(ravenscar_inferior_created): Use "new" to create target.
-	(ravenscar_thread_target::get_ada_task_ptid): Update.
-	(_initialize_ravenscar): Don't initialize base_ptid.
-	(ravenscar_ops): Remove global.
-
-2019-02-15  Tom Tromey  <tromey@adacore.com>
-
-	* target.h (push_target): Declare new overload.
-	* target.c (push_target): New overload, taking an rvalue reference.
-	* remote.c (remote_target::open_1): Use push_target overload.
-	* corelow.c (core_target_open): Use push_target overload.
-
-2019-02-15  Tom Tromey  <tromey@adacore.com>
-
-	* ravenscar-thread.c (is_ravenscar_task)
-	(ravenscar_task_is_currently_active): Return bool.
-	(ravenscar_update_inferior_ptid, get_running_thread_msymbol)
-	(_initialize_ravenscar): Remove "(void)".
-	(has_ravenscar_runtime, ravenscar_runtime_initialized): Likewise.
-	Return bool.
-
-2019-02-15  Tom Tromey  <tromey@adacore.com>
-
-	* ravenscar-thread.c (ravenscar_runtime_initializer)
-	(has_ravenscar_runtime, get_running_thread_id)
-	(ravenscar_thread_target::resume): Fix indentation.
-
-2019-02-15  Tom Tromey  <tromey@adacore.com>
-
-	* sparc-ravenscar-thread.c (struct sparc_ravenscar_ops): Derive
-	from ravenscar_arch_ops.
-	(sparc_ravenscar_ops::fetch_registers)
-	(sparc_ravenscar_ops::store_registers): Now methods.
-	(sparc_ravenscar_prepare_to_store): Remove.
-	(sparc_ravenscar_ops): Redefine.
-	* ravenscar-thread.h (struct ravenscar_arch_ops): Add virtual
-	methods and destructor.  Remove members.
-	* ravenscar-thread.c (ravenscar_thread_target::fetch_registers)
-	(ravenscar_thread_target::store_registers)
-	(ravenscar_thread_target::prepare_to_store): Update.
-	* ppc-ravenscar-thread.c (ppc_ravenscar_generic_prepare_to_store):
-	Remove.
-	(struct ppc_ravenscar_powerpc_ops): Derive from
-	ravenscar_arch_ops.
-	(ppc_ravenscar_powerpc_ops::fetch_registers)
-	(ppc_ravenscar_powerpc_ops::store_registers): Now methods.
-	(ppc_ravenscar_powerpc_ops): Redefine.
-	(struct ppc_ravenscar_e500_ops): Derive from ravenscar_arch_ops.
-	(ppc_ravenscar_e500_ops::fetch_registers)
-	(ppc_ravenscar_e500_ops::store_registers): Now methods.
-	(ppc_ravenscar_e500_ops): Redefine.
-	* aarch64-ravenscar-thread.c
-	(aarch64_ravenscar_generic_prepare_to_store): Remove.
-	(struct aarch64_ravenscar_ops): Derive from ravenscar_arch_ops.
-	(aarch64_ravenscar_fetch_registers)
-	(aarch64_ravenscar_store_registers): Now methods.
-	(aarch64_ravenscar_ops): Redefine.
-
-2019-02-15  Tom Tromey  <tromey@adacore.com>
-
-	* ravenscar-thread.c (ravenscar_thread_target::stopped_by_sw_breakpoint)
-	(ravenscar_thread_target::stopped_by_hw_breakpoint)
-	(ravenscar_thread_target::stopped_by_watchpoint)
-	(ravenscar_thread_target::stopped_data_address)
-	(ravenscar_thread_target::core_of_thread): Use scoped_restore.
-
-2019-02-15  Tom Tromey  <tromey@adacore.com>
-
-	* ravenscar-thread.c: Fix some typos.
-
-2019-02-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	    Tom Tromey  <tromey@adacore.com>
-
-	* ada-lang.c (ada_exception_sal): Change addr_string to a
-	std::string.
-	(create_ada_exception_catchpoint): Update.
-
-2019-02-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	    Tom Tromey  <tromey@adacore.com>
-
-	* breakpoint.c (~bp_location): Rename from bp_location_dtor.
-	(bp_location_ops): Remove.
-	(base_breakpoint_allocate_location): Update.
-	(free_bp_location): Update.
-	* ada-lang.c (class ada_catchpoint_location)
-	<ada_catchpoint_location>: Remove ops parameter.
-	(ada_catchpoint_location_dtor): Remove.
-	(ada_catchpoint_location_ops): Remove.
-	(allocate_location_exception): Update.
-	* breakpoint.h (struct bp_location_ops): Remove.
-	(class bp_location) <bp_location>: Remove bp_location_ops
-	parameter.
-	<~bp_location>: Add destructor.
-	<ops>: Remove.
-
-2019-02-14  Thomas Schwinge  <thomas@codesourcery.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* remote.c (remote_target::remote_parse_stop_reply): Avoid using
-	'PATH_MAX'.
-
-2019-02-14  David Michael  <fedora.dm0@gmail.com>
-	    Samuel Thibault  <samuel.thibault@gnu.org>
-	    Thomas Schwinge  <thomas@codesourcery.com>
-
-	* gnu-nat.c (S_proc_getmsgport_reply, S_proc_task2proc_reply)
-	(S_proc_pid2proc_reply): Adjust to Hurd "proc" interface changes.
-
-2019-02-14  Thomas Schwinge  <thomas@codesourcery.com>
-
-	* gnu-nat.c (gnu_write_inferior, parse_int_arg, _parse_bool_arg)
-	(check_empty): Use "const char *".
-
-	* gnu-nat.c (gnu_nat_target::detach): Instead of
-	'detach_inferior (pid)' call
-	'detach_inferior (find_inferior_pid (pid))'.
-
-	* configure.nat [gdb_host == i386gnu] (NATDEPFILES): Add
-	'nat/fork-inferior.o'.
-	* gnu-nat.c: #include "nat/fork-inferior.h".
-
-	* gnu-nat.c (gnu_nat_target::detach): Instead of
-	'inf_child_maybe_unpush_target (ops)' call 'maybe_unpush_target'.
-	* gnu-nat.h: #include "inf-child.h".
-	* i386-gnu-nat.c (gnu_fetch_registers): Rename/move to
-	'i386_gnu_nat_target::fetch_registers'.
-	(gnu_store_registers): Rename/move to
-	'i386_gnu_nat_target::store_registers'.
-
-	* config/i386/nm-i386gnu.h: Don't "#include" any files.
-	* gnu-nat.h (mach_thread_info): New function.
-	* gnu-nat.c (thread_takeover_sc_cmd): Use it.
-
-	* config/i386/nm-i386gnu.h (gnu_target_pid_to_str): Remove.
-
-2019-02-14  Frederic Konrad  <konrad@adacore.com>
-
-	* riscv-rdep.c (riscv_type_alignment): Handle TYPE_CODE_RANGE.
-
-2019-02-14  Joel Brobecker  <brobecker@adacore.com>
-
-	* windows-nat.c (windows_add_thread): Add new parameter
-	"main_thread_p" with default value set to false.  Update
-	function documentation as well as all callers.
-	(windows_delete_thread): Likewise.
-	(fake_create_process): Update call to windows_add_thread.
-	(get_windows_debug_event) <CREATE_THREAD_DEBUG_EVENT>
-	<CREATE_PROCESS_DEBUG_EVENT>: Likewise.
-	<EXIT_THREAD_DEBUG_EVENT, EXIT_PROCESS_DEBUG_EVENT>: Update
-	call to windows_delete_thread.
-
-2019-02-13  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* MAINTAINERS: Add Andrew Burgess as global maintainer.
-
-2019-02-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* symfile.c (find_separate_debug_file): Use canonical path of
-	sysroot with child_path instead of gdb_sysroot if it is valid.
-
-2019-02-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* symfile.c (find_separate_debug_file): Use child_path to
-	determine if an object file is under a sysroot.
-
-2019-02-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
-	unittests/child-path-selftests.c.
-	* common/pathstuff.c (child_path): New function.
-	* common/pathstuff.h (child_path): New prototype.
-	* unittests/child-path-selftests.c: New file.
-
-2019-02-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* symfile.c (find_separate_debug_file): Look for separate debug
-	files in debug directories under the sysroot.
-
-2019-02-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* symtab.h (struct minimal_symbol data_p): New const method.
-	(struct minimal_symbol text_p): Likewise.
-	* symtab.c (output_source_filename): Use file name style
-	to print file name.
-	(print_symbol_info): Likewise.
-	(print_msymbol_info): Use address style to print addresses.
-	Use function name style to print executable text symbols.
-	(expand_symtab_containing_pc): Use data_p.
-	(find_pc_sect_compunit_symtab): Likewise.
-
-2019-02-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* breakpoint.c (describe_other_breakpoints): Use address style
-	to print addresses.
-	(say_where): Likewise.
-
-2019-02-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* ada-typeprint.c (print_func_type): Print function name
-	style to print function name.
-	* c-typeprint.c (c_print_type_1): Likewise.
-
-2019-02-11  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-linux-tdep.c (aarch64_linux_get_syscall_number): Check
-	for execve.
-
-2019-02-10  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* c-exp.y (direct_abs_decl): Use emplace_back to record the
-	type_stack.
-
-2019-02-10  Joel Brobecker  <brobecker@adacore.com>
-
-	* ada-varobj.c (ada_value_is_changeable_p): Add handling of
-	TYPE_CODE_REF types.
-
-2019-02-08  Jim Wilson  <jimw@sifive.com>
-
-	* riscv-linux-tdep.c (riscv_linux_fregmap): New.
-	(riscv_linux_fregset): New.
-	(riscv_linux_iterate_over_regset_sections): Call cb for .reg2 section.
-
-2019-02-07  Tom Tromey  <tom@tromey.com>
-
-	* thread.c (thread_cancel_execution_command): Update.
-	* thread-fsm.h (struct thread_fsm): Add constructor, destructor,
-	methods.
-	(struct thread_fsm_ops): Remove.
-	(thread_fsm_ctor, thread_fsm_delete, thread_fsm_clean_up)
-	(thread_fsm_should_stop, thread_fsm_return_value)
-	(thread_fsm_set_finished, thread_fsm_finished_p)
-	(thread_fsm_async_reply_reason, thread_fsm_should_notify_stop):
-	Don't declare.
-	* mi/mi-interp.c (mi_on_normal_stop_1): Update.
-	* infrun.c (clear_proceed_status_thread)
-	(clean_up_just_stopped_threads_fsms, fetch_inferior_event)
-	(print_stop_event): Update.
-	* infcmd.c (struct step_command_fsm): Inherit from thread_fsm.
-	Add constructor.
-	(step_command_fsm_ops): Remove.
-	(new_step_command_fsm): Remove.
-	(step_1): Update.
-	(step_command_fsm::should_stop): Rename from
-	step_command_fsm_should_stop.
-	(step_command_fsm::clean_up): Rename from
-	step_command_fsm_clean_up.
-	(step_command_fsm::do_async_reply_reason): Rename from
-	step_command_fsm_async_reply_reason.
-	(struct until_next_fsm): Inherit from thread_fsm.  Add
-	constructor.
-	(until_next_fsm_ops): Remove.
-	(new_until_next_fsm): Remove.
-	(until_next_fsm::should_stop): Rename from
-	until_next_fsm_should_stop.
-	(until_next_fsm::clean_up): Rename from until_next_fsm_clean_up.
-	(until_next_fsm::do_async_reply_reason): Rename from
-	until_next_fsm_async_reply_reason.
-	(struct finish_command_fsm): Inherit from thread_fsm.  Add
-	constructor.  Change type of breakpoint.
-	(finish_command_fsm_ops): Remove.
-	(new_finish_command_fsm): Remove.
-	(finish_command_fsm::should_stop): Rename from
-	finish_command_fsm_should_stop.
-	(finish_command_fsm::clean_up): Rename from
-	finish_command_fsm_clean_up.
-	(finish_command_fsm::return_value): Rename from
-	finish_command_fsm_return_value.
-	(finish_command_fsm::do_async_reply_reason): Rename from
-	finish_command_fsm_async_reply_reason.
-	(finish_command): Update.
-	* infcall.c (struct call_thread_fsm): Inherit from thread_fsm.
-	Add constructor.
-	(call_thread_fsm_ops): Remove.
-	(call_thread_fsm::call_thread_fsm): Rename from
-	new_call_thread_fsm.
-	(call_thread_fsm::should_stop): Rename from
-	call_thread_fsm_should_stop.
-	(call_thread_fsm::should_notify_stop): Rename from
-	call_thread_fsm_should_notify_stop.
-	(run_inferior_call, call_function_by_hand_dummy): Update.
-	* cli/cli-interp.c (should_print_stop_to_console): Update.
-	* breakpoint.c (struct until_break_fsm): Inherit from thread_fsm.
-	Add constructor.  Change type of location_breakpoint,
-	caller_breakpoint.
-	(until_break_fsm_ops): Remove.
-	(new_until_break_fsm): Remove.
-	(until_break_fsm::should_stop): Rename from
-	until_break_fsm_should_stop.
-	(until_break_fsm::clean_up): Rename from
-	until_break_fsm_clean_up.
-	(until_break_fsm::do_async_reply_reason): Rename from
-	until_break_fsm_async_reply_reason.
-	(until_break_command): Update.
-	* thread-fsm.c: Remove.
-	* Makefile.in (COMMON_SFILES): Remove thread-fsm.c.
-
-2019-02-07  Tom Tromey  <tom@tromey.com>
-
-	* yy-remap.h: Add include guard.
-	* xtensa-tdep.h: Add include guard.
-	* xcoffread.h: Rename include guard.
-	* varobj-iter.h: Add include guard.
-	* tui/tui.h: Rename include guard.
-	* tui/tui-winsource.h: Rename include guard.
-	* tui/tui-wingeneral.h: Rename include guard.
-	* tui/tui-windata.h: Rename include guard.
-	* tui/tui-win.h: Rename include guard.
-	* tui/tui-stack.h: Rename include guard.
-	* tui/tui-source.h: Rename include guard.
-	* tui/tui-regs.h: Rename include guard.
-	* tui/tui-out.h: Rename include guard.
-	* tui/tui-layout.h: Rename include guard.
-	* tui/tui-io.h: Rename include guard.
-	* tui/tui-hooks.h: Rename include guard.
-	* tui/tui-file.h: Rename include guard.
-	* tui/tui-disasm.h: Rename include guard.
-	* tui/tui-data.h: Rename include guard.
-	* tui/tui-command.h: Rename include guard.
-	* tic6x-tdep.h: Add include guard.
-	* target/waitstatus.h: Rename include guard.
-	* target/wait.h: Rename include guard.
-	* target/target.h: Rename include guard.
-	* target/resume.h: Rename include guard.
-	* target-float.h: Rename include guard.
-	* stabsread.h: Add include guard.
-	* rs6000-tdep.h: Add include guard.
-	* riscv-fbsd-tdep.h: Add include guard.
-	* regformats/regdef.h: Rename include guard.
-	* record.h: Rename include guard.
-	* python/python.h: Rename include guard.
-	* python/python-internal.h: Rename include guard.
-	* python/py-stopevent.h: Rename include guard.
-	* python/py-ref.h: Rename include guard.
-	* python/py-record.h: Rename include guard.
-	* python/py-record-full.h: Rename include guard.
-	* python/py-record-btrace.h: Rename include guard.
-	* python/py-instruction.h: Rename include guard.
-	* python/py-events.h: Rename include guard.
-	* python/py-event.h: Rename include guard.
-	* procfs.h: Add include guard.
-	* proc-utils.h: Add include guard.
-	* p-lang.h: Add include guard.
-	* or1k-tdep.h: Rename include guard.
-	* observable.h: Rename include guard.
-	* nto-tdep.h: Rename include guard.
-	* nat/x86-linux.h: Rename include guard.
-	* nat/x86-linux-dregs.h: Rename include guard.
-	* nat/x86-gcc-cpuid.h: Add include guard.
-	* nat/x86-dregs.h: Rename include guard.
-	* nat/x86-cpuid.h: Rename include guard.
-	* nat/ppc-linux.h: Rename include guard.
-	* nat/mips-linux-watch.h: Rename include guard.
-	* nat/linux-waitpid.h: Rename include guard.
-	* nat/linux-ptrace.h: Rename include guard.
-	* nat/linux-procfs.h: Rename include guard.
-	* nat/linux-osdata.h: Rename include guard.
-	* nat/linux-nat.h: Rename include guard.
-	* nat/linux-namespaces.h: Rename include guard.
-	* nat/linux-btrace.h: Rename include guard.
-	* nat/glibc_thread_db.h: Rename include guard.
-	* nat/gdb_thread_db.h: Rename include guard.
-	* nat/gdb_ptrace.h: Rename include guard.
-	* nat/fork-inferior.h: Rename include guard.
-	* nat/amd64-linux-siginfo.h: Rename include guard.
-	* nat/aarch64-sve-linux-sigcontext.h: Rename include guard.
-	* nat/aarch64-sve-linux-ptrace.h: Rename include guard.
-	* nat/aarch64-linux.h: Rename include guard.
-	* nat/aarch64-linux-hw-point.h: Rename include guard.
-	* mn10300-tdep.h: Add include guard.
-	* mips-linux-tdep.h: Add include guard.
-	* mi/mi-parse.h: Rename include guard.
-	* mi/mi-out.h: Rename include guard.
-	* mi/mi-main.h: Rename include guard.
-	* mi/mi-interp.h: Rename include guard.
-	* mi/mi-getopt.h: Rename include guard.
-	* mi/mi-console.h: Rename include guard.
-	* mi/mi-common.h: Rename include guard.
-	* mi/mi-cmds.h: Rename include guard.
-	* mi/mi-cmd-break.h: Rename include guard.
-	* m2-lang.h: Add include guard.
-	* location.h: Rename include guard.
-	* linux-record.h: Rename include guard.
-	* linux-nat.h: Add include guard.
-	* linux-fork.h: Add include guard.
-	* i386-darwin-tdep.h: Rename include guard.
-	* hppa-linux-offsets.h: Add include guard.
-	* guile/guile.h: Rename include guard.
-	* guile/guile-internal.h: Rename include guard.
-	* gnu-nat.h: Rename include guard.
-	* gdb-stabs.h: Rename include guard.
-	* frv-tdep.h: Add include guard.
-	* f-lang.h: Add include guard.
-	* event-loop.h: Add include guard.
-	* darwin-nat.h: Rename include guard.
-	* cp-abi.h: Rename include guard.
-	* config/sparc/nm-sol2.h: Rename include guard.
-	* config/nm-nto.h: Rename include guard.
-	* config/nm-linux.h: Add include guard.
-	* config/i386/nm-i386gnu.h: Rename include guard.
-	* config/djgpp/nl_types.h: Rename include guard.
-	* config/djgpp/langinfo.h: Rename include guard.
-	* compile/gcc-cp-plugin.h: Add include guard.
-	* compile/gcc-c-plugin.h: Add include guard.
-	* compile/compile.h: Rename include guard.
-	* compile/compile-object-run.h: Rename include guard.
-	* compile/compile-object-load.h: Rename include guard.
-	* compile/compile-internal.h: Rename include guard.
-	* compile/compile-cplus.h: Rename include guard.
-	* compile/compile-c.h: Rename include guard.
-	* common/xml-utils.h: Rename include guard.
-	* common/x86-xstate.h: Rename include guard.
-	* common/version.h: Rename include guard.
-	* common/vec.h: Rename include guard.
-	* common/tdesc.h: Rename include guard.
-	* common/selftest.h: Rename include guard.
-	* common/scoped_restore.h: Rename include guard.
-	* common/scoped_mmap.h: Rename include guard.
-	* common/scoped_fd.h: Rename include guard.
-	* common/safe-iterator.h: Rename include guard.
-	* common/run-time-clock.h: Rename include guard.
-	* common/refcounted-object.h: Rename include guard.
-	* common/queue.h: Rename include guard.
-	* common/ptid.h: Rename include guard.
-	* common/print-utils.h: Rename include guard.
-	* common/preprocessor.h: Rename include guard.
-	* common/pathstuff.h: Rename include guard.
-	* common/observable.h: Rename include guard.
-	* common/netstuff.h: Rename include guard.
-	* common/job-control.h: Rename include guard.
-	* common/host-defs.h: Rename include guard.
-	* common/gdb_wait.h: Rename include guard.
-	* common/gdb_vecs.h: Rename include guard.
-	* common/gdb_unlinker.h: Rename include guard.
-	* common/gdb_unique_ptr.h: Rename include guard.
-	* common/gdb_tilde_expand.h: Rename include guard.
-	* common/gdb_sys_time.h: Rename include guard.
-	* common/gdb_string_view.h: Rename include guard.
-	* common/gdb_splay_tree.h: Rename include guard.
-	* common/gdb_setjmp.h: Rename include guard.
-	* common/gdb_ref_ptr.h: Rename include guard.
-	* common/gdb_optional.h: Rename include guard.
-	* common/gdb_locale.h: Rename include guard.
-	* common/gdb_assert.h: Rename include guard.
-	* common/filtered-iterator.h: Rename include guard.
-	* common/filestuff.h: Rename include guard.
-	* common/fileio.h: Rename include guard.
-	* common/environ.h: Rename include guard.
-	* common/common-utils.h: Rename include guard.
-	* common/common-types.h: Rename include guard.
-	* common/common-regcache.h: Rename include guard.
-	* common/common-inferior.h: Rename include guard.
-	* common/common-gdbthread.h: Rename include guard.
-	* common/common-exceptions.h: Rename include guard.
-	* common/common-defs.h: Rename include guard.
-	* common/common-debug.h: Rename include guard.
-	* common/cleanups.h: Rename include guard.
-	* common/buffer.h: Rename include guard.
-	* common/btrace-common.h: Rename include guard.
-	* common/break-common.h: Rename include guard.
-	* cli/cli-utils.h: Rename include guard.
-	* cli/cli-style.h: Rename include guard.
-	* cli/cli-setshow.h: Rename include guard.
-	* cli/cli-script.h: Rename include guard.
-	* cli/cli-interp.h: Rename include guard.
-	* cli/cli-decode.h: Rename include guard.
-	* cli/cli-cmds.h: Rename include guard.
-	* charset-list.h: Add include guard.
-	* buildsym-legacy.h: Rename include guard.
-	* bfin-tdep.h: Add include guard.
-	* ax.h: Rename include guard.
-	* arm-linux-tdep.h: Add include guard.
-	* arm-fbsd-tdep.h: Add include guard.
-	* arch/xtensa.h: Rename include guard.
-	* arch/tic6x.h: Add include guard.
-	* arch/i386.h: Add include guard.
-	* arch/arm.h: Rename include guard.
-	* arch/arm-linux.h: Rename include guard.
-	* arch/arm-get-next-pcs.h: Rename include guard.
-	* arch/amd64.h: Add include guard.
-	* arch/aarch64-insn.h: Rename include guard.
-	* arch-utils.h: Rename include guard.
-	* annotate.h: Add include guard.
-	* amd64-darwin-tdep.h: Rename include guard.
-	* aarch64-linux-tdep.h: Add include guard.
-	* aarch64-fbsd-tdep.h: Add include guard.
-	* aarch32-linux-nat.h: Add include guard.
-
-2019-02-06  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* macrotab.c (macro_define_internal): New function that
-	factorizes macro_define_object_internal and macro_define_function
-	code.
-	(macro_define_object_internal): Use macro_define_internal.
-	(macro_define_function): Likewise.
-
-2019-02-06  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* macrocmd.c (extract_identifier): Return
-	a gdb::unique_xmalloc_ptr<char> instead of a char *, and update
-	callers.
-
-2019-02-06  John Baldwin  <jhb@FreeBSD.org>
-
-	* fbsd-nat.c (fbsd_fetch_cmdline): Join arguments with spaces.
-
-2019-02-05  Tom Tromey  <tom@tromey.com>
-
-	* target.c (target_stack::unpush): Move assertion earlier.
-
-2019-01-30  Tom Tromey  <tom@tromey.com>
-
-	PR python/23615:
-	* python/python.c (execute_gdb_command): Use gdbpy_allow_threads.
-	(gdbpy_parse_and_eval): Likewise.
-	* python/python-internal.h (gdbpy_allow_threads): New class.
-
-2019-01-28  John Baldwin  <jhb@FreeBSD.org>
-
-	* aarch64-fbsd-tdep.c (aarch64_fbsd_gregmap)
-	(aarch64_fbsd_fpregmap): Move earlier.
-	(AARCH64_MCONTEXT_REG_SIZE, AARCH64_MCONTEXT_FPREG_SIZE): Delete.
-	(aarch64_fbsd_sigframe_init): Use trad_frame_set_reg_regmap
-	instead of individual calls to trad_frame_set_reg_addr.
-	* arm-fbsd-tdep.c (arm_fbsd_gregmap, arm_fbsd_vfpregmap): Move
-	earlier.
-	(ARM_MCONTEXT_REG_SIZE, ARM_MCONTEXT_VFP_REG_SIZE): Delete.
-	(arm_fbsd_sigframe_init): Use trad_frame_set_reg_regmap
-	instead of individual calls to trad_frame_set_reg_addr.
-
-2019-01-28  Alan Hayward  <alan.hayward@arm.com>
-
-	* CONTRIBUTE: Replace contribution list with wiki link.
-
-2019-01-25  Tom Tromey  <tom@tromey.com>
-
-	* Makefile.in (GDB_CFLAGS): Don't add -I for common.
-
-2019-01-25  Tom Tromey  <tom@tromey.com>
-
-	* xtensa-linux-nat.c: Fix common/ includes.
-	* xml-support.h: Fix common/ includes.
-	* xml-support.c: Fix common/ includes.
-	* x86-linux-nat.c: Fix common/ includes.
-	* windows-nat.c: Fix common/ includes.
-	* varobj.h: Fix common/ includes.
-	* varobj.c: Fix common/ includes.
-	* value.c: Fix common/ includes.
-	* valops.c: Fix common/ includes.
-	* utils.c: Fix common/ includes.
-	* unittests/xml-utils-selftests.c: Fix common/ includes.
-	* unittests/utils-selftests.c: Fix common/ includes.
-	* unittests/unpack-selftests.c: Fix common/ includes.
-	* unittests/tracepoint-selftests.c: Fix common/ includes.
-	* unittests/style-selftests.c: Fix common/ includes.
-	* unittests/string_view-selftests.c: Fix common/ includes.
-	* unittests/scoped_restore-selftests.c: Fix common/ includes.
-	* unittests/scoped_mmap-selftests.c: Fix common/ includes.
-	* unittests/scoped_fd-selftests.c: Fix common/ includes.
-	* unittests/rsp-low-selftests.c: Fix common/ includes.
-	* unittests/parse-connection-spec-selftests.c: Fix common/
-	includes.
-	* unittests/optional-selftests.c: Fix common/ includes.
-	* unittests/offset-type-selftests.c: Fix common/ includes.
-	* unittests/observable-selftests.c: Fix common/ includes.
-	* unittests/mkdir-recursive-selftests.c: Fix common/ includes.
-	* unittests/memrange-selftests.c: Fix common/ includes.
-	* unittests/memory-map-selftests.c: Fix common/ includes.
-	* unittests/lookup_name_info-selftests.c: Fix common/ includes.
-	* unittests/function-view-selftests.c: Fix common/ includes.
-	* unittests/environ-selftests.c: Fix common/ includes.
-	* unittests/copy_bitwise-selftests.c: Fix common/ includes.
-	* unittests/common-utils-selftests.c: Fix common/ includes.
-	* unittests/cli-utils-selftests.c: Fix common/ includes.
-	* unittests/array-view-selftests.c: Fix common/ includes.
-	* ui-file.c: Fix common/ includes.
-	* tui/tui-io.c: Fix common/ includes.
-	* tracepoint.h: Fix common/ includes.
-	* tracepoint.c: Fix common/ includes.
-	* tracefile-tfile.c: Fix common/ includes.
-	* top.h: Fix common/ includes.
-	* top.c: Fix common/ includes.
-	* thread.c: Fix common/ includes.
-	* target/waitstatus.h: Fix common/ includes.
-	* target/waitstatus.c: Fix common/ includes.
-	* target.h: Fix common/ includes.
-	* target.c: Fix common/ includes.
-	* target-memory.c: Fix common/ includes.
-	* target-descriptions.c: Fix common/ includes.
-	* symtab.h: Fix common/ includes.
-	* symfile.c: Fix common/ includes.
-	* stap-probe.c: Fix common/ includes.
-	* spu-linux-nat.c: Fix common/ includes.
-	* sparc-nat.c: Fix common/ includes.
-	* source.c: Fix common/ includes.
-	* solib.c: Fix common/ includes.
-	* solib-target.c: Fix common/ includes.
-	* ser-unix.c: Fix common/ includes.
-	* ser-tcp.c: Fix common/ includes.
-	* ser-pipe.c: Fix common/ includes.
-	* ser-base.c: Fix common/ includes.
-	* selftest-arch.c: Fix common/ includes.
-	* s12z-tdep.c: Fix common/ includes.
-	* rust-exp.y: Fix common/ includes.
-	* rs6000-aix-tdep.c: Fix common/ includes.
-	* riscv-tdep.c: Fix common/ includes.
-	* remote.c: Fix common/ includes.
-	* remote-notif.h: Fix common/ includes.
-	* remote-fileio.h: Fix common/ includes.
-	* remote-fileio.c: Fix common/ includes.
-	* regcache.h: Fix common/ includes.
-	* regcache.c: Fix common/ includes.
-	* record-btrace.c: Fix common/ includes.
-	* python/python.c: Fix common/ includes.
-	* python/py-type.c: Fix common/ includes.
-	* python/py-inferior.c: Fix common/ includes.
-	* progspace.h: Fix common/ includes.
-	* producer.c: Fix common/ includes.
-	* procfs.c: Fix common/ includes.
-	* proc-api.c: Fix common/ includes.
-	* printcmd.c: Fix common/ includes.
-	* ppc-linux-nat.c: Fix common/ includes.
-	* parser-defs.h: Fix common/ includes.
-	* osdata.c: Fix common/ includes.
-	* obsd-nat.c: Fix common/ includes.
-	* nat/x86-linux.c: Fix common/ includes.
-	* nat/x86-linux-dregs.c: Fix common/ includes.
-	* nat/x86-dregs.h: Fix common/ includes.
-	* nat/x86-dregs.c: Fix common/ includes.
-	* nat/ppc-linux.c: Fix common/ includes.
-	* nat/mips-linux-watch.h: Fix common/ includes.
-	* nat/mips-linux-watch.c: Fix common/ includes.
-	* nat/linux-waitpid.c: Fix common/ includes.
-	* nat/linux-ptrace.h: Fix common/ includes.
-	* nat/linux-ptrace.c: Fix common/ includes.
-	* nat/linux-procfs.c: Fix common/ includes.
-	* nat/linux-personality.c: Fix common/ includes.
-	* nat/linux-osdata.c: Fix common/ includes.
-	* nat/linux-namespaces.c: Fix common/ includes.
-	* nat/linux-btrace.h: Fix common/ includes.
-	* nat/linux-btrace.c: Fix common/ includes.
-	* nat/fork-inferior.c: Fix common/ includes.
-	* nat/amd64-linux-siginfo.c: Fix common/ includes.
-	* nat/aarch64-sve-linux-ptrace.c: Fix common/ includes.
-	* nat/aarch64-linux.c: Fix common/ includes.
-	* nat/aarch64-linux-hw-point.h: Fix common/ includes.
-	* nat/aarch64-linux-hw-point.c: Fix common/ includes.
-	* namespace.h: Fix common/ includes.
-	* mips-linux-tdep.c: Fix common/ includes.
-	* minsyms.c: Fix common/ includes.
-	* mi/mi-parse.h: Fix common/ includes.
-	* mi/mi-main.c: Fix common/ includes.
-	* mi/mi-cmd-env.c: Fix common/ includes.
-	* memrange.h: Fix common/ includes.
-	* memattr.c: Fix common/ includes.
-	* maint.h: Fix common/ includes.
-	* maint.c: Fix common/ includes.
-	* main.c: Fix common/ includes.
-	* machoread.c: Fix common/ includes.
-	* location.c: Fix common/ includes.
-	* linux-thread-db.c: Fix common/ includes.
-	* linux-nat.c: Fix common/ includes.
-	* linux-fork.c: Fix common/ includes.
-	* inline-frame.c: Fix common/ includes.
-	* infrun.c: Fix common/ includes.
-	* inflow.c: Fix common/ includes.
-	* inferior.h: Fix common/ includes.
-	* inferior.c: Fix common/ includes.
-	* infcmd.c: Fix common/ includes.
-	* inf-ptrace.c: Fix common/ includes.
-	* inf-child.c: Fix common/ includes.
-	* ia64-linux-nat.c: Fix common/ includes.
-	* i387-tdep.c: Fix common/ includes.
-	* i386-tdep.c: Fix common/ includes.
-	* i386-linux-tdep.c: Fix common/ includes.
-	* i386-linux-nat.c: Fix common/ includes.
-	* i386-go32-tdep.c: Fix common/ includes.
-	* i386-fbsd-tdep.c: Fix common/ includes.
-	* i386-fbsd-nat.c: Fix common/ includes.
-	* guile/scm-type.c: Fix common/ includes.
-	* guile/guile.c: Fix common/ includes.
-	* go32-nat.c: Fix common/ includes.
-	* gnu-nat.c: Fix common/ includes.
-	* gdbthread.h: Fix common/ includes.
-	* gdbarch-selftests.c: Fix common/ includes.
-	* gdb_usleep.c: Fix common/ includes.
-	* gdb_select.h: Fix common/ includes.
-	* gdb_bfd.c: Fix common/ includes.
-	* gcore.c: Fix common/ includes.
-	* fork-child.c: Fix common/ includes.
-	* findvar.c: Fix common/ includes.
-	* fbsd-nat.c: Fix common/ includes.
-	* event-top.c: Fix common/ includes.
-	* event-loop.c: Fix common/ includes.
-	* dwarf2read.c: Fix common/ includes.
-	* dwarf2loc.c: Fix common/ includes.
-	* dwarf2-frame.c: Fix common/ includes.
-	* dwarf-index-cache.c: Fix common/ includes.
-	* dtrace-probe.c: Fix common/ includes.
-	* disasm-selftests.c: Fix common/ includes.
-	* defs.h: Fix common/ includes.
-	* csky-tdep.c: Fix common/ includes.
-	* cp-valprint.c: Fix common/ includes.
-	* cp-support.h: Fix common/ includes.
-	* cp-support.c: Fix common/ includes.
-	* corelow.c: Fix common/ includes.
-	* completer.h: Fix common/ includes.
-	* completer.c: Fix common/ includes.
-	* compile/compile.c: Fix common/ includes.
-	* compile/compile-loc2c.c: Fix common/ includes.
-	* compile/compile-cplus-types.c: Fix common/ includes.
-	* compile/compile-cplus-symbols.c: Fix common/ includes.
-	* command.h: Fix common/ includes.
-	* cli/cli-dump.c: Fix common/ includes.
-	* cli/cli-cmds.c: Fix common/ includes.
-	* charset.c: Fix common/ includes.
-	* build-id.c: Fix common/ includes.
-	* btrace.h: Fix common/ includes.
-	* btrace.c: Fix common/ includes.
-	* breakpoint.h: Fix common/ includes.
-	* breakpoint.c: Fix common/ includes.
-	* ax.h: 
-	(enum agent_op): Fix common/ includes.
-	* ax-general.c (struct aop_map): Fix common/ includes.
-	* ax-gdb.c: Fix common/ includes.
-	* auxv.c: Fix common/ includes.
-	* auto-load.c: Fix common/ includes.
-	* arm-tdep.c: Fix common/ includes.
-	* arch/riscv.c: Fix common/ includes.
-	* arch/ppc-linux-common.c: Fix common/ includes.
-	* arch/i386.c: Fix common/ includes.
-	* arch/arm.c: Fix common/ includes.
-	* arch/arm-linux.c: Fix common/ includes.
-	* arch/arm-get-next-pcs.c: Fix common/ includes.
-	* arch/amd64.c: Fix common/ includes.
-	* arch/aarch64.c: Fix common/ includes.
-	* arch/aarch64-insn.c: Fix common/ includes.
-	* arch-utils.c: Fix common/ includes.
-	* amd64-windows-tdep.c: Fix common/ includes.
-	* amd64-tdep.c: Fix common/ includes.
-	* amd64-sol2-tdep.c: Fix common/ includes.
-	* amd64-obsd-tdep.c: Fix common/ includes.
-	* amd64-nbsd-tdep.c: Fix common/ includes.
-	* amd64-linux-tdep.c: Fix common/ includes.
-	* amd64-linux-nat.c: Fix common/ includes.
-	* amd64-fbsd-tdep.c: Fix common/ includes.
-	* amd64-fbsd-nat.c: Fix common/ includes.
-	* amd64-dicos-tdep.c: Fix common/ includes.
-	* amd64-darwin-tdep.c: Fix common/ includes.
-	* agent.c: Fix common/ includes.
-	* ada-lang.h: Fix common/ includes.
-	* ada-lang.c: Fix common/ includes.
-	* aarch64-tdep.c: Fix common/ includes.
-
-2019-01-25  Tom Tromey  <tom@tromey.com>
-
-	* common/create-version.sh: Use common/version.h.
-
-2019-01-24  Pedro Alves  <palves@redhat.com>
-
-	* infrun.c (signal_stop, signal_print, signal_program)
-	(signal_catch, signal_pass): Now arrays instead of pointers.
-	(update_signals_program_target, do_target_resume)
-	(signal_catch_update, handle_command, _initialize_infrun): Adjust.
-	* linux-nat.c (linux_nat_target::pass_signals)
-	(linux_nat_target::create_inferior, linux_nat_target::attach):
-	Adjust.
-	* linux-nat.h (linux_nat_target::pass_signals): Adjust.
-	* nto-procfs.c (nto_procfs_target::pass_signals): Adjust.
-	* procfs.c (procfs_target::pass_signals): Adjust.
-	* record-full.c (record_full_target::resume): Adjust.
-	* remote.c (remote_target::pass_signals)
-	(remote_target::program_signals): Adjust.
-	* target-debug.h (target_debug_print_signals): Now takes a
-	gdb::array_view as parameter.  Adjust.
-	* target.h (target_ops) <pass_signals, program_signals>: Replace
-	pointer and length parameters with gdb::array_view.
-	(target_pass_signals, target_program_signals): Likewise.
-	* target-delegates.c: Regenerate.
-
-2019-01-24  Pedro Alves  <palves@redhat.com>
-
-	* common/forward-scope-exit.h
-	(forward_scope_exit::forward_scope_exit): Pass arguments to
-	m_bind_function directly, instead of creating a std::bind and
-	copying that.
-
-2019-01-24  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check
-	for static members.
-	(pass_in_v_vfp_candidate): Likewise.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* regcache.c (class regcache_invalidator): Remove.
-	(regcache::raw_write): Use make_scope_exit.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-
-	* ui-out.h (class ui_out_emit_type): Update comment.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-
-	* infrun.c (fetch_inferior_event): Update comment.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* infrun.c (reinstall_readline_callback_handler_cleanup): Remove
-	parameter.
-	(fetch_inferior_event): Use SCOPE_EXIT.
-
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* infrun.c (disable_thread_events): Delete.
-	(stop_all_threads): Use SCOPE_EXIT.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* symfile.c: Include forward-scope-exit.h.
-	(clear_symtab_users_cleanup): Replace forward declaration with
-	a FORWARD_SCOPE_EXIT.
-	(syms_from_objfile_1): Use the forward_scope_exit and
-	gdb::optional instead of cleanup_function.
-	(reread_symbols): Use the forward_scope_exit instead of
-	cleanup_function.
-	(clear_symtab_users_cleanup): Remove function.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* linux-nat.c: Include scope-exit.h.
-	(cleanup_target_stop): Remove.
-	(linux_nat_target::static_tracepoint_markers_by_strid): Use
-	SCOPE_EXIT.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* infcall.c (cleanup_delete_std_terminate_breakpoint): Remove.
-	(call_function_by_hand_dummy): Use SCOPE_EXIT.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* infrun.c (fetch_inferior_event): Use scope_exit.
-	* utils.h (make_bpstat_clear_actions_cleanup): Don't declare.
-	* top.c (execute_command): Use scope_exit.
-	* breakpoint.c (bpstat_do_actions): Use scope_exit.
-	* utils.c (do_bpstat_clear_actions_cleanup)
-	(make_bpstat_clear_actions_cleanup): Remove.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* infrun.c: Include "common/scope-exit.h"
-	(delete_just_stopped_threads_infrun_breakpoints_cleanup): Remove.
-	(wait_for_inferior): Use SCOPE_EXIT.
-	(fetch_inferior_event): Use scope_exit.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* breakpoint.c (create_breakpoint): Remove cleanup.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Pedro Alves  <palves@redhat.com>
-
-2019-01-23  Pedro Alves  <palves@redhat.com>
-
-	* gdbarch-selftests.c (struct on_exit): Use SCOPE_EXIT.
-
-2019-01-23  Pedro Alves  <palves@redhat.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdbthread.h: Include "common/forward-scope-exit.h".
-	(scoped_finish_thread_state): Redefine custom class in terms of
-	forward_scope_exit.
-
-2019-01-23  Pedro Alves  <palves@redhat.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* common/forward-scope-exit.h: New file.
-
-2019-01-23  Pedro Alves  <palves@redhat.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Tom Tromey  <tom@tromey.com>
-
-	* common/scope-exit.h: New file.
-
-2019-01-23  Pedro Alves  <palves@redhat.com>
-
-	* common/preprocessor.h (ESC): Rename to ...
-	(ESC_PARENS): ... this.
-	* common/valid-expr.h (CHECK_VALID_EXPR_1, CHECK_VALID_EXPR_2)
-	(CHECK_VALID_EXPR_3, CHECK_VALID_EXPR_4): Adjust.
-
-2019-01-23  Tom Tromey  <tom@tromey.com>
-
-	* language.h (class scoped_switch_to_sym_language_if_auto):
-	Initialize m_lang in both cases.
-
-2019-01-23  Alan Hayward  <alan.hayward@arm.com>
-
-	* nat/aarch64-linux.c (aarch64_linux_new_thread): Replace XNEW
-	with XCNEW.
-
-2019-01-22  Tom Tromey  <tom@tromey.com>
-
-	* corelow.c: Do not include sys/file.h.
-
-2019-01-22  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-wingeneral.h: Include gdb_curses.h.
-
-2019-01-22  Tom Tromey  <tom@tromey.com>
-
-	* source-cache.h (class source_cache) <get_source_lines,
-	get_plain_source_lines, extract_lines>: Rename "lines" parameter.
-
-2019-01-22  Tom Tromey  <tom@tromey.com>
-
-	* remote-fileio.h (struct remote_target): Declare.
-
-2019-01-22  Tom Tromey  <tom@tromey.com>
-
-	* python/py-arch.c: Do not include py-ref.h.
-	* python/py-bpevent.c: Do not include py-ref.h.
-	* python/py-cmd.c: Do not include py-ref.h.
-	* python/py-continueevent.c: Do not include py-ref.h.
-	* python/py-event.h: Do not include py-ref.h.
-	* python/py-evtregistry.c: Do not include py-ref.h.
-	* python/py-finishbreakpoint.c: Do not include py-ref.h.
-	* python/py-frame.c: Do not include py-ref.h.
-	* python/py-framefilter.c: Do not include py-ref.h.
-	* python/py-function.c: Do not include py-ref.h.
-	* python/py-infevents.c: Do not include py-ref.h.
-	* python/py-linetable.c: Do not include py-ref.h.
-	* python/py-objfile.c: Do not include py-ref.h.
-	* python/py-param.c: Do not include py-ref.h.
-	* python/py-prettyprint.c: Do not include py-ref.h.
-	* python/py-progspace.c: Do not include py-ref.h.
-	* python/py-symbol.c: Do not include py-ref.h.
-	* python/py-symtab.c: Do not include py-ref.h.
-	* python/py-type.c: Do not include py-ref.h.
-	* python/py-unwind.c: Do not include py-ref.h.
-	* python/py-utils.c: Do not include py-ref.h.
-	* python/py-value.c: Do not include py-ref.h.
-	* python/py-varobj.c: Do not include py-ref.h.
-	* python/py-xmethods.c: Do not include py-ref.h.
-	* python/python.c: Do not include py-ref.h.
-	* varobj.c: Do not include py-ref.h.
-
-2019-01-22  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (struct objfile_per_bfd_storage): Use "struct"
-	keyword for bcache.
-
-2019-01-22  Tom Tromey  <tom@tromey.com>
-
-	* compile/compile-cplus-types.c: Remove a comment by #include.
-
-2019-01-22  Tom Tromey  <tom@tromey.com>
-
-	* compile/gcc-c-plugin.h: Include compile-internal.h.
-
-2019-01-22  Tom Tromey  <tom@tromey.com>
-
-	* stabsread.c (EXTERN): Do not define.
-	(symnum, next_symbol_text_func, processing_gcc_compilation)
-	(within_function, global_sym_chain, global_stabs)
-	(previous_stab_code, this_object_header_files)
-	(n_this_object_header_files)
-	(n_allocated_this_object_header_files): Define.
-	* stabsread.h (EXTERN): Never define.  Use "extern".
-
-2019-01-22  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* event-top.c (handle_line_of_input): use unique_xmalloc_ptr for
-	history_value.
-
-2019-01-21  Tom Tromey  <tom@tromey.com>
-
-	* ui-out.c: Fix includes.
-	* tui/tui-source.c: Fix includes.
-	* target.c: Fix includes.
-	* remote.c: Fix includes.
-	* regcache.c: Fix includes.
-	* python/py-block.c: Fix includes.
-	* printcmd.c: Fix includes.
-	* or1k-tdep.c: Fix includes.
-	* mi/mi-main.c: Fix includes.
-	* m32r-tdep.c: Fix includes.
-	* csky-tdep.c: Fix includes.
-	* compile/compile-cplus-types.c: Fix includes.
-	* cli/cli-interp.c: Fix includes.
-
-2019-01-21  Alan Hayward  <alan.hayward@arm.com>
-
-	* aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check
-	for padding.
-
-2019-01-16  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (struct minimal_symbol_iterator): Rename.  Move
-	earlier.
-	(struct objfile) <msymbols_range>: Move from top level.
-	<msymbols>: New method.
-	(class objfile_msymbols): Remove.
-	* symtab.c (default_collect_symbol_completion_matches_break_on):
-	Update.
-	* symmisc.c (dump_msymbols): Update.
-	* stabsread.c (scan_file_globals): Update.
-	* objc-lang.c (info_selectors_command, info_classes_command)
-	(find_methods): Update.
-	* minsyms.c (find_solib_trampoline_target): Update.
-	* hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Update.
-	* coffread.c (coff_symfile_read): Update.
-	* ada-lang.c (ada_lookup_simple_minsym)
-	(ada_collect_symbol_completion_matches): Update.
-
-2019-01-16  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (class objfile_msymbols) <iterator>: Change argument
-	type.  Remove no-argument constructor.
-	<iterator::operator++>: Simplify.
-	<begin>: Update.
-	<end>: Use minimal_symbol_count.
-
-2019-01-16  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (struct objfile) <psymtabs>: New method.
-	(class objfile_psymtabs): Remove.
-	* psymtab.h (class psymtab_storage) <partial_symtab_range>: New
-	typedef.
-	<range>: New method.
-	(require_partial_symbols): Change return type.
-	* psymtab.c (require_partial_symbols)
-	(psym_expand_symtabs_matching): Update.
-	* mdebugread.c (parse_partial_symbols): Update.
-	* dbxread.c (dbx_end_psymtab): Update.
-
-2019-01-15  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (lookup_objfile_from_block)
-	(lookup_symbol_in_objfile_symtabs)
-	(basic_lookup_transparent_type_1, find_pc_sect_compunit_symtab)
-	(find_line_symtab, info_sources_command)
-	(default_collect_symbol_completion_matches_break_on)
-	(make_source_files_completion_list): Update.
-	* symmisc.c (print_objfile_statistics, dump_objfile)
-	(maintenance_print_symbols, maintenance_info_symtabs)
-	(maintenance_check_symtabs, maintenance_info_line_tables):
-	Update.
-	* source.c (select_source_symtab)
-	(forget_cached_source_info_for_objfile): Update.
-	* objfiles.h (class objfile_compunits): Remove.
-	(struct objfile) <compunits_range>: New typedef.
-	(compunits): New method.
-	* objfiles.c (objfile_relocate1): Update.
-	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Update.
-	* maint.c (count_symtabs_and_blocks): Update.
-	* linespec.c (iterate_over_all_matching_symtabs): Update.
-	* cp-support.c (add_symbol_overload_list_qualified): Update.
-	* coffread.c (coff_symtab_read): Update.
-	* ada-lang.c (add_nonlocal_symbols)
-	(ada_collect_symbol_completion_matches)
-	(ada_add_global_exceptions): Update.
-
-2019-01-15  Tom Tromey  <tom@tromey.com>
-
-	* progspace.h (program_space) <objfiles_safe_range>: New
-	typedef.
-	<objfiles_safe>: New method.
-	* objfiles.h (class all_objfiles_safe): Remove.
-	* objfiles.c (free_all_objfiles, objfile_purge_solibs): Update.
-	* jit.c (jit_inferior_exit_hook): Update.
-
-2019-01-17  Tom Tromey  <tom@tromey.com>
-
-	* progspace.h (program_space) <objfiles_range>: New typedef.
-	<objfiles>: New method.
-	<objfiles_head>: Rename from objfiles.
-	(object_files): Update.
-	* guile/scm-progspace.c (gdbscm_progspace_objfiles): Update.
-	* guile/scm-pretty-print.c
-	(ppscm_find_pretty_printer_from_objfiles): Update.
-	* guile/scm-objfile.c (gdbscm_objfiles): Update.
-	* python/py-xmethods.c (gdbpy_get_matching_xmethod_workers):
-	Update.
-	* python/py-progspace.c (pspy_get_objfiles): Update.
-	* python/py-prettyprint.c (find_pretty_printer_from_objfiles):
-	Update.
-	* python/py-objfile.c (objfpy_lookup_objfile_by_name)
-	(objfpy_lookup_objfile_by_build_id): Update.
-	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Update.
-	* windows-tdep.c (windows_iterate_over_objfiles_in_search_order):
-	Update.
-	* symtab.c (iterate_over_symtabs, matching_obj_sections)
-	(expand_symtab_containing_pc, lookup_objfile_from_block)
-	(lookup_static_symbol, basic_lookup_transparent_type)
-	(find_pc_sect_compunit_symtab, find_symbol_at_address)
-	(find_line_symtab, info_sources_command)
-	(default_collect_symbol_completion_matches_break_on)
-	(make_source_files_completion_list, find_main_name): Update.
-	* symmisc.c (print_symbol_bcache_statistics)
-	(print_objfile_statistics, maintenance_print_symbols)
-	(maintenance_print_msymbols, maintenance_print_objfiles)
-	(maintenance_info_symtabs, maintenance_check_symtabs)
-	(maintenance_expand_symtabs, maintenance_info_line_tables):
-	Update.
-	* symfile.c (remove_symbol_file_command, overlay_invalidate_all)
-	(find_pc_overlay, find_pc_mapped_section, list_overlays_command)
-	(map_overlay_command, unmap_overlay_command)
-	(simple_overlay_update, expand_symtabs_matching)
-	(map_symbol_filenames): Update.
-	* symfile-debug.c (set_debug_symfile): Update.
-	* spu-tdep.c (spu_overlay_update, spu_objfile_from_frame):
-	Update.
-	* source.c (select_source_symtab, forget_cached_source_info):
-	Update.
-	* solib.c (solib_read_symbols): Update.
-	* solib-spu.c (append_ocl_sos): Update.
-	* psymtab.c (maintenance_print_psymbols)
-	(maintenance_info_psymtabs, maintenance_check_psymtabs): Update.
-	* probe.c (parse_probes_in_pspace, find_probe_by_pc): Update.
-	* printcmd.c (info_symbol_command): Update.
-	* ppc-linux-tdep.c (ppc_linux_spe_context_inferior_created):
-	Update.
-	* objfiles.h (class all_objfiles): Remove.
-	* objfiles.c (have_partial_symbols, have_full_symbols)
-	(have_minimal_symbols, qsort_cmp, update_section_map)
-	(shared_objfile_contains_address_p)
-	(default_iterate_over_objfiles_in_search_order): Update.
-	* objc-lang.c (info_selectors_command, info_classes_command)
-	(find_methods): Update.
-	* minsyms.c (find_solib_trampoline_target): Update.
-	* maint.c (maintenance_info_sections)
-	(maintenance_translate_address, count_symtabs_and_blocks):
-	Update.
-	* main.c (captured_main_1): Update.
-	* linux-thread-db.c (try_thread_db_load_from_pdir)
-	(has_libpthread): Update.
-	* linespec.c (iterate_over_all_matching_symtabs)
-	(search_minsyms_for_name): Update.
-	* jit.c (jit_find_objf_with_entry_addr): Update.
-	* hppa-tdep.c (find_unwind_entry)
-	(hppa_lookup_stub_minimal_symbol): Update.
-	* gcore.c (gcore_create_callback, objfile_find_memory_regions):
-	Update.
-	* elfread.c (elf_gnu_ifunc_resolve_by_cache)
-	(elf_gnu_ifunc_resolve_by_got): Update.
-	* dwarf2-frame.c (dwarf2_frame_find_fde): Update.
-	* dwarf-index-write.c (save_gdb_index_command): Update.
-	* cp-support.c (add_symbol_overload_list_qualified): Update.
-	* breakpoint.c (create_overlay_event_breakpoint)
-	(create_longjmp_master_breakpoint)
-	(create_std_terminate_master_breakpoint)
-	(create_exception_master_breakpoint): Update.
-	* blockframe.c (find_pc_partial_function): Update.
-	* ada-lang.c (ada_lookup_simple_minsym, add_nonlocal_symbols)
-	(ada_collect_symbol_completion_matches)
-	(ada_add_global_exceptions): Update.
-
-2019-01-17  Tom Tromey  <tom@tromey.com>
-
-	* solib-target.c (lm_info_target_p): Remove typedef.  Don't
-	declare VEC.
-	(solib_target_parse_libraries): Change return type.
-	(library_list_start_segment, library_list_start_section)
-	(library_list_end_library, library_list_start_library); Update.
-	(solib_target_free_library_list): Remove.
-	(solib_target_parse_libraries): Remove cleanup.  Change return
-	type.
-	(solib_target_current_sos): Update.
-
-2019-01-17  Tom Tromey  <tromey@bapiya>
-
-	* valprint.c: Replace "the the" with "the".
-	* symtab.c: Replace "the the" with "the".
-	* solib.c: Replace "the the" with "the".
-	* solib-dsbt.c: Replace "the the" with "the".
-	* linespec.c: Replace "the the" with "the".
-	* dwarf2loc.h: Replace "the the" with "the".
-	* amd64-windows-tdep.c: Replace "the the" with "the".
-	* aarch64-tdep.c: Replace "the the" with "the".
-
-2019-01-16  Keith Seitz  <keiths@redhat.com>
-
-	PR gdb/23773
-	* dwarf2read.c (dwarf2_cu) <ancestor>: New field.
-	<builder>: Rename to ..
-	<m_builder>: ... this and make private.
-	(dwarf2_cu::get_builder): New method.  Change all users of
-	`builder' to use this method.
-	(dwarf2_start_symtab): Move to ...
-	(dwarf2_cu::start_symtab): ... here.  Update all callers
-	(setup_type_unit_groups): Move to ...
-	(dwarf2_cu::setup_type_unit_groups): ... here.  Update all
-	callers.
-	(dwarf2_cu::reset_builder): New method.
-	(process_full_compunit, process_full_type_unit): Use
-	dwarf2_cu::reset_builder.
-	(follow_die_offset): Record the ancestor CU if it is different
-	from the followed DIE's CU.
-	(follow_die_sig_1): Likewise.
-
-2019-01-15  Tom Tromey  <tom@tromey.com>
-
-	* remote.c (class remote_state) <buf>: Now a char_vector.
-	<buf_size>: Remove.
-	(remote_target::getpkt): Change type of buf.  Remove sizeof_buf
-	parameter.
-	(remote_target::getpkt_or_notif_sane_1)
-	(remote_target::getpkt_sane)
-	(remote_target::getpkt_or_notif_sane): Likewise.
-	(class remote_target) <putpkt>: New overload.
-	(remote_target::read_frame): Change type of "buf_p".  Remove
-	sizeof_p parameter.
-	(packet_ok): New overload.
-	(packet_check_result): New overload.
-	Update all uses.
-
-2019-01-14  Tom Tromey  <tom@tromey.com>
-
-	* remote-notif.c (handle_notification, remote_notif_ack)
-	(remote_notif_parse): Make "buf" const.
-	* remote-notif.h (struct notif_client) <parse, ack>: Make "buf"
-	const.
-	(remote_notif_parse, remote_notif_ack, handle_notification):
-	Likewise.
-	* remote.c (remote_notif_stop_parse): Make "buf" const.
-	(remote_target::remote_parse_stop_reply): Make "buf" const.
-	(remote_notif_stop_ack): Make "buf" const.
-
-2019-01-14  Tom Tromey  <tom@tromey.com>
-
-	* remote.c (remote_console_output): Make parameter const.
-
-2019-01-14  Tom Tromey  <tom@tromey.com>
-
-	* target-debug.h (target_debug_print_signals): Constify.
-	* nto-procfs.c (nto_procfs_target::pass_signals): Update.
-	* procfs.c (procfs_target::pass_signals): Update.
-	* linux-nat.c (linux_nat_target::pass_signals): Update.
-	* linux-nat.h (class linux_nat_target) <pass_signals>: Update.
-	* target-delegates.c: Rebuild.
-	* remote.c (remote_target::program_signals): Update.
-	(remote_target::pass_signals): Update.
-	* target.c (target_pass_signals): Constify argument.
-	(target_program_signals): Likewise.
-	* target.h (struct target_ops) <pass_signals, program_signals>:
-	Constify argument.
-	(target_pass_signals, target_program_signals): Constify argument.
-
-2019-01-14  Tom Tromey  <tom@tromey.com>
-
-	PR tui/28819:
-	* tui/tui-io.c (gdb_wgetch): Print \r when needed.
-
-2019-01-14  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* ppc-tdep.h (struct gdbarch_tdep) <ppc_v0_alias_regnum>: New
-	field.
-	* rs6000-tdep.c: Include reggroups.h.
-	(IS_V_ALIAS_PSEUDOREG): Define.
-	(rs6000_register_name): Return names for the "vX" aliases.
-	(rs6000_pseudo_register_type): Return type for the "vX" aliases.
-	(rs6000_pseudo_register_reggroup_p): Restore.  Handle "vX"
-	aliases.  Call default_register_reggroup_p for all other
-	pseudo-registers.
-	(v_alias_pseudo_register_read, v_alias_pseudo_register_write):
-	New functions.
-	(rs6000_pseudo_register_read, rs6000_pseudo_register_write):
-	Handle "vX" aliases.
-	(v_alias_pseudo_register_collect): New function.
-	(rs6000_ax_pseudo_register_collect): Handle "vX" aliases.
-	(rs6000_gdbarch_init): Initialize "vX" aliases as
-	pseudo-registers.  Restore registration of
-	rs6000_pseudo_register_reggroup_p with
-	set_tdesc_pseudo_register_reggroup_p.
-
-2019-01-13  Max Filippov  <jcmvbkbc@gmail.com>
-
-	* xtensa-linux-tdep.c (xtensa_linux_init_abi): Update
-	tdep->num_pseudo_regs. Add calls to set_gdbarch_num_regs and
-	set_gdbarch_num_pseudo_regs.
-
-2019-01-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* cli/cli-style.h (class cli_style_option): <add_setshow_commands>
-	Remove arg prefixname, add do_set and do_show.
-	Add member functions set_list and show_list.
-	* cli/cli-style.c (class cli_style_option): Update accordingly.
-	(style_set_list): Move to file scope.
-	(style_show_list): Likewise.
-	(set_style): Call help_list.
-	(show_style): Call cmd_show_list.
-	(_initialize_cli_style): New macro STYLE_ADD_SETSHOW_COMMANDS.
-	Update to use the new macro.
-
-2019-10-12  Joel Brobecker  <brobecker@adacore.com>
-
-	* ada-lang.c (_initialize_ada_language): Expand the help text
-	for the "catch exception" command.
-
-2019-01-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* symtab.c (matching_obj_sections): Initialize obj,
-	declare it closer to its usage.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* thread-iter.h (inf_threads_iterator): Use next_iterator.
-	(basic_inf_threads_range): Remove.
-	(inf_threads_range, inf_non_exited_threads_range)
-	(safe_inf_threads_range): Use next_adapter.
-
-2019-01-10  Keith Seitz  <keiths@redhat.com>
-
-	PR gdb/23712
-	PR symtab/23010
-	* dwarf2read.c (dw2_add_symbol_to_list): Remove.
-	(fixup_go_packaging, new_symbol): Use add_symbol_to_list.
-
-2019-01-10  Keith Seitz  <keiths@redhat.com>
-
-	PR gdb/23712
-	PR symtab/23010
-	* dictionary.c (pending_to_vector): Remove.
-	(dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1):
-	Remove _1 suffix, replacing functions of the same name.  Update
-	all callers.
-	(dict_create_hashed, dict_create_hashed_expandable)
-	(dict_create_linear, dict_create_linear_expandable, dict_free)
-	(dict_add_symbol, dict_add_pending, dict_size, dict_empty):
-	Make functions static.
-
-2019-01-10  Keith Seitz  <keiths@redhat.com>
-
-	PR gdb/23712
-	PR symtab/23010
-	* dictionary.h (struct dictionary): Replace declaration with
-	multidictionary.
-	(dict_create_hashed, dict_create_hashed_expandable)
-	(dict_create_linear, dict_create_linear_expandable)
-	(dict_free, dict_add_symbol, dict_add_pending, dict_empty)
-	(dict_iterator_first, dict_iterator_next, dict_iter_match_first)
-	(dict_iter_match_next, dict_size): Rename to "mdict_" versions
-	taking multidictionary argument.
-	[ALL_DICT_SYMBOLS]: Update for multidictionary.
-	* block.h (struct block) <dict>: Change to multidictionary
-	and rename `multidict'.
-	* block.c, buildsym.c, jit.c, mdebugread.c, objfiles.c,
-	symmisc.c: Update all dictionary references to multidictionary.
-
-2019-01-10  Keith Seitz  <keiths@redhat.com>
-
-	PR gdb/23712
-	PR symtab/23010
-	* dictionary.c: Include unordered_map.
-	(pending_to_vector): New function.
-	(dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1):
-	Rewrite the non-"_1" functions to take vector instead
-	of linked list.
-	(dict_create_hashed, dict_create_linear, dict_add_pending): Use the
-	"new" _1 versions of the same name.
-	(multidictionary): Define.
-	(std::hash<enum language): New definition.
-	(collate_pending_symbols_by_language, mdict_create_hashed)
-	(mdict_create_hashed_expandable, mdict_create_linear)
-	(mdict_create_linear_expandable, mdict_free)
-	(find_language_dictionary, create_new_language_dictionary)
-	(mdict_add_symbol, mdict_add_pending, mdict_iterator_first)
-	(mdict_iterator_next, mdict_iter_match_first, mdict_iter_match_next)
-	(mdict_size, mdict_empty): New functions.
-	* dictionary.h (mdict_iterator): Define.
-
-2019-01-10  Pedro Alves  <palves@redhat.com>
-
-	* breakpoint.c (read_uploaded_action)
-	(create_tracepoint_from_upload): Adjust to use
-	gdb::unique_xmalloc_ptr.
-	* ctf.c (ctf_write_uploaded_tp):
-	(SET_ARRAY_FIELD): Use emplace_back.
-	(SET_STRING_FIELD): Adjust to use gdb::unique_xmalloc_ptr.
-	* tracefile-tfile.c (tfile_write_uploaded_tp):
-	* tracepoint.c (parse_tracepoint_definition): Adjust to use
-	gdb::unique_xmalloc_ptr.
-	* tracepoint.h (struct uploaded_tp) <cond, actions, step_actions,
-	at_string, cond_string, cmd_strings>: Replace char pointers
-	with gdb::unique_xmalloc_ptr.
-
-2019-01-10  Pedro Alves  <palves@redhat.com>
-
-	* solib-target.c (library_list_start_library): Don't xstrdup name.
-
-2019-01-10  Pedro Alves  <palves@redhat.com>
-
-	* mdebugread.c (parse_partial_symbols): Use
-	gdb::unique_xmalloc_ptr to manage heap-allocated 'stabsstring'.
-
-2019-01-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* linux-fork.c (scoped_switch_fork_info)
-	<~scoped_switch_fork_info>: Fix incorrect variable name.
-
-2019-01-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* linux-fork.c (scoped_switch_fork_info)
-	<scoped_switch_fork_info>: Make explicit.
-	<~scoped_switch_fork_info>: Wrap core in TRY/CATCH.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* objfiles.h (objfile::reset_psymtabs): Update.
-	* objfiles.c (objfile::objfile): Update.
-	* psymtab.h (psymtab_storage::obstack): Update.
-	(psymtab_storage::m_obstack): Use gdb::optional.
-	(class psymtab_storage): Update comment.  Remove objfile
-	parameter.
-	* psymtab.c (psymtab_storage::psymtab_storage): Update.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* psymtab.h (psymtab_storage::allocate_psymtab): New method.
-	<free_psymtabs>: Now private.
-	* psymtab.c (psymtab_storage::allocate_psymtab): Implement.
-	(allocate_psymtab): Use new method.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* xcoffread.c (xcoff_end_psymtab): Use allocate_dependencies.
-	* psymtab.h (psymtab_storage::allocate_dependencies): New method.
-	* mdebugread.c (parse_partial_symbols): Use
-	allocate_dependencies.
-	* dwarf2read.c (dwarf2_create_include_psymtab): Use
-	allocate_dependencies.
-	(process_psymtab_comp_unit_reader)
-	(build_type_psymtab_dependencies): Likewise.
-	* dbxread.c (dbx_end_psymtab): Use allocate_dependencies.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* psymtab.c (add_psymbol_to_bcache): Pass psymtab obstack to
-	PSYMBOL_SET_LANGUAGE.
-	(allocate_psymtab): Allocate psymtab on the psymtab obstack.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* psymtab.h (psymtab_storage::obstack): New method.
-	<m_obstack>: Rename from obstack; now private.
-	* psymtab.c (psymtab_storage): Update.
-	* dwarf2read.c (create_addrmap_from_index)
-	(create_addrmap_from_aranges, dwarf2_build_psymtabs_hard):
-	Update.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* symfile.c (reread_symbols): Call objfile->reset_psymtabs.
-	* objfiles.h (objfile::reset_psymtabs): New method.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* symmisc.c (print_symbol_bcache_statistics): Update.
-	(print_objfile_statistics): Update.
-	* symfile.c (reread_symbols): Update.
-	* psymtab.h (class psymtab_storage): New.
-	* psymtab.c (psymtab_storage): New constructor.
-	(~psymtab_storage): New destructor.
-	(require_partial_symbols): Update.
-	(ALL_OBJFILE_PSYMTABS_REQUIRED): Rewrite.
-	(find_pc_sect_psymtab, find_pc_sect_psymbol)
-	(match_partial_symbol, lookup_partial_symbol, dump_psymtab)
-	(psym_dump, recursively_search_psymtabs, psym_has_symbols)
-	(psym_find_compunit_symtab_by_address, sort_pst_symbols)
-	(start_psymtab_common, end_psymtab_common)
-	(add_psymbol_to_bcache, add_psymbol_to_list, init_psymbol_list)
-	(allocate_psymtab): Update.
-	(psymtab_storage::discard_psymtab): Rename from discard_psymtab.
-	Update.
-	(dump_psymtab_addrmap, maintenance_print_psymbols)
-	(maintenance_check_psymtabs): Update.
-	(class objfile_psymtabs): Move to objfiles.h.
-	* psympriv.h (discard_psymtab): Now inline.
-	(psymtab_discarder::psymtab_discarder): Update.
-	(psymtab_discarder::~psymtab_discarder): Update.
-	(ALL_OBJFILE_PSYMTABS): Rewrite.
-	* objfiles.h (struct objfile) <psymtabs, psymtabs_addrmap,
-	free_psymtabs, psymbol_cache, global_psymbols, static_psymbols>:
-	Remove fields.
-	<partial_symtabs>: New field.
-	(class objfile_psymtabs): Move from psymtab.h.  Update.
-	* objfiles.c (objfile::objfile): Initialize partial_symtabs, not
-	psymbol_cache.
-	(objfile::~objfile): Don't destroy psymbol_cache.
-	* mdebugread.c (parse_partial_symbols): Update.
-	* dwarf2read.c (create_addrmap_from_index)
-	(create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab)
-	(process_psymtab_comp_unit_reader, dwarf2_build_psymtabs_hard)
-	(add_partial_subprogram, dwarf2_ranges_read): Update.
-	* dwarf-index-write.c (write_address_map)
-	(write_one_signatured_type, recursively_write_psymbols)
-	(class debug_names, class debug_names, write_psymtabs_to_index):
-	Update.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* symtab.h (SYMBOL_SET_NAMES): Update.
-	(symbol_set_names): Update.
-	(MSYMBOL_SET_NAMES): Update.
-	* symtab.c (symbol_set_names): Change argument to be an
-	objfile_per_bfd_storage.
-	* psymtab.c (add_psymbol_to_bcache): Update.
-	* psympriv.h (PSYMBOL_SET_NAMES): Take per_bfd argument.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (create_demangled_names_hash): Change argument to be an
-	objfile_per_bfd_storage.
-	(symbol_set_names): Update.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* xcoffread.c (xcoff_initial_scan): Unconditionally call
-	init_psymbol_list.
-	* psymtab.c (init_psymbol_list): Do nothing if already called.
-	* psympriv.h (init_psymbol_list): Add comment.
-	* dwarf2read.c (dwarf2_build_psymtabs): Unconditionally call
-	init_psymbol_list.
-	* dbxread.c (dbx_symfile_read): Unconditionally call
-	init_psymbol_list.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* xcoffread.c (scan_xcoff_symtab): Update.
-	* psymtab.c (add_psymbol_to_list): Replace "list" parameter with
-	"where".
-	* mdebugread.c (parse_partial_symbols)
-	(handle_psymbol_enumerators): Update.
-	* dwarf2read.c (add_partial_symbol, load_partial_dies): Update.
-	* dbxread.c (read_dbx_symtab): Update.
-	* psympriv.h (psymbol_placement): New enum.
-	(add_psymbol_to_list): Update.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* xcoffread.c (xcoff_start_psymtab): Remove global_psymbols and
-	static_psymbols parameters.
-	(scan_xcoff_symtab): Update.
-	* psymtab.c (start_psymtab_common): Remove global_psymbols and
-	static_psymbols parameters.
-	* psympriv.h (start_psymtab_common): Update.
-	* mdebugread.c (parse_partial_symbols): Update.
-	* dwarf2read.c (create_partial_symtab): Update.
-	* dbxread.c (read_dbx_symtab): Update.
-	(start_psymtab): Remove global_psymbols and static_psymbols
-	parameters.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* xcoffread.c (xcoff_end_psymtab): Remove some initializations.
-	* psymtab.c (allocate_psymtab): Add comment.
-	* psympriv.h (allocate_psymtab): Add comment.
-	* dwarf2read.c (dwarf2_create_include_psymtab): Remove some
-	initializations.
-	* dbxread.c (dbx_end_psymtab): Remove some initializations.
-
-2019-01-10  Tom Tromey  <tom@tromey.com>
-
-	* symfile.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs):
-	Don't declare.
-	* mipsread.c: Include mdebugread.h.
-	* mdebugread.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs):
-	Declare.
-	* elfread.c: Include mdebugread.h.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* dbxread.c (dbx_end_psymtab): Use objfile_psymtabs.
-	* mdebugread.c (parse_partial_symbols): Use objfile_psymtabs.
-	* psymtab.c (ALL_OBJFILE_PSYMTABS_REQUIRED): Remove.
-	(psym_map_symtabs_matching_filename, find_pc_sect_psymtab)
-	(psym_lookup_symbol, psym_find_last_source_symtab)
-	(psym_forget_cached_source_info, psym_print_stats)
-	(psym_expand_symtabs_for_function, psym_expand_all_symtabs)
-	(psym_expand_symtabs_with_fullname, psym_map_symbol_filenames)
-	(psym_map_matching_symbols, psym_expand_symtabs_matching)
-	(psym_find_compunit_symtab_by_address)
-	(maintenance_print_psymbols, maintenance_info_psymtabs)
-	(maintenance_check_psymtabs): Use ranged for.
-	* psymtab.h (class objfile_psymtabs): New.
-	(require_partial_symbols): Return objfile_psymtabs.
-	* psympriv.h (ALL_OBJFILE_PSYMTABS): Remove.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* symfile.c (overlay_invalidate_all, find_pc_overlay)
-	(find_pc_mapped_section, list_overlays_command)
-	(map_overlay_command, unmap_overlay_command)
-	(simple_overlay_update): Use all_objfiles.
-	* spu-tdep.c (spu_overlay_update): Use all_objfiles.
-	* printcmd.c (info_symbol_command): Use all_objfiles.
-	* objfiles.h (ALL_OBJSECTIONS): Remove.
-	* maint.c (maintenance_translate_address): Use all_objfiles.
-	* gcore.c (gcore_create_callback): Use all_objfiles.
-	(objfile_find_memory_regions): Likewise.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (find_line_symtab, info_sources_command)
-	(make_source_files_completion_list): Use objfile_compunits.
-	* source.c (select_source_symtab): Use objfile_compunits.
-	* objfiles.h (struct objfile): Update comment.
-	(ALL_OBJFILES): Remove.
-	(ALL_FILETABS): Remove.
-	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Use
-	objfile_compunits.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* symmisc.c (print_objfile_statistics, dump_objfile)
-	(maintenance_print_symbols): Use compunit_filetabs.
-	* source.c (forget_cached_source_info_for_objfile): Use
-	compunit_filetabs.
-	* objfiles.h (ALL_OBJFILE_FILETABS): Remove.
-	(ALL_FILETABS): Use compunit_filetabs.
-	* objfiles.c (objfile_relocate1): Use compunit_filetabs.
-	* coffread.c (coff_symtab_read): Use compunit_filetabs.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* symtab.h (ALL_COMPUNIT_FILETABS): Remove.
-	(compunit_filetabs): New.
-	* symtab.c (iterate_over_some_symtabs, find_pc_sect_line): Use
-	compunit_filetabs.
-	(info_sources_command, make_source_files_completion_list): Remove
-	declaration.
-	* symmisc.c (print_objfile_statistics, dump_objfile)
-	(maintenance_print_symbols): Remove declaration.
-	(maintenance_info_symtabs): Use compunit_filetabs.
-	(maintenance_info_line_tables): Likewise.
-	* source.c (select_source_symtab): Change local variable name.
-	(forget_cached_source_info_for_objfile): Remove declaration.
-	* objfiles.h (ALL_OBJFILE_FILETABS): Use compunit_filetabs.
-	* objfiles.c (objfile_relocate1): Remove declaration.
-	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove
-	declaration.
-	* maint.c (count_symtabs_and_blocks): Use compunit_filetabs.
-	* coffread.c (coff_symtab_read): Remove declaration.
-	* buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Use
-	compunit_filetabs.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (lookup_objfile_from_block)
-	(find_pc_sect_compunit_symtab, search_symbols)
-	(default_collect_symbol_completion_matches_break_on): Use
-	objfile_compunits.
-	* objfiles.h (ALL_COMPUNITS): Remove.
-	* maint.c (count_symtabs_and_blocks): Use objfile_compunits.
-	* cp-support.c (add_symbol_overload_list_qualified): Use
-	objfile_compunits.
-	* ada-lang.c (ada_collect_symbol_completion_matches)
-	(ada_add_global_exceptions): Use objfile_compunits.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* source.c (select_source_symtab)
-	(forget_cached_source_info_for_objfile): Remove declaration.
-	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove
-	declaration.
-	* maint.c (count_symtabs_and_blocks): Remove declaration.
-	* cp-support.c (add_symbol_overload_list_qualified): Remove
-	declaration.
-	* coffread.c (coff_symtab_read): Remove declaration.
-	* symtab.c (lookup_symbol_in_objfile_symtabs)
-	(basic_lookup_transparent_type_1): Use objfile_compunits.
-	(lookup_objfile_from_block, find_pc_sect_compunit_symtab)
-	(info_sources_command, search_symbols)
-	(default_collect_symbol_completion_matches_break_on)
-	(make_source_files_completion_list): Remove declaration.
-	* ada-lang.c (add_nonlocal_symbols): Use objfile_compunits.
-	(ada_collect_symbol_completion_matches)
-	(ada_add_global_exceptions): Remove declaration.
-	* linespec.c (iterate_over_all_matching_symtabs): Use
-	objfile_compunits.
-	* objfiles.h (ALL_OBJFILE_COMPUNITS): Remove.
-	(class objfile_compunits): New.
-	(ALL_COMPUNITS): Use objfile_compunits.
-	* symmisc.c (print_objfile_statistics, maintenance_info_symtabs)
-	(maintenance_check_symtabs, maintenance_info_line_tables): Use
-	objfile_compunits.
-	* objfiles.c (objfile_relocate1): Use objfile_compunits.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (search_symbols)
-	(default_collect_symbol_completion_matches_break_on): Use
-	objfile_msymbols.
-	* ada-lang.c (ada_lookup_simple_minsym)
-	(ada_collect_symbol_completion_matches): Use objfile_msymbols.
-	* minsyms.c (find_solib_trampoline_target): Use objfile_msymbols.
-	* hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Use
-	objfile_msymbols.
-	* coffread.c (coff_symfile_read): Use objfile_msymbols.
-	* symmisc.c (dump_msymbols): Use objfile_msymbols.
-	* objc-lang.c (find_methods): Use objfile_msymbols.
-	(info_selectors_command, info_classes_command): Likewise.
-	* stabsread.c (scan_file_globals): Use objfile_msymbols.
-	* objfiles.h (class objfile_msymbols): New.
-	(ALL_OBJFILE_MSYMBOLS): Remove.
-	(ALL_MSYMBOLS): Remove.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* common/next-iterator.h (next_adapter): Add Iterator template
-	parameter.
-	* objfiles.h (ALL_OBJFILES_SAFE): Remove.
-	(class all_objfiles_safe): New.
-	* jit.c (jit_inferior_exit_hook): Use all_objfiles_safe.
-	* objfiles.c (put_objfile_before): Update comment.
-	(add_separate_debug_objfile): Likewise.
-	(free_all_objfiles): Use all_objfiles_safe.
-	(objfile_purge_solibs): Likewise.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* symtab.c (iterate_over_symtabs, matching_obj_sections)
-	(expand_symtab_containing_pc, lookup_static_symbol)
-	(basic_lookup_transparent_type, find_pc_sect_compunit_symtab)
-	(find_symbol_at_address, find_line_symtab, find_main_name): Use
-	all_objfiles.
-	* probe.c (find_probe_by_pc, collect_probes): Use all_objfiles.
-	* breakpoint.c (create_overlay_event_breakpoint)
-	(create_longjmp_master_breakpoint)
-	(create_std_terminate_master_breakpoint)
-	(create_exception_master_breakpoint): Use all_objfiles.
-	* linux-thread-db.c (try_thread_db_load_from_pdir)
-	(has_libpthread): Use all_objfiles.
-	* ada-lang.c (add_nonlocal_symbols): Use all_objfiles.
-	* linespec.c (iterate_over_all_matching_symtabs)
-	(search_minsyms_for_name): Use all_objfiles.
-	* maint.c (maintenance_info_sections): Use all_objfiles.
-	* main.c (captured_main_1): Use all_objfiles.
-	* spu-tdep.c (spu_objfile_from_frame): Use all_objfiles.
-	* guile/scm-objfile.c (gdbscm_objfiles): Use all_objfiles.
-	* guile/scm-pretty-print.c
-	(ppscm_find_pretty_printer_from_objfiles): Use all_objfiles.
-	* solib-spu.c (append_ocl_sos): Use all_objfiles.
-	* symmisc.c (maintenance_print_symbols): Use all_objfiles.
-	(maintenance_print_msymbols): Use all_objfiles.
-	* source.c (select_source_symtab): Use all_objfiles.
-	* jit.c (jit_find_objf_with_entry_addr): Use all_objfiles.
-	* symfile.c (remove_symbol_file_command)
-	(expand_symtabs_matching, map_symbol_filenames): Use
-	all_objfiles.
-	* ppc-linux-tdep.c (ppc_linux_spe_context_inferior_created): Use
-	all_objfiles.
-	* dwarf2-frame.c (dwarf2_frame_find_fde): Use all_objfiles.
-	* objc-lang.c (find_methods): Use all_objfiles.
-	* objfiles.c (have_partial_symbols, have_full_symbols)
-	(have_minimal_symbols, qsort_cmp)
-	(default_iterate_over_objfiles_in_search_order): Use
-	all_objfiles.
-	* hppa-tdep.c (find_unwind_entry): Use all_objfiles.
-	* psymtab.c (maintenance_print_psymbols): Use all_objfiles.
-	(maintenance_check_psymtabs): Use all_objfiles.
-	(ALL_PSYMTABS): Remove.
-	* compile/compile-object-run.c (do_module_cleanup): Use
-	all_objfiles.
-	* blockframe.c (find_pc_partial_function): Use all_objfiles.
-	* cp-support.c (add_symbol_overload_list_qualified): Use
-	all_objfiles.
-	* windows-tdep.c (windows_iterate_over_objfiles_in_search_order):
-	Use all_objfiles.
-	* dwarf-index-write.c (save_gdb_index_command): Use all_objfiles.
-	* python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): Use
-	all_objfiles.
-	* python/py-objfile.c (objfpy_lookup_objfile_by_name)
-	(objfpy_lookup_objfile_by_build_id): Use all_objfiles.
-	* python/py-prettyprint.c (find_pretty_printer_from_objfiles):
-	Uses all_objfiles.
-	* solib.c (solib_read_symbols): Use all_objfiles
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* probe.c (parse_probes_in_pspace): Use all_objfiles.
-	* guile/scm-progspace.c (gdbscm_progspace_objfiles): Use
-	all_objfiles.
-	* objfiles.h (ALL_PSPACE_OBJFILES): Remove.
-	* symmisc.c (print_symbol_bcache_statistics)
-	(print_objfile_statistics, maintenance_print_objfiles)
-	(maintenance_info_symtabs, maintenance_check_symtabs)
-	(maintenance_expand_symtabs, maintenance_info_line_tables): Use
-	all_objfiles.
-	* source.c (forget_cached_source_info): Use all_objfiles.
-	* symfile-debug.c (set_debug_symfile): Use all_objfiles.
-	* elfread.c (elf_gnu_ifunc_resolve_by_cache)
-	(elf_gnu_ifunc_resolve_by_got): Use all_objfiles.
-	* objfiles.c (update_section_map): Use all_objfiles.
-	(shared_objfile_contains_address_p): Likewise.
-	* psymtab.c (maintenance_info_psymtabs): Use all_objfiles.
-	* python/py-progspace.c (pspy_get_objfiles): Use all_objfiles.
-
-2019-01-09  Tom Tromey  <tom@tromey.com>
-
-	* common/next-iterator.h: New file.
-	* objfiles.h (class all_objfiles): New.
-	(struct objfile_iterator): New.
-
-2019-01-09  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* NEWS: Move the description of the changed "frame", "select-frame",
-	 and "info frame" commands to the Changed commands section.
-
-2019-01-09  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdbtypes.c (check_stub_method_group): Remove handling of old
-	mangling schemes.
-	* linespec.c (find_methods): Likewise.
-	* stabsread.c (read_member_functions): Likewise.
-	* valops.c (search_struct_method): Likewise.
-	(value_struct_elt_for_reference): Likewise.
-	* NEWS: Mention this change.
-
-2019-01-09  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* cli/cli-cmds.c (list_command): Pass a source_lines_range to
-	print_source_lines.
-	* source.c (print_source_lines_base): Update line number check.
-	(print_source_lines): New function.
-	(source_lines_range::source_lines_range): New function.
-	* source.h (class source_lines_range): New class.
-	(print_source_lines): New declaration.
-
-2019-01-09  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* linespec.c (linespec_state_destructor): Free self->canonical_names.
-
-2019-01-08  Tom Tromey  <tom@tromey.com>
-	    Simon Marchi  <simon.marchi@ericsson.com>
-
-	PR gdb/24060
-	* ada-exp.y (DOLLAR_VARIABLE): Rename from SPECIAL_VARIABLE.
-	* ada-lex.l (DOLLAR_VARIABLE): Likewise.
-	* c-exp.y (DOLLAR_VARIABLE): Rename from VARIABLE.
-	* f-exp.y (DOLLAR_VARIABLE): Likewise.
-	* m2-exp.y (DOLLAR_VARIABLE): Rename from INTERNAL_VAR.
-	* p-exp.y (DOLLAR_VARIABLE): Rename from VARIABLE.
-
-2019-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* source.c (select_source_symtab): Move header comment to
-	declaration in source.h.
-	(forget_cached_source_info_for_objfile): Likewise.
-	(forget_cached_source_info): Likewise.
-	(identify_source_line): Likewise.
-	* source.h (identify_source_line): Move declaration from symtab.h
-	and add comment from source.c
-	(print_source_lines): Likewise.
-	(forget_cached_source_info_for_objfile): Likewise.
-	(forget_cached_source_info): Likewise.
-	(select_source_symtab): Likewise.
-	(enum print_source_lines_flag): Move definition from symtab.h.
-	* symtab.h (identify_source_line): Move declaration to source.h.
-	(print_source_lines): Likewise.
-	(forget_cached_source_info_for_objfile): Likewise.
-	(forget_cached_source_info): Likewise.
-	(select_source_symtab): Likewise.
-	(enum print_source_lines_flag): Move definition to source.h.
-	* tui/tui-hooks.c: Add 'source.h' include.
-
-2019-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* source.c (print_source_lines_base): Handle requests to print
-	reverse line number sequences, and guard against empty lines
-	string.
-
-2019-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* source.c (print_source_lines_base): Fix skip of '\r' if next
-	character is '\n'.
-
-2019-01-06  Tom Tromey  <tom@tromey.com>
-
-	* c-exp.y (struct c_parse_state) <macro_original_text,
-	expansion_obstack>: New member.
-	(macro_original_text, expansion_obstack): Remove globals.
-	(scan_macro_expansion, scanning_macro_expansion)
-	(finished_macro_expansion): Update.
-	(scan_macro_cleanup): Remove.
-	(yylex, c_parse): Update.
-
-2019-01-06  Tom Tromey  <tom@tromey.com>
-
-	* c-exp.y (struct c_parse_state) <strings>: New member.
-	(operator_stoken): Update.
-
-2019-01-06  Tom Tromey  <tom@tromey.com>
-
-	* parser-defs.h (type_ptr): Remove typedef.  Don't declare VEC.
-	(union type_stack_elt) <typelist_val>: Now a pointer to
-	std::vector.
-	(type_stack_cleanup): Don't declare.
-	(push_typelist): Update.
-	* parse.c (pop_typelist): Return a std::vector.
-	(push_typelist): Take a std::vector.
-	(follow_types): Update.  Do not free args.
-	(type_stack_cleanup): Remove.
-	* c-exp.y (struct c_parse_state): New.
-	(cpstate): New global.
-	(type_aggregate_p, exp, ptr_operator, parameter_typelist)
-	(nonempty_typelist): Update.
-	(func_mod): Create a new vector.
-	(c_parse): Create a c_parse_state.
-	(check_parameter_typelist): Do not delete params.
-	(function_method): Update.  Do not delete type_list.
-
-2019-01-06  Tom Tromey  <tom@tromey.com>
-
-	PR gdb/28155:
-	* python/py-finishbreakpoint.c (bpfinishpy_init): Use
-	check_typedef.
-	* infcmd.c (finish_command_fsm_should_stop): Use check_typedef.
-	(print_return_value): Likewise.
-
-2019-01-05  Tom Tromey  <tom@tromey.com>
-
-	* contrib/cleanup_check.py: Remove.
-	* contrib/gcc-with-excheck: Remove.
-	* contrib/exsummary.py: Remove.
-	* contrib/excheck.py: Remove.
-
-2019-01-05  Joel Brobecker  <brobecker@adacore.com>
-
-	* thread.c (delete_thread_1): Add gdb_assert that THR is not
-	NULL. Initialize tpprev to NULL instead of assigning it
-	to NULL on the next statement.
-	* windows-nat.c (windows_delete_thread): Remove check for
-	main_thread_id before printing thread exit notifications.
-	(get_windows_debug_event) <EXIT_THREAD_DEBUG_EVENT>:
-	Remove thread ID check against main_thread_id.
-	<CREATE_PROCESS_DEBUG_EVENT>: Remove call to
-	windows_delete_thread.
-	<EXIT_PROCESS_DEBUG_EVENT>: Add call to windows_delete_thread.
-
-2019-01-04  Tom Tromey  <tom@tromey.com>
-
-	* compile/compile.c (_initialize_compile): Use upper case for
-	metasyntactic variables.
-	* symmisc.c (_initialize_symmisc): Use upper case for
-	metasyntactic variables.
-	* psymtab.c (_initialize_psymtab): Use upper case for
-	metasyntactic variables.
-	* demangle.c (demangle_command): Use upper case for metasyntactic
-	variables.
-	(_initialize_demangler): Likewise.
-	* ax-gdb.c (_initialize_ax_gdb): Use upper case for metasyntactic
-	variables.
-
-2019-01-03  Tom Tromey  <tom@tromey.com>
-
-	* tui/tui-source.c (tui_set_source_content): Use xstrdup.
-
-2019-01-03  Tom Tromey  <tom@tromey.com>
-
-	* python/py-symtab.c (salpy_str): Update.
-	(struct salpy_sal_object) <symtab>: Now a PyObject.
-	(salpy_dealloc): Update.
-	(del_objfile_sal): Use gdbpy_ref.
-
-2019-01-03  Tom Tromey  <tom@tromey.com>
-
-	* python/py-type.c (convert_field): Use new_reference.  Return
-	gdbpy_ref.
-	(make_fielditem): Return gdbpy_ref.
-	(typy_fields): Update.
-	(typy_getitem): Update.
-	(field_name): Return gdbpy_ref.  Use new_reference.
-	(typy_iterator_iternext): Update.
-
-2019-01-03  Tom Tromey  <tom@tromey.com>
-
-	* python/py-record.c (gdbpy_stop_recording): Use Py_RETURN_NONE.
-
-2019-01-03  Tom Tromey  <tom@tromey.com>
-
-	* python/py-value.c (valpy_dealloc): Use Py_XDECREF.
-	* python/py-type.c (typy_fields_items): Use gdbpy_ref.
-	* python/py-progspace.c (pspy_set_printers): Use gdbpy_ref.
-	(pspy_set_frame_filters, pspy_set_frame_unwinders)
-	(pspy_set_type_printers): Likewise.
-	* python/py-function.c (fnpy_init): Use gdbpy_ref.
-	* python/py-cmd.c (cmdpy_init): Use gdbpy_ref.
-	* python/py-objfile.c (objfpy_set_printers): Use gdbpy_ref.
-	(objfpy_set_frame_filters, objfpy_set_frame_unwinders)
-	(objfpy_set_type_printers): Likewise.
-
-2019-01-03  Tom Tromey  <tom@tromey.com>
-
-	* python/python.c (gdbpy_enter, ~gdbpy_enter): Update.
-	(gdbpy_print_stack): Use gdbpy_err_fetch.
-	* python/python-internal.h (class gdbpy_err_fetch): New class.
-	(class gdbpy_enter) <m_error_type, m_error_value,
-	m_error_traceback>: Remove.
-	<m_error>: New member.
-	(gdbpy_exception_to_string): Don't declare.
-	* python/py-varobj.c (py_varobj_iter_next): Use gdbpy_err_fetch.
-	* python/py-value.c (convert_value_from_python): Use
-	gdbpy_err_fetch.
-	* python/py-utils.c (gdbpy_err_fetch::to_string): Rename from
-	gdbpy_exception_to_string.
-	(gdbpy_handle_exception): Use gdbpy_err_fetch.
-	* python/py-prettyprint.c (print_stack_unless_memory_error): Use
-	gdbpy_err_fetch.
-
-2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* linux-nat.c (delete_lwp_cleanup): Delete.
-	(struct lwp_deleter): New struct.
-	(lwp_info_up): New typedef.
-	(linux_nat_target::follow_fork): Delete cleanup, and make use of
-	lwp_info_up.
-
-2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* linux-fork.c (class scoped_switch_fork_info): New class.
-	(inferior_call_waitpid): Update to use scoped_switch_fork_info.
-
-2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* valops.c (find_overload_match): Remove use of null_cleanup, and
-	calls to do_cleanups.
-
-2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* compile/compile-cplus-types.c
-	(compile_cplus_instance::decl_name): Handle changes to
-	cp_func_name.
-	* cp-support.c (cp_func_name): Update header comment, update
-	return type.
-	* cp-support.h (cp_func_name): Update return type in declaration.
-	* valops.c (find_overload_match): Move temp_func local to top
-	level of function and change its type.  Use temp_func to hold and
-	delete temporary string obtained from cp_func_name.
-
-2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* remote.c (remote_target::remote_check_symbols): Convert `msg` to
-	gdb::char_vector, remove cleanup, and update uses of `msg`.
-
-2019-01-03  Jim Wilson  <jimw@sifive.com>
-
-	* riscv-tdep.c (riscv_freg_feature): Drop s0 name from f8.
-
-2019-01-02  Tom Tromey  <tom@tromey.com>
-
-	* xml-tdesc.c (xml_cache): Hold a target_desc_up.
-	(tdesc_parse_xml): Remove cleanups.
-	* target-descriptions.h (make_cleanup_free_target_description):
-	Don't declare.
-	(target_desc_deleter): New struct.
-	(target_desc_up): New typedef.
-	* target-descriptions.c (target_desc_deleter::operator()): Rename
-	from free_target_description.
-	(make_cleanup_free_target_description): Remove.
-
-2019-01-02  Tom Tromey  <tom@tromey.com>
-
-	* linespec.c (struct linespec_parser): Rename from ls_parser.  Add
-	constructor, destructor.
-	(linespec_parser): Remove typedef.
-	(~linespec_parser): Rename from linespec_parser_delete.
-	(linespec_lex_to_end, linespec_complete_label)
-	(linespec_complete): Update.
-	(decode_line_full): Remove cleanups.
-	(decode_line_1): Update.
-
-2019-01-02  Tom Tromey  <tom@tromey.com>
-
-	* python/python-internal.h (inferior_to_inferior_object): Change
-	return type.
-	* python/py-exitedevent.c (create_exited_event_object): Update.
-	* python/py-inferior.c (inferior_to_inferior_object): Return
-	gdbpy_ref.
-	(python_new_inferior, python_inferior_deleted)
-	(thread_to_thread_object, delete_thread_object)
-	(build_inferior_list, gdbpy_selected_inferior): Update.
-	* python/py-infthread.c (create_thread_object): Update.  Also fail
-	if inferior_to_inferior_object fails.
-
-2019-01-02  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* inferior.h (class inferior) <displaced_step_state>: New field.
-	* infrun.h (struct displaced_step_state): Move here from
-	infrun.c.  Initialize fields, add constructor.
-	<inf>: Remove field.
-	<reset>: New method.
-	* infrun.c (struct displaced_step_inferior_state): Move to
-	infrun.h.
-	(displaced_step_inferior_states): Remove.
-	(get_displaced_stepping_state): Adust.
-	(displaced_step_in_progress_any_inferior): Adjust.
-	(displaced_step_in_progress_thread): Adjust.
-	(displaced_step_in_progress): Adjust.
-	(add_displaced_stepping_state): Remove.
-	(get_displaced_step_closure_by_addr): Adjust.
-	(remove_displaced_stepping_state): Remove.
-	(infrun_inferior_exit): Call displaced_step_state.reset.
-	(use_displaced_stepping): Don't check for NULL.
-	(displaced_step_prepare_throw): Call
-	get_displaced_stepping_state.
-	(displaced_step_fixup): Don't check for NULL.
-	(prepare_for_detach): Don't check for NULL.
-
-2019-01-02  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* infcall.c (call_function_by_hand_dummy): cleanup/destroy sm
-	 in case of call that did not complete.
-
-2019-01-02  Andrey Utkin  <autkin@undo.io>
-
-	* symfile.c (find_separate_debug_file): Fix search of debug files for
-	remote debuggee.
-
-2019-01-02  Tom Tromey  <tom@tromey.com>
-
-	* python/py-inferior.c (gdbpy_initialize_inferior): Fix
-	indentation.
-	* python/py-frame.c (frapy_older): Remove cast.
-	(frapy_newer): Likewise.
-	* python/py-breakpoint.c (local_setattro): Remove cast.
-	* python/py-arch.c (archpy_name): Remove local variable.
-	* python/py-type.c (gdbpy_lookup_type): Remove cast.
-
-2019-01-02  Joel Brobecker  <brobecker@adacore.com>
-
-	* unittests/basic_string_view/element_access/char/empty.cc:
-	Fix year range in copyright header.
-
-2019-01-01  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* arch/riscv.h (struct riscv_gdbarch_features) <hw_float_abi>:
-	Delete.
-	<operator==>: Update with for removed field.
-	<hash>: Likewise.
-	* riscv-tdep.h (struct gdbarch_tdep) <features>: Renamed to...
-	<isa_features>: ...this.
-	<abi_features>: New field.
-	(riscv_isa_flen): Update comment.
-	(riscv_abi_xlen): New declaration.
-	(riscv_abi_flen): New declaration.
-	* riscv-tdep.c (riscv_isa_xlen): Update to get answer from
-	isa_features.
-	(riscv_abi_xlen): New function.
-	(riscv_isa_flen): Update to get answer from isa_features.
-	(riscv_abi_flen): New function.
-	(riscv_has_fp_abi): Update to get answer from abi_features.
-	(riscv_call_info::riscv_call_info): Use abi xlen and flen, not isa
-	xlen and flen.
-	(riscv_call_info) <xlen, flen>: Update comment.
-	(riscv_call_arg_struct): Remove invalid assertions
-	(riscv_features_from_gdbarch_info): Update now hw_float_abi field
-	is removed.
-	(riscv_gdbarch_init): Gather isa features and abi features
-	separately, ensure both match on the gdbarch when reusing an old
-	gdbarch.  Relax an error check to allow 32-bit abi float to run on
-	a target with 64-bit float hardware.
-
-2019-01-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* source.c (search_command_helper): Stop reverse search
-	when line 1 has been searched.
-
-2019-01-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* record-full.c (record_full_base_target::close): Rewrite
-	record_full_core_buf_list free logic.
-
-2019-01-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* break-catch-syscall.c (print_one_catch_syscall): xfree
-	the last text.
-
-2019-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* top.c (print_gdb_version): Update Copyright year in version
-	message.
-
-2019-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	Update copyright year range in all GDB files.
-
-2019-01-01, 19  Joel Brobecker  <brobecker@adacore.com>
-
-	* config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2018.
-
-For older changes see ChangeLog-2018.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-coding: utf-8
-End:
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1992 ./gdb/ChangeLog-1992
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1992	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-1992	2024-02-01 01:47:15.000000000 +0000
@@ -427,11 +427,6 @@ Thu Dec 17 00:44:57 1992  John Gilmore
 	* symfile.c (syms_from_objfile):  Insert debugging check to test
 	NAMES_HAVE_UNDERSCORE setting against the BFD support.
 
-	* doc/gdbint.texinfo (Host Conditionals):  Remove
-	NAMES_HAVE_UNDERSCORE, SOME_NAMES_HAVE_DOT, document
-	MEM_FNS_DECLARED.
-	(Target Conditionals):  Remove all of the above.
-
 	* xm-rs6000.h (MEM_FNS_DECLARED):  Update comments.
 
 	* coffread.c (read_coff_symtab, C_BLOCK):  Use complain() rather
@@ -487,9 +482,6 @@ Tue Dec 15 02:01:00 1992  John Gilmore
 	* main.c (main):  Accept --silent as well as --quiet.  Change +help
 	to --help.  Suggested by Karl Berry, <karl@cs.umb.edu>.
 
-	* doc/gdbint.texinfo:  SWAP_HOST_AND_TARGET => SWAP_TARGET_AND_HOST.
-	Noticed by Andy Jackson, <arj@cam-orl.co.uk>.
-
 Mon Dec 14 23:28:15 1992  John Gilmore  (gnu@cygnus.com)
 
 	* tm-nindy960.h, remote-nindy.c:  Lint.
@@ -1134,7 +1126,6 @@ Tue Oct 27 17:08:45 1992  K. Richard Pix
 	* defs.h: include nm.h.
 	* coredep.c, infptrace.c, procfs.c, rs6000-nat.c, sparc-nat.c,
 	  sparc-tdep.c, : do not include nm.h.
-	* doc/gdbint.texinfo: nm.h now included in defs.h.
 
 Fri Oct 23 04:47:17 1992  Stu Grossman  (grossman at cygnus.com)
 
@@ -1202,7 +1193,6 @@ Wed Oct 21 17:46:07 1992  K. Richard Pix
 Wed Oct 21 03:51:01 1992  John Gilmore  (gnu@cygnus.com)
 
 	* coredep.c:  Include "nm.h" to get REGISTER_U_ADDR.
-	* doc/gdbint.texinfo:  Improve REGISTER_U_ADDR and USE_PROC_FS doc.
 
 	* Makefile.in (VERSION):  Tick to 4.6.9.
 
@@ -1216,9 +1206,6 @@ Tue Oct 20 23:27:56 1992  John Gilmore
 	(initialize_symmisc):  Remove empty function.
 	* tm-spc-noun.h, tm-sun4os4.h, tm-sun4sol2.h (STACK_END_ADDRESS):
 	Remove obsolete, misspelled macro.
-	* doc/gdbint.texinfo:  Document obsolete STACK_END_ADDR.
-	(all @node commands):  Use new form to avoid nitpicking errors.
-	* doc/gdbint.texinfo:  Document host/native/target split.
 	                                                                   
 Wed Oct 21 00:14:34 1992  Stu Grossman  (grossman at cygnus.com)
 
@@ -1251,8 +1238,6 @@ Tue Oct 20 21:32:18 1992  K. Richard Pix
 	* hppa[bh]h-tdep.c: do not include ptrace.h.
 	* Makefile.in (HFILES): added nm-hppa[bh].h.
 
-	* doc/gdbint.texinfo: add PUSH_DUMMY_FRAME, POP_FRAME.
-
 Tue Oct 20 00:01:46 1992  Stu Grossman  (grossman at cygnus.com)
 
 	* mips-nat.c:  Straighten out include files.  Work around
@@ -1402,7 +1387,6 @@ Fri Oct 16 03:34:01 1992  John Gilmore
 
 	Avoid longjmp()-catching compilation errors in cross-ports.
 
-	* doc/gdbint.texinfo:  Update GET_LONGJMP_TARGET, L_SET doc.
 	* irix4-nat.c, mips-nat.c (JB_ELEMENT_SIZE, get_longjmp_target):
 	Move from mips-tdep.c and tm-{irix3,mips}.h.
 	* mips-nat.c:  Remove a bunch of code that was ifdef'd out of
@@ -1617,9 +1601,6 @@ Thu Oct  8 16:27:45 1992  K. Richard Pix
 	* config/sun4os4.mh (XDEPFILES): fork-child.o removed.
 	(NATDEPFILES): added fork-child.o.
 
-	* doc/gdbint.texinfo: document a few more macros, create new
-	  section for native macros.
-
 Thu Oct  8 13:52:46 1992  Stu Grossman  (grossman at cygnus.com)
 
 	* Makefile.in alldeps.mak depend:  Rip out 29k/udi pending
@@ -1832,7 +1813,6 @@ Thu Oct  1 01:57:56 1992  John Gilmore
 	(define_command):  If defining a new hook, check the command it
 	is hooking, and warn if none.  Install the hook.
 	* source.c (_initialize_source):  "l" is an abbrev for "list".
-	* doc/gdb.texinfo:  Document command hooks.
 
 	* Makefile.in (VERSION):  Roll to 4.6.7.
 	* config/sun4os4.mh:  Remove dup inftarg.o from NATDEPFILES.
@@ -2287,19 +2267,6 @@ Mon Sep 14 19:20:43 1992  Stu Grossman
 	(energize_call_command):  Call send_location() after doing up,
 	down, and frame commands.
 
-Fri Sep 11 18:28:28 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* doc/gdb.texinfo, doc/gdbinv-m.m4.in, doc/gdbinv-s.m4.in: first
-	pass at doc for two new remote targets---29K using UDI, and Tandem
-	ST2000 using STDBUG.
-
-	* doc/all.m4, doc/none.m4: new m4 switch, _ST2000__
-
-	* doc/all.m4: turn on H8/300 stuff for generic manual
-
-	* doc/gdbinv-s.m4.in: remove text on special procedures to continue 
-	after explicit call to breakpoint() in serial stubs.
-
 Fri Sep 11 01:34:25 1992  John Gilmore  (gnu@sphagnum.cygnus.com)
 
 	* mipsread.c:  Clean up some white space.
@@ -2366,15 +2333,6 @@ Tue Sep  8 15:22:06 1992  Stu Grossman
 	* serial.h:  Define struct ttystate properly using HAVE_TERMIO.
 	* xm-apollo68b.h:  #define PTRACE_IN_WRONG_PLACE...
 
-Fri Sep  4 18:53:57 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* doc/gdb.texinfo: fix shameful error of agreement reported by
-	jimb@occs.cs.oberlin.edu (Jim Blandy)
-	* doc/gdb.texinfo: remove old partial discussion of remote serial
-	protocol (via serial debug stubs)
-	* doc/gdbinv-m.m4.in, doc/gdbinv-s.m4.in: new section discussing
-	use of serial debug stubs
-
 Fri Sep  4 00:34:30 1992  Per Bothner  (bothner@rtl.cygnus.com)
 
 	* symfile.h:  Declaration of set_demangling_style() moved
@@ -3605,7 +3563,6 @@ Fri Jun 19 10:28:05 1992  John Gilmore
 	* am29k-tdep.c (read_register_stack, write_register_stack):
 	Change RSTACK_HIGH_ADDR to rstack_high_address, a user-settable
 	variable.  Add `set' and `show' commands for it.
-	* doc/gdb.texinfo:  Document it.
 
 Thu Jun 18 19:35:22 1992  Fred Fish  (fnf@cygnus.com)
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1993 ./gdb/ChangeLog-1993
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1993	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-1993	2024-02-01 01:47:15.000000000 +0000
@@ -411,9 +411,9 @@ Mon Nov 22 23:42:59 1993  Steve Chamberl
 Mon Nov 22 11:03:45 1993  Fred Fish  (fnf@cygnus.com)
 
 	Merged changes from kev@spuds.geg.mot.com (Kevin A. Buettner):
-	* gdb/config/m88k/delta88.mh (NATDEPFILES): Added corelow.o and
+	* config/m88k/delta88.mh (NATDEPFILES): Added corelow.o and
 	coredep.o to this list.
-	* gdb/m88k-nat.c (m88k_register_u_addr):  Avoid error when passed
+	* m88k-nat.c (m88k_register_u_addr):  Avoid error when passed
 	the number for an M88110 extended register by just returning the
 	address of r0.
 
@@ -5222,7 +5222,7 @@ Mon May 10 19:38:34 1993  John Gilmore
 Mon May 10 16:03:03 1993  Jim Kingdon  (kingdon@cygnus.com)
 
         Patch from Jeffrey Law:
-        * gdb/config/pa/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t.
+        * config/pa/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t.
 
 Mon May 10 15:28:27 1993  Ian Lance Taylor  (ian@cygnus.com)
 
@@ -5274,8 +5274,8 @@ Thu May  6 20:55:35 1993  Fred Fish  (fn
 Thu May  6 15:47:45 1993  Stu Grossman  (grossman@cygnus.com)
 
 	* More patches from Jeffrey Law (law@cs.utah.edu).
-	* gdb/config/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t.
-	* gdb/config/pa/tm-hppah.h (millicode_start, millicode_end):
+	* config/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t.
+	* config/pa/tm-hppah.h (millicode_start, millicode_end):
 	Delete unnecessary declarations.
 
 Thu May  6 15:15:46 1993  Stu Grossman  (grossman@cygnus.com)
@@ -5290,25 +5290,25 @@ Thu May  6 10:03:41 1993  Jim Kingdon  (
 Wed May  5 15:16:33 1993  Stu Grossman  (grossman@cygnus.com)
 
         * Patches from Jeffrey Law <law@cs.utah.edu>.
-	* gdb/hppa-tdep.c: Declare frame_saved_pc.
+	* hppa-tdep.c: Declare frame_saved_pc.
 	(frameless_function_invocation): New function.
 	(frame_saved_pc, init_extra_frame_info): Use 
 	frameless_function_invocation.
-	* gdb/config/pa/tm-hppa.h (SAVED_PC_AFTER_CALL): Use saved_pc_after
+	* config/pa/tm-hppa.h (SAVED_PC_AFTER_CALL): Use saved_pc_after
 	call instead of just grabbing the value currently in %r2.
 	(FRAMELESS_FUNCTION_INVOCATION): Use frameless_function_invocation.
-	* gdb/config/pa/tm-hppah.h (SAVED_PC_AFTER_CALL): Delete private
+	* config/pa/tm-hppah.h (SAVED_PC_AFTER_CALL): Delete private
 	definition and use the common one in tm-hppa.h.
-	* gdb/hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then
+	* hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then
 	use unwind descriptors to determine if the frame chain is valid.
-	* gdb/hppa-tdep.c (find_dummy_frame_regs):  Rework so that
+	* hppa-tdep.c (find_dummy_frame_regs):  Rework so that
 	it does not assume %r4 is the frame pointer.
-	* gdb/hppa-pinsn.c (print_insn): Handle 'r' and 'R' for break, rsm,
+	* hppa-pinsn.c (print_insn): Handle 'r' and 'R' for break, rsm,
 	and ssm instructions.
-	* gdb/hppa-tdep.c (extract_5r_store, extract_5R_store): New
+	* hppa-tdep.c (extract_5r_store, extract_5R_store): New
 	helper functions for print_insn.
-	* gdb/hppa-tdep.c (gcc_p, hpux_cc_p): Delete unused functions.
-	* gdb/config/pa/tm-hppa.h (ABOUT_TO_RETURN): Handle a return
+	* hppa-tdep.c (gcc_p, hpux_cc_p): Delete unused functions.
+	* config/pa/tm-hppa.h (ABOUT_TO_RETURN): Handle a return
 	which nullifies the following instruction.
 
 Tue May  4 12:11:38 1993  Jim Kingdon  (kingdon@cygnus.com)
@@ -5490,8 +5490,6 @@ Thu Apr 29 00:03:59 1993  Fred Fish  (fn
 	to access the field.
 	* config/convex/xm-convex.h (LONG_LONG):  Replace with
 	CC_HAS_LONG_LONG.  Add define for PRINTF_HAS_LONG_LONG.
-	* doc/gdbint.texinfo (LONG_LONG):  Replace with CC_HAS_LONG_LONG.
-	Add PRINTF_HAS_LONG_LONG references.
 
 Wed Apr 28 06:11:38 1993  Jim Kingdon  (kingdon@cygnus.com)
 
@@ -5520,12 +5518,6 @@ Wed Apr 28 06:11:38 1993  Jim Kingdon  (
 
 	* config/sparc/xm-sun4os4.h [__STDC__]: Don't use MALLOC_INCOMPATIBLE.
 
-Wed Apr 28 11:39:18 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* doc/gdb.texinfo: make node "Shell Commands" unconditional;
-	describe `set demangle-style arm' (not cfront); 
-	mention can type `q' to discard output, when gdb pages
-
 Wed Apr 28 11:32:39 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
 
 	* valops.c (search_struct_field): Fix gdb core dump with incomplete
@@ -5638,10 +5630,6 @@ Fri Apr 23 10:34:02 1993  Stu Grossman
 	prefix for func	name.  (FIX_CALL_DUMMY):  Move code into
 	hppah-tdep.c.
 
-	* testsuite/gdb.t16/gdbme.c, testsuite/gdb.t17/gdbme.c:  Add calls
-	to malloc() so that we can test GDB eval of dynamically created
-	arrays (like char strings in `print "foo"').
-
 Fri Apr 23 01:28:14 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
 
 	* printcmd.c (print_address_symbolic): Search symtabs as well as the
@@ -6202,7 +6190,6 @@ Mon Mar 29 15:03:25 1993  Fred Fish  (fn
 	tm-a29k.h.
 	* config/a29k/a29k-udi.mt (MT_CFLAGS):  Remove TARGET_AM29K
 	define that does not appear anywhere else in the gdb source tree.
-	* doc/gdbinit.texinfo:  Document renaming of tm-29k.h to tm-a29k.h.
 
 Mon Mar 29 13:55:29 1993  Jim Kingdon  (kingdon@cygnus.com)
 
@@ -6753,11 +6740,6 @@ Tue Feb 23 18:58:11 1993  Mike Werner  (
 
 	* configure.in: added testsuite to configdirs.
 
-Tue Feb 23 11:46:11 1993  Mike Stump  (mrs@cygnus.com)
-
-	* doc/stabs.texi: The `this' pointer is now known by the name
-	`this' instead of `$t'.
-
 Tue Feb 23 11:21:33 1993  Fred Fish  (fnf@cygnus.com)
 
 	* dwarfread.c (read_tag_string_type):  Rewrite to allow forward
@@ -6788,13 +6770,13 @@ Mon Feb 22 15:21:54 1993  Ian Lance Tayl
 
 Mon Feb 22 07:54:03 1993  Mike Werner  (mtw@poseidon.cygnus.com)
 
-        * gdb/testsuite: made modifications to testcases, etc., to allow
+        * testsuite: made modifications to testcases, etc., to allow
         them to work properly  given the reorganization of deja-gnu and the
         relocation of the testcases from deja-gnu to a "tool" subdirectory.
 
 Sun Feb 21 10:55:55 1993  Mike Werner  (mtw@poseidon.cygnus.com)
 
-	* gdb/testsuite: Initial creation of gdb/testsuite.
+	* testsuite: Initial creation of gdb/testsuite.
 	Migrated dejagnu testcases and support files for testing nm to
 	gdb/testsuite from deja-gnu.  These files were moved "as is"
 	with no modifications.	This migration is part of a major overhaul
@@ -6961,8 +6943,6 @@ Wed Feb 10 23:42:37 1993  John Gilmore
 	* Makefile.in:  xcoffread.o is not built by default.
 	* xm-rs6000.h (IBM6000_HOST):  Remove.
 	* config/rs6000.mh (NATDEPFILES): xcoffread.o is native only.
-	* doc/gdbint.texinfo:  Eliminate IBM6000_HOST, document
-	IBM6000_TARGET.
 
 Wed Feb 10 18:31:20 1993  Stu Grossman  (grossman at cygnus.com)
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1995 ./gdb/ChangeLog-1995
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1995	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-1995	2024-02-01 01:47:15.000000000 +0000
@@ -1358,7 +1358,6 @@ Wed Sep 20 08:16:03 1995  steve chamberl
 
 	* defs.h (xmalloc, xrealloc): Delete, they're declared in libiberty.h.
 	(GETENV_PROVIDED, FCLOSE_PROVIDED): New.
-	* doc/gdbint.texinfo (GETENV_PROVIDED, FCLOSE_PROVIDED): Document.
 	* remote-sim.[ch] (sim_callback_write_stdout): New.
 
 Tue Sep 19 15:28:58 1995  Per Bothner  <bothner@kalessin.cygnus.com>
@@ -3531,8 +3530,6 @@ Fri Mar 24 15:45:42 1995  Stu Grossman
 	* remote-est.c:  Rewrite to use new monitor conventions.
 	* config/m68k/est.mt (TDEPFILES):  Add monitor.o.
 	* config/m68k/tm-est.h:  Set NUM_REGS to 18.
-	* testsuite/gdb.base/break.exp:  Lots of cleanups.  Use gdb_test
-	more thoroughly.
 
 Thu Mar 23 23:20:00 1995  Jeff Law  (law@snake.cs.utah.edu)
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1996 ./gdb/ChangeLog-1996
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1996	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-1996	2024-02-01 01:47:15.000000000 +0000
@@ -1133,11 +1133,9 @@ Wed Oct  2 22:07:16 1996  Fred Fish  <fn
 
 	* inferior.h (IN_SIGTRAMP): Pass pc to SIGTRAMP_START and
 	SIGTRAMP_END.
-	* config/i386/tm-i386os9k.h (SIGTRAMP_START, SIGTRAMP_END): 
+	* config/i386/tm-i386os9k.h (SIGTRAMP_START, SIGTRAMP_END):
 	Define with dummy pc arg.
 	* config/m68k/tm-nbsd.h: Ditto.
-	* doc/gdbint.texinfo: Document that SIGTRAMP_START and
-	SIGTRAMP_END are macros that take an single argument.
 
 Mon Sep 30 20:02:45 1996  Fred Fish  <fnf@cygnus.com>
 
@@ -2746,7 +2744,7 @@ Tue Jun 25 17:41:06 1996  Martin M. Hunt
 
 Tue Jun 25 23:14:07 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)
 
-	* gdb/gdbserver/Makefile.in (docdir): Removed.
+	* gdbserver/Makefile.in (docdir): Removed.
 
 Tue Jun 25 22:05:38 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)
 
@@ -2759,7 +2757,7 @@ Tue Jun 25 22:05:38 1996  Jason Molenda
 	(docdir): Removed.
 	* nlm/configure.in (AC_PREREQ): autoconf 2.5 or higher.
 	* nlm/configure: Rebuilt.
-        * gdb/gdbserver/Makefile.in (datadir): Set to $(prefix)/share.
+        * gdbserver/Makefile.in (datadir): Set to $(prefix)/share.
 
 Mon Jun 24 09:56:14 1996  Angela Marie Thomas (angela@cygnus.com)
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1998 ./gdb/ChangeLog-1998
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1998	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-1998	2024-02-01 01:47:15.000000000 +0000
@@ -3710,9 +3710,9 @@ Tue Dec  8 15:09:44 1998  Edith Epstein
         * config/m68k/nm-linux.h: New file.
         * config/m68k/tm-linux.h: New file.
         * config/m68k/xm-linux.h: New file.
-        * gdb/m68klinux-nat.c: New file.
+        * m68klinux-nat.c: New file.
         * gdbserver/low-linux.c: Add support for m68k-linux.
-        * gdb/config/m68k/tm-m68k.h (NUM_FREGS): New macro.
+        * config/m68k/tm-m68k.h (NUM_FREGS): New macro.
 
 1998-12-07  Jason Molenda  (jsm@bugshack.cygnus.com)
 
@@ -6002,7 +6002,7 @@ Mon Apr 20 15:35:03 1998  Philippe De Mu
 
 Mon Apr 20 15:32:21 1998   Mark Kettenis  <kettenis@phys.uva.nl>
 
-        * gdb/gdb_string.h (strdup): Declare only if not defined as a
+        * gdb_string.h (strdup): Declare only if not defined as a
         macro.
 
 Mon Apr 20 14:18:45 1998  J. Kean Johnston  <jkj@sco.com>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1999 ./gdb/ChangeLog-1999
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-1999	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-1999	2024-02-01 01:47:15.000000000 +0000
@@ -55,8 +55,6 @@ Wed Dec 29 17:41:11 1999  Andrew Cagney
 	* config/powerpc/solaris.mh: ditto.
 	* config/alpha/alpha-osf2.mh: ditto.
 	* config/alpha/alpha-osf3.mh: ditto.
-	* testsuite/gdb.base/callfuncs.exp: make "next" test match the
-	next source line, in case the "next" runs away.
 	* acconfig.h: remove obsolete def HAVE_MULTIPLE_PROC_FDS, 
 	add new def NEW_PROC_API
 	* config.in; ditto.
@@ -118,13 +116,11 @@ Fri Dec 17 20:45:21 1999  Andrew Cagney
 	varobjs was not decremented if the first one in the list was deleted.
 
 1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>
-	
+
 	* linux-thread.c: Remove printf-debugging code.
 	* lin-thread.c: ditto.
 	* config/alpha/nm-linux.h: protect with NM_LINUX_H.
-	* testsuite/gdb.threads/linux-dp.exp: Make test for "New Thread"
-	message more forgiving.  Ditto test for "info threads".
-	
+
 1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>
 
 	* lin-thread.c: new file.  Implements multi-thread debugging on
@@ -2102,7 +2098,6 @@ Thu Oct  7 17:20:01 1999  Andrew Cagney
 	identifiers beginning with `$' unless
 	SYMBOLS_CAN_START_WITH_DOLLAR is non-zero.
 	* config/pa/tm-hppa.h (SYMBOLS_CAN_START_WITH_DOLLAR): Define.
-	* doc/gdbint.texinfo (SYMBOLS_CAN_START_WITH_DOLLAR): Document.
 
 	Remove all traces of the BINOP_SCOPE operator.  It's never
  	generated, and not implemented.
@@ -4832,7 +4827,6 @@ Sun Aug  8 12:06:47 1999  Fred Fish  <fn
 	* dwarf2read.c (dwarf2_build_psymtabs_hard): Minor format tweak.
 	* symfile.c (syms_from_objfile): Ditto, and fix typo.
 	* top.c (init_main): Fix typo in comment (DEFULAT_PROMPT).
-	* doc/gdbint.texinfo (find_sym_fns): This replaces symfile_init.
 
 1999-08-08  James Ingham  <jingham@leda.cygnus.com>
 
@@ -8371,9 +8365,8 @@ Mon Feb 22 12:32:19 1999  Per Bothner  <
 	config/i386/nm-i386sco5.h, config/i386/tm-fbsd.h, config/i386/tm-i386.h
 	config/powerpc/nm-aix.h, config/powerpc/tm-macos.h
 	config/powerpc/tm-ppc-aix.h, config/powerpc/xm-aix.h
-	config/rs6000/tm-rs6000-aix4.h, testsuite/gdb.chill/tests1.ch
-	testsuite/gdb.chill/tests2.ch, testsuite/gdb.chill/tests2.exp:
-	Update FSF address in copyright notices.
+	config/rs6000/tm-rs6000-aix4.h: Update FSF address in copyright
+	notices.
 
 1999-02-18  Jason Molenda  (jsm@bugshack.cygnus.com)
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2000 ./gdb/ChangeLog-2000
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2000	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2000	2024-02-01 01:47:15.000000000 +0000
@@ -4521,7 +4521,7 @@ Mon May 22 11:46:01 2000  Andrew Cagney
 
 2000-05-17  Eli Zaretskii  <eliz@is.elta.co.il>
 
-	* gdb/config/djgpp/README: Fine-tune installation instructions
+	* config/djgpp/README: Fine-tune installation instructions
         based on user reports.
 
 Wed May 17 18:27:45 2000  Andrew Cagney  <cagney@b1.cygnus.com>
@@ -5787,8 +5787,6 @@ Fri Apr  7 13:33:43 2000  Andrew Cagney
 	1 bit for the flag.
 	* config/sparc/tm-sun4sol2.h: ditto.
 	(SOFTWARE_SINGLE_STEP, SOFTWARE_SINGLE_STEP_P): undefine.
-	* testsuite/gdb.threads/pthreads.exp (all_threads_running): Allow
-	for more than 15 thread increments.
 
 2000-04-06  Eli Zaretskii  <eliz@is.elta.co.il>
 
@@ -8121,14 +8119,12 @@ Thu Jan 13 23:34:17 EST 2000  Nicholas D
 	* config/i386/tm-i386sol2.h: ditto.
 	* config/sparc/tm-sun4sol2.h: ditto.
 	* config/i386/i386v42mp.mh: add uw-thread.o to NATDEPFILES.
-	* testsuite/gdb.threads/pthreads.exp: Try to link with -lthread
-	if -lpthread and -lpthreads fail.
 
 	* procfs.c: (PIDGET, TIDGET, MERGEPID): change default to no-op.
 	(proc_flags): combine flags that UnixWare splits into two locations.
 	(proc_modify_flag): add support for PR_KLC (kill on last close).
 	(proc_[un]set_kill_on_last_close): new functions.
-	
+
 2000-01-07  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
 
 	* infrun.c (normal_stop): Print out thread id when we stop.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2001 ./gdb/ChangeLog-2001
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2001	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2001	2024-02-01 01:47:15.000000000 +0000
@@ -6607,20 +6607,16 @@ Thu May 10 16:26:47 2001  Andrew Cagney
 	* NEWS: Update.
 
 2001-04-17  Michael Snyder  <msnyder@redhat.com>
-	
+
 	* remote.c (remote_open_1): On opening the remote target, activate
 	the solib_create_inferior_hook, so that it can detect when the
 	target loads shared libraries.
 	(remote_async_open_1): Ditto.
 
 2001-04-17  Michael Snyder  <msnyder@redhat.com>
-	
+
 	* breakpoint.c (print_one_breakpoint): Handle 64-bit addresses.
 	* tracepoint.c (tracepoints_info): Handle 64-bit addresses.
-	* testsuite/gdb.trace/deltrace.exp: Allow for 64-bit addresses.
-	* testsuite/gdb.trace/infotrace.exp: Ditto.
-	* testsuite/gdb.trace/passcount.exp: Ditto.
-	* testsuite/gdb.trace/while-stepping.exp: Ditto.
 
 2001-04-17  Michael Snyder  <msnyder@redhat.com>
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2002 ./gdb/ChangeLog-2002
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2002	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2002	2024-02-01 01:47:15.000000000 +0000
@@ -11,10 +11,6 @@
 	* objc-exp.y (parse_number): Cast sscanf arguments to proper type.
 	(yylex): Initialize c to avoid uninitialized warning.
 
-2002-12-29  Kazu Hirata  <kazu@cs.umass.edu>
-
-	* doc/fdl.texi: Revert the last change.
-
 2002-12-29  Mark Kettenis  <kettenis@gnu.org>
 
 	* tracepoint.c (ISATTY): Removed.
@@ -1725,7 +1721,7 @@
 
 2002-11-18  Adam Fedor  <fedor@gnu.org>
 
-	* gdb/parser-defs.h: (struct objc_class_str): New structure
+	* parser-defs.h: (struct objc_class_str): New structure
 	for parsing ObjC classes.
 
 2002-11-18  Andrew Cagney  <ac131313@redhat.com>
@@ -3622,14 +3618,12 @@ Wed Nov 13 19:51:05 2002  Andrew Cagney
 	(charset.o): Move.
 	* c-lang.c: #include "gdb_string.h"
 
-2002-09-20  Fernando Nasser  <fnasser@redhat.com>
+2002-09-20  George Helffrich  <george@gly.bris.ac.uk>
 
-	From 2002-07-02  George Helffrich <george@gly.bris.ac.uk>
 	* cli/cli-cmds.c (list_command): New function.  Implements the new
 	cli edit command.
 	(_init_cli_cmds): Add new command definition.
 	* gdb.1: Document edit command.
-	* doc/gdb.texinfo: Document edit command.
 
 2002-09-20  Fernando Nasser  <fnasser@redhat.com>
 
@@ -3910,7 +3904,7 @@ Wed Nov 13 19:51:05 2002  Andrew Cagney
 
 2002-09-17  Theodore A. Roth  <troth@verinet.com>
 
-	* gdb/avr-tdep.c(avr_scan_prologue): Fix bad call to 
+	* avr-tdep.c(avr_scan_prologue): Fix bad call to 
 	generic_read_register_dummy() (PR gdb/703).
 	(avr_push_return_address): #if 0 out unused vars.
 	(avr_gdbarch_init): Enable use of avr_push_return_address().
@@ -4227,7 +4221,7 @@ Fri Sep 13 07:42:09 2002  Andrew Cagney
 
 2002-09-03  Theodore A. Roth  <troth@verinet.com>
 
-	* gdb/avr-tdep.c (avr_gdbarch_init): Use
+	* avr-tdep.c (avr_gdbarch_init): Use
 	generic_unwind_get_saved_register.
 
 2002-09-03  David Carlton  <carlton@math.stanford.edu>
@@ -4418,10 +4412,7 @@ Fri Sep 13 07:42:09 2002  Andrew Cagney
 
 	* cli/cli-script.c (copy_command_lines): New function.
 	* defs.h (copy_command_lines): Export.
-	* testsuite/gdb.base/commands.exp: New tests for commands
-	attached to a temporary breakpoint, and for commands that
-	delete the breakpoint they are attached to.
-	
+
 2002-08-26  Michael Snyder  <msnyder@redhat.com>
 
 	* breakpoint.c (bpstat_stop_status): Instead of copying the 
@@ -9057,7 +9048,6 @@ Fri Aug  2 15:53:50 2002  Andrew Cagney
 	(osabi.o): New dependency list.
 	* osabi.c: New file.
 	* osabi.h: New file.
-	* doc/gdbint.texinfo: Document new generic OS ABI framework.
 
 	* Makefile.in (alpha_tdep_h): Define and use instead of
 	alpha-tdep.h.
@@ -12392,14 +12382,12 @@ Wed Apr 24 14:22:21 2002  Andrew Cagney
 	* MAINTAINERS: Change Past Maintainer addresses to ``foo at bar
 	dot com'' form.  Remove references to cygnus.com and sourceware.
 
-2002-02-23  Andrew Cagney  <ac131313@redhat.com>
+2002-02-23  Paul Eggert  <eggert@twinsun.com>
 
-	From 2002-02-19 Paul Eggert <eggert@twinsun.com>:
 	* Makefile.in (VER): Change "head -1" to "sed q", since POSIX
 	1003.1-2001 no longer allows "head -1".
-	* gdb/Makefile.in (version.c): Likewise.
-	* gdb/doc/Makefile.in (GDBvn.texi): Likewise.
-	* gdb/CONTRIBUTE: Change "diff -c3" to "diff -c", which is
+	* Makefile.in (version.c): Likewise.
+	* CONTRIBUTE: Change "diff -c3" to "diff -c", which is
 	equivalent.  POSIX 1003.1-2001 no longer allows "diff -c3".
 
 2002-02-23  Andrew Cagney  <ac131313@redhat.com>
@@ -13365,8 +13353,6 @@ Wed Apr 24 14:22:21 2002  Andrew Cagney
 	* arch-utils.c (default_print_float_info): New function.
 	* arch-utils.h (default_print_float_info): Prototype it.
 	* infcmd.c (float_info): Call PRINT_FLOAT_INFO.
-	* doc/gdbint.texinfo (FLOAT_INFO): Mark as deprecated.
-	(PRINT_FLOAT_INFO): Document it.
 
 	* arm-tdep.c (arm_print_float_info): Renamed from arm_float_info.
 	* config/arm/tm-arm.h (FLOAT_INFO): Delete.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2003 ./gdb/ChangeLog-2003
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2003	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2003	2024-02-01 01:47:15.000000000 +0000
@@ -2231,9 +2231,9 @@
 
 2003-10-17  Shrinivas Atre  <shrinivasa@KPITCummins.com>
 
-	* gdb/config/h8300/tm-h8300.h (h8300_normal_mode): Add external
+	* config/h8300/tm-h8300.h (h8300_normal_mode): Add external
 	declaration.
-	* gdb/h8300-tdep.c (BINWORD): Update BINWORD for h8300_normal_mode
+	* h8300-tdep.c (BINWORD): Update BINWORD for h8300_normal_mode
         (h8300_examine_prologue): Use h8300_normal_mode flag
         (h8300_gdbarch_init): Set architecture info for normal mode
 
@@ -7899,7 +7899,7 @@ Fri Aug  8 00:28:38 UTC 2003  Brendan Co
 
 2003-06-07  Adam Fedor  <fedor@gnu.org>
 
-	* gdb/objc-lang.c (FETCH_ARGUMENT): Remove macro.
+	* objc-lang.c (FETCH_ARGUMENT): Remove macro.
 	(OBJC_FETCH_POINTER_ARGUMENT): Shorthand macro for
 	using FETCH_POINTER_ARGUMENT with Objective-C method arguments.
 	(find_implementation, resolve_msgsend, resolve_msgsend_stret,
@@ -11239,7 +11239,7 @@ Fri Aug  8 00:28:38 UTC 2003  Brendan Co
 
 2003-04-01  Adam Fedor  <fedor@gnu.org>
 
-	* gdb/objc-lang.c (selectors_info): Replace calls to
+	* objc-lang.c (selectors_info): Replace calls to
 	SYMBOL_DEMANGLED_NAME and DEPRECATED_SYMBOL_NAME with
 	SYMBOL_NATURAL_NAME.
 	(classes_info, find_methods): Likewise.
@@ -14236,7 +14236,7 @@ Fri Aug  8 00:28:38 UTC 2003  Brendan Co
 
 	2002-04-02  Elena Zannoni  <ezannoni@redhat.com>
 
-		* gdb/sh-tdep.c (sh_sh2e_register_name): New.
+		* sh-tdep.c (sh_sh2e_register_name): New.
 		(sh2e_show_regs): New.
 		(sh_gdbarch_init): Handle bfd_mach_sh2e.
 		* config/sh/tm-sh.h: Added sh2e to comments.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2004 ./gdb/ChangeLog-2004
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2004	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2004	2024-02-01 01:47:15.000000000 +0000
@@ -1388,7 +1388,7 @@
 
 2004-11-03  Andrew Cagney  <cagney@gnu.org>
 
-	* gdb/NEWS: Mention internationalization, m32r-*-linux-gnu, 'p'
+	* NEWS: Mention internationalization, m32r-*-linux-gnu, 'p'
 	packet, obsolete configurations, end-of-life deprecated_registers.
 
 2004-11-02  Mark Kettenis  <kettenis@gnu.org>
@@ -4209,8 +4209,6 @@
 
 2004-08-11  Joel Brobecker  <brobecker@gnat.com>
 
-	* doc/gdbint.texinfo (Host Definition): Remove documentation
-	for USE_O_NOCTTY, no longer used.
 	* config/xm-aix4.h (USE_O_NOCTTY): Remove, no longer used.
 	* config/rs6000/xm-rs6000.h (USE_O_NOCTTY): Likewise.
 
@@ -6693,7 +6691,7 @@
 
 2004-06-06  Paul Brook  <paul@codesourcery.com>
 
-	* gdb/dwarf2-frame.c (decode_frame_entry_1): Decode version 3 CIE
+	* dwarf2-frame.c (decode_frame_entry_1): Decode version 3 CIE
 	records.
 
 2004-06-08  Paul N. Hilfinger  <Hilfinger@gnat.com>
@@ -6880,7 +6878,7 @@
 2004-06-02  Albert Chin-A-Young  <china@thewrittenword.com>
 
 	Committed by Andrew Cagney.
-	* gdb/dictionary.c, gdb/gdbtypes.h: Remove trailing comma
+	* dictionary.c, gdbtypes.h: Remove trailing comma
 	after last enum constant to avoid error from IBM C
 	compiler.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2005 ./gdb/ChangeLog-2005
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2005	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2005	2024-02-01 01:47:15.000000000 +0000
@@ -4905,7 +4905,6 @@
 
 2005-03-07  Joel Brobecker  <brobecker@adacore.com>
 
-	* doc/observer.texi (executable_changed): New observer.
 	* symtab.c: Include "observer.h".
 	(find_main_name): New function.
 	(main_name): If name_of_main is unset, then compute it
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2006 ./gdb/ChangeLog-2006
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2006	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2006	2024-02-01 01:47:15.000000000 +0000
@@ -2080,8 +2080,6 @@
 
 	* remote-file.io.c (remote_fileio_func_system): Treat zero length
 	string as NULL.  Adjust for NULL pointer argument.
-	* doc/gdb.texinfo (system): Document behaviour with zero length
-	string.
 
 2006-06-12  Daniel Jacobowitz  <dan@codesourcery.com>
 
@@ -2356,7 +2354,7 @@
 	(print_unpacked_pointer): New function.
 	(print_variable_at_address): New function.
 	(m2_val_print): Replaced.
-	* gdb/MAINTAINERS (Write After Approval): Added
+	* MAINTAINERS (Write After Approval): Added
 	Gaius Mulley  <gaius@glam.ac.uk>
 
 2006-05-12  Mark Kettenis  <kettenis@gnu.org>
@@ -3027,7 +3025,6 @@
 	* configure.tgt (i[34567]86-*-netware*): Do not set build_nlm.
 	* configure.ac: Remove AC_CONFIG_SUBDIRS of nlm.
 	* configure: Regenerate.
-	* doc/gdb.texinfo: Remove gdbserve.nlm documentation.
 	* nlm: Remove directory.
 
 2006-03-29  Daniel Jacobowitz  <dan@codesourcery.com>
@@ -3413,15 +3410,15 @@
 
 2006-02-24  Charles Wilson  <cygwin@cwilson.fastmail.fm>
 
-	* gdb/defs.h: unconditionally include <fcntl.h>, and
+	* defs.h: unconditionally include <fcntl.h>, and
 	ensure that O_BINARY is defined.
-	* gdb/solib.c(solib_open): ensure solib files are opened in
+	* solib.c(solib_open): ensure solib files are opened in
 	binary mode.
-	* gdb/corelow.c: Remove O_BINARY macro definition.
-	* gdb/exec.c: Remove O_BINARY macro definition
-	* gdb/remote-rdp.c: Remove O_BINARY macro definition
-	* gdb/source.c: Remove O_BINARY macro definition
-	* gdb/symfile.c: Remove O_BINARY macro definition
+	* corelow.c: Remove O_BINARY macro definition.
+	* exec.c: Remove O_BINARY macro definition
+	* remote-rdp.c: Remove O_BINARY macro definition
+	* source.c: Remove O_BINARY macro definition
+	* symfile.c: Remove O_BINARY macro definition
 
 2006-02-24  Randolph Chung  <tausq@debian.org>
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2007 ./gdb/ChangeLog-2007
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2007	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2007	2024-02-01 01:47:15.000000000 +0000
@@ -2342,8 +2342,6 @@
 
 2007-10-16  Gaius Mulley  <gaius@glam.ac.uk>
 
-        * doc/gdb.texinfo:  Add TSIZE definition, removed
-	statement about unbounded arrays being unimplemented.
 	* m2-valprint.c (m2_print_array_contents):  New function.
 	(m2_print_unbounded_array):  New function.
 	(m2_print_array_contents):  New function.
@@ -8382,12 +8380,11 @@
 	varobj_update_one.
 	* mi/mi-cmds.c (mi_cmds): Register '-var-set-frozen'.
 	* mi/mi-cmds.h (mi_cmd_var_set_frozen): Declare.
-	
+
 2007-04-13  Paul Brook  <paul@codesourcery.com>
 
 	* target-descriptions.c (tdesc_named_type): Add ieee_single and
 	ieee_double.
-	* doc/gdb.texinfo: Document ieee_single and ieee_double target types.
 
 2007-04-13  Daniel Jacobowitz  <dan@codesourcery.com>
 
@@ -8486,7 +8483,6 @@
 
 	* configure.ac (build_warnings): Add -Wno-char-subscripts.
 	* configure: Regenerate.
-	* doc/gdbint.texinfo (warning flags): Add -Wno-char-subscripts.
 
 2007-04-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
@@ -9511,9 +9507,9 @@
 2007-02-08  Daniel Jacobowitz  <dan@codesourcery.com>
 
 	Reported by timeless@gmail.com:
-	* gdb/target.c (target_flash_erase): Do not return void value.
+	* target.c (target_flash_erase): Do not return void value.
 	(target_flash_done): Likewise.
-	* gdb/cli/cli-cmds.c (source_command): Likewise.
+	* cli/cli-cmds.c (source_command): Likewise.
 
 2007-02-08  Fred Fish  <fnf@specifix.com>
 
@@ -9665,7 +9661,7 @@
 
 2007-02-01  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
 
-	* gdb/remote-m32r.sdi.c (m32r_fetch_register): Change PWD mask.
+	* remote-m32r.sdi.c (m32r_fetch_register): Change PWD mask.
         (m32r_store_register): Ditto.
 
 2007-01-30  Vladimir Prus  <vladimir@codesourcery.com>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2008 ./gdb/ChangeLog-2008
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2008	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2008	2024-02-01 01:47:15.000000000 +0000
@@ -5663,7 +5663,7 @@
 2008-07-13  Vladimir Prus  <vladimir@codesourcery.com>
 
 	Allow all CLI command even if target is executing.
-	* gdb/top.c (execute_command_1): Don't check if the inferiour
+	* top.c (execute_command_1): Don't check if the inferiour
 	is running.
 
 2008-07-13  Vladimir Prus  <vladimir@codesourcery.com>
@@ -6881,7 +6881,7 @@
 2008-06-06  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
 	PR gdb/1147
-	* gdb/valopts.c (find_overload_match): Handle references
+	* valopts.c (find_overload_match): Handle references
 	to pointers.
 
 2008-06-06  Paul N. Hilfinger  <hilfinger@adacore.com>
@@ -9874,7 +9874,6 @@
 2008-03-14  Vladimir Prus  <vladimir@codesourcery.com>
 
 	Implement MI notification for new threads.
-	* doc/observer.texi (new_thread): Document.
 	* observer.sh: Forward declare struct thread_info.
 	* thread.c (add_thread): Notify observer.
 
@@ -10739,9 +10738,9 @@
 2008-01-30  Vladimir Prus  <vladimir@codesourcery.com>
 
 	Use vector for varobj_list_children interface.
-	* gdb/varobj.c (varobj_list_children): Return vector
+	* varobj.c (varobj_list_children): Return vector
 	of varobjs.
-	* gdb/varobj.h (varobj_list_children): Adjust
+	* varobj.h (varobj_list_children): Adjust
 	prototype.
 	(varobj_p): Declare.  Declare vector thereof.
 	* mi/mi-cmd-var.c (mi_cmd_var_list_children): Adjust
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2009 ./gdb/ChangeLog-2009
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2009	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2009	2024-02-01 01:47:15.000000000 +0000
@@ -786,7 +786,7 @@
 2009-11-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
 	Fix wrong debug output with `set debug infrun 1'.
-	* gdb/infrun.c (handle_inferior_event <debug_infrun>): New variable
+	* infrun.c (handle_inferior_event <debug_infrun>): New variable
 	old_chain.  Temporarily switch INFERIOR_PTID.
 	* target.h (target_stopped_by_watchpoint): Extend the comment.
 	(target_stopped_data_address): New comment.
@@ -2672,10 +2672,6 @@
 	PR python/10666:
 	* python/py-function.c (fnpy_init): Use xstrdup.
 
-2009-09-21  Jie Zhang  <jie.zhang@analog.com>
-
-	* doc/gdb.texinfo: Escape "{" and "}".
-
 2009-09-21  Phil Muldoon <pmuldoon@redhat.com>
 
 	PR python/10633
@@ -3207,7 +3203,7 @@
 
 2009-09-08  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
-	* gdb/Makefile.in (check//%): Parse 'config.status --version'
+	* Makefile.in (check//%): Parse 'config.status --version'
 	output to recreate the configuration from the testsuite directory,
 	rather than running 'config.status --recheck' from a different
 	build directory.  Let configure do the recursion rather than
@@ -10853,8 +10849,8 @@
 
 	Fix completer problem for filename completion on the first try.
 
-	* gdb/completer.h (gdb_completion_word_break_characters): New function.
-	* gdb/completer.c: Include gdb_assert.h.
+	* completer.h (gdb_completion_word_break_characters): New function.
+	* completer.c: Include gdb_assert.h.
 	(complete_line_internal_reason): New enum.
 	(complete_line_internal): Change last argument type to
 	complete_line_internal_reason.
@@ -12995,7 +12991,7 @@
 
 2009-01-20  Kazu Hirata  <kazu@codesourcery.com>
 
-	* gdb/procfs.c (info_mappings_callback): Cast map->pr_size to
+	* procfs.c (info_mappings_callback): Cast map->pr_size to
 	unsigned long.
 
 2009-01-20  Daniel Jacobowitz  <dan@codesourcery.com>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2010 ./gdb/ChangeLog-2010
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2010	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2010	2024-02-01 01:47:15.000000000 +0000
@@ -1663,7 +1663,7 @@
 
 2010-10-03  Paul Hilfinger  <hilfinger@adacore.com>
 
-        * gdb/ada-typeprint.c (print_selected_record_field_types): New function,
+        * ada-typeprint.c (print_selected_record_field_types): New function,
         incorporating and generalizing print_record_field_types.
         (print_record_field_types): Change return value and update comment.
         Re-implement using print_selected_record_field_types.
@@ -2917,13 +2917,13 @@
 
 2010-08-11  Ken Werner  <ken.werner@de.ibm.com>
 
-	* gdb/valarith.c (vector_binop): New function.
+	* valarith.c (vector_binop): New function.
 	(scalar_binop): Likewise.
 	(value_binop): Call scalar_binop or vector_binop depending on the types.
-	* gdb/eval.c (ptrmath_type_p): Return 0 in case of TYPE_VECTOR.
+	* eval.c (ptrmath_type_p): Return 0 in case of TYPE_VECTOR.
 	(evaluate_subexp_with_coercion): Add vector check to not convert vectors
 	to pointers.
-	* gdb/value.c (coerce_array): Add vector check to not coerce vectors.
+	* value.c (coerce_array): Add vector check to not coerce vectors.
 
 2010-08-11  Brad Roberts  <braddr@puremagic.com>
 
@@ -6915,7 +6915,7 @@
 
 2010-04-21  Mike Frysinger  <vapier@gentoo.org>
 
-	* gdb/sparc-tdep.c (sparc32_store_return_value): Add gdb_assert ()
+	* sparc-tdep.c (sparc32_store_return_value): Add gdb_assert ()
 	for len <= 8.
 
 2010-04-21  Chris Moller  <cmoller@redhat.com>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2011 ./gdb/ChangeLog-2011
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2011	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2011	2024-02-01 01:47:15.000000000 +0000
@@ -2157,9 +2157,9 @@
 	symbol's symtab, use new argument OBJFILE.
 	* cp-support.h (cp_scan_for_anonymous_namespaces): Changed function
 	arguments by adding OBJFILE.
-	* gdb/dwarf2read.c (new_symbol_full): Change call to
+	* dwarf2read.c (new_symbol_full): Change call to
 	cp_scan_for_anonymous_namespaces to match new signature.
-	* gdb/stabsread.c (define_symbol): Change call to
+	* stabsread.c (define_symbol): Change call to
 	cp_scan_for_anonymous_namespaces to match new signature.
 
 2011-10-20  Phil Muldoon  <pmuldoon@redhat.com>
@@ -6464,7 +6464,7 @@
 
 2011-05-26  Yao Qi  <yao@codesourcery.com>
 
-	* gdb/gdb_thread_db.h: Remove HAVE_UINTPTR_T.
+	* gdb_thread_db.h: Remove HAVE_UINTPTR_T.
 
 2011-05-26  Tristan Gingold  <gingold@adacore.com>
 
@@ -9448,7 +9448,7 @@
 	(cleanup_block_load_pc, copy_block_xfer): Likewise.
 	* arm-linux-tdep.c (arm_linux_copy_svc): Callers update.
 	(arm_catch_kernel_helper_return): Likewise.
-	* gdb/arm-tdep.h : Update function declarations.
+	* arm-tdep.h : Update function declarations.
 
 2011-03-07  Michael Snyder  <msnyder@vmware.com>
 
@@ -9670,7 +9670,7 @@
 
 2011-03-03  Yao Qi  <yao@codesourcery.com>
 
-	* gdb/arm-tdep.c (shifted_reg_val): Replace magic number 15 with
+	* arm-tdep.c (shifted_reg_val): Replace magic number 15 with
 	ARM_PC_REGNUM.
 	(thumb_get_next_pc_raw, arm_get_next_pc_raw): Likewise.
 	(displaced_write_reg, displaced_read_reg): Likewise.
@@ -10303,12 +10303,12 @@
 
 2011-02-18  Yao Qi  <yao@codesourcery.com>
 
-	* gdb/arm-tdep.c (arm_displaced_step_copy_insn): Move code to ...
+	* arm-tdep.c (arm_displaced_step_copy_insn): Move code to ...
 	(arm_process_displaced_insn): .. here. Remove parameter INSN.
 	(thumb_process_displaced_insn): New.
-	* gdb/arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Update
+	* arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Update
 	call to arm_process_displaced_insn.
-	* gdb/arm-tdep.h : Update declaration of arm_process_displaced_insn.
+	* arm-tdep.h : Update declaration of arm_process_displaced_insn.
 
 2011-02-17  Tom Tromey  <tromey@redhat.com>
 
@@ -11267,8 +11267,8 @@
 2011-01-25  Mathieu Lacage  <mathieu.lacage@inria.fr>
 
 	PR/symtab 11766:
-	* gdb/objfiles.h (struct objfile) <addr_low>: New field.
-	* gdb/solib.c (solib_read_symbols): Check for addr_low in
+	* objfiles.h (struct objfile) <addr_low>: New field.
+	* solib.c (solib_read_symbols): Check for addr_low in
 	equality test for objfile, initialize addr_low if needed.
 
 2011-01-25  Pedro Alves  <pedro@codesourcery.com>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2012 ./gdb/ChangeLog-2012
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2012	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2012	2024-02-01 01:47:15.000000000 +0000
@@ -835,8 +835,6 @@
 	rather than sort() method.
 	Adjust syntax for Python 3 compatibility.
 	* python/lib/gdb/command/type_printers.py: Ditto.
-	* doc/gdb.texinfo (Inferior.read_memory): Mention that the return
-	value is a memoryview object if Python 3.
 
 2012-12-12  Tom Tromey  <tromey@redhat.com>
 
@@ -8703,7 +8701,7 @@
 	(GNULIB): New variable.
 	(GNULIB_STDINT_H): Adjust.
 	(AC_OUTPUT): Don't output gnulib/Makefile.
-	* gdb/defs.h: Include build-gnulib/config.h.
+	* defs.h: Include build-gnulib/config.h.
 	* aclocal.m4: Regenerate.
 	* config.in: Regenerate.
 	* configure: Regenerate.
@@ -13186,8 +13184,8 @@
 
 2012-01-02  Joel Brobecker  <brobecker@adacore.com>
 
-	* gdb/common/gdb_thread_db.h, gdb/dbxread.c, gdb/environ.c,
-	gdb/gcore.h, gdb/rs6000-tdep.h, gdb/s390-nat.c, gdb/tic6x-tdep.c:
+	* common/gdb_thread_db.h, dbxread.c, environ.c,
+	gcore.h, rs6000-tdep.h, s390-nat.c, tic6x-tdep.c:
 	Reformat the copyright header.
 
 2012-01-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2013 ./gdb/ChangeLog-2013
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2013	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2013	2024-02-01 01:47:15.000000000 +0000
@@ -6265,9 +6265,9 @@
 
 2013-06-21  Joel Brobecker  <brobecker@adacore.com>
 
-	* gdb/gnulib/Makefile.in: Update date in copyright header.
-	* gdb/gnulib/configure.ac: Ditto.
-	* gdb/gnulib/update-gnulib.sh: Ditto.
+	* gnulib/Makefile.in: Update date in copyright header.
+	* gnulib/configure.ac: Ditto.
+	* gnulib/update-gnulib.sh: Ditto.
 
 2013-06-21  Joel Brobecker  <brobecker@adacore.com>
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2014 ./gdb/ChangeLog-2014
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2014	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2014	2024-02-01 01:47:15.000000000 +0000
@@ -934,8 +934,6 @@
 	* Makefile.in (SUBDIR_PYTHON_OBS): Add py-infevents.o.
 	(SUBDIR_PYTHON_SRCS): Add py-infevents.c.
 	(py-infevents.o): New rule.
-	* doc/observer.texi (inferior_call_pre, inferior_call_post)
-	(memory_changed, register_changed): New observers.
 	* infcall.c (call_function_by_hand): Notify observer before and
 	after inferior call.
 	* python/py-event.h (inferior_call_kind): New enum.
@@ -1210,7 +1208,7 @@
 2014-11-24  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
 	Pushed by Joel Brobecker  <brobecker@adacore.com>
-	* gdb/gnu-nat.c (inf_validate_procinfo): Multiply the number of
+	* gnu-nat.c (inf_validate_procinfo): Multiply the number of
 	elements pi_len by the size of the elements before calling
 	vm_deallocate.
 	(inf_validate_task_sc): Likewise, and properly deallocate the
@@ -2640,7 +2638,7 @@
 
 2014-10-15  Andreas Arnez  <arnez@linux.vnet.ibm.com>
 
-	* gdb/infrun.c (process_event_stop_test): Apply
+	* infrun.c (process_event_stop_test): Apply
 	gdbarch_addr_bits_remove to longjmp resume address.
 
 2014-10-15  Pedro Alves  <palves@redhat.com>
@@ -6241,7 +6239,6 @@
 	microblaze-with-stack-protect microblaze and microblaze-expedite.
 	* regformats/microblaze-with-stack-protect.dat: New file.
 	* regformats/microblaze.dat: New file.
-	* doc/gdb.texinfo (MicroBlaze Features): Added.
 
 2014-07-18  Tom Tromey  <tromey@redhat.com>
 
@@ -6947,7 +6944,7 @@
 	* nat/mips-linux-watch.h: Likewise.
 	* Makefile.in (HFILES_NO_SRCDIR): Reflect new locations.
 	(object file files): Reordered.
-	* gdb/copyright.py (EXCLUDE_LIST): Reflect new location
+	* copyright.py (EXCLUDE_LIST): Reflect new location
 	of glibc_thread_db.h.
 
 2014-06-20  Gary Benson  <gbenson@redhat.com>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2015 ./gdb/ChangeLog-2015
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2015	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2015	2024-02-01 01:47:15.000000000 +0000
@@ -340,12 +340,12 @@
 
 2015-12-09  Luis Machado  <lgustavo@codesourcery.com>
 
-	* gdb/mi/mi-cmd-var.c (mi_parse_format): Handle new "zero-hexadecimal"
+	* mi/mi-cmd-var.c (mi_parse_format): Handle new "zero-hexadecimal"
 	format.
-	* gdb/varobj.c (varobj_format_string): Add "zero-hexadecimal" entry.
+	* varobj.c (varobj_format_string): Add "zero-hexadecimal" entry.
 	(format_code): Add 'z' entry.
 	(varobj_set_display_format): Handle FORMAT_ZHEXADECIMAL.
-	* gdb/varobj.h (varobj_display_formats) <FORMAT_ZHEXADECIMAL>: New enum
+	* varobj.h (varobj_display_formats) <FORMAT_ZHEXADECIMAL>: New enum
 	field.
 	* NEWS: Add new note to MI changes citing the new zero-hexadecimal
 	format for -var-set-format.
@@ -1085,7 +1085,7 @@
 2015-11-04  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
 
 	PR/18376
-	* gdb/s390-linux-tdep.c (s390_is_partial_instruction): New function.
+	* s390-linux-tdep.c (s390_is_partial_instruction): New function.
 	(s390_software_single_step): New function.
 	(s390_displaced_step_hw_singlestep): New function.
 	(s390_gdbarch_init): Fill gdbarch slots with the above.
@@ -1093,8 +1093,8 @@
 2015-11-04  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
 
 	PR/18376
-	* gdb/configure.tgt: Add linux-record.o to s390*-linux.
-	* gdb/s390-linux-tdep.c: #include "linux-record.h", "record-full.h"
+	* configure.tgt: Add linux-record.o to s390*-linux.
+	* s390-linux-tdep.c: #include "linux-record.h", "record-full.h"
 	(s390_linux_record_tdep): New static global variable.
 	(s390x_linux_record_tdep): New static global variable.
 	(s390_all_but_pc_registers_record): New function.
@@ -1744,7 +1744,7 @@
 
 2015-10-21  Aleksandar Ristovski  <aristovski@qnx.com>
 
-	* gdb/nto-tdep.c (QNX_NOTE_NAME, QNX_INFO_SECT_NAME): New defines.
+	* nto-tdep.c (QNX_NOTE_NAME, QNX_INFO_SECT_NAME): New defines.
 	(nto_sniff_abi_note_section): New function.
 	(nto_elf_osabi_sniffer): Use new function to recognize nto specific
 	binary.
@@ -1766,7 +1766,7 @@
 
 2015-10-20  Aleksandar Ristovski  <aristovski@qnx.com>
 
-	* gdb/nto-procfs.c (procfs_pid_to_exec_file): New function.
+	* nto-procfs.c (procfs_pid_to_exec_file): New function.
 	(init_procfs_targets): Wire new function.
 
 2015-10-20  Aleksandar Ristovski  <aristovski@qnx.com>
@@ -8207,11 +8207,6 @@
 	(arm_linux_fetch_inferior_registers): Call fetch_fpregs and
 	fetch_regs instead.
 
-2015-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* doc/gdb.texinfo (TUI): Restructure documentation on TUI layout
-	and focus commands.
-
 2015-07-06  Joel Brobecker  <brobecker@adacore.com>
 
 	* NEWS: Create a new section for the next release branch.
@@ -8232,10 +8227,6 @@
 
 2015-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* doc/gdb.texinfo (TUI): Add comma after @xref.
-
-2015-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-
 	* tui/tui-win.c (tui_set_focus): Use structure member 'generic'
 	instead of casting the structure type.
 
@@ -9259,7 +9250,7 @@
 
 2015-05-28  Kyle Huey  <me@kylehuey.com>  (tiny patch)
 
-	* gdb/arm-tdep.c (arm_gdbarch_init): Perform arm_abi detection on
+	* arm-tdep.c (arm_gdbarch_init): Perform arm_abi detection on
 	ELFOSABI_GNU binaries.
 
 2015-05-27  Doug Evans  <dje@google.com>
@@ -10895,7 +10886,7 @@
 
 2015-04-02  Gary Benson <gbenson@redhat.com>
 
-	* gdb/gdb_bfd.h (TARGET_SYSROOT_PREFIX): New definition.
+	* gdb_bfd.h (TARGET_SYSROOT_PREFIX): New definition.
 	(is_target_filename): New declaration.
 	(gdb_bfd_has_target_filename): Likewise.
 	(gdb_bfd_open): Update documentation comment.
@@ -11050,7 +11041,7 @@
 2015-03-31  Antoine Tremblay  <antoine.tremblay@ericsson.com>
 
 	* NEWS: Mention info os cpus support.
-	* gdb/nat/linux-osdata.c (linux_xfer_osdata_cpus): New function.
+	* nat/linux-osdata.c (linux_xfer_osdata_cpus): New function.
 	(struct osdata_type): Add cpus entry, reorder the entries in
 	alphabetical order.
 
@@ -12525,7 +12516,7 @@
 
 2015-02-26  Antoine Tremblay  <antoine.tremblay@ericsson.com>
 
-	* gdb/infcmd.c (print_return_value): use type_to_string to print type.
+	* infcmd.c (print_return_value): use type_to_string to print type.
 
 2015-02-26  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
@@ -13014,7 +13005,7 @@
 2015-02-09  Sergio Durigan Junior  <sergiodj@redhat.com>
 
 	PR remote/17946
-	* gdb/remote.c (remote_parse_stop_reply): Fix wrong comparison
+	* remote.c (remote_parse_stop_reply): Fix wrong comparison
 	of pointer against char.
 
 2015-02-09  Mark Wielaard  <mjw@redhat.com>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2016 ./gdb/ChangeLog-2016
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2016	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2016	2024-02-01 01:47:15.000000000 +0000
@@ -8556,7 +8556,7 @@
 
 2016-03-29  Don Breazeal  <donb@codesourcery.com>
 
-	* gdb/value.c (value_actual_type): Fix formatting issue.
+	* value.c (value_actual_type): Fix formatting issue.
 
 2016-03-23  Yao Qi  <yao.qi@linaro.org>
 
@@ -9336,7 +9336,7 @@
 
 	* amd64-tdep.c (amd64_ax_pseudo_register_collect): New function.
 	(amd64_init_abi): Fill ax_pseudo_register_collect hook.
-	* gdb/i386-tdep.c (i386_pseudo_register_read_into_value): Remove
+	* i386-tdep.c (i386_pseudo_register_read_into_value): Remove
 	misleading comment.
 	(i386_pseudo_register_write): Ditto.
 	(i386_ax_pseudo_register_collect): New function.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2017 ./gdb/ChangeLog-2017
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2017	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2017	2024-02-01 01:47:15.000000000 +0000
@@ -162,7 +162,7 @@
 
 2017-12-17  Stafford Horne  <shorne@gmail.com>
 
-	* gdb/or1k-tdep.c (show_or1k_debug): Fix function parameter alignment.
+	* or1k-tdep.c (show_or1k_debug): Fix function parameter alignment.
 	(or1k_analyse_inst): Likewise.
 	(or1k_single_step_through_delay): Likewise.
 	(or1k_frame_cache): Fix parameter alignment and use paddress()
@@ -5354,12 +5354,12 @@
 	type to std::vector.
 	* tracepoint.c (traceframe_available_memory): Change parameter
 	type to std::vector, adjust.
-	* gdb/mi/mi-main.c (mi_cmd_trace_frame_collected): Adjust to
+	* mi/mi-main.c (mi_cmd_trace_frame_collected): Adjust to
 	std::vector change.
-	* gdb/Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
+	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
 	unittests/memrange-selftests.c.
 	(SUBDIR_UNITTESTS_OBS): Add memrange-selftests.o.
-	* gdb/unittests/memrange-selftests.c: New file.
+	* unittests/memrange-selftests.c: New file.
 
 2017-10-16  Pedro Alves  <palves@redhat.com>
 
@@ -15712,8 +15712,8 @@
 2017-03-21  Ivo Raisr  <ivo.raisr@oracle.com>
 
 	PR tdep/20928
-	* gdb/sparc-tdep.h (gdbarch_tdep) <sparc64_ccr_type>: New field.
-	* gdb/sparc64-tdep.c (sparc64_ccr_type): New function.
+	* sparc-tdep.h (gdbarch_tdep) <sparc64_ccr_type>: New field.
+	* sparc64-tdep.c (sparc64_ccr_type): New function.
 	(sparc64_fsr_type): Fix %fsr decoding.
 
 2017-03-21  Tim Wiederhake  <tim.wiederhake@intel.com>
@@ -15798,8 +15798,6 @@
 
 	PR gdb/14441
 	* NEWS: Mention support for rvalue references in GDB and python.
-	* doc/gdb.texinfo (C Plus Plus Expressions): Mention that GDB
-	supports both lvalue and rvalue references.
 
 2017-03-20  Artemiy Volkov  <artemiyv@acm.org>
 
@@ -15874,8 +15872,6 @@
 2017-03-20  Artemiy Volkov  <artemiyv@acm.org>
 
 	PR gdb/14441
-	* doc/python.texi (Types in Python): Add TYPE_CODE_RVALUE_REF to
-	table of constants.
 	* python/lib/gdb/command/explore.py: Support exploring values
 	of rvalue reference types.
 	* python/lib/gdb/types.py: Implement get_basic_type() for
@@ -16338,7 +16334,6 @@
 2017-02-28  Peter Bergner  <bergner@vnet.ibm.com>
 
 	* NEWS: Mention new set/show disassembler-options commands.
-	* doc/gdb.texinfo: Document new set/show disassembler-options commands.
 	* disasm.c: Include "arch-utils.h", "gdbcmd.h" and "safe-ctype.h".
 	(prospective_options): New static variable.
 	(gdb_disassembler::gdb_disassembler): Initialize
@@ -17624,7 +17619,7 @@
 
 2017-01-27  Kees Cook  <keescook@google.com>
 
-	* gdb/arm-linux-nat.c (arm_linux_fetch_inferior_registers): Call
+	* arm-linux-nat.c (arm_linux_fetch_inferior_registers): Call
 	fetch_fpregs if target has fpa registers.
 	(arm_linux_store_inferior_registers): Call store_fpregs if target
 	has fpa registers.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2018 ./gdb/ChangeLog-2018
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2018	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/ChangeLog-2018	2024-02-01 01:47:15.000000000 +0000
@@ -368,18 +368,18 @@
 
 2018-12-19  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* gdb/dummy-frame.c (default_dummy_id): Defined new function.
-	* gdb/dummy-frame.h (default_dummy_id): Declare new function.
-	* gdb/frame-unwind.c (default_unwind_pc): Define new function.
+	* dummy-frame.c (default_dummy_id): Defined new function.
+	* dummy-frame.h (default_dummy_id): Declare new function.
+	* frame-unwind.c (default_unwind_pc): Define new function.
 	(default_unwind_sp): Define new function.
-	* gdb/frame-unwind.h (default_unwind_pc): Declare new function.
+	* frame-unwind.h (default_unwind_pc): Declare new function.
 	(default_unwind_sp): Declare new function.
-	* gdb/frame.c (frame_unwind_pc): Assume gdbarch_unwind_pc is
+	* frame.c (frame_unwind_pc): Assume gdbarch_unwind_pc is
 	available.
 	(get_frame_sp): Assume that gdbarch_unwind_sp is available.
-	* gdb/gdbarch.c: Regenerate.
-	* gdb/gdbarch.h: Regenerate.
-	* gdb/gdbarch.sh: Update definition of dummy_id, unwind_pc, and
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh: Update definition of dummy_id, unwind_pc, and
 	unwind_sp.  Add additional header files to be included in
 	generated file.
 
@@ -839,7 +839,7 @@
 2018-11-29  Rajendra SY  <rajendra.sy@gmail.com>
 
 	PR gdb/23093
-	* gdb/fbsd-tdep.c (fbsd_gdb_signal_from_target)
+	* fbsd-tdep.c (fbsd_gdb_signal_from_target)
 	(fbsd_gdb_signal_to_target): New.
 	(fbsd_init_abi): Install gdbarch "signal_from_target" and
 	"signal_to_target" methods.
@@ -1069,7 +1069,7 @@
 2018-11-21  Benno FÃ¼nfstÃ¼ck  <benno.fuenfstueck@gmail.com>
 
 	PR python/23714
-	* gdb/python/python.c (execute_gdb_command): Call
+	* python/python.c (execute_gdb_command): Call
 	prevent_dont_repeat earlier to avoid affecting dont_repeat.
 
 2018-11-21  Andrew Burgess  <andrew.burgess@embecosm.com>
@@ -5038,7 +5038,7 @@
 2018-08-16  Gary Benson <gbenson@redhat.com>
 
 	PR gdb/13000:
-	* gdb/main.c (captured_main_1): Exit with nonzero status
+	* main.c (captured_main_1): Exit with nonzero status
 	in batch mode if the last command to be executed failed.
 	* NEWS: Mention the above.
 
@@ -7745,22 +7745,22 @@
 
 2018-06-29  Pedro Alves  <palves@redhat.com>
 
-	* gdb/amd64-tdep.h (amd64_create_target_description): Add
+	* amd64-tdep.h (amd64_create_target_description): Add
 	"segments" parameter.
-	* gdb/amd64-tdep.c (amd64_none_init_abi, amd64_x32_none_init_abi)
+	* amd64-tdep.c (amd64_none_init_abi, amd64_x32_none_init_abi)
 	(_initialize_amd64_tdep): Update call to
 	amd64_create_target_description.
 	(amd64_target_description): Add "segments" parameter.  Adjust
 	the implementation to use it.
-	* gdb/amd64-linux-tdep.c (amd64_linux_read_description): Update
+	* amd64-linux-tdep.c (amd64_linux_read_description): Update
 	call to amd64_create_target_description.
-	* gdb/amd64-windows-tdep.c (amd64_windows_init_abi): Likewise.
-	* gdb/arch/amd64.h (amd64_create_target_description): Add
+	* amd64-windows-tdep.c (amd64_windows_init_abi): Likewise.
+	* arch/amd64.h (amd64_create_target_description): Add
 	"segments" register.
-	* gdb/arch/amd64.c (amd64_create_target_description): Add
+	* arch/amd64.c (amd64_create_target_description): Add
 	"segments" parameter.  Call create_feature_i386_64bit_segments
 	only if SEGMENTS is true.
-	* gdb/gdbserver/win32-i386-low.c (i386_arch_setup): Update
+	* gdbserver/win32-i386-low.c (i386_arch_setup): Update
 	call to amd64_create_target_description.
 
 2018-06-29  Pedro Alves  <palves@redhat.com>
@@ -9239,7 +9239,7 @@
 2018-05-31  Alan Hayward  <alan.hayward@arm.com>
 
 	* Makefile.in: Add new header.
-	* gdb/arch/aarch64.h (sve_vg_from_vl): New macro.
+	* arch/aarch64.h (sve_vg_from_vl): New macro.
 	(sve_vl_from_vg): Likewise.
 	(sve_vq_from_vl): Likewise.
 	(sve_vl_from_vq): Likewise.
@@ -9262,7 +9262,6 @@
 	* arch/aarch64.c (aarch64_create_target_description): Check VQ.
 	* arch/aarch64.h (aarch64_create_target_description): Add VQ.
 	parmeter.
-	* doc/gdb.texinfo: Describe SVE feature
 	* features/aarch64-sve.c: New file.
 
 2018-05-31  Omair Javaid  <omair.javaid@linaro.org>
@@ -12316,7 +12315,7 @@
 2018-04-28  Dan Robertson  <danlrobertson89@gmail.com>
 
 	PR rust/23124
-	* gdb/rust-exp.y (convert_params_to_types): Ensure that the params
+	* rust-exp.y (convert_params_to_types): Ensure that the params
 	pointer is not null before dereferencing it.
 
 2018-04-30  Tom Tromey  <tom@tromey.com>
@@ -12455,7 +12454,7 @@
 2018-04-29  John Reiser  <jreiser@BitWagon.com>
 
 	PR build/22873
-	* gdb/Makefile.in: (.c:.l, .c:.y): Write the target only in the
+	* Makefile.in: (.c:.l, .c:.y): Write the target only in the
 	last step, and do it atomically.
 
 2018-04-27  Alexandre Oliva  <aoliva@redhat.com>
@@ -12690,13 +12689,6 @@
 
 	* configure: Rebuild.
 
-2018-04-22  Rajendra SY  <rajendra.sy@gmail.com>
-
-	PR gdb/23095
-	* gdb/testsuite/gdb.base/break-probes.exp: Pass shlib_load to
-	prepare_for_testing.  Set normal_bp to r_debug_state if target
-	is bsd.
-
 2018-04-21  Pedro Alves  <palves@redhat.com>
 	    Rajendra SY  <rajendra.sy@gmail.com>
 
@@ -12845,7 +12837,7 @@
 	(tdesc_add_bitfield): Likewise.
 	(tdesc_add_flag): Likewise.
 	(tdesc_add_enum_value): Likewise.
-	* gdb/target-descriptions.h (tdesc_create_enum): Likewise.
+	* target-descriptions.h (tdesc_create_enum): Likewise.
 	(tdesc_add_typed_bitfield): Likewise.
 	(tdesc_add_enum_value): Likewise.
 
@@ -14798,7 +14790,7 @@
 
 2018-02-26  Maciej W. Rozycki  <macro@mips.com>
 
-	* gdb/mips-tdep.c (mips_gdbarch_init): Reorder ABI determination
+	* mips-tdep.c (mips_gdbarch_init): Reorder ABI determination
 	ahead of target description loading.
 
 2018-02-26  Tom Tromey  <tom@tromey.com>
@@ -16416,7 +16408,7 @@
 
 2018-01-08  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
-	* gdb/gnu-nat.c: Include <elf.h> and <link.h>.
+	* gnu-nat.c: Include <elf.h> and <link.h>.
 	(gnu_xfer_auxv): New function.
 	(gnu_xfer_partial): Call gnu_xfer_auxv when `object' is
 	TARGET_OBJECT_AUXV.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2019 ./gdb/ChangeLog-2019
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2019	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/ChangeLog-2019	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,17396 @@
+2019-12-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_border_mode_translate)
+	(tui_border_kind_translate_vline, tui_border_kind_translate_hline)
+	(tui_border_kind_translate_ulcorner)
+	(tui_border_kind_translate_urcorner)
+	(tui_border_kind_translate_llcorner)
+	(tui_border_kind_translate_lrcorner, tui_active_border_mode)
+	(tui_border_mode, tui_border_kind): Now static.
+
+2019-12-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-interp.c (tui_start_enabled): Now bool.
+	(_initialize_tui_interp): Update.
+	* tui/tui-hooks.c (tui_refreshing_registers): Now bool.
+	(tui_register_changed)
+	(tui_refresh_frame_and_register_information): Update.
+	* tui/tui-win.c (tui_update_variables): Return bool.
+	* tui/tui-win.h (tui_update_variables): Return bool.
+	* tui/tui.c (tui_get_command_dimension): Return bool.
+	* tui/tui.h (tui_get_command_dimension): Return bool.
+
+2019-12-29  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* buildsym.c (buildsym_compunit::record_line): Do no longer ignore
+	line 65535.
+
+2019-12-27  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Remove
+	commented-out code.
+	* tui/tui.c: Remove #if 0 code.
+
+2019-12-27  Tom Tromey  <tom@tromey.com>
+
+	* cli/cli-cmds.c (print_disassembly): Reorder "if".
+
+2019-12-27  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_active): Now bool.
+	(tui_finish_init): Likewise.
+	(tui_enable): Update.
+	(tui_disable): Update.
+	(tui_is_window_visible): Update.
+	* tui/tui.h (tui_active): Now bool.
+
+2019-12-27  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.c (tui_source_window::maybe_update): Update.
+	* tui/tui-regs.c (tui_data_window::display_registers_from):
+	Update.
+	* tui/tui-layout.c (tui_gen_win_info::resize): Update.
+	* tui/tui-data.h (struct tui_gen_win_info) <viewport_height>:
+	Remove.
+	* tui/tui-command.c (tui_cmd_window::resize): Update.
+
+2019-12-26  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-lang.c (ada_decode_symbol): Update.
+	* buildsym.c (add_symbol_to_list): Update.
+	* coffread.c (process_coff_symbol): Update.
+	* ctfread.c (ctf_add_enum_member_cb): Update.
+	(new_symbol): Update.
+	(ctf_add_var_cb): Update.
+	* dwarf2read.c (fixup_go_packaging): Update.
+	(dwarf2_compute_name): Update.
+	(new_symbol): Update.
+	* jit.c (finalize_symtab): Update.
+	* language.c (language_alloc_type_symbol): Update.
+	* mdebugread.c (new_symbol): Update.
+	* minsyms.c (minimal_symbol_reader::record_full): Update.
+	(minimal_symbol_reader::install): Update.
+	* psymtab.c (print_partial_symbols): Update.
+	(psymbol_hash): Update.
+	(psymbol_compare): Update.
+	(add_psymbol_to_bcache): Update.
+	(maintenance_check_psymtabs): Update.
+	* stabsread.c (define_symbol): Update.
+	* symtab.c (symbol_set_names): Rename to...
+	(general_symbol_info::compute_and_set_names): ...this.
+	(general_symbol_info::natural_name): Update.
+	(general_symbol_info::search_name): Update.
+	(fixup_section): Update.
+	* symtab.h (struct general_symbol_info) <name>: Rename to...
+	<m_name>: ...this.
+	<compute_and_set_names>: Rename from...
+	(symbol_set_names): ...this.
+	(SYMBOL_SET_NAMES): Remove.
+	(struct symbol) <ctor>: Update.
+
+2019-12-26  Christian Biesinger  <cbiesinger@google.com>
+
+	* NEWS: Mention that multithreaded symbol loading is now on by
+	default.
+
+2019-12-26  Ruslan Kabatsayev  <b7.10110111@gmail.com>
+
+	* dwarf2read.c (is_valid_DW_AT_defaulted)
+	(is_valid_DW_AT_calling_convention_for_type)
+	(is_valid_DW_AT_calling_convention_for_subroutine): Fix printing
+	ULONGEST variables on x86-32.
+
+2019-12-21  George Barrett  <bob@bob131.so>
+
+	* solib-svr4.c (svr4_handle_solib_event): Add fallback link
+	namespace test for when the debug struct isn't available.
+
+2019-12-21  Eli Zaretskii  <eliz@gnu.org>
+
+	* top.c (print_gdb_configuration): Print "--with-xxhash" or
+	"--without-xxhash" according to HAVE_LIBXXHASH.
+
+2019-12-20  Weimin Pan  <weimin.pan@oracle.com>
+	* ctfread.c (ctf_file_key): Change type to objfile_key.
+	(struct ctf_context): Remove typedef.
+	(get_objfile_text_range): Use ANOFFSET to get text base.
+
+2019-12-20  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* dwarf2read.c (is_valid_DW_AT_calling_convention_for_subroutine):
+	New function.
+	(read_subroutine_type): Validate the parsed
+	DW_AT_calling_convention value before assigning it to a
+	subroutine's calling_convention attribute.
+	* gdbtypes.h (struct func_type) <calling_convention>: Use
+	an enum bitfield as its type, instead of plain unsigned.
+
+2019-12-20  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	PR gdb/25054
+	* infcall.c (call_function_by_hand_dummy): Update the argument-
+	passing section for call-by-value parameters.
+	(struct destructor_info): New struct.
+	(call_destructors): New auxiliary function.
+
+2019-12-20  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* gnu-v3-abi.c (enum definition_style): New enum type.
+	(get_def_style): New function.
+	(is_user_provided_def): New function.
+	(is_implicit_def): New function.
+	(is_copy_or_move_constructor_type): New function.
+	(is_copy_constructor_type): New function.
+	(is_move_constructor_type): New function.
+	(gnuv3_pass_by_reference): Collect language_pass_by_ref_info
+	for a given type.
+
+2019-12-20  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* language.h (struct language_pass_by_ref_info): New struct.
+	(struct language_defn)<la_pass_by_reference>: Change the signature
+	to return a language_pass_by_ref_info instead of an int.
+	(language_pass_by_reference): Ditto.
+	(default_pass_by_reference): Ditto.
+	Adjust the users listed below.
+	* arch-utils.c (default_return_in_first_hidden_param_p):
+	Update.
+	* cp-abi.c (cp_pass_by_reference): Update.
+	* cp-abi.h (cp_pass_by_reference): Update declaration.
+	(struct cp_abi_ops)<pass_by_reference>: Update.
+	* gnu-v3-abi.c (gnuv3_pass_by_reference): Update.
+	* infcall.c (call_function_by_hand_dummy): Update.
+	* language.c (language_pass_by_reference): Update.
+	(default_pass_by_reference): Update.
+	* tic6x-tdep.c (tic6x_return_value): Update.
+
+2019-12-20  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* dwarf2read.c (dwarf2_add_member_fn): Read the DW_AT_defaulted
+	and DW_AT_deleted attributes of a function.
+	(read_structure_type): Read the DW_AT_calling_convention attribute
+	of a type.
+	(is_valid_DW_AT_defaulted): New function.
+	(is_valid_DW_AT_calling_convention_for_type): New function.
+	* gdbtypes.h: Include dwarf2.h.
+	(struct fn_field)<defaulted>: New field to store the
+	DW_AT_defaulted attribute.
+	(struct fn_field)<is_deleted>: New field to store the
+	DW_AT_deleted attribute.
+	(struct cplus_struct_type)<calling_convention>: New field to store
+	the DW_AT_calling_convention attribute.
+	(TYPE_FN_FIELD_DEFAULTED): New macro.
+	(TYPE_FN_FIELD_DELETED): New macro.
+	(TYPE_CPLUS_CALLING_CONVENTION): New macro.
+	* gdbtypes.c (dump_fn_fieldlists): Update for the changes made
+	to the .h file.
+	(print_cplus_stuff): Likewise.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_show_source): Remove.
+	* tui/tui.h (tui_show_source): Don't declare.
+	* tui/tui-out.c (tui_ui_out::do_field_string): Don't call
+	tui_show_source.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.h (tui_show_frame_info): Return bool.
+	* tui/tui-stack.c (tui_show_frame_info): Return bool.
+	* tui/tui-hooks.c (tui_refresh_frame_and_register_information):
+	Update.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	PR tui/18932:
+	* tui/tui-hooks.c (tui_refresh_frame_and_register_information):
+	Rename parameters.  Handle the not-from-stack-frame case.
+	(from_stack, from_source_symtab): New globals.
+	(tui_before_prompt, tui_normal_stop): Update.
+	(tui_context_changed, tui_symtab_changed): New functions.
+	(tui_attach_detach_observers): Attach new observers.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* source.c (struct current_source_location) <set, symtab, line>:
+	New methods.
+	<m_symtab, m_line>: Rename.  Now private.
+	(get_current_source_symtab_and_line)
+	(set_default_source_symtab_and_line)
+	(set_current_source_symtab_and_line)
+	(clear_current_source_symtab_and_line, select_source_symtab)
+	(info_source_command, print_source_lines_base)
+	(info_line_command, search_command_helper): Update.
+	* observable.h (current_source_symtab_and_line_changed): Declare
+	observable.
+	* observable.c (current_source_symtab_and_line_changed): Define
+	observable.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-hooks.c (tui_before_prompt): Change parameter to bool.
+	(tui_before_prompt, tui_normal_stop): Update.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c
+	(tui_source_window_base::update_source_window_as_is): Don't call
+	set_current_source_symtab_and_line.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.h (struct tui_locator_window) <set_locator_info>:
+	Take a symtab_and_line.
+	* tui/tui-stack.c (tui_locator_window::set_locator_info): Take a
+	symtab_and_line.
+	(tui_show_frame_info): Update.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (tui_show_frame_info): Don't call
+	update_exec_info.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_enable): Call tui_display_main.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-disasm.c (tui_get_begin_asm_address): Use
+	get_current_source_symtab_and_line, and main_name.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_show_source): Update.
+	* tui/tui-winsource.h (tui_update_source_windows_with_line): Update.
+	* tui/tui-winsource.c (tui_update_source_windows_with_line): Take
+	a symtab_symbol_info, not a separate symtab and line.  Simplify.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_windows_with_addr):
+	Simplify.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<set_contents, update_source_window_as_is, update_source_window>:
+	Take a sal, not a separate symtab and tui_line_or_address.
+	* tui/tui-winsource.c (tui_source_window_base::update_source_window)
+	(tui_source_window_base::update_source_window_as_is): Take a sal,
+	not a separate symtab and tui_line_or_address.
+	(tui_update_source_windows_with_addr)
+	(tui_update_source_windows_with_line)
+	(tui_source_window_base::rerender)
+	(tui_source_window_base::refill): Update.
+	* tui/tui-source.h (struct tui_source_window) <set_contents>: Take
+	a sal, not a separate symtab and tui_line_or_address.
+	* tui/tui-source.c (tui_source_window::set_contents): Take a sal,
+	not a separate symtab and tui_line_or_address.
+	(tui_source_window::maybe_update): Update.
+	* tui/tui-disasm.h (struct tui_disasm_window) <set_contents>: Take
+	a sal, not a separate symtab and tui_line_or_address.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents): Take a sal,
+	not a separate symtab and tui_line_or_address.
+	(tui_disasm_window::do_scroll_vertical)
+	(tui_disasm_window::maybe_update): Update.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_source_window_base::refill): Use
+	start_line_or_addr.
+	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Use
+	start_line_or_addr.
+	* tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Use
+	start_line_or_addr.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<set_contents>: Return bool.
+	* tui/tui-winsource.c
+	(tui_source_window_base::update_source_window_as_is): Update.
+	* tui/tui-source.h (struct tui_source_window) <set_contents>:
+	Return bool.
+	* tui/tui-source.c (tui_source_window::set_contents): Return
+	bool.  Simplify.
+	* tui/tui-disasm.h (struct tui_disasm_window) <set_contents>:
+	Return bool.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents): Return
+	bool.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_windows_with_addr)
+	(tui_update_source_windows_with_line): Call update_source_window.
+	* tui/tui-source.h (struct tui_source_window)
+	<show_symtab_source>: Don't declare.
+	* tui/tui-source.c (tui_source_window::show_symtab_source):
+	Remove.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_windows_with_addr): Call
+	update_source_window directly.
+	* tui/tui-disasm.h (tui_show_disassem): Don't declare.
+	* tui/tui-disasm.c (tui_show_disassem): Remove.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c
+	(tui_source_window_base::update_source_window_as_is): Don't switch focus.
+	* tui/tui-disasm.c (tui_show_disassem): Don't switch focus.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<maybe_update>: Remove line_no and addr parameters.
+	* tui/tui-stack.c (tui_show_frame_info): Set PC on sal.  Update.
+	* tui/tui-source.h (struct tui_source_window) <maybe_update>:
+	Update.
+	* tui/tui-source.c (tui_source_window::maybe_update): Remove
+	line_no and addr parameters.
+	* tui/tui-disasm.h (struct tui_disasm_window) <maybe_update>:
+	Update.
+	* tui/tui-disasm.c (tui_disasm_window::maybe_update): Remove
+	line_no and addr parameters.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_source_window_base::set_is_exec_point_at)
+	(tui_source_window_base::update_breakpoint_info): Remove asserts.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_windows_with_addr): Call
+	tui_show_disassem.
+	* tui/tui-disasm.h (tui_show_disassem_and_update_source): Don't
+	declare.
+	* tui/tui-disasm.c (tui_show_disassem_and_update_source): Remove.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.h (tui_show_source): Remove parameters.
+	* tui/tui.c (tui_show_source): Remove parameters.
+	* tui/tui-out.c (tui_ui_out::do_field_string): Update.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_show_source): Update.
+	* tui/tui-winsource.c (tui_display_main): Update.
+	* tui/tui-stack.h (tui_update_locator_fullname): Change parameter
+	to symtab.
+	* tui/tui-stack.c (tui_update_locator_fullname): Change parameter
+	to symtab.
+	* tui/tui-disasm.c (tui_show_disassem_and_update_source): Update.
+
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+	PR tui/23619:
+	* tui/tui-io.c (tui_rl_saved_prompt): Remove.
+	(tui_redisplay_readline): Use rl_display_prompt.
+	(tui_prep_terminal): Update.
+
+2019-12-19  Christian Biesinger  <cbiesinger@google.com>
+
+	* configure: Regenerate.
+	* configure.ac: Quote variable arguments of test.
+	* gdbsupport/common.m4: Likewise.
+
+2019-12-19  Christian Biesinger  <cbiesinger@google.com>
+
+	* score-tdep.c (score7_analyze_prologue): Pass 2.0 instead of
+	2 to pow ().
+
+2019-12-19  Christian Biesinger  <cbiesinger@google.com>
+
+	* tui/tui-source.c (tui_source_window::set_contents): Cast argument of
+	log10 to double to fix Solaris 11 with gcc 5.5.
+
+2019-12-19  Christian Biesinger  <cbiesinger@google.com>
+
+	* fbsd-tdep.c (fbsd_info_proc_files_entry): Rename local var
+	"sun" to "saddr_un".
+
+2019-12-19  Tom Tromey  <tromey@adacore.com>
+
+	* ui-out.h (enum class field_kind): Fix comment.
+
+2019-12-11  Tom Tromey  <tromey@adacore.com>
+
+	* xml-support.c (xml_fetch_content_from_file): Use FOPEN_RB.
+
+2019-12-18  Tom Tromey  <tromey@adacore.com>
+
+	PR build/25268:
+	* gdbsupport/thread-pool.c (set_thread_name): Expect "int" return
+	type on macOS.  Add comment.
+
+2019-12-18  Simon Marchi  <simon.marchi@efficios.com>
+
+	* c-lang.c (c_get_string, asm_language_defn): Remove space
+	before tab.
+
+2019-12-18  Tom Tromey  <tromey@adacore.com>
+
+	PR build/25250:
+	* ui-out.c (ui_out::vmessage): Update.
+	* ui-out.h (enum class field_kind) <FIELD_STRING, FIELD_SIGNED>:
+	Rename.
+	(string_field): Update.
+	(signed_field): Update.
+
+2019-12-18  Simon Marchi  <simon.marchi@efficios.com>
+
+	* top.c (print_gdb_configuration): Adjust indentation.
+
+2019-12-17  Christian Biesinger  <cbiesinger@google.com>
+
+	* bsd-kvm.c: Include gdbsupport/pathstuff.h.
+
+2019-12-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* tui/tui-layout.h (class tui_layout_base): Add virtual
+	destructor.
+
+2019-12-16  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* infcmd.c (prepare_one_step): Step over skipped inline functions.
+	* infrun.c (inline_frame_is_marked_for_skip): New helper function.
+	(process_event_stop_test): Keep stepping over skipped inline functions.
+
+2019-12-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (struct gdb_block) <next>: Remove field.
+	(struct gdb_symtab) <~gdb_symtab>: Remove.
+	<blocks>: Change type to std::forward_list<gdb_block>.
+	(compare_block): Remove.
+	(jit_block_open_impl): Adjust to std::forward_list.  Place the new
+	block at the beginning, don't mind about sorting.
+	(finalize_symtab): Adjust to std::forward_list, sort the blocks list
+	before using it.
+
+2019-12-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (struct gdb_block): Add constructor, initialize
+	real_block and next fields.
+	<name>: Change type to gdb::unique_xmalloc_ptr.
+	(struct gdb_symtab) <~gdb_symtab>: Free blocks with delete.
+	(jit_block_open_impl): Allocate gdb_block with new.
+	(finalize_symtab): Adjust to gdb::unique_xmalloc_ptr.
+
+2019-12-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c: Include forward_list.
+	(struct gdb_symtab) <next>: Remove field.
+	(struct gdb_object) <symtabs>: Change type to
+	std::forward_list<gdb_symtab>.
+	(jit_object_open_impl): Allocate gdb_object with new.
+	(jit_symtab_open_impl): Adjust to std::forward_list.
+	(finalize_symtab): Don't delete symtab.
+	(jit_object_close_impl):  Adjust to std::forward_list.  Free
+	gdb_object with delete.
+
+2019-12-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (struct gdb_symtab): Add constructor, destructor,
+	initialize fields.
+	<linetable>: Change type to unique_xmalloc_ptr.
+	<file_name>: Change type to std::string.
+	(jit_symtab_open_impl): Allocate gdb_symtab with new.
+	(jit_symtab_line_mapping_add_impl): Adjust.
+	(finalize_symtab): Adjust, call delete on stab.
+
+2019-12-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (finalize_symtab): Set gdb_block_iter_tmp in loop.
+
+2019-12-16  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat_target::attach): Update.
+	* remote.c (extended_remote_target::attach): Update.
+	* procfs.c (procfs_target::attach): Update.
+	* nto-procfs.c (nto_procfs_target::attach): Update.
+	(nto_procfs_target::create_inferior): Update.
+	* inf-ptrace.c (inf_ptrace_target::attach): Update.
+	* gnu-nat.c (gnu_nat_target::attach): Update.
+	(gnu_nat_target::detach): Update.
+	* darwin-nat.c (darwin_nat_target::attach): Update.
+	* corefile.c (get_exec_file): Constify result.  Remove extraneous
+	return.
+	* bsd-kvm.c (bsd_kvm_target_open): Update.
+	* gdbsupport/common-inferior.h (get_exec_file): Constify result.
+
+2019-12-16  Christian Biesinger  <cbiesinger@google.com>
+
+	* gdbsupport/common-defs.h: Remove workaround for a gnulib bug
+	(we no longer need to include time.h before pathmax.h)
+
+2019-12-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-exp.y (write_ambiguous_var): Update.
+	* coffread.c (process_coff_symbol): Update.
+	* ctfread.c (ctf_add_enum_member_cb): Update.
+	(new_symbol): Update.
+	* dwarf2read.c (fixup_go_packaging): Update.
+	(new_symbol): Update.
+	* language.c (language_alloc_type_symbol): Update.
+	* mdebugread.c (new_symbol): Update.
+	* minsyms.c (minimal_symbol_reader::record_full): Update.
+	* psymtab.c (add_psymbol_to_bcache): Update.
+	* stabsread.c (define_symbol): Update.
+	(read_enum_type): Update.
+	* symtab.c (symbol_set_language): Make this a member function...
+	(general_symbol_info::set_language): ... here.
+	* symtab.h (struct general_symbol_info) <set_language>: New function.
+	(SYMBOL_SET_LANGUAGE): Remove.
+	(symbol_set_language): Remove.
+
+2019-12-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-lang.c (ada_add_block_symbols): Update.
+	(ada_collect_symbol_completion_matches): Update.
+	* ax-gdb.c (gen_expr): Update.
+	* block.c (block_lookup_symbol): Update.
+	(block_lookup_symbol_primary): Update.
+	(block_find_symbol): Update.
+	* cp-namespace.c (cp_lookup_symbol_imports_or_template): Update.
+	* dbxread.c (process_one_symbol): Update.
+	* dictionary.c (insert_symbol_hashed): Update.
+	(collate_pending_symbols_by_language): Update.
+	(mdict_add_symbol): Update.
+	* dwarf-index-write.c (write_psymbols): Update.
+	* dwarf2read.c (fixup_go_packaging): Update.
+	* findvar.c (read_var_value): Update.
+	* ft32-tdep.c (ft32_skip_prologue): Update.
+	* go-lang.c (go_symbol_package_name): Update.
+	* language.h (scoped_switch_to_sym_language_if_auto::
+	scoped_switch_to_sym_language_if_auto): Update.
+	* linespec.c (find_method): Update.
+	(find_label_symbols_in_block): Update.
+	* mdebugread.c (parse_symbol): Update.
+	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
+	* minsyms.c (add_minsym_to_demangled_hash_table): Update.
+	(minimal_symbol_reader::install): Update.
+	* moxie-tdep.c (moxie_skip_prologue): Update.
+	* parse.c (parse_exp_in_context): Update.
+	* psymtab.c (psymbol_name_matches): Update.
+	(match_partial_symbol): Update.
+	(lookup_partial_symbol): Update.
+	(psymbol_hash): Update.
+	(psymbol_compare): Update.
+	* python/py-framefilter.c (extract_sym): Update.
+	(py_print_single_arg): Update.
+	* stabsread.c (define_symbol): Update.
+	* stack.c (print_frame_arg): Update.
+	(find_frame_funname): Update.
+	(info_frame_command_core): Update.
+	* symfile.c (set_initial_language): Update.
+	* symtab.c (symbol_set_demangled_name): Update.
+	(symbol_get_demangled_name): Update.
+	(symbol_set_language): Update.
+	(symbol_find_demangled_name): Update.
+	(symbol_set_names): Update.
+	(general_symbol_info::natural_name): Update.
+	(general_symbol_info::demangled_name): Update.
+	(general_symbol_info::search_name): Update.
+	(symbol_matches_search_name): Update.
+	(eq_symbol_entry): Update.
+	(iterate_over_symbols): Update.
+	(completion_list_add_symbol): Update.
+	(completion_list_add_msymbol): Update.
+	(completion_list_add_fields): Update.
+	* symtab.h (struct general_symbol_info) <language>: New function.
+	<language>: Rename to...
+	<m_language>: ...this.
+	(SYMBOL_LANGUAGE): Remove.
+	(MSYMBOL_LANGUAGE): Remove.
+	(struct symbol) <ctor>: Update.
+	* xstormy16-tdep.c (xstormy16_skip_prologue): Update.
+
+2019-12-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-exp.y (write_ambiguous_var): Call symbol_set_language to
+	set the language of sym.
+	* language.c (language_alloc_type_symbol): Likewise.
+
+2019-12-14  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	https://bugzilla.redhat.com/show_bug.cgi?id=1728147
+	PR gdb/23613
+	* bsd-kvm.c (bsd_kvm_target_open): Use 'gdb_abspath'.
+	* corelow.c: Include 'gdbsupport/pathstuff.h'.
+	(core_target_open): Use 'gdb_abspath'.
+	* gdbsupport/pathstuff.c (gdb_abspath): Guard against
+	'current_directory == NULL' case.
+	* gdbsupport/pathstuff.h (gdb_abspath): Expand comment and
+	explain what happens when 'current_directory' is NULL.
+	* go32-nat.c (go32_nat_target::wait): Check if
+	'current_directory' is NULL before call to 'chdir'.
+	* source.c (add_path): Use 'gdb_abspath'.
+	* top.c: Include 'gdbsupport/pathstuff.h'.
+	(init_history): Use 'gdb_abspath'.
+	(set_history_filename): Likewise.
+	* tracefile-tfile.c: Include 'gdbsupport/pathstuff.h'.
+	(tfile_target_open): Use 'gdb_abspath'.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh: Remove check for multiple calls to
+	warning or error.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh: Remove call to "fix" for "long long".
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh: Handle -Wno- prefix.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh (usage): Use GNU style.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* gdbsupport/common-utils.c (string_printf, string_vprintf)
+	(string_vappendf): Add ARI comment.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh: Remove "fix" call for
+	floatformat_to_double.
+	* target-float.c (host_float_ops<T>::from_target): Add ARI
+	comment.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh: Remove "fix" call for abort.
+	* utils.c (abort_with_message, dump_core, internal_vproblem): Add
+	ARI marker to abort.
+	* event-top.c (handle_sigsegv): Add ARI marker to abort.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh: Fix floatformat_from_double text.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh: Remove ATTRIBUTE_UNUSED check.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh: Remove "boolean" and "var_boolean"
+	checks.
+
+2019-12-13  Tom Tromey  <tromey@adacore.com>
+
+	* gdbsupport/safe-iterator.h (class basic_safe_range) <begin,
+	end>: No longer "const".
+
+2019-12-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c: Fix indentation, replace spaces with tabs where
+	applicable.
+
+2019-12-13  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+
+	* configure.tgt: Match msp430-*-elf* targets when configuring GDB.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct objfile) <partial_symtabs>: Now a
+	unique_ptr.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* progspace.h (objfile_list): New typedef.
+	(class unwrapping_objfile_iterator)
+	(struct unwrapping_objfile_range): Newl
+	(struct program_space) <objfiles_range>: Change type.
+	<objfiles>: Change return type.
+	<add_objfile>: Change type of "objfile" parameter.
+	<objfiles_list>: Now a list of shared_ptr.
+	* progspace.c (program_space::add_objfile): Change type of
+	"objfile".  Update.
+	(program_space::remove_objfile): Update.
+	* objfiles.h (struct objfile) <~objfile>: Make public.
+	* objfiles.c (objfile::make): Update.
+	(objfile::unlink): Don't call delete.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (symbol_file_clear): Update.
+	* progspace.h (struct program_space) <free_all_objfiles>: Declare
+	method.
+	* progspace.c (program_space::free_all_objfiles): New method.
+	* objfiles.h (free_all_objfiles): Don't declare.
+	* objfiles.c (free_all_objfiles): Move to program_space.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* progspace.c (program_space::add_objfile)
+	(program_space::remove_objfile): Update.
+	(program_space::multi_objfile_p): Remove.
+	* objfiles.h (struct objfile) <next>: Remove.
+	* objfiles.c (objfile::objfile): Update.
+	(put_objfile_before): Update.
+	(unlink_objfile): Update.
+	* progspace.h (object_files): Remove.
+	(struct program_space) <objfiles_head>: Remove.
+	<objfiles_list>: New member.
+	<objfiles_range, objfiles_safe_range>: Change type.
+	(objfiles): Change return type.
+	(objfiles_safe): Update.
+	(multi_objfile_p): Rewrite and inline.
+	(object_files): Remove macro.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* gdbsupport/safe-iterator.h (basic_safe_iterator): Simplify.  Add
+	second constructor.
+	(basic_safe_range): New class.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* progspace.c (program_space::multi_objfile_p): New method.
+	* printcmd.c (info_symbol_command): Update.
+	* maint.c (maintenance_translate_address): Update.
+	* objfiles.h (MULTI_OBJFILE_P): Remove.
+	* progspace.h (struct program_space) <multi_objfile_p>: New
+	method.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* progspace.h (struct program_space) <remove_objfile>: Declare.
+	* progspace.c (program_space::remove_objfile): New method.
+	* objfiles.c (unlink_objfile): Remove.
+	(objfile::unlink): Call remove_objfile.
+	(objfile): Don't call unlink_objfile.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* progspace.h (struct program_space) <add_objfile>: Declare
+	method.
+	* progspace.c (program_space::add_objfile): New method.
+	* objfiles.c (~objfile): Don't unlink objfile.
+	(put_objfile_before): Remove.
+	(add_separate_debug_objfile): Don't call put_objfile_before.
+	(objfile::make): Call add_objfile.  Set new_objfiles_available on
+	the per-program-space data.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (syms_from_objfile_1): Use objfile_up.
+	(syms_from_objfile_1, remove_symbol_file_command): Call unlink
+	method.
+	(reread_symbols): Use objfile_up.
+	* solib.c (update_solib_list, reload_shared_libraries_1): Call
+	unlink method.
+	* objfiles.h (struct objfile) <~objfile>: Now private.
+	<unlink>: New method.
+	(struct objfile_deleter): New.
+	(objfile_up): New typedef.
+	* objfiles.c (objfile::unlink): New method.
+	(free_objfile_separate_debug, free_all_objfiles)
+	(objfile_purge_solibs): Use it.
+	* jit.c (jit_unregister_code): Remove.
+	(jit_inferior_exit_hook, jit_event_handler): Call unlink on
+	objfile.
+	* compile/compile-object-run.c (do_module_cleanup): Call unlink on
+	objfile.
+	* compile/compile-object-load.c (compile_object_load): Use
+	objfile_up.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (symbol_file_add_with_addrs): Pass "parent" to
+	objfile::make.
+	* objfiles.h (struct objjfile) <make>: No longer inline.
+	(add_separate_debug_objfile): Don't declare.
+	* objfiles.c (add_separate_debug_objfile): Now static.
+	(objfile::make): Move from objfiles.h.  Call
+	add_separate_debug_objfile.  Add "parent" parameter.
+
+2019-12-12  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (symbol_file_add_with_addrs): Use objfile::make.
+	* objfiles.h (struct objfile): Make constructor private.
+	<make>: New static method.
+	* jit.c (jit_object_close_impl): Update.
+
+2019-12-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (jit_reader_try_read_symtab): Replace xmalloc/xfree with
+	gdb::byte_vector.
+
+2019-12-12  Tom Tromey  <tromey@adacore.com>
+
+	* xml-support.c (xml_fetch_content_from_file): Don't call
+	malloc_failure.
+	* utils.h (class gdb_argv): Remove malloc_failure comment.
+	* utils.c (gdb_argv::reset): Don't call malloc_failure.
+
+2019-12-12  Tom Tromey  <tromey@adacore.com>
+
+	* Makefile.in (ALL_TARGET_OBS): Add riscv-ravenscar-thread.o.
+	(HFILES_NO_SRCDIR): Add riscv-ravenscar-thread.h.
+	(ALLDEPFILES): Add riscv-ravenscar-thread.c.
+	* configure.tgt (riscv-*-*): Add riscv-ravenscar-thread.o.
+	* riscv-ravenscar-thread.c: New file.
+	* riscv-ravenscar-thread.h: New file.
+	* riscv-tdep.c (riscv_gdbarch_init): Call
+	register_riscv_ravenscar_ops.
+
+2019-12-12  Tom Tromey  <tromey@adacore.com>
+
+	* gdbsupport/thread-pool.c (set_thread_name): Use
+	ATTRIBUTE_UNUSED.
+
+2019-12-12  Luis Machado  <luis.machado@linaro.org>
+
+	* gdbsupport/safe-strerror.c: Don't include diagnostics.h.
+	(select_strerror_r): Use ATTRIBUTE_UNUSED instead of the diagnostics
+	macros.
+
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_set_win_height_command): Call
+	tui_adjust_window_height.
+	(tui_adjust_win_heights, new_height_ok): Remove.
+	* tui/tui-layout.h (tui_adjust_window_height): Declare.
+	* tui/tui-layout.c (tui_adjust_window_height): New function.
+
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_resize_all): Remove code, call
+	tui_apply_current_layout.
+
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.h (tui_apply_current_layout): Declare.
+	* tui/tui-layout.c (standard_layouts, applied_layout): New
+	globals.
+	(tui_apply_current_layout): New function.
+	(show_layout): Set applied_layout.  Call
+	tui_apply_current_layout.
+	(show_source_command, show_disasm_command)
+	(show_source_disasm_command, show_data)
+	(show_source_or_disasm_and_command): Remove.
+	(initialize_layouts): New function.
+	(_initialize_tui_layout): Call initialize_layouts.
+
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.h (class tui_layout_base)
+	(class tui_layout_window, class tui_layout_split): New.
+	* tui/tui-layout.c (tui_get_window_by_name)
+	(tui_layout_window::clone, tui_layout_window::apply)
+	(tui_layout_window::get_sizes, tui_layout_window::add_split)
+	(tui_layout_split::add_window, tui_layout_split::clone)
+	(tui_layout_split::get_sizes)
+	(tui_layout_split::set_weights_from_heights)
+	(tui_layout_split::adjust_size, tui_layout_split::apply): New
+	functions.
+	(tui_layout_split::add_split, tui_layout_split::add_split)
+	(tui_layout_split::set_weights_from_heights)
+	(tui_layout_split::set_weights_from_heights): New functions.
+
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_gen_win_info::make_window): Update.
+	* tui/tui-win.c (tui_adjust_win_heights, tui_resize_all): Update.
+	* tui/tui-layout.c (tui_gen_win_info::resize): Update.
+	* tui/tui-data.h (struct tui_point): Remove.
+	(struct tui_gen_win_info) <origin>: Remove.
+	<x, y>: New fields.
+	* tui/tui-command.c (tui_cmd_window::resize): Update.
+
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.h (struct tui_locator_window) <min_height>:
+	Implement.
+	* tui/tui-regs.h (struct tui_data_item_window) <min_height>:
+	Implement.
+	* tui/tui-data.h (struct tui_gen_win_info) <min_height>: New
+	method.
+	(struct tui_win_info) <min_height>: Implement.
+
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_gen_win_info) <can_box>: New method.
+	(struct tui_win_info) <can_box>: Update.
+
+2019-12-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.h (struct tui_locator_window) <max_height>: New
+	method.
+	* tui/tui-regs.h (struct tui_data_item_window) <max_height>: New
+	method.
+	* tui/tui-data.h (struct tui_gen_win_info) <max_height>: New
+	method.
+	(struct tui_win_info) <max_height>: Now override.
+
+2019-12-11  Joel Brobecker  <brobecker@adacore.com>
+
+	* NEWS: Create a new section for the next release branch.
+	Rename the section of the current branch, now that it has
+	been cut.
+
+2019-12-11  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 9 branch created (27f7b2f64062ac9e52afc60509263c2702a9ebd0):
+	* version.in: Bump version to 10.0.50.DATE-git.
+
+2019-12-11  Tom Tromey  <tromey@adacore.com>
+
+	PR build/25268:
+	* gdbsupport/thread-pool.c (set_thread_name): New function.
+	(thread_pool::set_thread_count): Don't call pthread_setname_np.
+	(thread_pool::thread_function): Call set_thread_name.
+
+2019-12-11  Tom Tromey  <tromey@adacore.com>
+
+	* fbsd-tdep.c (fbsd_core_info_proc_status): Cast result of
+	bfd_get_signed_8.
+
+2019-12-11  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Document -raw-values option and the related setting commands.
+	* printcmd.c (print_command_parse_format): Do not set opts->raw off,
+	only set it on when /r is given.
+	* valprint.c (value_print_option_defs): New element raw-values.
+	* Makefile.in: Add the new file.
+
+2019-12-10  Christian Biesinger  <cbiesinger@google.com>
+
+	* gdbsupport/safe-strerror.c: Supress the unused function warning
+	for select_strerror_r.
+
+2019-12-10  Christian Biesinger  <cbiesinger@google.com>
+
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* gdbsupport/agent.c (gdb_connect_sync_socket): Call
+	safe_strerror instead of strerror.
+	* gdbsupport/common.m4: Don't check for strerror.
+	* gdbsupport/safe-strerror.c: Support both the glibc version
+	of strerror_r and the XSI version.
+
+2019-12-10  Tom Tromey  <tromey@adacore.com>
+
+	* ada-typeprint.c (print_choices): Use a single "?".
+	(print_variant_part): Print "?" if the discriminant name
+	is not known.
+
+2019-12-10  George Barrett  <bob@bob131.so>
+
+	Fix scripted probe breakpoints.
+	* breakpoint.c (tracepoint_probe_breakpoint_ops): Move
+	declaration forward.
+	(breakpoint_ops_for_event_location_type)
+	(breakpoint_ops_for_event_location): Add function definitions.
+	(break_command_1, trace_command): Use
+	breakpoint_ops_for_event_location.
+	* breakpoint.h (breakpoint_ops_for_event_location): Add function
+	declarations.
+	* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Use
+	breakpoint_ops_for_event_location.
+	* python/py-breakpoint.c (bppy_init): Use
+	breakpoint_ops_for_event_location.
+
+2019-12-09  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* gdbtypes.c (rank_one_type): Return INCOMPATIBLE_TYPE_BADNESS
+	when ranking an lvalue argument for an rvalue parameter.
+
+2019-12-08  Wataru Ashihara  <wataash@wataash.com>
+
+	* darwin-nat.c (darwin_nat_target::create_inferior): Fix
+	template argument for scoped_restore_tmpl from bool to int.
+
+2019-12-07  Keith Seitz  <keiths@redhat.com>
+
+	* build-id.c (build_id_bfd_get): Permit bfd_core, too.
+	(build_id_to_debug_bfd): Make static, rewriting to use
+	build_id_to_bfd_suffix.
+	(build_id_to_bfd_suffix): Copy of build_id_to_debug_bfd,
+	adding `suffix' parameter. Append SUFFIX to file names
+	when searching for matching files.
+	(build_id_to_debug_bfd): Use build_id_to_bfd_suffix.
+	(build_id_to_exec_bfd): Likewise.
+	* build-id.h (build_id_to_debug_bfd): Clarify that function
+	searches for BFD of debug info file.
+	(build_id_to_exec_bfd): Declare.
+	* corelow.c: Include build-id.h.
+	(locate_exec_from_corefile_build_id): New function.
+	(core_target_open): If no executable BFD is found,
+	search for a core file BFD using build-id.
+
+2019-12-06  Christian Biesinger  <cbiesinger@google.com>
+
+	* bcache.c: Put in namespace gdb.
+	* bcache.h: Likewise.
+	* gdbtypes.c (check_types_worklist): Update.
+	(types_deeply_equal): Update.
+	* macrotab.c (struct macro_table) <bcache>: Update.
+	(new_macro_table): Update.
+	* macrotab.h (struct bcache): Put this forward declaration
+	inside namespace gdb.
+	(new_macro_table): Update.
+	* objfiles.h (struct objfile_per_bfd_storage) <filename_cache>:
+	Update.
+	<macro_cache>: Update.
+	* psymtab.h: (psymtab_storage) <psymbol_cache>: Update.
+
+2019-12-06  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/24971
+	* block.c (best_symbol, better_symbol): New function.
+	(block_lookup_symbol_primary, block_lookup_symbol): Prefer def over
+	decl.
+
+2019-12-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* gdbtypes.h: Define the REFERENCE_SEE_THROUGH_BADNESS value.
+	* gdbtypes.c (rank_one_type): Use REFERENCE_SEE_THROUGH_BADNESS
+	for ranking see-through reference cases.
+
+2019-12-06  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* stack.c (faas_command): Check a command is provided.
+	* thread.c (taas_command, tfaas_command): Likewise.
+
+2019-12-05  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* inferior.c (prune_inferiors):  Only call delete_inferior,
+	Do not modify the inferior list.
+
+2019-12-05  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* c-exp.y: Update calls to lookup_typename,
+	lookup_signed_typename and lookup_unsigned_typename.
+	* c-lang.c (evaluate_subexp_c): Likewise.
+	* cp-namespace.c (cp_lookup_symbol_imports_or_template):
+	Likewise.
+	* eval.c (binop_promote): Likewise.
+	* gdbtypes.c (lookup_typename): Remove gdbarch parameter.
+	(lookup_unsigned_typename): Likewise.
+	(lookup_signed_typename): Likewise.
+	* gdbtypes.h (lookup_unsigned_typename): Likewise.
+	(lookup_signed_typename): Likewise.
+	(lookup_typename): Likewise.
+	* guile/scm-type.c (tyscm_lookup_typename): Update calls to
+	lookup_typename, lookup_signed_typename,
+	lookup_unsigned_typename.
+	* m2-exp.y: Likewise.
+	* printcmd.c (printf_wide_c_string): Likewise.
+	(ui_printf): Likewise.
+	* python/py-type.c (typy_lookup_typename): Likewise.
+	* python/py-xmethods.c (python_xmethod_worker::invoke):
+	Likewise.
+	* rust-exp.y: Likewise.
+
+2019-12-04  Christian Biesinger  <cbiesinger@google.com>
+
+	* configure.nat (obsd64): Add missing files x86-nat.o and
+	nat/x86-dregs.o.
+
+2019-12-04  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (val_print_string): Use metadata_style.
+	* go-valprint.c (print_go_string): Use metadata style.
+	* p-valprint.c (pascal_object_print_static_field): Use metadata
+	style.
+	* cp-valprint.c (cp_print_static_field): Use metadata style.
+
+2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Chris January  <chris.january@arm.com>
+
+	* f-exp.y (COMPLEX_KEYWORD, SINGLE, DOUBLE, PRECISION): New
+	tokens.
+	(typebase): New patterns for complex, single/double precision, and
+	single/double complex.
+	(f77_keywords): Change token for complex keyword, and add single,
+	double, and precision keywords.
+
+2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* avr-tdep.c (_initialize_avr_tdep): Improve help of command
+	"info io_registers".
+
+2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* regcache.c (cooked_read_test): Initialize thread list of
+	mock_inferior.
+
+2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* aarch64-linux-tdep.c: Remove includes.
+
+2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* aarch64-tdep.c: Remove includes.
+
+2019-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* filtered-iterator.h (filtered_iterator) <operator==,
+	operator!=>: Compare wrapped iterators, not wrapped pointers.
+	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
+	unittests/filtered_iterator-selftests.c.
+	* unittests/filtered_iterator-selftests.c: New file.
+
+2019-12-04  Tom Tromey  <tromey@adacore.com>
+
+	* gdbtypes.c (create_range_type): Inherit endianity
+	from base type.
+
+2019-12-04  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (decode_constrained_packed_array)
+	(ada_value_assign, value_assign_to_component): Update.
+	* dwarf2loc.c (rw_pieced_value, access_memory)
+	(dwarf2_compile_expr_to_ax): Update.
+	* dwarf2read.c (dwarf2_add_field): Update.
+	* eval.c (evaluate_subexp_standard): Update.
+	* gdbarch.c, gdbarch.h: Rebuild.
+	* gdbarch.sh (bits_big_endian): Remove.
+	* gdbtypes.h (union field_location): Update comment.
+	* target-descriptions.c (make_gdb_type): Update.
+	* valarith.c (value_bit_index): Update.
+	* value.c (struct value) <bitpos>: Update comment.
+	(unpack_bits_as_long, modify_field): Update.
+	* value.h (value_bitpos): Update comment.
+
+2019-12-04  Tom Tromey  <tromey@adacore.com>
+
+	* gdbtypes.c (type_byte_order): Move earlier.  Assert for unknown
+	endian-ness.
+
+2019-12-04  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (dwarf2_init_float_type)
+	(dwarf2_init_complex_target_type): Add byte_order parameter.
+	(read_base_type): Compute byte order earlier.
+	* gdbtypes.c (init_float_type): Add byte_order parameter.
+	* gdbtypes.h (init_float_type): Add byte_order parameter.
+
+2019-12-04  Tom Tromey  <tromey@adacore.com>
+
+	* unittests/tui-selftests.c: Conditionally include tui-winsource.h.
+
+2019-12-04  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (process_structure_scope): Initialize
+	"discr_offset".
+
+2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* mi/mi-symbol-cmds.c (mi_symbol_info): Take extra parameter, and
+	add it into the search spec.
+	(parse_max_results_option): New function.
+	(mi_info_functions_or_variables): Parse -max-results flag and pass
+	it to mi_symbol_info.
+	(mi_cmd_symbol_info_modules): Likewise.
+	(mi_cmd_symbol_info_types): Likewise.
+	* symtab.c (global_symbol_searcher::add_matching_symbols): Change
+	return type to bool, change result container into a set, and don't
+	add new results if we have enough already.
+	(global_symbol_searcher::add_matching_msymbols): Change return
+	type to bool, and don't add new results if we have enough already.
+	(sort_search_symbols_remove_dups): Delete.
+	(global_symbol_searcher::search): Early exit from search loop when
+	we have enough results.  Use a std::set to collect the results
+	from calling add_matching_symbols.
+	* symtab.h (global_symbol_searcher) <set_max_seach_results>: New
+	member function.
+	(global_symbol_searcher) <m_max_search_results>: New member
+	variable.
+	(global_symbol_searcher) <add_matching_symbols>: Update header
+	comment and change return type to bool.
+	(global_symbol_searcher) <add_matching_msymbols>: Update header
+	comment and change return type to bool.
+
+2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* symtab.c (symbol_search::compare_search_syms): Update header
+	comment.
+	(global_symbol_searcher::is_suitable_msymbol): New function.
+	(global_symbol_searcher::expand_symtabs): New function.
+	(global_symbol_searcher::add_matching_symbols): New function.
+	(global_symbol_searcher::add_matching_msymbols): New function.
+	(global_symbol_searcher::search): Move most of the content
+	into the new functions above, and call them as needed.
+	* symtab.h (global_symbol_searcher) <expand_symtabs>: New member
+	function.
+	(global_symbol_searcher) <add_matching_symbols>: New member
+	function.
+	(global_symbol_searcher) <add_matching_msymbols>: New member
+	function.
+	(global_symbol_searcher) <is_suitable_msymbol>: New member
+	function.
+
+2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* mi/mi-cmds.c (mi_cmds): Add -symbol-info-module-functions and
+	-symbol-info-module-variables entries.
+	* mi/mi-cmds.h (mi_cmd_symbol_info_module_functions): Declare.
+	(mi_cmd_symbol_info_module_variables): Declare.
+	* mi/mi-symbol-cmds.c
+	(module_symbol_search_iterator): New typedef.
+	(output_module_symbols_in_single_module_and_file): New function.
+	(output_module_symbols_in_single_module): New function.
+	(mi_info_module_functions_or_variables): New function.
+	(mi_cmd_symbol_info_module_functions): New function.
+	(mi_cmd_symbol_info_module_variables): New function.
+	* NEWS: Mention new MI command.
+
+2019-12-03  Christian Biesinger  <cbiesinger@google.com>
+
+	* bcache.c (hash): Remove.
+	(hash_continue): Remove.
+	* bcache.h (hash): Remove.
+	(hash_continue): Remove.
+	(struct bcache) <ctor>: Update.
+	* psymtab.c (psymbol_hash): Update.
+	* stabsread.c (hashname): Update.
+	* utils.h (fast_hash): Add an argument for a start value,
+	defaulting to zero.
+
+2019-12-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* symtab.c (symbol_cache_clear_slot):  Move close to cleared type.
+	(destroy_block_symbol_cache): New function.
+	(symbol_cache:~symbol_cache) Call destroy_block_symbol_cache.
+	(resize_symbol_cache): Likewise.
+
+2019-12-02  Tom Tromey  <tom@tromey.com>
+
+	* unittests/tui-selftests.c (run_tests): Make conditional.
+	(_initialize_tui_selftest): Make conditional.
+
+2019-12-02  Christian Biesinger  <cbiesinger@google.com>
+
+	* aix-thread.c (debug_aix_thread): Change type to bool.
+
+2019-12-02  Luis Machado  <luis.machado@linaro.org>
+
+	* infrun.c (follow_fork_inferior): Remove outdated FIXME comment.
+
+2019-12-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (read_tag_string_type): Read the fields required to
+	make a dynamic string, and possibly create a dynamic range for the
+	string.
+	(attr_to_dynamic_prop): Setup is_reference based on the type of
+	attribute being processed.
+	* gdbtypes.c (is_dynamic_type_internal): Handle TYPE_CODE_STRING.
+	(resolve_dynamic_array): Rename to...
+	(resolve_dynamic_array_or_string): ...this, update header comment,
+	and accept TYPE_CODE_STRING.
+	(resolve_dynamic_type_internal): Handle TYPE_CODE_STRING.
+
+2019-12-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (dwarf2_per_cu_int_type): New function, takes most
+	of its implementation from...
+	(dwarf2_per_cu_addr_sized_int_type): ...here, which now just calls
+	the new function.
+
+2019-12-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (read_subrange_type): Read bit and byte stride and
+	create a range with stride where appropriate.
+	* f-valprint.c: Include 'gdbarch.h'.
+	(f77_print_array_1): Take the stride into account when walking the
+	array.  Also convert the stride into addressable units.
+	* gdbtypes.c (create_range_type): Initialise the stride to
+	constant zero.
+	(create_range_type_with_stride): New function, initialise the
+	range as normal, and then setup the stride.
+	(has_static_range): Include the stride here.  Also change the
+	return type to bool.
+	(create_array_type_with_stride): Consider the range stride if the
+	array isn't given its own stride.
+	(resolve_dynamic_range): Resolve the stride if needed.
+	* gdbtypes.h (struct range_bounds) <stride>: New member variable.
+	(struct range_bounds) <flag_is_byte_stride>: New member variable.
+	(TYPE_BIT_STRIDE): Define.
+	(TYPE_ARRAY_BIT_STRIDE): Define.
+	(create_range_type_with_stride): Declare.
+	* valarith.c (value_subscripted_rvalue): Take range stride into
+	account when walking the array.
+
+2019-12-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_all_windows_info): Treat inactive TUI
+	specially.
+
+2019-12-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_copy_source_line): Don't advance past
+	\0.
+	* unittests/tui-selftests.c: New file.
+	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add tui-selftests.c.
+
+2019-12-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_enable): Call tui_update_variables earlier.
+
+2019-12-01  Tom Tromey  <tom@tromey.com>
+
+	* NEWS: Document new settings.
+	* tui/tui-wingeneral.c (box_win): Apply appropriate border style.
+	* tui/tui-win.c (_initialize_tui_win): Add border style
+	observers.
+	* tui/tui-io.h (tui_apply_style): Declare.
+	* tui/tui-io.c (tui_apply_style): Rename from apply_style.  No
+	longer static.
+	(apply_ansi_escape, tui_set_reverse_mode): Update.
+	* cli/cli-style.h (class cli_style_option) <add_setshow_commands>:
+	Add "skip_intensity" parameter.
+	<changed>: New member.
+	<do_set_value>: Declare.
+	(tui_border_style, tui_active_border_style): Declare.
+	* cli/cli-style.c (tui_border_style, tui_active_border_style): New
+	globals.
+	(cli_style_option): Initialize "changed".
+	(cli_style_option::do_set_value): New function.
+	(cli_style_option::add_setshow_commands): Add "skip_intensity"
+	parameter.  Update.
+	(STYLE_ADD_SETSHOW_COMMANDS): Add "SKIP" parameter.
+	(_initialize_cli_style): Update.  Create TUI border style
+	commands.
+
+2019-12-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_copy_source_line): Add "ndigits"
+	parameter.
+	* tui/tui-winsource.c (tui_copy_source_line): Add "ndigits"
+	parameter.
+	* tui/tui-win.h (compact_source): Declare.
+	* tui/tui-win.c (compact_source): New global.
+	(tui_set_compact_source, tui_show_compact_source): New functions.
+	(_initialize_tui_win): Add "compact-source" setting.
+	* tui/tui-source.c (tui_source_window::set_contents): Handle
+	compact_source setting.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
+	* NEWS: Document new setting.
+
+2019-11-30  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (dwarf2_add_field): Include field offset when
+	computing variant part length.
+
+2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* NEWS:  Mention define-prefix.  Tell that command names can now
+	contain a . character.
+
+2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* command.h (valid_cmd_char_p): Declare.
+	* cli/cli-decode.c (valid_cmd_char_p): New function factorizing
+	the check of valid command char.
+	(find_command_name_length, valid_user_defined_cmd_name_p): Use
+	valid_cmd_char_p.
+	* cli/cli-script.c (validate_comname): Likewise.
+	* completer.c (gdb_completer_command_word_break_characters):
+	Do not remove . from the word break char, update comments.
+	(complete_line_internal_1): Use valid_cmd_char_p.
+	* guile/scm-cmd.c (gdbscm_parse_command_name): Likewise.
+	* python/py-cmd.c (gdbpy_parse_command_name): Likewise.
+
+2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-script.c (do_define_command): Ensure a redefined
+	prefix command is kept as a prefix command.
+	(define_prefix_command): New function.
+	(show_user_1): Report user defined prefixes.
+	(_initialize_cli_script):  Create the new 'define-prefix' command.
+	Add completers for 'define' and 'document'.
+	* top.c (execute_command):  If command is a user-defined prefix only
+	command, report the list of commands for this prefix command.
+
+2019-11-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* valops.c (find_oload_champ): Improve debug output.
+
+2019-11-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* valops.c (find_oload_champ): Print part of debug messages
+	before the badness vector is std::move'd.
+
+2019-11-28  Tom Tromey  <tom@tromey.com>
+
+	* value.c (creal_internal_fn): Fix comment.
+
+2019-11-28  Tom Tromey  <tom@tromey.com>
+
+	* gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count,
+	flag_bound_evaluated>: Now unsigned.
+
+2019-11-28  Tom Tromey  <tom@tromey.com>
+
+	* guile/guile-internal.h (vlscm_scm_from_value_unsafe): Don't
+	declare.
+
+2019-11-28  Mihails Strasuns  <mihails.strasuns@intel.com>
+
+	* jit.c (jit_bfd_try_read_symtab): Fix printed function name in the
+	debug output.
+	* jit.c (jit_unregister_code): Add debug print to match
+	`jit_register_code`.
+
+2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+
+	* NEWS: Mention the new multithreaded symbol loading.
+
+2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+
+	* maint.c (n_worker_threads): Default to 0.
+	(worker_threads_disabled): New function.
+	* maint.h (worker_threads_disabled): New function.
+	* minsyms.c (minimal_symbol_reader::record_full): Call symbol_set_names
+	here if worker_threads_disabled () is true.
+	(minimal_symbol_reader::install): Skip all threading if
+	worker_threads_disabled () is true.
+
+2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+
+	* minsyms.c (add_minsym_to_hash_table): Use a previously computed
+	hash code if possible.
+	(add_minsym_to_demangled_hash_table): Likewise.
+	(minimal_symbol_reader::install): Compute the hash codes for msymbol
+	on the background thread.
+	* symtab.h (struct minimal_symbol) <hash_value, demangled_hash_value>:
+	Add these fields.
+
+2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+
+	* minsyms.c (minimal_symbol_reader::install): Also compute the hash
+	of the mangled name on the background thread.
+	* symtab.c (symbol_set_names): Allow passing in the hash of the
+	linkage_name.
+	* symtab.h (symbol_set_names): Likewise.
+
+2019-11-27  Kevin Buettner  <kevinb@redhat.com>
+
+	* dwarf2read.c (inherit_abstract_dies): Ensure that delayed
+	physnames are computed for inherited DIEs.
+
+2019-11-27  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.h (struct dwarf2_per_objfile): Remove unnecessary
+	backslashes.
+	* cp-support.c: Remove unnecessary backslashes.
+
+2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-exp.y (write_ambiguous_var): Replace SYMBOL_SET_LINKAGE_NAME
+	with sym->set_linkage_name.
+	* coffread.c (coff_read_enum_type): Likewise.
+	* mdebugread.c (parse_symbol): Likewise.
+	* stabsread.c (patch_block_stabs): Likewise.
+	(define_symbol): Likewise.
+	(read_enum_type): Likewise.
+	(common_block_end): Likewise.
+	* symtab.h (struct general_symbol_info) <set_linkage_name>: New
+	function.
+	(SYMBOL_SET_LINKAGE_NAME): Remove.
+	* xcoffread.c (process_xcoff_symbol): Replace SYMBOL_SET_LINKAGE_NAME
+	with sym->set_linkage_name.
+
+2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* mi/mi-cmds.c (mi_cmds): Add 'symbol-info-modules' entry.
+	* mi/mi-cmds.h (mi_cmd_symbol_info_modules): Declare.
+	* mi/mi-symbol-cmds.c (mi_cmd_symbol_info_modules): New function.
+	* NEWS: Mention new MI command.
+
+2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* mi/mi-cmds.c (mi_cmds): Add '-symbol-info-functions',
+	'-symbol-info-types', and '-symbol-info-variables'.
+	* mi/mi-cmds.h (mi_cmd_symbol_info_functions): Declare.
+	(mi_cmd_symbol_info_types): Declare.
+	(mi_cmd_symbol_info_variables): Declare.
+	* mi/mi-symbol-cmds.c: Add 'source.h' and 'mi-getopt.h' includes.
+	(output_debug_symbol): New function.
+	(output_nondebug_symbol): New function.
+	(mi_symbol_info): New function.
+	(mi_info_functions_or_variables): New function.
+	(mi_cmd_symbol_info_functions): New function.
+	(mi_cmd_symbol_info_types): New function.
+	(mi_cmd_symbol_info_variables): New function.
+	* NEWS: Mention new commands.
+
+2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* symtab.c (symbol_to_info_string): New function, most content
+	moved from print_symbol_info, but updated to return a std::string.
+	(print_symbol_info): Update to use symbol_to_info_string and print
+	returned string.
+	* symtab.h (symbol_to_info_string): Declare new function.
+
+2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/python.c (gdbpy_rbreak): Convert to using
+	global_symbol_searcher.
+	* symtab.c (file_matches): Convert return type to bool, change
+	file list to std::vector, update header comment.
+	(search_symbols): Rename to...
+	(global_symbol_searcher::search): ...this and update now its
+	a member function of global_symbol_searcher.  Take account of the
+	changes to file_matches.
+	(symtab_symbol_info): Convert to using global_symbol_searcher.
+	(rbreak_command): Likewise.
+	(search_module_symbols): Likewise.
+	* symtab.h (enum symbol_search): Update comment.
+	(search_symbols): Remove declaration.
+	(class global_symbol_searcher): New class.
+
+2019-11-26  Tom Tromey  <tromey@adacore.com>
+
+	* cp-support.c (_initialize_cp_support): Conditionally initialize
+	gdb_demangle_attempt_core_dump.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* python/py-function.c (fnpy_init): Update.
+	* value.h (add_internal_function): Adjust declaration.
+	* value.c (function_destroyer): Remove.
+	(do_add_internal_function): Don't set destroyer or copy name.
+	(add_internal_function): Take unique_xmalloc_ptr<char> for name.
+	Set name_allocated.
+	* python/py-cmd.c (cmdpy_destroyer): Don't free "name".
+	(cmdpy_init): Set name_allocated.
+	* cli/cli-decode.h (struct cmd_list_element) <name_allocated>: New
+	member.
+	(~cmd_list_element): Free "name" if needed.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* value.h (add_internal_function): Add new overload.  Move
+	documentation from value.h.
+	* value.c (do_add_internal_function): New function.
+	(add_internal_function): Use it.  Add new overload.
+	(function_destroyer): Don't free doc.
+	* python/py-function.c (fnpy_init): Update.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* python/py-cmd.c (cmdpy_destroyer): Don't free "doc".
+	(cmdpy_init): Set "doc_allocated".
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* gdbsupport/thread-pool.c (thread_pool::set_thread_count): Set
+	name of worker thread.
+	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for
+	pthread_setname_np.
+	* configure, config.in: Rebuild.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* python/python.c (class gdbpy_gil): New.
+	(struct gdbpy_event): Add constructor, destructor, operator().
+	(gdbpy_post_event): Use run_on_main_thread.
+	(gdbpy_initialize_events): Remove.
+	(do_start_initialization): Update.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* NEWS: Add entry.
+	* maint.c (_initialize_maint_cmds): Add "worker-threads" maint
+	commands.  Call update_thread_pool_size.
+	(update_thread_pool_size, maintenance_set_worker_threads): New
+	functions.
+	(n_worker_threads): New global.
+
+2019-11-26  Christian Biesinger  <cbiesinger@google.com>
+	    Tom Tromey  <tom@tromey.com>
+
+	* minsyms.c (minimal_symbol_reader::install): Use
+	parallel_for_each.
+	* gdbsupport/parallel-for.h: New file.
+	* Makefile.in (HFILES_NO_SRCDIR): Add gdbsupport/parallel-for.h.
+
+2019-11-26  Christian Biesinger  <cbiesinger@google.com>
+	    Tom Tromey  <tom@tromey.com>
+
+	* gdbsupport/thread-pool.h: New file.
+	* gdbsupport/thread-pool.c: New file.
+	* Makefile.in (COMMON_SFILES): Add thread-pool.c.
+	(HFILES_NO_SRCDIR): Add thread-pool.h.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* event-top.h (thread_local_segv_handler): Declare.
+	* event-top.c (thread_local_segv_handler): New global.
+	(install_handle_sigsegv, handle_sigsegv): New functions.
+	(async_init_signals): Install SIGSEGV handler.
+	* cp-support.c (gdb_demangle_jmp_buf): Change type.  Now
+	thread-local.
+	(report_failed_demangle): New function.
+	(gdb_demangle): Make core_dump_allowed atomic.  Remove signal
+	handler-setting code, instead use segv_handler.  Run warning code
+	on main thread.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* run-on-main-thread.c: New file.
+	* run-on-main-thread.h: New file.
+	* unittests/main-thread-selftests.c: New file.
+	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
+	main-thread-selftests.c.
+	(HFILES_NO_SRCDIR): Add run-on-main-thread.h.
+	(COMMON_SFILES): Add run-on-main-thread.c.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* main.c (setup_alternate_signal_stack): Remove.
+	(captured_main_1): Use gdb::alternate_signal_stack.
+	* gdbsupport/alt-stack.h: New file.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* gdbsupport/signals-state-save-restore.c (original_signal_mask):
+	Remove comment.
+	(save_original_signals_state, restore_original_signals_state): Use
+	gdb_sigmask.
+	* linux-nat.c (block_child_signals, restore_child_signals_mask)
+	(_initialize_linux_nat): Use gdb_sigmask.
+	* guile/guile.c (_initialize_guile): Use block_signals.
+	* Makefile.in (HFILES_NO_SRCDIR): Add gdb-sigmask.h.
+	* gdbsupport/gdb-sigmask.h: New file.
+	* event-top.c (async_sigtstp_handler): Use gdb_sigmask.
+	* cp-support.c (gdb_demangle): Use gdb_sigmask.
+	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for
+	pthread_sigmask.
+	* configure, config.in: Rebuild.
+	* gdbsupport/block-signals.h: New file.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* acinclude.m4: Include ax_pthread.m4.
+	* Makefile.in (PTHREAD_CFLAGS, PTHREAD_LIBS): New variables.
+	(INTERNAL_CFLAGS_BASE): Use PTHREAD_CFLAGS.
+	(CLIBS): Use PTHREAD_LIBS.
+	(aclocal_m4_deps): Add ax_pthread.m4.
+	* config.in, configure: Rebuild.
+	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for std::thread.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* symtab.h (struct minimal_symbol) <name_set>: New member.
+	* minsyms.c (minimal_symbol_reader::record_full): Copy name.
+	Don't call symbol_set_names.
+	(minimal_symbol_reader::install): Call symbol_set_names.
+
+2019-11-26  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* python/python.c (gdbpy_enter::~gdbpy_enter): Release GIL after
+	restore_active_ext_lang, as GIL is needed for (indirectly)
+	called PyOS_InterruptOccurred.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* sparc-nat.c (sparc_xfer_wcookie): Sync declaration with
+	definition.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* remote-sim.c (simulator_command): Make static, remove
+	declaration.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* unittests/array-view-selftests.c (check_ptr_size_ctor2): Make
+	static.
+	* unittests/basic_string_view/capacity/1.cc (test01): Likewise.
+	* unittests/basic_string_view/cons/char/1.cc (test01): Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/cons/char/2.cc (test03): Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/cons/char/3.cc (test05): Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/element_access/char/1.cc (test01):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/element_access/char/empty.cc (main):
+	Likewise.
+	* unittests/basic_string_view/element_access/char/front_back.cc
+	(test01): Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/inserters/char/2.cc (test05):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/modifiers/remove_prefix/char/1.cc
+	(test01): Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/modifiers/remove_suffix/char/1.cc
+	(test01): Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/modifiers/swap/char/1.cc (test01):
+	Likewise.
+	* unittests/basic_string_view/operations/compare/char/1.cc
+	(test01): Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operations/compare/char/13650.cc
+	(test01): Likewise.
+	* unittests/basic_string_view/operations/copy/char/1.cc (test01):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operations/data/char/1.cc (test01):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operations/find/char/1.cc (test01):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operations/find/char/2.cc (test02):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operations/find/char/3.cc (test03):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operations/find/char/4.cc (main):
+	Likewise.
+	* unittests/basic_string_view/operations/rfind/char/1.cc (test01):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operations/rfind/char/2.cc (test02):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operations/rfind/char/3.cc (test03):
+	Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operations/substr/char/1.cc
+	(test01): Likewise.
+	(main): Likewise.
+	* unittests/basic_string_view/operators/char/2.cc (main):
+	Likewise.
+	* unittests/optional/assignment/1.cc (test): Likewise.
+	* unittests/optional/assignment/2.cc (test): Likewise.
+	* unittests/optional/assignment/3.cc (test): Likewise.
+	* unittests/optional/assignment/4.cc (test): Likewise.
+	* unittests/optional/assignment/5.cc (test): Likewise.
+	* unittests/optional/assignment/6.cc (test): Likewise.
+	* unittests/optional/assignment/7.cc (test): Likewise.
+	* unittests/optional/cons/copy.cc (test): Likewise.
+	* unittests/optional/cons/default.cc (test): Likewise.
+	* unittests/optional/cons/move.cc (test): Likewise.
+	* unittests/optional/cons/value.cc (test): Likewise.
+	* unittests/optional/in_place.cc (test): Likewise.
+	* unittests/optional/observers/1.cc (test): Likewise.
+	* unittests/optional/observers/2.cc (test): Likewise.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* tui-win.h (tui_set_var_cmd): Remove.
+	* tui-win.c (tui_set_var_cmd): Make static.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* breakpoint.h (hbreak_command_wrapper, thbreak_command_wrapper,
+	rbreak_command_wrapper): Remove.
+	* symtab.c (rbreak_command_wrapper): Remove.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* inferior.h (info_terminal_command): Remove declaration.
+	* inflow.c (info_terminal_command): Make static.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* inferior.c (exit_inferior_silent): Remove.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dictionary.c (dict_empty, mdict_empty): Remove.
+	* dictionary.c (mdict_empty): Remove.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	 * arc-tdep.c (arc_insn_get_memory_base_reg): Make static.
+	 (arc_insn_get_memory_offset): Likewise.
+	 (arc_insn_dump): Likewise.
+	 * cp-support.c (test_cp_symbol_name_matches): Likewise.
+	 * csky-linux-tdep.c (csky_supply_fregset): Likewise.
+	 * dictionary.c (dict_iterator_next): Likewise.
+	 (dict_iter_match_first): Likewise.
+	 (dict_iter_match_next): Likewise.
+	 * f-lang.c (evaluate_subexp_f): Likewise.
+	 * hppa-tdep.c (hppa_read_pc): Likewise.
+	 * i386-tdep.c (i386_floatformat_for_type): Likewise.
+	 * parse.c (write_exp_elt_msym): Likewise.
+	 * ppc-linux-tdep.c (ppc_floatformat_for_type): Likewise.
+	 * remote.c (remote_packet_size): Likewise.
+	 (remote_notif_stop_parse): Likewise.
+	 * rs6000-aix-tdep.c (aix_sighandle_frame_sniffer): Likewise.
+	 * s12z-tdep.c (s12z_disassemble_info): Likewise.
+	 * source.c (prepare_path_for_appending): Likewise.
+	 * sparc64-linux-tdep.c
+	 (sparc64_linux_handle_segmentation_fault); Likewise.
+	 * stack.c (frame_selection_by_function_completer): Likewise.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* completer.c (set_gdb_completion_word_break_characters):
+	Remove.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf-index-write.c: Include dwarf-index-write.h.
+	* mi/mi-interp.c: Include mi/mi-interp.h.
+
+2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* aarch32-tdep.c: Include aarch32-tdep.h.
+	* aarch32-tdep.h: Forward-declare struct target_desc.
+
+2019-11-26  Christian Biesinger  <cbiesinger@google.com>
+
+	* linux-nat.c (detach_one_lwp): Call safe_strerror instead of
+	strerror.
+	* nto-procfs.c (nto_procfs_target::create_inferior): Likewise.
+	* windows-nat.c (windows_nat_target::create_inferior): Likewise.
+
+2019-11-25  Tom de Vries  <tdevries@suse.de>
+
+	* contrib/words.sh: Add -c option.
+
+2019-11-25  Christian Biesinger  <cbiesinger@google.com>
+
+	* solib.c (solib_find_1): Change int to bool.
+	(exec_file_find): Change int to bool.
+	(solib_find): Change int to bool.
+	(solib_read_symbols): Change int to bool.
+	(solib_used): Change int to bool.
+	(solib_add): Change int to bool.
+	(info_sharedlibrary_command): Change int to bool.
+	(solib_contains_address_p): Change int to bool.
+	(solib_keep_data_in_core): Change int to bool.
+	(in_solib_dynsym_resolve_code): Change int to bool.
+	(reload_shared_libraries_1): Change int to bool.
+	(gdb_sysroot_changed): Change int to bool.
+	* solib.h (solib_read_symbols): Change int to bool.
+	(solib_contains_address_p): Change int to bool.
+	(solib_keep_data_in_core): Change int to bool.
+	(in_solib_dynsym_resolve_code): Change int to bool.
+	(libpthread_name_p): Change int to bool.
+
+2019-11-25  Luis Machado  <luis.machado@linaro.org>
+
+	* NEWS (New Commands): Mention "set debug remote-packet-max-chars".
+	* remote.c (REMOTE_DEBUG_MAX_CHAR): Remove.
+	(remote_packet_max_chars): New static global.
+	(show_remote_packet_max_chars): New function.
+	(remote_target::putpkt_binary): Adjust to use new
+	remote_packet_max_chars option.
+	(remote_target::getpkt_or_notif_sane_1): Likewise.
+	(_initialize_remote): Register new remote-packet-max-chars option.
+
+2019-11-24  Simon Marchi  <simon.marchi@efficios.com>
+
+	* m68k-linux-nat.c: Include gdbarch.h.
+
+2019-11-24  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (read_symbols): Update.
+	* psymtab.c (require_partial_symbols): Change type of "verbose" to
+	bool.
+	(psym_map_symtabs_matching_filename, find_pc_sect_psymtab)
+	(psym_lookup_symbol, psym_find_last_source_symtab)
+	(psym_forget_cached_source_info, psym_print_stats)
+	(psym_expand_symtabs_for_function, psym_expand_all_symtabs)
+	(psym_expand_symtabs_with_fullname, psym_map_symbol_filenames)
+	(psym_map_matching_symbols, psym_expand_symtabs_matching)
+	(psym_find_compunit_symtab_by_address)
+	(maintenance_print_psymbols, maintenance_info_psymtabs)
+	(maintenance_check_psymtabs): Update.
+	* psymtab.h (require_partial_symbols): Change type of "verbose" to
+	bool.
+
+2019-11-22  Tom Tromey  <tom@tromey.com>
+
+	* observable.h: Update comments.
+
+2019-11-22  Tom Tromey  <tromey@adacore.com>
+
+	* ada-tasks.c (ada_task_is_alive): Make parameter const.
+	(print_ada_task_info): Don't try to fetch thread id if task is not
+	alive.
+
+2019-11-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-exp.y: Update.
+	* ada-lang.c (sort_choices): Update.
+	(ada_print_symbol_signature): Update.
+	(resolve_subexp): Update.
+	(ada_parse_renaming): Update.
+	(ada_read_renaming_var_value): Update.
+	(lesseq_defined_than): Update.
+	(remove_extra_symbols): Update.
+	(remove_irrelevant_renamings): Update.
+	(ada_add_block_symbols): Update.
+	(ada_collect_symbol_completion_matches): Update.
+	(ada_is_renaming_symbol): Update.
+	(aggregate_assign_from_choices): Update.
+	(ada_evaluate_subexp): Update.
+	(ada_has_this_exception_support): Update.
+	(ada_is_non_standard_exception_sym): Update.
+	(ada_add_exceptions_from_frame): Update.
+	(ada_add_global_exceptions): Update.
+	(ada_print_subexp): Update.
+	* ax-gdb.c (gen_var_ref): Update.
+	(gen_maybe_namespace_elt): Update.
+	(gen_expr_for_cast): Update.
+	(gen_expr): Update.
+	* block.h: Update.
+	* blockframe.c (find_pc_partial_function): Update.
+	* breakpoint.c (print_breakpoint_location): Update.
+	(update_static_tracepoint): Update.
+	* btrace.c (ftrace_print_function_name): Update.
+	(ftrace_function_switched): Update.
+	* buildsym.c (find_symbol_in_list): Update.
+	* c-exp.y: Update.
+	* c-typeprint.c (c_print_typedef): Update.
+	(c_type_print_template_args): Update.
+	* cli/cli-cmds.c (edit_command): Update.
+	(list_command): Update.
+	(print_sal_location): Update.
+	* coffread.c (patch_opaque_types): Update.
+	(process_coff_symbol): Update.
+	(coff_read_enum_type): Update.
+	* compile/compile-c-symbols.c (c_symbol_substitution_name): Update.
+	(convert_one_symbol): Update.
+	(hash_symname): Update.
+	(eq_symname): Update.
+	* compile/compile-cplus-symbols.c (convert_one_symbol): Update.
+	* compile/compile-cplus-types.c (debug_print_scope): Update.
+	* compile/compile-loc2c.c (do_compile_dwarf_expr_to_c): Update.
+	* compile/compile-object-load.c (get_out_value_type): Update.
+	* cp-namespace.c (cp_scan_for_anonymous_namespaces): Update.
+	(search_symbol_list): Update.
+	(cp_lookup_symbol_imports_or_template): Update.
+	* cp-support.c (overload_list_add_symbol): Update.
+	* ctfread.c (psymtab_to_symtab): Update.
+	* dbxread.c (cp_set_block_scope): Update.
+	* dictionary.c (iter_match_first_hashed): Update.
+	(iter_match_next_hashed): Update.
+	(insert_symbol_hashed): Update.
+	(iter_match_next_linear): Update.
+	* dictionary.h: Update.
+	* dwarf2loc.c (func_get_frame_base_dwarf_block): Update.
+	(locexpr_describe_location_piece): Update.
+	(locexpr_describe_location_1): Update.
+	(locexpr_generate_c_location): Update.
+	(loclist_describe_location): Update.
+	(loclist_generate_c_location): Update.
+	* dwarf2read.c (dw2_debug_names_lookup_symbol): Update.
+	(read_func_scope): Update.
+	(process_enumeration_scope): Update.
+	(new_symbol): Update.
+	(dwarf2_const_value): Update.
+	(dwarf2_symbol_mark_computed): Update.
+	* eval.c (evaluate_funcall): Update.
+	(evaluate_subexp_standard): Update.
+	* expprint.c (print_subexp_standard): Update.
+	(dump_subexp_body_standard): Update.
+	* f-valprint.c (info_common_command_for_block): Update.
+	* findvar.c (get_hosting_frame): Update.
+	(default_read_var_value): Update.
+	* go-lang.c (go_symbol_package_name): Update.
+	* guile/scm-block.c (bkscm_print_block_smob): Update.
+	* guile/scm-symbol.c (syscm_print_symbol_smob): Update.
+	(gdbscm_symbol_name): Update.
+	(gdbscm_symbol_linkage_name): Update.
+	(gdbscm_symbol_print_name): Update.
+	* infcall.c (get_function_name): Update.
+	* infcmd.c (jump_command): Update.
+	(finish_command): Update.
+	* infrun.c (insert_exception_resume_breakpoint): Update.
+	* linespec.c (canonicalize_linespec): Update.
+	(create_sals_line_offset): Update.
+	(convert_linespec_to_sals): Update.
+	(complete_label): Update.
+	(find_label_symbols_in_block): Update.
+	* m2-typeprint.c (m2_print_typedef): Update.
+	* mdebugread.c (mdebug_reg_to_regnum): Update.
+	(parse_symbol): Update.
+	(mylookup_symbol): Update.
+	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
+	(list_args_or_locals): Update.
+	* objc-lang.c (compare_selectors): Update.
+	(info_selectors_command): Update.
+	(compare_classes): Update.
+	(info_classes_command): Update.
+	(find_imps): Update.
+	* p-typeprint.c (pascal_print_typedef): Update.
+	* printcmd.c (build_address_symbolic): Update.
+	(info_address_command): Update.
+	(print_variable_and_value): Update.
+	* python/py-framefilter.c (extract_sym): Update.
+	(py_print_single_arg): Update.
+	* python/py-symbol.c (sympy_str): Update.
+	(sympy_get_name): Update.
+	(sympy_get_linkage_name): Update.
+	* python/python.c (gdbpy_rbreak): Update.
+	* record-btrace.c (btrace_get_bfun_name): Update.
+	(btrace_call_history): Update.
+	* rust-lang.c (rust_print_typedef): Update.
+	* solib-frv.c (frv_fdpic_find_canonical_descriptor): Update.
+	* stabsread.c (stab_reg_to_regnum): Update.
+	(define_symbol): Update.
+	(read_enum_type): Update.
+	(common_block_end): Update.
+	(cleanup_undefined_types_1): Update.
+	(scan_file_globals): Update.
+	* stack.c (print_frame_arg): Update.
+	(print_frame_args): Update.
+	(find_frame_funname): Update.
+	(info_frame_command_core): Update.
+	(iterate_over_block_locals): Update.
+	(print_block_frame_labels): Update.
+	(do_print_variable_and_value): Update.
+	(iterate_over_block_arg_vars): Update.
+	(return_command): Update.
+	* symmisc.c (dump_symtab_1): Update.
+	(print_symbol): Update.
+	* symtab.c (eq_symbol_entry): Update.
+	(symbol_cache_dump): Update.
+	(lookup_language_this): Update.
+	(find_pc_sect_line): Update.
+	(skip_prologue_sal): Update.
+	(symbol_search::compare_search_syms): Update.
+	(treg_matches_sym_type_name): Update.
+	(search_symbols): Update.
+	(print_symbol_info): Update.
+	(rbreak_command): Update.
+	(completion_list_add_symbol): Update.
+	(find_gnu_ifunc): Update.
+	(get_symbol_address): Update.
+	(search_module_symbols): Update.
+	(info_module_subcommand): Update.
+	* symtab.h (SYMBOL_NATURAL_NAME): Remove.
+	(SYMBOL_LINKAGE_NAME): Remove.
+	(SYMBOL_DEMANGLED_NAME): Remove.
+	(SYMBOL_PRINT_NAME): Remove.
+	(SYMBOL_SEARCH_NAME): Remove.
+	* tracepoint.c (set_traceframe_context): Update.
+	(validate_actionline): Update.
+	(collection_list::collect_symbol): Update.
+	(encode_actions_1): Update.
+	(info_scope_command): Update.
+	(print_one_static_tracepoint_marker): Update.
+	* typeprint.c (typedef_hash_table::add_template_parameters): Update.
+	* valops.c (address_of_variable): Update.
+	(find_overload_match): Update.
+	(find_oload_champ): Update.
+
+2019-11-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-lang.c (ada_lookup_simple_minsym): Update.
+	(ada_collect_symbol_completion_matches): Update.
+	* ada-tasks.c (read_atcb): Update.
+	* amd64-windows-tdep.c (amd64_skip_main_prologue): Update.
+	(amd64_windows_skip_trampoline_code): Update.
+	* arm-tdep.c (skip_prologue_function): Update.
+	(arm_skip_stack_protector): Update.
+	* arm-wince-tdep.c (arm_pe_skip_trampoline_code): Update.
+	(arm_wince_skip_main_prologue): Update.
+	* ax-gdb.c (gen_expr): Update.
+	* block.c (call_site_for_pc): Update.
+	* blockframe.c (find_pc_partial_function): Update.
+	* breakpoint.c (set_breakpoint_location_function): Update.
+	* btrace.c (ftrace_print_function_name): Update.
+	(ftrace_function_switched): Update.
+	* c-valprint.c (print_unpacked_pointer): Update.
+	* coffread.c (coff_symfile_read): Update.
+	* compile/compile-c-symbols.c (convert_symbol_bmsym): Update.
+	* compile/compile-cplus-symbols.c (convert_symbol_bmsym): Update.
+	* dwarf-index-write.c (write_psymbols): Update.
+	* dwarf2loc.c (call_site_to_target_addr): Update.
+	(func_verify_no_selftailcall): Update.
+	(tailcall_dump): Update.
+	(call_site_find_chain_1): Update.
+	(dwarf_expr_reg_to_entry_parameter): Update.
+	* elfread.c (elf_gnu_ifunc_record_cache): Update.
+	* eval.c (evaluate_funcall): Update.
+	(evaluate_subexp_standard): Update.
+	(evaluate_subexp_for_sizeof): Update.
+	* expprint.c (print_subexp_standard): Update.
+	(dump_subexp_body_standard): Update.
+	* frame.c (get_prev_frame_always_1): Update.
+	* frv-tdep.c (frv_skip_main_prologue): Update.
+	* gnu-v2-abi.c (gnuv2_value_rtti_type): Update.
+	* gnu-v3-abi.c (gnuv3_rtti_type): Update.
+	(gnuv3_get_typename_from_type_info): Update.
+	(gnuv3_skip_trampoline): Update.
+	* hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Update.
+	* i386-tdep.c (i386_skip_main_prologue): Update.
+	(i386_pe_skip_trampoline_code): Update.
+	* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Update.
+	* infcall.c (get_function_name): Update.
+	* linespec.c (minsym_found): Update.
+	* linux-fork.c (info_checkpoints_command): Update.
+	* m32c-tdep.c (m32c_m16c_address_to_pointer): Update.
+	(m32c_m16c_pointer_to_address): Update.
+	* maint.c (maintenance_translate_address): Update.
+	* minsyms.c (add_minsym_to_hash_table): Update.
+	(add_minsym_to_demangled_hash_table): Update.
+	(lookup_minimal_symbol_mangled): Update.
+	(lookup_minimal_symbol_demangled): Update.
+	(lookup_minimal_symbol_linkage): Update.
+	(lookup_minimal_symbol_text): Update.
+	(lookup_minimal_symbol_by_pc_name): Update.
+	(minimal_symbol_is_less_than): Update.
+	(compact_minimal_symbols): Update.
+	(build_minimal_symbol_hash_tables): Update.
+	(find_solib_trampoline_target): Update.
+	* mips-tdep.c (mips_stub_frame_sniffer): Update.
+	(mips_skip_pic_trampoline_code): Update.
+	* msp430-tdep.c (msp430_skip_trampoline_code): Update.
+	* objc-lang.c (info_selectors_command): Update.
+	(info_classes_command): Update.
+	(find_methods): Update.
+	(find_imps): Update.
+	* p-valprint.c (pascal_val_print): Update.
+	* ppc-linux-tdep.c (powerpc_linux_in_dynsym_resolve_code): Update.
+	* ppc-sysv-tdep.c (convert_code_addr_to_desc_addr): Update.
+	* printcmd.c (build_address_symbolic): Update.
+	(info_symbol_command): Update.
+	* psymtab.c (psymbol_name_matches): Update.
+	(match_partial_symbol): Update.
+	(lookup_partial_symbol): Update.
+	(print_partial_symbols): Update.
+	(sort_pst_symbols): Update.
+	(maintenance_check_psymtabs): Update.
+	* python/py-framefilter.c (py_print_frame): Update.
+	* python/python.c (gdbpy_rbreak): Update.
+	* record-btrace.c (btrace_get_bfun_name): Update.
+	(btrace_call_history): Update.
+	* rs6000-tdep.c (rs6000_skip_main_prologue): Update.
+	(rs6000_skip_trampoline_code): Update.
+	* sol-thread.c (info_cb): Update.
+	* stabsread.c (scan_file_globals): Update.
+	* stack.c (find_frame_funname): Update.
+	(info_frame_command_core): Update.
+	* symmisc.c (dump_msymbols): Update.
+	* symtab.c (symbol_natural_name): Rename to..,
+	(general_symbol_info::natural_name): ...this.
+	(symbol_demangled_name): Rename to...
+	(general_symbol_info::demangled_name): ...this.
+	(symbol_search_name): Rename to...
+	(general_symbol_info::search_name): ...this.
+	(symbol_matches_search_name): Update.
+	(find_pc_sect_line): Update.
+	(skip_prologue_sal): Update.
+	(search_symbols): Update.
+	(print_msymbol_info): Update.
+	(rbreak_command): Update.
+	(completion_list_add_msymbol): Update.
+	(completion_list_objc_symbol): Update.
+	(get_msymbol_address): Update.
+	* symtab.h (struct general_symbol_info): Add member functions
+	natural_name (), linkage_name (), print_name (), demangled_name (),
+	and search_name ().
+	(SYMBOL_NATURAL_NAME): Update.
+	(symbol_natural_name): Move to a member function on general_symbol_info.
+	(SYMBOL_DEMANGLED_NAME): Update.
+	(symbol_demangled_name): Move to a member function on
+	general_symbol_info.
+	(SYMBOL_SEARCH_NAME): Update.
+	(symbol_search_name): Move to a member function on general_symbol_info.
+	(MSYMBOL_NATURAL_NAME): Remove.
+	(MSYMBOL_LINKAGE_NAME): Remove.
+	(MSYMBOL_PRINT_NAME): Remove.
+	(MSYMBOL_DEMANGLED_NAME): Remove.
+	(MSYMBOL_SEARCH_NAME): Remove.
+	* x86-tdep.c (x86_in_indirect_branch_thunk): Update.
+
+2019-11-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (create_demangled_names_hash): Use per_bfd->
+	minimal_symbol_count for computing the initial size, if greater
+	than our default size.
+
+2019-11-22  Tom de Vries  <tdevries@suse.de>
+
+	* contrib/words.sh: Improve words extraction.
+
+2019-11-22  Tom de Vries  <tdevries@suse.de>
+
+	* contrib/words.sh: Combine sed invocations.
+
+2019-11-21  Christian Biesinger  <cbiesinger@google.com>
+
+	* Makefile.in: Update.
+	* demangle.c: Rename to...
+	* gdb-demangle.c: ..this.
+	(is_cplus_marker): Change return type to bool.
+	(_initialize_demangler): Rename to...
+	(_initialize_gdb_demangle): ...this.
+	* gdb-demangle.h (is_cplus_marker): Change return type to bool.
+	* symtab.h (demangle): Remove declaration; instead include
+	gdb-demangle.h.
+
+2019-11-21  Tom Tromey  <tromey@adacore.com>
+
+	* gdbsupport/format.c (format_pieces): Parse %I64d.
+	* unittests/format_pieces-selftests.c (test_windows_formats): New
+	function.
+	(run_tests): Call it.
+
+2019-11-21  Peeter Joot  <peeter.joot@lzlabs.com>
+
+	Byte reverse display of variables with DW_END_big, DW_END_little
+	(DW_AT_endianity) dwarf attributes if different than the native
+	byte order.
+	* ada-lang.c (ada_value_binop):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* ada-valprint.c (printstr):
+	(ada_val_print_string):
+	* ada-lang.c (value_pointer):
+	(ada_value_binop):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* c-lang.c (c_get_string):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* c-valprint.c (c_val_print_array):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* cp-valprint.c (cp_print_class_member):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* dwarf2loc.c (rw_pieced_value):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* dwarf2read.c (read_base_type): Handle DW_END_big,
+	DW_END_little
+	* f-lang.c (f_get_encoding):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* findvar.c (default_read_var_value):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* gdbtypes.c (check_types_equal):
+	Require matching TYPE_ENDIANITY_NOT_DEFAULT if set.
+	(recursive_dump_type): Print TYPE_ENDIANITY_BIG,
+	and TYPE_ENDIANITY_LITTLE if set.
+	(type_byte_order): new function.
+	* gdbtypes.h (TYPE_ENDIANITY_NOT_DEFAULT): New macro.
+	(struct main_type) <flag_endianity_not_default>:
+	New field.
+	(type_byte_order): New function.
+	* infcmd.c (default_print_one_register_info):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* p-lang.c (pascal_printstr):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* p-valprint.c (pascal_val_print):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* printcmd.c (print_scalar_formatted):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* solib-darwin.c (darwin_current_sos):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* solib-svr4.c (solib_svr4_r_ldsomap):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* stap-probe.c (stap_modify_semaphore):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* target-float.c (target_float_same_format_p):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* valarith.c (scalar_binop):
+	(value_bit_index):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* valops.c (value_cast):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* valprint.c (generic_emit_char):
+	(generic_printstr):
+	(val_print_string):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* value.c (unpack_long):
+	(unpack_bits_as_long):
+	(unpack_value_bitfield):
+	(modify_field):
+	(pack_long):
+	(pack_unsigned_long):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* findvar.c (unsigned_pointer_to_address):
+	(signed_pointer_to_address):
+	(unsigned_address_to_pointer):
+	(address_to_signed_pointer):
+	(default_read_var_value):
+	(default_value_from_register):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* gnu-v3-abi.c (gnuv3_make_method_ptr):
+	Use type_byte_order instead of gdbarch_byte_order.
+	* riscv-tdep.c (riscv_print_one_register_info):
+	Use type_byte_order instead of gdbarch_byte_order.
+
+2019-11-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* top.c (current_ui_gdb_stdout_ptr): Spell out by hand.
+	(current_ui_gdb_stdin_ptr): Likewise.
+	(current_ui_gdb_stderr_ptr): Likewise.
+	(current_ui_gdb_stdlog_ptr): Likewise.
+	(current_ui_current_uiout_ptr): Likewise.
+	(gen_ret_current_ui_field_ptr): Remove.
+
+2019-11-21  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/24956
+	* cli/cli-script.c (execute_control_command): Only switch to
+	INTERP_CONSOLE's ui_out when INTERP_MI is active.
+
+2019-11-19  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_partial_win_by_name): Move from tui-data.c.
+	Now static.  Change type of "name".
+	(tui_set_win_height_command): Don't copy "arg".
+	* tui/tui-data.h (tui_partial_win_by_name): Don't declare.
+	* tui/tui-data.c (tui_partial_win_by_name): Move to tui-win.c.
+
+2019-11-19  Ali Tamur <tamur@google.com>
+
+	* dwarf2read.c (dw2_get_file_names_reader): Replace "if (attr)" with
+	"if (attr != nullptr)".
+	(dwarf2_find_base_address): Likewise.
+	(dwarf2_build_include_psymtabs): Likewise.
+	(read_cutu_die_from_dwo): Likewise.
+	(read_func_scope): Likewise.
+	(read_call_site_scope): Likewise.
+	(dwarf2_get_pc_bounds): Likewise.
+	(dwarf2_record_block_ranges): Likewise.
+	(dwarf2_add_field): Likewise.
+	(dwarf2_add_member_fn): Likewise.
+	(read_structure_type): Likewise.
+	(read_enumeration_type): Likewise.
+	(read_array_type): Likewise.
+	(read_array_order): Likewise.
+	(read_set_type): Likewise.
+	(read_common_block): Likewise.
+	(read_tag_reference_type): Likewise.
+	(read_tag_string_type): Likewise.
+	(read_subroutine_type): Likewise.
+	(read_base_type): Likewise.
+	(read_subrange_type): Likewise.
+	(new_symbol): Likewise.
+	(prepare_one_comp_unit): Likewise.
+
+2019-11-19  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat_target::attach): Include GetLastError
+	result in error when DebugActiveProcess fails.
+
+2019-11-18  Sergio Durigan Junior  <sergiodj@redhat.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	https://bugzilla.redhat.com/show_bug.cgi?id=1765117
+	* target.c (target_stack::push): Call 'unpush' if there's a
+	target on top of the stack.
+
+2019-11-18  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* python/py-block.c (blpy_dealloc): Call tp_free.
+	(blpy_block_syms_dealloc): Likewise.
+	* python/py-finishbreakpoint.c (bpfinishpy_dealloc): Likewise.
+	* python/py-inferior.c (infpy_dealloc): Likewise.
+	* python/py-lazy-string.c (stpy_dealloc): Likewise.
+	* python/py-linetable.c (ltpy_iterator_dealloc): Likewise.
+	* python/py-symbol.c (sympy_dealloc): Likewise.
+	* python/py-symtab.c (stpy_dealloc): Likewise.
+	* python/py-type.c (typy_iterator_dealloc): Likewise.
+
+2019-11-18  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.h (struct symbol) <owner>: Initialize explicitly in the
+	constructor instead of using a class initializer.
+
+2019-11-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* Makefile.in: Replace {posix,mingw}-strerror.c with safe-strerror.c.
+	* configure: Regenerate.
+	* configure.ac: Don't source common.host.
+	* gdbsupport/common.host: Remove.
+	* gdbsupport/mingw-strerror.c: Remove.
+	* gdbsupport/posix-strerror.c: Rename to...
+	* gdbsupport/safe-strerror.c: ...this.
+
+2019-11-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* maint.c (scoped_command_stats::print_time): Use localtime_r
+	instead of localtime (provided through gnulib if necessary).
+	* nat/linux-osdata.c (time_from_time_t): Use ctime_r instead
+	of ctime.
+
+2019-11-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* gdbsupport/common-defs.h: Include time.h before pathmax.h to
+	avoid compile errors.
+
+2019-11-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* gdbsupport/common.m4: No longer check for strerror_r.
+	* gdbsupport/posix-strerror.c (safe_strerror): Always call the
+	POSIX version of strerror_r, now that gnulib provides it if
+	necessary.
+
+2019-11-14  Christian Biesinger  <cbiesinger@google.com>
+
+	* README (`configure' options): Update.
+
+2019-11-14  Tom Tromey  <tromey@adacore.com>
+
+	* eval.c (evaluate_subexp_standard) <BINOP_ASSIGN>: Do not pass an
+	expected type for the RHS if the LHS is a convenience variable.
+
+2019-11-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* unittests/vec-utils-selftests.c (unordered_remove_tests::obj):
+	Provide explicit default and copy constructor.
+
+2019-11-14  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* python/py-finishbreakpoint.c (gdbpy_breakpoint_created):
+	only call Py_INCREF (newbp) in the bppy_pending_object case.
+
+2019-11-13  Tom Tromey  <tromey@adacore.com>
+
+	PR build/25182:
+	* psympriv.h (partial_symbol): Remove static assert.
+	* symtab.h (general_symbol_info, symbol): Remove static assert.
+
+2019-11-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbsupport/format.c (format_pieces::format_pieces): Support
+	printf 'z' size modifier.
+	* gdbsupport/format.h (enum argclass): Add size_t_arg.
+	* printcmd.c (ui_printf):  Handle size_t_arg.
+	* ui-out.c (ui_out::vmessage): Likewise.
+	* unittests/format_pieces-selftests.c (test_format_int_sizes): New
+	function.
+	(run_tests): Call test_format_int_sizes.
+
+2019-11-12  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-exp.y (write_ambiguous_var): Update.
+	* buildsym.c (add_symbol_to_list): Update.
+	* dwarf2read.c (read_variable): Update.
+	(new_symbol): Update.
+	* jit.c (finalize_symtab): Update.
+	* language.c (language_alloc_type_symbol): Update.
+	* symtab.c (fixup_symbol_section): Update.
+	(initialize_objfile_symbol_1): Move code to...
+	(initialize_objfile_symbol): ...here. Remove now-unnecessary memset.
+	(allocate_symbol): Update.
+	(allocate_template_symbol): Update.
+	(get_symbol_address): Update.
+	* symtab.h (struct symbol): Inherit from general_symbol_info instead
+	of having as a field, and add a constructor.
+	(SYMBOL_VALUE): Update.
+	(SYMBOL_VALUE_ADDRESS): Update.
+	(SET_SYMBOL_VALUE_ADDRESS): Update.
+	(SYMBOL_VALUE_BYTES): Update.
+	(SYMBOL_VALUE_COMMON_BLOCK): Update.
+	(SYMBOL_BLOCK_VALUE): Update.
+	(SYMBOL_VALUE_CHAIN): Update.
+	(SYMBOL_LANGUAGE): Update.
+	(SYMBOL_SECTION): Update.
+	(SYMBOL_OBJ_SECTION): Update.
+	(SYMBOL_SET_LANGUAGE): Update.
+	(SYMBOL_SET_LINKAGE_NAME): Update.
+	(SYMBOL_SET_NAMES): Update.
+	(SYMBOL_NATURAL_NAME): Update.
+	(SYMBOL_LINKAGE_NAME): Update.
+	(SYMBOL_DEMANGLED_NAME): Update.
+	(SYMBOL_SEARCH_NAME): Update.
+	(SYMBOL_MATCHES_SEARCH_NAME): Update.
+	(struct symbol): Update.
+	(struct template_symbol): Update.
+	(struct rust_vtable_symbol): Update.
+	* xcoffread.c (SYMBOL_DUP): Update.
+
+2019-11-12  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_layout): Set current_layout.
+	(show_source_disasm_command, show_data)
+	(show_source_or_disasm_and_command): Don't set current_layout.
+
+2019-11-12  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (_initialize_tui_layout): Move to end.
+
+2019-11-12  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (resize_message): New global.
+	(show_tui_resize_message): New function.
+	(tui_async_resize_screen): Print message if requested.
+	(_initialize_tui_win): Add tui-resize-message setting.
+	* NEWS: Add entry for new commands.
+
+2019-11-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_initialize_readline): Add new bindable readline
+	functions.
+
+2019-11-11  Christian Biesinger  <cbiesinger@google.com>
+
+	* nat/linux-osdata.c (user_from_uid): Use getpwuid_r.
+
+2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-symbol.c (gdbpy_lookup_static_symbols): New
+	function.
+	* python/python-internal.h (gdbpy_lookup_static_symbols):
+	Declare new function.
+	* python/python.c (python_GdbMethods): Add
+	gdb.lookup_static_symbols method.
+	* NEWS: Mention gdb.lookup_static_symbols.
+
+2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-symbol.c (gdbpy_lookup_static_symbol): Lookup in
+	static block of current object file first.  Also fix typo in
+	header comment.
+
+2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* stack.c (set_last_displayed_sal): Delete.
+	(last_displayed_sal_valid): Delete.
+	(last_displayed_pspace): Delete.
+	(last_displayed_addr): Delete.
+	(last_displayed_symtab): Delete.
+	(last_displayed_line): Delete.
+	(class last_displayed_symtab_info_type): New.
+	(last_displayed_symtab_info): New static global variable.
+	(print_frame_info): Call methods on last_displayed_symtab_info.
+	(clear_last_displayed_sal): Update header comment, and make use of
+	last_displayed_symtab_info.
+	(last_displayed_sal_is_valid): Likewise.
+	(get_last_displayed_pspace): Likewise.
+	(get_last_displayed_addr): Likewise.
+	(get_last_displayed_symtab): Likewise.
+	(get_last_displayed_line): Likewise.
+	(get_last_displayed_sal): Likewise.
+	* stack.h (clear_last_displayed_sal): Update header comment.
+	(last_displayed_sal_is_valid): Likewise.
+	(get_last_displayed_pspace): Likewise.
+	(get_last_displayed_addr): Likewise.
+	(get_last_displayed_symtab): Likewise.
+	(get_last_displayed_line): Likewise.
+	(get_last_displayed_sal): Likewise.
+
+2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* stack.c (frame_show_address): Convert return type to bool.
+	* stack.h (frame_show_address): Likewise, and update header
+	comment.
+
+2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add new file to the list.
+	* unittests/vec-utils-selftests.c: New file.
+	* gdbsupport/gdb_vecs.h (unordered_remove): Avoid self move assign.
+
+2019-11-10  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_unhighlight_win): Use can_box.
+	(tui_highlight_win): Likewise.
+	(tui_win_info::check_and_display_highlight_if_needed): Likewise.
+	* tui/tui-data.h (struct tui_win_info) <can_highlight>: Remove.
+	* tui/tui-command.h (struct tui_cmd_window) <tui_cmd_window>:
+	Don't set can_highlight.
+
+2019-11-10  Tom Tromey  <tom@tromey.com>
+
+	* cli/cli-style.h (class cli_style_option) <cli_style_option>:
+	Remove unused declaration.
+
+2019-11-08  Tom Tromey  <tromey@adacore.com>
+
+	* top.c (read_command_file): Update.
+	(command_line_input): Make return type const.
+	* python/py-gdb-readline.c: Update.
+	* linespec.c (decode_line_2): Update.
+	* defs.h (command_line_input): Make return type const.
+	* cli/cli-script.c (read_next_line): Make return type const.
+	* ada-lang.c (get_selections): Update.
+
+2019-11-06  Christian Biesinger  <cbiesinger@google.com>
+
+	* linux-tdep.c (linux_info_proc): Use strtok_r instead of strtok.
+	* mi/mi-main.c (output_cores): Likewise.
+	* nat/linux-osdata.c (linux_xfer_osdata_cpus): Likewise.
+	(linux_xfer_osdata_modules): Likewise.
+	* remote.c (register_remote_support_xml): Likewise.
+	* sparc64-tdep.c (adi_is_addr_mapped): Likewise.
+	* xml-syscall.c (syscall_create_syscall_desc): Likewise.
+
+2019-11-06  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-interp.c: Don't include readline.h.
+	* tui/tui-hooks.c: Don't include readline.h.
+	* symmisc.c: Include tilde.h, not readline.h.
+	* symfile.c: Include tilde.h, not readline.h.
+	* source.c: Include tilde.h, not readline.h.
+	* solib.c: Include tilde.h, not readline.h.
+	* psymtab.c: Include tilde.h, not readline.h.
+	* exec.c: Include tilde.h, not readline.h.
+	* corelow.c: Include tilde.h, not readline.h.
+	* cli/cli-dump.c: Include tilde.h, not readline.h.
+	* cli/cli-cmds.c: Don't include readline.h.
+
+2019-11-05  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-disasm.c (struct tui_asm_line) <addr_size>: New member.
+	(tui_disassemble): Set addr_size.
+	(tui_disasm_window::set_contents): Use addr_size.
+
+2019-11-05  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_language_defn): Update.
+	* python/py-value.c (valpy_string): Call c_get_string.
+	* p-lang.c (pascal_language_defn): Update.
+	* opencl-lang.c (opencl_language_defn): Update.
+	* objc-lang.c (objc_language_defn): Update.
+	* m2-lang.c (m2_language_defn): Update.
+	* language.c (unknown_language_defn, auto_language_defn): Update.
+	(default_get_string): Remove.
+	* guile/scm-value.c (gdbscm_value_to_string): Use c_get_string.
+	* go-lang.c (go_language_defn): Update.
+	* f-lang.c (f_language_defn): Update.
+	* d-lang.c (d_language_defn): Update.
+	* c-lang.c (c_language_defn, cplus_language_defn)
+	(asm_language_defn, minimal_language_defn): Update.
+	* ada-lang.c (ada_language_defn): Update.
+	* language.h (struct language_defn) <la_get_string>: Remove.
+	(LA_GET_STRING): Remove.
+	(default_get_string): Don't declare.
+
+2019-11-05  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.h (struct tui_source_window): Inline
+	constructor.  Remove destructor.
+	<style_changed, m_observable>: Move to superclass.
+	* tui/tui-winsource.h (tui_copy_source_line): Declare.
+	(struct tui_source_window_base): Move private members to end.
+	<style_changed, m_observable>: Move from tui_source_window.
+	* tui/tui-winsource.c (tui_copy_source_line): Move from
+	tui-source.c.  Rename from copy_source_line.  Add special handling
+	for negative line number.
+	(tui_source_window_base::style_changed): Move from
+	tui_source_window.
+	(tui_source_window_base): Register observer.
+	(~tui_source_window_base): New.
+	* tui/tui-source.c (copy_source_line): Move to tui-winsource.c;
+	rename.
+	(tui_source_window::set_contents): Use tui_copy_source_line.
+	(tui_source_window::tui_source_window): Move to tui-source.h.
+	(tui_source_window::~tui_source_window): Remove.
+	(tui_source_window::style_changed): Move to superclass.
+	* tui/tui-disasm.c (tui_disassemble): Create string file with
+	styling, when possible.  Add "addr_size" parameter.
+	(tui_disasm_window::set_contents): Use tui_copy_source_line.
+	Don't compute maximum size.
+	(len_without_escapes): New function
+
+2019-11-05  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_element) <line>: Now a
+	std::string.
+	* tui/tui-winsource.c (tui_show_source_line): Update.
+	* tui/tui-source.c (tui_source_window::set_contents): Update.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
+
+2019-11-05  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.h (gdb_static_assert): Put && operator at the beginning
+	of the line instead of the end.
+
+2019-11-04  Christian Biesinger  <cbiesinger@google.com>
+
+	* psympriv.h: Add static_asserts for sizeof (general_symbol_info)
+	and sizeof (symbol).
+	* symtab.h: Add a static_assert for sizeof (partial_symbol).
+
+2019-11-04  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* NEWS (Changes since GDB 8.3): Document Solaris 10 removal.
+	* configure.host: Mark *-*-solaris2.10* obsolete.
+	* configure.tgt: Mark Solaris < 11 obsolete.
+	* MAINTAINERS (Target Instruction Set Architectures) <sparc>:
+	Update target triplet.
+
+2019-11-01  Tom Tromey  <tromey@adacore.com>
+
+	* utils.c (print_sys_errmsg): Simplify.
+
+2019-11-01  Tom Tromey  <tromey@adacore.com>
+
+	* gdbsupport/mingw-strerror.c (safe_strerror): Constify result.
+
+2019-11-01  Christian Biesinger  <cbiesinger@google.com>
+
+	* configure: Regenerate.
+	* configure.ac: Remove check for strerror_r.
+	* gdbsupport/common.m4: Check for strerror_r.
+
+2019-11-01  Luis Machado  <luis.machado@linaro.org>
+
+	PR gdb/25124
+
+	* arm-tdep.c (arm_per_objfile): Rename to ...
+	(arm_per_bfd): ... this.
+	(arm_objfile_data_key): Rename to ...
+	(arm_bfd_data_key): ... this.
+	(arm_find_mapping_symbol): Adjust access to new bfd_key-based
+	data.
+	(arm_record_special_symbol): Likewise.
+
+2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-typeprint.c (ada_print_typedef): Don't print newline at the
+	end.
+	* c-typeprint.c (c_print_typedef): Likewise.
+	* f-typeprint.c (f_print_typedef): Likewise.
+	* m2-typeprint.c (m2_print_typedef): Likewise.
+	* p-typeprint.c (pascal_print_typedef): Likewise.
+	* rust-lang.c (rust_print_typedef): Likewise.
+	* symtab.c (print_symbol_info): Print a newline after calling
+	typedef_print.
+
+2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* symtab.c (info_module_cmdlist): New variable.
+	(info_module_command): New function.
+	(search_module_symbols): New function.
+	(info_module_subcommand): New function.
+	(struct info_modules_var_func_options): New struct.
+	(info_modules_var_func_options_defs): New variable.
+	(make_info_modules_var_func_options_def_group): New function.
+	(info_module_functions_command): New function.
+	(info_module_variables_command): New function.
+	(info_module_var_func_command_completer): New function.
+	(_initialize_symtab): Register new 'info module functions' and
+	'info module variables' commands.
+	* symtab.h (typedef symbol_search_in_module): New typedef.
+	(search_module_symbols): Declare new function.
+	* NEWS: Mention new commands.
+
+2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (dw2_symtab_iter_next): Handle MODULE_DOMAIN.
+	(dw2_expand_marked_cus): Handle MODULES_DOMAIN.
+	(dw2_debug_names_iterator::next): Handle MODULE_DOMAIN and
+	MODULES_DOMAIN.
+	(scan_partial_symbols): Only create partial module symbols for non
+	declarations.
+	* psymtab.c (recursively_search_psymtabs): Handle MODULE_DOMAIN
+	and MODULES_DOMAIN.
+	* symtab.c (search_domain_name): Likewise.
+	(search_symbols): Likewise.
+	(print_symbol_info): Likewise.
+	(symtab_symbol_info): Likewise.
+	(info_modules_command): New function.
+	(_initialize_symtab): Register 'info modules' command.
+	* symtab.h (enum search_domain): Add MODULES_DOMAIN.
+	* NEWS: Mention new 'info modules' command.
+
+2019-10-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Mention $_gdb_setting, $_gdb_setting_str, $_gdb_maint_setting
+	and $_gdb_maint_setting_str.
+
+2019-10-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-cmds.c (setting_cmd, value_from_setting)
+	(gdb_setting_internal_fn, gdb_maint_setting_internal_fn)
+	(str_value_from_setting, gdb_setting_str_internal_fn)
+	(gdb_maint_setting_str_internal_fn): New functions.
+	(_initialize_cli_cmds): Define the new convenience functions.
+	* cli/cli-setshow.h (get_setshow_command_value_string): Constify.
+	* cli/cli-setshow.c (get_setshow_command_value_string): Constify.
+
+2019-10-31  Christian Biesinger  <cbiesinger@google.com>
+
+	* agent.c (set_can_use_agent): When the setting is turned on,
+	look up agent symbols if we don't have them yet.
+	(agent_new_objfile): Don't look up agent symbols when the agent
+	setting is off.
+
+2019-10-31  Christian Biesinger  <cbiesinger@google.com>
+
+	* config.in: Regenerate.
+
+2019-10-31  Christian Biesinger  <cbiesinger@google.com>
+
+	* configure: Regenerate.
+	* configure.ac: Check for strerror_r.
+	* gdbsupport/common-utils.h (safe_strerror): Change return value
+	to const char * and document that this function is now threadsafe.
+	* gdbsupport/posix-strerror.c (safe_strerror): Make buf
+	thread_local and call strerror_r, if available.
+	* utils.c (perror_string): Update.
+	(print_sys_errmsg): Update.
+
+2019-10-31  Luis Machado  <luis.machado@linaro.org>
+
+	* arm-tdep.c (arm_exidx_data_key): Use bfd_key instead of
+	objfile_key.
+	(arm_exidx_new_objfile): Adjust to use objfile->obfd instead of
+	objfile to fetch per-bfd data.
+	(arm_find_exidx_entry): Likewise.
+
+2019-10-31  Christian Biesinger  <cbiesinger@google.com>
+
+	* gdbsupport/agent.c (debug_agent): Change type to bool.
+	(use_agent): Likewise.
+	(all_agent_symbols_look_up): Likewise.
+	(agent_loaded_p): Change return value to bool.
+	(agent_look_up_symbols): Update.
+	(agent_capability_check): Change return value to bool.
+	* gdbsupport/agent.h (agent_loaded_p): Likewise.
+	(debug_agent): Change type to bool.
+	(use_agent): Likewise.
+	(agent_capability_check): Change return value to bool.
+
+2019-10-30  Christian Biesinger  <cbiesinger@google.com>
+
+	* minsyms.c (clear_minimal_symbol_hash_tables): New function.
+	(build_minimal_symbol_hash_tables): Code to clear the table moved
+	to clear_minimal_symbol_hash_tables.
+	(minimal_symbol_reader::install): Call clear_minimal_symbol_hash_tables
+	when needed.
+
+2019-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infcmd.c: Remove includes.
+	* infrun.c: Remove includes.
+
+2019-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* ada-lang.h (GROW_VECT): Move to ada-lang.c.
+	(grow_vect): Remove declaration.
+	(ada_type_of_array): Remove declaration.
+	(ada_update_initial_language): Remove declaration.
+	(ada_fold_name): Remove declaration.
+	(ada_fill_in_ada_prototype): Remove declaration.
+	(user_select_syms): Remove declaration.
+	(get_selections): Remove declaration.
+	(ada_tag_type): Remove declaration.
+	(ada_value_tag): Remove declaration.
+	(ada_is_others_clause): Remove declaration.
+	(ada_in_variant): Remove declaration.
+	(ada_value_struct_elt): Remove declaration.
+	(ada_attribute_name): Remove declaration.
+	(ada_system_address_type): Remove declaration.
+	* ada-lang.c (ada_watch_location_expression): Make static.
+	(GROW_VECT): Move here from ada-lang.h.
+	(grow_vect): Make static.
+	(ada_update_initial_language): Make static.
+	(ada_fold_name): Make static.
+	(ada_type_of_array): Make static.
+	(encoded_ordered_before): Move up.
+	(sort_choices): Move up.
+	(print_signatures): Move up.
+	(ada_print_symbol_signature): Move up.
+	(get_selections): Move up and make static.
+	(user_select_syms): Move up and make static.
+	(ada_value_struct_elt): Move up and make static.
+	(ada_tag_type): Make static.
+	(ada_value_tag): Make static.
+	(ada_is_others_clause): Make static.
+	(ada_in_variant): Make static.
+	(ada_attribute_name): Make static.
+
+2019-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* ada-lang.c: Remove includes.
+	* ada-typeprint.c: Remove includes.
+	* ada-valprint.c: Remove includes.
+
+2019-10-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* addrmap.c: Add static assertions of type size, moved from
+	_initialize_addrmap.
+	(_initialize_addrmap): Remove.
+
+2019-10-29  Christian Biesinger  <cbiesinger@google.com>
+
+	* coffread.c (record_minimal_symbol): Update.
+	(process_coff_symbol): Update.
+	* dbxread.c (read_dbx_symtab): Update.
+	* dwarf2read.c (add_partial_symbol): Update.
+	(fixup_go_packaging): Update.
+	(load_partial_dies): Update.
+	(new_symbol): Update.
+	* elfread.c (record_minimal_symbol): Change signature to use
+	gdb::string_view instead of name+len.
+	(elf_symtab_read): Update.
+	(elf_rel_plt_read): Update.
+	* mdebugread.c (parse_partial_symbols): Update.
+	(handle_psymbol_enumerators): Update.
+	(new_symbol): Update.
+	* minsyms.c (minimal_symbol_reader::record_full): Change signature
+	to use gdb::string_view instead of name+len.
+	* minsyms.h (class minimal_symbol_reader) <record_full>: Likewise.
+	* psympriv.h (add_psymbol_to_list): Likewise.
+	* psymtab.c (add_psymbol_to_bcache): Likewise.
+	(add_psymbol_to_list): Likewise.
+	* stabsread.c (define_symbol): Update.
+	* symtab.c (symbol_set_names): Change signature to use gdb::string_view.
+	* symtab.h (SYMBOL_SET_NAMES): Likewise.
+	(symbol_set_names): Likewise.
+	* xcoffread.c (scan_xcoff_symtab): Update.
+
+2019-10-29  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.h (symbol_set_names): Document that copy_name must be
+	set to true for non-nullterminated strings.
+	* symtab.c (symbol_set_names): Only make a nullterminated copy of
+	linkage_name if the entry was not found and we need to demangle.
+
+2019-10-29  Christian Biesinger  <cbiesinger@google.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add gdb_binary_search.h.
+	* dwarf2-frame.c (bsearch_fde_cmp): Update.
+	(dwarf2_frame_find_fde): Replace bsearch with gdb::binary_search.
+	* gdbsupport/gdb_binary_search.h: New file.
+
+2019-10-29  Christian Biesinger  <cbiesinger@google.com>
+
+	* NEWS: Mention new --with-system-gdbinit-dir option.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: Add new option --with-system-gdbinit-dir.
+	* extension.c (get_ext_lang_of_file): Return extension_language_gdb
+	for a ".gdb" suffix.
+	* main.c (get_init_files): Change system_gdbinit argument to
+	a vector and return the files in SYSTEM_GDBINIT_DIR in
+	addition to SYSTEM_GDBINIT.
+	(captured_main_1): Update.
+	(print_gdb_help): Update.
+	* top.c (print_gdb_configuration): Also print the value of
+	SYSTEM_GDBINIT_DIR.
+
+2019-10-28  Christian Biesinger  <cbiesinger@google.com>
+
+	* gdbsupport/common-utils.h (startswith): Add an overloaded version
+	that takes gdb::string_view arguments.
+
+2019-10-26  Tom de Vries  <tdevries@suse.de>
+
+	* aarch64-linux-tdep.c: Fix typos in comments.
+	* aarch64-tdep.c: Same.
+	* ada-lang.c: Same.
+	* amd64-nat.c: Same.
+	* arc-tdep.c: Same.
+	* arch/aarch64-insn.c: Same.
+	* block.c: Same.
+	* breakpoint.h: Same.
+	* btrace.h: Same.
+	* c-varobj.c: Same.
+	* cli/cli-decode.c: Same.
+	* cli/cli-script.c: Same.
+	* cli/cli-utils.h: Same.
+	* coff-pe-read.c: Same.
+	* coffread.c: Same.
+	* compile/compile-cplus-symbols.c: Same.
+	* compile/compile-object-run.c: Same.
+	* completer.c: Same.
+	* corelow.c: Same.
+	* cp-support.c: Same.
+	* demangle.c: Same.
+	* dwarf-index-write.c: Same.
+	* dwarf2-frame.c: Same.
+	* dwarf2-frame.h: Same.
+	* eval.c: Same.
+	* frame-base.h: Same.
+	* frame.h: Same.
+	* gdbcmd.h: Same.
+	* gdbtypes.h: Same.
+	* gnu-nat.c: Same.
+	* guile/scm-objfile.c: Same.
+	* i386-tdep.c: Same.
+	* i386-tdep.h: Same.
+	* infcall.c: Same.
+	* infcall.h: Same.
+	* linux-nat.c: Same.
+	* m68k-tdep.c: Same.
+	* macroexp.c: Same.
+	* memattr.c: Same.
+	* mi/mi-cmd-disas.c: Same.
+	* mi/mi-getopt.h: Same.
+	* mi/mi-main.c: Same.
+	* minsyms.c: Same.
+	* nat/aarch64-sve-linux-sigcontext.h: Same.
+	* objfiles.h: Same.
+	* ppc-linux-nat.c: Same.
+	* ppc-linux-tdep.c: Same.
+	* ppc-tdep.h: Same.
+	* progspace.h: Same.
+	* prologue-value.h: Same.
+	* python/py-evtregistry.c: Same.
+	* python/py-instruction.h: Same.
+	* record-btrace.c: Same.
+	* record-full.c: Same.
+	* remote.c: Same.
+	* rs6000-tdep.c: Same.
+	* ser-tcp.c: Same.
+	* sol-thread.c: Same.
+	* sparc-sol2-tdep.c: Same.
+	* sparc64-tdep.c: Same.
+	* stabsread.c: Same.
+	* symfile.c: Same.
+	* symtab.h: Same.
+	* target.c: Same.
+	* tracepoint.c: Same.
+	* tui/tui-data.h: Same.
+	* tui/tui-io.c: Same.
+	* tui/tui-win.c: Same.
+	* tui/tui.c: Same.
+	* unittests/rsp-low-selftests.c: Same.
+	* user-regs.h: Same.
+	* utils.c: Same.
+	* utils.h: Same.
+	* valarith.c: Same.
+	* valops.c: Same.
+	* valprint.c: Same.
+	* valprint.h: Same.
+	* value.c: Same.
+	* value.h: Same.
+	* varobj.c: Same.
+	* x86-nat.h: Same.
+	* xtensa-tdep.c: Same.
+
+2019-10-25  Ali Tamur <tamur@google.com>
+
+	* charset.c (find_charset_names): Reflect API change.
+
+2019-10-25  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (struct demangled_name_entry): Change demangled name
+	to a unique_xmalloc_ptr<char>, now that we don't allocate it as
+	part of the struct anymore.
+	(symbol_set_names): No longer obstack allocate + copy the demangled
+	name, just store the allocated name from bfd.
+
+2019-10-25  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2-frame.c (dwarf2_cie_table): Now a typedef.
+	(bsearch_cie_cmp, add_cie): Remove.
+	(find_cie): Reimplement.
+	(decode_frame_entry_1, decode_frame_entry): Change type.  Update.
+	(dwarf2_build_frame_info): Update.
+
+2019-10-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gdb/25126
+	* symfile.c (reread_symbols): Call forget_cached_source_info to
+	clear the stale source cache.
+
+2019-10-24  Christian Biesinger  <cbiesinger@google.com>
+
+	* configure: Regenerate.
+	* configure.ac: Remove code that sets python_has_threads.
+
+2019-10-24  Christian Biesinger  <cbiesinger@google.com>
+
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: Remove the code that uses sed to get the python
+	version and defines HAVE_LIBPYTHON2_6 / HAVE_LIBPYTHON2_7.
+
+2019-10-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-progspace.c (pspy_block_for_pc): Return None for all
+	error paths.
+
+2019-10-23  Tom Tromey  <tom@tromey.com>
+
+	* arc-tdep.c: Remove ".." from include.
+	* frv-tdep.c: Remove ".." from include.
+	* lm32-tdep.c: Remove ".." from include.
+	* microblaze-tdep.c: Remove ".." from include.
+	* or1k-tdep.h: Remove ".." from include.
+	* s12z-tdep.c: Remove ".." from include.
+	* Makefile.in (OPCODES_CFLAGS): Add comment.
+	(TOP_CFLAGS): New variable.
+	(INTERNAL_CFLAGS_BASE): Add TOP_CFLAGS.
+
+2019-10-23  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in (READLINE_DIR): Update.
+
+2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infcall.c (call_function_by_hand_dummy): Fix the function
+	comment.  And extract out a code section into...
+	(reserve_stack_space): ...this new function.
+
+2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infcall.c (value_arg_coerce): Remove an unused parameter.
+	(call_function_by_hand_dummy): Update the call to
+	'value_arg_coerce'.
+
+2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infcall.c (call_function_by_hand_dummy): Refactor.
+
+2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* MAINTAINERS (Write After Approval): Add Tankut Baris Aktemur.
+
+2019-10-23  Tom Tromey  <tom@tromey.com>
+
+	* configure: Rebuild.
+	* configure.ac: Don't check for sigprocmask.
+	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for sigprocmask.
+
+2019-10-23  Tom Tromey  <tom@tromey.com>
+
+	* configure: Rebuild.
+	* acinclude.m4: Use m4_include, not sinclude.
+
+2019-10-23  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoints/24687
+	* symtab.c (iterate_over_some_symtabs): Apply gdb_realpath on fullname.
+
+2019-10-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (struct demangled_name_entry) <language>: Change from
+	bitfield to regular variable.
+
+2019-10-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (struct demangled_name_entry): Add a constructor.
+	(free_demangled_name_entry): New function to call the destructor
+	for demangled_name_entry.
+	(create_demangled_names_hash): Pass free_demangled_name_entry to
+	htab_create_alloc.
+	(symbol_set_names): Call placement new for demangled_name_entry.
+	* utils.c: No longer include xxhash.h here, now that fast_hash
+	is inlined in the header.
+	* utils.h: Instead, include it here.
+
+2019-10-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* Makefile.in: Link with libxxhash.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: Search for libxxhash.
+	* utils.c (fast_hash): Use xxhash if present.
+
+2019-10-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* utils.h (fast_hash): New function.
+	* symtab.c (hash_demangled_name_entry): Call new function
+	fast_hash.
+
+2019-10-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (struct demangled_name_entry): Change type of mangled
+	to gdb::string_view. Also adds a constructor that takes the
+	mangled name.
+	(hash_demangled_name_entry): Update.
+	(eq_demangled_name_entry): Update.
+	(free_demangled_name_entry): New function to call the destructor
+	now that this is not a POD anymore.
+	(create_demangled_names_hash): Pass free_demangled_name_entry to
+	htab_create_alloc.
+	(symbol_set_names): Update.
+
+2019-10-21  Ali Tamur  <tamu@google.com>
+
+	* dwarf2read.c (dir_index): Change type.
+	(file_name_index): Likewise.
+	(line_header::include_dir_at): Change comment and implementation on
+	whether it is DWARF 5.
+	(line_header::is_valid_file_index): New function.
+	(line_header::file_name_at): Change comment and implementation on
+	whether it is DWARF 5.
+	(line_header::file_names): Change to private field renamed as
+	m_file_names and introduce a new accessor method.
+	(line_header::file_names_size): New method.
+	(line_header::include_dirs): Change to private field and rename as
+	m_include_dirs.
+	(dw2_get_file_names_reader): Define local var at a smaller scope and
+	reflect API change.
+	(dwarf2_cu::setup_type_unit_groups): Reflect API change.
+	(process_structure_scope): Likewise.
+	(line_header::add_include_dir): Change message and reflect renaming.
+	(line_header::add_file_name): Likewise.
+	(read_formatted_entries): Handle DW_FORM_data16.
+	(dwarf_decode_line_header): Fix line header length calculation.
+	(psymtab_include_file_name): Change comment and API.
+	(lnp_state_machine::m_file): Update comment and reflect type change.
+	(lnp_state_machine::record_line): Reflect type change.
+	(dwarf_decode_lines): Reflect API change.
+	(file_file_name): Likewise.
+	(file_full_name): Likewise.
+
+2019-10-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* objfiles.c (sort_cmp): Ensure that !(a < a) holds true.
+
+2019-10-21  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_exec_info_content): Remove typedef.
+
+2019-10-21  Tom Tromey  <tom@tromey.com>
+
+	* configure.ac (nm.h): Conditionally create nm.h link.  Subst
+	NM_H.   Use AC_CONFIG_LINKS.
+	* configure: Rebuild.
+	* Makefile.in (NM_H): New variable.
+	(generated_files): Add NM_H.  Remove gcore.
+	(nm.h, stamp-nmh): New targets.
+
+2019-10-20  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (unlink_objfile, put_objfile_before): Don't declare.
+	* objfiles.c (unlink_objfile): Move earlier.  Now static.  Remove
+	obsolete comment.
+	(put_objfile_before): Now static.
+
+2019-10-19  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbsupport/common-utils.h (startswith): Change return type to
+	bool.
+
+2019-10-19  Christian Biesinger  <cbiesinger@google.com>
+
+	* bcache.c (bcache::print_statistics): Use std::sort instead of qsort.
+	* breakpoint.c (bp_locations_compare): Rename to...
+	(bp_location_is_less_than): ...this, and change to std::sort semantics.
+	(update_global_location_list): Use std::sort instead of qsort.
+	* buildsym.c (compare_line_numbers): Rename to...
+	(lte_is_less_than): ...this, and change to std::sort semantics.
+	(buildsym_compunit::end_symtab_with_blockvector): Use std::sort
+	instead of qsort.
+	* disasm.c (compare_lines): Rename to...
+	(line_is_less_than): ...this, and change to std::sort semantics.
+	(do_mixed_source_and_assembly_deprecated): Call std::sort instead
+	of qsort.
+	* dwarf2-frame.c (qsort_fde_cmp): Rename to...
+	(fde_is_less_than): ...this, and change to std::sort semantics.
+	(dwarf2_build_frame_info): Call std::sort instead of qsort.
+	* mdebugread.c (compare_blocks):
+	(block_is_less_than): ...this, and change to std::sort semantics.
+	(sort_blocks): Call std::sort instead of qsort.
+	* objfiles.c (qsort_cmp): Rename to...
+	(sort_cmp): ...this, and change to std::sort semantics.
+	(update_section_map): Call std::sort instead of qsort.
+	* remote.c (compare_pnums): Remove.
+	(map_regcache_remote_table): Call std::sort instead of qsort.
+	* utils.c (compare_positive_ints): Remove.
+	* utils.h (compare_positive_ints): Remove.
+	* xcoffread.c (compare_lte): Remove.
+	(arrange_linetable): Call std::sort instead of qsort.
+
+2019-10-19  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* symfile.c (init_entry_point_info): Fix typo.
+	* i386-darwin-tdep.c (darwin_dwarf_signal_frame_p): Fix typo.
+
+2019-10-18  Tom de Vries  <tdevries@suse.de>
+
+	* aarch64-tdep.c: Fix typos in comments.
+	* ada-lang.c: Same.
+	* ada-tasks.c: Same.
+	* alpha-tdep.c: Same.
+	* alpha-tdep.h: Same.
+	* amd64-nat.c: Same.
+	* amd64-windows-tdep.c: Same.
+	* arc-tdep.c: Same.
+	* arc-tdep.h: Same.
+	* arch-utils.c: Same.
+	* arm-nbsd-tdep.c: Same.
+	* arm-tdep.c: Same.
+	* ax-gdb.c: Same.
+	* blockframe.c: Same.
+	* btrace.c: Same.
+	* c-varobj.c: Same.
+	* coff-pe-read.c: Same.
+	* coffread.c: Same.
+	* cris-tdep.c: Same.
+	* darwin-nat.c: Same.
+	* dbxread.c: Same.
+	* dcache.c: Same.
+	* disasm.c: Same.
+	* dtrace-probe.c: Same.
+	* dwarf-index-write.c: Same.
+	* dwarf2-frame-tailcall.c: Same.
+	* dwarf2-frame.c: Same.
+	* dwarf2read.c: Same.
+	* eval.c: Same.
+	* exceptions.c: Same.
+	* fbsd-tdep.c: Same.
+	* findvar.c: Same.
+	* frame.c: Same.
+	* frv-tdep.c: Same.
+	* gnu-v3-abi.c: Same.
+	* go32-nat.c: Same.
+	* h8300-tdep.c: Same.
+	* hppa-tdep.c: Same.
+	* i386-linux-tdep.c: Same.
+	* i386-tdep.c: Same.
+	* ia64-libunwind-tdep.c: Same.
+	* ia64-tdep.c: Same.
+	* infcmd.c: Same.
+	* infrun.c: Same.
+	* linespec.c: Same.
+	* linux-nat.c: Same.
+	* linux-thread-db.c: Same.
+	* machoread.c: Same.
+	* mdebugread.c: Same.
+	* mep-tdep.c: Same.
+	* mn10300-tdep.c: Same.
+	* namespace.c: Same.
+	* objfiles.c: Same.
+	* opencl-lang.c: Same.
+	* or1k-tdep.c: Same.
+	* osabi.c: Same.
+	* ppc-linux-nat.c: Same.
+	* ppc-linux-tdep.c: Same.
+	* ppc-sysv-tdep.c: Same.
+	* printcmd.c: Same.
+	* procfs.c: Same.
+	* record-btrace.c: Same.
+	* record-full.c: Same.
+	* remote-fileio.c: Same.
+	* remote.c: Same.
+	* rs6000-tdep.c: Same.
+	* s12z-tdep.c: Same.
+	* score-tdep.c: Same.
+	* ser-base.c: Same.
+	* ser-go32.c: Same.
+	* skip.c: Same.
+	* sol-thread.c: Same.
+	* solib-svr4.c: Same.
+	* solib.c: Same.
+	* source.c: Same.
+	* sparc-nat.c: Same.
+	* sparc-sol2-tdep.c: Same.
+	* sparc-tdep.c: Same.
+	* sparc64-tdep.c: Same.
+	* stabsread.c: Same.
+	* stack.c: Same.
+	* symfile.c: Same.
+	* symtab.c: Same.
+	* target-descriptions.c: Same.
+	* target-float.c: Same.
+	* thread.c: Same.
+	* utils.c: Same.
+	* valops.c: Same.
+	* valprint.c: Same.
+	* value.c: Same.
+	* varobj.c: Same.
+	* windows-nat.c: Same.
+	* xcoffread.c: Same.
+	* xstormy16-tdep.c: Same.
+	* xtensa-tdep.c: Same.
+
+2019-10-17  Tom Tromey  <tromey@adacore.com>
+
+	* configure: Rebuild.
+	* configure.ac: Use AC_CONFIG_HEADERS.  Create stamp-h there, not
+	in AC_CONFIG_FILES invocation.
+	* Makefile.in (Makefile, data-directory/Makefile, stamp-h): Use
+	new-style config.status invocation.
+
+2019-10-17  Tom de Vries  <tdevries@suse.de>
+
+	* arm-nbsd-nat.c: Fix typos in comments.
+	* arm-tdep.c: Same.
+	* darwin-nat-info.c: Same.
+	* dwarf2read.c: Same.
+	* elfread.c: Same.
+	* event-top.c: Same.
+	* findvar.c: Same.
+	* gdbtypes.c: Same.
+	* hppa-tdep.c: Same.
+	* i386-tdep.c: Same.
+	* jit.c: Same.
+	* main.c: Same.
+	* mdebugread.c: Same.
+	* moxie-tdep.c: Same.
+	* nto-procfs.c: Same.
+	* osabi.c: Same.
+	* ppc-linux-tdep.c: Same.
+	* remote.c: Same.
+	* riscv-tdep.c: Same.
+	* s390-tdep.c: Same.
+	* sh-tdep.c: Same.
+	* sparc-linux-tdep.c: Same.
+	* sparc-nat.c: Same.
+	* stack.c: Same.
+	* target-descriptions.c: Same.
+	* top.c: Same.
+	* varobj.c: Same.
+
+2019-10-16  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct objfile) <original_name>: Now const.
+
+2019-10-16  Christian Biesinger  <cbiesinger@google.com>
+
+	* gdbsupport/gdb_setjmp.h (SIGSETJMP): Allow passing in the value to
+	pass on to sigsetjmp's second argument.
+	* cp-support.c (gdb_demangle): Unblock SIGSEGV if we caught a crash.
+
+2019-10-16  Keith Seitz  <keiths@redhat.com>
+
+	PR gdb/23567
+	* dwarf2read.c (dwarf2_per_objfile::locate_sections): Discard
+	sections whose size is greater than the file size.
+
+2019-10-16  Jim Wilson  <jimw@sifive.com>
+
+	* riscv-tdep.c (riscv_gcc_target_options): New.
+	(riscv_gnu_triplet_regexp): New.
+	(riscv_gdbarch_init): Call set_gdbarch_gcc_triplet_options and
+	set_gdbarch_gnu_triplet_regexp.
+
+2019-10-16  Christian Biesinger  <cbiesinger@google.com>
+
+	* Makefile.in: Add xml-builtin.h.
+	* features/feature_to_c.sh: Add an include for xml-builtin.h
+	to ensure that the compiler checks that the types match.
+	* xml-builtin.h: New file.
+	* xml-support.c (fetch_xml_builtin): Add missing const.
+	* xml-support.h: Remove declaration of xml_builtins.
+
+2019-10-16  Tom de Vries  <tdevries@suse.de>
+
+	PR tdep/25096
+	* amd64-tdep.c (amd64_classify_aggregate_field): Factor out of ...
+	(amd64_classify_aggregate): ... here.
+	(amd64_classify_aggregate_field): Handled fiels of nested structs
+	recursively.
+
+2019-10-16  Tom de Vries  <tdevries@suse.de>
+
+	PR tdep/24104
+	* amd64-tdep.c (amd64_push_arguments): Handle AMD64_NO_CLASS in loop
+	that handles 'theclass'.
+
+2019-10-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* linespec.c (decode_digits_ordinary): Update comment.
+	* make-target-delegates: No longer need to handle VEC case.
+	* memrange.c (normalize_mem_ranges): Update comment.
+	* namespace.c (add_using_directive): Update comment.
+	* objc-lang.c (uniquify_strings): Update comment.
+	* ppc-linux-nat.c (struct thread_points): Update comment.
+	* probe.h (find_probes_in_objfile): Update comment.
+	* target.h (enum flash_preserve_mode): Update comment.
+	* varobj.c (varobj_restrict_range): Update comment.
+	* varobj.h (varobj_list_children): Update comment.
+
+2019-10-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* Makefile.in: Remove references to vec.h and vec.c.
+	* aarch64-tdep.c: No longer include vec.h.
+	* ada-lang.c: Likewise.
+	* ada-lang.h: Likewise.
+	* arm-tdep.c: Likewise.
+	* ax.h: Likewise.
+	* breakpoint.h: Likewise.
+	* charset.c: Likewise.
+	* cp-support.h: Likewise.
+	* dtrace-probe.c: Likewise.
+	* dwarf2read.c: Likewise.
+	* extension.h: Likewise.
+	* gdb_bfd.c: Likewise.
+	* gdbsupport/gdb_vecs.h: Likewise.
+	* gdbsupport/vec.c: Remove.
+	* gdbsupport/vec.h: Remove.
+	* gdbthread.h: Likewise.
+	* guile/scm-type.c: Likewise.
+	* inline-frame.c: Likewise.
+	* machoread.c: Likewise.
+	* memattr.c: Likewise.
+	* memrange.h: Likewise.
+	* namespace.h: Likewise.
+	* nat/linux-btrace.h: Likewise.
+	* osdata.c: Likewise.
+	* parser-defs.h: Likewise.
+	* progspace.h: Likewise.
+	* python/py-type.c: Likewise.
+	* record-btrace.c: Likewise.
+	* rust-exp.y: Likewise.
+	* solib-target.c: Likewise.
+	* stap-probe.c: Likewise.
+	* target-descriptions.c: Likewise.
+	* target-memory.c: Likewise.
+	* target.h: Likewise.
+	* varobj.c: Likewise.
+	* varobj.h: Likewise.
+	* xml-support.h: Likewise.
+
+2019-10-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (dwarf2_per_objfile::~dwarf2_per_objfile):
+	Update for new std::vector based implementation.
+	(process_psymtab_comp_unit_reader): Likewise.
+	(scan_partial_symbols): Likewise.
+	(recursively_compute_inclusions): Likewise.
+	(compute_compunit_symtab_includes): Likewise.
+	(process_imported_unit_die): Likewise.
+	(queue_and_load_dwo_tu): Likewise.
+	(follow_die_sig_1): Likewise.
+	* dwarf2read.h: Remove DEF_VEC_P.
+	(typedef dwarf2_per_cu_ptr): Remove.
+	(struct dwarf2_per_cu_data) <imported_symtabs_empty>: New
+	function.
+	(struct dwarf2_per_cu_data) <imported_symtabs_push>: New function.
+	(struct dwarf2_per_cu_data) <imported_symtabs_size>: New function.
+	(struct dwarf2_per_cu_data) <imported_symtabs_free>: New function.
+	(struct dwarf2_per_cu_data) <imported_symtabs>: Change to
+	std::vector.
+
+2019-10-15  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat_target::resume): Use %x when logging
+	TID.
+
+2019-10-15  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat_target::fetch_registers)
+	(windows_nat_target::store_registers): Rename "pid" to "tid".
+
+2019-10-15  Tom Tromey  <tromey@adacore.com>
+
+	* gdbarch.h, gdbarch.c: Rebuild.
+	* gdbarch.sh (gcc_target_options): Change return type to
+	std::string.
+	* compile/compile.c (get_args): Update.
+	* nios2-tdep.c (nios2_gcc_target_options): Return std::string.
+	* arm-linux-tdep.c (arm_linux_gcc_target_options): Return
+	std::string.
+	* aarch64-linux-tdep.c (aarch64_linux_gcc_target_options): Return
+	std::string.
+	* arch-utils.c (default_gcc_target_options): Return std::string.
+	* arch-utils.h (default_gcc_target_options): Return std::string.
+	* s390-tdep.c (s390_gcc_target_options): Return std::string.
+
+2019-10-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* breakpoint.c (breakpoint_chain): Make static.
+	* tui/tui-winsource.c: Call iterate_over_breakpoints instead
+	of accessing breakpoint_chain.
+
+2019-10-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* breakpoint.c (iterate_over_breakpoints): Change function pointer
+	to a gdb::function_view and return value to bool.
+	* breakpoint.h (iterate_over_breakpoints): Likewise.
+	* dummy-frame.c (pop_dummy_frame_bpt): Update.
+	(pop_dummy_frame): Update.
+	* guile/scm-breakpoint.c (bpscm_build_bp_list): Update.
+	(gdbscm_breakpoints): Update.
+	* python/py-breakpoint.c (build_bp_list): Update.
+	(gdbpy_breakpoints): Update.
+	* python/py-finishbreakpoint.c (bpfinishpy_detect_out_scope_cb):
+	Update.
+	(bpfinishpy_handle_stop): Update.
+	(bpfinishpy_handle_exit): Update.
+	* solib-svr4.c (svr4_update_solib_event_breakpoint): Update.
+	(svr4_update_solib_event_breakpoints): Update.
+
+2019-10-15  Andreas Arnez  <arnez@linux.ibm.com>
+
+	* s390-tdep.c (s390_effective_inner_type): Ignore static fields
+	when unwrapping single-field structs.
+
+2019-10-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2read.c: Remove includes.
+
+2019-10-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* ui-out.c (ui_out::call_do_message): Silence
+	-Wformat-nonliteral warning.
+
+2019-10-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.c: Remove some includes: continuations.h, skip.h,
+	mi/mi-main.h, readline/readline.h, readline/history.h.  Add
+	include: readline/tilde.h.
+
+2019-10-12  Christian Biesinger  <cbiesinger@google.com>
+
+	* remote.c (remote_target::get_trace_status): Remove declaration of
+	trace_regblock_size.
+
+2019-10-12  Christian Biesinger  <cbiesinger@google.com>
+
+	* cli/cli-cmds.c (max_user_call_depth): Move comment to header.
+	(show_user): Remove declaration of cmdlist.
+	* cli/cli-cmds.h (max_user_call_depth): Declare.
+	* cli/cli-script.c (execute_user_command): Remove declaration
+	of max_user_call_depth.
+
+2019-10-11  Jim Wilson  <jimw@sifive.com>
+
+	* gdbsupport/print-utils.h (pulongest): Fix comment.
+	(plongest): Likewise.
+	(phex): Add missing comment, mention leading zeros.
+	(phex_nz): Add mention of no leading zeros to comment.
+
+	* riscv-tdep.c (riscv_push_dummy_code): Change %lld to %s and use
+	plongest instead of unsigned long long cast.
+
+2019-10-10  Christian Biesinger  <cbiesinger@google.com>
+
+	* main.c (captured_main_1): Include gdbtk.h and remove declarations
+	for external_editor_command and gdbtk_test.
+
+2019-10-10  Christian Biesinger  <cbiesinger@google.com>
+
+	* mi/mi-cmd-var.c (varobjdebug): Remove declaration.
+	* varobj.c (varobjdebug): Move comment to...
+	* varobj.h (varobjdebug): ...here, and declare.
+
+2019-10-09  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::show_registers): Don't call
+	erase_data_content.
+
+2019-10-09  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (tui_delete_win): Don't declare.
+	* tui/tui-stack.c (tui_locator_window::rerender): Update.
+	* tui/tui-command.c (tui_cmd_window::resize)
+	(tui_refresh_cmd_win): Update.
+	* tui/tui-win.c (tui_resize_all, tui_set_focus_command): Update.
+	* tui/tui.c (tui_rl_other_window, tui_enable): Update.
+	* tui/tui-data.c (~tui_gen_win_info): Remove.
+	* tui/tui-layout.c (tui_gen_win_info::resize): Update.
+	* tui/tui-io.c (update_cmdwin_start_line, tui_putc, tui_puts)
+	(tui_redisplay_readline, tui_mld_flush)
+	(tui_mld_erase_entire_line, tui_mld_getc, tui_getc): Update.
+	* tui/tui-regs.c (tui_data_window::delete_data_content_windows)
+	(tui_data_window::erase_data_content)
+	(tui_data_item_window::rerender)
+	(tui_data_item_window::refresh_window): Update.
+	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window)
+	(box_win, tui_gen_win_info::make_window)
+	(tui_gen_win_info::make_visible): Update.
+	(tui_delete_win): Remove.
+	* tui/tui-winsource.c
+	(tui_source_window_base::do_erase_source_content): Update.
+	(tui_show_source_line, tui_source_window_base::update_tab_width)
+	(tui_source_window_base::update_exec_info): Update.
+	* tui/tui-data.h (struct curses_deleter): New.
+	(struct tui_gen_win_info) <handle>: Now a unique_ptr.
+	(struct tui_gen_win_info) <~tui_gen_win_info>: Define.
+
+2019-10-09  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (struct tui_gen_win_info): Don't declare.
+
+2019-10-09  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.c (tui_win_is_auxiliary): Remove.
+	* tui/tui-data.h (tui_win_is_auxiliary): Don't declare.
+
+2019-10-09  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-disasm.c (tui_get_low_disassembly_address): Compute
+	window height directly.
+	* tui/tui-layout.h (tui_default_win_viewport_height): Don't
+	declare.
+	* tui/tui-layout.c (tui_default_win_height): Remove.
+	(tui_default_win_viewport_height): Remove.
+
+2019-10-09  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.h: Remove comments.
+
+2019-10-09  Tom de Vries  <tdevries@suse.de>
+
+	* python/lib/gdb/printer/bound_registers.py: Use
+	'^builtin_type_bound128' as regexp argument for
+	add_builtin_pretty_printer.
+
+2019-10-09  Christian Biesinger  <cbiesinger@google.com>
+
+	* guile/guile.c (guile_extension_script_ops): Remove forward
+	declaration and mark as static.
+	(guile_script_ops): Likewise.
+	(extension_language_guile): Move further down in the file so
+	it can reference the definitions for guile_{extension_,}script_ops.
+
+2019-10-09  Andreas Arnez  <arnez@linux.ibm.com>
+
+	* s390-tdep.c (390_process_record): Handle new arch13 instructions
+	except SORTL, DFLTCC, and KDSA.
+
+2019-10-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (struct windows_thread_info_struct) <sf>: Remove.
+	(struct safe_symbol_file_add_args): Remove.
+
+2019-10-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c: Don't include buildsym-legacy.h.
+
+2019-10-08  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh (%p): Allow gdb-specific %p extensions.
+
+2019-10-08  Christian Biesinger  <cbiesinger@google.com>
+
+	* gdbtypes.c (overload_debug): Move comment to header.
+	* gdbtypes.h (overload_debug): Declare.
+	* valops.c: Remove declaration of overload_debug, instead
+	include gdbtypes.h.
+
+2019-10-08  Christian Biesinger  <cbiesinger@google.com>
+
+	* language.c (show_language_command): Pass lang_frame_mismatch_warn
+	through _().
+	(lang_frame_mismatch_warn): Make const, mark with N_(), and
+	move comment...
+	* language.h (lang_frame_mismatch_warn): ... here. Also add
+	declaration.
+	* top.c (lang_frame_mismatch_warn): Remove declaration.
+	(check_frame_language_change): Pass lang_frame_mismatch_warn
+	through _().
+
+2019-10-07  Christian Biesinger  <cbiesinger@google.com>
+
+	* c-lang.h (vtbl_ptr_name): Declare.
+	* cp-valprint.c (vtbl_ptr_name): Remove "extern" now that we get
+	it from the header.
+	* stabsread.c (define_symbol): Remove declaration of vtbl_ptr_name.
+
+2019-10-07  Christian Biesinger  <cbiesinger@google.com>
+
+	* charset.c (your_gdb_wchar_t_is_bogus): Replace with a
+	gdb_static_assert.
+
+2019-10-07  Weimin Pan  <weimin.pan@oracle.com>
+
+	* ../Makefile.def (dependencies): Add all-libctf to all-gdb
+	* ../Makefile.in: Add "all-gdb: maybe-all-libctf"
+	* ctfread.c: New file.
+	* ctfread.h: New file.
+	* elfread.c: Include ctfread.h.
+	(struct elfinfo text_p): New member ctfsect.
+	(elf_locate_sections): Mark CTF section.
+	(elf_symfile_read): Call elfctf_build_psymtabs.
+	* Makefile.in (LIBCTF): Add.
+	(CLIBS): Use it.
+	(CDEPS): Likewise.
+	(DIST): Add ctfread.c.
+
+2019-10-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ctfread.c (struct nextfield): Renamed to ...
+	(struct ctf_nextfield): ... this.
+	(struct field_info): Renamed to ...
+	(strut ctf_field_info): ... this.
+	(attach_fields_to_type): Update for renamed structures.
+	(ctf_add_member_cb): Likewise.
+	(ctf_add_enum_member_cb): Likewise.
+	(process_struct_members): Likewise.
+	(process_enum_type): Likewise.
+
+2019-10-07  Weimin Pan  <weimin.pan@oracle.com>
+
+	* tracectf.h: Rename, was ctf.h.
+	* tracectf.c: Rename, was ctf.c, replace ctf.h with tracectf.h.
+	* tracefile.c: Likewise.
+	* tracepoint.c: Remove unused include ctf.h.
+	* mi/mi-main.c: Likewise.
+	* Makefile.in Replace ctf.c with tracectf.c.
+
+2019-10-06  Joel Brobecker  <brobecker@adacore.com>
+
+	* version.in: Change version number to "9.0.50.DATE-git".
+
+2019-10-03  Tom Tromey  <tom@tromey.com>
+
+	PR rust/24976:
+	* dwarf2read.c (quirk_rust_enum): Handle single-element unions.
+
+2019-10-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-lang.c (f_language_defn): Use cp_get_symbol_name_matcher and
+	cp_search_name_hash.
+	* NEWS: Add entry about nested function support.
+
+2019-10-03  Bernhard Heckel  <bernhard.heckel@intel.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cp-namespace.c (cp_search_static_and_baseclasses): Only search
+	for nested static variables when searchin VAR_DOMAIN.
+	* dwarf2read.c (add_partial_symbol): Add nested subroutines to the
+	global scope, update comment.
+	(add_partial_subprogram): Call add_partial_subprogram recursively
+	for nested subroutines when processinng Fortran.
+	(load_partial_dies): Process the child entities of a subprogram
+	when processing Fortran.
+	(partial_die_parent_scope): Handle building scope
+	for Fortran nested functions.
+	(process_die): Record that nested functions have a scope.
+	(new_symbol): Always record Fortran subprograms on the global
+	symbol list.
+	(determine_prefix): How to build the prefix for Fortran
+	subprograms.
+
+2019-10-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* linux-nat.c (linux_nat_filter_event): Don't ignore SIGSTOP if we
+	have just sent the thread a SIGSTOP and are waiting for it to
+	arrive.
+
+2019-10-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* btrace.c (btrace_add_pc): Remove whitespace before the template
+	parameter in 'std::vector <...>'.
+	(parse_xml_btrace_block): Likewise.
+	(btrace_maint_decode_pt): Likewise.
+	(btrace_maint_update_packets): Likewise.
+	(btrace_maint_print_packets): Likewise.
+	* btrace.h (struct btrace_maint_info): Likewise.
+	* dwarf2read.c (struct type_unit_group): Likewise.
+	(build_type_psymtabs_reader): Likewise.
+	* gdbsupport/btrace-common.c (btrace_data_append): Likewise.
+	* gdbsupport/btrace-common.h (struct btrace_data_bts): Likewise.
+	* nat/linux-btrace.c (perf_event_read_bts): Likewise.
+
+2019-10-03  Tom de Vries  <tdevries@suse.de>
+
+	* cli/cli-style.c (_initialize_cli_style): Adding a '.' at the end of
+	the first line of the help text for set/show style metadata.
+
+2019-10-02  Tom Tromey  <tromey@adacore.com>
+
+	* Makefile.in (COMMON_SFILES): Add common-inferior.c.
+	* gdbsupport/common-inferior.c: New file.
+	* infcmd.c (startup_with_shell): Don't define.
+	* nat/fork-inferior.h (startup_with_shell): Don't declare.
+	* gdbsupport/common-inferior.h (startup_with_shell): Declare.
+	* inferior.h (startup_with_shell): Don't declare.
+
+2019-10-02  Christian Biesinger  <cbiesinger@google.com>
+
+	* gdbsupport/gdb_assert.h: Include errors.h.
+	* gdbsupport/gdb_string_view.h: Include gdb_assert.h.
+
+2019-10-02  Tom Tromey  <tromey@adacore.com>
+
+	* NEWS: Add $_ada_exception entry.
+	* ada-lang.c (struct ada_catchpoint): Add constructor.
+	<m_kind>: New member.
+	(allocate_location_exception, re_set_exception): Remove
+	"ex" parameter.
+	(should_stop_exception): Compute $_ada_exception.
+	(check_status_exception, print_it_exception)
+	(print_one_exception, print_mention_exception): Remove
+	"ex" parameter.
+	(allocate_location_catch_exception, re_set_catch_exception)
+	(check_status_exception, print_it_catch_exception)
+	(print_one_catch_exception, print_mention_catch_exception)
+	(print_recreate_catch_exception)
+	(allocate_location_catch_exception_unhandled)
+	(re_set_catch_exception_unhandled)
+	(check_status_exception, print_it_catch_exception_unhandled)
+	(print_one_catch_exception_unhandled)
+	(print_mention_catch_exception_unhandled)
+	(print_recreate_catch_exception_unhandled)
+	(allocate_location_catch_assert, re_set_catch_assert)
+	(check_status_assert, print_it_catch_assert)
+	(print_one_catch_assert, print_mention_catch_assert)
+	(print_recreate_catch_assert)
+	(allocate_location_catch_handlers, re_set_catch_handlers)
+	(check_status_handlers, print_it_catch_handlers)
+	(print_one_catch_handlers, print_mention_catch_handlers)
+	(print_recreate_catch_handlers): Remove.
+	(create_ada_exception_catchpoint): Update.
+	(initialize_ada_catchpoint_ops): Update.
+
+2019-10-02  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_lookup_simple_minsyms): Remove.
+	(create_excep_cond_exprs): Simplify exception string computation.
+	(ada_exception_catchpoint_cond_string): Likewise.
+
+2019-10-02  Tom Tromey  <tromey@adacore.com>
+
+	* symmisc.c (dump_msymbols): Don't use MSYMBOL_VALUE_ADDRESS.
+	* ada-lang.c (lesseq_defined_than): Handle
+	LOC_STATIC.
+	* dwarf2read.c (dwarf2_per_objfile): Add can_copy
+	parameter.
+	(dwarf2_has_info): Likewise.
+	(new_symbol): Set maybe_copied on symbol when
+	appropriate.
+	* dwarf2read.h (dwarf2_per_objfile): Add can_copy
+	parameter.
+	<can_copy>: New member.
+	* elfread.c (record_minimal_symbol): Set maybe_copied
+	on symbol when appropriate.
+	(elf_symfile_read): Update call to dwarf2_has_info.
+	* minsyms.c (lookup_minimal_symbol_linkage): New
+	function.
+	* minsyms.h (lookup_minimal_symbol_linkage): Declare.
+	* symtab.c (get_symbol_address, get_msymbol_address):
+	New functions.
+	* symtab.h (get_symbol_address, get_msymbol_address):
+	Declare.
+	(SYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_ADDRESS): Handle
+	maybe_copied.
+	(struct symbol, struct minimal_symbol) <maybe_copied>:
+	New member.
+
+2019-10-02  Tom Tromey  <tromey@adacore.com>
+
+	* source.c (struct current_source_location): New.
+	(current_source_key): New global.
+	(current_source_symtab, current_source_line)
+	(current_source_pspace): Remove.
+	(get_source_location): New function.
+	(get_current_source_symtab_and_line)
+	(set_default_source_symtab_and_line)
+	(set_current_source_symtab_and_line)
+	(clear_current_source_symtab_and_line, select_source_symtab)
+	(info_source_command, print_source_lines_base)
+	(info_line_command, search_command_helper, _initialize_source):
+	Update.
+
+2019-10-02  Tom Tromey  <tromey@adacore.com>
+
+	* source.c (select_source_symtab): Don't call
+	decode_line_with_current_source.
+
+2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* symtab.c (lookup_global_symbol): Search global block.
+
+2019-10-02  Tom Tromey  <tromey@adacore.com>
+
+	* coffread.c (process_coff_symbol): Update.
+	* dwarf2read.c (var_decode_location, new_symbol): Update.
+	* mdebugread.c (parse_symbol): Update.
+	* objfiles.c (relocate_one_symbol): Update.
+	* stabsread.c (define_symbol, fix_common_block)
+	(scan_file_globals): Update.
+	* symtab.h (SYMBOL_VALUE_ADDRESS): Expand to an rvalue.
+	(SET_SYMBOL_VALUE_ADDRESS): New macro.
+	* xcoffread.c (process_xcoff_symbol): Update.
+
+2019-10-02  Andreas Arnez  <arnez@linux.ibm.com>
+
+	* MAINTAINERS: Update my email address.
+
+2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (struct type_unit_group) <tus>: Convert to
+	std::vector.
+	(build_type_psymtabs_reader): Update for std::vector.
+	(build_type_psymtab_dependencies): Likewise.
+	* dwarf2read.h: Remove use of DEF_VEC_P.
+	(typedef sig_type_ptr): Delete.
+
+2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* btrace.c (btrace_maint_clear): Update to handle change from VEC
+	to std::vector.
+	(btrace_maint_decode_pt): Likewise, and move allocation of the
+	vector outside of the loop.
+	(btrace_maint_update_packets): Update to handle change from VEC to
+	std::vector.
+	(btrace_maint_print_packets): Likewise.
+	(maint_info_btrace_cmd): Likewise.
+	* btrace.h: Remove use of DEF_VEC_O.
+	(typedef btrace_pt_packet_s): Delete.
+	(struct btrace_maint_info) <packets>: Change fromm VEC to
+	std::vector.
+	* gdbsupport/btrace-common.h: Remove 'vec.h' include.
+
+2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* btrace.c (btrace_compute_ftrace_bts): Update for std::vector,
+	make accesses into the vector constant references.
+	(btrace_add_pc): Update for std::vector.
+	(btrace_stitch_bts): Likewise.
+	(parse_xml_btrace_block): Likewise.
+	(btrace_maint_update_packets): Likewise.
+	(btrace_maint_print_packets): Likewise.
+	(maint_info_btrace_cmd): Likewise.
+	* gdbsupport/btrace-common.c (btrace_data::fini): Update for
+	std::vector.
+	(btrace_data::empty): Likewise.
+	(btrace_data_append): Likewise.
+	* gdbsupport/btrace-common.h: Remove use of DEF_VEC_O.
+	(typedef btrace_block_s): Delete.
+	(struct btrace_block): Add constructor.
+	(struct btrace_data_bts) <blocks>: Change to std::vector.
+	* nat/linux-btrace.c (perf_event_read_bts): Update for
+	std::vector.
+	(linux_read_bts): Likewise.
+
+2019-10-01  Tom Tromey  <tom@tromey.com>
+
+	* cli/cli-logging.c (show_logging_filename): Use styled_string.
+
+2019-10-01  Tom Tromey  <tom@tromey.com>
+
+	* stack.c (print_frame, info_frame_command_core): Use
+	styled_string.
+	* linux-thread-db.c (try_thread_db_load_1)
+	(try_thread_db_load_from_pdir_1): Use styled_string.
+	* auto-load.c (file_is_auto_load_safe, execute_script_contents)
+	(auto_load_section_scripts, info_auto_load_local_gdbinit)
+	(maybe_print_unsupported_script_warning)
+	(maybe_print_script_not_found_warning): Use styled_string.
+	* ada-lang.c (user_select_syms): Use styled_string.
+
+2019-10-01  Tom Tromey  <tom@tromey.com>
+
+	* p-lang.c (pascal_printstr): Use metadata style.
+	* value.c (show_convenience): Use metadata style.
+	* valprint.c (valprint_check_validity, val_print_optimized_out)
+	(val_print_not_saved, val_print_unavailable)
+	(val_print_invalid_address, generic_val_print, val_print)
+	(value_check_printable, val_print_array_elements): Use metadata
+	style.
+	* ui-out.h (class ui_out) <field_fmt>: New overload.
+	<do_field_fmt>: Add style parameter.
+	* ui-out.c (ui_out::field_fmt): New overload.
+	* typeprint.c (type_print_unknown_return_type)
+	(val_print_not_allocated, val_print_not_associated): Use metadata
+	style.
+	* tui/tui-out.h (class tui_ui_out) <do_field_fmt>: Add style
+	parameter.
+	* tui/tui-out.c (tui_ui_out::do_field_fmt): Update.
+	* tracepoint.c (tvariables_info_1): Use metadata style.
+	* stack.c (print_frame_arg, print_frame_info, print_frame)
+	(info_frame_command_core): Use metadata style.
+	* skip.c (info_skip_command): Use metadata style.
+	* rust-lang.c (rust_print_enum): Use metadata style.
+	* python/py-prettyprint.c (print_stack_unless_memory_error): Use
+	metadata style.
+	* python/py-framefilter.c (py_print_single_arg): Use metadata
+	style.
+	* printcmd.c (do_one_display, print_variable_and_value): Use
+	metadata style.
+	* p-valprint.c (pascal_val_print)
+	(pascal_object_print_value_fields): Use metadata style.
+	* p-typeprint.c (pascal_type_print_base): Use metadata style.
+	* mi/mi-out.h (class mi_ui_out) <do_field_fmt>: Add style
+	parameter.
+	* mi/mi-out.c (mi_ui_out::do_field_fmt): Update.
+	* m2-valprint.c (m2_print_long_set): Use metadata style.
+	* m2-typeprint.c (m2_print_type): Use metadata style.
+	* infcmd.c (print_return_value_1): Use metadata style.
+	* gnu-v3-abi.c (print_one_vtable): Use metadata style.
+	* f-valprint.c (info_common_command_for_block): Use metadata
+	style.
+	* f-typeprint.c (f_type_print_base): Use metadata style.
+	* expprint.c (print_subexp_standard): Use metadata style.
+	* cp-valprint.c (cp_print_value_fields): Use metadata style.
+	* cli/cli-style.h (class cli_style_option): Add constructor.
+	(metadata_style): Declare.
+	* cli/cli-style.c (metadata_style): New global.
+	(_initialize_cli_style): Register metadata style.
+	* cli-out.h (class cli_ui_out) <do_field_fmt>: Add style
+	parameter.
+	* cli-out.c (cli_ui_out::do_field_fmt): Update.
+	* c-typeprint.c (c_type_print_base_struct_union)
+	(c_type_print_base_1): Use metadata style.
+	* breakpoint.c (watchpoint_value_print)
+	(print_one_breakpoint_location): Use metadata style.
+	* break-catch-syscall.c (print_one_catch_syscall): Use metadata
+	style.
+	* break-catch-sig.c (signal_catchpoint_print_one): Use metadata
+	style.
+	* ada-valprint.c (val_print_packed_array_elements, printstr)
+	(print_field_values, ada_val_print_ref, ada_val_print): Use
+	metadata style.
+	* ada-typeprint.c (print_array_type, ada_print_type): Use metadata
+	style.
+	* ada-tasks.c (print_ada_task_info, info_task): Use metadata
+	style.
+	* ada-lang.c (user_select_syms): Use metadata style.
+
+2019-10-01  Tom Tromey  <tom@tromey.com>
+
+	* cli/cli-cmds.c (pwd_command): Style output.
+
+2019-10-01  Pedro Alves  <palves@redhat.com>
+	    Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (print_symbol_info): Use %ps.
+	(print_msymbol_info): Use %ps.
+	* symfile.c (symbol_file_add_with_addrs): Use %ps.
+	* printcmd.c (print_variable_and_value): Use %ps.
+	* macrocmd.c (show_pp_source_pos): Use %ps.
+	* infrun.c (print_exited_reason): Use ui_out::message.
+	* breakpoint.c (watchpoint_check, print_one_breakpoint_location)
+	(describe_other_breakpoints): Use ui_out::message and new
+	formats.
+	(say_where): Use new formats.
+	(bkpt_print_it, tracepoint_print_one_detail): Use ui_out::message
+	and new formats.
+
+2019-10-01  Pedro Alves  <palves@redhat.com>
+	    Tom Tromey  <tom@tromey.com>
+
+	* unittests/format_pieces-selftests.c: Add gdb_format parameter.
+	(test_gdb_formats): New function.
+	(run_tests): Call it.
+	(test_format_specifier): Update.
+	* utils.h (fputs_filtered): Update comment.
+	(vfprintf_styled, vfprintf_styled_no_gdbfmt)
+	(fputs_styled_unfiltered): Declare.
+	* utils.c (fputs_styled_unfiltered): New function.
+	(vfprintf_maybe_filtered): Add gdbfmt parameter.
+	(vfprintf_filtered): Update.
+	(vfprintf_unfiltered, vprintf_filtered): Update.
+	(vfprintf_styled, vfprintf_styled_no_gdbfmt): New functions.
+	* ui-out.h (enum ui_out_flag) <unfiltered_output,
+	disallow_ui_out_field>: New constants.
+	(enum class field_kind): New.
+	(struct base_field_s, struct signed_field_s): New.
+	(signed_field): New function.
+	(struct string_field_s): New.
+	(string_field): New function.
+	(struct styled_string_s): New.
+	(styled_string): New function.
+	(class ui_out) <message>: Add comment.
+	<vmessage, call_do_message>: New methods.
+	<do_message>: Add style parameter.
+	* ui-out.c (ui_out::call_do_message, ui_out::vmessage): New
+	methods.
+	(ui_out::message): Rewrite.
+	* mi/mi-out.h (class mi_ui_out) <do_message>: Add style
+	parameter.
+	* mi/mi-out.c (mi_ui_out::do_message): Add style parameter.
+	* gdbsupport/format.h (class format_pieces) <format_pieces>: Add
+	gdb_extensions parameter.
+	(class format_piece): Add parameter to constructor.
+	(n_int_args): New field.
+	* gdbsupport/format.c (format_pieces::format_pieces): Add
+	gdb_extensions parameter.  Handle '*'.
+	* cli-out.h (class cli_ui_out) <do_message>: Add style parameter.
+	* cli-out.c (cli_ui_out::do_message): Add style parameter.  Call
+	vfprintf_styled_no_gdbfmt.
+	(cli_ui_out::do_field_string, cli_ui_out::do_spaces)
+	(cli_ui_out::do_text, cli_ui_out::field_separator): Allow
+	unfiltered output.
+	* ui-style.h (struct ui_file_style) <ptr>: New method.
+
+2019-10-01  Tom Tromey  <tom@tromey.com>
+
+	* unittests/format_pieces-selftests.c: Update.  Add final format.
+	* gdbsupport/format.c (format_pieces::format_pieces): Don't add
+	empty literal pieces.
+
+2019-10-01  Tom Tromey  <tom@tromey.com>
+
+	* ui-out.h (enum class ui_out_style_kind): Remove.
+	(class ui_out) <field_string, field_stsream, do_field_string>:
+	Change type of "style".
+	* ui-out.c (ui_out::field_core_addr, ui_out::field_stream)
+	(ui_out::field_string): Update.
+	* tui/tui-out.h (class tui_ui_out) <do_field_string>: Change type
+	of "style".
+	* tui/tui-out.c (tui_ui_out::do_field_string): Update.
+	* tracepoint.c (print_one_static_tracepoint_marker): Update.
+	* stack.c (print_frame_arg, print_frame_info, print_frame):
+	Update.
+	* source.c (print_source_lines_base): Update.
+	* solib.c (info_sharedlibrary_command): Update.
+	* skip.c (info_skip_command): Update.
+	* record-btrace.c (btrace_call_history_src_line)
+	(btrace_call_history): Update.
+	* python/py-framefilter.c (py_print_frame): Update.
+	* mi/mi-out.h (class mi_ui_out) <do_field_string>: Change type of
+	"style".
+	* mi/mi-out.c (mi_ui_out::do_table_header)
+	(mi_ui_out::do_field_signed, mi_ui_out::do_field_unsigned)
+	(mi_ui_out::do_field_string): Update.
+	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
+	Update.
+	* cli-out.h (class cli_ui_out) <do_field_string>: Change type of
+	"style".
+	* cli-out.c (cli_ui_out::do_table_header)
+	(cli_ui_out::do_field_signed, cli_ui_out::do_field_unsigned)
+	(cli_ui_out::do_field_skip, cli_ui_out::do_field_string)
+	(cli_ui_out::do_field_fmt): Update.
+	* breakpoint.c (print_breakpoint_location): Update.
+	(update_static_tracepoint): Update.
+
+2019-10-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* main.c (relocate_gdbinit_path_maybe_in_datadir): Remove std::string
+	conversion of gdb_datadir.
+	(captured_main_1): Remove xstrdup when assigning to gdb_datadir,
+	remove not needed c_str ().
+
+2019-09-30  Ali Tamur <tamur@google.com>
+
+	* dwarf2read.c (skip_one_die): Handle DW_FORM_strx forms.
+	(dwarf2_string_attr): Likewise.
+
+2019-09-30  Ali Tamur <tamur@google.com>
+
+	* dwarf2read.c (process_full_comp_unit): Remove whitespace at the EOL.
+	(process_full_type_unit): Likewise.
+	(dump_die_shallow): Likewise.
+	(cu_debug_loc_section): Likewise.
+
+2019-09-28  Christian Biesinger  <cbiesinger@google.com>
+
+	* minsyms.c (compare_minimal_symbols): Rename to...
+	(minimal_symbol_is_less_than): ...this, and adjust to STL
+	conventions (return bool, take arguments as references)
+	(minimal_symbol_reader::install): Call std::sort instead
+	of qsort.
+
+2019-09-29  Christian Biesinger  <cbiesinger@google.com>
+
+	* minsyms.h (msymbol_hash): Document that this is a case-insensitive
+	hash and why.
+	* objfiles.h (struct objfile_per_bfd_storage) <demangled_names_hash,
+	msymbol_hash, msymbol_demangled_hash>: Improve comments.
+
+2019-09-30  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* psymtab.c (add_psymbol_to_list): Move comment to psympriv.h.
+	* psympriv.h (add_psymbol_to_list): Move comment here and update
+	it.
+
+2019-09-29  Tom de Vries  <tdevries@suse.de>
+
+	* contrib/cc-with-tweaks.sh (get_tmpdir): New function.
+	Use $tmpdir/$(basename "$output_file").dwz instead of
+	"${output_file}.dwz".
+
+2019-09-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/25045
+	* hppa-linux-nat.c: Include gdbarch.h.
+
+2019-09-26  Christian Biesinger  <cbiesinger@google.com>
+
+	* blockframe.c (find_pc_partial_function): Change return type to bool.
+	* elfread.c (elf_gnu_ifunc_resolve_name): Likewise.
+	* minsyms.c (in_gnu_ifunc_stub): Likewise.
+	(stub_gnu_ifunc_resolve_name): Likewise.
+	* symtab.c (compare_filenames_for_search): Likewise.
+	(compare_glob_filenames_for_search): Likewise.
+	(matching_obj_sections): Likewise.
+	(symbol_matches_domain): Likewise.
+	(find_line_symtab): Change out param EXACT_MATCH to bool *.
+	(find_line_pc): Change return type to bool.
+	(find_line_pc_range): Likewise.
+	(producer_is_realview): Likewise.
+	* symtab.h (symbol_matches_domain): Likewise.
+	(find_pc_partial_function): Likewise.
+	(find_pc_line_pc_range): Likewise.
+	(in_gnu_ifunc_stub): Likewise.
+	(struct gnu_ifunc_fns) <gnu_ifunc_resolve_name>: Likewise.
+	(find_line_pc): Likewise.
+	(find_line_pc_range): Likewise.
+	(matching_obj_sections): Likewise.
+	(find_line_symtab): Change out parameter to bool.
+	(producer_is_realview): Change return type to bool.
+	(compare_filenames_for_search): Likewise.
+	(compare_glob_filenames_for_search): Likewise.
+
+2019-09-26  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in (COMMON_SFILES): Remove gdb_usleep.c.
+	(HFILES_NO_SRCDIR): Remove gdb_usleep.h.
+	* gdb_usleep.h: Remove.
+	* gdb_usleep.c: Remove.
+	* utils.c: Don't include gdb_usleep.h.
+
+2019-09-26  Tom Tromey  <tromey@adacore.com>
+
+	* python/py-type.c (type_to_type_object): Call check_typedef
+	for stub types.
+
+2019-09-26  Tom Tromey  <tom@tromey.com>
+
+	* utils.h (initialize_utils): Don't declare.
+	* top.c (gdb_init): Don't call initialize_utils.
+	* utils.c (initialize_utils): Remove.  Move contents...
+	(_initialize_utils): ... here.
+
+2019-09-25  Tom Tromey  <tom@tromey.com>
+
+	* python/py-objfile.c (objfpy_get_build_id): Use bin2hex.
+	* utils.h (make_hex_string): Don't declare.
+	* utils.c (make_hex_string): Remove.
+
+2019-09-24  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/23815
+	* amd64-linux-nat.c (amd64_linux_nat_target::fetch_registers):
+	Initialize xstateregs before ptrace PTRACE_GETREGSET call.
+
+2019-09-23  Dimitar Dimitrov  <dimitar@dinux.eu>
+
+	* NEWS: Mention new simulator port for PRU.
+
+2019-09-23  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-exp.y (write_object_remaining): Update.
+	* ada-lang.c (ada_decode): Return a std::string instead of a char*
+	and eliminate the static buffer.
+	(ada_decode_symbol): Update.
+	(ada_la_decode): Update.
+	(ada_sniff_from_mangled_name): Update.
+	(is_valid_name_for_wild_match): Update.
+	(ada_lookup_name_info::matches): Update and simplify.
+	(name_matches_regex): Update.
+	(ada_add_global_exceptions): Update.
+	* ada-lang.h (ada_decode): Update signature.
+	* ada-varobj.c (ada_varobj_describe_simple_array_child): Update.
+	* dwarf-index-write.c (debug_names::insert): Update.
+
+2019-09-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* solib-svr4.c (svr4_iterate_over_objfiles_in_search_order): Fix
+	formatting.
+
+2019-09-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.h (bp_location) <inserted, permanent, duplicate>:
+	Change "nonzero" to "true" in documentation.
+
+2019-09-20  Christian Biesinger  <cbiesinger@google.com>
+
+	* solib-darwin.c (darwin_lookup_lib_symbol): Remove.
+	(_initialize_darwin_solib): Don't set
+	darwin_so_ops.lookup_lib_global_symbol.
+	* solib-svr4.c (set_solib_svr4_fetch_link_map_offsets): Call
+	set_gdbarch_iterate_over_objfiles_in_search_order.
+	(elf_lookup_lib_symbol): Rename to...
+	(svr4_iterate_over_objfiles_in_search_order): this, and update
+	to iterate semantics.
+	(_initialize_svr4_solib): Don't set lookup_lib_global_symbol.
+	* solib.c (solib_global_lookup): Remove.
+	* solist.h (struct target_so_ops): Remove lookup_lib_global_symbol.
+	(solib_global_lookup): Remove.
+	* symtab.c (lookup_global_or_static_symbol): Remove call to
+	solib_global_lookup.
+
+2019-09-20  Joel Brobecker  <brobecker@adacore.com>
+
+	* NEWS: Move entries about default MI version now being
+	version 3, and about the GDB/MI fix for multi-location
+	breakpoints to the "since GDB 8.3" section.
+
+2019-09-20  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 8.3.1 released.
+
+2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* NEWS: Mention that Cell/B.E. debugging support was removed.
+	* MAINTAINERS: Remove spu target.
+
+	* config/djgpp/fnchange.lst: Remove entries for removed files.
+
+	* Makefile.in (ALL_TARGET_OBS): Remove solib-spu.o,
+	spu-multiarch.o, and spu-tdep.o.
+	(HFILES_NO_SRCDIR): Remove solib-spu.h and spu-tdep.h.
+	(ALLDEPFILES): Remove solib-spu.c, spu-linux-nat.c,
+	spu-multiarch.c, and spu-tdep.c.
+	* spu-linux-nat.c: Remove file.
+	* spu-multiarch.c: Remove file.
+	* spu-tdep.c: Remove file.
+	* spu-tdep.h: Remove file.
+	* solib-spu.c: Remove file.
+	* solib-spu.h: Remove file.
+
+	* configure.host (powerpc64*-*-linux*): Remove Cell/B.E. support.
+	* configure.nat (spu-linux): Remove.
+	* configure.tgt (powerpc*-*-linux*): Remove solib-spu.o and
+	solib-multiarch.o from gdb_target_obs.
+	(spu*-*-*): Remove.
+
+	* arch/ppc-linux-common.h (struct ppc_linux_features): Remove "cell"
+	feature flag.
+	(ppc_linux_no_features): Update.
+	* arch/ppc-linux-common.c (ppc_linux_match_description): Remove
+	Cell/B.E. support.
+	* arch/ppc-linux-tdesc.h (tdesc_powerpc_cell32l): Remove declaration.
+	(tdesc_powerpc_cell64l): Likewise.
+	* nat/ppc-linux.h (PPC_FEATURE_CELL): Remove.
+	* ppc-linux-nat.c (ppc_linux_nat_target::read_description): Remove
+	Cell/B.E. support.
+	* ppc-linux-tdep.h: Do not include "solib-spu.h" or "spu-tdep.h".
+	Do not include "features/rs6000/powerpc-cell32l.c" or
+	"features/rs6000/powerpc-cell64l.c".
+	(ppc_linux_spu_section): Remove.
+	(ppc_linux_core_read_description): Remove Cell/B.E. support.
+	(spe_context_objfile, spe_context_lm_addr, spe_context_offset,
+	spe_context_cache_ptid, spe_context_cache_ptid): Remove.
+	(ppc_linux_spe_context_lookup): Remove.
+	(ppc_linux_spe_context_inferior_created): Remove.
+	(ppc_linux_spe_context_solib_loaded): Remove.
+	(ppc_linux_spe_context_solib_unloaded): Remove.
+	(ppc_linux_spe_context): Remove.
+	(struct ppu2spu_cache): Remove.
+	(ppu2spu_prev_arch, ppu2spu_this_id, ppu2spu_prev_register): Remove.
+	(struct ppu2spu_data): Remove.
+	(ppu2spu_unwind_register, ppu2spu_sniffer, ppu2spu_dealloc_cache,
+	ppu2spu_unwind): Remove.
+	(ppc_linux_init_abi): Remove Cell/B.E. support.
+	* rs6000-tdep.h (rs6000_gdbarch_init): Remove Cell/B.E. support.
+
+	* features/Makefile (rs6000/powerpc-cell32l-expedite): Remove.
+	(rs6000/powerpc-cell64l-expedite): Likewise
+	(WHICH): Remove rs6000/powerpc-cell32l and rs6000/powerpc-cell64l.
+	(XMLTOC): Remove rs6000/powerpc-cell32l.xml and
+	rs6000/powerpc-cell64l.xml.
+	* features/rs6000/powerpc-cell32l.xml: Remove.
+	* features/rs6000/powerpc-cell64l.xml: Likewise.
+	* features/rs6000/powerpc-cell32l.c: Remove generated file.
+	* features/rs6000/powerpc-cell64l.c: Likewise.
+	* regformats/rs6000/powerpc-cell32l.dat: Remove generated file.
+	* regformats/rs6000/powerpc-cell64l.dat: Likewise.
+	* regformats/reg-spu.dat: Remove.
+
+	* target.h (enum target_object): Remove TARGET_OBJECT_SPU.
+	* corelow.c (struct spuid_list): Remove.
+	(add_to_spuid_list): Remove.
+	(core_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
+	* remote.c (PACKET_qXfer_spu_read, PACKET_qXfer_spu_write): Remove.
+	(remote_protocol_features): Remove associated entries.
+	(_initialize_remote): No longer initialize them.
+	(remote_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
+	* linux-nat.c (SPUFS_MAGIC): Remove.
+	(linux_proc_xfer_spu): Remove.
+	(spu_enumerate_spu_ids): Remove.
+	(linux_nat_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
+	* linux-tdep.c (-linux_spu_make_corefile_notes): Remove.
+	(linux_make_corefile_notes): No longer call it.
+
+	* regcache.c (cooked_read_test): Remove bfd_arch_spu special case.
+	(cooked_write_test): Likewise.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* NEWS: Mention case-sensitivity of TUI commands.
+	* tui/tui-win.c (tui_set_focus_command): Now case-sensitive.
+	(tui_set_win_height_command, parse_scrolling_args): Likewise.
+	* tui/tui-layout.c (tui_layout_command): Now case-sensitive.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.c (tui_source_window::set_contents): Use
+	make_unique_xstrdup.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents): Use
+	make_unique_xstrdup.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.c: Remove separator comments.
+	* tui/tui-layout.c: Remove separator comments.
+	* tui/tui-win.c: Remove separator comments.
+	* tui/tui-wingeneral.c: Remove separator comments.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.h (strcat_to_buf): Don't declare.
+	* tui/tui.c (strcat_to_buf): Remove.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.h (struct tui_source_window) <m_fullname>: Rename
+	from "fullname".
+	* tui/tui-source.c (tui_source_window::set_contents)
+	(tui_source_window::location_matches_p)
+	(tui_source_window::maybe_update): Update.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_window) <get_current_group>:
+	Update.
+	<m_regs_content, m_regs_column_count, m_current_group>: Add "m_"
+	prefix.
+	* tui/tui-regs.c (tui_data_window::last_regs_line_no)
+	(tui_data_window::line_from_reg_element_no)
+	(tui_data_window::first_reg_element_no_inline)
+	(tui_data_window::show_registers)
+	(tui_data_window::show_register_group)
+	(tui_data_window::display_registers_from)
+	(tui_data_window::display_registers_from_line)
+	(tui_data_window::first_data_item_displayed)
+	(tui_data_window::delete_data_content_windows)
+	(tui_data_window::erase_data_content)
+	(tui_data_window::do_scroll_vertical)
+	(tui_data_window::refresh_window)
+	(tui_data_window::check_register_values): Update.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.h (MAX_LOCATOR_ELEMENT_LEN): Remove define.
+	(struct tui_locator_window) <full_name, proc_name>: Now
+	std::string.
+	* tui/tui-stack.c (tui_locator_window::make_status_line)
+	(tui_locator_window::set_locator_fullname)
+	(tui_locator_window::set_locator_info): Update.
+	* tui/tui-source.c (tui_source_window::set_contents)
+	(tui_source_window::showing_source_p): Update.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (tui_locator_window::set_locator_fullname):
+	Don't call tui_locator_win_info_ptr.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_resize_all): Don't call refresh.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Use 1 as
+	height for locator.
+	* tui/tui-stack.c (tui_locator_window::rerender): Call scrollok.
+	* tui/tui-layout.c (show_source_disasm_command, show_data)
+	(show_source_or_disasm_and_command): Use 1 as height for locator.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_enable): Update.
+	* tui/tui-win.c (tui_sigwinch_handler, tui_async_resize_screen):
+	Update.
+	* tui/tui-data.h (tui_win_resized, tui_set_win_resized_to):
+	Update.
+	* tui/tui-data.c (win_resized): Now bool.
+	(tui_win_resized): Return bool.
+	(tui_set_win_resized_to): Accept a bool.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_window) <show_register_group>:
+	Change type of "refresh_values_only".
+	* tui/tui-regs.c (tui_data_window::show_register_group): Change
+	type of "refresh_values_only".
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-disasm.c (struct tui_asm_line) <addr_string, insn>: Now
+	std::string.
+	(tui_disassemble): Add "pos" parameter.
+	(tui_disasm_window::set_contents): Simplify.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<show_source_content>: Now private.
+	* tui/tui-winsource.c
+	(tui_source_window_base::show_source_content): Don't handle empty
+	content case.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_source_disasm_command)
+	(show_source_or_disasm_and_command): Don't call
+	show_source_content.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.h (struct tui_locator_window) <make_status_line>:
+	Declare.
+	* tui/tui-stack.c (tui_locator_window::make_status_line): Rename
+	from tui_make_status_line.
+	(tui_locator_window::rerender): Update.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (tui_make_status_line): Return std::string.
+	(tui_locator_window::rerender): Update.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<~tui_source_window_base>: Don't declare.
+	<fullname>: Remove.
+	* tui/tui-winsource.c (~tui_source_window_base): Remove.
+	* tui/tui-source.h (struct tui_source_window) <fullname>: New
+	member.
+	* tui/tui-source.c (tui_source_window::set_contents): Update.
+	(tui_source_window::location_matches_p)
+	(tui_source_window::maybe_update): Update.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (~tui_source_element): Remove.
+	(tui_source_element): Update.
+	(struct tui_source_element) <line>: Now a unique_xmalloc_ptr.
+	* tui/tui-winsource.c (tui_show_source_line): Update.
+	* tui/tui-source.c (tui_source_window::set_contents): Update.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
+
+2019-09-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (tui_clear_source_windows_detail): Don't
+	declare.
+	* tui/tui-layout.c (tui_add_win_to_layout): Don't call
+	tui_clear_source_windows_detail.
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<clear_detail>: Don't declare.
+	* tui/tui-winsource.c (tui_source_window_base::clear_detail):
+	Remove.
+	* tui/tui-data.c (tui_clear_source_windows_detail): Remove.
+
+2019-09-20  Tom Tromey  <tromey@adacore.com>
+
+	PR ada/24919:
+	* block.c (contained_in): Fix final return value.
+
+2019-09-20  Alan Modra  <amodra@gmail.com>
+
+	* gdb_bfd.c (gdb_bfd_ref, gdb_bfd_unref): Use bfd_set_usrdata.
+	* dwarf2read.c (dwarf2_read_gdb_index, dwarf2_read_debug_names),
+	(read_indirect_string_from_dwz): Use bfd accessor.
+	* dwarf2read.h (struct dwz_file <filename>): Likewise.
+	* machoread.c (macho_symfile_read_all_oso): Likewise.
+	* solib.c (solib_bfd_open): Likewise.
+
+2019-09-19  Christian Biesinger  <cbiesinger@google.com>
+
+	* eval.c: Move declaration of overload_resolution to...
+	* value.h: ...here.
+
+2019-09-19  Christian Biesinger  <cbiesinger@google.com>
+
+	* arm-linux-nat.c: Remove extern declaration for arm_apcs_32.
+	* arm-linux-tdep.c: Likewise.
+	* arm-nbsd-nat.c: Likewise.
+	* arm-tdep.h: Declare arm_apcs_32.
+	* arm-tdep.c: Move documentation for arm_apcs_32 to arm-tdep.h.
+
+2019-09-19  Christian Biesinger  <cbiesinger@google.com>
+
+	* dwarf2loc.c: Remove extern declaration of dwarf_always_disassemble.
+	* dwarf2read.h: Declare dwarf_always_disassemble.
+
+2019-09-19  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/25009
+	* source-cache.c (source_cache::ensure): Catch exception thrown during
+	construction of the highlighter.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* aarch64-linux-tdep.c, * arm-tdep.c, * auto-load.c,
+	* coff-pe-read.c, * coffread.c, * corelow.c, * dbxread.c,
+	* dicos-tdep.c, * dwarf2-frame.c, * dwarf2read.c, * elfread.c,
+	* exec.c, * fbsd-tdep.c, * gcore.c, * gdb_bfd.c, * gdb_bfd.h,
+	* hppa-tdep.c, * i386-cygwin-tdep.c, * i386-fbsd-tdep.c,
+	* i386-linux-tdep.c, * jit.c, * linux-tdep.c, * machoread.c,
+	* maint.c, * mdebugread.c, * minidebug.c, * mips-linux-tdep.c,
+	* mips-sde-tdep.c, * mips-tdep.c, * mipsread.c, * nto-tdep.c,
+	* objfiles.c, * objfiles.h, * osabi.c, * ppc-linux-tdep.c,
+	* ppc64-tdep.c, * record-btrace.c, * record-full.c, * remote.c,
+	* rs6000-aix-tdep.c, * rs6000-tdep.c, * s390-linux-tdep.c,
+	* s390-tdep.c, * solib-aix.c, * solib-dsbt.c, * solib-frv.c,
+	* solib-spu.c, * solib-svr4.c, * solib-target.c,
+	* spu-linux-nat.c, * spu-tdep.c, * symfile-mem.c, * symfile.c,
+	* symmisc.c, * symtab.c, * target.c, * windows-nat.c,
+	* xcoffread.c, * cli/cli-dump.c, * compile/compile-object-load.c,
+	* mi/mi-interp.c: Update throughout for bfd section macro and
+	function changes.
+	* gcore (gcore_create_callback): Use bfd_set_section_lma.
+	* spu-tdep.c (spu_overlay_new_objfile): Likewise.
+
+2019-09-18  Tom Tromey  <tom@tromey.com>
+
+	* NEWS: Add entry.
+	* tui/tui.c (tui_initialize_readline): Set name of keymap.  Do not
+	call rl_initialize.
+	(tui_enable): Do not call rl_initialize.
+
+2019-09-18  Christian Groessler  <chris@groessler.org>
+
+	* alpha-linux-nat.c: Include gdbarch.h.
+
+2019-09-18  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* ui-file.c: Include cli/cli-style.h.
+	(term_cli_styling): Remove cli_styling declaration.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* arm-tdep.c (arm_record_special_symbol): Update bfd_get_section
+	to bfd_asymbol_section.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* amd64-dicos-tdep.c (amd64_dicos_osabi_sniffer): Constify target.
+	* i386-cygwin-tdep.c (i386_cygwin_init_abi): Likewise.
+	* i386-dicos-tdep.c (i386_dicos_osabi_sniffer): Likewise.
+
+2019-09-18  Alan Modra  <amodra@gmail.com>
+
+	* solib-spu.c (spu_bfd_open): Use bfd_set_filename.
+	* spu-linux-nat.c (spu_bfd_open): Likewise.
+
+2019-09-18  Christian Biesinger  <cbiesinger@google.com>
+
+	* dwarf2loc.c: Change extern declaration of dwarf_always_disassemble
+	to bool to match definition in dwarf2read.c.
+
+2019-09-17  Christian Biesinger  <cbiesinger@google.com>
+
+	* ada-lang.c (ada_ignore_descriptive_types_p): Change to bool.
+	(print_signatures): Likewise.
+	(trust_pad_over_xvs): Likewise.
+	* arch/aarch64-insn.c (aarch64_debug): Likewise.
+	* arch/aarch64-insn.h (aarch64_debug): Likewise.
+	* arm-linux-nat.c (arm_apcs_32): Likewise.
+	* arm-linux-tdep.c (arm_apcs_32): Likewise.
+	* arm-nbsd-nat.c (arm_apcs_32): Likewise.
+	* arm-tdep.c (arm_debug): Likewise.
+	(arm_apcs_32): Likewise.
+	* auto-load.c (debug_auto_load): Likewise.
+	(auto_load_gdb_scripts): Likewise.
+	(global_auto_load): Likewise.
+	(auto_load_local_gdbinit): Likewise.
+	(auto_load_local_gdbinit_loaded): Likewise.
+	* auto-load.h (global_auto_load): Likewise.
+	(auto_load_local_gdbinit): Likewise.
+	(auto_load_local_gdbinit_loaded): Likewise.
+	* breakpoint.c (disconnected_dprintf): Likewise.
+	(breakpoint_proceeded): Likewise.
+	(automatic_hardware_breakpoints): Likewise.
+	(always_inserted_mode): Likewise.
+	(target_exact_watchpoints): Likewise.
+	(_initialize_breakpoint): Update.
+	* breakpoint.h (target_exact_watchpoints): Change to bool.
+	* btrace.c (maint_btrace_pt_skip_pad): Likewise.
+	* cli/cli-cmds.c (trace_commands): Likewise.
+	* cli/cli-cmds.h (trace_commands): Likewise.
+	* cli/cli-decode.c (add_setshow_boolean_cmd): Change int* argument
+	to bool*.
+	* cli/cli-logging.c (logging_overwrite): Change to bool.
+	(logging_redirect): Likewise.
+	(debug_redirect): Likewise.
+	* cli/cli-option.h (option_def) <boolean>: Change return type to bool*.
+	(struct boolean_option_def) <get_var_address_cb_>: Change return type
+	to bool.
+	<boolean_option_def>: Update.
+	(struct flag_option_def): Change default type of Context to bool
+	from int.
+	<flag_option_def>: Change return type of var_address_cb_ to bool*.
+	* cli/cli-setshow.c (do_set_command): Cast to bool* instead of int*.
+	(get_setshow_command_value_string): Likewise.
+	* cli/cli-style.c (cli_styling): Change to bool.
+	(source_styling): Likewise.
+	* cli/cli-style.h (source_styling): Likewise.
+	(cli_styling): Likewise.
+	* cli/cli-utils.h (struct qcs_flags) <quiet, cont, silent>: Change
+	to bool.
+	* command.h (var_types): Update comment.
+	(add_setshow_boolean_cmd): Change int* var argument to bool*.
+	* compile/compile-cplus-types.c (debug_compile_cplus_types): Change to
+	bool.
+	(debug_compile_cplus_scopes): Likewise.
+	* compile/compile-internal.h (compile_debug): Likewise.
+	* compile/compile.c (compile_debug): Likewise.
+	(struct compile_options) <raw>: Likewise.
+	* cp-support.c (catch_demangler_crashes): Likewise.
+	* cris-tdep.c (usr_cmd_cris_version_valid): Likewise.
+	(usr_cmd_cris_dwarf2_cfi): Likewise.
+	* csky-tdep.c (csky_debug): Likewise.
+	* darwin-nat.c (enable_mach_exceptions): Likewise.
+	* dcache.c (dcache_enabled_p): Likewise.
+	* defs.h (info_verbose): Likewise.
+	* demangle.c (demangle): Likewise.
+	(asm_demangle): Likewise.
+	* dwarf-index-cache.c (debug_index_cache): Likewise.
+	* dwarf2-frame.c (dwarf2_frame_unwinders_enabled_p): Likewise.
+	* dwarf2-frame.h (dwarf2_frame_unwinders_enabled_p): Likewise.
+	* dwarf2read.c (check_physname): Likewise.
+	(use_deprecated_index_sections): Likewise.
+	(dwarf_always_disassemble): Likewise.
+	* eval.c (overload_resolution): Likewise.
+	* event-top.c (set_editing_cmd_var): Likewise.
+	(exec_done_display_p): Likewise.
+	* event-top.h (set_editing_cmd_var): Likewise.
+	(exec_done_display_p): Likewise.
+	* exec.c (write_files): Likewise.
+	* fbsd-nat.c (debug_fbsd_lwp): Likewise
+	(debug_fbsd_nat): Likewise.
+	* frame.h (struct frame_print_options) <print_raw_frame_arguments>:
+	Likewise.
+	(struct set_backtrace_options) <backtrace_past_main>: Likewise.
+	<backtrace_past_entry> Likewise.
+	* gdb-demangle.h (demangle): Likewise.
+	(asm_demangle): Likewise.
+	* gdb_bfd.c (bfd_sharing): Likewise.
+	* gdbcore.h (write_files): Likewise.
+	* gdbsupport/common-debug.c (show_debug_regs): Likewise.
+	* gdbsupport/common-debug.h (show_debug_regs): Likewise.
+	* gdbthread.h (print_thread_events): Likewise.
+	* gdbtypes.c (opaque_type_resolution): Likewise.
+	(strict_type_checking): Likewise.
+	* gnu-nat.c (gnu_debug_flag): Likewise.
+	* guile/scm-auto-load.c (auto_load_guile_scripts): Likewise.
+	* guile/scm-param.c (pascm_variable): Add boolval.
+	(add_setshow_generic): Update.
+	(pascm_param_value): Update.
+	(pascm_set_param_value_x): Update.
+	* hppa-tdep.c (hppa_debug): Change to bool..
+	* infcall.c (may_call_functions_p): Likewise.
+	(coerce_float_to_double_p): Likewise.
+	(unwind_on_signal_p): Likewise.
+	(unwind_on_terminating_exception_p): Likewise.
+	* infcmd.c (startup_with_shell): Likewise.
+	* inferior.c (print_inferior_events): Likewise.
+	* inferior.h (startup_with_shell): Likewise.
+	(print_inferior_events): Likewise.
+	* infrun.c (step_stop_if_no_debug): Likewise.
+	(detach_fork): Likewise.
+	(debug_displaced): Likewise.
+	(disable_randomization): Likewise.
+	(non_stop): Likewise.
+	(non_stop_1): Likewise.
+	(observer_mode): Likewise.
+	(observer_mode_1): Likewise.
+	(set_observer_mode): Update.
+	(sched_multi): Change to bool.
+	* infrun.h (debug_displaced): Likewise.
+	(sched_multi): Likewise.
+	(step_stop_if_no_debug): Likewise.
+	(non_stop): Likewise.
+	(disable_randomization): Likewise.
+	* linux-tdep.c (use_coredump_filter): Likewise.
+	(dump_excluded_mappings): Likewise.
+	* linux-thread-db.c (auto_load_thread_db): Likewise.
+	(check_thread_db_on_load): Likewise.
+	* main.c (captured_main_1): Update.
+	* maint-test-options.c (struct test_options_opts) <flag_opt, xx1_opt,
+	xx2_opt, boolean_opt>: Change to bool.
+	* maint-test-settings.c (maintenance_test_settings_boolean): Likewise.
+	* maint.c (maintenance_profile_p): Likewise.
+	(per_command_time): Likewise.
+	(per_command_space): Likewise.
+	(per_command_symtab): Likewise.
+	* memattr.c (inaccessible_by_default): Likewise.
+	* mi/mi-main.c (mi_async): Likewise.
+	(mi_async_1): Likewise.
+	* mips-tdep.c (mips64_transfers_32bit_regs_p): Likewise.
+	* nat/fork-inferior.h (startup_with_shell): Likewise.
+	* nat/linux-namespaces.c (debug_linux_namespaces): Likewise.
+	* nat/linux-namespaces.h (debug_linux_namespaces): Likewise.
+	* nios2-tdep.c (nios2_debug): Likewise.
+	* or1k-tdep.c (or1k_debug): Likewise.
+	* parse.c (parser_debug): Likewise.
+	* parser-defs.h (parser_debug): Likewise.
+	* printcmd.c (print_symbol_filename): Likewise.
+	* proc-api.c (procfs_trace): Likewise.
+	* python/py-auto-load.c (auto_load_python_scripts): Likewise.
+	* python/py-param.c (union parmpy_variable): Add "bool boolval" field.
+	(set_parameter_value): Update.
+	(add_setshow_generic): Update.
+	* python/py-value.c (copy_py_bool_obj): Change argument from int*
+	to bool*.
+	* python/python.c (gdbpy_parameter_value): Cast to bool* instead of
+	int*.
+	* ravenscar-thread.c (ravenscar_task_support): Change to bool.
+	* record-btrace.c (record_btrace_target::store_registers): Update.
+	* record-full.c (record_full_memory_query): Change to bool.
+	(record_full_stop_at_limit): Likewise.
+	* record-full.h (record_full_memory_query): Likewise.
+	* remote-notif.c (notif_debug): Likewise.
+	* remote-notif.h (notif_debug): Likewise.
+	* remote.c (use_range_stepping): Likewise.
+	(interrupt_on_connect): Likewise.
+	(remote_break): Likewise.
+	* ser-tcp.c (tcp_auto_retry): Likewise.
+	* ser-unix.c (serial_hwflow): Likewise.
+	* skip.c (debug_skip): Likewise.
+	* solib-aix.c (solib_aix_debug): Likewise.
+	* spu-tdep.c (spu_stop_on_load_p): Likewise.
+	(spu_auto_flush_cache_p): Likewise.
+	* stack.c (struct backtrace_cmd_options) <full, no_filters, hide>:
+	Likewise.
+	(struct info_print_options) <quiet>: Likewise.
+	* symfile-debug.c (debug_symfile): Likewise.
+	* symfile.c (auto_solib_add): Likewise.
+	(separate_debug_file_debug): Likewise.
+	* symfile.h (auto_solib_add): Likewise.
+	(separate_debug_file_debug): Likewise.
+	* symtab.c (basenames_may_differ): Likewise.
+	(struct filename_partial_match_opts) <dirname, basename>: Likewise.
+	(struct info_print_options) <quiet, exclude_minsyms>: Likewise.
+	(struct info_types_options) <quiet>: Likewise.
+	* symtab.h (demangle): Likewise.
+	(basenames_may_differ): Likewise.
+	* target-dcache.c (stack_cache_enabled_1): Likewise.
+	(code_cache_enabled_1): Likewise.
+	* target.c (trust_readonly): Likewise.
+	(may_write_registers): Likewise.
+	(may_write_memory): Likewise.
+	(may_insert_breakpoints): Likewise.
+	(may_insert_tracepoints): Likewise.
+	(may_insert_fast_tracepoints): Likewise.
+	(may_stop): Likewise.
+	(auto_connect_native_target): Likewise.
+	(target_stop_and_wait): Update.
+	(target_async_permitted): Change to bool.
+	(target_async_permitted_1): Likewise.
+	(may_write_registers_1): Likewise.
+	(may_write_memory_1): Likewise.
+	(may_insert_breakpoints_1): Likewise.
+	(may_insert_tracepoints_1): Likewise.
+	(may_insert_fast_tracepoints_1): Likewise.
+	(may_stop_1): Likewise.
+	* target.h (target_async_permitted): Likewise.
+	(may_write_registers): Likewise.
+	(may_write_memory): Likewise.
+	(may_insert_breakpoints): Likewise.
+	(may_insert_tracepoints): Likewise.
+	(may_insert_fast_tracepoints): Likewise.
+	(may_stop): Likewise.
+	* thread.c (struct info_threads_opts) <show_global_ids>: Likewise.
+	(make_thread_apply_all_options_def_group): Change argument from int*
+	to bool*.
+	(thread_apply_all_command): Update.
+	(print_thread_events): Change to bool.
+	* top.c (confirm): Likewise.
+	(command_editing_p): Likewise.
+	(history_expansion_p): Likewise.
+	(write_history_p): Likewise.
+	(info_verbose): Likewise.
+	* top.h (confirm): Likewise.
+	(history_expansion_p): Likewise.
+	* tracepoint.c (disconnected_tracing): Likewise.
+	(circular_trace_buffer): Likewise.
+	* typeprint.c (print_methods): Likewise.
+	(print_typedefs): Likewise.
+	* utils.c (debug_timestamp): Likewise.
+	(sevenbit_strings): Likewise.
+	(pagination_enabled): Likewise.
+	* utils.h (sevenbit_strings): Likewise.
+	(pagination_enabled): Likewise.
+	* valops.c (overload_resolution): Likewise.
+	* valprint.h (struct value_print_options) <prettyformat_arrays,
+	prettyformat_structs, vtblprint, unionprint, addressprint, objectprint,
+	stop_print_at_null, print_array_indexes, deref_ref, static_field_print,
+	pascal_static_field_print, raw, summary, symbol_print, finish_print>:
+	Likewise.
+	* windows-nat.c (new_console): Likewise.
+	(cygwin_exceptions): Likewise.
+	(new_group): Likewise.
+	(debug_exec): Likewise.
+	(debug_events): Likewise.
+	(debug_memory): Likewise.
+	(debug_exceptions): Likewise.
+	(useshell): Likewise.
+	* windows-tdep.c (maint_display_all_tib): Likewise.
+	* xml-support.c (debug_xml): Likewise.
+
+2019-09-17  Mike Gulick  <mgulick@mathworks.com>
+
+	* source.c (prepare_path_for_appending): New function.
+	(openp): Make use of new function.
+	(find_and_open_source): Search for the compilation directory and
+	source file as a relative path beneath the directory search path.
+
+2019-09-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* source-cache.c (source_cache::get_line_charpos): Catch
+	exceptions and return false, this matches the behaviour documented
+	in the header file.
+
+2019-09-17  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-tasks.c (info_task): Remove quoting of the task's name.
+
+2019-09-16  Christian Biesinger  <cbiesinger@google.com>
+
+	* symfile.c (auto_solib_add): Replace comment with a reference
+	to the header file.
+
+2019-09-14  Christian Biesinger  <cbiesinger@google.com>
+
+	* NEWS: Mention that gdb can now be compiled with Python 3
+	on Windows.
+
+2019-09-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* maint.c (maint_print_section_data::maint_print_section_data):
+	Force use of 'float log10 (float)' by casting the argument to
+	float.
+
+2019-09-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* maint.c: Add 'cmath' include.
+	(struct maint_print_section_data): New structure.
+	(print_section_index): New function.
+	(print_bfd_section_info): Add header comment, small whitespace
+	cleanup, and update to call new print_section_index function.
+	(print_objfile_section_info): Likewise.
+	(maint_obj_section_from_bfd_section): New function.
+	(print_bfd_section_info_maybe_relocated): New function.
+	(maintenance_info_sections): Add header comment, always use
+	bfd_map_over_sections instead of ALL_OBJFILE_OSECTIONS.
+
+2019-09-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* psymtab.c (find_pc_sect_psymtab): Move baseaddr local into more
+	inner scope, add check that the objfile has psymtabs before
+	checking psymtabs_addrmap.
+	* psymtab.h (psymtab_storage) <psymtabs_addrmap>: Extend comment.
+
+2019-09-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Announce that Ada task names are now shown at more places,
+	and between quotes (except in info task output).
+	* ada-tasks.c (task_to_str): New function.
+	(display_current_task_id): Call task_to_str.
+	(task_command_1): Likewise.
+	(print_ada_task_info): In non-mi mode, Properly align headers and data
+	when task-id length is > 9 (9 is the default for a 32 bits CORE_ADDR).
+
+2019-09-12  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* procfs.c (procfs_target::wait) <PR_FAULTED>: Get signal from
+	prstatus.pr_lwp.pr_info instead of making it up.
+
+2019-09-11  Christian Biesinger  <cbiesinger@google.com>
+
+	* auto-load.c (auto_load_expand_dir_vars): Update.
+	* defs.h (gdb_datadir): Change to std::string.
+	(python_libdir): Likewise.
+	(relocate_gdb_directory): Change return type to std::string.
+	* guile/guile.c (gdbscm_data_directory): Update.
+	(initialize_scheme_side): Update.
+	* jit.c (jit_reader_dir): Change to std::string.
+	(jit_reader_load_command): Update.
+	* main.c (gdb_datadir): Change to std::string.
+	(python_libdir): Likewise.
+	(set_gdb_data_directory): Update.
+	(relocate_path): Change to return std::string.
+	(relocate_gdb_directory): Change to return std::string.
+	(relocate_gdbinit_path_maybe_in_datadir): Update.
+	(captured_main_1): Update.
+	* python/python.c (do_start_initialization): Update.
+	* top.c (show_gdb_datadir): Update.
+	* xml-syscall.c (xml_init_syscalls_info): Update.
+	(init_syscalls_info): Update.
+
+2019-09-11  Christian Biesinger  <cbiesinger@google.com>
+
+	* main.c (relocate_gdbinit_path_maybe_in_datadir): Factor this code
+	out of get_init_files.
+	(get_init_files): Update.
+
+2019-09-11  Christian Biesinger  <cbiesinger@google.com>
+
+	* main.c (get_init_files): Change to use std::string.
+	(captured_main_1): Update.
+	(print_gdb_help): Update.
+
+2019-09-11  Ali Tamur  <tamur@google.com>
+
+	* target-float.c (host_float_ops<T>::to_longest): Update
+	implementation.
+
+2019-09-11  Christian Biesinger  <cbiesinger@google.com>
+
+	* dbxread.c (read_dbx_symtab): Update.
+	* dwarf2read.c (load_partial_dies): Update.
+	* mdebugread.c (parse_partial_symbols): Update.
+	(handle_psymbol_enumerators): Update.
+	* psympriv.h (add_psymbol_to_list): Change type of copy_names to bool.
+	* psymtab.c (add_psymbol_to_bcache): Likewise.
+	(add_psymbol_to_list): Likewise.
+	* symtab.c (symbol_set_names): Likewise.
+	* symtab.h (symbol_set_names): Likewise.
+	* xcoffread.c (scan_xcoff_symtab): Update.
+
+2019-09-11  Tom Tromey  <tom@tromey.com>
+
+	* symfile-mem.c (symbol_file_add_from_memory): Use
+	bfd_set_filename.
+	* solib-darwin.c (darwin_bfd_open): Use bfd_set_filename.
+	* solib-aix.c (solib_aix_bfd_open): Use bfd_set_filename.
+
+2019-09-10  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf-index-write.c (write_psymbols): Extend error message.
+	(debug_names::insert): Add Ada code.
+	(debug_names::write_psymbols): Remove Ada check.
+	(debug_names) <m_string_obstack>: New member.
+	* dwarf2read.c (gdb_index_symbol_name_matcher): Remove.
+	(gdb_index_symbol_name_matcher::matches): Remove.
+	(mapped_index_base::find_name_components_bounds): Add "lang"
+	parameter.
+	(mapped_index_base::build_name_components): Also split names
+	according to Ada syntax.
+	(dw2_expand_symtabs_matching_symbol): Loop over languages.  Change
+	type of "match_callback".
+	(check_match, check_find_bounds_finds)
+	(dw2_expand_symtabs_matching): Update.
+	(dw2_debug_names_iterator): Add new constructor.
+	(dw2_debug_names_map_matching_symbols): New function.
+	(dw2_debug_names_expand_symtabs_matching): Update.
+	(dwarf2_debug_names_functions): Use
+	dw2_debug_names_map_matching_symbols.
+
+2019-09-10  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (dw2_get_file_names_reader): Add the
+	CU's file name to the results.
+
+2019-09-10  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (add_nonlocal_symbols): Combine calls to
+	map_matching_symbols.  Update.
+	* dwarf2read.c (dw2_map_matching_symbols): Update.
+	* psymtab.c (match_partial_symbol): Change type; update.
+	(psym_map_matching_symbols): Likewise.
+	* symfile-debug.c (debug_qf_map_matching_symbols): Change
+	type; update.
+	* symfile.h (struct quick_symbol_functions)
+	<map_matching_symbols>: Change "name" to be a lookup_name_info.
+	Remove "match".
+
+2019-09-10  Tom Tromey  <tromey@adacore.com>
+
+	* psymtab.c (map_block): Remove.
+	(psym_map_matching_symbols): Use iterate_over_symbols_terminated.
+	* symtab.c (iterate_over_symbols_terminated): New function.
+	* symtab.c (iterate_over_symbols_terminated): Declare.
+
+2019-09-10  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_iterate_over_symbols): Return bool.
+	* language.h (struct language_defn) <la_iterate_over_symbols>:
+	Return bool.
+	* symtab.c (iterate_over_symbols): Return bool.
+	* symtab.h (iterate_over_symbols): Return bool.
+
+2019-09-10  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (aux_add_nonlocal_symbols): Change type.
+	(add_nonlocal_symbols): Update.
+	* dwarf2read.c (dw2_map_matching_symbols): Change type.
+	* psymtab.c (map_block, psym_map_matching_symbols): Change type.
+	* symfile-debug.c (debug_qf_map_matching_symbols): Change type.
+	* symfile.h (struct quick_symbol_functions) <map_matching_symbols>:
+	Change type of "callback".  Remove "data".
+
+
+2019-09-09  Ali Tamur  <tamur@google.com>
+
+	* dwarf2read.c (comp_unit_head): Update comment.                     
+	(dwarf2_dwo_name): New function declaration.                             
+	(dwarf_unit_type_name): New function declaration.                        
+	(read_comp_unit_head): Add support for new compilation units,            
+	DW_UT_partial, DW_UT_skeleton, DW_UT_split_compile, DW_UT_split_type.    
+	Particularly, DW_UT_skeleton and DW_UT_split_compile have dwo_id         
+	(currently named as "signature") in their header. Also clarify error     
+	messages.                                                                
+	(lookup_dwo_id): New function. Returns the dwo id of the given           
+	compile unit.                                                            
+	(lookup_dwo_unit): Use the new lookup_dwo_id function.                   
+	(init_cutu_and_read_dies): Use the new dwarf2_dwo_name and lookup_dwo_id 
+	functions.                                                               
+	(create_dwo_cu_reader): Use the added lookup_dwo_id function.            
+	(dwarf2_dwo_name): Get the dwo name if present.                          
+	(dwarf_unit_type_name): Convert DW_UT_* types to string for diagnostic   
+	purposes.
+
+2019-09-09  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_all_windows_info): Use ui_out.
+
+2019-09-09  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* python/python.c (do_start_initialization): Make progname_copy static,
+	to avoid a leak report.
+
+2019-09-08  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (box_win): Truncate long window titles.
+
+2019-09-07  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2read.c (struct dw2_symtab_iterator) <block_index>:
+	Change type to gdb::optional<block_enum>.
+	(dw2_symtab_iter_init): Change block_index parameter type
+	to gdb::optional<block_enum>.
+	(dw2_lookup_symbol): Change block_index parameter
+	type to block_enum.c
+	(dw2_debug_names_lookup_symbol): Likewise.
+	* psymtab.c (psym_lookup_symbol): Likewise.
+	* symfile-debug.c (debug_qf_lookup_symbol): Likewise.
+	* symfile.h (struct quick_symbol_functions) <lookup_symbol>:
+	Likewise.
+
+2019-09-06  Christian Biesinger  <cbiesinger@google.com>
+
+	* defs.h (relocate_gdb_directory): Change int to bool in
+	signature and rename flag to relocatable.
+	* main.c (relocate_path): Likewise.
+	(relocate_gdb_directory): Likewise.
+
+2019-09-06  Alan Modra  <amodra@gmail.com>
+
+	* coffread.c (coff_symfile_read): Constify filename variable.
+	* dbxread.c (dbx_symfile_init, coffstab_build_psymtabs),
+	(elfstab_build_psymtabs, stabsect_build_psymtabs): Likewise.
+	* gdb_bfd.c (gdb_bfd_close_or_warn): Likewise.
+	* solib.c (reload_shared_libraries_1): Likewise.
+	* symfile.c (reread_symbols): Likewise.
+	* solib-aix.c (solib_aix_bfd_open): Add cast for xfree of filename.
+	* solib-darwin.c (darwin_bfd_open): Likewise.
+	* symfile-mem.c (symbol_file_add_from_memory): Likewise.
+
+2019-09-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* psymtab.c (print_partial_symbols): Handle missing domain_enum
+	values MODULE_DOMAIN and COMMON_BLOCK_DOMAIN.
+
+2019-09-03  Tom Tromey  <tromey@adacore.com>
+
+	* ada-valprint.c (ada_val_print_num): Don't recurse for range
+	types.
+	(has_negatives): Unbias a range type bound.
+	* dwarf2read.c (read_subrange_type): Handle DW_AT_GNU_bias.
+	* gdbtypes.c (operator==): Handle new field.
+	(create_range_type): Add "bias" parameter.
+	(create_static_range_type, resolve_dynamic_range): Update.
+	* gdbtypes.h (struct range_bounds) <bias>: New member.
+	(create_range_type): Add bias parameter.
+	* printcmd.c (print_scalar_formatted): Unbias range types.
+	* value.c (unpack_long): Unbias range types.
+	(pack_long): Bias range types.
+
+2019-09-02  Alan Hayward  <alan.hayward@arm.com>
+
+	* solib-svr4.c (svr4_find_and_create_probe_breakpoints): Check all
+	probe arguments.
+
+2019-09-02  Alan Hayward  <alan.hayward@arm.com>
+
+	* break-catch-throw.c (fetch_probe_arguments): Use gdbarch.
+	* dtrace-probe.c (dtrace_probe::get_argument_count): Likewise.
+	* probe.c (probe_safe_evaluate_at_pc) (compute_probe_arg)
+	(compile_probe_arg): Likewise.
+	* probe.h (get_argument_count): Likewise.
+	* solib-svr4.c (solib_event_probe_action): Likewise.
+	* stap-probe.c (stap_probe::get_argument_count): Likewise.
+
+2019-09-02  Alan Hayward  <alan.hayward@arm.com>
+
+	* solib-svr4.c (svr4_find_and_create_probe_breakpoints): Move
+	code to here...
+	(svr4_create_solib_event_breakpoints): ...from here.
+
+2019-08-30  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* nat/fork-inferior.c (trace_start_error): Remove "\nError: "
+	suffix from warning message.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<refresh_all>: Don't declare.
+	* tui/tui-winsource.c (tui_source_window_base::refresh_all):
+	Remove.
+	* tui/tui-win.c (tui_refresh_all_win): Don't call refresh_all or
+	tui_show_locator_content.
+	* tui/tui-regs.h (struct tui_data_window) <refresh_all>: Don't
+	declare.
+	* tui/tui-regs.c (tui_data_window::refresh_all): Remove.
+	* tui/tui-data.h (struct tui_win_info) <refresh_all>: Don't
+	declare.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-io.c (tui_cont_sig): Don't call wrefresh.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (_initialize_tui_stack): Move later.
+	Remove unnecessary forward declarations.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (tui_locator_window::set_locator_fullname): Call
+	rerender.
+	(tui_update_locator_fullname, tui_show_frame_info): Don't call
+	tui_show_locator_content.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (tui_show_locator_content): Move lower.  Rewrite.
+	(tui_locator_window::rerender): Rewrite using body of previous
+	tui_show_locator_content.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.h (struct tui_locator_window) <set_locator_info,
+	set_locator_fullname>: New methods.
+	* tui/tui-stack.c (tui_locator_window::set_locator_fullname):
+	Rename from tui_set_locator_fullname.
+	(tui_locator_window::set_locator_info): Rename from
+	tui_set_locator_info.  Return bool.
+	(tui_update_locator_fullname, tui_show_frame_info): Update.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_layout): Don't call tui_refresh_all.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Don't
+	call touchwin.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (box_win): Assume win_info and
+	win_info->handle cannot be NULL.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_item_window) <rerender,
+	refresh_window>: Declare.
+	* tui/tui-regs.c (tui_data_window::display_registers_from): Call
+	resize.
+	(tui_data_item_window::rerender): Rename from
+	tui_display_register.
+	(tui_data_item_window::refresh_window): New method.
+	* tui/tui-layout.c (tui_gen_win_info::resize): Do nothing on
+	no-op.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_window) <regs_content,
+	regs_column_count, current_group>: Move later.  Now private.
+	<get_current_group>: New method.
+	* tui/tui-regs.c (tui_reg_command): Update.
+	* tui/tui-layout.c (tui_set_layout): Update.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::display_registers_from_line)
+	(tui_data_window::rerender): Don't call
+	check_and_display_highlight_if_needed.
+	(tui_data_window::refresh_all): Remove call to
+	erase_data_content.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::last_regs_line_no)
+	(tui_data_window::display_registers_from)
+	(tui_data_window::display_reg_element_at_line)
+	(tui_data_window::display_registers_from_line): Remove checks of
+	"empty".
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_window) <display_all_data>:
+	Don't declare.
+	* tui/tui-regs.c (tui_data_window::show_registers): Call
+	rerender.
+	(tui_data_window::rerender): Rename from display_all_data.
+	(tui_data_window::rerender): Remove old implementation.
+
+2019-08-30  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::display_all_data): Change
+	text.
+	* tui/tui-data.h (NO_DATA_STRING): Remove define.
+
+2019-08-29  Bernhard Wodok  <barto@gmx.net>
+	    Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR win32/24284
+	* mingw-hdep.c (gdb_select): Handle case when 'n' is zero.
+
+2019-08-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* symtab.c (search_symbols): Don't include MODULE_DOMAIN symbols
+	when searching for types.
+
+2019-08-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-lang.c (f_language_defn): Use f_print_typedef.
+	* f-lang.h (f_print_typedef): Declare.
+	* f-typeprint.c (f_print_typedef): Define.
+
+2019-08-27  Christian Biesinger  <cbiesinger@google.com>
+
+	* nat/linux-namespaces.c (mnsh_main): Initialize fd (to -1).
+
+2019-08-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cli/cli-utils.c (info_print_options_defs): Delete.
+	(make_info_print_options_def_group): Delete.
+	(extract_info_print_options): Delete.
+	(info_print_command_completer): Delete.
+	(info_print_args_help): Add extra parameter, and optionally
+	include text about -n flag.
+	* cli/cli-utils.h (struct info_print_options): Delete.
+	(extract_info_print_options): Delete declaration.
+	(info_print_command_completer): Delete declaration.
+	(info_print_args_help): Add extra parameter, extend header
+	comment.
+	* python/python.c (gdbpy_rbreak): Pass additional parameter to
+	search_symbols.
+	* stack.c (struct info_print_options): New type.
+	(info_print_options_defs): New file scoped variable.
+	(make_info_print_options_def_group): New static function.
+	(info_print_command_completer): New static function.
+	(info_locals_command): Update to use new local functions.
+	(info_args_command): Likewise.
+	(_initialize_stack): Add extra parameter to calls to
+	info_print_args_help.
+	* symtab.c (search_symbols): Add extra parameter, use this to
+	possibly excluse non-debug symbols.
+	(symtab_symbol_info): Add extra parameter, which is passed on to
+	search_symbols.
+	(struct info_print_options): New type.
+	(info_print_options_defs): New file scoped variable.
+	(make_info_print_options_def_group): New static function.
+	(info_print_command_completer): New static function.
+	(info_variables_command): Update to use local functions, and pass
+	extra parameter through to symtab_symbol_info.
+	(info_functions_command): Likewise.
+	(info_types_command): Pass additional argument through to
+	symtab_symbol_info.
+	(rbreak_command): Pass extra argument to search_symbols.
+	(_initialize_symtab): Add extra arguments for calls to
+	info_print_args_help, and update help text for 'info variables',
+	'whereis', and 'info functions' commands.
+	* symtab.h (search_symbols): Add extra argument to declaration.
+	* NEWS: Mention new flags.
+
+2019-08-26  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (lookup_static_symbol): Call the new function (and move
+	it down to be next to lookup_global_symbol).
+	(struct global_sym_lookup_data): Add block_enum member and rename to...
+	(struct global_or_static_sym_lookup_data): ...this.
+	(lookup_symbol_global_iterator_cb): Pass block_index instead of
+	GLOBAL_BLOCK to lookup_symbol_in_objfile and rename to...
+	(lookup_symbol_global_or_static_iterator_cb): ...this.
+	(lookup_global_or_static_symbol): New function.
+	(lookup_global_symbol): Call new function.
+
+2019-08-26  Tom de Vries  <tdevries@suse.de>
+
+	PR c++/24852
+	* break-catch-throw.c (fetch_probe_arguments): Improve error mesage
+	when pc_probe.prob == NULL.
+
+2019-08-25  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2read.c (dw2_debug_names_iterator::next): Rename local
+	variable symbol_linkage to symbol_linkage_.
+
+2019-08-25  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2read.c (dw2_debug_names_iterator::next): Use enum to
+	represent whether the symbol is static, dynamic, or we don't
+	know.
+
+2019-08-25  Yoshinori Sato <ysato@users.sourceforge.jp>
+
+        * rx-tdep.c (rx_register_names): New.
+        (rx_register_name): Delete.
+        (rx_psw_type): Delete.
+        (rx_fpsw_type): Delete.
+        (rx_register_type): Delete.
+        (rx_gdbarch_init): Convert target-descriptions.
+        (_initialize_rx_tdep): Add initialize_tdesc_rx.
+        * features/Makefile: Add rx.xml.
+        * features/rx.xml: New.
+        * features/rx.c: Generated.
+        * NEWS: Mention target description support.
+
+2019-08-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (symbol_cache_lookup): Always initialize *bsc_ptr and
+	*slot_ptr.
+
+2019-08-23  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* configure.ac: Don't check for 'dlfcn.h' (moved to
+	gdbsupport/common.m4).
+	* Makefile.in (COMMON_SFILES): Move 'gdb-dlfcn.c' to
+	'gdbsupport/'.
+	(HFILES_NO_SRCDIR): Likewise, for 'gdb-dlfcn.h'.
+	* compile/compile-c-support.c: Include
+	'gdbsupport/gdb-dlfcn.h'.
+	* gdbsupport/common.m4: Check for 'dlfcn.h'.
+	* gdb-dlfcn.c: Move to...
+	* gdbsupport/gdb-dlfcn.c: ... here.
+	* gdb-dlfcn.h: Move to...
+	* gdbsupport/gdb-dlfcn.h: ... here.
+
+2019-08-23  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* nios2-tdep.c (struct reg_value): Improve comments.  Make
+	the offset field signed.
+
+2019-08-22  Christian Biesinger  <cbiesinger@google.com>
+
+	* python/lib/gdb/__init__.py (_execute_file): New function.
+	* python/python.c (python_run_simple_file): Call gdb._execute_file
+	on Windows.
+
+2019-08-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (yylex): Remove is_a_field_of_this local variable, and
+	all uses as this was never set to anything but a zero value.
+
+2019-08-21  Bogdan Harjoc  <harjoc@gmail.com>
+
+	* cli/cli-cmds.c (with_command_1): Error out if no arguments.
+
+2019-08-21  Christian Biesinger  <cbiesinger@google.com>
+
+	* tui/tui-data.h (tui_gen_win_info): Add an =default
+	move constructor, required by some GCC versions.
+
+2019-08-21  Jinke Fan  <fanjinke51@yeah.net>
+
+	* go32-nat.c (go32_sysinfo): Add hygon_p.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_window) <last_regs_line_no,
+	line_from_reg_element_no, first_reg_element_no_inline,
+	display_all_data, delete_data_content_windows,
+	erase_data_content>: Now private.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (box_win): Change type of highlight_flag.
+	(tui_unhighlight_win, tui_highlight_win)
+	(tui_win_info::make_window): Update.
+	* tui/tui-data.h (HILITE, NO_HILITE): Remove.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (PROC_PREFIX, LINE_PREFIX, PC_PREFIX)
+	(MIN_LINE_WIDTH, MIN_PROC_WIDTH, MAX_TARGET_WIDTH)
+	(MAX_PID_WIDTH): Move to tui-stack.c.
+	* tui/tui-stack.c (PROC_PREFIX, LINE_PREFIX, PC_PREFIX)
+	(MIN_LINE_WIDTH, MIN_PROC_WIDTH, MAX_TARGET_WIDTH)
+	(MAX_PID_WIDTH): Move from tui-data.h.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (tui_make_window): Don't declare.
+	* tui/tui-wingeneral.c (box_win): Change type of win_info.
+	(box_win): Update.
+	(tui_gen_win_info::make_window): Rename from tui_make_window.
+	(tui_win_info::make_window): New method.
+	(tui_gen_win_info::make_visible): Update.
+	* tui/tui-source.c (tui_source_window::set_contents): Update.
+	* tui/tui-regs.c (tui_data_window::show_register_group): Update.
+	(tui_data_window::display_registers_from): Update.
+	* tui/tui-layout.c (tui_gen_win_info::resize): Update.
+	* tui/tui-data.h (struct tui_gen_win_info) <make_window>:
+	Declare.
+	<can_box>: Remove.
+	<title>: Remove.
+	(struct tui_win_info) <make_window>: Declare.
+	<can_box>: Now virtual.
+	<title>: New member.
+	* tui/tui-data.c (~tui_gen_win_info): Don't free title.
+	* tui/tui-command.c (tui_cmd_window::resize): Update.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_window) <display_regs>: Remove.
+	* tui/tui-regs.c (tui_data_window::show_registers): Update.
+	(tui_data_window::check_register_values): Update.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_window): Use
+	DISABLE_COPY_AND_ASSIGN.
+	<regs_content>: Change type, removing unique_ptr.
+	<tui_data_window>: Add move constructor.
+	* tui/tui-regs.c (tui_data_window::show_registers)
+	(tui_data_window::show_register_group)
+	(tui_data_window::display_registers_from)
+	(tui_data_window::display_registers_from)
+	(tui_data_window::first_data_item_displayed)
+	(tui_data_window::delete_data_content_windows)
+	(tui_data_window::rerender, tui_data_window::refresh_window)
+	(tui_data_window::check_register_values): Update.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_window) <show_registers,
+	show_register_group>: Declare.
+	(tui_show_register_group): Don't declare.
+	* tui/tui-regs.c (tui_data_window::show_registers): Rename from
+	tui_show_registers.
+	(tui_data_window::show_register_group): Rename from
+	tui_show_register_group.
+	(tui_data_window::check_register_values, tui_reg_command):
+	Update.
+	* tui/tui-layout.c (tui_set_layout): Update.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_window) <check_register_values>:
+	Declare.
+	(tui_check_register_values): Don't declare.
+	* tui/tui-regs.c (tui_data_window::check_register_values): Rename
+	from tui_check_register_values.
+	* tui/tui-hooks.c (tui_register_changed): Update.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_reg_layout): Move later.
+	(tui_show_registers): Don't enable TUI mode or change layout.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_item_window)
+	<~tui_data_item_window>: Remove.
+	<content>: Now a unique_xmalloc_ptr.
+	* tui/tui-regs.c (tui_register_format): Return a
+	unique_xmalloc_ptr.
+	(tui_get_register): Update.
+	(~tui_data_item_window): Remove.
+	(tui_data_window::display_registers_from, tui_display_register):
+	Update.
+	* tui/tui-io.h (tui_expand_tabs): Update.
+	* tui/tui-io.c (tui_expand_tabs): Return a unique_xmalloc_ptr.
+	Remove "col" parameter.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_item_window) <value>: Remove
+	field.
+	* tui/tui-regs.c (~tui_data_item_window): Update.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_register_format, tui_get_register): Move
+	earlier.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_reg_command): Remove NULL check.
+
+2019-08-20  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.h (struct tui_source_window): Update.
+	* tui/tui-regs.c (tui_show_registers): Update.
+	* tui/tui-disasm.h (struct tui_disasm_window): Update.
+	* tui/tui-data.h (NO_SRC_STRING, NO_DISASSEM_STRING)
+	(NO_REGS_STRING): Remove defines.
+
+2019-08-20  Conrad Meyer  <cem@FreeBSD.org>
+
+	* remote.c (remote_target::remote_btrace_maybe_reopen): Avoid
+	unnecessary thread walk if remote doesn't support the packet.
+
+2019-08-19  Tom Tromey  <tromey@adacore.com>
+
+	* python/py-value.c (value_has_field): Fix indentation.
+
+2019-08-19  Tom Tromey  <tromey@adacore.com>
+
+	* printcmd.c (do_one_display, info_display_command): Update.
+	* block.h (contained_in): Return bool.  Add allow_nested
+	parameter.
+	* block.c (contained_in): Return bool.  Add allow_nested
+	parameter.
+
+2019-08-19  Tom Tromey  <tom@tromey.com>
+
+	* configure: Rebuild.
+	* configure.ac: Disallow the combination of -static-libstdc++ and
+	source highlight.
+	* source-cache.c (get_language_name): Handle rust.
+	(source_cache::get_source_lines): Ignore highlighting exceptions.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.h (enum tui_win_type) <EXEC_INFO_WIN>: Remove.
+	* tui/tui-winsource.h (struct tui_exec_info_window): Remove.
+	(struct tui_source_window_base) <make_visible, refresh_window,
+	resize>: Remove methods.
+	<execution_info>: Remove field.
+	* tui/tui-winsource.c (tui_source_window_base::do_erase_source_content)
+	(tui_show_source_line, tui_source_window_base)
+	(~tui_source_window_base): Update.
+	(tui_source_window_base::resize)
+	(tui_source_window_base::make_visible)
+	(tui_source_window_base::refresh_window): Remove.
+	(tui_source_window_base::update_exec_info): Update.
+	* tui/tui-source.c (tui_source_window::set_contents): Update.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-hooks.c (tui_remove_hooks): Don't set
+	deprecated_query_hook.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_windows_with_addr)
+	(tui_update_source_windows_with_line): Update.
+	* tui/tui-source.h (struct tui_source_window)
+	<show_symtab_source>: Declare.
+	(tui_show_symtab_source): Don't declare.
+	* tui/tui-source.c (tui_show_symtab_source): Rename from
+	tui_show_symtab_source.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<set_contents>: Declare.
+	* tui/tui-winsource.c
+	(tui_source_window_base::update_source_window_as_is): Update.
+	* tui/tui-source.h (struct tui_source_window) <set_contents>:
+	Declare.
+	(tui_set_source_content): Don't declare.
+	* tui/tui-source.c (tui_source_window::set_contents): Rename from
+	tui_set_source_content.
+	* tui/tui-disasm.h (struct tui_disasm_window) <set_contents>:
+	Declare.
+	(tui_set_disassem_content): Don't declare.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents): Rename from
+	tui_set_disassem_content.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<update_breakpoint_info>: Declare.
+	(tui_update_breakpoint_info): Don't declare.
+	* tui/tui-winsource.c (tui_source_window_base::update_source_window_as_is)
+	(tui_update_all_breakpoint_info): Update.
+	(tui_source_window_base::update_breakpoint_info): Rename from
+	tui_update_breakpoint_info.
+	(tui_source_window_base::update_exec_info): Update.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<update_source_window>: Declare.
+	(tui_update_source_window): Don't declare.
+	* tui/tui-winsource.c
+	(tui_source_window_base::update_source_window): Rename from
+	tui_update_source_window.
+	(tui_source_window_base::rerender): Update.
+	* tui/tui-source.c (tui_source_window::maybe_update): Update.
+	* tui/tui-disasm.c (tui_show_disassem)
+	(tui_show_disassem_and_update_source)
+	(tui_disasm_window::maybe_update): Update.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<update_source_window_as_is>: Declare.
+	(tui_update_source_window_as_is): Don't declare.
+	* tui/tui-winsource.c (tui_update_source_window): Update
+	(tui_source_window_base::update_source_window_as_is): Rename from
+	tui_update_source_window_as_is.
+	(tui_source_window_base::refill): Update.
+	* tui/tui-source.c (tui_show_symtab_source): Update.
+	* tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical):
+	Update.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_update_source_window)
+	(tui_update_source_window_as_is): Remove "noerror" parameter.
+	* tui/tui-winsource.c (tui_update_source_window)
+	(tui_update_source_window_as_is): Remove "noerror" parameter.
+	(tui_update_source_windows_with_addr)
+	(tui_update_source_windows_with_line)
+	(tui_source_window_base::rerender)
+	(tui_source_window_base::refill): Update.
+	* tui/tui-source.h (tui_set_source_content)
+	(tui_show_symtab_source): Remove "noerror" parameter.
+	* tui/tui-source.c (tui_set_source_content): Remove "noerror"
+	parameter.
+	(tui_show_symtab_source): Likewise.
+	(tui_source_window::maybe_update): Update.
+	* tui/tui-disasm.c (tui_show_disassem)
+	(tui_show_disassem_and_update_source)
+	(tui_disasm_window::do_scroll_vertical)
+	(tui_disasm_window::maybe_update): Update.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_is_window_visible): Update.
+	* tui/tui-wingeneral.c (tui_make_window)
+	(tui_gen_win_info::make_visible, tui_refresh_all): Update.
+	* tui/tui-win.c (window_name_completer, tui_refresh_all_win)
+	(tui_set_focus_command, tui_all_windows_info, update_tab_width)
+	(tui_set_win_height_command, parse_scrolling_args): Update.
+	* tui/tui-source.c (tui_source_window::style_changed): Update.
+	* tui/tui-regs.c (tui_show_registers)
+	(tui_data_window::first_data_item_displayed)
+	(tui_data_window::delete_data_content_windows)
+	(tui_check_register_values, tui_reg_command): Update.
+	* tui/tui-disasm.c (tui_show_disassem): Update.
+	* tui/tui-data.h (struct tui_gen_win_info) <is_visible>: New
+	method.
+	<is_visible>: Remove field.
+	* tui/tui-data.c (tui_next_win, tui_prev_win)
+	(tui_delete_invisible_windows): Update.
+
+2019-08-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<m_has_locator>: Remove.
+	* tui/tui-layout.c (show_source_disasm_command, show_data)
+	(show_source_or_disasm_and_command): Update.
+
+2019-08-16  Alan Hayward  <alan.hayward@arm.com>
+
+	* NEWS (Other MI changes): New subsection.
+	* aarch64-tdep.c (aarch64_get_pc_address_flags): New function.
+	(aarch64_gdbarch_init): Add aarch64_get_pc_address_flags.
+	* arch-utils.c (default_get_pc_address_flags): New function.
+	* arch-utils.h (default_get_pc_address_flags): New declaration.
+	* gdbarch.sh: Add get_pc_address_flags.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Likewise.
+	* stack.c (print_pc): New function.
+	(print_frame_info) (print_frame): Call print_pc.
+
+2019-08-16  Tom de Vries  <tdevries@suse.de>
+
+	* maint.c (maintenance_info_sections): Also handle !ALLOBJ case using
+	print_objfile_section_info.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-io.c (tui_puts_internal): Check TUI_CMD_WIN before
+	calling update_cmdwin_start_line.
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<do_make_visible_with_new_height, set_new_height>: Don't declare.
+	<rerender>: Declare.
+	* tui/tui-winsource.c (tui_source_window_base::update_tab_width):
+	Call rerender.
+	(tui_source_window_base::set_new_height): Remove.
+	(tui_source_window_base::rerender): Rename from
+	do_make_visible_with_new_height.
+	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Use
+	resize method.
+	(tui_win_info::make_invisible_and_set_new_height)
+	(tui_win_info::make_visible_with_new_height): Remove.
+	* tui/tui-stack.h (struct tui_locator_window) <rerender>:
+	Declare.
+	* tui/tui-stack.c (tui_locator_window::rerender): New method.
+	* tui/tui-regs.h (struct tui_data_window) <set_new_height,
+	do_make_visible_with_new_height>: Don't declare.
+	<rerender>: Declare.
+	* tui/tui-regs.c (tui_data_window::rerender): Rename from
+	set_new_height.
+	(tui_data_window::do_make_visible_with_new_height): Remove.
+	* tui/tui-layout.c (show_source_disasm_command, show_data): Don't
+	call tui_show_locator_content.
+	(tui_gen_win_info::resize): Call rerender.
+	(show_source_or_disasm_and_command): Don't call
+	tui_show_locator_content.
+	* tui/tui-data.h (struct tui_gen_win_info) <rerender>: New
+	method.
+	(struct tui_win_info) <rerender>: Declare.
+	<set_new_height, make_invisible_and_set_new_height,
+	make_visible_with_new_height>: Don't declare.
+	* tui/tui-data.c (tui_win_list::rerender): New method.
+	* tui/tui-command.h (struct tui_cmd_window)
+	<do_make_visible_with_new_height>: Don't declare.
+	* tui/tui-command.c
+	(tui_cmd_window::do_make_visible_with_new_height): Remove.
+
+2019-08-15  Tom Tromey  <tromey@adacore.com>
+
+	* ada-exp.y (convert_char_literal): Handle "Q%c" encoding.
+	* ada-lang.c (ada_enum_name): Likewise.
+
+2019-08-15  Christian Biesinger  <cbiesinger@google.com>
+
+	* python/lib/gdb/__init__.py (GdbOutputFile): Rename to have a
+	leading underscore.
+	(GdbOutputErrorFile): Likewise.
+	(global scope): Adjust constructor calls to GdbOutput{,Error}File
+	accordingly.
+	(execute_unwinders): Rename to have a leading underscore.
+	(auto_load_packages): Likewise.
+	(global scope): Adjust call to auto_load_packages accordingly.
+	(GdbSetPythonDirectory): Likewise.
+	* python/py-unwind.c (pyuw_sniffer): Call _execute_unwinders
+	instead of execute_unwinders.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_layout, show_source_disasm_command)
+	(show_data): Don't change window visibility.
+	(tui_gen_win_info::resize): Remove special case for command
+	window.  Use wresize, when available.
+	(show_source_or_disasm_and_command): Don't change window
+	visibility.
+	* tui/tui-command.h (struct tui_cmd_window) <resize>: Declare.
+	<make_visible>: New method.
+	* tui/tui-command.c (tui_cmd_window::resize): New method.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_iterator): New.
+	(struct tui_source_windows): New.
+	* tui/tui-winsource.c (tui_display_main): Update.
+	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
+	(new_height_ok, parse_scrolling_args): Update.
+	* tui/tui-layout.c (show_layout, show_data): Update.
+	* tui/tui-data.h (tui_source_windows, tui_clear_source_windows)
+	(tui_add_to_source_windows): Don't declare.
+	* tui/tui-data.c (source_windows, tui_source_windows)
+	(tui_clear_source_windows, tui_add_to_source_windows): Remove.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base) <resize>:
+	Rename from reset.
+	* tui/tui-winsource.c (tui_source_window_base::resize): Rename.
+	* tui/tui-layout.c (show_source_disasm_command, show_data):
+	Update.
+	(tui_gen_win_info::resize): Rename.
+	(show_source_or_disasm_and_command): Update.
+	* tui/tui-data.h (struct tui_gen_win_info) <resize>: Rename from
+	reset.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (tui_initialize_static_data): Remove.
+	* tui/tui-interp.c (tui_interp::init): Don't call
+	tui_initialize_static_data.
+	* tui/tui-data.h (tui_initialize_static_data): Don't declare.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (tui_default_win_viewport_height): Don't
+	examine tui_win_list.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_clear_source_content): Don't declare.
+	* tui/tui-winsource.c (tui_update_source_window_as_is): Don't call
+	tui_clear_source_content.
+	(tui_clear_source_content): Remove.
+	(tui_source_window_base::do_erase_source_content): Hoist call to
+	content.clear().
+	* tui/tui-stack.c (tui_show_frame_info): Don't call
+	tui_clear_source_content.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<do_erase_source_content>: New method.
+	<erase_source_content>: New method.
+	(tui_erase_source_content): Don't declare.
+	* tui/tui-winsource.c (tui_clear_source_content): Update.
+	(tui_source_window_base::do_erase_source_content): Rename from
+	tui_erase_source_content.
+	(tui_source_window_base::show_source_content): Update.
+	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update.
+	* tui/tui-source.h (struct tui_source_window)
+	<erase_source_content>: New method.
+	* tui/tui-disasm.h (struct tui_disasm_window)
+	<erase_source_content>: New method.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_alloc_source_buffer): Don't declare.
+	(struct tui_source_element): Add DISABLE_COPY_AND_ASSIGN, and move
+	constructor.
+	* tui/tui-winsource.c (tui_alloc_source_buffer): Remove.
+	* tui/tui-source.c (tui_set_source_content): Update.
+	* tui/tui-disasm.c (tui_set_disassem_content): Update.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_line_is_displayed): Don't declare.
+	* tui/tui-winsource.c (tui_line_is_displayed): Move to
+	tui-source.c.
+	* tui/tui-source.h (struct tui_source_window) <line_is_displayed>:
+	Declare.
+	* tui/tui-source.c (tui_source_window::line_is_displayed): New
+	method.
+	(tui_source_window::maybe_update): Update.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_addr_is_displayed): Don't declare.
+	* tui/tui-winsource.c (tui_addr_is_displayed): Move to
+	tui-disasm.c.
+	* tui/tui-disasm.h (struct tui_disasm_window) <addr_is_displayed>:
+	Declare.
+	* tui/tui-disasm.c (tui_disasm_window::addr_is_displayed): New
+	method.
+	(tui_disasm_window::maybe_update): Update.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<maybe_update>: Declare.
+	* tui/tui-stack.c (tui_show_frame_info): Call maybe_update
+	method.
+	* tui/tui-source.h (struct tui_source_window) <maybe_update>:
+	Declare.
+	* tui/tui-source.c (tui_source_window::maybe_update): New method.
+	* tui/tui-disasm.h (struct tui_disasm_window) <maybe_update>:
+	Declare.
+	* tui/tui-disasm.c (tui_disasm_window::maybe_update): New method.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (tui_make_status_line): Use string constructor.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c: Include tui-stack.h.
+	* tui/tui-stack.h (MAX_LOCATOR_ELEMENT_LEN)
+	(struct tui_locator_window): Move from tui-data.h.
+	* tui/tui-stack.c (_locator, tui_locator_win_info_ptr)
+	(tui_initialize_static_data): Move from tui-data.c.
+	* tui/tui-data.h (MAX_LOCATOR_ELEMENT_LEN)
+	(struct tui_locator_window): Move to tui-stack.c.
+	* tui/tui-data.c (_locator, tui_locator_win_info_ptr)
+	(tui_initialize_static_data): Move to tui-stack.c.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_source_disasm_command)
+	(show_source_or_disasm_and_command): Use make_visible method, not
+	tui_make_window.
+	* tui/tui-command.h (struct tui_cmd_window) <make_visible>:
+	Remove.
+
+2019-08-15  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (tui_make_window): Update.
+	* tui/tui-wingeneral.c (tui_make_window): Remove "box_it"
+	parameter.
+	(tui_gen_win_info::make_visible): Update.
+	* tui/tui-regs.c (tui_data_window::display_registers_from):
+	Update.
+	* tui/tui-layout.c (show_source_disasm_command)
+	(show_source_or_disasm_and_command): Update.
+	* tui/tui-data.h (struct tui_gen_win_info) <can_box>: New method.
+	(enum tui_box): Remove.
+	(struct tui_win_info) <can_box>: New method.
+	* tui/tui-command.h (struct tui_cmd_window) <can_box>: New
+	method.
+
+2019-08-15  Tom de Vries  <tdevries@suse.de>
+
+	* linux-nat-trad.c: Include gdbarch.h.
+
+2019-08-14  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c (aarch64_analyze_prologue): Allow any valid
+	register sizes.
+
+2019-08-14  Tom Tromey  <tromey@adacore.com>
+
+	* darwin-nat.c: Include gdbarch.h.
+	* darwin-nat-info.c: Include gdbarch.h.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_gen_win_info) <last_visible_line>:
+	Remove.
+	* tui/tui-data.c (tui_initialize_static_data): Update.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_exec_info_window)
+	<~tui_exec_info_window, maybe_allocate_content, get_content,
+	m_content>: Remove.
+	(struct tui_source_window_base) <set_exec_info_content,
+	show_exec_info_content>: Don't declare.
+	* tui/tui-winsource.c
+	(tui_exec_info_window::maybe_allocate_content): Remove.
+	(tui_source_window_base::update_exec_info): Rename from
+	set_exec_info_content.
+	(tui_source_window_base::show_exec_info_content)
+	(tui_source_window_base::update_exec_info): Remove.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_clear_exec_info_content): Don't
+	declare.
+	* tui/tui-winsource.c (tui_update_source_window_as_is)
+	(tui_update_source_windows_with_addr, tui_erase_source_content):
+	Update.
+	(tui_clear_exec_info_content): Remove.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_erase_exec_info_content): Don't
+	declare.
+	* tui/tui-winsource.c (tui_source_window_base::refresh_all): Don't
+	call tui_erase_exec_info_content.
+	(tui_clear_exec_info_content): Rename from
+	tui_erase_exec_info_content.
+	(tui_clear_exec_info_content): Delete.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<show_exec_info_content>: Declare.
+	(tui_show_exec_info_content): Don't declare.
+	* tui/tui-winsource.c
+	(tui_source_window_base::show_exec_info_content): Rename from
+	tui_show_exec_info_content.
+	(tui_source_window_base::update_exec_info): Update.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (enum tui_bp_flag, tui_bp_flags, struct tui_source_element)
+	(TUI_BP_HIT_POS, TUI_BP_BREAK_POS, TUI_EXEC_POS)
+	(TUI_EXECINFO_SIZE, tui_exec_info_content): Move ...
+	* tui/tui-winsource.h (enum tui_bp_flag, tui_bp_flags, struct
+	tui_source_element, TUI_BP_HIT_POS, TUI_BP_BREAK_POS)
+	(TUI_EXEC_POS, TUI_EXECINFO_SIZE, tui_exec_info_content):
+	... here.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<update_exec_info>: Declare.
+	(tui_update_exec_info): Don't declare.
+	* tui/tui-winsource.c (tui_update_source_window_as_is)
+	(tui_source_window_base::refresh_all)
+	(tui_update_all_breakpoint_info): Update.
+	(tui_source_window_base::update_exec_info): Rename from
+	tui_update_exec_info.
+	* tui/tui-stack.c (tui_show_frame_info): Update.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<set_exec_info_content>: Declare.
+	(tui_set_exec_info_content): Don't declare.
+	* tui/tui-winsource.c
+	(tui_source_window_base::set_exec_info_content): Rename from
+	tui_set_exec_info_content.
+	(tui_update_exec_info): Update.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<show_source_content>: Declare.
+	(tui_show_source_content): Don't declare.
+	* tui/tui-winsource.c (tui_update_source_window_as_is): Update.
+	(tui_source_window_base::show_source_content): Rename from
+	tui_show_source_content.
+	(tui_source_window_base::refresh_all): Update.
+	* tui/tui-layout.c (show_source_disasm_command)
+	(show_source_or_disasm_and_command): Update.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_erase_source_content)
+	(tui_show_source_content, tui_source_window_base::refresh_all):
+	Update.
+	* tui/tui-wingeneral.h
+	(tui_check_and_display_highlight_if_needed): Don't declare.
+	* tui/tui-wingeneral.c
+	(tui_win_info::check_and_display_highlight_if_needed): Rename from
+	check_and_display_highlight_if_needed.
+	* tui/tui-win.c (tui_rehighlight_all)
+	(tui_win_info::make_visible_with_new_height): Update.
+	* tui/tui-regs.c (tui_data_window::display_registers_from_line)
+	(tui_data_window::erase_data_content)
+	(tui_data_window::display_all_data): Update.
+	* tui/tui-data.h (struct tui_win_info)
+	<check_and_display_highlight_if_needed>: Declare.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_resize_all): Call
+	tui_delete_invisible_windows.
+	* tui/tui-layout.c (show_layout): Call
+	tui_delete_invisible_windows.
+	* tui/tui-data.h (tui_delete_invisible_windows): Declare.
+	* tui/tui-data.c (tui_delete_invisible_windows): New function.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-disasm.c (tui_show_disassem): Add assertion.  Don't call
+	tui_add_win_to_layout.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.h (tui_default_win_height): Don't declare.
+	* tui/tui-layout.c (tui_default_win_height): Now static.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_layout): Unify all layout cases into a
+	single switch.
+	(show_source_disasm_command, show_source_or_disasm_and_command):
+	Don't check current layout.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (make_all_visible): Remove.
+	(tui_make_all_invisible): Simplify.
+	* tui/tui-layout.c (tui_make_all_invisible): Move from
+	tui-wingeneral.c; simplify.
+	(show_layout): Hoist call to tui_make_all_invisible.
+	(show_data): Don't call tui_make_all_invisible.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (tui_make_all_visible): Don't declare.
+	* tui/tui-wingeneral.c (tui_make_all_visible): Remove.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (current_layout, tui_current_layout): Move from
+	tui-data.c.
+	(show_source_disasm_command, show_data)
+	(show_source_or_disasm_and_command): Don't use
+	tui_set_current_layout_to.
+	* tui/tui-data.h (tui_set_current_layout_to): Don't declare.
+	* tui/tui-data.c (current_layout, tui_current_layout): Move to
+	tui-layout.c.
+	(tui_set_current_layout_to): Remove.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (tui_set_layout): Update.
+	* tui/tui-data.h (struct tui_layout_def): Remove.
+	(tui_layout_def): Don't declare.
+	* tui/tui-data.c (layout_def): Remove.
+	(tui_layout_def): Remove.
+
+2019-08-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<clear_detail>: No longer "override".
+	* tui/tui-regs.h (struct tui_data_window) <clear_detail>: Remove.
+	* tui/tui-regs.c (tui_data_window::clear_detail): Remove.
+	* tui/tui-data.h (struct tui_win_info) <clear_detail>: Remove.
+	* tui/tui-command.h (struct tui_cmd_window) <clear_detail>:
+	Remove.
+	* tui/tui-command.c (tui_cmd_window::clear_detail): Remove.
+
+2019-08-13  Tom Tromey  <tromey@adacore.com>
+
+	* tracepoint.c: Don't include readline.h or history.h.
+
+2019-08-12  Tom Tromey  <tom@tromey.com>
+
+	* configure: Rebuild.
+	* configure.ac: Check for readline 7.
+	* NEWS: Mention readline 7 requirement.
+	* README: Update.
+
+2019-08-12  Tom Tromey  <tom@tromey.com>
+
+	* mingw-hdep.c (gdb_select): Remove readline hack.
+
+2019-08-09  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* blockframe.c (find_pc_partial_function): Set *block to nullptr
+	when the function fails.
+
+2019-08-09  Andreas Arnez  <arnez@linux.ibm.com>
+
+	* s390-tdep.c (s390_type_align): New function.
+	(s390_gdbarch_init): Set it as type_align gdbarch method.
+
+2019-08-09  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/24591
+	* dwarf2read.c (dwarf2_fetch_die_loc_sect_off): Adjust pc_high and
+	pc_low with relocation offset.
+
+2019-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* stack.c (print_frame_arg, read_frame_local, read_frame_arg)
+	(print_frame_args): Update.
+	* python/py-framefilter.c (py_print_single_arg, enumerate_args):
+	Update.
+	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
+	* frame.h (struct frame_arg): Add initializers.
+	<error>: Now a unique_xmalloc_ptr.
+
+2019-08-07  Alan Hayward  <alan.hayward@arm.com>
+
+	* NEWS: Expand the Pointer Authentication entry.
+	* aarch64-tdep.c (aarch64_frame_unmask_address): Rename from this.
+	(aarch64_frame_unmask_lr): ... to this.
+	(aarch64_prologue_prev_register, aarch64_dwarf2_prev_register):
+	Call aarch64_frame_unmask_lr.
+	* frame.c (struct frame_info): Add "masked" variable.
+	(frame_set_previous_pc_masked) (frame_get_pc_masked): New functions.
+	(fprint_frame): Check for masked pc.
+	* frame.h (frame_set_previous_pc_masked) (frame_get_pc_masked): New
+	declarations.
+	* python/py-framefilter.c (py_print_frame): Check for masked pc.
+	* stack.c (print_frame): Check for masked pc.
+
+2019-08-06  Tom Tromey  <tom@tromey.com>
+
+	* stabsread.c (patch_block_stabs, read_one_struct_field)
+	(read_enum_type): Use obstack_strndup.
+	* rust-exp.y (rust_parser::copy_name): Use obstack_strndup.
+	* gdb_obstack.h (obstack_strndup): Use obstack_strndup.
+	* dwarf2read.c (guess_full_die_structure_name)
+	(anonymous_struct_prefix): Use obstack_strndup.
+	* dbxread.c (cp_set_block_scope): Use obstack_strndup.
+	* c-exp.y (yylex): Use obstack_strndup.
+	* ada-exp.y (write_object_renaming, write_ambiguous_var)
+	(write_var_or_type): Use obstack_strndup.
+
+2019-08-06  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (reread_symbols): Use obstack_strdup.
+	* stabsread.c (read_type): Use obstack_strdup.
+	* gdb_obstack.h (obstack_strdup): New overload.
+	* dwarf2read.c (dwarf2_compute_name, create_dwo_unit_in_dwp_v1)
+	(create_dwo_unit_in_dwp_v2, build_error_marker_type)
+	(dwarf2_canonicalize_name): Use obstack_strdup.
+	* dbxread.c (read_dbx_symtab): Use obstack_strdup.
+	* cp-support.c (inspect_type, replace_typedefs_qualified_name):
+	Use obstack_strdup.
+
+2019-08-06  Tom Tromey  <tom@tromey.com>
+
+	* gdb_obstack.h (obstack_strdup): Define.
+	* gdb_obstack.c (obstack_strdup): Don't define.
+
+2019-08-06  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (SYMNAME_ALLOC, process_xcoff_symbol): Use
+	obstack_strdup.
+	* typeprint.c (typedef_hash_table::find_global_typedef): Use
+	obstack_strdup.
+	* symfile.c (allocate_compunit_symtab): Use obstack_strdup.
+	* stabsread.c (common_block_start): Use obstack_strdup.
+	* objfiles.c (set_objfile_main_name, objfile): Use
+	obstack_strdup.
+	* namespace.c (add_using_directive): Use obstack_strdup.
+	* mdebugread.c (parse_symbol, parse_type): Use obstack_strdup.
+	* jit.c (finalize_symtab): Use obstack_strdup.
+	* dwarf2read.c (fixup_go_packaging, dwarf2_physname)
+	(guess_partial_die_structure_name, partial_die_info::fixup)
+	(dwarf2_name): Use obstack_strdup.
+	* coffread.c (coff_read_struct_type, coff_read_enum_type): Use
+	obstack_strdup.
+	* c-exp.y (scan_macro_expansion): Use obstack_strdup.
+	* buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Use
+	obstack_strdup.
+	* ada-lang.c (ada_decode_symbol): Use obstack_strdup.
+
+2019-08-07  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* unittests/help-doc-selftests.c: New file.
+	* Makefile.in: Add the new file.
+
+2019-08-07  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-decode.h (print_doc_line): Add for_value_prefix argument.
+	* cli/cli-decode.c (print_doc_line): Likewise.  It now prints
+	the full first line, except when FOR_VALUE_PREFIX.  In this case,
+	the trailing '.' is not output, and the first character is uppercased.
+	(print_help_for_command): Update call to print_doc_line.
+	(print_doc_of_command): Likewise.
+	* cli/cli-setshow.c (deprecated_show_value_hack): Likewise.
+	* cli/cli-option.c (append_indented_doc): Do not append newline.
+	(build_help_option): Append newline after first appended_indented_doc
+	only if a second call is done.
+	(build_help): Append 2 new lines before each option, except the first
+	one.
+	* compile/compile.c (_initialize_compile): Add new lines after
+	%OPTIONS%, when not at the end of the help.
+	Change help doc or code
+	producing the help doc to respect the invariants.
+	* maint-test-options.c (_initialize_maint_test_options): Likewise.
+	Also removed the new line after 'Options:', as all other commands
+	do not put an empty line between 'Options:' and the first option.
+	* printcmd.c (_initialize_printcmd): Likewise.
+	* stack.c (_initialize_stack): Likewise.
+	* interps.c (interpreter_exec_cmd): Fix "Usage:" line that was
+	incorrectly telling COMMAND is optional.
+	* ada-lang.c (_initialize_ada_language): Change help doc or code
+	producing the help doc to respect the invariants.
+	* ada-tasks.c (_initialize_ada_tasks): Likewise.
+	* breakpoint.c (_initialize_breakpoint): Likewise.
+	* cli/cli-cmds.c (_initialize_cli_cmds): Likewise.
+	* cli/cli-logging.c (_initialize_cli_logging): Likewise.
+	* cli/cli-setshow.c (_initialize_cli_setshow): Likewise.
+	* cli/cli-style.c (cli_style_option::add_setshow_commands,
+	_initialize_cli_style): Likewise.
+	* corelow.c (core_target_info): Likewise.
+	* dwarf-index-cache.c (_initialize_index_cache): Likewise.
+	* dwarf2read.c (_initialize_dwarf2_read): Likewise.
+	* filesystem.c (_initialize_filesystem): Likewise.
+	* frame.c (_initialize_frame): Likewise.
+	* gnu-nat.c (add_task_commands): Likewise.
+	* infcall.c (_initialize_infcall): Likewise.
+	* infcmd.c (_initialize_infcmd): Likewise.
+	* interps.c (_initialize_interpreter): Likewise.
+	* language.c (_initialize_language): Likewise.
+	* linux-fork.c (_initialize_linux_fork): Likewise.
+	* maint-test-settings.c (_initialize_maint_test_settings): Likewise.
+	* maint.c (_initialize_maint_cmds): Likewise.
+	* memattr.c (_initialize_mem): Likewise.
+	* printcmd.c (_initialize_printcmd): Likewise.
+	* python/lib/gdb/function/strfns.py (_MemEq, _StrLen, _StrEq,
+	_RegEx): Likewise.
+	* ravenscar-thread.c (_initialize_ravenscar): Likewise.
+	* record-btrace.c (_initialize_record_btrace): Likewise.
+	* record-full.c (_initialize_record_full): Likewise.
+	* record.c (_initialize_record): Likewise.
+	* regcache-dump.c (_initialize_regcache_dump): Likewise.
+	* regcache.c (_initialize_regcache): Likewise.
+	* remote.c (add_packet_config_cmd, init_remote_threadtests,
+	_initialize_remote): Likewise.
+	* ser-tcp.c (_initialize_ser_tcp): Likewise.
+	* serial.c (_initialize_serial): Likewise.
+	* skip.c (_initialize_step_skip): Likewise.
+	* source.c (_initialize_source): Likewise.
+	* stack.c (_initialize_stack): Likewise.
+	* symfile.c (_initialize_symfile): Likewise.
+	* symtab.c (_initialize_symtab): Likewise.
+	* target-descriptions.c (_initialize_target_descriptions): Likewise.
+	* top.c (init_main): Likewise.
+	* tracefile-tfile.c (tfile_target_info): Likewise.
+	* tracepoint.c (_initialize_tracepoint): Likewise.
+	* tui/tui-win.c (_initialize_tui_win): Likewise.
+	* utils.c (add_internal_problem_command): Likewise.
+	* valprint.c (value_print_option_defs): Likewise.
+
+2019-08-06  Frank Ch. Eigler  <fche@redhat.com>
+
+	PR build/24886
+	* configure.ac: Drop enable-libmcheck support.
+	* configure, config.in: Rebuild.
+	* libmcheck.m4: Remove.
+	* acinclude.m4: Don't include it.
+	* Makefile.in: Don't distribute it.
+	* top.c (print_gdb_configuration): Don't mention it.
+
+2019-08-06  Tom Tromey  <tom@tromey.com>
+
+	* utils.c (set_output_style): Sometimes pass stream to
+	emit_style_escape.
+	* ui-out.h (class ui_out) <can_emit_style_escape>: Declare.
+	* record-btrace.c (btrace_insn_history): Update.
+	* mi/mi-out.h (class mi_ui_out) <can_emit_style_escape>: New
+	method.
+	* disasm.h (gdb_pretty_print_disassembler): Add uiout parameter.
+	Update initializers.
+	<m_uiout>: New field.
+	<m_di>: Move lower.
+	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
+	Remove "uiout" parameter.
+	(dump_insns): Update.
+	* cli-out.h (class cli_ui_out) <can_emit_style_escape>: Declare.
+	* cli-out.c (cli_ui_out::can_emit_style_escape): New method.
+
+2019-08-06  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (symbol_cache_lookup): Change int to enum block_enum.
+	(error_in_psymtab_expansion): Likewise.
+	(lookup_symbol_via_quick_fns): Likewise.
+	(basic_lookup_transparent_type_quick): Likewise.
+	(basic_lookup_transparent_type_1): Likewise.
+
+2019-08-06  Tom Tromey  <tromey@adacore.com>
+
+	* source.c (last_source_error): Now bool.
+	(print_source_lines_base): Make "noprint" bool.  Only open
+	source file when last_source_visited changes.
+
+2019-08-06  Tom Tromey  <tromey@adacore.com>
+
+	* annotate.c (annotate_source_line): Use g_source_cache.
+	* source-cache.c (source_cache::get_plain_source_lines): Change
+	parameters.  Populate m_offset_cache.
+	(source_cache::ensure): New method.
+	(source_cache::get_line_charpos): New method.
+	(extract_lines): Move lower.  Change parameters.
+	(source_cache::get_source_lines): Move lower.
+	* source-cache.h (class source_cache): Update comment.
+	<get_line_charpos>: New method.
+	<get_source_lines>: Update comment.
+	<clear>: Clear m_offset_cache.
+	<get_plain_source_lines>: Change parameters.
+	<ensure>: New method
+	<m_offset_cache>: New member.
+	* source.c (forget_cached_source_info_for_objfile): Update.
+	(info_source_command): Use g_source_cache.
+	(find_source_lines, open_source_file_with_line_charpos): Remove.
+	(print_source_lines_base, search_command_helper): Use g_source_cache.
+	* source.h (open_source_file_with_line_charpos): Don't declare.
+	* symtab.h (struct symtab) <nlines, line_charpos>: Remove.
+	* tui/tui-source.c (tui_source_window::do_scroll_vertical):
+	Use g_source_cache.
+
+2019-08-06  Tom Tromey  <tromey@adacore.com>
+
+	* source-cache.c (source_cache::get_plain_source_lines):
+	Remove "first_line" and "last_line" parameters.
+	(source_cache::get_source_lines): Cache plain text.
+	* source-cache.h (class source_cache)
+	<get_plain_source_lines>: Update.
+
+2019-08-06  Tom Tromey  <tromey@adacore.com>
+
+	* source-cache.c (extract_lines): No longer a method.
+	Changed type of parameter.  Include final newline.
+	(selftests::extract_lines_test): New function.
+	(_initialize_source_cache): Likewise.
+	* source-cache.h (class source_cache)
+	<extract_lines>: Don't declare.
+
+2019-08-06  Tom Tromey  <tromey@adacore.com>
+
+	* breakpoint.c (init_breakpoint_sal): Update.
+	(breakpoint): Update.
+	* breakpoint.h (struct breakpoint) <filter>: Now a
+	unique_xmalloc_ptr.
+
+2019-08-05  Christian Biesinger  <cbiesinger@google.com>
+
+	* NEWS: Mention dictionary access on blocks.
+	* python/py-block.c (blpy_getitem): New function.
+	(block_object_as_mapping): New struct.
+	(block_object_type): Use new struct for tp_as_mapping field.
+
+2019-08-05  Christian Biesinger  <cbiesinger@google.com>
+
+	* objfiles.h (objfile): Add a comment describing partial symbols.
+
+2019-08-05  Tom Tromey  <tromey@adacore.com>
+
+	* compile/compile.c (_initialize_compile): Use _(), not N_().
+	* thread.c (_initialize_thread): Use _(), not N_().
+	* stack.c (_initialize_stack): Use _(), not N_().
+	* printcmd.c (_initialize_printcmd): Use _(), not N_().
+
+2019-08-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2read.c (struct dw2_symtab_iterator):
+	<want_specific_block>: Remove.
+	<block_index>: Change type to gdb::optional.
+	(dw2_symtab_iter_init): Remove WANT_SPECIFIC_BLOCK parameter,
+	change type of BLOCK_INDEX parameter to gdb::optional.
+	(dw2_symtab_iter_next): Re-write in function of gdb::optional.
+	(dw2_lookup_symbol): Don't pass argument for
+	WANT_SPECIFIC_BLOCK.
+	(dw2_expand_symtabs_for_function): Don't pass argument for
+	WANT_SPECIFIC_BLOCK, pass empty optional for BLOCK_INDEX.
+	(class dw2_debug_names_iterator)
+	<dw2_debug_names_iterator>: Remove WANT_SPECIFIC_BLOCK
+	parameter, change BLOCK_INDEX type to gdb::optional.
+	<m_want_specific_block>: Remove.
+	<m_block_index>: Change type to gdb::optional.
+	(dw2_debug_names_iterator::next): Change type of IS_STATIC to
+	gdb::optional.  Re-write in function of gdb::optional.
+	(dw2_debug_names_lookup_symbol): Don't pass argument for
+	WANT_SPECIFIC_BLOCK.
+	(dw2_debug_names_expand_symtabs_for_function): Don't pass
+	argument for WANT_SPECIFIC_BLOCK, pass empty optional for
+	BLOCK_INDEX.
+
+2019-08-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+        * NEWS: Mention changes to "info sources" command.
+
+2019-08-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* symtab.c (filename_partial_match_opts): New struct type.
+	(struct output_source_filename_data): New members
+	regexp, c_regexp, partial_match.
+	(output_source_filename): Use new members to decide to print file.
+	(info_sources_option_defs): New variable.
+	(make_info_sources_options_def_group, print_info_sources_header,
+	info_sources_command_completer):
+	New functions.
+	(info_sources_command): Read new optional arguments.
+	(_initialize_symtab): Update info sources help.
+
+2019-08-02  Alexandre Oliva <oliva@adacore.com>
+
+	* ada-lang.c (exception_support_info_v0): Renamed from...
+	(default_exception_support_info): ... this.  Create new
+	definition for v1.
+	(ada_has_this_exception_support): Look up catch_handlers_sym.
+	(ada_exception_support_info_sniffer): Try v0 after default.
+
+2019-08-01  Tom Tromey  <tromey@adacore.com>
+
+	* ia64-libunwind-tdep.h (struct libunwind_descr): Include
+	gdbarch.h.
+
+2019-08-01  Christian Biesinger  <cbiesinger@google.com>
+
+	* s12z-tdep.c: Fix include path for s12z-opc.h.
+
+2019-08-01  Alan Hayward  <alan.hayward@arm.com>
+
+	* NEWS: Require GNU make 3.82.
+
+2019-07-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (tui_copy_win, tui_box_win): Don't
+	declare.
+
+2019-07-30  Tom Tromey  <tromey@adacore.com>
+
+	* block.c (contained_in): Remove BLOCK_FUNCTION check.
+
+2019-07-30  Kevin Buettner  <kevinb@redhat.com>
+
+	* printcmd.c (print_address_symbolic): Print negative offsets.
+	(build_address_symbolic): Force signed arithmetic when computing
+	offset.
+
+2019-07-30  Christian Biesinger  <cbiesinger@google.com>
+
+	PR/24474: Add a function to lookup static variables.
+	* NEWS: Mention this new function.
+	* python/py-symbol.c (gdbpy_lookup_static_symbol): New function.
+	* python/python-internal.h (gdbpy_lookup_static_symbol): New function.
+	* python/python.c (python_GdbMethods): Add new function.
+
+2019-07-29  Christian Biesinger  <cbiesinger@google.com>
+
+	* NEWS: Mention new functions Objfile.lookup_{global,static}_symbol.
+	* python/py-objfile.c (objfpy_lookup_global_symbol): New function.
+	(objfpy_lookup_static_symbol): New function.
+	(objfile_object_methods): Add new functions.
+
+2019-07-29  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Mention 'set|show print frame-info'.  Mention new
+	'presence' value for 'frame-arguments'.  Mention new '-frame-info'
+	backtrace argument.  Mention that python frame filtering code
+	is now consistent with what 'backtrace' command prints.
+
+2019-07-29  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* frame.h (enum print_what): New value 'SHORT_LOCATION', update
+	comments.
+	(print_frame_info_auto, print_frame_info_source_line,
+	print_frame_info_location, print_frame_info_source_and_location,
+	print_frame_info_location_and_address, print_frame_info_short_location):
+	New declarations.
+	(struct frame_print_options): New member print_frame_info.
+	* extension.h (enum ext_lang_frame_args): New value CLI_PRESENCE.
+	* stack.h (get_user_print_what_frame_info): New declaration.
+	(frame_show_address): New declaration.
+	* stack.c (print_frame_arguments_choices): New value 'presence'.
+	(print_frame_info_auto, print_frame_info_source_line,
+	print_frame_info_location, print_frame_info_source_and_location,
+	print_frame_info_location_and_address, print_frame_info_short_location,
+	print_frame_info_choices, print_frame_info_print_what): New definitions.
+	(print_frame_args): Only print dots for args if print frame-arguments
+	is 'presence'.
+	(frame_print_option_defs): New element for "frame-info".
+	(get_user_print_what_frame_info): New function.
+	(frame_show_address): Make non static.  Move comment to stack.h.
+	(print_frame_info_to_print_what): New function.
+	(print_frame_info): Update comment.  Use fp_opts.print_frame_info
+	to decide what to print.
+	(backtrace_command_1): Handle the new print_frame_arguments_presence
+	value.
+	(_initialize_stack): Call add_setshow_enum_cmd for frame-info.
+	* python/py-framefilter.c (py_print_args): Handle CLI_PRESENCE.
+	(py_print_frame): In non-mi mode, use LOCATION as default for
+	print_what, similarly to frame information printed directly by
+	backtrace command. Handle frame-info user option in non MI mode.
+
+2019-07-27  Kevin Buettner  <kevinb@redhat.com>
+
+	* linux-thread-db.c (thread_db_target::thread_handle_to_thread_info):
+	Add case for debugging 32-bit target on 64-bit host.  Revise
+	comment.
+
+2019-07-27  Kevin Buettner  <kevinb@redhat.com>
+
+	* infrun.c (fill_in_stop_func): Use find_pc_partial_function
+	instead of find_function_entry_range_from_pc.
+
+2019-07-27  Kevin Buettner  <kevinb@redhat.com>
+
+	* stack.c (find_frame_funname): Remove code which preferred
+	minsym over symtab sym in "certain pathological cases".
+
+	* valprint.h (build_address_symbolic): Add "prefer_sym_over_minsym"
+	parameter.  Change type of "do_demangle" to bool.
+	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
+	Pass suitable "prefer_sym_over_minsym" flag to
+	build_address_symbolic().  Don't output "+" for negative offsets.
+	* printcmd.c (print_address_symbolic): Update invocation of
+	build_address_symbolic to include a "prefer_sym_over_minsym"
+	flag.
+	(build_address_symbolic): Add "prefer_sym_over_minsym" parameter.
+	Restrict cases in which use of minimal symbol is preferred to that
+	of a found symbol.  Update comments.
+
+	* dwarf2-frame.c (dwarf2_frame_cache): Don't decode FDE instructions
+	for entry pc when entry pc is out of range for that FDE.
+
+2019-07-26  Brian Callahan  <bcallah@openbsd.org>
+
+	PR gdb/24839:
+	* obsd-nat.c (obsd_nat_target::pid_to_str): Fix typo in return
+	type.
+
+2019-07-25  Christian Biesinger  <cbiesinger@google.com>
+
+	* python/py-objfile.c (add_separate_debug_file): Fix comment about
+	this function's Python signature.
+
+
+2019-07-24  Christian Biesinger  <cbiesinger@google.com>
+
+	* compile/compile-object-load.c (compile_object_load): Pass GLOBAL_SCOPE.
+	* solib-spu.c (spu_lookup_lib_symbol): Pass GLOBAL_SCOPE.
+	* solib-svr4.c (elf_lookup_lib_symbol): Pass GLOBAL_SCOPE.
+	* symtab.c (lookup_global_symbol_from_objfile): Add a scope parameter.
+	* symtab.h (lookup_global_symbol_from_objfile): Likewise.
+
+
+2019-07-24  Yoshinori Sato  <ysato@users.sourceforge.jp>
+
+	* h8300-tdep.c (h8300_register_name_common): New.
+	h8300_register_name): Use h8300_register_name_common.
+	(h8300s_register_name): Likewise.
+	(h8300sx_register_name): Likewise.
+	(h8300h_register_nam): New.
+	(h8300_gdbarch_init): Use h8300h_register_name in h8300h machine.
+
+
+2019-07-23  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+
+	* arm-tdep.c (arm_skip_cmse_entry): New function.
+	(arm_is_sgstubs_section): New function.
+	(arm_skip_stub): Add call to arm_skip_cmse_entry function.
+
+2019-07-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_win_info::make_invisible_and_set_new_height):
+	Don't self-assign.
+
+2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* c-typeprint.c (c_print_typedef): Pass -1 instead of 0 to
+	type_print.
+
+2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* symtab.c (search_symbols): Adjust msymbol matching type arrays
+	so that GDB doesn't match any msymbols when searching in the
+	TYPES_DOMAIN.
+	(print_symbol_info): Print using typedef_print or type_print based
+	on the type of the symbol.  Add updated FIXME comment moved from...
+	(_initialize_symtab): ... move and update FIXME comment to above.
+
+2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention adding -q option to "info types".
+	* symtab.c (struct info_types_options): New struct.
+	(info_types_options_defs): New variable.
+	(make_info_types_options_def_group): New function.
+	(info_types_command): Use gdb::option framework to parse options.
+	(info_types_command_completer): New function.
+	(_initialize_symtab): Extend the help text on "info types" and
+	register command completer.
+
+2019-07-21  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (lookup_symbol_in_objfile_symtabs): Change int to block_enum.
+	(lookup_symbol_in_objfile): Change int to block_enum and add a
+	gdb_assert to make sure block_index is GLOBAL_BLOCK or STATIC_BLOCK.
+
+2019-07-20  Christian Biesinger  <cbiesinger@google.com>
+
+	* MAINTAINERS (Write After Approval): Add self.
+
+2019-07-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_push_dummy_code): Write a 4-byte nop
+	instruction to the dummy code region.
+
+2019-07-19  Tom Tromey  <tromey@adacore.com>
+
+	* contrib/ari/gdb_ari.sh: Mention C++11, not ISO C 90.
+	(ARGSUSED, PARAMS, __func__): Remove rules.
+
+2019-07-19  Alan Hayward  <alan.hayward@arm.com>
+
+	* arm-tdep.c (_initialize_arm_tdep): Remove xml tests.
+	* features/arm/arm-with-iwmmxt.c: Remove.
+	* features/arm/arm-with-iwmmxt.xml: Remove.
+	* features/arm/arm-with-m-fpa-layout.c: Remove.
+	* features/arm/arm-with-m-fpa-layout.xml: Remove.
+	* features/arm/arm-with-m-vfp-d16.c: Remove.
+	* features/arm/arm-with-m-vfp-d16.xml: Remove.
+	* features/arm/arm-with-m.c: Remove.
+	* features/arm/arm-with-m.xml: Remove.
+	* features/arm/arm-with-neon.c: Remove.
+	* features/arm/arm-with-neon.xml: Remove.
+	* features/arm/arm-with-vfpv2.c: Remove.
+	* features/arm/arm-with-vfpv2.xml: Remove.
+	* features/arm/arm-with-vfpv3.c: Remove.
+	* features/arm/arm-with-vfpv3.xml: Remove.
+
+2019-07-19  Alan Hayward  <alan.hayward@arm.com>
+
+	* arm-tdep.c (_initialize_arm_tdep): Add xml regression tests.
+
+2019-07-19  Alan Hayward  <alan.hayward@arm.com>
+
+	* arch/aarch32.c (aarch32_create_target_description): Create
+	target descriptions using features.
+	* arch/arm.c (arm_create_target_description)
+	(arm_create_mprofile_target_description): Likewise.
+	* arm-tdep.c (_initialize_arm_tdep): Remove tdesc init calls.
+
+2019-07-19  Alan Hayward  <alan.hayward@arm.com>
+
+	* Makefile.in: Add new files.
+	* aarch32-tdep.c: New file.
+	* aarch32-tdep.h: New file.
+	* aarch64-linux-nat.c (aarch64_linux_nat_target::read_description):
+	Call aarch32_read_description.
+	* arch/aarch32.c: New file.
+	* arch/aarch32.h: New file.
+	* arch/arm.c (arm_create_target_description)
+	(arm_create_mprofile_target_description): New function.
+	* arch/arm.h (arm_fp_type, arm_m_profile_type): New enum.
+	(arm_create_target_description)
+	(arm_create_mprofile_target_description): New declaration.
+	* arm-fbsd-tdep.c (arm_fbsd_read_description_auxv): Call
+	read_description functions.
+	* arm-linux-nat.c (arm_linux_nat_target::read_description):
+	Likewise.
+	* arm-linux-tdep.c (arm_linux_core_read_description): Likewise.
+	* arm-tdep.c (tdesc_arm_list): New variable.
+	(arm_register_g_packet_guesses): Call create description functions.
+	(arm_read_description) (arm_read_mprofile_description): New
+	function.
+	* arm-tdep.h (arm_read_description)
+	(arm_read_mprofile_description): Add declaration.
+	* configure.tgt: Add new files.
+
+2019-07-18  Guillaume LABARTHE  <guillaume.labarthe@gmail.com>
+
+	* top.c (new_ui_command): Open specified terminal just once.
+
+2019-07-18  Tom Tromey  <tromey@adacore.com>
+
+	* symtab.c (main_name): Constify return type.
+	* symfile.c (set_initial_language): Update.
+	* symtab.h (main_name): Constify return type.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_window)
+	(tui_update_source_window_as_is)
+	(tui_update_source_windows_with_line): Remove return.
+	* tui/tui-disasm.c (tui_show_disassem)
+	(tui_show_disassem_and_update_source): Remove return.
+	* tui/tui.c (tui_reset): Remove return.
+	* tui/tui-wingeneral.c
+	(tui_check_and_display_highlight_if_needed): Remove return.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (parse_scrolling_args): Throw separate errors.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_exec_info_window)
+	(struct tui_source_window_base): Move from tui-data.h.
+	* tui/tui-winsource.c: Move many method definitions from
+	elsewhere.  Remove "structuring" comments.
+	* tui/tui-wingeneral.c (tui_source_window_base::make_visible)
+	(tui_source_window_base::refresh_window): Move to
+	tui-winsource.c.
+	* tui/tui-win.c (tui_source_window_base::refresh_all)
+	(tui_source_window_base::update_tab_width)
+	(tui_source_window_base::set_new_height)
+	(tui_source_window_base::do_make_visible_with_new_height): Move to
+	tui-winsource.c.
+	* tui/tui-source.h: Update.
+	* tui/tui-source.c (tui_source_window_base::reset): Move to
+	tui-winsource.c.
+	* tui/tui-disasm.h: Update.
+	* tui/tui-data.h (struct tui_exec_info_window): Move to
+	tui-winsource.h.
+	(struct tui_source_window_base): Likewise.
+	* tui/tui-data.c (tui_source_window_base::clear_detail)
+	(tui_source_window_base, ~tui_source_window_base): Move to
+	tui-winsource.c.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_resize_all)
+	(tui_source_window_base::update_tab_width)
+	(tui_adjust_win_heights): Update.
+	(tui_win_info::make_invisible_and_set_new_height): Rename from
+	make_invisible_and_set_new_height.
+	* tui/tui-data.h (struct tui_win_info)
+	<make_invisible_and_set_new_height>: New method.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c: Update.
+	* tui/tui-source.h (struct tui_source_window): Move from
+	tui-data.h.
+	* tui/tui-layout.c: Update.
+	* tui/tui-disasm.c: Update.
+	* tui/tui-data.h (struct tui_source_window): Move to
+	tui-source.h.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-disasm.h (struct tui_disasm_window): Move from
+	tui-data.h.
+	* tui/tui-data.h (struct tui_disasm_window): Move to
+	tui-disasm.h.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_item_window): Move from
+	tui-data.h.
+	* tui/tui-regs.c (tui_data_item_window): Move from tui-data.c.
+	* tui/tui-data.h (struct tui_data_item_window): Move to
+	tui-regs.h.
+	* tui/tui-data.c (~tui_data_item_window): Move to tui-regs.c.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c: Update.
+	* tui/tui-win.c (tui_cmd_window::do_make_visible_with_new_height)
+	(tui_cmd_window::max_height): Move to tui-command.c.
+	* tui/tui-layout.c: Update.
+	* tui/tui-data.h (struct tui_cmd_window): Move to tui-command.h.
+	* tui/tui-data.c (tui_cmd_window::clear_detail): Move to
+	tui-command.c.
+	* tui/tui-command.h (struct tui_cmd_window): Move from
+	tui-data.h.
+	* tui/tui-command.c: Remove "structuring" comments.
+	(tui_cmd_window::clear_detail)
+	(tui_cmd_window::do_make_visible_with_new_height)
+	(tui_cmd_window::max_height): Move from elsewhere.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-io.c (tui_dispatch_ctrl_char): Move from tui-command.c.
+	Now static.
+	* tui/tui-command.h (tui_dispatch_ctrl_char): Don't declare.
+	* tui/tui-command.c (tui_dispatch_ctrl_char): Move to tui-io.c.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c: Update.
+	* tui/tui-wingeneral.c (tui_data_window::refresh_window): Move to
+	tui-regs.c.
+	* tui/tui-windata.h: Remove file.
+	* tui/tui-windata.c: Remove file.
+	* tui/tui-win.c (tui_data_window::set_new_height)
+	(tui_data_window::do_make_visible_with_new_height): Move to
+	tui-regs.c.
+	* tui/tui-regs.h (struct tui_data_window): Move from tui-data.h.
+	* tui/tui-regs.c: Remove "structuring" comments.
+	(tui_data_window::first_data_item_displayed)
+	(tui_data_window::delete_data_content_windows)
+	(tui_data_window::erase_data_content)
+	(tui_data_window::display_all_data)
+	(tui_data_window::refresh_all)
+	(tui_data_window::do_scroll_vertical)
+	(tui_data_window::clear_detail, tui_data_window::set_new_height)
+	(tui_data_window::do_make_visible_with_new_height)
+	(tui_data_window::refresh_window): Move from elsewhere.
+	(_initialize_tui_regs): Move to end of file.
+	* tui/tui-layout.c: Update.
+	* tui/tui-hooks.c: Update.
+	* tui/tui-data.h (struct tui_data_window): Move to tui-regs.h.
+	* tui/tui-data.c (tui_data_window::clear_detail): Move to
+	tui-regs.c.
+	* Makefile.in (SUBDIR_TUI_SRCS): Remove tui-windata.c.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is
+	seen.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_source_window_base::set_new_height)
+	(tui_source_window_base::do_make_visible_with_new_height): Use
+	m_has_locator field directly.
+	* tui/tui-data.h (struct tui_win_info) <has_locator>: Remove
+	method.
+	(struct tui_source_window_base) <has_locator>: Likewise.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (tui_make_visible, tui_make_invisible):
+	Don't declare.
+	* tui/tui-wingeneral.c (tui_make_visible, tui_make_invisible):
+	Remove.
+	* tui/tui-win.c (tui_source_window_base::set_new_height)
+	(tui_source_window_base::set_new_height)
+	(make_invisible_and_set_new_height)
+	(tui_source_window_base::do_make_visible_with_new_height)
+	(tui_source_window_base::do_make_visible_with_new_height):
+	Update.
+	* tui/tui-layout.c (show_source_disasm_command, show_data)
+	(show_source_or_disasm_and_command): Update.
+	* tui/tui-layout.c (show_layout): Update.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (make_data_window): Remove.
+	(show_data): Unify creation and re-initialization cases.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (make_source_window, make_disasm_window):
+	Remove.
+	(show_data): Unify creation and re-initialization cases.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (make_command_window): Remove.
+	(show_source_disasm_command, show_source_or_disasm_and_command):
+	Unify creation and re-initialization cases.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_source_or_disasm_and_command): Unify
+	creation and re-initialization cases.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_get_register): Return void.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_gen_win_info::make_visible):
+	Simplify.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_source_disasm_command): Simplify window
+	resetting.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.h (tui_set_layout_by_name): Don't declare.
+	* tui/tui-regs.c (tui_reg_layout): New function.
+	(tui_show_registers, tui_reg_command): Use it.
+	* tui/tui-layout.c (LAYOUT_USAGE): Remove.
+	(tui_layout_command): Rename from tui_set_layout_by_name.  Change
+	parameters.
+	(tui_layout_command): Remove.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.h (tui/tui-layout): Return void.
+	* tui/tui-layout.c (tui_set_layout): Return void.  Add assert.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_source_disasm_command, show_data):
+	Update.
+	(reset_locator): Remove.
+	(show_source_or_disasm_and_command): Update.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.c (tui_source_window_base::reset): Remove
+	win_type parameter.
+	* tui/tui-layout.c (make_command_window, make_source_window)
+	(make_disasm_window, make_data_window)
+	(show_source_disasm_command, show_data, tui_gen_win_info::reset)
+	(reset_locator, show_source_or_disasm_and_command): Update.
+	* tui/tui-data.h (struct tui_gen_win_info) <reset>: Remove
+	win_type parameter.
+	(struct tui_source_window_base) <reset>: Likewise.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_source_disasm_command): Use
+	reset_locator.
+	(reset_locator): New function.
+	(init_and_make_win): Remove.
+	(show_source_or_disasm_and_command): Use reset_locator.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_set_exec_info_content): Remove
+	condition.
+	* tui/tui-wingeneral.c (tui_source_window_base::make_visible):
+	Remove condition.
+	* tui/tui-source.c (tui_source_window_base::reset): New method.
+	* tui/tui-layout.c (make_command_window): Don't call
+	init_and_make_win.
+	(make_source_window, make_disasm_window): Don't call
+	make_source_or_disasm_window.
+	(make_data_window): Don't call init_and_make_win.  Change calling
+	convention.
+	(show_source_disasm_command, show_data): Simplify.
+	(make_source_or_disasm_window): Remove.
+	(show_source_or_disasm_and_command): Simplify.
+	* tui/tui-data.h (struct tui_gen_win_info) <reset>: Now virtual.
+	(struct tui_source_window_base) <reset>: Likewise.
+	<execution_info>: Remove initializer.
+	* tui/tui-data.c (tui_source_window_base): Initialize
+	execution_info.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (tui_set_layout): Remove regs_populate
+	variable.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_rl_other_window): Update.
+	* tui/tui-wingeneral.c (tui_data_window::refresh_window): Call
+	superclass method first.  Always iterate over regs_content.
+	(tui_unhighlight_win, tui_highlight_win): Use refresh_window
+	method.
+	* tui/tui-win.c (tui_set_focus_command): Update.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_set_focus_command): Rename from
+	tui_set_focus.  Call tui_enable.
+	(tui_set_focus_command): Remove.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_show_exec_info_content): Don't call
+	refresh_window.
+	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Call
+	touchwin.
+	(tui_data_window::refresh_window): Call refresh_window on data
+	items.  Always call superclass refresh_window.
+	(tui_win_info::refresh): Remove.
+	(tui_source_window_base::refresh_window): Update.
+	(tui_refresh_all): Update.
+	* tui/tui-layout.c (show_source_disasm_command): Remove call to
+	refresh_window.
+	(show_source_or_disasm_and_command): Likewise.
+	* tui/tui-data.h (struct tui_win_info) <refresh>: Remove.
+	(struct tui_source_window_base) <refresh>: Likewise.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_clear_source_content)
+	(tui_show_source_content): Update.
+	* tui/tui-source.c (tui_source_window::showing_source_p): Check
+	whether content is empty.
+	* tui/tui-data.h (struct tui_source_window_base) <content_in_use>:
+	Remove.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_erase_source_content): Clear the
+	window's contents.
+	* tui/tui-source.h (tui_set_source_content_nil): Don't declare.
+	* tui/tui-source.c (tui_set_source_content_nil): Remove.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (UNDEFINED_ITEM): Remove define.
+	(struct tui_data_item_window): Update.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (MAX_CONTENT_COUNT, TUI_NULL_STR)
+	(DEFAULT_HISTORY_COUNT, WITH_LOCATOR, NO_LOCATOR): Remove
+	defines.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_erase_source_content)
+	(tui_clear_source_content): Remove "display_prompt" parameter.
+	* tui/tui-winsource.c (tui_update_source_window_as_is)
+	(tui_update_source_windows_with_addr): Update.
+	(tui_clear_source_content): Remove "display_prompt" parameter.
+	(tui_erase_source_content): Likewise.  Simplify.
+	(tui_show_source_content): Update.
+	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update.
+	* tui/tui-stack.c (tui_show_frame_info): Update.
+	* tui/tui-data.h (EMPTY_SOURCE_PROMPT, NO_EMPTY_SOURCE_PROMPT):
+	Remove defines.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_window_as_is): Update.
+	* tui/tui-disasm.h (tui_set_disassem_content): Add win_info
+	parameter.
+	* tui/tui-disasm.c (tui_set_disassem_content): Add win_info
+	parameter.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_clear_source_content)
+	(tui_show_source_content, tui_show_exec_info_content)
+	(tui_clear_exec_info_content): Update.
+	* tui/tui-stack.c (tui_show_locator_content): Update.
+	(tui_show_frame_info): Update.
+	* tui/tui-source.h (tui_source_window): Don't declare.
+	* tui/tui-source.c (tui_source_window::showing_source_p): Rename
+	from tui_source_is_displayed.
+	* tui/tui-data.h (struct tui_gen_win_info) <content_in_use>:
+	Remove field.
+	(struct tui_source_window_base) <content_in_use>: New field.  Now
+	bool.
+	(struct tui_source_window) <showing_source_p>: New method.
+	(TUI_SRC_WIN): Change cast.
+	* tui/tui-data.c (tui_initialize_static_data): Update.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_breakpoint_info): Use
+	location_matches_p.
+	* tui/tui-source.c (tui_source_window::location_matches_p): New
+	method.
+	* tui/tui-disasm.c (tui_disasm_window::location_matches_p): New
+	method.
+	* tui/tui-data.h (struct tui_source_window_base)
+	<location_matches_p>: New method.
+	(struct tui_source_window, struct tui_disasm_window)
+	<location_matches_p>: Likewise.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_set_win_height_command): Rename from
+	tui_set_win_height.
+	(tui_set_win_height_command): Remove.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.c (tui_source_window): New constructor.  Add
+	observer.
+	(~tui_source_window): New destructor.
+	(tui_source_window::style_changed): New method.
+	* tui/tui-hooks.c (tui_redisplay_source): Remove.
+	(tui_attach_detach_observers): Update.
+	* tui/tui-data.h (struct tui_source_window): Make constructor not
+	inline.  Add destructor.
+	(struct tui_source_window) <style_changed>: New method.
+	<m_observable>: New member.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.c (tui_clear_source_windows_detail): Fix typo.
+	* tui/tui-win.c (tui_resize_all): Fix typo.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (tui_refresh_all): Update.
+	* tui/tui-wingeneral.c (make_all_visible): Use foreach.
+	(tui_refresh_all): Remove "list" parameter.  Use foreach.
+	* tui/tui-win.c (window_name_completer): Use foreach.
+	(tui_refresh_all_win, tui_rehighlight_all, tui_all_windows_info)
+	(update_tab_width): Likewise.
+	* tui/tui-layout.c (show_layout): Update.
+	* tui/tui-data.h (class tui_window_iterator): New.
+	(struct all_tui_windows): New.
+	* tui/tui-data.c (tui_partial_win_by_name): Use foreach.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_reg_next, tui_reg_prev): Add "current_group"
+	parameter.  Don't reference globals.
+	(tui_reg_command): Update.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_show_registers): Simplify.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_show_registers): Update.
+	(tui_show_register_group): Add win_info parameter.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::display_reg_element_at_line):
+	Rename from tui_display_reg_element_at_line.
+	(tui_data_window::display_registers_from_line): Update.
+	* tui/tui-data.h (struct tui_data_window)
+	<display_reg_element_at_line>: New method.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (tui_display_registers_from)
+	(tui_display_registers_from_line): Don't declare.
+	* tui/tui-windata.c (tui_data_window::display_all_data)
+	(tui_data_window::refresh_all)
+	(tui_data_window::do_scroll_vertical): Update.
+	* tui/tui-regs.c (tui_data_window::display_registers_from): Rename
+	from tui_display_registers_from.
+	(tui_display_reg_element_at_line): Update.
+	(tui_data_window::display_registers_from_line): Rename from
+	tui_display_registers_from_line.
+	* tui/tui-data.h (struct tui_data_window) <display_registers_from,
+	display_registers_from_line>: New methods.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.h (tui_erase_data_content): Don't declare.
+	* tui/tui-windata.c (tui_data_window::erase_data_content): Rename
+	from tui_erase_data_content.
+	(tui_data_window::display_all_data)
+	(tui_data_window::refresh_all)
+	(tui_data_window::do_scroll_vertical): Update.
+	* tui/tui-regs.c (tui_show_registers): Update.
+	* tui/tui-data.h (struct tui_data_window) <erase_data_content>:
+	New method.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.h (tui_delete_data_content_windows): Don't
+	declare.
+	* tui/tui-windata.c
+	(tui_data_window::delete_data_content_windows): Rename from
+	tui_delete_data_content_windows.
+	(tui_data_window::display_all_data)
+	(tui_data_window::do_scroll_vertical): Update.
+	* tui/tui-data.h (struct tui_data_window)
+	<delete_data_content_windows>: New method.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.h (tui_refresh_data_win): Don't declare.
+	* tui/tui-regs.h (tui_first_reg_element_inline): Don't declare.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.h (tui_display_all_data): Don't declare.
+	* tui/tui-windata.c (tui_data_window::display_all_data): Rename
+	from tui_display_all_data.
+	* tui/tui-win.c
+	(tui_data_window::do_make_visible_with_new_height): Update.
+	* tui/tui-regs.c (tui_show_registers): Update.
+	* tui/tui-layout.c (tui_set_layout): Update.
+	* tui/tui-data.h (struct tui_data_window) <display_all_data>: New
+	method.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.h (tui_display_data_from): Don't declare.
+	* tui/tui-windata.c (tui_display_data_from): Remove.
+	(tui_data_window::refresh_all): Update.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.h (tui_display_data_from_line): Don't declare.
+	* tui/tui-windata.c (tui_display_data_from_line): Remove.
+	(tui_display_data_from, tui_data_window::do_scroll_vertical): Call
+	tui_display_registers_from_line.
+	* tui/tui-regs.h (tui_display_registers_from_line): Update.
+	* tui/tui-regs.c (tui_display_registers_from_line): Remove
+	"force_display" parameter.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (tui_first_reg_element_no_inline): Don't
+	declare.
+	* tui/tui-regs.c (tui_data_window::first_reg_element_no_inline):
+	Rename from tui_first_reg_element_no_inline.
+	(tui_display_reg_element_at_line)
+	(tui_display_registers_from_line): Update.
+	* tui/tui-data.h (struct tui_data_window)
+	<first_reg_element_no_inline>: New method.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.c (tui_display_data_from)
+	(tui_data_window::do_scroll_vertical): Update.
+	* tui/tui-regs.h (tui_line_from_reg_element_no): Don't declare.
+	* tui/tui-regs.c (tui_data_window::line_from_reg_element_no):
+	Rename from tui_line_from_reg_element_no.
+	(tui_display_registers_from_line): Update.
+	* tui/tui-data.h (struct tui_data_window)
+	<line_from_reg_element_no>: New method.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (tui_last_regs_line_no): Don't declare.
+	* tui/tui-regs.c (tui_data_window::last_regs_line_no): Rename from
+	tui_last_regs_line_no.
+	(tui_display_reg_element_at_line)
+	(tui_display_registers_from_line): Update.
+	* tui/tui-data.h (struct tui_data_window) <last_regs_line_no>: New
+	method.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	PR tui/24722:
+	* tui/tui-winsource.h (tui_update_all_breakpoint_info)
+	(tui_update_breakpoint_info): Add "being_deleted" parameter.
+	* tui/tui-winsource.c (tui_update_source_window_as_is): Update.
+	(tui_update_all_breakpoint_info): Add "being_deleted" parameter.
+	(tui_update_breakpoint_info): Likewise.
+	* tui/tui-hooks.c (tui_event_create_breakpoint)
+	(tui_event_delete_breakpoint, tui_event_modify_breakpoint):
+	Update.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (tui_show_frame_info): Consolidate "if"s.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_window_as_is)
+	(tui_update_source_windows_with_addr): Update.
+	* tui/tui-source.h (tui_set_source_content)
+	(tui_show_symtab_source): Add "win_info" parameter.
+	* tui/tui-source.c (tui_set_source_content): Add "win_info"
+	parameter.
+	(tui_show_symtab_source): Likewise.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c
+	(tui_check_and_display_highlight_if_needed): Check can_highlight.
+
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_win_info) <can_scroll>: New method.
+	(struct tui_cmd_window) <can_scroll>: New method.
+	* tui/tui-command.c (tui_dispatch_ctrl_char): Use can_scroll
+	method.
+
+2019-07-17  Tom Tromey  <tromey@adacore.com>
+
+	* ui-out.h (class ui_out) <field_signed, field_fmt_signed,
+	do_field_signed>: Rename.  Change type of "value".
+	* ui-out.c (ui_out::field_signed): Rename from field_int.
+	Change type of "value".
+	(ui_out::field_fmt_signed): Rename from field_fmt_int.  Change
+	type of "value".
+	* tui/tui-out.h (class tui_ui_out) <do_field_signed>: Rename from
+	do_field_int.  Change type of "value".
+	* tui/tui-out.c (tui_ui_out::do_field_signed): Rename from
+	do_field_int.  Change type of "value".
+	* tracepoint.c (trace_status_mi, tfind_1)
+	(print_one_static_tracepoint_marker): Update.
+	* thread.c (print_thread_info_1, print_selected_thread_frame):
+	Update.
+	* stack.c (print_frame, print_frame_info): Update.
+	* spu-tdep.c (info_spu_signal_command, info_spu_dma_cmdlist):
+	Update.
+	* source.c (print_source_lines_base): Update.
+	* skip.c (info_skip_command): Update.
+	* record-btrace.c (btrace_ui_out_decode_error)
+	(btrace_call_history_src_line): Update.
+	* python/py-framefilter.c (py_print_single_arg, py_print_frame):
+	Update.
+	* progspace.c (print_program_space): Update.
+	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Update.
+	* mi/mi-out.h (class mi_ui_out) <do_field_signed>: Rename from
+	do_field_int.  Change type of "value".
+	* mi/mi-out.c (mi_ui_out::do_table_begin)
+	(mi_ui_out::do_table_header): Update.
+	(mi_ui_out::do_field_signed): Rename from do_field_int.  Change
+	type of "value".
+	* mi/mi-main.c (mi_cmd_thread_list_ids, print_one_inferior)
+	(mi_cmd_data_list_changed_registers, output_register)
+	(mi_cmd_data_read_memory, mi_load_progress)
+	(mi_cmd_trace_frame_collected): Update.
+	* mi/mi-interp.c (mi_on_normal_stop_1, mi_output_solib_attribs):
+	Update.
+	* mi/mi-cmd-var.c (print_varobj, mi_cmd_var_create)
+	(mi_cmd_var_delete, mi_cmd_var_info_num_children)
+	(mi_cmd_var_list_children, varobj_update_one): Update.
+	* mi/mi-cmd-stack.c (mi_cmd_stack_info_depth)
+	(mi_cmd_stack_list_args, list_arg_or_local): Update.
+	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file): Update.
+	* inferior.c (print_inferior): Update.
+	* gdb_bfd.c (print_one_bfd): Update.
+	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
+	Update.
+	* darwin-nat-info.c (darwin_debug_regions_recurse): Update.
+	* cli-out.h (class cli_ui_out) <do_field_signed>: Rename from
+	do_field_int.  Change type of "value".
+	* cli-out.c (cli_ui_out::do_field_signed): Rename from
+	do_field_int.  Change type of "value".
+	* breakpoint.c (watchpoint_check, print_breakpoint_location)
+	(print_one_breakpoint_location, print_it_catch_fork)
+	(print_one_catch_fork, print_it_catch_vfork)
+	(print_one_catch_vfork, print_it_catch_solib)
+	(print_it_catch_exec, print_it_ranged_breakpoint)
+	(print_mention_watchpoint, print_mention_masked_watchpoint)
+	(bkpt_print_it, update_static_tracepoint): Update.
+	* break-catch-throw.c (print_it_exception_catchpoint): Update.
+	* break-catch-syscall.c (print_it_catch_syscall): Update.
+	* ada-tasks.c (print_ada_task_info): Update.
+	* ada-lang.c (print_it_exception, print_mention_exception):
+	Update.
+
+2019-07-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR breakpoints/24541
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh: Adjust return type and parameter types for
+	'stap_adjust_register'.
+	(i386_stap_adjust_register): Adjust signature and return new
+	register name.
+	* stap-probe.c (stap_parse_register_operand): Adjust use of
+	'gdbarch_stap_adjust_register'.
+
+2019-07-17  Tom Tromey  <tromey@adacore.com>
+
+	* s390-linux-nat.c (s390_watch_area): Remove typedef.  Don't
+	declare VEC.
+	(struct s390_debug_reg_state) <watch_areas, break_areas>: Now
+	std::vector.
+	(struct s390_process_info): Add initializers.
+	(s390_add_process): Use new.
+	(s390_linux_nat_target::low_forget_process): Use delete.
+	(s390_linux_nat_target::low_new_fork)
+	(s390_linux_nat_target::stopped_by_watchpoint)
+	(s390_linux_nat_target::low_prepare_to_resume)
+	(s390_linux_nat_target::insert_watchpoint)
+	(s390_linux_nat_target::insert_hw_breakpoint)
+	(s390_linux_nat_target::remove_watchpoint)
+	(s390_linux_nat_target::remove_hw_breakpoint): Update.
+
+2019-07-16  John Baldwin  <jhb@FreeBSD.org>
+
+	* aarch64-fbsd-nat.c: Include regcache.h.
+	(getregs_supplies, getfpregs_supplies): Remove unused gdbarch
+	argument.
+	(aarch64_fbsd_nat_target::fetch_registers)
+	(aarch64_fbsd_nat_target::store_registers): Remove gdbarch
+	variable.
+	* arm-fbsd-nat.c, riscv-fbsd-nat.c: Likewise.
+
+2019-07-16  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.c: Include gdbarch.h.
+
+2019-07-15  Tom Tromey  <tromey@adacore.com>
+
+	* mi/mi-out.c (mi_ui_out::do_field_int): Use plongest.
+
+2019-07-15  Tom Tromey  <tromey@adacore.com>
+
+	* mi/mi-out.h (class mi_ui_out) <do_field_unsigned>: Declare.
+	* mi/mi-out.c (mi_ui_out::do_field_unsigned): New method.
+	* cli-out.h (class cli_ui_out) <do_field_unsigned>: Declare.
+	* cli-out.c (cli_ui_out::do_field_int): New method.
+	* ui-out.c (ui_out::field_unsigned): New method.
+	* symfile.c (generic_load): Use field_unsigned.
+	(print_transfer_performance): Likewise.
+	* record-btrace.c (ui_out_field_uint): Remove.
+	(btrace_call_history_insn_range, btrace_call_history): Use
+	field_unsigned.
+	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): Use
+	field_unsigned.
+	* ui-out.h (class ui_out) <field_unsigned>: New method.
+	<do_field_unsigned>: Likewise.
+
+2019-07-15  Tom Tromey  <tromey@adacore.com>
+
+	* mi/mi-main.c (list_available_thread_groups): Use field_string.
+	* mi/mi-interp.c (mi_memory_changed): Use field_string.
+	* target.c (flash_erase_command): Use field_string.
+	* infrun.c (print_signal_received_reason): Use field_string.
+	* i386-tdep.c (i386_mpx_print_bounds): Use field_string.
+	* breakpoint.c (maybe_print_thread_hit_breakpoint): Use
+	field_string.
+	* ada-tasks.c (print_ada_task_info): Use field_string.
+
+2019-07-15  Tom Tromey  <tromey@adacore.com>
+
+	* target.c (flash_erase_command): Use field_core_addr.
+	* symfile.c (generic_load): Use field_core_addr.
+	* sparc64-linux-tdep.c (sparc64_linux_handle_segmentation_fault):
+	Use field_core_addr.
+	* i386-linux-tdep.c (i386_linux_handle_segmentation_fault): Use
+	field_core_addr.
+
+2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2loc.c (dwarf2_evaluate_property): Sign extend property
+	value if its desired type is smaller than a CORE_ADDR and signed.
+
+2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2loc.c (dwarf2_evaluate_property): Update to take account
+	of changes to field names, and use new is_reference field to
+	decide if a property is a reference or not.
+	* dwarf2loc.h (struct dwarf2_locexpr_baton): Add 'is_reference'
+	field.
+	(struct dwarf2_property_baton): Update header comment, rename
+	'referenced_type' to 'property_type' and update comments.
+	* dwarf2read.c (attr_to_dynamic_prop): Add extra parameter to hold
+	default property type, store in property baton, update to take
+	accound of renamed field.
+	(read_func_scope): Update call to attr_to_dynamic_prop.
+	(read_array_type): Likewise.
+	(dwarf2_per_cu_addr_sized_int_type): New function.
+	(read_subrange_index_type): Move type finding code to
+	dwarf2_per_cu_addr_sized_int_type.
+	(read_subrange_type): Update calls to attr_to_dynamic_prop.
+	(dwarf2_per_cu_addr_type): New function.
+	(set_die_type): Update calls to attr_to_dynamic_prop.
+
+2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (read_subrange_index_type): New function.
+	(read_subrange_type): Move code into new function and call it.
+	* gdbtypes.c (create_range_type): Add some asserts.
+
+2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2loc.c (dwarf2_evaluate_property): Change return type, and
+	update return statements.
+	* dwarf2loc.h (dwarf2_evaluate_property): Update return type on
+	declaration, and update comment to match.
+	* gdbtypes.c (resolve_dynamic_array): Update call to
+	dwarf2_evaluate_property to match new return type.
+
+2019-07-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* valarith.c (value_subscripted_rvalue): Change lowerbound
+	parameter type from int to LONGEST.
+	* value.h (value_subscripted_rvalue): Likewise in declaration.
+
+2019-07-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cli/cli-utils.c (info_print_command_completer): New function.
+	* cli/cli-utils.h: Add 'completer.h' include, and forward
+	declaration for 'struct cmd_list_element'.
+	(info_print_command_completer): Declare.
+	* stack.c (_initialize_stack): Add completer for 'info locals' and
+	'info args'.
+	* symtab.c (_initialize_symtab): Add completer for 'info
+	variables' and 'info functions'.
+	* NEWS: Mention completion for additional info commands.
+
+2019-07-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cli/cli-utils.c (extract_info_print_args): Delete.
+	(extract_arg_maybe_quoted): Delete.
+	(info_print_options_defs): New variable.
+	(make_info_print_options_def_group): New function.
+	(extract_info_print_options): Define new function.
+	* cli/cli-utils.h (extract_info_print_args): Delete.
+	(struct info_print_options): New structure.
+	(extract_info_print_options): Declare new function.
+	* stack.c (info_locals_command): Update to use new
+	extract_info_print_options, also add a header comment.
+	(info_args_command): Likewise.
+	* symtab.c (info_variables_command): Likewise.
+	(info_functions_command): Likewise.
+
+2019-07-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cli/cli-option.c (parse_option): Use extract_string_maybe_quoted
+	to extract string arguments.
+	* common/common-utils.c (extract_string_maybe_quoted): New function.
+	* common/common-utils.h (extract_string_maybe_quoted): Declare.
+
+2019-07-11  Tom Tromey  <tromey@adacore.com>
+
+	* main.c (get_init_files): Use GDBINIT, not gdbinit.
+	* auto-load.c (file_is_auto_load_safe): Use GDBINIT, not gdbinit.
+	* top.h (gdbinit): Don't declare.
+	* cli/cli-cmds.c (init_cli_cmds): Remove, merging contents
+	into...
+	(_initialize_cli_cmds): ...here.  Use GDBINIT, not gdbinit.
+	* top.c (gdb_init): Don't call init_cli_cmds.
+	(gdbinit): Remove.
+	* cli/cli-cmds.h (init_cli_cmds): Don't declare.
+
+2019-07-11  Tom Tromey  <tromey@adacore.com>
+
+	* python/py-inferior.c (add_thread_object): Don't use thread_obj
+	after it has been moved.
+
+2019-07-10  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* valops.c (value_must_coerce_to_target): Change return type to
+	bool.
+	* value.h (value_must_coerce_to_target): Likewise.
+
+2019-07-10  Simon Marchi  <simon.marchi@efficios.com>
+
+	* breakpoint.c (is_hardware_watchpoint): Remove
+	forward-declaration.
+	(is_masked_watchpoint): Change return type to bool.
+	(is_tracepoint): Likewise.
+	(is_breakpoint): Likewise.
+	(is_hardware_watchpoint): Likewise.
+	(is_watchpoint): Likewise.
+	(is_no_memory_software_watchpoint): Likewise.
+	(is_catchpoint): Likewise.
+	(breakpoint_1): Make FILTER parameter's return type bool.
+	is_masked_watchpoint): Change return type to bool.
+	(save_breakpoints): Make FILTER parameter's return type bool.
+	* breakpoint.h (is_breakpoint): Change return type to bool.
+	(is_watchpoint): Likewise.
+	(is_catchpoint): Likewise.
+	(is_tracepoint): Likewise.
+
+2019-07-10  Tom Tromey  <tom@tromey.com>
+
+	* defs.h: Don't include gdbarch.h.
+	* aarch64-ravenscar-thread.c, aarch64-tdep.c, alpha-bsd-tdep.h,
+	alpha-linux-tdep.c, alpha-mdebug-tdep.c, arch-utils.h, arm-tdep.h,
+	ax-general.c, btrace.c, buildsym-legacy.c, buildsym.h, c-lang.c,
+	cli/cli-decode.h, cli/cli-dump.c, cli/cli-script.h,
+	cli/cli-style.h, coff-pe-read.h, compile/compile-c-support.c,
+	compile/compile-cplus.h, compile/compile-loc2c.c, corefile.c,
+	cp-valprint.c, cris-linux-tdep.c, ctf.c, d-lang.c, d-namespace.c,
+	dcache.c, dicos-tdep.c, dictionary.c, disasm-selftests.c,
+	dummy-frame.c, dummy-frame.h, dwarf2-frame-tailcall.c,
+	dwarf2expr.c, expression.h, f-lang.c, frame-base.c,
+	frame-unwind.c, frv-linux-tdep.c, gdbarch-selftests.c, gdbtypes.h,
+	go-lang.c, hppa-nbsd-tdep.c, hppa-obsd-tdep.c, i386-dicos-tdep.c,
+	i386-tdep.h, ia64-vms-tdep.c, interps.h, language.c,
+	linux-record.c, location.h, m2-lang.c, m32r-linux-tdep.c,
+	mem-break.c, memattr.c, mn10300-linux-tdep.c, nios2-linux-tdep.c,
+	objfiles.h, opencl-lang.c, or1k-linux-tdep.c, p-lang.c,
+	parser-defs.h, ppc-tdep.h, probe.h, python/py-record-btrace.c,
+	record-btrace.c, record.h, regcache-dump.c, regcache.h,
+	riscv-fbsd-tdep.c, riscv-linux-tdep.c, rust-exp.y,
+	sh-linux-tdep.c, sh-nbsd-tdep.c, source-cache.c,
+	sparc-nbsd-tdep.c, sparc-obsd-tdep.c, sparc-ravenscar-thread.c,
+	sparc64-fbsd-tdep.c, std-regs.c, target-descriptions.h,
+	target-float.c, tic6x-linux-tdep.c, tilegx-linux-tdep.c, top.c,
+	tracefile.c, trad-frame.c, type-stack.h, ui-style.c, utils.c,
+	utils.h, valarith.c, valprint.c, varobj.c, x86-tdep.c,
+	xml-support.h, xtensa-linux-tdep.c, cli/cli-cmds.h: Update.
+	* s390-linux-nat.c, procfs.c, inf-ptrace.c: Likewise.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.h (is_ada_exception_catchpoint): Declare.
+	* breakpoint.c (init_ada_exception_breakpoint): Register as
+	bp_catchpoint.
+	(print_one_breakpoint_location, print_one_breakpoint): Use
+	is_ada_exception_catchpoint.
+	* ada-lang.c (class ada_catchpoint_location): Pass
+	bp_loc_software_breakpoint to bp_location constructor.
+	(is_ada_exception_catchpoint): New function.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* arm-tdep.c (arm_exidx_entry_s): Remove typedef.  Don't define
+	VEC.
+	(struct arm_exidx_entry): New method operator<.
+	(struct arm_exidx_data) <section_maps>: Change type.
+	(arm_exidx_data_free): Remove.
+	(arm_exidx_data_key): Change type.  Move lower.
+	(arm_exidx_new_objfile): Update.
+	(arm_compare_exidx_entries): Remove.
+	(arm_find_exidx_entry, _initialize_arm_tdep)
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* solib-spu.c (ocl_program_data_key): Change type.
+	(append_ocl_sos, ocl_enable_break, _initialize_spu_solib):
+	Update.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* solib-aix.c (lm_info_aix_p): Remove typedef.  Don't define VEC.
+	(struct solib_aix_inferior_data) <library_list>: Change type.
+	(solib_aix_inferior_data_handle): Change type.
+	(get_solib_aix_inferior_data): Update.
+	(solib_aix_free_library_list): Remove.
+	(library_list_start_library): Update.
+	(solib_aix_parse_libraries, solib_aix_get_library_list): Change
+	return type.
+	(solib_aix_get_library_list)
+	(solib_aix_solib_create_inferior_hook, solib_aix_current_sos)
+	(solib_aix_normal_stop_observer, _initialize_solib_aix): Update.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* solib-dsbt.c (struct dsbt_info): Add initializers.
+	(solib_dsbt_pspace_data): Change type.
+	(dsbt_pspace_data_cleanup): Remove.
+	(get_dsbt_info, _initialize_dsbt_solib): Update.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* spu-tdep.c (spu_overlay_data): Change type.
+	(spu_get_overlay_table, spu_overlay_new_objfile)
+	(_initialize_spu_tdep): Update.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* gdb-stabs.h (struct dbx_symfile_info): Add initializers and
+	destructor.
+	(dbx_objfile_data_key): Change type and declare later.
+	(DBX_SYMFILE_INFO): Rewrite.
+	* dbxread.c (dbx_objfile_data_key): Change type.
+	(dbx_symfile_init): Update.
+	(~dbx_symfile_info): Rename from dbx_free_symfile_info.  Update.
+	(coffstab_build_psymtabs, elfstab_build_psymtabs)
+	(stabsect_build_psymtabs, _initialize_dbxread): Update.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* jit.c (jit_program_space_key): Change type.  Move lower.
+	(get_jit_program_space_data): Update.
+	(jit_program_space_data_cleanup): Remove.
+	(jit_breakpoint_deleted, free_objfile_data, _initialize_jit):
+	Update.
+	(struct jit_program_space_data): Add initializers.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* solib-darwin.c (struct darwin_info): Add initializers.
+	(solib_darwin_pspace_data): Change type.
+	(darwin_pspace_data_cleanup): Remove.
+	(get_darwin_info, _initialize_darwin_solib): Update.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* remote-sim.c (struct sim_inferior_data): Add initializers,
+	constructor, and destructor.
+	(sim_inferior_data_key): Change type.  Move lower.
+	(check_for_duplicate_sim_descriptor): Update.
+	(get_sim_inferior_data): Use new.  Update.
+	(~sim_inferior_data_cleanup): Rename from
+	sim_inferior_data_cleanup.  Simplify.
+	(gdbsim_close_inferior, simulator_command)
+	(sim_command_completer, _initialize_remote_sim): Update.
+	(next_pid, INITIAL_PID): Move earlier.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* python/python-internal.h (create_thread_object): Return
+	gdbpy_ref.
+	* python/py-infthread.c (create_thread_object): Return gdbpy_ref.
+	* python/py-inferior.c (struct threadlist_entry): Add
+	constructor.
+	<thread_obj>: Now a gdbpy_ref.
+	(thread_to_thread_object): Update.
+	(add_thread_object): Use new.
+	(delete_thread_object): Use delete.
+	(infpy_threads): Update.
+	(py_free_inferior): Update.  Construct "inf_obj" after acquiring
+	GIL.
+
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* valops.c (value_cast): Specialize error message for Ada.
+
+2019-07-10  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.c (breakpoint_1): Update doc and parameter names.
+
+2019-07-10  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.h (bpstat_explains_signal, bpstat_causes_stop,
+	bpstat_should_step): Return bool, adjust comments.
+	* breakpoint.c (bpstat_explains_signal, bpstat_causes_stop,
+	bpstat_should_step): Likewise.
+
+2019-07-10  Alan Hayward  <alan.hayward@arm.com>
+
+	* features/Makefile: Use feature target descriptions for Arm.
+	* features/arm/arm-core.c: Generate new file.
+	* features/arm/arm-fpa.c: Likewise.
+	* features/arm/arm-m-profile-with-fpa.xml: Likewise.
+	* features/arm/arm-m-profile.c: Likewise.
+	* features/arm/arm-vfpv2.c: Likewise.
+	* features/arm/arm-vfpv3.c: Likewise.
+	* features/arm/xscale-iwmmxt.c: Likewise.
+	* target-descriptions.c (maint_print_c_tdesc_cmd): Add Arm.
+
+2019-07-10  Alan Hayward  <alan.hayward@arm.com>
+
+	* arm-linux-nat.c (arm_linux_nat_target::read_description): Check
+	ptrace earlier.
+
+2019-07-10  Alan Hayward  <alan.hayward@arm.com>
+
+	* features/aarch64-pauth.c: Regenerate.
+
+2019-07-09  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.h (struct bpstat_what) <is_longjmp>: Change type to
+	bool.
+	(bpstat_what): Use false instead of 0.
+
+2019-07-09  Pedro Alves  <palves@redhat.com>
+
+	* break-catch-throw.c (is_exception_catchpoint): New.
+	* breakpoint.c (print_one_breakpoint_location): New parameter
+	'raw_loc'.  Handle it.  Use
+	is_watchpoint/is_catchpoint/is_exception_catchpoint instead of
+	looking at the breakpoint's type.
+	(print_one_breakpoint): If handling "maint info breakpoints", also
+	print locations of exception catchpoints.
+	* breakpoint.h (is_exception_catchpoint): Declare.
+
+2019-07-09  Pedro Alves  <palves@redhat.com>
+
+	* break-catch-throw.c (print_one_exception_catchpoint): Skip the
+	"addr" field.
+	(allocate_location_exception_catchpoint): New.
+	(handle_gnu_v3_exceptions): Don't reset 'type' to bp_breakpoint.
+	(initialize_throw_catchpoint_ops): Install
+	allocate_location_exception_catchpoint as allocate_location
+	method.
+	* breakpoint.c (bpstat_what) <bp_catch>: Set action to
+	BPSTAT_WHAT_SINGLE if not stopping and the location's type is not
+	bp_loc_other.
+	(breakpoint_address_is_meaningful): Delete.
+	(bl_address_is_meaningful): New.
+	(breakpoint_locations_match): Adjust comment.
+	(bp_location_from_bp_type): New, factored out of...
+	(bp_location::bp_location(breakpoint *)): ... this.
+	(bp_location::bp_location(breakpoint *, bp_loc_type)): New,
+	factored out of...
+	(bp_location::bp_location(breakpoint *)): ... this.  Reimplement.
+	(bp_loc_is_permanent): Use bl_address_is_meaningful instead of
+	breakpoint_address_is_meaningful.
+	(bp_locations_compare): Adjust comment.
+	(update_global_location_list): Use bl_address_is_meaningful
+	instead of breakpoint_address_is_meaningful.
+	* breakpoint.h (bp_location::bp_location(breakpoint *)): New
+	explicit.
+	(bp_location::bp_location(breakpoint *, bp_loc_type)): Declare.
+	* python/py-breakpoint.c (bppy_get_location): No longer check
+	whether location is null.
+
+2019-07-09  Pedro Alves  <palves@redhat.com>
+
+	PR c++/15468
+	* breakpoint.c (print_one_breakpoint_location): Remove
+	single-location assert.
+
+2019-07-09  Tom Tromey  <tom@tromey.com>
+
+	* contrib/ari/gdb_ari.sh: Change common to gdbsupport.
+	* configure: Rebuild.
+	* configure.ac: Change common to gdbsupport.
+	* gdbsupport: Rename from common.
+	* acinclude.m4: Change common to gdbsupport.
+	* Makefile.in (CONFIG_SRC_SUBDIR, COMMON_SFILES)
+	(HFILES_NO_SRCDIR, stamp-version, ALLDEPFILES): Change common to
+	gdbsupport.
+	* aarch64-tdep.c, ada-lang.c, ada-lang.h, agent.c, alloc.c,
+	amd64-darwin-tdep.c, amd64-dicos-tdep.c, amd64-fbsd-nat.c,
+	amd64-fbsd-tdep.c, amd64-linux-nat.c, amd64-linux-tdep.c,
+	amd64-nbsd-tdep.c, amd64-obsd-tdep.c, amd64-sol2-tdep.c,
+	amd64-tdep.c, amd64-windows-tdep.c, arch-utils.c,
+	arch/aarch64-insn.c, arch/aarch64.c, arch/aarch64.h, arch/amd64.c,
+	arch/amd64.h, arch/arm-get-next-pcs.c, arch/arm-linux.c,
+	arch/arm.c, arch/i386.c, arch/i386.h, arch/ppc-linux-common.c,
+	arch/riscv.c, arch/riscv.h, arch/tic6x.c, arm-tdep.c, auto-load.c,
+	auxv.c, ax-gdb.c, ax-general.c, ax.h, breakpoint.c, breakpoint.h,
+	btrace.c, btrace.h, build-id.c, build-id.h, c-lang.h, charset.c,
+	charset.h, cli/cli-cmds.c, cli/cli-cmds.h, cli/cli-decode.c,
+	cli/cli-dump.c, cli/cli-option.h, cli/cli-script.c,
+	coff-pe-read.c, command.h, compile/compile-c-support.c,
+	compile/compile-c.h, compile/compile-cplus-symbols.c,
+	compile/compile-cplus-types.c, compile/compile-cplus.h,
+	compile/compile-loc2c.c, compile/compile.c, completer.c,
+	completer.h, contrib/ari/gdb_ari.sh, corefile.c, corelow.c,
+	cp-support.c, cp-support.h, cp-valprint.c, csky-tdep.c, ctf.c,
+	darwin-nat.c, debug.c, defs.h, disasm-selftests.c, disasm.c,
+	disasm.h, dtrace-probe.c, dwarf-index-cache.c,
+	dwarf-index-cache.h, dwarf-index-write.c, dwarf2-frame.c,
+	dwarf2expr.c, dwarf2loc.c, dwarf2read.c, event-loop.c,
+	event-top.c, exceptions.c, exec.c, extension.h, fbsd-nat.c,
+	features/aarch64-core.c, features/aarch64-fpu.c,
+	features/aarch64-pauth.c, features/aarch64-sve.c,
+	features/i386/32bit-avx.c, features/i386/32bit-avx512.c,
+	features/i386/32bit-core.c, features/i386/32bit-linux.c,
+	features/i386/32bit-mpx.c, features/i386/32bit-pkeys.c,
+	features/i386/32bit-segments.c, features/i386/32bit-sse.c,
+	features/i386/64bit-avx.c, features/i386/64bit-avx512.c,
+	features/i386/64bit-core.c, features/i386/64bit-linux.c,
+	features/i386/64bit-mpx.c, features/i386/64bit-pkeys.c,
+	features/i386/64bit-segments.c, features/i386/64bit-sse.c,
+	features/i386/x32-core.c, features/riscv/32bit-cpu.c,
+	features/riscv/32bit-csr.c, features/riscv/32bit-fpu.c,
+	features/riscv/64bit-cpu.c, features/riscv/64bit-csr.c,
+	features/riscv/64bit-fpu.c, features/tic6x-c6xp.c,
+	features/tic6x-core.c, features/tic6x-gp.c, filename-seen-cache.h,
+	findcmd.c, findvar.c, fork-child.c, gcore.c, gdb_bfd.c, gdb_bfd.h,
+	gdb_proc_service.h, gdb_regex.c, gdb_select.h, gdb_usleep.c,
+	gdbarch-selftests.c, gdbthread.h, gdbtypes.h, gnu-nat.c,
+	go32-nat.c, guile/guile.c, guile/scm-ports.c,
+	guile/scm-safe-call.c, guile/scm-type.c, i386-fbsd-nat.c,
+	i386-fbsd-tdep.c, i386-go32-tdep.c, i386-linux-nat.c,
+	i386-linux-tdep.c, i386-tdep.c, i387-tdep.c,
+	ia64-libunwind-tdep.c, ia64-linux-nat.c, inf-child.c,
+	inf-ptrace.c, infcall.c, infcall.h, infcmd.c, inferior-iter.h,
+	inferior.c, inferior.h, inflow.c, inflow.h, infrun.c, infrun.h,
+	inline-frame.c, language.h, linespec.c, linux-fork.c, linux-nat.c,
+	linux-tdep.c, linux-thread-db.c, location.c, machoread.c,
+	macrotab.h, main.c, maint.c, maint.h, memattr.c, memrange.h,
+	mi/mi-cmd-break.h, mi/mi-cmd-env.c, mi/mi-cmd-stack.c,
+	mi/mi-cmd-var.c, mi/mi-interp.c, mi/mi-main.c, mi/mi-parse.h,
+	minsyms.c, mips-linux-tdep.c, namespace.h,
+	nat/aarch64-linux-hw-point.c, nat/aarch64-linux-hw-point.h,
+	nat/aarch64-linux.c, nat/aarch64-sve-linux-ptrace.c,
+	nat/amd64-linux-siginfo.c, nat/fork-inferior.c,
+	nat/linux-btrace.c, nat/linux-btrace.h, nat/linux-namespaces.c,
+	nat/linux-nat.h, nat/linux-osdata.c, nat/linux-personality.c,
+	nat/linux-procfs.c, nat/linux-ptrace.c, nat/linux-ptrace.h,
+	nat/linux-waitpid.c, nat/mips-linux-watch.c,
+	nat/mips-linux-watch.h, nat/ppc-linux.c, nat/x86-dregs.c,
+	nat/x86-dregs.h, nat/x86-linux-dregs.c, nat/x86-linux.c,
+	nto-procfs.c, nto-tdep.c, objfile-flags.h, objfiles.c, objfiles.h,
+	obsd-nat.c, observable.h, osdata.c, p-valprint.c, parse.c,
+	parser-defs.h, ppc-linux-nat.c, printcmd.c, probe.c, proc-api.c,
+	procfs.c, producer.c, progspace.h, psymtab.h,
+	python/py-framefilter.c, python/py-inferior.c, python/py-ref.h,
+	python/py-type.c, python/python.c, record-btrace.c, record-full.c,
+	record.c, record.h, regcache-dump.c, regcache.c, regcache.h,
+	remote-fileio.c, remote-fileio.h, remote-sim.c, remote.c,
+	riscv-tdep.c, rs6000-aix-tdep.c, rust-exp.y, s12z-tdep.c,
+	selftest-arch.c, ser-base.c, ser-event.c, ser-pipe.c, ser-tcp.c,
+	ser-unix.c, skip.c, solib-aix.c, solib-target.c, solib.c,
+	source-cache.c, source.c, source.h, sparc-nat.c, spu-linux-nat.c,
+	stack.c, stap-probe.c, symfile-add-flags.h, symfile.c, symfile.h,
+	symtab.c, symtab.h, target-descriptions.c, target-descriptions.h,
+	target-memory.c, target.c, target.h, target/waitstatus.c,
+	target/waitstatus.h, thread-iter.h, thread.c, tilegx-tdep.c,
+	top.c, top.h, tracefile-tfile.c, tracefile.c, tracepoint.c,
+	tracepoint.h, tui/tui-io.c, ui-file.c, ui-out.h,
+	unittests/array-view-selftests.c,
+	unittests/child-path-selftests.c, unittests/cli-utils-selftests.c,
+	unittests/common-utils-selftests.c,
+	unittests/copy_bitwise-selftests.c, unittests/environ-selftests.c,
+	unittests/format_pieces-selftests.c,
+	unittests/function-view-selftests.c,
+	unittests/lookup_name_info-selftests.c,
+	unittests/memory-map-selftests.c, unittests/memrange-selftests.c,
+	unittests/mkdir-recursive-selftests.c,
+	unittests/observable-selftests.c,
+	unittests/offset-type-selftests.c, unittests/optional-selftests.c,
+	unittests/parse-connection-spec-selftests.c,
+	unittests/ptid-selftests.c, unittests/rsp-low-selftests.c,
+	unittests/scoped_fd-selftests.c,
+	unittests/scoped_mmap-selftests.c,
+	unittests/scoped_restore-selftests.c,
+	unittests/string_view-selftests.c, unittests/style-selftests.c,
+	unittests/tracepoint-selftests.c, unittests/unpack-selftests.c,
+	unittests/utils-selftests.c, unittests/xml-utils-selftests.c,
+	utils.c, utils.h, valarith.c, valops.c, valprint.c, value.c,
+	value.h, varobj.c, varobj.h, windows-nat.c, x86-linux-nat.c,
+	xml-support.c, xml-support.h, xml-tdesc.h, xstormy16-tdep.c,
+	xtensa-linux-nat.c, dwarf2read.h: Change common to gdbsupport.
+
+2019-07-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* linespec.c (decode_digits_list_mode): Set explicit_line to a
+	bool value.
+	(decode_digits_ordinary): Set explicit_line field in sal.
+	* symtab.c (skip_prologue_sal): Don't skip prologue for a
+	symtab_and_line that was set on an explicit line number in
+	assembler code.  Do always update the recorded symtab and line if
+	we do skip the prologue.
+
+2019-07-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* breakpoint.c (set_breakpoint_location_function): Remove
+	explicit_loc parameter.
+	(momentary_breakpoint_from_master): Update call to
+	set_breakpoint_location_function.
+	(add_location_to_breakpoint): Likewise.
+
+2019-07-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_features_from_gdbarch_info): Don't modify
+	required features based on default bfd type when no specific bfd
+	is present.
+
+2019-07-08  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Mention that GDB printf and eval commands can now print
+	C-style and Ada-style convenience var strings without
+	calling the inferior.
+	* printcmd.c (printf_c_string): Locally print GDB internal var
+	instead of transiting via the inferior.
+	(printf_wide_c_string): Likewise.
+
+2019-07-04  Alan Hayward  <alan.hayward@arm.com>
+
+	PR breakpoints/25011
+	* symfile.c (symbol_file_command): Call solib_create_inferior_hook.
+
+2019-07-04  Tom Tromey  <tom@tromey.com>
+
+	PR tui/24724:
+	* tui/tui-winsource.c (tui_clear_source_content): Update.
+	(tui_source_window_base::set_is_exec_point_at): Fix comment.
+	(tui_update_breakpoint_info): Update.
+	(tui_set_exec_info_content): Update.
+	* tui/tui-source.c (tui_set_source_content_nil): Update.
+	* tui/tui-disasm.c (tui_set_disassem_content): Don't set
+	has_break.
+	* tui/tui-data.h (enum tui_bp_flag): New.
+	(tui_bp_flags): New enum flags type.
+	(struct tui_source_element) <break_mode>: Change type.  Rename
+	from has_break.
+	(TUI_BP_ENABLED, TUI_BP_DISABLED, TUI_BP_HIT)
+	(TUI_BP_CONDITIONAL, TUI_BP_HARDWARE): Don't define.  Now enum
+	constants.
+	* tui/tui-winsource.h: Fix comment.
+
+2019-07-04  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch32-linux-nat.h (VFP_REGS_SIZE): Remove define.
+	* aarch64-linux-nat.c (fetch_fpregs_from_thread)
+	(store_fpregs_to_thread)
+	(aarch64_linux_nat_target::read_description): Use ARM_VFP3_REGS_SIZE.
+	* arch/arm.h (IWMMXT_VEC_REGISTER_SIZE, ARM_CORE_REGS_SIZE)
+	(ARM_FP_REGS_SIZE, ARM_VFP2_REGS_SIZE, ARM_VFP3_REGS_SIZE)
+	(IWMMXT_REGS_SIZE): Add define.
+	* arm-linux-nat.c (IWMMXT_REGS_SIZE): Remove define.
+	(fetch_vfp_regs, store_vfp_regs)
+	(arm_linux_nat_target::read_description): Use ARM_VFP3_REGS_SIZE.
+	* arm-tdep.c (arm_register_g_packet_guesses): Use new defines.
+
+2019-07-04  Alan Hayward  <alan.hayward@arm.com>
+
+        * arch/arm-get-next-pcs.c (thumb_get_next_pcs_raw): Use ARM_
+        defines.
+        * arch/arm-linux.c (arm_linux_sigreturn_next_pc_offset): Likewise.
+        * arch/arm.h (INT_REGISTER_SIZE) Rename from...
+        (ARM_INT_REGISTER_SIZE): ...to this.
+        (ARM_FP_REGISTER_SIZE) (ARM_VFP_REGISTER_SIZE): Add define.
+        * arm-linux-tdep.c (ARM_LINUX_JB_ELEMENT_SIZE)
+        (ARM_LINUX_SIZEOF_GREGSET, arm_linux_supply_gregset)
+        (arm_linux_collect_gregset, supply_nwfpe_register)
+        (collect_nwfpe_register, arm_linux_collect_nwfpe): Use ARM_
+        defines.
+        * arm-linux-tdep.h (ARM_LINUX_SIZEOF_NWFPE, NWFPE_FPSR_OFFSET)
+        (NWFPE_FPCR_OFFSET, NWFPE_TAGS_OFFSET): Likewise
+        * arm-nbsd-tdep.c (ARM_NBSD_JB_ELEMENT_SIZE): Likewise.
+        * arm-tdep.c (arm_push_dummy_call, arm_extract_return_value)
+        (arm_return_in_memory, arm_store_return_value)
+        (arm_get_longjmp_target, arm_register_g_packet_guesses)
+        (arm_record_ld_st_multiple): Likewise.
+        * arm-tdep.h (FP_REGISTER_SIZE, VFP_REGISTER_SIZE): Remove.
+        * arm-wince-tdep.c (ARM_WINCE_JB_ELEMENT_SIZE): Use ARM_ defines.
+
+2019-07-04  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-linux-tdep.c (aarch64_linux_init_abi): Use
+	AARCH64_DISPLACED_MODIFIED_INSNS.
+	* aarch64-tdep.c (struct aarch64_displaced_step_data)
+	(aarch64_displaced_step_copy_insn): Likewise.
+	* aarch64-tdep.h (DISPLACED_MODIFIED_INSNS): Rename from..
+	(AARCH64_DISPLACED_MODIFIED_INSNS): ...to this.
+	* arm-linux-tdep.c (arm_linux_cleanup_svc): Use
+	ARM_DISPLACED_MODIFIED_INSNS.
+	* arm-tdep.c (arm_gdbarch_init): Likewise.
+	* arm-tdep.h (DISPLACED_MODIFIED_INSNS): Rename from..
+	(ARM_DISPLACED_MODIFIED_INSNS): ...to this.
+	(struct arm_displaced_step_closure): Use
+	ARM_DISPLACED_MODIFIED_INSNS.
+
+2019-07-04  Alan Hayward  <alan.hayward@arm.com>
+
+	* features/Makefile: Remove unused xml files.
+	* features/aarch64.xml: Remove.
+	* features/i386/amd64-avx-avx512-linux.xml: Remove.
+	* features/i386/amd64-avx-avx512.xml: Remove.
+	* features/i386/amd64-avx-linux.xml: Remove.
+	* features/i386/amd64-avx-mpx-avx512-pku-linux.xml: Remove.
+	* features/i386/amd64-avx-mpx-avx512-pku.xml: Remove.
+	* features/i386/amd64-avx-mpx-linux.xml: Remove.
+	* features/i386/amd64-avx-mpx.xml: Remove.
+	* features/i386/amd64-avx.xml: Remove.
+	* features/i386/amd64-linux.xml: Remove.
+	* features/i386/amd64-mpx-linux.xml: Remove.
+	* features/i386/amd64-mpx.xml: Remove.
+	* features/i386/amd64.xml: Remove.
+	* features/i386/i386-avx-avx512-linux.xml: Remove.
+	* features/i386/i386-avx-avx512.xml: Remove.
+	* features/i386/i386-avx-linux.xml: Remove.
+	* features/i386/i386-avx-mpx-avx512-pku-linux.xml: Remove.
+	* features/i386/i386-avx-mpx-avx512-pku.xml: Remove.
+	* features/i386/i386-avx-mpx-linux.xml: Remove.
+	* features/i386/i386-avx-mpx.xml: Remove.
+	* features/i386/i386-avx.xml: Remove.
+	* features/i386/i386-linux.xml: Remove.
+	* features/i386/i386-mmx-linux.xml: Remove.
+	* features/i386/i386-mmx.xml: Remove.
+	* features/i386/i386-mpx-linux.xml: Remove.
+	* features/i386/i386-mpx.xml: Remove.
+	* features/i386/i386.xml: Remove.
+	* features/i386/x32-avx-avx512-linux.xml: Remove.
+	* features/i386/x32-avx-linux.xml: Remove.
+	* features/i386/x32-linux.xml: Remove.
+
+2019-07-04  Alan Hayward  <alan.hayward@arm.com>
+
+	* regformats/aarch64.dat: Remove.
+	* regformats/i386/amd64-avx-avx512-linux.dat: Remove.
+	* regformats/i386/amd64-avx-linux.dat: Remove.
+	* regformats/i386/amd64-avx-mpx-avx512-pku-linux.dat: Remove.
+	* regformats/i386/amd64-avx-mpx-linux.dat: Remove.
+	* regformats/i386/amd64-linux.dat: Remove.
+	* regformats/i386/amd64-mpx-linux.dat: Remove.
+	* regformats/i386/amd64.dat: Remove.
+	* regformats/i386/i386-avx-avx512-linux.dat: Remove.
+	* regformats/i386/i386-avx-linux.dat: Remove.
+	* regformats/i386/i386-avx-mpx-avx512-pku-linux.dat: Remove.
+	* regformats/i386/i386-avx-mpx-linux.dat: Remove.
+	* regformats/i386/i386-linux.dat: Remove.
+	* regformats/i386/i386-mmx-linux.dat: Remove.
+	* regformats/i386/i386-mpx-linux.dat: Remove.
+	* regformats/i386/i386.dat: Remove.
+	* regformats/i386/x32-avx-avx512-linux.dat: Remove.
+	* regformats/i386/x32-avx-linux.dat: Remove.
+	* regformats/i386/x32-linux.dat: Remove.
+
+2019-07-04  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c: Remove xml self tests.
+	* amd64-linux-tdep.c: Likewise.
+	* amd64-tdep.c: Likewise.
+	* i386-linux-tdep.c: Likewise.
+	* i386-tdep.c: Likewise.
+
+2019-07-03  Pedro Alves  <palves@redhat.com>
+
+	PR cli/24732
+	* cli/cli-cmds.c (struct pipe_cmd_opts): New.
+	(pipe_cmd_option_defs): New.
+	(make_pipe_cmd_options_def_group): New.
+	(pipe_command): Use gdb::option::process_options.
+	(pipe_command_completer): New function.
+	(_initialize_cli_cmds): Install completer for "pipe" command.
+
+2019-07-03  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-option.c (union option_value) <string>: New field.
+	(struct option_def_and_value): Add ctor, move ctor, dtor and
+	use DISABLE_COPY_AND_ASSIGN.
+	(option_def_and_value::clear_value): New.
+	(parse_option, save_option_value_in_ctx, get_val_type_str)
+	(add_setshow_cmds_for_options): Handle var_string.
+	* cli-option.h (union option_def::var_address) <string>: New
+	field.
+	(struct string_option_def): New.
+	* maint-test-options.c (struct test_options_opts): Add default
+	ctor and use DISABLE_COPY_AND_ASSIGN.
+	<string_opt>: New field.
+	(test_options_opts::~test_options_opts): New.
+	(test_options_opts::dump): Also dump "-string".
+	(test_options_option_defs): Install "string.
+
+2019-07-03  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-option.c (parse_option) <var_enum>: Don't return an
+	option_value with a null enumeration.
+	(complete_options): Save the option values in the context.
+	(save_option_value_in_ctx): New, factored out from ...
+	(process_options): ... here.
+	* cli/cli-utils.c (get_ulongest): Don't advance PP until the end
+	of the function.
+	* maint-test-options.c (test_options_opts::dump): New, factored
+	out from ...
+	(maintenance_test_options_command_mode): ... here.
+	(maintenance_test_options_command_completion_result): Delete.
+	(maintenance_test_options_command_completion_text): Update
+	comment.
+	(maintenance_show_test_options_completion_result): Change
+	prototype.  Just print
+	maintenance_test_options_command_completion_text.
+	(save_completion_result): New.
+	(maintenance_test_options_completer_mode): Pass options context to
+	complete_options, and then save a dump.
+	(_initialize_maint_test_options): Use add_cmd to install "maint
+	show test-options-completion-result".
+
+2019-07-03  Pedro Alves  <palves@redhat.com>
+
+	* NEWS (New commands): Mention "with" and "maint with".
+	* cli/cli-cmds.c (with_command_1, with_command_completer_1)
+	(with_command, with_command_completer): New.
+	(pipe_command): Adjust to new repeat_previous
+	interface.
+	(_initialize_cli_cmds): Install the "with" command and its "w"
+	alias.
+	* cli/cli-cmds.h (with_command_1, with_command_completer_1): New
+	declarations.
+	* cli/cli-setshow.c (parse_cli_var_uinteger)
+	(parse_cli_var_zuinteger_unlimited, do_set_command): Handle empty
+	argument strings for all var_types.
+	(get_setshow_command_value_string): New, factored out from ...
+	(do_show_command): ... this.
+	* cli/cli-setshow.h: Include <string>.
+	(get_setshow_command_value_string): Declare.
+	* command.h (repeat_previous): Now returns const char *.  Adjust
+	comment.
+	* maint.c: Include "cli/cli-cmds.h".
+	(maintenance_with_cmd, maintenance_with_cmd_completer): New.
+	(_initialize_maint_cmds): Register the "maintenance with" command.
+	* top.c (repeat_previous): Move bits from pipe_command here:
+	Return the saved command line, if any; error out if there's no
+	command to relaunch.
+
+2019-07-03  Pedro Alves  <palves@redhat.com>
+
+	* NEWS (New commands): Mention "maint set/show test-settings"
+	instead of "maint test-settings".
+	* maint-test-settings.c (maintenance_test_settings_list): Delete.
+	(maintenance_test_settings_set_list): Rename to ...
+	(maintenance_set_test_settings_list): ... this.
+	(maintenance_test_settings_show_list): Rename to  ...
+	(maintenance_show_test_settings_list): ... this.
+	(maintenance_test_settings_cmd): Delete.
+	(maintenance_test_settings_set_cmd): ...
+	(maintenance_set_test_settings_cmd): ... this.
+	(maintenance_test_settings_show_cmd): ...
+	(maintenance_show_test_settings_cmd): ... this.
+	(maintenance_test_settings_show_value_cmd):
+	(maintenance_show_test_settings_value_cmd): ... this.
+	(_initialize_maint_test_settings): No longer install the "maint
+	test-settings" prefix command.  Rename "maint test-settings set"
+	to "maint set test-settings", and "maint test-settings show" to
+	"maint show test-settings".  Adjust all subcommands.
+
+2019-07-03  Pedro Alves  <palves@redhat.com>
+
+	* maint-test-settings.c: Fix file's intro comment.  Replace all
+	references to "test-options" with references to "test-settings",
+	in comments.
+
+2019-07-03  Pedro Alves  <palves@redhat.com>
+
+	* maint-test-settings.c (maintenance_test_settings_xxx)
+	(maintenance_test_settings_yyy, maintenance_test_settings_zzz):
+	New.
+	(maintenance_test_settings_enums): Use them.
+	(maintenance_test_settings_enum): Default to
+	maintenance_test_settings_xxx.
+	(_initialize_maint_test_settings): Initialize
+	MAINTENANCE_TEST_SETTINGS_FILENAME.
+
+2019-07-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.h (remove_breakpoints_inf): Change return type to
+	void, move function documentation here.
+	* breakpoint.c (remove_breakpoints_inf): Change return type to
+	void, move function documentation to header.
+
+2019-07-02  Pedro Alves  <palves@redhat.com>
+
+	* NEWS (Completion improvements): Mention "info threads".
+	* thread.c (struct info_threads_opts, info_threads_option_defs)
+	(make_info_threads_options_def_group): New.
+	(info_threads_command): Use gdb::option::process_options.
+	(info_threads_command_completer): New.
+	(_initialize_thread): Use gdb::option::build_help to build the
+	help text for "info threads".
+
+2019-07-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* defs.h (generic_load): Move from here...
+	* symfile.h (generic_load): ... to here.  Rename name parameter
+	to args.
+	* symfile.c (generic_load): Add comment.
+
+2019-07-01  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c
+	(dw2_debug_names_iterator::find_vec_in_debug_names): Hoist
+	declaration of without_params.  Fix formatting.
+
+2019-07-01  Tom Tromey  <tromey@adacore.com>
+
+	* ada-exp.y (find_primitive_type): Update.
+	* ada-lang.h (ada_lookup_symbol): Update.
+	* ada-lang.c (ada_lookup_symbol): Remove "is_a_field_of_this"
+	parameter.
+	(ada_lookup_encoded_symbol, ada_lookup_symbol_nonlocal): Update.
+
+2019-06-28  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR breakpoints/24541
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh: Add 'stap_adjust_register'.
+	* i386-tdep.c: Include '<unordered_set>'.
+	(i386_stap_adjust_register): New function.
+	(i386_elf_init_abi): Register 'i386_stap_adjust_register'.
+	* stap-probe.c (stap_parse_register_operand): Call
+	'gdbarch_stap_adjust_register'.
+
+2019-06-28  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR python/24742
+	https://bugzilla.redhat.com/show_bug.cgi?id=1723564
+	* python/python.c (do_start_initialization): Use 'xmalloc'
+	instead of 'PyMem_Malloc'.
+
+2019-06-28  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (partial_die_info::read): Prefer the linkage name
+	for Ada.
+
+2019-06-27  Tom Tromey  <tromey@adacore.com>
+
+	* arm-tdep.c (arm_objfile_data_key): Move lower.  Change type to
+	objfile_key.
+	(arm_find_mapping_symbol, arm_record_special_symbol)
+	(_initialize_arm_tdep): Update.
+	(arm_objfile_data_free): Remove.
+
+2019-06-27  Tom Tromey  <tromey@adacore.com>
+
+	* cp-valprint.c (cp_print_value_fields): Pass opts, not options,
+	to cp_print_static_field.
+
+2019-06-26  Tom Tromey  <tromey@adacore.com>
+
+	* minsyms.c (lookup_minimal_symbol_solib_trampoline): Remove.
+	* minsyms.h (lookup_minimal_symbol_solib_trampoline): Don't
+	declare.
+
+2019-06-26  Alan Hayward  <alan.hayward@arm.com>
+
+	* features/aarch64-core.c (create_feature_aarch64_core):
+	Regenerate.
+	* features/aarch64-core.xml: Add cpsr flags.
+
+2019-06-26  Alan Hayward  <alan.hayward@arm.com>
+
+	* arm-tdep.c (arm_gnu_triplet_regexp): New function.
+	(arm_gdbarch_init): Add arm_gnu_triplet_regexp.
+
+2019-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* arm-tdep.c (struct arm_per_objfile) <section_maps_sorted>: New
+	field.
+	(arm_find_mapping_symbol): Sort mapping symbol vectors on first
+	use.
+	(arm_record_special_symbol): Don't insert new symbol in sorted
+	position, push it at the end.
+
+2019-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* arm-tdep.c (struct arm_mapping_symbol) (operator <): New.
+	(arm_mapping_symbol_s): Remove.
+	(DEF_VEC_O(arm_mapping_symbol_s)): Remove.
+	(arm_mapping_symbol_vec): New typedef.
+	(struct arm_per_objfile): Add constructor.
+	<section_maps>: Change type to
+	std::unique_ptr<arm_mapping_symbol_vec[]>.
+	(arm_compare_mapping_symbols): Remove.
+	(arm_find_mapping_symbol): Adjust to section_maps type change.
+	(arm_objfile_data_free): Call delete on arm_per_objfile.
+	(arm_record_special_symbol): Adjust to section_maps type change.
+	Allocate arm_per_objfile with new.
+
+2019-06-25  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-cmds.c (alias_command): Compare the alias prefix
+	with the command prefix.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_delete_win): Remove "return".
+	* tui/tui-data.c (~tui_gen_win_info): Remove "if".
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (init_and_make_win): Assert on unrecognized
+	type.
+	* tui/tui-data.h (struct tui_gen_win_info): Make constructor
+	protected.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c
+	(tui_source_window_base::set_is_exec_point_at): Add check against
+	LOA_ADDRESS.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.c (tui_set_source_content): Don't check before
+	xfree.
+	* tui/tui-disasm.c (tui_disassemble): Don't check before xfree.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_update_source_window_as_is)
+	(tui_alloc_source_buffer, tui_line_is_displayed)
+	(tui_addr_is_displayed): Change type of win_info.
+	* tui/tui-winsource.c (tui_update_source_window_as_is)
+	(tui_clear_source_content, tui_show_source_line)
+	(tui_show_source_content, tui_source_window_base::refill)
+	(tui_source_window_base::set_is_exec_point_at)
+	(tui_source_window_base::set_is_exec_point_at)
+	(tui_update_breakpoint_info, tui_set_exec_info_content): Update.
+	(tui_alloc_source_buffer, tui_line_is_displayed)
+	(tui_addr_is_displayed): Change type of win_info.  Update.
+	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
+	(tui_source_window_base::do_make_visible_with_new_height):
+	Update.
+	* tui/tui-source.c (tui_set_source_content)
+	(tui_set_source_content_nil)
+	(tui_source_window::do_scroll_vertical): Update.
+	* tui/tui-layout.c (show_layout): Update.
+	* tui/tui-disasm.c (tui_set_disassem_content)
+	(tui_disasm_window::do_scroll_vertical): Update.
+	* tui/tui-data.h (tui_win_content): Remove.
+	(struct tui_gen_win_info) <content, content_size>: Remove.
+	(struct tui_source_element): Add initializers and destructor.
+	(union tui_which_element, struct tui_win_element): Remove.
+	(struct tui_source_window_base) <content>: New field.
+	(struct tui_data_window): Remove destructor.
+	(tui_alloc_content, tui_free_win_content)
+	(tui_free_all_source_wins_content): Don't declare.
+	* tui/tui-data.c (tui_initialize_static_data): Update.
+	(init_content_element, tui_alloc_content): Remove.
+	(~tui_gen_win_info): Update.
+	(~tui_data_window, tui_free_all_source_wins_content)
+	(tui_free_win_content, free_content, free_content_elements):
+	Remove.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_clear_source_content)
+	(tui_erase_source_content, tui_show_source_content): Change type
+	of win_info.
+	* tui/tui-winsource.c (tui_clear_source_content)
+	(tui_erase_source_content, tui_show_source_content): Change type
+	of win_info.
+	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update.
+	* tui/tui-source.h (tui_set_source_content_nil): Change type of
+	win_info.
+	* tui/tui-source.c (tui_set_source_content_nil): Change type of
+	win_info.
+	* tui/tui-layout.c (show_source_or_disasm_and_command): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_clear_source_content)
+	(tui_source_window_base::set_is_exec_point_at): Update.
+	* tui/tui-source.c (tui_set_source_content_nil): Update.
+	* tui/tui-data.h (struct tui_source_element) <is_exec_point>: Now
+	a bool.
+	* tui/tui-data.c (init_content_element): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_gen_win_info::make_visible): Update.
+	* tui/tui-win.c (make_invisible_and_set_new_height): Update.
+	* tui/tui-layout.c (init_and_make_win): Update.
+	* tui/tui.h (enum tui_win_type): Update.
+	* tui/tui-data.h (tui_win_is_auxiliary): Rename from
+	tui_win_is_auxillary.
+	* tui/tui-data.c (tui_win_is_auxiliary): Rename from
+	tui_win_is_auxillary.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_data_window::refresh_window): Update.
+	* tui/tui-windata.c (tui_data_window::first_data_item_displayed)
+	(tui_delete_data_content_windows, tui_display_all_data)
+	(tui_data_window::do_scroll_vertical, tui_display_data_from):
+	Update.
+	* tui/tui-win.c (tui_data_window::set_new_height): Simplify.
+	* tui/tui-regs.c (tui_last_regs_line_no)
+	(tui_line_from_reg_element_no, tui_first_reg_element_no_inline)
+	(tui_show_registers): Update.
+	(tui_show_register_group): Return void.  Update.
+	(tui_display_registers_from, tui_display_reg_element_at_line)
+	(tui_display_registers_from_line, tui_check_register_values):
+	Update.
+	* tui/tui-data.h (union tui_which_element) <data_window>: Remove
+	member.
+	(struct tui_data_window) <regs_content>: Now a std::vector.
+	<regs_content_count>: Remove.
+	(tui_add_content_elements, tui_free_data_content): Don't declare.
+	* tui/tui-data.c (tui_data_window::clear_detail): Update.
+	(init_content_element): Remove DATA_WIN case.  Add assert.
+	(tui_add_content_elements): Remove.
+	(tui_data_window): Update.
+	(tui_free_data_content): Remove.
+	(free_content_elements): Remove DATA_WIN case.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.c (tui_data_item_window): Update.
+	* tui/tui-windata.h (tui_check_data_values): Don't declare.
+	* tui/tui-windata.c (tui_display_all_data)
+	(tui_display_data_from_line): Update.
+	(tui_check_data_values): Remove.
+	* tui/tui-regs.c (tui_show_register_group)
+	(tui_display_reg_element_at_line): Update.
+	* tui/tui-hooks.c (tui_register_changed)
+	(tui_refresh_frame_and_register_information): Call
+	tui_check_register_values.
+	* tui/tui-data.h (struct tui_data_window) <data_content,
+	data_content_count, data_type>: Remove.
+	(enum tui_data_type): Remove.
+
+	* tui/tui-data.c (tui_data_window::clear_detail)
+	(~tui_data_window): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.h (tui_first_data_item_displayed): Don't
+	declare.
+	* tui/tui-windata.c (tui_data_window::first_data_item_displayed):
+	Rename from tui_first_data_item_displayed.  Update.
+	(tui_data_window::refresh_all)
+	(tui_data_window::do_scroll_vertical): Update.
+	* tui/tui-data.h (struct tui_data_window)
+	<first_data_item_displayed>: Declare new method.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (tui_init_generic_part): Don't declare.
+	* tui/tui-data.c (tui_init_generic_part): Remove, moving
+	contents...
+	(tui_initialize_static_data): ...here.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_show_registers, tui_show_register_group)
+	(tui_display_registers_from, tui_check_register_values): Update.
+	(tui_display_register): Remove win_info parameter; update.
+	(tui_get_register): Change type of parameters.
+	* tui/tui-data.h (struct tui_data_element): Remove.
+	(union tui_which_element) <data>: Remove.
+	<data_window>: Change type.
+	(struct tui_data_item_window): New.
+	* tui/tui-data.c (init_content_element): Remove DATA_ITEM_WIN
+	case.  Add assert.
+	(~tui_data_item_window): New destructor.
+	(free_content_elements): Remove DATA_ITEM_WIN case.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.h (enum tui_win_type) <MAX_WINDOWS, UNDEFINED_WIN>:
+	Remove.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_command_element): Remove.
+	(union tui_which_element) <command>: Remove.
+	* tui/tui-data.c (init_content_element): Remove CMD_WIN case.  Add
+	assert.
+	(free_content_elements): Remove CMD_WIN case.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (tui_set_layout): Update.
+	* tui/tui-data.h (struct tui_layout_def) <split>: Remove.
+	* tui/tui-data.c (layout_def): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_refresh_all): Update.
+	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
+	(tui_source_window_base::set_new_height): Update.
+	* tui/tui-stack.c (tui_make_status_line): Change parameter type.
+	Update.
+	(tui_set_locator_fullname, tui_set_locator_info)
+	(tui_show_frame_info): Update.
+	* tui/tui-source.c (tui_set_source_content)
+	(tui_source_is_displayed): Update.
+	* tui/tui-layout.c (show_source_disasm_command, show_data)
+	(show_source_or_disasm_and_command): Update.
+	* tui/tui-disasm.c (tui_set_disassem_content)
+	(tui_get_begin_asm_address): Update.
+	* tui/tui-data.h (struct tui_locator_element): Remove.
+	(union tui_which_element) <locator>: Remove.
+	(struct tui_locator_window): New.
+	(tui_locator_win_info_ptr): Change return type.
+	* tui/tui-data.c (_locator): Change type.
+	(tui_locator_win_info_ptr): Change return type.
+	(init_content_element): Remove LOCATOR_WIN case.  Add assert.
+	(tui_alloc_content): Add assert.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c
+	(tui_exec_info_window::maybe_allocate_content): New method.
+	(tui_set_exec_info_content, tui_show_exec_info_content): Update.
+	* tui/tui-layout.c (init_and_make_win): Add EXEC_INFO_WIN case.
+	(make_source_or_disasm_window): Add cast.
+	* tui/tui-data.h (union tui_which_element) <simple_string>:
+	Remove.
+	(struct tui_source_info): New.
+	(struct tui_source_window_base) <execution_info>: Change type.
+	* tui/tui-data.c (init_content_element): Remove EXEC_INFO_WIN
+	case, and add assert.
+	(tui_alloc_content): Add assert.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (tui_alloc_win_info): Don't declare.
+	* tui/tui-layout.c (init_and_make_win): Use "new" directly.
+	* tui/tui-data.c (tui_alloc_win_info): Remove.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_set_win_focus_to): Don't check window type.
+	* tui/tui-wingeneral.c (tui_unhighlight_win): Check
+	can_highlight.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_source_window_base::update_tab_width): Call
+	make_visible_with_new_height method.
+	(tui_win_info::make_visible_with_new_height): New method.
+	(tui_source_window_base::do_make_visible_with_new_height)
+	(tui_data_window::do_make_visible_with_new_height)
+	(tui_cmd_window::do_make_visible_with_new_height): New methods.
+	(make_visible_with_new_height): Remove.
+	(tui_resize_all, tui_adjust_win_heights): Use
+	make_visible_with_new_height method.
+	* tui/tui-data.h (struct tui_win_info)
+	<do_make_visible_with_new_height, make_visible_with_new_height>:
+	New methods.
+	(struct tui_source_window_base, struct tui_data_window)
+	(struct tui_cmd_window) <do_make_visible_with_new_height>: New
+	methods.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_source_window_base::update_tab_width): New
+	method.
+	(update_tab_width): Call update_tab_width method.
+	* tui/tui-data.h (struct tui_win_info)
+	(struct tui_source_window_base) <update_tab_width>: New methods.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (tui_make_window): Change type of "box_it"
+	parameter.
+	* tui/tui-wingeneral.c (tui_make_window): Change type of "box_it"
+	parameter.
+	(tui_gen_win_info::make_visible): Update.
+	* tui/tui-layout.c (init_and_make_win): Change type of "box_it"
+	parameter.
+	* tui/tui-data.h (enum tui_box): New enum.
+	(BOX_WINDOW, DONT_BOX_WINDOW): Remove defines.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (make_source_or_disasm_window): Always use
+	init_and_make_win for EXEC_INFO_WIN.
+	* tui/tui-data.h (struct tui_gen_win_info) <~tui_gen_win_info>: No
+	longer inline.
+	(struct tui_win_info) <~tui_win_info>: Inline.
+	(tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr):
+	Don't declare.
+	* tui/tui-data.c (source_win, disasm_win): Remove globals.
+	(tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr):
+	Remove.
+	(tui_initialize_static_data): Update.
+	(~tui_gen_win_info): Handle more cleanup here.
+	(~tui_source_window_base): Delete "execution_info".
+	(~tui_win_info): Move code to ~tui_gen_win_info; remove.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (make_command_window): Don't set
+	can_highlight.
+	(show_source_disasm_command): Call the reset method.
+	(show_data): Don't set can_highlight.  Call the reset method.
+	(tui_gen_win_info::reset): Rename from init_gen_win_info
+	(init_and_make_win): Simplify.  Return tui_gen_win_info.
+	(show_source_or_disasm_and_command): Call the reset method.
+	* tui/tui-data.h (struct tui_gen_win_info) <reset>: New method.
+	(struct tui_cmd_window): Set can_highlight.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_gen_win_info::make_visible): Rename
+	from make_visible.
+	(tui_make_visible, tui_make_invisible): Rewrite.
+	(tui_win_info::make_visible): Remove.
+	(tui_source_window_base::make_visible): Update.
+	* tui/tui-data.h (struct tui_gen_win_info) <make_visible>: New
+	method.  Moved from...
+	(struct tui_win_info) <make_visible>: ...here.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c
+	(tui_source_window_base::do_scroll_horizontal): Remove direction
+	parameter.
+	* tui/tui-windata.c (tui_data_window::do_scroll_vertical): Remove
+	direction parameter.
+	* tui/tui-win.c (tui_win_info::forward_scroll)
+	(tui_win_info::backward_scroll, tui_win_info::left_scroll)
+	(tui_win_info::right_scroll): Update.
+	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Remove
+	direction parameter.
+	* tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Remove
+	direction parameter.
+	* tui/tui-data.h (enum tui_scroll_direction): Remove.
+	(struct tui_win_info) <do_scroll_vertical, do_scroll_horizontal>:
+	Remove direction parameter.
+	(struct tui_source_window_base, struct tui_source_window)
+	(struct tui_disasm_window, struct tui_data_window)
+	(struct tui_cmd_window): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_set_exec_info_content)
+	(tui_show_exec_info_content, tui_erase_exec_info_content)
+	(tui_clear_exec_info_content, tui_update_exec_info): Change
+	argument to tui_source_window_base.
+	* tui/tui-winsource.c (tui_set_exec_info_content)
+	(tui_show_exec_info_content, tui_erase_exec_info_content)
+	(tui_clear_exec_info_content, tui_update_exec_info): Change
+	argument to tui_source_window_base.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_set_exec_info_content): Return void.
+	* tui/tui-winsource.c (tui_set_exec_info_content): Return void.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_set_exec_info_content): Remove NULL
+	check.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_alloc_source_buffer): Change return
+	type to void.
+	* tui/tui-winsource.c (tui_alloc_source_buffer): Change return
+	type to void.
+	* tui/tui-source.c (tui_set_source_content): Update.
+	* tui/tui-disasm.c (tui_set_disassem_content): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (window_name_completer, tui_set_focus)
+	(tui_all_windows_info): Use name method.
+	* tui/tui-data.h (struct tui_gen_win_info)
+	(struct tui_source_window, struct tui_disasm_window)
+	(struct tui_data_window, struct tui_cmd_window) <name>: New
+	method.
+	(tui_win_name): Don't declare.
+	* tui/tui-data.c (tui_partial_win_by_name): Use name method.
+	(tui_win_name): Remove.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_update_source_window)
+	(tui_update_source_window_as_is): Change parameter type.
+	* tui/tui-winsource.c (tui_update_source_window): Change win_info
+	to be a tui_source_window_base.
+	(tui_update_source_window_as_is): Likewise.
+	* tui/tui-win.c (make_visible_with_new_height): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_erase_source_content)
+	(tui_show_source_content, tui_show_exec_info_content)
+	(tui_erase_exec_info_content): Use refresh_window method.
+	* tui/tui-wingeneral.h (tui_refresh_win): Don't declare.
+	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Rename
+	from tui_refresh_win.
+	(tui_data_window::refresh_window): New method.
+	(tui_win_info::refresh, tui_source_window_base::refresh)
+	(tui_refresh_all): Use refresh_window method.
+	* tui/tui-stack.c (tui_show_locator_content): Call refresh_window
+	method.
+	* tui/tui-regs.c (tui_display_register): Call refresh_window
+	method.
+	* tui/tui-layout.c (show_source_disasm_command)
+	(show_source_or_disasm_and_command): Call refresh_window method.
+	* tui/tui-data.h (struct tui_gen_win_info)
+	(struct tui_data_window, struct tui_cmd_window) <refresh_window>:
+	New method.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_rl_other_window, tui_enable)
+	(tui_is_window_visible, tui_get_command_dimension): Update.
+	* tui/tui-winsource.c (tui_update_source_window_as_is)
+	(tui_clear_source_content, tui_erase_source_content)
+	(tui_show_source_line, tui_source_window_base::refill)
+	(tui_source_window_base::do_scroll_horizontal)
+	(tui_source_window_base::set_is_exec_point_at)
+	(tui_update_breakpoint_info, tui_set_exec_info_content)
+	(tui_alloc_source_buffer, tui_line_is_displayed)
+	(tui_addr_is_displayed): Update.
+	* tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win)
+	(tui_check_and_display_highlight_if_needed)
+	(tui_win_info::make_visible, tui_win_info::refresh)
+	(tui_refresh_all): Update.
+	* tui/tui-windata.c (tui_first_data_item_displayed)
+	(tui_delete_data_content_windows, tui_erase_data_content)
+	(tui_display_all_data, tui_data_window::refresh_all)
+	(tui_check_data_values): Update.
+	* tui/tui-win.c (window_name_completer, tui_update_gdb_sizes)
+	(tui_set_win_focus_to, tui_win_info::forward_scroll)
+	(tui_win_info::backward_scroll, tui_refresh_all_win)
+	(tui_resize_all, tui_set_focus, tui_all_windows_info)
+	(update_tab_width, tui_set_win_height, tui_adjust_win_heights)
+	(tui_source_window_base::set_new_height)
+	(tui_data_window::set_new_height)
+	(make_invisible_and_set_new_height)
+	(make_visible_with_new_height, new_height_ok)
+	(parse_scrolling_args): Update.
+	* tui/tui-stack.c (tui_show_frame_info): Update.
+	* tui/tui-source.c (tui_set_source_content)
+	(tui_set_source_content_nil, tui_source_is_displayed)
+	(tui_source_window::do_scroll_vertical): Update.
+	* tui/tui-regs.c (tui_show_registers, tui_show_register_group)
+	(tui_display_registers_from, tui_display_reg_element_at_line)
+	(tui_check_register_values, tui_reg_command): Update.
+	* tui/tui-layout.c (tui_default_win_height)
+	(show_source_disasm_command, show_data, init_and_make_win)
+	(show_source_or_disasm_and_command): Update.
+	* tui/tui-io.c (update_cmdwin_start_line, tui_putc, tui_puts)
+	(tui_redisplay_readline, tui_mld_flush)
+	(tui_mld_erase_entire_line, tui_mld_getc, tui_cont_sig)
+	(tui_getc): Update.
+	* tui/tui-disasm.c (tui_set_disassem_content)
+	(tui_disasm_window::do_scroll_vertical): Update.
+	* tui/tui-data.h (struct tui_gen_win_info) <~tui_gen_win_info>:
+	Now virtual.
+	(struct tui_win_info): Derive from tui_gen_win_info.
+	<~tui_win_info>: Mark as override.
+	<generic>: Remove member.
+	* tui/tui-data.c (tui_cmd_window::clear_detail, tui_next_win)
+	(tui_prev_win, tui_partial_win_by_name, tui_win_info)
+	(~tui_data_window, ~tui_win_info)
+	(tui_free_all_source_wins_content): Update.
+	* tui/tui-command.c (tui_refresh_cmd_win): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (init_and_make_win): Use new.
+	* tui/tui-data.h (struct tui_gen_win_info): Add constructor,
+	destructor, initializers.
+	(tui_alloc_generic_win_info): Don't declare.
+	* tui/tui-data.c (_locator): Add argument to constructor.
+	(source_win, disasm_win): New globals.
+	(exec_info): Remove.
+	(tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr):
+	Update.
+	(tui_alloc_generic_win_info): Remove.
+	(init_content_element): Use new.
+	(tui_win_info::tui_win_info): Update.
+	(free_content_elements) <case DATA_WIN>: Use delete.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_refresh_win): Update.
+	* tui/tui-windata.c (tui_first_data_item_displayed)
+	(tui_delete_data_content_windows): Update.
+	* tui/tui-win.c (tui_data_window::set_new_height): Update.
+	* tui/tui-regs.c (tui_show_registers, tui_show_register_group)
+	(tui_display_registers_from, tui_check_register_values): Update.
+	* tui/tui-data.h (union tui_which_element) <data_window>: Now a
+	pointer.
+	* tui/tui-data.c (init_content_element): Update.  Allocate the new
+	window.
+	(tui_free_data_content): Update.
+	(free_content_elements) <case DATA_WIN>: Free the window.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win):
+	Update.
+	* tui/tui-layout.c (make_command_window)
+	(show_source_disasm_command, show_data, init_and_make_win)
+	(show_source_or_disasm_and_command): Update.
+	* tui/tui-data.h (struct tui_win_info) <set_highlight>: New
+	method.
+	<can_highight, is_highlighted>: Now bool.
+	(tui_set_win_highlight): Don't declare.
+	* tui/tui-data.c (tui_set_win_highlight): Remove.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (make_visible): Remove check of window
+	type.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_win_info::max_height)
+	(tui_cmd_window::max_height): New methods.
+	(new_height_ok): Call max_height.
+	* tui/tui-data.h (struct tui_win_info, struct tui_cmd_window)
+	<max_height>: New method.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_source_window_base::set_new_height)
+	(tui_data_window::set_new_height): New methods.
+	(make_invisible_and_set_new_height): Call set_new_height method.
+	* tui/tui-data.h (struct tui_win_info)
+	(struct tui_source_window_base, struct tui_data_window)
+	<set_new_height>: New method.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_rl_other_window): Call the refresh_all method.
+	* tui/tui-windata.c (tui_data_window::refresh_all): Rename from
+	tui_refresh_data_win.
+	* tui/tui-win.c (tui_source_window_base::refresh_all): New
+	method.
+	(tui_refresh_all_win): Call the refresh_all method.
+	(tui_set_focus): Likewise.
+	* tui/tui-data.h (struct tui_win_info) <refresh_all>: New method.
+	(struct tui_source_window_base, struct tui_data_window) <refresh>:
+	Likewise.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_refill_source_window)
+	(tui_set_is_exec_point_at): Don't declare.
+	* tui/tui-winsource.c (tui_update_source_windows_with_addr)
+	(tui_source_window_base::refill): Rename from
+	tui_refill_source_window.
+	(tui_source_window_base::do_scroll_horizontal): Update.
+	(tui_source_window_base::set_is_exec_point_at): Rename from
+	tui_set_is_exec_point_at.
+	(tui_update_all_breakpoint_info): Update.
+	* tui/tui-stack.c (tui_show_frame_info): Update.
+	* tui/tui-layout.c (show_data): Add cast.
+	* tui/tui-hooks.c (tui_redisplay_source): Call refill method.
+	* tui/tui-data.h (struct tui_source_window_base) <refill,
+	set_is_exec_point_at>: New methods.
+	(tui_source_windows, tui_add_to_source_windows): Update types.
+	(tui_add_to_source_windows): Remove redundant declaration.
+	* tui/tui-data.c (source_windows): Store tui_source_window_base.
+	(tui_source_windows): Change return type.
+	(tui_clear_source_windows_detail): Update.
+	(tui_add_to_source_windows): Change type of parameter.
+	(tui_free_all_source_wins_content): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_win_info::refresh)
+	(tui_source_window_base::refresh): New methods.
+	(tui_refresh_all): Call the refresh method.
+	* tui/tui-data.h (struct tui_win_info)
+	(struct tui_source_window_base) <refresh>: New method.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.h (tui_is_window_visible): Return bool.
+	* tui/tui.c (tui_is_window_visible): Return bool.
+	* tui/tui-wingeneral.c (tui_make_window, make_visible)
+	(tui_make_visible, tui_make_invisible)
+	(tui_win_info::make_visible)
+	(tui_source_window_base::make_visible, make_all_visible)
+	(tui_make_all_visible, tui_make_all_invisible): Update.
+	* tui/tui-windata.c (tui_delete_data_content_windows): Update.
+	* tui/tui-data.h (struct tui_gen_win_info) <is_visible>: Now
+	bool.
+	(struct tui_win_info, struct tui_source_window_base)
+	(struct tui_cmd_window) <make_visible>: Change parameter to bool.
+	* tui/tui-data.c (tui_init_generic_part): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_win_info::make_visible)
+	(tui_source_window_base::make_visible): New methods.
+	(make_all_visible): Make method call.
+	* tui/tui-data.h (struct tui_win_info) <make_visible>: New method.
+	(struct tui_source_window_base, struct tui_cmd_window): Override
+	make_visible.
+	(tui_win_is_source_type): Don't declare.
+	* tui/tui-data.c (tui_win_is_source_type): Remove.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_source_or_disasm_and_command): Remove
+	NULL check.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_data_window, struct tui_cmd_window):
+	Inline constructor.  Add initializers for members.
+	* tui/tui-data.c (tui_data_window, tui_cmd_window): Remove
+	constructors; now inline in class.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_show_registers): Update.
+	* tui/tui-data.h (struct tui_data_window) <display_regs>: Now
+	bool.
+	* tui/tui-data.c (tui_data_window::clear_detail)
+	(tui_data_window): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.c (tui_display_all_data)
+	(tui_display_data_from_line, tui_display_data_from)
+	(tui_check_data_values, tui_data_window::do_scroll_vertical):
+	Update.
+	* tui/tui-regs.c (tui_last_regs_line_no)
+	(tui_line_from_reg_element_no, tui_first_reg_element_no_inline)
+	(tui_show_registers, tui_show_register_group)
+	(tui_display_registers_from, tui_display_reg_element_at_line)
+	(tui_display_registers_from_line, tui_check_register_values)
+	(tui_reg_next, tui_reg_prev): Update.
+	* tui/tui-layout.c (tui_set_layout, show_data): Update.
+	* tui/tui-data.h (struct tui_data_info): Remove.  Move contents to
+	tui_data_window.
+	(struct tui_win_info) <detail>: Remove.  Add new fields from
+	tui_data_info.
+	(TUI_DATA_WIN): Add cast.
+	* tui/tui-data.c (tui_data_window::clear_detail, tui_data_window)
+	(~tui_data_window): Simplify.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (show_source_disasm_command)
+	(show_source_or_disasm_and_command): Update.
+	* tui/tui-io.c (update_cmdwin_start_line)
+	(tui_redisplay_readline): Update.
+	* tui/tui-data.h (struct tui_command_info): Remove.
+	(struct tui_win_info) <detail>: Remove command_info member.
+	(struct tui_data_window) <start_line>: New member, from
+	tui_command_info.
+	(TUI_CMD_WIN): Add casts.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_window)
+	(tui_refill_source_window)
+	(tui_source_window_base::do_scroll_horizontal)
+	(tui_update_breakpoint_info, tui_set_exec_info_content)
+	(tui_show_exec_info_content, tui_erase_exec_info_content)
+	(tui_clear_exec_info_content): Update.
+	* tui/tui-wingeneral.c (make_all_visible, tui_refresh_all):
+	Update.
+	* tui/tui-win.c (make_invisible_and_set_new_height)
+	(make_visible_with_new_height): Update.
+	* tui/tui-source.c (tui_set_source_content)
+	(tui_show_symtab_source): Update.
+	* tui/tui-layout.c (extract_display_start_addr)
+	(show_source_disasm_command, show_data)
+	(make_source_or_disasm_window)
+	(show_source_or_disasm_and_command): Update.
+	* tui/tui-disasm.c (tui_set_disassem_content): Simplify.
+	(tui_disasm_window::do_scroll_vertical): Remove shadowing
+	"gdbarch".
+	* tui/tui-data.h (struct tui_source_info): Remove.  Move contents
+	to tui_source_window_base.
+	(struct tui_win_info) <detail>: Remove source_info member.
+	(struct tui_source_window_base) <has_locator>: Inline.
+	Move contents from tui_source_info; rename has_locator member to
+	m_has_locator.
+	(TUI_SRC_WIN, TUI_DISASM_WIN): Add casts.
+	* tui/tui-data.c (tui_source_window_base::has_locator): Move to
+	header file.
+	(tui_source_window_base::clear_detail, ~tui_source_window_base):
+	Simplify.
+	(tui_free_all_source_wins_content): Cast to
+	tui_source_window_base.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (make_invisible_and_set_new_height)
+	(make_visible_with_new_height): Call has_locator method.
+	* tui/tui-layout.c (show_source_disasm_command, show_data)
+	(show_source_or_disasm_and_command): Update for bool change.
+	* tui/tui-data.h (struct tui_source_info) <has_locator>: Now bool.
+	(tui_win_info) <has_locator>: New method.
+	(struct tui_source_window_base) <has_locator>: New method.
+	(tui_win_has_locator): Don't declare.
+	* tui/tui-data.c (tui_source_window_base::has_locator): Rename
+	from tui_win_has_locator.
+	(tui_source_window_base): Use false, not FALSE.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (tui_clear_win_detail): Don't declare.
+	* tui/tui-data.c (tui_clear_source_windows_detail): Call the
+	clear_detail method directly.
+	(tui_clear_win_detail): Remove.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Use
+	"this", not TUI_DISASM_WIN.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (tui_horizontal_source_scroll):  Don't
+	declare.
+	* tui/tui-winsource.c
+	(tui_source_window_base::do_scroll_horizontal): Rename from
+	tui_horizontal_source_scroll.
+	* tui/tui-windata.h (tui_vertical_data_scroll): Don't declare.
+	* tui/tui-windata.c (tui_data_window::do_scroll_vertical): Rename
+	from tui_vertical_data_scroll.
+	* tui/tui-win.h (tui_scroll): Don't declare.
+	* tui/tui-win.c (tui_win_info::forward_scroll)
+	(tui_win_info::backward_scroll, tui_win_info::left_scroll)
+	(tui_win_info::right_scroll): Rename and update.
+	(tui_scroll_forward_command, tui_scroll_backward_command)
+	(tui_scroll_left_command, tui_scroll_right_command): Update.
+	(tui_scroll): Remove.
+	* tui/tui-source.h: Don't declare tui_vertical_source_scroll.
+	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Rename
+	from tui_vertical_source_scroll.
+	* tui/tui-disasm.h (tui_vertical_disassem_scroll): Don't declare.
+	* tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Rename
+	from tui_vertical_disassem_scroll.
+	* tui/tui-data.h (struct tui_win_info) <do_scroll_vertical,
+	do_scroll_horizontal>: New methods.
+	<forward_scroll, backward_scroll, left_scroll, right_scroll>:
+	Likewise.
+	(struct tui_source_window_base): Add do_scroll_horizontal.
+	(struct tui_source_window, struct tui_disasm_window): Add
+	do_scroll_vertical.
+	(struct tui_data_window, struct tui_cmd_window): Add
+	do_scroll_horizontal and do_scroll_vertical.
+	* tui/tui-command.c (tui_dispatch_ctrl_char): Use method calls.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_source_window_base): New struct.
+	(struct tui_source_window): Derive from tui_source_window_base.
+	(struct tui_disasm_window): New struct.
+	* tui/tui-data.c (tui_source_window_base::clear_detail): Rename
+	from tui_source_window::clear_detail.
+	(tui_source_window_base): Rename from tui_source_window.
+	(~tui_source_window_base): Rename from ~tui_source_window.
+	(tui_alloc_win_info): Create a tui_disasm_window.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_source_window)
+	(struct tui_data_window): Declare destructors.
+	* tui/tui-data.c (~tui_source_window, ~tui_data_window): New
+	destructors.
+	(tui_win_info): Simplify.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_display_main)
+	(tui_update_source_windows_with_addr)
+	(tui_update_all_breakpoint_info): Update.
+	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
+	(new_height_ok, parse_scrolling_args): Update.
+	* tui/tui-stack.c (tui_show_frame_info): Update.
+	* tui/tui-data.h (struct tui_list): Remove.
+	(tui_source_windows): Return a reference to a std::vector.
+	* tui/tui-data.c (source_windows): Now a std::vector.
+	(tui_source_windows): Change return type.
+	(tui_clear_source_windows): Rewrite.
+	(tui_clear_source_windows_detail, tui_add_to_source_windows)
+	(tui_free_all_source_wins_content): Rewrite.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_win_info, struct tui_source_window)
+	(struct tui_data_window, struct tui_cmd_window): Declare
+	clear_detail method.
+	* tui/tui-data.c (tui_source_window::clear_detail)
+	(tui_cmd_window::clear_detail, tui_data_window::clear_detail): New
+	methods.
+	(tui_clear_win_detail): Simplify.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (make_source_window, make_disasm_window)
+	(make_source_or_disasm_window): Remove win_info_ptr parameter.
+	Return the new window.
+	(show_source_disasm_command, show_data)
+	(show_source_or_disasm_and_command): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (make_command_window): Remove win_info_ptr
+	parameter.  Return the new window.
+	(show_source_disasm_command): Update and remove NULL check.
+	(show_source_or_disasm_and_command): Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (init_and_make_win): Remove NULL check.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_win_info): Make constructor
+	protected.  Make destructor virtual.  Add initializers.
+	(tui_source_window, tui_data_window, tui_cmd_window): New
+	classes.
+	* tui/tui-data.c (tui_win_info): Rename from init_win_info.  Now a
+	constructor.  Add "type" parameter.
+	(tui_source_window, tui_data_window, tui_cmd_window): New
+	constructors.
+	(tui_alloc_win_info): Instantiate the appropriate subclass.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_resize_all): Use delete.
+	* tui/tui-data.h (struct tui_win_info) <~tui_win_info>: Declare
+	destructor.
+	(tui_free_window): Don't declare.
+	* tui/tui-data.c (~tui_win_info): Rename from tui_free_window.
+	Update.
+
+2019-06-25  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_win_info): Add constructor.
+	* tui/tui-data.c (tui_alloc_win_info): Use new.
+	(tui_free_window): Use delete.
+
+2019-06-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-windata.h (tui_first_data_element_no_in_line): Don't
+	declare.
+	* tui/tui-windata.c (tui_first_data_element_no_in_line): Remove.
+
+2019-06-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (tui_del_window, tui_del_data_windows): Don't
+	declare.
+	* tui/tui-data.c (tui_del_window, tui_del_data_windows): Remove.
+
+2019-06-22  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2read.c (create_addrmap_from_aranges)
+	(read_debug_names_from_section): Print ptrdiff_t using '%s' and plongest
+	instead of '%zu'.
+
+2019-06-21  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2read.h (dwarf2_section_info_def): Remove.
+	(DEF_VEC_O (dwarf2_section_info_def)): Remove.
+	* dwarf2read.c (struct dwo_sections) <types>: Change type to
+	std::vector<dwarf2_section_info>.
+	(struct dwo_file) <~dwo_file>: Remove.
+	(dwarf2_per_objfile::~dwarf2_per_objfile): Don't manually free
+	types field.
+	(dwarf2_per_objfile::locate_sections): Adjust to std::vector.
+	(dwarf2_read_debug_names): Likewise.
+	(create_debug_types_hash_table): Change parameter type to
+	array_view, adjust code accordingly.
+	(dwarf2_locate_dwo_sections): Adjust to std::vector.
+	(partial_die_info::fixup): Likewise.
+	(determine_prefix): Likewise.
+	* dwarf-index-write.c (write_psymtabs_to_index): Adjust.
+
+2019-06-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2read.c (struct dwo_file) <dbfd>: Change type to
+	gdb_bfd_ref_ptr.
+	<~dwo_file>: Remove call to gdb_bfd_unref.
+	(open_and_init_dwo_file): Move gdb_bfd_ref_ptr into dbfd field. Call
+	gdb_bfd_ref_ptr::get.
+
+2019-06-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2read.h (struct dwarf2_per_objfile) <dwo_files>: Change
+	type to htab_up.
+	* dwarf2read.c (struct dwo_file): Initialize fields.
+	<~dwo_file>: New.
+	(free_dwo_file): Remove, move content to ~dwo_file.
+	(struct dwo_file_deleter): Remove.
+	(dwo_file_up>: Remove custom deleter.
+	(free_dwo_files): Remove.
+	(dwarf2_per_objfile::~dwarf2_per_objfile): Don't explicitly free
+	dwo_files.
+	(process_skeletonless_type_units): Call unique_ptr::get.
+	(allocate_dwo_file_hash_table): Add deleter to created hash
+	table.  Change return type to htab_up.
+	(lookup_dwo_file_slot): Don't memset dwo_file, call
+	unique_ptr::get.
+	(create_dwo_unit_in_dwp_v1): Allocate dwo_file with new.
+	(create_dwo_unit_in_dwp_v2): Likewise.
+	(open_and_init_dwo_file): Likewise.
+	(free_dwo_file_from_slot): Remove.
+
+2019-06-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2read.h (struct dwarf2_section_info) <readin,
+	is_virtual>: Change type to bool.
+	* dwarf2read.c (dwarf2_read_section, create_dwp_v2_section): Use
+	true instead of 1.
+
+2019-06-19  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (tui_init_content_element): Don't declare.
+
+2019-06-19  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (tui_init_win_info): Don't declare.
+
+2019-06-19  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2read.h (abstract_to_concrete): Change type to
+	std::unordered_map<sect_offset, std::vector<sect_offset>,
+	gdb::hash_enum<sect_offset>>.
+
+2019-06-19  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_evaluate_subexp) <case OP_ATR_FIRST>: Handle
+	EVAL_AVOID_SIDE_EFFECTS specially.
+
+2019-06-19  Tom Tromey  <tromey@adacore.com>
+
+	* source-cache.c (highlighter): New global.
+	(source_cache::get_source_lines): Create a highlighter on demand.
+
+2019-06-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* defs.h (deprecated_interactive_hook): Delete declaration.
+	* interps.c (clear_interpreter_hooks): Remove use of
+	deprecated_interactive_hook.
+	* top.c (deprecated_interactive_hook): Delete definition.
+	* utils.c (maybe_quit): Remove use of deprecated_interactive_hook.
+
+2019-06-18  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/24515
+	* dwarf2read.h (abstract_to_concrete): Change type from
+	std::unordered_map<die_info_ptr, std::vector<die_info_ptr>> to
+	std::unordered_map<sect_offset, std::vector<sect_offset>>.
+	* dwarf2read.c (read_variable): Update.
+	(dwarf2_fetch_die_loc_sect_off): Update.
+
+2019-06-17  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/24617
+	* common/pathstuff.c (child_path): Make sure parent_len > 0 before
+	accessing parent[parent_len - 1].
+
+2019-06-17  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	PR gdb/24364
+	* dtrace-probe.c (dtrace_static_probe_ops::get_probe): Don't
+	call dtrace_process_dof with NULL dof.
+
+2019-06-16  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/24445
+	* contrib/gdb-add-index.sh: Update to handle dwz-m-ed executable.
+
+2019-06-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win)
+	(make_all_visible): Use address of member.
+
+2019-06-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.c (tui_clear_win_detail, init_win_info)
+	(tui_free_window, free_content, free_content_elements): Remove
+	unnecessary cast.
+	* tui/tui-windata.c (tui_display_all_data): Remove unnecessary
+	cast.
+	* tui/tui-regs.c (tui_show_register_group)
+	(tui_display_registers_from, tui_display_reg_element_at_line):
+	Remove unnecessary cast.
+
+2019-06-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* linux-nat.c (normal_mask): Delete.
+	(_initialize_linux_nat): Don't initialise normal_mask.
+
+2019-06-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/24445
+	* dwarf-index-write.h (write_psymtabs_to_index): Add
+	dwz_basename parameter.
+	* dwarf-index-write.c (write_gdbindex): Move file writing to
+	write_gdbindex_1.  Change return type void.
+	(assert_file_size): Move up, remove filename parameter.
+	(write_gdbindex_1): New function.
+	(write_debug_names): Change return type to void, call
+	assert_file_size.
+	(struct index_wip_file): New struct.
+	(write_psymtabs_to_index): Add dwz_basename parameter.  Move
+	file logic to index_wip_file.  Write index for dwz file if
+	needed.
+	(save_gdb_index_command): Pass basename of dwz file, if present.
+	* dwarf-index-cache.c (index_cache::store): Obtain and pass
+	build-id of dwz file, if present.
+	* dwarf2read.c (struct dwz_file): Move to dwarf2read.h.
+	(dwarf2_get_dwz_file): Likewise.
+	* dwarf2read.h (struct dwz_file): Move from dwarf2read.c.
+	(dwarf2_get_dwz_file): Likewise.
+
+2019-06-16  Tom Tromey  <tom@tromey.com>
+
+	* coffread.c (process_coff_symbol): Use xstrdup.
+	* value.c (create_internalvar): Use xstrdup.
+
+2019-06-16  Tom Tromey  <tom@tromey.com>
+
+	* valops.c (value_cast, value_slice): Remove unnecessary cast.
+	* breakpoint.c (stopin_command, stopat_command)
+	(until_break_command, decode_location_default): Remove unnecessary
+	cast.
+	* utils.c (subset_compare): Remove unnecessary cast.
+	* ada-lang.c (ada_update_initial_language): Remove unnecessary
+	cast.
+	* linespec.c (decode_line_with_last_displayed): Remove unnecessary
+	cast.
+	* infcmd.c (path_command): Remove unnecessary cast.
+	* coffread.c (decode_type): Remove unnecessary cast.
+	* xcoffread.c (read_xcoff_symtab): Remove unnecessary cast.
+	* mipsread.c (mipscoff_symfile_read): Remove unnecessary cast.
+	* tui/tui-stack.c (tui_show_locator_content)
+	(tui_show_frame_info): Remove unnecessary cast.
+	* tui/tui-win.c (tui_scroll_forward_command)
+	(tui_scroll_backward_command, tui_set_focus, tui_set_win_height)
+	(parse_scrolling_args): Remove unnecessary cast.
+	* tui/tui-data.c (init_win_info, tui_del_window)
+	(tui_free_window, tui_del_data_windows, tui_free_data_content)
+	(free_content_elements): Remove unnecessary cast.
+	* tui/tui-windata.c (tui_first_data_item_displayed): Remove
+	unnecessary cast.
+	* tui/tui-source.c (tui_set_source_content)
+	(tui_vertical_source_scroll): Remove unnecessary cast.
+	* tui/tui-layout.c (tui_default_win_height): Remove unnecessary
+	cast.
+	* tui/tui-io.c (tui_initialize_io): Remove unnecessary cast.
+	* tui/tui-regs.c (tui_display_registers_from)
+	(tui_display_register): Remove unnecessary cast.
+	* tui/tui-wingeneral.c (tui_refresh_win, tui_delete_win)
+	(tui_unhighlight_win, tui_highlight_win, tui_make_window)
+	(make_visible): Remove unnecessary cast.
+	* tui/tui-winsource.c (tui_erase_source_content)
+	(tui_update_breakpoint_info, tui_set_exec_info_content): Remove
+	unnecessary cast.
+	* ax-gdb.c (agent_command_1): Remove unnecessary cast.
+	* cli/cli-setshow.c (cmd_show_list): Remove unnecessary cast.
+	* stabsread.c (read_type, read_array_type, read_range_type):
+	Remove unnecessary cast.
+	* mdebugread.c (mdebug_build_psymtabs): Remove unnecessary cast.
+	(parse_symbol, parse_type, upgrade_type, parse_external)
+	(parse_partial_symbols, psymtab_to_symtab_1, cross_ref): Remove
+	unnecessary cast.
+	* gdb_bfd.c (gdb_bfd_map_section): Remove unnecessary cast.
+
+2019-06-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.c (tui_alloc_generic_win_info)
+	(tui_alloc_win_info, tui_add_content_elements): Remove NULL
+	checks.
+
+2019-06-16  Bernhard Heckel  <bernhard.heckel@intel.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-typeprint.c (f_print_type): Don't return early for not
+	associated or not allocated types.
+	(f_type_print_varspec_suffix): Add print_rank parameter and print
+	ranks of array types in case they dangling.
+	(f_type_print_base): Add print_rank parameter.
+
+2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention new MI commands.
+	* break-catch-throw.c (enum exception_event_kind): Move to
+	breakpoint.h.
+	(print_mention_exception_catchpoint): Output text as a single
+	message.
+	(catch_exception_command_1): Rename to...
+	(catch_exception_event): ...this, make non-static, update header
+	command, and change some parameter types.
+	(catch_catch_command): Update for changes to
+	catch_exception_command_1.
+	(catch_throw_command): Likewise.
+	(catch_rethrow_command): Likewise.
+	* breakpoint.c (enum exception_event_kind): Delete.
+	* breakpoint.h (enum exception_event_kind): Moved here from
+	break-catch-throw.c.
+	(catch_exception_event): Declare.
+	* mi/mi-cmd-catch.c (mi_cmd_catch_exception_event): New function.
+	(mi_cmd_catch_throw): New function.
+	(mi_cmd_catch_rethrow): New function.
+	(mi_cmd_catch_catch): New function.
+	* mi/mi-cmds.c (mi_cmds): Add 'catch-throw', 'catch-rethrow', and
+	'catch-catch' entries.
+	* mi/mi-cmds.h (mi_cmd_catch_throw): Declare.
+	(mi_cmd_catch_rethrow): Declare.
+	(mi_cmd_catch_catch): Declare.
+
+2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* annotate.c (annotate_source_line): Change return type to void,
+	update implementation to match.
+	* annotate.h (annotate_source_line): Change return type to void,
+	update header comment.
+	* stack.c (print_frame_info): Don't change what frame information
+	is printed based on whether annotations are on or not.
+
+2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* annotate.c: Add 'source.h' and 'objfiles.h' includes.
+	(annotate_source): Make static.
+	(annotate_source_line): Moved from source.c and renamed from
+	identify_source_line.  Update the return type.
+	* annotate.h (annotate_source): Delete declaration.
+	(annotate_source_line): Declaration moved from source.h, and
+	renamed from identify_source_line.  Return type updated.
+	* source.c (identify_source_line): Moved to annotate.c and renamed
+	to annotate_source_line.
+	(info_line_command): Remove check of annotation_level.
+	* source.h (identify_source_line): Move declaration to annotate.h
+	and rename to annotate_source_line.
+	* stack.c: Add 'annotate.h' include.
+	(print_frame_info): Remove check of annotation_level before
+	calling annotate_source_line.
+
+2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* source-cache.c (source_cache::get_plain_source_lines): Use
+	open_source_file_with_line_charpos instead of just
+	open_source_file, remove call to find_source_lines.
+	(source_cache::get_source_lines): Likewise.
+	* source.c (find_source_lines): Make static.
+	(get_filename_and_charpos): Renamed into...
+	(open_source_file_with_line_charpos): ..this along with changes to
+	return a scoped_fd, and some other minor clean ups.
+	(identify_source_line): Use open_source_file_with_line_charpos.
+	(search_command_helper): Use open_source_file_with_line_charpos
+	instead of just open_source_file, remove call to
+	find_source_lines.
+	* source.h (open_source_file_with_line_charpos): Declare new
+	function.
+	(find_source_lines): Delete declaration.
+
+2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* source.c (get_filename_and_charpos): Remove fullname
+	parameter.
+	(identify_source_line): Update call to get_filename_and_charpos.
+
+2019-06-14  Tom Tromey  <tromey@adacore.com>
+
+	PR gdb/24502:
+	* ui-style.h (skip_ansi_escape): Update comment.
+	* ui-file.h (class no_terminal_escape_file): New class.
+	* ui-file.c (no_terminal_escape_file::write)
+	(no_terminal_escape_file::puts): New methods.
+	* cli/cli-logging.c (handle_redirections): Use
+	no_terminal_escape_file.
+
+2019-06-14  Tom Tromey  <tromey@adacore.com>
+
+	* NEWS: Move convenience variable news above Python news.
+
+2019-06-14  Tom Tromey  <tom@tromey.com>
+
+	* gnulib: Move directory to top-level.
+	* configure.ac: Don't configure gnulib.
+	* configure: Rebuild.
+	* common/common-defs.h: Use new path to gnulib.
+	* Makefile.in (GNULIB_BUILDDIR): Now ../gnulib.
+	(GNULIB_H): Remove.
+	(INCGNU): Look in new gnulib location.
+	(HFILES_NO_SRCDIR): Remove gnulib files.
+	(SUBDIR, REQUIRED_SUBDIRS): Remove gnulib.
+	(generated_files): Remove GNULIB_H.
+	($(LIBGNU), all-lib): Remove targets.
+	(distclean): Don't mention GNULIB_BUILDDIR.
+	($(GNULIB_BUILDDIR)/Makefile): Remove target.
+
+2019-06-14  Tom Tromey  <tromey@adacore.com>
+
+	* symfile.c (add_symbol_file_command): Remove obsolete comment.
+	Warn if symbol file does not provide any symbols.
+
+2019-06-14  Tom Tromey  <tromey@adacore.com>
+
+	* source.c (find_and_open_source): Respect basenames_may_differ.
+
+2019-06-14  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* annotate.c (annotate_breakpoints_invalid): Make use of
+	scoped_restore_terminal_state.
+	(annotate_frames_invalid): Likewise.
+
+2019-06-14  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_evaluate_subexp) <case BINOP_ASSIGN>: Always
+	allow assignment to an internalvar.
+
+2019-06-14  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lex.l: Allow "_" in attribute names.
+
+2019-06-14  Tom Tromey  <tromey@adacore.com>
+
+	PR gdb/24653:
+	* regcache.c (registers_changed): Don't call alloca.
+	* top.c (execute_command): Don't call alloca.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-setshow.c (cli/cli-setshow.c): New parameter
+	'expression'.  When parsing an expression, error out if there's
+	junk after "unlimited".
+	(parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited)
+	(do_set_command): Adjust calls to is_unlimited_literal.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* compile/compile.c (make_compile_options_def_group): Add braces
+	around array_view initializer.
+	* thread.c (make_thread_apply_all_options_def_group)
+	(make_thread_apply_all_options_def_group): Likewise.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* NEWS (New commands): Mention "maint test-options
+	require-delimiter", "maint test-options unknown-is-error", "maint
+	test-options unknown-is-operand" and "maint show
+	test-options-completion-result".
+	(New command options, command completion): New section.
+	(Completion improvements): New section.
+	Mention that you can abbreviate "unlimited".
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-utils.c (parse_flags, parse_flags_qcs): Delete.
+	* cli/cli-utils.h (parse_flags, parse_flags_qcs): Delete.
+	* unittests/cli-utils-selftests.c (test_parse_flags)
+	(test_parse_flags_qcs): Delete.
+	(test_cli_utils): Don't call deleted functions.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* thread.c: Include "cli/cli-option.h".
+	(tp_array_compar_ascending): Global.
+	(tp_array_compar): Delete function.
+	(tp_array_compar_ascending, tp_array_compar_descending): New
+	functions.
+	(ascending_option_def, qcs_flag_option_def)
+	(thr_qcs_flags_option_defs)
+	(make_thread_apply_all_options_def_group)
+	(make_thread_apply_options_def_group): New.
+	(thread_apply_all_command): Use gdb::option::process_options.
+	(thread_apply_command_completer)
+	(thread_apply_all_command_completer): New.
+	(thread_apply_command): Use gdb::option::process_options.
+	(_initialize_thread): Delete THREAD_APPLY_FLAGS_HELP, replace it
+	with a new THREAD_APPLY_OPTION_HELP.  Use gdb::option::build_help
+	to generate help text of "thread apply".  Adjust "taas"'s help.
+	* tid-parse.c (tid_range_parser::in_thread_range): New method.
+	* tid-parse.h (tid_range_parser::in_thread_range): New method.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* thread.c (thread_apply_command): Check for invalid TID with
+	isdigit instead of !isalpha.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-utils.c (parse_flags_qcs): Use validate_flags_qcs.
+	(validate_flags_qcs): New.
+	* cli/cli-utils.h (struct qcs_flags): Change field types to int.
+	(validate_flags_qcs): Declare.
+	* stack.c (qcs_flag_option_def, fr_qcs_flags_option_defs): New.
+	(make_frame_apply_options_def_group): New.
+	(frame_apply_command_count): Process options with
+	gdb::option::process_options.
+	(frame_apply_completer): New.
+	(frame_apply_level_completer, frame_apply_all_completer)
+	(frame_apply_completer): New.
+	(_initialize_stack): Update help of "frame apply", "frame apply
+	level", "frame apply all" and "faas" to mention supported options
+	and install command completers.
+	* stack.h (frame_apply_all_completer): Declare.
+	* thread.c: Include "stack.h".
+	(tfaas_command): Add "--".
+	(_initialize_thread): Update help "tfaas" to mention supported
+	options and install command completer.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* completer.c (complete_nested_command_line): New.
+	(gdb_completion_word_break_characters_throw): Add assertion.
+	* completer.h (complete_nested_command_line): Declare.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* stack.c (parse_backtrace_qualifiers): New.
+	(backtrace_command): Use it.
+	(backtrace_command_completer): Complete on qualifiers.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* frame.c: Include "cli/cli-option.h.
+	(user_set_backtrace_options): New.
+	(backtrace_past_main, backtrace_past_entry, backtrace_limit):
+	Delete.
+	(get_prev_frame): Adjust.
+	(boolean_option_def, uinteger_option_def)
+	(set_backtrace_option_defs): New.
+	(_initialize_frame): Adjust and use
+	gdb::option::add_setshow_cmds_for_options to install "set
+	backtrace past-main" and "set backtrace past-entry".
+	* frame.h: Include "cli/cli-option.h".
+	(struct frame_print_options): Forward declare.
+	(print_frame_arguments_all, print_frame_arguments_scalars)
+	(print_frame_arguments_none): Declare.
+	(print_entry_values): Delete declaration.
+	(struct frame_print_options, user_frame_print_options): New.
+	(struct set_backtrace_options): New.
+	(set_backtrace_option_defs, user_set_backtrace_options): Declare.
+	* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames)
+	(mi_cmd_stack_list_locals, mi_cmd_stack_list_args)
+	(mi_cmd_stack_list_variables): Pass down USER_FRAME_PRINT_OPTIONS.
+	(list_args_or_locals): Add frame_print_options parameter.
+	(mi_cmd_stack_info_frame): Pass down USER_FRAME_PRINT_OPTIONS.
+	* python/py-framefilter.c (enumerate_args): Pass down
+	USER_FRAME_PRINT_OPTIONS.
+	* stack.c: Include "cli/cli-option.h".
+	(print_frame_arguments_all, print_frame_arguments_scalars)
+	(print_frame_arguments_none): Declare.
+	(print_raw_frame_arguments, print_entry_values): Delete.
+	(user_frame_print_options): New.
+	(boolean_option_def, enum_option_def, frame_print_option_defs):
+	New.
+	(struct backtrace_cmd_options): New.
+	(bt_flag_option_def): New.
+	(backtrace_command_option_defs): New.
+	(print_stack_frame): Pass down USER_FRAME_PRINT_OPTIONS.
+	(print_frame_arg, read_frame_arg, print_frame_args)
+	(print_frame_info, print_frame): Add frame_print_options parameter
+	and use it.
+	(info_frame_command_core): Pass down USER_FRAME_PRINT_OPTIONS.
+	(backtrace_command_1): Add frame_print_options and
+	backtrace_cmd_options parameters and use them.
+	(make_backtrace_options_def_group): New.
+	(backtrace_command): Process command options with
+	gdb::option::process_options.
+	(backtrace_command_completer): New.
+	(_initialize_stack): Extend "backtrace"'s help to mention
+	supported options.  Install completer for "backtrace".
+	Install some settings commands with add_setshow_cmds_for_options.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* NEWS (Changed commands): Mention set/show print raw-frame-arguments,
+	and that "set/show print raw frame-arguments" are now deprecated.
+
+	* cli/cli-decode.c (add_setshow_boolean_cmd): Now returns the
+	command.
+	* command.h (add_setshow_boolean_cmd): Return cmd_list_element *.
+	* stack.c (_initialize_stack): Install "set/show print
+	raw-frame-arguments", and deprecate "set/show print raw
+	frame-arguments".
+	* valprint.c (_initialize_valprint): Deprecate "set/show print
+	raw".
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* compile/compile.c (struct compile_options): New.
+	(compile_flag_option_def, compile_command_option_defs)
+	(make_compile_options_def_group): New.
+	(compile_file_command): Handle options with
+	gdb::option::process_options.
+	(compile_file_command_completer): New function.
+	(compile_code_command): Handle options with
+	gdb::option::process_options.
+	(compile_code_command_completer): New function.
+	(_initialize_compiler): Install completers for "compile code" and
+	"compile file".  Mention available options in "compile code" and
+	"compile code"'s help.
+	* completer.c (advance_to_completion_word): New, factored out from
+	...
+	(advance_to_expression_complete_word_point): ... this.
+	(advance_to_filename_complete_word_point): New.
+	* completer.h (advance_to_filename_complete_word_point): New
+	declaration.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* compile/compile.c: Include "cli/cli-option.h".
+	(compile_print_value): Scope data pointer is now a
+	value_print_options pointer; adjust.
+	(compile_print_command): Process options.  Scope data pointer is
+	now a value_print_options pointer; adjust.
+	(_initialize_compile): Update "compile print"'s help to include
+	supported options.  Install a completer for "compile print".
+	* cp-valprint.c (show_vtblprint, show_objectprint)
+	(show_static_field_print): Delete.
+	(_initialize_cp_valprint): Don't install "set print
+	static-members", "set print vtbl", "set print object" here.
+	* printcmd.c: Include "cli/cli-option.h" and
+	"common/gdb_optional.h".
+	(print_command_parse_format): Rework to fill in a
+	value_print_options instead of a format_data.
+	(print_value): Change parameter type from format_data pointer to
+	value_print_options reference.  Adjust.
+	(print_command_1): Process options.  Adjust to pass down a
+	value_print_options.
+	(print_command_completer): New.
+	(_initialize_printcmd): Install print_command_completer as
+	handle_brkchars completer for the "print" command.  Update
+	"print"'s help to include supported options.
+	* valprint.c: Include "cli/cli-option.h".
+	(show_vtblprint, show_objectprint, show_static_field_print): Moved
+	here from cp-valprint.c.
+	(boolean_option_def, uinteger_option_def)
+	(value_print_option_defs, make_value_print_options_def_group):
+	New.  Use gdb::option::add_setshow_cmds_for_options to install
+	"set print elements", "set print null-stop", "set print repeats",
+	"set print pretty", "set print union", "set print array", "set
+	print address", "set print symbol", "set print array-indexes".
+	* valprint.h: Include <string> and "cli/cli-option.h".
+	(make_value_print_options_def_group): Declare.
+	(print_value): Change parameter type from format_data pointer to
+	value_print_options reference.
+	(print_command_completer): Declare.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* Makefile.in (SUBDIR_CLI_SRCS): Add cli/cli-option.c.
+	(COMMON_SFILES): Add maint-test-settings.c.
+	* cli/cli-decode.c (boolean_enums): New global, factored out from
+	...
+	(add_setshow_boolean_cmd): ... here.
+	* cli/cli-decode.h (boolean_enums): Declare.
+	* cli/cli-option.c: New file.
+	* cli/cli-option.h: New file.
+	* cli/cli-setshow.c (parse_cli_boolean_value(const char **)): New,
+	factored out from ...
+	(parse_cli_boolean_value(const char *)): ... this.
+	(is_unlimited_literal): Change parameter type to pointer to
+	pointer.  Adjust and advance ARG pointer.
+	(parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited)
+	(parse_cli_var_enum): New, factored out from ...
+	(do_set_command): ... this.  Adjust.
+	* cli/cli-setshow.h (parse_cli_boolean_value)
+	(parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited)
+	(parse_cli_var_enum): Declare.
+	* cli/cli-utils.c: Include "cli/cli-option.h".
+	(get_ulongest): New.
+	* cli/cli-utils.h (get_ulongest): Declare.
+	(check_for_argument): New overloads.
+	* maint-test-options.c: New file.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-utils.c (number_or_range_parser::get_number): Do not
+	parse a range if "-" is at the end of the string.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-setshow.c (parse_auto_binary_operation)
+	(parse_cli_boolean_value): Don't allow "o".
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* Makefile.in (COMMON_SFILES): Add maint-test-settings.c.
+	* NEWS: Mention maint test-settings KIND.
+	* maint-test-settings.c: New file.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-decode.c (add_setshow_cmd_full): Remove "show"
+	completer.
+	(add_setshow_string_cmd, add_setshow_string_noescape_cmd): Remove
+	"set" completers.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-setshow.c (do_set_command) <var_enum>: Detect junk
+	after item.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* cli/cli-setshow.c (is_unlimited_literal): Allow abbreviations.
+
+2019-06-13  Pedro Alves <palves@redhat.com>
+
+	* ax-gdb.c (agent_command_1): Remove skip_spaces call.
+	* breakpoint.c (watch_maybe_just_location): Remove skip_spaces
+	call.
+	* cli/cli-cmds.c (apropos_command): Remove skip_spaces call.
+	* cli/cli-utils.c (extract_info_print_args): Remove skip_spaces
+	calls.
+	(check_for_argument): Skip spaces after argument.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* thread.c (thread_apply_command): Adjust TID parsing.
+	* tid-parse.c (tid_range_parser::finished): Ensure parsing end is
+	detected before end of string.
+	(tid_is_in_list): Error out if LIST is invalid.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* completer.c (complete_line_internal_1): Rewind completion word
+	point.
+	(completion_tracker::advance_custom_word_point_by): Change
+	parameter type to int.
+	* completer.h (completion_tracker::advance_custom_word_point_by):
+	Likewise.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* completer.c (advance_to_completion_word): Handle delimiters.
+
+2019-06-11  Bernhard Heckel  <bernhard.heckel@intel.com>
+
+	* dwarf2read.c (add_partial_symbol): Skip nameless modules.
+
+2019-06-11  Tom Tromey  <tom@tromey.com>
+
+	* common/common-utils.c (xmalloc, xrealloc, xcalloc)
+	(xmalloc_failed): Move to alloc.c.
+	* alloc.c: New file.
+	* Makefile.in (COMMON_SFILES): Add alloc.c.
+
+2019-06-11  Tom Tromey  <tom@tromey.com>
+
+	* nat/linux-waitpid.c: Don't include server.h.
+	(linux_debug): Remove.
+	(my_waitpid): Update.
+
+2019-06-11  Tom Tromey  <tromey@adacore.com>
+
+	* infcall.c (_initialize_infcall): Remove trailing newline from
+	help.
+	* user-regs.c (_initialize_user_regs): Remove trailing newline
+	from help.
+	* typeprint.c (_initialize_typeprint): Remove trailing newline
+	from help.
+	* reverse.c (_initialize_reverse): Remove trailing newlines from
+	help.
+	* tracepoint.c (_initialize_tracepoint): Remove trailing newlines
+	from help.
+	* language.c (add_set_language_command): Remove trailing newline
+	from help.
+	* infcmd.c (_initialize_infcmd): Remove trailing newlines from
+	help.
+	* disasm.c (_initialize_disasm): Remove trailing newline from
+	help.
+	* top.c (init_main): Remove trailing newline from help.
+	* interps.c (_initialize_interpreter): Remove trailing newline
+	from help.
+	* btrace.c (_initialize_btrace): Remove trailing newlines from
+	help.
+	* breakpoint.c (_initialize_breakpoint): Remove trailing newline
+	from help.
+	* python/python.c (_initialize_python): Remove trailing newline
+	from help.
+	* spu-tdep.c (_initialize_spu_tdep): Remove trailing newlines from
+	help.
+	* tui/tui-win.c (_initialize_tui_win): Remove trailing newlines
+	from help.  Reformat some text.
+	* tui/tui-stack.c (_initialize_tui_stack): Remove trailing newline
+	from help.
+	* tui/tui-layout.c (_initialize_tui_layout): Remove trailing
+	newline from help.
+
+2019-06-11  Tom Tromey  <tromey@adacore.com>
+
+	* darwin-nat.c (darwin_decode_exception_message)
+	(darwin_decode_message, darwin_nat_target::kill): Fix shadowing.
+
+2019-06-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* valops.c (value_slice): Check for not allocated or not
+	associated values.
+
+2019-06-10  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/24618
+	* dwarf2read.c (struct mapped_index::symbol_name_slot_invalid): Make
+	sure an empty slot (defined by a 32-bit zero pair) is recognized as
+	invalid.
+
+2019-06-10  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/24611
+	* linespec.c (linespec_lexer_lex_string): Remove incorrect
+	"++(PARSER_STREAM (parser))" for "[abi"-prefixed colon.  Add assert.
+
+2019-06-10  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/24545
+	* symtab.c (struct demangled_name_entry): Add language field.
+	(symbol_set_names):  Revert "[gdb/symtab] Fix language of duplicate
+	static minimal symbol".  Set and use language field.
+
+2019-06-10  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (_initialize_ada_language): Update help text.
+
+2019-06-10  Tom Tromey  <tromey@adacore.com>
+
+	* m32c-tdep.c (m32c_m16c_address_to_pointer): Don't end warning
+	with a newline.
+	* guile/guile.c (handle_boot_error): Don't end warning with a
+	newline.
+	* cli/cli-cmds.c (exit_status_set_internal_vars): Don't end
+	warning with a newline.
+	* s12z-tdep.c (s12z_skip_prologue): Don't end warning with a
+	newline.
+	(s12z_frame_cache): Likewise.
+	* dwarf-index-cache.c (index_cache::store): Don't end warning with
+	a newline.
+	* solib-svr4.c (disable_probes_interface): Don't end warning with
+	a newline.
+	* nat/fork-inferior.c (fork_inferior): Don't end warning with a
+	newline.
+	* python/python.c (do_finish_initialization): Don't end warning
+	with a newline.
+
+2019-06-10  Tom Tromey  <tom@tromey.com>
+
+	* python/py-breakpoint.c (gdbpy_breakpoint_created)
+	(gdbpy_breakpoint_deleted, gdbpy_breakpoint_modified): Use
+	gdbpy_enter.
+
+2019-06-10  Tom Tromey  <tromey@adacore.com>
+
+	* elfread.c (elf_read_minimal_symbols): Don't set the dbx objfile
+	data.
+	(elf_new_init): Don't call stabsread_new_init.
+	* dbxread.c (coffstab_build_psymtabs): Set dbx objfile data.
+	(elfstab_build_psymtabs): Likewise.  Call stabsread_new_init.
+	* coffread.c (coff_symfile_init): Don't set the dbx objfile data.
+
+2019-06-10  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/16264
+	PR symtab/24517
+	* dwarf2read.c (read_func_scope): Handle DW_AT_main_subprogram.
+
+2019-06-06  Ð ÑƒÑ�Ð»Ð°Ð½ Ð˜Ð¶Ð±ÑƒÐ»Ð°Ñ‚Ð¾Ð² <lrn1986@gmail.com>
+
+	* source.c (find_and_open_source): Also rewrite relative file
+	names.
+
+2019-04-26  Amos Bird  <amosbird@gmail.com>
+
+	* annotate.c (annotate_thread_exited): Add "thread-exited"
+	annotation.
+
+2019-06-06  Tom Tromey  <tromey@adacore.com>
+
+	* maint.h (class scoped_command_stats): Use
+	DISABLE_COPY_AND_ASSIGN.
+	<print_time>: New method.
+	* maint.c (scoped_command_stats, ~scoped_command_stats): Call
+	print_time.
+	(scoped_command_stats::print_time): New method.
+
+2019-06-05  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_insn::decode): Gracefully ignore
+	instructions of lengths 6 or 8 bytes.
+
+2019-06-04  Pedro Alves  <palves@redhat.com>
+
+	* common/gdb_unique_ptr.h (make_unique_xstrdup): New.
+
+	* ada-lang.c (catch_ada_completer): Use make_unique_xstrdup.
+	* breakpoint.c (condition_completer): Likewise.
+	* cli/cli-dump.c (scan_expression): Likewise.
+	* common/filestuff.c (mkdir_recursive): Likewise.
+	* common/gdb_tilde_expand.c (gdb_tilde_expand_up)
+	* common/pathstuff.c (gdb_realpath, gdb_realpath_keepfile)
+	(gdb_abspath): Likewise.
+	* compile/compile-cplus-types.c
+	(compile_cplus_instance::decl_name): Likewise.
+	* completer.c (complete_explicit_location):
+	(signal_completer, reg_or_group_completer_1): Likewise.
+	* cp-support.c (cp_remove_params_if_any): Likewise.
+	* fbsd-tdep.c (fbsd_core_vnode_path): Likewise.
+	* guile/scm-safe-call.c (gdbscm_safe_eval_string): Likewise.
+	* infcmd.c (strip_bg_char): Likewise.
+	* linespec.c (copy_token_string): Likewise.
+	* mi/mi-main.c (output_cores): Likewise.
+	* psymtab.c (psymtab_search_name):
+	* symfile.c (test_set_ext_lang_command): Likewise.
+	* target.c (target_fileio_read_stralloc): Likewise.
+	* tui/tui-regs.c (tui_reggroup_completer): Likewise.
+	* value.c (complete_internalvar): Likewise.
+
+2019-06-04  Christian Biesinger  <cbiesinger@google.com>
+
+	Add objfile property to gdb.Type.
+	* NEWS: Mention Python API addition.
+	* python/py-type.c (typy_get_objfile): New method.
+
+2019-06-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Mention the new set|show style [title|highlight].
+	Mention changes to "show style", "help" and "apropos".
+
+2019-06-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-decode.h (apropos_cmd): Add verbose argument.
+	* cli/cli-decode.c (apropos_cmd): Likewise.  Use print_doc_of_command
+	instead of print_help_for_command.
+	(print_doc_of_command): New function.
+	(help_list): Add 'apropos -v word' suggestion.
+	(print_help_for_command): Style the command name using title style.
+	* cli/cli-cmds.c (apropos_command): Parse optional -v flag.
+	(_initialize_cli_cmds): Describe -v in apropos_command help.
+
+2019-06-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-style.h (cli_style_option): Add name in constructor,
+	add m_name class member, add constructor with intensity,
+	add name class function.
+	(cli_style_option::add_setshow_commands): Remove name argument.
+	(highlight_style, title_style): New styles.
+	* cli/cli-style.c (do_show): New function that shows a style
+	characteristic styling the style name with itself.
+	(set_style_name): New function.
+	(STYLE_ADD_SETSHOW_COMMANDS): Remove NAME arguments.
+	Update all callers according to the changes in cli/cli-style.h.
+	* utils.h (fputs_highlighted): New function.
+	* utils.c (fputs_highlighted): Likewise.
+
+2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Mention new pipe command and new convenience variables.
+
+2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-cmds.c (pipe_command): New function.
+	(_initialize_cli_cmds): Call add_com for pipe_command.
+	Define | as an alias for pipe.
+	(exit_status_set_internal_vars): New function.
+	(shell_escape): Call exit_status_set_internal_vars.
+	cli/cli-decode.c (find_command_name_length): Recognize | as
+	a single character command.
+
+2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdbcmd.h (execute_command_to_ui_file): New declaration.
+	top.c (execute_command_to_ui_file): New function, mostly a copy
+	of execute_command_to_string.
+	(execute_command_to_string): Implement by calling
+	execute_command_to_ui_file.
+
+2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* top.h (saved_command_line): Remove declaration.
+	* top.c (previous_saved_command_line, previous_repeat_arguments):
+	New variables.
+	(saved_command_line): Make static, define together with other
+	'repeat variables'.
+	(dont_repeat): Clear repeat_arguments.
+	(repeat_previous, get_saved_command_line, save_command_line):
+	New functions.
+	(gdb_init): Initialize saved_command_line
+	and previous_saved_command_line.
+	* main.c (captured_main_1): Remove saved_command_line initialization.
+	* event-top.c (handle_line_of_input): Update to use
+	the new 'repeat' related functions instead of direct access to
+	saved_command_line.
+	* command.h (repeat_previous, get_saved_command_line,
+	save_command_line): New declarations.
+	(dont_repeat): Add comment.
+
+2019-05-30  Tom Tromey  <tromey@adacore.com>
+
+	* gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count>:
+	Fix comment.
+	(TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED): Rewrite comment.
+
+2019-05-30  Jan Vrany  <jan.vrany@fit.cvut.cz>
+
+	PR cli/24587
+	* completer.c (complete): Initialize variable word.
+
+2019-05-29  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192
+	Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1715008
+	* dwarf2read.c (dwarf_decode_macro_bytes): Move check to see if
+	'body' is NULL to the outter 'if', protecting the '!is_define'
+	situation as well.
+
+2019-05-29  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (partial_die_parent_scope): Call dwarf_tag_name.
+	(dwarf_unknown): New function.
+	(dwarf_tag_name, dwarf_attr_name, dwarf_form_name)
+	(dwarf_type_encoding_name): Use dwarf_unknown.
+
+2019-05-29  Tom Tromey  <tromey@adacore.com>
+
+	PR c++/20020:
+	* cp-valprint.c (cp_print_value_fields): Call
+	cp_print_static_field inside "try".
+
+2019-05-29  Tom Tromey  <tromey@adacore.com>
+
+	* inflow.c (struct terminal_info): Add default operator=.
+	* configure: Rebuild.
+	* warning.m4 (AM_GDB_WARNINGS): Add -Wdeprecated-copy,
+	-Wdeprecated-copy-dtor, -Wredundant-move.
+
+2019-05-29  Tom Tromey  <tromey@adacore.com>
+
+	* NEWS: Add entry.
+	* infcmd.c (print_return_value_1): Handle finish_print
+	option.
+	(show_print_finish): New function.
+	(_initialize_infcmd): Add "set/show print finish" commands.
+	* valprint.c (user_print_options): Initialize new member.
+	* valprint.h (struct value_print_options) <finish_print>: New
+	member.
+
+2019-05-28  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_remove_Xbn_suffix)
+	(find_old_style_renaming_symbol)
+	(parse_old_style_renaming): Remove.
+	(ada_find_renaming_symbol): Don't call
+	find_old_style_renaming_symbol.
+	(ada_is_renaming_symbol): Rename from
+	ada_find_renaming_symbol.  Remove "block" parameter.  Return
+	bool.  Now static.
+	(ada_read_var_value): Update and simplify.
+	* ada-exp.y (write_var_or_type): Remove old code.
+
+2019-05-28  Alan Hayward  <alan.hayward@arm.com>
+
+	PR gdb/25010
+	* event-top.c: Remove include comment.
+	* inflow.c (class scoped_ignore_sigttou): Move from here...
+	* inflow.h (class scoped_ignore_sigttou): ...to here.
+	* ser-unix.c (hardwire_drain_output): Block SIGTTOU during drain.
+	* top.c:  Remove include comment.
+
+2019-05-27  Tom Tromey  <tom@tromey.com>
+
+	* NEWS: Fix typo.
+
+2019-05-22  Tom Tromey  <tromey@adacore.com>
+
+	* target.c (target_follow_exec): Constify parameter.
+	* target-delegates.c: Rebuild.
+	* remote.c (remote_target::follow_exec): Constify parameter.
+	* infrun.c (follow_exec): Constify parameter.
+	* target.h (struct target_ops) <follow_exec>: Constify parameter.
+	(target_follow_exec): Likewise.
+
+2019-05-22  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c (aarch64_execute_dwarf_cfa_vendor_op): Treat
+	DW_CFA_AARCH64_negate_ra_state as nop on non pauth targets.
+
+2019-05-22  Alan Hayward  <alan.hayward@arm.com>
+
+	* NEWS: Add debugredirect and testsuite sections.
+
+2019-05-22  Simon Cook  <simon.cook@embecosm.com>
+
+	* riscv-tdep.c (riscv_gdbarch_init): Support determining flen from
+	target descriptions using exclusively floating point register name
+	aliases.
+
+2019-05-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR gdb/18644:
+	* f-lang.c (build_fortran_types): Handle the case where
+	gdbarch_floatformat_for_type returns a nullptr.
+
+2019-05-21  Tom de Vries  <tdevries@suse.de>
+
+	PR cli/24587
+	* cli/cli-cmds.c (complete_command): Fix use of unitialized variable.
+
+2019-05-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR gdb/18644:
+	* f-lang.c (build_fortran_types): Use floatformats_ia64_quad for
+	16-byte floats.
+	* i386-tdep.c (i386_floatformat_for_type): Use
+	floatformats_ia64_quad for the 16-byte floating point component
+	within a fortran 32-byte complex number.
+
+2019-05-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (struct cu_partial_die_info): Add constructor,
+	delete default constructor.
+	(find_partial_die): Update to return const struct.
+	(partial_die_parent_scope): Move variable declaration into scope
+	of its use and change its type to auto.
+	(guess_partial_die_structure_name): Likewise.
+	(partial_die_info::fixup): Likewise.
+
+2019-05-17  Tom Tromey  <tromey@adacore.com>
+
+	* source.c (find_and_open_source): Remove cast.
+
+2019-05-17  Tom Tromey  <tromey@adacore.com>
+
+	* annotate.c (annotate_source): Make "filename" const.
+	* annotate.h (annotate_source): Use const.
+
+2019-05-17  Alan Hayward  <alan.hayward@arm.com>
+
+	* disasm.c (set_disassembler_options): Send errors to stderr.
+
+2019-05-17  Alan Hayward  <alan.hayward@arm.com>
+
+	* cli/cli-interp.c (struct saved_output_files): Add saved entry.
+	(cli_interp_base::set_logging): Check debug_redirect.
+	* cli/cli-interp.h (set_logging): Add debug_redirect parameter.
+	* cli/cli-logging.c (debug_redirect): Add static variable.
+	(pop_output_files): Add default param.
+	(handle_redirections): Print debug setting.
+	(show_logging_command): Likewise.
+	(_initialize_cli_logging): Add debugredirect command.
+	* interps.c (current_interp_set_logging): Add debug_redirect
+	parameter.
+	* interps.h (set_logging): Add debug_redirect parameter.
+	(current_interp_set_logging): Likewise.
+	* mi/mi-common.h: Likewise.
+	* mi/mi-interp.c (mi_interp::set_logging): Likewise.
+
+2019-05-17  Alan Hayward  <alan.hayward@arm.com>
+	    Tom Tromey  <tromey@adacore.com>
+
+	* cli/cli-interp.c (cli_interp_base::set_logging): Create tee_file
+	directly.
+	* cli/cli-interp.h (make_logging_output): Remove declaration.
+	* cli/cli-logging.c (make_logging_output): Remove function.
+	* mi/mi-interp.c (mi_interp::set_logging): Create tee_file
+	directly.
+	* ui-file.c (tee_file::tee_file): Remove bools.
+	(tee_file::~tee_file): Remove deletes.
+	* ui-file.h (tee_file): Remove bools.
+
+2019-01-28  Jan Vrany  <jan.vrany@fit.cvut.cz>
+
+	* mi/mi-cmds.h (mi_cmd_complete): New function.
+	* mi/mi-main.c (mi_cmd_complete): Likewise.
+	* mi/mi-cmds.c: Define new MI command -complete.
+	* NEWS: Mention new -complete command.
+
+2019-01-24  Jan Vrany  <jan.vrany@fit.cvut.cz>
+
+	* completer.h (complete): New function.
+	* completer.c (complete): Likewise.
+	* cli/cli-cmds.c: (complete_command): Update to use new complete()
+	function defined in completer.h.
+
+2019-05-17  Jan Vrany  <jan.vrany@fit.cvut.cz>
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2019-05-17  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/24094
+	* dwarf2read.c (struct cu_partial_die_info): New struct.
+	(find_partial_die): Return cu_partial_die_info.
+	(partial_die_parent_scope, guess_partial_die_structure_name)
+	(partial_die_info::fixup): Handle new return type of find_partial_die.
+
+2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR breakpoints/24541
+	* stap-probe.c (stap_parse_register_operand): Make "regname" an
+	"std::string", simplifying the algorithm.
+
+2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* stap-probe.c (handle_stap_probe): Fix complaint formatting.
+	(stap_static_probe_ops::get_probes): Likewise.
+
+2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* stap-probe.c (stap_parse_register_operand): Make "if (*p->arg ==
+	'-')" and "else if".
+	(stap_parse_single_operand): Join checks for
+	"gdbarch_stap_parse_special_token_p" and
+	"gdbarch_stap_parse_special_token" in the same "if" statement.
+	Invert check when verifying for operation on register
+	displacement.
+
+2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* stap-probe.c (stap_get_opcode): Update comment.
+	(stap_get_expected_argument_type): Likewise.
+	(handle_stap_probe): Likewise.
+
+2019-05-16  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* i386-tdep.c (i386_stap_parse_special_token_triplet): Change
+	return type to 'bool'.  Adjust comment.  Use 'bool' when
+	appropriate.
+	(i386_stap_parse_special_token_three_arg_disp): Likewise.
+	* stap-probe.c (stap_parse_argument_1): Likewise.
+	(stap_is_operator): Likewise.
+	(stap_is_generic_prefix): Likewise.
+	(stap_is_register_prefix): Likewise.
+	(stap_is_register_indirection_prefix): Likewise.
+	(stap_is_integer_prefix): Likewise.
+	(stap_generic_check_suffix): Likewise.
+	(stap_check_integer_suffix): Likewise.
+	(stap_check_register_suffix): Likewise.
+	(stap_check_register_indirection_suffix): Likewise.
+	(stap_parse_register_operand): Likewise.
+	(stap_parse_single_operand): Likewise.
+	(stap_parse_argument_1): Likewise.
+	(stap_probe::get_argument_count): Likewise.
+	(stap_is_operator): Likewise.
+
+2019-05-16  Tom Tromey  <tromey@adacore.com>
+
+	* darwin-nat.c (thread_info_from_private_thread_info): Add struct
+	keyword to foreach.
+
+2019-05-15  Simon Marchi  <simon.marchi@efficios.com>
+
+	* linux-thread-db.c (try_thread_db_load_1): Change return type
+	to bool.
+	(try_thread_db_load): Likewise.
+	(try_thread_db_load_from_pdir_1): Likewise.
+	(try_thread_db_load_from_pdir): Likewise.
+	(try_thread_db_load_from_sdir): Likewise.
+	(try_thread_db_load_from_dir): Likewise.
+	(thread_db_load_search): Likewise.
+	(has_libpthread): Likewise.
+	(thread_db_load): Likewise.
+
+2019-05-15  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192
+	* dwarf2read.c (parse_macro_definition): Check whether 'body' is
+	NULL, and complain/return if that's the case.
+
+2019-05-15  John Darrington <john@darrington.wattle.id.au>
+
+	* s12z-tdep.c (push_pull_get_stack_adjustment): New function.
+	(advance, posn, abstract_read_memory): New functions.
+	[struct mem_read_abstraction]: New struct.
+	(s12z_frame_cache): Use opcodes API to interpret stack frame code.
+
+2019-05-14  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (coerce_unspec_val_to_type): Only set address when
+	value is not lval_memory.
+
+2019-05-14  Tom Tromey  <tromey@adacore.com>
+
+	* solib.c (info_sharedlibrary_command): Style the file name.
+
+2019-05-14  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c (aarch64_vnh_type): Add half view.
+	(aarch64_vnv_type): Likewise.
+	* target-descriptions.c (make_gdb_type): Add TDESC_TYPE_IEEE_HALF.
+	* common/tdesc.c: Likewise.
+	* common/tdesc.h (enum tdesc_type_kind): Likewise.
+	* features/aarch64-fpu.c (create_feature_aarch64_fpu): Regenerate.
+	* features/aarch64-fpu.xml: Add ieee half view.
+	* features/aarch64-sve.c (create_feature_aarch64_fpu): Likewise.
+	* gdbtypes.c (gdbtypes_post_init): Add builtin_half
+	* gdbtypes.h (struct builtin_type): Likewise.
+	(struct objfile_type): Likewise.
+
+2019-05-12  Paul Naert  <paul.naert@polymtl.ca>
+
+	* language.c (language_sniff_from_mangled_name): Fix "langauge"
+	typo.
+	* location.h (string_to_event_location): Likewise.
+
+2019-05-11  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 8.3 released.
+
+2019-05-10  Simon Marchi  <simon.marchi@efficios.com>
+
+	* breakpoint.h (fix_multi_location_breakpoint_output_globally):
+	New variable declaration.
+	* breakpoint.c (fix_multi_location_breakpoint_output_globally):
+	New variable.
+	(print_one_breakpoint): Use ui_out::test_flags and new global
+	variable to compute use_fixed_output.
+	* mi/mi-main.h (mi_multi_location_breakpoint_output_fixed):
+	Remove.
+	* mi/mi-main.c (fix_multi_location_breakpoint_output): Remove.
+	(mi_multi_location_breakpoint_output_fixed): Remove.
+	(mi_cmd_fix_multi_location_breakpoint_output): Adjust to set the
+	new variable.
+	* mi/mi-out.c (mi_ui_out::mi_ui_out): Set
+	fix_multi_location_breakpoint_output flag if version >= 3.
+	* ui-out.h (enum ui_out_flag)
+	<fix_multi_location_breakpoint_output>: New enumerator.
+
+2019-05-10  Simon Marchi  <simon.marchi@efficios.com>
+
+	* contrib/cc-with-tweaks.sh: Validate dwz's work.
+
+2019-05-10  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (catch_ada_completer): New function.
+	(_initialize_ada_language): Use it.
+
+2019-05-10  Tom Tromey  <tromey@adacore.com>
+
+	* thread.c (print_thread_info): Make "requested_threads" const.
+	* gdbthread.h (print_thread_info): Make "requested_threads"
+	const.
+	* ada-tasks.c (print_ada_task_info): Make "taskno_str" const.
+	* ada-lang.h (print_ada_task_info): Make "taskno_str" const.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* gdbtypes.c (objfile_type_data): Change type.
+	(objfile_type, _initialize_gdbtypes): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2-frame.c (dwarf2_frame_objfile_data): Change type.
+	(dwarf2_frame_find_fde, dwarf2_build_frame_info)
+	(_initialize_dwarf2_frame): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* objc-lang.c (objc_objfile_data): Change type.
+	(find_methods): Update.
+	(_initialize_objc_lang): Remove.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* stabsread.c (rs6000_builtin_type_data): Change type.
+	(rs6000_builtin_type, _initialize_stabsread): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* mips-tdep.c (mips_pdr_data): Remove.
+	(_initialize_mips_tdep): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* hppa-tdep.c (hppa_objfile_priv_data): Change type.
+	(hppa_init_objfile_priv_data, read_unwind_info)
+	(find_unwind_entry, _initialize_hppa_tdep): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* elfread.c (elf_objfile_gnu_ifunc_cache_data): Change type.
+	(elf_gnu_ifunc_record_cache): Update.  Don't allocate hash table
+	on obstack.
+	(elf_gnu_ifunc_resolve_by_cache, _initialize_elfread): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* mdebugread.c (basic_type_data): Change type.
+	(basic_type, _initialize_mdebugread): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* common/gdb_unique_ptr.h (struct noop_deleter): New.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* nto-tdep.c (nto_inferior_data_reg): Change type.
+	(nto_inferior_data): Update.
+	(nto_inferior_data_cleanup, nto_new_inferior_data)
+	(_initialize_nto_tdep): Remove.
+	* nto-tdep.h (struct nto_inferior_data): Add initializers.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (struct ada_inferior_data): Add initializers.
+	(ada_inferior_data): Change type.
+	(ada_inferior_data_cleanup): Remove.
+	(get_ada_inferior_data, ada_inferior_exit)
+	(struct ada_pspace_data): Add initializers, destructor.
+	(ada_pspace_data_handle): Change type.
+	(get_ada_pspace_data): Update.
+	(ada_pspace_data_cleanup): Remove.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* coffread.c (struct coff_symfile_info): Add initializers.
+	(coff_objfile_data_key): Move lower.  Change type.
+	(coff_symfile_init, coff_symfile_read, _initialize_coffread):
+	Update.
+	(coff_free_info): Remove.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* fbsd-tdep.c (struct fbsd_pspace_data): Add initializers.
+	(fbsd_pspace_data_handle): Move lower.  Change type.
+	(get_fbsd_pspace_data): Update.
+	(fbsd_pspace_data_cleanup): Remove.
+	(_initialize_fbsd_tdep): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-tasks.c (ada_tasks_pspace_data_handle): Change type.
+	(get_ada_tasks_pspace_data): Update.
+	(ada_tasks_pspace_data_cleanup): Remove.
+	(_initialize_tasks): Update.
+	(ada_tasks_inferior_data_handle): Change type.
+	(get_ada_tasks_inferior_data): Update.
+	(ada_tasks_inferior_data_cleanup): Remove.
+	(struct ada_tasks_pspace_data): Add initializers.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* symfile.h (struct sym_probe_fns) <sym_get_probes>: Change type.
+	* symfile-debug.c (debug_sym_get_probes): Change type.
+	* stap-probe.c (handle_stap_probe):
+	(stap_static_probe_ops::get_probes): Change type.
+	* probe.h (class static_probe_ops) <get_probes>: Change type.
+	* probe.c (class any_static_probe_ops) <get_probes>: Change type.
+	(parse_probes_in_pspace): Update.
+	(find_probes_in_objfile, find_probe_by_pc, collect_probes):
+	Update.
+	(any_static_probe_ops::get_probes): Change type.
+	* elfread.c (elfread_data): New typedef.
+	(probe_key): Change type.
+	(elf_get_probes): Likewise.  Update.
+	(probe_key_free): Remove.
+	(_initialize_elfread): Update.
+	* dtrace-probe.c (class dtrace_static_probe_ops) <get_probes>:
+	Change type.
+	(dtrace_process_dof_probe, dtrace_process_dof)
+	(dtrace_static_probe_ops::get_probe): Change type.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (struct xcoff_symfile_info): Rename from
+	coff_symfile_info.  Add initializers.
+	(xcoff_objfile_data_key): Move lower.  Change type.
+	(XCOFF_DATA): Rewrite.
+	(xcoff_free_info): Remove.
+	(xcoff_symfile_init, _initialize_xcoffread, read_xcoff_symtab)
+	(read_symbol, read_symbol_lineno, find_linenos, init_stringtab)
+	(xcoff_initial_scan): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* solib-svr4.c (struct svr4_info): Add initializers and
+	destructor.
+	<probes_table>: Now an htab_up.
+	(solib_svr4_pspace_data): Change type.
+	(free_probes_table): Simplify.
+	(~svr4_info): Rename from svr4_pspace_data_cleanup.
+	(get_svr4_info, probes_table_htab_remove_objfile_probes)
+	(probes_table_remove_objfile_probes, register_solib_event_probe)
+	(solib_event_probe_at, svr4_update_solib_event_breakpoint)
+	(_initialize_svr4_solib): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* remote.c (remote_pspace_data): Change type.
+	(remote_pspace_data_cleanup): Remove.
+	(get_remote_exec_file, set_pspace_remote_exec_file)
+	(_initialize_remote): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* breakpoint.c (breakpoint_objfile_key): Change type.
+	(get_breakpoint_objfile_data): Update.
+	(free_breakpoint_objfile_data): Remove.
+	(_initialize_breakpoint): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* linux-tdep.c (struct linux_info): Add initializers.
+	(linux_inferior_data): Move.  Change type.
+	(invalidate_linux_cache_inf): Update.
+	(linux_inferior_data_cleanup): Remove.
+	(get_linux_inferior_data, _initialize_linux_tdep): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* auxv.c (auxv_inferior_data): Move.  Change type.
+	(auxv_inferior_data_cleanup): Remove.
+	(invalidate_auxv_cache_inf): Rewrite.
+	(get_auxv_inferior_data, _initialize_auxv): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* symfile-debug.c (struct debug_sym_fns_data): Add initializers.
+	(symfile_debug_objfile_data_key): Change type.
+	(symfile_debug_installed, debug_qf_has_symbols)
+	(debug_qf_find_last_source_symtab)
+	(debug_qf_forget_cached_source_info)
+	(debug_qf_map_symtabs_matching_filename, debug_qf_lookup_symbol)
+	(debug_qf_print_stats, debug_qf_dump)
+	(debug_qf_expand_symtabs_for_function)
+	(debug_qf_expand_all_symtabs)
+	(debug_qf_expand_symtabs_with_fullname)
+	(debug_qf_map_matching_symbols)
+	(debug_qf_expand_symtabs_matching)
+	(debug_qf_find_pc_sect_compunit_symtab)
+	(debug_qf_map_symbol_filenames)
+	(debug_qf_find_compunit_symtab_by_address, debug_sym_get_probes)
+	(debug_sym_new_init, debug_sym_init, debug_sym_read)
+	(debug_sym_read_psymbols, debug_sym_finish, debug_sym_offsets)
+	(debug_sym_read_linetable, debug_sym_relocate): Update.
+	(symfile_debug_free_objfile): Remove.
+	(install_symfile_debug_logging, _initialize_symfile_debug):
+	Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.h (struct dwarf2_per_objfile): Don't inherit from
+	allocate_on_obstack.
+	* dwarf2read.c (dwarf2_objfile_data_key): Change type.
+	(get_dwarf2_per_objfile): Update.
+	(set_dwarf2_per_objfile): Remove.
+	(dwarf2_has_info, dwarf2_get_section_info): Update.
+	(dwarf2_free_objfile): Remove.
+	(_initialize_dwarf2_read): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* auto-load.c (struct auto_load_pspace_info): Add destructor and
+	initializers.
+	<unsupported_script_warning_printed,
+	script_not_found_warning_printed>: Now bool.
+	(auto_load_pspace_data): Change type.
+	(~auto_load_pspace_info): Rename from
+	auto_load_pspace_data_cleanup.
+	(get_auto_load_pspace_data, init_loaded_scripts_info)
+	(clear_section_scripts, maybe_print_unsupported_script_warning)
+	(maybe_print_script_not_found_warning, _initialize_auto_load):
+	Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.c (objfile_pspace_info): Add destructor and
+	initializers.
+	(objfiles_pspace_data): Change type.
+	(~objfile_pspace_info): Rename from objfiles_pspace_data_cleanup.
+	(get_objfile_pspace_data): Update.
+	(objfiles_bfd_data): Change type.
+	(get_objfile_bfd_data): Update.
+	(objfile_bfd_data_free, _initialize_objfiles): Remove.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* break-catch-syscall.c (catch_syscall_inferior_data): Move.
+	Change type.
+	(get_catch_syscall_inferior_data): Update.
+	(catch_syscall_inferior_data_cleanup): Remove.
+	(_initialize_break_catch_syscall): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* inflow.c (struct terminal_info): Add destructor and
+	initializers.
+	(inflow_inferior_data): Change type.
+	(~terminal_info): Rename from inflow_inferior_data_cleanup.
+	(get_inflow_inferior_data, inflow_inferior_exit)
+	(swap_terminal_info, _initialize_inflow): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* target-dcache.c (target_dcache_cleanup): Remove.
+	(target_dcache_aspace_key): Change type.
+	(target_dcache_init_p, target_dcache_invalidate)
+	(target_dcache_get, target_dcache_get_or_init)
+	(_initialize_target_dcache): Update.
+	* dcache.h (struct dcache_deleter): New.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (struct symbol_cache): Add destructor and
+	initializers.
+	(symbol_cache_key): Move.  Change type.
+	(make_symbol_cache, free_symbol_cache): Remove.
+	(get_symbol_cache): Update.
+	(symbol_cache_cleanup): Remove.
+	(ALL_PSPACES, symbol_cache_flush)
+	(maintenance_print_symbol_cache)
+	(maintenance_print_symbol_cache_statistics, _initialize_symtab):
+	Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (struct main_info): Add destructor and initializers.
+	(main_progspace_key): Move.  Change type.
+	(get_main_info): Update.
+	(main_info_cleanup): Remove.
+	(_initialize_symtab): Update.
+
+2019-05-08  Tom Tromey  <tom@tromey.com>
+
+	* registry.h (DECLARE_REGISTRY): Define the _key class.
+
+2019-05-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Merge two 'New commands' sections.
+
+2019-05-08  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-valprint.c (ada_val_print_gnat_array): Remove language
+	parameter and use Ada language definition instead.
+	(ada_val_print_ptr): Remove unused language parameter.
+	(ada_val_print_num): Remove language parameter and use Ada language
+	definition instead.
+	(ada_val_print_enum, ada_val_print_flt): Remove unused language
+	parameter.
+	(ada_val_print_struct_union, ada_val_print_ref): Remove language
+	parameter and use Ada language definition instead.
+	(ada_val_print_1): Update all ada_val_print_xxx calls.
+	Remove language parameter.
+	(ada_val_print): Update ada_val_print_1 call.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* remote.c (remote_hw_watchpoint_limit)
+	(remote_hw_watchpoint_length_limit, remote_hw_breakpoint_limit):
+	Now static.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* maint.c (_initialize_maint_cmds): Move initialization code to
+	remote.c.
+	(watchdog, show_watchdog): Move to remote.c.
+	* remote.c (watchdog, show_watchdog): Move from maint.c.  Make
+	"watchdog" static.
+	(_initialize_remote): Move initialization code from maint.c.
+	* defs.h (watchdog): Don't declare.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* tui/tui-interp.c: Include main.h.
+	* interps.c: Include main.h.
+	* main.h (interpreter_p): Declare.
+	* defs.h (interpreter_p): Don't declare.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2loc.c: Include dwarf2read.h.
+	* defs.h (read_unsigned_leb128): Don't declare.
+	* dwarf2read.h (read_unsigned_leb128): Declare.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* utils.c (fputs_maybe_filtered): Call can_emit_style_escape as a
+	method.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* utils.c (fputs_maybe_filtered): Reset style after paging, even
+	when no wrap column is set.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* c-lang.c (c_get_string): Handle non-C-style arrays.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* typeprint.c (print_offset_data::update): Print the bit offset,
+	not the number of bits remaining.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* typeprint.c (print_offset_data::maybe_print_hole): Add extra
+	padding at end of comment.
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2loc.c (dwarf2_evaluate_property) <PROP_ADDR_OFFSET>:
+	Compare main types.
+
+2019-05-06  Tom Tromey  <tom@tromey.com>
+
+	* common/scoped_mmap.c: Include common-defs.h.
+	* common/scoped_mmap.h: Don't include config.h.
+
+2019-05-04  Tom Tromey  <tom@tromey.com>
+
+	* aarch64-tdep.c (stack_item_t): Remove typedef and DEF_VEC.
+	(struct aarch64_call_info): Add initializers.
+	<si>: Now a std::vector.
+	(pass_on_stack, aarch64_push_dummy_call): Update.
+
+2019-05-04  Simon Marchi  <simon.marchi@efficios.com>
+	    Tom Tromey  <tom@tromey.com>
+
+	* ppc-linux-nat.c (thread_points_p): Remove typedef and DEF_VEC.
+	(ppc_threads): Now a std::vector.  Now static.
+	(hwdebug_find_thread_points_by_tid)
+	(ppc_linux_nat_target::low_new_thread, ppc_linux_thread_exit):
+	Update.
+
+2019-05-04  Tom Tromey  <tom@tromey.com>
+
+	* arc-tdep.c (arc_tdesc_init): Return bool.
+
+2019-05-04  Tom Tromey  <tom@tromey.com>
+
+	* arm-linux-nat.c (arm_linux_nat_target::can_use_hw_breakpoint):
+	Use gdb_assert_not_reached.
+
+2019-05-04  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile-cplus-types.c (compile_cplus_convert_enum): Use
+	"false".
+
+2019-05-04  Tom Tromey  <tom@tromey.com>
+
+	* arc-tdep.c (arc_tdesc_init): Use bool.
+
+2019-05-04  Tom Tromey  <tom@tromey.com>
+
+	* stack.c (select_frame_for_mi): Use "false", not "FALSE".
+
+2019-05-04  Tom Tromey  <tom@tromey.com>
+
+	* cli/cli-cmds.c (valid_command_p): Return bool.
+
+2019-05-04  Tom Tromey  <tom@tromey.com>
+
+	* cli/cli-decode.c (valid_user_defined_cmd_name_p): Return bool.
+	* command.h (valid_user_defined_cmd_name_p): Channge return type.
+
+2019-05-04  Raul Tambre  <raul@tambre.ee>
+
+	* python/lib/gdb/prompt.py (_ExtendedPrompt)
+	<before_prompt_hook, get_show_string>: Fix incorrect use of 'is'
+	operator for comparison.
+
+2019-05-04  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (psymbol_name_matches, match_partial_symbol)
+	(lookup_partial_symbol, print_partial_symbols)
+	(recursively_search_psymtabs, sort_pst_symbols, psymbol_hash)
+	(psymbol_compare): Update.
+	(add_psymbol_to_bcache): Clear the entire psymbol.
+	(maintenance_check_psymtabs): Update.
+	* psympriv.h (struct partial_symbol): Don't derive from
+	general_symbol_info.
+	<obj_section, unrelocated_address, address,
+	set_unrelocated_address>: Update.
+	<ginfo>: New member.
+	* dwarf-index-write.c (write_psymbols, debug_names::insert)
+	(debug_names::write_psymbols): Update.
+
+2019-05-04  Tom de Vries  <tdevries@suse.de>
+
+	* contrib/cc-with-tweaks.sh: Support -n arg.
+
+2019-05-04  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* corelow.c (core_target::detach): Ensure frame cache and
+	register caches are cleared.
+	inferior.c (exit_inferior_1): Likewise.
+
+2019-05-03  Sandra Loosemore  <sandra@codesourcery.com>
+	    Tom Tromey  <tom@tromey.com>
+
+	* dictionary.c (collate_pending_symbols_by_language): Remove
+	"struct" from foreach.
+	* symtab.c (lookup_global_symbol_from_objfile)
+	(lookup_symbol_in_objfile_from_linkage_name): Remove "struct" from
+	foreach.
+	* ser-tcp.c (net_open): Remove "struct" from foreach.
+	* objfiles.c (objfile_relocate, objfile_rebase)
+	(objfile_has_symbols): Remove "struct" from foreach.
+	* minsyms.c (lookup_minimal_symbol_by_pc_section): Remove "struct"
+	from foreach.
+	* dwarf2read.c (handle_struct_member_die): Remove "struct" from
+	foreach.
+	* darwin-nat.c (thread_info_from_private_thread_info): Remove
+	"struct" from foreach.
+	* ada-lang.c (create_excep_cond_exprs)
+	(ada_exception_catchpoint_cond_string): Remove "struct" from
+	foreach.
+
+2019-05-03  Tom Tromey  <tromey@adacore.com>
+
+	* ada-exp.y (convert_char_literal): Check suffix of each
+	enumerator.
+
+2019-05-03  Dilyan Palauzov  <dilyan.palauzov@aegee.org>
+
+	PR ada/21406:
+	* ada-exp.y (yywrap): Don't define.
+	* ada-lex.l (%option): Add noyywrap
+	(yywrap): Remove.
+
+2019-05-03  Eli Zaretskii  <eliz@gnu.org>
+
+	* common/common-defs.h [__MINGW32__ || __CYGWIN__]: Define
+	_WIN32_WINNT to the XP level, unless already defined to a higher
+	level.
+
+	* unittests/parse-connection-spec-selftests.c:
+	* ser-tcp.c:
+	* common/netstuff.c [USE_WIN32API]:  Remove the _WIN32_WINNT
+	override.
+
+	* symfile.c (find_separate_debug_file): Remove colon from the
+	drive spec of DOS/Windows file names of the target, so that the
+	file name produced from DEBUGDIR and the target's directory will
+	be valid on DOS/Windows systems.
+
+2019-05-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* rust-lang.c (val_print_struct): Handle printing structures
+	containing strings.
+
+2019-05-02  Tom Tromey  <tromey@adacore.com>
+
+	* valarith.c (_initialize_valarith): Remove.
+
+2019-05-01  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_value_primitive_field): Treat more fields as
+	bitfields.
+
+2019-05-01  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_value_assign): Correctly compute starting offset
+	for big-endian copies.
+
+2019-04-30  Ali Tamur  <tamur@google.com>
+
+	* dwarf2read.c (read_3_bytes): New declaration.
+	(read_attribute_value): Added DW_FORM_strx1-4 cases.
+	(read_3_bytes): New function.
+
+2019-04-30  Joel Brobecker  <brobecker@adacore.com>
+
+	* windows-nat.c (main_thread_id): Delete.
+	(handle_output_debug_string): Replace main_thread_id by
+	current_event.dwThreadId.
+	(fake_create_process): Likewise.
+	(get_windows_debug_event) <CREATE_PROCESS_DEBUG_EVENT>:
+	Do not set main_thread_id.
+	<LOAD_DLL_DEBUG_EVENT>: Replace main_thread_id by
+	current_event.dwThreadId.
+	<UNLOAD_DLL_DEBUG_EVENT>: Likewise.
+
+2019-04-30  Joel Brobecker  <brobecker@adacore.com>
+
+	* windows-nat.c (get_windows_debug_event) <EXIT_PROCESS_DEBUG_EVENT>:
+	Use current_event.dwThreadId instead of main_thread_id.
+
+2019-04-30  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_lookup_simple_minsyms): New function.
+	(create_excep_cond_exprs): Iterate over program spaces.
+	(ada_exception_catchpoint_cond_string): Examine all minimal
+	symbols for exception types.
+
+2019-04-30  Tom Tromey  <tromey@adacore.com>
+
+	PR c++/24470:
+	* dwarf2read.c (process_structure_scope): Handle case where type
+	has template parameters but no symbol was created.
+
+2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Chris January  <chris.january@arm.com>
+
+	* f-typeprint.c (f_type_print_base): Print 'allocatable' type
+	qualifier.
+	* gdbtypes.h (TYPE_IS_ALLOCATABLE): Define.
+
+2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-typeprint.c (f_print_type): Update rules for printing
+	whitespace.
+	(f_type_print_varspec_suffix): Likewise.
+
+2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Chris January  <chris.january@arm.com>
+
+	* f-typeprint.c (f_type_print_varspec_suffix): Handle printing
+	function arguments.
+
+2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-lang.c (build_fortran_types): Change name of void type to
+	lower case.
+	* f-typeprint.c (f_type_print_base): Print the name of the void
+	type, rather than a fixed string.
+	* f-valprint.c (f_decorations): Use lower case void string.
+
+2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Chris January  <chris.january@arm.com>
+
+	* dwarf2read.c (dwarf2_init_complex_target_type): Use different
+	types for Fortran.
+
+2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Chris January  <chris.january@arm.com>
+	    David Lecomber  <david.lecomber@arm.com>
+
+	* f-exp.y (BINOP_INTRINSIC): New token.
+	(exp): New parser rule handling BINOP_INTRINSIC.
+	(f77_keywords): Add new builtin procedures.
+	* f-lang.c (evaluate_subexp_f): Handle BINOP_MOD, UNOP_FORTRAN_CEILING,
+	UNOP_FORTRAN_FLOOR, BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX.
+	(operator_length_f): Handle UNOP_FORTRAN_CEILING,
+	UNOP_FORTRAN_FLOOR, BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX.
+	(print_unop_subexp_f): New function.
+	(print_binop_subexp_f): New function.
+	(print_subexp_f): Handle UNOP_FORTRAN_CEILING, UNOP_FORTRAN_FLOOR,
+	BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX.
+	(dump_subexp_body_f): Likewise.
+	(operator_check_f): Likewise.
+	* fortran-operator.def: Add UNOP_FORTRAN_CEILING, UNOP_FORTRAN_FLOOR,
+	BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX
+
+2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* expprint.c (dump_subexp_body_standard): Remove use of
+	UNOP_KIND.
+	* expression.h (exp_opcode): Include 'fortran-operator.def'.
+	* f-exp.y (exp): Rename UNOP_KIND to UNOP_FORTRAN_KIND.
+	* f-lang.c (evaluate_subexp_f): Likewise.
+	(operator_length_f): New fuction.
+	(print_subexp_f): New function.
+	(op_name_f): New function.
+	(dump_subexp_body_f): New function.
+	(operator_check_f): New function.
+	(exp_descriptor_f): Replace standard expression handling functions
+	with new functions.
+	* fortran-operator.def: New file.
+	* parse.c (operator_length_standard): Remove use of UNOP_KIND.
+	* std-operator.def: Remove UNOP_KIND.
+
+2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* std-operator.def: Remove unbalanced, stray double quote
+	character.
+
+2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Chris January  <chris.january@arm.com>
+	    Daniel Everett  <daniel.everett@arm.com>
+	    Nick Forrington  <nick.forrington@arm.com>
+	    Richard Bunt  <richard.bunt@arm.com>
+
+	* cp-valprint.c (cp_print_value_fields): Allow an additional level
+	of depth when printing anonymous structs or unions.
+	* guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer):
+	Don't print either the top-level value, or the children if the
+	max-depth is exceeded.
+	(ppscm_print_children): When printing the key of a map, allow one
+	extra level of depth.
+	* python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Don't
+	print either the top-level value, or the children if the max-depth
+	is exceeded.
+	(print_children): When printing the key of a map, allow one extra
+	level of depth.
+	* python/py-value.c (valpy_format_string): Add max_depth keyword.
+	* valprint.c: (PRINT_MAX_DEPTH_DEFAULT): Define.
+	(user_print_options): Initialise max_depth field.
+	(val_print_scalar_or_string_type_p): New function.
+	(val_print): Check to see if the max depth has been reached.
+	(val_print_check_max_depth): Define new function.
+	(show_print_max_depth): New function.
+	(_initialize_valprint): Add 'print max-depth' option.
+	* valprint.h (struct value_print_options) <max_depth>: New field.
+	(val_print_check_max_depth): Declare new function.
+	* NEWS: Document new feature.
+
+2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_defn): Initialise new field.
+	* c-lang.c (c_is_string_type_p): New function.
+	(c_language_defn): Initialise new field.
+	(cplus_language_defn): Initialise new field.
+	(asm_language_defn): Initialise new field.
+	(minimal_language_defn): Initialise new field.
+	* c-lang.h (c_is_string_type_p): Declare new function.
+	* d-lang.c (d_language_defn): Initialise new field.
+	* f-lang.c (f_is_string_type_p): New function.
+	(f_language_defn): Initialise new field.
+	* go-lang.c (go_is_string_type_p): New function.
+	(go_language_defn): Initialise new field.
+	* language.c (default_is_string_type_p): New function.
+	(unknown_language_defn): Initialise new field.
+	(auto_language_defn): Initialise new field.
+	* language.h (struct language_defn) <la_is_string_type_p>: New
+	member variable.
+	(default_is_string_type_p): Declare new function.
+	* m2-lang.c (m2_language_defn): Initialise new field.
+	* objc-lang.c (objc_language_defn): Initialise new field.
+	* opencl-lang.c (opencl_language_defn): Initialise new field.
+	* p-lang.c (pascal_is_string_type_p): New function.
+	(pascal_language_defn): Initialise new field.
+	* rust-lang.c (rust_is_string_type_p): New function.
+	(rust_language_defn): Initialise new field.
+
+2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* language.h (struct language_defn) <la_struct_too_deep_ellipsis>:
+	New field.
+	* ada-lang.c (ada_language_defn): Initialise new field.
+	* c-lang.c (c_language_defn): Likewise.
+	(cplus_language_defn): Likewise.
+	(asm_language_defn): Likewise.
+	(minimal_language_defn): Likewise.
+	* d-lang.c (d_language_defn): Likewise.
+	* f-lang.c (f_language_defn): Likewise.
+	* go-lang.c (go_language_defn): Likewise.
+	* language.c (unknown_language_defn): Likewise.
+	(auto_language_defn): Likewise.
+	* m2-lang.c (m2_language_defn): Likewise.
+	* objc-lang.c (objc_language_defn): Likewise.
+	* opencl-lang.c (opencl_language_defn): Likewise.
+	* p-lang.c (pascal_language_defn): Likewise.
+	* rust-lang.c (rust_language_defn): Likewise.
+
+2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_is_character_type): Change return type to bool.
+	(ada_is_string_type): Likewise.
+	* ada-lang.h (ada_is_character_type): Update declaration
+	(ada_is_string_type): Likewise.
+
+2019-04-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	Support style in 'frame|thread apply'
+
+	* gdbcmd.h (execute_command_to_string): New term_out parameter.
+	* record.c (record_start, record_stop): Update callers of
+	execute_command_to_string with false.
+	* guile/guile.c (gdbscm_execute_gdb_command): Likewise.
+	* ui-file.h (class ui_file): New term_out and can_emit_style_escape
+	methods.
+	(class string_file): New constructor with term_out parameter.
+	Override methods term_out and can_emit_style_escape.  New member
+	term_out.
+	(class stdio_file): Override can_emit_style_escape.
+	(class tee_file): Override term_out and can_emit_style_escape.
+	* utils.h (can_emit_style_escape): Remove.
+	* utils.c (can_emit_style_escape): Likewise.
+	Update all callers of can_emit_style_escape (SOMESTREAM) to
+	SOMESTREAM->can_emit_style_escape.
+	* source-cache.c (source_cache::get_source_lines): Likewise.
+	* stack.c (frame_apply_command_count): Call execute_command_to_string
+	passing the term_out characteristic of the current gdb_stdout.
+	* thread.c (thr_try_catch_cmd): Likewise.
+	* top.c (execute_command_to_string): pass term_out parameter
+	to construct the string_file for the command output.
+	* ui-file.c (term_cli_styling): New function (most code moved
+	from utils.c can_emit_style_escape).
+	(string_file::string_file, string_file::can_emit_style_escape,
+	stdio_file::can_emit_style_escape, tee_file::term_out,
+	tee_file::can_emit_style_escape): New functions.
+
+2019-04-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Mention the new set|show may-call-functions.
+	* infcall.c (may_call_functions_p): New variable.
+	(show_may_call_functions_p): New function.
+	(call_function_by_hand_dummy): Throws an error if not
+	may-call-functions.
+	(_initialize_infcall): Call add_setshow_boolean_cmd for
+	may-call-functions.
+
+2019-04-25  Keith Seitz  <keiths@redhat.com>
+
+	PR c++/24367
+	* cp-support.c (inspect_type): Don't attempt substitutions
+	of symbol with the same name.
+
+2019-04-25  Tom Tromey  <tromey@adacore.com>
+
+	PR gdb/24475:
+	* event-top.c (gdb_rl_callback_handler): Make "gdb_rl_expt"
+	static.
+
+2019-04-25  Tom Tromey  <tromey@adacore.com>
+
+	* xml-support.c (struct gdb_xml_parser) <set_error>: Take an
+	rvalue reference.
+	(gdb_xml_start_element_wrapper, gdb_xml_end_element_wrapper)
+	(gdb_xml_parser::parse): Use std::move.
+	* python/python-internal.h (gdbpy_convert_exception): Take a const
+	reference.
+	* python/py-value.c (valpy_getitem, valpy_nonzero): Use
+	std::move.
+	* python/py-utils.c (gdbpy_convert_exception): Take a const
+	reference.
+	* python/py-inferior.c (infpy_write_memory, infpy_search_memory):
+	Use std::move.
+	* python/py-breakpoint.c (bppy_set_condition, bppy_set_commands):
+	Use std::move.
+	* mi/mi-main.c (mi_print_exception): Take a const reference.
+	* main.c (handle_command_errors): Take a const reference.
+	* linespec.c (parse_linespec): Use std::move.
+	* infcall.c (run_inferior_call): Use std::move.
+	(call_function_by_hand_dummy): Use std::move.
+	* exec.c (try_open_exec_file): Use std::move.
+	* exceptions.h (exception_print, exception_fprintf)
+	(exception_print_same): Update.
+	* exceptions.c (print_exception, exception_print)
+	(exception_fprintf, exception_print_same): Change parameters to
+	const reference.
+	* event-top.c (gdb_rl_callback_read_char_wrapper): Update.
+	* common/new-op.c: Use std::move.
+	* common/common-exceptions.h (struct gdb_exception): Add move
+	constructor.
+	(struct gdb_exception_error, struct gdb_exception_quit, struct
+	gdb_quit_bad_alloc): Change constructor to move constructor.
+	(throw_exception): Change parameter to rvalue reference.
+	* common/common-exceptions.c (throw_exception): Take rvalue
+	reference.
+	* cli/cli-interp.c (safe_execute_command): Use std::move.
+	* breakpoint.c (insert_bp_location, location_to_sals): Use
+	std::move.
+
+2019-04-25  Tom Tromey  <tromey@adacore.com>
+
+	* guile/scm-exception.c (gdbscm_scm_from_gdb_exception)
+	(gdbscm_throw_gdb_exception): Take a gdbscm_gdb_exception.
+	* guile/scm-block.c, guile/scm-breakpoint.c, guile/scm-cmd.c,
+	guile/scm-disasm.c, guile/scm-frame.c, guile/scm-lazy-string.c,
+	guile/scm-math.c, guile/scm-param.c, guile/scm-ports.c,
+	guile/scm-symbol.c, guile/scm-symtab.c, guile/scm-type.c,
+	guile/scm-value.c: Use unpack.
+	* guile/guile-internal.h (gdbscm_scm_from_gdb_exception): Take a
+	gdbscm_gdb_exception.
+	(gdbscm_throw_gdb_exception): Likewise.
+	(struct gdbscm_gdb_exception): New.
+	(unpack): New function.
+	(gdbscm_wrap): Use unpack.
+
+2019-04-25  Tom Tromey  <tromey@adacore.com>
+
+	* event-top.c (gdb_rl_callback_read_char_wrapper_noexcept)
+	(gdb_rl_callback_handler): Use std::move.
+	* common/common-exceptions.h (struct gdb_exception): Add move
+	assignment operator.
+	(throw_exception_sjlj): Change "exception" to const reference.
+	* common/common-exceptions.c (exceptions_state_mc_catch): Update.
+	(throw_exception_sjlj): Change "exception" to const reference.
+
+2019-04-25  Tom Tromey  <tromey@adacore.com>
+
+	* xml-support.c (gdb_xml_parser::gdb_xml_parser): Update.
+	* python/py-value.c (valpy_getitem, valpy_nonzero): Update.
+	* python/py-inferior.c (infpy_write_memory, infpy_search_memory):
+	Update.
+	* python/py-breakpoint.c (bppy_set_condition, bppy_set_commands):
+	Update.
+	* mi/mi-interp.c (mi_interp::exec): Update.
+	* linespec.c (parse_linespec): Update.
+	* infcall.c (run_inferior_call): Update.
+	* guile/scm-value.c (gdbscm_value_to_lazy_string): Update.
+	* guile/scm-symbol.c (gdbscm_lookup_symbol)
+	(gdbscm_lookup_global_symbol): Update.
+	* guile/scm-param.c (gdbscm_parameter_value): Update.
+	* guile/scm-frame.c (gdbscm_frame_read_register)
+	(gdbscm_frame_read_var): Update.
+	* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Update.
+	* exec.c (try_open_exec_file): Update.
+	* event-top.c (gdb_rl_callback_read_char_wrapper_noexcept)
+	(gdb_rl_callback_handler): Update.
+	* common/common-exceptions.h (exception_none): Don't declare.
+	* common/common-exceptions.c (exception_none): Don't define.
+	(struct catcher) <exception>: Update.
+	* cli/cli-interp.c (safe_execute_command): Update.
+	* breakpoint.c (insert_bp_location, location_to_sals): Update.
+
+2019-04-25  Ali Tamur  <tamur@google.com>
+
+	* dwarf2read.c (skip_one_die): Add DW_FORM_strx.
+	(read_attribute_value): Likewise.
+	(dwarf2_read_addr_index): Update comment.
+	(read_str_index): Add DW_FORM_strx.
+	(dwarf2_string_attr): Likewise.
+	(dwarf2_const_value_attr): Likewise.
+	(dump_die_shallow): Likewise.
+	(dwarf2_fetch_constant_bytes): Likewise.
+	(skip_form_bytes): Likewise.
+
+2019-04-25  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR corefiles/11608
+	PR corefiles/18187
+	* linux-tdep.c (dump_mapping_p): Add new parameters ADDR and
+	OFFSET.  Verify if current mapping contains an ELF header.
+	(linux_find_memory_regions_full): Adjust call to
+	dump_mapping_p.
+
+2019-04-25  Sandra Loosemore  <sandra@codesourcery.com>
+	    Kang Li <kanglictf@gmail.com>
+
+	PR gdb/21600
+
+	* dwarf2-frame.c (read_initial_length): Be consistent about using
+	unsigned representation of length.
+	(decode_frame_entry_1): Likewise.  Check for wraparound of
+	end pointer as well as buffer overflow.
+
+2019-04-24  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* aarch64-tdep.c (aarch64_gdbarch_init): Use "pulongest" to print
+	"vq".
+
+2019-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* amd64-tdep.c (amd64_has_unaligned_fields): Ignore bitfields.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* s12z-tdep.c (s12z_unwind_pc): Delete.
+	(s12z_unwind_sp): Delete.
+	(s12z_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* rl78-tdep.c (rl78_unwind_sp): Delete.
+	(rl78_gdbarch_init): Don't register deleted function with gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* xstormy16-tdep.c (xstormy16_unwind_sp): Delete.
+	(xstormy16_unwind_pc): Delete.
+	(xstormy16_dummy_id): Delete.
+	(xstormy16_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* vax-tdep.c (vax_unwind_pc): Delete.
+	(vax_gdbarch_init): Don't register deleted function with gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* v850-tdep.c (v850_unwind_sp): Delete.
+	(v850_unwind_pc): Delete.
+	(v850_dummy_id): Delete.
+	(v850_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tilegx-tdep.c (tilegx_unwind_sp): Delete.
+	(tilegx_unwind_pc): Delete.
+	(tilegx_unwind_dummy_id): Delete.
+	(tilegx_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tic6x-tdep.c (tic6x_unwind_sp): Delete.
+	(tic6x_dummy_id): Delete.
+	(tic6x_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* sparc-tdep.c (sparc_unwind_pc): Delete.
+	(sparc32_gdbarch_init): Don't register deleted function with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* sh-tdep.c (sh_unwind_sp): Delete.
+	(sh_unwind_pc): Delete.
+	(sh_dummy_id): Delete.
+	(sh_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* score-tdep.c (score_unwind_sp): Delete.
+	(score_unwind_pc): Delete.
+	(score_dummy_id): Delete.
+	(score_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* rx-tdep.c (rx_unwind_pc): Delete.
+	(rx_unwind_sp): Delete.
+	(rx_dummy_id): Delete.
+	(rx_gdbarch_init): Don't register deleted functions with
+	gdbarch.  Update comment.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* rs6000-tdep.c (rs6000_unwind_pc): Delete.
+	(rs6000_dummy_id): Delete.
+	(rs6000_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* or1k-tdep.c (or1k_dummy_id): Delete.
+	(or1k_gdbarch_init): Don't register deleted function with gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* nios2-tdep.c (nios2_dummy_id): Delete.
+	(nios2_unwind_sp): Delete.
+	(nios2_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* nds32-tdep.c (nds32_dummy_id): Delete.
+	(nds32_unwind_pc): Delete.
+	(nds32_unwind_sp): Delete.
+	(nds32_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* msp430-tdep.c (msp430_unwind_pc): Delete.
+	(msp430_unwind_sp): Delete.
+	(msp430_dummy_id): Delete.
+	(msp430_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* moxie-tdep.c (moxie_unwind_sp): Delete.
+	(moxie_unwind_pc): Delete.
+	(moxie_dummy_id): Delete.
+	(moxie_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* mn10300-tdep.c (mn10300_dummy_id): Delete.
+	(mn10300_unwind_pc): Delete.
+	(mn10300_unwind_sp): Delete.
+	(mn10300_push_dummy_call): Use gdbarch_unwind_sp not
+	mn10300_unwind_sp.
+	(mn10300_frame_unwind_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* mep-tdep.c (mep_unwind_pc): Delete.
+	(mep_unwind_sp): Delete.
+	(mep_dummy_id): Delete.
+	(mep_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* m68hc11-tdep.c (m68hc11_unwind_pc): Delete.
+	(m68hc11_unwind_sp): Delete.
+	(m68hc11_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* m32r-tdep.c (m32r_unwind_sp): Delete.
+	(m32r_unwind_pc): Delete.
+	(m32r_dummy_id): Delete.
+	(m32r_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* m32c-tdep.c (m32c_unwind_pc): Delete.
+	(m32c_unwind_sp): Delete.
+	(m32c_dummy_id): Delete.
+	(m32c_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* lm32-tdep.c (lm32_unwind_sp): Delete.
+	(lm32_unwind_pc): Delete.
+	(lm32_dummy_id): Delete.
+	(lm32_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* iq2000-tdep.c (iq2000_unwind_sp): Delete.
+	(iq2000_unwind_pc): Delete.
+	(iq2000_dummy_id): Delete.
+	(iq2000_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* nds32-tdep.c (nds32_type_align): Delete.
+	(nds32_push_dummy_call): Use type_align instead.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arm-tdep.c (arm_type_align): Only handle vector override case.
+	(arm_push_dummy_call): Use type_align.
+	(arm_gdbarch_init): Register arm_type_align gdbarch function.
+
+2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* aarch64-tdep.c (aarch64_type_align): Only handle vector override
+	case.
+	(pass_on_stack): Use type_align.
+	(aarch64_gdbarch_init): Register aarch64_type_align gdbarch
+	function.
+
+2019-04-23  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (line_header::file_name_at): Remove unused
+	overload.
+
+2019-04-23  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/24438
+	* contrib/cc-with-tweaks.sh: Remove superfluous .alt file after dwz
+	invocation.
+
+
+2019-03-27  Ali Tamur  <tamur@google.com>
+
+	* dwarf2-frame.c(dwarf_expr_executor::get_addr_index): Update comment
+	* dwarf2expr.c(dwarf_expr_context::execute_stack_op): Add DW_OP_addrx
+	* dwarf2expr.h(dwarf_expr_context::offset): Update comment
+	(dwarf_expr_context::get_addr_index): Likewise
+	* dwarf2loc.c(dwarf_evaluate_loc_desc::get_addr_index): Likewise
+	(symbol_needs_eval_context::get_addr_index): Likewise
+	(disassemble_dwarf_expression): Add DW_OP_addrx
+	* dwarf2read.c(attr_value_as_address): Add DW_FORM_addrx
+	(read_cutu_die_from_dwo): Update comment
+	(skip_one_die): Add DW_FORM_addrx
+	(read_attribute_value): Likewise
+	(var_decode_location): Add DW_OP_addrx
+	(dwarf2_const_value_attr): Add DW_FORM_addrx
+	(dump_die_shallow): Likewise
+	(dwarf2_fetch_constant_bytes): Likewise
+	(decode_locdesc): Add DW_OP_addrx
+	(skip_form_bytes): Add DW_FORM_addrx
+
+2019-04-22  Ali Tamur  <tamur@google.com>
+
+	* MAINTAINERS (Write After Approval): Add self.
+
+2019-04-22  Simon Marchi  <simon.marchi@efficios.com>
+
+	* solib-svr4.c (get_svr4_info): Add pspace parameter.
+	(svr4_keep_data_in_core): Pass current_program_space to get_svr4_info.
+	(open_symbol_file_object): Likewise.
+	(svr4_default_sos): Add info parameter.
+	(svr4_read_so_list): Likewise.
+	(svr4_current_sos_direct): Adjust functions calls to pass down
+	info.
+	(svr4_current_sos_1): Add info parameter.
+	(svr4_current_sos): Call get_svr4_info, pass info down to
+	svr4_current_sos_1.
+	(svr4_fetch_objfile_link_map): Pass objfile->pspace to
+	get_svr4_info.
+	(svr4_in_dynsym_resolve_code): Pass current_program_space to
+	get_svr4_info.
+	(probes_table_htab_remove_objfile_probes): Pass objfile->pspace
+	to get_svr4_info.
+	(probes_table_remove_objfile_probes): Likewise.
+	(register_solib_event_probe): Add info parameter.
+	(solist_update_incremental): Pass info parameter down to
+	svr4_read_so_list.
+	(disable_probes_interface): Add info parameter.
+	(svr4_handle_solib_event): Pass current_program_space to
+	get_svr4_info.  Adjust disable_probes_interface cleanup.
+	(svr4_create_probe_breakpoints): Add info parameter, pass it
+	down to register_solib_event_probe.
+	(svr4_create_solib_event_breakpoints): Add info parameter,
+	pass it down to svr4_create_probe_breakpoints.
+	(enable_break): Pass info down to
+	svr4_create_solib_event_breakpoints.
+	(svr4_solib_create_inferior_hook): Pass current_program_space to
+	get_svr4_info.
+	(svr4_clear_solib): Likewise.
+
+2019-04-22  Pedro Alves  <palves@redhat.com>
+
+	* solib-svr4.c (svr4_free_objfile_observer): New.
+	(probe_and_action::objfile): New field.
+	(probes_table_htab_remove_objfile_probes)
+	(probes_table_remove_objfile_probes): New functions.
+	(register_solib_event_probe): Add 'objfile' parameter.  Store it
+	in the new probe_and_action.  Don't store the probe in 'lookup'.
+	(svr4_create_probe_breakpoints): Pass objfile to
+	register_solib_event_probe.
+	(_initialize_svr4_solib): Register a free_objfile observer.
+
+2019-04-19  Tom Tromey  <tom@tromey.com>
+
+	* common/queue.h: Remove.
+
+2019-04-19  Tom Tromey  <tom@tromey.com>
+
+	* event-loop.c: Don't include "common/queue.h".
+
+2019-04-19  Tom Tromey  <tom@tromey.com>
+
+	* remote.c (remote_target): Use delete.
+	* remote-notif.h: Include <list>, not "common/queue.h".
+	(notif_client_p): Remove typedef.
+	(remote_notif_state): Add constructor, destructor, initializer.
+	<notif_queue>: Now a std::list.
+	(remote_notif_state_xfree): Don't declare.
+	* remote-notif.c (remote_notif_process, handle_notification)
+	(remote_notif_state_allocate): Update.
+	(~remote_notif_state): Rename from remote_notif_state_xfree.
+
+2019-04-19  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (reread_symbols): Update.
+	* objfiles.c (objfile_register_static_link)
+	(objfile_lookup_static_link): Update
+	(~objfile) Don't delete static_links.
+	* objfiles.h (struct objfile) <static_links>: Now an htab_up.
+
+2019-04-19  Tom Tromey  <tom@tromey.com>
+
+	* type-stack.h (struct type_stack) <insert>: Constify string.
+	* type-stack.c (type_stack::insert): Constify string.
+	* gdbtypes.h (lookup_template_type): Update.
+	(address_space_name_to_int): Update.
+	* gdbtypes.c (address_space_name_to_int): Make space_identifier
+	const.
+	(lookup_template_type): Make name const.
+	* c-exp.y: Update rules.
+	(lex_one_token, classify_name, classify_inner_name)
+	(c_print_token): Update.
+	* p-exp.y: Update rules.
+	(yylex): Update.
+	* f-exp.y: Update rules.
+	(yylex): Update.
+	* d-exp.y: Update rules.
+	(lex_one_token, classify_name, classify_inner_name): Update.
+	* parse.c (write_dollar_variable, copy_name): Return std::string.
+	* parser-defs.h (copy_name): Change return type.
+	* m2-exp.y: Update rules.
+	(yylex): Update.
+	* go-exp.y (lex_one_token): Update.
+	Update rules.
+	(classify_unsafe_function, classify_packaged_name)
+	(classify_name, yylex): Update.
+
+2019-04-19  Sergei Trofimovich <siarheit@google.com>
+
+	* configure.ac: add --enable-source-highlight switch.
+	* configure: Regenerate.
+	* top.c (print_gdb_version): plumb --enable-source-highlight
+	status to "show configuration".
+
+2019-04-19  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_is_variant_part, ada_to_fixed_type_1):
+	Check ADA_TYPE_P.
+	(empty_record, ada_template_to_fixed_record_type_1)
+	(template_to_static_fixed_type)
+	(to_record_with_fixed_variant_part): Use INIT_NONE_SPECIFIC.
+	* cp-abi.c (value_rtti_type): Check HAVE_CPLUS_STRUCT.
+	* gdbtypes.h (INIT_NONE_SPECIFIC, ADA_TYPE_P): New
+	macros.
+
+2019-04-19  Ilya Yu. Malakhov  <malakhov@mcst.ru>
+
+	PR symtab/24423:
+	* source.c (print_source_lines_base): Advance "iter" when a
+	control character is seen.
+
+2019-04-19  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* inferior.h (struct infcall_suspend_state_deleter):
+	Catch exception in destructor to avoid crash.
+
+2019-04-19  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-cmds.c (_initialize_cli_cmds): Move "shell" "!" alias
+	close to the add_com "shell".
+
+2019-04-18  Tom Tromey  <tromey@adacore.com>
+
+	* process-stratum-target.h (class process_stratum_target)
+	<stratum>: Add "final".
+
+2019-04-17  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (dwarf2_init_complex_target_type): Check "tt"
+	against nullptr before use.
+
+2019-04-17  Alan Hayward  <alan.hayward@arm.com>
+
+	* nat/linux-waitpid.c (linux_debug): Call debug_vprintf.
+
+2019-04-17  Jim Wilson  <jimw@sifive.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_breakpoint_kind_from_pc): Hanndle case where
+	code read might fail, assume 4-byte breakpoint in that case.
+
+2019-04-15  Leszek Swirski  <leszeks@google.com>
+
+	* amd64-tdep.c (amd64_classify_aggregate): Use cp_pass_by_reference
+	rather than a hand-rolled POD check when checking for forced MEMORY
+	classification.
+
+2019-04-15  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-linux-nat.c (store_sveregs_to_thread): Set vector length.
+	* nat/aarch64-sve-linux-ptrace.c (aarch64_sve_set_vq): New
+	function.
+	(aarch64_sve_regs_copy_to_reg_buf): Remove VG checks.
+	(aarch64_sve_regs_copy_from_reg_buf): Likewise.
+	* nat/aarch64-sve-linux-ptrace.h (aarch64_sve_set_vq): New
+	declaration.
+
+2019-04-15  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-linux-nat.c
+	(aarch64_linux_nat_target::thread_architecture): Add override.
+	* aarch64-tdep.c (aarch64_gdbarch_init): Ensure different tdesc for
+	each VQ.
+
+2019-04-15  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c (aarch64_gdbarch_init): Move gdbarch lookup.
+
+2019-04-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (dwarf2_init_complex_target_type): Handle complex
+	target types of size 96-bits, add some additional comments, and
+	check that the builtin type we found was the correct size.
+
+2019-04-12  Eli Zaretskii  <eliz@gnu.org>
+
+	* utils.c (prompt_for_continue): Don't restore the styling at the
+	end, as applied_style has the wrong value.  This fixes styling in
+	long lists of file names that are interrupted by the "Continue?"
+	prompt.
+
+2019-04-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_defn): Remove use of LANG_MAGIC.
+	* c-lang.c (c_language_defn): Likewise.
+	(cplus_language_defn): Likewise.
+	(asm_language_defn): Likewise.
+	(minimal_language_defn): Likewise.
+	* d-lang.c (d_language_defn): Likewise.
+	* f-lang.c (f_language_defn): Likewise.
+	* go-lang.c (go_language_defn): Likewise.
+	* language.c (unknown_language_defn): Likewise.
+	(auto_language_defn): Likewise.
+	* language.h (struct language_defn): Remove la_magic field.
+	(LANG_MAGIC): Delete.
+	* m2-lang.c (m2_language_defn): Remove use of LANG_MAGIC.
+	* objc-lang.c (objc_language_defn): Likewise.
+	* opencl-lang.c (opencl_language_defn): Likewise.
+	* p-lang.c (pascal_language_defn): Likewise.
+	* rust-lang.c (rust_language_defn): Likewise.
+
+2019-04-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_type_align): New function.
+	(riscv_type_alignment): Delete.
+	(riscv_arg_location): Use 'type_align'.
+	(riscv_gdbarch_init): Register riscv_type_align gdbarch function.
+
+2019-04-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbtypes.c (type_align): A struct with no non-static fields also
+	has alignment of 1.
+
+2019-04-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_call_arg_complex_float): Fix offset of first
+	component to 0.
+	(riscv_struct_info::riscv_struct_info): Initialise m_offsets
+	member.
+	(riscv_struct_info::analyse): New implementation using new
+	analyse_inner member function.
+	(riscv_struct_info::field_offset): New member function.
+	(riscv_struct_info::m_offsets): New member variable.
+	(riscv_struct_info::analyse_inner): New private member function,
+	takes the old implementation of riscv_struct_info::analyse but
+	extended to track field offsets.
+	(riscv_call_arg_struct): Update the struct folding special cases
+	to handle cases where empty C++ structs, which are non-zero
+	length, are found.
+	(riscv_arg_location): Initialise the length of each location, a
+	non-zero length now indicates the location is in use.
+	(riscv_push_dummy_call): Allow for the first location having a
+	non-zero offset when setting up arguments.
+	(riscv_return_value): Likewise, but for return values.
+
+2019-04-11  Tom Tromey  <tromey@adacore.com>
+
+	* utils.c (internal_vproblem): Make "msg" const.
+
+2019-04-11  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c (aarch64_analyze_prologue_test): Reset saved regs.
+	* trad-frame.c (trad_frame_reset_saved_regs): New function.
+	(trad_frame_alloc_saved_regs): Call trad_frame_reset_saved_regs.
+	* trad-frame.h (trad_frame_reset_saved_regs): New declaration.
+
+2019-04-10  Kevin Buettner  <kevinb@redhat.com>
+
+	* amd64-linux-nat.c (amd64_linux_collect_native_gregset): New
+	function.
+	(fill_gregset): Call amd64_linux_collect_native_gregset instead
+	of amd64_collect_native_gregset.
+	(amd64_linux_nat_target::store_registers): Likewise.
+
+2019-04-10  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (lookup_global_symbol_from_objfile)
+	(lookup_symbol_in_objfile_from_linkage_name): Use the iterator.
+	* objfiles.h (class separate_debug_iterator): New.
+	(class separate_debug_range): New.
+	(struct objfile) <separate_debug_objfiles>: New method.
+	(objfile_separate_debug_iterate): Don't declare.
+	* objfiles.c (separate_debug_iterator::operator++): Rename from
+	objfile_separate_debug_iterate.
+	(objfile_relocate, objfile_rebase, objfile_has_symbols): Use the
+	iterator.
+	* minsyms.c (lookup_minimal_symbol_by_pc_section): Use the
+	iterator.
+
+2019-04-10  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (reread_symbols): Remove old comment.
+	* objfiles.c (free_all_objfiles): Fix a typo.
+
+2019-04-10  Tom Tromey  <tom@tromey.com>
+
+	* ia64-tdep.c (ia64_get_dyn_info_list): Use foreach.
+	* minsyms.c (lookup_minimal_symbol): Use foreach.
+	(lookup_minimal_symbol_text, lookup_minimal_symbol_by_pc_name)
+	(lookup_minimal_symbol_solib_trampoline): Likewise.
+	* symfile.c (reread_symbols): Use foreach.
+
+2019-04-09  Ivan Begert  <ivanbegert@gmail.com>
+	    Tom Tromey  <tromey@adacore.com>
+
+	PR rust/24414:
+	* rust-exp.y (rust_parser::lex_number): Use strtoulst.
+	(rust_lex_int_test): Change "value" to be LONGEST.
+	(rust_lex_tests): Add test for long integer literal.
+
+2019-04-09  Tom Tromey  <tromey@adacore.com>
+
+	* remote.c (remote_target::remote_add_inferior): Change fake_pid_p
+	to bool.
+	(extended_remote_target::attach): Update.
+	(remote_target::remote_notice_new_inferior): Update.
+	(remote_target::add_current_inferior_and_thread): Update.
+	* inferior.c (exit_inferior_1): Use "false".
+	* corelow.c (add_to_thread_list): Make fake_pid_p bool.
+
+2019-04-09  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infcmd.c (run_command_1): Pass -qualified to tbreak when using
+	the "start" command.
+
+2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+
+	* python/py-inferior.c (infpy_thread_from_thread_handle):
+	Adjust comments to reflect renaming of thread_from_thread_handle
+	to thread_from_handle.  Adjust keywords.  Fix type error message.
+	(inferior_object_methods): Add thread_from_handle.  Retain
+	thread_from_thread_handle, but mark it as deprecated.
+
+2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdbthread.h (find_thread_by_handle): Revise declaration.
+	* thread.c (find_thread_by_handle): Likewise.  Adjust
+	implementation too.
+	* python/py-inferior.c (infpy_thread_from_thread_handle): Add
+	support for buffer objects as handles.
+
+2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+
+	* python/py-infthread.c (thpy_thread_handle): New function.
+	(thread_object_methods): Register thpy_thread_handle.
+
+2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdbthread.h (thread_to_thread_handle): Declare.
+	* thread.c (gdbtypes.h): Include.
+	(thread_to_thread_handle): New function.
+
+	* target.h (struct target_ops): Add thread_info_to_thread_handle.
+	(target_thread_info_to_thread_handle): Declare.
+	* target.c (target_thread_info_to_thread_handle): New function.
+	* target-debug.h (target_debug_print_gdb_byte_vector): Define.
+	* target-delegates.c: Regenerate.
+
+	* linux-thread-db.c (class thread_db_target): Add method
+	thread_info_to_thread_handle.
+	(thread_db_target::thread_info_to_thread_handle): Define.
+	* remote.c (class remote_target): Add new method
+	thread_info_to_thread_handle.
+	(remote_target::thread_info_to_thread_handle): Define.
+
+2019-04-08  Pedro Alves  <palves@redhat.com>
+
+	* common/common-exceptions.c (throw_exception): Don't create
+	named object to throw; throw directly.
+	(throw_it): Likewise.  Don't initialize gdb_exception::message
+	here, with new; pass FMT and AP to the ctor instead.
+	* common/common-exceptions.h: Include <string>.
+	(gdb_exception::gdb_exception(enum return_reason, enum errors,
+	const char *, va_list)): New ctor.  Use std::make_shared.
+	(gdb_exception_error::gdb_exception_error(enum return_reason, enum
+	errors)): Delete.
+	(gdb_exception_error::gdb_exception_error(enum errors, const char
+	*, va_list)): New.
+	(gdb_exception_error::gdb_exception_error(const gdb_exception &)):
+	Add assertion.
+	(gdb_exception_quit::gdb_exception_quit(enum return_reason, enum
+	errors)): Delete.
+	(gdb_exception_quit::gdb_exception_quit(const char *, va_list)): New.
+	(gdb_exception_quit::gdb_exception_quit(const gdb_exception &)):
+	Add assertion.
+
+2019-04-08  Tom Tromey  <tom@tromey.com>
+
+	* valops.c (value_rtti_indirect_type): Replace throw_exception
+	with throw.
+	* tracefile-tfile.c (tfile_target_open): Replace throw_exception
+	with throw.
+	* thread.c (thr_try_catch_cmd): Replace throw_exception with
+	throw.
+	* target.c (target_translate_tls_address): Replace throw_exception
+	with throw.
+	* stack.c (frame_apply_command_count): Replace throw_exception
+	with throw.
+	* solib-spu.c (append_ocl_sos): Replace throw_exception with
+	throw.
+	* s390-tdep.c (s390_frame_unwind_cache): Replace throw_exception
+	with throw.
+	* rs6000-tdep.c (rs6000_frame_cache)
+	(rs6000_epilogue_frame_cache): Replace throw_exception with throw.
+	* remote.c: Replace throw_exception with throw.
+	* record-full.c (record_full_message, record_full_wait_1)
+	(record_full_restore): Replace throw_exception with throw.
+	* record-btrace.c:
+	(get_thread_current_frame_id, record_btrace_start_replaying)
+	(cmd_record_btrace_bts_start, cmd_record_btrace_pt_start)
+	(cmd_record_btrace_start): Replace throw_exception with throw.
+	* parse.c (parse_exp_in_context_1): Replace throw_exception with
+	throw.
+	* linux-nat.c (detach_one_lwp, linux_resume_one_lwp)
+	(resume_stopped_resumed_lwps): Replace throw_exception with throw.
+	* linespec.c:
+	(find_linespec_symbols): Replace throw_exception with throw.
+	* infrun.c (displaced_step_prepare, resume): Replace
+	throw_exception with throw.
+	* infcmd.c (post_create_inferior): Replace throw_exception with
+	throw.
+	* inf-loop.c (inferior_event_handler): Replace throw_exception
+	with throw.
+	* i386-tdep.c (i386_frame_cache, i386_epilogue_frame_cache)
+	(i386_sigtramp_frame_cache): Replace throw_exception with throw.
+	* frame.c (frame_unwind_pc, get_prev_frame_if_no_cycle)
+	(get_prev_frame_always, get_frame_pc_if_available)
+	(get_frame_address_in_block_if_available, get_frame_language):
+	Replace throw_exception with throw.
+	* frame-unwind.c (frame_unwind_try_unwinder): Replace
+	throw_exception with throw.
+	* eval.c (fetch_subexp_value, evaluate_var_value)
+	(evaluate_funcall, evaluate_subexp_standard): Replace
+	throw_exception with throw.
+	* dwarf2loc.c (call_site_find_chain)
+	(dwarf2_evaluate_loc_desc_full, dwarf2_locexpr_baton_eval):
+	Replace throw_exception with throw.
+	* dwarf2-frame.c (dwarf2_frame_cache): Replace throw_exception
+	with throw.
+	* darwin-nat.c (darwin_attach_pid): Replace throw_exception with
+	throw.
+	* cp-abi.c (baseclass_offset): Replace throw_exception with throw.
+	* completer.c (complete_line_internal): Replace throw_exception
+	with throw.
+	* compile/compile-object-run.c (compile_object_run): Replace
+	throw_exception with throw.
+	* cli/cli-script.c (process_next_line): Replace throw_exception
+	with throw.
+	* btrace.c (btrace_compute_ftrace_pt, btrace_compute_ftrace)
+	(btrace_enable, btrace_maint_update_pt_packets): Replace
+	throw_exception with throw.
+	* breakpoint.c (create_breakpoint, save_breakpoints): Replace
+	throw_exception with throw.
+	* break-catch-throw.c (re_set_exception_catchpoint): Replace
+	throw_exception with throw.
+	* amd64-tdep.c (amd64_frame_cache, amd64_sigtramp_frame_cache)
+	(amd64_epilogue_frame_cache): Replace throw_exception with throw.
+	* aarch64-tdep.c (aarch64_make_prologue_cache)
+	(aarch64_make_stub_cache): Replace throw_exception with throw.
+
+2019-04-08  Tom Tromey  <tom@tromey.com>
+
+	* common/common-exceptions.c (throw_exception): Rename from
+	throw_exception_cxx.  Remove old copy.  Make argument const.
+	(throw_it): Create and throw exception objects directly.
+	* common/common-exceptions.h (throw_exception): Make argument
+	const.
+	(struct gdb_exception_error): Add constructor.
+	(struct gdb_exception_quit): Add constructor.
+
+2019-04-08  Tom Tromey  <tom@tromey.com>
+
+	* common/common-exceptions.h (exception_rethrow): Don't declare.
+	(TRY_SJLJ): Update comment.
+	(TRY, CATCH, END_CATCH): Remove.
+	* common/common-exceptions.c (exception_rethrow): Remove.
+
+2019-04-08  Tom Tromey  <tom@tromey.com>
+
+	* common/common-exceptions.h (gdb_exception_RETURN_MASK_ALL):
+	Remove.
+	(gdb_exception_error): Rename from
+	gdb_exception_RETURN_MASK_ERROR.
+	(gdb_exception_quit): Rename from gdb_exception_RETURN_MASK_QUIT.
+	(gdb_quit_bad_alloc): Update.
+	* aarch64-tdep.c: Update.
+	* ada-lang.c: Update.
+	* ada-typeprint.c: Update.
+	* ada-valprint.c: Update.
+	* amd64-tdep.c: Update.
+	* arch-utils.c: Update.
+	* break-catch-throw.c: Update.
+	* breakpoint.c: Update.
+	* btrace.c: Update.
+	* c-varobj.c: Update.
+	* cli/cli-cmds.c: Update.
+	* cli/cli-interp.c: Update.
+	* cli/cli-script.c: Update.
+	* common/common-exceptions.c: Update.
+	* common/new-op.c: Update.
+	* common/selftest.c: Update.
+	* compile/compile-c-symbols.c: Update.
+	* compile/compile-cplus-symbols.c: Update.
+	* compile/compile-object-load.c: Update.
+	* compile/compile-object-run.c: Update.
+	* completer.c: Update.
+	* corelow.c: Update.
+	* cp-abi.c: Update.
+	* cp-support.c: Update.
+	* cp-valprint.c: Update.
+	* darwin-nat.c: Update.
+	* disasm-selftests.c: Update.
+	* dtrace-probe.c: Update.
+	* dwarf-index-cache.c: Update.
+	* dwarf-index-write.c: Update.
+	* dwarf2-frame-tailcall.c: Update.
+	* dwarf2-frame.c: Update.
+	* dwarf2loc.c: Update.
+	* dwarf2read.c: Update.
+	* eval.c: Update.
+	* event-loop.c: Update.
+	* event-top.c: Update.
+	* exec.c: Update.
+	* f-valprint.c: Update.
+	* fbsd-tdep.c: Update.
+	* frame-unwind.c: Update.
+	* frame.c: Update.
+	* gdbtypes.c: Update.
+	* gnu-v3-abi.c: Update.
+	* guile/guile-internal.h: Update.
+	* guile/scm-block.c: Update.
+	* guile/scm-breakpoint.c: Update.
+	* guile/scm-cmd.c: Update.
+	* guile/scm-disasm.c: Update.
+	* guile/scm-frame.c: Update.
+	* guile/scm-lazy-string.c: Update.
+	* guile/scm-math.c: Update.
+	* guile/scm-param.c: Update.
+	* guile/scm-ports.c: Update.
+	* guile/scm-pretty-print.c: Update.
+	* guile/scm-symbol.c: Update.
+	* guile/scm-symtab.c: Update.
+	* guile/scm-type.c: Update.
+	* guile/scm-value.c: Update.
+	* i386-linux-tdep.c: Update.
+	* i386-tdep.c: Update.
+	* inf-loop.c: Update.
+	* infcall.c: Update.
+	* infcmd.c: Update.
+	* infrun.c: Update.
+	* jit.c: Update.
+	* language.c: Update.
+	* linespec.c: Update.
+	* linux-fork.c: Update.
+	* linux-nat.c: Update.
+	* linux-tdep.c: Update.
+	* linux-thread-db.c: Update.
+	* main.c: Update.
+	* mi/mi-cmd-break.c: Update.
+	* mi/mi-cmd-stack.c: Update.
+	* mi/mi-interp.c: Update.
+	* mi/mi-main.c: Update.
+	* objc-lang.c: Update.
+	* p-valprint.c: Update.
+	* parse.c: Update.
+	* ppc-linux-tdep.c: Update.
+	* printcmd.c: Update.
+	* python/py-arch.c: Update.
+	* python/py-breakpoint.c: Update.
+	* python/py-cmd.c: Update.
+	* python/py-finishbreakpoint.c: Update.
+	* python/py-frame.c: Update.
+	* python/py-framefilter.c: Update.
+	* python/py-gdb-readline.c: Update.
+	* python/py-inferior.c: Update.
+	* python/py-infthread.c: Update.
+	* python/py-lazy-string.c: Update.
+	* python/py-linetable.c: Update.
+	* python/py-objfile.c: Update.
+	* python/py-param.c: Update.
+	* python/py-prettyprint.c: Update.
+	* python/py-progspace.c: Update.
+	* python/py-record-btrace.c: Update.
+	* python/py-record.c: Update.
+	* python/py-symbol.c: Update.
+	* python/py-type.c: Update.
+	* python/py-unwind.c: Update.
+	* python/py-utils.c: Update.
+	* python/py-value.c: Update.
+	* python/python.c: Update.
+	* record-btrace.c: Update.
+	* record-full.c: Update.
+	* remote-fileio.c: Update.
+	* remote.c: Update.
+	* riscv-tdep.c: Update.
+	* rs6000-aix-tdep.c: Update.
+	* rs6000-tdep.c: Update.
+	* rust-exp.y: Update.
+	* rust-lang.c: Update.
+	* s390-tdep.c: Update.
+	* selftest-arch.c: Update.
+	* solib-dsbt.c: Update.
+	* solib-frv.c: Update.
+	* solib-spu.c: Update.
+	* solib-svr4.c: Update.
+	* solib.c: Update.
+	* sparc64-linux-tdep.c: Update.
+	* stack.c: Update.
+	* symfile-mem.c: Update.
+	* symmisc.c: Update.
+	* target.c: Update.
+	* thread.c: Update.
+	* top.c: Update.
+	* tracefile-tfile.c: Update.
+	* tui/tui.c: Update.
+	* typeprint.c: Update.
+	* unittests/cli-utils-selftests.c: Update.
+	* unittests/parse-connection-spec-selftests.c: Update.
+	* valops.c: Update.
+	* valprint.c: Update.
+	* value.c: Update.
+	* varobj.c: Update.
+	* windows-nat.c: Update.
+	* x86-linux-nat.c: Update.
+	* xml-support.c: Update.
+
+2019-04-08  Tom Tromey  <tom@tromey.com>
+
+	* xml-support.c: Use C++ exception handling.
+	* x86-linux-nat.c: Use C++ exception handling.
+	* windows-nat.c: Use C++ exception handling.
+	* varobj.c: Use C++ exception handling.
+	* value.c: Use C++ exception handling.
+	* valprint.c: Use C++ exception handling.
+	* valops.c: Use C++ exception handling.
+	* unittests/parse-connection-spec-selftests.c: Use C++ exception
+	handling.
+	* unittests/cli-utils-selftests.c: Use C++ exception handling.
+	* typeprint.c: Use C++ exception handling.
+	* tui/tui.c: Use C++ exception handling.
+	* tracefile-tfile.c: Use C++ exception handling.
+	* top.c: Use C++ exception handling.
+	* thread.c: Use C++ exception handling.
+	* target.c: Use C++ exception handling.
+	* symmisc.c: Use C++ exception handling.
+	* symfile-mem.c: Use C++ exception handling.
+	* stack.c: Use C++ exception handling.
+	* sparc64-linux-tdep.c: Use C++ exception handling.
+	* solib.c: Use C++ exception handling.
+	* solib-svr4.c: Use C++ exception handling.
+	* solib-spu.c: Use C++ exception handling.
+	* solib-frv.c: Use C++ exception handling.
+	* solib-dsbt.c: Use C++ exception handling.
+	* selftest-arch.c: Use C++ exception handling.
+	* s390-tdep.c: Use C++ exception handling.
+	* rust-lang.c: Use C++ exception handling.
+	* rust-exp.y: Use C++ exception handling.
+	* rs6000-tdep.c: Use C++ exception handling.
+	* rs6000-aix-tdep.c: Use C++ exception handling.
+	* riscv-tdep.c: Use C++ exception handling.
+	* remote.c: Use C++ exception handling.
+	* remote-fileio.c: Use C++ exception handling.
+	* record-full.c: Use C++ exception handling.
+	* record-btrace.c: Use C++ exception handling.
+	* python/python.c: Use C++ exception handling.
+	* python/py-value.c: Use C++ exception handling.
+	* python/py-utils.c: Use C++ exception handling.
+	* python/py-unwind.c: Use C++ exception handling.
+	* python/py-type.c: Use C++ exception handling.
+	* python/py-symbol.c: Use C++ exception handling.
+	* python/py-record.c: Use C++ exception handling.
+	* python/py-record-btrace.c: Use C++ exception handling.
+	* python/py-progspace.c: Use C++ exception handling.
+	* python/py-prettyprint.c: Use C++ exception handling.
+	* python/py-param.c: Use C++ exception handling.
+	* python/py-objfile.c: Use C++ exception handling.
+	* python/py-linetable.c: Use C++ exception handling.
+	* python/py-lazy-string.c: Use C++ exception handling.
+	* python/py-infthread.c: Use C++ exception handling.
+	* python/py-inferior.c: Use C++ exception handling.
+	* python/py-gdb-readline.c: Use C++ exception handling.
+	* python/py-framefilter.c: Use C++ exception handling.
+	* python/py-frame.c: Use C++ exception handling.
+	* python/py-finishbreakpoint.c: Use C++ exception handling.
+	* python/py-cmd.c: Use C++ exception handling.
+	* python/py-breakpoint.c: Use C++ exception handling.
+	* python/py-arch.c: Use C++ exception handling.
+	* printcmd.c: Use C++ exception handling.
+	* ppc-linux-tdep.c: Use C++ exception handling.
+	* parse.c: Use C++ exception handling.
+	* p-valprint.c: Use C++ exception handling.
+	* objc-lang.c: Use C++ exception handling.
+	* mi/mi-main.c: Use C++ exception handling.
+	* mi/mi-interp.c: Use C++ exception handling.
+	* mi/mi-cmd-stack.c: Use C++ exception handling.
+	* mi/mi-cmd-break.c: Use C++ exception handling.
+	* main.c: Use C++ exception handling.
+	* linux-thread-db.c: Use C++ exception handling.
+	* linux-tdep.c: Use C++ exception handling.
+	* linux-nat.c: Use C++ exception handling.
+	* linux-fork.c: Use C++ exception handling.
+	* linespec.c: Use C++ exception handling.
+	* language.c: Use C++ exception handling.
+	* jit.c: Use C++ exception handling.
+	* infrun.c: Use C++ exception handling.
+	* infcmd.c: Use C++ exception handling.
+	* infcall.c: Use C++ exception handling.
+	* inf-loop.c: Use C++ exception handling.
+	* i386-tdep.c: Use C++ exception handling.
+	* i386-linux-tdep.c: Use C++ exception handling.
+	* guile/scm-value.c: Use C++ exception handling.
+	* guile/scm-type.c: Use C++ exception handling.
+	* guile/scm-symtab.c: Use C++ exception handling.
+	* guile/scm-symbol.c: Use C++ exception handling.
+	* guile/scm-pretty-print.c: Use C++ exception handling.
+	* guile/scm-ports.c: Use C++ exception handling.
+	* guile/scm-param.c: Use C++ exception handling.
+	* guile/scm-math.c: Use C++ exception handling.
+	* guile/scm-lazy-string.c: Use C++ exception handling.
+	* guile/scm-frame.c: Use C++ exception handling.
+	* guile/scm-disasm.c: Use C++ exception handling.
+	* guile/scm-cmd.c: Use C++ exception handling.
+	* guile/scm-breakpoint.c: Use C++ exception handling.
+	* guile/scm-block.c: Use C++ exception handling.
+	* guile/guile-internal.h: Use C++ exception handling.
+	* gnu-v3-abi.c: Use C++ exception handling.
+	* gdbtypes.c: Use C++ exception handling.
+	* frame.c: Use C++ exception handling.
+	* frame-unwind.c: Use C++ exception handling.
+	* fbsd-tdep.c: Use C++ exception handling.
+	* f-valprint.c: Use C++ exception handling.
+	* exec.c: Use C++ exception handling.
+	* event-top.c: Use C++ exception handling.
+	* event-loop.c: Use C++ exception handling.
+	* eval.c: Use C++ exception handling.
+	* dwarf2read.c: Use C++ exception handling.
+	* dwarf2loc.c: Use C++ exception handling.
+	* dwarf2-frame.c: Use C++ exception handling.
+	* dwarf2-frame-tailcall.c: Use C++ exception handling.
+	* dwarf-index-write.c: Use C++ exception handling.
+	* dwarf-index-cache.c: Use C++ exception handling.
+	* dtrace-probe.c: Use C++ exception handling.
+	* disasm-selftests.c: Use C++ exception handling.
+	* darwin-nat.c: Use C++ exception handling.
+	* cp-valprint.c: Use C++ exception handling.
+	* cp-support.c: Use C++ exception handling.
+	* cp-abi.c: Use C++ exception handling.
+	* corelow.c: Use C++ exception handling.
+	* completer.c: Use C++ exception handling.
+	* compile/compile-object-run.c: Use C++ exception handling.
+	* compile/compile-object-load.c: Use C++ exception handling.
+	* compile/compile-cplus-symbols.c: Use C++ exception handling.
+	* compile/compile-c-symbols.c: Use C++ exception handling.
+	* common/selftest.c: Use C++ exception handling.
+	* common/new-op.c: Use C++ exception handling.
+	* cli/cli-script.c: Use C++ exception handling.
+	* cli/cli-interp.c: Use C++ exception handling.
+	* cli/cli-cmds.c: Use C++ exception handling.
+	* c-varobj.c: Use C++ exception handling.
+	* btrace.c: Use C++ exception handling.
+	* breakpoint.c: Use C++ exception handling.
+	* break-catch-throw.c: Use C++ exception handling.
+	* arch-utils.c: Use C++ exception handling.
+	* amd64-tdep.c: Use C++ exception handling.
+	* ada-valprint.c: Use C++ exception handling.
+	* ada-typeprint.c: Use C++ exception handling.
+	* ada-lang.c: Use C++ exception handling.
+	* aarch64-tdep.c: Use C++ exception handling.
+
+2019-04-08  Tom Tromey  <tom@tromey.com>
+
+	* xml-support.c (gdb_xml_parser::parse): Update.
+	* x86-linux-nat.c (x86_linux_nat_target::enable_btrace): Update.
+	* value.c (show_convenience): Update.
+	* unittests/cli-utils-selftests.c (test_number_or_range_parser)
+	(test_parse_flags_qcs): Update.
+	* thread.c (thr_try_catch_cmd): Update.
+	* target.c (target_translate_tls_address): Update.
+	* stack.c (print_frame_arg, read_frame_local, read_frame_arg)
+	(info_frame_command_core, frame_apply_command_count): Update.
+	* rust-exp.y (rust_lex_exception_test): Update.
+	* riscv-tdep.c (riscv_print_one_register_info): Update.
+	* remote.c (remote_target::enable_btrace): Update.
+	* record-btrace.c (record_btrace_enable_warn): Update.
+	* python/py-utils.c (gdbpy_convert_exception): Update.
+	* printcmd.c (do_one_display, print_variable_and_value): Update.
+	* mi/mi-main.c (mi_print_exception): Update.
+	* mi/mi-interp.c (mi_cmd_interpreter_exec): Use SCOPE_EXIT.
+	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
+	* linux-nat.c (linux_nat_target::attach): Update.
+	* linux-fork.c (class scoped_switch_fork_info): Update.
+	* infrun.c (displaced_step_prepare): Update.
+	* infcall.c (call_function_by_hand_dummy): Update.
+	* guile/scm-exception.c (gdbscm_scm_from_gdb_exception): Update.
+	* gnu-v3-abi.c (print_one_vtable): Update.
+	* frame.c (get_prev_frame_always): Update.
+	* f-valprint.c (info_common_command_for_block): Update.
+	* exec.c (try_open_exec_file): Update.
+	* exceptions.c (print_exception, exception_print)
+	(exception_fprintf, exception_print_same): Update.
+	* dwarf2-frame.c (dwarf2_build_frame_info): Update.
+	* dwarf-index-cache.c (index_cache::store)
+	(index_cache::lookup_gdb_index): Update.
+	* darwin-nat.c (maybe_cache_shell): Update.
+	* cp-valprint.c (cp_print_value_fields): Update.
+	* compile/compile-cplus-symbols.c (gcc_cplus_convert_symbol)
+	(gcc_cplus_symbol_address): Update.
+	* compile/compile-c-symbols.c (gcc_convert_symbol)
+	(gcc_symbol_address, generate_c_for_for_one_variable): Update.
+	* common/selftest.c: Update.
+	* common/common-exceptions.h (struct gdb_exception) <message>: Now
+	a std::string.
+	(exception_try_scope_entry, exception_try_scope_exit): Don't
+	declare.
+	(struct exception_try_scope): Remove.
+	(TRY): Don't use exception_try_scope.
+	(struct gdb_exception): Add constructor, operator=.
+	<what>: New method.
+	(struct gdb_exception_RETURN_MASK_ALL)
+	(struct gdb_exception_RETURN_MASK_ERROR)
+	(struct gdb_exception_RETURN_MASK_QUIT): Add constructor.
+	(struct gdb_quit_bad_alloc): Update.
+	* common/common-exceptions.c (exception_none): Change
+	initializer.
+	(struct catcher) <state, exception>: Initialize inline.
+	<prev>: Remove member.
+	(current_catcher): Remove.
+	(catchers): New global.
+	(exceptions_state_mc_init): Simplify.
+	(catcher_pop): Remove.
+	(exceptions_state_mc, exceptions_state_mc_catch): Update.
+	(try_scope_depth, exception_try_scope_entry)
+	(exception_try_scope_exit): Remove.
+	(throw_exception_sjlj): Update.
+	(exception_messages, exception_messages_size): Remove.
+	(throw_it): Simplify.
+	(gdb_exception_sliced_copy): Remove.
+	(throw_exception_cxx): Update.
+	* cli/cli-script.c (script_from_file): Update.
+	* breakpoint.c (insert_bp_location, update_breakpoint_locations):
+	Update.
+	* ada-valprint.c (ada_val_print): Update.
+	* ada-lang.c (ada_to_fixed_type_1, ada_exception_name_addr)
+	(create_excep_cond_exprs): Update.
+
+2019-04-08  Tom Tromey  <tom@tromey.com>
+
+	* common/common-exceptions.h (GDB_XCPT_SJMP, GDB_XCPT_TRY)
+	(GDB_XCPT_RAW_TRY, GDB_XCPT): Remove.
+	(TRY, CATCH, END_CATCH): Remove some definitions.
+	* common/common-exceptions.c: Don't use GDB_XCPT.
+	(catcher_list_size): Remove.
+	(throw_exception, throw_it): Simplify.
+
+2019-04-05  Tom Tromey  <tom@tromey.com>
+
+	Revert the header-sorting patch.
+	* ft32-tdep.c: Revert.
+	* frv-tdep.c: Revert.
+	* frv-linux-tdep.c: Revert.
+	* frame.c: Revert.
+	* frame-unwind.c: Revert.
+	* frame-base.c: Revert.
+	* fork-child.c: Revert.
+	* findvar.c: Revert.
+	* findcmd.c: Revert.
+	* filesystem.c: Revert.
+	* filename-seen-cache.h: Revert.
+	* filename-seen-cache.c: Revert.
+	* fbsd-tdep.c: Revert.
+	* fbsd-nat.h: Revert.
+	* fbsd-nat.c: Revert.
+	* f-valprint.c: Revert.
+	* f-typeprint.c: Revert.
+	* f-lang.c: Revert.
+	* extension.h: Revert.
+	* extension.c: Revert.
+	* extension-priv.h: Revert.
+	* expprint.c: Revert.
+	* exec.h: Revert.
+	* exec.c: Revert.
+	* exceptions.c: Revert.
+	* event-top.c: Revert.
+	* event-loop.c: Revert.
+	* eval.c: Revert.
+	* elfread.c: Revert.
+	* dwarf2read.h: Revert.
+	* dwarf2read.c: Revert.
+	* dwarf2loc.c: Revert.
+	* dwarf2expr.h: Revert.
+	* dwarf2expr.c: Revert.
+	* dwarf2-frame.c: Revert.
+	* dwarf2-frame-tailcall.c: Revert.
+	* dwarf-index-write.h: Revert.
+	* dwarf-index-write.c: Revert.
+	* dwarf-index-common.c: Revert.
+	* dwarf-index-cache.h: Revert.
+	* dwarf-index-cache.c: Revert.
+	* dummy-frame.c: Revert.
+	* dtrace-probe.c: Revert.
+	* disasm.h: Revert.
+	* disasm.c: Revert.
+	* disasm-selftests.c: Revert.
+	* dictionary.c: Revert.
+	* dicos-tdep.c: Revert.
+	* demangle.c: Revert.
+	* dcache.h: Revert.
+	* dcache.c: Revert.
+	* darwin-nat.h: Revert.
+	* darwin-nat.c: Revert.
+	* darwin-nat-info.c: Revert.
+	* d-valprint.c: Revert.
+	* d-namespace.c: Revert.
+	* d-lang.c: Revert.
+	* ctf.c: Revert.
+	* csky-tdep.c: Revert.
+	* csky-linux-tdep.c: Revert.
+	* cris-tdep.c: Revert.
+	* cris-linux-tdep.c: Revert.
+	* cp-valprint.c: Revert.
+	* cp-support.c: Revert.
+	* cp-namespace.c: Revert.
+	* cp-abi.c: Revert.
+	* corelow.c: Revert.
+	* corefile.c: Revert.
+	* continuations.c: Revert.
+	* completer.h: Revert.
+	* completer.c: Revert.
+	* complaints.c: Revert.
+	* coffread.c: Revert.
+	* coff-pe-read.c: Revert.
+	* cli-out.h: Revert.
+	* cli-out.c: Revert.
+	* charset.c: Revert.
+	* c-varobj.c: Revert.
+	* c-valprint.c: Revert.
+	* c-typeprint.c: Revert.
+	* c-lang.c: Revert.
+	* buildsym.c: Revert.
+	* buildsym-legacy.c: Revert.
+	* build-id.h: Revert.
+	* build-id.c: Revert.
+	* btrace.c: Revert.
+	* bsd-uthread.c: Revert.
+	* breakpoint.h: Revert.
+	* breakpoint.c: Revert.
+	* break-catch-throw.c: Revert.
+	* break-catch-syscall.c: Revert.
+	* break-catch-sig.c: Revert.
+	* blockframe.c: Revert.
+	* block.c: Revert.
+	* bfin-tdep.c: Revert.
+	* bfin-linux-tdep.c: Revert.
+	* bfd-target.c: Revert.
+	* bcache.c: Revert.
+	* ax-general.c: Revert.
+	* ax-gdb.h: Revert.
+	* ax-gdb.c: Revert.
+	* avr-tdep.c: Revert.
+	* auxv.c: Revert.
+	* auto-load.c: Revert.
+	* arm-wince-tdep.c: Revert.
+	* arm-tdep.c: Revert.
+	* arm-symbian-tdep.c: Revert.
+	* arm-pikeos-tdep.c: Revert.
+	* arm-obsd-tdep.c: Revert.
+	* arm-nbsd-tdep.c: Revert.
+	* arm-nbsd-nat.c: Revert.
+	* arm-linux-tdep.c: Revert.
+	* arm-linux-nat.c: Revert.
+	* arm-fbsd-tdep.c: Revert.
+	* arm-fbsd-nat.c: Revert.
+	* arm-bsd-tdep.c: Revert.
+	* arch-utils.c: Revert.
+	* arc-tdep.c: Revert.
+	* arc-newlib-tdep.c: Revert.
+	* annotate.h: Revert.
+	* annotate.c: Revert.
+	* amd64-windows-tdep.c: Revert.
+	* amd64-windows-nat.c: Revert.
+	* amd64-tdep.c: Revert.
+	* amd64-sol2-tdep.c: Revert.
+	* amd64-obsd-tdep.c: Revert.
+	* amd64-obsd-nat.c: Revert.
+	* amd64-nbsd-tdep.c: Revert.
+	* amd64-nbsd-nat.c: Revert.
+	* amd64-nat.c: Revert.
+	* amd64-linux-tdep.c: Revert.
+	* amd64-linux-nat.c: Revert.
+	* amd64-fbsd-tdep.c: Revert.
+	* amd64-fbsd-nat.c: Revert.
+	* amd64-dicos-tdep.c: Revert.
+	* amd64-darwin-tdep.c: Revert.
+	* amd64-bsd-nat.c: Revert.
+	* alpha-tdep.c: Revert.
+	* alpha-obsd-tdep.c: Revert.
+	* alpha-nbsd-tdep.c: Revert.
+	* alpha-mdebug-tdep.c: Revert.
+	* alpha-linux-tdep.c: Revert.
+	* alpha-linux-nat.c: Revert.
+	* alpha-bsd-tdep.c: Revert.
+	* alpha-bsd-nat.c: Revert.
+	* aix-thread.c: Revert.
+	* agent.c: Revert.
+	* addrmap.c: Revert.
+	* ada-varobj.c: Revert.
+	* ada-valprint.c: Revert.
+	* ada-typeprint.c: Revert.
+	* ada-tasks.c: Revert.
+	* ada-lang.c: Revert.
+	* aarch64-tdep.c: Revert.
+	* aarch64-ravenscar-thread.c: Revert.
+	* aarch64-newlib-tdep.c: Revert.
+	* aarch64-linux-tdep.c: Revert.
+	* aarch64-linux-nat.c: Revert.
+	* aarch64-fbsd-tdep.c: Revert.
+	* aarch64-fbsd-nat.c: Revert.
+	* aarch32-linux-nat.c: Revert.
+
+2019-04-05  Tom Tromey  <tom@tromey.com>
+
+	* ft32-tdep.c: Sort headers.
+	* frv-tdep.c: Sort headers.
+	* frv-linux-tdep.c: Sort headers.
+	* frame.c: Sort headers.
+	* frame-unwind.c: Sort headers.
+	* frame-base.c: Sort headers.
+	* fork-child.c: Sort headers.
+	* findvar.c: Sort headers.
+	* findcmd.c: Sort headers.
+	* filesystem.c: Sort headers.
+	* filename-seen-cache.h: Sort headers.
+	* filename-seen-cache.c: Sort headers.
+	* fbsd-tdep.c: Sort headers.
+	* fbsd-nat.h: Sort headers.
+	* fbsd-nat.c: Sort headers.
+	* f-valprint.c: Sort headers.
+	* f-typeprint.c: Sort headers.
+	* f-lang.c: Sort headers.
+	* extension.h: Sort headers.
+	* extension.c: Sort headers.
+	* extension-priv.h: Sort headers.
+	* expprint.c: Sort headers.
+	* exec.h: Sort headers.
+	* exec.c: Sort headers.
+	* exceptions.c: Sort headers.
+	* event-top.c: Sort headers.
+	* event-loop.c: Sort headers.
+	* eval.c: Sort headers.
+	* elfread.c: Sort headers.
+	* dwarf2read.h: Sort headers.
+	* dwarf2read.c: Sort headers.
+	* dwarf2loc.c: Sort headers.
+	* dwarf2expr.h: Sort headers.
+	* dwarf2expr.c: Sort headers.
+	* dwarf2-frame.c: Sort headers.
+	* dwarf2-frame-tailcall.c: Sort headers.
+	* dwarf-index-write.h: Sort headers.
+	* dwarf-index-write.c: Sort headers.
+	* dwarf-index-common.c: Sort headers.
+	* dwarf-index-cache.h: Sort headers.
+	* dwarf-index-cache.c: Sort headers.
+	* dummy-frame.c: Sort headers.
+	* dtrace-probe.c: Sort headers.
+	* disasm.h: Sort headers.
+	* disasm.c: Sort headers.
+	* disasm-selftests.c: Sort headers.
+	* dictionary.c: Sort headers.
+	* dicos-tdep.c: Sort headers.
+	* demangle.c: Sort headers.
+	* dcache.h: Sort headers.
+	* dcache.c: Sort headers.
+	* darwin-nat.h: Sort headers.
+	* darwin-nat.c: Sort headers.
+	* darwin-nat-info.c: Sort headers.
+	* d-valprint.c: Sort headers.
+	* d-namespace.c: Sort headers.
+	* d-lang.c: Sort headers.
+	* ctf.c: Sort headers.
+	* csky-tdep.c: Sort headers.
+	* csky-linux-tdep.c: Sort headers.
+	* cris-tdep.c: Sort headers.
+	* cris-linux-tdep.c: Sort headers.
+	* cp-valprint.c: Sort headers.
+	* cp-support.c: Sort headers.
+	* cp-namespace.c: Sort headers.
+	* cp-abi.c: Sort headers.
+	* corelow.c: Sort headers.
+	* corefile.c: Sort headers.
+	* continuations.c: Sort headers.
+	* completer.h: Sort headers.
+	* completer.c: Sort headers.
+	* complaints.c: Sort headers.
+	* coffread.c: Sort headers.
+	* coff-pe-read.c: Sort headers.
+	* cli-out.h: Sort headers.
+	* cli-out.c: Sort headers.
+	* charset.c: Sort headers.
+	* c-varobj.c: Sort headers.
+	* c-valprint.c: Sort headers.
+	* c-typeprint.c: Sort headers.
+	* c-lang.c: Sort headers.
+	* buildsym.c: Sort headers.
+	* buildsym-legacy.c: Sort headers.
+	* build-id.h: Sort headers.
+	* build-id.c: Sort headers.
+	* btrace.c: Sort headers.
+	* bsd-uthread.c: Sort headers.
+	* breakpoint.h: Sort headers.
+	* breakpoint.c: Sort headers.
+	* break-catch-throw.c: Sort headers.
+	* break-catch-syscall.c: Sort headers.
+	* break-catch-sig.c: Sort headers.
+	* blockframe.c: Sort headers.
+	* block.c: Sort headers.
+	* bfin-tdep.c: Sort headers.
+	* bfin-linux-tdep.c: Sort headers.
+	* bfd-target.c: Sort headers.
+	* bcache.c: Sort headers.
+	* ax-general.c: Sort headers.
+	* ax-gdb.h: Sort headers.
+	* ax-gdb.c: Sort headers.
+	* avr-tdep.c: Sort headers.
+	* auxv.c: Sort headers.
+	* auto-load.c: Sort headers.
+	* arm-wince-tdep.c: Sort headers.
+	* arm-tdep.c: Sort headers.
+	* arm-symbian-tdep.c: Sort headers.
+	* arm-pikeos-tdep.c: Sort headers.
+	* arm-obsd-tdep.c: Sort headers.
+	* arm-nbsd-tdep.c: Sort headers.
+	* arm-nbsd-nat.c: Sort headers.
+	* arm-linux-tdep.c: Sort headers.
+	* arm-linux-nat.c: Sort headers.
+	* arm-fbsd-tdep.c: Sort headers.
+	* arm-fbsd-nat.c: Sort headers.
+	* arm-bsd-tdep.c: Sort headers.
+	* arch-utils.c: Sort headers.
+	* arc-tdep.c: Sort headers.
+	* arc-newlib-tdep.c: Sort headers.
+	* annotate.h: Sort headers.
+	* annotate.c: Sort headers.
+	* amd64-windows-tdep.c: Sort headers.
+	* amd64-windows-nat.c: Sort headers.
+	* amd64-tdep.c: Sort headers.
+	* amd64-sol2-tdep.c: Sort headers.
+	* amd64-obsd-tdep.c: Sort headers.
+	* amd64-obsd-nat.c: Sort headers.
+	* amd64-nbsd-tdep.c: Sort headers.
+	* amd64-nbsd-nat.c: Sort headers.
+	* amd64-nat.c: Sort headers.
+	* amd64-linux-tdep.c: Sort headers.
+	* amd64-linux-nat.c: Sort headers.
+	* amd64-fbsd-tdep.c: Sort headers.
+	* amd64-fbsd-nat.c: Sort headers.
+	* amd64-dicos-tdep.c: Sort headers.
+	* amd64-darwin-tdep.c: Sort headers.
+	* amd64-bsd-nat.c: Sort headers.
+	* alpha-tdep.c: Sort headers.
+	* alpha-obsd-tdep.c: Sort headers.
+	* alpha-nbsd-tdep.c: Sort headers.
+	* alpha-mdebug-tdep.c: Sort headers.
+	* alpha-linux-tdep.c: Sort headers.
+	* alpha-linux-nat.c: Sort headers.
+	* alpha-bsd-tdep.c: Sort headers.
+	* alpha-bsd-nat.c: Sort headers.
+	* aix-thread.c: Sort headers.
+	* agent.c: Sort headers.
+	* addrmap.c: Sort headers.
+	* ada-varobj.c: Sort headers.
+	* ada-valprint.c: Sort headers.
+	* ada-typeprint.c: Sort headers.
+	* ada-tasks.c: Sort headers.
+	* ada-lang.c: Sort headers.
+	* aarch64-tdep.c: Sort headers.
+	* aarch64-ravenscar-thread.c: Sort headers.
+	* aarch64-newlib-tdep.c: Sort headers.
+	* aarch64-linux-tdep.c: Sort headers.
+	* aarch64-linux-nat.c: Sort headers.
+	* aarch64-fbsd-tdep.c: Sort headers.
+	* aarch64-fbsd-nat.c: Sort headers.
+	* aarch32-linux-nat.c: Sort headers.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (varobj_create): Update.
+	* rust-exp.y (struct rust_parser) <update_innermost_block,
+	lookup_symbol>: New methods.
+	(rust_parser::update_innermost_block, rust_parser::lookup_symbol):
+	Rename.
+	(rust_parser::rust_lookup_type)
+	(rust_parser::convert_ast_to_expression, rust_lex_tests): Update.
+	* printcmd.c (display_command, do_one_display): Update.
+	* parser-defs.h (struct parser_state) <parser_state>: Add
+	"tracker" parameter.
+	(block_tracker): New member.
+	(class innermost_block_tracker) <innermost_block_tracker>: Add
+	"types" parameter.
+	<reset>: Remove method.
+	(innermost_block): Don't declare.
+	(null_post_parser): Update.
+	* parse.c (innermost_block): Remove global.
+	(write_dollar_variable): Update.
+	(parse_exp_1, parse_exp_in_context): Add "tracker" parameter.
+	Remove "tracker_types" parameter.
+	(parse_expression): Add "tracker" parameter.
+	(parse_expression_for_completion): Update.
+	(null_post_parser): Add "tracker" parameter.
+	* p-exp.y: Update rules.
+	* m2-exp.y: Update rules.
+	* language.h (struct language_defn) <la_post_parser>: Add
+	"tracker" parameter.
+	* go-exp.y: Update rules.
+	* f-exp.y: Update rules.
+	* expression.h (parse_expression, parse_exp_1): Add "tracker"
+	parameter.
+	* d-exp.y: Update rules.
+	* c-exp.y: Update rules.
+	* breakpoint.c (set_breakpoint_condition): Create an
+	innermost_block_tracker.
+	(watch_command_1): Likewise.
+	* ada-lang.c (resolve): Add "tracker" parameter.
+	(resolve_subexp): Likewise.
+	* ada-exp.y (write_var_from_sym): Update.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* type-stack.h: New file.
+	* type-stack.c: New file.
+	* parser-defs.h (enum type_pieces, union type_stack_elt): Move to
+	type-stack.h.
+	(insert_into_type_stack, insert_type, push_type, push_type_int)
+	(insert_type_address_space, pop_type, pop_type_int)
+	(pop_typelist, pop_type_stack, append_type_stack)
+	(push_type_stack, get_type_stack, push_typelist)
+	(follow_type_instance_flags, follow_types): Don't declare.
+	* parse.c (type_stack): Remove global.
+	(parse_exp_in_context): Update.
+	(insert_into_type_stack, insert_type, push_type, push_type_int)
+	(insert_type_address_space, pop_type, pop_type_int)
+	(pop_typelist, pop_type_stack, append_type_stack)
+	(push_type_stack, get_type_stack, push_typelist)
+	(follow_type_instance_flags, follow_types): Remove (moved to
+	type-stack.c).
+	* f-exp.y (type_stack): New global.
+	Update rules.
+	(push_kind_type, f_parse): Update.
+	* d-exp.y (type_stack): New global.
+	Update rules.
+	(d_parse): Update.
+	* c-exp.y (struct c_parse_state) <type_stack>: New member.
+	Update rules.
+	* Makefile.in (COMMON_SFILES): Add type-stack.c.
+	(HFILES_NO_SRCDIR): Add type-stack.h.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* rust-exp.y (rust_parser::lex_identifier, rustyylex)
+	(rust_parser::convert_ast_to_expression, rust_parse)
+	(rust_lex_test_completion, rust_lex_tests): Update.
+	* parser-defs.h (struct expr_completion_state): New.
+	(struct parser_state) <parser_state>: Add completion parameter.
+	<mark_struct_expression, mark_completion_tag>: New methods.
+	<parse_completion, m_completion_state>: New members.
+	(prefixify_expression, null_post_parser): Update.
+	(mark_struct_expression, mark_completion_tag): Don't declare.
+	* parse.c (parse_completion, expout_last_struct)
+	(expout_tag_completion_type, expout_completion_name): Remove
+	globals.
+	(parser_state::mark_struct_expression)
+	(parser_state::mark_completion_tag): Now methods.
+	(prefixify_expression): Add last_struct parameter.
+	(prefixify_subexp): Likewise.
+	(parse_exp_1): Update.
+	(parse_exp_in_context): Add cstate parameter.  Update.
+	(parse_expression_for_completion): Create an
+	expr_completion_state.
+	(null_post_parser): Add "completion" parameter.
+	* p-exp.y: Update rules.
+	(yylex): Update.
+	* language.h (struct language_defn) <la_post_parser>: Add
+	"completing" parameter.
+	* go-exp.y: Update rules.
+	(lex_one_token): Update.
+	* expression.h (parse_completion): Don't declare.
+	* d-exp.y: Update rules.
+	(lex_one_token): Update rules.
+	* c-exp.y: Update rules.
+	(lex_one_token): Update.
+	* ada-lang.c (resolve): Add "parse_completion" parameter.
+	(resolve_subexp): Likewise.
+	(ada_resolve_function): Likewise.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* parser-defs.h (struct parser_state) <start_arglist,
+	end_arglist>: New methods.
+	<arglist_len, m_funcall_chain>: New members.
+	(arglist_len, start_arglist, end_arglist): Don't declare.
+	* parse.c (arglist_len, funcall_chain): Remove global.
+	(start_arglist, end_arglist): Remove functions.
+	(parse_exp_in_context): Update.
+	* p-exp.y: Update rules.
+	* m2-exp.y: Update rules.
+	* go-exp.y: Update rules.
+	* f-exp.y: Update rules.
+	* d-exp.y: Update rules.
+	* c-exp.y: Update rules.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* rust-exp.y (struct rust_parser) <lex_hex, lex_escape,
+	lex_operator, push_back>: New methods.
+	Update all rules.
+	(rust_parser::lex_hex, lex_escape): Rename and update.
+	(rust_parser::lex_string, rust_parser::lex_identifier): Update.
+	(rust_parser::lex_operator): Rename and update.
+	(rust_parser::lex_number, rustyylex, rustyyerror)
+	(rust_lex_test_init, rust_lex_test_sequence)
+	(rust_lex_test_push_back, rust_lex_tests): Update.
+	* parser-defs.h (struct parser_state) <parser_state>: Add "input"
+	parameter.
+	<lexptr, prev_lexptr>: New members.
+	(lexptr, prev_lexptr): Don't declare.
+	* parse.c (lexptr, prev_lexptr): Remove globals.
+	(parse_exp_in_context): Update.
+	* p-exp.y (yylex, yyerror): Update.
+	* m2-exp.y (parse_number, yylex, yyerror): Update.
+	* go-exp.y (lex_one_token, yyerror): Update.
+	* f-exp.y (match_string_literal, yylex, yyerror): Update.
+	* d-exp.y (lex_one_token, yyerror): Update.
+	* c-exp.y (scan_macro_expansion, finished_macro_expansion)
+	(lex_one_token, yyerror): Update.
+	* ada-lex.l (YY_INPUT): Update.
+	(rewind_to_char): Update.
+	* ada-exp.y (yyerror): Update.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* rust-exp.y (rustyylex, rust_lex_tests): Update.
+	* parser-defs.h (struct parser_state) <parser_state>: Add new
+	parameter.
+	<comma_terminates>: New member.
+	(comma_terminates): Don't declare global.
+	* parse.c (comma_terminates): Remove global.
+	(parse_exp_in_context): Update.
+	* p-exp.y (yylex): Update.
+	* m2-exp.y (yylex): Update.
+	* go-exp.y (lex_one_token): Update.
+	* f-exp.y (yylex): Update.
+	* d-exp.y (lex_one_token): Update.
+	* c-exp.y (lex_one_token): Update.
+	* ada-lex.l: Update.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* rust-exp.y (struct rust_parser) <paren_depth>: New member.
+	(rustyylex, rust_lex_test_init, rust_lex_test_one)
+	(rust_lex_test_sequence, rust_lex_test_push_back): Update.
+	* parser-defs.h (paren_depth): Don't declare.
+	* parse.c (paren_depth): Remove global.
+	(parse_exp_in_context): Update.
+	* p-exp.y (paren_depth): New global.
+	(pascal_parse): Initialize it.
+	* m2-exp.y (paren_depth): New global.
+	(m2_parse): Initialize it.
+	* go-exp.y (paren_depth): New global.
+	(go_parse): Initialize it.
+	* f-exp.y (paren_depth): New global.
+	(f_parse): Initialize it.
+	* d-exp.y (paren_depth): New global.
+	(d_parse): Initialize it.
+	* c-exp.y (paren_depth): New global.
+	(c_parse): Initialize it.
+	* ada-lex.l (paren_depth): New global.
+	(lexer_init): Initialize it.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* rust-exp.y (rust_parser::crate_name, rust_parser::super_name)
+	(rust_parser::convert_ast_to_type)
+	(rust_parser::convert_ast_to_expression, rust_lex_tests): Update.
+	* parser-defs.h (struct parser_state) <parser_state>: Add
+	parameters.  Initialize new members.
+	<expression_context_block, expression_context_pc>: New members.
+	* parse.c (expression_context_block, expression_context_pc):
+	Remove globals.
+	(parse_exp_in_context): Update.
+	* p-exp.y: Update all rules.
+	(yylex): Update.
+	* m2-exp.y: Update all rules.
+	(yylex): Update.
+	* go-exp.y (yylex): Update.
+	* f-exp.y (yylex): Update.
+	* d-exp.y: Update all rules.
+	(yylex): Update.
+	* c-exp.y: Update all rules.
+	(lex_one_token, classify_name, yylex, c_parse): Update.
+	* ada-exp.y (write_var_or_type, write_name_assoc): Update.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* gdbarch.h, gdbarch.c: Rebuild.
+	* gdbarch.sh (dtrace_parse_probe_argument): Change type.
+	* stap-probe.h: 
+	(struct stap_parse_info): Replace "parser_state" with
+	"expr_builder".
+	* parser-defs.h (struct expr_builder): Rename from "parser_state".
+	(parser_state): New class.
+	* parse.c (expr_builder): Rename.
+	(expr_builder::release): Rename.
+	(write_exp_elt, write_exp_elt_opcode, write_exp_elt_sym)
+	(write_exp_elt_msym, write_exp_elt_block, write_exp_elt_objfile)
+	(write_exp_elt_longcst, write_exp_elt_floatcst)
+	(write_exp_elt_type, write_exp_elt_intern, write_exp_string)
+	(write_exp_string_vector, write_exp_bitstring)
+	(write_exp_msymbol, mark_struct_expression)
+	(write_dollar_variable)
+	(insert_type_address_space, increase_expout_size): Replace
+	"parser_state" with "expr_builder".
+	* dtrace-probe.c: Replace "parser_state" with "expr_builder".
+	* amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Replace
+	"parser_state" with "expr_builder".
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* rust-exp.y: Replace "parse_language" with method call.
+	* p-exp.y: 
+	(yylex): Replace "parse_language" with method call.
+	* m2-exp.y: 
+	(yylex): Replace "parse_language" with method call.
+	* go-exp.y (classify_name): Replace "parse_language" with method
+	call.
+	* f-exp.y (yylex): Replace "parse_language" with method call.
+	* d-exp.y (lex_one_token): Replace "parse_language" with method
+	call.
+	* c-exp.y: 
+	(lex_one_token, classify_name, yylex): Replace "parse_language"
+	with method call.
+	* ada-exp.y (find_primitive_type, type_char)
+	(type_system_address): Replace "parse_language" with method call.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* rust-exp.y: Replace "parse_gdbarch" with method call.
+	* parse.c (write_dollar_variable, insert_type_address_space):
+	Replace "parse_gdbarch" with method call.
+	* p-exp.y (parse_type, yylex): Replace "parse_gdbarch" with method
+	call.
+	* objc-lang.c (end_msglist): Replace "parse_gdbarch" with method
+	call.
+	* m2-exp.y (parse_type, parse_m2_type, yylex): Replace
+	"parse_gdbarch" with method call.
+	* go-exp.y (parse_type, classify_name): Replace "parse_gdbarch"
+	with method call.
+	* f-exp.y (parse_type, parse_f_type, yylex): Replace
+	"parse_gdbarch" with method call.
+	* d-exp.y (parse_type, parse_d_type, lex_one_token): Replace
+	"parse_gdbarch" with method call.
+	* c-exp.y (parse_type, parse_number, classify_name): Replace
+	"parse_gdbarch" with method call.
+	* ada-lex.l: Replace "parse_gdbarch" with method call.
+	* ada-exp.y (parse_type, find_primitive_type, type_char)
+	(type_system_address): Replace "parse_gdbarch" with method call.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* dtrace-probe.c (dtrace_probe::build_arg_exprs): Update.
+	* stap-probe.c (stap_parse_argument): Update.
+	* stap-probe.h (struct stap_parse_info) <stap_parse_info>: Remove
+	initial_size parameter.
+	* rust-exp.y (rust_lex_tests): Update.
+	* parse.c (parser_state): Update.
+	(parse_exp_in_context): Update.
+	* parser-defs.h (struct parser_state) <parser_state>: Remove
+	"initial_size" parameter.
+
+2019-04-04  Tom Tromey  <tom@tromey.com>
+
+	* parser-defs.h (increase_expout_size): Don't declare.
+	* parse.c (increase_expout_size): Now static.
+
+2019-04-04  Thomas Schwinge  <thomas@codesourcery.com>
+
+	* gnu-nat.c (gnu_nat_target::wait): Fix
+	target_waitstatus_to_string call.
+
+2019-04-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* eval.c (evaluate_subexp_standard): Handle internal functions
+	during Fortran function call handling.
+
+2019-04-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention new internal functions.
+	* dwarf2read.c (dwarf2_init_complex_target_type): New function.
+	(read_base_type): Use dwarf2_init_complex_target_type.
+	* value.c (creal_internal_fn): New function.
+	(cimag_internal_fn): New function.
+	(_initialize_values): Register new internal functions.
+
+2019-04-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* infrun.c (stop_all_threads): If debug_infrun, always
+	trace the wait status after wait_one, using
+	target_waitstatus_to_string and target_pid_to_str.
+	(handle_inferior_event): Replace various trace of
+	wait status kind by a single trace.
+	* gnu-nat.c (gnu_nat_target::wait): Replace local
+	wait status kind image by target_waitstatus_to_string.
+	* target/waitstatus.c (target_waitstatus_to_string): Fix
+	obsolete comment.
+
+2019-04-01  Tom Tromey  <tromey@adacore.com>
+
+	PR symtab/23331:
+	* dwarf2read.c (partial_die_info::read): Handle DW_AT_ranges.
+
+2019-04-01  Sergio Durigan Junior  <sergiodj@redhat.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* top.c (quit_force): Call 'finalize_values'.
+	* value.c (finalize_values): New function.
+	* value.h (finalize_values): Declare.
+
+2019-03-30  Eli Zaretskii  <eliz@gnu.org>
+
+	* NEWS: Announce $_gdb_major and $_gdb_minor.
+
+	* top.c (init_gdb_version_vars): New function.
+	(gdb_init): Call init_gdb_version_vars.
+
+2019-03-29  Tom Tromey  <tromey@adacore.com>
+
+	* printcmd.c (_initialize_printcmd): Add usage lines.  Update some
+	help text.  Remove dead code.
+
+2019-03-29  Keith Seitz  <keiths@redhat.com>
+
+	From Siddhesh Poyarekar:
+	* f-lang.h (f77_get_upperbound): Return LONGEST.
+	(f77_get_lowerbound): Likewise.
+	* f-typeprint.c (f_type_print_varspec_suffix): Expand
+	UPPER_BOUND and LOWER_BOUND to LONGEST.  Use plongest to format
+	print them.
+	(f_type_print_base): Expand UPPER_BOUND to LONGEST.  Use
+	plongest to format print it.
+	* f-valprint.c (f77_get_lowerbound): Return LONGEST.
+	(f77_get_upperbound): Likewise.
+	(f77_get_dynamic_length_of_aggregate): Expand UPPER_BOUND,
+	LOWER_BOUND to LONGEST.
+	(f77_create_arrayprint_offset_tbl): Likewise.
+
+2019-03-29  Keith Seitz  <keiths@redhat.com>
+
+	* ada-lang.c (ada_template_to_fixed_record_type_1): Use
+	%s/pulongest for TYPE_LENGTH instead of %d in format
+	strings.
+	* ada-typerint.c (ada_print_type): Likewise.
+	* amd64-windows-tdep.c (amd64_windows_store_arg_in_reg): Likewise.
+	* compile/compile-c-support.c (generate_register_struct): Likewise.
+	* gdbtypes.c (recursive_dump_type): Likewise.
+	* gdbtypes.h (struct type) <length>: Change type to ULONGEST.
+	* m2-typeprint.c (m2_array):  Use %s/pulongest for TYPE_LENGTH
+	instead of %d in format strings.
+	* riscv-tdep.c (riscv_type_alignment): Cast second argument
+	to std::min to ULONGEST.
+	* symmisc.c (print_symbol): Use %s/pulongest for TYPE_LENGTH
+	instead of %d in format strings.
+	* tracepoint.c (info_scope_command): Likewise.
+	* typeprint.c (print_offset_data::update)
+	(print_offset_data::finish): Likewise.
+	* xtensa-tdep.c (xtensa_store_return_value)
+	(xtensa_push_dummy_call): Likewise.
+
+2019-03-28  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* windows-nat.c (display_selector): Fixed format specifications
+	for 64-bit Cygwin.
+
+2019-03-28  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* infrun.c (follow_exec): Call target_terminal::ours_for_output.
+
+2019-03-28  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* nios2-tdep.h (struct gdbarch_tdep): Add is_kernel_helper.
+	* nios2-tdep.c (nios2_get_next_pc): Skip over kernel helpers.
+	* nios2-linux-tdep.c (nios2_linux_is_kernel_helper): New.
+	(nios2_linux_init_abi): Install it.
+
+2019-03-28  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c (aarch64_vnv_type): Use vector types.
+
+2019-03-28  Alan Hayward  <alan.hayward@arm.com>
+
+	* features/aarch64-sve.c (create_feature_aarch64_sve): Add q view.
+
+2019-03-24  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	    Tom Tromey  <tromey@adacore.com>
+
+	* minsyms.c (minimal_symbol_upper_bound): Fix buffer overflow.
+
+2019-03-26  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb-gdb.py.in (StructMainTypePrettyPrinter.bound_img): New method.
+	(StructMainTypePrettyPrinter.bounds_img): Use new "bound_img"
+	method to compute the bounds of range types. Also print "[evaluated]"
+	if the bounds' values come from a dynamic evaluation.
+
+2019-03-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cp-valprint.c (cp_print_value_fields): Don't print trailing
+	whitespace when pretty printing is on.
+
+2019-03-26  Alan Hayward  <alan.hayward@arm.com>
+
+	* ppc-linux-nat.c: Add include.
+
+2019-03-26  Alan Hayward  <alan.hayward@arm.com>
+
+	* NEWS: Mention AArch64 Pointer Authentication.
+
+2019-03-26  Alan Hayward  <alan.hayward@arm.com>
+
+	* arm-linux-nat.c: Add include.
+
+2019-03-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* source-cache.c (source_cache::get_source_lines): Re-read
+	fullname after calling open_source_file.
+
+2019-03-25  John Baldwin  <jhb@FreeBSD.org>
+
+	* NEWS: Mention TLS support for FreeBSD.
+
+2019-03-25  Tom Tromey  <tromey@adacore.com>
+
+	* minsyms.c (BUNCH_SIZE): Update comment.
+	(~minimal_symbol_reader): Remove old comment.
+	(compact_minimal_symbols): Update comment.
+	(minimal_symbol_reader::install): Remove old comment.  Update
+	other comments.
+
+2019-03-25  Alan Hayward  <alan.hayward@arm.com>
+
+	* s390-linux-nat.c: Add include.
+
+2019-03-25  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-linux-nat.c (aarch64_linux_nat_target::read_description):
+	Call linux_get_hwcap.
+	* aarch64-linux-tdep.c (aarch64_linux_core_read_description):
+	Likewise.
+	(aarch64_linux_get_hwcap): Remove function.
+	* aarch64-linux-tdep.h (aarch64_linux_get_hwcap): Remove
+	declaration.
+	* arm-linux-nat.c (arm_linux_nat_target::read_description):Call
+	linux_get_hwcap.
+	* arm-linux-tdep.c (arm_linux_core_read_description): Likewise.
+	* linux-tdep.c (linux_get_hwcap): Add function.
+	(linux_get_hwcap2): Likewise.
+	* linux-tdep.h (linux_get_hwcap): Add declaration.
+	(linux_get_hwcap2): Likewise.
+	* ppc-linux-nat.c (ppc_linux_get_hwcap): Remove function.
+	(ppc_linux_get_hwcap2): Likewise.
+	(ppc_linux_nat_target::region_ok_for_hw_watchpoint): Call
+	linux_get_hwcap.
+	(ppc_linux_nat_target::insert_watchpoint): Likewise.
+	(ppc_linux_nat_target::watchpoint_addr_within_range): Likewise.
+	(ppc_linux_nat_target::read_description): Likewise.
+	* ppc-linux-tdep.c (ppc_linux_core_read_description): Likewise.
+	* s390-linux-nat.c: Likewise.
+	* s390-linux-tdep.c (s390_core_read_description): Likewise.
+
+2019-03-24  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (standard_lookup): Simplify initialization.
+	(ada_lookup_symbol_nonlocal): Simplify return.
+	* solib-spu.c (spu_lookup_lib_symbol): Simplify return.
+	* solib-darwin.c (darwin_lookup_lib_symbol): Simplify return.
+	* solib-svr4.c (elf_lookup_lib_symbol): Simplify return.
+	* rust-lang.c (rust_lookup_symbol_nonlocal): Simplify
+	initialization.
+	* solib.c (solib_global_lookup): Simplify.
+	* symtab.c (null_block_symbol): Remove.
+	(symbol_cache_lookup): Simplify returns.
+	(lookup_language_this): Simplify returns.
+	(lookup_symbol_aux): Simplify return.
+	(lookup_local_symbol): Simplify returns.
+	(lookup_global_symbol_from_objfile): Simplify return.
+	(lookup_symbol_in_objfile_symtabs)
+	(lookup_symbol_in_objfile_from_linkage_name): Simplify return.
+	(lookup_symbol_via_quick_fns, lookup_symbol_in_static_block)
+	(lookup_static_symbol, lookup_global_symbol): Simplify return.
+	* cp-namespace.c (cp_lookup_bare_symbol)
+	(cp_search_static_and_baseclasses, cp_lookup_symbol_via_imports)
+	(cp_lookup_symbol_via_all_imports, cp_lookup_nested_symbol_1)
+	(cp_lookup_nested_symbol): Don't use null_block_symbol.
+	(cp_lookup_symbol_via_imports): Simplify initialization.
+	(find_symbol_in_baseclass): Likewise.
+	* symtab.h (null_block_symbol): Remove.
+	* d-namespace.c (d_lookup_symbol): Don't use null_block_symbol.
+	(d_lookup_nested_symbol, d_lookup_symbol_imports)
+	(d_lookup_symbol_module): Likewise.
+	(find_symbol_in_baseclass): Simplify initialization.
+
+2019-03-24  Tom Tromey  <tom@tromey.com>
+
+	* expression.h: Don't include symtab.h.
+	(struct block): Forward declare.
+
+2019-03-24  Tom Tromey  <tom@tromey.com>
+
+	* c-exp.y (typebase): Remove casts.
+	* gdbtypes.c (lookup_unsigned_typename, )
+	(lookup_signed_typename): Remove cast.
+	* eval.c (parse_to_comma_and_eval): Remove cast.
+	* parse.c (write_dollar_variable): Remove cast.
+	* block.h (struct block) <superblock>: Now const.
+	* symfile-debug.c (debug_qf_map_matching_symbols): Update.
+	* psymtab.c (psym_map_matching_symbols): Make "block" const.
+	(map_block): Make "block" const.
+	* symfile.h (struct quick_symbol_functions)
+	<map_matching_symbols>: Constify block argument to "callback".
+	* symtab.c (basic_lookup_transparent_type_quick): Make "block"
+	const.
+	(find_pc_sect_compunit_symtab): Make "b" const.
+	(find_symbol_at_address): Likewise.
+	(search_symbols): Likewise.
+	* dwarf2read.c (dw2_lookup_symbol): Make "block" const.
+	(dw2_debug_names_lookup_symbol): Likewise.
+	(dw2_map_matching_symbols): Update.
+	* p-valprint.c (pascal_val_print): Remove "block".
+	* ada-lang.c (ada_add_global_exceptions): Make "b" const.
+	(aux_add_nonlocal_symbols): Make "block" const.
+	(resolve_subexp): Remove cast.
+	* linespec.c (iterate_over_all_matching_symtabs): Make "block"
+	const.
+	(iterate_over_file_blocks): Likewise.
+	* f-exp.y (%union) <bval>: Remove.
+	* coffread.c (patch_opaque_types): Make "b" const.
+	* spu-tdep.c (spu_catch_start): Make "block" const.
+	* c-valprint.c (print_unpacked_pointer): Remove "block".
+	* symmisc.c (dump_symtab_1): Make "b" const.
+	(block_depth): Make "block" const.
+	* d-exp.y (%union) <bval>: Remove.
+	* cp-support.h (cp_lookup_rtti_type): Update.
+	* cp-support.c (cp_lookup_rtti_type): Make "block" const.
+	* psymtab.c (psym_lookup_symbol): Make "block" const.
+	(maintenance_check_psymtabs): Make "b" const.
+	* python/py-framefilter.c (extract_sym): Make "sym_block" const.
+	(enumerate_locals, enumerate_args): Update.
+	* python/py-symtab.c (stpy_global_block): Make "block" const.
+	(stpy_static_block): Likewise.
+	* inline-frame.c (block_starting_point_at): Make "new_block"
+	const.
+	* block.c (find_block_in_blockvector): Make return type const.
+	(blockvector_for_pc_sect): Make "b" const.
+	(find_block_in_blockvector): Make "b" const.
+
+2019-03-23  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (varobj_create): Update.
+	* symfile.c (clear_symtab_users): Don't reset innermost_block.
+	* printcmd.c (display_command, do_one_display): Don't reset
+	innermost_block.
+	* parser-defs.h (enum innermost_block_tracker_type): Move to
+	expression.h.
+	(innermost_block): Update comment.
+	* parse.c (parse_exp_1): Add tracker_types parameter.
+	(parse_exp_in_context): Rename from parse_exp_in_context_1.  Add
+	tracker_types parameter.  Reset innermost_block.
+	(parse_exp_in_context): Remove.
+	(parse_expression_for_completion): Update.
+	* objfiles.c (~objfile): Don't reset expression_context_block or
+	innermost_block.
+	* expression.h (enum innermost_block_tracker_type): Move from
+	parser-defs.h.
+	(parse_exp_1): Add tracker_types parameter.
+	* breakpoint.c (set_breakpoint_condition, watch_command_1): Don't
+	reset innermost_block.
+
+2019-03-23  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h: Include bcache.h.
+
+2019-03-23  Tom Tromey  <tom@tromey.com>
+
+	* linespec.c (get_current_search_block): Use
+	scoped_restore_current_language.
+	* symmisc.c (dump_symtab): Use scoped_restore_current_language.
+
+2019-03-22  Alan Hayward  <alan.hayward@arm.com>
+	    Jiong Wang  <jiong.wang@arm.com>
+
+	* aarch64-linux-tdep.c
+	(aarch64_linux_iterate_over_regset_sections): Check for pauth
+	section.
+	* aarch64-linux-tdep.h (AARCH64_LINUX_SIZEOF_PAUTH): New define.
+
+2019-03-22  Alan Hayward  <alan.hayward@arm.com>
+	    Jiong Wang  <jiong.wang@arm.com>
+
+	* aarch64-tdep.c (aarch64_analyze_prologue): Check for pauth
+	instructions.
+	(aarch64_analyze_prologue_test): Add PACIASP test.
+	(aarch64_prologue_prev_register): Unmask PC value.
+
+2019-03-22  Alan Hayward  <alan.hayward@arm.com>
+	    Jiong Wang  <jiong.wang@arm.com>
+
+	* aarch64-tdep.c (aarch64_frame_unmask_address): New function.
+	(aarch64_dwarf2_prev_register): Unmask PC value.
+	(aarch64_dwarf2_frame_init_reg): Init pauth registers.
+	(aarch64_execute_dwarf_cfa_vendor_op): Check for
+	DW_CFA_AARCH64_negate_ra_state.
+	(aarch64_gdbarch_init): Add aarch64_execute_dwarf_cfa_vendor_op.
+
+2019-03-22  Alan Hayward  <alan.hayward@arm.com>
+	    Jiong Wang  <jiong.wang@arm.com>
+
+	* aarch64-tdep.c (aarch64_dwarf_reg_to_regnum): Check for pauth
+	registers.
+	(aarch64_pseudo_register_name): Likewise.
+	(aarch64_pseudo_register_type): Likewise.
+	(aarch64_pseudo_register_reggroup_p): Likewise.
+	(aarch64_gdbarch_init): Add pauth registers.
+	* aarch64-tdep.h (AARCH64_DWARF_PAUTH_RA_STATE): New define.
+	(AARCH64_DWARF_PAUTH_DMASK): Likewise.
+	(AARCH64_DWARF_PAUTH_CMASK): Likewise.
+	(struct gdbarch_tdep): Add regnum for ra_state.
+
+2019-03-22  Alan Hayward  <alan.hayward@arm.com>
+	    Jiong Wang  <jiong.wang@arm.com>
+
+	* arch/aarch64.h (AARCH64_PAUTH_REGS_SIZE): New define.
+
+2019-03-22  Alan Hayward  <alan.hayward@arm.com>
+	    Jiong Wang  <jiong.wang@arm.com>
+
+	* aarch64-linux-nat.c (fetch_pauth_masks_from_thread): New
+	function.
+	(aarch64_linux_nat_target::fetch_registers): Read pauth registers.
+	* aarch64-tdep.c (aarch64_cannot_store_register): New function.
+	(aarch64_gdbarch_init): Add puth registers.
+	* aarch64-tdep.h (struct gdbarch_tdep): Add pauth features.
+	* arch/aarch64.h (AARCH64_PAUTH_DMASK_REGNUM): New define.
+	(AARCH64_PAUTH_CMASK_REGNUM): Likewise.
+
+2019-03-22  Alan Hayward  <alan.hayward@arm.com>
+	    Jiong Wang  <jiong.wang@arm.com>
+
+	* aarch64-linux-nat.c
+	(aarch64_linux_nat_target::read_description): Read PACA hwcap.
+	* aarch64-linux-tdep.c
+	(aarch64_linux_core_read_description): Likewise.
+	(aarch64_linux_get_hwcap): New function.
+	* aarch64-linux-tdep.h (AARCH64_HWCAP_PACA): New define.
+	(aarch64_linux_get_hwcap): New declaration.
+
+2019-03-22  Alan Hayward  <alan.hayward@arm.com>
+	    Jiong Wang  <jiong.wang@arm.com>
+
+	* aarch64-linux-nat.c
+	(aarch64_linux_nat_target::read_description): Add pauth param.
+	* aarch64-linux-tdep.c
+	(aarch64_linux_core_read_description): Likewise.
+	* aarch64-tdep.c (struct target_desc): Add in pauth.
+	(aarch64_read_description): Add pauth param.
+	(aarch64_gdbarch_init): Likewise.
+	* aarch64-tdep.h (aarch64_read_description): Likewise.
+	* arch/aarch64.c (aarch64_create_target_description): Likewise.
+	* arch/aarch64.h (aarch64_create_target_description): Likewise.
+	* features/Makefile: Add new files.
+	* features/aarch64-pauth.c: New file.
+	* features/aarch64-pauth.xml: New file.
+
+2019-03-20  Tom Tromey  <tromey@adacore.com>
+
+	* infrun.c (handle_inferior_event): Rename from
+	handle_inferior_event_1.  Create a scoped_value_mark.
+	(handle_inferior_event): Remove.
+
+2019-03-19  Tom Tromey  <tromey@adacore.com>
+
+	* mi/mi-interp.c (mi_on_normal_stop_1): Only show displays once.
+	* infrun.h (print_stop_event): Add "displays" parameter.
+	* infrun.c (print_stop_event): Add "displays" parameter.
+
+2019-03-19  Pedro Alves  <palves@redhat.com>
+
+	* tui/tui-out.c (tui_ui_out::do_field_string): Simplify.
+	(tui_ui_out::do_text): Add comments.  Reset M_LINE to 0 instead of
+	to -1.  Fix TABs vs spaces.
+	(tui_ui_out::tui_ui_out): Don't initialize fields here.
+	* tui/tui-out.h (tui_ui_out) Add intro comments.
+	<m_line, m_start_of_line>: In-class initialize, and add describing
+	comment.
+
+2019-03-18  Alan Hayward  <alan.hayward@arm.com>
+
+	* arm-linux-nat.c (arm_linux_insert_hw_breakpoint1): Fix
+	variable names.
+	(arm_linux_remove_hw_breakpoint1): Use a gdb::function_view.
+
+2019-03-18  Pedro Alves  <palves@redhat.com>
+	    Eli Zaretskii <eliz@gnu.org>
+
+	* tui/tui-out.c (tui_ui_out::tui_ui_out): Fix initialization of
+	m_line and m_start_of_line.
+
+2019-03-18  Eli Zaretskii  <eliz@gnu.org>
+
+	* tui/tui-io.c (gdb_wgetch): Don't echo CR.
+	(tui_getc): When gdb_wgetch returns a CR, behave the same as when
+	it returns a newline.  This fixes a regression in TU mode, whereby
+	the next line is output on the same screen line as the user input.
+
+2019-03-18  Tom Tromey  <tromey@adacore.com>
+
+	* minsyms.c (minimal_symbol_reader::install): Remove call to
+	obstack_blank.
+
+2019-03-18  Pedro Alves  <palves@redhat.com>
+
+	* tui/tui-io.c (reverse_mode_p, reverse_save_bg, reverse_save_fg):
+	New globals.
+	(apply_style): New, factored out from ...
+	(apply_ansi_escape): ... this.  Handle reverse video mode.
+	(tui_set_reverse_mode): New function.
+	* tui/tui-io.h (tui_set_reverse_mode): New declaration.
+	* tui/tui-winsource.c (tui_show_source_line): Use
+	tui_set_reverse_mode instead of setting A_STANDOUT.
+	* ui-style.h (struct ui_file_style) <set_reverse, set_fg, set_bg>:
+	New setter methods.
+
+2019-03-18  Hannes Domani  <ssbssa@yahoo.de>
+
+	* tui/tui-source.c (copy_source_line): Fix handling of 'column'.
+	Handle tabs.
+
+2019-03-18  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (empty_array): Add "high" parameter.
+	(ada_evaluate_subexp): Update.
+
+2019-03-17  Sergei Trofimovich <siarheit@google.com>
+
+	* unittests/string_view-selftests.c: Define
+	_initialize_string_view_selftests unconditionally.
+
+2019-03-17  Vladimir Martyanov  <vilgeforce@gmail.com>
+
+	PR gdb/24350
+	* windows-nat.c (windows_make_so): Remove unused text_vma variable.
+
+2019-03-17  Vladimir Martyanov  <vilgeforce@gmail.com>
+
+	PR gdb/24351
+	* windows-nat.c (display_selector): Fix format specifiers.
+
+2019-03-17  Eli Zaretskii  <eliz@gnu.org>
+
+	* tui/tui-winsource.c (tui_set_is_exec_point_at): Call
+	tui_refill_source_window instead of tui_refresh_win, to update the
+	current execution line.  This fixes redisplay of the current line
+	when stepping through the code with "next" or "step".
+
+2019-03-16  Eli Zaretskii  <eliz@gnu.org>
+
+	* source-cache.c (source_cache::get_source_lines): Call
+	find_source_lines to initialize s->nlines.  This fixes vertical
+	scrolling of TUI source window when the DOWN arrow is pressed.
+
+2019-03-16  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* auto-load.c (_initialize_auto_load): Fix 'This options has'.
+	linux-thread-db.c (_initialize_thread_db): Likewise.
+
+2019-03-16  Eli Zaretskii  <eliz@gnu.org>
+
+	* tui/tui-winsource.c (tui_show_source_line): Revert "Use
+	wclrtoeol in tui_show_source_line".  This reverts changes made in
+	commit 4a3045920bbe4e50a0f4920b0fdc4e88ef23015c.
+
+2019-03-15  Tom Tromey  <tom@tromey.com>
+
+	* symtab.h (struct minimal_symbol): Derive from
+	general_symbol_info.
+	(MSYMBOL_VALUE, MSYMBOL_VALUE_RAW_ADDRESS)
+	(MSYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_BYTES)
+	(MSYMBOL_BLOCK_VALUE, MSYMBOL_VALUE_CHAIN, MSYMBOL_LANGUAGE)
+	(MSYMBOL_SECTION, MSYMBOL_OBJ_SECTION, MSYMBOL_NATURAL_NAME)
+	(MSYMBOL_LINKAGE_NAME, MSYMBOL_DEMANGLED_NAME)
+	(MSYMBOL_SEARCH_NAME): Update.
+	(MSYMBOL_SET_LANGUAGE, MSYMBOL_SET_NAMES): Remove.
+	* solib.c (gdb_bfd_lookup_symbol_from_symtab): Don't use memset.
+	* minsyms.c (minimal_symbol_reader::record_full): Update.
+
+2019-03-15  Tom Tromey  <tom@tromey.com>
+
+	* minsyms.c (minimal_symbol_reader::install): Use memcpy.
+
+2019-03-15  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct objfile_per_bfd_storage) <msymbols>: Now a
+	unique_xmalloc_ptr.
+	(objfile::msymbols_range::begin, objfile::msymbols_range::end):
+	Update.
+	* minsyms.c (lookup_minimal_symbol_by_pc_section)
+	(build_minimal_symbol_hash_tables)
+	(minimal_symbol_reader::install): Update.
+
+2019-03-15  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (create_demangled_names_hash): Update.
+	(symbol_set_names): Update.
+	* objfiles.h (struct objfile_per_bfd_storage)
+	<demangled_names_hash>: Now an htab_up.
+	* objfiles.c (objfile_per_bfd_storage): Simplify.
+
+2019-03-15  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct objfile_per_bfd_storage): Declare
+	destructor.
+	* objfiles.c (objfile_per_bfd_storage::~objfile_per_bfd_storage):
+	New.
+	(get_objfile_bfd_data): Use new.  Don't initialize
+	language_of_main.
+	(free_objfile_per_bfd_storage): Remove.
+	(objfile_bfd_data_free, objfile::~objfile): Use delete.
+
+2019-03-15  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (reread_symbols): Update.
+	* objfiles.c (objfile::objfile): Update.
+	* minsyms.h (terminate_minimal_symbol_table): Don't declare.
+	* minsyms.c (lookup_minimal_symbol_by_pc_section): Update
+	comment.
+	(minimal_symbol_reader::install): Update.
+	(terminate_minimal_symbol_table): Remove.
+	* jit.c (jit_object_close_impl): Update.
+
+2019-03-15  Tom Tromey  <tom@tromey.com>
+
+	* minsyms.c (minimal_symbol_reader::record_full): Remove some
+	initializations.
+
+2019-03-15  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct objfile_per_bfd_storage)
+	<demangled_hash_languages>: Now a bitset.
+	* minsyms.c (add_minsym_to_demangled_hash_table): Update.
+	(lookup_minimal_symbol): Update.
+
+2019-03-15  Tom Tromey  <tom@tromey.com>
+
+	* minsyms.h (class minimal_symbol_reader) <record_with_info>:
+	Don't return the symbol.
+	* coffread.c (record_minimal_symbol): Use record_full.
+
+2019-03-14  Eli Zaretskii  <eliz@gnu.org>
+
+	The MS-Windows port of ncurses fails to switch to a color pair if
+	one or both of the colors are the implicit default colors.  This
+	change records the default colors when TUI is initialized, and
+	then specifies them explicitly when a color pair uses the default
+	colors.  This allows color styling in TUI mode on MS-Windows.
+
+	* tui/tui-io.c [__MINGW32__]: Include windows.h.  Declare
+	ncurses_norm_attr.
+	(tui_initialize_io) [__MINGW32__]: Record the default terminal
+	colors in ncurses_norm_attr.
+	(apply_ansi_escape) [__MINGW32__]: If a color in a color pair is
+	"none", replace it with the default color recorded in
+	ncurses_norm_attr.
+
+2019-03-14  Tom Tromey  <tromey@adacore.com>
+
+	* source-cache.h (class source_cache) <get_source_lines>: Return
+	std::string.
+	* source-cache.c (source_cache::extract_lines): Handle case where
+	first_pos==npos.  Return std::string.
+	(source_cache::get_source_lines): Update.
+
+2019-03-14  Tom Tromey  <tromey@adacore.com>
+
+	* NEWS: Add item for "style sources" commands.
+	* source-cache.c (source_cache::get_source_lines): Check
+	source_styling.
+	* cli/cli-style.c (source_styling): New global.
+	(_initialize_cli_style): Add "style sources" commands.
+	(show_style_sources): New function.
+	* cli/cli-style.h (source_styling): Declare.
+
+2019-03-14  Pedro Alves  <palves@redhat.com>
+	    Tom Tromey  <tromey@adacore.com>
+
+	* tui/tui-winsource.h (tui_refill_source_window): Declare.
+	* tui/tui-winsource.c (tui_refill_source_window): New function,
+	from...
+	(tui_horizontal_source_scroll): ... here.  Move some logic.
+	* cli/cli-style.c (set_style_enabled): Notify new observable.
+	* tui/tui-hooks.c (tui_redisplay_source): New function.
+	(tui_attach_detach_observers): Attach or detach
+	tui_redisplay_source.
+	* observable.h (source_styling_changed): New observable.
+	* observable.c: Define source_styling_changed observable.
+
+2019-03-13  Tom Tromey  <tromey@adacore.com>
+
+	* i386-gnu-nat.c (i386_gnu_nat_target::fetch_registers)
+	(i386_gnu_nat_target::store_registers): Update.
+	* target-debug.h (target_debug_print_std_string): New macro.
+	* x86-linux-nat.c (x86_linux_nat_target::enable_btrace): Update.
+	* windows-tdep.c (display_one_tib): Update.
+	* tui/tui-stack.c (tui_make_status_line): Update.
+	* top.c (print_inferior_quit_action): Update.
+	* thread.c (thr_try_catch_cmd): Update.
+	(add_thread_with_info): Update.
+	(thread_target_id_str): Update.
+	(thr_try_catch_cmd): Update.
+	(thread_command): Update.
+	(thread_find_command): Update.
+	* record-btrace.c (record_btrace_target::info_record)
+	(record_btrace_resume_thread, record_btrace_target::resume)
+	(record_btrace_cancel_resume, record_btrace_step_thread)
+	(record_btrace_target::wait, record_btrace_target::wait)
+	(record_btrace_target::wait, record_btrace_target::stop): Update.
+	* progspace.c (print_program_space): Update.
+	* process-stratum-target.c
+	(process_stratum_target::thread_address_space): Update.
+	* linux-fork.c (linux_fork_mourn_inferior)
+	(detach_checkpoint_command, info_checkpoints_command)
+	(linux_fork_context): Update.
+	(linux_fork_detach): Update.
+	(class scoped_switch_fork_info): Update.
+	(delete_checkpoint_command): Update.
+	* infrun.c (follow_fork_inferior): Update.
+	(follow_fork_inferior): Update.
+	(proceed_after_vfork_done): Update.
+	(handle_vfork_child_exec_or_exit): Update.
+	(follow_exec): Update.
+	(displaced_step_prepare_throw): Update.
+	(displaced_step_restore): Update.
+	(start_step_over): Update.
+	(resume_1): Update.
+	(clear_proceed_status_thread): Update.
+	(proceed): Update.
+	(print_target_wait_results): Update.
+	(do_target_wait): Update.
+	(context_switch): Update.
+	(stop_all_threads): Update.
+	(restart_threads): Update.
+	(finish_step_over): Update.
+	(handle_signal_stop): Update.
+	(switch_back_to_stepped_thread): Update.
+	(keep_going_pass_signal): Update.
+	(print_exited_reason): Update.
+	(normal_stop): Update.
+	* inferior.c (inferior_pid_to_str): Change return type.
+	(print_selected_inferior): Update.
+	(add_inferior): Update.
+	(detach_inferior): Update.
+	* dummy-frame.c (fprint_dummy_frames): Update.
+	* dcache.c (dcache_info_1): Update.
+	* btrace.c (btrace_enable, btrace_disable, btrace_teardown)
+	(btrace_fetch, btrace_clear): Update.
+	* linux-tdep.c (linux_core_pid_to_str): Change return type.
+	* i386-cygwin-tdep.c (i386_windows_core_pid_to_str): Change return
+	type.
+	* fbsd-tdep.c (fbsd_core_pid_to_str): Change return type.
+	* sol2-tdep.h (sol2_core_pid_to_str): Change return type.
+	* sol2-tdep.c (sol2_core_pid_to_str): Change return type.
+	* gdbarch.c, gdbarch.h: Rebuild.
+	* gdbarch.sh (core_pid_to_str): Change return type.
+	* windows-nat.c (struct windows_nat_target) <pid_to_str>: Change
+	return type.
+	(windows_nat_target::pid_to_str): Change return type.
+	(windows_delete_thread): Update.
+	(windows_nat_target::attach): Update.
+	(windows_nat_target::files_info): Update.
+	* target-delegates.c: Rebuild.
+	* sol-thread.c (class sol_thread_target) <pid_to_str>: Change
+	return type.
+	(sol_thread_target::pid_to_str): Change return type.
+	* remote.c (class remote_target) <pid_to_str>: Change return
+	type.
+	(remote_target::pid_to_str): Change return type.
+	(extended_remote_target::attach, remote_target::remote_stop_ns)
+	(remote_target::remote_notif_remove_queued_reply)
+	(remote_target::push_stop_reply, remote_target::disable_btrace):
+	Update.
+	(extended_remote_target::attach): Update.
+	* remote-sim.c (struct gdbsim_target) <pid_to_str>: Change return
+	type.
+	(gdbsim_target::pid_to_str): Change return type.
+	* ravenscar-thread.c (struct ravenscar_thread_target)
+	<pid_to_str>: Change return type.
+	(ravenscar_thread_target::pid_to_str): Change return type.
+	* procfs.c (class procfs_target) <pid_to_str>: Change return
+	type.
+	(procfs_target::pid_to_str): Change return type.
+	(procfs_target::attach): Update.
+	(procfs_target::detach): Update.
+	(procfs_target::fetch_registers): Update.
+	(procfs_target::store_registers): Update.
+	(procfs_target::wait): Update.
+	(procfs_target::files_info): Update.
+	* obsd-nat.c (obsd_nat_target::pid_to_str): Change return type.
+	* nto-procfs.c (struct nto_procfs_target) <pid_to_str>: Change
+	return type.
+	(nto_procfs_target::pid_to_str): Change return type.
+	(nto_procfs_target::files_info, nto_procfs_target::attach): Update.
+	* linux-thread-db.c (class thread_db_target) <pid_to_str>: Change
+	return type.
+	* linux-nat.c (linux_nat_target::pid_to_str): Change return type.
+	(exit_lwp): Update.
+	(attach_proc_task_lwp_callback, get_detach_signal)
+	(detach_one_lwp, resume_lwp, linux_nat_target::resume)
+	(linux_nat_target::resume, wait_lwp, stop_callback)
+	(maybe_clear_ignore_sigint, stop_wait_callback, status_callback)
+	(save_stop_reason, select_event_lwp, linux_nat_filter_event)
+	(linux_nat_wait_1, resume_stopped_resumed_lwps)
+	(linux_nat_target::wait, linux_nat_stop_lwp): Update.
+	* inf-ptrace.c (inf_ptrace_target::pid_to_str): Change return
+	type.
+	(inf_ptrace_target::attach): Update.
+	(inf_ptrace_target::files_info): Update.
+	* go32-nat.c (struct go32_nat_target) <pid_to_str>: Change return
+	type.
+	(go32_nat_target::pid_to_str): Change return type.
+	* gnu-nat.c (gnu_nat_target::pid_to_str): Change return type.
+	(gnu_nat_target::wait): Update.
+	(gnu_nat_target::wait): Update.
+	(gnu_nat_target::resume): Update.
+	* fbsd-nat.c (fbsd_nat_target::pid_to_str): Change return type.
+	(fbsd_nat_target::wait): Update.
+	* darwin-nat.c (darwin_nat_target::pid_to_str): Change return
+	type.
+	(darwin_nat_target::attach): Update.
+	* corelow.c (class core_target) <pid_to_str>: Change return type.
+	(core_target::pid_to_str): Change return type.
+	* target.c (normal_pid_to_str): Change return type.
+	(default_pid_to_str): Likewise.
+	(target_pid_to_str): Change return type.
+	(target_translate_tls_address): Update.
+	(target_announce_detach): Update.
+	* bsd-uthread.c (struct bsd_uthread_target) <pid_to_str>: Change
+	return type.
+	(bsd_uthread_target::pid_to_str): Change return type.
+	* bsd-kvm.c (class bsd_kvm_target) <pid_to_str>: Change return
+	type.
+	(bsd_kvm_target::pid_to_str): Change return type.
+	* aix-thread.c (class aix_thread_target) <pid_to_str>: Change
+	return type.
+	(aix_thread_target::pid_to_str): Change return type.
+	* target.h (struct target_ops) <pid_to_str>: Change return type.
+	(target_pid_to_str, normal_pid_to_str): Likewise.
+	* obsd-nat.h (class obsd_nat_target) <pid_to_str>: Change return
+	type.
+	* linux-nat.h (class linux_nat_target) <pid_to_str>: Change return
+	type.
+	* inf-ptrace.h (struct inf_ptrace_target) <pid_to_str>: Change
+	return type.
+	* gnu-nat.h (struct gnu_nat_target) <pid_to_str>: Change return
+	type.
+	* fbsd-nat.h (class fbsd_nat_target) <pid_to_str>: Change return
+	type.
+	* darwin-nat.h (class darwin_nat_target) <pid_to_str>: Change
+	return type.
+
+2019-03-13  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* NEWS: Mention that the new default MI version is 3.  Mention
+	changes to the output of commands and events that deal with
+	multi-location breakpoints.
+	* breakpoint.c: Include "mi/mi-out.h".
+	(print_one_breakpoint): Change output syntax if using MI version
+	>= 3.
+	* mi/mi-main.h (mi_cmd_fix_multi_location_breakpoint_output):
+	New.
+	(mi_multi_location_breakpoint_output_fixed): New.
+	* mi/mi-main.c (fix_multi_location_breakpoint_output): New.
+	(mi_cmd_fix_multi_location_breakpoint_output): New.
+	(mi_multi_location_breakpoint_output_fixed): New.
+	* mi/mi-cmds.c (mi_cmds): Register command
+	-fix-multi-location-breakpoint-output.
+	* mi/mi-out.c (mi_out_new): Instantiate version 3 when using
+	interpreter "mi".
+
+2019-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* mi/mi-out.h (mi_out_new): Change parameter to const char *.
+	* mi/mi-out.c (mi_out_new): Change parameter to const char *,
+	instantiate mi_ui_out based on interpreter name.
+	* mi/mi-interp.c (mi_interp::init): Use the new mi_out_new.
+	* mi/mi-main.c (mi_load_progress): Likewise.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* NEWS: Combine separate "New targets" sections for 8.3.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* ppc-fbsd-tdep.c (ppcfbsd_get_thread_local_address): New.
+	(ppcfbsd_init_abi): Install gdbarch
+	"fetch_tls_load_module_address" and "get_thread_local_address"
+	methods.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* riscv-fbsd-tdep.c (riscv_fbsd_get_thread_local_address): New.
+	(riscv_fbsd_init_abi): Install gdbarch
+	"fetch_tls_load_module_address" and "get_thread_local_address"
+	methods.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* i386-fbsd-tdep.c (i386fbsd_get_thread_local_address): New.
+	(i386fbsd_init_abi): Install gdbarch
+	"fetch_tls_load_module_address" and "get_thread_local_address"
+	methods.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* amd64-fbsd-tdep.c (amd64fbsd_get_thread_local_address): New.
+	(amd64fbsd_init_abi): Install gdbarch
+	"fetch_tls_load_module_address" and "get_thread_local_address"
+	methods.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-tdep.c (fbsd_pspace_data_handle): New variable.
+	(struct fbsd_pspace_data): New type.
+	(get_fbsd_pspace_data, fbsd_pspace_data_cleanup)
+	(fbsd_read_integer_by_name, fbsd_fetch_rtld_offsets)
+	(fbsd_get_tls_index, fbsd_get_thread_local_address): New function.
+	(_initialize_fbsd_tdep): Initialize 'fbsd_pspace_data_handle'.
+	* fbsd-tdep.c (fbsd_get_thread_local_address): New prototype.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdbtypes.c (lookup_struct_elt): New function.
+	(lookup_struct_elt_type): Reimplement via lookup_struct_elt.
+	* gdbtypes.h (struct struct_elt): New type.
+	(lookup_struct_elt): New prototype.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdbtypes.c (lookup_struct_elt_type): Update comment and
+	remove disabled code block.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdbarch.sh (get_thread_local_address): New method.
+	* gdbarch.h, gdbarch.c: Regenerate.
+	* target.c (target_translate_tls_address): Use
+	gdbarch_get_thread_local_address if present instead of
+	target::get_thread_local_address.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* target.h (target::get_thread_local_address): Update comment.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* solib-svr4.c (svr4_fetch_objfile_link_map): Look for
+	objfile->separate_debug_objfile_backlink if not NULL.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* amd64-bsd-nat.c (amd64bsd_fetch_inferior_registers): Use
+	tdep->fsbase_regnum instead of constants for fs_base and gs_base.
+	(amd64bsd_store_inferior_registers): Likewise.
+	* amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description):
+	Enable segment base registers.
+	* i386-bsd-nat.c (i386bsd_fetch_inferior_registers): Use
+	PT_GETFSBASE and PT_GETGSBASE.
+	(i386bsd_store_inferior_registers): Use PT_SETFSBASE and
+	PT_SETGSBASE.
+	* i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Enable
+	segment base registers.
+	* i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise.
+
+2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description):
+	Update calls to i386_target_description to add 'segments'
+	parameter.
+	* amd64-tdep.c (amd64_init_abi): Set tdep->fsbase_regnum.  Don't
+	add segment base registers.
+	* arch/i386.c (i386_create_target_description): Add 'segments'
+	parameter to enable segment base registers.
+	* arch/i386.h (i386_create_target_description): Likewise.
+	* features/i386/32bit-segments.xml: New file.
+	* features/i386/32bit-segments.c: Generate.
+	* i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Update
+	call to i386_target_description to add 'segments' parameter.
+	* i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise.
+	* i386-go32-tdep.c (i386_go32_init_abi): Likewise.
+	* i386-linux-tdep.c (i386_linux_read_description): Likewise.
+	* i386-tdep.c (i386_validate_tdesc_p): Add segment base registers
+	if feature is present.
+	(i386_gdbarch_init): Pass I386_NUM_REGS to set_gdbarch_num_regs.
+	Add 'segments' parameter to call to i386_target_description.
+	(i386_target_description): Add 'segments' parameter to enable
+	segment base registers.
+	(_initialize_i386_tdep) [GDB_SELF_TEST]: Add 'segments' parameter
+	to call to i386_target_description.
+	* i386-tdep.h (struct gdbarch_tdep): Add 'fsbase_regnum'.
+	(enum i386_regnum): Add I386_FSBASE_REGNUM and I386_GSBASE_REGNUM.
+	Define I386_NUM_REGS.
+	(i386_target_description): Add 'segments' parameter to enable
+	segment base registers.
+
+2019-03-12  Eli Zaretskii  <eliz@gnu.org>
+
+	PR/24325
+	* source-cache.c: #undef open and close, to avoid unresolved
+	externals during linking.
+
+2019-03-12  Tom Tromey  <tromey@adacore.com>
+
+	* remote.c (magic_null_ptid, not_sent_ptid, any_thread_ptid): Now
+	const.  Add initializers.
+	(_initialize_remote): Don't initialize ptid globals.
+
+2019-03-12  Pedro Alves  <palves@redhat.com>
+
+	* yy-remap.h [TEST_CPNAMES] (YYFPRINTF): Don't define.
+
+2019-03-12  Pedro Alves  <palves@redhat.com>
+
+	* cp-name-parser.y (main): Remove unused 'len' variable.
+
+2019-03-12  Tom Tromey  <tromey@adacore.com>
+
+	* common/ptid.c (null_ptid, minus_one_ptid): Now const.
+	* common/ptid.h (null_ptid, minus_one_ptid): Now const.
+
+2019-03-12  Tom Tromey  <tromey@adacore.com>
+
+	* linux-nat.c (iterate_over_lwps): Update.
+	(stop_callback): Remove parameter.
+	(stop_wait_callback, detach_callback, resume_set_callback)
+	(select_singlestep_lwp_callback, set_ignore_sigint)
+	(status_callback, resumed_callback, resume_clear_callback)
+	(kill_callback, kill_wait_callback, linux_nat_stop_lwp): Remove
+	data parameter.
+	(linux_nat_target::detach, linux_nat_target::resume)
+	(linux_stop_and_wait_all_lwps, select_event_lwp)
+	(linux_nat_filter_event, linux_nat_wait_1)
+	(linux_nat_target::kill, linux_nat_target::stop)
+	(linux_nat_target::stop): Update.
+	(linux_nat_resume_callback): Change type.
+	(resume_stopped_resumed_lwps, count_events_callback)
+	(select_event_lwp_callback): Likewise.
+	(linux_stop_lwp, linux_nat_stop_lwp): Update.
+	* arm-linux-nat.c (struct update_registers_data): Remove.
+	(update_registers_callback): Change type.
+	(arm_linux_insert_hw_breakpoint1): Update.
+	* nat/x86-linux-dregs.c (update_debug_registers_callback): Remove
+	parameter.
+	(x86_linux_dr_set_addr): Update.
+	(x86_linux_dr_set_control): Update.
+	* nat/linux-nat.h (iterate_over_lwps_ftype): Remove parameter.
+	(iterate_over_lwps): Use gdb::function_view.
+	* nat/aarch64-linux-hw-point.c (struct
+	aarch64_dr_update_callback_param): Remove.
+	(debug_reg_change_callback): Change type.
+	(aarch64_notify_debug_reg_change): Update.
+	* s390-linux-nat.c (s390_refresh_per_info): Update.
+
+2019-03-11  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (dwarf2_find_containing_comp_unit): Remove
+	redundant assignment to "this_cu".
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type): Remove unnecessary cases from switch.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_set): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_struct): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_complex): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_float): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_bool): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_range): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_char): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_enum): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_int): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_func): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_array): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (rank_one_type_parm_ptr): New function extracted
+	from...
+	(rank_one_type): ... this.
+
+2019-02-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* inferior.c (initialize_inferiors): Ensure 'help set/show print
+	inferior-events' shows the example events.
+
+2019-03-08  Eli Zaretskii  <eliz@gnu.org>
+
+	Support styling on native MS-Windows console
+
+	PR/24315
+	* utils.c (can_emit_style_escape) [_WIN32]: Don't disable styling
+	on MS-Windows if $TERM is not defined.
+
+	* cli/cli-style.c: Set cli_styling to 1 in the MinGW build.
+
+	* posix-hdep.c (gdb_console_fputs):
+	* mingw-hdep.c (rgb_to_16colors, gdb_console_fputs): New
+	functions.
+	* ui-file.h (gdb_console_fputs): Add prototype.
+
+	* ui-file.c (stdio_file::puts): Call gdb_console_fputs, and fall
+	back to fputs only if the former returns zero.
+
+2019-03-07  Tom Tromey  <tom@tromey.com>
+
+	* symmisc.c (print_symbol_bcache_statistics): Update.
+	(print_objfile_statistics): Update.
+	* symfile.c (allocate_symtab): Update.
+	* stabsread.c: Don't include bcache.h.
+	* psymtab.h (struct psymbol_bcache): Don't declare.
+	(class psymtab_storage) <psymbol_cache>: Now a bcache.
+	(psymbol_bcache_init, psymbol_bcache_free)
+	(psymbol_bcache_get_bcache): Don't declare.
+	* psymtab.c (struct psymbol_bcache): Remove.
+	(psymtab_storage::psymtab_storage): Update.
+	(psymtab_storage::~psymtab_storage): Update.
+	(psymbol_bcache_init, psymbol_bcache_free)
+	(psymbol_bcache_get_bcache, psymbol_bcache_full): Remove.
+	(add_psymbol_to_bcache): Update.
+	(allocate_psymtab): Update.
+	* objfiles.h (struct objfile_per_bfd_storage) <filename_cache,
+	macro_cache>: No longer pointers.
+	* objfiles.c (get_objfile_bfd_data): Don't call bcache_xmalloc.
+	(free_objfile_per_bfd_storage): Don't call bcache_xfree.
+	* macrotab.c (macro_bcache): Update.
+	* macroexp.c: Don't include bcache.h.
+	* gdbtypes.c (check_types_worklist): Update.
+	(types_deeply_equal): Remove TRY/CATCH.  Update.
+	* elfread.c (elf_symtab_read): Update.
+	* dwarf2read.c: Don't include bcache.h.
+	* buildsym.c (buildsym_compunit::get_macro_table): Update.
+	* bcache.h (bcache, bcache_full, bcache_xffree, bcache_xmalloc)
+	(print_bcache_statistics, bcache_memory_used): Don't declare.
+	(struct bcache): Move from bcache.c.  Add constructor, destructor,
+	methods.  Rename all data members.
+	* bcache.c (struct bcache): Move to bcache.h.
+	(bcache::expand_hash_table): Rename from expand_hash_table.
+	(bcache): Remove.
+	(bcache::insert): Rename from bcache_full.
+	(bcache::compare): Rename from bcache_compare.
+	(bcache_xmalloc): Remove.
+	(bcache::~bcache): Rename from bcache_xfree.
+	(bcache::print_statistics): Rename from print_bcache_statistics.
+	(bcache::memory_used): Rename from bcache_memory_used.
+
+2019-03-07  Pedro Alves  <palves@redhat.com>
+
+	* infrun.c (normal_stop): Also check for
+	TARGET_WAITKIND_NO_RESUMED before referring to inferior_thread().
+
+2019-03-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-lang.c (value_from_host_double): Moved to...
+	* value.c (value_from_host_double): ...here.
+	* value.h (value_from_host_double): Declare.
+	* guile/scm-math.c (vlscm_convert_typed_number): Use
+	value_from_host_double.
+	(vlscm_convert_number): Likewise.
+	* guile/scm-value.c (gdbscm_value_to_real): Likewise.
+	* python/py-value.c (convert_value_from_python): Likewise.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* gcore.c (write_gcore_file): Use SCOPE_EXIT.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* utils.h (free_current_contents): Don't declare.
+	* utils.c (free_current_contents): Remove.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* top.c (quit_force): Update.
+	* main.c (captured_command_loop): Update.
+	* common/new-op.c (operator new): Update.
+	* common/common-exceptions.c (struct catcher)
+	<save_cleanup_chain>: Remove member.
+	(exceptions_state_mc_init): Update.
+	(exception_try_scope_entry): Return nullptr.
+	(exception_try_scope_exit, exception_rethrow)
+	(throw_exception_sjlj, throw_exception_cxx): Update.
+	* common/cleanups.h (make_cleanup, make_cleanup_dtor)
+	(all_cleanups, do_cleanups, discard_cleanups)
+	(discard_final_cleanups, save_cleanups, save_final_cleanups)
+	(restore_cleanups, restore_final_cleanups): Don't declare.
+	(do_final_cleanups): Remove parameter.
+	* common/cleanups.c (cleanup_chain, make_cleanup)
+	(make_cleanup_dtor, all_cleanups, do_cleanups)
+	(discard_my_cleanups, discard_cleanups)
+	(discard_final_cleanups, save_my_cleanups, save_cleanups)
+	(save_final_cleanups, restore_my_cleanups, restore_cleanups)
+	(null_cleanup): Remove.
+	(do_final_cleanups): Remove parameter.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* remote.c (remote_target::remote_parse_stop_reply): Use
+	unique_xmalloc_ptr.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* stabsread.c (struct stabs_field_info): Rename from field_info.
+	<list, fnlist>: Add initializers.
+	<obstack>: New member.
+	(read_member_functions, read_struct_fields, read_baseclasses):
+	Allocate on obstack.  Don't use cleanups.
+	(read_one_struct_field, read_member_functions, read_struct_fields)
+	(read_baseclasses, read_tilde_fields, attach_fn_fields_to_type)
+	(attach_fields_to_type, read_cpp_abbrev, read_member_functions)
+	(read_struct_type): Update.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* nat/linux-namespaces.c (linux_mntns_access_fs): Use SCOPE_EXIT.
+	* common/filestuff.h (make_cleanup_close): Don't declare.
+	* common/filestuff.c (do_close_cleanup, make_cleanup_close):
+	Remove.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* solib-aix.c: Use make_scope_exit.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* solib-svr4.c (svr4_parse_libraries, svr4_current_sos_direct):
+	Use make_scope_exit.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* solib-svr4.c (disable_probes_interface): Remove parameter.
+	(svr4_handle_solib_event): Use make_scope_exit.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* remote.c (struct stop_reply_deleter): Remove.
+	(stop_reply_up): Update.
+	(struct stop_reply): Derive from notif_event.  Don't typedef.
+	<regcache>: Now a std::vector.
+	(stop_reply_xfree): Remove.
+	(stop_reply::~stop_reply): Rename from stop_reply_dtr.
+	(remote_notif_stop_alloc_reply): Return a unique_ptr.  Use new.
+	(remote_target::discard_pending_stop_replies): Use delete.
+	(remote_target::remote_parse_stop_reply): Update.
+	(remote_target::process_stop_reply): Update.
+	* remote-notif.h (struct notif_event): Add virtual destructor.
+	Remove "dtr" member.
+	(struct notif_client) <alloc_event>: Return a unique_ptr.
+	(notif_event_xfree): Don't declare.
+	(notif_event_up): New typedef.
+	* remote-notif.c (remote_notif_ack, remote_notif_parse): Update.
+	(notif_event_xfree, do_notif_event_xfree): Remove.
+	(remote_notif_state_xfree): Update.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* infrun.c (displaced_step_clear_cleanup): Now a
+	forward_scope_exit type.
+	(displaced_step_prepare_throw): Update.
+	(displaced_step_fixup): Update.
+
+2019-03-06  Tom Tromey  <tom@tromey.com>
+
+	* inferior.h (class inferior): Update comment.
+	* gdbthread.h (class thread_info): Update comment.
+
+2019-03-06  Joel Brobecker  <brobecker@adacore.com>
+	    Tom Tromey  <tom@tromey.com>
+
+	* stabsread.h (struct stab_section_list): Remove.
+	(coffstab_build_psymtabs): Update.
+	* dbxread.c (symbuf_sections): Now a std::vector.
+	(sect_idx): New global.
+	(fill_symbuf): Update.
+	(coffstab_build_psymtabs): Change type of stabsects parameter.
+	Update.
+	* coffread.c (struct coff_symfile_info) <stabsects>: Now a
+	std::vector.
+	(linetab, linetab_offset, linetab_size, stringtab): Move earlier.
+	(coff_locate_sections): Update.
+	(coff_symfile_read): Remove cleanups.  Update.
+	(init_stringtab): Add storage parameter.
+	(free_stringtab, free_stringtab_cleanup): Remove.
+	(init_lineno): Add storage parameter.
+	(free_linetab, free_linetab_cleanup): Remove.
+
+2019-03-06  Pedro Alves  <palves@redhat.com>
+
+	* linux-fork.c (fork_info::clobber_regs): Delete.
+	(fork_load_infrun_state): Remove reference to 'clobber_regs'.
+	(fork_save_infrun_state): Remove 'clobber_regs' parameter.  Update
+	comment.  Adjust.
+	(scoped_switch_fork_info::scoped_switch_fork_info)
+	(checkpoint_command, linux_fork_context): Adjust
+	fork_save_infrun_state calls.
+
+2019-03-06  Pedro Alves  <palves@redhat.com>
+
+	* linux-fork.c (inf_has_multiple_thread_cb): Delete.
+	(inf_has_multiple_threads): Return 'bool' and rewrite using
+	inferior_info::threads().
+
+2019-03-06  Pedro Alves  <palves@redhat.com>
+
+	* linux-fork.c: Include <list>.
+	(fork_list): Now a std::list instance.
+	(fork_info): Add ctor, dtor, and in-class initialize all fields.
+	(forks_exist_p, find_last_fork): Adjust.
+	(new_fork): Delete.
+	(one_fork_p): New.
+	(add_fork): Adjust.
+	(free_fork): Delete, folded into fork_info::~fork_info().
+	(delete_fork, find_fork_ptid, find_fork_id, find_fork_pid):
+	Adjust.
+	(init_fork_list): Delete.
+	(linux_fork_killall, linux_fork_mourn_inferior)
+	(linux_fork_detach, info_checkpoints_command): Adjust.
+	(_initialize_linux_fork): No longer call init_fork_list.
+
+2019-03-06  Pedro Alves  <palves@redhat.com>
+
+	* linux-fork.c (new_fork): New, split out of ...
+	(add_fork): ... this.  Return void.  Move "first fork" special
+	case from here, to ...
+	(checkpoint_command): ... here.
+	* linux-linux.h (add_fork): Return void.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (direct_abs_decl): Handle TYPE*SIZE type names.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Chris January  <chris.january@arm.com>
+	    David Lecomber  <david.lecomber@arm.com>
+
+	* f-exp.y: New token, UNOP_INTRINSIC.
+	(exp): New pattern using UNOP_INTRINSIC token.
+	(f77_keywords): Add 'abs' keyword.
+	* f-lang.c: Add 'target-float.h' and 'math.h' includes.
+	(value_from_host_double): New function.
+	(evaluate_subexp_f): Support UNOP_ABS.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-lang.c (build_fortran_types): Use TYPE_CODE_CHAR for character
+	types.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (convert_to_kind_type): Handle integer (kind=8).
+	* f-lang.c (build_fortran_types): Setup builtin_integer_s8.
+	* f-lang.h (struct builtin_f_type): Add builtin_integer_s8 field.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (convert_to_kind_type): Handle more type kinds.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Chris January  <chris.january@arm.com>
+
+	* expprint.c (dump_subexp_body_standard): Support UNOP_KIND.
+	* f-exp.y: Define 'KIND' token.
+	(exp): New pattern for KIND expressions.
+	(ptype): Handle types with a kind extension.
+	(direct_abs_decl): Extend to spot kind extensions.
+	(f77_keywords): Add 'kind' to the list.
+	(push_kind_type): New function.
+	(convert_to_kind_type): New function.
+	* f-lang.c (evaluate_subexp_f): Support UNOP_KIND.
+	* parse.c (operator_length_standard): Likewise.
+	* parser-defs.h (enum type_pieces): Add tp_kind.
+	* std-operator.def: Add UNOP_KIND.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (f_parse): Set yydebug.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-lang.c (evaluate_subexp_f): New function.
+	(exp_descriptor_f): New global.
+	(f_language_defn): Use exp_descriptor_f instead of
+	exp_descriptor_standard.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (struct token): Add comments.
+	(dot_ops): Remove uppercase versions and the end marker.
+	(f77_keywords): Likewise.
+	(yylex): Use ARRAY_SIZE to iterate over dot_ops, assert all
+	entries in the dot_ops array are case insensitive, and use
+	strncasecmp to compare strings.  Also some whitespace cleanup in
+	this area.  Similar for the f77_keywords array, except entries in
+	this list might be case sensitive.
+
+2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (struct f77_boolean_val): Add comments.
+	(boolean_values): Remove uppercase versions, and end marker.
+	(yylex): Use ARRAY_SIZE for iterating over boolean_values array,
+	and use strncasecmp to achieve case insensitivity.  Additionally,
+	perform whitespace cleanup around this code.
+
+2019-03-06  Tom Tromey  <tromey@adacore.com>
+
+	* remote-sim.c (gdbsim_target_open): Use result of
+	gdb_argv::release.
+
+2019-03-06  Richard Bunt  <richard.bunt@arm.com>
+	Dirk Schubert  <dirk.schubert@arm.com>
+	Chris January  <chris.january@arm.com>
+
+	* eval.c (evaluate_subexp_standard): Call Fortran argument
+	wrapping logic.
+	* f-lang.c (struct value): A value which can be passed into a
+	Fortran function call.
+	(fortran_argument_convert): Wrap Fortran arguments in a pointer
+	where appropriate.
+	(struct type): Value ready for a Fortran function call.
+	(fortran_preserve_arg_pointer): Undo check_typedef, the pointer
+	is needed.
+	* f-lang.h (fortran_argument_convert): Declaration.
+	(fortran_preserve_arg_pointer): Declaration.
+	* infcall.c (value_arg_coerce): Call Fortran argument logic.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* python/py-prettyprint.c (print_string_repr): Remove #if.
+	* python/py-utils.c (unicode_to_encoded_string): Remove #if.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* target.c (the_dummy_target): Move later.  Change type to
+	"dummy_target".
+	(initialize_targets): Don't initialize the_dummy_target.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* gdb_bfd.c (gdb_bfd_fdopenr): Remove.
+	* gdb_bfd.h (gdb_bfd_fdopenr): Don't declare.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat_target::attach)
+	(windows_nat_target::detach): Don't call gdb_flush.
+	* valprint.c (generic_val_print, val_print, val_print_string):
+	Don't call gdb_flush.
+	* utils.c (defaulted_query): Don't call gdb_flush.
+	* typeprint.c (print_type_scalar): Don't call gdb_flush.
+	* target.c (target_announce_detach): Don't call gdb_flush.
+	* sparc64-tdep.c (adi_print_versions): Don't call gdb_flush.
+	* remote.c (extended_remote_target::attach): Don't call
+	gdb_flush.
+	* procfs.c (procfs_target::detach): Don't call gdb_flush.
+	* printcmd.c (do_examine): Don't call gdb_flush.
+	(info_display_command): Don't call gdb_flush.
+	* p-valprint.c (pascal_val_print): Don't call gdb_flush.
+	* nto-procfs.c (nto_procfs_target::attach): Don't call gdb_flush.
+	* memattr.c (info_mem_command): Don't call gdb_flush.
+	* mdebugread.c (mdebug_build_psymtabs): Don't call gdb_flush.
+	* m2-valprint.c (m2_val_print): Don't call gdb_flush.
+	* infrun.c (follow_exec, handle_command): Don't call gdb_flush.
+	* inf-ptrace.c (inf_ptrace_target::attach): Don't call gdb_flush.
+	* hppa-tdep.c (unwind_command): Don't call gdb_flush.
+	* gnu-nat.c (gnu_nat_target::attach): Don't call gdb_flush.
+	(gnu_nat_target::detach): Don't call gdb_flush.
+	* f-valprint.c (f_val_print): Don't call gdb_flush.
+	* darwin-nat.c (darwin_nat_target::attach): Don't call gdb_flush.
+	* cli/cli-script.c (read_command_lines): Don't call gdb_flush.
+	* cli/cli-cmds.c (shell_escape, print_disassembly): Don't call
+	gdb_flush.
+	* c-valprint.c (c_val_print): Don't call gdb_flush.
+	* ada-valprint.c (ada_print_scalar): Don't call gdb_flush.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* varobj.c (update_dynamic_varobj_children): Update.
+	(install_default_visualizer): Use reset, not release.
+	* value.c (set_internalvar): Update.
+	* dwarf2loc.c (value_of_dwarf_reg_entry): Update.
+	* common/gdb_ref_ptr.h (class ref_ptr) <release>: Add
+	ATTRIBUTE_UNUSED_RESULT.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* remote.c (class scoped_remote_fd) <release>: Add
+	ATTRIBUTE_UNUSED_RESULT.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* macroexp.c (struct macro_buffer) <release>: Add
+	ATTRIBUTE_UNUSED_RESULT.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* nat/linux-btrace.c (linux_enable_bts, linux_enable_pt): Update.
+	* common/scoped_mmap.h (class scoped_mmap) <release>: Add
+	ATTRIBUTE_UNUSED_RESULT.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* common/scoped_fd.h (class scoped_fd) <release>: Add
+	ATTRIBUTE_UNUSED_RESULT.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* parser-defs.h (struct parser_state) <release>: Add
+	ATTRIBUTE_UNUSED_RESULT.
+
+2019-03-05  Tom Tromey  <tromey@adacore.com>
+
+	* utils.h (class gdb_argv) <release>: Add
+	ATTRIBUTE_UNUSED_RESULT.
+	* common/common-defs.h (ATTRIBUTE_UNUSED_RESULT): Define.
+
+2019-03-02  Eli Zaretskii  <eliz@gnu.org>
+
+	* xml-syscall.c (xml_list_syscalls_by_group): Drop 'struct' from
+	for-loop range, to avoid compiler warnings.
+
+	* tui/tui.c (tui_enable) [__MINGW32__]: Don't declare 'cap', to
+	avoid compiler warnings about unused variables.
+
+	* NEWS: Mention end of support for native debugging on MS-Windows
+	before XP.
+
+	PR gdb/24292
+	* common/netstuff.c:
+	* gdbserver/gdbreplay.c
+	* gdbserver/remote-utils.c:
+	* ser-tcp.c:
+	* unittests/parse-connection-spec-selftests.c [USE_WIN32API]:
+	Include ws2tcpip.h instead of wsiapi.h and winsock2.h.  Redefine
+	_WIN32_WINNT to 0x0501 if defined to a smaller value, as
+	'getaddrinfo' and 'freeaddrinfo' were not available before
+	Windows XP, and mingw.org's MinGW headers by default define
+	_WIN32_WINNT to 0x500.
+
+2019-03-01  Gary Benson <gbenson@redhat.com>
+
+	* coffread.c (coff_start_symtab): Remove unnecessary xstrdup.
+
+2019-02-28  Brian Vandenberg  <phantall@gmail.com>
+	    Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	PR gdb/8527
+	* procfs.c (proc_wait_for_stop): Wrap write of PCWSTOP in
+	set_sigint_trap, clear_sigint_trap.
+
+2019-02-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* target.c (target_detach): Clear the regcache and the
+	frame cache.
+
+2019-02-27  Pedro Alves  <palves@redhat.com>
+
+	* utils.c (set_screen_size): When we cap the height/width sizes,
+	tweak the corresponding command variable to show "unlimited":
+
+2019-02-27  Saagar Jha  <saagar@saagarjha.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* utils.c (set_screen_size): Reduce "infinite" rows and columns
+	before calling rl_set_screen_size.
+
+2019-02-27  Tom Tromey  <tromey@adacore.com>
+
+	* configure.ac (HAVE_LIBPYTHON2_4, HAVE_LIBPYTHON2_5): Never
+	define.
+	* python/py-value.c: Remove Python 2.4 workaround.
+	* python/py-utils.c (gdb_pymodule_addobject): Remove Python 2.4
+	workaround.
+	* python/py-type.c (convert_field, gdbpy_initialize_types): Remove
+	Python 2.4 workaround.
+	* python/python-internal.h: Remove Python 2.4 comment.
+	(Py_ssize_t): Don't define.
+	(PyVarObject_HEAD_INIT, Py_TYPE): Don't define.
+	(gdb_Py_DECREF): Remove Python 2.4 workaround.
+	(gdb_PyObject_GetAttrString, PyObject_GetAttrString): Remove.
+	(gdb_PyObject_HasAttrString, PyObject_HasAttrString): Remove.
+	* python/python.c (do_start_initialization): Remove Python 2.4
+	workaround.
+	* python/py-prettyprint.c (class dummy_python_frame): Remove.
+	(print_children): Remove Python 2.4 workaround.
+	* python/py-inferior.c (buffer_procs): Remove Python 2.4
+	workaround.
+	(CHARBUFFERPROC_NAME): Remove.
+	* python/py-breakpoint.c (gdbpy_initialize_breakpoints): Remove
+	Python 2.4 workaround.
+
+2019-02-27  Kevin Buettner  <kevinb@redhat.com>
+
+	* NEWS: Note minimum Python version.
+
+2019-02-27  Kevin Buettner  <kevinb@redhat.com>
+
+	* python/py-inferior.c (infpy_write_memory): Remove non-IS_PY3K
+	code from these functions.  Remove corresponding ifdefs.  Use
+	Py_buffer_up instead of explicit calls to PyBuffer_Release.
+	Remove gotos and target of gotos.
+	(infpy_search_memory): Likewise.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* hppa-tdep.c (hppa_dummy_id): Delete.
+	(hppa_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* h8300-tdep.c (h8300_unwind_pc): Delete.
+	(h8300_unwind_sp): Delete.
+	(h8300_dummy_id): Delete.
+	(h8300_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ft32-tdep.c (ft32_dummy_id): Delete.
+	(ft32_unwind_pc): Delete.
+	(ft32_unwind_sp): Delete.
+	(ft32_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* frv-tdep.c (frv_dummy_id): Delete.
+	(frv_unwind_pc): Delete.
+	(frv_unwind_sp): Delete.
+	(frv_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_dummy_id): Delete.
+	(riscv_unwind_pc): Delete.
+	(riscv_unwind_sp): Delete.
+	(riscv_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* csky-tdep.c (csky_dummy_id): Delete.
+	(csky_unwind_pc): Delete.
+	(csky_unwind_sp): Delete.
+	(csky_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cris-tdep.c (cris_dummy_id): Delete.
+	(cris_unwind_pc): Delete.
+	(cris_unwind_sp): Delete.
+	(cris_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* bfin-tdep.c (bfin_dummy_id): Delete.
+	(bfin_unwind_pc): Delete.
+	(bfin_gdbarch_init): Don't register deleted functions with gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arm-tdep.c (arm_dummy_id): Delete.
+	(arm_unwind_pc): Delete.
+	(arm_unwind_sp): Delete.
+	(arm_gdbarch_init): Don't register deleted functions with gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arc-tdep.c (arc_dummy_id): Delete.
+	(arc_unwind_pc): Delete.
+	(arc_unwind_sp): Delete.
+	(arc_gdbarch_init): Don't register deleted functions with gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* alpha-tdep.c (alpha_dummy_id): Delete.
+	(alpha_unwind_pc): Delete.
+	(alpha_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* aarch64-tdep.c (aarch64_dummy_id): Delete.
+	(aarch64_unwind_pc): Delete.
+	(aarch64_unwind_sp): Delete.
+	(aarch64_gdbarch_init): Don't register deleted functions with
+	gdbarch.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbtypes.c (type_align): Don't consider static members when
+	computing structure alignment.
+
+2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arc-tdep.c (arc_type_align): Provide alignment for basic types,
+	return 0 for other types.
+	* arch-utils.c (default_type_align): Always return 0.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh (type_align): Extend comment.
+	* gdbtypes.c (type_align): Add additional comments, always call
+	gdbarch_type_align before applying the default rules.
+	* i386-tdep.c (i386_type_align): Return 0 as the default rule,
+	generic code will then apply a suitable default.
+	* nios2-tdep.c (nios2_type_align): Provide alignment for basic
+	types, return 0 for other types.
+
+2019-02-27  Joel Brobecker  <brobecker@adacore.com>
+
+	* NEWS: Create a new section for the next release branch.
+	Rename the section of the current branch, now that it has
+	been cut.
+
+2019-02-27  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 8.3 branch created (143420fb0d5ae54323ba9953f0818c194635228d):
+	* version.in: Bump version to 8.3.50.DATE-git.
+
+2019-02-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* aix-thread.c (ptid_cmp): Remove unused variable.
+	(get_signaled_thread): Likewise.
+	(store_regs_user_thread): Likewise.
+	(store_regs_kernel_thread): Likewise.
+	(fetch_regs_kernel_thread): Remove shadowed variable.
+
+2019-02-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* features/riscv/32bit-cpu.xml: Add register numbers.
+	* features/riscv/32bit-fpu.c: Regenerate.
+	* features/riscv/32bit-fpu.xml: Add register numbers.
+	* features/riscv/64bit-cpu.xml: Add register numbers.
+	* features/riscv/64bit-fpu.c: Regenerate.
+	* features/riscv/64bit-fpu.xml: Add register numbers.
+
+2019-02-26  Kevin Buettner  <kevinb@redhat.com>
+
+	* NEWS: Mention two argument form of gdb.Value constructor.
+	* python/py-value.c (convert_buffer_and_type_to_value): New
+	function.
+	(valpy_new): Parse arguments via gdb_PyArg_ParseTupleAndKeywords.
+	Add support for handling an optional second argument.  Call
+	convert_buffer_and_type_to_value as appropriate.
+	* python/python-internal.h (Py_buffer_deleter): New struct.
+	(Py_buffer_up): New typedef.
+
+2019-02-25  John Baldwin  <jhb@FreeBSD.org>
+
+	* dwarf2read.c (dwarf2_get_dwz_file): Reset dwz_bfd to nullptr
+	instead of releasing ownership.
+
+2019-02-25  Jordan Rupprecht  <rupprecht@google.com>
+
+	* dwarf2read.c (open_and_init_dwp_file): Call
+	elf_numsections instead of bfd_count_sections to initialize
+	dwp_file->num_sections.
+
+2019-02-25  Tom Tromey  <tromey@adacore.com>
+
+	* solib-darwin.c (darwin_get_dyld_bfd): Don't release dyld_bfd.
+
+2019-02-23  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gcore.in: Add '--readnever' option when invoking GDB.
+
+2019-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* MAINTAINERS: Update my email address.
+
+2019-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* build-id.c (build_id_to_debug_bfd_1): New function.
+	(build_id_to_debug_bfd): Look for separate debug file in
+	sysroot.
+
+2019-02-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbarch.sh: Update the copyright year range that is placed into
+	generated files.
+
+2019-02-22  Keith Seitz  <keiths@redhat.com>
+
+	PR symtab/23853
+	* linespec.c (create_sals_line_offset): Search for the default
+	symtab's filename instead of its fullname.
+
+2019-02-21  Alan Hayward  <alan.hayward@arm.com>
+
+	* NEWS: Update style defaults.
+
+2019-02-21  Alan Hayward  <alan.hayward@arm.com>
+
+	* main.c (captured_main_1): Disable styling in batch mode.
+
+2019-02-20  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (symtab_symbol_info): Fix typos.
+
+2019-02-20  Tom Tromey  <tromey@adacore.com>
+
+	* findcmd.c (_initialize_mem_search): Use upper case for
+	metasyntactic variables.
+
+2019-02-20  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c (aarch64_add_reggroups): New function.
+	(aarch64_gdbarch_init): Call aarch64_add_reggroups.
+
+2019-02-19  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* top.h (source_file_name): Change to std::string.
+	* top.c (source_file_name): Likewise.
+	(command_line_input): Adjust.
+	* cli/cli-script.c (script_from_file): Adjust.
+
+2019-02-19  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c
+	(ravenscar_thread_target::update_thread_list): Don't call
+	ada_build_task_list.
+	* ada-lang.h (ada_build_task_list): Don't declare.
+	* ada-tasks.c (struct ada_tasks_inferior_data)
+	<task_list_valid_p>: Now bool.
+	(read_known_tasks, ada_task_list_changed)
+	(ada_tasks_invalidate_inferior_data): Update.
+	(read_known_tasks_array): Return bool.
+	(read_known_tasks_list): Likewise.
+	(read_known_tasks): Return void.
+	(ada_build_task_list): Now static.
+
+2019-02-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbtypes.c (type_align): Allow alignment of TYPE_CODE_METHODPTR
+	and TYPE_CODE_MEMBERPTR to be overridden by the gdbarch.
+
+2019-02-18  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* ada-task.c (_initialize_tasks): Use 'with_cleanup' register
+	variant for ada_tasks_pspace_data_handle and
+	ada_tasks_inferior_data_handle.
+	(ada_tasks_pspace_data_cleanup): New function.
+	(ada_tasks_inferior_data_cleanup): New function.
+
+2019-02-17  Tom Tromey  <tom@tromey.com>
+
+	* macrotab.h (macro_source_fullname): Return a std::string.
+	* macrotab.c (macro_include, check_for_redefinition)
+	(macro_undef, macro_lookup_definition, foreach_macro)
+	(foreach_macro_in_scope): Update.
+	(macro_source_fullname): Return a std::string.
+	* macrocmd.c (show_pp_source_pos): Update.
+
+2019-02-17  Tom Tromey  <tom@tromey.com>
+
+	* macrocmd.c (show_pp_source_pos): Style the file names.
+
+2019-02-17  Tom Tromey  <tom@tromey.com>
+
+	PR tui/24197:
+	* tui/tui-source.c (tui_set_source_content_nil): Rewrite.
+
+2019-02-17  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (user_select_syms): Use filtered printing.
+	* utils.c (wrap_style): New global.
+	(desired_style): Remove.
+	(emit_style_escape): Add stream parameter.
+	(set_output_style, reset_terminal_style, prompt_for_continue):
+	Update.
+	(flush_wrap_buffer): Only flush gdb_stdout.
+	(wrap_here): Set wrap_style.
+	(fputs_maybe_filtered): Clear the wrap buffer on exception.  Don't
+	treat escape sequences as a character.  Change when wrap buffer is
+	flushed.
+	(fputs_styled): Do not set the output style when the default is
+	requested.
+	* ui-style.h (struct ui_file_style) <is_default>: New method.
+	* source.c (print_source_lines_base): Emit escape sequences in one
+	piece.
+
+2019-02-17  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbtypes.c (type_align): Handle TYPE_CODE_RANGE the same as
+	integers and enumeration types.
+
+2019-02-17  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-lang.c (standard_lookup): Use ada_lookup_encoded_symbol
+	instead of lookup_symbol_in_language
+	(do_exact_match): New function.
+	(ada_get_symbol_name_matcher): Return do_exact_match when
+	doing a verbatim match.
+
+2019-02-15  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target::resume)
+	(ravenscar_thread_target::wait): Special case wildcard requests.
+
+2019-02-15  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (base_ptid): Remove.
+	(struct ravenscar_thread_target) <close>: New method.
+	<m_base_ptid>: New member.
+	<update_inferior_ptid, active_task, task_is_currently_active,
+	runtime_initialized>: Declare methods.
+	<ravenscar_thread_target>: Add constructor.
+	(ravenscar_thread_target::task_is_currently_active)
+	(ravenscar_thread_target::update_inferior_ptid)
+	(ravenscar_runtime_initialized): Rename.  Now methods.
+	(ravenscar_thread_target::resume, ravenscar_thread_target::wait)
+	(ravenscar_thread_target::update_thread_list): Update.
+	(ravenscar_thread_target::active_task): Now method.
+	(ravenscar_thread_target::store_registers)
+	(ravenscar_thread_target::prepare_to_store)
+	(ravenscar_thread_target::prepare_to_store)
+	(ravenscar_thread_target::mourn_inferior): Update.
+	(ravenscar_inferior_created): Use "new" to create target.
+	(ravenscar_thread_target::get_ada_task_ptid): Update.
+	(_initialize_ravenscar): Don't initialize base_ptid.
+	(ravenscar_ops): Remove global.
+
+2019-02-15  Tom Tromey  <tromey@adacore.com>
+
+	* target.h (push_target): Declare new overload.
+	* target.c (push_target): New overload, taking an rvalue reference.
+	* remote.c (remote_target::open_1): Use push_target overload.
+	* corelow.c (core_target_open): Use push_target overload.
+
+2019-02-15  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (is_ravenscar_task)
+	(ravenscar_task_is_currently_active): Return bool.
+	(ravenscar_update_inferior_ptid, get_running_thread_msymbol)
+	(_initialize_ravenscar): Remove "(void)".
+	(has_ravenscar_runtime, ravenscar_runtime_initialized): Likewise.
+	Return bool.
+
+2019-02-15  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_runtime_initializer)
+	(has_ravenscar_runtime, get_running_thread_id)
+	(ravenscar_thread_target::resume): Fix indentation.
+
+2019-02-15  Tom Tromey  <tromey@adacore.com>
+
+	* sparc-ravenscar-thread.c (struct sparc_ravenscar_ops): Derive
+	from ravenscar_arch_ops.
+	(sparc_ravenscar_ops::fetch_registers)
+	(sparc_ravenscar_ops::store_registers): Now methods.
+	(sparc_ravenscar_prepare_to_store): Remove.
+	(sparc_ravenscar_ops): Redefine.
+	* ravenscar-thread.h (struct ravenscar_arch_ops): Add virtual
+	methods and destructor.  Remove members.
+	* ravenscar-thread.c (ravenscar_thread_target::fetch_registers)
+	(ravenscar_thread_target::store_registers)
+	(ravenscar_thread_target::prepare_to_store): Update.
+	* ppc-ravenscar-thread.c (ppc_ravenscar_generic_prepare_to_store):
+	Remove.
+	(struct ppc_ravenscar_powerpc_ops): Derive from
+	ravenscar_arch_ops.
+	(ppc_ravenscar_powerpc_ops::fetch_registers)
+	(ppc_ravenscar_powerpc_ops::store_registers): Now methods.
+	(ppc_ravenscar_powerpc_ops): Redefine.
+	(struct ppc_ravenscar_e500_ops): Derive from ravenscar_arch_ops.
+	(ppc_ravenscar_e500_ops::fetch_registers)
+	(ppc_ravenscar_e500_ops::store_registers): Now methods.
+	(ppc_ravenscar_e500_ops): Redefine.
+	* aarch64-ravenscar-thread.c
+	(aarch64_ravenscar_generic_prepare_to_store): Remove.
+	(struct aarch64_ravenscar_ops): Derive from ravenscar_arch_ops.
+	(aarch64_ravenscar_fetch_registers)
+	(aarch64_ravenscar_store_registers): Now methods.
+	(aarch64_ravenscar_ops): Redefine.
+
+2019-02-15  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target::stopped_by_sw_breakpoint)
+	(ravenscar_thread_target::stopped_by_hw_breakpoint)
+	(ravenscar_thread_target::stopped_by_watchpoint)
+	(ravenscar_thread_target::stopped_data_address)
+	(ravenscar_thread_target::core_of_thread): Use scoped_restore.
+
+2019-02-15  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c: Fix some typos.
+
+2019-02-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	    Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_exception_sal): Change addr_string to a
+	std::string.
+	(create_ada_exception_catchpoint): Update.
+
+2019-02-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	    Tom Tromey  <tromey@adacore.com>
+
+	* breakpoint.c (~bp_location): Rename from bp_location_dtor.
+	(bp_location_ops): Remove.
+	(base_breakpoint_allocate_location): Update.
+	(free_bp_location): Update.
+	* ada-lang.c (class ada_catchpoint_location)
+	<ada_catchpoint_location>: Remove ops parameter.
+	(ada_catchpoint_location_dtor): Remove.
+	(ada_catchpoint_location_ops): Remove.
+	(allocate_location_exception): Update.
+	* breakpoint.h (struct bp_location_ops): Remove.
+	(class bp_location) <bp_location>: Remove bp_location_ops
+	parameter.
+	<~bp_location>: Add destructor.
+	<ops>: Remove.
+
+2019-02-14  Thomas Schwinge  <thomas@codesourcery.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* remote.c (remote_target::remote_parse_stop_reply): Avoid using
+	'PATH_MAX'.
+
+2019-02-14  David Michael  <fedora.dm0@gmail.com>
+	    Samuel Thibault  <samuel.thibault@gnu.org>
+	    Thomas Schwinge  <thomas@codesourcery.com>
+
+	* gnu-nat.c (S_proc_getmsgport_reply, S_proc_task2proc_reply)
+	(S_proc_pid2proc_reply): Adjust to Hurd "proc" interface changes.
+
+2019-02-14  Thomas Schwinge  <thomas@codesourcery.com>
+
+	* gnu-nat.c (gnu_write_inferior, parse_int_arg, _parse_bool_arg)
+	(check_empty): Use "const char *".
+
+	* gnu-nat.c (gnu_nat_target::detach): Instead of
+	'detach_inferior (pid)' call
+	'detach_inferior (find_inferior_pid (pid))'.
+
+	* configure.nat [gdb_host == i386gnu] (NATDEPFILES): Add
+	'nat/fork-inferior.o'.
+	* gnu-nat.c: #include "nat/fork-inferior.h".
+
+	* gnu-nat.c (gnu_nat_target::detach): Instead of
+	'inf_child_maybe_unpush_target (ops)' call 'maybe_unpush_target'.
+	* gnu-nat.h: #include "inf-child.h".
+	* i386-gnu-nat.c (gnu_fetch_registers): Rename/move to
+	'i386_gnu_nat_target::fetch_registers'.
+	(gnu_store_registers): Rename/move to
+	'i386_gnu_nat_target::store_registers'.
+
+	* config/i386/nm-i386gnu.h: Don't "#include" any files.
+	* gnu-nat.h (mach_thread_info): New function.
+	* gnu-nat.c (thread_takeover_sc_cmd): Use it.
+
+	* config/i386/nm-i386gnu.h (gnu_target_pid_to_str): Remove.
+
+2019-02-14  Frederic Konrad  <konrad@adacore.com>
+
+	* riscv-rdep.c (riscv_type_alignment): Handle TYPE_CODE_RANGE.
+
+2019-02-14  Joel Brobecker  <brobecker@adacore.com>
+
+	* windows-nat.c (windows_add_thread): Add new parameter
+	"main_thread_p" with default value set to false.  Update
+	function documentation as well as all callers.
+	(windows_delete_thread): Likewise.
+	(fake_create_process): Update call to windows_add_thread.
+	(get_windows_debug_event) <CREATE_THREAD_DEBUG_EVENT>
+	<CREATE_PROCESS_DEBUG_EVENT>: Likewise.
+	<EXIT_THREAD_DEBUG_EVENT, EXIT_PROCESS_DEBUG_EVENT>: Update
+	call to windows_delete_thread.
+
+2019-02-13  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* MAINTAINERS: Add Andrew Burgess as global maintainer.
+
+2019-02-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* symfile.c (find_separate_debug_file): Use canonical path of
+	sysroot with child_path instead of gdb_sysroot if it is valid.
+
+2019-02-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* symfile.c (find_separate_debug_file): Use child_path to
+	determine if an object file is under a sysroot.
+
+2019-02-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
+	unittests/child-path-selftests.c.
+	* common/pathstuff.c (child_path): New function.
+	* common/pathstuff.h (child_path): New prototype.
+	* unittests/child-path-selftests.c: New file.
+
+2019-02-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* symfile.c (find_separate_debug_file): Look for separate debug
+	files in debug directories under the sysroot.
+
+2019-02-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* symtab.h (struct minimal_symbol data_p): New const method.
+	(struct minimal_symbol text_p): Likewise.
+	* symtab.c (output_source_filename): Use file name style
+	to print file name.
+	(print_symbol_info): Likewise.
+	(print_msymbol_info): Use address style to print addresses.
+	Use function name style to print executable text symbols.
+	(expand_symtab_containing_pc): Use data_p.
+	(find_pc_sect_compunit_symtab): Likewise.
+
+2019-02-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* breakpoint.c (describe_other_breakpoints): Use address style
+	to print addresses.
+	(say_where): Likewise.
+
+2019-02-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* ada-typeprint.c (print_func_type): Print function name
+	style to print function name.
+	* c-typeprint.c (c_print_type_1): Likewise.
+
+2019-02-11  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-linux-tdep.c (aarch64_linux_get_syscall_number): Check
+	for execve.
+
+2019-02-10  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* c-exp.y (direct_abs_decl): Use emplace_back to record the
+	type_stack.
+
+2019-02-10  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-varobj.c (ada_value_is_changeable_p): Add handling of
+	TYPE_CODE_REF types.
+
+2019-02-08  Jim Wilson  <jimw@sifive.com>
+
+	* riscv-linux-tdep.c (riscv_linux_fregmap): New.
+	(riscv_linux_fregset): New.
+	(riscv_linux_iterate_over_regset_sections): Call cb for .reg2 section.
+
+2019-02-07  Tom Tromey  <tom@tromey.com>
+
+	* thread.c (thread_cancel_execution_command): Update.
+	* thread-fsm.h (struct thread_fsm): Add constructor, destructor,
+	methods.
+	(struct thread_fsm_ops): Remove.
+	(thread_fsm_ctor, thread_fsm_delete, thread_fsm_clean_up)
+	(thread_fsm_should_stop, thread_fsm_return_value)
+	(thread_fsm_set_finished, thread_fsm_finished_p)
+	(thread_fsm_async_reply_reason, thread_fsm_should_notify_stop):
+	Don't declare.
+	* mi/mi-interp.c (mi_on_normal_stop_1): Update.
+	* infrun.c (clear_proceed_status_thread)
+	(clean_up_just_stopped_threads_fsms, fetch_inferior_event)
+	(print_stop_event): Update.
+	* infcmd.c (struct step_command_fsm): Inherit from thread_fsm.
+	Add constructor.
+	(step_command_fsm_ops): Remove.
+	(new_step_command_fsm): Remove.
+	(step_1): Update.
+	(step_command_fsm::should_stop): Rename from
+	step_command_fsm_should_stop.
+	(step_command_fsm::clean_up): Rename from
+	step_command_fsm_clean_up.
+	(step_command_fsm::do_async_reply_reason): Rename from
+	step_command_fsm_async_reply_reason.
+	(struct until_next_fsm): Inherit from thread_fsm.  Add
+	constructor.
+	(until_next_fsm_ops): Remove.
+	(new_until_next_fsm): Remove.
+	(until_next_fsm::should_stop): Rename from
+	until_next_fsm_should_stop.
+	(until_next_fsm::clean_up): Rename from until_next_fsm_clean_up.
+	(until_next_fsm::do_async_reply_reason): Rename from
+	until_next_fsm_async_reply_reason.
+	(struct finish_command_fsm): Inherit from thread_fsm.  Add
+	constructor.  Change type of breakpoint.
+	(finish_command_fsm_ops): Remove.
+	(new_finish_command_fsm): Remove.
+	(finish_command_fsm::should_stop): Rename from
+	finish_command_fsm_should_stop.
+	(finish_command_fsm::clean_up): Rename from
+	finish_command_fsm_clean_up.
+	(finish_command_fsm::return_value): Rename from
+	finish_command_fsm_return_value.
+	(finish_command_fsm::do_async_reply_reason): Rename from
+	finish_command_fsm_async_reply_reason.
+	(finish_command): Update.
+	* infcall.c (struct call_thread_fsm): Inherit from thread_fsm.
+	Add constructor.
+	(call_thread_fsm_ops): Remove.
+	(call_thread_fsm::call_thread_fsm): Rename from
+	new_call_thread_fsm.
+	(call_thread_fsm::should_stop): Rename from
+	call_thread_fsm_should_stop.
+	(call_thread_fsm::should_notify_stop): Rename from
+	call_thread_fsm_should_notify_stop.
+	(run_inferior_call, call_function_by_hand_dummy): Update.
+	* cli/cli-interp.c (should_print_stop_to_console): Update.
+	* breakpoint.c (struct until_break_fsm): Inherit from thread_fsm.
+	Add constructor.  Change type of location_breakpoint,
+	caller_breakpoint.
+	(until_break_fsm_ops): Remove.
+	(new_until_break_fsm): Remove.
+	(until_break_fsm::should_stop): Rename from
+	until_break_fsm_should_stop.
+	(until_break_fsm::clean_up): Rename from
+	until_break_fsm_clean_up.
+	(until_break_fsm::do_async_reply_reason): Rename from
+	until_break_fsm_async_reply_reason.
+	(until_break_command): Update.
+	* thread-fsm.c: Remove.
+	* Makefile.in (COMMON_SFILES): Remove thread-fsm.c.
+
+2019-02-07  Tom Tromey  <tom@tromey.com>
+
+	* yy-remap.h: Add include guard.
+	* xtensa-tdep.h: Add include guard.
+	* xcoffread.h: Rename include guard.
+	* varobj-iter.h: Add include guard.
+	* tui/tui.h: Rename include guard.
+	* tui/tui-winsource.h: Rename include guard.
+	* tui/tui-wingeneral.h: Rename include guard.
+	* tui/tui-windata.h: Rename include guard.
+	* tui/tui-win.h: Rename include guard.
+	* tui/tui-stack.h: Rename include guard.
+	* tui/tui-source.h: Rename include guard.
+	* tui/tui-regs.h: Rename include guard.
+	* tui/tui-out.h: Rename include guard.
+	* tui/tui-layout.h: Rename include guard.
+	* tui/tui-io.h: Rename include guard.
+	* tui/tui-hooks.h: Rename include guard.
+	* tui/tui-file.h: Rename include guard.
+	* tui/tui-disasm.h: Rename include guard.
+	* tui/tui-data.h: Rename include guard.
+	* tui/tui-command.h: Rename include guard.
+	* tic6x-tdep.h: Add include guard.
+	* target/waitstatus.h: Rename include guard.
+	* target/wait.h: Rename include guard.
+	* target/target.h: Rename include guard.
+	* target/resume.h: Rename include guard.
+	* target-float.h: Rename include guard.
+	* stabsread.h: Add include guard.
+	* rs6000-tdep.h: Add include guard.
+	* riscv-fbsd-tdep.h: Add include guard.
+	* regformats/regdef.h: Rename include guard.
+	* record.h: Rename include guard.
+	* python/python.h: Rename include guard.
+	* python/python-internal.h: Rename include guard.
+	* python/py-stopevent.h: Rename include guard.
+	* python/py-ref.h: Rename include guard.
+	* python/py-record.h: Rename include guard.
+	* python/py-record-full.h: Rename include guard.
+	* python/py-record-btrace.h: Rename include guard.
+	* python/py-instruction.h: Rename include guard.
+	* python/py-events.h: Rename include guard.
+	* python/py-event.h: Rename include guard.
+	* procfs.h: Add include guard.
+	* proc-utils.h: Add include guard.
+	* p-lang.h: Add include guard.
+	* or1k-tdep.h: Rename include guard.
+	* observable.h: Rename include guard.
+	* nto-tdep.h: Rename include guard.
+	* nat/x86-linux.h: Rename include guard.
+	* nat/x86-linux-dregs.h: Rename include guard.
+	* nat/x86-gcc-cpuid.h: Add include guard.
+	* nat/x86-dregs.h: Rename include guard.
+	* nat/x86-cpuid.h: Rename include guard.
+	* nat/ppc-linux.h: Rename include guard.
+	* nat/mips-linux-watch.h: Rename include guard.
+	* nat/linux-waitpid.h: Rename include guard.
+	* nat/linux-ptrace.h: Rename include guard.
+	* nat/linux-procfs.h: Rename include guard.
+	* nat/linux-osdata.h: Rename include guard.
+	* nat/linux-nat.h: Rename include guard.
+	* nat/linux-namespaces.h: Rename include guard.
+	* nat/linux-btrace.h: Rename include guard.
+	* nat/glibc_thread_db.h: Rename include guard.
+	* nat/gdb_thread_db.h: Rename include guard.
+	* nat/gdb_ptrace.h: Rename include guard.
+	* nat/fork-inferior.h: Rename include guard.
+	* nat/amd64-linux-siginfo.h: Rename include guard.
+	* nat/aarch64-sve-linux-sigcontext.h: Rename include guard.
+	* nat/aarch64-sve-linux-ptrace.h: Rename include guard.
+	* nat/aarch64-linux.h: Rename include guard.
+	* nat/aarch64-linux-hw-point.h: Rename include guard.
+	* mn10300-tdep.h: Add include guard.
+	* mips-linux-tdep.h: Add include guard.
+	* mi/mi-parse.h: Rename include guard.
+	* mi/mi-out.h: Rename include guard.
+	* mi/mi-main.h: Rename include guard.
+	* mi/mi-interp.h: Rename include guard.
+	* mi/mi-getopt.h: Rename include guard.
+	* mi/mi-console.h: Rename include guard.
+	* mi/mi-common.h: Rename include guard.
+	* mi/mi-cmds.h: Rename include guard.
+	* mi/mi-cmd-break.h: Rename include guard.
+	* m2-lang.h: Add include guard.
+	* location.h: Rename include guard.
+	* linux-record.h: Rename include guard.
+	* linux-nat.h: Add include guard.
+	* linux-fork.h: Add include guard.
+	* i386-darwin-tdep.h: Rename include guard.
+	* hppa-linux-offsets.h: Add include guard.
+	* guile/guile.h: Rename include guard.
+	* guile/guile-internal.h: Rename include guard.
+	* gnu-nat.h: Rename include guard.
+	* gdb-stabs.h: Rename include guard.
+	* frv-tdep.h: Add include guard.
+	* f-lang.h: Add include guard.
+	* event-loop.h: Add include guard.
+	* darwin-nat.h: Rename include guard.
+	* cp-abi.h: Rename include guard.
+	* config/sparc/nm-sol2.h: Rename include guard.
+	* config/nm-nto.h: Rename include guard.
+	* config/nm-linux.h: Add include guard.
+	* config/i386/nm-i386gnu.h: Rename include guard.
+	* config/djgpp/nl_types.h: Rename include guard.
+	* config/djgpp/langinfo.h: Rename include guard.
+	* compile/gcc-cp-plugin.h: Add include guard.
+	* compile/gcc-c-plugin.h: Add include guard.
+	* compile/compile.h: Rename include guard.
+	* compile/compile-object-run.h: Rename include guard.
+	* compile/compile-object-load.h: Rename include guard.
+	* compile/compile-internal.h: Rename include guard.
+	* compile/compile-cplus.h: Rename include guard.
+	* compile/compile-c.h: Rename include guard.
+	* common/xml-utils.h: Rename include guard.
+	* common/x86-xstate.h: Rename include guard.
+	* common/version.h: Rename include guard.
+	* common/vec.h: Rename include guard.
+	* common/tdesc.h: Rename include guard.
+	* common/selftest.h: Rename include guard.
+	* common/scoped_restore.h: Rename include guard.
+	* common/scoped_mmap.h: Rename include guard.
+	* common/scoped_fd.h: Rename include guard.
+	* common/safe-iterator.h: Rename include guard.
+	* common/run-time-clock.h: Rename include guard.
+	* common/refcounted-object.h: Rename include guard.
+	* common/queue.h: Rename include guard.
+	* common/ptid.h: Rename include guard.
+	* common/print-utils.h: Rename include guard.
+	* common/preprocessor.h: Rename include guard.
+	* common/pathstuff.h: Rename include guard.
+	* common/observable.h: Rename include guard.
+	* common/netstuff.h: Rename include guard.
+	* common/job-control.h: Rename include guard.
+	* common/host-defs.h: Rename include guard.
+	* common/gdb_wait.h: Rename include guard.
+	* common/gdb_vecs.h: Rename include guard.
+	* common/gdb_unlinker.h: Rename include guard.
+	* common/gdb_unique_ptr.h: Rename include guard.
+	* common/gdb_tilde_expand.h: Rename include guard.
+	* common/gdb_sys_time.h: Rename include guard.
+	* common/gdb_string_view.h: Rename include guard.
+	* common/gdb_splay_tree.h: Rename include guard.
+	* common/gdb_setjmp.h: Rename include guard.
+	* common/gdb_ref_ptr.h: Rename include guard.
+	* common/gdb_optional.h: Rename include guard.
+	* common/gdb_locale.h: Rename include guard.
+	* common/gdb_assert.h: Rename include guard.
+	* common/filtered-iterator.h: Rename include guard.
+	* common/filestuff.h: Rename include guard.
+	* common/fileio.h: Rename include guard.
+	* common/environ.h: Rename include guard.
+	* common/common-utils.h: Rename include guard.
+	* common/common-types.h: Rename include guard.
+	* common/common-regcache.h: Rename include guard.
+	* common/common-inferior.h: Rename include guard.
+	* common/common-gdbthread.h: Rename include guard.
+	* common/common-exceptions.h: Rename include guard.
+	* common/common-defs.h: Rename include guard.
+	* common/common-debug.h: Rename include guard.
+	* common/cleanups.h: Rename include guard.
+	* common/buffer.h: Rename include guard.
+	* common/btrace-common.h: Rename include guard.
+	* common/break-common.h: Rename include guard.
+	* cli/cli-utils.h: Rename include guard.
+	* cli/cli-style.h: Rename include guard.
+	* cli/cli-setshow.h: Rename include guard.
+	* cli/cli-script.h: Rename include guard.
+	* cli/cli-interp.h: Rename include guard.
+	* cli/cli-decode.h: Rename include guard.
+	* cli/cli-cmds.h: Rename include guard.
+	* charset-list.h: Add include guard.
+	* buildsym-legacy.h: Rename include guard.
+	* bfin-tdep.h: Add include guard.
+	* ax.h: Rename include guard.
+	* arm-linux-tdep.h: Add include guard.
+	* arm-fbsd-tdep.h: Add include guard.
+	* arch/xtensa.h: Rename include guard.
+	* arch/tic6x.h: Add include guard.
+	* arch/i386.h: Add include guard.
+	* arch/arm.h: Rename include guard.
+	* arch/arm-linux.h: Rename include guard.
+	* arch/arm-get-next-pcs.h: Rename include guard.
+	* arch/amd64.h: Add include guard.
+	* arch/aarch64-insn.h: Rename include guard.
+	* arch-utils.h: Rename include guard.
+	* annotate.h: Add include guard.
+	* amd64-darwin-tdep.h: Rename include guard.
+	* aarch64-linux-tdep.h: Add include guard.
+	* aarch64-fbsd-tdep.h: Add include guard.
+	* aarch32-linux-nat.h: Add include guard.
+
+2019-02-06  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* macrotab.c (macro_define_internal): New function that
+	factorizes macro_define_object_internal and macro_define_function
+	code.
+	(macro_define_object_internal): Use macro_define_internal.
+	(macro_define_function): Likewise.
+
+2019-02-06  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* macrocmd.c (extract_identifier): Return
+	a gdb::unique_xmalloc_ptr<char> instead of a char *, and update
+	callers.
+
+2019-02-06  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.c (fbsd_fetch_cmdline): Join arguments with spaces.
+
+2019-02-05  Tom Tromey  <tom@tromey.com>
+
+	* target.c (target_stack::unpush): Move assertion earlier.
+
+2019-01-30  Tom Tromey  <tom@tromey.com>
+
+	PR python/23615:
+	* python/python.c (execute_gdb_command): Use gdbpy_allow_threads.
+	(gdbpy_parse_and_eval): Likewise.
+	* python/python-internal.h (gdbpy_allow_threads): New class.
+
+2019-01-28  John Baldwin  <jhb@FreeBSD.org>
+
+	* aarch64-fbsd-tdep.c (aarch64_fbsd_gregmap)
+	(aarch64_fbsd_fpregmap): Move earlier.
+	(AARCH64_MCONTEXT_REG_SIZE, AARCH64_MCONTEXT_FPREG_SIZE): Delete.
+	(aarch64_fbsd_sigframe_init): Use trad_frame_set_reg_regmap
+	instead of individual calls to trad_frame_set_reg_addr.
+	* arm-fbsd-tdep.c (arm_fbsd_gregmap, arm_fbsd_vfpregmap): Move
+	earlier.
+	(ARM_MCONTEXT_REG_SIZE, ARM_MCONTEXT_VFP_REG_SIZE): Delete.
+	(arm_fbsd_sigframe_init): Use trad_frame_set_reg_regmap
+	instead of individual calls to trad_frame_set_reg_addr.
+
+2019-01-28  Alan Hayward  <alan.hayward@arm.com>
+
+	* CONTRIBUTE: Replace contribution list with wiki link.
+
+2019-01-25  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in (GDB_CFLAGS): Don't add -I for common.
+
+2019-01-25  Tom Tromey  <tom@tromey.com>
+
+	* xtensa-linux-nat.c: Fix common/ includes.
+	* xml-support.h: Fix common/ includes.
+	* xml-support.c: Fix common/ includes.
+	* x86-linux-nat.c: Fix common/ includes.
+	* windows-nat.c: Fix common/ includes.
+	* varobj.h: Fix common/ includes.
+	* varobj.c: Fix common/ includes.
+	* value.c: Fix common/ includes.
+	* valops.c: Fix common/ includes.
+	* utils.c: Fix common/ includes.
+	* unittests/xml-utils-selftests.c: Fix common/ includes.
+	* unittests/utils-selftests.c: Fix common/ includes.
+	* unittests/unpack-selftests.c: Fix common/ includes.
+	* unittests/tracepoint-selftests.c: Fix common/ includes.
+	* unittests/style-selftests.c: Fix common/ includes.
+	* unittests/string_view-selftests.c: Fix common/ includes.
+	* unittests/scoped_restore-selftests.c: Fix common/ includes.
+	* unittests/scoped_mmap-selftests.c: Fix common/ includes.
+	* unittests/scoped_fd-selftests.c: Fix common/ includes.
+	* unittests/rsp-low-selftests.c: Fix common/ includes.
+	* unittests/parse-connection-spec-selftests.c: Fix common/
+	includes.
+	* unittests/optional-selftests.c: Fix common/ includes.
+	* unittests/offset-type-selftests.c: Fix common/ includes.
+	* unittests/observable-selftests.c: Fix common/ includes.
+	* unittests/mkdir-recursive-selftests.c: Fix common/ includes.
+	* unittests/memrange-selftests.c: Fix common/ includes.
+	* unittests/memory-map-selftests.c: Fix common/ includes.
+	* unittests/lookup_name_info-selftests.c: Fix common/ includes.
+	* unittests/function-view-selftests.c: Fix common/ includes.
+	* unittests/environ-selftests.c: Fix common/ includes.
+	* unittests/copy_bitwise-selftests.c: Fix common/ includes.
+	* unittests/common-utils-selftests.c: Fix common/ includes.
+	* unittests/cli-utils-selftests.c: Fix common/ includes.
+	* unittests/array-view-selftests.c: Fix common/ includes.
+	* ui-file.c: Fix common/ includes.
+	* tui/tui-io.c: Fix common/ includes.
+	* tracepoint.h: Fix common/ includes.
+	* tracepoint.c: Fix common/ includes.
+	* tracefile-tfile.c: Fix common/ includes.
+	* top.h: Fix common/ includes.
+	* top.c: Fix common/ includes.
+	* thread.c: Fix common/ includes.
+	* target/waitstatus.h: Fix common/ includes.
+	* target/waitstatus.c: Fix common/ includes.
+	* target.h: Fix common/ includes.
+	* target.c: Fix common/ includes.
+	* target-memory.c: Fix common/ includes.
+	* target-descriptions.c: Fix common/ includes.
+	* symtab.h: Fix common/ includes.
+	* symfile.c: Fix common/ includes.
+	* stap-probe.c: Fix common/ includes.
+	* spu-linux-nat.c: Fix common/ includes.
+	* sparc-nat.c: Fix common/ includes.
+	* source.c: Fix common/ includes.
+	* solib.c: Fix common/ includes.
+	* solib-target.c: Fix common/ includes.
+	* ser-unix.c: Fix common/ includes.
+	* ser-tcp.c: Fix common/ includes.
+	* ser-pipe.c: Fix common/ includes.
+	* ser-base.c: Fix common/ includes.
+	* selftest-arch.c: Fix common/ includes.
+	* s12z-tdep.c: Fix common/ includes.
+	* rust-exp.y: Fix common/ includes.
+	* rs6000-aix-tdep.c: Fix common/ includes.
+	* riscv-tdep.c: Fix common/ includes.
+	* remote.c: Fix common/ includes.
+	* remote-notif.h: Fix common/ includes.
+	* remote-fileio.h: Fix common/ includes.
+	* remote-fileio.c: Fix common/ includes.
+	* regcache.h: Fix common/ includes.
+	* regcache.c: Fix common/ includes.
+	* record-btrace.c: Fix common/ includes.
+	* python/python.c: Fix common/ includes.
+	* python/py-type.c: Fix common/ includes.
+	* python/py-inferior.c: Fix common/ includes.
+	* progspace.h: Fix common/ includes.
+	* producer.c: Fix common/ includes.
+	* procfs.c: Fix common/ includes.
+	* proc-api.c: Fix common/ includes.
+	* printcmd.c: Fix common/ includes.
+	* ppc-linux-nat.c: Fix common/ includes.
+	* parser-defs.h: Fix common/ includes.
+	* osdata.c: Fix common/ includes.
+	* obsd-nat.c: Fix common/ includes.
+	* nat/x86-linux.c: Fix common/ includes.
+	* nat/x86-linux-dregs.c: Fix common/ includes.
+	* nat/x86-dregs.h: Fix common/ includes.
+	* nat/x86-dregs.c: Fix common/ includes.
+	* nat/ppc-linux.c: Fix common/ includes.
+	* nat/mips-linux-watch.h: Fix common/ includes.
+	* nat/mips-linux-watch.c: Fix common/ includes.
+	* nat/linux-waitpid.c: Fix common/ includes.
+	* nat/linux-ptrace.h: Fix common/ includes.
+	* nat/linux-ptrace.c: Fix common/ includes.
+	* nat/linux-procfs.c: Fix common/ includes.
+	* nat/linux-personality.c: Fix common/ includes.
+	* nat/linux-osdata.c: Fix common/ includes.
+	* nat/linux-namespaces.c: Fix common/ includes.
+	* nat/linux-btrace.h: Fix common/ includes.
+	* nat/linux-btrace.c: Fix common/ includes.
+	* nat/fork-inferior.c: Fix common/ includes.
+	* nat/amd64-linux-siginfo.c: Fix common/ includes.
+	* nat/aarch64-sve-linux-ptrace.c: Fix common/ includes.
+	* nat/aarch64-linux.c: Fix common/ includes.
+	* nat/aarch64-linux-hw-point.h: Fix common/ includes.
+	* nat/aarch64-linux-hw-point.c: Fix common/ includes.
+	* namespace.h: Fix common/ includes.
+	* mips-linux-tdep.c: Fix common/ includes.
+	* minsyms.c: Fix common/ includes.
+	* mi/mi-parse.h: Fix common/ includes.
+	* mi/mi-main.c: Fix common/ includes.
+	* mi/mi-cmd-env.c: Fix common/ includes.
+	* memrange.h: Fix common/ includes.
+	* memattr.c: Fix common/ includes.
+	* maint.h: Fix common/ includes.
+	* maint.c: Fix common/ includes.
+	* main.c: Fix common/ includes.
+	* machoread.c: Fix common/ includes.
+	* location.c: Fix common/ includes.
+	* linux-thread-db.c: Fix common/ includes.
+	* linux-nat.c: Fix common/ includes.
+	* linux-fork.c: Fix common/ includes.
+	* inline-frame.c: Fix common/ includes.
+	* infrun.c: Fix common/ includes.
+	* inflow.c: Fix common/ includes.
+	* inferior.h: Fix common/ includes.
+	* inferior.c: Fix common/ includes.
+	* infcmd.c: Fix common/ includes.
+	* inf-ptrace.c: Fix common/ includes.
+	* inf-child.c: Fix common/ includes.
+	* ia64-linux-nat.c: Fix common/ includes.
+	* i387-tdep.c: Fix common/ includes.
+	* i386-tdep.c: Fix common/ includes.
+	* i386-linux-tdep.c: Fix common/ includes.
+	* i386-linux-nat.c: Fix common/ includes.
+	* i386-go32-tdep.c: Fix common/ includes.
+	* i386-fbsd-tdep.c: Fix common/ includes.
+	* i386-fbsd-nat.c: Fix common/ includes.
+	* guile/scm-type.c: Fix common/ includes.
+	* guile/guile.c: Fix common/ includes.
+	* go32-nat.c: Fix common/ includes.
+	* gnu-nat.c: Fix common/ includes.
+	* gdbthread.h: Fix common/ includes.
+	* gdbarch-selftests.c: Fix common/ includes.
+	* gdb_usleep.c: Fix common/ includes.
+	* gdb_select.h: Fix common/ includes.
+	* gdb_bfd.c: Fix common/ includes.
+	* gcore.c: Fix common/ includes.
+	* fork-child.c: Fix common/ includes.
+	* findvar.c: Fix common/ includes.
+	* fbsd-nat.c: Fix common/ includes.
+	* event-top.c: Fix common/ includes.
+	* event-loop.c: Fix common/ includes.
+	* dwarf2read.c: Fix common/ includes.
+	* dwarf2loc.c: Fix common/ includes.
+	* dwarf2-frame.c: Fix common/ includes.
+	* dwarf-index-cache.c: Fix common/ includes.
+	* dtrace-probe.c: Fix common/ includes.
+	* disasm-selftests.c: Fix common/ includes.
+	* defs.h: Fix common/ includes.
+	* csky-tdep.c: Fix common/ includes.
+	* cp-valprint.c: Fix common/ includes.
+	* cp-support.h: Fix common/ includes.
+	* cp-support.c: Fix common/ includes.
+	* corelow.c: Fix common/ includes.
+	* completer.h: Fix common/ includes.
+	* completer.c: Fix common/ includes.
+	* compile/compile.c: Fix common/ includes.
+	* compile/compile-loc2c.c: Fix common/ includes.
+	* compile/compile-cplus-types.c: Fix common/ includes.
+	* compile/compile-cplus-symbols.c: Fix common/ includes.
+	* command.h: Fix common/ includes.
+	* cli/cli-dump.c: Fix common/ includes.
+	* cli/cli-cmds.c: Fix common/ includes.
+	* charset.c: Fix common/ includes.
+	* build-id.c: Fix common/ includes.
+	* btrace.h: Fix common/ includes.
+	* btrace.c: Fix common/ includes.
+	* breakpoint.h: Fix common/ includes.
+	* breakpoint.c: Fix common/ includes.
+	* ax.h: 
+	(enum agent_op): Fix common/ includes.
+	* ax-general.c (struct aop_map): Fix common/ includes.
+	* ax-gdb.c: Fix common/ includes.
+	* auxv.c: Fix common/ includes.
+	* auto-load.c: Fix common/ includes.
+	* arm-tdep.c: Fix common/ includes.
+	* arch/riscv.c: Fix common/ includes.
+	* arch/ppc-linux-common.c: Fix common/ includes.
+	* arch/i386.c: Fix common/ includes.
+	* arch/arm.c: Fix common/ includes.
+	* arch/arm-linux.c: Fix common/ includes.
+	* arch/arm-get-next-pcs.c: Fix common/ includes.
+	* arch/amd64.c: Fix common/ includes.
+	* arch/aarch64.c: Fix common/ includes.
+	* arch/aarch64-insn.c: Fix common/ includes.
+	* arch-utils.c: Fix common/ includes.
+	* amd64-windows-tdep.c: Fix common/ includes.
+	* amd64-tdep.c: Fix common/ includes.
+	* amd64-sol2-tdep.c: Fix common/ includes.
+	* amd64-obsd-tdep.c: Fix common/ includes.
+	* amd64-nbsd-tdep.c: Fix common/ includes.
+	* amd64-linux-tdep.c: Fix common/ includes.
+	* amd64-linux-nat.c: Fix common/ includes.
+	* amd64-fbsd-tdep.c: Fix common/ includes.
+	* amd64-fbsd-nat.c: Fix common/ includes.
+	* amd64-dicos-tdep.c: Fix common/ includes.
+	* amd64-darwin-tdep.c: Fix common/ includes.
+	* agent.c: Fix common/ includes.
+	* ada-lang.h: Fix common/ includes.
+	* ada-lang.c: Fix common/ includes.
+	* aarch64-tdep.c: Fix common/ includes.
+
+2019-01-25  Tom Tromey  <tom@tromey.com>
+
+	* common/create-version.sh: Use common/version.h.
+
+2019-01-24  Pedro Alves  <palves@redhat.com>
+
+	* infrun.c (signal_stop, signal_print, signal_program)
+	(signal_catch, signal_pass): Now arrays instead of pointers.
+	(update_signals_program_target, do_target_resume)
+	(signal_catch_update, handle_command, _initialize_infrun): Adjust.
+	* linux-nat.c (linux_nat_target::pass_signals)
+	(linux_nat_target::create_inferior, linux_nat_target::attach):
+	Adjust.
+	* linux-nat.h (linux_nat_target::pass_signals): Adjust.
+	* nto-procfs.c (nto_procfs_target::pass_signals): Adjust.
+	* procfs.c (procfs_target::pass_signals): Adjust.
+	* record-full.c (record_full_target::resume): Adjust.
+	* remote.c (remote_target::pass_signals)
+	(remote_target::program_signals): Adjust.
+	* target-debug.h (target_debug_print_signals): Now takes a
+	gdb::array_view as parameter.  Adjust.
+	* target.h (target_ops) <pass_signals, program_signals>: Replace
+	pointer and length parameters with gdb::array_view.
+	(target_pass_signals, target_program_signals): Likewise.
+	* target-delegates.c: Regenerate.
+
+2019-01-24  Pedro Alves  <palves@redhat.com>
+
+	* common/forward-scope-exit.h
+	(forward_scope_exit::forward_scope_exit): Pass arguments to
+	m_bind_function directly, instead of creating a std::bind and
+	copying that.
+
+2019-01-24  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check
+	for static members.
+	(pass_in_v_vfp_candidate): Likewise.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* regcache.c (class regcache_invalidator): Remove.
+	(regcache::raw_write): Use make_scope_exit.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+
+	* ui-out.h (class ui_out_emit_type): Update comment.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+
+	* infrun.c (fetch_inferior_event): Update comment.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* infrun.c (reinstall_readline_callback_handler_cleanup): Remove
+	parameter.
+	(fetch_inferior_event): Use SCOPE_EXIT.
+
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* infrun.c (disable_thread_events): Delete.
+	(stop_all_threads): Use SCOPE_EXIT.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* symfile.c: Include forward-scope-exit.h.
+	(clear_symtab_users_cleanup): Replace forward declaration with
+	a FORWARD_SCOPE_EXIT.
+	(syms_from_objfile_1): Use the forward_scope_exit and
+	gdb::optional instead of cleanup_function.
+	(reread_symbols): Use the forward_scope_exit instead of
+	cleanup_function.
+	(clear_symtab_users_cleanup): Remove function.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* linux-nat.c: Include scope-exit.h.
+	(cleanup_target_stop): Remove.
+	(linux_nat_target::static_tracepoint_markers_by_strid): Use
+	SCOPE_EXIT.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* infcall.c (cleanup_delete_std_terminate_breakpoint): Remove.
+	(call_function_by_hand_dummy): Use SCOPE_EXIT.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* infrun.c (fetch_inferior_event): Use scope_exit.
+	* utils.h (make_bpstat_clear_actions_cleanup): Don't declare.
+	* top.c (execute_command): Use scope_exit.
+	* breakpoint.c (bpstat_do_actions): Use scope_exit.
+	* utils.c (do_bpstat_clear_actions_cleanup)
+	(make_bpstat_clear_actions_cleanup): Remove.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* infrun.c: Include "common/scope-exit.h"
+	(delete_just_stopped_threads_infrun_breakpoints_cleanup): Remove.
+	(wait_for_inferior): Use SCOPE_EXIT.
+	(fetch_inferior_event): Use scope_exit.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* breakpoint.c (create_breakpoint): Remove cleanup.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Pedro Alves  <palves@redhat.com>
+
+2019-01-23  Pedro Alves  <palves@redhat.com>
+
+	* gdbarch-selftests.c (struct on_exit): Use SCOPE_EXIT.
+
+2019-01-23  Pedro Alves  <palves@redhat.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbthread.h: Include "common/forward-scope-exit.h".
+	(scoped_finish_thread_state): Redefine custom class in terms of
+	forward_scope_exit.
+
+2019-01-23  Pedro Alves  <palves@redhat.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* common/forward-scope-exit.h: New file.
+
+2019-01-23  Pedro Alves  <palves@redhat.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Tom Tromey  <tom@tromey.com>
+
+	* common/scope-exit.h: New file.
+
+2019-01-23  Pedro Alves  <palves@redhat.com>
+
+	* common/preprocessor.h (ESC): Rename to ...
+	(ESC_PARENS): ... this.
+	* common/valid-expr.h (CHECK_VALID_EXPR_1, CHECK_VALID_EXPR_2)
+	(CHECK_VALID_EXPR_3, CHECK_VALID_EXPR_4): Adjust.
+
+2019-01-23  Tom Tromey  <tom@tromey.com>
+
+	* language.h (class scoped_switch_to_sym_language_if_auto):
+	Initialize m_lang in both cases.
+
+2019-01-23  Alan Hayward  <alan.hayward@arm.com>
+
+	* nat/aarch64-linux.c (aarch64_linux_new_thread): Replace XNEW
+	with XCNEW.
+
+2019-01-22  Tom Tromey  <tom@tromey.com>
+
+	* corelow.c: Do not include sys/file.h.
+
+2019-01-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h: Include gdb_curses.h.
+
+2019-01-22  Tom Tromey  <tom@tromey.com>
+
+	* source-cache.h (class source_cache) <get_source_lines,
+	get_plain_source_lines, extract_lines>: Rename "lines" parameter.
+
+2019-01-22  Tom Tromey  <tom@tromey.com>
+
+	* remote-fileio.h (struct remote_target): Declare.
+
+2019-01-22  Tom Tromey  <tom@tromey.com>
+
+	* python/py-arch.c: Do not include py-ref.h.
+	* python/py-bpevent.c: Do not include py-ref.h.
+	* python/py-cmd.c: Do not include py-ref.h.
+	* python/py-continueevent.c: Do not include py-ref.h.
+	* python/py-event.h: Do not include py-ref.h.
+	* python/py-evtregistry.c: Do not include py-ref.h.
+	* python/py-finishbreakpoint.c: Do not include py-ref.h.
+	* python/py-frame.c: Do not include py-ref.h.
+	* python/py-framefilter.c: Do not include py-ref.h.
+	* python/py-function.c: Do not include py-ref.h.
+	* python/py-infevents.c: Do not include py-ref.h.
+	* python/py-linetable.c: Do not include py-ref.h.
+	* python/py-objfile.c: Do not include py-ref.h.
+	* python/py-param.c: Do not include py-ref.h.
+	* python/py-prettyprint.c: Do not include py-ref.h.
+	* python/py-progspace.c: Do not include py-ref.h.
+	* python/py-symbol.c: Do not include py-ref.h.
+	* python/py-symtab.c: Do not include py-ref.h.
+	* python/py-type.c: Do not include py-ref.h.
+	* python/py-unwind.c: Do not include py-ref.h.
+	* python/py-utils.c: Do not include py-ref.h.
+	* python/py-value.c: Do not include py-ref.h.
+	* python/py-varobj.c: Do not include py-ref.h.
+	* python/py-xmethods.c: Do not include py-ref.h.
+	* python/python.c: Do not include py-ref.h.
+	* varobj.c: Do not include py-ref.h.
+
+2019-01-22  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct objfile_per_bfd_storage): Use "struct"
+	keyword for bcache.
+
+2019-01-22  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile-cplus-types.c: Remove a comment by #include.
+
+2019-01-22  Tom Tromey  <tom@tromey.com>
+
+	* compile/gcc-c-plugin.h: Include compile-internal.h.
+
+2019-01-22  Tom Tromey  <tom@tromey.com>
+
+	* stabsread.c (EXTERN): Do not define.
+	(symnum, next_symbol_text_func, processing_gcc_compilation)
+	(within_function, global_sym_chain, global_stabs)
+	(previous_stab_code, this_object_header_files)
+	(n_this_object_header_files)
+	(n_allocated_this_object_header_files): Define.
+	* stabsread.h (EXTERN): Never define.  Use "extern".
+
+2019-01-22  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* event-top.c (handle_line_of_input): use unique_xmalloc_ptr for
+	history_value.
+
+2019-01-21  Tom Tromey  <tom@tromey.com>
+
+	* ui-out.c: Fix includes.
+	* tui/tui-source.c: Fix includes.
+	* target.c: Fix includes.
+	* remote.c: Fix includes.
+	* regcache.c: Fix includes.
+	* python/py-block.c: Fix includes.
+	* printcmd.c: Fix includes.
+	* or1k-tdep.c: Fix includes.
+	* mi/mi-main.c: Fix includes.
+	* m32r-tdep.c: Fix includes.
+	* csky-tdep.c: Fix includes.
+	* compile/compile-cplus-types.c: Fix includes.
+	* cli/cli-interp.c: Fix includes.
+
+2019-01-21  Alan Hayward  <alan.hayward@arm.com>
+
+	* aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check
+	for padding.
+
+2019-01-16  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct minimal_symbol_iterator): Rename.  Move
+	earlier.
+	(struct objfile) <msymbols_range>: Move from top level.
+	<msymbols>: New method.
+	(class objfile_msymbols): Remove.
+	* symtab.c (default_collect_symbol_completion_matches_break_on):
+	Update.
+	* symmisc.c (dump_msymbols): Update.
+	* stabsread.c (scan_file_globals): Update.
+	* objc-lang.c (info_selectors_command, info_classes_command)
+	(find_methods): Update.
+	* minsyms.c (find_solib_trampoline_target): Update.
+	* hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Update.
+	* coffread.c (coff_symfile_read): Update.
+	* ada-lang.c (ada_lookup_simple_minsym)
+	(ada_collect_symbol_completion_matches): Update.
+
+2019-01-16  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (class objfile_msymbols) <iterator>: Change argument
+	type.  Remove no-argument constructor.
+	<iterator::operator++>: Simplify.
+	<begin>: Update.
+	<end>: Use minimal_symbol_count.
+
+2019-01-16  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct objfile) <psymtabs>: New method.
+	(class objfile_psymtabs): Remove.
+	* psymtab.h (class psymtab_storage) <partial_symtab_range>: New
+	typedef.
+	<range>: New method.
+	(require_partial_symbols): Change return type.
+	* psymtab.c (require_partial_symbols)
+	(psym_expand_symtabs_matching): Update.
+	* mdebugread.c (parse_partial_symbols): Update.
+	* dbxread.c (dbx_end_psymtab): Update.
+
+2019-01-15  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (lookup_objfile_from_block)
+	(lookup_symbol_in_objfile_symtabs)
+	(basic_lookup_transparent_type_1, find_pc_sect_compunit_symtab)
+	(find_line_symtab, info_sources_command)
+	(default_collect_symbol_completion_matches_break_on)
+	(make_source_files_completion_list): Update.
+	* symmisc.c (print_objfile_statistics, dump_objfile)
+	(maintenance_print_symbols, maintenance_info_symtabs)
+	(maintenance_check_symtabs, maintenance_info_line_tables):
+	Update.
+	* source.c (select_source_symtab)
+	(forget_cached_source_info_for_objfile): Update.
+	* objfiles.h (class objfile_compunits): Remove.
+	(struct objfile) <compunits_range>: New typedef.
+	(compunits): New method.
+	* objfiles.c (objfile_relocate1): Update.
+	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Update.
+	* maint.c (count_symtabs_and_blocks): Update.
+	* linespec.c (iterate_over_all_matching_symtabs): Update.
+	* cp-support.c (add_symbol_overload_list_qualified): Update.
+	* coffread.c (coff_symtab_read): Update.
+	* ada-lang.c (add_nonlocal_symbols)
+	(ada_collect_symbol_completion_matches)
+	(ada_add_global_exceptions): Update.
+
+2019-01-15  Tom Tromey  <tom@tromey.com>
+
+	* progspace.h (program_space) <objfiles_safe_range>: New
+	typedef.
+	<objfiles_safe>: New method.
+	* objfiles.h (class all_objfiles_safe): Remove.
+	* objfiles.c (free_all_objfiles, objfile_purge_solibs): Update.
+	* jit.c (jit_inferior_exit_hook): Update.
+
+2019-01-17  Tom Tromey  <tom@tromey.com>
+
+	* progspace.h (program_space) <objfiles_range>: New typedef.
+	<objfiles>: New method.
+	<objfiles_head>: Rename from objfiles.
+	(object_files): Update.
+	* guile/scm-progspace.c (gdbscm_progspace_objfiles): Update.
+	* guile/scm-pretty-print.c
+	(ppscm_find_pretty_printer_from_objfiles): Update.
+	* guile/scm-objfile.c (gdbscm_objfiles): Update.
+	* python/py-xmethods.c (gdbpy_get_matching_xmethod_workers):
+	Update.
+	* python/py-progspace.c (pspy_get_objfiles): Update.
+	* python/py-prettyprint.c (find_pretty_printer_from_objfiles):
+	Update.
+	* python/py-objfile.c (objfpy_lookup_objfile_by_name)
+	(objfpy_lookup_objfile_by_build_id): Update.
+	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Update.
+	* windows-tdep.c (windows_iterate_over_objfiles_in_search_order):
+	Update.
+	* symtab.c (iterate_over_symtabs, matching_obj_sections)
+	(expand_symtab_containing_pc, lookup_objfile_from_block)
+	(lookup_static_symbol, basic_lookup_transparent_type)
+	(find_pc_sect_compunit_symtab, find_symbol_at_address)
+	(find_line_symtab, info_sources_command)
+	(default_collect_symbol_completion_matches_break_on)
+	(make_source_files_completion_list, find_main_name): Update.
+	* symmisc.c (print_symbol_bcache_statistics)
+	(print_objfile_statistics, maintenance_print_symbols)
+	(maintenance_print_msymbols, maintenance_print_objfiles)
+	(maintenance_info_symtabs, maintenance_check_symtabs)
+	(maintenance_expand_symtabs, maintenance_info_line_tables):
+	Update.
+	* symfile.c (remove_symbol_file_command, overlay_invalidate_all)
+	(find_pc_overlay, find_pc_mapped_section, list_overlays_command)
+	(map_overlay_command, unmap_overlay_command)
+	(simple_overlay_update, expand_symtabs_matching)
+	(map_symbol_filenames): Update.
+	* symfile-debug.c (set_debug_symfile): Update.
+	* spu-tdep.c (spu_overlay_update, spu_objfile_from_frame):
+	Update.
+	* source.c (select_source_symtab, forget_cached_source_info):
+	Update.
+	* solib.c (solib_read_symbols): Update.
+	* solib-spu.c (append_ocl_sos): Update.
+	* psymtab.c (maintenance_print_psymbols)
+	(maintenance_info_psymtabs, maintenance_check_psymtabs): Update.
+	* probe.c (parse_probes_in_pspace, find_probe_by_pc): Update.
+	* printcmd.c (info_symbol_command): Update.
+	* ppc-linux-tdep.c (ppc_linux_spe_context_inferior_created):
+	Update.
+	* objfiles.h (class all_objfiles): Remove.
+	* objfiles.c (have_partial_symbols, have_full_symbols)
+	(have_minimal_symbols, qsort_cmp, update_section_map)
+	(shared_objfile_contains_address_p)
+	(default_iterate_over_objfiles_in_search_order): Update.
+	* objc-lang.c (info_selectors_command, info_classes_command)
+	(find_methods): Update.
+	* minsyms.c (find_solib_trampoline_target): Update.
+	* maint.c (maintenance_info_sections)
+	(maintenance_translate_address, count_symtabs_and_blocks):
+	Update.
+	* main.c (captured_main_1): Update.
+	* linux-thread-db.c (try_thread_db_load_from_pdir)
+	(has_libpthread): Update.
+	* linespec.c (iterate_over_all_matching_symtabs)
+	(search_minsyms_for_name): Update.
+	* jit.c (jit_find_objf_with_entry_addr): Update.
+	* hppa-tdep.c (find_unwind_entry)
+	(hppa_lookup_stub_minimal_symbol): Update.
+	* gcore.c (gcore_create_callback, objfile_find_memory_regions):
+	Update.
+	* elfread.c (elf_gnu_ifunc_resolve_by_cache)
+	(elf_gnu_ifunc_resolve_by_got): Update.
+	* dwarf2-frame.c (dwarf2_frame_find_fde): Update.
+	* dwarf-index-write.c (save_gdb_index_command): Update.
+	* cp-support.c (add_symbol_overload_list_qualified): Update.
+	* breakpoint.c (create_overlay_event_breakpoint)
+	(create_longjmp_master_breakpoint)
+	(create_std_terminate_master_breakpoint)
+	(create_exception_master_breakpoint): Update.
+	* blockframe.c (find_pc_partial_function): Update.
+	* ada-lang.c (ada_lookup_simple_minsym, add_nonlocal_symbols)
+	(ada_collect_symbol_completion_matches)
+	(ada_add_global_exceptions): Update.
+
+2019-01-17  Tom Tromey  <tom@tromey.com>
+
+	* solib-target.c (lm_info_target_p): Remove typedef.  Don't
+	declare VEC.
+	(solib_target_parse_libraries): Change return type.
+	(library_list_start_segment, library_list_start_section)
+	(library_list_end_library, library_list_start_library); Update.
+	(solib_target_free_library_list): Remove.
+	(solib_target_parse_libraries): Remove cleanup.  Change return
+	type.
+	(solib_target_current_sos): Update.
+
+2019-01-17  Tom Tromey  <tromey@bapiya>
+
+	* valprint.c: Replace "the the" with "the".
+	* symtab.c: Replace "the the" with "the".
+	* solib.c: Replace "the the" with "the".
+	* solib-dsbt.c: Replace "the the" with "the".
+	* linespec.c: Replace "the the" with "the".
+	* dwarf2loc.h: Replace "the the" with "the".
+	* amd64-windows-tdep.c: Replace "the the" with "the".
+	* aarch64-tdep.c: Replace "the the" with "the".
+
+2019-01-16  Keith Seitz  <keiths@redhat.com>
+
+	PR gdb/23773
+	* dwarf2read.c (dwarf2_cu) <ancestor>: New field.
+	<builder>: Rename to ..
+	<m_builder>: ... this and make private.
+	(dwarf2_cu::get_builder): New method.  Change all users of
+	`builder' to use this method.
+	(dwarf2_start_symtab): Move to ...
+	(dwarf2_cu::start_symtab): ... here.  Update all callers
+	(setup_type_unit_groups): Move to ...
+	(dwarf2_cu::setup_type_unit_groups): ... here.  Update all
+	callers.
+	(dwarf2_cu::reset_builder): New method.
+	(process_full_compunit, process_full_type_unit): Use
+	dwarf2_cu::reset_builder.
+	(follow_die_offset): Record the ancestor CU if it is different
+	from the followed DIE's CU.
+	(follow_die_sig_1): Likewise.
+
+2019-01-15  Tom Tromey  <tom@tromey.com>
+
+	* remote.c (class remote_state) <buf>: Now a char_vector.
+	<buf_size>: Remove.
+	(remote_target::getpkt): Change type of buf.  Remove sizeof_buf
+	parameter.
+	(remote_target::getpkt_or_notif_sane_1)
+	(remote_target::getpkt_sane)
+	(remote_target::getpkt_or_notif_sane): Likewise.
+	(class remote_target) <putpkt>: New overload.
+	(remote_target::read_frame): Change type of "buf_p".  Remove
+	sizeof_p parameter.
+	(packet_ok): New overload.
+	(packet_check_result): New overload.
+	Update all uses.
+
+2019-01-14  Tom Tromey  <tom@tromey.com>
+
+	* remote-notif.c (handle_notification, remote_notif_ack)
+	(remote_notif_parse): Make "buf" const.
+	* remote-notif.h (struct notif_client) <parse, ack>: Make "buf"
+	const.
+	(remote_notif_parse, remote_notif_ack, handle_notification):
+	Likewise.
+	* remote.c (remote_notif_stop_parse): Make "buf" const.
+	(remote_target::remote_parse_stop_reply): Make "buf" const.
+	(remote_notif_stop_ack): Make "buf" const.
+
+2019-01-14  Tom Tromey  <tom@tromey.com>
+
+	* remote.c (remote_console_output): Make parameter const.
+
+2019-01-14  Tom Tromey  <tom@tromey.com>
+
+	* target-debug.h (target_debug_print_signals): Constify.
+	* nto-procfs.c (nto_procfs_target::pass_signals): Update.
+	* procfs.c (procfs_target::pass_signals): Update.
+	* linux-nat.c (linux_nat_target::pass_signals): Update.
+	* linux-nat.h (class linux_nat_target) <pass_signals>: Update.
+	* target-delegates.c: Rebuild.
+	* remote.c (remote_target::program_signals): Update.
+	(remote_target::pass_signals): Update.
+	* target.c (target_pass_signals): Constify argument.
+	(target_program_signals): Likewise.
+	* target.h (struct target_ops) <pass_signals, program_signals>:
+	Constify argument.
+	(target_pass_signals, target_program_signals): Constify argument.
+
+2019-01-14  Tom Tromey  <tom@tromey.com>
+
+	PR tui/28819:
+	* tui/tui-io.c (gdb_wgetch): Print \r when needed.
+
+2019-01-14  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* ppc-tdep.h (struct gdbarch_tdep) <ppc_v0_alias_regnum>: New
+	field.
+	* rs6000-tdep.c: Include reggroups.h.
+	(IS_V_ALIAS_PSEUDOREG): Define.
+	(rs6000_register_name): Return names for the "vX" aliases.
+	(rs6000_pseudo_register_type): Return type for the "vX" aliases.
+	(rs6000_pseudo_register_reggroup_p): Restore.  Handle "vX"
+	aliases.  Call default_register_reggroup_p for all other
+	pseudo-registers.
+	(v_alias_pseudo_register_read, v_alias_pseudo_register_write):
+	New functions.
+	(rs6000_pseudo_register_read, rs6000_pseudo_register_write):
+	Handle "vX" aliases.
+	(v_alias_pseudo_register_collect): New function.
+	(rs6000_ax_pseudo_register_collect): Handle "vX" aliases.
+	(rs6000_gdbarch_init): Initialize "vX" aliases as
+	pseudo-registers.  Restore registration of
+	rs6000_pseudo_register_reggroup_p with
+	set_tdesc_pseudo_register_reggroup_p.
+
+2019-01-13  Max Filippov  <jcmvbkbc@gmail.com>
+
+	* xtensa-linux-tdep.c (xtensa_linux_init_abi): Update
+	tdep->num_pseudo_regs. Add calls to set_gdbarch_num_regs and
+	set_gdbarch_num_pseudo_regs.
+
+2019-01-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-style.h (class cli_style_option): <add_setshow_commands>
+	Remove arg prefixname, add do_set and do_show.
+	Add member functions set_list and show_list.
+	* cli/cli-style.c (class cli_style_option): Update accordingly.
+	(style_set_list): Move to file scope.
+	(style_show_list): Likewise.
+	(set_style): Call help_list.
+	(show_style): Call cmd_show_list.
+	(_initialize_cli_style): New macro STYLE_ADD_SETSHOW_COMMANDS.
+	Update to use the new macro.
+
+2019-10-12  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-lang.c (_initialize_ada_language): Expand the help text
+	for the "catch exception" command.
+
+2019-01-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* symtab.c (matching_obj_sections): Initialize obj,
+	declare it closer to its usage.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* thread-iter.h (inf_threads_iterator): Use next_iterator.
+	(basic_inf_threads_range): Remove.
+	(inf_threads_range, inf_non_exited_threads_range)
+	(safe_inf_threads_range): Use next_adapter.
+
+2019-01-10  Keith Seitz  <keiths@redhat.com>
+
+	PR gdb/23712
+	PR symtab/23010
+	* dwarf2read.c (dw2_add_symbol_to_list): Remove.
+	(fixup_go_packaging, new_symbol): Use add_symbol_to_list.
+
+2019-01-10  Keith Seitz  <keiths@redhat.com>
+
+	PR gdb/23712
+	PR symtab/23010
+	* dictionary.c (pending_to_vector): Remove.
+	(dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1):
+	Remove _1 suffix, replacing functions of the same name.  Update
+	all callers.
+	(dict_create_hashed, dict_create_hashed_expandable)
+	(dict_create_linear, dict_create_linear_expandable, dict_free)
+	(dict_add_symbol, dict_add_pending, dict_size, dict_empty):
+	Make functions static.
+
+2019-01-10  Keith Seitz  <keiths@redhat.com>
+
+	PR gdb/23712
+	PR symtab/23010
+	* dictionary.h (struct dictionary): Replace declaration with
+	multidictionary.
+	(dict_create_hashed, dict_create_hashed_expandable)
+	(dict_create_linear, dict_create_linear_expandable)
+	(dict_free, dict_add_symbol, dict_add_pending, dict_empty)
+	(dict_iterator_first, dict_iterator_next, dict_iter_match_first)
+	(dict_iter_match_next, dict_size): Rename to "mdict_" versions
+	taking multidictionary argument.
+	[ALL_DICT_SYMBOLS]: Update for multidictionary.
+	* block.h (struct block) <dict>: Change to multidictionary
+	and rename `multidict'.
+	* block.c, buildsym.c, jit.c, mdebugread.c, objfiles.c,
+	symmisc.c: Update all dictionary references to multidictionary.
+
+2019-01-10  Keith Seitz  <keiths@redhat.com>
+
+	PR gdb/23712
+	PR symtab/23010
+	* dictionary.c: Include unordered_map.
+	(pending_to_vector): New function.
+	(dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1):
+	Rewrite the non-"_1" functions to take vector instead
+	of linked list.
+	(dict_create_hashed, dict_create_linear, dict_add_pending): Use the
+	"new" _1 versions of the same name.
+	(multidictionary): Define.
+	(std::hash<enum language): New definition.
+	(collate_pending_symbols_by_language, mdict_create_hashed)
+	(mdict_create_hashed_expandable, mdict_create_linear)
+	(mdict_create_linear_expandable, mdict_free)
+	(find_language_dictionary, create_new_language_dictionary)
+	(mdict_add_symbol, mdict_add_pending, mdict_iterator_first)
+	(mdict_iterator_next, mdict_iter_match_first, mdict_iter_match_next)
+	(mdict_size, mdict_empty): New functions.
+	* dictionary.h (mdict_iterator): Define.
+
+2019-01-10  Pedro Alves  <palves@redhat.com>
+
+	* breakpoint.c (read_uploaded_action)
+	(create_tracepoint_from_upload): Adjust to use
+	gdb::unique_xmalloc_ptr.
+	* ctf.c (ctf_write_uploaded_tp):
+	(SET_ARRAY_FIELD): Use emplace_back.
+	(SET_STRING_FIELD): Adjust to use gdb::unique_xmalloc_ptr.
+	* tracefile-tfile.c (tfile_write_uploaded_tp):
+	* tracepoint.c (parse_tracepoint_definition): Adjust to use
+	gdb::unique_xmalloc_ptr.
+	* tracepoint.h (struct uploaded_tp) <cond, actions, step_actions,
+	at_string, cond_string, cmd_strings>: Replace char pointers
+	with gdb::unique_xmalloc_ptr.
+
+2019-01-10  Pedro Alves  <palves@redhat.com>
+
+	* solib-target.c (library_list_start_library): Don't xstrdup name.
+
+2019-01-10  Pedro Alves  <palves@redhat.com>
+
+	* mdebugread.c (parse_partial_symbols): Use
+	gdb::unique_xmalloc_ptr to manage heap-allocated 'stabsstring'.
+
+2019-01-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* linux-fork.c (scoped_switch_fork_info)
+	<~scoped_switch_fork_info>: Fix incorrect variable name.
+
+2019-01-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* linux-fork.c (scoped_switch_fork_info)
+	<scoped_switch_fork_info>: Make explicit.
+	<~scoped_switch_fork_info>: Wrap core in TRY/CATCH.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (objfile::reset_psymtabs): Update.
+	* objfiles.c (objfile::objfile): Update.
+	* psymtab.h (psymtab_storage::obstack): Update.
+	(psymtab_storage::m_obstack): Use gdb::optional.
+	(class psymtab_storage): Update comment.  Remove objfile
+	parameter.
+	* psymtab.c (psymtab_storage::psymtab_storage): Update.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.h (psymtab_storage::allocate_psymtab): New method.
+	<free_psymtabs>: Now private.
+	* psymtab.c (psymtab_storage::allocate_psymtab): Implement.
+	(allocate_psymtab): Use new method.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_end_psymtab): Use allocate_dependencies.
+	* psymtab.h (psymtab_storage::allocate_dependencies): New method.
+	* mdebugread.c (parse_partial_symbols): Use
+	allocate_dependencies.
+	* dwarf2read.c (dwarf2_create_include_psymtab): Use
+	allocate_dependencies.
+	(process_psymtab_comp_unit_reader)
+	(build_type_psymtab_dependencies): Likewise.
+	* dbxread.c (dbx_end_psymtab): Use allocate_dependencies.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (add_psymbol_to_bcache): Pass psymtab obstack to
+	PSYMBOL_SET_LANGUAGE.
+	(allocate_psymtab): Allocate psymtab on the psymtab obstack.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.h (psymtab_storage::obstack): New method.
+	<m_obstack>: Rename from obstack; now private.
+	* psymtab.c (psymtab_storage): Update.
+	* dwarf2read.c (create_addrmap_from_index)
+	(create_addrmap_from_aranges, dwarf2_build_psymtabs_hard):
+	Update.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (reread_symbols): Call objfile->reset_psymtabs.
+	* objfiles.h (objfile::reset_psymtabs): New method.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* symmisc.c (print_symbol_bcache_statistics): Update.
+	(print_objfile_statistics): Update.
+	* symfile.c (reread_symbols): Update.
+	* psymtab.h (class psymtab_storage): New.
+	* psymtab.c (psymtab_storage): New constructor.
+	(~psymtab_storage): New destructor.
+	(require_partial_symbols): Update.
+	(ALL_OBJFILE_PSYMTABS_REQUIRED): Rewrite.
+	(find_pc_sect_psymtab, find_pc_sect_psymbol)
+	(match_partial_symbol, lookup_partial_symbol, dump_psymtab)
+	(psym_dump, recursively_search_psymtabs, psym_has_symbols)
+	(psym_find_compunit_symtab_by_address, sort_pst_symbols)
+	(start_psymtab_common, end_psymtab_common)
+	(add_psymbol_to_bcache, add_psymbol_to_list, init_psymbol_list)
+	(allocate_psymtab): Update.
+	(psymtab_storage::discard_psymtab): Rename from discard_psymtab.
+	Update.
+	(dump_psymtab_addrmap, maintenance_print_psymbols)
+	(maintenance_check_psymtabs): Update.
+	(class objfile_psymtabs): Move to objfiles.h.
+	* psympriv.h (discard_psymtab): Now inline.
+	(psymtab_discarder::psymtab_discarder): Update.
+	(psymtab_discarder::~psymtab_discarder): Update.
+	(ALL_OBJFILE_PSYMTABS): Rewrite.
+	* objfiles.h (struct objfile) <psymtabs, psymtabs_addrmap,
+	free_psymtabs, psymbol_cache, global_psymbols, static_psymbols>:
+	Remove fields.
+	<partial_symtabs>: New field.
+	(class objfile_psymtabs): Move from psymtab.h.  Update.
+	* objfiles.c (objfile::objfile): Initialize partial_symtabs, not
+	psymbol_cache.
+	(objfile::~objfile): Don't destroy psymbol_cache.
+	* mdebugread.c (parse_partial_symbols): Update.
+	* dwarf2read.c (create_addrmap_from_index)
+	(create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab)
+	(process_psymtab_comp_unit_reader, dwarf2_build_psymtabs_hard)
+	(add_partial_subprogram, dwarf2_ranges_read): Update.
+	* dwarf-index-write.c (write_address_map)
+	(write_one_signatured_type, recursively_write_psymbols)
+	(class debug_names, class debug_names, write_psymtabs_to_index):
+	Update.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* symtab.h (SYMBOL_SET_NAMES): Update.
+	(symbol_set_names): Update.
+	(MSYMBOL_SET_NAMES): Update.
+	* symtab.c (symbol_set_names): Change argument to be an
+	objfile_per_bfd_storage.
+	* psymtab.c (add_psymbol_to_bcache): Update.
+	* psympriv.h (PSYMBOL_SET_NAMES): Take per_bfd argument.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (create_demangled_names_hash): Change argument to be an
+	objfile_per_bfd_storage.
+	(symbol_set_names): Update.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_initial_scan): Unconditionally call
+	init_psymbol_list.
+	* psymtab.c (init_psymbol_list): Do nothing if already called.
+	* psympriv.h (init_psymbol_list): Add comment.
+	* dwarf2read.c (dwarf2_build_psymtabs): Unconditionally call
+	init_psymbol_list.
+	* dbxread.c (dbx_symfile_read): Unconditionally call
+	init_psymbol_list.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (scan_xcoff_symtab): Update.
+	* psymtab.c (add_psymbol_to_list): Replace "list" parameter with
+	"where".
+	* mdebugread.c (parse_partial_symbols)
+	(handle_psymbol_enumerators): Update.
+	* dwarf2read.c (add_partial_symbol, load_partial_dies): Update.
+	* dbxread.c (read_dbx_symtab): Update.
+	* psympriv.h (psymbol_placement): New enum.
+	(add_psymbol_to_list): Update.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_start_psymtab): Remove global_psymbols and
+	static_psymbols parameters.
+	(scan_xcoff_symtab): Update.
+	* psymtab.c (start_psymtab_common): Remove global_psymbols and
+	static_psymbols parameters.
+	* psympriv.h (start_psymtab_common): Update.
+	* mdebugread.c (parse_partial_symbols): Update.
+	* dwarf2read.c (create_partial_symtab): Update.
+	* dbxread.c (read_dbx_symtab): Update.
+	(start_psymtab): Remove global_psymbols and static_psymbols
+	parameters.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_end_psymtab): Remove some initializations.
+	* psymtab.c (allocate_psymtab): Add comment.
+	* psympriv.h (allocate_psymtab): Add comment.
+	* dwarf2read.c (dwarf2_create_include_psymtab): Remove some
+	initializations.
+	* dbxread.c (dbx_end_psymtab): Remove some initializations.
+
+2019-01-10  Tom Tromey  <tom@tromey.com>
+
+	* symfile.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs):
+	Don't declare.
+	* mipsread.c: Include mdebugread.h.
+	* mdebugread.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs):
+	Declare.
+	* elfread.c: Include mdebugread.h.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* dbxread.c (dbx_end_psymtab): Use objfile_psymtabs.
+	* mdebugread.c (parse_partial_symbols): Use objfile_psymtabs.
+	* psymtab.c (ALL_OBJFILE_PSYMTABS_REQUIRED): Remove.
+	(psym_map_symtabs_matching_filename, find_pc_sect_psymtab)
+	(psym_lookup_symbol, psym_find_last_source_symtab)
+	(psym_forget_cached_source_info, psym_print_stats)
+	(psym_expand_symtabs_for_function, psym_expand_all_symtabs)
+	(psym_expand_symtabs_with_fullname, psym_map_symbol_filenames)
+	(psym_map_matching_symbols, psym_expand_symtabs_matching)
+	(psym_find_compunit_symtab_by_address)
+	(maintenance_print_psymbols, maintenance_info_psymtabs)
+	(maintenance_check_psymtabs): Use ranged for.
+	* psymtab.h (class objfile_psymtabs): New.
+	(require_partial_symbols): Return objfile_psymtabs.
+	* psympriv.h (ALL_OBJFILE_PSYMTABS): Remove.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (overlay_invalidate_all, find_pc_overlay)
+	(find_pc_mapped_section, list_overlays_command)
+	(map_overlay_command, unmap_overlay_command)
+	(simple_overlay_update): Use all_objfiles.
+	* spu-tdep.c (spu_overlay_update): Use all_objfiles.
+	* printcmd.c (info_symbol_command): Use all_objfiles.
+	* objfiles.h (ALL_OBJSECTIONS): Remove.
+	* maint.c (maintenance_translate_address): Use all_objfiles.
+	* gcore.c (gcore_create_callback): Use all_objfiles.
+	(objfile_find_memory_regions): Likewise.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (find_line_symtab, info_sources_command)
+	(make_source_files_completion_list): Use objfile_compunits.
+	* source.c (select_source_symtab): Use objfile_compunits.
+	* objfiles.h (struct objfile): Update comment.
+	(ALL_OBJFILES): Remove.
+	(ALL_FILETABS): Remove.
+	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Use
+	objfile_compunits.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* symmisc.c (print_objfile_statistics, dump_objfile)
+	(maintenance_print_symbols): Use compunit_filetabs.
+	* source.c (forget_cached_source_info_for_objfile): Use
+	compunit_filetabs.
+	* objfiles.h (ALL_OBJFILE_FILETABS): Remove.
+	(ALL_FILETABS): Use compunit_filetabs.
+	* objfiles.c (objfile_relocate1): Use compunit_filetabs.
+	* coffread.c (coff_symtab_read): Use compunit_filetabs.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* symtab.h (ALL_COMPUNIT_FILETABS): Remove.
+	(compunit_filetabs): New.
+	* symtab.c (iterate_over_some_symtabs, find_pc_sect_line): Use
+	compunit_filetabs.
+	(info_sources_command, make_source_files_completion_list): Remove
+	declaration.
+	* symmisc.c (print_objfile_statistics, dump_objfile)
+	(maintenance_print_symbols): Remove declaration.
+	(maintenance_info_symtabs): Use compunit_filetabs.
+	(maintenance_info_line_tables): Likewise.
+	* source.c (select_source_symtab): Change local variable name.
+	(forget_cached_source_info_for_objfile): Remove declaration.
+	* objfiles.h (ALL_OBJFILE_FILETABS): Use compunit_filetabs.
+	* objfiles.c (objfile_relocate1): Remove declaration.
+	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove
+	declaration.
+	* maint.c (count_symtabs_and_blocks): Use compunit_filetabs.
+	* coffread.c (coff_symtab_read): Remove declaration.
+	* buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Use
+	compunit_filetabs.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (lookup_objfile_from_block)
+	(find_pc_sect_compunit_symtab, search_symbols)
+	(default_collect_symbol_completion_matches_break_on): Use
+	objfile_compunits.
+	* objfiles.h (ALL_COMPUNITS): Remove.
+	* maint.c (count_symtabs_and_blocks): Use objfile_compunits.
+	* cp-support.c (add_symbol_overload_list_qualified): Use
+	objfile_compunits.
+	* ada-lang.c (ada_collect_symbol_completion_matches)
+	(ada_add_global_exceptions): Use objfile_compunits.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* source.c (select_source_symtab)
+	(forget_cached_source_info_for_objfile): Remove declaration.
+	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove
+	declaration.
+	* maint.c (count_symtabs_and_blocks): Remove declaration.
+	* cp-support.c (add_symbol_overload_list_qualified): Remove
+	declaration.
+	* coffread.c (coff_symtab_read): Remove declaration.
+	* symtab.c (lookup_symbol_in_objfile_symtabs)
+	(basic_lookup_transparent_type_1): Use objfile_compunits.
+	(lookup_objfile_from_block, find_pc_sect_compunit_symtab)
+	(info_sources_command, search_symbols)
+	(default_collect_symbol_completion_matches_break_on)
+	(make_source_files_completion_list): Remove declaration.
+	* ada-lang.c (add_nonlocal_symbols): Use objfile_compunits.
+	(ada_collect_symbol_completion_matches)
+	(ada_add_global_exceptions): Remove declaration.
+	* linespec.c (iterate_over_all_matching_symtabs): Use
+	objfile_compunits.
+	* objfiles.h (ALL_OBJFILE_COMPUNITS): Remove.
+	(class objfile_compunits): New.
+	(ALL_COMPUNITS): Use objfile_compunits.
+	* symmisc.c (print_objfile_statistics, maintenance_info_symtabs)
+	(maintenance_check_symtabs, maintenance_info_line_tables): Use
+	objfile_compunits.
+	* objfiles.c (objfile_relocate1): Use objfile_compunits.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (search_symbols)
+	(default_collect_symbol_completion_matches_break_on): Use
+	objfile_msymbols.
+	* ada-lang.c (ada_lookup_simple_minsym)
+	(ada_collect_symbol_completion_matches): Use objfile_msymbols.
+	* minsyms.c (find_solib_trampoline_target): Use objfile_msymbols.
+	* hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Use
+	objfile_msymbols.
+	* coffread.c (coff_symfile_read): Use objfile_msymbols.
+	* symmisc.c (dump_msymbols): Use objfile_msymbols.
+	* objc-lang.c (find_methods): Use objfile_msymbols.
+	(info_selectors_command, info_classes_command): Likewise.
+	* stabsread.c (scan_file_globals): Use objfile_msymbols.
+	* objfiles.h (class objfile_msymbols): New.
+	(ALL_OBJFILE_MSYMBOLS): Remove.
+	(ALL_MSYMBOLS): Remove.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* common/next-iterator.h (next_adapter): Add Iterator template
+	parameter.
+	* objfiles.h (ALL_OBJFILES_SAFE): Remove.
+	(class all_objfiles_safe): New.
+	* jit.c (jit_inferior_exit_hook): Use all_objfiles_safe.
+	* objfiles.c (put_objfile_before): Update comment.
+	(add_separate_debug_objfile): Likewise.
+	(free_all_objfiles): Use all_objfiles_safe.
+	(objfile_purge_solibs): Likewise.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (iterate_over_symtabs, matching_obj_sections)
+	(expand_symtab_containing_pc, lookup_static_symbol)
+	(basic_lookup_transparent_type, find_pc_sect_compunit_symtab)
+	(find_symbol_at_address, find_line_symtab, find_main_name): Use
+	all_objfiles.
+	* probe.c (find_probe_by_pc, collect_probes): Use all_objfiles.
+	* breakpoint.c (create_overlay_event_breakpoint)
+	(create_longjmp_master_breakpoint)
+	(create_std_terminate_master_breakpoint)
+	(create_exception_master_breakpoint): Use all_objfiles.
+	* linux-thread-db.c (try_thread_db_load_from_pdir)
+	(has_libpthread): Use all_objfiles.
+	* ada-lang.c (add_nonlocal_symbols): Use all_objfiles.
+	* linespec.c (iterate_over_all_matching_symtabs)
+	(search_minsyms_for_name): Use all_objfiles.
+	* maint.c (maintenance_info_sections): Use all_objfiles.
+	* main.c (captured_main_1): Use all_objfiles.
+	* spu-tdep.c (spu_objfile_from_frame): Use all_objfiles.
+	* guile/scm-objfile.c (gdbscm_objfiles): Use all_objfiles.
+	* guile/scm-pretty-print.c
+	(ppscm_find_pretty_printer_from_objfiles): Use all_objfiles.
+	* solib-spu.c (append_ocl_sos): Use all_objfiles.
+	* symmisc.c (maintenance_print_symbols): Use all_objfiles.
+	(maintenance_print_msymbols): Use all_objfiles.
+	* source.c (select_source_symtab): Use all_objfiles.
+	* jit.c (jit_find_objf_with_entry_addr): Use all_objfiles.
+	* symfile.c (remove_symbol_file_command)
+	(expand_symtabs_matching, map_symbol_filenames): Use
+	all_objfiles.
+	* ppc-linux-tdep.c (ppc_linux_spe_context_inferior_created): Use
+	all_objfiles.
+	* dwarf2-frame.c (dwarf2_frame_find_fde): Use all_objfiles.
+	* objc-lang.c (find_methods): Use all_objfiles.
+	* objfiles.c (have_partial_symbols, have_full_symbols)
+	(have_minimal_symbols, qsort_cmp)
+	(default_iterate_over_objfiles_in_search_order): Use
+	all_objfiles.
+	* hppa-tdep.c (find_unwind_entry): Use all_objfiles.
+	* psymtab.c (maintenance_print_psymbols): Use all_objfiles.
+	(maintenance_check_psymtabs): Use all_objfiles.
+	(ALL_PSYMTABS): Remove.
+	* compile/compile-object-run.c (do_module_cleanup): Use
+	all_objfiles.
+	* blockframe.c (find_pc_partial_function): Use all_objfiles.
+	* cp-support.c (add_symbol_overload_list_qualified): Use
+	all_objfiles.
+	* windows-tdep.c (windows_iterate_over_objfiles_in_search_order):
+	Use all_objfiles.
+	* dwarf-index-write.c (save_gdb_index_command): Use all_objfiles.
+	* python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): Use
+	all_objfiles.
+	* python/py-objfile.c (objfpy_lookup_objfile_by_name)
+	(objfpy_lookup_objfile_by_build_id): Use all_objfiles.
+	* python/py-prettyprint.c (find_pretty_printer_from_objfiles):
+	Uses all_objfiles.
+	* solib.c (solib_read_symbols): Use all_objfiles
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* probe.c (parse_probes_in_pspace): Use all_objfiles.
+	* guile/scm-progspace.c (gdbscm_progspace_objfiles): Use
+	all_objfiles.
+	* objfiles.h (ALL_PSPACE_OBJFILES): Remove.
+	* symmisc.c (print_symbol_bcache_statistics)
+	(print_objfile_statistics, maintenance_print_objfiles)
+	(maintenance_info_symtabs, maintenance_check_symtabs)
+	(maintenance_expand_symtabs, maintenance_info_line_tables): Use
+	all_objfiles.
+	* source.c (forget_cached_source_info): Use all_objfiles.
+	* symfile-debug.c (set_debug_symfile): Use all_objfiles.
+	* elfread.c (elf_gnu_ifunc_resolve_by_cache)
+	(elf_gnu_ifunc_resolve_by_got): Use all_objfiles.
+	* objfiles.c (update_section_map): Use all_objfiles.
+	(shared_objfile_contains_address_p): Likewise.
+	* psymtab.c (maintenance_info_psymtabs): Use all_objfiles.
+	* python/py-progspace.c (pspy_get_objfiles): Use all_objfiles.
+
+2019-01-09  Tom Tromey  <tom@tromey.com>
+
+	* common/next-iterator.h: New file.
+	* objfiles.h (class all_objfiles): New.
+	(struct objfile_iterator): New.
+
+2019-01-09  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Move the description of the changed "frame", "select-frame",
+	 and "info frame" commands to the Changed commands section.
+
+2019-01-09  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdbtypes.c (check_stub_method_group): Remove handling of old
+	mangling schemes.
+	* linespec.c (find_methods): Likewise.
+	* stabsread.c (read_member_functions): Likewise.
+	* valops.c (search_struct_method): Likewise.
+	(value_struct_elt_for_reference): Likewise.
+	* NEWS: Mention this change.
+
+2019-01-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cli/cli-cmds.c (list_command): Pass a source_lines_range to
+	print_source_lines.
+	* source.c (print_source_lines_base): Update line number check.
+	(print_source_lines): New function.
+	(source_lines_range::source_lines_range): New function.
+	* source.h (class source_lines_range): New class.
+	(print_source_lines): New declaration.
+
+2019-01-09  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* linespec.c (linespec_state_destructor): Free self->canonical_names.
+
+2019-01-08  Tom Tromey  <tom@tromey.com>
+	    Simon Marchi  <simon.marchi@ericsson.com>
+
+	PR gdb/24060
+	* ada-exp.y (DOLLAR_VARIABLE): Rename from SPECIAL_VARIABLE.
+	* ada-lex.l (DOLLAR_VARIABLE): Likewise.
+	* c-exp.y (DOLLAR_VARIABLE): Rename from VARIABLE.
+	* f-exp.y (DOLLAR_VARIABLE): Likewise.
+	* m2-exp.y (DOLLAR_VARIABLE): Rename from INTERNAL_VAR.
+	* p-exp.y (DOLLAR_VARIABLE): Rename from VARIABLE.
+
+2019-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* source.c (select_source_symtab): Move header comment to
+	declaration in source.h.
+	(forget_cached_source_info_for_objfile): Likewise.
+	(forget_cached_source_info): Likewise.
+	(identify_source_line): Likewise.
+	* source.h (identify_source_line): Move declaration from symtab.h
+	and add comment from source.c
+	(print_source_lines): Likewise.
+	(forget_cached_source_info_for_objfile): Likewise.
+	(forget_cached_source_info): Likewise.
+	(select_source_symtab): Likewise.
+	(enum print_source_lines_flag): Move definition from symtab.h.
+	* symtab.h (identify_source_line): Move declaration to source.h.
+	(print_source_lines): Likewise.
+	(forget_cached_source_info_for_objfile): Likewise.
+	(forget_cached_source_info): Likewise.
+	(select_source_symtab): Likewise.
+	(enum print_source_lines_flag): Move definition to source.h.
+	* tui/tui-hooks.c: Add 'source.h' include.
+
+2019-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* source.c (print_source_lines_base): Handle requests to print
+	reverse line number sequences, and guard against empty lines
+	string.
+
+2019-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* source.c (print_source_lines_base): Fix skip of '\r' if next
+	character is '\n'.
+
+2019-01-06  Tom Tromey  <tom@tromey.com>
+
+	* c-exp.y (struct c_parse_state) <macro_original_text,
+	expansion_obstack>: New member.
+	(macro_original_text, expansion_obstack): Remove globals.
+	(scan_macro_expansion, scanning_macro_expansion)
+	(finished_macro_expansion): Update.
+	(scan_macro_cleanup): Remove.
+	(yylex, c_parse): Update.
+
+2019-01-06  Tom Tromey  <tom@tromey.com>
+
+	* c-exp.y (struct c_parse_state) <strings>: New member.
+	(operator_stoken): Update.
+
+2019-01-06  Tom Tromey  <tom@tromey.com>
+
+	* parser-defs.h (type_ptr): Remove typedef.  Don't declare VEC.
+	(union type_stack_elt) <typelist_val>: Now a pointer to
+	std::vector.
+	(type_stack_cleanup): Don't declare.
+	(push_typelist): Update.
+	* parse.c (pop_typelist): Return a std::vector.
+	(push_typelist): Take a std::vector.
+	(follow_types): Update.  Do not free args.
+	(type_stack_cleanup): Remove.
+	* c-exp.y (struct c_parse_state): New.
+	(cpstate): New global.
+	(type_aggregate_p, exp, ptr_operator, parameter_typelist)
+	(nonempty_typelist): Update.
+	(func_mod): Create a new vector.
+	(c_parse): Create a c_parse_state.
+	(check_parameter_typelist): Do not delete params.
+	(function_method): Update.  Do not delete type_list.
+
+2019-01-06  Tom Tromey  <tom@tromey.com>
+
+	PR gdb/28155:
+	* python/py-finishbreakpoint.c (bpfinishpy_init): Use
+	check_typedef.
+	* infcmd.c (finish_command_fsm_should_stop): Use check_typedef.
+	(print_return_value): Likewise.
+
+2019-01-05  Tom Tromey  <tom@tromey.com>
+
+	* contrib/cleanup_check.py: Remove.
+	* contrib/gcc-with-excheck: Remove.
+	* contrib/exsummary.py: Remove.
+	* contrib/excheck.py: Remove.
+
+2019-01-05  Joel Brobecker  <brobecker@adacore.com>
+
+	* thread.c (delete_thread_1): Add gdb_assert that THR is not
+	NULL. Initialize tpprev to NULL instead of assigning it
+	to NULL on the next statement.
+	* windows-nat.c (windows_delete_thread): Remove check for
+	main_thread_id before printing thread exit notifications.
+	(get_windows_debug_event) <EXIT_THREAD_DEBUG_EVENT>:
+	Remove thread ID check against main_thread_id.
+	<CREATE_PROCESS_DEBUG_EVENT>: Remove call to
+	windows_delete_thread.
+	<EXIT_PROCESS_DEBUG_EVENT>: Add call to windows_delete_thread.
+
+2019-01-04  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile.c (_initialize_compile): Use upper case for
+	metasyntactic variables.
+	* symmisc.c (_initialize_symmisc): Use upper case for
+	metasyntactic variables.
+	* psymtab.c (_initialize_psymtab): Use upper case for
+	metasyntactic variables.
+	* demangle.c (demangle_command): Use upper case for metasyntactic
+	variables.
+	(_initialize_demangler): Likewise.
+	* ax-gdb.c (_initialize_ax_gdb): Use upper case for metasyntactic
+	variables.
+
+2019-01-03  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-source.c (tui_set_source_content): Use xstrdup.
+
+2019-01-03  Tom Tromey  <tom@tromey.com>
+
+	* python/py-symtab.c (salpy_str): Update.
+	(struct salpy_sal_object) <symtab>: Now a PyObject.
+	(salpy_dealloc): Update.
+	(del_objfile_sal): Use gdbpy_ref.
+
+2019-01-03  Tom Tromey  <tom@tromey.com>
+
+	* python/py-type.c (convert_field): Use new_reference.  Return
+	gdbpy_ref.
+	(make_fielditem): Return gdbpy_ref.
+	(typy_fields): Update.
+	(typy_getitem): Update.
+	(field_name): Return gdbpy_ref.  Use new_reference.
+	(typy_iterator_iternext): Update.
+
+2019-01-03  Tom Tromey  <tom@tromey.com>
+
+	* python/py-record.c (gdbpy_stop_recording): Use Py_RETURN_NONE.
+
+2019-01-03  Tom Tromey  <tom@tromey.com>
+
+	* python/py-value.c (valpy_dealloc): Use Py_XDECREF.
+	* python/py-type.c (typy_fields_items): Use gdbpy_ref.
+	* python/py-progspace.c (pspy_set_printers): Use gdbpy_ref.
+	(pspy_set_frame_filters, pspy_set_frame_unwinders)
+	(pspy_set_type_printers): Likewise.
+	* python/py-function.c (fnpy_init): Use gdbpy_ref.
+	* python/py-cmd.c (cmdpy_init): Use gdbpy_ref.
+	* python/py-objfile.c (objfpy_set_printers): Use gdbpy_ref.
+	(objfpy_set_frame_filters, objfpy_set_frame_unwinders)
+	(objfpy_set_type_printers): Likewise.
+
+2019-01-03  Tom Tromey  <tom@tromey.com>
+
+	* python/python.c (gdbpy_enter, ~gdbpy_enter): Update.
+	(gdbpy_print_stack): Use gdbpy_err_fetch.
+	* python/python-internal.h (class gdbpy_err_fetch): New class.
+	(class gdbpy_enter) <m_error_type, m_error_value,
+	m_error_traceback>: Remove.
+	<m_error>: New member.
+	(gdbpy_exception_to_string): Don't declare.
+	* python/py-varobj.c (py_varobj_iter_next): Use gdbpy_err_fetch.
+	* python/py-value.c (convert_value_from_python): Use
+	gdbpy_err_fetch.
+	* python/py-utils.c (gdbpy_err_fetch::to_string): Rename from
+	gdbpy_exception_to_string.
+	(gdbpy_handle_exception): Use gdbpy_err_fetch.
+	* python/py-prettyprint.c (print_stack_unless_memory_error): Use
+	gdbpy_err_fetch.
+
+2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* linux-nat.c (delete_lwp_cleanup): Delete.
+	(struct lwp_deleter): New struct.
+	(lwp_info_up): New typedef.
+	(linux_nat_target::follow_fork): Delete cleanup, and make use of
+	lwp_info_up.
+
+2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* linux-fork.c (class scoped_switch_fork_info): New class.
+	(inferior_call_waitpid): Update to use scoped_switch_fork_info.
+
+2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* valops.c (find_overload_match): Remove use of null_cleanup, and
+	calls to do_cleanups.
+
+2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* compile/compile-cplus-types.c
+	(compile_cplus_instance::decl_name): Handle changes to
+	cp_func_name.
+	* cp-support.c (cp_func_name): Update header comment, update
+	return type.
+	* cp-support.h (cp_func_name): Update return type in declaration.
+	* valops.c (find_overload_match): Move temp_func local to top
+	level of function and change its type.  Use temp_func to hold and
+	delete temporary string obtained from cp_func_name.
+
+2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* remote.c (remote_target::remote_check_symbols): Convert `msg` to
+	gdb::char_vector, remove cleanup, and update uses of `msg`.
+
+2019-01-03  Jim Wilson  <jimw@sifive.com>
+
+	* riscv-tdep.c (riscv_freg_feature): Drop s0 name from f8.
+
+2019-01-02  Tom Tromey  <tom@tromey.com>
+
+	* xml-tdesc.c (xml_cache): Hold a target_desc_up.
+	(tdesc_parse_xml): Remove cleanups.
+	* target-descriptions.h (make_cleanup_free_target_description):
+	Don't declare.
+	(target_desc_deleter): New struct.
+	(target_desc_up): New typedef.
+	* target-descriptions.c (target_desc_deleter::operator()): Rename
+	from free_target_description.
+	(make_cleanup_free_target_description): Remove.
+
+2019-01-02  Tom Tromey  <tom@tromey.com>
+
+	* linespec.c (struct linespec_parser): Rename from ls_parser.  Add
+	constructor, destructor.
+	(linespec_parser): Remove typedef.
+	(~linespec_parser): Rename from linespec_parser_delete.
+	(linespec_lex_to_end, linespec_complete_label)
+	(linespec_complete): Update.
+	(decode_line_full): Remove cleanups.
+	(decode_line_1): Update.
+
+2019-01-02  Tom Tromey  <tom@tromey.com>
+
+	* python/python-internal.h (inferior_to_inferior_object): Change
+	return type.
+	* python/py-exitedevent.c (create_exited_event_object): Update.
+	* python/py-inferior.c (inferior_to_inferior_object): Return
+	gdbpy_ref.
+	(python_new_inferior, python_inferior_deleted)
+	(thread_to_thread_object, delete_thread_object)
+	(build_inferior_list, gdbpy_selected_inferior): Update.
+	* python/py-infthread.c (create_thread_object): Update.  Also fail
+	if inferior_to_inferior_object fails.
+
+2019-01-02  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* inferior.h (class inferior) <displaced_step_state>: New field.
+	* infrun.h (struct displaced_step_state): Move here from
+	infrun.c.  Initialize fields, add constructor.
+	<inf>: Remove field.
+	<reset>: New method.
+	* infrun.c (struct displaced_step_inferior_state): Move to
+	infrun.h.
+	(displaced_step_inferior_states): Remove.
+	(get_displaced_stepping_state): Adust.
+	(displaced_step_in_progress_any_inferior): Adjust.
+	(displaced_step_in_progress_thread): Adjust.
+	(displaced_step_in_progress): Adjust.
+	(add_displaced_stepping_state): Remove.
+	(get_displaced_step_closure_by_addr): Adjust.
+	(remove_displaced_stepping_state): Remove.
+	(infrun_inferior_exit): Call displaced_step_state.reset.
+	(use_displaced_stepping): Don't check for NULL.
+	(displaced_step_prepare_throw): Call
+	get_displaced_stepping_state.
+	(displaced_step_fixup): Don't check for NULL.
+	(prepare_for_detach): Don't check for NULL.
+
+2019-01-02  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* infcall.c (call_function_by_hand_dummy): cleanup/destroy sm
+	 in case of call that did not complete.
+
+2019-01-02  Andrey Utkin  <autkin@undo.io>
+
+	* symfile.c (find_separate_debug_file): Fix search of debug files for
+	remote debuggee.
+
+2019-01-02  Tom Tromey  <tom@tromey.com>
+
+	* python/py-inferior.c (gdbpy_initialize_inferior): Fix
+	indentation.
+	* python/py-frame.c (frapy_older): Remove cast.
+	(frapy_newer): Likewise.
+	* python/py-breakpoint.c (local_setattro): Remove cast.
+	* python/py-arch.c (archpy_name): Remove local variable.
+	* python/py-type.c (gdbpy_lookup_type): Remove cast.
+
+2019-01-02  Joel Brobecker  <brobecker@adacore.com>
+
+	* unittests/basic_string_view/element_access/char/empty.cc:
+	Fix year range in copyright header.
+
+2019-01-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arch/riscv.h (struct riscv_gdbarch_features) <hw_float_abi>:
+	Delete.
+	<operator==>: Update with for removed field.
+	<hash>: Likewise.
+	* riscv-tdep.h (struct gdbarch_tdep) <features>: Renamed to...
+	<isa_features>: ...this.
+	<abi_features>: New field.
+	(riscv_isa_flen): Update comment.
+	(riscv_abi_xlen): New declaration.
+	(riscv_abi_flen): New declaration.
+	* riscv-tdep.c (riscv_isa_xlen): Update to get answer from
+	isa_features.
+	(riscv_abi_xlen): New function.
+	(riscv_isa_flen): Update to get answer from isa_features.
+	(riscv_abi_flen): New function.
+	(riscv_has_fp_abi): Update to get answer from abi_features.
+	(riscv_call_info::riscv_call_info): Use abi xlen and flen, not isa
+	xlen and flen.
+	(riscv_call_info) <xlen, flen>: Update comment.
+	(riscv_call_arg_struct): Remove invalid assertions
+	(riscv_features_from_gdbarch_info): Update now hw_float_abi field
+	is removed.
+	(riscv_gdbarch_init): Gather isa features and abi features
+	separately, ensure both match on the gdbarch when reusing an old
+	gdbarch.  Relax an error check to allow 32-bit abi float to run on
+	a target with 64-bit float hardware.
+
+2019-01-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* source.c (search_command_helper): Stop reverse search
+	when line 1 has been searched.
+
+2019-01-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* record-full.c (record_full_base_target::close): Rewrite
+	record_full_core_buf_list free logic.
+
+2019-01-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* break-catch-syscall.c (print_one_catch_syscall): xfree
+	the last text.
+
+2019-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* top.c (print_gdb_version): Update Copyright year in version
+	message.
+
+2019-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	Update copyright year range in all GDB files.
+
+2019-01-01, 19  Joel Brobecker  <brobecker@adacore.com>
+
+	* config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2018.
+
+For older changes see ChangeLog-2018.
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+coding: utf-8
+End:
+
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2020 ./gdb/ChangeLog-2020
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2020	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/ChangeLog-2020	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,18751 @@
+2020-12-27  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (evaluate_subexp_standard) <case MULTI_SUBSCRIPT>:
+	Simplify.
+
+2020-12-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR gdb/27059
+	* eval.c (evaluate_subexp_for_sizeof): Handle not allocated and
+	not associated arrays.
+	* f-lang.c (fortran_adjust_dynamic_array_base_address_hack): Don't
+	adjust arrays that are not allocated/associated.
+	* gdbtypes.c (resolve_dynamic_range): Update header comment.  Add
+	new parameter which is used to sometimes set dynamic properties to
+	undefined.
+	(resolve_dynamic_array_or_string): Update header comment.  Add new
+	parameter which is used to guard evaluating dynamic properties.
+	Resolve allocated/associated properties first.
+
+2020-12-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbtypes (recursive_dump_type): Include allocated and associated
+	properties.
+
+2020-12-24  Lancelot SIX  <lsix@lancelotsix.com>
+
+	* gdbtypes.c (is_scalar_type_recursive): Prevent comparison
+	between uninitialized values.
+
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* expprint.c (print_subexp_standard): Replace uses of
+	LA_PRINT_STRING.
+	* f-valprint.c (f_language::value_print_inner): Likewise.
+	* guile/scm-pretty-print.c (ppscm_print_string_repr): Likewise.
+	* p-valprint.c (pascal_language::value_print_inner): Likewise.
+	* python/py-prettyprint.c (print_string_repr): Likewise.
+
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* rust-exp.y (rust_parse): Rename to...
+	(rust_language::parser): ...this.
+	* rust-lang.c (-rust_printstr): Rename to...
+	(rust_language::printstr): ...this.
+	(rust_value_print_inner): Delete declaration.
+	(val_print_struct): Rename to...
+	(rust_language::val_print_struct): ...this.  Update calls to
+	member functions.
+	(rust_print_enum): Rename to...
+	(rust_language::print_enum): ...this.  Update calls to member
+	functions.
+	(rust_value_print_inner): Rename to...
+	(rust_language::value_print_inner): ...this.  Update calls to
+	member functions.
+	(exp_descriptor_rust): Rename to...
+	(rust_language::exp_descriptor_tab): ...this.
+	(class rust_language): Move to rust-lang.h.
+	(rust_language::language_arch_info): Implementation moved to here
+	from class declaration.
+	(rust_language::print_type): Likewise.
+	(rust_language::emitchar): Likewise.
+	(rust_language::is_string_type_p): Likewise.
+	* rust-lang.h: Add 'demangle.h', 'language.h', 'value.h', and
+	'c-lang.h' includes.
+	(rust_parse): Delete declaration.
+	(class rust_language): Class declaration moved here from
+	rust-lang.c.
+
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* objc-lang.c (objc_language::opcode_print_table): Return
+	objc_op_print_tab.
+
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* p-exp.y (exp): Update call to pascal_is_string_type.
+	(pascal_parse): Rename to...
+	(pascal_language::parser): ...this.
+	* p-lang.c (is_pascal_string_type): Rename to...
+	(pascal_is_string_type): ...this.
+	(pascal_one_char): Rename to...
+	(pascal_language::print_one_char): ...this.
+	(pascal_printchar): Rename to...
+	(pascal_language::printchar): ...this.  Update call to
+	print_one_char member function.
+	(pascal_op_print_tab): Rename to...
+	(pascal_language::op_print_tab): ...this.
+	(class pascal_language): Moved to p-lang.h.
+	(pascal_language::language_arch_info): Function implementation
+	moved out of class declaration.
+	(pascal_language::printstr): Likewise.
+	* p-lang.h (pascal_parse): Delete declaration.
+	(pascal_is_string_type): Declare.
+	(pascal_print_type): Delete declaration.
+	(pascal_print_typedef): Delete declaration.
+	(pascal_value_print_inner): Delete declaration.
+	(pascal_value_print): Delete declaration.
+	(pascal_type_print_method_args): Delete declaration.
+	(is_pascal_string_type): Delete declaration.
+	(pascal_printchar): Delete declaration.
+	(pascal_builtin_types): Delete declaration.
+	(pascal_type_print_base): Delete declaration.
+	(pascal_type_print_varspec_prefix): Delete declaration.
+	(class pascal_language): Moved here from p-lang.c.
+	* p-typeprint.c (pascal_type_print_varspec_suffix): Delete
+	declaration.
+	(pascal_type_print_derivation_info): Delete declaration.
+	(pascal_print_type): Rename to...
+	(pascal_language::print_type): ...this.  Update calls to member
+	functions.
+	(pascal_print_typedef): Rename to...
+	(pascal_language::print_typedef): ...this.  Update calls to member
+	functions.
+	(pascal_type_print_derivation_info): Rename to...
+	(pascal_language::type_print_derivation_info): ...this.
+	(pascal_type_print_method_args): Rename to...
+	(pascal_language::type_print_method_args): ...this.
+	(pascal_type_print_varspec_prefix): Rename to...
+	(pascal_language::type_print_varspec_prefix): ...this.  Update
+	calls to member functions.
+	(pascal_print_func_args): Rename to...
+	(pascal_language::print_func_args): ...this.  Update calls to
+	member functions.
+	(pascal_type_print_func_varspec_suffix): Rename to...
+	(pascal_language::type_print_func_varspec_suffix): ...this.
+	Update calls to member functions.
+	(pascal_type_print_varspec_suffix): Rename to...
+	(pascal_language::type_print_varspec_suffix): ...this.  Update
+	calls to member functions.
+	(pascal_type_print_base): Rename to...
+	(pascal_language::type_print_base): ...this.  Update calls to
+	member functions.
+	* p-valprint.c (pascal_value_print_inner): Rename to...
+	(pascal_language::value_print_inner): ...this.  Update calls to
+	member functions.
+	(pascal_value_print): Rename to...
+	(pascal_language::value_print): ...this.  Update calls to member
+	functions.
+
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* go-exp.y (go_parse): Rename to...
+	(go_language::parser): ...this.
+	* go-lang.c (go_demangle): Rename to...
+	(go_language::demangle_symbol): ...this.
+	(go_language::expression_ops): Implementation moved here out of
+	class declaration.
+	(go_op_print_tab): Rename to...
+	(go_language::op_print_tab): ...this, update comment.
+	(class go_language): Declaration moved to go-lang.h.
+	(go_language::language_arch_info): Implementation moved here out
+	of class declaration.
+	* go-lang.h (go_parse): Delete declaration.
+	(go_demangle): Delete declaration.
+	(go_print_type): Delete declaration.
+	(go_value_print_inner): Delete declaration.
+	(class go_language): Declaration moved here from go-lang.c.
+	* go-typeprint.c (go_print_type): Rename to...
+	(go_language::print_type): ...this.
+	* go-valprint.c (go_value_print_inner): Rename to...
+	(go_language::value_print_inner): ...this.
+	* symtab.c (demangle_for_lookup): Call demangle_symbol method on
+	the go_language object.
+
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* c-lang.c (language_defn::printchar): Call emitchar, not
+	LA_EMIT_CHAR.
+	* f-lang.h (f_language::printchar): Likewise.
+	* language.h (LA_EMIT_CHAR): Delete macro.
+	* rust-lang.c (rust_language::printchar): Call emitchar, not
+	LA_EMIT_CHAR.
+
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* c-lang.c (c_printchar): Rename to...
+	(language_defn::printchar): ...this.
+	* c-lang.h (c_printchar): Delete declaration.
+	* language.c (language_defn::printchar): Delete this
+	implementation.  Is now implemented in c-lang.c.
+
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2/read.c (dwarf2_compute_name): Call methods on C++
+	language object instead of calling global functions directly.
+
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* valprint.c (print_char_chars): Delete definition.
+	* valprint.h (print_char_chars): Delete declaration.
+
+2020-12-23  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* i386-gnu-tdep.c (I386_GNU_UCONTEXT_T_THREAD_STATE_OFFSET): New
+	macro.
+	(i386_gnu_sigcontext_addr): Detect between legacy and siginfo from the
+	second parameter, which is a small sigcode in the legacy case, and a
+	pointer in the siginfo case.
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2020-12-22  Shahab Vahedi  <shahab@synopsys.com>
+
+	* frame.c: Remove trailing white spaces.
+	* frame.h: Likewise.
+
+2020-12-22  Shahab Vahedi  <shahab@synopsys.com>
+
+	* arc-linux-tdep.c: Replace "regnum" with "REGNUM" in comments.
+
+2020-12-22  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* Makefile.in (ALLDEPFILES): Add arc-linux-nat.c.
+	* configure.host (host to gdb names): Add arc*-*-linux*.
+	* configure.nat (gdb_host_cpu): Add arc.
+	* arc-linux-nat.c: New.
+
+2020-12-22  Shahab Vahedi  <shahab@synopsys.com>
+
+	* arc-linux-tdep.c (supply_register): New.
+	(arc_linux_supply_gregset, arc_linux_supply_v2_regset,
+	arc_linux_collect_v2_regset): Consider REGNUM.
+
+2020-12-22  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* arc-linux-tdep.c (arc_linux_sc_reg_offsets): New static variable.
+	(arc_linux_is_sigtramp): New function.
+	(arc_linux_sigcontext_addr): Likewise.
+	(arc_linux_init_osabi): Use them.
+
+2020-12-22  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* arc-tdep.c (arc_make_sigtramp_frame_cache): New function.
+	(arc_sigtramp_frame_this_id): Likewise.
+	(arc_sigtramp_frame_prev_register): Likewise.
+	(arc_sigtramp_frame_sniffer): Likewise.
+	(arc_siftramp_frame_unwind): New global variable.
+	(arc_gdbarch_init): Use sigtramp capabilities.
+	(arc_dump_tdep): Print sigtramp fields.
+	* arc-tdep.h (gdbarch_tdep): Add sigtramp fields.
+
+2020-12-21  Tom Tromey  <tom@tromey.com>
+
+	* expression.h (enum noside): Move earlier.
+
+2020-12-21  Peter Waller  <p@pwaller.net>
+
+	* interps.c (interpreter_exec_cmd): Restore streams pointers.
+
+2020-12-21  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* record.c (require_record_target): Rephrase error message.
+	(info_record_command): Likewise.
+
+2020-12-19  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR exp/27070
+	* gdbtypes.c (check_types_equal): Don't compare types of enum fields.
+
+2020-12-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* configure.ac: Move the static libs vs. source-highlight
+	error message to a better place.
+	* configure: Regenerate.
+
+2020-12-18  Hannes Domani  <ssbssa@yahoo.de>
+
+	* gdb-gdb.py.in: Fix main_type field name.
+
+2020-12-18  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python/py-value.c (valpy_format_string): Implement address keyword.
+
+2020-12-18  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python/py-type.c (typy_get_composite): Add TYPE_CODE_METHOD.
+
+2020-12-18  Jameson Nash  <vtjnash@gmail.com>
+
+	* coffread.c (linetab_offset): Change type to file_ptr.
+	(linetab_size): Likewise.
+	(enter_linenos): Change parameter type to file_ptr.
+	(init_lineno): Likewise.
+	(init_stringtab): Likewise.
+	(coff_symtab_read): Likewise.
+	(coff_symfile_read): Change variable types to file_ptr.
+
+2020-12-17  Tom Tromey  <tromey@adacore.com>
+
+	* printcmd.c (print_variable_and_value): Don't use n_spaces.
+
+2020-12-17  Tom Tromey  <tromey@adacore.com>
+
+	* gdbtypes.c (print_args, dump_fn_fieldlists, print_cplus_stuff)
+	(print_gnat_stuff, print_fixed_point_type_info)
+	(recursive_dump_type): Update.
+	* go32-nat.c (go32_sysinfo, display_descriptor): Update.
+	* c-typeprint.c (c_type_print_base_struct_union)
+	(c_type_print_base_1): Update.
+	* rust-lang.c (rust_internal_print_type): Update.
+	* f-typeprint.c (f_language::f_type_print_base): Update.
+	* utils.h (fprintfi_filtered, printfi_filtered): Remove.
+	* m2-typeprint.c (m2_record_fields): Update.
+	* p-typeprint.c (pascal_type_print_base): Update.
+	* compile/compile-loc2c.c (push, pushf, unary, binary)
+	(do_compile_dwarf_expr_to_c): Update.
+	* utils.c (fprintfi_filtered, printfi_filtered): Remove.
+
+2020-12-16  Tom Tromey  <tom@tromey.com>
+
+	* rust-exp.y (rust_lex_tests): Update.
+	* parser-defs.h (parser_state): Add void_p parameter.
+	<void_context_p>: New member.
+	* parse.c (parse_exp_in_context): Update.
+	* language.h (language_defn::post_parser): Remove void_context_p,
+	completing, tracker parameters.  Add parser state.
+	* ada-lang.c (ada_language::post_parser): Update.
+
+2020-12-16  Tom Tromey  <tom@tromey.com>
+
+	* parse.c (parse_exp_1, parse_expression_for_completion): Update.
+	(parse_exp_in_context): Change void_context_p to bool.
+	* language.h (struct language_defn) <post_parser>: Change
+	void_context_p to bool.
+	* ada-lang.c (class ada_language) <post_parser>: Update.
+
+2020-12-16  Tom Tromey  <tom@tromey.com>
+	    Tom Tromey  <tromey@redhat.com>
+	    Tom de Vries  <tdevries@suse.de>
+
+	* utils.h (get_chars_per_line): Declare.
+	* utils.c (get_chars_per_line): New function.
+	(fputs_maybe_filtered): Handle '\r'.
+	* ui-out.h (ui_out::progress_meter): New class.
+	(ui_out::progress, ui_out::do_progress_start)
+	(ui_out::do_progress_notify, ui_out::do_progress_end): New
+	methods.
+	* ui-out.c (do_progress_end)
+	(make_cleanup_ui_out_progress_begin_end, ui_out_progress): New
+	functions.
+	* mi/mi-out.h (mi_ui_out::do_progress_start)
+	(mi_ui_out::do_progress_notify, mi_ui_out::do_progress_end): New
+	methods.
+	* cli-out.h (struct cli_ui_out) <do_progress_start,
+	do_progress_notify, do_progress_end>: New methods.
+	<enum meter_stat, struct cli_progress_info>: New.
+	<m_meters>: New member.
+	* cli-out.c (cli_ui_out::do_progress_start)
+	(cli_ui_out::do_progress_notify, cli_ui_out::do_progress_end): New
+	methods.
+
+2020-12-16  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-tdep.c (aarch64_record_data_proc_simd_fp): Record FPSR.
+
+2020-12-16  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-nat.c
+	(aarch64_linux_nat_target::stopped_data_address): Handle the TBI.
+
+2020-12-15  Rae Kim  <rae.kim@gmail.com>
+
+	* cli/cli-script.c (do_document_command): Rename from
+	document_command. Handle multi-line input.
+	(multi_line_command_p): Handle document_control.
+	(build_command_line): Likewise.
+	(execute_control_command_1): Likewise.
+	(process_next_line): Likewise.
+	(document_command): Call do_document_command.
+	* cli/cli-script.h (enum command_control_type): Add
+	document_control.
+
+2020-12-15  Tom Tromey  <tom@tromey.com>
+
+	* stap-probe.c (stap_probe::evaluate_argument): Use
+	evaluate_expression.
+	* dtrace-probe.c (dtrace_probe::evaluate_argument): Use
+	evaluate_expression.
+	* value.h (evaluate_expression): Add expect_type parameter.
+	* objc-lang.c (print_object_command): Call evaluate_expression.
+	* eval.c (evaluate_expression): Add expect_type parameter.
+
+2020-12-15  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (varobj_create): Use first_opcode.
+	* value.c (init_if_undefined_command): Use first_opcode.
+	* typeprint.c (whatis_exp): Use first_opcode.
+	* tracepoint.c (validate_actionline): Use first_opcode.
+	(encode_actions_1): Use first_opcode.
+	* stack.c (return_command): Use first_opcode.
+	* expression.h (struct expression) <first_opcode>: New method.
+	* eval.c (parse_and_eval_type): Use first_opcode.
+	* dtrace-probe.c (dtrace_process_dof_probe): Use first_opcode.
+
+2020-12-15  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (evaluate_subexp_f): Update.
+	* expression.h (evaluate_subexp_do_call): Update.
+	* eval.c (evaluate_subexp_do_call): Add callee parameter.  Replace
+	nargs, argvec with array_view.
+	(evaluate_funcall): Update.
+
+2020-12-15  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (num_component_specs): Remove.
+	(assign_aggregate): Update.
+	(aggregate_assign_positional, aggregate_assign_from_choices)
+	(aggregate_assign_others, add_component_interval): Change
+	arguments.
+
+2020-12-15  Tom Tromey  <tromey@adacore.com>
+
+	* cli/cli-decode.c (deprecated_cmd_warning): Use title style for
+	command names.
+
+2020-12-14  Tom Tromey  <tom@tromey.com>
+
+	* dtrace-probe.c (dtrace_process_dof_probe): Use value_type.
+	* typeprint.c (whatis_exp): Always use evaluate_type.
+	(maintenance_print_type): Likewise.  Simplify.
+
+2020-12-14  Tom Tromey  <tromey@adacore.com>
+
+	* dictionary.c (language_defn::search_name_hash): Ignore "B".
+	* ada-lang.c (advance_wild_match): Ignore "B".
+	(full_match): Remove.
+	(do_full_match): Rewrite.
+
+2020-12-14  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (get_var_value): Only consider exact matches.
+
+2020-12-14  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (rewrite_array_type): New function.
+        (quirk_ada_thick_pointer_struct): Use rewrite_array_type.
+
+2020-12-14  Tom Tromey  <tromey@adacore.com>
+
+	* valarith.c (fixed_point_binop): Call error on division by zero.
+
+2020-12-13  Tom Tromey  <tom@tromey.com>
+
+	* gdbtypes.c (safe_parse_type): Make argument const.
+	* value.h (parse_and_eval_type): Make argument const.
+	* eval.c (parse_and_eval_type): Make argument const.
+
+2020-12-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention new commands.
+	* target-dcache.c: Add 'cli/cli-cmds.h' include.
+	(maint_flush_dcache_command): New function.
+	(_initialize_target_dcache): Create new 'maint flush dcache'
+	command.
+
+2020-12-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention new commands, and that the old commands are now
+	deprecated.
+	* cli/cli-cmds.c (maintenanceflushlist): Define.
+	* cli/cli-cmds.h (maintenanceflushlist): Declare.
+	* maint.c (_initialize_maint_cmds): Initialise
+	maintenanceflushlist.
+	* regcache.c: Add 'cli/cli-cmds.h' include.
+	(reg_flush_command): Add header comment.
+	(_initialize_regcache): Create new 'maint flush register-cache'
+	command, make 'flushregs' an alias.
+	* symtab.c: Add 'cli/cli-cmds.h' include.
+	(_initialize_symtab): Create new 'maint flush symbol-cache'
+	command, make old command an alias.
+
+2020-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cli/cli-decode.c (deprecated_cmd_warning): Ignore the prefix
+	result from lookup_cmd_composition_1, use the prefixes from both
+	the command and the alias instead.
+	(lookup_cmd_composition_1): Initial prefix command is the based on
+	the search list being passed in.  Simplify the logic for tracking
+	the prefix command.  Replace a use of alloca with a local
+	std::string.
+
+2020-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cli/cli-decode.c (deprecated_cmd_warning): Use nullptr instead
+	of NULL.  Don't print message piece by piece, but sentence at a
+	time to allow internationalisation.  Some whitespace cleanup.
+
+2020-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR cli/15104
+	* cli/cli-decode.c (lookup_cmd_1): Pass command list to
+	deprecated_cmd_warning.
+	(deprecated_cmd_warning): Take extra parameter, call
+	lookup_cmd_composition_1 and pass new parameter through.
+	(lookup_cmd_composition_1): New function, takes implementation of
+	lookup_cmd_composition but with extra parameter.
+	(lookup_cmd_composition): Now calls lookup_cmd_composition_1
+	passing in cmdlist.
+	* command.h (deprecated_cmd_warning): Add extra parameter to
+	declaration.
+	* top.c (execute_command): Pass cmdlist to deprecated_cmd_warning.
+
+2020-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cli/cli-decode.c (lookup_cmd_1): Move header comment into
+	command.h, add extra parameter, and use this to guard giving a
+	warning.
+	* command.h (lookup_cmd_1): Add comment from cli/cli-decode.c,
+	include argument names in declaration, add new argument.
+	* completer.c (complete_line_internal_1): Remove unneeded
+	brackets, pass extra argument to lookup_cmd_1.
+
+2020-12-11  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.h (debug_infrun): Make a bool.
+	* infrun.c (debug_infrun): Make a bool.
+	(_initialize_infrun): Use add_setshow_boolean_cmd to define "set
+	debug infrun".
+
+2020-12-11  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* displaced-stepping.h (displaced_debug_printf): Use
+	debug_prefixed_printf_cond.
+	* dwarf2/read.c (dwarf_read_debug_printf): Likewise.
+	(dwarf_read_debug_printf_v): Likewise.
+	* infrun.h (infrun_debug_printf): Likewise.
+	* linux-nat.c (linux_nat_debug_printf): Likewise.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* p-exp.y (intvar): Remove global.
+	(DOLLAR_VARIABLE): Change type.
+	(start): Update.
+	(exp): Call write_dollar_variable here...
+	(yylex): ... not here.
+	* m2-exp.y (DOLLAR_VARIABLE): Change type.
+	(variable): Call write_dollar_variable here...
+	(yylex): ... not here.
+	* f-exp.y (DOLLAR_VARIABLE): Change type.
+	(exp): Call write_dollar_variable here...
+	(yylex): ... not here.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (varobj_create): Update.
+	(install_variable): Return void.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (instantiate_pretty_printer): Use gdbpy_ref.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (varobj_clear_saved_item): Remove.
+	(update_dynamic_varobj_children): Update.
+	(varobj::~varobj): Don't call varobj_clear_saved_item.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (install_dynamic_child, varobj_clear_saved_item)
+	(update_dynamic_varobj_children, create_child)
+	(create_child_with_value): Update.
+	* varobj-iter.h (struct varobj_item) <value>: Now a
+	value_ref_ptr.
+	* python/py-varobj.c (py_varobj_iter::next): Call release_value.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (struct varobj_dynamic) <child_iter>: Now unique_ptr.
+	(varobj_get_iterator): Return unique_ptr.
+	(update_dynamic_varobj_children, install_visualizer)
+	(varobj::~varobj): Update.
+	* python/python-internal.h (py_varobj_get_iterator): Return
+	unique_ptr.
+	* python/py-varobj.c (py_varobj_get_iterator): Return unique_ptr.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (struct varobj_dynamic) <saved_item>: Now unique_ptr.
+	(varobj_clear_saved_item, update_dynamic_varobj_children):
+	Update.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (update_dynamic_varobj_children): Update.
+	* varobj-iter.h (struct varobj_iter) <next>: Change return type.
+	* python/py-varobj.c (struct py_varobj_iter) <next>: Change return
+	type.
+	(py_varobj_iter::next): Likewise.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (update_dynamic_varobj_children, install_visualizer)
+	(varobj::~varobj): Update.
+	* varobj-iter.h (struct varobj_iter): Change to interface class.
+	(struct varobj_iter_ops): Remove.
+	(varobj_iter_next, varobj_iter_delete): Remove.
+	* python/py-varobj.c (struct py_varobj_iter): Derive from
+	varobj_iter.  Add constructor, destructor.  Rename members.
+	(py_varobj_iter::~py_varobj_iter): Rename from
+	py_varobj_iter_dtor.
+	(py_varobj_iter::next): Rename from py_varobj_iter_next.
+	(py_varobj_iter_ops): Remove.
+	(py_varobj_iter): Rename from py_varobj_iter_ctor.
+	(py_varobj_iter_new): Remove.
+	(py_varobj_get_iterator): Update.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.h (all_root_varobjs): Take a function_view.
+	* varobj.c (all_root_varobjs): Take a function_view.
+	(varobj_invalidate_iter): Remove unused parameter.
+	(varobj_invalidate): Update.
+	* mi/mi-cmd-var.c (struct mi_cmd_var_update): Remove.
+	(mi_cmd_var_update_iter): Change parameters.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (struct varobj_root) <next>: Remove.
+	(struct vlist): Remove.
+	(rootlist): Now a std::list.
+	(install_variable, uninstall_variable, all_root_varobjs): Update.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* varobj.c (VAROBJ_TABLE_SIZE): Remove.
+	(varobj_table): Now htab_t.
+	(varobj_get_handle, install_variable, uninstall_variable):
+	Update.
+	(hash_varobj, eq_varobj_and_string): New functions.
+	(hash_varobj): Update.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* inline-frame.c (stopped_by_user_bp_inline_frame): Update.
+	* ada-lang.c (check_status_exception): Update.
+	* breakpoint.c (free_bp_location): Remove.
+	(decref_bp_location): Use bp_location_ref_policy.
+	(bpstats::bpstats): Don't call incref_bp_location.
+	(bpstats::~bpstats): Remove.
+	(bpstats::bpstats): Update.
+	(bpstat_check_watchpoint, bpstat_check_breakpoint_conditions)
+	(bp_location::bp_location): Update.
+	(incref_bp_location): Remove.
+	(bkpt_print_it): Update.
+	* breakpoint.h (class bp_location): Derive from
+	refcounted_object.
+	(struct bpstats): Remove destructor.
+	<bp_location_at>: Now a bp_location_ref_ptr.
+	<refc>: Remove.
+	(bp_location_ref_ptr): New typedef.
+	(struct bp_location_ref_policy): New.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* thread.c (class scoped_inc_dec_ref): Remove.
+	(tp_array_compar_ascending, tp_array_compar_descending): Change
+	parameter types.
+	(thread_apply_all_command): Use thread_info_ref.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* infrun.c (struct stop_context) <thread>: Now a thread_info_ref.
+	(stop_context::stop_context): Update.
+	(stop_context::~stop_context): Remove.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* inferior.c (current_inferior_): Change type.
+	(current_inferior, set_current_inferior, initialize_inferiors):
+	Update.
+
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+	* gdbthread.h (class enable_thread_stack_temporaries) <m_thr>:
+	Change type.
+
+2020-12-11  Tom Tromey  <tromey@adacore.com>
+
+	* ada-tasks.c (struct ada_tasks_pspace_data) <cpu_id_offset>: New
+	field.
+	(ada_get_tcb_types_info): Look for __gnat_gdb_cpu_first_id.
+	(read_atcb): Use cpu_id_offset.
+
+2020-12-10  Kevin Buettner  <kevinb@redhat.com>
+
+	* ada-lang.c (ada_fold_name): Fix off-by-one error.
+
+2020-12-10  Luis Machado  <luis.machado@linaro.org>
+
+	* breakpoint.c (should_be_inserted): Don't output newline.
+
+2020-12-10  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-tdep.c (aarch64_linux_restore_vreg) New function.
+	(aarch64_linux_sigframe_init): Call aarch64_linux_restore_vreg.
+	* aarch64-tdep.h (V_REGISTER_SIZE): Move to ...
+	* arch/aarch64.h: ... here.
+	* nat/aarch64-sve-linux-ptrace.c: Include endian.h.
+	(aarch64_maybe_swab128): New function.
+	(aarch64_sve_regs_copy_to_reg_buf)
+	(aarch64_sve_regs_copy_from_reg_buf): Adjust FPSIMD entries.
+	* trad-frame.c (trad_frame_reset_saved_regs): Initialize
+	the data field.
+	(TF_REG_VALUE_BYTES): New enum value.
+	(trad_frame_value_bytes_p): New function.
+	(trad_frame_set_value_bytes): New function.
+	(trad_frame_set_reg_value_bytes): New function.
+	(trad_frame_get_prev_register): Handle register values saved as bytes.
+	* trad-frame.h (trad_frame_set_reg_value_bytes): New prototype.
+	(struct trad_frame_saved_reg) <data>: New field.
+	(trad_frame_set_value_bytes): New prototype.
+	(trad_frame_value_bytes_p): New prototype.
+
+2020-12-07  Mihails Strasuns  <mihails.strasuns@intel.com>
+
+	* jit.c (mem_bfd*, bfd_open_from_target_memory): Removed.
+	* gdb_bfd.h (gdb_bfd_open_from_target_memory): New function.
+	* gdb_bfd.c (mem_bfd*, gdb_bfd_open_from_target_memory): New functions.	
+
+2020-12-09  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_lookup_encoded_symbol): Use add_angle_brackets.
+
+2020-12-09  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (get_dwarf2_rational_constant): Change "numerator"
+	and "denominator" to gdb_mpz.  Handle block forms.
+	(get_dwarf2_unsigned_rational_constant): Change "numerator" and
+	"denominator" to gdb_mpz.
+	(finish_fixed_point_type): Update.
+	(has_zero_over_zero_small_attribute): Update.
+
+2020-12-09  Tom Tromey  <tromey@adacore.com>
+
+	* expprint.c (op_name): Update.
+	* expression.h (enum exp_opcode): Update.
+	* std-operator.def: Add more opcodes.
+	* ada-operator.def, fortran-operator.def: Remove, moving contents
+	into std-operator.def.
+
+2020-12-09  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.c (get_discrete_low_bound, get_discrete_high_bound):
+	Return {} instead of false.
+	(get_discrete_bounds): Compute high bound only if low bound is
+	valid.
+
+2020-12-09  Simon Marchi  <simon.marchi@efficios.com>
+
+	PR 26875, PR 26901
+	* gdbtypes.c (get_discrete_low_bound): Make non-static.
+	(get_discrete_high_bound): Make non-static.
+	* gdbtypes.h (get_discrete_low_bound): New declaration.
+	(get_discrete_high_bound): New declaration.
+	* valarith.c (value_subscript): Only fetch high bound if
+	necessary.
+
+2020-12-09  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (get_discrete_bounds): Implement with
+	get_discrete_low_bound and get_discrete_high_bound.
+	(get_discrete_low_bound): New.
+	(get_discrete_high_bound): New.
+
+2020-12-09  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (get_discrete_bounds): Return bool, adjust all
+	callers.
+	* gdbtypes.c (get_discrete_bounds): Return bool.
+
+2020-12-09  Simon Marchi  <simon.marchi@efficios.com>
+
+	* ada-lang.c (ada_value_slice_from_ptr): Adjust.
+	(ada_value_slice): Adjust.
+	(pos_atr): Adjust.
+	* gdbtypes.c (get_discrete_bounds): Adjust.
+	(discrete_position): Return optional.
+	* gdbtypes.h (discrete_position): Return optional.
+
+2020-12-07  Tom Tromey  <tromey@adacore.com>
+
+	* maint.c (_initialize_maint_cmds): Use expression command
+	completer for "maint print type".
+
+2020-12-07  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* completer.c (complete_explicit_location): Also add keywords
+	that start with '-' to the completion list.
+
+2020-12-07  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* linespec.c (linespec_lexer_lex_keyword): The "-force-condition"
+	keyword may be followed by any keyword.
+	* breakpoint.c (find_condition_and_thread): Advance 'tok' by
+	'toklen' in the case for "-force-condition".
+
+2020-12-07  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* main.c (catch_command_errors): Add a flag parameter; invoke
+	`bpstat_do_actions` if the flag is set.
+	(execute_cmdargs): Update a call to `catch_command_errors`.
+
+2020-12-07  Tom de Vries  <tdevries@suse.de>
+
+	* ada-lang.c (replace_operator_with_call): Handle shrink resize.
+
+2020-12-06  Tom Tromey  <tom@tromey.com>
+
+	PR ada/26999
+	* ada-lang.c (replace_operator_with_call): Rewrite.
+
+2020-12-06  Giancarlo Frix  <gfrix@rocketsoftware.com>  (tiny change)
+
+	PR breakpoints/27009
+	* s390-tdep.h (op_bc): Correct BC opcode value.
+
+2020-12-06  Joel Brobecker  <brobecker@adacore.com>
+
+	* gmp-utils.h (gdb_mpz::safe_export): New private method.
+	(gdb_mpz::as_integer): Reimplement using gdb_mpz::safe_export.
+	* gmp-utils.c (gdb_mpz::write): Rewrite using gdb_mpz::safe_export.
+	(gdb_mpz::safe_export): New method.
+	* unittests/gmp-utils-selftests .c (gdb_mpz_as_integer):
+	Update function description.
+	(check_as_integer_raises_out_of_range_error): New function.
+	(gdb_mpz_as_integer_out_of_range): New function.
+	(_initialize_gmp_utils_selftests): Register
+	gdb_mpz_as_integer_out_of_range as a selftest.
+
+2020-12-05  Joel Brobecker  <brobecker@adacore.com>
+
+	* gmp-utils.c (gdb_mpz::read): Use HOST_CHAR_BIT instead of
+	TARGET_CHAR_BIT.
+	(gdb_mpz::write): Likewise.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* amd64-linux-tdep.c (amd64_linux_init_abi): Pass 2 as the
+	number of displaced step buffers.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* displaced-stepping.h (struct displaced_step_buffer): Rename
+	to...
+	(struct displaced_step_buffers): ... this.
+	<m_addr, m_current_thread, m_copy_insn_closure>: Remove.
+	<struct displaced_step_buffer>: New inner class.
+	<m_buffers>: New.
+	* displaced-stepping.c (displaced_step_buffer::prepare): Rename
+	to...
+	(displaced_step_buffers::prepare): ... this, adjust for multiple
+	buffers.
+	(displaced_step_buffer::finish):  Rename to...
+	(displaced_step_buffers::finish): ... this, adjust for multiple
+	buffers.
+	(displaced_step_buffer::copy_insn_closure_by_addr): Rename to...
+	(displaced_step_buffers::copy_insn_closure_by_addr): ... this,
+	adjust for multiple buffers.
+	(displaced_step_buffer::restore_in_ptid): Rename to...
+	(displaced_step_buffers::restore_in_ptid): ... this, adjust for
+	multiple buffers.
+	* linux-tdep.h (linux_init_abi): Change supports_displaced_step
+	for num_disp_step_buffers.
+	* linux-tdep.c (struct linux_gdbarch_data)
+	<num_disp_step_buffers>: New field.
+	(struct linux_info) <disp_step_buf>: Rename to...
+	<disp_step_bufs>: ... this, change type to
+	displaced_step_buffers.
+	(linux_displaced_step_prepare): Use
+	linux_gdbarch_data::num_disp_step_buffers to create that number
+	of buffers.
+	(linux_displaced_step_finish): Adjust.
+	(linux_displaced_step_copy_insn_closure_by_addr): Adjust.
+	(linux_displaced_step_restore_all_in_ptid): Adjust.
+	(linux_init_abi): Change supports_displaced_step parameter for
+	num_disp_step_buffers, save it in linux_gdbarch_data.
+	* aarch64-linux-tdep.c (aarch64_linux_init_abi): Adjust.
+	* alpha-linux-tdep.c (alpha_linux_init_abi): Adjust.
+	* amd64-linux-tdep.c (amd64_linux_init_abi_common): Change
+	supports_displaced_step parameter for num_disp_step_buffers.
+	(amd64_linux_init_abi): Adjust.
+	(amd64_x32_linux_init_abi): Adjust.
+	* arc-linux-tdep.c (arc_linux_init_osabi): Adjust.
+	* arm-linux-tdep.c (arm_linux_init_abi): Adjust.
+	* bfin-linux-tdep.c (bfin_linux_init_abi): Adjust.
+	* cris-linux-tdep.c (cris_linux_init_abi): Adjust.
+	* csky-linux-tdep.c (csky_linux_init_abi): Adjust.
+	* frv-linux-tdep.c (frv_linux_init_abi): Adjust.
+	* hppa-linux-tdep.c (hppa_linux_init_abi): Adjust.
+	* i386-linux-tdep.c (i386_linux_init_abi): Adjust.
+	* ia64-linux-tdep.c (ia64_linux_init_abi): Adjust.
+	* m32r-linux-tdep.c (m32r_linux_init_abi): Adjust.
+	* m68k-linux-tdep.c (m68k_linux_init_abi):
+	* microblaze-linux-tdep.c (microblaze_linux_init_abi):
+	* mips-linux-tdep.c (mips_linux_init_abi): Adjust.
+	* mn10300-linux-tdep.c (am33_linux_init_osabi): Adjust.
+	* nios2-linux-tdep.c (nios2_linux_init_abi): Adjust.
+	* or1k-linux-tdep.c (or1k_linux_init_abi): Adjust.
+	* ppc-linux-tdep.c (ppc_linux_init_abi): Adjust.
+	* riscv-linux-tdep.c (riscv_linux_init_abi): Adjust.
+	* rs6000-tdep.c (struct ppc_inferior_data) <disp_step_buf>:
+	Change type to displaced_step_buffers.
+	* s390-linux-tdep.c (s390_linux_init_abi_any): Adjust.
+	* sh-linux-tdep.c (sh_linux_init_abi): Adjust.
+	* sparc-linux-tdep.c (sparc32_linux_init_abi): Adjust.
+	* sparc64-linux-tdep.c (sparc64_linux_init_abi): Adjust.
+	* tic6x-linux-tdep.c (tic6x_uclinux_init_abi): Adjust.
+	* tilegx-linux-tdep.c (tilegx_linux_init_abi): Adjust.
+	* xtensa-linux-tdep.c (xtensa_linux_init_abi): Adjust.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* linux-tdep.c (init_linux_gdbarch_data): Change parameter to
+	obkstack.
+	(_initialize_linux_tdep): Register pre-init gdb data instead of
+	post-init.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* displaced-stepping.h (struct
+	displaced_step_copy_insn_closure): Adjust comments.
+	(struct displaced_step_inferior_state) <step_thread,
+	step_gdbarch, step_closure, step_original, step_copy,
+	step_saved_copy>: Remove fields.
+	(struct displaced_step_thread_state): New.
+	(struct displaced_step_buffer): New.
+	* displaced-stepping.c (displaced_step_buffer::prepare): New.
+	(write_memory_ptid): Move from infrun.c.
+	(displaced_step_instruction_executed_successfully): New,
+	factored out of displaced_step_finish.
+	(displaced_step_buffer::finish): New.
+	(displaced_step_buffer::copy_insn_closure_by_addr): New.
+	(displaced_step_buffer::restore_in_ptid): New.
+	* gdbarch.sh (displaced_step_location): Remove.
+	(displaced_step_prepare, displaced_step_finish,
+	displaced_step_copy_insn_closure_by_addr,
+	displaced_step_restore_all_in_ptid): New.
+	* gdbarch.c: Re-generate.
+	* gdbarch.h: Re-generate.
+	* gdbthread.h (class thread_info) <displaced_step_state>: New
+	field.
+	(thread_step_over_chain_remove): New declaration.
+	(thread_step_over_chain_next): New declaration.
+	(thread_step_over_chain_length): New declaration.
+	* thread.c (thread_step_over_chain_remove): Make non-static.
+	(thread_step_over_chain_next): New.
+	(global_thread_step_over_chain_next): Use
+	thread_step_over_chain_next.
+	(thread_step_over_chain_length): New.
+	(global_thread_step_over_chain_enqueue): Add debug print.
+	(global_thread_step_over_chain_remove): Add debug print.
+	* infrun.h (get_displaced_step_copy_insn_closure_by_addr):
+	Remove.
+	* infrun.c (get_displaced_stepping_state): New.
+	(displaced_step_in_progress_any_inferior): Remove.
+	(displaced_step_in_progress_thread): Adjust.
+	(displaced_step_in_progress): Adjust.
+	(displaced_step_in_progress_any_thread): New.
+	(get_displaced_step_copy_insn_closure_by_addr): Remove.
+	(gdbarch_supports_displaced_stepping): Use
+	gdbarch_displaced_step_prepare_p.
+	(displaced_step_reset): Change parameter from inferior to
+	thread.
+	(displaced_step_prepare_throw): Implement using
+	gdbarch_displaced_step_prepare.
+	(write_memory_ptid): Move to displaced-step.c.
+	(displaced_step_restore): Remove.
+	(displaced_step_finish): Implement using
+	gdbarch_displaced_step_finish.
+	(start_step_over): Allow starting more than one displaced step.
+	(prepare_for_detach): Handle possibly multiple threads doing
+	displaced steps.
+	(handle_inferior_event): Handle possibility that fork event
+	happens while another thread displaced steps.
+	* linux-tdep.h (linux_displaced_step_prepare): New.
+	(linux_displaced_step_finish): New.
+	(linux_displaced_step_copy_insn_closure_by_addr): New.
+	(linux_displaced_step_restore_all_in_ptid): New.
+	(linux_init_abi): Add supports_displaced_step parameter.
+	* linux-tdep.c (struct linux_info) <disp_step_buf>: New field.
+	(linux_displaced_step_prepare): New.
+	(linux_displaced_step_finish): New.
+	(linux_displaced_step_copy_insn_closure_by_addr): New.
+	(linux_displaced_step_restore_all_in_ptid): New.
+	(linux_init_abi): Add supports_displaced_step parameter,
+	register displaced step methods if true.
+	(_initialize_linux_tdep): Register inferior_execd observer.
+	* amd64-linux-tdep.c (amd64_linux_init_abi_common): Add
+	supports_displaced_step parameter, adjust call to
+	linux_init_abi.  Remove call to
+	set_gdbarch_displaced_step_location.
+	(amd64_linux_init_abi): Adjust call to
+	amd64_linux_init_abi_common.
+	(amd64_x32_linux_init_abi): Likewise.
+	* aarch64-linux-tdep.c (aarch64_linux_init_abi): Adjust call to
+	linux_init_abi.  Remove call to
+	set_gdbarch_displaced_step_location.
+	* arm-linux-tdep.c (arm_linux_init_abi): Likewise.
+	* i386-linux-tdep.c (i386_linux_init_abi): Likewise.
+	* alpha-linux-tdep.c (alpha_linux_init_abi): Adjust call to
+	linux_init_abi.
+	* arc-linux-tdep.c (arc_linux_init_osabi): Likewise.
+	* bfin-linux-tdep.c (bfin_linux_init_abi): Likewise.
+	* cris-linux-tdep.c (cris_linux_init_abi): Likewise.
+	* csky-linux-tdep.c (csky_linux_init_abi): Likewise.
+	* frv-linux-tdep.c (frv_linux_init_abi): Likewise.
+	* hppa-linux-tdep.c (hppa_linux_init_abi): Likewise.
+	* ia64-linux-tdep.c (ia64_linux_init_abi): Likewise.
+	* m32r-linux-tdep.c (m32r_linux_init_abi): Likewise.
+	* m68k-linux-tdep.c (m68k_linux_init_abi): Likewise.
+	* microblaze-linux-tdep.c (microblaze_linux_init_abi): Likewise.
+	* mips-linux-tdep.c (mips_linux_init_abi): Likewise.
+	* mn10300-linux-tdep.c (am33_linux_init_osabi): Likewise.
+	* nios2-linux-tdep.c (nios2_linux_init_abi): Likewise.
+	* or1k-linux-tdep.c (or1k_linux_init_abi): Likewise.
+	* riscv-linux-tdep.c (riscv_linux_init_abi): Likewise.
+	* s390-linux-tdep.c (s390_linux_init_abi_any): Likewise.
+	* sh-linux-tdep.c (sh_linux_init_abi): Likewise.
+	* sparc-linux-tdep.c (sparc32_linux_init_abi): Likewise.
+	* sparc64-linux-tdep.c (sparc64_linux_init_abi): Likewise.
+	* tic6x-linux-tdep.c (tic6x_uclinux_init_abi): Likewise.
+	* tilegx-linux-tdep.c (tilegx_linux_init_abi): Likewise.
+	* xtensa-linux-tdep.c (xtensa_linux_init_abi): Likewise.
+	* ppc-linux-tdep.c (ppc_linux_init_abi): Adjust call to
+	linux_init_abi.  Remove call to
+	set_gdbarch_displaced_step_location.
+	* arm-tdep.c (arm_pc_is_thumb): Call
+	gdbarch_displaced_step_copy_insn_closure_by_addr instead of
+	get_displaced_step_copy_insn_closure_by_addr.
+	* rs6000-aix-tdep.c (rs6000_aix_init_osabi): Adjust calls to
+	clear gdbarch methods.
+	* rs6000-tdep.c (struct ppc_inferior_data): New structure.
+	(get_ppc_per_inferior): New function.
+	(ppc_displaced_step_prepare): New function.
+	(ppc_displaced_step_finish): New function.
+	(ppc_displaced_step_restore_all_in_ptid): New function.
+	(rs6000_gdbarch_init): Register new gdbarch methods.
+	* s390-tdep.c (s390_gdbarch_init): Don't call
+	set_gdbarch_displaced_step_location, set new gdbarch methods.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* Makefile.in (COMMON_SFILES): Add displaced-stepping.c.
+	* aarch64-tdep.h: Include displaced-stepping.h.
+	* displaced-stepping.h (struct displaced_step_copy_insn_closure):
+	Move here.
+	(displaced_step_copy_insn_closure_up): Move here.
+	(struct buf_displaced_step_copy_insn_closure): Move here.
+	(struct displaced_step_inferior_state): Move here.
+	(debug_displaced): Move here.
+	(displaced_debug_printf_1): Move here.
+	(displaced_debug_printf): Move here.
+	* displaced-stepping.c: New file.
+	* gdbarch.sh: Include displaced-stepping.h in gdbarch.h.
+	* gdbarch.h: Re-generate.
+	* inferior.h: Include displaced-stepping.h.
+	* infrun.h (debug_displaced): Move to displaced-stepping.h.
+	(displaced_debug_printf_1): Likewise.
+	(displaced_debug_printf): Likewise.
+	(struct displaced_step_copy_insn_closure): Likewise.
+	(displaced_step_copy_insn_closure_up): Likewise.
+	(struct buf_displaced_step_copy_insn_closure): Likewise.
+	(struct displaced_step_inferior_state): Likewise.
+	* infrun.c (show_debug_displaced): Move to displaced-stepping.c.
+	(displaced_debug_printf_1): Likewise.
+	(displaced_step_copy_insn_closure::~displaced_step_copy_insn_closure):
+	Likewise.
+	(_initialize_infrun): Don't register "set/show debug displaced".
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* linux-tdep.c (get_linux_inferior_data): Add inferior
+	parameter.
+	(linux_vsyscall_range): Pass current inferior.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.c (displaced_step_prepare_throw): Change return type to
+	displaced_step_prepare_status.
+	(displaced_step_prepare): Likewise.
+	(displaced_step_finish): Change return type to
+	displaced_step_finish_status.
+	(resume_1): Adjust.
+	(stop_all_threads): Adjust.
+	* displaced-stepping.h: New file.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.c (displaced_step_fixup): Rename to...
+	(displaced_step_finish): ... this, update all callers.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.h (get_displaced_step_closure_by_addr): Rename to...
+	(get_displaced_step_copy_insn_closure_by_addr): ... this.
+	Update all users.
+	(displaced_step_closure): Rename to...
+	(displaced_step_copy_insn_closure): ... this.  Update all users.
+	(displaced_step_closure_up): Rename to...
+	(displaced_step_copy_insn_closure_up). ... this.  Update all
+	users.
+	(buf_displaced_step_closure): Rename to...
+	(buf_displaced_step_copy_insn_closure): ... this.  Update all
+	users.
+	* infrun.c (get_displaced_step_closure_by_addr): Rename to...
+	(get_displaced_step_copy_insn_closure_by_addr): ... this.
+	Update all users.
+	* aarch64-tdep.c (aarch64_displaced_step_closure): Rename to...
+	(aarch64_displaced_step_copy_insn_closure): ... this.  Update
+	all users.
+	* amd64-tdep.c (amd64_displaced_step_closure): Rename to...
+	(amd64_displaced_step_copy_insn_closure): ... this.  Update all
+	users.
+	* arm-tdep.h (arm_displaced_step_closure): Rename to...
+	(arm_displaced_step_copy_insn_closure): ... this.  Update all
+	users.
+	* i386-tdep.h (i386_displaced_step_closure): Rename to...
+	(i386_displaced_step_copy_insn_closure): ... this.  Update all
+	users.
+	* rs6000-tdep.c (ppc_displaced_step_closure): Rename to...
+	(ppc_displaced_step_copy_insn_closure): ... this.  Update all
+	users.
+	* s390-tdep.c (s390_displaced_step_closure): Rename to...
+	(s390_displaced_step_copy_insn_closure): ... this.  Update all
+	users.
+	* gdbarch.h: Re-generate.
+	* gdbarch.c: Re-generate.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbthread.h (thread_step_over_chain_enqueue): Rename to...
+	(global_thread_step_over_chain_enqueue): ... this.  Update all
+	users.
+	(thread_step_over_chain_remove): Rename to...
+	(global_thread_step_over_chain_remove): ... this.  Update all
+	users.
+	(thread_step_over_chain_next): Rename to...
+	(global_thread_step_over_chain_next): ... this.  Update all
+	users.
+	* infrun.h (step_over_queue_head): Rename to...
+	(global_thread_step_over_chain_head): ... this.  Update all
+	users.
+	* infrun.c (step_over_queue_head): Rename to...
+	(global_thread_step_over_chain_head): ... this.  Update all
+	users.
+	* thread.c (step_over_chain_remove): Rename to...
+	(thread_step_over_chain_remove): ... this.  Update all users.
+	(thread_step_over_chain_next): Rename to...
+	(global_thread_step_over_chain_next): ... this.  Update all
+	users.
+	(thread_step_over_chain_enqueue): Rename to...
+	(global_thread_step_over_chain_enqueue): ... this.  Update all
+	users.
+	(thread_step_over_chain_remove): Rename to...
+	(global_thread_step_over_chain_remove): ... this.  Update all
+	users.
+
+2020-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (get_displaced_stepping_state): Remove, change
+	callers to access the field directly.
+
+2020-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (handle_inferior_event): Restore displaced step
+	buffer bytes in child process when handling fork, even if fork
+	happened in another thread than the displaced-stepping one.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.c (infrun_inferior_execd): New function.
+	(_initialize_infrun): Attach inferior_execd observer.
+
+2020-12-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* observable.h (inferior_execd): Declare new observable.
+	* observable.c (inferior_execd): Declare new observable.
+	* infrun.c (follow_exec): Notify inferior_execd observer.
+	* jit.c (jit_inferior_created_hook): Make static.
+	(_initialize_jit): Register inferior_execd observer.
+	* jit.h (jit_inferior_created_hook): Remove declaration.
+	* solib.c (_initialize_solib): Register inferior_execd observer.
+
+2020-12-04  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/27003
+	* completer.c (completion_tracker::build_completion_result): Don't
+	access match_list[0][-1].
+
+2020-12-04  Tom Tromey  <tromey@adacore.com>
+
+	* linespec.c (struct linespec_token): Rename; remove typedef.
+	* guile/scm-block.c (struct block_smob): Remove typedef.
+	(struct block_syms_progress_smob): Likewise.
+	* guile/scm-symbol.c (struct symbol_smob): Remove typedef.
+	* guile/scm-symtab.c (symtab_smob): Remove typedef.
+	(struct sal_smob): Remove typedef.
+	* guile/scm-param.c (struct param_smob): Remove typedef.
+	* guile/scm-progspace.c (struct pspace_smob): Rename.
+	* guile/scm-objfile.c (struct objfile_smob): Rename.
+	* guile/scm-iterator.c (struct iterator_smob): Rename.
+	* guile/scm-frame.c (struct frame_smob): Rename.
+	* guile/scm-arch.c (struct arch_smob): Rename.
+	* guile/scm-type.c (struct field_smob): Remove typedef.
+	(struct type_smob): Rename.
+	* guile/scm-cmd.c (struct command_smob): Remove typedef.
+	* guile/scm-ports.c (struct ioscm_memory_port): Remove typedef.
+	* guile/scm-value.c (struct value_smob): Remove typedef.
+	* guile/scm-lazy-string.c (lazy_string_smob): Remove typedef.
+	* guile/guile-internal.h (struct scheme_variable)
+	(struct scheme_function, struct scheme_integer_constant)
+	(struct gdb_smob, struct chained_gdb_smob)
+	(struct eqable_gdb_smob, arch_smob, frame_smob, iterator_smob)
+	(objfile_smob, pspace_smob, type_smob): Remove typedef.
+	* guile/scm-pretty-print.c (pretty_printer_smob): Remove typedef.
+	(struct pretty_printer_worker_smob): Remove typedef.
+	* guile/scm-exception.c (struct exception_smob): Remove typedef.
+	* python/py-block.c (struct block_object): Remove typedef.
+	(block_syms_iterator_object): Update.
+	(set_block): Update.
+	(block_syms_iterator_object): Remove typedef.
+	* python/py-inferior.c (struct membuf_object): Remove typedef.
+	* python/py-symtab.c (struct symtab_object): Remove typedef.
+	(set_symtab): Update.
+	(sal_object): Remove typedef.
+	(set_sal): Update.
+	* python/py-frame.c (frame_object): Remove typedef.
+	* python/py-record-btrace.c (struct btpy_list_object): Remove
+	typedef.
+	* python/py-arch.c (struct arch_object): Remove typedef.
+	* python/py-linetable.c (struct linetable_entry_object)
+	(linetable_object, struct ltpy_iterator_object): Remove typedef.
+	* python/py-events.h (eventregistry_object): Remove typedef.
+	(struct events_object): Remove typedef.
+	* python/python-internal.h (gdbpy_breakpoint_object): Remove
+	typedef.
+	(thread_object): Remove typedef.
+	* python/py-progspace.c (pspace_object): Remove typedef.
+	* python/py-value.c (struct value_object): Remove typedef.
+	* python/py-record.h (recpy_record_object): Remove typedef.
+	(struct recpy_element_object): Remove typedef.
+	* python/py-lazy-string.c (lazy_string_object): Remove typedef.
+	* python/py-objfile.c (objfile_object): Remove typedef.
+	* python/py-cmd.c (struct cmdpy_object): Remove typedef.
+	* python/py-type.c (type_object): Remove typedef.
+	(typy_iterator_object): Update.
+	(set_type): Update.
+	(field_object): Remove typedef.
+	(typy_iterator_object): Remove typedef.
+	* python/py-registers.c (register_descriptor_iterator_object):
+	Remove typedef.
+	(struct register_descriptor_object)
+	(struct reggroup_iterator_object, struct reggroup_object): Remove
+	typedef.
+	* python/py-record.c (recpy_gap_object): Remove typedef.
+	* python/py-symbol.c (symbol_object): Remove typedef.
+	(set_symbol): Update.
+	* python/py-event.h (event_object): Remove typedef.
+	* python/py-param.c (parmpy_object): Remove typedef.
+	* python/py-instruction.c (struct py_insn_obj): Remove typedef.
+	* python/py-unwind.c (struct pending_frame_object): Remove typedef.
+	(unwind_info_object, struct cached_frame_info): Likewise.
+
+2020-12-04  Tom Tromey  <tromey@adacore.com>
+
+	* value.c (value_internal_function_name): Make return type const.
+	* value.h (value_internal_function_name): Make return type const.
+
+2020-12-04  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-tdep.c (submask, bit, bits): Remove.
+	* arch/aarch64-insn.c (extract_signed_bitfield): Remove.
+	(aarch64_decode_adr, aarch64_decode_b aarch64_decode_bcond)
+	(aarch64_decode_cb, aarch64_decode_tb)
+	(aarch64_decode_ldr_literal): Use sbits to extract a signed
+	immediate.
+	* arch/aarch64-insn.h (submask, bits, bit, sbits): New macros.
+
+2020-12-04  Tom de Vries  <tdevries@suse.de>
+
+	PR tdep/27007
+	* i386-tdep.c (i386_16_byte_align_p): Skip static fields.
+
+2020-12-03  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/26876
+	* dwarf2/frame.c (find_comp_unit, set_comp_unit): Reverse use of
+	dwarf2_frame_bfd_data and dwarf2_frame_objfile_data.
+
+2020-12-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arch/riscv.c: Include 'rv32e-xregs.c'.
+	(riscv_create_target_description): Update to handle rv32e.
+	* arch/riscv.h (struct riscv_gdbarch_features) <embedded>: New
+	member variable.
+	<operator==>: Update to account for new field.
+	<hash>: Likewise.
+	* features/Makefile (FEATURE_XMLFILES): Add riscv/rv32e-xregs.xml.
+	* features/riscv/rv32e-xregs.c: Generated.
+	* features/riscv/rv32e-xregs.xml: New file.
+	* riscv-tdep.c (riscv_debug_breakpoints): Move from later in the
+	file.
+	(riscv_debug_infcall): Likewise.
+	(riscv_debug_unwinder): Likewise.
+	(riscv_debug_gdbarch): Likewise.
+	(enum riscv_register_required_status): Delete.
+	(struct riscv_register_feature): Add constructor, delete default
+	constructor, copy, and assign constructors.
+	(struct riscv_register_feature::register_info) <required>: Delete.
+	<check>: Update comment and arguments.
+	(struct riscv_register_feature) <name>: Change to member function.
+	<prefer_first_name>: Delete.
+	<tdesc_feature>: New member function.
+	<registers>: Rename to...
+	<m_registers>: ...this.
+	<m_feature_name>: New member variable.
+	(riscv_register_feature::register_info::check): Update arguments.
+	(riscv_xreg_feature): Rewrite as class, create a single static
+	instance of the class.
+	(riscv_freg_feature): Likewise.
+	(riscv_virtual_feature): Likewise.
+	(riscv_csr_feature): Likewise.
+	(riscv_create_csr_aliases): Has become a member function inside
+	riscv_csr_feature class.
+	(riscv_abi_embedded): New function definition.
+	(riscv_register_name): Adjust to use new feature objects.
+	(struct riscv_call_info) <riscv_call_info>: Check for rv32e abi,
+	and adjust available argument registers.
+	(riscv_features_from_gdbarch_info): Check for EF_RISCV_RVE flag.
+	(riscv_check_tdesc_feature): Delete.
+	(riscv_tdesc_unknown_reg): Adjust to use new feature objects.
+	(riscv_gdbarch_init): Delete target description checking code, and
+	instead call to the new feature objects to perform the checks.
+	Reorder handling of no abi information case, allows small code
+	simplification.
+	(_initialize_riscv_tdep): Remove call, this is now done in the
+	riscv_csr_feature constructor.
+	* riscv-tdep.h (riscv_abi_embedded): Declare.
+
+2020-12-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_create_csr_aliases): Remove use of
+	DECLARE_CSR_ALIAS.
+
+2020-12-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_is_unknown_csr): New function,
+	implementation moved from riscv_register_reggroup_p.
+	(riscv_register_reggroup_p): Update group handling for unknown
+	CSRs.
+
+2020-12-01  Sergio Durigan Junior  <sergiodj@sergiodj.net>
+
+	* dwarf2/read.c (dwz_search_other_debugdirs): New function.
+	(dwarf2_get_dwz_file): Convert 'filename' to a
+	std::string.  Use dwz_search_other_debugdirs to search for DWZ
+	files in the debug-file-directories provided by the user as well.
+
+2020-12-01  Tom Tromey  <tom@tromey.com>
+
+	* parse.c (expr_builder::expr_builder): Initialize expout.
+	(expr_builder::release): Use expression::resize.
+	(expression::expression, expression::~expression)
+	(expression::resize): New methods.
+	(write_exp_elt): Use expression::resize.
+	(prefixify_expression): Update.
+	(increase_expout_size): Use expression::resize.
+	* expression.h (struct expression): Add constructor, destructor.
+	<resize>: New method.
+	(expression_up): Change type.
+
+2020-12-01  Rogerio A. Cardoso  <rcardoso@linux.ibm.com>
+	* ppc-linux-nat.c: (PPC_DEBUG_FEATURE_DATA_BP_ARCH_31): New define.
+	(region_ok_for_hw_watchpoint): Check if 2nd DAWR is avaliable before
+	set region.
+
+2020-11-30  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/26905
+	* dwarf2/loc.c (dwarf2_locexpr_baton_eval): Add and handle
+	is_reference parameter.
+	(dwarf2_evaluate_property): Update dwarf2_locexpr_baton_eval call.
+
+2020-11-30  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_op_name): Remove.
+	(exp_descriptor_rust): Update.
+	* parser-defs.h (op_name_standard): Don't declare.
+	(struct exp_descriptor) <op_name>: Remove.
+	* parse.c (exp_descriptor_standard): Update.
+	* opencl-lang.c (exp_descriptor_opencl): Update.
+	* m2-lang.c (m2_language::exp_descriptor_modula2): Update.
+	* f-lang.c (op_name_f): Remove.
+	(f_language::exp_descriptor_tab): Update.
+	* expression.h (op_name): Update.
+	* expprint.c (op_name): Rewrite.
+	(op_name_standard): Remove.
+	(dump_raw_expression, dump_subexp): Update.
+	* c-lang.c (exp_descriptor_c): Update.
+	* ax-gdb.c (gen_expr): Update.
+	* ada-lang.c (ada_op_name): Remove.
+	(ada_exp_descriptor): Update.
+
+2020-11-30  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (init_array_element): Remove.
+	(evaluate_subexp_standard) <OP_ARRAY>: Remove "index_pc".
+
+2020-11-29  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR tui/26973
+	* tui/tui-layout.c (tui_apply_current_layout): Don't delete the
+	static locator win info.
+
+2020-11-28  Alex Richardson  <Alexander.Richardson@cl.cam.ac.uk>
+
+	* acincludde.m4 (GDB_AC_CHECK_BFD): Include string.h in the test
+	program.
+
+2020-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* printcmd.c (skip_over_slash_fmt): Reorder code to ensure in_fmt
+	is always initialized.
+
+2020-11-26  Rogerio Alves <rcardoso@linux.ibm.com>
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2020-11-26  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+
+	* features/aarch64-fpu.c (create_feature_aarch64_fpu): Regenerate.
+	* features/aarch64-fpu.xml: Add named FPCR and FPSR register bit-fields.
+
+2020-11-25  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (evaluate_subexp_standard): Remove unnecessary
+	variables.
+
+2020-11-25  Tom Tromey  <tom@tromey.com>
+
+	* d-lang.c: Include parser-defs.h.
+	* rust-lang.c: Include parser-defs.h.
+	* c-lang.h: Do not include parser-defs.h.
+
+2020-11-24  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* regcache.h (struct cached_reg): Remove typedef.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* README: Fix the URL of the MPFR library.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* README: Document the --with-libgmp-prefix configure option.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* NEWS: Add entry documenting support for DWARF-based fixed
+	point types.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* NEWS: Document that building GDB now requires GMP.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* typeprint.c (print_type_scalar): Add handling of
+	TYPE_CODE_FIXED_POINT.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* valarith.c (fixed_point_binop): Replace the
+	INIT_VAL_WITH_FIXED_POINT_VAL macro by a lambda.  Update all
+	users accordingly.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbtypes.h (struct type) <fixed_point_scaling_factor>: New method,
+	replacing fixed_point_scaling_factor.  All callers updated
+	throughout this project.
+	(fixed_point_scaling_factor): Delete declaration.
+	* gdbtypes.c (type::fixed_point_scaling_factor): Replaces
+	fixed_point_scaling_factor.  Adjust implementation accordingly.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbtypes.h (struct type) <fixed_point_type_base_type> New method,
+	replacing the fixed_point_type_base_type function. All callers
+	updated throughout this project.
+	(fixed_point_type_base_type): Remove declaration.
+	* gdbtypes.c (type::fixed_point_type_base_type): Replaces
+	fixed_point_type_base_type.  Adjust implementation accordingly.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbtypes.h (struct type) <fixed_point_info, set_fixed_point_info>:
+	New methods.
+	(INIT_FIXED_POINT_SPECIFIC): Adjust.
+	(TYPE_FIXED_POINT_INFO): Delete macro.
+	(allocate_fixed_point_type_info): Change return type to void.
+	* gdbtypes.c (copy_type_recursive): Replace the use of
+	TYPE_FIXED_POINT_INFO by a call to the fixed_point_info method.
+	(fixed_point_scaling_factor): Likewise.
+	(allocate_fixed_point_type_info): Change return type to void.
+	Adjust implementation accordingly.
+	* dwarf2/read.c (finish_fixed_point_type): Replace the use of
+	TYPE_FIXED_POINT_INFO by a call to the fixed_point_info method.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* gmp-utils.h (gdb_mpz::read): Change buf and len parameters
+	into one single gdb::array_view parameter.
+	(gdb_mpz::write): Likewise.
+	(gdb_mpq::read_fixed_point, gdb_mpq::write_fixed_point): Likewise.
+	* gmp-utils.c (gdb_mpz::read): Change buf and len parameters
+	into one single gdb::array_view parameter.
+	Adjust implementation accordingly.
+	(gdb_mpz::write): Likewise.
+	(gdb_mpq::read_fixed_point, gdb_mpq::write_fixed_point): Likewise.
+	* unittests/gmp-utils-selftests.c: Adapt following changes above.
+	* valarith.c, valops.c, valprint.c, value.c: Likewise.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* gmp-utils.h (gmp_string_printf): Rename from gmp_string_asprintf.
+	Change return type to std::string. Update all callers.
+	* gmp-utils.c (gmp_string_printf): Likewise.
+
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* unittests/gmp-utils-selftests.c (write_fp_test): Use mpq_set_si
+	instead of mpq_set_ui to initialize our GMP rational.
+
+2020-11-23  Tom de Vries  <tdevries@suse.de>
+
+	* debuginfod-support.c (debuginfod_source_query)
+	(debuginfod_debuginfo_query): Only set DESTNAME if successful.
+
+2020-11-21  Tom Tromey  <tom@tromey.com>
+
+	* breakpoint.c (watchpoint_exp_is_const): Return bool.
+
+2020-11-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* unittests/gmp-utils-selftests.c (gdb_mpz_read_all_from_small):
+	Pass 2.0 to pow.
+	(gdb_mpz_write_all_from_small): Likewise.
+
+2020-11-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (finish_fixed_point_type): Use std::abs instead
+	of abs.
+
+2020-11-20  Nick Alcock  <nick.alcock@oracle.com>
+
+	* ctfread.c (elfctf_build_psymtabs): Use ctf_dict_open, not
+	ctf_arc_open_by_name.
+
+2020-11-20  Nick Alcock  <nick.alcock@oracle.com>
+
+	* ctfread.c: Change uses of ctf_file_t to ctf_dict_t.
+	(ctf_fp_info::~ctf_fp_info): Call ctf_dict_close, not ctf_file_close.
+
+2020-11-20  Pedro Alves  <pedro@palves.net>
+
+	* language.c (language_arch_info::lookup_primitive_type): Use
+	gdb::function_view instead of gdb::function.
+	(template language_lookup_primitive_type): Rename to ...
+	(language_lookup_primitive_type_1): ... this, and make static.
+	(language_lookup_primitive_type(const struct language_defn *,
+	struct gdbarch *, const char *): Make non-template.
+	(language_lookup_primitive_type(const struct language_defn *,
+	struct gdbarch *, std::function<bool (struct type *)>): Make
+	non-template and use gdb::function_view.
+	* language.h (language_arch_info::lookup_primitive_type): Use
+	gdb::function_view instead of std::function.
+	(language_lookup_primitive_type): No longer template.
+	* opencl-lang.c (lookup_opencl_vector_type): 'filter' is now a
+	lambda instead of a std::function.
+
+2020-11-19  Andreas Arnez  <arnez@linux.ibm.com>
+
+	PR tdep/26916
+	* s390-tdep.c (s390_process_record): Fix recording of STOC, STOCG,
+	and STOCFH.
+
+2020-11-19  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* f-lang.c (fortran_value_subarray): Use plongest/pulongest.
+
+2020-11-19  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbarch.sh (read_core_file_mappings): Remove `other` parameter
+	in `loop_cb` parameter.
+	* gdbarch.c: Re-generate.
+	* gdbarch.h: Re-generate.
+	* arch-utils.c (default_read_core_file_mappings): Remove `other`
+	parameter.
+	* arch-utils.h (default_read_core_file_mappings): Likewise.
+	* corelow.c (core_target::build_file_mappings): Likewise.
+	* linux-tdep.c (linux_read_core_file_mappings): Likewise.
+	(linux_core_info_proc_mappings): Likewise.
+
+2020-11-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add f-array-walker.h.
+	* NEWS: Mention new options.
+	* f-array-walker.h: New file.
+	* f-lang.c: Include 'gdbcmd.h' and 'f-array-walker.h'.
+	(repack_array_slices): New static global.
+	(show_repack_array_slices): New function.
+	(fortran_array_slicing_debug): New static global.
+	(show_fortran_array_slicing_debug): New function.
+	(value_f90_subarray): Delete.
+	(skip_undetermined_arglist): Delete.
+	(class fortran_array_repacker_base_impl): New class.
+	(class fortran_lazy_array_repacker_impl): New class.
+	(class fortran_array_repacker_impl): New class.
+	(fortran_value_subarray): Complete rewrite.
+	(set_fortran_list): New static global.
+	(show_fortran_list): Likewise.
+	(_initialize_f_language): Register new commands.
+	(fortran_adjust_dynamic_array_base_address_hack): New function.
+	* f-lang.h (fortran_adjust_dynamic_array_base_address_hack):
+	Declare.
+	* f-valprint.c: Include 'f-array-walker.h'.
+	(class fortran_array_printer_impl): New class.
+	(f77_print_array_1): Delete.
+	(f77_print_array): Delete.
+	(fortran_print_array): New.
+	(f_value_print_inner): Update to call fortran_print_array.
+	* gdbtypes.c: Include 'f-lang.h'.
+	(resolve_dynamic_type_internal): Call
+	fortran_adjust_dynamic_array_base_address_hack.
+
+2020-11-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* breakpoint.c (struct watch_options): New struct.
+	(watch_option_defs): New static global.
+	(make_watch_options_def_group): New function.
+	(watch_maybe_just_location): Convert option parsing.
+	(watch_command_completer): New function.
+	(_initialize_breakpoint): Build help text using options mechanism.
+
+2020-11-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* breakpoint.c (update_watchpoint): Pass 'false' not '0'.
+	(watch_command_1): Update parameter types.  Convert locals to
+	bool.
+	(watch_command_wrapper): Change parameter type.
+	(watch_maybe_just_location): Change locals to bool.
+	(rwatch_command_wrapper): Update parameter type.
+	(awatch_command_wrapper): Update parameter type.
+	* breakpoint.h (watch_command_wrapper): Change parameter type.
+	(rwatch_command_wrapper): Update parameter type.
+	(awatch_command_wrapper): Update parameter type.
+	* eval.c (fetch_subexp_value): Change parameter type.
+	* ppc-linux-nat.c (ppc_linux_nat_target::check_condition): Pass
+	'false' not '0'.
+	* value.h (fetch_subexp_value): Change parameter type in
+	declaration.
+
+2020-11-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* printcmd.c (skip_over_slash_fmt): Make use of skip_to_space and
+	skip_spaces.
+
+2020-11-18  Keith Seitz  <keiths@redhat.com>
+
+	* linux-tdep.c (dump_note_entry_p): Return true instead of
+	checking `filename'.
+
+2020-11-18  Tom de Vries  <tdevries@suse.de>
+
+	* debuginfod-support.c (debuginfod_source_query)
+	(debuginfod_debuginfo_query): Also do early exit if
+	"(getenv (DEBUGINFOD_URLS_ENV_VAR))[0] == '\0'".
+
+2020-11-18  Tom de Vries  <tdevries@suse.de>
+
+	* gdbtypes.c (update_static_array_size): Fix -Werror=bool-compare
+	warning.
+
+2020-11-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (get_array_bounds): Return bool, adjust some
+	callers.  Move doc here.
+	* gdbtypes.c (get_array_bounds): Return bool
+
+2020-11-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arc-linux-tdep.c (arc_linux_sw_breakpoint_from_kind): Add an
+	assert.
+	* arc-tdep.c (arc_breakpoint_kind_from_pc): Likewise.
+	* disasm-selftests.c (print_one_insn_test): Fall throough from ARC
+	case to the default.
+
+2020-11-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* printcmd.c: Include 'safe-ctype.c'.
+	(skip_over_slash_fmt): New function.
+	(print_command_completer): Call skip_over_slash_fmt.
+	(display_and_x_command_completer): New function.
+	(_initialize_printcmd): Add command completion for 'x' and
+	'display'.
+
+2020-11-16  Pedro Alves  <pedro@palves.net>
+
+	* frame.c (get_prev_frame): Move get_frame_id call from here ...
+	(get_prev_frame_always_1): ... to here.
+	* inline-frame.c (inline_frame_this_id): Mention
+	get_prev_frame_always_1 in comment.
+
+2020-11-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* valarith.c (fixed_point_binop): Add BINOP_EQUAL and BINOP_LESS
+	handling.
+	(value_less): Add fixed-point handling.
+
+2020-11-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* eval.c (binop_promote): Add fixed-point type handling.
+	* valarith.c (fixed_point_binop): New function.
+	(scalar_binop): Add fixed-point type handling.
+	(value_neg): Add fixed-point type handling.
+	* valops.c (value_cast_to_fixed_point): New function.
+	(value_cast): Add fixed-point type handling.
+
+2020-11-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-typeprint.c (ada_print_type): Add handing of fixed-point
+	range types.
+	* c-typeprint.c (c_type_print_varspec_prefix)
+	(c_type_print_varspec_suffix, c_type_print_base_1): Add
+	TYPE_CODE_FIXED_POINT handling.
+	* p-typeprint.c (pascal_type_print_varspec_prefix)
+	(pascal_type_print_varspec_suffix): Likewise.
+	* typeprint.c (print_type_fixed_point): New function.
+	* typeprint.h (print_type_fixed_point): Add declaration.
+
+2020-11-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* printcmd.c (print_scalar_formatted): Add fixed-point type
+	handling when options->format is set.
+
+2020-11-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-valprint.c (ada_value_print_1): Add fixed-point type handling.
+	* dwarf2/read.c (get_dwarf2_rational_constant)
+	(get_dwarf2_unsigned_rational_constant, finish_fixed_point_type)
+	(has_zero_over_zero_small_attribute): New functions.
+	read_base_type, set_die_type): Add fixed-point type handling.
+	* gdb-gdb.py.in: Add fixed-point type handling.
+	* gdbtypes.c: #include "gmp-utils.h".
+	(create_range_type, set_type_code): Add fixed-point type handling.
+	(init_fixed_point_type): New function.
+	(is_integral_type, is_scalar_type): Add fixed-point type handling.
+	(print_fixed_point_type_info): New function.
+	(recursive_dump_type, copy_type_recursive): Add fixed-point type
+	handling.
+	(fixed_point_type_storage): New typedef.
+	(fixed_point_objfile_key): New static global.
+	(allocate_fixed_point_type_info, is_fixed_point_type): New functions.
+	(fixed_point_type_base_type, fixed_point_scaling_factor): New
+	functions.
+	* gdbtypes.h: #include "gmp-utils.h".
+	(enum type_code) <TYPE_SPECIFIC_FIXED_POINT>: New enum.
+	(union type_specific) <fixed_point_info>: New field.
+	(struct fixed_point_type_info): New struct.
+	(INIT_FIXED_POINT_SPECIFIC, TYPE_FIXED_POINT_INFO): New macros.
+	(init_fixed_point_type, is_fixed_point_type)
+	(fixed_point_type_base_type, fixed_point_scaling_factor)
+	(allocate_fixed_point_type_info): Add declarations.
+	* valprint.c (generic_val_print_fixed_point): New function.
+	(generic_value_print): Add fixed-point type handling.
+	* value.c (value_as_address, unpack_long): Add fixed-point type
+	handling.
+
+2020-11-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* utils.h (uinteger_pow): Add declaration.
+	* utils.c (uinteger_pow): Moved here (without changes)...
+	* valarith.c (uinteger_pow): ... from here.
+
+2020-11-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* gmp-utils.h,  gmp-utils.c: New file.
+	* unittests/gmp-utils-selftests.c: New file.
+	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
+	unittests/gmp-utils-selftests.c.
+	(COMMON_SFILES) Add gmp-utils.c.
+	(HFILES_NO_SRCDIR): Add gmp-utils.h.
+
+2020-11-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* configure.ac: Generate an error if a usable GMP library
+	could not be found.
+	* configure: Regenerate.
+
+2020-11-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* configure.ac: Add support for --with-libgmp-prefix.
+	* Makefile.in (LIBGMP): New variable.
+	(CLIBS): Include $(LIBGMP).
+	* configure, config.in: Regenerate
+
+2020-11-14  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR cli/26879
+	* f-exp.y (COMPLETE): New token.
+	(exp): Two new rules for tab-completion.
+	(saw_name_at_eof): New static global.
+	(last_was_structop): Likewise.
+	(yylex): Set new variables, and return COMPLETE token at the end
+	of the input stream in some cases.
+
+2020-11-14  Tom Tromey  <tom@tromey.com>
+
+	* infrun.c (fetch_inferior_event): Use "bool" for should_stop.
+
+2020-11-14  Tom Tromey  <tom@tromey.com>
+
+	* opencl-lang.c (opencl_component_ref): Make "comps" const.
+
+2020-11-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* arm-tdep.c (class arm_instruction_reader) <read>: Fix comment.
+
+2020-11-13  Tom Tromey  <tom@tromey.com>
+
+	* c-lang.c (convert_ucn, convert_octal, convert_hex)
+	(convert_escape, parse_one_string): Constify.
+
+2020-11-13  Keith Seitz  <keiths@redhat.com>
+
+	https://bugzilla.redhat.com/show_bug.cgi?id=1553086
+	* elfread.c (elf_symfile_segments): Omit "Loadable section ...
+	outside of ELF segments" warning for debugin
+
+2020-11-13  Keith Seitz  <keiths@redhat.com>
+
+	PR gdb/23034
+	* elfread.c (elf_symfile_segments): Output a BFD file name
+	for the "Loadable section ... outside of ELF segments" warning.
+
+2020-11-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/26835
+	* arm-tdep.c (class arm_instruction_reader): New.
+	(target_arm_instruction_reader): New.
+	(arm_analyze_prologue): Add instruction reader parameter and use
+	it.  Use arm_expand_immediate.
+	(class target_arm_instruction_reader): Adjust.
+	(arm_skip_prologue): Adjust.
+	(arm_expand_immediate): New.
+	(arm_scan_prologue): Adjust.
+	(arm_analyze_prologue_test): New.
+	(class test_arm_instruction_reader): New.
+
+2020-11-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-lang.c (fortran_argument_convert): Add declaration.  Add
+	header comment, taken from f-lang.h.  Make static.
+	* f-lang.h (f77_get_dynamic_array_length): Delete declaration.
+	(fortran_argument_convert): Delete declaration.
+
+2020-11-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-exp.y (find_primitive_type): Make parameter const.
+	* ada-lang.c (enum ada_primitive_types): Delete.
+	(ada_language::language_arch_info): Update.
+	* c-lang.c (enum c_primitive_types): Delete.
+	(c_language_arch_info): Update.
+	(enum cplus_primitive_types): Delete.
+	(cplus_language::language_arch_info): Update.
+	* d-lang.c (enum d_primitive_types): Delete.
+	(d_language::language_arch_info): Update.
+	* f-lang.c (enum f_primitive_types): Delete.
+	(f_language::language_arch_info): Update.
+	* go-lang.c (enum go_primitive_types): Delete.
+	(go_language::language_arch_info): Update.
+	* language.c (auto_or_unknown_language::language_arch_info):
+	Update.
+	(language_gdbarch_post_init): Use obstack_new, use array indexing.
+	(language_string_char_type): Add header comment, call function in
+	language_arch_info.
+	(language_bool_type): Likewise
+	(language_arch_info::bool_type): Define.
+	(language_lookup_primitive_type_1): Delete.
+	(language_lookup_primitive_type): Rewrite as a templated function
+	to call function in language_arch_info, then instantiate twice.
+	(language_arch_info::type_and_symbol::alloc_type_symbol): Define.
+	(language_arch_info::lookup_primitive_type_and_symbol): Define.
+	(language_arch_info::lookup_primitive_type): Define twice with
+	different signatures.
+	(language_arch_info::lookup_primitive_type_as_symbol): Define.
+	(language_lookup_primitive_type_as_symbol): Rewrite to call a
+	member function in language_arch_info.
+	* language.h (language_arch_info): Complete rewrite.
+	(language_lookup_primitive_type): Make templated.
+	* m2-lang.c (enum m2_primitive_types): Delete.
+	(m2_language::language_arch_info): Update.
+	* opencl-lang.c (OCL_P_TYPE): Delete.
+	(enum opencl_primitive_types): Delete.
+	(opencl_type_data): Delete.
+	(builtin_opencl_type): Delete.
+	(lookup_opencl_vector_type): Update.
+	(opencl_language::language_arch_info): Update, lots of content
+	moved from...
+	(build_opencl_types): ...here.  This function is now deleted.
+	(_initialize_opencl_language): Delete.
+	* p-lang.c (enum pascal_primitive_types): Delete.
+	(pascal_language::language_arch_info): Update.
+	* rust-lang.c (enum rust_primitive_types): Delete.
+	(rust_language::language_arch_info): Update.
+
+2020-11-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (dw2_do_instantiate_symtab): Fix call to
+	dwarf2_queue_guard.
+
+2020-11-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (dw2_do_instantiate_symtab): Fix typo in
+	comment.
+
+2020-11-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (dwarf_read_debug_printf,
+	dwarf_read_debug_printf_v): New macros, use throughout the file.
+
+2020-11-12  Shahab Vahedi  <shahab@synopsys.com>
+
+	PR tdep/27015
+	* arc-linux-tdep.c (collect_register): Populate "eret" by
+	"pc" value from the regcache when asked for "pc" value.
+
+2020-11-12  Tom Tromey  <tom@tromey.com>
+
+	PR rust/26799:
+	* symtab.c (find_symbol_at_address): Search symtabs if no psymtabs
+	exist.
+
+2020-11-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* features/Makefile (XMLTOC): Add rx.xml.
+	(FEATURE_XMLFILES): Remove rx.xml.
+	(FEATURE_CFILES rule): Pass '-single-feature' flag.
+	* features/rx.c: Regenerate.
+	* features/rx.xml: Wrap in `target` tags, and reindent.
+	* target-descriptions.c (struct maint_print_c_tdesc_options): New
+	structure.
+	(maint_print_c_tdesc_opt_def): New typedef.
+	(maint_print_c_tdesc_opt_defs): New static global.
+	(make_maint_print_c_tdesc_options_def_group): New function.
+	(maint_print_c_tdesc_cmd): Make use of command line flags, only
+	print single feature C file for target descriptions containing a
+	single feature.
+	(maint_print_c_tdesc_cmd_completer): New function.
+	(_initialize_target_descriptions): Update call to register command
+	completer, and include command line flag in help text.
+
+2020-11-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_dwarf_reg_to_regnum): Decode DWARF CSR
+	numbers.
+	* riscv-tdep.h (RISCV_DWARF_FIRST_CSR, RISCV_DWARF_LAST_CSR): New
+	enum values.
+
+2020-11-10  Tom Tromey  <tom@tromey.com>
+
+	* value.h (internalvar_name): Update.
+	* value.c (internalvar_name): Make return type const.
+
+2020-11-10  Tom Tromey  <tom@tromey.com>
+
+	* ax-gdb.c (gen_struct_elt_for_reference, gen_namespace_elt)
+	(gen_maybe_namespace_elt, gen_aggregate_elt_ref, gen_expr): Use
+	const.
+
+2020-11-10  Tom Tromey  <tom@tromey.com>
+
+	* objc-lang.h (value_nsstring): Update.
+	* objc-lang.c (value_nsstring): Make "ptr" const.
+
+2020-11-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* expprint.c (print_subexp_funcall): Increment expression position
+	after reading argument count.
+	* f-lang.c (print_subexp_f): Skip over opcode before calling
+	common function.
+	(dump_subexp_body_f): Likewise.
+
+2020-11-06  Romain Geissler  <romain.geissler@amadeus.com>
+
+	PR python/26832
+	* configure: Regenerate.
+	* configure.ac: Check for python modules ctypes instead of
+	itertools.
+
+2020-11-06  Pedro Alves  <pedro@palves.net>
+
+	* macroexp.c (struct macro_buffer): Split in two classes.  Add
+	uses adjusted.
+	(struct shared_macro_buffer): New, factored out from struct
+	macro_buffer.
+	(struct growable_macro_buffer): New, factored out from struct
+	macro_buffer.
+	(set_token, get_comment, get_identifier, get_pp_number)
+	(get_character_constant, get_string_literal, get_punctuator)
+	(get_next_token_for_substitution): Constify parameters.
+	(substitute_args): Constify locals.
+
+2020-11-05  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_cutu_die_from_dwo)
+	(cutu_reader::cutu_reader, cutu_reader::cutu_reader)
+	(build_type_psymtabs_1): Update.
+	* dwarf2/abbrev.h (struct abbrev_table): Remove objfile
+	parameter.
+	* dwarf2/abbrev.c (abbrev_table::read): Remove objfile parameter.
+	Don't read section.  Add assert.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* ada-typeprint.c (ada_print_type): Handle __XVL fields.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* ada-typeprint.c (ada_print_type): Handle __T types.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (add_partial_symbol, process_die):
+	Handle DW_TAG_array_type.
+	(is_type_tag_for_partial): Add "lang" parameter.
+	(load_partial_dies, new_symbol): Handle DW_TAG_array_type.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_value_slice_from_ptr): Use bit size.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (read_array_type): Only apply stride to innermost
+	array.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* gdbtypes.c (update_static_array_size): Handle bit stride.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_value_struct_elt): Resolve dynamic type.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_is_any_packed_array_type): New function.
+	(ada_evaluate_subexp) <case TERNOP_SLICE>: Use it.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (recognize_bound_expression)
+	(quirk_ada_thick_pointer): New functions.
+	(read_array_type): Call quirk_ada_thick_pointer.
+	(set_die_type): Add "skip_data_location" parameter.
+	(quirk_ada_thick_pointer): New function.
+	(process_structure_scope): Call quirk_ada_thick_pointer.
+	* ada-lang.c (ada_is_unconstrained_packed_array_type)
+	(decode_packed_array_bitsize): Handle thick pointers without
+	parallel types.
+	(ada_is_gnat_encoded_packed_array_type): Rename from
+	ada_is_packed_array_type.
+	(ada_is_constrained_packed_array_type): Update.
+	* ada-valprint.c (ada_val_print_gnat_array): Remove.
+	(ada_value_print_1): Use ada_get_decoded_value.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (recursively_update_array_bitsize): New function.
+	(decode_constrained_packed_array_type): Call it.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (to_fixed_array_type): Error if
+	decode_constrained_packed_array_type returns NULL.
+
+2020-11-04  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/leb.h (read_3_bytes): Use bfd_get_24.
+
+2020-11-02  Tom Tromey  <tromey@adacore.com>
+
+	* Makefile.in (ALL_64_TARGET_OBS): Add amd64-ravenscar-thread.o.
+	(ALLDEPFILES): Add amd64-ravenscar-thread.c.
+	(HFILES_NO_SRCDIR): Add amd64-ravenscar-thread.h.
+	* amd64-ravenscar-thread.c: New file.
+	* amd64-ravenscar-thread.h: New file.
+	* amd64-tdep.c (amd64_init_abi): Register ravenscar ops.
+	* configure.tgt (amd64_tobjs): Add ravenscar objects.
+
+2020-11-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* main.c (execute_cmdargs): New function.
+	(captured_main_1): Make use of execute_cmdargs.
+
+2020-11-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention changes to config file search path.
+	* main.c
+
+2020-11-02  Tom Tromey  <tromey@adacore.com>
+
+	* python/python.c: Consolidate two HAVE_PYTHON blocks.
+	(python_GdbModuleDef): Move earlier.  Now static.
+	(do_start_initialization): Consolidate some IS_PY3K blocks.
+
+2020-11-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	* aarch64-linux-tdep.c: Fix indentation.
+	* aarch64-ravenscar-thread.c: Fix indentation.
+	* aarch64-tdep.c: Fix indentation.
+	* aarch64-tdep.h: Fix indentation.
+	* ada-lang.c: Fix indentation.
+	* ada-lang.h: Fix indentation.
+	* ada-tasks.c: Fix indentation.
+	* ada-typeprint.c: Fix indentation.
+	* ada-valprint.c: Fix indentation.
+	* ada-varobj.c: Fix indentation.
+	* addrmap.c: Fix indentation.
+	* addrmap.h: Fix indentation.
+	* agent.c: Fix indentation.
+	* aix-thread.c: Fix indentation.
+	* alpha-bsd-nat.c: Fix indentation.
+	* alpha-linux-tdep.c: Fix indentation.
+	* alpha-mdebug-tdep.c: Fix indentation.
+	* alpha-nbsd-tdep.c: Fix indentation.
+	* alpha-obsd-tdep.c: Fix indentation.
+	* alpha-tdep.c: Fix indentation.
+	* amd64-bsd-nat.c: Fix indentation.
+	* amd64-darwin-tdep.c: Fix indentation.
+	* amd64-linux-nat.c: Fix indentation.
+	* amd64-linux-tdep.c: Fix indentation.
+	* amd64-nat.c: Fix indentation.
+	* amd64-obsd-tdep.c: Fix indentation.
+	* amd64-tdep.c: Fix indentation.
+	* amd64-windows-tdep.c: Fix indentation.
+	* annotate.c: Fix indentation.
+	* arc-tdep.c: Fix indentation.
+	* arch-utils.c: Fix indentation.
+	* arch/arm-get-next-pcs.c: Fix indentation.
+	* arch/arm.c: Fix indentation.
+	* arm-linux-nat.c: Fix indentation.
+	* arm-linux-tdep.c: Fix indentation.
+	* arm-nbsd-tdep.c: Fix indentation.
+	* arm-pikeos-tdep.c: Fix indentation.
+	* arm-tdep.c: Fix indentation.
+	* arm-tdep.h: Fix indentation.
+	* arm-wince-tdep.c: Fix indentation.
+	* auto-load.c: Fix indentation.
+	* auxv.c: Fix indentation.
+	* avr-tdep.c: Fix indentation.
+	* ax-gdb.c: Fix indentation.
+	* ax-general.c: Fix indentation.
+	* bfin-linux-tdep.c: Fix indentation.
+	* block.c: Fix indentation.
+	* block.h: Fix indentation.
+	* blockframe.c: Fix indentation.
+	* bpf-tdep.c: Fix indentation.
+	* break-catch-sig.c: Fix indentation.
+	* break-catch-syscall.c: Fix indentation.
+	* break-catch-throw.c: Fix indentation.
+	* breakpoint.c: Fix indentation.
+	* breakpoint.h: Fix indentation.
+	* bsd-uthread.c: Fix indentation.
+	* btrace.c: Fix indentation.
+	* build-id.c: Fix indentation.
+	* buildsym-legacy.h: Fix indentation.
+	* buildsym.c: Fix indentation.
+	* c-typeprint.c: Fix indentation.
+	* c-valprint.c: Fix indentation.
+	* c-varobj.c: Fix indentation.
+	* charset.c: Fix indentation.
+	* cli/cli-cmds.c: Fix indentation.
+	* cli/cli-decode.c: Fix indentation.
+	* cli/cli-decode.h: Fix indentation.
+	* cli/cli-script.c: Fix indentation.
+	* cli/cli-setshow.c: Fix indentation.
+	* coff-pe-read.c: Fix indentation.
+	* coffread.c: Fix indentation.
+	* compile/compile-cplus-types.c: Fix indentation.
+	* compile/compile-object-load.c: Fix indentation.
+	* compile/compile-object-run.c: Fix indentation.
+	* completer.c: Fix indentation.
+	* corefile.c: Fix indentation.
+	* corelow.c: Fix indentation.
+	* cp-abi.h: Fix indentation.
+	* cp-namespace.c: Fix indentation.
+	* cp-support.c: Fix indentation.
+	* cp-valprint.c: Fix indentation.
+	* cris-linux-tdep.c: Fix indentation.
+	* cris-tdep.c: Fix indentation.
+	* darwin-nat-info.c: Fix indentation.
+	* darwin-nat.c: Fix indentation.
+	* darwin-nat.h: Fix indentation.
+	* dbxread.c: Fix indentation.
+	* dcache.c: Fix indentation.
+	* disasm.c: Fix indentation.
+	* dtrace-probe.c: Fix indentation.
+	* dwarf2/abbrev.c: Fix indentation.
+	* dwarf2/attribute.c: Fix indentation.
+	* dwarf2/expr.c: Fix indentation.
+	* dwarf2/frame.c: Fix indentation.
+	* dwarf2/index-cache.c: Fix indentation.
+	* dwarf2/index-write.c: Fix indentation.
+	* dwarf2/line-header.c: Fix indentation.
+	* dwarf2/loc.c: Fix indentation.
+	* dwarf2/macro.c: Fix indentation.
+	* dwarf2/read.c: Fix indentation.
+	* dwarf2/read.h: Fix indentation.
+	* elfread.c: Fix indentation.
+	* eval.c: Fix indentation.
+	* event-top.c: Fix indentation.
+	* exec.c: Fix indentation.
+	* exec.h: Fix indentation.
+	* expprint.c: Fix indentation.
+	* f-lang.c: Fix indentation.
+	* f-typeprint.c: Fix indentation.
+	* f-valprint.c: Fix indentation.
+	* fbsd-nat.c: Fix indentation.
+	* fbsd-tdep.c: Fix indentation.
+	* findvar.c: Fix indentation.
+	* fork-child.c: Fix indentation.
+	* frame-unwind.c: Fix indentation.
+	* frame-unwind.h: Fix indentation.
+	* frame.c: Fix indentation.
+	* frv-linux-tdep.c: Fix indentation.
+	* frv-tdep.c: Fix indentation.
+	* frv-tdep.h: Fix indentation.
+	* ft32-tdep.c: Fix indentation.
+	* gcore.c: Fix indentation.
+	* gdb_bfd.c: Fix indentation.
+	* gdbarch.sh: Fix indentation.
+	* gdbarch.c: Re-generate
+	* gdbarch.h: Re-generate.
+	* gdbcore.h: Fix indentation.
+	* gdbthread.h: Fix indentation.
+	* gdbtypes.c: Fix indentation.
+	* gdbtypes.h: Fix indentation.
+	* glibc-tdep.c: Fix indentation.
+	* gnu-nat.c: Fix indentation.
+	* gnu-nat.h: Fix indentation.
+	* gnu-v2-abi.c: Fix indentation.
+	* gnu-v3-abi.c: Fix indentation.
+	* go32-nat.c: Fix indentation.
+	* guile/guile-internal.h: Fix indentation.
+	* guile/scm-cmd.c: Fix indentation.
+	* guile/scm-frame.c: Fix indentation.
+	* guile/scm-iterator.c: Fix indentation.
+	* guile/scm-math.c: Fix indentation.
+	* guile/scm-ports.c: Fix indentation.
+	* guile/scm-pretty-print.c: Fix indentation.
+	* guile/scm-value.c: Fix indentation.
+	* h8300-tdep.c: Fix indentation.
+	* hppa-linux-nat.c: Fix indentation.
+	* hppa-linux-tdep.c: Fix indentation.
+	* hppa-nbsd-nat.c: Fix indentation.
+	* hppa-nbsd-tdep.c: Fix indentation.
+	* hppa-obsd-nat.c: Fix indentation.
+	* hppa-tdep.c: Fix indentation.
+	* hppa-tdep.h: Fix indentation.
+	* i386-bsd-nat.c: Fix indentation.
+	* i386-darwin-nat.c: Fix indentation.
+	* i386-darwin-tdep.c: Fix indentation.
+	* i386-dicos-tdep.c: Fix indentation.
+	* i386-gnu-nat.c: Fix indentation.
+	* i386-linux-nat.c: Fix indentation.
+	* i386-linux-tdep.c: Fix indentation.
+	* i386-nto-tdep.c: Fix indentation.
+	* i386-obsd-tdep.c: Fix indentation.
+	* i386-sol2-nat.c: Fix indentation.
+	* i386-tdep.c: Fix indentation.
+	* i386-tdep.h: Fix indentation.
+	* i386-windows-tdep.c: Fix indentation.
+	* i387-tdep.c: Fix indentation.
+	* i387-tdep.h: Fix indentation.
+	* ia64-libunwind-tdep.c: Fix indentation.
+	* ia64-libunwind-tdep.h: Fix indentation.
+	* ia64-linux-nat.c: Fix indentation.
+	* ia64-linux-tdep.c: Fix indentation.
+	* ia64-tdep.c: Fix indentation.
+	* ia64-tdep.h: Fix indentation.
+	* ia64-vms-tdep.c: Fix indentation.
+	* infcall.c: Fix indentation.
+	* infcmd.c: Fix indentation.
+	* inferior.c: Fix indentation.
+	* infrun.c: Fix indentation.
+	* iq2000-tdep.c: Fix indentation.
+	* language.c: Fix indentation.
+	* linespec.c: Fix indentation.
+	* linux-fork.c: Fix indentation.
+	* linux-nat.c: Fix indentation.
+	* linux-tdep.c: Fix indentation.
+	* linux-thread-db.c: Fix indentation.
+	* lm32-tdep.c: Fix indentation.
+	* m2-lang.c: Fix indentation.
+	* m2-typeprint.c: Fix indentation.
+	* m2-valprint.c: Fix indentation.
+	* m32c-tdep.c: Fix indentation.
+	* m32r-linux-tdep.c: Fix indentation.
+	* m32r-tdep.c: Fix indentation.
+	* m68hc11-tdep.c: Fix indentation.
+	* m68k-bsd-nat.c: Fix indentation.
+	* m68k-linux-nat.c: Fix indentation.
+	* m68k-linux-tdep.c: Fix indentation.
+	* m68k-tdep.c: Fix indentation.
+	* machoread.c: Fix indentation.
+	* macrocmd.c: Fix indentation.
+	* macroexp.c: Fix indentation.
+	* macroscope.c: Fix indentation.
+	* macrotab.c: Fix indentation.
+	* macrotab.h: Fix indentation.
+	* main.c: Fix indentation.
+	* mdebugread.c: Fix indentation.
+	* mep-tdep.c: Fix indentation.
+	* mi/mi-cmd-catch.c: Fix indentation.
+	* mi/mi-cmd-disas.c: Fix indentation.
+	* mi/mi-cmd-env.c: Fix indentation.
+	* mi/mi-cmd-stack.c: Fix indentation.
+	* mi/mi-cmd-var.c: Fix indentation.
+	* mi/mi-cmds.c: Fix indentation.
+	* mi/mi-main.c: Fix indentation.
+	* mi/mi-parse.c: Fix indentation.
+	* microblaze-tdep.c: Fix indentation.
+	* minidebug.c: Fix indentation.
+	* minsyms.c: Fix indentation.
+	* mips-linux-nat.c: Fix indentation.
+	* mips-linux-tdep.c: Fix indentation.
+	* mips-nbsd-tdep.c: Fix indentation.
+	* mips-tdep.c: Fix indentation.
+	* mn10300-linux-tdep.c: Fix indentation.
+	* mn10300-tdep.c: Fix indentation.
+	* moxie-tdep.c: Fix indentation.
+	* msp430-tdep.c: Fix indentation.
+	* namespace.h: Fix indentation.
+	* nat/fork-inferior.c: Fix indentation.
+	* nat/gdb_ptrace.h: Fix indentation.
+	* nat/linux-namespaces.c: Fix indentation.
+	* nat/linux-osdata.c: Fix indentation.
+	* nat/netbsd-nat.c: Fix indentation.
+	* nat/x86-dregs.c: Fix indentation.
+	* nbsd-nat.c: Fix indentation.
+	* nbsd-tdep.c: Fix indentation.
+	* nios2-linux-tdep.c: Fix indentation.
+	* nios2-tdep.c: Fix indentation.
+	* nto-procfs.c: Fix indentation.
+	* nto-tdep.c: Fix indentation.
+	* objfiles.c: Fix indentation.
+	* objfiles.h: Fix indentation.
+	* opencl-lang.c: Fix indentation.
+	* or1k-tdep.c: Fix indentation.
+	* osabi.c: Fix indentation.
+	* osabi.h: Fix indentation.
+	* osdata.c: Fix indentation.
+	* p-lang.c: Fix indentation.
+	* p-typeprint.c: Fix indentation.
+	* p-valprint.c: Fix indentation.
+	* parse.c: Fix indentation.
+	* ppc-linux-nat.c: Fix indentation.
+	* ppc-linux-tdep.c: Fix indentation.
+	* ppc-nbsd-nat.c: Fix indentation.
+	* ppc-nbsd-tdep.c: Fix indentation.
+	* ppc-obsd-nat.c: Fix indentation.
+	* ppc-ravenscar-thread.c: Fix indentation.
+	* ppc-sysv-tdep.c: Fix indentation.
+	* ppc64-tdep.c: Fix indentation.
+	* printcmd.c: Fix indentation.
+	* proc-api.c: Fix indentation.
+	* producer.c: Fix indentation.
+	* producer.h: Fix indentation.
+	* prologue-value.c: Fix indentation.
+	* prologue-value.h: Fix indentation.
+	* psymtab.c: Fix indentation.
+	* python/py-arch.c: Fix indentation.
+	* python/py-bpevent.c: Fix indentation.
+	* python/py-event.c: Fix indentation.
+	* python/py-event.h: Fix indentation.
+	* python/py-finishbreakpoint.c: Fix indentation.
+	* python/py-frame.c: Fix indentation.
+	* python/py-framefilter.c: Fix indentation.
+	* python/py-inferior.c: Fix indentation.
+	* python/py-infthread.c: Fix indentation.
+	* python/py-objfile.c: Fix indentation.
+	* python/py-prettyprint.c: Fix indentation.
+	* python/py-registers.c: Fix indentation.
+	* python/py-signalevent.c: Fix indentation.
+	* python/py-stopevent.c: Fix indentation.
+	* python/py-stopevent.h: Fix indentation.
+	* python/py-threadevent.c: Fix indentation.
+	* python/py-tui.c: Fix indentation.
+	* python/py-unwind.c: Fix indentation.
+	* python/py-value.c: Fix indentation.
+	* python/py-xmethods.c: Fix indentation.
+	* python/python-internal.h: Fix indentation.
+	* python/python.c: Fix indentation.
+	* ravenscar-thread.c: Fix indentation.
+	* record-btrace.c: Fix indentation.
+	* record-full.c: Fix indentation.
+	* record.c: Fix indentation.
+	* reggroups.c: Fix indentation.
+	* regset.h: Fix indentation.
+	* remote-fileio.c: Fix indentation.
+	* remote.c: Fix indentation.
+	* reverse.c: Fix indentation.
+	* riscv-linux-tdep.c: Fix indentation.
+	* riscv-ravenscar-thread.c: Fix indentation.
+	* riscv-tdep.c: Fix indentation.
+	* rl78-tdep.c: Fix indentation.
+	* rs6000-aix-tdep.c: Fix indentation.
+	* rs6000-lynx178-tdep.c: Fix indentation.
+	* rs6000-nat.c: Fix indentation.
+	* rs6000-tdep.c: Fix indentation.
+	* rust-lang.c: Fix indentation.
+	* rx-tdep.c: Fix indentation.
+	* s12z-tdep.c: Fix indentation.
+	* s390-linux-tdep.c: Fix indentation.
+	* score-tdep.c: Fix indentation.
+	* ser-base.c: Fix indentation.
+	* ser-mingw.c: Fix indentation.
+	* ser-uds.c: Fix indentation.
+	* ser-unix.c: Fix indentation.
+	* serial.c: Fix indentation.
+	* sh-linux-tdep.c: Fix indentation.
+	* sh-nbsd-tdep.c: Fix indentation.
+	* sh-tdep.c: Fix indentation.
+	* skip.c: Fix indentation.
+	* sol-thread.c: Fix indentation.
+	* solib-aix.c: Fix indentation.
+	* solib-darwin.c: Fix indentation.
+	* solib-frv.c: Fix indentation.
+	* solib-svr4.c: Fix indentation.
+	* solib.c: Fix indentation.
+	* source.c: Fix indentation.
+	* sparc-linux-tdep.c: Fix indentation.
+	* sparc-nbsd-tdep.c: Fix indentation.
+	* sparc-obsd-tdep.c: Fix indentation.
+	* sparc-ravenscar-thread.c: Fix indentation.
+	* sparc-tdep.c: Fix indentation.
+	* sparc64-linux-tdep.c: Fix indentation.
+	* sparc64-nbsd-tdep.c: Fix indentation.
+	* sparc64-obsd-tdep.c: Fix indentation.
+	* sparc64-tdep.c: Fix indentation.
+	* stabsread.c: Fix indentation.
+	* stack.c: Fix indentation.
+	* stap-probe.c: Fix indentation.
+	* stubs/ia64vms-stub.c: Fix indentation.
+	* stubs/m32r-stub.c: Fix indentation.
+	* stubs/m68k-stub.c: Fix indentation.
+	* stubs/sh-stub.c: Fix indentation.
+	* stubs/sparc-stub.c: Fix indentation.
+	* symfile-mem.c: Fix indentation.
+	* symfile.c: Fix indentation.
+	* symfile.h: Fix indentation.
+	* symmisc.c: Fix indentation.
+	* symtab.c: Fix indentation.
+	* symtab.h: Fix indentation.
+	* target-float.c: Fix indentation.
+	* target.c: Fix indentation.
+	* target.h: Fix indentation.
+	* tic6x-tdep.c: Fix indentation.
+	* tilegx-linux-tdep.c: Fix indentation.
+	* tilegx-tdep.c: Fix indentation.
+	* top.c: Fix indentation.
+	* tracefile-tfile.c: Fix indentation.
+	* tracepoint.c: Fix indentation.
+	* tui/tui-disasm.c: Fix indentation.
+	* tui/tui-io.c: Fix indentation.
+	* tui/tui-regs.c: Fix indentation.
+	* tui/tui-stack.c: Fix indentation.
+	* tui/tui-win.c: Fix indentation.
+	* tui/tui-winsource.c: Fix indentation.
+	* tui/tui.c: Fix indentation.
+	* typeprint.c: Fix indentation.
+	* ui-out.h: Fix indentation.
+	* unittests/copy_bitwise-selftests.c: Fix indentation.
+	* unittests/memory-map-selftests.c: Fix indentation.
+	* utils.c: Fix indentation.
+	* v850-tdep.c: Fix indentation.
+	* valarith.c: Fix indentation.
+	* valops.c: Fix indentation.
+	* valprint.c: Fix indentation.
+	* valprint.h: Fix indentation.
+	* value.c: Fix indentation.
+	* value.h: Fix indentation.
+	* varobj.c: Fix indentation.
+	* vax-tdep.c: Fix indentation.
+	* windows-nat.c: Fix indentation.
+	* windows-tdep.c: Fix indentation.
+	* xcoffread.c: Fix indentation.
+	* xml-syscall.c: Fix indentation.
+	* xml-tdesc.c: Fix indentation.
+	* xstormy16-tdep.c: Fix indentation.
+	* xtensa-config.c: Fix indentation.
+	* xtensa-linux-nat.c: Fix indentation.
+	* xtensa-linux-tdep.c: Fix indentation.
+	* xtensa-tdep.c: Fix indentation.
+
+2020-11-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Craig Blackmore   <craig.blackmore@embecosm.com>
+
+	* riscv-tdep.c (riscv_frame_cache): Read the frame base register
+	as an unsigned value.
+
+2020-11-01  Tom Tromey  <tom@tromey.com>
+
+	* dbxread.c (dbx_end_psymtab): Update.
+	* dwarf2/read.c (process_psymtab_comp_unit_reader)
+	(build_type_psymtabs_reader): Update.
+	* xcoffread.c (xcoff_end_psymtab): Update.
+	* ctfread.c (scan_partial_symbols): Update.
+	* psymtab.c (sort_pst_symbols): Remove.
+	(partial_symtab::end): Rename from end_psymtab_common.  Inline
+	sort_pst_symbols.
+	* psympriv.h (struct partial_symtab) <end>: New method.
+	(end_psymtab_common): Don't declare.
+
+2020-11-01  Tom Tromey  <tom@tromey.com>
+
+	* symmisc.c (count_psyms): New function.
+	(print_objfile_statistics): Use it.
+	* psymtab.c (append_psymbol_to_list): Remove.
+	(partial_symtab::add_psymbol): Inline append_psymbol_to_list.
+	* objfiles.h (struct objstats) <n_psyms>: Remove.
+
+2020-11-01  Tom Tromey  <tom@tromey.com>
+
+	* dbxread.c (dbx_end_psymtab): Update.
+	* dwarf2/read.c (process_psymtab_comp_unit_reader): Update.
+	(build_type_psymtabs_reader): Update.
+	* xcoffread.c (xcoff_end_psymtab): Update.
+	* ctfread.c (scan_partial_symbols): Update.
+	* psympriv.h (end_psymtab_common): Update.
+	* psymtab.c (end_psymtab_common): Remove objfile parameter.
+	(sort_pst_symbols): Likewise.
+
+2020-11-01  Tom Tromey  <tom@tromey.com>
+
+	* dbxread.c (dbx_symfile_read): Update.
+	* dwarf2/read.c (dwarf2_build_psymtabs): Update.
+	* xcoffread.c (xcoff_initial_scan): Update.
+	* psympriv.h (init_psymbol_list): Don't declare.
+	* psymtab.c (init_psymbol_list): Remove.
+
+2020-11-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-lang.c (gnat_encoded_fixed_point_type_info): Renames
+	gnat_encoded_fixed_type_info.  Update all callers.
+
+2020-11-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-lang.c (cast_from_gnat_encoded_fixed_point_type): Split
+	line too long.
+
+2020-11-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-lang.c (cast_from_gnat_encoded_fixed_point_type): Renames
+	cast_from_fixed.  Update all callers.
+	(cast_to_gnat_encoded_fixed_point_type): Renames cast_to_fixed.
+	Update all callers.
+	(gnat_encoded_fixed_point_scaling_factor): Renames ada_scaling_factor.
+	Update all callers.
+	* ada-lang.h (gnat_encoded_fixed_point_scaling_factor): Renames
+	ada_scaling_factor.
+	* ada-typeprint.c: Replace call to ada_scaling_factor by call
+	to print_gnat_encoded_fixed_point_type.
+	* ada-valprint.c: Likewise.
+
+2020-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* infrun.h (infrun_debug_printf): Add check of debug_infrun flag.
+	(debug_prefixed_printf): Add check of debug_displaced flag.
+	* linux-nat.c (linux_nat_debug_printf): Add check of
+	debug_linux_nat flag.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (infrun_debug_printf_1): Remove.
+	(displaced_debug_printf_1): Remove.
+	(stop_all_threads): Use debug_prefixed_printf.
+	* infrun.h (infrun_debug_printf_1): Remove.
+	(infrun_debug_printf): Use debug_prefixed_printf.
+	(displaced_debug_printf_1): Remove.
+	(displaced_debug_printf): Use debug_prefixed_printf.
+	* linux-nat.c (linux_nat_debug_printf_1): Remove.
+	(linux_nat_debug_printf): Use debug_prefixed_printf.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* configure: Re-generate.
+	* sanitize.m4: Replace AC_TRY_LINK with AC_LINK_IFELSE +
+	AC_LANG_PROGRAM.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* configure: Re-generate.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* configure: Re-generate.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* configure: Re-generate.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* configure: Re-generate.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* acinclude.m4: Modernize.
+	* configure: Re-generate.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* configure.ac: Modernize.
+	* configure: Re-generate.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* acinclude.m4 (AM_PROG_CC_STDC): Remove.
+	* configure: Re-generate.
+	* configure.ac: Remove AM_PROG_CC_STDC.
+
+2020-10-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* configure.ac: Use AC_CANONICAL_{BUILD,HOST,TARGET} instead of
+	AC_CANONICAL_SYSTEM.
+	* configure: Re-generate.
+
+2020-10-30  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.h (displaced_debug_printf): New macro.  Replace
+	displaced debug prints throughout to use it.
+	(displaced_debug_printf_1): New declaration.
+	(displaced_step_dump_bytes): Return string, remove ui_file
+	parameter, update all callers.
+	* infrun.c (displaced_debug_printf_1): New function.
+	(displaced_step_dump_bytes): Return string, remove ui_file
+	parameter
+
+2020-10-30  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* rs6000-tdep.c (rs6000_dwarf2_reg_to_regnum): Return -1 for
+
+2020-10-30  Tom Tromey  <tromey@adacore.com>
+
+	* Makefile.in (stamp-init): Depend on config.status.
+
+2020-10-30  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infrun.c (fetch_inferior_event): Temporarily disable pagination.
+
+2020-10-30  Pedro Alves  <pedro@palves.net>
+
+	* thread.c (lookup_selected_frame): Move ...
+	* frame.c (lookup_selected_frame): ... here.
+
+2020-10-30  Pedro Alves  <pedro@palves.net>
+
+	* blockframe.c (block_innermost_frame): Use get_selected_frame.
+	* frame.c
+	(scoped_restore_selected_frame::scoped_restore_selected_frame):
+	Use save_selected_frame.  Save language as well.
+	(scoped_restore_selected_frame::~scoped_restore_selected_frame):
+	Use restore_selected_frame, and restore language as well.
+	(selected_frame_id, selected_frame_level): New.
+	(selected_frame): Update comments.
+	(save_selected_frame, restore_selected_frame): New.
+	(get_selected_frame): Use lookup_selected_frame.
+	(get_selected_frame_if_set): Delete.
+	(select_frame): Record selected_frame_level and selected_frame_id.
+	* frame.h (scoped_restore_selected_frame) <m_level, m_lang>: New
+	fields.
+	(get_selected_frame): Make 'message' parameter optional.
+	(get_selected_frame_if_set): Delete declaration.
+	(select_frame): Update comments.
+	(save_selected_frame, restore_selected_frame)
+	(lookup_selected_frame): Declare.
+	* gdbthread.h (scoped_restore_current_thread) <m_lang>: New field.
+	* infrun.c (struct infcall_control_state) <selected_frame_level>:
+	New field.
+	(save_infcall_control_state): Use save_selected_frame.
+	(restore_selected_frame): Delete.
+	(restore_infcall_control_state): Use restore_selected_frame.
+	* stack.c (select_frame_command_core, frame_command_core): Use
+	get_selected_frame.
+	* thread.c (restore_selected_frame): Rename to ...
+	(lookup_selected_frame): ... this and make extern.  Select the
+	current frame if the frame level is -1.
+	(scoped_restore_current_thread::restore): Also restore the
+	language.
+	(scoped_restore_current_thread::~scoped_restore_current_thread):
+	Don't try/catch.
+	(scoped_restore_current_thread::scoped_restore_current_thread):
+	Save the language as well.  Use save_selected_frame.
+
+2020-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbarch.sh (displaced_step_hw_singlestep): Adjust
+	documentation.
+	* gdbarch.h: Re-generate.
+
+2020-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbarch.sh (displaced_step_hw_singlestep): Remove closure
+	parameter.
+	* aarch64-tdep.c (aarch64_displaced_step_hw_singlestep):
+	Likewise.
+	* aarch64-tdep.h (aarch64_displaced_step_hw_singlestep):
+	Likewise.
+	* arch-utils.c (default_displaced_step_hw_singlestep):
+	Likewise.
+	* arch-utils.h (default_displaced_step_hw_singlestep):
+	Likewise.
+	* rs6000-tdep.c (ppc_displaced_step_hw_singlestep):
+	Likewise.
+	* s390-tdep.c (s390_displaced_step_hw_singlestep):
+	Likewise.
+	* gdbarch.c: Re-generate.
+	* gdbarch.h: Re-generate.
+	* infrun.c (resume_1): Adjust.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* progspace.c (program_space::~program_space): Don't call
+	exec_close.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* exec.c (exec_target::close): Don't change current program
+	space.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (add_symbol_file_command): Update.
+	* exec.c (program_space::add_target_sections): Rename.
+	* symfile-mem.c (symbol_file_add_from_memory): Update.
+	* progspace.h (struct program_space) <add_target_sections>:
+	Declare new overload.
+	* exec.h (add_target_sections_of_objfile): Don't declare.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* solib.c (solib_map_sections): Update.
+	* exec.c (program_space::add_target_sections): Now a method.
+	(exec_file_attach): Update.
+	* exec.h (add_target_sections): Don't declare.
+	* progspace.h (struct program_space) <add_target_sections>:
+	Declare.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* progspace.h (struct program_space) <remove_target_sections>:
+	Declare.
+	* exec.c (program_space::remove_target_sections): Now a method.
+	* exec.h (remove_target_sections): Don't declare.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* inferior.c (delete_inferior): Update.
+	* progspace.c (program_space::empty): Rename from
+	program_space_empty_p.  Return bool.
+	* progspace.h (struct program_space) <empty>: New method.
+	(program_space_empty_p): Don't declare.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* progspace.c (program_space::~program_space): Don't call
+	clear_program_space_solib_cache.
+	(program_space::clear_solib_cache): Rename from
+	clear_solib_cache.
+	* solib.c (handle_solib_event): Update.
+	* progspace.h (struct program_space) <clear_solib_cache>: New
+	method.
+	(clear_program_space_solib_cache): Don't declare.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* windows-tdep.c (windows_solib_create_inferior_hook): Update.
+	* target.c (info_target_command): Update.
+	* symfile.c (syms_from_objfile_1, finish_new_objfile)
+	(symbol_file_clear, reread_symbols): Update.
+	* symfile-mem.c (add_symbol_file_from_memory_command): Update.
+	* stabsread.c (scan_file_globals): Update.
+	* solib.c (update_solib_list): Update.
+	* solib-svr4.c (elf_locate_base, open_symbol_file_object)
+	(svr4_fetch_objfile_link_map, enable_break)
+	(svr4_relocate_main_executable)
+	(svr4_iterate_over_objfiles_in_search_order): Update.
+	* solib-frv.c (lm_base, enable_break)
+	(frv_relocate_main_executable): Update.
+	(main_got, frv_fdpic_find_canonical_descriptor): Update.
+	(frv_fetch_objfile_link_map): Update.
+	* solib-dsbt.c (lm_base, dsbt_relocate_main_executable): Update.
+	* solib-darwin.c (darwin_solib_create_inferior_hook): Update.
+	* solib-aix.c (solib_aix_solib_create_inferior_hook): Update.
+	* remote.c (remote_target::get_offsets): Update.
+	(remote_target::start_remote)
+	(extended_remote_target::post_attach): Update.
+	* objfiles.c (entry_point_address_query): Update.
+	* nto-procfs.c (nto_procfs_target::create_inferior): Update.
+	* minsyms.c (get_symbol_leading_char): Update.
+	* frame.c (inside_main_func): Update.
+	* progspace.h (symfile_objfile): Remove macro.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* exec.c (exec_file_attach): Update.
+	* progspace.c (program_space::exec_close): Update.
+	* progspace.h (struct program_space) <ebfd>: Now a
+	gdb_bfd_ref_ptr.
+	<set_exec_bfd>: Change argument type.
+	<exec_bfd>: Update.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* windows-tdep.c (windows_solib_create_inferior_hook): Update.
+	* symfile.c (reread_symbols): Update.
+	* symfile-mem.c (add_symbol_file_from_memory_command)
+	(add_vsyscall_page): Update.
+	* source-cache.c (source_cache::get_plain_source_lines): Update.
+	* solib-svr4.c (find_program_interpreter, elf_locate_base)
+	(svr4_current_sos_direct, svr4_exec_displacement)
+	(svr4_relocate_main_executable): Update.
+	(svr4_iterate_over_objfiles_in_search_order): Update.
+	* solib-frv.c (enable_break2, enable_break): Update.
+	* solib-dsbt.c (lm_base, enable_break): Update.
+	* solib-darwin.c (find_program_interpreter)
+	(darwin_solib_create_inferior_hook): Update.
+	* sol-thread.c (rw_common, ps_pdmodel): Update.
+	* rs6000-nat.c (rs6000_nat_target::create_inferior): Update.
+	* remote.c (compare_sections_command)
+	(remote_target::trace_set_readonly_regions): Update.
+	* remote-sim.c (get_sim_inferior_data)
+	(gdbsim_target::create_inferior, gdbsim_target::create_inferior): Update.
+	(gdbsim_target_open, gdbsim_target::files_info): Update.
+	* exec.h (exec_bfd): Remove macro.
+	* progspace.c (initialize_progspace): Update.
+	* proc-service.c (ps_addr_to_core_addr, core_addr_to_ps_addr):
+	Update.
+	* nto-procfs.c (nto_procfs_target::post_attach)
+	(nto_procfs_target::create_inferior): Update.
+	* maint.c (maintenance_info_sections): Update.
+	* linux-thread-db.c (thread_db_target::get_thread_local_address):
+	Update.
+	* infcmd.c (post_create_inferior): Update.
+	* gcore.c (default_gcore_arch, default_gcore_target): Update.
+	(objfile_find_memory_regions): Update.
+	* exec.c (validate_exec_file, exec_file_attach)
+	(exec_read_partial_read_only, print_section_info): Update.
+	* corelow.c (core_target_open): Update.
+	* corefile.c (reopen_exec_file, validate_files): Update.
+	* arm-tdep.c (gdb_print_insn_arm): Update.
+	* arch-utils.c (gdbarch_update_p, default_print_insn): Update.
+	* progspace.h (struct program_space) <exec_bfd, set_exec_bfd>: New
+	methods.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* progspace.h (current_target_sections): Remove macro.
+	* solib-svr4.c (scan_dyntag): Update.
+	* solib-dsbt.c (scan_dyntag): Update.
+	* exec.c (exec_target::close): Update.
+	(add_target_sections, add_target_sections_of_objfile)
+	(remove_target_sections, exec_target::get_section_table)
+	(exec_target::files_info, set_section_command)
+	(exec_set_section_address, exec_target::has_memory)
+	(exec_target::has_memory): Update.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* source-cache.c (source_cache::get_plain_source_lines): Use
+	current_program_space.
+	* corefile.c (reopen_exec_file): Use current_program_space.
+	* exec.c (exec_file_attach): Use current_program_space.
+	* exec.h (exec_bfd_mtime): Remove.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* gcore.c (default_gcore_mach): Remove.
+	(create_gcore_bfd): Update.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* progspace.c (program_space::exec_close): New method, from
+	exec_close in exec.c.
+	* exec.c (exec_close): Move to progspace.c.
+	(exec_target::close, exec_file_attach): Update.
+	* progspace.h (struct program_space) <exec_close>: Declare
+	method.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* progspace.h (struct program_space) <exec_filename>: Rename from
+	pspace_exec_filename.  Now a unique_xmalloc_ptr.
+	* inferior.c (print_selected_inferior): Update.
+	(print_inferior): Update.
+	* mi/mi-main.c (print_one_inferior): Update.
+	* exec.h (exec_filename): Remove macro.
+	* corefile.c (get_exec_file): Update.
+	* exec.c (exec_close): Update.
+	(exec_file_attach): Update.
+	* progspace.c (clone_program_space): Update.
+	(print_program_space): Update.
+
+2020-10-29  Tom Tromey  <tom@tromey.com>
+
+	* target-section.h (struct target_section): Add constructor.
+	* exec.c (build_section_table, add_target_sections_of_objfile):
+	Update.
+	* corelow.c (core_target::build_file_mappings): Update.
+
+2020-10-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	PR gdb/19318
+	* inferior.c (detach_inferior_command): Restore the current thread.
+	(kill_inferior_command): Ditto.
+
+2020-10-28  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/26772
+	* symtab.c (find_pc_sect_compunit_symtab): In case there's an address
+	map, check it in the "best match" loop.
+
+2020-10-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* m32c-tdep.c: Remove unused includes.
+
+2020-10-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* xtensa-tdep.c: Remove includes.
+
+2020-10-27  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.c (struct condition_command_opts): New struct.
+	(condition_command_option_defs): New static global.
+	(make_condition_command_options_def_group): New function.
+	(condition_completer): Update to consider the '-force' flag.
+	(condition_command): Use gdb::option for the '-force' flag.
+
+2020-10-27  Tom de Vries  <tdevries@suse.de>
+
+	* symtab.c (find_pc_sect_compunit_symtab): Include STATIC_BLOCK
+	symbols in section check.
+
+2020-10-27  Tom de Vries  <tdevries@suse.de>
+
+	* symtab.c (find_pc_sect_compunit_symtab): Use early continue.
+
+2020-10-27  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.h (set_breakpoint_condition): Add a new bool parameter.
+	* breakpoint.c: Update the help text of the 'condition' and 'break'
+	commands.
+	(set_breakpoint_condition): Take a new bool parameter
+	to control whether condition definition should be forced even when
+	the condition expression is invalid in all of the current locations.
+	(condition_command): Update the call to 'set_breakpoint_condition'.
+	(find_condition_and_thread): Take the "-force-condition" flag into
+	account.
+	* linespec.c (linespec_keywords): Add "-force-condition" as an
+	element.
+	(FORCE_KEYWORD_INDEX): New #define.
+	(linespec_lexer_lex_keyword): Update to consider "-force-condition"
+	as a keyword.
+	* ada-lang.c (create_ada_exception_catchpoint): Ditto.
+	* guile/scm-breakpoint.c (gdbscm_set_breakpoint_condition_x): Ditto.
+	* python/py-breakpoint.c (bppy_set_condition): Ditto.
+	* NEWS: Mention the changes to the 'break' and 'condition' commands.
+
+2020-10-27  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.h (class bp_location) <disabled_by_cond>: New field.
+	* breakpoint.c (set_breakpoint_location_condition): New function.
+	(set_breakpoint_condition): Disable a breakpoint location if parsing
+	the condition string gives an error.
+	(should_be_inserted): Update to consider the 'disabled_by_cond' field.
+	(build_target_condition_list): Ditto.
+	(build_target_command_list): Ditto.
+	(build_bpstat_chain): Ditto.
+	(print_one_breakpoint_location): Ditto.
+	(print_one_breakpoint): Ditto.
+	(breakpoint_1): Ditto.
+	(bp_location::bp_location): Ditto.
+	(locations_are_equal): Ditto.
+	(update_breakpoint_locations): Ditto.
+	(enable_disable_bp_num_loc): Ditto.
+	(init_breakpoint_sal): Use set_breakpoint_location_condition.
+	(find_condition_and_thread_for_sals): New static function.
+	(create_breakpoint): Call find_condition_and_thread_for_sals.
+	(location_to_sals): Call find_condition_and_thread_for_sals instead
+	of find_condition_and_thread.
+
+2020-10-26  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (process_full_comp_unit): Call
+	dwarf2_find_base_address.
+
+2020-10-26  Tom Tromey  <tromey@adacore.com>
+
+	* gdbtypes.c (create_range_type): Revert previous patch.  Add
+	comment.
+
+2020-10-26  Pedro Alves  <pedro@palves.net>
+
+	* nat/linux-waitpid.c: Include "gdbsupport/eintr.h".
+	(my_waitpid): Use gdb::handle_eintr.
+
+2020-10-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* acinclude.m4: Update ptrace.m4 path.
+	* ptrace.m4: Moved to gdbsupport.
+
+2020-10-24  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* symfile-mem.c (add_vsyscall_page): Use inferior parameter
+	instead of target_gdbarch.
+
+2020-10-24  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (jit_reader_load_command): Pass current inferior.
+	(jit_inferior_init): Change parameter type to inferior, use it.
+	(jit_inferior_created): Remove.
+	(jit_inferior_created_hook): Pass inferior parameter down.
+	(_initialize_jit): Use jit_inferior_created_hook instead of
+	jit_inferior_created.
+	* jit.h (jit_inferior_created_hook): Add inferior parameter.
+	* infrun.c (follow_exec): Pass inferior to
+	jit_inferior_created_hook.
+
+2020-10-24  Simon Marchi  <simon.marchi@efficios.com>
+
+	* linux-thread-db.c (check_pid_namespace_match): Add inferior
+	parameter and use it.
+	(thread_db_inferior_created): Pass inferior argument.
+
+2020-10-24  Simon Marchi  <simon.marchi@efficios.com>
+
+	* aix-thread.c (aix_thread_inferior_created): Add inferior
+	parameter.
+	* bsd-uthread.c (bsd_uthread_inferior_created): Likewise.
+	* dummy-frame.c (cleanup_dummy_frames): Likewise.
+	* jit.c (jit_inferior_created): Likewise.
+	* linux-thread-db.c (thread_db_inferior_created): Likewise.
+	* m68k-linux-tdep.c (m68k_linux_inferior_created): Likewise.
+	* observable.h (inferior_created): Likewise.
+	* ravenscar-thread.c (ravenscar_inferior_created): Likewise.
+	* symfile-mem.c (add_vsyscall_page): Likewise.
+	* infcmd.c (post_create_inferior): Pass inferior argument.
+
+2020-10-24  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 10.1 released.
+
+2020-10-23  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-typeprint.c (ada_print_type): Remove superfluous second call
+	to ada_check_typedef.
+
+2020-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (f_parse): Rename to...
+	(f_language::parser): ...this.
+	* f-lang.c (f_get_encoding): Rename to...
+	(f_language::get_encoding): ...this.
+	(f_op_print_tab): Rename to...
+	(f_language::op_print_tab): ...this.
+	(exp_descriptor_f): Rename to...
+	(f_language::exp_descriptor_tab): ...this.
+	(class f_language): Moved to f-lang.h.
+	(f_language::language_arch_info): New function, moved out of class
+	declaration.
+	(f_language::search_name_hash): Likewise.
+	(f_language::lookup_symbol_nonlocal): Likewise.
+	(f_language::get_symbol_name_matcher_inner): Likewise.
+	* f-lang.h: Add 'valprint.h' include.
+	(class f_language): Moved here from f-lang.c.
+	* f-typeprint.c (f_type_print_args): Delete commented out
+	declaration.
+	(f_print_typedef): Rename to...
+	(f_language::print_typedef): ...this.
+	(f_print_type): Rename to...
+	(f_language::print_type): ...this.
+	(f_type_print_varspec_prefix): Delete declaration and rename to...
+	(f_language::f_type_print_varspec_prefix): ...this.
+	(f_type_print_varspec_suffix): Delete declaration and rename to...
+	(f_language::f_type_print_varspec_suffix): ...this.
+	(f_type_print_base): Delete declaration and rename to...
+	(f_language::f_type_print_base): ...this.
+	* f-valprint.c (f_value_print_inner): Rename to...
+	(f_language::value_print_inner): ...this.
+	* parse.c: Delete 'f-lang.h' include.
+
+2020-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* language.h (language_defn::print_type): Add variable names in
+	declaration, and update header comment.
+
+2020-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language::demangle): Rename to...
+	(ada_language::demangle_symbol): ...this.
+	* c-lang.c (cplus_language::demangle): Rename to...
+	(cplus_language::demangle_symbol): ...this.
+	* d-lang.c (d_language::demangle): Rename to...
+	(d_language::demangle_symbol): ...this.
+	* f-lang.c (f_language::demangle): Rename to...
+	(f_language::demangle_symbol): ...this.
+	* go-lang.c (go_language::demangle): Rename to...
+	(go_language::demangle_symbol): ...this.
+	* language.c (language_demangle): Update call to demangle_symbol.
+	(auto_or_unknown_language::demangle): Rename to...
+	(auto_or_unknown_language::demangle_symbol): ...this.
+	* language.h (language_defn::demangle): Rename to...
+	(language_defn::demangle_symbol): ...this.
+	* objc-lang.c (objc_language::demangle): Rename to...
+	(objc_language::demangle_symbol): ...this.
+	* rust-lang.c (rust_language::demangle): Rename to...
+	(rust_language::demangle_symbol): ...this.
+
+2020-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* language.h (LA_ITERATE_OVER_SYMBOLS): Delete.
+	(iterate_over_file_blocks): Replace use of macro with the macros
+	definition.
+
+2020-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* language.h (LA_PRINT_ARRAY_INDEX): Delete.
+	* valprint.c (maybe_print_array_index): Replace use of macro with
+	the macros definition.
+
+2020-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language::print_array_index): Call value_print
+	directly.
+	* language.c (language_defn::print_array_index): Likewise.
+	* language.h (LA_VALUE_PRINT): Delete.
+	* valprint.c (value_print): Call value_print on the
+	current_language directly.
+
+2020-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* language.h (LA_PRINT_TYPEDEF): Delete.
+	* typeprint.c (typedef_print): Call print_typedef directly on the
+	current_language object.
+
+2020-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* m2-exp.y (m2_parse): Rename to...
+	(m2_language::parser): ...this.  Update function signature.
+	* m2-lang.c (m2_printchar): Renamed to m2_language::printchar.
+	(m2_op_print): Rename to...
+	(m2_language::op_print_tab): ...this, and make const.
+	(exp_descriptor_modula2): Rename to...
+	(m2_language::exp_descriptor_modula2): ...this.
+	(class m2_language): Move to m2-lang.h.
+	(m2_language::language_arch_info): New function, moved out of
+	class declaration.
+	(m2_language::printchar): New function, body from m2_printchar.
+	(m2_language::printstr): New function, moved out of class
+	declaration.
+	(m2_language::emitchar): Likewise.
+	* m2-lang.h (m2_parse): Delete declaration.
+	(m2_print_typedef): Delete declaration.
+	(m2_value_print_inner): Delete declaration.
+	(class m2_language): Class declaration moved from m2-lang.c,
+	larger functions are left in m2-lang.c.
+	* m2-typeprint.c (m2_print_typedef): Rename to...
+	(m2_language::print_typedef): ...this, and update function
+	signature.
+	* m2-valprint.c (m2_value_print_inner): Rename to...
+	(m2_language::value_print_inner): ...this, replace use of
+	LA_PRINT_STRING with a direct call to printstr member function,
+	and update recursive call.
+
+2020-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* language.c (default_is_string_type_p): Delete, implementation
+	moved into auto_or_unknown_language::is_string_type_p.
+	(unk_op_print_tab): Moved into
+	auto_or_unknown_language::opcode_print_table.
+	(unknown_language_arch_info): Delete, implementation moved into
+	auto_or_unknown_language::language_arch_info.
+	(class auto_or_unknown_language): New class, member functions
+	copied from unknown_language class, with some updates.
+	(class unknown_language): Most member functions moved into
+	auto_or_unknown_language class.  Inherit from
+	auto_or_unknown_language class.
+	(class auto_language): Inherit from auto_or_unknown_language.
+	Delete most member functions.
+
+2020-10-22  Hannes Domani  <ssbssa@yahoo.de>
+
+	* stabsread.c (read_member_functions): Remove gdb_assert.
+
+2020-10-22  Hannes Domani  <ssbssa@yahoo.de>
+
+	* gdbtypes.c (init_complex_type): Check target type name.
+
+2020-10-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target-debug.h (target_debug_print_struct_target_ops_p):
+	Remove.
+	(target_debug_print_async_callback_ftype_p): Remove.
+	(target_debug_print_struct_trace_state_variable_p): Remove.
+	(target_debug_print_struct_traceframe_info_p): Remove.
+	(target_debug_print_VEC__btrace_block_s__pp): Remove.
+	(target_debug_print_enum_btrace_format): Remove.
+	(target_debug_print_enum_info_proc_what): Remove.
+	(target_debug_print_thread_info_pp): Remove.
+
+2020-10-22  Simon Marchi  <simon.marchi@efficios.com>
+
+	* target.h (struct target_ops) <make_corefile_notes>:
+	Change return type to unique pointer.
+	* target.c (dummy_make_corefile_notes): Likewise.
+	* exec.c (struct exec_target) <make_corefile_notes>:
+	Likewise.
+	(exec_target::make_corefile_notes): Likewise.
+	* procfs.c (class procfs_target) <make_corefile_notes>:
+	Likewise.
+	(procfs_do_thread_registers): Adjust to unique pointer.
+	(struct procfs_corefile_thread_data): Add constructor.
+	<note_data>: Change type to unique pointer.
+	(procfs_corefile_thread_callback): Adjust to unique pointer.
+	(procfs_target::make_corefile_notes): Change return type to
+	unique pointer.
+	* target-delegates.c: Re-generate.
+	* gcore.c (write_gcore_file_1): Adjust.
+	* target-debug.h (target_debug_print_gdb_unique_xmalloc_ptr_char):
+	New.
+
+2020-10-22  Tom de Vries  <tdevries@suse.de>
+
+	* block.c (find_block_in_blockvector): Make sure the returned block
+	contains pc.
+
+2020-10-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/26693
+	* dwarf2/read.c (load_full_comp_unit): Add existing_cu
+	parameter.
+	(load_cu): Pass existing CU.
+	(process_imported_unit_die): Likewise.
+	(follow_die_offset): Likewise.
+
+2020-10-22  Luis Machado  <luis.machado@linaro.org>
+
+	* corelow.c (core_target::xfer_partial): Also check for an empty
+	m_core_unavailable_mappings vector.
+
+2020-10-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* expprint.c (dump_subexp_body_standard): Print RANGE_HAS_STRIDE.
+	* expression.h (enum range_type): Add RANGE_HAS_STRIDE.
+	* f-exp.y (arglist): Allow for a series of subranges.
+	(subrange): Add cases for subranges with strides.
+	* f-lang.c (value_f90_subarray): Catch use of array strides and
+	throw an error.
+	* parse.c (operator_length_standard): Handle RANGE_HAS_STRIDE.
+
+2020-10-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* expprint.c (print_subexp_standard): Change enum range_type to
+	range_flag and rename variables to match.
+	(dump_subexp_body_standard): Likewise.
+	* expression.h (enum range_type): Rename to...
+	(enum range_flag): ...this.
+	(range_types): Rename to...
+	(range_flags): ...this.
+	* f-lang.c (value_f90_subarray): Change enum range_type to
+	range_flag and rename variables to match.
+	* parse.c (operator_length_standard): Likewise.
+	* rust-exp.y (rust_parser::convert_ast_to_expression): Change enum
+	range_type to range_flag.
+	* rust-lang.c (rust_evaluate_funcall): Likewise.
+	(rust_range): Likewise.
+	(rust_compute_range): Likewise.
+	(rust_subscript): Likewise.
+
+2020-10-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* expprint.c (print_subexp_standard): Update to reflect changes to
+	enum range_type.
+	(dump_subexp_body_standard): Likewise.
+	* expression.h (enum range_type): Convert to a bit field enum, and
+	make the enum unsigned.
+	* f-exp.y (subrange): Update to reflect changes to enum
+	range_type.
+	* f-lang.c (value_f90_subarray): Likewise.
+	* parse.c (operator_length_standard): Likewise.
+	* rust-exp.y (rust_parser::convert_ast_to_expression): Likewise.
+	* rust-lang.c (rust_range): Likewise.
+	(rust_compute_range): Likewise.
+	(rust_subscript): Likewise.
+
+2020-10-21  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.c (displaced_step_in_progress_thread): Fix comment.
+	(displaced_step_in_progress): Fix comment.
+
+2020-10-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbarch.sh (make_corefile_notes): Return unique pointer.
+	* gdbarch.c: Re-generate.
+	* gdbarch.h: Re-generate.
+	* gcore.c (write_gcore_file_1): Adjust.
+	* fbsd-tdep.c (struct fbsd_collect_regset_section_cb_data): Add
+	constructor.
+	<note_data>: Change type to unique pointer.
+	<abort_iteration>: Change type to bool.
+	(fbsd_collect_regset_section_cb): Adjust to unique pointer.
+	(fbsd_collect_thread_registers): Return void, adjust.
+	(struct fbsd_corefile_thread_data): Add construtor.
+	<note_data>: Change type to unique pointer.
+	(fbsd_corefile_thread): Adjust.
+	(fbsd_make_corefile_notes): Return unique pointer, adjust.
+	* linux-tdep.c (linux_make_mappings_corefile_notes): Change type
+	to unique pointer, adjust.
+	(struct linux_collect_regset_section_cb_data): Add constructor.
+	<note_data>: Change type to unique pointer.
+	<abort_iteration>: Change type to bool.
+	(linux_collect_thread_registers): Return void, adjust.
+	(struct linux_corefile_thread_data): Add constructor.
+	<note_data>: Change type to unique pointer.
+	(linux_corefile_thread): Adjust.
+	(linux_make_corefile_notes): Return unique pointer, adjust.
+
+2020-10-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbarch.sh (displaced_step_hw_singlestep): Return bool.
+	* gdbarch.c: Re-generate.
+	* gdbarch.h: Re-generate.
+	* aarch64-tdep.c (aarch64_displaced_step_hw_singlestep): Return
+	bool.
+	* aarch64-tdep.h (aarch64_displaced_step_hw_singlestep):
+	Likewise.
+	* arch-utils.h (default_displaced_step_hw_singlestep): Likewise.
+	* arch-utils.c (default_displaced_step_hw_singlestep): Likewise.
+	* rs6000-tdep.c (ppc_displaced_step_hw_singlestep): Likewise.
+	* s390-tdep.c (s390_displaced_step_hw_singlestep): Likewise.
+
+2020-10-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbarch.sh: Make generated predicates return bool.
+	* gdbarch.c: Re-generate.
+	* gdbarch.h: Re-generate.
+
+2020-10-20  Tom Tromey  <tom@tromey.com>
+
+	* varobj-iter.h (struct varobj_item): Remove typedef.
+
+2020-10-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (currently_stepping): Change int to bool
+	(maybe_software_singlestep): Likewise.
+	(show_stop_on_solib_events): Likewise.
+	(stepping_past_nonsteppable_watchpoint): Likewise.
+	(displaced_step_in_progress_any_inferior): Likewise.
+	(displaced_step_in_progress_thread): Likewise.
+	(keep_going_stepped_thread): Likewise.
+	(thread_still_needs_step_over): Likewise.
+	(start_step_over): Likewise.
+	(do_target_resume): Likewise.
+	(resume_1): Likewise.
+	(clear_proceed_status): Likewise.
+	(thread_still_needs_step_over_bp): Likewise.
+	(proceed): Likewise.
+	(switch_back_to_stepped_thread): Likewise.
+	(adjust_pc_after_break): Likewise.
+	(stepped_in_from): Likewise.
+	(handle_stop_requested): Likewise.
+	(handle_syscall_event): Likewise.
+	(handle_no_resumed): Likewise.
+	(handle_inferior_event): Likewise.
+	(finish_step_over): Likewise.
+	(handle_signal_stop): Likewise.
+	(process_event_stop_test): Likewise.
+
+2020-10-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (get_displaced_stepping_state): Fix comment.
+
+2020-10-20  Andreas Schwab  <schwab@linux-m68k.org>
+
+	* cli/cli-cmds.c (_initialize_cli_cmds): Fix alias command help.
+
+2020-10-19  Tom Tromey  <tromey@adacore.com>
+
+	PR tui/26719
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<refresh_window>: Rename from refresh_pad.
+	* tui/tui-winsource.c (tui_source_window_base::refresh_window):
+	Rename from refresh_pad.
+	(tui_source_window_base::show_source_content)
+	(tui_source_window_base::do_scroll_horizontal): Update.
+
+2020-10-19  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* thread.c (_initialize_thread): Fine-tune the help text of
+	'info threads'.
+
+2020-10-19  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* frame.c: Remove the unused 'uinteger_option_def' type alias.
+
+2020-10-14  Mihails Strasuns  <mihails.strasuns@intel.com>
+
+	* breakpoint.c (handle_jit_event): Add an argument, change how
+	`jit_event_handler` is called.
+
+2020-10-17  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_end_psymtab): Use partial_symtab::empty.
+	(scan_xcoff_symtab): Update.
+	* psymtab.h (class psymtab_storage) <global_psymbols,
+	static_psymbols, current_global_psymbols,
+	current_static_psymbols>: Remove.
+	* psymtab.c (require_partial_symbols, find_pc_sect_psymbol)
+	(match_partial_symbol, lookup_partial_symbol): Update.
+	(print_partial_symbols): Change parameters.
+	(dump_psymtab, recursively_search_psymtabs)
+	(psym_fill_psymbol_map, psym_find_compunit_symtab_by_address)
+	(sort_pst_symbols, partial_symtab::partial_symtab): Update.
+	(concat): Remove.
+	(end_psymtab_common): Simplify.
+	(append_psymbol_to_list): Change parameters.
+	(partial_symtabs::add_psymbol): Rename from add_psymbol_to_list.
+	(init_psymbol_list): Simplify.
+	(maintenance_info_psymtabs, maintenance_check_psymtabs): Update.
+	* psympriv.h (struct partial_symtab) <empty>: New method.
+	<globals_offset, n_global_syms, statics_offset, n_static_syms>:
+	Remove.
+	<global_psymbols, static_psymbols>: New members.
+	<add_psymbol>: New methods.
+	(add_psymbol_to_list): Don't declare.
+	(psymbol_placement): Move earlier.
+	* mdebugread.c (parse_partial_symbols): Update.
+	(handle_psymbol_enumerators): Change parameters.
+	(mdebug_expand_psymtab): Update.
+	* dwarf2/read.c (process_psymtab_comp_unit_reader)
+	(add_partial_symbol): Update.
+	* dwarf2/index-write.c (write_psymbols): Change parameters.
+	(write_one_signatured_type): Update.
+	(recursively_count_psymbols): Update.
+	(recursively_write_psymbols): Update.
+	(class debug_names) <recursively_write_psymbols>: Update.
+	<write_psymbols>: Change parameters.
+	<write_one_signatured_type>: Update.
+	* dbxread.c (read_dbx_symtab): Update.
+	(dbx_end_psymtab): Use partial_symtab::empty.
+	* ctfread.c (struct ctf_context) <pst>: New member.
+	(create_partial_symtab): Set it.
+	(ctf_psymtab_type_cb, ctf_psymtab_var_cb): Update.
+	(scan_partial_symbols): Use the psymtab's context.  Update.
+
+2020-10-17  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_value_print): Remove comment.
+	* m2-valprint.c (m2_value_print_inner): Remove comment.
+	* gdbtypes.c (create_range_type): Set TYPE_UNSIGNED from base
+	type.
+
+2020-10-17  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/26317
+	* source.c (select_source_symtab): Handling sal.symtab == NULL for
+	symbol main.
+
+2020-10-14  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/26733
+	* solib.c (solib_contains_address_p): Handle
+	'solib->sections == nullptr'.
+
+2020-10-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/26642
+	* infrun.c (do_target_wait_1): Clear TARGET_WNOHANG if the
+	target can't do async.
+	* target.c (target_wait): Assert that we don't pass
+	TARGET_WNOHANG to a target that can't async.
+
+2020-10-13  Kamil Rytarowski  <n54@gmx.com>
+
+	* Makefile.in (ALL_64_TARGET_OBS, ALL_TARGET_OBS)
+	HFILES_NO_SRCDIR, ALLDEPFILES): Rename files.
+	* alpha-bsd-nat.c: Adjust include.
+	* alpha-bsd-tdep.h: Adjust comment.
+	* alpha-nbsd-tdep.c: Rename to ...
+	* alpha-netbsd-tdep.c: ... this, adjust include.
+	* amd64-nbsd-nat.c: Rename to ...
+	* amd64-netbsd-nat.c: ... this, adjust include.
+	* amd64-nbsd-tdep.c: Rename to ...
+	* amd64-netbsd-tdep.c: ... this, adjust include.
+	* amd64-tdep.h: Adjust include.
+	* arm-nbsd-nat.c: Rename to ...
+	* arm-netbsd-nat.c: ... this, adjust include.
+	* arm-nbsd-tdep.c: Rename to ...
+	* arm-netbsd-tdep.c: ... this, adjust include.
+	* arm-nbsd-tdep.h: Rename to ...
+	* arm-netbsd-tdep.h: ... this, adjust include.
+	* configure.nat: Adjust file lists.
+	* configure.tgt: Likewise.
+	* hppa-nbsd-nat.c: Rename to ...
+	* hppa-netbsd-nat.c: ... this, adjust include.
+	* hppa-nbsd-tdep.c: Rename to ...
+	* hppa-netbsd-tdep.c: ... this, adjust include.
+	* i386-nbsd-nat.c: Rename to ...
+	* i386-netbsd-nat.c: ... this, adjust include.
+	* i386-nbsd-tdep.c: Rename to ...
+	* i386-netbsd-tdep.c: ... this, adjust include.
+	* m68k-bsd-nat.c: Adjust include.
+	* mips-nbsd-nat.c: Rename to ...
+	* mips-netbsd-nat.c: ... this, adjust include.
+	* mips-nbsd-tdep.c: Rename to ...
+	* mips-netbsd-tdep.c: ... this, adjust include.
+	* mips-nbsd-tdep.h: Rename to ...
+	* mips-netbsd-tdep.h: ... this.
+	* nbsd-nat.c: Rename to ...
+	* netbsd-nat.c: ... this, adjust include.
+	* nbsd-nat.h: Rename to ...
+	* netbsd-nat.h: ... this, adjust include.
+	* nbsd-tdep.c: Rename to ...
+	* netbsd-tdep.c: ... this, adjust include.
+	* nbsd-tdep.h: Rename to ...
+	* netbsd-tdep.h: ... this.
+	* ppc-nbsd-nat.c: Rename to ...
+	* ppc-netbsd-nat.c: ... this, adjust include.
+	* ppc-nbsd-tdep.c: Rename to ...
+	* ppc-netbsd-tdep.c: ... this, adjust include and comment.
+	* ppc-nbsd-tdep.h: Rename to ...
+	* ppc-netbsd-tdep.h: ... this.
+	* sh-nbsd-nat.c: Rename to ...
+	* sh-netbsd-nat.c: ... this, adjust include.
+	* sh-nbsd-tdep.c: Rename to ...
+	* sh-netbsd-tdep.c: ... this, adjust include.
+	* sparc-nbsd-nat.c: Rename to ...
+	* sparc-netbsd-nat.c: ... this.
+	* sparc-nbsd-tdep.c: Rename to ...
+	* sparc-netbsd-tdep.c: ... this, adjust include.
+	* sparc64-nbsd-nat.c: Rename to ...
+	* sparc64-netbsd-nat.c: ... this.
+	* sparc64-nbsd-tdep.c: Rename to ...
+	* sparc64-netbsd-tdep.c: ... this, adjust include.
+	* sparc64-tdep.h: Adjust comment.
+	* vax-bsd-nat.c: Adjust include.
+	* vax-nbsd-tdep.c: Rename to ...
+	* vax-netbsd-tdep.c: ... this, adjust include.
+
+2020-10-12  Tom Tromey  <tom@tromey.com>
+
+	* target.h (struct target_ops) <get_section_table>: Update.
+	(target_get_section_table): Update.
+	* target.c (target_get_section_table, target_section_by_addr)
+	(memory_xfer_partial_1): Update.
+	* target-section.h (target_section_table): Now an alias.
+	* target-delegates.c: Rebuild.
+	* target-debug.h (target_debug_print_target_section_table_p):
+	Rename from target_debug_print_struct_target_section_table_p.
+	* symfile.c (build_section_addr_info_from_section_table): Update.
+	* solib.c (solib_map_sections, solib_contains_address_p): Update.
+	* solib-svr4.c (scan_dyntag): Update.
+	* solib-dsbt.c (scan_dyntag): Update.
+	* remote.c (remote_target::remote_xfer_live_readonly_partial):
+	Update.
+	* record-full.c (record_full_core_target::xfer_partial): Update.
+	* progspace.h (struct program_space) <target_sections>: Update.
+	* exec.h (print_section_info): Update.
+	* exec.c (exec_target::close, build_section_table)
+	(add_target_sections, add_target_sections_of_objfile)
+	(remove_target_sections, exec_on_vfork)
+	(section_table_available_memory)
+	(section_table_xfer_memory_partial)
+	(exec_target::get_section_table, exec_target::xfer_partial)
+	(print_section_info, set_section_command)
+	(exec_set_section_address, exec_target::has_memory): Update.
+	* corelow.c (core_target::build_file_mappings)
+	(core_target::xfer_partial, core_target::info_proc_mappings)
+	(core_target::info_proc_mappings): Update.
+	* bfd-target.c (class target_bfd): Update
+
+2020-10-12  Tom Tromey  <tom@tromey.com>
+
+	* progspace.c (program_space::~program_space): Don't call
+	clear_section_table.
+	* exec.h (clear_section_table): Don't declare.
+	* exec.c (exec_target::close): Update.
+	(clear_section_table): Remove.
+
+2020-10-12  Tom Tromey  <tom@tromey.com>
+
+	* exec.c (add_target_sections_of_objfile): Simplify.
+
+2020-10-12  Tom Tromey  <tom@tromey.com>
+
+	* solib.c (solib_map_sections): Update.
+	* record-full.c (record_full_core_open_1): Update.
+	* exec.h (build_section_table): Return a target_section_table.
+	* exec.c (exec_file_attach): Update.
+	(build_section_table): Return a target_section_table.
+	* corelow.c (core_target::core_target): Update.
+	* bfd-target.c (target_bfd::target_bfd): Update.
+
+2020-10-12  Tom Tromey  <tom@tromey.com>
+
+	* target.c (target_section_by_addr, memory_xfer_partial_1):
+	Update.
+	* target-section.h (struct target_section_table): Use
+	std::vector.
+	* symfile.h (build_section_addr_info_from_section_table): Take a
+	target_section_table.
+	* symfile.c (build_section_addr_info_from_section_table): Take a
+	target_section_table.
+	* solist.h (struct so_list) <sections>: Change type.
+	<sections_end>: Remove.
+	* solib.c (solib_map_sections, clear_so, solib_read_symbols)
+	(solib_contains_address_p): Update.
+	* solib-svr4.c (scan_dyntag): Update.
+	* solib-dsbt.c (scan_dyntag): Update.
+	* remote.c (remote_target::remote_xfer_live_readonly_partial):
+	Update.
+	* record-full.c (record_full_core_start, record_full_core_end):
+	Remove.
+	(record_full_core_sections): New global.
+	(record_full_core_open_1, record_full_core_target::xfer_partial):
+	Update.
+	* exec.h (build_section_table, section_table_xfer_memory_partial)
+	(add_target_sections): Take a target_section_table.
+	* exec.c (exec_file_attach, clear_section_table): Update.
+	(resize_section_table): Remove.
+	(build_section_table, add_target_sections): Take a
+	target_section_table.
+	(add_target_sections_of_objfile, remove_target_sections)
+	(exec_on_vfork): Update.
+	(section_table_available_memory): Take a target_section_table.
+	(section_table_read_available_memory): Update.
+	(section_table_xfer_memory_partial): Take a target_section_table.
+	(print_section_info, set_section_command)
+	(exec_set_section_address, exec_target::has_memory): Update.
+	* corelow.c (class core_target) <m_core_section_table,
+	m_core_file_mappings>: Remove braces.
+	<~core_target>: Remove.
+	(core_target::core_target): Update.
+	(core_target::~core_target): Remove.
+	(core_target::build_file_mappings)
+	(core_target::xfer_memory_via_mappings)
+	(core_target::xfer_partial, core_target::info_proc_mappings):
+	Update.
+	* bfd-target.c (target_bfd::xfer_partial): Update.
+	(target_bfd::target_bfd): Update.
+	(target_bfd::~target_bfd): Remove.
+
+2020-10-12  Tom Tromey  <tom@tromey.com>
+
+	* target.h (struct target_section, struct target_section_table):
+	Move to target-section.h.
+	* target-section.h: New file.
+
+2020-10-12  Pedro Alves  <pedro@palves.net>
+
+	PR exp/26602
+	* valops.c (struct struct_field_searcher): New.
+	(update_search_result): Rename to ...
+	(struct_field_searcher::update_result): ... this.  Simplify
+	prototype.  Record all found fields.
+	(do_search_struct_field): Rename to ...
+	(struct_field_searcher::search): ... this.  Simplify prototype.
+	Maintain stack of visited baseclass path.  Call update_result for
+	fields too.  Keep searching fields in baseclasses instead of
+	stopping at the first found field.
+	(search_struct_field): Use struct_field_searcher.  When looking
+	for fields, report ambiguous access attempts.
+
+2020-10-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* frame.c (inside_main_func): Check full symbols as well as
+	minimal symbols.
+
+2020-10-09  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-lang.c (advance_wild_match): Rewrite the function's
+	description.  Change the type of target0, t0 and t1 to char.
+
+2020-10-09  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (dwarf2_add_field): Handle signed offsets.
+
+2020-10-09  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.h (ada_encode): Return std::string.
+	* ada-lang.c (ada_encode_1): Return std::string.
+	(ada_encode): Likewise.
+	(type_from_tag, ada_lookup_name_info::ada_lookup_name_info):
+	Update.
+	* ada-exp.y (block_lookup, write_var_or_type): Update.
+
+2020-10-09  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR exp/26714
+	* printcmd.c (print_formatted): Handle void results as
+	unformatted prints.
+
+2020-10-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arch/aarch32.c (aarch32_create_target_description): Release the
+	target_desc_up as late as possible.
+	* arch/aarch64.c (aarch64_create_target_description): Likewise.
+	* arch/amd64.c (amd64_create_target_description): Likewise.
+	* arch/arc.c (arc_create_target_description): Return a
+	target_desc_up, don't release it.
+	* arch/arc.h (arc_create_target_description): Update declaration.
+	(arc_lookup_target_description): Move target_desc_up into the
+	cache, and return a borrowed pointer.
+	* arch/arm.c (arm_create_target_description): Release the
+	target_desc_up as late as possible.
+	* arch/i386.c (i386_create_target_description): Likewise.
+	* arch/riscv.h (riscv_create_target_description): Update
+	declaration to match definition.
+	* arch/tic6x.c (tic6x_create_target_description): Release the
+	target_desc_up as late as possible.
+
+2020-10-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* Makefile.in: Include Makefile.gnulib.inc.  Don't define LIBGNU
+	or INCGNU.  Make use of LIBGNU_EXTRA_LIBS when linking.
+
+2020-10-09  Jan Vrany  <jan.vrany@labware.com>
+
+	* source.c (directory_command): Notify observers that "directories"
+	parameter has changed.
+
+2020-10-08  Tom Tromey  <tom@tromey.com>
+
+	* cli/cli-cmds.c (print_disassembly): Style function name and
+	addresses.  Add _() wrappers.
+
+2020-10-08  Shahab Vahedi  <shahab@synopsys.com>
+
+	* NEWS: Mention ARC support in GDBserver.
+
+2020-10-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arch/aarch32.c (aarch32_create_target_description): Release
+	unique_ptr returned from allocate_target_description.
+	* arch/aarch64.c (aarch64_create_target_description): Likewise.
+	* arch/amd64.c (amd64_create_target_description): Likewise.
+	* arch/arc.c (arc_create_target_description): Likewise.
+	* arch/arm.c (arm_create_target_description): Likewise.
+	* arch/i386.c (i386_create_target_description): Likewise.
+	* arch/riscv.c (riscv_create_target_description): Update return
+	type.  Handle allocate_target_description returning a unique_ptr.
+	(riscv_lookup_target_description): Update to handle unique_ptr.
+	* arch/tic6x.c (tic6x_create_target_description): Release
+	unique_ptr returned from allocate_target_description.
+	* features/microblaze-with-stack-protect.c: Regenerate.
+	* features/microblaze.c: Regenerate.
+	* features/mips-dsp-linux.c: Regenerate.
+	* features/mips-linux.c: Regenerate.
+	* features/mips64-dsp-linux.c: Regenerate.
+	* features/mips64-linux.c: Regenerate.
+	* features/nds32.c: Regenerate.
+	* features/nios2.c: Regenerate.
+	* features/or1k.c: Regenerate.
+	* features/rs6000/powerpc-32.c: Regenerate.
+	* features/rs6000/powerpc-32l.c: Regenerate.
+	* features/rs6000/powerpc-403.c: Regenerate.
+	* features/rs6000/powerpc-403gc.c: Regenerate.
+	* features/rs6000/powerpc-405.c: Regenerate.
+	* features/rs6000/powerpc-505.c: Regenerate.
+	* features/rs6000/powerpc-601.c: Regenerate.
+	* features/rs6000/powerpc-602.c: Regenerate.
+	* features/rs6000/powerpc-603.c: Regenerate.
+	* features/rs6000/powerpc-604.c: Regenerate.
+	* features/rs6000/powerpc-64.c: Regenerate.
+	* features/rs6000/powerpc-64l.c: Regenerate.
+	* features/rs6000/powerpc-7400.c: Regenerate.
+	* features/rs6000/powerpc-750.c: Regenerate.
+	* features/rs6000/powerpc-860.c: Regenerate.
+	* features/rs6000/powerpc-altivec32.c: Regenerate.
+	* features/rs6000/powerpc-altivec32l.c: Regenerate.
+	* features/rs6000/powerpc-altivec64.c: Regenerate.
+	* features/rs6000/powerpc-altivec64l.c: Regenerate.
+	* features/rs6000/powerpc-e500.c: Regenerate.
+	* features/rs6000/powerpc-e500l.c: Regenerate.
+	* features/rs6000/powerpc-isa205-32l.c: Regenerate.
+	* features/rs6000/powerpc-isa205-64l.c: Regenerate.
+	* features/rs6000/powerpc-isa205-altivec32l.c: Regenerate.
+	* features/rs6000/powerpc-isa205-altivec64l.c: Regenerate.
+	* features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c: Regenerate.
+	* features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c: Regenerate.
+	* features/rs6000/powerpc-isa205-vsx32l.c: Regenerate.
+	* features/rs6000/powerpc-isa205-vsx64l.c: Regenerate.
+	* features/rs6000/powerpc-isa207-htm-vsx32l.c: Regenerate.
+	* features/rs6000/powerpc-isa207-htm-vsx64l.c: Regenerate.
+	* features/rs6000/powerpc-isa207-vsx32l.c: Regenerate.
+	* features/rs6000/powerpc-isa207-vsx64l.c: Regenerate.
+	* features/rs6000/powerpc-vsx32.c: Regenerate.
+	* features/rs6000/powerpc-vsx32l.c: Regenerate.
+	* features/rs6000/powerpc-vsx64.c: Regenerate.
+	* features/rs6000/powerpc-vsx64l.c: Regenerate.
+	* features/rs6000/rs6000.c: Regenerate.
+	* features/rx.c: Regenerate.
+	* features/s390-gs-linux64.c: Regenerate.
+	* features/s390-linux32.c: Regenerate.
+	* features/s390-linux32v1.c: Regenerate.
+	* features/s390-linux32v2.c: Regenerate.
+	* features/s390-linux64.c: Regenerate.
+	* features/s390-linux64v1.c: Regenerate.
+	* features/s390-linux64v2.c: Regenerate.
+	* features/s390-te-linux64.c: Regenerate.
+	* features/s390-tevx-linux64.c: Regenerate.
+	* features/s390-vx-linux64.c: Regenerate.
+	* features/s390x-gs-linux64.c: Regenerate.
+	* features/s390x-linux64.c: Regenerate.
+	* features/s390x-linux64v1.c: Regenerate.
+	* features/s390x-linux64v2.c: Regenerate.
+	* features/s390x-te-linux64.c: Regenerate.
+	* features/s390x-tevx-linux64.c: Regenerate.
+	* features/s390x-vx-linux64.c: Regenerate.
+	* mips-tdep.c (_initialize_mips_tdep): Release unique_ptr returned
+	from allocate_target_description.
+	* target-descriptions.c (allocate_target_description): Update
+	return type.
+	(print_c_tdesc::visit_pre): Release unique_ptr returned from
+	allocate_target_description.
+
+2020-10-07  Tom Tromey  <tromey@adacore.com>
+
+	* unittests/search-memory-selftests.c: New file.
+	* Makefile.in (SELFTESTS_SRCS): Add
+	unittests/search-memory-selftests.c.
+
+2020-10-07  Tom Tromey  <tromey@adacore.com>
+
+	PR gdb/16930:
+	* findcmd.c (_initialize_mem_search): Mention that the range is
+	inclusive.
+
+2020-10-07  Tom Tromey  <tromey@adacore.com>
+
+	* target.h (simple_search_memory): Don't declare.
+	* target.c (simple_search_memory): Move to gdbsupport.
+	(default_search_memory): Update.
+	* remote.c (remote_target::search_memory): Update.
+
+2020-10-07  Simon Marchi  <simon.marchi@efficios.com>
+
+	* Makefile.in (COMPILE): Add CXXFLAGS.
+	(INTERNAL_CFLAGS_BASE): Remove CXXFLAGS.
+	(check-headers): Add CXXFLAGS.
+
+2020-10-07  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* arc-linux-tdep.h: New file.
+	* arc-linux-tdep.c (arc_linux_core_reg_offsets,
+	arc_linux_supply_gregset, arc_linux_supply_v2_regset,
+	arc_linux_collect_gregset, arc_linux_collect_v2_regset,
+	arc_linux_gregset, arc_linux_v2_regset,
+	arc_linux_iterate_over_regset_sections,
+	arc_linux_core_read_description): Implement.
+	(arc_linux_init_osabi): Set iterate_over_regset_sections.
+	* arc-tdep.h (ARC_OFFSET_NO_REGISTER): Declare.
+	(arc_gdbarch_features_create): Add.
+	* arc-tdep.c (arc_gdbarch_features_create): Not static anymore.
+
+2020-10-07  Shahab Vahedi  <shahab@synopsys.com>
+
+	* arch/arc.h: Rename "arc_gdbarch_features" to
+	"arc_arch_features".
+	* arc-tdep.h: Likewise.
+	* arc-tdep.c: Likewise.
+
+2020-10-07  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infcmd.c (attach_command): Remove the redundant call to
+	`clear_proceed_status`.
+
+2020-10-07  Kamil Rytarowski  <n54@gmx.com>
+
+	* nat/netbsd-nat.c (write_memory, read_memory): Update.
+
+2020-10-07  Kamil Rytarowski  <n54@gmx.com>
+
+	* nat/netbsd-nat.c (write_memory, read_memory): Add.
+	* nat/netbsd-nat.h (write_memory, read_memory): Likewise.
+	* nbsd-nat.c (nbsd_nat_target::xfer_partial): Update.
+
+2020-10-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* break-catch-sig.c (signal_catch_counts): Make a static arrray.
+	(_initialize_break_catch_sig): Don't allocate array.
+
+2020-10-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* symtab.c (find_pc_line): Return unmapped addresses when the
+	requested address is also unmapped.
+
+2020-10-05  Simon Marchi  <simon.marchi@efficios.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Remove tui/tui-windata.h, add
+	tui/tui-out.h.
+
+2020-10-05  Simon Marchi  <simon.marchi@efficios.com>
+
+	* amd64-windows-tdep.c (amd64_windows_return_value): Use
+	type::is_vector instead of TYPE_VECTOR.
+
+2020-10-05  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* auto-load.c (auto_load_objfile_script_1): Don't use
+	debugfile_holder as temporary variable when stripping drive
+	letter.
+
+2020-10-05  Hannes Domani  <ssbssa@yahoo.de>
+
+	* amd64-windows-tdep.c (amd64_windows_passed_by_integer_register):
+	Add TYPE_CODE_COMPLEX.
+	(amd64_windows_return_value): Fix types returned via XMM0.
+
+2020-10-05  Alan Hayward  <alan.hayward@arm.com>
+
+	* MAINTAINERS (Responsible Maintainers): Add Luis Machado to
+	AArch64/ARM maintainers.
+
+2020-10-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* NEWS: Mention set/show debug event-loop.
+
+2020-10-02  Tom Tromey  <tromey@adacore.com>
+
+	* skip.c (skiplist_entry::skiplist_entry): Unconditionally use
+	REG_EXTENDED.
+
+2020-10-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	* aix-thread.c (aix_thread_inferior_created): Remove parameters.
+	* procfs.c (procfs_inferior_created): Remove.
+	(_initialize_procfs): Don't register procfs_inferior_created.
+
+2020-10-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* async-event.c (invoke_async_signal_handlers): Add debug
+	print.
+	(check_async_event_handlers): Likewise.
+	* event-top.c (show_debug_event_loop): New function.
+	(_initialize_event_top): Register "set debug event-loop"
+	setting.
+
+2020-10-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* debug.c (debug_prefixed_vprintf): Move to gdbsupport.
+	* debug.h: Remove.
+	* infrun.c: Include gdbsupport/common-debug.h.
+	* linux-nat.c: Likewise.
+
+2020-10-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* async-event.h (create_async_signal_handler): Add name
+	parameter.
+	(create_async_event_handler): Likewise.
+	* async-event.c (struct async_signal_handler) <name>: New field.
+	(struct async_event_handler) <name>: New field.
+	(create_async_signal_handler): Assign name.
+	(create_async_event_handler): Assign name.
+	* event-top.c (async_init_signals): Pass name when creating
+	handler.
+	* infrun.c (_initialize_infrun): Likewise.
+	* record-btrace.c (record_btrace_push_target): Likewise.
+	* record-full.c (record_full_open): Likewise.
+	* remote-notif.c (remote_notif_state_allocate): Likewise.
+	* remote.c (remote_target::open_1): Likewise.
+	* tui/tui-win.c (tui_initialize_win): Likewise.
+
+2020-10-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* async-event.c (initialize_async_signal_handlers): Pass name to
+	add_file_handler
+	* event-top.c (ui_register_input_event_handler): Likewise.
+	* linux-nat.c (linux_nat_target::async): Likewise.
+	* run-on-main-thread.c (_initialize_run_on_main_thread):
+	Likewise
+	* ser-base.c (reschedule): Likewise.
+	(ser_base_async): Likewise.
+	* tui/tui-io.c: Likewise.
+	* top.h (struct ui) <num>: New field.
+	* top.c (highest_ui_num): New variable.
+	(ui::ui): Initialize num.
+
+2020-10-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* observable.h <inferior_created>: Remove parameters.  Update all
+	listeners.
+	* inferior.h (post_create_inferior): Remove target parameter.
+	Update all callers.
+
+2020-10-02  Nitika Achra  <Nitika.Achra@amd.com>
+
+	* dwarf2/macro.c (dwarf_decode_macro_bytes): Handle DW_MACRO_define_strx
+	and DW_MACRO_undef_strx.
+	(dwarf_decode_macros): Likewise
+	* dwarf2/read.c (dwarf_decode_macros): Pass str_offsets_base in the parameters
+	which is the value of DW_AT_str_offsets_base.
+	 * dwarf2/macro.h (dwarf_decode_macros): Modify the definition to include
+	str_offsets_base.
+
+2020-10-01  Kamil Rytarowski  <n54@gmx.com>
+
+	* i386-tdep.h (i386nbsd_sc_reg_offset): Remove.
+
+2020-10-01  Kamil Rytarowski  <n54@gmx.com>
+
+	* i386-bsd-nat.c (_initialize_i386bsd_nat): Update.
+	* i386-nbsd-tdep.c (i386nbsd_sc_reg_offset): Now static.
+
+2020-10-01  Kamil Rytarowski  <n54@gmx.com>
+
+	* i386-bsd-nat.c: Include "x86-bsd-nat.h".
+
+2020-09-30  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/26683
+	* dwarf2/read.c (dwarf2_name): Update attr_name after attr is updated.
+
+2020-09-30  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (handle_variant): Use constant_value.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (lookup_dwo_id, get_type_unit_group)
+	(read_file_scope, dwarf2_get_pc_bounds)
+	(dwarf2_record_block_ranges, dwarf2_add_field, get_alignment)
+	(read_structure_type, handle_struct_member_die)
+	(read_enumeration_type, read_array_type, read_set_type)
+	(read_tag_pointer_type, read_tag_reference_type)
+	(read_subroutine_type, read_base_type, read_subrange_type)
+	(read_full_die_1, partial_die_info::read)
+	(partial_die_info::read, by, new_symbol)
+	(dwarf2_const_value_data, dwarf2_const_value_attr)
+	(dump_die_shallow, dwarf2_fetch_constant_bytes)
+	(prepare_one_comp_unit): Update.
+	* dwarf2/attribute.h (DW_UNSND): Remove.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_func_scope, prototyped_function_p)
+	(read_subroutine_type, partial_die_info::read)
+	(dwarf2_flag_true_p, new_symbol, dump_die_shallow)
+	(dwarf2_add_member_fn): Update.
+	* dwarf2/attribute.h (struct attribute) <as_boolean>: Declare.
+	* dwarf2/attribute.c (attribute::as_boolean): New method.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_add_field, dwarf2_add_member_fn): Update.
+	* dwarf2/attribute.h (struct attribute) <as_virtuality>: New
+	method.
+	* dwarf2/attribute.c (attribute::as_virtuality): New method.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/die.h (struct die_info) <addr_base, ranges_base>: Check
+	the attribute's form.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (is_valid_DW_AT_defaulted): Move to attribute.c.
+	(dwarf2_add_member_fn): Update.
+	* dwarf2/attribute.h (struct attribute) <defaulted>: Declare.
+	* dwarf2/attribute.c (attribute::defaulted): New method, from
+	is_valid_DW_AT_defaulted.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dw2_get_file_names_reader)
+	(dwarf2_build_include_psymtabs, handle_DW_AT_stmt_list)
+	(dwarf2_cu::setup_type_unit_groups, fill_in_loclist_baton)
+	(dwarf2_symbol_mark_computed): Use as_unsigned.
+	* dwarf2/attribute.h (struct attribute) <as_unsigned>: New
+	method.
+	<form_is_section_offset>: Update comment.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_access_attribute): Rename from
+	dwarf2_default_access_attribute.  Look up attribute.
+	(dwarf2_add_field, dwarf2_add_type_defn, dwarf2_add_member_fn):
+	Update.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (skip_one_die): Update.
+	(read_full_die_1): Change how reprocessing is done.
+	(partial_die_info::read): Update.
+	(read_attribute_value): Remove need_reprocess parameter.
+	(read_attribute): Likewise.
+	* dwarf2/attribute.h (struct attribute) <requires_reprocessing_p>:
+	New method.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_attribute_reprocess, read_attribute_value)
+	(dwarf2_const_value_attr, dump_die_shallow)
+	(dwarf2_fetch_constant_bytes): Update.
+	* dwarf2/attribute.h (struct attribute) <form_is_ref>: Update
+	comment.
+	<set_address>: New method.
+	(DW_ADDR): Remove.
+	* dwarf2/attribute.c (attribute::form_is_ref): Update comment.
+	(attribute::as_string, attribute::as_address): Add assert.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_cutu_die_from_dwo): Use OBSTACK_ZALLOC.
+	(read_attribute_reprocess, read_attribute_value): Update.
+	(read_attribute): Clear requires_reprocessing.
+	* dwarf2/attribute.h (struct attribute) <as_unsigned_reprocess,
+	form_requires_reprocessing>: New methods.
+	<string_init>: Clear requires_reprocessing.
+	<set_unsigned_reprocess>: New method.
+	<name>: Shrink by one bit.
+	<requires_reprocessing>: New member.
+	* dwarf2/attribute.c (attribute::form_requires_reprocessing): New
+	method.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_attribute_value): Update.
+	* dwarf2/attribute.h (struct attribute) <form_is_unsigned,
+	set_unsigned>: New methods.
+	* dwarf2/attribute.c (attribute::form_is_unsigned): New method.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (get_alignment, read_array_order)
+	(read_attribute_value, dwarf2_const_value_attr)
+	(dump_die_shallow, dwarf2_fetch_constant_bytes): Update.
+	* dwarf2/attribute.h (struct attribute) <as_signed, set_signed>:
+	New methods.
+	(DW_SND): Remove.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_attribute_value, lookup_die_type)
+	(dump_die_shallow, follow_die_sig, get_DW_AT_signature_type):
+	Update.
+	* dwarf2/attribute.h (struct attribute) <as_signature,
+	set_signature>: New methods.
+	(DW_SIGNATURE): Remove.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_call_site_scope)
+	(handle_data_member_location, dwarf2_add_member_fn)
+	(mark_common_block_symbol_computed, attr_to_dynamic_prop)
+	(partial_die_info::read, read_attribute_value)
+	(var_decode_location, dwarf2_const_value_attr, dump_die_shallow)
+	(dwarf2_fetch_die_loc_sect_off, dwarf2_fetch_constant_bytes)
+	(dwarf2_symbol_mark_computed): Update.
+	* dwarf2/attribute.h (struct attribute) <as_block, set_block>: New
+	methods.
+	(DW_BLOCK): Remove.
+	* dwarf2/attribute.c (attribute::form_is_block): Add
+	DW_FORM_data16.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_cutu_die_from_dwo)
+	(read_attribute_reprocess, read_attribute_value, read_attribute)
+	(dwarf2_const_value_attr, dwarf2_name, dump_die_shallow)
+	(dwarf2_fetch_constant_bytes): Update.
+	* dwarf2/attribute.h (struct attribute) <form_is_string>: Declare.
+	<set_string_noncanonical, set_string_canonical>: New methods.
+	<string_is_canonical>: Update comment.
+	<canonical_string_p>: Add assert.
+	(DW_STRING, DW_STRING_IS_CANONICAL): Remove.
+	* dwarf2/attribute.c (attribute::form_is_string): New method.
+	(attribute::string): Use it.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (anonymous_struct_prefix, dwarf2_name)
+	(dump_die_shallow): Use canonical_string_p.
+	* dwarf2/attribute.h (struct attribute) <canonical_string_p>: New
+	method.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (partial_die_info::read)
+	(dwarf2_const_value_attr, anonymous_struct_prefix, )
+	(dwarf2_name, dwarf2_fetch_constant_bytes): Use
+	attribute::as_string.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/attribute.c (attribute::address): Don't use DW_UNSND or
+	DW_ADDR.
+	(attribute::string): Don't use DW_STRING.
+	(attribute::get_ref_die_offset): Don't use DW_UNSND.
+	(attribute::constant_value): Don't use DW_UNSND or DW_SND.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_find_base_address, read_call_site_scope)
+	(dwarf2_get_pc_bounds, dwarf2_record_block_ranges)
+	(partial_die_info::read, dwarf2_string_attr, new_symbol): Update.
+	* dwarf2/attribute.h (struct attribute): Rename methods.
+	* dwarf2/attribute.c (attribute::as_address): Rename from
+	value_as_address.
+	(attribute::as_string): Rename from value_as_string.
+
+2020-09-29  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (partial_die_info::read) <case
+	DW_AT_linkage_name>: Use value_as_string.
+	(dwarf2_string_attr): Use value_as_string.
+	* dwarf2/attribute.h (struct attribute) <value_as_string>: Declare
+	method.
+	* dwarf2/attribute.c (attribute::value_as_string): New method.
+
+2020-09-29  Pedro Alves  <pedro@palves.net>
+
+	* unittests/enum-flags-selftests.c: Check whether __GNUC__ is
+	defined before using '#pragma GCC diagnostic' instead of checking
+	__clang__.
+
+2020-09-28  Tom Tromey  <tom@tromey.com>
+
+	* infrun.c (displaced_step_fixup, thread_still_needs_step_over)
+	(handle_signal_stop): Update.
+	* procfs.c (procfs_target::insert_watchpoint): Update.
+	* target.h (target_have_steppable_watchpoint): Now a function.
+
+2020-09-28  Tom Tromey  <tom@tromey.com>
+
+	* infrun.c (set_schedlock_func): Update.
+	* target.h (target_can_lock_scheduler): Now a function.
+
+2020-09-28  Tom Tromey  <tom@tromey.com>
+
+	* inferior.h (class inferior) <has_execution>: Update.
+	* windows-tdep.c (windows_solib_create_inferior_hook): Update.
+	* valops.c (find_function_in_inferior)
+	(value_allocate_space_in_inferior): Update.
+	* top.c (kill_or_detach): Update.
+	* target.c (target_preopen, set_target_permissions): Update.
+	(target_has_execution_current): Remove.
+	* sparc64-tdep.c (adi_examine_command, adi_assign_command):
+	Update.
+	* solib.c (update_solib_list, reload_shared_libraries): Update.
+	* solib-svr4.c (svr4_solib_create_inferior_hook): Update.
+	* solib-dsbt.c (enable_break): Update.
+	* score-tdep.c (score7_fetch_inst): Update.
+	* rs6000-nat.c (rs6000_nat_target::xfer_shared_libraries):
+	Update.
+	* remote.c (remote_target::start_remote)
+	(remote_target::remote_check_symbols, remote_target::open_1)
+	(remote_target::remote_detach_1, remote_target::verify_memory)
+	(remote_target::xfer_partial, remote_target::read_description)
+	(remote_target::get_min_fast_tracepoint_insn_len): Update.
+	* record-full.c (record_full_open_1): Update.
+	* record-btrace.c (record_btrace_target_open): Update.
+	* objc-lang.c (lookup_objc_class, lookup_child_selector)
+	(value_nsstring): Update.
+	* linux-thread-db.c (add_thread_db_info)
+	(thread_db_find_new_threads_silently, check_thread_db_callback)
+	(try_thread_db_load_1, record_thread): Update.
+	* linux-tdep.c (linux_info_proc, linux_vsyscall_range_raw):
+	Update.
+	* linux-fork.c (checkpoint_command): Update.
+	* infrun.c (set_non_stop, set_observer_mode)
+	(check_multi_target_resumption, for_each_just_stopped_thread)
+	(maybe_remove_breakpoints, normal_stop)
+	(class infcall_suspend_state): Update.
+	* infcmd.c (ERROR_NO_INFERIOR, kill_if_already_running)
+	(info_program_command, attach_command): Update.
+	* infcall.c (call_function_by_hand_dummy): Update.
+	* inf-loop.c (inferior_event_handler): Update.
+	* gcore.c (gcore_command, derive_heap_segment): Update.
+	* exec.c (exec_file_command): Update.
+	* eval.c (evaluate_subexp): Update.
+	* compile/compile.c (compile_to_object): Update.
+	* cli/cli-dump.c (restore_command): Update.
+	* breakpoint.c (update_watchpoint)
+	(update_inserted_breakpoint_locations)
+	(insert_breakpoint_locations, get_bpstat_thread): Update.
+	* target.h (target_has_execution): Remove macro.
+	(target_has_execution_current): Don't declare.
+	(target_has_execution): Rename from target_has_execution_1.  Add
+	argument default.
+
+2020-09-28  Tom Tromey  <tom@tromey.com>
+
+	* mi/mi-main.c (exec_reverse_continue)
+	(mi_cmd_list_target_features): Update.
+	* infrun.c (set_exec_direction_func): Update.
+	* target.c (default_execution_direction): Update.
+	* reverse.c (exec_reverse_once): Update.
+	* target.h (target_can_execute_reverse): Now a function.
+
+2020-09-28  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_get_register)
+	(tui_data_window::show_registers): Update.
+	* thread.c (scoped_restore_current_thread::restore)
+	(scoped_restore_current_thread::scoped_restore_current_thread):
+	Update.
+	* regcache-dump.c (regcache_print): Update.
+	* python/py-finishbreakpoint.c (bpfinishpy_detect_out_scope_cb):
+	Update.
+	* mi/mi-main.c (mi_cmd_data_write_register_values): Update.
+	* mep-tdep.c (current_me_module, current_options): Update.
+	* linux-thread-db.c (thread_db_load): Update.
+	* infcmd.c (registers_info, info_vector_command)
+	(info_float_command): Update.
+	* ia64-tdep.c (ia64_frame_prev_register)
+	(ia64_sigtramp_frame_prev_register): Update.
+	* ia64-libunwind-tdep.c (libunwind_frame_prev_register): Update.
+	* gcore.c (derive_stack_segment): Update.
+	* frame.c (get_current_frame, has_stack_frames): Update.
+	* findvar.c (language_defn::read_var_value): Update.
+	* arm-tdep.c (arm_pc_is_thumb): Update.
+	* target.c (target_has_registers): Rename from
+	target_has_registers_1.
+	* target.h (target_has_registers): Remove macro.
+	(target_has_registers): Rename from target_has_registers_1.
+
+2020-09-28  Tom Tromey  <tom@tromey.com>
+
+	* windows-tdep.c (tlb_make_value): Update.
+	* tui/tui-regs.c (tui_data_window::show_registers): Update.
+	* thread.c (scoped_restore_current_thread::restore)
+	(scoped_restore_current_thread::scoped_restore_current_thread)
+	(thread_command): Update.
+	* stack.c (backtrace_command_1, frame_apply_level_command)
+	(frame_apply_all_command, frame_apply_command): Update.
+	* infrun.c (siginfo_make_value, restore_infcall_control_state):
+	Update.
+	* gcore.c (derive_stack_segment): Update.
+	* frame.c (get_current_frame, has_stack_frames): Update.
+	* auxv.c (info_auxv_command): Update.
+	* ada-tasks.c (ada_build_task_list): Update.
+	* target.c (target_has_stack): Rename from target_has_stack_1.
+	* target.h (target_has_stack): Remove macro.
+	(target_has_stack): Rename from target_has_stack_1.
+
+2020-09-28  Tom Tromey  <tom@tromey.com>
+
+	* target.c (target_has_memory): Rename from target_has_memory_1.
+	* tui/tui-regs.c (tui_data_window::show_registers): Update.
+	* thread.c (scoped_restore_current_thread::restore)
+	(scoped_restore_current_thread::scoped_restore_current_thread):
+	Update.
+	* frame.c (get_current_frame, has_stack_frames): Update.
+	* target.h (target_has_memory): Remove macro.
+	(target_has_memory): Rename from target_has_memory_1.
+
+2020-09-28  Tom Tromey  <tom@tromey.com>
+
+	* target.c (target_has_all_memory_1): Remove.
+	* target.h (target_has_all_memory): Remove define.
+	(target_has_all_memory_1): Don't declare.
+
+2020-09-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* ser-base.c: Adjust comments formatting.
+
+2020-09-27  Tom Tromey  <tom@tromey.com>
+
+	PR tui/25342:
+	* tui/tui-io.c (tui_puts): Rewrite.  Move earlier.
+
+2020-09-27  Tom Tromey  <tom@tromey.com>
+
+	PR tui/25342:
+	* tui/tui-winsource.c (tui_copy_source_line): Use ISNCTRL.
+
+2020-09-27  Tom Tromey  <tom@tromey.com>
+
+	* unittests/tui-selftests.c: Update.
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<extra_margin, show_line_number, refresh_pad>: New methods.
+	<m_max_length, m_pad>: New members.
+	(tui_copy_source_line): Update.
+	* tui/tui-winsource.c (tui_copy_source_line): Remove line_no,
+	first_col, line_width, ndigits parameters.  Add length.
+	(tui_source_window_base::show_source_line): Write to pad.  Line
+	number now 0-based.
+	(tui_source_window_base::refresh_pad): New method.
+	(tui_source_window_base::show_source_content): Write to pad.  Call
+	refresh_pad.
+	(tui_source_window_base::do_scroll_horizontal): Call refresh_pad,
+	not refill.
+	(tui_source_window_base::update_exec_info): Call
+	show_line_number.
+	* tui/tui-source.h (struct tui_source_window) <extra_margin>: New
+	method.
+	<m_digits>: New member.
+	* tui/tui-source.c (tui_source_window::set_contents): Set m_digits
+	and m_max_length.
+	(tui_source_window::show_line_number): New method.
+	* tui/tui-io.h (tui_puts): Fix comment.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents): Set
+	m_max_length.
+
+2020-09-27  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c
+	(tui_source_window_base::set_is_exec_point_at): Don't call
+	show_source_line.
+
+2020-09-27  Tom Tromey  <tom@tromey.com>
+
+	* python/py-tui.c (class tui_py_window) <refresh_window>: New
+	method.
+	<erase>: Update.
+	<cursor_x, cursor_y>: Remove.
+	<m_inner_window>: New member.
+	(tui_py_window::rerender): Create inner window.
+	(tui_py_window::output): Write to inner window.
+
+2020-09-26  Gareth Rees <grees@undo.io>  (tiny change)
+
+	PR python/26586
+	* cli/cli-script.c (execute_control_commands): don't set
+	instream to nullptr here as this breaks the from_tty argument
+	to gdb.execute in Python.
+	(execute_user_command): set instream to nullptr here instead.
+
+2020-09-25  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.h (infrun_debug_printf): Fix formatting.
+	* linux-nat.c (linux_nat_debug_printf): Fix formatting.
+
+2020-09-25  Saagar Jha  <saagar@saagarjha.com>
+
+	* compile/compile-object-load.h (struct munmap_list): Add
+	explicitly-defined move constructor.
+
+2020-09-24  Tom Tromey  <tromey@adacore.com>
+
+	PR tui/26638:
+	* tui/tui-stack.h (struct tui_locator_window) <can_focus>: New
+	method.
+	* tui/tui-data.h (struct tui_win_info) <can_focus>: New method.
+	* tui/tui-data.c (tui_next_win): Exclude non-focusable windows.
+	(tui_prev_win): Rewrite.
+
+2020-09-23  Hannes Domani  <ssbssa@yahoo.de>
+
+	* nat/windows-nat.c (handle_exception): Handle 64bit breakpoints
+	in WOW64 processes as SIGINT.
+	* nat/windows-nat.h: Make wow64_process a shared variable.
+	* windows-nat.c: Remove static wow64_process variable.
+
+2020-09-23  Tom Tromey  <tom@tromey.com>
+
+	PR symtab/25470:
+	* value.c (unpack_long, pack_long, pack_unsigned_long): Handle bit
+	offset and bit size.
+	* printcmd.c (print_scalar_formatted): Handle zero-length
+	integer.
+	(print_scalar_formatted): Use bit_size_differs_p.
+	* gdbtypes.h (enum type_specific_kind) <TYPE_SPECIFIC_INT>: New
+	constant.
+	(union type_specific): <int_stuff>: New member.
+	(struct type) <bit_size_differs_p, bit_size, bit_offset>: New
+	methods.
+	* gdbtypes.c (init_integer_type, init_boolean_type): Initialize
+	TYPE_SPECIFIC_FIELD.
+	(recursive_dump_type, copy_type_recursive): Update.
+	* dwarf2/read.c (read_base_type): Handle DW_AT_bit_size and
+	DW_AT_data_bit_offset.
+
+2020-09-23  Tom Tromey  <tom@tromey.com>
+
+	* utils.h (class gdb_argv): Add move operators.
+	<append>: New methods.
+	* compile/compile.c (build_argc_argv): Remove.
+	(compile_args_argc): Remove.
+	(compile_args_argv): Change type.
+	(set_compile_args): Simplify.
+	(append_args): Remove.
+	(filter_args): Remove argcp parameter.
+	(get_args): Return gdb_argv.  Simplify.
+	(compile_to_object): Update.
+
+2020-09-23  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile-object-run.c (do_module_cleanup)
+	<~do_module_cleanup> :Remove.
+	(do_module_cleanup): Update.
+	* compile/compile-object-load.h (struct munmap_list): Add move
+	assignment operator.
+	<source_file>: Now a std::string.
+	<munmap_list>: Rename.  No longer a pointer.
+	* compile/compile-object-load.c (struct setup_sections_data): Add
+	constructor.
+	<setup_one_section>: Declare.
+	<munmap_list>: Move earlier.
+	<m_bfd>: New member.
+	<m_last_size, m_last_section_first, m_last_prot,
+	m_last_max_alignment>: Rename, add initializers where needed.
+	(setup_sections_data::setup_one_section): Rename from
+	setup_sections.  Update.
+	(compile_object_load): Update.  Don't use bfd_map_over_sections.
+
+2020-09-23  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile-object-run.c (struct do_module_cleanup): Add
+	parameters to constructor.  Update destructor.
+	<source_file, scope, scope_data, out_value_type, out_value_addr,
+	munmap_list_head, objfile_name_string>: Remove.
+	<module>: New member.
+	(do_module_cleanup): Update.
+	(compile_object_run): Update.
+
+2020-09-23  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile.c (eval_compile_command): Update.
+	* compile/compile-object-run.h (compile_object_run): Take a
+	compile_module_up.
+	* compile/compile-object-run.c (compile_object_run): Take a
+	compile_module_up.
+	* compile/compile-object-load.h (struct compile_module): Add
+	constructor, destructor.
+	(compile_module_up): New typedef.
+	(compile_object_load): Return compile_object_up.
+	* compile/compile-object-load.c (compile_object_load): Return
+	compile_module_up.
+
+2020-09-23  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile-object-run.c (struct do_module_cleanup): Add
+	constructor, destructor.
+	<objfile_name_string>: Don't use struct hack.
+	(do_module_cleanup): Use delete.
+	(compile_object_run): Use new.
+
+2020-09-23  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile-cplus-types.c
+	(compile_cplus_convert_struct_or_union): Use std::vector.
+	(compile_cplus_convert_func): Likewise.
+	* compile/compile-c-types.c (convert_func): Use std::vector.
+
+2020-09-21  Tom Tromey  <tromey@adacore.com>
+
+	* sparc-tdep.c (sparc32_skip_prologue): Use
+	skip_prologue_using_sal.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (add_section_size_callback): Remove.
+	(load_one_section): Rename from load_section_callback.  Change
+	parameters.
+	(generic_load): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* exec.c (add_to_section_table): Remove.
+	(build_section_table): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* elfread.c (elf_locate_sections): Change parameters.
+	(elf_symfile_read): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* cli/cli-dump.c (struct callback_data): Remove.
+	(restore_one_section): Rename from restore_section_callback.
+	Change parameters.
+	(restore_binary_file): Change parameters.
+	(restore_command): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* gcore.c (make_output_phdrs): Remove 'ignored' parameter.
+	(gcore_copy_callback): Likewise.
+	(gcore_memory_sections): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* osabi.h (generic_elf_osabi_sniff_abi_tag_sections): Update.
+	* osabi.c (generic_elf_osabi_sniff_abi_tag_sections): Change
+	parameters.
+	(generic_elf_osabi_sniffer): Use foreach.
+	* mips-sde-tdep.c (mips_sde_elf_osabi_sniffer): Use foreach.
+	* arm-tdep.c (arm_elf_osabi_sniffer): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (locate_dwz_sections): Change parameters.
+	(dwarf2_get_dwz_file): Use foreach.
+	(dwarf2_locate_dwo_sections): Change parameters.
+	(open_and_init_dwo_file): Use foreach.
+	(dwarf2_locate_common_dwp_sections): Change parameters.
+	(open_and_init_dwp_file): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* symfile.h: (find_lowest_section): Don't declare.
+	* symfile.c (find_lowest_section): Now static.  Change
+	parameters.
+	(struct place_section_arg): Remove.
+	(place_section): Change parameters.
+	(addr_info_make_relative): Use foreach.
+	(symfile_dummy_outputs): Remove.
+	(default_symfile_relocate): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.c (add_to_objfile_sections): Rename from
+	add_to_objfile_sections_full.
+	(add_to_objfile_sections): Remove.
+	(build_objfile_section_table): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* stap-probe.c (get_stap_base_address_1): Remove.
+	(get_stap_base_address): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* gdb_bfd.c (free_one_bfd_section): Remove 'abfd' and 'ignore'
+	parameters.
+	(gdb_bfd_close_or_warn): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* corelow.c (add_to_thread_list): Change parameters.
+	(core_target_open): Use foreach.
+
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+	* gdb_bfd.h (gdb_bfd_sections): New overload.  Fix formatting of
+	existing function.
+
+2020-09-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-valprint.c (f77_print_array_1): Adjust printing of whitespace
+	for arrays.
+
+2020-09-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* eval.c: Remove 'f-lang.h' include.
+	(value_f90_subarray): Moved to f-lang.c.
+	(eval_call): Renamed to...
+	(evaluate_subexp_do_call): ...this, is no longer static, header
+	comment moved into header file.
+	(evaluate_funcall): Update call to eval_call.
+	(skip_undetermined_arglist): Moved to f-lang.c.
+	(fortran_value_subarray): Likewise.
+	(evaluate_subexp_standard): OP_F77_UNDETERMINED_ARGLIST handling
+	moved to evaluate_subexp_f.
+	(calc_f77_array_dims): Moved to f-lang.c
+	* expprint.c (print_subexp_funcall): New function.
+	(print_subexp_standard): OP_F77_UNDETERMINED_ARGLIST handling
+	moved to print_subexp_f, OP_FUNCALL uses new function.
+	(dump_subexp_body_funcall): New function.
+	(dump_subexp_body_standard): OP_F77_UNDETERMINED_ARGLIST handling
+	moved to dump_subexp_f, OP_FUNCALL uses new function.
+	* expression.h (evaluate_subexp_do_call): Declare.
+	* f-lang.c (value_f90_subarray): Moved from eval.c.
+	(skip_undetermined_arglist): Likewise.
+	(calc_f77_array_dims): Likewise.
+	(fortran_value_subarray): Likewise.
+	(evaluate_subexp_f): Add OP_F77_UNDETERMINED_ARGLIST support.
+	(operator_length_f): Likewise.
+	(print_subexp_f): Likewise.
+	(dump_subexp_body_f): Likewise.
+	* fortran-operator.def (OP_F77_UNDETERMINED_ARGLIST): Move
+	declaration of this operation to here.
+	* parse.c (operator_length_standard): OP_F77_UNDETERMINED_ARGLIST
+	support moved to operator_length_f.
+	* parser-defs.h (dump_subexp_body_funcall): Declare.
+	(print_subexp_funcall): Declare.
+	* std-operator.def (OP_F77_UNDETERMINED_ARGLIST): Moved to
+	fortran-operator.def.
+
+2020-09-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* eval.c (fortran_value_subarray): New function, content is taken
+	from...
+	(evaluate_subexp_standard): ...here, in two places.  Now arrays
+	and strings both call the new function.
+	(calc_f77_array_dims): Add header comment, handle strings.
+
+2020-09-18  Victor Collod  <vcollod@nvidia.com>
+
+	PR gdb/26635
+	* i386-tdep.c (i386_skip_endbr): Add a helper function to skip endbr.
+	(i386_analyze_prologue): Call i386_skip_endbr.
+
+2020-09-18  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (struct windows_nat_target) <wait>: Update.
+	(windows_nat_target::wait): Update.
+	* target/wait.h (enum target_wait_flag): New.  Use
+	DEF_ENUM_FLAGS_TYPE.
+	* target/target.h (target_wait): Change type of options.
+	* target.h (target_options_to_string, default_target_wait):
+	Update.
+	(struct target_ops) <wait>: Change type of options.
+	* target.c (target_wait, default_target_wait, do_option): Change
+	type of "options".
+	(target_options_to_string): Likewise.
+	* target-delegates.c: Rebuild.
+	* target-debug.h (target_debug_print_target_wait_flags): Rename
+	from target_debug_print_options.
+	* sol-thread.c (class sol_thread_target) <wait>: Update.
+	(sol_thread_target::wait): Update.
+	* rs6000-nat.c (class rs6000_nat_target) <wait>: Update.
+	(rs6000_nat_target::wait): Update.
+	* remote.c (class remote_target) <wait, wait_ns, wait_as>:
+	Update.
+	(remote_target::wait_ns, remote_target::wait_as): Change type of
+	"options".
+	(remote_target::wait): Update.
+	* remote-sim.c (struct gdbsim_target) <wait>: Update.
+	(gdbsim_target::wait): Update.
+	* record-full.c (class record_full_base_target) <wait>: Update.
+	(record_full_wait_1): Change type of "options".
+	(record_full_base_target::wait): Update.
+	* record-btrace.c (class record_btrace_target) <wait>: Update.
+	(record_btrace_target::wait): Update.
+	* ravenscar-thread.c (struct ravenscar_thread_target) <wait>:
+	Update.
+	(ravenscar_thread_target::wait): Update.
+	* procfs.c (class procfs_target) <wait>: Update.
+	(procfs_target::wait): Update.
+	* obsd-nat.h (class obsd_nat_target) <wait>: Update.
+	* obsd-nat.c (obsd_nat_target::wait): Update.
+	* nto-procfs.c (struct nto_procfs_target) <wait>: Update.
+	(nto_procfs_target::wait): Update.
+	* nbsd-nat.h (struct nbsd_nat_target) <wait>: Update.
+	* nbsd-nat.c (nbsd_wait): Change type of "options".
+	(nbsd_nat_target::wait): Update.
+	* linux-thread-db.c (class thread_db_target) <wait>: Update.
+	(thread_db_target::wait): Update.
+	* linux-nat.h (class linux_nat_target) <wait>: Update.
+	* linux-nat.c (linux_nat_target::wait): Update.
+	(linux_nat_wait_1): Update.
+	* infrun.c (do_target_wait_1, do_target_wait): Change type of
+	"options".
+	* inf-ptrace.h (struct inf_ptrace_target) <wait>: Update.
+	* inf-ptrace.c (inf_ptrace_target::wait): Update.
+	* go32-nat.c (struct go32_nat_target) <wait>: Update.
+	(go32_nat_target::wait): Update.
+	* gnu-nat.h (struct gnu_nat_target) <wait>: Update.
+	* gnu-nat.c (gnu_nat_target::wait): Update.
+	* fbsd-nat.h (class fbsd_nat_target) <wait>: Update.
+	* fbsd-nat.c (fbsd_nat_target::wait): Update.
+	* darwin-nat.h (class darwin_nat_target) <wait>: Update.
+	* darwin-nat.c (darwin_nat_target::wait): Update.
+	* bsd-uthread.c (struct bsd_uthread_target) <wait>: Update.
+	(bsd_uthread_target::wait): Update.
+	* aix-thread.c (class aix_thread_target) <wait>: Update.
+	(aix_thread_target::wait): Update.
+
+2020-09-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* compile/compile-object-run.c (create_copied_type_recursive): New
+	function.
+	(compile_object_run): Use new function.
+
+2020-08-21  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* NEWS: Mention x86_64 Cygwin core file support.
+
+2020-07-01  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* windows-tdep.c (NOTE_INFO_MODULE, NOTE_INFO_MODULE64): Define.
+	(core_process_module_section): Handle NOTE_INFO_MODULE64.
+
+2020-07-01  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* windows-tdep.h: Add prototypes.
+	* i386-windows-tdep.c(windows_core_xfer_shared_libraries): Move.
+	(i386_windows_core_pid_to_str): Move and rename ...
+	* windows-tdep.c (windows_core_xfer_shared_libraries): ... to here
+	(windows_core_pid_to_str): ... and here.
+	* amd64-windows-tdep.c (amd64_windows_init_abi_common): Register here.
+
+2020-07-01  Jon Turney  <jon.turney@dronecode.org.uk>
+	* amd64-windows-tdep.c(amd64_windows_gregset_reg_offset): Add.
+	(amd64_windows_init_abi_common): ... and register.
+
+2020-07-01  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* amd64-windows-tdep.c (amd64_cygwin_core_osabi_sniffer): New.
+	(_initialize_amd64_windows_tdep): Register amd64_cygwin_core_osabi_sniffer.
+
+2020-09-18  Pedro Alves  <pedro@palves.net>
+
+	PR gdb/26631
+	* thread.c (thread_find_command): Switch inferior before calling
+	target methods.
+
+2020-09-17  Tom Tromey  <tromey@adacore.com>
+
+	* tic6x-tdep.c (tic6x_gdbarch_init): Update.
+	* target-descriptions.h (struct tdesc_arch_data_deleter): New.
+	(tdesc_arch_data_up): New typedef.
+	(tdesc_use_registers, tdesc_data_alloc): Update.
+	(tdesc_data_cleanup): Don't declare.
+	* target-descriptions.c (tdesc_data_alloc): Return a
+	tdesc_arch_data_up.
+	(tdesc_arch_data_deleter::operator()): Rename from
+	tdesc_data_cleanup.  Change argument type.
+	(tdesc_use_registers): Change early_data to an rvalue reference.
+	(tdesc_use_registers): Don't use delete.
+	* sparc-tdep.c (sparc32_gdbarch_init): Update.
+	* s390-tdep.c (s390_gdbarch_init): Update.
+	* rx-tdep.c (rx_gdbarch_init): Update.
+	* rs6000-tdep.c (rs6000_gdbarch_init): Update.
+	* riscv-tdep.c (riscv_gdbarch_init): Update.
+	* or1k-tdep.c (or1k_gdbarch_init): Update.
+	* nios2-tdep.c (nios2_gdbarch_init): Update.
+	* nds32-tdep.c (nds32_gdbarch_init): Update.
+	* mips-tdep.c (mips_gdbarch_init): Update.
+	* microblaze-tdep.c (microblaze_gdbarch_init): Update.
+	* m68k-tdep.c (m68k_gdbarch_init): Update.
+	* i386-tdep.c (i386_gdbarch_init): Update.
+	* arm-tdep.c (arm_gdbarch_init): Update.
+	* arc-tdep.c (arc_tdesc_init): Update.
+	(arc_gdbarch_init): Update.
+	* aarch64-tdep.c (aarch64_gdbarch_init): Update.
+
+2020-09-17  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-nat.c (ctrl_c_handler): Use 32bit DbgUiRemoteBreakin
+	for WOW64 processes.
+
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (compute_compunit_symtab_includes): Use htab_up.
+
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+	* value.c (preserve_values): Update.
+	* python/py-type.c (save_objfile_types): Update.
+	* guile/scm-type.c (save_objfile_types): Update.
+	* gdbtypes.h (create_copied_types_hash): Return htab_up.
+	* gdbtypes.c (create_copied_types_hash): Return htab_up.
+	* compile/compile-object-run.c (compile_object_run): Update.
+
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+	* typeprint.h (class typedef_hash_table) <~typedef_hash_table>:
+	Remove.
+	<m_table>: Now htab_up.
+	* typeprint.c (typedef_hash_table::recursively_update)
+	(typedef_hash_table::add_template_parameters)
+	(typedef_hash_table::typedef_hash_table): Update.
+	(typedef_hash_table::~typedef_hash_table): Remove.
+	(typedef_hash_table::typedef_hash_table)
+	(typedef_hash_table::find_global_typedef)
+	(typedef_hash_table::find_typedef): Update.
+
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+	* target-descriptions.c (tdesc_use_registers): Use htab_up.
+
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+	* linespec.c (class decode_compound_collector)
+	<~decode_compound_collector>: Remove.
+	<m_unique_syms>: Now htab_up.
+	(decode_compound_collector::operator ()): Update.
+	(class symtab_collector) <~symtab_collector>: Remove.
+	<m_symtab_table>: Now htab_up.
+	(symtab_collector::operator ()): Update.
+
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+	* filename-seen-cache.c (filename_seen_cache::filename_seen_cache)
+	(filename_seen_cache::clear): Update.
+	(~filename_seen_cache): Remove.
+	(filename_seen_cache::seen): Update.
+	* filename-seen-cache.h (class filename_seen_cache) <m_tab>: Now
+	htab_up.
+	<~filename_seen_cache>: Remove.
+	<traverse>: Update.
+
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+	* completer.c (completion_tracker::discard_completions)
+	(completion_tracker::~completion_tracker)
+	(completion_tracker::maybe_add_completion)
+	(completion_tracker::remove_completion)
+	(completion_tracker::recompute_lowest_common_denominator)
+	(completion_tracker::build_completion_result): Update.
+	* completer.h (class completion_tracker) <have_completions>:
+	Update.
+	<m_entries_hash>: Now htab_up.
+
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+	* breakpoint.c (ambiguous_names_p): Use htab_up.
+
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+	* auto-load.c (struct auto_load_pspace_info)
+	<~auto_load_pspace_info, auto_load_pspace_info>: Remove.
+	<loaded_script_files, loaded_script_texts>: Change type to
+	htab_up.
+	(~auto_load_pspace_info) Remove.
+	(init_loaded_scripts_info, maybe_add_script_file)
+	(maybe_add_script_text, auto_load_info_scripts): Update.
+
+2020-09-17  Tom Tromey  <tromey@adacore.com>
+
+	* c-exp.y (name_obstack): Now static.
+
+2020-09-17  Chungyi Chi  <demonic@csie.io>
+
+	* riscv-tdep.c (riscv-insn::decode): Fix recorded insn type.
+
+2020-09-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* breakpoint.h (init_catchpoint): Change int parameter to bool.
+	(add_solib_catchpoint): Likewise.
+	* breakpoint.c (struct solib_catchpoint) <is_load>: Change type
+	to bool.
+	(add_solib_catchpoint): Change int parameter/variable to bool.
+	(catch_load_or_unload): Likewise.
+	(init_catchpoint): Likewise.
+	(create_fork_vfork_event_catchpoint): Likewise.
+	(catch_fork_command_1): Likewise.
+	(catch_exec_command_1): Likewise.
+
+2020-09-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdb-gdb.py.in (class StructTypePrettyPrinter) <to_string>:
+	Change instance_flags to m_instance_flags.
+
+2020-09-16  Tom Tromey  <tromey@adacore.com>
+
+	PR gdb/26598:
+	* infrun.c (fill_in_stop_func): Use find_pc_partial_function_sym.
+
+2020-09-16  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.c (fbsd_nat_target::wait): Always check for
+	PL_FLAG_EXEC.
+	(fbsd_nat_target::insert_exec_catchpoint)
+	(fbsd_nat_target::remove_exec_catchpoint): Always define.
+	* fbsd-nat.h (fbsd_nat_target::insert_exec_catchpoint)
+	(fbsd_nat_target::remove_exec_catchpoint): Always declare.
+
+2020-09-16  John Baldwin  <jhb@FreeBSD.org>
+
+	* configure.ac: Remove check for kinfo_getvmmap().
+	* configure, config.in: Regenerate.
+	* fbsd-nat.c (fbsd_read_mapping): Remove
+	(fbsd_nat_target::find_memory_regions): Remove the procfs version.
+	(fbsd_nat_target::info_proc): Assume kinfo_getfile() and
+	kinfo_get_vmmap() are always present.
+
+2020-09-16  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.c: Always include support for
+	TARGET_OBJECT_SIGNAL_INFO.
+
+2020-09-16  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.c (fbsd_nat_target::pid_to_exec_file): Always use
+	sysctl and remove procfs fallback.
+
+2020-09-16  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.c: Assume PT_LWPINFO is always defined.
+	* fbsd-nat.h: Likewise.
+
+2020-09-16  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.c (commands_command_1): Make a copy of the 'arg'
+	argument.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete.
+	(ada_language): Remove references to ada_language_data.
+	* c-lang.c (c_language_data): Delete.
+	(c_language): Remove references to c_language_data.
+	(cplus_language_data): Delete.
+	(cplus_language): Remove references to cplus_language_data.
+	(asm_language_data): Delete.
+	(asm_language): Remove references to asm_language_data.
+	(minimal_language_data): Delete.
+	(minimal_language): Remove references to minimal_language_data.
+	* d-lang.c (d_language_data): Delete.
+	(d_language): Remove references to d_language_data.
+	* f-lang.c (f_language_data): Delete.
+	(f_language): Remove references to f_language_data.
+	* go-lang.c (go_language_data): Delete.
+	(go_language): Remove references to go_language_data.
+	* language.c (unknown_language_data): Delete.
+	(unknown_language): Remove references to unknown_language_data.
+	(auto_language_data): Delete.
+	(auto_language): Remove references to auto_language_data.
+	* language.h (language_data): Delete struct.
+	(language_defn): No longer inherit from language_data.
+	* m2-lang.c (m2_language_data): Delete.
+	(m2_language): Remove references to m2_language_data.
+	* objc-lang.c (objc_language_data): Delete.
+	(objc_language): Remove references to objc_language_data.
+	* opencl-lang.c (opencl_language_data): Delete.
+	(opencl_language): Remove references to opencl_language_data.
+	* p-lang.c (pascal_language_data): Delete.
+	(pascal_language): Remove references to pascal_language_data.
+	* rust-lang.c (rust_language_data): Delete.
+	(rust_language): Remove references to rust_language_data.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_op_print_tab
+	initializer.
+	(ada_language::opcode_print_table): New member function.
+	* c-lang.c (c_language_data): Remove la_op_print_tab initializer.
+	(c_language::opcode_print_table): New member function.
+	(cplus_language_data): Remove la_op_print_tab initializer.
+	(cplus_language::opcode_print_table): New member function.
+	(asm_language_data): Remove la_op_print_tab initializer.
+	(asm_language::opcode_print_table): New member function.
+	(minimal_language_data): Remove la_op_print_tab initializer.
+	(minimal_language::opcode_print_table): New member function.
+	* d-lang.c (d_language_data): Remove la_op_print_tab initializer.
+	(d_language::opcode_print_table): New member function.
+	* expprint.c (print_subexp_standard): Update call to
+	opcode_print_table.
+	(op_string): Likewise.
+	* f-lang.c (f_language_data): Remove la_op_print_tab initializer.
+	(f_language::opcode_print_table): New member function.
+	* go-lang.c (go_language_data): Remove la_op_print_tab
+	initializer.
+	(go_language::opcode_print_table): New member function.
+	* language.c (unknown_language_data): Remove la_op_print_tab
+	initializer.
+	(unknown_language::opcode_print_table): New member function.
+	(auto_language_data): Remove la_op_print_tab initializer.
+	(auto_language::opcode_print_table): New member function.
+	* language.h (language_data): Remove la_op_print_tab field.
+	(language_defn::opcode_print_table): Declare new member function.
+	* m2-lang.c (m2_language_data): Remove la_op_print_tab
+	initializer.
+	(m2_language::opcode_print_table): New member function.
+	* objc-lang.c (objc_language_data): Remove la_op_print_tab
+	initializer.
+	(objc_language::opcode_print_table): New member function.
+	* opencl-lang.c (opencl_language_data): Remove la_op_print_tab
+	initializer.
+	(opencl_language::opcode_print_table): New member function.
+	* p-lang.c (pascal_language_data): Remove la_op_print_tab
+	initializer.
+	(pascal_language::opcode_print_table): New member function.
+	* rust-lang.c (rust_language_data): Remove la_op_print_tab
+	initializer.
+	(rust_language::opcode_print_table): New member function.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_exp_desc initializer.
+	(ada_language::expression_ops): New member function.
+	* c-lang.c (c_language_data): Remove la_exp_desc initializer.
+	(c_language::expression_ops): New member function.
+	(cplus_language_data): Remove la_exp_desc initializer.
+	(cplus_language::expression_ops): New member function.
+	(asm_language_data): Remove la_exp_desc initializer.
+	(asm_language::expression_ops): New member function.
+	(minimal_language_data): Remove la_exp_desc initializer.
+	(minimal_language::expression_ops): New member function.
+	* d-lang.c (d_language_data): Remove la_exp_desc initializer.
+	(d_language::expression_ops): New member function.
+	* eval.c (evaluate_subexp): Update call to expression_ops.
+	* expprint.c (print_subexp): Likewise.
+	(op_name): Likewise.
+	(dump_subexp_body): Likewise.
+	* f-lang.c (f_language_data): Remove la_exp_desc initializer.
+	(f_language::expression_ops): New member function.
+	* go-lang.c (go_language_data): Remove la_exp_desc initializer.
+	(go_language::expression_ops): New member function.
+	* language.c (language_defn::expression_ops): New function.
+	(unknown_language_data): Remove la_exp_desc initializer.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Remove la_exp_desc field.
+	(language_defn::expression_ops): Declare new member function.
+	* m2-lang.c (m2_language_data): Remove la_exp_desc initializer.
+	(m2_language::expression_ops): New member function.
+	* objc-lang.c (objc_language_data): Remove la_exp_desc
+	initializer.
+	* opencl-lang.c (opencl_language_data): Remove la_exp_desc
+	initializer.
+	(opencl_language::expression_ops): New member function.
+	* p-lang.c (pascal_language_data): Remove la_exp_desc initializer.
+	* parse.c (operator_length): Update call to expression_ops.
+	(exp_iterate): Likewise.
+	* rust-lang.c (rust_language_data): Remove la_exp_desc
+	initializer.
+	(ruse_language::expression_ops): New member function.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_varobj_ops
+	initializer.
+	(ada_language::varobj_ops): New member function.
+	* c-lang.c (c_language_data): Remove la_varobj_ops
+	initializer.
+	(cplus_language_data): Likewise.
+	(cplus_language::varobj_ops): New member function.
+	(asm_language_data): Remove la_varobj_ops initializer.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (language_defn::varobj_ops): New function.
+	(unknown_language_data): Remove la_varobj_ops
+	initializer.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Remove la_varobj_ops field.
+	(language_defn::varobj_ops): Declare new member function.
+	* m2-lang.c (m2_language_data): Remove la_varobj_ops initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+	* varobj.c (varobj_create): Update call to varobj_ops.
+	* varobj.h (default_varobj_ops): Delete define.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_macro_expansion
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(c_language::macro_expansion): New member function.
+	(cplus_language_data): Likewise.
+	(cplus_language::macro_expansion): New member function.
+	(asm_language_data): Likewise.
+	(asm_language::macro_expansion): New member function.
+	(minimal_language_data): Likewise.
+	(minimal_language::macro_expansion): New member function.
+	* d-lang.c (d_language_data): Remove la_macro_expansion
+	initializer.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Remove la_macro_expansion field.
+	(language_defn::macro_expansion): New member function.
+	* m2-lang.c (m2_language_data): Remove la_macro_expansion
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	(objc_language::macro_expansion): New member function.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	(opencl_language::macro_expansion): New member function.
+	* p-lang.c (pascal_language_data): Remove la_macro_expansion
+	initializer.
+	* rust-lang.c (rust_language_data): Likewise.
+	* symtab.c (default_collect_symbol_completion_matches_break_on):
+	Update call to macro_expansion.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_array_ordering
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* dwarf2/read.c (read_array_order): Update for call to
+	array_ordering.
+	* f-lang.c (f_language_data): Remove la_array_ordering
+	initializer.
+	(f_language::array_ordering): New member function.
+	* go-lang.c (go_language_data): Remove la_array_ordering
+	initializer.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_array_ordering field.
+	(language_defn::array_ordering): New member function.
+	* m2-lang.c (m2_language_data): Remove la_array_ordering
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_case_sensitivity
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	(f_language::case_sensitivity): New member function.
+	* go-lang.c (go_language_data): Remove la_case_sensitivity
+	initializer.
+	* language.c (enum case_mode): Moved here from language.h.
+	(case_mode): Make static.
+	(show_case_command): Update for case_sensitivity being a method.
+	(set_case_command): Likewise.
+	(set_range_case): Likewise.
+	(unknown_language_data): Remove la_case_sensitivity initializer.
+	(auto_language_data): Likewise.
+	* language.h (case_mode): Delete, move enum declaration to
+	language.c.
+	(language_data): Delete la_case_sensitivity field.
+	(language_defn::case_sensitivity): New member function.
+	* m2-lang.c (m2_language_data): Remove la_case_sensitivity
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_range_check
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	(f_language::range_checking_on_by_default): New member function.
+	* go-lang.c (go_language_data): Remove la_range_check initializer.
+	* language.c (enum range_mode): Moved here from language.h.
+	(range_mode): Made static.
+	(show_range_command): Update to use
+	range_checking_on_by_default.
+	(set_range_command): Likewise.
+	(set_range_case): Likewise.
+	(unknown_language_data): Remove la_range_check initializer.
+	(auto_language_data): Likewise.
+	* language.h (range_mode): Delete.  Enum definition moved to
+	language.c.
+	(language_data): Remove la_range_check field.
+	(language_defn::range_checking_on_by_default): New member
+	function.
+	* m2-lang.c (m2_language_data): Remove la_range_check initializer.
+	(m2_language::range_checking_on_by_default): New member function.
+	* objc-lang.c (objc_language_data): Remove la_range_check
+	initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	(pascal_language::range_checking_on_by_default): New member
+	function.
+	* rust-lang.c (rust_language_data): Remove la_range_check
+	initializer.
+	(rust_language::range_checking_on_by_default): New member
+	function.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2/read.c (dwarf2_physname): Remove special case for
+	language_go.
+	* go-lang.c (go_language::store_sym_names_in_linkage_form_p): New
+	member function.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove
+	la_store_sym_names_in_linkage_form_p initializer.
+	(ada_language::store_sym_names_in_linkage_form_p): New member
+	function.
+	* c-lang.c (c_language_data): Remove
+	la_store_sym_names_in_linkage_form_p initializer.
+	(c_language::store_sym_names_in_linkage_form_p): New member
+	function.
+	(cplus_language_data): Remove la_store_sym_names_in_linkage_form_p
+	initializer.
+	(asm_language_data): Likewise.
+	(asm_language::store_sym_names_in_linkage_form_p): New member
+	function.
+	(minimal_language_data): Remove
+	la_store_sym_names_in_linkage_form_p initializer.
+	(minimal_language::store_sym_names_in_linkage_form_p): New member
+	function.
+	* d-lang.c (d_language_data): Remove
+	la_store_sym_names_in_linkage_form_p initializer.
+	* dwarf2/read.c (dwarf2_physname): Update call to
+	store_sym_names_in_linkage_form_p.
+	* f-lang.c (f_language_data): Remove
+	la_store_sym_names_in_linkage_form_p initializer.
+	* go-lang.c (go_language_data): Remove
+	la_store_sym_names_in_linkage_form_p initializer.
+	* language.c (unknown_language_data): Remove
+	la_store_sym_names_in_linkage_form_p initializer.
+	(unknown_language::store_sym_names_in_linkage_form_p): New member
+	function.
+	(auto_language_data): Remove la_store_sym_names_in_linkage_form_p
+	initializer.
+	(auto_language::store_sym_names_in_linkage_form_p): New member
+	function.
+	* language.h (language_data): Remove
+	la_store_sym_names_in_linkage_form_p member variable.
+	(language_defn::store_sym_names_in_linkage_form_p): New member
+	function.
+	* m2-lang.c (m2_language_data): Remove
+	la_store_sym_names_in_linkage_form_p initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove string_lower_bound
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Remove string_lower_bound field.
+	(language_defn::string_lower_bound): New member function.
+	* m2-lang.c (m2_language_data): Remove string_lower_bound
+	initializer.
+	(m2_language::string_lower_bound): New member function.
+	* objc-lang.c (objc_language_data): Remove string_lower_bound
+	initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+	* valops.c (value_cstring): Update call to string_lower_bound.
+	(value_string): Likewise.
+	* value.c (allocate_repeated_value): Likewise.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* valops.c (value_repeat): Fix incorrect argument name in comment.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove c_style_arrays
+	initializer.
+	(ada_language::c_style_arrays_p): New member fuction.
+	* c-lang.c (c_language_data): Remove c_style_arrays
+	initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* eval.c (ptrmath_type_p): Update call to c_style_arrays_p.
+	* f-lang.c (f_language_data): Remove c_style_arrays initializer.
+	(f_language::c_style_arrays_p): New member function.
+	* go-lang.c (go_language_data): Remove c_style_arrays initializer.
+	* infcall.c (value_arg_coerce): Update call to c_style_arrays_p.
+	* language.c (unknown_language_data): Remove c_style_arrays
+	initializer.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Remove c_style_arrays field.
+	(language_defn::c_style_arrays_p): New member function.
+	* m2-lang.c (m2_language_data): Remove c_style_arrays initializer.
+	(m2_language::c_style_arrays_p): New member function.
+	* objc-lang.c (objc_language_data): Remove c_style_arrays
+	initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+	* valarith.c (value_subscript): Update call to c_style_arrays_p,
+	and update local variable to a bool.
+	* valops.c (value_cast): Update call to c_style_arrays_p.
+	(value_array): Likewise.
+	* value.c (coerce_array): Likewise.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_language initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Remove la_language field.
+	(language_defn::language_defn): Initialise la_language field.
+	(language_defn::la_language): New member variable.
+	* m2-lang.c (m2_language_data): Remove la_language field.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_extensions): Delete, moved into
+	ada_language::filename_extensions.
+	(ada_language_data): Remove la_filename_extensions initializer.
+	(ada_language::filename_extensions): New member function.
+	* c-lang.c (c_extensions): Delete, moved into
+	c_language::filename_extensions.
+	(c_language_data): Remove la_filename_extensions initializer.
+	(c_language::filename_extensions): New member function.
+	(cplus_extensions): Delete, moved into
+	cplus_language::filename_extensions.
+	(cplus_language_data): Remove la_filename_extensions initializer.
+	(cplus_language::filename_extensions): New member function.
+	(asm_extensions): Delete, moved into
+	asm_language::filename_extensions.
+	(asm_language_data): Remove la_filename_extensions initializer.
+	(asm_language::filename_extensions): New member function.
+	(minimal_language_data): Remove la_filename_extensions
+	initializer.
+	* d-lang.c (d_extensions): Delete, moved into
+	d_language::filename_extensions.
+	(d_language_data): Remove la_filename_extensions initializer.
+	(d_language::filename_extensions): New member function.
+	* f-lang.c (f_extensions): Delete, moved into
+	f_language::filename_extensions.
+	(f_language_data): Remove la_filename_extensions initializer.
+	(f_language::filename_extensions): New member function.
+	* go-lang.c (go_language_data): Remove la_filename_extensions
+	initializer.
+	* language.c (add_set_language_command): Update now that
+	filename_extensions returns a vector.
+	(unknown_language_data): Remove la_filename_extensions
+	initializer.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Remove la_filename_extensions field.
+	(language_defn::filename_extensions): New member function.
+	* m2-lang.c (m2_language_data): Remove la_filename_extensions
+	initializer.
+	* objc-lang.c (objc_extensions): Delete, moved into
+	objc_language::filename_extensions.
+	(objc_language_data): Remove la_filename_extensions initializer.
+	(objc_language::filename_extensions): New member function.
+	* opencl-lang.c (opencl_language_data): Remove
+	la_filename_extensions initializer.
+	* p-lang.c (pascal_extensions): Delete, moved into
+	pascal_language::filename_extensions.
+	(pascal_language_data): Remove la_filename_extensions initializer.
+	(pascal_language::filename_extensions): New member function.
+	* rust-lang.c (rust_extensions): Delete, moved into
+	rust_language::filename_extensions.
+	(rust_language_data): Remove la_filename_extensions initializer.
+	(rust_language::filename_extensions): New member function.
+	* symfile.c (add_filename_language): Add new assert.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_name and
+	la_natural_name initializers.
+	(ada_language::name): New member function.
+	(ada_language::natural_name): New member function.
+	* c-lang.c (c_language_data): Remove la_name and
+	la_natural_name initializers.
+	(c_language::name): New member function.
+	(c_language::natural_name): New member function.
+	(cplus_language_data): Remove la_name and
+	la_natural_name initializers.
+	(cplus_language::name): New member function.
+	(cplus_language::natural_name): New member function.
+	(asm_language_data): Remove la_name and
+	la_natural_name initializers.
+	(asm_language::name): New member function.
+	(asm_language::natural_name): New member function.
+	(minimal_language_data): Remove la_name and
+	la_natural_name initializers.
+	(minimal_language::name): New member function.
+	(minimal_language::natural_name): New member function.
+	* compile/compile.c (compile_to_object): Update call to
+	lanugage_defn::name.
+	* d-lang.c (d_language_data): Remove la_name and
+	la_natural_name initializers.
+	(d_language::name): New member function.
+	(d_language::natural_name): New member function.
+	* expprint.c (print_subexp_standard): Update call to
+	language_defn::name.
+	(dump_raw_expression): Likewise
+	(dump_prefix_expression): Likewise.
+	* f-lang.c (f_language_data): Remove la_name and
+	la_natural_name initializers.
+	(f_language::name): New member function.
+	(f_language::natural_name): New member function.
+	* go-lang.c (go_language_data): Remove la_name and
+	la_natural_name initializers.
+	(go_language::name): New member function.
+	(go_language::natural_name): New member function.
+	* language.c (show_language_command): Update call to
+	language_defn::name.
+	(set_language_command): Likewise.
+	(language_enum): Likewise.
+	(language_str): Likewise.
+	(add_set_language_command): Likewise, use
+	language_defn::natural_name in the doc string.
+	(unknown_language_data): Remove la_name and
+	la_natural_name initializers.
+	(unknown_language::name): New member function.
+	(unknown_language::natural_name): New member function.
+	(auto_language_data): Remove la_name and
+	la_natural_name initializers.
+	(auto_language::name): New member function.
+	(auto_language::natural_name): New member function.
+	(language_lookup_primitive_type_as_symbol): Update call to
+	language_defn::name.
+	* language.h (language_data): Remove la_name and la_natural_name
+	member variables.
+	(language_defn::name): New member function.
+	(language_defn::natural_name): New member function.
+	* m2-lang.c (m2_language_data): Remove la_name and
+	la_natural_name initializers.
+	(m2_language::name): New member function.
+	(m2_language::natural_name): New member function.
+	* mi/mi-cmd-var.c (mi_cmd_var_info_expression): Update call to
+	language_defn::natural_name.
+	* objc-lang.c (objc_language_data): Remove la_name and
+	la_natural_name initializers.
+	(objc_language::name): New member function.
+	(objc_language::natural_name): New member function.
+	* opencl-lang.c (opencl_language_data): Remove la_name and
+	la_natural_name initializers.
+	(opencl_language::name): New member function.
+	(opencl_language::natural_name): New member function.
+	* p-lang.c (pascal_language_data): Remove la_name and
+	la_natural_name initializers.
+	(pascal_language::name): New member function.
+	(pascal_language::natural_name): New member function.
+	* rust-lang.c (rust_language_data): Remove la_name and
+	la_natural_name initializers.
+	(rust_language::name): New member function.
+	(rust_language::natural_name): New member function.
+	* symtab.c (lookup_language_this): Update call to
+	language_defn::name.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove la_name_of_this
+	initializer.
+	* ax-gdb.c (gen_expr): Update call to name_of_this.
+	* c-exp.y (classify_name): Likewise.
+	* c-lang.c (c_language_data): Remove la_name_of_this initializer.
+	(cplus_language_data): Likewise.
+	(cplus_language::name_of_this): New member function.
+	(asm_language_data): Remove la_name_of_this initializer.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	(d_language::name_of_this): New member function.
+	* expprint.c (print_subexp_standard): Update call to name_of_this.
+	* f-lang.c (f_language_data): Remove la_name_of_this initializer.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Likewise.
+	(unknown_language::name_of_this): New member function.
+	(auto_language_data): Remove la_name_of_this initializer.
+	(auto_language::name_of_this): New member function.
+	* language.h (language_data): Delete la_name_of_this member
+	variable.
+	(language_defn::name_of_this): New member function.
+	* m2-lang.c (m2_language_data): Remove la_name_of_this
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	(objc_language::name_of_this): New member function.
+	* opencl-lang.c (opencl_language_data): Remove la_name_of_this
+	initializer.
+	* p-lang.c (pascal_language_data): Likewise.
+	(pascal_language::name_of_this): New member function.
+	* rust-lang.c (rust_language_data): Remove la_name_of_this
+	initializer.
+	* symtab.c (lookup_language_this): Update call to name_of_this.
+	(lookup_symbol_aux): Likewise.
+	* valops.c (value_of_this): Likewise.
+
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Remove
+	la_struct_too_deep_ellipsis initializer.
+	(ada_language::struct_too_deep_ellipsis): New member function.
+	* c-lang.c (c_language_data): Remove la_struct_too_deep_ellipsis
+	initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* cp-valprint.c (cp_print_value): Update call to
+	struct_too_deep_ellipsis.
+	* d-lang.c (d_language_data): Remove la_struct_too_deep_ellipsis
+	initializer.
+	* f-lang.c (f_language_data): Likewise.
+	(f_language::struct_too_deep_ellipsis): New member function.
+	* go-lang.c (go_language_data): Remove la_struct_too_deep_ellipsis
+	initializer.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_struct_too_deep_ellipsis
+	member variable.
+	(language_defn::struct_too_deep_ellipsis): New member function.
+	* m2-lang.c (m2_language_data): Remove la_struct_too_deep_ellipsis
+	initializer.Q
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+	* valprint.c (val_print_check_max_depth): Update call to
+	struct_too_deep_ellipsis.
+
+2020-09-16  Felix Willgerodt  <felix.willgerodt@intel.com>
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2020-09-15  Tom Tromey  <tom@tromey.com>
+
+	* f-valprint.c (f_value_print_inner) <case TYPE_CODE_INT>:
+	Remove.
+
+2020-09-15  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_value_print_inner): Remove TYPE_CODE_MEMBERPTR
+	and TYPE_CODE_METHODPTR cases.
+	* c-valprint.c (c_value_print_memberptr): Move to valprint.c.
+	(c_value_print_inner): Update.
+	* valprint.c (generic_value_print_memberptr): New function, from
+	c_value_print_memberptr.
+	(generic_value_print): Use it.  Call cplus_print_method_ptr.
+
+2020-09-15  Tom Tromey  <tromey@adacore.com>
+
+	* python/python-internal.h (PyInt_FromLong): Remove define.
+	* python/py-value.c (convert_value_from_python): Use
+	gdb_py_object_from_longest.
+	* python/py-type.c (typy_get_code): Use
+	gdb_py_object_from_longest.
+	* python/py-symtab.c (salpy_get_line): Use
+	gdb_py_object_from_longest.
+	* python/py-symbol.c (sympy_get_addr_class, sympy_line): Use
+	gdb_py_object_from_longest.
+	* python/py-record.c (recpy_gap_reason_code): Use
+	gdb_py_object_from_longest.
+	* python/py-record-btrace.c (recpy_bt_insn_size)
+	(recpy_bt_func_level, btpy_list_count): Use
+	gdb_py_object_from_longest.
+	* python/py-infthread.c (gdbpy_create_ptid_object): Use
+	gdb_py_object_from_longest.  Fix error handling.
+	* python/py-framefilter.c (bootstrap_python_frame_filters): Use
+	gdb_py_object_from_longest.
+	* python/py-frame.c (frapy_type, frapy_unwind_stop_reason): Use
+	gdb_py_object_from_longest.
+	* python/py-breakpoint.c (bppy_get_type, bppy_get_number)
+	(bppy_get_thread, bppy_get_task, bppy_get_hit_count)
+	(bppy_get_ignore_count): Use gdb_py_object_from_longest.
+
+2020-09-15  Tom Tromey  <tromey@adacore.com>
+
+	* python/python.c (gdbpy_parameter_value): Use
+	gdb_py_object_from_ulongest.
+
+2020-09-15  Tom Tromey  <tromey@adacore.com>
+
+	* python/py-infevents.c (create_register_changed_event_object):
+	Use gdb_py_object_from_longest.
+	* python/py-exitedevent.c (create_exited_event_object): Use
+	gdb_py_object_from_longest.
+
+2020-09-15  Tom Tromey  <tromey@adacore.com>
+
+	* python/python.c (gdbpy_parameter_value): Use
+	gdb_py_object_from_longest.
+	* python/py-type.c (convert_field, typy_range): Use
+	gdb_py_object_from_longest.
+	* python/py-tui.c (gdbpy_tui_width, gdbpy_tui_height): Use
+	gdb_py_object_from_longest.
+	* python/py-lazy-string.c (stpy_get_length): Use
+	gdb_py_object_from_longest.
+	* python/py-infthread.c (thpy_get_num, thpy_get_global_num): Use
+	gdb_py_object_from_longest.
+	* python/py-infevents.c (create_memory_changed_event_object): Use
+	gdb_py_object_from_longest.
+	* python/py-inferior.c (infpy_get_num): Use
+	gdb_py_object_from_longest.
+	(infpy_get_pid): Likewise.
+
+2020-09-15  Tom Tromey  <tromey@adacore.com>
+
+	* python/python-internal.h (gdb_py_long_from_ulongest): Remove
+	defines.
+	* python/py-value.c (valpy_long): Use
+	gdb_py_object_from_ulongest.
+	* python/py-symtab.c (salpy_get_pc): Use
+	gdb_py_object_from_ulongest.
+	(salpy_get_last): Likewise.
+	* python/py-record-btrace.c (recpy_bt_insn_pc): Use
+	gdb_py_object_from_ulongest.
+	* python/py-lazy-string.c (stpy_get_address): Use
+	gdb_py_object_from_ulongest.
+	* python/py-frame.c (frapy_pc): Use gdb_py_object_from_ulongest.
+	* python/py-arch.c (archpy_disassemble): Use
+	gdb_py_object_from_ulongest and gdb_py_object_from_longest.  Fix
+	error handling.
+
+2020-09-15  Tom Tromey  <tromey@adacore.com>
+
+	* python/python-internal.h (gdb_py_long_from_longest): Remove
+	defines.
+	* python/py-value.c (valpy_long): Use gdb_py_object_from_longest.
+	* python/py-type.c (convert_field, typy_get_sizeof): Use
+	gdb_py_object_from_longest.
+	* python/py-record-btrace.c (btpy_list_index): Use
+	gdb_py_object_from_longest.
+
+2020-09-15  Tom Tromey  <tromey@adacore.com>
+
+	* python/python-internal.h (PyInt_FromSsize_t): Remove define.
+	* python/py-record.c (recpy_element_number): Use
+	gdb_py_object_from_longest.
+	(recpy_gap_number): Likewise.
+
+2020-09-15  Tom Tromey  <tromey@adacore.com>
+
+	* top.c (ui::ui): Update.
+	(highest_ui_num): Remove.
+	* top.h (struct ui) <num>: Remove.
+
+2020-09-15  Tom Tromey  <tromey@adacore.com>
+
+	* unittests/memory-map-selftests.c (valid_mem_map): Now array.
+	* ui-style.c (ansi_regex_text): Now array.
+	* rust-exp.y (number_regex_text): Now array.
+	* linespec.c (linespec_quote_characters): Now array.
+	* jit.c (jit_break_name, jit_descriptor_name, reader_init_fn_sym):
+	Now arrays.
+
+2020-09-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* debuginfod-support.c (debuginfod_client_deleter): New.
+	(debuginfod_client_up): New.
+	(debuginfod_init): Return debuginfod_client_up.
+	(debuginfod_source_query): Adjust.
+	(debuginfod_debuginfo_query): Adjust.
+
+2020-09-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* debuginfod-support.c (debuginfod_source_query): Use
+	make_unique_xstrdup.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_INSTANCE_FLAGS): Remove, replace all uses
+	with `type::instance_flags`.
+
+2020-09-14  Michael Mullin  <masmullin@gmail.com>
+
+	* xml-tdesc.c [!defined(HAVE_LIBEXPAT)] (tdesc_parse_xml):
+	Remove baton parameter.
+
+2020-09-14  Pedro Alves  <pedro@palves.net>
+
+	* Makefile.in (SELFTESTS_SRCS): Add
+	unittests/enum-flags-selftests.c.
+	* btrace.c (ftrace_update_caller, ftrace_fixup_calle): Use
+	btrace_function_flags instead of enum btrace_function_flag.
+	* compile/compile-c-types.c (convert_qualified): Use
+	enum_flags::raw.
+	* compile/compile-cplus-symbols.c (convert_one_symbol)
+	(convert_symbol_bmsym):
+	* compile/compile-cplus-types.c (compile_cplus_convert_method)
+	(compile_cplus_convert_struct_or_union_methods)
+	(compile_cplus_instance::convert_qualified_base):
+	* go-exp.y (parse_string_or_char): Add cast to int.
+	* unittests/enum-flags-selftests.c: New file.
+	* record-btrace.c (btrace_thread_flag_to_str): Change parameter's
+	type to btrace_thread_flags from btrace_thread_flag.
+	(record_btrace_cancel_resume, record_btrace_step_thread): Change
+	local's type to btrace_thread_flags from btrace_thread_flag.  Add
+	cast in DEBUG call.
+
+2020-09-14  Pedro Alves  <pedro@palves.net>
+
+	* c-typeprint.c (c_type_print_modifier): Adjust to rename.
+	* gdbtypes.c (address_space_name_to_int): Rename to ...
+	(address_space_name_to_type_instance_flags): ... this.
+	(address_space_int_to_name): Rename to ...
+	(address_space_type_instance_flags_to_name): ... this.
+	* gdbtypes.h (address_space_name_to_int): Rename to ...
+	(address_space_name_to_type_instance_flags): ... this.
+	(address_space_int_to_name): Rename to ...
+	(address_space_type_instance_flags_to_name): ... this.
+	* type-stack.c (type_stack::insert): Adjust to rename.
+	* type-stack.h (type_stack::insert): Likewise.
+
+2020-09-14  Pedro Alves  <pedro@palves.net>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* avr-tdep.c (avr_address_class_type_flags): Return
+	type_instance_flags.
+	(avr_address_class_type_flags_to_name): Take a
+	type_instance_flags.
+	(avr_address_class_name_to_type_flags): Return bool and take a
+	type_instance_flags.
+	* d-lang.c (build_d_types): Use type::set_instance_flags.
+	* ft32-tdep.c (ft32_address_class_type_flags): Return
+	type_instance_flags.
+	(ft32_address_class_type_flags_to_name): Take a
+	type_instance_flags.
+	(ft32_address_class_name_to_type_flags): Return bool and take a
+	type_instance_flags.
+	(ft32_gdbarch_init): Use type::set_instance_flags.
+	* eval.c (fake_method::fake_method): Use type::set_instance_flags.
+	* gdbarch.h, gdbarch.c: Regenerate.
+	* gdbarch.sh (address_class_type_flags): Use type_instance_flags.
+	(address_class_name_to_type_flags): Use type_instance_flags and
+	bool.
+	* gdbtypes.c (address_space_name_to_int)
+	(address_space_int_to_name, make_qualified_type): Use
+	type_instance_flags.
+	(make_qualified_type): Use type_instance_flags and
+	type::set_instance_flags.
+	(make_type_with_address_space, make_cv_type, make_vector_type)
+	(check_typedef): Use type_instance_flags.
+	(recursive_dump_type): Cast type_instance_flags to unsigned for
+	printing.
+	(copy_type_recursive): Use type::set_instance_flags.
+	(gdbtypes_post_init): Use type::set_instance_flags.
+	* gdbtypes.h (struct type) <instance_flags>: Rename to ...
+	<m_instance_flags>: ... this.
+	<instance_flags, set_instance_flags>: New methods.
+	(TYPE_INSTANCE_FLAGS): Use the instance_flags method.
+	(SET_TYPE_INSTANCE_FLAGS): New.
+	(address_space_name_to_int, address_space_int_to_name)
+	(make_type_with_address_space): Pass flags using
+	type_instance_flags instead of int.
+	* stabsread.c (cleanup_undefined_types_noname): Use
+	type::set_instance_flags.
+	* s390-tdep.c (s390_address_class_type_flags): Return
+	type_instance_flags.
+	(s390_address_class_type_flags_to_name): Take a
+	type_instance_flags.
+	(s390_address_class_name_to_type_flags): Return bool and take a
+	type_instance_flags.
+	* type-stack.c (type_stack::follow_types): Use
+	type_instance_flags.
+	* dwarf2/read.c (read_tag_pointer_type): Use type_instance_flags.
+
+2020-09-14  Tom Tromey  <tromey@adacore.com>
+
+	* x86-tdep.h (x86_in_indirect_branch_thunk): Update.
+	* x86-tdep.c (x86_is_thunk_register_name)
+	(x86_in_indirect_branch_thunk): Update.
+	* sparc64-tdep.c (sparc64_fpu_register_names)
+	(sparc64_cp0_register_names, sparc64_register_names)
+	(sparc64_pseudo_register_names): Now const.
+	* sparc-tdep.h (struct gdbarch_tdep) <fpu_register_names,
+	cp0_registers_num>: Now const.
+	* sparc-tdep.c (sparc_core_register_names)
+	(sparc32_fpu_register_names, sparc32_cp0_register_names)
+	(sparc32_pseudo_register_names): Now const.
+	(validate_tdesc_registers): Update.
+	* rust-lang.c (rust_extensions): Now const.
+	* p-lang.c (p_extensions): Now const.
+	* objc-lang.c (objc_extensions): Now const.
+	* nto-tdep.c (nto_thread_state_str): Now const.
+	* moxie-tdep.c (moxie_register_names): Now const.
+	* mips-tdep.h (struct gdbarch_tdep) <mips_processor_reg_names>:
+	Now const.
+	* mips-tdep.c (mips_generic_reg_names, mips_tx39_reg_names)
+	(mips_linux_reg_names): Now const.
+	(mips_gdbarch_init): Update.
+	* microblaze-tdep.c (microblaze_register_names): Now const.
+	* m68k-tdep.c (m68k_register_names): Now const.
+	* m32r-tdep.c (m32r_register_names): Now const.
+	* ia64-tdep.c (ia64_register_names): Now const.
+	* i386-tdep.h (struct gdbarch_tdep) <register_names,
+	ymmh_register_names, ymm16h_regnum, mpx_register_names,
+	k_register_names, zmmh_register_names, xmm_avx512_register_names,
+	ymm_avx512_register_names, pkeys_register_names>: Now const.
+	* i386-tdep.c (i386_register_names, i386_zmm_names)
+	(i386_zmmh_names, i386_k_names, i386_ymm_names, i386_ymmh_names)
+	(i386_mpx_names, i386_pkeys_names, i386_bnd_names)
+	(i386_mmx_names, i386_byte_names, i386_word_names): Now const.
+	* f-lang.c (f_extensions): Now const.
+	* d-lang.c (d_extensions): Now const.
+	* csky-tdep.c (csky_register_names): Now const.
+	* charset.c (default_charset_names, charset_enum): Now const.
+	(_initialize_charset): Update.
+	* c-lang.c (c_extensions, cplus_extensions, asm_extensions): Now
+	const.
+	* bsd-uthread.c (bsd_uthread_solib_names): Now const.
+	(bsd_uthread_solib_loaded): Update.
+	(bsd_uthread_state): Now const.
+	* amd64-tdep.c (amd64_register_names, amd64_ymm_names)
+	(amd64_ymm_avx512_names, amd64_ymmh_names)
+	(amd64_ymmh_avx512_names, amd64_mpx_names, amd64_k_names)
+	(amd64_zmmh_names, amd64_zmm_names, amd64_xmm_avx512_names)
+	(amd64_pkeys_names, amd64_byte_names, amd64_word_names)
+	(amd64_dword_names): Now const.
+	* agent.c (can_use_agent_enum): Now const.
+	* ada-tasks.c (task_states, long_task_states): Now const.
+	* ada-lang.c (known_runtime_file_name_patterns)
+	(known_auxiliary_function_name_patterns, attribute_names)
+	(standard_exc, ada_extensions): Now const.
+
+2020-09-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* bcache.h (struct bcache) <bcache>: Remove constructor.
+	<m_hash_function, m_compare_function>: Remove.
+	<~bcache>: Make virtual.
+	<compare>: Remove static method, introduce virtual method.
+	<default_hash>: Remove.
+	<hash>: New virtual method.
+	* bcache.c (bcache::expand_hash_table): Update.
+	(bcache::insert): Update.
+	(bcache::hash): New.
+	(bcache::compare): Update comment and parameter names.
+	* gdbtypes.c (types_deeply_equal): Update.
+	* psymtab.h (struct psymbol_bcache): New struct.
+	(class psymtab_storage) <psymtab_storage>: Make default.
+	<psymbol_cache>: Change type to psymbol_bcache.
+	* psymtab.c (psymtab_storage::psymtab_storage): Remove.
+	(psymbol_hash): Change to...
+	(psymbol_bcache::hash): ... this.
+	(psymbol_compare): Change to...
+	(psymbol_bcache::compare): ... this.
+
+2020-09-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* linux-nat.c (linux_nat_wait_1): Don't use inferior_ptid when
+	checking for initial lwp.
+
+2020-09-14  Tom Tromey  <tromey@adacore.com>
+
+	* m68k-tdep.c (m68k_extract_return_value): Use
+	pointer_result_regnum.
+	(m68k_store_return_value): Likewise.
+	(m68k_reg_struct_return_p): Handle vectors and arrays.
+	(m68k_return_value): Handle arrays.
+	(m68k_svr4_return_value): Fix single-element aggregate handling.
+	Handle long double.  Adjust for embedded ABI.
+	(m68k_svr4_init_abi): Set pointer_result_regnum.
+	(m68k_embedded_init_abi): New function.
+	(m68k_gdbarch_init): Handle Tag_GNU_M68K_ABI_FP.
+	(m68k_osabi_sniffer): New function.
+	(_initialize_m68k_tdep): Register osabi sniffer.
+	* m68k-tdep.h (struct gdbarch_tdep) <pointer_result_regnum>: New
+	member.
+
+2020-09-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* xml-support.c (xml_fetch_content_from_file): Replace xfree
+	with gdb::unique_xmalloc_ptr<char>.
+
+2020-09-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* xml-support.h (xml_fetch_another): Change type to be a
+	function_view.
+	(xml_process_xincludes): Remove baton parameter.
+	(xml_fetch_content_from_file): Change baton parameter to
+	dirname.
+	* xml-support.c (struct xinclude_parsing_data)
+	<xinclude_parsing_data>: Remove baton parameter.
+	<fetcher_baton>: Remove.
+	(xinclude_start_include): Adjust.
+	(xml_process_xincludes): Adjust.
+	(xml_fetch_content_from_file): Replace baton parameter with
+	dirname.
+	* xml-syscall.c (syscall_parse_xml): Remove baton parameter.
+	(xml_init_syscalls_info): Use a lambda.
+	* xml-tdesc.c (tdesc_parse_xml): Remove baton parameter.
+	(file_read_description_xml): Use a lambda.
+	(fetch_available_features_from_target): Change baton parameter
+	to target_ops.
+	(target_read_description_xml): Use a lambda.
+	(target_fetch_description_xml): Use a lambda.
+	(string_read_description_xml): Update.
+
+2020-09-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (TYPE_ENDIANITY_NOT_DEFAULT): Remove, replace all
+	uses with type::endianity_is_not_default.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <endianity_is_not_default,
+	set_endianity_is_not_default>: New methods.
+	(TYPE_ENDIANITY_NOT_DEFAULT): Use
+	type::endianity_is_not_default, change all write call sites to
+	use type::set_endianity_is_not_default.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_FIXED_INSTANCE): Remove, replace all
+	uses with type::is_fixed_instance.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <is_fixed_instance,
+	set_is_fixed_instance>: New methods.
+	(TYPE_FIXED_INSTANCE): Use type::is_fixed_instance, change all
+	write call sites to use type::set_is_fixed_instance.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_GNU_IFUNC): Remove, replace all
+	uses with type::is_gnu_ifunc.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <is_gnu_ifunc, set_is_gnu_ifunc>: New methods.
+	(TYPE_GNU_IFUNC): Use type::is_gnu_ifunc, change all write call sites to
+	use type::set_is_gnu_ifunc.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_STUB_SUPPORTED): Remove, replace all
+	uses with type::stub_is_supported.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <stub_is_supported, set_stub_is_supported>: New methods.
+	(TYPE_STUB_SUPPORTED): Use type::stub_is_supported, change all write call sites to
+	use type::set_stub_is_supported.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_VECTOR): Remove, replace all
+	uses with type::is_vector.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <is_vector, set_is_vector>: New methods.
+	(TYPE_VECTOR): Use type::is_vector, change all write call sites to
+	use type::set_is_vector.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_VARARGS): Remove, replace all
+	uses with type::has_varargs.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <has_varargs, set_has_varargs>: New methods.
+	(TYPE_VARARGS): Use type::has_varargs, change all write call sites to
+	use type::set_has_varargs.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_PROTOTYPED): Remove, replace all
+	uses with type::is_prototyped.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <is_prototyped, set_is_prototyped>:
+	New methods.
+	(TYPE_PROTOTYPED): Use type::is_prototyped, change all write
+	call sites to use type::set_is_prototyped.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_TARGET_STUB): Remove, replace all
+	uses with type::target_is_stub.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <target_is_stub, set_target_is_stub>:
+	New methods.
+	(TYPE_TARGET_STUB): Use type::is_stub, change all write call
+	sites to use type::set_target_is_stub.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_STUB): Remove, replace all
+	uses with type::is_stub.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <is_stub, set_is_stub>: New methods.
+	(TYPE_STUB): Use type::is_stub, change all write call sites to
+	use type::set_is_stub.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_NOSIGN): Remove, replace all uses with
+	type::has_no_signedness.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <has_no_signedness,
+	set_has_no_signedness>: New methods.
+	(TYPE_NOSIGN): Use type::has_no_signedness, change all write
+	call sites to use type::set_has_no_signedness.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_UNSIGNED): Remove, replace all uses with
+	type::is_unsigned.
+
+2020-09-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <is_unsigned, set_is_unsigned>: New
+	methods.
+	(TYPE_UNSIGNED): Use type::is_unsigned.  Change all write call
+	sites to use type::set_is_unsigned.
+
+2020-09-14  Fredrik Hederstierna  <fredrik.hederstierna@verisure.com>
+	    Adam Renquinha <arenquinha@cimeq.qc.ca>
+
+	* arm-tdep.c (arm_m_exception_cache): Try use correct stack
+	pointer and stack frame offset when unwinding.
+
+2020-09-13  Pedro Alves  <pedro@palves.net>
+
+	* NEWS: Document "-break-insert --qualified".
+	* mi/mi-cmd-break.c (mi_cmd_break_insert_1): Handle "--qualified".
+
+2020-09-13  Pedro Alves  <pedro@palves.net>
+
+	* linespec.c (classify_mtype, compare_msyms): Delete.
+	(search_minsyms_for_name): Remove classification logic.  Instead
+	filter out trampoline symbols if we also found an external
+	function of the same name.
+
+2020-09-13  Joel Brobecker  <brobecker@adacore.com>
+
+	* NEWS: Create a new section for the next release branch.
+	Rename the section of the current branch, now that it has
+	been cut.
+
+2020-09-13  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 10 branch created (8087c3fa8b5d695e3e29e69d70d0b35ec902ac59):
+	* version.in: Bump version to 11.0.50.DATE-git.
+
+2020-09-12  Joel Brobecker  <brobecker@adacore.com>
+
+	* infrun.c (namespace selftests): Only define #if GDB_SELF_TEST.
+
+2020-09-11  Moritz Riesterer  <moritz.riesterer@intel.com>
+	    Felix Willgerodt  <Felix.Willgerodt@intel.com>
+
+	* gdbarch.sh: Added bfloat16 type.
+	* gdbarch.c: Regenerated.
+	* gdbarch.h: Regenerated.
+	* gdbtypes.c (floatformats_bfloat16): New struct.
+	(gdbtypes_post_init): Add builtin_bfloat16.
+	* gdbtypes.h (struct builtin_type) <builtin_bfloat16>: New member.
+	(floatformats_bfloat16): New struct.
+	* i386-tdep.c (i386_zmm_type): Add field "v32_bfloat16"
+	(i386_ymm_type): Add field "v16_bfloat16"
+	(i386_gdbarch_init): Add set_gdbarch_bfloat16_format.
+	* target-descriptions.c (make_gdb_type): Add case TDESC_TYPE_BFLOAT16.
+	* gdbsupport/tdesc.cc (tdesc_predefined_types): New member bfloat16.
+	* gdbsupport/tdesc.h (tdesc_type_kind): New member TDESC_TYPE_BFLOAT16.
+	* features/i386/64bit-avx512.xml: Add bfloat16 type.
+	* features/i386/64bit-avx512.c: Regenerated.
+	* features/i386/64bit-sse.xml: Add bfloat16 type.
+	* features/i386/64bit-sse.c: Regenerated.
+
+2020-09-11  Felix Willgerodt  <felix.willgerodt@intel.com>
+
+	* i386-tdep.c (i386_zmm_type): Fix field names.
+	(i386_ymm_type): Fix field names.
+
+2020-09-11  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.c: Fix typo in the help message of the
+	"set breakpoint condition-evaluation" command.
+
+2020-09-10  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c: Include "nat/netbsd-nat.h".
+	* (nbsd_nat_target::pid_to_exec_file)
+	(nbsd_nat_target::thread_alive, nbsd_nat_target::thread_name)
+	(nbsd_nat_target::post_startup_inferior)
+	(nbsd_nat_target::post_attach, nbsd_nat_target::xfer_partial)
+	(nbsd_add_threads): Switch local code to common gdb/nat functions.
+	* (nbsd_pid_to_cmdline): Call sysctl from the global namespace.
+	* (nbsd_thread_lister): Remove.
+
+2020-09-10  Kamil Rytarowski  <n54@gmx.com>
+
+	* fork-inferior.c (startup_inferior): Avoid double free.
+
+2020-09-10  Kamil Rytarowski  <n54@gmx.com>
+
+	* netbsd-nat.h (netbsd_nat::qxfer_siginfo): Add.
+	* netbsd-nat.c (netbsd_nat::qxfer_siginfo): Likewise.
+
+2020-09-10  Kamil Rytarowski  <n54@gmx.com>
+
+	* netbsd-nat.h (netbsd_nat::enable_proc_events): Add.
+	* netbsd-nat.c: Include <sys/ptrace.h>.
+	* (netbsd_nat::enable_proc_events): Add.
+
+2020-09-10  Kamil Rytarowski  <n54@gmx.com>
+
+	* netbsd-nat.h: Include "gdbsupport/function-view.h".
+	* (netbsd_nat::thread_alive, netbsd_nat::thread_name)
+	(netbsd_nat::for_each_thread): Add.
+	* netbsd-nat.c: Include "gdbsupport/common-defs.h" and
+	"gdbsupport/common-debug.h".
+	* (netbsd_nat::netbsd_thread_lister)
+	(netbsd_nat::thread_alive, netbsd_nat::thread_name)
+	(netbsd_nat::for_each_thread): Add.
+
+2020-09-10  Kamil Rytarowski  <n54@gmx.com>
+
+	* netbsd-nat.h: Include <unistd.h>.
+	* (netbsd_nat::pid_to_exec_file): Add.
+	* netbsd-nat.c: Include <sys/types.h> and <sys/sysctl.h>.
+	* (netbsd_nat::pid_to_exec_file) Add.
+
+2020-09-10  Kamil Rytarowski  <n54@gmx.com>
+
+	* configure.nat (NATDEPFILES): Add nat/netbsd-nat.o when needed.
+
+2020-09-10  Kamil Rytarowski  <n54@gmx.com>
+
+	* netbsd-nat.h: New file.
+	* netbsd-nat.c: Likewise.
+
+2020-09-09  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (remove_extra_symbols): Do not increment when
+	removing an element
+
+2020-09-08  Tom Tromey  <tromey@adacore.com>
+
+	* gdb_bfd.c (gdb_bfd_open): Call bfd_fopen when fstat fails.
+
+2020-09-08  Tom Tromey  <tromey@adacore.com>
+
+	PR win32/25302:
+	* gdb_bfd.c (gdb_bfd_data): Add "st" parameter.
+	(gdb_bfd_init_data): New function.
+	(gdb_bfd_open, gdb_bfd_ref): Use gdb_bfd_init_data.
+
+2020-09-07  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infrun.c (fetch_inferior_event): Use
+	`switch_to_target_no_thread` to switch the target.
+
+2020-09-06  Tom Tromey  <tom@tromey.com>
+
+	* symfile.h (dwarf2_free_objfile): Don't declare.
+
+2020-09-03  Alok Kumar Sharma  <AlokKumar.Sharma@amd.com>
+
+	* gdb/i386-tdep.c (i386_floatformat_for_type): Added conditions
+	to match 16 byte real/complex type generated by Flang compiler.
+
+2020-09-03  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoint/26546
+	* dwarf2/read.c (new_symbol): Tag label symbol without DW_AT_low_pc as
+	LOC_OPTIMIZED_OUT instead of LOC_LABEL.
+
+2020-09-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* maint.c (index_digits): New function.
+	(struct maint_print_section_data): Remove.
+	(print_bfd_section_info): Remove print_data parameter, add arg
+	and index_digits.
+	(print_objfile_section_info): Likewise.
+	(print_bfd_section_info_maybe_relocated): Likewise (plus
+	objfile).
+	(maintenance_info_sections): Adjust calls.
+
+2020-09-02  Tom Tromey  <tromey@adacore.com>
+
+	* ada-varobj.c (ada_varobj_get_ptr_number_of_children): Return 0
+	for null pointers.
+	(ada_varobj_adjust_for_child_access): Special-case null pointers.
+
+2020-09-01  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* bcache.h (struct bcache) <insert>: Change type of `added` to
+	pointer to bool.
+	* bcache.c (bcache::insert): Likewise.
+	* gdbtypes.c (check_types_worklist): Adjust.
+	* psymtab.c (add_psymbol_to_bcache): Adjust.
+
+2020-08-31  Kevin Buettner  <kevinb@redhat.com>
+
+	* corelow.c (unordered_set): Include.
+	(class core_target): Add field 'm_core_unavailable_mappings'.
+	(core_target::build_file_mappings): Print only one warning
+	per inaccessible file.  Add unavailable/broken mappings
+	to m_core_unavailable_mappings.
+	(core_target::xfer_partial): Call...
+	(core_target::xfer_memory_via_mappings): New method.
+
+2020-08-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (struct field_info) <non_public_fields>: Change
+	type to bool.
+
+2020-08-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (struct field_info): Fix indentation.
+
+2020-08-31  Simon Marchi  <simon.marchi@efficios.com>
+
+	* frame-unwind.h (frame_prev_register_ftype): Fix adjective
+	ordering in comment.
+	* frame.c (frame_id_eq): Fix indentation.
+
+2020-08-31  Scott Linder  <scott@scottlinder.com>
+	    Simon Marchi  <simon.marchi@efficios.com>
+
+	* inline-frame.c (inline_frame_this_id): Remove assert that prevents
+	inline frame ids in outer frame.
+
+2020-08-31  Simon Marchi  <simon.marchi@efficios.com>
+
+	* frame.h (enum frame_id_stack_status) <FID_STACK_OUTER>: New.
+	* frame.c (fprint_frame_id): Handle FID_STACK_OUTER.
+	(outer_frame_id): Use FID_STACK_OUTER instead of
+	FID_STACK_INVALID.
+	(frame_id_p): Don't check for outer_frame_id.
+
+2020-08-31  Simon Marchi  <simon.marchi@efficios.com>
+
+	* frame-unwind.c (frame_unwind_got_optimized): Don't set
+	regnum/frame in value.  Call allocate_value_lazy.
+	* frame.c (frame_unwind_register_value): Use
+	val_print_not_saved.
+
+2020-08-31  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (NULL_TYPE): Remove, change all uses to nullptr.
+
+2020-08-29  Pedro Alves  <pedro@palves.net>
+
+	* progspace.c (print_program_space): Use all_inferiors.  Switch to
+	the inferior before calling target_pid_to_str.
+
+2020-08-28  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_end_psymtab): Update comment.
+	* dbxread.c (dbx_end_psymtab): Update comment.
+
+2020-08-28  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoint/26544
+	* breakpoint.c (parse_breakpoint_sals): Remove const from struct
+	event_location.
+	(create_breakpoint): Same.
+	(base_breakpoint_decode_location): Same.
+	(bkpt_create_sals_from_location): Same.
+	(bkpt_decode_location): Same.
+	(bkpt_probe_create_sals_from_location): Same.
+	(bkpt_probe_decode_location): Same.
+	(tracepoint_create_sals_from_location): Same.
+	(tracepoint_decode_location): Same.
+	(tracepoint_probe_decode_location): Same.
+	(strace_marker_create_sals_from_location): Same.
+	(strace_marker_decode_location): Same.
+	(create_sals_from_location_default): Same.
+	(decode_location_default): Same.
+	* breakpoint.h (struct breakpoint_ops): Same.
+	(create_breakpoint): Same.
+	* linespec.h (decode_line_full): Same.
+	* linespec.c (decode_line_full): Same.  Throw error if
+	result.size () == 0.
+
+2020-08-27  Pedro Alves  <pedro@palves.net>
+
+	PR gdb/26524
+	* breakpoint.c (until_break_fsm) <location_breakpoint,
+	caller_breakpoint>: Delete fields.
+	<breakpoints>: New field.
+	<until_break_fsm>: Adjust to save a breakpoint vector instead of
+	two individual breakpoints.
+	(until_break_fsm::should_stop): Loop over breakpoints in the
+	breakpoint vector.
+	(until_break_fsm::clean_up): Adjust to clear the breakpoints
+	vector.
+	(until_break_command): Handle location expanding into multiple
+	sals.
+
+2020-08-27  Pedro Alves  <pedro@palves.net>
+
+	PR gdb/26523
+	* inline-frame.c (stopped_by_user_bp_inline_frame): Also consider
+	bp_until breakpoints user-specified locations.  Update intro
+	comment.
+
+2020-08-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdb_bfd.h (gdb_bfd_section_iterator, gdb_bfd_section_range,
+	gdb_bfd_sections): New.
+	* maint.c (print_bfd_section_info): Change param type to
+	maint_print_section_data.
+	(print_objfile_section_info): Likewise.
+	(print_bfd_section_info_maybe_relocated): Likewise.
+	(maintenance_info_sections): Use gdb_bfd_sections.
+
+2020-08-25  Shahab Vahedi  <shahab@synopsys.com>
+
+	* MAINTAINERS: Add ARC target and maintainer.
+
+2020-08-25  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* configure.tgt: ARC support for GNU/Linux.
+	* Makefile.in (ALL_TARGET_OBJS): Likewise.
+	* arc-linux-tdep.c: New file.
+	* arc-tdep.h (ARC_STATUS32_L_MASK, ARC_STATUS32_DE_MASK): Declare.
+	* arc-tdep.c (arc_write_pc): Use it.
+
+2020-08-25  Shahab Vahedi  <shahab@synopsys.com>
+
+	* arc-tdep.c (arc_check_for_hardware_loop): New.
+	* arc-tdep.h (gdbarch_tdep): New field has_hw_loops.
+
+2020-08-25  Shahab Vahedi  <shahab@synopsys.com>
+
+	* arc-tdep.h: Include "gdbarch.h".
+
+2020-08-25  Shahab Vahedi  <shahab@synopsys.com>
+
+	* arch/arc.h
+	(arc_gdbarch_features): New class to stir the selection of target XML.
+	(arc_create_target_description): Use FEATURES to choose XML target.
+	(arc_lookup_target_description): Use arc_create_target_description
+	to create _new_ target descriptions or return the already created
+	ones if the FEATURES is the same.
+	* arch/arc.c: Implementation of prototypes described above.
+	* gdb/arc-tdep.h (arc_regnum enum): Add more registers.
+	(arc_gdbarch_features_init): Initialize the FEATURES struct.
+	* arc-tdep.c (*_feature_name): Make feature names consistent.
+	(arc_register_feature): A new struct to hold information about
+	registers of a particular target/feature.
+	(arc_check_tdesc_feature): Check if XML provides registers in
+	compliance with ARC_REGISTER_FEATURE structs.
+	(arc_update_acc_reg_names): Add aliases for r58 and r59.
+	(determine_*_reg_feature_set): Which feature name to look for.
+	(arc_gdbarch_features_init): Given MACH and ABFD, initialize FEATURES.
+	(mach_type_to_arc_isa): Convert from a set of binutils machine types
+	to expected ISA enums to be used in arc_gdbarch_features structs.
+	* features/Makefile (FEATURE_XMLFILES): Add new files.
+	* gdb/features/arc/v1-aux.c: New file.
+	* gdb/features/arc/v1-aux.xml: Likewise.
+	* gdb/features/arc/v1-core.c: Likewise.
+	* gdb/features/arc/v1-core.xml: Likewise.
+	* gdb/features/arc/v2-aux.c: Likewise.
+	* gdb/features/arc/v2-aux.xml: Likewise.
+	* gdb/features/arc/v2-core.c: Likewise.
+	* gdb/features/arc/v2-core.xml: Likewise.
+	* NEWS (Changes since GDB 9): Announce obsolence of old feature names.
+
+2020-08-25  Gaius Mulley  <gaiusmod2@gmail.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR m2/26372
+	* m2-exp.y (exp): Improve comment for non_empty_arglist case, add
+	an assert.  Remove single element array indexing pattern as the
+	MULTI_SUBSCRIPT support will handle this case too.
+
+2020-08-24  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* value.h (valprint_check_validity): Move declaration from
+	here...
+	* valprint.h (valprint_check_validity): ... to here.
+
+2020-08-24  Simon Marchi  <simon.marchi@efficios.com>
+
+	* debug.h: New file.
+	* debug.c (debug_prefixed_vprintf): New function.
+	* infrun.c (infrun_debug_printf_1): Use debug_prefixed_vprintf.
+	* linux-nat.c (linux_nat_debug_printf_1): Likewise.
+
+2020-08-24  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.h (infrun_debug_printf_1): New function declaration.
+	(infrun_debug_printf): New macro.
+	* infrun.c (infrun_debug_printf_1): Use infrun_debug_printf
+	throughout.
+	(infrun_debug_printf): New function.
+	* breakpoint.c (should_be_inserted): Use infrun_debug_printf.
+	(handle_jit_event): Likewise.
+
+2020-08-21  Mark Wielaard  <mark@klomp.org>
+
+	* ada-lex.l: Extend register warnings diagnostics comment for g++.
+
+2020-08-22  Simon Marchi  <simon.marchi@efficios.com>
+
+	* frame.c (enum class frame_id_status): New.
+	(struct frame_info) <this_id::p>: Change type to frame_id_status.
+	(fprintf_frame): Update.
+	(compute_frame_id): Set frame id status to "computing" on entry.
+	Set it back to "not_computed" on failure and to "computed" on
+	success.
+	(get_frame_id): Assert the frame id is not being computed.
+	(create_sentinel_frame): Use frame_id_status::COMPUTED.
+	(create_new_frame): Likewise.
+	(frame_cleanup_after_sniffer): Update assert.
+
+2020-08-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* regcache.c (pid_ptid_regcache_map): New type.
+	(target_ptid_regcache_map): Remove.
+	(target_pid_ptid_regcache_map): New type.
+	(regcaches): Change type to target_pid_ptid_regcache_map.
+	(get_thread_arch_aspace_regcache): Update.
+	(regcache_thread_ptid_changed): Update, handle pid-like ptid
+	case.
+	(regcaches_size): Update.
+	(regcache_count): Update.
+	(registers_changed_ptid_target_pid_test): New.
+	(_initialize_regcache): Register new test.
+
+2020-08-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* regcache.c (regcache_count): New.
+	(struct regcache_test_data): New.
+	(regcache_test_data_up): New.
+	(populate_regcaches_for_test): New.
+	(regcaches_test): Remove.
+	(get_thread_arch_aspace_regcache_test): New.
+	(registers_changed_ptid_all_test): New.
+	(registers_changed_ptid_target_test): New.
+	(registers_changed_ptid_target_ptid_test): New.
+	(regcache_thread_ptid_changed): Remove regcache_count lambda.
+	(_initialize_regcache): Register new tests.
+
+2020-08-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* regcache.c (test_get_thread_arch_aspace_regcache): Rename to...
+	(get_thread_arch_aspace_regcache_and_check): ... this.  Remove
+	gdbarch and aspace parameter.  Use current inferior's aspace.
+	Validate regcache's arch value.
+	(regcaches_test): Update.
+
+2020-08-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* regcache.c (regcaches_test): Call registers_changed.
+
+2020-08-20  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infrun.c (process_event_stop_test): Fix typo "breapoint".
+
+2020-08-19  Alok Kumar Sharma  <AlokKumar.Sharma@amd.com>
+
+	* amd64-tdep.c (amd64_skip_prologue): Using symbol table
+	to find the end of prologue for flang compiled binaries.
+	* arm-tdep.c (arm_skip_prologue): Likewise.
+	* i386-tdep.c (i386_skip_prologue): Likewise.
+	* producer.c (producer_is_llvm): New function.
+	(producer_parsing_tests): Added new tests for clang/flang.
+	* producer.h (producer_is_llvm): New declaration.
+
+2020-08-18  Simon Marchi  <simon.marchi@efficios.com>
+
+	* linux-nat.c (linux_nat_debug_printf): New function.
+	(linux_nat_debug_printf_1): New macro.  Use throughout the file.
+
+2020-08-18  Aaron Merey  <amerey@redhat.com>
+
+	* Makefile.in (DEBUGINFOD_CFLAGS, DEBUGINFOD_LIBS): New variables.
+	(INTERNAL_CFLAGS_BASE): Add DEBUGINFOD_CFLAGS.
+	(CLIBS): Add DEBUGINFOD_LIBS.
+
+2020-08-17  Sergei Trofimovich  <siarheit@google.com>
+
+	* ia64-linux-nat.c: Include "gdbarch.h" to declare used
+	'gdbarch_num_regs'.
+
+2020-08-17  Tom Tromey  <tromey@adacore.com>
+
+	* ada-varobj.c (ada_varobj_decode_var): Handle case where
+	ada_get_decoded_value returns NULL.
+
+2020-08-17  Tom Tromey  <tromey@adacore.com>
+
+	* python/py-inferior.c (infpy_search_memory): Use
+	gdb_py_object_from_ulongest.
+	* python/py-infevents.c (create_inferior_call_event_object)
+	(create_memory_changed_event_object): Use
+	gdb_py_object_from_ulongest.
+	* python/py-linetable.c (ltpy_entry_get_pc): Use
+	gdb_py_object_from_ulongest.
+
+2020-08-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* loc.c (class symbol_needs_eval_context): Fix indentation.
+
+2020-08-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/loc.c (dwarf2_loc_desc_get_symbol_read_needs): Use
+	bool.
+
+2020-08-17  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/26393
+	* gdbtypes.c (dump_dynamic_prop): New function.
+	(recursive_dump_type): Use dump_dynamic_prop for TYPE_CODE_RANGE.
+
+2020-08-15  Tom de Vries  <tdevries@suse.de>
+
+	PR backtrace/26390
+	* stack.c (print_frame_args): Temporarily set the selected
+	frame to FRAME while printing the frame's arguments.
+
+2020-08-14  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	PR breakpoints/26385
+	* ppc-linux-nat.c (ppc_linux_nat_target::low_prepare_to_resume):
+	Always clear watchpoint with PTRACE_SET_DEBUGREG.
+
+2020-08-14  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* ppc-linux-nat.c (ppc_linux_dreg_interface::detect)
+	(ppc_linux_nat_target::low_prepare_to_resume): Use ptrace () < 0
+	and >= to check return value instead of == -1 and != -1.
+
+2020-08-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* utils.h (class gdb_argv) <as_array_view>: New method.
+	* utils.c (gdb_argv_as_array_view_test): New.
+	(_initialize_utils): Register selftest.
+	* maint.c (maintenance_selftest): Use the new method.
+
+2020-08-13  Kamil Rytarowski  <n54@gmx.com>
+
+	* target.h (supports_dumpcore, dumpcore): New
+	function declarations.
+	* target.c (supports_dumpcore, dumpcore): New
+	functions.
+	* target-delegates.c: Rebuild.
+	* gcore.c (gcore_command): Use target_supports_dumpcore ()
+	and target_dumpcore ().
+
+2020-08-13  Aaron Merey  <amerey@redhat.com>
+
+	* debuginfod-support.c: Replace global variables with user_data.
+
+2020-08-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* maint.c (maintenance_selftest): Split args and pass array_view
+	to run_tests.
+
+2020-08-12  Luis Machado  <luis.machado@linaro.org>
+
+	* value.c (check_type_length_before_alloc): Use ULONGEST to store a
+	type's length.
+	Use %s and pulongest to print the length.
+
+2020-08-12  Pedro Alves  <palves@redhat.com>
+
+	* NEWS: Move "Multi-target debugging support" item to the
+	"Changes since GDB 9" section.
+
+2020-08-12  Pedro Alves  <palves@redhat.com>
+
+	PR gdb/26336
+	* progspace.c (program_space::remove_objfile): Invalidate the
+	frame cache.
+
+2020-08-11  Tom de Vries  <tdevries@suse.de>
+
+	* MAINTAINERS: Mark ms1 as deleted.
+
+2020-08-10  Luis Machado  <luis.machado@linaro.org>
+
+	PR gdb/26310
+
+	* aarch64-tdep.c (aarch64_analyze_prologue): Track use of SP/FP and
+	act accordingly.
+	(aarch64_analyze_prologue_test): Add more unit tests to exercise
+	movz/str/stur/stp skipping behavior.
+
+2020-08-10  Luis Machado  <luis.machado@linaro.org>
+
+	* nat/aarch64-sve-linux-sigcontext.h (SVE_PT_REGS_OFFSET): Use
+	struct user_sve_header instead of struct sve_context.
+
+2020-08-09  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* read.h (dwarf2_fetch_die_loc_sect_off,
+	dwarf2_fetch_die_loc_cu_off): Replace function pointer +
+	`void *` parameter with function_view.
+	* read.c (dwarf2_fetch_die_loc_sect_off,
+	dwarf2_fetch_die_loc_cu_off): Likewise.
+	* loc.c (get_frame_pc_for_per_cu_dwarf_call): Remove.
+	(per_cu_dwarf_call): Adjust.
+	(get_frame_address_in_block_wrapper): Remove.
+	(indirect_synthetic_pointer): Adjust.
+	(get_ax_pc): Remove.
+	(dwarf2_compile_expr_to_ax): Adjust.
+
+2020-08-08  Tom de Vries  <tdevries@suse.de>
+
+	PR build/26344
+	* arch/riscv.c (riscv_lookup_target_description): Use an explicit
+	constructor.
+	* regcache.c (get_thread_arch_aspace_regcache): Same.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c
+	(ravenscar_thread_target::set_base_thread_from_ravenscar_task):
+	New method.
+	(ravenscar_thread_target::wait): Check
+	runtime_initialized.
+	(ravenscar_thread_target::prepare_to_store)
+	(ravenscar_thread_target::stopped_by_sw_breakpoint)
+	(ravenscar_thread_target::stopped_by_hw_breakpoint)
+	(ravenscar_thread_target::stopped_by_watchpoint)
+	(ravenscar_thread_target::stopped_data_address)
+	(ravenscar_thread_target::core_of_thread): Use
+	scoped_restore_current_thread and
+	set_base_thread_from_ravenscar_task.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (update_thread_list): Set inferior_ptid.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target::wait): Call
+	update_inferior_ptid before update_thread_list.
+	(temporarily_change_regcache_ptid): New class.
+	(ravenscar_thread_target::fetch_registers)
+	(ravenscar_thread_target::store_registers)
+	(ravenscar_thread_target::prepare_to_store): Use base thread when
+	forwarding operation.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target::resume): Handle
+	"is_pid" case.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (xfer_partial, enable_btrace, add_thread):
+	New methods.
+	(ravenscar_thread_target::get_thread_base_cpu): Check m_cpu_map
+	first.
+	(ravenscar_thread_target::add_thread): Rename from
+	ravenscar_add_thread.
+	(ravenscar_thread_target::update_thread_list): Use a lambda.
+	(ravenscar_thread_target::xfer_partial): New method.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.h (ada_task_list_iterator_ftype): Now a
+	gdb::function_view.
+	(iterate_over_live_ada_tasks): Change type of argument.
+	* ada-tasks.c (iterate_over_live_ada_tasks): Change type
+	of argument.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target) <extra_thread_info>:
+	Remove.
+	(ravenscar_thread_target::extra_thread_info): Remove.
+	(ravenscar_thread_target::pid_to_str): Mention Ravenscar in result;
+	defer to target beneath for non-Ravenscar threads.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target) <get_base_cpu,
+	get_base_thread_from_ravenscar_task>: Now methods.
+	<m_cpu_map>: New member.
+	(ravenscar_thread_target::get_thread_base_cpu): Rename from
+	ravenscar_get_thread_base_cpu.  Check m_cpu_map.
+	(ravenscar_thread_target::task_is_currently_active): Update.
+	(ravenscar_thread_target::get_base_thread_from_ravenscar_task):
+	Now a method.
+	(ravenscar_thread_target::add_active_thread): Put initial thread
+	into the m_cpu_map.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target::wait): Return
+	event_ptid.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target::wait): Check
+	runtime_initialized.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target): Don't call
+	add_active_thread.
+	(ravenscar_thread_target::add_active_thread): Now public.
+	(ravenscar_inferior_created): Call add_active_thread after pushing
+	the target.
+
+2020-08-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* regcache.c (ptid_regcache_map): New type.
+	(target_ptid_regcache_map): New type.
+	(regcaches): Change type to target_ptid_regcache_map.
+	(get_thread_arch_aspace_regcache): Update to regcaches' new
+	type.
+	(regcache_thread_ptid_changed): Likewise.
+	(registers_changed_ptid): Likewise.
+	(regcaches_size): Likewise.
+	(regcaches_test): Update.
+	(regcache_thread_ptid_changed): Update.
+	* regcache.h (regcache_up): New type.
+	* gdbsupport/ptid.h (hash_ptid): New struct.
+
+2020-08-07  Simon Marchi  <simon.marchi@efficios.com>
+
+	* observable.h (thread_ptid_changed): Add parameter
+	`process_stratum_target *`.
+	* infrun.c (infrun_thread_ptid_changed): Add parameter
+	`process_stratum_target *` and use it.
+	(selftests): New namespace.
+	(infrun_thread_ptid_changed): New function.
+	(_initialize_infrun): Register selftest.
+	* regcache.c (regcache_thread_ptid_changed): Add parameter
+	`process_stratum_target *` and use it.
+	(regcache_thread_ptid_changed): New function.
+	(_initialize_regcache): Register selftest.
+	* thread.c (thread_change_ptid): Pass target to
+	thread_ptid_changed observable.
+
+2020-08-06  Caroline Tice <cmtice@google.com>
+
+	* dwarf2/read.c (struct dwo_file): Update comment on 'sections' field.
+	(struct dwp_sections): Update field comments.  Add loclists and
+	rnglists fields.
+	(struct virtual_v2_dwo_sections): Rename struct to
+	'virtual_v2_or_v5_dwo_sections'; update comments at top of struct; add
+	size & offset fields for loclists and rnglists.
+	(struct dwp_hash_table): Add a 'v5' struct field to the union section.
+	(create_debug_type_hash_table): Add 'DW_UT_split_type' to the check for
+	skipping dummy type units.
+	(create_dwp_hash_table): Update the large comment above the function to
+	discuss Version 5 DWP files as well, with references.  Update all the
+	version checks in the function to check for version 5 as well.  Add new
+	section at the end to create dwp hash table for version 5.
+	(create_dwp_v2_section): Rename function to
+	'create_dwp_v2_or_v5_section'.  Update function comment appropriately.
+	Add V5 to error message text.
+	(create_dwo_unit_in_dwp_v2): Change calls to create_dwp_v2_section
+	into calls to create_dwp_v2_or_v5_section.
+	(create_dwo_unit_in_dwp_v5): New function.
+	(lookup_dwo_unit_in_dwp): Update conditional statement to explicitly
+	check for version2; add else clause to handle version 5.
+	(open_and_init_dwo_file): Add code to check dwarf version & only call
+	create_debug_types_hash_table (with sections.types) if version is not 5;
+	else call create_debug_type_hash_table, with sections.info.
+	(dwarf2_locate_v2_dwp_sections): Update function comment to mention
+	version 5.
+	(dwarf2_locate_v5_dwp_sections): New function.
+	(open_and_init_dwp_file): Add else-if clause for version 5 to call
+	bfd_map_over_sections with dwarf2_locate_v5_dwp_sections.
+
+2020-08-06  Simon Marchi  <simon.marchi@efficios.com>
+
+	* regcache.h (class regcache): Remove friend
+	registers_changed_ptid.
+	<regcache_thread_ptid_changed>: Remove.
+	<regcaches>: Remove.
+	* regcache.c (regcache::regcaches): Rename to...
+	(regcaches): ... this.  Make static.
+	(get_thread_arch_aspace_regcache): Update.
+	(regcache::regcache_thread_ptid_changed): Rename to...
+	(regcache_thread_ptid_changed): ... this.  Update.
+	(class regcache_access): Remove.
+	(regcaches_test): Update.
+	(_initialize_regcache): Update.
+	* sparc64-tdep.c, dwarf2/index-write.c, record-btrace.c: Include
+	<forward_list>.
+
+2020-08-06  Simon Marchi  <simon.marchi@efficios.com>
+
+	* regcache.h (class regcache) <current_regcache>: Rename to...
+	<regcaches>: ... this.  Move doc here.
+	* regcache.c (regcache::current_regcache) Rename to...
+	(regcache::regcaches): ... this.  Move doc to header.
+	(get_thread_arch_aspace_regcache): Update.
+	(regcache::regcache_thread_ptid_changed): Update.
+	(registers_changed_ptid): Update.
+	(class regcache_access) <current_regcache_size>: Rename to...
+	<regcaches_size>: ... this.
+	(current_regcache_test): Rename to...
+	(regcaches_test): ... this.
+	(_initialize_regcache): Update.
+
+2020-08-06  Victor Collod  <vcollod@nvidia.com>
+
+	* amd64-tdep.c (amd64_analyze_prologue): Fix incorrect comment.
+
+2020-08-05  Kevin Buettner  <kevinb@redhat.com>
+
+	* corelow.c (core_target::build_file_mappings): Don't output
+	null pathname in warning.
+
+2020-08-05  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdb.dwarf2/clztest.exp, gdb.dwarf2/dw2-common-block.exp,
+	gdb.dwarf2/dw2-dup-frame.exp, gdb.dwarf2/dw2-reg-undefined.exp,
+	gdb.dwarf2/dw2-single-line-discriminators.exp,
+	dw2-undefined-ret-addr.exp: Pass nopie to compilation options.
+
+2020-08-05  Tom Tromey  <tromey@adacore.com>
+
+	PR rust/26197:
+	* dwarf2/read.c (alloc_rust_variant): Handle univariant case.
+	(quirk_rust_enum): Call alloc_rust_variant for univariant case.
+	Fix off-by-one and type size errors in ordinary case.
+
+2020-08-05  Tom de Vries  <tdevries@suse.de>
+
+	* gdbtypes.c (type_not_allocated, type_not_associated): Use
+	"prop->const_val () == 0" instead of "prop->const_val () != 0".
+
+2020-08-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* frame.h (frame_id_p): Return bool.
+	(frame_id_artificial_p): Return bool.
+	(frame_id_eq): Return bool.
+	(has_stack_frames): Return bool.
+	(get_selected_frame): Fix typo in comment.
+	(get_frame_pc_if_available): Return bool.
+	(get_frame_address_in_block_if_available): Return bool.
+	(get_frame_func_if_available): Return bool.
+	(read_frame_register_unsigned): Return bool.
+	(get_frame_register_bytes): Return bool.
+	(safe_frame_unwind_memory): Return bool.
+	(deprecated_frame_register_read): Return bool.
+	(frame_unwinder_is): Return bool.
+	* frame.c (struct frame_info) <prev_arch::p>: Change type to
+	bool.
+	<this_id::p>: Likewise.
+	<prev_p>: Likewise.
+	(frame_stash_add): Return bool.
+	(get_frame_id): Use bool.
+	(frame_id_build_special) Use bool.
+	(frame_id_build_unavailable_stack): Use bool.
+	(frame_id_build): Use bool.
+	(frame_id_p): Return bool, use true/false instead of 1/0.
+	(frame_id_artificial_p): Likewise.
+	(frame_id_eq): Likewise.
+	(frame_id_inner): Likewise.
+	(get_frame_func_if_available): Likewise.
+	(read_frame_register_unsigned): Likewise.
+	(deprecated_frame_register_read): Likewise.
+	(get_frame_register_bytes): Likewise.
+	(has_stack_frames): Likewise.
+	(inside_main_func): Likewise.
+	(inside_entry_func): Likewise.
+	(get_frame_pc_if_available): Likewise.
+	(get_frame_address_in_block_if_available): Likewise.
+	(frame_unwinder_is): Likewise.
+	(safe_frame_unwind_memory): Likewise.
+	(frame_unwind_arch): Likewise.
+
+2020-08-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* frame.c (frame_info) <prev_func> <p>: Rename to status, change
+	type to cached_copy_status.
+	(fprintf_frame): Adjust.
+	(get_frame_func_if_available): Adjust.
+	(frame_cleanup_after_sniffer): Adjust.
+
+2020-08-04  Mark Wielaard  <mark@klomp.org>
+
+	* MAINTAINERS (Write After Approval): Update email address.
+
+2020-08-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (TYPE_DYN_PROP_ADDR): Remove, replace uses with
+	dynamic_prop::const_val.
+
+2020-08-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (TYPE_DYN_PROP_KIND): Remove, replace uses with
+	dynamic_prop::kind.
+
+2020-08-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (TYPE_DYN_PROP_BATON): Remove.
+
+2020-08-04  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* configure.tgt: Set gdb_sim for bpf-*-* targets.
+
+2020-08-04  Weimin Pan <weimin.pan@oracle.com>
+	    Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* configure.tgt: Add entry for bpf-*-*.
+	* Makefile.in (ALL_TARGET_OBS): Add bpf-tdep.o
+	(ALLDEPFILES): Add bpf-tdep.c.
+	* bpf-tdep.c: New file.
+	* MAINTAINERS: Add bpf target and maintainer.
+	* NEWS: Mention the support for the new target.
+
+2020-08-04  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/23270
+	* dwarf2/read.c (find_partial_die): Change internal error into Dwarf
+	Error.
+
+2020-08-03  John Baldwin  <jhb@FreeBSD.org>
+
+	* syscalls/freebsd.xml: Regenerate.
+
+2020-08-03  John Baldwin  <jhb@FreeBSD.org>
+
+	* syscalls/update-freebsd.sh: Fix usage and year range.
+
+2020-08-03  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/26333
+	* dwarf2/read.c (dwarf_decode_lines_1): Ignore
+	DW_LNE_lo_user/DW_LNE_hi_user range.
+
+2020-07-30  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR ada/26318
+	* ada-lang.c (ada_modulus): Return 0 if property is not of const
+	kind.
+
+2020-07-30  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.c (set_breakpoint_condition): Do minor refactoring.
+
+2020-07-30  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.c (set_breakpoint_condition): Update the condition
+	expressions after checking that the input condition string parses
+	successfully and does not contain junk at the end.
+
+2020-07-30  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.c (set_breakpoint_condition): Update the
+	condition string after parsing the new condition successfully.
+
+2020-07-30  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* proc-api.c (_STRUCTURED_PROC): Don't define.
+	* proc-events.c: Likewise.
+	* proc-flags.c: Likewise.
+	* proc-why.c: Likewise.
+	* procfs.c: Likewise.
+
+	* Makefile.in (INTERNAL_CPPFLAGS): Add LARGEFILE_CPPFLAGS.
+	* configure, config.in: Regenerate.
+
+2020-07-30  Tom de Vries  <tdevries@suse.de>
+
+	PR build/26320
+	* ui-style.h (struct ui_file_style::color): Wrap m_value and
+	m_red/m_green/m_blue in a union.
+
+2020-07-29  Tom de Vries  <tdevries@suse.de>
+
+	PR tdep/26280
+	* s390-tdep.c (s390_displaced_step_fixup): Fix Wmaybe-uninitialized.
+
+2020-07-28  Tom Tromey  <tromey@adacore.com>
+
+	PR symtab/26270:
+	* symtab.h (find_pc_partial_function_sym): Declare.
+	* cli/cli-cmds.c (disassemble_command): Use
+	find_pc_partial_function_sym.  Check asm_demangle.
+	* blockframe.c (cache_pc_function_sym): New global.
+	(cache_pc_function_name): Remove.
+	(clear_pc_function_cache): Update.
+	(find_pc_partial_function_sym): New function, from
+	find_pc_partial_function.
+	(find_pc_partial_function): Rewrite using
+	find_pc_partial_function_sym.
+
+2020-07-28  Tom Tromey  <tromey@adacore.com>
+
+	* cli/cli-cmds.c (_initialize_cli_cmds): Rearrange "disassemble"
+	help.  Add usage.
+
+2020-07-28  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/expr.c (dwarf_expr_context::execute_stack_op)
+	<DW_OP_GNU_variable_value>: Cast to address type.
+
+2020-07-28  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.h (nbsd_nat_target::xfer_partial): New declaration.
+	* nbsd-nat.c (nbsd_nat_target::xfer_partial): New function.
+	* nbsd-tdep.c (nbsd_gdbarch_data_handle, struct nbsd_gdbarch_data)
+	(init_nbsd_gdbarch_data, get_nbsd_gdbarch_data)
+	(nbsd_get_siginfo_type): New.
+	(nbsd_init_abi): Install gdbarch "get_siginfo_type" method.
+	(_initialize_nbsd_tdep): New.
+
+2020-07-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/26301
+	* configure: Regenerated.
+
+2020-07-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/26301
+	* configure: Regenerated.
+
+2020-07-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-frame.c: Remove 'user-regs.h' include.
+	(frapy_read_register): Rewrite to make use of
+	gdbpy_parse_register_id.
+	* python/py-registers.c (gdbpy_parse_register_id): New function,
+	moved here from python/py-unwind.c.  Updated the return type, and
+	also accepts register descriptor objects.
+	* python/py-unwind.c: Remove 'user-regs.h' include.
+	(pyuw_parse_register_id): Moved to python/py-registers.c.
+	(unwind_infopy_add_saved_register): Update to use
+	gdbpy_parse_register_id.
+	(pending_framepy_read_register): Likewise.
+	* python/python-internal.h (gdbpy_parse_register_id): Declare.
+
+2020-07-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-registers.c: Add 'user-regs.h' include.
+	(register_descriptor_iter_find): New function.
+	(register_descriptor_iterator_object_methods): New static global
+	methods array.
+	(register_descriptor_iterator_object_type): Add pointer to methods
+	array.
+
+2020-07-27  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.h: Include <osreldate.h>.  Define USE_SIGTRAP_SIGINFO
+	for all architectures on FreeBSD 11.3 and later.
+
+2020-07-27  Tom Tromey  <tromey@adacore.com>
+
+	* gcore.h (load_corefile): Don't declare.
+
+2020-07-27  Tom de Vries  <tdevries@suse.de>
+
+	* configure.ac: Fix sys/sockets.h -> sys/socket.h typo.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+
+2020-07-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* configure.ac (AC_CHECK_HEADERS): Check for sys/socket.h and
+	ws2tcpip.h.  When checking whether socklen_t type is defined, use
+	ws2tcpip.h if it is available and sys/socket.h isn't.
+	* configure: Regenerate.
+	* config.in: Regenerate.
+
+2020-07-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR fortran/23051
+	PR fortran/26139
+	* valops.c (value_ind): Pass address to
+	readjust_indirect_value_type.
+	* value.c (readjust_indirect_value_type): Make parameter
+	non-const, and add extra address parameter.  Resolve original type
+	before using it.
+	* value.h (readjust_indirect_value_type): Update function
+	signature and comment.
+
+2020-07-25  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/26243
+	* dwarf2/read.c (lnp_state_machine::record_line): Ignore zero line
+	entries.
+
+2020-07-24  Aaron Merey  <amerey@redhat.com>
+
+	* Makefile.in: Replace LIBDEBUGINFOD with DEBUGINFOD_LIBS.
+	* configure: Rebuild.
+
+2020-07-23  Kevin Buettner  <kevinb@redhat.com>
+
+	PR corefiles/26294
+	* corelow.c (_initialize_corelow): Add period to help text
+	for "maintenance print core-file-backed-mappings".
+
+2020-07-23  Pedro Alves  <pedro@palves.net>
+
+	* frame-unwind.c (frame_unwind_try_unwinder): On exception, don't
+	touch THIS_CACHE/THIS_FRAME if the frame cache was cleared
+	meanwhile.
+	* frame.c (frame_cache_generation, get_frame_cache_generation):
+	New.
+	(reinit_frame_cache): Increment FRAME_CACHE_GENERATION.
+	(get_prev_frame_if_no_cycle): On exception, don't touch
+	PREV_FRAME/THIS_FRAME if the frame cache was cleared meanwhile.
+	* frame.h (get_frame_cache_generation): Declare.
+
+2020-07-23  Tom de Vries  <tdevries@suse.de>
+
+	PR tui/26282
+	* tui/tui-winsource.h (struct tui_source_windows::tui_source_windows):
+	New default constructor.
+
+2020-07-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* disasm.c (do_mixed_source_and_assembly_deprecated): Don't
+	exclude non-statement entries.
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	* NEWS (New commands): Mention new command
+	"maintenance print core-file-backed-mappings".
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	* corelow.c (gdbcmd.h): Include.
+	(core_target::info_proc_mappings): New method.
+	(get_current_core_target): New function.
+	(maintenance_print_core_file_backed_mappings): New function.
+	(_initialize_corelow): Add core-file-backed-mappings to
+	"maint print" commands.
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	* linux-tdep.c (dump_note_entry_p): New function.
+	(linux_dump_mapping_p_ftype): New typedef.
+	(linux_find_memory_regions_full): Add new parameter,
+	should_dump_mapping_p.
+	(linux_find_memory_regions): Adjust call to
+	linux_find_memory_regions_full.
+	(linux_make_mappings_core_file_notes): Use dump_note_entry_p in
+	call to linux_find_memory_regions_full.
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	* corelow.c (solist.h, unordered_map): Include.
+	(class core_target): Add field m_core_file_mappings and
+	method build_file_mappings.
+	(core_target::core_target): Call build_file_mappings.
+	(core_target::~core_target): Free memory associated with
+	m_core_file_mappings.
+	(core_target::build_file_mappings): New method.
+	(core_target::xfer_partial): Use m_core_file_mappings
+	for memory transfers.
+	* linux-tdep.c (linux_read_core_file_mappings): New
+	function.
+	(linux_core_info_proc_mappings): Rewrite to use
+	linux_read_core_file_mappings.
+	(linux_init_abi): Register linux_read_core_file_mappings.
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	* arch-utils.c (default_read_core_file_mappings): New function.
+	* arch-utils.c (default_read_core_file_mappings): Declare.
+	* gdbarch.sh (read_core_file_mappings): New gdbarch method.
+	* gdbarch.h, gdbarch.c: Regenerate.
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	PR corefiles/25631
+	* corelow.c (core_target:xfer_partial):  Revise
+	TARGET_OBJECT_MEMORY case to consider non-SEC_HAS_CONTENTS
+	case after first checking the stratum beneath the core
+	target.
+	(has_all_memory): Return true.
+	* target.c (raw_memory_xfer_partial): Revise comment
+	regarding use of has_all_memory.
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	* exec.h (section_table_xfer_memory): Revise declaration,
+	replacing section name parameter with an optional callback
+	predicate.
+	* exec.c (section_table_xfer_memory): Likewise.
+	* bfd-target.c, exec.c, target.c, corelow.c: Adjust all callers
+	of section_table_xfer_memory.
+
+2020-07-22  Tom Tromey  <tromey@adacore.com>
+
+	* mi/mi-cmd-stack.c (list_args_or_locals): Use
+	lookup_symbol_search_name.
+
+2020-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-registers.c (gdbpy_register_object_data_init): Remove
+	redundant local variable.
+	(gdbpy_get_register_descriptor): Extract descriptor vector as a
+	reference, not pointer, update code accordingly.
+
+2020-07-22  Simon Marchi  <simon.marchi@polymtl.ca>
+	    Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* objfiles.h (struct objfile) <skip_jit_symbol_lookup>: New field.
+	* jit.c (jit_breakpoint_re_set_internal): Use the
+	`skip_jit_symbol_lookup` field.
+
+2020-07-22  Simon Marchi  <simon.marchi@polymtl.ca>
+	    Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* jit.c (jit_read_descriptor): Define the descriptor address once,
+	use twice.
+	(jit_breakpoint_deleted): Move the declaration of the loop variable
+	`iter` into the loop header.
+	(jit_breakpoint_re_set_internal): Move the declaration of the local
+	variable `objf_data` to the first point of definition.
+	(jit_event_handler): Move the declaration of local variables
+	`code_entry`, `entry_addr`, and `objf` to their first point of use.
+	Rename `objf` to `jited`.
+
+2020-07-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.h (struct jiter_objfile_data) <jiter_objfile_data, objfile>:
+	Remove.
+	* jit.c (get_jiter_objfile_data): Update.
+
+2020-07-22  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+	    Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (struct jit_program_space_data): Remove.
+	(jit_program_space_key): Remove.
+	(jiter_objfile_data::~jiter_objfile_data): Remove program space
+	stuff.
+	(get_jit_program_space_data): Remove.
+	(jit_breakpoint_deleted): Iterate on all of the program space's
+	objfiles.
+	(jit_inferior_init): Likewise.
+	(jit_breakpoint_re_set_internal): Likewise.  Also change return
+	type to void.
+	(jit_breakpoint_re_set): Pass current_program_space to
+	jit_breakpoint_re_set_internal.
+
+2020-07-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.h (struct jiter_objfile_data) <cached_code_address,
+	jit_breakpoint>: Move to here from ...
+	* jit.c (jit_program_space_data): ... here.
+	(jiter_objfile_data::~jiter_objfile_data): Update.
+	(jit_breakpoint_deleted): Update.
+	(jit_breakpoint_re_set_internal): Update.
+
+2020-07-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (jiter_objfile_data::~jiter_objfile_data): Remove some
+	checks.
+	(jit_read_descriptor): Remove NULL check.
+	(jit_event_handler): Add an assertion.
+
+2020-07-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.h (struct jit_objfile_data):  Split into...
+	(struct jiter_objfile_data): ... this ...
+	(struct jited_objfile_data): ... and this.
+	* objfiles.h (struct objfile) <jit_data>: Remove.
+	<jiter_data, jited_data>: New fields.
+	* jit.c (jit_objfile_data::~jit_objfile_data): Rename to ...
+	(jiter_objfile_data::~jiter_objfile_data): ... this.
+	(get_jit_objfile_data): Rename to ...
+	(get_jiter_objfile_data): ... this.
+	(add_objfile_entry): Update.
+	(jit_read_descriptor): Use get_jiter_objfile_data.
+	(jit_find_objf_with_entry_addr): Use objfile's jited_data field.
+	(jit_breakpoint_re_set_internal): Use get_jiter_objfile_data.
+	(jit_inferior_exit_hook): Use objfile's jited_data field.
+
+2020-07-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.h: Forward-declare `struct minimal_symbol`.
+	(struct jit_objfile_data): Migrate to here from jit.c; also add a
+	constructor, destructor, and an objfile* field.
+	* jit.c (jit_objfile_data): Remove.
+	(struct jit_objfile_data): Migrate from here to jit.h.
+	(jit_objfile_data::~jit_objfile_data): New destructor
+	implementation with code moved from free_objfile_data.
+	(free_objfile_data): Delete.
+	(get_jit_objfile_data): Update to use the jit_data field of objfile.
+	(jit_find_objf_with_entry_addr): Ditto.
+	(jit_inferior_exit_hook): Ditto.
+	(_initialize_jit): Remove the call to
+	register_objfile_data_with_cleanup.
+	* objfiles.h (struct objfile) <jit_data>: New field.
+
+2020-07-22  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* jit.h: Forward-declare `struct objfile`.
+	(jit_event_handler): Add a second parameter, the JITer objfile.
+	* jit.c (jit_read_descriptor): Change the signature to take the
+	JITer objfile as an argument instead of the jit_program_space_data.
+	(jit_inferior_init): Update the call to jit_read_descriptor.
+	(jit_event_handler): Use the new JITer objfile argument when calling
+	jit_read_descriptor.
+	* breakpoint.c (handle_jit_event): Update the call to
+	jit_event_handler to pass the JITer objfile.
+
+2020-07-21  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh (handle_segmentation_fault): Remove method.
+	* infrun.c (handle_segmentation_fault): Remove.
+	(print_signal_received_reason): Remove call to
+	handle_segmentation_fault.
+
+2020-07-21  John Baldwin  <jhb@FreeBSD.org>
+
+	* sparc64-linux-tdep.c (sparc64_linux_handle_segmentation_fault):
+	Rename to sparc64_linux_report_signal_info and add siggnal
+	argument.
+	(sparc64_linux_init_abi): Use sparc64_linux_report_signal_info
+	instead of sparc64_linux_handle_segmentation_fault.
+
+2020-07-21  John Baldwin  <jhb@FreeBSD.org>
+
+	* amd64-linux-tdep.c (amd64_linux_init_abi_common): Use
+	i386_linux_report_signal_info instead of
+	i386_linux_handle_segmentation_fault.
+	* i386-linux-tdep.c (i386_linux_handle_segmentation_fault): Rename
+	to i386_linux_report_signal_info and add siggnal argument.
+	(i386_linux_init_abi): Use i386_linux_report_signal_info instead
+	of i386_linux_handle_segmentation_fault.
+	* i386-linux-tdep.h (i386_linux_handle_segmentation_fault): Rename
+	to i386_linux_report_signal_info and add siggnal argument.
+
+2020-07-21  John Baldwin  <jhb@FreeBSD.org>
+
+	* corelow.c (core_target_open): Invoke gdbarch report_signal_info
+	hook if present.
+
+2020-07-21  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh (report_signal_info): New method.
+	* infrun.c (print_signal_received_reason): Invoke gdbarch
+	report_signal_info hook if present.
+
+2020-07-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-registers.c : Add 'unordered_map' include.
+	(gdbpy_new_reggroup): Renamed to...
+	(gdbpy_get_reggroup): ...this.  Update to only create register
+	group descriptors when needed.
+	(gdbpy_reggroup_iter_next): Update.
+
+2020-07-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-registers.c (gdbpy_register_object_data): New static
+	global.
+	(gdbpy_register_object_data_init): New function.
+	(gdbpy_new_register_descriptor): Renamed to...
+	(gdbpy_get_register_descriptor): ...this, and update to reuse
+	existing register descriptors where possible.
+	(gdbpy_register_descriptor_iter_next): Update.
+	(gdbpy_initialize_registers): Register new gdbarch data.
+
+2020-07-21  Simon Marchi  <simon.marchi@efficios.com>
+
+	* linux-nat.c (stopped_pids): Make static.
+
+2020-07-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR ada/26235
+	* gdbtypes.c (ada_discrete_type_low_bound,
+	ada_discrete_type_high_bound): Handle undefined bounds.
+
+2020-07-21  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.h (nbsd_nat_target::supports_multi_process): New
+	declaration.
+	* nbsd-nat.c (nbsd_nat_target::supports_multi_process): New
+	function.
+
+2020-07-20  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-tdep.c (fbsd_skip_solib_resolver): New function.
+	(fbsd_init_abi): Install gdbarch "skip_solib_resolver" method.
+	* fbsd-tdep.h (fbsd_skip_solib_resolver): New prototype.
+	* mips-fbsd-tdep.c (mips_fbsd_skip_solib_resolver): New function.
+	(mips_fbsd_init_abi): Install gdbarch "skip_solib_resolver"
+	method.
+
+2020-07-20 Ludovic CourtÃ¨s  <ludo@gnu.org>
+
+	* guile/scm-math.c (vlscm_integer_fits_p): Use 'uintmax_t'
+	and 'intmax_t' instead of 'scm_t_uintmax' and 'scm_t_intmax',
+	which are deprecated in Guile 3.0.
+	* configure.ac (try_guile_versions): Add "guile-3.0".
+	* configure (try_guile_versions): Regenerate.
+	* NEWS: Update entry.
+
+2020-07-20  Ludovic CourtÃ¨s  <ludo@gnu.org>
+	    Doug Evans  <dje@google.com>
+
+	PR gdb/21104
+	* guile/scm-ports.c (USING_GUILE_BEFORE_2_2): New macro.
+	(ioscm_memory_port)[read_buf_size, write_buf_size]: Wrap in #if
+	USING_GUILE_BEFORE_2_2.
+	(stdio_port_desc, memory_port_desc) [!USING_GUILE_BEFORE_2_2]:
+	Change type to 'scm_t_port_type *'.
+	(natural_buffer_size) [!USING_GUILE_BEFORE_2_2]: New variable.
+	(ioscm_open_port) [USING_GUILE_BEFORE_2_2]: Add 'stream'
+	parameter and honor it.  Update callers.
+	(ioscm_open_port) [!USING_GUILE_BEFORE_2_2]: New function.
+	(ioscm_read_from_port, ioscm_write) [!USING_GUILE_BEFORE_2_2]: New
+	functions.
+	(ioscm_fill_input, ioscm_input_waiting, ioscm_flush): Wrap in #if
+	USING_GUILE_BEFORE_2_2.
+	(ioscm_init_gdb_stdio_port) [!USING_GUILE_BEFORE_2_2]: Use
+	'ioscm_read_from_port'.  Call 'scm_set_port_read_wait_fd'.
+	(ioscm_init_stdio_buffers) [!USING_GUILE_BEFORE_2_2]: New function.
+	(gdbscm_stdio_port_p) [!USING_GUILE_BEFORE_2_2]: Use 'SCM_PORTP'
+	and 'SCM_PORT_TYPE'.
+	(gdbscm_memory_port_end_input, gdbscm_memory_port_seek)
+	(ioscm_reinit_memory_port): Wrap in #if USING_GUILE_BEFORE_2_2.
+	(gdbscm_memory_port_read, gdbscm_memory_port_write)
+	(gdbscm_memory_port_seek, gdbscm_memory_port_close)
+	[!USING_GUILE_BEFORE_2_2]: New functions.
+	(gdbscm_memory_port_print): Remove use of 'SCM_PTOB_NAME'.
+	(ioscm_init_memory_port_type) [!USING_GUILE_BEFORE_2_2]: Use
+	'gdbscm_memory_port_read'.
+	Wrap 'scm_set_port_end_input', 'scm_set_port_flush', and
+	'scm_set_port_free' calls in #if USING_GUILE_BEFORE_2_2.
+	(gdbscm_get_natural_buffer_sizes) [!USING_GUILE_BEFORE_2_2]: New
+	function.
+	(ioscm_init_memory_port): Remove.
+	(ioscm_init_memory_port_stream): New function
+	(ioscm_init_memory_port_buffers) [USING_GUILE_BEFORE_2_2]: New
+	function.
+	(gdbscm_memory_port_read_buffer_size) [!USING_GUILE_BEFORE_2_2]:
+	Return scm_from_uint (0).
+	(gdbscm_set_memory_port_read_buffer_size_x)
+	[!USING_GUILE_BEFORE_2_2]: Call 'scm_setvbuf'.
+	(gdbscm_memory_port_write_buffer_size) [!USING_GUILE_BEFORE_2_2]:
+	Return scm_from_uint (0).
+	(gdbscm_set_memory_port_write_buffer_size_x)
+	[!USING_GUILE_BEFORE_2_2]: Call 'scm_setvbuf'.
+	* configure.ac (try_guile_versions): Add "guile-2.2".
+	* configure: Regenerate.
+	* NEWS: Add entry.
+
+2020-07-18  Tom Tromey  <tom@tromey.com>
+
+	* linux-nat.c (linux_multi_process): Remove.
+	(linux_nat_target::supports_multi_process): Return true.
+
+2020-07-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arch/riscv.c (riscv_tdesc_cache): Change map type.
+	(riscv_lookup_target_description): Return pointer out of
+	unique_ptr.
+	* target-descriptions.c (allocate_target_description): Add
+	comment.
+	(target_desc_deleter::operator()): Likewise.
+	* target-descriptions.h (struct target_desc_deleter): Moved to
+	gdbsupport/tdesc.h.
+	(target_desc_up): Likewise.
+
+2020-07-17  Tom Tromey  <tromey@adacore.com>
+
+	* linux-nat.c (linux_nat_target::supports_non_stop)
+	(linux_nat_target::always_non_stop_p): Use "true".
+	(linux_nat_target::supports_disable_randomization): Use "true" and
+	"false".
+
+2020-07-16  Caroline Tice  <cmtice@google.com>
+
+	* dwarf2/read.c (RNGLIST_HEADER_SIZE32) New constant definition.
+	(RNGLIST_HEADER_SIZE64): New constant definition.
+	(struct dwop_section_names): Add rnglists_dwo.
+	(dwop_section_names): Add .debug_rnglists.dwo, .zdebug_rnglists.dwo.
+	(struct loclist_header): Rename to 'loclists_rnglists_header'.
+	(struct dwo_sections): Add rnglists field.
+	(read_attribut_reprocess): Add tag parameter.
+	(dwarf2_ranges_read): Add tag parameter & remove forward function decl.
+	(cu_debug_rnglists_section): New function (decl & definition).
+	(dwarf2_locate_dwo_sections): Add code to read rnglists_dwo section.
+	(dwarf2_rnglists_process): Add a dwarf_tag parameter, for the kind of
+	die whose range is being checked; get rnglist section from
+	cu_debug_rnglists_section, to get from either objfile or dwo file as
+	appropriate.  Add cases for DW_RLE_base_addressx,
+	DW_RLE_startx_length, DW_RLE_startx_endx.  Also, update to only add
+	the base address to DW_RLE_offset_pairs (not to all ranges), moving
+	test inside if-condition and updating complaint message.
+	(dwarf2_ranges_process): Add dwarf tag parameter and pass it to
+	dwarf2_rnglists_process.
+	(dwarf2_ranges_read): Add dwarf tag parameter and pass it to
+	dwarf2_ranges_process.
+	(dwarf2_get_pc_bounds): Check for DW_FORM_rnglistx when setting
+	need_ranges_base and update comment appropriately.  Also pass die tag
+	to dwarf2_ranges_read.
+	(dwarf2_record_block_ranges): Check for DW_FORM_rnglistx when setting
+	need_ranges_base and update comment appropriately.  Also pass die tag
+	to dwarf2_ranges_process.
+	(read_full_die_1): Add code to read DW_AT_rnglists_base and assign to
+	cu->ranges_base.  Also pass die tag to read_attribute_reprocess.
+	(partial_die_info::read): Check for DW_FORM_rnglistx when setting
+	need_ranges_base and update comment appropriately.  Also pass die tag
+	to read_attribute_reprocess and dwarf2_ranges_read.
+	(read_loclist_header): Rename function to read_loclists_rnglists_header,
+	and update function comment appropriately.
+	(read_loclist_index): Call read_loclists_rnglists_header instead of
+	read_loclist_header.
+	(read_rnglist_index): New function.
+	(read_attribute_reprocess):  Add tag parameter. Add code for
+	DW_FORM_rnglistx, passing tag to read_rnglist_index.
+	(read_attribute_value): Mark DW_FORM_rnglistx with need_reprocess.
+
+2020-07-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-typeprint.c (f_type_print_base): Allow for dynamic types not
+	being resolved.
+
+2020-07-14  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arch-utils.c (show_architecture): Update formatting of messages.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <bounds>: Handle array and string
+	types.
+	* ada-lang.c (assign_aggregate): Use type::bounds on
+	array/string type.
+	* c-typeprint.c (c_type_print_varspec_suffix): Likewise.
+	* c-varobj.c (c_number_of_children): Likewise.
+	(c_describe_child): Likewise.
+	* eval.c (evaluate_subexp_for_sizeof): Likewise.
+	* f-typeprint.c (f_type_print_varspec_suffix): Likewise.
+	(f_type_print_base): Likewise.
+	* f-valprint.c (f77_array_offset_tbl): Likewise.
+	(f77_get_upperbound): Likewise.
+	(f77_print_array_1): Likewise.
+	* guile/scm-type.c (gdbscm_type_range): Likewise.
+	* m2-typeprint.c (m2_array): Likewise.
+	(m2_is_long_set_of_type): Likewise.
+	* m2-valprint.c (get_long_set_bounds): Likewise.
+	* p-typeprint.c (pascal_type_print_varspec_prefix): Likewise.
+	* python/py-type.c (typy_range): Likewise.
+	* rust-lang.c (rust_internal_print_type): Likewise.
+	* type-stack.c (type_stack::follow_types): Likewise.
+	* valarith.c (value_subscripted_rvalue): Likewise.
+	* valops.c (value_cast): Likewise.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (TYPE_ARRAY_BIT_STRIDE): Remove.  Update all
+	callers to use the equivalent accessor methods.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct range_bounds) <bit_stride>: New method.
+	(struct type) <bit_stride>: New method.
+	(TYPE_BIT_STRIDE): Remove.
+	* gdbtypes.c (update_static_array_size): Use type::bit_stride.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_ARRAY_LOWER_BOUND_VALUE,
+	TYPE_ARRAY_UPPER_BOUND_VALUE): Remove.  Update all
+	callers to use the equivalent accessor methods instead.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED,
+	TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED): Remove.  Update all
+	callers to use the equivalent accessor methods instead.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_LOW_BOUND_KIND,
+	TYPE_HIGH_BOUND_KIND): Remove.  Update all callers
+	to use dynamic_prop::kind.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_LOW_BOUND_UNDEFINED,
+	TYPE_HIGH_BOUND_UNDEFINED): Remove.  Update all callers
+	to get the bound property's kind and check against
+	PROP_UNDEFINED.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_LOW_BOUND, TYPE_HIGH_BOUND): Remove.  Update
+	all callers to use type::range_bounds followed by
+	dynamic_prop::{low,high}.
+
+2020-07-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (struct dynamic_prop) <kind, set_undefined,
+	const_val, set_const_val, baton, set_locexpr, set_loclist,
+	set_addr_offset, variant_parts, set_variant_parts,
+	original_type, set_original_type>: New methods.
+	<kind>: Rename to...
+	<m_kind>: ... this.  Update all users to use the new methods
+	instead.
+	<data>: Rename to...
+	<m_data>: ... this.  Update all users to use the new methods
+	instead.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.c (get_discrete_bounds): Return failure if
+	the range type's bounds are not both defined and constant
+	values.
+	(get_array_bounds): Update comment.  Remove undefined bound check.
+
+2020-07-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (TYPE_RANGE_DATA): Remove.  Update callers to use
+	the type::bounds method directly.
+
+2020-07-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <bounds, set_bounds>: New methods.
+	(TYPE_RANGE_DATA): Use type::bounds.  Change all uses that
+	are used to set the range type's bounds to use set_bounds.
+
+2020-07-11  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* exec.c (_initialize_exec): Update exec-file-mismatch help.
+
+2020-07-10  Pedro Alves  <pedro@palves.net>
+
+	* gdbthread.h (inferior_ref): Define.
+	(scoped_restore_current_thread) <m_thread>: Now a thread_info_ref.
+	(scoped_restore_current_thread) <m_inf>: Now an inferior_ref.
+	* thread.c
+	(scoped_restore_current_thread::restore):
+	Adjust to gdb::ref_ptr.
+	(scoped_restore_current_thread::~scoped_restore_current_thread):
+	Remove manual decref handling.
+	(scoped_restore_current_thread::scoped_restore_current_thread):
+	Adjust to use
+	inferior_ref::new_reference/thread_info_ref::new_reference.
+	Incref the thread before calling get_frame_id instead of after.
+	Let TARGET_CLOSE_ERROR propagate.
+
+2020-07-10  Pedro Alves  <pedro@palves.net>
+
+	* frame-tailcall.c (dwarf2_tailcall_sniffer_first): Only swallow
+	NO_ENTRY_VALUE_ERROR / MEMORY_ERROR / OPTIMIZED_OUT_ERROR /
+	NOT_AVAILABLE_ERROR.
+	* value.c (value_optimized_out): Only swallow MEMORY_ERROR /
+	OPTIMIZED_OUT_ERROR / NOT_AVAILABLE_ERROR.
+
+2020-07-10  Simon Marchi  <simon.marchi@polymtl.ca>
+	    Pedro Alves  <pedro@palves.net>
+
+	PR gdb/26199
+	* infrun.c (threads_are_resumed_pending_p): Delete.
+	(do_target_wait): Remove threads_are_executing and
+	threads_are_resumed_pending_p checks from the inferior_matches
+	lambda.  Update comments.
+
+2020-07-10  Pedro Alves  <pedro@palves.net>
+
+	PR gdb/26199
+	* infrun.c (handle_no_resumed): Transfer terminal to inferior with
+	executing threads.
+
+2020-07-10  Pedro Alves  <pedro@palves.net>
+
+	PR gdb/26199
+	* infrun.c (handle_no_resumed): Handle multiple targets.
+
+2020-07-10  Pedro Alves  <pedro@palves.net>
+
+	PR gdb/26199
+	* infrun.c (prepare_to_wait): Check target_can_async_p instead of
+	target_is_async_p.
+
+2020-07-10  Pedro Alves  <pedro@palves.net>
+
+	PR gdb/26199
+	* target.c (target_pass_ctrlc): Look at the inferior's non-exited
+	threads, not all threads.
+
+2020-07-10  Pedro Alves  <pedro@palves.net>
+
+	PR gdb/26199
+	* remote.c (remote_target::open_1): Pass remote target pointer as
+	data to create_async_event_handler.
+	(remote_async_inferior_event_handler): Mark async event handler
+	before returning if the remote target still has either pending
+	events or unacknowledged notifications.
+
+2020-07-10  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.h (fbsd_nat_target::supports_multi_process): New
+	declaration.
+	* fbsd-nat.c (fbsd_nat_target::supports_multi_process): New
+	function.
+
+2020-07-09  John Baldwin  <jhb@FreeBSD.org>
+
+	* inf-ptrace.c (inf_ptrace_target::wait): Don't compare against
+	inferior_ptid.
+
+2020-07-09  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-tdep.c (fbsd_print_auxv_entry): Handle AT_FREEBSD_ARGC,
+	AT_FREEBSD_ARGV, AT_FREEBSD_ENVC, AT_FREEBSD_ENVV,
+	AT_FREEBSD_PS_STRINGS.
+
+2020-07-08  Hannes Domani  <ssbssa@yahoo.de>
+
+	* auto-load.c (auto_load_objfile_script_1): Convert drive part
+	of debugfile path on Windows.
+
+2020-07-08  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.c (fbsd_nat_target::find_memory_regions): Rename 'obfd'
+	argument to 'data'.
+
+2020-07-08  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_exception_message_1): Use read_memory.
+
+2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR python/22748
+	* dwarf2/frame-tailcall.c (dwarf2_tailcall_sniffer_first): Remove
+	special handling for inline frames.
+	* findvar.c (value_of_register_lazy): Skip inline frames when
+	creating lazy register values.
+	* frame.c (frame_id_computed_p): Delete definition.
+	* frame.h (frame_id_computed_p): Delete declaration.
+
+2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention additions to Python API.
+	* python/py-arch.c (archpy_register_groups): New function.
+	(arch_object_methods): Add 'register_groups' method.
+	* python/py-registers.c (reggroup_iterator_object): New struct.
+	(reggroup_object): New struct.
+	(gdbpy_new_reggroup): New function.
+	(gdbpy_reggroup_to_string): New function.
+	(gdbpy_reggroup_name): New function.
+	(gdbpy_reggroup_iter): New function.
+	(gdbpy_reggroup_iter_next): New function.
+	(gdbpy_new_reggroup_iterator): New function
+	(gdbpy_initialize_registers): Register new types.
+	(reggroup_iterator_object_type): Define new Python type.
+	(gdbpy_reggroup_getset): New static global.
+	(reggroup_object_type): Define new Python type.
+	* python/python-internal.h
+
+2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* Makefile.in (SUBDIR_PYTHON_SRCS): Add py-registers.c
+	* python/py-arch.c (archpy_registers): New function.
+	(arch_object_methods): Add 'registers' method.
+	* python/py-registers.c: New file.
+	* python/python-internal.h
+	(gdbpy_new_register_descriptor_iterator): Declare.
+	(gdbpy_initialize_registers): Declare.
+	* python/python.c (do_start_initialization): Call
+	gdbpy_initialize_registers.
+	* NEWS: Mention additions to the Python API.
+
+2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention new Python API method.
+	* python/py-unwind.c (pending_framepy_architecture): New function.
+	(pending_frame_object_methods): Add architecture method.
+
+2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh (deprecated_set_gdbarch_data): Delete.
+	(gdbarch_data): Use internal_error for the case where
+	deprecated_set_gdbarch_data was originally needed.
+	* ia64-libunwind-tdep.c (libunwind_descr_init): Update parameters,
+	and use passed in obstack.
+	(libunwind_frame_set_descr): Should no longer get back NULL from
+	gdbarch_data.
+	(_initialize_libunwind_frame): Register as a pre-init gdbarch data
+	type.
+	* user-regs.c (user_regs_init): Update parameters, and use passed
+	in obstack.
+	(user_reg_add): Should no longer get back NULL from gdbarch_data.
+	(_initialize_user_regs): Register as a pre-init gdbarch data type.
+
+2020-07-06  Tom de Vries  <tdevries@suse.de>
+
+	* buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Handle
+	End-Of-Sequence in lte_is_less_than.
+	* symtab.c (find_pc_sect_line): Revert change from commit 3d92a3e313
+	"gdb: Don't reorder line table entries too much when sorting".
+
+2020-07-06  Tom de Vries  <tdevries@suse.de>
+
+	PR tui/26205
+	* tui/tui-win.c (tui_partial_win_by_name): Don't test for NULL name.
+
+2020-07-05  Tom de Vries  <tdevries@suse.de>
+
+	PR build/26187
+	* inferior.h (struct infcall_suspend_state_deleter): If available, use
+	std::uncaught_exceptions instead of deprecated
+	std::uncaught_exception.
+
+2020-07-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* macroexp.h (macro_stringify): Return
+	gdb::unique_xmalloc_ptr<char>.
+	* macroexp.c (macro_stringify): Likewise.
+	* macrotab.c (fixup_definition): Update.
+
+2020-07-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* c-exp.y (scan_macro_expansion): Don't free `expansion`.
+	(lex_one_token): Update.
+	* macroexp.c (struct macro_buffer) <release>: Return
+	gdb::unique_xmalloc_ptr<char>.
+	(macro_stringify): Update.
+	(macro_expand): Update.
+	(macro_expand_next): Return gdb::unique_xmalloc_ptr<char>.
+	* macroexp.h (macro_expand_next): Likewise.
+
+2020-07-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	* macroexp.h (macro_lookup_ftype): Remove.
+	(macro_expand, macro_expand_once, macro_expand_next): Remove
+	lookup function parameters, add scope parameter.
+	* macroexp.c (scan, substitute_args, expand, maybe_expand,
+	macro_expand, macro_expand_once, macro_expand_next): Likewise.
+	* macroscope.h (standard_macro_lookup): Change parameter type
+	to macro_scope.
+	* macroscope.c (standard_macro_lookup): Likewise.
+	* c-exp.y (lex_one_token): Update.
+	* macrocmd.c (macro_expand_command): Likewise.
+	(macro_expand_once_command): Likewise.
+
+2020-07-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* inf-loop.c (inferior_event_handler): Remove client_data param.
+	* inf-loop.h (inferior_event_handler): Likewise.
+	* infcmd.c (step_1): Adjust.
+	* infrun.c (proceed): Adjust.
+	(fetch_inferior_event): Remove client_data param.
+	(infrun_async_inferior_event_handler): Adjust.
+	* infrun.h (fetch_inferior_event): Remove `void *` param.
+	* linux-nat.c (handle_target_event): Adjust.
+	* record-btrace.c (record_btrace_handle_async_inferior_event):
+	Adjust.
+	* record-full.c (record_full_async_inferior_event_handler):
+	Adjust.
+	* remote.c (remote_async_inferior_event_handler): Adjust.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (struct tui_win_info) <name>: Now pure virtual.
+	* tui/tui-stack.h (struct tui_locator_window) <name>: New method.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (tui_win_info::refresh_window): Move from
+	tui_gen_win_info.
+	(tui_win_info::make_window): Merge with
+	tui_gen_win_info::make_window.
+	(tui_win_info::make_visible): Move from tui_gen_win_info.
+	* tui/tui-win.c (tui_win_info::max_width): Move from
+	tui_gen_win_info.
+	* tui/tui-layout.h (class tui_layout_window) <m_window>: Change
+	type.
+	<window_factory>: Likewise.
+	* tui/tui-layout.c (tui_win_info::resize): Move from
+	tui_gen_win_info.
+	(make_standard_window): Change return type.
+	(get_locator_window, tui_get_window_by_name): Likewise.
+	(tui_layout_window::apply): Remove a cast.
+	* tui/tui-data.h (MIN_WIN_HEIGHT): Move earlier.
+	(struct tui_win_info): Merge with tui_gen_win_info.
+	(struct tui_gen_win_info): Remove.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.h (struct tui_locator_window): Derive from
+	tui_win_info.
+	<do_scroll_horizontal, do_scroll_vertical>: New methods.
+	<can_box>: New method.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.h (struct tui_locator_window): Remove body.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::display_registers_from)
+	(tui_data_window::display_registers_from)
+	(tui_data_window::first_data_item_displayed)
+	(tui_data_window::delete_data_content_windows): Update.
+	(tui_data_window::refresh_window, tui_data_window::no_refresh):
+	Remove.
+	(tui_data_window::check_register_values): Update.
+	(tui_data_item_window::rerender): Add parameters.  Update.
+	(tui_data_item_window::refresh_window): Remove.
+	* tui/tui-data.h (struct tui_gen_win_info) <no_refresh>: No longer
+	virtual.
+	* tui/tui-regs.h (struct tui_data_item_window): Don't derive from
+	tui_gen_win_info.
+	<refresh_window, max_height, min_height>: Remove.
+	<rerender>: Add parameters.
+	<x, y, visible>: New members.
+	(struct tui_data_window) <refresh_window, no_refresh>: Remove.
+	<m_item_width>: New member.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::show_register_group)
+	(tui_data_window::check_register_values): Update.
+	* tui/tui-regs.h (struct tui_data_item_window) <regno>: Rename
+	from item_no.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::show_register_group): Remove
+	useless "if".
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::show_register_group): Update.
+	* tui/tui-regs.h (struct tui_data_item_window) <name>: Remove.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-stack.c (SINGLE_KEY): Move from tui-data.h
+	* tui/tui-winsource.h (enum tui_line_or_address_kind)
+	(struct tui_line_or_address): Move from tui-data.h.
+	* tui/tui-win.c (DEFAULT_TAB_LEN): Move from tui-data.h.
+	* tui/tui-data.h (DEFAULT_TAB_LEN): Move to tui-win.c.
+	(tui_cmd_window, tui_source_window_base, tui_source_window)
+	(tui_disasm_window): Don't declare.
+	(enum tui_line_or_address_kind, struct tui_line_or_address): Move
+	to tui-winsource.h.
+	(SINGLE_KEY): Move to tui-stack.c.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.h (struct tui_data_item_window) <content>: Now a
+	std::string.
+	* tui/tui-regs.c (class tab_expansion_file): New.
+	(tab_expansion_file::write): New method.
+	(tui_register_format): Change return type.  Use
+	tab_expansion_file.
+	(tui_get_register, tui_data_window::display_registers_from)
+	(tui_data_item_window::rerender): Update.
+	* tui/tui-io.h (tui_expand_tabs): Don't declare.
+	* tui/tui-io.c (tui_expand_tabs): Remove.
+
+2020-07-01  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_reggroup_completer): Use complete_on_enum.
+
+2020-07-01  Fangrui Song  <maskray@google.com>
+
+	* dwarf2/read.c (lnp_state_machine::check_line_address): Test -1.
+
+2020-07-01  Alok Kumar Sharma  <AlokKumar.Sharma@amd.com>
+
+	* dwarf2/read.c (set_die_type): Removed conditions to restrict
+	forms for DW_AT_associated and DW_AT_allocated attributes,
+	which is already checked in function attr_to_dynamic_prop.
+
+2020-06-30  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (quirk_rust_enum): Correctly call
+	alloc_rust_variant for default-less enum.
+
+2020-06-30  Tom Tromey  <tromey@adacore.com>
+
+	PR build/26183:
+	* ada-lang.c (ada_lookup_name_info::ada_lookup_name_info): Use
+	gdb::to_string.
+
+2020-06-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh (displaced_step_copy_insn): Update doc.
+	* gdbarch.h: Re-generate.
+
+2020-06-28  Tom Tromey  <tom@tromey.com>
+
+	* command.h (cmd_types): Remove.
+	(cmd_type): Don't declare.
+	* cli/cli-decode.h (enum cmd_types): Uncomment.  No longer a
+	typedef.
+	* cli/cli-cmds.c (setting_cmd): Use cmd->type directly.
+	* cli/cli-decode.c (cmd_type): Remove.
+
+2020-06-27  Pedro Alves  <palves@redhat.com>
+
+	* fork-child.c (prefork_hook): Adjust.
+	* infcmd.c (set_inferior_io_terminal, get_inferior_io_terminal):
+	Delete.
+	(set_inferior_tty_command, show_inferior_tty_command): Adjust.
+	* inferior.c (inferior::set_tty, inferior::tty): New methods.
+	* inferior.h (set_inferior_io_terminal, get_inferior_io_terminal):
+	Remove declarations.
+	(struct inferior) <set_tty, tty>: New methods.
+	(struct inferior) <terminal>: Rename to ...
+	(struct inferior) <m_terminal>: ... this and make private.
+	* main.c (captured_main_1): Adjust.
+	* mi/mi-cmd-env.c (mi_cmd_inferior_tty_set): Adjust.
+	(mi_cmd_inferior_tty_show): Adjust.
+	* nto-procfs.c (nto_procfs_target::create_inferior): Adjust.
+	* windows-nat.c (windows_nat_target::create_inferior): Adjust.
+
+2020-06-26  Nick Alcock  <nick.alcock@oracle.com>
+
+	* configure.ac: Add --enable-libctf: handle --disable-static
+	properly.
+	* acinclude.m4: sinclude ../config/enable.m4.
+	* Makefile.in (aclocal_m4_deps): Adjust accordingly.
+	(LIBCTF): Substitute in.
+	(CTF_DEPS): New, likewise.
+	(CLIBS): libctf needs symbols from libbfd: move earlier.
+	(CDEPS): Use CTF_DEPS, not LIBCTF, now LIBCTF can include rpath
+	flags.
+	* ctfread.c: Surround in ENABLE_LIBCTF.
+	(elfctf_build_psymtabs) [!ENABLE_LIBCTF]: New stub.
+	* configure: Regenerate.
+	* config.in: Likewise.
+
+2020-06-25  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infcmd.c (set_inferior_io_terminal): Use make_unique_xstrdup.
+
+2020-06-25  Simon Marchi  <simon.marchi@efficios.com>
+
+	* inferior.h (struct inferior) <terminal>: Change type to
+	gdb::unique_xmalloc_ptr<char>.
+	* inferior.c (inferior::~inferior): Don't free inf->terminal.
+	* infcmd.c (set_inferior_io_terminal): Don't free terminal
+	field, adjust to unique pointer.
+	(get_inferior_io_terminal): Adjust to unique pointer.
+
+2020-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_print_registers_info): Loop over all
+	registers, not just the known core set of registers.
+
+2020-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_register_name): Return NULL for duplicate
+	fflags, frm, and fcsr registers.
+	(riscv_register_reggroup_p): Remove unknown CSRs from save and
+	restore groups.
+	(riscv_tdesc_unknown_reg): New function.
+	(riscv_gdbarch_init): Pass riscv_tdesc_unknown_reg to
+	tdesc_use_registers.
+	* riscv-tdep.h (struct gdbarch_tdep): Add
+	unknown_csrs_first_regnum, unknown_csrs_count,
+	duplicate_fflags_regnum, duplicate_frm_regnum, and
+	duplicate_fcsr_regnum fields.
+
+2020-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* target-descriptions.c (tdesc_use_registers): Add new parameter a
+	callback, use the callback (when not null) to help number unknown
+	registers.
+	* target-descriptions.h (tdesc_unknown_register_ftype): New typedef.
+	(tdesc_use_registers): Add extra parameter to declaration.
+
+2020-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (value_of_riscv_user_reg): Moved to here from later
+	in the file.
+	(class riscv_pending_register_alias): Likewise.
+	(riscv_register_feature::register_info): Change 'required_p' field
+	to 'required', and change its type.  Add 'check' member function.
+	(riscv_register_feature::register_info::check): Define new member
+	function.
+	(riscv_xreg_feature): Change initialisation of 'required' field.
+	(riscv_freg_feature): Likewise.
+	(riscv_virtual_feature): Likewise.
+	(riscv_csr_feature): Likewise.
+	(riscv_check_tdesc_feature): Take extra parameter, the csr
+	tdesc_feature, rewrite the function to use the new
+	riscv_register_feature::register_info::check function.
+	(riscv_gdbarch_init): Pass the csr tdesc_feature where needed.
+
+2020-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* features/Makefile: Remove all references to the deleted files
+	below.
+	* features/riscv/32bit-csr.c: Deleted.
+	* features/riscv/32bit-csr.xml: Deleted.
+	* features/riscv/64bit-csr.c: Deleted.
+	* features/riscv/64bit-csr.xml: Deleted.
+	* features/riscv/rebuild-csr-xml.sh: Deleted.
+
+2020-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (struct riscv_register_feature::register_info): Fix
+	whitespace error for declaration of names member variable.
+	(struct riscv_register_feature): Add new prefer_first_name member
+	variable, and fix whitespace error in declaration of registers.
+	(riscv_xreg_feature): Initialize prefer_first_name field.
+	(riscv_freg_feature): Likewise.
+	(riscv_virtual_feature): Likewise.
+	(riscv_csr_feature): Likewise.
+	(riscv_register_name): Expand on comments.  Remove register name
+	modifications for CSR and virtual registers.
+
+2020-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (struct riscv_register_feature): Fix whitespace
+	errors.
+
+2020-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_create_csr_aliases): Handle csr aliases from
+	riscv-opc.h.
+	(class riscv_pending_register_alias): New class.
+	(riscv_check_tdesc_feature): Take vector of pending aliases and
+	populate it as appropriate.
+	(riscv_setup_register_aliases): Delete.
+	(riscv_gdbarch_init): Create vector of pending aliases and pass it
+	to riscv_check_tdesc_feature in all cases.  Use the vector to
+	create the register aliases.
+
+2020-06-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* sol2-tdep.c (sol2_static_transform_name): Remove.
+	(sol2_init_abi): Don't register it.
+	* gdbarch.sh (static_transform_name): Remove.
+	* gdbarch.c, gdbarch.h: Regenerate.
+
+	* dbxread.c (read_dbx_symtab) <'S'>: Remove call to
+	gdbarch_static_transform_name.
+	* mdebugread.c (parse_partial_symbols) <'S'>: Likewise.
+	* stabsread.c (define_symbol) <'X'>: Remove.
+	(define_symbol) <'S'>: Remove gdbarch_static_transform_name
+	handling.
+	<'V'>: Likewise.
+	* xcoffread.c (scan_xcoff_symtab): Remove gdbarch.
+	<'S'>: Remove call to gdbarch_static_transform_name.
+
+2020-06-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* procfs.c (procfs_pre_trace): New function.
+	(procfs_target::create_inferior): Pass it to fork_inferior.
+
+2020-06-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* configure.tgt <sparc-*-linux*> (gdb_target_obs): Remove
+	sparc-sol2-tdep.o, sol2-tdep.o, sparc64-sol2-tdep.o.
+	<sparc64-*-linux*> (gdb_target_obs): Remove sparc64-sol2-tdep.o,
+	sol2-tdep.o, sparc-sol2-tdep.o.
+	* sparc-sol2-tdep.c (sparc32_sol2_init_abi): Make static.
+	* sparc-tdep.h (sparc32_sol2_init_abi): Remove.
+	* sparc64-sol2-tdep.c (sparc64_sol2_init_abi): Make static.
+	* sparc64-tdep.h (sparc64_sol2_init_abi): Remove.
+
+2020-06-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* amd64-sol2-tdep.c (amd64_sol2_sigtramp_p): Remove.
+	(amd64_sol2_init_abi): Use sol2_sigtramp_p.
+	Call sol2_init_abi.
+ 	Remove calls to set_gdbarch_skip_solib_resolver,
+	set_gdbarch_core_pid_to_str.
+	* i386-sol2-tdep.c (i386_sol2_sigtramp_p): Remove.
+	(i386_sol2_static_transform_name): Remove.
+	(i386_sol2_init_abi): Call sol2_init_abi.
+	Remove calls to set_gdbarch_sofun_address_maybe_missing,
+	set_gdbarch_static_transform_name,
+	set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str.
+	Use sol2_sigtramp_p.
+	* sol2-tdep.c (sol2_pc_in_sigtramp): New function.
+	(sol2_sigtramp_p): New function.
+	(sol2_static_transform_name): New function.
+	(sol2_skip_solib_resolver, sol2_core_pid_to_str): Make static.
+	(sol2_init_abi): New function.
+	* sol2-tdep.h (sol2_sigtramp_p, sol2_init_abi): Declare.
+	(sol2_skip_solib_resolver, sol2_core_pid_to_str): Remove.
+	* sparc-sol2-tdep.c (sparc_sol2_pc_in_sigtramp): Remove.
+	(sparc32_sol2_sigtramp_frame_sniffer): Just call sol2_sigtramp_p.
+	(sparc_sol2_static_transform_name): Remove.
+	(sparc32_sol2_init_abi): Call sol2_init_abi.
+	Remove calls to set_gdbarch_sofun_address_maybe_missing,
+	set_gdbarch_static_transform_name,
+	set_gdbarch_skip_solib_resolver,
+	set_gdbarch_core_pid_to_str.
+	* sparc-tdep.h (sparc_sol2_pc_in_sigtramp)
+	(sparc_sol2_static_transform_name): Remove
+	* sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_sniffer): Just
+	call sol2_sigtramp_p.
+	(sparc64_sol2_init_abi): Call sol2_init_abi.
+	Remove calls to set_gdbarch_sofun_address_maybe_missing,
+	set_gdbarch_static_transform_name,
+	set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str.
+
+2020-06-24  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* symfile-add-flags.h: New flag SYMFILE_ALWAYS_CONFIRM.
+	* exec.c (validate_exec_file): If from_tty, set both
+	SYMFILE_VERBOSE (== from_tty) and SYMFILE_ALWAYS_CONFIRM.
+	* symfile.c (symbol_file_add_with_addrs): if always_confirm
+	and from_tty, unconditionally ask a confirmation.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* target-descriptions.c (tdesc_architecture_name): Protect against
+	NULL pointer dereference.
+	(maint_print_xml_tdesc_cmd): New function.
+	(_initialize_target_descriptions): Register new 'maint print
+	xml-tdesc' command and give it the filename completer.
+	* NEWS: Mention new 'maint print xml-tdesc' command.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* target-descriptions.c (class tdesc_compatible_info): New class.
+	(struct target_desc): Change type of compatible vector.
+	(tdesc_compatible_p): Update for change in type of
+	target_desc::compatible.
+	(tdesc_compatible_info_list): New function.
+	(tdesc_compatible_info_arch_name): New function.
+	(tdesc_add_compatible): Update for change in type of
+	target_desc::compatible.
+	(print_c_tdesc::visit_pre): Likewise.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* target-descriptions.c (print_c_tdesc::print_c_tdesc): Change
+	whitespace to underscore.
+	(maint_print_c_tdesc_cmd): Use fake filename for target
+	descriptions that came from the target.
+	(_initialize_target_descriptions): Add filename command completion
+	for 'maint print c-tdesc'.
+
+2020-06-23  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/loc.c (decode_debug_loclists_addresses): Add empty
+	lines.
+
+2020-06-23  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/loc.c (decode_debug_loc_dwo_addresses): Add empty
+	lines.
+	(dwarf2_find_location_expression): Likewise.
+	(call_site_parameter_matches): Likewise.
+	(dwarf2_compile_expr_to_ax): Likewise.
+	(disassemble_dwarf_expression): Likewise.
+	(loclist_describe_location): Likewise.
+
+2020-06-23  Pedro Alves  <palves@redhat.com>
+
+	* gdbarch-selftests.c: Don't include inferior.h, gdbthread.h or
+	progspace-and-thread.h.  Include scoped-mock-context.h instead.
+	(register_to_value_test): Use scoped_mock_context.
+	* regcache.c: Include "scoped-mock-context.h".
+	(cooked_read_test): Don't error out if a target is already pushed.
+	Use scoped_mock_context.  Adjust.
+	* scoped-mock-context.h: New file.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_is_string_type_p
+	initializer.
+	(ada_language::is_string_type_p): New member function.
+	* c-lang.c (c_language_data): Delete la_is_string_type_p
+	initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_is_string_type_p): Delete function, implementation
+	moved to f_language::is_string_type_p.
+	(f_language_data): Delete la_is_string_type_p initializer.
+	(f_language::is_string_type_p): New member function,
+	implementation from f_is_string_type_p.
+	* go-lang.c (go_is_string_type_p): Delete function, implementation
+	moved to go_language::is_string_type_p.
+	(go_language_data): Delete la_is_string_type_p initializer.
+	(go_language::is_string_type_p): New member function,
+	implementation from go_is_string_type_p.
+	* language.c (language_defn::is_string_type_p): Define new member
+	function.
+	(default_is_string_type_p): Make static, add comment copied from
+	header file.
+	(unknown_language_data): Delete la_is_string_type_p initializer.
+	(unknown_language::is_string_type_p): New member function.
+	(auto_language_data): Delete la_is_string_type_p initializer.
+	(auto_language::is_string_type_p): New member function.
+	* language.h (language_data): Delete la_is_string_type_p field.
+	(language_defn::is_string_type_p): Declare new function.
+	(default_is_string_type_p): Delete desclaration, move comment to
+	definition.
+	* m2-lang.c (m2_is_string_type_p): Delete function, implementation
+	moved to m2_language::is_string_type_p.
+	(m2_language_data): Delete la_is_string_type_p initializer.
+	(m2_language::is_string_type_p): New member function,
+	implementation from m2_is_string_type_p.
+	* objc-lang.c (objc_language_data): Delete la_is_string_type_p
+	initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_is_string_type_p): Delete function,
+	implementation moved to pascal_language::is_string_type_p.
+	(pascal_language_data): Delete la_is_string_type_p initializer.
+	(pascal_language::is_string_type_p): New member function,
+	implementation from pascal_is_string_type_p.
+	* rust-lang.c (rust_is_string_type_p): Delete function,
+	implementation moved to rust_language::is_string_type_p.
+	(rust_language_data): Delete la_is_string_type_p initializer.
+	(rust_language::is_string_type_p): New member function,
+	implementation from rust_is_string_type_p.
+	* valprint.c (val_print_scalar_or_string_type_p): Update call to
+	is_string_type_p.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_print_typedef
+	initializer.
+	(ada_language::print_typedef): New member function.
+	* c-lang.c (c_language_data): Delete la_print_typedef initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	(f_language::print_typedef): New member function.
+	* go-lang.c (go_language_data): Delete la_print_typedef
+	initializer.
+	* language.c (language_defn::print_typedef): Define member
+	function.
+	(unknown_language_data): Delete la_print_typedef initializer.
+	(unknown_language::print_typedef): New member function.
+	(auto_language_data): Delete la_print_typedef initializer.
+	(auto_language::print_typedef): New member function.
+	* language.h (language_data): Delete la_print_typedef field.
+	(language_defn::print_typedef): Declare new member function.
+	(LA_PRINT_TYPEDEF): Update call to print_typedef.
+	(default_print_typedef): Delete declaration.
+	* m2-lang.c (m2_language_data): Delete la_print_typedef
+	initializer.
+	(m2_language::print_typedef): New member function.
+	* objc-lang.c (objc_language_data): Delete la_print_typedef
+	initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	(pascal_language::print_typedef): New member function.
+	* rust-lang.c (rust_print_typedef): Delete function,
+	implementation moved to rust_language::print_typedef.
+	(rust_language): Delete la_print_typedef initializer.
+	(rust_language::print_typedef): New member function,
+	implementation from rust_print_typedef.
+	* typeprint.c (default_print_typedef): Delete.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_printstr initializer.
+	(ada_language::printstr): New member function.
+	* c-lang.c (c_language_data): Delete la_printstr initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_printstr): Rename to f_language::printstr.
+	(f_language_data): Delete la_printstr initializer.
+	(f_language::printstr): New member function, implementation from
+	f_printstr.
+	* go-lang.c (go_language_data): Delete la_printstr initializer.
+	* language.c (language_defn::printstr): Define new member
+	function.
+	(unk_lang_printstr): Delete.
+	(unknown_language_data): Delete la_printstr initializer.
+	(unknown_language::printstr): New member function.
+	(auto_language_data): Delete la_printstr initializer.
+	(auto_language::printstr): New member function.
+	* language.h (language_data): Delete la_printstr field.
+	(language_defn::printstr): Declare new member function.
+	(LA_PRINT_STRING): Update call to printstr.
+	* m2-lang.c (m2_printstr): Rename to m2_language::printstr.
+	(m2_language_data): Delete la_printstr initializer.
+	(m2_language::printstr): New member function, implementation from
+	m2_printstr.
+	* objc-lang.c (objc_language_data): Delete la_printstr
+	initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_printstr): Rename to pascal_language::printstr.
+	(pascal_language_data): Delete la_printstr initializer.
+	(pascal_language::printstr): New member function, implementation
+	from pascal_printstr.
+	* p-lang.h (pascal_printstr): Delete declaration.
+	* rust-lang.c (rust_printstr): Update header comment.
+	(rust_language_data): Delete la_printstr initializer.
+	(rust_language::printstr): New member function.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_printchar initializer.
+	(ada_language::printchar): New member function.
+	* c-lang.c (c_language_data): Delete la_printchar initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_printchar): Rename to f_language::printchar.
+	(f_language_data): Delete la_printchar initializer.
+	(f_language::printchar): New member function, implementation from
+	f_printchar.
+	* go-lang.c (go_language_data): Delete la_printchar initializer.
+	* language.c (unk_lang_printchar): Delete.
+	(language_defn::printchar): Define new member function.
+	(unknown_language_data): Delete la_printchar initializer.
+	(unknown_language::printchar): New member function.
+	(auto_language_data): Delete la_printchar initializer.
+	(auto_language::printchar): New member function.
+	* language.h (language_data): Delete la_printchar field.
+	(language_defn::printchar): Declare new member function.
+	(LA_PRINT_CHAR): Update call to printchar.
+	* m2-lang.c (m2_language_data): Delete la_printchar initializer.
+	(m2_language::printchar): New member function.
+	* objc-lang.c (objc_language_data): Delete la_printchar
+	initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Delete la_printchar
+	initializer.
+	(pascal_language::printchar): New member function.
+	* rust-lang.c (rust_printchar): Rename to
+	rust_language::printchar.
+	(rust_language_data): Delete la_printchar initializer.
+	(rust_language::printchar): New member function, implementation
+	from rust_printchar.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (emit_char): Renamed to ada_language::emitchar.
+	(ada_language_data): Delete la_emitchar initializer.
+	(ada_language::emitchar): New member function, implementation from
+	emit_char.
+	* c-lang.c (c_language_data): Delete la_emitchar initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_emit_char): Rename to f_language::emitchar.
+	(f_language_data): Delete la_emitchar initializer.
+	(f_language::emitchar): New member function, implementation from
+	f_emit_char.
+	* go-lang.c (go_language_data): Delete la_emitchar initializer.
+	* language.c (unk_lang_emit_char): Delete.
+	(language_defn::emitchar): New member function definition.
+	(unknown_language_data): Delete la_emitchar initializer.
+	(unknown_language::emitchar): New member function.
+	(auto_language_data): Delete la_emitchar initializer.
+	(auto_language::emitchar): New member function.
+	* language.h (language_data): Delete la_emitchar field.
+	(language_defn::emitchar): New member field declaration.
+	(LA_EMIT_CHAR): Update call to emitchar.
+	* m2-lang.c (m2_emit_char): Rename to m2_language::emitchar.
+	(m2_language_data): Delete la_emitchar initializer.
+	(m2_language::emitchar): New member function, implementation from
+	m2_emit_char.
+	* objc-lang.c (objc_language_data): Delete la_emitchar
+	initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_emit_char): Rename to pascal_language::emitchar.
+	(pascal_language_data): Delete la_emitchar initializer.
+	(pascal_language::emitchar): New member function, implementation
+	from pascal_emit_char.
+	* rust-lang.c (rust_emitchar): Rename to rust_language::emitchar.
+	(rust_language_data): Delete la_emitchar initializer.
+	(rust_language::emitchar): New member function, implementation
+	from rust_emitchar.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (resolve): Rename to ada_language::post_parser.
+	(ada_language_data): Delete la_post_parser initializer.
+	(ada_language::post_parser): New member function.
+	* c-lang.c (c_language_data): Delete la_post_parser initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_post_parser field.
+	(language_defn::post_parser): New member function.
+	* m2-lang.c (m2_language_data): Delete la_post_parser initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* parse.c (parse_exp_in_context): Update call to post_parser.
+	(null_post_parser): Delete definition.
+	* parser-defs.h (null_post_parser): Delete declaration.
+	* rust-lang.c (rust_language_data): Delete la_post_parser
+	initializer.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (parse): Rename to ada_language::parser.
+	(ada_language_data): Delete la_parser initializer.
+	(ada_language::parser): New member function, implementation from
+	parse.
+	* c-lang.c (c_language_data): Delete la_parser initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	(d_language::parser): New member function.
+	* f-lang.c (f_language_data): Delete la_parser initializer.
+	(f_language::parser): New member function.
+	* go-lang.c (go_language_data): Delete la_parser initializer.
+	(go_language::parser): New member function.
+	* language.c (unk_lang_parser): Delete.
+	(language_defn::parser): Define new member function.
+	(unknown_language_data): Delete la_parser initializer.
+	(unknown_language::parser): New member function.
+	(auto_language_data): Delete la_parser initializer.
+	(auto_language::parser): New member function.
+	* language.h (language_data): Delete la_parser field.
+	(language_defn::parser): Declare new member function.
+	* m2-lang.c (m2_language_data): Delete la_parser initializer.
+	(m2_language::parser): New member function.
+	* objc-lang.c (objc_language_data): Delete la_parser initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	(pascal_language::parser): New member function.
+	* parse.c (parse_exp_in_context): Update call to parser.
+	* rust-lang.c (rust_language_data): Delete la_parser initializer.
+	(rust_language::parser): New member function.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* top.c (print_gdb_configuration): Print --with-python-libdir
+	configuration value.
+
+2020-06-22  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Mention change to the alias command.
+
+2020-06-22  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-cmds.c (lookup_cmd_for_default_args)
+	(alias_command_completer)
+	(make_alias_options_def_group): New functions.
+	(alias_opts, alias_option_defs): New struct and array.
+	(alias_usage_error): Update usage.
+	(alias_command): Handles optional DEFAULT-ARGS... arguments.
+	Use option framework.
+	(_initialize_cli_cmds): Update alias command help.
+	Update aliases command help.
+	(show_user):
+	Add NULL for new default_args lookup_cmd argument.
+	(valid_command_p): Rename to validate_aliased_command.
+	Add NULL for new default_args lookup_cmd argument.  Verify that the
+	aliased_command has no default args.
+	* cli/cli-decode.c (help_cmd): Show aliases definitions.
+	(lookup_cmd_1, lookup_cmd): New argument default_args.
+	(add_alias_cmd):
+	Add NULL for new default_args lookup_cmd argument.
+	(print_help_for_command): Show default args under the layout
+	 alias some_alias = some_aliased_cmd some_alias_default_arg.
+	* cli/cli-decode.h (struct cmd_list_element): New member default_args.
+	xfree default_args in destructor.
+	* cli/cli-script.c (process_next_line, do_define_command):
+	Add NULL for new default_args lookup_cmd argument.
+	* command.h: Declare new default_args argument in lookup_cmd
+	and lookup_cmd_1.
+	* completer.c (complete_line_internal_1):
+	Add NULL for new default_args lookup_cmd or lookup_cmd_1 argument.
+	* guile/scm-cmd.c (gdbscm_parse_command_name): Likewise.
+	* guile/scm-param.c (add_setshow_generic, pascm_parameter_defined_p):
+	Likewise.
+	* infcmd.c (_initialize_infcmd): Likewise.
+	* python/py-auto-load.c (gdbpy_initialize_auto_load): Likewise.
+	* python/py-cmd.c (gdbpy_parse_command_name): Likewise.
+	* python/py-param.c (add_setshow_generic): Likewise.
+	* remote.c (_initialize_remote): Likewise.
+	* top.c (execute_command): Prepend default_args if command has some.
+	(set_verbose):
+	Add NULL for new default_args lookup_cmd or lookup_cmd_1 argument.
+	* tracepoint.c (validate_actionline, encode_actions_1):
+	Add NULL for new default_args lookup_cmd or lookup_cmd_1 argument.
+
+2020-06-22  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* jit.c (jit_read_descriptor): Use bool as the return type.
+	(jit_breakpoint_re_set_internal): Use bool as the return type.
+	Invert the return value logic; return true if the jit breakpoint
+	has been successfully initialized.
+	(jit_inferior_init): Update the call to
+	jit_breakpoint_re_set_internal.
+
+2020-06-22  Pedro Alves  <palves@redhat.com>
+
+	PR gdb/25939
+	* procfs.c (procfs_target::wait): Don't reference inferior_ptid.
+	Use the current inferior instead.  Don't return
+	TARGET_WAITKIND_SPURIOUS/inferior_ptid -- instead continue and
+	wait again.
+	* sol-thread.c (sol_thread_target::wait): Don't reference
+	inferior_ptid.
+	(ps_lgetregs, ps_lsetregs, ps_lgetfpregs, ps_lsetfpregs)
+	(sol_update_thread_list_callback): Use the current inferior's pid
+	instead of inferior_ptid.
+
+2020-06-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* procfs.c: Cleanup many comments.
+
+	(READ_WATCHFLAG, WRITE_WATCHFLAG, EXEC_WATCHFLAG)
+	(AFTER_WATCHFLAG): Replace by value.
+
+	(MAIN_PROC_NAME_FORMAT): Inline ...
+	(create_procinfo): ... here.
+
+	(procfs_debug_inferior): Remove SYS_exec handling.
+	(syscall_is_exec): Likewise.
+	(procfs_set_exec_trap): Likewise.
+
+	(syscall_is_lwp_exit): Inline in callers.
+	(syscall_is_exit): Likewise.
+	(syscall_is_exec): Likewise.
+	(syscall_is_lwp_create): Likewise.
+
+	(invalidate_cache): Remove #if 0 code.
+
+	(make_signal_thread_runnable):  Remove.
+	(procfs_target::resume): Remove #if 0 code.
+
+2020-06-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	PR gdb/25939
+	* procfs.c (procfs_target::procfs_init_inferior): Move push_target
+	call ...
+	(procfs_target::create_inferior): ... here.
+
+2020-06-21  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* exec.c (validate_exec_file): Ensure the build-id is up to
+	date by calling reopen_exec_file (that checks file timestamp
+	to decide to re-read the file).
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	PR gdb/25412
+	* gdbthread.h (delete_thread, delete_thread_silent)
+	(find_thread_ptid): Update comments.
+	* thread.c (current_thread_): New global.
+	(is_current_thread): Move higher, and reimplement.
+	(inferior_thread): Reimplement.
+	(set_thread_exited): Use bool.  Add assertions.
+	(add_thread_silent): Simplify thread-reuse handling by always
+	calling delete_thread.
+	(delete_thread): Remove intro comment.
+	(find_thread_ptid): Skip exited threads.
+	(switch_to_thread_no_regs): Write to current_thread_.
+	(switch_to_no_thread): Check CURRENT_THREAD_ instead of
+	INFERIOR_PTID.  Clear current_thread_.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* aix-thread.c (pd_update): Use switch_to_thread.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target): Update.
+	(ravenscar_thread_target::update_inferior_ptid): Rename to ...
+	(ravenscar_thread_target::add_active_thread): ... this.  Don't
+	set m_base_ptid here.  Update to avoid referencing inferior_ptid.
+	(ravenscar_thread_target::wait): Don't write to inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* nat/windows-nat.c (current_windows_thread): Remove.
+	* nat/windows-nat.h (current_windows_thread): Remove.
+	* windows-nat.c (windows_nat_target::stopped_by_sw_breakpoint):
+	Adjust.
+	(display_selectors): Adjust to fetch the current
+	windows_thread_info based on inferior_ptid.
+	(fake_create_process): No longer write to current_windows_thread.
+	(windows_nat_target::get_windows_debug_event):
+	Don't set inferior_ptid or current_windows_thread.
+	(windows_nat_target::wait): Adjust to not rely on
+	current_windows_thread.
+	(do_initial_windows_stuff): Now a method of windows_nat_target.
+	Switch to the last_ptid thread.
+	(windows_nat_target::attach): Adjust.
+	(windows_nat_target::detach): Use switch_to_no_thread instead of
+	writing to inferior_ptid directly.
+	(windows_nat_target::create_inferior): Adjust.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* windows-nat.c (do_initial_windows_stuff): No longer set inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* go32-nat.c (go32_nat_target::create_inferior): Switch to thread
+	after creating it, instead of writing to inferior_ptid.  Don't
+	write to inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* fork-child.c (postfork_hook): Don't write to inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* bsd-kvm.c (bsd_kvm_target_open): Switch to thread after adding
+	it, instead of writing to inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* btrace.c (btrace_fetch): Use switch_to_thread instead of writing
+	to inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* bsd-kvm.c (bsd_kvm_target::close): Use switch_to_no_thread
+	instead of writing to inferior_ptid directly.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* corelow.c (core_target::close): Use switch_to_no_thread instead
+	of writing to inferior_ptid directly.
+	(add_to_thread_list, core_target_open): Use switch_to_thread
+	instead of writing to inferior_ptid directly.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* darwin-nat.c (darwin_nat_target::decode_message): Don't write to
+	inferior_ptid.
+	(darwin_nat_target::stop_inferior, darwin_nat_target::kill): Avoid
+	inferior_ptid.
+	(darwin_attach_pid): Use switch_to_no_thread instead of writing to
+	inferior_ptid directly.
+	(darwin_nat_target::init_thread_list): Switch to thread, instead
+	of writing to inferior_ptid.
+	(darwin_nat_target::attach): Don't write to inferior_ptid.
+	(darwin_nat_target::get_ada_task_ptid): Avoid inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* gnu-nat.c (gnu_nat_target::create_inferior): Switch to the added
+	thread.
+	(gnu_nat_target::attach): Don't write to inferior_ptid directly.
+	Instead use switch_to_thread.
+	(gnu_nat_target::detach): Use switch_to_no_thread
+	instead of writing to inferior_ptid directly.  Used passed-in
+	inferior instead of looking up the inferior by pid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* go32-nat.c (go32_nat_target::create_inferior): Don't write to
+	inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* nto-procfs.c (nto_procfs_target::update_thread_list): Avoid
+	inferior_ptid.
+	(nto_procfs_target::attach): Avoid inferior_ptid.  Switch to
+	thread.
+	(nto_procfs_target::detach): Avoid referencing
+	inferior_ptid.  Use switch_to_no_thread instead of writing to
+	inferior_ptid directly.
+	(nto_procfs_target::mourn_inferior): Use switch_to_no_thread
+	instead of writing to inferior_ptid directly.
+	(nto_procfs_target::create_inferior): Avoid inferior_ptid.  Switch
+	to thread.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* remote-sim.c (gdbsim_target::create_inferior): Switch to thread
+	after creating it, instead of writing to inferior_ptid.
+	(gdbsim_target_open): Use switch_to_no_thread instead of writing
+	to inferior_ptid directly.
+	(gdbsim_target::wait): Don't write to inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* remote.c (remote_target::remote_notice_new_inferior): Use
+	switch_to_thread instead of writing to inferior_ptid directly.
+	(remote_target::add_current_inferior_and_thread): Use
+	switch_to_no_thread instead of writing to inferior_ptid directly.
+	(extended_remote_target::attach): Use switch_to_inferior_no_thread
+	and switch_to_thread instead of using set_current_inferior or
+	writing to inferior_ptid directly.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* tracectf.c (ctf_target_open): Switch to added thread instead of
+	writing to inferior_ptid directly.
+	(ctf_target::close): Use switch_to_no_thread instead of writing to
+	inferior_ptid directly.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* tracefile-tfile.c (tfile_target_open): Don't write to
+	inferior_ptid directly, instead switch to added thread.
+	(tfile_target::close): Use switch_to_no_thread instead of writing
+	to inferior_ptid directly.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* procfs.c (procfs_target::attach): Don't write to inferior_ptid.
+	(procfs_target::detach): Use switch_to_no_thread
+	instead of writing to inferior_ptid directly.
+	(do_attach): Change return type to void.  Switch to the added
+	thread.
+	(procfs_target::create_inferior): Switch to the added thread.
+	(procfs_do_thread_registers): Don't write to inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* infrun.c (generic_mourn_inferior): Use switch_to_thread instead
+	of writing to inferior_ptid.
+	(scoped_restore_exited_inferior): Delete.
+	(handle_vfork_child_exec_or_exit): Simplify using
+	scoped_restore_current_pspace_and_thread.  Use switch_to_thread
+	instead of writing to inferior_ptid.
+	(THREAD_STOPPED_BY): Delete.
+	(thread_stopped_by_watchpoint, thread_stopped_by_sw_breakpoint)
+	(thread_stopped_by_hw_breakpoint): Delete.
+	(save_waitstatus): Use
+	scoped_restore_current_thread+switch_to_thread, and call
+	target_stopped_by_watchpoint instead of
+	thread_stopped_by_watchpoint, target_stopped_by_sw_breakpoint
+	instead of thread_stopped_by_sw_breakpoint, and
+	target_stopped_by_hw_breakpoint instead of
+	thread_stopped_by_hw_breakpoint.
+	(handle_inferior_event)
+	<TARGET_WAITKIND_EXITED/TARGET_WAITKIND_SIGNALLED>: Don't write to
+	inferior_ptid directly, nor
+	set_current_inferior/set_current_program_space.  Use
+	switch_to_thread / switch_to_inferior_no_thread instead.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* target.c (generic_mourn_inferior): Use switch_to_no_thread
+	instead of writing to inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* inf-ptrace.c (inf_ptrace_target::create_inferior): Switch to the
+	added thread.
+	(inf_ptrace_target::attach): Don't write to inferior_ptid.  Switch
+	to the added thread.
+	(inf_ptrace_target::detach_success): Use switch_to_no_thread
+	instead of writing to inferior_ptid.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* gdbarch-selftests.c: Include "progspace-and-thread.h".
+	(register_to_value_test): Mock a program_space too.  Heap-allocate
+	the address space.  Don't write to inferior_ptid.  Use
+	switch_to_thread instead.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* linux-tdep.c (find_signalled_thread(thread_info *,void *)):
+	Delete.
+	(find_signalled_thread()): New, factored out from
+	linux_make_corefile_notes and adjusted to handle exited threads.
+	(linux_make_corefile_notes): Adjust to use the new
+	find_signalled_thread.
+
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+	* linux-tdep.c (btrace_fetch): Save/restore current thread instead
+	of saving/restoring inferior_ptid.
+
+2020-06-17  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.h (tui_scroll_forward, tui_scroll_backward)
+	(tui_scroll_left, tui_scroll_right, struct tui_win_info): Don't
+	declare.
+	* tui/tui-data.h (MIN_CMD_WIN_HEIGHT): Remove.
+
+2020-06-15  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (dwarf2_initialize_objfile): Check for presence
+	of partial symtabs.
+
+2020-06-17  Simon Marchi  <simon.marchi@efficios.com>
+
+	* regformats/reg-arm.dat: Remove.
+	* regformats/reg-bfin.dat: Remove.
+	* regformats/reg-cris.dat: Remove.
+	* regformats/reg-crisv32.dat: Remove.
+	* regformats/reg-m32r.dat: Remove.
+	* regformats/reg-tilegx.dat: Remove.
+	* regformats/reg-tilegx32.dat: Remove.
+
+2020-06-17  Simon Marchi  <simon.marchi@efficios.com>
+
+	* features/Makefile (WHICH): Remove arm files.
+	* regformats/arm/arm-with-iwmmxt.dat: Remove.
+	* regformats/arm/arm-with-neon.dat: Remove.
+	* regformats/arm/arm-with-vfpv2.dat: Remove.
+	* regformats/arm/arm-with-vfpv3.dat: Remove.
+
+2020-06-17  Simon Marchi  <simon.marchi@efficios.com>
+
+	* features/Makefile (XMLTOC): Remove rx.xml.
+
+2020-06-17  Pedro Alves  <palves@redhat.com>
+
+	* gdbthread.h (thread_control_state) <trap_expected> Update
+	comments.
+
+2020-06-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_lookup_symbol_nonlocal): Rename to
+	ada_language::lookup_symbol_nonlocal.
+	(ada_language_data): Delete la_lookup_symbol_nonlocal initializer.
+	(ada_language::lookup_symbol_nonlocal): New member function,
+	implementation from ada_lookup_symbol_nonlocal.
+	* c-lang.c (c_language_data): Delete la_lookup_symbol_nonlocal
+	initializer.
+	(cplus_language_data): Delete la_lookup_symbol_nonlocal
+	initializer.
+	(cplus_language::lookup_symbol_nonlocal): New member function.
+	(asm_language_data): Delete la_lookup_symbol_nonlocal initializer.
+	(minimal_language_data) Likewise.
+	* cp-namespace.c (cp_lookup_nested_symbol): Update comment.
+	* d-lang.c (d_language_data): Delete la_lookup_symbol_nonlocal
+	initializer.
+	(d_language::lookup_symbol_nonlocal): New member function.
+	* f-lang.c (f_language_data): Delete la_lookup_symbol_nonlocal
+	initializer.
+	(f_language::lookup_symbol_nonlocal): New member function.
+	* go-lang.c (go_language_data): Delete la_lookup_symbol_nonlocal
+	initializer.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_lookup_symbol_nonlocal
+	field.
+	(language_defn::lookup_symbol_nonlocal): New member function.
+	* m2-lang.c (m2_language_data): Delete la_lookup_symbol_nonlocal
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_lookup_symbol_nonlocal): Rename to
+	rust_language::lookup_symbol_nonlocal.
+	(rust_language_data): Delete la_lookup_symbol_nonlocal
+	initializer.
+	(rust_language::lookup_symbol_nonlocal): New member function,
+	implementation from rust_lookup_symbol_nonlocal.
+	* symtab.c (lookup_symbol_aux): Update call to
+	lookup_symbol_nonlocal.
+	(basic_lookup_symbol_nonlocal): Rename to...
+	(language_defn::lookup_symbol_nonlocal): ...this, and update
+	header comment.  Remove language_defn parameter, and replace with
+	uses of `this'.
+	* symtab.h (basic_lookup_symbol_nonlocal): Delete declaration.
+
+2020-06-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_value_print_inner
+	initializer.
+	(ada_language::value_print_inner): New member function.
+	* c-lang.c (c_language_data): Delete la_value_print_inner
+	initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	(d_language::value_print_inner): New member function.
+	* f-lang.c (f_language_data): Delete la_value_print_inner
+	initializer.
+	(f_language::value_print_inner): New member function.
+	* f-lang.h (f_value_print_innner): Rename to...
+	(f_value_print_inner): ...this (note spelling of 'inner').
+	* f-valprint.c (f_value_print_innner): Rename to...
+	(f_value_print_inner): ...this (note spelling of 'inner').
+	* go-lang.c (go_language_data): Delete la_value_print_inner
+	initializer.
+	(go_language::value_print_inner): New member function.
+	* language.c (language_defn::value_print_inner): Define new member
+	function.
+	(unk_lang_value_print_inner): Delete.
+	(unknown_language_data): Delete la_value_print_inner initializer.
+	(unknown_language::value_print_inner): New member function.
+	(auto_language_data): Delete la_value_print_inner initializer.
+	(auto_language::value_print_inner): New member function.
+	* language.h (language_data): Delete la_value_print_inner field.
+	(language_defn::value_print_inner): Delcare new member function.
+	* m2-lang.c (m2_language_data): Delete la_value_print_inner
+	initializer.
+	(m2_language::value_print_inner): New member function.
+	* objc-lang.c (objc_language_data): Delete la_value_print_inner
+	initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	(pascal_language::value_print_inner): New member function.
+	* rust-lang.c (rust_language_data): Delete la_value_print_inner
+	initializer.
+	(rust_language::value_print_inner): New member function.
+	* valprint.c (do_val_print): Update call to value_print_inner.
+
+2020-06-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_value_print
+	initializer.
+	(ada_language::value_print): New member function.
+	* c-lang.c (c_language_data): Delete la_value_print initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unk_lang_value_print): Delete.
+	(language_defn::value_print): Define new member function.
+	(unknown_language_data): Delete la_value_print initializer.
+	(unknown_language::value_print): New member function.
+	(auto_language_data): Delete la_value_print initializer.
+	(auto_language::value_print): New member function.
+	* language.h (language_data): Delete la_value_print field.
+	(language_defn::value_print): Declare new member function.
+	(LA_VALUE_PRINT): Update call to value_print.
+	* m2-lang.c (m2_language_data): Delete la_value_print initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	(pascal_language::value_print): New member function.
+	* rust-lang.c (rust_language_data): Delete la_value_print
+	initializer.
+
+2020-06-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_watch_location_expression): Rename to
+	ada_language::watch_location_expression.
+	(ada_language_data): Delete la_watch_location_expression
+	initializer.
+	(ada_language::watch_location_expression): New member function,
+	implementation from ada_watch_location_expression.
+	* breakpoint.c (watch_command_1): Update call to
+	watch_location_expression.
+	* c-lang.c (c_watch_location_expression): Rename to
+	language_defn::watch_location_expression.
+	(c_language_data): Delete la_watch_location_expression
+	initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* c-lang.h (c_watch_location_expression): Delete declaration.
+	* d-lang.c (d_language_data): Delete la_watch_location_expression
+	initializer.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (language_defn::watch_location_expression): Member
+	function implementation from c_watch_location_expression.
+	(unknown_language_data): Delete la_watch_location_expression
+	initializer.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_watch_location_expression
+	field.
+	(language_defn::watch_location_expression): Declare new member
+	function.
+	* m2-lang.c (m2_language_data): Delete
+	la_watch_location_expression initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_watch_location_expression): Rename to
+	rust_language::watch_location_expression.
+	(rust_language_data): Delete la_watch_location_expression
+	initializer.
+	(rust_language::watch_location_expression): New member function,
+	implementation from rust_watch_location_expression.
+
+2020-06-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_collect_symbol_completion_matches): Rename to
+	ada_language::collect_symbol_completion_matches.
+	(ada_language_data): Delete la_collect_symbol_completion_matches
+	initializer.
+	(ada_language::collect_symbol_completion_matches): New member
+	function, implementation from
+	ada_collect_symbol_completion_matches.
+	* c-lang.c (c_language_data): Delete
+	la_collect_symbol_completion_matches initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_collect_symbol_completion_matches): Rename to
+	f_language::collect_symbol_completion_matches.
+	(f_language_data): Delete la_collect_symbol_completion_matches
+	initializer.
+	(f_language::collect_symbol_completion_matches) New member
+	function, implementation from f_collect_symbol_completion_matches.
+	* go-lang.c (go_language_data): Delete
+	la_collect_symbol_completion_matches initializer.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete
+	la_collect_symbol_completion_matches field.
+	(language_defn::collect_symbol_completion_matches): New member
+	function.
+	* m2-lang.c (m2_language_data): Delete
+	la_collect_symbol_completion_matches initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+	* symtab.c (default_collect_symbol_completion_matches): Delete.
+	(collect_symbol_completion_matches): Update call to
+	collect_symbol_completion_matches.
+	(collect_symbol_completion_matches_type): Likewise.
+	* symtab.h (default_collect_symbol_completion_matches): Delete
+	declaration.
+
+2020-06-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_get_gdb_completer_word_break_characters): Delete.
+	(ada_language_data): Delete la_word_break_characters initializer.
+	(ada_language::word_break_characters): New member function.
+	* c-lang.c (c_language_data): Delete la_word_break_characters
+	initializer.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* completer.c: Update global comment.
+	(advance_to_expression_complete_word_point): Update call to
+	word_break_characters.
+	(complete_files_symbols): Likewise.
+	(complete_line_internal_1): Likewise.
+	(default_completer_handle_brkchars): Likewise.
+	(skip_quoted_chars): Likewise.
+	* d-lang.c (d_language_data): Delete la_word_break_characters
+	initializer.
+	* f-lang.c (f_word_break_characters): Delete.
+	(f_language_data): Delete la_word_break_characters initializer.
+	(f_language::word_break_characters): New member function.
+	* go-lang.c (go_language_data): Delete la_word_break_characters
+	initializer.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (default_word_break_characters): Move declaration to
+	earlier in the file.
+	(language_data): Delete la_word_break_characters field.
+	(language_defn::word_break_characters): New member function.
+	* m2-lang.c (m2_language_data): Delete la_word_break_characters
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-06-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_get_symbol_name_matcher): Update header comment.
+	(ada_language_data): Delete la_get_symbol_name_matcher
+	initializer.
+	(language_defn::get_symbol_name_matcher_inner): New member
+	function.
+	* c-lang.c (c_language_data): Delete la_get_symbol_name_matcher
+	initializer.
+	(cplus_language_data): Likewise.
+	(cplus_language::get_symbol_name_matcher_inner): New member
+	function.
+	(asm_language_data): Delete la_get_symbol_name_matcher initializer.
+	(minimal_language_data): Likewise.
+	* cp-support.h (cp_get_symbol_name_matcher): Update header comment.
+	* d-lang.c (d_language_data): Delete la_get_symbol_name_matcher
+	initializer.
+	* dictionary.c (iter_match_first_hashed): Update call to
+	get_symbol_name_matcher.
+	(iter_match_next_hashed): Likewise.
+	(iter_match_next_linear): Likewise.
+	* dwarf2/read.c (dw2_expand_symtabs_matching_symbol): Likewise.
+	* f-lang.c (f_language_data): Delete la_get_symbol_name_matcher
+	initializer.
+	(f_language::get_symbol_name_matcher_inner): New member function.
+	* go-lang.c (go_language_data): Delete la_get_symbol_name_matcher
+	initializer.
+	* language.c (default_symbol_name_matcher): Update header comment,
+	make static.
+	(language_defn::get_symbol_name_matcher): New definition.
+	(language_defn::get_symbol_name_matcher_inner): Likewise.
+	(get_symbol_name_matcher): Delete.
+	(unknown_language_data): Delete la_get_symbol_name_matcher
+	initializer.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_get_symbol_name_matcher
+	field.
+	(language_defn::get_symbol_name_matcher): New member function.
+	(language_defn::get_symbol_name_matcher_inner): Likewise.
+	(default_symbol_name_matcher): Delete declaration.
+	* linespec.c (find_methods): Update call to
+	get_symbol_name_matcher.
+	* m2-lang.c (m2_language_data): Delete la_get_symbol_name_matcher
+	initializer.
+	* minsyms.c (lookup_minimal_symbol): Update call to
+	get_symbol_name_matcher.
+	(iterate_over_minimal_symbols): Likewise.
+	* objc-lang.c (objc_language_data): Delete
+	la_get_symbol_name_matcher initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* psymtab.c (psymbol_name_matches): Update call to
+	get_symbol_name_matcher.
+	* rust-lang.c (rust_language_data): Delete
+	la_get_symbol_name_matcher initializer.
+	* symtab.c (symbol_matches_search_name): Update call to
+	get_symbol_name_matcher.
+	(compare_symbol_name): Likewise.
+
+2020-06-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_compute_program
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(c_language::compute_program): New member function.
+	(cplus_language_data): Delete la_compute_program initializer.
+	(cplus_language::compute_program): New member function.
+	(asm_language_data): Delete la_compute_program initializer.
+	(minimal_language_data): Likewise.
+	* c-lang.h (c_compute_program): Update comment.
+	(cplus_compute_program): Likewise.
+	* compile/compile-c-support.c (c_compute_program): Likewise.
+	(cplus_compute_program): Likewise.
+	* compile/compile.c (compile_to_object): Update call to
+	la_compute_program.
+	* d-lang.c (d_language_data): Delete la_compute_program
+	initializer.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_compute_program field.
+	(language_defn::compute_program): New member function.
+	* m2-lang.c (m2_language_data): Delete la_compute_program
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-06-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data) Delete
+	la_class_name_from_physname initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(cplus_language::class_name_from_physname): New member function.
+	(asm_language_data): Delete la_class_name_from_physname
+	initializer.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* dwarf2/read.c (guess_partial_die_structure_name): Update to call
+	method on language_defn class.
+	(guess_full_die_structure_name): Likewise.
+	* f-lang.c (f_language_data): Delete la_class_name_from_physname
+	initializer.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (language_class_name_from_physname): Delete.
+	(unk_lang_class_name): Delete.
+	(unknown_language_data): Delete la_class_name_from_physname
+	initializer.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_class_name_from_physname
+	field.
+	(language_defn::class_name_from_physname): New function.
+	(language_class_name_from_physname): Delete declaration.
+	* m2-lang.c (m2_language_data): Delete la_class_name_from_physname
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-06-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (STATUS_NAME): New macro.
+	* tui/tui-layout.c (tui_remove_some_windows)
+	(initialize_known_windows, tui_register_window)
+	(tui_layout_split::remove_windows, initialize_layouts)
+	(tui_new_layout_command): Don't use hard-coded window names.
+
+2020-06-16  Tom Tromey  <tom@tromey.com>
+
+	PR tui/25348:
+	* tui/tui.c (tui_ensure_readline_initialized): Rename from
+	tui_initialize_readline.  Only run once.  Call rl_initialize.
+	* tui/tui.h (tui_ensure_readline_initialized): Rename from
+	tui_initialize_readline.
+	* tui/tui-io.c (tui_setup_io): Call
+	tui_ensure_readline_initialized.
+	* tui/tui-interp.c (tui_interp::init): Update.
+
+2020-06-16  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (tui_layout_split::remove_windows): Fix logic.
+	Also preserve the status window.
+
+2020-06-16  Tom Tromey  <tom@tromey.com>
+
+	* python/py-tui.c (tui_py_window::~tui_py_window): Handle case
+	where m_window==nullptr.
+
+2020-06-15  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat::handle_output_debug_string):
+	Update.
+	(windows_nat::handle_ms_vc_exception): Update.
+	* target.h (target_read_string): Change API.
+	* target.c (target_read_string): Change API.
+	* solib-svr4.c (open_symbol_file_object, svr4_read_so_list):
+	Update.
+	* solib-frv.c (frv_current_sos): Update.
+	* solib-dsbt.c (dsbt_current_sos): Update.
+	* solib-darwin.c (darwin_current_sos): Update.
+	* linux-thread-db.c (inferior_has_bug): Update.
+	* expprint.c (print_subexp_standard): Update.
+	* ada-lang.c (ada_main_name, ada_tag_name_from_tsd)
+	(ada_exception_message_1): Update.
+
+2020-06-15  Tom Tromey  <tromey@adacore.com>
+
+	* linux-tdep.c (dump_mapping_p): Use target_read_memory.
+
+2020-06-15  Tom Tromey  <tromey@adacore.com>
+
+	* valprint.c (read_string): Update comment.
+	* target.c (MIN): Remove.
+	(target_read_string): Rewrite.
+
+2020-06-15  Tom Tromey  <tromey@adacore.com>
+
+	* corefile.c (read_memory_string): Remove.
+	* ada-valprint.c (ada_value_print_ptr): Update.
+	* ada-lang.h (ada_tag_name): Change return type.
+	* ada-lang.c (type_from_tag): Update.
+	(ada_tag_name_from_tsd): Change return type.  Use
+	target_read_string.
+	(ada_tag_name): Likewise.
+	* gdbcore.h (read_memory_string): Don't declare.
+
+2020-06-14  Hannes Domani  <ssbssa@yahoo.de>
+
+	* symtab.c (rbreak_command): Ignore Windows drive colon.
+
+2020-06-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* NEWS: Mention removed GDBserver host support.
+
+2020-06-12  Nelson Chu  <nelson.chu@sifive.com>
+
+	* features/riscv/rebuild-csr-xml.sh: Updated.
+
+2020-06-11  Tom Tromey  <tom@tromey.com>
+
+	PR gdb/18318:
+	* c-exp.y (lex_one_token): Handle 'p' like 'e'.
+
+2020-06-09  Jonny Grant  <jg@jguk.org>
+2020-06-09  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* main.c (captured_main_1): Don't print new line after help.
+	(print_gdb_help): add mailing list and IRC channel information
+	to --help.  Add new lines between items in the footer.  Remove
+	quotes around bug url.
+
+2020-06-11  Keith Seitz  <keiths@redhat.com>
+
+	PR gdb/21356
+	* gdbtypes.c (resolve_dynamic_union, resolve_dynamic_struct):
+	Resolve typedefs for type length calculations.
+
+2020-06-10  Tom de Vries  <tdevries@suse.de>
+
+	PR ada/24713
+	* dwarf2/index-write.c (struct mapped_symtab): Add m_string_obstack.
+	(write_psymbols): Enable .gdb_index for ada.
+	* dwarf2/read.c: Remove comment stating .gdb_index is unsupported for
+	ada.
+
+2020-06-10  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (dw2_symtab_iter_init_common): Factor out of ...
+	(dw2_symtab_iter_init): ... here.  Add variant with "offset_type
+	namei" instead of "const char *name" argument.
+	(dw2_map_matching_symbols): Use "offset_type namei" variant of
+	dw2_symtab_iter_init.
+
+2020-06-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_FIELD_TYPE): Remove.  Change all call sites
+	to use type::field and field::type instead.
+
+2020-06-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (FIELD_TYPE): Remove.  Change all call sites
+	to use field::type instead.
+
+2020-06-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct field) <type, set_type>: New methods.
+	Rename `type` field to...
+	<m_type>: ... this.  Change references throughout to use type or
+	set_type methods.
+	(FIELD_TYPE): Use field::type.  Change call sites that modify
+	the field's type to use field::set_type instead.
+
+2020-06-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_INDEX_TYPE): Remove.  Change all call sites
+	to use type::index_type instead.
+
+2020-06-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <index_type, set_index_type>: New
+	methods.
+	(TYPE_INDEX_TYPE): Use type::index_type.
+	* gdbtypes.c (create_array_type_with_stride): Likewise.
+
+2020-06-07  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_val_print_float): Remove "embedded_offset"
+	parameter.
+	(generic_value_print): Update.
+
+2020-06-05  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	Revert commit 982a38f60b0.
+	* python/py-tui.c (gdbpy_tui_set_title): Restore use of get.
+
+2020-06-05  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-tui.c (gdbpy_tui_set_title): Use release, not get, to
+	avoid use after free.
+
+2020-06-05  Tom de Vries  <tdevries@suse.de>
+
+	* NEWS: Fix typos.
+
+2020-06-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (dwarf2_read_gdb_index): Save partial_symtabs in
+	the per_bfd object.
+	(dwarf2_read_debug_names): Likewise.
+	(dwarf2_initialize_objfile): Use partial_symtabs from per_bfd
+	object when re-using a per_bfd object with an index.
+
+2020-06-03  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/26046
+	* dwarf2/read.c (scan_partial_symbols): Recurse into DW_TAG_subprogram
+	children for C++.
+	(load_partial_dies): Don't skip DW_TAG_inlined_subroutine child of
+	DW_TAG_subprogram.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete skip_trampoline
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(cplus_language::skip_trampoline): New member function.
+	(asm_language_data): Delete skip_trampoline initializer.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unk_lang_trampoline): Delete function.
+	(skip_language_trampoline): Update.
+	(unknown_language_data): Delete skip_trampoline initializer.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete skip_trampoline field.
+	(language_defn::skip_trampoline): New function.
+	* m2-lang.c (m2_language_data): Delete skip_trampoline
+	initializer.
+	* objc-lang.c (objc_skip_trampoline): Delete function, move
+	implementation to objc_language::skip_trampoline.
+	(objc_language_data): Delete skip_trampoline initializer.
+	(objc_language::skip_trampoline): New member function with
+	implementation from objc_skip_trampoline.
+	* opencl-lang.c (opencl_language_data): Delete skip_trampoline
+	initializer.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_demangle initializer.
+	(ada_language::demangle): New member function.
+	* c-lang.c (c_language_data): Delete la_demangle initializer.
+	(cplus_language_data): Delete la_demangle initializer.
+	(cplus_language::demangle): New member function.
+	(asm_language_data): Delete la_demangle initializer.
+	(minimal_language_data): Delete la_demangle initializer.
+	* d-lang.c (d_language_data): Delete la_demangle initializer.
+	(d_language::demangle): New member function.
+	* f-lang.c (f_language_data): Delete la_demangle initializer.
+	(f_language::demangle): New member function.
+	* go-lang.c (go_language_data): Delete la_demangle initializer.
+	(go_language::demangle): New member function.
+	* language.c (language_demangle): Update.
+	(unk_lang_demangle): Delete.
+	(unknown_language_data): Delete la_demangle initializer.
+	(unknown_language::demangle): New member function.
+	(auto_language_data): Delete la_demangle initializer.
+	(auto_language::demangle): New member function.
+	* language.h (language_data): Delete la_demangle field.
+	(language_defn::demangle): New function.
+	* m2-lang.c (m2_language_data): Delete la_demangle initializer.
+	* objc-lang.c (objc_language_data): Delete la_demangle
+	initializer.
+	(objc_language::demangle): New member function.
+	* opencl-lang.c (opencl_language_data): Delete la_demangle
+	initializer.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+	(rust_language::demangle): New member function.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_print_type
+	initializer.
+	(ada_language::print_type): New member function.
+	* c-lang.c (c_language_data): Delete la_print_type initializer.
+	(c_language::print_type): New member function.
+	(cplus_language_data): Delete la_print_type initializer.
+	(cplus_language::print_type): New member function.
+	(asm_language_data): Delete la_print_type initializer.
+	(asm_language::print_type): New member function.
+	(minimal_language_data): Delete la_print_type initializer.
+	(minimal_language::print_type): New member function.
+	* d-lang.c (d_language_data): Delete la_print_type initializer.
+	(d_language::print_type): New member function.
+	* f-lang.c (f_language_data): Delete la_print_type initializer.
+	(f_language::print_type): New member function.
+	* go-lang.c (go_language_data): Delete la_print_type initializer.
+	(go_language::print_type): New member function.
+	* language.c (unk_lang_print_type): Delete.
+	(unknown_language_data): Delete la_print_type initializer.
+	(unknown_language::print_type): New member function.
+	(auto_language_data): Delete la_print_type initializer.
+	(auto_language::print_type): New member function.
+	* language.h (language_data): Delete la_print_type field.
+	(language_defn::print_type): New function.
+	(LA_PRINT_TYPE): Update.
+	* m2-lang.c (m2_language_data): Delete la_print_type initializer.
+	(m2_language::print_type): New member function.
+	* objc-lang.c (objc_language_data): Delete la_print_type
+	initializer.
+	(objc_language::print_type): New member function.
+	* opencl-lang.c (opencl_print_type): Delete, implementation moved
+	to opencl_language::print_type.
+	(opencl_language_data): Delete la_print_type initializer.
+	(opencl_language::print_type): New member function, implementation
+	from opencl_print_type.
+	* p-lang.c (pascal_language_data): Delete la_print_type
+	initializer.
+	(pascal_language::print_type): New member function.
+	* rust-lang.c (rust_print_type): Delete, implementation moved to
+	rust_language::print_type.
+	(rust_language_data): Delete la_print_type initializer.
+	(rust_language::print_type): New member function, implementation
+	from rust_print_type.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_sniff_from_mangled_name): Delete function,
+	implementation moves to...
+	(ada_language::sniff_from_mangled_name): ...here.  Update return
+	type.
+	(ada_language_data): Delete la_sniff_from_mangled_name
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(cplus_language::sniff_from_mangled_name): New member function,
+	implementation taken from gdb_sniff_from_mangled_name.
+	(asm_language_data): Delete la_sniff_from_mangled_name
+	initializer.
+	(minimal_language_data): Likewise.
+	* cp-support.c (gdb_sniff_from_mangled_name): Delete,
+	implementation moves to cplus_language::sniff_from_mangled_name.
+	* cp-support.h (gdb_sniff_from_mangled_name): Delete declaration.
+	* d-lang.c (d_sniff_from_mangled_name): Delete, implementation
+	moves to...
+	(d_language::sniff_from_mangled_name): ...here.
+	(d_language_data): Delete la_sniff_from_mangled_name initializer.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_sniff_from_mangled_name): Delete, implementation
+	moves to...
+	(go_language::sniff_from_mangled_name): ...here.
+	(go_language_data): Delete la_sniff_from_mangled_name initializer.
+	* language.c (language_sniff_from_mangled_name): Delete.
+	(unknown_language_data): Delete la_sniff_from_mangled_name
+	initializer.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_sniff_from_mangled_name
+	field.
+	(language_defn::sniff_from_mangled_name): New function.
+	(language_sniff_from_mangled_name): Delete declaration.
+	* m2-lang.c (m2_language_data): Delete la_sniff_from_mangled_name
+	field.
+	* objc-lang.c (objc_sniff_from_mangled_name): Delete,
+	implementation moves to...
+	(objc_language::sniff_from_mangled_name): ...here.
+	(objc_language_data): Delete la_sniff_from_mangled_name initializer.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_sniff_from_mangled_name): Delete,
+	implementation moves to...
+	(rust_language::sniff_from_mangled_name): ...here.
+	(rust_language_data): Delete la_sniff_from_mangled_name
+	initializer.
+	* symtab.c (symbol_find_demangled_name): Call
+	sniff_from_mangled_name member function.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_search_name_hash
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(cplus_language::search_name_hash): New member function.
+	(asm_language_data): Delete la_search_name_hash initializer.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* dictionary.c (default_search_name_hash): Rename to...
+	(language_defn::search_name_hash): ...this.
+	* f-lang.c (f_language_data): Likewise.
+	(f_language::search_name_hash): New member function.
+	* go-lang.c (go_language_data): Delete la_search_name_hash
+	initializer.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (struct language_data): Delete la_search_name_hash
+	field.
+	(language_defn::search_name_hash): Declare new member function.
+	(default_search_name_hash): Delete declaration.
+	* m2-lang.c (m2_language_data): Delete la_search_name_hash
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+	* symtab.c (search_name_hash): Update call.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_get_compile_instance
+	initializer.
+	* c-lang.c (class compile_instance): Declare.
+	(c_language_data): Delete la_get_compile_instance initializer.
+	(c_language::get_compile_instance): New member function.
+	(cplus_language_data): Delete la_get_compile_instance initializer.
+	(cplus_language::get_compile_instance): New member function.
+	(asm_language_data): Delete la_get_compile_instance initializer.
+	(minimal_language_data): Likewise.
+	* c-lang.h (c_get_compile_context): Update comment.
+	(cplus_get_compile_context): Update comment.
+	* compile/compile.c (compile_to_object): Update calls, don't rely
+	on function pointer being NULL.
+	* d-lang.c (d_language_data): Delete la_get_compile_instance
+	initializer.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_get_compile_instance field.
+	(language_defn::get_compile_instance): New member function.
+	* m2-lang.c (m2_language_data): Delete la_get_compile_instance
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_add_all_symbols): Update comment.
+	(ada_iterate_over_symbols): Delete, move implementation to...
+	(ada_language::iterate_over_symbols): ...here, a new member
+	function, rewrite to use range based for loop.
+	(ada_language_data): Delete la_iterate_over_symbols initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(asm_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (language_data): Delete la_iterate_over_symbols field.
+	(language_defn::iterate_over_symbols): New member function.
+	(LA_ITERATE_OVER_SYMBOLS): Update.
+	* linespec.c (iterate_over_all_matching_symtabs): Update.
+	* m2-lang.c (m2_language_data): Delete la_iterate_over_symbols
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete
+	la_lookup_transparent_type initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(cplus_language::lookup_transparent_type): New member function.
+	(asm_language_data): Delete la_lookup_transparent_type
+	initializer.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Likewise.
+	(auto_language_data): Likewise.
+	* language.h (struct language_data): Delete
+	la_lookup_transparent_type field.
+	(language_defn::lookup_transparent_type): New member function.
+	* m2-lang.c (m2_language_data): Delete la_lookup_transparent_type
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+	* symtab.c (symbol_matches_domain): Update call.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_arch_info): Delete function, move
+	implementation to...
+	(ada_language::language_arch_info): ...here, a new member
+	function.
+	(ada_language_data): Delete la_language_arch_info.
+	* c-lang.c (c_language_data): Likewise.
+	(c_language::language_arch_info): New member function.
+	(cplus_language_arch_info): Delete function, move
+	implementation to...
+	(cplus_language::language_arch_info): ...here, a new member
+	function.
+	(cplus_language_data): Delete la_language_arch_info.
+	(asm_language_data): Likewise.
+	(asm_language::language_arch_info): New member function.
+	(minimal_language_data): Delete la_language_arch_info.
+	(minimal_language::language_arch_info): New member function.
+	* d-lang.c (d_language_arch_info): Delete function, move
+	implementation to...
+	(d_language::language_arch_info): ...here, a new member
+	function.
+	(d_language_data): Delete la_language_arch_info.
+	* f-lang.c (f_language_arch_info): Delete function, move
+	implementation to...
+	(f_language::language_arch_info): ...here, a new member
+	function.
+	(f_language_data): Delete la_language_arch_info.
+	* go-lang.c (go_language_arch_info): Delete function, move
+	implementation to...
+	(go_language::language_arch_info): ...here, a new member
+	function.
+	(go_language_data): Delete la_language_arch_info.
+	* language.c (unknown_language_data): Likewise.
+	(unknown_language::language_arch_info): New member function.
+	(auto_language_data): Delete la_language_arch_info.
+	(auto_language::language_arch_info): New member function.
+	(language_gdbarch_post_init): Update call to
+	la_language_arch_info.
+	* language.h (language_data): Delete la_language_arch_info
+	function pointer.
+	(language_defn::language_arch_info): New function.
+	* m2-lang.c (m2_language_arch_info): Delete function, move
+	implementation to...
+	(m2_language::language_arch_info): ...here, a new member
+	function.
+	(m2_language_data): Delete la_language_arch_info.
+	* objc-lang.c (objc_language_arch_info): Delete function, move
+	implementation to...
+	(objc_language::language_arch_info): ...here, a new member
+	function.
+	(objc_language_data): Delete la_language_arch_info.
+	* opencl-lang.c (opencl_language_arch_info): Delete function, move
+	implementation to...
+	(opencl_language::language_arch_info): ...here, a new member
+	function.
+	(opencl_language_data): Delete la_language_arch_info.
+	* p-lang.c (pascal_language_arch_info): Delete function, move
+	implementation to...
+	(pascal_language::language_arch_info): ...here, a new member
+	function.
+	(pascal_language_data): Delete la_language_arch_info.
+	* rust-lang.c (rust_language_arch_info): Delete function, move
+	implementation to...
+	(rust_language::language_arch_info): ...here, a new member
+	function.
+	(rust_language_data): Delete la_language_arch_info.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_language_data): Delete la_pass_by_reference
+	initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(cplus_language::pass_by_reference_info): New method.
+	(asm_language_data): Delete la_pass_by_reference initializer.
+	(minimal_language_data): Likewise.
+	* cp-abi.c (cp_pass_by_reference): Remove use of
+	default_pass_by_reference.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* gnu-v3-abi.c (gnuv3_pass_by_reference): Remove use of
+	default_pass_by_reference.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (language_pass_by_reference): Update.
+	(default_pass_by_reference): Delete.
+	(unknown_language_data): Delete la_pass_by_reference
+	initializer.
+	(auto_language_data): Likewise.
+	* language.h (struct language_data): Delete la_pass_by_reference
+	field.
+	(language_defn::pass_by_reference_info): New member function.
+	(default_pass_by_reference): Delete declaration.
+	* m2-lang.c (m2_language_data): Delete la_pass_by_reference
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_read_var_value): Delete function, move
+	implementation to...
+	(ada_language::read_var_value): ...here.
+	(ada_language_data): Delete la_read_var_value initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* findvar.c (default_read_var_value): Rename to...
+	(language_defn::read_var_value): ...this.
+	* findvar.c (read_var_value): Update header comment, and change to
+	call member function instead of function pointer.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (unknown_language_data): Delete la_read_var_value
+	initializer.
+	(auto_language_data): Likewise.
+	* language.h (struct language_data): Delete la_read_var_value
+	field.
+	(language_defn::read_var_value): New member function.
+	(default_read_var_value): Delete declaration.
+	* m2-lang.c (m2_language_data): Delete la_read_var_value
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+	* value.h (default_read_var_value): Delete declaration.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (ada_print_array_index): Delete function, move
+	implementation to...
+	(ada_language::print_array_index): ...here.
+	(ada_language_data): Delete la_print_array_index initializer.
+	* c-lang.c (c_language_data): Likewise.
+	(cplus_language_data): Likewise.
+	(minimal_language_data): Likewise.
+	* d-lang.c (d_language_data): Likewise.
+	* f-lang.c (f_language_data): Likewise.
+	* go-lang.c (go_language_data): Likewise.
+	* language.c (default_print_array_index): Delete function, move
+	implementation to...
+	(language_defn::print_array_index): ...here.
+	(unknown_language_data): Delete la_print_array_index initializer.
+	(auto_language_data): Likewise.
+	* language.h (struct language_data): Delete la_print_array_index
+	field.
+	(language_defn::print_array_index): New member function.
+	(LA_PRINT_ARRAY_INDEX): Update.
+	(default_print_array_index): Delete declaration.
+	* m2-lang.c (m2_language_data): Delete la_print_array_index
+	initializer.
+	* objc-lang.c (objc_language_data): Likewise.
+	* opencl-lang.c (opencl_language_data): Likewise.
+	* p-lang.c (pascal_language_data): Likewise.
+	* rust-lang.c (rust_language_data): Likewise.
+
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb/ada-lang.c (ada_language_defn): Convert to...
+	(ada_language_data): ...this.
+	(class ada_language): New class.
+	(ada_language_defn): New static global.
+	* gdb/c-lang.c (c_language_defn): Convert to...
+	(c_language_data): ...this.
+	(class c_language): New class.
+	(c_language_defn): New static global.
+	(cplus_language_defn): Convert to...
+	(cplus_language_data): ...this.
+	(class cplus_language): New class.
+	(cplus_language_defn): New static global.
+	(asm_language_defn): Convert to...
+	(asm_language_data): ...this.
+	(class asm_language): New class.
+	(asm_language_defn): New static global.
+	(minimal_language_defn): Convert to...
+	(minimal_language_data): ...this.
+	(class minimal_language): New class.
+	(minimal_language_defn): New static global.
+	* gdb/d-lang.c (d_language_defn): Convert to...
+	(d_language_data): ...this.
+	(class d_language): New class.
+	(d_language_defn): New static global.
+	* gdb/f-lang.c (f_language_defn): Convert to...
+	(f_language_data): ...this.
+	(class f_language): New class.
+	(f_language_defn): New static global.
+	* gdb/go-lang.c (go_language_defn): Convert to...
+	(go_language_data): ...this.
+	(class go_language): New class.
+	(go_language_defn): New static global.
+	* gdb/language.c (unknown_language_defn): Remove declaration.
+	(current_language): Initialize to nullptr, real initialization is
+	moved to _initialize_language.
+	(languages): Delete global.
+	(language_defn::languages): Define.
+	(set_language_command): Use language_defn::languages.
+	(set_language): Likewise.
+	(range_error): Likewise.
+	(language_enum): Likewise.
+	(language_def): Likewise.
+	(add_set_language_command): Use language_def::languages for the
+	language list, and language_def to lookup language pointers.
+	(skip_language_trampoline): Use language_defn::languages.
+	(unknown_language_defn): Convert to...
+	(unknown_language_data): ...this.
+	(class unknown_language): New class.
+	(unknown_language_defn): New static global.
+	(auto_language_defn): Convert to...
+	(auto_language_data): ...this.
+	(class auto_language): New class.
+	(auto_language_defn): New static global.
+	(language_gdbarch_post_init): Use language_defn::languages.
+	(_initialize_language): Initialize current_language.
+	* gdb/language.h (struct language_defn): Rename to...
+	(struct language_data): ...this.
+	(struct language_defn): New.
+	(auto_language_defn): Delete.
+	(unknown_language_defn): Delete.
+	(minimal_language_defn): Delete.
+	(ada_language_defn): Delete.
+	(asm_language_defn): Delete.
+	(c_language_defn): Delete.
+	(cplus_language_defn): Delete.
+	(d_language_defn): Delete.
+	(f_language_defn): Delete.
+	(go_language_defn): Delete.
+	(m2_language_defn): Delete.
+	(objc_language_defn): Delete.
+	(opencl_language_defn): Delete.
+	(pascal_language_defn): Delete.
+	(rust_language_defn): Delete.
+	* gdb/m2-lang.c (m2_language_defn): Convert to...
+	(m2_language_data): ...this.
+	(class m2_language): New class.
+	(m2_language_defn): New static global.
+	* gdb/objc-lang.c (objc_language_defn): Convert to...
+	(objc_language_data): ...this.
+	(class objc_language): New class.
+	(objc_language_defn): New static global.
+	* gdb/opencl-lang.c (opencl_language_defn): Convert to...
+	(opencl_language_data): ...this.
+	(class opencl_language): New class.
+	(opencl_language_defn): New static global.
+	* gdb/p-lang.c (pascal_language_defn): Convert to...
+	(pascal_language_data): ...this.
+	(class pascal_language): New class.
+	(pascal_language_defn): New static global.
+	* gdb/rust-exp.y (rust_lex_tests): Use language_def to find
+	language pointer, update comment format.
+	* gdb/rust-lang.c (rust_language_defn): Convert to...
+	(rust_language_data): ...this.
+	(class rust_language): New class.
+	(rust_language_defn): New static global.
+
+2020-06-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2/read.c (class lnp_state_machine) <m_last_address>: New
+	member variable.
+	<m_stmt_at_address>: New member variable.
+	(lnp_state_machine::record_line): Don't record some lines, update
+	tracking of is_stmt at the same address.
+	(lnp_state_machine::lnp_state_machine): Initialise new member
+	variables.
+
+2020-06-01  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* config/i386/i386gnu.mn [%_S.o %_U.o] (COMPILE.post): Add
+	"-include gnu-nat-mig.h".
+	* gnu-nat-mig.h: New file.
+	* gnu-nat.c: Include "gnu-nat-mig.h".
+	(exc_server, msg_reply_server, notify_server,
+	process_reply_server): Remove declarations.
+
+2020-05-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* gnu-nat.h (inf_validate_procs, inf_suspend, inf_set_traced,
+	steal_exc_port, proc_get_state, inf_clear_wait, inf_cleanup,
+	inf_startup, inf_update_suspends, inf_set_pid, inf_steal_exc_ports,
+	inf_validate_procinfo, inf_validate_task_sc, inf_restore_exc_ports,
+	inf_set_threads_resume_sc, inf_set_threads_resume_sc_for_signal_thread,
+	inf_resume, inf_set_step_thread, inf_detach, inf_attach, inf_signal,
+	inf_continue, make_proc, proc_abort, _proc_free, proc_update_sc,
+	proc_get_exception_port, proc_set_exception_port, _proc_get_exc_port,
+	proc_steal_exc_port, proc_restore_exc_port, proc_trace): Move functions
+	to gnu_nat_target class.
+	* gnu-nat.c: Likewise.
+	(inf_update_procs, S_proc_wait_reply, set_task_pause_cmd,
+	set_task_exc_port_cmd, set_signals_cmd, set_thread_pause_cmd,
+	set_thread_exc_port_cmd): Call inf_validate_procs through gnu_target
+	object.
+	(gnu_nat_target::create_inferior, gnu_nat_target::detach): Pass `this'
+	instead of `gnu_target'.
+
+2020-05-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* i386-gnu-tdep.c: Include "gdbcore.h"
+	(gnu_sigtramp_code, i386_gnu_sc_reg_offset): New arrays.
+	(GNU_SIGTRAMP_LEN, GNU_SIGTRAMP_TAIL,
+	I386_GNU_SIGCONTEXT_THREAD_STATE_OFFSET): New macros
+	(i386_gnu_sigtramp_start, i386_gnu_sigtramp_p,
+	i386_gnu_sigcontext_addr): New functions
+	(i386gnu_init_abi): Register i386_gnu_sigtramp_p,
+	i386_gnu_sigcontext_addr, and i386_gnu_sc_reg_offset in the gdbarch
+	tdep.
+
+2020-05-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* gnu-nat.c (gnu_nat_target::create_inferior): Move push_target call
+	before fork_inferior call. Avoid calling it if target_is_pushed returns
+	true.
+
+2020-05-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* gnu-nat.h (gnu_target): New variable declaration.
+	* i386-gnu-nat.c (_initialize_i386gnu_nat): Initialize
+	gnu_target.
+	* gnu-nat.c (gnu_target): New variable.
+	(inf_validate_procs): Pass gnu_target to thread_change_ptid,
+	add_thread_silent, and add_thread calls.
+	(gnu_nat_target::create_inferior): Pass gnu_target to
+	add_thread_silent, thread_change_ptid call.
+	(gnu_nat_target::detach): Pass gnu_target to detach_inferior
+	call.
+
+2020-05-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* gnu-nat.c (gnu_xfer_auxv): Remove unused `res' variable.
+	(gnu_nat_target::find_memory_regions): Remove unused
+	`old_address' variable.
+
+2020-05-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* gnu-nat.c: Include "gdbarch.h".
+
+2020-05-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* reply_mig_hack.awk (Error return): Cast function through
+	void *, to bypass compiler function call check.
+
+2020-05-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* config/i386/i386gnu.mn (%_reply_S.c): Add dependency on
+	$(srcdir)/reply_mig_hack.awk.
+
+2020-05-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* gnu-nat.h (gnu_debug_flag): Set type to bool.
+
+2020-05-30  Jonny Grant  <jg@jguk.org>
+
+	* configure.ac (ACX_BUGURL): change bug URL to https.
+
+2020-05-30  Pedro Alves  <palves@redhat.com>
+
+	* cp-support.c (replace_typedefs_template): New.
+	(replace_typedefs_qualified_name): Handle
+	DEMANGLE_COMPONENT_TEMPLATE.
+
+2020-05-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/comp-unit.c, dwarf2/comp-unit.h, dwarf2/index-cache.c,
+	dwarf2/index-cache.h, dwarf2/index-write.c,
+	dwarf2/index-write.h, dwarf2/line-header.c,
+	dwarf2/line-header.h, dwarf2/macro.c, dwarf2/macro.h,
+	dwarf2/read.c, dwarf2/read.h: Rename struct dwarf2_per_objfile
+	variables and fields from `dwarf2_per_objfile` to just
+	`per_objfile` throughout.
+
+2020-05-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/loc.c (class dwarf_evaluate_loc_desc)
+	<push_dwarf_reg_entry_value>: Add comment.
+
+2020-05-28  Kevin Buettner  <kevinb@redhat.com>
+	    Keith Seitz  <keiths@redhat.com>
+
+	* python/python.c (do_start_initialization): Call PyEval_SaveThread
+	instead of PyEval_ReleaseLock.
+	(class gdbpy_gil): Move to earlier in file.
+	(finalize_python): Set gdb_python_initialized.
+	(gdbpy_check_quit_flag): Acquire GIL via gdbpy_gil.  Return early
+	when not initialized.
+
+2020-05-28  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/loc.c (class dwarf_evaluate_loc_desc)
+	<push_dwarf_reg_entry_value>: Remove assert.  Override
+	per_objfile with caller_per_objfile.
+
+2020-05-28  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c	(dw2_symtab_iter_next, dw2_expand_marked_cus): Limit
+	PR gold/15646 workaround to symbol kind "type".
+
+2020-05-27  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (load_partial_dies): Use add_partial_symbol.
+
+2020-05-27  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/abbrev.h (struct abbrev_table) <lookup_abbrev>: Inline.
+	Use htab_find_with_hash.
+	<add_abbrev>: Remove "abbrev_number" parameter.
+	* dwarf2/abbrev.c (abbrev_table::add_abbrev): Remove
+	"abbrev_number" parameter.  Use htab_find_slot_with_hash.
+	(hash_abbrev): Add comment.
+	(abbrev_table::lookup_abbrev): Move to header file.
+	(abbrev_table::read): Update.
+
+2020-05-27  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (struct partial_die_info) <name>: Declare new
+	method.
+	<canonical_name>: New member.
+	<raw_name>: Rename from "name".
+	(partial_die_info): Initialize canonical_name.
+	(scan_partial_symbols): Check raw_name.
+	(partial_die_parent_scope, partial_die_full_name)
+	(add_partial_symbol, add_partial_subprogram)
+	(add_partial_enumeration, load_partial_dies): Use "name" method.
+	(partial_die_info::name): New method.
+	(partial_die_info::read, guess_partial_die_structure_name)
+	(partial_die_info::fixup): Update.
+
+2020-05-27  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/attribute.h (struct attribute) <form_is_ref>: Inline.
+	<get_ref_die_offset>: Inline.
+	<get_ref_die_offset_complaint>: New method.
+	* dwarf2/attribute.c (attribute::form_is_ref): Move to header.
+	(attribute::get_ref_die_offset_complaint): Rename from
+	get_ref_die_offset.  Just issue complaint.
+
+2020-05-27  Hannes Domani  <ssbssa@yahoo.de>
+
+	* cli/cli-cmds.c (shell_escape): Move exit_status_set_internal_vars.
+
+2020-05-27  Hannes Domani  <ssbssa@yahoo.de>
+
+	* exec.c (exec_file_attach): Use errno value of first openp failure.
+
+2020-05-27  Hannes Domani  <ssbssa@yahoo.de>
+
+	* nat/windows-nat.c (windows_thread_info::~windows_thread_info):
+	Don't close thread handle.
+
+2020-05-27  Tom Tromey  <tom@tromey.com>
+	    Simon Marchi  <simon.marchi@efficios.com>
+
+	* objfiles.h (struct objfile) <partial_symtabs>: Now a
+	shared_ptr.
+	* dwarf2/read.h (struct dwarf2_per_objfile) <partial_symtabs>: New
+	member.
+	* dwarf2/read.c (dwarf2_per_bfd_bfd_data_key,
+	dwarf2_per_bfd_objfile_data_key>: New globals.
+	(dwarf2_has_info): Use shared dwarf2_per_bfd if possible.
+	(dwarf2_get_section_info): Use get_dwarf2_per_objfile.
+	(dwarf2_initialize_objfile): Consider cases where per_bfd can be
+	shared.
+	(dwarf2_build_psymtabs): Set objfile::partial_symtabs and
+	short-circuit when sharing.
+	(dwarf2_build_psymtabs): Set dwarf2_per_objfile::partial_symtabs.
+	(dwarf2_psymtab::expand_psymtab): Use free_cached_comp_units.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_per_bfd) <line_header_hash>: Move
+	to...
+	(struct dwarf2_per_objfile) <line_header_hash>: ... here.
+	* dwarf2/read.c (handle_DW_AT_stmt_list): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (struct mapped_index_base) <symbol_name_at,
+	build_name_components, find_name_components_bounds>:
+	Add per_objfile parameter.
+	(struct mapped_index) <symbol_name_at>: Likewise.
+	(struct mapped_debug_names): Remove constructor.
+	<dwarf2_per_objfile>: Remove field.
+	<namei_to_name, symbol_name_at>: Add per_objfile parameter.
+	(mapped_index_base::find_name_components_bounds,
+	mapped_index_base::build_name_components,
+	dw2_expand_symtabs_matching_symbol): Likewise.
+	(class mock_mapped_index) <symbol_name_at>: Likewise.
+	(check_match): Likewise.
+	(check_find_bounds_finds): Likewise.
+	(test_mapped_index_find_name_component_bounds): Update.
+	(CHECK_MATCH): Update.
+	(dw2_expand_symtabs_matching): Update.
+	(class dw2_debug_names_iterator) <dw2_debug_names_iterator>: Add
+	per_objfile parameter.
+	<find_vec_in_debug_names>: Likewise.
+	<m_per_objfile>: New field.
+	(mapped_debug_names::namei_to_name): Add dwarf2_per_objfile
+	parameter.
+	(dw2_debug_names_iterator::find_vec_in_debug_names): Likewise.
+	(dw2_debug_names_iterator::next): Update.
+	(dw2_debug_names_lookup_symbol): Update.
+	(dw2_debug_names_expand_symtabs_for_function): Update.
+	(dw2_debug_names_map_matching_symbols): Update.
+	(dw2_debug_names_expand_symtabs_matching): Update.
+	(dwarf2_read_debug_names): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_cu): Forward-declare.
+	(struct dwarf2_per_bfd) <free_cached_comp_units>: Remove,
+	move to dwarf2_per_objfile.
+	<read_in_chain>: Remove.
+	(struct dwarf2_per_objfile) <get_cu, set_cu, remove_cu,
+	remove_all_cus, age_comp_units>: New methods.
+	<m_dwarf2_cus>: New member.
+	(struct dwarf2_per_cu_data) <cu>: Remove.
+	* dwarf2/read.c (struct dwarf2_cu) <read_in_chain>: Remove.
+	(age_cached_comp_units, free_one_cached_comp_unit): Remove,
+	moved to methods of dwarf2_per_objfile.
+	(dwarf2_clear_marks): Remove.
+	(dwarf2_queue_item::~dwarf2_queue_item): Update.
+	(dwarf2_per_bfd::~dwarf2_per_bfd): Don't free dwarf2_cus.
+	(dwarf2_per_bfd::free_cached_comp_units): Remove.
+	(dwarf2_per_objfile::remove_all_cus): New.
+	(class free_cached_comp_units) <~free_cached_comp_units>:
+	Update.
+	(load_cu): Update.
+	(dw2_do_instantiate_symtab): Adjust.
+	(fill_in_sig_entry_from_dwo_entry): Adjust.
+	(cutu_reader::init_tu_and_read_dwo_dies): Update.
+	(cutu_reader::cutu_reader): Likewise.
+	(cutu_reader::keep): Use dwarf2_per_objfile::set_cu.
+	(cutu_reader::cutu_reader): Use dwarf2_per_objfile::get_cu.
+	(process_psymtab_comp_unit): Use dwarf2_per_objfile::remove_cu
+	and dwarf2_per_objfile::age_comp_units.
+	(load_partial_comp_unit): Update.
+	(maybe_queue_comp_unit): Use dwarf2_per_objfile::get_cu.
+	(process_queue): Likewise.
+	(find_partial_die): Use dwarf2_per_objfile::get_cu instead of cu
+	backlink.
+	(dwarf2_read_addr_index): Likewise.
+	(follow_die_offset): Likewise.
+	(dwarf2_fetch_die_loc_sect_off): Likewise.
+	(dwarf2_fetch_constant_bytes): Likewise.
+	(dwarf2_fetch_die_type_sect_off): Likewise.
+	(follow_die_sig_1): Likewise.
+	(load_full_type_unit): Likewise.
+	(read_signatured_type): Likewise.
+	(dwarf2_cu::dwarf2_cu): Don't set cu field.
+	(dwarf2_cu::~dwarf2_cu): Remove.
+	(dwarf2_per_objfile::get_cu): New.
+	(dwarf2_per_objfile::set_cu): New.
+	(age_cached_comp_units): Rename to...
+	(dwarf2_per_objfile::age_comp_units): ... this.  Adjust
+	to std::unordered_map.
+	(free_one_cached_comp_unit): Rename to...
+	(dwarf2_per_objfile::remove_cu): ... this.  Adjust
+	to std::unordered_map.
+	(dwarf2_per_objfile::~dwarf2_per_objfile): New.
+	(dwarf2_mark_helper): Use dwarf2_per_objfile::get_cu, expect
+	a dwarf2_per_objfile in data.
+	(dwarf2_mark): Pass dwarf2_per_objfile in data to htab_traverse.
+	(dwarf2_clear_marks): Remove.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (class cutu_reader) <cutu_reader>: Replace
+	`int use_existing_cu` parameter with `dwarf2_cu *existing_cu`.
+	(init_tu_and_read_dwo_dies): Likewise.
+	(cutu_reader::init_tu_and_read_dwo_dies): Likewise.
+	(cutu_reader::cutu_reader): Likewise.
+	(load_partial_comp_unit): Likewise.
+	(process_psymtab_comp_unit): Update.
+	(build_type_psymtabs_1): Update.
+	(process_skeletonless_type_unit): Update.
+	(load_full_comp_unit): Update.
+	(find_partial_die): Update.
+	(dwarf2_read_addr_index): Update.
+	(read_signatured_type): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data) <m_header,
+	m_header_read_in>: New fields.
+	<get_header>: New method.
+	* dwarf2/read.c (per_cu_header_read_in): Remove.
+	(dwarf2_per_cu_data::get_header): New.
+	(dwarf2_per_cu_data::addr_size): Update.
+	(dwarf2_per_cu_data::offset_size): Update.
+	(dwarf2_per_cu_data::ref_addr_size): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (load_cu): Return dwarf2_cu.
+	(dw2_do_instantiate_symtab): Update.
+	(queue_and_load_all_dwo_tus): Change parameter from
+	dwarf2_per_cu_data to dwarf2_cu.
+	(dwarf2_fetch_die_loc_sect_off): Update.
+	(dwarf2_fetch_constant_bytes): Update.
+	(dwarf2_fetch_die_type_sect_off): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (process_full_comp_unit,
+	process_full_type_unit): Remove per_cu, per_objfile paramters.
+	Add dwarf2_cu parameter.
+	(process_queue): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (create_cu_from_index_list): Replace
+	dwarf2_per_objfile parameter with dwarf2_per_bfd.
+	(create_cus_from_index_list): Likewise.
+	(create_cus_from_index): Likewise.
+	(create_signatured_type_table_from_index): Likewise.
+	(create_cus_from_debug_names_list): Likewise.
+	(create_cus_from_debug_names): Likewise.
+	(dwarf2_read_gdb_index): Update.
+	(dwarf2_read_debug_names): Update.
+
+2020-05-27  Tom Tromey  <tom@tromey.com>
+	    Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_per_objfile)
+	<get_type_for_signatured_type, set_type_for_signatured_type>:
+	New methods.
+	<m_type_map>: New member.
+	(struct signatured_type) <type>: Remove.
+	* dwarf2/read.c
+	(dwarf2_per_objfile::get_type_for_signatured_type,
+	dwarf2_per_objfile::set_type_for_signatured_type): New.
+	(get_signatured_type): Use new methods.
+
+2020-05-27  Tom Tromey  <tom@tromey.com>
+	    Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct type_unit_group_unshareable): New.
+	(struct dwarf2_per_objfile) <type_units>: New member.
+	<get_type_unit_group_unshareable>: New method.
+	* dwarf2/read.c (struct type_unit_group) <compunit_symtab,
+	num_symtabs, symtabs>: Remove; move to
+	type_unit_group_unshareable.
+	(dwarf2_per_objfile::get_type_unit_group_unshareable): New.
+	(process_full_type_unit, dwarf2_cu::setup_type_unit_groups)
+	(dwarf2_cu::setup_type_unit_groups): Use type_unit_group_unshareable.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data):
+	<dwarf2_per_objfile>: Remove.
+	* dwarf2/read.c (create_cu_from_index_list): Don't assign
+	dwarf2_per_objfile.
+	(create_signatured_type_table_from_index): Likewise.
+	(create_signatured_type_table_from_debug_names): Likewise.
+	(create_debug_type_hash_table): Likewise.
+	(fill_in_sig_entry_from_dwo_entry): Likewise.
+	(create_type_unit_group): Likewise.
+	(read_comp_units_from_section): Likewise.
+	(create_cus_hash_table): Likewise.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (process_psymtab_comp_unit): Remove reference to
+	dwarf2_per_cu_data::dwarf2_per_objfile.
+	(compute_compunit_symtab_includes): Likewise.
+	(dwarf2_cu::start_symtab): Likewise.
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.h (dwarf2_get_die_type): Add dwarf2_per_objfile
+	parameter.
+	* dwarf2/read.c (get_die_type_at_offset): Likewise.
+	(read_namespace_alias): Update.
+	(lookup_die_type): Update.
+	(dwarf2_get_die_type): Add dwarf2_per_objfile parameter.
+	* dwarf2/loc.c (class dwarf_evaluate_loc_desc) <get_base_type>:
+	Update.
+	(disassemble_dwarf_expression): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_queue_item): Add
+	dwarf2_per_objfile parameter, assign new parameter.
+	<per_objfile>: New field.
+	* dwarf2/read.c (free_one_cached_comp_unit): Add
+	dwarf2_per_objfile parameter.
+	(queue_comp_unit): Likewise.
+	(dw2_do_instantiate_symtab): Update.
+	(process_psymtab_comp_unit): Update.
+	(maybe_queue_comp_unit): Add dwarf2_per_objfile parameter.
+	(process_imported_unit_die): Update.
+	(queue_and_load_dwo_tu): Update.
+	(follow_die_offset): Update.
+	(follow_die_sig_1): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data) <objfile>: Remove.
+	* dwarf2/read.c (dwarf2_compute_name): Pass per_objfile down.
+	(read_call_site_scope): Assign per_objfile.
+	(dwarf2_per_cu_data::objfile): Remove.
+	* gdbtypes.h (struct call_site) <per_objfile>: New member.
+	* dwarf2/loc.h (dwarf2_evaluate_loc_desc): Add
+	dwarf2_per_objfile parameter.
+	* dwarf2/loc.c (dwarf2_evaluate_loc_desc_full): Add
+	dwarf2_per_objfile parameter.
+	(dwarf_expr_reg_to_entry_parameter): Add output
+	dwarf2_per_objfile parameter.
+	(locexpr_get_frame_base): Update.
+	(class dwarf_evaluate_loc_desc) <get_tls_address>: Update.
+	<push_dwarf_reg_entry_value>: Update.
+	<call_site_to_target_addr>: Update.
+	(dwarf_entry_parameter_to_value): Add dwarf2_per_objfile
+	parameter.
+	(value_of_dwarf_reg_entry): Update.
+	(rw_pieced_value): Update.
+	(indirect_synthetic_pointer): Update.
+	(dwarf2_evaluate_property): Update.
+	(dwarf2_loc_desc_get_symbol_read_needs): Add dwarf2_per_objfile
+	parameter.
+	(locexpr_read_variable): Update.
+	(locexpr_get_symbol_read_needs): Update.
+	(loclist_read_variable): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (dwarf2_fetch_die_loc_sect_off,
+	dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
+	dwarf2_fetch_die_type_sect_off): Add dwarf2_per_objfile
+	parameter.
+	* dwarf2/read.c (dwarf2_fetch_die_loc_sect_off,
+	dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
+	dwarf2_fetch_die_type_sect_off): Add dwarf2_per_objfile
+	parameter.
+	* dwarf2/loc.c (indirect_synthetic_pointer, per_cu_dwarf_call,
+	sect_variable_value): Add dwarf2_per_objfile parameter.
+	(class dwarf_evaluate_loc_desc) <dwarf_call,
+	dwarf_variable_value>: Update.
+	(fetch_const_value_from_synthetic_pointer): Add
+	dwarf2_per_objfile parameter.
+	(fetch_const_value_from_synthetic_pointer): Update.
+	(coerced_pieced_ref): Update.
+	(class symbol_needs_eval_context) <dwarf_call,
+	dwarf_variable_value>: Update.
+	(dwarf2_compile_expr_to_ax): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/loc.c (allocate_piece_closure): Add dwarf2_per_objfile
+	parameter.
+	(dwarf2_evaluate_loc_desc_full): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (dwarf2_read_addr_index): Add dwarf2_per_objfile
+	parameter.
+	* dwarf2/read.c (dwarf2_read_addr_index): Likewise.
+	* dwarf2/loc.c (decode_debug_loclists_addresses): Add
+	dwarf2_per_objfile parameter.
+	(decode_debug_loc_dwo_addresses): Likewise.
+	(dwarf2_find_location_expression): Update.
+	(class dwarf_evaluate_loc_desc) <get_addr_index>: Update.
+	(locexpr_describe_location_piece): Add dwarf2_per_objfile
+	parameter.
+	(disassemble_dwarf_expression): Add dwarf2_per_objfile
+	parameter.
+	(locexpr_describe_location_1): Likewise.
+	(locexpr_describe_location): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data) <text_offset>:
+	Remove.
+	* dwarf2/read.c (dwarf2_per_cu_data::text_offset): Remove.
+	* dwarf2/loc.c (dwarf2_find_location_expression): Update.
+	(dwarf2_compile_property_to_c): Update.
+	(dwarf2_compile_expr_to_ax): Add dwarf2_per_objfile parameter,
+	use text offset from objfile.
+	(locexpr_tracepoint_var_ref): Update.
+	(locexpr_generate_c_location): Update.
+	(loclist_describe_location): Update.
+	(loclist_tracepoint_var_ref): Update.
+	* dwarf2/compile.h (compile_dwarf_bounds_to_c): Add
+	dwarf2_per_objfile parameter.
+	* dwarf2/loc2c.c (do_compile_dwarf_expr_to_c): Likewise,
+	use text offset from objfile.
+	(compile_dwarf_expr_to_c): Add dwarf2_per_objfile parameter.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/expr.h (struct dwarf_expr_context)
+	<dwarf_expr_context>: Add dwarf2_per_objfile parameter.
+	<offset>: Remove.
+	<per_objfile>: New member.
+	* dwarf2/expr.c (dwarf_expr_context::dwarf_expr_context): Add
+	dwarf2_per_objfile parameter.  Don't set offset, set
+	per_objfile.
+	(dwarf_expr_context::execute_stack_op): Use offset from objfile.
+	* dwarf2/frame.c (dwarf2_frame_find_fde): Return (by parameter)
+	a dwarf2_per_objfile object instead of an offset.
+	(class dwarf_expr_executor) <dwarf_expr_executor>: Add
+	constructor.
+	(execute_stack_op): Add dwarf2_per_objfile parameter, pass it
+	to dwarf2_expr_executor constructor.  Don't set offset.
+	(dwarf2_fetch_cfa_info): Update.
+	(struct dwarf2_frame_cache) <text_offset>: Remove.
+	<per_objfile>: New field.
+	(dwarf2_frame_cache): Update.
+	(dwarf2_frame_prev_register): Update.
+	* dwarf2/loc.c (class dwarf_evaluate_loc_desc)
+	<dwarf_evaluate_loc_desc>: Add constructor.
+	(dwarf2_evaluate_loc_desc_full): Update.
+	(dwarf2_locexpr_baton_eval): Update.
+	(class symbol_needs_eval_context) <symbol_needs_eval_context>:
+	Add constructor.
+	(dwarf2_loc_desc_get_symbol_read_needs): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data) <addr_type,
+	addr_sized_int_type>: Move to dwarf2_cu.
+	<int_type>: Move to dwarf2_per_objfile.
+	(struct dwarf2_per_objfile) <int_type>: Move here.
+	* dwarf2/read.c (struct dwarf2_cu) <addr_type,
+	addr_sized_int_type>: Move here.
+	(read_func_scope): Update.
+	(read_array_type): Update.
+	(read_tag_string_type): Update.
+	(attr_to_dynamic_prop): Update.
+	(dwarf2_per_cu_data::int_type): Rename to...
+	(dwarf2_per_objfile::int_type): ... this.
+	(dwarf2_per_cu_data::addr_sized_int_type): Rename to...
+	(dwarf2_cu::addr_sized_int_type): ... this.
+	(read_subrange_type): Update.
+	(dwarf2_per_cu_data::addr_type): Rename to...
+	(dwarf2_cu::addr_type): ... this.
+	(set_die_type): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (queue_and_load_all_dwo_tus): Access per_objfile
+	data through per_cu->cu.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (lookup_dwo_comp_unit): Change
+	dwarf2_per_cu_data parameter fo dwarf2_cu.
+	(lookup_dwo_type_unit): Likewise.
+	(read_cutu_die_from_dwo): Likewise.
+	(lookup_dwo_unit): Likewise.
+	(open_and_init_dwo_file): Likewise.
+	(lookup_dwo_cutu): Likewise.
+	(lookup_dwo_comp_unit): Likewise.
+	(lookup_dwo_type_unit): Likewise.
+	(cutu_reader::init_tu_and_read_dwo_dies): Update.
+	(cutu_reader::cutu_reader): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (process_full_comp_unit): Add dwarf2_per_objfile
+	parameter.
+	(process_full_type_unit): Likewise.
+	(process_queue): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (recursively_compute_inclusions): Add
+	dwarf2_per_objfile parameter.
+	(compute_compunit_symtab_includes): Likewise.
+	(process_cu_includes): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (create_partial_symtab): Add dwarf2_per_objfile
+	parameter.
+	(create_type_unit_group): Update.
+	(process_psymtab_comp_unit_reader): Update.
+	(build_type_psymtabs_reader): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (cutu_reader::keep): Access dwarf2_per_objfile
+	object through m_this_cu->cu.
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (queue_and_load_dwo_tu): Expect a dwarf2_cu as
+	the info parameter.
+	(queue_and_load_all_dwo_tus): Pass per_cu->cu.
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (class cutu_reader) <cutu_reader>: Add
+	per_objfile parameter.
+	(load_full_type_unit): Add per_objfile parameter.
+	(read_signatured_type): Likewise.
+	(load_full_comp_unit): Likewise.
+	(load_cu): Likewise.
+	(dw2_do_instantiate_symtab): Likewise.
+	(dw2_get_file_names): Likewise.
+	(dw2_map_symtabs_matching_filename): Update.
+	(dw_expand_symtabs_matching_file_matcher): Update.
+	(dw2_map_symbol_filenames): Update.
+	(process_psymtab_comp_unit): Add per_objfile parameter.
+	(build_type_psymtabs_1): Update.
+	(process_skeletonless_type_unit): Update.
+	(dwarf2_build_psymtabs_hard): Update.
+	(load_partial_comp_unit): Add per_objfile parameter.
+	(scan_partial_symbols): Update.
+	(load_full_comp_unit): Add per_objfile parameter.
+	(process_imported_unit_die): Update.
+	(create_cus_hash_table): Update.
+	(find_partial_die): Update.
+	(dwarf2_read_addr_index): Update.
+	(follow_die_offset): Update.
+	(dwarf2_fetch_die_loc_sect_off): Update.
+	(dwarf2_fetch_constant_bytes): Update.
+	(dwarf2_fetch_die_type_sect_off): Update.
+	(follow_die_sig_1): Update.
+	(load_full_type_unit): Add per_objfile parameter.
+	(read_signatured_type): Likewise.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (lookup_dwo_unit): Use bfd_get_filename instead
+	of objfile_name.
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.h (struct dwarf2_per_bfd) <obfd>: New member.
+	(dwarf2_get_dwz_file): Replace parameter with dwarf2_per_bfd.
+	* dwarf2/read.c (dwarf2_per_bfd::dwarf2_per_bfd): Assign obfd
+	field.
+	(dwarf2_get_dwz_file): Replace parameter with dwarf2_per_bfd.
+	(create_cus_from_index): Update.
+	(dwarf2_read_gdb_index): Update.
+	(create_cus_from_debug_names): Update.
+	(dwarf2_read_debug_names): Update.
+	(get_abbrev_section_for_cu): Update.
+	(create_all_comp_units): Update.
+	(read_attribute_value): Update.
+	(get_debug_line_section): Update.
+	* dwarf2/index-cache.c (index_cache::store): Update.
+	* dwarf2/index-write.c (save_gdb_index_command): Update.
+	* dwarf2/macro.c (dwarf_decode_macro_bytes): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data) <per_bfd>: New
+	member.
+	* dwarf2/read.c (dwarf2_per_bfd::allocate_per_cu): Initialize
+	dwarf2_per_cu_data::per_bfd.
+	(dwarf2_per_bfd::allocate_signatured_type): Likewise.
+	(create_type_unit_group): Likewise.
+	(queue_comp_unit): Remove reference to
+	per_cu->dwarf2_per_objfile.
+	(maybe_queue_comp_unit): Likewise.
+	(fill_in_sig_entry_from_dwo_entry): Assign new field.
+	(create_cus_hash_table): Assign new field.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c: Replace
+	dwarf2_cu->per_cu->dwarf2_per_objfile references with
+	dwarf2_cu->per_objfile throughout.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (dw2_do_instantiate_symtab): Add per_objfile
+	parameter, don't use per_cu->dwarf2_per_objfile.
+	(dw2_instantiate_symtab): Likewise.
+	(dw2_find_last_source_symtab): Update.
+	(dw2_map_expand_apply): Update.
+	(dw2_lookup_symbol): Update.
+	(dw2_expand_symtabs_for_function): Update.
+	(dw2_expand_all_symtabs): Update.
+	(dw2_expand_symtabs_with_fullname): Update.
+	(dw2_expand_symtabs_matching_one): Add per_objfile parameter,
+	don't use per_cu->dwarf2_per_objfile.
+	(dw2_expand_marked_cus): Update.
+	(dw2_find_pc_sect_compunit_symtab): Update.
+	(dw2_debug_names_lookup_symbol): Update.
+	(dw2_debug_names_expand_symtabs_for_function): Update.
+	(dw2_debug_names_map_matching_symbols): Update.
+	(dwarf2_psymtab::expand_psymtab): Update.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (struct dwarf2_cu) <dwarf2_cu>: Add parameter.
+	<per_objfile>: New member.
+	(class cutu_reader) <init_tu_and_read_dwo_dies>: Add parameter.
+	(cutu_reader::init_tu_and_read_dwo_dies): Add parameter, update
+	call to dwarf2_cu.
+	(cutu_reader::cutu_reader): Update.
+	(dwarf2_cu::dwarf2_cu): Add parameter, initialize per_objfile.
+
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_per_bfd) <die_type_hash>: Move to
+	struct dwarf2_per_objfile.
+	(struct dwarf2_per_objfile) <die_type_hash>: Move from struct
+	dwarf2_per_bfd.
+	* dwarf2/read.c (set_die_type): Update.
+	(get_die_type_at_offset): Update.
+
+2020-05-27  Tom Tromey  <tom@tromey.com>
+	    Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.h (struct dwarf2_per_bfd) <num_psymtabs>: New
+	method.
+	(struct dwarf2_per_objfile) <resize_symtabs, symtab_set_p,
+	get_symtab, set_symtab>: New methods.
+	<m_symtabs>: New field.
+	(struct dwarf2_psymtab): Derive from partial_symtab.
+	<readin_p, get_compunit_symtab>: Declare methods.
+	* dwarf2/read.c (dwarf2_per_objfile::symtab_set_p,
+	dwarf2_per_objfile::get_symtab, dwarf2_per_objfile::set_symtab):
+	New methods.
+	(struct dwarf2_per_cu_quick_data) <compunit_symtab>: Remove.
+	(dw2_do_instantiate_symtab, dw2_instantiate_symtab)
+	(dw2_map_expand_apply, dw2_map_symtabs_matching_filename)
+	(dw2_symtab_iter_next, dw2_print_stats)
+	(dw2_expand_symtabs_with_fullname)
+	(dw2_expand_symtabs_matching_one)
+	(dw_expand_symtabs_matching_file_matcher)
+	(dw2_find_pc_sect_compunit_symtab, dw2_map_symbol_filenames)
+	(dw2_debug_names_iterator::next)
+	(dw2_debug_names_map_matching_symbols)
+	(fill_in_sig_entry_from_dwo_entry, dwarf2_psymtab::read_symtab)
+	(process_queue, dwarf2_psymtab::expand_psymtab): Update.
+	(dwarf2_psymtab::readin_p, dwarf2_psymtab::get_compunit_symtab):
+	New methods.
+	(get_compunit_symtab, process_full_comp_unit)
+	(process_full_type_unit): Update.
+	(dwarf2_build_psymtabs, dwarf2_initialize_objfile, add_type_unit): Call
+
+2020-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.h (dwarf2_per_objfile): Rename to dwarf2_per_bfd,
+	then introduce a new dwarf2_per_objfile type.
+	<read_line_string>: Move to the new dwarf2_per_objfile type.
+	<objfile>: Likewise.
+	(dwarf2_per_bfd): Rename dwarf2_per_objfile to this.
+	* dwarf2/read.c: Replace references to dwarf2_per_objfile with
+	dwarf2_per_objfile->per_bfd.
+	(dwarf2_per_objfile::dwarf2_per_objfile): Rename to...
+	(dwarf2_per_bfd::dwarf2_per_bfd): ... this.
+	(dwarf2_per_objfile::free_cached_comp_units): Rename to...
+	(dwarf2_per_bfd::free_cached_comp_units): ... this.
+	(dwarf2_has_info): Allocate dwarf2_per_bfd.
+	(dwarf2_per_objfile::locate_sections): Rename to...
+	(dwarf2_per_bfd::locate_sections): ... this.
+	(dwarf2_per_objfile::get_cutu): Rename to...
+	(dwarf2_per_bfd::get_cutu): ... this.
+	(dwarf2_per_objfile::get_cu): Rename to...
+	(dwarf2_per_bfd::get_cu): ... this.
+	(dwarf2_per_objfile::get_tu): Rename to...
+	(dwarf2_per_bfd::get_tu): ... this.
+	(dwarf2_per_objfile::allocate_per_cu): Rename to...
+	(dwarf2_per_bfd::allocate_per_cu): ... this.
+	(dwarf2_per_objfile::allocate_signatured_type): Rename to...
+	(dwarf2_per_bfd::allocate_signatured_type): ... this.
+	(get_gdb_index_contents_ftype): Change parameter from
+	dwarf2_per_objfile to dwarf2_per_bfd.
+	* dwarf2/macro.c, dwarf2/index-write.c: Replace references to
+	dwarf2_per_objfile with dwarf2_per_objfile->per_bfd.
+
+2020-05-27  Tom Tromey  <tom@tromey.com>
+	    Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/loc.c (struct piece_closure) <per_objfile>: New member.
+	(allocate_piece_closure): Set "per_objfile" member.
+	(dwarf2_find_location_expression, dwarf2_locexpr_baton_eval)
+	(locexpr_describe_location, loclist_describe_location): Use new
+	member.
+	* dwarf2/read.c (read_call_site_scope)
+	(mark_common_block_symbol_computed, attr_to_dynamic_prop)
+	(dwarf2_const_value_attr, dwarf2_fetch_die_loc_sect_off)
+	(fill_in_loclist_baton, dwarf2_symbol_mark_computed,
+	handle_data_member_location): Set per_objfile member.
+	* dwarf2/loc.h (struct dwarf2_locexpr_baton) <per_objfile>: New
+	member.
+	(struct dwarf2_loclist_baton) <per_objfile>: New member.
+
+2020-05-27  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_objfile) <allocate_per_cu,
+	allocate_signatured_type>: Declare new methods.
+	<m_num_psymtabs>: New member.
+	(struct dwarf2_per_cu_data) <index>: New member.
+	* dwarf2/read.c (dwarf2_per_objfile::allocate_per_cu)
+	(dwarf2_per_objfile::allocate_signatured_type): New methods.
+	(create_cu_from_index_list): Use allocate_per_cu.
+	(create_signatured_type_table_from_index)
+	(create_signatured_type_table_from_debug_names)
+	(create_debug_type_hash_table, add_type_unit)
+	(read_comp_units_from_section): Use allocate_signatured_type.
+
+2020-05-27  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (partial_map_expand_apply)
+	(psym_find_pc_sect_compunit_symtab, psym_lookup_symbol)
+	(psym_lookup_global_symbol_language)
+	(psymtab_to_symtab, psym_find_last_source_symtab, dump_psymtab)
+	(psym_print_stats, psym_expand_symtabs_for_function)
+	(psym_map_symbol_filenames, psym_map_matching_symbols)
+	(psym_expand_symtabs_matching)
+	(partial_symtab::read_dependencies, maintenance_info_psymtabs)
+	(maintenance_check_psymtabs): Update.
+	* psympriv.h (struct partial_symtab) <readin_p,
+	get_compunit_symtab>: Add objfile parameter.
+	(struct standard_psymtab) <readin_p, get_compunit_symtab>:
+	Likewise.
+	* dwarf2/read.c (struct dwarf2_include_psymtab) <readin_p,
+	get_compunit_symtab>: Likewise.
+	(dwarf2_psymtab::expand_psymtab): Pass objfile argument.
+
+2020-05-27  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_objfile) <obstack>: New
+	member.
+	* dwarf2/read.c (delete_file_name_entry): Fix comment.
+	(create_cu_from_index_list)
+	(create_signatured_type_table_from_index)
+	(create_signatured_type_table_from_debug_names)
+	(dw2_get_file_names_reader, dwarf2_initialize_objfile)
+	(dwarf2_create_include_psymtab)
+	(create_debug_type_hash_table, add_type_unit)
+	(create_type_unit_group, read_comp_units_from_section)
+	(dwarf2_compute_name, create_cus_hash_table)
+	(create_dwp_hash_table, create_dwo_unit_in_dwp_v1)
+	(create_dwo_unit_in_dwp_v2, open_and_init_dwp_file): Use new
+	obstack.
+	(dw2_get_real_path): Likewise.  Change argument to
+	dwarf2_per_objfile.
+
+2020-05-27  Luis Machado  <luis.machado@linaro.org>
+
+	PR tdep/26000
+	* arm-tdep.c (thumb_analyze_prologue): Fix instruction matching
+	for ldrd (immediate).
+
+2020-05-26  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* command.h: Add comment giving the name of class_tui.
+	* cli/cli-cmds.c (_initialize_cli_cmds): If TUI defined,
+	create the fake command for the help for class_tui.
+
+2020-05-26  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_print_array_index): Change type.  Call val_atr.
+	(ada_value_ptr_subscript): Don't call pos_atr on the lower bound.
+	(val_atr): New function.
+	(value_val_atr): Use it.
+	* ada-valprint.c (print_optional_low_bound): Change low bound
+	handling for enums.
+	(val_print_packed_array_elements): Don't call discrete_position.
+	* gdbtypes.c (get_discrete_bounds) <TYPE_CODE_RANGE>: Call
+	discrete_position for enum types.
+	* language.c (default_print_array_index): Change type.
+	* language.h (struct language_defn) <la_print_array_index>: Add
+	index_type parameter, change type of index_value.
+	(LA_PRINT_ARRAY_INDEX): Add index_type parameter.
+	(default_print_array_index): Update.
+	* valprint.c (maybe_print_array_index): Don't call
+	value_from_longest.  Update.
+	(value_print_array_elements): Don't call discrete_position.
+
+2020-05-26  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (value_val_atr): Handle TYPE_CODE_RANGE.
+	* gdbtypes.c (discrete_position): Handle TYPE_CODE_RANGE.
+
+2020-05-25  Cristiano De Alti  <cristiano_dealti@hotmail.com>
+
+	PR gdb/13519
+	* avr-tdep.c (avr_integer_to_address): Return data or code
+	address accordingly to the second 'type' argument of the
+	function.
+
+2020-05-25  Michael Weghorn  <m.weghorn@posteo.de>
+
+	* infcmd.c, inferior.h: (construct_inferior_arguments):
+	Moved function from here to gdbsupport/common-inferior.{h,cc}
+
+2020-05-23  Tom Tromey  <tom@tromey.com>
+
+	Revert commit eca1f90c:
+	* NEWS: Remove entry for completion styling.
+	* completer.c (_rl_completion_prefix_display_length): Move
+	declaration later.
+	(gdb_fnprint): Revert.
+	(gdb_display_match_list_1): Likewise.
+	* cli/cli-style.c (completion_prefix_style)
+	(completion_difference_style, completion_suffix_style): Remove.
+	(_initialize_cli_style): Revert.
+	* cli/cli-style.h (completion_prefix_style)
+	(completion_difference_style, completion_suffix_style): Don't
+	declare.
+
+2020-05-24  Pedro Alves  <palves@redhat.com>
+
+	* symtab.c (completion_list_add_name): Return boolean indication
+	of whether the symbol matched.
+	(completion_list_add_symbol): Don't try to remove C++ aliases if
+	the symbol didn't match in the first place.
+	* symtab.h (completion_list_add_name): Return bool.
+
+2020-05-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (TYPE_FIELD): Remove.  Replace all uses with
+	type::field.
+
+2020-05-23  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 9.2 released.
+
+2020-05-23  Tom Tromey  <tom@tromey.com>
+
+	* NEWS: Add entry for completion styling.
+	* completer.c (_rl_completion_prefix_display_length): Move
+	declaration earlier.
+	(gdb_fnprint): Use completion_style.
+	(gdb_display_match_list_1): Likewise.
+	* cli/cli-style.c (completion_prefix_style)
+	(completion_difference_style, completion_suffix_style): New
+	globals.
+	(_initialize_cli_style): Register new globals.
+	* cli/cli-style.h (completion_prefix_style)
+	(completion_difference_style, completion_suffix_style): Declare.
+
+2020-05-23  Pedro Alves  <palves@redhat.com>
+
+	* utils.c: Include "gdbsupport/gdb-safe-ctype.h".
+	(parse_escape): Use ISDIGIT instead of isdigit.
+	(puts_debug): Use gdb_isprint instead of isprint.
+	(fprintf_symbol_filtered): Use ISALNUM instead of isalnum.
+	(cp_skip_operator_token, skip_ws, strncmp_iw_with_mode): Use
+	ISSPACE instead of isspace.
+	(strncmp_iw_with_mode): Use TOLOWER instead of tolower and ISSPACE
+	instead of isspace.
+	(strcmp_iw_ordered): Use ISSPACE instead of isspace.
+	(string_to_core_addr): Use TOLOWER instead of tolower, ISXDIGIT
+	instead of isxdigit and ISDIGIT instead of isdigit.
+
+2020-05-22  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <field>: New method.
+	(TYPE_FIELDS): Remove, replace all uses with either type::fields
+	or type::field.
+
+2020-05-22  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <fields, set_fields>: New methods.
+	(TYPE_FIELDS): Use type::fields.  Change all call sites that
+	modify the propery to use type::set_fields instead.
+
+2020-05-22  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_NFIELDS): Remove.  Change all cal sites to use
+	type::num_fields instead.
+
+2020-05-22  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <num_fields, set_num_fields>: New
+	methods.
+	(TYPE_NFIELDS): Use type::num_fields.  Change all call sites
+	that modify the number of fields to use type::set_num_fields
+	instead.
+
+2020-05-22  Tom Tromey  <tromey@adacore.com>
+
+	* compile/compile-object-load.h (munmap_list_free): Don't
+	declare.
+
+2020-05-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* annotate.c (annotate_source_line): Update return type, add call
+	to update current symtab and line.
+	* annotate.h (annotate_source_line): Update return type, and
+	extend header comment.
+	* source.c (info_line_command): Check annotation_level before
+	calling annotate_source_line.
+	* stack.c (print_frame_info): If calling annotate_source_line
+	returns true, then don't print any other source line information.
+
+2020-05-21  Simon Marchi  <simon.marchi@efficios.com>
+
+	* lm32-tdep.c (lm32_register_reggroup_p): Fix condition.
+
+2020-05-21  Simon Marchi  <simon.marchi@efficios.com>
+
+	* coffread.c (patch_type): Remove NULL check before xfree.
+	* corefile.c (set_gnutarget): Likewise.
+	* cp-abi.c (set_cp_abi_as_auto_default): Likewise.
+	* exec.c (build_section_table): Likewise.
+	* remote.c (remote_target::pass_signals): Likewise.
+	* utils.c (n_spaces): Likewise.
+	* cli/cli-script.c (document_command): Likewise.
+	* i386-windows-tdep.c (core_process_module_section): Likewise.
+	* linux-fork.c (struct fork_info) <~fork_info>: Likewise.
+
+2020-05-20  Simon Marchi  <simon.marchi@efficios.com>
+
+	* symfile.c (reread_symbols): Clear objfile's section_offsets
+	vector and section indices, re-compute them by calling
+	sym_offsets.
+
+2020-05-20  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (bound_name, MAX_ADA_DIMENS): Remove.
+	(desc_one_bound, desc_index_type): Compute field name.
+
+2020-05-20  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25833
+	* dwarf2/read.c (dw2_map_matching_symbols): Handle .gdb_index.
+
+2020-05-20  Alan Modra  <amodra@gmail.com>
+
+	PR 25993
+	* solib-darwin.c (darwin_bfd_open): Don't strdup pathname for
+	bfd_set_filename.
+	* solib-aix.c (solib_aix_bfd_open): Use std::string for name
+	passed to bfd_set_filename.
+	* symfile-mem.c (add_vsyscall_page): Likewise for string
+	passed to symbol_file_add_from_memory.
+	(symbol_file_add_from_memory): Make name param a const char* and
+	don't strdup.
+
+2020-05-20  Alan Modra  <amodra@gmail.com>
+
+	* coff-pe-read.c (read_pe_exported_syms): Use bfd_get_filename
+	rather than accessing bfd->filename directly.
+	* dtrace-probe.c (dtrace_static_probe_ops::get_probes): Likewise,
+	and use bfd_section_name.
+	* dwarf2/frame.c (decode_frame_entry): Likewise.
+	* exec.c (exec_set_section_address): Likewise.
+	* solib-aix.c (solib_aix_bfd_open): Likewise.
+	* stap-probe.c (get_stap_base_address): Likewise.
+	* symfile.c (reread_symbols): Likewise.
+
+2020-05-19  Tom Tromey  <tromey@adacore.com>
+
+	* sparc64-tdep.c (adi_tag_fd): Update call to target_fileio_open.
+
+2020-05-19  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (quirk_rust_enum): Allocate enough fields.
+
+2020-05-19  Pedro Alves  <palves@redhat.com>
+
+	* NEWS (set exec-file-mismatch): Adjust entry.
+	* exec.c: Include "build-id.h".
+	(validate_exec_file): Try to match build IDs instead of filenames.
+	* gdb_bfd.c (struct gdb_bfd_open_closure): New.
+	(gdb_bfd_iovec_fileio_open): Adjust to use gdb_bfd_open_closure
+	and pass down 'warn_if_slow'.
+	(gdb_bfd_open): Add 'warn_if_slow' parameter.  Use
+	gdb_bfd_open_closure to pass it down.
+	* gdb_bfd.h (gdb_bfd_open): Add 'warn_if_slow' parameter.
+
+2020-05-19  Pedro Alves  <palves@redhat.com>
+
+	* gdb_bfd.c (gdb_bfd_iovec_fileio_open): Adjust.
+	* target.c (target_fileio_open_1): Rename to target_fileio_open
+	and make extern.  Use bool.
+	(target_fileio_open, target_fileio_open_warn_if_slow): Delete.
+	(target_fileio_read_alloc_1): Adjust.
+	* target.h (target_fileio_open): Add 'warn_if_slow' parameter.
+	(target_fileio_open_warn_if_slow): Delete declaration.
+
+2020-05-19  Pedro Alves  <palves@redhat.com>
+
+	* gdb_bfd.h: (gdb_bfd_open): Default to 'fd' parameter to -1.
+	Adjust all callers.
+
+2020-05-19  Yoshinori Sato  <ysato@users.sourceforge.jp>
+
+	* h8300-tdep.c (h8300_is_argument_spill): Change how we check
+	whether disp is negative.
+
+2020-05-19  Simon Marchi  <simon.marchi@efficios.com>
+
+	* symfile.h (struct symfile_segment_data)
+	<~symfile_segment_data>: Remove.
+	<segment_info>: Change to std::vector.
+	* symfile.c (default_symfile_segments): Update.
+	* elfread.c (elf_symfile_segments): Update.
+
+2020-05-19  Simon Marchi  <simon.marchi@efficios.com>
+
+	* symfile.h (struct symfile_segment_data) <struct segment>: New.
+	<segments>: New.
+	<segment_bases, segment_sizes>: Remove.
+	* symfile.c (default_symfile_segments): Update.
+	* elfread.c (elf_symfile_segments): Update.
+	* remote.c (remote_target::get_offsets): Update.
+	* solib-target.c (solib_target_relocate_section_addresses):
+	Update.
+
+2020-05-19  Simon Marchi  <simon.marchi@efficios.com>
+
+	* symfile.h (struct symfile_segment_data): Initialize fields.
+	<~symfile_segment_data>: Add.
+	(symfile_segment_data_up): New.
+	(struct sym_fns) <sym_segments>: Return a
+	symfile_segment_data_up.
+	(default_symfile_segments): Return a symfile_segment_data_up.
+	(free_symfile_segment_data): Remove.
+	(get_symfile_segment_data): Return a symfile_segment_data_up.
+	* symfile.c (default_symfile_segments): Likewise.
+	(get_symfile_segment_data): Likewise.
+	(free_symfile_segment_data): Remove.
+	(symfile_find_segment_sections): Update.
+	* elfread.c (elf_symfile_segments): Return a
+	symfile_segment_data_up.
+	* remote.c (remote_target::get_offsets): Update.
+	* solib-target.c (solib_target_relocate_section_addresses):
+	Update.
+	* symfile-debug.c (debug_sym_segments): Return a
+	symfile_segment_data_up.
+
+2020-05-18  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	PR build/25981
+	* i386-sol2-nat.c [PR_MODEL_NATIVE != PR_MODEL_LP64] (regmap):
+	Hardcode register numbers.
+
+	PR build/25981
+	* procfs.c [(__i386__ || __x86_64__) && sun] (proc_get_LDT_entry,
+	procfs_find_LDT_entry): Remove.
+	* procfs.h [(__i386__ || __x86_64__) && sun] (struct ssd,
+	procfs_find_LDT_entry): Remove.
+	* sol-thread.c [(__i386__ || __x86_64__) && sun] (ps_lgetLDT):
+	Remove.
+
+2020-05-17  Pedro Alves  <palves@redhat.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Keno Fischer  <keno@juliacomputing.com>
+
+	PR gdb/25741
+	* breakpoint.c (build_target_condition_list): Update comments.
+	(build_target_command_list): Update comments and skip matching
+	locations.
+	(insert_bp_location): Move "set breakpoint auto-hw on" handling to
+	a separate function.  Simplify "set breakpoint auto-hw off"
+	handling.
+	(insert_breakpoints): Update comment.
+	(tracepoint_locations_match): New parameter.  For breakpoints,
+	compare location types too, if the caller wants to.
+	(handle_automatic_hardware_breakpoints): New functions.
+	(bp_location_is_less_than): Also sort by location type and
+	hardware breakpoint length.
+	(update_global_location_list): Handle "set breakpoint auto-hw on"
+	here.
+	(update_breakpoint_locations): Ask breakpoint_locations_match to
+	ignore location types.
+
+2020-05-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_NAME): Remove.  Change all cal sites to use
+	type::name instead.
+
+2020-05-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <name, set_name>: New methods.
+	(TYPE_CODE): Use type::name.  Change all call sites used to set
+	the name to use type::set_name instead.
+
+2020-05-16  Tom Tromey  <tom@tromey.com>
+
+	* top.c (quit_force): Update.
+	* infrun.c (handle_no_resumed): Update.
+	* top.h (all_uis): New function.
+	(ALL_UIS): Remove.
+
+2020-05-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* mips-linux-tdep.c (mips_linux_in_dynsym_stub): Fix condition.
+
+2020-05-16  Pedro Alves  <palves@redhat.com>
+
+	* ia64-linux-nat.c
+	(ia64_linux_nat_target) <enable_watchpoints_in_psr(ptid_t)>:
+	Declare method.
+	(enable_watchpoints_in_psr): Now a method of ia64_linux_nat_target.
+
+2020-05-15  Simon Marchi  <simon.marchi@efficios.com>
+
+	* sparc64-tdep.c (adi_stat_t): Remove typedef (leaving struct).
+	(sparc64_adi_info): Likewise.
+
+2020-05-15  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (lookup_language_this, lookup_symbol_aux): Use
+	block_objfile.
+	(lookup_objfile_from_block): Remove.
+	(lookup_symbol_in_block, lookup_symbol_in_static_block)
+	(lookup_global_symbol): Use block_objfile.
+	* symtab.h (lookup_objfile_from_block): Don't declare.
+	* printcmd.c (clear_dangling_display_expressions): Use
+	block_objfile.
+	* parse.c (operator_check_standard): Use block_objfile.
+
+2020-05-15  Tom Tromey  <tom@tromey.com>
+
+	* language.c (language_alloc_type_symbol): Set
+	SYMBOL_SECTION.
+	* symtab.c (initialize_objfile_symbol): Remove.
+	(allocate_symbol): Remove.
+	(allocate_template_symbol): Remove.
+	* dwarf2/read.c (fixup_go_packaging): Use "new".
+	(new_symbol): Use "new".
+	(read_variable): Don't call initialize_objfile_symbol.  Use
+	"new".
+	(read_func_scope): Use "new".
+	* xcoffread.c (process_xcoff_symbol): Don't call
+	initialize_objfile_symbol.
+	(SYMBOL_DUP): Remove.
+	* coffread.c (process_coff_symbol, coff_read_enum_type): Use
+	"new".
+	* symtab.h (allocate_symbol, initialize_objfile_symbol)
+	(allocate_template_symbol): Don't declare.
+	(struct symbol): Add copy constructor.  Change defaults.
+	* jit.c (finalize_symtab): Use "new".
+	* ctfread.c (ctf_add_enum_member_cb, new_symbol, ctf_add_var_cb):
+	Use "new".
+	* stabsread.c (patch_block_stabs, define_symbol, read_enum_type)
+	(common_block_end): Use "new".
+	* mdebugread.c (parse_symbol): Use "new".
+	(new_symbol): Likewise.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Mention changes to help and apropos.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* command.h (enum command_class): Improve comments, document
+	that class_alias is for user-defined aliases, give the class
+	name for each class, remove unused class_xdb.
+	* cli/cli-decode.c (add_com_alias): Document THECLASS intended usage.
+	* breakpoint.c (_initialize_breakpoint): Replace class_alias
+	by a precise class.
+	* infcmd.c (_initialize_infcmd): Likewise.
+	* reverse.c (_initialize_reverse): Likewise.
+	* stack.c (_initialize_stack): Likewise.
+	* symfile.c (_initialize_symfile): Likewise.
+	* tracepoint.c (_initialize_tracepoint): Likewise.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-decode.c (apropos_cmd): Produce output for aliases
+	when their aliased command is traversed.
+	(help_cmd): Add fput_command_names_styled call to
+	output command name and aliases when command has an alias.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-decode.h (help_cmd_list): Remove declaration.
+	* cli/cli-decode.c (help_cmd_list): Declare as static,
+	remove prefix argument, use bool for recurse arg, rework to show the aliases of
+	a command together with the command.
+	(fput_command_name_styled, fput_command_names_styled): New functions.
+	(print_help_for_command): Remove prefix arg, use bool for recurse arg, use
+	fput_command_name_styled.
+	(help_list, help_all): Update callers to remove prefix arg and use bool recurse.
+	* cli/cli-cmds.c (_initialize_cli_cmds): Update alias_command doc.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-setshow.h (cmd_show_list): Remove prefix argument.
+	* cli/cli-decode.c (do_show_prefix_cmd): Likewise.
+	* command.h (cmd_show_list): Likewise.
+	* dwarf2/index-cache.c (show_index_cache_command): Likewise.
+	* cli/cli-setshow.c (cmd_show_list): Use the prefix to produce the output.  Skip aliases.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* unittests/command-def-selftests.c (traverse_command_structure):
+	Verify all commands of a list have the same prefix command and
+	that only the top cmdlist commands have a null prefix.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-decode.c (lookup_cmd_for_prefix): Return the aliased command
+	as prefix, not one of its aliases.
+	(set_cmd_prefix): Remove.
+	(do_add_cmd): Centralize the setting of the prefix of a command, when
+	command is defined after its full chain of prefix commands.
+	(add_alias_cmd): Remove call to set_cmd_prefix, as do_add_cmd does it.
+	(add_setshow_cmd_full): Likewise.
+	(update_prefix_field_of_prefixed_commands): New function.
+	(add_prefix_cmd): Replace non working call to set_cmd_prefix by
+	update_prefix_field_of_prefixed_commands.
+	* gdb/remote-fileio.c (initialize_remote_fileio): Use the real
+	addresses of remote_set_cmdlist and remote_show_cmdlist given
+	as argument, not the address of an argument.
+	* gdb/remote-fileio.h (initialize_remote_fileio): Likewise.
+	* gdb/remote.c (_initialize_remote): Likewise.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-cmds.c (alias_command): Check for an existing alias
+	using lookup_cmd_composition, as valid_command_p is too strict
+	and forbids aliases that are the prefix of an existing alias
+	or command.
+	* cli/cli-decode.c (lookup_cmd_composition): Ensure a prefix
+	command is properly recognised as a valid command.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* unittests/help-doc-selftests.c: Rename to
+	unittests/command-def-selftests.c
+	* unittests/command-def-selftests.c (help_doc_tests): Update some
+	comments.
+	(command_structure_tests, traverse_command_structure): New namespace
+	and function.
+	(command_structure_invariants_tests): New function.
+	(_initialize_command_def_selftests) Renamed from
+	_initialize_help_doc_selftests, register command_structure_invariants
+	selftest.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-cmds.c (_initialize_cli_cmds): Define 'info set' as
+	an alias of 'show'.
+
+2020-05-15  Joel Brobecker  <brobecker@adacore.com>
+
+	* ada-lang.h: (ada_is_gnat_encoded_fixed_point_type): Renames
+	ada_is_fixed_point_type.  Update all callers.
+	(gnat_encoded_fixed_point_delta): Renames ada_delta.  Update
+	all callers.
+	* ada-lang.c (gnat_encoded_fixed_type_info): Renames fixed_type_info.
+	Update all callers.
+	* ada-typeprint.c (print_gnat_encoded_fixed_point_type): Renames
+	print_fixed_point_type.  Update all callers.
+	* ada-valprint.c (ada_value_print_num): Replace call to
+	ada_is_fixed_point_type by ada_is_gnat_encoded_fixed_point_type.
+
+2020-05-14  Kevin Buettner  <kevinb@redhat.com>
+
+	* nat/linux-btrace.c (btrace_this_cpu): Add check for AMD
+	processors.
+	(cpu_supports_bts): Add CV_AMD case.
+
+2020-05-14  Laurent Morichetti  <Laurent.Morichetti@amd.com>
+	    Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.c (stop_all_threads): Collect multiple wait events at
+	each pass.
+
+2020-05-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_CODE): Remove.  Change all call sites to use
+	type::code instead.
+
+2020-05-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <code, set_code>: New methods.
+	(TYPE_CODE): Use type::code.  Change all call sites used to set
+	the code to use type::set_code instead.
+
+2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+	    Tom de Vries  <tdevries@suse.de>
+	    Pedro Alves  <palves@redhat.com>
+
+	PR threads/25478
+	* infrun.c (stop_all_threads): Do NOT ignore
+	TARGET_WAITKIND_NO_RESUMED, TARGET_WAITKIND_THREAD_EXITED,
+	TARGET_WAITKIND_EXITED, TARGET_WAITKIND_SIGNALLED wait statuses
+	received.
+	(handle_no_resumed): Remove code handling a live inferior with no
+	threads.
+	* remote.c (has_single_non_exited_thread): New.
+	(remote_target::update_thread_list): Do not delete a thread if is
+	the last thread of the process.
+	* thread.c (thread_select): Call delete_exited_threads instead of
+	prune_threads.
+
+2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infrun.c (stop_all_threads): Enable/disable thread events of all
+	targets.  Move a debug message denoting the end of the function
+	into the SCOPED_EXIT block.
+
+2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* process-stratum-target.h: Include <set>.
+	(all_non_exited_process_targets, switch_to_target_no_thread): New
+	function declarations.
+	* process-stratum-target.c (all_non_exited_process_targets)
+	(switch_to_target_no_thread): New function implementations.
+
+2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infrun.c (handle_inferior_event): Extract out a piece of code
+	into...
+	(mark_non_executing_threads): ...this new function.
+
+2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infrun.c (resume_1): Move a 'regcache_read_pc' call down to first
+	use.
+
+2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* regcache.c (regcache_read_pc_protected): New function
+	implementation that returns 0 if the PC cannot read via
+	'regcache_read_pc'.
+	* infrun.c (proceed): Call 'regcache_read_pc_protected'
+	instead of 'regcache_read_pc'.
+	(keep_going_pass_signal): Ditto.
+
+2020-05-13  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (align_value): Remove.
+	(ada_template_to_fixed_record_type_1): Use align_up.
+
+2020-05-13  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* async-event.c: Update the copyright year.
+	* async-event.h: Update the copyright year.
+
+2020-05-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* objfiles.h (is_addr_in_objfile,
+	shared_objfile_contains_address_p): Return bool.
+	* objfile.c (is_addr_in_objfile,
+	shared_objfile_contains_address_p): Return bool.
+
+2020-05-11  Tom Tromey  <tromey@adacore.com>
+
+	* cli/cli-cmds.c (info_command): Restore.
+	(_initialize_cli_cmds): Use add_prefix_command for "info".
+	* gdb-gdb.gdb.in: Restore breakpoint on info_command.
+
+2020-05-11  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_value_primitive_field): Now public.
+	* ada-lang.h (ada_value_primitive_field): Declare.
+	* ada-valprint.c (print_field_values): Use
+	ada_value_primitive_field for wrapper fields.
+
+2020-05-11  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/index-write.c (debug_names::psymbol_tag): Handle
+	MODULE_DOMAIN.
+
+2020-05-11  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25941
+	* dwarf2/read.c (create_cus_from_debug_names_list): Initialize CUs
+	with length 0, if not gdb-produced.
+	(cutu_reader::cutu_reader): Set CU length to actual length if 0.
+
+2020-05-09  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/25955
+	* break-catch-throw.c (check_status_exception_catchpoint): Fix name
+	calculation.
+
+2020-05-09  Tom Tromey  <tom@tromey.com>
+
+	* top.c (server_command): Now bool.
+	* top.h (server_command): Now bool.
+
+2020-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (read_lexical_block_scope): Don't process a DIE
+	already being processed.
+
+2020-05-08  Tom Tromey  <tom@tromey.com>
+
+	* printcmd.c (struct display) <next>: Remove.
+	<display>: New constructor.
+	<exp_string>: Now a std::string.
+	<enabled_p>: Now a bool.
+	(display_number): Move definition earlier.
+	(displays): Rename from display_chain.  Now a std::vector.
+	(ALL_DISPLAYS, ALL_DISPLAYS_SAFE): Remove.
+	(display_command): Update.
+	(do_one_display, disable_display)
+	(enable_disable_display_command, do_enable_disable_display):
+	Update.
+	(free_display): Remove.
+	(clear_displays): Rewrite.
+	(delete_display): Update.
+	(map_display_numbers): Use function_view.  Remove "data"
+	parameter.  Update.
+	(do_delete_display): Remove.
+	(undisplay_command): Update.
+	(do_one_display, do_displays, disable_display)
+	(info_display_command): Update.
+	(do_enable_disable_display): Remove.
+	(enable_disable_display_command)
+	(clear_dangling_display_expressions): Update.
+
+2020-05-08  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (set_symbol_cache_size)
+	(maintenance_print_symbol_cache, maintenance_flush_symbol_cache)
+	(maintenance_print_symbol_cache_statistics): Update.
+	* symmisc.c (print_symbol_bcache_statistics)
+	(print_objfile_statistics, maintenance_print_objfiles)
+	(maintenance_info_symtabs, maintenance_check_symtabs)
+	(maintenance_expand_symtabs, maintenance_info_line_tables):
+	Update.
+	* symfile-debug.c (set_debug_symfile): Update.
+	* source.c (forget_cached_source_info): Update.
+	* python/python.c (gdbpy_progspaces): Update.
+	* psymtab.c (maintenance_info_psymtabs): Update.
+	* probe.c (parse_probes): Update.
+	* linespec.c (iterate_over_all_matching_symtabs)
+	(collect_symtabs_from_filename, search_minsyms_for_name): Update.
+	* guile/scm-progspace.c (gdbscm_progspaces): Update.
+	* exec.c (exec_target::close): Update.
+	* ada-tasks.c (ada_tasks_new_objfile_observer): Update.
+	* breakpoint.c (print_one_breakpoint_location)
+	(create_longjmp_master_breakpoint)
+	(create_std_terminate_master_breakpoint): Update.
+	* progspace.c (program_spaces): Now a std::vector.
+	(maybe_new_address_space): Update.
+	(add_program_space): Remove.
+	(program_space::program_space): Update.
+	(remove_program_space): Update.
+	(number_of_program_spaces): Remove.
+	(print_program_space, update_address_spaces): Update.
+	* progspace.h (program_spaces): Change type.
+	(ALL_PSPACES): Remove.
+	(number_of_program_spaces): Don't declare.
+	(struct program_space) <next>: Remove.
+
+2020-05-08  Tom Tromey  <tom@tromey.com>
+
+	* mi/mi-cmd-file.c (mi_cmd_file_list_shared_libraries): Update.
+	* solib-svr4.c (svr4_fetch_objfile_link_map): Update.
+	(enable_break): Update.
+	* solib-frv.c (frv_fdpic_find_global_pointer): Update.
+	(frv_fdpic_find_canonical_descriptor): Update.
+	(frv_fetch_objfile_link_map): Update.
+	* progspace.c (program_space::free_all_objfiles): Update.
+	(program_space::solibs): New method.
+	* progspace.h (struct program_space) <solibs>: New method.
+	* solist.h (master_so_list): Don't declare.
+	(ALL_SO_LIBS): Remove.
+	* solib.h (so_list_head): Remove.
+	(update_solib_list): Update comment.
+	* solib.c (master_so_list): Remove.
+	(solib_used, update_solib_list, solib_add)
+	(info_sharedlibrary_command, clear_solib)
+	(reload_shared_libraries_1, remove_user_added_objfile): Update.
+
+2020-05-08  Tom Tromey  <tom@tromey.com>
+
+	* extension.c (extension_languages): Now a std::array.
+	(ALL_EXTENSION_LANGUAGES): Remove.
+	(get_ext_lang_defn, get_ext_lang_of_file)
+	(eval_ext_lang_from_control_command): Update.
+	(finish_ext_lang_initialization)
+	(auto_load_ext_lang_scripts_for_objfile)
+	(ext_lang_type_printers::ext_lang_type_printers)
+	(apply_ext_lang_type_printers)
+	(ext_lang_type_printers::~ext_lang_type_printers)
+	(apply_ext_lang_val_pretty_printer, apply_ext_lang_frame_filter)
+	(preserve_ext_lang_values, get_breakpoint_cond_ext_lang)
+	(breakpoint_ext_lang_cond_says_stop, check_quit_flag)
+	(get_matching_xmethod_workers, ext_lang_colorize)
+	(ext_lang_before_prompt): Update.
+	(ALL_ENABLED_EXTENSION_LANGUAGES): Remove.
+
+2020-05-08  Tom Tromey  <tom@tromey.com>
+
+	* symtab.h (class demangle_result_storage) <set_malloc_ptr>: New
+	overload.
+	<swap_string, m_string>: Remove.
+	* symtab.c (demangle_for_lookup, completion_list_add_symbol):
+	Update.
+	* stabsread.c (define_symbol, read_type): Update.
+	* linespec.c (find_linespec_symbols): Update.
+	* gnu-v3-abi.c (gnuv3_get_typeid): Update.
+	* dwarf2/read.c (dwarf2_canonicalize_name): Update.
+	* dbxread.c (read_dbx_symtab): Update.
+	* cp-support.h (cp_canonicalize_string_full)
+	(cp_canonicalize_string, cp_canonicalize_string_no_typedefs):
+	Return unique_xmalloc_ptr.
+	* cp-support.c (inspect_type): Update.
+	(cp_canonicalize_string_full): Return unique_xmalloc_ptr.
+	(cp_canonicalize_string_no_typedefs, cp_canonicalize_string):
+	Likewise.
+	* c-typeprint.c (print_name_maybe_canonical): Update.
+	* break-catch-throw.c (check_status_exception_catchpoint):
+	Update.
+
+2020-05-08  Tom de Vries  <tdevries@suse.de>
+
+	* infrun.c (follow_fork): Copy current_line and current_symtab to
+	child thread.
+
+2020-05-07  Simon Marchi  <simon.marchi@efficios.com>
+
+	* async-event.c (struct async_signal_handler, struct
+	async_event_handler): Reformat, remove typedef.
+
+2020-05-07  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_DYN_PROP_LIST): Remove.  Update all users
+	access thistype->main_type->dyn_prop_list directly.
+
+2020-05-07  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <remove_dyn_prop>: New method.
+	(remove_dyn_prop): Remove.  Update all users to use
+	type::remove_dyn_prop.
+	* gdbtypes.c (remove_dyn_prop): Rename to...
+	(type::remove_dyn_prop): ... this.
+
+2020-05-07  Simon Marchi via Gdb-patches  <gdb-patches@sourceware.org>
+
+	* gdbtypes.h (struct type) <add_dyn_prop>: New method.
+	(add_dyn_prop): Remove.  Update all users to use
+	type::add_dyn_prop.
+	* gdbtypes.c (add_dyn_prop): Rename to...
+	(type::add_dyn_prop): ... this.
+
+2020-05-07  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <get_dyn_prop>: New method.
+	(get_dyn_prop): Remove.  Update all users to use
+	type::dyn_prop.
+	* gdbtypes.c (get_dyn_prop): Rename to...
+	(type::dyn_prop): ... this.
+
+2020-05-06  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct main_type) <flag_static>: Remove.
+
+2020-05-06  Simon Marchi  <simon.marchi@efficios.com>
+
+	* amd64-tdep.c (amd64_analyze_prologue): Check for `endbr64`
+	instruction, skip it if it's there.
+
+2020-05-05  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct main_type) <flag_incomplete>: Remove.
+
+2020-05-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_INCOMPLETE): Remove.
+	* gdbtypes.c (recursive_dump_type): Remove use of
+	TYPE_INCOMPLETE.
+
+2020-05-03  Tom Tromey  <tom@tromey.com>
+
+	* breakpoint.c (catch_command, tcatch_command): Remove.
+	(_initialize_breakpoint): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	(set_breakpoint_cmd, show_breakpoint_cmd): Remove
+	* utils.c (set_internal_problem_cmd, show_internal_problem_cmd):
+	Remove.
+	(add_internal_problem_command): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* mips-tdep.c (set_mipsfpu_command): Remove.
+	(_initialize_mips_tdep): Use add_basic_prefix_cmd.
+	* dwarf2/index-cache.c (set_index_cache_command): Remove.
+	(_initialize_index_cache): Use add_basic_prefix_cmd.
+	* memattr.c (dummy_cmd): Remove.
+	(_initialize_mem): Use add_basic_prefix_cmd, add_show_prefix_cmd.
+	* tui/tui-win.c (set_tui_cmd, show_tui_cmd): Remove.
+	(_initialize_tui_win): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* cli/cli-logging.c (set_logging_command): Remove.
+	(_initialize_cli_logging): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	(show_logging_command): Remove.
+	* target.c (target_command): Remove.
+	(add_target): Use add_basic_prefix_cmd.
+
+2020-05-02  Hannes Domani  <ssbssa@yahoo.de>
+
+	* gdbtypes.h (enum dynamic_prop_node_kind): Fix typo.
+
+2020-05-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb-gdb.gdb-in: Remove breakpoint on disappeared function
+	info_command.
+
+2020-04-30  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c (nbsd_enable_proc_events)
+	(nbsd_nat_target::post_startup_inferior): Add.
+	(nbsd_nat_target::post_attach): Call `nbsd_enable_proc_events'.
+	(nbsd_nat_target::update_thread_list): Rewrite.
+	(nbsd_nat_target::wait): Handle "PTRACE_LWP_EXIT" and
+	"PTRACE_LWP_CREATE".
+	* nbsd-nat.h (nbsd_nat_target::post_startup_inferior): Add.
+
+2020-04-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* stack.c (_initialize_stack): Remove duplicated creation
+	of "frame" command and "f" alias.
+
+2020-04-30  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR gdb/18706
+	* gdbtypes.c (check_typedef): Calculate size of array of
+	stubbed type.
+
+2020-04-30  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR gdb/15559
+	* i386-tdep.c (i386_push_dummy_call): Call
+	i386_thiscall_push_dummy_call.
+	(i386_thiscall_push_dummy_call): New function.
+	* i386-tdep.h (i386_thiscall_push_dummy_call): Declare.
+	* i386-windows-tdep.c (i386_windows_push_dummy_call): New function.
+	(i386_windows_init_abi): Call set_gdbarch_push_dummy_call.
+
+2020-04-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh (do_read): Add shellcheck disable directive for
+	warning SC2162.
+
+2020-04-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh: Use ${foo:-} where shellcheck would report a
+	"referenced but not assigned" warning.
+
+2020-04-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh: Remove code that sets fallbackdefault.
+
+2020-04-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh: Use shell operators && and || instead of
+	-a and -o.
+
+2020-04-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh: Use $(...) instead of `...`.
+
+2020-04-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh: Use double quotes around variables.
+
+2020-04-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh: Use %s with printf, instead of variables in the
+	format string.
+
+2020-04-29  Tom Tromey  <tromey@adacore.com>
+
+	PR ada/25875:
+	* dwarf2/read.c (update_enumeration_type_from_children): Compute
+	type fields here.
+	(read_enumeration_type): Call
+	update_enumeration_type_from_children later.  Update comments.
+	(process_enumeration_scope): Don't create type fields.
+
+2020-04-29  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-tdep.c: Include "xml-syscall.h".
+	(nbsd_init_abi): Call `set_xml_syscall_file_name'.
+
+2020-04-29  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c: Include "sys/wait.h".
+	(nbsd_resume, nbsd_nat_target::resume, nbsd_wait)
+	(nbsd_nat_target::wait, nbsd_nat_target::insert_exec_catchpoint)
+	(nbsd_nat_target::remove_exec_catchpoint)
+	(nbsd_nat_target::set_syscall_catchpoint): Add.
+	* nbsd-nat.h (nbsd_nat_target::resume, nbsd_nat_target::wait)
+	(nbsd_nat_target::insert_exec_catchpoint)
+	(nbsd_nat_target::remove_exec_catchpoint)
+	(nbsd_nat_target::set_syscall_catchpoint): Add.
+	* nbsd-tdep.c (nbsd_get_syscall_number): Add.
+	(nbsd_init_abi): Call `set_gdbarch_get_syscall_number' and pass
+	`nbsd_get_syscall_number'.
+
+2020-04-29  Tom Tromey  <tom@tromey.com>
+
+	* stack.c (print_block_frame_labels): Remove.
+
+2020-04-29  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR gdb/17320
+	* ada-valprint.c (val_print_packed_array_elements): Move array
+	end bracket to new line.
+	(ada_val_print_string): Remove extra spaces before first array
+	element.
+	* c-valprint.c (c_value_print_array): Likewise.
+	* m2-valprint.c (m2_print_array_contents): Likewise.
+	(m2_value_print_inner): Likewise.
+	* p-valprint.c (pascal_value_print_inner): Likewise.
+	* valprint.c (generic_val_print_array): Likewise.
+	(value_print_array_elements): Move first array element and array
+	end bracket to new line.
+
+2020-04-29  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25889
+	* linespec.c (find_method): Fix ix calculation.
+
+2020-04-28  Kamil Rytarowski  <n54@gmx.com>
+
+	* syscalls/update-netbsd.sh: New file.
+	* syscalls/netbsd.xml: Regenerate.
+	* data-directory/Makefile.in: Register `netbsd.xml' in
+	`SYSCALLS_FILES'.
+
+2020-04-28  Simon Marchi  <simon.marchi@efficios.com>
+
+	* syscalls/update-freebsd.sh: Add double quotes.
+
+2020-04-28  Tom Tromey  <tom@tromey.com>
+
+	* NEWS: Update.
+	* python/py-cmd.c (gdbpy_initialize_commands): Add COMMAND_TUI.
+	(cmdpy_init): Allow class_tui.
+
+2020-04-28 Mark Williams <mark@myosotissp.com>
+
+	PR gdb/24480
+	* dwarf2read.c: Add missing assingments to list_in_scope when
+	start_symtab was already called.
+
+2020-04-28  Simon Marchi  <simon.marchi@efficios.com>
+
+	PR gdb/25881
+	* dwarf2/read.c (offset_map_type): Use
+	gdb:hash_enum<sect_offset> as hash function.
+
+2020-04-28  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (process_structure_scope): Add symbol for struct decl
+	with DW_AT_signature.
+
+2020-04-27  Simon Marchi  <simon.marchi@efficios.com>
+
+	* configure.ac: Remove check for fs_base/gs_base in
+	user_regs_struct.
+	* configure: Re-generate.
+	* config.in: Re-generate.
+	* amd64-nat.c (amd64_native_gregset_reg_offset): Adjust.
+	* amd64-linux-nat.c (amd64_linux_nat_target::fetch_registers,
+	amd64_linux_nat_target::store_registers, ps_get_thread_area, ): Adjust.
+
+2020-04-27  Luis Machado  <luis.machado@linaro.org>
+
+	* dwarf2/frame-tailcall.c (dwarf2_tailcall_sniffer_first): Handle
+	problematic inline frame unwinding situation.
+	* frame.c (frame_id_computed_p): New function.
+	* frame.h (frame_id_computed_p): New prototype.
+
+2020-04-26  Tom Tromey  <tom@tromey.com>
+
+	* command.h (enum command_class) <class_pseudo>: Remove.
+
+2020-04-26  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* cli/cli-decode.c (lookup_cmd_composition): Fix comments
+	and whitespace.
+
+2020-04-25  Kamil Rytarowski  <n54@gmx.com>
+
+	* inf-ptrace.c (inf_ptrace_target::wait): Remove
+	`PT_GET_PROCESS_STATE' block.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	* symtab.h (symbol_get_demangled_name): Don't declare.
+	* symtab.c (symbol_get_demangled_name): Remove.
+	(general_symbol_info::natural_name)
+	(general_symbol_info::demangled_name): Update.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	PR rust/25025:
+	* dwarf2/read.c (dwarf2_physname): Do not demangle for Rust.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	PR symtab/12707:
+	* dwarf2/read.c (add_partial_symbol): Use the linkage name if it
+	exists.
+	(new_symbol): Likewise.
+	* compile/compile-object-load.c (get_out_value_type): Use
+	symbol_matches_search_name.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (add_partial_symbol): Do not call
+	compute_and_set_names.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (add_partial_symbol): Use new add_psymbol_to_list
+	overload.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (add_psymbol_to_bcache): Simplify calling convention.
+	(add_psymbol_to_list): New overload.  Make old overload call new
+	one.
+	* psympriv.h (add_psymbol_to_list): New overload.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (partial_die_info::read) <case
+	DW_AT_linkage_name>: Use value_as_string.
+	(dwarf2_string_attr): Use value_as_string.
+	* dwarf2/attribute.h (struct attribute) <value_as_string>: Declare
+	method.
+	* dwarf2/attribute.c (attribute::value_as_string): New method.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (general_symbol_info::natural_name)
+	(general_symbol_info::demangled_name): Check for language_rust.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dw2_linkage_name): Move Rust "{" hack here...
+	(dwarf2_physname): ... from here.
+	(partial_die_info::read): Add Rust "{" hack.
+
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+	* symtab.h (struct general_symbol_info) <set_demangled_name>: New
+	method.
+	(symbol_set_demangled_name): Don't declare.
+	* symtab.c (general_symbol_info::set_demangled_name): Rename from
+	symbol_set_demangled_name.
+	(general_symbol_info::set_language)
+	(general_symbol_info::compute_and_set_names): Update.
+	* minsyms.c (minimal_symbol_reader::install): Update.
+	* dwarf2/read.c (new_symbol): Update.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	PR python/23662:
+	* python/py-type.c (convert_field): Handle
+	FIELD_LOC_KIND_DWARF_BLOCK.
+	(typy_get_sizeof): Handle TYPE_HAS_DYNAMIC_LENGTH.
+	(typy_get_dynamic): Nw function.
+	(type_object_getset): Add "dynamic".
+	* NEWS: Add entry.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* ada-typeprint.c (print_choices, print_variant_part)
+	(print_record_field_types_dynamic): New functions.
+	(print_record_field_types): Use print_record_field_types_dynamic.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (handle_data_member_location): New overload.
+	(dwarf2_add_field): Use it.
+	(decode_locdesc): Add "computed" parameter.  Update comment.
+	* gdbtypes.c (is_dynamic_type_internal): Also look for
+	FIELD_LOC_KIND_DWARF_BLOCK.
+	(resolve_dynamic_struct): Handle FIELD_LOC_KIND_DWARF_BLOCK.
+	* gdbtypes.c (is_dynamic_type_internal): Add special case for C++
+	virtual base classes.
+	* gnu-v3-abi.c (gnuv3_baseclass_offset): Handle
+	FIELD_LOC_KIND_DWARF_BLOCK.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (read_structure_type): Handle dynamic length.
+	* gdbtypes.c (is_dynamic_type_internal): Check
+	TYPE_HAS_DYNAMIC_LENGTH.
+	(resolve_dynamic_type_internal): Use TYPE_DYNAMIC_LENGTH.
+	* gdbtypes.h (TYPE_HAS_DYNAMIC_LENGTH, TYPE_DYNAMIC_LENGTH):
+	New macros.
+	(enum dynamic_prop_node_kind) <DYN_PROP_BYTE_SIZE>: New
+	constant.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (struct variant_field): Rewrite.
+	(struct variant_part_builder): New.
+	(struct nextfield): Remove "variant" field.  Add "offset".
+	(struct field_info): Add "current_variant_part" and
+	"variant_parts".
+	(alloc_discriminant_info): Remove.
+	(alloc_rust_variant): New function.
+	(quirk_rust_enum): Update.
+	(dwarf2_add_field): Set "offset" member.  Don't handle
+	DW_TAG_variant_part.
+	(offset_map_type): New typedef.
+	(convert_variant_range, create_one_variant)
+	(create_one_variant_part, create_variant_parts)
+	(add_variant_property): New functions.
+	(dwarf2_attach_fields_to_type): Call add_variant_property.
+	(read_structure_type): Don't handle DW_TAG_variant_part.
+	(handle_variant_part, handle_variant): New functions.
+	(handle_struct_member_die): Use them.
+	(process_structure_scope): Don't handle variant parts.
+	* gdbtypes.h (TYPE_FLAG_DISCRIMINATED_UNION): Remove.
+	(struct discriminant_info): Remove.
+	(enum dynamic_prop_node_kind) <DYN_PROP_DISCRIMINATED>: Remove.
+	(struct main_type) <flag_discriminated_union>: Remove.
+	* rust-lang.c (rust_enum_p, rust_empty_enum_p): Rewrite.
+	(rust_enum_variant): Return int.  Remove "contents".  Rewrite.
+	(rust_print_enum, rust_print_struct_def, rust_evaluate_subexp):
+	Update.
+	* valops.c (value_union_variant): Remove.
+	* value.h (value_union_variant): Don't declare.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_discrete_type_high_bound, ada_discrete_type_low)
+	(ada_value_primitive_packed_val): Update.
+	* ada-valprint.c (ada_value_print_1): Update.
+	* dwarf2/loc.c (evaluate_for_locexpr_baton): New struct.
+	(dwarf2_locexpr_baton_eval): Take a property_addr_info rather than
+	just an address.  Use evaluate_for_locexpr_baton.
+	(dwarf2_evaluate_property): Update.
+	* dwarf2/loc.h (struct property_addr_info) <valaddr>: Now an
+	array_view.
+	* findvar.c (default_read_var_value): Update.
+	* gdbtypes.c (compute_variant_fields_inner)
+	(resolve_dynamic_type_internal): Update.
+	(resolve_dynamic_type): Change type of valaddr parameter.
+	* gdbtypes.h (resolve_dynamic_type): Update.
+	* valarith.c (value_subscripted_rvalue): Update.
+	* value.c (value_from_contents_and_address): Update.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/loc.c (dwarf2_locexpr_baton_eval): Add
+	"push_initial_value" parameter.
+	(dwarf2_evaluate_property): Likewise.
+	* dwarf2/loc.h (dwarf2_evaluate_property): Update.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* gdbtypes.c (is_dynamic_type_internal): Check for variant parts.
+	(variant::matches, compute_variant_fields_recurse)
+	(compute_variant_fields_inner, compute_variant_fields): New
+	functions.
+	(resolve_dynamic_struct): Check for DYN_PROP_VARIANT_PARTS.
+	Use resolved_type after type is made.
+	(operator==): Add new cases.
+	* gdbtypes.h (TYPE_HAS_VARIANT_PARTS): New macro.
+	(struct discriminant_range, struct variant, struct variant_part):
+	New.
+	(union dynamic_prop_data) <variant_parts, original_type>: New
+	members.
+	(enum dynamic_prop_node_kind) <DYN_PROP_VARIANT_PARTS>: New constant.
+	(enum dynamic_prop_kind) <PROP_TYPE, PROP_VARIANT_PARTS>: New
+	constants.
+	* value.c (unpack_bits_as_long): Now public.
+	* value.h (unpack_bits_as_long): Declare.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* rs6000-tdep.c (struct ppc_variant): Rename from "variant".
+	(variants, find_variant_by_arch, rs6000_gdbarch_init): Update.
+
+2020-04-24  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-tdep.c (exception_values): Add WOW64 exception numbers.
+
+2020-04-24  Kamil Rytarowski  <n54@gmx.com>
+
+	* inf-ptrace.h (follow_fork, insert_fork_catchpoint)
+	(remove_fork_catchpoint, post_startup_inferior)
+	(post_attach): Move...
+	* obsd-nat.h (follow_fork, insert_fork_catchpoint)
+	(remove_fork_catchpoint, post_startup_inferior)
+	(post_attach): ...here.
+	* inf-ptrace.c (follow_fork, insert_fork_catchpoint)
+	(remove_fork_catchpoint, post_startup_inferior)
+	(post_attach): Move...
+	* obsd-nat.c (follow_fork, insert_fork_catchpoint)
+	(remove_fork_catchpoint, post_startup_inferior)
+	(post_attach): ...here.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	* nat/windows-nat.h (struct windows_thread_info)
+	<pc_adjusted>: New member.
+	* windows-nat.c (windows_fetch_one_register): Check
+	pc_adjusted.
+	(windows_nat_target::get_windows_debug_event)
+	(windows_nat_target::wait): Set pc_adjusted.
+
+2020-04-24  Tom de Vries  <tdevries@suse.de>
+
+	* contrib/cc-with-tweaks.sh: Remove <exec>.gdb-index file handling.
+	Run gdb-add-index inside temp dir.
+
+2020-04-23  Tom Tromey  <tromey@adacore.com>
+
+	* windows-tdep.c (is_linked_with_cygwin_dll): Always update "iter"
+	in loop.
+
+2020-04-23  Luis Machado  <luis.machado@linaro.org>
+
+	* dwarf2/frame-tailcall.c (dwarf2_tailcall_sniffer_first): Use
+	get_frame_register instead of gdbarch_unwind_pc.
+
+2020-04-23  Tom de Vries  <tdevries@suse.de>
+
+	* symtab.c (lookup_global_symbol): Prefer def over decl.
+
+2020-04-23  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25807
+	* block.c (best_symbol, better_symbol): Promote to external.
+	* block.h (best_symbol, better_symbol): Declare.
+	* symtab.c (lookup_symbol_in_objfile_symtabs): Prefer def over
+	decl.
+
+2020-04-23  Tom Tromey  <tromey@adacore.com>
+
+	PR ada/25837:
+	* dwarf2/read.c (dw2_expand_symtabs_matching_symbol): Store a
+	"const char *", not a "const std::string &".
+	<name_and_matcher::operator==>: Update.
+	* unittests/lookup_name_info-selftests.c: Change type of
+	"result".
+
+2020-04-23  Tom Tromey  <tom@tromey.com>
+
+	* inferior.h (iterate_over_inferiors): Don't declare.
+	* inferior.c (iterate_over_inferiors): Remove.
+	* darwin-nat.c (find_inferior_task_it, find_inferior_pid_it):
+	Remove.
+	(darwin_find_inferior_by_task, darwin_find_inferior_by_pid): Don't
+	use iterate_over_inferiors.
+	(darwin_resume_inferior_it)
+	(struct resume_inferior_threads_param)
+	(darwin_resume_inferior_threads_it): Remove.
+	(darwin_nat_target::resume): Don't use iterate_over_inferiors.
+
+2020-04-23  Tom de Vries  <tdevries@suse.de>
+
+	* blockframe.c (find_pc_partial_function): Use
+	find_pc_sect_compunit_symtab rather than
+	objfile->sf->qf->find_pc_sect_compunit_symtab.
+
+2020-04-22  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25764
+	* dwarf2/read.c (scan_partial_symbols): Allow external variable decls
+	in psymtabs.
+
+2020-04-22  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25801
+	* psymtab.c (psym_map_symtabs_matching_filename): Don't skip shared
+	symtabs.
+
+2020-04-22  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25700
+	* dwarf2/read.c (dwarf2_build_psymtabs_hard): Don't create psymtab for
+	CU if already created.
+
+2020-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infrun.c (displaced_step_fixup): Switch to the event_thread
+	before calling displaced_step_restore, not after.
+
+2020-04-21  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* record-btrace.c (record_btrace_enable_warn): Ignore thread if
+	its inferior is not recorded by us.
+	(record_btrace_target_open): Replace call to
+	all_non_exited_threads () with call to current_inferior
+	()->non_exited_threads ().
+	(record_btrace_target::stop_recording): Likewise.
+	(record_btrace_target::close): Likewise.
+	(record_btrace_target::wait): Likewise.
+	(record_btrace_target::record_stop_replaying): Likewise.
+
+2020-04-21  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* btrace.c (btrace_enable): Throw an error on double enables and
+	when enabling recording fails.
+	(btrace_disable): Throw an error if the thread is not recorded.
+
+2020-04-21  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* record-btrace.c (record_btrace_target::fetch_registers): Forward
+	request if we do not have a thread_info.
+
+2020-04-21  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/25471
+	* thread.c
+	(scoped_restore_current_thread::scoped_restore_current_thread): Catch
+	exception in get_frame_id.
+
+2020-04-20  Tom Tromey  <tromey@adacore.com>
+
+	* python/python.c (struct gdbpy_event): Mark move constructor as
+	noexcept.
+	* python/py-tui.c (class gdbpy_tui_window_maker): Mark move
+	constructor as noexcept.
+	* completer.h (struct completion_result): Mark move constructor as
+	noexcept.
+	* completer.c (completion_result::completion_result): Use
+	initialization style.  Don't call reset_match_list.
+
+2020-04-20  Mihails Strasuns  <mihails.strasuns@intel.com>
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2020-04-18  Tom Tromey  <tom@tromey.com>
+
+	* windows-tdep.c (init_w32_command_list)
+	(w32_prefix_command_valid): Restore.
+	(_initialize_windows_tdep): Call init_w32_command_list.
+
+2020-04-18  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (enter_line_range, scan_xcoff_symtab): Update.
+	* value.c (value_fn_field): Update.
+	* valops.c (find_function_in_inferior)
+	(value_allocate_space_in_inferior): Update.
+	* tui/tui-winsource.c (tui_update_source_windows_with_line):
+	Update.
+	* tui/tui-source.c (tui_source_window::set_contents): Update.
+	* symtab.c (lookup_global_or_static_symbol)
+	(find_function_start_sal_1, skip_prologue_sal)
+	(print_msymbol_info, find_gnu_ifunc, symbol_arch): Update.
+	* symmisc.c (dump_msymbols, dump_symtab_1)
+	(maintenance_print_one_line_table): Update.
+	* symfile.c (init_entry_point_info, section_is_mapped)
+	(list_overlays_command, simple_read_overlay_table)
+	(simple_overlay_update_1): Update.
+	* stap-probe.c (handle_stap_probe): Update.
+	* stabsread.c (dbx_init_float_type, define_symbol)
+	(read_one_struct_field, read_enum_type, read_range_type): Update.
+	* source.c (info_line_command): Update.
+	* python/python.c (gdbpy_source_objfile_script)
+	(gdbpy_execute_objfile_script): Update.
+	* python/py-type.c (save_objfile_types): Update.
+	* python/py-objfile.c (py_free_objfile): Update.
+	* python/py-inferior.c (python_new_objfile): Update.
+	* psymtab.c (psym_find_pc_sect_compunit_symtab, dump_psymtab)
+	(dump_psymtab_addrmap_1, maintenance_info_psymtabs)
+	(maintenance_check_psymtabs): Update.
+	* printcmd.c (info_address_command): Update.
+	* objfiles.h (struct objfile) <arch>: New method, from
+	get_objfile_arch.
+	(get_objfile_arch): Don't declare.
+	* objfiles.c (get_objfile_arch): Remove.
+	(filter_overlapping_sections): Update.
+	* minsyms.c (msymbol_is_function): Update.
+	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines)
+	(output_nondebug_symbol): Update.
+	* mdebugread.c (parse_symbol, basic_type, parse_partial_symbols)
+	(mdebug_expand_psymtab): Update.
+	* machoread.c (macho_add_oso_symfile): Update.
+	* linux-tdep.c (linux_infcall_mmap, linux_infcall_munmap):
+	Update.
+	* linux-fork.c (checkpoint_command): Update.
+	* linespec.c (convert_linespec_to_sals): Update.
+	* jit.c (finalize_symtab): Update.
+	* infrun.c (insert_exception_resume_from_probe): Update.
+	* ia64-tdep.c (ia64_find_unwind_table): Update.
+	* hppa-tdep.c (internalize_unwinds): Update.
+	* gdbtypes.c (get_type_arch, init_float_type, objfile_type):
+	Update.
+	* gcore.c (call_target_sbrk): Update.
+	* elfread.c (record_minimal_symbol, elf_symtab_read)
+	(elf_rel_plt_read, elf_gnu_ifunc_record_cache)
+	(elf_gnu_ifunc_resolve_by_got): Update.
+	* dwarf2/read.c (create_addrmap_from_index)
+	(create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab)
+	(read_debug_names_from_section)
+	(process_psymtab_comp_unit_reader, add_partial_symbol)
+	(add_partial_subprogram, process_full_comp_unit)
+	(read_file_scope, read_func_scope, read_lexical_block_scope)
+	(read_call_site_scope, dwarf2_ranges_read)
+	(dwarf2_record_block_ranges, dwarf2_add_field)
+	(mark_common_block_symbol_computed, read_tag_pointer_type)
+	(read_tag_string_type, dwarf2_init_float_type)
+	(dwarf2_init_complex_target_type, read_base_type)
+	(partial_die_info::read, partial_die_info::read)
+	(read_attribute_value, dwarf_decode_lines_1, new_symbol)
+	(dwarf2_fetch_die_loc_sect_off): Update.
+	* dwarf2/loc.c (dwarf2_find_location_expression)
+	(class dwarf_evaluate_loc_desc, rw_pieced_value)
+	(dwarf2_evaluate_loc_desc_full, dwarf2_locexpr_baton_eval)
+	(dwarf2_loc_desc_get_symbol_read_needs)
+	(locexpr_describe_location_piece, locexpr_describe_location_1)
+	(loclist_describe_location): Update.
+	* dwarf2/index-write.c (write_debug_names): Update.
+	* dwarf2/frame.c (dwarf2_build_frame_info): Update.
+	* dtrace-probe.c (dtrace_process_dof): Update.
+	* dbxread.c (read_dbx_symtab, dbx_end_psymtab)
+	(process_one_symbol): Update.
+	* ctfread.c (ctf_init_float_type, read_base_type): Update.
+	* coffread.c (coff_symtab_read, enter_linenos, decode_base_type)
+	(coff_read_enum_type): Update.
+	* cli/cli-cmds.c (edit_command, list_command): Update.
+	* buildsym.c (buildsym_compunit::finish_block_internal): Update.
+	* breakpoint.c (create_overlay_event_breakpoint)
+	(create_longjmp_master_breakpoint)
+	(create_std_terminate_master_breakpoint)
+	(create_exception_master_breakpoint, get_sal_arch): Update.
+	* block.c (block_gdbarch): Update.
+	* annotate.c (annotate_source_line): Update.
+
+2020-04-17  Tom Tromey  <tromey@adacore.com>
+
+	* auto-load.c (show_auto_load_cmd): Remove.
+	(auto_load_show_cmdlist_get): Use add_show_prefix_cmd.
+	* arc-tdep.c (_initialize_arc_tdep): Use add_show_prefix_cmd.
+	(maintenance_print_arc_command): Remove.
+	* tui/tui-win.c (tui_command): Remove.
+	(tui_get_cmd_list): Use add_basic_prefix_cmd.
+	* tui/tui-layout.c (tui_layout_command): Remove.
+	(_initialize_tui_layout): Use add_basic_prefix_cmd.
+	* python/python.c (user_set_python, user_show_python): Remove.
+	(_initialize_python): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* guile/guile.c (set_guile_command, show_guile_command): Remove.
+	(install_gdb_commands): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	(info_guile_command): Remove.
+	* dwarf2/read.c (set_dwarf_cmd, show_dwarf_cmd): Remove.
+	(_initialize_dwarf2_read): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* cli/cli-style.h (class cli_style_option) <add_setshow_commands>:
+	Remove do_set and do_show parameters.
+	* cli/cli-style.c (set_style, show_style): Remove.
+	(_initialize_cli_style): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	(cli_style_option::add_setshow_commands): Remove do_set and
+	do_show parameters.
+	(cli_style_option::add_setshow_commands): Use
+	add_basic_prefix_cmd, add_show_prefix_cmd.
+	(STYLE_ADD_SETSHOW_COMMANDS): Remove macro.
+	(set_style_name): Remove.
+	* cli/cli-dump.c (dump_command, append_command): Remove.
+	(srec_dump_command, ihex_dump_command, verilog_dump_command)
+	(tekhex_dump_command, binary_dump_command)
+	(binary_append_command): Remove.
+	(_initialize_cli_dump): Use add_basic_prefix_cmd.
+	* windows-tdep.c (w32_prefix_command_valid): Remove global.
+	(init_w32_command_list): Remove; move into ...
+	(_initialize_windows_tdep): ... here.  Use add_basic_prefix_cmd.
+	* valprint.c (set_print, show_print, set_print_raw)
+	(show_print_raw): Remove.
+	(_initialize_valprint): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* typeprint.c (set_print_type, show_print_type): Remove.
+	(_initialize_typeprint): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* record.c (set_record_command, show_record_command): Remove.
+	(_initialize_record): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* cli/cli-cmds.c (_initialize_cli_cmds): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	(info_command, show_command, set_debug, show_debug): Remove.
+	* top.h (set_history, show_history): Don't declare.
+	* top.c (set_history, show_history): Remove.
+	* target-descriptions.c (set_tdesc_cmd, show_tdesc_cmd)
+	(unset_tdesc_cmd): Remove.
+	(_initialize_target_descriptions): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* symtab.c (info_module_command): Remove.
+	(_initialize_symtab): Use add_basic_prefix_cmd.
+	* symfile.c (overlay_command): Remove.
+	(_initialize_symfile): Use add_basic_prefix_cmd.
+	* sparc64-tdep.c (info_adi_command): Remove.
+	(_initialize_sparc64_adi_tdep): Use add_basic_prefix_cmd.
+	* sh-tdep.c (show_sh_command, set_sh_command): Remove.
+	(_initialize_sh_tdep): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* serial.c (serial_set_cmd, serial_show_cmd): Remove.
+	(_initialize_serial): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* ser-tcp.c (set_tcp_cmd, show_tcp_cmd): Remove.
+	(_initialize_ser_tcp): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* rs6000-tdep.c (set_powerpc_command, show_powerpc_command)
+	(_initialize_rs6000_tdep): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* riscv-tdep.c (show_riscv_command, set_riscv_command)
+	(show_debug_riscv_command, set_debug_riscv_command): Remove.
+	(_initialize_riscv_tdep): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* remote.c (remote_command, set_remote_cmd): Remove.
+	(_initialize_remote): Use add_basic_prefix_cmd.
+	* record-full.c (set_record_full_command)
+	(show_record_full_command): Remove.
+	(_initialize_record_full): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* record-btrace.c (cmd_set_record_btrace)
+	(cmd_show_record_btrace, cmd_set_record_btrace_bts)
+	(cmd_show_record_btrace_bts, cmd_set_record_btrace_pt)
+	(cmd_show_record_btrace_pt): Remove.
+	(_initialize_record_btrace): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* ravenscar-thread.c (set_ravenscar_command)
+	(show_ravenscar_command): Remove.
+	(_initialize_ravenscar): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* mips-tdep.c (show_mips_command, set_mips_command)
+	(_initialize_mips_tdep): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* maint.c (maintenance_command, maintenance_info_command)
+	(maintenance_check_command, maintenance_print_command)
+	(maintenance_set_cmd, maintenance_show_cmd): Remove.
+	(_initialize_maint_cmds): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	(show_per_command_cmd): Remove.
+	* maint-test-settings.c (maintenance_set_test_settings_cmd):
+	Remove.
+	(maintenance_show_test_settings_cmd): Remove.
+	(_initialize_maint_test_settings): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* maint-test-options.c (maintenance_test_options_command):
+	Remove.
+	(_initialize_maint_test_options): Use add_basic_prefix_cmd.
+	* macrocmd.c (macro_command): Remove
+	(_initialize_macrocmd): Use add_basic_prefix_cmd.
+	* language.c (set_check, show_check): Remove.
+	(_initialize_language): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* infcmd.c (unset_command): Remove.
+	(_initialize_infcmd): Use add_basic_prefix_cmd.
+	* i386-tdep.c (set_mpx_cmd, show_mpx_cmd): Remove.
+	(_initialize_i386_tdep): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* go32-nat.c (go32_info_dos_command): Remove.
+	(_initialize_go32_nat): Use add_basic_prefix_cmd.
+	* cli/cli-decode.c (do_prefix_cmd, add_basic_prefix_cmd)
+	(do_show_prefix_cmd, add_show_prefix_cmd): New functions.
+	* frame.c (set_backtrace_cmd, show_backtrace_cmd): Remove.
+	(_initialize_frame): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* dcache.c (set_dcache_command, show_dcache_command): Remove.
+	(_initialize_dcache): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* cp-support.c (maint_cplus_command): Remove.
+	(_initialize_cp_support): Use add_basic_prefix_cmd.
+	* btrace.c (maint_btrace_cmd, maint_btrace_set_cmd)
+	(maint_btrace_show_cmd, maint_btrace_pt_set_cmd)
+	(maint_btrace_pt_show_cmd, _initialize_btrace): Use
+	add_basic_prefix_cmd, add_show_prefix_cmd.
+	* breakpoint.c (save_command): Remove.
+	(_initialize_breakpoint): Use add_basic_prefix_cmd.
+	* arm-tdep.c (set_arm_command, show_arm_command): Remove.
+	(_initialize_arm_tdep): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* ada-lang.c (maint_set_ada_cmd, maint_show_ada_cmd)
+	(set_ada_command, show_ada_command): Remove.
+	(_initialize_ada_language): Use add_basic_prefix_cmd,
+	add_show_prefix_cmd.
+	* command.h (add_basic_prefix_cmd, add_show_prefix_cmd): Declare.
+
+2020-04-16  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c (inf_ptrace_target::auxv_parse): Remove.
+	* nbsd-nat.h (inf_ptrace_target::auxv_parse): Likewise.
+
+2020-04-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* windows-tdep.c (is_linked_with_cygwin_dll): Add filename to
+	warning messages.
+
+2020-04-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* windows-tdep.c (is_linked_with_cygwin_dll): Consider case where
+	import table is not at beginning of .idata section.
+
+2020-04-16  Pedro Alves  <palves@redhat.com>
+
+	* inferior.c (delete_inferior): Use delete operator directly
+	instead of delete_program_space.
+	* progspace.c (add_program_space): New, factored out from
+	program_space::program_space.
+	(remove_program_space): New, factored out from
+	delete_program_space.
+	(program_space::program_space): Remove intro comment.  Rewrite.
+	(program_space::~program_space): Remove intro comment.  Call
+	remove_program_space.
+	(delete_program_space): Delete.
+	* progspace.h (program_space::program_space): Make explicit.  Move
+	intro comment here, adjusted.
+	(program_space::~program_space): Move intro comment here,
+	adjusted.
+	(delete_program_space): Remove.
+
+2020-04-16  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat::handle_access_violation): New
+	function.
+	* nat/windows-nat.h (handle_access_violation): Declare.
+	* nat/windows-nat.c (handle_exception): Move Cygwin code to
+	windows-nat.c.  Call handle_access_violation.
+
+2020-04-16  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25791
+	* dwarf2/index-write.c (write_gdbindex): Generate CU table entries for
+	CUs without psymtab.
+
+2020-04-16  Kevin Buettner  <kevinb@redhat.com>
+
+	* python/python.c (do_start_initialization): Don't call
+	PyEval_InitThreads for Python 3.9 and beyond.
+
+2020-04-15  Kamil Rytarowski  <n54@gmx.com>
+
+	* obsd-nat.c (obsd_nat_target::update_thread_list): Pass "this" to
+	thread functions.
+	(obsd_nat_target::wait): Likewise.
+
+2020-04-15  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (DEBUG_EXEC, DEBUG_EVENTS, DEBUG_MEM)
+	(DEBUG_EXCEPT): Use debug_printf.
+
+2020-04-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* completer.c (class completion_tracker::completion_hash_entry)
+	<hash_name>: New member function.
+	(completion_tracker::discard_completions): New callback to hash a
+	completion_hash_entry, pass this to htab_create_alloc.
+
+2016-01-20  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* windows-nat.c (windows_make_so): Warn rather than stopping with
+	an error if realpath() fails.
+
+2020-04-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c (nbsd_pid_to_kinfo_proc2): New.
+	(nbsd_nat_target::info_proc): Add do_status.
+
+2020-04-14  Simon Marchi  <simon.marchi@polymtl.ca>
+	    Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25718
+	* psympriv.h (struct partial_symtab::read_symtab)
+	(struct partial_symtab::expand_psymtab)
+	(struct partial_symtab::read_dependencies): Update comments.
+	* dwarf2/read.c (struct dwarf2_include_psymtab::read_symtab): Call
+	read_symtab for includer.
+	(struct dwarf2_include_psymtab::expand_psymtab): Assert false.
+	(struct dwarf2_include_psymtab::readin_p): Call readin_p () for includer.
+	(struct dwarf2_include_psymtab::m_readin): Remove.
+	(struct dwarf2_include_psymtab::includer): New member function.
+	(dwarf2_psymtab::expand_psymtab): Assert !readin.
+
+2020-04-14  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25720
+	* symmisc.c (maintenance_expand_symtabs): Call expand_symtabs_matching
+	with NULL symbol_matcher and lookup_name.
+	* psymtab.c (psym_expand_symtabs_matching): Handle NULL symbol_matcher
+	and lookup_name.
+	* dwarf2/read.c (dw2_expand_symtabs_matching)
+	(dw2_debug_names_expand_symtabs_matching): Same.
+	* symfile.h (struct quick_symbol_functions::expand_symtabs_matching):
+	Make lookup_name a pointer.  Update comment.
+	* symtab.c (global_symbol_searcher::expand_symtabs): Handle
+	lookup_name being a pointer.
+	* symfile.c (expand_symtabs_matching): Same.
+	* symfile-debug.c (debug_qf_expand_symtabs_matching): Same.
+	* linespec.c (iterate_over_all_matching_symtabs): Same.
+
+2020-04-13  Tom Tromey  <tom@tromey.com>
+
+	* run-on-main-thread.c: Update include.
+	* unittests/main-thread-selftests.c: Update include.
+	* tui/tui-win.c: Update include.
+	* tui/tui-io.c: Update include.
+	* tui/tui-interp.c: Update include.
+	* tui/tui-hooks.c: Update include.
+	* top.h: Update include.
+	* top.c: Update include.
+	* ser-base.c: Update include.
+	* remote.c: Update include.
+	* remote-notif.c: Update include.
+	* remote-fileio.c: Update include.
+	* record-full.c: Update include.
+	* record-btrace.c: Update include.
+	* python/python.c: Update include.
+	* posix-hdep.c: Update include.
+	* mingw-hdep.c: Update include.
+	* mi/mi-main.c: Update include.
+	* mi/mi-interp.c: Update include.
+	* main.c: Update include.
+	* linux-nat.c: Update include.
+	* interps.c: Update include.
+	* infrun.c: Update include.
+	* inf-loop.c: Update include.
+	* event-top.c: Update include.
+	* event-loop.c: Move to ../gdbsupport/.
+	* event-loop.h: Move to ../gdbsupport/.
+	* async-event.h: Update include.
+	* Makefile.in (COMMON_SFILES, HFILES_NO_SRCDIR): Update.
+
+2020-04-13  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c: Include async-event.h.
+	* remote.c: Include async-event.h.
+	* remote-notif.c: Include async-event.h.
+	* record-full.c: Include async-event.h.
+	* record-btrace.c: Include async-event.h.
+	* infrun.c: Include async-event.h.
+	* event-top.c: Include async-event.h.
+	* event-loop.h: Move some declarations to async-event.h.
+	* event-loop.c: Don't include ser-event.h or top.h.  Move some
+	code to async-event.c.
+	* async-event.h: New file.
+	* async-event.c: New file.
+	* Makefile.in (COMMON_SFILES): Add async-event.c.
+	(HFILES_NO_SRCDIR): Add async-event.h.
+
+2020-04-13  Tom Tromey  <tom@tromey.com>
+
+	* utils.c (flush_streams): New function.
+	* event-loop.c (gdb_wait_for_event): Call flush_streams.
+
+2020-04-13  Tom Tromey  <tom@tromey.com>
+
+	* event-loop.c (handle_file_event): Use warning, not
+	printf_unfiltered.
+
+2020-04-13  Tom Tromey  <tom@tromey.com>
+
+	* event-loop.c: Include <chrono>.
+
+2020-04-13  Tom Tromey  <tom@tromey.com>
+
+	* gdb_select.h: Move to ../gdbsupport/.
+	* event-loop.c: Update include path.
+	* top.c: Update include path.
+	* ser-base.c: Update include path.
+	* ui-file.c: Update include path.
+	* ser-tcp.c: Update include path.
+	* guile/scm-ports.c: Update include path.
+	* posix-hdep.c: Update include path.
+	* ser-unix.c: Update include path.
+	* gdb_usleep.c: Update include path.
+	* mingw-hdep.c: Update include path.
+	* inflow.c: Update include path.
+	* infrun.c: Update include path.
+	* event-top.c: Update include path.
+
+2020-04-13  Tom Tromey  <tom@tromey.com>
+
+	* configure: Rebuild.
+	* configure.ac: Remove checks that are now in GDB_AC_COMMON.
+
+2020-04-13  Tom Tromey  <tom@tromey.com>
+
+	* event-loop.h (start_event_loop): Don't declare.
+	* event-loop.c (start_event_loop): Move...
+	* main.c (start_event_loop): ...here.  Now static.
+
+2020-04-13  Sergio Durigan Junior  <sergiodj@sergiodj.net>
+
+	* MAINTAINERS: Update my email address.
+
+2020-04-12  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c (nbsd_nat_target::info_proc): Add IP_MINIMAL and
+	IP_ALL.
+
+2020-04-12  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c (nbsd_pid_to_cmdline): Add.
+	(nbsd_nat_target::info_proc): Add do_cmdline.
+
+2020-04-12  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c (nbsd_pid_to_cwd): Add.
+	(nbsd_nat_target::info_proc): Add do_cwd.
+
+2020-04-12  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c (nbsd_nat_target::info_proc): Add do_exe.
+
+2020-04-11  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c; Include "nbsd-tdep.h" and "gdbarch.h".
+	* nbsd-nat.c (nbsd_nat_target::find_memory_regions)
+	(nbsd_nat_target::info_proc): New functions.
+	* nbsd-nat.c (kinfo_get_vmmap): New function.
+	* nbsd-nat.c (nbsd_nat_target::info_proc) Use
+	nbsd_info_proc_mappings_header and nbsd_info_proc_mappings_entry.
+	* nbsd-tdep.c (nbsd_info_proc_mappings_header)
+	(nbsd_info_proc_mappings_entry, nbsd_vm_map_entry_flags): New
+	functions.
+	* nbsd-tdep.c (KINFO_VME_PROT_READ, KINFO_VME_PROT_WRITE)
+	(KINFO_VME_PROT_EXEC, KINFO_VME_FLAG_COW)
+	(KINFO_VME_FLAG_NEEDS_COPY, KINFO_VME_FLAG_NOCOREDUMP)
+	(KINFO_VME_FLAG_PAGEABLE, KINFO_VME_FLAG_GROWS_UP)
+	(KINFO_VME_FLAG_GROWS_DOWN): New.
+
+2020-04-10  Artur Shepilko  <nomadbyte@gmail.com>
+
+	* utils.c (copy_bitwise): Use unsigned 0 constant as operand of
+	bit shift.
+
+2020-04-10  Tom Tromey  <tromey@adacore.com>
+
+	* symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE.
+
+2020-04-10  Tom Tromey  <tromey@adacore.com>
+
+	* symtab.c (get_symbol_address, get_msymbol_address): Skip
+	separate debug files.
+
+2020-04-10  Hannes Domani  <ssbssa@yahoo.de>
+
+	* nat/windows-nat.c (STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP):
+	Move to...
+	* nat/windows-nat.h (STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP):
+	... here.
+	* windows-nat.c (windows_nat_target::get_windows_debug_event):
+	Check for STATUS_WX86_BREAKPOINT.
+	(windows_nat_target::wait): Same.
+
+2020-04-10  Tom de Vries  <tdevries@suse.de>
+
+	PR cli/25808
+	* python/lib/gdb/__init__.py: Initialize lexer with stripnl=False.
+
+2020-04-09  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* MAINTAINERS (Global Maintainers): Add Tom de Vries.
+	(Write After Approval): Remove Tom de Vries.
+
+2020-04-09  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	revert partially:
+	2020-04-01  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* buildsym.c (record_line): Fix undefined behavior and preserve
+	lines at eof.
+
+2020-04-09  Kamil Rytarowski  <n54@gmx.com>
+
+	* auxv.h (svr4_auxv_parse): New.
+	* auxv.c (default_auxv_parse): Split into default_auxv_parse
+	and generic_auxv_parse.
+	(svr4_auxv_parse): Add.
+	* obsd-tdep.c: Include "auxv.h".
+	(obsd_auxv_parse): Remove.
+	(obsd_init_abi): Remove comment.
+	(obsd_init_abi): Change set_gdbarch_auxv_parse passed argument
+	from `obsd_auxv_parse' to `svr4_auxv_parse'.
+	* nbsd-tdep.c: Include "auxv.h".
+	(nbsd_init_abi): Call set_gdbarch_auxv_parse.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* nat/windows-nat.h (last_wait_event): Don't declare.
+	(wait_for_debug_event): Update comment.
+	* nat/windows-nat.c (last_wait_event): Now static.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (wait_for_debug_event): Move to
+	nat/windows-nat.c.
+	* nat/windows-nat.h (wait_for_debug_event): Declare.
+	* nat/windows-nat.c (wait_for_debug_event): Move from
+	windows-nat.c.  No longer static.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (get_windows_debug_event): Use
+	fetch_pending_stop.
+	* nat/windows-nat.h (fetch_pending_stop): Declare.
+	* nat/windows-nat.c (fetch_pending_stop): New function.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_continue): Use matching_pending_stop and
+	continue_last_debug_event.
+	* nat/windows-nat.h (matching_pending_stop)
+	(continue_last_debug_event): Declare.
+	* nat/windows-nat.c (DEBUG_EVENTS): New define.
+	(matching_pending_stop, continue_last_debug_event): New
+	functions.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (MS_VC_EXCEPTION): Move to nat/windows-nat.c.
+	(handle_exception_result): Move to nat/windows-nat.h.
+	(DEBUG_EXCEPTION_SIMPLE): Remove.
+	(windows_nat::handle_ms_vc_exception): New function.
+	(handle_exception): Move to nat/windows-nat.c.
+	(get_windows_debug_event): Update.
+	(STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP): Move to
+	nat/windows-nat.c.
+	* nat/windows-nat.h (handle_ms_vc_exception): Declare.
+	(handle_exception_result): Move from windows-nat.c.
+	(handle_exception): Declare.
+	* nat/windows-nat.c (MS_VC_EXCEPTION, handle_exception)
+	(STATUS_WX86_SINGLE_STEP, STATUS_WX86_BREAKPOINT): Move from
+	windows-nat.c.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (exception_count, event_count): Remove.
+	(handle_exception, get_windows_debug_event)
+	(do_initial_windows_stuff): Update.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat::handle_load_dll)
+	(windows_nat::handle_unload_dll): Rename.  No longer static.
+	* nat/windows-nat.h (handle_load_dll, handle_unload_dll):
+	Declare.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* complaints.h (stop_whining): Declare at top-level.
+	(complaint): Don't declare stop_whining.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat::handle_output_debug_string):
+	Rename.  No longer static.
+	* nat/windows-nat.h (handle_output_debug_string): Declare.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (current_process_handle, current_process_id)
+	(main_thread_id, last_sig, current_event, last_wait_event)
+	(current_windows_thread, desired_stop_thread_id, pending_stops)
+	(struct pending_stop, siginfo_er): Move to nat/windows-nat.c.
+	(display_selectors, fake_create_process)
+	(get_windows_debug_event): Update.
+	* nat/windows-nat.h (current_process_handle, current_process_id)
+	(main_thread_id, last_sig, current_event, last_wait_event)
+	(current_windows_thread, desired_stop_thread_id, pending_stops)
+	(struct pending_stop, siginfo_er): Move from windows-nat.c.
+	* nat/windows-nat.c (current_process_handle, current_process_id)
+	(main_thread_id, last_sig, current_event, last_wait_event)
+	(current_windows_thread, desired_stop_thread_id, pending_stops)
+	(siginfo_er): New globals.  Move from windows-nat.c.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (get_image_name): Move to nat/windows-nat.c.
+	(handle_load_dll): Update.
+	* nat/windows-nat.c (get_image_name): Move from windows-nat.c.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (enum thread_disposition_type): Move to
+	nat/windows-nat.h.
+	(windows_nat::thread_rec): Rename from thread_rec.  No longer
+	static.
+	(windows_add_thread, windows_nat_target::fetch_registers)
+	(windows_nat_target::store_registers, handle_exception)
+	(windows_nat_target::resume, get_windows_debug_event)
+	(windows_nat_target::get_tib_address)
+	(windows_nat_target::thread_name)
+	(windows_nat_target::thread_alive): Update.
+	* nat/windows-nat.h (enum thread_disposition_type): Move from
+	windows-nat.c.
+	(thread_rec): Declare.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c: Add "using namespace".
+	* nat/windows-nat.h: Wrap contents in windows_nat namespace.
+	* nat/windows-nat.c: Wrap contents in windows_nat namespace.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* nat/windows-nat.h (struct windows_thread_info): Declare
+	destructor.
+	* nat/windows-nat.c (~windows_thread_info): New.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	PR gdb/22992
+	* windows-nat.c (current_event): Update comment.
+	(last_wait_event, desired_stop_thread_id): New globals.
+	(struct pending_stop): New.
+	(pending_stops): New global.
+	(windows_nat_target) <stopped_by_sw_breakpoint>
+	<supports_stopped_by_sw_breakpoint>: New methods.
+	(windows_fetch_one_register): Add assertions.  Adjust PC.
+	(windows_continue): Handle pending stops.  Suspend other threads
+	when stepping.  Use last_wait_event
+	(wait_for_debug_event): New function.
+	(get_windows_debug_event): Use wait_for_debug_event.  Handle
+	pending stops.  Queue spurious stops.
+	(windows_nat_target::wait): Set stopped_at_software_breakpoint.
+	(windows_nat_target::kill): Use wait_for_debug_event.
+	* nat/windows-nat.h (struct windows_thread_info)
+	<stopped_at_software_breakpoint>: New field.
+	* nat/windows-nat.c (windows_thread_info::resume): Clear
+	stopped_at_software_breakpoint.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (enum thread_disposition_type): New.
+	(thread_rec): Replace "get_context" parameter with "disposition";
+	change type.
+	(windows_add_thread, windows_nat_target::fetch_registers)
+	(windows_nat_target::store_registers, handle_exception)
+	(windows_nat_target::resume, get_windows_debug_event)
+	(windows_nat_target::get_tib_address)
+	(windows_nat_target::thread_name)
+	(windows_nat_target::thread_alive): Update.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (thread_rec): Use windows_thread_info::suspend.
+	(windows_continue): Use windows_continue::resume.
+	* nat/windows-nat.h (struct windows_thread_info) <suspend,
+	resume>: Declare new methods.
+	* nat/windows-nat.c: New file.
+	* configure.nat (NATDEPFILES): Add nat/windows-nat.o when needed.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_add_thread, windows_delete_thread)
+	(windows_nat_target::fetch_registers)
+	(windows_nat_target::store_registers, fake_create_process)
+	(windows_nat_target::resume, windows_nat_target::resume)
+	(get_windows_debug_event, windows_nat_target::wait)
+	(windows_nat_target::pid_to_str)
+	(windows_nat_target::get_tib_address)
+	(windows_nat_target::get_ada_task_ptid)
+	(windows_nat_target::thread_name)
+	(windows_nat_target::thread_alive): Use lwp, not tid.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (handle_exception)
+	(windows_nat_target::thread_name): Update.
+	* nat/windows-nat.h (windows_thread_info): Remove destructor.
+	<name>: Now unique_xmalloc_ptr.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (thread_rec)
+	(windows_nat_target::fetch_registers): Update.
+	* nat/windows-nat.h (struct windows_thread_info) <suspended>:
+	Update comment.
+	<debug_registers_changed, reload_context>: Now bool.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_add_thread): Use new.
+	(windows_init_thread_list, windows_delete_thread): Use delete.
+	(get_windows_debug_event): Update.
+	* nat/windows-nat.h (struct windows_thread_info): Add constructor,
+	destructor, and initializers.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (struct windows_thread_info): Remove.
+	* nat/windows-nat.h: New file.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (struct windows_thread_info) <tid>: Rename from "id".
+	(thread_rec, windows_add_thread, windows_delete_thread)
+	(windows_continue): Update.
+
+2020-04-08  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (struct windows_thread_info): Remove typedef.
+	(thread_head): Remove.
+	(thread_list): New global.
+	(thread_rec, windows_add_thread, windows_init_thread_list)
+	(windows_delete_thread, windows_continue): Update.
+
+2020-04-08  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* windows-tdep.h (windows_init_abi): Add comment.
+	(cygwin_init_abi): New declaration.
+	* windows-tdep.c: Split signal enumeration in two, one for
+	Windows and one for Cygwin.
+	(windows_gdb_signal_to_target): Only deal with signal of the
+	Windows OS ABI.
+	(cygwin_gdb_signal_to_target): New function.
+	(windows_init_abi): Rename to windows_init_abi_common, don't set
+	gdb_signal_to_target gdbarch method.  Add new new function with
+	this name.
+	(cygwin_init_abi): New function.
+	* amd64-windows-tdep.c (amd64_windows_init_abi_common): Add
+	comment.  Don't call windows_init_abi.
+	(amd64_windows_init_abi): Add comment, call windows_init_abi.
+	(amd64_cygwin_init_abi): Add comment, call cygwin_init_abi.
+	* i386-windows-tdep.c (i386_windows_init_abi): Rename to
+	i386_windows_init_abi_common, don't call windows_init_abi.  Add
+	a new function of this name.
+	(i386_cygwin_init_abi): New function.
+	(_initialize_i386_windows_tdep): Bind i386_cygwin_init_abi to
+	OS ABI Cygwin.
+
+2020-04-08  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (read_gdb_index_from_buffer): Remove objfile
+	parameter.c.
+	(dwarf2_read_gdb_index): Update.
+
+2020-04-07  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-tdep.c: Include "objfiles.h".
+	(nbsd_skip_solib_resolver): New.
+	(nbsd_init_abi): Call set_gdbarch_skip_solib_resolver().
+
+2020-04-07  Nitika Achra  <Nitika.Achra@amd.com>
+
+	* dwarf2/loc.c (loclist_describe_location): Call the function decode_debug_loclists_
+	addresses if DWARF version is 5 or more because DW_LLE_start* or DW_LLE_offset_pair
+	with DW_LLE_base_addressx are being emitted in DWARFv5.
+	Add the newly added kind DW_LOC_OFFSET_PAIR also.
+	The length of location description is an unsigned ULEB integer in DWARFv5 instead of
+	unsigned integer.
+
+2020-04-07  Nitika Achra  <Nitika.Achra@amd.com>
+
+	* dwarf2/loc.c (enum debug_loc_kind): Add a new kind DEBUG_LOC_OFFSET_PAIR.
+	(dwarf2_find_location_expression): Call the function decode_debug_loclists_
+	addresses if DWARF version is 5 or more. DW_LLE_start* or DW_LLE_offset_pair
+	with DW_LLE_base_addressx are being emitted in DWARFv5 instead of DW_LLE_GNU*.
+	Add applicable base address if the entry is DW_LLE_offset_pair from DWO.
+	(decode_debug_loclists_addresses): Return DEBUG_LOC_OFFSET_PAIR instead of
+	DEBUG_LOC_START_END in case of DW_LLE_offset_pair.
+
+
+2020-04-07  Nitika Achra  <Nitika.Achra@amd.com>
+
+	* dwarf2/read.c (cu_debug_loc_section): Added the declaration for the function.
+	(read_loclist_index): New function definition.
+	(lookup_loclist_base): New function definition.
+	(read_loclist_header): New function definition.
+	(dwarf2_cu): Add loclist_base and loclist_header field.
+	(dwarf2_locate_dwo_sections): Handle .debug_loclists.dwo section.
+	(read_full_die_1): Read the value of DW_AT_loclists_base.
+	(read_attribute_reprocess): Handle DW_FORM_loclistx.
+	(read_attribute_value): Handle DW_FORM_loclistx.
+	(skip_one_die): Handle DW_FORM_loclistx.
+	(loclist_header): New structure declaration.
+	* dwarf2/attribute.c (form_is_section_offset): Handle DW_FORM_loclistx.
+
+2020-04-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.h (struct dwarf2_psymtab): Remove two-parameters
+	constructor.  Remove `addr` parameter from other constructor and
+	add `per_cu` parameter.
+	* dwarf2/read.c (create_partial_symtab): Update.
+
+2020-04-07  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25796
+	* dwarf2/read.c (can_have_DW_AT_const_value_p): New function.
+	(partial_die_info::fixup): Inherit has_const_value.
+
+2020-04-07  Tom de Vries  <tdevries@suse.de>
+
+	* psymtab.c (maintenance_check_psymtabs): Skip static LOC_BLOCK
+	symbols without address.
+
+2020-04-06  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.h (struct thread_info): Add forward declaration.
+	(nbsd_nat_target::thread_alive): Add.
+	(nbsd_nat_target::thread_name): Likewise.
+	(nbsd_nat_target::update_thread_list): Likewise.
+	(update_thread_list::post_attach): Likewise.
+	(post_attach::pid_to_str): Likewise.
+	* nbsd-nat.c: Include "gdbthread.h" and "inferior.h".
+	(nbsd_thread_lister): Add.
+	(nbsd_nat_target::thread_alive): Likewise.
+	(nbsd_nat_target::thread_name): Likewise.
+	(nbsd_add_threads): Likewise.
+	(update_thread_list::post_attach): Likewise.
+	(nbsd_nat_target::update_thread_list): Likewise.
+	(post_attach::pid_to_str): Likewise.
+
+2020-04-06  Tom Tromey  <tromey@adacore.com>
+
+	* ada-valprint.c (print_variant_part): Extract the variant field.
+	(print_field_values): Use the field as the outer value when
+	recursing.
+
+2020-04-06  Tom Tromey  <tromey@adacore.com>
+
+	* sh-nbsd-tdep.c: Include nbsd-tdep.h.
+	* ppc-nbsd-tdep.c: Include nbsd-tdep.h.
+	* mips-nbsd-tdep.c (mipsnbsd_init_abi): Add missing ";".
+	* arm-nbsd-tdep.c: Include nbsd-tdep.h.
+	* hppa-nbsd-tdep.c: Include nbsd-tdep.h.
+
+2020-04-06  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (read_base_type) <DW_ATE_complex_float>: Handle
+	TYPE_CODE_ERROR.
+
+2020-04-06  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-tdep.c: Include "gdbarch.h".
+	Define enum with NetBSD signal numbers.
+	(nbsd_gdb_signal_from_target, nbsd_gdb_signal_to_target): New.
+	* alpha-nbsd-tdep.c (alphanbsd_init_abi): Call nbsd_init_abi().
+	* amd64-nbsd-tdep.c (amd64nbsd_init_abi): Likewise.
+	* arm-nbsd-tdep.c (arm_netbsd_elf_init_abi): Likewise.
+	* hppa-nbsd-tdep.c (hppanbsd_init_abi): Likewise.
+	* i386-nbsd-tdep.c (i386nbsd_init_abi): Likewise.
+	* mips-nbsd-tdep.c (nbsd_init_abi): Likewise.
+	* ppc-nbsd-tdep.c (ppcnbsd_init_abi): Likewise.
+	* sh-nbsd-tdep.c (shnbsd_init_abi): Likewise.
+	* sparc-nbsd-tdep.c (sparc32nbsd_init_abi): Likewise.
+	* sparc64-nbsd-tdep.c (sparc64nbsd_init_abi): Likewise.
+	* vax-nbsd-tdep.c (vaxnbsd_elf_init_abi): Likewise.
+
+2020-04-03  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR gdb/25325
+	* dwarf2/read.c (read_enumeration_type): Fix typed enum attributes.
+
+2020-04-03  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/loc.c (disassemble_dwarf_expression) <DW_OP_const_type>:
+	Read constant block.
+
+2020-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdb_bfd.h: Include gdbsupport/byte-vector.h.
+	(gdb_bfd_get_full_section_contents): New declaration.
+	* gdb_bfd.c (gdb_bfd_get_full_section_contents): New function.
+	* windows-tdep.c (is_linked_with_cygwin_dll): Use
+	gdb_bfd_get_full_section_contents.
+
+2020-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* exec.c (build_section_table): Replace internal_error with
+	gdb_assert.
+	(section_table_xfer_memory_partial): Likewise.
+	* mdebugread.c (parse_partial_symbols): Likewise.
+	* psymtab.c (lookup_partial_symbol): Likewise.
+	* utils.c (wrap_here): Likewise.
+
+2020-04-02  Tom Tromey  <tromey@adacore.com>
+
+	* f-lang.c (build_fortran_types): Use arch_type to initialize
+	builtin_complex_s32 in the TYPE_CODE_ERROR case.
+
+2020-04-02  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (partial_die_info::read): Do not create a vector
+	of attributes.
+
+2020-04-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Bernd Edlinger <bernd.edlinger@hotmail.de>
+	    Tom Tromey  <tromey@adacore.com>
+
+	* buildsym.c (buildsym_compunit::record_line): Remove
+	deduplication code.
+
+2020-04-02  Tom de Vries  <tdevries@suse.de>
+
+	PR ada/24671
+	* dwarf2/read.c (dw2_map_matching_symbols): Handle -readnow.
+
+2020-04-02  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (dwarf2_gdb_index_functions,
+	dwarf2_debug_names_functions): Init lookup_global_symbol_language with
+	NULL.
+	* psymtab.c (psym_lookup_global_symbol_language): New function.
+	(psym_functions): Init psym_lookup_global_symbol_language with
+	psym_lookup_global_symbol_language.
+	* symfile-debug.c (debug_sym_quick_functions): Init
+	lookup_global_symbol_language with NULL.
+	* symfile.c (set_initial_language): Remove fixme comment.
+	* symfile.h (struct quick_symbol_functions): Add
+	lookup_global_symbol_language.
+	* symtab.c (find_quick_global_symbol_language): New function.
+	(find_main_name): Use find_quick_global_symbol_language.
+
+2020-04-01  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* windows-tdep.c (is_linked_with_cygwin_dll): Fix style.
+
+2020-04-01  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* buildsym.c (record_line): Fix undefined behavior and preserve
+	lines at eof.
+
+2020-04-01  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* buildsym.c (record_line): Fix the resizing condition.
+
+2020-04-01  Tom Tromey  <tom@tromey.com>
+
+	* value.h (value_literal_complex): Add comment.
+	* valops.c (value_literal_complex): Refer to value.h.
+
+2020-04-01  Tom Tromey  <tom@tromey.com>
+
+	* c-exp.y (FLOAT_KEYWORD, COMPLEX): New tokens.
+	(scalar_type): New rule, from typebase.
+	(typebase): Use scalar_type.  Recognize complex types.
+	(field_name): Handle FLOAT_KEYWORD.
+	(ident_tokens): Add _Complex and __complex__.
+
+2020-04-01  Tom Tromey  <tom@tromey.com>
+
+	PR exp/25299:
+	* valarith.c (promotion_type, complex_binop): New functions.
+	(scalar_binop): Handle complex numbers.  Use promotion_type.
+	(value_pos, value_neg, value_complement): Handle complex numbers.
+
+2020-04-01  Tom Tromey  <tom@tromey.com>
+
+	* c-exp.y (COMPLEX_INT, COMPLEX_FLOAT): New tokens.
+	(exp) <COMPLEX_INT, COMPLEX_FLOAT>: New rules.
+	(parse_number): Handle complex numbers.
+
+2020-04-01  Tom Tromey  <tom@tromey.com>
+
+	* c-valprint.c (c_decorations): Change complex suffix to "i".
+
+2020-04-01  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_value_print_complex): Use accessors.
+	* value.h (value_real_part, value_imaginary_part): Declare.
+	* valops.c (value_real_part, value_imaginary_part): New
+	functions.
+	* value.c (creal_internal_fn, cimag_internal_fn): Use accessors.
+
+2020-04-01  Tom Tromey  <tom@tromey.com>
+
+	* stabsread.c (rs6000_builtin_type, read_sun_floating_type)
+	(read_range_type): Update.
+	* mdebugread.c (basic_type): Update.
+	* go-lang.c (build_go_types): Use init_complex_type.
+	* gdbtypes.h (struct main_type) <complex_type>: New member.
+	(init_complex_type): Update.
+	(arch_complex_type): Don't declare.
+	* gdbtypes.c (init_complex_type): Remove "objfile" parameter.
+	Make name if none given.  Use alloc_type_copy.  Look for cached
+	complex type.
+	(arch_complex_type): Remove.
+	(gdbtypes_post_init): Use init_complex_type.
+	* f-lang.c (build_fortran_types): Use init_complex_type.
+	* dwarf2/read.c (read_base_type): Update.
+	* d-lang.c (build_d_types): Use init_complex_type.
+	* ctfread.c (read_base_type): Update.
+
+2020-04-01  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infrun.c (stop_all_threads): Update assertion, plus when
+	stopping threads, take into account that we might be trying
+	to stop an all-stop target.
+	(stop_waiting): Call 'stop_all_threads' if there exists a
+	non-stop target.
+
+2020-04-01  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* target.h (exists_non_stop_target): New function declaration.
+	* target.c (exists_non_stop_target): New function.
+
+2020-04-01  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR gdb/24789
+	* eval.c (is_integral_or_integral_reference): New function.
+	(evaluate_subexp_standard): Allow integer references in
+	pointer arithmetic.
+
+2020-04-01  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* remote.c (remote_target::remote_parse_stop_reply): Remove the
+	check for no ptid in the stop reply when the target is non-stop.
+
+2020-04-01  Tom Tromey  <tromey@adacore.com>
+
+	* symtab.h (class lookup_name_info) <lookup_name_info>: Change
+	"name" parameter to rvalue reference.  Initialize m_name_holder.
+	<lookup_name_info>: New overloads.
+	<name>: Return gdb::string_view.
+	<c_str>: New method.
+	<make_ignore_params>: Update.
+	<search_name_hash>: Update.
+	<language_lookup_name>: Return const char *.
+	<m_name>: Change type.
+	* symtab.c (demangle_for_lookup_info::demangle_for_lookup_info)
+	(demangle_for_lookup_info::demangle_for_lookup_info): Update.
+	(lookup_name_info::match_any): Update.
+	* psymtab.c (match_partial_symbol, lookup_partial_symbol):
+	Update.
+	* minsyms.c (linkage_name_str): Update.
+	* language.c (default_symbol_name_matcher): Update.
+	* dwarf2/read.c (mapped_index_base::find_name_components_bounds):
+	Update.
+	* ada-lang.c (ada_fold_name): Change parameter to string_view.
+	(ada_lookup_name_info::ada_lookup_name_info): Update.
+	(literal_symbol_name_matcher): Update.
+
+2020-04-01  Tom Tromey  <tromey@adacore.com>
+
+	* psymtab.c (psymtab_search_name): Remove function.
+	(psym_lookup_symbol): Create search name and lookup name here.
+	(lookup_partial_symbol): Remove "name" parameter; add
+	lookup_name.
+	(psym_expand_symtabs_for_function): Update.
+
+2020-03-31  Joel Jones  <joelkevinjones@gmail.com>
+
+	PR tui/25597:
+	* python/py-tui.c: Include gdb_curses.h inside of #ifdef TUI.
+
+2020-03-31  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/abbrev.c (abbrev_table::read): Conditionally call
+	memcpy.
+
+2020-03-30  Nelson Chu  <nelson.chu@sifive.com>
+
+	* features/riscv/32bit-csr.xml: Regenerated.
+	* features/riscv/64bit-csr.xml: Regenerated.
+
+2020-03-30  Tom Tromey  <tromey@adacore.com>
+
+	* ada-valprint.c (print_variant_part): Update.
+	* ada-lang.h (ada_which_variant_applies): Update.
+	* ada-lang.c (ada_which_variant_applies): Remove outer_type and
+	outer_valaddr parameters; replace with "outer" value parameter.
+	(to_fixed_variant_branch_type): Update.
+
+2020-03-30  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* ppc-linux-nat.c: Include <algorithm>, <unordered_map>, and
+	<list>.  Remove inclusion of observable.h.
+	(PPC_DEBUG_CURRENT_VERSION): Move up define.
+	(struct arch_lwp_info): New struct.
+	(class ppc_linux_dreg_interface): New class.
+	(struct ppc_linux_process_info): New struct.
+	(struct ppc_linux_nat_target) <low_delete_thread, low_new_fork>
+	<low_new_clone, low_forget_process, low_prepare_to_resume>
+	<copy_thread_dreg_state, mark_thread_stale>
+	<mark_debug_registers_changed, register_hw_breakpoint>
+	<clear_hw_breakpoint, register_wp, clear_wp>
+	<can_use_watchpoint_cond_accel, calculate_dvc, check_condition>
+	<num_memory_accesses, get_trigger_type>
+	<create_watchpoint_request, hwdebug_point_cmp>
+	<init_arch_lwp_info, get_arch_lwp_info>
+	<low_stopped_by_watchpoint, low_stopped_data_address>: Declare as
+	methods.
+	<struct ptid_hash>: New inner struct.
+	<m_dreg_interface, m_process_info, m_installed_hw_bps>: Declare
+	members.
+	(saved_dabr_value, hwdebug_info, max_slots_number)
+	(struct hw_break_tuple, struct thread_points, ppc_threads)
+	(have_ptrace_hwdebug_interface)
+	(hwdebug_find_thread_points_by_tid)
+	(hwdebug_insert_point, hwdebug_remove_point): Remove.
+	(ppc_linux_nat_target::can_use_hw_breakpoint): Use
+	m_dreg_interface, remove call to PTRACE_SET_DEBUGREG.
+	(ppc_linux_nat_target::region_ok_for_hw_watchpoint): Add comment,
+	use m_dreg_interface.
+	(hwdebug_point_cmp): Change to...
+	(ppc_linux_nat_target::hwdebug_point_cmp): ...this method.  Use
+	reference arguments instead of pointers.
+	(ppc_linux_nat_target::ranged_break_num_registers): Use
+	m_dreg_interface.
+	(ppc_linux_nat_target::insert_hw_breakpoint): Add comment, use
+	m_dreg_interface.  Call register_hw_breakpoint.
+	(ppc_linux_nat_target::remove_hw_breakpoint): Add comment, use
+	m_dreg_interface.  Call clear_hw_breakpoint.
+	(get_trigger_type): Change to...
+	(ppc_linux_nat_target::get_trigger_type): ...this method.  Add
+	comment.
+	(ppc_linux_nat_target::insert_mask_watchpoint): Update comment,
+	use m_dreg_interface.  Call register_hw_breakpoint.
+	(ppc_linux_nat_target::remove_mask_watchpoint): Update comment,
+	use m_dreg_interface.  Call clear_hw_breakpoint.
+	(can_use_watchpoint_cond_accel): Change to...
+	(ppc_linux_nat_target::can_use_watchpoint_cond_accel): ...this
+	method.  Update comment, use m_dreg_interface and
+	m_process_info.
+	(calculate_dvc): Change to...
+	(ppc_linux_nat_target::calculate_dvc): ...this method.  Use
+	m_dreg_interface.
+	(num_memory_accesses): Change to...
+	(ppc_linux_nat_target::num_memory_accesses): ...this method.
+	(check_condition): Change to...
+	(ppc_linux_nat_target::check_condition): ...this method.
+	(ppc_linux_nat_target::can_accel_watchpoint_condition): Update
+	comment, use m_dreg_interface.
+	(create_watchpoint_request): Change to...
+	(ppc_linux_nat_target::create_watchpoint_request): ...this
+	method.  Use m_dreg_interface.
+	(ppc_linux_nat_target::insert_watchpoint): Add comment, use
+	m_dreg_interface.  Call register_hw_breakpoint or register_wp.
+	(ppc_linux_nat_target::remove_watchpoint): Add comment, use
+	m_dreg_interface.  Call clear_hw_breakpoint or clear_wp.
+	(ppc_linux_nat_target::low_forget_process)
+	(ppc_linux_nat_target::low_new_fork)
+	(ppc_linux_nat_target::low_new_clone)
+	(ppc_linux_nat_target::low_delete_thread)
+	(ppc_linux_nat_target::low_prepare_to_resume): New methods.
+	(ppc_linux_nat_target::low_new_thread): Remove previous logic,
+	only call mark_thread_stale.
+	(ppc_linux_thread_exit): Remove.
+	(ppc_linux_nat_target::stopped_data_address): Change to...
+	(ppc_linux_nat_target::low_stopped_data_address): This. Add
+	comment, use m_dreg_interface and m_thread_hw_breakpoints.
+	(ppc_linux_nat_target::stopped_by_watchpoint): Change to...
+	(ppc_linux_nat_target::stopped_by_watchpoint): This.  Add
+	comment.  Call low_stopped_data_address.
+	(ppc_linux_nat_target::watchpoint_addr_within_range): Use
+	m_dreg_interface.
+	(ppc_linux_nat_target::masked_watch_num_registers): Use
+	m_dreg_interface.
+	(ppc_linux_nat_target::copy_thread_dreg_state)
+	(ppc_linux_nat_target::mark_thread_stale)
+	(ppc_linux_nat_target::mark_debug_registers_changed)
+	(ppc_linux_nat_target::register_hw_breakpoint)
+	(ppc_linux_nat_target::clear_hw_breakpoint)
+	(ppc_linux_nat_target::register_wp)
+	(ppc_linux_nat_target::clear_wp)
+	(ppc_linux_nat_target::init_arch_lwp_info)
+	(ppc_linux_nat_target::get_arch_lwp_info): New methods.
+	(_initialize_ppc_linux_nat): Remove observer callback.
+
+2020-03-30  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* ppc-linux-nat.c (ppc_linux_nat_target::store_registers)
+	(ppc_linux_nat_target::auxv_parse)
+	(ppc_linux_nat_target::read_description)
+	(supply_gregset, fill_gregset, supply_fpregset, fill_fpregset):
+	Move up.
+
+2020-03-30  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* linux-nat.h (low_new_clone): New method.
+	* linux-nat.c (linux_handle_extended_wait): Call low_new_clone.
+
+2020-03-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dbxread.c (dbx_psymtab_to_symtab_1): Rename to...
+	(dbx_expand_psymtab): ... this.
+	(start_psymtab): Update.
+	* mdebugread.c (psymtab_to_symtab_1): Rename to...
+	(mdebug_expand_psymtab): ... this.
+	(parse_partial_symbols): Update.
+	(new_psymtab): Update.
+	* xcoffread.c (xcoff_psymtab_to_symtab_1): Rename to...
+	(xcoff_expand_psymtab): ... this.
+	(xcoff_start_psymtab): Update.
+
+2020-03-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* psympriv.h (partial_symtab) <read_dependencies>: Rename to...
+	<expand_dependencies>: ... this.
+	* psymtab.c (partial_symtab::read_dependencies): Rename to...
+	(partial_symtab::expand_dependencies): ... this.
+	* dwarf2/read.c (dwarf2_include_psymtab) <expand_psymtab>:
+	Update.
+	(dwarf2_psymtab::expand_psymtab): Update.
+	* dbxread.c (dbx_psymtab_to_symtab_1): Update.
+	* mdebugread.c (psymtab_to_symtab_1): Update.
+	* xcoffread.c (xcoff_psymtab_to_symtab_1): Update.
+
+2020-03-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* psympriv.h (discard_psymtab): Remove.
+	* dbxread.c (dbx_end_psymtab): Update.
+	* xcoffread.c (xcoff_end_psymtab): Update.
+
+2020-03-28  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/attribute.h (struct attribute) <form_is_constant>: Update
+	comment.
+
+2020-03-28  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_attribute_reprocess): Fix formatting.
+
+2020-03-27  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-nat.c (windows_add_all_dlls): Fix system dll paths.
+
+2020-03-26  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-tdep.c (fbsd_print_auxv_entry): Handle AT_FREEBSD_BSDFLAGS.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (handle_data_member_location, dwarf2_add_field)
+	(mark_common_block_symbol_computed, read_tag_string_type)
+	(attr_to_dynamic_prop, read_subrange_type): Update.
+	(dwarf2_get_ref_die_offset, dwarf2_get_attr_constant_value): Move
+	to be methods on struct attribute.
+	(skip_one_die, process_imported_unit_die, read_namespace_alias)
+	(read_call_site_scope, partial_die_info::read)
+	(partial_die_info::read, lookup_die_type, follow_die_ref):
+	Update.
+	* dwarf2/attribute.c (attribute::get_ref_die_offset): New method,
+	from dwarf2_get_ref_die_offset.
+	(attribute::constant_value): New method, from
+	dwarf2_get_attr_constant_value.
+	* dwarf2/attribute.h (struct attribute) <get_ref_die_offset>:
+	Declare method.
+	<constant_value>: New method.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf_unit_type_name, dwarf_tag_name)
+	(dwarf_attr_name, dwarf_form_name, dwarf_bool_name)
+	(dwarf_type_encoding_name): Move to stringify.c.
+	* Makefile.in (COMMON_SFILES): Add dwarf2/stringify.c.
+	* dwarf2/stringify.c: New file.
+	* dwarf2/stringify.h: New file.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/die.h (struct die_info) <addr_base, ranges_base>:
+	Rewrite.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/die.h (struct die_info) <addr_base, ranges_base>: New
+	methods.
+	* dwarf2/read.c (lookup_addr_base): Move to die.h.
+	(lookup_ranges_base): Likewise.
+	(read_cutu_die_from_dwo, read_full_die_1): Update.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_import_statement, read_file_scope)
+	(read_type_unit_scope, inherit_abstract_dies, read_func_scope)
+	(read_lexical_block_scope, read_call_site_scope)
+	(dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds)
+	(handle_struct_member_die, process_structure_scope)
+	(update_enumeration_type_from_children)
+	(process_enumeration_scope, read_array_type, read_common_block)
+	(read_namespace, read_module, read_subroutine_type): Update.
+	(sibling_die): Remove.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (lookup_addr_base, lookup_ranges_base)
+	(build_type_psymtabs_reader, read_structure_type)
+	(read_enumeration_type, read_full_die_1): Update.
+	(dwarf2_attr_no_follow): Move to die.h.
+	* dwarf2/die.h (struct die_info) <attr>: New method.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (struct dwarf2_cu) <base_known>: Remove.
+	<base_address>: Now an optional.
+	(dwarf2_find_base_address, dwarf2_rnglists_process)
+	(dwarf2_ranges_process, fill_in_loclist_baton)
+	(dwarf2_symbol_mark_computed): Update.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (struct die_info): Move to die.h.
+	* dwarf2/die.h: New file.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/line-header.h (dwarf_decode_line_header): Declare.
+	* dwarf2/read.c
+	(dwarf2_statement_list_fits_in_line_number_section_complaint):
+	Move to line-header.c.
+	(read_checked_initial_length_and_offset, read_formatted_entries):
+	Likewise.
+	(dwarf_decode_line_header): Split into two.
+	* dwarf2/line-header.c
+	(dwarf2_statement_list_fits_in_line_number_section_complaint):
+	Move from read.c.
+	(read_checked_initial_length_and_offset, read_formatted_entries):
+	Likewise.
+	(dwarf_decode_line_header): New function, split from read.c.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_objfile) <read_line_string>:
+	Declare method.
+	* dwarf2/read.c (read_attribute_value): Update.
+	(dwarf2_per_objfile::read_line_string): Rename from
+	read_indirect_line_string.
+	(read_formatted_entries): Update.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/macro.c (dwarf_decode_macro_bytes): Use objfile local
+	variable.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/macro.h (dwarf_decode_macros): Make section parameter
+	const.
+	* dwarf2/macro.c (skip_form_bytes, skip_unknown_opcode)
+	(dwarf_decode_macro_bytes, dwarf_decode_macros): Make section
+	parameter const.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf_decode_macros): Make "lh" const.
+	* dwarf2/macro.h (dwarf_decode_macros): Constify "lh" parameter.
+	* dwarf2/macro.c (macro_start_file): Constify "lh" parameter.
+	(dwarf_decode_macro_bytes, dwarf_decode_macros): Likewise.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/line-header.h (struct line_header) <is_valid_file_index,
+	file_names_size, file_full_name, file_file_name>: Use const.
+	<file_name_at, file_names>: Add const overload.
+	* dwarf2/line-header.c (line_header::file_file_name)
+	(line_header::file_full_name): Update.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_macro_malformed_definition_complaint)
+	(macro_start_file, consume_improper_spaces)
+	(parse_macro_definition, skip_form_bytes, skip_unknown_opcode)
+	(dwarf_parse_macro_header, dwarf_decode_macro_bytes)
+	(dwarf_decode_macros): Move to macro.c.
+	* dwarf2/macro.c: New file.
+	* dwarf2/macro.h: New file.
+	* Makefile.in (COMMON_SFILES): Add dwarf2/macro.c.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/section.h (struct dwarf2_section_info) <read_string>: New
+	method.
+	* dwarf2/section.c: New method.  From
+	read_indirect_string_at_offset_from.
+	* dwarf2/read.c (mapped_debug_names::namei_to_name): Update.
+	(read_indirect_string_at_offset_from): Move to section.c.
+	(read_indirect_string_at_offset): Rewrite.
+	(read_indirect_line_string_at_offset): Remove.
+	(read_indirect_string, read_indirect_line_string)
+	(dwarf_decode_macro_bytes): Update.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/section.h (struct dwarf2_section_info)
+	<overload_complaint>: Declare.
+	(dwarf2_section_buffer_overflow_complaint): Don't declare.
+	* dwarf2/section.c (dwarf2_section_info::overflow_complaint):
+	Rename from dwarf2_section_buffer_overflow_complaint.
+	* dwarf2/read.c (skip_one_die, partial_die_info::read)
+	(skip_form_bytes, dwarf_decode_macro_bytes): Update.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/section.h (dwarf2_section_buffer_overflow_complaint):
+	Declare.
+	* dwarf2/section.c (dwarf2_section_buffer_overflow_complaint):
+	Move from read.c.
+	* dwarf2/read.c (dwarf2_section_buffer_overflow_complaint): Move
+	to section.c.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf_decode_macros): Split into two overloads.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (macro_start_file): Change "cu" parameter to
+	"builder".
+	(dwarf_decode_macro_bytes): Likewise.  Add dwarf2_per_objfile
+	parameter.
+	(dwarf_decode_macros): Update.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_attribute_value): Update.
+	(read_indirect_string_from_dwz): Move to dwz.c; change into
+	method.
+	(dwarf_decode_macro_bytes): Update.
+	* dwarf2/dwz.h (struct dwz_file) <read_string>: Declare method.
+	* dwarf2/dwz.c: New file.
+	* Makefile.in (COMMON_SFILES): Add dwz.c.
+
+2020-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwz_file): Move to dwz.h.
+	* dwarf2/read.c: Add include.
+	* dwarf2/index-write.c: Add include.
+	* dwarf2/index-cache.c: Add include.
+	* dwarf2/dwz.h: New file.
+
+2020-03-25  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile-object-load.c (get_out_value_type): Mention
+	correct symbol name in error message.
+
+2020-03-25  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-nat.c (windows_add_all_dlls): Fix system dll paths.
+
+2020-03-25  Tom de Vries  <tdevries@suse.de>
+
+	* symtab.h (is_main_symtab_of_compunit_symtab): New function.
+	* symmisc.c (dump_symtab_1): Print user and includes fields.
+	(maintenance_info_symtabs): Same.
+
+2020-03-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR gdb/25534
+	* riscv-tdep.c (riscv_arg_info::c_offset): Update comment.
+	(riscv_regcache_cooked_write): New function.
+	(riscv_push_dummy_call): Use new function.
+	(riscv_return_value): Likewise.
+
+2020-03-24  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* fbsd-nat.c (fbsd_nat_target::follow_fork): Change bool to int.
+	* fbsd-nat.h (class fbsd_nat_target) <follow_fork>: Likewise.
+	* inf-ptrace.c (inf_ptrace_target::follow_fork): Likewise.
+	* inf-ptrace.h (struct inf_ptrace_target) <follow_fork>: Likewise.
+	* infrun.c (follow_fork): Likewise.
+	(follow_fork_inferior): Likewise.
+	* linux-nat.c (linux_nat_target::follow_fork): Likewise.
+	* linux-nat.h (class linux_nat_target): Likewise.
+	* remote.c (class remote_target) <follow_fork>: Likewise.
+	(remote_target::follow_fork): Likewise.
+	* target-delegates.c: Re-generate.
+	* target.c (default_follow_fork): Likewise.
+	(target_follow_fork): Likewise.
+	* target.h (struct target_ops) <follow_fork>: Likewise.
+	(target_follow_fork): Likewise.
+
+2020-03-24  Tom de Vries  <tdevries@suse.de>
+
+	* psymtab.c (maintenance_info_psymtabs): Print user field.
+
+2020-03-20  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/loc.h (dwarf2_evaluate_property): Make "addr_stack"
+	const.
+	* dwarf2/loc.c (dwarf2_evaluate_property): Make "addr_stack"
+	const.
+
+2020-03-20  Simon Marchi  <simon.marchi@efficios.com>
+
+	* ptrace.m4: Don't check for ptrace declaration.
+	* config.in: Re-generate.
+	* configure: Re-generate.
+	* nat/gdb_ptrace.h: Don't declare ptrace if HAVE_DECL_PTRACE is
+	not defined.
+
+2020-03-20  Kamil Rytarowski  <n54@gmx.com>
+
+	* amd64-bsd-nat.c (gdb_ptrace): Change return type from `int' to
+	`PTRACE_TYPE_RET'.
+	* i386-bsd-nat.c (gdb_ptrace): Likewise.
+	* sparc-nat.c (gdb_ptrace): Likewise.
+	* x86-bsd-nat.c (gdb_ptrace): Likewise.
+
+2020-03-20  Tom Tromey  <tromey@adacore.com>
+
+	* c-exp.y (lex_one_token): Fix assert.
+
+2020-03-20  Tom Tromey  <tromey@adacore.com>
+
+	* ada-tasks.c (read_atcb): Use smaller length in strncpy call.
+	* linux-tdep.c (linux_fill_prpsinfo): Use smaller length in
+	strncpy call.
+
+2020-03-20  Tom Tromey  <tromey@adacore.com>
+
+	* symmisc.c (maintenance_print_one_line_table): Use ui_out.
+
+2020-03-20  Tom Tromey  <tromey@adacore.com>
+
+	* ada-valprint.c (print_variant_part): Remove parameters; switch
+	to value-based API.
+	(print_field_values): Likewise.
+	(ada_val_print_struct_union): Likewise.
+	(ada_value_print_1): Update.
+
+2020-03-20  Kamil Rytarowski  <n54@gmx.com>
+
+	* ppc-nbsd-nat.c (ppc_nbsd_nat_target): Inherit from
+	nbsd_nat_target instead of inf_ptrace_target.
+	* ppc-nbsd-nat.c: Include "nbsd-nat.h", as we are now using
+	nbsd_nat_target.
+
+2020-03-20  Kamil Rytarowski  <n54@gmx.com>
+
+	* hppa-nbsd-nat.c (fetch_registers): New variable lwp and pass
+	it to the ptrace call.
+	* (store_registers): Likewise.
+
+2020-03-20  Kamil Rytarowski  <n54@gmx.com>
+
+	* ppc-nbsd-nat.c (fetch_registers): New variable lwp and pass
+	it to the ptrace call.
+	* (store_registers): Likewise.
+
+2020-03-19  Luis Machado  <luis.machado@linaro.org>
+
+	* nat/aarch64-sve-linux-ptrace.c (aarch64_sve_set_vq): If vg is not
+	valid, fetch vg value from ptrace.
+
+2020-03-19  Kamil Rytarowski  <n54@gmx.com>
+	* inf-ptrace.h: Disable get_ptrace_pid on NetBSD.
+	* inf-ptrace.c: Likewise.
+	* (gdb_ptrace): Add.
+	* (inf_ptrace_target::resume): Update.
+	* (inf_ptrace_target::xfer_partial): Likewise.
+	* (inf_ptrace_peek_poke): Change argument `pid' to `ptid'.
+	* (inf_ptrace_peek_poke): Update.
+
+2020-03-19  Kamil Rytarowski  <n54@gmx.com>
+
+	* x86-bsd-nat.c (gdb_ptrace): New.
+	* (x86bsd_dr_set): Add new argument `ptid'.
+	* (x86bsd_dr_get, x86bsd_dr_set, x86bsd_dr_set_control,
+	x86bsd_dr_set_addr): Update.
+
+2020-03-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* remote.c (remote_target::process_stop_reply): Handle events for
+	all threads differently.
+
+2020-03-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* completer.c (completion_tracker::remove_completion): Define new
+	function.
+	* completer.h (completion_tracker::remove_completion): Declare new
+	function.
+	* symtab.c (completion_list_add_symbol): Remove aliasing msymbols
+	when adding a C++ function symbol.
+
+2020-03-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* completer.c (completion_tracker::completion_hash_entry): Define
+	new class.
+	(advance_to_filename_complete_word_point): Call
+	recompute_lowest_common_denominator.
+	(completion_tracker::completion_tracker): Call discard_completions
+	to setup the hash table.
+	(completion_tracker::discard_completions): Allow for being called
+	from the constructor, pass new equal function, and element deleter
+	when constructing the hash table.  Initialise new class member
+	variables.
+	(completion_tracker::maybe_add_completion): Remove use of
+	m_entries_vec, and store more information into m_entries_hash.
+	(completion_tracker::recompute_lcd_visitor): New function, most
+	content taken from...
+	(completion_tracker::recompute_lowest_common_denominator):
+	...here, this now just visits each item in the hash calling the
+	above visitor.
+	(completion_tracker::build_completion_result): Remove use of
+	m_entries_vec, call recompute_lowest_common_denominator.
+	* completer.h (completion_tracker::have_completions): Remove use
+	of m_entries_vec.
+	(completion_tracker::completion_hash_entry): Declare new class.
+	(completion_tracker::recompute_lowest_common_denominator): Change
+	function signature.
+	(completion_tracker::recompute_lcd_visitor): Declare new function.
+	(completion_tracker::m_entries_vec): Delete.
+	(completion_tracker::m_entries_hash): Initialize to NULL.
+	(completion_tracker::m_lowest_common_denominator_valid): New
+	member variable.
+	(completion_tracker::m_lowest_common_denominator_max_length): New
+	member variable.
+
+2020-03-17  Kamil Rytarowski  <n54@gmx.com>
+
+	* regformats/regdef.h: Put reg in gdb namespace.
+
+2020-03-17  Kamil Rytarowski  <n54@gmx.com>
+
+	* i386-bsd-nat.c (gdb_ptrace): New.
+	* (i386bsd_fetch_inferior_registers,
+	i386bsd_store_inferior_registers) Switch from pid_t to ptid_t.
+	* (i386bsd_fetch_inferior_registers,
+	i386bsd_store_inferior_registers) Use gdb_ptrace.
+
+2020-03-17  Kamil Rytarowski  <n54@gmx.com>
+
+	* amd64-bsd-nat.c (gdb_ptrace): New.
+	* (amd64bsd_fetch_inferior_registers,
+	amd64bsd_store_inferior_registers) Switch from pid_t to ptid_t.
+	* (amd64bsd_fetch_inferior_registers,
+	amd64bsd_store_inferior_registers) Use gdb_ptrace.
+
+2020-03-17  Kamil Rytarowski  <n54@gmx.com>
+
+	* user-regs.c (user_reg::read): Rename to...
+	(user_reg::xread): ...this.
+	* (append_user_reg): Rename argument `read' to `xread'.
+	* (user_reg_add_builtin): Likewise.
+	* (user_reg_add): Likewise.
+	* (value_of_user_reg): Likewise.
+
+2020-03-17  Kamil Rytarowski  <n54@gmx.com>
+
+	* sparc-nat.c (gdb_ptrace): New.
+	* sparc-nat.c (sparc_fetch_inferior_registers)
+	(sparc_store_inferior_registers) Remove obsolete comment.
+	* sparc-nat.c (sparc_fetch_inferior_registers)
+	(sparc_store_inferior_registers) Switch from pid_t to ptid_t.
+	* sparc-nat.c (sparc_fetch_inferior_registers)
+	(sparc_store_inferior_registers) Use gdb_ptrace.
+
+2020-03-17  Kamil Rytarowski  <n54@gmx.com>
+
+	* sh-nbsd-nat.c (fetch_registers): New variable lwp and pass
+	it to the ptrace call.
+	* sh-nbsd-nat.c (store_registers): Likewise.
+
+2020-03-17  Kamil Rytarowski  <n54@gmx.com>
+
+	* sh-nbsd-nat.c (sh_nbsd_nat_target): Inherit from
+	nbsd_nat_target instead of inf_ptrace_target.
+	* sh-nbsd-nat.c: Include "nbsd-nat.h", as we are now using
+	nbsd_nat_target.
+
+2020-03-17  Kamil Rytarowski  <n54@gmx.com>
+
+	* amd64-bsd-nat.c: Include amd64-bsd-nat.h".
+
+2020-03-17  Kamil Rytarowski  <n54@gmx.com>
+
+	* nbsd-nat.c: Include <sys/types.h>, <sys/ptrace.h> and
+	<sys/sysctl.h>.
+	* nbsd-nat.c (nbsd_nat_target::pid_to_exec_file): Rewrite.
+
+2020-03-17  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/23710
+	* dwarf2/read.h (struct dwarf2_per_cu_data): Add unit_type and lang
+	fields.
+	* dwarf2/read.c (process_psymtab_comp_unit): Initialize unit_type and lang
+	fields.
+	(process_imported_unit_die): Skip import of c++ CUs.
+
+2020-03-16  Tom Tromey  <tom@tromey.com>
+
+	* p-valprint.c (pascal_object_print_value): Initialize
+	base_value.
+
+2020-03-16  Anton Kolesov  <anton.kolesov@synopsys.com>
+	    Shahab Vahedi  <shahab@synopsys.com>
+
+	* Makefile.in: Add arch/arc.o
+	* configure.tgt: Likewise.
+	* arc-tdep.c (arc_tdesc_init): Use arc_read_description.
+	(_initialize_arc_tdep): Don't initialize old target descriptions.
+	(arc_read_description): New function to cache target descriptions.
+	* arc-tdep.h (arc_read_description): Add proto type.
+	* arch/arc.c: New file.
+	* arch/arc.h: Likewise.
+	* features/Makefile: Replace old target descriptions with new.
+	* features/arc-arcompact.c: Remove.
+	* features/arc-arcompact.xml: Likewise.
+	* features/arc-v2.c: Likewise
+	* features/arc-v2.xml: Likewise
+	* features/arc/aux-arcompact.xml: New file.
+	* features/arc/aux-v2.xml: Likewise.
+	* features/arc/core-arcompact.xml: Likewise.
+	* features/arc/core-v2.xml: Likewise.
+	* features/arc/aux-arcompact.c: Generate.
+	* features/arc/aux-v2.c: Likewise.
+	* features/arc/core-arcompact.c: Likewise.
+	* features/arc/core-v2.c: Likewise.
+	* target-descriptions (maint_print_c_tdesc_cmd): Support ARC features.
+
+2020-03-16  Tom Tromey  <tromey@adacore.com>
+
+	PR gdb/25663:
+	* dwarf2/read.c (dwarf2_name): Strip leading namespaces after
+	putting value into bcache.
+
+2020-03-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	PR gdb/21500
+	* amd64-windows-tdep.c (amd64_windows_init_abi): Rename
+	to...
+	(amd64_windows_init_abi_common): ... this.  Don't set size of
+	long type.
+	(amd64_windows_init_abi): New function.
+	(amd64_cygwin_init_abi): New function.
+	(_initialize_amd64_windows_tdep): Use amd64_cygwin_init_abi for
+	the Cygwin OS ABI.
+	* i386-windows-tdep.c (_initialize_i386_windows_tdep): Clarify
+	comment.
+
+2020-03-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* windows-tdep.h (is_linked_with_cygwin_dll): New declaration.
+	* windows-tdep.c (CYGWIN_DLL_NAME): New.
+	(pe_import_directory_entry): New struct type.
+	(is_linked_with_cygwin_dll): New function.
+	* amd64-windows-tdep.c (amd64_windows_osabi_sniffer): Select
+	GDB_OSABI_CYGWIN if the BFD is linked with the Cygwin DLL.
+	* i386-windows-tdep.c (i386_windows_osabi_sniffer): Likewise.
+
+2020-03-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* i386-windows-tdep.c: Mass-rename "cygwin" to "windows", except
+	i386_cygwin_core_osabi_sniffer.
+
+2020-03-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* i386-cygwin-tdep.c: Rename to...
+	* i386-windows-tdep.c: ... this.
+	* Makefile.in (ALL_TARGET_OBS): Rename i386-cygwin-tdep.c to
+	i386-windows-tdep.c.
+	* configure.tgt: Likewise.
+
+2020-03-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* osabi.h (enum gdb_osabi): Add GDB_OSABI_WINDOWS.
+	* osabi.c (gdb_osabi_names): Add "Windows".
+	* i386-cygwin-tdep.c (i386_cygwin_osabi_sniffer): Return
+	GDB_OSABI_WINDOWS when the binary's target is "pei-i386".
+	(i386_cygwin_core_osabi_sniffer): New function, extracted from
+	i386_cygwin_osabi_sniffer.
+	(_initialize_i386_cygwin_tdep): Register OS ABI
+	GDB_OSABI_WINDOWS for i386.
+	* amd64-windows-tdep.c (amd64_windows_osabi_sniffer): Return
+	GDB_OSABI_WINDOWS when the binary's target is "pei-x86-64".
+	(_initialize_amd64_windows_tdep): Register OS ABI GDB_OSABI_WINDOWS
+	for x86-64.
+	* configure.tgt: Use GDB_OSABI_WINDOWS as the default OS ABI
+	when the target matches '*-*-mingw*'.
+
+2020-03-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* defs.h (enum gdb_osabi): Move to...
+	* osabi.h (enum gdb_osabi): ... here.
+	* gdbarch.sh: Include osabi.h in gdbarch.h.
+	* gdbarch.h: Re-generate.
+
+2020-03-16  Simon Marchi  <simon.marchi@efficios.com>
+
+	* amd64-windows-tdep.c (amd64_windows_osabi_sniffer): New
+	function.
+	(_initialize_amd64_windows_tdep): Register osabi sniffer.
+
+2020-03-14  Tom Tromey  <tom@tromey.com>
+
+	* c-typeprint.c (cp_type_print_method_args): Print "__restrict__"
+	for C++.
+	(c_type_print_modifier): Likewise.  Add "language" parameter.
+	(c_type_print_varspec_prefix, c_type_print_base_struct_union)
+	(c_type_print_base_1): Update.
+	* type-stack.h (enum type_pieces) <tp_atomic, tp_restrict>: New
+	constants.
+	* type-stack.c (type_stack::insert): Handle tp_atomic and
+	tp_restrict.
+	(type_stack::follow_type_instance_flags): Likewise.
+	(type_stack::follow_types): Likewise.  Merge type-following code.
+	* c-exp.y (RESTRICT, ATOMIC): New tokens.
+	(space_identifier, cv_with_space_id)
+	(const_or_volatile_or_space_identifier_noopt)
+	(const_or_volatile_or_space_identifier): Remove.
+	(single_qualifier, qualifier_seq_noopt, qualifier_seq): New
+	rules.
+	(ptr_operator, typebase): Update.
+	(enum token_flag) <FLAG_C>: New constant.
+	(ident_tokens): Add "restrict", "__restrict__", "__restrict", and
+	"_Atomic".
+	(lex_one_token): Handle FLAG_C.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* m68k-bsd-nat.c (fetch_registers): New variable lwp and pass
+	it to the ptrace call.
+	* m68k-bsd-nat.c (store_registers): Likewise.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* m68k-bsd-nat.c (m68kbsd_supply_gregset): Change type of regs to
+	gdb_byte *.
+	* m68k-bsd-nat.c (m68kbsd_supply_fpregset): Likewise.
+	* m68k-bsd-nat.c (m68kbsd_collect_gregset): Likewise.
+	* m68k-bsd-nat.c (m68kbsd_supply_pcb): Cast &tmp to gdb_byte *.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* m68k-bsd-nat.c (m68k_bsd_nat_target): Inherit from
+	nbsd_nat_target instead of inf_ptrace_target.
+	* m68k-bsd-nat.c: Include "nbsd-nat.h", as we are now using
+	nbsd_nat_target.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* m68k-bsd-nat.c: Define _KERNTYPES to get the declaration of
+	register_t.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* alpha-bsd-nat.c (fetch_registers): New variable lwp and pass
+	it to the ptrace call.
+	* alpha-bsd-nat.c (store_registers): Likewise.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* alpha-bsd-nat.c: Remove <sys/procfs.h> and "gregset.h" from
+	includes.
+	* alpha-bsd-nat.c (gregset_t, fpregset_t): Remove.
+	* alpha-bsd-nat.c (supply_gregset, fill_gregset, supply_fpregset,
+	fill_fpregset): Likewise.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* alpha-bsd-nat.c (alpha_netbsd_nat_target): Inherit from
+	nbsd_nat_target instead of inf_ptrace_target.
+	* alpha-bsd-nat.c: Include "nbsd-nat.h", as we are now using
+	nbsd_nat_target.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* alpha-bsd-nat.c: Define _KERNTYPES to get the declaration of
+	register_t.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* arm-nbsd-nat.c (fetch_register): New variable lwp and pass
+	it to the ptrace call.
+	* arm-nbsd-nat.c (fetch_fp_register): Likewise.
+	* arm-nbsd-nat.c (fetch_fp_regs): Likewise.
+	* arm-nbsd-nat.c (store_register): Likewise.
+	* arm-nbsd-nat.c (store_regs): Likewise.
+	* arm-nbsd-nat.c (store_fp_register): Likewise.
+	* arm-nbsd-nat.c (store_fp_regs): Likewise.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* arm-nbsd-nat.c (arm_netbsd_nat_target): Inherit from
+	nbsd_nat_target instead of inf_ptrace_target.
+	* arm-nbsd-nat.c: Include "nbsd-nat.h", as we are now using
+	nbsd_nat_target.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* x86-bsd-nat.c (x86bsd_dr_get): New variable lwp and pass
+	it to the ptrace call.
+	* x86-bsd-nat.c (x86bsd_dr_set): Likewise.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* vax-bsd-nat.c (vaxbsd_supply_gregset): New variable lwp and pass
+	it to the ptrace call.
+	* vax-bsd-nat.c (vaxbsd_collect_gregset): Likewise.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* vax-bsd-nat.c (vaxbsd_supply_gregset): Cast gregs to const
+	gdb_byte *.
+	* vax-bsd-nat.c (vaxbsd_collect_gregset): Cast gregs to void *.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* vax-bsd-nat.c (vax_bsd_nat_target): Inherit from nbsd_nat_target
+	instead of inf_ptrace_target.
+	* vax-bsd-nat.c: Include "nbsd-nat.h", as we are now using
+	nbsd_nat_target.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* mips-nbsd-nat.c: Define _KERNTYPES to get the declaration of
+	register_t.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* ppc-nbsd-nat.c: Define _KERNTYPES to get the declaration of
+	register_t.
+
+2020-03-14  Kamil Rytarowski  <n54@gmx.com>
+
+	* vax-bsd-nat.c: Define _KERNTYPES to get the declaration of
+	register_t.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* value.h (val_print): Don't declare.
+	* valprint.h (val_print_array_elements)
+	(val_print_scalar_formatted, generic_val_print): Don't declare.
+	* valprint.c (generic_val_print_array): Take a struct value.
+	(generic_val_print_ptr, generic_val_print_memberptr)
+	(generic_val_print_bool, generic_val_print_int)
+	(generic_val_print_char, generic_val_print_complex)
+	(generic_val_print): Remove.
+	(generic_value_print): Update.
+	(do_val_print): Remove unused parameters.  Don't call
+	la_val_print.
+	(val_print): Remove.
+	(common_val_print): Update.  Don't call value_check_printable.
+	(val_print_scalar_formatted, val_print_array_elements): Remove.
+	* rust-lang.c (rust_val_print): Remove.
+	(rust_language_defn): Update.
+	* p-valprint.c (pascal_val_print): Remove.
+	(pascal_value_print_inner): Update.
+	(pascal_object_print_val_fields, pascal_object_print_val):
+	Remove.
+	(pascal_object_print_static_field): Update.
+	* p-lang.h (pascal_val_print): Don't declare.
+	* p-lang.c (pascal_language_defn): Update.
+	* opencl-lang.c (opencl_language_defn): Update.
+	* objc-lang.c (objc_language_defn): Update.
+	* m2-valprint.c (m2_print_unbounded_array, m2_val_print): Remove.
+	* m2-lang.h (m2_val_print): Don't declare.
+	* m2-lang.c (m2_language_defn): Update.
+	* language.h (struct language_defn) <la_val_print>: Remove.
+	* language.c (unk_lang_value_print_inner): Rename.  Change
+	argument types.
+	(unknown_language_defn, auto_language_defn): Update.
+	* go-valprint.c (go_val_print): Remove.
+	* go-lang.h (go_val_print): Don't declare.
+	* go-lang.c (go_language_defn): Update.
+	* f-valprint.c (f_val_print): Remove.
+	* f-lang.h (f_value_print): Don't declare.
+	* f-lang.c (f_language_defn): Update.
+	* d-valprint.c (d_val_print): Remove.
+	* d-lang.h (d_value_print): Don't declare.
+	* d-lang.c (d_language_defn): Update.
+	* cp-valprint.c (cp_print_value_fields)
+	(cp_print_value_fields_rtti, cp_print_value): Remove.
+	(cp_print_static_field): Update.
+	* c-valprint.c (c_val_print_array, c_val_print_ptr)
+	(c_val_print_struct, c_val_print_union, c_val_print_int)
+	(c_val_print_memberptr, c_val_print): Remove.
+	* c-lang.h (c_val_print_array, cp_print_value_fields)
+	(cp_print_value_fields_rtti): Don't declare.
+	* c-lang.c (c_language_defn, cplus_language_defn)
+	(asm_language_defn, minimal_language_defn): Update.
+	* ada-valprint.c (ada_val_print_ptr, ada_val_print_num): Remove.
+	(ada_val_print_enum): Take a struct value.
+	(ada_val_print_flt, ada_val_print_array, ada_val_print_1)
+	(ada_val_print): Remove.
+	(ada_value_print_1): Update.
+	(printable_val_type): Remove.
+	* ada-lang.h (ada_val_print): Don't declare.
+	* ada-lang.c (ada_language_defn): Update.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (do_val_print): Update.
+	* python/python-internal.h (gdbpy_apply_val_pretty_printer): Take
+	a struct value.
+	(value_to_value_object_no_release): Declare.
+	* python/py-value.c (value_to_value_object_no_release): New
+	function.
+	* python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Take a
+	struct value.
+	* guile/scm-value.c (vlscm_scm_from_value_no_release): New
+	function.
+	* guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer): Take
+	a struct value.
+	* guile/guile-internal.h (vlscm_scm_from_value_no_release):
+	Declare.
+	(gdbscm_apply_val_pretty_printer): Take a struct value.
+	* extension.h (apply_ext_lang_val_pretty_printer): Take a struct
+	value.
+	* extension.c (apply_ext_lang_val_pretty_printer): Take a struct
+	value.
+	* extension-priv.h (struct extension_language_ops)
+	<apply_val_pretty_printer>: Take a struct value.
+	* cp-valprint.c (cp_print_value): Create a struct value.
+	(cp_print_value): Update.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* ada-valprint.c (print_field_values): Call common_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* ada-valprint.c (val_print_packed_array_elements): Remove
+	bitoffset and val parameters.  Call common_val_print.
+	(ada_val_print_string): Remove offset, address, and original_value
+	parameters.
+	(ada_val_print_array): Update.
+	(ada_value_print_array): New function.
+	(ada_value_print_1): Call it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* ada-valprint.c (ada_value_print): Use common_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* ada-valprint.c (ada_val_print_ref): Use common_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* ada-valprint.c (ada_value_print_num): New function.
+	(ada_value_print_1): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* ada-valprint.c (ada_value_print_1) <TYPE_CODE_FLT>: Rewrite.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* ada-valprint.c (ada_value_print_ptr): New function.
+	(ada_value_print_1): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* ada-valprint.c (ada_val_print_gnat_array): Take a struct value;
+	call common_val_print.
+	(ada_val_print_1): Update.
+	(ada_value_print_1): New function.
+	(ada_value_print_inner): Rewrite.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* cp-valprint.c (cp_print_value_fields): Update.
+	(cp_print_value): New function.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* m2-valprint.c (m2_value_print_inner): Use
+	cp_print_value_fields.
+	* cp-valprint.c	(cp_print_value_fields): New function.
+	* c-valprint.c (c_value_print_struct): New function.
+	(c_value_print_inner): Use c_value_print_struct.
+	* c-lang.h (cp_print_value_fields): Declare.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* c-valprint.c (c_value_print_array): New function.
+	(c_value_print_inner): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* c-valprint.c (c_value_print_memberptr): New function.
+	(c_value_print_inner): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* c-valprint.c (c_value_print_int): New function.
+	(c_value_print_inner): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* c-valprint.c (c_value_print_ptr): New function.
+	(c_value_print_inner): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* c-valprint.c (c_value_print_inner): Rewrite.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_value_print_complex): New function.
+	(generic_value_print): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_val_print_float): Don't call
+	val_print_scalar_formatted.
+	(generic_val_print, generic_value_print): Update.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_value_print_char): New function
+	(generic_value_print): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_value_print_int): New function.
+	(generic_value_print): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_value_print_bool): New function.
+	(generic_value_print): Use it.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_val_print_func): Simplify.
+	(generic_val_print, generic_value_print): Update.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_val_print_flags): Remove.
+	(generic_val_print, generic_value_print): Update.
+	(val_print_type_code_flags): Add original_value parameter.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_val_print): Update.
+	(generic_value_print): Update.
+	* valprint.c (generic_val_print_enum): Don't call
+	val_print_scalar_formatted.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_value_print): Call generic_value_print_ptr.
+	* valprint.c (generic_value_print_ptr): New function.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_value_print): Rewrite.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* p-valprint.c (pascal_object_print_value_fields)
+	(pascal_object_print_value): New functions.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* p-valprint.c (pascal_value_print_inner): Rewrite.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* f-valprint.c (f_value_print_innner): Rewrite.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* m2-valprint.c (m2_print_unbounded_array): New overload.
+	(m2_print_unbounded_array): Update.
+	(m2_print_array_contents): Take a struct value.
+	(m2_value_print_inner): Rewrite.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* d-valprint.c (dynamic_array_type): Call d_value_print_inner.
+	(d_value_print_inner): New function.
+	* d-lang.h (d_value_print_inner): Declare.
+	* d-lang.c (d_language_defn): Use d_value_print_inner.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* go-valprint.c (go_value_print_inner): New function.
+	* go-lang.h (go_value_print_inner): Declare.
+	* go-lang.c (go_language_defn): Use go_value_print_inner.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (val_print_struct, rust_print_enum): Use the value
+	API.
+	(rust_val_print): Rewrite.
+	(rust_value_print_inner): New function, from rust_val_print.
+	(rust_language_defn): Use rust_value_print_inner.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* ada-valprint.c (ada_value_print_inner): New function.
+	* ada-lang.h (ada_value_print_inner): Declare.
+	* ada-lang.c (ada_language_defn): Use ada_value_print_inner.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* f-valprint.c (f_value_print_innner): New function.
+	* f-lang.h (f_value_print_innner): Declare.
+	* f-lang.c (f_language_defn): Use f_value_print_innner.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* p-valprint.c (pascal_value_print_inner): New function.
+	* p-lang.h (pascal_value_print_inner): Declare.
+	* p-lang.c (pascal_language_defn): Use pascal_value_print_inner.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* m2-valprint.c (m2_value_print_inner): New function.
+	* m2-lang.h (m2_value_print_inner): Declare.
+	* m2-lang.c (m2_language_defn): Use m2_value_print_inner.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* opencl-lang.c (opencl_language_defn): Use c_value_print_inner.
+	* objc-lang.c (objc_language_defn): Use c_value_print_inner.
+	* c-valprint.c (c_value_print_inner): New function.
+	* c-lang.h (c_value_print_inner): Declare.
+	* c-lang.c (c_language_defn, cplus_language_defn)
+	(asm_language_defn, minimal_language_defn): Use
+	c_value_print_inner.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* p-valprint.c (pascal_object_print_value_fields): Now static.
+	* p-lang.h (pascal_object_print_value_fields): Don't declare.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* c-valprint.c (c_val_print_array): Simplify.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (value_print_array_elements): New function.
+	* valprint.h (value_print_array_elements): Declare.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* printcmd.c (print_formatted): Use value_print_scalar_formatted.
+	* mips-tdep.c (mips_print_register): Use
+	value_print_scalar_formatted.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.h (value_print_scalar_formatted): Declare.
+	* valprint.c (value_print_scalar_formatted): New function.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.h (generic_value_print): Declare.
+	* valprint.c (generic_value_print): New function.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (do_val_print): Call la_value_print_inner, if
+	available.
+	* rust-lang.c (rust_language_defn): Update.
+	* p-lang.c (pascal_language_defn): Update.
+	* opencl-lang.c (opencl_language_defn): Update.
+	* objc-lang.c (objc_language_defn): Update.
+	* m2-lang.c (m2_language_defn): Update.
+	* language.h (struct language_defn) <la_value_print_inner>: New
+	member.
+	* language.c (unknown_language_defn, auto_language_defn): Update.
+	* go-lang.c (go_language_defn): Update.
+	* f-lang.c (f_language_defn): Update.
+	* d-lang.c (d_language_defn): Update.
+	* c-lang.c (c_language_defn, cplus_language_defn)
+	(asm_language_defn, minimal_language_defn): Update.
+	* ada-lang.c (ada_language_defn): Update.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* c-valprint.c (c_value_print): Use common_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* cp-valprint.c (cp_print_static_field): Use common_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* f-valprint.c (f77_print_array_1, f_val_print): Use
+	common_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* riscv-tdep.c (riscv_print_one_register_info): Use
+	common_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* mi/mi-main.c (output_register): Use common_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* infcmd.c (default_print_one_register_info): Use
+	common_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.h (common_val_print_checked): Declare.
+	* valprint.c (common_val_print_checked): New function.
+	* stack.c (print_frame_arg): Use common_val_print_checked.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (do_val_print): New function, from val_print.
+	(val_print): Use do_val_print.
+	(common_val_print): Use do_val_print.
+
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (value_print): Use scoped_value_mark.
+
+2020-03-13  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/25646
+	* psymtab.c (partial_symtab::partial_symtab): Don't set
+	globals_offset and statics_offset.  Push element onto
+	current_global_psymbols and current_static_psymbols stacks.
+	(concat): New function.
+	(end_psymtab_common): Set globals_offset and statics_offset.  Pop
+	element from current_global_psymbols and current_static_psymbols
+	stacks.  Concat popped elements to global_psymbols and
+	static_symbols.
+	(add_psymbol_to_list): Use current_global_psymbols and
+	current_static_psymbols stacks.
+	* psymtab.h (class psymtab_storage): Add current_global_psymbols and
+	current_static_psymbols fields.
+
+2020-03-12  Christian Biesinger  <cbiesinger@google.com>
+
+	* corelow.c (sniff_core_bfd): Remove.
+	(class core_target) <m_core_vec>: Remove.
+	(core_target::core_target): Update.
+	(core_file_fns): Remove.
+	(deprecated_add_core_fns): Remove.
+	(default_core_sniffer): Remove.
+	(sniff_core_bfd): Remove.
+	(default_check_format): Remove.
+	(gdb_check_format): Remove.
+	(core_target_open): Update.
+	(core_target::get_core_register_section): Update.
+	(get_core_registers_cb): Update.
+	(core_target::fetch_registers): Update.
+	* gdbcore.h (struct core_fns): Remove.
+	(deprecated_add_core_fns): Remove.
+	(default_core_sniffer): Remove.
+	(default_check_format): Remove.
+
+2020-03-12  Tom Tromey  <tom@tromey.com>
+
+	* arm-tdep.c (struct arm_mapping_symbol) <value>: Now a
+	CORE_ADDR.
+	(struct arm_exidx_entry) <addr>: Now a CORE_ADDR.
+
+2020-03-12  Tom Tromey  <tom@tromey.com>
+
+	* remote.c (remote_target::download_tracepoint)
+	(remote_target::enable_tracepoint)
+	(remote_target::disable_tracepoint): Use phex, not sprintf_vma.
+	* breakpoint.c (print_recreate_masked_watchpoint): Use phex, not
+	sprintf_vma.
+
+2020-03-12  Tom Tromey  <tom@tromey.com>
+
+	* symfile-mem.c: Update CORE_ADDR size assert.
+
+2020-03-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* selftest.m4: Move to gdbsupport/.
+	* acinclude.m4: Update path to selftest.m4.
+
+2020-03-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Rename to...
+	(SELFTESTS_SRCS): ... this.  Add disasm-selftests.c,
+	gdbarch-selfselftests.c and selftest-arch.c.
+	(SUBDIR_UNITTESTS_OBS): Rename to...
+	(SELFTESTS_OBS): ... this.
+	(COMMON_SFILES): Remove disasm-selftests.c and
+	gdbarch-selftests.c.
+	* configure.ac: Don't add selftest-arch.{c,o} to
+	CONFIG_{SRCS,OBS}.
+	* disasm-selftests.c, gdbarch-selftests.c: Remove GDB_SELF_TEST
+	preprocessor conditions.
+
+2020-03-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* configure.ac: Don't source bfd/development.sh.
+	* selftest.m4: Modify comment.
+	* configure: Re-generate.
+
+2020-03-12  Simon Marchi  <simon.marchi@efficios.com>
+
+	* selftest.m4 (GDB_AC_SELFTEST): Error out if $development is
+	not "true" or "false".
+	* configure: Re-generate.
+
+2020-03-12  Christian Biesinger  <cbiesinger@google.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add new arm-nbsd-tdep.h file.
+	* arm-nbsd-nat.c (arm_supply_gregset): Moved to arm-nbsd-tdep and
+	renamed to arm_nbsd_supply_gregset.
+	(fetch_register): Update to call arm_nbsd_supply_gregset.
+	(fetch_regs): Remove in favor of fetch_register with a -1 regno.
+	(arm_netbsd_nat_target::fetch_registers): Update.
+	(fetch_elfcore_registers): Removed.
+	(_initialize_arm_netbsd_nat): Removed call to deprecated_add_core_fns.
+	* arm-nbsd-tdep.c (struct arm_nbsd_reg): New struct.
+	(arm_nbsd_supply_gregset): Moved from arm-nbsd-nat.c and updated to
+	not require NetBSD system headers.
+	(arm_nbsd_regset): New struct.
+	(arm_nbsd_iterate_over_regset_sections): New function.
+	(arm_netbsd_init_abi_common): Updated to call
+	set_gdbarch_iterate_over_regset_sections.
+	* arm-nbsd-tdep.h: New file.
+
+2020-03-11  Kevin Buettner  <kevinb@redhat.com>
+
+	* symtab.c (find_pc_sect_line): Add check which prevents infinite
+	recursion.
+	
+2020-03-11  Simon Marchi  <simon.marchi@efficios.com>
+
+	* configure: Re-generate.
+
+2020-03-11  Tom Tromey  <tromey@adacore.com>
+
+	* ada-typeprint.c (print_choices): Fix comment.
+
+2020-03-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* buildsyms.c (buildsym_compunit::record_line): Avoid accessing
+	previous item in the list, when the list has no items.
+
+2020-03-11  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/loc.c (dwarf2_evaluate_property): Handle NULL frame in
+	PROP_LOCLIST handling code.
+
+2020-03-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* buildsym-legacy.c (record_line): Pass extra parameter to
+	record_line.
+	* buildsym.c (buildsym_compunit::record_line): Take an extra
+	parameter, reduce duplication in the line table, and record the
+	is_stmt flag in the line table.
+	* buildsym.h (buildsym_compunit::record_line): Add extra
+	parameter.
+	* disasm.c (do_mixed_source_and_assembly_deprecated): Ignore
+	non-statement lines.
+	* dwarf2/read.c (dwarf_record_line_1): Add extra parameter, pass
+	this to the symtab builder.
+	(dwarf_finish_line): Pass extra parameter to dwarf_record_line_1.
+	(lnp_state_machine::record_line): Pass a suitable is_stmt flag
+	through to dwarf_record_line_1.
+	* infrun.c (process_event_stop_test): When stepping, don't stop at
+	a non-statement instruction, and only refresh the step info when
+	we land in the middle of a line's range.  Also add an extra
+	comment.
+	* jit.c (jit_symtab_line_mapping_add_impl): Initialise is_stmt
+	field.
+	* record-btrace.c (btrace_find_line_range): Only record lines
+	marked as is-statement.
+	* stack.c (frame_show_address): Show the frame address if we are
+	in a non-statement sal.
+	* symmisc.c (dump_symtab_1): Print the is_stmt flag.
+	(maintenance_print_one_line_table): Print a header for the is_stmt
+	column, and include is_stmt information in the output.
+	* symtab.c (find_pc_sect_line): Find lines marked as statements in
+	preference to non-statements.
+	(find_pcs_for_symtab_line): Prefer is-statement entries.
+	(find_line_common): Likewise.
+	* symtab.h (struct linetable_entry): Add is_stmt field.
+	(struct symtab_and_line): Likewise.
+	* xcoffread.c (arrange_linetable): Initialise is_stmt field when
+	arranging the line table.
+
+2020-03-07  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (read_typedef): Treat anonymous typedef as forwarder
+	DIE.
+
+2020-03-07  Tom Tromey  <tom@tromey.com>
+
+	* valops.c (value_literal_complex): Remove obsolete comment.
+	* gdbtypes.h (enum type_code) <TYPE_CODE_FLT>: Remove obsolete
+	comment.
+
+2020-03-06  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.h: Forward-declare thread_info.
+	(set_step_info): Add thread_info parameter, add doc.
+	* infrun.c (set_step_info): Add thread_info parameter, move doc
+	to header.
+	* infrun.c (process_event_stop_test): Pass thread to
+	set_step_info call.
+	* infcmd.c (set_step_frame): Add thread_info pointer, pass it to
+	set_step_info.
+	(prepare_one_step): Add thread_info parameter, pass it to
+	set_step_frame and prepare_one_step (recursive) call.
+	(step_1): Pass thread to prepare_one_step call.
+	(step_command_fsm::should_stop): Pass thread to
+	prepare_one_step.
+	(until_next_fsm): Pass thread to set_step_frame call.
+	(finish_command): Pass thread to set_step_info call.
+
+2020-03-06  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-tdep.c (windows_solib_create_inferior_hook):
+	Check if inferior is running.
+
+2020-03-06  Tom de Vries  <tdevries@suse.de>
+
+	* NEWS: Fix "the the".
+	* ctfread.c: Same.
+
+2020-03-06  Tom de Vries  <tdevries@suse.de>
+
+	* psymtab.c (psymtab_to_symtab): Don't print "done.".
+
+2020-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* .dir-locals.el: Add a comment referencing the other copies of
+	this file.
+
+2020-03-05  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-tdep.c (fbsd_make_corefile_notes): Use std::string for
+	psargs.
+
+2020-03-05  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* .gitattributes: New file.
+
+2020-03-04  Tom Tromey  <tom@tromey.com>
+
+	* symmisc.c (print_symbol_bcache_statistics)
+	(print_objfile_statistics): Update.
+	* symfile.c (allocate_symtab): Use intern.
+	* psymtab.c (partial_symtab::partial_symtab): Use intern.
+	* objfiles.h (struct objfile_per_bfd_storage) <filename_cache,
+	macro_cache>: Remove.
+	<string_cache>: New member.
+	(struct objfile) <intern>: New methods.
+	* elfread.c (elf_symtab_read): Use intern.
+	* dwarf2/read.c (fixup_go_packaging): Intern package name.
+	(dwarf2_compute_name, dwarf2_physname)
+	(create_dwo_unit_in_dwp_v1, create_dwo_unit_in_dwp_v2): Intern
+	names.
+	(guess_partial_die_structure_name): Update.
+	(partial_die_info::fixup): Intern name.
+	(dwarf2_canonicalize_name): Change parameter to objfile.  Intern
+	name.
+	(dwarf2_name): Intern name.  Update.
+	* buildsym.c (buildsym_compunit::get_macro_table): Use
+	string_cache.
+
+2020-03-04  Tom Tromey  <tom@tromey.com>
+
+	* jit.c (bfd_open_from_target_memory): Make "target" const.
+	* corefile.c (gnutarget): Now const.
+	* gdbcore.h (gnutarget): Now const.
+
+2020-03-04  Hannes Domani  <ssbssa@yahoo.de>
+
+	* NEWS: Mention support for WOW64 processes.
+	* amd64-windows-nat.c (amd64_mappings): Rename and remove static.
+	(amd64_windows_segment_register_p): Remove static.
+	(_initialize_amd64_windows_nat): Update.
+	* configure.nat <windows> (NATDEPFILES): Add i386-windows-nat.o.
+	* i386-windows-nat.c (context_offset): Update.
+	(i386_mappings): Rename and remove static.
+	(i386_windows_segment_register_p): Remove static.
+	(_initialize_i386_windows_nat): Update.
+	* windows-nat.c (STATUS_WX86_BREAKPOINT): New macro.
+	(STATUS_WX86_SINGLE_STEP): New macro.
+	(EnumProcessModulesEx): New macro.
+	(Wow64SuspendThread): New macro.
+	(Wow64GetThreadContext): New macro.
+	(Wow64SetThreadContext): New macro.
+	(Wow64GetThreadSelectorEntry): New macro.
+	(windows_set_context_register_offsets): Add static.
+	(windows_set_segment_register_p): Likewise.
+	(windows_add_thread): Adapt for WOW64 processes.
+	(windows_fetch_one_register): Likewise.
+	(windows_nat_target::fetch_registers): Likewise.
+	(windows_store_one_register): Likewise.
+	(display_selector): Likewise.
+	(display_selectors): Likewise.
+	(handle_exception): Likewise.
+	(windows_continue): Likewise.
+	(windows_nat_target::resume): Likewise.
+	(windows_add_all_dlls): Likewise.
+	(do_initial_windows_stuff): Likewise.
+	(windows_nat_target::attach): Likewise.
+	(windows_get_exec_module_filename): Likewise.
+	(windows_nat_target::create_inferior): Likewise.
+	(windows_xfer_siginfo): Likewise.
+	(_initialize_loadable): Initialize Wow64SuspendThread,
+	Wow64GetThreadContext, Wow64SetThreadContext,
+	Wow64GetThreadSelectorEntry and EnumProcessModulesEx.
+	* windows-nat.h (windows_set_context_register_offsets):
+	Remove declaration.
+	(windows_set_segment_register_p): Likewise.
+	(i386_windows_segment_register_p): Add declaration.
+	(amd64_windows_segment_register_p): Likewise.
+
+2020-03-04  Luis Machado  <luis.machado@linaro.org>
+
+	Revert aa66aac47b4dd38f9524ddb5546c08cc09930d37 due to regressions
+	in "info registers" for AArch64/ARM.
+
+	The change caused "info registers" to not print GPR's.
+
+	gdb/ChangeLog:
+
+	2020-02-01  Shahab Vahedi  <shahab@synopsys.com>
+
+	* target-descriptions.c (tdesc_register_in_reggroup_p): Return 0
+	when reg->group is empty and reggroup is not.
+
+2020-03-03  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/frame.c (struct dwarf2_frame_cache)
+	<checked_tailcall_bottom, entry_cfa_sp_offset,
+	entry_cfa_sp_offset_p>: Remove members.
+	(dwarf2_frame_cache): Call dwarf2_tailcall_sniffer_first.
+	(dwarf2_frame_prev_register): Don't call
+	dwarf2_tailcall_sniffer_first.
+	(dwarf2_append_unwinders): Don't append tailcall unwinder.
+	* frame-unwind.c (add_unwinder): New fuction.
+	(frame_unwind_init): Use it.  Add tailcall unwinder.
+
+2020-03-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Alok Kumar Sharma  <AlokKumar.Sharma@amd.com>
+
+	* f-valprint.c (f_val_print): Handle TYPE_CODE_BOOL, any non-zero
+	value should be printed as true.
+
+2020-03-03  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-tdep.c (windows_solib_create_inferior_hook): New function.
+	(windows_init_abi): Set and use windows_so_ops.
+
+2020-03-03  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* printcmd.c (print_c_string): Check also for TYPE_CODE_PTR
+	when verifying if dealing with a convenience variable.
+
+2020-03-03  Luis Machado  <luis.machado@linaro.org>
+
+	* auxv.c (default_print_auxv_entry): Add new AUXV entries.
+
+2020-03-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (gdbarch_supports_displaced_stepping): New.
+	(use_displaced_stepping): Break up conditions in smaller pieces.
+	Use gdbarch_supports_displaced_stepping.
+	(displaced_step_prepare_throw): Use
+	gdbarch_supports_displaced_stepping.
+
+2020-03-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention new behaviour of the history filename.
+	* top.c (write_history_p): Add comment.
+	(show_write_history_p): Add header comment, give a different
+	message when history writing is on, but the history filename is
+	empty.
+	(history_filename): Add comment.
+	(history_filename_empty): New function.
+	(show_history_filename): Add header comment, give a different
+	message when the filename is empty.
+	(init_history): Compare history_filename against nullptr, and only
+	read history if the filename is not empty.
+	(set_history_filename): Add header comment, and only make
+	non-empty filenames absolute.
+	(init_main): Make the filename argument to 'set history filename'
+	optional.
+
+2020-03-02  Christian Biesinger  <cbiesinger@google.com>
+
+	* arm-nbsd-nat.c (arm_supply_fparegset): Rename to...
+	(arm_supply_vfpregset): ...this, and update to use VFP registers.
+	(fetch_fp_register): Update.
+	(fetch_fp_regs): Update.
+	(store_fp_register): Update.
+	(store_fp_regs): Update.
+	(arm_netbsd_nat_target::read_description): New function.
+	(fetch_elfcore_registers): Update.
+
+2020-03-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* remote.c (remote_target::remote_parse_stop_reply): Don't use the
+	general_thread if the stop reply is missing a thread-id.
+	(remote_target::process_stop_reply): Use the first non-exited
+	thread if the target didn't pass a thread-id.
+	* infrun.c (do_target_wait): Move call to
+	switch_to_inferior_no_thread to ....
+	(do_target_wait_1): ... here.
+
+2020-02-29  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* debuginfod-support.c: Include defs.h first.
+
+2020-02-28  Tom de Vries  <tdevries@suse.de>
+
+	* symfile.c (set_initial_language): Use default language for lookup.
+
+2020-02-28  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (cutu_reader::init_tu_and_read_dwo_dies): Remove
+	reader variable, pass `this` to read_cutu_die_from_dwo.
+
+2020-02-27  Aaron Merey  <amerey@redhat.com>
+
+	* source.c (open_source_file): Check for nullptr when computing
+	srcpath.
+
+2020-02-27  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (struct field_info) <nfields>: Now a method, not a
+	member.
+	(dwarf2_add_field): Don't update nfields.
+	(dwarf2_attach_fields_to_type, process_structure_scope): Update.
+
+2020-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbtypes.c (create_array_type_with_stride): Use std::abs not
+	abs.
+
+2020-02-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (struct dwarf2_include_psymtab): New.
+	(dwarf2_create_include_psymtab): Use dwarf2_include_psymtab.
+	(dwarf2_psymtab::expand_psymtab, dwarf2_psymtab::readin_p)
+	(dwarf2_psymtab::get_compunit_symtab): Remove null checks for
+	per_cu_data.
+
+2020-02-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/index-write.c (psym_index_map): Change type.
+	(add_address_entry_worker, write_one_signatured_type)
+	(recursively_count_psymbols, recursively_write_psymbols)
+	(class debug_names, psyms_seen_size, write_gdbindex)
+	(write_debug_names): Use partial_symtab, not dwarf2_psymtab.
+
+2020-02-26  Aaron Merey  <amerey@redhat.com>
+
+	* Makefile.in: Handle optional debuginfod support.
+	* NEWS: Update.
+	* README: Add --with-debuginfod summary.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: Handle optional debuginfod support.
+	* debuginfod-support.c: debuginfod helper functions.
+	* debuginfod-support.h: Ditto.
+	* doc/gdb.texinfo: Add --with-debuginfod to configure options
+	summary.
+	* dwarf2/read.c (dwarf2_get_dwz_file): Query debuginfod servers
+	when a dwz file cannot be found.
+	* elfread.c (elf_symfile_read): Query debuginfod servers when a
+	debuginfo file cannot be found.
+	* source.c (open_source_file): Query debuginfod servers when a
+	source file cannot be found.
+	* top.c (print_gdb_configuration): Include
+	--{with,without}-debuginfod in the output.
+
+2020-02-26  JÃ©rÃ©mie Galarneau  <jeremie.galarneau@efficios.com>
+
+	* thread.c (thr_try_catch_cmd): Print thread name.
+
+2020-02-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/loc.h (dwarf2_fetch_die_loc_sect_off,
+	dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
+	dwarf2_fetch_die_type_sect_off): Move to...
+	* dwarf2/read.h (dwarf2_fetch_die_loc_sect_off,
+	dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
+	dwarf2_fetch_die_type_sect_off): ... here.
+	* dwarf2/read.c (dwarf2_fetch_die_loc_sect_off,
+	dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
+	dwarf2_fetch_die_type_sect_off): Move doc to header file.
+
+2020-02-26  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/25603
+	* symfile.c (set_initial_language): Exit-early if
+	language_mode == language_mode_manual.
+
+2020-02-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/loc.h (dwarf2_read_addr_index): Move...
+	* dwarf2/read.h (dwarf2_read_addr_index): ... here.
+	* dwarf2/read.c (dwarf2_read_addr_index): Move doc to header.
+
+2020-02-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbtypes.c (create_array_type_with_stride): Handle negative
+	array strides.
+	* valarith.c (value_subscripted_rvalue): Likewise.
+
+2020-02-25  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-tdep.c (aarch64_vnv_type): Fix comment typo.
+
+2020-02-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* loc.h (dwarf2_get_die_type): Move to...
+	* read.h (dwarf2_get_die_type): ... here.
+	* read.c (dwarf2_get_die_type): Move doc to header.
+
+2020-02-25  Joel Brobecker  <brobecker@adacore.com>
+
+	* copypright.py (EXCLUDE_LIST): Add 'gnulib/config.in' and
+	'gnulib/Makefile.in' to the list.
+
+2020-02-24  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct type_unit_unshareable) <num_symtabs>:
+	Remove.
+	* dwarf2/read.c (dwarf2_cu::setup_type_unit_groups): Use
+	XOBNEWVEC.
+
+2020-02-24  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data) <type_unit_group_p>:
+	New method.
+	* dwarf2/read.c (IS_TYPE_UNIT_GROUP): Remove.
+	(dw2_do_instantiate_symtab, dw2_get_file_names)
+	(build_type_psymtab_dependencies, load_full_type_unit): Update.
+
+2020-02-24  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (dwarf2_build_psymtabs_hard): Use
+	make_scoped_restore.
+	(dwarf2_psymtab::read_symtab): Don't clear
+	reading_partial_symbols.
+
+2020-02-24  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/25592
+	* stack.c (iterate_over_block_locals): Handle LOC_CONST.
+
+2020-02-24  Tom de Vries  <tdevries@suse.de>
+
+	* tui/tui-layout.c (_initialize_tui_layout): Fix help messages for
+	commands layout next/prev/regs.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/loc.h (dwarf2_compile_expr_to_ax): Don't declare.
+	* dwarf2/loc.c (dwarf2_compile_expr_to_ax): Now static.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.h (TUI_DISASM_WIN): Cast to tui_disasm_window.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (_initialize_tui_win): Add usage text.
+	* tui/tui-stack.c (_initialize_tui_stack): Add usage text.
+	* tui/tui-regs.c (_initialize_tui_regs): Add usage text.
+	* tui/tui.c (_initialize_tui): Add usage text.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_set_focus_command)
+	(tui_set_win_height_command): Use error_no_arg.
+	(_initialize_tui_win): Update help text.
+	(FOCUS_USAGE, WIN_HEIGHT_USAGE): Don't define.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (extract_display_start_addr): Rewrite.
+	* tui/tui-disasm.h (struct tui_disasm_window)
+	<display_start_addr>: Declare.
+	* tui/tui-source.h (struct tui_source_window)
+	<display_start_addr>: Declare.
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<show_source_line, display_start_addr>: New methods.
+	<m_horizontal_offset, m_start_line_or_addr, m_gdbarch, m_content>:
+	Rename and move to protected section.
+	* tui/tui-winsource.c (tui_source_window_base::update_source_window)
+	(tui_source_window_base::do_erase_source_content): Update.
+	(tui_source_window_base::show_source_line): Now a method.
+	(tui_source_window_base::show_source_content)
+	(tui_source_window_base::tui_source_window_base)
+	(tui_source_window_base::rerender)
+	(tui_source_window_base::refill)
+	(tui_source_window_base::do_scroll_horizontal)
+	(tui_source_window_base::set_is_exec_point_at)
+	(tui_source_window_base::update_breakpoint_info)
+	(tui_source_window_base::update_exec_info): Update.
+	* tui/tui-source.c (tui_source_window::set_contents)
+	(tui_source_window::showing_source_p)
+	(tui_source_window::do_scroll_vertical)
+	(tui_source_window::location_matches_p)
+	(tui_source_window::line_is_displayed): Update.
+	(tui_source_window::display_start_addr): New method.
+	* tui/tui-disasm.c (tui_disasm_window::set_contents)
+	(tui_disasm_window::do_scroll_vertical)
+	(tui_disasm_window::location_matches_p): Update.
+	(tui_disasm_window::display_start_addr): New method.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* NEWS: Add entry for gdb.register_window_type.
+	* tui/tui-layout.h (window_factory): New typedef.
+	(tui_register_window): Declare.
+	* tui/tui-layout.c (saved_tui_windows): New global.
+	(tui_apply_current_layout): Use it.
+	(tui_register_window): New function.
+	* python/python.c (do_start_initialization): Call
+	gdbpy_initialize_tui.
+	(python_GdbMethods): Add "register_window_type" function.
+	* python/python-internal.h (gdbpy_register_tui_window)
+	(gdbpy_initialize_tui): Declare.
+	* python/py-tui.c: New file.
+	* Makefile.in (SUBDIR_PYTHON_SRCS): Add py-tui.c.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-io.c (do_tui_putc): Don't omit annotations.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_set_win_focus_to): Move to tui-data.c.
+	* tui/tui-data.h (tui_set_win_with_focus): Don't declare.
+	* tui/tui-data.c (tui_set_win_with_focus): Remove.
+	(tui_set_win_focus_to): Move from tui-win.c.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.c (make_standard_window, get_locator_window): New
+	functions.
+	(known_window_types): New global.
+	(tui_get_window_by_name): Reimplement.
+	(initialize_known_windows): New function.
+	(validate_window_name): Rewrite.
+	(_initialize_tui_layout): Call initialize_known_windows.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.h (enum tui_win_type) <LOCATOR_WIN, DATA_ITEM_WIN>:
+	Remove constants.
+	* tui/tui-winsource.h (struct tui_source_window_base)
+	<tui_source_window_base>: Remove parameter.
+	* tui/tui-winsource.c
+	(tui_source_window_base::tui_source_window_base): Remove
+	parameter.
+	(tui_source_window_base::refill): Update.
+	* tui/tui-stack.h (struct tui_locator_window)
+	<tui_locator_window>: Update.
+	* tui/tui-source.h (struct tui_source_window) <tui_source_window>:
+	Default the constructor.
+	* tui/tui-regs.h (struct tui_data_item_window)
+	<tui_data_item_window>: Default the constructor.
+	(struct tui_data_window) <tui_data_window>: Likewise.
+	* tui/tui-disasm.h (struct tui_disasm_window) <tui_disasm_window>:
+	Default the constructor.
+	* tui/tui-data.h (struct tui_gen_win_info) <tui_gen_win_info>:
+	Default the constructor.
+	<type>: Remove.
+	(struct tui_win_info) <tui_win_info>: Default the constructor.
+	* tui/tui-data.c (tui_win_info::tui_win_info): Remove.
+	* tui/tui-command.h (struct tui_cmd_window) <tui_cmd_window>:
+	Default the constructor.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.h (tui_make_all_invisible): Don't declare.
+	* tui/tui-wingeneral.c (tui_make_all_invisible): Remove.
+	* tui/tui-win.c (tui_resize_all): Don't call
+	tui_delete_invisible_windows.
+	* tui/tui-layout.c (tui_apply_current_layout): Delete windows when
+	done.
+	(tui_set_layout): Update.
+	(tui_add_win_to_layout): Don't call tui_delete_invisible_windows.
+	* tui/tui-data.h (tui_delete_invisible_windows): Don't declare.
+	* tui/tui-data.c (tui_delete_invisible_windows): Remove.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-win.c (tui_partial_win_by_name): Handle ambiguity
+	correctly.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-data.c (tui_next_win, tui_prev_win): Reimplement.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.h (struct tui_source_window_iterator)
+	<inner_iterator>: New etytypedef.
+	<tui_source_window_iterator>: Take "end" parameter.
+	<tui_source_window_iterator>: Take iterator.
+	<operator*, advance>: Update.
+	<m_iter>: Change type.
+	<m_end>: New field.
+	(struct tui_source_windows) <begin, end>: Update.
+	* tui/tui-layout.c (tui_windows): New global.
+	(tui_apply_current_layout): Clear tui_windows.
+	(tui_layout_window::apply): Update tui_windows.
+	* tui/tui-data.h (tui_windows): Declare.
+	(all_tui_windows): Now inline function.
+	(class tui_window_iterator, struct all_tui_windows): Remove.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	PR tui/17850:
+	* tui/tui-win.c (tui_gen_win_info::max_width): New method.
+	* tui/tui-layout.h (class tui_layout_base) <get_sizes>: Add
+	"height" argument.
+	(class tui_layout_window) <get_sizes>: Likewise.
+	(class tui_layout_split) <tui_layout_split>: Add "vertical"
+	argument.
+	<get_sizes>: Add "height" argument.
+	<m_vertical>: New field.
+	* tui/tui-layout.c (tui_layout_split::clone): Update.
+	(tui_layout_split::get_sizes): Add "height" argument.
+	(tui_layout_split::adjust_size, tui_layout_split::apply): Update.
+	(tui_new_layout_command): Parse "-horizontal".
+	(_initialize_tui_layout): Update help string.
+	(tui_layout_split::specification): Add "-horizontal" when needed.
+	* tui/tui-layout.c (tui_layout_window::get_sizes): Add "height"
+	argument.
+	* tui/tui-data.h (struct tui_gen_win_info) <max_width, min_width>:
+	New methods.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.h (enum tui_adjust_result): New.
+	(class tui_layout_base) <adjust_size>: Return tui_adjust_result.
+	(class tui_layout_window) <adjust_size>: Return
+	tui_adjust_result.  Rewrite.
+	(class tui_layout_split) <adjust_size>: Return tui_adjust_result.
+	* tui/tui-layout.c (tui_layout_split::adjust_size): Update.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.h (class tui_layout_split) <add_split>: Change
+	parameter and return types.
+	(class tui_layout_base) <specification>: Add "depth".
+	(class tui_layout_window) <specification>: Add "depth".
+	(class tui_layout_split) <specification>: Add "depth".
+	* tui/tui-layout.c (tui_layout_split::add_split): Change parameter
+	and return types.
+	(tui_new_layout_command): Parse sub-layouts.
+	(_initialize_tui_layout): Update help string.
+	(tui_layout_window::specification): Add "depth".
+	(add_layout_command): Update.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* NEWS: Add "tui new-layout" item.
+	* tui/tui-layout.c (add_layout_command): Return cmd_list_element.
+	Add new-layout command to help text.
+	(validate_window_name): New function.
+	(tui_new_layout_command): New function.
+	(_initialize_tui_layout): Register "new-layout".
+	(tui_layout_window::specification): New method.
+	(tui_layout_window::specification): New method.
+	* tui/tui-layout.h (class tui_layout_base) <specification>: New
+	method.
+	(class tui_layout_window) <specification>: New method.
+	(class tui_layout_split) <specification>: New method.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_enable): Call tui_set_initial_layout.
+	* tui/tui-win.c (window_name_completer): Update comment.
+	* tui/tui-layout.h (class tui_layout_base) <replace_window>:
+	Declare method.
+	(class tui_layout_window) <replace_window>: Likewise.
+	(class tui_layout_split) <replace_window>: Likewise.
+	(tui_set_layout): Don't declare.
+	(tui_set_initial_layout): Declare function.
+	* tui/tui-layout.c (layouts, applied_skeleton, src_regs_layout)
+	(asm_regs_layout): New globals.
+	(tui_current_layout, show_layout): Remove.
+	(tui_set_layout, tui_add_win_to_layout): Rewrite.
+	(find_layout, tui_apply_layout): New function.
+	(layout_completer): Remove.
+	(tui_next_layout): Reimplement.
+	(tui_next_layout_command): New function.
+	(tui_set_initial_layout, tui_prev_layout_command): New functions.
+	(tui_regs_layout): Reimplement.
+	(tui_regs_layout_command): New function.
+	(extract_display_start_addr): Rewrite.
+	(next_layout, prev_layout): Remove.
+	(tui_layout_window::replace_window): New method.
+	(tui_layout_split::replace_window): New method.
+	(destroy_layout): New function.
+	(layout_list): New global.
+	(add_layout_command): New function.
+	(initialize_layouts): Update.
+	(tui_layout_command): New function.
+	(_initialize_tui_layout): Install "layout" commands.
+	* tui/tui-data.h (enum tui_layout_type): Remove.
+	(tui_current_layout): Don't declare.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_reg_layout): Remove.
+	(tui_reg_command): Use tui_regs_layout.
+	* tui/tui-layout.h (tui_reg_command): Declare.
+	* tui/tui-layout.c (tui_reg_command): New function.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_rl_delete_other_windows): Call
+	tui_remove_some_windows.
+	* tui/tui-layout.h (class tui_layout_base) <remove_windows>:
+	Declare method.
+	(class tui_layout_window) <remove_windows>: New method.
+	(class tui_layout_split) <remove_windows>: Declare.
+	(tui_remove_some_windows): Declare.
+	* tui/tui-layout.c (tui_remove_some_windows): New function.
+	(tui_layout_split::remove_windows): New method.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_rl_change_windows): Call tui_next_layout.
+	* tui/tui-layout.h (tui_next_layout): Declare.
+	* tui/tui-layout.c (tui_next_layout): New function.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-regs.c (tui_data_window::display_registers_from): Use
+	correct coordinates.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-layout.h (tui_add_win_to_layout): Add comment.
+	* tui/tui-layout.c (tui_add_win_to_layout): Add assert.  Remove
+	DATA_WIN case.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-disasm.c (tui_get_low_disassembly_address): Use
+	TUI_DISASM_WIN, not tui_win_list.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* valprint.c (generic_val_print_enum_1)
+	(val_print_type_code_flags): Style member names.
+	* rust-lang.c (val_print_struct, rust_print_enum)
+	(rust_print_struct_def, rust_internal_print_type): Style member
+	names.
+	* p-valprint.c (pascal_object_print_value_fields): Style member
+	names.  Only call fprintf_symbol_filtered for static members.
+	* m2-typeprint.c (m2_record_fields, m2_enum): Style member names.
+	* f-valprint.c (f_val_print): Style member names.
+	* f-typeprint.c (f_type_print_base): Style member names.
+	* cp-valprint.c (cp_print_value_fields): Style member names.  Only
+	call fprintf_symbol_filtered for static members.
+	(cp_print_class_member): Style member names.
+	* c-typeprint.c (c_print_type_1, c_type_print_base_1): Style
+	member names.
+	* ada-valprint.c (ada_print_scalar): Style enum names.
+	(ada_val_print_enum): Likewise.
+	* ada-typeprint.c (print_enum_type): Style enum names.
+
+2020-02-21  Tom Tromey  <tom@tromey.com>
+
+	* psympriv.h (struct partial_symtab): Update comment.
+
+2020-02-21  Tom Tromey  <tromey@adacore.com>
+
+	* mips-tdep.h (mips_pc_is_mips16, mips_pc_is_micromips): Parameter
+	type is CORE_ADDR.
+
+2020-02-21  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/25534
+	* psymtab.c (partial_symtab::read_dependencies): Don't read dependency
+	if dependencies[i]->user != NULL.
+
+2020-02-21  Ali Tamur  <tamur@google.com>
+
+	* dwarf2/read.c (dwarf2_name): Add null check.
+
+2020-02-20  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_find_containing_comp_unit): Use ">", not
+	">=", in binary search.
+	(dwarf2_find_containing_comp_unit): New overload.
+	(run_test): New self-test.
+	(_initialize_dwarf2_read): Register new test.
+
+2020-02-20  Nelson Chu  <nelson.chu@sifive.com>
+
+	* riscv-tdep.c: Updated since the DECLARE_CSR is changed.
+	* riscv-tdep.h: Likewise.
+	* features/riscv/rebuild-csr-xml.sh: Generate the 64bit-csr.xml without
+	rv32-only CSR.
+	* features/riscv/64bit-csr.xml: Regenerated.
+
+2020-02-20  Sergio Durigan Junior  <sergiodj@redhat.com>
+	    Tom Tromey  <tom@tromey.com>
+
+	* utils.c (fputs_maybe_filtered): Call 'stream->puts' instead
+	of 'fputc_unfiltered'.
+	(putchar_unfiltered): Call 'fputc_unfiltered'.
+	(fputc_unfiltered): Call 'fputs_unfiltered'.
+
+2020-02-20  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: Add --with-python-libdir option.
+	* main.c: Use WITH_PYTHON_LIBDIR.
+
+2020-02-19  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (general_symbol_info::compute_and_set_names): Use
+	obstack_strndup.  Simplify call to symbol_set_demangled_name.
+
+2020-02-19  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (allocate_signatured_type_table,
+	allocate_dwo_unit_table, allocate_type_unit_groups_table,
+	allocate_dwo_file_hash_table, allocate_dwp_loaded_cutus_table):
+	Remove objfile parameter, update all callers.
+
+2020-02-19  Doug Evans  <dje@google.com>
+
+	PR rust/25535
+	* rust-lang.c (rust_print_enum): Apply embedded_offset to
+	rust_enum_variant calculation.
+
+2020-02-19  Tom Tromey  <tromey@adacore.com>
+
+	* mips-tdep.h (mips_pc_is_mips): Parameter type is CORE_ADDR.
+
+2020-02-19  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (cache_symbol): Use obstack_strdup.
+
+2020-02-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* configure: Regenerate.
+
+2020-02-19  Tom Tromey  <tromey@adacore.com>
+
+	* python/python.c (do_start_initialization): Use XNEWVEC.  Remove
+	NULL check.
+
+2020-02-19  Maciej W. Rozycki  <macro@wdc.com>
+
+	* NEWS: Mention RISC-V GNU/Linux GDBserver support.
+
+2020-02-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arch/riscv.c (struct riscv_gdbarch_features_hasher): Only define
+	if GDBSERVER is not defined.
+	(riscv_tdesc_cache): Likewise, also store const target_desc.
+	(STATIC_IN_GDB): Define.
+	(riscv_create_target_description): Update declaration with
+	STATIC_IN_GDB.
+	(riscv_lookup_target_description): New function, only define if
+	GDBSERVER is not defined.
+	* arch/riscv.h (riscv_create_target_description): Declare only
+	when GDBSERVER is defined.
+	(riscv_lookup_target_description): New declaration when GDBSERVER
+	is not defined.
+	* nat/riscv-linux-tdesc.c (riscv_linux_read_description): Rename to...
+	(riscv_linux_read_features): ...this, and return
+	riscv_gdbarch_features instead of target_desc.
+	* nat/riscv-linux-tdesc.h: Include 'arch/riscv.h'.
+	(riscv_linux_read_description): Rename to...
+	(riscv_linux_read_features): ...this.
+	* riscv-linux-nat.c (riscv_linux_nat_target::read_description):
+	Update to use riscv_gdbarch_features and
+	riscv_lookup_target_description.
+	* riscv-tdep.c (riscv_find_default_target_description): Use
+	riscv_lookup_target_description instead of
+	riscv_create_target_description.
+
+2020-02-18  Simon Marchi  <simon.marchi@efficios.com>
+
+	* valprint.c (generic_val_print_enum_1): When printing a flag
+	enum with value 0 and there is no enumerator with value 0, print
+	just "0" instead of "(unknown: 0x0)".
+
+2020-02-18  Simon Marchi  <simon.marchi@efficios.com>
+
+	* valprint.c (generic_val_print_enum_1): Print unknown part of
+	flag enum in hex.
+
+2020-02-18  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (update_enumeration_type_from_children): Allow
+	flag enums to contain duplicate enumerators.
+	* valprint.c (generic_val_print_enum_1): Update comment.
+
+2020-02-18  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c: Include "count-one-bits.h".
+	(update_enumeration_type_from_children): If an enumerator has
+	multiple bits set, don't treat the enumeration as a "flag enum".
+	* valprint.c (generic_val_print_enum_1): Assert that enumerators
+	of flag enums have 0 or 1 bit set.
+
+2020-02-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* aarch64-tdep.c (aarch64_displaced_step_copy_insn): Use an explicit
+	conversion.
+	* amd64-tdep.c (amd64_displaced_step_copy_insn): Likewise.
+	* arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Likewise.
+	* i386-tdep.c (i386_displaced_step_copy_insn): Likewise.
+	* rs6000-tdep.c (ppc_displaced_step_copy_insn): Likewise.
+	* s390-tdep.c (s390_displaced_step_copy_insn): Likewise.
+
+2020-02-18  Simon Marchi  <simon.marchi@efficios.com>
+
+	* MAINTAINERS: Change palmer@sifive.com to palmer@dabbelt.com.
+
+2020-02-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* aarch64-tdep.c (aarch64_displaced_step_copy_insn): Use
+	displaced_step_closure_up.
+	* aarch64-tdep.h (aarch64_displaced_step_copy_insn): Likewise.
+	(struct displaced_step_closure_up):
+	* amd64-tdep.c (amd64_displaced_step_copy_insn): Likewise.
+	* amd64-tdep.h (amd64_displaced_step_copy_insn): Likewise.
+	* arm-linux-tdep.c (arm_linux_displaced_step_copy_insn):
+	Likewise.
+	* gdbarch.sh (displaced_step_copy_insn): Likewise.
+	* gdbarch.c, gdbarch.h: Re-generate.
+	* i386-linux-tdep.c (i386_linux_displaced_step_copy_insn): Use
+	displaced_step_closure_up.
+	* i386-tdep.c (i386_displaced_step_copy_insn): Likewise.
+	* i386-tdep.h (i386_displaced_step_copy_insn): Likewise.
+	* infrun.h (displaced_step_closure_up): New type alias.
+	(struct displaced_step_inferior_state) <step_closure>: Change
+	type to displaced_step_closure_up.
+	* rs6000-tdep.c (ppc_displaced_step_copy_insn): Use
+	displaced_step_closure_up.
+	* s390-tdep.c (s390_displaced_step_copy_insn): Likewise.
+
+2020-02-14  Tom Tromey  <tom@tromey.com>
+
+	* minidebug.c (gnu_debug_key): New global.
+	(find_separate_debug_file_in_section): Use it.
+
+2020-02-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh (displaced_step_copy_insn): Change return type to an
+	std::unique_ptr.
+	* gdbarch.c: Re-generate.
+	* gdbarch.h: Re-generate.
+	* infrun.c (displaced_step_prepare_throw): Adjust to std::unique_ptr
+	change.
+	* aarch64-tdep.c (aarch64_displaced_step_copy_insn): Change return
+	type to std::unique_ptr.
+	* aarch64-tdep.h (aarch64_displaced_step_copy_insn): Likewise.
+	* amd64-tdep.c (amd64_displaced_step_copy_insn): Likewise.
+	* amd64-tdep.h (amd64_displaced_step_copy_insn): Likewise.
+	* arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Likewise.
+	* i386-linux-tdep.c (i386_linux_displaced_step_copy_insn): Likewise.
+	* i386-tdep.c (i386_displaced_step_copy_insn): Likewise.
+	* i386-tdep.h (i386_displaced_step_copy_insn): Likewise.
+	* rs6000-tdep.c (ppc_displaced_step_copy_insn): Likewise.
+	* s390-tdep.c (s390_displaced_step_copy_insn): Likewise.
+
+2020-02-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.c (get_displaced_step_closure_by_addr): Adjust to
+	std::unique_ptr.
+	(displaced_step_clear): Rename to...
+	(displaced_step_reset): ... this.  Just call displaced->reset ().
+	(displaced_step_clear_cleanup): Rename to...
+	(displaced_step_reset_cleanup): ... this.
+	(displaced_step_prepare_throw): Adjust to std::unique_ptr.
+	(displaced_step_fixup): Likewise.
+	(resume_1): Likewise.
+	(handle_inferior_event): Restore child's memory before calling
+	displaced_step_fixup on the parent.
+	* infrun.h (displaced_step_inferior_state) <reset>: Adjust
+	to std::unique_ptr.
+	<step_closure>: Change type to std::unique_ptr.
+
+2020-02-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* arm-tdep.c: Include count-one-bits.h.
+	(cleanup_block_store_pc): Use count_one_bits.
+	(cleanup_block_load_pc): Use count_one_bits.
+	(arm_copy_block_xfer): Use count_one_bits.
+	(thumb2_copy_block_xfer): Use count_one_bits.
+	(thumb_copy_pop_pc_16bit): Use count_one_bits.
+	* arch/arm-get-next-pcs.c: Include count-one-bits.h.
+	(thumb_get_next_pcs_raw): Use count_one_bits.
+	(arm_get_next_pcs_raw): Use count_one_bits_l.
+	* arch/arm.c (bitcount): Remove.
+	* arch/arm.h (bitcount): Remove.
+
+2020-02-14  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/frame-tailcall.c (dwarf2_tailcall_sniffer_first):
+	Update.
+	* dwarf2/loc.h (call_site_find_chain): Return unique_xmalloc_ptr.
+	* dwarf2/loc.c (call_site_find_chain_1): Return
+	unique_xmalloc_ptr.
+	(call_site_find_chain): Likewise.
+
+2020-02-14  Richard Biener  <rguenther@suse.de>
+
+	* dwarf2/read.c (lnp_state_machine::handle_special_opcode): Apply CSE
+	on expression with division operators.
+
+2020-02-13  Alok Kumar Sharma  <AlokKumar.Sharma@amd.com>
+
+	* MAINTAINERS (Write After Approval): Adding myself.
+
+2020-02-12  Tom Tromey  <tom@tromey.com>
+
+	* event-loop.c (event_data, gdb_event, event_handler_func):
+	Remove.
+
+2020-02-12  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/frame.c (dwarf2_frame_bfd_data): New global.
+	(dwarf2_frame_objfile_data): Add comment.
+	(find_comp_unit, set_comp_unit): New functions.
+	(dwarf2_frame_find_fde): Use find_comp_unit.
+	(dwarf2_build_frame_info): Use set_comp_unit.
+
+2020-02-12  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/frame.c (struct comp_unit) <objfile>: Remove.
+	(comp_unit): Don't initialize objfile.
+	(execute_cfa_program): Add text_offset parameter.
+	(execute_cfa_program_test, dwarf2_fetch_cfa_info)
+	(dwarf2_frame_cache): Update.
+	(dwarf2_build_frame_info): Don't set "objfile" member.
+
+2020-02-12  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/frame.c (decode_frame_entry_1): Add gdbarch parameter.
+	(decode_frame_entry): Likewise.
+	(dwarf2_build_frame_info): Update.
+
+2020-02-12  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/frame.c (struct comp_unit) <obstack>: New member.
+	(decode_frame_entry_1): Use the comp_unit obstack.
+
+2020-02-12  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/frame.c (struct comp_unit): Add initializers and
+	constructor.
+	(dwarf2_frame_objfile_data): Store a comp_unit.
+	(dwarf2_frame_find_fde): Update.
+	(dwarf2_build_frame_info): Use "new".
+
+2020-02-12  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/frame.c (struct dwarf2_fde_table): Remove.
+	(dwarf2_fde_table): Typedef for std::vector.
+	(dwarf2_frame_objfile_data): Remove the deleter.  Now static.
+	(dwarf2_frame_find_fde, add_fde, decode_frame_entry_1)
+	(decode_frame_entry): Update.
+	(dwarf2_build_frame_info): Use "new".
+
+2020-02-12  Christian Biesinger  <cbiesinger@google.com>
+
+	* arm-tdep.c (arm_gdbarch_init): Update.
+	* arm-tdep.h (struct gdbarch_tdep) <have_fpa_registers,
+	have_wmmx_registers, have_vfp_pseudos, have_neon_pseudos,
+	have_neon, is_m>: Change to bool.
+
+2020-02-12  Christian Biesinger  <cbiesinger@google.com>
+
+	* arm-tdep.c (arm_dump_tdep): Print more fields of tdep.
+
+2020-02-12  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/loc.c (struct dwarf_expr_baton): Remove.
+
+2020-02-12  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-tdep.c (struct windows_gdbarch_data): Add tib_ptr_type.
+	(windows_get_tlb_type): Use windows_gdbarch_data->tib_ptr_type.
+
+2020-02-11  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.h: Update comment.
+
+2020-02-11  Tom Tromey  <tom@tromey.com>
+
+	* gdb_obstack.h (struct auto_obstack): Use
+	DISABLE_COPY_AND_ASSIGN.
+
+2020-02-11  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/frame.h (struct objfile): Don't forward declare.
+
+2020-02-11  Christian Biesinger  <cbiesinger@google.com>
+
+	* cris-tdep.c (cris_supply_gregset): Change signature to match
+	what struct regset expects.
+	(cris_regset): New struct.
+	(fetch_core_registers): Remove.
+	(cris_iterate_over_regset_sections): New function.
+	(_initialize_cris_tdep): Don't call deprecated_add_core_fns.
+	(cris_gdbarch_init): Call set_gdbarch_iterate_over_regset_sections.
+
+2020-02-11  Christian Biesinger  <cbiesinger@google.com>
+
+	* arch/arm.h (enum gdb_regnum): Add comment for the FP0..7
+	registers.
+
+2020-02-11  Christian Biesinger  <cbiesinger@google.com>
+
+	* arm-tdep.c (arm_dump_tdep): Add \n in fprintf.
+
+2020-02-11  Simon Marchi  <simon.marchi@efficios.com>
+
+	* configure: Re-generate.
+
+2020-02-11  Simon Marchi  <simon.marchi@efficios.com>
+
+	* configure: Re-generate.
+
+2020-02-11  Simon Marchi  <simon.marchi@efficios.com>
+
+	* acinclude: Update warning.m4 path.
+	* warning.m4: Move to gdbsupport.
+
+2020-02-11  Tom Tromey  <tromey@adacore.com>
+
+	* remote.c (remote_console_output): Update.
+	* printcmd.c (printf_command): Update.
+	* event-loop.c (gdb_wait_for_event): Update.
+	* linux-nat.c (sigchld_handler): Update.
+	* remote-sim.c (gdb_os_write_stdout): Update.
+	(gdb_os_flush_stdout): Update.
+	(gdb_os_flush_stderr): Update.
+	(gdb_os_write_stderr): Update.
+	* exceptions.c (print_exception): Update.
+	* remote-fileio.c (remote_fileio_func_read): Update.
+	(remote_fileio_func_write): Update.
+	* tui/tui.c (tui_enable): Update.
+	* tui/tui-interp.c (tui_interp::init): Update.
+	* utils.c (init_page_info): Update.
+	(putchar_unfiltered, fputc_unfiltered): Update.
+	(gdb_flush): Update.
+	(emit_style_escape): Update.
+	(flush_wrap_buffer, fputs_maybe_filtered): Update.
+	* ui-file.c (ui_file_isatty, ui_file_read, ui_file_write)
+	(ui_file_write_async_safe, ui_file_flush, ui_file_puts): Remove.
+	(stderr_file::write): Update.
+	(stderr_file::puts): Update.
+	* ui-file.h (ui_file_isatty, ui_file_write)
+	(ui_file_write_async_safe, ui_file_read, ui_file_flush)
+	(ui_file_puts): Don't declare.
+
+2020-02-10  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (process_psymtab_comp_unit_reader): Cast concat NULL
+	sentinel to char *.
+
+2020-02-09  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2read.c (process_psymtab_comp_unit_reader): Append CU offset to
+	filename if it matches "<artificial>".
+
+2020-02-09  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-tdep.c (struct enum_value_name): New struct.
+	(create_enum): New function.
+	(windows_get_siginfo_type): Create and use enum types.
+
+2020-02-09  Hannes Domani  <ssbssa@yahoo.de>
+
+	* NEWS: Mention $_siginfo support for Windows.
+	* windows-nat.c (handle_exception): Set siginfo_er.
+	(windows_nat_target::mourn_inferior): Reset siginfo_er.
+	(windows_xfer_siginfo): New function.
+	(windows_nat_target::xfer_partial): Call windows_xfer_siginfo.
+	* windows-tdep.c (struct windows_gdbarch_data): New struct.
+	(init_windows_gdbarch_data): New function.
+	(get_windows_gdbarch_data): New function.
+	(windows_get_siginfo_type): New function.
+	(windows_init_abi): Register windows_get_siginfo_type.
+	(_initialize_windows_tdep): Register init_windows_gdbarch_data.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (class cutu_reader) <cutu_reader,
+	init_tu_and_read_dwo_dies>: Remove "keep" parameter.
+	<keep>: Declare method.
+	<m_keep>: Remove member.
+	<~cutu_reader>: Remove.
+	(cutu_reader::init_tu_and_read_dwo_dies): Update.
+	(cutu_reader::cutu_reader): Update.
+	(cutu_reader::keep): Rename from ~cutu_reader.
+	(process_psymtab_comp_unit, build_type_psymtabs_1)
+	(process_skeletonless_type_unit, load_partial_comp_unit)
+	(load_full_comp_unit, dwarf2_read_addr_index)
+	(read_signatured_type): Update.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (process_psymtab_comp_unit_reader): Remove
+	"want_partial_unit" parameter.
+	(process_psymtab_comp_unit): Change want_partial_unit to bool.
+	Inline check for DW_TAG_partial_unit.
+	(dwarf2_build_psymtabs_hard, scan_partial_symbols): Update.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_n_bytes, read_direct_string): Move to
+	read.c.
+	* dwarf2/leb.h (read_n_bytes, read_direct_string): Move from
+	read.c.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_address): Move to comp-unit.c.
+	(dwarf2_rnglists_process, dwarf2_ranges_process)
+	(read_attribute_value, dwarf_decode_lines_1)
+	(var_decode_location, decode_locdesc): Update.
+	* dwarf2/comp-unit.c (comp_unit_head::read_address): Move from
+	read.c.  Remove "cu" parameter.
+	* dwarf2/comp-unit.h (struct comp_unit_head) <read_address>: New
+	method.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_attribute_value, read_indirect_string)
+	(read_indirect_line_string): Update.
+	* dwarf2/comp-unit.c (read_offset): Remove.
+	(read_comp_unit_head): Update.
+	* dwarf2/comp-unit.h (struct comp_unit_head) <read_offset>: New
+	method.
+	(read_offset): Don't declare.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in (COMMON_SFILES): Add dwarf2/comp-unit.c.
+	* dwarf2/read.c (struct comp_unit_head): Move to
+	dwarf2/comp-unit.h.
+	(enum class rcuh_kind): Move to comp-unit.h.
+	(get_cu_length, offset_in_cu_p): Now methods on comp_unit_head.
+	(read_comp_unit_head, error_check_comp_unit_head)
+	(read_and_check_comp_unit_head): Move to comp-unit.c.
+	(read_offset, dwarf_unit_type_name): Likewise.
+	(create_debug_type_hash_table, read_cutu_die_from_dwo)
+	(cutu_reader::cutu_reader, read_call_site_scope)
+	(find_partial_die, follow_die_offset): Update.
+	* dwarf2/comp-unit.h: New file, from dwarf2read.c.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_offset_1): Move to leb.c.
+	(read_abbrev_offset, read_offset, dwarf_decode_line_header)
+	(dwarf_decode_macro_bytes): Update.
+	* dwarf2/leb.c (read_offset): Rename; move from read.c.
+	* dwarf2/leb.h (read_offset): Declare.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_section_size): Remove.
+	(error_check_comp_unit_head, dwarf2_symbol_mark_computed):
+	Update.
+	* dwarf2/section.h (struct dwarf2_section_info) <get_size>: New method.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_initial_length): Move to leb.c.
+	* dwarf2/leb.h (read_initial_length): Declare.
+	* dwarf2/leb.c (read_initial_length): Move from read.c.  Add
+	handle_nonstd parameter.
+	* dwarf2/frame.c (read_initial_length): Remove.
+	(decode_frame_entry_1): Update.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/loc.c (dwarf2_find_location_expression)
+	(dwarf_evaluate_loc_desc::get_tls_address)
+	(dwarf_evaluate_loc_desc::push_dwarf_reg_entry_value)
+	(rw_pieced_value, dwarf2_evaluate_loc_desc_full)
+	(dwarf2_locexpr_baton_eval, dwarf2_evaluate_property)
+	(dwarf2_compile_property_to_c)
+	(dwarf2_loc_desc_get_symbol_read_needs)
+	(dwarf2_compile_expr_to_ax, locexpr_describe_location)
+	(locexpr_tracepoint_var_ref, locexpr_generate_c_location)
+	(loclist_describe_location, loclist_tracepoint_var_ref)
+	(loclist_generate_c_location): Update.
+	* compile/compile-loc2c.c (do_compile_dwarf_expr_to_c): Update.
+	* dwarf2/loc.h (dwarf2_per_cu_objfile, dwarf2_per_cu_addr_size)
+	(dwarf2_per_cu_ref_addr_size, dwarf2_per_cu_offset_size)
+	(dwarf2_per_cu_text_offset, dwarf2_version): Don't declare.
+	* dwarf2/read.c (dwarf2_per_cu_data::objfile)
+	(dwarf2_per_cu_data::addr_size)
+	(dwarf2_per_cu_data::ref_addr_size)
+	(dwarf2_per_cu_data::text_offset)
+	(dwarf2_per_cu_data::addr_type): Now methods.
+	(per_cu_header_read_in): Make per_cu "const".
+	(dwarf2_version): Remove.
+	(dwarf2_per_cu_data::int_type): Now a method.
+	(dwarf2_per_cu_data::_addr_sized_int_type): Likewise.
+	(set_die_type, read_array_type, read_subrange_index_type)
+	(read_tag_string_type, read_subrange_type): Update.
+	* dwarf2/read.h (struct dwarf2_per_cu_data) <addr_size,
+	offset_size, ref_addr_size, text_offset, addr_type, version,
+	objfile, int_type, addr_sized_int_type>: Declare methods.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data) <imported_symtabs>:
+	Move earlier.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (dwarf_line_debug): Declare.
+	* Makefile.in (COMMON_SFILES): Add dwarf2/line-header.c.
+	* dwarf2/read.c: Move line_header code to new files.
+	(dwarf_line_debug): No longer static.
+	* dwarf2/line-header.c: New file.
+	* dwarf2/line-header.h: New file.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (struct line_header) <file_full_name,
+	file_file_name>: Return unique_xmalloc_ptr.
+	(line_header::file_file_name): Update.
+	(line_header::file_full_name): Update.
+	(dw2_get_file_names_reader): Update.
+	(macro_start_file): Update.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (struct line_header) <file_full_name,
+	file_file_name>: Declare methods.
+	(dw2_get_file_names_reader): Update.
+	(file_file_name): Now a method.
+	(file_full_name): Likewise.
+	(macro_start_file): Update.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf_always_disassemble)
+	(show_dwarf_always_disassemble): Move to loc.c.
+	(_initialize_dwarf2_read): Move "always-disassemble" registration
+	to loc.c.
+	* dwarf2/read.h (dwarf_always_disassemble): Don't declare.
+	* dwarf2/loc.c (dwarf_always_disassemble): Move from read.c.  Now
+	static.
+	(show_dwarf_always_disassemble): Move from read.c.
+	(_initialize_dwarf2loc): Move always-disassemble from read.c.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (~dwarf2_per_objfile): Update.
+	(create_quick_file_names_table): Return htab_up.
+	(dw2_get_file_names_reader, dw2_forget_cached_source_info):
+	Update.
+	* dwarf2/read.h (struct dwarf2_per_objfile)
+	<quick_file_names_table>: Now htab_up.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/abbrev.c (abbrev_table::read): Simplify.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/abbrev.c (abbrev_table): Move constructor from header.
+	Rewrite.
+	(abbrev_table::add_abbrev, abbrev_table::lookup_abbrev): Rewrite.
+	* dwarf2/abbrev.h (struct abbrev_info) <next>: Remove.
+	(abbrev_table::abbrev_table): No longer inline.
+	(ABBREV_HASH_SIZE): Remove.
+	(abbrev_table::m_abbrevs): Now an htab_up.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_cutu_die_from_dwo): Update.
+	(cutu_reader): Update.
+	(build_type_psymtabs_1): Update.
+	* dwarf2/abbrev.c (abbrev_table::read): Rename.
+	(abbrev_table::alloc_abbrev): Update.
+	* dwarf2/abbrev.h (abbrev_table_up): Move earlier.
+	(abbrev_table::read): New static method, renamed from
+	abbrev_table_read_table.
+	(abbrev_table::alloc_abbrev)
+	(abbrev_table::add_abbrev): Now private.
+	(abbrev_table::abbrev_table): Now private.
+	(abbrev_table::m_abbrev_obstack): Now private.  Rename.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (set_die_type, get_die_type_at_offset): Update.
+	* dwarf2/read.h (struct dwarf2_per_objfile) <die_type_hash>: Now
+	htab_up.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (struct dwp_file) <loaded_cus, loaded_tus>: Now
+	htab_up.
+	(lookup_dwo_unit_in_dwp): Update.
+	(allocate_dwp_loaded_cutus_table): Return htab_up.  Don't allocate
+	on obstack.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (allocate_dwo_file_hash_table): Don't allocate on
+	obstack.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (~dwarf2_per_objfile): Don't delete
+	line_header_hash.
+	(handle_DW_AT_stmt_list): Update.  Don't allocate on obstack.
+	* dwarf2/read.h (struct dwarf2_per_objfile) <line_header_hash>:
+	Change type to htab_up.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (allocate_type_unit_groups_table): Return
+	htab_up.  Don't allocate on obstack.
+	(get_type_unit_group, dwarf2_build_psymtabs_hard): Update.
+	* dwarf2/read.h (struct dwarf2_per_objfile) <type_unit_groups>:
+	Change type to htab_up.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_objfile) <signatured_types>:
+	Change type to htab_up.
+	* dwarf2/read.c (create_signatured_type_table_from_index)
+	(create_signatured_type_table_from_debug_names)
+	(create_all_type_units, add_type_unit)
+	(lookup_dwo_signatured_type, lookup_signatured_type)
+	(process_skeletonless_type_unit): Update.
+	(create_debug_type_hash_table, create_debug_types_hash_table):
+	Change type of types_htab.
+	(allocate_signatured_type_table, allocate_dwo_unit_table): Return
+	htab_up.  Don't allocate on obstack.
+	(create_cus_hash_table): Change type of cus_htab parameter.
+	(struct dwo_file) <cus, tus>: Now htab_up.
+	(lookup_dwo_signatured_type, lookup_dwo_cutu)
+	(process_dwo_file_for_skeletonless_type_units, lookup_dwo_cutu)
+	(queue_and_load_all_dwo_tus): Update.
+	* dwarf2/index-write.c (write_gdbindex): Update.
+	(write_debug_names): Update.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_queue_item): Move from
+	dwarf2/read.c.  Remove "next" member.  Add constructor ntad
+	destructor.
+	(struct dwarf2_per_objfile) <queue>: New member.
+	* dwarf2/read.c (struct dwarf2_queue_item): Move to
+	dwarf2/read.h.
+	(dwarf2_queue, dwarf2_queue_tail): Remove.
+	(class dwarf2_queue_guard): Add parameter to constructor.  Use
+	DISABLE_COPY_AND_ASSIGN.
+	<m_per_objfile>: New member.
+	<~dwarf2_queue_guard>: Rewrite.
+	(dw2_do_instantiate_symtab, queue_comp_unit, process_queue):
+	Update.
+	(~dwarf2_queue_item): New.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (struct die_info) <has_children>: New member.
+	(dw2_get_file_names_reader): Remove has_children.
+	(dw2_get_file_names): Update.
+	(read_cutu_die_from_dwo): Remove has_children.
+	(cutu_reader::init_tu_and_read_dwo_dies)
+	(cutu_reader::cutu_reader): Update.
+	(process_psymtab_comp_unit_reader, build_type_psymtabs_reader):
+	Remove has_children.
+	(build_type_psymtabs_1, process_skeletonless_type_unit)
+	(load_partial_comp_unit, load_full_comp_unit): Update.
+	(create_dwo_cu_reader): Remove has_children.
+	(create_cus_hash_table, read_die_and_children): Update.
+	(read_full_die_1,read_full_die): Remove has_children.
+	(read_signatured_type): Update.
+	(class cutu_reader) <has_children>: Remove.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/expr.c: Rename from dwarf2expr.c.
+	* dwarf2/expr.h: Rename from dwarf2expr.h.
+	* dwarf2/frame-tailcall.c: Rename from dwarf2-frame-tailcall.c.
+	* dwarf2/frame-tailcall.h: Rename from dwarf2-frame-tailcall.h.
+	* dwarf2/frame.c: Rename from dwarf2-frame.c.
+	* dwarf2/frame.h: Rename from dwarf2-frame.h.
+	* dwarf2/index-cache.c: Rename from dwarf-index-cache.c.
+	* dwarf2/index-cache.h: Rename from dwarf-index-cache.h.
+	* dwarf2/index-common.c: Rename from dwarf-index-common.c.
+	* dwarf2/index-common.h: Rename from dwarf-index-common.h.
+	* dwarf2/index-write.c: Rename from dwarf-index-write.c.
+	* dwarf2/index-write.h: Rename from dwarf-index-write.h.
+	* dwarf2/loc.c: Rename from dwarf2loc.c.
+	* dwarf2/loc.h: Rename from dwarf2loc.h.
+	* dwarf2/read.c: Rename from dwarf2read.c.
+	* dwarf2/read.h: Rename from dwarf2read.h.
+	* dwarf2/abbrev.c, aarch64-tdep.c, alpha-tdep.c,
+	amd64-darwin-tdep.c, arc-tdep.c, arm-tdep.c, bfin-tdep.c,
+	compile/compile-c-symbols.c, compile/compile-cplus-symbols.c,
+	compile/compile-loc2c.c, cris-tdep.c, csky-tdep.c, findvar.c,
+	gdbtypes.c, guile/scm-type.c, h8300-tdep.c, hppa-bsd-tdep.c,
+	hppa-linux-tdep.c, i386-darwin-tdep.c, i386-linux-tdep.c,
+	i386-tdep.c, iq2000-tdep.c, m32c-tdep.c, m68hc11-tdep.c,
+	m68k-tdep.c, microblaze-tdep.c, mips-tdep.c, mn10300-tdep.c,
+	msp430-tdep.c, nds32-tdep.c, nios2-tdep.c, or1k-tdep.c,
+	riscv-tdep.c, rl78-tdep.c, rs6000-tdep.c, rx-tdep.c, s12z-tdep.c,
+	s390-tdep.c, score-tdep.c, sh-tdep.c, sparc-linux-tdep.c,
+	sparc-tdep.c, sparc64-linux-tdep.c, sparc64-tdep.c, tic6x-tdep.c,
+	tilegx-tdep.c, v850-tdep.c, xstormy16-tdep.c, xtensa-tdep.c:
+	Update.
+	* Makefile.in (COMMON_SFILES): Update.
+	(HFILES_NO_SRCDIR): Update.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (struct die_reader_specs) <comp_dir>: Remove.
+	(init_cu_die_reader, read_cutu_die_from_dwo): Update.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.h (struct die_info): Don't declare.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.h (die_info_ptr): Remove typedef.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (read_call_site_scope)
+	(handle_data_member_location, dwarf2_add_member_fn)
+	(mark_common_block_symbol_computed, read_common_block)
+	(attr_to_dynamic_prop, partial_die_info::read)
+	(var_decode_location, dwarf2_fetch_die_loc_sect_off)
+	(dwarf2_symbol_mark_computed, set_die_type): Update.
+	* dwarf2/attribute.h (struct attribute) <form_is_block>: Declare
+	method.
+	(attr_form_is_block): Don't declare.
+	* dwarf2/attribute.c (attribute::form_is_block): Now a method.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (dwarf2_find_base_address, )
+	(read_call_site_scope, rust_containing_type)
+	(dwarf2_get_pc_bounds, dwarf2_record_block_ranges)
+	(handle_data_member_location, dwarf2_add_member_fn)
+	(get_alignment, read_structure_type, process_structure_scope)
+	(mark_common_block_symbol_computed, read_common_block)
+	(read_tag_string_type, attr_to_dynamic_prop, read_subrange_type)
+	(partial_die_info::read, read_attribute_value, new_symbol)
+	(lookup_die_type, dwarf2_get_ref_die_offset)
+	(dwarf2_get_attr_constant_value, follow_die_ref_or_sig)
+	(dwarf2_fetch_die_loc_sect_off, get_DW_AT_signature_type)
+	(dwarf2_symbol_mark_computed): Update.
+	* dwarf2/attribute.h (struct attribute) <value_as_address,
+	form_is_section_offset, form_is_constant, form_is_ref>: Declare
+	methods.
+	(value_as_address, attr_form_is_section_offset)
+	(attr_form_is_constant, attr_form_is_ref): Don't declare.
+	* dwarf2/attribute.c (attribute::value_as_address)
+	(attribute::form_is_section_offset, attribute::form_is_constant)
+	(attribute::form_is_ref): Now methods.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (struct attribute, DW_STRING)
+	(DW_STRING_IS_CANONICAL, DW_UNSND, DW_BLOCK, DW_SND, DW_ADDR)
+	(DW_SIGNATURE, struct dwarf_block, attr_value_as_address)
+	(attr_form_is_block, attr_form_is_section_offset)
+	(attr_form_is_constant, attr_form_is_ref): Move.
+	* dwarf2/attribute.h: New file.
+	* dwarf2/attribute.c: New file, from dwarf2read.c.
+	* Makefile.in (COMMON_SFILES): Add dwarf2/attribute.c.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (abbrev_table_up, struct abbrev_info)
+	(struct attr_abbrev, ABBREV_HASH_SIZE, struct abbrev_table):
+	Move.
+	(read_cutu_die_from_dwo, build_type_psymtabs_1): Update.
+	(abbrev_table::alloc_abbrev, abbrev_table::add_abbrev)
+	(abbrev_table::lookup_abbrev, abbrev_table_read_table): Move to
+	abbrev.c.
+	* dwarf2/abbrev.h: New file.
+	* dwarf2/abbrev.c: New file, from dwarf2read.c.
+	* Makefile.in (COMMON_SFILES): Add dwarf2/abbrev.c.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (dwarf2_section_buffer_overflow_complaint)
+	(dwarf2_section_size, dwarf2_get_section_info)
+	(create_signatured_type_table_from_debug_names)
+	(create_addrmap_from_aranges, read_debug_names_from_section)
+	(get_gdb_index_contents_from_section, read_comp_unit_head)
+	(error_check_comp_unit_head, read_abbrev_offset)
+	(create_debug_type_hash_table, init_cu_die_reader)
+	(read_cutu_die_from_dwo, dwarf2_build_psymtabs_hard)
+	(read_comp_units_from_section, create_cus_hash_table)
+	(create_dwp_hash_table, create_dwo_unit_in_dwp_v1)
+	(create_dwp_v2_section, dwarf2_rnglists_process)
+	(dwarf2_ranges_process, read_die_and_siblings, read_full_die)
+	(abbrev_table_read_table, read_indirect_string_at_offset_from)
+	(read_indirect_string_from_dwz, read_addr_index_1)
+	(read_str_index, dwarf_decode_line_header, skip_form_bytes)
+	(dwarf_decode_macro_bytes, dwarf_decode_macros)
+	(fill_in_loclist_baton): Update.
+	* dwarf2/section.h (struct dwarf2_section_info) <get_name,
+	get_containing_section, get_bfd_owner, get_bfd_section,
+	get_file_name, get_id, get_flags, empty, read>: Declare methods.
+	(dwarf2_read_section, get_section_name, get_section_file_name)
+	(get_containing_section, get_section_bfd_owner)
+	(get_section_bfd_section, get_section_name, get_section_file_name)
+	(get_section_id, get_section_flags, dwarf2_section_empty_p): Don't
+	declare.
+	* dwarf2/section.c (dwarf2_section_info::get_containing_section)
+	(dwarf2_section_info::get_bfd_owner)
+	(dwarf2_section_info::get_bfd_section)
+	(dwarf2_section_info::get_name)
+	(dwarf2_section_info::get_file_name, dwarf2_section_info::get_id)
+	(dwarf2_section_info::get_flags, dwarf2_section_info::empty)
+	(dwarf2_section_info::read): Now methods.
+	* dwarf-index-write.c (class debug_names): Update.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.h (struct dwarf2_section_info, dwarf2_read_section):
+	Move to dwarf2/section.h.
+	* dwarf2read.c (get_containing_section, get_section_bfd_owner)
+	(get_section_bfd_section, get_section_name)
+	(get_section_file_name, get_section_id, get_section_flags)
+	(dwarf2_section_empty_p, dwarf2_read_section): Moe to
+	dwarf2/section.c.
+	* dwarf2/section.h: New file.
+	* dwarf2/section.c: New file, from dwarf2read.c.
+	* Makefile.in (COMMON_SFILES): Add dwarf2/section.c.
+
+2020-02-08  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.h (read_unsigned_leb128): Don't declare.
+	* dwarf2read.c (read_1_byte, read_1_signed_byte, read_2_bytes)
+	(read_2_signed_bytes, read_3_bytes, read_4_bytes)
+	(read_4_signed_bytes, read_8_bytes): Move to dwarf2/leb.h.
+	(read_unsigned_leb128, read_signed_leb128): Move to dwarf2/leb.c.
+	* dwarf2/leb.h: New file, from dwarf2read.c.
+	* dwarf2/leb.c: New file, from dwarf2read.c.
+	* dwarf2-frame.c (read_1_byte, read_4_bytes, read_8_bytes):
+	Remove.
+	* Makefile.in (CONFIG_SRC_SUBDIR): Add dwarf2.
+	(COMMON_SFILES): Add dwarf2/leb.c.
+
+2020-02-08  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 9.1 released.
+
+2020-02-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+
+	PR gdb/25190:
+	* gdb/remote-sim.c (gdb_os_write_stderr): Update.
+	* gdb/remote.c (remote_console_output): Update.
+	* gdb/ui-file.c (fputs_unfiltered): Rename to...
+	(ui_file_puts): ...this.
+	* gdb/ui-file.h (ui_file_puts): Add declaration.
+	* gdb/utils.c (emit_style_escape): Update.
+	(flush_wrap_buffer): Update.
+	(fputs_maybe_filtered): Update.
+	(fputs_unfiltered): Add function.
+
+2020-02-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+
+	* gdb/event-loop.c (gdb_wait_for_event): Update.
+	* gdb/printcmd.c (printf_command): Update.
+	* gdb/remote-fileio.c (remote_fileio_func_write): Update.
+	* gdb/remote-sim.c (gdb_os_flush_stdout): Update.
+	(gdb_os_flush_stderr): Update.
+	* gdb/remote.c (remote_console_output): Update.
+	* gdb/ui-file.c (gdb_flush): Rename to...
+	(ui_file_flush): ...this.
+	(stderr_file::write): Update.
+	(stderr_file::puts): Update.
+	* gdb/ui-file.h (gdb_flush): Rename to...
+	(ui_file_flush): ...this.
+	* gdb/utils.c (gdb_flush): Add function.
+	* gdb/utils.h (gdb_flush): Add declaration.
+
+2020-02-07  Tom Tromey  <tromey@adacore.com>
+
+	PR breakpoints/24915:
+	* source.c (find_and_open_source): Do not check basenames_may_differ.
+
+2020-02-07  Tom Tromey  <tom@tromey.com>
+
+	* README: Update gdbserver documentation.
+	* gdbserver: Move to top level.
+	* configure.tgt (build_gdbserver): Remove.
+	* configure.ac: Remove --enable-gdbserver.
+	* configure: Rebuild.
+	* Makefile.in (distclean): Don't mention gdbserver.
+
+2020-02-06  Shahab Vahedi  <shahab@synopsys.com>
+
+	* source-cache.c (source_cache::ensure): Surround
+	get_plain_source_lines with a try/catch.
+	(source_cache::get_line_charpos): Get rid of try/catch
+	and only check for the return value of "ensure".
+	* tui/tui-source.c (tui_source_window::set_contents):
+	Simplify "nlines" calculation.
+
+2020-02-06  Shahab Vahedi  <shahab@synopsys.com>
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2020-02-05  Christian Biesinger  <cbiesinger@google.com>
+
+	* sparc-nat.h (struct sparc_target) <xfer_partial>: Fix base class
+	function call.
+
+2020-02-05  Christian Biesinger  <cbiesinger@google.com>
+
+	* ppc-nbsd-tdep.h: Fix macro name in #endif comment.
+
+2020-02-05  Maciej W. Rozycki  <macro@wdc.com>
+
+	* nat/riscv-linux-tdesc.h: New file.
+	* nat/riscv-linux-tdesc.c: New file, taking code from...
+	* riscv-linux-nat.c (riscv_linux_nat_target::read_description):
+	... here.
+	* configure.nat <linux> <riscv*>: Add nat/riscv-linux-tdesc.o to
+	NATDEPFILES.
+
+2020-02-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* remote-sim.c (sim_inferior_data::sim_inferior_data): Assert that
+	we don't set the fake simulator ptid to the null_ptid.
+
+2020-02-03  Simon Marchi  <simon.marchi@efficios.com>
+
+	* fork-child.c (gdb_startup_inferior): Use bool instead of int.
+	* gdbthread.h (class thread_info) <resumed>: Likewise.
+	* infrun.c (resume_1): Likewise.
+	(proceed): Likewise.
+	(infrun_thread_stop_requested): Likewise.
+	(stop_all_threads): Likewise.
+	(handle_inferior_event): Likewise.
+	(restart_threads): Likewise.
+	(finish_step_over): Likewise.
+	(keep_going_stepped_thread): Likewise.
+	* linux-nat.c (attach_proc_task_lwp_callback): Likewise.
+	(linux_handle_extended_wait): Likewise.
+	* record-btrace.c (get_thread_current_frame_id): Likewise.
+	* record-full.c (record_full_wait_1): Likewise.
+	* remote.c (remote_target::process_initial_stop_replies): Likewise.
+	* target.c (target_resume): Likewise.
+	* thread.c (set_running_thread): Likewise.
+
+2020-02-03  Alok Kumar Sharma  <AlokKumar.Sharma@amd.com>
+
+	* f-valprint.c (f77_print_array_1): Changed datatype of index
+	variable to LONGEST from int to enable it to contain bound
+	values correctly.
+
+2020-02-03  Maciej W. Rozycki  <macro@wdc.com>
+
+	* riscv-linux-nat.c [!NFPREG] (NFPREG): New macro.
+	(supply_fpregset_regnum, fill_fpregset): Handle regset buffer
+	offsets according to FLEN determined.
+	(riscv_linux_nat_target::read_description): Determine FLEN
+	dynamically.
+	(riscv_linux_nat_target::fetch_registers): Size regset buffer
+	according to FLEN determined.
+	(riscv_linux_nat_target::store_registers): Likewise.
+
+2020-02-01  Shahab Vahedi  <shahab@synopsys.com>
+
+	* target-descriptions.c (tdesc_register_in_reggroup_p): Return 0
+	when reg->group is empty and reggroup is not.
+
+2020-01-31  Tom Tromey  <tromey@adacore.com>
+
+	* ravenscar-thread.c (ravenscar_thread_target::mourn_inferior):
+	Call beneath target's mourn_inferior after unpushing.
+
+2020-01-31  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR tui/9765
+	* tui/tui-disasm.c (tui_find_disassembly_address): If we don't
+	have enough lines to fill the screen, still return the lowest
+	address we found.
+
+2020-01-31  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui/tui-win.c (_initialize_tui_win): Update help text for '+',
+	'-', '<', and '>' commands.
+
+2020-01-29  Pedro Alves  <palves@redhat.com>
+	    Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* infcmd.c (construct_inferior_arguments): Assert that
+	'argc' is greater than 0.
+
+2020-01-29  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-tdep.c (BRK_INSN_MASK): Define to 0xffe0001f.
+	(BRK_INSN_MASK): Define to 0xd4200000.
+	(aarch64_program_breakpoint_here_p): New function.
+	(aarch64_gdbarch_init): Set gdbarch_program_breakpoint_here_p hook.
+	* arch-utils.c (default_program_breakpoint_here_p): Moved from
+	breakpoint.c.
+	* arch-utils.h (default_program_breakpoint_here_p): Moved from
+	breakpoint.h
+	* breakpoint.c (bp_loc_is_permanent): Changed return type to bool and
+	call gdbarch_program_breakpoint_here_p.
+	(program_breakpoint_here): Moved to arch-utils.c, renamed to
+	default_program_breakpoint_here_p, changed return type to bool and
+	simplified.
+	* breakpoint.h (program_breakpoint_here): Moved prototype to
+	arch-utils.h, renamed to default_program_breakpoint_here_p and changed
+	return type to bool.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh (program_breakpoint_here_p): New method.
+	* infrun.c (handle_signal_stop): Call
+	gdbarch_program_breakpoint_here_p.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* ctfread.c (struct ctf_fp_info): Reindent.
+	(_initialize_ctfread): Remove.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (partial_map_expand_apply)
+	(psym_find_pc_sect_compunit_symtab, psym_lookup_symbol)
+	(psymtab_to_symtab, psym_find_last_source_symtab, dump_psymtab)
+	(psym_print_stats, psym_expand_symtabs_for_function)
+	(psym_map_symbol_filenames, psym_map_matching_symbols)
+	(psym_expand_symtabs_matching)
+	(partial_symtab::read_dependencies, maintenance_info_psymtabs)
+	(maintenance_check_psymtabs): Use new methods.
+	* psympriv.h (struct partial_symtab) <readin_p,
+	get_compunit_symtab>: New methods.
+	<readin, compunit_symtab>: Remove members.
+	(struct standard_psymtab): New.
+	(struct legacy_psymtab): Derive from standard_psymtab.
+	* dwarf2read.h (struct dwarf2_psymtab): Derive from
+	standard_psymtab.
+	* ctfread.c (struct ctf_psymtab): Derive from standard_psymtab.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_psymtab_to_symtab_1): Call
+	read_dependencies.  Add assert.
+	* psymtab.c (partial_symtab::read_dependencies): New method.
+	* psympriv.h (struct partial_symtab) <read_dependencies>: New
+	method.
+	* mdebugread.c (psymtab_to_symtab_1): Call read_dependencies.
+	* dwarf2read.c (dwarf2_psymtab::expand_psymtab): Call
+	read_dependencies.
+	* dbxread.c (dbx_psymtab_to_symtab_1): Call read_dependencies.
+	Add assert.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_psymtab_to_symtab_1): Change argument order.
+	Call expand_psymtab.
+	(xcoff_read_symtab): Call expand_psymtab.
+	(xcoff_start_psymtab, xcoff_end_psymtab): Set
+	legacy_expand_psymtab.
+	* psympriv.h (struct partial_symtab) <expand_psymtab>: New
+	method.
+	(struct legacy_psymtab) <expand_psymtab>: Implement.
+	<legacy_expand_psymtab>: New member.
+	* mdebugread.c (mdebug_read_symtab): Call expand_psymtab.
+	(parse_partial_symbols): Set legacy_expand_psymtab.
+	(psymtab_to_symtab_1): Change argument order.  Call
+	expand_psymtab.
+	(new_psymtab): Set legacy_expand_psymtab.
+	* dwarf2read.h (struct dwarf2_psymtab) <expand_psymtab>: Declare.
+	* dwarf2read.c (dwarf2_psymtab::read_symtab): Call
+	expand_psymtab.
+	(dwarf2_psymtab::expand_psymtab): Rename from
+	psymtab_to_symtab_1.  Call expand_psymtab.
+	* dbxread.c (start_psymtab): Set legacy_expand_psymtab.
+	(dbx_end_psymtab): Likewise.
+	(dbx_psymtab_to_symtab_1): Change argument order. Call
+	expand_psymtab.
+	(dbx_read_symtab): Call expand_psymtab.
+	* ctfread.c (struct ctf_psymtab) <expand_psymtab>: Declare.
+	(ctf_psymtab::expand_psymtab): Rename from psymtab_to_symtab.
+	(ctf_psymtab::read_symtab): Call expand_psymtab.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_read_symtab): Remove prints.  Add assert.
+	* psymtab.c (psymtab_to_symtab): Print verbose "Reading"
+	messages.
+	* mdebugread.c (mdebug_read_symtab): Remove prints.
+	* dwarf2read.c (dwarf2_psymtab::read_symtab): Remove prints.  Add
+	assert.
+	* dbxread.c (dbx_read_symtab): Remove prints.  Add assert.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (this_symtab_psymtab, read_xcoff_symtab)
+	(xcoff_psymtab_to_symtab_1, xcoff_read_symtab)
+	(xcoff_start_psymtab, xcoff_end_psymtab, scan_xcoff_symtab): Use
+	legacy_symtab.
+	* stabsread.h (dbx_end_psymtab): Use legacy_symtab.
+	* psymtab.c (psymtab_to_symtab): Call method.
+	(dump_psymtab): Update.
+	* psympriv.h (struct partial_symtab): Add virtual destructor.
+	<read_symtab>: New method.
+	(struct legacy_symtab): New.
+	* mdebugread.c (mdebug_read_symtab): Use legacy_psymtab.
+	(struct pst_map) <pst>: Now a legacy_psymtab.
+	(parse_procedure, parse_partial_symbols, psymtab_to_symtab_1)
+	(new_psymtab): Use legacy_psymtab.
+	* dwarf2read.h (struct dwarf2_psymtab): New.
+	(struct dwarf2_per_cu_data) <psymtab>: Use it.
+	* dwarf2read.c (dwarf2_create_include_psymtab)
+	(dwarf2_build_include_psymtabs, create_type_unit_group)
+	(create_partial_symtab, process_psymtab_comp_unit_reader)
+	(build_type_psymtabs_reader, build_type_psymtab_dependencies)
+	(set_partial_user): Use dwarf2_psymtab.
+	(dwarf2_psymtab::read_symtab): Rename from dwarf2_read_symtab.
+	(psymtab_to_symtab_1, process_full_comp_unit)
+	(process_full_type_unit, dwarf2_ranges_read)
+	(dwarf2_get_pc_bounds, psymtab_include_file_name)
+	(dwarf_decode_lines): Use dwarf2_psymtab.
+	* dwarf-index-write.c (psym_index_map): Use dwarf2_psymtab.
+	(add_address_entry_worker, write_one_signatured_type)
+	(recursively_count_psymbols, recursively_write_psymbols)
+	(write_one_signatured_type, psyms_seen_size, write_gdbindex)
+	(write_debug_names): Likewise.
+	* dbxread.c (struct header_file_location): Take a legacy_psymtab.
+	<pst>: Now a legacy_psymtab.
+	(find_corresponding_bincl_psymtab): Return a legacy_psymtab.
+	(read_dbx_symtab, start_psymtab, dbx_end_psymtab)
+	(dbx_psymtab_to_symtab_1, read_ofile_symtab): Use legacy_psymtab.
+	* ctfread.c (struct ctf_psymtab): New.
+	(ctf_start_symtab, ctf_end_symtab, psymtab_to_symtab): Take a
+	ctf_psymtab.
+	(ctf_psymtab::read_symtab): Rename from ctf_read_symtab.
+	(create_partial_symtab): Return a ctf_psymtab.
+	(scan_partial_symbols): Update.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_start_psymtab): Use new.
+	* psymtab.c (partial_symtab::partial_symtab): New constructor,
+	renamed from start_psymtab_common.
+	* psympriv.h (struct partial_symtab): Add new constructor.
+	(start_psymtab_common): Don't declare.
+	* mdebugread.c (parse_partial_symbols): Use new.
+	* dwarf2read.c (create_partial_symtab): Use new.
+	* dbxread.c (start_psymtab): Use new.
+	* ctfread.c (create_partial_symtab): Use new.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_end_psymtab): Use new.
+	* psymtab.c (start_psymtab_common): Use new.
+	(partial_symtab::partial_symtab): Rename from allocate_psymtab.
+	Update.
+	* psympriv.h (struct partial_symtab): Add parameters to
+	constructor.  Don't inline.
+	(allocate_psymtab): Don't declare.
+	* mdebugread.c (new_psymtab): Use new.
+	* dwarf2read.c (dwarf2_create_include_psymtab): Use new.
+	* dbxread.c (dbx_end_psymtab): Use new.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.h (class psymtab_storage) <install_psymtab>: Rename from
+	allocate_psymtab.  Update documentation.
+	* psymtab.c (psymtab_storage::install_psymtab): Rename from
+	allocate_psymtab.  Do not use new.
+	(allocate_psymtab): Use new.  Update.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_psymtab_to_symtab_1): Update.
+	* psymtab.c (psym_print_stats): Update.
+	* psympriv.h (struct partial_symtab) <readin,
+	psymtabs_addrmap_supported, anonymous>: Now bool.
+	* mdebugread.c (psymtab_to_symtab_1): Update.
+	* dwarf2read.c (create_type_unit_group, create_partial_symtab)
+	(build_type_psymtabs_reader, psymtab_to_symtab_1)
+	(process_full_comp_unit, process_full_type_unit): Update.
+	* dbxread.c (dbx_psymtab_to_symtab_1): Update.
+	* ctfread.c (psymtab_to_symtab): Update.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* mdebugread.c (parse_partial_symbols): Use discard_psymtab.
+	* psymtab.h (class psymtab_storage) <free_psymtabs>: Remove.
+	* psymtab.c (psymtab_storage): Delete psymtabs.
+	(psymtab_storage::allocate_psymtab): Use new.
+	(psymtab_storage::discard_psymtab): Use delete.
+	* psympriv.h (struct partial_symtab): Add constructor and
+	initializers.
+
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* machoread.c: Do not include psympriv.h.
+
+2020-01-25  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* NEWS: Mention the new option and the set/show commands.
+
+2020-01-25  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* exec.c (exec_file_mismatch_names, exec_file_mismatch_mode)
+	(show_exec_file_mismatch_command, set_exec_file_mismatch_command)
+	(validate_exec_file): New variables, enums, functions.
+	(exec_file_locate_attach, print_section_info): Style the filenames.
+	(_initialize_exec): Install show_exec_file_mismatch_command and
+	 set_exec_file_mismatch_command.
+	* gdbcore.h (validate_exec_file): Declare.
+	* infcmd.c (attach_command): Call validate_exec_file.
+	* remote.c ( remote_target::remote_add_inferior): Likewise.
+
+2020-01-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* frame.c (find_frame_sal): Move call to get_next_frame into more
+	inner scope.
+	* inline-frame.c (inilne_state) <inline_state>: Update argument
+	types.
+	(inilne_state) <skipped_symbol>: Rename to...
+	(inilne_state) <skipped_symbols>: ...this, and change to a vector.
+	(skip_inline_frames): Build vector of skipped symbols and use this
+	to reate the inline_state.
+	(inline_skipped_symbol): Add a comment and some assertions, fetch
+	skipped symbol from the list.
+
+2020-01-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* buildsym.c (lte_is_less_than): Delete.
+	(buildsym_compunit::end_symtab_with_blockvector): Create local
+	lambda function to sort line table entries, and use
+	std::stable_sort instead of std::sort.
+	* symtab.c (find_pc_sect_line): Skip backward over end of sequence
+	markers when looking for a previous line.
+
+2020-01-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2read.c (lnp_state_machine::record_line): Include
+	end_sequence parameter in debug print out.  Record the line if we
+	are at an end_sequence marker even if it's not the start of a
+	statement.
+	* symmisc.c (maintenance_print_one_line_table): Print end of
+	sequence markers with 'END' not '0'.
+
+2020-01-24  Pedro Alves  <palves@redhat.com>
+
+	PR gdb/25410
+	* thread.c (scoped_restore_current_thread::restore): Use
+	switch_to_inferior_no_thread.
+	* exec.c: Include "progspace-and-thread.h".
+	(add_target_sections, remove_target_sections):
+	scoped_restore_current_pspace_and_thread instead of
+	scoped_restore_current_thread.
+	* infrun.c (handle_vfork_child_exec_or_exit): Assign the pspace
+	and aspace to the inferior before calling clone_program_space.
+	Remove stale comment.
+
+2020-01-24  Christian Biesinger  <cbiesinger@google.com>
+
+	* arm-nbsd-nat.c (arm_nbsd_nat_target::fetch_registers): Rename to...
+	(arm_netbsd_nat_target::fetch_registers): ...this.
+	(arm_nbsd_nat_target::store_registers): Rename to...
+	(arm_netbsd_nat_target::store_registers): ...this.
+
+2020-01-24  Christian Biesinger  <cbiesinger@google.com>
+
+	* arm-nbsd-nat.c: Define _KERNTYPES to get the declaration of
+	register_t.
+
+2020-01-24  Christian Biesinger  <cbiesinger@google.com>
+
+	* aarch64-fbsd-tdep.c (aarch64_fbsd_iterate_over_regset_sections):
+	Update comment.
+	* aarch64-linux-tdep.c (aarch64_linux_iterate_over_regset_sections):
+	Likewise.
+	* arm-fbsd-tdep.c (arm_fbsd_iterate_over_regset_sections): Likewise.
+	* gdbcore.h (deprecated_add_core_fns): Update comment to point to
+	the correct replacement (iterate_over_regset_sections).
+	* riscv-fbsd-tdep.c (riscv_fbsd_iterate_over_regset_sections):
+	Update comment.
+
+2020-01-24  Graham Markall  <graham.markall@embecosm.com>
+
+	PR gdb/23718
+	* gdb/python/python.c (execute_gdb_command): Call
+	async_enable_stdin in catch block.
+
+2020-01-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* event-loop.c (start_event_loop): Wrap async_enable_stdin with
+	SWITCH_THRU_ALL_UIS.
+
+2020-01-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR tui/9765
+	* minsyms.c (lookup_minimal_symbol_by_pc_section): Update header
+	comment, add extra parameter, and update to store previous symbol
+	when appropriate.
+	* minsyms.h (lookup_minimal_symbol_by_pc_section): Update comment,
+	add extra parameter.
+	* tui/tui-disasm.c (tui_disassemble): Update header comment,
+	remove unneeded parameter, add try/catch around gdb_print_insn,
+	rewrite to add items to asm_lines vector.
+	(tui_find_backward_disassembly_start_address): New function.
+	(tui_find_disassembly_address): Updated throughout.
+	(tui_disasm_window::set_contents): Update for changes to
+	tui_disassemble.
+	(tui_disasm_window::do_scroll_vertical): No need to adjust the
+	number of lines to scroll.
+
+2020-01-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* objfiles.h (ALL_OBJFILE_OSECTIONS): Move up.
+	(SECT_OFF_DATA): Likewise.
+	(SECT_OFF_RODATA): Likewise.
+	(SECT_OFF_TEXT): Likewise.
+	(SECT_OFF_BSS): Likewise.
+	(struct objfile) <text_section_offset, data_section_offset>: New
+	methods.
+	* amd64-windows-tdep.c (amd64_windows_find_unwind_info): Use
+	objfile::text_section_offset.
+	* coff-pe-read.c (add_pe_forwarded_sym): Likewise.
+	* coffread.c (coff_symtab_read): Likewise.
+	(enter_linenos): Likewise.
+	(process_coff_symbol): Likewise.
+	* ctfread.c (get_objfile_text_range): Likewise.
+	* dtrace-probe.c (dtrace_probe::get_relocated_address):
+	Use objfile::data_section_offset.
+	* dwarf2-frame.c (execute_cfa_program): Use
+	objfile::text_section_offset.
+	(dwarf2_frame_find_fde): Likewise.
+	* dwarf2read.c (create_addrmap_from_index): Likewise.
+	(create_addrmap_from_aranges): Likewise.
+	(dw2_find_pc_sect_compunit_symtab): Likewise.
+	(process_psymtab_comp_unit_reader): Likewise.
+	(add_partial_symbol): Likewise.
+	(add_partial_subprogram): Likewise.
+	(process_full_comp_unit): Likewise.
+	(read_file_scope): Likewise.
+	(read_func_scope): Likewise.
+	(read_lexical_block_scope): Likewise.
+	(read_call_site_scope): Likewise.
+	(dwarf2_rnglists_process): Likewise.
+	(dwarf2_ranges_process): Likewise.
+	(dwarf2_ranges_read): Likewise.
+	(dwarf_decode_lines_1): Likewise.
+	(new_symbol): Likewise.
+	(dwarf2_fetch_die_loc_sect_off): Likewise.
+	(dwarf2_per_cu_text_offset): Likewise.
+	* hppa-bsd-tdep.c (hppabsd_find_global_pointer): Likewise.
+	* hppa-tdep.c (read_unwind_info): Likewise.
+	* ia64-tdep.c (ia64_find_unwind_table): Likewise.
+	* psympriv.h (struct partial_symtab): Likewise.
+	* psymtab.c (find_pc_sect_psymtab): Likewise.
+	* solib-svr4.c (enable_break): Likewise.
+	* stap-probe.c (relocate_address): Use
+	objfile::data_section_offset.
+	* xcoffread.c (enter_line_range): Use
+	objfile::text_section_offset.
+	(read_xcoff_symtab): Likewise.
+
+2020-01-23  Simon Marchi  <simon.marchi@efficios.com>
+
+	* darwin-nat.c (darwin_nat_target::wait_1): Move `inf`
+	declaration to narrower scopes.
+
+2020-01-23  Simon Marchi  <simon.marchi@efficios.com>
+
+	* darwin-nat.h (struct darwin_exception_msg, enum
+	darwin_msg_state, struct darwin_thread_info, darwin_thread_t):
+	Move up.
+	(class darwin_nat_target) <wait_1, check_new_threads,
+	decode_exception_message, decode_message, stop_inferior,
+	init_thread_list, ptrace_him, cancel_breakpoint>: Declare.
+	* darwin-nat.c (darwin_check_new_threads): Rename to...
+	(darwin_nat_target::check_new_threads): ... this.
+	(darwin_suspend_inferior_it): Remove.
+	(darwin_decode_exception_message): Rename to...
+	(darwin_nat_target::decode_exception_message): ... this.
+	(darwin_nat_target::resume): Pass target to find_inferior_ptid.
+	(darwin_decode_message): Rename to...
+	(darwin_nat_target::decode_message): ... this.
+	(cancel_breakpoint): Rename to...
+	(darwin_nat_target::cancel_breakpoint): ... this.
+	(darwin_wait): Rename to...
+	(darwin_nat_target::wait_1): ... this.  Use range-based for loop
+	instead of iterate_over_inferiors.
+	(darwin_nat_target::wait): Call wait_1 instead of darwin_wait.
+	(darwin_stop_inferior): Rename to...
+	(darwin_nat_target::stop_inferior): ... this.
+	(darwin_nat_target::kill): Call wait_1 instead of darwin_wait.
+	(darwin_init_thread_list): Rename to...
+	(darwin_nat_target::init_thread_list): ... this.
+	(darwin_ptrace_him): Rename to...
+	(darwin_nat_target::ptrace_him): ... this.
+	(darwin_nat_target::create_inferior): Pass lambda function to
+	fork_inferior.
+	(darwin_nat_target::detach): Call stop_inferior instead of
+	darwin_stop_inferior.
+	* fork-inferior.h (fork_inferior): Change init_trace_fun
+	parameter to gdb::function_view.
+	* fork-inferior.c (fork_inferior): Likewise.
+
+2020-01-23  Hannes Domani  <ssbssa@yahoo.de>
+
+	* i386-cygwin-tdep.c (core_process_module_section): Update.
+	* windows-nat.c (struct lm_info_windows): Add text_offset.
+	(windows_xfer_shared_libraries): Update.
+	* windows-tdep.c (windows_xfer_shared_library):
+	Add text_offset_cached argument.
+	* windows-tdep.h (windows_xfer_shared_library): Update.
+
+2020-01-21  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbarch.sh: Add declaration for _initialize_gdbarch.
+
+2020-01-21  Simon Marchi  <simon.marchi@efficios.com>
+
+	* remote-sim.c (check_for_duplicate_sim_descriptor): Remove.
+	(get_sim_inferior_data): Remove use of iterate_over_inferiors,
+	replace with range-based for.
+	(gdbsim_interrupt_inferior): Remove.
+	(gdbsim_target::interrupt): Replace iterate_over_inferiors use
+	with a range-based for.  Inline code from
+	gdbsim_interrupt_inferior.
+
+2020-01-21  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.c (proceed): Fix indentation.
+
+2020-01-21  Tom Tromey  <tromey@adacore.com>
+
+	* source-cache.c (source_cache::ensure): Call ext_lang_colorize.
+	* python/python.c (python_extension_ops): Update.
+	(gdbpy_colorize): New function.
+	* python/lib/gdb/__init__.py (colorize): New function.
+	* extension.h (ext_lang_colorize): Declare.
+	* extension.c (ext_lang_colorize): New function.
+	* extension-priv.h (struct extension_language_ops) <colorize>: New
+	member.
+	* cli/cli-style.c (_initialize_cli_style): Update help text.
+
+2020-01-21  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-tdep.c (struct aarch64_displaced_step_closure)
+	<cond>: Change type to bool.
+	(aarch64_displaced_step_b_cond): Update cond to use bool type.
+	(aarch64_displaced_step_cb): Likewise.
+	(aarch64_displaced_step_tb): Likewise.
+
+2020-01-21  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-tdep.c (aarch64_displaced_step_fixup): Add more debugging
+	output.
+
+2020-01-21  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-tdep.c (struct aarch64_displaced_step_closure )
+	<pc_adjust>: Adjust the documentation.
+	(aarch64_displaced_step_fixup): Check if PC really moved before
+	adjusting it.
+
+2020-01-19  Tom Tromey  <tom@tromey.com>
+
+	* disasm.c (~gdb_disassembler): New destructor.
+	(gdb_buffered_insn_length): Call disassemble_free_target.
+	* disasm.h (class gdb_disassembler): Declare destructor.  Use
+	DISABLE_COPY_AND_ASSIGN.
+
+2020-01-19  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (abbrev_table_up): Move typedef earlier.
+	(die_reader_func_ftype): Remove.
+	(cutu_reader): New class.
+	(dw2_get_file_names_reader): Remove "data" parameter.
+	(dw2_get_file_names): Use cutu_reader.
+	(create_debug_type_hash_table): Update.
+	(read_cutu_die_from_dwo): Update comment.
+	(lookup_dwo_unit): Add dwo_name parameter.
+	(cutu_reader::init_tu_and_read_dwo_dies): Now a method.  Remove
+	die_reader_func_ftype and data parameters.
+	(cutu_reader::cutu_reader): Rename from init_cutu_and_read_dies.
+	Remove die_reader_func_ftype and data parameters.
+	(~cutu_reader): New; from init_cutu_and_read_dies.
+	(cutu_reader::cutu_reader): Rename from
+	init_cutu_and_read_dies_no_follow.  Remove die_reader_func_ftype
+	and data parameters.
+	(init_cutu_and_read_dies_simple): Remove.
+	(struct process_psymtab_comp_unit_data): Remove.
+	(process_psymtab_comp_unit_reader): Remove data parameter; add
+	want_partial_unit and pretend_language parameters.
+	(process_psymtab_comp_unit): Use cutu_reader.
+	(build_type_psymtabs_reader): Remove data parameter.
+	(build_type_psymtabs_1): Use cutu_reader.
+	(process_skeletonless_type_unit): Likewise.
+	(load_partial_comp_unit_reader): Remove.
+	(load_partial_comp_unit): Use cutu_reader.
+	(load_full_comp_unit_reader): Remove.
+	(load_full_comp_unit): Use cutu_reader.
+	(struct create_dwo_cu_data): Remove.
+	(create_dwo_cu_reader): Remove datap parameter; add dwo_file and
+	dwo_unit parameters.
+	(create_cus_hash_table): Use cutu_reader.
+	(struct dwarf2_read_addr_index_data): Remove.
+	(dwarf2_read_addr_index_reader): Remove.
+	(dwarf2_read_addr_index): Use cutu_reader.
+	(read_signatured_type_reader): Remove.
+	(read_signatured_type): Use cutu_reader.
+
+2020-01-19  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui.c (tui_show_assembly): Use tui_suppress_output.
+	* tui/tui-wingeneral.h (class tui_suppress_output): New.
+	(tui_wrefresh): Declare.
+	* tui/tui-wingeneral.c (suppress_output): New global.
+	(tui_suppress_output, ~tui_suppress_output): New constructor and
+	destructor.
+	(tui_wrefresh): New function.
+	(tui_gen_win_info::refresh_window): Use tui_wrefresh.
+	(tui_gen_win_info::make_window): Call wnoutrefresh when needed.
+	* tui/tui-regs.h (struct tui_data_window) <no_refresh>: Declare
+	method.
+	* tui/tui-regs.c (tui_data_window::erase_data_content): Call
+	tui_wrefresh.
+	(tui_data_window::no_refresh): New method.
+	(tui_data_item_window::refresh_window): Call tui_wrefresh.
+	(tui_reg_command): Use tui_suppress_output
+	* tui/tui-layout.c (tui_set_layout): Use tui_suppress_output.
+	* tui/tui-data.h (struct tui_gen_win_info) <no_refresh>: New
+	method.
+	* tui/tui-command.c (tui_refresh_cmd_win): Call tui_wrefresh.
+
+2020-01-19  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-winsource.c (tui_update_source_windows_with_line):
+	Handle case where symtab is null.
+
+2020-01-19  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* linux-fork.c (one_fork_p): Simplify.
+
+2020-01-17  Simon Marchi  <simon.marchi@efficios.com>
+
+	* top.c (struct qt_args): Remove.
+	(kill_or_detach): Change return type to void, replace `void *`
+	parameter with a proper one.
+	(print_inferior_quit_action):  Likewise.
+	(quit_confirm): Use range-based for loop to iterate over inferiors.
+	(quit_force): Likewise.
+
+2020-01-17  Simon Marchi  <simon.marchi@efficios.com>
+
+	* mi/mi-main.c (run_one_inferior): Change return type to void, replace
+	`void *` parameter with proper parameters.
+	(mi_cmd_exec_run): Use range-based loop to iterate over inferiors.
+	(print_one_inferior): Change return type to void, replace `void *`
+	parameter with proper parameters.
+	(mi_cmd_list_thread_groups): Use range-based loop to iterate over
+	inferiors.
+	(get_other_inferior): Remove.
+	(mi_cmd_remove_inferior): Use range-based loop to iterate over
+	inferiors.
+
+2020-01-17  Simon Marchi  <simon.marchi@efficios.com>
+
+	* mi/mi-interp.c (report_initial_inferior): Remove.
+	(mi_interp::init): Use range-based for to iterate over inferiors.
+
+2020-01-17  Simon Marchi  <simon.marchi@efficios.com>
+
+	* python/py-inferior.c (build_inferior_list): Remove.
+	(gdbpy_ref): Use range-based for loop to iterate over inferiors.
+
+2020-01-16  Christian Biesinger  <cbiesinger@google.com>
+
+	* btrace.c (btrace_compute_ftrace_1): Fix spelling error (Unkown).
+	(btrace_stitch_trace): Likewise.
+	* charset.c (intermediate_encoding): Likewise (vaild).
+	* nat/linux-btrace.c (linux_read_pt): Likewise (Unkown).
+	* python/py-record-btrace.c (struct PyMethodDef): Likewise (occurences).
+	* record-btrace.c (record_btrace_print_conf): Likewise (unkown).
+
+2020-01-16  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-tdep.c (windows_get_tlb_type):
+	Add rtl_user_process_parameters type.
+
+2020-01-16  Pedro Alves  <palves@redhat.com>
+	    Norbert Lange  <nolange79@gmail.com>
+
+	PR build/24805
+	* gdbsupport/gdb_proc_service.h (PS_EXPORT): New.
+	(ps_get_thread_area, ps_getpid, ps_lcontinue, ps_lgetfpregs)
+	(ps_lgetregs, ps_lsetfpregs, ps_lsetregs, ps_lstop, ps_pcontinue)
+	(ps_pdread, ps_pdwrite, ps_pglobal_lookup, ps_pstop, ps_ptread)
+	(ps_ptwrite, ps_lgetxregs, ps_lgetxregsize, ps_lsetxregs)
+	(ps_plog): Redeclare exported functions with default visibility.
+
+2020-01-16  Nitika Achra  <Nitika.Achra@amd.com>
+
+	* dwarf2loc.c (decode_debug_loclists_addresses): Handle
+	DW_LLE_base_addressx, DW_LLE_startx_length, DW_LLE_start_length.
+
+2020-01-15  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infcmd.c (post_create_inferior): Use get_thread_regcache
+	instead of get_current_regcache.
+
+2020-01-14  Tom Tromey  <tom@tromey.com>
+
+	PR symtab/12535:
+	* python/python.c (gdbpy_decode_line): Treat empty string the same
+	as no argument.
+
+2020-01-14  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in (CLIBS): Remove second use of $(LIBIBERTY).
+
+2020-01-14  Tom Tromey  <tom@tromey.com>
+
+	* nat/linux-btrace.c: Don't include <config.h>.
+	* nat/linux-ptrace.c: Don't include <config.h>.
+	* nat/x86-linux-dregs.c: Don't include <config.h>.
+
+2020-01-14  Tom Tromey  <tom@tromey.com>
+
+	* configure: Rebuild.
+	* configure.ac: Move many checks to ../gdbsupport/common.m4.
+
+2020-01-14  Tom Tromey  <tom@tromey.com>
+
+	* nat/x86-linux-dregs.c: Include configh.h.
+	* nat/linux-ptrace.c: Include configh.h.
+	* nat/linux-btrace.c: Include configh.h.
+	* defs.h: Include config.h, bfd.h.
+	* configure.ac: Don't source common.host.
+	(CONFIG_OBS, CONFIG_SRCS): Remove gdbsupport files.
+	* configure: Rebuild.
+	* acinclude.m4: Update path.
+	* Makefile.in (SUPPORT, LIBSUPPORT, INCSUPPORT): New variables.
+	(CONFIG_SRC_SUBDIR): Remove gdbsupport.
+	(INTERNAL_CFLAGS_BASE): Add INCSUPPORT.
+	(CLIBS): Add LIBSUPPORT.
+	(CDEPS): Likewise.
+	(COMMON_SFILES): Remove gdbsupport files.
+	(HFILES_NO_SRCDIR): Likewise.
+	(stamp-version): Update path to create-version.sh.
+	(ALLDEPFILES): Remove gdbsupport files.
+
+2020-01-14  Tom Tromey  <tom@tromey.com>
+
+	* gdbsupport/common.m4 (GDB_AC_COMMON): Define WIN32APILIBS and
+	USE_WIN32API when needed.
+	* configure.ac (USE_WIN32API): Don't define.
+	(WIN32LIBS): Use WIN32APILIBS.
+	* configure: Rebuild.
+
+2020-01-14  Tom Tromey  <tom@tromey.com>
+
+	* configure: Rebuild.
+	* gdbsupport/common.m4 (GDB_AC_COMMON): Fix indentation.
+
+2020-01-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* skip.c (skip_function_command): Make skip w/o arguments use the
+	name of the inlined function if pc is inside any inlined function.
+
+2020-01-14  Luis Machado  <luis.machado@linaro.org>
+
+	* inf-ptrace.c (inf_ptrace_target::resume): Update comments.
+	* infrun.c (resume_1): Likewise.
+	(handle_inferior_event): Remove stale comment.
+	* linux-nat.c (linux_nat_target::resume): Update comments.
+	(save_stop_reason): Likewise.
+	(linux_nat_filter_event): Likewise.
+	* linux-nat.h (struct lwp_info) <stop_pc>, <stop_reason>: Likewise.
+
+2020-01-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* elfread.c (record_minimal_symbol): Set section index to 0 for
+	non-allocatable sections.
+
+
+2020-01-13  Ali Tamur <tamur@google.com>
+
+	* dwarf2read.c (dwarf2_debug_sections): Add debug_str_offsets sections.
+	(dwarf2_cu): Add str_offsets_base field.  Change the type of addr_base
+	to gdb::optional.  Update comments.
+	(dwo_file): Update comments.
+	(read_attribute): Update API to take an additional out parameter,
+	need_reprocess.  This is used to mark attributes that need other
+	attributes (e.g. str_offsets_base) for correct computation which may not
+	have been read yet.
+	(read_attribute_reprocess): New function declaration.
+	(read_addr_index): Likewise.
+	(read_dwo_str_index): Likewise.
+	(read_stub_str_index): Likewise.
+	(dwarf2_per_objfile::locate_sections): Handle debug_str_offsets section.
+	(lookup_addr_base): New function definition.
+	(lookup_ranges_base): Likewise.
+	(read_cutu_die_from_dwo): Use the new functions: lookup_addr_base,
+	lookup_ranges_base.
+	(init_cutu_and_read_dies): Update comments.
+	(init_cutu_and_read_dies_no_follow): Change API to take parent compile
+	unit.  This is used to inherit parent's str_offsets_base and addr_base.
+	Update comments.
+	(init_cutu_and_read_dies_simple): Reflect API changes.
+	(skip_one_die): Reflect API changes.  Handle DW_FORM_rnglistx.
+	(create_cus_hash_table): Change API to take parent compile unit.  
+	Reflect API changes.
+	(open_and_init_dwo_file): Reflect API changes.
+	(dwarf2_get_pc_bounds): Update comments.
+	(dwarf2_record_block_ranges): Likewise.
+	(read_full_die_1): Change implementation to reprocess attributes that
+	need str_offsets_base and addr_base.
+	(partial_die_info::read): Likewise.
+	(read_attribute_reprocess): New function definition.
+	(read_attribute_value): Change API to take an additional out parameter,
+	need_reprocess.  Handle DW_FORM_rnglistx.  No longer trigger an error
+	when a non-dwo compile unit has index based attributes.
+	(read_attribute): Reflect API changes.
+	(read_addr_index_1): Reflect API changes.  Update comments.
+	(dwarf2_read_addr_index_data): Reflect API changes.
+	(dwarf2_read_addr_index): Likewise.
+	(read_str_index): Change API and implementation.  This becomes a helper
+	to be used by the new string index related methods.  Update error
+	message and comments.
+	(read_dwo_str_index): New function definition.
+	(read_stub_str_index): Likewise.
+	* dwarf2read.h (dwarf2_per_objfile): Add str_offsets field.
+	* symfile.h (dwarf2_debug_sections): Likewise.
+	* xcoffread.c (dwarf2_debug_sections): Likewise.
+
+2020-01-13  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbcore.h (struct core_fns) <core_read_registers>: Change
+	core_reg_sect type to gdb_byte *.
+	* arm-nbsd-nat.c (fetch_elfcore_registers): Likewise.
+	* cris-tdep.c (fetch_core_registers): Likewise.
+	* corelow.c (core_target::get_core_register_section): Change
+	type of `contents` to gdb::byte_vector.
+
+2020-01-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui/tui-wingeneral.c (box_win): Position the title in the center
+	of the border.
+
+2020-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* corelow.c (core_target::get_core_register_section): Use
+	  std::vector instead of alloca.
+
+2020-01-13  Simon Marchi  <simon.marchi@efficios.com>
+
+	* warning.m4: Add -Wmissing-declarations to build_warnings.
+	* configure: Re-generate.
+
+2020-01-13  Simon Marchi  <simon.marchi@efficios.com>
+
+	* python/python.c (init__gdb_module): Add declaration.
+
+2020-01-13  Simon Marchi  <simon.marchi@efficios.com>
+
+	* aarch64-fbsd-nat.c (_initialize_aarch64_fbsd_nat): Add declaration.
+	* aarch64-fbsd-tdep.c (_initialize_aarch64_fbsd_tdep): Add declaration.
+	* aarch64-linux-nat.c (_initialize_aarch64_linux_nat): Add declaration.
+	* aarch64-linux-tdep.c (_initialize_aarch64_linux_tdep): Add declaration.
+	* aarch64-newlib-tdep.c (_initialize_aarch64_newlib_tdep): Add declaration.
+	* aarch64-tdep.c (_initialize_aarch64_tdep): Add declaration.
+	* ada-exp.y (_initialize_ada_exp): Add declaration.
+	* ada-lang.c (_initialize_ada_language): Add declaration.
+	* ada-tasks.c (_initialize_tasks): Add declaration.
+	* agent.c (_initialize_agent): Add declaration.
+	* aix-thread.c (_initialize_aix_thread): Add declaration.
+	* alpha-bsd-nat.c (_initialize_alphabsd_nat): Add declaration.
+	* alpha-linux-nat.c (_initialize_alpha_linux_nat): Add declaration.
+	* alpha-linux-tdep.c (_initialize_alpha_linux_tdep): Add declaration.
+	* alpha-nbsd-tdep.c (_initialize_alphanbsd_tdep): Add declaration.
+	* alpha-obsd-tdep.c (_initialize_alphaobsd_tdep): Add declaration.
+	* alpha-tdep.c (_initialize_alpha_tdep): Add declaration.
+	* amd64-darwin-tdep.c (_initialize_amd64_darwin_tdep): Add declaration.
+	* amd64-dicos-tdep.c (_initialize_amd64_dicos_tdep): Add declaration.
+	* amd64-fbsd-nat.c (_initialize_amd64fbsd_nat): Add declaration.
+	* amd64-fbsd-tdep.c (_initialize_amd64fbsd_tdep): Add declaration.
+	* amd64-linux-nat.c (_initialize_amd64_linux_nat): Add declaration.
+	* amd64-linux-tdep.c (_initialize_amd64_linux_tdep): Add declaration.
+	* amd64-nbsd-nat.c (_initialize_amd64nbsd_nat): Add declaration.
+	* amd64-nbsd-tdep.c (_initialize_amd64nbsd_tdep): Add declaration.
+	* amd64-obsd-nat.c (_initialize_amd64obsd_nat): Add declaration.
+	* amd64-obsd-tdep.c (_initialize_amd64obsd_tdep): Add declaration.
+	* amd64-sol2-tdep.c (_initialize_amd64_sol2_tdep): Add declaration.
+	* amd64-tdep.c (_initialize_amd64_tdep): Add declaration.
+	* amd64-windows-nat.c (_initialize_amd64_windows_nat): Add declaration.
+	* amd64-windows-tdep.c (_initialize_amd64_windows_tdep): Add declaration.
+	* annotate.c (_initialize_annotate): Add declaration.
+	* arc-newlib-tdep.c (_initialize_arc_newlib_tdep): Add declaration.
+	* arc-tdep.c (_initialize_arc_tdep): Add declaration.
+	* arch-utils.c (_initialize_gdbarch_utils): Add declaration.
+	* arm-fbsd-nat.c (_initialize_arm_fbsd_nat): Add declaration.
+	* arm-fbsd-tdep.c (_initialize_arm_fbsd_tdep): Add declaration.
+	* arm-linux-nat.c (_initialize_arm_linux_nat): Add declaration.
+	* arm-linux-tdep.c (_initialize_arm_linux_tdep): Add declaration.
+	* arm-nbsd-nat.c (_initialize_arm_netbsd_nat): Add declaration.
+	* arm-nbsd-tdep.c (_initialize_arm_netbsd_tdep): Add declaration.
+	* arm-obsd-tdep.c (_initialize_armobsd_tdep): Add declaration.
+	* arm-pikeos-tdep.c (_initialize_arm_pikeos_tdep): Add declaration.
+	* arm-symbian-tdep.c (_initialize_arm_symbian_tdep): Add declaration.
+	* arm-tdep.c (_initialize_arm_tdep): Add declaration.
+	* arm-wince-tdep.c (_initialize_arm_wince_tdep): Add declaration.
+	* auto-load.c (_initialize_auto_load): Add declaration.
+	* auxv.c (_initialize_auxv): Add declaration.
+	* avr-tdep.c (_initialize_avr_tdep): Add declaration.
+	* ax-gdb.c (_initialize_ax_gdb): Add declaration.
+	* bfin-linux-tdep.c (_initialize_bfin_linux_tdep): Add declaration.
+	* bfin-tdep.c (_initialize_bfin_tdep): Add declaration.
+	* break-catch-sig.c (_initialize_break_catch_sig): Add declaration.
+	* break-catch-syscall.c (_initialize_break_catch_syscall): Add declaration.
+	* break-catch-throw.c (_initialize_break_catch_throw): Add declaration.
+	* breakpoint.c (_initialize_breakpoint): Add declaration.
+	* bsd-uthread.c (_initialize_bsd_uthread): Add declaration.
+	* btrace.c (_initialize_btrace): Add declaration.
+	* charset.c (_initialize_charset): Add declaration.
+	* cli/cli-cmds.c (_initialize_cli_cmds): Add declaration.
+	* cli/cli-dump.c (_initialize_cli_dump): Add declaration.
+	* cli/cli-interp.c (_initialize_cli_interp): Add declaration.
+	* cli/cli-logging.c (_initialize_cli_logging): Add declaration.
+	* cli/cli-script.c (_initialize_cli_script): Add declaration.
+	* cli/cli-style.c (_initialize_cli_style): Add declaration.
+	* coff-pe-read.c (_initialize_coff_pe_read): Add declaration.
+	* coffread.c (_initialize_coffread): Add declaration.
+	* compile/compile-cplus-types.c (_initialize_compile_cplus_types): Add declaration.
+	* compile/compile.c (_initialize_compile): Add declaration.
+	* complaints.c (_initialize_complaints): Add declaration.
+	* completer.c (_initialize_completer): Add declaration.
+	* copying.c (_initialize_copying): Add declaration.
+	* corefile.c (_initialize_core): Add declaration.
+	* corelow.c (_initialize_corelow): Add declaration.
+	* cp-abi.c (_initialize_cp_abi): Add declaration.
+	* cp-namespace.c (_initialize_cp_namespace): Add declaration.
+	* cp-support.c (_initialize_cp_support): Add declaration.
+	* cp-valprint.c (_initialize_cp_valprint): Add declaration.
+	* cris-linux-tdep.c (_initialize_cris_linux_tdep): Add declaration.
+	* cris-tdep.c (_initialize_cris_tdep): Add declaration.
+	* csky-linux-tdep.c (_initialize_csky_linux_tdep): Add declaration.
+	* csky-tdep.c (_initialize_csky_tdep): Add declaration.
+	* ctfread.c (_initialize_ctfread): Add declaration.
+	* d-lang.c (_initialize_d_language): Add declaration.
+	* darwin-nat-info.c (_initialize_darwin_info_commands): Add declaration.
+	* darwin-nat.c (_initialize_darwin_nat): Add declaration.
+	* dbxread.c (_initialize_dbxread): Add declaration.
+	* dcache.c (_initialize_dcache): Add declaration.
+	* disasm-selftests.c (_initialize_disasm_selftests): Add declaration.
+	* disasm.c (_initialize_disasm): Add declaration.
+	* dtrace-probe.c (_initialize_dtrace_probe): Add declaration.
+	* dummy-frame.c (_initialize_dummy_frame): Add declaration.
+	* dwarf-index-cache.c (_initialize_index_cache): Add declaration.
+	* dwarf-index-write.c (_initialize_dwarf_index_write): Add declaration.
+	* dwarf2-frame-tailcall.c (_initialize_tailcall_frame): Add declaration.
+	* dwarf2-frame.c (_initialize_dwarf2_frame): Add declaration.
+	* dwarf2expr.c (_initialize_dwarf2expr): Add declaration.
+	* dwarf2loc.c (_initialize_dwarf2loc): Add declaration.
+	* dwarf2read.c (_initialize_dwarf2_read): Add declaration.
+	* elfread.c (_initialize_elfread): Add declaration.
+	* exec.c (_initialize_exec): Add declaration.
+	* extension.c (_initialize_extension): Add declaration.
+	* f-lang.c (_initialize_f_language): Add declaration.
+	* f-valprint.c (_initialize_f_valprint): Add declaration.
+	* fbsd-nat.c (_initialize_fbsd_nat): Add declaration.
+	* fbsd-tdep.c (_initialize_fbsd_tdep): Add declaration.
+	* filesystem.c (_initialize_filesystem): Add declaration.
+	* findcmd.c (_initialize_mem_search): Add declaration.
+	* findvar.c (_initialize_findvar): Add declaration.
+	* fork-child.c (_initialize_fork_child): Add declaration.
+	* frame-base.c (_initialize_frame_base): Add declaration.
+	* frame-unwind.c (_initialize_frame_unwind): Add declaration.
+	* frame.c (_initialize_frame): Add declaration.
+	* frv-linux-tdep.c (_initialize_frv_linux_tdep): Add declaration.
+	* frv-tdep.c (_initialize_frv_tdep): Add declaration.
+	* ft32-tdep.c (_initialize_ft32_tdep): Add declaration.
+	* gcore.c (_initialize_gcore): Add declaration.
+	* gdb-demangle.c (_initialize_gdb_demangle): Add declaration.
+	* gdb_bfd.c (_initialize_gdb_bfd): Add declaration.
+	* gdbarch-selftests.c (_initialize_gdbarch_selftests): Add declaration.
+	* gdbarch.c (_initialize_gdbarch): Add declaration.
+	* gdbtypes.c (_initialize_gdbtypes): Add declaration.
+	* gnu-nat.c (_initialize_gnu_nat): Add declaration.
+	* gnu-v2-abi.c (_initialize_gnu_v2_abi): Add declaration.
+	* gnu-v3-abi.c (_initialize_gnu_v3_abi): Add declaration.
+	* go-lang.c (_initialize_go_language): Add declaration.
+	* go32-nat.c (_initialize_go32_nat): Add declaration.
+	* guile/guile.c (_initialize_guile): Add declaration.
+	* h8300-tdep.c (_initialize_h8300_tdep): Add declaration.
+	* hppa-linux-nat.c (_initialize_hppa_linux_nat): Add declaration.
+	* hppa-linux-tdep.c (_initialize_hppa_linux_tdep): Add declaration.
+	* hppa-nbsd-nat.c (_initialize_hppanbsd_nat): Add declaration.
+	* hppa-nbsd-tdep.c (_initialize_hppanbsd_tdep): Add declaration.
+	* hppa-obsd-nat.c (_initialize_hppaobsd_nat): Add declaration.
+	* hppa-obsd-tdep.c (_initialize_hppabsd_tdep): Add declaration.
+	* hppa-tdep.c (_initialize_hppa_tdep): Add declaration.
+	* i386-bsd-nat.c (_initialize_i386bsd_nat): Add declaration.
+	* i386-cygwin-tdep.c (_initialize_i386_cygwin_tdep): Add declaration.
+	* i386-darwin-nat.c (_initialize_i386_darwin_nat): Add declaration.
+	* i386-darwin-tdep.c (_initialize_i386_darwin_tdep): Add declaration.
+	* i386-dicos-tdep.c (_initialize_i386_dicos_tdep): Add declaration.
+	* i386-fbsd-nat.c (_initialize_i386fbsd_nat): Add declaration.
+	* i386-fbsd-tdep.c (_initialize_i386fbsd_tdep): Add declaration.
+	* i386-gnu-nat.c (_initialize_i386gnu_nat): Add declaration.
+	* i386-gnu-tdep.c (_initialize_i386gnu_tdep): Add declaration.
+	* i386-go32-tdep.c (_initialize_i386_go32_tdep): Add declaration.
+	* i386-linux-nat.c (_initialize_i386_linux_nat): Add declaration.
+	* i386-linux-tdep.c (_initialize_i386_linux_tdep): Add declaration.
+	* i386-nbsd-nat.c (_initialize_i386nbsd_nat): Add declaration.
+	* i386-nbsd-tdep.c (_initialize_i386nbsd_tdep): Add declaration.
+	* i386-nto-tdep.c (_initialize_i386nto_tdep): Add declaration.
+	* i386-obsd-nat.c (_initialize_i386obsd_nat): Add declaration.
+	* i386-obsd-tdep.c (_initialize_i386obsd_tdep): Add declaration.
+	* i386-sol2-nat.c (_initialize_amd64_sol2_nat): Add declaration.
+	* i386-sol2-tdep.c (_initialize_i386_sol2_tdep): Add declaration.
+	* i386-tdep.c (_initialize_i386_tdep): Add declaration.
+	* i386-windows-nat.c (_initialize_i386_windows_nat): Add declaration.
+	* ia64-libunwind-tdep.c (_initialize_libunwind_frame): Add declaration.
+	* ia64-linux-nat.c (_initialize_ia64_linux_nat): Add declaration.
+	* ia64-linux-tdep.c (_initialize_ia64_linux_tdep): Add declaration.
+	* ia64-tdep.c (_initialize_ia64_tdep): Add declaration.
+	* ia64-vms-tdep.c (_initialize_ia64_vms_tdep): Add declaration.
+	* infcall.c (_initialize_infcall): Add declaration.
+	* infcmd.c (_initialize_infcmd): Add declaration.
+	* inflow.c (_initialize_inflow): Add declaration.
+	* infrun.c (_initialize_infrun): Add declaration.
+	* interps.c (_initialize_interpreter): Add declaration.
+	* iq2000-tdep.c (_initialize_iq2000_tdep): Add declaration.
+	* jit.c (_initialize_jit): Add declaration.
+	* language.c (_initialize_language): Add declaration.
+	* linux-fork.c (_initialize_linux_fork): Add declaration.
+	* linux-nat.c (_initialize_linux_nat): Add declaration.
+	* linux-tdep.c (_initialize_linux_tdep): Add declaration.
+	* linux-thread-db.c (_initialize_thread_db): Add declaration.
+	* lm32-tdep.c (_initialize_lm32_tdep): Add declaration.
+	* m2-lang.c (_initialize_m2_language): Add declaration.
+	* m32c-tdep.c (_initialize_m32c_tdep): Add declaration.
+	* m32r-linux-nat.c (_initialize_m32r_linux_nat): Add declaration.
+	* m32r-linux-tdep.c (_initialize_m32r_linux_tdep): Add declaration.
+	* m32r-tdep.c (_initialize_m32r_tdep): Add declaration.
+	* m68hc11-tdep.c (_initialize_m68hc11_tdep): Add declaration.
+	* m68k-bsd-nat.c (_initialize_m68kbsd_nat): Add declaration.
+	* m68k-bsd-tdep.c (_initialize_m68kbsd_tdep): Add declaration.
+	* m68k-linux-nat.c (_initialize_m68k_linux_nat): Add declaration.
+	* m68k-linux-tdep.c (_initialize_m68k_linux_tdep): Add declaration.
+	* m68k-tdep.c (_initialize_m68k_tdep): Add declaration.
+	* machoread.c (_initialize_machoread): Add declaration.
+	* macrocmd.c (_initialize_macrocmd): Add declaration.
+	* macroscope.c (_initialize_macroscope): Add declaration.
+	* maint-test-options.c (_initialize_maint_test_options): Add declaration.
+	* maint-test-settings.c (_initialize_maint_test_settings): Add declaration.
+	* maint.c (_initialize_maint_cmds): Add declaration.
+	* mdebugread.c (_initialize_mdebugread): Add declaration.
+	* memattr.c (_initialize_mem): Add declaration.
+	* mep-tdep.c (_initialize_mep_tdep): Add declaration.
+	* mi/mi-cmd-env.c (_initialize_mi_cmd_env): Add declaration.
+	* mi/mi-cmds.c (_initialize_mi_cmds): Add declaration.
+	* mi/mi-interp.c (_initialize_mi_interp): Add declaration.
+	* mi/mi-main.c (_initialize_mi_main): Add declaration.
+	* microblaze-linux-tdep.c (_initialize_microblaze_linux_tdep): Add declaration.
+	* microblaze-tdep.c (_initialize_microblaze_tdep): Add declaration.
+	* mips-fbsd-nat.c (_initialize_mips_fbsd_nat): Add declaration.
+	* mips-fbsd-tdep.c (_initialize_mips_fbsd_tdep): Add declaration.
+	* mips-linux-nat.c (_initialize_mips_linux_nat): Add declaration.
+	* mips-linux-tdep.c (_initialize_mips_linux_tdep): Add declaration.
+	* mips-nbsd-nat.c (_initialize_mipsnbsd_nat): Add declaration.
+	* mips-nbsd-tdep.c (_initialize_mipsnbsd_tdep): Add declaration.
+	* mips-sde-tdep.c (_initialize_mips_sde_tdep): Add declaration.
+	* mips-tdep.c (_initialize_mips_tdep): Add declaration.
+	* mips64-obsd-nat.c (_initialize_mips64obsd_nat): Add declaration.
+	* mips64-obsd-tdep.c (_initialize_mips64obsd_tdep): Add declaration.
+	* mipsread.c (_initialize_mipsread): Add declaration.
+	* mn10300-linux-tdep.c (_initialize_mn10300_linux_tdep): Add declaration.
+	* mn10300-tdep.c (_initialize_mn10300_tdep): Add declaration.
+	* moxie-tdep.c (_initialize_moxie_tdep): Add declaration.
+	* msp430-tdep.c (_initialize_msp430_tdep): Add declaration.
+	* nds32-tdep.c (_initialize_nds32_tdep): Add declaration.
+	* nios2-linux-tdep.c (_initialize_nios2_linux_tdep): Add declaration.
+	* nios2-tdep.c (_initialize_nios2_tdep): Add declaration.
+	* nto-procfs.c (_initialize_procfs): Add declaration.
+	* objc-lang.c (_initialize_objc_language): Add declaration.
+	* observable.c (_initialize_observer): Add declaration.
+	* opencl-lang.c (_initialize_opencl_language): Add declaration.
+	* or1k-linux-tdep.c (_initialize_or1k_linux_tdep): Add declaration.
+	* or1k-tdep.c (_initialize_or1k_tdep): Add declaration.
+	* osabi.c (_initialize_gdb_osabi): Add declaration.
+	* osdata.c (_initialize_osdata): Add declaration.
+	* p-valprint.c (_initialize_pascal_valprint): Add declaration.
+	* parse.c (_initialize_parse): Add declaration.
+	* ppc-fbsd-nat.c (_initialize_ppcfbsd_nat): Add declaration.
+	* ppc-fbsd-tdep.c (_initialize_ppcfbsd_tdep): Add declaration.
+	* ppc-linux-nat.c (_initialize_ppc_linux_nat): Add declaration.
+	* ppc-linux-tdep.c (_initialize_ppc_linux_tdep): Add declaration.
+	* ppc-nbsd-nat.c (_initialize_ppcnbsd_nat): Add declaration.
+	* ppc-nbsd-tdep.c (_initialize_ppcnbsd_tdep): Add declaration.
+	* ppc-obsd-nat.c (_initialize_ppcobsd_nat): Add declaration.
+	* ppc-obsd-tdep.c (_initialize_ppcobsd_tdep): Add declaration.
+	* printcmd.c (_initialize_printcmd): Add declaration.
+	* probe.c (_initialize_probe): Add declaration.
+	* proc-api.c (_initialize_proc_api): Add declaration.
+	* proc-events.c (_initialize_proc_events): Add declaration.
+	* proc-service.c (_initialize_proc_service): Add declaration.
+	* procfs.c (_initialize_procfs): Add declaration.
+	* producer.c (_initialize_producer): Add declaration.
+	* psymtab.c (_initialize_psymtab): Add declaration.
+	* python/python.c (_initialize_python): Add declaration.
+	* ravenscar-thread.c (_initialize_ravenscar): Add declaration.
+	* record-btrace.c (_initialize_record_btrace): Add declaration.
+	* record-full.c (_initialize_record_full): Add declaration.
+	* record.c (_initialize_record): Add declaration.
+	* regcache-dump.c (_initialize_regcache_dump): Add declaration.
+	* regcache.c (_initialize_regcache): Add declaration.
+	* reggroups.c (_initialize_reggroup): Add declaration.
+	* remote-notif.c (_initialize_notif): Add declaration.
+	* remote-sim.c (_initialize_remote_sim): Add declaration.
+	* remote.c (_initialize_remote): Add declaration.
+	* reverse.c (_initialize_reverse): Add declaration.
+	* riscv-fbsd-nat.c (_initialize_riscv_fbsd_nat): Add declaration.
+	* riscv-fbsd-tdep.c (_initialize_riscv_fbsd_tdep): Add declaration.
+	* riscv-linux-nat.c (_initialize_riscv_linux_nat): Add declaration.
+	* riscv-linux-tdep.c (_initialize_riscv_linux_tdep): Add declaration.
+	* riscv-tdep.c (_initialize_riscv_tdep): Add declaration.
+	* rl78-tdep.c (_initialize_rl78_tdep): Add declaration.
+	* rs6000-aix-tdep.c (_initialize_rs6000_aix_tdep): Add declaration.
+	* rs6000-lynx178-tdep.c (_initialize_rs6000_lynx178_tdep):
+	Add declaration.
+	* rs6000-nat.c (_initialize_rs6000_nat): Add declaration.
+	* rs6000-tdep.c (_initialize_rs6000_tdep): Add declaration.
+	* run-on-main-thread.c (_initialize_run_on_main_thread): Add declaration.
+	* rust-exp.y (_initialize_rust_exp): Add declaration.
+	* rx-tdep.c (_initialize_rx_tdep): Add declaration.
+	* s12z-tdep.c (_initialize_s12z_tdep): Add declaration.
+	* s390-linux-nat.c (_initialize_s390_nat): Add declaration.
+	* s390-linux-tdep.c (_initialize_s390_linux_tdep): Add declaration.
+	* s390-tdep.c (_initialize_s390_tdep): Add declaration.
+	* score-tdep.c (_initialize_score_tdep): Add declaration.
+	* ser-go32.c (_initialize_ser_dos): Add declaration.
+	* ser-mingw.c (_initialize_ser_windows): Add declaration.
+	* ser-pipe.c (_initialize_ser_pipe): Add declaration.
+	* ser-tcp.c (_initialize_ser_tcp): Add declaration.
+	* ser-uds.c (_initialize_ser_socket): Add declaration.
+	* ser-unix.c (_initialize_ser_hardwire): Add declaration.
+	* serial.c (_initialize_serial): Add declaration.
+	* sh-linux-tdep.c (_initialize_sh_linux_tdep): Add declaration.
+	* sh-nbsd-nat.c (_initialize_shnbsd_nat): Add declaration.
+	* sh-nbsd-tdep.c (_initialize_shnbsd_tdep): Add declaration.
+	* sh-tdep.c (_initialize_sh_tdep): Add declaration.
+	* skip.c (_initialize_step_skip): Add declaration.
+	* sol-thread.c (_initialize_sol_thread): Add declaration.
+	* solib-aix.c (_initialize_solib_aix): Add declaration.
+	* solib-darwin.c (_initialize_darwin_solib): Add declaration.
+	* solib-dsbt.c (_initialize_dsbt_solib): Add declaration.
+	* solib-frv.c (_initialize_frv_solib): Add declaration.
+	* solib-svr4.c (_initialize_svr4_solib): Add declaration.
+	* solib-target.c (_initialize_solib_target): Add declaration.
+	* solib.c (_initialize_solib): Add declaration.
+	* source-cache.c (_initialize_source_cache): Add declaration.
+	* source.c (_initialize_source): Add declaration.
+	* sparc-linux-nat.c (_initialize_sparc_linux_nat): Add declaration.
+	* sparc-linux-tdep.c (_initialize_sparc_linux_tdep): Add declaration.
+	* sparc-nat.c (_initialize_sparc_nat): Add declaration.
+	* sparc-nbsd-nat.c (_initialize_sparcnbsd_nat): Add declaration.
+	* sparc-nbsd-tdep.c (_initialize_sparcnbsd_tdep): Add declaration.
+	* sparc-obsd-tdep.c (_initialize_sparc32obsd_tdep): Add declaration.
+	* sparc-sol2-tdep.c (_initialize_sparc_sol2_tdep): Add declaration.
+	* sparc-tdep.c (_initialize_sparc_tdep): Add declaration.
+	* sparc64-fbsd-nat.c (_initialize_sparc64fbsd_nat): Add declaration.
+	* sparc64-fbsd-tdep.c (_initialize_sparc64fbsd_tdep): Add declaration.
+	* sparc64-linux-nat.c (_initialize_sparc64_linux_nat): Add declaration.
+	* sparc64-linux-tdep.c (_initialize_sparc64_linux_tdep): Add declaration.
+	* sparc64-nat.c (_initialize_sparc64_nat): Add declaration.
+	* sparc64-nbsd-nat.c (_initialize_sparc64nbsd_nat): Add declaration.
+	* sparc64-nbsd-tdep.c (_initialize_sparc64nbsd_tdep): Add declaration.
+	* sparc64-obsd-nat.c (_initialize_sparc64obsd_nat): Add declaration.
+	* sparc64-obsd-tdep.c (_initialize_sparc64obsd_tdep): Add declaration.
+	* sparc64-sol2-tdep.c (_initialize_sparc64_sol2_tdep): Add declaration.
+	* sparc64-tdep.c (_initialize_sparc64_adi_tdep): Add declaration.
+	* stabsread.c (_initialize_stabsread): Add declaration.
+	* stack.c (_initialize_stack): Add declaration.
+	* stap-probe.c (_initialize_stap_probe): Add declaration.
+	* std-regs.c (_initialize_frame_reg): Add declaration.
+	* symfile-debug.c (_initialize_symfile_debug): Add declaration.
+	* symfile-mem.c (_initialize_symfile_mem): Add declaration.
+	* symfile.c (_initialize_symfile): Add declaration.
+	* symmisc.c (_initialize_symmisc): Add declaration.
+	* symtab.c (_initialize_symtab): Add declaration.
+	* target.c (_initialize_target): Add declaration.
+	* target-connection.c (_initialize_target_connection): Add
+	declaration.
+	* target-dcache.c (_initialize_target_dcache): Add declaration.
+	* target-descriptions.c (_initialize_target_descriptions): Add declaration.
+	* thread.c (_initialize_thread): Add declaration.
+	* tic6x-linux-tdep.c (_initialize_tic6x_linux_tdep): Add declaration.
+	* tic6x-tdep.c (_initialize_tic6x_tdep): Add declaration.
+	* tilegx-linux-nat.c (_initialize_tile_linux_nat): Add declaration.
+	* tilegx-linux-tdep.c (_initialize_tilegx_linux_tdep): Add declaration.
+	* tilegx-tdep.c (_initialize_tilegx_tdep): Add declaration.
+	* tracectf.c (_initialize_ctf): Add declaration.
+	* tracefile-tfile.c (_initialize_tracefile_tfile): Add declaration.
+	* tracefile.c (_initialize_tracefile): Add declaration.
+	* tracepoint.c (_initialize_tracepoint): Add declaration.
+	* tui/tui-hooks.c (_initialize_tui_hooks): Add declaration.
+	* tui/tui-interp.c (_initialize_tui_interp): Add declaration.
+	* tui/tui-layout.c (_initialize_tui_layout): Add declaration.
+	* tui/tui-regs.c (_initialize_tui_regs): Add declaration.
+	* tui/tui-stack.c (_initialize_tui_stack): Add declaration.
+	* tui/tui-win.c (_initialize_tui_win): Add declaration.
+	* tui/tui.c (_initialize_tui): Add declaration.
+	* typeprint.c (_initialize_typeprint): Add declaration.
+	* ui-style.c (_initialize_ui_style): Add declaration.
+	* unittests/array-view-selftests.c (_initialize_array_view_selftests): Add declaration.
+	* unittests/child-path-selftests.c (_initialize_child_path_selftests): Add declaration.
+	* unittests/cli-utils-selftests.c (_initialize_cli_utils_selftests): Add declaration.
+	* unittests/common-utils-selftests.c (_initialize_common_utils_selftests): Add declaration.
+	* unittests/copy_bitwise-selftests.c (_initialize_copy_bitwise_utils_selftests): Add declaration.
+	* unittests/environ-selftests.c (_initialize_environ_selftests): Add declaration.
+	* unittests/filtered_iterator-selftests.c
+	(_initialize_filtered_iterator_selftests): Add declaration.
+	* unittests/format_pieces-selftests.c (_initialize_format_pieces_selftests): Add declaration.
+	* unittests/function-view-selftests.c (_initialize_function_view_selftests): Add declaration.
+	* unittests/help-doc-selftests.c (_initialize_help_doc_selftests): Add declaration.
+	* unittests/lookup_name_info-selftests.c (_initialize_lookup_name_info_selftests): Add declaration.
+	* unittests/main-thread-selftests.c
+	(_initialize_main_thread_selftests): Add declaration.
+	* unittests/memory-map-selftests.c (_initialize_memory_map_selftests): Add declaration.
+	* unittests/memrange-selftests.c (_initialize_memrange_selftests): Add declaration.
+	* unittests/mkdir-recursive-selftests.c (_initialize_mkdir_recursive_selftests): Add declaration.
+	* unittests/observable-selftests.c (_initialize_observer_selftest): Add declaration.
+	* unittests/offset-type-selftests.c (_initialize_offset_type_selftests): Add declaration.
+	* unittests/optional-selftests.c (_initialize_optional_selftests): Add declaration.
+	* unittests/parse-connection-spec-selftests.c (_initialize_parse_connection_spec_selftests): Add declaration.
+	* unittests/rsp-low-selftests.c (_initialize_rsp_low_selftests): Add declaration.
+	* unittests/scoped_fd-selftests.c (_initialize_scoped_fd_selftests): Add declaration.
+	* unittests/scoped_mmap-selftests.c (_initialize_scoped_mmap_selftests): Add declaration.
+	* unittests/scoped_restore-selftests.c (_initialize_scoped_restore_selftests): Add declaration.
+	* unittests/string_view-selftests.c (_initialize_string_view_selftests): Add declaration.
+	* unittests/style-selftests.c (_initialize_style_selftest): Add declaration.
+	* unittests/tracepoint-selftests.c (_initialize_tracepoint_selftests): Add declaration.
+	* unittests/tui-selftests.c (_initialize_tui_selftest): Add
+	declaration.
+	* unittests/unpack-selftests.c (_initialize_unpack_selftests): Add declaration.
+	* unittests/utils-selftests.c (_initialize_utils_selftests): Add declaration.
+	* unittests/vec-utils-selftests.c (_initialize_vec_utils_selftests): Add declaration.
+	* unittests/xml-utils-selftests.c (_initialize_xml_utils): Add declaration.
+	* user-regs.c (_initialize_user_regs): Add declaration.
+	* utils.c (_initialize_utils): Add declaration.
+	* v850-tdep.c (_initialize_v850_tdep): Add declaration.
+	* valops.c (_initialize_valops): Add declaration.
+	* valprint.c (_initialize_valprint): Add declaration.
+	* value.c (_initialize_values): Add declaration.
+	* varobj.c (_initialize_varobj): Add declaration.
+	* vax-bsd-nat.c (_initialize_vaxbsd_nat): Add declaration.
+	* vax-nbsd-tdep.c (_initialize_vaxnbsd_tdep): Add declaration.
+	* vax-tdep.c (_initialize_vax_tdep): Add declaration.
+	* windows-nat.c (_initialize_windows_nat): Add declaration.
+	(_initialize_check_for_gdb_ini): Add declaration.
+	(_initialize_loadable): Add declaration.
+	* windows-tdep.c (_initialize_windows_tdep): Add declaration.
+	* x86-bsd-nat.c (_initialize_x86_bsd_nat): Add declaration.
+	* x86-linux-nat.c (_initialize_x86_linux_nat): Add declaration.
+	* xcoffread.c (_initialize_xcoffread): Add declaration.
+	* xml-support.c (_initialize_xml_support): Add declaration.
+	* xstormy16-tdep.c (_initialize_xstormy16_tdep): Add declaration.
+	* xtensa-linux-nat.c (_initialize_xtensa_linux_nat): Add declaration.
+	* xtensa-linux-tdep.c (_initialize_xtensa_linux_tdep): Add declaration.
+	* xtensa-tdep.c (_initialize_xtensa_tdep): Add declaration.
+
+2020-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* regformats/regdat.sh: Generate declaration for init function.
+
+2020-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* remote-sim.c (next_pid, INITIAL_PID, sim_inferior_data): Move
+	up.
+	(gdbsim_target) <get_inferior_data_by_ptid, resume_one_inferior,
+	close_one_inferior>: New methods.
+	(get_sim_inferior_data_by_ptid): Move to gdbsim_target,
+	pass down target to find_inferior_pid.
+	(gdbsim_target::fetch_registers, gdbsim_target::store_registers):
+	Pass down target to find_inferior_ptid.
+	(gdbsim_target::create_inferior): Pass down target to
+	add_thread_silent.
+	(gdbsim_close_inferior): Move to gdbsim_close_inferior, pass
+	target down to find_inferior_ptid and switch_to_thread.
+	(gdbsim_target::close): Update to call close_one_inferior.
+	(struct resume_data): Remove.
+	(gdbsim_resume_inferior): Move to gdbsim_target.  Take arguments
+	directly, rather than through a void pointer.
+	(gdbsim_target::resume): Update to call resume_one_inferior.
+
+2020-01-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbsupport/gdb_wait.c: Include gdb_wait.h.
+
+2020-01-12  Pedro Alves  <palves@redhat.com>
+
+	* bsd-kvm.c (bsd_kvm_target::close): Call exit_inferior_silent
+	directly for the current inferior instead of
+	discard_all_inferiors.
+	(discard_all_inferiors): Delete.
+
+2020-01-11  Tom Tromey  <tom@tromey.com>
+
+	* tui/tui-wingeneral.c (box_win): Check cli_styling.
+	* tui/tui-winsource.c (tui_source_window_base::refill): Use
+	deprecated_safe_get_selected_frame.
+
+2020-01-10  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* inferior.c (print_inferior): Switch inferior before printing it.
+
+2020-01-10  Aleksandar Paunovic  <aleksandar.paunovic@intel.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* progspace-and-thread.c (switch_to_program_space_and_thread):
+	Assert there's an inferior for PSPACE.  Use
+	switch_to_inferior_no_thread to switch the inferior too.
+	* progspace.c (program_space::~program_space): Call
+	clear_symtab_users here, with SYMFILE_DEFER_BP_RESET.
+	(program_space::free_all_objfiles): Don't call clear_symtab_users
+	here.
+	* symfile.c (symbol_file_clear): Call clear_symtab_users here.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* NEWS: Mention multi-target debugging, "info connections", and
+	"add-inferior -no-connection".
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* infrun.c: Include "target-connection.h".
+	(check_multi_target_resumption): New.
+	(proceed): Call it.
+	* target-connection.c (make_target_connection_string): Make
+	extern.
+	* target-connection.h (make_target_connection_string): Declare.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* Makefile.in (COMMON_SFILES): Add target-connection.c.
+	* inferior.c (uiout_field_connection): New function.
+	(print_inferior): Add new "connection-id" column.
+	(add_inferior_command): Show connection number/string of added
+	inferior.
+	* process-stratum-target.h
+	(process_stratum_target::connection_string): New virtual method.
+	(process_stratum_target::connection_number): New field.
+	* remote.c (remote_target::connection_string): New override.
+	* target-connection.c: New file.
+	* target-connection.h: New file.
+	* target.c (decref_target): Remove process_stratum targets from
+	the connection list.
+	(target_stack::push): Add process_stratum targets to the
+	connection list.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	Revert:
+	2016-04-12  Pedro Alves  <palves@redhat.com>
+	* serial.c (serial_open, serial_fdopen_ops, do_serial_close):
+	Remove references to name.
+	* serial.h (struct serial) <name>: Delete.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* gdbarch-selftests.c (register_to_value_test): Remove "target
+	already pushed" check.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+	    John Baldwin  <jhb@FreeBSD.org>
+
+	* aarch64-linux-nat.c
+	(aarch64_linux_nat_target::thread_architecture): Adjust.
+	* ada-tasks.c (print_ada_task_info): Adjust find_thread_ptid call.
+	(task_command_1): Likewise.
+	* aix-thread.c (sync_threadlists, aix_thread_target::resume)
+	(aix_thread_target::wait, aix_thread_target::fetch_registers)
+	(aix_thread_target::store_registers)
+	(aix_thread_target::thread_alive): Adjust.
+	* amd64-fbsd-tdep.c: Include "inferior.h".
+	(amd64fbsd_get_thread_local_address): Pass down target.
+	* amd64-linux-nat.c (ps_get_thread_area): Use ps_prochandle
+	thread's gdbarch instead of target_gdbarch.
+	* break-catch-sig.c (signal_catchpoint_print_it): Adjust call to
+	get_last_target_status.
+	* break-catch-syscall.c (print_it_catch_syscall): Likewise.
+	* breakpoint.c (breakpoints_should_be_inserted_now): Consider all
+	inferiors.
+	(update_inserted_breakpoint_locations): Skip if inferiors with no
+	execution.
+	(update_global_location_list): When handling moribund locations,
+	find representative inferior for location's pspace, and use thread
+	count of its process_stratum target.
+	* bsd-kvm.c (bsd_kvm_target_open): Pass target down.
+	* bsd-uthread.c (bsd_uthread_target::wait): Use
+	as_process_stratum_target and adjust thread_change_ptid and
+	add_thread calls.
+	(bsd_uthread_target::update_thread_list): Use
+	as_process_stratum_target and adjust find_thread_ptid,
+	thread_change_ptid and add_thread calls.
+	* btrace.c (maint_btrace_packet_history_cmd): Adjust
+	find_thread_ptid call.
+	* corelow.c (add_to_thread_list): Adjust add_thread call.
+	(core_target_open): Adjust add_thread_silent and thread_count
+	calls.
+	(core_target::pid_to_str): Adjust find_inferior_ptid call.
+	* ctf.c (ctf_target_open): Adjust add_thread_silent call.
+	* event-top.c (async_disconnect): Pop targets from all inferiors.
+	* exec.c (add_target_sections): Push exec target on all inferiors
+	sharing the program space.
+	(remove_target_sections): Remove the exec target from all
+	inferiors sharing the program space.
+	(exec_on_vfork): New.
+	* exec.h (exec_on_vfork): Declare.
+	* fbsd-nat.c (fbsd_add_threads): Add fbsd_nat_target parameter.
+	Pass it down.
+	(fbsd_nat_target::update_thread_list): Adjust.
+	(fbsd_nat_target::resume): Adjust.
+	(fbsd_handle_debug_trap): Add fbsd_nat_target parameter.  Pass it
+	down.
+	(fbsd_nat_target::wait, fbsd_nat_target::post_attach): Adjust.
+	* fbsd-tdep.c (fbsd_corefile_thread): Adjust
+	get_thread_arch_regcache call.
+	* fork-child.c (gdb_startup_inferior): Pass target down to
+	startup_inferior and set_executing.
+	* gdbthread.h (struct process_stratum_target): Forward declare.
+	(add_thread, add_thread_silent, add_thread_with_info)
+	(in_thread_list): Add process_stratum_target parameter.
+	(find_thread_ptid(inferior*, ptid_t)): New overload.
+	(find_thread_ptid, thread_change_ptid): Add process_stratum_target
+	parameter.
+	(all_threads()): Delete overload.
+	(all_threads, all_non_exited_threads): Add process_stratum_target
+	parameter.
+	(all_threads_safe): Use brace initialization.
+	(thread_count): Add process_stratum_target parameter.
+	(set_resumed, set_running, set_stop_requested, set_executing)
+	(threads_are_executing, finish_thread_state): Add
+	process_stratum_target parameter.
+	(switch_to_thread): Use is_current_thread.
+	* i386-fbsd-tdep.c: Include "inferior.h".
+	(i386fbsd_get_thread_local_address): Pass down target.
+	* i386-linux-nat.c (i386_linux_nat_target::low_resume): Adjust.
+	* inf-child.c (inf_child_target::maybe_unpush_target): Remove
+	have_inferiors check.
+	* inf-ptrace.c (inf_ptrace_target::create_inferior)
+	(inf_ptrace_target::attach): Adjust.
+	* infcall.c (run_inferior_call): Adjust.
+	* infcmd.c (run_command_1): Pass target to
+	scoped_finish_thread_state.
+	(proceed_thread_callback): Skip inferiors with no execution.
+	(continue_command): Rename 'all_threads' local to avoid hiding
+	'all_threads' function.  Adjust get_last_target_status call.
+	(prepare_one_step): Adjust set_running call.
+	(signal_command): Use user_visible_resume_target.  Compare thread
+	pointers instead of inferior_ptid.
+	(info_program_command): Adjust to pass down target.
+	(attach_command): Mark target's 'thread_executing' flag.
+	(stop_current_target_threads_ns): New, factored out from ...
+	(interrupt_target_1): ... this.  Switch inferior before making
+	target calls.
+	* inferior-iter.h
+	(struct all_inferiors_iterator, struct all_inferiors_range)
+	(struct all_inferiors_safe_range)
+	(struct all_non_exited_inferiors_range): Filter on
+	process_stratum_target too.  Remove explicit.
+	* inferior.c (inferior::inferior): Push dummy target on target
+	stack.
+	(find_inferior_pid, find_inferior_ptid, number_of_live_inferiors):
+	Add process_stratum_target parameter, and pass it down.
+	(have_live_inferiors): Adjust.
+	(switch_to_inferior_and_push_target): New.
+	(add_inferior_command, clone_inferior_command): Handle
+	"-no-connection" parameter.  Use
+	switch_to_inferior_and_push_target.
+	(_initialize_inferior): Mention "-no-connection" option in
+	the help of "add-inferior" and "clone-inferior" commands.
+	* inferior.h: Include "process-stratum-target.h".
+	(interrupt_target_1): Use bool.
+	(struct inferior) <push_target, unpush_target, target_is_pushed,
+	find_target_beneath, top_target, process_target, target_at,
+	m_stack>: New.
+	(discard_all_inferiors): Delete.
+	(find_inferior_pid, find_inferior_ptid, number_of_live_inferiors)
+	(all_inferiors, all_non_exited_inferiors): Add
+	process_stratum_target parameter.
+	* infrun.c: Include "gdb_select.h" and <unordered_map>.
+	(target_last_proc_target): New global.
+	(follow_fork_inferior): Push target on new inferior.  Pass target
+	to add_thread_silent.  Call exec_on_vfork.  Handle target's
+	reference count.
+	(follow_fork): Adjust get_last_target_status call.  Also consider
+	target.
+	(follow_exec): Push target on new inferior.
+	(struct execution_control_state) <target>: New field.
+	(user_visible_resume_target): New.
+	(do_target_resume): Call target_async.
+	(resume_1): Set target's threads_executing flag.  Consider resume
+	target.
+	(commit_resume_all_targets): New.
+	(proceed): Also consider resume target.  Skip threads of inferiors
+	with no execution.  Commit resumtion in all targets.
+	(start_remote): Pass current inferior to wait_for_inferior.
+	(infrun_thread_stop_requested): Consider target as well.  Pass
+	thread_info pointer to clear_inline_frame_state instead of ptid.
+	(infrun_thread_thread_exit): Consider target as well.
+	(random_pending_event_thread): New inferior parameter.  Use it.
+	(do_target_wait): Rename to ...
+	(do_target_wait_1): ... this.  Add inferior parameter, and pass it
+	down.
+	(threads_are_resumed_pending_p, do_target_wait): New.
+	(prepare_for_detach): Adjust calls.
+	(wait_for_inferior): New inferior parameter.  Handle it.  Use
+	do_target_wait_1 instead of do_target_wait.
+	(fetch_inferior_event): Adjust.  Switch to representative
+	inferior.  Pass target down.
+	(set_last_target_status): Add process_stratum_target parameter.
+	Save target in global.
+	(get_last_target_status): Add process_stratum_target parameter and
+	handle it.
+	(nullify_last_target_wait_ptid): Clear 'target_last_proc_target'.
+	(context_switch): Check inferior_ptid == null_ptid before calling
+	inferior_thread().
+	(get_inferior_stop_soon): Pass down target.
+	(wait_one): Rename to ...
+	(poll_one_curr_target): ... this.
+	(struct wait_one_event): New.
+	(wait_one): New.
+	(stop_all_threads): Adjust.
+	(handle_no_resumed, handle_inferior_event): Adjust to consider the
+	event's target.
+	(switch_back_to_stepped_thread): Also consider target.
+	(print_stop_event): Update.
+	(normal_stop): Update.  Also consider the resume target.
+	* infrun.h (wait_for_inferior): Remove declaration.
+	(user_visible_resume_target): New declaration.
+	(get_last_target_status, set_last_target_status): New
+	process_stratum_target parameter.
+	* inline-frame.c (clear_inline_frame_state(ptid_t)): Add
+	process_stratum_target parameter, and use it.
+	(clear_inline_frame_state (thread_info*)): New.
+	* inline-frame.c (clear_inline_frame_state(ptid_t)): Add
+	process_stratum_target parameter.
+	(clear_inline_frame_state (thread_info*)): Declare.
+	* linux-fork.c (delete_checkpoint_command): Pass target down to
+	find_thread_ptid.
+	(checkpoint_command): Adjust.
+	* linux-nat.c (linux_nat_target::follow_fork): Switch to thread
+	instead of just tweaking inferior_ptid.
+	(linux_nat_switch_fork): Pass target down to thread_change_ptid.
+	(exit_lwp): Pass target down to find_thread_ptid.
+	(attach_proc_task_lwp_callback): Pass target down to
+	add_thread/set_running/set_executing.
+	(linux_nat_target::attach): Pass target down to
+	thread_change_ptid.
+	(get_detach_signal): Pass target down to find_thread_ptid.
+	Consider last target status's target.
+	(linux_resume_one_lwp_throw, resume_lwp)
+	(linux_handle_syscall_trap, linux_handle_extended_wait, wait_lwp)
+	(stop_wait_callback, save_stop_reason, linux_nat_filter_event)
+	(linux_nat_wait_1, resume_stopped_resumed_lwps): Pass target down.
+	(linux_nat_target::async_wait_fd): New.
+	(linux_nat_stop_lwp, linux_nat_target::thread_address_space): Pass
+	target down.
+	* linux-nat.h (linux_nat_target::async_wait_fd): Declare.
+	* linux-tdep.c (get_thread_arch_regcache): Pass target down.
+	* linux-thread-db.c (struct thread_db_info::process_target): New
+	field.
+	(add_thread_db_info): Save target.
+	(get_thread_db_info): New process_stratum_target parameter.  Also
+	match target.
+	(delete_thread_db_info): New process_stratum_target parameter.
+	Also match target.
+	(thread_from_lwp): Adjust to pass down target.
+	(thread_db_notice_clone): Pass down target.
+	(check_thread_db_callback): Pass down target.
+	(try_thread_db_load_1): Always push the thread_db target.
+	(try_thread_db_load, record_thread): Pass target down.
+	(thread_db_target::detach): Pass target down.  Always unpush the
+	thread_db target.
+	(thread_db_target::wait, thread_db_target::mourn_inferior): Pass
+	target down.  Always unpush the thread_db target.
+	(find_new_threads_callback, thread_db_find_new_threads_2)
+	(thread_db_target::update_thread_list): Pass target down.
+	(thread_db_target::pid_to_str): Pass current inferior down.
+	(thread_db_target::get_thread_local_address): Pass target down.
+	(thread_db_target::resume, maintenance_check_libthread_db): Pass
+	target down.
+	* nto-procfs.c (nto_procfs_target::update_thread_list): Adjust.
+	* procfs.c (procfs_target::procfs_init_inferior): Declare.
+	(proc_set_current_signal, do_attach, procfs_target::wait): Adjust.
+	(procfs_init_inferior): Rename to ...
+	(procfs_target::procfs_init_inferior): ... this and adjust.
+	(procfs_target::create_inferior, procfs_notice_thread)
+	(procfs_do_thread_registers): Adjust.
+	* ppc-fbsd-tdep.c: Include "inferior.h".
+	(ppcfbsd_get_thread_local_address): Pass down target.
+	* proc-service.c (ps_xfer_memory): Switch current inferior and
+	program space as well.
+	(get_ps_regcache): Pass target down.
+	* process-stratum-target.c
+	(process_stratum_target::thread_address_space)
+	(process_stratum_target::thread_architecture): Pass target down.
+	* process-stratum-target.h
+	(process_stratum_target::threads_executing): New field.
+	(as_process_stratum_target): New.
+	* ravenscar-thread.c
+	(ravenscar_thread_target::update_inferior_ptid): Pass target down.
+	(ravenscar_thread_target::wait, ravenscar_add_thread): Pass target
+	down.
+	* record-btrace.c (record_btrace_target::info_record): Adjust.
+	(record_btrace_target::record_method)
+	(record_btrace_target::record_is_replaying)
+	(record_btrace_target::fetch_registers)
+	(get_thread_current_frame_id, record_btrace_target::resume)
+	(record_btrace_target::wait, record_btrace_target::stop): Pass
+	target down.
+	* record-full.c (record_full_wait_1): Switch to event thread.
+	Pass target down.
+	* regcache.c (regcache::regcache)
+	(get_thread_arch_aspace_regcache, get_thread_arch_regcache): Add
+	process_stratum_target parameter and handle it.
+	(current_thread_target): New global.
+	(get_thread_regcache): Add process_stratum_target parameter and
+	handle it.  Switch inferior before calling target method.
+	(get_thread_regcache): Pass target down.
+	(get_thread_regcache_for_ptid): Pass target down.
+	(registers_changed_ptid): Add process_stratum_target parameter and
+	handle it.
+	(registers_changed_thread, registers_changed): Pass target down.
+	(test_get_thread_arch_aspace_regcache): New.
+	(current_regcache_test): Define a couple local test_target_ops
+	instances and use them for testing.
+	(readwrite_regcache): Pass process_stratum_target parameter.
+	(cooked_read_test, cooked_write_test): Pass mock_target down.
+	* regcache.h (get_thread_regcache, get_thread_arch_regcache)
+	(get_thread_arch_aspace_regcache): Add process_stratum_target
+	parameter.
+	(regcache::target): New method.
+	(regcache::regcache, regcache::get_thread_arch_aspace_regcache)
+	(regcache::registers_changed_ptid): Add process_stratum_target
+	parameter.
+	(regcache::m_target): New field.
+	(registers_changed_ptid): Add process_stratum_target parameter.
+	* remote.c (remote_state::supports_vCont_probed): New field.
+	(remote_target::async_wait_fd): New method.
+	(remote_unpush_and_throw): Add remote_target parameter.
+	(get_current_remote_target): Adjust.
+	(remote_target::remote_add_inferior): Push target.
+	(remote_target::remote_add_thread)
+	(remote_target::remote_notice_new_inferior)
+	(get_remote_thread_info): Pass target down.
+	(remote_target::update_thread_list): Skip threads of inferiors
+	bound to other targets.  (remote_target::close): Don't discard
+	inferiors.  (remote_target::add_current_inferior_and_thread)
+	(remote_target::process_initial_stop_replies)
+	(remote_target::start_remote)
+	(remote_target::remote_serial_quit_handler): Pass down target.
+	(remote_target::remote_unpush_target): New remote_target
+	parameter.  Unpush the target from all inferiors.
+	(remote_target::remote_unpush_and_throw): New remote_target
+	parameter.  Pass it down.
+	(remote_target::open_1): Check whether the current inferior has
+	execution instead of checking whether any inferior is live.  Pass
+	target down.
+	(remote_target::remote_detach_1): Pass down target.  Use
+	remote_unpush_target.
+	(extended_remote_target::attach): Pass down target.
+	(remote_target::remote_vcont_probe): Set supports_vCont_probed.
+	(remote_target::append_resumption): Pass down target.
+	(remote_target::append_pending_thread_resumptions)
+	(remote_target::remote_resume_with_hc, remote_target::resume)
+	(remote_target::commit_resume): Pass down target.
+	(remote_target::remote_stop_ns): Check supports_vCont_probed.
+	(remote_target::interrupt_query)
+	(remote_target::remove_new_fork_children)
+	(remote_target::check_pending_events_prevent_wildcard_vcont)
+	(remote_target::remote_parse_stop_reply)
+	(remote_target::process_stop_reply): Pass down target.
+	(first_remote_resumed_thread): New remote_target parameter.  Pass
+	it down.
+	(remote_target::wait_as): Pass down target.
+	(unpush_and_perror): New remote_target parameter.  Pass it down.
+	(remote_target::readchar, remote_target::remote_serial_write)
+	(remote_target::getpkt_or_notif_sane_1)
+	(remote_target::kill_new_fork_children, remote_target::kill): Pass
+	down target.
+	(remote_target::mourn_inferior): Pass down target.  Use
+	remote_unpush_target.
+	(remote_target::core_of_thread)
+	(remote_target::remote_btrace_maybe_reopen): Pass down target.
+	(remote_target::pid_to_exec_file)
+	(remote_target::thread_handle_to_thread_info): Pass down target.
+	(remote_target::async_wait_fd): New.
+	* riscv-fbsd-tdep.c: Include "inferior.h".
+	(riscv_fbsd_get_thread_local_address): Pass down target.
+	* sol2-tdep.c (sol2_core_pid_to_str): Pass down target.
+	* sol-thread.c (sol_thread_target::wait, ps_lgetregs, ps_lsetregs)
+	(ps_lgetfpregs, ps_lsetfpregs, sol_update_thread_list_callback):
+	Adjust.
+	* solib-spu.c (spu_skip_standalone_loader): Pass down target.
+	* solib-svr4.c (enable_break): Pass down target.
+	* spu-multiarch.c (parse_spufs_run): Pass down target.
+	* spu-tdep.c (spu2ppu_sniffer): Pass down target.
+	* target-delegates.c: Regenerate.
+	* target.c (g_target_stack): Delete.
+	(current_top_target): Return the current inferior's top target.
+	(target_has_execution_1): Refer to the passed-in inferior's top
+	target.
+	(target_supports_terminal_ours): Check whether the initial
+	inferior was already created.
+	(decref_target): New.
+	(target_stack::push): Incref/decref the target.
+	(push_target, push_target, unpush_target): Adjust.
+	(target_stack::unpush): Defref target.
+	(target_is_pushed): Return bool.  Adjust to refer to the current
+	inferior's target stack.
+	(dispose_inferior): Delete, and inline parts ...
+	(target_preopen): ... here.  Only dispose of the current inferior.
+	(target_detach): Hold strong target reference while detaching.
+	Pass target down.
+	(target_thread_name): Add assertion.
+	(target_resume): Pass down target.
+	(target_ops::beneath, find_target_at): Adjust to refer to the
+	current inferior's target stack.
+	(get_dummy_target): New.
+	(target_pass_ctrlc): Pass the Ctrl-C to the first inferior that
+	has a thread running.
+	(initialize_targets): Rename to ...
+	(_initialize_target): ... this.
+	* target.h: Include "gdbsupport/refcounted-object.h".
+	(struct target_ops): Inherit refcounted_object.
+	(target_ops::shortname, target_ops::longname): Make const.
+	(target_ops::async_wait_fd): New method.
+	(decref_target): Declare.
+	(struct target_ops_ref_policy): New.
+	(target_ops_ref): New typedef.
+	(get_dummy_target): Declare function.
+	(target_is_pushed): Return bool.
+	* thread-iter.c (all_matching_threads_iterator::m_inf_matches)
+	(all_matching_threads_iterator::all_matching_threads_iterator):
+	Handle filter target.
+	* thread-iter.h (struct all_matching_threads_iterator, struct
+	all_matching_threads_range, class all_non_exited_threads_range):
+	Filter by target too.  Remove explicit.
+	* thread.c (threads_executing): Delete.
+	(inferior_thread): Pass down current inferior.
+	(clear_thread_inferior_resources): Pass down thread pointer
+	instead of ptid_t.
+	(add_thread_silent, add_thread_with_info, add_thread): Add
+	process_stratum_target parameter.  Use it for thread and inferior
+	searches.
+	(is_current_thread): New.
+	(thread_info::deletable): Use it.
+	(find_thread_ptid, thread_count, in_thread_list)
+	(thread_change_ptid, set_resumed, set_running): New
+	process_stratum_target parameter.  Pass it down.
+	(set_executing): New process_stratum_target parameter.  Pass it
+	down.  Adjust reference to 'threads_executing'.
+	(threads_are_executing): New process_stratum_target parameter.
+	Adjust reference to 'threads_executing'.
+	(set_stop_requested, finish_thread_state): New
+	process_stratum_target parameter.  Pass it down.
+	(switch_to_thread): Also match inferior.
+	(switch_to_thread): New process_stratum_target parameter.  Pass it
+	down.
+	(update_threads_executing): Reimplement.
+	* top.c (quit_force): Pop targets from all inferior.
+	(gdb_init): Don't call initialize_targets.
+	* windows-nat.c (windows_nat_target) <get_windows_debug_event>:
+	Declare.
+	(windows_add_thread, windows_delete_thread): Adjust.
+	(get_windows_debug_event): Rename to ...
+	(windows_nat_target::get_windows_debug_event): ... this.  Adjust.
+	* tracefile-tfile.c (tfile_target_open): Pass down target.
+	* gdbsupport/common-gdbthread.h (struct process_stratum_target):
+	Forward declare.
+	(switch_to_thread): Add process_stratum_target parameter.
+	* mi/mi-interp.c (mi_on_resume_1): Add process_stratum_target
+	parameter.  Use it.
+	(mi_on_resume): Pass target down.
+	* nat/fork-inferior.c (startup_inferior): Add
+	process_stratum_target parameter.  Pass it down.
+	* nat/fork-inferior.h (startup_inferior): Add
+	process_stratum_target parameter.
+	* python/py-threadevent.c (py_get_event_thread): Pass target down.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* remote.c (remote_target::start_remote): Don't set inferior_ptid
+	directly.  Instead find the first thread in the thread list and
+	use switch_to_thread.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* remote.c (remote_target::remote_add_inferior): Don't bind a
+	process to the current inferior if the current inferior is already
+	bound to a process.
+
+2020-01-10  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+	    Pedro Alves	 <palves@redhat.com>
+
+	* remote.c (remote_target::remote_parse_stop_reply) <W/X packets>:
+	If no process is specified, return null_ptid instead of
+	inferior_ptid.
+	(remote_target::wait_as): Handle TARGET_WAITKIND_EXITED /
+	TARGET_WAITKIND_SIGNALLED with no pid.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* remote.c (first_remote_resumed_thread): New.
+	(remote_target::wait_as): Use it as default event_ptid instead of
+	inferior_ptid.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* infrun.c (handle_no_resumed): Use all_non_exited_inferiors.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* tracefile-tfile.c (tfile_target::close): Assert that trace_fd is
+	not -1.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* break-catch-sig.c (signal_catchpoint_print_it): Don't pass a
+	ptid to get_last_target_status.
+	* break-catch-syscall.c (print_it_catch_syscall): Don't pass a
+	ptid to get_last_target_status.
+	* infcmd.c (continue_command): Don't pass a target_waitstatus to
+	get_last_target_status.
+	(info_program_command): Don't pass a target_waitstatus to
+	get_last_target_status.
+	* infrun.c (init_wait_for_inferior): Use
+	nullify_last_target_wait_ptid.
+	(get_last_target_status): Handle nullptr arguments.
+	(nullify_last_target_wait_ptid): Clear target_last_waitstatus.
+	(print_stop_event): Don't pass a ptid to get_last_target_status.
+	(normal_stop): Don't pass a ptid to get_last_target_status.
+	* infrun.h (get_last_target_status, set_last_target_status): Move
+	comments here and update.
+	(nullify_last_target_wait_ptid): Declare.
+	* linux-fork.c (fork_load_infrun_state): Remove local extern
+	declaration of nullify_last_target_wait_ptid.
+	* linux-nat.c (get_detach_signal): Don't pass a target_waitstatus
+	to get_last_target_status.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* gdbthread.h (scoped_restore_current_thread)
+	<dont_restore, restore, m_dont_restore>: Declare.
+	* thread.c (thread_alive): Add assertion.  Return bool.
+	(switch_to_thread_if_alive): New.
+	(prune_threads): Switch inferior/thread.
+	(print_thread_info_1): Switch thread before calling target methods.
+	(scoped_restore_current_thread::restore): New, factored out from
+	...
+	(scoped_restore_current_thread::~scoped_restore_current_thread):
+	... this.
+	(scoped_restore_current_thread::scoped_restore_current_thread):
+	Add assertion.
+	(thread_apply_all_command, thread_select): Use
+	switch_to_thread_if_alive.
+	* infrun.c (proceed, restart_threads, handle_signal_stop)
+	(switch_back_to_stepped_thread): Switch current thread before
+	calling target methods.
+
+2020-01-10  Pedro Alves <palves@redhat.com>
+
+	* inferior.c (switch_to_inferior_no_thread): New function,
+	factored out from ...
+	(inferior_command): ... here.
+	* inferior.h (switch_to_inferior_no_thread): Declare.
+	* mi/mi-main.c (run_one_inferior): Use
+	switch_to_inferior_no_thread.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* infcmd.c (kill_command): Remove dead code.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* remote.c (remote_target::mourn_inferior): No longer check
+	whether the target is running.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* corelow.c (core_target::has_execution): Change parameter type to
+	inferior pointer.
+	* inferior.c (number_of_live_inferiors): Use
+	inferior::has_execution instead of target_has_execution_1.
+	* inferior.h (inferior::has_execution): New.
+	* linux-thread-db.c (thread_db_target::update_thread_list): Use
+	inferior::has_execution instead of target_has_execution_1.
+	* process-stratum-target.c
+	(process_stratum_target::has_execution): Change parameter type to
+	inferior pointer.  Check the inferior's PID instead of
+	inferior_ptid.
+	* process-stratum-target.h
+	(process_stratum_target::has_execution): Change parameter type to
+	inferior pointer.
+	* record-full.c (record_full_core_target::has_execution): Change
+	parameter type to inferior pointer.
+	* target.c (target_has_execution_1): Change parameter type to
+	inferior pointer.
+	(target_has_execution_current): Adjust.
+	* target.h (target_ops::has_execution): Change parameter type to
+	inferior pointer.
+	(target_has_execution_1): Change parameter type to inferior
+	pointer.  Change return type to bool.
+	* tracefile.h (tracefile_target::has_execution): Change parameter
+	type to inferior pointer.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* exceptions.c (print_flush): Remove current_top_target() check.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* remote.c (show_remote_exec_file): Show the current inferior's
+	exec-file instead of the command variable's value.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* record-full.c (record_full_resume_ptid): New global.
+	(record_full_target::resume): Set it.
+	(record_full_wait_1): Use record_full_resume_ptid instead of
+	inferior_ptid.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* gdbthread.h (scoped_restore_current_thread)
+	<dont_restore, restore, m_dont_restore>: Declare.
+	* thread.c (thread_alive): Add assertion.  Return bool.
+	(switch_to_thread_if_alive): New.
+	(prune_threads): Switch inferior/thread.
+	(print_thread_info_1): Switch thread before calling target methods.
+	(scoped_restore_current_thread::restore): New, factored out from
+	...
+	(scoped_restore_current_thread::~scoped_restore_current_thread):
+	... this.
+	(scoped_restore_current_thread::scoped_restore_current_thread):
+	Add assertion.
+	(thread_apply_all_command, thread_select): Use
+	switch_to_thread_if_alive.
+
+2020-01-10  George Barrett  <bob@bob131.so>
+
+	* stap-probe.c (stap_modify_semaphore): Don't check for null
+	semaphores.
+	(stap_probe::set_semaphore, stap_probe::clear_semaphore): Check
+	for null semaphores.
+
+2020-01-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Update
+	all source windows, and maintain horizontal scroll status while
+	doing so.
+
+2020-01-09  Tom Tromey  <tom@tromey.com>
+
+	PR tui/18932:
+	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Call
+	update_source_window, not print_source_lines.
+
+2020-01-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui/tui.c (tui_enable): Register tui hooks after calling
+	tui_display_main.
+
+2020-01-09  Christian Biesinger  <cbiesinger@google.com>
+
+	* gdbsupport/common-defs.h: Don't define _FORTIFY_SOURCE on MinGW.
+
+2020-01-08  Simon Marchi  <simon.marchi@efficios.com>
+
+	* thread.c (print_thread_info_1): Fix indentation.
+
+2020-01-09  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.c (general_symbol_info::compute_and_set_names): Move the
+	unique_xmalloc_ptr outside the if to always free the demangled name.
+
+2020-01-08  Tom Tromey  <tromey@adacore.com>
+
+	* xcoffread.c (enter_line_range, read_xcoff_symtab)
+	(process_xcoff_symbol, xcoff_symfile_offsets): Update.
+	* symtab.h (MSYMBOL_VALUE_ADDRESS): Update.
+	(struct section_offsets, ANOFFSET, SIZEOF_N_SECTION_OFFSETS):
+	Remove.
+	(section_offsets): New typedef.
+	* symtab.c (fixup_section, get_msymbol_address): Update.
+	* symmisc.c (dump_msymbols): Update.
+	* symfile.h (relative_addr_info_to_section_offsets)
+	(symfile_map_offsets_to_segments): Update.
+	* symfile.c (build_section_addr_info_from_objfile)
+	(init_objfile_sect_indices): Update.
+	(struct place_section_arg): Change type of "offsets".
+	(place_section): Update.
+	(relative_addr_info_to_section_offsets): Change type of
+	"section_offsets".  Remove "num_sections" parameter.
+	(default_symfile_offsets, syms_from_objfile_1)
+	(set_objfile_default_section_offset): Update.
+	(reread_symbols): No need to preserve section offsets by hand.
+	(symfile_map_offsets_to_segments): Change type of "offsets".
+	* stap-probe.c (relocate_address): Update.
+	* stabsread.h (process_one_symbol): Update.
+	* solib-target.c (struct lm_info_target) <offsets>: Change type.
+	(solib_target_relocate_section_addresses): Update.
+	* solib-svr4.c (enable_break, svr4_relocate_main_executable):
+	Update.
+	* solib-frv.c (frv_relocate_main_executable): Update.
+	* solib-dsbt.c (dsbt_relocate_main_executable): Update.
+	* solib-aix.c (solib_aix_get_section_offsets): Change return
+	type.
+	(solib_aix_solib_create_inferior_hook): Update.
+	* remote.c (remote_target::get_offsets): Update.
+	* psymtab.c (find_pc_sect_psymtab): Update.
+	* psympriv.h (struct partial_symbol) <address, text_low,
+	text_high>: Update.
+	* objfiles.h (obj_section_offset): Update.
+	(struct objfile) <section_offsets>: Change type.
+	<num_sections>: Remove.
+	(objfile_relocate): Update.
+	* objfiles.c (entry_point_address_query): Update
+	(relocate_one_symbol): Change type of "section_offsets".
+	(objfile_relocate1, objfile_relocate1): Change type of
+	"new_offsets".
+	(objfile_rebase1): Update.
+	* mipsread.c (mipscoff_symfile_read): Update.
+	(read_alphacoff_dynamic_symtab): Remove "section_offsets"
+	parameter.
+	* mdebugread.c (parse_symbol): Change type of "section_offsets".
+	(parse_external, psymtab_to_symtab_1): Update.
+	* machoread.c (macho_symfile_offsets): Update.
+	* ia64-tdep.c (ia64_find_unwind_table): Update.
+	* hppa-tdep.c (read_unwind_info): Update.
+	* hppa-bsd-tdep.c (hppabsd_find_global_pointer): Update.
+	* dwarf2read.c (create_addrmap_from_index)
+	(create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab)
+	(process_psymtab_comp_unit_reader, add_partial_symbol)
+	(add_partial_subprogram, process_full_comp_unit)
+	(read_file_scope, read_func_scope, read_lexical_block_scope)
+	(read_call_site_scope, dwarf2_rnglists_process)
+	(dwarf2_ranges_process, dwarf2_ranges_read)
+	(dwarf_decode_lines_1, var_decode_location, new_symbol)
+	(dwarf2_fetch_die_loc_sect_off, dwarf2_per_cu_text_offset):
+	Update.
+	* dwarf2-frame.c (execute_cfa_program, dwarf2_frame_find_fde):
+	Update.
+	* dtrace-probe.c (dtrace_probe::get_relocated_address): Update.
+	* dbxread.c (read_dbx_symtab, read_ofile_symtab): Update.
+	(process_one_symbol): Change type of "section_offsets".
+	* ctfread.c (get_objfile_text_range): Update.
+	* coffread.c (coff_symtab_read, enter_linenos)
+	(process_coff_symbol): Update.
+	* coff-pe-read.c (add_pe_forwarded_sym): Update.
+	* amd64-windows-tdep.c (amd64_windows_find_unwind_info): Update.
+
+2020-01-08  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (parse_macro_definition): Use std::string.
+	(parse_macro_definition): Likewise.
+
+2020-01-08  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (abbrev_table_read_table): Use std::vector.
+	(ATTR_ALLOC_CHUNK): Remove.
+
+2020-01-08  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (fixup_go_packaging): Use unique_xmalloc_ptr.
+
+2020-01-08  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2read.c (add_partial_symbol): Use unique_xmalloc_ptr.
+	(dwarf2_compute_name, open_dwo_file): Likewise.
+	(process_enumeration_scope): Use std::vector.
+	(guess_partial_die_structure_name): Use unique_xmalloc_ptr.
+	(partial_die_info::fixup, dwarf2_start_subfile)
+	(guess_full_die_structure_name, dwarf2_name): Likewise.
+	(determine_prefix): Update.
+	(guess_full_die_structure_name): Make return type const.
+	(partial_die_full_name): Return unique_xmalloc_ptr.
+	(DW_FIELD_ALLOC_CHUNK): Remove.
+
+2020-01-07  Tom Tromey  <tromey@adacore.com>
+
+	PR build/24937:
+	* stap-probe.c (class stap_static_probe_ops): Add constructor.
+
+2020-01-02  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* cli/cli-style.c: Set cli_styling to 'true' in the Cygwin build.
+
+2020-01-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* stack.c (print_frame_info): Move disassemble_next_line code
+	inside source_print block.
+
+2020-01-06  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbsupport/gdb_wait.c: Include <signal.h> instead of
+	gdb/signals.h, as we are now using native signal symbols.
+
+2020-01-06  Shahab Vahedi  <shahab@synopsys.com>
+
+	* tui/tui-disasm.c (tui_disasm_window::addr_is_displayed): Avoid
+	overflow by an early check of content vs threshold.
+	* tui/tui-source.c (tui_source_window::line_is_displayed):
+	Likewise.
+
+2020-01-06  Eli Zaretskii  <eliz@gnu.org>
+
+	* NEWS: Mention the recent fix of $_exitsignal on MS-Windows.
+
+2020-01-02  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* coff-pe-read.c (read_pe_exported_syms): Don't try to read the
+	export table if no section contains it's RVA.
+
+2020-01-06  Eli Zaretskii  <eliz@gnu.org>
+
+	* windows-tdep.c: Fix a typo in WINDOWS_SIGABRT.
+
+2020-01-06  Hannes Domani  <ssbssa@yahoo.de>
+
+	* source.c (print_source_lines_base): Set last_line_listed.
+
+2020-01-06  Shahab Vahedi  <shahab@synopsys.com>
+
+	* tui/tui-disasm.c: Remove trailing spaces.
+
+2020-01-06  Eli Zaretskii  <eliz@gnu.org>
+	    Pedro Alves  <palves@redhat.com>
+
+	* Makefile.in (COMMON_SFILES): Add gdbsupport/gdb_wait.c.
+	* windows-tdep.c: New enumeration of WINDOWS_SIG* signals.
+	(windows_gdb_signal_to_target): New function, uses the above
+	enumeration to convert GDB internal signal codes to equivalent
+	Windows codes.
+	(windows_init_abi): Call set_gdbarch_gdb_signal_to_target.
+	* windows-nat.c: Include "gdb_wait.h".
+	(get_windows_debug_event): Extract the fatal exception from the
+	exit status and convert to the equivalent Posix signal number.
+	* cli/cli-cmds.c (exit_status_set_internal_vars): Account for the
+	possibility that WTERMSIG returns GDB_SIGNAL_UNKNOWN.
+	* gdbsupport/gdb_wait.c: New file, implements
+	windows_status_to_termsig.
+	* gdbsupport/gdb_wait.h (WIFEXITED, WIFSIGNALED, WEXITSTATUS)
+	(WTERMSIG) [__MINGW32__]: Separate definitions for MinGW.
+
+2020-01-05  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui/tui-layout.c (tui_add_win_to_layout): Use tui_set_layout not
+	show_layout.
+
+2020-01-05  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-nat.c
+	(aarch64_linux_nat_target::thread_architecture): Use bfd_arch_aarch64
+	and bfd_mach_aarch64.
+
+2020-01-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* ui-file.c (stdio_file::can_emit_style_escape)
+	(tee_file::can_emit_style_escape): Ensure style is used also on
+	gdb_stderr when gdb_stderr is a tty supporting styling, similarly
+	to gdb_stdout.
+	* main.c (set_gdb_data_directory): Use file style to output the
+	warning that the given pathname is not a directory.
+	* top.c (show_history_filename, gdb_safe_append_history)
+	(show_gdb_datadir): Use file style.
+
+2020-01-03  Hannes Domani  <ssbssa@yahoo.de>
+
+	* solib-target.c (struct lm_info_target):
+	Change offsets to be a unique_xmalloc_ptr.
+	(solib_target_relocate_section_addresses): Update.
+
+2020-01-03  Hannes Domani  <ssbssa@yahoo.de>
+
+	* windows-nat.c (windows_clear_solib): Free so_list linked list.
+
+2020-01-03  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2020-01-02  Luis Machado  <luis.machado@linaro.org>
+
+	* proc-service.c (get_ps_regcache): Remove reference to obsolete
+	Cell BE architecture.
+	* target.h (struct target_ops) <thread_architecture>: Likewise.
+
+2020-01-01  Hannes Domani  <ssbssa@yahoo.de>
+
+	* Makefile.in: Use INSTALL_PROGRAM_ENV.
+
+2020-01-01  Hannes Domani  <ssbssa@yahoo.de>
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbarch.sh: Update copyright year range of generated files.
+
+2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	Update copyright year range in all GDB files.
+
+2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* copyright.py: Convert to Python 3.
+
+2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* copyright.py: Adapt after move of gnulib directory from gdb
+	directory to toplevel directory.
+
+2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* copyright.py (main): Exit if run from the wrong directory.
+
+2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* top.c (print_gdb_version): Change copyright year to 2020.
+
+2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2019.
+
+For older changes see ChangeLog-2019.
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+coding: utf-8
+End:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2021 ./gdb/ChangeLog-2021
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ChangeLog-2021	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/ChangeLog-2021	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,7545 @@
+2021-07-06  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (scan_partial_symbols): Skip top-level imports of
+	c++ CU.
+	* testsuite/gdb.dwarf2/imported-unit-bp.exp: Moved to ...
+	* testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl: ... here.
+	* testsuite/gdb.dwarf2/imported-unit-bp-c++.exp: New test.
+	* testsuite/gdb.dwarf2/imported-unit-bp-c.exp: New test.
+	* testsuite/gdb.dwarf2/imported-unit.exp: Update.
+
+2021-07-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* NEWS: Create a new section for the next release branch.
+	Rename the section of the current branch, now that it has
+	been cut.
+
+2021-07-03  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 11 branch created (4b51505e33441c6165e7789fa2b6d21930242927):
+	* version.in: Bump version to 12.0.50.DATE-git.
+
+2021-07-03  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (lnp_state_machine::record_line): Use 'true'.
+	(dwarf_decode_lines): Remove '=='.
+
+2021-07-02  Tom Tromey  <tromey@adacore.com>
+
+	* ada-exp.y (chop_selector, chop_separator, write_selectors)
+	(write_ambiguous_var, get_symbol_field_type): Use const.
+
+2021-07-02  Pedro Alves  <pedro@palves.net>
+	    Hannes Domani  <ssbssa@yahoo.de>
+
+	* NEWS: Add new "TUI Improvements" section and mention mouse
+	support and that unrecognized special keys are now passed to
+	GDB.  Mention Python Window.click in the Python improvements
+	section.
+
+2021-07-01  Pedro Alves  <pedro@palves.net>
+
+	PR mi/15729
+	PR gdb/13463
+	* linux-nat.c (linux_nat_target::detach): Close the
+	/proc/<pid>/mem file if it was open for this process.
+	(linux_handle_extended_wait) <PTRACE_EVENT_EXEC>: Close the
+	/proc/<pid>/mem file if it was open for this process.
+	(linux_nat_target::mourn_inferior): Close the /proc/<pid>/mem file
+	if it was open for this process.
+	(linux_nat_target::xfer_partial): Adjust.  Do not fall back to
+	inf_ptrace_target::xfer_partial for memory accesses.
+	(last_proc_mem_file): New.
+	(maybe_close_proc_mem_file): New.
+	(linux_proc_xfer_memory_partial_pid): New, with bits factored out
+	from linux_proc_xfer_partial.
+	(linux_proc_xfer_partial): Delete.
+	(linux_proc_xfer_memory_partial): New.
+
+2021-06-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* frame.h (FRAME_SCOPED_DEBUG_ENTER_EXIT): New.
+	* frame.c (compute_frame_id, get_prev_frame_always_1,
+	get_prev_frame): Use FRAME_SCOPED_DEBUG_ENTER_EXIT.
+	* frame-unwind.c (frame_unwind_find_by_frame): Likewise.
+	(frame_unwind_register_value): Likewise.
+
+2021-06-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* frame-unwind.h (struct frame_unwind) <name>: New.  Update
+	instances everywhere to include this field.
+	* frame-unwind.c (frame_unwind_try_unwinder,
+	frame_unwind_find_by_frame): Add debug messages.
+
+2021-06-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* frame.h (frame_debug_printf): New.
+	* frame.c: Use frame_debug_printf throughout when printing frame
+	debug messages.
+	* amd64-windows-tdep.c: Likewise.
+	* value.c: Likewise.
+
+2021-06-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* frame.h (frame_debug): Change type to bool.
+	* frame.c (frame_debug): Change type to bool.
+	(_initialize_frame): Adjust.
+
+2021-06-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* gdbthread.h (find_thread_ptid): Remove the duplicate declaration.
+
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/28017
+	* machoread.c (macho_symfile_offsets): Use
+	gdb_bfd_count_sections to allocate objfile::section_offsets.
+
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* objfiles.h (struct obj_section): Move down.
+	<offset, set_offset, addr, endaddr>: New.
+	(obj_section_offset, obj_section_addr, obj_section_endaddr),
+	replace all users to use obj_section methods.
+	(struct objfile) <section_offset, set_section_offset>: New.
+
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* objfiles.h (struct obj_section): Move down.
+	<offset, set_offset, addr, endaddr>: New.
+	(obj_section_offset, obj_section_addr, obj_section_endaddr),
+	replace all users to use obj_section methods.
+	(struct objfile) <section_offset, set_section_offset>: New.
+
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* .flake8: New.
+
+2021-06-28  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-tdep.c (aarch64_linux_memtag_matches_p): Remove the top
+	byte.
+	(aarch64_linux_set_memtags): Likewise.
+	(aarch64_linux_get_memtag): Likewise.
+	(aarch64_linux_report_signal_info): Likewise.
+
+2021-06-28  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-tdep.c
+	(aarch64_linux_iterate_over_regset_sections): Fix FFR register size.
+
+2021-06-28  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-tdep.c
+	(aarch64_linux_iterate_over_regset_sections): Update tag_ctl register
+	size.
+	* aarch64-linux-tdep.h (AARCH64_LINUX_SIZEOF_MTE_REGSET): Set to
+	8 and update comments.
+
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbarch.sh (struct gdbarch_info): Initialize fields, add
+	constructor.
+	* gdbarch.h: Re-generate.
+	* arch-utils.h (gdbarch_info_init): Remove, delete all usages.
+	* arch-utils.c (gdbarch_info_init): Remove.
+
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbarch.sh (struct gdbarch_info) <tdep_info>: Remove.
+	(gdbarch_find_by_info): Remove print.
+	* gdbarch.c, gdbarch.h: Re-generate.
+
+2021-06-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* remote.c (remote_target::start_remote): Set 'starting_up' using
+	boolean values instead of integers.
+
+2021-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* guile/scm-param.c (struct param_smob) <set_command,
+	show_command>: Remove.
+	<commands>: New.
+	(pascm_is_valid): Adjust.
+	(add_setshow_generic): Use return values of add_setshow
+	functions, return a set_show_commands.
+	(gdbscm_register_parameter_x): Adjust.
+
+2021-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* command.h (add_setshow_enum_cmd): Remove context parameter.
+	* cli/cli-decode.c (add_setshow_enum_cmd): Likewise, and don't
+	set context.
+	* cli/cli-style.c (cli_style_option::add_setshow_commands): Set
+	context here.
+
+2021-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-decode.h (struct cmd_list_element) <set_context>: Add
+	assert.
+
+2021-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-decode.h (struct cmd_list_element) <set_context,
+	context>: New.
+	<context>: Rename to...
+	<m_context>: ... this.
+	* cli/cli-decode.c (set_cmd_context, get_cmd_context): Remove.
+	* command.h (set_cmd_context, get_cmd_context): Remove, use
+	cmd_list_element::set_context and cmd_list_element::context
+	everywhere instead.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention changes to 'info sources'.
+	* symtab.c (info_sources_filter::print): Delete.
+	(struct output_source_filename_data) <print_header>: Delete
+	declaration.  <printed_filename_p>: New member function.
+	(output_source_filename_data::print_header): Delete.
+	(info_sources_worker): Update group-by-objfile style output to
+	make it CLI suitable, simplify non-group-by-objfile now this is
+	only used from the MI.
+	(info_sources_command): Make group-by-objfile be the default for
+	CLI info sources command.
+	* symtab.h (struct info_sources_filter) <print>: Delete.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention additions to -file-list-exec-source-files.
+	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Add
+	--group-by-objfile option.
+	* symtab.c (isrc_flag_option_def): Rename to...
+	(isrc_match_flag_option_def): ...this.
+	(info_sources_option_defs): Rename to...
+	(info_sources_match_option_defs): ...this, and update to rename of
+	isrc_flag_option_def.
+	(struct filename_grouping_opts): New struct.
+	(isrc_grouping_flag_option_def): New type.
+	(info_sources_grouping_option_defs): New static global.
+	(make_info_sources_options_def_group): Update to return two option
+	groups.
+	(info_sources_command_completer): Update for changes to
+	make_info_sources_options_def_group.
+	(info_sources_worker): Add extra parameter, use this to display
+	alternative output format.
+	(info_sources_command): Pass extra parameter to
+	info_sources_worker.
+	(_initialize_symtab): Update for changes to
+	make_info_sources_options_def_group.
+	* symtab.h (info_sources_worker): Add extra parameter.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention additions to -file-list-exec-source-files.
+	* mi/mi-cmd-file.c (print_partial_file_name): Delete.
+	(mi_cmd_file_list_exec_source_files): Rewrite to handle command
+	options, and make use of info_sources_worker.
+	* symtab.c (struct info_sources_filter): Moved to symtab.h.
+	(info_sources_filter::print): Take uiout argument, produce output
+	through uiout.
+	(struct output_source_filename_data)
+	<output_source_filename_data>: Take uiout argument, store into
+	m_uiout.  <output>: Rewrite comment, add additional arguments to
+	declaration.  <operator()>: Send more arguments to
+	output. <m_uiout>: New member variable.
+	(output_source_filename_data::output): Take extra arguments,
+	produce output through m_uiout, and structure for MI.
+	(output_source_filename_data::print_header): Produce output
+	through m_uiout.
+	(info_sources_worker): New function, the implementation is taken
+	from info_sources_command, but modified so produce output through
+	a ui_out.
+	(info_sources_command): The second half of this function has gone
+	to become info_sources_worker.
+	* symtab.h (struct info_sources_filter): Moved from symtab.c, add
+	extra parameter to print member function.
+	(info_sources_worker): Declare.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* symtab.c (struct info_sources_filter): New.
+	(info_sources_filter::info_sources_filter): New function.
+	(info_sources_filter::matches): New function.
+	(info_sources_filter::print): New function.
+	(struct filename_partial_match_opts): Moved to later in the file
+	and update the comment.
+	(struct output_source_filename_data)
+	<output_source_filename_data>: New constructor.  <regexp>: Delete,
+	this is now in info_sources_filter.  <c_regexp>: Delete, this is
+	now in info_sources_filter.  <reset_output>: New member function.
+	<filename_seen_cache>: Rename to m_filename_seen_cache, change
+	from being a pointer, to being an actual object.  <first>: Rename
+	to m_first.  <print_header>: New member function. <partial_match>:
+	Delete.
+	(output_source_filename_data::output): Update now
+	m_filename_seen_cache is no longer a pointer, and for other member
+	variable name changes. Add a header comment.
+	(print_info_sources_header): Renamed to...
+	(output_source_filename_data::print_header): ...this.  Update now
+	it's a member function and to take account of member variable
+	renaming.
+	(info_sources_command): Add a header comment, delete stack local
+	filename_seen_cache, initialization of output_source_filename_data
+	is now done by the constructor.  Call print_header member function
+	instead of print_info_sources_header, call reset_output member
+	function instead of manually performing the reset.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2/read.c (struct dwarf2_base_index_functions)
+	<has_unexpanded_symtabs>: Declare.
+	(dwarf2_base_index_functions::has_unexpanded_symtabs): Define new
+	function.
+	* objfiles.h (struct objfile) <has_unexpanded_symtabs>: Declare.
+	* psympriv.h (struct psymbol_functions) <has_unexpanded_symtabs>:
+	Declare.
+	* psymtab.c (psymbol_functions::has_unexpanded_symtabs): Define
+	new function.
+	* quick-symbol.h (struct quick_symbol_functions)
+	<has_unexpanded_symtabs>: Declare.
+	* symfile-debug.c (objfile::has_unexpanded_symtabs): Define new
+	function.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* infcall.c (call_function_by_hand_dummy): Add missing 'else' when
+	setting prototyped flag.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* ada-lang.c (desc_bounds): Use '{}' instead of NULL to indicate
+	an empty gdb::optional when calling value_struct_elt.
+	(desc_data): Likewise.
+	(desc_one_bound): Likewise.
+	* eval.c (structop_base_operation::evaluate_funcall): Pass
+	gdb::array_view, not a gdb::array_view* to value_struct_elt.
+	(eval_op_structop_struct): Use '{}' instead of NULL to indicate
+	an empty gdb::optional when calling value_struct_elt.
+	(eval_op_structop_ptr): Likewise.
+	* f-lang.c (fortran_structop_operation::evaluate): Likewise.
+	* guile/scm-value.c (gdbscm_value_field): Likewise.
+	* m2-lang.c (eval_op_m2_high): Likewise.
+	(eval_op_m2_subscript): Likewise.
+	* opencl-lang.c (opencl_structop_operation::evaluate): Likewise.
+	* python/py-value.c (valpy_getitem): Likewise.
+	* rust-lang.c (rust_val_print_str): Likewise.
+	(rust_range): Likewise.
+	(rust_subscript): Likewise.
+	(eval_op_rust_structop): Likewise.
+	(rust_aggregate_operation::evaluate): Likewise.
+	* valarith.c (value_user_defined_op): Likewise.
+	* valops.c (search_struct_method): Change parameter type, update
+	function body accordingly, and update header comment.
+	(value_struct_elt): Change parameter type, update function body
+	accordingly.
+	* value.h (value_struct_elt): Update declaration.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR gdb/27994
+	* eval.c (structop_base_operation::evaluate_funcall): Pass
+	array_view instead of array to value_struct_elt.
+	* valarith.c (value_user_defined_op): Likewise.
+	* valops.c (typecmp): Change parameter type from array pointer to
+	array_view.  Update header comment, and update body accordingly.
+	(search_struct_method): Likewise.
+	(value_struct_elt): Likewise.
+	* value.h (value_struct_elt): Update declaration.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR gdb/27994
+	* eval.c (structop_base_operation::evaluate_funcall): Add a
+	nullptr to the end of the args array, which should not be included
+	in the argument array_view.  Pass all the arguments through to
+	value_struct_elt.
+	* valops.c (search_struct_method): Update header comment.
+	(value_struct_elt): Likewise.
+
+2021-06-25  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (create_addrmap_from_aranges): Change padding
+	logic.
+
+2021-06-25  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (process_psymtab_comp_unit): Don't set 'lang'.
+	(scan_partial_symbols, partial_die_parent_scope)
+	(add_partial_symbol, add_partial_subprogram)
+	(compute_delayed_physnames, rust_union_quirks)
+	(process_full_comp_unit, process_full_type_unit)
+	(process_imported_unit_die, process_die, dw2_linkage_name)
+	(dwarf2_compute_name, dwarf2_physname, read_import_statement)
+	(read_file_scope, queue_and_load_dwo_tu, read_func_scope)
+	(read_variable, dwarf2_get_subprogram_pc_bounds)
+	(dwarf2_attach_fields_to_type, dwarf2_add_member_fn)
+	(dwarf2_attach_fn_fields_to_type)
+	(quirk_ada_thick_pointer_struct, read_structure_type)
+	(handle_struct_member_die, process_structure_scope)
+	(read_array_type, read_array_order, prototyped_function_p)
+	(read_subroutine_type, dwarf2_init_complex_target_type)
+	(read_base_type, read_subrange_type, read_unspecified_type)
+	(load_partial_dies, partial_die_info::fixup, set_cu_language)
+	(new_symbol, need_gnat_info, determine_prefix, typename_concat)
+	(dwarf2_canonicalize_name, follow_die_offset)
+	(prepare_one_comp_unit): Update.
+	* dwarf2/cu.c (dwarf2_cu::start_symtab): Update.
+
+2021-06-25  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_file_scope): Don't call set_cu_language.
+	(dwarf_lang_to_enum_language): Rename from set_cu_language.  Don't
+	set language_defn.  Handle DW_LANG_OpenCL.
+	(prepare_one_comp_unit): Check producer and set language_defn.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention Python BP_CATCHPOINT feature.
+	* python/py-breakpoint.c (pybp_codes): Add bp_catchpoint support.
+	(bppy_init): Likewise.
+	(gdbpy_breakpoint_created): Likewise.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* guile/scm-breakpoint.c (bpscm_type_to_string): Handle
+	bp_catchpoint.
+	(bpscm_want_scm_wrapper_p): Likewise.
+	(gdbscm_make_breakpoint): Likewise.
+	(breakpoint_integer_constants): Likewise.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* guile/scm-breakpoint.c (gdbscm_make_breakpoint): Split the error
+	for invalid breakpoint numbers, and unsupported breakpoint
+	numbers.
+
+2021-06-25  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/index-write.c (struct addrmap_index_data): Add
+	initializers.
+	<operator()>: Declare.
+	(addrmap_index_data::operator()): Rename from
+	add_address_entry_worker.  Remove 'datap' parameter.
+	(write_address_map): Update.
+	* psymtab.c (struct dump_psymtab_addrmap_data): Remove
+	(dump_psymtab_addrmap_1): Remove 'data' parameter, add other
+	parameters.
+	(dump_psymtab_addrmap): Update.
+	* addrmap.c (struct addrmap_funcs) <foreach>: Remove 'data'
+	parameter.
+	(addrmap_foreach, addrmap_fixed_foreach): Likewise.
+	(struct mutable_foreach_data): Remove.
+	(addrmap_mutable_foreach_worker): Update.
+	(addrmap_mutable_foreach): Remove 'data' parameter.
+	* addrmap.h (addrmap_foreach_fn): Use gdb::function_view.
+	(addrmap_foreach): Remove 'data' parameter.
+
+2021-06-25  Tom Tromey  <tromey@adacore.com>
+
+	* python/py-type.c (typy_get_name): Decode an Ada type name.
+
+2021-06-25  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_decode): Add wrap parameter.
+	* ada-lang.h (ada_decode): Add wrap parameter.
+
+2021-06-25  Luis Machado  <luis.machado@linaro.org>
+
+	* corelow.c (core_target::core_target) Update to read target
+	description.
+
+2021-06-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* python/lib/gdb/__init__.py: Format.
+
+2021-06-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (do_target_wait): Remove wait_ptid parameter.
+	(fetch_inferior_event): Adjust.
+
+2021-06-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* python/lib/gdb/__init__.py (_execute_unwinders): Return tuple
+	with name of chosen unwinder.
+	* python/py-unwind.c (pyuw_sniffer): Print name of chosen
+	unwinder in debug message.
+
+2021-06-22  Andreas Schwab  <schwab@suse.de>
+
+	PR symtab/27999
+	* dwarf2/loc.c (decode_debug_loclists_addresses): Support
+	DW_LLE_start_end.
+
+2021-06-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* breakpoint.c (insert_bp_location): If we catch a
+	TARGET_CLOSE_ERROR just rethrow it, the breakpoints might have
+	been deleted.
+
+2021-06-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention new target feature name.
+	* arch/riscv.c (riscv_create_target_description): GDB doesn't
+	currently create target descriptions containing vector registers.
+	* arch/riscv.h (struct riscv_gdbarch_features) <vlen>: New member
+	variable.
+	<operator==>: Also compare vlen.
+	<hash>: Also include vlen.
+	* riscv-tdep.c (riscv_feature_name_vector): New static global.
+	(struct riscv_vector_feature): New struct.
+	(riscv_vector_feature): New static global.
+	(riscv_register_reggroup_p): Ensure vector registers are part of
+	the 'all' group, and part of the 'vector' group.
+	(riscv_dwarf_reg_to_regnum): Handle vector registers.
+	(riscv_gdbarch_init): Check vector register feature.
+	* riscv-tdep.h: Add vector registers to GDB's internal register
+	numbers, and to the DWARF register numbers.
+
+2021-06-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention the two new methods.
+	* python/py-frame.c (frapy_level): New function.
+	(frame_object_methods): Register 'level' method.
+	* python/py-unwind.c (pending_framepy_level): New function.
+	(pending_frame_object_methods): Register 'level' method.
+
+2021-06-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-inferior.c (infpy_get_connection_num): Call
+	gdb_py_object_from_longest instead of PyLong_FromLong directly.
+
+2021-06-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-unwind.c (unwind_infopy_add_saved_register): Handle
+	saving user registers.
+
+2021-06-19  Mike Frysinger  <vapier@gentoo.org>
+
+	* acinclude.m4: Delete most m4_include's of ../config files.
+	* configure.ac: Delete m4_include call and call AC_CONFIG_MACRO_DIR.
+	* aclocal.m4: Regenerate.
+	* configure: Regenerate.
+
+2021-06-17  Pedro Alves  <pedro@palves.net>
+
+	* scoped_ignore_signal.h (scoped_ignore_signal): Add
+	ConsumePending template parameter.
+	(scoped_ignore_signal::~scoped_ignore_signal): Skip calling
+	sigtimedwait if ConsumePending is false.
+	(scoped_ignore_sigpipe): Initialize with ConsumePending=true.
+	* scoped_ignore_sigttou.h (scoped_ignore_sigttou)
+	<m_ignore_signal>: Initialize with ConsumePending=false.
+
+2021-06-17  Pedro Alves  <pedro@palves.net>
+
+	* Makefile.in (SELFTESTS_SRCS): Add
+	unittests/scoped_ignore_signal-selftests.c.
+	* unittests/scoped_ignore_signal-selftests.c: New.
+
+2021-06-17  Pedro Alves  <pedro@palves.net>
+
+	* gdbsupport/scoped_ignore_signal.h: New.
+	* compile/compile.c: Include gdbsupport/scoped_ignore_signal.h
+	instead of <signal.h>.  Don't include <unistd.h>.
+	(scoped_ignore_sigpipe): Remove.
+	* gdbsupport/scoped_ignore_sigttou.h: Include gdbsupport/scoped_ignore_signal.h
+	instead of <signal.h>.  Don't include <unistd.h>.
+	(lazy_init): New.
+	(scoped_ignore_sigttou): Reimplement using scoped_ignore_signal
+	and lazy_init.
+
+2021-06-17  Pedro Alves  <pedro@palves.net>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Remove inflow.h.
+	* inf-ptrace.c, inflow.c, procfs.c: Don't include "inflow.h".
+	* inflow.h: Delete, moved to gdbsupport/ under a different name.
+	* ser-unix.c: Don't include "inflow.h".  Include
+	"gdbsupport/scoped_ignore_sigttou.h".
+
+2021-06-17  Pedro Alves  <pedro@palves.net>
+
+	* tui/tui-io.c (tui_dispatch_mouse_event): New, factored out from
+	...
+	(tui_dispatch_ctrl_char): ... this.  Move CTRL-L handling to
+	tui_getc_1.
+	(cur_seq, start_sequence): New.
+	(tui_getc_1): Pass key escape sequences for curses control keys to
+	readline.  Handle mouse and ctrl-l here.
+	(tui_resize_all): Disable/reenable the keypad if the command
+	window has the focus too.
+	* tui/tui-win.c (tui_set_focus_command): Don't change keypad
+	setting.
+	* tui/tui.c (tui_rl_other_window): Don't change keypad setting.
+
+2021-06-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* silent-rules.mk (ECHO_CCLD, ECHO_AR, ECHO_RANLIB): New.
+
+2021-06-16  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/26327
+	* dwarf2/cu.h (dwarf2_cu::ancestor): Remove.
+	(dwarf2_cu::get_builder): Declare and move ...
+	* dwarf2/cu.c (dwarf2_cu::get_builder): ... here.  Use sym_cu instead
+	of ancestor.  Assert return value is non-null.
+	* dwarf2/read.c (read_file_scope): Set per_objfile->sym_cu.
+	(follow_die_offset, follow_die_sig_1): Remove setting of ancestor.
+	(dwarf2_per_objfile): Add sym_cu field.
+
+2021-06-15  Alan Modra  <amodra@gmail.com>
+
+	* testsuite/lib/gdb.exp (exec_is_pie): Match new PIE readelf output.
+
+2021-06-14  Mike Frysinger  <vapier@gentoo.org>
+
+	* Makefile.in (GNULIB_BUILDDIR): Rename to ...
+	(GNULIB_PARENT_DIR): ... this.  Remove "gnulib" from value.
+
+2021-06-14  John Baldwin  <jhb@FreeBSD.org>
+
+	* configure.ac: Check for <sys/procctl.h>.
+	* config.in, configure: Regenerate.
+	* fbsd-nat.c: Include <sys/procctl.h> if present.
+	[PROC_ASLR_CTL] (maybe_disable_address_space_randomization): New.
+	(fbsd_nat_target::create_inferior)
+	(fbsd_nat_target::supports_disable_randomization): New.
+	* fbsd-nat.h (fbsd_nat_target::create_inferior)
+	(fbsd_nat_target::supports_disable_randomization): New.
+
+2021-06-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* compile/compile.c: Include missing header signal.h.
+
+2021-06-12  John Baldwin  <jhb@FreeBSD.org>
+
+	* remote.c (remote_new_objfile): Fix indentation.
+
+2021-06-11  Kevin Buettner  <kevinb@redhat.com>
+
+	* solib.c (libpthread_name_p): Match "libc" in addition
+	to "libpthread".
+	* linux-thread-db.c (libpthread_objfile_p): New function.
+	(libpthread_name_p): Adjust preexisting callers to use
+	libpthread_objfile_p().
+
+2021-06-11  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/loc.h (struct call_site_stuff): Remove.
+
+2021-06-11  Tom Tromey  <tom@tromey.com>
+
+	PR rust/23427
+	* rust-parse.c (rust_parser::lex_identifier): Handle raw
+	identifiers.
+	(rust_lex_tests): Add raw identifier tests.
+
+2021-06-08  Lancelot Six  <lsix@lancelotsix.com>
+
+	* python/lib/gdb/FrameDecorator.py (FrameDecorator): Use 'is None'
+	instead of '== None'.
+	(FrameVars): Use 'is not None' instead of '!= None'.
+	* python/lib/gdb/command/frame_filters.py (SetFrameFilterPriority):
+	Use 'is None' instead of '== None' and 'is not None' instead of '!=
+	None'.
+
+2021-06-08  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* inferior.h (class inferior) <in_initial_library_scan>: New.
+	* infcmd.c (post_create_inferior): Set in_initial_library_scan.
+	* infrun.c (follow_fork_inferior): Likewise.
+	* linux-thread-db.c (try_thread_db_load): Catch exception thrown
+	by try_thread_db_load_1
+	(thread_db_load): Return early if in_initial_library_scan is
+	set.
+	* remote.c (remote_new_objfile): Return early if
+	in_initial_library_scan is set.
+
+2021-06-07  Pedro Alves  <pedro@palves.net>
+
+	* dwarf2/read.c (struct partial_die_info): Add defaulted copy
+	ctor.
+	* symtab.h (struct symbol): Add defaulted copy assignment
+	operator.
+
+2021-06-07  Pedro Alves  <pedro@palves.net>
+
+	* completer.c (RL_QF_SINGLE_QUOTE, RL_QF_DOUBLE_QUOTE)
+	(RL_QF_BACKSLASH, RL_QF_OTHER_QUOTE): Delete.
+	(gdb_rl_find_completion_word): Remove write-only 'found_quote'
+	local.
+
+2021-06-07  Pedro Alves  <pedro@palves.net>
+
+	* nat/amd64-linux-siginfo.c (union nat_sigval): Rename to ...
+	(nat_sigval_t): ... this and remove typedef of same name.
+	(struct nat_siginfo): Rename to ...
+	(nat_siginfo_t): ... this and remove typedef of same name.
+	(struct compat_sigval): Rename to ...
+	(compat_sigval_t): ... this and remove typedef of same name.
+	(struct compat_siginfo): Rename to ...
+	(compat_siginfo_t): ... this and remove typedef of same name.
+	(struct compat_x32_siginfo): Rename to ...
+	(compat_x32_siginfo_t): ... this and remove typedef of same name.
+	(amd64_linux_siginfo_fixup_common): Adjust.
+
+2021-06-07  Pedro Alves  <pedro@palves.net>
+
+	* nat/amd64-linux-siginfo.c (compat_x32_siginfo_t): Move
+	__attribute__ __aligned__ from the typedef to the struct.
+
+2021-06-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR gdb/27847
+	* amd64-tdep.c (amd64_has_unaligned_fields): Move call to
+	type_align, and spot case where the alignment is unknown.
+
+2021-06-07  Carl Love  <cel@us.ibm.com>
+
+	* ppc-tdep.h (ppc_insn_prefix_dform): Declare.
+	* ppc64-tdep.c(insn_md, insn_x, insn_xo): New macros.
+	(ppc64_plt_pcrel_entry_point, ppc64_pcrel_linkage1_target,
+	ppc64_pcrel_linkage2_target): New functions.
+	(ppc64_standard_linkage9, ppc64_standard_linkage10,
+	ppc64_standard_linkage11, ppc64_standard_linkage12): New ppc
+	instruction patterns.
+	(ppc64_standard_linkage9, ppc64_standard_linkage10,
+	ppc64_standard_linkage11, ppc64_standard_linkage12): New variables
+	in define MAX expression.
+	(ppc64_skip_trampoline_code_1): Handle ppc64_standard_linkage9,
+	ppc64_standard_linkage10, ppc64_standard_linkage11,
+	ppc64_standard_linkage12.
+	* (ppc_insn_prefix_dform): New function.
+
+2021-06-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/27899
+	* sparc-nat.c (sparc_fetch_inferior_registers): Set
+	inferior_ptid instead of using switch_to_thread.
+	(sparc_store_inferior_registers): Likewise.
+
+2021-06-05  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* compile/compile.c (scoped_ignore_sigpipe): New helper class.
+	(compile_to_object): Ignore SIGPIPE before calling the plugin.
+
+2021-06-05  Tom Tromey  <tom@tromey.com>
+
+	* data-directory/Makefile.in (Makefile): Use correct directory
+	name.
+
+2021-06-05  Tom Tromey  <tom@tromey.com>
+
+	* data-directory/Makefile.in (Makefile): Rewrite.
+
+2021-06-05  Tom Tromey  <tromey@adacore.com>
+
+	* configure: Rebuild.
+	* configure.ac: Add ACX_NONCANONICAL_TARGET.
+
+2021-06-05  Shahab Vahedi  <shahab@synopsys.com>
+
+	* NEWS: Document 'set disassembler-options' support for the ARC
+	target.
+	* arc-tdep.c (arc_gdbarch_init): Set
+	'gdbarch_valid_disassembler_options'.
+
+2021-06-04  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.h (dwarf2_fetch_die_type_sect_off): Add 'var_name'
+	parameter.
+	* dwarf2/loc.c (dwarf2_evaluate_property) <case
+	PROP_VARIABLE_NAME>: New case.
+	(compute_var_value): New function.
+	(sect_variable_value): Use compute_var_value.
+	* dwarf2/read.c (attr_to_dynamic_prop): Handle DW_TAG_variable.
+	(var_decl_name): New function.
+	(dwarf2_fetch_die_type_sect_off): Add 'var_name' parameter.
+	* gdbtypes.h (enum dynamic_prop_kind) <PROP_VARIABLE_NAME>: New
+	constant.
+	(union dynamic_prop_data) <variable_name>: New member.
+	(struct dynamic_prop) <variable_name, set_variable_name>: New
+	methods.
+
+2021-06-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* remote.c (remote_target)
+	<select_thread_for_ambiguous_stop_reply>: Add additional debug
+	output.
+
+2021-06-04  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python/py-tui.c (class tui_py_window): Add click function.
+	(tui_py_window::click): Likewise.
+
+2021-06-04  Hannes Domani  <ssbssa@yahoo.de>
+
+	* ser-mingw.c (console_select_thread): Handle MOUSE_EVENT.
+	* tui/tui-data.h (struct tui_win_info): Add click function.
+	* tui/tui-io.c (tui_prep_terminal): Enable mouse events.
+	(tui_deprep_terminal): Disable mouse events.
+	(tui_dispatch_ctrl_char): Handle KEY_MOUSE.
+	* tui/tui.c (tui_disable): Disable mouse events.
+
+2021-06-03  Magne Hov  <mhov@undo.io>
+
+	PR python/27841
+	* eval.c (expression::evaluate): Check inferior_ptid.
+
+2021-06-03  Pedro Alves  <pedro@palves.net>
+
+	* MAINTAINERS (The Official FSF-appointed GDB Maintainers): Remove
+	affiliation.
+	(Global Maintainers): Update my address.
+	(Write After Approval): Remove stale entry.
+
+2021-06-03  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-tdep.c (FBSD_SI_USER, FBSD_SI_QUEUE, FBSD_SI_TIMER)
+	(FBSD_SI_ASYNCIO, FBSD_SI_MESGQ, FBSD_SI_KERNEL, FBSD_SI_LWP)
+	(FBSD_ILL_ILLOPC, FBSD_ILL_ILLOPN, FBSD_ILL_ILLADR)
+	(FBSD_ILL_ILLTRP, FBSD_ILL_PRVOPC, FBSD_ILL_PRVREG)
+	(FBSD_ILL_COPROC, FBSD_ILL_BADSTK, FBSD_BUS_ADRALN)
+	(FBSD_BUS_ADRERR, FBSD_BUS_OBJERR, FBSD_BUS_OOMERR)
+	(FBSD_SEGV_MAPERR, FBSD_SEGV_ACCERR, FBSD_SEGV_PKUERR)
+	(FBSD_FPE_INTOVF, FBSD_FPE_INTDIV, FBSD_FPE_FLTDIV)
+	(FBSD_FPE_FLTOVF, FBSD_FPE_FLTUND, FBSD_FPE_FLTRES)
+	(FBSD_FPE_FLTINV, FBSD_FPE_FLTSUB, FBSD_TRAP_BRKPT)
+	(FBSD_TRAP_TRACE, FBSD_TRAP_DTRACE, FBSD_TRAP_CAP)
+	(FBSD_CLD_EXITED, FBSD_CLD_KILLED, FBSD_CLD_DUMPED)
+	(FBSD_CLD_TRAPPED, FBSD_CLD_STOPPED, FBSD_CLD_CONTINUED)
+	(FBSD_POLL_IN, FBSD_POLL_OUT, FBSD_POLL_MSG, FBSD_POLL_ERR)
+	(FBSD_POLL_PRI, FBSD_POLL_HUP, fbsd_signal_cause)
+	(fbsd_report_signal_info): New.
+	(fbsd_init_abi): Use fbsd_report_signal_info as gdbarch
+	report_signal_info method.
+
+2021-06-03  Magne Hov  <mhov@undo.io>
+
+	* MAINTAINERS (Write After Approval): Add Magne Hov.
+
+2021-06-03  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python/py-symbol.c (gdbpy_initialize_symbols): Restore
+	gdb.SYMBOL_LABEL_DOMAIN constant.
+
+2021-06-01  John Baldwin  <jhb@FreeBSD.org>
+
+	* infrun.c (handle_inferior_event): Only call
+	gdbarch_displaced_step_restore_all_in_ptid if
+	gdbarch_supports_displaced_stepping is true.
+
+2021-06-01  Tom Tromey  <tromey@adacore.com>
+
+	* Makefile.in (all-data-directory): Remove.
+	(data-directory/Makefile): Remove.
+
+2021-06-01  Tom Tromey  <tromey@adacore.com>
+
+	* configure: Rebuild.
+	* configure.ac: Use AS_HELP_STRING for enable-shared.  Fix typo.
+
+2021-06-01  Tom Tromey  <tromey@adacore.com>
+
+	* silent-rules.mk (ECHO_CC): New variable.
+
+2021-06-01  Tom Tromey  <tromey@adacore.com>
+
+	* Makefile.in (SUBDIRS): Add testsuite.
+	(all): Don't exclude testsuite.
+
+2021-06-01  Tom Tromey  <tromey@adacore.com>
+
+	* configure.ac: Copy some code from testsuite/configure.ac.
+	(enable_libctf): Subst this, not ENABLE_LIBCTF.
+	* configure: Rebuild.
+
+2021-06-01  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/26096
+	* minsyms.c (msymbol_is_cold_clone): New function.
+	(msymbol_is_function): Use msymbol_is_cold_clone.
+
+2021-06-01  Fredrik Hederstierna  <fredrik@hederstierna.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR gdb/14383
+	* Makefile.in (ALL_TARGET_OBS): Add arm-none-tdep.o.
+	(ALLDEPFILES): Add arm-none-tdep.c
+	* arm-none-tdep.c: New file.
+	* configure.tgt (arm*-*-*): Add arm-none-tdep.o to cpu_obs.
+
+2021-06-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Richard Bunt  <richard.bunt@arm.com>
+
+	* breakpoint.c (check_longjmp_breakpoint_for_call_dummy): Add
+	check for why the backtrace stopped.
+
+2021-05-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.h (struct structured_type) <signatured_type>: New.
+	Update all callers.
+	(struct dwarf2_per_bfd) <allocate_signatured_type>: Add
+	signature parameter, update all callers.
+	* dwar2/read.c (dwarf2_per_bfd::allocate_signatured_type): Add
+	signature parameter.
+
+2021-05-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.h (signatured_type_up): New, use where possible.
+
+2021-05-31  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.h (signatured_type, dwarf2_per_cu_data): Move up.
+
+2021-05-30  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_per_bfd::allocate_signatured_type): Set
+	is_debug_types.
+	(create_signatured_type_table_from_index)
+	(create_signatured_type_table_from_debug_names, add_type_unit)
+	(read_comp_units_from_section): Update.
+
+2021-05-30  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_bfd) <num_psymtabs,
+	m_num_psymtabs>: Remove.
+	(resize_symtabs): Update.
+	* dwarf2/read.c (dwarf2_per_bfd::allocate_per_cu)
+	(dwarf2_per_bfd::allocate_signatured_type): Update.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* Fix tab after space indentation issues throughout.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* Fix some indentation mistakes throughout.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.h (iterate_over_bp_locations): Remove.  Update
+	users to use all_bp_locations.
+	(all_bp_locations): New.
+	* breakpoint.c (all_bp_locations): Make non-static.
+	(iterate_over_bp_locations): Remove.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.h (iterate_over_breakpoints): Remove.  Update
+	callers to use all_breakpoints or all_breakpoints_safe.
+	(breakpoint_range, all_breakpoints, breakpoint_safe_range,
+	all_breakpoints_safe): Move here.
+	* breakpoint.c (all_breakpoints, all_breakpoints_safe): Make
+	non-static.
+	(iterate_over_breakpoints): Remove.
+	* python/py-finishbreakpoint.c (bpfinishpy_detect_out_scope_cb):
+	Return void.
+	* python/py-breakpoint.c (build_bp_list): Add comment, reverse
+	return value logic.
+	* guile/scm-breakpoint.c (bpscm_build_bp_list): Return void.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.c (get_first_locp_gte_addr): Remove.
+	(ALL_BP_LOCATIONS_AT_ADDR): Remove.  Replace all uses with
+	all_bp_locations_at_addr.
+	(struct bp_locations_at_addr_range): New.
+	(all_bp_locations_at_addr): New.
+	(bp_locations_compare_addrs): New.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.c (ALL_BP_LOCATIONS): Remove, update users to use
+	all_bp_locations.
+	(all_bp_locations): New.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.c (bp_locations): Change to std::vector, update all
+	users.
+	(bp_locations_count): Remove.
+	(update_global_location_list): Change to work with indices
+	rather than bp_location**.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.h (bp_locations_range): New.
+	(struct breakpoint) <locations>: New.  Use where possible.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.h (all_tracepoints): Remove.
+	(breakpoint_iterator): Move here.
+	(struct tracepoint_filter): New.
+	(tracepoint_iterator): New.
+	(tracepoint_range): New.
+	(all_tracepoints): New.
+	* breakpoint.c (ALL_TRACEPOINTS): Remove, replace all users with
+	all_tracepoints.
+	(breakpoint_iterator): Move to header.
+	(all_tracepoints): New.
+	* tracepoint.c (start_tracing): Adjust.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.c (breakpoint_safe_range): New.
+	(all_breakpoints_safe): New.  Use instead of
+	ALL_BREAKPOINTS_SAFE where possible.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.c (ALL_BREAKPOINTS): Remove, replace all uses with
+	all_breakpoints.
+	(breakpoint_iterator): New.
+	(breakpoint_range): New.
+	(all_breakpoints): New.
+
+2021-05-27  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python/py-tui.c (tui_py_window::output): Add full_window
+	argument.
+	(gdbpy_tui_write): Parse "full_window" argument.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* make-init-c: Add option to reverse function calls.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* Makefile.in (INIT_FILES_FILTER_OUT): New.
+	(INIT_FILES): Use INIT_FILES_FILTER_OUT.
+	(stamp-init): Use make-init-c.
+	* bpf-tdep.c (_initialize_bpf_tdep): Remove "void".
+	* silent-rules.mk (ECHO_INIT_C): Change.
+	* make-init-c: New file.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* command.h (add_alias_cmd): Accept target as
+	cmd_list_element.  Update callers.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* command.h (add_info_alias): Accept target as
+	cmd_list_element.  Update callers.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* command.h (add_com_alias): Accept target as
+	cmd_list_element.  Update callers.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* python/py-param.c (add_setshow_generic): Use return values of
+	add_setshow functions.
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* mi/mi-main.c (_initialize_mi_main):
+	* python/py-auto-load.c (gdbpy_initialize_auto_load):
+	* remote.c (_initialize_remote):
+
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* command.h (set_show_commands): New.
+	(add_setshow_enum_cmd, add_setshow_auto_boolean_cmd,
+	add_setshow_boolean_cmd, add_setshow_filename_cmd,
+	add_setshow_string_cmd, add_setshow_string_noescape_cmd,
+	add_setshow_optional_filename_cmd, add_setshow_integer_cmd,
+	add_setshow_uinteger_cmd, add_setshow_zinteger_cmd,
+	add_setshow_zuinteger_cmd, add_setshow_zuinteger_unlimited_cmd):
+	Return set_show_commands.  Adjust callers.
+	* cli/cli-decode.c (add_setshow_cmd_full): Return
+	set_show_commands, remove result parameters, adjust callers.
+
+2021-05-27  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/27919
+	* dwarf2/read.c (process_psymtab_comp_unit):
+
+2021-05-27  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (find_partial_die): Fix "Cannot not" typo in dwarf
+	error.
+
+2021-05-27  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/27898
+	* dwarf2/cu.c (dwarf2_cu::dwarf2_cu): Add load_all_dies init.
+	* dwarf2/cu.h (dwarf2_cu): Add load_all_dies field.
+	* dwarf2/read.c (load_partial_dies, find_partial_die): Update.
+	* dwarf2/read.h (dwarf2_per_cu_data::dwarf2_per_cu_data): Remove
+	load_all_dies init.
+	(dwarf2_per_cu_data): Remove load_all_dies field.
+
+2021-05-26  Simon Marchi  <simon.marchi@efficios.com>
+
+	* regcache.c (reg_buffer::reg_buffer): Default-initialize
+	m_registers array.
+
+2021-05-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (allocate_type_unit_groups_table)
+	(handle_DW_AT_stmt_list, allocate_dwo_file_hash_table): Use
+	htab_delete_entry.
+	(free_line_header_voidp): Remove.
+	* completer.c
+	(completion_tracker::completion_hash_entry::deleter): Remove.
+	(completion_tracker::discard_completions): Use htab_delete_entry.
+	* utils.h (htab_delete_entry): New template function.
+
+2021-05-24  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python/py-tui.c (tui_py_window::refresh_window):
+	Avoid flickering.
+
+2021-05-23  Tom de Vries  <tdevries@suse.de>
+
+	PR tdep/27822
+	* target.h (struct target_ops): Mention target_thread_architecture in
+	read_description comment.
+	* x86-linux-nat.c (x86_linux_nat_target::read_description): Use
+	pid to determine if process is 64-bit or 32-bit.
+	* aarch64-linux-nat.c (aarch64_linux_nat_target::read_description):
+	Same.
+	* ppc-linux-nat.c (ppc_linux_nat_target::read_description): Same.
+        * riscv-linux-nat.c (riscv_linux_nat_target::read_description): Same.
+	* s390-linux-nat.c (s390_linux_nat_target::read_description): Same.
+	* arm-linux-nat.c (arm_linux_nat_target::read_description): Same.
+	Likewise, use pid to determine if kernel supports reading VFP
+	registers.
+
+2021-05-22  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* main.c (enum cmdarg_kind): Fix option type comments for
+	CMDARG_EARLYINIT_FILE and CMDARG_EARLYINIT_COMMAND.
+
+2021-05-21  Tom de Vries  <tdevries@suse.de>
+
+	PR testsuite/25047
+	* contrib/cc-with-tweaks.sh: Handle -l.
+
+2021-05-21  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoint/27889
+	* jit.c (jit_breakpoint_re_set_internal): Skip separate debug
+	objects.  Call get_jiter_objfile_data with the_objfile.
+
+2021-05-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* linespec.c (linespec_p): Remove.  Replace all uses with
+	"linespec *".
+
+2021-05-20  Alexandra HÃ¡jkovÃ¡  <ahajkova@redhat.com>
+	    Pedro Alves  <pedro@palves.net>
+
+	* cli/cli-script.h (command_line_up): New unique_ptr typedef.
+	* cli/cli-script.c (multi_line_command_p): Use unique_ptr
+	command_line_up instead of struct command_line.
+	(build_command_line): Likewise.
+	(get_command_line): Update the cmd function call parameter.
+	(process_next_line):  Use unique_ptr command_line_up instead
+	of struct command_line.
+	(recurse_read_control_structure): Change the the type of
+	next to command_line_up.
+	(read_command_lines_1): Change type of `next' to be
+	command_line_up and update all references of `next'
+	accordingly.
+
+2021-05-20  Alexandra HÃ¡jkovÃ¡  <ahajkova@redhat.com>
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2021-05-19  John Baldwin  <jhb@FreeBSD.org>
+
+	* dwarf2/read.c (tu_abbrev_offset::operator<): Mark const.
+
+2021-05-18  Alexandra HÃ¡jkovÃ¡  <ahajkova@redhat.com>
+
+	* inflow.c (new_tty): Do not leak tty.
+
+2021-05-17  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h: Update include.
+	* dwarf2/read.c: Update include.
+	* dwarf2/line-header.c: Update include.
+	* dwarf2/cu.h: Update include.
+	* dwarf2/comp-unit-head.h: Rename from comp-unit.h.
+	* dwarf2/comp-unit-head.c: Rename from comp-unit.c.
+	* Makefile.in (COMMON_SFILES): Update.
+
+2021-05-17  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (maybe_queue_comp_unit)
+	(dwarf2_per_objfile::age_comp_units): Update.
+	(dwarf2_add_dependence, dwarf2_mark_helper, dwarf2_mark): Move to
+	dwarf2_cu methods.
+	* dwarf2/cu.h (struct dwarf2_cu) <mark, clear_mark, is_marked,
+	add_dependence>: New methods.
+	<m_dependencies>: Add "m_" prefix.  Now private.
+	<m_mark>: Add "m_" prefix.
+	* dwarf2/cu.c (dwarf2_cu::dwarf2_cu): Update.
+	(dwarf2_mark_helper): New function.
+	(dwarf2_cu::mark, dwarf2_cu::add_dependence): New methods.
+
+2021-05-17  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_cu::addr_sized_int_type)
+	(dwarf2_cu::start_symtab, dwarf2_cu::addr_type)
+	(dwarf2_cu::dwarf2_cu): Move to cu.c.
+	* dwarf2/cu.c: New file.
+	* Makefile.in (COMMON_SFILES): Add dwarf2/cu.c.
+
+2021-05-17  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add dwarf2/cu.h.
+	* dwarf2/read.c (struct delayed_method_info, struct dwarf2_cu):
+	Move to cu.h.
+	* dwarf2/cu.h: New file.
+
+2021-05-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* .dir-locals.el: Set sentence-end-double-space for all modes, and
+	set brace-list-open to 0 for C and C++ modes.
+
+2021-05-17  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/loc.c (dwarf2_evaluate_loc_desc::get_frame_base): Throw
+	if frame is null.
+
+2021-05-17  Tom Tromey  <tromey@adacore.com>
+
+	* nat/linux-osdata.c (user_from_uid, time_from_time_t)
+	(group_from_gid): Subtract one from strncpy length.
+
+2021-05-17  Tom Tromey  <tromey@adacore.com>
+
+	* source.c (add_path): Check 'p' before using 'p[-1]'.
+
+2021-05-17  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data_deleter: New.
+	(dwarf2_per_cu_data_up): New typedef.
+	(struct dwarf2_per_bfd) <allocate_per_cu>: Change return type.
+	<all_comp_units>: Use dwarf2_per_cu_data_up.
+	* dwarf2/read.c (dwarf2_per_cu_data::operator()): New function.
+	(dwarf2_per_bfd::allocate_per_cu): Return dwarf2_per_cu_data_up.
+	(create_cu_from_index_list): Likewise.
+	(create_signatured_type_table_from_index)
+	(create_cus_from_debug_names_list, add_type_unit)
+	(read_comp_units_from_section): Update.
+	(dwarf2_find_containing_comp_unit): Change type of all_comp_units.
+	(run_test): Update.
+
+2021-05-17  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (tu_abbrev_offset::operator<): New method.
+	(sort_tu_by_abbrev_offset): Remove.
+	(build_type_psymtabs): Update.
+
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* py-project.toml: New.
+	* gdb-gdb.py.in: Re-format.
+
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-decode.h (cmd_list_element) <is_command_class_help>:
+	New, use it.
+	* command.h (cmd_func_p): Remove.
+	* cli/cli-decode.c (cmd_func_p): Remove.
+
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-decode.h (cmd_list_element) <is_alias>: New, use it.
+
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-decode.h (cmd_list_element) <cmd_pointer>: Rename
+	to...
+	<alias_target>: ... this.
+	(add_alias_cmd): Rename old to target.
+	(add_info_alias): Rename old_name to target_name.
+	(add_com_alias): Likewise.
+
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* Rename "prefixlist" parameters to "subcommands" throughout.
+	* cli/cli-decode.h (cmd_list_element) <prefixlist>: Rename to...
+	<subcommands>: ... this.
+	* cli/cli-decode.c (lookup_cmd_for_prefixlist): Rename to...
+	(lookup_cmd_with_subcommands): ... this.
+
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-decode.c (add_alias_cmd): Don't handle old == 0.
+
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-decode.h (prefixname): Make const, move implementation
+	to cli/cli-decode.c.
+	* cli/cli-decode.c (cmd_list_element::prefixname): New.
+
+2021-05-16  Weimin Pan  <weimin.pan@oracle.com>
+
+	* ctfread.c (new_symbol): Set function address.
+	(read_func_kind_type): Remove incorrect type name setting.
+	Don't copy name returned from ctf_type_ame_raw throughout file.
+
+2021-05-14  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_language::val_print_struct)
+	(rust_language::print_enum): Use common_val_print, not
+	value_print_inner.
+
+2021-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* python/py-inferior.c (infpy_get_connection_num): New function.
+	(inferior_object_getset): Add a new element for 'connection_num'.
+	* NEWS: Mention the 'connection_num' attribute of Inferior objects.
+
+2021-05-14  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* remote.c (check_pending_events_prevent_wildcard_vcont): Change
+	argument type, update and re-wrap, header comment.
+	(remote_target::commit_resumed): Convert any_process_wildcard and
+	may_global_wildcard_vcont from int to bool.
+
+2021-05-14  Kent Cheung  <kent.cheung@arm.com>
+
+	* cp-valprint.c (cp_print_value): Replaced duplicate code.
+	* guile/scm-pretty-print.c (ppscm_print_children): Check max_depth
+	just before printing child values.
+	(gdbscm_apply_val_pretty_printer): Don't check max_depth before
+	printing string representation.
+	* python/py-prettyprint.c (print_children): Check max_depth just
+	before printing child values.
+	(gdbpy_apply_val_pretty_printer): Don't check max_depth before
+	printing string representation.
+
+2021-05-14  Mike Frysinger  <vapier@gentoo.org>
+
+	* remote-sim.c: Change gdb/callback.h & gdb/remote-sim.h includes to
+	sim/callback.h & sim/sim.h.
+
+2021-05-13  Mike Frysinger  <vapier@gentoo.org>
+
+	* lm32-tdep.c: Delete gdb/callback.h, gdb/remote-sim.h, and
+	sim-regno.h include.
+
+2021-05-13  Simon Marchi  <simon.marchi@efficios.com>
+
+	* inf-child.h (inf_child_target) <follow_exec>: New.
+	* inf-child.c (inf_child_target::follow_exec): New.
+
+2021-05-13  Simon Marchi  <simon.marchi@efficios.com>
+
+	* target.h (struct target_ops) <follow_exec>: Add ptid_t
+	parameter.
+	(target_follow_exec): Likewise.
+	* target.c (target_follow_exec): Add ptid_t parameter.
+	* infrun.c (follow_exec): Adjust call to target_follow_exec,
+	don't push target nor create thread.
+	* linux-thread-db.c (class thread_db_target) <follow_exec>: New.
+	(thread_db_target::wait): Just return on TARGET_WAITKIND_EXECD.
+	(thread_db_target::follow_exec): New.
+	* remote.c (class remote_target) <follow_exec>: Add ptid_t parameter.
+	(remote_target::follow_exec): Call
+	process_stratum_target::follow_exec.
+	* target-delegates.c: Re-generate.
+
+2021-05-13  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.c (follow_exec): Call target_follow_fork when
+	follow-exec-mode is same.
+	* target.h (target_follow_fork): Improve doc.
+
+2021-05-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-decode.h (struct cmd_list_element) <pre_show_hook>:
+	Remove.
+	* cli/cli-setshow.c (do_show_command): Adjust.
+
+2021-05-13  Luis Machado  <luis.machado@linaro.org>
+
+	* arch/aarch64-mte-linux.c (aarch64_mte_get_tag_granules): Don't
+	include the last address in the range.
+
+2021-05-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* python/python-internal.h (gdbpy_parse_command_name): Return
+	gdb::unique_xmalloc_ptr.
+	* python/py-cmd.c (gdbpy_parse_command_name): Likewise.
+	(cmdpy_init): Adjust.
+	* python/py-param.c (parmpy_init): Adjust.
+	(add_setshow_generic): Take gdb::unique_xmalloc_ptr, release it
+	when done.
+
+2021-05-12  George Barrett  <bob@bob131.so>
+
+	* NEWS (Guile API): Note the addition of the new procedure.
+	* guile/scm-value.c (gdbscm_value_const_value): Add
+	implementation of value-const-value procedure.
+	(value_functions): Add value-const-value procedure.
+
+2021-05-12  George Barrett  <bob@bob131.so>
+
+	* NEWS (Guile API): Note the addition of new procedures.
+	* guile/scm-value.c (gdbscm_reference_value): Add helper function
+	for reference value creation.
+	(gdbscm_value_reference_value): Add implementation of
+	value-reference-value procedure.
+	(gdbscm_value_rvalue_reference_value): Add implementation of
+	value-rvalue-reference-value procedure.
+	(value_functions): Add value-reference-value procedure.  Add
+	value-rvalue-reference-value procedure.
+
+2021-05-12  George Barrett  <bob@bob131.so>
+
+	* guile/scm-type.c (type_integer_constants): Add binding for
+	TYPE_CODE_RVALUE_REF.
+	* guile/scm-value.c (gdbscm_value_referenced_value): Handle
+	dereferencing of rvalue references.
+	* NEWS (Guile API): Note improvements in rvalue reference support.
+
+2021-05-12  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* btrace.c (handle_pt_insn_events): Ignore status update enable
+	events.
+
+2021-05-11  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* arm-tdep.c (arm_record_data_proc_misc_ld_str): Fix
+	indentation.
+
+2021-05-11  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-decode.h (struct cmd_list_element): Fix indentation.
+
+2021-05-10  Lancelot Six  <lsix@lancelotsix.com>
+
+	PR gdb/27614
+	* contrib/gdb-add-index.sh: Fix when called with a symlink as an
+	argument.
+
+2021-05-10  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* nat/linux-waitpid.c (status_to_str): Show signal name.
+
+2021-05-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-breakpoint.c (pybp_debug): New static global.
+	(show_pybp_debug): New function.
+	(pybp_debug_printf): Define.
+	(PYBP_SCOPED_DEBUG_ENTER_EXIT): Define.
+	(gdbpy_breakpoint_created): Add some debugging.
+	(gdbpy_breakpoint_deleted): Likewise.
+	(gdbpy_breakpoint_modified): Likewise.
+	(_initialize_py_breakpoint): New function.
+
+2021-05-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-unwind.c (pyuw_debug): Convert to bool.
+	(show_pyuw_debug): New function.
+	(pyuw_debug_printf): Define.
+	(PYUW_SCOPED_DEBUG_ENTER_EXIT): Define.
+	(pyuw_this_id): Convert to new debug print macros.
+	(pyuw_prev_register): Likewise.
+	(pyuw_sniffer): Likewise.
+	(pyuw_dealloc_cache): Likewise.
+	(_initialize_py_unwind): Update now pyuw_debug is a bool, and add
+	show function when registering.
+
+2021-05-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dummy-frame.c (fprint_dummy_frames): Convert use of
+	fprint_frame_id to use frame_id::to_string.
+	* frame.c (fprint_field): Delete.
+	(fprint_frame_id): Moved to...
+	(frame_id::to_string): ...this, rewritten to return a string.
+	(fprint_frame): Convert use of fprint_frame_id to use
+	frame_id::to_string.
+	(compute_frame_id): Likewise.
+	(frame_id_p): Likewise.
+	(frame_id_eq): Likewise.
+	(frame_id_inner): Likewise.
+	* frame.h (struct frame_id) <to_string>: New member function.
+	(fprint_frame_id): Delete declaration.
+	* guile/scm-frame.c (frscm_print_frame_smob): Convert use of
+	fprint_frame_id to use frame_id::to_string.
+	* python/py-frame.c (frame_object_to_frame_info): Likewise.
+	* python/py-unwind.c (unwind_infopy_str): Likewise.
+	(pyuw_this_id): Likewise.
+
+2021-05-08  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* nat/linux-waitpid.c (status_to_str): Return std::string.
+	* nat/linux-waitpid.h (status_to_str): Likewise.
+	* linux-nat.c (linux_nat_post_attach_wait): Adjust.
+	(linux_nat_target::attach): Adjust.
+	(linux_handle_extended_wait): Adjust.
+	(wait_lwp): Adjust.
+	(stop_wait_callback): Adjust.
+	(linux_nat_filter_event): Adjust.
+	(linux_nat_wait_1): Adjust.
+	* nat/linux-waitpid.c (status_to_str): Adjust.
+	* nat/linux-waitpid.h (status_to_str): Adjust.
+
+2021-05-08  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.h (infrun_debug_printf): Add missing space.
+
+2021-05-08  Pedro Alves  <pedro@palves.net>
+
+	* linux-nat.c (linux_nat_target::supports_disable_randomization):
+	Remove references to HAVE_PERSONALITY.
+	* nat/linux-personality.c: Remove references to HAVE_PERSONALITY.
+	(maybe_disable_address_space_randomization)
+	(~maybe_disable_address_space_randomizatio): Remove references to
+	HAVE_PERSONALITY.
+	* config.in, configure: Regenerate.
+
+2021-05-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* cli/cli-cmds.c: Add 'gdbsupport/gdb_tilde_expand.h'
+	include.
+	(source_script_with_search): Perform tilde expansion.
+
+2021-05-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target-descriptions.c (struct target_desc_info) <filename>:
+	Make std::string.
+	(copy_inferior_target_desc_info): Adjust.
+	(target_desc_info_free): Adjust.
+	(target_find_description): Adjust.
+	(set_tdesc_filename_cmd): Adjust.
+	(show_tdesc_filename_cmd): Adjust.
+	(unset_tdesc_filename_cmd): Adjust.
+	(maint_print_c_tdesc_cmd): Adjust.
+
+2021-05-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target-descriptions.c (struct target_desc_info): Initialize
+	fields.
+	(get_tdesc_info): Use new.
+	(target_desc_info_free): Use delete.
+
+2021-05-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target-descriptions.c (struct target_desc_info) <fetched>:
+	bool.
+	(target_find_description): Adjust.
+	(target_clear_description): Adjust.
+
+2021-05-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target-descriptions.c (struct target_desc_info) <tdesc>:
+	Adjust doc.
+	(target_desc_fetched): Remove.
+	(current_target_desc): Remove.
+	(target_description_filename): Remove.
+	(target_find_description): Adjust.
+	(target_clear_description): Adjust.
+	(target_current_description): Adjust.
+	(set_tdesc_filename_cmd): Adjust.
+	(show_tdesc_filename_cmd): Adjust.
+	(unset_tdesc_filename_cmd): Adjust.
+	(maint_print_c_tdesc_cmd): Adjust.
+	(maint_print_xml_tdesc_cmd): Adjust.
+
+2021-05-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* infcmd.c (notice_new_inferior): Change parameter type.
+	* inferior.h (notice_new_inferior): Change parameter type.
+	* remote.c (remote_notice_new_inferior): Change parameter type to
+	bool.  Also update type of local variable to bool.
+	(remote_target::update_thread_list): Change type of local variable
+	to bool.
+	(remote_target::process_stop_reply): Pass bool instead of int to
+	remote_notice_new_inferior.
+
+2021-05-07  Simon Marchi  <simon.marchi@efficios.com>
+
+	* target.c (target_stack::unpush): Call target_ops::find_beneath
+	to get the target beneath `t`.
+
+2021-05-07  Simon Marchi  <simon.marchi@efficios.com>
+
+	* target.c (target_close): Check in all inferiors that the
+	target is not pushed.
+
+2021-05-07  Aaron Merey  <amerey@redhat.com>
+
+	* debuginfod-support.c (debuginfod_init): Remove.
+	(get_debuginfod_client): New function.
+
+2021-05-07  Tom Tromey  <tom@tromey.com>
+
+	* breakpoint.c (ambiguous_names_p): Use htab_eq_string.
+	* utils.c (streq_hash): Remove.
+	* utils.h (streq_hash): Don't declare.
+	* completer.c (completion_tracker::discard_completions): Update
+	comment.
+	* ada-lang.c (_initialize_ada_language): Use htab_eq_string.
+
+2021-05-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* Re-format all Python files using black.
+
+2021-05-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* guile/guile-internal.h (gdbscm_safe_source_script): Change
+	function return type.
+	* guile/guile.c (gdbscm_source_script): Update to handle change in
+	gdbscm_safe_source_script.
+	* guile/scm-objfile.c (gdbscm_source_objfile_script): Likewise.
+	* guile/scm-safe-call.c (gdbscm_safe_source_script): Change return
+	type.
+
+2021-05-06  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* inferior.h (class inferior) <args>: Change type to
+	unique_xmalloc_ptr.
+	* inferior.c (inferior::~inferior): Don't free args.
+	* infcmd.c (get_inferior_args): Adjust.
+	(set_inferior_args): Adjust.
+
+2021-05-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* guile/scm-breakpoint.c (bpscm_print_breakpoint_smob): Only print
+	breakpoint locations when the breakpoint actually has a location.
+
+2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* mi/mi-cmd-break.c (mi_cmd_break_condition): New function.
+	* mi/mi-cmds.c: Change the binding of "-break-condition" to
+	mi_cmd_break_condition.
+	* mi/mi-cmds.h (mi_cmd_break_condition): Declare.
+	* breakpoint.h (set_breakpoint_condition): Declare a new
+	overload.
+	* breakpoint.c (set_breakpoint_condition): New overloaded function
+	extracted out from ...
+	(condition_command): ... this.
+	* NEWS: Mention the change.
+
+2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* mi/mi-cmd-break.c (mi_cmd_break_insert_1): Recognize the
+	'--force-condition' flag to force the condition in the
+	'-break-insert' and '-dprintf-insert' commands.
+	* NEWS: Mention the change.
+
+2021-05-04  Tom de Vries  <tdevries@suse.de>
+
+	PR guile/27806
+	* guile/guile.c	(gdbscm_initialize): Don't let guile change libgmp
+	memory functions.
+
+2021-04-30  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_initialize_objfile): Update.
+	(add_signatured_type_cu_to_table): Remove.
+	(create_debug_type_hash_table): Assume dwo_file is non-null.
+	(create_debug_types_hash_table): Update comment.
+	(create_all_type_units): Remove.
+	(sort_tu_by_abbrev_offset): Update comment.
+	(build_type_psymtabs): Rename from build_type_psymtabs_1.
+	(build_type_psymtabs): Remove.
+	(process_skeletonless_type_unit, dwarf2_build_psymtabs_hard):
+	Update.
+	(read_comp_units_from_section): Add types_htab, section_kind
+	parameters.
+	(create_all_comp_units): Read type units.
+
+2021-04-30  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct tu_stats) <nr_tus>: New member.
+	(struct dwarf2_per_bfd) <get_cutu, get_tu>: Remove
+	<get_cu>: Now inline.
+	<all_type_units>: Remove.
+	* dwarf2/read.c (dwarf2_per_bfd::~dwarf2_per_bfd): Update.
+	(dwarf2_per_bfd::get_cutu, dwarf2_per_bfd::get_cu)
+	(dwarf2_per_bfd::get_tu): Remove.
+	(dwarf2_per_bfd::allocate_signatured_type): Update nr_tus.
+	(create_signatured_type_table_from_index)
+	(create_signatured_type_table_from_debug_names)
+	(dw2_symtab_iter_next, dwarf2_base_index_functions::print_stats)
+	(dwarf2_base_index_functions::expand_all_symtabs)
+	(dw2_expand_marked_cus, dw_expand_symtabs_matching_file_matcher)
+	(dwarf2_base_index_functions::map_symbol_filenames)
+	(dw2_debug_names_iterator::next, dwarf2_initialize_objfile)
+	(add_signatured_type_cu_to_table, create_all_type_units)
+	(add_type_unit, build_type_psymtabs_1, print_tu_stats)
+	(create_all_comp_units): Update.
+	* dwarf2/index-write.c (check_dwarf64_offsets, write_gdbindex)
+	(write_debug_names): Update.
+
+2021-04-30  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_bfd) <allocate_per_cu,
+	allocate_signatured_type>: Change return type.
+	<all_comp_units, all_type_units>: Hold unique pointers.
+	(struct dwarf2_per_cu_data): Add constructor and initializers.
+	(struct signatured_type): Derive from dwarf2_per_cu_data.
+	* dwarf2/read.c (type_unit_group): Derive from
+	dwarf2_per_cu_data.
+	(dwarf2_per_bfd::get_cutu, dwarf2_per_bfd::get_cu)
+	(dwarf2_per_bfd::get_tu)
+	(dwarf2_per_bfd::allocate_signatured_type)
+	(dwarf2_per_bfd::allocate_signatured_type)
+	(create_cu_from_index_list, create_cus_from_index_list)
+	(create_signatured_type_table_from_index)
+	(create_signatured_type_table_from_debug_names)
+	(create_addrmap_from_aranges)
+	(dwarf2_base_index_functions::find_last_source_symtab)
+	(dw_expand_symtabs_matching_file_matcher)
+	(dwarf2_gdb_index::expand_symtabs_matching)
+	(dwarf2_base_index_functions::map_symbol_filenames)
+	(create_cus_from_debug_names_list)
+	(dw2_debug_names_iterator::next)
+	(dwarf2_debug_names_index::expand_symtabs_matching)
+	(create_debug_type_hash_table, add_type_unit)
+	(fill_in_sig_entry_from_dwo_entry, lookup_dwo_signatured_type):
+	Update.
+	(allocate_type_unit_groups_table): Use delete.
+	(create_type_unit_group): Change return type.  Use new.
+	(get_type_unit_group, build_type_psymtabs_1)
+	(build_type_psymtab_dependencies)
+	(process_skeletonless_type_unit, set_partial_user)
+	(dwarf2_build_psymtabs_hard, read_comp_units_from_section)
+	(create_cus_hash_table, queue_and_load_dwo_tu, follow_die_sig_1)
+	(read_signatured_type): Update.
+	(dwarf2_find_containing_comp_unit): Change type of
+	'all_comp_units'.
+	(run_test): Update.
+	(dwarf2_per_bfd::allocate_per_cu)
+	(dwarf2_per_bfd::allocate_signatured_type): Change return type.
+	Use new.
+	(add_signatured_type_cu_to_table): Update.
+	* dwarf2/index-write.c (write_one_signatured_type)
+	(check_dwarf64_offsets, psyms_seen_size, write_gdbindex)
+	(write_debug_names): Update.
+
+2021-04-30  Tom Tromey  <tromey@adacore.com>
+
+	* nat/windows-nat.h (get_image_name): Don't declare.
+	* nat/windows-nat.c (get_image_name): Now static.
+
+2021-04-30  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (windows_nat::handle_load_dll): Update.
+	(windows_nat_target::get_windows_debug_event): Call
+	dll_loaded_event.
+	(windows_add_all_dlls, windows_add_dll): Move to
+	nat/windows-nat.c.
+	* nat/windows-nat.h (handle_load_dll): Change parameters.
+	(dll_loaded_event, windows_add_all_dlls): Declare.
+	* nat/windows-nat.c (windows_add_dll, windows_add_all_dlls): Move
+	from windows-nat.c.
+	(dll_loaded_event): New function.
+
+2021-04-30  Tom Tromey  <tromey@adacore.com>
+
+	* nat/windows-nat.h (GenerateConsoleCtrlEvent): New define.
+	(GenerateConsoleCtrlEvent_ftype, GenerateConsoleCtrlEvent):
+	Declare.
+	* nat/windows-nat.c (GenerateConsoleCtrlEvent): Define.
+	(initialize_loadable): Initialize GenerateConsoleCtrlEvent.
+
+2021-04-30  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c: Move code to nat/windows-nat.[ch].
+	(_initialize_windows_nat): Call initialize_loadable.
+	* nat/windows-nat.h (AdjustTokenPrivileges)
+	(DebugActiveProcessStop, DebugBreakProcess)
+	(DebugSetProcessKillOnExit, EnumProcessModules)
+	(EnumProcessModulesEx, GetModuleInformation)
+	(GetModuleFileNameExA, GetModuleFileNameExW)
+	(LookupPrivilegeValueA, OpenProcessToken, GetConsoleFontSize)
+	(GetCurrentConsoleFont, Wow64SuspendThread)
+	(Wow64GetThreadContext, Wow64SetThreadContext)
+	(Wow64GetThreadSelectorEntry): Move from windows-nat.c.
+	(AdjustTokenPrivileges_ftype)
+	(DebugActiveProcessStop_ftype, DebugBreakProcess_ftype)
+	(DebugSetProcessKillOnExit_ftype, EnumProcessModules_ftype)
+	(EnumProcessModulesEx_ftype, GetModuleInformation_ftype)
+	(GetModuleFileNameExA_ftype, GetModuleFileNameExW_ftype)
+	(LookupPrivilegeValueA_ftype, OpenProcessToken_ftype)
+	(GetConsoleFontSize_ftype)
+	(GetCurrentConsoleFont_ftype, Wow64SuspendThread_ftype)
+	(Wow64GetThreadContext_ftype, Wow64SetThreadContext_ftype)
+	(Wow64GetThreadSelectorEntry_ftype): Likewise.
+	(initialize_loadable): Declare.
+	* nat/windows-nat.c (AdjustTokenPrivileges)
+	(DebugActiveProcessStop, DebugBreakProcess)
+	(DebugSetProcessKillOnExit, EnumProcessModules)
+	(EnumProcessModulesEx, GetModuleInformation, GetModuleFileNameExA)
+	(GetModuleFileNameExW, LookupPrivilegeValueA, OpenProcessToken)
+	(GetCurrentConsoleFont, GetConsoleFontSize, Wow64SuspendThread)
+	(Wow64GetThreadContext, Wow64SetThreadContext)
+	(Wow64GetThreadSelectorEntry): Define.
+	(bad, bad_GetCurrentConsoleFont, bad_GetConsoleFontSize): Move
+	from windows-nat.c.
+	(initialize_loadable): Likewise, and rename.
+
+2021-04-30  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (bad_GetModuleFileNameEx): Remove define.
+	(bad_DebugActiveProcessStop, bad_DebugBreakProcess)
+	(bad_DebugSetProcessKillOnExit, bad_EnumProcessModules)
+	(bad_GetModuleFileNameExW, bad_GetModuleFileNameExA)
+	(bad_GetModuleInformation, bad_OpenProcessToken): Remove.
+	(bad): New template functions.
+	(_initialize_loadable): Update.
+
+2021-04-30  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_index_type): Use ada_check_typedef.
+
+2021-04-29  Simon Marchi  <simon.marchi@efficios.com>
+
+	* auto-load.h: Split namespace declaration.
+
+2021-04-29  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (save_waitstatus): Move variables to inner scope.
+
+2021-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Fix typo and stray full stop.
+
+2021-04-28  Tom Tromey  <tromey@adacore.com>
+
+	* ada-exp.y (primary): Use new type for null pointer.
+	* ada-lang.c (ada_type_match): Remove "may_deref"
+	parameter.  Handle null pointer.
+	(ada_args_match): Update.
+	* ada-valprint.c (ada_value_print_ptr, ada_value_print):
+	Handle null pointer.
+
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention new commands.
+	* python/python.c (python_ignore_environment): New static global.
+	(show_python_ignore_environment): New function.
+	(set_python_ignore_environment): New function.
+	(python_dont_write_bytecode): New static global.
+	(show_python_dont_write_bytecode): New function.
+	(set_python_dont_write_bytecode): New function.
+	(_initialize_python): Register new commands.
+
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* extension-priv.h (struct extension_language_ops): Rename
+	'finish_initialization' to 'initialize'.
+	* extension.c (finish_ext_lang_initialization): Renamed to...
+	(ext_lang_initialization): ...this, update comment, and updated
+	the calls to reflect the change in struct extension_language_ops.
+	* extension.h (finish_ext_lang_initialization): Renamed to...
+	(ext_lang_initialization): ...this.
+	* guile/guile.c (gdbscm_finish_initialization): Renamed to...
+	(gdbscm_initialize): ...this, update comment at definition.
+	(guile_extension_ops): Update.
+	* main.c (captured_main_1): Update call to
+	finish_ext_lang_initialization.
+	* python/python.c (gdbpy_finish_initialization): Rename to...
+	(gdbpy_initialize): ...this, update comment at definition, and
+	update call to do_finish_initialization.
+	(python_extension_ops): Update.
+	(do_finish_initialization): Rename to...
+	(do_initialize): ...this, and update comment.
+
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* main.c (captured_main_1): Add a call to
+	finish_ext_lang_initialization.
+	* top.c (gdb_init): Remove call to finish_ext_lang_initialization.
+
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* guile/guile.c (gdbscm_set_backtrace): Add declaration.
+	(gdbscm_finish_initialization): Add code moved from
+	_initialize_guile.
+	(_initialize_guile): Move code to gdbscm_finish_initialization.
+	* guile/scm-arch.c (gdbscm_initialize_arches): Move some code into
+	_initialize_scm_arch.
+	(_initialize_scm_arch): New function.
+	* guile/scm-block.c (gdbscm_initialize_blocks): Move some code
+	into _initialize_scm_block.
+	(_initialize_scm_block): New function.
+	* guile/scm-frame.c (gdbscm_initialize_frames): Move some code
+	into _initialize_scm_frame.
+	(_initialize_scm_frame): New function.
+	* guile/scm-objfile.c (gdbscm_initialize_objfiles): Move some code
+	into _initialize_scm_objfile.
+	(_initialize_scm_objfile): New function.
+	* guile/scm-progspace.c (gdbscm_initialize_pspaces): Move some
+	code into _initialize_scm_progspace.
+	(_initialize_scm_progspace): New function.
+	* guile/scm-symbol.c (gdbscm_initialize_symbols): Move some code
+	into _initialize_scm_symbol.
+	(_initialize_scm_symbol): New function.
+	* guile/scm-symtab.c (gdbscm_initialize_symtabs): Move some code
+	into _initialize_scm_symtab.
+	(_initialize_scm_symtab): New function.
+	* guile/scm-type.c (gdbscm_initialize_types): Move some code into
+	_initialize_scm_type.
+	(_initialize_scm_type): New function.
+
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-arch.c (_initialize_py_arch): New function.
+	(gdbpy_initialize_arch): Move code to _initialize_py_arch.
+	* python/py-block.c (_initialize_py_block): New function.
+	(gdbpy_initialize_blocks): Move code to _initialize_py_block.
+	* python/py-inferior.c (_initialize_py_inferior): New function.
+	(gdbpy_initialize_inferior): Move code to _initialize_py_inferior.
+	* python/py-objfile.c (_initialize_py_objfile): New function.
+	(gdbpy_initialize_objfile): Move code to _initialize_py_objfile.
+	* python/py-progspace.c (_initialize_py_progspace): New function.
+	(gdbpy_initialize_pspace): Move code to _initialize_py_progspace.
+	* python/py-registers.c (_initialize_py_registers): New function.
+	(gdbpy_initialize_registers): Move code to
+	_initialize_py_registers.
+	* python/py-symbol.c (_initialize_py_symbol): New function.
+	(gdbpy_initialize_symbols): Move code to _initialize_py_symbol.
+	* python/py-symtab.c (_initialize_py_symtab): New function.
+	(gdbpy_initialize_symtabs): Move code to _initialize_py_symtab.
+	* python/py-type.c (_initialize_py_type): New function.
+	(gdbpy_initialize_types): Move code to _initialize_py_type.
+	* python/py-unwind.c (_initialize_py_unwind): New function.
+	(gdbpy_initialize_unwind): Move code to _initialize_py_unwind.
+	* python/python.c (_initialize_python): Move call to
+	do_start_initialization to gdbpy_finish_initialization.
+	(gdbpy_finish_initialization): Add call to
+	do_start_initialization.
+
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* extension.c (struct scoped_default_signal): New struct.
+	(scoped_default_sigint): New typedef.
+	(finish_ext_lang_initialization): Make use of
+	scoped_default_sigint.
+
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* main.c (captured_main_1): Don't pass argument to gdb_init.
+	* top.c (gdb_init): Remove unused argument, and add header
+	comment.
+	* top.h (gdb_init): Remove argument.
+
+2021-04-27  Luis Machado  <luis.machado@linaro.org>
+
+	* psymtab.c (psymbol_functions::dump): Output newline.
+	Remove wrap.
+	* symmisc.c (dump_objfile): Likewise.
+
+2021-04-27  Michael Weghorn  <m.weghorn@posteo.de>
+	    Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdb/auto-load.c (_initialize_auto_load): 'Specify token
+	when attaching the 'auto_load_new_objfile' observer, so
+	other observers can specify it as a dependency.
+	* gdb/auto-load.h (struct token): Declare
+	'auto_load_new_objfile_observer_token' as token to be used
+	for the 'auto_load_new_objfile' observer.
+	* gdb/python/py-inferior.c (gdbpy_initialize_inferior): Make
+	'python_new_objfile' observer depend on 'auto_load_new_objfile'
+	observer, so it gets notified after the latter.
+
+2021-04-27  Michael Weghorn  <m.weghorn@posteo.de>
+	    Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* unittests/observable-selftests.c (dependency_test_counters):
+	New.
+	(observer_token0, observer_token1, observer_token2,
+	observer_token3, observer_token4, observer_token5): New.
+	(struct dependency_observer_data): New struct.
+	(observer_dependency_test_callback): New function.
+	(test_observers): New.
+	(run_dependency_test): New function.
+	(test_dependency): New.
+	(_initialize_observer_selftest): Register dependency test.
+
+2021-04-26  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/27773
+	* cli/cli-dump.c (dump_binary_file): Check result of
+	gdb_fopen_cloexec.
+
+2021-04-25  Sergei Trofimovich  <siarheit@google.com>
+
+	* sparc-linux-nat.c (sparc_linux_nat_target): fix sparc build
+	by passing `process_stratum_target*` parameter.
+
+2021-04-25  Lancelot Six  <lsix@lancelotsix.com>
+
+	PR gdb/22640
+	* typeprint.h (struct type_print_options): Add print_in_hex
+	flag.
+	(struct print_offset_data): Add print_in_hex flag, add a
+	constructor accepting a type_print_options* argument.
+	* typeprint.c (type_print_raw_options, default_ptype_flags): Set
+	default value for print_in_hex.
+	(print_offset_data::indentation): Allow more horizontal space.
+	(print_offset_data::print_offset_data): Add ctor.
+	(print_offset_data::maybe_print_hole, print_offset_data::update):
+	Handle the print_in_hex flag.
+	(whatis_exp): Handle 'x' and 'd' flags.
+	(print_offsets_and_sizes_in_hex): Declare.
+	(set_print_offsets_and_sizes_in_hex): Create.
+	(show_print_offsets_and_sizes_in_hex): Create.
+	(_initialize_typeprint): Update help message for the ptype
+	command, register the 'set print type hex' and 'show print type
+	hex' commands.
+	* c-typeprint.c (c_print_type, c_type_print_base_struct_union)
+	(c_type_print_base): Construct the print_offset_data
+	object using the type_print_optons parameter.
+	* rust-lang.c (rust_language::print_type): Construct the
+	print_offset_data object using the type_print_optons parameter.
+	* NEWS: Mention the new flags of the ptype command.
+
+2021-04-25  Lancelot Six  <lsix@lancelotsix.com>
+
+	* typeprint.h (struct type_print_options): Move before
+	print_offset_data.
+
+2021-04-25  Joel Brobecker  <brobecker@adacore.com>
+
+	GDB 10.2 released.
+
+2021-04-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* observable.c (observer_debug): Change to bool.
+
+2021-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2/read.c: Add 'unordered_set' include.
+	(dwarf2_base_index_functions::map_symbol_filenames): Replace
+	'visited' hash table with 'qfn_cache' unordered_set.  Remove use
+	of per_Bfd->filenames_cache cache, and use function local
+	filenames_cache instead.  Reindent.
+	* dwarf2/read.h (struct dwarf2_per_bfd) <filenames_cache>: Delete.
+
+2021-04-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* breakpoint.c (iterate_over_bp_locations): Change callback to
+	function view, remove data parameter.
+	* breakpoint.h (iterate_over_bp_locations): Likewise.
+	* record-full.c (record_full_sync_record_breakpoints): Remove
+	data parameter.
+
+2021-04-22  Tom Tromey  <tom@tromey.com>
+
+	* c-typeprint.c (c_type_print_base_struct_union): Use
+	print_spaces_filtered_with_print_options.
+
+2021-04-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/27757
+	* python/py-type.c (typy_range): Check that bounds are constant
+	before accessing them as such.
+	* guile/scm-type.c (gdbscm_type_range): Likewise.
+
+2021-04-22  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* Makefile.in (COMMON_SFILES): Remove continuations.c.
+	* inferior.c (inferior::add_continuation): New method, adapted
+	from 'add_inferior_continuation'.
+	(inferior::do_all_continuations): New method, adapted from
+	'do_all_inferior_continuations'.
+	(inferior::~inferior): Clear the list of continuations directly.
+	* inferior.h (class inferior) <continuations>: Rename into...
+	<m_continuations>: ...this and make private.
+	* continuations.c: Remove.
+	* continuations.h: Remove.
+	* event-top.c: Don't include "continuations.h".
+
+	Update the users below.
+	* inf-loop.c (inferior_event_handler)
+	* infcmd.c (attach_command)
+	(notice_new_inferior): Update.
+
+2021-04-22  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* inferior.h (class inferior) <continuations>: Change the type
+	to be an std::list of std::function's.
+	Update the references and uses below.
+	* continuations.c (struct continuation): Delete.
+	(make_continuation): Delete.
+	(do_my_continuations_1): Delete.
+	(do_my_continuations): Delete.
+	(discard_my_continuations_1): Delete.
+	(discard_my_continuations): Delete.
+	(add_inferior_continuation): Update.
+	(do_all_inferior_continuations): Update.
+	(discard_all_inferior_continuations): Update.
+	* continuations.h (add_inferior_continuation): Update to take
+	an std::function as the parameter.
+	* infcmd.c (struct attach_command_continuation_args): Delete.
+	(attach_command_continuation): Delete.
+	(attach_command_continuation_free_args): Delete.
+	(attach_command): Update.
+	(notice_new_inferior): Update.
+
+2021-04-22  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* continuations.h: Update the general comment.
+	* inferior.h (class inferior) <continuations>: Update the comment.
+	* interps.c: Do not include "continuations.h".
+
+2021-04-22  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* continuations.h (do_all_inferior_continuations): Remove the 'err'
+	parameter.  Update the references below.
+	* continuations.c (do_my_continuations_1)
+	(do_my_continuations)
+	(do_all_inferior_continuations): Update.
+	* inf-loop.c (inferior_event_handler): Update.
+	* infcmd.c (attach_command_continuation): Update.
+
+2021-04-22  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infcmd.c (attach_post_wait): Update the function comment.
+
+2021-04-22  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* infcmd.c (attach_post_wait): Remove the unused parameter 'args'.
+	Update the references below.
+	(struct attach_command_continuation_args)
+	(attach_command_continuation)
+	(attach_command_continuation_free_args)
+	(attach_command)
+	(notice_new_inferior): Update to remove the reference to 'args'.
+
+2021-04-22  Simon Marchi  <simon.marchi@polymtl.ca>
+	    Tom de Vries  <tdevries@suse.de>
+
+	PR remote/27710
+	* remote.c (remote_target_is_non_stop_p): New function.
+	* remote.h (remote_target_is_non_stop_p): Declare.
+	* remote-notif.c (remote_async_get_pending_events_handler): Fix assert
+	to check non-stopness using notif_state->remote rather current target.
+
+2021-04-22  Tom Tromey  <tom@tromey.com>
+
+	* rust-parse.c (rust_parser::parse_sizeof): Remove KW_MUT code.
+	(struct typed_val_int) <val>: Now ULONGEST.
+	(rust_parser::parse_array_type): Remove negative check.
+	(rust_lex_int_test): Change 'value' to ULONGEST.
+
+2021-04-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* arch-utils.c (default_addressable_memory_unit_size): Return a
+	value based on bfd's bits per byte.
+
+2021-04-21  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_cu_data) <dwarf_version>: Now
+	unsigned char.
+	(struct dwarf2_per_cu_data): Rearrange.
+	* dwarf2/comp-unit.h (struct comp_unit_head) <version>: Now
+	unsigned char.
+	(struct comp_unit_head): Rearrange.
+	* dwarf2/comp-unit.c (read_comp_unit_head): Update.
+
+2021-04-21  Tom de Vries  <tdevries@suse.de>
+
+	PR build/27681
+	* configure.ac: Remove --without-included-regex/--with-included-regex.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* gdb_regex.h: Assume USE_INCLUDED_REGEX is defined.
+
+2021-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.h (create_breakpoint): Add a new parameter,
+	'force_condition'.
+	* breakpoint.c (create_breakpoint): Use the 'force_condition'
+	argument when 'parse_extra' is false to check if the condition
+	is invalid at all of the breakpoint locations.
+	Update the users below.
+	(break_command_1)
+	(dprintf_command)
+	(trace_command)
+	(ftrace_command)
+	(strace_command)
+	(create_tracepoint_from_upload): Update.
+	* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Update.
+	* mi/mi-cmd-break.c (mi_cmd_break_insert_1): Update.
+	* python/py-breakpoint.c (bppy_init): Update.
+	* python/py-finishbreakpoint.c (bpfinishpy_init): Update.
+
+2021-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* breakpoint.c (print_one_breakpoint_location): Display "N" for
+	disabled-by-condition locations on MI-like output.
+	(breakpoint_1): Do not display the disabled-by-condition footnote
+	if the output is MI-like.
+
+2021-04-21  Frederic Cambus  <fred@statdns.com>
+
+	* syscalls/update-netbsd.sh: Fix script name display in usage, and
+	update year range in generated copyright notices.
+
+2021-04-20  Felix Willgerodt  <felix.willgerodt@intel.com>
+
+	* c-exp.y (qualifier_seq_noopt): Replace qualifier_seq with
+	qualifier_seq_noopt.
+
+2021-04-20  Felix Willgerodt  <felix.willgerodt@intel.com>
+
+	* c-exp.y (single_qualifier): Handle UNKNOWN_CPP_NAME.
+
+2021-04-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* producer.c: Replace 'regex' include with 'gdb_regex.h'.
+	(producer_is_icc): Replace use of std::regex with gdb's
+	compiled_regex.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	PR gdb/23743:
+	* dwarf2/read.c (class offset_view): New.
+	(struct symbol_table_slot): Remove.
+	(struct mapped_index) <symbol_table, constant_pool>: Change type.
+	<symbol_name_index, symbol_vec_index>: New methods.
+	<symbol_name_slot_invalid, symbol_name_at, symbol_name_count>:
+	Rewrite.
+	(read_gdb_index_from_buffer): Update.
+	(struct dw2_symtab_iterator) <vec>: Change type.
+	(dw2_symtab_iter_init_common, dw2_symtab_iter_init)
+	(dw2_symtab_iter_next, dw2_expand_marked_cus): Update.
+	* dwarf2/index-write.c (class data_buf) <append_data>: Remove.
+	<append_array, append_offset>: New methods.
+	(write_hash_table, add_address_entry, write_gdbindex_1)
+	(write_debug_names): Update.
+	* dwarf2/index-common.h (byte_swap, MAYBE_SWAP): Remove.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/index-write.c (write_psymtabs_to_index): Check
+	partial_symtabs.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (psymbol_functions::expand_matching_symbols): Rename
+	from map_matching_symbols.  Change parameters.
+	* psympriv.h (struct psymbol_functions) <expand_matching_symbols>:
+	Rename from map_matching_symbols.  Change parameters.
+	* dwarf2/read.c (struct dwarf2_gdb_index)
+	<expand_matching_symbols>: Rename from map_matching_symbols.
+	Change parameters.
+	(struct dwarf2_debug_names_index) <expand_matching_symbols>:
+	Rename from map_matching_symbols.  Change parameters.
+	(dwarf2_gdb_index::expand_matching_symbols): Rename from
+	dw2_map_matching_symbols.  Change parameters.
+	(dwarf2_gdb_index::expand_matching_symbols): Remove old
+	implementation.
+	(dwarf2_debug_names_index::expand_matching_symbols): Rename from
+	map_matching_symbols.  Change parameters.
+	* objfiles.h (struct objfile) <expand_matching_symbols>: Rename
+	from map_matching_symbols.  Change parameters.
+	* symfile-debug.c (objfile::expand_matching_symbols): Rename from
+	map_matching_symbols.  Change parameters.
+	* ada-lang.c (map_matching_symbols): New function.
+	(add_nonlocal_symbols): Update.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* quick-symbol.h (struct quick_symbol_functions)
+	<expand_symtabs_with_fullname>: Remove.
+	* psymtab.c (psymbol_functions::expand_symtabs_with_fullname):
+	Remove.
+	* psympriv.h (struct psymbol_functions)
+	<expand_symtabs_with_fullname>: Remove.
+	* dwarf2/read.c (struct dwarf2_base_index_functions)
+	<expand_symtabs_with_fullname>: Remove.
+	(dwarf2_base_index_functions::expand_symtabs_with_fullname):
+	Remove.
+	* objfiles.h (struct objfile) <expand_symtabs_with_fullname>:
+	Update comment.
+	* symfile-debug.c (objfile::expand_symtabs_with_fullname):
+	Rewrite.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* symfile-debug.c (objfile::expand_symtabs_for_function):
+	Rewrite.
+	* quick-symbol.h (struct quick_symbol_functions)
+	<expand_symtabs_for_function>: Remove.
+	* psymtab.c (psymbol_functions::expand_symtabs_for_function):
+	Remove.
+	* psympriv.h (struct psymbol_functions)
+	<expand_symtabs_for_function>: Remove.
+	* objfiles.h (struct objfile) <expand_symtabs_for_function>:
+	Update comment.
+	* dwarf2/read.c (struct dwarf2_gdb_index)
+	<expand_symtabs_for_function>: Remove.
+	(struct dwarf2_debug_names_index) <expand_symtabs_for_function>:
+	Remove.
+	(find_slot_in_mapped_hash): Remove.
+	(dw2_symtab_iter_init_common): Merge with dw2_symtab_iter_init.
+	(dw2_symtab_iter_init): Remove one overload.
+	(dwarf2_gdb_index::expand_symtabs_for_function)
+	(dwarf2_debug_names_index::expand_symtabs_for_function): Remove.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* symfile-debug.c (objfile::map_symtabs_matching_filename):
+	Rewrite.
+	* quick-symbol.h (struct quick_symbol_functions)
+	<map_symtabs_matching_filename>: Remove.
+	* psymtab.c (partial_map_expand_apply)
+	(psymbol_functions::map_symtabs_matching_filename): Remove.
+	* psympriv.h (struct psymbol_functions)
+	<map_symtabs_matching_filename>: Remove.
+	* objfiles.h (struct objfile) <map_symtabs_matching_filename>:
+	Update comment.
+	* dwarf2/read.c (struct dwarf2_base_index_functions)
+	<map_symtabs_matching_filename>: Remove.
+	(dw2_map_expand_apply)
+	(dwarf2_base_index_functions::map_symtabs_matching_filename):
+	Remove.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* symfile-debug.c (objfile::lookup_symbol): Rewrite.
+	* quick-symbol.h (struct quick_symbol_functions) <lookup_symbol>:
+	Remove.
+	* psymtab.c (psymbol_functions::lookup_symbol): Remove.
+	* psympriv.h (struct psymbol_functions) <lookup_symbol>: Remove.
+	* objfiles.h (struct objfile) <lookup_symbol>: Add comment.
+	* dwarf2/read.c (struct dwarf2_gdb_index) <lookup_symbol>:
+	Remove.
+	(struct dwarf2_debug_names_index) <lookup_symbol>: Remove.
+	(dwarf2_gdb_index::lookup_symbol)
+	(dwarf2_debug_names_index::lookup_symbol): Remove.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (global_symbol_searcher::expand_symtabs): Update.
+	* symmisc.c (maintenance_expand_symtabs): Update.
+	* symfile.c (expand_symtabs_matching): Update.
+	* symfile-debug.c (objfile::expand_symtabs_matching): Add 'domain'
+	parameter.
+	* quick-symbol.h (struct quick_symbol_functions)
+	<expand_symtabs_matching>: Add 'domain' parameter.
+	* psymtab.c (recursively_search_psymtabs)
+	(psymbol_functions::expand_symtabs_matching): Add 'domain'
+	parameter.
+	* psympriv.h (struct psymbol_functions) <expand_symtabs_matching>:
+	Add 'domain' parameter.
+	* objfiles.h (struct objfile) <expand_symtabs_matching>: Add
+	'domain' parameter.
+	* linespec.c (iterate_over_all_matching_symtabs): Update.
+	* dwarf2/read.c (struct dwarf2_gdb_index)
+	<expand_symtabs_matching>: Add 'domain' parameter.
+	(struct dwarf2_debug_names_index) <expand_symtabs_matching>: Add
+	'domain' parameter.
+	(dw2_expand_symtabs_matching)
+	(dwarf2_gdb_index::expand_symtabs_matching)
+	(dw2_debug_names_iterator)
+	(dwarf2_debug_names_index::expand_symtabs_matching): Add 'domain'
+	parameter.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (global_symbol_searcher::expand_symtabs)
+	(default_collect_symbol_completion_matches_break_on): Update.
+	* symmisc.c (maintenance_expand_symtabs): Update.
+	* symfile.h (expand_symtabs_matching): Add search_flags
+	parameter.
+	* symfile.c (expand_symtabs_matching): Add search_flags
+	parameter.
+	* symfile-debug.c (objfile::expand_symtabs_matching): Add
+	search_flags parameter.
+	* quick-symbol.h (struct quick_symbol_functions)
+	<expand_symtabs_matching>: Add search_flags parameter.
+	* python/py-symbol.c (gdbpy_lookup_static_symbols): Update.
+	* psymtab.c (recursively_search_psymtabs)
+	(psymbol_functions::expand_symtabs_matching): Add search_flags
+	parameter.
+	* psympriv.h (struct psymbol_functions) <expand_symtabs_matching>:
+	Add search_flags parameter.
+	* objfiles.h (struct objfile) <expand_symtabs_matching>: Add
+	search_flags parameter.
+	* linespec.c (iterate_over_all_matching_symtabs): Update.
+	* dwarf2/read.c (struct dwarf2_gdb_index)
+	<expand_symtabs_matching>: Add search_flags parameter.
+	(struct dwarf2_debug_names_index) <expand_symtabs_matching>: Add
+	search_flags parameter.
+	(dw2_map_matching_symbols): Update.
+	(dw2_expand_marked_cus, dw2_expand_symtabs_matching)
+	(dwarf2_gdb_index::expand_symtabs_matching): Add search_flags
+	parameter.
+	(dw2_debug_names_iterator): Change block_index to search flags.
+	<m_block_index>: Likewise.
+	(dw2_debug_names_iterator::next)
+	(dwarf2_debug_names_index::lookup_symbol)
+	(dwarf2_debug_names_index::expand_symtabs_for_function)
+	(dwarf2_debug_names_index::map_matching_symbols)
+	(dwarf2_debug_names_index::map_matching_symbols): Update.
+	(dwarf2_debug_names_index::expand_symtabs_matching): Add
+	search_flags parameter.
+	* ada-lang.c (ada_add_global_exceptions)
+	(collect_symbol_completion_matches): Update.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (default_collect_symbol_completion_matches_break_on):
+	Update.
+	* symfile.h (expand_symtabs_matching): Return bool.
+	* symfile.c (expand_symtabs_matching): Return bool.
+	* symfile-debug.c (objfile::expand_symtabs_matching): Return
+	bool.
+	* quick-symbol.h (expand_symtabs_exp_notify_ftype): Return bool.
+	(struct quick_symbol_functions) <expand_symtabs_matching>: Return
+	bool.
+	* psymtab.c (psymbol_functions::expand_symtabs_matching): Return
+	bool.
+	* psympriv.h (struct psymbol_functions)
+	<expand_symtabs_matching>: Return bool.
+	* objfiles.h (struct objfile) <expand_symtabs_matching>: Return
+	bool.
+	* dwarf2/read.c (struct dwarf2_gdb_index)
+	<expand_symtabs_matching>: Return bool.
+	(struct dwarf2_debug_names_index) <expand_symtabs_matching>:
+	Return bool.
+	(dw2_expand_symtabs_matching_symbol): Return bool.
+	(dw2_expand_symtabs_matching_one, dw2_expand_marked_cus)
+	(dw2_expand_symtabs_matching)
+	(dwarf2_gdb_index::expand_symtabs_matching)
+	(dwarf2_debug_names_index::expand_symtabs_matching)
+	(dwarf2_debug_names_index::expand_symtabs_matching): Return bool.
+
+2021-04-17  Tom Tromey  <tom@tromey.com>
+
+	* quick-symbol.h (enum block_search_flag_values): New.
+	(block_search_flags): New enum flags type.
+
+2021-04-16  Tom Tromey  <tom@tromey.com>
+
+	* rust-parse.c: New file.
+	* rust-exp.y: Remove.
+	* Makefile.in (COMMON_SFILES): Add rust-parse.c.
+	(SFILES): Remove rust-exp.y.
+	(YYFILES, local-maintainer-clean): Remove rust-exp.c.
+
+2021-04-16  Luis Machado  <luis.machado@linaro.org>
+
+	* arch-utils.c (default_floatformat_for_type): Handle bfloat16.
+
+2021-04-15  John Baldwin  <jhb@FreeBSD.org>
+
+	* fbsd-nat.c (fbsd_lwp_debug_printf, fbsd_nat_debug_printf): New,
+	use throughout file.
+
+2021-04-15  Tom Tromey  <tromey@adacore.com>
+
+	* ada-valprint.c (ada_value_print_array): Handle optimized-out
+	arrays.
+
+2021-04-15  Tom Tromey  <tromey@adacore.com>
+
+	* printcmd.c (print_variable_and_value): Use
+	common_val_print_checked.
+
+2021-04-15  Tom Tromey  <tromey@adacore.com>
+
+	* rust-exp.y (rust_parser::convert_ast_to_expression): Update.
+	* parse.c (parser_state::push_symbol, parser_state::push_dollar):
+	Update.
+	* p-exp.y (variable): Update.
+	* m2-exp.y (variable): Update.
+	* go-exp.y (variable): Update.
+	* expprint.c (dump_for_expression): New overload.
+	* expop.h (check_objfile): New overload.
+	(check_constant): New overload.
+	(class var_value_operation): Use block_symbol.
+	<get_symbol>: Rewrite.
+	* eval.c (var_value_operation::evaluate)
+	(var_value_operation::evaluate_funcall)
+	(var_value_operation::evaluate_for_address)
+	(var_value_operation::evaluate_for_address)
+	(var_value_operation::evaluate_with_coercion)
+	(var_value_operation::evaluate_for_sizeof)
+	(var_value_operation::evaluate_for_cast): Update.
+	* d-exp.y (PrimaryExpression): Update.
+	* c-exp.y (variable): Update.
+	* ax-gdb.c (var_value_operation::do_generate_ax): Update.
+	* ada-lang.c (ada_var_value_operation::evaluate_for_cast)
+	(ada_var_value_operation::evaluate)
+	(ada_var_value_operation::resolve)
+	(ada_funcall_operation::resolve): Update.
+	* ada-exp.y (write_var_from_sym, write_object_renaming)
+	(write_ambiguous_var, write_var_or_type, write_name_assoc)
+	(maybe_overload): Update.
+	* ada-exp.h (class ada_var_value_operation) <get_block>: Rewrite.
+
+2021-04-15  Tom Tromey  <tom@tromey.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Add entry.
+	* main.c (captured_main_1): Call check_quiet_mode.
+	* top.c (startup_quiet): New global.
+	(check_quiet_mode): New function.
+	(show_startup_quiet): New function.
+	(init_main): Register new command.
+	* top.h (check_quiet_mode): Declare.
+
+2021-04-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR cli/25956
+	* NEWS: Mention new early init files and command line options.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: Define GDBEARLYINIT.
+	* main.c (get_earlyinit_files): New function.
+	(enum cmdarg_kind): Add CMDARG_EARLYINIT_FILE and
+	CMDARG_EARLYINIT_COMMAND.
+	(captured_main_1): Add support for new command line flags, and for
+	processing startup files.
+	(print_gdb_help): Include startup files in the output.
+
+2021-04-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* main.c (relocate_gdbinit_path_maybe_in_datadir): Rename to...
+	(relocate_file_path_maybe_in_datadir): ...this.
+	(class gdb_initfile_finder): New class.
+	(get_init_files): Now uses gdb_initfile_finder.
+	(print_gdb_help): Print 'None found' when there are no init files.
+
+2021-04-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* dwarf2/read.c (inherit_abstract_dies): Keep a reference to the
+	corresponding child of the abstract DIE when iterating the
+	children of the concrete DIE.
+
+2021-04-13  Tom de Vries  <tdevries@suse.de>
+
+	* ui-style.c (read_semi_number, extended_color): Change idx parameter
+	type to regoff_t *.
+
+2021-04-13  Luis Machado  <luis.machado@linaro.org>
+
+	* rs6000-tdep.c (ppc_displaced_step_fixup): Use %s to print
+	hex values.
+
+2021-04-12  Will Schmidt  <will_schmidt@vnet.ibm.com>
+
+	* rs6000-tdep.c:  Add support for single-stepping of
+	prefixed instructions.
+
+2021-04-12  Will Schmidt  <will_schmidt@vnet.ibm.com>
+
+	PR gdb/27525
+	* gdb/rs6000-tdep.c (ppc_displaced_step_fixup): Update to
+	handle the addpcis/lnia instruction.
+
+2021-04-05  Will Schmidt  <will_schmidt@vnet.ibm.com>
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2021-4-12  Carl Love  <cel@us.ibm.com>
+
+	* rs6000-tdep.c (rs6000_builtin_type_vec128): Add t_float128 variable.
+	(rs6000_builtin_type_vec128): Add append_composite_type_field for
+	float128.
+
+2021-04-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* nat/windows-nat.c: Remove all code guarded by _WIN32_WCE.
+	* nat/windows-nat.h: Likewise.
+
+2021-04-10  Eli Zaretskii  <eliz@gnu.org>
+
+	* windows-nat.c (windows_nat::handle_load_dll): Call
+	windows_add_dll if get_image_name failed to glean the name of the
+	DLL by using the lpImageName pointer.
+	(windows_add_all_dlls): Now a thin wrapper around windows_add_dll.
+	(windows_add_dll): Now does what windows_add_all_dlls did before,
+	but also accepts an argument LOAD_ADDR, which, if non-NULL,
+	specifies the address where the DLL was loaded into the inferior,
+	and looks for the single DLL loaded at that address.
+
+2021-04-09  Luis Machado  <luis.machado@linaro.org>
+
+	* nat/aarch64-mte-linux-ptrace.c: Update include file order.
+
+2021-04-08  Dominique Quatravaux  <dominique.quatravaux@epfl.ch>
+
+	* darwin-nat.c (darwin_nat_target::resume): Remove status
+	variable.
+
+2021-04-08  Felix Willgerodt  <felix.willgerodt@intel.com>
+
+	* i386-tdep.c (i386_skip_prologue): Use symbol table to find the
+	prologue end for Intel compilers.
+	* amd64-tdep.c (amd64_skip_prologue): Likewise.
+	* producer.c (producer_is_icc_ge_19): New function.
+	* producer.h (producer_is_icc_ge_19): New declaration.
+
+2021-04-08  Felix Willgerodt  <felix.willgerodt@intel.com>
+
+	* producer.c: (producer_is_icc): Update for new version scheme.
+	(producer_parsing_tests): Update names and expected results.
+	* producer.h: (producer_is_icc): Update comment accordingly.
+
+2021-04-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.h (struct target_ops) <follow_fork>: Return void.
+	(target_follow_fork): Likewise.
+	* target.c (default_follow_fork): Likewise.
+	(target_follow_fork): Likewise.
+	* infrun.c (follow_fork_inferior): Adjust.
+	* fbsd-nat.h (class fbsd_nat_target) <follow_fork>: Return void.
+	* fbsd-nat.c (fbsd_nat_target:::follow_fork): Likewise.
+	* linux-nat.h (class linux_nat_target) <follow_fork>: Likewise.
+	* linux-nat.c (linux_nat_target::follow_fork): Return void.
+	* obsd-nat.h (class obsd_nat_target) <follow_fork>: Return void.
+	* obsd-nat.c (obsd_nat_target::follow_fork): Likewise.
+	* remote.c (class remote_target) <follow_fork>: Likewise.
+	(remote_target::follow_fork): Likewise.
+	* target-delegates.c: Re-generate.
+
+2021-04-07  Weimin Pan  <weimin.pan@oracle.com>
+
+	* ctfread.c (fetch_tid_type): New function, use throughout file.
+	(read_forward_type): New function.
+	(read_type_record): Call read_forward_type.
+
+2021-04-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.h (class fortran_structop_operation): New class.
+	* f-exp.y (exp): Create fortran_structop_operation instead of the
+	generic structop_operation.
+	* f-lang.c (fortran_undetermined::evaluate): Re-evaluate
+	expression as EVAL_NORMAL if the result type was dynamic so we can
+	extract the actual array bounds.
+	(fortran_structop_operation::evaluate): New function.
+
+2021-04-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* eval.c (evaluate_subexp_standard): Remove
+	EVAL_AVOID_SIDE_EFFECTS handling from STRUCTOP_STRUCT and
+	STRUCTOP_PTR.
+
+2021-04-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* valops.c (value_cast): Call value_deeply_equal before performing
+	any cast.
+
+2021-04-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbtypes.c (types_equal): Move pointer equality check earlier in
+	the function.
+
+2021-04-07  Caroline Tice  <cmtice@google.com>
+
+	* dwarf2/read.c (try_open_dwop_file): Add path for the binary to
+	the search paths used resolve relative location of .dwo file.
+
+2021-04-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2/section.c (dwarf2_section_info::get_bfd_owner): Add an
+	assert.
+	(dwarf2_section_info::get_file_name): Add an assert.
+	(dwarf2_section_info::read_string): Display a minimal, sane error
+	when the dwarf2_section_info is not associated with a bfd section.
+
+2021-04-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* top.c (staged_gdb_datadir): Update comment.
+	(set_gdb_datadir): Copy the value of gdb_datadir back into
+	staged_datadir.
+	(init_main): Initialise staged_gdb_datadir.
+
+2021-04-06  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoints/25884
+	* infcmd.c (prepare_one_step): Using inline frame info to narrow
+	stepping range.
+
+2021-04-06  Tom de Vries  <tdevries@suse.de>
+
+	PR tui/27680
+	* tui/tui-disasm.c (len_without_escapes): Pass ptr pointing at escape
+	to style.parse.
+
+2021-04-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* avr-tdep.c (avr_frame_unwind_cache): Use
+	trad_frame_saved_reg::is_addr.
+
+2021-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* objfiles.c (get_objfile_bfd_data): Remove objfile parameter,
+	adjust callers.
+
+2021-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* psympriv.h (struct partial_symtab) <partial_symtab>: Change
+	objfile parameter for objfile_per_bfd_storage, adjust callers.
+	(struct standard_psymtab) <standard_psymtab>: Likewise.
+	(struct legacy_psymtab) <legacy_psymtab>: Likewise.
+	* psymtab.c (partial_symtab::partial_symtab): Likewise.
+	* ctfread.c (struct ctf_psymtab): Likewise.
+	* dwarf2/read.h (struct dwarf2_psymtab): Likewise.
+	* dwarf2/read.c (struct dwarf2_include_psymtab): Likewise.
+	(dwarf2_create_include_psymtab): Likewise.
+	* objfiles.h (struct objfile_per_bfd_storage)
+	<objfile_per_bfd_storage>: Add bfd parameter, adjust callers.
+	<get_bfd>: New method.
+	<m_bfd>: New field.
+	* objfiles.c (get_objfile_bfd_data): Adjust.
+
+2021-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* psymtab.c (partial_symtab::partial_symtab): Change
+	last_objfile_name to be an std::string.
+	* symfile.c (allocate_symtab): Likewise.
+
+2021-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* objfiles.h (struct objfile_per_bfd_storage) <intern>: New
+	methods.
+	(struct objfile) <intern>: Use
+	objfile::objfile_per_bfd_storage::intern.
+
+2021-04-01  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_FLAG_ENUM): Remove, replace all uses
+	with type::is_flag_enum.
+
+2021-04-01  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <is_flag_enum,
+	set_is_flag_enum>: New methods.
+	(TYPE_FLAG_ENUM): Use type::is_flag_enum, change all
+	write call sites to use type::set_is_flag_enum.
+
+2021-04-01  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_DECLARED_CLASS): Remove, replace all uses
+	with type::is_declared_class.
+
+2021-04-01  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (struct type) <is_declared_class,
+	set_is_declared_class>: New methods.
+	(TYPE_DECLARED_CLASS): Use type::is_declared_class, change all
+	write call sites to use type::set_is_declared_class.
+
+2021-02-28  Boris Staletic  <boris.staletic@gmail.com>
+
+	* gdb/python/lib/gdb/__init__.py: Use importlib on python 3.4+
+	to avoid deprecation warnings.
+
+2021-04-01  Martin Liska  <mliska@suse.cz>
+
+	* cp-name-parser.y: Use startswith instead of strncmp.
+	* m2-exp.y: Likewise.
+	* macroexp.c (substitute_args): Likewise.
+	* mi/mi-main.c (command_notifies_uscc_observer): Likewise.
+	* rust-exp.y: Likewise.
+
+2021-03-31  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_gdb_index::map_matching_symbols): Merge
+	with dw2_map_matching_symbols.
+	(dwarf2_gdb_index::expand_symtabs_matching): Merge with
+	dw2_expand_symtabs_matching.
+
+2021-03-31  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/stringify.h: Fix typo.
+
+2021-03-30  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/27541
+	* dwarf2/read.c (dwarf2_has_info): Don't share dwarf2_per_bfd
+	with objfiles using READNOW.
+
+2021-03-29  Tom Tromey  <tromey@adacore.com>
+
+	* top.c (check_frame_language_change): Update.
+	* language.c (language_info): Remove parameter.
+	* language.h (language_info): Remove parameter.
+
+2021-03-29  Luis Machado  <luis.machado@linaro.org>
+
+	* compile/compile.c (get_args): Don't add empty argv entries.
+
+2021-03-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	gdb:
+	* procfs.c (procfs_target::attach): Define inf.
+	Use it.
+	(procfs_target::create_inferior): Likewise.
+
+2021-03-28  Tom Tromey  <tom@tromey.com>
+
+	* elfread.c (can_lazily_read_symbols): Move to dwarf2/read.c.
+	(elf_symfile_read): Simplify.
+	* dwarf2/read.c (struct lazy_dwarf_reader): Move from elfread.c.
+	(make_lazy_dwarf_reader): New function.
+	(make_dwarf_gdb_index, make_dwarf_debug_names): Now static.
+	(dwarf2_initialize_objfile): Return void.  Remove index_kind
+	parameter.  Push on 'qf' list.
+	* dwarf2/public.h (dwarf2_initialize_objfile): Change return
+	type.  Remove 'index_kind' parameter.
+	(make_dwarf_gdb_index, make_dwarf_debug_names): Don't declare.
+
+2021-03-27  Tom Tromey  <tom@tromey.com>
+
+	* elfread.c (elf_sym_fns_lazy_psyms): Don't declare.
+
+2021-03-27  Tom Tromey  <tom@tromey.com>
+
+	* elfread.c (elf_symfile_read): Don't clear 'qf'.
+
+2021-03-26  Lancelot Six  <lsix@lancelotsix.com>
+
+	* contrib/gdb-add-index.sh: Avoid variable shadowing and get
+	rid of 'local'.
+
+2021-03-26  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (struct output_source_filename_data): Add 'output'
+	method and operator().
+	(output_source_filename_data::output): Rename from
+	output_source_filename.
+	(output_partial_symbol_filename): Remove.
+	(info_sources_command): Update.
+	(struct add_partial_filename_data): Add operator().
+	(add_partial_filename_data::operator()): Rename from
+	maybe_add_partial_symtab_filename.
+	(make_source_files_completion_list): Update.
+	* symfile.c (quick_symbol_functions): Update.
+	* symfile-debug.c (objfile::map_symbol_filenames): Update.
+	* quick-symbol.h (symbol_filename_ftype): Change type of 'fun' and
+	'need_fullname'.  Remove 'data' parameter.
+	(struct quick_symbol_functions) <map_symbol_filenames>: Likewise.
+	* psymtab.c (psymbol_functions::map_symbol_filenames): Update.
+	* psympriv.h (struct psymbol_functions) <map_symbol_filenames>:
+	Change type of 'fun' and 'need_fullname'.  Remove 'data'
+	parameter.
+	* objfiles.h (struct objfile) <map_symbol_filenames>: Change type
+	of 'fun' and 'need_fullname'.  Remove 'data' parameter.
+	* mi/mi-cmd-file.c (print_partial_file_name): Remove 'ignore'
+	parameter.
+	(mi_cmd_file_list_exec_source_files): Update.
+	* dwarf2/read.c
+	(dwarf2_base_index_functions::map_symbol_filenames): Update.
+
+2021-03-26  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (struct match_data): Add operator().
+	(match_data::operator()): Rename from aux_add_nonlocal_symbols.
+	(callback): Remove 'callback'.
+
+2021-03-26  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (psymbol_functions::expand_symtabs_matching): Only
+	call make_ignore_params once.
+
+2021-03-26  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (psymbol_functions::expand_symtabs_matching): Remove
+	"user" check.
+
+2021-03-26  Simon Marchi  <simon.marchi@efficios.com>
+	    Pedro Alves  <pedro@palves.net>
+
+	* async-event.c: Include "infrun.h".
+	(async_event_handler_marked): New.
+	* async-event.h (async_event_handler_marked): Declare.
+	* infrun.c (maybe_set_commit_resumed_all_targets): Switch to
+	inferior before calling target method.  Don't commit-resumed if
+	target_has_pending_events is true.
+	* remote.c (remote_target::has_pending_events): New.
+	* target-delegates.c: Regenerate.
+	* target.c (target_has_pending_events): New.
+	* target.h (target_ops::has_pending_events): New target method.
+	(target_has_pending_events): New.
+
+2021-03-26  Simon Marchi  <simon.marchi@efficios.com>
+	    Pedro Alves  <pedro@palves.net>
+
+	* infcmd.c (run_command_1, attach_command, detach_command)
+	(interrupt_target_1): Use scoped_disable_commit_resumed.
+	* infrun.c (do_target_resume): Remove
+	target_commit_resume call.
+	(commit_resume_all_targets): Remove.
+	(maybe_set_commit_resumed_all_targets): New.
+	(maybe_call_commit_resumed_all_targets): New.
+	(enable_commit_resumed): New.
+	(scoped_disable_commit_resumed::scoped_disable_commit_resumed)
+	(scoped_disable_commit_resumed::~scoped_disable_commit_resumed)
+	(scoped_disable_commit_resumed::reset)
+	(scoped_disable_commit_resumed::reset_and_commit)
+	(scoped_enable_commit_resumed::scoped_enable_commit_resumed)
+	(scoped_enable_commit_resumed::~scoped_enable_commit_resumed):
+	New.
+	(proceed): Use scoped_disable_commit_resumed and
+	maybe_call_commit_resumed_all_targets.
+	(fetch_inferior_event): Use scoped_disable_commit_resumed.
+	* infrun.h (struct scoped_disable_commit_resumed): New.
+	(maybe_call_commit_resumed_all_process_targets): New.
+	(struct scoped_enable_commit_resumed): New.
+	* mi/mi-main.c (exec_continue): Use scoped_disable_commit_resumed.
+	* process-stratum-target.h (class process_stratum_target):
+	<commit_resumed_state>: New.
+	* record-full.c (record_full_wait_1): Change commit_resumed_state
+	around calling commit_resumed.
+	* remote.c (class remote_target) <commit_resume>: Rename to...
+	<commit_resumed>: ... this.
+	(struct stop_reply): Move up.
+	(remote_target::commit_resume): Rename to...
+	(remote_target::commit_resumed): ... this.  Check if there is any
+	thread pending vCont resume.
+	(remote_target::remote_stop_ns): Generate stop replies for resumed
+	but pending vCont threads.
+	(remote_target::wait_ns): Add gdb_assert.
+	* target-delegates.c: Regenerate.
+	* target.c (target_wait, target_resume): Assert that the current
+	process_stratum target isn't in commit-resumed state.
+	(defer_target_commit_resume): Remove.
+	(target_commit_resume): Remove.
+	(target_commit_resumed): New.
+	(make_scoped_defer_target_commit_resume): Remove.
+	(target_stop): Assert that the current process_stratum target
+	isn't in commit-resumed state.
+	* target.h (struct target_ops) <commit_resume>: Rename to ...
+	 <commit_resumed>: ... this.
+	(target_commit_resume): Remove.
+	(target_commit_resumed): New.
+	(make_scoped_defer_target_commit_resume): Remove.
+	* top.c (wait_sync_command_done): Use
+	scoped_enable_commit_resumed.
+
+2021-03-26  Pedro Alves  <pedro@palves.net>
+
+	* target.c (target_always_non_stop_p): Also check whether the
+	target can async.
+
+2021-03-26  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_read_debug_names)
+	(dwarf2_build_psymtabs_hard, create_addrmap_from_aranges)
+	(dw2_debug_names_iterator::next, create_type_unit_group):
+	Simplify.
+
+2021-03-25  Pedro Alves  <pedro@palves.net>
+
+	* gdb.server/bkpt-other-inferior.exp: Only enable remote output
+	around setting the breakpoint.
+
+2021-03-25  Pedro Alves  <pedro@palves.net>
+
+	* remote.c
+	(remote_target::check_pending_events_prevent_wildcard_vcont):
+	Check whether the event's ptid is not null_ptid before looking up
+	the corresponding inferior.
+
+2021-03-24  Changbin Du  <changbin.du@gmail.com>
+
+	* riscv-tdep.c (riscv_breakpoint_kind_from_pc): Remove call to
+	read_code.
+
+2021-03-24  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.h (current_top_target): Remove, make callers use the
+	current inferior instead.
+	* target.c (current_top_target): Remove.
+
+2021-03-24  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.h (target_shortname): Change to function declaration.
+	(target_longname): Likewise.
+	(target_attach_no_wait): Likewise.
+	(target_post_attach): Likewise.
+	(target_prepare_to_store): Likewise.
+	(target_supports_enable_disable_tracepoint): Likewise.
+	(target_supports_string_tracing): Likewise.
+	(target_supports_evaluation_of_breakpoint_conditions): Likewise.
+	(target_supports_dumpcore): Likewise.
+	(target_dumpcore): Likewise.
+	(target_can_run_breakpoint_commands): Likewise.
+	(target_files_info): Likewise.
+	(target_post_startup_inferior): Likewise.
+	(target_insert_fork_catchpoint): Likewise.
+	(target_remove_fork_catchpoint): Likewise.
+	(target_insert_vfork_catchpoint): Likewise.
+	(target_remove_vfork_catchpoint): Likewise.
+	(target_insert_exec_catchpoint): Likewise.
+	(target_remove_exec_catchpoint): Likewise.
+	(target_set_syscall_catchpoint): Likewise.
+	(target_rcmd): Likewise.
+	(target_can_lock_scheduler): Likewise.
+	(target_can_async_p): Likewise.
+	(target_is_async_p): Likewise.
+	(target_execution_direction): Likewise.
+	(target_extra_thread_info): Likewise.
+	(target_pid_to_exec_file): Likewise.
+	(target_thread_architecture): Likewise.
+	(target_find_memory_regions): Likewise.
+	(target_make_corefile_notes): Likewise.
+	(target_get_bookmark): Likewise.
+	(target_goto_bookmark): Likewise.
+	(target_stopped_by_watchpoint): Likewise.
+	(target_stopped_by_sw_breakpoint): Likewise.
+	(target_supports_stopped_by_sw_breakpoint): Likewise.
+	(target_stopped_by_hw_breakpoint): Likewise.
+	(target_supports_stopped_by_hw_breakpoint): Likewise.
+	(target_have_steppable_watchpoint): Likewise.
+	(target_can_use_hardware_watchpoint): Likewise.
+	(target_region_ok_for_hw_watchpoint): Likewise.
+	(target_can_do_single_step): Likewise.
+	(target_insert_watchpoint): Likewise.
+	(target_remove_watchpoint): Likewise.
+	(target_insert_hw_breakpoint): Likewise.
+	(target_remove_hw_breakpoint): Likewise.
+	(target_can_accel_watchpoint_condition): Likewise.
+	(target_can_execute_reverse): Likewise.
+	(target_get_ada_task_ptid): Likewise.
+	(target_filesystem_is_local): Likewise.
+	(target_trace_init): Likewise.
+	(target_download_tracepoint): Likewise.
+	(target_can_download_tracepoint): Likewise.
+	(target_download_trace_state_variable): Likewise.
+	(target_enable_tracepoint): Likewise.
+	(target_disable_tracepoint): Likewise.
+	(target_trace_start): Likewise.
+	(target_trace_set_readonly_regions): Likewise.
+	(target_get_trace_status): Likewise.
+	(target_get_tracepoint_status): Likewise.
+	(target_trace_stop): Likewise.
+	(target_trace_find): Likewise.
+	(target_get_trace_state_variable_value): Likewise.
+	(target_save_trace_data): Likewise.
+	(target_upload_tracepoints): Likewise.
+	(target_upload_trace_state_variables): Likewise.
+	(target_get_raw_trace_data): Likewise.
+	(target_get_min_fast_tracepoint_insn_len): Likewise.
+	(target_set_disconnected_tracing): Likewise.
+	(target_set_circular_trace_buffer): Likewise.
+	(target_set_trace_buffer_size): Likewise.
+	(target_set_trace_notes): Likewise.
+	(target_get_tib_address): Likewise.
+	(target_set_permissions): Likewise.
+	(target_static_tracepoint_marker_at): Likewise.
+	(target_static_tracepoint_markers_by_strid): Likewise.
+	(target_traceframe_info): Likewise.
+	(target_use_agent): Likewise.
+	(target_can_use_agent): Likewise.
+	(target_augmented_libraries_svr4_read): Likewise.
+	(target_log_command): Likewise.
+	* target.c (target_shortname): New.
+	(target_longname): New.
+	(target_attach_no_wait): New.
+	(target_post_attach): New.
+	(target_prepare_to_store): New.
+	(target_supports_enable_disable_tracepoint): New.
+	(target_supports_string_tracing): New.
+	(target_supports_evaluation_of_breakpoint_conditions): New.
+	(target_supports_dumpcore): New.
+	(target_dumpcore): New.
+	(target_can_run_breakpoint_commands): New.
+	(target_files_info): New.
+	(target_post_startup_inferior): New.
+	(target_insert_fork_catchpoint): New.
+	(target_remove_fork_catchpoint): New.
+	(target_insert_vfork_catchpoint): New.
+	(target_remove_vfork_catchpoint): New.
+	(target_insert_exec_catchpoint): New.
+	(target_remove_exec_catchpoint): New.
+	(target_set_syscall_catchpoint): New.
+	(target_rcmd): New.
+	(target_can_lock_scheduler): New.
+	(target_can_async_p): New.
+	(target_is_async_p): New.
+	(target_execution_direction): New.
+	(target_extra_thread_info): New.
+	(target_pid_to_exec_file): New.
+	(target_thread_architecture): New.
+	(target_find_memory_regions): New.
+	(target_make_corefile_notes): New.
+	(target_get_bookmark): New.
+	(target_goto_bookmark): New.
+	(target_stopped_by_watchpoint): New.
+	(target_stopped_by_sw_breakpoint): New.
+	(target_supports_stopped_by_sw_breakpoint): New.
+	(target_stopped_by_hw_breakpoint): New.
+	(target_supports_stopped_by_hw_breakpoint): New.
+	(target_have_steppable_watchpoint): New.
+	(target_can_use_hardware_watchpoint): New.
+	(target_region_ok_for_hw_watchpoint): New.
+	(target_can_do_single_step): New.
+	(target_insert_watchpoint): New.
+	(target_remove_watchpoint): New.
+	(target_insert_hw_breakpoint): New.
+	(target_remove_hw_breakpoint): New.
+	(target_can_accel_watchpoint_condition): New.
+	(target_can_execute_reverse): New.
+	(target_get_ada_task_ptid): New.
+	(target_filesystem_is_local): New.
+	(target_trace_init): New.
+	(target_download_tracepoint): New.
+	(target_can_download_tracepoint): New.
+	(target_download_trace_state_variable): New.
+	(target_enable_tracepoint): New.
+	(target_disable_tracepoint): New.
+	(target_trace_start): New.
+	(target_trace_set_readonly_regions): New.
+	(target_get_trace_status): New.
+	(target_get_tracepoint_status): New.
+	(target_trace_stop): New.
+	(target_trace_find): New.
+	(target_get_trace_state_variable_value): New.
+	(target_save_trace_data): New.
+	(target_upload_tracepoints): New.
+	(target_upload_trace_state_variables): New.
+	(target_get_raw_trace_data): New.
+	(target_get_min_fast_tracepoint_insn_len): New.
+	(target_set_disconnected_tracing): New.
+	(target_set_circular_trace_buffer): New.
+	(target_set_trace_buffer_size): New.
+	(target_set_trace_notes): New.
+	(target_get_tib_address): New.
+	(target_set_permissions): New.
+	(target_static_tracepoint_marker_at): New.
+	(target_static_tracepoint_markers_by_strid): New.
+	(target_traceframe_info): New.
+	(target_use_agent): New.
+	(target_can_use_agent): New.
+	(target_augmented_libraries_svr4_read): New.
+	(target_log_command): New.
+	* bfin-tdep.c (bfin_sw_breakpoint_from_kind): Adjust.
+	* infrun.c (set_schedlock_func): Adjust.
+	* mi/mi-main.c (exec_reverse_continue): Adjust.
+	* reverse.c (exec_reverse_once): Adjust.
+	* sh-tdep.c (sh_sw_breakpoint_from_kind): Adjust.
+	* tui/tui-stack.c (tui_locator_window::make_status_line): Adjust.
+	* remote-sim.c (gdbsim_target::detach): Adjust.
+	(gdbsim_target::files_info): Adjust.
+
+2021-03-24  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dw2_map_matching_symbols): Update.
+	(dw2_expand_symtabs_matching_symbol): Remove 'kind' parameter.
+	(check_match, dw2_expand_symtabs_matching)
+	(dwarf2_debug_names_index::map_matching_symbols)
+	(dwarf2_debug_names_index::expand_symtabs_matching): Update.
+
+2021-03-24  Keith Seitz  <keiths@redhat.com>
+
+	* compile/compile-cplus-types.c
+	(compile_cplus_convert_struct_or_union): Fix TYPE_DECLARED_CLASS
+	thinko.
+
+2021-03-24  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbarch.sh (gdbarch_data_registry): Make static.
+	* gdbarch.c: Re-generate.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* NEWS: Mention memory tagging changes.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* printcmd.c (decode_format): Handle the 'm' modifier.
+	(do_examine): Display allocation tags when required/supported.
+	(should_validate_memtags): New function.
+	(print_command_1): Display memory tag mismatches.
+	* valprint.c (show_memory_tag_violations): New function.
+	(value_print_option_defs): Add new option "memory-tag-violations".
+	(user_print_options) <memory_tag_violations>: Initialize to 1.
+	* valprint.h (struct format_data) <print_tags>: New field.
+	(value_print_options) <memory_tag_violations>: New field.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* printcmd.c: Include gdbsupport/rsp-low.h.
+	(memory_tag_list): New static global.
+	(process_print_command_args): Factored out of
+	print_command_1.
+	(print_command_1): Use process_print_command_args.
+	(show_addr_not_tagged, show_memory_tagging_unsupported)
+	(memory_tag_command, memory_tag_print_tag_command)
+	(memory_tag_print_logical_tag_command)
+	(memory_tag_print_allocation_tag_command, parse_with_logical_tag_input)
+	(memory_tag_with_logical_tag_command, parse_set_allocation_tag_input)
+	(memory_tag_set_allocation_tag_command, memory_tag_check_command): New
+	functions.
+	(_initialize_printcmd): Add "memory-tag" prefix and subcommands.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-tdep.c
+	(aarch64_linux_iterate_over_regset_sections): Handle MTE register set.
+	* aarch64-linux-tdep.h (AARCH64_LINUX_SIZEOF_MTE_REGSET): Define.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-tdep.c
+	(aarch64_linux_report_signal_info): New function.
+	(aarch64_linux_init_abi): Register
+	aarch64_linux_report_signal_info as the report_signal_info hook.
+	* arch/aarch64-linux.h (SEGV_MTEAERR): Define.
+	(SEGV_MTESERR): Define.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-tdep.c: Include gdbsupport/selftest.h.
+	(aarch64_linux_ltag_tests): New function.
+	(_initialize_aarch64_linux_tdep): Register aarch64_linux_ltag_tests.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-tdep.c: Include target.h, arch-utils.h, value.h.
+	(aarch64_mte_get_atag, aarch64_linux_tagged_address_p)
+	(aarch64_linux_memtag_mismatch_p, aarch64_linux_set_memtags)
+	(aarch64_linux_get_memtag, aarch64_linux_memtag_to_string): New
+	functions.
+	(aarch64_linux_init_abi): Initialize MTE-related gdbarch hooks.
+	* arch/aarch64-mte-linux.c (aarch64_mte_make_ltag_bits)
+	(aarch64_mte_make_ltag, aarch64_linux_set_ltag)
+	(aarch64_linux_get_ltag): New functions.
+	* arch/aarch64-mte-linux.h (AARCH64_MTE_LOGICAL_TAG_START_BIT)
+	(AARCH64_MTE_LOGICAL_MAX_VALUE): Define.
+	(aarch64_mte_make_ltag_bits, aarch64_mte_make_ltag)
+	(aarch64_mte_set_ltag, aarch64_mte_get_ltag): New prototypes.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* linux-tdep.c (struct smaps_vmflags) <memory_tagging>: New flag
+	bit.
+	(struct smaps_data): New struct.
+	(decode_vmflags): Handle the 'mt' flag.
+	(parse_smaps_data): New function, refactored from
+	linux_find_memory_regions_full.
+	(linux_address_in_memtag_page): New function.
+	(linux_find_memory_regions_full): Refactor into parse_smaps_data.
+	* linux-tdep.h (linux_address_in_memtag_page): New prototype.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* linux-tdep.c (linux_find_memory_regions_full): Use std::string
+	instead of char arrays.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* Makefile.in (ALL_64_TARGET_OBS): Add arch/aarch64-mte-linux.o.
+	(HFILES_NO_SRCDIR): Add arch/aarch64-mte-linux.h and
+	nat/aarch64-mte-linux-ptrace.h.
+	* aarch64-linux-nat.c: Include nat/aarch64-mte-linux-ptrace.h.
+	(aarch64_linux_nat_target) <supports_memory_tagging>: New method
+	override.
+	<fetch_memtags>: New method override.
+	<store_memtags>: New method override.
+	(aarch64_linux_nat_target::supports_memory_tagging): New method.
+	(aarch64_linux_nat_target::fetch_memtags): New method.
+	(aarch64_linux_nat_target::store_memtags): New method.
+	* arch/aarch64-mte-linux.c: New file.
+	* arch/aarch64-mte-linux.h: Include gdbsupport/common-defs.h.
+	(AARCH64_MTE_GRANULE_SIZE): Define.
+	(aarch64_memtag_type): New enum.
+	(aarch64_mte_get_tag_granules): New prototype.
+	* configure.nat (NATDEPFILES): Add nat/aarch64-mte-linux-ptrace.o.
+	* configure.tgt (aarch64*-*-linux*): Add arch/aarch64-mte-linux.o.
+	* nat/aarch64-mte-linux-ptrace.c: New file.
+	* nat/aarch64-mte-linux-ptrace.h: New file.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add nat/aarch64-mte-linux-ptrace.h.
+	* nat/aarch64-mte-linux-ptrace.h: New file.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-nat.c (fetch_mteregs_from_thread): New function.
+	(store_mteregs_to_thread): New function.
+	(aarch64_linux_nat_target::fetch_registers): Update to call
+	fetch_mteregs_from_thread.
+	(aarch64_linux_nat_target::store_registers): Update to call
+	store_mteregs_to_thread.
+	* aarch64-tdep.c (aarch64_mte_register_names): New struct.
+	(aarch64_cannot_store_register): Handle MTE registers.
+	(aarch64_gdbarch_init): Initialize and setup MTE registers.
+	* aarch64-tdep.h (gdbarch_tdep) <mte_reg_base>: New field.
+	<has_mte>: New method.
+	* arch/aarch64-linux.h (AARCH64_LINUX_SIZEOF_MTE): Define.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-nat.c
+	(aarch64_linux_nat_target::read_description): Take MTE flag into
+	account.
+	Slight refactor to hwcap flag checking.
+	* aarch64-linux-tdep.c
+	(aarch64_linux_core_read_description): Likewise.
+	* aarch64-tdep.c (tdesc_aarch64_list): Add one more dimension for
+	MTE.
+	(aarch64_read_description): Add mte_p parameter and update to use it.
+	Update the documentation.
+	(aarch64_gdbarch_init): Update call to aarch64_read_description.
+	* aarch64-tdep.h (aarch64_read_description): Add mte_p parameter.
+	* arch/aarch64.c: Include ../features/aarch64-mte.c.
+	(aarch64_create_target_description): Add mte_p parameter and update
+	the code to use it.
+	* arch/aarch64.h (aarch64_create_target_description): Add mte_p
+	parameter.
+	* features/Makefile (FEATURE_XMLFILES): Add aarch64-mte.xml.
+	* features/aarch64-mte.c: New file, generated.
+	* features/aarch64-mte.xml: New file.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add arch/aarch64-mte-linux.h.
+	* aarch64-linux-nat.c: Include arch/aarch64-mte-linux.h.
+	* aarch64-linux-tdep.c: Likewise
+	* arch/aarch64-mte-linux.h: New file.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* remote: Include gdbsupport/selftest.h.
+	(test_memory_tagging_functions): New function.
+	(_initialize_remote): Register test_memory_tagging_functions.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* remote.c (PACKET_memory_tagging_feature): New enum.
+	(remote_memory_tagging_p): New function.
+	(remote_protocol_features): New "memory-tagging" entry.
+	(remote_target::remote_query_supported): Handle memory tagging
+	support.
+	(remote_target::supports_memory_tagging): Implement.
+	(create_fetch_memtags_request, parse_fetch_memtags_reply)
+	(create_store_memtags_request): New functions.
+	(remote_target::fetch_memtags): Implement.
+	(remote_target::store_memtags): Implement.
+	(_initialize_remote): Add new "memory-tagging-feature"
+	config command.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* arch-utils.c (default_memtag_to_string, default_tagged_address_p)
+	(default_memtag_matches_p, default_set_memtags)
+	(default_get_memtag): New functions.
+	* arch-utils.h (default_memtag_to_string, default_tagged_address_p)
+	(default_memtag_matches_p, default_set_memtags)
+	(default_get_memtag): New prototypes.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh (memtag_to_string, tagged_address_p, memtag_matches_p)
+	(set_memtags, get_memtag, memtag_granule_size): New gdbarch hooks.
+	(enum memtag_type): New enum.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* remote.c (remote_target) <supports_memory_tagging>: New method
+	override.
+	<fetch_memtags>: New method override.
+	<store_memtags>: New method override.
+	(remote_target::supports_memory_tagging): New method.
+	(remote_target::fetch_memtags): New method.
+	(remote_target::store_memtags): New method.
+	* target-delegates.c: Regenerate.
+	* target.h (struct target_ops) <supports_memory_tagging>: New virtual
+	method.
+	<fetch_memtags>: New virtual method.
+	<store_memtags>: New virtual method.
+	(target_supports_memory_tagging): Define.
+	(target_fetch_memtags): Define.
+	(target_store_memtags): Define.
+	* target-debug.h (target_debug_print_size_t)
+	(target_debug_print_const_gdb_byte_vector_r)
+	(target_debug_print_gdb_byte_vector_r): New functions.
+
+2021-03-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.h (target_longname): Remove.
+
+2021-03-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.h (target_is_pushed): Remove, update callers to use
+	inferior::target_is_pushed instead.
+	* target.c (target_is_pushed): Remove.
+
+2021-03-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.h (push_target): Remove, update callers to use
+	inferior::push_target.
+	* target.c (push_target): Remove.
+	* inferior.h (class inferior) <push_target>: New overload.
+
+2021-03-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.h (unpush_target): Remove, update all callers
+	to use `inferior::unpush_target` instead.
+	(struct target_unpusher) <operator()>: Just declare.
+	* target.c (unpush_target): Remove.
+	(target_unpusher::operator()): New.
+
+2021-03-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dwarf2/read.c (process_psymtab_comp_unit): Replace abort with an
+	error.
+	(process_full_comp_unit): Validate the top-level tag before
+	processing the first DIE.
+	(read_func_scope): Ensure we have a valid builder.
+
+2021-03-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* objc-lang.c (objc_demangle): Renamed to
+	objc_language::demangle_symbol, and moved later in the file.
+	(objc_language::sniff_from_mangled_name): Call demangle_symbol
+	member function.
+	(objc_language::demangle_symbol): Defined outside of class
+	declaration.  The definition is the old objc_demangle with NULL
+	changed to nullptr, and if conditions relating to nullptr pointers
+	or null character checks made explicit.
+	* objc-lang.h (objc_demangle): Delete declaration.
+
+2021-03-22  Martin Liska  <mliska@suse.cz>
+
+	* arm-tdep.c (show_disassembly_style_sfunc): Replace usage of CONST_STRNEQ with startswith.
+	(_initialize_arm_tdep): Likewise.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_initial_scan): Create partial symtabs.
+	* symfile.c (syms_from_objfile_1, reread_symbols): Update.
+	* psymtab.h (make_psymbol_functions): Don't declare.
+	* psymtab.c (make_psymbol_functions): Remove.
+	(maintenance_print_psymbols): Update.
+	* psympriv.h (struct psymbol_functions): Add no-argument
+	constructor.
+	* objfiles.h (struct objfile) <reset_psymtabs>: Remove.
+	<partial_symtabs>: Remove.
+	* mdebugread.c (mdebug_build_psymtabs): Create partial symtabs.
+	* elfread.c (read_partial_symbols): Update.
+	(elf_symfile_read): Remove check for existing partial symbols.
+	Don't clear "qf".
+	* dwarf2/read.c (dwarf2_has_info): Remove check for existing
+	partial symbols.
+	(dwarf2_build_psymtabs): Add psymbol_functions parameter.  Create
+	partial symtabs.
+	* dwarf2/public.h (dwarf2_build_psymtabs): Add psymbol_functions
+	parameter.
+	* dbxread.c (dbx_symfile_read): Create partial symtabs.
+	* ctfread.c (elfctf_build_psymtabs): Create partial symtabs.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_build_psymtabs): Update.
+	* symfile.c (syms_from_objfile_1, reread_symbols): Update.
+	* symfile-debug.c (objfile::has_partial_symbols)
+	(objfile::find_last_source_symtab)
+	(objfile::forget_cached_source_info)
+	(objfile::map_symtabs_matching_filename, objfile::lookup_symbol)
+	(objfile::print_stats, objfile::dump)
+	(objfile::expand_symtabs_for_function)
+	(objfile::expand_all_symtabs)
+	(objfile::expand_symtabs_with_fullname)
+	(objfile::map_matching_symbols)
+	(objfile::expand_symtabs_matching)
+	(objfile::find_pc_sect_compunit_symtab)
+	(objfile::map_symbol_filenames)
+	(objfile::find_compunit_symtab_by_address)
+	(objfile::lookup_global_symbol_language)
+	(objfile::require_partial_symbols): Update.
+	* psymtab.c (maintenance_print_psymbols)
+	(maintenance_info_psymtabs, maintenance_check_psymtabs): Update.
+	* objfiles.h (struct objfile) <qf>: Now a forward_list.
+	* objfiles.c (objfile_relocate1): Update.
+	* elfread.c (elf_symfile_read): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct objfile) <psymtabs>: Remove method.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (psymbol_functions::count_psyms): Rename.
+	(psymbol_functions::print_stats): Update.
+	* psympriv.h (struct psymbol_functions) <count_psyms>: Declare
+	method.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (psymbol_functions::require_partial_symbols): Rename.
+	(psymbol_functions::find_pc_sect_psymtab): Rename.
+	(psymbol_functions::find_pc_sect_compunit_symtab)
+	(maintenance_print_psymbols, maintenance_check_psymtabs): Update.
+	* psympriv.h (struct psymbol_functions) <require_partial_symbols>:
+	Declare new method.
+	<get_partial_symtabs, find_pc_sect_psymtab>: Likewise.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_start_psymtab): Add partial_symtabs parameter.
+	(xcoff_end_psymtab, scan_xcoff_symtab): Update.
+	* psymtab.c (partial_symtab::partial_symtab): Add partial_symtabs
+	parameter.
+	(add_psymbol_to_bcache): Remove.
+	(partial_symtab::add_psymbol): Add partial_symtabs parameter.
+	(partial_symtab::add_psymbol, partial_symtab::partial_symtab):
+	Likewise.
+	* psympriv.h (partial_symtab): Add partial_symtabs parameter.
+	<add_psymbol>: Likewise.
+	(standard_psymtab, legacy_psymtab): Likewise.
+	* mdebugread.c (parse_partial_symbols): Update.
+	(handle_psymbol_enumerators): Add partial_symtabs parameter.
+	(handle_psymbol_enumerators): Update.
+	(new_psymtab): Add partial_symtabs parameter.
+	* dwarf2/read.h (dwarf2_psymtab): Add partial_symtabs parameter.
+	* dwarf2/read.c (dwarf2_include_psymtab): Add partial_symtabs
+	parameter.
+	(dwarf2_create_include_psymtab): Add partial_symtabs parameter.
+	(create_partial_symtab, add_partial_symbol, dwarf_decode_lines):
+	Update.
+	* dbxread.c (read_dbx_symtab): Update.
+	(start_psymtab): Add partial_symtabs parameter.
+	(dbx_end_psymtab): Update.
+	* ctfread.c (struct ctf_context) <partial_symtabs>: New member.
+	(ctf_psymtab): Add partial_symtabs parameter.
+	(create_partial_symtab, ctf_psymtab_type_cb, ctf_psymtab_var_cb):
+	Update.
+	(scan_partial_symbols): Add partial_symtabs parameter.
+	(scan_partial_symbols, elfctf_build_psymtabs)
+	(ctf_psymtab_add_enums): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (read_symbols): Use objfile method.
+	* symfile-debug.c (objfile::require_partial_symbols): New method.
+	* psymtab.h (require_partial_symbols): Don't declare.
+	* psymtab.c (require_partial_symbols): Use objfile method.  Now
+	static.
+	(psymbol_functions::map_symtabs_matching_filename, OBJFILE)
+	(psymbol_functions::lookup_symbol)
+	(psymbol_functions::lookup_global_symbol_language)
+	(psymbol_functions::find_last_source_symtab)
+	(psymbol_functions::forget_cached_source_info)
+	(psymbol_functions::print_stats)
+	(psymbol_functions::expand_symtabs_for_function)
+	(psymbol_functions::expand_all_symtabs)
+	(psymbol_functions::expand_symtabs_with_fullname)
+	(psymbol_functions::map_symbol_filenames)
+	(psymbol_functions::map_matching_symbols)
+	(psymbol_functions::expand_symtabs_matching)
+	(psymbol_functions::find_compunit_symtab_by_address)
+	(maintenance_print_psymbols, maintenance_info_psymtabs)
+	(maintenance_check_psymtabs): Update.
+	* objfiles.h (struct objfile) <require_partial_symbols>: Declare
+	new method.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_sym_fns): Update.
+	* symfile.h (struct sym_fns) <sym_read_psymbols>: Remove.
+	* symfile-debug.c (objfile::has_partial_symbols): Use
+	can_lazily_read_symbols.
+	(debug_sym_read_psymbols): Remove.
+	(debug_sym_fns, install_symfile_debug_logging): Update.
+	* quick-symbol.h (struct quick_symbol_functions)
+	<can_lazily_read_symbols, read_partial_symbols>: New methods.
+	* psymtab.c (require_partial_symbols): Use new 'qf' methods.
+	* mipsread.c (ecoff_sym_fns): Update.
+	* machoread.c (macho_sym_fns): Update.
+	* elfread.c (struct lazy_dwarf_reader): New.
+	(elf_symfile_read): Update.
+	(read_psyms): Now a method of lazy_dwarf_reader.
+	(elf_sym_fns): Update.
+	(elf_sym_fns_lazy_psyms): Remove.
+	* dbxread.c (aout_sym_fns): Update.
+	* coffread.c (coff_sym_fns): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (syms_from_objfile_1): Call reset_psymtabs.
+	(reread_symbols): Move reset_psymtabs call later.
+	* objfiles.c (objfile::objfile): Don't initialize
+	partial_symtabs.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_build_psymtabs): Call
+	set_partial_symtabs.
+	* symfile.c (syms_from_objfile_1, reread_symbols): Update.
+	* psymtab.h (make_psymbol_functions): Add partial_symtabs
+	parameter.
+	* psymtab.c (find_pc_sect_psymtab): Add partial_symtabs
+	parameter.
+	(psymbol_functions::find_pc_sect_compunit_symtab)
+	(psymbol_functions::print_stats, psymbol_functions::dump)
+	(psymbol_functions::has_symbols): Update.
+	(make_psymbol_functions, dump_psymtab_addrmap): Add
+	partial_symtabs parameter.
+	(maintenance_print_psymbols): Update.
+	(psymbol_functions::expand_symtabs_matching): Update.
+	* psympriv.h (struct psymbol_functions): Add constructor.
+	<m_partial_symtabs>: New member.
+	<set_partial_symtabs>: New method.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_create_include_psymtab): Add per_bfd
+	parameter.
+	(process_psymtab_comp_unit_reader)
+	(build_type_psymtab_dependencies, dwarf2_build_psymtabs_hard)
+	(add_partial_subprogram, dwarf2_ranges_read, dwarf_decode_lines):
+	Reference psymtabs via per_bfd.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/index-write.c (struct addrmap_index_data) <objfile>:
+	Remove.
+	(add_address_entry): Remove objfile parameter.
+	(add_address_entry_worker): Update.
+	(write_address_map): Replace objfile parameter with per_bfd.
+	(write_gdbindex, write_psymtabs_to_index): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_base_index_functions::print_stats): Add
+	print_bcache parameter.
+	* symfile-debug.c (objfile::print_stats): Add print_bcache
+	parameter.
+	* quick-symbol.h (struct quick_symbol_functions)
+	<print_stats>: Add print_bcache parameter.
+	* symmisc.c (print_symbol_bcache_statistics, count_psyms): Move
+	code to psymtab.c.
+	(print_objfile_statistics): Move psymtab code to psymtab.c.
+	* psymtab.c (count_psyms): Move from symmisc.c.
+	(psymbol_functions::print_stats): Print partial symbol and bcache
+	statistics.  Add print_bcache parameter.
+	* objfiles.h (print_symbol_bcache_statistics): Don't declare.
+	(struct objfile) <print_stats>: Add print_bcache parameter.
+	* maint.c (maintenance_print_statistics): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_bfd) <psymtabs_addrmap>: New
+	member.
+	* dwarf2/read.c (create_addrmap_from_index)
+	(create_addrmap_from_aranges): Set per_bfd addrmap.
+	(dwarf2_read_gdb_index): Don't set partial_symtabs.
+	(dwarf2_base_index_functions::find_pc_sect_compunit_symtab): Use
+	per_bfd addrmap.
+	(dwarf2_read_debug_names): Don't set partial_symtabs.
+	(dwarf2_initialize_objfile): Likewise.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_build_psymtabs): Set partial_symtabs
+	earlier.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* psympriv.h (psymtab_discarder): Take psymtab_storage parameter.
+	(~psymtab_discarder, keep): Update.
+	<m_objfile>: Remove.
+	<m_partial_symtabs>: New member.
+	* dwarf2/read.c (dwarf2_build_psymtabs): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c (xcoff_end_psymtab): Add partial_symtabs parameter.
+	(xcoff_end_psymtab): Update.
+	(scan_xcoff_symtab): Add partial_symtabs parameter.
+	(xcoff_initial_scan): Update.
+	* stabsread.h (dbx_end_psymtab): Add partial_symtabs parameter.
+	* mdebugread.c (mdebug_build_psymtabs): Update.
+	(parse_partial_symbols): Add partial_symtabs parameter.
+	* dbxread.c (dbx_symfile_read): Update.
+	(read_dbx_symtab): Add partial_symtabs parameter.
+	(read_dbx_symtab): Update.
+	(dbx_end_psymtab): Add partial_symtabs parameter.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* quick-symbol.h (struct quick_symbol_functions)
+	<relocated>: New method.
+	* psymtab.h (struct psymbol_functions) <relocated>: New
+	method.
+	<fill_psymbol_map>: Declare method.
+	<m_psymbol_map>: New member.
+	* psymtab.c (psymbol_functions::fill_psymbol_map): Rename.
+	(psymbol_functions::find_compunit_symtab_by_address): Update.
+	* objfiles.h (reset_psymtabs): Don't clear psymbol_map.
+	(struct objfile) <psymbol_map>: Remove.
+	* objfiles.c (objfile_relocate1): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* psympriv.h (struct psymbol_functions): New.
+	* symfile.c (syms_from_objfile_1, reread_symbols): Update.
+	* symfile-debug.c (objfile::find_compunit_symtab_by_address)
+	(objfile::lookup_global_symbol_language): Update.
+	* quick-symbol.h (struct quick_symbol_functions): Convert function
+	pointers to methods.  Add virtual destructor.
+	(quick_symbol_functions_up): New typedef.
+	* psymtab.h (psym_functions, dwarf2_gdb_index_functions)
+	(dwarf2_debug_names_functions): Don't declare.
+	(make_psymbol_functions): Declare.
+	* psymtab.c (psymbol_functions::map_symtabs_matching_filename)
+	(psymbol_functions::find_pc_sect_compunit_symtab)
+	(psymbol_functions::lookup_symbol)
+	(psymbol_functions::lookup_global_symbol_language)
+	(psymbol_functions::find_last_source_symtab)
+	(psymbol_functions::forget_cached_source_info)
+	(psymbol_functions::print_stats, psymbol_functions::dump)
+	(psymbol_functions::expand_symtabs_for_function)
+	(psymbol_functions::expand_all_symtabs)
+	(psymbol_functions::expand_symtabs_with_fullname)
+	(psymbol_functions::map_symbol_filenames)
+	(psymbol_functions::map_matching_symbols)
+	(psymbol_functions::expand_symtabs_matching)
+	(psymbol_functions::has_symbols)
+	(psymbol_functions::find_compunit_symtab_by_address): Rename.
+	(psym_functions): Remove.
+	(make_psymbol_functions): New function.
+	* objfiles.h (struct objfile) <qf>: Change type.
+	* elfread.c (elf_symfile_read): Update.
+	* dwarf2/read.c (struct dwarf2_base_index_functions)
+	(struct dwarf2_gdb_index, struct dwarf2_debug_names_index): New.
+	(make_dwarf_gdb_index, make_dwarf_debug_names): New functions.
+	(dwarf2_base_index_functions::find_last_source_symtab)
+	(dwarf2_base_index_functions::forget_cached_source_info)
+	(dwarf2_base_index_functions::map_symtabs_matching_filename)
+	(dwarf2_gdb_index::lookup_symbol)
+	(dwarf2_base_index_functions::print_stats)
+	(dwarf2_gdb_index::dump)
+	(dwarf2_gdb_index::expand_symtabs_for_function)
+	(dwarf2_base_index_functions::expand_all_symtabs)
+	(dwarf2_base_index_functions::expand_symtabs_with_fullname):
+	Rename.
+	(dwarf2_gdb_index::map_matching_symbols): New method.
+	(dwarf2_gdb_index::expand_symtabs_matching): New method.
+	(dwarf2_base_index_functions::find_pc_sect_compunit_symtab)
+	(dwarf2_base_index_functions::map_symbol_filenames)
+	(dwarf2_base_index_functions::has_symbols): Rename.
+	(dwarf2_gdb_index_functions): Remove.
+	(dwarf2_debug_names_index::lookup_symbol)
+	(dwarf2_debug_names_index::dump)
+	(dwarf2_debug_names_index::expand_symtabs_for_function)
+	(dwarf2_debug_names_index::map_matching_symbols)
+	(dwarf2_debug_names_index::expand_symtabs_matching): Rename.
+	(dwarf2_debug_names_functions): Remove.
+	* dwarf2/public.h (make_dwarf_gdb_index, make_dwarf_debug_names):
+	Declare.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* psymtab.c (require_partial_symbols): Check that 'sf' is not
+	null.
+	* xcoffread.c (xcoff_sym_fns): Update.
+	* symfile.h (struct sym_fns) <qf>: Remove.
+	* symfile.c (syms_from_objfile_1, reread_symbols): Update.
+	* symfile-debug.c (objfile::has_partial_symbols)
+	(objfile::find_last_source_symtab)
+	(objfile::forget_cached_source_info)
+	(objfile::map_symtabs_matching_filename, objfile::lookup_symbol)
+	(objfile::print_stats, objfile::dump)
+	(objfile::expand_symtabs_for_function)
+	(objfile::expand_all_symtabs)
+	(objfile::expand_symtabs_with_fullname)
+	(objfile::map_matching_symbols)
+	(objfile::expand_symtabs_matching)
+	(objfile::find_pc_sect_compunit_symtab)
+	(objfile::map_symbol_filenames)
+	(objfile::find_compunit_symtab_by_address)
+	(objfile::lookup_global_symbol_language, debug_sym_fns)
+	(install_symfile_debug_logging): Update.
+	* objfiles.h (struct objfile) <qf>: New member.
+	* mipsread.c (ecoff_sym_fns): Update.
+	* machoread.c (macho_sym_fns): Update.
+	* elfread.c (elf_sym_fns_gdb_index, elf_sym_fns_debug_names):
+	Don't declare.
+	(elf_symfile_read, elf_sym_fns, elf_sym_fns_lazy_psyms): Update.
+	* dbxread.c (aout_sym_fns): Update.
+	* coffread.c (coff_sym_fns): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* symfile.h (symbol_compare_ftype, symbol_filename_ftype)
+	(expand_symtabs_file_matcher_ftype)
+	(expand_symtabs_symbol_matcher_ftype)
+	(expand_symtabs_exp_notify_ftype, struct quick_symbol_functions):
+	Move to quick-symbol.h.
+	* quick-symbol.h: New file.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* symtab.c (iterate_over_symtabs, expand_symtab_containing_pc)
+	(lookup_symbol_via_quick_fns, find_quick_global_symbol_language)
+	(basic_lookup_transparent_type_quick)
+	(find_pc_sect_compunit_symtab, find_symbol_at_address)
+	(find_line_symtab, global_symbol_searcher::expand_symtabs):
+	Update.
+	* symmisc.c (print_objfile_statistics, dump_objfile)
+	(maintenance_expand_symtabs): Update.
+	* symfile.c (symbol_file_add_with_addrs)
+	(expand_symtabs_matching, map_symbol_filenames): Update.
+	* symfile-debug.c (objfile::has_partial_symbols)
+	(objfile::find_last_source_symtab)
+	(objfile::forget_cached_source_info)
+	(objfile::map_symtabs_matching_filename, objfile::lookup_symbol)
+	(objfile::print_stats, objfile::dump)
+	(objfile::expand_symtabs_for_function)
+	(objfile::expand_all_symtabs)
+	(objfile::expand_symtabs_with_fullname)
+	(objfile::map_matching_symbols)
+	(objfile::expand_symtabs_matching)
+	(objfile::find_pc_sect_compunit_symtab)
+	(objfile::map_symbol_filenames)
+	(objfile::find_compunit_symtab_by_address)
+	(objfile::lookup_global_symbol_language): New methods.
+	(debug_sym_quick_functions): Remove.
+	(debug_sym_fns, install_symfile_debug_logging): Update.
+	* source.c (forget_cached_source_info_for_objfile)
+	(select_source_symtab): Update.
+	* objfiles.h (struct objfile): Add methods corresponding to
+	quick_symbol_functions.
+	* objfiles.c (objfile::has_partial_symbols): Move to
+	symfile-debug.c.
+	* linespec.c (iterate_over_all_matching_symtabs): Update.
+	* cp-support.c (add_symbol_overload_list_qualified): Update.
+	* ada-lang.c (add_nonlocal_symbols): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* objfiles.h (struct objfile) <has_partial_symbols>: Return bool.
+	* symfile.h (struct quick_symbol_functions) <has_symbols>: Return
+	bool.
+	* symfile-debug.c (debug_qf_has_symbols): Return bool.
+	* psymtab.c (psym_has_symbols): Return bool.
+	* objfiles.c (objfile::has_partial_symbols): Return bool.
+	* dwarf2/read.c (dw2_has_symbols): Return bool.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* symfile.c (read_symbols): Update.
+	* objfiles.h (struct objfile) <has_partial_symbols>: New method.
+	(objfile_has_partial_symbols): Don't declare.
+	* objfiles.c (objfile::has_partial_symbols): Rename from
+	objfile_has_partial_symbols.
+	(objfile_has_symbols, have_partial_symbols): Update.
+	* elfread.c (elf_symfile_read): Update.
+	* dwarf2/read.c (dwarf2_has_info): Update.
+	* coffread.c (coff_symfile_read): Update.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* coffread.c: Include dwarf2/public.h.
+	* dwarf2/frame.c: Include dwarf2/public.h.
+	* dwarf2/index-write.h: Include dwarf2/public.h, not symfile.h.
+	* dwarf2/public.h: New file.
+	* dwarf2/read.c: Include dwarf2/public.h.
+	* elfread.c: Include dwarf2/public.h.
+	* machoread.c: Include dwarf2/public.h.
+	* symfile.h (dwarf2_has_info, enum dw_index_kind)
+	(dwarf2_initialize_objfile, dwarf2_build_psymtabs)
+	(dwarf2_build_frame_info): Move to dwarf2/public.h.
+	* xcoffread.c: Include dwarf2/public.h.
+
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+	* symfile.h (enum dwarf2_section_enum)
+	(dwarf2_get_section_info): Move to dwarf2/read.h.
+	* dwarf2/read.h (enum dwarf2_section_enum)
+	(dwarf2_get_section_info): Move from symfile.h.
+
+2021-03-19  Pedro Alves  <pedro@palves.net>
+
+	* thread.c (any_thread_of_inferior): Check if there's a selected
+	thread before calling inferior_thread().
+
+2021-03-18  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/stringify.c (dwarf_unit_type_name): New function.  Use
+	get_DW_UT_name.
+	* dwarf2/stringify.h (dwarf_unit_type_name): Declare.
+	* dwarf2/comp-unit.c (dwarf_unit_type_name): Remove.
+
+2021-03-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-param.c (get_set_value): Update header comment.
+
+2021-03-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (check_multi_target_resumption): Remove argument to
+	all_non_exited_inferiors.
+
+2021-03-16  Christian Biesinger  <cbiesinger@google.com>
+
+	* windows-nat.c (windows_init_thread_list): Add message to
+	debug log.
+
+2021-03-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-framefilter.c (py_print_frame): Use PyInt_Check as
+	well as PyLong_Check for Python 2.
+
+2021-03-15  Tom Tromey  <tromey@adacore.com>
+
+	PR build/27579:
+	* rust-exp.y (maker_map): Use gdb::hash_enum.
+	* stap-probe.c (stap_maker_map): Use gdb::hash_enum.
+
+2021-03-15  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (create_debug_type_hash_table): Remove colon at
+	end of debug print.
+
+2021-03-15  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (dw2_get_file_names_reader): Remove info_ptr
+	parameter, adjust caller.
+
+2021-03-15  Tom Tromey  <tromey@adacore.com>
+
+	* ada-exp.y (simple_exp): Always push a result for unary '+'.
+
+2021-03-15  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_unop_ind_operation::evaluate): Call
+	ada_ensure_varsize_limit.
+
+2021-03-15  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (numeric_type_p, integer_type_p): Return true for
+	fixed-point.
+	* ada-exp.y (maybe_overload): New function.
+	(ada_wrap_overload): New function.
+	(ada_un_wrap2, ada_wrap2, ada_wrap_op): Use maybe_overload.
+	(exp1, simple_exp, relation, and_exp, and_then_exp, or_exp)
+	(or_else_exp, xor_exp, primary): Update.
+
+2021-03-15  Tom Tromey  <tromey@adacore.com>
+
+	PR ada/27545:
+	* ada-lang.c (ada_var_value_operation::evaluate): Use recursive
+	call for tagged type.
+
+2021-03-15  Tom Tromey  <tromey@adacore.com>
+
+	* ada-exp.y (exp1): Handle resolution of the right hand side of an
+	assignment.
+
+2021-03-15  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_aggregate_operation::assign_aggregate): Return
+	container.
+	(ada_assign_operation::evaluate): Update.
+	* ada-exp.h (class ada_aggregate_operation) <assign_aggregate>:
+	Change return type.
+
+2021-03-15  Felix Willgerodt  <felix.willgerodt@intel.com>
+
+	* i386-tdep.c (i386_floatformat_for_type): Add COMPLEX*32 and REAL*16.
+
+2021-03-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/python.c (gdbpy_source_objfile_script): Use
+	make_scoped_restore to restore gdbpy_current_objfile.
+	(gdbpy_execute_objfile_script): Likewise.
+
+2021-03-14  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_attribute_value): Use cu_header
+	consistently.
+
+2021-03-14  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (struct die_reader_specs) <abfd>: Fix formatting.
+	(peek_die_abbrev): Use reader.abfd.
+
+2021-03-14  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (dwarf2_per_cu_data::get_header): Set
+	m_header_read_in.
+
+2021-03-13  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (struct partial_die_info): Update.
+	(peek_die_abbrev, skip_children, skip_one_die, read_full_die_1)
+	(load_partial_dies, partial_die_info::partial_die_info): Update.
+	* dwarf2/abbrev.h (lookup_abbrev): Constify.
+
+2021-03-13  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/abbrev.c (abbrev_table::read): Remove Irix 6 workaround.
+
+2021-03-12  Christian Biesinger  <cbiesinger@google.com>
+
+	PR threads/27239
+	* cp-support.c: Use scoped_segv_handler_restore.
+	* event-top.c (thread_local_segv_handler): Made static.
+	(scoped_segv_handler_restore::scoped_segv_handler_restore):
+	New function.
+	(scoped_segv_handler_restore::~scoped_segv_handler_restore): New
+	function.
+	* event-top.h (class scoped_segv_handler_restore): New class.
+	(thread_local_segv_handler): Removed.
+
+2021-03-10  Tom Tromey  <tromey@adacore.com>
+
+	* parser-defs.h (parser_state): Change completion to bool.
+	<parse_completion>: Likewise.
+	* ada-lang.h (ada_find_operator_symbol, ada_resolve_funcall)
+	(ada_resolve_variable, ada_resolve_function): Update.
+	* ada-lang.c (ada_find_operator_symbol): Change
+	parse_completion to bool.
+	(ada_resolve_funcall, ada_resolve_variable)
+	(ada_resolve_function): Likewise.
+
+2021-03-09  Tom Tromey  <tromey@adacore.com>
+
+	* eval.c (operation::evaluate_funcall): Use function formal
+	parameter types when evaluating.
+
+2021-03-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb-gdb.py.in (StructMainTypePrettyPrinter) <owner_to_string>:
+	Updated fields names flag_objfile_owned to m_flag_objfile_owned,
+	and owner to m_owner.
+
+2021-03-09  Felix Willgerodt  <felix.willgerodt@intel.com>
+
+        * f-exp.h (eval_op_f_loc): Declare.
+        (expr::fortran_loc_operation): New typedef.
+        * f-exp.y (exp): Handle UNOP_FORTRAN_LOC after parsing an
+        UNOP_INTRINSIC.
+        (f77_keywords): Add LOC keyword.
+        * f-lang.c (eval_op_f_loc): New function.
+        * std-operator.def (UNOP_FORTRAN_LOC): New operator.
+
+2021-03-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.h (eval_op_f_array_shape): Declare.
+	(fortran_array_shape_operation): New type.
+	* f-exp.y (exp): Handle UNOP_FORTRAN_SHAPE after parsing
+	UNOP_INTRINSIC.
+	(f77_keywords): Add "shape" keyword.
+	* f-lang.c (fortran_array_shape): New function.
+	(eval_op_f_array_shape): New function.
+	* std-operator.def (UNOP_FORTRAN_SHAPE): New operator.
+
+2021-03-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (eval_op_f_array_size): Declare 1 and 2 argument forms
+	of this function.
+	(expr::fortran_array_size_1arg): New type.
+	(expr::fortran_array_size_2arg): Likewise.
+	* f-exp.y (exp): Handle FORTRAN_ARRAY_SIZE after parsing
+	UNOP_OR_BINOP_INTRINSIC.
+	(f77_keywords): Add "size" keyword.
+	* f-lang.c (fortran_array_size): New function.
+	(eval_op_f_array_size): New function, has a 1 arg and 2 arg form.
+	* std-operator.def (FORTRAN_ARRAY_SIZE): New operator.
+
+2021-03-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.h (eval_op_f_rank): Declare.
+	(expr::fortran_rank_operation): New typedef.
+	* f-exp.y (exp): Handle UNOP_FORTRAN_RANK after parsing an
+	UNOP_INTRINSIC.
+	(f77_keywords): Add "rank" keyword.
+	* f-lang.c (eval_op_f_rank): New function.
+	* std-operator.def (UNOP_FORTRAN_RANK): New operator.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* printcmd.c (set_command): Remove null check.
+	* value.c (init_if_undefined_command): Remove null check.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* parse.c (parser_state::push_symbol, parser_state::push_dollar):
+	Update.
+	* p-exp.y (variable): Update.
+	* go-exp.y (variable): Update.
+	* expprint.c (dump_for_expression): Use bound_minimal_symbol.
+	Remove overload for objfile.
+	* expop.h (eval_op_var_msym_value): Use bound_minimal_symbol
+	parameter.
+	(check_objfile): Likewise.
+	(dump_for_expression): Likewise.  Remove overload for objfile.
+	(class var_msym_value_operation): Use bound_minimal_symbol.
+	* eval.c (eval_op_var_msym_value): Use bound_minimal_symbol
+	parameter.
+	(var_msym_value_operation::evaluate_for_address)
+	(var_msym_value_operation::evaluate_for_sizeof)
+	(var_msym_value_operation::evaluate_for_cast): Update.
+	* d-exp.y (PrimaryExpression): Update.
+	* c-exp.y (variable): Update.
+	* ax-gdb.c (var_msym_value_operation::do_generate_ax): Update.
+	* ada-lang.c (ada_var_msym_value_operation::evaluate_for_cast):
+	Update.
+	* ada-exp.y (write_var_or_type): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* parser-defs.h (exp_uses_objfile): Return bool.
+	* parse.c (exp_uses_objfile): Return bool.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* value.h (eval_skip_value): Don't declare.
+	* opencl-lang.c (eval_opencl_assign): Update.
+	* m2-lang.c (eval_op_m2_high, eval_op_m2_subscript): Update.
+	* f-lang.c (eval_op_f_abs, eval_op_f_mod, eval_op_f_ceil)
+	(eval_op_f_floor, eval_op_f_modulo, eval_op_f_cmplx): Remove.
+	* expression.h (enum noside) <EVAL_SKIP>: Remove.
+	* expop.h (typeof_operation::evaluate)
+	(decltype_operation::evaluate, unop_addr_operation::evaluate)
+	(unop_sizeof_operation::evaluate, assign_operation::evaluate)
+	(cxx_cast_operation::evaluate): Update.
+	* eval.c (eval_skip_value): Remove.
+	(eval_op_scope, eval_op_var_entry_value)
+	(eval_op_func_static_var, eval_op_string, eval_op_objc_selector)
+	(eval_op_concat, eval_op_ternop, eval_op_structop_struct)
+	(eval_op_structop_ptr, eval_op_member, eval_op_add, eval_op_sub)
+	(eval_op_binary, eval_op_subscript, eval_op_equal)
+	(eval_op_notequal, eval_op_less, eval_op_gtr, eval_op_geq)
+	(eval_op_leq, eval_op_repeat, eval_op_plus, eval_op_neg)
+	(eval_op_complement, eval_op_lognot, eval_op_ind)
+	(eval_op_memval, eval_op_preinc, eval_op_predec)
+	(eval_op_postinc, eval_op_postdec, eval_op_type)
+	(eval_binop_assign_modify, eval_op_objc_msgcall)
+	(eval_multi_subscript, logical_and_operation::evaluate)
+	(logical_or_operation::evaluate, array_operation::evaluate)
+	(operation::evaluate_for_cast)
+	(var_msym_value_operation::evaluate_for_cast)
+	(var_value_operation::evaluate_for_cast): Update.
+	* c-lang.c (c_string_operation::evaluate): Update.
+	* c-exp.h (objc_nsstring_operation::evaluate)
+	(objc_selector_operation::evaluate): Update.
+	* ada-lang.c (ada_assign_operation::evaluate)
+	(eval_ternop_in_range, ada_unop_neg, ada_unop_in_range)
+	(ada_atr_size): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c: Merge "namespace" scopes.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* parser-defs.h (struct expr_builder) <expr_builder>: Inline.
+	<release>: Inline.
+	* parse.c (expr_builder::expr_builder, expr_builder::release):
+	Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* parse.c (expression::expression, expression::~expression):
+	Remove.
+	* expression.h (struct expression): Inline constructor.  Remove
+	destructor.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* std-operator.def (BINOP_END): Remove.
+	* p-exp.y (tokentab3, tokentab2): Use OP_NULL, not BINOP_END.
+	* go-exp.y (tokentab2): Use OP_NULL, not BINOP_END.
+	* f-exp.y (dot_ops, f77_keywords): Use OP_NULL, not BINOP_END.
+	* d-exp.y (tokentab2, ident_tokens): Use OP_NULL, not BINOP_END.
+	* c-exp.y (tokentab3, tokentab2, ident_tokens): Use OP_NULL, not
+	BINOP_END.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expression.h (enum exp_opcode) <OP_UNUSED_LAST>: Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* std-operator.def (OP_EXTENDED0): Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* std-operator.def (OP_NAME, OP_ATR_IMAGE, OP_ATR_MODULUS)
+	(OP_OTHERS, OP_CHOICES, OP_POSITIONAL, OP_DISCRETE_RANGE):
+	Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* std-operator.def (UNOP_CAP, UNOP_CHR, UNOP_ORD, UNOP_FLOAT)
+	(UNOP_MAX, UNOP_MIN, UNOP_ODD, UNOP_TRUNC, OP_M2_STRING): Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* std-operator.def (OP_ATR_MIN, OP_ATR_MAX): Remove.
+	* ada-lang.c (ada_binop_minmax): Update.
+	* ada-exp.h (ada_binop_min_operation, ada_binop_max_operation):
+	Use BINOP_MIN and BINOP_MAX.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* value.h (evaluate_subexp_with_coercion): Don't declare.
+	* parse.c (exp_descriptor_standard): Remove.
+	(expr_builder::expr_builder, expr_builder::release): Update.
+	(expression::expression): Remove size_t parameter.
+	(expression::~expression): Simplify.
+	(expression::resize): Remove.
+	(write_exp_elt, write_exp_elt_opcode, write_exp_elt_sym)
+	(write_exp_elt_msym, write_exp_elt_block, write_exp_elt_objfile)
+	(write_exp_elt_longcst, write_exp_elt_floatcst)
+	(write_exp_elt_type, write_exp_elt_intern, write_exp_string)
+	(write_exp_string_vector, write_exp_bitstring): Remove.
+	* p-lang.h (class pascal_language) <opcode_print_table,
+	op_print_tab>: Remove.
+	* p-lang.c (pascal_language::op_print_tab): Remove.
+	* opencl-lang.c (class opencl_language) <opcode_print_table>:
+	Remove.
+	* objc-lang.c (objc_op_print_tab): Remove.
+	(class objc_language) <opcode_print_table>: Remove.
+	* m2-lang.h (class m2_language) <opcode_print_table,
+	op_print_tab>: Remove.
+	* m2-lang.c (m2_language::op_print_tab): Remove.
+	* language.h (struct language_defn) <post_parser, expression_ops,
+	opcode_print_table>: Remove.
+	* language.c (language_defn::expression_ops)
+	(auto_or_unknown_language::opcode_print_table): Remove.
+	* go-lang.h (class go_language) <opcode_print_table,
+	op_print_tab>: Remove.
+	* go-lang.c (go_language::op_print_tab): Remove.
+	* f-lang.h (class f_language) <opcode_print_table>: Remove
+	<op_print_tab>: Remove.
+	* f-lang.c (f_language::op_print_tab): Remove.
+	* expression.h (union exp_element): Remove.
+	(struct expression): Remove size_t parameter from constructor.
+	<resize>: Remove.
+	<first_opcode>: Update.
+	<nelts, elts>: Remove.
+	(EXP_ELEM_TO_BYTES, BYTES_TO_EXP_ELEM): Remove.
+	(evaluate_subexp_standard, print_expression, op_string)
+	(dump_raw_expression): Don't declare.
+	* expprint.c (print_expression, print_subexp)
+	(print_subexp_funcall, print_subexp_standard, op_string)
+	(dump_raw_expression, dump_subexp, dump_subexp_body)
+	(dump_subexp_body_funcall, dump_subexp_body_standard): Remove.
+	(dump_prefix_expression): Update.
+	* eval.c (evaluate_subexp): Remove.
+	(evaluate_expression, evaluate_type): Update.
+	(evaluate_subexpression_type): Remove.
+	(fetch_subexp_value): Remove "pc" parameter.  Update.
+	(extract_field_op, evaluate_struct_tuple, evaluate_funcall)
+	(evaluate_subexp_standard, evaluate_subexp_for_address)
+	(evaluate_subexp_with_coercion, evaluate_subexp_for_sizeof)
+	(evaluate_subexp_for_cast): Remove.
+	(parse_and_eval_type): Update.
+	* dtrace-probe.c (dtrace_probe::compile_to_ax): Update.
+	* d-lang.c (d_op_print_tab): Remove.
+	(class d_language) <opcode_print_table>: Remove.
+	* c-lang.h (c_op_print_tab): Don't declare.
+	* c-lang.c (c_op_print_tab): Remove.
+	(class c_language, class cplus_language, class asm_language, class
+	minimal_language) <opcode_print_table>: Remove.
+	* breakpoint.c (update_watchpoint, watchpoint_check)
+	(watchpoint_exp_is_const, watch_command_1): Update.
+	* ax-gdb.h (union exp_element): Don't declare.
+	* ax-gdb.c (const_var_ref, const_expr, maybe_const_expr)
+	(gen_repeat, gen_sizeof, gen_expr_for_cast, gen_expr)
+	(gen_expr_binop_rest): Remove.
+	(gen_trace_for_expr, gen_eval_for_expr, gen_printf): Update.
+	* ada-lang.c (ada_op_print_tab): Remove.
+	(class ada_language) <post_parser, opcode_print_table>: Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* go-lang.c (go_language::expression_ops): Don't declare.
+	* go-lang.h (class go_language) <expression_ops>: Remove.
+	* opencl-lang.c (evaluate_subexp_opencl, exp_descriptor_opencl):
+	Remove.
+	(class opencl_language) <expression_ops>: Remove.
+	* d-lang.c (class d_language) <expression_ops>: Remove.
+	* c-lang.h (evaluate_subexp_c, exp_descriptor_c): Don't declare.
+	* c-lang.c (evaluate_subexp_c, exp_descriptor_c): Remove.
+	(class c_language, class cplus_language, class asm_language)
+	(class minimal_language) <expression_ops>: Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (resolve_subexp, replace_operator_with_call)
+	(evaluate_subexp_type, assign_aggregate)
+	(aggregate_assign_positional, aggregate_assign_from_choices)
+	(aggregate_assign_others, ada_evaluate_subexp_for_cast)
+	(ada_evaluate_subexp, ADA_OPERATORS, ada_operator_length)
+	(ada_operator_check, ada_forward_operator_length)
+	(ada_dump_subexp_body, ada_print_subexp, ada_exp_descriptor):
+	Remove.
+	(post_parser): Update.
+	(class ada_language) <expresssion_ops>: Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* m2-lang.h (class m2_language) <expresssion_ops,
+	exp_descriptor_modula2>: Remove.
+	* m2-lang.c (evaluate_subexp_modula2)
+	(m2_language::exp_descriptor_modula2): Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.h (class f_language) <expresssion_ops>: Remove.
+	<exp_descriptor_tab>: Remove.
+	* f-lang.c (fortran_value_subarray, evaluate_subexp_f)
+	(operator_length_f, print_unop_subexp_f, print_binop_subexp_f)
+	(print_subexp_f, dump_subexp_body_f, operator_check_f)
+	(f_language::exp_descriptor_tab, fortran_prepare_argument):
+	Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.h (class rust_language) <expression_ops,
+	exp_descriptor_tab>: Remove.
+	* rust-lang.c (rust_evaluate_funcall): Remove.
+	(rust_range, rust_subscript, eval_op_rust_complement): Don't use
+	EVAL_SKIP.
+	(rust_evaluate_subexp): Remove.
+	(rust_aggregate_operation::evaluate): Don't use EVAL_SKIP.
+	(rust_operator_length, rust_dump_subexp_body, rust_print_subexp)
+	(rust_operator_check, rust_language::exp_descriptor_tab): Remove.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-exp.y: Create operations.
+	(empty_stoken): Remove.
+	(ada_pop, ada_wrap, ada_addrof, ada_un_wrap2, ada_wrap2)
+	(ada_wrap_op, ada_wrap3, ada_funcall): New functions.
+	(components): New global.
+	(push_component, choice_component, pop_component, pop_components):
+	New functions.
+	(associations): New global
+	(push_association, pop_association, pop_associations): New
+	functions.
+	(ada_parse): Update.
+	(write_var_from_sym, write_int): Create operations.
+	(write_exp_op_with_string): Remove.
+	(write_object_renaming, write_selectors, write_ambiguous_var)
+	(write_var_or_type, write_name_assoc): Create operations.
+	* ada-lang.h (ada_index_type): Declare.
+	* ada-lang.c (ada_index_type): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-exp.y: Create operations.
+	(f_language::parser): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* m2-exp.y: Create operations.
+	(m2_language::parser): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* p-exp.y: Create operations.
+	(pascal_language::parser): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* d-exp.y: Create operations.
+	(d_parse): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* go-exp.y: Create operations.
+	(go_language::parser): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* objc-lang.c (end_msglist): Create operations.
+	* c-exp.y: Change parser to create operations.
+	(write_destructor_name): Remove.
+	(c_parse): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-exp.y: Create operations.
+	(rust_parser::convert_params_to_expression): Change return type.
+	(binop_maker_ftype): New typedef.
+	(maker_map): New global.
+	(rust_parser::convert_ast_to_expression): Change return type.
+	(rust_language::parser): Update.
+	(_initialize_rust_exp): Initialize maker_map.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* stap-probe.c (binop_maker_ftype): New typedef.
+	(stap_maker_map): New global.
+	(stap_make_binop): New function.
+	(stap_parse_register_operand): Return operation_up.
+	(stap_parse_single_operand, stap_parse_argument_conditionally)
+	(stap_parse_argument_1): Likewise.
+	(stap_parse_argument): Create operations.
+	(stap_probe::parse_arguments): Update.
+	(_initialize_stap_probe): Initialize stap_maker_map.
+	* ppc-linux-tdep.c (ppc_stap_parse_special_token): Change return
+	type.
+	* i386-tdep.h (i386_stap_parse_special_token): Change return
+	type.
+	* i386-tdep.c (i386_stap_parse_special_token_triplet)
+	(i386_stap_parse_special_token_three_arg_disp)
+	(i386_stap_parse_special_token): Change return type.
+	* gdbarch.sh (stap_parse_special_token): Change return type.
+	* gdbarch.c: Rebuild.
+	* gdbarch.h: Rebuild.
+	* arm-linux-tdep.c (arm_stap_parse_special_token): Change return
+	type.
+	* aarch64-linux-tdep.c (aarch64_stap_parse_special_token): Change
+	return type.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* gdbarch.sh (dtrace_parse_probe_argument): Change return type.
+	* gdbarch.h: Rebuild.
+	* gdbarch.c: Rebuild.
+	* dtrace-probe.c (dtrace_probe::build_arg_exprs): Update.
+	* amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Change
+	return type.
+	(amd64_dtrace_parse_probe_argument): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* parser-defs.h (struct parser_state) <push, push_new,
+	push_c_string, push_symbol, push_dollar, pop, pop_vector, wrap,
+	wrap2>: New methods.
+	<m_operations>: New member.
+	* parse.c (parser_state::push_c_string)
+	(parser_state::push_symbol, parser_state::push_dollar): New
+	methods.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* parser-defs.h (struct expr_completion_state) <expout_last_op>:
+	New member.
+	(struct parser_state) <mark_struct_expression>: New method.
+	* parse.c (parser_state::mark_struct_expression): Update assert.
+	(parser_state::mark_struct_expression): New method.
+	(parser_state::mark_completion_tag): Update assert.
+	(parse_expression_for_completion): Handle expout_last_op.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-exp.h (class ada_var_value_operation) <get_symbol>: Remove;
+	now in superclass.
+	* value.h (fetch_subexp_value): Add "op" parameter.
+	* value.c (init_if_undefined_command): Update.
+	* tracepoint.c (validate_actionline, encode_actions_1): Update.
+	* stap-probe.c (stap_probe::compile_to_ax): Update.
+	* printcmd.c (set_command): Update.
+	* ppc-linux-nat.c (ppc_linux_nat_target::check_condition):
+	Update.
+	* parser-defs.h (struct expr_builder) <set_operation>: New
+	method.
+	* parse.c (parse_exp_in_context, exp_uses_objfile): Update.
+	* expression.h (struct expression) <first_opcode>: Update.
+	<op>: New member.
+	* expprint.c (dump_raw_expression, dump_prefix_expression):
+	Update.
+	* expop.h (class var_value_operation) <get_symbol>: New method.
+	(class register_operation) <get_name>: New method.
+	(class equal_operation): No longer a typedef, now a subclass.
+	(class unop_memval_operation) <get_type>: New method.
+	(class assign_operation) <get_lhs>: New method.
+	(class unop_cast_operation) <get_type>: New method.
+	* eval.c (evaluate_expression, evaluate_type)
+	(evaluate_subexpression_type): Update.
+	(fetch_subexp_value): Add "op" parameter.
+	(parse_and_eval_type): Update.
+	* dtrace-probe.c (dtrace_probe::compile_to_ax): Update.
+	* breakpoint.c (update_watchpoint, watchpoint_check)
+	(watchpoint_exp_is_const, watch_command_1): Update.
+	* ax-gdb.c (gen_trace_for_expr, gen_eval_for_expr, gen_printf):
+	Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_value_binop): Do not use op_string.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expprint.c (dump_for_expression): New overload.
+	* expop.h (check_objfile, dump_for_expression): Declare new
+	overloads.
+	* ada-lang.c (check_objfile): New overload.
+	(assign_component, ada_aggregate_component::uses_objfile)
+	(ada_aggregate_component::dump, ada_aggregate_component::assign)
+	(ada_aggregate_component::assign_aggregate)
+	(ada_positional_component::uses_objfile)
+	(ada_positional_component::dump, ada_positional_component::assign)
+	(ada_discrete_range_association::uses_objfile)
+	(ada_discrete_range_association::dump)
+	(ada_discrete_range_association::assign)
+	(ada_name_association::uses_objfile, ada_name_association::dump)
+	(ada_name_association::assign)
+	(ada_choices_component::uses_objfile, ada_choices_component::dump)
+	(ada_choices_component::assign)
+	(ada_others_component::uses_objfile, ada_others_component::dump)
+	(ada_others_component::assign, ada_assign_operation::evaluate):
+	New methods.
+	* ada-exp.h (ada_string_operation) <get_name>: New method.
+	(class ada_assign_operation): New.
+	(class ada_component): New.
+	(ada_component_up): New typedef.
+	(class ada_aggregate_operation, class ada_aggregate_component)
+	(class ada_positional_component, class ada_others_component)
+	(class ada_association): New.
+	(ada_association_up): New typedef.
+	(class ada_choices_component)
+	(class ada_discrete_range_association)
+	(class ada_name_association): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_var_value_operation::resolve)
+	(ada_funcall_operation::resolve)
+	(ada_ternop_slice_operation::resolve): New methods.
+	* ada-exp.h (struct ada_resolvable): New.
+	(class ada_var_value_operation): Derive from ada_resolvable.
+	<get_block, resolve>: New methods.
+	(class ada_funcall_operation): Derive from ada_resolvable.
+	<resolve>: New method.
+	(class ada_ternop_slice_operation): Derive from ada_resolvable.
+	<resolve>: New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_funcall_operation::evaluate): New method.
+	* ada-exp.h (class ada_var_msym_value_operation) <get_symbol>: New
+	method.
+	(class ada_funcall_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_structop_operation::evaluate): New method.
+	* ada-exp.h (class ada_structop_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_unop_ind_operation::evaluate): New method.
+	* ada-exp.h (class ada_unop_ind_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_binop_exp): No longer static.
+	* ada-exp.h (ada_binop_exp_operation): New typedef.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_val_atr): No longer static.
+	(ada_atr_val_operation::evaluate): New method.
+	* ada-exp.h (class ada_atr_val_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_pos_atr): No longer static.
+	* ada-exp.h (ada_pos_operation): New typedef.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_pos_atr): Rename from value_pos_atr.  Change
+	parameters.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_binop_minmax): No longer static.
+	* ada-exp.h (ada_binop_min_operation, ada_binop_max_operation):
+	New typedefs.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_var_msym_value_operation::evaluate_for_cast):
+	New method.
+	* ada-exp.h (class ada_var_msym_value_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_var_value_operation::evaluate_for_cast)
+	(ada_var_value_operation::evaluate): New methods.
+	* ada-exp.h (class ada_var_value_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_unop_atr_operation::evaluate): New method.
+	* ada-exp.h (class ada_unop_atr_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_binop_in_bounds): No longer static.
+	* ada-exp.h (class ada_binop_in_bounds_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_ternop_slice): No longer static.
+	* ada-exp.h (class ada_ternop_slice_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-exp.h (ada_bitwise_operation): New template class.
+	(ada_bitwise_and_operation, ada_bitwise_ior_operation)
+	(ada_bitwise_xor_operation): New typedefs.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_equal_binop): No longer static.
+	* ada-exp.h (class ada_binop_equal_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_mult_binop): No longer static.
+	* ada-exp.h (ada_binop_mul_operation ada_binop_div_operation)
+	(ada_binop_rem_operation, ada_binop_mod_operation): New typedefs.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_binop_addsub_operation::evaluate): New method.
+	* ada-exp.h (class ada_binop_addsub_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.h (ada_find_operator_symbol, ada_resolve_funcall)
+	(ada_resolve_variable): Declare.
+	* ada-lang.c (ada_find_operator_symbol, ada_resolve_funcall)
+	(ada_resolve_variable): New functions.
+	(resolve_subexp): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* opencl-lang.c (opencl_ternop_cond_operation::evaluate): New
+	method.
+	* c-exp.h (class opencl_ternop_cond_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* opencl-lang.c (opencl_logical_binop_operation::evaluate): New
+	method.
+	* c-exp.h (class opencl_logical_binop_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* opencl-lang.c (opencl_structop_operation::evaluate): New
+	method.
+	* c-exp.h (class opencl_structop_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* opencl-lang.c (opencl_logical_not): No longer static.  Change
+	parameters.
+	(evaluate_subexp_opencl): Update.
+	* c-exp.h (opencl_notequal_operation): New typedef.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* opencl-lang.c (opencl_relop, eval_opencl_assign): No longer
+	static.  Change parameters.
+	(eval_opencl_assign): No longer static.  Add "op" parameter.
+	(evaluate_subexp_opencl): Update.
+	* c-exp.h (opencl_binop_operation): New template class.
+	(opencl_assign_operation, opencl_equal_operation)
+	(opencl_notequal_operation, opencl_less_operation)
+	(opencl_gtr_operation, opencl_geq_operation)
+	(opencl_leq_operation): New typedefs.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* opencl-lang.c (opencl_value_cast): No longer static.
+	* c-exp.h (opencl_cast_type_operation): New typedef.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-exp.h (eval_op_f_allocated): Declare.
+	(fortran_allocated_operation): New typedef.
+	* f-lang.c (eval_op_f_allocated): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_associated): New functions.
+	* f-exp.h (fortran_associated_1arg, fortran_associated_2arg): New
+	typedefs.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (fortran_bound_1arg::evaluate)
+	(fortran_bound_2arg::evaluate): New methods.
+	* f-exp.h (class fortran_bound_1arg, class fortran_bound_2arg):
+	New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class unop_addr_operation) <get_expression>: New
+	method.
+	* f-lang.c (fortran_undetermined::value_subarray)
+	(fortran_undetermined::evaluate): New methods.
+	(fortran_prepare_argument): New overload.
+	* f-exp.h (class fortran_range_operation)
+	(class fortran_undetermined): New classes.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_structop::evaluate_funcall): New method.
+	* rust-exp.h (class rust_structop) <evaluate_funcall>: Declare
+	method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expression.h (class operation) <evaluate_funcall>: New methods.
+	* expop.h (class scope_operation) <evaluate_funcall>: New method.
+	(class var_value_operation) <evaluate_funcall>: New method.
+	(class structop_base_operation) <evaluate_funcall>: New method.
+	(class var_msym_value_operation) <evaluate_funcall>: New method.
+	(class structop_member_base): New class.
+	(class structop_member_operation): Derive from
+	structop_member_base.
+	(class structop_mptr_operation): Derive from
+	structop_member_base.
+	(class funcall_operation): New class.
+	* eval.c (operation::evaluate_funcall)
+	(var_value_operation::evaluate_funcall)
+	(scope_operation::evaluate_funcall)
+	(structop_member_base::evaluate_funcall)
+	(structop_base_operation::evaluate_funcall): New methods.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class array_operation): New.
+	* eval.c (array_operation::evaluate_struct_tuple)
+	(array_operation::evaluate): New methods.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class adl_func_operation): New.
+	* eval.c (adl_func_operation::evaluate): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_unop_in_range): No longer static.
+	* ada-exp.h (class ada_unop_range_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_unop_neg, ada_atr_tag, ada_atr_size, ada_abs):
+	No longer static.
+	* ada-exp.h (ada_neg_operation, ada_atr_tag_operation)
+	(ada_atr_size_operation, ada_abs_operation): New typedefs.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class logical_and_operation)
+	(class logical_or_operation): New.
+	* eval.c (logical_and_operation::evaluate)
+	(logical_or_operation::evaluate): New methods.
+	* ax-gdb.c (logical_and_operation::do_generate_ax)
+	(logical_or_operation::do_generate_ax): New methods.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* m2-lang.c (eval_op_m2_high, eval_op_m2_subscript): No longer
+	static.
+	* m2-exp.h: New file.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_aggregate_operation::evaluate): New method.
+	* rust-exp.h (class rust_aggregate_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (eval_op_rust_struct_anon, eval_op_rust_structop):
+	No longer static.
+	* rust-exp.h (class rust_struct_anon): New.
+	(class rust_structop): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_range): No longer static.
+	* rust-exp.h (class rust_range_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_subscript): No longer static.
+	* rust-exp.h (class rust_subscript_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (eval_op_rust_ind): No longer static.  Add "opcode"
+	parameter.
+	(rust_evaluate_subexp): Update.
+	* rust-exp.h (class rust_unop_ind_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (eval_op_rust_complement, eval_op_rust_array): No
+	longer static.  Add "opcode" parameter.
+	(rust_evaluate_subexp): Update.
+	* rust-exp.h: New file.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_abs, eval_op_f_mod, eval_op_f_ceil)
+	(eval_op_f_floor, eval_op_f_modulo, eval_op_f_cmplx)
+	(eval_op_f_kind): No longer static.  Add "opcode" parameter.
+	(evaluate_subexp_f): Update.
+	* f-exp.h: New file.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_ternop_range_operation::evaluate): New method.
+	* ada-exp.h (class ada_ternop_range_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_qual_operation::evaluate): New method.
+	* ada-exp.h (class ada_qual_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_string_operation::evaluate): New method.
+	* ada-exp.h (class ada_string_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_wrapped_operation::evaluate): New method.
+	* ada-exp.h: New file.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class multi_subscript_operation): New.
+	* eval.c (multi_subscript_operation::evaluate): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (objc_msgcall_operation::evaluate): New method.
+	* c-exp.h (class objc_msgcall_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class var_value_operation): New.
+	* eval.c (var_value_operation::evaluate)
+	(var_value_operation::evaluate_for_address)
+	(var_value_operation::evaluate_with_coercion)
+	(var_value_operation::evaluate_for_sizeof)
+	(var_value_operation::evaluate_for_cast): New methods.
+	* ax-gdb.c (var_value_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (cxx_cast_ftype): New typedef.
+	(cxx_cast_operation): New template.
+	(dynamic_cast_operation, reinterpret_cast_operation): New
+	typedefs.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class unop_cast_type_operation): New.
+	* ax-gdb.c (unop_cast_type_operation::do_generate_ax): New
+	method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class unop_cast_operation): New.
+	* ax-gdb.c (unop_cast_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class assign_modify_operation): New.
+	* eval.c (eval_binop_assign_modify): No longer static.
+	* ax-gdb.c (assign_modify_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class assign_operation): New.
+	* ax-gdb.c (assign_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class type_instance_operation): New.
+	* eval.c (type_instance_operation::evaluate): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class op_this_operation): New.
+	* ax-gdb.c (op_this_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class unop_memval_operation)
+	(class unop_memval_type_operation): New.
+	* eval.c (eval_op_memval): No longer static.
+	(unop_memval_operation::evaluate_for_address)
+	(unop_memval_type_operation::evaluate_for_address)
+	(unop_memval_operation::evaluate_for_sizeof)
+	(unop_memval_type_operation::evaluate_for_sizeof): New methods.
+	* ax-gdb.c (unop_memval_operation::do_generate_ax)
+	(unop_memval_type_operation::do_generate_ax): New methods.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class unop_alignof_operation): New.
+	* eval.c (eval_op_alignof): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class unop_sizeof_operation): New.
+	* ax-gdb.c (unop_sizeof_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class unop_addr_operation): New.
+	* ax-gdb.c (gen_expr_unop) <case UNOP_ADDR>: New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class typeid_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class decltype_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class typeof_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class type_operation): New.
+	* eval.c (eval_op_type): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class unop_ind_base_operation)
+	(class unop_ind_operation): New.
+	* eval.c (eval_op_ind): No longer static.  Remove "op" parameter.
+	(unop_ind_base_operation::evaluate_for_address)
+	(unop_ind_base_operation::evaluate_for_sizeof): New method.
+	* ax-gdb.c (gen_expr_unop) <case UNOP_IND>: New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (unop_incr_operation): New template.
+	(preinc_operation, predec_operation, postinc_operation)
+	(postdec_operation): New typedefs.
+	* eval.c (eval_op_preinc, eval_op_predec, eval_op_postinc)
+	(eval_op_postdec): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (unary_ftype): New typedef.
+	(unop_operation, usual_ax_binop_operation): New templates.
+	(unary_plus_operation, unary_neg_operation)
+	(unary_complement_operation, unary_logical_not_operation): New
+	typedefs.
+	* eval.c (eval_op_plus, eval_op_neg, eval_op_complement)
+	(eval_op_lognot): No longer static.
+	* ax-gdb.c (gen_expr_unop): New function.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ax-gdb.c (comma_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class repeat_operation): New.
+	* eval.c (eval_op_repeat): No longer static.  Remove "op"
+	parameter.
+	(evaluate_subexp_standard): Update.
+	* ax-gdb.c (repeat_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class comparison_operation): New.
+	(equal_operation, notequal_operation, less_operation)
+	(gtr_operation, geq_operation, leq_operation): New typedefs.
+	* eval.c (eval_op_equal, eval_op_notequal, eval_op_less)
+	(eval_op_gtr, eval_op_geq, eval_op_leq): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class subscript_operation): New.
+	* eval.c (eval_op_subscript): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class binop_operation, class usual_ax_binop_operation):
+	New.
+	(exp_operation, intdiv_operation, mod_operation, mul_operation)
+	(div_operation, rem_operation, lsh_operation, rsh_operation)
+	(bitwise_and_operation, bitwise_ior_operation)
+	(bitwise_xor_operation): New typedefs.
+	* eval.c (eval_op_binary): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class sub_operation): New.
+	* eval.c (eval_op_sub): No longer static.  Remove "op" parameter.
+	(evaluate_subexp_standard): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class add_operation): New.
+	* eval.c (eval_op_add): No longer static.  Remove "op" parameter.
+	(evaluate_subexp_standard): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class concat_operation): New.
+	* eval.c (eval_op_concat): No longer static.  Remove "op"
+	parameter.
+	(evaluate_subexp_standard): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class structop_member_operation)
+	(class structop_mptr_operation): New.
+	* eval.c (eval_op_member): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class structop_ptr_operation): New.
+	* eval.c (eval_op_structop_ptr): No longer static.  Remove "op"
+	parameter.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class structop_base_operation)
+	(class structop_operation): New.
+	* eval.c (eval_op_structop_struct): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class complex_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_objc_selector): No longer static.
+	* c-exp.h (class objc_selector_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c: Include c-exp.h.
+	* c-exp.h (class objc_nsstring_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* c-lang.c (c_string_operation::evaluate): New method.
+	* c-exp.h: New file.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class ternop_cond_operation): New.
+	* ax-gdb.c (ternop_cond_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class ternop_slice_operation): New.
+	* eval.c (eval_op_ternop): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class string_operation): New.
+	* eval.c (eval_op_string): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class internalvar_operation): New.
+	* ax-gdb.c (internalvar_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class bool_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class register_operation): New.
+	* eval.c (eval_op_register): No longer static.
+	* ax-gdb.c (register_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class last_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class func_static_var_operation): New.
+	* eval.c (eval_op_func_static_var): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class var_entry_value_operation): New.
+	* eval.c (eval_op_var_entry_value): No longer static.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expression.h (class operation) <set_outermost>: New method.
+	* expop.h (class var_msym_value_operation): New.
+	* eval.c (eval_op_var_msym_value): No longer static.
+	(var_msym_value_operation::evaluate_for_address)
+	(var_msym_value_operation::evaluate_for_sizeof)
+	(var_msym_value_operation::evaluate_for_cast): New methods.
+	* ax-gdb.c (var_msym_value_operation::do_generate_ax): New
+	method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class long_const_operation): New.
+	* ax-gdb.c (long_const_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (class scope_operation): New.
+	* eval.c (eval_op_scope): No longer static.
+	(scope_operation::evaluate_for_address): New method.
+	* ax-gdb.c (scope_operation::do_generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expprint.c (float_const_operation::dump): New method.
+	* expop.h (float_data): New typedef.
+	(class float_const_operation): New.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expop.h (gen_expr_binop, gen_expr_structop): Declare.
+	* ax-gdb.c (gen_expr_binop): New function.
+	(gen_expr_structop): Likewise.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expprint.c (expr::dump_for_expression): New functions.
+	* expop.h (dump_for_expression): New overloads.
+	(tuple_holding_operation::dump, tuple_holding_operation::do_dump):
+	Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* expression.h (expr::operation): New class.
+	(expr::make_operation): New function.
+	(expr::operation_up): New typedef.
+	* expop.h: New file.
+	* eval.c (operation::evaluate_for_cast)
+	(operation::evaluate_for_address, operation::evaluate_for_sizeof):
+	New methods.
+	* ax-gdb.c (operation::generate_ax): New method.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ax-gdb.c (gen_expr_binop_rest): Remove "pc" parameter.
+	(gen_expr_binop_rest): New overload.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_multi_subscript): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_binop_exp): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_val_atr): Rename from value_val_atr.  Change
+	parameters.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_binop_minmax): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_unop_atr): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_binop_in_bounds): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_ternop_slice): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_equal_binop): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_mult_binop): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_abs): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_atr_size): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_atr_tag): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_unop_in_range): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (ada_unop_neg): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* ada-lang.c (eval_ternop_in_range): New function.
+	(ada_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* opencl-lang.c (eval_opencl_assign): New function.
+	(evaluate_subexp_opencl): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_objc_msgcall): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_binop_assign_modify): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* m2-lang.c (eval_op_m2_subscript): New function.
+	(evaluate_subexp_modula2): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* m2-lang.c (eval_op_m2_high): New function.
+	(evaluate_subexp_modula2): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (evaluate_subexp_for_address_base): New function.
+	(evaluate_subexp_for_address): Use it.
+	(evaluate_subexp_for_sizeof_base): New function.
+	(evaluate_subexp_for_sizeof): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (eval_op_rust_structop): New function.
+	(rust_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (eval_op_rust_struct_anon): New function.
+	(rust_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (eval_op_rust_array): New function.
+	(rust_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (eval_op_rust_complement): New function.
+	(rust_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (eval_op_rust_ind): New function.
+	(rust_evaluate_subexp): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_subscript): Change parameters.
+	(rust_evaluate_subexp): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* rust-lang.c (rust_range): Change parameters.
+	(rust_evaluate_subexp): Update.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_allocated): New function.
+	(evaluate_subexp_f): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (fortran_require_array): New function.
+	(evaluate_subexp_f): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_kind): New function.
+	(evaluate_subexp_f): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_cmplx): New function.
+	(evaluate_subexp_f): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_modulo): New function.
+	(evaluate_subexp_f): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_floor): New function.
+	(evaluate_subexp_f): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_ceil): New function.
+	(evaluate_subexp_f): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_mod): New function.
+	(evaluate_subexp_f): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* f-lang.c (eval_op_f_abs): New function.
+	(evaluate_subexp_f): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_type): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_postdec): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_postinc): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_predec): New file.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_preinc): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_memval): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_alignof): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_ind): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_lognot): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_complement): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_neg): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_plus): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_repeat): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_leq): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_geq): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_gtr): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_less): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_notequal): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_equal): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_subscript): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_binary): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_sub): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_add): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_member): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_structop_ptr): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_structop_struct): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_ternop): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_concat): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_objc_selector): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_string): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_register): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_func_static_var): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_var_msym_value): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_var_entry_value): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+	* eval.c (eval_op_scope): New function.
+	(evaluate_subexp_standard): Use it.
+
+2021-03-06  Chernov Sergey  <klen_s@mail.ru>
+
+	PR gdb/27528:
+	* ada-lang.c (ada_fold_name): Use gdb::to_string.
+
+2021-03-06  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/sect-names.h (dwarf2_elf_names): Declare.
+	* dwarf2/read.h (dwarf2_get_dwz_file): Move to dwz.h.
+	* dwarf2/read.c (dwarf2_elf_names): No longer static.
+	(locate_dwz_sections, dwz_search_other_debugdirs)
+	(dwarf2_get_dwz_file): Move to dwz.c.
+	* dwarf2/dwz.h (dwarf2_get_dwz_file): Move declaration from
+	read.h.
+	* dwarf2/dwz.c (locate_dwz_sections, dwz_search_other_debugdirs)
+	(dwarf2_get_dwz_file): Move from read.c.
+
+2021-03-06  Tom Tromey  <tom@tromey.com>
+
+	* debuginfod-support.h: Include scoped_fd.h.
+
+2021-03-06  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (dwarf2_get_dwz_file): Add 'require' parameter.
+	* dwarf2/read.c (dwarf2_get_dwz_file): Add 'require' parameter.
+	(get_abbrev_section_for_cu, read_attribute_value)
+	(get_debug_line_section): Update.
+	* dwarf2/macro.c (dwarf_decode_macro_bytes): Update.
+
+2021-03-06  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/sect-names.h (struct dwarf2_section_names) <matches>: New
+	method.
+	* dwarf2/read.c (section_is_p): Remove.
+	(dwarf2_per_bfd::locate_sections)
+	(dwarf2_per_bfd::locate_sections, locate_dwz_sections)
+	(locate_v1_virtual_dwo_sections, dwarf2_locate_dwo_sections)
+	(dwarf2_locate_common_dwp_sections)
+	(dwarf2_locate_v2_dwp_sections, dwarf2_locate_v5_dwp_sections):
+	Update.
+
+2021-03-06  Tom Tromey  <tom@tromey.com>
+
+	* xcoffread.c: Include sect-names.h.
+	* symfile.h (struct dwarf2_section_names, struct
+	dwarf2_debug_sections): Move to dwarf2/sect-names.h.
+	* dwarf2/sect-names.h: New file, from symfile.h.
+	* dwarf2/read.c: Include sect-names.h.
+
+2021-03-06  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.c (read_attribute): Make 'abbrev' const.
+	* dwarf2/abbrev.c (abbrev_table::alloc_abbrev): Remove.
+	(abbrev_table::read): Update.
+	* dwarf2/abbrev.h (struct attr_abbrev): Move earlier.
+	(struct abbrev_info): Reformat.
+	<attrs>: Now an array.
+	(struct abbrev_table) <alloc_abbrev>: Remove.
+
+2021-03-06  Weimin Pan  <weimin.pan@oracle.com>
+
+	* ctfread.c (ctf_psymtab_add_enums): New function.
+	(ctf_psymtab_type_cb): call ctf_psymtab_add_enums.
+
+2021-03-06  Weimin Pan  <weimin.pan@oracle.com>
+
+	* ctfread.c (read_func_kind_type): Set up function arguments.
+
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-none-tdep.c: Add 'user-regs.h' and 'target-description.h'
+	includes.
+	(riscv_csrset): New static global.
+	(riscv_update_csrmap): New function.
+	(riscv_iterate_over_regset_sections): Process CSRs.
+
+2021-03-05  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_feature_name_csr): Define.
+	(riscv_feature_name_cpu): Define.
+	(riscv_feature_name_fpu): Define.
+	(riscv_feature_name_virtual): Define.
+	(riscv_xreg_feature): Use riscv_feature_name_cpu.
+	(riscv_freg_feature): Use riscv_feature_name_fpu.
+	(riscv_virtual_feature): Use riscv_feature_name_virtual.
+	(riscv_csr_feature): Use riscv_feature_name_csr.
+	* riscv-tdep.h (riscv_feature_name_csr): Declare.
+
+2021-03-05  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Craig Blackmore  <craig.blackmore@embecosm.com>
+
+	* Makefile.in (ALL_TARGET_OBS): Add riscv-none-tdep.o.
+	(ALLDEPFILES): Add riscv-none-tdep.c.
+	* configure: Regenerate.
+	* configure.ac (CONFIG_OBS): Add elf-none-tdep.o when BFD has ELF
+	support.
+	* configure.tgt (riscv*-*-*): Include riscv-none-tdep.c.
+	* elf-none-tdep.c: New file.
+	* elf-none-tdep.h: New file.
+	* riscv-none-tdep.c: New file.
+
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* corelow.c: Add 'xml-tdesc.h' include.
+	(core_target::read_description): Load the target description from
+	the core file when possible.
+	* fbsd-tdep.c (fbsd_make_corefile_notes): Add target description
+	note.
+	* gcore-elf.c: Add 'gdbsupport/tdesc.h' include.
+	(gcore_elf_make_tdesc_note): New function.
+	* gcore-elf.h (gcore_elf_make_tdesc_note): Declare.
+	* linux-tdep.c (linux_make_corefile_notes): Add target description
+	note.
+
+2021-03-05  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* Makefile.in (SFILES): Add gcore-elf.c.
+	(HFILES_NO_SRCDIR): Add gcore-elf.h
+	* configure: Regenerate.
+	* configure.ac: Add gcore-elf.o to CONFIG_OBS if we have ELF
+	support.
+	* fbsd-tdep.c: Add 'gcore-elf.h' include.
+	(struct fbsd_collect_regset_section_cb_data): Delete.
+	(fbsd_collect_regset_section_cb): Delete.
+	(fbsd_collect_thread_registers): Delete.
+	(struct fbsd_corefile_thread_data): Delete.
+	(fbsd_corefile_thread): Delete.
+	(fbsd_make_corefile_notes): Call
+	gcore_elf_build_thread_register_notes instead of the now deleted
+	FreeBSD code.
+	* gcore-elf.c: New file, the content was moved here from
+	linux-tdep.c, functions were renamed and given minor cleanup.
+	* gcore-elf.h: New file.
+	* gcore.c (gcore_find_signalled_thread): Moved here from
+	linux-tdep.c and given a new name.  Minor cleanups.
+	* gcore.h (gcore_find_signalled_thread): Declare.
+	* linux-tdep.c: Add 'gcore.h' and 'gcore-elf.h' includes.
+	(struct linux_collect_regset_section_cb_data): Delete.
+	(linux_collect_regset_section_cb): Delete.
+	(linux_collect_thread_registers): Delete.
+	(linux_corefile_thread): Call
+	gcore_elf_build_thread_register_notes.
+	(find_signalled_thread): Delete.
+	(linux_make_corefile_notes): Call gcore_find_signalled_thread.
+
+2021-03-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/27147
+	* sparc-nat.h (sparc_fetch_inferior_registers): Add
+	process_stratum_target parameter,
+	sparc_store_inferior_registers): update callers.
+	* sparc-nat.c (sparc_fetch_inferior_registers,
+	sparc_store_inferior_registers): Add process_stratum_target
+	parameter.  Switch current thread before calling
+	sparc_supply_gregset / sparc_collect_rwindow.
+	(sparc_store_inferior_registers): Likewise.
+	* sparc-obsd-tdep.c (sparc32obsd_supply_uthread): Add assertion.
+	(sparc32obsd_collect_uthread): Likewise.
+	* sparc-tdep.c (sparc_supply_rwindow, sparc_collect_rwindow):
+	Add assertion.
+	* sparc64-obsd-tdep.c (sparc64obsd_collect_uthread,
+	sparc64obsd_supply_uthread): Add assertion.
+
+2021-03-04  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (struct match_data) <found_sym>: Now bool.
+	(aux_add_nonlocal_symbols): Update.
+	(ada_add_block_symbols): Change "found_sym" to bool.
+
+2021-03-03  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_resolve_function): Update comment.
+	(is_nonfunction, add_symbols_from_enclosing_procs)
+	(remove_extra_symbols): Likewise.
+	(struct match_data): Add constructor, initializers.
+	(add_nonlocal_symbols): Remove memset.
+	(aux_add_nonlocal_symbols): Update comment.
+	(ada_add_block_renamings, add_nonlocal_symbols)
+	(ada_add_all_symbols): Likewise.
+	* ada-exp.y (write_var_or_type): Clean up trailing whitespace.
+
+2021-03-02  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (cast_from_gnat_encoded_fixed_point_type)
+	(cast_to_gnat_encoded_fixed_point_type): Remove.
+	(ada_value_cast, ada_evaluate_subexp): Update.
+	(gnat_encoded_fixed_point_type_info)
+	(ada_is_gnat_encoded_fixed_point_type)
+	(gnat_encoded_fixed_point_delta)
+	(gnat_encoded_fixed_point_scaling_factor): Remove.
+	* ada-lang.h (ada_is_gnat_encoded_fixed_point_type)
+	(gnat_encoded_fixed_point_delta)
+	(gnat_encoded_fixed_point_scaling_factor): Don't declare.
+	* ada-typeprint.c (print_gnat_encoded_fixed_point_type): Remove.
+	(ada_print_type): Update.
+	* ada-valprint.c (ada_value_print_num): Update.
+	* dwarf2/read.c (ada_get_gnat_encoded_number)
+	(ada_get_gnat_encoded_ratio): New functions.
+	(finish_fixed_point_type): Use them.  Add parameters.
+	(GNAT_FIXED_POINT_SUFFIX): New define.
+	(gnat_encoded_fixed_point_type_info): New function.
+	(read_base_type): Handle gnat encodings.
+
+2021-03-02  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_fold_name, ada_variant_discrim_name)
+	(ada_enum_name, scan_discrim_bound, to_fixed_range_type): Use
+	std::string.
+	(GROW_VECT): Remove.
+	(grow_vect): Remove.
+
+2021-03-02  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.h (ada_lookup_symbol_list): Return a vector.
+	* ada-lang.c (resolve_subexp): Update.
+	(ada_resolve_function): Accept a vector.
+	(is_nonfunction, add_defn_to_vec)
+	(add_symbols_from_enclosing_procs): Likewise.
+	(num_defns_collected, defns_collected): Remove.
+	(remove_extra_symbols): Return a vector.
+	(remove_irrelevant_renamings): Return void.
+	(ada_add_local_symbols): Accept a vector.
+	(struct match_data) <obstackp>: Remove.
+	<resultp>: New member.
+	(aux_add_nonlocal_symbols): Update.
+	(ada_add_block_renamings, add_nonlocal_symbols)
+	(ada_add_all_symbols): Accept a vector.
+	(ada_lookup_symbol_list_worker, ada_lookup_symbol_list): Return a
+	vector.
+	(ada_lookup_symbol): Update.
+	(ada_add_block_symbols): Accept a vector.
+	(get_var_value, iterate_over_symbols): Update.
+	* ada-exp.y (block_lookup, write_var_or_type, write_name_assoc):
+	Update.
+
+2021-03-02  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (resolve_subexp): Use any_of and erase-remove idiom.
+
+2021-03-02  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (struct ada_symbol_cache) <cache_space>: Now an
+	auto_obstack.
+	<root>: Initialize.
+	(ada_pspace_data): Remove destructor.
+	<sym_cache>: Now a unique_ptr.
+	(ada_init_symbol_cache, ada_free_symbol_cache): Remove.
+	(ada_get_symbol_cache): Use 'new'.
+	(ada_clear_symbol_cache): Rewrite.
+
+2021-03-02  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (add_nonlocal_symbols): Handle case where objfile->sf
+	is null.
+
+2021-02-27  Lancelot Six  <lsix@lancelotsix.com>
+
+	PR gdb/27393
+	* source.c (add_path): Skip empty dirnames.
+
+2021-02-25  Kevin Buettner  <kevinb@redhat.com>
+
+	* nat/aarch64-sve-linux-ptrace.h: Add comment regarding
+	include order for <sys/ptrace.h> and <asm/ptrace.h>.
+
+2021-02-25  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/26861
+	* target.c (target_mourn_inferior): Only compare pids in
+	target_mourn_inferior.
+
+2021-02-25  Jan Matyas  <jmatyas@codasip.com>
+
+	PR gdb/26819
+	* remote.c (remote_target::start_remote): Ensure the single
+	thread, automatically added for remote targets without the
+	concept of threading, is initially in set to the "resumed"
+	state.
+	* remote.c (remote_target::add_current_inferior_and_thread):
+	Add return value - return the main thread.
+
+2021-02-25  Jan Vrany  <jan.vrany@labware.com>
+
+	* gdb/mi/mi-interp.c (mi_traceframe_changed): Remove trailing \n from output.
+	(mi_tsv_created): Likewise.
+	(mi_tsv_deleted): Likewise.
+
+2021-02-25  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/27354
+	* dwarf2/read.c (open_and_init_dwo_file): Use rcuh_kind::COMPILE as
+	section_kind for &dwo_file->sections.info.
+
+2021-02-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR fortran/26155
+	* f-lang.c (fortran_argument_convert): Delete declaration.
+	(fortran_prepare_argument): New function.
+	(evaluate_subexp_f): Move logic to new function
+	fortran_prepare_argument.
+
+2021-02-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (f77_keywords): Add 'associated'.
+	* f-lang.c (fortran_associated): New function.
+	(evaluate_subexp_f): Handle FORTRAN_ASSOCIATED.
+	(operator_length_f): Likewise.
+	(print_unop_or_binop_subexp_f): New function.
+	(print_subexp_f): Make use of print_unop_or_binop_subexp_f for
+	FORTRAN_ASSOCIATED, FORTRAN_LBOUND, and FORTRAN_UBOUND.
+	(dump_subexp_body_f): Handle FORTRAN_ASSOCIATED.
+	(operator_check_f): Likewise.
+	* std-operator.def: Add FORTRAN_ASSOCIATED.
+
+2021-02-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (fortran_operators): Add ".xor.".
+
+2021-02-24  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/27336
+	* dwarf2/attribute.c (attribute::form_is_signed): New function
+	factored out of ...
+	* dwarf2/attribute.h (attribute::as_signed): ... here.
+	(attribute::is_nonnegative, attribute::as_nonnegative): New function.
+	(attribute::form_is_signed): Declare.
+	* dwarf2/read.c (new_symbol): Use is_nonnegative and as_nonnegative
+	for DW_AT_decl_file.
+
+2021-02-24  Kevin Buettner  <kevinb@redhat.com>
+
+	* nat/aarch64-linux-hw-point.c: Add comment regarding include
+	order for <sys/ptrace.h> and <asm/ptrace.h>.
+
+2021-02-24  Kevin Buettner  <kevinb@redhat.com>
+
+	* nat/aarch64-linux-hw-point.c: Include <asm/ptrace.h> after
+	<sys/ptrace.h>.
+
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* exec.c (set_section_command): Move variable declarations into
+	the function body, and use std::string instead of a fixed size
+	buffer.
+
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* exec.c (exec_target::get_section_table): Delete member function.
+	(section_table_read_available_memory): Use current_top_target, not
+	just the exec_ops target.
+	* target-delegates.c: Regenerate.
+	* target.c (default_get_section_table): New function.
+	* target.h (target_ops::get_section_table): Change default
+	behaviour to call default_get_section_table.
+	(default_get_section_table): Declare.
+
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* exec.c (exec_target::close): Call new clear_target_sections
+	function.
+	(program_space::add_target_sections): Update name of member
+	variable.
+	(program_space::add_target_sections): Update name of member
+	variable.
+	(program_space::remove_target_sections): Likewise.
+	(exec_one_fork): Use new target_sections member function.
+	(exec_target::get_section_table): Likewise.
+	(exec_target::files_info): Likewise.
+	(set_section_command): Likewise.
+	(exec_set_section_address): Likewise.
+	(exec_target::has_memory): Use new target_sections member
+	function.
+	* progspace.h (program_space::clear_target_sections): New member
+	function.
+	(program_space::target_sections): Rename member variable to
+	m_target_sections, replace with a new member function.
+	(program_space::m_target_sections): New member variable.
+	* solib-dsbt.c (scan_dyntag): Use new member function.
+	* solib-svr4.c (scan_dyntag): Likewise.
+
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb/bfd-target.c (class target_bfd) <get_section_table>: Make
+	return type const.
+	* gdb/exec.c (struct exec_target) <get_section_table>: Likewise.
+	(section_table_read_available_memory): Make local const.
+	(exec_target::xfer_partial): Make local const.
+	(print_section_info): Make parameter const.
+	* gdb/exec.h (print_section_info): Likewise.
+	* gdb/ppc64-tdep.c (ppc64_convert_from_func_ptr_addr): Make local
+	const.
+	* gdb/record-btrace.c (record_btrace_target::xfer_partial):
+	Likewise.
+	* gdb/remote.c (remote_target::remote_xfer_live_readonly_partial):
+	Likewise.
+	* gdb/s390-tdep.c (s390_load): Likewise.
+	* gdb/solib-dsbt.c (scan_dyntag): Likewise.
+	* gdb/solib-svr4.c (scan_dyntag): Likewise.
+	* gdb/target-debug.h (target_debug_print_target_section_table_p):
+	Rename to...
+	(target_debug_print_const_target_section_table_p): ...this.
+	* gdb/target-delegates.c: Regenerate.
+	* gdb/target.c (target_get_section_table): Make return type const.
+	(target_section_by_addr): Likewise.  Also make some locals const.
+	(memory_xfer_partial_1): Make some locals const.
+	* gdb/target.h (struct target_ops) <get_section_table>: Make
+	return type const.
+	(target_section_by_addr): Likewise.
+	(target_get_section_table): Likewise.
+
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention new 'maint info target-sections' command.
+	* maint.c (maintenance_info_target_sections): New function.
+	(_initialize_maint_cmds): Register new command.
+
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-tdep.c (riscv_features_from_gdbarch_info): Rename to...
+	(riscv_features_from_bfd): ...this.  Change parameter type to
+	'bfd*', and update as required.
+	(riscv_find_default_target_description): Update call to
+	riscv_features_from_bfd.  Select a default xlen based on
+	info.bfd_arch_info.
+	(riscv_gdbarch_init): Update call to riscv_features_from_bfd.
+
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* eval.c (evaluate_subexp_standard): Call value_ind for points to
+	dynamic types in UNOP_IND.
+
+2021-02-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/26828
+	* dwarf2/read.c (dwarf2_queue_guard) <dwarf2_queue_guard>:
+	Instantiate queue.
+	(~dwarf2_queue_guard): Clear queue.
+	(queue_comp_unit): Assert that queue is
+	instantiated.
+	(process_queue): Adjust.
+	* dwarf2/read.h (struct dwarf2_per_bfd) <queue>: Make optional.
+
+2021-02-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/26828
+	* dwarf2/read.c (maybe_queue_comp_unit): Check if CU is expanded
+	to decide whether or not to enqueue it for expansion.
+	(follow_die_offset, follow_die_sig_1): Ensure we load the DIEs
+	after calling maybe_queue_comp_unit.
+
+2021-02-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* linux-nat.c (linux_nat_filter_event): Return void.
+
+2021-02-22  Tom Tromey  <tromey@adacore.com>
+
+	* solib-svr4.c (enable_break): Update.
+	* bfd-target.c (class target_bfd) <target_bfd>: Change parameter
+	type.
+	(target_bfd_reopen): Change parameter type.
+	* bfd-target.h (target_bfd_reopen): Change parameter type.
+
+2021-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* thread.c (add_thread_silent): Add assert.
+	(find_thread_ptid): Add assert.
+
+2021-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/27435
+	* inf-ptrace.c (struct target_unpusher): Move to target.h.
+	(target_unpush_up): Likewise.
+	* procfs.c (procfs_target::attach): Push target early.  Use
+	target_unpush_up to unpush target in case of error.
+	* target.h (struct target_unpusher): Move here.
+	(target_unpush_up): Likewise.
+
+2021-02-19  Kevin Buettner  <kevinb@redhat.com>
+
+	* nat/amd64-linux-siginfo.c: Include "gdbsupport/common-defs.h"
+	(which in turn includes <gnulib/config.h>) before include
+	of <signal.h>.
+
+2021-02-19  Nelson Chu  <nelson.chu@sifive.com>
+
+	PR 27158
+	* riscv-tdep.c (decode_ci_type_insn): Updated encoding macros.
+	(decode_j_type_insn): Likewise.
+	(decode_cj_type_insn): Likewise.
+	(decode_b_type_insn): Likewise.
+	(decode): Likewise.
+
+2021-02-18  Tom Tromey  <tom@tromey.com>
+
+	* expression.h (struct expression) <evaluate>: Declare method.
+	* eval.c (evaluate_subexp): Simplify.
+	(expression::evaluate): New method.
+	(evaluate_expression, evaluate_type): Use expression::evaluate.
+
+2021-02-17  Kevin Buettner  <kevinb@redhat.com>
+
+	* ada-lang.c (ada_fold_name): Check for non-empty string prior
+	to accessing it.
+	(ada_lookup_name_info): Likewise.
+
+2021-02-13  Mike Frysinger  <vapier@gentoo.org>
+
+	* aclocal.m4: Regenerate.
+
+2021-02-12  Tom de Vries  <tdevries@suse.de>
+
+	PR threads/26228
+	* linux-nat.c (lin_thread_get_thread_signals): Remove.
+	(lin_thread_signals): New static var.
+	(lin_thread_get_thread_signal_num, lin_thread_get_thread_signal):
+	New function.
+	* linux-nat.h (lin_thread_get_thread_signals): Remove.
+	(lin_thread_get_thread_signal_num, lin_thread_get_thread_signal):
+	Declare.
+	* linux-thread-db.c (check_thread_signals): Use
+	lin_thread_get_thread_signal_num and lin_thread_get_thread_signal.
+
+2021-02-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (f77_keywords): Add allocated.
+	* f-lang.c (evaluate_subexp_f): Handle UNOP_FORTRAN_ALLOCATED.
+	(operator_length_f): Likewise.
+	(print_subexp_f): Likewise.
+	(dump_subexp_body_f): Likewise.
+	(operator_check_f): Likewise.
+	* std-operator.def (UNOP_FORTRAN_ALLOCATED): New operator.
+
+2021-02-11  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/27353
+	* dwarf2/attribute.c (attribute::form_requires_reprocessing):
+	Return true for DW_FORM_strx.
+
+2021-02-11  Tom Tromey  <tromey@adacore.com>
+
+	PR gdb/27383:
+	* parse.c (write_exp_symbol_reference): Write sym.block.
+
+2021-02-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* NEWS: Mention changes to 'maint info sections'.
+	* maint.c (match_substring): Return a bool, fix whitespace issue.
+	(struct single_bfd_flag_info): New struct.
+	(bfd_flag_info): New static global.
+	(match_bfd_flags): Return a bool, use bfd_flag_info.
+	(print_bfd_flags): Use bfd_flag_info.
+	(maint_print_section_info): Delete trailing whitespace.
+	(struct maint_info_sections_opts): New struct.
+	(maint_info_sections_option_defs): New static global.
+	(maint_info_sections_completer): New function.
+	(maintenance_info_sections): Use option parsing mechanism.
+	(_initialize_maint_cmds): Update command help text for 'maint info
+	sections' and register a command completer.
+
+2021-02-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* maint.c (print_bfd_section_info_maybe_relocated): Delete,
+	functionality merged into...
+	(maint_print_all_sections): ...this new function.
+	(maintenance_info_sections): Make use of maint_print_all_sections,
+	allow all objects to be printed even where there's no executable.
+
+2021-02-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* breakpoint.c (resolve_sal_pc): Make use of
+	bound_minimal_symbol::obj_section.
+	* maint.c (maintenance_translate_address): Likewise.
+	* minsyms.c (minimal_symbol_upper_bound): Likewise.
+	* minsyms.h (struct bound_minimal_symbol) <obj_section>: New
+	member function.
+	* printcmd.c (info_address_command): Make use of
+	bound_minimal_symbol::obj_section.
+
+2021-02-11  Alan Modra  <amodra@gmail.com>
+
+	* arm-symbian-tdep.c: Delete.
+	* NEWS: Mention arm-symbian removal.
+	* Makefile.in: Remove arm-symbian-tdep entries.
+	* configure.tgt: Remove arm*-*-symbianelf*.
+	* doc/gdb.texinfo: Remove mention of SymbianOS.
+	* osabi.c (gdb_osabi_names): Remove "Symbian".
+	* osabi.h (enum gdb_osabi): Remove GDB_OSABI_SYMBIAN.
+	* testsuite/gdb.base/ending-run.exp: Remove E32Main handling.
+	* testsuite/gdb.ada/catch_ex_std.exp: Remove arm*-*-symbianelf*
+	handling.
+	* testsuite/gdb.base/dup-sect.exp: Likewise.
+	* testsuite/gdb.base/long_long.exp: Likewise.
+	* testsuite/gdb.base/solib-weak.exp: Likewise.
+	* testsuite/gdb.guile/scm-section-script.exp: Likewise.
+	* testsuite/gdb.python/py-section-script.exp: Likewise.
+	* testsuite/lib/dwarf.exp: Likewise.
+	* testsuite/lib/gdb.exp: Likewise.
+
+2021-02-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (UNOP_OR_BINOP_INTRINSIC): New token.
+	(exp): New pattern using UNOP_OR_BINOP_INTRINSIC.
+	(one_or_two_args): New pattern.
+	(f77_keywords): Add lbound and ubound.
+	* f-lang.c (fortran_bounds_all_dims): New function.
+	(fortran_bounds_for_dimension): New function.
+	(evaluate_subexp_f): Handle FORTRAN_LBOUND and FORTRAN_UBOUND.
+	(operator_length_f): Likewise.
+	(print_subexp_f): Likewise.
+	(dump_subexp_body_f): Likewise.
+	(operator_check_f): Likewise.
+	* std-operator.def (FORTRAN_LBOUND): Define.
+	(FORTRAN_UBOUND): Define.
+
+2021-02-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* coff-pe-read.c (add_pe_forwarded_sym): Make use of section_index
+	and set_section_index member functions where appropriate.
+	* coffread.c (coff_symtab_read): Likewise.
+	(process_coff_symbol): Likewise.
+	* ctfread.c (set_symbol_address): Likewise.
+	* dwarf2/read.c (add_partial_symbol): Likewise.
+	(var_decode_location): Likewise.
+	* language.c: Likewise.
+	* minsyms.c (minimal_symbol_reader::record_full): Likewise.
+	(compact_minimal_symbols): Likewise.
+	(minimal_symbol_upper_bound): Likewise.
+	* objfiles.c (relocate_one_symbol): Likewise.
+	* psympriv.h (partial_symbol::obj_section): Likewise.
+	(partial_symbol::address): Likewise.
+	* psymtab.c (partial_symtab::add_psymbol): Likewise.
+	* stabsread.c (scan_file_globals): Likewise.
+	* symmisc.c (dump_msymbols): Likewise.
+	* symtab.c (general_symbol_info::obj_section): Likewise.
+	(fixup_section): Likewise.
+	(get_msymbol_address): Likewise.
+	* symtab.h (general_symbol_info::section): Rename to...
+	(general_symbol_info::m_section): ...this.
+	(general_symbol_info::set_section_index): New member function.
+	(general_symbol_info::section_index): Likewise.
+	(SYMBOL_SECTION): Delete.
+	(MSYMBOL_VALUE_ADDRESS): Make use of section_index and
+	set_section_index member functions where appropriate.
+	(MSYMBOL_SECTION): Delete.
+	(symbol::symbol): Update to initialize 'm_section'.
+	* xcoffread.c (read_xcoff_symtab): Make use of set_section_index.
+	(process_xcoff_symbol): Likewise.
+
+2021-02-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* breakpoint.c (resolve_sal_pc): Replace SYMBOL_OBJ_SECTION and
+	MSYMBOL_OBJ_SECTION.
+	* findvar.c (language_defn::read_var_value): Likewise.
+	* infcmd.c (jump_command): Likewise.
+	* linespec.c (minsym_found): Likewise.
+	* maint.c (maintenance_translate_address): Likewise.
+	* minsyms.c (lookup_minimal_symbol_by_pc_section): Likewise.
+	(minimal_symbol_upper_bound): Likewise.
+	* parse.c (find_minsym_type_and_address): Likewise.
+	(operator_check_standard): Likewise.
+	* printcmd.c (info_address_command): Likewise.
+	* symmisc.c (dump_msymbols): Likewise.
+	(print_symbol): Likewise.
+	* symtab.c (general_symbol_info::obj_section): Define new
+	function.
+	(fixup_symbol_section): Replace SYMBOL_OBJ_SECTION.
+	(find_pc_sect_compunit_symtab): Likewise.
+	(find_function_start_sal): Likewise.
+	(skip_prologue_sal): Replace SYMBOL_OBJ_SECTION and
+	MSYMBOL_OBJ_SECTION.
+	* symtab.h (struct general_symbol_info) <obj_section>: Declare new
+	function.
+	(SYMBOL_OBJ_SECTION): Delete.
+	(MSYMBOL_OBJ_SECTION): Delete.
+
+2021-02-09  Tom Tromey  <tom@tromey.com>
+
+	* stap-probe.c (stap_parse_argument_conditionally): Fix typo.
+
+2021-02-09  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/27341
+	* dwarf2/read.c (read_array_type): Return NULL when not being able to
+	construct an array type.  Add assert to ensure that element_type is
+	not being modified.
+
+2021-02-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gcore.c (struct gcore_collect_regset_section_cb_data): Delete.
+	(gcore_collect_regset_section_cb): Delete.
+	(gcore_collect_thread_registers): Delete.
+	(gcore_build_thread_register_notes): Delete.
+	(gcore_find_signalled_thread): Delete.
+	* gcore.h: Remove 'gdbsupport/gdb_signals.h' include and delete
+	'gdbarch' and 'thread_info' declarations.
+	(gcore_build_thread_register_notes): Delete declaration.
+	(gcore_find_signalled_thread): Likewise.
+	* fbsd-tdep.c: Remove 'gcore.h' include.
+	(struct fbsd_collect_regset_section_cb_data): New struct.
+	(fbsd_collect_regset_section_cb): New function.
+	(fbsd_collect_thread_registers): New function.
+	(struct fbsd_corefile_thread_data): New struct.
+	(fbsd_corefile_thread): New function.
+	(fbsd_make_corefile_notes): Call FreeBSD specific code.
+	* linux-tdep.c: Remove 'gcore.h' include.
+	(struct linux_collect_regset_section_cb_data): New struct.
+	(linux_collect_regset_section_cb): New function.
+	(linux_collect_thread_registers): New function.
+	(linux_corefile_thread): Call Linux specific code.
+	(find_signalled_thread): New function.
+	(linux_make_corefile_notes): Call find_signalled_thread.
+
+2021-02-09  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (coerce_unspec_val_to_type): Avoid making lazy
+	not_lval value.
+	* value.c (value_contents_copy_raw): Now static.
+	* value.h (value_contents_copy_raw): Don't declare.
+
+2021-02-09  Tom Tromey  <tromey@adacore.com>
+
+	* gdbtypes.c (resolve_dynamic_struct): Handle structure with no
+	fields.
+
+2021-02-08  Shahab Vahedi  <shahab@synopsys.com>
+
+	PR tdep/27369
+	* arc-linux-tdep.c (handle_atomic_sequence): New.
+	(arc_linux_software_single_step): Call handle_atomic_sequence().
+
+2021-02-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-tui.c (gdbpy_tui_window) <is_valid>: New member
+	function.
+	(REQUIRE_WINDOW): Call is_valid member function.
+	(REQUIRE_WINDOW_FOR_SETTER): New define.
+	(gdbpy_tui_is_valid): Call is_valid member function.
+	(gdbpy_tui_set_title): Call REQUIRE_WINDOW_FOR_SETTER instead.
+	* tui/tui-data.h (struct tui_win_info) <is_visible>: Check
+	tui_active too.
+	* tui/tui-layout.c (tui_apply_current_layout): Add an assert.
+	* tui/tui.c (tui_enable): Move setting of tui_active earlier in
+	the function.
+
+2021-02-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/py-tui.c (gdbpy_tui_set_title): Check that the new value
+	for the title is not nullptr.
+
+2021-02-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui-layout.c (saved_tui_windows): Delete.
+	(tui_apply_current_layout): Don't make use of saved_tui_windows,
+	call new get_windows member function instead.
+	(tui_get_window_by_name): Check in tui_windows.
+	(tui_layout_window::apply): Don't add to tui_windows.
+	* tui-layout.h (tui_layout_base::get_windows): New member function.
+	(tui_layout_window::get_windows): Likewise.
+	(tui_layout_split::get_windows): Likewise.
+
+2021-02-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui/tui-layout.c (tui_apply_current_layout): Restore the delete
+	of the window objects.
+
+2021-02-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python/python.c (gdbpy_print_stack): Reformat an error message.
+
+2021-02-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui/tui-interp.c (tui_command_line_handler): New function.
+	(tui_interp::resume): Register tui_command_line_handler as the
+	input_handler.
+	* tui/tui-io.c (tui_inject_newline_into_command_window): New
+	function.
+	(tui_getc_1): Delete handling of '\n' and '\r'.
+	* tui-io.h (tui_inject_newline_into_command_window): Declare.
+
+2021-02-07  Hannes Domani  <ssbssa@yahoo.de>
+
+	* tui/tui-regs.c (tui_data_window::display_registers_from):
+	Mark invisible register sub windows.
+	(tui_data_window::check_register_values): Ignore invisible
+	register sub windows.
+
+2021-02-07  Hannes Domani  <ssbssa@yahoo.de>
+
+	* tui/tui-regs.c (tui_data_item_window::rerender): Don't call
+	n_spaces with a negative value.
+
+2021-02-07  Hannes Domani  <ssbssa@yahoo.de>
+
+	* tui/tui-regs.c (tui_data_window::display_registers_from):
+	Add refresh_window call.
+
+2021-02-07  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python/py-frame.c (frapy_richcompare): Compare frame_id_is_next.
+
+2021-02-05  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* symmisc.c (std_in, std_out, std_err): Remove.
+	(_initialize_symmisc): Don't set std_in, std_out and std_err.
+
+2021-02-05  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoints/27330
+	* breakpoint.c (create_exception_master_breakpoint): Handle case that
+	glibc object file has debug info.
+
+2021-02-05  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/27333
+	* dwarf2/read.c (process_psymtab_comp_unit): Handle DW_TAG_type_unit.
+
+2021-02-05  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoints/27313
+	* break-catch-syscall.c (catch_syscall_split_args): Reject negative
+	syscall numbers.
+
+2021-02-05  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile-c-support.c (get_compile_context)
+	(c_get_compile_context, cplus_get_compile_context): Change return
+	type.
+	* language.c (language_defn::get_compile_instance): New method.
+	* language.h (language_defn::get_compile_instance): Change return
+	type.  No longer inline.
+	* c-lang.c (c_language::get_compile_instance): Change return type.
+	(cplus_language::get_compile_instance): Change return type.
+	* c-lang.h (c_get_compile_context, cplus_get_compile_context):
+	Change return type.
+	* compile/compile.c (compile_to_object): Update.
+
+2021-02-05  Tom Tromey  <tom@tromey.com>
+
+	* parser-defs.h (write_exp_symbol_reference): Declare.
+	* parse.c (write_exp_symbol_reference): New function.
+	* p-exp.y (variable): Use write_exp_symbol_reference.
+	* m2-exp.y (variable): Use write_exp_symbol_reference.
+	* f-exp.y (variable): Use write_exp_symbol_reference.
+	* d-exp.y (PrimaryExpression): Use write_exp_symbol_reference.
+	* c-exp.y (variable): Use write_exp_symbol_reference.
+
+2021-02-05  Tom de Vries  <tdevries@suse.de>
+
+	PR exp/27265
+	* valarith.c (complex_binop): Throw an error if complex type can't
+	be created.
+
+2021-02-05  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/27307
+	* dwarf2/read.c (create_cus_from_debug_names_list): Add missing
+	return.
+
+2021-02-05  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (create_cus_from_debug_names_list): Fix indentation.
+
+2021-02-04  Mike Frysinger  <vapier@gentoo.org>
+
+	* configure.tgt (riscv*-*-*): Set gdb_sim.
+
+2021-02-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.c (target_is_non_stop_p): Return bool.
+	* target.h (target_is_non_stop_p): Return bool.
+
+2021-02-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* record-full.c (record_full_async_inferior_event_handler):
+	Don't clear async event handler.
+	(record_full_base_target::wait): Clear async event handler at
+	beginning.
+
+2021-02-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* record-btrace.c (record_btrace_handle_async_inferior_event):
+	Don't clear async event handler.
+	(record_btrace_target::wait): Clear async event handler at
+	beginning.
+
+2021-02-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* remote.c (remote_target::wait): Clear async event handler at
+	beginning, mark if needed at the end.
+	(remote_async_inferior_event_handler): Don't set or clear async
+	event handler.
+
+2021-02-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* async-event.h (async_event_handler_func):  Add documentation.
+	* async-event.c (check_async_event_handlers): Don't clear
+	async_event_handler ready flag.
+	* infrun.c (infrun_async_inferior_event_handler): Clear ready
+	flag.
+	* record-btrace.c (record_btrace_handle_async_inferior_event):
+	Likewise.
+	* record-full.c (record_full_async_inferior_event_handler):
+	Likewise.
+	* remote-notif.c (remote_async_get_pending_events_handler):
+	Likewise.
+	* remote.c (remote_async_inferior_event_handler): Likewise.
+
+2021-02-03  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (handle_inferior_event): Move stop_soon variable to
+	inner scope.
+
+2021-02-03  Pedro Alves  <pedro@palves.net>
+
+	* infcmd.c (detach_command): Hold strong reference to target, and
+	if all-stop on entry, restart threads on exit.
+	* infrun.c (switch_back_to_stepped_thread): Factor out bits to ...
+	(restart_stepped_thread): ... this new function.  Also handle
+	trap_expected.
+	(restart_after_all_stop_detach): New function.
+	* infrun.h (restart_after_all_stop_detach): Declare.
+
+2021-02-03  Pedro Alves  <pedro@palves.net>
+
+	* infrun.c (struct step_over_info): Initialize fields.
+	(prepare_for_detach): Handle ongoing in-line step over.
+
+2021-02-03  Pedro Alves  <pedro@palves.net>
+
+	* linux-nat.c (linux_nat_target::detach): Remove breakpoints
+	here...
+	* remote.c (remote_target::remote_detach_1): ... and here ...
+	* target.c (target_detach): ... instead of here.
+	* target.h (target_ops::detach): Add comment.
+
+2021-02-03  Pedro Alves  <pedro@palves.net>
+
+	* infrun.c (struct wait_one_event): Move higher up.
+	(prepare_for_detach): Abort in-progress displaced steps instead of
+	letting them complete.
+	(handle_one): If the inferior is detaching, don't add the thread
+	back to the global step-over chain.
+	(restart_threads): Don't restart threads if detaching.
+	(handle_signal_stop): Remove inferior::detaching reference.
+
+2021-02-03  Pedro Alves  <pedro@palves.net>
+
+	* infrun.c (prepare_for_detach): Don't release scoped_restore
+	before returning.
+
+2021-02-03  Pedro Alves  <pedro@palves.net>
+
+	* infrun.c (handle_one): New function, factored out from ...
+	(stop_all_threads): ... here.
+
+2021-02-03  Pedro Alves  <pedro@palves.net>
+
+	* remote.c (remote_notif_stop_ack): Don't error out on
+	TARGET_WAITKIND_IGNORE; instead, just ignore the notification.
+	(remote_target::discard_pending_stop_replies): Don't delete
+	in-flight notification; instead, clear its contents.
+
+2021-02-03  Pedro Alves  <pedro@palves.net>
+
+	* remote.c (extended_remote_target::attach): Set target async in
+	the target-non-stop path too.
+
+2021-02-03  Pedro Alves  <pedro@palves.net>
+
+	PR gdb/27055
+	* infrun.c (handle_signal_stop): Move main context_switch call
+	earlier, before STOP_QUIETLY_NO_SIGSTOP.
+
+2021-02-02  Lancelot SIX  <lsix@lancelotsix.com>
+
+	* NEWS (Changed commands): Add entry for the behavior change of
+	the inferior command.
+	* inferior.c (inferior_command): When no argument is given to the
+	inferior command, display info about the currently selected
+	inferior.
+
+2021-02-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (read_loclist_index, read_rnglist_index): Return
+	a sect_offset.
+	(read_attribute_reprocess): Adjust.
+
+2021-02-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/die.h (struct die_info) <ranges_base>: Split in...
+	<gnu_ranges_base>: ... this...
+	<rnglists_base>: ... and this.
+	* dwarf2/read.c (struct dwarf2_cu) <ranges_base>: Split in...
+	<gnu_ranges_base>: ... this...
+	<rnglists_base>: ... and this.
+	(read_cutu_die_from_dwo): Adjust
+	(dwarf2_get_pc_bounds): Adjust
+	(dwarf2_record_block_ranges): Adjust.
+	(read_full_die_1): Adjust
+	(partial_die_info::read): Adjust.
+	(read_rnglist_index): Adjust.
+
+2021-02-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	PR gdb/26813
+	* dwarf2/read.c (read_loclists_rnglists_header): Add
+	header_offset parameter and use it.
+	(read_loclist_index): Read header of the current contribution,
+	not the one at the beginning of the section.
+	(read_rnglist_index): Likewise.
+
+2021-02-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	PR gdb/26813
+	* dwarf2/attribute.h (struct attribute) <set_unsigned>: Clear
+	requires_reprocessing flag.
+	* dwarf2/attribute.c (attribute::form_is_unsigned): Handle
+	DW_FORM_loclistx.
+	(attribute::form_requires_reprocessing): Handle DW_FORM_rnglistx
+	and DW_FORM_loclistx.
+	* dwarf2/read.c (read_attribute_reprocess): Use set_unsigned
+	instead of set_address for DW_FORM_loclistx and
+	DW_FORM_rnglistx.
+
+2021-02-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (read_loclist_index): Remove bound check for
+	start of offset.
+	(read_rnglist_index): Likewise.
+
+2021-02-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (read_loclist_index): Add bound check for the end
+	of the offset.
+
+2021-02-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (read_rnglist_index): Fix bound check.
+
+2021-02-02  Simon Marchi  <simon.marchi@efficios.com>
+
+	* dwarf2/read.c (read_loclist_index): Change complaints into
+	errors.
+
+2021-02-02  Tom de Vries  <tdevries@suse.de>
+
+	PR symtab/24620
+	* dwarf2/index-write.c (write_one_signatured_type): Skip if
+	psymtab == nullptr.
+
+2021-02-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add corefile.h.
+	* gcore.c (struct gcore_collect_regset_section_cb_data): Moved
+	here from linux-tdep.c and given a new name.  Minor cleanups.
+	(gcore_collect_regset_section_cb): Likewise.
+	(gcore_collect_thread_registers): Likewise.
+	(gcore_build_thread_register_notes): Likewise.
+	(gcore_find_signalled_thread): Likewise.
+	* gcore.h (gcore_build_thread_register_notes): Declare.
+	(gcore_find_signalled_thread): Declare.
+	* fbsd-tdep.c: Add 'gcore.h' include.
+	(struct fbsd_collect_regset_section_cb_data): Delete.
+	(fbsd_collect_regset_section_cb): Delete.
+	(fbsd_collect_thread_registers): Delete.
+	(struct fbsd_corefile_thread_data): Delete.
+	(fbsd_corefile_thread): Delete.
+	(fbsd_make_corefile_notes): Call
+	gcore_build_thread_register_notes instead of the now deleted
+	FreeBSD code.
+	* linux-tdep.c: Add 'gcore.h' include.
+	(struct linux_collect_regset_section_cb_data): Delete.
+	(linux_collect_regset_section_cb): Delete.
+	(linux_collect_thread_registers): Delete.
+	(linux_corefile_thread): Call
+	gcore_build_thread_register_notes.
+	(find_signalled_thread): Delete.
+	(linux_make_corefile_notes): Call gcore_find_signalled_thread.
+
+2021-01-29  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoints/26063
+	* infrun.c (process_event_stop_test): Reset
+	ecs->event_thread->current_line to 0 if is-stmt=n and frame has
+	changed.
+
+2021-01-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* thread.c (thr_try_catch_cmd): Replace swith_to_thread with an
+	assert.  Extend the header comment.
+
+2021-01-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* Makefile.in (SUBDIR_TUI_SRCS): Add tui/tui-location.c.
+	(HFILES_NO_SRCDIR): Add tui/tui-location.h.
+	* tui/tui-data.h (TUI_STATUS_WIN): Define.
+	(tui_locator_win_info_ptr): Delete declaration.
+	* tui/tui-disasm.c: Add 'tui/tui-location.h' include.
+	(tui_disasm_window::set_contents): Fetch state from tui_location
+	global.
+	(tui_get_begin_asm_address): Likewise.
+	* tui/tui-layout.c (tui_apply_current_layout): Remove special case
+	for locator window.
+	(get_locator_window): Delete.
+	(initialize_known_windows): Treat locator window just like all the
+	rest.
+	* tui/tui-source.c: Add 'tui/tui-location.h' include.
+	(tui_source_window::set_contents): Fetch state from tui_location
+	global.
+	(tui_source_window::showing_source_p): Likewise.
+	* tui/tui-stack.c: Add 'tui/tui-location.h' include.
+	(_locator): Delete.
+	(tui_locator_win_info_ptr): Delete.
+	(tui_locator_window::make_status_line): Fetch state from
+	tui_location global.
+	(tui_locator_window::rerender): Remove check of 'handle',
+	reindent function body.
+	(tui_locator_window::set_locator_fullname): Delete.
+	(tui_locator_window::set_locator_info): Delete.
+	(tui_update_locator_fullname): Delete.
+	(tui_show_frame_info): Likewise.
+	(tui_show_locator_content): Access window through TUI_STATUS_WIN.
+	* tui/tui-stack.h (tui_locator_window::set_locator_info): Moved to
+	tui/tui-location.h and renamed to
+	tui_location_tracker::set_location.
+	(tui_locator_window::set_locator_fullname): Moved to
+	tui/tui-location.h and renamed to
+	tui_location_tracker::set_fullname.
+	(tui_locator_window::full_name): Delete.
+	(tui_locator_window::proc_name): Delete.
+	(tui_locator_window::line_no): Delete.
+	(tui_locator_window::addr): Delete.
+	(tui_locator_window::gdbarch): Delete.
+	(tui_update_locator_fullname): Delete declaration.
+	* tui/tui-wingeneral.c (tui_refresh_all): Removed special handling
+	for locator window.
+	* tui/tui-winsource.c: Add 'tui/tui-location.h' include.
+	(tui_display_main): Call function on tui_location directly.
+	* tui/tui.h (enum tui_win_type): Add STATUS_WIN.
+	* tui/tui-location.c: New file.
+	* tui/tui-location.h: New file.
+
+2021-01-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (get_type_arch): Rename to...
+	(struct type) <arch>: ... this, update all users.
+
+2021-01-28  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (struct type) <arch>: Rename to...
+	<arch_owner>: ... this, update all users.
+	<objfile>: Rename to...
+	<objfile_owner>: ... this, update all users.
+
+2021-01-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdbcmd.h (execute_command_to_string): Update comment.
+	* top.c (execute_command_to_string): Update header comment.
+
+2021-01-28  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoints/27205
+	* breakpoint.c (create_longjmp_master_breakpoint_probe)
+	(create_longjmp_master_breakpoint_names): New function, factored out
+	of ...
+	(create_longjmp_master_breakpoint): ... here.  Only try to install
+	longjmp_names breakpoints in libc.so/libc.so.debug if installing probe
+	breakpoint in libc.so failed.
+
+2021-01-27  Lancelot SIX  <lsix@lancelotsix.com>
+
+	PR gdb/27133
+	* cli/cli-interp.c (cli_interp_base::set_logging): Ensure the
+	unique_ptr is released when the wrapped pointer is kept for later
+	use.
+
+2021-01-27  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+	* aarch64-tdep.c (aarch64_displaced_step_others): Account for
+	BLR and BR instructions.
+	* arch/aarch64-insn.h (enum aarch64_opcodes): Add BR opcode.
+	(enum aarch64_masks): New.
+
+2021-01-26  Tom Tromey  <tromey@adacore.com>
+
+	* windows-nat.c (DEBUG_EXEC, DEBUG_EVENTS, DEBUG_MEM)
+	(DEBUG_EXCEPT): Use debug_prefixed_printf_cond.
+	(windows_init_thread_list, windows_nat::handle_load_dll)
+	(windows_nat::handle_unload_dll, windows_nat_target::resume)
+	(windows_nat_target::resume)
+	(windows_nat_target::get_windows_debug_event)
+	(windows_nat_target::interrupt, windows_xfer_memory)
+	(windows_nat_target::close): Update.
+	* nat/windows-nat.c (DEBUG_EVENTS): Use
+	debug_prefixed_printf_cond.
+	(matching_pending_stop, fetch_pending_stop)
+	(continue_last_debug_event): Update.
+
+2020-12-17  Mihails Strasuns  <mihails.strasuns@intel.com>
+
+	* linux-tdep.c (linux_make_mappings_corefile_notes): Start using
+	elfcore_write_file_note.
+
+2021-01-26  Shahab Vahedi  <shahab@synopsys.com>
+
+	* arc-tdep.c (arc_add_reggroups): New function.
+	(arc_gdbarch_init): Call arc_add_reggroups.
+
+2021-01-26  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* arc-tdep.c (arc_skip_prologue): Log "pc" address.
+
+2021-01-25  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+	    Simon Marchi  <simon.marchi@polymtl.ca>
+	    Tom de Vries  <tdevries@suse.de>
+
+	* dwarf2/read.c (partial_die_info::read): Use as_unsigned () for
+	DW_AT_ranges.
+
+2021-01-25  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf2/read.c (get_mpz): New function.
+	(get_dwarf2_rational_constant): Use it.
+
+2021-01-25  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (resolve_subexp): Handle array context.
+
+2021-01-23  Tom Tromey  <tom@tromey.com>
+
+	PR compile/25575
+	* compile/compile-loc2c.c (note_register): New function.
+	(pushf_register_address, pushf_register): Use it.
+
+2021-01-23  Tom Tromey  <tom@tromey.com>
+
+	* symtab.h (struct symbol_computed_ops) <generate_c_location>:
+	Change type of "registers_used".
+	* dwarf2/loc.h (dwarf2_compile_property_to_c): Update.
+	* dwarf2/loc.c (dwarf2_compile_property_to_c)
+	(locexpr_generate_c_location, loclist_generate_c_location): Change
+	type of "registers_used".
+	* compile/compile.h (compile_dwarf_expr_to_c)
+	(compile_dwarf_bounds_to_c): Update.
+	* compile/compile-loc2c.c (pushf_register_address)
+	(pushf_register, do_compile_dwarf_expr_to_c)
+	(compile_dwarf_expr_to_c, compile_dwarf_bounds_to_c): Change type
+	of "registers_used".
+	* compile/compile-c.h (generate_c_for_variable_locations):
+	Update.
+	* compile/compile-c-symbols.c (generate_vla_size)
+	(generate_c_for_for_one_variable): Change type of
+	"registers_used".
+	(generate_c_for_variable_locations): Return std::vector.
+	* compile/compile-c-support.c (generate_register_struct): Change
+	type of "registers_used".
+	(compute): Update.
+
+2021-01-23  Tom Tromey  <tom@tromey.com>
+
+	* compile/compile-internal.h (class compile_instance)
+	<set_arguments>: Change return type.
+	* compile/compile.c (compile_to_object): Remove call to reset.
+	(compile_instance::set_arguments): Change return type.
+
+2021-01-23  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.c (copy_type_recursive): Use get_type_arch.
+	* gdbtypes.h (struct type) <set_owner>: Add asserts.
+
+2021-01-23  Lancelot SIX  <lsix@lancelotsix.com>
+
+	* Makefile.in (SELFTESTS_SRCS): Add
+	unittests/gdb_tilde_expand-selftests.c.
+	* unittests/gdb_tilde_expand-selftests.c: New file.
+
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR cli/25956
+	* NEWS: Mention new command.
+	* cli/cli-style.c: Add 'cli/cli-setshow.h' include.
+	(version_style): Define.
+	(cli_style_option::cli_style_option): Add intensity parameter, and
+	use as appropriate.
+	(_initialize_cli_style): Register version style set/show commands.
+	* cli/cli-style.h (cli_style_option): Add intensity parameter.
+	(version_style): Declare.
+	* top.c (print_gdb_version): Use version_stype, and styled_string
+	to print the GDB version string.
+
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* utils.c (emit_style_escape): Only emit an escape sequence if the
+	requested style is different than the current applied style.
+	(fputs_maybe_filtered): Adjust the juggling of the wrap_style, and
+	current applied_style.
+	(fputs_styled): Remove is_default check.
+	(fputs_styled_unfiltered): Likewise.
+	(vfprintf_styled_no_gdbfmt): Likewise.
+
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* remote.h (remote_debug_printf): New.
+	(remote_debug_printf_nofunc): New.
+	(REMOTE_SCOPED_DEBUG_ENTER_EXIT): New.
+	* remote.c: Use above macros throughout file.
+
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* remote.h (remote_debug): Change to bool.
+	* remote.c (remote_debug): Change to bool.
+	(_initialize_remote): Adjust.
+
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.h (remote_debug): Move to...
+	* remote.h (remote_debug): ... here.
+	* top.c (remote_debug): Move to...
+	* remote.c (remote_debug): ... here.
+	* remote-sim.c: Include remote.h.
+
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* cli/cli-cmds.c (show_remote_debug): Remove.
+	(show_remote_timeout): Remove.
+	(_initialize_cli_cmds): Don't register commands.
+	* remote.c (show_remote_debug): Move here.
+	(show_remote_timeout): Move here.
+	(_initialize_remote): Register commands.
+
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (TYPE_OBJFILE): Remove, change all users to use the
+	type::objfile method instead.
+
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdbtypes.h (TYPE_OBJFILE_OWNED): Remove, update all users to
+	use the type::is_objfile_owned method.
+
+2021-01-22  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdbtypes.h (TYPE_OBJFILE_OWNED): Adjust.
+	(TYPE_OWNER): Remove.
+	(TYPE_OBJFILE): Adjust.
+	(struct main_type) <flag_objfile_owned>: Rename to...
+	<m_flag_objfile_owned>: ... this.
+	<owner>: Rename to...
+	<m_owner>: ... this.
+	(struct type) <is_objfile_owned, set_owner, objfile, arch>: New
+	methods.
+	(TYPE_ALLOC): Adjust.
+	* gdbtypes.c (alloc_type): Adjust.
+	(alloc_type_arch): Adjust.
+	(alloc_type_copy): Adjust.
+	(get_type_arch): Adjust.
+	(smash_type): Adjust.
+	(lookup_array_range_type): Adjust.
+	(recursive_dump_type): Adjust.
+	(copy_type_recursive): Adjust.
+	* compile/compile-c-types.c (convert_func): Adjust.
+	(convert_type_basic): Adjust.
+	* compile/compile-cplus-types.c (compile_cplus_convert_func):
+	Adjust.
+	* language.c
+	(language_arch_info::type_and_symbol::alloc_type_symbol):
+	Adjust.
+
+2021-01-21  Luis Machado  <luis.machado@linaro.org>
+
+	* coffread.c (enter_linenos): Passing string to complaint.
+	* valops.c (value_assign): Make array view.
+
+2021-01-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* auto-load.h (debug_auto_load): Move here.
+	(auto_load_debug_printf): New.
+	* auto-load.c: Use auto_load_debug_printf.
+	(debug_auto_load): Move to header.
+	* linux-thread-db.c (try_thread_db_load): Use
+	auto_load_debug_printf.
+	* main.c (captured_main_1): Likewise.
+
+2021-01-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* f-valprint.c (f77_array_offset_tbl): Remove.
+
+2021-01-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdb_bfd.c (bfd_cache_debug_printf): New, use throughout file.
+
+2021-01-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* ser-tcp.c (wait_for_connect): Use interruptible_select instead
+	of gdb_select.
+
+2021-01-21  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR python/19151
+	* python/py-breakpoint.c (bppy_get_location): Handle
+	bp_hardware_breakpoint.
+	(bppy_init): Likewise.
+	(gdbpy_breakpoint_created): Likewise.
+
+2021-01-21  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* arm-tdep.c (arm_debug_printf): Add and use throughout file.
+
+2021-01-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdb_bfd.c (debug_bfd_cache): Change type to bool.
+	(_initialize_gdb_bfd): Adjust.
+
+2021-01-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/26828
+	* dwarf2/read.c (maybe_queue_comp_unit): Add assertion.
+
+2021-01-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* dwarf2/read.c (follow_die_offset): Add logging.
+	(dwarf2_per_objfile::age_comp_units): Add logging.
+
+2021-01-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* aarch64-linux-tdep.c (aarch64_linux_record_tdep): Make static.
+	* aarch64-tdep.c (tdesc_aarch64_list, aarch64_prologue_unwind,
+	aarch64_stub_unwind, aarch64_normal_base, ): Make static.
+	* arm-linux-tdep.c (arm_prologue_unwind): Make static.
+	* arm-tdep.c (struct frame_unwind): Make static.
+	* auto-load.c (auto_load_safe_path_vec): Make static.
+	* csky-tdep.c (csky_stub_unwind): Make static.
+	* gdbarch.c (gdbarch_data_registry): Make static.
+	* gnu-v2-abi.c (gnu_v2_abi_ops): Make static.
+	* i386-netbsd-tdep.c (i386nbsd_mc_reg_offset): Make static.
+	* i386-tdep.c (i386_frame_setup_skip_insns,
+	i386_tramp_chain_in_reg_insns, i386_tramp_chain_on_stack_insns):
+	Make static.
+	* infrun.c (observer_mode): Make static.
+	* linux-nat.c (sigchld_action): Make static.
+	* linux-thread-db.c (thread_db_list): Make static.
+	* maint-test-options.c (maintenance_test_options_list):
+	* mep-tdep.c (mep_csr_registers): Make static.
+	* mi/mi-cmds.c (struct mi_cmd_stats): Remove struct type name.
+	(stats): Make static.
+	* nat/linux-osdata.c (struct osdata_type): Make static.
+	* ppc-netbsd-tdep.c (ppcnbsd_reg_offsets): Make static.
+	* progspace.c (last_program_space_num): Make static.
+	* python/py-param.c (struct parm_constant): Remove struct type
+	name.
+	(parm_constants): Make static.
+	* python/py-record-btrace.c (btpy_list_methods): Make static.
+	* python/py-record.c (recpy_gap_type): Make static.
+	* record.c (record_goto_cmdlist): Make static.
+	* regcache.c (regcache_descr_handle): Make static.
+	* registry.h (DEFINE_REGISTRY): Make definition static.
+	* symmisc.c (std_in, std_out, std_err): Make static.
+	* top.c (previous_saved_command_line): Make static.
+	* tracepoint.c (trace_user, trace_notes, trace_stop_notes): Make
+	static.
+	* unittests/command-def-selftests.c (nr_duplicates,
+	nr_invalid_prefixcmd, lists): Make static.
+	* unittests/observable-selftests.c (test_notification): Make
+	static.
+	* unittests/optional/assignment/1.cc (counter): Make static.
+	* unittests/optional/assignment/2.cc (counter): Make static.
+	* unittests/optional/assignment/3.cc (counter): Make static.
+	* unittests/optional/assignment/4.cc (counter): Make static.
+	* unittests/optional/assignment/5.cc (counter): Make static.
+	* unittests/optional/assignment/6.cc (counter): Make static.
+
+2021-01-20  Joel Sherrill  <joel@rtems.org>
+
+	PR gdb/27219
+	* remote.c (struct remote_thread_info) <resume_state>: Rename
+	to...
+	<get_resume_state>: ... this.
+	(remote_target::resume): Adjust.
+	(remote_target::commit_resume): Adjust.
+	(remote_target::select_thread_for_ambiguous_stop_reply): Adjust.
+
+2021-01-20  Sergio Durigan Junior  <sergiodj@sergiodj.net>
+	    Tom Tromey <tom@tromey.com>
+
+	* stap-probe.c (stap_parse_single_operand): Handle '!'
+	operator.
+	(stap_parse_argument_conditionally): Likewise.
+	Skip spaces after processing open-parenthesis sub-expression.
+	(stap_parse_argument_1): Skip spaces after call to
+	stap_parse_argument_conditionally.
+	Handle case when right-side expression is a parenthesized
+	sub-expression.
+	Skip spaces after call to stap_parse_argument_1.
+
+2021-01-19  Lancelot SIX  <lsix@lancelotsix.com>
+
+	* top.h (switch_thru_all_uis): Use DISABLE_COPY_AND_ASSIGN.
+
+2021-01-19  Luis Machado  <luis.machado@linaro.org>
+
+	* trad-frame.h (trad_frame_saved_reg) <set_value_bytes>: Allocate
+	memory and save data.
+	(trad_frame_set_value, trad_frame_set_realreg, trad_frame_set_addr)
+	(trad_frame_set_unknown, trad_frame_set_value_bytes)
+	(trad_frame_value_p, trad_frame_addr_p, trad_frame_realreg_p)
+	(trad_frame_value_bytes_p): Remove.
+	(trad_frame_reset_saved_regs): Adjust documentation.
+	* trad-frame.c (trad_frame_alloc_saved_regs): Initialize via a
+	constructor and reset the state of the registers.
+	(trad_frame_value_p, trad_frame_addr_p, trad_frame_realreg_p)
+	(trad_frame_value_bytes_p, trad_frame_set_value)
+	(trad_frame_set_realreg, trad_frame_set_addr)
+	(trad_frame_set_unknown, trad_frame_set_value_bytes): Remove.
+	(trad_frame_set_reg_realreg): Update to call member function.
+	(trad_frame_set_reg_addr, trad_frame_set_reg_value_bytes): Likewise.
+	(trad_frame_get_prev_register): Likewise.
+
+	* aarch64-tdep.c (aarch64_analyze_prologue)
+	(aarch64_analyze_prologue_test, aarch64_make_prologue_cache_1)
+	(aarch64_prologue_prev_register): Update to use member functions.
+	* alpha-mdebug-tdep.c (alpha_mdebug_frame_unwind_cache): Likewise.
+	* alpha-tdep.c (alpha_heuristic_frame_unwind_cache): Likewise.
+	* arc-tdep.c (arc_print_frame_cache, arc_make_frame_cache): Likewise.
+	* arm-tdep.c (arm_make_prologue_cache, arm_exidx_fill_cache)
+	(arm_make_epilogue_frame_cache): Likewise.
+	* avr-tdep.c (avr_frame_unwind_cache)
+	(avr_frame_prev_register): Likewise.
+	* cris-tdep.c (cris_scan_prologue): Likewise.
+	* csky-tdep.c (csky_frame_unwind_cache): Likewise.
+	* frv-tdep.c (frv_analyze_prologue): Likewise.
+	* hppa-tdep.c (hppa_frame_cache, hppa_fallback_frame_cache): Likewise.
+	* lm32-tdep.c (lm32_frame_cache): Likewise.
+	* m32r-tdep.c (m32r_frame_unwind_cache): Likewise.
+	* m68hc11-tdep.c (m68hc11_frame_unwind_cache): Likewise.
+	* mips-tdep.c (set_reg_offset, mips_insn16_frame_cache)
+	(mips_micro_frame_cache, mips_insn32_frame_cache): Likewise.
+	(reset_saved_regs): Adjust to set realreg.
+	* riscv-tdep.c (riscv_scan_prologue, riscv_frame_cache): Adjust to
+	call member functions.
+	* rs6000-tdep.c (rs6000_frame_cache, rs6000_epilogue_frame_cache)
+	* s390-tdep.c (s390_prologue_frame_unwind_cache)
+	(s390_backchain_frame_unwind_cache): Likewise.
+	* score-tdep.c (score7_analyze_prologue)
+	(score3_analyze_prologue, score_make_prologue_cache): Likewise.
+	* sparc-netbsd-tdep.c (sparc32nbsd_sigcontext_saved_regs): Likewise.
+	* sparc-sol2-tdep.c (sparc32_sol2_sigtramp_frame_cache): Likewise.
+	* sparc64-netbsd-tdep.c (sparc64nbsd_sigcontext_saved_regs): Likewise.
+	* sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_cache): Likewise.
+	* tilegx-tdep.c (tilegx_analyze_prologue)
+	(tilegx_frame_cache): Likewise.
+	* v850-tdep.c (v850_frame_cache): Likewise.
+	* vax-tdep.c (vax_frame_cache): Likewise.
+
+2021-01-19  Luis Machado  <luis.machado@linaro.org>
+
+	* frame.h (get_frame_register_bytes): Pass a gdb::array_view instead
+	of buffer + length.
+	(put_frame_register_bytes): Likewise.
+	Adjust documentation.
+	(get_frame_memory): Pass a gdb::array_view instead of buffer + length.
+	(safe_frame_unwind_memory): Likewise.
+	* frame.c (get_frame_register_bytes, put_frame_register_bytes)
+	(get_frame_memory, safe_frame_unwind_memory): Adjust to use
+	gdb::array_view.
+	* amd64-fbsd-tdep.c (amd64fbsd_sigtramp_p): Likewise.
+	* amd64-linux-tdep.c (amd64_linux_sigtramp_start): Likewise.
+	* amd64-obsd-tdep.c (amd64obsd_sigtramp_p): Likewise.
+	* arc-linux-tdep.c (arc_linux_is_sigtramp): Likewise.
+	* cris-tdep.c (cris_sigtramp_start, cris_rt_sigtramp_start): Likewise.
+	* dwarf2/loc.c (rw_pieced_value): Likewise.
+	* hppa-tdep.c (hppa_frame_cache): Likewise.
+	* i386-fbsd-tdep.c (i386fbsd_sigtramp_p): Likewise.
+	* i386-gnu-tdep.c (i386_gnu_sigtramp_start): Likewise.
+	* i386-linux-tdep.c (i386_linux_sigtramp_start)
+	(i386_linux_rt_sigtramp_start): Likewise.
+	* i386-obsd-tdep.c (i386obsd_sigtramp_p): Likewise.
+	* i386-tdep.c (i386_register_to_value): Likewise.
+	* i387-tdep.c (i387_register_to_value): Likewise.
+	* ia64-tdep.c (ia64_register_to_value): Likewise.
+	* m32r-linux-tdep.c (m32r_linux_sigtramp_start)
+	(m32r_linux_rt_sigtramp_start): Likewise.
+	* m68k-linux-tdep.c (m68k_linux_pc_in_sigtramp): Likewise.
+	* m68k-tdep.c (m68k_register_to_value): Likewise.
+	* mips-tdep.c (mips_register_to_value)
+	(mips_value_to_register): Likewise.
+	* ppc-fbsd-tdep.c (ppcfbsd_sigtramp_frame_sniffer)
+	(ppcfbsd_sigtramp_frame_cache): Likewise.
+	* ppc-obsd-tdep.c (ppcobsd_sigtramp_frame_sniffer)
+	(ppcobsd_sigtramp_frame_cache): Likewise.
+	* rs6000-tdep.c (rs6000_in_function_epilogue_frame_p)
+	(rs6000_register_to_value): Likewise.
+	* tilegx-tdep.c (tilegx_analyze_prologue): Likewise.
+	* tramp-frame.c (tramp_frame_start): Likewise.
+	* valops.c (value_assign): Likewise.
+
+2021-01-19  Luis Machado  <luis.machado@linaro.org>
+
+	* aarch64-linux-tdep.c (aarch64_linux_restore_vreg): Pass in an
+	array_view.
+	* trad-frame.c (trad_frame_set_value_bytes): Use gdb::array_view
+	instead of buffer and size.
+	(trad_frame_set_reg_value_bytes): Likewise.
+	* trad-frame.h (trad_frame_set_reg_value_bytes): Likewise.
+	(trad_frame_set_value_bytes): Likewise.
+
+2021-01-18  Mike Frysinger  <vapier@gentoo.org>
+
+	* copyright.py (NOT_FSF_LIST): Delete sim/testsuite/sim/bfin/s21.s.
+
+2021-01-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* riscv-fbsd-tdep.c (riscv_fbsd_supply_gregset): Delete.
+	(riscv_fbsd_gregset): Use riscv_supply_regset.
+	(riscv_fbsd_fpregset): Likewise.
+	* riscv-linux-tdep.c (riscv_linux_gregset): Likewise.
+	(riscv_linux_fregset): Likewise.
+	* riscv-tdep.c (riscv_supply_regset): Define new function.
+	* riscv-tdep.h (riscv_supply_regset): Declare new function.
+
+2021-01-18  Tom de Vries  <tdevries@suse.de>
+
+	PR tdep/27172
+	* nat/amd64-linux-siginfo.c (cpt_si_lower, cpt_si_upper, SEGV_BNDERR):
+	New macro.
+	(compat_siginfo_from_siginfo): Copy cpt_si_lower and cpt_si_upper
+	for SEGV_BNDERR.
+
+2021-01-18  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* remote.c (class remote_target) <remote_hostio_send_command,
+	remote_hostio_parse_result>: Constify parameter.
+	(remote_hostio_parse_result): Likewise.
+	(remote_target::remote_hostio_send_command): Adjust.
+	(remote_target::remote_hostio_pread_vFile): Adjust.
+	(remote_target::fileio_readlink): Adjust.
+	(remote_target::fileio_fstat): Adjust.
+
+2021-01-18  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* remote.c (remote_target::start_remote): Move wait_status to
+	narrower scope.
+
+2021-01-18  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* remote.c (class remote_target):
+	<add_current_inferior_and_thread>: Constify parameter.
+	(stop_reply_extract_thread): Likewise.
+	(remote_target::get_current_thread): Likewise.
+	(remote_target::add_current_inferior_and_thread): Likewise.
+
+2021-01-18  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* remote.c (class remote_target)
+	<remote_unpack_thread_info_response,
+	parse_threadlist_response>: Constify parameter and/or return
+	value and or local variable.
+	(stub_unpack_int): Likewise.
+	(unpack_nibble): Likewise.
+	(unpack_byte): Likewise.
+	(unpack_int): Likewise.
+	(unpack_string): Likewise.
+	(unpack_threadid): Likewise.
+	(remote_target::remote_unpack_thread_info_response): Likewise.
+	(remote_target::parse_threadlist_response): Likewise.
+
+2021-01-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui/tui.c (tui_is_window_visible): Compare to nullptr, not 0.
+
+2021-01-14  Lancelot Six  <lsix@lancelotsix.com>
+
+	* MAINTAINERS (Write After Approval): Add myself.
+
+2021-01-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* trad-frame.c (trad_frame_alloc_saved_regs): Avoid compile-error
+	because is_trivially_default_constructible was first implemented with
+	gcc-5.
+
+2021-01-14  Tom de Vries  <tdevries@suse.de>
+
+	PR breakpoints/27151
+	* objfiles.h (in_plt_section): Handle .plt.sec.
+
+2021-01-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR gdb/26819
+	* remote.c
+	(remote_target::select_thread_for_ambiguous_stop_reply): New
+	member function.
+	(remote_target::process_stop_reply): Call
+	select_thread_for_ambiguous_stop_reply.
+
+2021-01-13  Simon Marchi  <simon.marchi@efficios.com>
+
+	* record-btrace.c (class record_btrace_target): Remove.
+	(record_btrace_target::commit_resume): Remove.
+	* record-full.c (class record_full_target): Remove.
+	(record_full_target::commit_resume): Remove.
+
+2021-01-13  Simon Marchi  <simon.marchi@efficios.com>
+
+	* remote.c (enum class resume_state): New.
+	(struct resumed_pending_vcont_info): New.
+	(struct remote_thread_info) <resume_state, set_not_resumed,
+	set_resumed_pending_vcont, resumed_pending_vcont_info,
+	set_resumed, m_resume_state, m_resumed_pending_vcont_info>:
+	New.
+	<last_resume_step, last_resume_sig, vcont_resumed>: Remove.
+	(remote_target::remote_add_thread): Adjust.
+	(remote_target::process_initial_stop_replies): Adjust.
+	(remote_target::resume): Adjust.
+	(remote_target::commit_resume): Rely on state in
+	remote_thread_info and not on tp->executing.
+	(remote_target::process_stop_reply): Adjust.
+
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* arc-tdep.h (arc_debug_printf): New.
+	* arc-tdep.c: Use arc_debug_printf.
+	* arc-linux-nat.c (arc_linux_nat_debug_printf): Add and use.
+	* arc-linux-tdep.c (arc_linux_debug_printf): Add and use.
+	* arc-newlib-tdep.c (arc_newlib_debug_printf): Add and use.
+
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* arc-tdep.h (arc_debug): Change type to bool.
+	* arc-tdep.c (arc_debug): Change type to bool.
+	(arc_analyze_prologue): Adjust.
+	(_initialize_arc_tdep): Use add_setshow_boolean_cmd.
+	* arc-linux-nat.c (ps_get_thread_area): Adjust.
+
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* auto-load.c (auto_load_objfile_script_1): Use bool.
+	(execute_script_contents): Use bool.
+
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* auto-load.h (auto_load_gdb_scripts_enabled): Return bool, move
+	comment here.
+	* auto-load.c (auto_load_gdb_scripts_enabled): Return bool, move
+	comment to header.
+	* extension-priv.h (struct extension_language_script_ops)
+	<auto_load_enabled>: Return bool.
+	* extension.h (ext_lang_auto_load_enabled): Return bool, move
+	comment here.
+	* extension.c (ext_lang_auto_load_enabled): Return bool, move
+	comment to header.
+	* guile/guile-header.h (gdbscm_auto_load_enabled): Return bool,
+	move comment here.
+	* guile/scm-auto-load.c (gdbscm_auto_load_enabled): Return bool,
+	move comment to header.
+	* python/python-header.h (gdbpy_auto_load_enabled): Return bool,
+	move comment here.
+	* python/py-auto-load.c (gdbpy_auto_load_enabled): Return bool,
+	move comment to header.
+
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* auto-load.h (file_is_auto_load_safe): Change return type to
+	bool, move comment here.
+	* auto-load.c (file_is_auto_load_safe): Change return type and
+	advice_printed to bool.  Move comment to  header.
+
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (jit_debug_printf): New, use throughout file.
+
+2021-01-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* infrun.c (normal_stop): Fix indentation.
+
+2021-01-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* top.h (readnow_symbol_files, readnever_symbol_files): Move
+	declarations to ...
+	* symfile.h: ... here.
+	* symfile.c: Update doc.
+
+2021-01-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target.h (baud_rate, serial_parity): Move declarations...
+	* serial.h: ... here.
+	* main.c: Include serial.h.
+	* serial.c (baud_rate, serial_parity): Update doc.
+
+2021-01-12  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* top.c (pre_init_ui_hook): Remove.
+
+2021-01-12  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+
+	* aarch64-tdep.c (aarch64_vnh_type): Add "bf" field in h registers.
+	(aarch64_vnv_type): Add "bf" type in h field of v registers.
+	* features/aarch64-fpu.c (create_feature_aarch64_fpu): Regenerated.
+	* features/aarch64-fpu.xml: Add bfloat16 type.
+
+2021-01-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* expprint.c (dump_subexp_body_standard): Handle OP_BOOL.
+
+2021-01-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-exp.y (dot_ops): Rename to...
+	(fortran_operators): ...this.  Add a header comment.  Add symbol
+	based operators.
+	(yylex): Update to use fortran_operators not dot_ops.  Remove
+	special handling for '**', this is now included in
+	fortran_operators.
+
+2021-01-11  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* arch/aarch64-insn.h (aarch64_debug_printf): New.
+	* arch/aarch64-insn.c: Use aarch64_debug_printf.
+	* aarch64-tdep.c: Use aarch64_debug_printf.
+
+2021-01-11  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* solib-aix.c (solib_aix_debug_printf): New, use throughout
+	file.
+
+2021-01-11  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* jit.c (jit_debug): Change type to bool.
+	(_initialize_jit): Adjust.
+
+2021-01-09  Tom Tromey  <tom@tromey.com>
+
+	PR compile/23672
+	* compile/compile.c (compile_to_object): Avoid crash when
+	osabi_triplet_regexp returns NULL.
+
+2021-01-09  Tom Tromey  <tom@tromey.com>
+
+	* tracepoint.h (class collection_list) <append_exp>: Take a
+	std::string.
+	* tracepoint.c (collection_list::append_exp): Take a std::string.
+	(encode_actions_1): Update.
+
+2021-01-08  Tom Tromey  <tromey@adacore.com>
+
+	* parse.c (parse_expression): Add void_context_p parameter.  Use
+	parse_exp_in_context.
+	* printcmd.c (print_command_1): Change voidprint to bool.  Pass to
+	parse_expression.
+	(print_command, call_command): Update.
+	* expression.h (parse_expression): Add void_context_p parameter.
+
+2021-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* value.c (set_value_component_location): Adjust the VALUE_LVAL
+	for internalvar components that have a dynamic location.
+
+2021-01-08  Tom de Vries  <tdevries@suse.de>
+
+	PR gdb/26881
+	* breakpoint.c (create_exception_master_breakpoint_probe)
+	(create_exception_master_breakpoint_hook): Factor out
+	of ...
+	(create_exception_master_breakpoint): ... here.  Only try to install
+	the master exception breakpoint in objfile.debug using the
+	_Unwind_DebugHook method, if the install using probes in objfile
+	failed.
+
+2021-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* f-lang.c (fortran_value_subarray): Call value_from_component.
+
+2021-01-07  Mike Frysinger  <vapier@gentoo.org>
+
+	* remote-sim.c: Include memory-map.h.
+	(gdbsim_target): Define memory_map override.
+	(gdbsim_target::memory_map): Define.
+
+2021-01-07  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (do_full_match): Conditionally skip "_ada_" prefix.
+
+2021-01-07  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (add_component_interval): Start loop using vector's
+	updated size.
+
+2021-01-06  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.c (ada_evaluate_subexp) <BINOP_ADD, BINOP_SUB>:
+	Do not cast result.
+	* valarith.c (fixed_point_binop): Handle multiplication
+	and division specially.
+	* valops.c (value_to_gdb_mpq): New function.
+	(value_cast_to_fixed_point): Use it.
+
+2021-01-05  Hannes Domani  <ssbssa@yahoo.de>
+
+	* tui/tui-winsource.c (tui_source_window_base::refresh_window):
+	Call wnoutrefresh instead of tui_win_info::refresh_window.
+
+2021-01-05  Hannes Domani  <ssbssa@yahoo.de>
+
+	* tui/tui-source.c (tui_source_window::show_line_number):
+	Redraw second space after line number.
+
+2021-01-05  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR tui/26927
+	* tui/tui-winsource.c (tui_source_window_base::refresh_window):
+	Fix source pad size in prefresh.
+	(tui_source_window_base::show_source_content): Grow source pad
+	if necessary.
+
+2021-01-04  Mike Frysinger  <vapier@gentoo.org>
+
+	* bfin-tdep.c (bfin_push_dummy_call): Use align_up.
+	(bfin_frame_align): Use align_down.
+
+2021-01-04  Tom de Vries  <tdevries@suse.de>
+
+	* buildsym.c (buildsym_compunit::record_line): Filter out end-of-seq
+	terminators that do not terminate anything.
+
+2021-01-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* debug.c (debug_print_depth): New.
+	* infrun.h (INFRUN_SCOPED_DEBUG_START_END): New.
+	(INFRUN_SCOPED_DEBUG_ENTER_EXIT): New.
+	* infrun.c (start_step_over): Use
+	INFRUN_SCOPED_DEBUG_ENTER_EXIT.
+	(proceed): Use INFRUN_SCOPED_DEBUG_ENTER_EXIT and
+	INFRUN_SCOPED_DEBUG_START_END.
+	(fetch_inferior_event): Use INFRUN_SCOPED_DEBUG_ENTER_EXIT.
+
+2021-01-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* infrun.c (print_target_wait_results): Use infrun_debug_printf.
+
+2021-01-04  Simon Marchi  <simon.marchi@efficios.com>
+
+	* utils.c (vfprintf_unfiltered): Print timestamp only when
+	previous debug output ended with a newline.
+
+2021-01-04  Luis Machado  <luis.machado@linaro.org>
+
+	Update all users of trad_frame_saved_reg to use the new member
+	functions.
+
+	Remote all struct keywords from declarations of trad_frame_saved_reg
+	types, except on forward declarations.
+
+	* aarch64-tdep.c: Update.
+	* alpha-mdebug-tdep.c: Update.
+	* alpha-tdep.c: Update.
+	* arc-tdep.c: Update.
+	* arm-tdep.c: Update.
+	* avr-tdep.c: Update.
+	* cris-tdep.c: Update.
+	* csky-tdep.c: Update.
+	* frv-tdep.c: Update.
+	* hppa-linux-tdep.c: Update.
+	* hppa-tdep.c: Update.
+	* hppa-tdep.h: Update.
+	* lm32-tdep.c: Update.
+	* m32r-linux-tdep.c: Update.
+	* m32r-tdep.c: Update.
+	* m68hc11-tdep.c: Update.
+	* mips-tdep.c: Update.
+	* moxie-tdep.c: Update.
+	* riscv-tdep.c: Update.
+	* rs6000-tdep.c: Update.
+	* s390-linux-tdep.c: Update.
+	* s390-tdep.c: Update.
+	* score-tdep.c: Update.
+	* sparc-netbsd-tdep.c: Update.
+	* sparc-sol2-tdep.c: Update.
+	* sparc64-fbsd-tdep.c: Update.
+	* sparc64-netbsd-tdep.c: Update.
+	* sparc64-obsd-tdep.c: Update.
+	* sparc64-sol2-tdep.c: Update.
+	* tilegx-tdep.c: Update.
+	* v850-tdep.c: Update.
+	* vax-tdep.c: Update.
+
+	* frame-unwind.c (frame_unwind_got_bytes): Make parameter const.
+	* frame-unwind.h (frame_unwind_got_bytes): Likewise.
+
+	* trad-frame.c: Update.
+	Remove TF_REG_* enum.
+	(trad_frame_alloc_saved_regs): Add a static assertion to check for
+	a trivially-constructible struct.
+	(trad_frame_reset_saved_regs): Adjust to use member function.
+	(trad_frame_value_p): Likewise.
+	(trad_frame_addr_p): Likewise.
+	(trad_frame_realreg_p): Likewise.
+	(trad_frame_value_bytes_p): Likewise.
+	(trad_frame_set_value): Likewise.
+	(trad_frame_set_realreg): Likewise.
+	(trad_frame_set_addr): Likewise.
+	(trad_frame_set_unknown): Likewise.
+	(trad_frame_set_value_bytes): Likewise.
+	(trad_frame_get_prev_register): Likewise.
+	* trad-frame.h: Update.
+	(trad_frame_saved_reg_kind): New enum.
+	(struct trad_frame_saved_reg) <addr, realreg, data>: Remove.
+	<m_kind, m_reg>: New member fields.
+	<set_value, set_realreg, set_addr, set_unknown, set_value_bytes>
+	<kind, value, realreg, addr, value_bytes, is_value, is_realreg>
+	<is_addr, is_unknown, is_value_bytes>: New member functions.
+
+2021-01-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* target-float.c: Fix typos.
+
+2021-01-02  Hannes Domani  <ssbssa@yahoo.de>
+
+	* gdb-gdb.py.in: Fix main_type.flds_bnds.bounds pretty printer.
+
+2021-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbarch.sh: Update copyright year range.
+
+2021-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	Update copyright year range in copyright header of all GDB files.
+
+2021-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* copyright.py (get_update_list): Add "gdbserver" and "gdbsupport"
+	to the list of directories to update.
+
+2021-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* top.c (print_gdb_version): Update copyright year.
+
+2021-01-01, 21  Joel Brobecker  <brobecker@adacore.com>
+
+	* config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2020.
+
+For older changes see ChangeLog-2020.
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+coding: utf-8
+End:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/charset.c ./gdb/charset.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/charset.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/charset.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Character set conversion support for GDB.
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,7 +20,7 @@
 #include "defs.h"
 #include "charset.h"
 #include "gdbcmd.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "gdbsupport/gdb_wait.h"
 #include "charset-list.h"
 #include "gdbsupport/environ.h"
@@ -232,11 +232,11 @@ show_host_charset_name (struct ui_file *
 			const char *value)
 {
   if (!strcmp (value, "auto"))
-    fprintf_filtered (file,
-		      _("The host character set is \"auto; currently %s\".\n"),
-		      auto_host_charset_name);
+    gdb_printf (file,
+		_("The host character set is \"auto; currently %s\".\n"),
+		auto_host_charset_name);
   else
-    fprintf_filtered (file, _("The host character set is \"%s\".\n"), value);
+    gdb_printf (file, _("The host character set is \"%s\".\n"), value);
 }
 
 static const char *target_charset_name = "auto";
@@ -245,13 +245,13 @@ show_target_charset_name (struct ui_file
 			  struct cmd_list_element *c, const char *value)
 {
   if (!strcmp (value, "auto"))
-    fprintf_filtered (file,
-		      _("The target character set is \"auto; "
-		        "currently %s\".\n"),
-		      gdbarch_auto_charset (get_current_arch ()));
+    gdb_printf (file,
+		_("The target character set is \"auto; "
+		  "currently %s\".\n"),
+		gdbarch_auto_charset (get_current_arch ()));
   else
-    fprintf_filtered (file, _("The target character set is \"%s\".\n"),
-		      value);
+    gdb_printf (file, _("The target character set is \"%s\".\n"),
+		value);
 }
 
 static const char *target_wide_charset_name = "auto";
@@ -262,22 +262,22 @@ show_target_wide_charset_name (struct ui
 			       const char *value)
 {
   if (!strcmp (value, "auto"))
-    fprintf_filtered (file,
-		      _("The target wide character set is \"auto; "
-		        "currently %s\".\n"),
-		      gdbarch_auto_wide_charset (get_current_arch ()));
+    gdb_printf (file,
+		_("The target wide character set is \"auto; "
+		  "currently %s\".\n"),
+		gdbarch_auto_wide_charset (get_current_arch ()));
   else
-    fprintf_filtered (file, _("The target wide character set is \"%s\".\n"),
-		      value);
+    gdb_printf (file, _("The target wide character set is \"%s\".\n"),
+		value);
 }
 
-static const char *default_charset_names[] =
+static const char * const default_charset_names[] =
 {
   DEFAULT_CHARSET_NAMES
   0
 };
 
-static const char **charset_enum;
+static const char * const *charset_enum;
 
 
 /* If the target wide character set has big- or little-endian
@@ -463,20 +463,6 @@ host_letter_to_control_character (char c
   return c & 0237;
 }
 
-/* Convert a host character, C, to its hex value.  C must already have
-   been validated using isxdigit.  */
-
-int
-host_hex_value (char c)
-{
-  if (isdigit (c))
-    return c - '0';
-  if (c >= 'a' && c <= 'f')
-    return 10 + c - 'a';
-  gdb_assert (c >= 'A' && c <= 'F');
-  return 10 + c - 'A';
-}
-
 
 /* Public character management functions.  */
 
@@ -708,7 +694,13 @@ struct charset_vector
 {
   ~charset_vector ()
   {
-    clear ();
+    /* Note that we do not call charset_vector::clear, which would also xfree
+       the elements.  This destructor is only called after exit, at which point
+       those will be freed anyway on process exit, so not freeing them now is
+       not classified as a memory leak.  OTOH, freeing them now might be
+       classified as a data race, because some worker thread might still be
+       accessing them.  */
+    charsets.clear ();
   }
 
   void clear ()
@@ -818,7 +810,8 @@ find_charset_names (void)
   {
     std::string iconv_dir = relocate_gdb_directory (ICONV_BIN,
 						    ICONV_BIN_RELOCATABLE);
-    iconv_program = concat (iconv_dir.c_str(), SLASH_STRING, "iconv", NULL);
+    iconv_program
+      = concat (iconv_dir.c_str(), SLASH_STRING, "iconv", (char *) NULL);
   }
 #else
   iconv_program = xstrdup ("iconv");
@@ -946,7 +939,7 @@ default_auto_wide_charset (void)
 
 /* GDB cannot handle strings correctly if this size is different.  */
 
-gdb_static_assert (sizeof (gdb_wchar_t) == 2 || sizeof (gdb_wchar_t) == 4);
+static_assert (sizeof (gdb_wchar_t) == 2 || sizeof (gdb_wchar_t) == 4);
 
 /* intermediate_encoding returns the charset used internally by
    GDB to convert between target and host encodings. As the test above
@@ -959,50 +952,47 @@ intermediate_encoding (void)
 {
   iconv_t desc;
   static const char *stored_result = NULL;
-  char *result;
+  gdb::unique_xmalloc_ptr<char> result;
 
   if (stored_result)
     return stored_result;
   result = xstrprintf ("UTF-%d%s", (int) (sizeof (gdb_wchar_t) * 8),
 		       ENDIAN_SUFFIX);
   /* Check that the name is supported by iconv_open.  */
-  desc = iconv_open (result, host_charset ());
+  desc = iconv_open (result.get (), host_charset ());
   if (desc != (iconv_t) -1)
     {
       iconv_close (desc);
-      stored_result = result;
-      return result;
+      stored_result = result.release ();
+      return stored_result;
     }
-  /* Not valid, free the allocated memory.  */
-  xfree (result);
   /* Second try, with UCS-2 type.  */
   result = xstrprintf ("UCS-%d%s", (int) sizeof (gdb_wchar_t),
 		       ENDIAN_SUFFIX);
   /* Check that the name is supported by iconv_open.  */
-  desc = iconv_open (result, host_charset ());
+  desc = iconv_open (result.get (), host_charset ());
   if (desc != (iconv_t) -1)
     {
       iconv_close (desc);
-      stored_result = result;
-      return result;
+      stored_result = result.release ();
+      return stored_result;
     }
-  /* Not valid, free the allocated memory.  */
-  xfree (result);
   /* No valid charset found, generate error here.  */
-  error (_("Unable to find a vaild charset for string conversions"));
+  error (_("Unable to find a valid charset for string conversions"));
 }
 
 #endif /* USE_INTERMEDIATE_ENCODING_FUNCTION */
 
+void _initialize_charset ();
 void
-_initialize_charset (void)
+_initialize_charset ()
 {
   /* The first element is always "auto".  */
   charsets.charsets.push_back (xstrdup ("auto"));
   find_charset_names ();
 
   if (charsets.charsets.size () > 1)
-    charset_enum = (const char **) charsets.charsets.data ();
+    charset_enum = (const char * const *) charsets.charsets.data ();
   else
     charset_enum = default_charset_names;
 
@@ -1031,6 +1021,9 @@ _initialize_charset (void)
 #endif
 #endif
 
+  /* Recall that the first element is always "auto".  */
+  host_charset_name = charset_enum[0];
+  gdb_assert (strcmp (host_charset_name, "auto") == 0);
   add_setshow_enum_cmd ("charset", class_support,
 			charset_enum, &host_charset_name, _("\
 Set the host and target character sets."), _("\
@@ -1059,6 +1052,9 @@ To see a list of the character sets GDB
 			show_host_charset_name,
 			&setlist, &showlist);
 
+  /* Recall that the first element is always "auto".  */
+  target_charset_name = charset_enum[0];
+  gdb_assert (strcmp (target_charset_name, "auto") == 0);
   add_setshow_enum_cmd ("target-charset", class_support,
 			charset_enum, &target_charset_name, _("\
 Set the target character set."), _("\
@@ -1071,6 +1067,9 @@ To see a list of the character sets GDB
 			show_target_charset_name,
 			&setlist, &showlist);
 
+  /* Recall that the first element is always "auto".  */
+  target_wide_charset_name = charset_enum[0];
+  gdb_assert (strcmp (target_wide_charset_name, "auto") == 0);
   add_setshow_enum_cmd ("target-wide-charset", class_support,
 			charset_enum, &target_wide_charset_name,
 			_("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/charset.h ./gdb/charset.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/charset.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/charset.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Character set conversion support for GDB.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -159,9 +159,10 @@ class wchar_iterator
    character.  */
 char host_letter_to_control_character (char c);
 
-/* Convert a hex digit character to its numeric value.  E.g., 'f' is
-   converted to 15.  This function assumes that C is a valid hex
-   digit.  Both upper- and lower-case letters are recognized.  */
-int host_hex_value (char c);
+#if WORDS_BIGENDIAN
+#define HOST_UTF32 "UTF-32BE"
+#else
+#define HOST_UTF32 "UTF-32LE"
+#endif
 
 #endif /* CHARSET_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/charset-list.h ./gdb/charset-list.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/charset-list.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/charset-list.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* List of character set names for GDB.
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-lang.c ./gdb/c-lang.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-lang.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/c-lang.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* C language support routines for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -32,10 +32,11 @@
 #include "demangle.h"
 #include "cp-abi.h"
 #include "cp-support.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include <ctype.h>
 #include "gdbcore.h"
 #include "gdbarch.h"
+#include "c-exp.h"
 
 /* Given a C string type, STR_TYPE, return the corresponding target
    character set name.  */
@@ -62,7 +63,7 @@ charset_for_string_type (c_string_type s
       else
 	return "UTF-32LE";
     }
-  internal_error (__FILE__, __LINE__, _("unhandled c_string_type"));
+  internal_error (_("unhandled c_string_type"));
 }
 
 /* Classify ELTTYPE according to what kind of character it is.  Return
@@ -84,9 +85,9 @@ classify_type (struct type *elttype, str
      that would do the wrong thing.  */
   while (elttype)
     {
-      const char *name = TYPE_NAME (elttype);
+      const char *name = elttype->name ();
 
-      if (TYPE_CODE (elttype) == TYPE_CODE_CHAR || !name)
+      if (name == nullptr)
 	{
 	  result = C_CHAR;
 	  goto done;
@@ -110,14 +111,14 @@ classify_type (struct type *elttype, str
 	  goto done;
 	}
 
-      if (TYPE_CODE (elttype) != TYPE_CODE_TYPEDEF)
+      if (elttype->code () != TYPE_CODE_TYPEDEF)
 	break;
 
       /* Call for side effects.  */
       check_typedef (elttype);
 
-      if (TYPE_TARGET_TYPE (elttype))
-	elttype = TYPE_TARGET_TYPE (elttype);
+      if (elttype->target_type ())
+	elttype = elttype->target_type ();
       else
 	{
 	  /* Perhaps check_typedef did not update the target type.  In
@@ -142,72 +143,75 @@ classify_type (struct type *elttype, str
    for printing characters and strings is language specific.  */
 
 void
-c_emit_char (int c, struct type *type,
-	     struct ui_file *stream, int quoter)
+language_defn::emitchar (int c, struct type *type,
+			 struct ui_file *stream, int quoter) const
 {
   const char *encoding;
 
-  classify_type (type, get_type_arch (type), &encoding);
+  classify_type (type, type->arch (), &encoding);
   generic_emit_char (c, type, stream, quoter, encoding);
 }
 
+/* See language.h.  */
+
 void
-c_printchar (int c, struct type *type, struct ui_file *stream)
+language_defn::printchar (int c, struct type *type,
+			  struct ui_file * stream) const
 {
   c_string_type str_type;
 
-  str_type = classify_type (type, get_type_arch (type), NULL);
+  str_type = classify_type (type, type->arch (), NULL);
   switch (str_type)
     {
     case C_CHAR:
       break;
     case C_WIDE_CHAR:
-      fputc_filtered ('L', stream);
+      gdb_putc ('L', stream);
       break;
     case C_CHAR_16:
-      fputc_filtered ('u', stream);
+      gdb_putc ('u', stream);
       break;
     case C_CHAR_32:
-      fputc_filtered ('U', stream);
+      gdb_putc ('U', stream);
       break;
     }
 
-  fputc_filtered ('\'', stream);
-  LA_EMIT_CHAR (c, type, stream, '\'');
-  fputc_filtered ('\'', stream);
+  gdb_putc ('\'', stream);
+  emitchar (c, type, stream, '\'');
+  gdb_putc ('\'', stream);
 }
 
 /* Print the character string STRING, printing at most LENGTH
    characters.  LENGTH is -1 if the string is nul terminated.  Each
    character is WIDTH bytes long.  Printing stops early if the number
-   hits print_max; repeat counts are printed as appropriate.  Print
-   ellipses at the end if we had to stop before printing LENGTH
+   hits print_max_chars; repeat counts are printed as appropriate.
+   Print ellipses at the end if we had to stop before printing LENGTH
    characters, or if FORCE_ELLIPSES.  */
 
 void
-c_printstr (struct ui_file *stream, struct type *type, 
-	    const gdb_byte *string, unsigned int length, 
-	    const char *user_encoding, int force_ellipses,
-	    const struct value_print_options *options)
+language_defn::printstr (struct ui_file *stream, struct type *type,
+			 const gdb_byte *string, unsigned int length,
+			 const char *user_encoding, int force_ellipses,
+			 const struct value_print_options *options) const
 {
   c_string_type str_type;
   const char *type_encoding;
   const char *encoding;
 
-  str_type = (classify_type (type, get_type_arch (type), &type_encoding)
+  str_type = (classify_type (type, type->arch (), &type_encoding)
 	      & ~C_CHAR);
   switch (str_type)
     {
     case C_STRING:
       break;
     case C_WIDE_STRING:
-      fputs_filtered ("L", stream);
+      gdb_puts ("L", stream);
       break;
     case C_STRING_16:
-      fputs_filtered ("u", stream);
+      gdb_puts ("u", stream);
       break;
     case C_STRING_32:
-      fputs_filtered ("U", stream);
+      gdb_puts ("U", stream);
       break;
     }
 
@@ -241,8 +245,8 @@ c_get_string (struct value *value, gdb::
 {
   int err, width;
   unsigned int fetchlimit;
-  struct type *type = check_typedef (value_type (value));
-  struct type *element_type = TYPE_TARGET_TYPE (type);
+  struct type *type = check_typedef (value->type ());
+  struct type *element_type = type->target_type ();
   int req_length = *length;
   enum bfd_endian byte_order
     = type_byte_order (type);
@@ -250,23 +254,23 @@ c_get_string (struct value *value, gdb::
   if (element_type == NULL)
     goto error;
 
-  if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
+  if (type->code () == TYPE_CODE_ARRAY)
     {
       /* If we know the size of the array, we can use it as a limit on
 	 the number of characters to be fetched.  */
-      if (TYPE_NFIELDS (type) == 1
-	  && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_RANGE)
+      if (type->num_fields () == 1
+	  && type->field (0).type ()->code () == TYPE_CODE_RANGE)
 	{
 	  LONGEST low_bound, high_bound;
 
-	  get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
+	  get_discrete_bounds (type->field (0).type (),
 			       &low_bound, &high_bound);
 	  fetchlimit = high_bound - low_bound + 1;
 	}
       else
 	fetchlimit = UINT_MAX;
     }
-  else if (TYPE_CODE (type) == TYPE_CODE_PTR)
+  else if (type->code () == TYPE_CODE_PTR)
     fetchlimit = UINT_MAX;
   else
     /* We work only with arrays and pointers.  */
@@ -274,8 +278,8 @@ c_get_string (struct value *value, gdb::
 
   if (! c_textual_element_type (element_type, 0))
     goto error;
-  classify_type (element_type, get_type_arch (element_type), charset);
-  width = TYPE_LENGTH (element_type);
+  classify_type (element_type, element_type->arch (), charset);
+  width = element_type->length ();
 
   /* If the string lives in GDB's memory instead of the inferior's,
      then we just need to copy it to BUFFER.  Also, since such strings
@@ -290,27 +294,27 @@ c_get_string (struct value *value, gdb::
      C struct hack.  So, only do this if either no length was
      specified, or the length is within the existing bounds.  This
      avoids running off the end of the value's contents.  */
-  if ((VALUE_LVAL (value) == not_lval
-       || VALUE_LVAL (value) == lval_internalvar
-       || TYPE_CODE (type) == TYPE_CODE_ARRAY)
+  if ((value->lval () == not_lval
+       || value->lval () == lval_internalvar
+       || type->code () == TYPE_CODE_ARRAY)
       && fetchlimit != UINT_MAX
       && (*length < 0 || *length <= fetchlimit))
     {
       int i;
-      const gdb_byte *contents = value_contents (value);
+      const gdb_byte *contents = value->contents ().data ();
 
       /* If a length is specified, use that.  */
       if (*length >= 0)
 	i  = *length;
       else
- 	/* Otherwise, look for a null character.  */
- 	for (i = 0; i < fetchlimit; i++)
+	/* Otherwise, look for a null character.  */
+	for (i = 0; i < fetchlimit; i++)
 	  if (extract_unsigned_integer (contents + i * width,
 					width, byte_order) == 0)
- 	    break;
+	    break;
   
       /* I is now either a user-defined length, the number of non-null
- 	 characters, or FETCHLIMIT.  */
+	 characters, or FETCHLIMIT.  */
       *length = i * width;
       buffer->reset ((gdb_byte *) xmalloc (*length));
       memcpy (buffer->get (), contents, *length);
@@ -322,12 +326,12 @@ c_get_string (struct value *value, gdb::
 	 c_style_arrays is false, so we handle that specially
 	 here.  */
       CORE_ADDR addr;
-      if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
+      if (type->code () == TYPE_CODE_ARRAY)
 	{
-	  if (VALUE_LVAL (value) != lval_memory)
+	  if (value->lval () != lval_memory)
 	    error (_("Attempt to take address of value "
 		     "not located in memory."));
-	  addr = value_address (value);
+	  addr = value->address ();
 	}
       else
 	addr = value_as_address (value);
@@ -347,8 +351,8 @@ c_get_string (struct value *value, gdb::
       if (*length > 0)
 	fetchlimit = UINT_MAX;
 
-      err = read_string (addr, *length, width, fetchlimit,
-			 byte_order, buffer, length);
+      err = target_read_string (addr, *length, width, fetchlimit,
+				buffer, length);
       if (err != 0)
 	memory_error (TARGET_XFER_E_IO, addr);
     }
@@ -396,8 +400,8 @@ c_get_string (struct value *value, gdb::
    OUTPUT.  LENGTH is the maximum length of the UCN, either 4 or 8.
    Returns a pointer to just after the final digit of the UCN.  */
 
-static char *
-convert_ucn (char *p, char *limit, const char *dest_charset,
+static const char *
+convert_ucn (const char *p, const char *limit, const char *dest_charset,
 	     struct obstack *output, int length)
 {
   unsigned long result = 0;
@@ -405,7 +409,7 @@ convert_ucn (char *p, char *limit, const
   int i;
 
   for (i = 0; i < length && p < limit && ISXDIGIT (*p); ++i, ++p)
-    result = (result << 4) + host_hex_value (*p);
+    result = (result << 4) + fromhex (*p);
 
   for (i = 3; i >= 0; --i)
     {
@@ -428,9 +432,9 @@ emit_numeric_character (struct type *typ
 {
   gdb_byte *buffer;
 
-  buffer = (gdb_byte *) alloca (TYPE_LENGTH (type));
+  buffer = (gdb_byte *) alloca (type->length ());
   pack_long (buffer, type, value);
-  obstack_grow (output, buffer, TYPE_LENGTH (type));
+  obstack_grow (output, buffer, type->length ());
 }
 
 /* Convert an octal escape sequence.  TYPE is the target character
@@ -438,9 +442,9 @@ emit_numeric_character (struct type *typ
    farther than LIMIT.  The result is written to OUTPUT.  Returns a
    pointer to just after the final digit of the escape sequence.  */
 
-static char *
-convert_octal (struct type *type, char *p, 
-	       char *limit, struct obstack *output)
+static const char *
+convert_octal (struct type *type, const char *p,
+	       const char *limit, struct obstack *output)
 {
   int i;
   unsigned long value = 0;
@@ -449,7 +453,7 @@ convert_octal (struct type *type, char *
        i < 3 && p < limit && ISDIGIT (*p) && *p != '8' && *p != '9';
        ++i)
     {
-      value = 8 * value + host_hex_value (*p);
+      value = 8 * value + fromhex (*p);
       ++p;
     }
 
@@ -463,15 +467,15 @@ convert_octal (struct type *type, char *
    than LIMIT.  The result is written to OUTPUT.  Returns a pointer to
    just after the final digit of the escape sequence.  */
 
-static char *
-convert_hex (struct type *type, char *p,
-	     char *limit, struct obstack *output)
+static const char *
+convert_hex (struct type *type, const char *p,
+	     const char *limit, struct obstack *output)
 {
   unsigned long value = 0;
 
   while (p < limit && ISXDIGIT (*p))
     {
-      value = 16 * value + host_hex_value (*p);
+      value = 16 * value + fromhex (*p);
       ++p;
     }
 
@@ -494,9 +498,9 @@ convert_hex (struct type *type, char *p,
    written to OUTPUT.  Returns a pointer to just past the final
    character of the escape sequence.  */
 
-static char *
+static const char *
 convert_escape (struct type *type, const char *dest_charset,
-		char *p, char *limit, struct obstack *output)
+		const char *p, const char *limit, struct obstack *output)
 {
   /* Skip the backslash.  */
   ADVANCE;
@@ -548,16 +552,16 @@ convert_escape (struct type *type, const
    and TYPE is the type of target character to use.  */
 
 static void
-parse_one_string (struct obstack *output, char *data, int len,
+parse_one_string (struct obstack *output, const char *data, int len,
 		  const char *dest_charset, struct type *type)
 {
-  char *limit;
+  const char *limit;
 
   limit = data + len;
 
   while (data < limit)
     {
-      char *p = data;
+      const char *p = data;
 
       /* Look for next escape, or the end of the input.  */
       while (p < limit && *p != '\\')
@@ -565,7 +569,7 @@ parse_one_string (struct obstack *output
       /* If we saw a run of characters, convert them all.  */
       if (p > data)
 	convert_between_encodings (host_charset (), dest_charset,
-				   (gdb_byte *) data, p - data, 1,
+				   (const gdb_byte *) data, p - data, 1,
 				   output, translit_none);
       /* If we saw an escape, convert it.  */
       if (p < limit)
@@ -574,195 +578,138 @@ parse_one_string (struct obstack *output
     }
 }
 
-/* Expression evaluator for the C language family.  Most operations
-   are delegated to evaluate_subexp_standard; see that function for a
-   description of the arguments.  */
+namespace expr
+{
 
-struct value *
-evaluate_subexp_c (struct type *expect_type, struct expression *exp,
-		   int *pos, enum noside noside)
+value *
+c_string_operation::evaluate (struct type *expect_type,
+			      struct expression *exp,
+			      enum noside noside)
 {
-  enum exp_opcode op = exp->elts[*pos].opcode;
+  struct type *type;
+  struct value *result;
+  c_string_type dest_type;
+  const char *dest_charset;
+  int satisfy_expected = 0;
 
-  switch (op)
+  auto_obstack output;
+
+  dest_type = std::get<0> (m_storage);
+
+  switch (dest_type & ~C_CHAR)
     {
-    case OP_STRING:
-      {
-	int oplen, limit;
-	struct type *type;
-	struct value *result;
-	c_string_type dest_type;
-	const char *dest_charset;
-	int satisfy_expected = 0;
-
-	auto_obstack output;
-
-	++*pos;
-	oplen = longest_to_int (exp->elts[*pos].longconst);
-
-	++*pos;
-	limit = *pos + BYTES_TO_EXP_ELEM (oplen + 1);
-	dest_type = ((enum c_string_type_values)
-		     longest_to_int (exp->elts[*pos].longconst));
-	switch (dest_type & ~C_CHAR)
-	  {
-	  case C_STRING:
-	    type = language_string_char_type (exp->language_defn,
-					      exp->gdbarch);
-	    break;
-	  case C_WIDE_STRING:
-	    type = lookup_typename (exp->language_defn, "wchar_t", NULL, 0);
-	    break;
-	  case C_STRING_16:
-	    type = lookup_typename (exp->language_defn, "char16_t", NULL, 0);
-	    break;
-	  case C_STRING_32:
-	    type = lookup_typename (exp->language_defn, "char32_t", NULL, 0);
-	    break;
-	  default:
-	    internal_error (__FILE__, __LINE__, _("unhandled c_string_type"));
-	  }
-
-	/* Ensure TYPE_LENGTH is valid for TYPE.  */
-	check_typedef (type);
-
-	/* If the caller expects an array of some integral type,
-	   satisfy them.  If something odder is expected, rely on the
-	   caller to cast.  */
-	if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_ARRAY)
-	  {
-	    struct type *element_type
-	      = check_typedef (TYPE_TARGET_TYPE (expect_type));
-
-	    if (TYPE_CODE (element_type) == TYPE_CODE_INT
-		|| TYPE_CODE (element_type) == TYPE_CODE_CHAR)
-	      {
-		type = element_type;
-		satisfy_expected = 1;
-	      }
-	  }
-
-	dest_charset = charset_for_string_type (dest_type, exp->gdbarch);
-
-	++*pos;
-	while (*pos < limit)
-	  {
-	    int len;
-
-	    len = longest_to_int (exp->elts[*pos].longconst);
-
-	    ++*pos;
-	    if (noside != EVAL_SKIP)
-	      parse_one_string (&output, &exp->elts[*pos].string, len,
-				dest_charset, type);
-	    *pos += BYTES_TO_EXP_ELEM (len);
-	  }
-
-	/* Skip the trailing length and opcode.  */
-	*pos += 2;
-
-	if (noside == EVAL_SKIP)
-	  {
-	    /* Return a dummy value of the appropriate type.  */
-	    if (expect_type != NULL)
-	      result = allocate_value (expect_type);
-	    else if ((dest_type & C_CHAR) != 0)
-	      result = allocate_value (type);
-	    else
-	      result = value_cstring ("", 0, type);
-	    return result;
-	  }
-
-	if ((dest_type & C_CHAR) != 0)
-	  {
-	    LONGEST value;
-
-	    if (obstack_object_size (&output) != TYPE_LENGTH (type))
-	      error (_("Could not convert character "
-		       "constant to target character set"));
-	    value = unpack_long (type, (gdb_byte *) obstack_base (&output));
-	    result = value_from_longest (type, value);
-	  }
-	else
-	  {
-	    int i;
-
-	    /* Write the terminating character.  */
-	    for (i = 0; i < TYPE_LENGTH (type); ++i)
-	      obstack_1grow (&output, 0);
-
-	    if (satisfy_expected)
-	      {
-		LONGEST low_bound, high_bound;
-		int element_size = TYPE_LENGTH (type);
-
-		if (get_discrete_bounds (TYPE_INDEX_TYPE (expect_type),
-					 &low_bound, &high_bound) < 0)
-		  {
-		    low_bound = 0;
-		    high_bound = (TYPE_LENGTH (expect_type) / element_size) - 1;
-		  }
-		if (obstack_object_size (&output) / element_size
-		    > (high_bound - low_bound + 1))
-		  error (_("Too many array elements"));
-
-		result = allocate_value (expect_type);
-		memcpy (value_contents_raw (result), obstack_base (&output),
-			obstack_object_size (&output));
-	      }
-	    else
-	      result = value_cstring ((const char *) obstack_base (&output),
-				      obstack_object_size (&output),
-				      type);
-	  }
-	return result;
-      }
+    case C_STRING:
+      type = language_string_char_type (exp->language_defn,
+					exp->gdbarch);
       break;
-
-    default:
+    case C_WIDE_STRING:
+      type = lookup_typename (exp->language_defn, "wchar_t", NULL, 0);
+      break;
+    case C_STRING_16:
+      type = lookup_typename (exp->language_defn, "char16_t", NULL, 0);
       break;
+    case C_STRING_32:
+      type = lookup_typename (exp->language_defn, "char32_t", NULL, 0);
+      break;
+    default:
+      internal_error (_("unhandled c_string_type"));
     }
-  return evaluate_subexp_standard (expect_type, exp, pos, noside);
-}
-
-/* la_watch_location_expression for C.  */
 
-gdb::unique_xmalloc_ptr<char>
-c_watch_location_expression (struct type *type, CORE_ADDR addr)
-{
-  type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
-  std::string name = type_to_string (type);
-  return gdb::unique_xmalloc_ptr<char>
-    (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr)));
+  /* If the caller expects an array of some integral type,
+     satisfy them.  If something odder is expected, rely on the
+     caller to cast.  */
+  if (expect_type && expect_type->code () == TYPE_CODE_ARRAY)
+    {
+      struct type *element_type
+	= check_typedef (expect_type->target_type ());
+
+      if (element_type->code () == TYPE_CODE_INT
+	  || element_type->code () == TYPE_CODE_CHAR)
+	{
+	  type = element_type;
+	  satisfy_expected = 1;
+	}
+    }
+
+  dest_charset = charset_for_string_type (dest_type, exp->gdbarch);
+
+  for (const std::string &item : std::get<1> (m_storage))
+    parse_one_string (&output, item.c_str (), item.size (),
+		      dest_charset, type);
+
+  if ((dest_type & C_CHAR) != 0)
+    {
+      LONGEST value;
+
+      if (obstack_object_size (&output) != type->length ())
+	error (_("Could not convert character "
+		 "constant to target character set"));
+      value = unpack_long (type, (gdb_byte *) obstack_base (&output));
+      result = value_from_longest (type, value);
+    }
+  else
+    {
+      int element_size = type->length ();
+
+      if (satisfy_expected)
+	{
+	  LONGEST low_bound, high_bound;
+
+	  if (!get_discrete_bounds (expect_type->index_type (),
+				    &low_bound, &high_bound))
+	    {
+	      low_bound = 0;
+	      high_bound = (expect_type->length () / element_size) - 1;
+	    }
+	  if (obstack_object_size (&output) / element_size
+	      > (high_bound - low_bound + 1))
+	    error (_("Too many array elements"));
+
+	  result = value::allocate (expect_type);
+	  memcpy (result->contents_raw ().data (), obstack_base (&output),
+		  obstack_object_size (&output));
+	  /* Write the terminating character.  */
+	  memset (result->contents_raw ().data () + obstack_object_size (&output),
+		  0, element_size);
+	}
+      else
+	result = value_cstring ((const gdb_byte *) obstack_base (&output),
+				obstack_object_size (&output) / element_size,
+				type);
+    }
+  return result;
 }
 
+} /* namespace expr */
+
+
 /* See c-lang.h.  */
 
 bool
 c_is_string_type_p (struct type *type)
 {
   type = check_typedef (type);
-  while (TYPE_CODE (type) == TYPE_CODE_REF)
+  while (type->code () == TYPE_CODE_REF)
     {
-      type = TYPE_TARGET_TYPE (type);
+      type = type->target_type ();
       type = check_typedef (type);
     }
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_ARRAY:
       {
 	/* See if target type looks like a string.  */
-	struct type *array_target_type = TYPE_TARGET_TYPE (type);
-	return (TYPE_LENGTH (type) > 0
-		&& TYPE_LENGTH (array_target_type) > 0
+	struct type *array_target_type = type->target_type ();
+	return (type->length () > 0
+		&& array_target_type->length () > 0
 		&& c_textual_element_type (array_target_type, 0));
       }
     case TYPE_CODE_STRING:
       return true;
     case TYPE_CODE_PTR:
       {
-	struct type *element_type = TYPE_TARGET_TYPE (type);
+	struct type *element_type = type->target_type ();
 	return c_textual_element_type (element_type, 0);
       }
     default:
@@ -773,68 +720,20 @@ c_is_string_type_p (struct type *type)
 }
 
 
-/* Table mapping opcodes into strings for printing operators
-   and precedences of the operators.  */
 
-const struct op_print c_op_print_tab[] =
+/* See c-lang.h.  */
+
+gdb::unique_xmalloc_ptr<char>
+c_canonicalize_name (const char *name)
 {
-  {",", BINOP_COMMA, PREC_COMMA, 0},
-  {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
-  {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
-  {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
-  {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
-  {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
-  {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
-  {"==", BINOP_EQUAL, PREC_EQUAL, 0},
-  {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
-  {"<=", BINOP_LEQ, PREC_ORDER, 0},
-  {">=", BINOP_GEQ, PREC_ORDER, 0},
-  {">", BINOP_GTR, PREC_ORDER, 0},
-  {"<", BINOP_LESS, PREC_ORDER, 0},
-  {">>", BINOP_RSH, PREC_SHIFT, 0},
-  {"<<", BINOP_LSH, PREC_SHIFT, 0},
-  {"+", BINOP_ADD, PREC_ADD, 0},
-  {"-", BINOP_SUB, PREC_ADD, 0},
-  {"*", BINOP_MUL, PREC_MUL, 0},
-  {"/", BINOP_DIV, PREC_MUL, 0},
-  {"%", BINOP_REM, PREC_MUL, 0},
-  {"@", BINOP_REPEAT, PREC_REPEAT, 0},
-  {"+", UNOP_PLUS, PREC_PREFIX, 0},
-  {"-", UNOP_NEG, PREC_PREFIX, 0},
-  {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
-  {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
-  {"*", UNOP_IND, PREC_PREFIX, 0},
-  {"&", UNOP_ADDR, PREC_PREFIX, 0},
-  {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
-  {"alignof ", UNOP_ALIGNOF, PREC_PREFIX, 0},
-  {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
-  {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
-  {NULL, OP_NULL, PREC_PREFIX, 0}
-};
+  if (strchr (name, ' ') != nullptr
+      || streq (name, "signed")
+      || streq (name, "unsigned"))
+    return cp_canonicalize_string (name);
+  return nullptr;
+}
+
 
-enum c_primitive_types {
-  c_primitive_type_int,
-  c_primitive_type_long,
-  c_primitive_type_short,
-  c_primitive_type_char,
-  c_primitive_type_float,
-  c_primitive_type_double,
-  c_primitive_type_void,
-  c_primitive_type_long_long,
-  c_primitive_type_signed_char,
-  c_primitive_type_unsigned_char,
-  c_primitive_type_unsigned_short,
-  c_primitive_type_unsigned_int,
-  c_primitive_type_unsigned_long,
-  c_primitive_type_unsigned_long_long,
-  c_primitive_type_long_double,
-  c_primitive_type_complex,
-  c_primitive_type_double_complex,
-  c_primitive_type_decfloat,
-  c_primitive_type_decdouble,
-  c_primitive_type_declong,
-  nr_c_primitive_types
-};
 
 void
 c_language_arch_info (struct gdbarch *gdbarch,
@@ -842,347 +741,436 @@ c_language_arch_info (struct gdbarch *gd
 {
   const struct builtin_type *builtin = builtin_type (gdbarch);
 
-  lai->string_char_type = builtin->builtin_char;
-  lai->primitive_type_vector
-    = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_c_primitive_types + 1,
-			      struct type *);
-  lai->primitive_type_vector [c_primitive_type_int] = builtin->builtin_int;
-  lai->primitive_type_vector [c_primitive_type_long] = builtin->builtin_long;
-  lai->primitive_type_vector [c_primitive_type_short] = builtin->builtin_short;
-  lai->primitive_type_vector [c_primitive_type_char] = builtin->builtin_char;
-  lai->primitive_type_vector [c_primitive_type_float] = builtin->builtin_float;
-  lai->primitive_type_vector [c_primitive_type_double] = builtin->builtin_double;
-  lai->primitive_type_vector [c_primitive_type_void] = builtin->builtin_void;
-  lai->primitive_type_vector [c_primitive_type_long_long] = builtin->builtin_long_long;
-  lai->primitive_type_vector [c_primitive_type_signed_char] = builtin->builtin_signed_char;
-  lai->primitive_type_vector [c_primitive_type_unsigned_char] = builtin->builtin_unsigned_char;
-  lai->primitive_type_vector [c_primitive_type_unsigned_short] = builtin->builtin_unsigned_short;
-  lai->primitive_type_vector [c_primitive_type_unsigned_int] = builtin->builtin_unsigned_int;
-  lai->primitive_type_vector [c_primitive_type_unsigned_long] = builtin->builtin_unsigned_long;
-  lai->primitive_type_vector [c_primitive_type_unsigned_long_long] = builtin->builtin_unsigned_long_long;
-  lai->primitive_type_vector [c_primitive_type_long_double] = builtin->builtin_long_double;
-  lai->primitive_type_vector [c_primitive_type_complex] = builtin->builtin_complex;
-  lai->primitive_type_vector [c_primitive_type_double_complex] = builtin->builtin_double_complex;
-  lai->primitive_type_vector [c_primitive_type_decfloat] = builtin->builtin_decfloat;
-  lai->primitive_type_vector [c_primitive_type_decdouble] = builtin->builtin_decdouble;
-  lai->primitive_type_vector [c_primitive_type_declong] = builtin->builtin_declong;
+  /* Helper function to allow shorter lines below.  */
+  auto add  = [&] (struct type * t)
+  {
+    lai->add_primitive_type (t);
+  };
+
+  add (builtin->builtin_int);
+  add (builtin->builtin_long);
+  add (builtin->builtin_short);
+  add (builtin->builtin_char);
+  add (builtin->builtin_float);
+  add (builtin->builtin_double);
+  add (builtin->builtin_void);
+  add (builtin->builtin_long_long);
+  add (builtin->builtin_signed_char);
+  add (builtin->builtin_unsigned_char);
+  add (builtin->builtin_unsigned_short);
+  add (builtin->builtin_unsigned_int);
+  add (builtin->builtin_unsigned_long);
+  add (builtin->builtin_unsigned_long_long);
+  add (builtin->builtin_long_double);
+  add (builtin->builtin_complex);
+  add (builtin->builtin_double_complex);
+  add (builtin->builtin_decfloat);
+  add (builtin->builtin_decdouble);
+  add (builtin->builtin_declong);
 
-  lai->bool_type_default = builtin->builtin_int;
+  lai->set_string_char_type (builtin->builtin_char);
+  lai->set_bool_type (builtin->builtin_int);
 }
 
-const struct exp_descriptor exp_descriptor_c = 
-{
-  print_subexp_standard,
-  operator_length_standard,
-  operator_check_standard,
-  op_name_standard,
-  dump_subexp_body_standard,
-  evaluate_subexp_c
-};
+/* Class representing the C language.  */
 
-static const char *c_extensions[] =
+class c_language : public language_defn
 {
-  ".c", NULL
-};
+public:
+  c_language ()
+    : language_defn (language_c)
+  { /* Nothing.  */ }
 
-extern const struct language_defn c_language_defn =
-{
-  "c",				/* Language name */
-  "C",
-  language_c,
-  range_check_off,
-  case_sensitive_on,
-  array_row_major,
-  macro_expansion_c,
-  c_extensions,
-  &exp_descriptor_c,
-  c_parse,
-  null_post_parser,
-  c_printchar,			/* Print a character constant */
-  c_printstr,			/* Function to print string constant */
-  c_emit_char,			/* Print a single char */
-  c_print_type,			/* Print a type using appropriate syntax */
-  c_print_typedef,		/* Print a typedef using appropriate syntax */
-  c_val_print,			/* Print a value using appropriate syntax */
-  c_value_print,		/* Print a top-level value */
-  default_read_var_value,	/* la_read_var_value */
-  NULL,				/* Language specific skip_trampoline */
-  NULL,				/* name_of_this */
-  true,				/* la_store_sym_names_in_linkage_form_p */
-  basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
-  basic_lookup_transparent_type,/* lookup_transparent_type */
-  NULL,				/* Language specific symbol demangler */
-  NULL,
-  NULL,				/* Language specific
-				   class_name_from_physname */
-  c_op_print_tab,		/* expression operators for printing */
-  1,				/* c-style arrays */
-  0,				/* String lower bound */
-  default_word_break_characters,
-  default_collect_symbol_completion_matches,
-  c_language_arch_info,
-  default_print_array_index,
-  default_pass_by_reference,
-  c_watch_location_expression,
-  NULL,				/* la_get_symbol_name_matcher */
-  iterate_over_symbols,
-  default_search_name_hash,
-  &c_varobj_ops,
-  c_get_compile_context,
-  c_compute_program,
-  c_is_string_type_p,
-  "{...}"			/* la_struct_too_deep_ellipsis */
-};
+  /* See language.h.  */
 
-enum cplus_primitive_types {
-  cplus_primitive_type_int,
-  cplus_primitive_type_long,
-  cplus_primitive_type_short,
-  cplus_primitive_type_char,
-  cplus_primitive_type_float,
-  cplus_primitive_type_double,
-  cplus_primitive_type_void,
-  cplus_primitive_type_long_long,
-  cplus_primitive_type_signed_char,
-  cplus_primitive_type_unsigned_char,
-  cplus_primitive_type_unsigned_short,
-  cplus_primitive_type_unsigned_int,
-  cplus_primitive_type_unsigned_long,
-  cplus_primitive_type_unsigned_long_long,
-  cplus_primitive_type_long_double,
-  cplus_primitive_type_complex,
-  cplus_primitive_type_double_complex,
-  cplus_primitive_type_bool,
-  cplus_primitive_type_decfloat,
-  cplus_primitive_type_decdouble,
-  cplus_primitive_type_declong,
-  cplus_primitive_type_char16_t,
-  cplus_primitive_type_char32_t,
-  cplus_primitive_type_wchar_t,
-  nr_cplus_primitive_types
-};
+  const char *name () const override
+  { return "c"; }
 
-static void
-cplus_language_arch_info (struct gdbarch *gdbarch,
-			  struct language_arch_info *lai)
-{
-  const struct builtin_type *builtin = builtin_type (gdbarch);
+  /* See language.h.  */
 
-  lai->string_char_type = builtin->builtin_char;
-  lai->primitive_type_vector
-    = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_cplus_primitive_types + 1,
-			      struct type *);
-  lai->primitive_type_vector [cplus_primitive_type_int]
-    = builtin->builtin_int;
-  lai->primitive_type_vector [cplus_primitive_type_long]
-    = builtin->builtin_long;
-  lai->primitive_type_vector [cplus_primitive_type_short]
-    = builtin->builtin_short;
-  lai->primitive_type_vector [cplus_primitive_type_char]
-    = builtin->builtin_char;
-  lai->primitive_type_vector [cplus_primitive_type_float]
-    = builtin->builtin_float;
-  lai->primitive_type_vector [cplus_primitive_type_double]
-    = builtin->builtin_double;
-  lai->primitive_type_vector [cplus_primitive_type_void]
-    = builtin->builtin_void;
-  lai->primitive_type_vector [cplus_primitive_type_long_long]
-    = builtin->builtin_long_long;
-  lai->primitive_type_vector [cplus_primitive_type_signed_char]
-    = builtin->builtin_signed_char;
-  lai->primitive_type_vector [cplus_primitive_type_unsigned_char]
-    = builtin->builtin_unsigned_char;
-  lai->primitive_type_vector [cplus_primitive_type_unsigned_short]
-    = builtin->builtin_unsigned_short;
-  lai->primitive_type_vector [cplus_primitive_type_unsigned_int]
-    = builtin->builtin_unsigned_int;
-  lai->primitive_type_vector [cplus_primitive_type_unsigned_long]
-    = builtin->builtin_unsigned_long;
-  lai->primitive_type_vector [cplus_primitive_type_unsigned_long_long]
-    = builtin->builtin_unsigned_long_long;
-  lai->primitive_type_vector [cplus_primitive_type_long_double]
-    = builtin->builtin_long_double;
-  lai->primitive_type_vector [cplus_primitive_type_complex]
-    = builtin->builtin_complex;
-  lai->primitive_type_vector [cplus_primitive_type_double_complex]
-    = builtin->builtin_double_complex;
-  lai->primitive_type_vector [cplus_primitive_type_bool]
-    = builtin->builtin_bool;
-  lai->primitive_type_vector [cplus_primitive_type_decfloat]
-    = builtin->builtin_decfloat;
-  lai->primitive_type_vector [cplus_primitive_type_decdouble]
-    = builtin->builtin_decdouble;
-  lai->primitive_type_vector [cplus_primitive_type_declong]
-    = builtin->builtin_declong;
-  lai->primitive_type_vector [cplus_primitive_type_char16_t]
-    = builtin->builtin_char16;
-  lai->primitive_type_vector [cplus_primitive_type_char32_t]
-    = builtin->builtin_char32;
-  lai->primitive_type_vector [cplus_primitive_type_wchar_t]
-    = builtin->builtin_wchar;
+  const char *natural_name () const override
+  { return "C"; }
 
-  lai->bool_type_symbol = "bool";
-  lai->bool_type_default = builtin->builtin_bool;
-}
+  /* See language.h.  */
 
-static const char *cplus_extensions[] =
-{
-  ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++", NULL
-};
+  const std::vector<const char *> &filename_extensions () const override
+  {
+    static const std::vector<const char *> extensions = { ".c" };
+    return extensions;
+  }
 
-extern const struct language_defn cplus_language_defn =
-{
-  "c++",			/* Language name */
-  "C++",
-  language_cplus,
-  range_check_off,
-  case_sensitive_on,
-  array_row_major,
-  macro_expansion_c,
-  cplus_extensions,
-  &exp_descriptor_c,
-  c_parse,
-  null_post_parser,
-  c_printchar,			/* Print a character constant */
-  c_printstr,			/* Function to print string constant */
-  c_emit_char,			/* Print a single char */
-  c_print_type,			/* Print a type using appropriate syntax */
-  c_print_typedef,		/* Print a typedef using appropriate syntax */
-  c_val_print,			/* Print a value using appropriate syntax */
-  c_value_print,		/* Print a top-level value */
-  default_read_var_value,	/* la_read_var_value */
-  cplus_skip_trampoline,	/* Language specific skip_trampoline */
-  "this",                       /* name_of_this */
-  false,			/* la_store_sym_names_in_linkage_form_p */
-  cp_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
-  cp_lookup_transparent_type,   /* lookup_transparent_type */
-  gdb_demangle,			/* Language specific symbol demangler */
-  gdb_sniff_from_mangled_name,
-  cp_class_name_from_physname,  /* Language specific
-				   class_name_from_physname */
-  c_op_print_tab,		/* expression operators for printing */
-  1,				/* c-style arrays */
-  0,				/* String lower bound */
-  default_word_break_characters,
-  default_collect_symbol_completion_matches,
-  cplus_language_arch_info,
-  default_print_array_index,
-  cp_pass_by_reference,
-  c_watch_location_expression,
-  cp_get_symbol_name_matcher,
-  iterate_over_symbols,
-  cp_search_name_hash,
-  &cplus_varobj_ops,
-  cplus_get_compile_context,
-  cplus_compute_program,
-  c_is_string_type_p,
-  "{...}"			/* la_struct_too_deep_ellipsis */
+  /* See language.h.  */
+  void language_arch_info (struct gdbarch *gdbarch,
+			   struct language_arch_info *lai) const override
+  {
+    c_language_arch_info (gdbarch, lai);
+  }
+
+  /* See language.h.  */
+  std::unique_ptr<compile_instance> get_compile_instance () const override
+  {
+    return c_get_compile_context ();
+  }
+
+  /* See language.h.  */
+  std::string compute_program (compile_instance *inst,
+			       const char *input,
+			       struct gdbarch *gdbarch,
+			       const struct block *expr_block,
+			       CORE_ADDR expr_pc) const override
+  {
+    return c_compute_program (inst, input, gdbarch, expr_block, expr_pc);
+  }
+
+  /* See language.h.  */
+
+  bool can_print_type_offsets () const override
+  {
+    return true;
+  }
+
+  /* See language.h.  */
+
+  void print_type (struct type *type, const char *varstring,
+		   struct ui_file *stream, int show, int level,
+		   const struct type_print_options *flags) const override
+  {
+    c_print_type (type, varstring, stream, show, level, la_language, flags);
+  }
+
+  /* See language.h.  */
+
+  bool store_sym_names_in_linkage_form_p () const override
+  { return true; }
+
+  /* See language.h.  */
+
+  enum macro_expansion macro_expansion () const override
+  { return macro_expansion_c; }
 };
 
-static const char *asm_extensions[] =
+/* Single instance of the C language class.  */
+
+static c_language c_language_defn;
+
+/* A class for the C++ language.  */
+
+class cplus_language : public language_defn
 {
-  ".s", ".sx", ".S", NULL
+public:
+  cplus_language ()
+    : language_defn (language_cplus)
+  { /* Nothing.  */ }
+
+  /* See language.h.  */
+
+  const char *name () const override
+  { return "c++"; }
+
+  /* See language.h.  */
+
+  const char *natural_name () const override
+  { return "C++"; }
+
+  /* See language.h  */
+  const char *get_digit_separator () const override
+  { return "\'"; }
+
+  /* See language.h.  */
+
+  const std::vector<const char *> &filename_extensions () const override
+  {
+    static const std::vector<const char *> extensions
+      = { ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++" };
+    return extensions;
+  }
+
+  /* See language.h.  */
+
+  struct language_pass_by_ref_info pass_by_reference_info
+	(struct type *type) const override
+  {
+    return cp_pass_by_reference (type);
+  }
+
+  /* See language.h.  */
+  void language_arch_info (struct gdbarch *gdbarch,
+			   struct language_arch_info *lai) const override
+  {
+    const struct builtin_type *builtin = builtin_type (gdbarch);
+
+    /* Helper function to allow shorter lines below.  */
+    auto add  = [&] (struct type * t)
+    {
+      lai->add_primitive_type (t);
+    };
+
+    add (builtin->builtin_int);
+    add (builtin->builtin_long);
+    add (builtin->builtin_short);
+    add (builtin->builtin_char);
+    add (builtin->builtin_float);
+    add (builtin->builtin_double);
+    add (builtin->builtin_void);
+    add (builtin->builtin_long_long);
+    add (builtin->builtin_signed_char);
+    add (builtin->builtin_unsigned_char);
+    add (builtin->builtin_unsigned_short);
+    add (builtin->builtin_unsigned_int);
+    add (builtin->builtin_unsigned_long);
+    add (builtin->builtin_unsigned_long_long);
+    add (builtin->builtin_long_double);
+    add (builtin->builtin_complex);
+    add (builtin->builtin_double_complex);
+    add (builtin->builtin_bool);
+    add (builtin->builtin_decfloat);
+    add (builtin->builtin_decdouble);
+    add (builtin->builtin_declong);
+    add (builtin->builtin_char16);
+    add (builtin->builtin_char32);
+    add (builtin->builtin_wchar);
+
+    lai->set_string_char_type (builtin->builtin_char);
+    lai->set_bool_type (builtin->builtin_bool, "bool");
+  }
+
+  /* See language.h.  */
+  struct type *lookup_transparent_type (const char *name) const override
+  {
+    return cp_lookup_transparent_type (name);
+  }
+
+  /* See language.h.  */
+  std::unique_ptr<compile_instance> get_compile_instance () const override
+  {
+    return cplus_get_compile_context ();
+  }
+
+  /* See language.h.  */
+  std::string compute_program (compile_instance *inst,
+			       const char *input,
+			       struct gdbarch *gdbarch,
+			       const struct block *expr_block,
+			       CORE_ADDR expr_pc) const override
+  {
+    return cplus_compute_program (inst, input, gdbarch, expr_block, expr_pc);
+  }
+
+  /* See language.h.  */
+  unsigned int search_name_hash (const char *name) const override
+  {
+    return cp_search_name_hash (name);
+  }
+
+  /* See language.h.  */
+  bool sniff_from_mangled_name
+       (const char *mangled,
+	gdb::unique_xmalloc_ptr<char> *demangled) const override
+  {
+    *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI);
+    return *demangled != NULL;
+  }
+
+  /* See language.h.  */
+
+  gdb::unique_xmalloc_ptr<char> demangle_symbol (const char *mangled,
+						 int options) const override
+  {
+    return gdb_demangle (mangled, options);
+  }
+
+  /* See language.h.  */
+
+  bool can_print_type_offsets () const override
+  {
+    return true;
+  }
+
+  /* See language.h.  */
+
+  void print_type (struct type *type, const char *varstring,
+		   struct ui_file *stream, int show, int level,
+		   const struct type_print_options *flags) const override
+  {
+    c_print_type (type, varstring, stream, show, level, la_language, flags);
+  }
+
+  /* See language.h.  */
+
+  CORE_ADDR skip_trampoline (const frame_info_ptr &fi,
+			     CORE_ADDR pc) const override
+  {
+    return cplus_skip_trampoline (fi, pc);
+  }
+
+  /* See language.h.  */
+
+  char *class_name_from_physname (const char *physname) const override
+  {
+    return cp_class_name_from_physname (physname);
+  }
+
+  /* See language.h.  */
+
+  struct block_symbol lookup_symbol_nonlocal
+	(const char *name, const struct block *block,
+	 const domain_search_flags domain) const override
+  {
+    return cp_lookup_symbol_nonlocal (this, name, block, domain);
+  }
+
+  /* See language.h.  */
+
+  const char *name_of_this () const override
+  { return "this"; }
+
+  /* See language.h.  */
+
+  enum macro_expansion macro_expansion () const override
+  { return macro_expansion_c; }
+
+  /* See language.h.  */
+
+  const struct lang_varobj_ops *varobj_ops () const override
+  { return &cplus_varobj_ops; }
+
+protected:
+
+  /* See language.h.  */
+
+  symbol_name_matcher_ftype *get_symbol_name_matcher_inner
+	(const lookup_name_info &lookup_name) const override
+  {
+    return cp_get_symbol_name_matcher (lookup_name);
+  }
 };
 
-extern const struct language_defn asm_language_defn =
+/* The single instance of the C++ language class.  */
+
+static cplus_language cplus_language_defn;
+
+/* A class for the ASM language.  */
+
+class asm_language : public language_defn
 {
-  "asm",			/* Language name */
-  "assembly",
-  language_asm,
-  range_check_off,
-  case_sensitive_on,
-  array_row_major,
-  macro_expansion_c,
-  asm_extensions,
-  &exp_descriptor_c,
-  c_parse,
-  null_post_parser,
-  c_printchar,			/* Print a character constant */
-  c_printstr,			/* Function to print string constant */
-  c_emit_char,			/* Print a single char */
-  c_print_type,			/* Print a type using appropriate syntax */
-  c_print_typedef,		/* Print a typedef using appropriate syntax */
-  c_val_print,			/* Print a value using appropriate syntax */
-  c_value_print,		/* Print a top-level value */
-  default_read_var_value,	/* la_read_var_value */
-  NULL,				/* Language specific skip_trampoline */
-  NULL,				/* name_of_this */
-  true,				/* la_store_sym_names_in_linkage_form_p */
-  basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
-  basic_lookup_transparent_type,/* lookup_transparent_type */
-  NULL,				/* Language specific symbol demangler */
-  NULL,
-  NULL,				/* Language specific
-				   class_name_from_physname */
-  c_op_print_tab,		/* expression operators for printing */
-  1,				/* c-style arrays */
-  0,				/* String lower bound */
-  default_word_break_characters,
-  default_collect_symbol_completion_matches,
-  c_language_arch_info, 	/* FIXME: la_language_arch_info.  */
-  default_print_array_index,
-  default_pass_by_reference,
-  c_watch_location_expression,
-  NULL,				/* la_get_symbol_name_matcher */
-  iterate_over_symbols,
-  default_search_name_hash,
-  &default_varobj_ops,
-  NULL,
-  NULL,
-  c_is_string_type_p,
-  "{...}"			/* la_struct_too_deep_ellipsis */
+public:
+  asm_language ()
+    : language_defn (language_asm)
+  { /* Nothing.  */ }
+
+  /* See language.h.  */
+
+  const char *name () const override
+  { return "asm"; }
+
+  /* See language.h.  */
+
+  const char *natural_name () const override
+  { return "Assembly"; }
+
+  /* See language.h.  */
+
+  const std::vector<const char *> &filename_extensions () const override
+  {
+    static const std::vector<const char *> extensions
+      = { ".s", ".sx", ".S" };
+    return extensions;
+  }
+
+  /* See language.h.
+
+     FIXME: Should this have its own arch info method?  */
+  void language_arch_info (struct gdbarch *gdbarch,
+			   struct language_arch_info *lai) const override
+  {
+    c_language_arch_info (gdbarch, lai);
+  }
+
+  /* See language.h.  */
+
+  bool can_print_type_offsets () const override
+  {
+    return true;
+  }
+
+  /* See language.h.  */
+
+  void print_type (struct type *type, const char *varstring,
+		   struct ui_file *stream, int show, int level,
+		   const struct type_print_options *flags) const override
+  {
+    c_print_type (type, varstring, stream, show, level, la_language, flags);
+  }
+
+  /* See language.h.  */
+
+  bool store_sym_names_in_linkage_form_p () const override
+  { return true; }
+
+  /* See language.h.  */
+
+  enum macro_expansion macro_expansion () const override
+  { return macro_expansion_c; }
 };
 
-/* The following language_defn does not represent a real language.
-   It just provides a minimal support a-la-C that should allow users
-   to do some simple operations when debugging applications that use
+/* The single instance of the ASM language class.  */
+static asm_language asm_language_defn;
+
+/* A class for the minimal language.  This does not represent a real
+   language.  It just provides a minimal support a-la-C that should allow
+   users to do some simple operations when debugging applications that use
    a language currently not supported by GDB.  */
 
-extern const struct language_defn minimal_language_defn =
+class minimal_language : public language_defn
 {
-  "minimal",			/* Language name */
-  "Minimal",
-  language_minimal,
-  range_check_off,
-  case_sensitive_on,
-  array_row_major,
-  macro_expansion_c,
-  NULL,
-  &exp_descriptor_c,
-  c_parse,
-  null_post_parser,
-  c_printchar,			/* Print a character constant */
-  c_printstr,			/* Function to print string constant */
-  c_emit_char,			/* Print a single char */
-  c_print_type,			/* Print a type using appropriate syntax */
-  c_print_typedef,		/* Print a typedef using appropriate syntax */
-  c_val_print,			/* Print a value using appropriate syntax */
-  c_value_print,		/* Print a top-level value */
-  default_read_var_value,	/* la_read_var_value */
-  NULL,				/* Language specific skip_trampoline */
-  NULL,				/* name_of_this */
-  true,				/* la_store_sym_names_in_linkage_form_p */
-  basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
-  basic_lookup_transparent_type,/* lookup_transparent_type */
-  NULL,				/* Language specific symbol demangler */
-  NULL,
-  NULL,				/* Language specific
-				   class_name_from_physname */
-  c_op_print_tab,		/* expression operators for printing */
-  1,				/* c-style arrays */
-  0,				/* String lower bound */
-  default_word_break_characters,
-  default_collect_symbol_completion_matches,
-  c_language_arch_info,
-  default_print_array_index,
-  default_pass_by_reference,
-  c_watch_location_expression,
-  NULL,				/* la_get_symbol_name_matcher */
-  iterate_over_symbols,
-  default_search_name_hash,
-  &default_varobj_ops,
-  NULL,
-  NULL,
-  c_is_string_type_p,
-  "{...}"			/* la_struct_too_deep_ellipsis */
+public:
+  minimal_language ()
+    : language_defn (language_minimal)
+  { /* Nothing.  */ }
+
+  /* See language.h.  */
+
+  const char *name () const override
+  { return "minimal"; }
+
+  /* See language.h.  */
+
+  const char *natural_name () const override
+  { return "Minimal"; }
+
+  /* See language.h.  */
+  void language_arch_info (struct gdbarch *gdbarch,
+			   struct language_arch_info *lai) const override
+  {
+    c_language_arch_info (gdbarch, lai);
+  }
+
+  /* See language.h.  */
+
+  bool can_print_type_offsets () const override
+  {
+    return true;
+  }
+
+  /* See language.h.  */
+
+  void print_type (struct type *type, const char *varstring,
+		   struct ui_file *stream, int show, int level,
+		   const struct type_print_options *flags) const override
+  {
+    c_print_type (type, varstring, stream, show, level, la_language, flags);
+  }
+
+  /* See language.h.  */
+
+  bool store_sym_names_in_linkage_form_p () const override
+  { return true; }
+
+  /* See language.h.  */
+
+  enum macro_expansion macro_expansion () const override
+  { return macro_expansion_c; }
 };
+
+/* The single instance of the minimal language class.  */
+static minimal_language minimal_language_defn;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-lang.h ./gdb/c-lang.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-lang.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/c-lang.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* C language support definitions for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,10 +25,11 @@ struct ui_file;
 struct language_arch_info;
 struct type_print_options;
 struct parser_state;
+struct compile_instance;
 
+#include "compile/compile.h"
 #include "value.h"
 #include "macroexp.h"
-#include "parser-defs.h"
 #include "gdbsupport/enum-flags.h"
 
 
@@ -66,60 +67,37 @@ extern int c_parse (struct parser_state
 extern int c_parse_escape (const char **, struct obstack *);
 
 /* Defined in c-typeprint.c */
-extern void c_print_type (struct type *, const char *,
-			  struct ui_file *, int, int,
-			  const struct type_print_options *);
-
-/* Print a type but allow the precise language to be specified.  */
-
-extern void c_print_type (struct type *, const char *,
-			  struct ui_file *, int, int,
-			  enum language,
-			  const struct type_print_options *);
+
+/* Print TYPE to STREAM using syntax appropriate for LANGUAGE, a
+   C-like language.  The other parameters are like
+   type_language_defn::print_type's.  */
+
+extern void c_print_type (struct type *type,
+			  const char *varstring,
+			  struct ui_file *stream,
+			  int show, int level,
+			  enum language language,
+			  const struct type_print_options *flags);
 
 extern void c_print_typedef (struct type *,
 			     struct symbol *,
 			     struct ui_file *);
 
-extern void c_val_print (struct type *,
-			 int, CORE_ADDR,
-			 struct ui_file *, int,
-			 struct value *,
-			 const struct value_print_options *);
+/* Implement la_value_print_inner for the C family of languages.  */
+
+extern void c_value_print_inner (struct value *, struct ui_file *, int,
+				 const struct value_print_options *);
 
 extern void c_value_print (struct value *, struct ui_file *,
 			   const struct value_print_options *);
 
 /* These are in c-lang.c: */
 
-extern struct value *evaluate_subexp_c (struct type *expect_type,
-					struct expression *exp,
-					int *pos,
-					enum noside noside);
-
 extern void c_printchar (int, struct type *, struct ui_file *);
 
-extern void c_printstr (struct ui_file * stream,
-			struct type *elttype,
-			const gdb_byte *string,
-			unsigned int length,
-			const char *user_encoding,
-			int force_ellipses,
-			const struct value_print_options *options);
-
 extern void c_language_arch_info (struct gdbarch *gdbarch,
 				  struct language_arch_info *lai);
 
-extern const struct exp_descriptor exp_descriptor_c;
-
-extern void c_emit_char (int c, struct type *type,
-			 struct ui_file *stream, int quoter);
-
-extern const struct op_print c_op_print_tab[];
-
-extern gdb::unique_xmalloc_ptr<char> c_watch_location_expression
-     (struct type *type, CORE_ADDR addr);
-
 /* These are in c-typeprint.c: */
 
 extern void c_type_print_base (struct type *, struct ui_file *,
@@ -130,20 +108,11 @@ extern void c_type_print_base (struct ty
 extern void cp_print_class_member (const gdb_byte *, struct type *,
 				   struct ui_file *, const char *);
 
-extern void cp_print_value_fields (struct type *, struct type *,
-				   LONGEST, CORE_ADDR,
+extern void cp_print_value_fields (struct value *,
 				   struct ui_file *, int,
-				   struct value *,
 				   const struct value_print_options *,
 				   struct type **, int);
 
-extern void cp_print_value_fields_rtti (struct type *,
-					const gdb_byte *, LONGEST, CORE_ADDR,
-					struct ui_file *, int,
-					struct value *,
-					const struct value_print_options *,
-					struct type **, int);
-
 /* gcc-2.6 or later (when using -fvtable-thunks)
    emits a unique named type for a vtable entry.
    Some gdb code depends on that specific name.  */
@@ -163,26 +132,24 @@ extern bool c_is_string_type_p (struct t
 
 extern int c_textual_element_type (struct type *, char);
 
-/* Create a new instance of the C compiler and return it.  The new
-   compiler is owned by the caller and must be freed using the destroy
-   method.  This function never returns NULL, but rather throws an
-   exception on failure.  This is suitable for use as the
-   la_get_compile_instance language method.  */
-
-extern compile_instance *c_get_compile_context (void);
-
-/* Create a new instance of the C++ compiler and return it.  The new
-   compiler is owned by the caller and must be freed using the destroy
-   method.  This function never returns NULL, but rather throws an
-   exception on failure.  This is suitable for use as the
-   la_get_compile_instance language method.  */
+/* Create a new instance of the C compiler and return it.  This
+   function never returns NULL, but rather throws an exception on
+   failure.  This is suitable for use as the
+   language_defn::get_compile_instance method.  */
+
+extern std::unique_ptr<compile_instance> c_get_compile_context ();
+
+/* Create a new instance of the C++ compiler and return it.  This
+   function never returns NULL, but rather throws an exception on
+   failure.  This is suitable for use as the
+   language_defn::get_compile_instance method.  */
 
-extern compile_instance *cplus_get_compile_context ();
+extern std::unique_ptr<compile_instance> cplus_get_compile_context ();
 
 /* This takes the user-supplied text and returns a new bit of code to
    compile.
 
-   This is used as the la_compute_program language method; see that
+   This is used as the compute_program language method; see that
    for a description of the arguments.  */
 
 extern std::string c_compute_program (compile_instance *inst,
@@ -193,7 +160,7 @@ extern std::string c_compute_program (co
 
 /* This takes the user-supplied text and returns a new bit of code to compile.
 
-   This is used as the la_compute_program language method; see that
+   This is used as the compute_program language method; see that
    for a description of the arguments.  */
 
 extern std::string cplus_compute_program (compile_instance *inst,
@@ -202,4 +169,9 @@ extern std::string cplus_compute_program
 					  const struct block *expr_block,
 					  CORE_ADDR expr_pc);
 
+/* Return the canonical form of the C symbol NAME.  If NAME is already
+   canonical, return nullptr.  */
+
+extern gdb::unique_xmalloc_ptr<char> c_canonicalize_name (const char *name);
+
 #endif /* !defined (C_LANG_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-cmds.c ./gdb/cli/cli-cmds.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-cmds.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-cmds.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB CLI commands.
 
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,17 +21,17 @@
 #include "arch-utils.h"
 #include "readline/tilde.h"
 #include "completer.h"
-#include "target.h"	/* For baud_rate, remote_debug and remote_timeout.  */
-#include "gdbsupport/gdb_wait.h"	/* For shell escape implementation.  */
+#include "target.h"
+#include "gdbsupport/gdb_wait.h"
 #include "gdbcmd.h"
-#include "gdb_regex.h"	/* Used by apropos_command.  */
+#include "gdbsupport/gdb_regex.h"
 #include "gdb_vfork.h"
 #include "linespec.h"
 #include "expression.h"
 #include "frame.h"
 #include "value.h"
 #include "language.h"
-#include "filenames.h"	/* For DOSish file names.  */
+#include "filenames.h"
 #include "objfiles.h"
 #include "source.h"
 #include "disasm.h"
@@ -39,23 +39,27 @@
 #include "gdbsupport/filestuff.h"
 #include "location.h"
 #include "block.h"
+#include "valprint.h"
 
 #include "ui-out.h"
 #include "interps.h"
 
 #include "top.h"
+#include "ui.h"
 #include "cli/cli-decode.h"
 #include "cli/cli-script.h"
 #include "cli/cli-setshow.h"
 #include "cli/cli-cmds.h"
 #include "cli/cli-style.h"
 #include "cli/cli-utils.h"
+#include "cli/cli-style.h"
 
 #include "extension.h"
 #include "gdbsupport/pathstuff.h"
+#include "gdbsupport/gdb_tilde_expand.h"
 
 #ifdef TUI
-#include "tui/tui.h"	/* For tui_active et.al.  */
+#include "tui/tui.h"
 #endif
 
 #include <fcntl.h>
@@ -74,7 +78,7 @@ static void filter_sals (std::vector<sym
 
 
 /* See cli-cmds.h. */
-unsigned int max_user_call_depth;
+unsigned int max_user_call_depth = 1024;
 
 /* Define all cmd_list_elements.  */
 
@@ -150,6 +154,10 @@ struct cmd_list_element *maintenanceprin
 
 struct cmd_list_element *maintenancechecklist;
 
+/* Chain containing all defined "maintenance flush" subcommands.  */
+
+struct cmd_list_element *maintenanceflushlist;
+
 struct cmd_list_element *setprintlist;
 
 struct cmd_list_element *showprintlist;
@@ -162,6 +170,10 @@ struct cmd_list_element *setchecklist;
 
 struct cmd_list_element *showchecklist;
 
+struct cmd_list_element *setsourcelist;
+
+struct cmd_list_element *showsourcelist;
+
 /* Command tracing state.  */
 
 int source_verbose = 0;
@@ -182,6 +194,11 @@ static const char *const script_ext_enum
 
 static const char *script_ext_mode = script_ext_soft;
 
+
+/* User-controllable flag to suppress event notification on CLI.  */
+
+static bool user_wants_cli_suppress_notification = false;
+
 /* Utility used everywhere when at least one argument is needed and
    none is supplied.  */
 
@@ -191,26 +208,17 @@ error_no_arg (const char *why)
   error (_("Argument required (%s)."), why);
 }
 
-/* The "info" command is defined as a prefix, with allow_unknown = 0.
-   Therefore, its own definition is called only for "info" with no
-   args.  */
+/* This implements the "info" prefix command.  Normally such commands
+   are automatically handled by add_basic_prefix_cmd, but in this case
+   a separate command is used so that it can be hooked into by
+   gdb-gdb.gdb.  */
 
 static void
 info_command (const char *arg, int from_tty)
 {
-  printf_unfiltered (_("\"info\" must be followed by "
-		       "the name of an info command.\n"));
   help_list (infolist, "info ", all_commands, gdb_stdout);
 }
 
-/* The "show" command with no arguments shows all the settings.  */
-
-static void
-show_command (const char *arg, int from_tty)
-{
-  cmd_show_list (showlist, from_tty, "");
-}
-
 /* See cli/cli-cmds.h.  */
 
 void
@@ -230,11 +238,12 @@ with_command_1 (const char *set_cmd_pref
     nested_cmd = repeat_previous ();
 
   cmd_list_element *set_cmd = lookup_cmd (&args, setlist, set_cmd_prefix,
+					  nullptr,
 					  /*allow_unknown=*/ 0,
 					  /*ignore_help_classes=*/ 1);
   gdb_assert (set_cmd != nullptr);
 
-  if (set_cmd->var == nullptr)
+  if (!set_cmd->var.has_value ())
     error (_("Cannot use this setting with the \"with\" command"));
 
   std::string temp_value
@@ -243,7 +252,8 @@ with_command_1 (const char *set_cmd_pref
   if (nested_cmd == nullptr)
     nested_cmd = skip_spaces (delim + 2);
 
-  std::string org_value = get_setshow_command_value_string (set_cmd);
+  gdb_assert (set_cmd->var.has_value ());
+  std::string org_value = get_setshow_command_value_string (*set_cmd->var);
 
   /* Tweak the setting to the new temporary value.  */
   do_set_command (temp_value.c_str (), from_tty, set_cmd);
@@ -324,7 +334,54 @@ with_command_completer (struct cmd_list_
   with_command_completer_1 ("set ", tracker,  text);
 }
 
-
+/* Look up the contents of TEXT as a command usable with default args.
+   Throws an error if no such command is found.
+   Return the found command and advances TEXT past the found command.
+   If the found command is a postfix command, set *PREFIX_CMD to its
+   prefix command.  */
+
+static struct cmd_list_element *
+lookup_cmd_for_default_args (const char **text,
+			     struct cmd_list_element **prefix_cmd)
+{
+  const char *orig_text = *text;
+  struct cmd_list_element *lcmd;
+
+  if (*text == nullptr || skip_spaces (*text) == nullptr)
+    error (_("ALIAS missing."));
+
+  /* We first use lookup_cmd to verify TEXT unambiguously identifies
+     a command.  */
+  lcmd = lookup_cmd (text, cmdlist, "", NULL,
+		     /*allow_unknown=*/ 0,
+		     /*ignore_help_classes=*/ 1);
+
+  /* Note that we accept default args for prefix commands,
+     as a prefix command can also be a valid usable
+     command accepting some arguments.
+     For example, "thread apply" applies a command to a
+     list of thread ids, and is also the prefix command for
+     thread apply all.  */
+
+  /* We have an unambiguous command for which default args
+     can be specified.  What remains after having found LCMD
+     is either spaces, or the default args character.  */
+
+  /* We then use lookup_cmd_composition to detect if the user
+     has specified an alias, and find the possible prefix_cmd
+     of cmd.  */
+  struct cmd_list_element *alias, *cmd;
+  lookup_cmd_composition
+    (std::string (orig_text, *text - orig_text).c_str (),
+     &alias, prefix_cmd, &cmd);
+  gdb_assert (cmd != nullptr);
+  gdb_assert (cmd == lcmd);
+  if (alias != nullptr)
+    cmd = alias;
+
+  return cmd;
+}
+
 /* Provide documentation on command or list given by COMMAND.  FROM_TTY
    is ignored.  */
 
@@ -398,14 +455,14 @@ complete_command (const char *arg, int f
 int
 is_complete_command (struct cmd_list_element *c)
 {
-  return cmd_cfunc_eq (c, complete_command);
+  return cmd_simple_func_eq (c, complete_command);
 }
 
 static void
 show_version (const char *args, int from_tty)
 {
   print_gdb_version (gdb_stdout, true);
-  printf_filtered ("\n");
+  gdb_printf ("\n");
 }
 
 static void
@@ -433,7 +490,20 @@ quit_command (const char *args, int from
   if (!quit_confirm ())
     error (_("Not confirmed."));
 
-  query_if_trace_running (from_tty);
+  try
+    {
+      query_if_trace_running (from_tty);
+    }
+  catch (const gdb_exception_error &ex)
+    {
+      if (ex.error == TARGET_CLOSE_ERROR)
+	/* We don't care about this since we're quitting anyway, so keep
+	   quitting.  */
+	exception_print (gdb_stderr, ex);
+      else
+	/* Rethrow, to properly handle error (_("Not confirmed.")).  */
+	throw;
+    }
 
   quit_force (args ? &exit_code : NULL, from_tty);
 }
@@ -448,17 +518,17 @@ pwd_command (const char *args, int from_
 
   if (cwd == NULL)
     error (_("Error finding name of working directory: %s"),
-           safe_strerror (errno));
+	   safe_strerror (errno));
 
   if (strcmp (cwd.get (), current_directory) != 0)
-    printf_unfiltered (_("Working directory %ps\n (canonically %ps).\n"),
-		       styled_string (file_name_style.style (),
-				      current_directory),
-		       styled_string (file_name_style.style (), cwd.get ()));
+    gdb_printf (_("Working directory %ps\n (canonically %ps).\n"),
+		styled_string (file_name_style.style (),
+			       current_directory),
+		styled_string (file_name_style.style (), cwd.get ()));
   else
-    printf_unfiltered (_("Working directory %ps.\n"),
-		       styled_string (file_name_style.style (),
-				      current_directory));
+    gdb_printf (_("Working directory %ps.\n"),
+		styled_string (file_name_style.style (),
+			       current_directory));
 }
 
 void
@@ -492,7 +562,7 @@ cd_command (const char *dir, int from_tt
   if (IS_DIR_SEPARATOR (dir[len - 1]))
     {
       /* Remove the trailing slash unless this is a root directory
-         (including a drive letter on non-Unix systems).  */
+	 (including a drive letter on non-Unix systems).  */
       if (!(len == 1)		/* "/" */
 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
 	  && !(len == 3 && dir[1] == ':') /* "d:/" */
@@ -531,7 +601,7 @@ cd_command (const char *dir, int from_tt
 	  if (found_real_path)
 	    {
 	      /* Search backwards for the directory just before the "/.."
-	         and obliterate it and the "/..".  */
+		 and obliterate it and the "/..".  */
 	      char *q = p;
 
 	      while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
@@ -571,9 +641,9 @@ static void
 show_script_ext_mode (struct ui_file *file, int from_tty,
 		     struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file,
-		    _("Script filename extension recognition is \"%s\".\n"),
-		    value);
+  gdb_printf (file,
+	      _("Script filename extension recognition is \"%s\".\n"),
+	      value);
 }
 
 /* Try to open SCRIPT_FILE.
@@ -585,12 +655,12 @@ show_script_ext_mode (struct ui_file *fi
    If SEARCH_PATH is non-zero, and the file isn't found in cwd,
    search for it in the source search path.  */
 
-gdb::optional<open_script>
+std::optional<open_script>
 find_and_open_script (const char *script_file, int search_path)
 {
   int fd;
   openp_flags search_flags = OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH;
-  gdb::optional<open_script> opened;
+  std::optional<open_script> opened;
 
   gdb::unique_xmalloc_ptr<char> file (tilde_expand (script_file));
 
@@ -600,7 +670,7 @@ find_and_open_script (const char *script
   /* Search for and open 'file' on the search path used for source
      files.  Put the full location in *FULL_PATHP.  */
   gdb::unique_xmalloc_ptr<char> full_path;
-  fd = openp (source_path, search_flags,
+  fd = openp (source_path.c_str (), search_flags,
 	      file.get (), O_RDONLY, &full_path);
 
   if (fd == -1)
@@ -672,11 +742,11 @@ source_script_with_search (const char *f
   if (file == NULL || *file == 0)
     error (_("source command requires file name of file to source."));
 
-  gdb::optional<open_script> opened = find_and_open_script (file, search_path);
+  std::optional<open_script> opened = find_and_open_script (file, search_path);
   if (!opened)
     {
       /* The script wasn't found, or was otherwise inaccessible.
-         If the source command was invoked interactively, throw an
+	 If the source command was invoked interactively, throw an
 	 error.  Otherwise (e.g. if it was invoked by a script),
 	 just emit a warning, rather than cause an error.  */
       if (from_tty)
@@ -693,8 +763,16 @@ source_script_with_search (const char *f
      anyway so that error messages show the actual file used.  But only do
      this if we (may have) used search_path, as printing the full path in
      errors for the non-search case can be more noise than signal.  */
-  source_script_from_stream (opened->stream.get (), file,
-			     search_path ? opened->full_path.get () : file);
+  const char *file_to_open;
+  std::string tilde_expanded_file;
+  if (search_path)
+    file_to_open = opened->full_path.get ();
+  else
+    {
+      tilde_expanded_file = gdb_tilde_expand (file);
+      file_to_open = tilde_expanded_file.c_str ();
+    }
+  source_script_from_stream (opened->stream.get (), file, file_to_open);
 }
 
 /* Wrapper around source_script_with_search to export it to main.c
@@ -774,16 +852,15 @@ echo_command (const char *text, int from
 
 	    c = parse_escape (get_current_arch (), &p);
 	    if (c >= 0)
-	      printf_filtered ("%c", c);
+	      gdb_printf ("%c", c);
 	  }
 	else
-	  printf_filtered ("%c", c);
+	  gdb_printf ("%c", c);
       }
 
-  reset_terminal_style (gdb_stdout);
+  gdb_stdout->reset_style ();
 
   /* Force this output to appear now.  */
-  wrap_here ("");
   gdb_flush (gdb_stdout);
 }
 
@@ -798,16 +875,34 @@ exit_status_set_internal_vars (int exit_
 
   clear_internalvar (var_code);
   clear_internalvar (var_signal);
+
+  /* Keep the logic here in sync with shell_internal_fn.  */
+
   if (WIFEXITED (exit_status))
     set_internalvar_integer (var_code, WEXITSTATUS (exit_status));
+#ifdef __MINGW32__
+  else if (WIFSIGNALED (exit_status) && WTERMSIG (exit_status) == -1)
+    {
+      /* The -1 condition can happen on MinGW, if we don't recognize
+	 the fatal exception code encoded in the exit status; see
+	 gdbsupport/gdb_wait.c.  We don't want to lose information in
+	 the exit status in that case.  Record it as a normal exit
+	 with the full exit status, including the higher 0xC0000000
+	 bits.  */
+      set_internalvar_integer (var_code, exit_status);
+    }
+#endif
   else if (WIFSIGNALED (exit_status))
     set_internalvar_integer (var_signal, WTERMSIG (exit_status));
   else
     warning (_("unexpected shell command exit status %d"), exit_status);
 }
 
-static void
-shell_escape (const char *arg, int from_tty)
+/* Run ARG under the shell, and return the exit status.  If ARG is
+   NULL, run an interactive shell.  */
+
+static int
+run_under_shell (const char *arg, int from_tty)
 {
 #if defined(CANT_FORK) || \
       (!defined(HAVE_WORKING_VFORK) && !defined(HAVE_WORKING_FORK))
@@ -819,16 +914,16 @@ shell_escape (const char *arg, int from_
     arg = "inferior shell";
 
   if (rc == -1)
-    fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
-			safe_strerror (errno));
+    gdb_printf (gdb_stderr, "Cannot execute %s: %s\n", arg,
+		safe_strerror (errno));
   else if (rc)
-    fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
+    gdb_printf (gdb_stderr, "%s exited with status %d\n", arg, rc);
 #ifdef GLOBAL_CURDIR
   /* Make sure to return to the directory GDB thinks it is, in case
      the shell command we just ran changed it.  */
   chdir (current_directory);
-  exit_status_set_internal_vars (rc);
 #endif
+  return rc;
 #else /* Can fork.  */
   int status, pid;
 
@@ -846,8 +941,8 @@ shell_escape (const char *arg, int from_
       else
 	execl (user_shell, p, "-c", arg, (char *) 0);
 
-      fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
-			  safe_strerror (errno));
+      gdb_printf (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
+		  safe_strerror (errno));
       _exit (0177);
     }
 
@@ -855,10 +950,21 @@ shell_escape (const char *arg, int from_
     waitpid (pid, &status, 0);
   else
     error (_("Fork failed"));
-  exit_status_set_internal_vars (status);
+  return status;
 #endif /* Can fork.  */
 }
 
+/* Escape out to the shell to run ARG.  If ARG is NULL, launch and
+   interactive shell.  Sets $_shell_exitcode and $_shell_exitsignal
+   convenience variables based on the exits status.  */
+
+static void
+shell_escape (const char *arg, int from_tty)
+{
+  int status = run_under_shell (arg, from_tty);
+  exit_status_set_internal_vars (status);
+}
+
 /* Implementation of the "shell" command.  */
 
 static void
@@ -873,7 +979,6 @@ edit_command (const char *arg, int from_
   struct symtab_and_line sal;
   struct symbol *sym;
   const char *editor;
-  char *p;
   const char *fn;
 
   /* Pull in the current default source line if necessary.  */
@@ -897,9 +1002,13 @@ edit_command (const char *arg, int from_
 
       /* Now should only be one argument -- decode it in SAL.  */
       arg1 = arg;
-      event_location_up location = string_to_event_location (&arg1,
-							     current_language);
-      std::vector<symtab_and_line> sals = decode_line_1 (location.get (),
+      location_spec_up locspec = string_to_location_spec (&arg1,
+							  current_language);
+
+      if (*arg1)
+	error (_("Junk at end of line specification."));
+
+      std::vector<symtab_and_line> sals = decode_line_1 (locspec.get (),
 							 DECODE_LINE_LIST_MODE,
 							 NULL, NULL, 0);
 
@@ -918,41 +1027,38 @@ edit_command (const char *arg, int from_
 
       sal = sals[0];
 
-      if (*arg1)
-        error (_("Junk at end of line specification."));
-
       /* If line was specified by address, first print exactly which
-         line, and which file.  In this case, sal.symtab == 0 means
-         address is outside of all known source files, not that user
-         failed to give a filename.  */
+	 line, and which file.  In this case, sal.symtab == 0 means
+	 address is outside of all known source files, not that user
+	 failed to give a filename.  */
       if (*arg == '*')
-        {
+	{
 	  struct gdbarch *gdbarch;
 
-          if (sal.symtab == 0)
+	  if (sal.symtab == 0)
 	    error (_("No source file for address %s."),
 		   paddress (get_current_arch (), sal.pc));
 
-	  gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
-          sym = find_pc_function (sal.pc);
-          if (sym)
-	    printf_filtered ("%s is in %s (%s:%d).\n",
-			     paddress (gdbarch, sal.pc),
-			     sym->print_name (),
-			     symtab_to_filename_for_display (sal.symtab),
-			     sal.line);
-          else
-	    printf_filtered ("%s is at %s:%d.\n",
-			     paddress (gdbarch, sal.pc),
-			     symtab_to_filename_for_display (sal.symtab),
-			     sal.line);
-        }
+	  gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
+	  sym = find_pc_function (sal.pc);
+	  if (sym)
+	    gdb_printf ("%s is in %s (%s:%d).\n",
+			paddress (gdbarch, sal.pc),
+			sym->print_name (),
+			symtab_to_filename_for_display (sal.symtab),
+			sal.line);
+	  else
+	    gdb_printf ("%s is at %s:%d.\n",
+			paddress (gdbarch, sal.pc),
+			symtab_to_filename_for_display (sal.symtab),
+			sal.line);
+	}
 
       /* If what was given does not imply a symtab, it must be an
-         undebuggable symbol which means no source code.  */
+	 undebuggable symbol which means no source code.  */
 
       if (sal.symtab == 0)
-        error (_("No line number known for %s."), arg);
+	error (_("No line number known for %s."), arg);
     }
 
   if ((editor = getenv ("EDITOR")) == NULL)
@@ -962,9 +1068,9 @@ edit_command (const char *arg, int from_
 
   /* Quote the file name, in case it has whitespace or other special
      characters.  */
-  p = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn);
-  shell_escape (p, from_tty);
-  xfree (p);
+  gdb::unique_xmalloc_ptr<char> p
+    = xstrprintf ("%s +%d \"%s\"", editor, sal.line, fn);
+  shell_escape (p.get (), from_tty);
 }
 
 /* The options for the "pipe" command.  */
@@ -972,12 +1078,7 @@ edit_command (const char *arg, int from_
 struct pipe_cmd_opts
 {
   /* For "-d".  */
-  char *delimiter = nullptr;
-
-  ~pipe_cmd_opts ()
-  {
-    xfree (delimiter);
-  }
+  std::string delimiter;
 };
 
 static const gdb::option::option_def pipe_cmd_option_defs[] = {
@@ -1014,8 +1115,8 @@ pipe_command (const char *arg, int from_
     (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
 
   const char *delim = "|";
-  if (opts.delimiter != nullptr)
-    delim = opts.delimiter;
+  if (!opts.delimiter.empty ())
+    delim = opts.delimiter.c_str ();
 
   const char *command = arg;
   if (command == nullptr)
@@ -1058,7 +1159,7 @@ pipe_command (const char *arg, int from_
 
   if (exit_status < 0)
     error (_("shell command \"%s\" failed: %s"), shell_command,
-           safe_strerror (errno));
+	   safe_strerror (errno));
   exit_status_set_internal_vars (exit_status);
 }
 
@@ -1078,8 +1179,8 @@ pipe_command_completer (struct cmd_list_
     return;
 
   const char *delimiter = "|";
-  if (opts.delimiter != nullptr)
-    delimiter = opts.delimiter;
+  if (!opts.delimiter.empty ())
+    delimiter = opts.delimiter.c_str ();
 
   /* Check if we're past option values already.  */
   if (text > org_text && !isspace (text[-1]))
@@ -1099,6 +1200,28 @@ pipe_command_completer (struct cmd_list_
      we don't know how to complete.  */
 }
 
+/* Helper for the list_command function.  Prints the lines around (and
+   including) line stored in CURSAL.  ARG contains the arguments used in
+   the command invocation, and is used to determine a special case when
+   printing backwards.  */
+static void
+list_around_line (const char *arg, symtab_and_line cursal)
+{
+  int first;
+
+  first = std::max (cursal.line - get_lines_to_list () / 2, 1);
+
+  /* A small special case --- if listing backwards, and we
+     should list only one line, list the preceding line,
+     instead of the exact line we've just shown after e.g.,
+     stopping for a breakpoint.  */
+  if (arg != NULL && arg[0] == '-'
+      && get_lines_to_list () == 1 && first > 1)
+    first -= 1;
+
+  print_source_lines (cursal.symtab, source_lines_range (first), 0);
+}
+
 static void
 list_command (const char *arg, int from_tty)
 {
@@ -1111,34 +1234,31 @@ list_command (const char *arg, int from_
   const char *p;
 
   /* Pull in the current default source line if necessary.  */
-  if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0'))
+  if (arg == NULL || ((arg[0] == '+' || arg[0] == '-' || arg[0] == '.') && arg[1] == '\0'))
     {
       set_default_source_symtab_and_line ();
       symtab_and_line cursal = get_current_source_symtab_and_line ();
 
       /* If this is the first "list" since we've set the current
 	 source line, center the listing around that line.  */
-      if (get_first_line_listed () == 0)
+      if (get_first_line_listed () == 0 && (arg == nullptr || arg[0] != '.'))
 	{
-	  int first;
-
-	  first = std::max (cursal.line - get_lines_to_list () / 2, 1);
-
-	  /* A small special case --- if listing backwards, and we
-	     should list only one line, list the preceding line,
-	     instead of the exact line we've just shown after e.g.,
-	     stopping for a breakpoint.  */
-	  if (arg != NULL && arg[0] == '-'
-	      && get_lines_to_list () == 1 && first > 1)
-	    first -= 1;
-
-	  print_source_lines (cursal.symtab, source_lines_range (first), 0);
+	  list_around_line (arg, cursal);
 	}
 
-      /* "l" or "l +" lists next ten lines.  */
-      else if (arg == NULL || arg[0] == '+')
-	print_source_lines (cursal.symtab,
-			    source_lines_range (cursal.line), 0);
+      /* "l" and "l +" lists the next few lines, unless we're listing past
+	 the end of the file.  */
+      else if (arg == nullptr || arg[0] == '+')
+	{
+	  if (last_symtab_line (cursal.symtab) >= cursal.line)
+	    print_source_lines (cursal.symtab,
+				source_lines_range (cursal.line), 0);
+	  else
+	    {
+	      error (_("End of the file was already reached, use \"list .\" to"
+		       " list the current location again"));
+	    }
+	}
 
       /* "l -" lists previous ten lines, the ones before the ten just
 	 listed.  */
@@ -1152,6 +1272,34 @@ list_command (const char *arg, int from_
 	  print_source_lines (cursal.symtab, range, 0);
 	}
 
+      /* "list ." lists the default location again.  */
+      else if (arg[0] == '.')
+	{
+	  if (target_has_stack ())
+	    {
+	      /* Find the current line by getting the PC of the currently
+		 selected frame, and finding the line associated to it.  */
+	      frame_info_ptr frame = get_selected_frame (nullptr);
+	      CORE_ADDR curr_pc = get_frame_pc (frame);
+	      cursal = find_pc_line (curr_pc, 0);
+	    }
+	  else
+	    {
+	      /* The inferior is not running, so reset the current source
+		 location to the default (usually the main function).  */
+	      clear_current_source_symtab_and_line ();
+	      set_default_source_symtab_and_line ();
+	      cursal = get_current_source_symtab_and_line ();
+	    }
+	  if (cursal.symtab == nullptr)
+	    error (_("No debug information available to print source lines."));
+	  list_around_line (arg, cursal);
+	  /* Set the repeat args so just pressing "enter" after using "list ."
+	     will print the following lines instead of the same lines again. */
+	  if (from_tty)
+	    set_repeat_arguments ("");
+	}
+
       return;
     }
 
@@ -1172,9 +1320,18 @@ list_command (const char *arg, int from_
     dummy_beg = 1;
   else
     {
-      event_location_up location = string_to_event_location (&arg1,
-							     current_language);
-      sals = decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
+      location_spec_up locspec
+	= string_to_location_spec (&arg1, current_language);
+
+      /* We know that the ARG string is not empty, yet the attempt to
+	 parse a location spec from the string consumed no characters.
+	 This most likely means that the first thing in ARG looks like
+	 a location spec condition, and so the string_to_location_spec
+	 call stopped parsing.  */
+      if (arg1 == arg)
+	error (_("Junk at end of line specification."));
+
+      sals = decode_line_1 (locspec.get (), DECODE_LINE_LIST_MODE,
 			    NULL, NULL, 0);
       filter_sals (sals);
       if (sals.empty ())
@@ -1219,14 +1376,17 @@ list_command (const char *arg, int from_
 	     know it was ambiguous.  */
 	  const char *end_arg = arg1;
 
-	  event_location_up location
-	    = string_to_event_location (&arg1, current_language);
+	  location_spec_up locspec
+	    = string_to_location_spec (&arg1, current_language);
+
+	  if (*arg1)
+	    error (_("Junk at end of line specification."));
 
 	  std::vector<symtab_and_line> sals_end
 	    = (dummy_beg
-	       ? decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
+	       ? decode_line_1 (locspec.get (), DECODE_LINE_LIST_MODE,
 				NULL, NULL, 0)
-	       : decode_line_1 (location.get (), DECODE_LINE_LIST_MODE,
+	       : decode_line_1 (locspec.get (), DECODE_LINE_LIST_MODE,
 				NULL, sal.symtab, sal.line));
 
 	  filter_sals (sals_end);
@@ -1265,17 +1425,17 @@ list_command (const char *arg, int from_
 	error (_("No source file for address %s."),
 	       paddress (get_current_arch (), sal.pc));
 
-      gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
+      gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
       sym = find_pc_function (sal.pc);
       if (sym)
-	printf_filtered ("%s is in %s (%s:%d).\n",
-			 paddress (gdbarch, sal.pc),
-			 sym->print_name (),
-			 symtab_to_filename_for_display (sal.symtab), sal.line);
+	gdb_printf ("%s is in %s (%s:%d).\n",
+		    paddress (gdbarch, sal.pc),
+		    sym->print_name (),
+		    symtab_to_filename_for_display (sal.symtab), sal.line);
       else
-	printf_filtered ("%s is at %s:%d.\n",
-			 paddress (gdbarch, sal.pc),
-			 symtab_to_filename_for_display (sal.symtab), sal.line);
+	gdb_printf ("%s is at %s:%d.\n",
+		    paddress (gdbarch, sal.pc),
+		    symtab_to_filename_for_display (sal.symtab), sal.line);
     }
 
   /* If line was not specified by just a line number, and it does not
@@ -1338,42 +1498,45 @@ print_disassembly (struct gdbarch *gdbar
 		   gdb_disassembly_flags flags)
 {
 #if defined(TUI)
-  if (!tui_is_window_visible (DISASSEM_WIN))
+  if (tui_is_window_visible (DISASSEM_WIN))
+    tui_show_assembly (gdbarch, low);
+  else
 #endif
     {
-      printf_filtered ("Dump of assembler code ");
+      gdb_printf (_("Dump of assembler code "));
       if (name != NULL)
-	printf_filtered ("for function %s:\n", name);
-      if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
-        {
+	gdb_printf (_("for function %ps:\n"),
+		    styled_string (function_name_style.style (), name));
+      if (block == nullptr || block->is_contiguous ())
+	{
 	  if (name == NULL)
-	    printf_filtered ("from %s to %s:\n",
-			     paddress (gdbarch, low), paddress (gdbarch, high));
+	    gdb_printf (_("from %ps to %ps:\n"),
+			styled_string (address_style.style (),
+				       paddress (gdbarch, low)),
+			styled_string (address_style.style (),
+				       paddress (gdbarch, high)));
 
 	  /* Dump the specified range.  */
 	  gdb_disassembly (gdbarch, current_uiout, flags, -1, low, high);
 	}
       else
-        {
-	  for (int i = 0; i < BLOCK_NRANGES (block); i++)
+	{
+	  for (const blockrange &range : block->ranges ())
 	    {
-	      CORE_ADDR range_low = BLOCK_RANGE_START (block, i);
-	      CORE_ADDR range_high = BLOCK_RANGE_END (block, i);
-	      printf_filtered (_("Address range %s to %s:\n"),
-			       paddress (gdbarch, range_low),
-			       paddress (gdbarch, range_high));
+	      CORE_ADDR range_low = range.start ();
+	      CORE_ADDR range_high = range.end ();
+
+	      gdb_printf (_("Address range %ps to %ps:\n"),
+			  styled_string (address_style.style (),
+					 paddress (gdbarch, range_low)),
+			  styled_string (address_style.style (),
+					 paddress (gdbarch, range_high)));
 	      gdb_disassembly (gdbarch, current_uiout, flags, -1,
 			       range_low, range_high);
 	    }
 	}
-      printf_filtered ("End of assembler dump.\n");
+      gdb_printf (_("End of assembler dump.\n"));
     }
-#if defined(TUI)
-  else
-    {
-      tui_show_assembly (gdbarch, low);
-    }
-#endif
 }
 
 /* Subroutine of disassemble_command to simplify it.
@@ -1382,7 +1545,7 @@ print_disassembly (struct gdbarch *gdbar
 static void
 disassemble_current_function (gdb_disassembly_flags flags)
 {
-  struct frame_info *frame;
+  frame_info_ptr frame;
   struct gdbarch *gdbarch;
   CORE_ADDR low, high, pc;
   const char *name;
@@ -1424,6 +1587,9 @@ disassemble_current_function (gdb_disass
 
    A /r modifier will include raw instructions in hex with the assembly.
 
+   A /b modifier is similar to /r except the instruction bytes are printed
+   as separate bytes with no grouping, or endian switching.
+
    A /s modifier will include source code with the assembly, like /m, with
    two important differences:
    1) The output is still in pc address order.
@@ -1434,6 +1600,7 @@ disassemble_command (const char *arg, in
 {
   struct gdbarch *gdbarch = get_current_arch ();
   CORE_ADDR low, high;
+  const general_symbol_info *symbol = nullptr;
   const char *name;
   CORE_ADDR pc;
   gdb_disassembly_flags flags;
@@ -1461,6 +1628,9 @@ disassemble_command (const char *arg, in
 	    case 'r':
 	      flags |= DISASSEMBLY_RAW_INSN;
 	      break;
+	    case 'b':
+	      flags |= DISASSEMBLY_RAW_BYTES;
+	      break;
 	    case 's':
 	      flags |= DISASSEMBLY_SOURCE;
 	      break;
@@ -1476,6 +1646,10 @@ disassemble_command (const char *arg, in
       == (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
     error (_("Cannot specify both /m and /s."));
 
+  if ((flags & (DISASSEMBLY_RAW_INSN | DISASSEMBLY_RAW_BYTES))
+      == (DISASSEMBLY_RAW_INSN | DISASSEMBLY_RAW_BYTES))
+    error (_("Cannot specify both /r and /b."));
+
   if (! p || ! *p)
     {
       flags |= DISASSEMBLY_OMIT_FNAME;
@@ -1489,8 +1663,14 @@ disassemble_command (const char *arg, in
   if (p[0] == '\0')
     {
       /* One argument.  */
-      if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0)
+      if (!find_pc_partial_function_sym (pc, &symbol, &low, &high, &block))
 	error (_("No function contains specified address."));
+
+      if (asm_demangle)
+	name = symbol->print_name ();
+      else
+	name = symbol->linkage_name ();
+
 #if defined(TUI)
       /* NOTE: cagney/2003-02-13 The `tui_active' was previously
 	 `tui_version'.  */
@@ -1520,6 +1700,20 @@ disassemble_command (const char *arg, in
   print_disassembly (gdbarch, name, low, high, block, flags);
 }
 
+/* Command completion for the disassemble command.  */
+
+static void
+disassemble_command_completer (struct cmd_list_element *ignore,
+			       completion_tracker &tracker,
+			       const char *text, const char * /* word */)
+{
+  if (skip_over_slash_fmt (tracker, &text))
+    return;
+
+  const char *word = advance_to_expression_complete_word_point (tracker, text);
+  expression_completer (ignore, tracker, text, word);
+}
+
 static void
 make_command (const char *arg, int from_tty)
 {
@@ -1542,7 +1736,7 @@ show_user (const char *args, int from_tt
     {
       const char *comname = args;
 
-      c = lookup_cmd (&comname, cmdlist, "", 0, 1);
+      c = lookup_cmd (&comname, cmdlist, "", NULL, 0, 1);
       if (!cli_user_command_p (c))
 	error (_("Not a user command."));
       show_user_1 (c, "", args, gdb_stdout);
@@ -1551,12 +1745,81 @@ show_user (const char *args, int from_tt
     {
       for (c = cmdlist; c; c = c->next)
 	{
-	  if (cli_user_command_p (c) || c->prefixlist != NULL)
+	  if (cli_user_command_p (c) || c->is_prefix ())
 	    show_user_1 (c, "", c->name, gdb_stdout);
 	}
     }
 }
 
+/* Return true if COMMAND or any of its sub-commands is a user defined command.
+   This is a helper function for show_user_completer.  */
+
+static bool
+has_user_subcmd (struct cmd_list_element *command)
+{
+  if (cli_user_command_p (command))
+    return true;
+
+  /* Alias command can yield false positive.  Ignore them as the targeted
+     command should be reachable anyway.  */
+  if (command->is_alias ())
+    return false;
+
+  if (command->is_prefix ())
+    for (struct cmd_list_element *subcommand = *command->subcommands;
+	 subcommand != nullptr;
+	 subcommand = subcommand->next)
+      if (has_user_subcmd (subcommand))
+	return true;
+
+  return false;
+}
+
+/* Implement completer for the 'show user' command.  */
+
+static void
+show_user_completer (cmd_list_element *,
+		     completion_tracker &tracker, const char *text,
+		     const char *word)
+{
+  struct cmd_list_element *cmd_group = cmdlist;
+
+  /* TEXT can contain a chain of commands and subcommands.  Follow the
+     commands chain until we reach the point where the user wants a
+     completion.  */
+  while (word > text)
+    {
+      const char *curr_cmd = text;
+      const char *after = skip_to_space (text);
+      const size_t curr_cmd_len = after - text;
+      text = skip_spaces (after);
+
+      for (struct cmd_list_element *c = cmd_group; c != nullptr; c = c->next)
+	{
+	  if (strlen (c->name) == curr_cmd_len
+	      && strncmp (c->name, curr_cmd, curr_cmd_len) == 0)
+	    {
+	      if (c->subcommands == nullptr)
+		/* We arrived after a command with no child, so nothing more
+		   to complete.  */
+		return;
+
+	      cmd_group = *c->subcommands;
+	      break;
+	    }
+	}
+    }
+
+  const int wordlen = strlen (word);
+  for (struct cmd_list_element *c = cmd_group; c != nullptr; c = c->next)
+    if (has_user_subcmd (c))
+      {
+	if (strncmp (c->name, word, wordlen) == 0)
+	  tracker.add_completion
+	    (gdb::unique_xmalloc_ptr<char> (xstrdup (c->name)));
+      }
+}
+
 /* Search through names of commands and documentations for a certain
    regular expression.  */
 
@@ -1571,7 +1834,72 @@ apropos_command (const char *arg, int fr
   compiled_regex pattern (arg, REG_ICASE,
 			  _("Error in regular expression"));
 
-  apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, "");
+  apropos_cmd (gdb_stdout, cmdlist, verbose, pattern);
+}
+
+/* The options for the "alias" command.  */
+
+struct alias_opts
+{
+  /* For "-a".  */
+  bool abbrev_flag = false;
+};
+
+static const gdb::option::option_def alias_option_defs[] = {
+
+  gdb::option::flag_option_def<alias_opts> {
+    "a",
+    [] (alias_opts *opts) { return &opts->abbrev_flag; },
+    N_("Specify that ALIAS is an abbreviation of COMMAND.\n\
+Abbreviations are not used in command completion."),
+  },
+
+};
+
+/* Create an option_def_group for the "alias" options, with
+   A_OPTS as context.  */
+
+static gdb::option::option_def_group
+make_alias_options_def_group (alias_opts *a_opts)
+{
+  return {{alias_option_defs}, a_opts};
+}
+
+/* Completer for the "alias_command".  */
+
+static void
+alias_command_completer (struct cmd_list_element *ignore,
+			 completion_tracker &tracker,
+			 const char *text, const char *word)
+{
+  const auto grp = make_alias_options_def_group (nullptr);
+
+  tracker.set_use_custom_word_point (true);
+
+  if (gdb::option::complete_options
+      (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
+    return;
+
+  const char *delim = strchr (text, '=');
+
+  /* If we're past the "=" delimiter, complete the
+     "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is
+     typing COMMAND DEFAULT-ARGS...  */
+  if (delim != text
+      && delim != nullptr
+      && isspace (delim[-1])
+      && (isspace (delim[1]) || delim[1] == '\0'))
+    {
+      std::string new_text = std::string (delim + 1);
+
+      tracker.advance_custom_word_point_by (delim + 1 - text);
+      complete_nested_command_line (tracker, new_text.c_str ());
+      return;
+    }
+
+  /* We're not yet past the "=" delimiter.  Complete a command, as
+     the user might type an alias following a prefix command.  */
+  complete_nested_command_line (tracker, text);
 }
 
 /* Subroutine of alias_command to simplify it.
@@ -1601,24 +1929,30 @@ argv_to_string (char **argv, int n)
 }
 
 /* Subroutine of alias_command to simplify it.
-   Return true if COMMAND exists, unambiguously.  Otherwise false.  */
+   Verifies that COMMAND can have an alias:
+      COMMAND must exist.
+      COMMAND must not have default args.
+   This last condition is to avoid the following:
+     alias aaa = backtrace -full
+     alias bbb = aaa -past-main
+   as (at least currently), alias default args are not cumulative
+   and the user would expect bbb to execute 'backtrace -full -past-main'
+   while it will execute 'backtrace -past-main'.  */
 
-static bool
-valid_command_p (const char *command)
+static cmd_list_element *
+validate_aliased_command (const char *command)
 {
-  struct cmd_list_element *c;
-
-  c = lookup_cmd_1 (& command, cmdlist, NULL, 1);
+  std::string default_args;
+  cmd_list_element *c
+    = lookup_cmd_1 (& command, cmdlist, NULL, &default_args, 1);
 
   if (c == NULL || c == (struct cmd_list_element *) -1)
-    return false;
+    error (_("Invalid command to alias to: %s"), command);
 
-  /* This is the slightly tricky part.
-     lookup_cmd_1 will return a pointer to the last part of COMMAND
-     to match, leaving COMMAND pointing at the remainder.  */
-  while (*command == ' ' || *command == '\t')
-    ++command;
-  return *command == '\0';
+  if (!default_args.empty ())
+    error (_("Cannot define an alias of an alias that has default args"));
+
+  return c;
 }
 
 /* Called when "alias" was incorrectly used.  */
@@ -1626,7 +1960,7 @@ valid_command_p (const char *command)
 static void
 alias_usage_error (void)
 {
-  error (_("Usage: alias [-a] [--] ALIAS = COMMAND"));
+  error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]"));
 }
 
 /* Make an alias of an existing command.  */
@@ -1634,8 +1968,13 @@ alias_usage_error (void)
 static void
 alias_command (const char *args, int from_tty)
 {
+  alias_opts a_opts;
+
+  auto grp = make_alias_options_def_group (&a_opts);
+  gdb::option::process_options
+    (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
+
   int i, alias_argc, command_argc;
-  int abbrev_flag = 0;
   const char *equals;
   const char *alias, *command;
 
@@ -1646,24 +1985,18 @@ alias_command (const char *args, int fro
   std::string args2 (args, equals - args);
 
   gdb_argv built_alias_argv (args2.c_str ());
-  gdb_argv command_argv (equals + 1);
+
+  const char *default_args = equals + 1;
+  struct cmd_list_element *c_command_prefix;
+
+  lookup_cmd_for_default_args (&default_args, &c_command_prefix);
+  std::string command_argv_str (equals + 1,
+				default_args == nullptr
+				? strlen (equals + 1)
+				: default_args - equals - 1);
+  gdb_argv command_argv (command_argv_str.c_str ());
 
   char **alias_argv = built_alias_argv.get ();
-  while (alias_argv[0] != NULL)
-    {
-      if (strcmp (alias_argv[0], "-a") == 0)
-	{
-	  ++alias_argv;
-	  abbrev_flag = 1;
-	}
-      else if (strcmp (alias_argv[0], "--") == 0)
-	{
-	  ++alias_argv;
-	  break;
-	}
-      else
-	break;
-    }
 
   if (alias_argv[0] == NULL || command_argv[0] == NULL
       || *alias_argv[0] == '\0' || *command_argv[0] == '\0')
@@ -1683,20 +2016,42 @@ alias_command (const char *args, int fro
   alias_argc = countargv (alias_argv);
   command_argc = command_argv.count ();
 
-  /* COMMAND must exist.
+  /* COMMAND must exist, and cannot have default args.
      Reconstruct the command to remove any extraneous spaces,
      for better error messages.  */
   std::string command_string (argv_to_string (command_argv.get (),
 					      command_argc));
   command = command_string.c_str ();
-  if (! valid_command_p (command))
-    error (_("Invalid command to alias to: %s"), command);
+  cmd_list_element *target_cmd = validate_aliased_command (command);
 
   /* ALIAS must not exist.  */
   std::string alias_string (argv_to_string (alias_argv, alias_argc));
   alias = alias_string.c_str ();
-  if (valid_command_p (alias))
-    error (_("Alias already exists: %s"), alias);
+  {
+    cmd_list_element *alias_cmd, *prefix_cmd, *cmd;
+
+    if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd))
+      {
+	const char *alias_name = alias_argv[alias_argc-1];
+
+	/* If we found an existing ALIAS_CMD, check that the prefix differ or
+	   the name differ.  */
+
+	if (alias_cmd != nullptr
+	    && alias_cmd->prefix == prefix_cmd
+	    && strcmp (alias_name, alias_cmd->name) == 0)
+	  error (_("Alias already exists: %s"), alias);
+
+	/* Check ALIAS differs from the found CMD.  */
+
+	if (cmd->prefix == prefix_cmd
+	    && strcmp (alias_name, cmd->name) == 0)
+	  error (_("Alias %s is the name of an existing command"), alias);
+      }
+  }
+
+
+  struct cmd_list_element *alias_cmd;
 
   /* If ALIAS is one word, it is an alias for the entire COMMAND.
      Example: alias spe = set print elements
@@ -1710,8 +2065,8 @@ alias_command (const char *args, int fro
   if (alias_argc == 1)
     {
       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
-      add_com_alias (xstrdup (alias_argv[0]), command, class_alias,
-		     abbrev_flag);
+      alias_cmd = add_com_alias (xstrdup (alias_argv[0]), target_cmd,
+				 class_alias, a_opts.abbrev_flag);
     }
   else
     {
@@ -1731,19 +2086,28 @@ alias_command (const char *args, int fro
       alias_prefix = alias_prefix_string.c_str ();
       command_prefix = command_prefix_string.c_str ();
 
-      c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, 1);
+      c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, NULL, 1);
       /* We've already tried to look up COMMAND.  */
       gdb_assert (c_command != NULL
 		  && c_command != (struct cmd_list_element *) -1);
-      gdb_assert (c_command->prefixlist != NULL);
-      c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, 1);
+      gdb_assert (c_command->is_prefix ());
+      c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1);
       if (c_alias != c_command)
 	error (_("ALIAS and COMMAND prefixes do not match."));
 
       /* add_cmd requires *we* allocate space for name, hence the xstrdup.  */
-      add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
-		     command_argv[command_argc - 1],
-		     class_alias, abbrev_flag, c_command->prefixlist);
+      alias_cmd = add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]),
+				 target_cmd, class_alias, a_opts.abbrev_flag,
+				 c_command->subcommands);
+    }
+
+  gdb_assert (alias_cmd != nullptr);
+  gdb_assert (alias_cmd->default_args.empty ());
+  if (default_args != nullptr)
+    {
+      default_args = skip_spaces (default_args);
+
+      alias_cmd->default_args = default_args;
     }
 }
 
@@ -1759,9 +2123,9 @@ print_sal_location (const symtab_and_lin
   const char *sym_name = NULL;
   if (sal.symbol != NULL)
     sym_name = sal.symbol->print_name ();
-  printf_filtered (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
-		   symtab_to_filename_for_display (sal.symtab),
-		   sal.line, sym_name != NULL ? sym_name : "???");
+  gdb_printf (_("file: \"%s\", line number: %d, symbol: \"%s\"\n"),
+	      symtab_to_filename_for_display (sal.symtab),
+	      sal.line, sym_name != NULL ? sym_name : "???");
 }
 
 /* Print a list of files and line numbers which a user may choose from
@@ -1777,7 +2141,7 @@ ambiguous_line_spec (gdb::array_view<con
 {
   va_list ap;
   va_start (ap, format);
-  vprintf_filtered (format, ap);
+  gdb_vprintf (format, ap);
   va_end (ap);
 
   for (const auto &sal : sals)
@@ -1790,8 +2154,8 @@ ambiguous_line_spec (gdb::array_view<con
 static int
 cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
 {
-  const char *dira = SYMTAB_DIRNAME (sala.symtab);
-  const char *dirb = SYMTAB_DIRNAME (salb.symtab);
+  const char *dira = sala.symtab->compunit ()->dirname ();
+  const char *dirb = salb.symtab->compunit ()->dirname ();
   int r;
 
   if (dira == NULL)
@@ -1845,70 +2209,55 @@ filter_sals (std::vector<symtab_and_line
 }
 
 static void
-set_debug (const char *arg, int from_tty)
-{
-  printf_unfiltered (_("\"set debug\" must be followed by "
-		       "the name of a debug subcommand.\n"));
-  help_list (setdebuglist, "set debug ", all_commands, gdb_stdout);
-}
-
-static void
-show_debug (const char *args, int from_tty)
-{
-  cmd_show_list (showdebuglist, from_tty, "");
-}
-
-void
-init_cmd_lists (void)
-{
-  max_user_call_depth = 1024;
-}
-
-static void
 show_info_verbose (struct ui_file *file, int from_tty,
 		   struct cmd_list_element *c,
 		   const char *value)
 {
   if (info_verbose)
-    fprintf_filtered (file,
-		      _("Verbose printing of informational messages is %s.\n"),
-		      value);
+    gdb_printf (file,
+		_("Verbose printing of informational messages is %s.\n"),
+		value);
   else
-    fprintf_filtered (file, _("Verbosity is %s.\n"), value);
+    gdb_printf (file, _("Verbosity is %s.\n"), value);
 }
 
 static void
 show_history_expansion_p (struct ui_file *file, int from_tty,
 			  struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("History expansion on command input is %s.\n"),
-		    value);
+  gdb_printf (file, _("History expansion on command input is %s.\n"),
+	      value);
 }
 
 static void
-show_remote_debug (struct ui_file *file, int from_tty,
-		   struct cmd_list_element *c, const char *value)
+show_max_user_call_depth (struct ui_file *file, int from_tty,
+			  struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
-		    value);
+  gdb_printf (file,
+	      _("The max call depth for user-defined commands is %s.\n"),
+	      value);
 }
 
+/* Implement 'show suppress-cli-notifications'.  */
+
 static void
-show_remote_timeout (struct ui_file *file, int from_tty,
-		     struct cmd_list_element *c, const char *value)
+show_suppress_cli_notifications (ui_file *file, int from_tty,
+				 cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file,
-		    _("Timeout limit to wait for target to respond is %s.\n"),
-		    value);
+  gdb_printf (file, _("Suppression of printing CLI notifications "
+		      "is %s.\n"), value);
 }
 
+/* Implement 'set suppress-cli-notifications'.  */
+
 static void
-show_max_user_call_depth (struct ui_file *file, int from_tty,
-			  struct cmd_list_element *c, const char *value)
+set_suppress_cli_notifications (const char *args, int from_tty,
+				cmd_list_element *c)
 {
-  fprintf_filtered (file,
-		    _("The max call depth for user-defined commands is %s.\n"),
-		    value);
+  cli_suppress_notification.user_selected_context
+    = user_wants_cli_suppress_notification;
+  cli_suppress_notification.normal_stop
+    = user_wants_cli_suppress_notification;
 }
 
 /* Returns the cmd_list_element in SHOWLIST corresponding to the first
@@ -1925,18 +2274,32 @@ setting_cmd (const char *fnname, struct
   if (argc != 1)
     error (_("You can only provide one argument to %s"), fnname);
 
-  struct type *type0 = check_typedef (value_type (argv[0]));
+  struct type *type0 = check_typedef (argv[0]->type ());
 
-  if (TYPE_CODE (type0) != TYPE_CODE_ARRAY
-      && TYPE_CODE (type0) != TYPE_CODE_STRING)
+  if (type0->code () != TYPE_CODE_ARRAY
+      && type0->code () != TYPE_CODE_STRING)
     error (_("First argument of %s must be a string."), fnname);
 
-  const char *a0 = (const char *) value_contents (argv[0]);
-  cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", -1, 0);
-
-  if (cmd == nullptr || cmd_type (cmd) != show_cmd)
-    error (_("First argument of %s must be a "
-	     "valid setting of the 'show' command."), fnname);
+  /* Not all languages null-terminate their strings, by moving the string
+     content into a std::string we ensure that a null-terminator is added.
+     For languages that do add a null-terminator the std::string might end
+     up with two null characters at the end, but that's harmless.  */
+  const std::string setting ((const char *) argv[0]->contents ().data (),
+			     type0->length ());
+  const char *a0 = setting.c_str ();
+  cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0);
+
+  if (cmd == nullptr || cmd->type != show_cmd)
+    {
+      gdb_assert (showlist->prefix != nullptr);
+      std::vector<std::string> components
+	= showlist->prefix->command_components ();
+      std::string full_name = components[0];
+      for (int i = 1; i < components.size (); ++i)
+	full_name += " " + components[i];
+      error (_("First argument of %s must be a valid setting of the "
+	       "'%s' command."), fnname, full_name.c_str ());
+    }
 
   return cmd;
 }
@@ -1944,31 +2307,49 @@ setting_cmd (const char *fnname, struct
 /* Builds a value from the show CMD.  */
 
 static struct value *
-value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
+value_from_setting (const setting &var, struct gdbarch *gdbarch)
 {
-  switch (cmd->var_type)
+  switch (var.type ())
     {
+    case var_uinteger:
     case var_integer:
-      if (*(int *) cmd->var == INT_MAX)
-	return value_from_longest (builtin_type (gdbarch)->builtin_int,
-				   0);
-      else
-	return value_from_longest (builtin_type (gdbarch)->builtin_int,
-				   *(int *) cmd->var);
-    case var_zinteger:
-      return value_from_longest (builtin_type (gdbarch)->builtin_int,
-				 *(int *) cmd->var);
+    case var_pinteger:
+      {
+	LONGEST value
+	  = (var.type () == var_uinteger
+	     ? static_cast<LONGEST> (var.get<unsigned int> ())
+	     : static_cast<LONGEST> (var.get<int> ()));
+
+	if (var.extra_literals () != nullptr)
+	  for (const literal_def *l = var.extra_literals ();
+	       l->literal != nullptr;
+	       l++)
+	    if (value == l->use)
+	      {
+		if (l->val.has_value ())
+		  value = *l->val;
+		else
+		  return value::allocate (builtin_type (gdbarch)->builtin_void);
+		break;
+	      }
+
+	if (var.type () == var_uinteger)
+	  return
+	    value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int,
+				 static_cast<unsigned int> (value));
+	else
+	  return
+	    value_from_longest (builtin_type (gdbarch)->builtin_int,
+				static_cast<int> (value));
+      }
     case var_boolean:
       return value_from_longest (builtin_type (gdbarch)->builtin_int,
-				 *(bool *) cmd->var ? 1 : 0);
-    case var_zuinteger_unlimited:
-      return value_from_longest (builtin_type (gdbarch)->builtin_int,
-				 *(int *) cmd->var);
+				 var.get<bool> () ? 1 : 0);
     case var_auto_boolean:
       {
 	int val;
 
-	switch (*(enum auto_boolean*) cmd->var)
+	switch (var.get<enum auto_boolean> ())
 	  {
 	  case AUTO_BOOLEAN_TRUE:
 	    val = 1;
@@ -1985,28 +2366,28 @@ value_from_setting (const cmd_list_eleme
 	return value_from_longest (builtin_type (gdbarch)->builtin_int,
 				   val);
       }
-    case var_uinteger:
-      if (*(unsigned int *) cmd->var == UINT_MAX)
-	return value_from_ulongest
-	  (builtin_type (gdbarch)->builtin_unsigned_int, 0);
-      else
-	return value_from_ulongest
-	  (builtin_type (gdbarch)->builtin_unsigned_int,
-	   *(unsigned int *) cmd->var);
-    case var_zuinteger:
-      return value_from_ulongest (builtin_type (gdbarch)->builtin_unsigned_int,
-				  *(unsigned int *) cmd->var);
     case var_string:
     case var_string_noescape:
     case var_optional_filename:
     case var_filename:
     case var_enum:
-      if (*(char **) cmd->var)
-	return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
-			      builtin_type (gdbarch)->builtin_char);
-      else
-	return value_cstring ("", 1,
-			      builtin_type (gdbarch)->builtin_char);
+      {
+	const char *value;
+	size_t len;
+	if (var.type () == var_enum)
+	  {
+	    value = var.get<const char *> ();
+	    len = strlen (value);
+	  }
+	else
+	  {
+	    const std::string &st = var.get<std::string> ();
+	    value = st.c_str ();
+	    len = st.length ();
+	  }
+
+	return current_language->value_string (gdbarch, value, len);
+      }
     default:
       gdb_assert_not_reached ("bad var_type");
     }
@@ -2019,9 +2400,12 @@ gdb_setting_internal_fn (struct gdbarch
 			 const struct language_defn *language,
 			 void *cookie, int argc, struct value **argv)
 {
-  return value_from_setting (setting_cmd ("$_gdb_setting", showlist,
-					  argc, argv),
-			     gdbarch);
+  cmd_list_element *show_cmd
+    = setting_cmd ("$_gdb_setting", showlist, argc, argv);
+
+  gdb_assert (show_cmd->var.has_value ());
+
+  return value_from_setting (*show_cmd->var, gdbarch);
 }
 
 /* Implementation of the convenience function $_gdb_maint_setting.  */
@@ -2031,31 +2415,31 @@ gdb_maint_setting_internal_fn (struct gd
 			       const struct language_defn *language,
 			       void *cookie, int argc, struct value **argv)
 {
-  return value_from_setting (setting_cmd ("$_gdb_maint_setting",
-					  maintenance_show_cmdlist,
-					  argc, argv),
-			     gdbarch);
+  cmd_list_element *show_cmd
+    = setting_cmd ("$_gdb_maint_setting", maintenance_show_cmdlist, argc, argv);
+
+  gdb_assert (show_cmd->var.has_value ());
+
+  return value_from_setting (*show_cmd->var, gdbarch);
 }
 
 /* Builds a string value from the show CMD.  */
 
 static struct value *
-str_value_from_setting (const cmd_list_element *cmd, struct gdbarch *gdbarch)
+str_value_from_setting (const setting &var, struct gdbarch *gdbarch)
 {
-  switch (cmd->var_type)
+  switch (var.type ())
     {
+    case var_uinteger:
     case var_integer:
-    case var_zinteger:
+    case var_pinteger:
     case var_boolean:
-    case var_zuinteger_unlimited:
     case var_auto_boolean:
-    case var_uinteger:
-    case var_zuinteger:
       {
-	std::string cmd_val = get_setshow_command_value_string (cmd);
+	std::string cmd_val = get_setshow_command_value_string (var);
 
-	return value_cstring (cmd_val.c_str (), cmd_val.size (),
-			      builtin_type (gdbarch)->builtin_char);
+	return current_language->value_string (gdbarch, cmd_val.c_str (),
+					       cmd_val.size ());
       }
 
     case var_string:
@@ -2065,15 +2449,25 @@ str_value_from_setting (const cmd_list_e
     case var_enum:
       /* For these cases, we do not use get_setshow_command_value_string,
 	 as this function handle some characters specially, e.g. by
-	 escaping quotes.  So, we directly use the cmd->var string value,
-	 similarly to the value_from_setting code for these cases.  */
-      if (*(char **) cmd->var)
-	return value_cstring (*(char **) cmd->var, strlen (*(char **) cmd->var),
-			      builtin_type (gdbarch)->builtin_char);
-      else
-	return value_cstring ("", 1,
-			      builtin_type (gdbarch)->builtin_char);
+	 escaping quotevar.  So, we directly use the var string value,
+	 similarly to the value_from_setting code for these casevar.  */
+      {
+	const char *value;
+	size_t len;
+	if (var.type () == var_enum)
+	  {
+	    value = var.get<const char *> ();
+	    len = strlen (value);
+	  }
+	else
+	  {
+	    const std::string &st = var.get<std::string> ();
+	    value = st.c_str ();
+	    len = st.length ();
+	  }
 
+	return current_language->value_string (gdbarch, value, len);
+      }
     default:
       gdb_assert_not_reached ("bad var_type");
     }
@@ -2086,9 +2480,12 @@ gdb_setting_str_internal_fn (struct gdba
 			     const struct language_defn *language,
 			     void *cookie, int argc, struct value **argv)
 {
-  return str_value_from_setting (setting_cmd ("$_gdb_setting_str",
-					      showlist, argc, argv),
-				 gdbarch);
+  cmd_list_element *show_cmd
+    = setting_cmd ("$_gdb_setting_str", showlist, argc, argv);
+
+  gdb_assert (show_cmd->var.has_value ());
+
+  return str_value_from_setting (*show_cmd->var, gdbarch);
 }
 
 
@@ -2099,14 +2496,75 @@ gdb_maint_setting_str_internal_fn (struc
 				   const struct language_defn *language,
 				   void *cookie, int argc, struct value **argv)
 {
-  return str_value_from_setting (setting_cmd ("$_gdb_maint_setting_str",
-					      maintenance_show_cmdlist,
-					      argc, argv),
-				 gdbarch);
+  cmd_list_element *show_cmd
+    = setting_cmd ("$_gdb_maint_setting_str", maintenance_show_cmdlist, argc,
+		   argv);
+
+  gdb_assert (show_cmd->var.has_value ());
+
+  return str_value_from_setting (*show_cmd->var, gdbarch);
 }
 
+/* Implementation of the convenience function $_shell.  */
+
+static struct value *
+shell_internal_fn (struct gdbarch *gdbarch,
+		   const struct language_defn *language,
+		   void *cookie, int argc, struct value **argv)
+{
+  if (argc != 1)
+    error (_("You must provide one argument for $_shell."));
+
+  value *val = argv[0];
+  struct type *type = check_typedef (val->type ());
+
+  if (!language->is_string_type_p (type))
+    error (_("Argument must be a string."));
+
+  value_print_options opts;
+  get_no_prettyformat_print_options (&opts);
+
+  string_file stream;
+  value_print (val, &stream, &opts);
+
+  /* We should always have two quote chars, which we'll strip.  */
+  gdb_assert (stream.size () >= 2);
+
+  /* Now strip them.  We don't need the original string, so it's
+     cheaper to do it in place, avoiding a string allocation.  */
+  std::string str = stream.release ();
+  str[str.size () - 1] = 0;
+  const char *command = str.c_str () + 1;
+
+  int exit_status = run_under_shell (command, 0);
+
+  struct type *int_type = builtin_type (gdbarch)->builtin_int;
+
+  /* Keep the logic here in sync with
+     exit_status_set_internal_vars.  */
+
+  if (WIFEXITED (exit_status))
+    return value_from_longest (int_type, WEXITSTATUS (exit_status));
+#ifdef __MINGW32__
+  else if (WIFSIGNALED (exit_status) && WTERMSIG (exit_status) == -1)
+    {
+      /* See exit_status_set_internal_vars.  */
+      return value_from_longest (int_type, exit_status);
+    }
+#endif
+  else if (WIFSIGNALED (exit_status))
+    {
+      /* (0x80 | SIGNO) is what most (all?) POSIX-like shells set as
+	 exit code on fatal signal termination.  */
+      return value_from_longest (int_type, 0x80 | WTERMSIG (exit_status));
+    }
+  else
+    return value::allocate_optimized_out (int_type);
+}
+
+void _initialize_cli_cmds ();
 void
-_initialize_cli_cmds (void)
+_initialize_cli_cmds ()
 {
   struct cmd_list_element *c;
 
@@ -2121,14 +2579,13 @@ well documented as user commands."),
 	   &cmdlist);
   add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist);
   add_cmd ("aliases", class_alias,
-	   _("Aliases of other commands."), &cmdlist);
+	   _("User-defined aliases of other commands."), &cmdlist);
   add_cmd ("user-defined", class_user, _("\
 User-defined commands.\n\
 The commands in this class are those defined by the user.\n\
 Use the \"define\" command to define a command."), &cmdlist);
   add_cmd ("support", class_support, _("Support facilities."), &cmdlist);
-  if (!dbx_commands)
-    add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
+  add_cmd ("status", class_info, _("Status inquiries."), &cmdlist);
   add_cmd ("files", class_files, _("Specifying and examining files."),
 	   &cmdlist);
   add_cmd ("breakpoints", class_breakpoint,
@@ -2143,6 +2600,12 @@ Variable lookups are done with respect t
 When the program being debugged stops, gdb selects the innermost frame.\n\
 The commands below can be used to select other frames by number or address."),
 	   &cmdlist);
+#ifdef TUI
+  add_cmd ("text-user-interface", class_tui,
+	   _("TUI is the GDB text based interface.\n\
+In TUI mode, GDB can display several text windows showing\n\
+the source file, the processor registers, the program disassembly, ..."), &cmdlist);
+#endif
   add_cmd ("running", class_run, _("Running the program."), &cmdlist);
 
   /* Define general commands.  */
@@ -2181,16 +2644,19 @@ strict == evaluate script according to f
 			show_script_ext_mode,
 			&setlist, &showlist);
 
-  add_com ("quit", class_support, quit_command, _("\
+  cmd_list_element *quit_cmd
+    = add_com ("quit", class_support, quit_command, _("\
 Exit gdb.\n\
-Usage: quit [EXPR]\n\
+Usage: quit [EXPR] or exit [EXPR]\n\
 The optional expression EXPR, if present, is evaluated and the result\n\
 used as GDB's exit code.  The default is zero."));
-  c = add_com ("help", class_support, help_command,
+  cmd_list_element *help_cmd
+    = add_com ("help", class_support, help_command,
 	       _("Print list of commands."));
-  set_cmd_completer (c, command_completer);
-  add_com_alias ("q", "quit", class_support, 1);
-  add_com_alias ("h", "help", class_support, 1);
+  set_cmd_completer (help_cmd, command_completer);
+  add_com_alias ("q", quit_cmd, class_support, 1);
+  add_com_alias ("exit", quit_cmd, class_support, 1);
+  add_com_alias ("h", help_cmd, class_support, 1);
 
   add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
 Set verbosity."), _("\
@@ -2199,12 +2665,11 @@ Show verbosity."), NULL,
 			   show_info_verbose,
 			   &setlist, &showlist);
 
-  add_prefix_cmd ("history", class_support, set_history,
-		  _("Generic command for setting command history parameters."),
-		  &sethistlist, "set history ", 0, &setlist);
-  add_prefix_cmd ("history", class_support, show_history,
-		  _("Generic command for showing command history parameters."),
-		  &showhistlist, "show history ", 0, &showlist);
+  add_setshow_prefix_cmd
+    ("history", class_support,
+     _("Generic command for setting command history parameters."),
+     _("Generic command for showing command history parameters."),
+     &sethistlist, &showhistlist, &setlist, &showlist);
 
   add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
 Set history expansion on command input."), _("\
@@ -2214,22 +2679,24 @@ Without an argument, history expansion i
 			   show_history_expansion_p,
 			   &sethistlist, &showhistlist);
 
-  add_prefix_cmd ("info", class_info, info_command, _("\
+  cmd_list_element *info_cmd
+    = add_prefix_cmd ("info", class_info, info_command, _("\
 Generic command for showing things about the program being debugged."),
-		  &infolist, "info ", 0, &cmdlist);
-  add_com_alias ("i", "info", class_info, 1);
-  add_com_alias ("inf", "info", class_info, 1);
+		      &infolist, 0, &cmdlist);
+  add_com_alias ("i", info_cmd, class_info, 1);
+  add_com_alias ("inf", info_cmd, class_info, 1);
 
   add_com ("complete", class_obscure, complete_command,
 	   _("List the completions for the rest of the line as a command."));
 
-  add_prefix_cmd ("show", class_info, show_command, _("\
+  c = add_show_prefix_cmd ("show", class_info, _("\
 Generic command for showing things about the debugger."),
-		  &showlist, "show ", 0, &cmdlist);
+			   &showlist, 0, &cmdlist);
   /* Another way to get at the same thing.  */
-  add_info ("set", show_command, _("Show all GDB settings."));
+  add_alias_cmd ("set", c, class_info, 0, &infolist);
 
-  c = add_com ("with", class_vars, with_command, _("\
+  cmd_list_element *with_cmd
+    = add_com ("with", class_vars, with_command, _("\
 Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\
 Usage: with SETTING [VALUE] [-- COMMAND]\n\
 Usage: w SETTING [VALUE] [-- COMMAND]\n\
@@ -2243,8 +2710,8 @@ E.g.:\n\
 You can change multiple settings using nested with, and use\n\
 abbreviations for commands and/or values.  E.g.:\n\
   w la p -- w p el u -- p obj"));
-  set_cmd_completer_handle_brkchars (c, with_command_completer);
-  add_com_alias ("w", "with", class_vars, 1);
+  set_cmd_completer_handle_brkchars (with_cmd, with_command_completer);
+  add_com_alias ("w", with_cmd, class_vars, 1);
 
   add_internal_function ("_gdb_setting_str", _("\
 $_gdb_setting_str - returns the value of a GDB setting as a string.\n\
@@ -2284,6 +2751,19 @@ Some integer settings accept an unlimite
 as 0 or -1 depending on the setting."),
 			 gdb_maint_setting_internal_fn, NULL);
 
+  add_internal_function ("_shell", _("\
+$_shell - execute a shell command and return the result.\n\
+\n\
+    Usage: $_shell (COMMAND)\n\
+\n\
+    Arguments:\n\
+\n\
+      COMMAND: The command to execute.  Must be a string.\n\
+\n\
+    Returns:\n\
+      The command's exit code: zero on success, non-zero otherwise."),
+			 shell_internal_fn, NULL);
+
   add_cmd ("commands", no_set_class, show_commands, _("\
 Show the history of commands you typed.\n\
 You can supply a command number to start with, or a `+' to start after\n\
@@ -2296,39 +2776,19 @@ the previous command number shown."),
   add_cmd ("configuration", no_set_class, show_configuration,
 	   _("Show how GDB was configured at build time."), &showlist);
 
-  add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
-Set debugging of remote protocol."), _("\
-Show debugging of remote protocol."), _("\
-When enabled, each packet sent or received with the remote target\n\
-is displayed."),
-			    NULL,
-			    show_remote_debug,
-			    &setdebuglist, &showdebuglist);
-
-  add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
-				       &remote_timeout, _("\
-Set timeout limit to wait for target to respond."), _("\
-Show timeout limit to wait for target to respond."), _("\
-This value is used to set the time limit for gdb to wait for a response\n\
-from the target."),
-				       NULL,
-				       show_remote_timeout,
-				       &setlist, &showlist);
-
-  add_prefix_cmd ("debug", no_class, set_debug,
-		  _("Generic command for setting gdb debugging flags."),
-		  &setdebuglist, "set debug ", 0, &setlist);
-
-  add_prefix_cmd ("debug", no_class, show_debug,
-		  _("Generic command for showing gdb debugging flags."),
-		  &showdebuglist, "show debug ", 0, &showlist);
+  add_setshow_prefix_cmd ("debug", no_class,
+			  _("Generic command for setting gdb debugging flags."),
+			  _("Generic command for showing gdb debugging flags."),
+			  &setdebuglist, &showdebuglist,
+			  &setlist, &showlist);
 
-  c = add_com ("shell", class_support, shell_command, _("\
+  cmd_list_element *shell_cmd
+    = add_com ("shell", class_support, shell_command, _("\
 Execute the rest of the line as a shell command.\n\
 With no arguments, run an inferior shell."));
-  set_cmd_completer (c, filename_completer);
+  set_cmd_completer (shell_cmd, filename_completer);
 
-  add_com_alias ("!", "shell", class_support, 0);
+  add_com_alias ("!", shell_cmd, class_support, 0);
 
   c = add_com ("edit", class_files, edit_command, _("\
 Edit specified file or function.\n\
@@ -2342,7 +2802,8 @@ Uses EDITOR environment variable content
 
   c->completer = location_completer;
 
-  c = add_com ("pipe", class_support, pipe_command, _("\
+  cmd_list_element *pipe_cmd
+    = add_com ("pipe", class_support, pipe_command, _("\
 Send the output of a gdb command to a shell command.\n\
 Usage: | [COMMAND] | SHELL_COMMAND\n\
 Usage: | -d DELIM COMMAND DELIM SHELL_COMMAND\n\
@@ -2357,13 +2818,16 @@ case COMMAND contains a | character.\n\
 \n\
 With no COMMAND, repeat the last executed command\n\
 and send its output to SHELL_COMMAND."));
-  set_cmd_completer_handle_brkchars (c, pipe_command_completer);
-  add_com_alias ("|", "pipe", class_support, 0);
+  set_cmd_completer_handle_brkchars (pipe_cmd, pipe_command_completer);
+  add_com_alias ("|", pipe_cmd, class_support, 0);
 
-  add_com ("list", class_files, list_command, _("\
+  cmd_list_element *list_cmd
+    = add_com ("list", class_files, list_command, _("\
 List specified function or line.\n\
 With no argument, lists ten more lines after or around previous listing.\n\
+\"list +\" lists the ten lines following a previous ten-line listing.\n\
 \"list -\" lists the ten lines before a previous ten-line listing.\n\
+\"list .\" lists ten lines around the point of execution in the current frame.\n\
 One argument specifies a line, and ten lines are listed around that line.\n\
 Two arguments with comma between specify starting and ending lines to list.\n\
 Lines can be specified in these ways:\n\
@@ -2379,15 +2843,17 @@ By default, when a single location is gi
 This can be changed using \"set listsize\", and the current value\n\
 can be shown using \"show listsize\"."));
 
-  add_com_alias ("l", "list", class_files, 1);
-
-  if (dbx_commands)
-    add_com_alias ("file", "list", class_files, 1);
+  add_com_alias ("l", list_cmd, class_files, 1);
 
   c = add_com ("disassemble", class_vars, disassemble_command, _("\
 Disassemble a specified section of memory.\n\
+Usage: disassemble[/m|/r|/s] START [, END]\n\
 Default is the function surrounding the pc of the selected frame.\n\
 \n\
+With a /s modifier, source lines are included (if available).\n\
+In this mode, the output is displayed in PC address order, and\n\
+file names and contents for all relevant source files are displayed.\n\
+\n\
 With a /m modifier, source lines are included (if available).\n\
 This view is \"source centric\": the output is in source line order,\n\
 regardless of any optimization that is present.  Only the main source file\n\
@@ -2395,11 +2861,6 @@ is displayed, not those of, e.g., any in
 This modifier hasn't proved useful in practice and is deprecated\n\
 in favor of /s.\n\
 \n\
-With a /s modifier, source lines are included (if available).\n\
-This differs from /m in two important respects:\n\
-- the output is still in pc address order, and\n\
-- file names and contents for all relevant source files are displayed.\n\
-\n\
 With a /r modifier, raw instructions in hex are included.\n\
 \n\
 With a single argument, the function surrounding that address is dumped.\n\
@@ -2410,15 +2871,16 @@ Note that the address is interpreted as
 like in the \"break\" command.\n\
 So, for example, if you want to disassemble function bar in file foo.c\n\
 you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
-  set_cmd_completer (c, location_completer);
+  set_cmd_completer_handle_brkchars (c, disassemble_command_completer);
 
   c = add_com ("make", class_support, make_command, _("\
 Run the ``make'' program using the rest of the line as arguments."));
   set_cmd_completer (c, filename_completer);
-  add_cmd ("user", no_class, show_user, _("\
+  c = add_cmd ("user", no_class, show_user, _("\
 Show definitions of non-python/scheme user defined commands.\n\
 Argument is the name of the user defined command.\n\
 With no argument, show definitions of all user defined commands."), &showlist);
+  set_cmd_completer (c, show_user_completer);
   add_com ("apropos", class_support, apropos_command, _("\
 Search for commands matching a REGEXP.\n\
 Usage: apropos [-v] REGEXP\n\
@@ -2441,19 +2903,49 @@ When 'on', each command is displayed as
 			   NULL,
 			   &setlist, &showlist);
 
-  c = add_com ("alias", class_support, alias_command, _("\
+  const auto alias_opts = make_alias_options_def_group (nullptr);
+
+  static std::string alias_help
+    = gdb::option::build_help (_("\
 Define a new command that is an alias of an existing command.\n\
-Usage: alias [-a] [--] ALIAS = COMMAND\n\
+Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\
 ALIAS is the name of the alias command to create.\n\
 COMMAND is the command being aliased to.\n\
-If \"-a\" is specified, the command is an abbreviation,\n\
-and will not appear in help command list output.\n\
+\n\
+Options:\n\
+%OPTIONS%\n\
+\n\
+GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\
+of arguments explicitly provided when using ALIAS.\n\
+Use \"help aliases\" to list all user defined aliases and their default args.\n\
 \n\
 Examples:\n\
 Make \"spe\" an alias of \"set print elements\":\n\
   alias spe = set print elements\n\
 Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
-  alias -a set print elms = set print elements"));
+  alias -a set print elms = set print elements\n\
+Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\
+  alias btf = backtrace -full -past-entry -past-main\n\
+Make \"wLapPeu\" an alias of 2 nested \"with\":\n\
+  alias wLapPeu = with language pascal -- with print elements unlimited --"),
+			       alias_opts);
+
+  c = add_com ("alias", class_support, alias_command,
+	       alias_help.c_str ());
+
+  set_cmd_completer_handle_brkchars (c, alias_command_completer);
+
+  add_setshow_boolean_cmd ("suppress-cli-notifications", no_class,
+			   &user_wants_cli_suppress_notification,
+			   _("\
+Set whether printing notifications on CLI is suppressed."), _("\
+Show whether printing notifications on CLI is suppressed."), _("\
+When on, printing notifications (such as inferior/thread switch)\n\
+on CLI is suppressed."),
+			   set_suppress_cli_notifications,
+			   show_suppress_cli_notifications,
+			   &setlist,
+			   &showlist);
 
   const char *source_help_text = xstrprintf (_("\
 Read commands from a file named FILE.\n\
@@ -2464,7 +2956,7 @@ Usage: source [-s] [-v] FILE\n\
 -v: each command in FILE is echoed as it is executed.\n\
 \n\
 Note that the file \"%s\" is read automatically in this way\n\
-when GDB is started."), GDBINIT);
+when GDB is started."), GDBINIT).release ();
   c = add_cmd ("source", class_support, source_command,
 	       source_help_text, &cmdlist);
   set_cmd_completer (c, filename_completer);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-cmds.h ./gdb/cli/cli-cmds.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-cmds.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-cmds.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB CLI command implementation library.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@
 #define CLI_CLI_CMDS_H
 
 #include "gdbsupport/filestuff.h"
-#include "gdbsupport/gdb_optional.h"
+#include <optional>
 #include "completer.h"
 
 /* Chain containing all defined commands.  */
@@ -89,10 +89,42 @@ extern struct cmd_list_element *maintena
 
 extern struct cmd_list_element *maintenanceprintlist;
 
+/* Chain containing all defined "maintenance flush" subcommands.  */
+
+extern struct cmd_list_element *maintenanceflushlist;
+
+/* Chain containing all defined "maintenance check" subcommands.  */
+
+extern struct cmd_list_element *maintenancechecklist;
+
+/* Chain containing all defined "maintenance set" subcommands.  */
+
+extern struct cmd_list_element *maintenance_set_cmdlist;
+
+/* Chain containing all defined "maintenance show" subcommands.  */
+
+extern struct cmd_list_element *maintenance_show_cmdlist;
+
 extern struct cmd_list_element *setprintlist;
 
 extern struct cmd_list_element *showprintlist;
 
+/* Chain containing all defined "set print raw" subcommands.  */
+
+extern struct cmd_list_element *setprintrawlist;
+
+/* Chain containing all defined "show print raw" subcommands.  */
+
+extern struct cmd_list_element *showprintrawlist;
+
+/* Chain containing all defined "set print type" subcommands.  */
+
+extern struct cmd_list_element *setprinttypelist;
+
+/* Chain containing all defined "show print type" subcommands.  */
+
+extern struct cmd_list_element *showprinttypelist;
+
 extern struct cmd_list_element *setdebuglist;
 
 extern struct cmd_list_element *showdebuglist;
@@ -101,14 +133,24 @@ extern struct cmd_list_element *setcheck
 
 extern struct cmd_list_element *showchecklist;
 
+/* Chain containing all defined "save" subcommands.  */
+
+extern struct cmd_list_element *save_cmdlist;
+
+/* Chain containing all defined "set source" subcommands.  */
+
+extern struct cmd_list_element *setsourcelist;
+
+/* Chain containing all defined "show source" subcommands.  */
+
+extern struct cmd_list_element *showsourcelist;
+
 /* Limit the call depth of user-defined commands */
 
 extern unsigned int max_user_call_depth;
 
 /* Exported to gdb/top.c */
 
-void init_cmd_lists (void);
-
 int is_complete_command (struct cmd_list_element *cmd);
 
 /* Exported to gdb/main.c */
@@ -137,7 +179,7 @@ struct open_script
   }
 };
 
-extern gdb::optional<open_script>
+extern std::optional<open_script>
     find_and_open_script (const char *file, int search_path);
 
 /* Command tracing state.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-decode.c ./gdb/cli/cli-decode.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-decode.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-decode.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Handle lists of commands, their decoding and documentation, for GDB.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -18,24 +18,22 @@
 #include "defs.h"
 #include "symtab.h"
 #include <ctype.h>
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
 #include "completer.h"
 #include "ui-out.h"
 #include "cli/cli-cmds.h"
 #include "cli/cli-decode.h"
 #include "cli/cli-style.h"
-#include "gdbsupport/gdb_optional.h"
+#include <optional>
 
 /* Prototypes for local functions.  */
 
 static void undef_cmd_error (const char *, const char *);
 
-static struct cmd_list_element *delete_cmd (const char *name,
-					    struct cmd_list_element **list,
-					    struct cmd_list_element **prehook,
-					    struct cmd_list_element **prehookee,
-					    struct cmd_list_element **posthook,
-					    struct cmd_list_element **posthookee);
+static cmd_list_element::aliases_list_type delete_cmd
+  (const char *name, cmd_list_element **list, cmd_list_element **prehook,
+   cmd_list_element **prehookee, cmd_list_element **posthook,
+   cmd_list_element **posthookee);
 
 static struct cmd_list_element *find_cmd (const char *command,
 					  int len,
@@ -43,14 +41,25 @@ static struct cmd_list_element *find_cmd
 					  int ignore_help_classes,
 					  int *nfound);
 
+static void help_cmd_list (struct cmd_list_element *list,
+			   enum command_class theclass,
+			   bool recurse,
+			   struct ui_file *stream);
+
 static void help_all (struct ui_file *stream);
 
-/* Look up a command whose 'prefixlist' is KEY.  Return the command if found,
-   otherwise return NULL.  */
+static int lookup_cmd_composition_1 (const char *text,
+				     struct cmd_list_element **alias,
+				     struct cmd_list_element **prefix_cmd,
+				     struct cmd_list_element **cmd,
+				     struct cmd_list_element *cur_list);
+
+/* Look up a command whose 'subcommands' field is SUBCOMMANDS.  Return the
+   command if found, otherwise return NULL.  */
 
 static struct cmd_list_element *
-lookup_cmd_for_prefixlist (struct cmd_list_element **key,
-			   struct cmd_list_element *list)
+lookup_cmd_with_subcommands (cmd_list_element **subcommands,
+			     cmd_list_element *list)
 {
   struct cmd_list_element *p = NULL;
 
@@ -58,12 +67,17 @@ lookup_cmd_for_prefixlist (struct cmd_li
     {
       struct cmd_list_element *q;
 
-      if (p->prefixlist == NULL)
+      if (!p->is_prefix ())
 	continue;
-      else if (p->prefixlist == key)
-	return p;
 
-      q = lookup_cmd_for_prefixlist (key, *(p->prefixlist));
+      else if (p->subcommands == subcommands)
+	{
+	  /* If we found an alias, we must return the aliased
+	     command.  */
+	  return p->is_alias () ? p->alias_target : p;
+	}
+
+      q = lookup_cmd_with_subcommands (subcommands, *(p->subcommands));
       if (q != NULL)
 	return q;
     }
@@ -72,109 +86,82 @@ lookup_cmd_for_prefixlist (struct cmd_li
 }
 
 static void
-set_cmd_prefix (struct cmd_list_element *c, struct cmd_list_element **list)
-{
-  struct cmd_list_element *p;
-
-  /* Check to see if *LIST contains any element other than C.  */
-  for (p = *list; p != NULL; p = p->next)
-    if (p != c)
-      break;
-
-  if (p == NULL)
-    {
-      /* *SET_LIST only contains SET.  */
-      p = lookup_cmd_for_prefixlist (list, setlist);
-
-      c->prefix = p ? (p->cmd_pointer ? p->cmd_pointer : p) : p;
-    }
-  else
-    c->prefix = p->prefix;
-}
-
-static void
-print_help_for_command (struct cmd_list_element *c, const char *prefix,
-			int recurse, struct ui_file *stream);
-
-
-/* Set the callback function for the specified command.  For each both
-   the commands callback and func() are set.  The latter set to a
-   bounce function (unless cfunc / sfunc is NULL that is).  */
+print_help_for_command (const cmd_list_element &c,
+			bool recurse, struct ui_file *stream);
 
 static void
-do_const_cfunc (struct cmd_list_element *c, const char *args, int from_tty)
+do_simple_func (const char *args, int from_tty, cmd_list_element *c)
 {
-  c->function.const_cfunc (args, from_tty);
+  c->function.simple_func (args, from_tty);
 }
 
 static void
-set_cmd_cfunc (struct cmd_list_element *cmd, cmd_const_cfunc_ftype *cfunc)
+set_cmd_simple_func (struct cmd_list_element *cmd, cmd_simple_func_ftype *simple_func)
 {
-  if (cfunc == NULL)
+  if (simple_func == NULL)
     cmd->func = NULL;
   else
-    cmd->func = do_const_cfunc;
-  cmd->function.const_cfunc = cfunc;
+    cmd->func = do_simple_func;
+
+  cmd->function.simple_func = simple_func;
 }
 
-static void
-do_sfunc (struct cmd_list_element *c, const char *args, int from_tty)
+int
+cmd_simple_func_eq (struct cmd_list_element *cmd, cmd_simple_func_ftype *simple_func)
 {
-  c->function.sfunc (args, from_tty, c);
+  return (cmd->func == do_simple_func
+	  && cmd->function.simple_func == simple_func);
 }
 
 void
-set_cmd_sfunc (struct cmd_list_element *cmd, cmd_const_sfunc_ftype *sfunc)
+set_cmd_completer (struct cmd_list_element *cmd, completer_ftype *completer)
 {
-  if (sfunc == NULL)
-    cmd->func = NULL;
-  else
-    cmd->func = do_sfunc;
-  cmd->function.sfunc = sfunc;
+  cmd->completer = completer; /* Ok.  */
 }
 
-int
-cmd_cfunc_eq (struct cmd_list_element *cmd, cmd_const_cfunc_ftype *cfunc)
-{
-  return cmd->func == do_const_cfunc && cmd->function.const_cfunc == cfunc;
-}
+/* See definition in commands.h.  */
 
 void
-set_cmd_context (struct cmd_list_element *cmd, void *context)
+set_cmd_completer_handle_brkchars (struct cmd_list_element *cmd,
+				   completer_handle_brkchars_ftype *func)
 {
-  cmd->context = context;
+  cmd->completer_handle_brkchars = func;
 }
 
-void *
-get_cmd_context (struct cmd_list_element *cmd)
+std::string
+cmd_list_element::prefixname () const
 {
-  return cmd->context;
-}
+  if (!this->is_prefix ())
+    /* Not a prefix command.  */
+    return "";
 
-enum cmd_types
-cmd_type (struct cmd_list_element *cmd)
-{
-  return cmd->type;
-}
+  std::string prefixname;
+  if (this->prefix != nullptr)
+    prefixname = this->prefix->prefixname ();
 
-void
-set_cmd_completer (struct cmd_list_element *cmd, completer_ftype *completer)
-{
-  cmd->completer = completer; /* Ok.  */
+  prefixname += this->name;
+  prefixname += " ";
+
+  return prefixname;
 }
 
-/* See definition in commands.h.  */
+/* See cli/cli-decode.h.  */
 
-void
-set_cmd_completer_handle_brkchars (struct cmd_list_element *cmd,
-				   completer_handle_brkchars_ftype *func)
+std::vector<std::string>
+cmd_list_element::command_components () const
 {
-  cmd->completer_handle_brkchars = func;
+  std::vector<std::string> result;
+
+  if (this->prefix != nullptr)
+    result = this->prefix->command_components ();
+
+  result.emplace_back (this->name);
+  return result;
 }
 
 /* Add element named NAME.
    Space for NAME and DOC must be allocated by the caller.
-   CLASS is the top level category into which commands are broken down
+   THECLASS is the top level category into which commands are broken down
    for "help" purposes.
    FUN should be the function to execute the command;
    it will get a character string as argument, with leading
@@ -196,20 +183,24 @@ do_add_cmd (const char *name, enum comma
 {
   struct cmd_list_element *c = new struct cmd_list_element (name, theclass,
 							    doc);
-  struct cmd_list_element *p, *iter;
 
   /* Turn each alias of the old command into an alias of the new
      command.  */
   c->aliases = delete_cmd (name, list, &c->hook_pre, &c->hookee_pre,
 			   &c->hook_post, &c->hookee_post);
-  for (iter = c->aliases; iter; iter = iter->alias_chain)
-    iter->cmd_pointer = c;
+
+  for (cmd_list_element &alias : c->aliases)
+    alias.alias_target = c;
+
   if (c->hook_pre)
     c->hook_pre->hookee_pre = c;
+
   if (c->hookee_pre)
     c->hookee_pre->hook_pre = c;
+
   if (c->hook_post)
     c->hook_post->hookee_post = c;
+
   if (c->hookee_post)
     c->hookee_post->hook_post = c;
 
@@ -220,7 +211,7 @@ do_add_cmd (const char *name, enum comma
     }
   else
     {
-      p = *list;
+      cmd_list_element *p = *list;
       while (p->next && strcmp (p->next->name, name) <= 0)
 	{
 	  p = p->next;
@@ -229,6 +220,12 @@ do_add_cmd (const char *name, enum comma
       p->next = c;
     }
 
+  /* Search the prefix cmd of C, and assigns it to C->prefix.
+     See also add_prefix_cmd and update_prefix_field_of_prefixed_commands.  */
+  cmd_list_element *prefixcmd = lookup_cmd_with_subcommands (list, cmdlist);
+  c->prefix = prefixcmd;
+
+
   return c;
 }
 
@@ -238,17 +235,17 @@ add_cmd (const char *name, enum command_
 {
   cmd_list_element *result = do_add_cmd (name, theclass, doc, list);
   result->func = NULL;
-  result->function.const_cfunc = NULL;
+  result->function.simple_func = NULL;
   return result;
 }
 
 struct cmd_list_element *
 add_cmd (const char *name, enum command_class theclass,
-	 cmd_const_cfunc_ftype *fun,
+	 cmd_simple_func_ftype *fun,
 	 const char *doc, struct cmd_list_element **list)
 {
   cmd_list_element *result = do_add_cmd (name, theclass, doc, list);
-  set_cmd_cfunc (result, fun);
+  set_cmd_simple_func (result, fun);
   return result;
 }
 
@@ -256,9 +253,9 @@ add_cmd (const char *name, enum command_
 
 struct cmd_list_element *
 add_cmd_suppress_notification (const char *name, enum command_class theclass,
-			       cmd_const_cfunc_ftype *fun, const char *doc,
+			       cmd_simple_func_ftype *fun, const char *doc,
 			       struct cmd_list_element **list,
-			       int *suppress_notification)
+			       bool *suppress_notification)
 {
   struct cmd_list_element *element;
 
@@ -294,107 +291,173 @@ deprecate_cmd (struct cmd_list_element *
 }
 
 struct cmd_list_element *
-add_alias_cmd (const char *name, cmd_list_element *old,
+add_alias_cmd (const char *name, cmd_list_element *target,
 	       enum command_class theclass, int abbrev_flag,
 	       struct cmd_list_element **list)
 {
-  if (old == 0)
-    {
-      struct cmd_list_element *prehook, *prehookee, *posthook, *posthookee;
-      struct cmd_list_element *aliases = delete_cmd (name, list,
-						     &prehook, &prehookee,
-						     &posthook, &posthookee);
+  gdb_assert (target != nullptr);
 
-      /* If this happens, it means a programmer error somewhere.  */
-      gdb_assert (!aliases && !prehook && !prehookee
-		  && !posthook && ! posthookee);
-      return 0;
-    }
+  struct cmd_list_element *c = add_cmd (name, theclass, target->doc, list);
 
-  struct cmd_list_element *c = add_cmd (name, theclass, old->doc, list);
-
-  /* If OLD->DOC can be freed, we should make another copy.  */
-  if (old->doc_allocated)
+  /* If TARGET->DOC can be freed, we should make another copy.  */
+  if (target->doc_allocated)
     {
-      c->doc = xstrdup (old->doc);
+      c->doc = xstrdup (target->doc);
       c->doc_allocated = 1;
     }
   /* NOTE: Both FUNC and all the FUNCTIONs need to be copied.  */
-  c->func = old->func;
-  c->function = old->function;
-  c->prefixlist = old->prefixlist;
-  c->prefixname = old->prefixname;
-  c->allow_unknown = old->allow_unknown;
+  c->func = target->func;
+  c->function = target->function;
+  c->subcommands = target->subcommands;
+  c->allow_unknown = target->allow_unknown;
   c->abbrev_flag = abbrev_flag;
-  c->cmd_pointer = old;
-  c->alias_chain = old->aliases;
-  old->aliases = c;
+  c->alias_target = target;
+  target->aliases.push_front (*c);
 
-  set_cmd_prefix (c, list);
   return c;
 }
 
-struct cmd_list_element *
-add_alias_cmd (const char *name, const char *oldname,
-	       enum command_class theclass, int abbrev_flag,
-	       struct cmd_list_element **list)
-{
-  const char *tmp;
-  struct cmd_list_element *old;
+/* Update the prefix field of all sub-commands of the prefix command C.
+   We must do this when a prefix command is defined as the GDB init sequence
+   does not guarantee that a prefix command is created before its sub-commands.
+   For example, break-catch-sig.c initialization runs before breakpoint.c
+   initialization, but it is breakpoint.c that creates the "catch" command used
+   by the "catch signal" command created by break-catch-sig.c.  */
 
-  tmp = oldname;
-  old = lookup_cmd (&tmp, *list, "", 1, 1);
+static void
+update_prefix_field_of_prefixed_commands (struct cmd_list_element *c)
+{
+  for (cmd_list_element *p = *c->subcommands; p != NULL; p = p->next)
+    {
+      p->prefix = c;
 
-  return add_alias_cmd (name, old, theclass, abbrev_flag, list);
+      /* We must recursively update the prefix field to cover
+	 e.g.  'info auto-load libthread-db' where the creation
+	 order was:
+	   libthread-db
+	   auto-load
+	   info
+	 In such a case, when 'auto-load' was created by do_add_cmd,
+	 the 'libthread-db' prefix field could not be updated, as the
+	 'auto-load' command was not yet reachable by
+	    lookup_cmd_for_subcommands (list, cmdlist)
+	    that searches from the top level 'cmdlist'.  */
+      if (p->is_prefix ())
+	update_prefix_field_of_prefixed_commands (p);
+    }
 }
 
 
 /* Like add_cmd but adds an element for a command prefix: a name that
    should be followed by a subcommand to be looked up in another
-   command list.  PREFIXLIST should be the address of the variable
+   command list.  SUBCOMMANDS should be the address of the variable
    containing that list.  */
 
 struct cmd_list_element *
 add_prefix_cmd (const char *name, enum command_class theclass,
-		cmd_const_cfunc_ftype *fun,
-		const char *doc, struct cmd_list_element **prefixlist,
-		const char *prefixname, int allow_unknown,
-		struct cmd_list_element **list)
+		cmd_simple_func_ftype *fun,
+		const char *doc, struct cmd_list_element **subcommands,
+		int allow_unknown, struct cmd_list_element **list)
 {
   struct cmd_list_element *c = add_cmd (name, theclass, fun, doc, list);
-  struct cmd_list_element *p;
 
-  c->prefixlist = prefixlist;
-  c->prefixname = prefixname;
+  c->subcommands = subcommands;
   c->allow_unknown = allow_unknown;
 
-  if (list == &cmdlist)
-    c->prefix = NULL;
-  else
-    set_cmd_prefix (c, list);
-
-  /* Update the field 'prefix' of each cmd_list_element in *PREFIXLIST.  */
-  for (p = *prefixlist; p != NULL; p = p->next)
-    p->prefix = c;
+  /* Now that prefix command C is defined, we need to set the prefix field
+     of all prefixed commands that were defined before C itself was defined.  */
+  update_prefix_field_of_prefixed_commands (c);
 
   return c;
 }
 
+/* A helper function for add_basic_prefix_cmd.  This is a command
+   function that just forwards to help_list.  */
+
+static void
+do_prefix_cmd (const char *args, int from_tty, struct cmd_list_element *c)
+{
+  /* Look past all aliases.  */
+  while (c->is_alias ())
+    c = c->alias_target;
+
+  help_list (*c->subcommands, c->prefixname ().c_str (),
+	     all_commands, gdb_stdout);
+}
+
+/* See command.h.  */
+
+struct cmd_list_element *
+add_basic_prefix_cmd (const char *name, enum command_class theclass,
+		      const char *doc, struct cmd_list_element **subcommands,
+		      int allow_unknown, struct cmd_list_element **list)
+{
+  struct cmd_list_element *cmd = add_prefix_cmd (name, theclass, nullptr,
+						 doc, subcommands,
+						 allow_unknown, list);
+  cmd->func = do_prefix_cmd;
+  return cmd;
+}
+
+/* A helper function for add_show_prefix_cmd.  This is a command
+   function that just forwards to cmd_show_list.  */
+
+static void
+do_show_prefix_cmd (const char *args, int from_tty, struct cmd_list_element *c)
+{
+  cmd_show_list (*c->subcommands, from_tty);
+}
+
+/* See command.h.  */
+
+struct cmd_list_element *
+add_show_prefix_cmd (const char *name, enum command_class theclass,
+		     const char *doc, struct cmd_list_element **subcommands,
+		     int allow_unknown, struct cmd_list_element **list)
+{
+  struct cmd_list_element *cmd = add_prefix_cmd (name, theclass, nullptr,
+						 doc, subcommands,
+						 allow_unknown, list);
+  cmd->func = do_show_prefix_cmd;
+  return cmd;
+}
+
+/* See command.h.  */
+
+set_show_commands
+add_setshow_prefix_cmd (const char *name, command_class theclass,
+			const char *set_doc, const char *show_doc,
+			cmd_list_element **set_subcommands_list,
+			cmd_list_element **show_subcommands_list,
+			cmd_list_element **set_list,
+			cmd_list_element **show_list)
+{
+  set_show_commands cmds;
+
+  cmds.set = add_basic_prefix_cmd (name, theclass, set_doc,
+				   set_subcommands_list, 0,
+				   set_list);
+  cmds.show = add_show_prefix_cmd (name, theclass, show_doc,
+				   show_subcommands_list, 0,
+				   show_list);
+
+  return cmds;
+}
+
 /* Like ADD_PREFIX_CMD but sets the suppress_notification pointer on the
    new command list element.  */
 
 struct cmd_list_element *
 add_prefix_cmd_suppress_notification
-               (const char *name, enum command_class theclass,
-		cmd_const_cfunc_ftype *fun,
-		const char *doc, struct cmd_list_element **prefixlist,
-		const char *prefixname, int allow_unknown,
-		struct cmd_list_element **list,
-		int *suppress_notification)
+	       (const char *name, enum command_class theclass,
+		cmd_simple_func_ftype *fun,
+		const char *doc, struct cmd_list_element **subcommands,
+		int allow_unknown, struct cmd_list_element **list,
+		bool *suppress_notification)
 {
   struct cmd_list_element *element
-    = add_prefix_cmd (name, theclass, fun, doc, prefixlist,
-		      prefixname, allow_unknown, list);
+    = add_prefix_cmd (name, theclass, fun, doc, subcommands,
+		      allow_unknown, list);
   element->suppress_notification = suppress_notification;
   return element;
 }
@@ -403,39 +466,40 @@ add_prefix_cmd_suppress_notification
 
 struct cmd_list_element *
 add_abbrev_prefix_cmd (const char *name, enum command_class theclass,
-		       cmd_const_cfunc_ftype *fun, const char *doc,
-		       struct cmd_list_element **prefixlist,
-		       const char *prefixname,
+		       cmd_simple_func_ftype *fun, const char *doc,
+		       struct cmd_list_element **subcommands,
 		       int allow_unknown, struct cmd_list_element **list)
 {
   struct cmd_list_element *c = add_cmd (name, theclass, fun, doc, list);
 
-  c->prefixlist = prefixlist;
-  c->prefixname = prefixname;
+  c->subcommands = subcommands;
   c->allow_unknown = allow_unknown;
   c->abbrev_flag = 1;
   return c;
 }
 
-/* This is an empty "cfunc".  */
+/* This is an empty "simple func".  */
 void
 not_just_help_class_command (const char *args, int from_tty)
 {
 }
 
-/* This is an empty "sfunc".  */
+/* This is an empty cmd func.  */
 
 static void
-empty_sfunc (const char *args, int from_tty, struct cmd_list_element *c)
+empty_func (const char *args, int from_tty, cmd_list_element *c)
 {
 }
 
 /* Add element named NAME to command list LIST (the list for set/show
    or some sublist thereof).
    TYPE is set_cmd or show_cmd.
-   CLASS is as in add_cmd.
+   THECLASS is as in add_cmd.
    VAR_TYPE is the kind of thing we are setting.
-   VAR is address of the variable being controlled by this command.
+   EXTRA_LITERALS if non-NULL define extra literals to be accepted in lieu of
+   a number for integer variables.
+   ARGS is a pre-validated type-erased reference to the variable being
+   controlled by this command.
    DOC is the documentation string.  */
 
 static struct cmd_list_element *
@@ -443,7 +507,8 @@ add_set_or_show_cmd (const char *name,
 		     enum cmd_types type,
 		     enum command_class theclass,
 		     var_types var_type,
-		     void *var,
+		     const literal_def *extra_literals,
+		     const setting::erased_args &arg,
 		     const char *doc,
 		     struct cmd_list_element **list)
 {
@@ -451,40 +516,42 @@ add_set_or_show_cmd (const char *name,
 
   gdb_assert (type == set_cmd || type == show_cmd);
   c->type = type;
-  c->var_type = var_type;
-  c->var = var;
+  c->var.emplace (var_type, extra_literals, arg);
+
   /* This needs to be something besides NULL so that this isn't
      treated as a help class.  */
-  set_cmd_sfunc (c, empty_sfunc);
+  c->func = empty_func;
   return c;
 }
 
-/* Add element named NAME to both the command SET_LIST and SHOW_LIST.
-   CLASS is as in add_cmd.  VAR_TYPE is the kind of thing we are
-   setting.  VAR is address of the variable being controlled by this
-   command.  SET_FUNC and SHOW_FUNC are the callback functions (if
-   non-NULL).  SET_DOC, SHOW_DOC and HELP_DOC are the documentation
-   strings.  PRINT the format string to print the value.  SET_RESULT
-   and SHOW_RESULT, if not NULL, are set to the resulting command
-   structures.  */
-
-static void
-add_setshow_cmd_full (const char *name,
-		      enum command_class theclass,
-		      var_types var_type, void *var,
-		      const char *set_doc, const char *show_doc,
-		      const char *help_doc,
-		      cmd_const_sfunc_ftype *set_func,
-		      show_value_ftype *show_func,
-		      struct cmd_list_element **set_list,
-		      struct cmd_list_element **show_list,
-		      struct cmd_list_element **set_result,
-		      struct cmd_list_element **show_result)
+/* Add element named NAME to both command lists SET_LIST and SHOW_LIST.
+   THECLASS is as in add_cmd.  VAR_TYPE is the kind of thing we are
+   setting.  EXTRA_LITERALS if non-NULL define extra literals to be
+   accepted in lieu of a number for integer variables.  ARGS is a
+   pre-validated type-erased reference to the variable being controlled
+   by this command.  SET_FUNC and SHOW_FUNC are the callback functions
+   (if non-NULL).  SET_DOC, SHOW_DOC and HELP_DOC are the documentation
+   strings.
+
+   Return the newly created set and show commands.  */
+
+static set_show_commands
+add_setshow_cmd_full_erased (const char *name,
+			     enum command_class theclass,
+			     var_types var_type,
+			     const literal_def *extra_literals,
+			     const setting::erased_args &args,
+			     const char *set_doc, const char *show_doc,
+			     const char *help_doc,
+			     cmd_func_ftype *set_func,
+			     show_value_ftype *show_func,
+			     struct cmd_list_element **set_list,
+			     struct cmd_list_element **show_list)
 {
   struct cmd_list_element *set;
   struct cmd_list_element *show;
-  char *full_set_doc;
-  char *full_show_doc;
+  gdb::unique_xmalloc_ptr<char> full_set_doc;
+  gdb::unique_xmalloc_ptr<char> full_show_doc;
 
   if (help_doc != NULL)
     {
@@ -493,38 +560,131 @@ add_setshow_cmd_full (const char *name,
     }
   else
     {
-      full_set_doc = xstrdup (set_doc);
-      full_show_doc = xstrdup (show_doc);
+      full_set_doc = make_unique_xstrdup (set_doc);
+      full_show_doc = make_unique_xstrdup (show_doc);
     }
-  set = add_set_or_show_cmd (name, set_cmd, theclass, var_type, var,
-			     full_set_doc, set_list);
+  set = add_set_or_show_cmd (name, set_cmd, theclass, var_type,
+			     extra_literals, args,
+			     full_set_doc.release (), set_list);
   set->doc_allocated = 1;
 
   if (set_func != NULL)
-    set_cmd_sfunc (set, set_func);
-
-  set_cmd_prefix (set, set_list);
+    set->func = set_func;
 
-  show = add_set_or_show_cmd (name, show_cmd, theclass, var_type, var,
-			      full_show_doc, show_list);
+  show = add_set_or_show_cmd (name, show_cmd, theclass, var_type,
+			      extra_literals, args,
+			      full_show_doc.release (), show_list);
   show->doc_allocated = 1;
   show->show_value_func = show_func;
   /* Disable the default symbol completer.  Doesn't make much sense
      for the "show" command to complete on anything.  */
   set_cmd_completer (show, nullptr);
 
-  if (set_result != NULL)
-    *set_result = set;
-  if (show_result != NULL)
-    *show_result = show;
+  return {set, show};
+}
+
+/* Completes on integer commands that support extra literals.  */
+
+static void
+integer_literals_completer (struct cmd_list_element *c,
+			    completion_tracker &tracker,
+			    const char *text, const char *word)
+{
+  const literal_def *extra_literals = c->var->extra_literals ();
+
+  if (*text == '\0')
+    {
+      tracker.add_completion (make_unique_xstrdup ("NUMBER"));
+      for (const literal_def *l = extra_literals;
+	   l->literal != nullptr;
+	   l++)
+	tracker.add_completion (make_unique_xstrdup (l->literal));
+    }
+  else
+    for (const literal_def *l = extra_literals;
+	 l->literal != nullptr;
+	 l++)
+      if (startswith (l->literal, text))
+	tracker.add_completion (make_unique_xstrdup (l->literal));
+}
+
+/* Add element named NAME to both command lists SET_LIST and SHOW_LIST.
+   THECLASS is as in add_cmd.  VAR_TYPE is the kind of thing we are
+   setting.  VAR is address of the variable being controlled by this
+   command.  EXTRA_LITERALS if non-NULL define extra literals to be
+   accepted in lieu of a number for integer variables.  If nullptr is
+   given as VAR, then both SET_SETTING_FUNC and GET_SETTING_FUNC must
+   be provided.  SET_SETTING_FUNC and GET_SETTING_FUNC are callbacks
+   used to access and modify the underlying property, whatever its
+   storage is.  SET_FUNC and SHOW_FUNC are the callback functions
+   (if non-NULL).  SET_DOC, SHOW_DOC and HELP_DOC are the
+   documentation strings.
+
+   Return the newly created set and show commands.  */
+
+template<typename T>
+static set_show_commands
+add_setshow_cmd_full (const char *name,
+		      enum command_class theclass,
+		      var_types var_type, T *var,
+		      const literal_def *extra_literals,
+		      const char *set_doc, const char *show_doc,
+		      const char *help_doc,
+		      typename setting_func_types<T>::set set_setting_func,
+		      typename setting_func_types<T>::get get_setting_func,
+		      cmd_func_ftype *set_func,
+		      show_value_ftype *show_func,
+		      struct cmd_list_element **set_list,
+		      struct cmd_list_element **show_list)
+{
+  auto erased_args
+    = setting::erase_args (var_type, var,
+			   set_setting_func, get_setting_func);
+  auto cmds = add_setshow_cmd_full_erased (name,
+					   theclass,
+					   var_type, extra_literals,
+					   erased_args,
+					   set_doc, show_doc,
+					   help_doc,
+					   set_func,
+					   show_func,
+					   set_list,
+					   show_list);
+
+  if (extra_literals != nullptr)
+    set_cmd_completer (cmds.set, integer_literals_completer);
+
+  return cmds;
+}
+
+/* Same as above but omitting EXTRA_LITERALS.  */
+
+template<typename T>
+static set_show_commands
+add_setshow_cmd_full (const char *name,
+		      enum command_class theclass,
+		      var_types var_type, T *var,
+		      const char *set_doc, const char *show_doc,
+		      const char *help_doc,
+		      typename setting_func_types<T>::set set_setting_func,
+		      typename setting_func_types<T>::get get_setting_func,
+		      cmd_func_ftype *set_func,
+		      show_value_ftype *show_func,
+		      struct cmd_list_element **set_list,
+		      struct cmd_list_element **show_list)
+{
+  return add_setshow_cmd_full (name, theclass, var_type, var, nullptr,
+			       set_doc, show_doc, help_doc,
+			       set_setting_func, get_setting_func,
+			       set_func, show_func, set_list, show_list);
 }
 
 /* Add element named NAME to command list LIST (the list for set or
-   some sublist thereof).  CLASS is as in add_cmd.  ENUMLIST is a list
+   some sublist thereof).  THECLASS is as in add_cmd.  ENUMLIST is a list
    of strings which may follow NAME.  VAR is address of the variable
    which will contain the matching string (from ENUMLIST).  */
 
-void
+set_show_commands
 add_setshow_enum_cmd (const char *name,
 		      enum command_class theclass,
 		      const char *const *enumlist,
@@ -532,320 +692,737 @@ add_setshow_enum_cmd (const char *name,
 		      const char *set_doc,
 		      const char *show_doc,
 		      const char *help_doc,
-		      cmd_const_sfunc_ftype *set_func,
+		      cmd_func_ftype *set_func,
 		      show_value_ftype *show_func,
 		      struct cmd_list_element **set_list,
-		      struct cmd_list_element **show_list,
-		      void *context)
+		      struct cmd_list_element **show_list)
+{
+  /* We require *VAR to be initialized before this call, and
+     furthermore it must be == to one of the values in ENUMLIST.  */
+  gdb_assert (var != nullptr && *var != nullptr);
+  for (int i = 0; ; ++i)
+    {
+      gdb_assert (enumlist[i] != nullptr);
+      if (*var == enumlist[i])
+	break;
+    }
+
+  set_show_commands commands
+    =  add_setshow_cmd_full<const char *> (name, theclass, var_enum, var,
+					   set_doc, show_doc, help_doc,
+					   nullptr, nullptr, set_func,
+					   show_func, set_list, show_list);
+  commands.set->enums = enumlist;
+  return commands;
+}
+
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_enum_cmd (const char *name, command_class theclass,
+		      const char *const *enumlist, const char *set_doc,
+		      const char *show_doc, const char *help_doc,
+		      setting_func_types<const char *>::set set_func,
+		      setting_func_types<const char *>::get get_func,
+		      show_value_ftype *show_func,
+		      cmd_list_element **set_list,
+		      cmd_list_element **show_list)
 {
-  struct cmd_list_element *c, *show;
+  auto cmds = add_setshow_cmd_full<const char *> (name, theclass, var_enum,
+						  nullptr, set_doc, show_doc,
+						  help_doc, set_func, get_func,
+						  nullptr, show_func, set_list,
+						  show_list);
 
-  add_setshow_cmd_full (name, theclass, var_enum, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&c, &show);
-  c->enums = enumlist;
+  cmds.set->enums = enumlist;
 
-  set_cmd_context (c, context);
-  set_cmd_context (show, context);
+  return cmds;
 }
 
 /* See cli-decode.h.  */
 const char * const auto_boolean_enums[] = { "on", "off", "auto", NULL };
 
 /* Add an auto-boolean command named NAME to both the set and show
-   command list lists.  CLASS is as in add_cmd.  VAR is address of the
+   command list lists.  THECLASS is as in add_cmd.  VAR is address of the
    variable which will contain the value.  DOC is the documentation
    string.  FUNC is the corresponding callback.  */
-void
+
+set_show_commands
 add_setshow_auto_boolean_cmd (const char *name,
 			      enum command_class theclass,
 			      enum auto_boolean *var,
 			      const char *set_doc, const char *show_doc,
 			      const char *help_doc,
-			      cmd_const_sfunc_ftype *set_func,
+			      cmd_func_ftype *set_func,
 			      show_value_ftype *show_func,
 			      struct cmd_list_element **set_list,
 			      struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *c;
+  set_show_commands commands
+    = add_setshow_cmd_full<enum auto_boolean> (name, theclass, var_auto_boolean,
+					       var, set_doc, show_doc, help_doc,
+					       nullptr, nullptr, set_func,
+					       show_func, set_list, show_list);
 
-  add_setshow_cmd_full (name, theclass, var_auto_boolean, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&c, NULL);
-  c->enums = auto_boolean_enums;
+  commands.set->enums = auto_boolean_enums;
+
+  return commands;
+}
+
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_auto_boolean_cmd (const char *name, command_class theclass,
+			      const char *set_doc, const char *show_doc,
+			      const char *help_doc,
+			      setting_func_types<enum auto_boolean>::set set_func,
+			      setting_func_types<enum auto_boolean>::get get_func,
+			      show_value_ftype *show_func,
+			      cmd_list_element **set_list,
+			      cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<enum auto_boolean> (name, theclass,
+						       var_auto_boolean,
+						       nullptr, set_doc,
+						       show_doc, help_doc,
+						       set_func, get_func,
+						       nullptr, show_func,
+						       set_list, show_list);
+
+  cmds.set->enums = auto_boolean_enums;
+
+  return cmds;
 }
 
 /* See cli-decode.h.  */
 const char * const boolean_enums[] = { "on", "off", NULL };
 
 /* Add element named NAME to both the set and show command LISTs (the
-   list for set/show or some sublist thereof).  CLASS is as in
+   list for set/show or some sublist thereof).  THECLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
    value.  SET_DOC and SHOW_DOC are the documentation strings.
    Returns the new command element.  */
 
-cmd_list_element *
+set_show_commands
 add_setshow_boolean_cmd (const char *name, enum command_class theclass, bool *var,
 			 const char *set_doc, const char *show_doc,
 			 const char *help_doc,
-			 cmd_const_sfunc_ftype *set_func,
+			 cmd_func_ftype *set_func,
 			 show_value_ftype *show_func,
 			 struct cmd_list_element **set_list,
 			 struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *c;
+  set_show_commands commands
+    = add_setshow_cmd_full<bool> (name, theclass, var_boolean, var,
+				  set_doc, show_doc, help_doc,
+				  nullptr, nullptr, set_func, show_func,
+				  set_list, show_list);
 
-  add_setshow_cmd_full (name, theclass, var_boolean, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&c, NULL);
-  c->enums = boolean_enums;
+  commands.set->enums = boolean_enums;
 
-  return c;
+  return commands;
+}
+
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_boolean_cmd (const char *name, command_class theclass,
+			 const char *set_doc, const char *show_doc,
+			 const char *help_doc,
+			 setting_func_types<bool>::set set_func,
+			 setting_func_types<bool>::get get_func,
+			 show_value_ftype *show_func,
+			 cmd_list_element **set_list,
+			 cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<bool> (name, theclass, var_boolean, nullptr,
+					  set_doc, show_doc, help_doc,
+					  set_func, get_func, nullptr,
+					  show_func, set_list, show_list);
+
+  cmds.set->enums = boolean_enums;
+
+  return cmds;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  */
-void
+
+set_show_commands
 add_setshow_filename_cmd (const char *name, enum command_class theclass,
-			  char **var,
+			  std::string *var,
 			  const char *set_doc, const char *show_doc,
 			  const char *help_doc,
-			  cmd_const_sfunc_ftype *set_func,
+			  cmd_func_ftype *set_func,
 			  show_value_ftype *show_func,
 			  struct cmd_list_element **set_list,
 			  struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *set_result;
+  set_show_commands commands
+    = add_setshow_cmd_full<std::string> (name, theclass, var_filename, var,
+					 set_doc, show_doc, help_doc,
+					 nullptr, nullptr, set_func,
+					 show_func, set_list, show_list);
+
+  set_cmd_completer (commands.set, filename_completer);
+
+  return commands;
+}
+
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_filename_cmd (const char *name, command_class theclass,
+			  const char *set_doc, const char *show_doc,
+			  const char *help_doc,
+			  setting_func_types<std::string>::set set_func,
+			  setting_func_types<std::string>::get get_func,
+			  show_value_ftype *show_func,
+			  cmd_list_element **set_list,
+			  cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<std::string> (name, theclass, var_filename,
+						 nullptr, set_doc, show_doc,
+						 help_doc, set_func, get_func,
+						 nullptr, show_func, set_list,
+						 show_list);
+
+  set_cmd_completer (cmds.set, filename_completer);
 
-  add_setshow_cmd_full (name, theclass, var_filename, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&set_result, NULL);
-  set_cmd_completer (set_result, filename_completer);
+  return cmds;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  */
-void
+
+set_show_commands
 add_setshow_string_cmd (const char *name, enum command_class theclass,
-			char **var,
+			std::string *var,
 			const char *set_doc, const char *show_doc,
 			const char *help_doc,
-			cmd_const_sfunc_ftype *set_func,
+			cmd_func_ftype *set_func,
 			show_value_ftype *show_func,
 			struct cmd_list_element **set_list,
 			struct cmd_list_element **show_list)
 {
-  cmd_list_element *set_cmd;
+  set_show_commands commands
+    = add_setshow_cmd_full<std::string> (name, theclass, var_string, var,
+					set_doc, show_doc, help_doc,
+					nullptr, nullptr, set_func,
+					show_func, set_list, show_list);
 
-  add_setshow_cmd_full (name, theclass, var_string, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&set_cmd, NULL);
+  /* Disable the default symbol completer.  */
+  set_cmd_completer (commands.set, nullptr);
+
+  return commands;
+}
+
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_string_cmd (const char *name, command_class theclass,
+			const char *set_doc, const char *show_doc,
+			const char *help_doc,
+			setting_func_types<std::string>::set set_func,
+			setting_func_types<std::string>::get get_func,
+			show_value_ftype *show_func,
+			cmd_list_element **set_list,
+			cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<std::string> (name, theclass, var_string,
+						 nullptr, set_doc, show_doc,
+						 help_doc, set_func, get_func,
+						 nullptr, show_func, set_list,
+						 show_list);
 
   /* Disable the default symbol completer.  */
-  set_cmd_completer (set_cmd, nullptr);
+  set_cmd_completer (cmds.set, nullptr);
+
+  return cmds;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  */
-struct cmd_list_element *
+
+set_show_commands
 add_setshow_string_noescape_cmd (const char *name, enum command_class theclass,
-				 char **var,
+				 std::string *var,
 				 const char *set_doc, const char *show_doc,
 				 const char *help_doc,
-				 cmd_const_sfunc_ftype *set_func,
+				 cmd_func_ftype *set_func,
 				 show_value_ftype *show_func,
 				 struct cmd_list_element **set_list,
 				 struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *set_cmd;
+  set_show_commands commands
+    = add_setshow_cmd_full<std::string> (name, theclass, var_string_noescape,
+					 var, set_doc, show_doc, help_doc,
+					 nullptr, nullptr, set_func, show_func,
+					 set_list, show_list);
+
+  /* Disable the default symbol completer.  */
+  set_cmd_completer (commands.set, nullptr);
 
-  add_setshow_cmd_full (name, theclass, var_string_noescape, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&set_cmd, NULL);
+  return commands;
+}
+
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_string_noescape_cmd (const char *name, command_class theclass,
+				 const char *set_doc, const char *show_doc,
+				 const char *help_doc,
+				 setting_func_types<std::string>::set set_func,
+				 setting_func_types<std::string>::get get_func,
+				 show_value_ftype *show_func,
+				 cmd_list_element **set_list,
+				 cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<std::string> (name, theclass,
+						 var_string_noescape, nullptr,
+						 set_doc, show_doc, help_doc,
+						 set_func, get_func,
+						 nullptr, show_func, set_list,
+						 show_list);
 
   /* Disable the default symbol completer.  */
-  set_cmd_completer (set_cmd, nullptr);
+  set_cmd_completer (cmds.set, nullptr);
 
-  return set_cmd;
+  return cmds;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  */
-void
+
+set_show_commands
 add_setshow_optional_filename_cmd (const char *name, enum command_class theclass,
-				   char **var,
+				   std::string *var,
 				   const char *set_doc, const char *show_doc,
 				   const char *help_doc,
-				   cmd_const_sfunc_ftype *set_func,
+				   cmd_func_ftype *set_func,
 				   show_value_ftype *show_func,
 				   struct cmd_list_element **set_list,
 				   struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *set_result;
- 
-  add_setshow_cmd_full (name, theclass, var_optional_filename, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&set_result, NULL);
-		
-  set_cmd_completer (set_result, filename_completer);
+  set_show_commands commands
+    = add_setshow_cmd_full<std::string> (name, theclass, var_optional_filename,
+					 var, set_doc, show_doc, help_doc,
+					 nullptr, nullptr, set_func, show_func,
+					 set_list, show_list);
 
+  set_cmd_completer (commands.set, filename_completer);
+
+  return commands;
 }
 
-/* Completes on literal "unlimited".  Used by integer commands that
-   support a special "unlimited" value.  */
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
 
-static void
-integer_unlimited_completer (struct cmd_list_element *ignore,
-			     completion_tracker &tracker,
-			     const char *text, const char *word)
+set_show_commands
+add_setshow_optional_filename_cmd (const char *name, command_class theclass,
+				   const char *set_doc, const char *show_doc,
+				   const char *help_doc,
+				   setting_func_types<std::string>::set set_func,
+				   setting_func_types<std::string>::get get_func,
+				   show_value_ftype *show_func,
+				   cmd_list_element **set_list,
+				   cmd_list_element **show_list)
 {
-  static const char * const keywords[] =
-    {
-      "unlimited",
-      NULL,
-    };
+  auto cmds =
+    add_setshow_cmd_full<std::string> (name, theclass, var_optional_filename,
+				       nullptr, set_doc, show_doc, help_doc,
+				       set_func, get_func, nullptr, show_func,
+				       set_list,show_list);
+
+  set_cmd_completer (cmds.set, filename_completer);
 
-  complete_on_enum (tracker, keywords, text, word);
+  return cmds;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
-   list for set/show or some sublist thereof).  CLASS is as in
+   list for set/show or some sublist thereof).  THECLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
    value.  SET_DOC and SHOW_DOC are the documentation strings.  This
    function is only used in Python API.  Please don't use it elsewhere.  */
-void
+
+set_show_commands
+add_setshow_integer_cmd (const char *name, enum command_class theclass,
+			 int *var, const literal_def *extra_literals,
+			 const char *set_doc, const char *show_doc,
+			 const char *help_doc,
+			 cmd_func_ftype *set_func,
+			 show_value_ftype *show_func,
+			 struct cmd_list_element **set_list,
+			 struct cmd_list_element **show_list)
+{
+  set_show_commands commands
+    = add_setshow_cmd_full<int> (name, theclass, var_integer, var,
+				 extra_literals, set_doc, show_doc,
+				 help_doc, nullptr, nullptr, set_func,
+				 show_func, set_list, show_list);
+  return commands;
+}
+
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_integer_cmd (const char *name, command_class theclass,
+			 const literal_def *extra_literals,
+			 const char *set_doc, const char *show_doc,
+			 const char *help_doc,
+			 setting_func_types<int>::set set_func,
+			 setting_func_types<int>::get get_func,
+			 show_value_ftype *show_func,
+			 cmd_list_element **set_list,
+			 cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<int> (name, theclass, var_integer, nullptr,
+					 extra_literals, set_doc, show_doc,
+					 help_doc, set_func, get_func, nullptr,
+					 show_func, set_list, show_list);
+  return cmds;
+}
+
+/* Accept `unlimited' or 0, translated internally to INT_MAX.  */
+const literal_def integer_unlimited_literals[] =
+  {
+    { "unlimited", INT_MAX, 0 },
+    { nullptr }
+  };
+
+/* Same as above but using `integer_unlimited_literals', with a pointer
+   to a global storage buffer.  */
+
+set_show_commands
 add_setshow_integer_cmd (const char *name, enum command_class theclass,
 			 int *var,
 			 const char *set_doc, const char *show_doc,
 			 const char *help_doc,
-			 cmd_const_sfunc_ftype *set_func,
+			 cmd_func_ftype *set_func,
 			 show_value_ftype *show_func,
 			 struct cmd_list_element **set_list,
 			 struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *set;
+  set_show_commands commands
+    = add_setshow_cmd_full<int> (name, theclass, var_integer, var,
+				 integer_unlimited_literals,
+				 set_doc, show_doc, help_doc,
+				 nullptr, nullptr, set_func,
+				 show_func, set_list, show_list);
+  return commands;
+}
 
-  add_setshow_cmd_full (name, theclass, var_integer, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&set, NULL);
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
 
-  set_cmd_completer (set, integer_unlimited_completer);
+set_show_commands
+add_setshow_integer_cmd (const char *name, command_class theclass,
+			 const char *set_doc, const char *show_doc,
+			 const char *help_doc,
+			 setting_func_types<int>::set set_func,
+			 setting_func_types<int>::get get_func,
+			 show_value_ftype *show_func,
+			 cmd_list_element **set_list,
+			 cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<int> (name, theclass, var_integer, nullptr,
+					 integer_unlimited_literals,
+					 set_doc, show_doc, help_doc, set_func,
+					 get_func, nullptr, show_func, set_list,
+					 show_list);
+  return cmds;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  CLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
    value.  SET_DOC and SHOW_DOC are the documentation strings.  */
-void
+
+set_show_commands
+add_setshow_pinteger_cmd (const char *name, enum command_class theclass,
+			  int *var, const literal_def *extra_literals,
+			  const char *set_doc, const char *show_doc,
+			  const char *help_doc,
+			  cmd_func_ftype *set_func,
+			  show_value_ftype *show_func,
+			  struct cmd_list_element **set_list,
+			  struct cmd_list_element **show_list)
+{
+  set_show_commands commands
+    = add_setshow_cmd_full<int> (name, theclass, var_pinteger, var,
+				 extra_literals, set_doc, show_doc,
+				 help_doc, nullptr, nullptr, set_func,
+				 show_func, set_list, show_list);
+  return commands;
+}
+
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_pinteger_cmd (const char *name, command_class theclass,
+			  const literal_def *extra_literals,
+			  const char *set_doc, const char *show_doc,
+			  const char *help_doc,
+			  setting_func_types<int>::set set_func,
+			  setting_func_types<int>::get get_func,
+			  show_value_ftype *show_func,
+			  cmd_list_element **set_list,
+			  cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<int> (name, theclass, var_pinteger, nullptr,
+					 extra_literals, set_doc, show_doc,
+					 help_doc, set_func, get_func, nullptr,
+					 show_func, set_list, show_list);
+  return cmds;
+}
+
+/* Add element named NAME to both the set and show command LISTs (the
+   list for set/show or some sublist thereof).  THECLASS is as in
+   add_cmd.  VAR is address of the variable which will contain the
+   value.  SET_DOC and SHOW_DOC are the documentation strings.  */
+
+set_show_commands
+add_setshow_uinteger_cmd (const char *name, enum command_class theclass,
+			  unsigned int *var, const literal_def *extra_literals,
+			  const char *set_doc, const char *show_doc,
+			  const char *help_doc,
+			  cmd_func_ftype *set_func,
+			  show_value_ftype *show_func,
+			  struct cmd_list_element **set_list,
+			  struct cmd_list_element **show_list)
+{
+  set_show_commands commands
+    = add_setshow_cmd_full<unsigned int> (name, theclass, var_uinteger, var,
+					  extra_literals, set_doc, show_doc,
+					  help_doc, nullptr, nullptr, set_func,
+					  show_func, set_list, show_list);
+  return commands;
+}
+
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_uinteger_cmd (const char *name, command_class theclass,
+			  const literal_def *extra_literals,
+			  const char *set_doc, const char *show_doc,
+			  const char *help_doc,
+			  setting_func_types<unsigned int>::set set_func,
+			  setting_func_types<unsigned int>::get get_func,
+			  show_value_ftype *show_func,
+			  cmd_list_element **set_list,
+			  cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<unsigned int> (name, theclass, var_uinteger,
+						  nullptr, extra_literals,
+						  set_doc, show_doc, help_doc,
+						  set_func, get_func, nullptr,
+						  show_func, set_list,
+						  show_list);
+  return cmds;
+}
+
+/* Accept `unlimited' or 0, translated internally to UINT_MAX.  */
+const literal_def uinteger_unlimited_literals[] =
+  {
+    { "unlimited", UINT_MAX, 0 },
+    { nullptr }
+  };
+
+/* Same as above but using `uinteger_unlimited_literals', with a pointer
+   to a global storage buffer.  */
+
+set_show_commands
 add_setshow_uinteger_cmd (const char *name, enum command_class theclass,
 			  unsigned int *var,
 			  const char *set_doc, const char *show_doc,
 			  const char *help_doc,
-			  cmd_const_sfunc_ftype *set_func,
+			  cmd_func_ftype *set_func,
 			  show_value_ftype *show_func,
 			  struct cmd_list_element **set_list,
 			  struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *set;
+  set_show_commands commands
+    = add_setshow_cmd_full<unsigned int> (name, theclass, var_uinteger, var,
+					  uinteger_unlimited_literals,
+					  set_doc, show_doc, help_doc, nullptr,
+					  nullptr, set_func, show_func,
+					  set_list, show_list);
+  return commands;
+}
 
-  add_setshow_cmd_full (name, theclass, var_uinteger, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&set, NULL);
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
 
-  set_cmd_completer (set, integer_unlimited_completer);
+set_show_commands
+add_setshow_uinteger_cmd (const char *name, command_class theclass,
+			  const char *set_doc, const char *show_doc,
+			  const char *help_doc,
+			  setting_func_types<unsigned int>::set set_func,
+			  setting_func_types<unsigned int>::get get_func,
+			  show_value_ftype *show_func,
+			  cmd_list_element **set_list,
+			  cmd_list_element **show_list)
+{
+  auto cmds = add_setshow_cmd_full<unsigned int> (name, theclass, var_uinteger,
+						  nullptr,
+						  uinteger_unlimited_literals,
+						  set_doc, show_doc, help_doc,
+						  set_func, get_func, nullptr,
+						  show_func, set_list,
+						  show_list);
+  return cmds;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
-   list for set/show or some sublist thereof).  CLASS is as in
+   list for set/show or some sublist thereof).  THECLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
    value.  SET_DOC and SHOW_DOC are the documentation strings.  */
-void
+
+set_show_commands
 add_setshow_zinteger_cmd (const char *name, enum command_class theclass,
 			  int *var,
 			  const char *set_doc, const char *show_doc,
 			  const char *help_doc,
-			  cmd_const_sfunc_ftype *set_func,
+			  cmd_func_ftype *set_func,
 			  show_value_ftype *show_func,
 			  struct cmd_list_element **set_list,
 			  struct cmd_list_element **show_list)
 {
-  add_setshow_cmd_full (name, theclass, var_zinteger, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			NULL, NULL);
+  return add_setshow_cmd_full<int> (name, theclass, var_integer, var,
+				    set_doc, show_doc, help_doc,
+				    nullptr, nullptr, set_func,
+				    show_func, set_list, show_list);
 }
 
-void
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_zinteger_cmd (const char *name, command_class theclass,
+			  const char *set_doc, const char *show_doc,
+			  const char *help_doc,
+			  setting_func_types<int>::set set_func,
+			  setting_func_types<int>::get get_func,
+			  show_value_ftype *show_func,
+			  cmd_list_element **set_list,
+			  cmd_list_element **show_list)
+{
+  return add_setshow_cmd_full<int> (name, theclass, var_integer, nullptr,
+				    set_doc, show_doc, help_doc, set_func,
+				    get_func, nullptr, show_func, set_list,
+				    show_list);
+}
+
+/* Accept `unlimited' or -1, using -1 internally.  */
+const literal_def pinteger_unlimited_literals[] =
+  {
+    { "unlimited", -1, -1 },
+    { nullptr }
+  };
+
+/* Same as above but using `pinteger_unlimited_literals', with a pointer
+   to a global storage buffer.  */
+
+set_show_commands
 add_setshow_zuinteger_unlimited_cmd (const char *name,
 				     enum command_class theclass,
 				     int *var,
 				     const char *set_doc,
 				     const char *show_doc,
 				     const char *help_doc,
-				     cmd_const_sfunc_ftype *set_func,
+				     cmd_func_ftype *set_func,
 				     show_value_ftype *show_func,
 				     struct cmd_list_element **set_list,
 				     struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *set;
-
-  add_setshow_cmd_full (name, theclass, var_zuinteger_unlimited, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			&set, NULL);
+  set_show_commands commands
+    = add_setshow_cmd_full<int> (name, theclass, var_pinteger, var,
+				 pinteger_unlimited_literals,
+				 set_doc, show_doc, help_doc, nullptr,
+				 nullptr, set_func, show_func, set_list,
+				 show_list);
+  return commands;
+}
 
-  set_cmd_completer (set, integer_unlimited_completer);
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
+
+set_show_commands
+add_setshow_zuinteger_unlimited_cmd (const char *name, command_class theclass,
+				     const char *set_doc, const char *show_doc,
+				     const char *help_doc,
+				     setting_func_types<int>::set set_func,
+				     setting_func_types<int>::get get_func,
+				     show_value_ftype *show_func,
+				     cmd_list_element **set_list,
+				     cmd_list_element **show_list)
+{
+  auto cmds
+    = add_setshow_cmd_full<int> (name, theclass, var_pinteger, nullptr,
+				 pinteger_unlimited_literals,
+				 set_doc, show_doc, help_doc, set_func,
+				 get_func, nullptr, show_func, set_list,
+				 show_list);
+  return cmds;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
-   list for set/show or some sublist thereof).  CLASS is as in
+   list for set/show or some sublist thereof).  THECLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
    value.  SET_DOC and SHOW_DOC are the documentation strings.  */
-void
+
+set_show_commands
 add_setshow_zuinteger_cmd (const char *name, enum command_class theclass,
 			   unsigned int *var,
 			   const char *set_doc, const char *show_doc,
 			   const char *help_doc,
-			   cmd_const_sfunc_ftype *set_func,
+			   cmd_func_ftype *set_func,
 			   show_value_ftype *show_func,
 			   struct cmd_list_element **set_list,
 			   struct cmd_list_element **show_list)
 {
-  add_setshow_cmd_full (name, theclass, var_zuinteger, var,
-			set_doc, show_doc, help_doc,
-			set_func, show_func,
-			set_list, show_list,
-			NULL, NULL);
+  return add_setshow_cmd_full<unsigned int> (name, theclass, var_uinteger,
+					     var, set_doc, show_doc, help_doc,
+					     nullptr, nullptr, set_func,
+					     show_func, set_list, show_list);
 }
 
-/* Remove the command named NAME from the command list.  Return the
-   list commands which were aliased to the deleted command.  If the
-   command had no aliases, return NULL.  The various *HOOKs are set to
-   the pre- and post-hook commands for the deleted command.  If the
-   command does not have a hook, the corresponding out parameter is
-   set to NULL.  */
+/* Same as above but using a getter and a setter function instead of a pointer
+   to a global storage buffer.  */
 
-static struct cmd_list_element *
+set_show_commands
+add_setshow_zuinteger_cmd (const char *name, command_class theclass,
+			   const char *set_doc, const char *show_doc,
+			   const char *help_doc,
+			   setting_func_types<unsigned int>::set set_func,
+			   setting_func_types<unsigned int>::get get_func,
+			   show_value_ftype *show_func,
+			   cmd_list_element **set_list,
+			   cmd_list_element **show_list)
+{
+  return add_setshow_cmd_full<unsigned int> (name, theclass, var_uinteger,
+					     nullptr, set_doc, show_doc,
+					     help_doc, set_func, get_func,
+					     nullptr, show_func, set_list,
+					     show_list);
+}
+
+/* Remove the command named NAME from the command list.  Return the list
+   commands which were aliased to the deleted command.  The various *HOOKs are
+   set to the pre- and post-hook commands for the deleted command.  If the
+   command does not have a hook, the corresponding out parameter is set to
+   NULL.  */
+
+static cmd_list_element::aliases_list_type
 delete_cmd (const char *name, struct cmd_list_element **list,
 	    struct cmd_list_element **prehook,
 	    struct cmd_list_element **prehookee,
@@ -854,7 +1431,7 @@ delete_cmd (const char *name, struct cmd
 {
   struct cmd_list_element *iter;
   struct cmd_list_element **previous_chain_ptr;
-  struct cmd_list_element *aliases = NULL;
+  cmd_list_element::aliases_list_type aliases;
 
   *prehook = NULL;
   *prehookee = NULL;
@@ -867,7 +1444,8 @@ delete_cmd (const char *name, struct cmd
       if (strcmp (iter->name, name) == 0)
 	{
 	  if (iter->destroyer)
-	    iter->destroyer (iter, iter->context);
+	    iter->destroyer (iter, iter->context ());
+
 	  if (iter->hookee_pre)
 	    iter->hookee_pre->hook_pre = 0;
 	  *prehook = iter->hook_pre;
@@ -880,21 +1458,14 @@ delete_cmd (const char *name, struct cmd
 	  /* Update the link.  */
 	  *previous_chain_ptr = iter->next;
 
-	  aliases = iter->aliases;
+	  aliases = std::move (iter->aliases);
 
 	  /* If this command was an alias, remove it from the list of
 	     aliases.  */
-	  if (iter->cmd_pointer)
+	  if (iter->is_alias ())
 	    {
-	      struct cmd_list_element **prevp = &iter->cmd_pointer->aliases;
-	      struct cmd_list_element *a = *prevp;
-
-	      while (a != iter)
-		{
-		  prevp = &a->alias_chain;
-		  a = *prevp;
-		}
-	      *prevp = iter->alias_chain;
+	      auto it = iter->alias_target->aliases.iterator_to (*iter);
+	      iter->alias_target->aliases.erase (it);
 	    }
 
 	  delete iter;
@@ -914,72 +1485,182 @@ delete_cmd (const char *name, struct cmd
 /* Add an element to the list of info subcommands.  */
 
 struct cmd_list_element *
-add_info (const char *name, cmd_const_cfunc_ftype *fun, const char *doc)
+add_info (const char *name, cmd_simple_func_ftype *fun, const char *doc)
 {
   return add_cmd (name, class_info, fun, doc, &infolist);
 }
 
 /* Add an alias to the list of info subcommands.  */
 
-struct cmd_list_element *
-add_info_alias (const char *name, const char *oldname, int abbrev_flag)
+cmd_list_element *
+add_info_alias (const char *name, cmd_list_element *target, int abbrev_flag)
 {
-  return add_alias_cmd (name, oldname, class_run, abbrev_flag, &infolist);
+  return add_alias_cmd (name, target, class_run, abbrev_flag, &infolist);
 }
 
 /* Add an element to the list of commands.  */
 
 struct cmd_list_element *
 add_com (const char *name, enum command_class theclass,
-	 cmd_const_cfunc_ftype *fun,
+	 cmd_simple_func_ftype *fun,
 	 const char *doc)
 {
   return add_cmd (name, theclass, fun, doc, &cmdlist);
 }
 
-/* Add an alias or abbreviation command to the list of commands.  */
+/* Add an alias or abbreviation command to the list of commands.
+   For aliases predefined by GDB (such as bt), THECLASS must be
+   different of class_alias, as class_alias is used to identify
+   user defined aliases.  */
 
-struct cmd_list_element *
-add_com_alias (const char *name, const char *oldname, enum command_class theclass,
-	       int abbrev_flag)
+cmd_list_element *
+add_com_alias (const char *name, cmd_list_element *target,
+	       command_class theclass, int abbrev_flag)
 {
-  return add_alias_cmd (name, oldname, theclass, abbrev_flag, &cmdlist);
+  return add_alias_cmd (name, target, theclass, abbrev_flag, &cmdlist);
 }
 
 /* Add an element with a suppress notification to the list of commands.  */
 
 struct cmd_list_element *
 add_com_suppress_notification (const char *name, enum command_class theclass,
-			       cmd_const_cfunc_ftype *fun, const char *doc,
-			       int *suppress_notification)
+			       cmd_simple_func_ftype *fun, const char *doc,
+			       bool *suppress_notification)
 {
   return add_cmd_suppress_notification (name, theclass, fun, doc,
 					&cmdlist, suppress_notification);
 }
 
+/* Print the prefix of C followed by name of C in title style.  */
+
+static void
+fput_command_name_styled (const cmd_list_element &c, struct ui_file *stream)
+{
+  std::string prefixname
+    = c.prefix == nullptr ? "" : c.prefix->prefixname ();
+
+  fprintf_styled (stream, title_style.style (), "%s%s",
+		  prefixname.c_str (), c.name);
+}
+
+/* True if ALIAS has a user-defined documentation.  */
+
+static bool
+user_documented_alias (const cmd_list_element &alias)
+{
+  gdb_assert (alias.is_alias ());
+  /* Alias is user documented if it has an allocated documentation
+     that differs from the aliased command.  */
+  return (alias.doc_allocated
+	  && strcmp (alias.doc, alias.alias_target->doc) != 0);
+}
+
+/* Print the definition of alias C using title style for alias
+   and aliased command.  */
+
+static void
+fput_alias_definition_styled (const cmd_list_element &c,
+			      struct ui_file *stream)
+{
+  gdb_assert (c.is_alias ());
+  gdb_puts ("  alias ", stream);
+  fput_command_name_styled (c, stream);
+  gdb_printf (stream, " = ");
+  fput_command_name_styled (*c.alias_target, stream);
+  gdb_printf (stream, " %s\n", c.default_args.c_str ());
+}
+
+/* Print the definition of CMD aliases not deprecated and having default args
+   and not specifically documented by the user.  */
+
+static void
+fput_aliases_definition_styled (const cmd_list_element &cmd,
+				struct ui_file *stream)
+{
+  for (const cmd_list_element &alias : cmd.aliases)
+    if (!alias.cmd_deprecated
+	&& !user_documented_alias (alias)
+	&& !alias.default_args.empty ())
+      fput_alias_definition_styled (alias, stream);
+}
+
+/* If C has one or more aliases, style print the name of C and the name of its
+   aliases not documented specifically by the user, separated by commas.
+   If ALWAYS_FPUT_C_NAME, print the name of C even if it has no aliases.
+   If one or more names are printed, POSTFIX is printed after the last name.
+*/
+
+static void
+fput_command_names_styled (const cmd_list_element &c,
+			   bool always_fput_c_name, const char *postfix,
+			   struct ui_file *stream)
+{
+  /* First, check if we are going to print something.  That is, either if
+     ALWAYS_FPUT_C_NAME is true or if there exists at least one non-deprecated
+     alias not documented specifically by the user.  */
+
+  auto print_alias = [] (const cmd_list_element &alias)
+    {
+      return !alias.cmd_deprecated && !user_documented_alias (alias);
+    };
+
+  bool print_something = always_fput_c_name;
+  if (!print_something)
+    for (const cmd_list_element &alias : c.aliases)
+      {
+	if (!print_alias (alias))
+	  continue;
+
+	print_something = true;
+	break;
+      }
+
+  if (print_something)
+    fput_command_name_styled (c, stream);
+
+  for (const cmd_list_element &alias : c.aliases)
+    {
+      if (!print_alias (alias))
+	continue;
+
+      gdb_puts (", ", stream);
+      stream->wrap_here (3);
+      fput_command_name_styled (alias, stream);
+    }
+
+  if (print_something)
+    gdb_puts (postfix, stream);
+}
+
 /* If VERBOSE, print the full help for command C and highlight the
    documentation parts matching HIGHLIGHT,
    otherwise print only one-line help for command C.  */
 
 static void
-print_doc_of_command (struct cmd_list_element *c, const char *prefix,
-		      bool verbose, compiled_regex &highlight,
-		      struct ui_file *stream)
+print_doc_of_command (const cmd_list_element &c, bool verbose,
+		      compiled_regex &highlight, struct ui_file *stream)
 {
   /* When printing the full documentation, add a line to separate
      this documentation from the previous command help, in the likely
      case that apropos finds several commands.  */
   if (verbose)
-    fputs_filtered ("\n", stream);
+    gdb_puts ("\n", stream);
 
-  fprintf_styled (stream, title_style.style (),
-		  "%s%s", prefix, c->name);
-  fputs_filtered (" -- ", stream);
+  fput_command_names_styled (c, true,
+			     verbose ? "" : " -- ", stream);
   if (verbose)
-    fputs_highlighted (c->doc, highlight, stream);
+    {
+      gdb_puts ("\n", stream);
+      fput_aliases_definition_styled (c, stream);
+      fputs_highlighted (c.doc, highlight, stream);
+      gdb_puts ("\n", stream);
+    }
   else
-    print_doc_line (stream, c->doc, false);
-  fputs_filtered ("\n", stream);
+    {
+      print_doc_line (stream, c.doc, false);
+      gdb_puts ("\n", stream);
+      fput_aliases_definition_styled (c, stream);
+    }
 }
 
 /* Recursively walk the commandlist structures, and print out the
@@ -992,7 +1673,7 @@ print_doc_of_command (struct cmd_list_el
 void
 apropos_cmd (struct ui_file *stream,
 	     struct cmd_list_element *commandlist,
-	     bool verbose, compiled_regex &regex, const char *prefix)
+	     bool verbose, compiled_regex &regex)
 {
   struct cmd_list_element *c;
   int returnvalue;
@@ -1000,6 +1681,14 @@ apropos_cmd (struct ui_file *stream,
   /* Walk through the commands.  */
   for (c=commandlist;c;c=c->next)
     {
+      if (c->is_alias () && !user_documented_alias (*c))
+	{
+	  /* Command aliases/abbreviations not specifically documented by the
+	     user are skipped to ensure we print the doc of a command only once,
+	     when encountering the aliased command.  */
+	  continue;
+	}
+
       returnvalue = -1; /* Needed to avoid double printing.  */
       if (c->name != NULL)
 	{
@@ -1008,7 +1697,19 @@ apropos_cmd (struct ui_file *stream,
 	  /* Try to match against the name.  */
 	  returnvalue = regex.search (c->name, name_len, 0, name_len, NULL);
 	  if (returnvalue >= 0)
-	    print_doc_of_command (c, prefix, verbose, regex, stream);
+	    print_doc_of_command (*c, verbose, regex, stream);
+
+	  /* Try to match against the name of the aliases.  */
+	  for (const cmd_list_element &alias : c->aliases)
+	    {
+	      name_len = strlen (alias.name);
+	      returnvalue = regex.search (alias.name, name_len, 0, name_len, NULL);
+	      if (returnvalue >= 0)
+		{
+		  print_doc_of_command (*c, verbose, regex, stream);
+		  break;
+		}
+	    }
 	}
       if (c->doc != NULL && returnvalue < 0)
 	{
@@ -1016,16 +1717,14 @@ apropos_cmd (struct ui_file *stream,
 
 	  /* Try to match against documentation.  */
 	  if (regex.search (c->doc, doc_len, 0, doc_len, NULL) >= 0)
-	    print_doc_of_command (c, prefix, verbose, regex, stream);
+	    print_doc_of_command (*c, verbose, regex, stream);
 	}
-      /* Check if this command has subcommands and is not an
-	 abbreviation.  We skip listing subcommands of abbreviations
-	 in order to avoid duplicates in the output.  */
-      if (c->prefixlist != NULL && !c->abbrev_flag)
+      /* Check if this command has subcommands.  */
+      if (c->is_prefix ())
 	{
 	  /* Recursively call ourselves on the subcommand list,
 	     passing the right prefix in.  */
-	  apropos_cmd (stream, *c->prefixlist, verbose, regex, c->prefixname);
+	  apropos_cmd (stream, *c->subcommands, verbose, regex);
 	}
     }
 }
@@ -1044,7 +1743,7 @@ apropos_cmd (struct ui_file *stream,
 void
 help_cmd (const char *command, struct ui_file *stream)
 {
-  struct cmd_list_element *c;
+  struct cmd_list_element *c, *alias, *prefix_cmd, *c_cmd;
 
   if (!command)
     {
@@ -1058,13 +1757,16 @@ help_cmd (const char *command, struct ui
       return;
     }
 
-  c = lookup_cmd (&command, cmdlist, "", 0, 0);
+  const char *orig_command = command;
+  c = lookup_cmd (&command, cmdlist, "", NULL, 0, 0);
 
   if (c == 0)
     return;
 
+  lookup_cmd_composition (orig_command, &alias, &prefix_cmd, &c_cmd);
+
   /* There are three cases here.
-     If c->prefixlist is nonzero, we have a prefix command.
+     If c->subcommands is nonzero, we have a prefix command.
      Print its documentation, then list its subcommands.
 
      If c->func is non NULL, we really have a command.  Print its
@@ -1075,33 +1777,52 @@ help_cmd (const char *command, struct ui
      number of this class so that the commands in the class will be
      listed.  */
 
-  fputs_filtered (c->doc, stream);
-  fputs_filtered ("\n", stream);
+  if (alias == nullptr || !user_documented_alias (*alias))
+    {
+      /* Case of a normal command, or an alias not explicitly
+	 documented by the user.  */
+      /* If the user asked 'help somecommand' and there is no alias,
+	 the false indicates to not output the (single) command name.  */
+      fput_command_names_styled (*c, false, "\n", stream);
+      fput_aliases_definition_styled (*c, stream);
+      gdb_puts (c->doc, stream);
+    }
+  else
+    {
+      /* Case of an alias explicitly documented by the user.
+	 Only output the alias definition and its explicit documentation.  */
+      fput_alias_definition_styled (*alias, stream);
+      fput_command_names_styled (*alias, false, "\n", stream);
+      gdb_puts (alias->doc, stream);
+    }
+  gdb_puts ("\n", stream);
 
-  if (c->prefixlist == 0 && c->func != NULL)
+  if (!c->is_prefix () && !c->is_command_class_help ())
     return;
-  fprintf_filtered (stream, "\n");
+
+  gdb_printf (stream, "\n");
 
   /* If this is a prefix command, print it's subcommands.  */
-  if (c->prefixlist)
-    help_list (*c->prefixlist, c->prefixname, all_commands, stream);
+  if (c->is_prefix ())
+    help_list (*c->subcommands, c->prefixname ().c_str (),
+	       all_commands, stream);
 
   /* If this is a class name, print all of the commands in the class.  */
-  if (c->func == NULL)
+  if (c->is_command_class_help ())
     help_list (cmdlist, "", c->theclass, stream);
 
   if (c->hook_pre || c->hook_post)
-    fprintf_filtered (stream,
-                      "\nThis command has a hook (or hooks) defined:\n");
+    gdb_printf (stream,
+		"\nThis command has a hook (or hooks) defined:\n");
 
   if (c->hook_pre)
-    fprintf_filtered (stream,
-                      "\tThis command is run after  : %s (pre hook)\n",
-                    c->hook_pre->name);
+    gdb_printf (stream,
+		"\tThis command is run after  : %s (pre hook)\n",
+		c->hook_pre->name);
   if (c->hook_post)
-    fprintf_filtered (stream,
-                      "\tThis command is run before : %s (post hook)\n",
-                    c->hook_post->name);
+    gdb_printf (stream,
+		"\tThis command is run before : %s (post hook)\n",
+		c->hook_post->name);
 }
 
 /*
@@ -1109,7 +1830,7 @@ help_cmd (const char *command, struct ui
  *
  * LIST is the list.
  * CMDTYPE is the prefix to use in the title string.
- * CLASS is the class with which to list the nodes of this list (see
+ * THECLASS is the class with which to list the nodes of this list (see
  * documentation for help_cmd_list below),  As usual, ALL_COMMANDS for
  * everything, ALL_CLASSES for just classes, and non-negative for only things
  * in a specific class.
@@ -1140,39 +1861,39 @@ help_list (struct cmd_list_element *list
     }
 
   if (theclass == all_classes)
-    fprintf_filtered (stream, "List of classes of %scommands:\n\n", cmdtype2);
+    gdb_printf (stream, "List of classes of %scommands:\n\n", cmdtype2);
   else
-    fprintf_filtered (stream, "List of %scommands:\n\n", cmdtype2);
+    gdb_printf (stream, "List of %scommands:\n\n", cmdtype2);
 
-  help_cmd_list (list, theclass, cmdtype, (int) theclass >= 0, stream);
+  help_cmd_list (list, theclass, theclass >= 0, stream);
 
   if (theclass == all_classes)
     {
-      fprintf_filtered (stream, "\n\
+      gdb_printf (stream, "\n\
 Type \"help%s\" followed by a class name for a list of commands in ",
-			cmdtype1);
-      wrap_here ("");
-      fprintf_filtered (stream, "that class.");
+		  cmdtype1);
+      stream->wrap_here (0);
+      gdb_printf (stream, "that class.");
 
-      fprintf_filtered (stream, "\n\
+      gdb_printf (stream, "\n\
 Type \"help all\" for the list of all commands.");
     }
 
-  fprintf_filtered (stream, "\nType \"help%s\" followed by %scommand name ",
-		    cmdtype1, cmdtype2);
-  wrap_here ("");
-  fputs_filtered ("for ", stream);
-  wrap_here ("");
-  fputs_filtered ("full ", stream);
-  wrap_here ("");
-  fputs_filtered ("documentation.\n", stream);
-  fputs_filtered ("Type \"apropos word\" to search "
-		  "for commands related to \"word\".\n", stream);
-  fputs_filtered ("Type \"apropos -v word\" for full documentation", stream);
-  wrap_here ("");
-  fputs_filtered (" of commands related to \"word\".\n", stream);
-  fputs_filtered ("Command name abbreviations are allowed if unambiguous.\n",
-		  stream);
+  gdb_printf (stream, "\nType \"help%s\" followed by %scommand name ",
+	      cmdtype1, cmdtype2);
+  stream->wrap_here (0);
+  gdb_puts ("for ", stream);
+  stream->wrap_here (0);
+  gdb_puts ("full ", stream);
+  stream->wrap_here (0);
+  gdb_puts ("documentation.\n", stream);
+  gdb_puts ("Type \"apropos word\" to search "
+	    "for commands related to \"word\".\n", stream);
+  gdb_puts ("Type \"apropos -v word\" for full documentation", stream);
+  stream->wrap_here (0);
+  gdb_puts (" of commands related to \"word\".\n", stream);
+  gdb_puts ("Command name abbreviations are allowed if unambiguous.\n",
+	    stream);
 }
 
 static void
@@ -1184,14 +1905,14 @@ help_all (struct ui_file *stream)
   for (c = cmdlist; c; c = c->next)
     {
       if (c->abbrev_flag)
-        continue;
+	continue;
       /* If this is a class name, print all of the commands in the
 	 class.  */
 
-      if (c->func == NULL)
+      if (c->is_command_class_help ())
 	{
-	  fprintf_filtered (stream, "\nCommand class: %s\n\n", c->name);
-	  help_cmd_list (cmdlist, c->theclass, "", 1, stream);
+	  gdb_printf (stream, "\nCommand class: %s\n\n", c->name);
+	  help_cmd_list (cmdlist, c->theclass, true, stream);
 	}
     }
 
@@ -1202,16 +1923,16 @@ help_all (struct ui_file *stream)
   for (c = cmdlist; c; c = c->next)
     {
       if (c->abbrev_flag)
-        continue;
+	continue;
 
       if (c->theclass == no_class)
 	{
 	  if (!seen_unclassified)
 	    {
-	      fprintf_filtered (stream, "\nUnclassified commands\n\n");
+	      gdb_printf (stream, "\nUnclassified commands\n\n");
 	      seen_unclassified = 1;
 	    }
-	  print_help_for_command (c, "", 1, stream);
+	  print_help_for_command (*c, true, stream);
 	}
     }
 
@@ -1256,70 +1977,103 @@ print_doc_line (struct ui_file *stream,
     }
   else
     line_buffer[p - str] = '\0';
-  fputs_filtered (line_buffer, stream);
+  gdb_puts (line_buffer, stream);
 }
 
 /* Print one-line help for command C.
    If RECURSE is non-zero, also print one-line descriptions
    of all prefixed subcommands.  */
 static void
-print_help_for_command (struct cmd_list_element *c, const char *prefix,
-			int recurse, struct ui_file *stream)
+print_help_for_command (const cmd_list_element &c,
+			bool recurse, struct ui_file *stream)
 {
-  fprintf_styled (stream, title_style.style (),
-		  "%s%s", prefix, c->name);
-  fputs_filtered (" -- ", stream);
-  print_doc_line (stream, c->doc, false);
-  fputs_filtered ("\n", stream);
+  fput_command_names_styled (c, true, " -- ", stream);
+  print_doc_line (stream, c.doc, false);
+  gdb_puts ("\n", stream);
+  if (!c.default_args.empty ())
+    fput_alias_definition_styled (c, stream);
+  fput_aliases_definition_styled (c, stream);
 
   if (recurse
-      && c->prefixlist != 0
-      && c->abbrev_flag == 0)
+      && c.is_prefix ()
+      && c.abbrev_flag == 0)
     /* Subcommands of a prefix command typically have 'all_commands'
        as class.  If we pass CLASS to recursive invocation,
        most often we won't see anything.  */
-    help_cmd_list (*c->prefixlist, all_commands, c->prefixname, 1, stream);
+    help_cmd_list (*c.subcommands, all_commands, true, stream);
 }
 
 /*
  * Implement a help command on command list LIST.
  * RECURSE should be non-zero if this should be done recursively on
  * all sublists of LIST.
- * PREFIX is the prefix to print before each command name.
  * STREAM is the stream upon which the output should be written.
  * THECLASS should be:
  *      A non-negative class number to list only commands in that
- * class.
  *      ALL_COMMANDS to list all commands in list.
  *      ALL_CLASSES  to list all classes in list.
  *
+ *   Note that aliases are only shown when THECLASS is class_alias.
+ *   In the other cases, the aliases will be shown together with their
+ *   aliased command.
+ *
  *   Note that RECURSE will be active on *all* sublists, not just the
  * ones selected by the criteria above (ie. the selection mechanism
  * is at the low level, not the high-level).
  */
-void
+
+static void
 help_cmd_list (struct cmd_list_element *list, enum command_class theclass,
-	       const char *prefix, int recurse, struct ui_file *stream)
+	       bool recurse, struct ui_file *stream)
 {
   struct cmd_list_element *c;
 
   for (c = list; c; c = c->next)
     {
-      if (c->abbrev_flag == 0
-	  && !c->cmd_deprecated
-	  && (theclass == all_commands
-	      || (theclass == all_classes && c->func == NULL)
-	      || (theclass == c->theclass && c->func != NULL)))
-	{
-	  print_help_for_command (c, prefix, recurse, stream);
-	}
-      else if (c->abbrev_flag == 0
-	       && recurse
-	       && !c->cmd_deprecated
-	       && theclass == class_user && c->prefixlist != NULL)
-	/* User-defined commands may be subcommands.  */
-	help_cmd_list (*c->prefixlist, theclass, c->prefixname,
-		       recurse, stream);
+      if (c->abbrev_flag == 1 || c->cmd_deprecated)
+	{
+	  /* Do not show abbreviations or deprecated commands.  */
+	  continue;
+	}
+
+      if (c->is_alias () && theclass != class_alias)
+	{
+	  /* Do not show an alias, unless specifically showing the
+	     list of aliases:  for all other classes, an alias is
+	     shown (if needed) together with its aliased command.  */
+	  continue;
+	}
+
+      if (theclass == all_commands
+	  || (theclass == all_classes && c->is_command_class_help ())
+	  || (theclass == c->theclass && !c->is_command_class_help ()))
+	{
+	  /* show C when
+	     - showing all commands
+	     - showing all classes and C is a help class
+	     - showing commands of THECLASS and C is not the help class  */
+
+	  /* If we show the class_alias and C is an alias, do not recurse,
+	     as this would show the (possibly very long) not very useful
+	     list of sub-commands of the aliased command.  */
+	  print_help_for_command
+	    (*c,
+	     recurse && (theclass != class_alias || !c->is_alias ()),
+	     stream);
+	  continue;
+	}
+
+      if (recurse
+	  && (theclass == class_user || theclass == class_alias)
+	  && c->is_prefix ())
+	{
+	  /* User-defined commands or aliases may be subcommands.  */
+	  help_cmd_list (*c->subcommands, theclass, recurse, stream);
+	  continue;
+	}
+
+      /* Do not show C or recurse on C, e.g. because C does not belong to
+	 THECLASS or because C is a help class.  */
     }
 }
 
@@ -1338,7 +2092,7 @@ find_cmd (const char *command, int len,
   *nfound = 0;
   for (c = clist; c; c = c->next)
     if (!strncmp (command, c->name, len)
-	&& (!ignore_help_classes || c->func))
+	&& (!ignore_help_classes || !c->is_command_class_help ()))
       {
 	found = c;
 	(*nfound)++;
@@ -1412,49 +2166,17 @@ valid_user_defined_cmd_name_p (const cha
   return true;
 }
 
-/* This routine takes a line of TEXT and a CLIST in which to start the
-   lookup.  When it returns it will have incremented the text pointer past
-   the section of text it matched, set *RESULT_LIST to point to the list in
-   which the last word was matched, and will return a pointer to the cmd
-   list element which the text matches.  It will return NULL if no match at
-   all was possible.  It will return -1 (cast appropriately, ick) if ambigous
-   matches are possible; in this case *RESULT_LIST will be set to point to
-   the list in which there are ambiguous choices (and *TEXT will be set to
-   the ambiguous text string).
-
-   If the located command was an abbreviation, this routine returns the base
-   command of the abbreviation.
-
-   It does no error reporting whatsoever; control will always return
-   to the superior routine.
-
-   In the case of an ambiguous return (-1), *RESULT_LIST will be set to point
-   at the prefix_command (ie. the best match) *or* (special case) will be NULL
-   if no prefix command was ever found.  For example, in the case of "info a",
-   "info" matches without ambiguity, but "a" could be "args" or "address", so
-   *RESULT_LIST is set to the cmd_list_element for "info".  So in this case
-   RESULT_LIST should not be interpreted as a pointer to the beginning of a
-   list; it simply points to a specific command.  In the case of an ambiguous
-   return *TEXT is advanced past the last non-ambiguous prefix (e.g.
-   "info t" can be "info types" or "info target"; upon return *TEXT has been
-   advanced past "info ").
-
-   If RESULT_LIST is NULL, don't set *RESULT_LIST (but don't otherwise
-   affect the operation).
-
-   This routine does *not* modify the text pointed to by TEXT.
-
-   If IGNORE_HELP_CLASSES is nonzero, ignore any command list elements which
-   are actually help classes rather than commands (i.e. the function field of
-   the struct cmd_list_element is NULL).  */
+/* See command.h.  */
 
 struct cmd_list_element *
 lookup_cmd_1 (const char **text, struct cmd_list_element *clist,
-	      struct cmd_list_element **result_list, int ignore_help_classes)
+	      struct cmd_list_element **result_list, std::string *default_args,
+	      int ignore_help_classes, bool lookup_for_completion_p)
 {
   char *command;
   int len, nfound;
   struct cmd_list_element *found, *c;
+  bool found_alias = false;
   const char *line = *text;
 
   while (**text == ' ' || **text == '\t')
@@ -1486,10 +2208,12 @@ lookup_cmd_1 (const char **text, struct
 
   if (nfound > 1)
     {
-      if (result_list != NULL)
+      if (result_list != nullptr)
 	/* Will be modified in calling routine
 	   if we know what the prefix command is.  */
 	*result_list = 0;
+      if (default_args != nullptr)
+	*default_args = std::string ();
       return CMD_LIST_AMBIGUOUS;	/* Ambiguous.  */
     }
 
@@ -1497,7 +2221,7 @@ lookup_cmd_1 (const char **text, struct
 
   *text += len;
 
-  if (found->cmd_pointer)
+  if (found->is_alias ())
     {
       /* We drop the alias (abbreviation) in favor of the command it
        is pointing to.  If the alias is deprecated, though, we need to
@@ -1505,22 +2229,31 @@ lookup_cmd_1 (const char **text, struct
        are warning about the alias, we may also warn about the command
        itself and we will adjust the appropriate DEPRECATED_WARN_USER
        flags.  */
-      
-      if (found->deprecated_warn_user)
-	deprecated_cmd_warning (line);
-      found = found->cmd_pointer;
+
+      if (found->deprecated_warn_user && !lookup_for_completion_p)
+	deprecated_cmd_warning (line, clist);
+
+
+      /* Return the default_args of the alias, not the default_args
+	 of the command it is pointing to.  */
+      if (default_args != nullptr)
+	*default_args = found->default_args;
+      found = found->alias_target;
+      found_alias = true;
     }
   /* If we found a prefix command, keep looking.  */
 
-  if (found->prefixlist)
+  if (found->is_prefix ())
     {
-      c = lookup_cmd_1 (text, *found->prefixlist, result_list,
-			ignore_help_classes);
+      c = lookup_cmd_1 (text, *found->subcommands, result_list, default_args,
+			ignore_help_classes, lookup_for_completion_p);
       if (!c)
 	{
 	  /* Didn't find anything; this is as far as we got.  */
-	  if (result_list != NULL)
+	  if (result_list != nullptr)
 	    *result_list = clist;
+	  if (!found_alias && default_args != nullptr)
+	    *default_args = found->default_args;
 	  return found;
 	}
       else if (c == CMD_LIST_AMBIGUOUS)
@@ -1528,13 +2261,16 @@ lookup_cmd_1 (const char **text, struct
 	  /* We've gotten this far properly, but the next step is
 	     ambiguous.  We need to set the result list to the best
 	     we've found (if an inferior hasn't already set it).  */
-	  if (result_list != NULL)
+	  if (result_list != nullptr)
 	    if (!*result_list)
-	      /* This used to say *result_list = *found->prefixlist.
-	         If that was correct, need to modify the documentation
-	         at the top of this function to clarify what is
-	         supposed to be going on.  */
+	      /* This used to say *result_list = *found->subcommands.
+		 If that was correct, need to modify the documentation
+		 at the top of this function to clarify what is
+		 supposed to be going on.  */
 	      *result_list = found;
+	  /* For ambiguous commands, do not return any default_args args.  */
+	  if (default_args != nullptr)
+	    *default_args = std::string ();
 	  return c;
 	}
       else
@@ -1545,8 +2281,10 @@ lookup_cmd_1 (const char **text, struct
     }
   else
     {
-      if (result_list != NULL)
+      if (result_list != nullptr)
 	*result_list = clist;
+      if (!found_alias && default_args != nullptr)
+	*default_args = found->default_args;
       return found;
     }
 }
@@ -1566,8 +2304,13 @@ undef_cmd_error (const char *cmdtype, co
 
 /* Look up the contents of *LINE as a command in the command list LIST.
    LIST is a chain of struct cmd_list_element's.
-   If it is found, return the struct cmd_list_element for that command
-   and update *LINE to point after the command name, at the first argument.
+   If it is found, return the struct cmd_list_element for that command,
+   update *LINE to point after the command name, at the first argument
+   and update *DEFAULT_ARGS (if DEFAULT_ARGS is not null) to the default
+   args to prepend to the user provided args when running the command.
+   Note that if the found cmd_list_element is found via an alias,
+   the default args of the alias are returned.
+
    If not found, call error if ALLOW_UNKNOWN is zero
    otherwise (or if error returns) return zero.
    Call error if specified command is ambiguous,
@@ -1581,6 +2324,7 @@ undef_cmd_error (const char *cmdtype, co
 struct cmd_list_element *
 lookup_cmd (const char **line, struct cmd_list_element *list,
 	    const char *cmdtype,
+	    std::string *default_args,
 	    int allow_unknown, int ignore_help_classes)
 {
   struct cmd_list_element *last_list = 0;
@@ -1592,7 +2336,7 @@ lookup_cmd (const char **line, struct cm
   if (!*line)
     error (_("Lack of needed %scommand"), cmdtype);
 
-  c = lookup_cmd_1 (line, list, &last_list, ignore_help_classes);
+  c = lookup_cmd_1 (line, list, &last_list, default_args, ignore_help_classes);
 
   if (!c)
     {
@@ -1611,13 +2355,14 @@ lookup_cmd (const char **line, struct cm
     }
   else if (c == CMD_LIST_AMBIGUOUS)
     {
-      /* Ambigous.  Local values should be off prefixlist or called
-         values.  */
+      /* Ambigous.  Local values should be off subcommands or called
+	 values.  */
       int local_allow_unknown = (last_list ? last_list->allow_unknown :
 				 allow_unknown);
-      const char *local_cmdtype = last_list ? last_list->prefixname : cmdtype;
+      std::string local_cmdtype
+	= last_list ? last_list->prefixname () : cmdtype;
       struct cmd_list_element *local_list =
-	(last_list ? *(last_list->prefixlist) : list);
+	(last_list ? *(last_list->subcommands) : list);
 
       if (local_allow_unknown < 0)
 	{
@@ -1655,22 +2400,22 @@ lookup_cmd (const char **line, struct cm
 		    break;
 		  }
 	      }
-	  error (_("Ambiguous %scommand \"%s\": %s."), local_cmdtype,
-		 *line, ambbuf);
+	  error (_("Ambiguous %scommand \"%s\": %s."),
+		 local_cmdtype.c_str (), *line, ambbuf);
 	}
     }
   else
     {
       if (c->type == set_cmd && **line != '\0' && !isspace (**line))
-        error (_("Argument must be preceded by space."));
+	error (_("Argument must be preceded by space."));
 
       /* We've got something.  It may still not be what the caller
-         wants (if this command *needs* a subcommand).  */
+	 wants (if this command *needs* a subcommand).  */
       while (**line == ' ' || **line == '\t')
 	(*line)++;
 
-      if (c->prefixlist && **line && !c->allow_unknown)
-	undef_cmd_error (c->prefixname, *line);
+      if (c->is_prefix () && **line && !c->allow_unknown)
+	undef_cmd_error (c->prefixname ().c_str (), *line);
 
       /* Seems to be what he wants.  Return it.  */
       return c;
@@ -1678,6 +2423,21 @@ lookup_cmd (const char **line, struct cm
   return 0;
 }
 
+/* See command.h.  */
+
+struct cmd_list_element *
+lookup_cmd_exact (const char *name,
+		  struct cmd_list_element *list,
+		  bool ignore_help_classes)
+{
+  const char *tem = name;
+  struct cmd_list_element *cmd = lookup_cmd (&tem, list, "", NULL, -1,
+					     ignore_help_classes);
+  if (cmd != nullptr && strcmp (name, cmd->name) != 0)
+    cmd = nullptr;
+  return cmd;
+}
+
 /* We are here presumably because an alias or command in TEXT is
    deprecated and a warning message should be generated.  This
    function decodes TEXT and potentially generates a warning message
@@ -1701,152 +2461,184 @@ lookup_cmd (const char **line, struct cm
    
 */
 void
-deprecated_cmd_warning (const char *text)
+deprecated_cmd_warning (const char *text, struct cmd_list_element *list)
 {
-  struct cmd_list_element *alias = NULL;
-  struct cmd_list_element *prefix_cmd = NULL;
-  struct cmd_list_element *cmd = NULL;
+  struct cmd_list_element *alias = nullptr;
+  struct cmd_list_element *cmd = nullptr;
 
-  if (!lookup_cmd_composition (text, &alias, &prefix_cmd, &cmd))
-    /* Return if text doesn't evaluate to a command.  */
-    return;
+  /* Return if text doesn't evaluate to a command.  We place this lookup
+     within its own scope so that the PREFIX_CMD local is not visible
+     later in this function.  The value returned in PREFIX_CMD is based on
+     the prefix found in TEXT, and is our case this prefix can be missing
+     in some situations (when LIST is not the global CMDLIST).
+
+     It is better for our purposes to use the prefix commands directly from
+     the ALIAS and CMD results.  */
+  {
+    struct cmd_list_element *prefix_cmd = nullptr;
+    if (!lookup_cmd_composition_1 (text, &alias, &prefix_cmd, &cmd, list))
+      return;
+  }
 
-  if (!((alias ? alias->deprecated_warn_user : 0)
-      || cmd->deprecated_warn_user) ) 
-    /* Return if nothing is deprecated.  */
+  /* Return if nothing is deprecated.  */
+  if (!((alias != nullptr ? alias->deprecated_warn_user : 0)
+	|| cmd->deprecated_warn_user))
     return;
-  
-  printf_filtered ("Warning:");
-  
-  if (alias && !cmd->cmd_deprecated)
-    printf_filtered (" '%s', an alias for the", alias->name);
-    
-  printf_filtered (" command '");
-  
-  if (prefix_cmd)
-    printf_filtered ("%s", prefix_cmd->prefixname);
-  
-  printf_filtered ("%s", cmd->name);
-
-  if (alias && cmd->cmd_deprecated)
-    printf_filtered ("' (%s) is deprecated.\n", alias->name);
-  else
-    printf_filtered ("' is deprecated.\n"); 
-  
 
-  /* If it is only the alias that is deprecated, we want to indicate
-     the new alias, otherwise we'll indicate the new command.  */
-
-  if (alias && !cmd->cmd_deprecated)
-    {
-      if (alias->replacement)
-	printf_filtered ("Use '%s'.\n\n", alias->replacement);
-      else
-	printf_filtered ("No alternative known.\n\n");
-     }  
-  else
-    {
-      if (cmd->replacement)
-	printf_filtered ("Use '%s'.\n\n", cmd->replacement);
+  /* Join command prefix (if any) and the command name.  */
+  std::string tmp_cmd_str;
+  if (cmd->prefix != nullptr)
+    tmp_cmd_str += cmd->prefix->prefixname ();
+  tmp_cmd_str += std::string (cmd->name);
+
+  /* Display the appropriate first line, this warns that the thing the user
+     entered is deprecated.  */
+  if (alias != nullptr)
+    {
+      /* Join the alias prefix (if any) and the alias name.  */
+      std::string tmp_alias_str;
+      if (alias->prefix != nullptr)
+	tmp_alias_str += alias->prefix->prefixname ();
+      tmp_alias_str += std::string (alias->name);
+
+      if (cmd->cmd_deprecated)
+	gdb_printf (_("Warning: command '%ps' (%ps) is deprecated.\n"),
+		    styled_string (title_style.style (),
+				   tmp_cmd_str.c_str ()),
+		    styled_string (title_style.style (),
+				   tmp_alias_str.c_str ()));
       else
-	printf_filtered ("No alternative known.\n\n");
+	gdb_printf (_("Warning: '%ps', an alias for the command '%ps', "
+		      "is deprecated.\n"),
+		    styled_string (title_style.style (),
+				   tmp_alias_str.c_str ()),
+		    styled_string (title_style.style (),
+				   tmp_cmd_str.c_str ()));
     }
+  else
+    gdb_printf (_("Warning: command '%ps' is deprecated.\n"),
+		styled_string (title_style.style (),
+			       tmp_cmd_str.c_str ()));
+
+  /* Now display a second line indicating what the user should use instead.
+     If it is only the alias that is deprecated, we want to indicate the
+     new alias, otherwise we'll indicate the new command.  */
+  const char *replacement;
+  if (alias != nullptr && !cmd->cmd_deprecated)
+    replacement = alias->replacement;
+  else
+    replacement = cmd->replacement;
+  if (replacement != nullptr)
+    gdb_printf (_("Use '%ps'.\n\n"),
+		styled_string (title_style.style (),
+			       replacement));
+  else
+    gdb_printf (_("No alternative known.\n\n"));
 
   /* We've warned you, now we'll keep quiet.  */
-  if (alias)
+  if (alias != nullptr)
     alias->deprecated_warn_user = 0;
-  
   cmd->deprecated_warn_user = 0;
 }
 
-
-/* Look up the contents of LINE as a command in the command list 'cmdlist'.
+/* Look up the contents of TEXT as a command in the command list CUR_LIST.
    Return 1 on success, 0 on failure.
-   
-   If LINE refers to an alias, *alias will point to that alias.
-   
-   If LINE is a postfix command (i.e. one that is preceded by a prefix
-   command) set *prefix_cmd.
-   
-   Set *cmd to point to the command LINE indicates.
-   
-   If any of *alias, *prefix_cmd, or *cmd cannot be determined or do not 
+
+   If TEXT refers to an alias, *ALIAS will point to that alias.
+
+   If TEXT is a subcommand (i.e. one that is preceded by a prefix
+   command) set *PREFIX_CMD.
+
+   Set *CMD to point to the command TEXT indicates.
+
+   If any of *ALIAS, *PREFIX_CMD, or *CMD cannot be determined or do not
    exist, they are NULL when we return.
-   
+
 */
-int
-lookup_cmd_composition (const char *text,
-                      struct cmd_list_element **alias,
-                      struct cmd_list_element **prefix_cmd, 
-                      struct cmd_list_element **cmd)
-{
-  char *command;
-  int len, nfound;
-  struct cmd_list_element *cur_list;
-  struct cmd_list_element *prev_cmd;
 
-  *alias = NULL;
-  *prefix_cmd = NULL;
-  *cmd = NULL;
-  
-  cur_list = cmdlist;
-  
+static int
+lookup_cmd_composition_1 (const char *text,
+			  struct cmd_list_element **alias,
+			  struct cmd_list_element **prefix_cmd,
+			  struct cmd_list_element **cmd,
+			  struct cmd_list_element *cur_list)
+{
+  *alias = nullptr;
+  *prefix_cmd = cur_list->prefix;
+  *cmd = nullptr;
+
+  text = skip_spaces (text);
+
+  /* Go through as many command lists as we need to, to find the command
+     TEXT refers to.  */
   while (1)
-    { 
-      /* Go through as many command lists as we need to,
-	 to find the command TEXT refers to.  */
-      
-      prev_cmd = *cmd;
-      
-      while (*text == ' ' || *text == '\t')
-	(text)++;
-      
+    {
       /* Identify the name of the command.  */
-      len = find_command_name_length (text);
-      
+      int len = find_command_name_length (text);
+
       /* If nothing but whitespace, return.  */
       if (len == 0)
 	return 0;
-      
-      /* Text is the start of the first command word to lookup (and
-	 it's length is len).  We copy this into a local temporary.  */
-      
-      command = (char *) alloca (len + 1);
-      memcpy (command, text, len);
-      command[len] = '\0';
-      
+
+      /* TEXT is the start of the first command word to lookup (and
+	 it's length is LEN).  We copy this into a local temporary.  */
+      std::string command (text, len);
+
       /* Look it up.  */
-      *cmd = 0;
-      nfound = 0;
-      *cmd = find_cmd (command, len, cur_list, 1, &nfound);
-      
-      if (*cmd == CMD_LIST_AMBIGUOUS)
-	{
-	  return 0;              /* ambiguous */
-	}
-      
-      if (*cmd == NULL)
-	return 0;                /* nothing found */
+      int nfound = 0;
+      *cmd = find_cmd (command.c_str (), len, cur_list, 1, &nfound);
+
+      /* We only handle the case where a single command was found.  */
+      if (*cmd == CMD_LIST_AMBIGUOUS || *cmd == nullptr)
+	return 0;
       else
 	{
-	  if ((*cmd)->cmd_pointer)
+	  if ((*cmd)->is_alias ())
 	    {
-	      /* cmd was actually an alias, we note that an alias was
-		 used (by assigning *alais) and we set *cmd.  */
+	      /* If the command was actually an alias, we note that an
+		 alias was used (by assigning *ALIAS) and we set *CMD.  */
 	      *alias = *cmd;
-	      *cmd = (*cmd)->cmd_pointer;
+	      *cmd = (*cmd)->alias_target;
 	    }
-	  *prefix_cmd = prev_cmd;
 	}
-      if ((*cmd)->prefixlist)
-	cur_list = *(*cmd)->prefixlist;
+
+      text += len;
+      text = skip_spaces (text);
+
+      if ((*cmd)->is_prefix () && *text != '\0')
+	{
+	  cur_list = *(*cmd)->subcommands;
+	  *prefix_cmd = *cmd;
+	}
       else
 	return 1;
-      
-      text += len;
     }
 }
 
+/* Look up the contents of TEXT as a command in the command list 'cmdlist'.
+   Return 1 on success, 0 on failure.
+
+   If TEXT refers to an alias, *ALIAS will point to that alias.
+
+   If TEXT is a subcommand (i.e. one that is preceded by a prefix
+   command) set *PREFIX_CMD.
+
+   Set *CMD to point to the command TEXT indicates.
+
+   If any of *ALIAS, *PREFIX_CMD, or *CMD cannot be determined or do not
+   exist, they are NULL when we return.
+
+*/
+
+int
+lookup_cmd_composition (const char *text,
+			struct cmd_list_element **alias,
+			struct cmd_list_element **prefix_cmd,
+			struct cmd_list_element **cmd)
+{
+  return lookup_cmd_composition_1 (text, alias, prefix_cmd, cmd, cmdlist);
+}
+
 /* Helper function for SYMBOL_COMPLETION_FUNCTION.  */
 
 /* Return a vector of char pointers which point to the different
@@ -1879,8 +2671,8 @@ complete_on_cmdlist (struct cmd_list_ele
       for (ptr = list; ptr; ptr = ptr->next)
 	if (!strncmp (ptr->name, text, textlen)
 	    && !ptr->abbrev_flag
-	    && (!ignore_help_classes || ptr->func
-		|| ptr->prefixlist))
+	    && (!ignore_help_classes || !ptr->is_command_class_help ()
+		|| ptr->is_prefix ()))
 	  {
 	    if (pass == 0)
 	      {
@@ -1929,27 +2721,18 @@ complete_on_enum (completion_tracker &tr
       tracker.add_completion (make_completion_match_str (name, text, word));
 }
 
-
-/* Check function pointer.  */
-int
-cmd_func_p (struct cmd_list_element *cmd)
-{
-  return (cmd->func != NULL);
-}
-
-
 /* Call the command function.  */
 void
 cmd_func (struct cmd_list_element *cmd, const char *args, int from_tty)
 {
-  if (cmd_func_p (cmd))
+  if (!cmd->is_command_class_help ())
     {
-      gdb::optional<scoped_restore_tmpl<int>> restore_suppress;
+      std::optional<scoped_restore_tmpl<bool>> restore_suppress;
 
       if (cmd->suppress_notification != NULL)
-	restore_suppress.emplace (cmd->suppress_notification, 1);
+	restore_suppress.emplace (cmd->suppress_notification, true);
 
-      (*cmd->func) (cmd, args, from_tty);
+      cmd->func (args, from_tty, cmd);
     }
   else
     error (_("Invalid command"));
@@ -1958,6 +2741,5 @@ cmd_func (struct cmd_list_element *cmd,
 int
 cli_user_command_p (struct cmd_list_element *cmd)
 {
-  return (cmd->theclass == class_user
-	  && (cmd->func == do_const_cfunc || cmd->func == do_sfunc));
+  return cmd->theclass == class_user && cmd->func == do_simple_func;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-decode.h ./gdb/cli/cli-decode.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-decode.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-decode.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Header file for GDB command decoding library.
 
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -23,241 +23,267 @@
 
 /* Include the public interfaces.  */
 #include "command.h"
-#include "gdb_regex.h"
+#include "gdbsupport/gdb_regex.h"
 #include "cli-script.h"
 #include "completer.h"
+#include "gdbsupport/intrusive_list.h"
+#include "gdbsupport/buildargv.h"
 
-#if 0
-/* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
-   cmd_types'' can be moved from "command.h" to "cli-decode.h".  */
 /* Not a set/show command.  Note that some commands which begin with
    "set" or "show" might be in this category, if their syntax does
    not fall into one of the following categories.  */
-typedef enum cmd_types
-  {
-    not_set_cmd,
-    set_cmd,
-    show_cmd
-  }
-cmd_types;
-#endif
+enum cmd_types
+{
+  not_set_cmd,
+  set_cmd,
+  show_cmd
+};
 
 /* This structure records one command'd definition.  */
 
 
 struct cmd_list_element
+{
+  cmd_list_element (const char *name_, enum command_class theclass_,
+		    const char *doc_)
+    : name (name_),
+      theclass (theclass_),
+      cmd_deprecated (0),
+      deprecated_warn_user (0),
+      malloced_replacement (0),
+      doc_allocated (0),
+      name_allocated (0),
+      hook_in (0),
+      allow_unknown (0),
+      abbrev_flag (0),
+      type (not_set_cmd),
+      doc (doc_)
   {
-    cmd_list_element (const char *name_, enum command_class theclass_,
-		      const char *doc_)
-      : name (name_),
-	theclass (theclass_),
-	cmd_deprecated (0),
-	deprecated_warn_user (0),
-	malloced_replacement (0),
-	doc_allocated (0),
-	name_allocated (0),
-	hook_in (0),
-	allow_unknown (0),
-	abbrev_flag (0),
-	type (not_set_cmd),
-	var_type (var_boolean),
-	doc (doc_)
-    {
-      memset (&function, 0, sizeof (function));
-    }
+    memset (&function, 0, sizeof (function));
+  }
 
-    ~cmd_list_element ()
-    {
-      if (doc && doc_allocated)
-	xfree ((char *) doc);
-      if (name_allocated)
-	xfree ((char *) name);
-    }
+  ~cmd_list_element ()
+  {
+    if (doc && doc_allocated)
+      xfree ((char *) doc);
+    if (name_allocated)
+      xfree ((char *) name);
+  }
+
+  DISABLE_COPY_AND_ASSIGN (cmd_list_element);
+
+  /* For prefix commands, return a string containing prefix commands to
+     get here: this one plus any others needed to get to it.  Ends in a
+     space.  It is used before the word "command" in describing the
+     commands reached through this prefix.
+
+     For non-prefix commands, return an empty string.  */
+  std::string prefixname () const;
+
+  /* Return a vector of strings describing the components of the full name
+     of this command.  For example, if this command is 'set AA BB CC',
+     then the vector will contain 4 elements 'set', 'AA', 'BB', and 'CC'
+     in that order.  */
+  std::vector<std::string> command_components () const;
+
+  /* Return true if this command is an alias of another command.  */
+  bool is_alias () const
+  { return this->alias_target != nullptr; }
+
+  /* Return true if this command is a prefix command.  */
+  bool is_prefix () const
+  { return this->subcommands != nullptr; }
+
+  /* Return true if this command is a "command class help" command.  For
+     instance, a "stack" dummy command is registered so that one can do
+     "help stack" and show help for all commands of the "stack" class.  */
+  bool is_command_class_help () const
+  { return this->func == nullptr; }
+
+  void set_context (void *context)
+  {
+    gdb_assert (m_context == nullptr);
+    m_context = context;
+  }
+
+  void *context () const
+  { return m_context; }
+
+  /* Points to next command in this list.  */
+  struct cmd_list_element *next = nullptr;
 
-    DISABLE_COPY_AND_ASSIGN (cmd_list_element);
+  /* Name of this command.  */
+  const char *name;
 
+  /* Command class; class values are chosen by application program.  */
+  enum command_class theclass;
 
-    /* Points to next command in this list.  */
-    struct cmd_list_element *next = nullptr;
+  /* When 1 indicated that this command is deprecated.  It may be
+     removed from gdb's command set in the future.  */
 
-    /* Name of this command.  */
-    const char *name;
+  unsigned int cmd_deprecated : 1;
 
-    /* Command class; class values are chosen by application program.  */
-    enum command_class theclass;
-
-    /* When 1 indicated that this command is deprecated.  It may be
-       removed from gdb's command set in the future.  */
-
-    unsigned int cmd_deprecated : 1;
-
-    /* The user needs to be warned that this is a deprecated command.
-       The user should only be warned the first time a command is
-       used.  */
-        
-    unsigned int deprecated_warn_user : 1;
-
-    /* When functions are deprecated at compile time (this is the way
-       it should, in general, be done) the memory containing the
-       replacement string is statically allocated.  In some cases it
-       makes sense to deprecate commands at runtime (the testsuite is
-       one example).  In this case the memory for replacement is
-       malloc'ed.  When a command is undeprecated or re-deprecated at
-       runtime we don't want to risk calling free on statically
-       allocated memory, so we check this flag.  */
-
-    unsigned int malloced_replacement : 1;
-
-    /* Set if the doc field should be xfree'd.  */
-
-    unsigned int doc_allocated : 1;
-
-    /* Set if the name field should be xfree'd.  */
-
-    unsigned int name_allocated : 1;
-
-    /* Flag that specifies if this command is already running its hook.  */
-    /* Prevents the possibility of hook recursion.  */
-    unsigned int hook_in : 1;
-
-    /* For prefix commands only:
-       nonzero means do not get an error if subcommand is not
-       recognized; call the prefix's own function in that case.  */
-    unsigned int allow_unknown : 1;
-
-    /* Nonzero says this is an abbreviation, and should not
-       be mentioned in lists of commands.
-       This allows "br<tab>" to complete to "break", which it
-       otherwise wouldn't.  */
-    unsigned int abbrev_flag : 1;
-
-    /* Type of "set" or "show" command (or SET_NOT_SET if not "set"
-       or "show").  */
-    ENUM_BITFIELD (cmd_types) type : 2;
-
-    /* What kind of variable is *VAR?  */
-    ENUM_BITFIELD (var_types) var_type : 4;
-
-    /* Function definition of this command.  NULL for command class
-       names and for help topics that are not really commands.  NOTE:
-       cagney/2002-02-02: This function signature is evolving.  For
-       the moment suggest sticking with either set_cmd_cfunc() or
-       set_cmd_sfunc().  */
-    void (*func) (struct cmd_list_element *c, const char *args, int from_tty)
-      = nullptr;
-    /* The command's real callback.  At present func() bounces through
-       to one of the below.  */
-    union
-      {
-	/* If type is not_set_cmd, call it like this: */
-	cmd_const_cfunc_ftype *const_cfunc;
-	/* If type is set_cmd or show_cmd, first set the variables,
-	   and then call this: */
-	cmd_const_sfunc_ftype *sfunc;
-      }
-    function;
-
-    /* Local state (context) for this command.  This can be anything.  */
-    void *context = nullptr;
-
-    /* Documentation of this command (or help topic).
-       First line is brief documentation; remaining lines form, with it,
-       the full documentation.  First line should end with a period.
-       Entire string should also end with a period, not a newline.  */
-    const char *doc;
-
-    /* For set/show commands.  A method for printing the output to the
-       specified stream.  */
-    show_value_ftype *show_value_func = nullptr;
-
-    /* If this command is deprecated, this is the replacement name.  */
-    const char *replacement = nullptr;
-
-    /* If this command represents a show command, then this function
-       is called before the variable's value is examined.  */
-    void (*pre_show_hook) (struct cmd_list_element *c) = nullptr;
-
-    /* Hook for another command to be executed before this command.  */
-    struct cmd_list_element *hook_pre = nullptr;
-
-    /* Hook for another command to be executed after this command.  */
-    struct cmd_list_element *hook_post = nullptr;
-
-    /* Nonzero identifies a prefix command.  For them, the address
-       of the variable containing the list of subcommands.  */
-    struct cmd_list_element **prefixlist = nullptr;
-
-    /* For prefix commands only:
-       String containing prefix commands to get here: this one
-       plus any others needed to get to it.  Should end in a space.
-       It is used before the word "command" in describing the
-       commands reached through this prefix.  */
-    const char *prefixname = nullptr;
-
-    /* The prefix command of this command.  */
-    struct cmd_list_element *prefix = nullptr;
-
-    /* Completion routine for this command.  */
-    completer_ftype *completer = symbol_completer;
-
-    /* Handle the word break characters for this completer.  Usually
-       this function need not be defined, but for some types of
-       completers (e.g., Python completers declared as methods inside
-       a class) the word break chars may need to be redefined
-       depending on the completer type (e.g., for filename
-       completers).  */
-    completer_handle_brkchars_ftype *completer_handle_brkchars = nullptr;
-
-    /* Destruction routine for this command.  If non-NULL, this is
-       called when this command instance is destroyed.  This may be
-       used to finalize the CONTEXT field, if needed.  */
-    void (*destroyer) (struct cmd_list_element *self, void *context) = nullptr;
-
-    /* Pointer to variable affected by "set" and "show".  Doesn't
-       matter if type is not_set.  */
-    void *var = nullptr;
-
-    /* Pointer to NULL terminated list of enumerated values (like
-       argv).  */
-    const char *const *enums = nullptr;
-
-    /* Pointer to command strings of user-defined commands */
-    counted_command_line user_commands;
-
-    /* Pointer to command that is hooked by this one, (by hook_pre)
-       so the hook can be removed when this one is deleted.  */
-    struct cmd_list_element *hookee_pre = nullptr;
-
-    /* Pointer to command that is hooked by this one, (by hook_post)
-       so the hook can be removed when this one is deleted.  */
-    struct cmd_list_element *hookee_post = nullptr;
-
-    /* Pointer to command that is aliased by this one, so the
-       aliased command can be located in case it has been hooked.  */
-    struct cmd_list_element *cmd_pointer = nullptr;
-
-    /* Start of a linked list of all aliases of this command.  */
-    struct cmd_list_element *aliases = nullptr;
-
-    /* Link pointer for aliases on an alias list.  */
-    struct cmd_list_element *alias_chain = nullptr;
-
-    /* If non-null, the pointer to a field in 'struct
-       cli_suppress_notification', which will be set to true in cmd_func
-       when this command is being executed.  It will be set back to false
-       when the command has been executed.  */
-    int *suppress_notification = nullptr;
-  };
+  /* The user needs to be warned that this is a deprecated command.
+     The user should only be warned the first time a command is
+     used.  */
+
+  unsigned int deprecated_warn_user : 1;
+
+  /* When functions are deprecated at compile time (this is the way
+     it should, in general, be done) the memory containing the
+     replacement string is statically allocated.  In some cases it
+     makes sense to deprecate commands at runtime (the testsuite is
+     one example).  In this case the memory for replacement is
+     malloc'ed.  When a command is undeprecated or re-deprecated at
+     runtime we don't want to risk calling free on statically
+     allocated memory, so we check this flag.  */
+
+  unsigned int malloced_replacement : 1;
+
+  /* Set if the doc field should be xfree'd.  */
+
+  unsigned int doc_allocated : 1;
+
+  /* Set if the name field should be xfree'd.  */
+
+  unsigned int name_allocated : 1;
+
+  /* Flag that specifies if this command is already running its hook.  */
+  /* Prevents the possibility of hook recursion.  */
+  unsigned int hook_in : 1;
+
+  /* For prefix commands only:
+     nonzero means do not get an error if subcommand is not
+     recognized; call the prefix's own function in that case.  */
+  unsigned int allow_unknown : 1;
+
+  /* Nonzero says this is an abbreviation, and should not
+     be mentioned in lists of commands.
+     This allows "br<tab>" to complete to "break", which it
+     otherwise wouldn't.  */
+  unsigned int abbrev_flag : 1;
+
+  /* Type of "set" or "show" command (or SET_NOT_SET if not "set"
+     or "show").  */
+  ENUM_BITFIELD (cmd_types) type : 2;
+
+  /* Function definition of this command.  NULL for command class
+     names and for help topics that are not really commands.  NOTE:
+     cagney/2002-02-02: This function signature is evolving.  For
+     the moment suggest sticking with either set_cmd_cfunc() or
+     set_cmd_sfunc().  */
+  cmd_func_ftype *func;
+
+  /* The command's real callback.  At present func() bounces through
+     to one of the below.  */
+  union
+    {
+      /* Most commands don't need the cmd_list_element parameter passed to FUNC.
+	 They therefore register a command of this type, which doesn't have the
+	 cmd_list_element parameter.  do_simple_func is installed as FUNC, and
+	 acts as a shim between the two.  */
+      cmd_simple_func_ftype *simple_func;
+    }
+  function;
 
-extern void help_cmd_list (struct cmd_list_element *, enum command_class,
-			   const char *, int, struct ui_file *);
+  /* Documentation of this command (or help topic).
+     First line is brief documentation; remaining lines form, with it,
+     the full documentation.  First line should end with a period.
+     Entire string should also end with a period, not a newline.  */
+  const char *doc;
+
+  /* For set/show commands.  A method for printing the output to the
+     specified stream.  */
+  show_value_ftype *show_value_func = nullptr;
+
+  /* If this command is deprecated, this is the replacement name.  */
+  const char *replacement = nullptr;
+
+  /* Hook for another command to be executed before this command.  */
+  struct cmd_list_element *hook_pre = nullptr;
+
+  /* Hook for another command to be executed after this command.  */
+  struct cmd_list_element *hook_post = nullptr;
+
+  /* Default arguments to automatically prepend to the user
+     provided arguments when running this command or alias.  */
+  std::string default_args;
+
+  /* Nonzero identifies a prefix command.  For them, the address
+     of the variable containing the list of subcommands.  */
+  struct cmd_list_element **subcommands = nullptr;
+
+  /* The prefix command of this command.  */
+  struct cmd_list_element *prefix = nullptr;
+
+  /* Completion routine for this command.  */
+  completer_ftype *completer = symbol_completer;
+
+  /* Handle the word break characters for this completer.  Usually
+     this function need not be defined, but for some types of
+     completers (e.g., Python completers declared as methods inside
+     a class) the word break chars may need to be redefined
+     depending on the completer type (e.g., for filename
+     completers).  */
+  completer_handle_brkchars_ftype *completer_handle_brkchars = nullptr;
+
+  /* Destruction routine for this command.  If non-NULL, this is
+     called when this command instance is destroyed.  This may be
+     used to finalize the CONTEXT field, if needed.  */
+  void (*destroyer) (struct cmd_list_element *self, void *context) = nullptr;
+
+  /* Setting affected by "set" and "show".  Not used if type is not_set_cmd.  */
+  std::optional<setting> var;
+
+  /* Pointer to NULL terminated list of enumerated values (like
+     argv).  */
+  const char *const *enums = nullptr;
+
+  /* Pointer to command strings of user-defined commands */
+  counted_command_line user_commands;
+
+  /* Pointer to command that is hooked by this one, (by hook_pre)
+     so the hook can be removed when this one is deleted.  */
+  struct cmd_list_element *hookee_pre = nullptr;
+
+  /* Pointer to command that is hooked by this one, (by hook_post)
+     so the hook can be removed when this one is deleted.  */
+  struct cmd_list_element *hookee_post = nullptr;
+
+  /* Pointer to command that is aliased by this one, so the
+     aliased command can be located in case it has been hooked.  */
+  struct cmd_list_element *alias_target = nullptr;
+
+  /* Node to link aliases on an alias list.  */
+  using aliases_list_node_type
+    = intrusive_list_node<cmd_list_element>;
+  aliases_list_node_type aliases_list_node;
+
+  /* Linked list of all aliases of this command.  */
+  using aliases_list_member_node_type
+    = intrusive_member_node<cmd_list_element,
+			    &cmd_list_element::aliases_list_node>;
+  using aliases_list_type
+    = intrusive_list<cmd_list_element, aliases_list_member_node_type>;
+  aliases_list_type aliases;
+
+  /* If non-null, the pointer to a field in 'struct
+     cli_suppress_notification', which will be set to true in cmd_func
+     when this command is being executed.  It will be set back to false
+     when the command has been executed.  */
+  bool *suppress_notification = nullptr;
+
+private:
+  /* Local state (context) for this command.  This can be anything.  */
+  void *m_context = nullptr;
+};
 
 /* Functions that implement commands about CLI commands.  */
 
 extern void help_cmd (const char *, struct ui_file *);
 
 extern void apropos_cmd (struct ui_file *, struct cmd_list_element *,
-			 bool verbose, compiled_regex &, const char *);
+			 bool verbose, compiled_regex &);
 
 /* Used to mark commands that don't do anything.  If we just leave the
    function field NULL, the command is interpreted as a help topic, or
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-dump.c ./gdb/cli/cli-dump.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-dump.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-dump.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Dump-to-file commands, for GDB, the GNU debugger.
 
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    Contributed by Red Hat.
 
@@ -33,6 +33,7 @@
 #include "gdbsupport/filestuff.h"
 #include "gdbsupport/byte-vector.h"
 #include "gdbarch.h"
+#include "inferior.h"
 
 static gdb::unique_xmalloc_ptr<char>
 scan_expression (const char **cmd, const char *def)
@@ -129,26 +130,15 @@ static struct cmd_list_element *binary_d
 static struct cmd_list_element *binary_append_cmdlist;
 
 static void
-dump_command (const char *cmd, int from_tty)
-{
-  printf_unfiltered (_("\"dump\" must be followed by a subcommand.\n\n"));
-  help_list (dump_cmdlist, "dump ", all_commands, gdb_stdout);
-}
-
-static void
-append_command (const char *cmd, int from_tty)
-{
-  printf_unfiltered (_("\"append\" must be followed by a subcommand.\n\n"));
-  help_list (dump_cmdlist, "append ", all_commands, gdb_stdout);
-}
-
-static void
 dump_binary_file (const char *filename, const char *mode, 
 		  const bfd_byte *buf, ULONGEST len)
 {
   int status;
 
   gdb_file_up file = gdb_fopen_cloexec (filename, mode);
+  if (file == nullptr)
+    perror_with_name (filename);
+
   status = fwrite (buf, len, 1, file.get ());
   if (status != 1)
     perror_with_name (filename);
@@ -235,15 +225,15 @@ dump_value_to_file (const char *cmd, con
 
   /* Have everything.  Open/write the data.  */
   if (file_format == NULL || strcmp (file_format, "binary") == 0)
-    dump_binary_file (filename.get (), mode, value_contents (val),
-		      TYPE_LENGTH (value_type (val)));
+    dump_binary_file (filename.get (), mode, val->contents ().data (),
+		      val->type ()->length ());
   else
     {
       CORE_ADDR vaddr;
 
-      if (VALUE_LVAL (val))
+      if (val->lval ())
 	{
-	  vaddr = value_address (val);
+	  vaddr = val->address ();
 	}
       else
 	{
@@ -252,8 +242,8 @@ dump_value_to_file (const char *cmd, con
 	}
 
       dump_bfd_file (filename.get (), mode, file_format, vaddr,
-		     value_contents (val), 
-		     TYPE_LENGTH (value_type (val)));
+		     val->contents ().data (), 
+		     val->type ()->length ());
     }
 }
 
@@ -342,9 +332,9 @@ struct dump_context
 };
 
 static void
-call_dump_func (struct cmd_list_element *c, const char *args, int from_tty)
+call_dump_func (const char *args, int from_tty, cmd_list_element *c)
 {
-  struct dump_context *d = (struct dump_context *) get_cmd_context (c);
+  struct dump_context *d = (struct dump_context *) c->context ();
 
   d->func (args, d->mode);
 }
@@ -363,7 +353,7 @@ add_dump_command (const char *name,
   d = XNEW (struct dump_context);
   d->func = func;
   d->mode = FOPEN_WB;
-  set_cmd_context (c, d);
+  c->set_context (d);
   c->func = call_dump_func;
 
   c = add_cmd (name, all_commands, descr, &append_cmdlist);
@@ -371,7 +361,7 @@ add_dump_command (const char *name,
   d = XNEW (struct dump_context);
   d->func = func;
   d->mode = FOPEN_AB;
-  set_cmd_context (c, d);
+  c->set_context (d);
   c->func = call_dump_func;
 
   /* Replace "Dump " at start of docstring with "Append " (borrowed
@@ -385,22 +375,14 @@ add_dump_command (const char *name,
     c->doc = concat ("Append ", c->doc + 6, (char *)NULL);
 }
 
-/* Opaque data for restore_section_callback.  */
-struct callback_data {
-  CORE_ADDR load_offset;
-  CORE_ADDR load_start;
-  CORE_ADDR load_end;
-};
-
-/* Function: restore_section_callback.
-
-   Callback function for bfd_map_over_sections.
-   Selectively loads the sections into memory.  */
+/* Selectively loads the sections into memory.  */
 
 static void
-restore_section_callback (bfd *ibfd, asection *isec, void *args)
+restore_one_section (bfd *ibfd, asection *isec,
+		     CORE_ADDR load_offset,
+		     CORE_ADDR load_start,
+		     CORE_ADDR load_end)
 {
-  struct callback_data *data = (struct callback_data *) args;
   bfd_vma sec_start  = bfd_section_vma (isec);
   bfd_size_type size = bfd_section_size (isec);
   bfd_vma sec_end    = sec_start + size;
@@ -413,24 +395,24 @@ restore_section_callback (bfd *ibfd, ase
     return;
 
   /* Does the section overlap with the desired restore range? */
-  if (sec_end <= data->load_start 
-      || (data->load_end > 0 && sec_start >= data->load_end))
+  if (sec_end <= load_start
+      || (load_end > 0 && sec_start >= load_end))
     {
       /* No, no useable data in this section.  */
-      printf_filtered (_("skipping section %s...\n"), 
-		       bfd_section_name (isec));
+      gdb_printf (_("skipping section %s...\n"), 
+		  bfd_section_name (isec));
       return;
     }
 
   /* Compare section address range with user-requested
      address range (if any).  Compute where the actual
      transfer should start and end.  */
-  if (sec_start < data->load_start)
-    sec_offset = data->load_start - sec_start;
+  if (sec_start < load_start)
+    sec_offset = load_start - sec_start;
   /* Size of a partial transfer.  */
   sec_load_count -= sec_offset;
-  if (data->load_end > 0 && sec_end > data->load_end)
-    sec_load_count -= sec_end - data->load_end;
+  if (load_end > 0 && sec_end > load_end)
+    sec_load_count -= sec_end - load_end;
 
   /* Get the data.  */
   gdb::byte_vector buf (size);
@@ -438,31 +420,33 @@ restore_section_callback (bfd *ibfd, ase
     error (_("Failed to read bfd file %s: '%s'."), bfd_get_filename (ibfd), 
 	   bfd_errmsg (bfd_get_error ()));
 
-  printf_filtered ("Restoring section %s (0x%lx to 0x%lx)",
-		   bfd_section_name (isec), 
-		   (unsigned long) sec_start, 
-		   (unsigned long) sec_end);
-
-  if (data->load_offset != 0 || data->load_start != 0 || data->load_end != 0)
-    printf_filtered (" into memory (%s to %s)\n",
-		     paddress (target_gdbarch (),
-			       (unsigned long) sec_start
-			       + sec_offset + data->load_offset), 
-		     paddress (target_gdbarch (),
-			       (unsigned long) sec_start + sec_offset
-				+ data->load_offset + sec_load_count));
+  gdb_printf ("Restoring section %s (0x%lx to 0x%lx)",
+	      bfd_section_name (isec), 
+	      (unsigned long) sec_start, 
+	      (unsigned long) sec_end);
+
+  if (load_offset != 0 || load_start != 0 || load_end != 0)
+    gdb_printf (" into memory (%s to %s)\n",
+		paddress (current_inferior ()->arch (),
+			  (unsigned long) sec_start
+			  + sec_offset + load_offset),
+		paddress (current_inferior ()->arch (),
+			  (unsigned long) sec_start + sec_offset
+			  + load_offset + sec_load_count));
   else
-    puts_filtered ("\n");
+    gdb_puts ("\n");
 
   /* Write the data.  */
-  ret = target_write_memory (sec_start + sec_offset + data->load_offset, 
+  ret = target_write_memory (sec_start + sec_offset + load_offset,
 			     &buf[sec_offset], sec_load_count);
   if (ret != 0)
     warning (_("restore: memory write failed (%s)."), safe_strerror (ret));
 }
 
 static void
-restore_binary_file (const char *filename, struct callback_data *data)
+restore_binary_file (const char *filename, CORE_ADDR load_offset,
+		     CORE_ADDR load_start, CORE_ADDR load_end)
+
 {
   gdb_file_up file = gdb_fopen_cloexec (filename, FOPEN_RB);
   long len;
@@ -480,25 +464,25 @@ restore_binary_file (const char *filenam
   else
     perror_with_name (filename);
 
-  if (len <= data->load_start)
+  if (len <= load_start)
     error (_("Start address is greater than length of binary file %s."), 
 	   filename);
 
   /* Chop off "len" if it exceeds the requested load_end addr.  */
-  if (data->load_end != 0 && data->load_end < len)
-    len = data->load_end;
+  if (load_end != 0 && load_end < len)
+    len = load_end;
   /* Chop off "len" if the requested load_start addr skips some bytes.  */
-  if (data->load_start > 0)
-    len -= data->load_start;
+  if (load_start > 0)
+    len -= load_start;
 
-  printf_filtered 
+  gdb_printf 
     ("Restoring binary file %s into memory (0x%lx to 0x%lx)\n", 
      filename, 
-     (unsigned long) (data->load_start + data->load_offset),
-     (unsigned long) (data->load_start + data->load_offset + len));
+     (unsigned long) (load_start + load_offset),
+     (unsigned long) (load_start + load_offset + len));
 
   /* Now set the file pos to the requested load start pos.  */
-  if (fseek (file.get (), data->load_start, SEEK_SET) != 0)
+  if (fseek (file.get (), load_start, SEEK_SET) != 0)
     perror_with_name (filename);
 
   /* Now allocate a buffer and read the file contents.  */
@@ -507,8 +491,7 @@ restore_binary_file (const char *filenam
     perror_with_name (filename);
 
   /* Now write the buffer into target memory.  */
-  len = target_write_memory (data->load_start + data->load_offset,
-			     buf.data (), len);
+  len = target_write_memory (load_start + load_offset, buf.data (), len);
   if (len != 0)
     warning (_("restore: memory write failed (%s)."), safe_strerror (len));
 }
@@ -516,15 +499,14 @@ restore_binary_file (const char *filenam
 static void
 restore_command (const char *args, int from_tty)
 {
-  struct callback_data data;
   int binary_flag = 0;
 
-  if (!target_has_execution)
+  if (!target_has_execution ())
     noprocess ();
 
-  data.load_offset = 0;
-  data.load_start  = 0;
-  data.load_end    = 0;
+  CORE_ADDR load_offset = 0;
+  CORE_ADDR load_start  = 0;
+  CORE_ADDR load_end    = 0;
 
   /* Parse the input arguments.  First is filename (required).  */
   gdb::unique_xmalloc_ptr<char> filename = scan_filename (&args, NULL);
@@ -541,33 +523,35 @@ restore_command (const char *args, int f
 	}
       /* Parse offset (optional).  */
       if (args != NULL && *args != '\0')
-	data.load_offset = binary_flag ?
-	  parse_and_eval_address (scan_expression (&args, NULL).get ()) :
-	  parse_and_eval_long (scan_expression (&args, NULL).get ());
+	load_offset
+	  = (binary_flag
+	     ? parse_and_eval_address (scan_expression (&args, NULL).get ())
+	     : parse_and_eval_long (scan_expression (&args, NULL).get ()));
       if (args != NULL && *args != '\0')
 	{
 	  /* Parse start address (optional).  */
-	  data.load_start = 
+	  load_start =
 	    parse_and_eval_long (scan_expression (&args, NULL).get ());
 	  if (args != NULL && *args != '\0')
 	    {
 	      /* Parse end address (optional).  */
-	      data.load_end = parse_and_eval_long (args);
-	      if (data.load_end <= data.load_start)
+	      load_end = parse_and_eval_long (args);
+	      if (load_end <= load_start)
 		error (_("Start must be less than end."));
 	    }
 	}
     }
 
   if (info_verbose)
-    printf_filtered ("Restore file %s offset 0x%lx start 0x%lx end 0x%lx\n",
-		     filename.get (), (unsigned long) data.load_offset,
-		     (unsigned long) data.load_start, 
-		     (unsigned long) data.load_end);
+    gdb_printf ("Restore file %s offset 0x%lx start 0x%lx end 0x%lx\n",
+		filename.get (), (unsigned long) load_offset,
+		(unsigned long) load_start,
+		(unsigned long) load_end);
 
   if (binary_flag)
     {
-      restore_binary_file (filename.get (), &data);
+      restore_binary_file (filename.get (), load_offset, load_start,
+			   load_end);
     }
   else
     {
@@ -575,68 +559,28 @@ restore_command (const char *args, int f
       gdb_bfd_ref_ptr ibfd (bfd_openr_or_error (filename.get (), NULL));
 
       /* Process the sections.  */
-      bfd_map_over_sections (ibfd.get (), restore_section_callback, &data);
+      for (asection *sect : gdb_bfd_sections (ibfd))
+	restore_one_section (ibfd.get (), sect, load_offset, load_start,
+			     load_end);
     }
 }
 
-static void
-srec_dump_command (const char *cmd, int from_tty)
-{
-  printf_unfiltered (_("\"dump srec\" must be followed by a subcommand.\n"));
-  help_list (srec_cmdlist, "dump srec ", all_commands, gdb_stdout);
-}
-
-static void
-ihex_dump_command (const char *cmd, int from_tty)
-{
-  printf_unfiltered (_("\"dump ihex\" must be followed by a subcommand.\n"));
-  help_list (ihex_cmdlist, "dump ihex ", all_commands, gdb_stdout);
-}
-
-static void
-verilog_dump_command (const char *cmd, int from_tty)
-{
-  printf_unfiltered (_("\"dump verilog\" must be followed by a subcommand.\n"));
-  help_list (verilog_cmdlist, "dump verilog ", all_commands, gdb_stdout);
-}
-
-static void
-tekhex_dump_command (const char *cmd, int from_tty)
-{
-  printf_unfiltered (_("\"dump tekhex\" must be followed by a subcommand.\n"));
-  help_list (tekhex_cmdlist, "dump tekhex ", all_commands, gdb_stdout);
-}
-
-static void
-binary_dump_command (const char *cmd, int from_tty)
-{
-  printf_unfiltered (_("\"dump binary\" must be followed by a subcommand.\n"));
-  help_list (binary_dump_cmdlist, "dump binary ", all_commands, gdb_stdout);
-}
-
-static void
-binary_append_command (const char *cmd, int from_tty)
-{
-  printf_unfiltered (_("\"append binary\" must be followed by a subcommand.\n"));
-  help_list (binary_append_cmdlist, "append binary ", all_commands,
-	     gdb_stdout);
-}
-
+void _initialize_cli_dump ();
 void
-_initialize_cli_dump (void)
+_initialize_cli_dump ()
 {
   struct cmd_list_element *c;
 
-  add_prefix_cmd ("dump", class_vars, dump_command,
-		  _("Dump target code/data to a local file."),
-		  &dump_cmdlist, "dump ",
-		  0/*allow-unknown*/,
-		  &cmdlist);
-  add_prefix_cmd ("append", class_vars, append_command,
-		  _("Append target code/data to a local file."),
-		  &append_cmdlist, "append ",
-		  0/*allow-unknown*/,
-		  &cmdlist);
+  add_basic_prefix_cmd ("dump", class_vars,
+			_("Dump target code/data to a local file."),
+			&dump_cmdlist,
+			0/*allow-unknown*/,
+			&cmdlist);
+  add_basic_prefix_cmd ("append", class_vars,
+			_("Append target code/data to a local file."),
+			&append_cmdlist,
+			0/*allow-unknown*/,
+			&cmdlist);
 
   add_dump_command ("memory", dump_memory_command, "\
 Write contents of memory to a raw binary file.\n\
@@ -648,41 +592,41 @@ Write the value of an expression to a ra
 Arguments are FILE EXPRESSION.  Writes the value of EXPRESSION to\n\
 the specified FILE in raw target ordered bytes.");
 
-  add_prefix_cmd ("srec", all_commands, srec_dump_command,
-		  _("Write target code/data to an srec file."),
-		  &srec_cmdlist, "dump srec ", 
-		  0 /*allow-unknown*/, 
-		  &dump_cmdlist);
-
-  add_prefix_cmd ("ihex", all_commands, ihex_dump_command,
-		  _("Write target code/data to an intel hex file."),
-		  &ihex_cmdlist, "dump ihex ", 
-		  0 /*allow-unknown*/, 
-		  &dump_cmdlist);
-
-  add_prefix_cmd ("verilog", all_commands, verilog_dump_command,
-		  _("Write target code/data to a verilog hex file."),
-		  &verilog_cmdlist, "dump verilog ",
-		  0 /*allow-unknown*/,
-		  &dump_cmdlist);
-
-  add_prefix_cmd ("tekhex", all_commands, tekhex_dump_command,
-		  _("Write target code/data to a tekhex file."),
-		  &tekhex_cmdlist, "dump tekhex ", 
-		  0 /*allow-unknown*/, 
-		  &dump_cmdlist);
-
-  add_prefix_cmd ("binary", all_commands, binary_dump_command,
-		  _("Write target code/data to a raw binary file."),
-		  &binary_dump_cmdlist, "dump binary ", 
-		  0 /*allow-unknown*/, 
-		  &dump_cmdlist);
-
-  add_prefix_cmd ("binary", all_commands, binary_append_command,
-		  _("Append target code/data to a raw binary file."),
-		  &binary_append_cmdlist, "append binary ", 
-		  0 /*allow-unknown*/, 
-		  &append_cmdlist);
+  add_basic_prefix_cmd ("srec", all_commands,
+			_("Write target code/data to an srec file."),
+			&srec_cmdlist,
+			0 /*allow-unknown*/, 
+			&dump_cmdlist);
+
+  add_basic_prefix_cmd ("ihex", all_commands,
+			_("Write target code/data to an intel hex file."),
+			&ihex_cmdlist,
+			0 /*allow-unknown*/, 
+			&dump_cmdlist);
+
+  add_basic_prefix_cmd ("verilog", all_commands,
+			_("Write target code/data to a verilog hex file."),
+			&verilog_cmdlist,
+			0 /*allow-unknown*/,
+			&dump_cmdlist);
+
+  add_basic_prefix_cmd ("tekhex", all_commands,
+			_("Write target code/data to a tekhex file."),
+			&tekhex_cmdlist,
+			0 /*allow-unknown*/, 
+			&dump_cmdlist);
+
+  add_basic_prefix_cmd ("binary", all_commands,
+			_("Write target code/data to a raw binary file."),
+			&binary_dump_cmdlist,
+			0 /*allow-unknown*/, 
+			&dump_cmdlist);
+
+  add_basic_prefix_cmd ("binary", all_commands,
+			_("Append target code/data to a raw binary file."),
+			&binary_append_cmdlist,
+			0 /*allow-unknown*/, 
+			&append_cmdlist);
 
   add_cmd ("memory", all_commands, dump_srec_memory, _("\
 Write contents of memory to an srec file.\n\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-interp.c ./gdb/cli/cli-interp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-interp.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-interp.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI Definitions for GDB, the GNU debugger.
 
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,7 +23,8 @@
 #include "event-top.h"
 #include "ui-out.h"
 #include "cli-out.h"
-#include "top.h"		/* for "execute_command" */
+#include "top.h"
+#include "ui.h"
 #include "infrun.h"
 #include "observable.h"
 #include "gdbthread.h"
@@ -43,49 +44,28 @@ class cli_interp final : public cli_inte
 {
  public:
   explicit cli_interp (const char *name);
-  ~cli_interp ();
+  ~cli_interp () = default;
 
   void init (bool top_level) override;
   void resume () override;
   void suspend () override;
-  gdb_exception exec (const char *command_str) override;
+  void exec (const char *command_str) override;
   ui_out *interp_ui_out () override;
 
+private:
+
   /* The ui_out for the console interpreter.  */
-  cli_ui_out *cli_uiout;
+  std::unique_ptr<cli_ui_out> m_cli_uiout;
 };
 
 cli_interp::cli_interp (const char *name)
-  : cli_interp_base (name)
-{
-  /* Create a default uiout builder for the CLI.  */
-  this->cli_uiout = cli_out_new (gdb_stdout);
-}
-
-cli_interp::~cli_interp ()
+  : cli_interp_base (name),
+    m_cli_uiout (new cli_ui_out (gdb_stdout))
 {
-  delete cli_uiout;
 }
 
 /* Suppress notification struct.  */
-struct cli_suppress_notification cli_suppress_notification =
-  {
-    0   /* user_selected_context_changed */
-  };
-
-/* Returns the INTERP's data cast as cli_interp if INTERP is a CLI,
-   and returns NULL otherwise.  */
-
-static struct cli_interp *
-as_cli_interp (struct interp *interp)
-{
-  return dynamic_cast<cli_interp *> (interp);
-}
-
-/* Longjmp-safe wrapper for "execute_command".  */
-static struct gdb_exception safe_execute_command (struct ui_out *uiout,
-						  const char *command, 
-						  int from_tty);
+struct cli_suppress_notification cli_suppress_notification;
 
 /* See cli-interp.h.
 
@@ -111,171 +91,85 @@ should_print_stop_to_console (struct int
 {
   if ((bpstat_what (tp->control.stop_bpstat).main_action
        == BPSTAT_WHAT_STOP_NOISY)
-      || tp->thread_fsm == NULL
-      || tp->thread_fsm->command_interp == console_interp
-      || !tp->thread_fsm->finished_p ())
+      || tp->thread_fsm () == nullptr
+      || tp->thread_fsm ()->command_interp == console_interp
+      || !tp->thread_fsm ()->finished_p ())
     return 1;
   return 0;
 }
 
 /* Observers for several run control events.  If the interpreter is
    quiet (i.e., another interpreter is being run with
-   interpreter-exec), print nothing.  */
+   interpreter-exec), print nothing.  These are named "cli_base" as
+   they print to both CLI interpreters and TUI interpreters.  */
 
-/* Observer for the normal_stop notification.  */
-
-static void
-cli_on_normal_stop (struct bpstats *bs, int print_frame)
+void
+cli_interp_base::on_normal_stop (struct bpstat *bs, int print_frame)
 {
   if (!print_frame)
     return;
 
-  SWITCH_THRU_ALL_UIS ()
-    {
-      struct interp *interp = top_level_interpreter ();
-      struct cli_interp *cli = as_cli_interp (interp);
-      struct thread_info *thread;
-
-      if (cli == NULL)
-	continue;
-
-      thread = inferior_thread ();
-      if (should_print_stop_to_console (interp, thread))
-	print_stop_event (cli->cli_uiout);
-    }
-}
-
-/* Observer for the signal_received notification.  */
-
-static void
-cli_on_signal_received (enum gdb_signal siggnal)
-{
-  SWITCH_THRU_ALL_UIS ()
-    {
-      struct cli_interp *cli = as_cli_interp (top_level_interpreter ());
+  /* This event is suppressed.  */
+  if (cli_suppress_notification.normal_stop)
+    return;
 
-      if (cli == NULL)
-	continue;
+  thread_info *thread = inferior_thread ();
+  if (should_print_stop_to_console (this, thread))
+    print_stop_event (this->interp_ui_out ());
 
-      print_signal_received_reason (cli->cli_uiout, siggnal);
-    }
 }
 
-/* Observer for the end_stepping_range notification.  */
-
-static void
-cli_on_end_stepping_range (void)
+void
+cli_interp_base::on_signal_received (enum gdb_signal siggnal)
 {
-  SWITCH_THRU_ALL_UIS ()
-    {
-      struct cli_interp *cli = as_cli_interp (top_level_interpreter ());
-
-      if (cli == NULL)
-	continue;
-
-      print_end_stepping_range_reason (cli->cli_uiout);
-    }
+  print_signal_received_reason (this->interp_ui_out (), siggnal);
 }
 
-/* Observer for the signalled notification.  */
-
-static void
-cli_on_signal_exited (enum gdb_signal siggnal)
+void
+cli_interp_base::on_signal_exited (gdb_signal sig)
 {
-  SWITCH_THRU_ALL_UIS ()
-    {
-      struct cli_interp *cli = as_cli_interp (top_level_interpreter ());
-
-      if (cli == NULL)
-	continue;
-
-      print_signal_exited_reason (cli->cli_uiout, siggnal);
-    }
+  print_signal_exited_reason (this->interp_ui_out (), sig);
 }
 
-/* Observer for the exited notification.  */
-
-static void
-cli_on_exited (int exitstatus)
+void
+cli_interp_base::on_exited (int status)
 {
-  SWITCH_THRU_ALL_UIS ()
-    {
-      struct cli_interp *cli = as_cli_interp (top_level_interpreter ());
-
-      if (cli == NULL)
-	continue;
-
-      print_exited_reason (cli->cli_uiout, exitstatus);
-    }
+  print_exited_reason (this->interp_ui_out (), status);
 }
 
-/* Observer for the no_history notification.  */
-
-static void
-cli_on_no_history (void)
+void
+cli_interp_base::on_no_history ()
 {
-  SWITCH_THRU_ALL_UIS ()
-    {
-      struct cli_interp *cli = as_cli_interp (top_level_interpreter ());
-
-      if (cli == NULL)
-	continue;
-
-      print_no_history_reason (cli->cli_uiout);
-    }
+  print_no_history_reason (this->interp_ui_out ());
 }
 
-/* Observer for the sync_execution_done notification.  */
-
-static void
-cli_on_sync_execution_done (void)
+void
+cli_interp_base::on_sync_execution_done ()
 {
-  struct cli_interp *cli = as_cli_interp (top_level_interpreter ());
-
-  if (cli == NULL)
-    return;
-
   display_gdb_prompt (NULL);
 }
 
-/* Observer for the command_error notification.  */
-
-static void
-cli_on_command_error (void)
+void
+cli_interp_base::on_command_error ()
 {
-  struct cli_interp *cli = as_cli_interp (top_level_interpreter ());
-
-  if (cli == NULL)
-    return;
-
   display_gdb_prompt (NULL);
 }
 
-/* Observer for the user_selected_context_changed notification.  */
-
-static void
-cli_on_user_selected_context_changed (user_selected_what selection)
+void
+cli_interp_base::on_user_selected_context_changed (user_selected_what selection)
 {
   /* This event is suppressed.  */
   if (cli_suppress_notification.user_selected_context)
     return;
 
-  thread_info *tp = inferior_ptid != null_ptid ? inferior_thread () : NULL;
-
-  SWITCH_THRU_ALL_UIS ()
-    {
-      struct cli_interp *cli = as_cli_interp (top_level_interpreter ());
-
-      if (cli == NULL)
-	continue;
+  thread_info *tp = inferior_ptid != null_ptid ? inferior_thread () : nullptr;
 
-      if (selection & USER_SELECTED_INFERIOR)
-	print_selected_inferior (cli->cli_uiout);
+  if (selection & USER_SELECTED_INFERIOR)
+    print_selected_inferior (this->interp_ui_out ());
 
-      if (tp != NULL
-	  && ((selection & (USER_SELECTED_THREAD | USER_SELECTED_FRAME))))
-	print_selected_thread_frame (cli->cli_uiout, selection);
-    }
+  if (tp != nullptr
+      && ((selection & (USER_SELECTED_THREAD | USER_SELECTED_FRAME))))
+    print_selected_thread_frame (this->interp_ui_out (), selection);
 }
 
 /* pre_command_loop implementation.  */
@@ -297,7 +191,6 @@ void
 cli_interp::resume ()
 {
   struct ui *ui = current_ui;
-  struct cli_interp *cli = this;
   struct ui_file *stream;
 
   /*sync_execution = 1; */
@@ -306,10 +199,10 @@ cli_interp::resume ()
      previously writing to gdb_stdout, then set it to the new
      gdb_stdout afterwards.  */
 
-  stream = cli->cli_uiout->set_stream (gdb_stdout);
+  stream = m_cli_uiout->set_stream (gdb_stdout);
   if (stream != gdb_stdout)
     {
-      cli->cli_uiout->set_stream (stream);
+      m_cli_uiout->set_stream (stream);
       stream = NULL;
     }
 
@@ -318,7 +211,7 @@ cli_interp::resume ()
   ui->input_handler = command_line_handler;
 
   if (stream != NULL)
-    cli->cli_uiout->set_stream (gdb_stdout);
+    m_cli_uiout->set_stream (gdb_stdout);
 }
 
 void
@@ -327,78 +220,46 @@ cli_interp::suspend ()
   gdb_disable_readline ();
 }
 
-gdb_exception
+void
 cli_interp::exec (const char *command_str)
 {
-  struct cli_interp *cli = this;
-  struct ui_file *old_stream;
-  struct gdb_exception result;
-
-  /* gdb_stdout could change between the time cli_uiout was
+  /* gdb_stdout could change between the time m_cli_uiout was
      initialized and now.  Since we're probably using a different
      interpreter which has a new ui_file for gdb_stdout, use that one
      instead of the default.
 
      It is important that it gets reset everytime, since the user
      could set gdb to use a different interpreter.  */
-  old_stream = cli->cli_uiout->set_stream (gdb_stdout);
-  result = safe_execute_command (cli->cli_uiout, command_str, 1);
-  cli->cli_uiout->set_stream (old_stream);
-  return result;
-}
-
-bool
-cli_interp_base::supports_command_editing ()
-{
-  return true;
-}
-
-static struct gdb_exception
-safe_execute_command (struct ui_out *command_uiout, const char *command,
-		      int from_tty)
-{
-  struct gdb_exception e;
+  ui_file *old_stream = m_cli_uiout->set_stream (gdb_stdout);
+  SCOPE_EXIT { m_cli_uiout->set_stream (old_stream); };
 
   /* Save and override the global ``struct ui_out'' builder.  */
   scoped_restore saved_uiout = make_scoped_restore (&current_uiout,
-						    command_uiout);
+						    m_cli_uiout.get ());
 
   try
     {
-      execute_command (command, from_tty);
+      execute_command (command_str, 1);
     }
-  catch (gdb_exception &exception)
+  catch (const gdb_exception_error &ex)
     {
-      e = std::move (exception);
+      exception_print (gdb_stderr, ex);
+      throw;
     }
+}
 
-  /* FIXME: cagney/2005-01-13: This shouldn't be needed.  Instead the
-     caller should print the exception.  */
-  exception_print (gdb_stderr, e);
-  return e;
+bool
+cli_interp_base::supports_command_editing ()
+{
+  return true;
 }
 
 ui_out *
 cli_interp::interp_ui_out ()
 {
-  struct cli_interp *cli = (struct cli_interp *) this;
-
-  return cli->cli_uiout;
+  return m_cli_uiout.get ();
 }
 
-/* These hold the pushed copies of the gdb output files.
-   If NULL then nothing has yet been pushed.  */
-struct saved_output_files
-{
-  ui_file *out;
-  ui_file *err;
-  ui_file *log;
-  ui_file *targ;
-  ui_file *targerr;
-  ui_file *file_to_delete;
-};
-static saved_output_files saved_output;
-
 /* See cli-interp.h.  */
 
 void
@@ -407,53 +268,49 @@ cli_interp_base::set_logging (ui_file_up
 {
   if (logfile != nullptr)
     {
-      saved_output.out = gdb_stdout;
-      saved_output.err = gdb_stderr;
-      saved_output.log = gdb_stdlog;
-      saved_output.targ = gdb_stdtarg;
-      saved_output.targerr = gdb_stdtargerr;
-
-      /* If something is being redirected, then grab logfile.  */
-      ui_file *logfile_p = nullptr;
-      if (logging_redirect || debug_redirect)
+      gdb_assert (m_saved_output == nullptr);
+      m_saved_output.reset (new saved_output_files);
+      m_saved_output->out = gdb_stdout;
+      m_saved_output->err = gdb_stderr;
+      m_saved_output->log = gdb_stdlog;
+      m_saved_output->targ = gdb_stdtarg;
+      m_saved_output->targerr = gdb_stdtargerr;
+
+      ui_file *logfile_p = logfile.get ();
+      m_saved_output->logfile_holder = std::move (logfile);
+
+      /* The new stdout and stderr only depend on whether logging
+	 redirection is being done.  */
+      ui_file *new_stdout = logfile_p;
+      ui_file *new_stderr = logfile_p;
+      if (!logging_redirect)
 	{
-	  logfile_p = logfile.get ();
-	  saved_output.file_to_delete = logfile_p;
+	  m_saved_output->stdout_holder.reset
+	    (new tee_file (gdb_stdout, logfile_p));
+	  new_stdout = m_saved_output->stdout_holder.get ();
+	  m_saved_output->stderr_holder.reset
+	    (new tee_file (gdb_stderr, logfile_p));
+	  new_stderr = m_saved_output->stderr_holder.get ();
 	}
 
-      /* If something is not being redirected, then a tee containing both the
-	 logfile and stdout.  */
-      ui_file *tee = nullptr;
-      if (!logging_redirect || !debug_redirect)
-	{
-	  tee = new tee_file (gdb_stdout, std::move (logfile));
-	  saved_output.file_to_delete = tee;
-	}
+      m_saved_output->stdlog_holder.reset
+	(new timestamped_file (debug_redirect ? logfile_p : new_stderr));
 
-      gdb_stdout = logging_redirect ? logfile_p : tee;
-      gdb_stdlog = debug_redirect ? logfile_p : tee;
-      gdb_stderr = logging_redirect ? logfile_p : tee;
-      gdb_stdtarg = logging_redirect ? logfile_p : tee;
-      gdb_stdtargerr = logging_redirect ? logfile_p : tee;
+      gdb_stdout = new_stdout;
+      gdb_stdlog = m_saved_output->stdlog_holder.get ();
+      gdb_stderr = new_stderr;
+      gdb_stdtarg = new_stderr;
+      gdb_stdtargerr = new_stderr;
     }
   else
     {
-      /* Delete the correct file.  If it's the tee then the logfile will also
-	 be deleted.  */
-      delete saved_output.file_to_delete;
-
-      gdb_stdout = saved_output.out;
-      gdb_stderr = saved_output.err;
-      gdb_stdlog = saved_output.log;
-      gdb_stdtarg = saved_output.targ;
-      gdb_stdtargerr = saved_output.targerr;
-
-      saved_output.out = nullptr;
-      saved_output.err = nullptr;
-      saved_output.log = nullptr;
-      saved_output.targ = nullptr;
-      saved_output.targerr = nullptr;
-      saved_output.file_to_delete = nullptr;
+      gdb_stdout = m_saved_output->out;
+      gdb_stderr = m_saved_output->err;
+      gdb_stdlog = m_saved_output->log;
+      gdb_stdtarg = m_saved_output->targ;
+      gdb_stdtargerr = m_saved_output->targerr;
+
+      m_saved_output.reset (nullptr);
     }
 }
 
@@ -467,20 +324,9 @@ cli_interp_factory (const char *name)
 
 /* Standard gdb initialization hook.  */
 
+void _initialize_cli_interp ();
 void
-_initialize_cli_interp (void)
+_initialize_cli_interp ()
 {
   interp_factory_register (INTERP_CONSOLE, cli_interp_factory);
-
-  /* If changing this, remember to update tui-interp.c as well.  */
-  gdb::observers::normal_stop.attach (cli_on_normal_stop);
-  gdb::observers::end_stepping_range.attach (cli_on_end_stepping_range);
-  gdb::observers::signal_received.attach (cli_on_signal_received);
-  gdb::observers::signal_exited.attach (cli_on_signal_exited);
-  gdb::observers::exited.attach (cli_on_exited);
-  gdb::observers::no_history.attach (cli_on_no_history);
-  gdb::observers::sync_execution_done.attach (cli_on_sync_execution_done);
-  gdb::observers::command_error.attach (cli_on_command_error);
-  gdb::observers::user_selected_context_changed.attach
-    (cli_on_user_selected_context_changed);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-interp.h ./gdb/cli/cli-interp.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-interp.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-interp.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI Definitions for GDB, the GNU debugger.
 
-   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+   Copyright (C) 2016-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -32,16 +32,37 @@ public:
 		    bool debug_redirect) override;
   void pre_command_loop () override;
   bool supports_command_editing () override;
-};
-
-/* The CLI interpreter's set_logging_proc method.  Exported so other
-   interpreters can reuse it.  */
-extern void cli_set_logging (struct interp *interp,
-			     ui_file_up logfile, bool logging_redirect);
 
-extern int cli_interpreter_supports_command_editing (struct interp *interp);
-
-extern void cli_interpreter_pre_command_loop (struct interp *self);
+  void on_signal_received (gdb_signal sig) override;
+  void on_signal_exited (gdb_signal sig) override;
+  void on_normal_stop (bpstat *bs, int print_frame) override;
+  void on_exited (int status) override;
+  void on_no_history () override;
+  void on_sync_execution_done () override;
+  void on_command_error () override;
+  void on_user_selected_context_changed (user_selected_what selection) override;
+
+private:
+  struct saved_output_files
+  {
+    /* Saved gdb_stdout, gdb_stderr, etc.  */
+    ui_file *out;
+    ui_file *err;
+    ui_file *log;
+    ui_file *targ;
+    ui_file *targerr;
+    /* When redirecting, some or all of these may be non-null
+       depending on the logging mode.  */
+    ui_file_up stdout_holder;
+    ui_file_up stderr_holder;
+    ui_file_up stdlog_holder;
+    ui_file_up logfile_holder;
+  };
+
+  /* These hold the pushed copies of the gdb output files.  If NULL
+     then nothing has yet been pushed.  */
+  std::unique_ptr<saved_output_files> m_saved_output;
+};
 
 /* Returns true if the current stop should be printed to
    CONSOLE_INTERP.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-logging.c ./gdb/cli/cli-logging.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-logging.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-logging.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Command-line output logging for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,16 +22,17 @@
 #include "ui-out.h"
 #include "interps.h"
 #include "cli/cli-style.h"
+#include "cli/cli-decode.h"
 
-static char *saved_filename;
+static std::string saved_filename;
 
-static char *logging_filename;
+static std::string logging_filename = "gdb.txt";
 static void
 show_logging_filename (struct ui_file *file, int from_tty,
 		       struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("The current logfile is \"%ps\".\n"),
-		    styled_string (file_name_style.style (), value));
+  gdb_printf (file, _("The current logfile is \"%ps\".\n"),
+	      styled_string (file_name_style.style (), value));
 }
 
 static bool logging_overwrite;
@@ -39,9 +40,9 @@ static bool logging_overwrite;
 static void
 maybe_warn_already_logging ()
 {
-  if (saved_filename)
+  if (!saved_filename.empty ())
     warning (_("Currently logging to %s.  Turn the logging off and on to "
-	       "make the new setting effective."), saved_filename);
+	       "make the new setting effective."), saved_filename.c_str ());
 }
 
 static void
@@ -55,10 +56,10 @@ static void
 show_logging_overwrite (struct ui_file *file, int from_tty,
 			struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file,
-		    _("Whether logging overwrites or "
-		      "appends to the log file is %s.\n"),
-		    value);
+  if (logging_overwrite)
+    gdb_printf (file, _("on: Logging overwrites the log file.\n"));
+  else
+    gdb_printf (file, _("off: Logging appends to the log file.\n"));
 }
 
 /* Value as configured by the user.  */
@@ -76,7 +77,24 @@ static void
 show_logging_redirect (struct ui_file *file, int from_tty,
 		       struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("The logging output mode is %s.\n"), value);
+  if (logging_redirect)
+    gdb_printf (file, _("on: Output will go only to the log file.\n"));
+  else
+    gdb_printf
+      (file,
+       _("off: Output will go to both the screen and the log file.\n"));
+}
+
+static void
+show_logging_debug_redirect (struct ui_file *file, int from_tty,
+		       struct cmd_list_element *c, const char *value)
+{
+  if (debug_redirect)
+    gdb_printf (file, _("on: Debug output will go only to the log file.\n"));
+  else
+    gdb_printf
+      (file,
+       _("off: Debug output will go to both the screen and the log file.\n"));
 }
 
 /* If we've pushed output files, close them and pop them.  */
@@ -94,36 +112,36 @@ pop_output_files (void)
 static void
 handle_redirections (int from_tty)
 {
-  if (saved_filename != NULL)
+  if (!saved_filename.empty ())
     {
-      fprintf_unfiltered (gdb_stdout, "Already logging to %s.\n",
-			  saved_filename);
+      gdb_printf ("Already logging to %s.\n",
+		  saved_filename.c_str ());
       return;
     }
 
   stdio_file_up log (new no_terminal_escape_file ());
-  if (!log->open (logging_filename, logging_overwrite ? "w" : "a"))
+  if (!log->open (logging_filename.c_str (), logging_overwrite ? "w" : "a"))
     perror_with_name (_("set logging"));
 
   /* Redirects everything to gdb_stdout while this is running.  */
   if (from_tty)
     {
       if (!logging_redirect)
-	fprintf_unfiltered (gdb_stdout, "Copying output to %s.\n",
-			    logging_filename);
+	gdb_printf ("Copying output to %s.\n",
+		    logging_filename.c_str ());
       else
-	fprintf_unfiltered (gdb_stdout, "Redirecting output to %s.\n",
-			    logging_filename);
+	gdb_printf ("Redirecting output to %s.\n",
+		    logging_filename.c_str ());
 
       if (!debug_redirect)
-	fprintf_unfiltered (gdb_stdout, "Copying debug output to %s.\n",
-			    logging_filename);
+	gdb_printf ("Copying debug output to %s.\n",
+		    logging_filename.c_str ());
       else
-	fprintf_unfiltered (gdb_stdout, "Redirecting debug output to %s.\n",
-			    logging_filename);
+	gdb_printf ("Redirecting debug output to %s.\n",
+		    logging_filename.c_str ());
     }
 
-  saved_filename = xstrdup (logging_filename);
+  saved_filename = logging_filename;
 
   /* Let the interpreter do anything it needs.  */
   current_interp_set_logging (std::move (log), logging_redirect,
@@ -145,81 +163,69 @@ set_logging_on (const char *args, int fr
   const char *rest = args;
 
   if (rest && *rest)
-    {
-      xfree (logging_filename);
-      logging_filename = xstrdup (rest);
-    }
+    logging_filename = rest;
+
   handle_redirections (from_tty);
 }
 
 static void 
 set_logging_off (const char *args, int from_tty)
 {
-  if (saved_filename == NULL)
+  if (saved_filename.empty ())
     return;
 
   pop_output_files ();
   if (from_tty)
-    fprintf_unfiltered (gdb_stdout, "Done logging to %s.\n", saved_filename);
-  xfree (saved_filename);
-  saved_filename = NULL;
+    gdb_printf ("Done logging to %s.\n",
+		saved_filename.c_str ());
+  saved_filename.clear ();
 }
 
+static bool logging_enabled;
+
 static void
-set_logging_command (const char *args, int from_tty)
+set_logging_enabled (const char *args,
+		     int from_tty, struct cmd_list_element *c)
 {
-  printf_unfiltered (_("\"set logging\" lets you log output to a file.\n"
-		       "Usage: set logging on [FILENAME]\n"
-		       "       set logging off\n"
-		       "       set logging file FILENAME\n"
-		       "       set logging overwrite [on|off]\n"
-		       "       set logging redirect [on|off]\n"));
+  if (logging_enabled)
+    set_logging_on (args, from_tty);
+  else
+    set_logging_off (args, from_tty);
 }
 
 static void
-show_logging_command (const char *args, int from_tty)
+show_logging_enabled (struct ui_file *file, int from_tty,
+		       struct cmd_list_element *c, const char *value)
 {
-  if (saved_filename)
-    printf_unfiltered (_("Currently logging to \"%s\".\n"), saved_filename);
-  if (saved_filename == NULL
-      || strcmp (logging_filename, saved_filename) != 0)
-    printf_unfiltered (_("Future logs will be written to %s.\n"),
-		       logging_filename);
-
-  if (logging_overwrite)
-    printf_unfiltered (_("Logs will overwrite the log file.\n"));
+  if (logging_enabled)
+    gdb_printf (file, _("on: Logging is enabled.\n"));
   else
-    printf_unfiltered (_("Logs will be appended to the log file.\n"));
-
-  if (logging_redirect)
-    printf_unfiltered (_("Output will be sent only to the log file.\n"));
-  else
-    printf_unfiltered (_("Output will be logged and displayed.\n"));
-
-  if (debug_redirect)
-    printf_unfiltered (_("Debug output will be sent only to the log file.\n"));
-  else
-    printf_unfiltered (_("Debug output will be logged and displayed.\n"));
+    gdb_printf (file, _("off: Logging is disabled.\n"));
 }
 
+void _initialize_cli_logging ();
 void
-_initialize_cli_logging (void)
+_initialize_cli_logging ()
 {
   static struct cmd_list_element *set_logging_cmdlist, *show_logging_cmdlist;
 
-  add_prefix_cmd ("logging", class_support, set_logging_command,
-		  _("Set logging options."), &set_logging_cmdlist,
-		  "set logging ", 0, &setlist);
-  add_prefix_cmd ("logging", class_support, show_logging_command,
-		  _("Show logging options."), &show_logging_cmdlist,
-		  "show logging ", 0, &showlist);
+  /* Set/show logging.  */
+  add_setshow_prefix_cmd ("logging", class_support,
+			  _("Set logging options."),
+			  _("Show logging options."),
+			  &set_logging_cmdlist, &show_logging_cmdlist,
+			  &setlist, &showlist);
+
+  /* Set/show logging overwrite.  */
   add_setshow_boolean_cmd ("overwrite", class_support, &logging_overwrite, _("\
 Set whether logging overwrites or appends to the log file."), _("\
 Show whether logging overwrites or appends to the log file."), _("\
-If set, logging overrides the log file."),
+If set, logging overwrites the log file."),
 			   set_logging_overwrite,
 			   show_logging_overwrite,
 			   &set_logging_cmdlist, &show_logging_cmdlist);
+
+  /* Set/show logging redirect.  */
   add_setshow_boolean_cmd ("redirect", class_support, &logging_redirect, _("\
 Set the logging output mode."), _("\
 Show the logging output mode."), _("\
@@ -228,6 +234,8 @@ If redirect is on, output will go only t
 			   set_logging_redirect,
 			   show_logging_redirect,
 			   &set_logging_cmdlist, &show_logging_cmdlist);
+
+  /* Set/show logging debugredirect.  */
   add_setshow_boolean_cmd ("debugredirect", class_support,
 			   &debug_redirect, _("\
 Set the logging debug output mode."), _("\
@@ -235,8 +243,10 @@ Show the logging debug output mode."), _
 If debug redirect is off, debug will go to both the screen and the log file.\n\
 If debug redirect is on, debug will go only to the log file."),
 			   set_logging_redirect,
-			   show_logging_redirect,
+			   show_logging_debug_redirect,
 			   &set_logging_cmdlist, &show_logging_cmdlist);
+
+  /* Set/show logging file.  */
   add_setshow_filename_cmd ("file", class_support, &logging_filename, _("\
 Set the current logfile."), _("\
 Show the current logfile."), _("\
@@ -244,10 +254,28 @@ The logfile is used when directing GDB's
 			    NULL,
 			    show_logging_filename,
 			    &set_logging_cmdlist, &show_logging_cmdlist);
-  add_cmd ("on", class_support, set_logging_on,
-	   _("Enable logging."), &set_logging_cmdlist);
-  add_cmd ("off", class_support, set_logging_off,
-	   _("Disable logging."), &set_logging_cmdlist);
 
-  logging_filename = xstrdup ("gdb.txt");
+  /* Set/show logging enabled.  */
+  set_show_commands setshow_logging_enabled_cmds
+    = add_setshow_boolean_cmd ("enabled", class_support, &logging_enabled,
+			       _("Enable logging."),
+			       _("Show whether logging is enabled."),
+			       _("When on, enable logging."),
+			       set_logging_enabled,
+			       show_logging_enabled,
+			       &set_logging_cmdlist, &show_logging_cmdlist);
+
+  /* Set logging on, deprecated alias.  */
+  cmd_list_element *set_logging_on_cmd
+    = add_alias_cmd ("on", setshow_logging_enabled_cmds.set, class_support,
+		     false, &set_logging_cmdlist);
+  deprecate_cmd (set_logging_on_cmd, "set logging enabled on");
+  set_logging_on_cmd->default_args = "on";
+
+  /* Set logging off, deprecated alias.  */
+  cmd_list_element *set_logging_off_cmd
+    = add_alias_cmd ("off", setshow_logging_enabled_cmds.set, class_support,
+		     false, &set_logging_cmdlist);
+  deprecate_cmd (set_logging_off_cmd, "set logging enabled off");
+  set_logging_off_cmd->default_args = "off";
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-option.c ./gdb/cli/cli-option.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-option.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-option.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI options framework, for GDB.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -38,14 +38,14 @@ union option_value
   /* For var_uinteger options.  */
   unsigned int uinteger;
 
-  /* For var_zuinteger_unlimited options.  */
+  /* For var_integer and var_pinteger options.  */
   int integer;
 
   /* For var_enum options.  */
   const char *enumeration;
 
   /* For var_string options.  This is malloc-allocated.  */
-  char *string;
+  std::string *string;
 };
 
 /* Holds an options definition and its value.  */
@@ -58,11 +58,11 @@ struct option_def_and_value
   void *ctx;
 
   /* The option's value, if any.  */
-  gdb::optional<option_value> value;
+  std::optional<option_value> value;
 
   /* Constructor.  */
   option_def_and_value (const option_def &option_, void *ctx_,
-			gdb::optional<option_value> &&value_ = {})
+			std::optional<option_value> &&value_ = {})
     : option (option_),
       ctx (ctx_),
       value (std::move (value_))
@@ -87,7 +87,7 @@ struct option_def_and_value
     if (value.has_value ())
       {
 	if (option.type == var_string)
-	  xfree (value->string);
+	  delete value->string;
       }
   }
 
@@ -99,7 +99,7 @@ private:
      allocated on the heap, so we must clear the pointer in the
      source, to avoid a double free.  */
   static void clear_value (const option_def &option,
-			   gdb::optional<option_value> &value)
+			   std::optional<option_value> &value)
   {
     if (value.has_value ())
       {
@@ -109,7 +109,7 @@ private:
   }
 };
 
-static void save_option_value_in_ctx (gdb::optional<option_def_and_value> &ov);
+static void save_option_value_in_ctx (std::optional<option_def_and_value> &ov);
 
 /* Info passed around when handling completion.  */
 struct parse_option_completion_info
@@ -177,7 +177,7 @@ complete_on_all_options (completion_trac
 /* Parse ARGS, guided by OPTIONS_GROUP.  HAVE_DELIMITER is true if the
    whole ARGS line included the "--" options-terminator delimiter.  */
 
-static gdb::optional<option_def_and_value>
+static std::optional<option_def_and_value>
 parse_option (gdb::array_view<const option_def_group> options_group,
 	      process_options_mode mode,
 	      bool have_delimiter,
@@ -356,42 +356,52 @@ parse_option (gdb::array_view<const opti
 	return option_def_and_value {*match, match_ctx, val};
       }
     case var_uinteger:
-    case var_zuinteger_unlimited:
+    case var_integer:
+    case var_pinteger:
       {
-	if (completion != nullptr)
+	if (completion != nullptr && match->extra_literals != nullptr)
 	  {
+	    /* Convenience to let the user know what the option can
+	       accept.  Make sure there's no common prefix between
+	       "NUMBER" and all the strings when adding new ones,
+	       so that readline doesn't do a partial match.  */
 	    if (**args == '\0')
 	      {
-		/* Convenience to let the user know what the option
-		   can accept.  Note there's no common prefix between
-		   the strings on purpose, so that readline doesn't do
-		   a partial match.  */
 		completion->tracker.add_completion
 		  (make_unique_xstrdup ("NUMBER"));
-		completion->tracker.add_completion
-		  (make_unique_xstrdup ("unlimited"));
+		for (const literal_def *l = match->extra_literals;
+		     l->literal != nullptr;
+		     l++)
+		  completion->tracker.add_completion
+		    (make_unique_xstrdup (l->literal));
 		return {};
 	      }
-	    else if (startswith ("unlimited", *args))
+	    else
 	      {
-		completion->tracker.add_completion
-		  (make_unique_xstrdup ("unlimited"));
-		return {};
+		bool completions = false;
+		for (const literal_def *l = match->extra_literals;
+		     l->literal != nullptr;
+		     l++)
+		  if (startswith (l->literal, *args))
+		    {
+		      completion->tracker.add_completion
+			(make_unique_xstrdup (l->literal));
+		      completions = true;
+		    }
+		if (completions)
+		  return {};
 	      }
 	  }
 
-	if (match->type == var_zuinteger_unlimited)
-	  {
-	    option_value val;
-	    val.integer = parse_cli_var_zuinteger_unlimited (args, false);
-	    return option_def_and_value {*match, match_ctx, val};
-	  }
+	LONGEST v = parse_cli_var_integer (match->type,
+					   match->extra_literals,
+					   args, false);
+	option_value val;
+	if (match->type == var_uinteger)
+	  val.uinteger = v;
 	else
-	  {
-	    option_value val;
-	    val.uinteger = parse_cli_var_uinteger (match->type, args, false);
-	    return option_def_and_value {*match, match_ctx, val};
-	  }
+	  val.integer = v;
+	return option_def_and_value {*match, match_ctx, val};
       }
     case var_enum:
       {
@@ -439,13 +449,13 @@ parse_option (gdb::array_view<const opti
 	  error (_("-%s requires an argument"), match->name);
 
 	option_value val;
-	val.string = xstrdup (str.c_str ());
+	val.string = new std::string (std::move (str));
 	return option_def_and_value {*match, match_ctx, val};
       }
 
     default:
       /* Not yet.  */
-      gdb_assert_not_reached (_("option type not supported"));
+      gdb_assert_not_reached ("option type not supported");
     }
 
   return {};
@@ -486,7 +496,7 @@ complete_options (completion_tracker &tr
 	    }
 	  else if (**args == '-')
 	    {
-	      gdb::optional<option_def_and_value> ov
+	      std::optional<option_def_and_value> ov
 		= parse_option (options_group, mode, have_delimiter,
 				args, &completion_info);
 	      if (!ov && !tracker.have_completions ())
@@ -579,7 +589,7 @@ complete_options (completion_tracker &tr
 /* Save the parsed value in the option's context.  */
 
 static void
-save_option_value_in_ctx (gdb::optional<option_def_and_value> &ov)
+save_option_value_in_ctx (std::optional<option_def_and_value> &ov)
 {
   switch (ov->option.type)
     {
@@ -593,7 +603,8 @@ save_option_value_in_ctx (gdb::optional<
       *ov->option.var_address.uinteger (ov->option, ov->ctx)
 	= ov->value->uinteger;
       break;
-    case var_zuinteger_unlimited:
+    case var_integer:
+    case var_pinteger:
       *ov->option.var_address.integer (ov->option, ov->ctx)
 	= ov->value->integer;
       break;
@@ -603,8 +614,7 @@ save_option_value_in_ctx (gdb::optional<
       break;
     case var_string:
       *ov->option.var_address.string (ov->option, ov->ctx)
-	= ov->value->string;
-      ov->value->string = nullptr;
+	= std::move (*ov->value->string);
       break;
     default:
       gdb_assert_not_reached ("unhandled option type");
@@ -665,8 +675,20 @@ get_val_type_str (const option_def &opt,
     case var_boolean:
       return "[on|off]";
     case var_uinteger:
-    case var_zuinteger_unlimited:
-      return "NUMBER|unlimited";
+    case var_integer:
+    case var_pinteger:
+      {
+	buffer = "NUMBER";
+	if (opt.extra_literals != nullptr)
+	  for (const literal_def *l = opt.extra_literals;
+	       l->literal != nullptr;
+	       l++)
+	    {
+	      buffer += '|';
+	      buffer += l->literal;
+	    }
+	return buffer.c_str ();
+      }
     case var_enum:
       {
 	buffer = "";
@@ -790,20 +812,31 @@ add_setshow_cmds_for_options (command_cl
 	{
 	  add_setshow_uinteger_cmd (option.name, cmd_class,
 				    option.var_address.uinteger (option, data),
+				    option.extra_literals,
 				    option.set_doc, option.show_doc,
 				    option.help_doc,
 				    nullptr, option.show_cmd_cb,
 				    set_list, show_list);
 	}
-      else if (option.type == var_zuinteger_unlimited)
+      else if (option.type == var_integer)
+	{
+	  add_setshow_integer_cmd (option.name, cmd_class,
+				   option.var_address.integer (option, data),
+				   option.extra_literals,
+				   option.set_doc, option.show_doc,
+				   option.help_doc,
+				   nullptr, option.show_cmd_cb,
+				   set_list, show_list);
+	}
+      else if (option.type == var_pinteger)
 	{
-	  add_setshow_zuinteger_unlimited_cmd
-	    (option.name, cmd_class,
-	     option.var_address.integer (option, data),
-	     option.set_doc, option.show_doc,
-	     option.help_doc,
-	     nullptr, option.show_cmd_cb,
-	     set_list, show_list);
+	  add_setshow_pinteger_cmd (option.name, cmd_class,
+				    option.var_address.integer (option, data),
+				    option.extra_literals,
+				    option.set_doc, option.show_doc,
+				    option.help_doc,
+				    nullptr, option.show_cmd_cb,
+				    set_list, show_list);
 	}
       else if (option.type == var_enum)
 	{
@@ -825,7 +858,7 @@ add_setshow_cmds_for_options (command_cl
 				  set_list, show_list);
 	}
       else
-	gdb_assert_not_reached (_("option type not handled"));
+	gdb_assert_not_reached ("option type not handled");
     }
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-option.h ./gdb/cli/cli-option.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-option.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-option.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI options framework, for GDB.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,7 +20,7 @@
 #ifndef CLI_OPTION_H
 #define CLI_OPTION_H 1
 
-#include "gdbsupport/gdb_optional.h"
+#include <optional>
 #include "gdbsupport/array-view.h"
 #include "completer.h"
 #include <string>
@@ -49,12 +49,13 @@ protected:
      used to create the option's "set/show" commands.  */
   constexpr option_def (const char *name_,
 			var_types var_type_,
+			const literal_def *extra_literals_,
 			erased_get_var_address_ftype *erased_get_var_address_,
 			show_value_ftype *show_cmd_cb_,
 			const char *set_doc_,
 			const char *show_doc_,
 			const char *help_doc_)
-    : name (name_), type (var_type_),
+    : name (name_), type (var_type_), extra_literals (extra_literals_),
       erased_get_var_address (erased_get_var_address_),
       var_address {},
       show_cmd_cb (show_cmd_cb_),
@@ -68,6 +69,9 @@ public:
   /* The option's type.  */
   var_types type;
 
+  /* Extra literals, such as `unlimited', accepted in lieu of a number.  */
+  const literal_def *extra_literals;
+
   /* A function that gets the controlling variable's address, type
      erased.  */
   erased_get_var_address_ftype *erased_get_var_address;
@@ -86,7 +90,7 @@ public:
       unsigned int *(*uinteger) (const option_def &, void *ctx);
       int *(*integer) (const option_def &, void *ctx);
       const char **(*enumeration) (const option_def &, void *ctx);
-      char **(*string) (const option_def &, void *ctx);
+      std::string *(*string) (const option_def &, void *ctx);
     }
   var_address;
 
@@ -160,7 +164,7 @@ struct boolean_option_def : option_def
 		      const char *set_doc_,
 		      const char *show_doc_ = nullptr,
 		      const char *help_doc_ = nullptr)
-    : option_def (long_option_, var_boolean,
+    : option_def (long_option_, var_boolean, nullptr,
 		  (erased_get_var_address_ftype *) get_var_address_cb_,
 		  show_cmd_cb_,
 		  set_doc_, show_doc_, help_doc_)
@@ -207,37 +211,59 @@ struct uinteger_option_def : option_def
 {
   uinteger_option_def (const char *long_option_,
 		       unsigned int *(*get_var_address_cb_) (Context *),
+		       const literal_def *extra_literals_,
 		       show_value_ftype *show_cmd_cb_,
 		       const char *set_doc_,
 		       const char *show_doc_ = nullptr,
 		       const char *help_doc_ = nullptr)
-    : option_def (long_option_, var_uinteger,
+    : option_def (long_option_, var_uinteger, extra_literals_,
 		  (erased_get_var_address_ftype *) get_var_address_cb_,
 		  show_cmd_cb_,
 		  set_doc_, show_doc_, help_doc_)
   {
     var_address.uinteger = detail::get_var_address<unsigned int, Context>;
   }
+
+  uinteger_option_def (const char *long_option_,
+		       unsigned int *(*get_var_address_cb_) (Context *),
+		       show_value_ftype *show_cmd_cb_,
+		       const char *set_doc_,
+		       const char *show_doc_ = nullptr,
+		       const char *help_doc_ = nullptr)
+    : uinteger_option_def (long_option_, get_var_address_cb_, nullptr,
+			   show_cmd_cb_, set_doc_, show_doc_, help_doc_)
+  { /* Nothing.  */ }
 };
 
-/* A var_zuinteger_unlimited command line option.  */
+/* A var_pinteger command line option.  */
 
 template<typename Context>
-struct zuinteger_unlimited_option_def : option_def
+struct pinteger_option_def : option_def
 {
-  zuinteger_unlimited_option_def (const char *long_option_,
-				  int *(*get_var_address_cb_) (Context *),
-				  show_value_ftype *show_cmd_cb_,
-				  const char *set_doc_,
-				  const char *show_doc_ = nullptr,
-				  const char *help_doc_ = nullptr)
-    : option_def (long_option_, var_zuinteger_unlimited,
+  pinteger_option_def (const char *long_option_,
+		       int *(*get_var_address_cb_) (Context *),
+		       const literal_def *extra_literals_,
+		       show_value_ftype *show_cmd_cb_,
+		       const char *set_doc_,
+		       const char *show_doc_ = nullptr,
+		       const char *help_doc_ = nullptr)
+    : option_def (long_option_, var_pinteger, extra_literals_,
 		  (erased_get_var_address_ftype *) get_var_address_cb_,
 		  show_cmd_cb_,
 		  set_doc_, show_doc_, help_doc_)
   {
     var_address.integer = detail::get_var_address<int, Context>;
   }
+
+  pinteger_option_def (const char *long_option_,
+		       int *(*get_var_address_cb_) (Context *),
+		       show_value_ftype *show_cmd_cb_,
+		       const char *set_doc_,
+		       const char *show_doc_ = nullptr,
+		       const char *help_doc_ = nullptr)
+    : pinteger_option_def (long_option_, get_var_address_cb_, nullptr,
+			   show_cmd_cb_, set_doc_, show_doc_, help_doc_)
+  { /* Nothing.  */ }
 };
 
 /* An var_enum command line option.  */
@@ -252,7 +278,7 @@ struct enum_option_def : option_def
 		   const char *set_doc_,
 		   const char *show_doc_ = nullptr,
 		   const char *help_doc_ = nullptr)
-    : option_def (long_option_, var_enum,
+    : option_def (long_option_, var_enum, nullptr,
 		  (erased_get_var_address_ftype *) get_var_address_cb_,
 		  show_cmd_cb_,
 		  set_doc_, show_doc_, help_doc_)
@@ -268,17 +294,17 @@ template<typename Context>
 struct string_option_def : option_def
 {
   string_option_def (const char *long_option_,
-		     char **(*get_var_address_cb_) (Context *),
+		     std::string *(*get_var_address_cb_) (Context *),
 		     show_value_ftype *show_cmd_cb_,
 		     const char *set_doc_,
 		     const char *show_doc_ = nullptr,
 		     const char *help_doc_ = nullptr)
-    : option_def (long_option_, var_string,
+    : option_def (long_option_, var_string, nullptr,
 		  (erased_get_var_address_ftype *) get_var_address_cb_,
 		  show_cmd_cb_,
 		  set_doc_, show_doc_, help_doc_)
   {
-    var_address.enumeration = detail::get_var_address<const char *, Context>;
+    var_address.string = detail::get_var_address<std::string, Context>;
   }
 };
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-script.c ./gdb/cli/cli-script.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-script.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-script.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB CLI command scripting.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,22 +19,23 @@
 
 #include "defs.h"
 #include "value.h"
-#include "language.h"		/* For value_true */
 #include <ctype.h>
 
 #include "ui-out.h"
 #include "top.h"
+#include "ui.h"
 #include "breakpoint.h"
 #include "tracepoint.h"
 #include "cli/cli-cmds.h"
 #include "cli/cli-decode.h"
 #include "cli/cli-script.h"
 #include "cli/cli-style.h"
+#include "gdbcmd.h"
 
 #include "extension.h"
 #include "interps.h"
 #include "compile/compile.h"
-#include "gdbsupport/gdb_string_view.h"
+#include <string_view>
 #include "python/python.h"
 #include "guile/guile.h"
 
@@ -44,14 +45,17 @@
 
 static enum command_control_type
 recurse_read_control_structure
-    (gdb::function_view<const char * ()> read_next_line_func,
+    (read_next_line_ftype read_next_line_func,
      struct command_line *current_cmd,
      gdb::function_view<void (const char *)> validator);
 
 static void do_define_command (const char *comname, int from_tty,
 			       const counted_command_line *commands);
 
-static const char *read_next_line ();
+static void do_document_command (const char *comname, int from_tty,
+				 const counted_command_line *commands);
+
+static const char *read_next_line (std::string &buffer);
 
 /* Level of control structure when reading.  */
 static int control_level;
@@ -71,6 +75,9 @@ static cmd_list_element *if_cmd_element
 /* Command element for the 'define' command.  */
 static cmd_list_element *define_cmd_element = nullptr;
 
+/* Command element for the 'document' command.  */
+static cmd_list_element *document_cmd_element = nullptr;
+
 /* Structure for arguments to user defined functions.  */
 
 class user_args
@@ -96,7 +103,7 @@ private:
   std::string m_command_line;
 
   /* The arguments.  Each element points inside M_COMMAND_LINE.  */
-  std::vector<gdb::string_view> m_args;
+  std::vector<std::string_view> m_args;
 };
 
 /* The stack of arguments passed to user defined functions.  We need a
@@ -139,6 +146,7 @@ multi_line_command_p (enum command_contr
     case python_control:
     case guile_control:
     case define_control:
+    case document_control:
       return 1;
     default:
       return 0;
@@ -148,7 +156,7 @@ multi_line_command_p (enum command_contr
 /* Allocate, initialize a new command line structure for one of the
    control commands (if/while).  */
 
-static struct command_line *
+static command_line_up
 build_command_line (enum command_control_type type, const char *args)
 {
   if (args == NULL || *args == '\0')
@@ -159,10 +167,12 @@ build_command_line (enum command_control
 	error (_("while command requires an argument."));
       else if (type == define_control)
 	error (_("define command requires an argument."));
+      else if (type == document_control)
+	error (_("document command requires an argument."));
     }
   gdb_assert (args != NULL);
 
-  return new struct command_line (type, xstrdup (args));
+  return command_line_up (new command_line (type, xstrdup (args)));
 }
 
 /* Build and return a new command structure for the control commands
@@ -172,7 +182,7 @@ counted_command_line
 get_command_line (enum command_control_type type, const char *arg)
 {
   /* Allocate and build a new command line structure.  */
-  counted_command_line cmd (build_command_line (type, arg),
+  counted_command_line cmd (build_command_line (type, arg).release (),
 			    command_lines_deleter ());
 
   /* Read in the body of this command.  */
@@ -210,7 +220,7 @@ print_command_lines (struct ui_out *uiou
 	}
 
       /* loop_continue to jump to the start of a while loop, print it
-         and continue. */
+	 and continue. */
       if (list->control_type == continue_control)
 	{
 	  uiout->field_string (NULL, "loop_continue");
@@ -392,10 +402,6 @@ execute_cmd_post_hook (struct cmd_list_e
 void
 execute_control_commands (struct command_line *cmdlines, int from_tty)
 {
-  /* Set the instream to 0, indicating execution of a
-     user-defined function.  */
-  scoped_restore restore_instream
-    = make_scoped_restore (&current_ui->instream, nullptr);
   scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
   scoped_restore save_nesting
     = make_scoped_restore (&command_nest_depth, command_nest_depth + 1);
@@ -419,31 +425,14 @@ std::string
 execute_control_commands_to_string (struct command_line *commands,
 				    int from_tty)
 {
-  /* GDB_STDOUT should be better already restored during these
-     restoration callbacks.  */
-  set_batch_flag_and_restore_page_info save_page_info;
-
-  string_file str_file;
-
-  {
-    current_uiout->redirect (&str_file);
-    ui_out_redirect_pop redirect_popper (current_uiout);
+  std::string result;
 
-    scoped_restore save_stdout
-      = make_scoped_restore (&gdb_stdout, &str_file);
-    scoped_restore save_stderr
-      = make_scoped_restore (&gdb_stderr, &str_file);
-    scoped_restore save_stdlog
-      = make_scoped_restore (&gdb_stdlog, &str_file);
-    scoped_restore save_stdtarg
-      = make_scoped_restore (&gdb_stdtarg, &str_file);
-    scoped_restore save_stdtargerr
-      = make_scoped_restore (&gdb_stdtargerr, &str_file);
-
-    execute_control_commands (commands, from_tty);
-  }
+  execute_fn_to_string (result, [&] ()
+    {
+      execute_control_commands (commands, from_tty);
+    }, false);
 
-  return std::move (str_file.string ());
+  return result;
 }
 
 void
@@ -464,6 +453,11 @@ execute_user_command (struct cmd_list_el
   if (user_args_stack.size () > max_user_call_depth)
     error (_("Max user call depth exceeded -- command aborted."));
 
+  /* Set the instream to nullptr, indicating execution of a
+     user-defined function.  */
+  scoped_restore restore_instream
+    = make_scoped_restore (&current_ui->instream, nullptr);
+
   execute_control_commands (cmdlines, 0);
 }
 
@@ -503,14 +497,14 @@ print_command_trace (const char *fmt, ..
     return;
 
   for (i=0; i < command_nest_depth; i++)
-    printf_filtered ("+");
+    gdb_printf ("+");
 
   va_list args;
 
   va_start (args, fmt);
-  vprintf_filtered (fmt, args);
+  gdb_vprintf (fmt, args);
   va_end (args);
-  puts_filtered ("\n");
+  gdb_puts ("\n");
 }
 
 /* Helper for execute_control_command.  */
@@ -519,8 +513,6 @@ static enum command_control_type
 execute_control_command_1 (struct command_line *cmd, int from_tty)
 {
   struct command_line *current;
-  struct value *val;
-  struct value *val_mark;
   int loop;
   enum command_control_type ret;
 
@@ -543,7 +535,7 @@ execute_control_command_1 (struct comman
       print_command_trace ("loop_continue");
 
       /* Return for "continue", and "break" so we can either
-         continue the loop at the top, or break out.  */
+	 continue the loop at the top, or break out.  */
       ret = cmd->control_type;
       break;
 
@@ -551,7 +543,7 @@ execute_control_command_1 (struct comman
       print_command_trace ("loop_break");
 
       /* Return for "continue", and "break" so we can either
-         continue the loop at the top, or break out.  */
+	 continue the loop at the top, or break out.  */
       ret = cmd->control_type;
       break;
 
@@ -569,15 +561,16 @@ execute_control_command_1 (struct comman
 	/* Keep iterating so long as the expression is true.  */
 	while (loop == 1)
 	  {
-	    int cond_result;
+	    bool cond_result;
 
 	    QUIT;
 
 	    /* Evaluate the expression.  */
-	    val_mark = value_mark ();
-	    val = evaluate_expression (expr.get ());
-	    cond_result = value_true (val);
-	    value_free_to_mark (val_mark);
+	    {
+	      scoped_value_mark mark;
+	      value *val = expr->evaluate ();
+	      cond_result = value_true (val);
+	    }
 
 	    /* If the value is false, then break out of the loop.  */
 	    if (!cond_result)
@@ -628,16 +621,17 @@ execute_control_command_1 (struct comman
 	ret = simple_control;
 
 	/* Evaluate the conditional.  */
-	val_mark = value_mark ();
-	val = evaluate_expression (expr.get ());
+	{
+	  scoped_value_mark mark;
+	  value *val = expr->evaluate ();
 
-	/* Choose which arm to take commands from based on the value
-	   of the conditional expression.  */
-	if (value_true (val))
-	  current = cmd->body_list_0.get ();
-	else if (cmd->body_list_1 != nullptr)
-	  current = cmd->body_list_1.get ();
-	value_free_to_mark (val_mark);
+	  /* Choose which arm to take commands from based on the value
+	     of the conditional expression.  */
+	  if (value_true (val))
+	    current = cmd->body_list_0.get ();
+	  else if (cmd->body_list_1 != nullptr)
+	    current = cmd->body_list_1.get ();
+	}
 
 	/* Execute commands in the given arm.  */
 	while (current)
@@ -678,6 +672,12 @@ execute_control_command_1 (struct comman
       ret = simple_control;
       break;
 
+    case document_control:
+      print_command_trace ("document %s", cmd->line);
+      do_document_command (cmd->line, 0, &cmd->body_list_0);
+      ret = simple_control;
+      break;
+
     case python_control:
     case guile_control:
       {
@@ -895,7 +895,7 @@ user_args::insert_args (const char *line
    from stdin.  */
 
 static const char *
-read_next_line ()
+read_next_line (std::string &buffer)
 {
   struct ui *ui = current_ui;
   char *prompt_ptr, control_prompt[256];
@@ -918,7 +918,7 @@ read_next_line ()
   else
     prompt_ptr = NULL;
 
-  return command_line_input (prompt_ptr, "commands");
+  return command_line_input (buffer, prompt_ptr, "commands");
 }
 
 /* Given an input line P, skip the command and return a pointer to the
@@ -941,7 +941,7 @@ line_first_arg (const char *p)
    Otherwise, only "end" is recognized.  */
 
 static enum misc_command_type
-process_next_line (const char *p, struct command_line **command,
+process_next_line (const char *p, command_line_up *command,
 		   int parse_commands,
 		   gdb::function_view<void (const char *)> validator)
 
@@ -974,7 +974,7 @@ process_next_line (const char *p, struct
       /* Resolve command abbreviations (e.g. 'ws' for 'while-stepping').  */
       const char *cmd_name = p;
       struct cmd_list_element *cmd
-	= lookup_cmd_1 (&cmd_name, cmdlist, NULL, 1);
+	= lookup_cmd_1 (&cmd_name, cmdlist, NULL, NULL, 1);
       cmd_name = skip_spaces (cmd_name);
       bool inline_cmd = *cmd_name != '\0';
 
@@ -1018,6 +1018,8 @@ process_next_line (const char *p, struct
 	*command = build_command_line (commands_control, line_first_arg (p));
       else if (cmd == define_cmd_element)
 	*command = build_command_line (define_control, line_first_arg (p));
+      else if (cmd == document_cmd_element)
+	*command = build_command_line (document_control, line_first_arg (p));
       else if (cmd == python_cmd_element && !inline_cmd)
 	{
 	  /* Note that we ignore the inline "python command" form
@@ -1037,9 +1039,9 @@ process_next_line (const char *p, struct
 	  *command = build_command_line (guile_control, "");
 	}
       else if (p_end - p == 10 && startswith (p, "loop_break"))
-	*command = new struct command_line (break_control);
+	*command = command_line_up (new command_line (break_control));
       else if (p_end - p == 13 && startswith (p, "loop_continue"))
-	*command = new struct command_line (continue_control);
+	*command = command_line_up (new command_line (continue_control));
       else
 	not_handled = 1;
     }
@@ -1047,22 +1049,12 @@ process_next_line (const char *p, struct
   if (!parse_commands || not_handled)
     {
       /* A normal command.  */
-      *command = new struct command_line (simple_control,
-					  savestring (p, p_end - p));
+      *command = command_line_up (new command_line (simple_control,
+						    savestring (p, p_end - p)));
     }
 
   if (validator)
-    {
-      try
-	{
-	  validator ((*command)->line);
-	}
-      catch (const gdb_exception &ex)
-	{
-	  free_command_lines (command);
-	  throw;
-	}
-    }
+    validator ((*command)->line);
 
   /* Nothing special.  */
   return ok_command;
@@ -1073,16 +1065,17 @@ process_next_line (const char *p, struct
    obtain lines of the command.  */
 
 static enum command_control_type
-recurse_read_control_structure (gdb::function_view<const char * ()> read_next_line_func,
+recurse_read_control_structure (read_next_line_ftype read_next_line_func,
 				struct command_line *current_cmd,
 				gdb::function_view<void (const char *)> validator)
 {
   enum misc_command_type val;
   enum command_control_type ret;
-  struct command_line *child_tail, *next;
+  struct command_line *child_tail;
   counted_command_line *current_body = &current_cmd->body_list_0;
+  command_line_up next;
 
-  child_tail = NULL;
+  child_tail = nullptr;
 
   /* Sanity checks.  */
   if (current_cmd->control_type == simple_control)
@@ -1093,8 +1086,9 @@ recurse_read_control_structure (gdb::fun
     {
       dont_repeat ();
 
-      next = NULL;
-      val = process_next_line (read_next_line_func (), &next, 
+      std::string buffer;
+      next = nullptr;
+      val = process_next_line (read_next_line_func (buffer), &next,
 			       current_cmd->control_type != python_control
 			       && current_cmd->control_type != guile_control
 			       && current_cmd->control_type != compile_control,
@@ -1126,7 +1120,7 @@ recurse_read_control_structure (gdb::fun
 	      && current_body == &current_cmd->body_list_0)
 	    {
 	      current_body = &current_cmd->body_list_1;
-	      child_tail = NULL;
+	      child_tail = nullptr;
 	      continue;
 	    }
 	  else
@@ -1136,21 +1130,26 @@ recurse_read_control_structure (gdb::fun
 	    }
 	}
 
-      if (child_tail)
+      /* Transfer ownership of NEXT to the command's body list.  */
+      if (child_tail != nullptr)
 	{
-	  child_tail->next = next;
+	  child_tail->next = next.release ();
+	  child_tail = child_tail->next;
 	}
       else
-	*current_body = counted_command_line (next, command_lines_deleter ());
-
-      child_tail = next;
+	{
+	  child_tail = next.get ();
+	  *current_body = counted_command_line (next.release (),
+						command_lines_deleter ());
+	}
 
       /* If the latest line is another control structure, then recurse
-         on it.  */
-      if (multi_line_command_p (next->control_type))
+	 on it.  */
+      if (multi_line_command_p (child_tail->control_type))
 	{
 	  control_level++;
-	  ret = recurse_read_control_structure (read_next_line_func, next,
+	  ret = recurse_read_control_structure (read_next_line_func,
+						child_tail,
 						validator);
 	  control_level--;
 
@@ -1179,7 +1178,7 @@ counted_command_line
 read_command_lines (const char *prompt_arg, int from_tty, int parse_commands,
 		    gdb::function_view<void (const char *)> validator)
 {
-  if (from_tty && input_interactive_p (current_ui))
+  if (from_tty && current_ui->input_interactive_p ())
     {
       if (deprecated_readline_begin_hook)
 	{
@@ -1206,7 +1205,7 @@ read_command_lines (const char *prompt_a
 				   validator);
     }
 
-  if (from_tty && input_interactive_p (current_ui)
+  if (from_tty && current_ui->input_interactive_p ()
       && deprecated_readline_end_hook)
     {
       (*deprecated_readline_end_hook) ();
@@ -1218,14 +1217,15 @@ read_command_lines (const char *prompt_a
    obtained using READ_NEXT_LINE_FUNC.  */
 
 counted_command_line
-read_command_lines_1 (gdb::function_view<const char * ()> read_next_line_func,
+read_command_lines_1 (read_next_line_ftype read_next_line_func,
 		      int parse_commands,
 		      gdb::function_view<void (const char *)> validator)
 {
-  struct command_line *tail, *next;
+  struct command_line *tail;
   counted_command_line head (nullptr, command_lines_deleter ());
   enum command_control_type ret;
   enum misc_command_type val;
+  command_line_up next;
 
   control_level = 0;
   tail = NULL;
@@ -1233,7 +1233,9 @@ read_command_lines_1 (gdb::function_view
   while (1)
     {
       dont_repeat ();
-      val = process_next_line (read_next_line_func (), &next, parse_commands,
+
+      std::string buffer;
+      val = process_next_line (read_next_line_func (buffer), &next, parse_commands,
 			       validator);
 
       /* Ignore blank lines or comments.  */
@@ -1255,7 +1257,7 @@ read_command_lines_1 (gdb::function_view
       if (multi_line_command_p (next->control_type))
 	{
 	  control_level++;
-	  ret = recurse_read_control_structure (read_next_line_func, next,
+	  ret = recurse_read_control_structure (read_next_line_func, next.get (),
 						validator);
 	  control_level--;
 
@@ -1263,15 +1265,18 @@ read_command_lines_1 (gdb::function_view
 	    break;
 	}
 
+      /* Transfer ownership of NEXT to the HEAD list.  */
       if (tail)
 	{
-	  tail->next = next;
+	  tail->next = next.release ();
+	  tail = tail->next;
 	}
       else
 	{
-	  head = counted_command_line (next, command_lines_deleter ());
+	  tail = next.get ();
+	  head = counted_command_line (next.release (),
+				       command_lines_deleter ());
 	}
-      tail = next;
     }
 
   dont_repeat ();
@@ -1331,11 +1336,11 @@ validate_comname (const char **comname)
       std::string prefix (*comname, last_word - 1);
       const char *tem = prefix.c_str ();
 
-      c = lookup_cmd (&tem, cmdlist, "", 0, 1);
-      if (c->prefixlist == NULL)
+      c = lookup_cmd (&tem, cmdlist, "", NULL, 0, 1);
+      if (!c->is_prefix ())
 	error (_("\"%s\" is not a prefix command."), prefix.c_str ());
 
-      list = c->prefixlist;
+      list = c->subcommands;
       *comname = last_word;
     }
 
@@ -1373,7 +1378,7 @@ do_define_command (const char *comname,
       CMD_POST_HOOK
     };
   struct cmd_list_element *c, *newc, *hookc = 0, **list;
-  const char *tem, *comfull;
+  const char *comfull;
   int  hook_type      = CMD_NO_HOOK;
   int  hook_name_size = 0;
    
@@ -1385,11 +1390,7 @@ do_define_command (const char *comname,
   comfull = comname;
   list = validate_comname (&comname);
 
-  /* Look it up, and verify that we got an exact match.  */
-  tem = comname;
-  c = lookup_cmd (&tem, *list, "", -1, 1);
-  if (c && strcmp (comname, c->name) != 0)
-    c = 0;
+  c = lookup_cmd_exact (comname, *list);
 
   if (c && commands == nullptr)
     {
@@ -1400,7 +1401,7 @@ do_define_command (const char *comname,
 	  /* if C is a prefix command that was previously defined,
 	     tell the user its subcommands will be kept, and ask
 	     if ok to redefine the command.  */
-	  if (c->prefixlist != nullptr)
+	  if (c->is_prefix ())
 	    q = (c->user_commands.get () == nullptr
 		 || query (_("Keeping subcommands of prefix command \"%s\".\n"
 			     "Redefine command \"%s\"? "), c->name, c->name));
@@ -1430,11 +1431,9 @@ do_define_command (const char *comname,
 
   if (hook_type != CMD_NO_HOOK)
     {
-      /* Look up cmd it hooks, and verify that we got an exact match.  */
-      tem = comname + hook_name_size;
-      hookc = lookup_cmd (&tem, *list, "", -1, 0);
-      if (hookc && strcmp (comname + hook_name_size, hookc->name) != 0)
-	hookc = 0;
+      /* Look up cmd it hooks.  */
+      hookc = lookup_cmd_exact (comname + hook_name_size, *list,
+				/* ignore_help_classes = */ false);
       if (!hookc && commands == nullptr)
 	{
 	  warning (_("Your new `%s' command does not "
@@ -1458,9 +1457,8 @@ do_define_command (const char *comname,
     cmds = *commands;
 
   {
-    struct cmd_list_element **c_prefixlist
-      = c == nullptr ? nullptr : c->prefixlist;
-    const char *c_prefixname = c == nullptr ? nullptr : c->prefixname;
+    struct cmd_list_element **c_subcommands
+      = c == nullptr ? nullptr : c->subcommands;
 
     newc = add_cmd (comname, class_user, user_defined_command,
 		    (c != nullptr && c->theclass == class_user)
@@ -1469,10 +1467,9 @@ do_define_command (const char *comname,
 
     /* If we define or re-define a command that was previously defined
        as a prefix, keep the prefix information.  */
-    if (c_prefixlist != nullptr)
+    if (c_subcommands != nullptr)
       {
-	newc->prefixlist = c_prefixlist;
-	newc->prefixname = c_prefixname;
+	newc->subcommands = c_subcommands;
 	/* allow_unknown: see explanation in equivalent logic in
 	   define_prefix_command ().  */
 	newc->allow_unknown = newc->user_commands.get () != nullptr;
@@ -1484,20 +1481,20 @@ do_define_command (const char *comname,
   if (hookc)
     {
       switch (hook_type)
-        {
-        case CMD_PRE_HOOK:
-          hookc->hook_pre  = newc;  /* Target gets hooked.  */
-          newc->hookee_pre = hookc; /* We are marked as hooking target cmd.  */
-          break;
-        case CMD_POST_HOOK:
-          hookc->hook_post  = newc;  /* Target gets hooked.  */
-          newc->hookee_post = hookc; /* We are marked as hooking
+	{
+	case CMD_PRE_HOOK:
+	  hookc->hook_pre  = newc;  /* Target gets hooked.  */
+	  newc->hookee_pre = hookc; /* We are marked as hooking target cmd.  */
+	  break;
+	case CMD_POST_HOOK:
+	  hookc->hook_post  = newc;  /* Target gets hooked.  */
+	  newc->hookee_post = hookc; /* We are marked as hooking
 					target cmd.  */
-          break;
-        default:
-          /* Should never come here as hookc would be 0.  */
-	  internal_error (__FILE__, __LINE__, _("bad switch"));
-        }
+	  break;
+	default:
+	  /* Should never come here as hookc would be 0.  */
+	  internal_error (_("bad switch"));
+	}
     }
 }
 
@@ -1507,28 +1504,50 @@ define_command (const char *comname, int
   do_define_command (comname, from_tty, nullptr);
 }
 
+/* Document a user-defined command or user defined alias.  If COMMANDS is NULL,
+   then this is a top-level call and the document will be read using
+   read_command_lines.  Otherwise, it is a "document" command in an existing
+   command and the commands are provided.  */
 static void
-document_command (const char *comname, int from_tty)
+do_document_command (const char *comname, int from_tty,
+		     const counted_command_line *commands)
 {
-  struct cmd_list_element *c, **list;
-  const char *tem;
+  struct cmd_list_element *alias, *prefix_cmd, *c;
   const char *comfull;
 
   comfull = comname;
-  list = validate_comname (&comname);
+  validate_comname (&comname);
 
-  tem = comname;
-  c = lookup_cmd (&tem, *list, "", 0, 1);
+  lookup_cmd_composition (comfull, &alias, &prefix_cmd, &c);
+  if (c == nullptr)
+    error (_("Undefined command: \"%s\"."), comfull);
 
-  if (c->theclass != class_user)
-    error (_("Command \"%s\" is built-in."), comfull);
+  if (c->theclass != class_user
+      && (alias == nullptr || alias->theclass != class_alias))
+    {
+      if (alias == nullptr)
+	error (_("Command \"%s\" is built-in."), comfull);
+      else
+	error (_("Alias \"%s\" is built-in."), comfull);
+    }
+
+  /* If we found an alias of class_alias, the user is documenting this
+     user-defined alias.  */
+  if (alias != nullptr)
+    c = alias;
+
+  counted_command_line doclines;
 
-  std::string prompt = string_printf ("Type documentation for \"%s\".",
-				      comfull);
-  counted_command_line doclines = read_command_lines (prompt.c_str (),
-						      from_tty, 0, 0);
+  if (commands == nullptr)
+    {
+      std::string prompt
+	= string_printf ("Type documentation for \"%s\".", comfull);
+      doclines = read_command_lines (prompt.c_str (), from_tty, 0, 0);
+    }
+  else
+    doclines = *commands;
 
-  if (c->doc)
+  if (c->doc_allocated)
     xfree ((char *) c->doc);
 
   {
@@ -1550,31 +1569,33 @@ document_command (const char *comname, i
       }
 
     c->doc = doc;
+    c->doc_allocated = 1;
   }
 }
 
+static void
+document_command (const char *comname, int from_tty)
+{
+  do_document_command (comname, from_tty, nullptr);
+}
+
 /* Implementation of the "define-prefix" command.  */
 
 static void
 define_prefix_command (const char *comname, int from_tty)
 {
   struct cmd_list_element *c, **list;
-  const char *tem;
   const char *comfull;
 
   comfull = comname;
   list = validate_comname (&comname);
 
-  /* Look it up, and verify that we got an exact match.  */
-  tem = comname;
-  c = lookup_cmd (&tem, *list, "", -1, 1);
-  if (c != nullptr && strcmp (comname, c->name) != 0)
-    c = nullptr;
+  c = lookup_cmd_exact (comname, *list);
 
   if (c != nullptr && c->theclass != class_user)
     error (_("Command \"%s\" is built-in."), comfull);
 
-  if (c != nullptr && c->prefixlist != nullptr)
+  if (c != nullptr && c->is_prefix ())
     {
       /* c is already a user defined prefix command.  */
       return;
@@ -1588,11 +1609,10 @@ define_prefix_command (const char *comna
 		   xstrdup ("User-defined."), list);
     }
 
-  /* Allocate the c->prefixlist, which marks the command as a prefix
+  /* Allocate the c->subcommands, which marks the command as a prefix
      command.  */
-  c->prefixlist = new struct cmd_list_element*;
-  *(c->prefixlist) = nullptr;
-  c->prefixname = xstrprintf ("%s ", comfull);
+  c->subcommands = new struct cmd_list_element*;
+  *(c->subcommands) = nullptr;
   /* If the prefix command C is not a command, then it must be followed
      by known subcommands.  Otherwise, if C is also a normal command,
      it can be followed by C args that must not cause a 'subcommand'
@@ -1607,7 +1627,7 @@ void
 script_from_file (FILE *stream, const char *file)
 {
   if (stream == NULL)
-    internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
+    internal_error (_("called with NULL file pointer!"));
 
   scoped_restore restore_line_number
     = make_scoped_restore (&source_line_number, 0);
@@ -1644,42 +1664,44 @@ show_user_1 (struct cmd_list_element *c,
     {
       struct command_line *cmdlines = c->user_commands.get ();
 
-      fprintf_filtered (stream, "User %scommand \"",
-			c->prefixlist == NULL ? "" : "prefix ");
+      gdb_printf (stream, "User %scommand \"",
+		  c->is_prefix () ? "prefix" : "");
       fprintf_styled (stream, title_style.style (), "%s%s",
 		      prefix, name);
-      fprintf_filtered (stream, "\":\n");
+      gdb_printf (stream, "\":\n");
       if (cmdlines)
 	{
 	  print_command_lines (current_uiout, cmdlines, 1);
-	  fputs_filtered ("\n", stream);
+	  gdb_puts ("\n", stream);
 	}
     }
 
-  if (c->prefixlist != NULL)
+  if (c->is_prefix ())
     {
-      const char *prefixname = c->prefixname;
+      const std::string prefixname = c->prefixname ();
 
-      for (c = *c->prefixlist; c != NULL; c = c->next)
-	if (c->theclass == class_user || c->prefixlist != NULL)
-	  show_user_1 (c, prefixname, c->name, gdb_stdout);
+      for (c = *c->subcommands; c != NULL; c = c->next)
+	if (c->theclass == class_user || c->is_prefix ())
+	  show_user_1 (c, prefixname.c_str (), c->name, gdb_stdout);
     }
 
 }
 
+void _initialize_cli_script ();
 void
-_initialize_cli_script (void)
+_initialize_cli_script ()
 {
   struct cmd_list_element *c;
 
   /* "document", "define" and "define-prefix" use command_completer,
      as this helps the user to either type the command name and/or
      its prefixes.  */
-  c = add_com ("document", class_support, document_command, _("\
-Document a user-defined command.\n\
-Give command name as argument.  Give documentation on following lines.\n\
+  document_cmd_element = add_com ("document", class_support, document_command,
+				  _("\
+Document a user-defined command or user-defined alias.\n\
+Give command or alias name as argument.  Give documentation on following lines.\n\
 End with a line of just \"end\"."));
-  set_cmd_completer (c, command_completer);
+  set_cmd_completer (document_cmd_element, command_completer);
   define_cmd_element = add_com ("define", class_support, define_command, _("\
 Define a new command name.  Command name is argument.\n\
 Definition appears on following lines, one command per line.\n\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-script.h ./gdb/cli/cli-script.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-script.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-script.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB CLI command implementation library.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -45,6 +45,7 @@ enum command_control_type
   guile_control,
   while_stepping_control,
   define_control,
+  document_control,
   invalid_control
 };
 
@@ -65,6 +66,9 @@ struct command_lines_deleter
 /* A reference-counted struct command_line.  */
 typedef std::shared_ptr<command_line> counted_command_line;
 
+/* A unique_ptr specialization for command_line.  */
+typedef std::unique_ptr<command_line, command_lines_deleter> command_line_up;
+
 /* * Structure for saved commands lines (for breakpoints, defined
    commands, etc).  */
 
@@ -108,11 +112,18 @@ private:
   }
 };
 
+/* Prototype for a function to call to get one more input line.
+
+   If the function needs to return a dynamically allocated string, it can place
+   in the passed-in buffer, and return a pointer to it.  Otherwise, it can
+   simply ignore it.  */
+
+using read_next_line_ftype = gdb::function_view<const char * (std::string &)>;
+
 extern counted_command_line read_command_lines
     (const char *, int, int, gdb::function_view<void (const char *)>);
 extern counted_command_line read_command_lines_1
-    (gdb::function_view<const char * ()>, int,
-     gdb::function_view<void (const char *)>);
+    (read_next_line_ftype, int, gdb::function_view<void (const char *)>);
 
 
 /* Exported to cli/cli-cmds.c */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-setshow.c ./gdb/cli/cli-setshow.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-setshow.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-setshow.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Handle set and show GDB commands.
 
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
 #include <ctype.h>
 #include "arch-utils.h"
 #include "observable.h"
+#include "interps.h"
 
 #include "ui-out.h"
 
@@ -31,17 +32,13 @@
 
 /* Return true if the change of command parameter should be notified.  */
 
-static int
-notify_command_param_changed_p (int param_changed, struct cmd_list_element *c)
+static bool
+notify_command_param_changed_p (bool param_changed, struct cmd_list_element *c)
 {
-  if (param_changed == 0)
-    return 0;
-
-  if (c->theclass == class_maintenance || c->theclass == class_deprecated
-      || c->theclass == class_obscure)
-    return 0;
+  if (!param_changed)
+    return false;
 
-  return 1;
+  return c->theclass != class_maintenance && c->theclass != class_obscure;
 }
 
 
@@ -121,7 +118,7 @@ parse_cli_boolean_value (const char *arg
 }
 
 
-void
+static void
 deprecated_show_value_hack (struct ui_file *ignore_file,
 			    int ignore_from_tty,
 			    struct cmd_list_element *c,
@@ -130,28 +127,34 @@ deprecated_show_value_hack (struct ui_fi
   /* If there's no command or value, don't try to print it out.  */
   if (c == NULL || value == NULL)
     return;
+
   /* Print doc minus "Show " at start.  Tell print_doc_line that
      this is for a 'show value' prefix.  */
   print_doc_line (gdb_stdout, c->doc + 5, true);
-  switch (c->var_type)
+
+  gdb_assert (c->var.has_value ());
+
+  switch (c->var->type ())
     {
     case var_string:
     case var_string_noescape:
     case var_optional_filename:
     case var_filename:
     case var_enum:
-      printf_filtered ((" is \"%s\".\n"), value);
+      gdb_printf ((" is \"%s\".\n"), value);
       break;
+
     default:
-      printf_filtered ((" is %s.\n"), value);
+      gdb_printf ((" is %s.\n"), value);
       break;
     }
 }
 
-/* Returns true if ARG is "unlimited".  */
+/* Returns true and the value in VAL if ARG is an accepted literal.  */
 
 static bool
-is_unlimited_literal (const char **arg, bool expression)
+get_literal_val (LONGEST &val, const literal_def *extra_literals,
+		 const char **arg, bool expression)
 {
   *arg = skip_spaces (*arg);
 
@@ -161,85 +164,104 @@ is_unlimited_literal (const char **arg,
 
   size_t len = p - *arg;
 
-  if (len > 0 && strncmp ("unlimited", *arg, len) == 0)
-    {
-      *arg += len;
+  if (len > 0 && extra_literals != nullptr)
+    for (const literal_def *l = extra_literals;
+	 l->literal != nullptr;
+	 l++)
+      if (strncmp (l->literal, *arg, len) == 0)
+	{
+	  *arg += len;
+
+	  /* If parsing an expression (i.e., parsing for a "set" command),
+	     anything after the literal is junk.  For options, anything
+	     after the literal might be a command argument or another
+	     option.  */
+	  if (expression)
+	    {
+	      const char *after = skip_spaces (*arg);
+	      if (*after != '\0')
+		error (_("Junk after \"%.*s\": %s"),
+		       (int) len, unl_start, after);
+	    }
 
-      /* If parsing an expression (i.e., parsing for a "set" command),
-	 anything after "unlimited" is junk.  For options, anything
-	 after "unlimited" might be a command argument or another
-	 option.  */
-      if (expression)
-	{
-	  const char *after = skip_spaces (*arg);
-	  if (*after != '\0')
-	    error (_("Junk after \"%.*s\": %s"),
-		   (int) len, unl_start, after);
+	  val = l->use;
+	  return true;
 	}
 
-      return true;
-    }
-
   return false;
 }
 
 /* See cli-setshow.h.  */
 
-unsigned int
-parse_cli_var_uinteger (var_types var_type, const char **arg,
-			bool expression)
+LONGEST
+parse_cli_var_integer (var_types var_type, const literal_def *extra_literals,
+		       const char **arg, bool expression)
 {
   LONGEST val;
 
   if (*arg == nullptr || **arg == '\0')
     {
-      if (var_type == var_uinteger)
-	error_no_arg (_("integer to set it to, or \"unlimited\"."));
+      if (extra_literals == nullptr)
+	error_no_arg (_("integer to set it to"));
       else
-	error_no_arg (_("integer to set it to."));
-    }
-
-  if (var_type == var_uinteger && is_unlimited_literal (arg, expression))
-    val = 0;
-  else if (expression)
-    val = parse_and_eval_long (*arg);
-  else
-    val = get_ulongest (arg);
-
-  if (var_type == var_uinteger && val == 0)
-    val = UINT_MAX;
-  else if (val < 0
-	   /* For var_uinteger, don't let the user set the value
-	      to UINT_MAX directly, as that exposes an
-	      implementation detail to the user interface.  */
-	   || (var_type == var_uinteger && val >= UINT_MAX)
-	   || (var_type == var_zuinteger && val > UINT_MAX))
-    error (_("integer %s out of range"), plongest (val));
-
-  return val;
-}
-
-/* See cli-setshow.h.  */
+	{
+	  std::string buffer = "";
+	  size_t count = 0;
 
-int
-parse_cli_var_zuinteger_unlimited (const char **arg, bool expression)
-{
-  LONGEST val;
+	  for (const literal_def *l = extra_literals;
+	       l->literal != nullptr;
+	       l++, count++)
+	    {
+	      if (count != 0)
+		buffer += ", ";
+	      buffer = buffer + '"' + l->literal + '"';
+	    }
+	  if (count > 1)
+	    error_no_arg
+	      (string_printf (_("integer to set it to, or one of: %s"),
+			      buffer.c_str ()).c_str ());
+	  else
+	    error_no_arg
+	      (string_printf (_("integer to set it to, or %s"),
+			      buffer.c_str ()).c_str ());
+	}
+    }
 
-  if (*arg == nullptr || **arg == '\0')
-    error_no_arg (_("integer to set it to, or \"unlimited\"."));
+  if (!get_literal_val (val, extra_literals, arg, expression))
+    {
+      if (expression)
+	val = parse_and_eval_long (*arg);
+      else
+	val = get_ulongest (arg);
 
-  if (is_unlimited_literal (arg, expression))
-    val = -1;
-  else if (expression)
-    val = parse_and_eval_long (*arg);
-  else
-    val = get_ulongest (arg);
+      enum tribool allowed = TRIBOOL_UNKNOWN;
+      if (extra_literals != nullptr)
+	{
+	  for (const literal_def *l = extra_literals;
+	       l->literal != nullptr;
+	       l++)
+	    if (l->val.has_value () && val == *l->val)
+	      {
+		allowed = TRIBOOL_TRUE;
+		val = l->use;
+		break;
+	      }
+	    else if (val == l->use)
+	      allowed = TRIBOOL_FALSE;
+	}
 
-  if (val > INT_MAX)
-    error (_("integer %s out of range"), plongest (val));
-  else if (val < -1)
-    error (_("only -1 is allowed to set as unlimited"));
+      if (allowed == TRIBOOL_UNKNOWN)
+	{
+	  if (val > UINT_MAX || val < INT_MIN
+	      || (var_type == var_uinteger && val < 0)
+	      || (var_type == var_integer && val > INT_MAX)
+	      || (var_type == var_pinteger && val < 0)
+	      || (var_type == var_pinteger && val > INT_MAX))
+	    allowed = TRIBOOL_FALSE;
+	}
+      if (allowed == TRIBOOL_FALSE)
+	error (_("integer %s out of range"), plongest (val));
+    }
 
   return val;
 }
@@ -305,25 +327,25 @@ void
 do_set_command (const char *arg, int from_tty, struct cmd_list_element *c)
 {
   /* A flag to indicate the option is changed or not.  */
-  int option_changed = 0;
+  bool option_changed = false;
 
   gdb_assert (c->type == set_cmd);
 
   if (arg == NULL)
     arg = "";
 
-  switch (c->var_type)
+  gdb_assert (c->var.has_value ());
+
+  switch (c->var->type ())
     {
     case var_string:
       {
-	char *newobj;
+	std::string newobj;
 	const char *p;
-	char *q;
 	int ch;
 
-	newobj = (char *) xmalloc (strlen (arg) + 2);
+	newobj.reserve (strlen (arg));
 	p = arg;
-	q = newobj;
 	while ((ch = *p++) != '\000')
 	  {
 	    if (ch == '\\')
@@ -341,43 +363,23 @@ do_set_command (const char *arg, int fro
 		if (ch == 0)
 		  break;	/* C loses */
 		else if (ch > 0)
-		  *q++ = ch;
+		  newobj.push_back (ch);
 	      }
 	    else
-	      *q++ = ch;
+	      newobj.push_back (ch);
 	  }
-#if 0
-	if (*(p - 1) != '\\')
-	  *q++ = ' ';
-#endif
-	*q++ = '\0';
-	newobj = (char *) xrealloc (newobj, q - newobj);
+	newobj.shrink_to_fit ();
 
-	if (*(char **) c->var == NULL
-	    || strcmp (*(char **) c->var, newobj) != 0)
-	  {
-	    xfree (*(char **) c->var);
-	    *(char **) c->var = newobj;
-
-	    option_changed = 1;
-	  }
-	else
-	  xfree (newobj);
+	option_changed = c->var->set<std::string> (std::move (newobj));
       }
       break;
     case var_string_noescape:
-      if (*(char **) c->var == NULL || strcmp (*(char **) c->var, arg) != 0)
-	{
-	  xfree (*(char **) c->var);
-	  *(char **) c->var = xstrdup (arg);
-
-	  option_changed = 1;
-	}
+      option_changed = c->var->set<std::string> (std::string (arg));
       break;
     case var_filename:
       if (*arg == '\0')
 	error_no_arg (_("filename to set it to."));
-      /* FALLTHROUGH */
+      [[fallthrough]];
     case var_optional_filename:
       {
 	char *val = NULL;
@@ -386,28 +388,20 @@ do_set_command (const char *arg, int fro
 	  {
 	    /* Clear trailing whitespace of filename.  */
 	    const char *ptr = arg + strlen (arg) - 1;
-	    char *copy;
 
 	    while (ptr >= arg && (*ptr == ' ' || *ptr == '\t'))
 	      ptr--;
-	    copy = xstrndup (arg, ptr + 1 - arg);
+	    gdb::unique_xmalloc_ptr<char> copy
+	      = make_unique_xstrndup (arg, ptr + 1 - arg);
 
-	    val = tilde_expand (copy);
-	    xfree (copy);
+	    val = tilde_expand (copy.get ());
 	  }
 	else
 	  val = xstrdup ("");
 
-	if (*(char **) c->var == NULL
-	    || strcmp (*(char **) c->var, val) != 0)
-	  {
-	    xfree (*(char **) c->var);
-	    *(char **) c->var = val;
-
-	    option_changed = 1;
-	  }
-	else
-	  xfree (val);
+	option_changed
+	  = c->var->set<std::string> (std::string (val));
+	xfree (val);
       }
       break;
     case var_boolean:
@@ -416,75 +410,27 @@ do_set_command (const char *arg, int fro
 
 	if (val < 0)
 	  error (_("\"on\" or \"off\" expected."));
-	if (val != *(bool *) c->var)
-	  {
-	    *(bool *) c->var = val;
 
-	    option_changed = 1;
-	  }
+	option_changed = c->var->set<bool> (val);
       }
       break;
     case var_auto_boolean:
-      {
-	enum auto_boolean val = parse_auto_binary_operation (arg);
-
-	if (*(enum auto_boolean *) c->var != val)
-	  {
-	    *(enum auto_boolean *) c->var = val;
-
-	    option_changed = 1;
-	  }
-      }
+      option_changed = c->var->set<enum auto_boolean> (parse_auto_binary_operation (arg));
       break;
     case var_uinteger:
-    case var_zuinteger:
-      {
-	unsigned int val = parse_cli_var_uinteger (c->var_type, &arg, true);
-
-	if (*(unsigned int *) c->var != val)
-	  {
-	    *(unsigned int *) c->var = val;
-
-	    option_changed = 1;
-	  }
-      }
+      option_changed
+	= c->var->set<unsigned int> (parse_cli_var_integer (c->var->type (),
+							    c->var->
+							    extra_literals (),
+							    &arg, true));
       break;
     case var_integer:
-    case var_zinteger:
-      {
-	LONGEST val;
-
-	if (*arg == '\0')
-	  {
-	    if (c->var_type == var_integer)
-	      error_no_arg (_("integer to set it to, or \"unlimited\"."));
-	    else
-	      error_no_arg (_("integer to set it to."));
-	  }
-
-	if (c->var_type == var_integer && is_unlimited_literal (&arg, true))
-	  val = 0;
-	else
-	  val = parse_and_eval_long (arg);
-
-	if (val == 0 && c->var_type == var_integer)
-	  val = INT_MAX;
-	else if (val < INT_MIN
-		 /* For var_integer, don't let the user set the value
-		    to INT_MAX directly, as that exposes an
-		    implementation detail to the user interface.  */
-		 || (c->var_type == var_integer && val >= INT_MAX)
-		 || (c->var_type == var_zinteger && val > INT_MAX))
-	  error (_("integer %s out of range"), plongest (val));
-
-	if (*(int *) c->var != val)
-	  {
-	    *(int *) c->var = val;
-
-	    option_changed = 1;
-	  }
-	break;
-      }
+    case var_pinteger:
+      option_changed
+	= c->var->set<int> (parse_cli_var_integer (c->var->type (),
+						   c->var->extra_literals (),
+						   &arg, true));
+      break;
     case var_enum:
       {
 	const char *end_arg = arg;
@@ -495,29 +441,14 @@ do_set_command (const char *arg, int fro
 	if (*after != '\0')
 	  error (_("Junk after item \"%.*s\": %s"), len, arg, after);
 
-	if (*(const char **) c->var != match)
-	  {
-	    *(const char **) c->var = match;
-
-	    option_changed = 1;
-	  }
-      }
-      break;
-    case var_zuinteger_unlimited:
-      {
-	int val = parse_cli_var_zuinteger_unlimited (&arg, true);
-
-	if (*(int *) c->var != val)
-	  {
-	    *(int *) c->var = val;
-	    option_changed = 1;
-	  }
+	option_changed = c->var->set<const char *> (match);
       }
       break;
     default:
       error (_("gdb internal error: bad var_type in do_setshow_command"));
     }
-  c->func (c, NULL, from_tty);
+
+  c->func (NULL, from_tty, c);
 
   if (notify_command_param_changed_p (option_changed, c))
     {
@@ -550,10 +481,10 @@ do_set_command (const char *arg, int fro
 	  p = p->prefix;
 	}
 
-      /* Don't trigger any observer notification if prefixlist is not
+      /* Don't trigger any observer notification if subcommands is not
 	 setlist.  */
       i--;
-      if (cmds[i]->prefixlist != &setlist)
+      if (cmds[i]->subcommands != &setlist)
 	{
 	  xfree (cmds);
 	  xfree (name);
@@ -577,46 +508,49 @@ do_set_command (const char *arg, int fro
 
       xfree (cmds);
 
-      switch (c->var_type)
+      switch (c->var->type ())
 	{
 	case var_string:
 	case var_string_noescape:
 	case var_filename:
 	case var_optional_filename:
+	  interps_notify_param_changed
+	    (name, c->var->get<std::string> ().c_str ());
+	  break;
 	case var_enum:
-	  gdb::observers::command_param_changed.notify (name, *(char **) c->var);
+	  interps_notify_param_changed
+	    (name, c->var->get<const char *> ());
 	  break;
 	case var_boolean:
 	  {
-	    const char *opt = *(bool *) c->var ? "on" : "off";
+	    const char *opt = c->var->get<bool> () ? "on" : "off";
 
-	    gdb::observers::command_param_changed.notify (name, opt);
+	    interps_notify_param_changed (name, opt);
 	  }
 	  break;
 	case var_auto_boolean:
 	  {
-	    const char *s = auto_boolean_enums[*(enum auto_boolean *) c->var];
+	    const char *s
+	      = auto_boolean_enums[c->var->get<enum auto_boolean> ()];
 
-	    gdb::observers::command_param_changed.notify (name, s);
+	    interps_notify_param_changed (name, s);
 	  }
 	  break;
 	case var_uinteger:
-	case var_zuinteger:
 	  {
 	    char s[64];
 
-	    xsnprintf (s, sizeof s, "%u", *(unsigned int *) c->var);
-	    gdb::observers::command_param_changed.notify (name, s);
+	    xsnprintf (s, sizeof s, "%u", c->var->get<unsigned int> ());
+	    interps_notify_param_changed (name, s);
 	  }
 	  break;
 	case var_integer:
-	case var_zinteger:
-	case var_zuinteger_unlimited:
+	case var_pinteger:
 	  {
 	    char s[64];
 
-	    xsnprintf (s, sizeof s, "%d", *(int *) c->var);
-	    gdb::observers::command_param_changed.notify (name, s);
+	    xsnprintf (s, sizeof s, "%d", c->var->get<int> ());
+	    interps_notify_param_changed (name, s);
 	  }
 	  break;
 	}
@@ -627,28 +561,36 @@ do_set_command (const char *arg, int fro
 /* See cli/cli-setshow.h.  */
 
 std::string
-get_setshow_command_value_string (const cmd_list_element *c)
+get_setshow_command_value_string (const setting &var)
 {
   string_file stb;
 
-  switch (c->var_type)
+  switch (var.type ())
     {
     case var_string:
-      if (*(char **) c->var)
-	stb.putstr (*(char **) c->var, '"');
+      {
+	std::string value = var.get<std::string> ();
+	if (!value.empty ())
+	  stb.putstr (value.c_str (), '"');
+      }
       break;
     case var_string_noescape:
     case var_optional_filename:
     case var_filename:
+      stb.puts (var.get<std::string> ().c_str ());
+      break;
     case var_enum:
-      if (*(char **) c->var)
-	stb.puts (*(char **) c->var);
+      {
+	const char *value = var.get<const char *> ();
+	if (value != nullptr)
+	  stb.puts (value);
+      }
       break;
     case var_boolean:
-      stb.puts (*(bool *) c->var ? "on" : "off");
+      stb.puts (var.get<bool> () ? "on" : "off");
       break;
     case var_auto_boolean:
-      switch (*(enum auto_boolean*) c->var)
+      switch (var.get<enum auto_boolean> ())
 	{
 	case AUTO_BOOLEAN_TRUE:
 	  stb.puts ("on");
@@ -665,34 +607,39 @@ get_setshow_command_value_string (const
 	}
       break;
     case var_uinteger:
-    case var_zuinteger:
-      if (c->var_type == var_uinteger
-	  && *(unsigned int *) c->var == UINT_MAX)
-	stb.puts ("unlimited");
-      else
-	stb.printf ("%u", *(unsigned int *) c->var);
-      break;
     case var_integer:
-    case var_zinteger:
-      if (c->var_type == var_integer
-	  && *(int *) c->var == INT_MAX)
-	stb.puts ("unlimited");
-      else
-	stb.printf ("%d", *(int *) c->var);
-      break;
-    case var_zuinteger_unlimited:
+    case var_pinteger:
       {
-	if (*(int *) c->var == -1)
-	  stb.puts ("unlimited");
-	else
-	  stb.printf ("%d", *(int *) c->var);
+	bool printed = false;
+	const LONGEST value
+	  = (var.type () == var_uinteger
+	     ? static_cast<LONGEST> (var.get<unsigned int> ())
+	     : static_cast<LONGEST> (var.get<int> ()));
+
+	if (var.extra_literals () != nullptr)
+	  for (const literal_def *l = var.extra_literals ();
+	       l->literal != nullptr;
+	       l++)
+	    if (value == l->use)
+	      {
+		stb.puts (l->literal);
+		printed = true;
+		break;
+	      }
+	if (!printed)
+	  {
+	    if (var.type () == var_uinteger)
+	      stb.printf ("%u", static_cast<unsigned int> (value));
+	    else
+	      stb.printf ("%d", static_cast<int> (value));
+	  }
       }
       break;
     default:
       gdb_assert_not_reached ("bad var_type");
     }
 
-  return std::move (stb.string ());
+  return stb.release ();
 }
 
 
@@ -707,18 +654,15 @@ do_show_command (const char *arg, int fr
   struct ui_out *uiout = current_uiout;
 
   gdb_assert (c->type == show_cmd);
+  gdb_assert (c->var.has_value ());
 
-  /* Possibly call the pre hook.  */
-  if (c->pre_show_hook)
-    (c->pre_show_hook) (c);
-
-  std::string val = get_setshow_command_value_string (c);
+  std::string val = get_setshow_command_value_string (*c->var);
 
   /* FIXME: cagney/2005-02-10: There should be MI and CLI specific
      versions of code to print the value out.  */
 
   if (uiout->is_mi_like_p ())
-    uiout->field_string ("value", val.c_str ());
+    uiout->field_string ("value", val);
   else
     {
       if (c->show_value_func != NULL)
@@ -727,45 +671,53 @@ do_show_command (const char *arg, int fr
 	deprecated_show_value_hack (gdb_stdout, from_tty, c, val.c_str ());
     }
 
-  c->func (c, NULL, from_tty);
+  c->func (NULL, from_tty, c);
 }
 
 /* Show all the settings in a list of show commands.  */
 
 void
-cmd_show_list (struct cmd_list_element *list, int from_tty, const char *prefix)
+cmd_show_list (struct cmd_list_element *list, int from_tty)
 {
   struct ui_out *uiout = current_uiout;
 
   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
   for (; list != NULL; list = list->next)
     {
+      /* We skip show command aliases to avoid showing duplicated values.  */
+
       /* If we find a prefix, run its list, prefixing our output by its
-         prefix (with "show " skipped).  */
-      if (list->prefixlist && !list->abbrev_flag)
+	 prefix (with "show " skipped).  */
+      if (list->is_prefix () && !list->is_alias ())
 	{
 	  ui_out_emit_tuple optionlist_emitter (uiout, "optionlist");
-	  const char *new_prefix = strstr (list->prefixname, "show ") + 5;
+	  std::string prefixname = list->prefixname ();
+	  const char *new_prefix = strstr (prefixname.c_str (), "show ") + 5;
 
 	  if (uiout->is_mi_like_p ())
 	    uiout->field_string ("prefix", new_prefix);
-	  cmd_show_list (*list->prefixlist, from_tty, new_prefix);
+	  cmd_show_list (*list->subcommands, from_tty);
 	}
-      else
+      else if (list->theclass != no_set_class && !list->is_alias ())
 	{
-	  if (list->theclass != no_set_class)
-	    {
-	      ui_out_emit_tuple option_emitter (uiout, "option");
+	  ui_out_emit_tuple option_emitter (uiout, "option");
 
-	      uiout->text (prefix);
-	      uiout->field_string ("name", list->name);
-	      uiout->text (":  ");
-	      if (list->type == show_cmd)
-		do_show_command (NULL, from_tty, list);
-	      else
-		cmd_func (list, NULL, from_tty);
+	  if (list->prefix != nullptr)
+	    {
+	      /* If we find a prefix, output it (with "show " skipped).  */
+	      std::string prefixname = list->prefix->prefixname ();
+	      prefixname = (!list->prefix->is_prefix () ? ""
+			    : strstr (prefixname.c_str (), "show ") + 5);
+	      uiout->text (prefixname);
 	    }
+	  uiout->field_string ("name", list->name);
+	  uiout->text (":  ");
+	  if (list->type == show_cmd)
+	    do_show_command (NULL, from_tty, list);
+	  else
+	    cmd_func (list, NULL, from_tty);
 	}
     }
 }
 
+
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-setshow.h ./gdb/cli/cli-setshow.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-setshow.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-setshow.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB CLI set and show commands implementation.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -29,21 +29,19 @@ extern int parse_cli_boolean_value (cons
    past a successfully parsed value.  */
 extern int parse_cli_boolean_value (const char **arg);
 
-/* Parse ARG, an option to a var_uinteger or var_zuinteger variable.
-   Either returns the parsed value on success or throws an error.  If
-   EXPRESSION is true, *ARG is parsed as an expression; otherwise, it
-   is parsed with get_ulongest.  It's not possible to parse the
+/* Parse ARG, an option to a var_uinteger, var_integer or var_pinteger
+   variable.  Return the parsed value on success or throw an error.  If
+   EXTRA_LITERALS is non-null, then interpret those literals accordingly.
+   If EXPRESSION is true, *ARG is parsed as an expression; otherwise,
+   it is parsed with get_ulongest.  It's not possible to parse the
    integer as an expression when there may be valid input after the
    integer, such as when parsing command options.  E.g., "print
    -elements NUMBER -obj --".  In such case, parsing as an expression
    would parse "-obj --" as part of the expression as well.  */
-extern unsigned int parse_cli_var_uinteger (var_types var_type,
-					    const char **arg,
-					    bool expression);
-
-/* Like parse_cli_var_uinteger, for var_zuinteger_unlimited.  */
-extern int parse_cli_var_zuinteger_unlimited (const char **arg,
-					      bool expression);
+extern LONGEST parse_cli_var_integer (var_types var_type,
+				      const literal_def *extra_literals,
+				      const char **arg,
+				      bool expression);
 
 /* Parse ARG, an option to a var_enum variable.  ENUM is a
    null-terminated array of possible values. Either returns the parsed
@@ -57,10 +55,9 @@ extern void do_set_command (const char *
 extern void do_show_command (const char *arg, int from_tty,
 			     struct cmd_list_element *c);
 
-/* Get a string version of C's current value.  */
-extern std::string get_setshow_command_value_string (const cmd_list_element *c);
+/* Get a string version of VAR's value.  */
+extern std::string get_setshow_command_value_string (const setting &var);
 
-extern void cmd_show_list (struct cmd_list_element *list, int from_tty,
-			   const char *prefix);
+extern void cmd_show_list (struct cmd_list_element *list, int from_tty);
 
 #endif /* CLI_CLI_SETSHOW_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-style.c ./gdb/cli/cli-style.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-style.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-style.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI colorizing
 
-   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,13 +19,15 @@
 
 #include "defs.h"
 #include "cli/cli-cmds.h"
+#include "cli/cli-decode.h"
+#include "cli/cli-setshow.h"
 #include "cli/cli-style.h"
 #include "source-cache.h"
 #include "observable.h"
 
 /* True if styling is enabled.  */
 
-#if defined (__MSDOS__) || defined (__CYGWIN__)
+#if defined (__MSDOS__)
 bool cli_styling = false;
 #else
 bool cli_styling = true;
@@ -36,6 +38,11 @@ bool cli_styling = true;
 
 bool source_styling = true;
 
+/* True if disassembler styling is enabled.  Note that this is only
+   consulted when cli_styling is true.  */
+
+bool disassembler_styling = true;
+
 /* Name of colors; must correspond to ui_file_style::basic_color.  */
 static const char * const cli_colors[] = {
   "none",
@@ -98,13 +105,36 @@ cli_style_option metadata_style ("metada
 
 /* See cli-style.h.  */
 
+cli_style_option version_style ("version", ui_file_style::MAGENTA,
+				ui_file_style::BOLD);
+
+/* See cli-style.h.  */
+
+cli_style_option disasm_mnemonic_style ("mnemonic", ui_file_style::GREEN);
+
+/* See cli-style.h.  */
+
+cli_style_option disasm_register_style ("register", ui_file_style::RED);
+
+/* See cli-style.h.  */
+
+cli_style_option disasm_immediate_style ("immediate", ui_file_style::BLUE);
+
+/* See cli-style.h.  */
+
+cli_style_option disasm_comment_style ("comment", ui_file_style::WHITE,
+				       ui_file_style::DIM);
+
+/* See cli-style.h.  */
+
 cli_style_option::cli_style_option (const char *name,
-				    ui_file_style::basic_color fg)
+				    ui_file_style::basic_color fg,
+				    ui_file_style::intensity intensity)
   : changed (name),
     m_name (name),
     m_foreground (cli_colors[fg - ui_file_style::NONE]),
     m_background (cli_colors[0]),
-    m_intensity (cli_intensities[ui_file_style::NORMAL])
+    m_intensity (cli_intensities[intensity])
 {
 }
 
@@ -160,7 +190,7 @@ void
 cli_style_option::do_set_value (const char *ignore, int from_tty,
 				struct cmd_list_element *cmd)
 {
-  cli_style_option *cso = (cli_style_option *) get_cmd_context (cmd);
+  cli_style_option *cso = (cli_style_option *) cmd->context ();
   cso->changed.notify ();
 }
 
@@ -173,10 +203,10 @@ do_show (const char *what, struct ui_fil
 	 struct cmd_list_element *cmd,
 	 const char *value)
 {
-  cli_style_option *cso = (cli_style_option *) get_cmd_context (cmd);
-  fputs_filtered (_("The "), file);
+  cli_style_option *cso = (cli_style_option *) cmd->context ();
+  gdb_puts (_("The "), file);
   fprintf_styled (file, cso->style (), _("\"%s\" style"), cso->name ());
-  fprintf_filtered (file, _(" %s is: %s\n"), what, value);
+  gdb_printf (file, _(" %s is: %s\n"), what, value);
 }
 
 /* See cli-style.h.  */
@@ -211,74 +241,77 @@ cli_style_option::do_show_intensity (str
 
 /* See cli-style.h.  */
 
-void
+set_show_commands
 cli_style_option::add_setshow_commands (enum command_class theclass,
 					const char *prefix_doc,
 					struct cmd_list_element **set_list,
-					void (*do_set) (const char *args,
-							int from_tty),
 					struct cmd_list_element **show_list,
-					void (*do_show) (const char *args,
-							 int from_tty),
 					bool skip_intensity)
 {
-  m_set_prefix = std::string ("set style ") + m_name + " ";
-  m_show_prefix = std::string ("show style ") + m_name + " ";
+  set_show_commands prefix_cmds
+    = add_setshow_prefix_cmd (m_name, theclass, prefix_doc, prefix_doc,
+			      &m_set_list, &m_show_list, set_list, show_list);
+
+  set_show_commands commands;
+
+  commands = add_setshow_enum_cmd
+    ("foreground", theclass, cli_colors,
+     &m_foreground,
+     _("Set the foreground color for this property."),
+     _("Show the foreground color for this property."),
+     nullptr,
+     do_set_value,
+     do_show_foreground,
+     &m_set_list, &m_show_list);
+  commands.set->set_context (this);
+  commands.show->set_context (this);
+
+  commands = add_setshow_enum_cmd
+    ("background", theclass, cli_colors,
+     &m_background,
+     _("Set the background color for this property."),
+     _("Show the background color for this property."),
+     nullptr,
+     do_set_value,
+     do_show_background,
+     &m_set_list, &m_show_list);
+  commands.set->set_context (this);
+  commands.show->set_context (this);
 
-  add_prefix_cmd (m_name, no_class, do_set, prefix_doc, &m_set_list,
-		  m_set_prefix.c_str (), 0, set_list);
-  add_prefix_cmd (m_name, no_class, do_show, prefix_doc, &m_show_list,
-		  m_show_prefix.c_str (), 0, show_list);
-
-  add_setshow_enum_cmd ("foreground", theclass, cli_colors,
-			&m_foreground,
-			_("Set the foreground color for this property."),
-			_("Show the foreground color for this property."),
-			nullptr,
-			do_set_value,
-			do_show_foreground,
-			&m_set_list, &m_show_list, (void *) this);
-  add_setshow_enum_cmd ("background", theclass, cli_colors,
-			&m_background,
-			_("Set the background color for this property."),
-			_("Show the background color for this property."),
-			nullptr,
-			do_set_value,
-			do_show_background,
-			&m_set_list, &m_show_list, (void *) this);
   if (!skip_intensity)
-    add_setshow_enum_cmd ("intensity", theclass, cli_intensities,
-			  &m_intensity,
-			  _("Set the display intensity for this property."),
-			  _("Show the display intensity for this property."),
-			  nullptr,
-			  do_set_value,
-			  do_show_intensity,
-			  &m_set_list, &m_show_list, (void *) this);
+    {
+      commands = add_setshow_enum_cmd
+	("intensity", theclass, cli_intensities,
+	 &m_intensity,
+	 _("Set the display intensity for this property."),
+	 _("Show the display intensity for this property."),
+	 nullptr,
+	 do_set_value,
+	 do_show_intensity,
+	 &m_set_list, &m_show_list);
+      commands.set->set_context (this);
+      commands.show->set_context (this);
+    }
+
+  return prefix_cmds;
 }
 
-static cmd_list_element *style_set_list;
-static cmd_list_element *style_show_list;
+cmd_list_element *style_set_list;
+cmd_list_element *style_show_list;
 
-static void
-set_style (const char *arg, int from_tty)
-{
-  printf_unfiltered (_("\"set style\" must be followed "
-		       "by an appropriate subcommand.\n"));
-  help_list (style_set_list, "set style ", all_commands, gdb_stdout);
-}
+/* The command list for 'set style disassembler'.  */
 
-static void
-show_style (const char *arg, int from_tty)
-{
-  cmd_show_list (style_show_list, from_tty, "");
-}
+static cmd_list_element *style_disasm_set_list;
+
+/* The command list for 'show style disassembler'.  */
+
+static cmd_list_element *style_disasm_show_list;
 
 static void
 set_style_enabled  (const char *args, int from_tty, struct cmd_list_element *c)
 {
   g_source_cache.clear ();
-  gdb::observers::source_styling_changed.notify ();
+  gdb::observers::styling_changed.notify ();
 }
 
 static void
@@ -286,9 +319,9 @@ show_style_enabled (struct ui_file *file
 		    struct cmd_list_element *c, const char *value)
 {
   if (cli_styling)
-    fprintf_filtered (file, _("CLI output styling is enabled.\n"));
+    gdb_printf (file, _("CLI output styling is enabled.\n"));
   else
-    fprintf_filtered (file, _("CLI output styling is disabled.\n"));
+    gdb_printf (file, _("CLI output styling is disabled.\n"));
 }
 
 static void
@@ -296,34 +329,36 @@ show_style_sources (struct ui_file *file
 		    struct cmd_list_element *c, const char *value)
 {
   if (source_styling)
-    fprintf_filtered (file, _("Source code styling is enabled.\n"));
+    gdb_printf (file, _("Source code styling is enabled.\n"));
   else
-    fprintf_filtered (file, _("Source code styling is disabled.\n"));
+    gdb_printf (file, _("Source code styling is disabled.\n"));
 }
 
-/* Builds the "set style NAME " prefix.  */
+/* Implement 'show style disassembler'.  */
 
-static std::string
-set_style_name (const char *name)
+static void
+show_style_disassembler (struct ui_file *file, int from_tty,
+			 struct cmd_list_element *c, const char *value)
 {
-  std::string result ("set style ");
-
-  result += name;
-  result += " ";
-  return result;
+  if (disassembler_styling)
+    gdb_printf (file, _("Disassembler output styling is enabled.\n"));
+  else
+    gdb_printf (file, _("Disassembler output styling is disabled.\n"));
 }
 
+void _initialize_cli_style ();
 void
 _initialize_cli_style ()
 {
-  add_prefix_cmd ("style", no_class, set_style, _("\
+  add_setshow_prefix_cmd ("style", no_class,
+			  _("\
 Style-specific settings.\n\
 Configure various style-related variables, such as colors"),
-		  &style_set_list, "set style ", 0, &setlist);
-  add_prefix_cmd ("style", no_class, show_style, _("\
+			  _("\
 Style-specific settings.\n\
 Configure various style-related variables, such as colors"),
-		  &style_show_list, "show style ", 0, &showlist);
+			  &style_set_list, &style_show_list,
+			  &setlist, &showlist);
 
   add_setshow_boolean_cmd ("enabled", no_class, &cli_styling, _("\
 Set whether CLI styling is enabled."), _("\
@@ -340,84 +375,169 @@ If enabled, source code is styled.\n"
 "Note that source styling only works if styling in general is enabled,\n\
 see \"show style enabled\"."
 #else
-"Source highlighting is disabled in this installation of gdb, because\n\
-it was not linked against GNU Source Highlight."
+"Source highlighting may be disabled in this installation of gdb, because\n\
+it was not linked against GNU Source Highlight.  However, it might still be\n\
+available if the appropriate extension is available at runtime."
 #endif
 			   ), set_style_enabled, show_style_sources,
 			   &style_set_list, &style_show_list);
 
-#define STYLE_ADD_SETSHOW_COMMANDS(STYLE, PREFIX_DOC, SKIP)		\
-  STYLE.add_setshow_commands (no_class, PREFIX_DOC,		\
-			      &style_set_list,				\
-			      [] (const char *args, int from_tty)	\
-			      {						\
-				help_list				\
-				  (STYLE.set_list (),			\
-				   set_style_name (STYLE.name ()).c_str (), \
-				   all_commands,			\
-				   gdb_stdout);				\
-			      },					\
-			      &style_show_list,				\
-			      [] (const char *args, int from_tty)	\
-			      {						\
-				cmd_show_list				\
-				  (STYLE.show_list (),			\
-				   from_tty,				\
-				   "");					\
-			      }, SKIP)
+  add_setshow_prefix_cmd ("disassembler", no_class,
+			  _("\
+Style-specific settings for the disassembler.\n\
+Configure various disassembler style-related variables."),
+			  _("\
+Style-specific settings for the disassembler.\n\
+Configure various disassembler style-related variables."),
+			  &style_disasm_set_list, &style_disasm_show_list,
+			  &style_set_list, &style_show_list);
+
+  add_setshow_boolean_cmd ("enabled", no_class, &disassembler_styling, _("\
+Set whether disassembler output styling is enabled."), _("\
+Show whether disassembler output styling is enabled."), _("\
+If enabled, disassembler output is styled.  Disassembler highlighting\n\
+requires the Python Pygments library, if this library is not available\n\
+then disassembler highlighting will not be possible."
+			   ), set_style_enabled, show_style_disassembler,
+			   &style_disasm_set_list, &style_disasm_show_list);
 
-  STYLE_ADD_SETSHOW_COMMANDS (file_name_style,
-			      _("\
+  file_name_style.add_setshow_commands (no_class, _("\
 Filename display styling.\n\
-Configure filename colors and display intensity."), false);
+Configure filename colors and display intensity."),
+					&style_set_list, &style_show_list,
+					false);
 
-  STYLE_ADD_SETSHOW_COMMANDS (function_name_style,
-			      _("\
+  set_show_commands function_prefix_cmds
+    = function_name_style.add_setshow_commands (no_class, _("\
 Function name display styling.\n\
-Configure function name colors and display intensity"), false);
+Configure function name colors and display intensity"),
+						&style_set_list,
+						&style_show_list,
+						false);
 
-  STYLE_ADD_SETSHOW_COMMANDS (variable_name_style,
-			      _("\
+  variable_name_style.add_setshow_commands (no_class, _("\
 Variable name display styling.\n\
-Configure variable name colors and display intensity"), false);
+Configure variable name colors and display intensity"),
+					    &style_set_list, &style_show_list,
+					    false);
 
-  STYLE_ADD_SETSHOW_COMMANDS (address_style,
-			      _("\
+  set_show_commands address_prefix_cmds
+    = address_style.add_setshow_commands (no_class, _("\
 Address display styling.\n\
-Configure address colors and display intensity"), false);
+Configure address colors and display intensity"),
+					  &style_set_list, &style_show_list,
+					  false);
 
-  STYLE_ADD_SETSHOW_COMMANDS (title_style,
-			      _("\
+  title_style.add_setshow_commands (no_class, _("\
 Title display styling.\n\
 Configure title colors and display intensity\n\
 Some commands (such as \"apropos -v REGEXP\") use the title style to improve\n\
-readability."), false);
+readability."),
+				    &style_set_list, &style_show_list,
+				    false);
 
-  STYLE_ADD_SETSHOW_COMMANDS (highlight_style,
-			      _("\
+  highlight_style.add_setshow_commands (no_class, _("\
 Highlight display styling.\n\
 Configure highlight colors and display intensity\n\
 Some commands use the highlight style to draw the attention to a part\n\
-of their output."), false);
+of their output."),
+					&style_set_list, &style_show_list,
+					false);
 
-  STYLE_ADD_SETSHOW_COMMANDS (metadata_style,
-			      _("\
+  metadata_style.add_setshow_commands (no_class, _("\
 Metadata display styling.\n\
 Configure metadata colors and display intensity\n\
 The \"metadata\" style is used when GDB displays information about\n\
-your data, for example \"<unavailable>\""), false);
+your data, for example \"<unavailable>\""),
+				       &style_set_list, &style_show_list,
+				       false);
 
-  STYLE_ADD_SETSHOW_COMMANDS (tui_border_style,
-			      _("\
+  tui_border_style.add_setshow_commands (no_class, _("\
 TUI border display styling.\n\
 Configure TUI border colors\n\
 The \"tui-border\" style is used when GDB displays the border of a\n\
-TUI window that does not have the focus."), true);
+TUI window that does not have the focus."),
+					 &style_set_list, &style_show_list,
+					 true);
 
-  STYLE_ADD_SETSHOW_COMMANDS (tui_active_border_style,
-			      _("\
+  tui_active_border_style.add_setshow_commands (no_class, _("\
 TUI active border display styling.\n\
 Configure TUI active border colors\n\
 The \"tui-active-border\" style is used when GDB displays the border of a\n\
-TUI window that does have the focus."), true);
+TUI window that does have the focus."),
+						&style_set_list,
+						&style_show_list,
+						true);
+
+  version_style.add_setshow_commands (no_class, _("\
+Version string display styling.\n\
+Configure colors used to display the GDB version string."),
+				      &style_set_list, &style_show_list,
+				      false);
+
+  disasm_mnemonic_style.add_setshow_commands (no_class, _("\
+Disassembler mnemonic display styling.\n\
+Configure the colors and display intensity for instruction mnemonics\n\
+in the disassembler output.  The \"disassembler mnemonic\" style is\n\
+used to display instruction mnemonics as well as any assembler\n\
+directives, e.g. \".byte\", \".word\", etc.\n\
+\n\
+This style will only be used for targets that support libopcodes based\n\
+disassembler styling.  When Python Pygments based styling is used\n\
+then this style has no effect."),
+					      &style_disasm_set_list,
+					      &style_disasm_show_list,
+					      false);
+
+  disasm_register_style.add_setshow_commands (no_class, _("\
+Disassembler register display styling.\n\
+Configure the colors and display intensity for registers in the\n\
+disassembler output.\n\
+\n\
+This style will only be used for targets that support libopcodes based\n\
+disassembler styling.  When Python Pygments based styling is used\n\
+then this style has no effect."),
+					      &style_disasm_set_list,
+					      &style_disasm_show_list,
+					      false);
+
+  disasm_immediate_style.add_setshow_commands (no_class, _("\
+Disassembler immediate display styling.\n\
+Configure the colors and display intensity for immediates in the\n\
+disassembler output.  The \"disassembler immediate\" style is used for\n\
+any number that is not an address, this includes constants in arithmetic\n\
+instructions, as well as address offsets in memory access instructions.\n\
+\n\
+This style will only be used for targets that support libopcodes based\n\
+disassembler styling.  When Python Pygments based styling is used\n\
+then this style has no effect."),
+					       &style_disasm_set_list,
+					       &style_disasm_show_list,
+					       false);
+
+  disasm_comment_style.add_setshow_commands (no_class, _("\
+Disassembler comment display styling.\n\
+Configure the colors and display intensity for comments in the\n\
+disassembler output.  The \"disassembler comment\" style is used for\n\
+the comment character, and everything after the comment character up to\n\
+the end of the line.  The comment style overrides any other styling,\n\
+e.g. a register name in a comment will use the comment styling.\n\
+\n\
+This style will only be used for targets that support libopcodes based\n\
+disassembler styling.  When Python Pygments based styling is used\n\
+then this style has no effect."),
+					     &style_disasm_set_list,
+					     &style_disasm_show_list,
+					     false);
+
+  /* Setup 'disassembler address' style and 'disassembler symbol' style,
+     these are aliases for 'address' and 'function' styles respectively.  */
+  add_alias_cmd ("address", address_prefix_cmds.set, no_class, 0,
+		 &style_disasm_set_list);
+  add_alias_cmd ("address", address_prefix_cmds.show, no_class, 0,
+		 &style_disasm_show_list);
+  add_alias_cmd ("symbol", function_prefix_cmds.set, no_class, 0,
+		 &style_disasm_set_list);
+  add_alias_cmd ("symbol", function_prefix_cmds.show, no_class, 0,
+		 &style_disasm_show_list);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-style.h ./gdb/cli/cli-style.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-style.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-style.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI stylizing
 
-   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,7 +30,8 @@ class cli_style_option
 public:
 
   /* Construct a CLI style option with a foreground color.  */
-  cli_style_option (const char *name, ui_file_style::basic_color fg);
+  cli_style_option (const char *name, ui_file_style::basic_color fg,
+		    ui_file_style::intensity = ui_file_style::NORMAL);
 
   /* Construct a CLI style option with an intensity.  */
   cli_style_option (const char *name, ui_file_style::intensity i);
@@ -42,14 +43,13 @@ public:
   /* Return the style name.  */
   const char *name () { return m_name; };
 
-  /* Call once to register this CLI style with the CLI engine.  */
-  void add_setshow_commands (enum command_class theclass,
-			     const char *prefix_doc,
-			     struct cmd_list_element **set_list,
-			     void (*do_set) (const char *args, int from_tty),
-			     struct cmd_list_element **show_list,
-			     void (*do_show) (const char *args, int from_tty),
-			     bool skip_intensity);
+  /* Call once to register this CLI style with the CLI engine.  Returns
+     the set/show prefix commands for the style.  */
+  set_show_commands add_setshow_commands (enum command_class theclass,
+					  const char *prefix_doc,
+					  struct cmd_list_element **set_list,
+					  struct cmd_list_element **show_list,
+					  bool skip_intensity);
 
   /* Return the 'set style NAME' command list, that can be used
      to build a lambda DO_SET to call add_setshow_commands.  */
@@ -73,9 +73,6 @@ private:
   /* The intensity.  */
   const char *m_intensity;
 
-  /* Storage for prefixes needed when registering the commands.  */
-  std::string m_show_prefix;
-  std::string m_set_prefix;
   /* Storage for command lists needed when registering
      subcommands.  */
   struct cmd_list_element *m_set_list = nullptr;
@@ -120,15 +117,36 @@ extern cli_style_option title_style;
 /* The metadata style.  */
 extern cli_style_option metadata_style;
 
+/* The disassembler style for mnemonics or assembler directives
+   (e.g. '.byte', etc).  */
+extern cli_style_option disasm_mnemonic_style;
+
+/* The disassembler style for register names.  */
+extern cli_style_option disasm_register_style;
+
+/* The disassembler style for numerical values that are not addresses, this
+   includes immediate operands (e.g. in, an add instruction), but also
+   address offsets (e.g. in a load instruction).  */
+extern cli_style_option disasm_immediate_style;
+
+/* The disassembler style for comments.  */
+extern cli_style_option disasm_comment_style;
+
 /* The border style of a TUI window that does not have the focus.  */
 extern cli_style_option tui_border_style;
 
 /* The border style of a TUI window that does have the focus.  */
 extern cli_style_option tui_active_border_style;
 
+/* The style to use for the GDB version string.  */
+extern cli_style_option version_style;
+
 /* True if source styling is enabled.  */
 extern bool source_styling;
 
+/* True if disassembler styling is enabled.  */
+extern bool disassembler_styling;
+
 /* True if styling is enabled.  */
 extern bool cli_styling;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-utils.c ./gdb/cli/cli-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-utils.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-utils.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI utilities.
 
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -37,7 +37,7 @@ get_ulongest (const char **pp, int trail
 
       if (val != NULL)	/* Value history reference */
 	{
-	  if (TYPE_CODE (value_type (val)) == TYPE_CODE_INT)
+	  if (val->type ()->code () == TYPE_CODE_INT)
 	    retval = value_as_long (val);
 	  else
 	    error (_("History value must have integer type."));
@@ -96,11 +96,11 @@ get_number_trailer (const char **pp, int
 
       if (val)	/* Value history reference */
 	{
-	  if (TYPE_CODE (value_type (val)) == TYPE_CODE_INT)
+	  if (val->type ()->code () == TYPE_CODE_INT)
 	    retval = value_as_long (val);
 	  else
 	    {
-	      printf_filtered (_("History value must have integer type.\n"));
+	      gdb_printf (_("History value must have integer type.\n"));
 	      retval = 0;
 	    }
 	}
@@ -122,8 +122,8 @@ get_number_trailer (const char **pp, int
 	    retval = (int) longest_val;
 	  else
 	    {
-	      printf_filtered (_("Convenience variable must "
-				 "have integer value.\n"));
+	      gdb_printf (_("Convenience variable must "
+			    "have integer value.\n"));
 	      retval = 0;
 	    }
 	}
@@ -209,7 +209,7 @@ The flag -q disables the production of t
 		     prefix, entity_kind, entity_kind, entity_kind,
 		     (document_n_flag ? _("\n\
 By default, the command will include non-debug symbols in the output;\n\
-these can be excluded using the -n flag.") : ""));
+these can be excluded using the -n flag.") : "")).release ();
 }
 
 /* See documentation in cli-utils.h.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-utils.h ./gdb/cli/cli-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli/cli-utils.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli/cli-utils.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI utilities.
 
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli-out.c ./gdb/cli-out.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli-out.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli-out.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Output generating routines for GDB CLI.
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    Contributed by Cygnus Solutions.
    Written by Fernando Nasser for Cygnus.
@@ -26,6 +26,7 @@
 #include "completer.h"
 #include "readline/readline.h"
 #include "cli/cli-style.h"
+#include "ui.h"
 
 /* These are the CLI output functions */
 
@@ -171,10 +172,10 @@ cli_ui_out::do_field_string (int fldno,
 
   if (string)
     {
-      if (test_flags (unfiltered_output))
-	fputs_styled_unfiltered (string, style, m_streams.back ());
-      else
-	fputs_styled (string, style, m_streams.back ());
+      ui_file *stream = m_streams.back ();
+      stream->emit_style_escape (style);
+      stream->puts (string);
+      stream->emit_style_escape (ui_file_style ());
     }
 
   if (after)
@@ -205,10 +206,7 @@ cli_ui_out::do_spaces (int numspaces)
   if (m_suppress_output)
     return;
 
-  if (test_flags (unfiltered_output))
-    print_spaces (numspaces, m_streams.back ());
-  else
-    print_spaces_filtered (numspaces, m_streams.back ());
+  print_spaces (numspaces, m_streams.back ());
 }
 
 void
@@ -217,10 +215,7 @@ cli_ui_out::do_text (const char *string)
   if (m_suppress_output)
     return;
 
-  if (test_flags (unfiltered_output))
-    fputs_unfiltered (string, m_streams.back ());
-  else
-    fputs_filtered (string, m_streams.back ());
+  gdb_puts (string, m_streams.back ());
 }
 
 void
@@ -230,20 +225,23 @@ cli_ui_out::do_message (const ui_file_st
   if (m_suppress_output)
     return;
 
-  /* Use the "no_gdbfmt" variant here to avoid recursion.
-     vfprintf_styled calls into cli_ui_out::message to handle the
-     gdb-specific printf formats.  */
-  vfprintf_styled_no_gdbfmt (m_streams.back (), style,
-			     !test_flags (unfiltered_output), format, args);
+  std::string str = string_vprintf (format, args);
+  if (!str.empty ())
+    {
+      ui_file *stream = m_streams.back ();
+      stream->emit_style_escape (style);
+      stream->puts (str.c_str ());
+      stream->emit_style_escape (ui_file_style ());
+    }
 }
 
 void
-cli_ui_out::do_wrap_hint (const char *identstring)
+cli_ui_out::do_wrap_hint (int indent)
 {
   if (m_suppress_output)
     return;
 
-  wrap_here (identstring);
+  m_streams.back ()->wrap_here (indent);
 }
 
 void
@@ -265,15 +263,170 @@ cli_ui_out::do_redirect (ui_file *outstr
     m_streams.pop_back ();
 }
 
+/* Initialize a progress update to be displayed with
+   cli_ui_out::do_progress_notify.  */
+
+void
+cli_ui_out::do_progress_start ()
+{
+  m_progress_info.emplace_back ();
+}
+
+#define MIN_CHARS_PER_LINE 50
+#define MAX_CHARS_PER_LINE 4096
+
+/* Print a progress update.  MSG is a string to be printed on the line above
+   the progress bar.  TOTAL is the size of the download whose progress is
+   being displayed.  UNIT should be the unit of TOTAL (ex. "K"). If HOWMUCH
+   is between 0.0 and 1.0, a progress bar is displayed indicating the percentage
+   of completion and the download size.  If HOWMUCH is negative, a progress
+   indicator will tick across the screen.  If the output stream is not a tty
+   then only MSG is printed.
+
+   - printed for tty, HOWMUCH between 0.0 and 1.0:
+	<MSG
+	[#########                  ]  HOWMUCH*100% (TOTAL UNIT)\r>
+   - printed for tty, HOWMUCH < 0.0:
+	<MSG
+	[    ###                    ]\r>
+   - printed for not-a-tty:
+	<MSG...\n>
+*/
+
+void
+cli_ui_out::do_progress_notify (const std::string &msg,
+				const char *unit,
+				double howmuch, double total)
+{
+  int chars_per_line = get_chars_per_line ();
+  struct ui_file *stream = get_unbuffered (m_streams.back ());
+  cli_progress_info &info (m_progress_info.back ());
+
+  if (chars_per_line > MAX_CHARS_PER_LINE)
+    chars_per_line = MAX_CHARS_PER_LINE;
+
+  if (info.state == progress_update::START)
+    {
+      if (stream->isatty ()
+	  && current_ui->input_interactive_p ()
+	  && chars_per_line >= MIN_CHARS_PER_LINE)
+	{
+	  gdb_printf (stream, "%s\n", msg.c_str ());
+	  info.state = progress_update::BAR;
+	}
+      else
+	{
+	  gdb_printf (stream, "%s...\n", msg.c_str ());
+	  info.state = progress_update::WORKING;
+	}
+    }
+
+  if (info.state != progress_update::BAR
+      || chars_per_line < MIN_CHARS_PER_LINE)
+    return;
+
+  if (total > 0 && howmuch >= 0 && howmuch <= 1.0)
+    {
+      std::string progress = string_printf (" %3.f%% (%.2f %s)",
+					    howmuch * 100, total,
+					    unit);
+      int width = chars_per_line - progress.size () - 4;
+      int max = width * howmuch;
+
+      std::string display = "\r[";
+
+      for (int i = 0; i < width; ++i)
+	if (i < max)
+	  display += "#";
+	else
+	  display += " ";
+
+      display += "]" + progress;
+      gdb_printf (stream, "%s", display.c_str ());
+      gdb_flush (stream);
+    }
+  else
+    {
+      using namespace std::chrono;
+      milliseconds diff = duration_cast<milliseconds>
+	(steady_clock::now () - info.last_update);
+
+      /* Advance the progress indicator at a rate of 1 tick every
+	 every 0.5 seconds.  */
+      if (diff.count () >= 500)
+	{
+	  int width = chars_per_line - 4;
+
+	  gdb_printf (stream, "\r[");
+	  for (int i = 0; i < width; ++i)
+	    {
+	      if (i == info.pos % width
+		  || i == (info.pos + 1) % width
+		  || i == (info.pos + 2) % width)
+		gdb_printf (stream, "#");
+	      else
+		gdb_printf (stream, " ");
+	    }
+
+	  gdb_printf (stream, "]");
+	  gdb_flush (stream);
+	  info.last_update = steady_clock::now ();
+	  info.pos++;
+	}
+    }
+
+  return;
+}
+
+/* Clear do_progress_notify output from the current line.  Overwrites the
+   notification with whitespace.  */
+
+void
+cli_ui_out::clear_progress_notify ()
+{
+  struct ui_file *stream = get_unbuffered (m_streams.back ());
+  int chars_per_line = get_chars_per_line ();
+
+  scoped_restore save_pagination
+    = make_scoped_restore (&pagination_enabled, false);
+
+  if (!stream->isatty ()
+      || !current_ui->input_interactive_p ()
+      || chars_per_line < MIN_CHARS_PER_LINE)
+    return;
+
+  if (chars_per_line > MAX_CHARS_PER_LINE)
+    chars_per_line = MAX_CHARS_PER_LINE;
+
+  gdb_printf (stream, "\r");
+  for (int i = 0; i < chars_per_line; ++i)
+    gdb_printf (stream, " ");
+  gdb_printf (stream, "\r");
+
+  gdb_flush (stream);
+}
+
+/* Remove the most recent progress update from the progress_info stack
+   and overwrite the current line with whitespace.  */
+
+void
+cli_ui_out::do_progress_end ()
+{
+  struct ui_file *stream = m_streams.back ();
+  cli_progress_info &info (m_progress_info.back ());
+
+  if (stream->isatty () && info.state != progress_update::START)
+    clear_progress_notify ();
+
+  m_progress_info.pop_back ();
+}
+
 /* local functions */
 
 void
 cli_ui_out::field_separator ()
 {
-  if (test_flags (unfiltered_output))
-    fputc_unfiltered (' ', m_streams.back ());
-  else
-    fputc_filtered (' ', m_streams.back ());
+  gdb_putc (' ', m_streams.back ());
 }
 
 /* Constructor for cli_ui_out.  */
@@ -291,14 +444,6 @@ cli_ui_out::~cli_ui_out ()
 {
 }
 
-/* Initialize private members at startup.  */
-
-cli_ui_out *
-cli_out_new (struct ui_file *stream)
-{
-  return new cli_ui_out (stream, ui_source_list);
-}
-
 ui_file *
 cli_ui_out::set_stream (struct ui_file *stream)
 {
@@ -350,7 +495,7 @@ cli_mld_flush (const struct match_list_d
   fflush (rl_outstream);
 }
 
-EXTERN_C void _rl_erase_entire_line (void);
+extern "C" void _rl_erase_entire_line (void);
 
 /* CLI version of displayer.erase_entire_line.  */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli-out.h ./gdb/cli-out.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cli-out.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cli-out.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Output generating routines for GDB CLI.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
    Contributed by Cygnus Solutions.
 
    This file is part of GDB.
@@ -21,19 +21,23 @@
 #define CLI_OUT_H
 
 #include "ui-out.h"
+#include <chrono>
 #include <vector>
 
 class cli_ui_out : public ui_out
 {
 public:
 
-  explicit cli_ui_out (ui_file *stream, ui_out_flags flags);
+  explicit cli_ui_out (ui_file *stream, ui_out_flags flags = ui_source_list);
   virtual ~cli_ui_out ();
 
   ui_file *set_stream (ui_file *stream);
 
   bool can_emit_style_escape () const override;
 
+  ui_file *current_stream () const override
+  { return m_streams.back (); }
+
 protected:
 
   virtual void do_table_begin (int nbrofcols, int nr_rows,
@@ -67,10 +71,15 @@ protected:
   virtual void do_message (const ui_file_style &style,
 			   const char *format, va_list args) override
     ATTRIBUTE_PRINTF (3,0);
-  virtual void do_wrap_hint (const char *identstring) override;
+  virtual void do_wrap_hint (int indent) override;
   virtual void do_flush () override;
   virtual void do_redirect (struct ui_file *outstream) override;
 
+  virtual void do_progress_start () override;
+  virtual void do_progress_notify (const std::string &, const char *,
+				   double, double) override;
+  virtual void do_progress_end () override;
+
   bool suppress_output ()
   { return m_suppress_output; }
 
@@ -80,9 +89,26 @@ private:
 
   std::vector<ui_file *> m_streams;
   bool m_suppress_output;
-};
 
-extern cli_ui_out *cli_out_new (struct ui_file *stream);
+  /* The state of a recent progress update.  */
+  struct cli_progress_info
+  {
+    /* Position of the progress indicator.  */
+    int pos;
+    /* The current state.  */
+    progress_update::state state;
+    /* Progress indicator's time of last update.  */
+    std::chrono::steady_clock::time_point last_update;
+
+    cli_progress_info ()
+      : pos (0), state (progress_update::START)
+    {}
+  };
+
+  /* Stack of progress info.  */
+  std::vector<cli_progress_info> m_progress_info;
+  void clear_progress_notify ();
+};
 
 extern void cli_display_match_list (char **matches, int len, int max);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/coff-pe-read.c ./gdb/coff-pe-read.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/coff-pe-read.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/coff-pe-read.c	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
    convert to internal format, for GDB. Used as a last resort if no
    debugging symbols recognized.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -100,45 +100,14 @@ read_pe_section_index (const char *secti
 
 static int
 get_pe_section_index (const char *section_name,
-		      struct read_pe_section_data *sections,
-		      int nb_sections)
+		      const std::vector<read_pe_section_data> &sections)
 {
-  int i;
-
-  for (i = 0; i < nb_sections; i++)
+  for (int i = 0; i < sections.size (); i++)
     if (sections[i].section_name == section_name)
       return i;
   return PE_SECTION_INDEX_INVALID;
 }
 
-/* Structure used by get_section_vmas function below
-   to access section_data array and the size of the array
-   stored in nb_sections field.  */
-struct pe_sections_info
-{
-  int nb_sections;
-  struct read_pe_section_data *sections;
-};
-
-/* Record the virtual memory address of a section.  */
-
-static void
-get_section_vmas (bfd *abfd, asection *sectp, void *context)
-{
-  struct pe_sections_info *data = (struct pe_sections_info *) context;
-  struct read_pe_section_data *sections = data->sections;
-  int sectix = get_pe_section_index (sectp->name, sections,
-				     data->nb_sections);
-
-  if (sectix != PE_SECTION_INDEX_INVALID)
-    {
-      /* Data within the section start at rva_start in the pe and at
-         bfd_get_section_vma() within memory.  Store the offset.  */
-
-      sections[sectix].vma_offset
-	= bfd_section_vma (sectp) - sections[sectix].rva_start;
-    }
-}
 
 /* Create a minimal symbol entry for an exported symbol.
    SYM_NAME contains the exported name or NULL if exported by ordinal,
@@ -158,7 +127,8 @@ add_pe_exported_sym (minimal_symbol_read
 		     const char *dll_name, struct objfile *objfile)
 {
   /* Add the stored offset to get the loaded address of the symbol.  */
-  CORE_ADDR vma = func_rva + section_data->vma_offset;
+  unrelocated_addr vma = unrelocated_addr (func_rva
+					   + section_data->vma_offset);
 
   /* Generate a (hopefully unique) qualified name using the first part
      of the dll name, e.g. KERNEL32!AddAtomA.  This matches the style
@@ -174,10 +144,10 @@ add_pe_exported_sym (minimal_symbol_read
     = string_printf ("%s!%s", dll_name, bare_name.c_str ());
 
   if ((section_data->ms_type == mst_unknown) && debug_coff_pe_read)
-    fprintf_unfiltered (gdb_stdlog , _("Unknown section type for \"%s\""
-			" for entry \"%s\" in dll \"%s\"\n"),
-			section_data->section_name.c_str (), sym_name,
-			dll_name);
+    gdb_printf (gdb_stdlog , _("Unknown section type for \"%s\""
+			       " for entry \"%s\" in dll \"%s\"\n"),
+		section_data->section_name.c_str (), sym_name,
+		dll_name);
 
   reader.record_with_info (qualified_name.c_str (), vma, section_data->ms_type,
 			   section_data->index);
@@ -186,14 +156,14 @@ add_pe_exported_sym (minimal_symbol_read
   reader.record_with_info (bare_name.c_str (), vma, section_data->ms_type,
 			   section_data->index);
   if (debug_coff_pe_read > 1)
-    fprintf_unfiltered (gdb_stdlog, _("Adding exported symbol \"%s\""
-			" in dll \"%s\"\n"), sym_name, dll_name);
+    gdb_printf (gdb_stdlog, _("Adding exported symbol \"%s\""
+			      " in dll \"%s\"\n"), sym_name, dll_name);
 }
 
 /* Create a minimal symbol entry for an exported forward symbol.
    Return 1 if the forwarded function was found 0 otherwise.
    SYM_NAME contains the exported name or NULL if exported by ordinal,
-   FORWARD_DLL_NAME is the name of the DLL in which the target symobl resides,
+   FORWARD_DLL_NAME is the name of the DLL in which the target symbol resides,
    FORWARD_FUNC_NAME is the name of the target symbol in that DLL,
    ORDINAL is the ordinal index value of the symbol,
    DLL_NAME is the internal name of the DLL file,
@@ -205,20 +175,16 @@ add_pe_forwarded_sym (minimal_symbol_rea
 		      const char *forward_func_name, int ordinal,
 		      const char *dll_name, struct objfile *objfile)
 {
-  CORE_ADDR vma, baseaddr;
   struct bound_minimal_symbol msymbol;
   enum minimal_symbol_type msymtype;
   int forward_dll_name_len = strlen (forward_dll_name);
-  int forward_func_name_len = strlen (forward_func_name);
-  int forward_len = forward_dll_name_len + forward_func_name_len + 2;
-  char *forward_qualified_name = (char *) alloca (forward_len);
   short section;
 
-  xsnprintf (forward_qualified_name, forward_len, "%s!%s", forward_dll_name,
-	     forward_func_name);
-
+  std::string forward_qualified_name = string_printf ("%s!%s",
+						      forward_dll_name,
+						      forward_func_name);
 
-  msymbol = lookup_bound_minimal_symbol (forward_qualified_name);
+  msymbol = lookup_bound_minimal_symbol (forward_qualified_name.c_str ());
 
   if (!msymbol.minsym)
     {
@@ -226,27 +192,30 @@ add_pe_forwarded_sym (minimal_symbol_rea
 
       for (i = 0; i < forward_dll_name_len; i++)
 	forward_qualified_name[i] = tolower (forward_qualified_name[i]);
-      msymbol = lookup_bound_minimal_symbol (forward_qualified_name);
+      msymbol = lookup_bound_minimal_symbol (forward_qualified_name.c_str ());
     }
 
   if (!msymbol.minsym)
     {
       if (debug_coff_pe_read)
-	fprintf_unfiltered (gdb_stdlog, _("Unable to find function \"%s\" in"
-			    " dll \"%s\", forward of \"%s\" in dll \"%s\"\n"),
-			    forward_func_name, forward_dll_name, sym_name,
-			    dll_name);
+	gdb_printf (gdb_stdlog, _("Unable to find function \"%s\" in"
+				  " dll \"%s\", forward of \"%s\" in dll \"%s\"\n"),
+		    forward_func_name, forward_dll_name, sym_name,
+		    dll_name);
       return 0;
     }
 
   if (debug_coff_pe_read > 1)
-    fprintf_unfiltered (gdb_stdlog, _("Adding forwarded exported symbol"
-			" \"%s\" in dll \"%s\", pointing to \"%s\"\n"),
-			sym_name, dll_name, forward_qualified_name);
-
-  vma = BMSYMBOL_VALUE_ADDRESS (msymbol);
-  msymtype = MSYMBOL_TYPE (msymbol.minsym);
-  section = MSYMBOL_SECTION (msymbol.minsym);
+    gdb_printf (gdb_stdlog, _("Adding forwarded exported symbol"
+			      " \"%s\" in dll \"%s\", pointing to \"%s\"\n"),
+		sym_name, dll_name, forward_qualified_name.c_str ());
+
+  /* Calculate VMA as if it were relative to DLL_NAME/OBJFILE, even though
+     it actually points inside another dll (FORWARD_DLL_NAME).  */
+  unrelocated_addr vma = unrelocated_addr (msymbol.value_address ()
+					   - objfile->text_section_offset ());
+  msymtype = msymbol.minsym->type ();
+  section = msymbol.minsym->section_index ();
 
   /* Generate a (hopefully unique) qualified name using the first part
      of the dll name, e.g. KERNEL32!AddAtomA.  This matches the style
@@ -266,14 +235,11 @@ add_pe_forwarded_sym (minimal_symbol_rea
      really be relocated properly, but nevertheless we make a stab at
      it, choosing an approach consistent with the history of this
      code.  */
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
 
-  reader.record_with_info (qualified_name.c_str (), vma - baseaddr, msymtype,
-			   section);
+  reader.record_with_info (qualified_name.c_str (), vma, msymtype, section);
 
   /* Enter the plain name as well, which might not be unique.  */
-  reader.record_with_info (bare_name.c_str(), vma - baseaddr, msymtype,
-			   section);
+  reader.record_with_info (bare_name.c_str(), vma, msymtype, section);
 
   return 1;
 }
@@ -291,23 +257,31 @@ read_pe_truncate_name (char *dll_name)
 
 /* Low-level support functions, direct from the ld module pe-dll.c.  */
 static unsigned int
-pe_get16 (bfd *abfd, int where)
+pe_get16 (bfd *abfd, int where, bool *fail)
 {
   unsigned char b[2];
 
-  bfd_seek (abfd, (file_ptr) where, SEEK_SET);
-  bfd_bread (b, (bfd_size_type) 2, abfd);
+  if (bfd_seek (abfd, where, SEEK_SET) != 0
+      || bfd_read (b, 2, abfd) != 2)
+    {
+      *fail = true;
+      return 0;
+    }
   return b[0] + (b[1] << 8);
 }
 
 static unsigned int
-pe_get32 (bfd *abfd, int where)
+pe_get32 (bfd *abfd, int where, bool *fail)
 {
   unsigned char b[4];
 
-  bfd_seek (abfd, (file_ptr) where, SEEK_SET);
-  bfd_bread (b, (bfd_size_type) 4, abfd);
-  return b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
+  if (bfd_seek (abfd, where, SEEK_SET) != 0
+      || bfd_read (b, 4, abfd) != 4)
+    {
+      *fail = true;
+      return 0;
+    }
+  return b[0] + (b[1] << 8) + (b[2] << 16) + ((unsigned) b[3] << 24);
 }
 
 static unsigned int
@@ -323,7 +297,7 @@ pe_as32 (void *ptr)
 {
   unsigned char *b = (unsigned char *) ptr;
 
-  return b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
+  return b[0] + (b[1] << 8) + (b[2] << 16) + ((unsigned) b[3] << 24);
 }
 
 /* Read the (non-debug) export symbol table from a portable
@@ -334,7 +308,7 @@ void
 read_pe_exported_syms (minimal_symbol_reader &reader,
 		       struct objfile *objfile)
 {
-  bfd *dll = objfile->obfd;
+  bfd *dll = objfile->obfd.get ();
   unsigned long nbnormal, nbforward;
   unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
   unsigned long export_opthdrrva, export_opthdrsize;
@@ -342,17 +316,11 @@ read_pe_exported_syms (minimal_symbol_re
   unsigned long exp_funcbase;
   unsigned char *expdata, *erva;
   unsigned long name_rvas, ordinals, nexp, ordbase;
-  char *dll_name = (char *) dll->filename;
   int otherix = PE_SECTION_TABLE_SIZE;
   int is_pe64 = 0;
   int is_pe32 = 0;
 
-  /* Array elements are for text, data and bss in that order
-     Initialization with RVA_START > RVA_END guarantees that
-     unused sections won't be matched.  */
-  struct pe_sections_info pe_sections_info;
-
-  char const *target = bfd_get_target (objfile->obfd);
+  char const *target = bfd_get_target (objfile->obfd.get ());
 
   std::vector<struct read_pe_section_data> section_data
     (PE_SECTION_TABLE_SIZE);
@@ -371,42 +339,57 @@ read_pe_exported_syms (minimal_symbol_re
   section_data[PE_SECTION_INDEX_BSS].section_name = ".bss";
 
   is_pe64 = (strcmp (target, "pe-x86-64") == 0
-	     || strcmp (target, "pei-x86-64") == 0);
+	     || strcmp (target, "pei-x86-64") == 0
+	     || strcmp (target, "pe-aarch64") == 0
+	     || strcmp (target, "pei-aarch64") == 0);
   is_pe32 = (strcmp (target, "pe-i386") == 0
 	     || strcmp (target, "pei-i386") == 0
 	     || strcmp (target, "pe-arm-wince-little") == 0
 	     || strcmp (target, "pei-arm-wince-little") == 0);
+
+  /* Possibly print a debug message about DLL not having a valid format.  */
+  auto maybe_print_debug_msg = [&] () -> void {
+    if (debug_coff_pe_read)
+      gdb_printf (gdb_stdlog, _("%s doesn't appear to be a DLL\n"),
+		  bfd_get_filename (dll));
+  };
+
   if (!is_pe32 && !is_pe64)
-    {
-      /* This is not a recognized PE format file.  Abort now, because
-	 the code is untested on anything else.  *FIXME* test on
-	 further architectures and loosen or remove this test.  */
-      return;
-    }
+    return maybe_print_debug_msg ();
 
   /* Get pe_header, optional header and numbers of export entries.  */
-  pe_header_offset = pe_get32 (dll, 0x3c);
+  bool fail = false;
+  pe_header_offset = pe_get32 (dll, 0x3c, &fail);
+  if (fail)
+    return maybe_print_debug_msg ();
   opthdr_ofs = pe_header_offset + 4 + 20;
   if (is_pe64)
-    num_entries = pe_get32 (dll, opthdr_ofs + 108);
+    num_entries = pe_get32 (dll, opthdr_ofs + 108, &fail);
   else
-    num_entries = pe_get32 (dll, opthdr_ofs + 92);
+    num_entries = pe_get32 (dll, opthdr_ofs + 92, &fail);
+  if (fail)
+    return maybe_print_debug_msg ();
 
   if (num_entries < 1)		/* No exports.  */
     return;
   if (is_pe64)
     {
-      export_opthdrrva = pe_get32 (dll, opthdr_ofs + 112);
-      export_opthdrsize = pe_get32 (dll, opthdr_ofs + 116);
+      export_opthdrrva = pe_get32 (dll, opthdr_ofs + 112, &fail);
+      export_opthdrsize = pe_get32 (dll, opthdr_ofs + 116, &fail);
     }
   else
     {
-      export_opthdrrva = pe_get32 (dll, opthdr_ofs + 96);
-      export_opthdrsize = pe_get32 (dll, opthdr_ofs + 100);
+      export_opthdrrva = pe_get32 (dll, opthdr_ofs + 96, &fail);
+      export_opthdrsize = pe_get32 (dll, opthdr_ofs + 100, &fail);
     }
-  nsections = pe_get16 (dll, pe_header_offset + 4 + 2);
+  if (fail)
+    return maybe_print_debug_msg ();
+
+  nsections = pe_get16 (dll, pe_header_offset + 4 + 2, &fail);
   secptr = (pe_header_offset + 4 + 20 +
-	    pe_get16 (dll, pe_header_offset + 4 + 16));
+	    pe_get16 (dll, pe_header_offset + 4 + 16, &fail));
+  if (fail)
+    return maybe_print_debug_msg ();
   expptr = 0;
   export_size = 0;
 
@@ -415,12 +398,14 @@ read_pe_exported_syms (minimal_symbol_re
     {
       char sname[8];
       unsigned long secptr1 = secptr + 40 * i;
-      unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
-      unsigned long vsize = pe_get32 (dll, secptr1 + 16);
-      unsigned long fptr = pe_get32 (dll, secptr1 + 20);
-
-      bfd_seek (dll, (file_ptr) secptr1, SEEK_SET);
-      bfd_bread (sname, (bfd_size_type) sizeof (sname), dll);
+      unsigned long vaddr = pe_get32 (dll, secptr1 + 12, &fail);
+      unsigned long vsize = pe_get32 (dll, secptr1 + 16, &fail);
+      unsigned long fptr = pe_get32 (dll, secptr1 + 20, &fail);
+
+      if (fail
+	  || bfd_seek (dll, secptr1, SEEK_SET) != 0
+	  || bfd_read (sname, sizeof (sname), dll) != sizeof (sname))
+	return maybe_print_debug_msg ();
 
       if ((strcmp (sname, ".edata") == 0)
 	  || (vaddr <= export_opthdrrva && export_opthdrrva < vaddr + vsize))
@@ -428,19 +413,25 @@ read_pe_exported_syms (minimal_symbol_re
 	  if (strcmp (sname, ".edata") != 0)
 	    {
 	      if (debug_coff_pe_read)
-		fprintf_unfiltered (gdb_stdlog, _("Export RVA for dll "
-				    "\"%s\" is in section \"%s\"\n"),
-				    dll_name, sname);
+		gdb_printf (gdb_stdlog, _("Export RVA for dll "
+					  "\"%s\" is in section \"%s\"\n"),
+			    bfd_get_filename (dll), sname);
 	    }
 	  else if (export_opthdrrva != vaddr && debug_coff_pe_read)
-	    fprintf_unfiltered (gdb_stdlog, _("Wrong value of export RVA"
-				" for dll \"%s\": 0x%lx instead of 0x%lx\n"),
-				dll_name, export_opthdrrva, vaddr);
+	    gdb_printf (gdb_stdlog, _("Wrong value of export RVA"
+				      " for dll \"%s\": 0x%lx instead of 0x%lx\n"),
+			bfd_get_filename (dll), export_opthdrrva, vaddr);
 	  expptr = fptr + (export_opthdrrva - vaddr);
 	  break;
 	}
     }
 
+  if (expptr == 0)
+    {
+      /* no section contains export table rva */
+      return;
+    }
+
   export_rva = export_opthdrrva;
   export_size = export_opthdrsize;
 
@@ -455,16 +446,18 @@ read_pe_exported_syms (minimal_symbol_re
   for (i = 0; i < nsections; i++)
     {
       unsigned long secptr1 = secptr + 40 * i;
-      unsigned long vsize = pe_get32 (dll, secptr1 + 8);
-      unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
-      unsigned long characteristics = pe_get32 (dll, secptr1 + 36);
+      unsigned long vsize = pe_get32 (dll, secptr1 + 8, &fail);
+      unsigned long vaddr = pe_get32 (dll, secptr1 + 12, &fail);
+      unsigned long characteristics = pe_get32 (dll, secptr1 + 36, &fail);
       char sec_name[SCNNMLEN + 1];
       int sectix;
       unsigned int bfd_section_index;
       asection *section;
 
-      bfd_seek (dll, (file_ptr) secptr1 + 0, SEEK_SET);
-      bfd_bread (sec_name, (bfd_size_type) SCNNMLEN, dll);
+      if (fail
+	  || bfd_seek (dll, secptr1 + 0, SEEK_SET) != 0
+	  || bfd_read (sec_name, SCNNMLEN, dll) != SCNNMLEN)
+	return maybe_print_debug_msg ();
       sec_name[SCNNMLEN] = '\0';
 
       sectix = read_pe_section_index (sec_name);
@@ -503,8 +496,9 @@ read_pe_exported_syms (minimal_symbol_re
   gdb::def_vector<unsigned char> expdata_storage (export_size);
   expdata = expdata_storage.data ();
 
-  bfd_seek (dll, (file_ptr) expptr, SEEK_SET);
-  bfd_bread (expdata, (bfd_size_type) export_size, dll);
+  if (bfd_seek (dll, expptr, SEEK_SET) != 0
+      || bfd_read (expdata, export_size, dll) != export_size)
+    return maybe_print_debug_msg ();
   erva = expdata - export_rva;
 
   nexp = pe_as32 (expdata + 24);
@@ -514,20 +508,27 @@ read_pe_exported_syms (minimal_symbol_re
   exp_funcbase = pe_as32 (expdata + 28);
 
   /* Use internal dll name instead of full pathname.  */
-  dll_name = (char *) (pe_as32 (expdata + 12) + erva);
-
-  pe_sections_info.nb_sections = otherix;
-  pe_sections_info.sections = section_data.data ();
+  char *dll_name = (char *) (pe_as32 (expdata + 12) + erva);
 
-  bfd_map_over_sections (dll, get_section_vmas, &pe_sections_info);
+  for (asection *sectp : gdb_bfd_sections (dll))
+    {
+      int sectix = get_pe_section_index (sectp->name, section_data);
+      if (sectix != PE_SECTION_INDEX_INVALID)
+	{
+	  /* Data within the section start at rva_start in the pe and at
+	     bfd_get_section_vma() within memory.  Store the offset.  */
+	  section_data[sectix].vma_offset
+	    = bfd_section_vma (sectp) - section_data[sectix].rva_start;
+	}
+    }
 
   /* Truncate name at first dot. Should maybe also convert to all
      lower case for convenience on Windows.  */
   read_pe_truncate_name (dll_name);
 
   if (debug_coff_pe_read)
-    fprintf_unfiltered (gdb_stdlog, _("DLL \"%s\" has %ld export entries,"
-			" base=%ld\n"), dll_name, nexp, ordbase);
+    gdb_printf (gdb_stdlog, _("DLL \"%s\" has %ld export entries,"
+			      " base=%ld\n"), dll_name, nexp, ordbase);
   nbforward = 0;
   nbnormal = 0;
   /* Iterate through the list of symbols.  */
@@ -543,7 +544,7 @@ read_pe_exported_syms (minimal_symbol_re
       /* Pointer to the function address vector.  */
       /* This is relative to ordinal value. */
       unsigned long func_rva = pe_as32 (erva + exp_funcbase +
-                                        ordinal * 4);
+					ordinal * 4);
 
       /* Find this symbol's section in our own array.  */
       int sectix = 0;
@@ -552,20 +553,20 @@ read_pe_exported_syms (minimal_symbol_re
       /* First handle forward cases.  */
       if (func_rva >= export_rva && func_rva < export_rva + export_size)
 	{
-	  char *forward_name = (char *) (erva + func_rva);
-	  char *funcname = (char *) (erva + name_rva);
-	  char *forward_dll_name = forward_name;
-	  char *forward_func_name = forward_name;
-	  char *sep = strrchr (forward_name, '.');
+	  const char *forward_name = (const char *) (erva + func_rva);
+	  const char *funcname = (const char *) (erva + name_rva);
+	  const char *forward_dll_name = forward_name;
+	  const char *forward_func_name = forward_name;
+	  const char *sep = strrchr (forward_name, '.');
 
-	  if (sep)
+	  std::string name_storage;
+	  if (sep != nullptr)
 	    {
 	      int len = (int) (sep - forward_name);
 
-	      forward_dll_name = (char *) alloca (len + 1);
-	      strncpy (forward_dll_name, forward_name, len);
-	      forward_dll_name[len] = '\0';
-	      forward_func_name = ++sep;
+	      name_storage = std::string (forward_name, len);
+	      forward_dll_name = name_storage.c_str ();
+	      forward_func_name = sep + 1;
 	    }
 	  if (add_pe_forwarded_sym (reader, funcname, forward_dll_name,
 				    forward_func_name, ordinal,
@@ -579,7 +580,7 @@ read_pe_exported_syms (minimal_symbol_re
 	  if ((func_rva >= section_data[sectix].rva_start)
 	      && (func_rva < section_data[sectix].rva_end))
 	    {
-	      char *sym_name = (char *) (erva + name_rva);
+	      const char *sym_name = (const char *) (erva + name_rva);
 
 	      section_found = 1;
 	      add_pe_exported_sym (reader, sym_name, func_rva, ordinal,
@@ -590,7 +591,7 @@ read_pe_exported_syms (minimal_symbol_re
 	}
       if (!section_found)
 	{
-	  char *funcname = (char *) (erva + name_rva);
+	  const char *funcname = (const char *) (erva + name_rva);
 
 	  if (name_rva == 0)
 	    {
@@ -599,16 +600,16 @@ read_pe_exported_syms (minimal_symbol_re
 	      ++nbnormal;
 	    }
 	  else if (debug_coff_pe_read)
-	    fprintf_unfiltered (gdb_stdlog, _("Export name \"%s\" ord. %lu,"
-				" RVA 0x%lx in dll \"%s\" not handled\n"),
-				funcname, ordinal, func_rva, dll_name);
+	    gdb_printf (gdb_stdlog, _("Export name \"%s\" ord. %lu,"
+				      " RVA 0x%lx in dll \"%s\" not handled\n"),
+			funcname, ordinal, func_rva, dll_name);
 	}
     }
 
   if (debug_coff_pe_read)
-    fprintf_unfiltered (gdb_stdlog, _("Finished reading \"%s\", exports %ld,"
-			" forwards %ld, total %ld/%ld.\n"), dll_name, nbnormal,
-			nbforward, nbnormal + nbforward, nexp);
+    gdb_printf (gdb_stdlog, _("Finished reading \"%s\", exports %ld,"
+			      " forwards %ld, total %ld/%ld.\n"), dll_name, nbnormal,
+		nbforward, nbnormal + nbforward, nexp);
 }
 
 /* Extract from ABFD the offset of the .text section.
@@ -637,7 +638,9 @@ pe_text_section_offset (struct bfd *abfd
   target = bfd_get_target (abfd);
 
   is_pe64 = (strcmp (target, "pe-x86-64") == 0
-	     || strcmp (target, "pei-x86-64") == 0);
+	     || strcmp (target, "pei-x86-64") == 0
+	     || strcmp (target, "pe-aarch64") == 0
+	     || strcmp (target, "pei-aarch64") == 0);
   is_pe32 = (strcmp (target, "pe-i386") == 0
 	     || strcmp (target, "pei-i386") == 0
 	     || strcmp (target, "pe-arm-wince-little") == 0
@@ -652,20 +655,27 @@ pe_text_section_offset (struct bfd *abfd
     }
 
   /* Get pe_header, optional header and numbers of sections.  */
-  pe_header_offset = pe_get32 (abfd, 0x3c);
-  nsections = pe_get16 (abfd, pe_header_offset + 4 + 2);
+  bool fail = false;
+  pe_header_offset = pe_get32 (abfd, 0x3c, &fail);
+  if (fail)
+    return DEFAULT_COFF_PE_TEXT_SECTION_OFFSET;
+  nsections = pe_get16 (abfd, pe_header_offset + 4 + 2, &fail);
   secptr = (pe_header_offset + 4 + 20 +
-	    pe_get16 (abfd, pe_header_offset + 4 + 16));
+	    pe_get16 (abfd, pe_header_offset + 4 + 16, &fail));
+  if (fail)
+    return DEFAULT_COFF_PE_TEXT_SECTION_OFFSET;
 
   /* Get the rva and size of the export section.  */
   for (i = 0; i < nsections; i++)
     {
       char sname[SCNNMLEN + 1];
       unsigned long secptr1 = secptr + 40 * i;
-      unsigned long vaddr = pe_get32 (abfd, secptr1 + 12);
+      unsigned long vaddr = pe_get32 (abfd, secptr1 + 12, &fail);
 
-      bfd_seek (abfd, (file_ptr) secptr1, SEEK_SET);
-      bfd_bread (sname, (bfd_size_type) SCNNMLEN, abfd);
+      if (fail
+	  || bfd_seek (abfd, secptr1, SEEK_SET) != 0
+	  || bfd_read (sname, SCNNMLEN, abfd) != SCNNMLEN)
+	return DEFAULT_COFF_PE_TEXT_SECTION_OFFSET;
       sname[SCNNMLEN] = '\0';
       if (strcmp (sname, ".text") == 0)
 	return vaddr;
@@ -680,13 +690,14 @@ static void
 show_debug_coff_pe_read (struct ui_file *file, int from_tty,
 			 struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Coff PE read debugging is %s.\n"), value);
+  gdb_printf (file, _("Coff PE read debugging is %s.\n"), value);
 }
 
 /* Adds "Set/show debug coff_pe_read" commands.  */
 
+void _initialize_coff_pe_read ();
 void
-_initialize_coff_pe_read (void)
+_initialize_coff_pe_read ()
 {
   add_setshow_zuinteger_cmd ("coff-pe-read", class_maintenance,
 			     &debug_coff_pe_read,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/coff-pe-read.h ./gdb/coff-pe-read.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/coff-pe-read.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/coff-pe-read.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Interface to coff-pe-read.c (portable-executable-specific symbol reader).
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/coffread.c ./gdb/coffread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/coffread.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/coffread.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Read coff symbol tables and convert to internal format, for GDB.
-   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+   Copyright (C) 1987-2024 Free Software Foundation, Inc.
    Contributed by David D. Johnson, Brown University (ddj@cs.brown.edu).
 
    This file is part of GDB.
@@ -24,11 +24,11 @@
 #include "breakpoint.h"
 
 #include "bfd.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include <ctype.h>
 
-#include "coff/internal.h"	/* Internal format of COFF symbols in BFD */
-#include "libcoff.h"		/* FIXME secret internal data from BFD */
+#include "coff/internal.h"
+#include "libcoff.h"
 #include "objfiles.h"
 #include "buildsym-legacy.h"
 #include "stabsread.h"
@@ -36,12 +36,10 @@
 #include "target.h"
 #include "block.h"
 #include "dictionary.h"
+#include "dwarf2/public.h"
 
 #include "coff-pe-read.h"
 
-#include "psymtab.h"
-#include "build-id.h"
-
 /* The objfile we are currently reading.  */
 
 static struct objfile *coffread_objfile;
@@ -60,12 +58,12 @@ struct coff_symfile_info
 
 /* Key for COFF-associated data.  */
 
-static const struct objfile_key<coff_symfile_info> coff_objfile_data_key;
+static const registry<objfile>::key<coff_symfile_info> coff_objfile_data_key;
 
 /* Translate an external name string into a user-visible name.  */
 #define	EXTERNAL_NAME(string, abfd) \
-	(string[0] == bfd_get_symbol_leading_char (abfd) \
-	? string + 1 : string)
+  (*string != '\0' && *string == bfd_get_symbol_leading_char (abfd)	\
+   ? string + 1 : string)
 
 /* To be an sdb debug type, type must have at least a basic or primary
    derived type.  Using this rather than checking against T_NULL is
@@ -155,10 +153,11 @@ static int type_vector_length;
 #define INITIAL_TYPE_VECTOR_LENGTH 160
 
 static char *linetab = NULL;
-static long linetab_offset;
-static unsigned long linetab_size;
+static file_ptr linetab_offset;
+static file_ptr linetab_size;
 
 static char *stringtab = NULL;
+static long stringtab_length = 0;
 
 extern void stabsread_clear_cache (void);
 
@@ -188,23 +187,23 @@ static struct symbol *process_coff_symbo
 
 static void patch_opaque_types (struct symtab *);
 
-static void enter_linenos (long, int, int, struct objfile *);
+static void enter_linenos (file_ptr, int, int, struct objfile *);
 
-static int init_lineno (bfd *, long, int, gdb::unique_xmalloc_ptr<char> *);
+static int init_lineno (bfd *, file_ptr, file_ptr, gdb::unique_xmalloc_ptr<char> *);
 
 static char *getsymname (struct internal_syment *);
 
 static const char *coff_getfilename (union internal_auxent *);
 
-static int init_stringtab (bfd *, long, gdb::unique_xmalloc_ptr<char> *);
+static int init_stringtab (bfd *, file_ptr, gdb::unique_xmalloc_ptr<char> *);
 
 static void read_one_sym (struct coff_symbol *,
 			  struct internal_syment *,
 			  union internal_auxent *);
 
 static void coff_symtab_read (minimal_symbol_reader &,
-			      long, unsigned int, struct objfile *);
-
+			      file_ptr, unsigned int, struct objfile *);
+
 /* We are called once per section from coff_symfile_read.  We
    need to examine each section we are passed, check to see
    if it is something we are interested in processing, and
@@ -241,7 +240,7 @@ coff_locate_sections (bfd *abfd, asectio
       const char *s;
 
       /* We can have multiple .stab sections if linked with
-         --split-by-reloc.  */
+	 --split-by-reloc.  */
       for (s = name + sizeof ".stab" - 1; *s != '\0'; s++)
 	if (!isdigit (*s))
 	  break;
@@ -253,7 +252,7 @@ coff_locate_sections (bfd *abfd, asectio
 /* Return the section_offsets* that CS points to.  */
 static int cs_to_section (struct coff_symbol *, struct objfile *);
 
-struct find_targ_sec_arg
+struct coff_find_targ_sec_arg
   {
     int targ_index;
     asection **resultp;
@@ -262,7 +261,7 @@ struct find_targ_sec_arg
 static void
 find_targ_sec (bfd *abfd, asection *sect, void *obj)
 {
-  struct find_targ_sec_arg *args = (struct find_targ_sec_arg *) obj;
+  struct coff_find_targ_sec_arg *args = (struct coff_find_targ_sec_arg *) obj;
 
   if (sect->target_index == args->targ_index)
     *args->resultp = sect;
@@ -273,11 +272,11 @@ static struct bfd_section*
 cs_to_bfd_section (struct coff_symbol *cs, struct objfile *objfile)
 {
   asection *sect = NULL;
-  struct find_targ_sec_arg args;
+  struct coff_find_targ_sec_arg args;
 
   args.targ_index = cs->c_secnum;
   args.resultp = &sect;
-  bfd_map_over_sections (objfile->obfd, find_targ_sec, &args);
+  bfd_map_over_sections (objfile->obfd.get (), find_targ_sec, &args);
   return sect;
 }
 
@@ -289,7 +288,7 @@ cs_to_section (struct coff_symbol *cs, s
 
   if (sect == NULL)
     return SECT_OFF_TEXT (objfile);
-  return gdb_bfd_section_index (objfile->obfd, sect);
+  return gdb_bfd_section_index (objfile->obfd.get (), sect);
 }
 
 /* Return the address of the section of a COFF symbol.  */
@@ -300,7 +299,7 @@ static CORE_ADDR
 cs_section_address (struct coff_symbol *cs, bfd *abfd)
 {
   asection *sect = NULL;
-  struct find_targ_sec_arg args;
+  struct coff_find_targ_sec_arg args;
   CORE_ADDR addr = 0;
 
   args.targ_index = cs->c_secnum;
@@ -353,7 +352,7 @@ coff_alloc_type (int index)
      We will fill it in later if we find out how.  */
   if (type == NULL)
     {
-      type = alloc_type (coffread_objfile);
+      type = type_allocator (coffread_objfile, language_c).new_type ();
       *type_addr = type;
     }
   return type;
@@ -364,18 +363,18 @@ coff_alloc_type (int index)
    it indicates the start of data for one original source file.  */
 
 static void
-coff_start_symtab (struct objfile *objfile, const char *name)
+coff_start_compunit_symtab (struct objfile *objfile, const char *name)
 {
   within_function = 0;
-  start_symtab (objfile,
-		name,
+  start_compunit_symtab (objfile,
+			 name,
   /* We never know the directory name for COFF.  */
-		 NULL,
+			 NULL,
   /* The start address is irrelevant, since we call
-     set_last_source_start_addr in coff_end_symtab.  */
-		 0,
+     set_last_source_start_addr in coff_end_compunit_symtab.  */
+			 0,
   /* Let buildsym.c deduce the language for this symtab.  */
-		 language_unknown);
+			 language_unknown);
   record_debugformat ("COFF");
 }
 
@@ -399,11 +398,11 @@ complete_symtab (const char *name, CORE_
    list of all such.  */
 
 static void
-coff_end_symtab (struct objfile *objfile)
+coff_end_compunit_symtab (struct objfile *objfile)
 {
   set_last_source_start_addr (current_source_start_addr);
 
-  end_symtab (current_source_end_addr, SECT_OFF_TEXT (objfile));
+  end_compunit_symtab (current_source_end_addr);
 
   /* Reinitialize for beginning of new file.  */
   set_last_source_file (NULL);
@@ -444,7 +443,7 @@ is_import_fixup_symbol (struct coff_symb
 
 static struct minimal_symbol *
 record_minimal_symbol (minimal_symbol_reader &reader,
-		       struct coff_symbol *cs, CORE_ADDR address,
+		       struct coff_symbol *cs, unrelocated_addr address,
 		       enum minimal_symbol_type type, int section, 
 		       struct objfile *objfile)
 {
@@ -484,11 +483,6 @@ coff_symfile_init (struct objfile *objfi
 {
   /* Allocate struct to keep track of the symfile.  */
   coff_objfile_data_key.emplace (objfile);
-
-  /* COFF objects may be reordered, so set OBJF_REORDERED.  If we
-     find this causes a significant slowdown in gdb then we could
-     set it in the debug symbol readers only when necessary.  */
-  objfile->flags |= OBJF_REORDERED;
 }
 
 /* This function is called for every section; it finds the outer
@@ -524,6 +518,81 @@ find_linenos (bfd *abfd, struct bfd_sect
 }
 
 
+/* A helper function for coff_symfile_read that reads minimal
+   symbols.  It may also read other forms of symbol as well.  */
+
+static void
+coff_read_minsyms (file_ptr symtab_offset, unsigned int nsyms,
+		   struct objfile *objfile)
+
+{
+  /* If minimal symbols were already read, and if we know we aren't
+     going to read any other kind of symbol here, then we can just
+     return.  */
+  if (objfile->per_bfd->minsyms_read && pe_file && nsyms == 0)
+    return;
+
+  minimal_symbol_reader reader (objfile);
+
+  if (pe_file && nsyms == 0)
+    {
+      /* We've got no debugging symbols, but it's a portable
+	 executable, so try to read the export table.  */
+      read_pe_exported_syms (reader, objfile);
+    }
+  else
+    {
+      /* Now that the executable file is positioned at symbol table,
+	 process it and define symbols accordingly.  */
+      coff_symtab_read (reader, symtab_offset, nsyms, objfile);
+    }
+
+  /* Install any minimal symbols that have been collected as the
+     current minimal symbols for this objfile.  */
+
+  reader.install ();
+
+  if (pe_file)
+    {
+      for (minimal_symbol *msym : objfile->msymbols ())
+	{
+	  const char *name = msym->linkage_name ();
+
+	  /* If the minimal symbols whose name are prefixed by "__imp_"
+	     or "_imp_", get rid of the prefix, and search the minimal
+	     symbol in OBJFILE.  Note that 'maintenance print msymbols'
+	     shows that type of these "_imp_XXXX" symbols is mst_data.  */
+	  if (msym->type () == mst_data)
+	    {
+	      const char *name1 = NULL;
+
+	      if (startswith (name, "_imp_"))
+		name1 = name + 5;
+	      else if (startswith (name, "__imp_"))
+		name1 = name + 6;
+	      if (name1 != NULL)
+		{
+		  int lead
+		    = bfd_get_symbol_leading_char (objfile->obfd.get ());
+		  struct bound_minimal_symbol found;
+
+		  if (lead != '\0' && *name1 == lead)
+		    name1 += 1;
+
+		  found = lookup_minimal_symbol (name1, NULL, objfile);
+
+		  /* If found, there are symbols named "_imp_foo" and "foo"
+		     respectively in OBJFILE.  Set the type of symbol "foo"
+		     as 'mst_solib_trampoline'.  */
+		  if (found.minsym != NULL
+		      && found.minsym->type () == mst_text)
+		    found.minsym->set_type (mst_solib_trampoline);
+		}
+	    }
+	}
+    }
+}
+
 /* The BFD for this file -- only good while we're actively reading
    symbols into a psymtab or a symtab.  */
 
@@ -535,14 +604,14 @@ static void
 coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
 {
   struct coff_symfile_info *info;
-  bfd *abfd = objfile->obfd;
+  bfd *abfd = objfile->obfd.get ();
   coff_data_type *cdata = coff_data (abfd);
   const char *filename = bfd_get_filename (abfd);
   int val;
   unsigned int num_symbols;
-  int symtab_offset;
-  int stringtab_offset;
-  int stabstrsize;
+  file_ptr symtab_offset;
+  file_ptr stringtab_offset;
+  unsigned int stabstrsize;
   
   info = coff_objfile_data_key.get (objfile);
   symfile_bfd = abfd;		/* Kludge for swap routines.  */
@@ -580,8 +649,8 @@ coff_symfile_read (struct objfile *objfi
      FIXME: We should use BFD to read the symbol table, and thus avoid
      this problem.  */
   pe_file =
-    startswith (bfd_get_target (objfile->obfd), "pe")
-    || startswith (bfd_get_target (objfile->obfd), "epoc-pe");
+    startswith (bfd_get_target (objfile->obfd.get ()), "pe")
+    || startswith (bfd_get_target (objfile->obfd.get ()), "epoc-pe");
 
   /* End of warning.  */
 
@@ -610,10 +679,10 @@ coff_symfile_read (struct objfile *objfi
       bfd_map_over_sections (abfd, find_linenos, (void *) info);
 
       val = init_lineno (abfd, info->min_lineno_offset,
-                         info->max_lineno_offset - info->min_lineno_offset,
+			 info->max_lineno_offset - info->min_lineno_offset,
 			 &linetab_storage);
       if (val < 0)
-        error (_("\"%s\": error reading line numbers."), filename);
+	error (_("\"%s\": error reading line numbers."), filename);
     }
 
   /* Now read the string table, all at once.  */
@@ -624,56 +693,7 @@ coff_symfile_read (struct objfile *objfi
   if (val < 0)
     error (_("\"%s\": can't get string table"), filename);
 
-  minimal_symbol_reader reader (objfile);
-
-  /* Now that the executable file is positioned at symbol table,
-     process it and define symbols accordingly.  */
-
-  coff_symtab_read (reader, (long) symtab_offset, num_symbols, objfile);
-
-  /* Install any minimal symbols that have been collected as the
-     current minimal symbols for this objfile.  */
-
-  reader.install ();
-
-  if (pe_file)
-    {
-      for (minimal_symbol *msym : objfile->msymbols ())
-	{
-	  const char *name = msym->linkage_name ();
-
-	  /* If the minimal symbols whose name are prefixed by "__imp_"
-	     or "_imp_", get rid of the prefix, and search the minimal
-	     symbol in OBJFILE.  Note that 'maintenance print msymbols'
-	     shows that type of these "_imp_XXXX" symbols is mst_data.  */
-	  if (MSYMBOL_TYPE (msym) == mst_data)
-	    {
-	      const char *name1 = NULL;
-
-	      if (startswith (name, "_imp_"))
-		name1 = name + 5;
-	      else if (startswith (name, "__imp_"))
-		name1 = name + 6;
-	      if (name1 != NULL)
-		{
-		  int lead = bfd_get_symbol_leading_char (objfile->obfd);
-		  struct bound_minimal_symbol found;
-
-                  if (lead != '\0' && *name1 == lead)
-		    name1 += 1;
-
-		  found = lookup_minimal_symbol (name1, NULL, objfile);
-
-		  /* If found, there are symbols named "_imp_foo" and "foo"
-		     respectively in OBJFILE.  Set the type of symbol "foo"
-		     as 'mst_solib_trampoline'.  */
-		  if (found.minsym != NULL
-		      && MSYMBOL_TYPE (found.minsym) == mst_text)
-		    MSYMBOL_TYPE (found.minsym) = mst_solib_trampoline;
-		}
-	    }
-	}
-    }
+  coff_read_minsyms (symtab_offset, num_symbols, objfile);
 
   if (!(objfile->flags & OBJF_READNEVER))
     bfd_map_over_sections (abfd, coff_locate_sections, (void *) info);
@@ -688,9 +708,7 @@ coff_symfile_read (struct objfile *objfi
 	}
 
       /* FIXME: dubious.  Why can't we use something normal like
-         bfd_get_section_contents?  */
-      bfd_seek (abfd, abfd->where, 0);
-
+	 bfd_get_section_contents?  */
       stabstrsize = bfd_section_size (info->stabstrsect);
 
       coffstab_build_psymtabs (objfile,
@@ -698,29 +716,19 @@ coff_symfile_read (struct objfile *objfi
 			       *info->stabsects,
 			       info->stabstrsect->filepos, stabstrsize);
     }
-  if (dwarf2_has_info (objfile, NULL))
+
+  if (dwarf2_initialize_objfile (objfile))
     {
-      /* DWARF2 sections.  */
-      dwarf2_build_psymtabs (objfile);
+      /* Nothing.  */
     }
 
-  dwarf2_build_frame_info (objfile);
-
   /* Try to add separate debug file if no symbols table found.   */
-  if (!objfile_has_partial_symbols (objfile))
+  else if (!objfile->has_partial_symbols ()
+	   && objfile->separate_debug_objfile == NULL
+	   && objfile->separate_debug_objfile_backlink == NULL)
     {
-      std::string debugfile = find_separate_debug_file_by_buildid (objfile);
-
-      if (debugfile.empty ())
-	debugfile = find_separate_debug_file_by_debuglink (objfile);
-
-      if (!debugfile.empty ())
-	{
-	  gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (debugfile.c_str ()));
-
-	  symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (),
-				    symfile_flags, objfile);
-	}
+      if (objfile->find_and_add_separate_symbol_file (symfile_flags))
+	gdb_assert (objfile->separate_debug_objfile != nullptr);
     }
 }
 
@@ -750,10 +758,10 @@ coff_symfile_finish (struct objfile *obj
 
 static void
 coff_symtab_read (minimal_symbol_reader &reader,
-		  long symtab_offset, unsigned int nsyms,
+		  file_ptr symtab_offset, unsigned int nsyms,
 		  struct objfile *objfile)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   struct context_stack *newobj = nullptr;
   struct coff_symbol coff_symbol;
   struct coff_symbol *cs = &coff_symbol;
@@ -779,29 +787,13 @@ coff_symtab_read (minimal_symbol_reader
 
   scoped_free_pendings free_pending;
 
-  /* Work around a stdio bug in SunOS4.1.1 (this makes me nervous....
-     it's hard to know I've really worked around it.  The fix should
-     be harmless, anyway).  The symptom of the bug is that the first
-     fread (in read_one_sym), will (in my example) actually get data
-     from file offset 268, when the fseek was to 264 (and ftell shows
-     264).  This causes all hell to break loose.  I was unable to
-     reproduce this on a short test program which operated on the same
-     file, performing (I think) the same sequence of operations.
-
-     It stopped happening when I put in this (former) rewind().
-
-     FIXME: Find out if this has been reported to Sun, whether it has
-     been fixed in a later release, etc.  */
-
-  bfd_seek (objfile->obfd, 0, 0);
-
   /* Position to read the symbol table.  */
-  val = bfd_seek (objfile->obfd, (long) symtab_offset, 0);
+  val = bfd_seek (objfile->obfd.get (), symtab_offset, 0);
   if (val < 0)
     perror_with_name (objfile_name (objfile));
 
   coffread_objfile = objfile;
-  nlist_bfd_global = objfile->obfd;
+  nlist_bfd_global = objfile->obfd.get ();
   nlist_nsyms_global = nsyms;
   set_last_source_file (NULL);
   memset (opaque_type_chain, 0, sizeof opaque_type_chain);
@@ -811,7 +803,7 @@ coff_symtab_read (minimal_symbol_reader
   type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
   type_vector = XCNEWVEC (struct type *, type_vector_length);
 
-  coff_start_symtab (objfile, "");
+  coff_start_compunit_symtab (objfile, "");
 
   symnum = 0;
   while (symnum < nsyms)
@@ -823,10 +815,10 @@ coff_symtab_read (minimal_symbol_reader
       if (cs->c_symnum == next_file_symnum && cs->c_sclass != C_FILE)
 	{
 	  if (get_last_source_file ())
-	    coff_end_symtab (objfile);
+	    coff_end_compunit_symtab (objfile);
 
-	  coff_start_symtab (objfile, "_globals_");
-	  /* coff_start_symtab will set the language of this symtab to
+	  coff_start_compunit_symtab (objfile, "_globals_");
+	  /* coff_start_compunit_symtab will set the language of this symtab to
 	     language_unknown, since such a ``file name'' is not
 	     recognized.  Override that with the minimal language to
 	     allow printing values in this symtab.  */
@@ -852,8 +844,9 @@ coff_symtab_read (minimal_symbol_reader
 	  tmpaddr = cs->c_value;
 	  /* Don't record unresolved symbols.  */
 	  if (!(cs->c_secnum <= 0 && cs->c_value == 0))
-	    record_minimal_symbol (reader, cs, tmpaddr, mst_text,
-				   section, objfile);
+	    record_minimal_symbol (reader, cs,
+				   unrelocated_addr (tmpaddr),
+				   mst_text, section, objfile);
 
 	  fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr;
 	  fcn_start_addr = tmpaddr;
@@ -889,8 +882,8 @@ coff_symtab_read (minimal_symbol_reader
 	     containing debugging information.  */
 	  if (get_last_source_file ())
 	    {
-	      coff_end_symtab (objfile);
-	      coff_start_symtab (objfile, filestring);
+	      coff_end_compunit_symtab (objfile);
+	      coff_start_compunit_symtab (objfile, filestring);
 	    }
 	  in_source_file = 1;
 	  break;
@@ -903,7 +896,7 @@ coff_symtab_read (minimal_symbol_reader
 	     backtraces, so filter them out (from phdm@macqel.be).  */
 	  if (within_function)
 	    break;
-	  /* Fall through.  */
+	  [[fallthrough]];
 	case C_STAT:
 	case C_THUMBLABEL:
 	case C_THUMBSTAT:
@@ -919,8 +912,8 @@ coff_symtab_read (minimal_symbol_reader
 		     file with no symbols.  */
 		  if (in_source_file)
 		    complete_symtab (filestring,
-		    cs->c_value + ANOFFSET (objfile->section_offsets,
-					    SECT_OFF_TEXT (objfile)),
+				     (cs->c_value
+				      + objfile->text_section_offset ()),
 				     main_aux.x_scn.x_scnlen);
 		  in_source_file = 0;
 		}
@@ -941,7 +934,7 @@ coff_symtab_read (minimal_symbol_reader
 	       that look like this.  Ignore them.  */
 	    break;
 	  /* For static symbols that don't start with '.'...  */
-	  /* Fall through.  */
+	  [[fallthrough]];
 	case C_THUMBEXT:
 	case C_THUMBEXTFUNC:
 	case C_EXT:
@@ -967,26 +960,26 @@ coff_symtab_read (minimal_symbol_reader
 		   symbol lookup which returned no match.  */
 		break;
 	      }
- 	    else if (cs->c_secnum == N_ABS)
- 	      {
- 		/* Use the correct minimal symbol type (and don't
- 		   relocate) for absolute values.  */
- 		ms_type = mst_abs;
- 		sec = cs_to_section (cs, objfile);
- 		tmpaddr = cs->c_value;
- 	      }
+	    else if (cs->c_secnum == N_ABS)
+	      {
+		/* Use the correct minimal symbol type (and don't
+		   relocate) for absolute values.  */
+		ms_type = mst_abs;
+		sec = cs_to_section (cs, objfile);
+		tmpaddr = cs->c_value;
+	      }
 	    else
 	      {
 		asection *bfd_section = cs_to_bfd_section (cs, objfile);
 
 		sec = cs_to_section (cs, objfile);
 		tmpaddr = cs->c_value;
- 		/* Statics in a PE file also get relocated.  */
- 		if (cs->c_sclass == C_EXT
- 		    || cs->c_sclass == C_THUMBEXTFUNC
- 		    || cs->c_sclass == C_THUMBEXT
- 		    || (pe_file && (cs->c_sclass == C_STAT)))
-		  offset = ANOFFSET (objfile->section_offsets, sec);
+		/* Statics in a PE file also get relocated.  */
+		if (cs->c_sclass == C_EXT
+		    || cs->c_sclass == C_THUMBEXTFUNC
+		    || cs->c_sclass == C_THUMBEXT
+		    || (pe_file && (cs->c_sclass == C_STAT)))
+		  offset = objfile->section_offsets[sec];
 
 		if (bfd_section->flags & SEC_CODE)
 		  {
@@ -1013,8 +1006,9 @@ coff_symtab_read (minimal_symbol_reader
 		  ms_type = mst_unknown;
 	      }
 
-	    msym = record_minimal_symbol (reader, cs, tmpaddr, ms_type,
-					  sec, objfile);
+	    msym = record_minimal_symbol (reader, cs,
+					  unrelocated_addr (tmpaddr),
+					  ms_type, sec, objfile);
 	    if (msym)
 	      gdbarch_coff_make_msymbol_special (gdbarch,
 						 cs->c_sclass, msym);
@@ -1025,8 +1019,8 @@ coff_symtab_read (minimal_symbol_reader
 
 		sym = process_coff_symbol
 		  (cs, &main_aux, objfile);
-		SYMBOL_VALUE (sym) = tmpaddr + offset;
-		SYMBOL_SECTION (sym) = sec;
+		sym->set_value_longest (tmpaddr + offset);
+		sym->set_section_index (sec);
 	      }
 	  }
 	  break;
@@ -1039,7 +1033,7 @@ coff_symtab_read (minimal_symbol_reader
 	      /* Value contains address of first non-init type
 		 code.  */
 	      /* main_aux.x_sym.x_misc.x_lnsz.x_lnno
-	         contains line number of '{' }.  */
+		 contains line number of '{' }.  */
 	      if (cs->c_naux != 1)
 		complaint (_("`.bf' symbol %d has no aux entry"),
 			   cs->c_symnum);
@@ -1047,7 +1041,7 @@ coff_symtab_read (minimal_symbol_reader
 	      fcn_first_line_addr = cs->c_value;
 
 	      /* Might want to check that locals are 0 and
-	         context_stack_depth is zero, and complain if not.  */
+		 context_stack_depth is zero, and complain if not.  */
 
 	      depth = 0;
 	      newobj = push_context (depth, fcn_start_addr);
@@ -1061,9 +1055,9 @@ coff_symtab_read (minimal_symbol_reader
 	      if (!within_function)
 		error (_("Bad coff function information."));
 	      /* The value of .ef is the address of epilogue code;
-	         not useful for gdb.  */
+		 not useful for gdb.  */
 	      /* { main_aux.x_sym.x_misc.x_lnsz.x_lnno
-	         contains number of lines to '}' */
+		 contains number of lines to '}' */
 
 	      if (outermost_context_p ())
 		{	/* We attempted to pop an empty context stack.  */
@@ -1095,16 +1089,17 @@ coff_symtab_read (minimal_symbol_reader
 		  fcn_last_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
 		}
 	      /* fcn_first_line is the line number of the opening '{'.
-	         Do not record it - because it would affect gdb's idea
-	         of the line number of the first statement of the
-	         function - except for one-line functions, for which
-	         it is also the line number of all the statements and
-	         of the closing '}', and for which we do not have any
-	         other statement-line-number.  */
+		 Do not record it - because it would affect gdb's idea
+		 of the line number of the first statement of the
+		 function - except for one-line functions, for which
+		 it is also the line number of all the statements and
+		 of the closing '}', and for which we do not have any
+		 other statement-line-number.  */
 	      if (fcn_last_line == 1)
-		record_line (get_current_subfile (), fcn_first_line,
-			     gdbarch_addr_bits_remove (gdbarch,
-						       fcn_first_line_addr));
+		record_line
+		  (get_current_subfile (), fcn_first_line,
+		   unrelocated_addr (gdbarch_addr_bits_remove (gdbarch,
+							       fcn_first_line_addr)));
 	      else
 		enter_linenos (fcn_line_ptr, fcn_first_line,
 			       fcn_last_line, objfile);
@@ -1113,8 +1108,7 @@ coff_symtab_read (minimal_symbol_reader
 			    NULL, cstk.start_addr,
 			    fcn_cs_saved.c_value
 			    + fcn_aux_saved.x_sym.x_misc.x_fsize
-			    + ANOFFSET (objfile->section_offsets,
-					SECT_OFF_TEXT (objfile)));
+			    + objfile->text_section_offset ());
 	      within_function = 0;
 	    }
 	  break;
@@ -1123,8 +1117,7 @@ coff_symtab_read (minimal_symbol_reader
 	  if (strcmp (cs->c_name, ".bb") == 0)
 	    {
 	      tmpaddr = cs->c_value;
-	      tmpaddr += ANOFFSET (objfile->section_offsets,
-				   SECT_OFF_TEXT (objfile));
+	      tmpaddr += objfile->text_section_offset ();
 	      push_context (++depth, tmpaddr);
 	    }
 	  else if (strcmp (cs->c_name, ".eb") == 0)
@@ -1147,9 +1140,7 @@ coff_symtab_read (minimal_symbol_reader
 		}
 	      if (*get_local_symbols () && !outermost_context_p ())
 		{
-		  tmpaddr =
-		    cs->c_value + ANOFFSET (objfile->section_offsets,
-					    SECT_OFF_TEXT (objfile));
+		  tmpaddr = cs->c_value + objfile->text_section_offset ();
 		  /* Make a block for the local symbols within.  */
 		  finish_block (0, cstk.old_blocks, NULL,
 				cstk.start_addr, tmpaddr);
@@ -1165,22 +1156,15 @@ coff_symtab_read (minimal_symbol_reader
 	}
     }
 
-  if ((nsyms == 0) && (pe_file))
-    {
-      /* We've got no debugging symbols, but it's a portable
-	 executable, so try to read the export table.  */
-      read_pe_exported_syms (reader, objfile);
-    }
-
   if (get_last_source_file ())
-    coff_end_symtab (objfile);
+    coff_end_compunit_symtab (objfile);
 
   /* Patch up any opaque types (references to types that are not defined
      in the file where they are referenced, e.g. "struct foo *bar").  */
   {
     for (compunit_symtab *cu : objfile->compunits ())
       {
-	for (symtab *s : compunit_filetabs (cu))
+	for (symtab *s : cu->filetabs ())
 	  patch_opaque_types (s);
       }
   }
@@ -1204,24 +1188,24 @@ read_one_sym (struct coff_symbol *cs,
   bfd_size_type bytes;
 
   cs->c_symnum = symnum;
-  bytes = bfd_bread (temp_sym, local_symesz, nlist_bfd_global);
+  bytes = bfd_read (temp_sym, local_symesz, nlist_bfd_global);
   if (bytes != local_symesz)
     error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
   bfd_coff_swap_sym_in (symfile_bfd, temp_sym, (char *) sym);
   cs->c_naux = sym->n_numaux & 0xff;
   if (cs->c_naux >= 1)
     {
-      bytes  = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
+      bytes = bfd_read (temp_aux, local_auxesz, nlist_bfd_global);
       if (bytes != local_auxesz)
 	error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
       bfd_coff_swap_aux_in (symfile_bfd, temp_aux,
 			    sym->n_type, sym->n_sclass,
 			    0, cs->c_naux, (char *) aux);
       /* If more than one aux entry, read past it (only the first aux
-         is important).  */
+	 is important).  */
       for (i = 1; i < cs->c_naux; i++)
 	{
-	  bytes = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
+	  bytes = bfd_read (temp_aux, local_auxesz, nlist_bfd_global);
 	  if (bytes != local_auxesz)
 	    error (_("%s: error reading symbols"),
 		   objfile_name (coffread_objfile));
@@ -1274,7 +1258,7 @@ read_one_sym (struct coff_symbol *cs,
 /* Support for string table handling.  */
 
 static int
-init_stringtab (bfd *abfd, long offset, gdb::unique_xmalloc_ptr<char> *storage)
+init_stringtab (bfd *abfd, file_ptr offset, gdb::unique_xmalloc_ptr<char> *storage)
 {
   long length;
   int val;
@@ -1288,12 +1272,13 @@ init_stringtab (bfd *abfd, long offset,
   if (bfd_seek (abfd, offset, 0) < 0)
     return -1;
 
-  val = bfd_bread ((char *) lengthbuf, sizeof lengthbuf, abfd);
-  length = bfd_h_get_32 (symfile_bfd, lengthbuf);
-
+  val = bfd_read (lengthbuf, sizeof lengthbuf, abfd);
   /* If no string table is needed, then the file may end immediately
      after the symbols.  Just return with `stringtab' set to null.  */
-  if (val != sizeof lengthbuf || length < sizeof lengthbuf)
+  if (val != sizeof lengthbuf)
+    return 0;
+  length = bfd_h_get_32 (symfile_bfd, lengthbuf);
+  if (length < sizeof lengthbuf)
     return 0;
 
   storage->reset ((char *) xmalloc (length));
@@ -1301,11 +1286,12 @@ init_stringtab (bfd *abfd, long offset,
   /* This is in target format (probably not very useful, and not
      currently used), not host format.  */
   memcpy (stringtab, lengthbuf, sizeof lengthbuf);
+  stringtab_length = length;
   if (length == sizeof length)	/* Empty table -- just the count.  */
     return 0;
 
-  val = bfd_bread (stringtab + sizeof lengthbuf, 
-		   length - sizeof lengthbuf, abfd);
+  val = bfd_read (stringtab + sizeof lengthbuf,
+		  length - sizeof lengthbuf, abfd);
   if (val != length - sizeof lengthbuf || stringtab[length - 1] != '\0')
     return -1;
 
@@ -1320,8 +1306,9 @@ getsymname (struct internal_syment *symb
 
   if (symbol_entry->_n._n_n._n_zeroes == 0)
     {
-      /* FIXME: Probably should be detecting corrupt symbol files by
-         seeing whether offset points to within the stringtab.  */
+      if (symbol_entry->_n._n_n._n_offset > stringtab_length)
+	error (_("COFF Error: string table offset (%s) outside string table (length %ld)"),
+	       hex_string (symbol_entry->_n._n_n._n_offset), stringtab_length);
       result = stringtab + symbol_entry->_n._n_n._n_offset;
     }
   else
@@ -1343,16 +1330,17 @@ coff_getfilename (union internal_auxent
   static char buffer[BUFSIZ];
   const char *result;
 
-  if (aux_entry->x_file.x_n.x_zeroes == 0)
+  if (aux_entry->x_file.x_n.x_n.x_zeroes == 0)
     {
-      if (strlen (stringtab + aux_entry->x_file.x_n.x_offset) >= BUFSIZ)
-	internal_error (__FILE__, __LINE__, _("coff file name too long"));
-      strcpy (buffer, stringtab + aux_entry->x_file.x_n.x_offset);
+      if (strlen (stringtab + aux_entry->x_file.x_n.x_n.x_offset) >= BUFSIZ)
+	internal_error (_("coff file name too long"));
+      strcpy (buffer, stringtab + aux_entry->x_file.x_n.x_n.x_offset);
     }
   else
     {
-      strncpy (buffer, aux_entry->x_file.x_fname, FILNMLEN);
-      buffer[FILNMLEN] = '\0';
+      size_t x_fname_len = sizeof (aux_entry->x_file.x_n.x_fname);
+      strncpy (buffer, aux_entry->x_file.x_n.x_fname, x_fname_len);
+      buffer[x_fname_len] = '\0';
     }
   result = buffer;
 
@@ -1370,7 +1358,7 @@ coff_getfilename (union internal_auxent
    them into GDB's data structures.  */
 
 static int
-init_lineno (bfd *abfd, long offset, int size,
+init_lineno (bfd *abfd, file_ptr offset, file_ptr size,
 	     gdb::unique_xmalloc_ptr<char> *storage)
 {
   int val;
@@ -1388,7 +1376,7 @@ init_lineno (bfd *abfd, long offset, int
   storage->reset ((char *) xmalloc (size + local_linesz));
   linetab = storage->get ();
 
-  val = bfd_bread (storage->get (), size, abfd);
+  val = bfd_read (storage->get (), size, abfd);
   if (val != size)
     return -1;
 
@@ -1403,10 +1391,10 @@ init_lineno (bfd *abfd, long offset, int
 #endif
 
 static void
-enter_linenos (long file_offset, int first_line,
+enter_linenos (file_ptr file_offset, int first_line,
 	       int last_line, struct objfile *objfile)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   char *rawptr;
   struct internal_lineno lptr;
 
@@ -1414,8 +1402,8 @@ enter_linenos (long file_offset, int fir
     return;
   if (file_offset < linetab_offset)
     {
-      complaint (_("Line number pointer %ld lower than start of line numbers"),
-		 file_offset);
+      complaint (_("Line number pointer %s lower than start of line numbers"),
+		 plongest (file_offset));
       if (file_offset > linetab_size)	/* Too big to be an offset?  */
 	return;
       file_offset += linetab_offset;	/* Try reading at that linetab
@@ -1441,11 +1429,10 @@ enter_linenos (long file_offset, int fir
       if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line)
 	{
 	  CORE_ADDR addr = lptr.l_addr.l_paddr;
-	  addr += ANOFFSET (objfile->section_offsets,
-			    SECT_OFF_TEXT (objfile));
 	  record_line (get_current_subfile (),
 		       first_line + L_LNNO32 (&lptr),
-		       gdbarch_addr_bits_remove (gdbarch, addr));
+		       unrelocated_addr (gdbarch_addr_bits_remove (gdbarch,
+								   addr)));
 	}
       else
 	break;
@@ -1455,26 +1442,18 @@ enter_linenos (long file_offset, int fir
 static void
 patch_type (struct type *type, struct type *real_type)
 {
-  struct type *target = TYPE_TARGET_TYPE (type);
-  struct type *real_target = TYPE_TARGET_TYPE (real_type);
-  int field_size = TYPE_NFIELDS (real_target) * sizeof (struct field);
-
-  TYPE_LENGTH (target) = TYPE_LENGTH (real_target);
-  TYPE_NFIELDS (target) = TYPE_NFIELDS (real_target);
-  TYPE_FIELDS (target) = (struct field *) TYPE_ALLOC (target,
-						      field_size);
-
-  memcpy (TYPE_FIELDS (target), 
-	  TYPE_FIELDS (real_target), 
-	  field_size);
+  struct type *target = type->target_type ();
+  struct type *real_target = real_type->target_type ();
 
-  if (TYPE_NAME (real_target))
+  target->set_length (real_target->length ());
+  target->copy_fields (real_target);
+
+  if (real_target->name ())
     {
       /* The previous copy of TYPE_NAME is allocated by
 	 process_coff_symbol.  */
-      if (TYPE_NAME (target))
-	xfree ((char*) TYPE_NAME (target));
-      TYPE_NAME (target) = xstrdup (TYPE_NAME (real_target));
+      xfree ((char *) target->name ());
+      target->set_name (xstrdup (real_target->name ()));
     }
 }
 
@@ -1485,22 +1464,18 @@ patch_type (struct type *type, struct ty
 static void
 patch_opaque_types (struct symtab *s)
 {
-  const struct block *b;
-  struct block_iterator iter;
-  struct symbol *real_sym;
-
   /* Go through the per-file symbols only.  */
-  b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (s), STATIC_BLOCK);
-  ALL_BLOCK_SYMBOLS (b, iter, real_sym)
+  const struct block *b = s->compunit ()->blockvector ()->static_block ();
+  for (struct symbol *real_sym : block_iterator_range (b))
     {
       /* Find completed typedefs to use to fix opaque ones.
-         Remove syms from the chain when their types are stored,
-         but search the whole chain, as there may be several syms
-         from different files with the same name.  */
-      if (SYMBOL_CLASS (real_sym) == LOC_TYPEDEF
-	  && SYMBOL_DOMAIN (real_sym) == VAR_DOMAIN
-	  && TYPE_CODE (SYMBOL_TYPE (real_sym)) == TYPE_CODE_PTR
-	  && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0)
+	 Remove syms from the chain when their types are stored,
+	 but search the whole chain, as there may be several syms
+	 from different files with the same name.  */
+      if (real_sym->aclass () == LOC_TYPEDEF
+	  && real_sym->domain () == TYPE_DOMAIN
+	  && real_sym->type ()->code () == TYPE_CODE_PTR
+	  && real_sym->type ()->target_type ()->length () != 0)
 	{
 	  const char *name = real_sym->linkage_name ();
 	  int hash = hashname (name);
@@ -1513,29 +1488,21 @@ patch_opaque_types (struct symtab *s)
 		  && strcmp (name + 1, sym->linkage_name () + 1) == 0)
 		{
 		  if (prev)
-		    {
-		      SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
-		    }
+		    prev->set_value_chain (sym->value_chain ());
 		  else
-		    {
-		      opaque_type_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
-		    }
+		    opaque_type_chain[hash] = sym->value_chain ();
 
-		  patch_type (SYMBOL_TYPE (sym), SYMBOL_TYPE (real_sym));
+		  patch_type (sym->type (), real_sym->type ());
 
 		  if (prev)
-		    {
-		      sym = SYMBOL_VALUE_CHAIN (prev);
-		    }
+		    sym = prev->value_chain ();
 		  else
-		    {
-		      sym = opaque_type_chain[hash];
-		    }
+		    sym = opaque_type_chain[hash];
 		}
 	      else
 		{
 		  prev = sym;
-		  sym = SYMBOL_VALUE_CHAIN (sym);
+		  sym->set_value_chain (sym);
 		}
 	    }
 	}
@@ -1545,7 +1512,7 @@ patch_opaque_types (struct symtab *s)
 static int
 coff_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
 {
-  return gdbarch_sdb_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
+  return gdbarch_sdb_reg_to_regnum (gdbarch, sym->value_longest ());
 }
 
 static const struct symbol_register_ops coff_register_funcs = {
@@ -1561,29 +1528,30 @@ process_coff_symbol (struct coff_symbol
 		     union internal_auxent *aux,
 		     struct objfile *objfile)
 {
-  struct symbol *sym = allocate_symbol (objfile);
+  struct symbol *sym = new (&objfile->objfile_obstack) symbol;
   char *name;
 
   name = cs->c_name;
-  name = EXTERNAL_NAME (name, objfile->obfd);
-  SYMBOL_SET_LANGUAGE (sym, get_current_subfile ()->language,
-		       &objfile->objfile_obstack);
-  SYMBOL_SET_NAMES (sym, name, true, objfile);
+  name = EXTERNAL_NAME (name, objfile->obfd.get ());
+  sym->set_language (get_current_subfile ()->language,
+		     &objfile->objfile_obstack);
+  sym->compute_and_set_names (name, true, objfile->per_bfd);
 
   /* default assumptions */
-  SYMBOL_VALUE (sym) = cs->c_value;
-  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-  SYMBOL_SECTION (sym) = cs_to_section (cs, objfile);
+  sym->set_value_longest (cs->c_value);
+  sym->set_domain (VAR_DOMAIN);
+  sym->set_section_index (cs_to_section (cs, objfile));
 
   if (ISFCN (cs->c_type))
     {
-      SYMBOL_VALUE (sym) += ANOFFSET (objfile->section_offsets,
-				      SECT_OFF_TEXT (objfile));
-      SYMBOL_TYPE (sym) =
-	lookup_function_type (decode_function_type (cs, cs->c_type,
-						    aux, objfile));
+      sym->set_domain (FUNCTION_DOMAIN);
+      sym->set_value_longest
+	(sym->value_longest () + objfile->text_section_offset ());
+      sym->set_type
+	(lookup_function_type (decode_function_type (cs, cs->c_type,
+						     aux, objfile)));
 
-      SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
+      sym->set_aclass_index (LOC_BLOCK);
       if (cs->c_sclass == C_STAT || cs->c_sclass == C_THUMBSTAT
 	  || cs->c_sclass == C_THUMBSTATFUNC)
 	add_symbol_to_list (sym, get_file_symbols ());
@@ -1593,36 +1561,32 @@ process_coff_symbol (struct coff_symbol
     }
   else
     {
-      SYMBOL_TYPE (sym) = decode_type (cs, cs->c_type, aux, objfile);
+      sym->set_type (decode_type (cs, cs->c_type, aux, objfile));
       switch (cs->c_sclass)
 	{
 	case C_NULL:
 	  break;
 
 	case C_AUTO:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
+	  sym->set_aclass_index (LOC_LOCAL);
 	  add_symbol_to_list (sym, get_local_symbols ());
 	  break;
 
 	case C_THUMBEXT:
 	case C_THUMBEXTFUNC:
 	case C_EXT:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
-	  SET_SYMBOL_VALUE_ADDRESS (sym,
-				    (CORE_ADDR) cs->c_value
-				    + ANOFFSET (objfile->section_offsets,
-						SECT_OFF_TEXT (objfile)));
+	  sym->set_aclass_index (LOC_STATIC);
+	  sym->set_value_address ((CORE_ADDR) cs->c_value
+				  + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
 	  add_symbol_to_list (sym, get_global_symbols ());
 	  break;
 
 	case C_THUMBSTAT:
 	case C_THUMBSTATFUNC:
 	case C_STAT:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
-	  SET_SYMBOL_VALUE_ADDRESS (sym,
-				    (CORE_ADDR) cs->c_value
-				    + ANOFFSET (objfile->section_offsets,
-						SECT_OFF_TEXT (objfile)));
+	  sym->set_aclass_index (LOC_STATIC);
+	  sym->set_value_address ((CORE_ADDR) cs->c_value
+				  + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
 	  if (within_function)
 	    {
 	      /* Static symbol of local scope.  */
@@ -1639,8 +1603,8 @@ process_coff_symbol (struct coff_symbol
 	case C_GLBLREG:
 #endif
 	case C_REG:
-	  SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
-	  SYMBOL_VALUE (sym) = cs->c_value;
+	  sym->set_aclass_index (coff_register_index);
+	  sym->set_value_longest (cs->c_value);
 	  add_symbol_to_list (sym, get_local_symbols ());
 	  break;
 
@@ -1649,27 +1613,27 @@ process_coff_symbol (struct coff_symbol
 	  break;
 
 	case C_ARG:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_ARG;
-	  SYMBOL_IS_ARGUMENT (sym) = 1;
+	  sym->set_aclass_index (LOC_ARG);
+	  sym->set_is_argument (1);
 	  add_symbol_to_list (sym, get_local_symbols ());
 	  break;
 
 	case C_REGPARM:
-	  SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
-	  SYMBOL_IS_ARGUMENT (sym) = 1;
-	  SYMBOL_VALUE (sym) = cs->c_value;
+	  sym->set_aclass_index (coff_register_index);
+	  sym->set_is_argument (1);
+	  sym->set_value_longest (cs->c_value);
 	  add_symbol_to_list (sym, get_local_symbols ());
 	  break;
 
 	case C_TPDEF:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-	  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+	  sym->set_aclass_index (LOC_TYPEDEF);
+	  sym->set_domain (TYPE_DOMAIN);
 
 	  /* If type has no name, give it one.  */
-	  if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
+	  if (sym->type ()->name () == 0)
 	    {
-	      if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
-		  || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC)
+	      if (sym->type ()->code () == TYPE_CODE_PTR
+		  || sym->type ()->code () == TYPE_CODE_FUNC)
 		{
 		  /* If we are giving a name to a type such as
 		     "pointer to foo" or "function returning foo", we
@@ -1692,8 +1656,7 @@ process_coff_symbol (struct coff_symbol
 		  ;
 		}
 	      else
-		TYPE_NAME (SYMBOL_TYPE (sym)) =
-		  xstrdup (sym->linkage_name ());
+		sym->type ()->set_name (xstrdup (sym->linkage_name ()));
 	    }
 
 	  /* Keep track of any type which points to empty structured
@@ -1702,14 +1665,14 @@ process_coff_symbol (struct coff_symbol
 	     not an empty structured type, though; the forward
 	     references work themselves out via the magic of
 	     coff_lookup_type.  */
-	  if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
-	      && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0
-	      && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym)))
-	         != TYPE_CODE_UNDEF)
+	  if (sym->type ()->code () == TYPE_CODE_PTR
+	      && sym->type ()->target_type ()->length () == 0
+	      && sym->type ()->target_type ()->code ()
+	      != TYPE_CODE_UNDEF)
 	    {
 	      int i = hashname (sym->linkage_name ());
 
-	      SYMBOL_VALUE_CHAIN (sym) = opaque_type_chain[i];
+	      sym->set_value_chain (opaque_type_chain[i]);
 	      opaque_type_chain[i] = sym;
 	    }
 	  add_symbol_to_list (sym, get_file_symbols ());
@@ -1718,17 +1681,17 @@ process_coff_symbol (struct coff_symbol
 	case C_STRTAG:
 	case C_UNTAG:
 	case C_ENTAG:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-	  SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
+	  sym->set_aclass_index (LOC_TYPEDEF);
+	  sym->set_domain (STRUCT_DOMAIN);
 
 	  /* Some compilers try to be helpful by inventing "fake"
 	     names for anonymous enums, structures, and unions, like
 	     "~0fake" or ".0fake".  Thanks, but no thanks...  */
-	  if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
+	  if (sym->type ()->name () == 0)
 	    if (sym->linkage_name () != NULL
 		&& *sym->linkage_name () != '~'
 		&& *sym->linkage_name () != '.')
-	      TYPE_NAME (SYMBOL_TYPE (sym)) = xstrdup (sym->linkage_name ());
+	      sym->type ()->set_name (xstrdup (sym->linkage_name ()));
 
 	  add_symbol_to_list (sym, get_file_symbols ());
 	  break;
@@ -1770,7 +1733,7 @@ decode_type (struct coff_symbol *cs, uns
 
 	  /* Define an array type.  */
 	  /* auxent refers to array, not base type.  */
-	  if (aux->x_sym.x_tagndx.l == 0)
+	  if (aux->x_sym.x_tagndx.u32 == 0)
 	    cs->c_naux = 0;
 
 	  /* Shift the indices down.  */
@@ -1782,11 +1745,11 @@ decode_type (struct coff_symbol *cs, uns
 	  *dim = 0;
 
 	  base_type = decode_type (cs, new_c_type, aux, objfile);
-	  index_type = objfile_type (objfile)->builtin_int;
+	  index_type = builtin_type (objfile)->builtin_int;
+	  type_allocator alloc (objfile, language_c);
 	  range_type
-	    = create_static_range_type (NULL, index_type, 0, n - 1);
-	  type =
-	    create_array_type (NULL, base_type, range_type);
+	    = create_static_range_type (alloc, index_type, 0, n - 1);
+	  type = create_array_type (alloc, base_type, range_type);
 	}
       return type;
     }
@@ -1797,14 +1760,14 @@ decode_type (struct coff_symbol *cs, uns
      unions, and enums, so we have to check the c_sclass field.  SCO
      3.2v4 cc gets confused with pointers to pointers to defined
      structs, and generates negative x_tagndx fields.  */
-  if (cs->c_naux > 0 && aux->x_sym.x_tagndx.l != 0)
+  if (cs->c_naux > 0 && aux->x_sym.x_tagndx.u32 != 0)
     {
       if (cs->c_sclass != C_STRTAG
 	  && cs->c_sclass != C_UNTAG
 	  && cs->c_sclass != C_ENTAG
-	  && aux->x_sym.x_tagndx.l >= 0)
+	  && (int32_t) aux->x_sym.x_tagndx.u32 >= 0)
 	{
-	  type = coff_alloc_type (aux->x_sym.x_tagndx.l);
+	  type = coff_alloc_type (aux->x_sym.x_tagndx.u32);
 	  return type;
 	}
       else
@@ -1827,7 +1790,7 @@ decode_function_type (struct coff_symbol
 		      union internal_auxent *aux, 
 		      struct objfile *objfile)
 {
-  if (aux->x_sym.x_tagndx.l == 0)
+  if (aux->x_sym.x_tagndx.u32 == 0)
     cs->c_naux = 0;	/* auxent refers to function, not base
 			   type.  */
 
@@ -1842,64 +1805,64 @@ decode_base_type (struct coff_symbol *cs
 		  union internal_auxent *aux, 
 		  struct objfile *objfile)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   struct type *type;
 
   switch (c_type)
     {
     case T_NULL:
       /* Shows up with "void (*foo)();" structure members.  */
-      return objfile_type (objfile)->builtin_void;
+      return builtin_type (objfile)->builtin_void;
 
 #ifdef T_VOID
     case T_VOID:
       /* Intel 960 COFF has this symbol and meaning.  */
-      return objfile_type (objfile)->builtin_void;
+      return builtin_type (objfile)->builtin_void;
 #endif
 
     case T_CHAR:
-      return objfile_type (objfile)->builtin_char;
+      return builtin_type (objfile)->builtin_char;
 
     case T_SHORT:
-      return objfile_type (objfile)->builtin_short;
+      return builtin_type (objfile)->builtin_short;
 
     case T_INT:
-      return objfile_type (objfile)->builtin_int;
+      return builtin_type (objfile)->builtin_int;
 
     case T_LONG:
       if (cs->c_sclass == C_FIELD
 	  && aux->x_sym.x_misc.x_lnsz.x_size
 	     > gdbarch_long_bit (gdbarch))
-	return objfile_type (objfile)->builtin_long_long;
+	return builtin_type (objfile)->builtin_long_long;
       else
-	return objfile_type (objfile)->builtin_long;
+	return builtin_type (objfile)->builtin_long;
 
     case T_FLOAT:
-      return objfile_type (objfile)->builtin_float;
+      return builtin_type (objfile)->builtin_float;
 
     case T_DOUBLE:
-      return objfile_type (objfile)->builtin_double;
+      return builtin_type (objfile)->builtin_double;
 
     case T_LNGDBL:
-      return objfile_type (objfile)->builtin_long_double;
+      return builtin_type (objfile)->builtin_long_double;
 
     case T_STRUCT:
       if (cs->c_naux != 1)
 	{
 	  /* Anonymous structure type.  */
 	  type = coff_alloc_type (cs->c_symnum);
-	  TYPE_CODE (type) = TYPE_CODE_STRUCT;
-	  TYPE_NAME (type) = NULL;
+	  type->set_code (TYPE_CODE_STRUCT);
+	  type->set_name (NULL);
 	  INIT_CPLUS_SPECIFIC (type);
-	  TYPE_LENGTH (type) = 0;
-	  TYPE_FIELDS (type) = 0;
-	  TYPE_NFIELDS (type) = 0;
+	  type->set_length (0);
+	  type->set_fields (nullptr);
+	  type->set_num_fields (0);
 	}
       else
 	{
 	  type = coff_read_struct_type (cs->c_symnum,
 					aux->x_sym.x_misc.x_lnsz.x_size,
-					aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
+					aux->x_sym.x_fcnary.x_fcn.x_endndx.u32,
 					objfile);
 	}
       return type;
@@ -1909,20 +1872,20 @@ decode_base_type (struct coff_symbol *cs
 	{
 	  /* Anonymous union type.  */
 	  type = coff_alloc_type (cs->c_symnum);
-	  TYPE_NAME (type) = NULL;
+	  type->set_name (NULL);
 	  INIT_CPLUS_SPECIFIC (type);
-	  TYPE_LENGTH (type) = 0;
-	  TYPE_FIELDS (type) = 0;
-	  TYPE_NFIELDS (type) = 0;
+	  type->set_length (0);
+	  type->set_fields (nullptr);
+	  type->set_num_fields (0);
 	}
       else
 	{
 	  type = coff_read_struct_type (cs->c_symnum,
 					aux->x_sym.x_misc.x_lnsz.x_size,
-					aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
+					aux->x_sym.x_fcnary.x_fcn.x_endndx.u32,
 					objfile);
 	}
-      TYPE_CODE (type) = TYPE_CODE_UNION;
+      type->set_code (TYPE_CODE_UNION);
       return type;
 
     case T_ENUM:
@@ -1930,17 +1893,17 @@ decode_base_type (struct coff_symbol *cs
 	{
 	  /* Anonymous enum type.  */
 	  type = coff_alloc_type (cs->c_symnum);
-	  TYPE_CODE (type) = TYPE_CODE_ENUM;
-	  TYPE_NAME (type) = NULL;
-	  TYPE_LENGTH (type) = 0;
-	  TYPE_FIELDS (type) = 0;
-	  TYPE_NFIELDS (type) = 0;
+	  type->set_code (TYPE_CODE_ENUM);
+	  type->set_name (NULL);
+	  type->set_length (0);
+	  type->set_fields (nullptr);
+	  type->set_num_fields (0);
 	}
       else
 	{
 	  type = coff_read_enum_type (cs->c_symnum,
 				      aux->x_sym.x_misc.x_lnsz.x_size,
-				      aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
+				      aux->x_sym.x_fcnary.x_fcn.x_endndx.u32,
 				      objfile);
 	}
       return type;
@@ -1950,24 +1913,24 @@ decode_base_type (struct coff_symbol *cs
       break;
 
     case T_UCHAR:
-      return objfile_type (objfile)->builtin_unsigned_char;
+      return builtin_type (objfile)->builtin_unsigned_char;
 
     case T_USHORT:
-      return objfile_type (objfile)->builtin_unsigned_short;
+      return builtin_type (objfile)->builtin_unsigned_short;
 
     case T_UINT:
-      return objfile_type (objfile)->builtin_unsigned_int;
+      return builtin_type (objfile)->builtin_unsigned_int;
 
     case T_ULONG:
       if (cs->c_sclass == C_FIELD
 	  && aux->x_sym.x_misc.x_lnsz.x_size
 	     > gdbarch_long_bit (gdbarch))
-	return objfile_type (objfile)->builtin_unsigned_long_long;
+	return builtin_type (objfile)->builtin_unsigned_long_long;
       else
-	return objfile_type (objfile)->builtin_unsigned_long;
+	return builtin_type (objfile)->builtin_unsigned_long;
     }
   complaint (_("Unexpected type for symbol %s"), cs->c_name);
-  return objfile_type (objfile)->builtin_void;
+  return builtin_type (objfile)->builtin_void;
 }
 
 /* This page contains subroutines of read_type.  */
@@ -1998,15 +1961,15 @@ coff_read_struct_type (int index, int le
   int done = 0;
 
   type = coff_alloc_type (index);
-  TYPE_CODE (type) = TYPE_CODE_STRUCT;
+  type->set_code (TYPE_CODE_STRUCT);
   INIT_CPLUS_SPECIFIC (type);
-  TYPE_LENGTH (type) = length;
+  type->set_length (length);
 
   while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
     {
       read_one_sym (ms, &sub_sym, &sub_aux);
       name = ms->c_name;
-      name = EXTERNAL_NAME (name, objfile->obfd);
+      name = EXTERNAL_NAME (name, objfile->obfd.get ());
 
       switch (ms->c_sclass)
 	{
@@ -2019,11 +1982,12 @@ coff_read_struct_type (int index, int le
 	  list = newobj;
 
 	  /* Save the data.  */
-	  list->field.name = obstack_strdup (&objfile->objfile_obstack, name);
-	  FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
-						  &sub_aux, objfile);
-	  SET_FIELD_BITPOS (list->field, 8 * ms->c_value);
-	  FIELD_BITSIZE (list->field) = 0;
+	  list->field.set_name (obstack_strdup (&objfile->objfile_obstack,
+						name));
+	  list->field.set_type (decode_type (ms, ms->c_type, &sub_aux,
+					     objfile));
+	  list->field.set_loc_bitpos (8 * ms->c_value);
+	  list->field.set_bitsize (0);
 	  nfields++;
 	  break;
 
@@ -2035,11 +1999,12 @@ coff_read_struct_type (int index, int le
 	  list = newobj;
 
 	  /* Save the data.  */
-	  list->field.name = obstack_strdup (&objfile->objfile_obstack, name);
-	  FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
-						  &sub_aux, objfile);
-	  SET_FIELD_BITPOS (list->field, ms->c_value);
-	  FIELD_BITSIZE (list->field) = sub_aux.x_sym.x_misc.x_lnsz.x_size;
+	  list->field.set_name (obstack_strdup (&objfile->objfile_obstack,
+						name));
+	  list->field.set_type (decode_type (ms, ms->c_type, &sub_aux,
+					     objfile));
+	  list->field.set_loc_bitpos (ms->c_value);
+	  list->field.set_bitsize (sub_aux.x_sym.x_misc.x_lnsz.x_size);
 	  nfields++;
 	  break;
 
@@ -2050,14 +2015,12 @@ coff_read_struct_type (int index, int le
     }
   /* Now create the vector of fields, and record how big it is.  */
 
-  TYPE_NFIELDS (type) = nfields;
-  TYPE_FIELDS (type) = (struct field *)
-    TYPE_ALLOC (type, sizeof (struct field) * nfields);
+  type->alloc_fields (nfields);
 
   /* Copy the saved-up fields into the field vector.  */
 
   for (n = nfields; list; list = list->next)
-    TYPE_FIELD (type, --n) = list->field;
+    type->field (--n) = list->field;
 
   return type;
 }
@@ -2070,7 +2033,7 @@ static struct type *
 coff_read_enum_type (int index, int length, int lastsym,
 		     struct objfile *objfile)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   struct symbol *sym;
   struct type *type;
   int nsyms = 0;
@@ -2098,18 +2061,18 @@ coff_read_enum_type (int index, int leng
     {
       read_one_sym (ms, &sub_sym, &sub_aux);
       name = ms->c_name;
-      name = EXTERNAL_NAME (name, objfile->obfd);
+      name = EXTERNAL_NAME (name, objfile->obfd.get ());
 
       switch (ms->c_sclass)
 	{
 	case C_MOE:
-	  sym = allocate_symbol (objfile);
+	  sym = new (&objfile->objfile_obstack) symbol;
 
 	  name = obstack_strdup (&objfile->objfile_obstack, name);
 	  sym->set_linkage_name (name);
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
-	  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-	  SYMBOL_VALUE (sym) = ms->c_value;
+	  sym->set_aclass_index (LOC_CONST);
+	  sym->set_domain (VAR_DOMAIN);
+	  sym->set_value_longest (ms->c_value);
 	  add_symbol_to_list (sym, symlist);
 	  nsyms++;
 	  break;
@@ -2126,13 +2089,11 @@ coff_read_enum_type (int index, int leng
   /* Now fill in the fields of the type-structure.  */
 
   if (length > 0)
-    TYPE_LENGTH (type) = length;
+    type->set_length (length);
   else /* Assume ints.  */
-    TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
-  TYPE_CODE (type) = TYPE_CODE_ENUM;
-  TYPE_NFIELDS (type) = nsyms;
-  TYPE_FIELDS (type) = (struct field *)
-    TYPE_ALLOC (type, sizeof (struct field) * nsyms);
+    type->set_length (gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT);
+  type->set_code (TYPE_CODE_ENUM);
+  type->alloc_fields (nsyms);
 
   /* Find the symbols for the values and put them into the type.
      The symbols can be found in the symlist that we put them on
@@ -2152,19 +2113,19 @@ coff_read_enum_type (int index, int leng
 	{
 	  struct symbol *xsym = syms->symbol[j];
 
-	  SYMBOL_TYPE (xsym) = type;
-	  TYPE_FIELD_NAME (type, n) = xsym->linkage_name ();
-	  SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
-	  if (SYMBOL_VALUE (xsym) < 0)
+	  xsym->set_type (type);
+	  type->field (n).set_name (xsym->linkage_name ());
+	  type->field (n).set_loc_enumval (xsym->value_longest ());
+	  if (xsym->value_longest () < 0)
 	    unsigned_enum = 0;
-	  TYPE_FIELD_BITSIZE (type, n) = 0;
+	  type->field (n).set_bitsize (0);
 	}
       if (syms == osyms)
 	break;
     }
 
   if (unsigned_enum)
-    TYPE_UNSIGNED (type) = 1;
+    type->set_is_unsigned (true);
 
   return type;
 }
@@ -2179,7 +2140,6 @@ static const struct sym_fns coff_sym_fns
 				   for sym_read() */
   coff_symfile_read,		/* sym_read: read a symbol file into
 				   symtab */
-  NULL,				/* sym_read_psymbols */
   coff_symfile_finish,		/* sym_finish: finished with file,
 				   cleanup */
   default_symfile_offsets,	/* sym_offsets: xlate external to
@@ -2191,11 +2151,11 @@ static const struct sym_fns coff_sym_fns
   default_symfile_relocate,	/* sym_relocate: Relocate a debug
 				   section.  */
   NULL,				/* sym_probe_fns */
-  &psym_functions
 };
 
+void _initialize_coffread ();
 void
-_initialize_coffread (void)
+_initialize_coffread ()
 {
   add_symtab_fns (bfd_target_coff_flavour, &coff_sym_fns);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/command.h ./gdb/command.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/command.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/command.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Header file for command creation.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -29,38 +29,49 @@ struct completion_tracker;
 /* Command classes are top-level categories into which commands are
    broken down for "help" purposes.
 
-   Notes on classes: class_alias is for alias commands which are not
-   abbreviations of the original command.  class-pseudo is for
-   commands which are not really commands nor help topics ("stop").  */
+   The class_alias is used for the user-defined aliases, defined
+   using the "alias" command.
+
+   Aliases pre-defined by GDB (e.g. the alias "bt" of the "backtrace" command)
+   are not using the class_alias.
+   Different pre-defined aliases of the same command do not necessarily
+   have the same classes.  For example, class_stack is used for the
+   "backtrace" and its "bt" alias", while "info stack" (also an alias
+   of "backtrace" uses class_info.  */
 
 enum command_class
 {
-  /* Special args to help_list */
-  class_deprecated = -3, all_classes = -2, all_commands = -1,
+  /* Classes of commands followed by a comment giving the name
+     to use in "help <classname>".
+     Note that help accepts unambiguous abbreviated class names.  */
+
+  /* Special classes to help_list */
+  all_classes = -2,  /* help without <classname> */
+  all_commands = -1, /* all */
+
   /* Classes of commands */
-  no_class = -1, class_run = 0, class_vars, class_stack, class_files,
-  class_support, class_info, class_breakpoint, class_trace,
-  class_alias, class_bookmark, class_obscure, class_maintenance,
-  class_pseudo, class_tui, class_user, class_xdb,
-  no_set_class	/* Used for "show" commands that have no corresponding
-		   "set" command.  */
-};
+  no_class = -1,
+  class_run = 0,     /* running */
+  class_vars,        /* data */
+  class_stack,       /* stack */
+  class_files,       /* files */
+  class_support,     /* support */
+  class_info,        /* status */
+  class_breakpoint,  /* breakpoints */
+  class_trace,       /* tracepoints */
+  class_alias,       /* aliases */
+  class_bookmark,
+  class_obscure,     /* obscure */
+  class_maintenance, /* internals */
+  class_tui,         /* text-user-interface */
+  class_user,        /* user-defined */
 
-/* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
-   cmd_types'' can be moved from "command.h" to "cli-decode.h".  */
-/* Not a set/show command.  Note that some commands which begin with
-   "set" or "show" might be in this category, if their syntax does
-   not fall into one of the following categories.  */
-typedef enum cmd_types
-  {
-    not_set_cmd,
-    set_cmd,
-    show_cmd
-  }
-cmd_types;
+  /* Used for "show" commands that have no corresponding "set" command.  */
+  no_set_class
+};
 
 /* Types of "set" or "show" command.  */
-typedef enum var_types
+enum var_types
   {
     /* "on" or "off".  *VAR is a bool which is true for on,
        false for off.  */
@@ -73,50 +84,308 @@ typedef enum var_types
        value.  */
     var_auto_boolean,
 
-    /* Unsigned Integer.  *VAR is an unsigned int.  The user can type
-       0 to mean "unlimited", which is stored in *VAR as UINT_MAX.  */
+    /* Unsigned Integer.  *VAR is an unsigned int.  In the Guile and Python
+       APIs 0 means unlimited, which is stored in *VAR as UINT_MAX.  */
     var_uinteger,
 
-    /* Like var_uinteger but signed.  *VAR is an int.  The user can
-       type 0 to mean "unlimited", which is stored in *VAR as
-       INT_MAX.  The only remaining use of it is the Python API.
-       Don't use it elsewhere.  */
+    /* Like var_uinteger but signed.  *VAR is an int.  In the Guile and
+       Python APIs 0 means unlimited, which is stored in *VAR as INT_MAX.  */
     var_integer,
 
+    /* Like var_integer but negative numbers are not allowed,
+       except for special values.  *VAR is an int.  */
+    var_pinteger,
+
     /* String which the user enters with escapes (e.g. the user types
        \n and it is a real newline in the stored string).
-       *VAR is a malloc'd string, or NULL if the string is empty.  */
+       *VAR is a std::string, "" if the string is empty.  */
     var_string,
     /* String which stores what the user types verbatim.
-       *VAR is a malloc'd string, or NULL if the string is empty.  */
+       *VAR is std::string, "" if the string is empty.  */
     var_string_noescape,
-    /* String which stores a filename.  (*VAR) is a malloc'd string,
-       or "" if the string was empty.  */
+    /* String which stores a filename.  (*VAR) is a std::string,
+       "" if the string was empty.  */
     var_optional_filename,
-    /* String which stores a filename.  (*VAR) is a malloc'd
-       string.  */
+    /* String which stores a filename.  (*VAR) is a std::string.  */
     var_filename,
-    /* ZeroableInteger.  *VAR is an int.  Like var_integer except
-       that zero really means zero.  */
-    var_zinteger,
-    /* ZeroableUnsignedInteger.  *VAR is an unsigned int.  Zero really
-       means zero.  */
-    var_zuinteger,
-    /* ZeroableUnsignedInteger with unlimited value.  *VAR is an int,
-       but its range is [0, INT_MAX].  -1 stands for unlimited and
-       other negative numbers are not allowed.  */
-    var_zuinteger_unlimited,
     /* Enumerated type.  Can only have one of the specified values.
        *VAR is a char pointer to the name of the element that we
        find.  */
     var_enum
+  };
+
+/* A structure describing an extra literal accepted and shown in place
+   of a number.  */
+struct literal_def
+{
+  /* The literal to define, e.g. "unlimited".  */
+  const char *literal;
+
+  /* The number to substitute internally for LITERAL or VAL;
+     the use of this number is not allowed (unless the same as VAL).  */
+  LONGEST use;
+
+  /* An optional number accepted that stands for the literal.  */
+  std::optional<LONGEST> val;
+};
+
+/* Return true if a setting of type VAR_TYPE is backed with type T.
+
+   This function is left without definition intentionally.  This template is
+   specialized for all valid types that are used to back var_types.  Therefore
+   if one tries to instantiate this un-specialized template it means the T
+   parameter is not a type used to back a var_type and it is most likely a
+   programming error.  */
+template<typename T>
+bool var_type_uses (var_types var_type) = delete;
+
+/* Return true if a setting of type T is backed by a bool variable.  */
+template<>
+inline bool var_type_uses<bool> (var_types t)
+{
+  return t == var_boolean;
+};
+
+/* Return true if a setting of type T is backed by a auto_boolean variable.
+*/
+template<>
+inline bool var_type_uses<enum auto_boolean> (var_types t)
+{
+  return t == var_auto_boolean;
+}
+
+/* Return true if a setting of type T is backed by an unsigned int variable.
+*/
+template<>
+inline bool var_type_uses<unsigned int> (var_types t)
+{
+  return t == var_uinteger;
+}
+
+/* Return true if a setting of type T is backed by an int variable.  */
+template<>
+inline bool var_type_uses<int> (var_types t)
+{
+  return t == var_integer || t == var_pinteger;
+}
+
+/* Return true if a setting of type T is backed by a std::string variable.  */
+template<>
+inline bool var_type_uses<std::string> (var_types t)
+{
+  return (t == var_string || t == var_string_noescape
+	  || t == var_optional_filename || t == var_filename);
+}
+
+/* Return true if a setting of type T is backed by a const char * variable.
+*/
+template<>
+inline bool var_type_uses<const char *> (var_types t)
+{
+  return t == var_enum;
+}
+
+template<bool is_scalar, typename T> struct setting_func_types_1;
+
+template<typename T>
+struct setting_func_types_1<true, T>
+{
+  using type = T;
+  using set = void (*) (type);
+  using get = type (*) ();
+};
+
+template<typename T>
+struct setting_func_types_1<false, T>
+{
+  using type = const T &;
+  using set = void (*) (type);
+  using get = type (*) ();
+};
+
+template<typename T>
+struct setting_func_types
+{
+  using type = typename setting_func_types_1<std::is_scalar<T>::value, T>::type;
+  using set = typename setting_func_types_1<std::is_scalar<T>::value, T>::set;
+  using get = typename setting_func_types_1<std::is_scalar<T>::value, T>::get;
+};
+
+/* Generic/type-erased function pointer.  */
+
+using erased_func = void (*) ();
+
+/* Interface for getting and setting a setting's value.
+
+   The underlying data can be of any VAR_TYPES type.  */
+struct setting
+{
+  /* Create a setting backed by a variable of type T.
+
+     Type T must match the var type VAR_TYPE (see VAR_TYPE_USES).  */
+  template<typename T>
+  setting (var_types var_type, T *var,
+	   const literal_def *extra_literals = nullptr)
+    : m_var_type (var_type), m_var (var), m_extra_literals (extra_literals)
+  {
+    gdb_assert (var != nullptr);
+    gdb_assert (var_type_uses<T> (var_type));
   }
-var_types;
+
+  /* A setting can also be constructed with a pre-validated
+     type-erased variable.  Use the following function to
+     validate & type-erase said variable/function pointers.  */
+
+  struct erased_args
+  {
+    void *var;
+    erased_func setter;
+    erased_func getter;
+  };
+
+  template<typename T>
+  static erased_args erase_args (var_types var_type,
+				 T *var,
+				 typename setting_func_types<T>::set set_setting_func,
+				 typename setting_func_types<T>::get get_setting_func)
+  {
+    gdb_assert (var_type_uses<T> (var_type));
+  /* The getter and the setter must be both provided or both omitted.  */
+    gdb_assert
+      ((set_setting_func == nullptr) == (get_setting_func == nullptr));
+
+  /* The caller must provide a pointer to a variable or get/set functions, but
+     not both.  */
+    gdb_assert ((set_setting_func == nullptr) != (var == nullptr));
+
+    return {
+	var,
+	reinterpret_cast<erased_func> (set_setting_func),
+	reinterpret_cast<erased_func> (get_setting_func)
+    };
+  }
+
+  /* Create a setting backed by pre-validated type-erased args and using
+     EXTRA_LITERALS.  ERASED_VAR's fields' real types must match the var
+     type VAR_TYPE (see VAR_TYPE_USES).  */
+  setting (var_types var_type, const literal_def *extra_literals,
+	   const erased_args &args)
+    : m_var_type (var_type),
+      m_var (args.var),
+      m_extra_literals (extra_literals),
+      m_getter (args.getter),
+      m_setter (args.setter)
+  {
+  }
+
+  /* Create a setting backed by setter and getter functions.
+
+     Type T must match the var type VAR_TYPE (see VAR_TYPE_USES).  */
+  template<typename T>
+  setting (var_types var_type,
+	   typename setting_func_types<T>::set setter,
+	   typename setting_func_types<T>::get getter)
+    : m_var_type (var_type)
+  {
+    gdb_assert (var_type_uses<T> (var_type));
+
+    /* Getters and setters are cast to and from the arbitrary `void (*) ()`
+       function pointer type.  Make sure that the two types are really of the
+       same size.  */
+    static_assert (sizeof (m_getter) == sizeof (getter));
+    static_assert (sizeof (m_setter) == sizeof (setter));
+
+    m_getter = reinterpret_cast<erased_func> (getter);
+    m_setter = reinterpret_cast<erased_func> (setter);
+  }
+
+  /* Access the type of the current setting.  */
+  var_types type () const
+  { return m_var_type; }
+
+  /* Access any extra literals accepted.  */
+  const literal_def *extra_literals () const
+  { return m_extra_literals; }
+
+  /* Return the current value.
+
+     The template parameter T is the type of the variable used to store the
+     setting.  */
+  template<typename T>
+  typename setting_func_types<T>::type get () const
+  {
+    gdb_assert (var_type_uses<T> (m_var_type));
+
+    if (m_var == nullptr)
+      {
+	gdb_assert (m_getter != nullptr);
+	auto getter = reinterpret_cast<typename setting_func_types<T>::get> (m_getter);
+	return getter ();
+      }
+    else
+      return *static_cast<const T *> (m_var);
+  }
+
+  /* Sets the value of the setting to V.  Returns true if the setting was
+     effectively changed, false if the update failed and the setting is left
+     unchanged.
+
+     If we have a user-provided setter, use it to set the setting.  Otherwise
+     copy the value V to the internally referenced buffer.
+
+     The template parameter T indicates the type of the variable used to store
+     the setting.
+
+     The var_type of the setting must match T.  */
+  template<typename T>
+  bool set (const T &v)
+  {
+    /* Check that the current instance is of one of the supported types for
+       this instantiation.  */
+    gdb_assert (var_type_uses<T> (m_var_type));
+
+    const T old_value = this->get<T> ();
+
+    if (m_var == nullptr)
+      {
+	gdb_assert (m_setter != nullptr);
+	auto setter = reinterpret_cast<typename setting_func_types<T>::set> (m_setter);
+	setter (v);
+      }
+    else
+      *static_cast<T *> (m_var) = v;
+
+    return old_value != this->get<T> ();
+  }
+
+private:
+  /* The type of the variable M_VAR is pointing to, or that M_GETTER / M_SETTER
+     get or set.  */
+  var_types m_var_type;
+
+  /* Pointer to the enclosed variable
+
+     Either M_VAR is non-nullptr, or both M_GETTER and M_SETTER are
+     non-nullptr.  */
+  void *m_var = nullptr;
+
+  /* Any extra literals accepted.  */
+  const literal_def *m_extra_literals = nullptr;
+
+  /* Pointer to a user provided getter.  */
+  erased_func m_getter = nullptr;
+
+  /* Pointer to a user provided setter.  */
+  erased_func m_setter = nullptr;
+};
 
 /* This structure records one command'd definition.  */
 struct cmd_list_element;
 
-typedef void cmd_const_cfunc_ftype (const char *args, int from_tty);
+/* The "simple" signature of command callbacks, which doesn't include a
+   cmd_list_element parameter.  */
+
+typedef void cmd_simple_func_ftype (const char *args, int from_tty);
 
 /* This structure specifies notifications to be suppressed by a cli
    command interpreter.  */
@@ -124,7 +393,10 @@ typedef void cmd_const_cfunc_ftype (cons
 struct cli_suppress_notification
 {
   /* Inferior, thread, frame selected notification suppressed?  */
-  int user_selected_context;
+  bool user_selected_context = false;
+
+  /* Normal stop event suppressed? */
+  bool normal_stop = false;
 };
 
 extern struct cli_suppress_notification cli_suppress_notification;
@@ -143,10 +415,17 @@ extern bool valid_user_defined_cmd_name_
 
 extern bool valid_cmd_char_p (int c);
 
+/* Return value type for the add_setshow_* functions.  */
+
+struct set_show_commands
+{
+  cmd_list_element *set, *show;
+};
+
 /* Const-correct variant of the above.  */
 
 extern struct cmd_list_element *add_cmd (const char *, enum command_class,
-					 cmd_const_cfunc_ftype *fun,
+					 cmd_simple_func_ftype *fun,
 					 const char *,
 					 struct cmd_list_element **);
 
@@ -158,13 +437,9 @@ extern struct cmd_list_element *add_cmd
 
 extern struct cmd_list_element *add_cmd_suppress_notification
 			(const char *name, enum command_class theclass,
-			 cmd_const_cfunc_ftype *fun, const char *doc,
+			 cmd_simple_func_ftype *fun, const char *doc,
 			 struct cmd_list_element **list,
-			 int *suppress_notification);
-
-extern struct cmd_list_element *add_alias_cmd (const char *, const char *,
-					       enum command_class, int,
-					       struct cmd_list_element **);
+			 bool *suppress_notification);
 
 extern struct cmd_list_element *add_alias_cmd (const char *,
 					       cmd_list_element *,
@@ -173,33 +448,56 @@ extern struct cmd_list_element *add_alia
 
 
 extern struct cmd_list_element *add_prefix_cmd (const char *, enum command_class,
-						cmd_const_cfunc_ftype *fun,
+						cmd_simple_func_ftype *fun,
 						const char *,
 						struct cmd_list_element **,
-						const char *, int,
+						int,
 						struct cmd_list_element **);
 
+/* Like add_prefix_cmd, but sets the callback to a function that
+   simply calls help_list.  */
+
+extern struct cmd_list_element *add_basic_prefix_cmd
+  (const char *, enum command_class, const char *, struct cmd_list_element **,
+   int, struct cmd_list_element **);
+
+/* Like add_prefix_cmd, but useful for "show" prefixes.  This sets the
+   callback to a function that simply calls cmd_show_list.  */
+
+extern struct cmd_list_element *add_show_prefix_cmd
+  (const char *, enum command_class, const char *, struct cmd_list_element **,
+   int, struct cmd_list_element **);
+
+/* Add matching set and show commands using add_basic_prefix_cmd and
+   add_show_prefix_cmd.  */
+
+extern set_show_commands add_setshow_prefix_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc,
+   cmd_list_element **set_subcommands_list,
+   cmd_list_element **show_subcommands_list,
+   cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
 extern struct cmd_list_element *add_prefix_cmd_suppress_notification
 			(const char *name, enum command_class theclass,
-			 cmd_const_cfunc_ftype *fun,
-			 const char *doc, struct cmd_list_element **prefixlist,
-			 const char *prefixname, int allow_unknown,
+			 cmd_simple_func_ftype *fun,
+			 const char *doc, struct cmd_list_element **subcommands,
+			 int allow_unknown,
 			 struct cmd_list_element **list,
-			 int *suppress_notification);
+			 bool *suppress_notification);
 
 extern struct cmd_list_element *add_abbrev_prefix_cmd (const char *,
 						       enum command_class,
-						       cmd_const_cfunc_ftype *fun,
+						       cmd_simple_func_ftype *fun,
 						       const char *,
 						       struct cmd_list_element
-						       **, const char *, int,
+						       **, int,
 						       struct cmd_list_element
 						       **);
 
-typedef void cmd_const_sfunc_ftype (const char *args, int from_tty,
-				    struct cmd_list_element *c);
-extern void set_cmd_sfunc (struct cmd_list_element *cmd,
-			   cmd_const_sfunc_ftype *sfunc);
+typedef void cmd_func_ftype (const char *args, int from_tty,
+			     cmd_list_element *c);
 
 /* A completion routine.  Add possible completions to tracker.
 
@@ -228,14 +526,8 @@ extern void set_cmd_completer_handle_brk
 
 /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
    around in cmd objects to test the value of the commands sfunc().  */
-extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
-			 cmd_const_cfunc_ftype *cfun);
-
-/* Each command object has a local context attached to it.  */
-extern void set_cmd_context (struct cmd_list_element *cmd,
-			     void *context);
-extern void *get_cmd_context (struct cmd_list_element *cmd);
-
+extern int cmd_simple_func_eq (struct cmd_list_element *cmd,
+			 cmd_simple_func_ftype *cfun);
 
 /* Execute CMD's pre/post hook.  Throw an error if the command fails.
    If already executing this pre/post hook, or there is no pre/post
@@ -243,26 +535,86 @@ extern void *get_cmd_context (struct cmd
 extern void execute_cmd_pre_hook (struct cmd_list_element *cmd);
 extern void execute_cmd_post_hook (struct cmd_list_element *cmd);
 
-/* Return the type of the command.  */
-extern enum cmd_types cmd_type (struct cmd_list_element *cmd);
-
 /* Flag for an ambiguous cmd_list result.  */
 #define CMD_LIST_AMBIGUOUS ((struct cmd_list_element *) -1)
 
 extern struct cmd_list_element *lookup_cmd (const char **,
 					    struct cmd_list_element *,
 					    const char *,
+					    std::string *,
 					    int, int);
 
-extern struct cmd_list_element *lookup_cmd_1 (const char **,
-					      struct cmd_list_element *,
-					      struct cmd_list_element **,
-					      int);
+/* This routine takes a line of TEXT and a CLIST in which to start the
+   lookup.  When it returns it will have incremented the text pointer past
+   the section of text it matched, set *RESULT_LIST to point to the list in
+   which the last word was matched, and will return a pointer to the cmd
+   list element which the text matches.  It will return NULL if no match at
+   all was possible.  It will return -1 (cast appropriately, ick) if ambigous
+   matches are possible; in this case *RESULT_LIST will be set to point to
+   the list in which there are ambiguous choices (and *TEXT will be set to
+   the ambiguous text string).
+
+   if DEFAULT_ARGS is not null, *DEFAULT_ARGS is set to the found command
+   default args (possibly empty).
+
+   If the located command was an abbreviation, this routine returns the base
+   command of the abbreviation.  Note that *DEFAULT_ARGS will contain the
+   default args defined for the alias.
+
+   It does no error reporting whatsoever; control will always return
+   to the superior routine.
+
+   In the case of an ambiguous return (-1), *RESULT_LIST will be set to point
+   at the prefix_command (ie. the best match) *or* (special case) will be NULL
+   if no prefix command was ever found.  For example, in the case of "info a",
+   "info" matches without ambiguity, but "a" could be "args" or "address", so
+   *RESULT_LIST is set to the cmd_list_element for "info".  So in this case
+   RESULT_LIST should not be interpreted as a pointer to the beginning of a
+   list; it simply points to a specific command.  In the case of an ambiguous
+   return *TEXT is advanced past the last non-ambiguous prefix (e.g.
+   "info t" can be "info types" or "info target"; upon return *TEXT has been
+   advanced past "info ").
+
+   If RESULT_LIST is NULL, don't set *RESULT_LIST (but don't otherwise
+   affect the operation).
+
+   This routine does *not* modify the text pointed to by TEXT.
+
+   If IGNORE_HELP_CLASSES is nonzero, ignore any command list elements which
+   are actually help classes rather than commands (i.e. the function field of
+   the struct cmd_list_element is NULL).
+
+   When LOOKUP_FOR_COMPLETION_P is true the completion is being requested
+   for the completion engine, no warnings should be printed.  */
+
+extern struct cmd_list_element *lookup_cmd_1
+	(const char **text, struct cmd_list_element *clist,
+	 struct cmd_list_element **result_list, std::string *default_args,
+	 int ignore_help_classes, bool lookup_for_completion_p = false);
+
+/* Look up the command called NAME in the command list LIST.
+
+   Unlike LOOKUP_CMD, partial matches are ignored and only exact matches
+   on NAME are considered.
+
+   LIST is a chain of struct cmd_list_element's.
+
+   If IGNORE_HELP_CLASSES is true (the default), ignore any command list
+   elements which are actually help classes rather than commands (i.e.
+   the function field of the struct cmd_list_element is null).
+
+   If found, return the struct cmd_list_element for that command,
+   otherwise return NULLPTR.  */
+
+extern struct cmd_list_element *lookup_cmd_exact
+			(const char *name,
+			 struct cmd_list_element *list,
+			 bool ignore_help_classes = true);
 
 extern struct cmd_list_element *deprecate_cmd (struct cmd_list_element *,
 					       const char * );
 
-extern void deprecated_cmd_warning (const char *);
+extern void deprecated_cmd_warning (const char *, struct cmd_list_element *);
 
 extern int lookup_cmd_composition (const char *text,
 				   struct cmd_list_element **alias,
@@ -270,23 +622,26 @@ extern int lookup_cmd_composition (const
 				   struct cmd_list_element **cmd);
 
 extern struct cmd_list_element *add_com (const char *, enum command_class,
-					 cmd_const_cfunc_ftype *fun,
+					 cmd_simple_func_ftype *fun,
 					 const char *);
 
-extern struct cmd_list_element *add_com_alias (const char *, const char *,
-					       enum command_class, int);
+extern cmd_list_element *add_com_alias (const char *name,
+					cmd_list_element *target,
+					command_class theclass,
+					int abbrev_flag);
 
 extern struct cmd_list_element *add_com_suppress_notification
 		       (const char *name, enum command_class theclass,
-			cmd_const_cfunc_ftype *fun, const char *doc,
-			int *supress_notification);
+			cmd_simple_func_ftype *fun, const char *doc,
+			bool *suppress_notification);
 
 extern struct cmd_list_element *add_info (const char *,
-					  cmd_const_cfunc_ftype *fun,
+					  cmd_simple_func_ftype *fun,
 					  const char *);
 
-extern struct cmd_list_element *add_info_alias (const char *, const char *,
-						int);
+extern cmd_list_element *add_info_alias (const char *name,
+					 cmd_list_element *target,
+					 int abbrev_flag);
 
 extern void complete_on_cmdlist (struct cmd_list_element *,
 				 completion_tracker &tracker,
@@ -301,156 +656,222 @@ extern void complete_on_enum (completion
 extern void help_list (struct cmd_list_element *, const char *,
 		       enum command_class, struct ui_file *);
 
-/* Method for show a set/show variable's VALUE on FILE.  If this
-   method isn't supplied deprecated_show_value_hack() is called (which
-   is not good).  */
+/* Method for show a set/show variable's VALUE on FILE.  */
 typedef void (show_value_ftype) (struct ui_file *file,
 				 int from_tty,
 				 struct cmd_list_element *cmd,
 				 const char *value);
-/* NOTE: i18n: This function is not i18n friendly.  Callers should
-   instead print the value out directly.  */
-extern show_value_ftype deprecated_show_value_hack;
-
-extern void add_setshow_enum_cmd (const char *name,
-				  enum command_class theclass,
-				  const char *const *enumlist,
-				  const char **var,
-				  const char *set_doc,
-				  const char *show_doc,
-				  const char *help_doc,
-				  cmd_const_sfunc_ftype *set_func,
-				  show_value_ftype *show_func,
-				  struct cmd_list_element **set_list,
-				  struct cmd_list_element **show_list,
-				  void *context = nullptr);
-
-extern void add_setshow_auto_boolean_cmd (const char *name,
-					  enum command_class theclass,
-					  enum auto_boolean *var,
-					  const char *set_doc,
-					  const char *show_doc,
-					  const char *help_doc,
-					  cmd_const_sfunc_ftype *set_func,
-					  show_value_ftype *show_func,
-					  struct cmd_list_element **set_list,
-					  struct cmd_list_element **show_list);
-
-extern cmd_list_element *
-  add_setshow_boolean_cmd (const char *name,
-			   enum command_class theclass,
-			   bool *var,
-			   const char *set_doc, const char *show_doc,
-			   const char *help_doc,
-			   cmd_const_sfunc_ftype *set_func,
-			   show_value_ftype *show_func,
-			   struct cmd_list_element **set_list,
-			   struct cmd_list_element **show_list);
-
-extern void add_setshow_filename_cmd (const char *name,
-				      enum command_class theclass,
-				      char **var,
-				      const char *set_doc,
-				      const char *show_doc,
-				      const char *help_doc,
-				      cmd_const_sfunc_ftype *set_func,
-				      show_value_ftype *show_func,
-				      struct cmd_list_element **set_list,
-				      struct cmd_list_element **show_list);
-
-extern void add_setshow_string_cmd (const char *name,
-				    enum command_class theclass,
-				    char **var,
-				    const char *set_doc,
-				    const char *show_doc,
-				    const char *help_doc,
-				    cmd_const_sfunc_ftype *set_func,
-				    show_value_ftype *show_func,
-				    struct cmd_list_element **set_list,
-				    struct cmd_list_element **show_list);
-
-extern struct cmd_list_element *add_setshow_string_noescape_cmd
-		      (const char *name,
-		       enum command_class theclass,
-		       char **var,
-		       const char *set_doc,
-		       const char *show_doc,
-		       const char *help_doc,
-		       cmd_const_sfunc_ftype *set_func,
-		       show_value_ftype *show_func,
-		       struct cmd_list_element **set_list,
-		       struct cmd_list_element **show_list);
-
-extern void add_setshow_optional_filename_cmd (const char *name,
-					       enum command_class theclass,
-					       char **var,
-					       const char *set_doc,
-					       const char *show_doc,
-					       const char *help_doc,
-					       cmd_const_sfunc_ftype *set_func,
-					       show_value_ftype *show_func,
-					       struct cmd_list_element **set_list,
-					       struct cmd_list_element **show_list);
-
-extern void add_setshow_integer_cmd (const char *name,
-				     enum command_class theclass,
-				     int *var,
-				     const char *set_doc,
-				     const char *show_doc,
-				     const char *help_doc,
-				     cmd_const_sfunc_ftype *set_func,
-				     show_value_ftype *show_func,
-				     struct cmd_list_element **set_list,
-				     struct cmd_list_element **show_list);
-
-extern void add_setshow_uinteger_cmd (const char *name,
-				      enum command_class theclass,
-				      unsigned int *var,
-				      const char *set_doc,
-				      const char *show_doc,
-				      const char *help_doc,
-				      cmd_const_sfunc_ftype *set_func,
-				      show_value_ftype *show_func,
-				      struct cmd_list_element **set_list,
-				      struct cmd_list_element **show_list);
-
-extern void add_setshow_zinteger_cmd (const char *name,
-				      enum command_class theclass,
-				      int *var,
-				      const char *set_doc,
-				      const char *show_doc,
-				      const char *help_doc,
-				      cmd_const_sfunc_ftype *set_func,
-				      show_value_ftype *show_func,
-				      struct cmd_list_element **set_list,
-				      struct cmd_list_element **show_list);
-
-extern void add_setshow_zuinteger_cmd (const char *name,
-				       enum command_class theclass,
-				       unsigned int *var,
-				       const char *set_doc,
-				       const char *show_doc,
-				       const char *help_doc,
-				       cmd_const_sfunc_ftype *set_func,
-				       show_value_ftype *show_func,
-				       struct cmd_list_element **set_list,
-				       struct cmd_list_element **show_list);
-
-extern void
-  add_setshow_zuinteger_unlimited_cmd (const char *name,
-				       enum command_class theclass,
-				       int *var,
-				       const char *set_doc,
-				       const char *show_doc,
-				       const char *help_doc,
-				       cmd_const_sfunc_ftype *set_func,
-				       show_value_ftype *show_func,
-				       struct cmd_list_element **set_list,
-				       struct cmd_list_element **show_list);
+
+/* Various sets of extra literals accepted.  */
+extern const literal_def integer_unlimited_literals[];
+extern const literal_def uinteger_unlimited_literals[];
+extern const literal_def pinteger_unlimited_literals[];
+
+extern set_show_commands add_setshow_enum_cmd
+  (const char *name, command_class theclass, const char *const *enumlist,
+   const char **var, const char *set_doc, const char *show_doc,
+   const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_enum_cmd
+  (const char *name, command_class theclass, const char *const *enumlist,
+   const char *set_doc, const char *show_doc,
+   const char *help_doc, setting_func_types<const char *>::set set_func,
+   setting_func_types<const char *>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_auto_boolean_cmd
+  (const char *name, command_class theclass, auto_boolean *var,
+   const char *set_doc, const char *show_doc, const char *help_doc,
+   cmd_func_ftype *set_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_auto_boolean_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<enum auto_boolean>::set set_func,
+   setting_func_types<enum auto_boolean>::get get_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_boolean_cmd
+  (const char *name, command_class theclass, bool *var, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_boolean_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<bool>::set set_func,
+   setting_func_types<bool>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_filename_cmd
+  (const char *name, command_class theclass, std::string *var, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_filename_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<std::string>::set set_func,
+   setting_func_types<std::string>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_string_cmd
+  (const char *name, command_class theclass, std::string *var, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_string_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<std::string>::set set_func,
+   setting_func_types<std::string>::get get_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_string_noescape_cmd
+  (const char *name, command_class theclass, std::string *var, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_string_noescape_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<std::string>::set set_func,
+   setting_func_types<std::string>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_optional_filename_cmd
+  (const char *name, command_class theclass, std::string *var, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_optional_filename_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<std::string>::set set_func,
+   setting_func_types<std::string>::get get_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_integer_cmd
+  (const char *name, command_class theclass, int *var,
+   const literal_def *extra_literals, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_integer_cmd
+  (const char *name, command_class theclass, const literal_def *extra_literals,
+   const char *set_doc, const char *show_doc, const char *help_doc,
+   setting_func_types<int>::set set_func,
+   setting_func_types<int>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_integer_cmd
+  (const char *name, command_class theclass, int *var, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_integer_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<int>::set set_func,
+   setting_func_types<int>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_pinteger_cmd
+  (const char *name, command_class theclass, int *var,
+   const literal_def *extra_literals, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_pinteger_cmd
+  (const char *name, command_class theclass, const literal_def *extra_literals,
+   const char *set_doc, const char *show_doc, const char *help_doc,
+   setting_func_types<int>::set set_func,
+   setting_func_types<int>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_uinteger_cmd
+  (const char *name, command_class theclass, unsigned int *var,
+   const literal_def *extra_literals,
+   const char *set_doc, const char *show_doc, const char *help_doc,
+   cmd_func_ftype *set_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_uinteger_cmd
+  (const char *name, command_class theclass, const literal_def *extra_literals,
+   const char *set_doc, const char *show_doc, const char *help_doc,
+   setting_func_types<unsigned int>::set set_func,
+   setting_func_types<unsigned int>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_uinteger_cmd
+  (const char *name, command_class theclass, unsigned int *var,
+   const char *set_doc, const char *show_doc, const char *help_doc,
+   cmd_func_ftype *set_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_uinteger_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<unsigned int>::set set_func,
+   setting_func_types<unsigned int>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_zinteger_cmd
+  (const char *name, command_class theclass, int *var, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_zinteger_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<int>::set set_func,
+   setting_func_types<int>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_zuinteger_cmd
+  (const char *name, command_class theclass, unsigned int *var,
+   const char *set_doc, const char *show_doc, const char *help_doc,
+   cmd_func_ftype *set_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_zuinteger_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<unsigned int>::set set_func,
+   setting_func_types<unsigned int>::get get_func, show_value_ftype *show_func,
+   cmd_list_element **set_list, cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_zuinteger_unlimited_cmd
+  (const char *name, command_class theclass, int *var, const char *set_doc,
+   const char *show_doc, const char *help_doc, cmd_func_ftype *set_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_zuinteger_unlimited_cmd
+  (const char *name, command_class theclass, const char *set_doc,
+   const char *show_doc, const char *help_doc,
+   setting_func_types<int>::set set_func, setting_func_types<int>::get get_func,
+   show_value_ftype *show_func, cmd_list_element **set_list,
+   cmd_list_element **show_list);
 
 /* Do a "show" command for each thing on a command list.  */
 
-extern void cmd_show_list (struct cmd_list_element *, int, const char *);
+extern void cmd_show_list (struct cmd_list_element *, int);
 
 /* Used everywhere whenever at least one parameter is required and
    none is specified.  */
@@ -509,9 +930,6 @@ extern void save_command_line (const cha
 
 extern void not_just_help_class_command (const char *, int);
 
-/* Check function pointer.  */
-extern int cmd_func_p (struct cmd_list_element *cmd);
-
 /* Call the command function.  */
 extern void cmd_func (struct cmd_list_element *cmd,
 		      const char *args, int from_tty);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile.c ./gdb/compile/compile.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* General Compile and inject code
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,7 +18,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "top.h"
+#include "ui.h"
 #include "ui-out.h"
 #include "command.h"
 #include "cli/cli-script.h"
@@ -40,9 +40,11 @@
 #include "osabi.h"
 #include "gdbsupport/gdb_wait.h"
 #include "valprint.h"
-#include "gdbsupport/gdb_optional.h"
+#include <optional>
 #include "gdbsupport/gdb_unlinker.h"
 #include "gdbsupport/pathstuff.h"
+#include "gdbsupport/scoped_ignore_signal.h"
+#include "gdbsupport/buildargv.h"
 
 
 
@@ -72,6 +74,19 @@ struct symbol_error
   char *message;
 };
 
+/* An object that maps a gdb type to a gcc type.  */
+
+struct type_map_instance
+{
+  /* The gdb type.  */
+
+  struct type *type;
+
+  /* The corresponding gcc type handle.  */
+
+  gcc_type gcc_type_handle;
+};
+
 /* Hash a type_map_instance.  */
 
 static hashval_t
@@ -231,7 +246,7 @@ static void
 show_compile_debug (struct ui_file *file, int from_tty,
 		    struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Compile debugging is %s.\n"), value);
+  gdb_printf (file, _("Compile debugging is %s.\n"), value);
 }
 
 
@@ -295,8 +310,8 @@ compile_file_command (const char *args,
     error (_("You must provide a filename for this command."));
 
   args = skip_spaces (args);
-  gdb::unique_xmalloc_ptr<char> abspath = gdb_abspath (args);
-  std::string buffer = string_printf ("#include \"%s\"\n", abspath.get ());
+  std::string abspath = gdb_abspath (args);
+  std::string buffer = string_printf ("#include \"%s\"\n", abspath.c_str ());
   eval_compile_command (NULL, buffer.c_str (), scope, NULL);
 }
 
@@ -482,44 +497,44 @@ get_expr_block_and_pc (CORE_ADDR *pc)
       struct symtab_and_line cursal = get_current_source_symtab_and_line ();
 
       if (cursal.symtab)
-	block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
-				   STATIC_BLOCK);
+	block = cursal.symtab->compunit ()->blockvector ()->static_block ();
+
       if (block != NULL)
-	*pc = BLOCK_ENTRY_PC (block);
+	*pc = block->entry_pc ();
     }
   else
-    *pc = BLOCK_ENTRY_PC (block);
+    *pc = block->entry_pc ();
 
   return block;
 }
 
-/* Call buildargv (via gdb_argv), set its result for S into *ARGVP but
-   calculate also the number of parsed arguments into *ARGCP.  If
-   buildargv has returned NULL then *ARGCP is set to zero.  */
-
-static void
-build_argc_argv (const char *s, int *argcp, char ***argvp)
-{
-  gdb_argv args (s);
-
-  *argcp = args.count ();
-  *argvp = args.release ();
-}
-
 /* String for 'set compile-args' and 'show compile-args'.  */
-static char *compile_args;
+static std::string compile_args =
+  /* Override flags possibly coming from DW_AT_producer.  */
+  "-O0 -gdwarf-4"
+  /* We use -fPIE Otherwise GDB would need to reserve space large enough for
+     any object file in the inferior in advance to get the final address when
+     to link the object file to and additionally the default system linker
+     script would need to be modified so that one can specify there the
+     absolute target address.
+     -fPIC is not used at is would require from GDB to generate .got.  */
+  " -fPIE"
+  /* We want warnings, except for some commonly happening for GDB commands.  */
+  " -Wall "
+  " -Wno-unused-but-set-variable"
+  " -Wno-unused-variable"
+  /* Override CU's possible -fstack-protector-strong.  */
+  " -fno-stack-protector";
 
-/* Parsed form of COMPILE_ARGS.  COMPILE_ARGS_ARGV is NULL terminated.  */
-static int compile_args_argc;
-static char **compile_args_argv;
+/* Parsed form of COMPILE_ARGS.  */
+static gdb_argv compile_args_argv;
 
 /* Implement 'set compile-args'.  */
 
 static void
 set_compile_args (const char *args, int from_tty, struct cmd_list_element *c)
 {
-  freeargv (compile_args_argv);
-  build_argc_argv (compile_args, &compile_args_argc, &compile_args_argv);
+  compile_args_argv = gdb_argv (compile_args.c_str ());
 }
 
 /* Implement 'show compile-args'.  */
@@ -528,28 +543,13 @@ static void
 show_compile_args (struct ui_file *file, int from_tty,
 		   struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Compile command command-line arguments "
-			    "are \"%s\".\n"),
-		    value);
-}
-
-/* Append ARGC and ARGV (as parsed by build_argc_argv) to *ARGCP and *ARGVP.
-   ARGCP+ARGVP can be zero+NULL and also ARGC+ARGV can be zero+NULL.  */
-
-static void
-append_args (int *argcp, char ***argvp, int argc, char **argv)
-{
-  int argi;
-
-  *argvp = XRESIZEVEC (char *, *argvp, (*argcp + argc + 1));
-
-  for (argi = 0; argi < argc; argi++)
-    (*argvp)[(*argcp)++] = xstrdup (argv[argi]);
-  (*argvp)[(*argcp)] = NULL;
+  gdb_printf (file, _("Compile command command-line arguments "
+		      "are \"%s\".\n"),
+	      value);
 }
 
 /* String for 'set compile-gcc' and 'show compile-gcc'.  */
-static char *compile_gcc;
+static std::string compile_gcc;
 
 /* Implement 'show compile-gcc'.  */
 
@@ -557,8 +557,8 @@ static void
 show_compile_gcc (struct ui_file *file, int from_tty,
 		  struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Compile command GCC driver filename is \"%s\".\n"),
-		    value);
+  gdb_printf (file, _("Compile command GCC driver filename is \"%s\".\n"),
+	      value);
 }
 
 /* Return DW_AT_producer parsed for get_selected_frame () (if any).
@@ -574,11 +574,11 @@ get_selected_pc_producer_options (void)
   struct compunit_symtab *symtab = find_pc_compunit_symtab (pc);
   const char *cs;
 
-  if (symtab == NULL || symtab->producer == NULL
-      || !startswith (symtab->producer, "GNU "))
+  if (symtab == NULL || symtab->producer () == NULL
+      || !startswith (symtab->producer (), "GNU "))
     return NULL;
 
-  cs = symtab->producer;
+  cs = symtab->producer ();
   while (*cs != 0 && *cs != '-')
     cs = skip_spaces (skip_to_space (cs));
   if (*cs != '-')
@@ -586,10 +586,10 @@ get_selected_pc_producer_options (void)
   return cs;
 }
 
-/* Filter out unwanted options from *ARGCP and ARGV.  */
+/* Filter out unwanted options from ARGV.  */
 
 static void
-filter_args (int *argcp, char **argv)
+filter_args (char **argv)
 {
   char **destv;
 
@@ -599,7 +599,6 @@ filter_args (int *argcp, char **argv)
       if (strcmp (*argv, "-fpreprocessed") == 0)
 	{
 	  xfree (*argv);
-	  (*argcp)--;
 	  continue;
 	}
       *destv++ = *argv;
@@ -627,35 +626,32 @@ filter_args (int *argcp, char **argv)
    appended last so as to override any of the arguments automatically
    generated above.  */
 
-static void
-get_args (const compile_instance *compiler, struct gdbarch *gdbarch,
-	  int *argcp, char ***argvp)
+static gdb_argv
+get_args (const compile_instance *compiler, struct gdbarch *gdbarch)
 {
   const char *cs_producer_options;
-  int argc_compiler;
-  char **argv_compiler;
+  gdb_argv result;
+
+  std::string gcc_options = gdbarch_gcc_target_options (gdbarch);
 
-  build_argc_argv (gdbarch_gcc_target_options (gdbarch).c_str (),
-		   argcp, argvp);
+  /* Make sure we have a non-empty set of options, otherwise GCC will
+     error out trying to look for a filename that is an empty string.  */
+  if (!gcc_options.empty ())
+    result = gdb_argv (gcc_options.c_str ());
 
   cs_producer_options = get_selected_pc_producer_options ();
   if (cs_producer_options != NULL)
     {
-      int argc_producer;
-      char **argv_producer;
+      gdb_argv argv_producer (cs_producer_options);
+      filter_args (argv_producer.get ());
 
-      build_argc_argv (cs_producer_options, &argc_producer, &argv_producer);
-      filter_args (&argc_producer, argv_producer);
-      append_args (argcp, argvp, argc_producer, argv_producer);
-      freeargv (argv_producer);
+      result.append (std::move (argv_producer));
     }
 
-  build_argc_argv (compiler->gcc_target_options ().c_str (),
-		   &argc_compiler, &argv_compiler);
-  append_args (argcp, argvp, argc_compiler, argv_compiler);
-  freeargv (argv_compiler);
+  result.append (gdb_argv (compiler->gcc_target_options ().c_str ()));
+  result.append (compile_args_argv);
 
-  append_args (argcp, argvp, compile_args_argc, compile_args_argv);
+  return result;
 }
 
 /* A helper function suitable for use as the "print_callback" in the
@@ -664,7 +660,7 @@ get_args (const compile_instance *compil
 static void
 print_callback (void *ignore, const char *message)
 {
-  fputs_filtered (message, gdb_stderr);
+  gdb_puts (message, gdb_stderr);
 }
 
 /* Process the compilation request.  On success it returns the object
@@ -677,13 +673,11 @@ compile_to_object (struct command_line *
 {
   const struct block *expr_block;
   CORE_ADDR trash_pc, expr_pc;
-  int argc;
-  char **argv;
   int ok;
   struct gdbarch *gdbarch = get_current_arch ();
   std::string triplet_rx;
 
-  if (!target_has_execution)
+  if (!target_has_execution ())
     error (_("The program must be running for the compile command to "\
 	     "work."));
 
@@ -691,13 +685,11 @@ compile_to_object (struct command_line *
   expr_pc = get_frame_address_in_block (get_selected_frame (NULL));
 
   /* Set up instance and context for the compiler.  */
-  if (current_language->la_get_compile_instance == NULL)
+  std::unique_ptr<compile_instance> compiler
+    = current_language->get_compile_instance ();
+  if (compiler == nullptr)
     error (_("No compiler support for language %s."),
-	   current_language->la_name);
-
-  compile_instance *compiler_instance
-    = current_language->la_get_compile_instance ();
-  std::unique_ptr<compile_instance> compiler (compiler_instance);
+	   current_language->name ());
   compiler->set_print_callback (print_callback, NULL);
   compiler->set_scope (scope);
   compiler->set_block (expr_block);
@@ -726,20 +718,20 @@ compile_to_object (struct command_line *
     error (_("Neither a simple expression, or a multi-line specified."));
 
   std::string code
-    = current_language->la_compute_program (compiler.get (), input, gdbarch,
-					    expr_block, expr_pc);
+    = current_language->compute_program (compiler.get (), input, gdbarch,
+					 expr_block, expr_pc);
   if (compile_debug)
-    fprintf_unfiltered (gdb_stdlog, "debug output:\n\n%s", code.c_str ());
+    gdb_printf (gdb_stdlog, "debug output:\n\n%s", code.c_str ());
 
   compiler->set_verbose (compile_debug);
 
-  if (compile_gcc[0] != 0)
+  if (!compile_gcc.empty ())
     {
       if (compiler->version () < GCC_FE_VERSION_1)
 	error (_("Command 'set compile-gcc' requires GCC version 6 or higher "
 		 "(libcc1 interface version 1 or higher)"));
 
-      compiler->set_driver_filename (compile_gcc);
+      compiler->set_driver_filename (compile_gcc.c_str ());
     }
   else
     {
@@ -747,17 +739,19 @@ compile_to_object (struct command_line *
       const char *arch_rx = gdbarch_gnu_triplet_regexp (gdbarch);
 
       /* Allow triplets with or without vendor set.  */
-      triplet_rx = std::string (arch_rx) + "(-[^-]*)?-" + os_rx;
+      triplet_rx = std::string (arch_rx) + "(-[^-]*)?-";
+      if (os_rx != nullptr)
+	triplet_rx += os_rx;
       compiler->set_triplet_regexp (triplet_rx.c_str ());
     }
 
   /* Set compiler command-line arguments.  */
-  get_args (compiler.get (), gdbarch, &argc, &argv);
-  gdb_argv argv_holder (argv);
+  gdb_argv argv_holder = get_args (compiler.get (), gdbarch);
+  int argc = argv_holder.count ();
+  char **argv = argv_holder.get ();
 
-  gdb::unique_xmalloc_ptr<char> error_message;
-  error_message.reset (compiler->set_arguments (argc, argv,
-						triplet_rx.c_str ()));
+  gdb::unique_xmalloc_ptr<char> error_message
+    = compiler->set_arguments (argc, argv, triplet_rx.c_str ());
 
   if (error_message != NULL)
     error ("%s", error_message.get ());
@@ -766,15 +760,15 @@ compile_to_object (struct command_line *
     {
       int argi;
 
-      fprintf_unfiltered (gdb_stdlog, "Passing %d compiler options:\n", argc);
+      gdb_printf (gdb_stdlog, "Passing %d compiler options:\n", argc);
       for (argi = 0; argi < argc; argi++)
-	fprintf_unfiltered (gdb_stdlog, "Compiler option %d: <%s>\n",
-			    argi, argv[argi]);
+	gdb_printf (gdb_stdlog, "Compiler option %d: <%s>\n",
+		    argi, argv[argi]);
     }
 
   compile_file_names fnames = get_new_file_names ();
 
-  gdb::optional<gdb::unlinker> source_remover;
+  std::optional<gdb::unlinker> source_remover;
 
   {
     gdb_file_up src = gdb_fopen_cloexec (fnames.source_file (), "w");
@@ -788,8 +782,12 @@ compile_to_object (struct command_line *
   }
 
   if (compile_debug)
-    fprintf_unfiltered (gdb_stdlog, "source file produced: %s\n\n",
-			fnames.source_file ());
+    gdb_printf (gdb_stdlog, "source file produced: %s\n\n",
+		fnames.source_file ());
+
+  /* If we don't do this, then GDB simply exits
+     when the compiler dies.  */
+  scoped_ignore_sigpipe ignore_sigpipe;
 
   /* Call the compiler and start the compilation process.  */
   compiler->set_source_file (fnames.source_file ());
@@ -798,8 +796,8 @@ compile_to_object (struct command_line *
     error (_("Compilation failed."));
 
   if (compile_debug)
-    fprintf_unfiltered (gdb_stdlog, "object file produced: %s\n\n",
-			fnames.object_file ());
+    gdb_printf (gdb_stdlog, "object file produced: %s\n\n",
+		fnames.object_file ());
 
   /* Keep the source file.  */
   source_remover->keep ();
@@ -822,14 +820,13 @@ void
 eval_compile_command (struct command_line *cmd, const char *cmd_string,
 		      enum compile_i_scope_types scope, void *scope_data)
 {
-  struct compile_module *compile_module;
-
   compile_file_names fnames = compile_to_object (cmd, cmd_string, scope);
 
   gdb::unlinker object_remover (fnames.object_file ());
   gdb::unlinker source_remover (fnames.source_file ());
 
-  compile_module = compile_object_load (fnames, scope, scope_data);
+  compile_module_up compile_module = compile_object_load (fnames, scope,
+							  scope_data);
   if (compile_module == NULL)
     {
       gdb_assert (scope == COMPILE_I_PRINT_ADDRESS_SCOPE);
@@ -842,7 +839,7 @@ eval_compile_command (struct command_lin
   source_remover.keep ();
   object_remover.keep ();
 
-  compile_object_run (compile_module);
+  compile_object_run (std::move (compile_module));
 }
 
 /* See compile/compile-internal.h.  */
@@ -924,13 +921,14 @@ compile_instance::set_triplet_regexp (co
 
 /* See compile-internal.h.  */
 
-char *
+gdb::unique_xmalloc_ptr<char>
 compile_instance::set_arguments (int argc, char **argv, const char *regexp)
 {
   if (version () >= GCC_FE_VERSION_1)
-    return FORWARD (set_arguments, argc, argv);
+    return gdb::unique_xmalloc_ptr<char> (FORWARD (set_arguments, argc, argv));
   else
-    return FORWARD (set_arguments_v0, regexp, argc, argv);
+    return gdb::unique_xmalloc_ptr<char> (FORWARD (set_arguments_v0, regexp,
+						   argc, argv));
 }
 
 /* See compile-internal.h.  */
@@ -957,16 +955,17 @@ compile_instance::compile (const char *f
 /* See compile.h.  */
 cmd_list_element *compile_cmd_element = nullptr;
 
+void _initialize_compile ();
 void
-_initialize_compile (void)
+_initialize_compile ()
 {
   struct cmd_list_element *c = NULL;
 
   compile_cmd_element = add_prefix_cmd ("compile", class_obscure,
 					compile_command, _("\
 Command to compile source code and inject it into the inferior."),
-		  &compile_command_list, "compile ", 1, &cmdlist);
-  add_com_alias ("expression", "compile", class_obscure, 0);
+		  &compile_command_list, 1, &cmdlist);
+  add_com_alias ("expression", compile_cmd_element, class_obscure, 0);
 
   const auto compile_opts = make_compile_options_def_group (nullptr);
 
@@ -1059,23 +1058,9 @@ String quoting is parsed like in shell,
   -mno-align-double \"-I/dir with a space/include\""),
 			  set_compile_args, show_compile_args, &setlist, &showlist);
 
-  /* Override flags possibly coming from DW_AT_producer.  */
-  compile_args = xstrdup ("-O0 -gdwarf-4"
-  /* We use -fPIE Otherwise GDB would need to reserve space large enough for
-     any object file in the inferior in advance to get the final address when
-     to link the object file to and additionally the default system linker
-     script would need to be modified so that one can specify there the
-     absolute target address.
-     -fPIC is not used at is would require from GDB to generate .got.  */
-			 " -fPIE"
-  /* We want warnings, except for some commonly happening for GDB commands.  */
-			 " -Wall "
-			 " -Wno-unused-but-set-variable"
-			 " -Wno-unused-variable"
-  /* Override CU's possible -fstack-protector-strong.  */
-			 " -fno-stack-protector"
-  );
-  set_compile_args (compile_args, 0, NULL);
+
+  /* Initialize compile_args_argv.  */
+  set_compile_args (compile_args.c_str (), 0, NULL);
 
   add_setshow_optional_filename_cmd ("compile-gcc", class_support,
 				     &compile_gcc,
@@ -1088,5 +1073,4 @@ It should be absolute filename of the gc
 If empty the default target triplet will be searched in $PATH."),
 				     NULL, show_compile_gcc, &setlist,
 				     &showlist);
-  compile_gcc = xstrdup ("");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-c.h ./gdb/compile/compile-c.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-c.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-c.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB compile C-language support.
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
 #ifndef COMPILE_COMPILE_C_H
 #define COMPILE_COMPILE_C_H
 
+#include "compile/compile.h"
 #include "gdbsupport/enum-flags.h"
 #include "gcc-c-plugin.h"
 
@@ -66,7 +67,7 @@ private:
    register number, where each element indicates if the corresponding
    register is needed to compute a local variable.  */
 
-extern gdb::unique_xmalloc_ptr<unsigned char>
+extern std::vector<bool>
   generate_c_for_variable_locations
      (compile_instance *compiler,
       string_file *stream,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-cplus.h ./gdb/compile/compile-cplus.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-cplus.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-cplus.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB compile C++ language support.
-   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+   Copyright (C) 2016-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
 #ifndef COMPILE_COMPILE_CPLUS_H
 #define COMPILE_COMPILE_CPLUS_H
 
+#include "compile/compile.h"
 #include "gdbsupport/enum-flags.h"
 #include "gcc-cp-plugin.h"
 #include "symtab.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-cplus-symbols.c ./gdb/compile/compile-cplus-symbols.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-cplus-symbols.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-cplus-symbols.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert symbols from GDB to GCC
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,10 +30,11 @@
 #include "value.h"
 #include "exceptions.h"
 #include "gdbtypes.h"
-#include "dwarf2loc.h"
+#include "dwarf2/loc.h"
 #include "cp-support.h"
 #include "gdbcmd.h"
 #include "compile-c.h"
+#include "inferior.h"
 
 /* Convert a given symbol, SYM, to the compiler's representation.
    INSTANCE is the compiler instance.  IS_GLOBAL is true if the
@@ -48,17 +49,17 @@ convert_one_symbol (compile_cplus_instan
 {
   /* Squash compiler warning.  */
   gcc_type sym_type = 0;
-  const char *filename = symbol_symtab (sym.symbol)->filename;
-  unsigned short line = SYMBOL_LINE (sym.symbol);
+  const char *filename = sym.symbol->symtab ()->filename;
+  unsigned int line = sym.symbol->line ();
 
   instance->error_symbol_once (sym.symbol);
 
-  if (SYMBOL_CLASS (sym.symbol) == LOC_LABEL)
+  if (sym.symbol->aclass () == LOC_LABEL)
     sym_type = 0;
   else
-    sym_type = instance->convert_type (SYMBOL_TYPE (sym.symbol));
+    sym_type = instance->convert_type (sym.symbol->type ());
 
-  if (SYMBOL_DOMAIN (sym.symbol) == STRUCT_DOMAIN)
+  if (sym.symbol->domain () == STRUCT_DOMAIN)
     {
       /* Nothing to do.  */
     }
@@ -70,38 +71,39 @@ convert_one_symbol (compile_cplus_instan
       std::string name;
       gdb::unique_xmalloc_ptr<char> symbol_name;
 
-      switch (SYMBOL_CLASS (sym.symbol))
+      switch (sym.symbol->aclass ())
 	{
 	case LOC_TYPEDEF:
-	  if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_TYPEDEF)
+	  if (sym.symbol->type ()->code () == TYPE_CODE_TYPEDEF)
 	    kind = GCC_CP_SYMBOL_TYPEDEF;
-	  else  if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_NAMESPACE)
+	  else  if (sym.symbol->type ()->code () == TYPE_CODE_NAMESPACE)
 	    return;
 	  break;
 
 	case LOC_LABEL:
 	  kind = GCC_CP_SYMBOL_LABEL;
-	  addr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+	  addr = sym.symbol->value_address ();
 	  break;
 
 	case LOC_BLOCK:
 	  {
 	    kind = GCC_CP_SYMBOL_FUNCTION;
-	    addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym.symbol));
-	    if (is_global && TYPE_GNU_IFUNC (SYMBOL_TYPE (sym.symbol)))
-	      addr = gnu_ifunc_resolve_addr (target_gdbarch (), addr);
+	    addr = sym.symbol->value_block()->start ();
+	    if (is_global && sym.symbol->type ()->is_gnu_ifunc ())
+	      addr = gnu_ifunc_resolve_addr (current_inferior ()->arch (),
+					     addr);
 	  }
 	  break;
 
 	case LOC_CONST:
-	  if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_ENUM)
+	  if (sym.symbol->type ()->code () == TYPE_CODE_ENUM)
 	    {
 	      /* Already handled by convert_enum.  */
 	      return;
 	    }
 	  instance->plugin ().build_constant
 	    (sym_type, sym.symbol->natural_name (),
-	     SYMBOL_VALUE (sym.symbol), filename, line);
+	     sym.symbol->value_longest (), filename, line);
 	  return;
 
 	case LOC_CONST_BYTES:
@@ -109,7 +111,7 @@ convert_one_symbol (compile_cplus_instan
 		 sym.symbol->print_name ());
 
 	case LOC_UNDEF:
-	  internal_error (__FILE__, __LINE__, _("LOC_UNDEF found for \"%s\"."),
+	  internal_error (_("LOC_UNDEF found for \"%s\"."),
 			  sym.symbol->print_name ());
 
 	case LOC_COMMON_BLOCK:
@@ -130,7 +132,7 @@ convert_one_symbol (compile_cplus_instan
 		     "be referenced from the current thread in "
 		     "compiled code."),
 		   sym.symbol->print_name ());
-	  /* FALLTHROUGH */
+	  [[fallthrough]];
 	case LOC_UNRESOLVED:
 	  /* 'symbol_name' cannot be used here as that one is used only for
 	     local variables from compile_dwarf_expr_to_c.
@@ -138,7 +140,7 @@ convert_one_symbol (compile_cplus_instan
 	     by their name.  */
 	  {
 	    struct value *val;
-	    struct frame_info *frame = nullptr;
+	    frame_info_ptr frame = nullptr;
 
 	    if (symbol_read_needs_frame (sym.symbol))
 	      {
@@ -150,13 +152,13 @@ convert_one_symbol (compile_cplus_instan
 	      }
 
 	    val = read_var_value (sym.symbol, sym.block, frame);
-	    if (VALUE_LVAL (val) != lval_memory)
+	    if (val->lval () != lval_memory)
 	      error (_("Symbol \"%s\" cannot be used for compilation "
 		       "evaluation as its address has not been found."),
 		     sym.symbol->print_name ());
 
 	    kind = GCC_CP_SYMBOL_VARIABLE;
-	    addr = value_address (val);
+	    addr = val->address ();
 	  }
 	  break;
 
@@ -173,7 +175,7 @@ convert_one_symbol (compile_cplus_instan
 
 	case LOC_STATIC:
 	  kind = GCC_CP_SYMBOL_VARIABLE;
-	  addr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+	  addr = sym.symbol->value_address ();
 	  break;
 
 	case LOC_FINAL_VALUE:
@@ -190,7 +192,7 @@ convert_one_symbol (compile_cplus_instan
 	    {
 	      compile_scope scope
 		= instance->new_scope (sym.symbol->natural_name (),
-				       SYMBOL_TYPE (sym.symbol));
+				       sym.symbol->type ());
 	      if (scope.nested_type () != GCC_TYPE_NONE)
 		{
 		  /* We found a symbol for this type that was defined inside
@@ -208,7 +210,7 @@ convert_one_symbol (compile_cplus_instan
 
 	  /* Define the decl.  */
 	  instance->plugin ().build_decl
-	    ("variable", name.c_str (), kind, sym_type,
+	    ("variable", name.c_str (), kind.raw (), sym_type,
 	     symbol_name.get (), addr, filename, line);
 
 	  /* Pop scope for non-local symbols.  */
@@ -225,7 +227,7 @@ convert_one_symbol (compile_cplus_instan
 static void
 convert_symbol_sym (compile_cplus_instance *instance,
 		    const char *identifier, struct block_symbol sym,
-		    domain_enum domain)
+		    domain_search_flags domain)
 {
   /* If we found a symbol and it is not in the  static or global
      scope, then we should first convert any static or global scope
@@ -239,7 +241,9 @@ convert_symbol_sym (compile_cplus_instan
      }
   */
 
-  const struct block *static_block = block_static_block (sym.block);
+  const struct block *static_block = nullptr;
+  if (sym.block != nullptr)
+    static_block = sym.block->static_block ();
   /* STATIC_BLOCK is NULL if FOUND_BLOCK is the global block.  */
   bool is_local_symbol = (sym.block != static_block && static_block != nullptr);
   if (is_local_symbol)
@@ -250,20 +254,20 @@ convert_symbol_sym (compile_cplus_instan
       /* If the outer symbol is in the static block, we ignore it, as
 	 it cannot be referenced.  */
       if (global_sym.symbol != nullptr
-	  && global_sym.block != block_static_block (global_sym.block))
+	  && global_sym.block != global_sym.block->static_block ())
 	{
 	  if (compile_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"gcc_convert_symbol \"%s\": global symbol\n",
-				identifier);
+	    gdb_printf (gdb_stdlog,
+			"gcc_convert_symbol \"%s\": global symbol\n",
+			identifier);
 	  convert_one_symbol (instance, global_sym, true, false);
 	}
     }
 
   if (compile_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"gcc_convert_symbol \"%s\": local symbol\n",
-			identifier);
+    gdb_printf (gdb_stdlog,
+		"gcc_convert_symbol \"%s\": local symbol\n",
+		identifier);
   convert_one_symbol (instance, sym, false, is_local_symbol);
 }
 
@@ -281,41 +285,41 @@ convert_symbol_bmsym (compile_cplus_inst
   gcc_type sym_type;
   CORE_ADDR addr;
 
-  addr = MSYMBOL_VALUE_ADDRESS (objfile, msym);
+  addr = msym->value_address (objfile);
 
   /* Conversion copied from write_exp_msymbol.  */
-  switch (MSYMBOL_TYPE (msym))
+  switch (msym->type ())
     {
     case mst_text:
     case mst_file_text:
     case mst_solib_trampoline:
-      type = objfile_type (objfile)->nodebug_text_symbol;
+      type = builtin_type (objfile)->nodebug_text_symbol;
       kind = GCC_CP_SYMBOL_FUNCTION;
       break;
 
     case mst_text_gnu_ifunc:
       /* nodebug_text_gnu_ifunc_symbol would cause:
 	 function return type cannot be function  */
-      type = objfile_type (objfile)->nodebug_text_symbol;
+      type = builtin_type (objfile)->nodebug_text_symbol;
       kind = GCC_CP_SYMBOL_FUNCTION;
-      addr = gnu_ifunc_resolve_addr (target_gdbarch (), addr);
+      addr = gnu_ifunc_resolve_addr (current_inferior ()->arch (), addr);
       break;
 
     case mst_data:
     case mst_file_data:
     case mst_bss:
     case mst_file_bss:
-      type = objfile_type (objfile)->nodebug_data_symbol;
+      type = builtin_type (objfile)->nodebug_data_symbol;
       kind = GCC_CP_SYMBOL_VARIABLE;
       break;
 
     case mst_slot_got_plt:
-      type = objfile_type (objfile)->nodebug_got_plt_symbol;
+      type = builtin_type (objfile)->nodebug_got_plt_symbol;
       kind = GCC_CP_SYMBOL_FUNCTION;
       break;
 
     default:
-      type = objfile_type (objfile)->nodebug_unknown_symbol;
+      type = builtin_type (objfile)->nodebug_unknown_symbol;
       kind = GCC_CP_SYMBOL_VARIABLE;
       break;
     }
@@ -323,7 +327,7 @@ convert_symbol_bmsym (compile_cplus_inst
   sym_type = instance->convert_type (type);
   instance->plugin ().push_namespace ("");
   instance->plugin ().build_decl
-    ("minsym", msym->natural_name (), kind, sym_type, nullptr, addr,
+    ("minsym", msym->natural_name (), kind.raw (), sym_type, nullptr, addr,
      nullptr, 0);
   instance->plugin ().pop_binding_level ("");
 }
@@ -337,8 +341,8 @@ gcc_cplus_convert_symbol (void *datum,
 			  const char *identifier)
 {
   if (compile_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"got oracle request for \"%s\"\n", identifier);
+    gdb_printf (gdb_stdlog,
+		"got oracle request for \"%s\"\n", identifier);
 
   bool found = false;
   compile_cplus_instance *instance = (compile_cplus_instance *) datum;
@@ -351,12 +355,12 @@ gcc_cplus_convert_symbol (void *datum,
 	 This will find variables in the current scope.  */
 
       struct block_symbol sym
-	= lookup_symbol (identifier, instance->block (), VAR_DOMAIN, nullptr);
+	= lookup_symbol (identifier, instance->block (), SEARCH_VFT, nullptr);
 
       if (sym.symbol != nullptr)
 	{
 	  found = true;
-	  convert_symbol_sym (instance, identifier, sym, VAR_DOMAIN);
+	  convert_symbol_sym (instance, identifier, sym, SEARCH_VFT);
 	}
 
       /* Then use linespec.c's multi-symbol search.  This should find
@@ -364,7 +368,7 @@ gcc_cplus_convert_symbol (void *datum,
 
       symbol_searcher searcher;
       searcher.find_all_symbols (identifier, current_language,
-				 ALL_DOMAIN, nullptr, nullptr);
+				 SEARCH_ALL, nullptr, nullptr);
 
       /* Convert any found symbols.  */
       for (const auto &it : searcher.matching_symbols ())
@@ -374,7 +378,7 @@ gcc_cplus_convert_symbol (void *datum,
 	    {
 	      found = true;
 	      convert_symbol_sym (instance, identifier, it,
-				  SYMBOL_DOMAIN (it.symbol));
+				  to_search_flags (it.symbol->domain ()));
 	    }
 	}
 
@@ -396,18 +400,18 @@ gcc_cplus_convert_symbol (void *datum,
     }
 
   if (compile_debug && !found)
-    fprintf_unfiltered (gdb_stdlog,
-			"gcc_convert_symbol \"%s\": lookup_symbol failed\n",
-			identifier);
+    gdb_printf (gdb_stdlog,
+		"gcc_convert_symbol \"%s\": lookup_symbol failed\n",
+		identifier);
 
   if (compile_debug)
     {
       if (found)
-	fprintf_unfiltered (gdb_stdlog, "found type for %s\n", identifier);
+	gdb_printf (gdb_stdlog, "found type for %s\n", identifier);
       else
 	{
-	  fprintf_unfiltered (gdb_stdlog, "did not find type for %s\n",
-			      identifier);
+	  gdb_printf (gdb_stdlog, "did not find type for %s\n",
+		      identifier);
 	}
     }
 
@@ -425,25 +429,27 @@ gcc_cplus_symbol_address (void *datum, s
   int found = 0;
 
   if (compile_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"got oracle request for address of %s\n", identifier);
+    gdb_printf (gdb_stdlog,
+		"got oracle request for address of %s\n", identifier);
 
   /* We can't allow exceptions to escape out of this callback.  Safest
      is to simply emit a gcc error.  */
   try
     {
       struct symbol *sym
-	= lookup_symbol (identifier, nullptr, VAR_DOMAIN, nullptr).symbol;
+	= lookup_symbol (identifier, nullptr, SEARCH_FUNCTION_DOMAIN,
+			 nullptr).symbol;
 
-      if (sym != nullptr && SYMBOL_CLASS (sym) == LOC_BLOCK)
+      if (sym != nullptr)
 	{
 	  if (compile_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"gcc_symbol_address \"%s\": full symbol\n",
-				identifier);
-	  result = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
-	  if (TYPE_GNU_IFUNC (SYMBOL_TYPE (sym)))
-	    result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
+	    gdb_printf (gdb_stdlog,
+			"gcc_symbol_address \"%s\": full symbol\n",
+			identifier);
+	  result = sym->value_block ()->start ();
+	  if (sym->type ()->is_gnu_ifunc ())
+	    result = gnu_ifunc_resolve_addr (current_inferior ()->arch (),
+					     result);
 	  found = 1;
 	}
       else
@@ -454,13 +460,14 @@ gcc_cplus_symbol_address (void *datum, s
 	  if (msym.minsym != nullptr)
 	    {
 	      if (compile_debug)
-		fprintf_unfiltered (gdb_stdlog,
-				    "gcc_symbol_address \"%s\": minimal "
-				    "symbol\n",
-				    identifier);
-	      result = BMSYMBOL_VALUE_ADDRESS (msym);
-	      if (MSYMBOL_TYPE (msym.minsym) == mst_text_gnu_ifunc)
-		result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
+		gdb_printf (gdb_stdlog,
+			    "gcc_symbol_address \"%s\": minimal "
+			    "symbol\n",
+			    identifier);
+	      result = msym.value_address ();
+	      if (msym.minsym->type () == mst_text_gnu_ifunc)
+		result = gnu_ifunc_resolve_addr (current_inferior ()->arch (),
+						 result);
 	      found = 1;
 	    }
 	}
@@ -472,17 +479,17 @@ gcc_cplus_symbol_address (void *datum, s
     }
 
   if (compile_debug && !found)
-    fprintf_unfiltered (gdb_stdlog,
-			"gcc_symbol_address \"%s\": failed\n",
-			identifier);
+    gdb_printf (gdb_stdlog,
+		"gcc_symbol_address \"%s\": failed\n",
+		identifier);
 
   if (compile_debug)
     {
       if (found)
-	fprintf_unfiltered (gdb_stdlog, "found address for %s!\n", identifier);
+	gdb_printf (gdb_stdlog, "found address for %s!\n", identifier);
       else
-	fprintf_unfiltered (gdb_stdlog,
-			    "did not find address for %s\n", identifier);
+	gdb_printf (gdb_stdlog,
+		    "did not find address for %s\n", identifier);
     }
 
   return result;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-cplus-types.c ./gdb/compile/compile-cplus-types.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-cplus-types.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-cplus-types.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert types from GDB to GCC
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -73,9 +73,10 @@ compile_cplus_instance::decl_name (const
 static enum gcc_cp_symbol_kind
 get_field_access_flag (const struct type *type, int num)
 {
-  if (TYPE_FIELD_PROTECTED (type, num))
+  field &fld = type->field (num);
+  if (fld.is_protected ())
     return GCC_CP_ACCESS_PROTECTED;
-  else if (TYPE_FIELD_PRIVATE (type, num))
+  else if (fld.is_private ())
     return GCC_CP_ACCESS_PRIVATE;
 
   /* GDB assumes everything else is public.  */
@@ -88,10 +89,10 @@ get_field_access_flag (const struct type
 enum gcc_cp_symbol_kind
 get_method_access_flag (const struct type *type, int fni, int num)
 {
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT);
+  gdb_assert (type->code () == TYPE_CODE_STRUCT);
 
   /* If this type was not declared a class, everything is public.  */
-  if (!TYPE_DECLARED_CLASS (type))
+  if (!type->is_declared_class ())
     return GCC_CP_ACCESS_PUBLIC;
 
   /* Otherwise, read accessibility from the fn_field.  */
@@ -153,7 +154,7 @@ type_name_to_scope (const char *type_nam
 
       /* Look up the resulting name.  */
       struct block_symbol bsymbol
-	= lookup_symbol (lookup_name.c_str (), block, VAR_DOMAIN, nullptr);
+	= lookup_symbol (lookup_name.c_str (), block, SEARCH_VFT, nullptr);
 
       if (bsymbol.symbol != nullptr)
 	{
@@ -161,7 +162,7 @@ type_name_to_scope (const char *type_nam
 
 	  scope.push_back (comp);
 
-	  if (TYPE_CODE (SYMBOL_TYPE (bsymbol.symbol)) != TYPE_CODE_NAMESPACE)
+	  if (bsymbol.symbol->type ()->code () != TYPE_CODE_NAMESPACE)
 	    {
 	      /* We're done.  */
 	      break;
@@ -178,8 +179,7 @@ type_name_to_scope (const char *type_nam
 	      /* This shouldn't happen since we are not attempting to
 		 loop over user input.  This name is generated by GDB
 		 from debug info.  */
-	      internal_error (__FILE__, __LINE__,
-			      _("malformed TYPE_NAME during parsing"));
+	      internal_error (_("malformed TYPE_NAME during parsing"));
 	    }
 	}
     }
@@ -258,8 +258,8 @@ compile_cplus_instance::enter_scope (com
     {
       if (debug_compile_cplus_scopes)
 	{
-	  fprintf_unfiltered (gdb_stdlog, "entering new scope %s\n",
-			      host_address_to_string (&m_scopes.back ()));
+	  gdb_printf (gdb_stdlog, "entering new scope %s\n",
+		      host_address_to_string (&m_scopes.back ()));
 	}
 
       /* Push the global namespace. */
@@ -271,7 +271,7 @@ compile_cplus_instance::enter_scope (com
 	(m_scopes.back ().begin (), m_scopes.back ().end () - 1,
 	 [this] (const scope_component &comp)
 	 {
-	  gdb_assert (TYPE_CODE (SYMBOL_TYPE (comp.bsymbol.symbol))
+	  gdb_assert (comp.bsymbol.symbol->type ()->code ()
 		      == TYPE_CODE_NAMESPACE);
 
 	  const char *ns = (comp.name == CP_ANONYMOUS_NAMESPACE_STR ? nullptr
@@ -284,8 +284,8 @@ compile_cplus_instance::enter_scope (com
     {
       if (debug_compile_cplus_scopes)
 	{
-	  fprintf_unfiltered (gdb_stdlog, "staying in current scope -- "
-			      "scopes are identical\n");
+	  gdb_printf (gdb_stdlog, "staying in current scope -- "
+		      "scopes are identical\n");
 	}
     }
 }
@@ -305,15 +305,15 @@ compile_cplus_instance::leave_scope ()
     {
       if (debug_compile_cplus_scopes)
 	{
-	  fprintf_unfiltered (gdb_stdlog, "leaving scope %s\n",
-			      host_address_to_string (&current));
+	  gdb_printf (gdb_stdlog, "leaving scope %s\n",
+		      host_address_to_string (&current));
 	}
 
       /* Pop namespaces.  */
       std::for_each
 	(current.begin (),current.end () - 1,
 	 [this] (const scope_component &comp) {
-	  gdb_assert (TYPE_CODE (SYMBOL_TYPE (comp.bsymbol.symbol))
+	  gdb_assert (comp.bsymbol.symbol->type ()->code ()
 		      == TYPE_CODE_NAMESPACE);
 	  this->plugin ().pop_binding_level (comp.name.c_str ());
 	});
@@ -324,8 +324,8 @@ compile_cplus_instance::leave_scope ()
   else
     {
       if (debug_compile_cplus_scopes)
-	fprintf_unfiltered (gdb_stdlog,
-			    "identical scopes -- not leaving scope\n");
+	gdb_printf (gdb_stdlog,
+		    "identical scopes -- not leaving scope\n");
     }
 }
 
@@ -345,14 +345,14 @@ compile_cplus_instance::new_scope (const
 	 unqualified name of the type to process.  */
       scope_component &comp = scope.back ();
 
-      if (!types_equal (type, SYMBOL_TYPE (comp.bsymbol.symbol))
+      if (!types_equal (type, comp.bsymbol.symbol->type ())
 	  && (m_scopes.empty ()
 	      || (m_scopes.back ().back ().bsymbol.symbol
 		  != comp.bsymbol.symbol)))
 	{
 	  /* The type is defined inside another class(es).  Convert that
 	     type instead of defining this type.  */
-	  convert_type (SYMBOL_TYPE (comp.bsymbol.symbol));
+	  convert_type (comp.bsymbol.symbol->type ());
 
 	  /* If the original type (passed in to us) is defined in a nested
 	     class, the previous call will give us that type's gcc_type.
@@ -364,7 +364,7 @@ compile_cplus_instance::new_scope (const
     }
   else
     {
-      if (TYPE_NAME (type) == nullptr)
+      if (type->name () == nullptr)
 	{
 	  /* Anonymous type  */
 
@@ -383,8 +383,8 @@ compile_cplus_instance::new_scope (const
 	{
 	  scope_component comp
 	    = {
-	        decl_name (TYPE_NAME (type)).get (),
-		lookup_symbol (TYPE_NAME (type), block (), VAR_DOMAIN, nullptr)
+		decl_name (type->name ()).get (),
+		lookup_symbol (type->name (), block (), SEARCH_VFT, nullptr)
 	      };
 	  scope.push_back (comp);
 	}
@@ -410,10 +410,10 @@ static gcc_type
 compile_cplus_convert_reference (compile_cplus_instance *instance,
 				 struct type *type)
 {
-  gcc_type target = instance->convert_type (TYPE_TARGET_TYPE (type));
+  gcc_type target = instance->convert_type (type->target_type ());
 
   enum gcc_cp_ref_qualifiers quals = GCC_CP_REF_QUAL_NONE;
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_REF:
       quals = GCC_CP_REF_QUAL_LVALUE;
@@ -442,7 +442,7 @@ static gcc_type
 compile_cplus_convert_pointer (compile_cplus_instance *instance,
 			       struct type *type)
 {
-  gcc_type target = instance->convert_type (TYPE_TARGET_TYPE (type));
+  gcc_type target = instance->convert_type (type->target_type ());
 
   return instance->convert_pointer_base (target);
 }
@@ -453,10 +453,10 @@ static gcc_type
 compile_cplus_convert_array (compile_cplus_instance *instance,
 			     struct type *type)
 {
-  struct type *range = TYPE_INDEX_TYPE (type);
-  gcc_type element_type = instance->convert_type (TYPE_TARGET_TYPE (type));
+  struct type *range = type->index_type ();
+  gcc_type element_type = instance->convert_type (type->target_type ());
 
-  if (TYPE_LOW_BOUND_KIND (range) != PROP_CONST)
+  if (!range->bounds ()->low.is_constant ())
     {
       const char *s = _("array type with non-constant"
 			" lower bound is not supported");
@@ -464,7 +464,7 @@ compile_cplus_convert_array (compile_cpl
       return instance->plugin ().error (s);
     }
 
-  if (TYPE_LOW_BOUND (range) != 0)
+  if (range->bounds ()->low.const_val () != 0)
     {
       const char *s = _("cannot convert array type with "
 			"non-zero lower bound to C");
@@ -472,10 +472,10 @@ compile_cplus_convert_array (compile_cpl
       return instance->plugin ().error (s);
     }
 
-  if (TYPE_HIGH_BOUND_KIND (range) == PROP_LOCEXPR
-      || TYPE_HIGH_BOUND_KIND (range) == PROP_LOCLIST)
+  if (range->bounds ()->high.kind () == PROP_LOCEXPR
+      || range->bounds ()->high.kind () == PROP_LOCLIST)
     {
-      if (TYPE_VECTOR (type))
+      if (type->is_vector ())
 	{
 	  const char *s = _("variably-sized vector type is not supported");
 
@@ -483,7 +483,7 @@ compile_cplus_convert_array (compile_cpl
 	}
 
       std::string upper_bound
-	= c_get_range_decl_name (&TYPE_RANGE_DATA (range)->high);
+	= c_get_range_decl_name (&range->bounds ()->high);
       return instance->plugin ().build_vla_array_type (element_type,
 					     upper_bound.c_str ());
     }
@@ -491,7 +491,7 @@ compile_cplus_convert_array (compile_cpl
     {
       LONGEST low_bound, high_bound, count;
 
-      if (get_array_bounds (type, &low_bound, &high_bound) == 0)
+      if (!get_array_bounds (type, &low_bound, &high_bound))
 	count = -1;
       else
 	{
@@ -499,7 +499,7 @@ compile_cplus_convert_array (compile_cpl
 	  count = high_bound + 1;
 	}
 
-      if (TYPE_VECTOR (type))
+      if (type->is_vector ())
 	return instance->plugin ().build_vector_type (element_type, count);
 
       return instance->plugin ().build_array_type (element_type, count);
@@ -515,13 +515,13 @@ compile_cplus_convert_typedef (compile_c
 			       struct type *type,
 			       enum gcc_cp_symbol_kind nested_access)
 {
-  compile_scope scope = instance->new_scope (TYPE_NAME (type), type);
+  compile_scope scope = instance->new_scope (type->name (), type);
 
   if (scope.nested_type () != GCC_TYPE_NONE)
     return scope.nested_type ();
 
   gdb::unique_xmalloc_ptr<char> name
-    = compile_cplus_instance::decl_name (TYPE_NAME (type));
+    = compile_cplus_instance::decl_name (type->name ());
 
   /* Make sure the scope for this type has been pushed.  */
   instance->enter_scope (std::move (scope));
@@ -580,12 +580,12 @@ static void
 compile_cplus_convert_struct_or_union_members
   (compile_cplus_instance *instance, struct type *type, gcc_type comp_type)
 {
-  for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); ++i)
+  for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); ++i)
     {
-      const char *field_name = TYPE_FIELD_NAME (type, i);
+      const char *field_name = type->field (i).name ();
 
-      if (TYPE_FIELD_IGNORE (type, i)
-	  || TYPE_FIELD_ARTIFICIAL (type, i))
+      if (type->field (i).is_ignored ()
+	  || type->field (i).is_artificial ())
 	continue;
 
       /* GDB records unnamed/anonymous fields with empty string names.  */
@@ -593,17 +593,17 @@ compile_cplus_convert_struct_or_union_me
 	field_name = nullptr;
 
       gcc_type field_type
-	= instance->convert_type (TYPE_FIELD_TYPE (type, i));
+	= instance->convert_type (type->field (i).type ());
 
-      if (field_is_static (&TYPE_FIELD (type, i)))
+      if (type->field (i).is_static ())
 	{
 	  CORE_ADDR physaddr;
 
-	  switch (TYPE_FIELD_LOC_KIND (type, i))
+	  switch (type->field (i).loc_kind ())
 	    {
 	    case FIELD_LOC_KIND_PHYSADDR:
 	      {
-		physaddr = TYPE_FIELD_STATIC_PHYSADDR (type, i);
+		physaddr = type->field (i).loc_physaddr ();
 
 		instance->plugin ().build_decl
 		  ("field physaddr", field_name,
@@ -614,10 +614,10 @@ compile_cplus_convert_struct_or_union_me
 
 	    case FIELD_LOC_KIND_PHYSNAME:
 	      {
-		const char *physname = TYPE_FIELD_STATIC_PHYSNAME (type, i);
+		const char *physname = type->field (i).loc_physname ();
 		struct block_symbol sym
 		  = lookup_symbol (physname, instance->block (),
-				   VAR_DOMAIN, nullptr);
+				   SEARCH_VFT, nullptr);
 
 		if (sym.symbol == nullptr)
 		  {
@@ -625,10 +625,10 @@ compile_cplus_convert_struct_or_union_me
 		       we can do but ignore this member.  */
 		    continue;
 		  }
-		const char *filename = symbol_symtab (sym.symbol)->filename;
-		unsigned int line = SYMBOL_LINE (sym.symbol);
+		const char *filename = sym.symbol->symtab ()->filename;
+		unsigned int line = sym.symbol->line ();
 
-		physaddr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+		physaddr = sym.symbol->value_address ();
 		instance->plugin ().build_decl
 		  ("field physname", field_name,
 		   (GCC_CP_SYMBOL_VARIABLE| get_field_access_flag (type, i)),
@@ -643,16 +643,16 @@ compile_cplus_convert_struct_or_union_me
 	}
       else
 	{
-	  unsigned long bitsize = TYPE_FIELD_BITSIZE (type, i);
+	  unsigned long bitsize = type->field (i).bitsize ();
 	  enum gcc_cp_symbol_kind field_flags = GCC_CP_SYMBOL_FIELD
 	    | get_field_access_flag (type, i);
 
 	  if (bitsize == 0)
-	    bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, i));
+	    bitsize = 8 * type->field (i).type ()->length ();
 
 	  instance->plugin ().build_field
 	    (field_name, field_type, field_flags, bitsize,
-	     TYPE_FIELD_BITPOS (type, i));
+	     type->field (i).loc_bitpos ());
 	}
     }
 }
@@ -668,7 +668,7 @@ compile_cplus_convert_method (compile_cp
      type and corresponding qualifier flags.  */
   gcc_type func_type = compile_cplus_convert_func (instance, method_type, true);
   gcc_type class_type = instance->convert_type (parent_type);
-  gcc_cp_qualifiers_flags quals = (enum gcc_cp_qualifiers) 0;
+  gcc_cp_qualifiers_flags quals = 0;
 
   if (TYPE_CONST (method_type))
     quals |= GCC_CP_QUALIFIER_CONST;
@@ -681,7 +681,7 @@ compile_cplus_convert_method (compile_cp
   gcc_cp_ref_qualifiers_flags rquals = GCC_CP_REF_QUAL_NONE;
 
   return instance->plugin ().build_method_type
-    (class_type, func_type, quals, rquals);
+    (class_type, func_type, quals.raw (), rquals.raw ());
 }
 
 /* Convert a member or method pointer represented by TYPE.  */
@@ -697,7 +697,7 @@ compile_cplus_convert_memberptr (compile
 
   gcc_type class_type = instance->convert_type (containing_class);
   gcc_type member_type
-    = instance->convert_type (TYPE_TARGET_TYPE (type));
+    = instance->convert_type (type->target_type ());
 
   return instance->plugin ().build_pointer_to_member_type
     (class_type, member_type);
@@ -729,7 +729,7 @@ compile_cplus_convert_struct_or_union_me
 	  gcc_type method_type;
 	  struct block_symbol sym
 	    = lookup_symbol (TYPE_FN_FIELD_PHYSNAME (methods, j),
-			     instance->block (), VAR_DOMAIN, nullptr);
+			     instance->block (), SEARCH_VFT, nullptr);
 
 	  if (sym.symbol == nullptr)
 	    {
@@ -745,7 +745,7 @@ compile_cplus_convert_struct_or_union_me
 		     (sym_kind
 		      | get_method_access_flag (type, i, j)
 		      | GCC_CP_FLAG_VIRTUAL_FUNCTION
-		      | GCC_CP_FLAG_PURE_VIRTUAL_FUNCTION),
+		      | GCC_CP_FLAG_PURE_VIRTUAL_FUNCTION).raw (),
 		     method_type, nullptr, 0, nullptr, 0);
 		  continue;
 		}
@@ -764,9 +764,9 @@ compile_cplus_convert_struct_or_union_me
 	      continue;
 	    }
 
-	  const char *filename = symbol_symtab (sym.symbol)->filename;
-	  unsigned int line = SYMBOL_LINE (sym.symbol);
-	  CORE_ADDR address = BLOCK_START (SYMBOL_BLOCK_VALUE (sym.symbol));
+	  const char *filename = sym.symbol->symtab ()->filename;
+	  unsigned int line = sym.symbol->line ();
+	  CORE_ADDR address = sym.symbol->value_block()->start ();
 	  const char *kind;
 
 	  if (TYPE_FN_FIELD_STATIC_P (methods, j))
@@ -787,7 +787,7 @@ compile_cplus_convert_struct_or_union_me
 
 	  instance->plugin ().build_decl
 	    (kind, overloaded_name.get (),
-	     sym_kind | get_method_access_flag (type, i, j),
+	     (sym_kind | get_method_access_flag (type, i, j)).raw (),
 	     method_type, nullptr, address, filename, line);
 	}
     }
@@ -803,14 +803,14 @@ compile_cplus_convert_struct_or_union (c
 				       enum gcc_cp_symbol_kind nested_access)
 {
   const char *filename = nullptr;
-  unsigned short line = 0;
+  unsigned int line = 0;
 
   /* Get the decl name of this type.  */
   gdb::unique_xmalloc_ptr<char> name
-    = compile_cplus_instance::decl_name (TYPE_NAME (type));
+    = compile_cplus_instance::decl_name (type->name ());
 
   /* Create a new scope for TYPE.  */
-  compile_scope scope = instance->new_scope (TYPE_NAME (type), type);
+  compile_scope scope = instance->new_scope (type->name (), type);
 
   if (scope.nested_type () != GCC_TYPE_NONE)
     {
@@ -826,59 +826,55 @@ compile_cplus_convert_struct_or_union (c
      table.  This lets recursive types work.  */
 
   gcc_decl resuld;
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+  if (type->code () == TYPE_CODE_STRUCT)
     {
-      const char *what = TYPE_DECLARED_CLASS (type) ? "struct" : "class";
+      const char *what = type->is_declared_class () ? "class" : "struct";
 
       resuld = instance->plugin ().build_decl
 	(what, name.get (), (GCC_CP_SYMBOL_CLASS | nested_access
-			     | (TYPE_DECLARED_CLASS (type)
+			     | (type->is_declared_class ()
 				? GCC_CP_FLAG_CLASS_NOFLAG
 				: GCC_CP_FLAG_CLASS_IS_STRUCT)),
 	 0, nullptr, 0, filename, line);
     }
   else
     {
-      gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION);
+      gdb_assert (type->code () == TYPE_CODE_UNION);
       resuld = instance->plugin ().build_decl
 	("union", name.get (), GCC_CP_SYMBOL_UNION | nested_access,
 	 0, nullptr, 0, filename, line);
     }
 
   gcc_type result;
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+  if (type->code () == TYPE_CODE_STRUCT)
     {
-      struct gcc_vbase_array bases;
       int num_baseclasses = TYPE_N_BASECLASSES (type);
+      std::vector<gcc_type> elements (num_baseclasses);
+      std::vector<enum gcc_cp_symbol_kind> flags (num_baseclasses);
 
-      memset (&bases, 0, sizeof (bases));
+      struct gcc_vbase_array bases {};
+      bases.elements = elements.data ();
+      bases.flags = flags.data ();
+      bases.n_elements = num_baseclasses;
 
-      if (num_baseclasses > 0)
+      for (int i = 0; i < num_baseclasses; ++i)
 	{
-	  bases.elements = XNEWVEC (gcc_type, num_baseclasses);
-	  bases.flags = XNEWVEC (enum gcc_cp_symbol_kind, num_baseclasses);
-	  bases.n_elements = num_baseclasses;
-	  for (int i = 0; i < num_baseclasses; ++i)
-	    {
-	      struct type *base_type = TYPE_BASECLASS (type, i);
+	  struct type *base_type = TYPE_BASECLASS (type, i);
 
-	      bases.flags[i] = GCC_CP_SYMBOL_BASECLASS
-		| get_field_access_flag (type, i)
-		| (BASETYPE_VIA_VIRTUAL (type, i)
-		   ? GCC_CP_FLAG_BASECLASS_VIRTUAL
-		   : GCC_CP_FLAG_BASECLASS_NOFLAG);
-	      bases.elements[i] = instance->convert_type (base_type);
-	    }
+	  bases.flags[i] = (GCC_CP_SYMBOL_BASECLASS
+			    | get_field_access_flag (type, i)
+			    | (BASETYPE_VIA_VIRTUAL (type, i)
+			       ? GCC_CP_FLAG_BASECLASS_VIRTUAL
+			       : GCC_CP_FLAG_BASECLASS_NOFLAG));
+	  bases.elements[i] = instance->convert_type (base_type);
 	}
 
       result = instance->plugin ().start_class_type
 	(name.get (), resuld, &bases, filename, line);
-      xfree (bases.flags);
-      xfree (bases.elements);
     }
   else
     {
-      gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION);
+      gdb_assert (type->code () == TYPE_CODE_UNION);
       result = instance->plugin ().start_class_type
 	(name.get (), resuld, nullptr, filename, line);
     }
@@ -895,7 +891,7 @@ compile_cplus_convert_struct_or_union (c
   compile_cplus_convert_struct_or_union_members (instance, type, result);
 
   /* All finished.  */
-  instance->plugin ().finish_class_type (name.get (), TYPE_LENGTH (type));
+  instance->plugin ().finish_class_type (name.get (), type->length ());
 
   /* Pop all scopes.  */
   instance->leave_scope ();
@@ -913,7 +909,7 @@ compile_cplus_convert_enum (compile_cplu
   bool scoped_enum_p = false;
 
   /* Create a new scope for this type.  */
-  compile_scope scope = instance->new_scope (TYPE_NAME (type), type);
+  compile_scope scope = instance->new_scope (type->name (), type);
 
   if (scope.nested_type () != GCC_TYPE_NONE)
     {
@@ -923,14 +919,14 @@ compile_cplus_convert_enum (compile_cplu
     }
 
   gdb::unique_xmalloc_ptr<char> name
-    = compile_cplus_instance::decl_name (TYPE_NAME (type));
+    = compile_cplus_instance::decl_name (type->name ());
 
   /* Push all scopes.  */
   instance->enter_scope (std::move (scope));
 
   gcc_type int_type
-    = instance->plugin ().get_int_type (TYPE_UNSIGNED (type),
-					TYPE_LENGTH (type), nullptr);
+    = instance->plugin ().get_int_type (type->is_unsigned (),
+					type->length (), nullptr);
   gcc_type result
     = instance->plugin ().start_enum_type (name.get (), int_type,
 					   GCC_CP_SYMBOL_ENUM | nested_access
@@ -938,17 +934,17 @@ compile_cplus_convert_enum (compile_cplu
 					      ? GCC_CP_FLAG_ENUM_SCOPED
 					      : GCC_CP_FLAG_ENUM_NOFLAG),
 					   nullptr, 0);
-  for (int i = 0; i < TYPE_NFIELDS (type); ++i)
+  for (int i = 0; i < type->num_fields (); ++i)
     {
       gdb::unique_xmalloc_ptr<char> fname
-	= compile_cplus_instance::decl_name (TYPE_FIELD_NAME (type, i));
+	= compile_cplus_instance::decl_name (type->field (i).name ());
 
-      if (TYPE_FIELD_LOC_KIND (type, i) != FIELD_LOC_KIND_ENUMVAL
+      if (type->field (i).loc_kind () != FIELD_LOC_KIND_ENUMVAL
 	  || fname == nullptr)
 	continue;
 
       instance->plugin ().build_enum_constant (result, fname.get (),
-					       TYPE_FIELD_ENUMVAL (type, i));
+					       type->field (i).loc_enumval ());
     }
 
   /* Finish enum definition and pop scopes.  */
@@ -964,8 +960,8 @@ static gcc_type
 compile_cplus_convert_func (compile_cplus_instance *instance,
 			    struct type *type, bool strip_artificial)
 {
-  int is_varargs = TYPE_VARARGS (type);
-  struct type *target_type = TYPE_TARGET_TYPE (type);
+  int is_varargs = type->has_varargs ();
+  struct type *target_type = type->target_type ();
 
   /* Functions with no debug info have no return type.  Ideally we'd
      want to fallback to the type of the cast just before the
@@ -974,10 +970,7 @@ compile_cplus_convert_func (compile_cplu
      GDB's parser used to do.  */
   if (target_type == nullptr)
     {
-      if (TYPE_OBJFILE_OWNED (type))
-	target_type = objfile_type (TYPE_OWNER (type).objfile)->builtin_int;
-      else
-	target_type = builtin_type (TYPE_OWNER (type).gdbarch)->builtin_int;
+      target_type = builtin_type (type->arch ())->builtin_int;
       warning (_("function has unknown return type; assuming int"));
     }
 
@@ -985,12 +978,12 @@ compile_cplus_convert_func (compile_cplu
      types.  Those are impossible in C, though.  */
   gcc_type return_type = instance->convert_type (target_type);
 
-  struct gcc_type_array array =
-    { TYPE_NFIELDS (type), XNEWVEC (gcc_type, TYPE_NFIELDS (type)) };
+  std::vector<gcc_type> elements (type->num_fields ());
+  struct gcc_type_array array = { (int) type->num_fields (), elements.data () };
   int artificials = 0;
-  for (int i = 0; i < TYPE_NFIELDS (type); ++i)
+  for (int i = 0; i < type->num_fields (); ++i)
     {
-      if (strip_artificial && TYPE_FIELD_ARTIFICIAL (type, i))
+      if (strip_artificial && type->field (i).is_artificial ())
 	{
 	  --array.n_elements;
 	  ++artificials;
@@ -998,7 +991,7 @@ compile_cplus_convert_func (compile_cplu
       else
 	{
 	  array.elements[i - artificials]
-	    = instance->convert_type (TYPE_FIELD_TYPE (type, i));
+	    = instance->convert_type (type->field (i).type ());
 	}
     }
 
@@ -1006,7 +999,6 @@ compile_cplus_convert_func (compile_cplu
      with some minsyms like printf (compile-cplus.exp has examples).  */
   gcc_type result = instance->plugin ().build_function_type
     (return_type, &array, is_varargs);
-  xfree (array.elements);
   return result;
 }
 
@@ -1015,14 +1007,14 @@ compile_cplus_convert_func (compile_cplu
 static gcc_type
 compile_cplus_convert_int (compile_cplus_instance *instance, struct type *type)
 {
-  if (TYPE_NOSIGN (type))
+  if (type->has_no_signedness ())
     {
-      gdb_assert (TYPE_LENGTH (type) == 1);
+      gdb_assert (type->length () == 1);
       return instance->plugin ().get_char_type ();
     }
 
   return instance->plugin ().get_int_type
-    (TYPE_UNSIGNED (type), TYPE_LENGTH (type), TYPE_NAME (type));
+    (type->is_unsigned (), type->length (), type->name ());
 }
 
 /* Convert a floating-point type to its gcc representation.  */
@@ -1032,7 +1024,7 @@ compile_cplus_convert_float (compile_cpl
 			     struct type *type)
 {
   return instance->plugin ().get_float_type
-    (TYPE_LENGTH (type), TYPE_NAME (type));
+    (type->length (), type->name ());
 }
 
 /* Convert the 'void' type to its gcc representation.  */
@@ -1060,7 +1052,7 @@ compile_cplus_instance::convert_qualifie
   gcc_type result = base;
 
   if (quals != 0)
-    result = plugin ().build_qualified_type (base, quals);
+    result = plugin ().build_qualified_type (base, quals.raw ());
 
   return result;
 }
@@ -1091,7 +1083,7 @@ static gcc_type
 compile_cplus_convert_complex (compile_cplus_instance *instance,
 			       struct type *type)
 {
-  gcc_type base = instance->convert_type (TYPE_TARGET_TYPE (type));
+  gcc_type base = instance->convert_type (type->target_type ());
 
   return instance->plugin ().build_complex_type (base);
 }
@@ -1102,9 +1094,9 @@ static gcc_type
 compile_cplus_convert_namespace (compile_cplus_instance *instance,
 				 struct type *type)
 {
-  compile_scope scope = instance->new_scope (TYPE_NAME (type), type);
+  compile_scope scope = instance->new_scope (type->name (), type);
   gdb::unique_xmalloc_ptr<char> name
-    = compile_cplus_instance::decl_name (TYPE_NAME (type));
+    = compile_cplus_instance::decl_name (type->name ());
 
   /* Push scope.  */
   instance->enter_scope (std::move (scope));
@@ -1135,12 +1127,12 @@ convert_type_cplus_basic (compile_cplus_
 {
   /* If we are converting a qualified type, first convert the
      unqualified type and then apply the qualifiers.  */
-  if ((TYPE_INSTANCE_FLAGS (type) & (TYPE_INSTANCE_FLAG_CONST
-				     | TYPE_INSTANCE_FLAG_VOLATILE
-				     | TYPE_INSTANCE_FLAG_RESTRICT)) != 0)
+  if ((type->instance_flags () & (TYPE_INSTANCE_FLAG_CONST
+				  | TYPE_INSTANCE_FLAG_VOLATILE
+				  | TYPE_INSTANCE_FLAG_RESTRICT)) != 0)
     return compile_cplus_convert_qualified (instance, type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_REF:
     case TYPE_CODE_RVALUE_REF:
@@ -1198,7 +1190,7 @@ convert_type_cplus_basic (compile_cplus_
     }
 
   std::string s = string_printf (_("unhandled TYPE_CODE %d"),
-				 TYPE_CODE (type));
+				 type->code ());
 
   return instance->plugin ().error (s.c_str ());
 }
@@ -1244,16 +1236,16 @@ compile_cplus_instance::gcc_cplus_leave_
 static void
 compile_cplus_debug_output_1 (ULONGEST arg)
 {
-  fprintf_unfiltered (gdb_stdlog, "%s", pulongest (arg));
+  gdb_printf (gdb_stdlog, "%s", pulongest (arg));
 }
 
 static void
 compile_cplus_debug_output_1 (const char *arg)
 {
   if (arg == nullptr)
-    fputs_unfiltered ("NULL", gdb_stdlog);
+    gdb_puts ("NULL", gdb_stdlog);
   else
-    fputs_unfiltered (arg, gdb_stdlog);
+    gdb_puts (arg, gdb_stdlog);
 }
 
 static void
@@ -1272,7 +1264,7 @@ static void
 compile_cplus_debug_output (T arg, Targs... Args)
 {
   compile_cplus_debug_output_1 (arg);
-  fputc_unfiltered (' ', gdb_stdlog);
+  gdb_putc (' ', gdb_stdlog);
   compile_cplus_debug_output (Args...);
 }
 
@@ -1280,9 +1272,9 @@ compile_cplus_debug_output (T arg, Targs
 #define OUTPUT_DEBUG_RESULT(R)			  \
   if (debug_compile_cplus_types)		  \
     {						  \
-      fputs_unfiltered (": ", gdb_stdlog);	  \
+      gdb_puts (": ", gdb_stdlog);		  \
       compile_cplus_debug_output (R);		  \
-      fputc_unfiltered ('\n', gdb_stdlog);	  \
+      gdb_putc ('\n', gdb_stdlog);		  \
     }						  \
 
 #define GCC_METHOD0(R, N)			  \
@@ -1368,7 +1360,7 @@ gcc_cp_plugin::build_decl (const char *d
 			   const char *filename, unsigned int line_number)
 {
   if (debug_compile_cplus_types)
-    fprintf_unfiltered (gdb_stdlog, "<%s> ", debug_decltype);
+    gdb_printf (gdb_stdlog, "<%s> ", debug_decltype);
 
   return build_decl (name, sym_kind, sym_type, substitution_name,
 		     address, filename, line_number);
@@ -1380,7 +1372,7 @@ gcc_cp_plugin::start_class_type (const c
 				 const char *filename, unsigned int line_number)
 {
   if (debug_compile_cplus_types)
-    fprintf_unfiltered (gdb_stdlog, "<%s> ", debug_name);
+    gdb_printf (gdb_stdlog, "<%s> ", debug_name);
 
   return start_class_type (typedecl, base_classes, filename, line_number);
 }
@@ -1390,7 +1382,7 @@ gcc_cp_plugin::finish_class_type (const
 				  unsigned long size_in_bytes)
 {
   if (debug_compile_cplus_types)
-    fprintf_unfiltered (gdb_stdlog, "<%s> ", debug_name);
+    gdb_printf (gdb_stdlog, "<%s> ", debug_name);
 
   return finish_class_type (size_in_bytes);
 }
@@ -1399,11 +1391,12 @@ int
 gcc_cp_plugin::pop_binding_level (const char *debug_name)
 {
   if (debug_compile_cplus_types)
-    fprintf_unfiltered (gdb_stdlog, "<%s> ", debug_name);
+    gdb_printf (gdb_stdlog, "<%s> ", debug_name);
 
   return pop_binding_level ();
 }
 
+void _initialize_compile_cplus_types ();
 void
 _initialize_compile_cplus_types ()
 {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-c-support.c ./gdb/compile/compile-c-support.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-c-support.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-c-support.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* C/C++ language support for compilation.
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -53,7 +53,7 @@ c_get_mode_for_size (int size)
       mode = "DI";
       break;
     default:
-      internal_error (__FILE__, __LINE__, _("Invalid GCC mode size %d."), size);
+      internal_error (_("Invalid GCC mode size %d."), size);
     }
 
   return mode;
@@ -99,7 +99,7 @@ load_libcompile (const char *fe_libcc, c
 
 template <typename INSTTYPE, typename FUNCTYPE, typename CTXTYPE,
 	  typename BASE_VERSION_TYPE, typename API_VERSION_TYPE>
-compile_instance *
+std::unique_ptr<compile_instance>
 get_compile_context (const char *fe_libcc, const char *fe_context,
 		     BASE_VERSION_TYPE base_version,
 		     API_VERSION_TYPE api_version)
@@ -118,12 +118,12 @@ get_compile_context (const char *fe_libc
     error (_("The loaded version of GCC does not support the required version "
 	     "of the API."));
 
-  return new INSTTYPE (context);
+  return std::make_unique<INSTTYPE> (context);
 }
 
 /* A C-language implementation of get_compile_context.  */
 
-compile_instance *
+std::unique_ptr<compile_instance>
 c_get_compile_context ()
 {
   return get_compile_context
@@ -135,7 +135,7 @@ c_get_compile_context ()
 
 /* A C++-language implementation of get_compile_context.  */
 
-compile_instance *
+std::unique_ptr<compile_instance>
 cplus_get_compile_context ()
 {
   return get_compile_context
@@ -161,23 +161,23 @@ print_one_macro (const char *name, const
 
   /* None of -Wno-builtin-macro-redefined, #undef first
      or plain #define of the same value would avoid a warning.  */
-  fprintf_filtered (file, "#ifndef %s\n# define %s", name, name);
+  gdb_printf (file, "#ifndef %s\n# define %s", name, name);
 
   if (macro->kind == macro_function_like)
     {
       int i;
 
-      fputs_filtered ("(", file);
+      gdb_puts ("(", file);
       for (i = 0; i < macro->argc; i++)
 	{
-	  fputs_filtered (macro->argv[i], file);
+	  gdb_puts (macro->argv[i], file);
 	  if (i + 1 < macro->argc)
-	    fputs_filtered (", ", file);
+	    gdb_puts (", ", file);
 	}
-      fputs_filtered (")", file);
+      gdb_puts (")", file);
     }
 
-  fprintf_filtered (file, " %s\n#endif\n", macro->replacement);
+  gdb_printf (file, " %s\n#endif\n", macro->replacement);
 }
 
 /* Write macro definitions at PC to FILE.  */
@@ -213,15 +213,15 @@ write_macro_definitions (const struct bl
 
 static void
 generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
-			  const unsigned char *registers_used)
+			  const std::vector<bool> &registers_used)
 {
   int i;
   int seen = 0;
 
-  fputs_unfiltered ("struct " COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG " {\n",
-		    stream);
+  gdb_puts ("struct " COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG " {\n",
+	    stream);
 
-  if (registers_used != NULL)
+  if (!registers_used.empty ())
     for (i = 0; i < gdbarch_num_regs (gdbarch); ++i)
       {
 	if (registers_used[i])
@@ -241,51 +241,51 @@ generate_register_struct (struct ui_file
 	       register types (typically flags or vectors), emit a
 	       maximally-aligned array of the correct size.  */
 
-	    fputs_unfiltered ("  ", stream);
-	    switch (TYPE_CODE (regtype))
+	    gdb_puts ("  ", stream);
+	    switch (regtype->code ())
 	      {
 	      case TYPE_CODE_PTR:
-		fprintf_filtered (stream, "__gdb_uintptr %s",
-				  regname.c_str ());
+		gdb_printf (stream, "__gdb_uintptr %s",
+			    regname.c_str ());
 		break;
 
 	      case TYPE_CODE_INT:
 		{
 		  const char *mode
-		    = c_get_mode_for_size (TYPE_LENGTH (regtype));
+		    = c_get_mode_for_size (regtype->length ());
 
 		  if (mode != NULL)
 		    {
-		      if (TYPE_UNSIGNED (regtype))
-			fputs_unfiltered ("unsigned ", stream);
-		      fprintf_unfiltered (stream,
-					  "int %s"
-					  " __attribute__ ((__mode__(__%s__)))",
-					  regname.c_str (),
-					  mode);
+		      if (regtype->is_unsigned ())
+			gdb_puts ("unsigned ", stream);
+		      gdb_printf (stream,
+				  "int %s"
+				  " __attribute__ ((__mode__(__%s__)))",
+				  regname.c_str (),
+				  mode);
 		      break;
 		    }
 		}
 
-		/* Fall through.  */
+		[[fallthrough]];
 
 	      default:
-		fprintf_unfiltered (stream,
-				    "  unsigned char %s[%s]"
-				    " __attribute__((__aligned__("
-				    "__BIGGEST_ALIGNMENT__)))",
-				    regname.c_str (),
-				    pulongest (TYPE_LENGTH (regtype)));
+		gdb_printf (stream,
+			    "  unsigned char %s[%s]"
+			    " __attribute__((__aligned__("
+			    "__BIGGEST_ALIGNMENT__)))",
+			    regname.c_str (),
+			    pulongest (regtype->length ()));
 	      }
-	    fputs_unfiltered (";\n", stream);
+	    gdb_puts (";\n", stream);
 	  }
       }
 
   if (!seen)
-    fputs_unfiltered ("  char " COMPILE_I_SIMPLE_REGISTER_DUMMY ";\n",
-		      stream);
+    gdb_puts ("  char " COMPILE_I_SIMPLE_REGISTER_DUMMY ";\n",
+	      stream);
 
-  fputs_unfiltered ("};\n\n", stream);
+  gdb_puts ("};\n\n", stream);
 }
 
 /* C-language policy to emit a push user expression pragma into BUF.  */
@@ -294,7 +294,7 @@ struct c_push_user_expression
 {
   void push_user_expression (struct ui_file *buf)
   {
-    fputs_unfiltered ("#pragma GCC user_expression\n", buf);
+    gdb_puts ("#pragma GCC user_expression\n", buf);
   }
 };
 
@@ -320,39 +320,39 @@ struct c_add_code_header
     switch (type)
       {
       case COMPILE_I_SIMPLE_SCOPE:
-	fputs_unfiltered ("void "
-			  GCC_FE_WRAPPER_FUNCTION
-			  " (struct "
-			  COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
-			  " *"
-			  COMPILE_I_SIMPLE_REGISTER_ARG_NAME
-			  ") {\n",
-			  buf);
+	gdb_puts ("void "
+		  GCC_FE_WRAPPER_FUNCTION
+		  " (struct "
+		  COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
+		  " *"
+		  COMPILE_I_SIMPLE_REGISTER_ARG_NAME
+		  ") {\n",
+		  buf);
 	break;
 
       case COMPILE_I_PRINT_ADDRESS_SCOPE:
       case COMPILE_I_PRINT_VALUE_SCOPE:
 	/* <string.h> is needed for a memcpy call below.  */
-	fputs_unfiltered ("#include <string.h>\n"
-			  "void "
-			  GCC_FE_WRAPPER_FUNCTION
-			  " (struct "
-			  COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
-			  " *"
-			  COMPILE_I_SIMPLE_REGISTER_ARG_NAME
-			  ", "
-			  COMPILE_I_PRINT_OUT_ARG_TYPE
-			  " "
-			  COMPILE_I_PRINT_OUT_ARG
-			  ") {\n",
-			  buf);
+	gdb_puts ("#include <string.h>\n"
+		  "void "
+		  GCC_FE_WRAPPER_FUNCTION
+		  " (struct "
+		  COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
+		  " *"
+		  COMPILE_I_SIMPLE_REGISTER_ARG_NAME
+		  ", "
+		  COMPILE_I_PRINT_OUT_ARG_TYPE
+		  " "
+		  COMPILE_I_PRINT_OUT_ARG
+		  ") {\n",
+		  buf);
 	break;
 
       case COMPILE_I_RAW_SCOPE:
 	break;
 
       default:
-	gdb_assert_not_reached (_("Unknown compiler scope reached."));
+	gdb_assert_not_reached ("Unknown compiler scope reached.");
       }
   }
 };
@@ -369,14 +369,14 @@ struct c_add_code_footer
       case COMPILE_I_SIMPLE_SCOPE:
       case COMPILE_I_PRINT_ADDRESS_SCOPE:
       case COMPILE_I_PRINT_VALUE_SCOPE:
-	fputs_unfiltered ("}\n", buf);
+	gdb_puts ("}\n", buf);
 	break;
 
       case COMPILE_I_RAW_SCOPE:
 	break;
 
       default:
-	gdb_assert_not_reached (_("Unknown compiler scope reached."));
+	gdb_assert_not_reached ("Unknown compiler scope reached.");
       }
   }
 };
@@ -393,22 +393,22 @@ struct c_add_input
       {
       case COMPILE_I_PRINT_ADDRESS_SCOPE:
       case COMPILE_I_PRINT_VALUE_SCOPE:
-	fprintf_unfiltered (buf,
-			    "__auto_type " COMPILE_I_EXPR_VAL " = %s;\n"
-			    "typeof (%s) *" COMPILE_I_EXPR_PTR_TYPE ";\n"
-			    "memcpy (" COMPILE_I_PRINT_OUT_ARG ", %s"
-			    COMPILE_I_EXPR_VAL ",\n"
-			    "sizeof (*" COMPILE_I_EXPR_PTR_TYPE "));\n"
-			    , input, input,
-			    (type == COMPILE_I_PRINT_ADDRESS_SCOPE
-			     ? "&" : ""));
+	gdb_printf (buf,
+		    "__auto_type " COMPILE_I_EXPR_VAL " = %s;\n"
+		    "typeof (%s) *" COMPILE_I_EXPR_PTR_TYPE ";\n"
+		    "memcpy (" COMPILE_I_PRINT_OUT_ARG ", %s"
+		    COMPILE_I_EXPR_VAL ",\n"
+		    "sizeof (*" COMPILE_I_EXPR_PTR_TYPE "));\n"
+		    , input, input,
+		    (type == COMPILE_I_PRINT_ADDRESS_SCOPE
+		     ? "&" : ""));
 	break;
 
       default:
-	fputs_unfiltered (input, buf);
+	gdb_puts (input, buf);
 	break;
       }
-    fputs_unfiltered ("\n", buf);
+    gdb_puts ("\n", buf);
   }
 };
 
@@ -419,7 +419,7 @@ struct cplus_push_user_expression
 {
   void push_user_expression (struct ui_file *buf)
   {
-    fputs_unfiltered ("#pragma GCC push_user_expression\n", buf);
+    gdb_puts ("#pragma GCC push_user_expression\n", buf);
   }
 };
 
@@ -429,7 +429,7 @@ struct cplus_pop_user_expression
 {
   void pop_user_expression (struct ui_file *buf)
   {
-    fputs_unfiltered ("#pragma GCC pop_user_expression\n", buf);
+    gdb_puts ("#pragma GCC pop_user_expression\n", buf);
   }
 };
 
@@ -444,40 +444,40 @@ struct cplus_add_code_header
   switch (type)
     {
     case COMPILE_I_SIMPLE_SCOPE:
-      fputs_unfiltered ("void "
-			GCC_FE_WRAPPER_FUNCTION
-			" (struct "
-			COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
-			" *"
-			COMPILE_I_SIMPLE_REGISTER_ARG_NAME
-			") {\n",
-			buf);
+      gdb_puts ("void "
+		GCC_FE_WRAPPER_FUNCTION
+		" (struct "
+		COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
+		" *"
+		COMPILE_I_SIMPLE_REGISTER_ARG_NAME
+		") {\n",
+		buf);
       break;
 
     case COMPILE_I_PRINT_ADDRESS_SCOPE:
     case COMPILE_I_PRINT_VALUE_SCOPE:
-      fputs_unfiltered (
-			"#include <cstring>\n"
-			"#include <bits/move.h>\n"
-			"void "
-			GCC_FE_WRAPPER_FUNCTION
-			" (struct "
-			COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
-			" *"
-			COMPILE_I_SIMPLE_REGISTER_ARG_NAME
-			", "
-			COMPILE_I_PRINT_OUT_ARG_TYPE
-			" "
-			COMPILE_I_PRINT_OUT_ARG
-			") {\n",
-			buf);
+      gdb_puts (
+		"#include <cstring>\n"
+		"#include <bits/move.h>\n"
+		"void "
+		GCC_FE_WRAPPER_FUNCTION
+		" (struct "
+		COMPILE_I_SIMPLE_REGISTER_STRUCT_TAG
+		" *"
+		COMPILE_I_SIMPLE_REGISTER_ARG_NAME
+		", "
+		COMPILE_I_PRINT_OUT_ARG_TYPE
+		" "
+		COMPILE_I_PRINT_OUT_ARG
+		") {\n",
+		buf);
       break;
 
     case COMPILE_I_RAW_SCOPE:
       break;
 
     default:
-      gdb_assert_not_reached (_("Unknown compiler scope reached."));
+      gdb_assert_not_reached ("Unknown compiler scope reached.");
     }
   }
 };
@@ -494,7 +494,7 @@ struct cplus_add_input
       {
       case COMPILE_I_PRINT_VALUE_SCOPE:
       case COMPILE_I_PRINT_ADDRESS_SCOPE:
-	fprintf_unfiltered
+	gdb_printf
 	  (buf,
 	   /* "auto" strips ref- and cv- qualifiers, so we need to also strip
 	      those from COMPILE_I_EXPR_PTR_TYPE.  */
@@ -512,10 +512,10 @@ struct cplus_add_input
 	break;
 
       default:
-	fputs_unfiltered (input, buf);
+	gdb_puts (input, buf);
 	break;
       }
-    fputs_unfiltered ("\n", buf);
+    gdb_puts ("\n", buf);
   }
 };
 
@@ -572,7 +572,7 @@ public:
 	   before generating the function header, so we can define the
 	   register struct before the function body.  This requires a
 	   temporary stream.  */
-	gdb::unique_xmalloc_ptr<unsigned char> registers_used
+	std::vector<bool> registers_used
 	  = generate_c_for_variable_locations (m_instance, &var_stream, m_arch,
 					       expr_block, expr_pc);
 
@@ -595,7 +595,7 @@ public:
 			mode, mode);
 	  }
 
-	generate_register_struct (&buf, m_arch, registers_used.get ());
+	generate_register_struct (&buf, m_arch, registers_used);
       }
 
     AddCodeHeaderPolicy::add_code_header (m_instance->scope (), &buf);
@@ -635,7 +635,7 @@ public:
       PopUserExpressionPolicy::pop_user_expression (&buf);
 
     AddCodeFooterPolicy::add_code_footer (m_instance->scope (), &buf);
-    return buf.string ();
+    return buf.release ();
   }
 
 private:
@@ -660,7 +660,7 @@ typedef compile_program<compile_cplus_in
 			cplus_add_code_header, c_add_code_footer,
 			cplus_add_input> cplus_compile_program;
 
-/* The la_compute_program method for C.  */
+/* The compute_program method for C.  */
 
 std::string
 c_compute_program (compile_instance *inst,
@@ -675,7 +675,7 @@ c_compute_program (compile_instance *ins
   return program.compute (input, expr_block, expr_pc);
 }
 
-/* The la_compute_program method for C++.  */
+/* The compute_program method for C++.  */
 
 std::string
 cplus_compute_program (compile_instance *inst,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-c-symbols.c ./gdb/compile/compile-c-symbols.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-c-symbols.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-c-symbols.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert symbols from GDB to GCC
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,9 +29,9 @@
 #include "value.h"
 #include "exceptions.h"
 #include "gdbtypes.h"
-#include "dwarf2loc.h"
+#include "dwarf2/loc.h"
+#include "inferior.h"
 
-
 
 /* Compute the name of the pointer representing a local symbol's
    address.  */
@@ -57,17 +57,17 @@ convert_one_symbol (compile_c_instance *
 		    int is_local)
 {
   gcc_type sym_type;
-  const char *filename = symbol_symtab (sym.symbol)->filename;
-  unsigned short line = SYMBOL_LINE (sym.symbol);
+  const char *filename = sym.symbol->symtab ()->filename;
+  unsigned int line = sym.symbol->line ();
 
   context->error_symbol_once (sym.symbol);
 
-  if (SYMBOL_CLASS (sym.symbol) == LOC_LABEL)
+  if (sym.symbol->aclass () == LOC_LABEL)
     sym_type = 0;
   else
-    sym_type = context->convert_type (SYMBOL_TYPE (sym.symbol));
+    sym_type = context->convert_type (sym.symbol->type ());
 
-  if (SYMBOL_DOMAIN (sym.symbol) == STRUCT_DOMAIN)
+  if (sym.symbol->domain () == STRUCT_DOMAIN)
     {
       /* Binding a tag, so we don't need to build a decl.  */
       context->plugin ().tagbind (sym.symbol->natural_name (),
@@ -80,7 +80,7 @@ convert_one_symbol (compile_c_instance *
       CORE_ADDR addr = 0;
       gdb::unique_xmalloc_ptr<char> symbol_name;
 
-      switch (SYMBOL_CLASS (sym.symbol))
+      switch (sym.symbol->aclass ())
 	{
 	case LOC_TYPEDEF:
 	  kind = GCC_C_SYMBOL_TYPEDEF;
@@ -88,25 +88,25 @@ convert_one_symbol (compile_c_instance *
 
 	case LOC_LABEL:
 	  kind = GCC_C_SYMBOL_LABEL;
-	  addr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+	  addr = sym.symbol->value_address ();
 	  break;
 
 	case LOC_BLOCK:
 	  kind = GCC_C_SYMBOL_FUNCTION;
-	  addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym.symbol));
-	  if (is_global && TYPE_GNU_IFUNC (SYMBOL_TYPE (sym.symbol)))
-	    addr = gnu_ifunc_resolve_addr (target_gdbarch (), addr);
+	  addr = sym.symbol->value_block ()->entry_pc ();
+	  if (is_global && sym.symbol->type ()->is_gnu_ifunc ())
+	    addr = gnu_ifunc_resolve_addr (current_inferior ()->arch (), addr);
 	  break;
 
 	case LOC_CONST:
-	  if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_ENUM)
+	  if (sym.symbol->type ()->code () == TYPE_CODE_ENUM)
 	    {
 	      /* Already handled by convert_enum.  */
 	      return;
 	    }
 	  context->plugin ().build_constant
 	    (sym_type, sym.symbol->natural_name (),
-	     SYMBOL_VALUE (sym.symbol),
+	     sym.symbol->value_longest (),
 	     filename, line);
 	  return;
 
@@ -115,7 +115,7 @@ convert_one_symbol (compile_c_instance *
 		 sym.symbol->print_name ());
 
 	case LOC_UNDEF:
-	  internal_error (__FILE__, __LINE__, _("LOC_UNDEF found for \"%s\"."),
+	  internal_error (_("LOC_UNDEF found for \"%s\"."),
 			  sym.symbol->print_name ());
 
 	case LOC_COMMON_BLOCK:
@@ -136,7 +136,7 @@ convert_one_symbol (compile_c_instance *
 		     "be referenced from the current thread in "
 		     "compiled code."),
 		   sym.symbol->print_name ());
-	  /* FALLTHROUGH */
+	  [[fallthrough]];
 	case LOC_UNRESOLVED:
 	  /* 'symbol_name' cannot be used here as that one is used only for
 	     local variables from compile_dwarf_expr_to_c.
@@ -144,7 +144,7 @@ convert_one_symbol (compile_c_instance *
 	     by their name.  */
 	  {
 	    struct value *val;
-	    struct frame_info *frame = NULL;
+	    frame_info_ptr frame = NULL;
 
 	    if (symbol_read_needs_frame (sym.symbol))
 	      {
@@ -156,13 +156,13 @@ convert_one_symbol (compile_c_instance *
 	      }
 
 	    val = read_var_value (sym.symbol, sym.block, frame);
-	    if (VALUE_LVAL (val) != lval_memory)
+	    if (val->lval () != lval_memory)
 	      error (_("Symbol \"%s\" cannot be used for compilation "
 		       "evaluation as its address has not been found."),
 		     sym.symbol->print_name ());
 
 	    kind = GCC_C_SYMBOL_VARIABLE;
-	    addr = value_address (val);
+	    addr = val->address ();
 	  }
 	  break;
 
@@ -179,7 +179,7 @@ convert_one_symbol (compile_c_instance *
 
 	case LOC_STATIC:
 	  kind = GCC_C_SYMBOL_VARIABLE;
-	  addr = SYMBOL_VALUE_ADDRESS (sym.symbol);
+	  addr = sym.symbol->value_address ();
 	  break;
 
 	case LOC_FINAL_VALUE:
@@ -210,9 +210,8 @@ convert_one_symbol (compile_c_instance *
 
 static void
 convert_symbol_sym (compile_c_instance *context, const char *identifier,
-		    struct block_symbol sym, domain_enum domain)
+		    struct block_symbol sym, domain_search_flags domain)
 {
-  const struct block *static_block;
   int is_local_symbol;
 
   /* If we found a symbol and it is not in the  static or global
@@ -227,7 +226,9 @@ convert_symbol_sym (compile_c_instance *
      }
   */
 
-  static_block = block_static_block (sym.block);
+  const struct block *static_block = nullptr;
+  if (sym.block != nullptr)
+    static_block = sym.block->static_block ();
   /* STATIC_BLOCK is NULL if FOUND_BLOCK is the global block.  */
   is_local_symbol = (sym.block != static_block && static_block != NULL);
   if (is_local_symbol)
@@ -238,20 +239,20 @@ convert_symbol_sym (compile_c_instance *
       /* If the outer symbol is in the static block, we ignore it, as
 	 it cannot be referenced.  */
       if (global_sym.symbol != NULL
-	  && global_sym.block != block_static_block (global_sym.block))
+	  && global_sym.block != global_sym.block->static_block ())
 	{
 	  if (compile_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"gcc_convert_symbol \"%s\": global symbol\n",
-				identifier);
+	    gdb_printf (gdb_stdlog,
+			"gcc_convert_symbol \"%s\": global symbol\n",
+			identifier);
 	  convert_one_symbol (context, global_sym, 1, 0);
 	}
     }
 
   if (compile_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"gcc_convert_symbol \"%s\": local symbol\n",
-			identifier);
+    gdb_printf (gdb_stdlog,
+		"gcc_convert_symbol \"%s\": local symbol\n",
+		identifier);
   convert_one_symbol (context, sym, 0, is_local_symbol);
 }
 
@@ -270,39 +271,39 @@ convert_symbol_bmsym (compile_c_instance
   gcc_decl decl;
   CORE_ADDR addr;
 
-  addr = MSYMBOL_VALUE_ADDRESS (objfile, msym);
+  addr = msym->value_address (objfile);
 
   /* Conversion copied from write_exp_msymbol.  */
-  switch (MSYMBOL_TYPE (msym))
+  switch (msym->type ())
     {
     case mst_text:
     case mst_file_text:
     case mst_solib_trampoline:
-      type = objfile_type (objfile)->nodebug_text_symbol;
+      type = builtin_type (objfile)->nodebug_text_symbol;
       kind = GCC_C_SYMBOL_FUNCTION;
       break;
 
     case mst_text_gnu_ifunc:
-      type = objfile_type (objfile)->nodebug_text_gnu_ifunc_symbol;
+      type = builtin_type (objfile)->nodebug_text_gnu_ifunc_symbol;
       kind = GCC_C_SYMBOL_FUNCTION;
-      addr = gnu_ifunc_resolve_addr (target_gdbarch (), addr);
+      addr = gnu_ifunc_resolve_addr (current_inferior ()->arch (), addr);
       break;
 
     case mst_data:
     case mst_file_data:
     case mst_bss:
     case mst_file_bss:
-      type = objfile_type (objfile)->nodebug_data_symbol;
+      type = builtin_type (objfile)->nodebug_data_symbol;
       kind = GCC_C_SYMBOL_VARIABLE;
       break;
 
     case mst_slot_got_plt:
-      type = objfile_type (objfile)->nodebug_got_plt_symbol;
+      type = builtin_type (objfile)->nodebug_got_plt_symbol;
       kind = GCC_C_SYMBOL_FUNCTION;
       break;
 
     default:
-      type = objfile_type (objfile)->nodebug_unknown_symbol;
+      type = builtin_type (objfile)->nodebug_unknown_symbol;
       kind = GCC_C_SYMBOL_VARIABLE;
       break;
     }
@@ -324,19 +325,19 @@ gcc_convert_symbol (void *datum,
 {
   compile_c_instance *context
     = static_cast<compile_c_instance *> (datum);
-  domain_enum domain;
+  domain_search_flags domain;
   int found = 0;
 
   switch (request)
     {
     case GCC_C_ORACLE_SYMBOL:
-      domain = VAR_DOMAIN;
+      domain = SEARCH_VFT;
       break;
     case GCC_C_ORACLE_TAG:
-      domain = STRUCT_DOMAIN;
+      domain = SEARCH_STRUCT_DOMAIN;
       break;
     case GCC_C_ORACLE_LABEL:
-      domain = LABEL_DOMAIN;
+      domain = SEARCH_LABEL_DOMAIN;
       break;
     default:
       gdb_assert_not_reached ("Unrecognized oracle request.");
@@ -354,7 +355,7 @@ gcc_convert_symbol (void *datum,
 	  convert_symbol_sym (context, identifier, sym, domain);
 	  found = 1;
 	}
-      else if (domain == VAR_DOMAIN)
+      else if (request == GCC_C_ORACLE_SYMBOL)
 	{
 	  struct bound_minimal_symbol bmsym;
 
@@ -373,9 +374,9 @@ gcc_convert_symbol (void *datum,
     }
 
   if (compile_debug && !found)
-    fprintf_unfiltered (gdb_stdlog,
-			"gcc_convert_symbol \"%s\": lookup_symbol failed\n",
-			identifier);
+    gdb_printf (gdb_stdlog,
+		"gcc_convert_symbol \"%s\": lookup_symbol failed\n",
+		identifier);
   return;
 }
 
@@ -397,16 +398,18 @@ gcc_symbol_address (void *datum, struct
       struct symbol *sym;
 
       /* We only need global functions here.  */
-      sym = lookup_symbol (identifier, NULL, VAR_DOMAIN, NULL).symbol;
-      if (sym != NULL && SYMBOL_CLASS (sym) == LOC_BLOCK)
+      sym = lookup_symbol (identifier, nullptr, SEARCH_FUNCTION_DOMAIN,
+			   nullptr).symbol;
+      if (sym != nullptr)
 	{
 	  if (compile_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"gcc_symbol_address \"%s\": full symbol\n",
-				identifier);
-	  result = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
-	  if (TYPE_GNU_IFUNC (SYMBOL_TYPE (sym)))
-	    result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
+	    gdb_printf (gdb_stdlog,
+			"gcc_symbol_address \"%s\": full symbol\n",
+			identifier);
+	  result = sym->value_block ()->entry_pc ();
+	  if (sym->type ()->is_gnu_ifunc ())
+	    result = gnu_ifunc_resolve_addr (current_inferior ()->arch (),
+					     result);
 	  found = 1;
 	}
       else
@@ -417,13 +420,14 @@ gcc_symbol_address (void *datum, struct
 	  if (msym.minsym != NULL)
 	    {
 	      if (compile_debug)
-		fprintf_unfiltered (gdb_stdlog,
-				    "gcc_symbol_address \"%s\": minimal "
-				    "symbol\n",
-				    identifier);
-	      result = BMSYMBOL_VALUE_ADDRESS (msym);
-	      if (MSYMBOL_TYPE (msym.minsym) == mst_text_gnu_ifunc)
-		result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
+		gdb_printf (gdb_stdlog,
+			    "gcc_symbol_address \"%s\": minimal "
+			    "symbol\n",
+			    identifier);
+	      result = msym.value_address ();
+	      if (msym.minsym->type () == mst_text_gnu_ifunc)
+		result = gnu_ifunc_resolve_addr (current_inferior ()->arch (),
+						 result);
 	      found = 1;
 	    }
 	}
@@ -435,9 +439,9 @@ gcc_symbol_address (void *datum, struct
     }
 
   if (compile_debug && !found)
-    fprintf_unfiltered (gdb_stdlog,
-			"gcc_symbol_address \"%s\": failed\n",
-			identifier);
+    gdb_printf (gdb_stdlog,
+		"gcc_symbol_address \"%s\": failed\n",
+		identifier);
   return result;
 }
 
@@ -487,7 +491,7 @@ static void
 generate_vla_size (compile_instance *compiler,
 		   string_file *stream,
 		   struct gdbarch *gdbarch,
-		   unsigned char *registers_used,
+		   std::vector<bool> &registers_used,
 		   CORE_ADDR pc,
 		   struct type *type,
 		   struct symbol *sym)
@@ -495,16 +499,16 @@ generate_vla_size (compile_instance *com
   type = check_typedef (type);
 
   if (TYPE_IS_REFERENCE (type))
-    type = check_typedef (TYPE_TARGET_TYPE (type));
+    type = check_typedef (type->target_type ());
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_RANGE:
       {
-	if (TYPE_HIGH_BOUND_KIND (type) == PROP_LOCEXPR
-	    || TYPE_HIGH_BOUND_KIND (type) == PROP_LOCLIST)
+	if (type->bounds ()->high.kind () == PROP_LOCEXPR
+	    || type->bounds ()->high.kind () == PROP_LOCLIST)
 	  {
-	    const struct dynamic_prop *prop = &TYPE_RANGE_DATA (type)->high;
+	    const struct dynamic_prop *prop = &type->bounds ()->high;
 	    std::string name = c_get_range_decl_name (prop);
 
 	    dwarf2_compile_property_to_c (stream, name.c_str (),
@@ -516,9 +520,9 @@ generate_vla_size (compile_instance *com
 
     case TYPE_CODE_ARRAY:
       generate_vla_size (compiler, stream, gdbarch, registers_used, pc,
-			 TYPE_INDEX_TYPE (type), sym);
+			 type->index_type (), sym);
       generate_vla_size (compiler, stream, gdbarch, registers_used, pc,
-			 TYPE_TARGET_TYPE (type), sym);
+			 type->target_type (), sym);
       break;
 
     case TYPE_CODE_UNION:
@@ -526,10 +530,10 @@ generate_vla_size (compile_instance *com
       {
 	int i;
 
-	for (i = 0; i < TYPE_NFIELDS (type); ++i)
-	  if (!field_is_static (&TYPE_FIELD (type, i)))
+	for (i = 0; i < type->num_fields (); ++i)
+	  if (!type->field (i).is_static ())
 	    generate_vla_size (compiler, stream, gdbarch, registers_used, pc,
-			       TYPE_FIELD_TYPE (type, i), sym);
+			       type->field (i).type (), sym);
       }
       break;
     }
@@ -541,26 +545,27 @@ static void
 generate_c_for_for_one_variable (compile_instance *compiler,
 				 string_file *stream,
 				 struct gdbarch *gdbarch,
-				 unsigned char *registers_used,
+				 std::vector<bool> &registers_used,
 				 CORE_ADDR pc,
 				 struct symbol *sym)
 {
 
   try
     {
-      if (is_dynamic_type (SYMBOL_TYPE (sym)))
+      if (is_dynamic_type (sym->type ()))
 	{
 	  /* We need to emit to a temporary buffer in case an error
 	     occurs in the middle.  */
 	  string_file local_file;
 
 	  generate_vla_size (compiler, &local_file, gdbarch, registers_used, pc,
-			     SYMBOL_TYPE (sym), sym);
+			     sym->type (), sym);
 
 	  stream->write (local_file.c_str (), local_file.size ());
 	}
 
-      if (SYMBOL_COMPUTED_OPS (sym) != NULL)
+      if (const symbol_computed_ops *computed_ops = sym->computed_ops ();
+	  computed_ops != nullptr)
 	{
 	  gdb::unique_xmalloc_ptr<char> generated_name
 	    = c_symbol_substitution_name (sym);
@@ -568,16 +573,14 @@ generate_c_for_for_one_variable (compile
 	     occurs in the middle.  */
 	  string_file local_file;
 
-	  SYMBOL_COMPUTED_OPS (sym)->generate_c_location (sym, &local_file,
-							  gdbarch,
-							  registers_used,
-							  pc,
-							  generated_name.get ());
+	  computed_ops->generate_c_location (sym, &local_file, gdbarch,
+					     registers_used, pc,
+					     generated_name.get ());
 	  stream->write (local_file.c_str (), local_file.size ());
 	}
       else
 	{
-	  switch (SYMBOL_CLASS (sym))
+	  switch (sym->aclass ())
 	    {
 	    case LOC_REGISTER:
 	    case LOC_ARG:
@@ -587,8 +590,8 @@ generate_c_for_for_one_variable (compile
 	      error (_("Local symbol unhandled when generating C code."));
 
 	    case LOC_COMPUTED:
-	      gdb_assert_not_reached (_("LOC_COMPUTED variable "
-					"missing a method."));
+	      gdb_assert_not_reached ("LOC_COMPUTED variable "
+				      "missing a method.");
 
 	    default:
 	      /* Nothing to do for all other cases, as they don't represent
@@ -606,22 +609,24 @@ generate_c_for_for_one_variable (compile
 
 /* See compile-c.h.  */
 
-gdb::unique_xmalloc_ptr<unsigned char>
+std::vector<bool>
 generate_c_for_variable_locations (compile_instance *compiler,
 				   string_file *stream,
 				   struct gdbarch *gdbarch,
 				   const struct block *block,
 				   CORE_ADDR pc)
 {
-  const struct block *static_block = block_static_block (block);
+  if (block == nullptr)
+    return {};
+
+  const struct block *static_block = block->static_block ();
 
   /* If we're already in the static or global block, there is nothing
      to write.  */
   if (static_block == NULL || block == static_block)
-    return NULL;
+    return {};
 
-  gdb::unique_xmalloc_ptr<unsigned char> registers_used
-    (XCNEWVEC (unsigned char, gdbarch_num_regs (gdbarch)));
+  std::vector<bool> registers_used (gdbarch_num_regs (gdbarch));
 
   /* Ensure that a given name is only entered once.  This reflects the
      reality of shadowing.  */
@@ -630,25 +635,20 @@ generate_c_for_variable_locations (compi
 
   while (1)
     {
-      struct symbol *sym;
-      struct block_iterator iter;
-
       /* Iterate over symbols in this block, generating code to
 	 compute the location of each local variable.  */
-      for (sym = block_iterator_first (block, &iter);
-	   sym != NULL;
-	   sym = block_iterator_next (&iter))
+      for (struct symbol *sym : block_iterator_range (block))
 	{
 	  if (!symbol_seen (symhash.get (), sym))
 	    generate_c_for_for_one_variable (compiler, stream, gdbarch,
-					     registers_used.get (), pc, sym);
+					     registers_used, pc, sym);
 	}
 
       /* If we just finished the outermost block of a function, we're
 	 done.  */
-      if (BLOCK_FUNCTION (block) != NULL)
+      if (block->function () != NULL)
 	break;
-      block = BLOCK_SUPERBLOCK (block);
+      block = block->superblock ();
     }
 
   return registers_used;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-c-types.c ./gdb/compile/compile-c-types.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-c-types.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-c-types.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert types from GDB to GCC
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,7 +29,7 @@
 static gcc_type
 convert_pointer (compile_c_instance *context, struct type *type)
 {
-  gcc_type target = context->convert_type (TYPE_TARGET_TYPE (type));
+  gcc_type target = context->convert_type (type->target_type ());
 
   return context->plugin ().build_pointer_type (target);
 }
@@ -40,28 +40,28 @@ static gcc_type
 convert_array (compile_c_instance *context, struct type *type)
 {
   gcc_type element_type;
-  struct type *range = TYPE_INDEX_TYPE (type);
+  struct type *range = type->index_type ();
 
-  element_type = context->convert_type (TYPE_TARGET_TYPE (type));
+  element_type = context->convert_type (type->target_type ());
 
-  if (TYPE_LOW_BOUND_KIND (range) != PROP_CONST)
+  if (!range->bounds ()->low.is_constant ())
     return context->plugin ().error (_("array type with non-constant"
 				       " lower bound is not supported"));
-  if (TYPE_LOW_BOUND (range) != 0)
+  if (range->bounds ()->low.const_val () != 0)
     return context->plugin ().error (_("cannot convert array type with "
 				       "non-zero lower bound to C"));
 
-  if (TYPE_HIGH_BOUND_KIND (range) == PROP_LOCEXPR
-      || TYPE_HIGH_BOUND_KIND (range) == PROP_LOCLIST)
+  if (range->bounds ()->high.kind () == PROP_LOCEXPR
+      || range->bounds ()->high.kind () == PROP_LOCLIST)
     {
       gcc_type result;
 
-      if (TYPE_VECTOR (type))
+      if (type->is_vector ())
 	return context->plugin ().error (_("variably-sized vector type"
 					   " is not supported"));
 
       std::string upper_bound
-	= c_get_range_decl_name (&TYPE_RANGE_DATA (range)->high);
+	= c_get_range_decl_name (&range->bounds ()->high);
       result = context->plugin ().build_vla_array_type (element_type,
 							upper_bound.c_str ());
       return result;
@@ -70,7 +70,7 @@ convert_array (compile_c_instance *conte
     {
       LONGEST low_bound, high_bound, count;
 
-      if (get_array_bounds (type, &low_bound, &high_bound) == 0)
+      if (!get_array_bounds (type, &low_bound, &high_bound))
 	count = -1;
       else
 	{
@@ -78,7 +78,7 @@ convert_array (compile_c_instance *conte
 	  count = high_bound + 1;
 	}
 
-      if (TYPE_VECTOR (type))
+      if (type->is_vector ())
 	return context->plugin ().build_vector_type (element_type, count);
       return context->plugin ().build_array_type (element_type, count);
     }
@@ -94,31 +94,31 @@ convert_struct_or_union (compile_c_insta
 
   /* First we create the resulting type and enter it into our hash
      table.  This lets recursive types work.  */
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+  if (type->code () == TYPE_CODE_STRUCT)
     result = context->plugin ().build_record_type ();
   else
     {
-      gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION);
+      gdb_assert (type->code () == TYPE_CODE_UNION);
       result = context->plugin ().build_union_type ();
     }
   context->insert_type (type, result);
 
-  for (i = 0; i < TYPE_NFIELDS (type); ++i)
+  for (i = 0; i < type->num_fields (); ++i)
     {
       gcc_type field_type;
-      unsigned long bitsize = TYPE_FIELD_BITSIZE (type, i);
+      unsigned long bitsize = type->field (i).bitsize ();
 
-      field_type = context->convert_type (TYPE_FIELD_TYPE (type, i));
+      field_type = context->convert_type (type->field (i).type ());
       if (bitsize == 0)
-	bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, i));
+	bitsize = 8 * type->field (i).type ()->length ();
       context->plugin ().build_add_field (result,
-					  TYPE_FIELD_NAME (type, i),
+					  type->field (i).name (),
 					  field_type,
 					  bitsize,
-					  TYPE_FIELD_BITPOS (type, i));
+					  type->field (i).loc_bitpos ());
     }
 
-  context->plugin ().finish_record_or_union (result, TYPE_LENGTH (type));
+  context->plugin ().finish_record_or_union (result, type->length ());
   return result;
 }
 
@@ -130,14 +130,14 @@ convert_enum (compile_c_instance *contex
   gcc_type int_type, result;
   int i;
 
-  int_type = context->plugin ().int_type_v0 (TYPE_UNSIGNED (type),
-					     TYPE_LENGTH (type));
+  int_type = context->plugin ().int_type_v0 (type->is_unsigned (),
+					     type->length ());
 
   result = context->plugin ().build_enum_type (int_type);
-  for (i = 0; i < TYPE_NFIELDS (type); ++i)
+  for (i = 0; i < type->num_fields (); ++i)
     {
       context->plugin ().build_add_enum_constant
-	(result, TYPE_FIELD_NAME (type, i), TYPE_FIELD_ENUMVAL (type, i));
+	(result, type->field (i).name (), type->field (i).loc_enumval ());
     }
 
   context->plugin ().finish_enum_type (result);
@@ -153,9 +153,9 @@ convert_func (compile_c_instance *contex
   int i;
   gcc_type result, return_type;
   struct gcc_type_array array;
-  int is_varargs = TYPE_VARARGS (type) || !TYPE_PROTOTYPED (type);
+  int is_varargs = type->has_varargs () || !type->is_prototyped ();
 
-  struct type *target_type = TYPE_TARGET_TYPE (type);
+  struct type *target_type = type->target_type ();
 
   /* Functions with no debug info have no return type.  Ideally we'd
      want to fallback to the type of the cast just before the
@@ -164,10 +164,7 @@ convert_func (compile_c_instance *contex
      GDB's parser used to do.  */
   if (target_type == NULL)
     {
-      if (TYPE_OBJFILE_OWNED (type))
-	target_type = objfile_type (TYPE_OWNER (type).objfile)->builtin_int;
-      else
-	target_type = builtin_type (TYPE_OWNER (type).gdbarch)->builtin_int;
+      target_type = builtin_type (type->arch ())->builtin_int;
       warning (_("function has unknown return type; assuming int"));
     }
 
@@ -175,14 +172,14 @@ convert_func (compile_c_instance *contex
      types.  Those are impossible in C, though.  */
   return_type = context->convert_type (target_type);
 
-  array.n_elements = TYPE_NFIELDS (type);
-  array.elements = XNEWVEC (gcc_type, TYPE_NFIELDS (type));
-  for (i = 0; i < TYPE_NFIELDS (type); ++i)
-    array.elements[i] = context->convert_type (TYPE_FIELD_TYPE (type, i));
+  array.n_elements = type->num_fields ();
+  std::vector<gcc_type> elements (array.n_elements);
+  array.elements = elements.data ();
+  for (i = 0; i < type->num_fields (); ++i)
+    array.elements[i] = context->convert_type (type->field (i).type ());
 
   result = context->plugin ().build_function_type (return_type,
 						   &array, is_varargs);
-  xfree (array.elements);
 
   return result;
 }
@@ -194,18 +191,18 @@ convert_int (compile_c_instance *context
 {
   if (context->plugin ().version () >= GCC_C_FE_VERSION_1)
     {
-      if (TYPE_NOSIGN (type))
+      if (type->has_no_signedness ())
 	{
-	  gdb_assert (TYPE_LENGTH (type) == 1);
+	  gdb_assert (type->length () == 1);
 	  return context->plugin ().char_type ();
 	}
-      return context->plugin ().int_type (TYPE_UNSIGNED (type),
-					  TYPE_LENGTH (type),
-					  TYPE_NAME (type));
+      return context->plugin ().int_type (type->is_unsigned (),
+					  type->length (),
+					  type->name ());
     }
   else
-    return context->plugin ().int_type_v0 (TYPE_UNSIGNED (type),
-					   TYPE_LENGTH (type));
+    return context->plugin ().int_type_v0 (type->is_unsigned (),
+					   type->length ());
 }
 
 /* Convert a floating-point type to its gcc representation.  */
@@ -214,10 +211,10 @@ static gcc_type
 convert_float (compile_c_instance *context, struct type *type)
 {
   if (context->plugin ().version () >= GCC_C_FE_VERSION_1)
-    return context->plugin ().float_type (TYPE_LENGTH (type),
-					  TYPE_NAME (type));
+    return context->plugin ().float_type (type->length (),
+					  type->name ());
   else
-    return context->plugin ().float_type_v0 (TYPE_LENGTH (type));
+    return context->plugin ().float_type_v0 (type->length ());
 }
 
 /* Convert the 'void' type to its gcc representation.  */
@@ -254,7 +251,8 @@ convert_qualified (compile_c_instance *c
   if (TYPE_RESTRICT (type))
     quals |= GCC_QUALIFIER_RESTRICT;
 
-  return context->plugin ().build_qualified_type (unqual_converted, quals);
+  return context->plugin ().build_qualified_type (unqual_converted,
+						  quals.raw ());
 }
 
 /* Convert a complex type to its gcc representation.  */
@@ -262,7 +260,7 @@ convert_qualified (compile_c_instance *c
 static gcc_type
 convert_complex (compile_c_instance *context, struct type *type)
 {
-  gcc_type base = context->convert_type (TYPE_TARGET_TYPE (type));
+  gcc_type base = context->convert_type (type->target_type ());
 
   return context->plugin ().build_complex_type (base);
 }
@@ -277,12 +275,12 @@ convert_type_basic (compile_c_instance *
 {
   /* If we are converting a qualified type, first convert the
      unqualified type and then apply the qualifiers.  */
-  if ((TYPE_INSTANCE_FLAGS (type) & (TYPE_INSTANCE_FLAG_CONST
-				     | TYPE_INSTANCE_FLAG_VOLATILE
-				     | TYPE_INSTANCE_FLAG_RESTRICT)) != 0)
+  if ((type->instance_flags () & (TYPE_INSTANCE_FLAG_CONST
+				  | TYPE_INSTANCE_FLAG_VOLATILE
+				  | TYPE_INSTANCE_FLAG_RESTRICT)) != 0)
     return convert_qualified (context, type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_PTR:
       return convert_pointer (context, type);
@@ -321,11 +319,7 @@ convert_type_basic (compile_c_instance *
 	   the cast-to type as the variable's type, like GDB's
 	   built-in parser does.  For now, assume "int" like GDB's
 	   built-in parser used to do, but at least warn.  */
-	struct type *fallback;
-	if (TYPE_OBJFILE_OWNED (type))
-	  fallback = objfile_type (TYPE_OWNER (type).objfile)->builtin_int;
-	else
-	  fallback = builtin_type (TYPE_OWNER (type).gdbarch)->builtin_int;
+	struct type *fallback = builtin_type (type->arch ())->builtin_int;
 	warning (_("variable has unknown type; assuming int"));
 	return convert_int (context, fallback);
       }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile.h ./gdb/compile/compile.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Header file for Compile and inject module.
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -18,12 +18,129 @@
 #ifndef COMPILE_COMPILE_H
 #define COMPILE_COMPILE_H
 
+#include "gcc-c-interface.h"
+
 struct ui_file;
 struct gdbarch;
 struct dwarf2_per_cu_data;
+struct dwarf2_per_objfile;
 struct symbol;
 struct dynamic_prop;
 
+/* An object of this type holds state associated with a given
+   compilation job.  */
+
+class compile_instance
+{
+public:
+  compile_instance (struct gcc_base_context *gcc_fe, const char *options);
+
+  virtual ~compile_instance ()
+  {
+    m_gcc_fe->ops->destroy (m_gcc_fe);
+  }
+
+  /* Returns the GCC options to be passed during compilation.  */
+  const std::string &gcc_target_options () const
+  {
+    return m_gcc_target_options;
+  }
+
+  /* Query the type cache for TYPE, returning the compiler's
+     type for it in RET.  */
+  bool get_cached_type (struct type *type, gcc_type *ret) const;
+
+  /* Insert GCC_TYPE into the type cache for TYPE.
+
+     It is ok for a given type to be inserted more than once, provided that
+     the exact same association is made each time.  */
+  void insert_type (struct type *type, gcc_type gcc_type);
+
+  /* Associate SYMBOL with some error text.  */
+  void insert_symbol_error (const struct symbol *sym, const char *text);
+
+  /* Emit the error message corresponding to SYM, if one exists, and
+     arrange for it not to be emitted again.  */
+  void error_symbol_once (const struct symbol *sym);
+
+  /* These currently just forward to the underlying ops
+     vtable.  */
+
+  /* Set the plug-in print callback.  */
+  void set_print_callback (void (*print_function) (void *, const char *),
+			   void *datum);
+
+  /* Return the plug-in's front-end version.  */
+  unsigned int version () const;
+
+  /* Set the plug-in's verbosity level.  Nop for GCC_FE_VERSION_0.  */
+  void set_verbose (int level);
+
+  /* Set the plug-in driver program.  Nop for GCC_FE_VERSION_0.  */
+  void set_driver_filename (const char *filename);
+
+  /* Set the regular expression used to match the configury triplet
+     prefix to the compiler.  Nop for GCC_FE_VERSION_0.  */
+  void set_triplet_regexp (const char *regexp);
+
+  /* Set compilation arguments.  REGEXP is only used for protocol
+     version GCC_FE_VERSION_0.  */
+  gdb::unique_xmalloc_ptr<char> set_arguments (int argc, char **argv,
+					       const char *regexp = NULL);
+
+  /* Set the filename of the program to compile.  Nop for GCC_FE_VERSION_0.  */
+  void set_source_file (const char *filename);
+
+  /* Compile the previously specified source file to FILENAME.
+     VERBOSE_LEVEL is only used for protocol version GCC_FE_VERSION_0.  */
+  bool compile (const char *filename, int verbose_level = -1);
+
+  /* Set the scope type for this compile.  */
+  void set_scope (enum compile_i_scope_types scope)
+  {
+    m_scope = scope;
+  }
+
+  /* Return the scope type.  */
+  enum compile_i_scope_types scope () const
+  {
+    return m_scope;
+  }
+
+  /* Set the block to be used for symbol searches.  */
+  void set_block (const struct block *block)
+  {
+    m_block = block;
+  }
+
+  /* Return the search block.  */
+  const struct block *block () const
+  {
+    return m_block;
+  }
+
+protected:
+
+  /* The GCC front end.  */
+  struct gcc_base_context *m_gcc_fe;
+
+  /* The "scope" of this compilation.  */
+  enum compile_i_scope_types m_scope;
+
+  /* The block in which an expression is being parsed.  */
+  const struct block *m_block;
+
+  /* Specify "-std=gnu11", "-std=gnu++11" or similar.  These options are put
+     after CU's DW_AT_producer compilation options to override them.  */
+  std::string m_gcc_target_options;
+
+  /* Map from gdb types to gcc types.  */
+  htab_up m_type_map;
+
+  /* Map from gdb symbols to gcc error messages to emit.  */
+  htab_up m_symbol_err_map;
+};
+
 /* Public function that is called from compile_control case in the
    expression command.  GDB returns either a CMD, or a CMD_STRING, but
    never both.  */
@@ -53,6 +170,9 @@ extern void eval_compile_command (struct
    OPT_PTR and OP_END are the bounds of the DWARF expression.
 
    PER_CU is the per-CU object used for looking up various other
+   things.
+
+   PER_OBJFILE is the per-objfile object also used for looking up various other
    things.  */
 
 extern void compile_dwarf_expr_to_c (string_file *stream,
@@ -60,11 +180,12 @@ extern void compile_dwarf_expr_to_c (str
 				     struct symbol *sym,
 				     CORE_ADDR pc,
 				     struct gdbarch *arch,
-				     unsigned char *registers_used,
+				     std::vector<bool> &registers_used,
 				     unsigned int addr_size,
 				     const gdb_byte *op_ptr,
 				     const gdb_byte *op_end,
-				     struct dwarf2_per_cu_data *per_cu);
+				     dwarf2_per_cu_data *per_cu,
+				     dwarf2_per_objfile *per_objfile);
 
 /* Compile a DWARF bounds expression to C, suitable for use by the
    compiler.
@@ -88,6 +209,9 @@ extern void compile_dwarf_expr_to_c (str
    OPT_PTR and OP_END are the bounds of the DWARF expression.
 
    PER_CU is the per-CU object used for looking up various other
+   things.
+
+   PER_OBJFILE is the per-objfile object also used for looking up various other
    things.  */
 
 extern void compile_dwarf_bounds_to_c (string_file *stream,
@@ -95,11 +219,12 @@ extern void compile_dwarf_bounds_to_c (s
 				       const struct dynamic_prop *prop,
 				       struct symbol *sym, CORE_ADDR pc,
 				       struct gdbarch *arch,
-				       unsigned char *registers_used,
+				       std::vector<bool> &registers_used,
 				       unsigned int addr_size,
 				       const gdb_byte *op_ptr,
 				       const gdb_byte *op_end,
-				       struct dwarf2_per_cu_data *per_cu);
+				       dwarf2_per_cu_data *per_cu,
+				       dwarf2_per_objfile *per_objfile);
 
 extern void compile_print_value (struct value *val, void *data_voidp);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-internal.h ./gdb/compile/compile-internal.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-internal.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-internal.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB compile command and supporting functions.
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -18,139 +18,12 @@
 #define COMPILE_COMPILE_INTERNAL_H
 
 #include "gcc-c-interface.h"
+#include "gdbsupport/gdb-hashtab.h"
 
 /* Debugging flag for the "compile" family of commands.  */
 
 extern bool compile_debug;
 
-struct block;
-
-/* An object that maps a gdb type to a gcc type.  */
-
-struct type_map_instance
-{
-  /* The gdb type.  */
-
-  struct type *type;
-
-  /* The corresponding gcc type handle.  */
-
-  gcc_type gcc_type_handle;
-};
-
-/* An object of this type holds state associated with a given
-   compilation job.  */
-
-class compile_instance
-{
-public:
-  compile_instance (struct gcc_base_context *gcc_fe, const char *options);
-
-  virtual ~compile_instance ()
-  {
-    m_gcc_fe->ops->destroy (m_gcc_fe);
-  }
-
-  /* Returns the GCC options to be passed during compilation.  */
-  const std::string &gcc_target_options () const
-  {
-    return m_gcc_target_options;
-  }
-
-  /* Query the type cache for TYPE, returning the compiler's
-     type for it in RET.  */
-  bool get_cached_type (struct type *type, gcc_type *ret) const;
-
-  /* Insert GCC_TYPE into the type cache for TYPE.
-
-     It is ok for a given type to be inserted more than once, provided that
-     the exact same association is made each time.  */
-  void insert_type (struct type *type, gcc_type gcc_type);
-
-  /* Associate SYMBOL with some error text.  */
-  void insert_symbol_error (const struct symbol *sym, const char *text);
-
-  /* Emit the error message corresponding to SYM, if one exists, and
-     arrange for it not to be emitted again.  */
-  void error_symbol_once (const struct symbol *sym);
-
-  /* These currently just forward to the underlying ops
-     vtable.  */
-
-  /* Set the plug-in print callback.  */
-  void set_print_callback (void (*print_function) (void *, const char *),
-			   void *datum);
-
-  /* Return the plug-in's front-end version.  */
-  unsigned int version () const;
-
-  /* Set the plug-in's verbosity level.  Nop for GCC_FE_VERSION_0.  */
-  void set_verbose (int level);
-
-  /* Set the plug-in driver program.  Nop for GCC_FE_VERSION_0.  */
-  void set_driver_filename (const char *filename);
-
-  /* Set the regular expression used to match the configury triplet
-     prefix to the compiler.  Nop for GCC_FE_VERSION_0.  */
-  void set_triplet_regexp (const char *regexp);
-
-  /* Set compilation arguments.  REGEXP is only used for protocol
-     version GCC_FE_VERSION_0.  */
-  char *set_arguments (int argc, char **argv, const char *regexp = NULL);
-
-  /* Set the filename of the program to compile.  Nop for GCC_FE_VERSION_0.  */
-  void set_source_file (const char *filename);
-
-  /* Compile the previously specified source file to FILENAME.
-     VERBOSE_LEVEL is only used for protocol version GCC_FE_VERSION_0.  */
-  bool compile (const char *filename, int verbose_level = -1);
-
-  /* Set the scope type for this compile.  */
-  void set_scope (enum compile_i_scope_types scope)
-  {
-    m_scope = scope;
-  }
-
-  /* Return the scope type.  */
-  enum compile_i_scope_types scope () const
-  {
-    return m_scope;
-  }
-
-  /* Set the block to be used for symbol searches.  */
-  void set_block (const struct block *block)
-  {
-    m_block = block;
-  }
-
-  /* Return the search block.  */
-  const struct block *block () const
-  {
-    return m_block;
-  }
-
-protected:
-
-  /* The GCC front end.  */
-  struct gcc_base_context *m_gcc_fe;
-
-  /* The "scope" of this compilation.  */
-  enum compile_i_scope_types m_scope;
-
-  /* The block in which an expression is being parsed.  */
-  const struct block *m_block;
-
-  /* Specify "-std=gnu11", "-std=gnu++11" or similar.  These options are put
-     after CU's DW_AT_producer compilation options to override them.  */
-  std::string m_gcc_target_options;
-
-  /* Map from gdb types to gcc types.  */
-  htab_up m_type_map;
-
-  /* Map from gdb symbols to gcc error messages to emit.  */
-  htab_up m_symbol_err_map;
-};
-
 /* Define header and footers for different scopes.  */
 
 /* A simple scope just declares a function named "_gdb_expr", takes no
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-loc2c.c ./gdb/compile/compile-loc2c.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-loc2c.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-loc2c.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert a DWARF location expression to C
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,15 +19,17 @@
 
 #include "defs.h"
 #include "dwarf2.h"
-#include "dwarf2expr.h"
-#include "dwarf2loc.h"
+#include "objfiles.h"
+#include "dwarf2/expr.h"
+#include "dwarf2/loc.h"
+#include "dwarf2/read.h"
 #include "ui-file.h"
 #include "utils.h"
 #include "compile-internal.h"
 #include "compile-c.h"
 #include "compile.h"
 #include "block.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "gdbsupport/gdb_vecs.h"
 #include "value.h"
 #include "gdbarch.h"
@@ -433,9 +435,9 @@ compute_stack_depth (enum bfd_endian byt
 static void
 push (int indent, string_file *stream, ULONGEST l)
 {
-  fprintfi_filtered (indent, stream,
-		     "__gdb_stack[++__gdb_tos] = (" GCC_UINTPTR ") %s;\n",
-		     hex_string (l));
+  gdb_printf (stream,
+	      "%*s__gdb_stack[++__gdb_tos] = (" GCC_UINTPTR ") %s;\n",
+	      indent, "", hex_string (l));
 }
 
 /* Emit code to push an arbitrary expression.  This works like
@@ -449,13 +451,13 @@ pushf (int indent, string_file *stream,
 {
   va_list args;
 
-  fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos + 1] = ");
+  gdb_printf (stream, "%*s__gdb_stack[__gdb_tos + 1] = ", indent, "");
   va_start (args, format);
   stream->vprintf (format, args);
   va_end (args);
   stream->puts (";\n");
 
-  fprintfi_filtered (indent, stream, "++__gdb_tos;\n");
+  gdb_printf (stream, "%*s++__gdb_tos;\n", indent, "");
 }
 
 /* Emit code for a unary expression -- one which operates in-place on
@@ -469,7 +471,7 @@ unary (int indent, string_file *stream,
 {
   va_list args;
 
-  fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos] = ");
+  gdb_printf (stream, "%*s__gdb_stack[__gdb_tos] = ", indent, "");
   va_start (args, format);
   stream->vprintf (format, args);
   va_end (args);
@@ -486,12 +488,12 @@ binary (int indent, string_file *stream,
 {
   va_list args;
 
-  fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos - 1] = ");
+  gdb_printf (stream, "%*s__gdb_stack[__gdb_tos - 1] = ", indent, "");
   va_start (args, format);
   stream->vprintf (format, args);
   va_end (args);
   stream->puts (";\n");
-  fprintfi_filtered (indent, stream, "--__gdb_tos;\n");
+  gdb_printf (stream, "%*s--__gdb_tos;\n", indent, "");
 }
 
 /* Print the name of a label given its "SCOPE", an arbitrary integer
@@ -504,18 +506,32 @@ print_label (string_file *stream, unsign
   stream->printf ("__label_%u_%s", scope, pulongest (target));
 }
 
+/* Note that a register was used.  */
+
+static void
+note_register (int regnum, std::vector<bool> &registers_used)
+{
+  gdb_assert (regnum >= 0);
+  /* If the expression uses a cooked register, then we currently can't
+     compile it.  We would need a gdbarch method to handle this
+     situation.  */
+  if (regnum >= registers_used.size ())
+    error (_("Expression uses \"cooked\" register and cannot be compiled."));
+  registers_used[regnum] = true;
+}
+
 /* Emit code that pushes a register's address on the stack.
    REGISTERS_USED is an out parameter which is updated to note which
    register was needed by this expression.  */
 
 static void
 pushf_register_address (int indent, string_file *stream,
-			unsigned char *registers_used,
+			std::vector<bool> &registers_used,
 			struct gdbarch *gdbarch, int regnum)
 {
   std::string regname = compile_register_name_mangled (gdbarch, regnum);
 
-  registers_used[regnum] = 1;
+  note_register (regnum, registers_used);
   pushf (indent, stream,
 	 "(" GCC_UINTPTR ") &" COMPILE_I_SIMPLE_REGISTER_ARG_NAME "->%s",
 	 regname.c_str ());
@@ -528,12 +544,12 @@ pushf_register_address (int indent, stri
 
 static void
 pushf_register (int indent, string_file *stream,
-		unsigned char *registers_used,
+		std::vector<bool> &registers_used,
 		struct gdbarch *gdbarch, int regnum, uint64_t offset)
 {
   std::string regname = compile_register_name_mangled (gdbarch, regnum);
 
-  registers_used[regnum] = 1;
+  note_register (regnum, registers_used);
   if (offset == 0)
     pushf (indent, stream, COMPILE_I_SIMPLE_REGISTER_ARG_NAME "->%s",
 	   regname.c_str ());
@@ -578,11 +594,12 @@ do_compile_dwarf_expr_to_c (int indent,
 			    const char *result_name,
 			    struct symbol *sym, CORE_ADDR pc,
 			    struct gdbarch *arch,
-			    unsigned char *registers_used,
+			    std::vector<bool> &registers_used,
 			    unsigned int addr_size,
 			    const gdb_byte *op_ptr, const gdb_byte *op_end,
 			    CORE_ADDR *initial,
-			    struct dwarf2_per_cu_data *per_cu)
+			    dwarf2_per_cu_data *per_cu,
+			    dwarf2_per_objfile *per_objfile)
 {
   /* We keep a counter so that labels and other objects we create have
      unique names.  */
@@ -597,9 +614,9 @@ do_compile_dwarf_expr_to_c (int indent,
 
   ++scope;
 
-  fprintfi_filtered (indent, stream, "__attribute__ ((unused)) %s %s;\n",
-		     type_name, result_name);
-  fprintfi_filtered (indent, stream, "{\n");
+  gdb_printf (stream, "%*s__attribute__ ((unused)) %s %s;\n",
+	      indent, "", type_name, result_name);
+  gdb_printf (stream, "%*s{\n", indent, "");
   indent += 2;
 
   stack_depth = compute_stack_depth (byte_order, addr_size,
@@ -616,7 +633,7 @@ do_compile_dwarf_expr_to_c (int indent,
      offset by hand seemed too hackish.  */
   if (is_tls)
     {
-      struct frame_info *frame = get_selected_frame (NULL);
+      frame_info_ptr frame = get_selected_frame (NULL);
       struct value *val;
 
       if (frame == NULL)
@@ -625,7 +642,7 @@ do_compile_dwarf_expr_to_c (int indent,
 	       sym->print_name ());
 
       val = read_var_value (sym, NULL, frame);
-      if (VALUE_LVAL (val) != lval_memory)
+      if (val->lval () != lval_memory)
 	error (_("Symbol \"%s\" cannot be used for compilation evaluation "
 		 "as its address has not been found."),
 	       sym->print_name ());
@@ -635,19 +652,19 @@ do_compile_dwarf_expr_to_c (int indent,
 		 "compiled code."),
 	       sym->print_name ());
 
-      fprintfi_filtered (indent, stream, "%s = %s;\n",
-			 result_name,
-			 core_addr_to_string (value_address (val)));
-      fprintfi_filtered (indent - 2, stream, "}\n");
+      gdb_printf (stream, "%*s%s = %s;\n",
+		  indent, "", result_name,
+		  core_addr_to_string (val->address ()));
+      gdb_printf (stream, "%*s}\n", indent - 2, "");
       return;
     }
 
-  fprintfi_filtered (indent, stream, GCC_UINTPTR " __gdb_stack[%d];\n",
-		     stack_depth);
+  gdb_printf (stream, "%*s" GCC_UINTPTR " __gdb_stack[%d];\n",
+	      indent, "", stack_depth);
 
   if (need_tempvar)
-    fprintfi_filtered (indent, stream, GCC_UINTPTR " __gdb_tmp;\n");
-  fprintfi_filtered (indent, stream, "int __gdb_tos = -1;\n");
+    gdb_printf (stream, "%*s" GCC_UINTPTR " __gdb_tmp;\n", indent, "");
+  gdb_printf (stream, "%*sint __gdb_tos = -1;\n", indent, "");
 
   if (initial != NULL)
     pushf (indent, stream, "%s", core_addr_to_string (*initial));
@@ -658,7 +675,7 @@ do_compile_dwarf_expr_to_c (int indent,
       uint64_t uoffset, reg;
       int64_t offset;
 
-      print_spaces (indent - 2, stream);
+      stream->printf ("%*s", indent - 2, "");
       if (info[op_ptr - base].label)
 	{
 	  print_label (stream, scope, op_ptr - base);
@@ -667,8 +684,8 @@ do_compile_dwarf_expr_to_c (int indent,
       stream->printf ("/* %s */\n", get_DW_OP_name (op));
 
       /* This is handy for debugging the generated code:
-      fprintf_filtered (stream, "if (__gdb_tos != %d) abort ();\n",
-			(int) info[op_ptr - base].depth - 1);
+	 gdb_printf (stream, "if (__gdb_tos != %d) abort ();\n",
+	 (int) info[op_ptr - base].depth - 1);
       */
 
       ++op_ptr;
@@ -718,7 +735,7 @@ do_compile_dwarf_expr_to_c (int indent,
 	     index, not an address.  We don't support things like
 	     branching between the address and the TLS op.  */
 	  if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
-	    uoffset += dwarf2_per_cu_text_offset (per_cu);
+	    uoffset += per_objfile->objfile->text_section_offset ();
 	  push (indent, stream, uoffset);
 	  break;
 
@@ -875,7 +892,7 @@ do_compile_dwarf_expr_to_c (int indent,
 	    if (!b)
 	      error (_("No block found for address"));
 
-	    framefunc = block_linkage_function (b);
+	    framefunc = b->linkage_function ();
 
 	    if (!framefunc)
 	      error (_("No function found for block"));
@@ -895,7 +912,7 @@ do_compile_dwarf_expr_to_c (int indent,
 					sym, pc,
 					arch, registers_used, addr_size,
 					datastart, datastart + datalen,
-					NULL, per_cu);
+					NULL, per_cu, per_objfile);
 
 	    pushf (indent, stream, "%s + %s", fb_name, hex_string (offset));
 	  }
@@ -906,7 +923,7 @@ do_compile_dwarf_expr_to_c (int indent,
 	  break;
 
 	case DW_OP_drop:
-	  fprintfi_filtered (indent, stream, "--__gdb_tos;\n");
+	  gdb_printf (stream, "%*s--__gdb_tos;\n", indent, "");
 	  break;
 
 	case DW_OP_pick:
@@ -916,13 +933,16 @@ do_compile_dwarf_expr_to_c (int indent,
 	  break;
 
 	case DW_OP_swap:
-	  fprintfi_filtered (indent, stream,
-			     "__gdb_tmp = __gdb_stack[__gdb_tos - 1];\n");
-	  fprintfi_filtered (indent, stream,
-			     "__gdb_stack[__gdb_tos - 1] = "
-			     "__gdb_stack[__gdb_tos];\n");
-	  fprintfi_filtered (indent, stream, ("__gdb_stack[__gdb_tos] = "
-					      "__gdb_tmp;\n"));
+	  gdb_printf (stream,
+		      "%*s__gdb_tmp = __gdb_stack[__gdb_tos - 1];\n",
+		      indent, "");
+	  gdb_printf (stream,
+		      "%*s__gdb_stack[__gdb_tos - 1] = "
+		      "__gdb_stack[__gdb_tos];\n",
+		      indent, "");
+	  gdb_printf (stream, ("%*s__gdb_stack[__gdb_tos] = "
+			       "__gdb_tmp;\n"),
+		      indent, "");
 	  break;
 
 	case DW_OP_over:
@@ -930,16 +950,20 @@ do_compile_dwarf_expr_to_c (int indent,
 	  break;
 
 	case DW_OP_rot:
-	  fprintfi_filtered (indent, stream, ("__gdb_tmp = "
-					      "__gdb_stack[__gdb_tos];\n"));
-	  fprintfi_filtered (indent, stream,
-			     "__gdb_stack[__gdb_tos] = "
-			     "__gdb_stack[__gdb_tos - 1];\n");
-	  fprintfi_filtered (indent, stream,
-			     "__gdb_stack[__gdb_tos - 1] = "
-			     "__gdb_stack[__gdb_tos -2];\n");
-	  fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos - 2] = "
-			     "__gdb_tmp;\n");
+	  gdb_printf (stream, ("%*s__gdb_tmp = "
+			       "__gdb_stack[__gdb_tos];\n"),
+		      indent, "");
+	  gdb_printf (stream,
+		      "%*s__gdb_stack[__gdb_tos] = "
+		      "__gdb_stack[__gdb_tos - 1];\n",
+		      indent, "");
+	  gdb_printf (stream,
+		      "%*s__gdb_stack[__gdb_tos - 1] = "
+		      "__gdb_stack[__gdb_tos -2];\n",
+		      indent, "");
+	  gdb_printf (stream, "%*s__gdb_stack[__gdb_tos - 2] = "
+		      "__gdb_tmp;\n",
+		      indent, "");
 	  break;
 
 	case DW_OP_deref:
@@ -960,11 +984,11 @@ do_compile_dwarf_expr_to_c (int indent,
 
 	    /* Cast to a pointer of the desired type, then
 	       dereference.  */
-	    fprintfi_filtered (indent, stream,
-			       "__gdb_stack[__gdb_tos] = "
-			       "*((__gdb_int_%s *) "
-			       "__gdb_stack[__gdb_tos]);\n",
-			       mode);
+	    gdb_printf (stream,
+			"%*s__gdb_stack[__gdb_tos] = "
+			"*((__gdb_int_%s *) "
+			"__gdb_stack[__gdb_tos]);\n",
+			indent, "", mode);
 	  }
 	  break;
 
@@ -1076,7 +1100,7 @@ do_compile_dwarf_expr_to_c (int indent,
 					    sym, pc, arch, registers_used,
 					    addr_size,
 					    cfa_start, cfa_end,
-					    &text_offset, per_cu);
+					    &text_offset, per_cu, per_objfile);
 		pushf (indent, stream, "%s", cfa_name);
 	      }
 	  }
@@ -1086,7 +1110,7 @@ do_compile_dwarf_expr_to_c (int indent,
 	case DW_OP_skip:
 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
 	  op_ptr += 2;
-	  fprintfi_filtered (indent, stream, "goto ");
+	  gdb_printf (stream, "%*sgoto ", indent, "");
 	  print_label (stream, scope, op_ptr + offset - base);
 	  stream->puts (";\n");
 	  break;
@@ -1094,9 +1118,10 @@ do_compile_dwarf_expr_to_c (int indent,
 	case DW_OP_bra:
 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
 	  op_ptr += 2;
-	  fprintfi_filtered (indent, stream,
-			     "if ((( " GCC_INTPTR
-			     ") __gdb_stack[__gdb_tos--]) != 0) goto ");
+	  gdb_printf (stream,
+		      "%*sif ((( " GCC_INTPTR
+		      ") __gdb_stack[__gdb_tos--]) != 0) goto ",
+		      indent, "");
 	  print_label (stream, scope, op_ptr + offset - base);
 	  stream->puts (";\n");
 	  break;
@@ -1109,9 +1134,9 @@ do_compile_dwarf_expr_to_c (int indent,
 	}
     }
 
-  fprintfi_filtered (indent, stream, "%s = __gdb_stack[__gdb_tos];\n",
-		     result_name);
-  fprintfi_filtered (indent - 2, stream, "}\n");
+  gdb_printf (stream, "%*s%s = __gdb_stack[__gdb_tos];\n",
+	      indent, "", result_name);
+  gdb_printf (stream, "%*s}\n", indent - 2, "");
 }
 
 /* See compile.h.  */
@@ -1119,14 +1144,16 @@ do_compile_dwarf_expr_to_c (int indent,
 void
 compile_dwarf_expr_to_c (string_file *stream, const char *result_name,
 			 struct symbol *sym, CORE_ADDR pc,
-			 struct gdbarch *arch, unsigned char *registers_used,
+			 struct gdbarch *arch,
+			 std::vector<bool> &registers_used,
 			 unsigned int addr_size,
 			 const gdb_byte *op_ptr, const gdb_byte *op_end,
-			 struct dwarf2_per_cu_data *per_cu)
+			 dwarf2_per_cu_data *per_cu,
+			 dwarf2_per_objfile *per_objfile)
 {
   do_compile_dwarf_expr_to_c (2, stream, GCC_UINTPTR, result_name, sym, pc,
 			      arch, registers_used, addr_size, op_ptr, op_end,
-			      NULL, per_cu);
+			      NULL, per_cu, per_objfile);
 }
 
 /* See compile.h.  */
@@ -1136,12 +1163,15 @@ compile_dwarf_bounds_to_c (string_file *
 			   const char *result_name,
 			   const struct dynamic_prop *prop,
 			   struct symbol *sym, CORE_ADDR pc,
-			   struct gdbarch *arch, unsigned char *registers_used,
+			   struct gdbarch *arch,
+			   std::vector<bool> &registers_used,
 			   unsigned int addr_size,
 			   const gdb_byte *op_ptr, const gdb_byte *op_end,
-			   struct dwarf2_per_cu_data *per_cu)
+			   dwarf2_per_cu_data *per_cu,
+			   dwarf2_per_objfile *per_objfile)
 {
   do_compile_dwarf_expr_to_c (2, stream, "unsigned long ", result_name,
 			      sym, pc, arch, registers_used,
-			      addr_size, op_ptr, op_end, NULL, per_cu);
+			      addr_size, op_ptr, op_end, NULL, per_cu,
+			      per_objfile);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-object-load.c ./gdb/compile/compile-object-load.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-object-load.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-object-load.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Load module for 'compile' command.
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -52,7 +52,8 @@ munmap_list::~munmap_list ()
     {
       try
 	{
-	  gdbarch_infcall_munmap (target_gdbarch (), item.addr, item.size);
+	  gdbarch_infcall_munmap (current_inferior ()->arch (),
+				  item.addr, item.size);
 	}
       catch (const gdb_exception_error &ex)
 	{
@@ -62,34 +63,50 @@ munmap_list::~munmap_list ()
     }
 }
 
-/* Helper data for setup_sections.  */
+/* A data structure that is used to lay out sections of our objfile in
+   inferior memory.  */
 
 struct setup_sections_data
 {
+  explicit setup_sections_data (bfd *abfd)
+    : m_bfd (abfd),
+      m_last_section_first (abfd->sections)
+  {
+  }
+
+  /* Place all ABFD sections next to each other obeying all
+     constraints.  */
+  void setup_one_section (asection *sect);
+
+  /* List of inferior mmap ranges where setup_sections should add its
+     next range.  */
+  struct munmap_list munmap_list;
+
+private:
+
+  /* The BFD.  */
+  bfd *m_bfd;
+
   /* Size of all recent sections with matching LAST_PROT.  */
-  CORE_ADDR last_size;
+  CORE_ADDR m_last_size = 0;
 
   /* First section matching LAST_PROT.  */
-  asection *last_section_first;
+  asection *m_last_section_first;
 
   /* Memory protection like the prot parameter of gdbarch_infcall_mmap. */
-  unsigned last_prot;
+  unsigned m_last_prot = -1;
 
   /* Maximum of alignments of all sections matching LAST_PROT.
      This value is always at least 1.  This value is always a power of 2.  */
-  CORE_ADDR last_max_alignment;
+  CORE_ADDR m_last_max_alignment = -1;
 
-  /* List of inferior mmap ranges where setup_sections should add its
-     next range.  */
-  std::unique_ptr<struct munmap_list> munmap_list;
 };
 
-/* Place all ABFD sections next to each other obeying all constraints.  */
+/* See setup_sections_data.  */
 
-static void
-setup_sections (bfd *abfd, asection *sect, void *data_voidp)
+void
+setup_sections_data::setup_one_section (asection *sect)
 {
-  struct setup_sections_data *data = (struct setup_sections_data *) data_voidp;
   CORE_ADDR alignment;
   unsigned prot;
 
@@ -110,67 +127,67 @@ setup_sections (bfd *abfd, asection *sec
 	prot |= GDB_MMAP_PROT_EXEC;
 
       if (compile_debug)
-	fprintf_unfiltered (gdb_stdlog,
-			    "module \"%s\" section \"%s\" size %s prot %u\n",
-			    bfd_get_filename (abfd),
-			    bfd_section_name (sect),
-			    paddress (target_gdbarch (),
-				      bfd_section_size (sect)),
-			    prot);
+	gdb_printf (gdb_stdlog,
+		    "module \"%s\" section \"%s\" size %s prot %u\n",
+		    bfd_get_filename (m_bfd),
+		    bfd_section_name (sect),
+		    paddress (current_inferior ()->arch (),
+			      bfd_section_size (sect)),
+		    prot);
     }
   else
     prot = -1;
 
   if (sect == NULL
-      || (data->last_prot != prot && bfd_section_size (sect) != 0))
+      || (m_last_prot != prot && bfd_section_size (sect) != 0))
     {
       CORE_ADDR addr;
       asection *sect_iter;
 
-      if (data->last_size != 0)
+      if (m_last_size != 0)
 	{
-	  addr = gdbarch_infcall_mmap (target_gdbarch (), data->last_size,
-				       data->last_prot);
-	  data->munmap_list->add (addr, data->last_size);
+	  addr = gdbarch_infcall_mmap (current_inferior ()->arch (),
+				       m_last_size, m_last_prot);
+	  munmap_list.add (addr, m_last_size);
 	  if (compile_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"allocated %s bytes at %s prot %u\n",
-				paddress (target_gdbarch (), data->last_size),
-				paddress (target_gdbarch (), addr),
-				data->last_prot);
+	    gdb_printf (gdb_stdlog,
+			"allocated %s bytes at %s prot %u\n",
+			paddress (current_inferior ()->arch (), m_last_size),
+			paddress (current_inferior ()->arch (), addr),
+			m_last_prot);
 	}
       else
 	addr = 0;
 
-      if ((addr & (data->last_max_alignment - 1)) != 0)
+      if ((addr & (m_last_max_alignment - 1)) != 0)
 	error (_("Inferior compiled module address %s "
 		 "is not aligned to BFD required %s."),
-	       paddress (target_gdbarch (), addr),
-	       paddress (target_gdbarch (), data->last_max_alignment));
+	       paddress (current_inferior ()->arch (), addr),
+	       paddress (current_inferior ()->arch (), m_last_max_alignment));
 
-      for (sect_iter = data->last_section_first; sect_iter != sect;
+      for (sect_iter = m_last_section_first; sect_iter != sect;
 	   sect_iter = sect_iter->next)
 	if ((bfd_section_flags (sect_iter) & SEC_ALLOC) != 0)
 	  bfd_set_section_vma (sect_iter, addr + bfd_section_vma (sect_iter));
 
-      data->last_size = 0;
-      data->last_section_first = sect;
-      data->last_prot = prot;
-      data->last_max_alignment = 1;
+      m_last_size = 0;
+      m_last_section_first = sect;
+      m_last_prot = prot;
+      m_last_max_alignment = 1;
     }
 
   if (sect == NULL)
     return;
 
   alignment = ((CORE_ADDR) 1) << bfd_section_alignment (sect);
-  data->last_max_alignment = std::max (data->last_max_alignment, alignment);
+  m_last_max_alignment = std::max (m_last_max_alignment, alignment);
 
-  data->last_size = (data->last_size + alignment - 1) & -alignment;
+  m_last_size = (m_last_size + alignment - 1) & -alignment;
 
-  bfd_set_section_vma (sect, data->last_size);
+  bfd_set_section_vma (sect, m_last_size);
 
-  data->last_size += bfd_section_size (sect);
-  data->last_size = (data->last_size + alignment - 1) & -alignment;
+  m_last_size += bfd_section_size (sect);
+  m_last_size = (m_last_size + alignment - 1) & -alignment;
 }
 
 /* Helper for link_callbacks callbacks vector.  */
@@ -192,7 +209,7 @@ link_callbacks_multiple_definition (stru
 
 static void
 link_callbacks_warning (struct bfd_link_info *link_info, const char *xwarning,
-                        const char *symbol, bfd *abfd, asection *section,
+			const char *symbol, bfd *abfd, asection *section,
 			bfd_vma address)
 {
   warning (_("Compiled module \"%s\" section \"%s\": warning: %s"),
@@ -371,8 +388,8 @@ copy_sections (bfd *abfd, asection *sect
     error (_("Cannot write compiled module \"%s\" section \"%s\" "
 	     "to inferior memory range %s-%s."),
 	   bfd_get_filename (abfd), bfd_section_name (sect),
-	   paddress (target_gdbarch (), inferior_addr),
-	   paddress (target_gdbarch (),
+	   paddress (current_inferior ()->arch (), inferior_addr),
+	   paddress (current_inferior ()->arch (),
 		     inferior_addr + bfd_section_size (sect)));
 }
 
@@ -402,8 +419,11 @@ get_out_value_type (struct symbol *func_
   int nblocks = 0;
   int block_loop = 0;
 
-  bv = SYMTAB_BLOCKVECTOR (func_sym->owner.symtab);
-  nblocks = BLOCKVECTOR_NBLOCKS (bv);
+  lookup_name_info func_matcher (GCC_FE_WRAPPER_FUNCTION,
+				 symbol_name_match_type::SEARCH_NAME);
+
+  bv = func_sym->symtab ()->compunit ()->blockvector ();
+  nblocks = bv->num_blocks ();
 
   gdb_ptr_type_sym = NULL;
   for (block_loop = 0; block_loop < nblocks; block_loop++)
@@ -411,49 +431,46 @@ get_out_value_type (struct symbol *func_
       struct symbol *function = NULL;
       const struct block *function_block;
 
-      block = BLOCKVECTOR_BLOCK (bv, block_loop);
-      if (BLOCK_FUNCTION (block) != NULL)
+      block = bv->block (block_loop);
+      if (block->function () != NULL)
 	continue;
       gdb_val_sym = block_lookup_symbol (block,
 					 COMPILE_I_EXPR_VAL,
 					 symbol_name_match_type::SEARCH_NAME,
-					 VAR_DOMAIN);
+					 SEARCH_VFT);
       if (gdb_val_sym == NULL)
 	continue;
 
       function_block = block;
-      while (function_block != BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)
-	     && function_block != BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
+      while (function_block != bv->static_block ()
+	     && function_block != bv->global_block ())
 	{
-	  function_block = BLOCK_SUPERBLOCK (function_block);
-	  function = BLOCK_FUNCTION (function_block);
+	  function_block = function_block->superblock ();
+	  function = function_block->function ();
 	  if (function != NULL)
 	    break;
 	}
       if (function != NULL
-	  && (BLOCK_SUPERBLOCK (function_block)
-	      == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
-	  && (strcmp_iw (function->linkage_name (),
-			 GCC_FE_WRAPPER_FUNCTION)
-	      == 0))
+	  && function_block->superblock () == bv->static_block ()
+	  && symbol_matches_search_name (function, func_matcher))
 	break;
     }
   if (block_loop == nblocks)
-    error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE);
+    error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_VAL);
 
-  gdb_type = SYMBOL_TYPE (gdb_val_sym);
+  gdb_type = gdb_val_sym->type ();
   gdb_type = check_typedef (gdb_type);
 
   gdb_ptr_type_sym = block_lookup_symbol (block, COMPILE_I_EXPR_PTR_TYPE,
 					  symbol_name_match_type::SEARCH_NAME,
-					  VAR_DOMAIN);
+					  SEARCH_VFT);
   if (gdb_ptr_type_sym == NULL)
     error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE);
-  gdb_ptr_type = SYMBOL_TYPE (gdb_ptr_type_sym);
+  gdb_ptr_type = gdb_ptr_type_sym->type ();
   gdb_ptr_type = check_typedef (gdb_ptr_type);
-  if (TYPE_CODE (gdb_ptr_type) != TYPE_CODE_PTR)
+  if (gdb_ptr_type->code () != TYPE_CODE_PTR)
     error (_("Type of \"%s\" is not a pointer"), COMPILE_I_EXPR_PTR_TYPE);
-  gdb_type_from_ptr = check_typedef (TYPE_TARGET_TYPE (gdb_ptr_type));
+  gdb_type_from_ptr = check_typedef (gdb_ptr_type->target_type ());
 
   if (types_deeply_equal (gdb_type, gdb_type_from_ptr))
     {
@@ -463,28 +480,28 @@ get_out_value_type (struct symbol *func_
       return gdb_type;
     }
 
-  if (TYPE_CODE (gdb_type) != TYPE_CODE_PTR)
+  if (gdb_type->code () != TYPE_CODE_PTR)
     error (_("Invalid type code %d of symbol \"%s\" "
 	     "in compiled module \"%s\"."),
-	   TYPE_CODE (gdb_type_from_ptr), COMPILE_I_EXPR_VAL,
+	   gdb_type_from_ptr->code (), COMPILE_I_EXPR_VAL,
 	   objfile_name (objfile));
   
   retval = gdb_type_from_ptr;
-  switch (TYPE_CODE (gdb_type_from_ptr))
+  switch (gdb_type_from_ptr->code ())
     {
     case TYPE_CODE_ARRAY:
-      gdb_type_from_ptr = TYPE_TARGET_TYPE (gdb_type_from_ptr);
+      gdb_type_from_ptr = gdb_type_from_ptr->target_type ();
       break;
     case TYPE_CODE_FUNC:
       break;
     default:
       error (_("Invalid type code %d of symbol \"%s\" "
 	       "in compiled module \"%s\"."),
-	     TYPE_CODE (gdb_type_from_ptr), COMPILE_I_EXPR_PTR_TYPE,
+	     gdb_type_from_ptr->code (), COMPILE_I_EXPR_PTR_TYPE,
 	     objfile_name (objfile));
     }
   if (!types_deeply_equal (gdb_type_from_ptr,
-			   TYPE_TARGET_TYPE (gdb_type)))
+			   gdb_type->target_type ()))
     error (_("Referenced types do not match for symbols \"%s\" and \"%s\" "
 	     "in compiled module \"%s\"."),
 	   COMPILE_I_EXPR_PTR_TYPE, COMPILE_I_EXPR_VAL,
@@ -500,25 +517,25 @@ get_out_value_type (struct symbol *func_
 static struct type *
 get_regs_type (struct symbol *func_sym, struct objfile *objfile)
 {
-  struct type *func_type = SYMBOL_TYPE (func_sym);
+  struct type *func_type = func_sym->type ();
   struct type *regsp_type, *regs_type;
 
   /* No register parameter present.  */
-  if (TYPE_NFIELDS (func_type) == 0)
+  if (func_type->num_fields () == 0)
     return NULL;
 
-  regsp_type = check_typedef (TYPE_FIELD_TYPE (func_type, 0));
-  if (TYPE_CODE (regsp_type) != TYPE_CODE_PTR)
+  regsp_type = check_typedef (func_type->field (0).type ());
+  if (regsp_type->code () != TYPE_CODE_PTR)
     error (_("Invalid type code %d of first parameter of function \"%s\" "
 	     "in compiled module \"%s\"."),
-	   TYPE_CODE (regsp_type), GCC_FE_WRAPPER_FUNCTION,
+	   regsp_type->code (), GCC_FE_WRAPPER_FUNCTION,
 	   objfile_name (objfile));
 
-  regs_type = check_typedef (TYPE_TARGET_TYPE (regsp_type));
-  if (TYPE_CODE (regs_type) != TYPE_CODE_STRUCT)
+  regs_type = check_typedef (regsp_type->target_type ());
+  if (regs_type->code () != TYPE_CODE_STRUCT)
     error (_("Invalid type code %d of dereferenced first parameter "
 	     "of function \"%s\" in compiled module \"%s\"."),
-	   TYPE_CODE (regs_type), GCC_FE_WRAPPER_FUNCTION,
+	   regs_type->code (), GCC_FE_WRAPPER_FUNCTION,
 	   objfile_name (objfile));
 
   return regs_type;
@@ -530,18 +547,18 @@ get_regs_type (struct symbol *func_sym,
 static void
 store_regs (struct type *regs_type, CORE_ADDR regs_base)
 {
-  struct gdbarch *gdbarch = target_gdbarch ();
+  gdbarch *gdbarch = current_inferior ()->arch ();
   int fieldno;
 
-  for (fieldno = 0; fieldno < TYPE_NFIELDS (regs_type); fieldno++)
+  for (fieldno = 0; fieldno < regs_type->num_fields (); fieldno++)
     {
-      const char *reg_name = TYPE_FIELD_NAME (regs_type, fieldno);
-      ULONGEST reg_bitpos = TYPE_FIELD_BITPOS (regs_type, fieldno);
-      ULONGEST reg_bitsize = TYPE_FIELD_BITSIZE (regs_type, fieldno);
+      const char *reg_name = regs_type->field (fieldno).name ();
+      ULONGEST reg_bitpos = regs_type->field (fieldno).loc_bitpos ();
+      ULONGEST reg_bitsize = regs_type->field (fieldno).bitsize ();
       ULONGEST reg_offset;
-      struct type *reg_type = check_typedef (TYPE_FIELD_TYPE (regs_type,
-							      fieldno));
-      ULONGEST reg_size = TYPE_LENGTH (reg_type);
+      struct type *reg_type
+	= check_typedef (regs_type->field (fieldno).type ());
+      ULONGEST reg_size = reg_type->length ();
       int regnum;
       struct value *regval;
       CORE_ADDR inferior_addr;
@@ -554,21 +571,22 @@ store_regs (struct type *regs_type, CORE
 	       reg_name, pulongest (reg_bitpos), pulongest (reg_bitsize));
       reg_offset = reg_bitpos / 8;
 
-      if (TYPE_CODE (reg_type) != TYPE_CODE_INT
-	  && TYPE_CODE (reg_type) != TYPE_CODE_PTR)
+      if (reg_type->code () != TYPE_CODE_INT
+	  && reg_type->code () != TYPE_CODE_PTR)
 	error (_("Invalid register \"%s\" type code %d"), reg_name,
-	       TYPE_CODE (reg_type));
+	       reg_type->code ());
 
       regnum = compile_register_name_demangle (gdbarch, reg_name);
 
       regval = value_from_register (reg_type, regnum, get_current_frame ());
-      if (value_optimized_out (regval))
+      if (regval->optimized_out ())
 	error (_("Register \"%s\" is optimized out."), reg_name);
-      if (!value_entirely_available (regval))
+      if (!regval->entirely_available ())
 	error (_("Register \"%s\" is not available."), reg_name);
 
       inferior_addr = regs_base + reg_offset;
-      if (0 != target_write_memory (inferior_addr, value_contents (regval),
+      if (0 != target_write_memory (inferior_addr,
+				    regval->contents ().data (),
 				    reg_size))
 	error (_("Cannot write register \"%s\" to inferior memory at %s."),
 	       reg_name, paddress (gdbarch, inferior_addr));
@@ -581,11 +599,10 @@ store_regs (struct type *regs_type, CORE
    COMPILE_I_PRINT_ADDRESS_SCOPE when COMPILE_I_PRINT_VALUE_SCOPE
    should have been used instead.  */
 
-struct compile_module *
+compile_module_up
 compile_object_load (const compile_file_names &file_names,
 		     enum compile_i_scope_types scope, void *scope_data)
 {
-  struct setup_sections_data setup_sections_data;
   CORE_ADDR regs_addr, out_value_addr = 0;
   struct symbol *func_sym;
   struct type *func_type;
@@ -593,7 +610,6 @@ compile_object_load (const compile_file_
   long storage_needed;
   asymbol **symbol_table, **symp;
   long number_of_symbols, missing_symbols;
-  struct compile_module *retval;
   struct type *regs_type, *out_value_type = NULL;
   char **matching;
   struct objfile *objfile;
@@ -603,10 +619,10 @@ compile_object_load (const compile_file_
   gdb::unique_xmalloc_ptr<char> filename
     (tilde_expand (file_names.object_file ()));
 
-  gdb_bfd_ref_ptr abfd (gdb_bfd_open (filename.get (), gnutarget, -1));
+  gdb_bfd_ref_ptr abfd (gdb_bfd_open (filename.get (), gnutarget));
   if (abfd == NULL)
     error (_("\"%s\": could not open as compiled module: %s"),
-          filename.get (), bfd_errmsg (bfd_get_error ()));
+	  filename.get (), bfd_errmsg (bfd_get_error ()));
 
   if (!bfd_check_format_matches (abfd.get (), bfd_object, &matching))
     error (_("\"%s\": not in loadable format: %s"),
@@ -616,14 +632,10 @@ compile_object_load (const compile_file_
   if ((bfd_get_file_flags (abfd.get ()) & (EXEC_P | DYNAMIC)) != 0)
     error (_("\"%s\": not in object format."), filename.get ());
 
-  setup_sections_data.last_size = 0;
-  setup_sections_data.last_section_first = abfd->sections;
-  setup_sections_data.last_prot = -1;
-  setup_sections_data.last_max_alignment = 1;
-  setup_sections_data.munmap_list.reset (new struct munmap_list);
-
-  bfd_map_over_sections (abfd.get (), setup_sections, &setup_sections_data);
-  setup_sections (abfd.get (), NULL, &setup_sections_data);
+  struct setup_sections_data setup_sections_data (abfd.get ());
+  for (asection *sect = abfd->sections; sect != nullptr; sect = sect->next)
+    setup_sections_data.setup_one_section (sect);
+  setup_sections_data.setup_one_section (nullptr);
 
   storage_needed = bfd_get_symtab_upper_bound (abfd.get ());
   if (storage_needed < 0)
@@ -632,49 +644,52 @@ compile_object_load (const compile_file_
 
   /* SYMFILE_VERBOSE is not passed even if FROM_TTY, user is not interested in
      "Reading symbols from ..." message for automatically generated file.  */
-  std::unique_ptr<struct objfile> objfile_holder
-    (symbol_file_add_from_bfd (abfd.get (), filename.get (),
-			       0, NULL, 0, NULL));
+  objfile_up objfile_holder (symbol_file_add_from_bfd (abfd,
+						       filename.get (),
+						       0, NULL, 0, NULL));
   objfile = objfile_holder.get ();
 
   func_sym = lookup_global_symbol_from_objfile (objfile,
 						GLOBAL_BLOCK,
 						GCC_FE_WRAPPER_FUNCTION,
-						VAR_DOMAIN).symbol;
+						SEARCH_VFT).symbol;
   if (func_sym == NULL)
     error (_("Cannot find function \"%s\" in compiled module \"%s\"."),
 	   GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile));
-  func_type = SYMBOL_TYPE (func_sym);
-  if (TYPE_CODE (func_type) != TYPE_CODE_FUNC)
+  func_type = func_sym->type ();
+  if (func_type->code () != TYPE_CODE_FUNC)
     error (_("Invalid type code %d of function \"%s\" in compiled "
 	     "module \"%s\"."),
-	   TYPE_CODE (func_type), GCC_FE_WRAPPER_FUNCTION,
+	   func_type->code (), GCC_FE_WRAPPER_FUNCTION,
 	   objfile_name (objfile));
 
   switch (scope)
     {
     case COMPILE_I_SIMPLE_SCOPE:
       expect_parameters = 1;
-      expect_return_type = builtin_type (target_gdbarch ())->builtin_void;
+      expect_return_type
+	= builtin_type (current_inferior ()->arch ())->builtin_void;
       break;
     case COMPILE_I_RAW_SCOPE:
       expect_parameters = 0;
-      expect_return_type = builtin_type (target_gdbarch ())->builtin_void;
+      expect_return_type
+	= builtin_type (current_inferior ()->arch ())->builtin_void;
       break;
     case COMPILE_I_PRINT_ADDRESS_SCOPE:
     case COMPILE_I_PRINT_VALUE_SCOPE:
       expect_parameters = 2;
-      expect_return_type = builtin_type (target_gdbarch ())->builtin_void;
+      expect_return_type
+	= builtin_type (current_inferior ()->arch ())->builtin_void;
       break;
     default:
-      internal_error (__FILE__, __LINE__, _("invalid scope %d"), scope);
+      internal_error (_("invalid scope %d"), scope);
     }
-  if (TYPE_NFIELDS (func_type) != expect_parameters)
+  if (func_type->num_fields () != expect_parameters)
     error (_("Invalid %d parameters of function \"%s\" in compiled "
 	     "module \"%s\"."),
-	   TYPE_NFIELDS (func_type), GCC_FE_WRAPPER_FUNCTION,
+	   func_type->num_fields (), GCC_FE_WRAPPER_FUNCTION,
 	   objfile_name (objfile));
-  if (!types_deeply_equal (expect_return_type, TYPE_TARGET_TYPE (func_type)))
+  if (!types_deeply_equal (expect_return_type, func_type->target_type ()))
     error (_("Invalid return type of function \"%s\" in compiled "
 	     "module \"%s\"."),
 	   GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile));
@@ -701,9 +716,9 @@ compile_object_load (const compile_file_
       if (strcmp (sym->name, "_GLOBAL_OFFSET_TABLE_") == 0)
 	{
 	  if (compile_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"ELF symbol \"%s\" relocated to zero\n",
-				sym->name);
+	    gdb_printf (gdb_stdlog,
+			"ELF symbol \"%s\" relocated to zero\n",
+			sym->name);
 
 	  /* It seems to be a GCC bug, with -mcmodel=large there should be no
 	     need for _GLOBAL_OFFSET_TABLE_.  Together with -fPIE the data
@@ -711,29 +726,70 @@ compile_object_load (const compile_file_
 	  sym->value = 0;
 	  continue;
 	}
+      if (strcmp (sym->name, ".TOC.") == 0)
+	{
+	  /* Handle the .TOC. symbol as the linker would do.  Set the .TOC.
+	     sections value to 0x8000 (see bfd/elf64-ppc.c TOC_BASE_OFF);
+	     point the symbol section at the ".toc" section;
+	     and pass the toc->vma value into bfd_set_gp_value().
+	     If the .toc section is not found, use the first section
+	     with the SEC_ALLOC flag set.  In the unlikely case that
+	     we still do not have a section identified, fall back to using
+	     the "*ABS*" section.  */
+	  asection *toc_fallback = bfd_get_section_by_name(abfd.get(), ".toc");
+	  if (toc_fallback == NULL)
+	    {
+	      for (asection *tsect = abfd->sections; tsect != nullptr;
+		   tsect = tsect->next)
+		 {
+		    if (bfd_section_flags (tsect) & SEC_ALLOC)
+		       {
+			  toc_fallback = tsect;
+			  break;
+		       }
+		 }
+	    }
+
+	  if (toc_fallback == NULL)
+	    /*  If we've gotten here, we have not found a section usable
+		as a backup for the .toc section.  In this case, use the
+		absolute (*ABS*) section.  */
+	     toc_fallback = bfd_abs_section_ptr;
+
+	  sym->section = toc_fallback;
+	  sym->value = 0x8000;
+	  bfd_set_gp_value(abfd.get(), toc_fallback->vma);
+	  if (compile_debug)
+	    gdb_printf (gdb_stdlog,
+			"Connecting ELF symbol \"%s\" to the .toc section (%s)\n",
+			sym->name,
+			paddress (current_inferior ()->arch (), sym->value));
+	  continue;
+	}
+
       bmsym = lookup_minimal_symbol (sym->name, NULL, NULL);
       switch (bmsym.minsym == NULL
-	      ? mst_unknown : MSYMBOL_TYPE (bmsym.minsym))
+	      ? mst_unknown : bmsym.minsym->type ())
 	{
 	case mst_text:
 	case mst_bss:
 	case mst_data:
-	  sym->value = BMSYMBOL_VALUE_ADDRESS (bmsym);
+	  sym->value = bmsym.value_address ();
 	  if (compile_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"ELF mst_text symbol \"%s\" relocated to %s\n",
-				sym->name,
-				paddress (target_gdbarch (), sym->value));
+	    gdb_printf (gdb_stdlog,
+			"ELF mst_text symbol \"%s\" relocated to %s\n",
+			sym->name,
+			paddress (current_inferior ()->arch (), sym->value));
 	  break;
 	case mst_text_gnu_ifunc:
-	  sym->value = gnu_ifunc_resolve_addr (target_gdbarch (),
-					       BMSYMBOL_VALUE_ADDRESS (bmsym));
+	  sym->value = gnu_ifunc_resolve_addr (current_inferior ()->arch (),
+					       bmsym.value_address ());
 	  if (compile_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"ELF mst_text_gnu_ifunc symbol \"%s\" "
-				"relocated to %s\n",
-				sym->name,
-				paddress (target_gdbarch (), sym->value));
+	    gdb_printf (gdb_stdlog,
+			"ELF mst_text_gnu_ifunc symbol \"%s\" "
+			"relocated to %s\n",
+			sym->name,
+			paddress (current_inferior ()->arch (), sym->value));
 	  break;
 	default:
 	  warning (_("Could not find symbol \"%s\" "
@@ -753,17 +809,17 @@ compile_object_load (const compile_file_
   else
     {
       /* Use read-only non-executable memory protection.  */
-      regs_addr = gdbarch_infcall_mmap (target_gdbarch (),
-					TYPE_LENGTH (regs_type),
+      regs_addr = gdbarch_infcall_mmap (current_inferior ()->arch (),
+					regs_type->length (),
 					GDB_MMAP_PROT_READ);
       gdb_assert (regs_addr != 0);
-      setup_sections_data.munmap_list->add (regs_addr, TYPE_LENGTH (regs_type));
+      setup_sections_data.munmap_list.add (regs_addr, regs_type->length ());
       if (compile_debug)
-	fprintf_unfiltered (gdb_stdlog,
-			    "allocated %s bytes at %s for registers\n",
-			    paddress (target_gdbarch (),
-				      TYPE_LENGTH (regs_type)),
-			    paddress (target_gdbarch (), regs_addr));
+	gdb_printf (gdb_stdlog,
+		    "allocated %s bytes at %s for registers\n",
+		    paddress (current_inferior ()->arch (),
+			      regs_type->length ()),
+		    paddress (current_inferior ()->arch (), regs_addr));
       store_regs (regs_type, regs_addr);
     }
 
@@ -774,31 +830,31 @@ compile_object_load (const compile_file_
       if (out_value_type == NULL)
 	return NULL;
       check_typedef (out_value_type);
-      out_value_addr = gdbarch_infcall_mmap (target_gdbarch (),
-					     TYPE_LENGTH (out_value_type),
+      out_value_addr = gdbarch_infcall_mmap (current_inferior ()->arch (),
+					     out_value_type->length (),
 					     (GDB_MMAP_PROT_READ
 					      | GDB_MMAP_PROT_WRITE));
       gdb_assert (out_value_addr != 0);
-      setup_sections_data.munmap_list->add (out_value_addr,
-					    TYPE_LENGTH (out_value_type));
+      setup_sections_data.munmap_list.add (out_value_addr,
+					   out_value_type->length ());
       if (compile_debug)
-	fprintf_unfiltered (gdb_stdlog,
-			    "allocated %s bytes at %s for printed value\n",
-			    paddress (target_gdbarch (),
-				      TYPE_LENGTH (out_value_type)),
-			    paddress (target_gdbarch (), out_value_addr));
+	gdb_printf (gdb_stdlog,
+		    "allocated %s bytes at %s for printed value\n",
+		    paddress (current_inferior ()->arch (),
+			      out_value_type->length ()),
+		    paddress (current_inferior ()->arch (), out_value_addr));
     }
 
-  retval = XNEW (struct compile_module);
+  compile_module_up retval (new struct compile_module);
   retval->objfile = objfile_holder.release ();
-  retval->source_file = xstrdup (file_names.source_file ());
+  retval->source_file = file_names.source_file ();
   retval->func_sym = func_sym;
   retval->regs_addr = regs_addr;
   retval->scope = scope;
   retval->scope_data = scope_data;
   retval->out_value_type = out_value_type;
   retval->out_value_addr = out_value_addr;
-  retval->munmap_list_head = setup_sections_data.munmap_list.release ();
+  retval->munmap_list = std::move (setup_sections_data.munmap_list);
 
   return retval;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-object-load.h ./gdb/compile/compile-object-load.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-object-load.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-object-load.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file to load module for 'compile' command.
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -29,6 +29,9 @@ public:
 
   DISABLE_COPY_AND_ASSIGN (munmap_list);
 
+  munmap_list &operator= (munmap_list &&) = default;
+  munmap_list (munmap_list &&) = default;
+
   /* Add a region to the list.  */
   void add (CORE_ADDR addr, CORE_ADDR size);
 
@@ -46,11 +49,18 @@ private:
 
 struct compile_module
 {
+  compile_module () = default;
+
+  DISABLE_COPY_AND_ASSIGN (compile_module);
+
+  compile_module &operator= (compile_module &&other) = default;
+  compile_module (compile_module &&other) = default;
+
   /* objfile for the compiled module.  */
   struct objfile *objfile;
 
-  /* .c file OBJFILE was built from.  It needs to be xfree-d.  */
-  char *source_file;
+  /* .c file OBJFILE was built from.  */
+  std::string source_file;
 
   /* Inferior function GCC_FE_WRAPPER_FUNCTION.  */
   struct symbol *func_sym;
@@ -74,12 +84,14 @@ struct compile_module
   CORE_ADDR out_value_addr;
 
   /* Track inferior memory reserved by inferior mmap.  */
-  struct munmap_list *munmap_list_head;
+  struct munmap_list munmap_list;
 };
 
-extern struct compile_module *compile_object_load
+/* A unique pointer for a compile_module.  */
+typedef std::unique_ptr<compile_module> compile_module_up;
+
+extern compile_module_up compile_object_load
   (const compile_file_names &fnames,
    enum compile_i_scope_types scope, void *scope_data);
-extern void munmap_list_free (struct munmap_list *head);
 
 #endif /* COMPILE_COMPILE_OBJECT_LOAD_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-object-run.c ./gdb/compile/compile-object-run.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-object-run.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-object-run.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Call module for 'compile' command.
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -32,26 +32,20 @@
 
 struct do_module_cleanup
 {
+  do_module_cleanup (int *ptr, compile_module_up &&mod)
+    : executedp (ptr),
+      module (std::move (mod))
+  {
+  }
+
+  DISABLE_COPY_AND_ASSIGN (do_module_cleanup);
+
   /* Boolean to set true upon a call of do_module_cleanup.
      The pointer may be NULL.  */
   int *executedp;
 
-  /* .c file OBJFILE was built from.  It needs to be xfree-d.  */
-  char *source_file;
-
-  /* Copy from struct compile_module.  */
-  enum compile_i_scope_types scope;
-  void *scope_data;
-
-  /* Copy from struct compile_module.  */
-  struct type *out_value_type;
-  CORE_ADDR out_value_addr;
-
-  /* Copy from struct compile_module.  */
-  struct munmap_list *munmap_list_head;
-
-  /* objfile_name of our objfile.  */
-  char objfile_name_string[1];
+  /* The compile module.  */
+  compile_module_up module;
 };
 
 /* Cleanup everything after the inferior function dummy frame gets
@@ -69,40 +63,52 @@ do_module_cleanup (void *arg, int regist
 
       /* This code cannot be in compile_object_run as OUT_VALUE_TYPE
 	 no longer exists there.  */
-      if (data->scope == COMPILE_I_PRINT_ADDRESS_SCOPE
-	  || data->scope == COMPILE_I_PRINT_VALUE_SCOPE)
+      if (data->module->scope == COMPILE_I_PRINT_ADDRESS_SCOPE
+	  || data->module->scope == COMPILE_I_PRINT_VALUE_SCOPE)
 	{
 	  struct value *addr_value;
-	  struct type *ptr_type = lookup_pointer_type (data->out_value_type);
+	  struct type *ptr_type
+	    = lookup_pointer_type (data->module->out_value_type);
 
-	  addr_value = value_from_pointer (ptr_type, data->out_value_addr);
+	  addr_value = value_from_pointer (ptr_type,
+					   data->module->out_value_addr);
 
 	  /* SCOPE_DATA would be stale unless EXECUTEDP != NULL.  */
-	  compile_print_value (value_ind (addr_value), data->scope_data);
+	  compile_print_value (value_ind (addr_value),
+			       data->module->scope_data);
 	}
     }
 
-  for (objfile *objfile : current_program_space->objfiles ())
-    if ((objfile->flags & OBJF_USERLOADED) == 0
-        && (strcmp (objfile_name (objfile), data->objfile_name_string) == 0))
-      {
-	delete objfile;
+  objfile *objfile = data->module->objfile;
+  gdb_assert (objfile != nullptr);
 
-	/* It may be a bit too pervasive in this dummy_frame dtor callback.  */
-	clear_symtab_users (0);
+  /* We have to make a copy of the name so that we can unlink the
+     underlying file -- removing the objfile will cause the name to be
+     freed, so we can't simply keep a reference to it.  */
+  std::string objfile_name_s = objfile_name (objfile);
 
-	break;
-      }
+  objfile->unlink ();
 
-  /* Delete the .c file.  */
-  unlink (data->source_file);
-  xfree (data->source_file);
+  /* It may be a bit too pervasive in this dummy_frame dtor callback.  */
+  clear_symtab_users (0);
 
-  delete data->munmap_list_head;
+  /* Delete the .c file.  */
+  unlink (data->module->source_file.c_str ());
 
   /* Delete the .o file.  */
-  unlink (data->objfile_name_string);
-  xfree (data);
+  unlink (objfile_name_s.c_str ());
+
+  delete data;
+}
+
+/* Create a copy of FUNC_TYPE that is independent of OBJFILE.  */
+
+static type *
+create_copied_type_recursive (objfile *objfile, type *func_type)
+{
+  htab_up copied_types = create_copied_types_hash ();
+  func_type = copy_type_recursive (func_type, copied_types.get ());
+  return func_type;
 }
 
 /* Perform inferior call of MODULE.  This function may throw an error.
@@ -112,64 +118,50 @@ do_module_cleanup (void *arg, int regist
    longer touch MODULE's memory after this function has been called.  */
 
 void
-compile_object_run (struct compile_module *module)
+compile_object_run (compile_module_up &&module)
 {
   struct value *func_val;
   struct do_module_cleanup *data;
-  const char *objfile_name_s = objfile_name (module->objfile);
   int dtor_found, executed = 0;
   struct symbol *func_sym = module->func_sym;
   CORE_ADDR regs_addr = module->regs_addr;
   struct objfile *objfile = module->objfile;
 
-  data = (struct do_module_cleanup *) xmalloc (sizeof (*data)
-					       + strlen (objfile_name_s));
-  data->executedp = &executed;
-  data->source_file = xstrdup (module->source_file);
-  strcpy (data->objfile_name_string, objfile_name_s);
-  data->scope = module->scope;
-  data->scope_data = module->scope_data;
-  data->out_value_type = module->out_value_type;
-  data->out_value_addr = module->out_value_addr;
-  data->munmap_list_head = module->munmap_list_head;
-
-  xfree (module->source_file);
-  xfree (module);
-  module = NULL;
+  data = new struct do_module_cleanup (&executed, std::move (module));
 
   try
     {
-      struct type *func_type = SYMBOL_TYPE (func_sym);
-      htab_t copied_types;
+      struct type *func_type = func_sym->type ();
       int current_arg = 0;
       struct value **vargs;
 
-      /* OBJFILE may disappear while FUNC_TYPE still will be in use.  */
-      copied_types = create_copied_types_hash (objfile);
-      func_type = copy_type_recursive (objfile, func_type, copied_types);
-      htab_delete (copied_types);
+      /* OBJFILE may disappear while FUNC_TYPE is still in use as a
+	 result of the call to DO_MODULE_CLEANUP below, so we need a copy
+	 that does not depend on the objfile in anyway.  */
+      func_type = create_copied_type_recursive (objfile, func_type);
 
-      gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC);
+      gdb_assert (func_type->code () == TYPE_CODE_FUNC);
       func_val = value_from_pointer (lookup_pointer_type (func_type),
-				   BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (func_sym)));
+				   func_sym->value_block ()->entry_pc ());
 
-      vargs = XALLOCAVEC (struct value *, TYPE_NFIELDS (func_type));
-      if (TYPE_NFIELDS (func_type) >= 1)
+      vargs = XALLOCAVEC (struct value *, func_type->num_fields ());
+      if (func_type->num_fields () >= 1)
 	{
 	  gdb_assert (regs_addr != 0);
 	  vargs[current_arg] = value_from_pointer
-			  (TYPE_FIELD_TYPE (func_type, current_arg), regs_addr);
+			  (func_type->field (current_arg).type (), regs_addr);
 	  ++current_arg;
 	}
-      if (TYPE_NFIELDS (func_type) >= 2)
+      if (func_type->num_fields () >= 2)
 	{
-	  gdb_assert (data->out_value_addr != 0);
+	  gdb_assert (data->module->out_value_addr != 0);
 	  vargs[current_arg] = value_from_pointer
-	       (TYPE_FIELD_TYPE (func_type, current_arg), data->out_value_addr);
+	       (func_type->field (current_arg).type (),
+		data->module->out_value_addr);
 	  ++current_arg;
 	}
-      gdb_assert (current_arg == TYPE_NFIELDS (func_type));
-      auto args = gdb::make_array_view (vargs, TYPE_NFIELDS (func_type));
+      gdb_assert (current_arg == func_type->num_fields ());
+      auto args = gdb::make_array_view (vargs, func_type->num_fields ());
       call_function_by_hand_dummy (func_val, NULL, args,
 				   do_module_cleanup, data);
     }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-object-run.h ./gdb/compile/compile-object-run.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/compile-object-run.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/compile-object-run.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file to call module for 'compile' command.
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -19,6 +19,6 @@
 
 #include "compile-object-load.h"
 
-extern void compile_object_run (struct compile_module *module);
+extern void compile_object_run (compile_module_up &&module);
 
 #endif /* COMPILE_COMPILE_OBJECT_RUN_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/gcc-c-plugin.h ./gdb/compile/gcc-c-plugin.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/gcc-c-plugin.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/gcc-c-plugin.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GCC C plug-in wrapper for GDB.
 
-   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/gcc-cp-plugin.h ./gdb/compile/gcc-cp-plugin.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/compile/gcc-cp-plugin.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/compile/gcc-cp-plugin.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* GCC C++ plug-in wrapper for GDB.
 
-   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Copyright (C) 2018-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/complaints.c ./gdb/complaints.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/complaints.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/complaints.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for complaint handling during symbol reading in GDB.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,10 @@
 #include "complaints.h"
 #include "command.h"
 #include "gdbcmd.h"
+#include "run-on-main-thread.h"
+#include "gdbsupport/selftest.h"
 #include <unordered_map>
+#include <mutex>
 
 /* Map format strings to counters.  */
 
@@ -33,6 +36,10 @@ static std::unordered_map<const char *,
 
 int stop_whining = 0;
 
+#if CXX_STD_THREAD
+static std::mutex complaint_mutex;
+#endif /* CXX_STD_THREAD */
+
 /* See complaints.h.  */
 
 void
@@ -40,18 +47,24 @@ complaint_internal (const char *fmt, ...
 {
   va_list args;
 
-  if (++counters[fmt] > stop_whining)
-    return;
+  {
+#if CXX_STD_THREAD
+    std::lock_guard<std::mutex> guard (complaint_mutex);
+#endif
+    if (++counters[fmt] > stop_whining)
+      return;
+  }
 
   va_start (args, fmt);
 
-  if (deprecated_warning_hook)
-    (*deprecated_warning_hook) (fmt, args);
+  warning_hook_handler handler = get_warning_hook_handler ();
+  if (handler != nullptr)
+    handler (fmt, args);
   else
     {
-      fputs_filtered (_("During symbol reading: "), gdb_stderr);
-      vfprintf_filtered (gdb_stderr, fmt, args);
-      fputs_filtered ("\n", gdb_stderr);
+      gdb_puts (_("During symbol reading: "), gdb_stderr);
+      gdb_vprintf (gdb_stderr, fmt, args);
+      gdb_puts ("\n", gdb_stderr);
     }
 
   va_end (args);
@@ -65,17 +78,117 @@ clear_complaints ()
   counters.clear ();
 }
 
+/* See complaints.h.  */
+
+thread_local complaint_interceptor *complaint_interceptor::g_complaint_interceptor;
+
+/* See complaints.h.  */
+
+complaint_interceptor::complaint_interceptor ()
+  : m_saved_complaint_interceptor (&g_complaint_interceptor, this),
+    m_saved_warning_hook (issue_complaint)
+{
+}
+
+/* A helper that wraps a warning hook.  */
+
+static void
+wrap_warning_hook (warning_hook_handler hook, ...)
+{
+  va_list args;
+  va_start (args, hook);
+  hook ("%s", args);
+  va_end (args);
+}
+
+/* See complaints.h.  */
+
+void
+re_emit_complaints (const complaint_collection &complaints)
+{
+  gdb_assert (is_main_thread ());
+
+  for (const std::string &str : complaints)
+    {
+      warning_hook_handler handler = get_warning_hook_handler ();
+      if (handler != nullptr)
+	wrap_warning_hook (handler, str.c_str ());
+      else
+	gdb_printf (gdb_stderr, _("During symbol reading: %s\n"),
+		    str.c_str ());
+    }
+}
+
+/* See complaints.h.  */
+
+void
+complaint_interceptor::issue_complaint (const char *fmt, va_list args)
+{
+#if CXX_STD_THREAD
+  std::lock_guard<std::mutex> guard (complaint_mutex);
+#endif
+  g_complaint_interceptor->m_complaints.insert (string_vprintf (fmt, args));
+}
+
 static void
 complaints_show_value (struct ui_file *file, int from_tty,
 		       struct cmd_list_element *cmd, const char *value)
 {
-  fprintf_filtered (file, _("Max number of complaints about incorrect"
-			    " symbols is %s.\n"),
-		    value);
+  gdb_printf (file, _("Max number of complaints about incorrect"
+		      " symbols is %s.\n"),
+	      value);
 }
 
+#if GDB_SELF_TEST
+namespace selftests {
+
+/* Entry point for complaints unit tests.  */
+
+static void
+test_complaints ()
+{
+  std::unordered_map<const char *, int> tmp;
+  scoped_restore reset_counters = make_scoped_restore (&counters, tmp);
+  scoped_restore reset_stop_whining = make_scoped_restore (&stop_whining, 2);
+
+#define CHECK_COMPLAINT(STR, CNT)					\
+  do									\
+    {									\
+      std::string output;						\
+      execute_fn_to_string (output, []() { complaint (STR); }, false);	\
+      std::string expected						\
+	= _("During symbol reading: ") + std::string (STR "\n");	\
+      SELF_CHECK (output == expected);					\
+      SELF_CHECK (counters[STR] == CNT);				\
+    } while (0)
+
+#define CHECK_COMPLAINT_SILENT(STR, CNT)				\
+  do									\
+    {									\
+      std::string output;						\
+      execute_fn_to_string (output, []() { complaint (STR); }, false);	\
+      SELF_CHECK (output.empty ());					\
+      SELF_CHECK (counters[STR] == CNT);				\
+    } while (0)
+
+  CHECK_COMPLAINT ("maintenance complaint 0", 1);
+  CHECK_COMPLAINT ("maintenance complaint 0", 2);
+  CHECK_COMPLAINT_SILENT ("maintenance complaint 0", 3);
+  CHECK_COMPLAINT ("maintenance complaint 1", 1);
+  clear_complaints ();
+  CHECK_COMPLAINT ("maintenance complaint 0", 1);
+
+#undef CHECK_COMPLAINT
+#undef CHECK_COMPLAINT_SILENT
+}
+
+
+} // namespace selftests
+#endif /* GDB_SELF_TEST */
+
+void _initialize_complaints ();
 void
-_initialize_complaints (void)
+_initialize_complaints ()
 {
   add_setshow_zinteger_cmd ("complaints", class_support, 
 			    &stop_whining, _("\
@@ -83,4 +196,8 @@ Set max number of complaints about incor
 Show max number of complaints about incorrect symbols."), NULL,
 			    NULL, complaints_show_value,
 			    &setlist, &showlist);
+
+#if GDB_SELF_TEST
+  selftests::register_test ("complaints", selftests::test_complaints);
+#endif /* GDB_SELF_TEST */
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/complaints.h ./gdb/complaints.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/complaints.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/complaints.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for complaint handling during symbol reading in GDB.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,10 +21,25 @@
 #if !defined (COMPLAINTS_H)
 #define COMPLAINTS_H
 
+#include <unordered_set>
+
 /* Helper for complaint.  */
 extern void complaint_internal (const char *fmt, ...)
   ATTRIBUTE_PRINTF (1, 2);
 
+/* This controls whether complaints are emitted.  */
+
+extern int stop_whining;
+
+/* Return true if complaints are enabled.  This can be used to guard code
+   that is used only to decide whether to issue a complaint.  */
+
+static inline bool
+have_complaint ()
+{
+  return stop_whining > 0;
+}
+
 /* Register a complaint.  This is a macro around complaint_internal to
    avoid computing complaint's arguments when complaints are disabled.
    Running FMT via gettext [i.e., _(FMT)] can be quite expensive, for
@@ -32,9 +47,7 @@ extern void complaint_internal (const ch
 #define complaint(FMT, ...)					\
   do								\
     {								\
-      extern int stop_whining;					\
-								\
-      if (stop_whining > 0)					\
+      if (have_complaint ())					\
 	complaint_internal (FMT, ##__VA_ARGS__);		\
     }								\
   while (0)
@@ -44,5 +57,56 @@ extern void complaint_internal (const ch
 
 extern void clear_complaints ();
 
+/* Type of collected complaints.  */
+
+typedef std::unordered_set<std::string> complaint_collection;
+
+/* A class that can handle calls to complaint from multiple threads.
+   When this is instantiated, it hooks into the complaint mechanism,
+   so the 'complaint' macro can continue to be used.  It collects all
+   the complaints (and warnings) emitted while it is installed, and
+   these can be retrieved before the object is destroyed.  This is
+   intended for use from worker threads (though it will also work on
+   the main thread).  Messages can be re-emitted on the main thread
+   using re_emit_complaints, see below.  */
+
+class complaint_interceptor
+{
+public:
+
+  complaint_interceptor ();
+  ~complaint_interceptor () = default;
+
+  DISABLE_COPY_AND_ASSIGN (complaint_interceptor);
+
+  complaint_collection &&release ()
+  {
+    return std::move (m_complaints);
+  }
+
+private:
+
+  /* The issued complaints.  */
+  complaint_collection m_complaints;
+
+  /* The saved value of g_complaint_interceptor.  */
+  scoped_restore_tmpl<complaint_interceptor *> m_saved_complaint_interceptor;
+
+  /* A helper function that is used by the 'complaint' implementation
+     to issue a complaint.  */
+  static void issue_complaint (const char *, va_list)
+    ATTRIBUTE_PRINTF (1, 0);
+
+  /* This object.  Used by the static callback function.  */
+  static thread_local complaint_interceptor *g_complaint_interceptor;
+
+  /* Object to initialise the warning hook.  */
+  scoped_restore_warning_hook m_saved_warning_hook;
+};
+
+/* Re-emit complaints that were collected by complaint_interceptor.
+   This can only be called on the main thread.  */
+
+extern void re_emit_complaints (const complaint_collection &);
 
 #endif /* !defined (COMPLAINTS_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/completer.c ./gdb/completer.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/completer.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/completer.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Line completion stuff for GDB, the GNU debugger.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,7 +20,7 @@
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "expression.h"
-#include "filenames.h"		/* For DOSish file names.  */
+#include "filenames.h"
 #include "language.h"
 #include "gdbsupport/gdb_signals.h"
 #include "target.h"
@@ -31,12 +31,13 @@
 #include <algorithm>
 #include "linespec.h"
 #include "cli/cli-decode.h"
+#include "gdbsupport/gdb_tilde_expand.h"
 
 /* FIXME: This is needed because of lookup_cmd_1 ().  We should be
    calling a hook instead so we eliminate the CLI dependency.  */
 #include "gdbcmd.h"
 
-/* Needed for rl_completer_word_break_characters() and for
+/* Needed for rl_completer_word_break_characters and for
    rl_filename_completion_function.  */
 #include "readline/readline.h"
 
@@ -45,6 +46,58 @@
 
 #include "completer.h"
 
+/* See completer.h.  */
+
+class completion_tracker::completion_hash_entry
+{
+public:
+  /* Constructor.  */
+  completion_hash_entry (gdb::unique_xmalloc_ptr<char> name,
+			 gdb::unique_xmalloc_ptr<char> lcd)
+    : m_name (std::move (name)),
+      m_lcd (std::move (lcd))
+  {
+    /* Nothing.  */
+  }
+
+  /* Returns a pointer to the lowest common denominator string.  This
+     string will only be valid while this hash entry is still valid as the
+     string continues to be owned by this hash entry and will be released
+     when this entry is deleted.  */
+  char *get_lcd () const
+  {
+    return m_lcd.get ();
+  }
+
+  /* Get, and release the name field from this hash entry.  This can only
+     be called once, after which the name field is no longer valid.  This
+     should be used to pass ownership of the name to someone else.  */
+  char *release_name ()
+  {
+    return m_name.release ();
+  }
+
+  /* Return true of the name in this hash entry is STR.  */
+  bool is_name_eq (const char *str) const
+  {
+    return strcmp (m_name.get (), str) == 0;
+  }
+
+  /* Return the hash value based on the name of the entry.  */
+  hashval_t hash_name () const
+  {
+    return htab_hash_string (m_name.get ());
+  }
+
+private:
+
+  /* The symbol name stored in this hash entry.  */
+  gdb::unique_xmalloc_ptr<char> m_name;
+
+  /* The lowest common denominator string computed for this hash entry.  */
+  gdb::unique_xmalloc_ptr<char> m_lcd;
+};
+
 /* Misc state that needs to be tracked across several different
    readline completer entry point calls, all related to a single
    completion invocation.  */
@@ -95,7 +148,7 @@ enum explicit_location_match_type
    but it does affect how much stuff M-? lists.
    (2) If one of the matches contains a word break character, readline
    will quote it.  That's why we switch between
-   current_language->la_word_break_characters() and
+   current_language->word_break_characters () and
    gdb_completer_command_word_break_characters.  I'm not sure when
    we need this behavior (perhaps for funky characters in C++ 
    symbols?).  */
@@ -168,11 +221,25 @@ filename_completer (struct cmd_list_elem
 	 will loop indefinitely.  */
       subsequent_name = 1;
       /* Like emacs, don't complete on old versions.  Especially
-         useful in the "source" command.  */
+	 useful in the "source" command.  */
       const char *p = p_rl.get ();
       if (p[strlen (p) - 1] == '~')
 	continue;
 
+      /* Readline appends a trailing '/' if the completion is a
+	 directory.  If this completion request originated from outside
+	 readline (e.g. GDB's 'complete' command), then we append the
+	 trailing '/' ourselves now.  */
+      if (!tracker.from_readline ())
+	{
+	  std::string expanded = gdb_tilde_expand (p_rl.get ());
+	  struct stat finfo;
+	  const bool isdir = (stat (expanded.c_str (), &finfo) == 0
+			      && S_ISDIR (finfo.st_mode));
+	  if (isdir)
+	    p_rl.reset (concat (p_rl.get (), "/", nullptr));
+	}
+
       tracker.add_completion
 	(make_completion_match_str (std::move (p_rl), text, word));
     }
@@ -198,14 +265,6 @@ filename_completer_handle_brkchars (stru
     (gdb_completer_file_name_break_characters);
 }
 
-/* Possible values for the found_quote flags word used by the completion
-   functions.  It says what kind of (shell-like) quoting we found anywhere
-   in the line. */
-#define RL_QF_SINGLE_QUOTE      0x01
-#define RL_QF_DOUBLE_QUOTE      0x02
-#define RL_QF_BACKSLASH         0x04
-#define RL_QF_OTHER_QUOTE       0x08
-
 /* Find the bounds of the current word for completion purposes, and
    return a pointer to the end of the word.  This mimics (and is a
    modified version of) readline's _rl_find_completion_word internal
@@ -232,7 +291,7 @@ gdb_rl_find_completion_word (struct gdb_
 			     int *qc, int *dp,
 			     const char *line_buffer)
 {
-  int scan, end, found_quote, delimiter, pass_next, isbrk;
+  int scan, end, delimiter, pass_next, isbrk;
   char quote_char;
   const char *brkchars;
   int point = strlen (line_buffer);
@@ -249,7 +308,7 @@ gdb_rl_find_completion_word (struct gdb_
     }
 
   end = point;
-  found_quote = delimiter = 0;
+  delimiter = 0;
   quote_char = '\0';
 
   brkchars = info->word_break_characters;
@@ -259,8 +318,6 @@ gdb_rl_find_completion_word (struct gdb_
       /* We have a list of characters which can be used in pairs to
 	 quote substrings for the completer.  Try to find the start of
 	 an unclosed quoted substring.  */
-      /* FOUND_QUOTE is set so we know what kind of quotes we
-	 found.  */
       for (scan = pass_next = 0;
 	   scan < end;
 	   scan++)
@@ -278,7 +335,6 @@ gdb_rl_find_completion_word (struct gdb_
 	  if (quote_char != '\'' && line_buffer[scan] == '\\')
 	    {
 	      pass_next = 1;
-	      found_quote |= RL_QF_BACKSLASH;
 	      continue;
 	    }
 
@@ -299,13 +355,6 @@ gdb_rl_find_completion_word (struct gdb_
 	      /* Found start of a quoted substring.  */
 	      quote_char = line_buffer[scan];
 	      point = scan + 1;
-	      /* Shell-like quoting conventions.  */
-	      if (quote_char == '\'')
-		found_quote |= RL_QF_SINGLE_QUOTE;
-	      else if (quote_char == '"')
-		found_quote |= RL_QF_DOUBLE_QUOTE;
-	      else
-		found_quote |= RL_QF_OTHER_QUOTE;
 	    }
 	}
     }
@@ -388,7 +437,7 @@ const char *
 advance_to_expression_complete_word_point (completion_tracker &tracker,
 					   const char *text)
 {
-  const char *brk_chars = current_language->la_word_break_characters ();
+  const char *brk_chars = current_language->word_break_characters ();
   return advance_to_completion_word (tracker, brk_chars, text);
 }
 
@@ -407,6 +456,7 @@ advance_to_filename_complete_word_point
 bool
 completion_tracker::completes_to_completion_word (const char *word)
 {
+  recompute_lowest_common_denominator ();
   if (m_lowest_common_denominator_unique)
     {
       const char *lcd = m_lowest_common_denominator;
@@ -512,7 +562,7 @@ complete_files_symbols (completion_track
 	  colon = p;
 	  symbol_start = p + 1;
 	}
-      else if (strchr (current_language->la_word_break_characters(), *p))
+      else if (strchr (current_language->word_break_characters (), *p))
 	symbol_start = p + 1;
     }
 
@@ -672,13 +722,13 @@ string_or_empty (const char *string)
 
 static void
 collect_explicit_location_matches (completion_tracker &tracker,
-				   struct event_location *location,
+				   location_spec *locspec,
 				   enum explicit_location_match_type what,
 				   const char *word,
 				   const struct language_defn *language)
 {
-  const struct explicit_location *explicit_loc
-    = get_explicit_location (location);
+  const explicit_location_spec *explicit_loc
+    = as_explicit_location_spec (locspec);
 
   /* True if the option expects an argument.  */
   bool needs_arg = true;
@@ -690,7 +740,8 @@ collect_explicit_location_matches (compl
     {
     case MATCH_SOURCE:
       {
-	const char *source = string_or_empty (explicit_loc->source_filename);
+	const char *source
+	  = string_or_empty (explicit_loc->source_filename.get ());
 	completion_list matches
 	  = make_source_files_completion_list (source, source);
 	tracker.add_completions (std::move (matches));
@@ -699,10 +750,11 @@ collect_explicit_location_matches (compl
 
     case MATCH_FUNCTION:
       {
-	const char *function = string_or_empty (explicit_loc->function_name);
+	const char *function
+	  = string_or_empty (explicit_loc->function_name.get ());
 	linespec_complete_function (tracker, function,
 				    explicit_loc->func_name_match_type,
-				    explicit_loc->source_filename);
+				    explicit_loc->source_filename.get ());
       }
       break;
 
@@ -715,10 +767,10 @@ collect_explicit_location_matches (compl
 
     case MATCH_LABEL:
       {
-	const char *label = string_or_empty (explicit_loc->label_name);
+	const char *label = string_or_empty (explicit_loc->label_name.get ());
 	linespec_complete_label (tracker, language,
-				 explicit_loc->source_filename,
-				 explicit_loc->function_name,
+				 explicit_loc->source_filename.get (),
+				 explicit_loc->function_name.get (),
 				 explicit_loc->func_name_match_type,
 				 label);
       }
@@ -811,19 +863,19 @@ skip_keyword (completion_tracker &tracke
   return -1;
 }
 
-/* A completer function for explicit locations.  This function
+/* A completer function for explicit location specs.  This function
    completes both options ("-source", "-line", etc) and values.  If
    completing a quoted string, then QUOTED_ARG_START and
    QUOTED_ARG_END point to the quote characters.  LANGUAGE is the
    current language.  */
 
 static void
-complete_explicit_location (completion_tracker &tracker,
-			    struct event_location *location,
-			    const char *text,
-			    const language_defn *language,
-			    const char *quoted_arg_start,
-			    const char *quoted_arg_end)
+complete_explicit_location_spec (completion_tracker &tracker,
+				 location_spec *locspec,
+				 const char *text,
+				 const language_defn *language,
+				 const char *quoted_arg_start,
+				 const char *quoted_arg_end)
 {
   if (*text != '-')
     return;
@@ -831,7 +883,11 @@ complete_explicit_location (completion_t
   int keyword = skip_keyword (tracker, explicit_options, &text);
 
   if (keyword == -1)
-    complete_on_enum (tracker, explicit_options, text, text);
+    {
+      complete_on_enum (tracker, explicit_options, text, text);
+      /* There are keywords that start with "-".   Include them, too.  */
+      complete_on_enum (tracker, linespec_keywords, text, text);
+    }
   else
     {
       /* Completing on value.  */
@@ -877,7 +933,7 @@ complete_explicit_location (completion_t
 	}
 
       /* Now gather matches  */
-      collect_explicit_location_matches (tracker, location, what, text,
+      collect_explicit_location_matches (tracker, locspec, what, text,
 					 language);
     }
 }
@@ -904,9 +960,9 @@ location_completer (struct cmd_list_elem
   const char *copy = text;
 
   explicit_completion_info completion_info;
-  event_location_up location
-    = string_to_explicit_location (&copy, current_language,
-				   &completion_info);
+  location_spec_up locspec
+    = string_to_explicit_location_spec (&copy, current_language,
+					&completion_info);
   if (completion_info.quoted_arg_start != NULL
       && completion_info.quoted_arg_end == NULL)
     {
@@ -915,7 +971,7 @@ location_completer (struct cmd_list_elem
       tracker.advance_custom_word_point_by (1);
     }
 
-  if (completion_info.saw_explicit_location_option)
+  if (completion_info.saw_explicit_location_spec_option)
     {
       if (*copy != '\0')
 	{
@@ -948,15 +1004,15 @@ location_completer (struct cmd_list_elem
 						- text);
 	  text = completion_info.last_option;
 
-	  complete_explicit_location (tracker, location.get (), text,
-				      current_language,
-				      completion_info.quoted_arg_start,
-				      completion_info.quoted_arg_end);
+	  complete_explicit_location_spec (tracker, locspec.get (), text,
+					   current_language,
+					   completion_info.quoted_arg_start,
+					   completion_info.quoted_arg_end);
 
 	}
     }
   /* This is an address or linespec location.  */
-  else if (location != NULL)
+  else if (locspec != nullptr)
     {
       /* Handle non-explicit location options.  */
 
@@ -969,7 +1025,7 @@ location_completer (struct cmd_list_elem
 	  text = copy;
 
 	  symbol_name_match_type match_type
-	    = get_explicit_location (location.get ())->func_name_match_type;
+	    = as_explicit_location_spec (locspec.get ())->func_name_match_type;
 	  complete_address_and_linespec_locations (tracker, text, match_type);
 	}
     }
@@ -1016,107 +1072,31 @@ location_completer_handle_brkchars (stru
   location_completer (ignore, tracker, text, NULL);
 }
 
-/* Helper for expression_completer which recursively adds field and
-   method names from TYPE, a struct or union type, to the OUTPUT
-   list.  */
-
-static void
-add_struct_fields (struct type *type, completion_list &output,
-		   const char *fieldname, int namelen)
-{
-  int i;
-  int computed_type_name = 0;
-  const char *type_name = NULL;
-
-  type = check_typedef (type);
-  for (i = 0; i < TYPE_NFIELDS (type); ++i)
-    {
-      if (i < TYPE_N_BASECLASSES (type))
-	add_struct_fields (TYPE_BASECLASS (type, i),
-			   output, fieldname, namelen);
-      else if (TYPE_FIELD_NAME (type, i))
-	{
-	  if (TYPE_FIELD_NAME (type, i)[0] != '\0')
-	    {
-	      if (! strncmp (TYPE_FIELD_NAME (type, i), 
-			     fieldname, namelen))
-		output.emplace_back (xstrdup (TYPE_FIELD_NAME (type, i)));
-	    }
-	  else if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION)
-	    {
-	      /* Recurse into anonymous unions.  */
-	      add_struct_fields (TYPE_FIELD_TYPE (type, i),
-				 output, fieldname, namelen);
-	    }
-	}
-    }
-
-  for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
-    {
-      const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
-
-      if (name && ! strncmp (name, fieldname, namelen))
-	{
-	  if (!computed_type_name)
-	    {
-	      type_name = TYPE_NAME (type);
-	      computed_type_name = 1;
-	    }
-	  /* Omit constructors from the completion list.  */
-	  if (!type_name || strcmp (type_name, name))
-	    output.emplace_back (xstrdup (name));
-	}
-    }
-}
-
 /* See completer.h.  */
 
 void
 complete_expression (completion_tracker &tracker,
 		     const char *text, const char *word)
 {
-  struct type *type = NULL;
-  gdb::unique_xmalloc_ptr<char> fieldname;
-  enum type_code code = TYPE_CODE_UNDEF;
+  expression_up exp;
+  std::unique_ptr<expr_completion_base> expr_completer;
 
   /* Perform a tentative parse of the expression, to see whether a
      field completion is required.  */
   try
     {
-      type = parse_expression_for_completion (text, &fieldname, &code);
+      exp = parse_expression_for_completion (text, &expr_completer);
     }
   catch (const gdb_exception_error &except)
     {
       return;
     }
 
-  if (fieldname != nullptr && type)
-    {
-      for (;;)
-	{
-	  type = check_typedef (type);
-	  if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
-	    break;
-	  type = TYPE_TARGET_TYPE (type);
-	}
-
-      if (TYPE_CODE (type) == TYPE_CODE_UNION
-	  || TYPE_CODE (type) == TYPE_CODE_STRUCT)
-	{
-	  completion_list result;
-
-	  add_struct_fields (type, result, fieldname.get (),
-			     strlen (fieldname.get ()));
-	  tracker.add_completions (std::move (result));
-	  return;
-	}
-    }
-  else if (fieldname != nullptr && code != TYPE_CODE_UNDEF)
-    {
-      collect_symbol_completion_matches_type (tracker, fieldname.get (),
-					      fieldname.get (), code);
-      return;
-    }
+  /* Part of the parse_expression_for_completion contract.  */
+  gdb_assert ((exp == nullptr) == (expr_completer == nullptr));
+  if (expr_completer != nullptr
+      && expr_completer->complete (exp.get (), tracker))
+    return;
 
   complete_files_symbols (tracker, text, word);
 }
@@ -1287,7 +1267,7 @@ complete_line_internal_1 (completion_tra
      strings, which leaves out the '-' and '.' character used in some
      commands.  */
   set_rl_completer_word_break_characters
-    (current_language->la_word_break_characters());
+    (current_language->word_break_characters ());
 
   /* Decide whether to complete on a list of gdb commands or on
      symbols.  */
@@ -1323,9 +1303,8 @@ complete_line_internal_1 (completion_tra
       result_list = 0;
     }
   else
-    {
-      c = lookup_cmd_1 (&p, cmdlist, &result_list, ignore_help_classes);
-    }
+    c = lookup_cmd_1 (&p, cmdlist, &result_list, NULL, ignore_help_classes,
+		      true);
 
   /* Move p up to the next interesting thing.  */
   while (*p == ' ' || *p == '\t')
@@ -1364,7 +1343,7 @@ complete_line_internal_1 (completion_tra
 	  if (result_list)
 	    {
 	      if (reason != handle_brkchars)
-		complete_on_cmdlist (*result_list->prefixlist, tracker, p,
+		complete_on_cmdlist (*result_list->subcommands, tracker, p,
 				     word, ignore_help_classes);
 	    }
 	  else
@@ -1392,12 +1371,12 @@ complete_line_internal_1 (completion_tra
 	    {
 	      /* The command is followed by whitespace; we need to
 		 complete on whatever comes after command.  */
-	      if (c->prefixlist)
+	      if (c->is_prefix ())
 		{
 		  /* It is a prefix command; what comes after it is
 		     a subcommand (e.g. "info ").  */
 		  if (reason != handle_brkchars)
-		    complete_on_cmdlist (*c->prefixlist, tracker, p, word,
+		    complete_on_cmdlist (*c->subcommands, tracker, p, word,
 					 ignore_help_classes);
 
 		  /* Ensure that readline does the right thing
@@ -1460,7 +1439,7 @@ complete_line_internal_1 (completion_tra
 	{
 	  /* There is non-whitespace beyond the command.  */
 
-	  if (c->prefixlist && !c->allow_unknown)
+	  if (c->is_prefix () && !c->allow_unknown)
 	    {
 	      /* It is an unrecognized subcommand of a prefix command,
 		 e.g. "info adsfkdj".  */
@@ -1510,11 +1489,10 @@ int max_completions = 200;
 
 /* See completer.h.  */
 
-completion_tracker::completion_tracker ()
+completion_tracker::completion_tracker (bool from_readline)
+  : m_from_readline (from_readline)
 {
-  m_entries_hash = htab_create_alloc (INITIAL_COMPLETION_HTAB_SIZE,
-				      htab_hash_string, streq_hash,
-				      NULL, xcalloc, xfree);
+  discard_completions ();
 }
 
 /* See completer.h.  */
@@ -1526,13 +1504,41 @@ completion_tracker::discard_completions
   m_lowest_common_denominator = NULL;
 
   m_lowest_common_denominator_unique = false;
+  m_lowest_common_denominator_valid = false;
 
-  m_entries_vec.clear ();
+  m_entries_hash.reset (nullptr);
 
-  htab_delete (m_entries_hash);
-  m_entries_hash = htab_create_alloc (INITIAL_COMPLETION_HTAB_SIZE,
-				      htab_hash_string, streq_hash,
-				      NULL, xcalloc, xfree);
+  /* A callback used by the hash table to compare new entries with existing
+     entries.  We can't use the standard htab_eq_string function here as the
+     key to our hash is just a single string, while the values we store in
+     the hash are a struct containing multiple strings.  */
+  static auto entry_eq_func
+    = [] (const void *first, const void *second) -> int
+      {
+	/* The FIRST argument is the entry already in the hash table, and
+	   the SECOND argument is the new item being inserted.  */
+	const completion_hash_entry *entry
+	  = (const completion_hash_entry *) first;
+	const char *name_str = (const char *) second;
+
+	return entry->is_name_eq (name_str);
+      };
+
+  /* Callback used by the hash table to compute the hash value for an
+     existing entry.  This is needed when expanding the hash table.  */
+  static auto entry_hash_func
+    = [] (const void *arg) -> hashval_t
+      {
+	const completion_hash_entry *entry
+	  = (const completion_hash_entry *) arg;
+	return entry->hash_name ();
+      };
+
+  m_entries_hash.reset
+    (htab_create_alloc (INITIAL_COMPLETION_HTAB_SIZE,
+			entry_hash_func, entry_eq_func,
+			htab_delete_entry<completion_hash_entry>,
+			xcalloc, xfree));
 }
 
 /* See completer.h.  */
@@ -1540,7 +1546,6 @@ completion_tracker::discard_completions
 completion_tracker::~completion_tracker ()
 {
   xfree (m_lowest_common_denominator);
-  htab_delete (m_entries_hash);
 }
 
 /* See completer.h.  */
@@ -1556,10 +1561,12 @@ completion_tracker::maybe_add_completion
   if (max_completions == 0)
     return false;
 
-  if (htab_elements (m_entries_hash) >= max_completions)
+  if (htab_elements (m_entries_hash.get ()) >= max_completions)
     return false;
 
-  slot = htab_find_slot (m_entries_hash, name.get (), INSERT);
+  hashval_t hash = htab_hash_string (name.get ());
+  slot = htab_find_slot_with_hash (m_entries_hash.get (), name.get (),
+				   hash, INSERT);
   if (*slot == HTAB_EMPTY_ENTRY)
     {
       const char *match_for_lcd_str = NULL;
@@ -1573,10 +1580,12 @@ completion_tracker::maybe_add_completion
       gdb::unique_xmalloc_ptr<char> lcd
 	= make_completion_match_str (match_for_lcd_str, text, word);
 
-      recompute_lowest_common_denominator (std::move (lcd));
+      size_t lcd_len = strlen (lcd.get ());
+      *slot = new completion_hash_entry (std::move (name), std::move (lcd));
 
-      *slot = name.get ();
-      m_entries_vec.push_back (std::move (name));
+      m_lowest_common_denominator_valid = false;
+      m_lowest_common_denominator_max_length
+	= std::max (m_lowest_common_denominator_max_length, lcd_len);
     }
 
   return true;
@@ -1602,6 +1611,20 @@ completion_tracker::add_completions (com
     add_completion (std::move (candidate));
 }
 
+/* See completer.h.  */
+
+void
+completion_tracker::remove_completion (const char *name)
+{
+  hashval_t hash = htab_hash_string (name);
+  if (htab_find_slot_with_hash (m_entries_hash.get (), name, hash, NO_INSERT)
+      != NULL)
+    {
+      htab_remove_elt_with_hash (m_entries_hash.get (), name, hash);
+      m_lowest_common_denominator_valid = false;
+    }
+}
+
 /* Helper for the make_completion_match_str overloads.  Returns NULL
    as an indication that we want MATCH_NAME exactly.  It is up to the
    caller to xstrdup that string if desired.  */
@@ -1664,8 +1687,8 @@ make_completion_match_str (gdb::unique_x
 completion_result
 complete (const char *line, char const **word, int *quote_char)
 {
-  completion_tracker tracker_handle_brkchars;
-  completion_tracker tracker_handle_completions;
+  completion_tracker tracker_handle_brkchars (false);
+  completion_tracker tracker_handle_completions (false);
   completion_tracker *tracker;
 
   /* The WORD should be set to the end of word to complete.  We initialize
@@ -1814,13 +1837,9 @@ reg_or_group_completer_1 (completion_tra
 
   if ((targets & complete_reggroup_names) != 0)
     {
-      struct reggroup *group;
-
-      for (group = reggroup_next (gdbarch, NULL);
-	   group != NULL;
-	   group = reggroup_next (gdbarch, group))
+      for (const struct reggroup *group : gdbarch_reggroups (gdbarch))
 	{
-	  name = reggroup_name (group);
+	  name = group->name ();
 	  if (strncmp (word, name, len) == 0)
 	    tracker.add_completion (make_unique_xstrdup (name));
 	}
@@ -1858,7 +1877,7 @@ default_completer_handle_brkchars (struc
 				   const char *text, const char *word)
 {
   set_rl_completer_word_break_characters
-    (current_language->la_word_break_characters ());
+    (current_language->word_break_characters ());
 }
 
 /* See definition in completer.h.  */
@@ -1899,7 +1918,7 @@ gdb_completion_word_break_characters_thr
   /* New completion starting.  Get rid of the previous tracker and
      start afresh.  */
   delete current_completion.tracker;
-  current_completion.tracker = new completion_tracker ();
+  current_completion.tracker = new completion_tracker (true);
 
   completion_tracker &tracker = *current_completion.tracker;
 
@@ -1930,7 +1949,7 @@ gdb_completion_word_break_characters_thr
       rl_basic_quote_characters = NULL;
     }
 
-  return rl_completer_word_break_characters;
+  return (char *) rl_completer_word_break_characters;
 }
 
 char *
@@ -1982,23 +2001,23 @@ completion_find_completion_word (complet
 /* See completer.h.  */
 
 void
-completion_tracker::recompute_lowest_common_denominator
-  (gdb::unique_xmalloc_ptr<char> &&new_match_up)
+completion_tracker::recompute_lcd_visitor (completion_hash_entry *entry)
 {
-  if (m_lowest_common_denominator == NULL)
+  if (!m_lowest_common_denominator_valid)
     {
-      /* We don't have a lowest common denominator yet, so simply take
-	 the whole NEW_MATCH_UP as being it.  */
-      m_lowest_common_denominator = new_match_up.release ();
+      /* This is the first lowest common denominator that we are
+	 considering, just copy it in.  */
+      strcpy (m_lowest_common_denominator, entry->get_lcd ());
       m_lowest_common_denominator_unique = true;
+      m_lowest_common_denominator_valid = true;
     }
   else
     {
-      /* Find the common denominator between the currently-known
-	 lowest common denominator and NEW_MATCH_UP.  That becomes the
-	 new lowest common denominator.  */
+      /* Find the common denominator between the currently-known lowest
+	 common denominator and NEW_MATCH_UP.  That becomes the new lowest
+	 common denominator.  */
       size_t i;
-      const char *new_match = new_match_up.get ();
+      const char *new_match = entry->get_lcd ();
 
       for (i = 0;
 	   (new_match[i] != '\0'
@@ -2016,6 +2035,35 @@ completion_tracker::recompute_lowest_com
 /* See completer.h.  */
 
 void
+completion_tracker::recompute_lowest_common_denominator ()
+{
+  /* We've already done this.  */
+  if (m_lowest_common_denominator_valid)
+    return;
+
+  /* Resize the storage to ensure we have enough space, the plus one gives
+     us space for the trailing null terminator we will include.  */
+  m_lowest_common_denominator
+    = (char *) xrealloc (m_lowest_common_denominator,
+			 m_lowest_common_denominator_max_length + 1);
+
+  /* Callback used to visit each entry in the m_entries_hash.  */
+  auto visitor_func
+    = [] (void **slot, void *info) -> int
+      {
+	completion_tracker *obj = (completion_tracker *) info;
+	completion_hash_entry *entry = (completion_hash_entry *) *slot;
+	obj->recompute_lcd_visitor (entry);
+	return 1;
+      };
+
+  htab_traverse (m_entries_hash.get (), visitor_func, this);
+  m_lowest_common_denominator_valid = true;
+}
+
+/* See completer.h.  */
+
+void
 completion_tracker::advance_custom_word_point_by (int len)
 {
   m_custom_word_point += len;
@@ -2092,16 +2140,17 @@ completion_result
 completion_tracker::build_completion_result (const char *text,
 					     int start, int end)
 {
-  completion_list &list = m_entries_vec;	/* The completions.  */
+  size_t element_count = htab_elements (m_entries_hash.get ());
 
-  if (list.empty ())
+  if (element_count == 0)
     return {};
 
   /* +1 for the LCD, and +1 for NULL termination.  */
-  char **match_list = XNEWVEC (char *, 1 + list.size () + 1);
+  char **match_list = XNEWVEC (char *, 1 + element_count + 1);
 
   /* Build replacement word, based on the LCD.  */
 
+  recompute_lowest_common_denominator ();
   match_list[0]
     = expand_preserving_ws (text, end - start,
 			    m_lowest_common_denominator);
@@ -2120,21 +2169,50 @@ completion_tracker::build_completion_res
       /* If the tracker wants to, or we already have a space at the
 	 end of the match, tell readline to skip appending
 	 another.  */
+      char *match = match_list[0];
       bool completion_suppress_append
 	= (suppress_append_ws ()
-	   || match_list[0][strlen (match_list[0]) - 1] == ' ');
+	   || (match[0] != '\0'
+	       && match[strlen (match) - 1] == ' '));
 
       return completion_result (match_list, 1, completion_suppress_append);
     }
   else
     {
-      int ix;
-
-      for (ix = 0; ix < list.size (); ++ix)
-	match_list[ix + 1] = list[ix].release ();
-      match_list[ix + 1] = NULL;
+      /* State object used while building the completion list.  */
+      struct list_builder
+      {
+	list_builder (char **ml)
+	  : match_list (ml),
+	    index (1)
+	{ /* Nothing.  */ }
+
+	/* The list we are filling.  */
+	char **match_list;
+
+	/* The next index in the list to write to.  */
+	int index;
+      };
+      list_builder builder (match_list);
+
+      /* Visit each entry in m_entries_hash and add it to the completion
+	 list, updating the builder state object.  */
+      auto func
+	= [] (void **slot, void *info) -> int
+	  {
+	    completion_hash_entry *entry = (completion_hash_entry *) *slot;
+	    list_builder *state = (list_builder *) info;
+
+	    state->match_list[state->index] = entry->release_name ();
+	    state->index++;
+	    return 1;
+	  };
+
+      /* Build the completion list and add a null at the end.  */
+      htab_traverse_noresize (m_entries_hash.get (), func, &builder);
+      match_list[builder.index] = NULL;
 
-      return completion_result (match_list, list.size (), false);
+      return completion_result (match_list, builder.index - 1, false);
     }
 }
 
@@ -2164,15 +2242,11 @@ completion_result::~completion_result ()
 
 /* See completer.h  */
 
-completion_result::completion_result (completion_result &&rhs)
+completion_result::completion_result (completion_result &&rhs) noexcept
+  : match_list (rhs.match_list),
+    number_matches (rhs.number_matches)
 {
-  if (this == &rhs)
-    return;
-
-  reset_match_list ();
-  match_list = rhs.match_list;
   rhs.match_list = NULL;
-  number_matches = rhs.number_matches;
   rhs.number_matches = 0;
 }
 
@@ -2250,7 +2324,7 @@ gdb_rl_attempted_completion_function_thr
   if (end == 0 || !current_completion.tracker->use_custom_word_point ())
     {
       delete current_completion.tracker;
-      current_completion.tracker = new completion_tracker ();
+      current_completion.tracker = new completion_tracker (true);
 
       complete_line (*current_completion.tracker, text,
 		     rl_line_buffer, rl_point);
@@ -2314,7 +2388,7 @@ skip_quoted_chars (const char *str, cons
     quotechars = gdb_completer_quote_characters;
 
   if (breakchars == NULL)
-    breakchars = current_language->la_word_break_characters();
+    breakchars = current_language->word_break_characters ();
 
   for (scan = str; *scan != '\0'; scan++)
     {
@@ -2494,8 +2568,8 @@ gdb_printable_part (char *pathname)
   else if (temp[1] == '\0')
     {
       for (x = temp - 1; x > pathname; x--)
-        if (*x == '/')
-          break;
+	if (*x == '/')
+	  break;
       return ((*x == '/') ? x + 1 : pathname);
     }
   else
@@ -2597,15 +2671,15 @@ gdb_fnprint (const char *to_print, int p
   while (*s)
     {
       if (CTRL_CHAR (*s))
-        {
-          displayer->putch (displayer, '^');
-          displayer->putch (displayer, UNCTRL (*s));
-          printed_len += 2;
-          s++;
+	{
+	  displayer->putch (displayer, '^');
+	  displayer->putch (displayer, UNCTRL (*s));
+	  printed_len += 2;
+	  s++;
 #if defined (HANDLE_MULTIBYTE)
 	  memset (&ps, 0, sizeof (mbstate_t));
 #endif
-        }
+	}
       else if (*s == RUBOUT)
 	{
 	  displayer->putch (displayer, '^');
@@ -2756,7 +2830,7 @@ gdb_complete_get_screenwidth (const stru
 extern int _rl_completion_prefix_display_length;
 extern int _rl_print_completions_horizontally;
 
-EXTERN_C int _rl_qsort_string_compare (const void *, const void *);
+extern "C" int _rl_qsort_string_compare (const void *, const void *);
 typedef int QSFUNC (const void *, const void *);
 
 /* GDB version of readline/complete.c:rl_display_match_list.
@@ -2935,8 +3009,62 @@ gdb_display_match_list (char **matches,
     }
 }
 
+/* See completer.h.  */
+
+bool
+skip_over_slash_fmt (completion_tracker &tracker, const char **args)
+{
+  const char *text = *args;
+
+  if (text[0] == '/')
+    {
+      bool in_fmt;
+      tracker.set_use_custom_word_point (true);
+
+      if (text[1] == '\0')
+	{
+	  /* The user tried to complete after typing just the '/' character
+	     of the /FMT string.  Step the completer past the '/', but we
+	     don't offer any completions.  */
+	  in_fmt = true;
+	  ++text;
+	}
+      else
+	{
+	  /* The user has typed some characters after the '/', we assume
+	     this is a complete /FMT string, first skip over it.  */
+	  text = skip_to_space (text);
+
+	  if (*text == '\0')
+	    {
+	      /* We're at the end of the input string.  The user has typed
+		 '/FMT' and asked for a completion.  Push an empty
+		 completion string, this will cause readline to insert a
+		 space so the user now has '/FMT '.  */
+	      in_fmt = true;
+	      tracker.add_completion (make_unique_xstrdup (text));
+	    }
+	  else
+	    {
+	      /* The user has already typed things after the /FMT, skip the
+		 whitespace and return false.  Whoever called this function
+		 should then try to complete what comes next.  */
+	      in_fmt = false;
+	      text = skip_spaces (text);
+	    }
+	}
+
+      tracker.advance_custom_word_point_by (text - *args);
+      *args = text;
+      return in_fmt;
+    }
+
+  return false;
+}
+
+void _initialize_completer ();
 void
-_initialize_completer (void)
+_initialize_completer ()
 {
   add_setshow_zuinteger_unlimited_cmd ("max-completions", no_class,
 				       &max_completions, _("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/completer.h ./gdb/completer.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/completer.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/completer.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header for GDB line completion.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
 #if !defined (COMPLETER_H)
 #define COMPLETER_H 1
 
+#include "gdbsupport/gdb-hashtab.h"
 #include "gdbsupport/gdb_vecs.h"
 #include "command.h"
 
@@ -144,7 +145,12 @@ public:
 
   /* Mark the range between [BEGIN, END) as ignored.  */
   void mark_ignored_range (const char *begin, const char *end)
-  { m_ignored_ranges.emplace_back (begin, end); }
+  {
+    gdb_assert (begin < end);
+    gdb_assert (m_ignored_ranges.empty ()
+		|| m_ignored_ranges.back ().second < begin);
+    m_ignored_ranges.emplace_back (begin, end);
+  }
 
   /* Get the resulting LCD, after a successful match.  If there are
      ignored ranges, then this builds a new string with the ignored
@@ -159,9 +165,14 @@ public:
       {
 	m_finished_storage.clear ();
 
+	gdb_assert (m_ignored_ranges.back ().second
+		    <= (m_match + strlen (m_match)));
+
 	const char *prev = m_match;
 	for (const auto &range : m_ignored_ranges)
 	  {
+	    gdb_assert (prev < range.first);
+	    gdb_assert (range.second > range.first);
 	    m_finished_storage.append (prev, range.first);
 	    prev = range.second;
 	  }
@@ -178,6 +189,13 @@ public:
     m_ignored_ranges.clear ();
   }
 
+  /* Return true if this object has had no match data set since its
+     creation, or the last call to clear.  */
+  bool empty () const
+  {
+    return m_match == nullptr && m_ignored_ranges.empty ();
+  }
+
 private:
   /* The completion match result for LCD.  This is usually either a
      pointer into to a substring within a symbol's name, or to the
@@ -242,7 +260,7 @@ struct completion_result
   DISABLE_COPY_AND_ASSIGN (completion_result);
 
   /* Move a result.  */
-  completion_result (completion_result &&rhs);
+  completion_result (completion_result &&rhs) noexcept;
 
   /* Release ownership of the match list array.  */
   char **release_match_list ();
@@ -310,7 +328,7 @@ public:
 class completion_tracker
 {
 public:
-  completion_tracker ();
+  explicit completion_tracker (bool from_readline);
   ~completion_tracker ();
 
   DISABLE_COPY_AND_ASSIGN (completion_tracker);
@@ -326,6 +344,10 @@ public:
      LIST.  */
   void add_completions (completion_list &&list);
 
+  /* Remove completion matching NAME from the completion list, does nothing
+     if NAME is not already in the completion list.  */
+  void remove_completion (const char *name);
+
   /* Set the quote char to be appended after a unique completion is
      added to the input line.  Set to '\0' to clear.  See
      m_quote_char's description.  */
@@ -389,7 +411,7 @@ public:
 
   /* True if we have any completion match recorded.  */
   bool have_completions () const
-  { return !m_entries_vec.empty (); }
+  { return htab_elements (m_entries_hash.get ()) > 0; }
 
   /* Discard the current completion match list and the current
      LCD.  */
@@ -401,8 +423,16 @@ public:
   completion_result build_completion_result (const char *text,
 					     int start, int end);
 
+  /* Tells if the completion task is triggered by readline.  See
+     m_from_readline.  */
+  bool from_readline () const
+  { return m_from_readline; }
+
 private:
 
+  /* The type that we place into the m_entries_hash hash table.  */
+  class completion_hash_entry;
+
   /* Add the completion NAME to the list of generated completions if
      it is not there already.  If false is returned, too many
      completions were found.  */
@@ -410,18 +440,15 @@ private:
 			     completion_match_for_lcd *match_for_lcd,
 			     const char *text, const char *word);
 
-  /* Given a new match, recompute the lowest common denominator (LCD)
-     to hand over to readline.  Normally readline computes this itself
-     based on the whole set of completion matches.  However, some
-     completers want to override readline, in order to be able to
-     provide a LCD that is not really a prefix of the matches, but the
-     lowest common denominator of some relevant substring of each
-     match.  E.g., "b push_ba" completes to
-     "std::vector<..>::push_back", "std::string::push_back", etc., and
-     in this case we want the lowest common denominator to be
-     "push_back" instead of "std::".  */
-  void recompute_lowest_common_denominator
-    (gdb::unique_xmalloc_ptr<char> &&new_match);
+  /* Ensure that the lowest common denominator held in the member variable
+     M_LOWEST_COMMON_DENOMINATOR is valid.  This method must be called if
+     there is any chance that new completions have been added to the
+     tracker before the lowest common denominator is read.  */
+  void recompute_lowest_common_denominator ();
+
+  /* Callback used from recompute_lowest_common_denominator, called for
+     every entry in m_entries_hash.  */
+  void recompute_lcd_visitor (completion_hash_entry *entry);
 
   /* Completion match outputs returned by the symbol name matching
      routines (see symbol_name_matcher_ftype).  These results are only
@@ -430,16 +457,13 @@ private:
      symbol name matching routines.  */
   completion_match_result m_completion_match_result;
 
-  /* The completion matches found so far, in a vector.  */
-  completion_list m_entries_vec;
-
   /* The completion matches found so far, in a hash table, for
      duplicate elimination as entries are added.  Otherwise the user
      is left scratching his/her head: readline and complete_command
      will remove duplicates, and if removal of duplicates there brings
      the total under max_completions the user may think gdb quit
      searching too early.  */
-  htab_t m_entries_hash;
+  htab_up m_entries_hash;
 
   /* If non-zero, then this is the quote char that needs to be
      appended after completion (iff we have a unique completion).  We
@@ -483,6 +507,21 @@ private:
      "function()", instead of showing all the possible
      completions.  */
   bool m_lowest_common_denominator_unique = false;
+
+  /* True if the value in M_LOWEST_COMMON_DENOMINATOR is correct.  This is
+     set to true each time RECOMPUTE_LOWEST_COMMON_DENOMINATOR is called,
+     and reset to false whenever a new completion is added.  */
+  bool m_lowest_common_denominator_valid = false;
+
+  /* To avoid calls to xrealloc in RECOMPUTE_LOWEST_COMMON_DENOMINATOR, we
+     track the maximum possible size of the lowest common denominator,
+     which we know as each completion is added.  */
+  size_t m_lowest_common_denominator_max_length = 0;
+
+  /* Indicates that the completions are to be displayed by readline
+     interactively. The 'complete' command is a way to generate completions
+     not to be displayed by readline.  */
+  bool m_from_readline;
 };
 
 /* Return a string to hand off to readline as a completion match
@@ -628,6 +667,23 @@ extern const char *skip_quoted_chars (co
 
 extern const char *skip_quoted (const char *);
 
+/* Called from command completion function to skip over /FMT
+   specifications, allowing the rest of the line to be completed.  Returns
+   true if the /FMT is at the end of the current line and there is nothing
+   left to complete, otherwise false is returned.
+
+   In either case *ARGS can be updated to point after any part of /FMT that
+   is present.
+
+   This function is designed so that trying to complete '/' will offer no
+   completions, the user needs to insert the format specification
+   themselves.  Trying to complete '/FMT' (where FMT is any non-empty set
+   of alpha-numeric characters) will cause readline to insert a single
+   space, setting the user up to enter the expression.  */
+
+extern bool skip_over_slash_fmt (completion_tracker &tracker,
+				 const char **args);
+
 /* Maximum number of candidates to consider before the completer
    bails by throwing MAX_COMPLETIONS_REACHED_ERROR.  Negative values
    disable limiting.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/djcheck.sh ./gdb/config/djgpp/djcheck.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/djcheck.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/djgpp/djcheck.sh	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
 
 # A shell script to run the test suite on the DJGPP version of GDB.
 
-#  Copyright (C) 2000-2019 Free Software Foundation, Inc.
+#  Copyright (C) 2000-2024 Free Software Foundation, Inc.
 #
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/djconfig.sh ./gdb/config/djgpp/djconfig.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/djconfig.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/djgpp/djconfig.sh	2024-02-01 01:47:15.000000000 +0000
@@ -5,7 +5,7 @@
 # configuring other GNU programs for DJGPP.
 #
 #=====================================================================
-# Copyright (C) 1997-2019 Free Software Foundation, Inc.
+# Copyright (C) 1997-2024 Free Software Foundation, Inc.
 #
 # Originally written by Robert Hoehne, revised by Eli Zaretskii.
 # This file is part of GDB.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/fnchange.lst ./gdb/config/djgpp/fnchange.lst
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/fnchange.lst	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/djgpp/fnchange.lst	2024-02-01 01:47:15.000000000 +0000
@@ -117,6 +117,9 @@
 @V@/gdb/ChangeLog-2016 @V@/gdb/ChangeLog.016
 @V@/gdb/ChangeLog-2017 @V@/gdb/ChangeLog.017
 @V@/gdb/ChangeLog-2018 @V@/gdb/ChangeLog.018
+@V@/gdb/ChangeLog-2019 @V@/gdb/ChangeLog.019
+@V@/gdb/ChangeLog-2020 @V@/gdb/ChangeLog.020
+@V@/gdb/ChangeLog-2021 @V@/gdb/ChangeLog.021
 @V@/gdb/ChangeLog-3.x @V@/gdb/ChangeLog.3-x
 @V@/gdb/ada-exp.tab.c @V@/gdb/ada-exp_tab.c
 @V@/gdb/amd64-windows-nat.c @V@/gdb/a64w-nat.c
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/langinfo.h ./gdb/config/djgpp/langinfo.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/langinfo.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/djgpp/langinfo.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* langinfo.h file for DJGPP.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Written by Eli Zaretskii.
 
    This file is part of GDB.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/nl_types.h ./gdb/config/djgpp/nl_types.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/djgpp/nl_types.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/djgpp/nl_types.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* nl_types.h for DJGPP.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
    Written by Eli Zaretskii.
 
    This file is part of GDB.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/i386/i386gnu.mn ./gdb/config/i386/i386gnu.mn
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/i386/i386gnu.mn	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/i386/i386gnu.mn	2024-02-01 01:47:15.000000000 +0000
@@ -7,7 +7,7 @@ MIGCOM = $(MIG) -cc cat - /dev/null
 
 # Reply servers need special massaging of the code mig generates, to make
 # them work correctly for error returns in some cases.
-%_reply_S.h %_reply_S.c: %_reply.defs
+%_reply_S.h %_reply_S.c: %_reply.defs $(srcdir)/reply_mig_hack.awk
 	$(CPP) $(CPPFLAGS) -DSERVERPREFIX=S_ -x c $< \
 	| $(MIGCOM) -sheader $*_reply_S.h -server $*_reply_S.raw -user /dev/null -header /dev/null \
 	&& $(AWK) -f $(srcdir)/reply_mig_hack.awk < $*_reply_S.raw > $*_reply_S.c
@@ -21,7 +21,7 @@ MIGCOM = $(MIG) -cc cat - /dev/null
 	| $(MIGCOM) -sheader /dev/null -server /dev/null -user $*_U.c -header $*_U.h
 
 # MIG stubs are not yet ready for C++ compilation.
-%_S.o %_U.o : COMPILE.post += -x c
+%_S.o %_U.o : COMPILE.post += -x c -include gnu-nat-mig.h
 
 NAT_GENERATED_FILES = notify_S.h notify_S.c \
 	process_reply_S.h process_reply_S.c \
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/i386/nm-i386gnu.h ./gdb/config/i386/nm-i386gnu.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/i386/nm-i386gnu.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/i386/nm-i386gnu.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Native-dependent definitions for Intel 386 running the GNU Hurd
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/nm-linux.h ./gdb/config/nm-linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/nm-linux.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/nm-linux.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native support for GNU/Linux.
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/nm-nto.h ./gdb/config/nm-nto.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/nm-nto.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/nm-nto.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native support for QNX Neutrino version 6.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This code was donated by QNX Software Systems Ltd.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/sparc/nm-sol2.h ./gdb/config/sparc/nm-sol2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config/sparc/nm-sol2.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config/sparc/nm-sol2.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent definitions for Solaris SPARC.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config.in ./gdb/config.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/config.in	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/config.in	2024-02-01 01:47:15.000000000 +0000
@@ -3,6 +3,9 @@
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
 
+/* Additional directories to look for separate debug info. */
+#undef ADDITIONAL_DEBUG_DIRS
+
 /* Directories from which to load auto-loaded scripts. */
 #undef AUTO_LOAD_DIR
 
@@ -36,10 +39,16 @@
 /* Define to BFD's default target vector. */
 #undef DEFAULT_BFD_VEC
 
+/* Handle .ctf type-info sections */
+#undef ENABLE_LIBCTF
+
 /* Define to 1 if translation of program messages to the user's native
    language is requested. */
 #undef ENABLE_NLS
 
+/* The .gdbearlyinit filename. */
+#undef GDBEARLYINIT
+
 /* The .gdbinit filename. */
 #undef GDBINIT
 
@@ -78,17 +87,32 @@
    */
 #undef HAVE_ALLOCA_H
 
+/* Define if amd-dbgapi is being linked in. */
+#undef HAVE_AMD_DBGAPI
+
 /* Define to 1 if you have the `btowc' function. */
 #undef HAVE_BTOWC
 
+/* Define to 1 if you have the Mac OS X function
+   CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
 /* Define to 1 if you have the <cursesX.h> header file. */
 #undef HAVE_CURSESX_H
 
 /* Define to 1 if you have the <curses.h> header file. */
 #undef HAVE_CURSES_H
 
-/* define if the compiler supports basic C++11 syntax */
-#undef HAVE_CXX11
+/* define if the compiler supports basic C++17 syntax */
+#undef HAVE_CXX17
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#undef HAVE_DCGETTEXT
 
 /* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if
    you don't. */
@@ -109,10 +133,6 @@
    don't. */
 #undef HAVE_DECL_GETTHRDS
 
-/* Define to 1 if you have the declaration of `ptrace', and to 0 if you don't.
-   */
-#undef HAVE_DECL_PTRACE
-
 /* Define to 1 if you have the declaration of `snprintf', and to 0 if you
    don't. */
 #undef HAVE_DECL_SNPRINTF
@@ -164,6 +184,12 @@
 /* Define to 1 if your system has the etext variable. */
 #undef HAVE_ETEXT
 
+/* Define to 1 if execinfo.h backtrace functions are available. */
+#undef HAVE_EXECINFO_BACKTRACE
+
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
 /* Define to 1 if you have the `fdwalk' function. */
 #undef HAVE_FDWALK
 
@@ -191,6 +217,9 @@
 /* Define to 1 if you have the `getrusage' function. */
 #undef HAVE_GETRUSAGE
 
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
 /* Define to 1 if you have the `getuid' function. */
 #undef HAVE_GETUID
 
@@ -203,7 +232,7 @@
 /* Define if Guile supports manual finalization. */
 #undef HAVE_GUILE_MANUAL_FINALIZATION
 
-/* Define if you have the iconv() function. */
+/* Define if you have the iconv() function and it works. */
 #undef HAVE_ICONV
 
 /* Define to 1 if you have the `iconvlist' function. */
@@ -212,12 +241,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
-/* Define to 1 if your system has the kinfo_getfile function. */
+/* Define to 1 if you have the `kinfo_getfile' function. */
 #undef HAVE_KINFO_GETFILE
 
-/* Define to 1 if your system has the kinfo_getvmmap function. */
-#undef HAVE_KINFO_GETVMMAP
-
 /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
 #undef HAVE_LANGINFO_CODESET
 
@@ -227,6 +253,18 @@
 /* Define if you have the babeltrace library. */
 #undef HAVE_LIBBABELTRACE
 
+/* Define if libbacktrace is being used. */
+#undef HAVE_LIBBACKTRACE
+
+/* Define to 1 if curses is enabled. */
+#undef HAVE_LIBCURSES
+
+/* Define to 1 if debuginfod is enabled. */
+#undef HAVE_LIBDEBUGINFOD
+
+/* Define to 1 if debuginfod section downloading is supported. */
+#undef HAVE_LIBDEBUGINFOD_FIND_SECTION
+
 /* Define if you have the expat library. */
 #undef HAVE_LIBEXPAT
 
@@ -242,9 +280,6 @@
 /* Define to 1 if you have the `m' library (-lm). */
 #undef HAVE_LIBM
 
-/* Define if you have the mpfr library. */
-#undef HAVE_LIBMPFR
-
 /* Define to 1 if you have the <libunwind-ia64.h> header file. */
 #undef HAVE_LIBUNWIND_IA64_H
 
@@ -296,9 +331,6 @@
 /* Define to 1 if you have the <nlist.h> header file. */
 #undef HAVE_NLIST_H
 
-/* Define if you support the personality syscall. */
-#undef HAVE_PERSONALITY
-
 /* Define to 1 if you have the `pipe' function. */
 #undef HAVE_PIPE
 
@@ -359,9 +391,6 @@
 /* Define if sys/ptrace.h defines the PT_GETDBREGS request. */
 #undef HAVE_PT_GETDBREGS
 
-/* Define if sys/ptrace.h defines the PT_GETXMMREGS request. */
-#undef HAVE_PT_GETXMMREGS
-
 /* Define to 1 if you have the `pt_insn_event' function. */
 #undef HAVE_PT_INSN_EVENT
 
@@ -371,6 +400,9 @@
 /* Define if Python interpreter is being linked in. */
 #undef HAVE_PYTHON
 
+/* Define to 1 if you have the <readline/readline.h> header file. */
+#undef HAVE_READLINE_READLINE_H
+
 /* Define to 1 if you have the `resize_term' function. */
 #undef HAVE_RESIZE_TERM
 
@@ -416,6 +448,9 @@
 /* Define to 1 if you have the `sigsetmask' function. */
 #undef HAVE_SIGSETMASK
 
+/* Define to 1 if you have the `sigtimedwait' function. */
+#undef HAVE_SIGTIMEDWAIT
+
 /* Define to 1 if you have the `socketpair' function. */
 #undef HAVE_SOCKETPAIR
 
@@ -470,12 +505,6 @@
 /* Define to 1 if `td_pcb' is a member of `struct thread'. */
 #undef HAVE_STRUCT_THREAD_TD_PCB
 
-/* Define to 1 if `fs_base' is a member of `struct user_regs_struct'. */
-#undef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
-
-/* Define to 1 if `gs_base' is a member of `struct user_regs_struct'. */
-#undef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE
-
 /* Define to 1 if you have the <sys/debugreg.h> header file. */
 #undef HAVE_SYS_DEBUGREG_H
 
@@ -494,6 +523,9 @@
 /* Define to 1 if you have the <sys/poll.h> header file. */
 #undef HAVE_SYS_POLL_H
 
+/* Define to 1 if you have the <sys/procctl.h> header file. */
+#undef HAVE_SYS_PROCCTL_H
+
 /* Define to 1 if you have the <sys/procfs.h> header file. */
 #undef HAVE_SYS_PROCFS_H
 
@@ -557,9 +589,6 @@
 /* Define to 1 if you have the <wait.h> header file. */
 #undef HAVE_WAIT_H
 
-/* Define to 1 if you have the `wborder' function. */
-#undef HAVE_WBORDER
-
 /* Define to 1 if you have the <windows.h> header file. */
 #undef HAVE_WINDOWS_H
 
@@ -572,9 +601,15 @@
 /* Define to 1 if you have the `wresize' function. */
 #undef HAVE_WRESIZE
 
+/* Define to 1 if you have the <ws2tcpip.h> header file. */
+#undef HAVE_WS2TCPIP_H
+
 /* Define to 1 if you have the `XML_StopParser' function. */
 #undef HAVE_XML_STOPPARSER
 
+/* Define to 1 if zstd is enabled. */
+#undef HAVE_ZSTD
+
 /* Define to 1 if your system has the _etext variable. */
 #undef HAVE__ETEXT
 
@@ -597,6 +632,10 @@
    moved. */
 #undef JIT_READER_DIR_RELOCATABLE
 
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
 /* Name of this package. */
 #undef PACKAGE
 
@@ -649,6 +688,10 @@
 /* Define as the return type of ptrace. */
 #undef PTRACE_TYPE_RET
 
+/* Define if the python lib directory should be relocated when GDB is moved.
+   */
+#undef PYTHON_LIBDIR_RELOCATABLE
+
 /* Define if the python directory should be relocated when GDB is moved. */
 #undef PYTHON_PATH_RELOCATABLE
 
@@ -664,9 +707,6 @@
 /* Define to 1 if the `setpgrp' function takes no argument. */
 #undef SETPGRP_VOID
 
-/* The size of `long', as computed by sizeof. */
-#undef SIZEOF_LONG
-
 /* The size of `long long', as computed by sizeof. */
 #undef SIZEOF_LONG_LONG
 
@@ -679,6 +719,9 @@
 /* The size of `unsigned __int128', as computed by sizeof. */
 #undef SIZEOF_UNSIGNED___INT128
 
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
 /* If using the C implementation of alloca, define if you know the
    direction of stack growth for your system; otherwise it will be
    automatically deduced at runtime.
@@ -719,9 +762,6 @@
 /* Define if <thread_db.h> has the TD_VERSION error code. */
 #undef THREAD_DB_HAS_TD_VERSION
 
-/* Define to 1 if the regex included in libiberty should be used. */
-#undef USE_INCLUDED_REGEX
-
 /* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
@@ -752,13 +792,14 @@
 /* Define if the PPC simulator is being linked in. */
 #undef WITH_PPC_SIM
 
+/* Directory containing Python's standard libraries from --with-python-libdir.
+   */
+#undef WITH_PYTHON_LIBDIR
+
 /* Define if --with-python provides a path, either directly or via
    python-config.py --exec-prefix. */
 #undef WITH_PYTHON_PATH
 
-/* Define if the simulator is being linked in. */
-#undef WITH_SIM
-
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -792,6 +833,9 @@
 /* Define to 1 if you need to in order for `stat' and other things to work. */
 #undef _POSIX_SOURCE
 
+/* Use structured /proc on Solaris. */
+#undef _STRUCTURED_PROC
+
 /* Define to empty if `const' does not conform to ANSI C. */
 #undef const
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure ./gdb/configure
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/configure	2024-02-01 01:47:15.000000000 +0000
@@ -196,7 +196,15 @@ test -x / || exit 1"
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
+test \$(( 1 + 1 )) = 2 || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
   if (eval "$as_required") 2>/dev/null; then :
   as_have_required=yes
 else
@@ -553,6 +561,8 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P
 # Sed expression to map a string onto a valid variable name.
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
+SHELL=${CONFIG_SHELL-/bin/sh}
+
 
 test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
@@ -619,8 +629,9 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-enable_option_checking=no
 ac_header_list=
+gt_needs=
+enable_option_checking=no
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
 GCORE_TRANSFORM_NAME
@@ -628,12 +639,13 @@ GDB_TRANSFORM_NAME
 XSLTPROC
 NM_H
 GDB_NM_FILE
-LTLIBXXHASH
-LIBXXHASH
-HAVE_LIBXXHASH
+CTF_DEPS
+LIBCTF
 LTLIBBABELTRACE
 LIBBABELTRACE
 HAVE_LIBBABELTRACE
+LIBBACKTRACE_LIB
+LIBBACKTRACE_INC
 HAVE_NATIVE_GCORE_HOST
 NAT_GENERATED_FILES
 XM_CLIBS
@@ -688,12 +700,12 @@ TCL_BIN_DIR
 TCL_PATCH_LEVEL
 TCL_VERSION
 WIN32LDAPP
+WIN32LIBS
 GUI_CFLAGS_X
 LIBGUI
 LTLIBLZMA
 LIBLZMA
 HAVE_LIBLZMA
-WIN32LIBS
 SER_HARDWIRE
 WERROR_CFLAGS
 WARN_CFLAGS
@@ -702,15 +714,6 @@ SYSTEM_GDBINIT
 TARGET_SYSTEM_ROOT
 CONFIG_LDFLAGS
 RDYNAMIC
-PTHREAD_CFLAGS
-PTHREAD_LIBS
-PTHREAD_CC
-ax_pthread_config
-SED
-ALLOCA
-LTLIBIPT
-LIBIPT
-HAVE_LIBIPT
 SRCHIGH_CFLAGS
 SRCHIGH_LIBS
 HAVE_GUILE_FALSE
@@ -726,40 +729,39 @@ PYTHON_LIBS
 PYTHON_CPPFLAGS
 PYTHON_CFLAGS
 python_prog_path
-LTLIBMPFR
-LIBMPFR
-HAVE_LIBMPFR
+GMPINC
+GMPLIBS
 LTLIBEXPAT
 LIBEXPAT
 HAVE_LIBEXPAT
 JIT_READER_DIR
 TARGET_PTR
+READLINE_DOC_SOURCE_INCLUDES
 READLINE_TEXI_INCFLAG
 READLINE_CFLAGS
 READLINE_DEPS
 READLINE
-LTLIBICONV
-LIBICONV
+ZSTD_LIBS
+ZSTD_CFLAGS
 zlibinc
 zlibdir
 MIG
 WINDRES
 DLLTOOL
-AR
 YFLAGS
 YACC
-RANLIB
-LN_S
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-AWK
 REPORT_BUGS_TEXI
 REPORT_BUGS_TO
 PKGVERSION
 CODESIGN_CERT
+DEBUGINFOD_LIBS
+DEBUGINFOD_CFLAGS
 HAVE_NATIVE_GCORE_TARGET
 TARGET_OBS
+AMD_DBGAPI_LIBS
+AMD_DBGAPI_CFLAGS
+ENABLE_BFD_64_BIT_FALSE
+ENABLE_BFD_64_BIT_TRUE
 subdirs
 GDB_DATADIR
 DEBUGDIR
@@ -772,21 +774,67 @@ GENCAT
 INSTOBJEXT
 DATADIRNAME
 CATALOGS
-POSUB
-GMSGFMT
-XGETTEXT
 INCINTL
 LIBINTL_DEP
+POSUB
+LTLIBINTL
 LIBINTL
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
+MSGMERGE
+XGETTEXT
+GMSGFMT
+MSGFMT
 USE_NLS
+MKINSTALLDIRS
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+SET_MAKE
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
 CCDEPMODE
 DEPDIR
 am__leading_dot
+LTLIBXXHASH
+LIBXXHASH
+HAVE_LIBXXHASH
+LTLIBIPT
+LIBIPT
+HAVE_LIBIPT
+PTHREAD_CFLAGS
+PTHREAD_LIBS
+PTHREAD_CC
+ax_pthread_config
+ALLOCA
 CXX_DIALECT
-HAVE_CXX11
+HAVE_CXX17
+CXXCPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+AWK
+RANLIB
+AR
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+LIBTOOL
+target_noncanonical
 INSTALL_STRIP_PROGRAM
 STRIP
 install_sh
+LARGEFILE_CPPFLAGS
 target_os
 target_vendor
 target_cpu
@@ -859,16 +907,37 @@ enable_option_checking
 enable_maintainer_mode
 enable_plugins
 enable_largefile
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+enable_threading
+with_intel_pt
+enable_rpath
+with_libipt_prefix
+with_libipt_type
+with_xxhash
+with_libxxhash_prefix
+with_libxxhash_type
+enable_nls
+with_libiconv_prefix
+with_libiconv_type
+with_libintl_prefix
+with_libintl_type
 with_separate_debug_dir
+with_additional_debug_dirs
 with_gdb_datadir
 with_relocated_sources
 with_auto_load_dir
 with_auto_load_safe_path
 enable_targets
 enable_64_bit_bfd
-enable_gdbmi
+with_amd_dbgapi
 enable_tui
 enable_gdbtk
+with_debuginfod
 with_libunwind_ia64
 with_curses
 enable_profiling
@@ -876,22 +945,17 @@ enable_codesign
 with_pkgversion
 with_bugurl
 with_system_zlib
-with_gnu_ld
-enable_rpath
-with_libiconv_prefix
+with_zstd
 with_iconv_bin
 with_system_readline
 with_jit_reader_dir
 with_expat
 with_libexpat_prefix
-with_mpfr
-with_libmpfr_prefix
+with_libexpat_type
 with_python
+with_python_libdir
 with_guile
 enable_source_highlight
-with_intel_pt
-with_libipt_prefix
-with_included_regex
 with_sysroot
 with_system_gdbinit
 with_system_gdbinit_dir
@@ -901,15 +965,16 @@ enable_gdb_build_warnings
 enable_ubsan
 with_lzma
 with_liblzma_prefix
+with_liblzma_type
 with_tcl
 with_tk
 with_x
 enable_sim
-enable_gdbserver
+enable_libbacktrace
 with_babeltrace
 with_libbabeltrace_prefix
-with_xxhash
-with_libxxhash_prefix
+with_libbabeltrace_type
+enable_libctf
 enable_unit_tests
 '
       ac_precious_vars='build_alias
@@ -924,14 +989,25 @@ CXX
 CXXFLAGS
 CCC
 CPP
+CXXCPP
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
 MAKEINFO
 MAKEINFOFLAGS
+AMD_DBGAPI_CFLAGS
+AMD_DBGAPI_LIBS
+DEBUGINFOD_CFLAGS
+DEBUGINFOD_LIBS
 YACC
 YFLAGS
+ZSTD_CFLAGS
+ZSTD_LIBS
+GMPLIBS
+GMPINC
 XMKMF'
 ac_subdirs_all='testsuite
-gdbtk
-gdbserver'
+gdbtk'
 
 # Initialize some variables set by options.
 ac_init_help=
@@ -1557,15 +1633,22 @@ Optional Features:
                           sometimes confusing) to the casual installer
   --enable-plugins        Enable support for plugins
   --disable-largefile     omit support for large files
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-threading      include support for parallel processing of data
+                          (yes/no)
+  --disable-rpath         do not hardcode runtime library paths
+  --disable-nls           do not use Native Language Support
   --enable-targets=TARGETS
                           alternative target configurations
   --enable-64-bit-bfd     64-bit support (on hosts with narrower word sizes)
-  --disable-gdbmi         disable machine-interface (MI)
   --enable-tui            enable full-screen terminal user interface (TUI)
   --enable-gdbtk          enable gdbtk graphical user interface (GUI)
   --enable-profiling      enable profiling of GDB
   --enable-codesign=CERT  sign gdb with 'codesign -s CERT'
-  --disable-rpath         do not hardcode runtime library paths
   --enable-source-highlight
                           enable source-highlight for source listings
   --enable-werror         treat compile warnings as errors
@@ -1575,17 +1658,39 @@ Optional Features:
                           gcc is used
   --enable-ubsan          enable undefined behavior sanitizer (auto/yes/no)
   --enable-sim            link gdb with simulator
-  --enable-gdbserver      automatically build gdbserver (yes/no/auto, default
-                          is auto)
+  --enable-libbacktrace   use libbacktrace to write a backtrace after a fatal
+                          signal.
+  --enable-libctf         Handle .ctf type-info sections [default=yes]
   --enable-unit-tests     Enable the inclusion of unit tests when compiling
                           GDB
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-intel-pt         include Intel Processor Trace support (auto/yes/no)
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libipt-prefix[=DIR]  search for libipt in DIR/include and DIR/lib
+  --without-libipt-prefix     don't search for libipt in includedir and libdir
+  --with-libipt-type=TYPE     type of library to search for (auto/static/shared)
+  --with-xxhash           use libxxhash for hashing (faster) (auto/yes/no)
+  --with-libxxhash-prefix[=DIR]  search for libxxhash in DIR/include and DIR/lib
+  --without-libxxhash-prefix     don't search for libxxhash in includedir and libdir
+  --with-libxxhash-type=TYPE     type of library to search for (auto/static/shared)
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+  --with-libiconv-type=TYPE     type of library to search for (auto/static/shared)
+  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
+  --without-libintl-prefix     don't search for libintl in includedir and libdir
+  --with-libintl-type=TYPE     type of library to search for (auto/static/shared)
   --with-separate-debug-dir=PATH
                           look for global separate debug info in this path
                           [LIBDIR/debug]
+  --with-additional-debug-dirs=PATHs
+                          colon-separated list of additional directories to
+                          search for separate debug info
   --with-gdb-datadir=PATH look for global separate data files in this path
                           [DATADIR/gdb]
   --with-relocated-sources=PATH
@@ -1598,15 +1703,17 @@ Optional Packages:
                           [--with-auto-load-dir]
   --without-auto-load-safe-path
                           do not restrict auto-loaded files locations
+  --with-amd-dbgapi       support for the amd-dbgapi target (yes / no / auto)
+  --with-debuginfod       Enable debuginfo lookups with debuginfod
+                          (auto/yes/no)
   --with-libunwind-ia64   use libunwind frame unwinding for ia64 targets
   --with-curses           use the curses library instead of the termcap
                           library
   --with-pkgversion=PKG   Use PKG in the version string in place of "GDB"
   --with-bugurl=URL       Direct users to URL to report a bug
   --with-system-zlib      use installed libz
-  --with-gnu-ld           assume the C compiler uses GNU ld default=no
-  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
-  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+  --with-zstd             support zstd compressed debug sections
+                          (default=auto)
   --with-iconv-bin=PATH   specify where to find the iconv program
   --with-system-readline  use installed readline library
   --with-jit-reader-dir=PATH
@@ -1614,20 +1721,13 @@ Optional Packages:
   --with-expat            include expat support (auto/yes/no)
   --with-libexpat-prefix[=DIR]  search for libexpat in DIR/include and DIR/lib
   --without-libexpat-prefix     don't search for libexpat in includedir and libdir
-  --with-mpfr             include MPFR support (auto/yes/no)
-  --with-libmpfr-prefix[=DIR]  search for libmpfr in DIR/include and DIR/lib
-  --without-libmpfr-prefix     don't search for libmpfr in includedir and libdir
+  --with-libexpat-type=TYPE     type of library to search for (auto/static/shared)
   --with-python[=PYTHON]  include python support
                           (auto/yes/no/<python-program>)
+  --with-python-libdir[=DIR]
+                          search for python's libraries in DIR
   --with-guile[=GUILE]    include guile support
                           (auto/yes/no/<guile-version>/<pkg-config-program>)
-  --with-intel-pt         include Intel Processor Trace support (auto/yes/no)
-  --with-libipt-prefix[=DIR]  search for libipt in DIR/include and DIR/lib
-  --without-libipt-prefix     don't search for libipt in includedir and libdir
-  --without-included-regex
-                          don't use included regex; this is the default on
-                          systems with version 2 of the GNU C library (use
-                          with caution on other system)
   --with-sysroot[=DIR]    search for usr/lib et al within DIR
   --with-system-gdbinit=PATH
                           automatically load a system-wide gdbinit file
@@ -1637,15 +1737,14 @@ Optional Packages:
   --with-lzma             support lzma compression (auto/yes/no)
   --with-liblzma-prefix[=DIR]  search for liblzma in DIR/include and DIR/lib
   --without-liblzma-prefix     don't search for liblzma in includedir and libdir
+  --with-liblzma-type=TYPE     type of library to search for (auto/static/shared)
   --with-tcl              directory containing tcl configuration (tclConfig.sh)
   --with-tk               directory containing tk configuration (tkConfig.sh)
   --with-x                use the X Window System
   --with-babeltrace       include babeltrace support (auto/yes/no)
   --with-libbabeltrace-prefix[=DIR]  search for libbabeltrace in DIR/include and DIR/lib
   --without-libbabeltrace-prefix     don't search for libbabeltrace in includedir and libdir
-  --with-xxhash           use libxxhash for hashing (faster) (auto/yes/no)
-  --with-libxxhash-prefix[=DIR]  search for libxxhash in DIR/include and DIR/lib
-  --without-libxxhash-prefix     don't search for libxxhash in includedir and libdir
+  --with-libbabeltrace-type=TYPE     type of library to search for (auto/static/shared)
 
 Some influential environment variables:
   CC          C compiler command
@@ -1658,15 +1757,33 @@ Some influential environment variables:
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
   CPP         C preprocessor
+  CXXCPP      C++ preprocessor
+  PKG_CONFIG  path to pkg-config utility
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
   MAKEINFO    Parent configure detects if it is of sufficient version.
   MAKEINFOFLAGS
               Parameters for MAKEINFO.
+  AMD_DBGAPI_CFLAGS
+              C compiler flags for AMD_DBGAPI, overriding pkg-config
+  AMD_DBGAPI_LIBS
+              linker flags for AMD_DBGAPI, overriding pkg-config
+  DEBUGINFOD_CFLAGS
+              C compiler flags for DEBUGINFOD, overriding pkg-config
+  DEBUGINFOD_LIBS
+              linker flags for DEBUGINFOD, overriding pkg-config
   YACC        The `Yet Another Compiler Compiler' implementation to use.
               Defaults to the first program found out of: `bison -y', `byacc',
               `yacc'.
   YFLAGS      The list of arguments that will be passed by default to $YACC.
               This script will default YFLAGS to the empty string to avoid a
               default value of `-d' given by some make applications.
+  ZSTD_CFLAGS C compiler flags for ZSTD, overriding pkg-config
+  ZSTD_LIBS   linker flags for ZSTD, overriding pkg-config
+  GMPLIBS     How to link GMP
+  GMPINC      How to find GMP include files
   XMKMF       Path to xmkmf, Makefile generator for X Window System
 
 Use these variables to override the choices made by `configure' or to help
@@ -2068,189 +2185,6 @@ fi
 
 } # ac_fn_c_try_link
 
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if test "$cross_compiling" = yes; then
-    # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid; break
-else
-  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=$ac_mid; break
-else
-  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  ac_lo= ac_hi=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid
-else
-  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
-  else
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (($2) < 0)
-    {
-      long int i = longval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%ld", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%lu", i);
-    }
-  /* Do not output a trailing newline, as this causes \r\n confusion
-     on some platforms.  */
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
-  ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
-  fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_compute_int
-
 # ac_fn_c_check_func LINENO FUNC VAR
 # ----------------------------------
 # Tests whether FUNC exists, setting the cache variable VAR accordingly
@@ -2318,62 +2252,88 @@ eval ac_res=\$$3
 
 } # ac_fn_c_check_func
 
-# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
-# ----------------------------------------------------
-# Tries to find if the field MEMBER exists in type AGGR, after including
-# INCLUDES, setting cache variable VAR accordingly.
-ac_fn_c_check_member ()
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if eval \${$4+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$5
-int
-main ()
-{
-static $2 ac_aggr;
-if (ac_aggr.$3)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$4=yes"
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$5
-int
-main ()
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
 {
-static $2 ac_aggr;
-if (sizeof ac_aggr.$3)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$4=yes"
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
 else
-  eval "$4=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
 fi
-eval ac_res=\$$4
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
 
-} # ac_fn_c_check_member
+} # ac_fn_cxx_try_link
 
 # ac_fn_c_check_type LINENO TYPE VAR INCLUDES
 # -------------------------------------------
@@ -2475,51 +2435,62 @@ eval ac_res=\$$3
 
 } # ac_fn_c_check_decl
 
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_link ()
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
 fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
 
-} # ac_fn_cxx_try_link
+} # ac_fn_c_check_member
 
 # ac_fn_cxx_check_func LINENO FUNC VAR
 # ------------------------------------
@@ -2587,6 +2558,189 @@ eval ac_res=\$$3
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_cxx_check_func
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
@@ -2874,6 +3028,7 @@ fi
 as_fn_append ac_header_list " stdlib.h"
 as_fn_append ac_header_list " unistd.h"
 as_fn_append ac_header_list " sys/param.h"
+gt_needs="$gt_needs "
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
@@ -2945,6 +3100,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+
+
 ac_config_headers="$ac_config_headers config.h:config.in"
 
 
@@ -2971,9 +3128,6 @@ fi
 
 
 
-# Set the 'development' global.
-. $srcdir/../bfd/development.sh
-
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -4732,15 +4886,56 @@ fi
 
 
 case "${host}" in
-  sparc-*-solaris*|i[3-7]86-*-solaris*)
-    # On native 32bit sparc and ia32 solaris, large-file and procfs support
-    # are mutually exclusive; and without procfs support, the bfd/ elf module
-    # cannot provide certain routines such as elfcore_write_prpsinfo
-    # or elfcore_write_prstatus.  So unless the user explicitly requested
-    # large-file support through the --enable-largefile switch, disable
-    # large-file support in favor of procfs support.
-    test "${target}" = "${host}" -a "x$plugins" = xno \
-      && : ${enable_largefile="no"}
+  sparc-*-solaris*|i?86-*-solaris*)
+    # On native 32-bit Solaris/SPARC and x86, large-file and procfs support
+    # were mutually exclusive until Solaris 11.3.  Without procfs support,
+    # the bfd/ elf module cannot provide certain routines such as
+    # elfcore_write_prpsinfo or elfcore_write_prstatus.  So unless the user
+    # explicitly requested large-file support through the
+    # --enable-largefile switch, disable large-file support in favor of
+    # procfs support.
+    #
+    # Check if <sys/procfs.h> is incompatible with large-file support.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#define _STRUCTURED_PROC 1
+#include <sys/procfs.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  acx_cv_procfs_lfs=yes
+else
+  acx_cv_procfs_lfs=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    #
+    # Forcefully disable large-file support only if necessary, gdb is in
+    # tree and enabled.
+    if test "${target}" = "${host}" -a "$acx_cv_procfs_lfs" = no \
+         -a -d $srcdir/../gdb -a "$enable_gdb" != no; then
+      : ${enable_largefile="no"}
+      if test "$plugins" = yes; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+plugin support disabled; require large-file support which is incompatible with GDB." >&5
+$as_echo "$as_me: WARNING:
+plugin support disabled; require large-file support which is incompatible with GDB." >&2;}
+	plugins=no
+      fi
+    fi
+    #
+    # Explicitly undef _FILE_OFFSET_BITS if enable_largefile=no for the
+    # benefit of g++ 9+ which predefines it on Solaris.
+    if test "$enable_largefile" = no; then
+      LARGEFILE_CPPFLAGS="-U_FILE_OFFSET_BITS"
+
+    fi
     ;;
 esac
 
@@ -4945,88 +5140,6 @@ rm -rf conftest*
 fi
 
 
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${CC-cc} option to accept ANSI C" >&5
-$as_echo_n "checking for ${CC-cc} option to accept ANSI C... " >&6; }
-if ${am_cv_prog_cc_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  am_cv_prog_cc_stdc=no
-ac_save_CC="$CC"
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-
-int
-main ()
-{
-
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  am_cv_prog_cc_stdc="$ac_arg"; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-CC="$ac_save_CC"
-
-fi
-
-if test -z "$am_cv_prog_cc_stdc"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_stdc" >&5
-$as_echo "$am_cv_prog_cc_stdc" >&6; }
-fi
-case "x$am_cv_prog_cc_stdc" in
-  x|xno) ;;
-  *) CC="$CC $am_cv_prog_cc_stdc" ;;
-esac
-
 # Expand $ac_aux_dir to an absolute path.
 am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
@@ -5170,2095 +5283,2112 @@ ac_configure="$SHELL $ac_aux_dir/configu
 
 
 
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-
-# We require a C++11 compiler.  Check if one is available, and if
-# necessary, set CXX_DIALECT to some -std=xxx switch.
-
-  ax_cxx_compile_alternatives="11 0x"    ax_cxx_compile_cxx11_required=true
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-  CXX_DIALECT=""
-  ac_success=no
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5
-$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; }
-if ${ax_cv_cxx_compile_cxx11+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
+# Set build, build_cpu, build_vendor and build_os.
 
-// If the compiler admits that it is not ready for C++11, why torture it?
-// Hopefully, this will speed up the test.
 
-#ifndef __cplusplus
+# Set host, host_cpu, host_vendor, and host_os.
 
-#error "This is not a C++ compiler"
 
-#elif __cplusplus < 201103L
+# Set target, target_cpu, target_vendor, and target_os.
 
-#error "This is not a C++11 compiler"
 
-#else
+ case ${build_alias} in
+  "") build_noncanonical=${build} ;;
+  *) build_noncanonical=${build_alias} ;;
+esac
 
-namespace cxx11
-{
+ case ${host_alias} in
+  "") host_noncanonical=${build_noncanonical} ;;
+  *) host_noncanonical=${host_alias} ;;
+esac
 
-  namespace test_static_assert
-  {
+ case ${target_alias} in
+  "") target_noncanonical=${host_noncanonical} ;;
+  *) target_noncanonical=${target_alias} ;;
+esac
 
-    template <typename T>
-    struct check
-    {
-      static_assert(sizeof(int) <= sizeof(T), "not big enough");
-    };
 
-  }
 
-  namespace test_final_override
-  {
 
-    struct Base
-    {
-      virtual void f() {}
-    };
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
 
-    struct Derived : public Base
-    {
-      virtual void f() override {}
-    };
 
-  }
+# We require libtool to link with the in-tree libtool libraries
+# the proper way.
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
 
-  namespace test_double_right_angle_brackets
-  {
 
-    template < typename T >
-    struct check {};
 
-    typedef check<void> single_type;
-    typedef check<check<void>> double_type;
-    typedef check<check<check<void>>> triple_type;
-    typedef check<check<check<check<void>>>> quadruple_type;
+macro_version='2.2.7a'
+macro_revision='1.3134'
 
-  }
 
-  namespace test_decltype
-  {
 
-    int
-    f()
-    {
-      int a = 1;
-      decltype(a) b = 2;
-      return a + b;
-    }
 
-  }
 
-  namespace test_type_deduction
-  {
 
-    template < typename T1, typename T2 >
-    struct is_same
-    {
-      static const bool value = false;
-    };
 
-    template < typename T >
-    struct is_same<T, T>
-    {
-      static const bool value = true;
-    };
 
-    template < typename T1, typename T2 >
-    auto
-    add(T1 a1, T2 a2) -> decltype(a1 + a2)
-    {
-      return a1 + a2;
-    }
 
-    int
-    test(const int c, volatile int v)
-    {
-      static_assert(is_same<int, decltype(0)>::value == true, "");
-      static_assert(is_same<int, decltype(c)>::value == false, "");
-      static_assert(is_same<int, decltype(v)>::value == false, "");
-      auto ac = c;
-      auto av = v;
-      auto sumi = ac + av + 'x';
-      auto sumf = ac + av + 1.0;
-      static_assert(is_same<int, decltype(ac)>::value == true, "");
-      static_assert(is_same<int, decltype(av)>::value == true, "");
-      static_assert(is_same<int, decltype(sumi)>::value == true, "");
-      static_assert(is_same<int, decltype(sumf)>::value == false, "");
-      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
-      return (sumf > 0.0) ? sumi : add(c, v);
-    }
 
-  }
 
-  namespace test_noexcept
-  {
 
-    int f() { return 0; }
-    int g() noexcept { return 0; }
 
-    static_assert(noexcept(f()) == false, "");
-    static_assert(noexcept(g()) == true, "");
+ltmain="$ac_aux_dir/ltmain.sh"
 
-  }
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
 
-  namespace test_constexpr
-  {
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
-    template < typename CharT >
-    unsigned long constexpr
-    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
-    {
-      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
-    }
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
 
-    template < typename CharT >
-    unsigned long constexpr
-    strlen_c(const CharT *const s) noexcept
-    {
-      return strlen_c_r(s, 0UL);
-    }
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
 
-    static_assert(strlen_c("") == 0UL, "");
-    static_assert(strlen_c("1") == 1UL, "");
-    static_assert(strlen_c("example") == 7UL, "");
-    static_assert(strlen_c("another\0example") == 7UL, "");
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
 
-  }
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
 
-  namespace test_rvalue_references
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`print -r -- -n 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
   {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
 
-    template < int N >
-    struct answer
-    {
-      static constexpr int value = N;
-    };
-
-    answer<1> f(int&)       { return answer<1>(); }
-    answer<2> f(const int&) { return answer<2>(); }
-    answer<3> f(int&&)      { return answer<3>(); }
-
-    void
-    test()
-    {
-      int i = 0;
-      const int c = 0;
-      static_assert(decltype(f(i))::value == 1, "");
-      static_assert(decltype(f(c))::value == 2, "");
-      static_assert(decltype(f(0))::value == 3, "");
-    }
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
 
-  }
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
 
-  namespace test_uniform_initialization
-  {
 
-    struct test
-    {
-      static const int zero {};
-      static const int one {1};
-    };
 
-    static_assert(test::zero == 0, "");
-    static_assert(test::one == 1, "");
 
-  }
 
-  namespace test_lambdas
-  {
 
-    void
-    test1()
-    {
-      auto lambda1 = [](){};
-      auto lambda2 = lambda1;
-      lambda1();
-      lambda2();
-    }
 
-    int
-    test2()
-    {
-      auto a = [](int i, int j){ return i + j; }(1, 2);
-      auto b = []() -> int { return '0'; }();
-      auto c = [=](){ return a + b; }();
-      auto d = [&](){ return c; }();
-      auto e = [a, &b](int x) mutable {
-        const auto identity = [](int y){ return y; };
-        for (auto i = 0; i < a; ++i)
-          a += b--;
-        return x + identity(a + b);
-      }(0);
-      return a + b + c + d + e;
-    }
 
-    int
-    test3()
-    {
-      const auto nullary = [](){ return 0; };
-      const auto unary = [](int x){ return x; };
-      using nullary_t = decltype(nullary);
-      using unary_t = decltype(unary);
-      const auto higher1st = [](nullary_t f){ return f(); };
-      const auto higher2nd = [unary](nullary_t f1){
-        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
-      };
-      return higher1st(nullary) + higher2nd(nullary)(unary);
-    }
 
-  }
 
-  namespace test_variadic_templates
-  {
 
-    template <int...>
-    struct sum;
 
-    template <int N0, int... N1toN>
-    struct sum<N0, N1toN...>
-    {
-      static constexpr auto value = N0 + sum<N1toN...>::value;
-    };
 
-    template <>
-    struct sum<>
-    {
-      static constexpr auto value = 0;
-    };
 
-    static_assert(sum<>::value == 0, "");
-    static_assert(sum<1>::value == 1, "");
-    static_assert(sum<23>::value == 23, "");
-    static_assert(sum<1, 2>::value == 3, "");
-    static_assert(sum<5, 5, 11>::value == 21, "");
-    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
 
-  }
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
 
-  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
-  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
-  // because of this.
-  namespace test_template_alias_sfinae
-  {
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
 
-    struct foo {};
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
 
-    template<typename T>
-    using member = typename T::member_type;
 
-    template<typename T>
-    void func(...) {}
 
-    template<typename T>
-    void func(member<T>*) {}
 
-    void test();
 
-    void test() { func<foo>(0); }
 
-  }
 
-}  // namespace cxx11
 
-#endif  // __cplusplus >= 201103L
 
 
 
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ax_cv_cxx_compile_cxx11=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ax_cv_cxx_compile_cxx11=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5
-$as_echo "$ax_cv_cxx_compile_cxx11" >&6; }
-  if test x$ax_cv_cxx_compile_cxx11 = xyes; then
-    ac_success=yes
-  fi
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
 
-    if test x$ac_success = xno; then
-    for alternative in ${ax_cxx_compile_alternatives}; do
-      switch="-std=gnu++${alternative}"
-      cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh`
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
-$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; }
-if eval \${$cachevar+:} false; then :
-  $as_echo_n "(cached) " >&6
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
-  ac_save_CXX="$CXX"
-         CXX="$CXX $switch"
-         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+  ac_cv_path_FGREP=$FGREP
+fi
 
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
 
-// If the compiler admits that it is not ready for C++11, why torture it?
-// Hopefully, this will speed up the test.
 
-#ifndef __cplusplus
+test -z "$GREP" && GREP=grep
 
-#error "This is not a C++ compiler"
 
-#elif __cplusplus < 201103L
 
-#error "This is not a C++11 compiler"
 
-#else
 
-namespace cxx11
-{
 
-  namespace test_static_assert
-  {
 
-    template <typename T>
-    struct check
-    {
-      static_assert(sizeof(int) <= sizeof(T), "not big enough");
-    };
 
-  }
 
-  namespace test_final_override
-  {
 
-    struct Base
-    {
-      virtual void f() {}
-    };
 
-    struct Derived : public Base
-    {
-      virtual void f() override {}
-    };
 
-  }
 
-  namespace test_double_right_angle_brackets
-  {
 
-    template < typename T >
-    struct check {};
 
-    typedef check<void> single_type;
-    typedef check<check<void>> double_type;
-    typedef check<check<check<void>>> triple_type;
-    typedef check<check<check<check<void>>>> quadruple_type;
 
-  }
 
-  namespace test_decltype
-  {
 
-    int
-    f()
-    {
-      int a = 1;
-      decltype(a) b = 2;
-      return a + b;
-    }
 
-  }
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
 
-  namespace test_type_deduction
-  {
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
 
-    template < typename T1, typename T2 >
-    struct is_same
-    {
-      static const bool value = false;
-    };
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
-    template < typename T >
-    struct is_same<T, T>
-    {
-      static const bool value = true;
-    };
 
-    template < typename T1, typename T2 >
-    auto
-    add(T1 a1, T2 a2) -> decltype(a1 + a2)
-    {
-      return a1 + a2;
-    }
 
-    int
-    test(const int c, volatile int v)
-    {
-      static_assert(is_same<int, decltype(0)>::value == true, "");
-      static_assert(is_same<int, decltype(c)>::value == false, "");
-      static_assert(is_same<int, decltype(v)>::value == false, "");
-      auto ac = c;
-      auto av = v;
-      auto sumi = ac + av + 'x';
-      auto sumf = ac + av + 1.0;
-      static_assert(is_same<int, decltype(ac)>::value == true, "");
-      static_assert(is_same<int, decltype(av)>::value == true, "");
-      static_assert(is_same<int, decltype(sumi)>::value == true, "");
-      static_assert(is_same<int, decltype(sumf)>::value == false, "");
-      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
-      return (sumf > 0.0) ? sumi : add(c, v);
-    }
 
-  }
 
-  namespace test_noexcept
-  {
 
-    int f() { return 0; }
-    int g() noexcept { return 0; }
 
-    static_assert(noexcept(f()) == false, "");
-    static_assert(noexcept(g()) == true, "");
 
-  }
 
-  namespace test_constexpr
-  {
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+   # Let the user override the nm to test.
+   lt_nm_to_check="$NM"
+ else
+   lt_nm_to_check="${ac_tool_prefix}nm"
+   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+     lt_nm_to_check="$lt_nm_to_check nm"
+   fi
+ fi
+ for lt_tmp_nm in "$lt_nm_to_check"; do
+   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+   for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+     IFS="$lt_save_ifs"
+     test -z "$ac_dir" && ac_dir=.
+     # Strip out any user-provided options from the nm to test twice,
+     # the first time to test to see if nm (rather than its options) has
+     # an explicit path, the second time to yield a file which can be
+     # nm'ed itself.
+     tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+     case "$tmp_nm_path" in
+     */*|*\\*) tmp_nm="$lt_tmp_nm";;
+     *) tmp_nm="$ac_dir/$lt_tmp_nm";;
+     esac
+     tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+     if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+       *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+	 break
+	 ;;
+       *)
+	 case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+	 *$tmp_nm*)
+	   lt_cv_path_NM="$tmp_nm -p"
+	   break
+	   ;;
+	 *)
+	   lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	   continue # so that we can try to find one that supports BSD flags
+	   ;;
+	 esac
+	 ;;
+       esac
+     fi
+   done
+   IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-    template < typename CharT >
-    unsigned long constexpr
-    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
-    {
-      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
-    }
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-    template < typename CharT >
-    unsigned long constexpr
-    strlen_c(const CharT *const s) noexcept
-    {
-      return strlen_c_r(s, 0UL);
-    }
 
-    static_assert(strlen_c("") == 0UL, "");
-    static_assert(strlen_c("1") == 1UL, "");
-    static_assert(strlen_c("example") == 7UL, "");
-    static_assert(strlen_c("another\0example") == 7UL, "");
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-  }
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-  namespace test_rvalue_references
-  {
 
-    template < int N >
-    struct answer
-    {
-      static constexpr int value = N;
-    };
+  test -n "$ac_ct_DUMPBIN" && break
+done
 
-    answer<1> f(int&)       { return answer<1>(); }
-    answer<2> f(const int&) { return answer<2>(); }
-    answer<3> f(int&&)      { return answer<3>(); }
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
 
-    void
-    test()
-    {
-      int i = 0;
-      const int c = 0;
-      static_assert(decltype(f(i))::value == 1, "");
-      static_assert(decltype(f(c))::value == 2, "");
-      static_assert(decltype(f(0))::value == 3, "");
-    }
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
 
-  }
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
 
-  namespace test_uniform_initialization
-  {
 
-    struct test
-    {
-      static const int zero {};
-      static const int one {1};
-    };
 
-    static_assert(test::zero == 0, "");
-    static_assert(test::one == 1, "");
 
-  }
 
-  namespace test_lambdas
-  {
 
-    void
-    test1()
-    {
-      auto lambda1 = [](){};
-      auto lambda2 = lambda1;
-      lambda1();
-      lambda2();
-    }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
 
-    int
-    test2()
-    {
-      auto a = [](int i, int j){ return i + j; }(1, 2);
-      auto b = []() -> int { return '0'; }();
-      auto c = [=](){ return a + b; }();
-      auto d = [&](){ return c; }();
-      auto e = [a, &b](int x) mutable {
-        const auto identity = [](int y){ return y; };
-        for (auto i = 0; i < a; ++i)
-          a += b--;
-        return x + identity(a + b);
-      }(0);
-      return a + b + c + d + e;
-    }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
 
-    int
-    test3()
-    {
-      const auto nullary = [](){ return 0; };
-      const auto unary = [](int x){ return x; };
-      using nullary_t = decltype(nullary);
-      using unary_t = decltype(unary);
-      const auto higher1st = [](nullary_t f){ return f(); };
-      const auto higher2nd = [unary](nullary_t f1){
-        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
-      };
-      return higher1st(nullary) + higher2nd(nullary)(unary);
-    }
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
 
-  }
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
 
-  namespace test_variadic_templates
-  {
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
 
-    template <int...>
-    struct sum;
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
 
-    template <int N0, int... N1toN>
-    struct sum<N0, N1toN...>
-    {
-      static constexpr auto value = N0 + sum<N1toN...>::value;
-    };
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
 
-    template <>
-    struct sum<>
-    {
-      static constexpr auto value = 0;
-    };
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
 
-    static_assert(sum<>::value == 0, "");
-    static_assert(sum<1>::value == 1, "");
-    static_assert(sum<23>::value == 23, "");
-    static_assert(sum<1, 2>::value == 3, "");
-    static_assert(sum<5, 5, 11>::value == 21, "");
-    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
 
-  }
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
 
-  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
-  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
-  // because of this.
-  namespace test_template_alias_sfinae
-  {
+fi
 
-    struct foo {};
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
 
-    template<typename T>
-    using member = typename T::member_type;
 
-    template<typename T>
-    void func(...) {}
 
-    template<typename T>
-    void func(member<T>*) {}
 
-    void test();
 
-    void test() { func<foo>(0); }
 
-  }
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
 
-}  // namespace cxx11
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
 
-#endif  // __cplusplus >= 201103L
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
 
 
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  eval $cachevar=yes
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
 else
-  eval $cachevar=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-         CXX="$ac_save_CXX"
+  lt_unset=false
 fi
-eval ac_res=\$$cachevar
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-      if eval test x\$$cachevar = xyes; then
-        CXX_DIALECT="$switch"
-        ac_success=yes
-        break
-      fi
-    done
-  fi
-
-    if test x$ac_success = xno; then
-                for alternative in ${ax_cxx_compile_alternatives}; do
-      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
-        cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh`
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
-$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; }
-if eval \${$cachevar+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_CXX="$CXX"
-           CXX="$CXX $switch"
-           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
 
-// If the compiler admits that it is not ready for C++11, why torture it?
-// Hopefully, this will speed up the test.
 
-#ifndef __cplusplus
 
-#error "This is not a C++ compiler"
 
-#elif __cplusplus < 201103L
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
 
-#error "This is not a C++11 compiler"
 
-#else
 
-namespace cxx11
-{
 
-  namespace test_static_assert
-  {
 
-    template <typename T>
-    struct check
-    {
-      static_assert(sizeof(int) <= sizeof(T), "not big enough");
-    };
 
-  }
 
-  namespace test_final_override
-  {
 
-    struct Base
-    {
-      virtual void f() {}
-    };
 
-    struct Derived : public Base
-    {
-      virtual void f() override {}
-    };
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
 
-  }
 
-  namespace test_double_right_angle_brackets
-  {
 
-    template < typename T >
-    struct check {};
 
-    typedef check<void> single_type;
-    typedef check<check<void>> double_type;
-    typedef check<check<check<void>>> triple_type;
-    typedef check<check<check<check<void>>>> quadruple_type;
 
-  }
 
-  namespace test_decltype
-  {
 
-    int
-    f()
-    {
-      int a = 1;
-      decltype(a) b = 2;
-      return a + b;
-    }
 
-  }
 
-  namespace test_type_deduction
-  {
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-    template < typename T1, typename T2 >
-    struct is_same
-    {
-      static const bool value = false;
-    };
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-    template < typename T >
-    struct is_same<T, T>
-    {
-      static const bool value = true;
-    };
 
-    template < typename T1, typename T2 >
-    auto
-    add(T1 a1, T2 a2) -> decltype(a1 + a2)
-    {
-      return a1 + a2;
-    }
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-    int
-    test(const int c, volatile int v)
-    {
-      static_assert(is_same<int, decltype(0)>::value == true, "");
-      static_assert(is_same<int, decltype(c)>::value == false, "");
-      static_assert(is_same<int, decltype(v)>::value == false, "");
-      auto ac = c;
-      auto av = v;
-      auto sumi = ac + av + 'x';
-      auto sumf = ac + av + 1.0;
-      static_assert(is_same<int, decltype(ac)>::value == true, "");
-      static_assert(is_same<int, decltype(av)>::value == true, "");
-      static_assert(is_same<int, decltype(sumi)>::value == true, "");
-      static_assert(is_same<int, decltype(sumf)>::value == false, "");
-      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
-      return (sumf > 0.0) ? sumi : add(c, v);
-    }
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-  }
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
 
-  namespace test_noexcept
-  {
+test -z "$OBJDUMP" && OBJDUMP=objdump
 
-    int f() { return 0; }
-    int g() noexcept { return 0; }
 
-    static_assert(noexcept(f()) == false, "");
-    static_assert(noexcept(g()) == true, "");
 
-  }
 
-  namespace test_constexpr
-  {
 
-    template < typename CharT >
-    unsigned long constexpr
-    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
-    {
-      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
-    }
 
-    template < typename CharT >
-    unsigned long constexpr
-    strlen_c(const CharT *const s) noexcept
-    {
-      return strlen_c_r(s, 0UL);
-    }
 
-    static_assert(strlen_c("") == 0UL, "");
-    static_assert(strlen_c("1") == 1UL, "");
-    static_assert(strlen_c("example") == 7UL, "");
-    static_assert(strlen_c("another\0example") == 7UL, "");
 
-  }
 
-  namespace test_rvalue_references
-  {
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
 
-    template < int N >
-    struct answer
-    {
-      static constexpr int value = N;
-    };
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-    answer<1> f(int&)       { return answer<1>(); }
-    answer<2> f(const int&) { return answer<2>(); }
-    answer<3> f(int&&)      { return answer<3>(); }
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-    void
-    test()
-    {
-      int i = 0;
-      const int c = 0;
-      static_assert(decltype(f(i))::value == 1, "");
-      static_assert(decltype(f(c))::value == 2, "");
-      static_assert(decltype(f(0))::value == 3, "");
-    }
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
 
-  }
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
 
-  namespace test_uniform_initialization
-  {
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
 
-    struct test
-    {
-      static const int zero {};
-      static const int one {1};
-    };
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
 
-    static_assert(test::zero == 0, "");
-    static_assert(test::one == 1, "");
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-  }
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
 
-  namespace test_lambdas
-  {
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-    void
-    test1()
-    {
-      auto lambda1 = [](){};
-      auto lambda2 = lambda1;
-      lambda1();
-      lambda2();
-    }
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-    int
-    test2()
-    {
-      auto a = [](int i, int j){ return i + j; }(1, 2);
-      auto b = []() -> int { return '0'; }();
-      auto c = [=](){ return a + b; }();
-      auto d = [&](){ return c; }();
-      auto e = [a, &b](int x) mutable {
-        const auto identity = [](int y){ return y; };
-        for (auto i = 0; i < a; ++i)
-          a += b--;
-        return x + identity(a + b);
-      }(0);
-      return a + b + c + d + e;
-    }
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
 
-    int
-    test3()
-    {
-      const auto nullary = [](){ return 0; };
-      const auto unary = [](int x){ return x; };
-      using nullary_t = decltype(nullary);
-      using unary_t = decltype(unary);
-      const auto higher1st = [](nullary_t f){ return f(); };
-      const auto higher2nd = [unary](nullary_t f1){
-        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
-      };
-      return higher1st(nullary) + higher2nd(nullary)(unary);
-    }
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
 
-  }
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-  namespace test_variadic_templates
-  {
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-    template <int...>
-    struct sum;
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
 
-    template <int N0, int... N1toN>
-    struct sum<N0, N1toN...>
-    {
-      static constexpr auto value = N0 + sum<N1toN...>::value;
-    };
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
 
-    template <>
-    struct sum<>
-    {
-      static constexpr auto value = 0;
-    };
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-    static_assert(sum<>::value == 0, "");
-    static_assert(sum<1>::value == 1, "");
-    static_assert(sum<23>::value == 23, "");
-    static_assert(sum<1, 2>::value == 3, "");
-    static_assert(sum<5, 5, 11>::value == 21, "");
-    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
 
-  }
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
-  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
-  // because of this.
-  namespace test_template_alias_sfinae
-  {
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-    struct foo {};
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-    template<typename T>
-    using member = typename T::member_type;
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-    template<typename T>
-    void func(...) {}
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
 
-    template<typename T>
-    void func(member<T>*) {}
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
 
-    void test();
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
-    void test() { func<foo>(0); }
 
-  }
 
-}  // namespace cxx11
 
-#endif  // __cplusplus >= 201103L
 
 
 
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  eval $cachevar=yes
-else
-  eval $cachevar=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-           CXX="$ac_save_CXX"
-fi
-eval ac_res=\$$cachevar
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-        if eval test x\$$cachevar = xyes; then
-          CXX_DIALECT="$switch"
-          ac_success=yes
-          break
-        fi
-      done
-      if test x$ac_success = xyes; then
-        break
-      fi
-    done
-  fi
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-  if test x$ax_cxx_compile_cxx11_required = xtrue; then
-    if test x$ac_success = xno; then
-      as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5
-    fi
-  fi
-  if test x$ac_success = xno; then
-    HAVE_CXX11=0
-    { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5
-$as_echo "$as_me: No compiler with C++11 support was found" >&6;}
-  else
-    HAVE_CXX11=1
 
-$as_echo "#define HAVE_CXX11 1" >>confdefs.h
 
-  fi
 
 
+plugin_option=
+plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
+for plugin in $plugin_names; do
+  plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
+  if test x$plugin_so = x$plugin; then
+    plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
+  fi
+  if test x$plugin_so != x$plugin; then
+    plugin_option="--plugin $plugin_so"
+    break
+  fi
+done
 
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-# Dependency checking.
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
 else
-  am__leading_dot=_
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depdir"
-
 
-depcc="$CC"   am_compiler_list=
 
-am_depcomp=$ac_aux_dir/depcomp
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
   fi
-  for depmode in $am_compiler_list; do
-    if test $depmode = none; then break; fi
-
-    $as_echo "$as_me:$LINENO: trying $depmode" >&5
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "include sub/conftest.Po" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
-    depcmd="depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c"
-    echo "| $depcmd" | sed -e 's/  */ /g' >&5
-    if env $depcmd > conftest.err 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po >>conftest.err 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po >>conftest.err 2>&1 &&
-       ${MAKE-make} -s -f confmf >>conftest.err 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-	$as_echo "$as_me:$LINENO: success" >&5
-        break
-      fi
-    fi
-    $as_echo "$as_me:$LINENO: failure, diagnostics are:" >&5
-    sed -e 's/^/| /' < conftest.err >&5
+done
   done
+IFS=$as_save_IFS
 
-  cd ..
-  rm -rf conftest.dir
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
 else
-  am_cv_CC_dependencies_compiler_type=none
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-if test x${am_cv_CC_dependencies_compiler_type-none} = xnone
-then as_fn_error $? "no usable dependency style found" "$LINENO" 5
-else CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
+test -z "$AR" && AR=ar
+if test -n "$plugin_option"; then
+  if $AR --help 2>&1 | grep -q "\--plugin"; then
+    touch conftest.c
+    $AR $plugin_option rc conftest.a conftest.c
+    if test "$?" != 0; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+    else
+      AR="$AR $plugin_option"
+    fi
+    rm -f conftest.*
+  fi
 fi
+test -z "$AR_FLAGS" && AR_FLAGS=cru
 
 
 
-CONFIG_OBS=
-CONFIG_DEPS=
-CONFIG_SRCS=
-ENABLE_CFLAGS=
-
-CONFIG_ALL=
-CONFIG_CLEAN=
-CONFIG_INSTALL=
-CONFIG_UNINSTALL=
-
-# If we haven't got the data from the intl directory,
-# assume NLS is disabled.
-USE_NLS=no
-LIBINTL=
-LIBINTL_DEP=
-INCINTL=
-XGETTEXT=
-GMSGFMT=
-POSUB=
-
-if test -f  ../intl/config.intl; then
-  .  ../intl/config.intl
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
-$as_echo_n "checking whether NLS is requested... " >&6; }
-if test x"$USE_NLS" != xyes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define ENABLE_NLS 1" >>confdefs.h
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5
-$as_echo_n "checking for catalogs to be installed... " >&6; }
-  # Look for .po and .gmo files in the source directory.
-  CATALOGS=
-  XLINGUAS=
-  for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
-    # If there aren't any .gmo files the shell will give us the
-    # literal string "../path/to/srcdir/po/*.gmo" which has to be
-    # weeded out.
-    case "$cat" in *\**)
-      continue;;
-    esac
-    # The quadruple backslash is collapsed to a double backslash
-    # by the backticks, then collapsed again by the double quotes,
-    # leaving us with one backslash in the sed expression (right
-    # before the dot that mustn't act as a wildcard).
-    cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
-    lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
-    # The user is allowed to set LINGUAS to a list of languages to
-    # install catalogs for.  If it's empty that means "all of them."
-    if test "x$LINGUAS" = x; then
-      CATALOGS="$CATALOGS $cat"
-      XLINGUAS="$XLINGUAS $lang"
-    else
-      case "$LINGUAS" in *$lang*)
-        CATALOGS="$CATALOGS $cat"
-        XLINGUAS="$XLINGUAS $lang"
-        ;;
-      esac
-    fi
-  done
-  LINGUAS="$XLINGUAS"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5
-$as_echo "$LINGUAS" >&6; }
 
 
-    DATADIRNAME=share
 
-  INSTOBJEXT=.mo
 
-  GENCAT=gencat
 
-  CATOBJEXT=.gmo
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
 fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-localedir='${datadir}/locale'
 
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-if test x"$USE_NLS" = xyes; then
-   CONFIG_ALL="$CONFIG_ALL all-po"
-   CONFIG_CLEAN="$CONFIG_CLEAN clean-po"
-   CONFIG_INSTALL="$CONFIG_INSTALL install-po"
-   CONFIG_UNINSTALL="$CONFIG_UNINSTALL uninstall-po"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-PACKAGE=gdb
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
+test -z "$STRIP" && STRIP=:
 
 
 
-# We never need to detect it in this sub-configure.
-# But preserve it for config.status --recheck.
 
 
 
-MAKEINFO_EXTRA_FLAGS=""
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $MAKEINFO supports @click" >&5
-$as_echo_n "checking whether $MAKEINFO supports @click... " >&6; }
-if ${gdb_cv_have_makeinfo_click+:} false; then :
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  echo '@clicksequence{a @click{} b}' >conftest.texinfo
-  if eval "$MAKEINFO conftest.texinfo >&5 2>&5"; then
-    gdb_cv_have_makeinfo_click=yes
-  else
-    gdb_cv_have_makeinfo_click=no
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
   fi
+done
+  done
+IFS=$as_save_IFS
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_makeinfo_click" >&5
-$as_echo "$gdb_cv_have_makeinfo_click" >&6; }
-if test x"$gdb_cv_have_makeinfo_click" = xyes; then
-  MAKEINFO_EXTRA_FLAGS="$MAKEINFO_EXTRA_FLAGS -DHAVE_MAKEINFO_CLICK"
 fi
-
-
-
-
-# Check whether --with-separate-debug-dir was given.
-if test "${with_separate_debug_dir+set}" = set; then :
-  withval=$with_separate_debug_dir;
-    DEBUGDIR=$withval
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
 else
-  DEBUGDIR=${libdir}/debug
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
-  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
-  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-  ac_define_dir=`eval echo $DEBUGDIR`
-  ac_define_dir=`eval echo $ac_define_dir`
-
-cat >>confdefs.h <<_ACEOF
-#define DEBUGDIR "$ac_define_dir"
-_ACEOF
-
-
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
-     if test "x$prefix" = xNONE; then
-     	test_prefix=/usr/local
-     else
-	test_prefix=$prefix
-     fi
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
   else
-     test_prefix=$exec_prefix
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
   fi
-  value=0
-  case ${ac_define_dir} in
-     "${test_prefix}"|"${test_prefix}/"*|\
-	'${exec_prefix}'|'${exec_prefix}/'*)
-     value=1
-     ;;
-  esac
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
 
-cat >>confdefs.h <<_ACEOF
-#define DEBUGDIR_RELOCATABLE $value
-_ACEOF
+test -z "$RANLIB" && RANLIB=:
+if test -n "$plugin_option" && test "$RANLIB" != ":"; then
+  if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
+    RANLIB="$RANLIB $plugin_option"
+  fi
+fi
 
 
 
 
-# We can't pass paths as command line arguments.
-# Mingw32 tries to be clever and will convert the paths for us.
-# For example -DBINDIR="/usr/local/bin" passed on the command line may get
-# converted to -DBINDIR="E:/msys/mingw32/msys/1.0/local/bin".
-# This breaks GDB's relocatable path conversions since paths passed in
-# config.h would not get so translated, the path prefixes no longer match.
 
-  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
-  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-  ac_define_dir=`eval echo $bindir`
-  ac_define_dir=`eval echo $ac_define_dir`
 
-cat >>confdefs.h <<_ACEOF
-#define BINDIR "$ac_define_dir"
-_ACEOF
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
 
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
 
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
 
-# GDB's datadir relocation
 
 
 
-# Check whether --with-gdb-datadir was given.
-if test "${with_gdb_datadir+set}" = set; then :
-  withval=$with_gdb_datadir;
-    GDB_DATADIR=$withval
-else
-  GDB_DATADIR=${datadir}/gdb
-fi
 
 
-  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
-  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-  ac_define_dir=`eval echo $GDB_DATADIR`
-  ac_define_dir=`eval echo $ac_define_dir`
 
-cat >>confdefs.h <<_ACEOF
-#define GDB_DATADIR "$ac_define_dir"
-_ACEOF
 
 
 
 
-  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
-     if test "x$prefix" = xNONE; then
-     	test_prefix=/usr/local
-     else
-	test_prefix=$prefix
-     fi
-  else
-     test_prefix=$exec_prefix
-  fi
-  value=0
-  case ${ac_define_dir} in
-     "${test_prefix}"|"${test_prefix}/"*|\
-	'${exec_prefix}'|'${exec_prefix}/'*)
-     value=1
-     ;;
-  esac
 
-cat >>confdefs.h <<_ACEOF
-#define GDB_DATADIR_RELOCATABLE $value
-_ACEOF
 
 
 
 
 
-# Check whether --with-relocated-sources was given.
-if test "${with_relocated_sources+set}" = set; then :
-  withval=$with_relocated_sources; reloc_srcdir="${withval}"
 
-  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
-  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-  ac_define_dir=`eval echo $reloc_srcdir`
-  ac_define_dir=`eval echo $ac_define_dir`
 
-cat >>confdefs.h <<_ACEOF
-#define RELOC_SRCDIR "$ac_define_dir"
-_ACEOF
 
 
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
 fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default auto-load directory" >&5
-$as_echo_n "checking for default auto-load directory... " >&6; }
-
-# Check whether --with-auto-load-dir was given.
-if test "${with_auto_load_dir+set}" = set; then :
-  withval=$with_auto_load_dir;
-else
-  with_auto_load_dir='$debugdir:$datadir/auto-load'
 fi
-
-escape_dir=`echo $with_auto_load_dir | sed -e 's/[$]datadir\>/\\\\\\\\\\\\&/g' -e 's/[$]debugdir\>/\\\\\\\\\\\\&/g'`
-
-  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
-  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-  ac_define_dir=`eval echo $escape_dir`
-  ac_define_dir=`eval echo $ac_define_dir`
-
-cat >>confdefs.h <<_ACEOF
-#define AUTO_LOAD_DIR "$ac_define_dir"
-_ACEOF
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_dir" >&5
-$as_echo "$with_auto_load_dir" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default auto-load safe-path" >&5
-$as_echo_n "checking for default auto-load safe-path... " >&6; }
-
-# Check whether --with-auto-load-safe-path was given.
-if test "${with_auto_load_safe_path+set}" = set; then :
-  withval=$with_auto_load_safe_path; if test "$with_auto_load_safe_path" = "no"; then
-     with_auto_load_safe_path="/"
-     fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
 else
-  with_auto_load_safe_path="$with_auto_load_dir"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-escape_dir=`echo $with_auto_load_safe_path | sed -e 's/[$]datadir\>/\\\\\\\\\\\\&/g' -e 's/[$]debugdir\>/\\\\\\\\\\\\&/g'`
-
-  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
-  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-  ac_define_dir=`eval echo $escape_dir`
-  ac_define_dir=`eval echo $ac_define_dir`
 
-cat >>confdefs.h <<_ACEOF
-#define AUTO_LOAD_SAFE_PATH "$ac_define_dir"
-_ACEOF
+  test -n "$AWK" && break
+done
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5
-$as_echo "$with_auto_load_safe_path" >&6; }
 
 
 
-subdirs="$subdirs testsuite"
 
 
-# Check whether to support alternative target configurations
-# Check whether --enable-targets was given.
-if test "${enable_targets+set}" = set; then :
-  enableval=$enable_targets; case "${enableval}" in
-  yes | "") as_fn_error $? "enable-targets option must specify target names or 'all'" "$LINENO" 5
-            ;;
-  no)       enable_targets= ;;
-  *)        enable_targets=$enableval ;;
-esac
-fi
 
 
-# Check whether to enable 64-bit support on 32-bit hosts
-# Check whether --enable-64-bit-bfd was given.
-if test "${enable_64_bit_bfd+set}" = set; then :
-  enableval=$enable_64_bit_bfd; case "${enableval}" in
-  yes)  want64=true  ;;
-  no)   want64=false ;;
-  *)    as_fn_error $? "bad value ${enableval} for 64-bit-bfd option" "$LINENO" 5 ;;
-esac
-else
-  want64=false
-fi
 
-# Provide defaults for some variables set by the per-host and per-target
-# configuration.
-gdb_host_obs=posix-hdep.o
 
-if test "${target}" = "${host}"; then
-  gdb_native=yes
-else
-  gdb_native=no
-fi
 
-. $srcdir/configure.host
 
-# Accumulate some settings from configure.tgt over all enabled targets
 
-TARGET_OBS=
-all_targets=
-HAVE_NATIVE_GCORE_TARGET=
 
-for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
-do
-  if test "$targ_alias" = "all"; then
-    all_targets=true
-  else
-    # Canonicalize the secondary target names.
-    result=`$ac_config_sub $targ_alias 2>/dev/null`
-    if test -n "$result"; then
-        targ=$result
-    else
-        targ=$targ_alias
-    fi
 
-    . ${srcdir}/configure.tgt
 
-    if test -z "${gdb_target_obs}"; then :
-  as_fn_error $? "configuration ${targ} is unsupported." "$LINENO" 5
-fi
 
-    # Target-specific object files
-    for i in ${gdb_target_obs}; do
-        case " $TARGET_OBS " in
-        *" ${i} "*) ;;
-        *)
-          TARGET_OBS="$TARGET_OBS ${i}"
-          ;;
-        esac
-    done
 
-    # Check whether this target needs 64-bit CORE_ADDR
-    if test x${want64} = xfalse; then
-      . ${srcdir}/../bfd/config.bfd
-    fi
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
 
-    # Check whether this target is native and supports gcore.
-    if test $gdb_native = yes -a "$targ_alias" = "$target_alias" \
-       && $gdb_have_gcore; then
-      HAVE_NATIVE_GCORE_TARGET=1
-    fi
-  fi
-done
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
 
-if test x${all_targets} = xtrue; then
+# Allow CC to be a program name with arguments.
+compiler=$CC
 
-  # We want all 64-bit targets if we either:
-  #  - run on a 64-bit host  or
-  #  - already require 64-bit support for some other target  or
-  #  - the --enable-64-bit-bfd option was supplied
-  # Otherwise we only support all 32-bit targets.
-  #
-  # NOTE: This test must be in sync with the corresponding
-  #       tests in BFD!
 
-  if test x${want64} = xfalse; then
-    # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
-
 
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
 
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
 
-    if test "x${ac_cv_sizeof_long}" = "x8"; then
-      want64=true
-    fi
-  fi
-  if test x${want64} = xtrue; then
-    TARGET_OBS='$(ALL_TARGET_OBS) $(ALL_64_TARGET_OBS)'
-  else
-    TARGET_OBS='$(ALL_TARGET_OBS)'
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
   fi
-fi
-
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BCDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
 
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
 
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
 
-# For other settings, only the main target counts.
-gdb_sim=
-gdb_osabi=
-build_gdbserver=
-targ=$target; . ${srcdir}/configure.tgt
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
 
-# Fetch the default architecture and default target vector from BFD.
-targ=$target; . $srcdir/../bfd/config.bfd
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
 
-# We only want the first architecture, so strip off the others if
-# there is more than one.
-targ_archs=`echo $targ_archs | sed 's/ .*//'`
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
 
-if test "x$targ_archs" != x; then
+  # Check to see that the pipe works correctly.
+  pipe_works=no
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_BFD_ARCH $targ_archs
-_ACEOF
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
 
-fi
-if test "x$targ_defvec" != x; then
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
 
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_BFD_VEC $targ_defvec
-_ACEOF
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
 
-fi
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
 
-# Enable MI.
-# Check whether --enable-gdbmi was given.
-if test "${enable_gdbmi+set}" = set; then :
-  enableval=$enable_gdbmi; case $enableval in
-    yes | no)
-      ;;
-    *)
-      as_fn_error $? "bad value $enableval for --enable-gdbmi" "$LINENO" 5 ;;
-  esac
-else
-  enable_gdbmi=yes
-fi
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
 
-if test x"$enable_gdbmi" = xyes; then
-  if test -d $srcdir/mi; then
-    CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_MI_OBS)"
-    CONFIG_DEPS="$CONFIG_DEPS \$(SUBDIR_MI_DEPS)"
-    CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_MI_SRCS)"
-    ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_MI_CFLAGS)"
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
   fi
-fi
+done
 
-# Enable TUI.
-# Check whether --enable-tui was given.
-if test "${enable_tui+set}" = set; then :
-  enableval=$enable_tui; case $enableval in
-    yes | no | auto)
-      ;;
-    *)
-      as_fn_error $? "bad value $enableval for --enable-tui" "$LINENO" 5 ;;
-  esac
-else
-  enable_tui=auto
 fi
 
-
-# Enable gdbtk.
-# Check whether --enable-gdbtk was given.
-if test "${enable_gdbtk+set}" = set; then :
-  enableval=$enable_gdbtk; case $enableval in
-    yes | no)
-      ;;
-    *)
-      as_fn_error $? "bad value $enableval for --enable-gdbtk" "$LINENO" 5 ;;
-  esac
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
 else
-  if test -d $srcdir/gdbtk; then
-    enable_gdbtk=yes
-  else
-    enable_gdbtk=no
-  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
 fi
 
-# We unconditionally disable gdbtk tests on selected platforms.
-case $host_os in
-  go32* | windows*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gdbtk isn't supported on $host; disabling" >&5
-$as_echo "$as_me: WARNING: gdbtk isn't supported on $host; disabling" >&2;}
-    enable_gdbtk=no ;;
-esac
 
-# Libunwind support for ia64.
 
 
-# Check whether --with-libunwind-ia64 was given.
-if test "${with_libunwind_ia64+set}" = set; then :
-  withval=$with_libunwind_ia64;
-else
-  with_libunwind_ia64=auto
-fi
 
 
-# Backward compatibility option.
-if test "${with_libunwind+set}" = set; then
-  if test x"$with_libunwind_ia64" != xauto; then
-    as_fn_error $? "option --with-libunwind is deprecated, use --with-libunwind-ia64" "$LINENO" 5
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&5
-$as_echo "$as_me: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&2;}
-  with_libunwind_ia64="$with_libunwind"
-fi
 
-case "$with_libunwind_ia64" in
-  yes | no)
-    ;;
-  auto)
-    for ac_header in libunwind-ia64.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default"
-if test "x$ac_cv_header_libunwind_ia64_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBUNWIND_IA64_H 1
-_ACEOF
 
-fi
 
-done
 
-    with_libunwind_ia64=$ac_cv_header_libunwind_ia64_h
-    ;;
-  *)
-    as_fn_error $? "bad value $with_libunwind_ia64 for GDB --with-libunwind-ia64 option" "$LINENO" 5
-    ;;
-esac
 
-if test x"$with_libunwind_ia64" = xyes; then
-  for ac_header in libunwind-ia64.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default"
-if test "x$ac_cv_header_libunwind_ia64_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBUNWIND_IA64_H 1
-_ACEOF
 
-fi
 
-done
 
-  if test x"$ac_cv_header_libunwind_ia64_h" != xyes; then
-    as_fn_error $? "GDB option --with-libunwind-ia64 requires libunwind-ia64.h" "$LINENO" 5
-  fi
-  CONFIG_OBS="$CONFIG_OBS ia64-libunwind-tdep.o"
-  CONFIG_DEPS="$CONFIG_DEPS ia64-libunwind-tdep.o"
-  CONFIG_SRCS="$CONFIG_SRCS ia64-libunwind-tdep.c"
-fi
 
-opt_curses=no
 
-# Check whether --with-curses was given.
-if test "${with_curses+set}" = set; then :
-  withval=$with_curses; opt_curses=$withval
-fi
 
 
-prefer_curses=no
-if test "$opt_curses" = "yes"; then
-  prefer_curses=yes
-fi
 
-# Profiling support.
-# Check whether --enable-profiling was given.
-if test "${enable_profiling+set}" = set; then :
-  enableval=$enable_profiling; case $enableval in
-    yes | no)
-      ;;
-    *)
-      as_fn_error $? "bad value $enableval for --enable-profile" "$LINENO" 5 ;;
-  esac
-else
-  enable_profiling=no
-fi
 
 
-for ac_func in monstartup _mcleanup
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
 fi
-done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _etext" >&5
-$as_echo_n "checking for _etext... " >&6; }
-if ${ac_cv_var__etext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-extern char _etext;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
 
-int
-main ()
-{
-free (&_etext);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_var__etext=yes
-else
-  ac_cv_var__etext=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var__etext" >&5
-$as_echo "$ac_cv_var__etext" >&6; }
-if test $ac_cv_var__etext = yes; then
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
 
-$as_echo "#define HAVE__ETEXT 1" >>confdefs.h
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    case `/usr/bin/file conftest.o` in
+	      *x86-64*)
+		LD="${LD-ld} -m elf32_x86_64"
+		;;
+	      *)
+		LD="${LD-ld} -m elf_i386"
+		;;
+	    esac
+	    ;;
+	  powerpc64le-*linux*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  powerpcle-*linux*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for etext" >&5
-$as_echo_n "checking for etext... " >&6; }
-if ${ac_cv_var_etext+:} false; then :
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdlib.h>
-extern char etext;
 
 int
 main ()
 {
-free (&etext);
+
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_var_etext=yes
+  lt_cv_cc_needs_belf=yes
 else
-  ac_cv_var_etext=no
+  lt_cv_cc_needs_belf=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_etext" >&5
-$as_echo "$ac_cv_var_etext" >&6; }
-if test $ac_cv_var_etext = yes; then
-
-$as_echo "#define HAVE_ETEXT 1" >>confdefs.h
-
-fi
-if test "$enable_profiling" = yes ; then
-  if test $ac_cv_func_monstartup = no || test $ac_cv_func__mcleanup = no; then
-    as_fn_error $? "--enable-profiling requires monstartup and _mcleanup" "$LINENO" 5
-  fi
-  PROFILE_CFLAGS=-pg
-  OLD_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS $PROFILE_CFLAGS"
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pg" >&5
-$as_echo_n "checking whether $CC supports -pg... " >&6; }
-if ${ac_cv_cc_supports_pg+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-int x;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_cc_supports_pg=yes
-else
-  ac_cv_cc_supports_pg=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cc_supports_pg" >&5
-$as_echo "$ac_cv_cc_supports_pg" >&6; }
-
-  if test $ac_cv_cc_supports_pg = no; then
-    as_fn_error $? "--enable-profiling requires a compiler which supports -pg" "$LINENO" 5
-  fi
-
-  CFLAGS="$OLD_CFLAGS"
-fi
-
-CODESIGN_CERT=
-# Check whether --enable-codesign was given.
-if test "${enable_codesign+set}" = set; then :
-  enableval=$enable_codesign; CODESIGN_CERT=$enableval
-fi
-
-
-
-
-
-# Check whether --with-pkgversion was given.
-if test "${with_pkgversion+set}" = set; then :
-  withval=$with_pkgversion; case "$withval" in
-      yes) as_fn_error $? "package version not specified" "$LINENO" 5 ;;
-      no)  PKGVERSION= ;;
-      *)   PKGVERSION="($withval) " ;;
-     esac
-else
-  PKGVERSION="(GDB) "
-
-fi
-
-
-
-
-
-# Check whether --with-bugurl was given.
-if test "${with_bugurl+set}" = set; then :
-  withval=$with_bugurl; case "$withval" in
-      yes) as_fn_error $? "bug URL not specified" "$LINENO" 5 ;;
-      no)  BUGURL=
-	   ;;
-      *)   BUGURL="$withval"
-	   ;;
-     esac
-else
-  BUGURL="http://www.gnu.org/software/gdb/bugs/"
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 fi
-
-  case ${BUGURL} in
-  "")
-    REPORT_BUGS_TO=
-    REPORT_BUGS_TEXI=
-    ;;
-  *)
-    REPORT_BUGS_TO="<$BUGURL>"
-    REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`}
-    ;;
-  esac;
-
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define PKGVERSION "$PKGVERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define REPORT_BUGS_TO "$REPORT_BUGS_TO"
-_ACEOF
-
-
-# --------------------- #
-# Checks for programs.  #
-# --------------------- #
-
-for ac_prog in gawk mawk nawk awk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
   fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$AWK" && break
-done
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
 	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
+	;;
+      esac
+      ;;
+    esac
   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+  rm -rf conftest*
+  ;;
+esac
 
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+need_locks="$enable_libtool_lock"
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7267,7 +7397,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7277,10 +7407,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -7288,17 +7418,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7307,7 +7437,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7317,17 +7447,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -7335,66 +7465,22 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-for ac_prog in 'bison -y' byacc
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_YACC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$YACC"; then
-  ac_cv_prog_YACC="$YACC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_YACC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
+    DSYMUTIL=$ac_ct_DSYMUTIL
   fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-YACC=$ac_cv_prog_YACC
-if test -n "$YACC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
-$as_echo "$YACC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
 fi
 
-
-  test -n "$YACC" && break
-done
-test -n "$YACC" || YACC="yacc"
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
+if ${ac_cv_prog_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7403,7 +7489,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7413,10 +7499,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -7424,17 +7510,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7443,7 +7529,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_AR="ar"
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7453,17 +7539,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_AR" = x; then
-    AR=""
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -7471,22 +7557,22 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    AR=$ac_ct_AR
+    NMEDIT=$ac_ct_NMEDIT
   fi
 else
-  AR="$ac_cv_prog_AR"
+  NMEDIT="$ac_cv_prog_NMEDIT"
 fi
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
+if ${ac_cv_prog_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$DLLTOOL"; then
-  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7495,7 +7581,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7505,10 +7591,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-DLLTOOL=$ac_cv_prog_DLLTOOL
-if test -n "$DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -7516,17 +7602,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_DLLTOOL"; then
-  ac_ct_DLLTOOL=$DLLTOOL
-  # Extract the first word of "dlltool", so it can be a program name with args.
-set dummy dlltool; ac_word=$2
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_DLLTOOL"; then
-  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7535,7 +7621,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    ac_cv_prog_ac_ct_LIPO="lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7545,17 +7631,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-if test -n "$ac_ct_DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_DLLTOOL" = x; then
-    DLLTOOL=""
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -7563,22 +7649,22 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    DLLTOOL=$ac_ct_DLLTOOL
+    LIPO=$ac_ct_LIPO
   fi
 else
-  DLLTOOL="$ac_cv_prog_DLLTOOL"
+  LIPO="$ac_cv_prog_LIPO"
 fi
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
-set dummy ${ac_tool_prefix}windres; ac_word=$2
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_WINDRES+:} false; then :
+if ${ac_cv_prog_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$WINDRES"; then
-  ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7587,7 +7673,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7597,10 +7683,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-WINDRES=$ac_cv_prog_WINDRES
-if test -n "$WINDRES"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
-$as_echo "$WINDRES" >&6; }
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -7608,17 +7694,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_WINDRES"; then
-  ac_ct_WINDRES=$WINDRES
-  # Extract the first word of "windres", so it can be a program name with args.
-set dummy windres; ac_word=$2
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_WINDRES+:} false; then :
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_WINDRES"; then
-  ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test.
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7627,7 +7713,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_WINDRES="windres"
+    ac_cv_prog_ac_ct_OTOOL="otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7637,17 +7723,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
-if test -n "$ac_ct_WINDRES"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5
-$as_echo "$ac_ct_WINDRES" >&6; }
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_WINDRES" = x; then
-    WINDRES=""
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -7655,26 +7741,22 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    WINDRES=$ac_ct_WINDRES
+    OTOOL=$ac_ct_OTOOL
   fi
 else
-  WINDRES="$ac_cv_prog_WINDRES"
+  OTOOL="$ac_cv_prog_OTOOL"
 fi
 
-
-case $host_os in
-  gnu*)
-    # Needed for GNU Hurd hosts.
     if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}mig", so it can be a program name with args.
-set dummy ${ac_tool_prefix}mig; ac_word=$2
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MIG+:} false; then :
+if ${ac_cv_prog_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$MIG"; then
-  ac_cv_prog_MIG="$MIG" # Let the user override the test.
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7683,7 +7765,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_MIG="${ac_tool_prefix}mig"
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7693,10 +7775,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-MIG=$ac_cv_prog_MIG
-if test -n "$MIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MIG" >&5
-$as_echo "$MIG" >&6; }
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -7704,17 +7786,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_MIG"; then
-  ac_ct_MIG=$MIG
-  # Extract the first word of "mig", so it can be a program name with args.
-set dummy mig; ac_word=$2
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_MIG+:} false; then :
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_MIG"; then
-  ac_cv_prog_ac_ct_MIG="$ac_ct_MIG" # Let the user override the test.
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7723,7 +7805,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_MIG="mig"
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7733,17 +7815,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_MIG=$ac_cv_prog_ac_ct_MIG
-if test -n "$ac_ct_MIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MIG" >&5
-$as_echo "$ac_ct_MIG" >&6; }
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_MIG" = x; then
-    MIG=""
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -7751,637 +7833,14215 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    MIG=$ac_ct_MIG
+    OTOOL64=$ac_ct_OTOOL64
   fi
 else
-  MIG="$ac_cv_prog_MIG"
+  OTOOL64="$ac_cv_prog_OTOOL64"
 fi
 
-    if test x"$MIG" = x; then
-      as_fn_error $? "MIG not found but required for $host hosts" "$LINENO" 5
-    fi
-    ;;
-esac
 
-# ---------------------- #
-# Checks for libraries.  #
-# ---------------------- #
 
-# We might need to link with -lm; most simulators need it.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5
-$as_echo_n "checking for main in -lm... " >&6; }
-if ${ac_cv_lib_m_main+:} false; then :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-
 int
 main ()
 {
-return main ();
+
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_m_main=yes
+  lt_cv_ld_exported_symbols_list=yes
 else
-  ac_cv_lib_m_main=no
+  lt_cv_ld_exported_symbols_list=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+	LDFLAGS="$save_LDFLAGS"
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5
-$as_echo "$ac_cv_lib_m_main" >&6; }
-if test "x$ac_cv_lib_m_main" = xyes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    # Allow for Darwin 4-7 (macOS 10.0-10.3) although these are not expect to
+    # build without first building modern cctools / linker.
+    case $host_cpu-$host_os in
+    *-rhapsody* | *-darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    *-darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    *-darwin*)
+      # darwin 5.x (macOS 10.1) onwards we only need to adjust when the
+      # deployment target is forced to an earlier version.
+      case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
+	UNSET,*-darwin[89]*|UNSET,*-darwin[12][0123456789]*)
+	  ;;
+	10.[012][,.]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+	  ;;
+	*)
+	  ;;
+     esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
+#define HAVE_DLFCN_H 1
 _ACEOF
 
-  LIBS="-lm $LIBS"
-
 fi
 
+done
+
+
+
+
+
+
+# Set options
 
-# Some systems (e.g. Solaris) have `gethostbyname' in libnsl.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
-$as_echo_n "checking for library containing gethostbyname... " >&6; }
-if ${ac_cv_search_gethostbyname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' nsl; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_gethostbyname=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_gethostbyname+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_gethostbyname+:} false; then :
 
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
-  ac_cv_search_gethostbyname=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+  enable_shared=yes
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
-$as_echo "$ac_cv_search_gethostbyname" >&6; }
-ac_res=$ac_cv_search_gethostbyname
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-fi
 
 
-# Some systems (e.g. Solaris) have `socketpair' in libsocket.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socketpair" >&5
-$as_echo_n "checking for library containing socketpair... " >&6; }
-if ${ac_cv_search_socketpair+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char socketpair ();
-int
-main ()
-{
-return socketpair ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' socket; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_socketpair=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_socketpair+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_socketpair+:} false; then :
 
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
-  ac_cv_search_socketpair=no
+  enable_static=yes
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socketpair" >&5
-$as_echo "$ac_cv_search_socketpair" >&6; }
-ac_res=$ac_cv_search_socketpair
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-fi
 
 
-# Link in zlib if we can.  This allows us to read compressed debug sections.
 
-  # Use the system's zlib library.
-  zlibdir="-L\$(top_builddir)/../zlib"
-  zlibinc="-I\$(top_srcdir)/../zlib"
 
-# Check whether --with-system-zlib was given.
-if test "${with_system_zlib+set}" = set; then :
-  withval=$with_system_zlib; if test x$with_system_zlib = xyes ; then
-    zlibdir=
-    zlibinc=
-  fi
 
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
 fi
 
 
+test -z "$pic_mode" && pic_mode=default
+
 
 
 
-# On FreeBSD we may need libutil for kinfo_getvmmap (used by fbsd-nat.c).
-# On GNU/kFreeBSD systems, FreeBSD libutil is renamed to libutil-freebsd.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kinfo_getvmmap" >&5
-$as_echo_n "checking for library containing kinfo_getvmmap... " >&6; }
-if ${ac_cv_search_kinfo_getvmmap+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char kinfo_getvmmap ();
-int
-main ()
-{
-return kinfo_getvmmap ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' util util-freebsd; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_kinfo_getvmmap=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_kinfo_getvmmap+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_kinfo_getvmmap+:} false; then :
 
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
-  ac_cv_search_kinfo_getvmmap=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+  enable_fast_install=yes
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kinfo_getvmmap" >&5
-$as_echo "$ac_cv_search_kinfo_getvmmap" >&6; }
-ac_res=$ac_cv_search_kinfo_getvmmap
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-$as_echo "#define HAVE_KINFO_GETVMMAP 1" >>confdefs.h
 
-fi
 
 
-# fbsd-nat.c can also use kinfo_getfile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kinfo_getfile" >&5
-$as_echo_n "checking for library containing kinfo_getfile... " >&6; }
-if ${ac_cv_search_kinfo_getfile+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char kinfo_getfile ();
-int
-main ()
-{
-return kinfo_getfile ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' util util-freebsd; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_kinfo_getfile=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_kinfo_getfile+:} false; then :
-  break
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
 fi
-done
-if ${ac_cv_search_kinfo_getfile+:} false; then :
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_search_kinfo_getfile=no
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+rmdir .libs 2>/dev/null
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kinfo_getfile" >&5
-$as_echo "$ac_cv_search_kinfo_getfile" >&6; }
-ac_res=$ac_cv_search_kinfo_getfile
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
 
-$as_echo "#define HAVE_KINFO_GETFILE 1" >>confdefs.h
 
-fi
 
 
 
-      if test "X$prefix" = "XNONE"; then
-    acl_final_prefix="$ac_default_prefix"
-  else
-    acl_final_prefix="$prefix"
-  fi
-  if test "X$exec_prefix" = "XNONE"; then
-    acl_final_exec_prefix='${prefix}'
-  else
-    acl_final_exec_prefix="$exec_prefix"
-  fi
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
-  prefix="$acl_save_prefix"
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
 
 
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
 
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
   fi
-  rm -f conf$$.sh
-fi
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
-$as_echo_n "checking for ld used by GCC... " >&6; }
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | [A-Za-z]:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
   esac
-elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if ${acl_cv_path_LD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$LD"; then
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-  for ac_dir in $PATH; do
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
     test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      acl_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
-	test "$with_gnu_ld" != no && break
-      else
-	test "$with_gnu_ld" != yes && break
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
       fi
+      break
     fi
   done
-  IFS="$ac_save_ifs"
-else
-  acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
 fi
 
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${acl_cv_prog_gnu_ld+:} false; then :
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-  acl_cv_prog_gnu_ld=yes
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
 else
-  acl_cv_prog_gnu_ld=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
-$as_echo "$acl_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$acl_cv_prog_gnu_ld
 
+  fi
+  ;;
+esac
 
+# Use C for the default configuration in the libtool script
 
-                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
-$as_echo_n "checking for shared library run path origin... " >&6; }
-if ${acl_cv_rpath+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
-    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
-    . ./conftest.sh
-    rm -f ./conftest.sh
-    acl_cv_rpath=done
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
-$as_echo "$acl_cv_rpath" >&6; }
-  wl="$acl_cv_wl"
-  libext="$acl_cv_libext"
-  shlibext="$acl_cv_shlibext"
-  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
-  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
-  hardcode_direct="$acl_cv_hardcode_direct"
-  hardcode_minus_L="$acl_cv_hardcode_minus_L"
-    # Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then :
-  enableval=$enable_rpath; :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
 else
-  enable_rpath=yes
+    :
 fi
 
+fi
 
 
 
 
 
 
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
 
-    use_additional=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
 
-    eval additional_includedir=\"$includedir\"
-    eval additional_libdir=\"$libdir\"
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      lt_prog_compiler_pic='-fPIC'
+      ;;
 
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
 
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
 
-# Check whether --with-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then :
-  withval=$with_libiconv_prefix;
-    if test "X$withval" = "Xno"; then
-      use_additional=no
-    else
-      if test "X$withval" = "X"; then
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
 
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
 
-          eval additional_includedir=\"$includedir\"
-          eval additional_libdir=\"$libdir\"
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
 
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
 
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      lt_prog_compiler_pic='-Xcompiler -fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
       else
-        additional_includedir="$withval/include"
-        additional_libdir="$withval/lib"
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
       fi
-    fi
+      ;;
 
-fi
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
 
-      LIBICONV=
-  LTLIBICONV=
-  INCICONV=
-  rpathdirs=
-  ltrpathdirs=
-  names_already_handled=
-  names_next_round='iconv '
-  while test -n "$names_next_round"; do
-    names_this_round="$names_next_round"
-    names_next_round=
-    for name in $names_this_round; do
-      already_handled=
-      for n in $names_already_handled; do
-        if test "$n" = "$name"; then
-          already_handled=yes
-          break
-        fi
-      done
-      if test -z "$already_handled"; then
-        names_already_handled="$names_already_handled $name"
-                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
-        eval value=\"\$HAVE_LIB$uppername\"
-        if test -n "$value"; then
-          if test "$value" = yes; then
-            eval value=\"\$LIB$uppername\"
-            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
-            eval value=\"\$LTLIB$uppername\"
-            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
-          else
-                                    :
-          fi
-        else
-                              found_dir=
-          found_la=
-          found_so=
-          found_a=
-          if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
-              found_dir="$additional_libdir"
-              found_so="$additional_libdir/lib$name.$shlibext"
-              if test -f "$additional_libdir/lib$name.la"; then
-                found_la="$additional_libdir/lib$name.la"
-              fi
-            else
-              if test -f "$additional_libdir/lib$name.$libext"; then
-                found_dir="$additional_libdir"
-                found_a="$additional_libdir/lib$name.$libext"
-                if test -f "$additional_libdir/lib$name.la"; then
-                  found_la="$additional_libdir/lib$name.la"
-                fi
-              fi
-            fi
-          fi
-          if test "X$found_dir" = "X"; then
-            for x in $LDFLAGS $LTLIBICONV; do
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
 
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
 
-              case "$x" in
-                -L*)
-                  dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
-                    found_dir="$dir"
-                    found_so="$dir/lib$name.$shlibext"
-                    if test -f "$dir/lib$name.la"; then
-                      found_la="$dir/lib$name.la"
-                    fi
-                  else
-                    if test -f "$dir/lib$name.$libext"; then
-                      found_dir="$dir"
-                      found_a="$dir/lib$name.$libext"
-                      if test -f "$dir/lib$name.la"; then
-                        found_la="$dir/lib$name.la"
-                      fi
-                    fi
-                  fi
-                  ;;
-              esac
-              if test "X$found_dir" != "X"; then
-                break
-              fi
-            done
-          fi
-          if test "X$found_dir" != "X"; then
-                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
-            if test "X$found_so" != "X"; then
-                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
-                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-              else
-                                                                                haveit=
-                for x in $ltrpathdirs; do
-                  if test "X$x" = "X$found_dir"; then
-                    haveit=yes
-                    break
-                  fi
-                done
-                if test -z "$haveit"; then
-                  ltrpathdirs="$ltrpathdirs $found_dir"
-                fi
-                                if test "$hardcode_direct" = yes; then
-                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-                else
-                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
-                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-                                                            haveit=
-                    for x in $rpathdirs; do
-                      if test "X$x" = "X$found_dir"; then
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ F* | *Sun*Fortran*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec=
+	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_flag_spec_ld='+b $libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo(void) {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	  export_dynamic_flag_spec='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     hardcode_libdir_flag_spec='-R$libdir'
+	     ;;
+	   *)
+	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+
+# uclinux* changes (here and below) have been submitted to the libtool
+# project, but have not yet been accepted: they are GCC-local changes
+# for the time being.  (See
+# https://lists.gnu.org/archive/html/libtool-patches/2018-05/msg00000.html)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu* | uclinuxfdpiceabi)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11502 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+void fnord () __attribute__((visibility("default")));
+#endif
+
+void fnord () { int i=42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11608 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+void fnord () __attribute__((visibility("default")));
+#endif
+
+void fnord () { int i=42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  compiler_CXX=$CC
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    hardcode_direct_CXX=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    hardcode_minus_L_CXX=yes
+	    hardcode_libdir_flag_spec_CXX='-L$libdir'
+	    hardcode_libdir_separator_CXX=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        always_export_symbols_CXX=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          allow_undefined_flag_CXX='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	    allow_undefined_flag_CXX="-z nodefs"
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    no_undefined_flag_CXX=' ${wl}-bernotok'
+	    allow_undefined_flag_CXX=' ${wl}-berok'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      whole_archive_flag_spec_CXX='$convenience'
+	    fi
+	    archive_cmds_need_lc_CXX=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  allow_undefined_flag_CXX=unsupported
+	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+        # as there is no search path for DLLs.
+        hardcode_libdir_flag_spec_CXX='-L$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+        allow_undefined_flag_CXX=unsupported
+        always_export_symbols_CXX=no
+        enable_shared_with_static_runtimes_CXX=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    cp $export_symbols $output_objdir/$soname.def;
+          else
+	    echo EXPORTS > $output_objdir/$soname.def;
+	    cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          ld_shlibs_CXX=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='${wl}-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      export_dynamic_flag_spec_CXX='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+	hardcode_direct_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	      fi
+	    fi
+	    link_all_deplibs_CXX=yes
+	    ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    archive_cmds_need_lc_CXX=no
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+	      prelink_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      old_archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+		$RANLIB $oldlib'
+	      archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      no_undefined_flag_CXX=' -zdefs'
+	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      hardcode_libdir_flag_spec_CXX='-R$libdir'
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      compiler_needs_object_CXX=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  hardcode_libdir_flag_spec_CXX='-R$libdir'
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	ld_shlibs_CXX=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	  hardcode_direct_absolute_CXX=yes
+	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    export_dynamic_flag_spec_CXX='${wl}-E'
+	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        allow_undefined_flag_CXX=' -expect_unresolved \*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+		;;
+	    esac
+
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	      hardcode_libdir_separator_CXX=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+	    no_undefined_flag_CXX=' -zdefs'
+	    archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    hardcode_libdir_flag_spec_CXX='-R$libdir'
+	    hardcode_shlibpath_var_CXX=no
+	    case $host_os in
+	      solaris2.[0-5] | solaris2.[0-5].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    link_all_deplibs_CXX=yes
+
+	    output_verbose_link_cmd='func_echo_all'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[0-5] | solaris2.[0-5].*) ;;
+		*)
+		  whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='${wl}-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	no_undefined_flag_CXX='${wl}-z,text'
+	allow_undefined_flag_CXX='${wl}-z,nodefs'
+	archive_cmds_need_lc_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+	hardcode_libdir_separator_CXX=':'
+	link_all_deplibs_CXX=yes
+	export_dynamic_flag_spec_CXX='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+	      '"$old_archive_cmds_CXX"
+	    reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+	      '"$reload_cmds_CXX"
+	    ;;
+	  *)
+	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+    GCC_CXX="$GXX"
+    LD_CXX="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fpic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-qpic'
+	    lt_prog_compiler_static_CXX='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      lt_prog_compiler_pic_CXX='-KPIC'
+	      lt_prog_compiler_static_CXX='-Bstatic'
+	      lt_prog_compiler_wl_CXX='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_CXX
+	  pic_flag=$lt_prog_compiler_pic_CXX
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+	  allow_undefined_flag_CXX=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc_CXX=no
+	  else
+	    lt_cv_archive_cmds_need_lc_CXX=yes
+	  fi
+	  allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+
+# uclinux* changes (here and below) have been submitted to the libtool
+# project, but have not yet been accepted: they are GCC-local changes
+# for the time being.  (See
+# https://lists.gnu.org/archive/html/libtool-patches/2018-05/msg00000.html)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu* | uclinuxfdpiceabi)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+# ... and we need it soon, since it is used by some of the
+# link tests in the configure script.
+: ${CONFIG_LT=./config.lt}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_LT" >&5
+$as_echo "$as_me: creating $CONFIG_LT" >&6;}
+as_write_fail=0
+cat >"$CONFIG_LT" <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>"$CONFIG_LT" <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## --------------------------------- ##
+## Main body of "$CONFIG_LT" script. ##
+## --------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x "$CONFIG_LT"
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $0 [OPTIONS]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+config.lt
+configured by $0, generated by GNU Autoconf 2.69.
+
+Copyright (C) 2009 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $# != 0
+do
+  case $1 in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) as_fn_error $? "unrecognized option: $1
+Try \`$0 --help' for more information." "$LINENO" 5 ;;
+
+    *) as_fn_error $? "unrecognized argument: $1
+Try \`$0 --help' for more information." "$LINENO" 5 ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec 6>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "$fix_srcfile_path_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ofile" >&5
+$as_echo "$as_me: creating $ofile" >&6;}
+
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+
+as_fn_exit 0
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec 5>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec 5>>config.log
+$lt_cl_success || as_fn_exit 1
+
+
+# We require a C++17 compiler.  Check if one is available, and if
+# necessary, set CXX_DIALECT to some -std=xxx switch.
+  ax_cxx_compile_alternatives="17 1z"    ax_cxx_compile_cxx17_required=true
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+  CXX_DIALECT=""
+  ac_success=no
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features by default" >&5
+$as_echo_n "checking whether $CXX supports C++17 features by default... " >&6; }
+if ${ax_cv_cxx_compile_cxx17+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+// MSVC always sets __cplusplus to 199711L in older versions; newer versions
+// only set it correctly if /Zc:__cplusplus is specified as well as a
+// /std:c++NN switch:
+// https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
+#elif __cplusplus < 201103L && !defined _MSC_VER
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+
+
+
+// If the compiler admits that it is not ready for C++14, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201402L && !defined _MSC_VER
+
+#error "This is not a C++14 compiler"
+
+#else
+
+namespace cxx14
+{
+
+  namespace test_polymorphic_lambdas
+  {
+
+    int
+    test()
+    {
+      const auto lambda = [](auto&&... args){
+        const auto istiny = [](auto x){
+          return (sizeof(x) == 1UL) ? 1 : 0;
+        };
+        const int aretiny[] = { istiny(args)... };
+        return aretiny[0];
+      };
+      return lambda(1, 1L, 1.0f, '1');
+    }
+
+  }
+
+  namespace test_binary_literals
+  {
+
+    constexpr auto ivii = 0b0000000000101010;
+    static_assert(ivii == 42, "wrong value");
+
+  }
+
+  namespace test_generalized_constexpr
+  {
+
+    template < typename CharT >
+    constexpr unsigned long
+    strlen_c(const CharT *const s) noexcept
+    {
+      auto length = 0UL;
+      for (auto p = s; *p; ++p)
+        ++length;
+      return length;
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("x") == 1UL, "");
+    static_assert(strlen_c("test") == 4UL, "");
+    static_assert(strlen_c("another\0test") == 7UL, "");
+
+  }
+
+  namespace test_lambda_init_capture
+  {
+
+    int
+    test()
+    {
+      auto x = 0;
+      const auto lambda1 = [a = x](int b){ return a + b; };
+      const auto lambda2 = [a = lambda1(x)](){ return a; };
+      return lambda2();
+    }
+
+  }
+
+  namespace test_digit_separators
+  {
+
+    constexpr auto ten_million = 100'000'000;
+    static_assert(ten_million == 100000000, "");
+
+  }
+
+  namespace test_return_type_deduction
+  {
+
+    auto f(int& x) { return x; }
+    decltype(auto) g(int& x) { return x; }
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static constexpr auto value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static constexpr auto value = true;
+    };
+
+    int
+    test()
+    {
+      auto x = 0;
+      static_assert(is_same<int, decltype(f(x))>::value, "");
+      static_assert(is_same<int&, decltype(g(x))>::value, "");
+      return x;
+    }
+
+  }
+
+}  // namespace cxx14
+
+#endif  // __cplusplus >= 201402L
+
+
+
+
+// If the compiler admits that it is not ready for C++17, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201703L && !defined _MSC_VER
+
+#error "This is not a C++17 compiler"
+
+#else
+
+#include <initializer_list>
+#include <utility>
+#include <type_traits>
+
+namespace cxx17
+{
+
+  namespace test_constexpr_lambdas
+  {
+
+    constexpr int foo = [](){return 42;}();
+
+  }
+
+  namespace test::nested_namespace::definitions
+  {
+
+  }
+
+  namespace test_fold_expression
+  {
+
+    template<typename... Args>
+    int multiply(Args... args)
+    {
+      return (args * ... * 1);
+    }
+
+    template<typename... Args>
+    bool all(Args... args)
+    {
+      return (args && ...);
+    }
+
+  }
+
+  namespace test_extended_static_assert
+  {
+
+    static_assert (true);
+
+  }
+
+  namespace test_auto_brace_init_list
+  {
+
+    auto foo = {5};
+    auto bar {5};
+
+    static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);
+    static_assert(std::is_same<int, decltype(bar)>::value);
+  }
+
+  namespace test_typename_in_template_template_parameter
+  {
+
+    template<template<typename> typename X> struct D;
+
+  }
+
+  namespace test_fallthrough_nodiscard_maybe_unused_attributes
+  {
+
+    int f1()
+    {
+      return 42;
+    }
+
+    [[nodiscard]] int f2()
+    {
+      [[maybe_unused]] auto unused = f1();
+
+      switch (f1())
+      {
+      case 17:
+        f1();
+        [[fallthrough]];
+      case 42:
+        f1();
+      }
+      return f1();
+    }
+
+  }
+
+  namespace test_extended_aggregate_initialization
+  {
+
+    struct base1
+    {
+      int b1, b2 = 42;
+    };
+
+    struct base2
+    {
+      base2() {
+        b3 = 42;
+      }
+      int b3;
+    };
+
+    struct derived : base1, base2
+    {
+        int d;
+    };
+
+    derived d1 {{1, 2}, {}, 4};  // full initialization
+    derived d2 {{}, {}, 4};      // value-initialized bases
+
+  }
+
+  namespace test_general_range_based_for_loop
+  {
+
+    struct iter
+    {
+      int i;
+
+      int& operator* ()
+      {
+        return i;
+      }
+
+      const int& operator* () const
+      {
+        return i;
+      }
+
+      iter& operator++()
+      {
+        ++i;
+        return *this;
+      }
+    };
+
+    struct sentinel
+    {
+      int i;
+    };
+
+    bool operator== (const iter& i, const sentinel& s)
+    {
+      return i.i == s.i;
+    }
+
+    bool operator!= (const iter& i, const sentinel& s)
+    {
+      return !(i == s);
+    }
+
+    struct range
+    {
+      iter begin() const
+      {
+        return {0};
+      }
+
+      sentinel end() const
+      {
+        return {5};
+      }
+    };
+
+    void f()
+    {
+      range r {};
+
+      for (auto i : r)
+      {
+        [[maybe_unused]] auto v = i;
+      }
+    }
+
+  }
+
+  namespace test_lambda_capture_asterisk_this_by_value
+  {
+
+    struct t
+    {
+      int i;
+      int foo()
+      {
+        return [*this]()
+        {
+          return i;
+        }();
+      }
+    };
+
+  }
+
+  namespace test_enum_class_construction
+  {
+
+    enum class byte : unsigned char
+    {};
+
+    byte foo {42};
+
+  }
+
+  namespace test_constexpr_if
+  {
+
+    template <bool cond>
+    int f ()
+    {
+      if constexpr(cond)
+      {
+        return 13;
+      }
+      else
+      {
+        return 42;
+      }
+    }
+
+  }
+
+  namespace test_selection_statement_with_initializer
+  {
+
+    int f()
+    {
+      return 13;
+    }
+
+    int f2()
+    {
+      if (auto i = f(); i > 0)
+      {
+        return 3;
+      }
+
+      switch (auto i = f(); i + 4)
+      {
+      case 17:
+        return 2;
+
+      default:
+        return 1;
+      }
+    }
+
+  }
+
+  namespace test_template_argument_deduction_for_class_templates
+  {
+
+    template <typename T1, typename T2>
+    struct pair
+    {
+      pair (T1 p1, T2 p2)
+        : m1 {p1},
+          m2 {p2}
+      {}
+
+      T1 m1;
+      T2 m2;
+    };
+
+    void f()
+    {
+      [[maybe_unused]] auto p = pair{13, 42u};
+    }
+
+  }
+
+  namespace test_non_type_auto_template_parameters
+  {
+
+    template <auto n>
+    struct B
+    {};
+
+    B<5> b1;
+    B<'a'> b2;
+
+  }
+
+  namespace test_structured_bindings
+  {
+
+    int arr[2] = { 1, 2 };
+    std::pair<int, int> pr = { 1, 2 };
+
+    auto f1() -> int(&)[2]
+    {
+      return arr;
+    }
+
+    auto f2() -> std::pair<int, int>&
+    {
+      return pr;
+    }
+
+    struct S
+    {
+      int x1 : 2;
+      volatile double y1;
+    };
+
+    S f3()
+    {
+      return {};
+    }
+
+    auto [ x1, y1 ] = f1();
+    auto& [ xr1, yr1 ] = f1();
+    auto [ x2, y2 ] = f2();
+    auto& [ xr2, yr2 ] = f2();
+    const auto [ x3, y3 ] = f3();
+
+  }
+
+  namespace test_exception_spec_type_system
+  {
+
+    struct Good {};
+    struct Bad {};
+
+    void g1() noexcept;
+    void g2();
+
+    template<typename T>
+    Bad
+    f(T*, T*);
+
+    template<typename T1, typename T2>
+    Good
+    f(T1*, T2*);
+
+    static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
+
+  }
+
+  namespace test_inline_variables
+  {
+
+    template<class T> void f(T)
+    {}
+
+    template<class T> inline T g(T)
+    {
+      return T{};
+    }
+
+    template<> inline void f<>(int)
+    {}
+
+    template<> int g<>(int)
+    {
+      return 5;
+    }
+
+  }
+
+}  // namespace cxx17
+
+#endif  // __cplusplus < 201703L && !defined _MSC_VER
+
+
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ax_cv_cxx_compile_cxx17=yes
+else
+  ax_cv_cxx_compile_cxx17=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx17" >&5
+$as_echo "$ax_cv_cxx_compile_cxx17" >&6; }
+    if test x$ax_cv_cxx_compile_cxx17 = xyes; then
+      ac_success=yes
+    fi
+
+    if test x$ac_success = xno; then
+    for alternative in ${ax_cxx_compile_alternatives}; do
+      switch="-std=gnu++${alternative}"
+      cachevar=`$as_echo "ax_cv_cxx_compile_cxx17_$switch" | $as_tr_sh`
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5
+$as_echo_n "checking whether $CXX supports C++17 features with $switch... " >&6; }
+if eval \${$cachevar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_CXX="$CXX"
+         CXX="$CXX $switch"
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+// MSVC always sets __cplusplus to 199711L in older versions; newer versions
+// only set it correctly if /Zc:__cplusplus is specified as well as a
+// /std:c++NN switch:
+// https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
+#elif __cplusplus < 201103L && !defined _MSC_VER
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+
+
+
+// If the compiler admits that it is not ready for C++14, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201402L && !defined _MSC_VER
+
+#error "This is not a C++14 compiler"
+
+#else
+
+namespace cxx14
+{
+
+  namespace test_polymorphic_lambdas
+  {
+
+    int
+    test()
+    {
+      const auto lambda = [](auto&&... args){
+        const auto istiny = [](auto x){
+          return (sizeof(x) == 1UL) ? 1 : 0;
+        };
+        const int aretiny[] = { istiny(args)... };
+        return aretiny[0];
+      };
+      return lambda(1, 1L, 1.0f, '1');
+    }
+
+  }
+
+  namespace test_binary_literals
+  {
+
+    constexpr auto ivii = 0b0000000000101010;
+    static_assert(ivii == 42, "wrong value");
+
+  }
+
+  namespace test_generalized_constexpr
+  {
+
+    template < typename CharT >
+    constexpr unsigned long
+    strlen_c(const CharT *const s) noexcept
+    {
+      auto length = 0UL;
+      for (auto p = s; *p; ++p)
+        ++length;
+      return length;
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("x") == 1UL, "");
+    static_assert(strlen_c("test") == 4UL, "");
+    static_assert(strlen_c("another\0test") == 7UL, "");
+
+  }
+
+  namespace test_lambda_init_capture
+  {
+
+    int
+    test()
+    {
+      auto x = 0;
+      const auto lambda1 = [a = x](int b){ return a + b; };
+      const auto lambda2 = [a = lambda1(x)](){ return a; };
+      return lambda2();
+    }
+
+  }
+
+  namespace test_digit_separators
+  {
+
+    constexpr auto ten_million = 100'000'000;
+    static_assert(ten_million == 100000000, "");
+
+  }
+
+  namespace test_return_type_deduction
+  {
+
+    auto f(int& x) { return x; }
+    decltype(auto) g(int& x) { return x; }
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static constexpr auto value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static constexpr auto value = true;
+    };
+
+    int
+    test()
+    {
+      auto x = 0;
+      static_assert(is_same<int, decltype(f(x))>::value, "");
+      static_assert(is_same<int&, decltype(g(x))>::value, "");
+      return x;
+    }
+
+  }
+
+}  // namespace cxx14
+
+#endif  // __cplusplus >= 201402L
+
+
+
+
+// If the compiler admits that it is not ready for C++17, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201703L && !defined _MSC_VER
+
+#error "This is not a C++17 compiler"
+
+#else
+
+#include <initializer_list>
+#include <utility>
+#include <type_traits>
+
+namespace cxx17
+{
+
+  namespace test_constexpr_lambdas
+  {
+
+    constexpr int foo = [](){return 42;}();
+
+  }
+
+  namespace test::nested_namespace::definitions
+  {
+
+  }
+
+  namespace test_fold_expression
+  {
+
+    template<typename... Args>
+    int multiply(Args... args)
+    {
+      return (args * ... * 1);
+    }
+
+    template<typename... Args>
+    bool all(Args... args)
+    {
+      return (args && ...);
+    }
+
+  }
+
+  namespace test_extended_static_assert
+  {
+
+    static_assert (true);
+
+  }
+
+  namespace test_auto_brace_init_list
+  {
+
+    auto foo = {5};
+    auto bar {5};
+
+    static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);
+    static_assert(std::is_same<int, decltype(bar)>::value);
+  }
+
+  namespace test_typename_in_template_template_parameter
+  {
+
+    template<template<typename> typename X> struct D;
+
+  }
+
+  namespace test_fallthrough_nodiscard_maybe_unused_attributes
+  {
+
+    int f1()
+    {
+      return 42;
+    }
+
+    [[nodiscard]] int f2()
+    {
+      [[maybe_unused]] auto unused = f1();
+
+      switch (f1())
+      {
+      case 17:
+        f1();
+        [[fallthrough]];
+      case 42:
+        f1();
+      }
+      return f1();
+    }
+
+  }
+
+  namespace test_extended_aggregate_initialization
+  {
+
+    struct base1
+    {
+      int b1, b2 = 42;
+    };
+
+    struct base2
+    {
+      base2() {
+        b3 = 42;
+      }
+      int b3;
+    };
+
+    struct derived : base1, base2
+    {
+        int d;
+    };
+
+    derived d1 {{1, 2}, {}, 4};  // full initialization
+    derived d2 {{}, {}, 4};      // value-initialized bases
+
+  }
+
+  namespace test_general_range_based_for_loop
+  {
+
+    struct iter
+    {
+      int i;
+
+      int& operator* ()
+      {
+        return i;
+      }
+
+      const int& operator* () const
+      {
+        return i;
+      }
+
+      iter& operator++()
+      {
+        ++i;
+        return *this;
+      }
+    };
+
+    struct sentinel
+    {
+      int i;
+    };
+
+    bool operator== (const iter& i, const sentinel& s)
+    {
+      return i.i == s.i;
+    }
+
+    bool operator!= (const iter& i, const sentinel& s)
+    {
+      return !(i == s);
+    }
+
+    struct range
+    {
+      iter begin() const
+      {
+        return {0};
+      }
+
+      sentinel end() const
+      {
+        return {5};
+      }
+    };
+
+    void f()
+    {
+      range r {};
+
+      for (auto i : r)
+      {
+        [[maybe_unused]] auto v = i;
+      }
+    }
+
+  }
+
+  namespace test_lambda_capture_asterisk_this_by_value
+  {
+
+    struct t
+    {
+      int i;
+      int foo()
+      {
+        return [*this]()
+        {
+          return i;
+        }();
+      }
+    };
+
+  }
+
+  namespace test_enum_class_construction
+  {
+
+    enum class byte : unsigned char
+    {};
+
+    byte foo {42};
+
+  }
+
+  namespace test_constexpr_if
+  {
+
+    template <bool cond>
+    int f ()
+    {
+      if constexpr(cond)
+      {
+        return 13;
+      }
+      else
+      {
+        return 42;
+      }
+    }
+
+  }
+
+  namespace test_selection_statement_with_initializer
+  {
+
+    int f()
+    {
+      return 13;
+    }
+
+    int f2()
+    {
+      if (auto i = f(); i > 0)
+      {
+        return 3;
+      }
+
+      switch (auto i = f(); i + 4)
+      {
+      case 17:
+        return 2;
+
+      default:
+        return 1;
+      }
+    }
+
+  }
+
+  namespace test_template_argument_deduction_for_class_templates
+  {
+
+    template <typename T1, typename T2>
+    struct pair
+    {
+      pair (T1 p1, T2 p2)
+        : m1 {p1},
+          m2 {p2}
+      {}
+
+      T1 m1;
+      T2 m2;
+    };
+
+    void f()
+    {
+      [[maybe_unused]] auto p = pair{13, 42u};
+    }
+
+  }
+
+  namespace test_non_type_auto_template_parameters
+  {
+
+    template <auto n>
+    struct B
+    {};
+
+    B<5> b1;
+    B<'a'> b2;
+
+  }
+
+  namespace test_structured_bindings
+  {
+
+    int arr[2] = { 1, 2 };
+    std::pair<int, int> pr = { 1, 2 };
+
+    auto f1() -> int(&)[2]
+    {
+      return arr;
+    }
+
+    auto f2() -> std::pair<int, int>&
+    {
+      return pr;
+    }
+
+    struct S
+    {
+      int x1 : 2;
+      volatile double y1;
+    };
+
+    S f3()
+    {
+      return {};
+    }
+
+    auto [ x1, y1 ] = f1();
+    auto& [ xr1, yr1 ] = f1();
+    auto [ x2, y2 ] = f2();
+    auto& [ xr2, yr2 ] = f2();
+    const auto [ x3, y3 ] = f3();
+
+  }
+
+  namespace test_exception_spec_type_system
+  {
+
+    struct Good {};
+    struct Bad {};
+
+    void g1() noexcept;
+    void g2();
+
+    template<typename T>
+    Bad
+    f(T*, T*);
+
+    template<typename T1, typename T2>
+    Good
+    f(T1*, T2*);
+
+    static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
+
+  }
+
+  namespace test_inline_variables
+  {
+
+    template<class T> void f(T)
+    {}
+
+    template<class T> inline T g(T)
+    {
+      return T{};
+    }
+
+    template<> inline void f<>(int)
+    {}
+
+    template<> int g<>(int)
+    {
+      return 5;
+    }
+
+  }
+
+}  // namespace cxx17
+
+#endif  // __cplusplus < 201703L && !defined _MSC_VER
+
+
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  eval $cachevar=yes
+else
+  eval $cachevar=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         CXX="$ac_save_CXX"
+fi
+eval ac_res=\$$cachevar
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+      if eval test x\$$cachevar = xyes; then
+        CXX_DIALECT="$switch"
+        CXX="$CXX $switch"
+        if test -n "$CXXCPP" ; then
+          CXXCPP="$CXXCPP $switch"
+        fi
+        ac_success=yes
+        break
+      fi
+    done
+  fi
+
+    if test x$ac_success = xno; then
+                    for alternative in ${ax_cxx_compile_alternatives}; do
+      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}" MSVC; do
+        if test x"$switch" = xMSVC; then
+                                        switch=-std:c++${alternative}
+          cachevar=`$as_echo "ax_cv_cxx_compile_cxx17_${switch}_MSVC" | $as_tr_sh`
+        else
+          cachevar=`$as_echo "ax_cv_cxx_compile_cxx17_$switch" | $as_tr_sh`
+        fi
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5
+$as_echo_n "checking whether $CXX supports C++17 features with $switch... " >&6; }
+if eval \${$cachevar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_CXX="$CXX"
+           CXX="$CXX $switch"
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+// MSVC always sets __cplusplus to 199711L in older versions; newer versions
+// only set it correctly if /Zc:__cplusplus is specified as well as a
+// /std:c++NN switch:
+// https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
+#elif __cplusplus < 201103L && !defined _MSC_VER
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+
+
+
+// If the compiler admits that it is not ready for C++14, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201402L && !defined _MSC_VER
+
+#error "This is not a C++14 compiler"
+
+#else
+
+namespace cxx14
+{
+
+  namespace test_polymorphic_lambdas
+  {
+
+    int
+    test()
+    {
+      const auto lambda = [](auto&&... args){
+        const auto istiny = [](auto x){
+          return (sizeof(x) == 1UL) ? 1 : 0;
+        };
+        const int aretiny[] = { istiny(args)... };
+        return aretiny[0];
+      };
+      return lambda(1, 1L, 1.0f, '1');
+    }
+
+  }
+
+  namespace test_binary_literals
+  {
+
+    constexpr auto ivii = 0b0000000000101010;
+    static_assert(ivii == 42, "wrong value");
+
+  }
+
+  namespace test_generalized_constexpr
+  {
+
+    template < typename CharT >
+    constexpr unsigned long
+    strlen_c(const CharT *const s) noexcept
+    {
+      auto length = 0UL;
+      for (auto p = s; *p; ++p)
+        ++length;
+      return length;
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("x") == 1UL, "");
+    static_assert(strlen_c("test") == 4UL, "");
+    static_assert(strlen_c("another\0test") == 7UL, "");
+
+  }
+
+  namespace test_lambda_init_capture
+  {
+
+    int
+    test()
+    {
+      auto x = 0;
+      const auto lambda1 = [a = x](int b){ return a + b; };
+      const auto lambda2 = [a = lambda1(x)](){ return a; };
+      return lambda2();
+    }
+
+  }
+
+  namespace test_digit_separators
+  {
+
+    constexpr auto ten_million = 100'000'000;
+    static_assert(ten_million == 100000000, "");
+
+  }
+
+  namespace test_return_type_deduction
+  {
+
+    auto f(int& x) { return x; }
+    decltype(auto) g(int& x) { return x; }
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static constexpr auto value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static constexpr auto value = true;
+    };
+
+    int
+    test()
+    {
+      auto x = 0;
+      static_assert(is_same<int, decltype(f(x))>::value, "");
+      static_assert(is_same<int&, decltype(g(x))>::value, "");
+      return x;
+    }
+
+  }
+
+}  // namespace cxx14
+
+#endif  // __cplusplus >= 201402L
+
+
+
+
+// If the compiler admits that it is not ready for C++17, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201703L && !defined _MSC_VER
+
+#error "This is not a C++17 compiler"
+
+#else
+
+#include <initializer_list>
+#include <utility>
+#include <type_traits>
+
+namespace cxx17
+{
+
+  namespace test_constexpr_lambdas
+  {
+
+    constexpr int foo = [](){return 42;}();
+
+  }
+
+  namespace test::nested_namespace::definitions
+  {
+
+  }
+
+  namespace test_fold_expression
+  {
+
+    template<typename... Args>
+    int multiply(Args... args)
+    {
+      return (args * ... * 1);
+    }
+
+    template<typename... Args>
+    bool all(Args... args)
+    {
+      return (args && ...);
+    }
+
+  }
+
+  namespace test_extended_static_assert
+  {
+
+    static_assert (true);
+
+  }
+
+  namespace test_auto_brace_init_list
+  {
+
+    auto foo = {5};
+    auto bar {5};
+
+    static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);
+    static_assert(std::is_same<int, decltype(bar)>::value);
+  }
+
+  namespace test_typename_in_template_template_parameter
+  {
+
+    template<template<typename> typename X> struct D;
+
+  }
+
+  namespace test_fallthrough_nodiscard_maybe_unused_attributes
+  {
+
+    int f1()
+    {
+      return 42;
+    }
+
+    [[nodiscard]] int f2()
+    {
+      [[maybe_unused]] auto unused = f1();
+
+      switch (f1())
+      {
+      case 17:
+        f1();
+        [[fallthrough]];
+      case 42:
+        f1();
+      }
+      return f1();
+    }
+
+  }
+
+  namespace test_extended_aggregate_initialization
+  {
+
+    struct base1
+    {
+      int b1, b2 = 42;
+    };
+
+    struct base2
+    {
+      base2() {
+        b3 = 42;
+      }
+      int b3;
+    };
+
+    struct derived : base1, base2
+    {
+        int d;
+    };
+
+    derived d1 {{1, 2}, {}, 4};  // full initialization
+    derived d2 {{}, {}, 4};      // value-initialized bases
+
+  }
+
+  namespace test_general_range_based_for_loop
+  {
+
+    struct iter
+    {
+      int i;
+
+      int& operator* ()
+      {
+        return i;
+      }
+
+      const int& operator* () const
+      {
+        return i;
+      }
+
+      iter& operator++()
+      {
+        ++i;
+        return *this;
+      }
+    };
+
+    struct sentinel
+    {
+      int i;
+    };
+
+    bool operator== (const iter& i, const sentinel& s)
+    {
+      return i.i == s.i;
+    }
+
+    bool operator!= (const iter& i, const sentinel& s)
+    {
+      return !(i == s);
+    }
+
+    struct range
+    {
+      iter begin() const
+      {
+        return {0};
+      }
+
+      sentinel end() const
+      {
+        return {5};
+      }
+    };
+
+    void f()
+    {
+      range r {};
+
+      for (auto i : r)
+      {
+        [[maybe_unused]] auto v = i;
+      }
+    }
+
+  }
+
+  namespace test_lambda_capture_asterisk_this_by_value
+  {
+
+    struct t
+    {
+      int i;
+      int foo()
+      {
+        return [*this]()
+        {
+          return i;
+        }();
+      }
+    };
+
+  }
+
+  namespace test_enum_class_construction
+  {
+
+    enum class byte : unsigned char
+    {};
+
+    byte foo {42};
+
+  }
+
+  namespace test_constexpr_if
+  {
+
+    template <bool cond>
+    int f ()
+    {
+      if constexpr(cond)
+      {
+        return 13;
+      }
+      else
+      {
+        return 42;
+      }
+    }
+
+  }
+
+  namespace test_selection_statement_with_initializer
+  {
+
+    int f()
+    {
+      return 13;
+    }
+
+    int f2()
+    {
+      if (auto i = f(); i > 0)
+      {
+        return 3;
+      }
+
+      switch (auto i = f(); i + 4)
+      {
+      case 17:
+        return 2;
+
+      default:
+        return 1;
+      }
+    }
+
+  }
+
+  namespace test_template_argument_deduction_for_class_templates
+  {
+
+    template <typename T1, typename T2>
+    struct pair
+    {
+      pair (T1 p1, T2 p2)
+        : m1 {p1},
+          m2 {p2}
+      {}
+
+      T1 m1;
+      T2 m2;
+    };
+
+    void f()
+    {
+      [[maybe_unused]] auto p = pair{13, 42u};
+    }
+
+  }
+
+  namespace test_non_type_auto_template_parameters
+  {
+
+    template <auto n>
+    struct B
+    {};
+
+    B<5> b1;
+    B<'a'> b2;
+
+  }
+
+  namespace test_structured_bindings
+  {
+
+    int arr[2] = { 1, 2 };
+    std::pair<int, int> pr = { 1, 2 };
+
+    auto f1() -> int(&)[2]
+    {
+      return arr;
+    }
+
+    auto f2() -> std::pair<int, int>&
+    {
+      return pr;
+    }
+
+    struct S
+    {
+      int x1 : 2;
+      volatile double y1;
+    };
+
+    S f3()
+    {
+      return {};
+    }
+
+    auto [ x1, y1 ] = f1();
+    auto& [ xr1, yr1 ] = f1();
+    auto [ x2, y2 ] = f2();
+    auto& [ xr2, yr2 ] = f2();
+    const auto [ x3, y3 ] = f3();
+
+  }
+
+  namespace test_exception_spec_type_system
+  {
+
+    struct Good {};
+    struct Bad {};
+
+    void g1() noexcept;
+    void g2();
+
+    template<typename T>
+    Bad
+    f(T*, T*);
+
+    template<typename T1, typename T2>
+    Good
+    f(T1*, T2*);
+
+    static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
+
+  }
+
+  namespace test_inline_variables
+  {
+
+    template<class T> void f(T)
+    {}
+
+    template<class T> inline T g(T)
+    {
+      return T{};
+    }
+
+    template<> inline void f<>(int)
+    {}
+
+    template<> int g<>(int)
+    {
+      return 5;
+    }
+
+  }
+
+}  // namespace cxx17
+
+#endif  // __cplusplus < 201703L && !defined _MSC_VER
+
+
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  eval $cachevar=yes
+else
+  eval $cachevar=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           CXX="$ac_save_CXX"
+fi
+eval ac_res=\$$cachevar
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+        if eval test x\$$cachevar = xyes; then
+          CXX_DIALECT="$switch"
+          CXX="$CXX $switch"
+          if test -n "$CXXCPP" ; then
+            CXXCPP="$CXXCPP $switch"
+          fi
+          ac_success=yes
+          break
+        fi
+      done
+      if test x$ac_success = xyes; then
+        break
+      fi
+    done
+  fi
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+  if test x$ax_cxx_compile_cxx17_required = xtrue; then
+    if test x$ac_success = xno; then
+      as_fn_error $? "*** A compiler with support for C++17 language features is required." "$LINENO" 5
+    fi
+  fi
+  if test x$ac_success = xno; then
+    HAVE_CXX17=0
+    { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++17 support was found" >&5
+$as_echo "$as_me: No compiler with C++17 support was found" >&6;}
+  else
+    HAVE_CXX17=1
+
+$as_echo "#define HAVE_CXX17 1" >>confdefs.h
+
+  fi
+
+
+
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+
+
+  for ac_header in $ac_header_list
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${acl_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$acl_cv_path_LD" -v 2>&1 < /dev/null | $EGREP '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${acl_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | $EGREP '(GNU|with BFD)' 1>&5; then
+  acl_cv_prog_gnu_ld=yes
+else
+  acl_cv_prog_gnu_ld=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if ${acl_cv_rpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then :
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+  # Set the 'development' global.
+  . $srcdir/../bfd/development.sh
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+  # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if ${ac_cv_working_alloca_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+			  if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_working_alloca_h=yes
+else
+  ac_cv_working_alloca_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if ${ac_cv_func_alloca_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+void *alloca (size_t);
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+				    if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_func_alloca_works=yes
+else
+  ac_cv_func_alloca_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+else
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if ${ac_cv_os_cray+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then :
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+    break
+fi
+
+  done
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if ${ac_cv_c_stack_direction+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_c_stack_direction=0
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_stack_direction=1
+else
+  ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+
+  WIN32APILIBS=
+  case ${host} in
+    *mingw32*)
+
+$as_echo "#define USE_WIN32API 1" >>confdefs.h
+
+      WIN32APILIBS="-lws2_32"
+      ;;
+  esac
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
+$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
+if ${am_cv_langinfo_codeset+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_langinfo_codeset=yes
+else
+  am_cv_langinfo_codeset=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
+$as_echo "$am_cv_langinfo_codeset" >&6; }
+  if test $am_cv_langinfo_codeset = yes; then
+
+$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
+
+  fi
+
+
+  for ac_header in linux/perf_event.h locale.h memory.h signal.h 		   sys/resource.h sys/socket.h 		   sys/un.h sys/wait.h 		   thread_db.h wait.h 		   termios.h 		   dlfcn.h 		   linux/elf.h proc_service.h 		   poll.h sys/poll.h sys/select.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_func in getpagesize
+do :
+  ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
+if test "x$ac_cv_func_getpagesize" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GETPAGESIZE 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
+$as_echo_n "checking for working mmap... " >&6; }
+if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_mmap_fixed_mapped=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+   Here is a matrix of mmap possibilities:
+	mmap private not fixed
+	mmap private fixed at somewhere currently unmapped
+	mmap private fixed at somewhere already mapped
+	mmap shared not fixed
+	mmap shared fixed at somewhere currently unmapped
+	mmap shared fixed at somewhere already mapped
+   For private mappings, we should verify that changes cannot be read()
+   back from the file, nor mmap's back from the file at a different
+   address.  (There have been systems where private was not correctly
+   implemented like the infamous i386 svr4.0, and systems where the
+   VM page cache was not coherent with the file system buffer cache
+   like early versions of FreeBSD and possibly contemporary NetBSD.)
+   For shared mappings, we should conversely verify that changes get
+   propagated back to all the places they're supposed to be.
+
+   Grep wants private fixed already mapped.
+   The main things grep needs to know about mmap are:
+   * does it exist and is it safe to write into the mmap'd area
+   * how to use it (BSD variants)  */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h.  */
+#ifndef HAVE_GETPAGESIZE
+# ifdef _SC_PAGESIZE
+#  define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+#  ifdef HAVE_SYS_PARAM_H
+#   include <sys/param.h>
+#   ifdef EXEC_PAGESIZE
+#    define getpagesize() EXEC_PAGESIZE
+#   else /* no EXEC_PAGESIZE */
+#    ifdef NBPG
+#     define getpagesize() NBPG * CLSIZE
+#     ifndef CLSIZE
+#      define CLSIZE 1
+#     endif /* no CLSIZE */
+#    else /* no NBPG */
+#     ifdef NBPC
+#      define getpagesize() NBPC
+#     else /* no NBPC */
+#      ifdef PAGESIZE
+#       define getpagesize() PAGESIZE
+#      endif /* PAGESIZE */
+#     endif /* no NBPC */
+#    endif /* no NBPG */
+#   endif /* no EXEC_PAGESIZE */
+#  else /* no HAVE_SYS_PARAM_H */
+#   define getpagesize() 8192	/* punt totally */
+#  endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+  char *data, *data2, *data3;
+  const char *cdata2;
+  int i, pagesize;
+  int fd, fd2;
+
+  pagesize = getpagesize ();
+
+  /* First, make a file with some known garbage in it. */
+  data = (char *) malloc (pagesize);
+  if (!data)
+    return 1;
+  for (i = 0; i < pagesize; ++i)
+    *(data + i) = rand ();
+  umask (0);
+  fd = creat ("conftest.mmap", 0600);
+  if (fd < 0)
+    return 2;
+  if (write (fd, data, pagesize) != pagesize)
+    return 3;
+  close (fd);
+
+  /* Next, check that the tail of a page is zero-filled.  File must have
+     non-zero length, otherwise we risk SIGBUS for entire page.  */
+  fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
+  if (fd2 < 0)
+    return 4;
+  cdata2 = "";
+  if (write (fd2, cdata2, 1) != 1)
+    return 5;
+  data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
+  if (data2 == MAP_FAILED)
+    return 6;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data2 + i))
+      return 7;
+  close (fd2);
+  if (munmap (data2, pagesize))
+    return 8;
+
+  /* Next, try to mmap the file at a fixed address which already has
+     something else allocated at it.  If we can, also make sure that
+     we see the same garbage.  */
+  fd = open ("conftest.mmap", O_RDWR);
+  if (fd < 0)
+    return 9;
+  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+		     MAP_PRIVATE | MAP_FIXED, fd, 0L))
+    return 10;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data2 + i))
+      return 11;
+
+  /* Finally, make sure that changes to the mapped area do not
+     percolate back to the file as seen by read().  (This is a bug on
+     some variants of i386 svr4.0.)  */
+  for (i = 0; i < pagesize; ++i)
+    *(data2 + i) = *(data2 + i) + 1;
+  data3 = (char *) malloc (pagesize);
+  if (!data3)
+    return 12;
+  if (read (fd, data3, pagesize) != pagesize)
+    return 13;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data3 + i))
+      return 14;
+  close (fd);
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_mmap_fixed_mapped=yes
+else
+  ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
+$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+$as_echo "#define HAVE_MMAP 1" >>confdefs.h
+
+fi
+rm -f conftest.mmap conftest.txt
+
+  for ac_header in vfork.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
+if test "x$ac_cv_header_vfork_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VFORK_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in fork vfork
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+if test "x$ac_cv_func_fork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
+$as_echo_n "checking for working fork... " >&6; }
+if ${ac_cv_func_fork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_fork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+	  /* By Ruediger Kuhlmann. */
+	  return fork () < 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_fork_works=yes
+else
+  ac_cv_func_fork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
+$as_echo "$ac_cv_func_fork_works" >&6; }
+
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp*)
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
+$as_echo_n "checking for working vfork... " >&6; }
+if ${ac_cv_func_vfork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_vfork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Thanks to Paul Eggert for this test.  */
+$ac_includes_default
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.  The compiler
+   is told about this with #include <vfork.h>, but some compilers
+   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
+   static variable whose address is put into a register that is
+   clobbered by the vfork.  */
+static void
+#ifdef __cplusplus
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
+#endif
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+
+int
+main ()
+{
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test (0);
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.  This
+       test uses lots of local variables, at least as many local
+       variables as main has allocated so far including compiler
+       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
+       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
+       reuse the register of parent for one of the local variables,
+       since it will think that parent can't possibly be used any more
+       in this routine.  Assigning to the local variable will thus
+       munge parent in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+	|| p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+       from child file descriptors.  If the child closes a descriptor
+       before it execs or exits, this munges the parent's descriptor
+       as well.  Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    return (
+	 /* Was there some problem with vforking?  */
+	 child < 0
+
+	 /* Did the child fail?  (This shouldn't happen.)  */
+	 || status
+
+	 /* Did the vfork/compiler bug occur?  */
+	 || parent != getpid()
+
+	 /* Did the file descriptor bug occur?  */
+	 || fstat(fileno(stdout), &st) != 0
+	 );
+  }
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_vfork_works=yes
+else
+  ac_cv_func_vfork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
+$as_echo "$ac_cv_func_vfork_works" >&6; }
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
+
+else
+
+$as_echo "#define vfork fork" >>confdefs.h
+
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
+
+fi
+
+  # Some systems (e.g. Solaris) have `socketpair' in libsocket.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socketpair" >&5
+$as_echo_n "checking for library containing socketpair... " >&6; }
+if ${ac_cv_search_socketpair+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socketpair ();
+int
+main ()
+{
+return socketpair ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' socket; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_socketpair=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_socketpair+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_socketpair+:} false; then :
+
+else
+  ac_cv_search_socketpair=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socketpair" >&5
+$as_echo "$ac_cv_search_socketpair" >&6; }
+ac_res=$ac_cv_search_socketpair
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+  for ac_func in fdwalk getrlimit pipe pipe2 poll socketpair sigaction \
+		  ptrace64 sbrk setns sigaltstack sigprocmask \
+		  setpgid setpgrp getrusage getauxval sigtimedwait
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+  # This is needed for RHEL 5 and uclibc-ng < 1.0.39.
+  # These did not define ADDR_NO_RANDOMIZE in sys/personality.h,
+  # only in linux/personality.h.
+  ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h>
+"
+if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl
+_ACEOF
+
+
+  ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strstr" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRSTR $ac_have_decl
+_ACEOF
+
+
+  # ----------------------- #
+  # Checks for structures.  #
+  # ----------------------- #
+
+  ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
+_ACEOF
+
+
+fi
+
+
+  # On FreeBSD we need libutil for the kinfo_get* functions.  On
+  # GNU/kFreeBSD systems, FreeBSD libutil is renamed to libutil-freebsd.
+  # Figure out which one to use.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kinfo_getfile" >&5
+$as_echo_n "checking for library containing kinfo_getfile... " >&6; }
+if ${ac_cv_search_kinfo_getfile+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char kinfo_getfile ();
+int
+main ()
+{
+return kinfo_getfile ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' util util-freebsd; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_kinfo_getfile=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_kinfo_getfile+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_kinfo_getfile+:} false; then :
+
+else
+  ac_cv_search_kinfo_getfile=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kinfo_getfile" >&5
+$as_echo "$ac_cv_search_kinfo_getfile" >&6; }
+ac_res=$ac_cv_search_kinfo_getfile
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+  # Define HAVE_KINFO_GETFILE if kinfo_getfile is available.
+  for ac_func in kinfo_getfile
+do :
+  ac_fn_c_check_func "$LINENO" "kinfo_getfile" "ac_cv_func_kinfo_getfile"
+if test "x$ac_cv_func_kinfo_getfile" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_KINFO_GETFILE 1
+_ACEOF
+
+fi
+done
+
+
+  # ----------------------- #
+  # Check for threading.    #
+  # ----------------------- #
+
+  # Check whether --enable-threading was given.
+if test "${enable_threading+set}" = set; then :
+  enableval=$enable_threading; case "$enableval" in
+    yes) want_threading=yes ;;
+    no) want_threading=no ;;
+    *) as_fn_error $? "bad value $enableval for threading" "$LINENO" 5 ;;
+    esac
+else
+  want_threading=yes
+fi
+
+
+  # Check for std::thread.  This does not work on some platforms, like
+  # mingw and DJGPP.
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on Tru64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+        ax_pthread_save_CC="$CC"
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        if test "x$PTHREAD_CC" != "x"; then :
+  CC="$PTHREAD_CC"
+fi
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5
+$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_join ();
+int
+main ()
+{
+return pthread_join ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = "xno"; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        CC="$ax_pthread_save_CC"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+#           (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads and
+#      -D_REENTRANT too), HP C (must be checked before -lpthread, which
+#      is present but should not be used directly; and before -mthreads,
+#      because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case $host_os in
+
+        freebsd*)
+
+        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+        ;;
+
+        hpux*)
+
+        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+        # multi-threading and also sets -lpthread."
+
+        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+        ;;
+
+        openedition*)
+
+        # IBM z/OS requires a feature-test macro to be defined in order to
+        # enable POSIX threads at all, so give the user a hint if this is
+        # not set. (We don't define these ourselves, as they can affect
+        # other portions of the system API in unpredictable ways.)
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+             AX_PTHREAD_ZOS_MISSING
+#            endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
+$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
+fi
+rm -f conftest*
+
+        ;;
+
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed. (N.B.: The stubs are missing
+        # pthread_cleanup_push, or rather a function called by this macro,
+        # so we could check for that, but who knows whether they'll stub
+        # that too in a future libc.)  So we'll check first for the
+        # standard Solaris way of linking pthreads (-mt -lpthread).
+
+        ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
+        ;;
+esac
+
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
+
+if test "x$GCC" = "xyes"; then :
+  ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"
+fi
+
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
+
+case $host_os in
+        darwin* | hpux* | linux* | osf* | solaris*)
+        ax_pthread_check_macro="_REENTRANT"
+        ;;
+
+        aix*)
+        ax_pthread_check_macro="_THREAD_SAFE"
+        ;;
+
+        *)
+        ax_pthread_check_macro="--"
+        ;;
+esac
+if test "x$ax_pthread_check_macro" = "x--"; then :
+  ax_pthread_check_cond=0
+else
+  ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
+fi
+
+# Are we compiling with Clang?
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5
+$as_echo_n "checking whether $CC is Clang... " >&6; }
+if ${ax_cv_PTHREAD_CLANG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_CLANG=no
+     # Note that Autoconf sets GCC=yes for Clang as well as GCC
+     if test "x$GCC" = "xyes"; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+#            if defined(__clang__) && defined(__llvm__)
+             AX_PTHREAD_CC_IS_CLANG
+#            endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then :
+  ax_cv_PTHREAD_CLANG=yes
+fi
+rm -f conftest*
+
+     fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG" >&6; }
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+ax_pthread_clang_warning=no
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+        # Clang takes -pthread; it has never supported any other flag
+
+        # (Note 1: This will need to be revisited if a system that Clang
+        # supports has POSIX threads in a separate library.  This tends not
+        # to be the way of modern systems, but it's conceivable.)
+
+        # (Note 2: On some systems, notably Darwin, -pthread is not needed
+        # to get POSIX threads support; the API is always present and
+        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
+        # -pthread does define _REENTRANT, and while the Darwin headers
+        # ignore this macro, third-party headers might not.)
+
+        PTHREAD_CFLAGS="-pthread"
+        PTHREAD_LIBS=
+
+        ax_pthread_ok=yes
+
+        # However, older versions of Clang make a point of warning the user
+        # that, in an invocation where only linking and no compilation is
+        # taking place, the -pthread option has no effect ("argument unused
+        # during compilation").  They expect -pthread to be passed in only
+        # when source code is being compiled.
+        #
+        # Problem is, this is at odds with the way Automake and most other
+        # C build frameworks function, which is that the same flags used in
+        # compilation (CFLAGS) are also used in linking.  Many systems
+        # supported by AX_PTHREAD require exactly this for POSIX threads
+        # support, and in fact it is often not straightforward to specify a
+        # flag that is used only in the compilation phase and not in
+        # linking.  Such a scenario is extremely rare in practice.
+        #
+        # Even though use of the -pthread flag in linking would only print
+        # a warning, this can be a nuisance for well-run software projects
+        # that build with -Werror.  So if the active version of Clang has
+        # this misfeature, we search for an option to squash it.
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5
+$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; }
+if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+             # Create an alternate version of $ac_link that compiles and
+             # links in two steps (.c -> .o, .o -> exe) instead of one
+             # (.c -> exe), because the warning occurs only in the second
+             # step
+             ax_pthread_save_ac_link="$ac_link"
+             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
+             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+             ax_pthread_save_CFLAGS="$CFLAGS"
+             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+                if test "x$ax_pthread_try" = "xunknown"; then :
+  break
+fi
+                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+                ac_link="$ax_pthread_save_ac_link"
+                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_link="$ax_pthread_2step_ac_link"
+                     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+             done
+             ac_link="$ax_pthread_save_ac_link"
+             CFLAGS="$ax_pthread_save_CFLAGS"
+             if test "x$ax_pthread_try" = "x"; then :
+  ax_pthread_try=no
+fi
+             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
+
+        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+                no | unknown) ;;
+                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+        esac
+
+fi # $ax_pthread_clang = yes
+
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
+
+        case $ax_pthread_try_flag in
+                none)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
+$as_echo_n "checking whether pthreads work without any flags... " >&6; }
+                ;;
+
+                -mt,pthread)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5
+$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; }
+                PTHREAD_CFLAGS="-mt"
+                PTHREAD_LIBS="-lpthread"
+                ;;
+
+                -*)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5
+$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; }
+                PTHREAD_CFLAGS="$ax_pthread_try_flag"
+                ;;
+
+                pthread-config)
+                # Extract the first word of "pthread-config", so it can be a program name with args.
+set dummy pthread-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ax_pthread_config+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ax_pthread_config"; then
+  ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ax_pthread_config="yes"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
+fi
+fi
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+                if test "x$ax_pthread_config" = "xno"; then :
+  continue
+fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
+
+                *)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5
+$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; }
+                PTHREAD_LIBS="-l$ax_pthread_try_flag"
+                ;;
+        esac
+
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+#                       if $ax_pthread_check_cond
+#                        error "$ax_pthread_check_macro must be defined"
+#                       endif
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }
+int
+main ()
+{
+pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = "xyes"; then :
+  break
+fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = "xyes"; then
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+$as_echo_n "checking for joinable pthread attribute... " >&6; }
+if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+                 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+int attr = $ax_pthread_attr; return attr /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+             done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
+$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
+        if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+               test "x$ax_pthread_joinable_attr_defined" != "xyes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR
+_ACEOF
+
+               ax_pthread_joinable_attr_defined=yes
+
+fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5
+$as_echo_n "checking whether more special flags are required for pthreads... " >&6; }
+if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_SPECIAL_FLAGS=no
+             case $host_os in
+             solaris*)
+             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+             ;;
+             esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
+$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
+        if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+               test "x$ax_pthread_special_flags_added" != "xyes"; then :
+  PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+               ax_pthread_special_flags_added=yes
+fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_PRIO_INHERIT=yes
+else
+  ax_cv_PTHREAD_PRIO_INHERIT=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+               test "x$ax_pthread_prio_inherit_defined" != "xyes"; then :
+
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
+
+               ax_pthread_prio_inherit_defined=yes
+
+fi
+
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != "xyes"; then
+            case $host_os in
+                aix*)
+                case "x/$CC" in #(
+  x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
+    #handle absolute path differently from PATH based program lookup
+                     case "x$CC" in #(
+  x/*) :
+    if as_fn_executable_p ${CC}_r; then :
+  PTHREAD_CC="${CC}_r"
+fi ;; #(
+  *) :
+    for ac_prog in ${CC}_r
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PTHREAD_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$PTHREAD_CC"; then
+  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_PTHREAD_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+if test -n "$PTHREAD_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+$as_echo "$PTHREAD_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$PTHREAD_CC" && break
+done
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+ ;;
+esac ;; #(
+  *) :
+     ;;
+esac
+                ;;
+            esac
+        fi
+fi
+
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
+
+
+
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test "x$ax_pthread_ok" = "xyes"; then
+        threads=yes
+        :
+else
+        ax_pthread_ok=no
+        threads=no
+fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+  save_LIBS="$LIBS"
+  LIBS="$PTHREAD_LIBS $LIBS"
+  save_CXXFLAGS="$CXXFLAGS"
+  CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5
+$as_echo_n "checking for std::thread... " >&6; }
+if ${gdb_cv_cxx_std_thread+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+  #if defined (__MINGW32__) || defined (__CYGWIN__)
+    # ifdef _WIN32_WINNT
+    #  if _WIN32_WINNT < 0x0501
+    #   undef _WIN32_WINNT
+    #   define _WIN32_WINNT 0x0501
+    #  endif
+    # else
+    #  define _WIN32_WINNT 0x0501
+    # endif
+    #endif	/* __MINGW32__ || __CYGWIN__ */
+    #include <thread>
+    void callback() { }
+int
+main ()
+{
+std::thread t(callback);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  gdb_cv_cxx_std_thread=yes
+else
+  gdb_cv_cxx_std_thread=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5
+$as_echo "$gdb_cv_cxx_std_thread" >&6; }
+
+  if test "$threads" = "yes"; then
+    # This check must be here, while LIBS includes any necessary
+    # threading library.
+    for ac_func in pthread_sigmask pthread_setname_np
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+  fi
+  LIBS="$save_LIBS"
+  CXXFLAGS="$save_CXXFLAGS"
+
+  if test "$want_threading" = "yes"; then
+    if test "$gdb_cv_cxx_std_thread" = "yes"; then
+
+$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h
+
+    fi
+  fi
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5
+$as_echo_n "checking for sigsetjmp... " >&6; }
+if ${gdb_cv_func_sigsetjmp+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <setjmp.h>
+int
+main ()
+{
+sigjmp_buf env;
+           while (! sigsetjmp (env, 1))
+             siglongjmp (env, 1);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gdb_cv_func_sigsetjmp=yes
+else
+  gdb_cv_func_sigsetjmp=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_sigsetjmp" >&5
+$as_echo "$gdb_cv_func_sigsetjmp" >&6; }
+  if test "$gdb_cv_func_sigsetjmp" = "yes"; then
+
+$as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h
+
+  fi
+
+
+# Check whether --with-intel_pt was given.
+if test "${with_intel_pt+set}" = set; then :
+  withval=$with_intel_pt;
+else
+  with_intel_pt=auto
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use intel pt" >&5
+$as_echo_n "checking whether to use intel pt... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_intel_pt" >&5
+$as_echo "$with_intel_pt" >&6; }
+
+  if test "${with_intel_pt}" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&2;}
+    HAVE_LIBIPT=no
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #include <linux/perf_event.h>
+  #ifndef PERF_ATTR_SIZE_VER5
+  # error
+  #endif
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  perf_event=yes
+else
+  perf_event=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+    if test "$perf_event" != yes; then
+      if test "$with_intel_pt" = yes; then
+	as_fn_error $? "linux/perf_event.h missing or too old" "$LINENO" 5
+      else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&2;}
+      fi
+    fi
+
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libipt-prefix was given.
+if test "${with_libipt_prefix+set}" = set; then :
+  withval=$with_libipt_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
+
+fi
+
+
+# Check whether --with-libipt-type was given.
+if test "${with_libipt_type+set}" = set; then :
+  withval=$with_libipt_type;  with_libipt_type=$withval
+else
+   with_libipt_type=auto
+fi
+
+  lib_type=`eval echo \$with_libipt_type`
+
+      LIBIPT=
+  LTLIBIPT=
+  INCIPT=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='ipt '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBIPT="${LIBIPT}${LIBIPT:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            elif test x$lib_type != xshared; then
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBIPT; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  elif test x$lib_type != xshared; then
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                                LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBIPT; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBIPT="${LIBIPT}${LIBIPT:+ }$found_a"
+              else
+                                                LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux*) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCIPT; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCIPT="${INCIPT}${INCIPT:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBIPT; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBIPT="${LIBIPT}${LIBIPT:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBIPT; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBIPT="${LIBIPT}${LIBIPT:+ }$dep"
+                    LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name"
+              LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l$name"
+            else
+              LIBIPT="${LIBIPT}${LIBIPT:+ }-l:lib$name.$libext"
+              LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l:lib$name.$libext"
+            fi
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBIPT="${LIBIPT}${LIBIPT:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBIPT="${LIBIPT}${LIBIPT:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-R$found_dir"
+    done
+  fi
+
+
+        ac_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCIPT; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libipt" >&5
+$as_echo_n "checking for libipt... " >&6; }
+if ${ac_cv_libipt+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIBIPT"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include "intel-pt.h"
+int
+main ()
+{
+pt_insn_alloc_decoder (0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_libipt=yes
+else
+  ac_cv_libipt=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libipt" >&5
+$as_echo "$ac_cv_libipt" >&6; }
+  if test "$ac_cv_libipt" = yes; then
+    HAVE_LIBIPT=yes
+
+$as_echo "#define HAVE_LIBIPT 1" >>confdefs.h
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libipt" >&5
+$as_echo_n "checking how to link with libipt... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBIPT" >&5
+$as_echo "$LIBIPT" >&6; }
+  else
+    HAVE_LIBIPT=no
+            CPPFLAGS="$ac_save_CPPFLAGS"
+    LIBIPT=
+    LTLIBIPT=
+  fi
+
+
+
+
+
+
+    if test "$HAVE_LIBIPT" != yes; then
+      if test "$with_intel_pt" = yes; then
+	as_fn_error $? "libipt is missing or unusable" "$LINENO" 5
+      else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libipt is missing or unusable; some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: libipt is missing or unusable; some features may be unavailable." >&2;}
+      fi
+    else
+      save_LIBS=$LIBS
+      LIBS="$LIBS $LIBIPT"
+      for ac_func in pt_insn_event
+do :
+  ac_fn_c_check_func "$LINENO" "pt_insn_event" "ac_cv_func_pt_insn_event"
+if test "x$ac_cv_func_pt_insn_event" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_PT_INSN_EVENT 1
+_ACEOF
+
+fi
+done
+
+      ac_fn_c_check_member "$LINENO" "struct pt_insn" "enabled" "ac_cv_member_struct_pt_insn_enabled" "#include <intel-pt.h>
+"
+if test "x$ac_cv_member_struct_pt_insn_enabled" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_PT_INSN_ENABLED 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct pt_insn" "resynced" "ac_cv_member_struct_pt_insn_resynced" "#include <intel-pt.h>
+"
+if test "x$ac_cv_member_struct_pt_insn_resynced" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_PT_INSN_RESYNCED 1
+_ACEOF
+
+
+fi
+
+      LIBS=$save_LIBS
+    fi
+  fi
+
+  # Check if the compiler and runtime support printing long longs.
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long support in printf" >&5
+$as_echo_n "checking for long long support in printf... " >&6; }
+if ${gdb_cv_printf_has_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  gdb_cv_printf_has_long_long=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+char buf[32];
+    long long l = 0;
+    l = (l << 16) + 0x0123;
+    l = (l << 16) + 0x4567;
+    l = (l << 16) + 0x89ab;
+    l = (l << 16) + 0xcdef;
+    sprintf (buf, "0x%016llx", l);
+    return (strcmp ("0x0123456789abcdef", buf));
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gdb_cv_printf_has_long_long=yes
+else
+  gdb_cv_printf_has_long_long=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_printf_has_long_long" >&5
+$as_echo "$gdb_cv_printf_has_long_long" >&6; }
+  if test "$gdb_cv_printf_has_long_long" = yes; then
+
+$as_echo "#define PRINTF_HAS_LONG_LONG 1" >>confdefs.h
+
+  fi
+
+
+$as_echo "#define _STRUCTURED_PROC 1" >>confdefs.h
+
+ for ac_header in sys/procfs.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/procfs.h" "ac_cv_header_sys_procfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_procfs_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_PROCFS_H 1
+_ACEOF
+
+fi
+
+done
+
+  if test "$ac_cv_header_sys_procfs_h" = yes; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gregset_t in sys/procfs.h" >&5
+$as_echo_n "checking for gregset_t in sys/procfs.h... " >&6; }
+ if ${bfd_cv_have_sys_procfs_type_gregset_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _SYSCALL32
+#include <sys/procfs.h>
+int
+main ()
+{
+gregset_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  bfd_cv_have_sys_procfs_type_gregset_t=yes
+else
+  bfd_cv_have_sys_procfs_type_gregset_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $bfd_cv_have_sys_procfs_type_gregset_t = yes; then
+
+$as_echo "#define HAVE_GREGSET_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_gregset_t" >&5
+$as_echo "$bfd_cv_have_sys_procfs_type_gregset_t" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fpregset_t in sys/procfs.h" >&5
+$as_echo_n "checking for fpregset_t in sys/procfs.h... " >&6; }
+ if ${bfd_cv_have_sys_procfs_type_fpregset_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _SYSCALL32
+#include <sys/procfs.h>
+int
+main ()
+{
+fpregset_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  bfd_cv_have_sys_procfs_type_fpregset_t=yes
+else
+  bfd_cv_have_sys_procfs_type_fpregset_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $bfd_cv_have_sys_procfs_type_fpregset_t = yes; then
+
+$as_echo "#define HAVE_FPREGSET_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_fpregset_t" >&5
+$as_echo "$bfd_cv_have_sys_procfs_type_fpregset_t" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset_t in sys/procfs.h" >&5
+$as_echo_n "checking for prgregset_t in sys/procfs.h... " >&6; }
+ if ${bfd_cv_have_sys_procfs_type_prgregset_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _SYSCALL32
+#include <sys/procfs.h>
+int
+main ()
+{
+prgregset_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  bfd_cv_have_sys_procfs_type_prgregset_t=yes
+else
+  bfd_cv_have_sys_procfs_type_prgregset_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $bfd_cv_have_sys_procfs_type_prgregset_t = yes; then
+
+$as_echo "#define HAVE_PRGREGSET_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset_t" >&5
+$as_echo "$bfd_cv_have_sys_procfs_type_prgregset_t" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prfpregset_t in sys/procfs.h" >&5
+$as_echo_n "checking for prfpregset_t in sys/procfs.h... " >&6; }
+ if ${bfd_cv_have_sys_procfs_type_prfpregset_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _SYSCALL32
+#include <sys/procfs.h>
+int
+main ()
+{
+prfpregset_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  bfd_cv_have_sys_procfs_type_prfpregset_t=yes
+else
+  bfd_cv_have_sys_procfs_type_prfpregset_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $bfd_cv_have_sys_procfs_type_prfpregset_t = yes; then
+
+$as_echo "#define HAVE_PRFPREGSET_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prfpregset_t" >&5
+$as_echo "$bfd_cv_have_sys_procfs_type_prfpregset_t" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset32_t in sys/procfs.h" >&5
+$as_echo_n "checking for prgregset32_t in sys/procfs.h... " >&6; }
+ if ${bfd_cv_have_sys_procfs_type_prgregset32_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _SYSCALL32
+#include <sys/procfs.h>
+int
+main ()
+{
+prgregset32_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  bfd_cv_have_sys_procfs_type_prgregset32_t=yes
+else
+  bfd_cv_have_sys_procfs_type_prgregset32_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $bfd_cv_have_sys_procfs_type_prgregset32_t = yes; then
+
+$as_echo "#define HAVE_PRGREGSET32_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset32_t" >&5
+$as_echo "$bfd_cv_have_sys_procfs_type_prgregset32_t" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in sys/procfs.h" >&5
+$as_echo_n "checking for lwpid_t in sys/procfs.h... " >&6; }
+ if ${bfd_cv_have_sys_procfs_type_lwpid_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _SYSCALL32
+#include <sys/procfs.h>
+int
+main ()
+{
+lwpid_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  bfd_cv_have_sys_procfs_type_lwpid_t=yes
+else
+  bfd_cv_have_sys_procfs_type_lwpid_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $bfd_cv_have_sys_procfs_type_lwpid_t = yes; then
+
+$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpid_t" >&5
+$as_echo "$bfd_cv_have_sys_procfs_type_lwpid_t" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in sys/procfs.h" >&5
+$as_echo_n "checking for psaddr_t in sys/procfs.h... " >&6; }
+ if ${bfd_cv_have_sys_procfs_type_psaddr_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _SYSCALL32
+#include <sys/procfs.h>
+int
+main ()
+{
+psaddr_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  bfd_cv_have_sys_procfs_type_psaddr_t=yes
+else
+  bfd_cv_have_sys_procfs_type_psaddr_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $bfd_cv_have_sys_procfs_type_psaddr_t = yes; then
+
+$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psaddr_t" >&5
+$as_echo "$bfd_cv_have_sys_procfs_type_psaddr_t" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_fpregset_t in sys/procfs.h" >&5
+$as_echo_n "checking for elf_fpregset_t in sys/procfs.h... " >&6; }
+ if ${bfd_cv_have_sys_procfs_type_elf_fpregset_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _SYSCALL32
+#include <sys/procfs.h>
+int
+main ()
+{
+elf_fpregset_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  bfd_cv_have_sys_procfs_type_elf_fpregset_t=yes
+else
+  bfd_cv_have_sys_procfs_type_elf_fpregset_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $bfd_cv_have_sys_procfs_type_elf_fpregset_t = yes; then
+
+$as_echo "#define HAVE_ELF_FPREGSET_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&5
+$as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; }
+
+  fi
+
+    # Check for xxhash
+
+# Check whether --with-xxhash was given.
+if test "${with_xxhash+set}" = set; then :
+  withval=$with_xxhash;
+else
+  with_xxhash=auto
+fi
+
+
+  if test "x$with_xxhash" != "xno"; then
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libxxhash-prefix was given.
+if test "${with_libxxhash_prefix+set}" = set; then :
+  withval=$with_libxxhash_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
+
+fi
+
+
+# Check whether --with-libxxhash-type was given.
+if test "${with_libxxhash_type+set}" = set; then :
+  withval=$with_libxxhash_type;  with_libxxhash_type=$withval
+else
+   with_libxxhash_type=auto
+fi
+
+  lib_type=`eval echo \$with_libxxhash_type`
+
+      LIBXXHASH=
+  LTLIBXXHASH=
+  INCXXHASH=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='xxhash '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            elif test x$lib_type != xshared; then
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBXXHASH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  elif test x$lib_type != xshared; then
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                                LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
                         haveit=yes
                         break
                       fi
@@ -8391,7 +22051,7 @@ fi
                     fi
                   else
                                                                                 haveit=
-                    for x in $LDFLAGS $LIBICONV; do
+                    for x in $LDFLAGS $LIBXXHASH; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -8407,21 +22067,21 @@ fi
                       fi
                     done
                     if test -z "$haveit"; then
-                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                      LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-L$found_dir"
                     fi
                     if test "$hardcode_minus_L" != no; then
-                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                                                        LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_so"
                     else
-                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                                                                                                                                                                                LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-l$name"
                     fi
                   fi
                 fi
               fi
             else
               if test "X$found_a" != "X"; then
-                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+                                LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_a"
               else
-                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+                                                LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-L$found_dir -l$name"
               fi
             fi
                         additional_includedir=
@@ -8442,7 +22102,7 @@ fi
                   fi
                 fi
                 if test -z "$haveit"; then
-                  for x in $CPPFLAGS $INCICONV; do
+                  for x in $CPPFLAGS $INCXXHASH; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -8459,7 +22119,7 @@ fi
                   done
                   if test -z "$haveit"; then
                     if test -d "$additional_includedir"; then
-                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                                            INCXXHASH="${INCXXHASH}${INCXXHASH:+ }-I$additional_includedir"
                     fi
                   fi
                 fi
@@ -8487,7 +22147,7 @@ fi
                       fi
                       if test -z "$haveit"; then
                         haveit=
-                        for x in $LDFLAGS $LIBICONV; do
+                        for x in $LDFLAGS $LIBXXHASH; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -8504,11 +22164,11 @@ fi
                         done
                         if test -z "$haveit"; then
                           if test -d "$additional_libdir"; then
-                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                                                        LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-L$additional_libdir"
                           fi
                         fi
                         haveit=
-                        for x in $LDFLAGS $LTLIBICONV; do
+                        for x in $LDFLAGS $LTLIBXXHASH; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -8525,7 +22185,7 @@ fi
                         done
                         if test -z "$haveit"; then
                           if test -d "$additional_libdir"; then
-                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                                                        LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-L$additional_libdir"
                           fi
                         fi
                       fi
@@ -8563,15 +22223,20 @@ fi
                                                                                 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
                     ;;
                   *)
-                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
-                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                                        LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$dep"
+                    LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }$dep"
                     ;;
                 esac
               done
             fi
           else
-                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
-            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-l$name"
+              LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-l$name"
+            else
+              LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-l:lib$name.$libext"
+              LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-l:lib$name.$libext"
+            fi
           fi
         fi
       fi
@@ -8587,743 +22252,1649 @@ fi
       libdir="$alldirs"
       eval flag=\"$hardcode_libdir_flag_spec\"
       libdir="$acl_save_libdir"
-      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$flag"
     else
             for found_dir in $rpathdirs; do
         acl_save_libdir="$libdir"
         libdir="$found_dir"
         eval flag=\"$hardcode_libdir_flag_spec\"
         libdir="$acl_save_libdir"
-        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+        LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$flag"
       done
     fi
   fi
   if test "X$ltrpathdirs" != "X"; then
             for found_dir in $ltrpathdirs; do
-      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+      LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-R$found_dir"
     done
   fi
 
 
+        ac_save_CPPFLAGS="$CPPFLAGS"
 
+  for element in $INCXXHASH; do
+    haveit=
+    for x in $CPPFLAGS; do
 
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
-$as_echo_n "checking for iconv... " >&6; }
-if ${am_cv_func_iconv+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxxhash" >&5
+$as_echo_n "checking for libxxhash... " >&6; }
+if ${ac_cv_libxxhash+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-    am_cv_func_iconv="no, consider installing GNU libiconv"
-    am_cv_lib_iconv=no
-                    am_save_CPPFLAGS="$CPPFLAGS"
-    CPPFLAGS="$CPPFLAGS $INCICONV"
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIBXXHASH"
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdlib.h>
-#include <iconv.h>
-int
-main ()
-{
-iconv_t cd = iconv_open("","");
-       iconv(cd,NULL,NULL,NULL,NULL);
-       iconv_close(cd);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_func_iconv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    CPPFLAGS="$am_save_CPPFLAGS"
-
-    if test "$am_cv_func_iconv" != yes && test -d ../libiconv; then
-      for _libs in .libs _libs; do
-        am_save_CPPFLAGS="$CPPFLAGS"
-        am_save_LIBS="$LIBS"
-        CPPFLAGS="$CPPFLAGS -I../libiconv/include"
-        LIBS="$LIBS ../libiconv/lib/$_libs/libiconv.a"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <iconv.h>
+#include <xxhash.h>
 int
 main ()
 {
-iconv_t cd = iconv_open("","");
-           iconv(cd,NULL,NULL,NULL,NULL);
-           iconv_close(cd);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  INCICONV="-I../libiconv/include"
-          LIBICONV='${top_builddir}'/../libiconv/lib/$_libs/libiconv.a
-          LTLIBICONV='${top_builddir}'/../libiconv/lib/libiconv.la
-          am_cv_lib_iconv=yes
-          am_cv_func_iconv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        CPPFLAGS="$am_save_CPPFLAGS"
-        LIBS="$am_save_LIBS"
-        if test "$am_cv_func_iconv" = "yes"; then
-          break
-        fi
-      done
-    fi
+XXH32("foo", 3, 0);
 
-    if test "$am_cv_func_iconv" != yes; then
-      am_save_CPPFLAGS="$CPPFLAGS"
-      am_save_LIBS="$LIBS"
-      CPPFLAGS="$CPPFLAGS $INCICONV"
-      LIBS="$LIBS $LIBICONV"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <iconv.h>
-int
-main ()
-{
-iconv_t cd = iconv_open("","");
-         iconv(cd,NULL,NULL,NULL,NULL);
-         iconv_close(cd);
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_lib_iconv=yes
-        am_cv_func_iconv=yes
+  ac_cv_libxxhash=yes
+else
+  ac_cv_libxxhash=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-      CPPFLAGS="$am_save_CPPFLAGS"
-      LIBS="$am_save_LIBS"
-    fi
+    LIBS="$ac_save_LIBS"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
-$as_echo "$am_cv_func_iconv" >&6; }
-  if test "$am_cv_func_iconv" = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libxxhash" >&5
+$as_echo "$ac_cv_libxxhash" >&6; }
+  if test "$ac_cv_libxxhash" = yes; then
+    HAVE_LIBXXHASH=yes
 
-$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+$as_echo "#define HAVE_LIBXXHASH 1" >>confdefs.h
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libxxhash" >&5
+$as_echo_n "checking how to link with libxxhash... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBXXHASH" >&5
+$as_echo "$LIBXXHASH" >&6; }
+  else
+    HAVE_LIBXXHASH=no
+            CPPFLAGS="$ac_save_CPPFLAGS"
+    LIBXXHASH=
+    LTLIBXXHASH=
   fi
-  if test "$am_cv_lib_iconv" = yes; then
 
-  for element in $INCICONV; do
-    haveit=
-    for x in $CPPFLAGS; do
 
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
 
-      if test "X$x" = "X$element"; then
-        haveit=yes
-        break
+
+
+
+    if test "$HAVE_LIBXXHASH" != yes; then
+      if test "$with_xxhash" = yes; then
+	as_fn_error $? "xxhash is missing or unusable" "$LINENO" 5
       fi
-    done
-    if test -z "$haveit"; then
-      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
     fi
-  done
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
-$as_echo_n "checking how to link with libiconv... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
-$as_echo "$LIBICONV" >&6; }
-  else
-    LIBICONV=
-    LTLIBICONV=
+    if test "x$with_xxhash" = "xauto"; then
+      with_xxhash="$HAVE_LIBXXHASH"
+    fi
   fi
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use xxhash" >&5
+$as_echo_n "checking whether to use xxhash... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xxhash" >&5
+$as_echo "$with_xxhash" >&6; }
 
 
-  if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
-$as_echo_n "checking for iconv declaration... " >&6; }
-    if ${am_cv_proto_iconv+:} false; then :
+# Dependency checking.
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depdir"
+
+
+depcc="$CC"   am_compiler_list=
+
+am_depcomp=$ac_aux_dir/depcomp
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
+  if test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
 
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    if test $depmode = none; then break; fi
 
-#include <stdlib.h>
-#include <iconv.h>
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(__cplusplus)
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
+    $as_echo "$as_me:$LINENO: trying $depmode" >&5
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "include sub/conftest.Po" > confmf
 
-int
-main ()
-{
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    depcmd="depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c"
+    echo "| $depcmd" | sed -e 's/  */ /g' >&5
+    if env $depcmd > conftest.err 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po >>conftest.err 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po >>conftest.err 2>&1 &&
+       ${MAKE-make} -s -f confmf >>conftest.err 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+	$as_echo "$as_me:$LINENO: success" >&5
+        break
+      fi
+    fi
+    $as_echo "$as_me:$LINENO: failure, diagnostics are:" >&5
+    sed -e 's/^/| /' < conftest.err >&5
+  done
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  am_cv_proto_iconv_arg1=""
+  cd ..
+  rm -rf conftest.dir
 else
-  am_cv_proto_iconv_arg1="const"
+  am_cv_CC_dependencies_compiler_type=none
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+if test x${am_cv_CC_dependencies_compiler_type-none} = xnone
+then as_fn_error $? "no usable dependency style found" "$LINENO" 5
+else CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
-    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:-
-         }$am_cv_proto_iconv" >&5
-$as_echo "${ac_t:-
-         }$am_cv_proto_iconv" >&6; }
+fi
 
-cat >>confdefs.h <<_ACEOF
-#define ICONV_CONST $am_cv_proto_iconv_arg1
-_ACEOF
 
-  fi
+# Since the first call to PKG_CHECK_MODULES may not happen (is guarded by
+# a condition), we must call PKG_PROG_PKG_CONFIG explicitly to probe for
+# pkg-config.
 
 
-# GDB may fork/exec the iconv program to get the list of supported character
-# sets.  Allow the user to specify where to find it.
-# There are several factors affecting the choice of option name:
-# - There is already --with-libiconv-prefix but we can't use it, it specifies
-#   the build-time location of libiconv files.
-# - The program we need to find is iconv, which comes with glibc.  The user
-#   doesn't necessarily have libiconv installed.  Therefore naming this
-#   --with-libiconv-foo feels wrong.
-# - We want the path to be relocatable, but GDB_AC_DEFINE_RELOCATABLE is
-#   defined to work on directories not files (though it really doesn't know
-#   the difference).
-# - Calling this --with-iconv-prefix is perceived to cause too much confusion
-#   with --with-libiconv-prefix.
-# Putting these together is why the option name is --with-iconv-bin.
 
 
-# Check whether --with-iconv-bin was given.
-if test "${with_iconv_bin+set}" = set; then :
-  withval=$with_iconv_bin; iconv_bin="${withval}"
 
-cat >>confdefs.h <<_ACEOF
-#define ICONV_BIN "${iconv_bin}"
-_ACEOF
 
 
-  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
-     if test "x$prefix" = xNONE; then
-     	test_prefix=/usr/local
-     else
-	test_prefix=$prefix
-     fi
-  else
-     test_prefix=$exec_prefix
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
   fi
-  value=0
-  case ${iconv_bin} in
-     "${test_prefix}"|"${test_prefix}/"*|\
-	'${exec_prefix}'|'${exec_prefix}/'*)
-     value=1
-     ;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define ICONV_BIN_RELOCATABLE $value
-_ACEOF
-
-
+done
+  done
+IFS=$as_save_IFS
 
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
-# For the TUI, we need enhanced curses functionality.
-if test x"$enable_tui" != xno; then
-  prefer_curses=yes
 fi
-
-curses_found=no
-if test x"$prefer_curses" = xyes; then
-  # FIXME: kettenis/20040905: We prefer ncurses over the vendor-supplied
-  # curses library because the latter might not provide all the
-  # functionality we need.  However, this leads to problems on systems
-  # where the linker searches /usr/local/lib, but the compiler doesn't
-  # search /usr/local/include, if ncurses is installed in /usr/local.  A
-  # default installation of ncurses on alpha*-dec-osf* will lead to such
-  # a situation.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing waddstr" >&5
-$as_echo_n "checking for library containing waddstr... " >&6; }
-if ${ac_cv_search_waddstr+:} false; then :
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char waddstr ();
-int
-main ()
-{
-return waddstr ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' ncursesw ncurses cursesX curses; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
   else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_waddstr=$ac_res
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_waddstr+:} false; then :
-  break
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+		PKG_CONFIG=""
+	fi
 fi
-done
-if ${ac_cv_search_waddstr+:} false; then :
 
-else
-  ac_cv_search_waddstr=no
+
+CONFIG_OBS=
+CONFIG_DEPS=
+CONFIG_SRCS=
+ENABLE_CFLAGS=
+
+CONFIG_ALL=
+CONFIG_CLEAN=
+CONFIG_INSTALL=
+CONFIG_UNINSTALL=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_waddstr" >&5
-$as_echo "$ac_cv_search_waddstr" >&6; }
-ac_res=$ac_cv_search_waddstr
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 
-  if test "$ac_cv_search_waddstr" != no; then
-    curses_found=yes
+        MKINSTALLDIRS=
+  if test -n "$ac_aux_dir"; then
+    case "$ac_aux_dir" in
+      /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+      *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+    esac
+  fi
+  if test -z "$MKINSTALLDIRS"; then
+    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
   fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+    # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+  enableval=$enable_nls; USE_NLS=$enableval
+else
+  USE_NLS=yes
 fi
 
-# Check whether we should enable the TUI, but only do so if we really
-# can.
-if test x"$enable_tui" != xno; then
-  if test -d $srcdir/tui; then
-    if test "$curses_found" != no; then
-      CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_TUI_OBS)"
-      CONFIG_DEPS="$CONFIG_DEPS \$(SUBDIR_TUI_DEPS)"
-      CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_TUI_SRCS)"
-      ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_TUI_CFLAGS)"
-    else
-      if test x"$enable_tui" = xyes; then
-	as_fn_error $? "no enhanced curses library found; disable TUI" "$LINENO" 5
-      else
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no enhanced curses library found; disabling TUI" >&5
-$as_echo "$as_me: WARNING: no enhanced curses library found; disabling TUI" >&2;}
-      fi
-    fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
   fi
+  rm -f conf$$.sh
 fi
 
-# Since GDB uses Readline, we need termcap functionality.  In many
-# cases this will be provided by the curses library, but some systems
-# have a separate termcap library, or no curses library at all.
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
 
-case $host_os in
-  cygwin*)
-    if test -d $srcdir/libtermcap; then
-      LIBS="../libtermcap/libtermcap.a $LIBS"
-      ac_cv_search_tgetent="../libtermcap/libtermcap.a"
-    fi ;;
-  go32* | *djgpp*)
-    ac_cv_search_tgetent="none required"
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGFMT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$MSGFMT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
     ;;
 esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-# These are the libraries checked by Readline.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
-$as_echo_n "checking for library containing tgetent... " >&6; }
-if ${ac_cv_search_tgetent+:} false; then :
+  # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GMSGFMT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char tgetent ();
-int
-main ()
-{
-return tgetent ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' termcap tinfow tinfo curses ncursesw ncurses; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
   else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    PATH_SEPARATOR=:
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_tgetent=$ac_res
+  rm -f conf$$.sh
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_tgetent+:} false; then :
-  break
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
 fi
-done
-if ${ac_cv_search_tgetent+:} false; then :
+rm -f conf$$.file
 
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_XGETTEXT+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_search_tgetent=no
+  case "$XGETTEXT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+    ;;
+esac
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_tgetent" >&5
-$as_echo "$ac_cv_search_tgetent" >&6; }
-ac_res=$ac_cv_search_tgetent
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-fi
+    rm -f messages.po
 
 
-if test "$ac_cv_search_tgetent" = no; then
-  CONFIG_OBS="$CONFIG_OBS stub-termcap.o"
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
 fi
 
-
-# Check whether --with-system-readline was given.
-if test "${with_system_readline+set}" = set; then :
-  withval=$with_system_readline;
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
 fi
+rm -f conf$$.file
 
-
-if test "$with_system_readline" = yes; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system readline is new enough" >&5
-$as_echo_n "checking whether system readline is new enough... " >&6; }
-if ${gdb_cv_readline_ok+:} false; then :
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGMERGE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-#include <readline/readline.h>
-int
-main ()
-{
-#if RL_VERSION_MAJOR < 7
-# error "readline version 7 required"
-#endif
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdb_cv_readline_ok=yes
-else
-  gdb_cv_readline_ok=no
+  case "$MSGMERGE" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+            ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+    ;;
+esac
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_readline_ok" >&5
-$as_echo "$gdb_cv_readline_ok" >&6; }
-  if test "$gdb_cv_readline_ok" != yes; then
-    as_fn_error $? "system readline is not new enough" "$LINENO" 5
+
+
+      if test "$GMSGFMT" != ":"; then
+            if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+$as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; }
+      GMSGFMT=":"
+    fi
   fi
 
-  READLINE=-lreadline
-  READLINE_DEPS=
-  READLINE_CFLAGS=
-  READLINE_TEXI_INCFLAG=
-else
-  READLINE='$(READLINE_DIR)/libreadline.a'
-  READLINE_DEPS='$(READLINE)'
-  READLINE_CFLAGS='-I$(READLINE_SRC)/..'
-  READLINE_TEXI_INCFLAG='-I $(READLINE_DIR)'
-fi
+      if test "$XGETTEXT" != ":"; then
+            if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+       (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5
+$as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; }
+      XGETTEXT=":"
+    fi
+        rm -f messages.po
+  fi
 
+  ac_config_commands="$ac_config_commands default-1"
 
 
 
 
-# Generate jit-reader.h
 
-# This is typedeffed to GDB_CORE_ADDR in jit-reader.h
-TARGET_PTR=
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
-$as_echo_n "checking size of unsigned long long... " >&6; }
-if ${ac_cv_sizeof_unsigned_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_unsigned_long_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned long long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_long_long=0
-   fi
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
-$as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; }
+    use_additional=yes
 
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
 
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
-_ACEOF
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
-$as_echo_n "checking size of unsigned long... " >&6; }
-if ${ac_cv_sizeof_unsigned_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long"        "$ac_includes_default"; then :
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then :
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
 
-else
-  if test "$ac_cv_type_unsigned_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_long=0
-   fi
 fi
 
+
+# Check whether --with-libiconv-type was given.
+if test "${with_libiconv_type+set}" = set; then :
+  withval=$with_libiconv_type;  with_libiconv_type=$withval
+else
+   with_libiconv_type=auto
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
-$as_echo "$ac_cv_sizeof_unsigned_long" >&6; }
 
+  lib_type=`eval echo \$with_libiconv_type`
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            elif test x$lib_type != xshared; then
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
 
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
-_ACEOF
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  elif test x$lib_type != xshared; then
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
 
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned __int128" >&5
-$as_echo_n "checking size of unsigned __int128... " >&6; }
-if ${ac_cv_sizeof_unsigned___int128+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned __int128))" "ac_cv_sizeof_unsigned___int128"        "$ac_includes_default"; then :
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux*) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
 
-else
-  if test "$ac_cv_type_unsigned___int128" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned __int128)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned___int128=0
-   fi
-fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned___int128" >&5
-$as_echo "$ac_cv_sizeof_unsigned___int128" >&6; }
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
 
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED___INT128 $ac_cv_sizeof_unsigned___int128
-_ACEOF
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+              LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+            else
+              LIBICONV="${LIBICONV}${LIBICONV:+ }-l:lib$name.$libext"
+              LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l:lib$name.$libext"
+            fi
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
 
 
 
-if test "x${ac_cv_sizeof_unsigned_long}" = "x8"; then
-  TARGET_PTR="unsigned long"
-elif test "x${ac_cv_sizeof_unsigned_long_long}" = "x8"; then
-  TARGET_PTR="unsigned long long"
-elif test "x${ac_cv_sizeof_unsigned___int128}" = "x16"; then
-  TARGET_PTR="unsigned __int128"
+
+
+if test -f ../gettext/uninstalled-config.sh; then
+  relative_builddir='$(top_builddir)/../gettext'
+  .  ../gettext/uninstalled-config.sh
 else
-  TARGET_PTR="unsigned long"
-fi
+  # The sister gettext directory doesn't exist and won't collect information on
+  # using gettext for us.  Call a bundled AM_GNU_GETTEXT.
 
 
-ac_config_files="$ac_config_files jit-reader.h:jit-reader.in"
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
-$as_echo_n "checking for library containing dlopen... " >&6; }
-if ${ac_cv_search_dlopen+:} false; then :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
+if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
+#include <CoreFoundation/CFPreferences.h>
 int
 main ()
 {
-return dlopen ();
+CFPreferencesCopyAppValue(NULL, NULL)
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' dl; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_dlopen=$ac_res
+if ac_fn_c_try_link "$LINENO"; then :
+  gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+  gt_cv_func_CFPreferencesCopyAppValue=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_dlopen+:} false; then :
-  break
+    conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
 fi
-done
-if ${ac_cv_search_dlopen+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
 
+  fi
+                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
+$as_echo_n "checking for CFLocaleCopyPreferredLanguages... " >&6; }
+if ${gt_cv_func_CFLocaleCopyPreferredLanguages+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_search_dlopen=no
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyPreferredLanguages();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gt_cv_func_CFLocaleCopyPreferredLanguages=yes
+else
+  gt_cv_func_CFLocaleCopyPreferredLanguages=no
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
-$as_echo "$ac_cv_search_dlopen" >&6; }
-ac_res=$ac_cv_search_dlopen
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
+  if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
 
-fi
+$as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
+
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+     || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+                    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices"
+  fi
 
 
 
 
-# Check whether --with-jit-reader-dir was given.
-if test "${with_jit_reader_dir+set}" = set; then :
-  withval=$with_jit_reader_dir;
-    JIT_READER_DIR=$withval
+
+
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+    case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+    if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
+if eval \${$gt_func_gnugettext_libc+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  JIT_READER_DIR=${libdir}/gdb
-fi
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
 
-  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
-  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-  ac_define_dir=`eval echo $JIT_READER_DIR`
-  ac_define_dir=`eval echo $ac_define_dir`
+int
+main ()
+{
 
-cat >>confdefs.h <<_ACEOF
-#define JIT_READER_DIR "$ac_define_dir"
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$gt_func_gnugettext_libc=yes"
+else
+  eval "$gt_func_gnugettext_libc=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$gt_func_gnugettext_libc
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
 
 
 
-  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
-     if test "x$prefix" = xNONE; then
-     	test_prefix=/usr/local
-     else
-	test_prefix=$prefix
-     fi
-  else
-     test_prefix=$exec_prefix
-  fi
-  value=0
-  case ${ac_define_dir} in
-     "${test_prefix}"|"${test_prefix}/"*|\
-	'${exec_prefix}'|'${exec_prefix}/'*)
-     value=1
-     ;;
-  esac
 
-cat >>confdefs.h <<_ACEOF
-#define JIT_READER_DIR_RELOCATABLE $value
-_ACEOF
 
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
 
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
 
 
-# Check whether --with-expat was given.
-if test "${with_expat+set}" = set; then :
-  withval=$with_expat;
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if ${am_cv_func_iconv+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  with_expat=auto
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+           iconv(cd,NULL,NULL,NULL,NULL);
+           iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_func_iconv=yes
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use expat" >&5
-$as_echo_n "checking whether to use expat... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_expat" >&5
-$as_echo "$with_expat" >&6; }
+#include <stdlib.h>
+#include <iconv.h>
 
-if test "${with_expat}" = no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: expat support disabled; some features may be unavailable." >&5
-$as_echo "$as_me: WARNING: expat support disabled; some features may be unavailable." >&2;}
-  HAVE_LIBEXPAT=no
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if ${am_cv_func_iconv_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      am_cv_func_iconv_works=no
+      for ac_iconv_const in '' 'const'; do
+        if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+             aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+             *)            am_cv_func_iconv_works="guessing yes" ;;
+           esac
 else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+
+int
+main ()
+{
+int result = 0;
+  /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from
+     successful returns.  This is even documented in
+     <https://www.ibm.com/support/knowledgecenter/ssw_aix_72/i_bostechref/iconv.html> */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 1;
+        iconv_close (cd_utf8_to_88591);
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\263";
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 2;
+        iconv_close (cd_ascii_to_88591);
+      }
+  }
+  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304";
+        static char buf[2] = { (char)0xDE, (char)0xAD };
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = 1;
+        char *outptr = buf;
+        size_t outbytesleft = 1;
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+          result |= 4;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          result |= 8;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  {
+    /* Try standardized names.  */
+    iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
+    /* Try IRIX, OSF/1 names.  */
+    iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
+    /* Try AIX names.  */
+    iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
+    /* Try HP-UX names.  */
+    iconv_t cd4 = iconv_open ("utf8", "eucJP");
+    if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
+        && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
+      result |= 16;
+    if (cd1 != (iconv_t)(-1))
+      iconv_close (cd1);
+    if (cd2 != (iconv_t)(-1))
+      iconv_close (cd2);
+    if (cd3 != (iconv_t)(-1))
+      iconv_close (cd3);
+    if (cd4 != (iconv_t)(-1))
+      iconv_close (cd4);
+  }
+  return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  am_cv_func_iconv_works=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+        test "$am_cv_func_iconv_works" = no || break
+      done
+      LIBS="$am_save_LIBS"
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
 
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
 
 
 
@@ -9344,9 +23915,9 @@ else
   prefix="$acl_save_prefix"
 
 
-# Check whether --with-libexpat-prefix was given.
-if test "${with_libexpat_prefix+set}" = set; then :
-  withval=$with_libexpat_prefix;
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then :
+  withval=$with_libintl_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
     else
@@ -9371,13 +23942,23 @@ if test "${with_libexpat_prefix+set}" =
 
 fi
 
-      LIBEXPAT=
-  LTLIBEXPAT=
-  INCEXPAT=
+
+# Check whether --with-libintl-type was given.
+if test "${with_libintl_type+set}" = set; then :
+  withval=$with_libintl_type;  with_libintl_type=$withval
+else
+   with_libintl_type=auto
+fi
+
+  lib_type=`eval echo \$with_libintl_type`
+
+      LIBINTL=
+  LTLIBINTL=
+  INCINTL=
   rpathdirs=
   ltrpathdirs=
   names_already_handled=
-  names_next_round='expat '
+  names_next_round='intl '
   while test -n "$names_next_round"; do
     names_this_round="$names_next_round"
     names_next_round=
@@ -9396,9 +23977,9 @@ fi
         if test -n "$value"; then
           if test "$value" = yes; then
             eval value=\"\$LIB$uppername\"
-            test -z "$value" || LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$value"
+            test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
             eval value=\"\$LTLIB$uppername\"
-            test -z "$value" || LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }$value"
+            test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
           else
                                     :
           fi
@@ -9408,13 +23989,13 @@ fi
           found_so=
           found_a=
           if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
               found_dir="$additional_libdir"
               found_so="$additional_libdir/lib$name.$shlibext"
               if test -f "$additional_libdir/lib$name.la"; then
                 found_la="$additional_libdir/lib$name.la"
               fi
-            else
+            elif test x$lib_type != xshared; then
               if test -f "$additional_libdir/lib$name.$libext"; then
                 found_dir="$additional_libdir"
                 found_a="$additional_libdir/lib$name.$libext"
@@ -9425,7 +24006,7 @@ fi
             fi
           fi
           if test "X$found_dir" = "X"; then
-            for x in $LDFLAGS $LTLIBEXPAT; do
+            for x in $LDFLAGS $LTLIBINTL; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -9438,13 +24019,13 @@ fi
               case "$x" in
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
                     found_dir="$dir"
                     found_so="$dir/lib$name.$shlibext"
                     if test -f "$dir/lib$name.la"; then
                       found_la="$dir/lib$name.la"
                     fi
-                  else
+                  elif test x$lib_type != xshared; then
                     if test -f "$dir/lib$name.$libext"; then
                       found_dir="$dir"
                       found_a="$dir/lib$name.$libext"
@@ -9461,10 +24042,10 @@ fi
             done
           fi
           if test "X$found_dir" != "X"; then
-                        LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-L$found_dir -l$name"
+                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
             if test "X$found_so" != "X"; then
                                                         if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
-                                LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_so"
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
               else
                                                                                 haveit=
                 for x in $ltrpathdirs; do
@@ -9477,10 +24058,10 @@ fi
                   ltrpathdirs="$ltrpathdirs $found_dir"
                 fi
                                 if test "$hardcode_direct" = yes; then
-                                                      LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_so"
+                                                      LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
                 else
                   if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
-                                                            LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_so"
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
                                                             haveit=
                     for x in $rpathdirs; do
                       if test "X$x" = "X$found_dir"; then
@@ -9493,7 +24074,7 @@ fi
                     fi
                   else
                                                                                 haveit=
-                    for x in $LDFLAGS $LIBEXPAT; do
+                    for x in $LDFLAGS $LIBINTL; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -9509,21 +24090,21 @@ fi
                       fi
                     done
                     if test -z "$haveit"; then
-                      LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-L$found_dir"
+                      LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
                     fi
                     if test "$hardcode_minus_L" != no; then
-                                                                                        LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_so"
+                                                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
                     else
-                                                                                                                                                                                LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-l$name"
+                                                                                                                                                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
                     fi
                   fi
                 fi
               fi
             else
               if test "X$found_a" != "X"; then
-                                LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_a"
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
               else
-                                                LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-L$found_dir -l$name"
+                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
               fi
             fi
                         additional_includedir=
@@ -9544,7 +24125,7 @@ fi
                   fi
                 fi
                 if test -z "$haveit"; then
-                  for x in $CPPFLAGS $INCEXPAT; do
+                  for x in $CPPFLAGS $INCINTL; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -9561,7 +24142,7 @@ fi
                   done
                   if test -z "$haveit"; then
                     if test -d "$additional_includedir"; then
-                                            INCEXPAT="${INCEXPAT}${INCEXPAT:+ }-I$additional_includedir"
+                                            INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
                     fi
                   fi
                 fi
@@ -9589,7 +24170,7 @@ fi
                       fi
                       if test -z "$haveit"; then
                         haveit=
-                        for x in $LDFLAGS $LIBEXPAT; do
+                        for x in $LDFLAGS $LIBINTL; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -9606,11 +24187,11 @@ fi
                         done
                         if test -z "$haveit"; then
                           if test -d "$additional_libdir"; then
-                                                        LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-L$additional_libdir"
+                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
                           fi
                         fi
                         haveit=
-                        for x in $LDFLAGS $LTLIBEXPAT; do
+                        for x in $LDFLAGS $LTLIBINTL; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -9627,7 +24208,7 @@ fi
                         done
                         if test -z "$haveit"; then
                           if test -d "$additional_libdir"; then
-                                                        LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-L$additional_libdir"
+                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
                           fi
                         fi
                       fi
@@ -9665,15 +24246,20 @@ fi
                                                                                 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
                     ;;
                   *)
-                                        LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$dep"
-                    LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }$dep"
+                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+                    LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
                     ;;
                 esac
               done
             fi
           else
-                                                            LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-l$name"
-            LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-l$name"
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+              LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+            else
+              LIBINTL="${LIBINTL}${LIBINTL:+ }-l:lib$name.$libext"
+              LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l:lib$name.$libext"
+            fi
           fi
         fi
       fi
@@ -9689,143 +24275,3118 @@ fi
       libdir="$alldirs"
       eval flag=\"$hardcode_libdir_flag_spec\"
       libdir="$acl_save_libdir"
-      LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$flag"
+      LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
     else
             for found_dir in $rpathdirs; do
         acl_save_libdir="$libdir"
         libdir="$found_dir"
         eval flag=\"$hardcode_libdir_flag_spec\"
         libdir="$acl_save_libdir"
-        LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$flag"
+        LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
       done
     fi
   fi
   if test "X$ltrpathdirs" != "X"; then
             for found_dir in $ltrpathdirs; do
-      LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-R$found_dir"
+      LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+    done
+  fi
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
+if eval \${$gt_func_gnugettext_libintl+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main ()
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$gt_func_gnugettext_libintl=yes"
+else
+  eval "$gt_func_gnugettext_libintl=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+                        if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main ()
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  LIBINTL="$LIBINTL $LIBICONV"
+                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                 eval "$gt_func_gnugettext_libintl=yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"
+fi
+eval ac_res=\$$gt_func_gnugettext_libintl
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+        fi
+
+                                        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+                    LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+                LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+  if test "$USE_NLS" = "yes"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
+
+  for element in $INCINTL; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+      fi
+
+
+$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
+
+
+$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
+
+    fi
+
+        POSUB=po
+  fi
+
+
+
+    INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+if test x"$USE_NLS" != xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5
+$as_echo_n "checking for catalogs to be installed... " >&6; }
+  # Look for .po and .gmo files in the source directory.
+  CATALOGS=
+  XLINGUAS=
+  for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+    # If there aren't any .gmo files the shell will give us the
+    # literal string "../path/to/srcdir/po/*.gmo" which has to be
+    # weeded out.
+    case "$cat" in *\**)
+      continue;;
+    esac
+    # The quadruple backslash is collapsed to a double backslash
+    # by the backticks, then collapsed again by the double quotes,
+    # leaving us with one backslash in the sed expression (right
+    # before the dot that mustn't act as a wildcard).
+    cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+    lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+    # The user is allowed to set LINGUAS to a list of languages to
+    # install catalogs for.  If it's empty that means "all of them."
+    if test "x$LINGUAS" = x; then
+      CATALOGS="$CATALOGS $cat"
+      XLINGUAS="$XLINGUAS $lang"
+    else
+      case "$LINGUAS" in *$lang*)
+        CATALOGS="$CATALOGS $cat"
+        XLINGUAS="$XLINGUAS $lang"
+        ;;
+      esac
+    fi
+  done
+  LINGUAS="$XLINGUAS"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5
+$as_echo "$LINGUAS" >&6; }
+
+
+    DATADIRNAME=share
+
+  INSTOBJEXT=.mo
+
+  GENCAT=gencat
+
+  CATOBJEXT=.gmo
+
+fi
+
+localedir='${datadir}/locale'
+
+
+if test x"$USE_NLS" = xyes; then
+   CONFIG_ALL="$CONFIG_ALL all-po"
+   CONFIG_CLEAN="$CONFIG_CLEAN clean-po"
+   CONFIG_INSTALL="$CONFIG_INSTALL install-po"
+   CONFIG_UNINSTALL="$CONFIG_UNINSTALL uninstall-po"
+fi
+
+PACKAGE=gdb
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
+# We never need to detect it in this sub-configure.
+# But preserve it for config.status --recheck.
+
+
+
+MAKEINFO_EXTRA_FLAGS=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $MAKEINFO supports @click" >&5
+$as_echo_n "checking whether $MAKEINFO supports @click... " >&6; }
+if ${gdb_cv_have_makeinfo_click+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  echo '@clicksequence{a @click{} b}' >conftest.texinfo
+  if eval "$MAKEINFO conftest.texinfo >&5 2>&5"; then
+    gdb_cv_have_makeinfo_click=yes
+  else
+    gdb_cv_have_makeinfo_click=no
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_makeinfo_click" >&5
+$as_echo "$gdb_cv_have_makeinfo_click" >&6; }
+if test x"$gdb_cv_have_makeinfo_click" = xyes; then
+  MAKEINFO_EXTRA_FLAGS="$MAKEINFO_EXTRA_FLAGS -DHAVE_MAKEINFO_CLICK"
+fi
+
+
+
+
+# Check whether --with-separate-debug-dir was given.
+if test "${with_separate_debug_dir+set}" = set; then :
+  withval=$with_separate_debug_dir;
+    DEBUGDIR=$withval
+else
+  DEBUGDIR=${libdir}/debug
+fi
+
+
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $DEBUGDIR`
+  ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define DEBUGDIR "$ac_define_dir"
+_ACEOF
+
+
+
+
+  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
+     if test "x$prefix" = xNONE; then
+     	test_prefix=/usr/local
+     else
+	test_prefix=$prefix
+     fi
+  else
+     test_prefix=$exec_prefix
+  fi
+  value=0
+  case ${ac_define_dir} in
+     "${test_prefix}"|"${test_prefix}/"*|\
+	'${exec_prefix}'|'${exec_prefix}/'*)
+     value=1
+     ;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define DEBUGDIR_RELOCATABLE $value
+_ACEOF
+
+
+
+
+
+# Check whether --with-additional-debug-dirs was given.
+if test "${with_additional_debug_dirs+set}" = set; then :
+  withval=$with_additional_debug_dirs;
+cat >>confdefs.h <<_ACEOF
+#define ADDITIONAL_DEBUG_DIRS "${withval}"
+_ACEOF
+
+fi
+
+
+# We can't pass paths as command line arguments.
+# Mingw32 tries to be clever and will convert the paths for us.
+# For example -DBINDIR="/usr/local/bin" passed on the command line may get
+# converted to -DBINDIR="E:/msys/mingw32/msys/1.0/local/bin".
+# This breaks GDB's relocatable path conversions since paths passed in
+# config.h would not get so translated, the path prefixes no longer match.
+
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $bindir`
+  ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define BINDIR "$ac_define_dir"
+_ACEOF
+
+
+
+# GDB's datadir relocation
+
+
+
+# Check whether --with-gdb-datadir was given.
+if test "${with_gdb_datadir+set}" = set; then :
+  withval=$with_gdb_datadir;
+    GDB_DATADIR=$withval
+else
+  GDB_DATADIR=${datadir}/gdb
+fi
+
+
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $GDB_DATADIR`
+  ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define GDB_DATADIR "$ac_define_dir"
+_ACEOF
+
+
+
+
+  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
+     if test "x$prefix" = xNONE; then
+     	test_prefix=/usr/local
+     else
+	test_prefix=$prefix
+     fi
+  else
+     test_prefix=$exec_prefix
+  fi
+  value=0
+  case ${ac_define_dir} in
+     "${test_prefix}"|"${test_prefix}/"*|\
+	'${exec_prefix}'|'${exec_prefix}/'*)
+     value=1
+     ;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define GDB_DATADIR_RELOCATABLE $value
+_ACEOF
+
+
+
+
+
+# Check whether --with-relocated-sources was given.
+if test "${with_relocated_sources+set}" = set; then :
+  withval=$with_relocated_sources; reloc_srcdir="${withval}"
+
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $reloc_srcdir`
+  ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define RELOC_SRCDIR "$ac_define_dir"
+_ACEOF
+
+
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default auto-load directory" >&5
+$as_echo_n "checking for default auto-load directory... " >&6; }
+
+# Check whether --with-auto-load-dir was given.
+if test "${with_auto_load_dir+set}" = set; then :
+  withval=$with_auto_load_dir;
+else
+  with_auto_load_dir='$debugdir:$datadir/auto-load'
+fi
+
+escape_dir=`echo $with_auto_load_dir | sed -e 's/[$]datadir\>/\\\\\\\\\\\\&/g' -e 's/[$]debugdir\>/\\\\\\\\\\\\&/g'`
+
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $escape_dir`
+  ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define AUTO_LOAD_DIR "$ac_define_dir"
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_dir" >&5
+$as_echo "$with_auto_load_dir" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default auto-load safe-path" >&5
+$as_echo_n "checking for default auto-load safe-path... " >&6; }
+
+# Check whether --with-auto-load-safe-path was given.
+if test "${with_auto_load_safe_path+set}" = set; then :
+  withval=$with_auto_load_safe_path; if test "$with_auto_load_safe_path" = "no"; then
+     with_auto_load_safe_path="/"
+     fi
+else
+  with_auto_load_safe_path="$with_auto_load_dir"
+fi
+
+escape_dir=`echo $with_auto_load_safe_path | sed -e 's/[$]datadir\>/\\\\\\\\\\\\&/g' -e 's/[$]debugdir\>/\\\\\\\\\\\\&/g'`
+
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $escape_dir`
+  ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define AUTO_LOAD_SAFE_PATH "$ac_define_dir"
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5
+$as_echo "$with_auto_load_safe_path" >&6; }
+
+
+
+subdirs="$subdirs testsuite"
+
+
+# Check whether to support alternative target configurations
+# Check whether --enable-targets was given.
+if test "${enable_targets+set}" = set; then :
+  enableval=$enable_targets; case "${enableval}" in
+  yes | "") as_fn_error $? "enable-targets option must specify target names or 'all'" "$LINENO" 5
+            ;;
+  no)       enable_targets= ;;
+  *)        enable_targets=$enableval ;;
+esac
+fi
+
+
+# Check whether --enable-64-bit-bfd was given.
+if test "${enable_64_bit_bfd+set}" = set; then :
+  enableval=$enable_64_bit_bfd; case $enableval in #(
+  yes|no) :
+     ;; #(
+  *) :
+    as_fn_error $? "bad value ${enableval} for 64-bit-bfd option" "$LINENO" 5 ;; #(
+  *) :
+     ;;
+esac
+else
+  enable_64_bit_bfd=no
+fi
+
+
+if test "x$enable_64_bit_bfd" = "xno"; then :
+    # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if ${ac_cv_sizeof_void_p+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_void_p" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+  if test "x$ac_cv_sizeof_void_p" = "x8"; then :
+  enable_64_bit_bfd=yes
+fi
+
+fi
+
+ if test "x$enable_64_bit_bfd" = "xyes"; then
+  ENABLE_BFD_64_BIT_TRUE=
+  ENABLE_BFD_64_BIT_FALSE='#'
+else
+  ENABLE_BFD_64_BIT_TRUE='#'
+  ENABLE_BFD_64_BIT_FALSE=
+fi
+
+
+
+# Provide defaults for some variables set by the per-host and per-target
+# configuration.
+gdb_host_obs=posix-hdep.o
+
+if test "${target}" = "${host}"; then
+  gdb_native=yes
+else
+  gdb_native=no
+fi
+
+. $srcdir/configure.host
+
+# Accumulate some settings from configure.tgt over all enabled targets
+
+TARGET_OBS=
+all_targets=
+HAVE_NATIVE_GCORE_TARGET=
+
+for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
+do
+  if test "$targ_alias" = "all"; then
+    all_targets=true
+  else
+    # Canonicalize the secondary target names.
+    result=`$ac_config_sub $targ_alias 2>/dev/null`
+    if test -n "$result"; then
+        targ=$result
+    else
+        targ=$targ_alias
+    fi
+
+    . ${srcdir}/configure.tgt
+
+    if test -z "${gdb_target_obs}"; then :
+  as_fn_error $? "configuration ${targ} is unsupported." "$LINENO" 5
+fi
+
+    # Target-specific object files
+    for i in ${gdb_target_obs}; do
+        case " $TARGET_OBS " in
+        *" ${i} "*) ;;
+        *)
+          TARGET_OBS="$TARGET_OBS ${i}"
+          ;;
+        esac
+    done
+
+    # Check whether this target needs 64-bit CORE_ADDR
+    if test x${enable_64_bit_bfd} = xno; then
+      . ${srcdir}/../bfd/config.bfd
+    fi
+
+    # Check whether this target is native and supports gcore.
+    if test $gdb_native = yes -a "$targ_alias" = "$target_alias" \
+       && $gdb_have_gcore; then
+      HAVE_NATIVE_GCORE_TARGET=1
+    fi
+  fi
+done
+
+if test x${all_targets} = xtrue; then
+  if test x${enable_64_bit_bfd} = xyes; then
+    TARGET_OBS='$(ALL_TARGET_OBS) $(ALL_64_TARGET_OBS)'
+  else
+    TARGET_OBS='$(ALL_TARGET_OBS)'
+  fi
+fi
+
+# AMD debugger API support.
+
+
+# Check whether --with-amd-dbgapi was given.
+if test "${with_amd_dbgapi+set}" = set; then :
+  withval=$with_amd_dbgapi;
+	   case $withval in
+	     yes | no | auto)
+	       ;;
+	     *)
+	       as_fn_error $? "bad value $withval for --with-amd-dbgapi" "$LINENO" 5
+	       ;;
+	   esac
+
+else
+  with_amd_dbgapi=auto
+fi
+
+
+# If the user passes --without-amd-dbgapi but also explicitly enables a target
+# that requires amd-dbgapi, it is an error.
+if test "$with_amd_dbgapi" = no -a "$gdb_require_amd_dbgapi" = true; then
+  as_fn_error $? "an explicitly enabled target requires amd-dbgapi, but amd-dbgapi is explicitly disabled" "$LINENO" 5
+fi
+
+# Look for amd-dbgapi if:
+#
+#   - a target architecture requiring it has explicitly been enabled, or
+#   - --enable-targets=all was provided and the user did not explicitly disable
+#     amd-dbgapi support
+if test "$gdb_require_amd_dbgapi" = true \
+     -o \( "$all_targets" = true -a "$with_amd_dbgapi" != no \); then
+  # amd-dbgapi version 0.68 is part of ROCm 5.4.  There is no guarantee of API
+  # stability until amd-dbgapi hits 1.0, but for convenience, still check for
+  # greater or equal that version.  It can be handy when testing with a newer
+  # version of the library.
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for amd-dbgapi >= 0.68.0" >&5
+$as_echo_n "checking for amd-dbgapi >= 0.68.0... " >&6; }
+
+if test -n "$AMD_DBGAPI_CFLAGS"; then
+    pkg_cv_AMD_DBGAPI_CFLAGS="$AMD_DBGAPI_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"amd-dbgapi >= 0.68.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "amd-dbgapi >= 0.68.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_AMD_DBGAPI_CFLAGS=`$PKG_CONFIG --cflags "amd-dbgapi >= 0.68.0" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$AMD_DBGAPI_LIBS"; then
+    pkg_cv_AMD_DBGAPI_LIBS="$AMD_DBGAPI_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"amd-dbgapi >= 0.68.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "amd-dbgapi >= 0.68.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_AMD_DBGAPI_LIBS=`$PKG_CONFIG --libs "amd-dbgapi >= 0.68.0" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+if test $pkg_failed = no; then
+  pkg_save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $pkg_cv_AMD_DBGAPI_LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  pkg_failed=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$pkg_save_LDFLAGS
+fi
+
+
+
+if test $pkg_failed = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        AMD_DBGAPI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "amd-dbgapi >= 0.68.0" 2>&1`
+        else
+	        AMD_DBGAPI_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "amd-dbgapi >= 0.68.0" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$AMD_DBGAPI_PKG_ERRORS" >&5
+
+	has_amd_dbgapi=no
+elif test $pkg_failed = untried; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	has_amd_dbgapi=no
+else
+	AMD_DBGAPI_CFLAGS=$pkg_cv_AMD_DBGAPI_CFLAGS
+	AMD_DBGAPI_LIBS=$pkg_cv_AMD_DBGAPI_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	has_amd_dbgapi=yes
+fi
+
+  if test "$has_amd_dbgapi" = "yes"; then
+
+$as_echo "#define HAVE_AMD_DBGAPI 1" >>confdefs.h
+
+    TARGET_OBS="$TARGET_OBS amd-dbgapi-target.o"
+
+    # If --enable-targets=all was provided, use the list of all files depending
+    # on amd-dbgapi that is hardcoded in the Makefile.  Else, the appropriate
+    # architecture entry in configure.tgt will have added the files to
+    # gdb_target_obs.
+    if test "$all_targets" = true; then
+      TARGET_OBS="$TARGET_OBS \$(ALL_AMD_DBGAPI_TARGET_OBS)"
+    fi
+  elif test "$gdb_require_amd_dbgapi" = true -o "$with_amd_dbgapi" = yes; then
+    # amd-dbgapi was not found and...
+    #
+    #   - a target requiring it was explicitly enabled, or
+    #   - the user explicitly wants to enable amd-dbgapi
+    as_fn_error $? "amd-dbgapi is required, but cannot find an appropriate version: $AMD_DBGAPI_PKG_ERRORS" "$LINENO" 5
+  fi
+fi
+
+
+
+
+# For other settings, only the main target counts.
+gdb_sim=
+gdb_osabi=
+targ=$target; . ${srcdir}/configure.tgt
+
+# Fetch the default architecture and default target vector from BFD.
+targ=$target; . $srcdir/../bfd/config.bfd
+
+# We only want the first architecture, so strip off the others if
+# there is more than one.
+targ_archs=`echo $targ_archs | sed 's/ .*//'`
+
+if test "x$targ_archs" != x; then
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_BFD_ARCH $targ_archs
+_ACEOF
+
+fi
+if test "x$targ_defvec" != x; then
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_BFD_VEC $targ_defvec
+_ACEOF
+
+fi
+
+# Enable TUI.
+# Check whether --enable-tui was given.
+if test "${enable_tui+set}" = set; then :
+  enableval=$enable_tui;
+	   case $enableval in
+	     yes | no | auto)
+	       ;;
+	     *)
+	       as_fn_error $? "bad value $enableval for --enable-tui" "$LINENO" 5
+	       ;;
+	   esac
+
+else
+  enable_tui=auto
+fi
+
+
+# Enable gdbtk.
+# Check whether --enable-gdbtk was given.
+if test "${enable_gdbtk+set}" = set; then :
+  enableval=$enable_gdbtk;
+	   case $enableval in
+	     yes | no)
+	       ;;
+	     *)
+	       as_fn_error $? "bad value $enableval for --enable-gdbtk" "$LINENO" 5
+	       ;;
+	   esac
+
+else
+  if test -d "$srcdir/gdbtk"; then
+		 enable_gdbtk=yes
+	       else
+		 enable_gdbtk=no
+	       fi
+fi
+
+# We unconditionally disable gdbtk tests on selected platforms.
+case $host_os in
+  go32* | windows*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gdbtk isn't supported on $host; disabling" >&5
+$as_echo "$as_me: WARNING: gdbtk isn't supported on $host; disabling" >&2;}
+    enable_gdbtk=no ;;
+esac
+
+# Handle optional debuginfod support
+
+# Handle optional debuginfod support as well as optional section
+# downloading support.
+#
+# Define HAVE_LIBDEBUGINFOD if libdebuginfod is found with version >= 0.179.
+#
+# Define HAVE_LIBDEBUGINFOD_FIND_SECTION if libdebuginfod is found with
+# version >= 0.188.
+
+# Check whether --with-debuginfod was given.
+if test "${with_debuginfod+set}" = set; then :
+  withval=$with_debuginfod;
+else
+  with_debuginfod=auto
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use debuginfod" >&5
+$as_echo_n "checking whether to use debuginfod... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_debuginfod" >&5
+$as_echo "$with_debuginfod" >&6; }
+
+if test "x$with_debuginfod" != xno; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libdebuginfod >= 0.188" >&5
+$as_echo_n "checking for libdebuginfod >= 0.188... " >&6; }
+
+if test -n "$DEBUGINFOD_CFLAGS"; then
+    pkg_cv_DEBUGINFOD_CFLAGS="$DEBUGINFOD_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdebuginfod >= 0.188\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libdebuginfod >= 0.188") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEBUGINFOD_CFLAGS=`$PKG_CONFIG --cflags "libdebuginfod >= 0.188" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$DEBUGINFOD_LIBS"; then
+    pkg_cv_DEBUGINFOD_LIBS="$DEBUGINFOD_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdebuginfod >= 0.188\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libdebuginfod >= 0.188") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEBUGINFOD_LIBS=`$PKG_CONFIG --libs "libdebuginfod >= 0.188" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+if test $pkg_failed = no; then
+  pkg_save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $pkg_cv_DEBUGINFOD_LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  pkg_failed=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$pkg_save_LDFLAGS
+fi
+
+
+
+if test $pkg_failed = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        DEBUGINFOD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libdebuginfod >= 0.188" 2>&1`
+        else
+	        DEBUGINFOD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libdebuginfod >= 0.188" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$DEBUGINFOD_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libdebuginfod is missing or some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: libdebuginfod is missing or some features may be unavailable." >&2;}
+elif test $pkg_failed = untried; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libdebuginfod is missing or some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: libdebuginfod is missing or some features may be unavailable." >&2;}
+else
+	DEBUGINFOD_CFLAGS=$pkg_cv_DEBUGINFOD_CFLAGS
+	DEBUGINFOD_LIBS=$pkg_cv_DEBUGINFOD_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_LIBDEBUGINFOD_FIND_SECTION 1" >>confdefs.h
+
+fi
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libdebuginfod >= 0.179" >&5
+$as_echo_n "checking for libdebuginfod >= 0.179... " >&6; }
+
+if test -n "$DEBUGINFOD_CFLAGS"; then
+    pkg_cv_DEBUGINFOD_CFLAGS="$DEBUGINFOD_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdebuginfod >= 0.179\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libdebuginfod >= 0.179") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEBUGINFOD_CFLAGS=`$PKG_CONFIG --cflags "libdebuginfod >= 0.179" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$DEBUGINFOD_LIBS"; then
+    pkg_cv_DEBUGINFOD_LIBS="$DEBUGINFOD_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdebuginfod >= 0.179\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libdebuginfod >= 0.179") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEBUGINFOD_LIBS=`$PKG_CONFIG --libs "libdebuginfod >= 0.179" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+if test $pkg_failed = no; then
+  pkg_save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $pkg_cv_DEBUGINFOD_LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  pkg_failed=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$pkg_save_LDFLAGS
+fi
+
+
+
+if test $pkg_failed = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        DEBUGINFOD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libdebuginfod >= 0.179" 2>&1`
+        else
+	        DEBUGINFOD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libdebuginfod >= 0.179" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$DEBUGINFOD_PKG_ERRORS" >&5
+
+	if test "x$with_debuginfod" = xyes; then
+       as_fn_error $? "\"--with-debuginfod was given, but libdebuginfod is missing or unusable.\"" "$LINENO" 5
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&2;}
+     fi
+elif test $pkg_failed = untried; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	if test "x$with_debuginfod" = xyes; then
+       as_fn_error $? "\"--with-debuginfod was given, but libdebuginfod is missing or unusable.\"" "$LINENO" 5
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&2;}
+     fi
+else
+	DEBUGINFOD_CFLAGS=$pkg_cv_DEBUGINFOD_CFLAGS
+	DEBUGINFOD_LIBS=$pkg_cv_DEBUGINFOD_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_LIBDEBUGINFOD 1" >>confdefs.h
+
+fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: debuginfod support disabled; some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: debuginfod support disabled; some features may be unavailable." >&2;}
+fi
+
+
+# Libunwind support for ia64.
+
+# Check whether --with-libunwind-ia64 was given.
+if test "${with_libunwind_ia64+set}" = set; then :
+  withval=$with_libunwind_ia64;
+else
+  with_libunwind_ia64=auto
+fi
+
+
+# Backward compatibility option.
+if test "${with_libunwind+set}" = set; then
+  if test x"$with_libunwind_ia64" != xauto; then
+    as_fn_error $? "option --with-libunwind is deprecated, use --with-libunwind-ia64" "$LINENO" 5
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&5
+$as_echo "$as_me: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&2;}
+  with_libunwind_ia64="$with_libunwind"
+fi
+
+case "$with_libunwind_ia64" in
+  yes | no)
+    ;;
+  auto)
+    for ac_header in libunwind-ia64.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default"
+if test "x$ac_cv_header_libunwind_ia64_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBUNWIND_IA64_H 1
+_ACEOF
+
+fi
+
+done
+
+    with_libunwind_ia64=$ac_cv_header_libunwind_ia64_h
+    ;;
+  *)
+    as_fn_error $? "bad value $with_libunwind_ia64 for GDB --with-libunwind-ia64 option" "$LINENO" 5
+    ;;
+esac
+
+if test x"$with_libunwind_ia64" = xyes; then
+  for ac_header in libunwind-ia64.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default"
+if test "x$ac_cv_header_libunwind_ia64_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBUNWIND_IA64_H 1
+_ACEOF
+
+fi
+
+done
+
+  if test x"$ac_cv_header_libunwind_ia64_h" != xyes; then
+    as_fn_error $? "GDB option --with-libunwind-ia64 requires libunwind-ia64.h" "$LINENO" 5
+  fi
+  CONFIG_OBS="$CONFIG_OBS ia64-libunwind-tdep.o"
+  CONFIG_DEPS="$CONFIG_DEPS ia64-libunwind-tdep.o"
+  CONFIG_SRCS="$CONFIG_SRCS ia64-libunwind-tdep.c"
+fi
+
+opt_curses=no
+
+# Check whether --with-curses was given.
+if test "${with_curses+set}" = set; then :
+  withval=$with_curses; opt_curses=$withval
+fi
+
+
+prefer_curses=no
+if test "$opt_curses" = "yes"; then
+  prefer_curses=yes
+fi
+
+# Profiling support.
+# Check whether --enable-profiling was given.
+if test "${enable_profiling+set}" = set; then :
+  enableval=$enable_profiling;
+	   case $enableval in
+	     yes | no)
+	       ;;
+	     *)
+	       as_fn_error $? "bad value $enableval for --enable-profiling" "$LINENO" 5
+	       ;;
+	   esac
+
+else
+  enable_profiling=no
+fi
+
+
+for ac_func in monstartup _mcleanup
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _etext" >&5
+$as_echo_n "checking for _etext... " >&6; }
+if ${ac_cv_var__etext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+	 extern char _etext;
+int
+main ()
+{
+free (&_etext);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_var__etext=yes
+else
+  ac_cv_var__etext=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var__etext" >&5
+$as_echo "$ac_cv_var__etext" >&6; }
+if test "$ac_cv_var__etext" = yes; then
+
+$as_echo "#define HAVE__ETEXT 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for etext" >&5
+$as_echo_n "checking for etext... " >&6; }
+if ${ac_cv_var_etext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+	 extern char etext;
+int
+main ()
+{
+free (&etext);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_var_etext=yes
+else
+  ac_cv_var_etext=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_etext" >&5
+$as_echo "$ac_cv_var_etext" >&6; }
+if test "$ac_cv_var_etext" = yes; then
+
+$as_echo "#define HAVE_ETEXT 1" >>confdefs.h
+
+fi
+if test "$enable_profiling" = yes ; then
+  if test "$ac_cv_func_monstartup" = no || test "$ac_cv_func__mcleanup" = no; then
+    as_fn_error $? "--enable-profiling requires monstartup and _mcleanup" "$LINENO" 5
+  fi
+  PROFILE_CFLAGS=-pg
+  OLD_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $PROFILE_CFLAGS"
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pg" >&5
+$as_echo_n "checking whether $CC supports -pg... " >&6; }
+if ${ac_cv_cc_supports_pg+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int x;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_cc_supports_pg=yes
+else
+  ac_cv_cc_supports_pg=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cc_supports_pg" >&5
+$as_echo "$ac_cv_cc_supports_pg" >&6; }
+
+  if test "$ac_cv_cc_supports_pg" = no; then
+    as_fn_error $? "--enable-profiling requires a compiler which supports -pg" "$LINENO" 5
+  fi
+
+  CFLAGS="$OLD_CFLAGS"
+fi
+
+CODESIGN_CERT=
+# Check whether --enable-codesign was given.
+if test "${enable_codesign+set}" = set; then :
+  enableval=$enable_codesign; CODESIGN_CERT=$enableval
+fi
+
+
+
+
+
+# Check whether --with-pkgversion was given.
+if test "${with_pkgversion+set}" = set; then :
+  withval=$with_pkgversion; case "$withval" in
+      yes) as_fn_error $? "package version not specified" "$LINENO" 5 ;;
+      no)  PKGVERSION= ;;
+      *)   PKGVERSION="($withval) " ;;
+     esac
+else
+  PKGVERSION="(GDB) "
+
+fi
+
+
+
+
+
+# Check whether --with-bugurl was given.
+if test "${with_bugurl+set}" = set; then :
+  withval=$with_bugurl; case "$withval" in
+      yes) as_fn_error $? "bug URL not specified" "$LINENO" 5 ;;
+      no)  BUGURL=
+	   ;;
+      *)   BUGURL="$withval"
+	   ;;
+     esac
+else
+  BUGURL="https://www.gnu.org/software/gdb/bugs/"
+
+fi
+
+  case ${BUGURL} in
+  "")
+    REPORT_BUGS_TO=
+    REPORT_BUGS_TEXI=
+    ;;
+  *)
+    REPORT_BUGS_TO="<$BUGURL>"
+    REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`}
+    ;;
+  esac;
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define PKGVERSION "$PKGVERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define REPORT_BUGS_TO "$REPORT_BUGS_TO"
+_ACEOF
+
+
+# --------------------- #
+# Checks for programs.  #
+# --------------------- #
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+for ac_prog in 'bison -y' byacc
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_YACC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_YACC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
+set dummy ${ac_tool_prefix}windres; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_WINDRES+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$WINDRES"; then
+  ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+WINDRES=$ac_cv_prog_WINDRES
+if test -n "$WINDRES"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
+$as_echo "$WINDRES" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_WINDRES"; then
+  ac_ct_WINDRES=$WINDRES
+  # Extract the first word of "windres", so it can be a program name with args.
+set dummy windres; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_WINDRES+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_WINDRES"; then
+  ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_WINDRES="windres"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
+if test -n "$ac_ct_WINDRES"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5
+$as_echo "$ac_ct_WINDRES" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_WINDRES" = x; then
+    WINDRES=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    WINDRES=$ac_ct_WINDRES
+  fi
+else
+  WINDRES="$ac_cv_prog_WINDRES"
+fi
+
+
+case $host_os in
+  gnu*)
+    # Needed for GNU Hurd hosts.
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mig", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mig; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MIG"; then
+  ac_cv_prog_MIG="$MIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_MIG="${ac_tool_prefix}mig"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MIG=$ac_cv_prog_MIG
+if test -n "$MIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MIG" >&5
+$as_echo "$MIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MIG"; then
+  ac_ct_MIG=$MIG
+  # Extract the first word of "mig", so it can be a program name with args.
+set dummy mig; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MIG"; then
+  ac_cv_prog_ac_ct_MIG="$ac_ct_MIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_MIG="mig"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MIG=$ac_cv_prog_ac_ct_MIG
+if test -n "$ac_ct_MIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MIG" >&5
+$as_echo "$ac_ct_MIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MIG" = x; then
+    MIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MIG=$ac_ct_MIG
+  fi
+else
+  MIG="$ac_cv_prog_MIG"
+fi
+
+    if test x"$MIG" = x; then
+      as_fn_error $? "MIG not found but required for $host hosts" "$LINENO" 5
+    fi
+    ;;
+esac
+
+# ---------------------- #
+# Checks for libraries.  #
+# ---------------------- #
+
+# We might need to link with -lm; most simulators need it.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5
+$as_echo_n "checking for main in -lm... " >&6; }
+if ${ac_cv_lib_m_main+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_main=yes
+else
+  ac_cv_lib_m_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5
+$as_echo "$ac_cv_lib_m_main" >&6; }
+if test "x$ac_cv_lib_m_main" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBM 1
+_ACEOF
+
+  LIBS="-lm $LIBS"
+
+fi
+
+
+# Some systems (e.g. Solaris) have `gethostbyname' in libnsl.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if ${ac_cv_search_gethostbyname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' nsl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_gethostbyname=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_gethostbyname+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_gethostbyname+:} false; then :
+
+else
+  ac_cv_search_gethostbyname=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+# Link in zlib/zstd if we can.  This allows us to read compressed debug
+# sections.
+
+  # Use the system's zlib library.
+  zlibdir="-L\$(top_builddir)/../zlib"
+  zlibinc="-I\$(top_srcdir)/../zlib"
+
+# Check whether --with-system-zlib was given.
+if test "${with_system_zlib+set}" = set; then :
+  withval=$with_system_zlib; if test x$with_system_zlib = xyes ; then
+    zlibdir=
+    zlibinc=
+  fi
+
+fi
+
+
+
+
+
+
+# Check whether --with-zstd was given.
+if test "${with_zstd+set}" = set; then :
+  withval=$with_zstd;
+else
+  with_zstd=auto
+fi
+
+
+if test "$with_zstd" != no; then :
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libzstd >= 1.4.0" >&5
+$as_echo_n "checking for libzstd >= 1.4.0... " >&6; }
+
+if test -n "$ZSTD_CFLAGS"; then
+    pkg_cv_ZSTD_CFLAGS="$ZSTD_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libzstd >= 1.4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libzstd >= 1.4.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ZSTD_CFLAGS=`$PKG_CONFIG --cflags "libzstd >= 1.4.0" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$ZSTD_LIBS"; then
+    pkg_cv_ZSTD_LIBS="$ZSTD_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libzstd >= 1.4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libzstd >= 1.4.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ZSTD_LIBS=`$PKG_CONFIG --libs "libzstd >= 1.4.0" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+if test $pkg_failed = no; then
+  pkg_save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $pkg_cv_ZSTD_LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  pkg_failed=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$pkg_save_LDFLAGS
+fi
+
+
+
+if test $pkg_failed = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        ZSTD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libzstd >= 1.4.0" 2>&1`
+        else
+	        ZSTD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libzstd >= 1.4.0" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$ZSTD_PKG_ERRORS" >&5
+
+
+    if test "$with_zstd" = yes; then
+      as_fn_error $? "--with-zstd was given, but pkgconfig/libzstd.pc is not found" "$LINENO" 5
+    fi
+
+elif test $pkg_failed = untried; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+    if test "$with_zstd" = yes; then
+      as_fn_error $? "--with-zstd was given, but pkgconfig/libzstd.pc is not found" "$LINENO" 5
+    fi
+
+else
+	ZSTD_CFLAGS=$pkg_cv_ZSTD_CFLAGS
+	ZSTD_LIBS=$pkg_cv_ZSTD_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+$as_echo "#define HAVE_ZSTD 1" >>confdefs.h
+
+
+fi
+
+fi
+
+
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
     done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if ${am_cv_func_iconv+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+           iconv(cd,NULL,NULL,NULL,NULL);
+           iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if ${am_cv_func_iconv_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      am_cv_func_iconv_works=no
+      for ac_iconv_const in '' 'const'; do
+        if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+             aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+             *)            am_cv_func_iconv_works="guessing yes" ;;
+           esac
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+
+int
+main ()
+{
+int result = 0;
+  /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from
+     successful returns.  This is even documented in
+     <https://www.ibm.com/support/knowledgecenter/ssw_aix_72/i_bostechref/iconv.html> */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 1;
+        iconv_close (cd_utf8_to_88591);
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\263";
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 2;
+        iconv_close (cd_ascii_to_88591);
+      }
+  }
+  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304";
+        static char buf[2] = { (char)0xDE, (char)0xAD };
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = 1;
+        char *outptr = buf;
+        size_t outbytesleft = 1;
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+          result |= 4;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          result |= 8;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  {
+    /* Try standardized names.  */
+    iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
+    /* Try IRIX, OSF/1 names.  */
+    iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
+    /* Try AIX names.  */
+    iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
+    /* Try HP-UX names.  */
+    iconv_t cd4 = iconv_open ("utf8", "eucJP");
+    if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
+        && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
+      result |= 16;
+    if (cd1 != (iconv_t)(-1))
+      iconv_close (cd1);
+    if (cd2 != (iconv_t)(-1))
+      iconv_close (cd2);
+    if (cd3 != (iconv_t)(-1))
+      iconv_close (cd3);
+    if (cd4 != (iconv_t)(-1))
+      iconv_close (cd4);
+  }
+  return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  am_cv_func_iconv_works=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+        test "$am_cv_func_iconv_works" = no || break
+      done
+      LIBS="$am_save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
+
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iconv is compatible with its POSIX signature" >&5
+$as_echo_n "checking whether iconv is compatible with its POSIX signature... " >&6; }
+if ${gl_cv_iconv_nonconst+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_iconv_nonconst=yes
+else
+  gl_cv_iconv_nonconst=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_iconv_nonconst" >&5
+$as_echo "$gl_cv_iconv_nonconst" >&6; }
+  else
+            gl_cv_iconv_nonconst=yes
+  fi
+  if test $gl_cv_iconv_nonconst = yes; then
+    iconv_arg1=""
+  else
+    iconv_arg1="const"
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $iconv_arg1
+_ACEOF
+
+
+
+      if test "$am_func_iconv" = yes; then
+    if test -n "$LIBICONV"; then
+      am_cv_func_iconv_summary='yes, in libiconv'
+    else
+      am_cv_func_iconv_summary='yes, in libc'
+    fi
+  else
+    if test "$am_cv_func_iconv" = yes; then
+      am_cv_func_iconv_summary='not working, consider installing GNU libiconv'
+    else
+      am_cv_func_iconv_summary='no, consider installing GNU libiconv'
+    fi
+  fi
+
+
+# GDB may fork/exec the iconv program to get the list of supported character
+# sets.  Allow the user to specify where to find it.
+# There are several factors affecting the choice of option name:
+# - There is already --with-libiconv-prefix but we can't use it, it specifies
+#   the build-time location of libiconv files.
+# - The program we need to find is iconv, which comes with glibc.  The user
+#   doesn't necessarily have libiconv installed.  Therefore naming this
+#   --with-libiconv-foo feels wrong.
+# - We want the path to be relocatable, but GDB_AC_DEFINE_RELOCATABLE is
+#   defined to work on directories not files (though it really doesn't know
+#   the difference).
+# - Calling this --with-iconv-prefix is perceived to cause too much confusion
+#   with --with-libiconv-prefix.
+# Putting these together is why the option name is --with-iconv-bin.
+
+
+# Check whether --with-iconv-bin was given.
+if test "${with_iconv_bin+set}" = set; then :
+  withval=$with_iconv_bin; iconv_bin="${withval}"
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_BIN "${iconv_bin}"
+_ACEOF
+
+
+  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
+     if test "x$prefix" = xNONE; then
+     	test_prefix=/usr/local
+     else
+	test_prefix=$prefix
+     fi
+  else
+     test_prefix=$exec_prefix
+  fi
+  value=0
+  case ${iconv_bin} in
+     "${test_prefix}"|"${test_prefix}/"*|\
+	'${exec_prefix}'|'${exec_prefix}/'*)
+     value=1
+     ;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_BIN_RELOCATABLE $value
+_ACEOF
+
+
+
+fi
+
+
+# For the TUI, we need enhanced curses functionality.
+if test x"$enable_tui" != xno; then
+  prefer_curses=yes
+fi
+
+curses_found=no
+if test x"$prefer_curses" = xyes; then
+  # FIXME: kettenis/20040905: We prefer ncurses over the vendor-supplied
+  # curses library because the latter might not provide all the
+  # functionality we need.  However, this leads to problems on systems
+  # where the linker searches /usr/local/lib, but the compiler doesn't
+  # search /usr/local/include, if ncurses is installed in /usr/local.  A
+  # default installation of ncurses on alpha*-dec-osf* will lead to such
+  # a situation.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing waddstr" >&5
+$as_echo_n "checking for library containing waddstr... " >&6; }
+if ${ac_cv_search_waddstr+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char waddstr ();
+int
+main ()
+{
+return waddstr ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' ncursesw ncurses cursesX curses; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_waddstr=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_waddstr+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_waddstr+:} false; then :
+
+else
+  ac_cv_search_waddstr=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_waddstr" >&5
+$as_echo "$ac_cv_search_waddstr" >&6; }
+ac_res=$ac_cv_search_waddstr
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  curses_found=yes
+
+$as_echo "#define HAVE_LIBCURSES 1" >>confdefs.h
+
+
+fi
+
+fi
+
+# Check whether we should enable the TUI, but only do so if we really
+# can.
+if test x"$enable_tui" != xno; then
+  if test "$curses_found" != no; then
+    CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_TUI_OBS)"
+    CONFIG_DEPS="$CONFIG_DEPS \$(SUBDIR_TUI_DEPS)"
+    CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_TUI_SRCS)"
+    ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_TUI_CFLAGS)"
+  else
+    if test x"$enable_tui" = xyes; then
+      as_fn_error $? "no enhanced curses library found; disable TUI" "$LINENO" 5
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no enhanced curses library found; disabling TUI" >&5
+$as_echo "$as_me: WARNING: no enhanced curses library found; disabling TUI" >&2;}
+    fi
+  fi
+fi
+
+# Since GDB uses Readline, we need termcap functionality.  In many
+# cases this will be provided by the curses library, but some systems
+# have a separate termcap library, or no curses library at all.
+
+case $host_os in
+  cygwin*)
+    if test -d "$srcdir/libtermcap"; then
+      LIBS="../libtermcap/libtermcap.a $LIBS"
+      ac_cv_search_tgetent="../libtermcap/libtermcap.a"
+    fi ;;
+  go32* | *djgpp*)
+    ac_cv_search_tgetent="none required"
+    ;;
+esac
+
+# These are the libraries checked by Readline.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
+$as_echo_n "checking for library containing tgetent... " >&6; }
+if ${ac_cv_search_tgetent+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char tgetent ();
+int
+main ()
+{
+return tgetent ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' termcap tinfow tinfo curses ncursesw ncurses; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_tgetent=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_tgetent+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_tgetent+:} false; then :
+
+else
+  ac_cv_search_tgetent=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_tgetent" >&5
+$as_echo "$ac_cv_search_tgetent" >&6; }
+ac_res=$ac_cv_search_tgetent
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+if test "$ac_cv_search_tgetent" = no; then
+  CONFIG_OBS="$CONFIG_OBS stub-termcap.o"
+fi
+
+
+# Check whether --with-system-readline was given.
+if test "${with_system_readline+set}" = set; then :
+  withval=$with_system_readline;
+fi
+
+
+if test "$with_system_readline" = yes; then
+  for ac_header in readline/readline.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "readline/readline.h" "ac_cv_header_readline_readline_h" "$ac_includes_default"
+if test "x$ac_cv_header_readline_readline_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_READLINE_READLINE_H 1
+_ACEOF
+ readline_h=yes
+else
+  readline_h=no
+fi
+
+done
+
+  if test "$readline_h" = "no"; then
+    as_fn_error $? "readline development packages are probably missing" "$LINENO" 5
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system readline is new enough" >&5
+$as_echo_n "checking whether system readline is new enough... " >&6; }
+if ${gdb_cv_readline_ok+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+	   #include <readline/readline.h>
+int
+main ()
+{
+#if RL_VERSION_MAJOR < 7
+	   # error "readline version 7 required"
+	   #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gdb_cv_readline_ok=yes
+else
+  gdb_cv_readline_ok=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_readline_ok" >&5
+$as_echo "$gdb_cv_readline_ok" >&6; }
+  if test "$gdb_cv_readline_ok" != yes; then
+    as_fn_error $? "system readline is not new enough" "$LINENO" 5
   fi
 
+  READLINE=-lreadline
+  READLINE_DEPS=
+  READLINE_CFLAGS=
+  READLINE_TEXI_INCFLAG=
+  READLINE_DOC_SOURCE_INCLUDES='$(READLINE_SYSTEM_DOC_INCLUDES)'
+else
+  READLINE='$(READLINE_DIR)/libreadline.a'
+  READLINE_DEPS='$(READLINE)'
+  READLINE_CFLAGS='-I$(READLINE_SRC)/..'
+  READLINE_TEXI_INCFLAG='-I $(READLINE_DIR)'
+  READLINE_DOC_SOURCE_INCLUDES='$(READLINE_INTREE_DOC_INCLUDES)'
+fi
+
+
+
+
+
+
+# Generate jit-reader.h
+
+# This is typedeffed to GDB_CORE_ADDR in jit-reader.h
+TARGET_PTR=
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
+$as_echo_n "checking size of unsigned long long... " >&6; }
+if ${ac_cv_sizeof_unsigned_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_long_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_long_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
+$as_echo_n "checking size of unsigned long... " >&6; }
+if ${ac_cv_sizeof_unsigned_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned __int128" >&5
+$as_echo_n "checking size of unsigned __int128... " >&6; }
+if ${ac_cv_sizeof_unsigned___int128+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned __int128))" "ac_cv_sizeof_unsigned___int128"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned___int128" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned __int128)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned___int128=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned___int128" >&5
+$as_echo "$ac_cv_sizeof_unsigned___int128" >&6; }
 
-        ac_save_CPPFLAGS="$CPPFLAGS"
 
-  for element in $INCEXPAT; do
-    haveit=
-    for x in $CPPFLAGS; do
 
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED___INT128 $ac_cv_sizeof_unsigned___int128
+_ACEOF
 
-      if test "X$x" = "X$element"; then
-        haveit=yes
-        break
-      fi
-    done
-    if test -z "$haveit"; then
-      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
-    fi
-  done
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5
-$as_echo_n "checking for libexpat... " >&6; }
-if ${ac_cv_libexpat+:} false; then :
-  $as_echo_n "(cached) " >&6
+if test "x${ac_cv_sizeof_unsigned_long}" = "x8"; then
+  TARGET_PTR="unsigned long"
+elif test "x${ac_cv_sizeof_unsigned_long_long}" = "x8"; then
+  TARGET_PTR="unsigned long long"
+elif test "x${ac_cv_sizeof_unsigned___int128}" = "x16"; then
+  TARGET_PTR="unsigned __int128"
 else
+  TARGET_PTR="unsigned long"
+fi
 
-    ac_save_LIBS="$LIBS"
-    LIBS="$LIBS $LIBEXPAT"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+ac_config_files="$ac_config_files jit-reader.h:jit-reader.in"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
+$as_echo_n "checking for library containing dlopen... " >&6; }
+if ${ac_cv_search_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include "expat.h"
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
 int
 main ()
 {
-XML_Parser p = XML_ParserCreate (0);
+return dlopen ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_libexpat=yes
-else
-  ac_cv_libexpat=no
+for ac_lib in '' dl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_dlopen=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LIBS="$ac_save_LIBS"
+    conftest$ac_exeext
+  if ${ac_cv_search_dlopen+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_dlopen+:} false; then :
 
+else
+  ac_cv_search_dlopen=no
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libexpat" >&5
-$as_echo "$ac_cv_libexpat" >&6; }
-  if test "$ac_cv_libexpat" = yes; then
-    HAVE_LIBEXPAT=yes
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
+$as_echo "$ac_cv_search_dlopen" >&6; }
+ac_res=$ac_cv_search_dlopen
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-$as_echo "#define HAVE_LIBEXPAT 1" >>confdefs.h
+fi
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libexpat" >&5
-$as_echo_n "checking how to link with libexpat... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBEXPAT" >&5
-$as_echo "$LIBEXPAT" >&6; }
-  else
-    HAVE_LIBEXPAT=no
-            CPPFLAGS="$ac_save_CPPFLAGS"
-    LIBEXPAT=
-    LTLIBEXPAT=
-  fi
 
 
 
+# Check whether --with-jit-reader-dir was given.
+if test "${with_jit_reader_dir+set}" = set; then :
+  withval=$with_jit_reader_dir;
+    JIT_READER_DIR=$withval
+else
+  JIT_READER_DIR=${libdir}/gdb
+fi
 
 
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $JIT_READER_DIR`
+  ac_define_dir=`eval echo $ac_define_dir`
 
-  if test "$HAVE_LIBEXPAT" != yes; then
-    if test "$with_expat" = yes; then
-      as_fn_error $? "expat is missing or unusable" "$LINENO" 5
-    else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: expat is missing or unusable; some features may be unavailable." >&5
-$as_echo "$as_me: WARNING: expat is missing or unusable; some features may be unavailable." >&2;}
-    fi
-  else
-    save_LIBS=$LIBS
-    LIBS="$LIBS $LIBEXPAT"
-    for ac_func in XML_StopParser
-do :
-  ac_fn_c_check_func "$LINENO" "XML_StopParser" "ac_cv_func_XML_StopParser"
-if test "x$ac_cv_func_XML_StopParser" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_XML_STOPPARSER 1
+cat >>confdefs.h <<_ACEOF
+#define JIT_READER_DIR "$ac_define_dir"
 _ACEOF
 
-fi
-done
 
-    LIBS=$save_LIBS
+
+
+  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
+     if test "x$prefix" = xNONE; then
+     	test_prefix=/usr/local
+     else
+	test_prefix=$prefix
+     fi
+  else
+     test_prefix=$exec_prefix
   fi
+  value=0
+  case ${ac_define_dir} in
+     "${test_prefix}"|"${test_prefix}/"*|\
+	'${exec_prefix}'|'${exec_prefix}/'*)
+     value=1
+     ;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define JIT_READER_DIR_RELOCATABLE $value
+_ACEOF
+
+
+
+
+
+# Check whether --with-expat was given.
+if test "${with_expat+set}" = set; then :
+  withval=$with_expat;
+else
+  with_expat=auto
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use expat" >&5
+$as_echo_n "checking whether to use expat... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_expat" >&5
+$as_echo "$with_expat" >&6; }
 
-# Check whether --with-mpfr was given.
-if test "${with_mpfr+set}" = set; then :
-  withval=$with_mpfr;
-else
-  with_mpfr=auto
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use MPFR" >&5
-$as_echo_n "checking whether to use MPFR... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_mpfr" >&5
-$as_echo "$with_mpfr" >&6; }
-
-if test "${with_mpfr}" = no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPFR support disabled; some features may be unavailable." >&5
-$as_echo "$as_me: WARNING: MPFR support disabled; some features may be unavailable." >&2;}
-  HAVE_LIBMPFR=no
+if test "${with_expat}" = no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: expat support disabled; some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: expat support disabled; some features may be unavailable." >&2;}
+  HAVE_LIBEXPAT=no
 else
 
 
@@ -9849,9 +27410,9 @@ else
   prefix="$acl_save_prefix"
 
 
-# Check whether --with-libmpfr-prefix was given.
-if test "${with_libmpfr_prefix+set}" = set; then :
-  withval=$with_libmpfr_prefix;
+# Check whether --with-libexpat-prefix was given.
+if test "${with_libexpat_prefix+set}" = set; then :
+  withval=$with_libexpat_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
     else
@@ -9876,13 +27437,23 @@ if test "${with_libmpfr_prefix+set}" = s
 
 fi
 
-      LIBMPFR=
-  LTLIBMPFR=
-  INCMPFR=
+
+# Check whether --with-libexpat-type was given.
+if test "${with_libexpat_type+set}" = set; then :
+  withval=$with_libexpat_type;  with_libexpat_type=$withval
+else
+   with_libexpat_type=auto
+fi
+
+  lib_type=`eval echo \$with_libexpat_type`
+
+      LIBEXPAT=
+  LTLIBEXPAT=
+  INCEXPAT=
   rpathdirs=
   ltrpathdirs=
   names_already_handled=
-  names_next_round='mpfr gmp'
+  names_next_round='expat '
   while test -n "$names_next_round"; do
     names_this_round="$names_next_round"
     names_next_round=
@@ -9901,9 +27472,9 @@ fi
         if test -n "$value"; then
           if test "$value" = yes; then
             eval value=\"\$LIB$uppername\"
-            test -z "$value" || LIBMPFR="${LIBMPFR}${LIBMPFR:+ }$value"
+            test -z "$value" || LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$value"
             eval value=\"\$LTLIB$uppername\"
-            test -z "$value" || LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }$value"
+            test -z "$value" || LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }$value"
           else
                                     :
           fi
@@ -9913,13 +27484,13 @@ fi
           found_so=
           found_a=
           if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
               found_dir="$additional_libdir"
               found_so="$additional_libdir/lib$name.$shlibext"
               if test -f "$additional_libdir/lib$name.la"; then
                 found_la="$additional_libdir/lib$name.la"
               fi
-            else
+            elif test x$lib_type != xshared; then
               if test -f "$additional_libdir/lib$name.$libext"; then
                 found_dir="$additional_libdir"
                 found_a="$additional_libdir/lib$name.$libext"
@@ -9930,7 +27501,7 @@ fi
             fi
           fi
           if test "X$found_dir" = "X"; then
-            for x in $LDFLAGS $LTLIBMPFR; do
+            for x in $LDFLAGS $LTLIBEXPAT; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -9943,13 +27514,13 @@ fi
               case "$x" in
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
                     found_dir="$dir"
                     found_so="$dir/lib$name.$shlibext"
                     if test -f "$dir/lib$name.la"; then
                       found_la="$dir/lib$name.la"
                     fi
-                  else
+                  elif test x$lib_type != xshared; then
                     if test -f "$dir/lib$name.$libext"; then
                       found_dir="$dir"
                       found_a="$dir/lib$name.$libext"
@@ -9966,10 +27537,10 @@ fi
             done
           fi
           if test "X$found_dir" != "X"; then
-                        LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }-L$found_dir -l$name"
+                        LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-L$found_dir -l$name"
             if test "X$found_so" != "X"; then
                                                         if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
-                                LIBMPFR="${LIBMPFR}${LIBMPFR:+ }$found_so"
+                                LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_so"
               else
                                                                                 haveit=
                 for x in $ltrpathdirs; do
@@ -9982,10 +27553,10 @@ fi
                   ltrpathdirs="$ltrpathdirs $found_dir"
                 fi
                                 if test "$hardcode_direct" = yes; then
-                                                      LIBMPFR="${LIBMPFR}${LIBMPFR:+ }$found_so"
+                                                      LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_so"
                 else
                   if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
-                                                            LIBMPFR="${LIBMPFR}${LIBMPFR:+ }$found_so"
+                                                            LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_so"
                                                             haveit=
                     for x in $rpathdirs; do
                       if test "X$x" = "X$found_dir"; then
@@ -9998,7 +27569,7 @@ fi
                     fi
                   else
                                                                                 haveit=
-                    for x in $LDFLAGS $LIBMPFR; do
+                    for x in $LDFLAGS $LIBEXPAT; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -10014,21 +27585,21 @@ fi
                       fi
                     done
                     if test -z "$haveit"; then
-                      LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-L$found_dir"
+                      LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-L$found_dir"
                     fi
                     if test "$hardcode_minus_L" != no; then
-                                                                                        LIBMPFR="${LIBMPFR}${LIBMPFR:+ }$found_so"
+                                                                                        LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_so"
                     else
-                                                                                                                                                                                LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-l$name"
+                                                                                                                                                                                LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-l$name"
                     fi
                   fi
                 fi
               fi
             else
               if test "X$found_a" != "X"; then
-                                LIBMPFR="${LIBMPFR}${LIBMPFR:+ }$found_a"
+                                LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$found_a"
               else
-                                                LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-L$found_dir -l$name"
+                                                LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-L$found_dir -l$name"
               fi
             fi
                         additional_includedir=
@@ -10049,7 +27620,7 @@ fi
                   fi
                 fi
                 if test -z "$haveit"; then
-                  for x in $CPPFLAGS $INCMPFR; do
+                  for x in $CPPFLAGS $INCEXPAT; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -10066,7 +27637,7 @@ fi
                   done
                   if test -z "$haveit"; then
                     if test -d "$additional_includedir"; then
-                                            INCMPFR="${INCMPFR}${INCMPFR:+ }-I$additional_includedir"
+                                            INCEXPAT="${INCEXPAT}${INCEXPAT:+ }-I$additional_includedir"
                     fi
                   fi
                 fi
@@ -10094,7 +27665,7 @@ fi
                       fi
                       if test -z "$haveit"; then
                         haveit=
-                        for x in $LDFLAGS $LIBMPFR; do
+                        for x in $LDFLAGS $LIBEXPAT; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -10111,11 +27682,11 @@ fi
                         done
                         if test -z "$haveit"; then
                           if test -d "$additional_libdir"; then
-                                                        LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-L$additional_libdir"
+                                                        LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-L$additional_libdir"
                           fi
                         fi
                         haveit=
-                        for x in $LDFLAGS $LTLIBMPFR; do
+                        for x in $LDFLAGS $LTLIBEXPAT; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -10132,7 +27703,7 @@ fi
                         done
                         if test -z "$haveit"; then
                           if test -d "$additional_libdir"; then
-                                                        LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }-L$additional_libdir"
+                                                        LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-L$additional_libdir"
                           fi
                         fi
                       fi
@@ -10170,15 +27741,20 @@ fi
                                                                                 names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
                     ;;
                   *)
-                                        LIBMPFR="${LIBMPFR}${LIBMPFR:+ }$dep"
-                    LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }$dep"
+                                        LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$dep"
+                    LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }$dep"
                     ;;
                 esac
               done
             fi
           else
-                                                            LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-l$name"
-            LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }-l$name"
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-l$name"
+              LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-l$name"
+            else
+              LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-l:lib$name.$libext"
+              LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-l:lib$name.$libext"
+            fi
           fi
         fi
       fi
@@ -10194,27 +27770,27 @@ fi
       libdir="$alldirs"
       eval flag=\"$hardcode_libdir_flag_spec\"
       libdir="$acl_save_libdir"
-      LIBMPFR="${LIBMPFR}${LIBMPFR:+ }$flag"
+      LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$flag"
     else
             for found_dir in $rpathdirs; do
         acl_save_libdir="$libdir"
         libdir="$found_dir"
         eval flag=\"$hardcode_libdir_flag_spec\"
         libdir="$acl_save_libdir"
-        LIBMPFR="${LIBMPFR}${LIBMPFR:+ }$flag"
+        LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }$flag"
       done
     fi
   fi
   if test "X$ltrpathdirs" != "X"; then
             for found_dir in $ltrpathdirs; do
-      LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }-R$found_dir"
+      LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-R$found_dir"
     done
   fi
 
 
         ac_save_CPPFLAGS="$CPPFLAGS"
 
-  for element in $INCMPFR; do
+  for element in $INCEXPAT; do
     haveit=
     for x in $CPPFLAGS; do
 
@@ -10237,52 +27813,51 @@ fi
   done
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libmpfr" >&5
-$as_echo_n "checking for libmpfr... " >&6; }
-if ${ac_cv_libmpfr+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5
+$as_echo_n "checking for libexpat... " >&6; }
+if ${ac_cv_libexpat+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
     ac_save_LIBS="$LIBS"
-    LIBS="$LIBS $LIBMPFR"
+    LIBS="$LIBS $LIBEXPAT"
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <mpfr.h>
+#include "expat.h"
 int
 main ()
 {
-mpfr_exp_t exp; mpfr_t x;
-			 mpfr_frexp (&exp, x, x, MPFR_RNDN);
+XML_Parser p = XML_ParserCreate (0);
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_libmpfr=yes
+  ac_cv_libexpat=yes
 else
-  ac_cv_libmpfr=no
+  ac_cv_libexpat=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
     LIBS="$ac_save_LIBS"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libmpfr" >&5
-$as_echo "$ac_cv_libmpfr" >&6; }
-  if test "$ac_cv_libmpfr" = yes; then
-    HAVE_LIBMPFR=yes
-
-$as_echo "#define HAVE_LIBMPFR 1" >>confdefs.h
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libmpfr" >&5
-$as_echo_n "checking how to link with libmpfr... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBMPFR" >&5
-$as_echo "$LIBMPFR" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libexpat" >&5
+$as_echo "$ac_cv_libexpat" >&6; }
+  if test "$ac_cv_libexpat" = yes; then
+    HAVE_LIBEXPAT=yes
+
+$as_echo "#define HAVE_LIBEXPAT 1" >>confdefs.h
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libexpat" >&5
+$as_echo_n "checking how to link with libexpat... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBEXPAT" >&5
+$as_echo "$LIBEXPAT" >&6; }
   else
-    HAVE_LIBMPFR=no
+    HAVE_LIBEXPAT=no
             CPPFLAGS="$ac_save_CPPFLAGS"
-    LIBMPFR=
-    LTLIBMPFR=
+    LIBEXPAT=
+    LTLIBEXPAT=
   fi
 
 
@@ -10290,16 +27865,34 @@ fi
 
 
 
-  if test "$HAVE_LIBMPFR" != yes; then
-    if test "$with_mpfr" = yes; then
-      as_fn_error $? "MPFR is missing or unusable" "$LINENO" 5
+  if test "$HAVE_LIBEXPAT" != yes; then
+    if test "$with_expat" = yes; then
+      as_fn_error $? "expat is missing or unusable" "$LINENO" 5
     else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPFR is missing or unusable; some features may be unavailable." >&5
-$as_echo "$as_me: WARNING: MPFR is missing or unusable; some features may be unavailable." >&2;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: expat is missing or unusable; some features may be unavailable." >&5
+$as_echo "$as_me: WARNING: expat is missing or unusable; some features may be unavailable." >&2;}
     fi
+  else
+    save_LIBS=$LIBS
+    LIBS="$LIBS $LIBEXPAT"
+    for ac_func in XML_StopParser
+do :
+  ac_fn_c_check_func "$LINENO" "XML_StopParser" "ac_cv_func_XML_StopParser"
+if test "x$ac_cv_func_XML_StopParser" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_XML_STOPPARSER 1
+_ACEOF
+
+fi
+done
+
+    LIBS=$save_LIBS
   fi
 fi
 
+
+
+
 # --------------------- #
 # Check for libpython.  #
 # --------------------- #
@@ -10328,7 +27921,7 @@ if test "${with_python}" = no; then
 else
   case "${with_python}" in
   [\\/]* | ?:[\\/]*)
-    if test -d ${with_python}; then
+    if test -d "${with_python}"; then
       # Assume the python binary is ${with_python}/bin/python.
       python_prog="${with_python}/bin/python"
       python_prefix=
@@ -10364,9 +27957,12 @@ else
     python_prefix=
     case "${with_python}" in
     yes | auto)
-      if test ${build} = ${host}; then
-        # Extract the first word of "python", so it can be a program name with args.
-set dummy python; ac_word=$2
+      if test "${build}" = "${host}"; then
+        # Look first for 'python', then 'python3'.
+        for ac_prog in python python3
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if ${ac_cv_path_python_prog_path+:} false; then :
@@ -10392,7 +27988,6 @@ done
   done
 IFS=$as_save_IFS
 
-  test -z "$ac_cv_path_python_prog_path" && ac_cv_path_python_prog_path="missing"
   ;;
 esac
 fi
@@ -10406,6 +28001,10 @@ else
 fi
 
 
+  test -n "$python_prog_path" && break
+done
+test -n "$python_prog_path" || python_prog_path="missing"
+
         if test "${python_prog_path}" = missing; then
           python_prog=missing
         else
@@ -10464,7 +28063,7 @@ fi
 
 
       if test "${python_prog_path}" = missing; then
-        as_fn_error $? "unable to find python program ${python_prog}" "$LINENO" 5
+	as_fn_error $? "unable to find python program ${python_prog}" "$LINENO" 5
       fi
       ;;
     esac
@@ -10478,21 +28077,21 @@ fi
     if test $? != 0; then
       have_python_config=failed
       if test "${with_python}" != auto; then
-        as_fn_error $? "failure running python-config --includes" "$LINENO" 5
+	as_fn_error $? "failure running python-config --includes" "$LINENO" 5
       fi
     fi
     python_libs=`${python_prog} ${srcdir}/python/python-config.py --ldflags`
     if test $? != 0; then
       have_python_config=failed
       if test "${with_python}" != auto; then
-        as_fn_error $? "failure running python-config --ldflags" "$LINENO" 5
+	as_fn_error $? "failure running python-config --ldflags" "$LINENO" 5
       fi
     fi
     python_prefix=`${python_prog} ${srcdir}/python/python-config.py --exec-prefix`
     if test $? != 0; then
       have_python_config=failed
       if test "${with_python}" != auto; then
-        as_fn_error $? "failure running python-config --exec-prefix" "$LINENO" 5
+	as_fn_error $? "failure running python-config --exec-prefix" "$LINENO" 5
       fi
     fi
   else
@@ -10529,81 +28128,12 @@ fi
 int
 main ()
 {
-Py_Initialize ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  have_libpython=yes
-                  found_usable_python=yes
-                  PYTHON_CPPFLAGS=$new_CPPFLAGS
-                  PYTHON_LIBS=$new_LIBS
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-  CPPFLAGS=$save_CPPFLAGS
-  LIBS=$save_LIBS
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_python}" >&5
-$as_echo "${found_usable_python}" >&6; }
-
-  elif test "${have_python_config}" != failed; then
-    if test "${have_libpython}" = no; then
-
-
-  new_CPPFLAGS=${python_includes}
-  new_LIBS="-lpython2.7 ${python_libs}"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python" >&5
-$as_echo_n "checking for python... " >&6; }
-  save_CPPFLAGS=$CPPFLAGS
-  save_LIBS=$LIBS
-  CPPFLAGS="$CPPFLAGS $new_CPPFLAGS"
-  LIBS="$new_LIBS $LIBS"
-  found_usable_python=no
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include "Python.h"
-int
-main ()
-{
-Py_Initialize ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  have_libpython=yes
-                  found_usable_python=yes
-                  PYTHON_CPPFLAGS=$new_CPPFLAGS
-                  PYTHON_LIBS=$new_LIBS
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-  CPPFLAGS=$save_CPPFLAGS
-  LIBS=$save_LIBS
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_python}" >&5
-$as_echo "${found_usable_python}" >&6; }
-
-    fi
-    if test "${have_libpython}" = no; then
 
+				    #if PY_MAJOR_VERSION != 3
+				    # error "We only support Python 3"
+				    #endif
+				    Py_Initialize ();
 
-  new_CPPFLAGS=${python_includes}
-  new_LIBS="-lpython2.6 ${python_libs}"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python" >&5
-$as_echo_n "checking for python... " >&6; }
-  save_CPPFLAGS=$CPPFLAGS
-  save_LIBS=$LIBS
-  CPPFLAGS="$CPPFLAGS $new_CPPFLAGS"
-  LIBS="$new_LIBS $LIBS"
-  found_usable_python=no
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include "Python.h"
-int
-main ()
-{
-Py_Initialize ();
   ;
   return 0;
 }
@@ -10621,7 +28151,6 @@ rm -f core conftest.err conftest.$ac_obj
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_python}" >&5
 $as_echo "${found_usable_python}" >&6; }
 
-    fi
   fi
 
   if test "${have_libpython}" = no; then
@@ -10671,6 +28200,21 @@ _ACEOF
   fi
 fi
 
+
+# Check whether --with-python-libdir was given.
+if test "${with_python_libdir+set}" = set; then :
+  withval=$with_python_libdir;
+else
+
+    # If no python libdir is specified then select one based on
+    # python's prefix path.
+    if test -n "${python_prefix}"; then
+      with_python_libdir=${python_prefix}/lib
+    fi
+
+fi
+
+
 if test "${have_libpython}" != no; then
 
 $as_echo "#define HAVE_PYTHON 1" >>confdefs.h
@@ -10681,6 +28225,37 @@ if test "${have_libpython}" != no; then
   CONFIG_INSTALL="$CONFIG_INSTALL install-python"
   ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_PYTHON_CFLAGS)"
 
+  if test -n "${with_python_libdir}"; then
+
+cat >>confdefs.h <<_ACEOF
+#define WITH_PYTHON_LIBDIR "${with_python_libdir}"
+_ACEOF
+
+
+  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
+     if test "x$prefix" = xNONE; then
+     	test_prefix=/usr/local
+     else
+	test_prefix=$prefix
+     fi
+  else
+     test_prefix=$exec_prefix
+  fi
+  value=0
+  case ${with_python_libdir} in
+     "${test_prefix}"|"${test_prefix}/"*|\
+	'${exec_prefix}'|'${exec_prefix}/'*)
+     value=1
+     ;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define PYTHON_LIBDIR_RELOCATABLE $value
+_ACEOF
+
+
+  fi
+
   # Flags needed to compile Python code (taken from python-config --cflags).
   # We cannot call python-config directly because it will output whatever was
   # used when compiling the Python interpreter itself, including flags which
@@ -10826,7 +28401,7 @@ fi
 
 
 
-try_guile_versions="guile-2.0"
+try_guile_versions="guile-3.0 guile-2.2 guile-2.0"
 have_libguile=no
 case "${with_guile}" in
 no)
@@ -11324,11 +28899,15 @@ SRCHIGH_CFLAGS=
 
 # Check whether --enable-source-highlight was given.
 if test "${enable_source_highlight+set}" = set; then :
-  enableval=$enable_source_highlight; case "${enableval}" in
-  yes)  enable_source_highlight=yes ;;
-  no)   enable_source_highlight=no  ;;
-  *)    as_fn_error $? "bad value ${enableval} for source-highlight option" "$LINENO" 5 ;;
-esac
+  enableval=$enable_source_highlight;
+	   case $enableval in
+	     yes | no | auto)
+	       ;;
+	     *)
+	       as_fn_error $? "bad value $enableval for --enable-source-highlight" "$LINENO" 5
+	       ;;
+	   esac
+
 else
   enable_source_highlight=auto
 fi
@@ -11344,581 +28923,91 @@ if test "${enable_source_highlight}" !=
       as_fn_error $? "pkg-config was not found in your system" "$LINENO" 5
     fi
   else
-    case "$LDFLAGS" in
-      *static-libstdc*)
-        as_fn_error $? "source highlight is incompatible with -static-libstdc++; either use --disable-source-highlight or --without-static-standard-libraries" "$LINENO" 5
-        ;;
-    esac
-
     if ${pkg_config_prog_path} --exists source-highlight; then
-      SRCHIGH_CFLAGS=`${pkg_config_prog_path} --cflags source-highlight`
-      SRCHIGH_LIBS=`${pkg_config_prog_path} --libs source-highlight`
-
-$as_echo "#define HAVE_SOURCE_HIGHLIGHT 1" >>confdefs.h
-
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      if test "${enable_source_highlight}" = "yes"; then
-        as_fn_error $? "source-highlight was not found in your system" "$LINENO" 5
-      fi
-    fi
-  fi
-fi
-
-
-
-
-# Check whether --with-intel_pt was given.
-if test "${with_intel_pt+set}" = set; then :
-  withval=$with_intel_pt;
-else
-  with_intel_pt=auto
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use intel pt" >&5
-$as_echo_n "checking whether to use intel pt... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_intel_pt" >&5
-$as_echo "$with_intel_pt" >&6; }
-
-if test "${with_intel_pt}" = no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&5
-$as_echo "$as_me: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&2;}
-  HAVE_LIBIPT=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <linux/perf_event.h>
-#ifndef PERF_ATTR_SIZE_VER5
-# error
-#endif
-
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  perf_event=yes
-else
-  perf_event=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-  if test "$perf_event" != yes; then
-    if test "$with_intel_pt" = yes; then
-      as_fn_error $? "linux/perf_event.h missing or too old" "$LINENO" 5
-    else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&5
-$as_echo "$as_me: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&2;}
-    fi
-  fi
-
-
-
-
-
-
-
-
-
-    use_additional=yes
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-
-    eval additional_includedir=\"$includedir\"
-    eval additional_libdir=\"$libdir\"
-
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-
-# Check whether --with-libipt-prefix was given.
-if test "${with_libipt_prefix+set}" = set; then :
-  withval=$with_libipt_prefix;
-    if test "X$withval" = "Xno"; then
-      use_additional=no
-    else
-      if test "X$withval" = "X"; then
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-
-          eval additional_includedir=\"$includedir\"
-          eval additional_libdir=\"$libdir\"
-
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-      else
-        additional_includedir="$withval/include"
-        additional_libdir="$withval/lib"
-      fi
-    fi
-
-fi
-
-      LIBIPT=
-  LTLIBIPT=
-  INCIPT=
-  rpathdirs=
-  ltrpathdirs=
-  names_already_handled=
-  names_next_round='ipt '
-  while test -n "$names_next_round"; do
-    names_this_round="$names_next_round"
-    names_next_round=
-    for name in $names_this_round; do
-      already_handled=
-      for n in $names_already_handled; do
-        if test "$n" = "$name"; then
-          already_handled=yes
-          break
-        fi
-      done
-      if test -z "$already_handled"; then
-        names_already_handled="$names_already_handled $name"
-                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
-        eval value=\"\$HAVE_LIB$uppername\"
-        if test -n "$value"; then
-          if test "$value" = yes; then
-            eval value=\"\$LIB$uppername\"
-            test -z "$value" || LIBIPT="${LIBIPT}${LIBIPT:+ }$value"
-            eval value=\"\$LTLIB$uppername\"
-            test -z "$value" || LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$value"
-          else
-                                    :
-          fi
-        else
-                              found_dir=
-          found_la=
-          found_so=
-          found_a=
-          if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
-              found_dir="$additional_libdir"
-              found_so="$additional_libdir/lib$name.$shlibext"
-              if test -f "$additional_libdir/lib$name.la"; then
-                found_la="$additional_libdir/lib$name.la"
-              fi
-            else
-              if test -f "$additional_libdir/lib$name.$libext"; then
-                found_dir="$additional_libdir"
-                found_a="$additional_libdir/lib$name.$libext"
-                if test -f "$additional_libdir/lib$name.la"; then
-                  found_la="$additional_libdir/lib$name.la"
-                fi
-              fi
-            fi
-          fi
-          if test "X$found_dir" = "X"; then
-            for x in $LDFLAGS $LTLIBIPT; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-              case "$x" in
-                -L*)
-                  dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
-                    found_dir="$dir"
-                    found_so="$dir/lib$name.$shlibext"
-                    if test -f "$dir/lib$name.la"; then
-                      found_la="$dir/lib$name.la"
-                    fi
-                  else
-                    if test -f "$dir/lib$name.$libext"; then
-                      found_dir="$dir"
-                      found_a="$dir/lib$name.$libext"
-                      if test -f "$dir/lib$name.la"; then
-                        found_la="$dir/lib$name.la"
-                      fi
-                    fi
-                  fi
-                  ;;
-              esac
-              if test "X$found_dir" != "X"; then
-                break
-              fi
-            done
-          fi
-          if test "X$found_dir" != "X"; then
-                        LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$found_dir -l$name"
-            if test "X$found_so" != "X"; then
-                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
-                                LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so"
-              else
-                                                                                haveit=
-                for x in $ltrpathdirs; do
-                  if test "X$x" = "X$found_dir"; then
-                    haveit=yes
-                    break
-                  fi
-                done
-                if test -z "$haveit"; then
-                  ltrpathdirs="$ltrpathdirs $found_dir"
-                fi
-                                if test "$hardcode_direct" = yes; then
-                                                      LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so"
-                else
-                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
-                                                            LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so"
-                                                            haveit=
-                    for x in $rpathdirs; do
-                      if test "X$x" = "X$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      rpathdirs="$rpathdirs $found_dir"
-                    fi
-                  else
-                                                                                haveit=
-                    for x in $LDFLAGS $LIBIPT; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                      if test "X$x" = "X-L$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir"
-                    fi
-                    if test "$hardcode_minus_L" != no; then
-                                                                                        LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so"
-                    else
-                                                                                                                                                                                LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name"
-                    fi
-                  fi
-                fi
-              fi
-            else
-              if test "X$found_a" != "X"; then
-                                LIBIPT="${LIBIPT}${LIBIPT:+ }$found_a"
-              else
-                                                LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir -l$name"
-              fi
-            fi
-                        additional_includedir=
-            case "$found_dir" in
-              */lib | */lib/)
-                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
-                additional_includedir="$basedir/include"
-                ;;
-            esac
-            if test "X$additional_includedir" != "X"; then
-                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
-                haveit=
-                if test "X$additional_includedir" = "X/usr/local/include"; then
-                  if test -n "$GCC"; then
-                    case $host_os in
-                      linux*) haveit=yes;;
-                    esac
-                  fi
-                fi
-                if test -z "$haveit"; then
-                  for x in $CPPFLAGS $INCIPT; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                    if test "X$x" = "X-I$additional_includedir"; then
-                      haveit=yes
-                      break
-                    fi
-                  done
-                  if test -z "$haveit"; then
-                    if test -d "$additional_includedir"; then
-                                            INCIPT="${INCIPT}${INCIPT:+ }-I$additional_includedir"
-                    fi
-                  fi
-                fi
-              fi
-            fi
-                        if test -n "$found_la"; then
-                                                        save_libdir="$libdir"
-              case "$found_la" in
-                */* | *\\*) . "$found_la" ;;
-                *) . "./$found_la" ;;
-              esac
-              libdir="$save_libdir"
-                            for dep in $dependency_libs; do
-                case "$dep" in
-                  -L*)
-                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                                                                                                                                                                if test "X$additional_libdir" != "X/usr/lib"; then
-                      haveit=
-                      if test "X$additional_libdir" = "X/usr/local/lib"; then
-                        if test -n "$GCC"; then
-                          case $host_os in
-                            linux*) haveit=yes;;
-                          esac
-                        fi
-                      fi
-                      if test -z "$haveit"; then
-                        haveit=
-                        for x in $LDFLAGS $LIBIPT; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LIBIPT="${LIBIPT}${LIBIPT:+ }-L$additional_libdir"
-                          fi
-                        fi
-                        haveit=
-                        for x in $LDFLAGS $LTLIBIPT; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$additional_libdir"
-                          fi
-                        fi
-                      fi
-                    fi
-                    ;;
-                  -R*)
-                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
-                    if test "$enable_rpath" != no; then
-                                                                  haveit=
-                      for x in $rpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        rpathdirs="$rpathdirs $dir"
-                      fi
-                                                                  haveit=
-                      for x in $ltrpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        ltrpathdirs="$ltrpathdirs $dir"
-                      fi
-                    fi
-                    ;;
-                  -l*)
-                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
-                    ;;
-                  *.la)
-                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
-                    ;;
-                  *)
-                                        LIBIPT="${LIBIPT}${LIBIPT:+ }$dep"
-                    LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$dep"
-                    ;;
-                esac
-              done
-            fi
-          else
-                                                            LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name"
-            LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l$name"
-          fi
-        fi
-      fi
-    done
-  done
-  if test "X$rpathdirs" != "X"; then
-    if test -n "$hardcode_libdir_separator"; then
-                        alldirs=
-      for found_dir in $rpathdirs; do
-        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
-      done
-            acl_save_libdir="$libdir"
-      libdir="$alldirs"
-      eval flag=\"$hardcode_libdir_flag_spec\"
-      libdir="$acl_save_libdir"
-      LIBIPT="${LIBIPT}${LIBIPT:+ }$flag"
-    else
-            for found_dir in $rpathdirs; do
-        acl_save_libdir="$libdir"
-        libdir="$found_dir"
-        eval flag=\"$hardcode_libdir_flag_spec\"
-        libdir="$acl_save_libdir"
-        LIBIPT="${LIBIPT}${LIBIPT:+ }$flag"
-      done
-    fi
-  fi
-  if test "X$ltrpathdirs" != "X"; then
-            for found_dir in $ltrpathdirs; do
-      LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-R$found_dir"
-    done
-  fi
-
-
-        ac_save_CPPFLAGS="$CPPFLAGS"
-
-  for element in $INCIPT; do
-    haveit=
-    for x in $CPPFLAGS; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-      if test "X$x" = "X$element"; then
-        haveit=yes
-        break
-      fi
-    done
-    if test -z "$haveit"; then
-      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
-    fi
-  done
+      case "$LDFLAGS" in
+        *static-libstdc*)
+          as_fn_error $? "source highlight is incompatible with -static-libstdc++; either use --disable-source-highlight or --without-static-standard-libraries" "$LINENO" 5
+          ;;
+      esac
 
+      srchigh_pkg_cflags=`${pkg_config_prog_path} --cflags source-highlight`
+      srchigh_pkg_libs=`${pkg_config_prog_path} --libs source-highlight`
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libipt" >&5
-$as_echo_n "checking for libipt... " >&6; }
-if ${ac_cv_libipt+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      # Now that we have found a source-highlight library, check if we can use
+      # it.  In particular, we're trying to detect the situation that the
+      # library is using the new libstdc++ library abi ( see
+      # https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html )
+      # while the compiler being used to compile gdb is using the old abi.
+      # Such a situation will result in an undefined reference to
+      # srchilite::SourceHighlight::SourceHighlight(std::string const&).
+      # This situation can occur for instance when using a source highlight
+      # library compiled with g++ 7.5.0 while building gdb with g++ 4.8.5.
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
-    ac_save_LIBS="$LIBS"
-    LIBS="$LIBS $LIBIPT"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+      save_CXXFLAGS="$CXXFLAGS"
+      save_LIBS="$LIBS"
+      CXXFLAGS="$CXXFLAGS $srchigh_pkg_cflags"
+      LIBS="$LIBS $srchigh_pkg_libs"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include "intel-pt.h"
+#include <srchilite/sourcehighlight.h>
 int
 main ()
 {
-pt_insn_alloc_decoder (0);
+std::string outlang = "esc.outlang";
+           new srchilite::SourceHighlight (outlang);
+
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_libipt=yes
+if ac_fn_cxx_try_link "$LINENO"; then :
+  have_usable_source_highlight=yes
 else
-  ac_cv_libipt=no
+  have_usable_source_highlight=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-    LIBS="$ac_save_LIBS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libipt" >&5
-$as_echo "$ac_cv_libipt" >&6; }
-  if test "$ac_cv_libipt" = yes; then
-    HAVE_LIBIPT=yes
-
-$as_echo "#define HAVE_LIBIPT 1" >>confdefs.h
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libipt" >&5
-$as_echo_n "checking how to link with libipt... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBIPT" >&5
-$as_echo "$LIBIPT" >&6; }
-  else
-    HAVE_LIBIPT=no
-            CPPFLAGS="$ac_save_CPPFLAGS"
-    LIBIPT=
-    LTLIBIPT=
-  fi
-
-
+      CXXFLAGS="$save_CXXFLAGS"
+      LIBS="$save_LIBS"
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
+      if test "${have_usable_source_highlight}" = "yes"; then
 
+$as_echo "#define HAVE_SOURCE_HIGHLIGHT 1" >>confdefs.h
 
-  if test "$HAVE_LIBIPT" != yes; then
-    if test "$with_intel_pt" = yes; then
-      as_fn_error $? "libipt is missing or unusable" "$LINENO" 5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+        SRCHIGH_CFLAGS="$srchigh_pkg_cflags"
+        SRCHIGH_LIBS="$srchigh_pkg_libs"
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+        if test "${enable_source_highlight}" = "yes"; then
+          as_fn_error $? "source-highlight in your system could not be used" "$LINENO" 5
+        fi
+      fi
     else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libipt is missing or unusable; some features may be unavailable." >&5
-$as_echo "$as_me: WARNING: libipt is missing or unusable; some features may be unavailable." >&2;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      if test "${enable_source_highlight}" = "yes"; then
+        as_fn_error $? "source-highlight was not found in your system" "$LINENO" 5
+      fi
     fi
-  else
-    save_LIBS=$LIBS
-    LIBS="$LIBS $LIBIPT"
-    for ac_func in pt_insn_event
-do :
-  ac_fn_c_check_func "$LINENO" "pt_insn_event" "ac_cv_func_pt_insn_event"
-if test "x$ac_cv_func_pt_insn_event" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_PT_INSN_EVENT 1
-_ACEOF
-
-fi
-done
-
-    ac_fn_c_check_member "$LINENO" "struct pt_insn" "enabled" "ac_cv_member_struct_pt_insn_enabled" "#include <intel-pt.h>
-"
-if test "x$ac_cv_member_struct_pt_insn_enabled" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_PT_INSN_ENABLED 1
-_ACEOF
-
-
+  fi
 fi
-ac_fn_c_check_member "$LINENO" "struct pt_insn" "resynced" "ac_cv_member_struct_pt_insn_resynced" "#include <intel-pt.h>
-"
-if test "x$ac_cv_member_struct_pt_insn_resynced" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_PT_INSN_RESYNCED 1
-_ACEOF
 
 
-fi
-
-    LIBS=$save_LIBS
-  fi
-fi
 
 # ------------------------- #
 # Checks for header files.  #
@@ -12037,11 +29126,11 @@ if test $ac_cv_header_stdc = yes; then
 fi
 
 # elf_hp.h is for HP/UX 64-bit shared library support.
-for ac_header in nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \
-                  thread_db.h linux/elf.h \
+for ac_header in nlist.h machine/reg.h \
+                  thread_db.h \
 		  sys/file.h sys/filio.h sys/ioctl.h sys/param.h \
-		  sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \
-		  sys/reg.h sys/debugreg.h sys/select.h \
+		  sys/procctl.h sys/resource.h sys/ptrace.h ptrace.h \
+		  sys/reg.h sys/debugreg.h \
 		  termios.h elf_hp.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -12102,66 +29191,47 @@ fi
 done
 
 
-# ------------------------- #
-# Checks for declarations.  #
-# ------------------------- #
+for ac_header in sys/socket.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_SOCKET_H 1
+_ACEOF
 
+fi
 
-  # Check for presence and size of long long.
-  ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default"
-if test "x$ac_cv_type_long_long" = xyes; then :
+done
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LONG_LONG 1
+for ac_header in ws2tcpip.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default"
+if test "x$ac_cv_header_ws2tcpip_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_WS2TCPIP_H 1
 _ACEOF
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_long_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long_long=0
-   fi
-fi
-
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
-
 
+done
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+for ac_header in execinfo.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "execinfo.h" "ac_cv_header_execinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_execinfo_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_EXECINFO_H 1
 _ACEOF
 
-
 fi
 
+done
 
-  as_ac_Symbol=`$as_echo "ac_cv_have_decl_basename(char *)" | $as_tr_sh`
-ac_fn_c_check_decl "$LINENO" "basename(char *)" "$as_ac_Symbol" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Symbol"\" = x"yes"; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_BASENAME $ac_have_decl
-_ACEOF
+# ------------------------- #
+# Checks for declarations.  #
+# ------------------------- #
+
 ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
 if test "x$ac_cv_have_decl_ffs" = xyes; then :
   ac_have_decl=1
@@ -12172,6 +29242,7 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FFS $ac_have_decl
 _ACEOF
+
 ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default"
 if test "x$ac_cv_have_decl_asprintf" = xyes; then :
   ac_have_decl=1
@@ -12182,6 +29253,7 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_ASPRINTF $ac_have_decl
 _ACEOF
+
 ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
 if test "x$ac_cv_have_decl_vasprintf" = xyes; then :
   ac_have_decl=1
@@ -12192,6 +29264,7 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_VASPRINTF $ac_have_decl
 _ACEOF
+
 ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default"
 if test "x$ac_cv_have_decl_snprintf" = xyes; then :
   ac_have_decl=1
@@ -12202,6 +29275,7 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_SNPRINTF $ac_have_decl
 _ACEOF
+
 ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default"
 if test "x$ac_cv_have_decl_vsnprintf" = xyes; then :
   ac_have_decl=1
@@ -12213,7 +29287,7 @@ cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_VSNPRINTF $ac_have_decl
 _ACEOF
 
-  ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default"
+ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default"
 if test "x$ac_cv_have_decl_strtol" = xyes; then :
   ac_have_decl=1
 else
@@ -12223,6 +29297,7 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRTOL $ac_have_decl
 _ACEOF
+
 ac_fn_c_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default"
 if test "x$ac_cv_have_decl_strtoul" = xyes; then :
   ac_have_decl=1
@@ -12233,6 +29308,7 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRTOUL $ac_have_decl
 _ACEOF
+
 ac_fn_c_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default"
 if test "x$ac_cv_have_decl_strtoll" = xyes; then :
   ac_have_decl=1
@@ -12243,6 +29319,7 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRTOLL $ac_have_decl
 _ACEOF
+
 ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default"
 if test "x$ac_cv_have_decl_strtoull" = xyes; then :
   ac_have_decl=1
@@ -12254,7 +29331,7 @@ cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRTOULL $ac_have_decl
 _ACEOF
 
-  ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default"
+ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default"
 if test "x$ac_cv_have_decl_strverscmp" = xyes; then :
   ac_have_decl=1
 else
@@ -12265,6 +29342,64 @@ cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRVERSCMP $ac_have_decl
 _ACEOF
 
+    ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default"
+if test "x$ac_cv_type_long_long" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LONG_LONG 1
+_ACEOF
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if ${ac_cv_sizeof_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
+
+fi
+
+
+  as_ac_Symbol=`$as_echo "ac_cv_have_decl_basename(char *)" | $as_tr_sh`
+ac_fn_c_check_decl "$LINENO" "basename(char *)" "$as_ac_Symbol" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Symbol"\" = x"yes"; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BASENAME $ac_have_decl
+_ACEOF
+
+
+
+
 
 
 ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default"
@@ -12312,36 +29447,16 @@ fi
   fi
 
 
-# ----------------------- #
-# Checks for structures.  #
-# ----------------------- #
-
-ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_BLOCKS 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
-_ACEOF
-
-
-fi
-
-
 # ------------------ #
 # Checks for types.  #
 # ------------------ #
 
 ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h>
-#include <sys/socket.h>
+#if HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#elif HAVE_WS2TCPIP_H
+# include <ws2tcpip.h>
+#endif
 
 "
 if test "x$ac_cv_type_socklen_t" = xyes; then :
@@ -12710,438 +29825,13 @@ fi
 # Checks for library functions.  #
 # ------------------------------ #
 
-
-
-
-  for ac_header in $ac_header_list
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-
-
-for ac_func in getpagesize
-do :
-  ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
-if test "x$ac_cv_func_getpagesize" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETPAGESIZE 1
-_ACEOF
-
-fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
-$as_echo_n "checking for working mmap... " >&6; }
-if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_mmap_fixed_mapped=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-/* malloc might have been renamed as rpl_malloc. */
-#undef malloc
-
-/* Thanks to Mike Haertel and Jim Avera for this test.
-   Here is a matrix of mmap possibilities:
-	mmap private not fixed
-	mmap private fixed at somewhere currently unmapped
-	mmap private fixed at somewhere already mapped
-	mmap shared not fixed
-	mmap shared fixed at somewhere currently unmapped
-	mmap shared fixed at somewhere already mapped
-   For private mappings, we should verify that changes cannot be read()
-   back from the file, nor mmap's back from the file at a different
-   address.  (There have been systems where private was not correctly
-   implemented like the infamous i386 svr4.0, and systems where the
-   VM page cache was not coherent with the file system buffer cache
-   like early versions of FreeBSD and possibly contemporary NetBSD.)
-   For shared mappings, we should conversely verify that changes get
-   propagated back to all the places they're supposed to be.
-
-   Grep wants private fixed already mapped.
-   The main things grep needs to know about mmap are:
-   * does it exist and is it safe to write into the mmap'd area
-   * how to use it (BSD variants)  */
-
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
-char *malloc ();
-#endif
-
-/* This mess was copied from the GNU getpagesize.h.  */
-#ifndef HAVE_GETPAGESIZE
-# ifdef _SC_PAGESIZE
-#  define getpagesize() sysconf(_SC_PAGESIZE)
-# else /* no _SC_PAGESIZE */
-#  ifdef HAVE_SYS_PARAM_H
-#   include <sys/param.h>
-#   ifdef EXEC_PAGESIZE
-#    define getpagesize() EXEC_PAGESIZE
-#   else /* no EXEC_PAGESIZE */
-#    ifdef NBPG
-#     define getpagesize() NBPG * CLSIZE
-#     ifndef CLSIZE
-#      define CLSIZE 1
-#     endif /* no CLSIZE */
-#    else /* no NBPG */
-#     ifdef NBPC
-#      define getpagesize() NBPC
-#     else /* no NBPC */
-#      ifdef PAGESIZE
-#       define getpagesize() PAGESIZE
-#      endif /* PAGESIZE */
-#     endif /* no NBPC */
-#    endif /* no NBPG */
-#   endif /* no EXEC_PAGESIZE */
-#  else /* no HAVE_SYS_PARAM_H */
-#   define getpagesize() 8192	/* punt totally */
-#  endif /* no HAVE_SYS_PARAM_H */
-# endif /* no _SC_PAGESIZE */
-
-#endif /* no HAVE_GETPAGESIZE */
-
-int
-main ()
-{
-  char *data, *data2, *data3;
-  const char *cdata2;
-  int i, pagesize;
-  int fd, fd2;
-
-  pagesize = getpagesize ();
-
-  /* First, make a file with some known garbage in it. */
-  data = (char *) malloc (pagesize);
-  if (!data)
-    return 1;
-  for (i = 0; i < pagesize; ++i)
-    *(data + i) = rand ();
-  umask (0);
-  fd = creat ("conftest.mmap", 0600);
-  if (fd < 0)
-    return 2;
-  if (write (fd, data, pagesize) != pagesize)
-    return 3;
-  close (fd);
-
-  /* Next, check that the tail of a page is zero-filled.  File must have
-     non-zero length, otherwise we risk SIGBUS for entire page.  */
-  fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
-  if (fd2 < 0)
-    return 4;
-  cdata2 = "";
-  if (write (fd2, cdata2, 1) != 1)
-    return 5;
-  data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
-  if (data2 == MAP_FAILED)
-    return 6;
-  for (i = 0; i < pagesize; ++i)
-    if (*(data2 + i))
-      return 7;
-  close (fd2);
-  if (munmap (data2, pagesize))
-    return 8;
-
-  /* Next, try to mmap the file at a fixed address which already has
-     something else allocated at it.  If we can, also make sure that
-     we see the same garbage.  */
-  fd = open ("conftest.mmap", O_RDWR);
-  if (fd < 0)
-    return 9;
-  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
-		     MAP_PRIVATE | MAP_FIXED, fd, 0L))
-    return 10;
-  for (i = 0; i < pagesize; ++i)
-    if (*(data + i) != *(data2 + i))
-      return 11;
-
-  /* Finally, make sure that changes to the mapped area do not
-     percolate back to the file as seen by read().  (This is a bug on
-     some variants of i386 svr4.0.)  */
-  for (i = 0; i < pagesize; ++i)
-    *(data2 + i) = *(data2 + i) + 1;
-  data3 = (char *) malloc (pagesize);
-  if (!data3)
-    return 12;
-  if (read (fd, data3, pagesize) != pagesize)
-    return 13;
-  for (i = 0; i < pagesize; ++i)
-    if (*(data + i) != *(data3 + i))
-      return 14;
-  close (fd);
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_mmap_fixed_mapped=yes
-else
-  ac_cv_func_mmap_fixed_mapped=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
-$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
-if test $ac_cv_func_mmap_fixed_mapped = yes; then
-
-$as_echo "#define HAVE_MMAP 1" >>confdefs.h
-
-fi
-rm -f conftest.mmap conftest.txt
-
-ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
-if test "x$ac_cv_type_pid_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
-_ACEOF
-
-fi
-
-for ac_header in vfork.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
-if test "x$ac_cv_header_vfork_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_VFORK_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_func in fork vfork
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test "x$ac_cv_func_fork" = xyes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
-$as_echo_n "checking for working fork... " >&6; }
-if ${ac_cv_func_fork_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_fork_works=cross
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-
-	  /* By Ruediger Kuhlmann. */
-	  return fork () < 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_fork_works=yes
-else
-  ac_cv_func_fork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
-$as_echo "$ac_cv_func_fork_works" >&6; }
-
-else
-  ac_cv_func_fork_works=$ac_cv_func_fork
-fi
-if test "x$ac_cv_func_fork_works" = xcross; then
-  case $host in
-    *-*-amigaos* | *-*-msdosdjgpp*)
-      # Override, as these systems have only a dummy fork() stub
-      ac_cv_func_fork_works=no
-      ;;
-    *)
-      ac_cv_func_fork_works=yes
-      ;;
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
-fi
-ac_cv_func_vfork_works=$ac_cv_func_vfork
-if test "x$ac_cv_func_vfork" = xyes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
-$as_echo_n "checking for working vfork... " >&6; }
-if ${ac_cv_func_vfork_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_vfork_works=cross
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Thanks to Paul Eggert for this test.  */
-$ac_includes_default
-#include <sys/wait.h>
-#ifdef HAVE_VFORK_H
-# include <vfork.h>
-#endif
-/* On some sparc systems, changes by the child to local and incoming
-   argument registers are propagated back to the parent.  The compiler
-   is told about this with #include <vfork.h>, but some compilers
-   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
-   static variable whose address is put into a register that is
-   clobbered by the vfork.  */
-static void
-#ifdef __cplusplus
-sparc_address_test (int arg)
-# else
-sparc_address_test (arg) int arg;
-#endif
-{
-  static pid_t child;
-  if (!child) {
-    child = vfork ();
-    if (child < 0) {
-      perror ("vfork");
-      _exit(2);
-    }
-    if (!child) {
-      arg = getpid();
-      write(-1, "", 0);
-      _exit (arg);
-    }
-  }
-}
-
-int
-main ()
-{
-  pid_t parent = getpid ();
-  pid_t child;
-
-  sparc_address_test (0);
-
-  child = vfork ();
-
-  if (child == 0) {
-    /* Here is another test for sparc vfork register problems.  This
-       test uses lots of local variables, at least as many local
-       variables as main has allocated so far including compiler
-       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
-       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
-       reuse the register of parent for one of the local variables,
-       since it will think that parent can't possibly be used any more
-       in this routine.  Assigning to the local variable will thus
-       munge parent in the parent process.  */
-    pid_t
-      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
-      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
-    /* Convince the compiler that p..p7 are live; otherwise, it might
-       use the same hardware register for all 8 local variables.  */
-    if (p != p1 || p != p2 || p != p3 || p != p4
-	|| p != p5 || p != p6 || p != p7)
-      _exit(1);
-
-    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
-       from child file descriptors.  If the child closes a descriptor
-       before it execs or exits, this munges the parent's descriptor
-       as well.  Test for this by closing stdout in the child.  */
-    _exit(close(fileno(stdout)) != 0);
-  } else {
-    int status;
-    struct stat st;
-
-    while (wait(&status) != child)
-      ;
-    return (
-	 /* Was there some problem with vforking?  */
-	 child < 0
-
-	 /* Did the child fail?  (This shouldn't happen.)  */
-	 || status
-
-	 /* Did the vfork/compiler bug occur?  */
-	 || parent != getpid()
-
-	 /* Did the file descriptor bug occur?  */
-	 || fstat(fileno(stdout), &st) != 0
-	 );
-  }
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_vfork_works=yes
-else
-  ac_cv_func_vfork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
-$as_echo "$ac_cv_func_vfork_works" >&6; }
-
-fi;
-if test "x$ac_cv_func_fork_works" = xcross; then
-  ac_cv_func_vfork_works=$ac_cv_func_vfork
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
-fi
-
-if test "x$ac_cv_func_vfork_works" = xyes; then
-
-$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
-
-else
-
-$as_echo "#define vfork fork" >>confdefs.h
-
-fi
-if test "x$ac_cv_func_fork_works" = xyes; then
-
-$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
-
-fi
-
-for ac_func in getauxval getrusage getuid getgid \
-		pipe poll pread pread64 pwrite resize_term \
-		sbrk getpgid setpgid setpgrp setsid \
-		sigaction sigsetmask socketpair \
-		ttrace wborder wresize setlocale iconvlist libiconvlist btowc \
+for ac_func in getuid getgid \
+		pread pread64 pwrite resize_term \
+		getpgid setsid \
+		sigsetmask \
+		ttrace wresize setlocale iconvlist libiconvlist btowc \
 		setrlimit getrlimit posix_madvise waitpid \
-		ptrace64 sigaltstack setns use_default_colors
+		use_default_colors
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -13187,1203 +29877,6 @@ fi
 
   fi
 
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
-     for ac_i in 1 2 3 4 5 6 7; do
-       ac_script="$ac_script$as_nl$ac_script"
-     done
-     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     { ac_script=; unset ac_script;}
-     if test -z "$SED"; then
-  ac_path_SED_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_SED" || continue
-# Check for GNU ac_path_SED and select it if it is found.
-  # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
-  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
-    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_SED_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_SED="$ac_path_SED"
-      ac_path_SED_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_SED_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_SED"; then
-    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
-  fi
-else
-  ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
-  rm -f conftest.sed
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-  # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
-# for constant arguments.  Useless!
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
-$as_echo_n "checking for working alloca.h... " >&6; }
-if ${ac_cv_working_alloca_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <alloca.h>
-int
-main ()
-{
-char *p = (char *) alloca (2 * sizeof (int));
-			  if (p) return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_working_alloca_h=yes
-else
-  ac_cv_working_alloca_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
-$as_echo "$ac_cv_working_alloca_h" >&6; }
-if test $ac_cv_working_alloca_h = yes; then
-
-$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
-$as_echo_n "checking for alloca... " >&6; }
-if ${ac_cv_func_alloca_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-#else
-# ifdef _MSC_VER
-#  include <malloc.h>
-#  define alloca _alloca
-# else
-#  ifdef HAVE_ALLOCA_H
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca /* predefined by HP cc +Olibcalls */
-void *alloca (size_t);
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-int
-main ()
-{
-char *p = (char *) alloca (1);
-				    if (p) return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_func_alloca_works=yes
-else
-  ac_cv_func_alloca_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
-$as_echo "$ac_cv_func_alloca_works" >&6; }
-
-if test $ac_cv_func_alloca_works = yes; then
-
-$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
-
-else
-  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
-# that cause trouble.  Some versions do not even contain alloca or
-# contain a buggy version.  If you still want to use their alloca,
-# use ar to extract alloca.o from them instead of compiling alloca.c.
-
-ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
-
-$as_echo "#define C_ALLOCA 1" >>confdefs.h
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
-$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
-if ${ac_cv_os_cray+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#if defined CRAY && ! defined CRAY2
-webecray
-#else
-wenotbecray
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "webecray" >/dev/null 2>&1; then :
-  ac_cv_os_cray=yes
-else
-  ac_cv_os_cray=no
-fi
-rm -f conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
-$as_echo "$ac_cv_os_cray" >&6; }
-if test $ac_cv_os_cray = yes; then
-  for ac_func in _getb67 GETB67 getb67; do
-    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
-
-    break
-fi
-
-  done
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
-$as_echo_n "checking stack direction for C alloca... " >&6; }
-if ${ac_cv_c_stack_direction+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_c_stack_direction=0
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-find_stack_direction (int *addr, int depth)
-{
-  int dir, dummy = 0;
-  if (! addr)
-    addr = &dummy;
-  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
-  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
-  return dir + dummy;
-}
-
-int
-main (int argc, char **argv)
-{
-  return find_stack_direction (0, argc + !argv + 20) < 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_c_stack_direction=1
-else
-  ac_cv_c_stack_direction=-1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
-$as_echo "$ac_cv_c_stack_direction" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-_ACEOF
-
-
-fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
-$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
-if ${am_cv_langinfo_codeset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <langinfo.h>
-int
-main ()
-{
-char* cs = nl_langinfo(CODESET);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_langinfo_codeset=yes
-else
-  am_cv_langinfo_codeset=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
-$as_echo "$am_cv_langinfo_codeset" >&6; }
-  if test $am_cv_langinfo_codeset = yes; then
-
-$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
-
-  fi
-
-
-  for ac_header in linux/perf_event.h locale.h memory.h signal.h 		   sys/resource.h sys/socket.h 		   sys/un.h sys/wait.h 		   thread_db.h wait.h 		   termios.h 		   dlfcn.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-  for ac_func in fdwalk getrlimit pipe pipe2 socketpair sigaction \
-		  sigprocmask
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-  ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strstr" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRSTR $ac_have_decl
-_ACEOF
-
-
-  # Check for std::thread.  This does not work on some platforms, like
-  # mingw and DJGPP.
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ax_pthread_ok=no
-
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on Tru64 or Sequent).
-# It gets checked for in the link test anyway.
-
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
-        ax_pthread_save_CC="$CC"
-        ax_pthread_save_CFLAGS="$CFLAGS"
-        ax_pthread_save_LIBS="$LIBS"
-        if test "x$PTHREAD_CC" != "x"; then :
-  CC="$PTHREAD_CC"
-fi
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5
-$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; }
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_join ();
-int
-main ()
-{
-return pthread_join ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_pthread_ok=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
-$as_echo "$ax_pthread_ok" >&6; }
-        if test "x$ax_pthread_ok" = "xno"; then
-                PTHREAD_LIBS=""
-                PTHREAD_CFLAGS=""
-        fi
-        CC="$ax_pthread_save_CC"
-        CFLAGS="$ax_pthread_save_CFLAGS"
-        LIBS="$ax_pthread_save_LIBS"
-fi
-
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try.  Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important.  Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-#       other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
-#           (Note: HP C rejects this with "bad form for `-t' option")
-# -pthreads: Solaris/gcc (Note: HP C also rejects)
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-#      doesn't hurt to check since this sometimes defines pthreads and
-#      -D_REENTRANT too), HP C (must be checked before -lpthread, which
-#      is present but should not be used directly; and before -mthreads,
-#      because the compiler interprets this as "-mt" + "-hreads")
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
-
-case $host_os in
-
-        freebsd*)
-
-        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-
-        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
-        ;;
-
-        hpux*)
-
-        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
-        # multi-threading and also sets -lpthread."
-
-        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
-        ;;
-
-        openedition*)
-
-        # IBM z/OS requires a feature-test macro to be defined in order to
-        # enable POSIX threads at all, so give the user a hint if this is
-        # not set. (We don't define these ourselves, as they can affect
-        # other portions of the system API in unpredictable ways.)
-
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
-             AX_PTHREAD_ZOS_MISSING
-#            endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
-$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
-fi
-rm -f conftest*
-
-        ;;
-
-        solaris*)
-
-        # On Solaris (at least, for some versions), libc contains stubbed
-        # (non-functional) versions of the pthreads routines, so link-based
-        # tests will erroneously succeed. (N.B.: The stubs are missing
-        # pthread_cleanup_push, or rather a function called by this macro,
-        # so we could check for that, but who knows whether they'll stub
-        # that too in a future libc.)  So we'll check first for the
-        # standard Solaris way of linking pthreads (-mt -lpthread).
-
-        ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
-        ;;
-esac
-
-# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
-
-if test "x$GCC" = "xyes"; then :
-  ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"
-fi
-
-# The presence of a feature test macro requesting re-entrant function
-# definitions is, on some systems, a strong hint that pthreads support is
-# correctly enabled
-
-case $host_os in
-        darwin* | hpux* | linux* | osf* | solaris*)
-        ax_pthread_check_macro="_REENTRANT"
-        ;;
-
-        aix*)
-        ax_pthread_check_macro="_THREAD_SAFE"
-        ;;
-
-        *)
-        ax_pthread_check_macro="--"
-        ;;
-esac
-if test "x$ax_pthread_check_macro" = "x--"; then :
-  ax_pthread_check_cond=0
-else
-  ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
-fi
-
-# Are we compiling with Clang?
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5
-$as_echo_n "checking whether $CC is Clang... " >&6; }
-if ${ax_cv_PTHREAD_CLANG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ax_cv_PTHREAD_CLANG=no
-     # Note that Autoconf sets GCC=yes for Clang as well as GCC
-     if test "x$GCC" = "xyes"; then
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
-#            if defined(__clang__) && defined(__llvm__)
-             AX_PTHREAD_CC_IS_CLANG
-#            endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then :
-  ax_cv_PTHREAD_CLANG=yes
-fi
-rm -f conftest*
-
-     fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
-$as_echo "$ax_cv_PTHREAD_CLANG" >&6; }
-ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
-
-ax_pthread_clang_warning=no
-
-# Clang needs special handling, because older versions handle the -pthread
-# option in a rather... idiosyncratic way
-
-if test "x$ax_pthread_clang" = "xyes"; then
-
-        # Clang takes -pthread; it has never supported any other flag
-
-        # (Note 1: This will need to be revisited if a system that Clang
-        # supports has POSIX threads in a separate library.  This tends not
-        # to be the way of modern systems, but it's conceivable.)
-
-        # (Note 2: On some systems, notably Darwin, -pthread is not needed
-        # to get POSIX threads support; the API is always present and
-        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
-        # -pthread does define _REENTRANT, and while the Darwin headers
-        # ignore this macro, third-party headers might not.)
-
-        PTHREAD_CFLAGS="-pthread"
-        PTHREAD_LIBS=
-
-        ax_pthread_ok=yes
-
-        # However, older versions of Clang make a point of warning the user
-        # that, in an invocation where only linking and no compilation is
-        # taking place, the -pthread option has no effect ("argument unused
-        # during compilation").  They expect -pthread to be passed in only
-        # when source code is being compiled.
-        #
-        # Problem is, this is at odds with the way Automake and most other
-        # C build frameworks function, which is that the same flags used in
-        # compilation (CFLAGS) are also used in linking.  Many systems
-        # supported by AX_PTHREAD require exactly this for POSIX threads
-        # support, and in fact it is often not straightforward to specify a
-        # flag that is used only in the compilation phase and not in
-        # linking.  Such a scenario is extremely rare in practice.
-        #
-        # Even though use of the -pthread flag in linking would only print
-        # a warning, this can be a nuisance for well-run software projects
-        # that build with -Werror.  So if the active version of Clang has
-        # this misfeature, we search for an option to squash it.
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5
-$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; }
-if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
-             # Create an alternate version of $ac_link that compiles and
-             # links in two steps (.c -> .o, .o -> exe) instead of one
-             # (.c -> exe), because the warning occurs only in the second
-             # step
-             ax_pthread_save_ac_link="$ac_link"
-             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
-             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
-             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
-             ax_pthread_save_CFLAGS="$CFLAGS"
-             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
-                if test "x$ax_pthread_try" = "xunknown"; then :
-  break
-fi
-                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
-                ac_link="$ax_pthread_save_ac_link"
-                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int main(void){return 0;}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_link="$ax_pthread_2step_ac_link"
-                     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int main(void){return 0;}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  break
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-             done
-             ac_link="$ax_pthread_save_ac_link"
-             CFLAGS="$ax_pthread_save_CFLAGS"
-             if test "x$ax_pthread_try" = "x"; then :
-  ax_pthread_try=no
-fi
-             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
-$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
-
-        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
-                no | unknown) ;;
-                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
-        esac
-
-fi # $ax_pthread_clang = yes
-
-if test "x$ax_pthread_ok" = "xno"; then
-for ax_pthread_try_flag in $ax_pthread_flags; do
-
-        case $ax_pthread_try_flag in
-                none)
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
-$as_echo_n "checking whether pthreads work without any flags... " >&6; }
-                ;;
-
-                -mt,pthread)
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5
-$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; }
-                PTHREAD_CFLAGS="-mt"
-                PTHREAD_LIBS="-lpthread"
-                ;;
-
-                -*)
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5
-$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; }
-                PTHREAD_CFLAGS="$ax_pthread_try_flag"
-                ;;
-
-                pthread-config)
-                # Extract the first word of "pthread-config", so it can be a program name with args.
-set dummy pthread-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ax_pthread_config+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ax_pthread_config"; then
-  ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ax_pthread_config="yes"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
-fi
-fi
-ax_pthread_config=$ac_cv_prog_ax_pthread_config
-if test -n "$ax_pthread_config"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
-$as_echo "$ax_pthread_config" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-                if test "x$ax_pthread_config" = "xno"; then :
-  continue
-fi
-                PTHREAD_CFLAGS="`pthread-config --cflags`"
-                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
-                ;;
-
-                *)
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5
-$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; }
-                PTHREAD_LIBS="-l$ax_pthread_try_flag"
-                ;;
-        esac
-
-        ax_pthread_save_CFLAGS="$CFLAGS"
-        ax_pthread_save_LIBS="$LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-
-        # Check for various functions.  We must include pthread.h,
-        # since some functions may be macros.  (On the Sequent, we
-        # need a special flag -Kthread to make this header compile.)
-        # We check for pthread_join because it is in -lpthread on IRIX
-        # while pthread_create is in libc.  We check for pthread_attr_init
-        # due to DEC craziness with -lpthreads.  We check for
-        # pthread_cleanup_push because it is one of the few pthread
-        # functions on Solaris that doesn't have a non-functional libc stub.
-        # We try pthread_create on general principles.
-
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <pthread.h>
-#                       if $ax_pthread_check_cond
-#                        error "$ax_pthread_check_macro must be defined"
-#                       endif
-                        static void routine(void *a) { a = 0; }
-                        static void *start_routine(void *a) { return a; }
-int
-main ()
-{
-pthread_t th; pthread_attr_t attr;
-                        pthread_create(&th, 0, start_routine, 0);
-                        pthread_join(th, 0);
-                        pthread_attr_init(&attr);
-                        pthread_cleanup_push(routine, 0);
-                        pthread_cleanup_pop(0) /* ; */
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_pthread_ok=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-        CFLAGS="$ax_pthread_save_CFLAGS"
-        LIBS="$ax_pthread_save_LIBS"
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
-$as_echo "$ax_pthread_ok" >&6; }
-        if test "x$ax_pthread_ok" = "xyes"; then :
-  break
-fi
-
-        PTHREAD_LIBS=""
-        PTHREAD_CFLAGS=""
-done
-fi
-
-# Various other checks:
-if test "x$ax_pthread_ok" = "xyes"; then
-        ax_pthread_save_CFLAGS="$CFLAGS"
-        ax_pthread_save_LIBS="$LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-
-        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
-$as_echo_n "checking for joinable pthread attribute... " >&6; }
-if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ax_cv_PTHREAD_JOINABLE_ATTR=unknown
-             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-                 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <pthread.h>
-int
-main ()
-{
-int attr = $ax_pthread_attr; return attr /* ; */
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-             done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
-$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
-        if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
-               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
-               test "x$ax_pthread_joinable_attr_defined" != "xyes"; then :
-
-cat >>confdefs.h <<_ACEOF
-#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR
-_ACEOF
-
-               ax_pthread_joinable_attr_defined=yes
-
-fi
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5
-$as_echo_n "checking whether more special flags are required for pthreads... " >&6; }
-if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ax_cv_PTHREAD_SPECIAL_FLAGS=no
-             case $host_os in
-             solaris*)
-             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
-             ;;
-             esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
-$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
-        if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
-               test "x$ax_pthread_special_flags_added" != "xyes"; then :
-  PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
-               ax_pthread_special_flags_added=yes
-fi
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
-$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
-if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <pthread.h>
-int
-main ()
-{
-int i = PTHREAD_PRIO_INHERIT;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_cv_PTHREAD_PRIO_INHERIT=yes
-else
-  ax_cv_PTHREAD_PRIO_INHERIT=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
-$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
-        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
-               test "x$ax_pthread_prio_inherit_defined" != "xyes"; then :
-
-$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
-
-               ax_pthread_prio_inherit_defined=yes
-
-fi
-
-        CFLAGS="$ax_pthread_save_CFLAGS"
-        LIBS="$ax_pthread_save_LIBS"
-
-        # More AIX lossage: compile with *_r variant
-        if test "x$GCC" != "xyes"; then
-            case $host_os in
-                aix*)
-                case "x/$CC" in #(
-  x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
-    #handle absolute path differently from PATH based program lookup
-                     case "x$CC" in #(
-  x/*) :
-    if as_fn_executable_p ${CC}_r; then :
-  PTHREAD_CC="${CC}_r"
-fi ;; #(
-  *) :
-    for ac_prog in ${CC}_r
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PTHREAD_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$PTHREAD_CC"; then
-  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_PTHREAD_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
-if test -n "$PTHREAD_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
-$as_echo "$PTHREAD_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$PTHREAD_CC" && break
-done
-test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
- ;;
-esac ;; #(
-  *) :
-     ;;
-esac
-                ;;
-            esac
-        fi
-fi
-
-test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
-
-
-
-
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test "x$ax_pthread_ok" = "xyes"; then
-        threads=yes
-        :
-else
-        ax_pthread_ok=no
-        threads=no
-fi
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-  if test "$threads" = "yes"; then
-    save_LIBS="$LIBS"
-    LIBS="$PTHREAD_LIBS $LIBS"
-    save_CXXFLAGS="$CXXFLAGS"
-    CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5
-$as_echo_n "checking for std::thread... " >&6; }
-if ${gdb_cv_cxx_std_thread+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <thread>
-      void callback() { }
-int
-main ()
-{
-std::thread t(callback);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  gdb_cv_cxx_std_thread=yes
-else
-  gdb_cv_cxx_std_thread=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5
-$as_echo "$gdb_cv_cxx_std_thread" >&6; }
-
-    # This check must be here, while LIBS includes any necessary
-    # threading library.
-    for ac_func in pthread_sigmask pthread_setname_np
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-    LIBS="$save_LIBS"
-    CXXFLAGS="$save_CXXFLAGS"
-  fi
-  if test $gdb_cv_cxx_std_thread = yes; then
-
-$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h
-
-  fi
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5
-$as_echo_n "checking for sigsetjmp... " >&6; }
-if ${gdb_cv_func_sigsetjmp+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <setjmp.h>
-
-int
-main ()
-{
-sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdb_cv_func_sigsetjmp=yes
-else
-  gdb_cv_func_sigsetjmp=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_sigsetjmp" >&5
-$as_echo "$gdb_cv_func_sigsetjmp" >&6; }
-if test $gdb_cv_func_sigsetjmp = yes; then
-
-$as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h
-
-fi
-
 
 # Check the return and argument types of ptrace.
 
@@ -14411,26 +29904,6 @@ gdb_ptrace_headers='
 # include <unistd.h>
 #endif
 '
-# There is no point in checking if we don't have a prototype.
-ac_fn_c_check_decl "$LINENO" "ptrace" "ac_cv_have_decl_ptrace" "$gdb_ptrace_headers
-"
-if test "x$ac_cv_have_decl_ptrace" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_PTRACE $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
-
-  : ${gdb_cv_func_ptrace_ret='int'}
-  : ${gdb_cv_func_ptrace_args='int,int,long,long'}
-
-fi
 
 # Check return type.  Varargs (used on GNU/Linux) conflict with the
 # empty argument list, so check for that explicitly.
@@ -14441,11 +29914,12 @@ if ${gdb_cv_func_ptrace_ret+:} false; th
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-$gdb_ptrace_headers
+Â $gdb_ptrace_headers
 int
 main ()
 {
 extern long ptrace (enum __ptrace_request, ...);
+
   ;
   return 0;
 }
@@ -14460,6 +29934,7 @@ int
 main ()
 {
 extern int ptrace ();
+
   ;
   return 0;
 }
@@ -14468,25 +29943,29 @@ if ac_fn_c_try_compile "$LINENO"; then :
   gdb_cv_func_ptrace_ret='int'
 else
   gdb_cv_func_ptrace_ret='long'
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_ret" >&5
 $as_echo "$gdb_cv_func_ptrace_ret" >&6; }
 
+
 cat >>confdefs.h <<_ACEOF
 #define PTRACE_TYPE_RET $gdb_cv_func_ptrace_ret
 _ACEOF
 
+
 # Check argument types.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for ptrace" >&5
 $as_echo_n "checking types of arguments for ptrace... " >&6; }
 if ${gdb_cv_func_ptrace_args+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $gdb_ptrace_headers
@@ -14494,6 +29973,7 @@ int
 main ()
 {
 extern long ptrace (enum __ptrace_request, ...);
+
   ;
   return 0;
 }
@@ -14501,20 +29981,17 @@ _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   gdb_cv_func_ptrace_args='enum __ptrace_request,int,long,long'
 else
-
-for gdb_arg1 in 'int' 'long'; do
- for gdb_arg2 in 'pid_t' 'int' 'long'; do
-  for gdb_arg3 in 'int *' 'caddr_t' 'int' 'long' 'void *'; do
-   for gdb_arg4 in 'int' 'long' 'void *'; do
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  for gdb_arg1 in 'int' 'long'; do
+	for gdb_arg2 in 'pid_t' 'int' 'long'; do
+	  for gdb_arg3 in 'int *' 'caddr_t' 'int' 'long' 'void *'; do
+	    for gdb_arg4 in 'int' 'long' 'void *'; do
+	      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $gdb_ptrace_headers
 int
 main ()
 {
-
-extern $gdb_cv_func_ptrace_ret
-  ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4);
+extern $gdb_cv_func_ptrace_ret ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4);
 
   ;
   return 0;
@@ -14522,43 +29999,45 @@ extern $gdb_cv_func_ptrace_ret
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4";
-    break 4;
+		 break 4;
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    for gdb_arg5 in 'int *' 'int' 'long'; do
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+	      for gdb_arg5 in 'int *' 'int' 'long'; do
+		cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $gdb_ptrace_headers
 int
 main ()
 {
-
-extern $gdb_cv_func_ptrace_ret
-  ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4, $gdb_arg5);
+extern $gdb_cv_func_ptrace_ret ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4, $gdb_arg5);
 
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
+  gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4,$gdb_arg5";
+		   break 5;
 
-gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4,$gdb_arg5";
-    break 5;
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    done
-   done
-  done
- done
-done
-# Provide a safe default value.
-: ${gdb_cv_func_ptrace_args='int,int,long,long'}
+	      done
+	    done
+	  done
+	done
+      done
+      # Provide a safe default value.
+      : ${gdb_cv_func_ptrace_args='int,int,long,long'}
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_args" >&5
 $as_echo "$gdb_cv_func_ptrace_args" >&6; }
+
 ac_save_IFS=$IFS; IFS=','
 set dummy `echo "$gdb_cv_func_ptrace_args" | sed 's/\*/\*/g'`
 IFS=$ac_save_IFS
@@ -14636,17 +30115,14 @@ if ${ac_cv_func_setpgrp_void+:} false; t
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
 #include <unistd.h>
-
 int
 main ()
 {
-
-  if (setpgrp(1,1) == -1)
-    exit (0);
-  else
-    exit (1);
+if (setpgrp(1,1) == -1)
+	     exit (0);
+	   else
+	     exit (1);
 
   ;
   return 0;
@@ -14656,68 +30132,19 @@ if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_func_setpgrp_void=no
 else
   ac_cv_func_setpgrp_void=yes
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_setpgrp_void" >&5
 $as_echo "$ac_cv_func_setpgrp_void" >&6; }
-if test $ac_cv_func_setpgrp_void = yes; then
+if test "$ac_cv_func_setpgrp_void" = yes; then
   $as_echo "#define SETPGRP_VOID 1" >>confdefs.h
 
 fi
 fi
 
-# Assume we'll default to using the included libiberty regex.
-gdb_use_included_regex=yes
-
-# However, if the system regex is GNU regex, then default to *not*
-# using the included regex.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5
-$as_echo_n "checking for GNU regex... " >&6; }
-if ${gdb_cv_have_gnu_regex+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <gnu-versions.h>
-int
-main ()
-{
-#define REGEX_INTERFACE_VERSION 1
-#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
-# error "Version mismatch"
-#endif
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdb_cv_have_gnu_regex=yes
-else
-  gdb_cv_have_gnu_regex=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5
-$as_echo "$gdb_cv_have_gnu_regex" >&6; }
-if test $gdb_cv_have_gnu_regex = yes; then
-  gdb_use_included_regex=no
-fi
-
-
-# Check whether --with-included-regex was given.
-if test "${with_included_regex+set}" = set; then :
-  withval=$with_included_regex; gdb_with_regex=$withval
-else
-  gdb_with_regex=$gdb_use_included_regex
-fi
-
-if test "$gdb_with_regex" = yes; then
-
-$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h
-
-fi
-
 # Check if <sys/proc.h> defines `struct thread' with a td_pcb member.
 ac_fn_c_check_member "$LINENO" "struct thread" "td_pcb" "ac_cv_member_struct_thread_td_pcb" "#include <sys/param.h>
 #include <sys/proc.h>
@@ -14742,12 +30169,13 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/param.h>
-#define _KMEMUSER
-#include <sys/lwp.h>
+	 #define _KMEMUSER
+	 #include <sys/lwp.h>
 int
 main ()
 {
 struct lwp l;
+
   ;
   return 0;
 }
@@ -14756,12 +30184,14 @@ if ac_fn_c_try_compile "$LINENO"; then :
   gdb_cv_struct_lwp=yes
 else
   gdb_cv_struct_lwp=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_struct_lwp" >&5
 $as_echo "$gdb_cv_struct_lwp" >&6; }
-if test $gdb_cv_struct_lwp = yes; then
+if test "$gdb_cv_struct_lwp" = yes; then
 
 $as_echo "#define HAVE_STRUCT_LWP 1" >>confdefs.h
 
@@ -14776,11 +30206,12 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#include <machine/reg.h>
+	 #include <machine/reg.h>
 int
 main ()
 {
 struct reg r;
+
   ;
   return 0;
 }
@@ -14789,12 +30220,14 @@ if ac_fn_c_try_compile "$LINENO"; then :
   gdb_cv_struct_reg=yes
 else
   gdb_cv_struct_reg=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_struct_reg" >&5
 $as_echo "$gdb_cv_struct_reg" >&6; }
-if test $gdb_cv_struct_reg = yes; then
+if test "$gdb_cv_struct_reg" = yes; then
 
 $as_echo "#define HAVE_STRUCT_REG 1" >>confdefs.h
 
@@ -14826,33 +30259,6 @@ _ACEOF
 fi
 
 
-# See if <sys/user.h> supports the %fs_base and %gs_bas amd64 segment registers.
-# Older amd64 Linux's don't have the fs_base and gs_base members of
-# `struct user_regs_struct'.
-ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "fs_base" "ac_cv_member_struct_user_regs_struct_fs_base" "#include <sys/types.h>
-#include <sys/user.h>
-"
-if test "x$ac_cv_member_struct_user_regs_struct_fs_base" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "gs_base" "ac_cv_member_struct_user_regs_struct_gs_base" "#include <sys/types.h>
-#include <sys/user.h>
-"
-if test "x$ac_cv_member_struct_user_regs_struct_gs_base" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE 1
-_ACEOF
-
-
-fi
-
-
 # See if <sys/ptrace.h> provides the PTRACE_GETREGS request.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETREGS" >&5
 $as_echo_n "checking for PTRACE_GETREGS... " >&6; }
@@ -14874,13 +30280,15 @@ if ac_fn_c_try_compile "$LINENO"; then :
   gdb_cv_have_ptrace_getregs=yes
 else
   gdb_cv_have_ptrace_getregs=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_ptrace_getregs" >&5
 $as_echo "$gdb_cv_have_ptrace_getregs" >&6; }
-if test $gdb_cv_have_ptrace_getregs = yes; then
+if test "$gdb_cv_have_ptrace_getregs" = yes; then
 
 $as_echo "#define HAVE_PTRACE_GETREGS 1" >>confdefs.h
 
@@ -14907,13 +30315,15 @@ if ac_fn_c_try_compile "$LINENO"; then :
   gdb_cv_have_ptrace_getfpxregs=yes
 else
   gdb_cv_have_ptrace_getfpxregs=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_ptrace_getfpxregs" >&5
 $as_echo "$gdb_cv_have_ptrace_getfpxregs" >&6; }
-if test $gdb_cv_have_ptrace_getfpxregs = yes; then
+if test "$gdb_cv_have_ptrace_getfpxregs" = yes; then
 
 $as_echo "#define HAVE_PTRACE_GETFPXREGS 1" >>confdefs.h
 
@@ -14928,11 +30338,12 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#include <sys/ptrace.h>
+	 #include <sys/ptrace.h>
 int
 main ()
 {
 PT_GETDBREGS;
+
   ;
   return 0;
 }
@@ -14941,52 +30352,20 @@ if ac_fn_c_try_compile "$LINENO"; then :
   gdb_cv_have_pt_getdbregs=yes
 else
   gdb_cv_have_pt_getdbregs=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_pt_getdbregs" >&5
 $as_echo "$gdb_cv_have_pt_getdbregs" >&6; }
-if test $gdb_cv_have_pt_getdbregs = yes; then
+if test "$gdb_cv_have_pt_getdbregs" = yes; then
 
 $as_echo "#define HAVE_PT_GETDBREGS 1" >>confdefs.h
 
 fi
 
-# See if <sys/ptrace.h> provides the PT_GETXMMREGS request.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PT_GETXMMREGS" >&5
-$as_echo_n "checking for PT_GETXMMREGS... " >&6; }
-if ${gdb_cv_have_pt_getxmmregs+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/ptrace.h>
-int
-main ()
-{
-PT_GETXMMREGS;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdb_cv_have_pt_getxmmregs=yes
-else
-  gdb_cv_have_pt_getxmmregs=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_pt_getxmmregs" >&5
-$as_echo "$gdb_cv_have_pt_getxmmregs" >&6; }
-if test $gdb_cv_have_pt_getxmmregs = yes; then
-
-$as_echo "#define HAVE_PT_GETXMMREGS 1" >>confdefs.h
-
-fi
-
 # See if <sys/ptrace.h> supports LWP names on FreeBSD
 # Older FreeBSD versions don't have the pl_tdname member of
 # `struct ptrace_lwpinfo'.
@@ -15017,305 +30396,6 @@ _ACEOF
 fi
 
 
-if test "$ac_cv_header_sys_procfs_h" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gregset_t in sys/procfs.h" >&5
-$as_echo_n "checking for gregset_t in sys/procfs.h... " >&6; }
- if ${bfd_cv_have_sys_procfs_type_gregset_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
-#include <sys/procfs.h>
-int
-main ()
-{
-gregset_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bfd_cv_have_sys_procfs_type_gregset_t=yes
-else
-  bfd_cv_have_sys_procfs_type_gregset_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $bfd_cv_have_sys_procfs_type_gregset_t = yes; then
-
-$as_echo "#define HAVE_GREGSET_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_gregset_t" >&5
-$as_echo "$bfd_cv_have_sys_procfs_type_gregset_t" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fpregset_t in sys/procfs.h" >&5
-$as_echo_n "checking for fpregset_t in sys/procfs.h... " >&6; }
- if ${bfd_cv_have_sys_procfs_type_fpregset_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
-#include <sys/procfs.h>
-int
-main ()
-{
-fpregset_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bfd_cv_have_sys_procfs_type_fpregset_t=yes
-else
-  bfd_cv_have_sys_procfs_type_fpregset_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $bfd_cv_have_sys_procfs_type_fpregset_t = yes; then
-
-$as_echo "#define HAVE_FPREGSET_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_fpregset_t" >&5
-$as_echo "$bfd_cv_have_sys_procfs_type_fpregset_t" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset_t in sys/procfs.h" >&5
-$as_echo_n "checking for prgregset_t in sys/procfs.h... " >&6; }
- if ${bfd_cv_have_sys_procfs_type_prgregset_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
-#include <sys/procfs.h>
-int
-main ()
-{
-prgregset_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bfd_cv_have_sys_procfs_type_prgregset_t=yes
-else
-  bfd_cv_have_sys_procfs_type_prgregset_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $bfd_cv_have_sys_procfs_type_prgregset_t = yes; then
-
-$as_echo "#define HAVE_PRGREGSET_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset_t" >&5
-$as_echo "$bfd_cv_have_sys_procfs_type_prgregset_t" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prfpregset_t in sys/procfs.h" >&5
-$as_echo_n "checking for prfpregset_t in sys/procfs.h... " >&6; }
- if ${bfd_cv_have_sys_procfs_type_prfpregset_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
-#include <sys/procfs.h>
-int
-main ()
-{
-prfpregset_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bfd_cv_have_sys_procfs_type_prfpregset_t=yes
-else
-  bfd_cv_have_sys_procfs_type_prfpregset_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $bfd_cv_have_sys_procfs_type_prfpregset_t = yes; then
-
-$as_echo "#define HAVE_PRFPREGSET_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prfpregset_t" >&5
-$as_echo "$bfd_cv_have_sys_procfs_type_prfpregset_t" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset32_t in sys/procfs.h" >&5
-$as_echo_n "checking for prgregset32_t in sys/procfs.h... " >&6; }
- if ${bfd_cv_have_sys_procfs_type_prgregset32_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
-#include <sys/procfs.h>
-int
-main ()
-{
-prgregset32_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bfd_cv_have_sys_procfs_type_prgregset32_t=yes
-else
-  bfd_cv_have_sys_procfs_type_prgregset32_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $bfd_cv_have_sys_procfs_type_prgregset32_t = yes; then
-
-$as_echo "#define HAVE_PRGREGSET32_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset32_t" >&5
-$as_echo "$bfd_cv_have_sys_procfs_type_prgregset32_t" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in sys/procfs.h" >&5
-$as_echo_n "checking for lwpid_t in sys/procfs.h... " >&6; }
- if ${bfd_cv_have_sys_procfs_type_lwpid_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
-#include <sys/procfs.h>
-int
-main ()
-{
-lwpid_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bfd_cv_have_sys_procfs_type_lwpid_t=yes
-else
-  bfd_cv_have_sys_procfs_type_lwpid_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $bfd_cv_have_sys_procfs_type_lwpid_t = yes; then
-
-$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpid_t" >&5
-$as_echo "$bfd_cv_have_sys_procfs_type_lwpid_t" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in sys/procfs.h" >&5
-$as_echo_n "checking for psaddr_t in sys/procfs.h... " >&6; }
- if ${bfd_cv_have_sys_procfs_type_psaddr_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
-#include <sys/procfs.h>
-int
-main ()
-{
-psaddr_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bfd_cv_have_sys_procfs_type_psaddr_t=yes
-else
-  bfd_cv_have_sys_procfs_type_psaddr_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $bfd_cv_have_sys_procfs_type_psaddr_t = yes; then
-
-$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psaddr_t" >&5
-$as_echo "$bfd_cv_have_sys_procfs_type_psaddr_t" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_fpregset_t in sys/procfs.h" >&5
-$as_echo_n "checking for elf_fpregset_t in sys/procfs.h... " >&6; }
- if ${bfd_cv_have_sys_procfs_type_elf_fpregset_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#define _SYSCALL32
-/* Needed for new procfs interface on sparc-solaris.  */
-#define _STRUCTURED_PROC 1
-#include <sys/procfs.h>
-int
-main ()
-{
-elf_fpregset_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bfd_cv_have_sys_procfs_type_elf_fpregset_t=yes
-else
-  bfd_cv_have_sys_procfs_type_elf_fpregset_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $bfd_cv_have_sys_procfs_type_elf_fpregset_t = yes; then
-
-$as_echo "#define HAVE_ELF_FPREGSET_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&5
-$as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; }
-
-fi
-
 # Check if the compiler supports the `long long' type.
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long support in compiler" >&5
@@ -15343,57 +30423,11 @@ rm -f core conftest.err conftest.$ac_obj
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_c_long_long" >&5
 $as_echo "$gdb_cv_c_long_long" >&6; }
-if test $gdb_cv_c_long_long != yes; then
+if test "$gdb_cv_c_long_long" != yes; then
   # libdecnumber requires long long.
   as_fn_error $? "Compiler must support long long for GDB." "$LINENO" 5
 fi
 
-# Check if the compiler and runtime support printing long longs.
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long support in printf" >&5
-$as_echo_n "checking for long long support in printf... " >&6; }
-if ${gdb_cv_printf_has_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  gdb_cv_printf_has_long_long=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-char buf[32];
-  long long l = 0;
-  l = (l << 16) + 0x0123;
-  l = (l << 16) + 0x4567;
-  l = (l << 16) + 0x89ab;
-  l = (l << 16) + 0xcdef;
-  sprintf (buf, "0x%016llx", l);
-  return (strcmp ("0x0123456789abcdef", buf));
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gdb_cv_printf_has_long_long=yes
-else
-  gdb_cv_printf_has_long_long=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_printf_has_long_long" >&5
-$as_echo "$gdb_cv_printf_has_long_long" >&6; }
-if test $gdb_cv_printf_has_long_long = yes; then
-
-$as_echo "#define PRINTF_HAS_LONG_LONG 1" >>confdefs.h
-
-fi
-
 # Check if the compiler and runtime support printing decfloats.
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for decfloat support in printf" >&5
@@ -15432,7 +30466,7 @@ fi
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_printf_has_decfloat" >&5
 $as_echo "$gdb_cv_printf_has_decfloat" >&6; }
-if test $gdb_cv_printf_has_decfloat = yes; then
+if test "$gdb_cv_printf_has_decfloat" = yes; then
 
 $as_echo "#define PRINTF_HAS_DECFLOAT 1" >>confdefs.h
 
@@ -15461,7 +30495,7 @@ rm -f core conftest.err conftest.$ac_obj
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_c_long_double" >&5
 $as_echo "$gdb_cv_c_long_double" >&6; }
-if test $gdb_cv_c_long_double = yes; then
+if test "$gdb_cv_c_long_double" = yes; then
 
 $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
 
@@ -15503,7 +30537,7 @@ fi
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_printf_has_long_double" >&5
 $as_echo "$gdb_cv_printf_has_long_double" >&6; }
-if test $gdb_cv_printf_has_long_double = yes; then
+if test "$gdb_cv_printf_has_long_double" = yes; then
 
 $as_echo "#define PRINTF_HAS_LONG_DOUBLE 1" >>confdefs.h
 
@@ -15545,7 +30579,7 @@ fi
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_scanf_has_long_double" >&5
 $as_echo "$gdb_cv_scanf_has_long_double" >&6; }
-if test $gdb_cv_scanf_has_long_double = yes; then
+if test "$gdb_cv_scanf_has_long_double" = yes; then
 
 $as_echo "#define SCANF_HAS_LONG_DOUBLE 1" >>confdefs.h
 
@@ -15558,16 +30592,15 @@ aix*)
 if ${gdb_cv_bigtoc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
+  SAVE_LDFLAGS=$LDFLAGS
 
-    SAVE_LDFLAGS=$LDFLAGS
-
-    case $GCC in
-    yes) gdb_cv_bigtoc=-Wl,-bbigtoc ;;
-    *) gdb_cv_bigtoc=-bbigtoc ;;
-    esac
+     case $GCC in
+       yes) gdb_cv_bigtoc=-Wl,-bbigtoc ;;
+       *) gdb_cv_bigtoc=-bbigtoc ;;
+     esac
 
-    LDFLAGS=$LDFLAGS\ $gdb_cv_bigtoc
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+     LDFLAGS=$LDFLAGS\ $gdb_cv_bigtoc
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -15582,10 +30615,11 @@ if ac_fn_c_try_link "$LINENO"; then :
 
 else
   gdb_cv_bigtoc=
+
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-    LDFLAGS="${SAVE_LDFLAGS}"
+     LDFLAGS="${SAVE_LDFLAGS}"
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_bigtoc" >&5
@@ -15650,7 +30684,7 @@ main ()
 {
 int err;
           Py_Initialize ();
-          err = PyRun_SimpleString ("import itertools\n");
+          err = PyRun_SimpleString ("import ctypes\n");
           Py_Finalize ();
           return err == 0 ? 0 : 1;
   ;
@@ -15681,8 +30715,47 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found" >&5
 $as_echo "$found" >&6; }
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether execinfo.h backtrace is available" >&5
+$as_echo_n "checking whether execinfo.h backtrace is available... " >&6; }
+if ${gdb_cv_execinfo_backtrace+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+         #include <execinfo.h>
+
+int
+main ()
+{
+
+         int f;
+         void *b[2];
+         f = backtrace (b, 2);
+         backtrace_symbols_fd (b, f, 2);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gdb_cv_execinfo_backtrace=yes
+else
+  gdb_cv_execinfo_backtrace=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_execinfo_backtrace" >&5
+$as_echo "$gdb_cv_execinfo_backtrace" >&6; }
+if test "$gdb_cv_execinfo_backtrace" = yes; then
+
+$as_echo "#define HAVE_EXECINFO_BACKTRACE 1" >>confdefs.h
+
+fi
 
-if test ${build} = ${host} -a ${host} = ${target} ; then
+
+if test "${build}" = "${host}" -a "${host}" = "${target}" ; then
    case ${host_os} in
    aix*)
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AiX thread debugging library" >&5
@@ -15697,8 +30770,9 @@ int
 main ()
 {
 #ifndef PTHDB_VERSION_3
-                                    #error
-                                    #endif
+	       #error
+	       #endif
+
   ;
   return 0;
 }
@@ -15707,13 +30781,15 @@ if ac_fn_c_try_compile "$LINENO"; then :
   gdb_cv_have_aix_thread_debug=yes
 else
   gdb_cv_have_aix_thread_debug=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_aix_thread_debug" >&5
 $as_echo "$gdb_cv_have_aix_thread_debug" >&6; }
-      if test $gdb_cv_have_aix_thread_debug = yes; then
+      if test "$gdb_cv_have_aix_thread_debug" = yes; then
          CONFIG_SRCS="${CONFIG_SRCS} aix-thread.c"
          CONFIG_OBS="${CONFIG_OBS} aix-thread.o"
          LIBS="$LIBS -lpthdebug"
@@ -15740,7 +30816,7 @@ _ACEOF
 fi
 
 if test "x$ac_cv_header_thread_db_h" = "xyes"; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <thread_db.h> has TD_NOTALLOC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <thread_db.h> has TD_NOTALLOC" >&5
 $as_echo_n "checking whether <thread_db.h> has TD_NOTALLOC... " >&6; }
 if ${gdb_cv_thread_db_h_has_td_notalloc+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15752,6 +30828,7 @@ int
 main ()
 {
 int i = TD_NOTALLOC;
+
   ;
   return 0;
 }
@@ -15767,7 +30844,8 @@ rm -f core conftest.err conftest.$ac_obj
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_thread_db_h_has_td_notalloc" >&5
 $as_echo "$gdb_cv_thread_db_h_has_td_notalloc" >&6; }
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <thread_db.h> has TD_VERSION" >&5
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <thread_db.h> has TD_VERSION" >&5
 $as_echo_n "checking whether <thread_db.h> has TD_VERSION... " >&6; }
 if ${gdb_cv_thread_db_h_has_td_version+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15779,6 +30857,7 @@ int
 main ()
 {
 int i = TD_VERSION;
+
   ;
   return 0;
 }
@@ -15794,7 +30873,8 @@ rm -f core conftest.err conftest.$ac_obj
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_thread_db_h_has_td_version" >&5
 $as_echo "$gdb_cv_thread_db_h_has_td_version" >&6; }
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <thread_db.h> has TD_NOTLS" >&5
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <thread_db.h> has TD_NOTLS" >&5
 $as_echo_n "checking whether <thread_db.h> has TD_NOTLS... " >&6; }
 if ${gdb_cv_thread_db_h_has_td_notls+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -15806,6 +30886,7 @@ int
 main ()
 {
 int i = TD_NOTLS;
+
   ;
   return 0;
 }
@@ -15838,80 +30919,6 @@ if test "x$gdb_cv_thread_db_h_has_td_not
 
 fi
 
-ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h>
-"
-if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl
-_ACEOF
-
-
-if test "$cross_compiling" = yes; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/personality.h>
-int
-main ()
-{
-
-#      if !HAVE_DECL_ADDR_NO_RANDOMIZE
-#       define ADDR_NO_RANDOMIZE 0x0040000
-#      endif
-       /* Test the flag could be set and stays set.  */
-       personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
-       if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
-	   return 1
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  have_personality=true
-else
-  have_personality=false
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/personality.h>
-int
-main ()
-{
-
-#      if !HAVE_DECL_ADDR_NO_RANDOMIZE
-#       define ADDR_NO_RANDOMIZE 0x0040000
-#      endif
-       /* Test the flag could be set and stays set.  */
-       personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
-       if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
-	   return 1
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  have_personality=true
-else
-  have_personality=false
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-if $have_personality
-then
-
-$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h
-
-fi
-
 case $host_os in
   go32* | *djgpp*)
     gdbinit=gdb.ini
@@ -15927,6 +30934,12 @@ _ACEOF
 
 
 
+cat >>confdefs.h <<_ACEOF
+#define GDBEARLYINIT ".gdbearlyinit"
+_ACEOF
+
+
+
 # Support for --with-sysroot is a copy of GDB_AC_WITH_DIR,
 # except that the argument to --with-sysroot is optional.
 # --with-sysroot (or --with-sysroot=yes) sets the default sysroot path.
@@ -16071,6 +31084,64 @@ _ACEOF
 
 
 
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking the compiler type" >&5
+$as_echo_n "checking the compiler type... " >&6; }
+if ${gdb_cv_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gdb_cv_compiler_type=unknown
+  if test "$gdb_cv_compiler_type" = unknown; then
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+                          #if !defined __GNUC__ || defined __clang__
+                          #error not gcc
+                          #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gdb_cv_compiler_type=gcc
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  fi
+
+  if test "$gdb_cv_compiler_type" = unknown; then
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+                          #ifndef __clang__
+                          #error not clang
+                          #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gdb_cv_compiler_type=clang
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_compiler_type" >&5
+$as_echo "$gdb_cv_compiler_type" >&6; }
+
+ GDB_COMPILER_TYPE="$gdb_cv_compiler_type"
+
+
 # Check whether --enable-werror was given.
 if test "${enable_werror+set}" = set; then :
   enableval=$enable_werror; case "${enableval}" in
@@ -16100,12 +31171,22 @@ build_warnings="-Wall -Wpointer-arith \
 -Wno-mismatched-tags \
 -Wno-error=deprecated-register \
 -Wsuggest-override \
--Wimplicit-fallthrough=3 \
+-Wimplicit-fallthrough=5 \
 -Wduplicated-cond \
 -Wshadow=local \
 -Wdeprecated-copy \
 -Wdeprecated-copy-dtor \
--Wredundant-move"
+-Wredundant-move \
+-Wmissing-declarations \
+-Wstrict-null-sentinel \
+"
+
+# The -Wmissing-prototypes flag will be accepted by GCC, but results
+# in a warning being printed about the flag not being valid for C++,
+# this is something to do with using ccache, and argument ordering.
+if test "$GDB_COMPILER_TYPE" != gcc; then
+  build_warnings="$build_warnings -Wmissing-prototypes"
+fi
 
 case "${host}" in
   *-*-mingw32*)
@@ -16202,13 +31283,14 @@ then
 	      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 struct scoped_restore_base {};
-                 struct scoped_restore_tmpl : public scoped_restore_base {
-		   ~scoped_restore_tmpl() {}
-		 };
+		    struct scoped_restore_tmpl : public scoped_restore_base {
+		      ~scoped_restore_tmpl() {}
+		    };
 int
 main ()
 {
 const scoped_restore_base &b = scoped_restore_tmpl();
+
   ;
   return 0;
 }
@@ -16290,6 +31372,7 @@ if ac_fn_cxx_try_link "$LINENO"; then :
   enable_ubsan=yes
 else
   enable_ubsan=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
@@ -16346,7 +31429,7 @@ esac
 
 # libreadline needs libuser32.a in a cygwin environment
 WIN32LIBS=
-if test x$gdb_cv_os_cygwin = xyes; then
+if test x"$gdb_cv_os_cygwin" = xyes; then
     WIN32LIBS="-luser32"
     case "${target}" in
 	*cygwin*) WIN32LIBS="$WIN32LIBS -limagehlp"
@@ -16355,29 +31438,24 @@ if test x$gdb_cv_os_cygwin = xyes; then
 fi
 
 # The ser-tcp.c module requires sockets.
-case ${host} in
-  *mingw32*)
-
-$as_echo "#define USE_WIN32API 1" >>confdefs.h
-
-    WIN32LIBS="$WIN32LIBS -lws2_32"
-    ;;
-esac
-
+# Note that WIN32APILIBS is set by GDB_AC_COMMON.
+WIN32LIBS="$WIN32LIBS $WIN32APILIBS"
 
 # Add ELF support to GDB, but only if BFD includes ELF support.
 
   OLD_CFLAGS=$CFLAGS
   OLD_LDFLAGS=$LDFLAGS
   OLD_LIBS=$LIBS
+  OLD_CC=$CC
   # Put the old CFLAGS/LDFLAGS last, in case the user's (C|LD)FLAGS
   # points somewhere with bfd, with -I/foo/lib and -L/foo/lib.  We
   # always want our bfd.
   CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
-  ZLIBDIR=`echo $zlibdir | sed 's,\$(top_builddir)/,,g'`
-  LDFLAGS="-L../bfd -L../libiberty $ZLIBDIR $LDFLAGS"
-  intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
-  LIBS="-lbfd -liberty -lz $intl $LIBS"
+  LDFLAGS="-L../bfd -L../libiberty $LDFLAGS"
+  # LTLIBINTL because we use libtool as CC below.
+  intl="$(echo "$LTLIBINTL" | sed 's,\$[{(]top_builddir[)}]/,,')"
+  LIBS="-lbfd -liberty $intl $LIBS"
+  CC="./libtool --quiet --mode=link $CC"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF support in BFD" >&5
 $as_echo_n "checking for ELF support in BFD... " >&6; }
 if ${gdb_cv_var_elf+:} false; then :
@@ -16386,13 +31464,14 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
-  #include "bfd.h"
-  #include "elf-bfd.h"
-
+	   #include <string.h>
+	   #include "bfd.h"
+	   #include "elf-bfd.h"
 int
 main ()
 {
 return bfd_get_elf_phdr_upper_bound (NULL);
+
   ;
   return 0;
 }
@@ -16401,17 +31480,21 @@ if ac_fn_c_try_link "$LINENO"; then :
   gdb_cv_var_elf=yes
 else
   gdb_cv_var_elf=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
+
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_elf" >&5
 $as_echo "$gdb_cv_var_elf" >&6; }
+  CC=$OLD_CC
   CFLAGS=$OLD_CFLAGS
   LDFLAGS=$OLD_LDFLAGS
   LIBS=$OLD_LIBS
-if test $gdb_cv_var_elf = yes; then
-  CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o dtrace-probe.o"
+if test "$gdb_cv_var_elf" = yes; then
+  CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o dtrace-probe.o \
+		gcore-elf.o elf-none-tdep.o"
 
 $as_echo "#define HAVE_ELF 1" >>confdefs.h
 
@@ -16481,14 +31564,16 @@ fi
   OLD_CFLAGS=$CFLAGS
   OLD_LDFLAGS=$LDFLAGS
   OLD_LIBS=$LIBS
+  OLD_CC=$CC
   # Put the old CFLAGS/LDFLAGS last, in case the user's (C|LD)FLAGS
   # points somewhere with bfd, with -I/foo/lib and -L/foo/lib.  We
   # always want our bfd.
   CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
-  ZLIBDIR=`echo $zlibdir | sed 's,\$(top_builddir)/,,g'`
-  LDFLAGS="-L../bfd -L../libiberty $ZLIBDIR $LDFLAGS"
-  intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
-  LIBS="-lbfd -liberty -lz $intl $LIBS"
+  LDFLAGS="-L../bfd -L../libiberty $LDFLAGS"
+  # LTLIBINTL because we use libtool as CC below.
+  intl="$(echo "$LTLIBINTL" | sed 's,\$[{(]top_builddir[)}]/,,')"
+  LIBS="-lbfd -liberty $intl $LIBS"
+  CC="./libtool --quiet --mode=link $CC"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mach-O support in BFD" >&5
 $as_echo_n "checking for Mach-O support in BFD... " >&6; }
 if ${gdb_cv_var_macho+:} false; then :
@@ -16497,13 +31582,14 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
-  #include "bfd.h"
-  #include "mach-o.h"
-
+	   #include <string.h>
+	   #include "bfd.h"
+	   #include "mach-o.h"
 int
 main ()
 {
 return bfd_mach_o_lookup_command (NULL, 0, NULL);
+
   ;
   return 0;
 }
@@ -16512,16 +31598,19 @@ if ac_fn_c_try_link "$LINENO"; then :
   gdb_cv_var_macho=yes
 else
   gdb_cv_var_macho=no
+
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
+
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_macho" >&5
 $as_echo "$gdb_cv_var_macho" >&6; }
+  CC=$OLD_CC
   CFLAGS=$OLD_CFLAGS
   LDFLAGS=$OLD_LDFLAGS
   LIBS=$OLD_LIBS
-if test $gdb_cv_var_macho = yes; then
+if test "$gdb_cv_var_macho" = yes; then
   CONFIG_OBS="$CONFIG_OBS machoread.o"
 fi
 
@@ -16529,7 +31618,7 @@ fi
 CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}"
 
 # If building on ELF, look for lzma support for embedded compressed debug info.
-if test $gdb_cv_var_elf = yes; then
+if test "$gdb_cv_var_elf" = yes; then
 
 # Check whether --with-lzma was given.
 if test "${with_lzma+set}" = set; then :
@@ -16593,6 +31682,16 @@ if test "${with_liblzma_prefix+set}" = s
 
 fi
 
+
+# Check whether --with-liblzma-type was given.
+if test "${with_liblzma_type+set}" = set; then :
+  withval=$with_liblzma_type;  with_liblzma_type=$withval
+else
+   with_liblzma_type=auto
+fi
+
+  lib_type=`eval echo \$with_liblzma_type`
+
       LIBLZMA=
   LTLIBLZMA=
   INCLZMA=
@@ -16630,13 +31729,13 @@ fi
           found_so=
           found_a=
           if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
               found_dir="$additional_libdir"
               found_so="$additional_libdir/lib$name.$shlibext"
               if test -f "$additional_libdir/lib$name.la"; then
                 found_la="$additional_libdir/lib$name.la"
               fi
-            else
+            elif test x$lib_type != xshared; then
               if test -f "$additional_libdir/lib$name.$libext"; then
                 found_dir="$additional_libdir"
                 found_a="$additional_libdir/lib$name.$libext"
@@ -16660,13 +31759,13 @@ fi
               case "$x" in
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
                     found_dir="$dir"
                     found_so="$dir/lib$name.$shlibext"
                     if test -f "$dir/lib$name.la"; then
                       found_la="$dir/lib$name.la"
                     fi
-                  else
+                  elif test x$lib_type != xshared; then
                     if test -f "$dir/lib$name.$libext"; then
                       found_dir="$dir"
                       found_a="$dir/lib$name.$libext"
@@ -16894,8 +31993,13 @@ fi
               done
             fi
           else
-                                                            LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-l$name"
-            LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-l$name"
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-l$name"
+              LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-l$name"
+            else
+              LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-l:lib$name.$libext"
+              LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-l:lib$name.$libext"
+            fi
           fi
         fi
       fi
@@ -17523,7 +32627,7 @@ fi
 	CONFIG_INSTALL="${CONFIG_INSTALL} install-gdbtk"
 	CONFIG_UNINSTALL="${CONFIG_UNINSTALL} uninstall-gdbtk"
 
-	if test x$gdb_cv_os_cygwin = xyes; then
+	if test x"$gdb_cv_os_cygwin" = xyes; then
 	  WIN32LIBS="${WIN32LIBS} -lshell32 -lgdi32 -lcomdlg32 -ladvapi32"
 	  WIN32LDAPP="-Wl,--subsystem,console"
 	  CONFIG_OBS="${CONFIG_OBS} gdbres.o"
@@ -17767,9 +32871,6 @@ if test "${ignore_sim}" = "false"; then
     SIM="${gdb_sim}"
     SIM_OBS="remote-sim.o"
 
-$as_echo "#define WITH_SIM 1" >>confdefs.h
-
-
     # Some tdep code should only be compiled in when the ppc sim is
     # built.  PR sim/13418.
     case $target in
@@ -17844,40 +32945,37 @@ _ACEOF
 
 fi
 
-# Check whether --enable-gdbserver was given.
-if test "${enable_gdbserver+set}" = set; then :
-  enableval=$enable_gdbserver; case "${enableval}" in
-  yes| no|auto) ;;
-  *) as_fn_error $? "bad value ${enableval} for --enable-gdbserver option" "$LINENO" 5 ;;
-esac
+# Setup possible use of libbacktrace.
+# Check whether --enable-libbacktrace was given.
+if test "${enable_libbacktrace+set}" = set; then :
+  enableval=$enable_libbacktrace;
+	   case $enableval in
+	     yes | no)
+	       ;;
+	     *)
+	       as_fn_error $? "bad value $enableval for --enable-libbacktrace" "$LINENO" 5
+	       ;;
+	   esac
+
 else
-  enable_gdbserver=auto
+  enable_libbacktrace=yes
 fi
 
 
-# We only build gdbserver automatically in a native configuration, and
-# only if the user did not explicitly disable its build.
-if test "$gdb_native" = "yes" -a "$enable_gdbserver" != "no"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gdbserver is supported on this host" >&5
-$as_echo_n "checking whether gdbserver is supported on this host... " >&6; }
-  if test "x$build_gdbserver" = xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    subdirs="$subdirs gdbserver"
+if test "${enable_libbacktrace}" = "yes"; then
+  LIBBACKTRACE_INC="-I$srcdir/../libbacktrace/ -I../libbacktrace/"
+  LIBBACKTRACE_LIB=../libbacktrace/libbacktrace.la
 
-    gdbserver_build_enabled=yes
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  fi
-fi
+$as_echo "#define HAVE_LIBBACKTRACE 1" >>confdefs.h
 
-# If the user explicitly request the gdbserver to be built, verify that
-# we were in fact able to enable it.
-if test "$enable_gdbserver" = "yes" -a "$gdbserver_build_enabled" != "yes"; then
-  as_fn_error $? "Automatic gdbserver build is not supported for this configuration" "$LINENO" 5
+else
+  LIBBACKTRACE_INC=
+  LIBBACKTRACE_LIB=
 fi
 
+
+
+
 # Check for babeltrace and babeltrace-ctf
 
 # Check whether --with-babeltrace was given.
@@ -17953,6 +33051,16 @@ if test "${with_libbabeltrace_prefix+set
 
 fi
 
+
+# Check whether --with-libbabeltrace-type was given.
+if test "${with_libbabeltrace_type+set}" = set; then :
+  withval=$with_libbabeltrace_type;  with_libbabeltrace_type=$withval
+else
+   with_libbabeltrace_type=auto
+fi
+
+  lib_type=`eval echo \$with_libbabeltrace_type`
+
       LIBBABELTRACE=
   LTLIBBABELTRACE=
   INCBABELTRACE=
@@ -17990,13 +33098,13 @@ fi
           found_so=
           found_a=
           if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then
               found_dir="$additional_libdir"
               found_so="$additional_libdir/lib$name.$shlibext"
               if test -f "$additional_libdir/lib$name.la"; then
                 found_la="$additional_libdir/lib$name.la"
               fi
-            else
+            elif test x$lib_type != xshared; then
               if test -f "$additional_libdir/lib$name.$libext"; then
                 found_dir="$additional_libdir"
                 found_a="$additional_libdir/lib$name.$libext"
@@ -18020,13 +33128,13 @@ fi
               case "$x" in
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then
                     found_dir="$dir"
                     found_so="$dir/lib$name.$shlibext"
                     if test -f "$dir/lib$name.la"; then
                       found_la="$dir/lib$name.la"
                     fi
-                  else
+                  elif test x$lib_type != xshared; then
                     if test -f "$dir/lib$name.$libext"; then
                       found_dir="$dir"
                       found_a="$dir/lib$name.$libext"
@@ -18254,8 +33362,13 @@ fi
               done
             fi
           else
-                                                            LIBBABELTRACE="${LIBBABELTRACE}${LIBBABELTRACE:+ }-l$name"
-            LTLIBBABELTRACE="${LTLIBBABELTRACE}${LTLIBBABELTRACE:+ }-l$name"
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBBABELTRACE="${LIBBABELTRACE}${LIBBABELTRACE:+ }-l$name"
+              LTLIBBABELTRACE="${LTLIBBABELTRACE}${LTLIBBABELTRACE:+ }-l$name"
+            else
+              LIBBABELTRACE="${LIBBABELTRACE}${LIBBABELTRACE:+ }-l:lib$name.$libext"
+              LTLIBBABELTRACE="${LTLIBBABELTRACE}${LTLIBBABELTRACE:+ }-l:lib$name.$libext"
+            fi
           fi
         fi
       fi
@@ -18389,494 +33502,34 @@ fi
   fi
 fi
 
-# Check for xxhash
+ # Check whether --enable-libctf was given.
+if test "${enable_libctf+set}" = set; then :
+  enableval=$enable_libctf;
+      case "$enableval" in
+       yes|no) ;;
+       *) as_fn_error $? "Argument to enable/disable libctf must be yes or no" "$LINENO" 5 ;;
+      esac
 
-# Check whether --with-xxhash was given.
-if test "${with_xxhash+set}" = set; then :
-  withval=$with_xxhash;
 else
-  with_xxhash=auto
-fi
-
-
-if test "x$with_xxhash" != "xno"; then
-
-
-
-
-
-
-
-
-    use_additional=yes
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-
-    eval additional_includedir=\"$includedir\"
-    eval additional_libdir=\"$libdir\"
-
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-
-# Check whether --with-libxxhash-prefix was given.
-if test "${with_libxxhash_prefix+set}" = set; then :
-  withval=$with_libxxhash_prefix;
-    if test "X$withval" = "Xno"; then
-      use_additional=no
-    else
-      if test "X$withval" = "X"; then
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-
-          eval additional_includedir=\"$includedir\"
-          eval additional_libdir=\"$libdir\"
-
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-      else
-        additional_includedir="$withval/include"
-        additional_libdir="$withval/lib"
-      fi
-    fi
-
+  enable_libctf=yes
 fi
 
-      LIBXXHASH=
-  LTLIBXXHASH=
-  INCXXHASH=
-  rpathdirs=
-  ltrpathdirs=
-  names_already_handled=
-  names_next_round='xxhash '
-  while test -n "$names_next_round"; do
-    names_this_round="$names_next_round"
-    names_next_round=
-    for name in $names_this_round; do
-      already_handled=
-      for n in $names_already_handled; do
-        if test "$n" = "$name"; then
-          already_handled=yes
-          break
-        fi
-      done
-      if test -z "$already_handled"; then
-        names_already_handled="$names_already_handled $name"
-                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
-        eval value=\"\$HAVE_LIB$uppername\"
-        if test -n "$value"; then
-          if test "$value" = yes; then
-            eval value=\"\$LIB$uppername\"
-            test -z "$value" || LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$value"
-            eval value=\"\$LTLIB$uppername\"
-            test -z "$value" || LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }$value"
-          else
-                                    :
-          fi
-        else
-                              found_dir=
-          found_la=
-          found_so=
-          found_a=
-          if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
-              found_dir="$additional_libdir"
-              found_so="$additional_libdir/lib$name.$shlibext"
-              if test -f "$additional_libdir/lib$name.la"; then
-                found_la="$additional_libdir/lib$name.la"
-              fi
-            else
-              if test -f "$additional_libdir/lib$name.$libext"; then
-                found_dir="$additional_libdir"
-                found_a="$additional_libdir/lib$name.$libext"
-                if test -f "$additional_libdir/lib$name.la"; then
-                  found_la="$additional_libdir/lib$name.la"
-                fi
-              fi
-            fi
-          fi
-          if test "X$found_dir" = "X"; then
-            for x in $LDFLAGS $LTLIBXXHASH; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-              case "$x" in
-                -L*)
-                  dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
-                    found_dir="$dir"
-                    found_so="$dir/lib$name.$shlibext"
-                    if test -f "$dir/lib$name.la"; then
-                      found_la="$dir/lib$name.la"
-                    fi
-                  else
-                    if test -f "$dir/lib$name.$libext"; then
-                      found_dir="$dir"
-                      found_a="$dir/lib$name.$libext"
-                      if test -f "$dir/lib$name.la"; then
-                        found_la="$dir/lib$name.la"
-                      fi
-                    fi
-                  fi
-                  ;;
-              esac
-              if test "X$found_dir" != "X"; then
-                break
-              fi
-            done
-          fi
-          if test "X$found_dir" != "X"; then
-                        LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-L$found_dir -l$name"
-            if test "X$found_so" != "X"; then
-                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
-                                LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_so"
-              else
-                                                                                haveit=
-                for x in $ltrpathdirs; do
-                  if test "X$x" = "X$found_dir"; then
-                    haveit=yes
-                    break
-                  fi
-                done
-                if test -z "$haveit"; then
-                  ltrpathdirs="$ltrpathdirs $found_dir"
-                fi
-                                if test "$hardcode_direct" = yes; then
-                                                      LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_so"
-                else
-                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
-                                                            LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_so"
-                                                            haveit=
-                    for x in $rpathdirs; do
-                      if test "X$x" = "X$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      rpathdirs="$rpathdirs $found_dir"
-                    fi
-                  else
-                                                                                haveit=
-                    for x in $LDFLAGS $LIBXXHASH; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                      if test "X$x" = "X-L$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-L$found_dir"
-                    fi
-                    if test "$hardcode_minus_L" != no; then
-                                                                                        LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_so"
-                    else
-                                                                                                                                                                                LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-l$name"
-                    fi
-                  fi
-                fi
-              fi
-            else
-              if test "X$found_a" != "X"; then
-                                LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$found_a"
-              else
-                                                LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-L$found_dir -l$name"
-              fi
-            fi
-                        additional_includedir=
-            case "$found_dir" in
-              */lib | */lib/)
-                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
-                additional_includedir="$basedir/include"
-                ;;
-            esac
-            if test "X$additional_includedir" != "X"; then
-                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
-                haveit=
-                if test "X$additional_includedir" = "X/usr/local/include"; then
-                  if test -n "$GCC"; then
-                    case $host_os in
-                      linux*) haveit=yes;;
-                    esac
-                  fi
-                fi
-                if test -z "$haveit"; then
-                  for x in $CPPFLAGS $INCXXHASH; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                    if test "X$x" = "X-I$additional_includedir"; then
-                      haveit=yes
-                      break
-                    fi
-                  done
-                  if test -z "$haveit"; then
-                    if test -d "$additional_includedir"; then
-                                            INCXXHASH="${INCXXHASH}${INCXXHASH:+ }-I$additional_includedir"
-                    fi
-                  fi
-                fi
-              fi
-            fi
-                        if test -n "$found_la"; then
-                                                        save_libdir="$libdir"
-              case "$found_la" in
-                */* | *\\*) . "$found_la" ;;
-                *) . "./$found_la" ;;
-              esac
-              libdir="$save_libdir"
-                            for dep in $dependency_libs; do
-                case "$dep" in
-                  -L*)
-                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                                                                                                                                                                if test "X$additional_libdir" != "X/usr/lib"; then
-                      haveit=
-                      if test "X$additional_libdir" = "X/usr/local/lib"; then
-                        if test -n "$GCC"; then
-                          case $host_os in
-                            linux*) haveit=yes;;
-                          esac
-                        fi
-                      fi
-                      if test -z "$haveit"; then
-                        haveit=
-                        for x in $LDFLAGS $LIBXXHASH; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-L$additional_libdir"
-                          fi
-                        fi
-                        haveit=
-                        for x in $LDFLAGS $LTLIBXXHASH; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-L$additional_libdir"
-                          fi
-                        fi
-                      fi
-                    fi
-                    ;;
-                  -R*)
-                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
-                    if test "$enable_rpath" != no; then
-                                                                  haveit=
-                      for x in $rpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        rpathdirs="$rpathdirs $dir"
-                      fi
-                                                                  haveit=
-                      for x in $ltrpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        ltrpathdirs="$ltrpathdirs $dir"
-                      fi
-                    fi
-                    ;;
-                  -l*)
-                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
-                    ;;
-                  *.la)
-                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
-                    ;;
-                  *)
-                                        LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$dep"
-                    LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }$dep"
-                    ;;
-                esac
-              done
-            fi
-          else
-                                                            LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-l$name"
-            LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-l$name"
-          fi
-        fi
-      fi
-    done
-  done
-  if test "X$rpathdirs" != "X"; then
-    if test -n "$hardcode_libdir_separator"; then
-                        alldirs=
-      for found_dir in $rpathdirs; do
-        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
-      done
-            acl_save_libdir="$libdir"
-      libdir="$alldirs"
-      eval flag=\"$hardcode_libdir_flag_spec\"
-      libdir="$acl_save_libdir"
-      LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$flag"
-    else
-            for found_dir in $rpathdirs; do
-        acl_save_libdir="$libdir"
-        libdir="$found_dir"
-        eval flag=\"$hardcode_libdir_flag_spec\"
-        libdir="$acl_save_libdir"
-        LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }$flag"
-      done
-    fi
-  fi
-  if test "X$ltrpathdirs" != "X"; then
-            for found_dir in $ltrpathdirs; do
-      LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-R$found_dir"
-    done
-  fi
-
-
-        ac_save_CPPFLAGS="$CPPFLAGS"
-
-  for element in $INCXXHASH; do
-    haveit=
-    for x in $CPPFLAGS; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-      if test "X$x" = "X$element"; then
-        haveit=yes
-        break
-      fi
-    done
-    if test -z "$haveit"; then
-      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
-    fi
-  done
-
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxxhash" >&5
-$as_echo_n "checking for libxxhash... " >&6; }
-if ${ac_cv_libxxhash+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test "${enable_libctf}" = yes; then
 
-    ac_save_LIBS="$LIBS"
-    LIBS="$LIBS $LIBXXHASH"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <xxhash.h>
-int
-main ()
-{
-XXH32("foo", 3, 0);
+$as_echo "#define ENABLE_LIBCTF 1" >>confdefs.h
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_libxxhash=yes
+  LIBCTF="../libctf/libctf.la"
+  CTF_DEPS="../libctf/libctf.la"
 else
-  ac_cv_libxxhash=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LIBS="$ac_save_LIBS"
-
+  LIBCTF=
+  CTF_DEPS=
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libxxhash" >&5
-$as_echo "$ac_cv_libxxhash" >&6; }
-  if test "$ac_cv_libxxhash" = yes; then
-    HAVE_LIBXXHASH=yes
-
-$as_echo "#define HAVE_LIBXXHASH 1" >>confdefs.h
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libxxhash" >&5
-$as_echo_n "checking how to link with libxxhash... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBXXHASH" >&5
-$as_echo "$LIBXXHASH" >&6; }
-  else
-    HAVE_LIBXXHASH=no
-            CPPFLAGS="$ac_save_CPPFLAGS"
-    LIBXXHASH=
-    LTLIBXXHASH=
-  fi
 
 
 
-
-
-
-  if test "$HAVE_LIBXXHASH" != yes; then
-    if test "$with_xxhash" = yes; then
-      as_fn_error $? "xxhash is missing or unusable" "$LINENO" 5
-    fi
-  fi
-  if test "x$with_xxhash" = "xauto"; then
-    with_xxhash="$HAVE_LIBXXHASH"
-  fi
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use xxhash" >&5
-$as_echo_n "checking whether to use xxhash... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xxhash" >&5
-$as_echo "$with_xxhash" >&6; }
+# If nativefile (NAT_FILE) is not set in configure.nat, we link to an
+# empty version.
 
 NM_H=
 rm -f nm.h
@@ -18962,7 +33615,13 @@ fi
 #
 # The default value of this option changes depending whether we're on
 # development mode (in which case it's "true") or not (in which case
-# it's "false").
+# it's "false").  The $development variable is set by the GDB_AC_COMMON
+# macro, which must therefore be used before GDB_AC_SELFTEST.
+
+if test "x$development" != xtrue && test "x$development" != xfalse; then :
+  as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5
+fi
+
 # Check whether --enable-unit-tests was given.
 if test "${enable_unit_tests+set}" = set; then :
   enableval=$enable_unit_tests; case "${enableval}" in
@@ -18980,8 +33639,8 @@ if $enable_unittests; then
 $as_echo "#define GDB_SELF_TEST 1" >>confdefs.h
 
 
-  CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) gdbsupport/selftest.o selftest-arch.o"
-  CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) gdbsupport/selftest.c selftest-arch.c"
+  CONFIG_OBS="$CONFIG_OBS \$(SELFTESTS_OBS)"
+  CONFIG_SRCS="$CONFIG_SRCS \$(SELFTESTS_SRCS)"
 
 fi
 
@@ -19120,6 +33779,10 @@ if test -z "${MAINTAINER_MODE_TRUE}" &&
   as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${ENABLE_BFD_64_BIT_TRUE}" && test -z "${ENABLE_BFD_64_BIT_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_BFD_64_BIT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_PYTHON\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -19714,7 +34377,375 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_writ
 #
 # INIT-COMMANDS
 #
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "$fix_srcfile_path_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+ac_aux_dir='$ac_aux_dir'
+
+
 ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+    # from automake.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+
 GDB_NM_FILE=$GDB_NM_FILE
 
 _ACEOF
@@ -19726,7 +34757,9 @@ for ac_config_target in $ac_config_targe
 do
   case $ac_config_target in
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;;
+    "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
     "jit-reader.h") CONFIG_FILES="$CONFIG_FILES jit-reader.h:jit-reader.in" ;;
     "nm.h") CONFIG_LINKS="$CONFIG_LINKS nm.h:$GDB_NM_FILE" ;;
     "gcore") CONFIG_FILES="$CONFIG_FILES gcore" ;;
@@ -20362,7 +35395,918 @@ which seems to be undefined.  Please mak
 
   case $ac_file$ac_mode in
     "config.h":H) echo > stamp-h ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
     "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;;
+    "default-1":C)
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.ac is obsolete" || echo "setting ALL_LINGUAS in configure.ac is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.ac.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          GMOFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done ;;
     "nm.h":L) echo > stamp-nmh ;;
     "gcore":F) chmod +x gcore ;;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure.ac ./gdb/configure.ac
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure.ac	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/configure.ac	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 dnl Autoconf configure script for GDB, the GNU debugger.
-dnl Copyright (C) 1995-2019 Free Software Foundation, Inc.
+dnl Copyright (C) 1995-2024 Free Software Foundation, Inc.
 dnl
 dnl This file is part of GDB.
 dnl
@@ -18,33 +18,56 @@ dnl along with this program.  If not, se
 
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT(main.c)
+AC_INIT
+AC_CONFIG_MACRO_DIRS([.. ../config])
+AC_CONFIG_SRCDIR([main.c])
 AC_CONFIG_HEADERS(config.h:config.in, [echo > stamp-h])
 AM_MAINTAINER_MODE
 
-# Set the 'development' global.
-. $srcdir/../bfd/development.sh
-
 AC_PROG_CC
 AC_PROG_CXX
 
 AC_USE_SYSTEM_EXTENSIONS
 ACX_LARGEFILE
-AM_PROG_CC_STDC
 AM_PROG_INSTALL_STRIP
 
 AC_CONFIG_AUX_DIR(..)
-AC_CANONICAL_SYSTEM
+
+# Set build, build_cpu, build_vendor and build_os.
+AC_CANONICAL_BUILD
+
+# Set host, host_cpu, host_vendor, and host_os.
+AC_CANONICAL_HOST
+
+# Set target, target_cpu, target_vendor, and target_os.
+AC_CANONICAL_TARGET
+
+ACX_NONCANONICAL_TARGET
+
 AC_ARG_PROGRAM
 
-# We require a C++11 compiler.  Check if one is available, and if
+# We require libtool to link with the in-tree libtool libraries
+# the proper way.
+LT_INIT
+# ... and we need it soon, since it is used by some of the
+# link tests in the configure script.
+LT_OUTPUT
+
+# We require a C++17 compiler.  Check if one is available, and if
 # necessary, set CXX_DIALECT to some -std=xxx switch.
-AX_CXX_COMPILE_STDCXX(11, , mandatory)
+AX_CXX_COMPILE_STDCXX(17, , mandatory)
+
+GDB_AC_COMMON
 
 # Dependency checking.
 ZW_CREATE_DEPDIR
 ZW_PROG_COMPILER_DEPENDENCIES([CC])
 
+# Since the first call to PKG_CHECK_MODULES may not happen (is guarded by
+# a condition), we must call PKG_PROG_PKG_CONFIG explicitly to probe for
+# pkg-config.
+PKG_PROG_PKG_CONFIG
+
 dnl List of object files and targets accumulated by configure.
 
 CONFIG_OBS=
@@ -98,6 +121,14 @@ GDB_AC_WITH_DIR(DEBUGDIR, separate-debug
     [look for global separate debug info in this path @<:@LIBDIR/debug@:>@],
     [${libdir}/debug])
 
+AC_ARG_WITH(additional-debug-dirs,
+	    AS_HELP_STRING([--with-additional-debug-dirs=PATHs],
+			   [colon-separated list of additional directories to
+			    search for separate debug info]),
+	    [AC_DEFINE_UNQUOTED(ADDITIONAL_DEBUG_DIRS, "${withval}",
+				Additional directories to look for separate
+				debug info.)])
+
 # We can't pass paths as command line arguments.
 # Mingw32 tries to be clever and will convert the paths for us.
 # For example -DBINDIR="/usr/local/bin" passed on the command line may get
@@ -150,20 +181,13 @@ AC_CONFIG_SUBDIRS(testsuite)
 AC_ARG_ENABLE(targets,
 AS_HELP_STRING([--enable-targets=TARGETS], [alternative target configurations]),
 [case "${enableval}" in
-  yes | "") AC_ERROR(enable-targets option must specify target names or 'all')
+  yes | "") AC_MSG_ERROR(enable-targets option must specify target names or 'all')
             ;;
   no)       enable_targets= ;;
   *)        enable_targets=$enableval ;;
 esac])
 
-# Check whether to enable 64-bit support on 32-bit hosts
-AC_ARG_ENABLE(64-bit-bfd,
-AS_HELP_STRING([--enable-64-bit-bfd], [64-bit support (on hosts with narrower word sizes)]),
-[case "${enableval}" in
-  yes)  want64=true  ;;
-  no)   want64=false ;;
-  *)    AC_MSG_ERROR(bad value ${enableval} for 64-bit-bfd option) ;;
-esac],[want64=false])dnl
+BFD_64_BIT
 
 # Provide defaults for some variables set by the per-host and per-target
 # configuration.
@@ -212,7 +236,7 @@ do
     done
 
     # Check whether this target needs 64-bit CORE_ADDR
-    if test x${want64} = xfalse; then
+    if test x${enable_64_bit_bfd} = xno; then
       . ${srcdir}/../bfd/config.bfd
     fi
 
@@ -225,36 +249,67 @@ do
 done
 
 if test x${all_targets} = xtrue; then
-
-  # We want all 64-bit targets if we either:
-  #  - run on a 64-bit host  or
-  #  - already require 64-bit support for some other target  or
-  #  - the --enable-64-bit-bfd option was supplied
-  # Otherwise we only support all 32-bit targets.
-  #
-  # NOTE: This test must be in sync with the corresponding
-  #       tests in BFD!
-
-  if test x${want64} = xfalse; then
-    AC_CHECK_SIZEOF(long)
-    if test "x${ac_cv_sizeof_long}" = "x8"; then
-      want64=true
-    fi
-  fi
-  if test x${want64} = xtrue; then
+  if test x${enable_64_bit_bfd} = xyes; then
     TARGET_OBS='$(ALL_TARGET_OBS) $(ALL_64_TARGET_OBS)'
   else
     TARGET_OBS='$(ALL_TARGET_OBS)'
   fi
 fi
 
+# AMD debugger API support.
+
+AC_ARG_WITH([amd-dbgapi],
+	    [AS_HELP_STRING([--with-amd-dbgapi],
+			    [support for the amd-dbgapi target (yes / no / auto)])],
+	    [GDB_CHECK_YES_NO_AUTO_VAL([$withval], [--with-amd-dbgapi])],
+	    [with_amd_dbgapi=auto])
+
+# If the user passes --without-amd-dbgapi but also explicitly enables a target
+# that requires amd-dbgapi, it is an error.
+if test "$with_amd_dbgapi" = no -a "$gdb_require_amd_dbgapi" = true; then
+  AC_MSG_ERROR([an explicitly enabled target requires amd-dbgapi, but amd-dbgapi is explicitly disabled])
+fi
+
+# Look for amd-dbgapi if:
+#
+#   - a target architecture requiring it has explicitly been enabled, or
+#   - --enable-targets=all was provided and the user did not explicitly disable
+#     amd-dbgapi support
+if test "$gdb_require_amd_dbgapi" = true \
+     -o \( "$all_targets" = true -a "$with_amd_dbgapi" != no \); then
+  # amd-dbgapi version 0.68 is part of ROCm 5.4.  There is no guarantee of API
+  # stability until amd-dbgapi hits 1.0, but for convenience, still check for
+  # greater or equal that version.  It can be handy when testing with a newer
+  # version of the library.
+  PKG_CHECK_MODULES([AMD_DBGAPI], [amd-dbgapi >= 0.68.0],
+		    [has_amd_dbgapi=yes], [has_amd_dbgapi=no])
+
+  if test "$has_amd_dbgapi" = "yes"; then
+    AC_DEFINE(HAVE_AMD_DBGAPI, 1, [Define if amd-dbgapi is being linked in.])
+    TARGET_OBS="$TARGET_OBS amd-dbgapi-target.o"
+
+    # If --enable-targets=all was provided, use the list of all files depending
+    # on amd-dbgapi that is hardcoded in the Makefile.  Else, the appropriate
+    # architecture entry in configure.tgt will have added the files to
+    # gdb_target_obs.
+    if test "$all_targets" = true; then
+      TARGET_OBS="$TARGET_OBS \$(ALL_AMD_DBGAPI_TARGET_OBS)"
+    fi
+  elif test "$gdb_require_amd_dbgapi" = true -o "$with_amd_dbgapi" = yes; then
+    # amd-dbgapi was not found and...
+    #
+    #   - a target requiring it was explicitly enabled, or
+    #   - the user explicitly wants to enable amd-dbgapi
+    AC_MSG_ERROR([amd-dbgapi is required, but cannot find an appropriate version: $AMD_DBGAPI_PKG_ERRORS])
+  fi
+fi
+
 AC_SUBST(TARGET_OBS)
 AC_SUBST(HAVE_NATIVE_GCORE_TARGET)
 
 # For other settings, only the main target counts.
 gdb_sim=
 gdb_osabi=
-build_gdbserver=
 targ=$target; . ${srcdir}/configure.tgt
 
 # Fetch the default architecture and default target vector from BFD.
@@ -273,49 +328,22 @@ if test "x$targ_defvec" != x; then
     [Define to BFD's default target vector. ])
 fi
 
-# Enable MI.
-AC_ARG_ENABLE(gdbmi,
-AS_HELP_STRING([--disable-gdbmi], [disable machine-interface (MI)]),
-  [case $enableval in
-    yes | no)
-      ;;
-    *)
-      AC_MSG_ERROR([bad value $enableval for --enable-gdbmi]) ;;
-  esac],
-  [enable_gdbmi=yes])
-if test x"$enable_gdbmi" = xyes; then
-  if test -d $srcdir/mi; then
-    CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_MI_OBS)"
-    CONFIG_DEPS="$CONFIG_DEPS \$(SUBDIR_MI_DEPS)"
-    CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_MI_SRCS)"
-    ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_MI_CFLAGS)"
-  fi
-fi
-
 # Enable TUI.
 AC_ARG_ENABLE(tui,
-AS_HELP_STRING([--enable-tui], [enable full-screen terminal user interface (TUI)]),
-  [case $enableval in
-    yes | no | auto)
-      ;;
-    *)
-      AC_MSG_ERROR([bad value $enableval for --enable-tui]) ;;
-  esac],enable_tui=auto)
+AS_HELP_STRING([--enable-tui],
+	       [enable full-screen terminal user interface (TUI)]),
+	       [GDB_CHECK_YES_NO_AUTO_VAL([$enableval], [--enable-tui])],
+	       [enable_tui=auto])
 
 # Enable gdbtk.
-AC_ARG_ENABLE(gdbtk,
-AS_HELP_STRING([--enable-gdbtk], [enable gdbtk graphical user interface (GUI)]),
-  [case $enableval in
-    yes | no)
-      ;;
-    *)
-      AC_MSG_ERROR([bad value $enableval for --enable-gdbtk]) ;;
-  esac],
-  [if test -d $srcdir/gdbtk; then
-    enable_gdbtk=yes
-  else
-    enable_gdbtk=no
-  fi])
+AC_ARG_ENABLE([gdbtk],
+	      [AS_HELP_STRING([--enable-gdbtk], [enable gdbtk graphical user interface (GUI)])],
+	      [GDB_CHECK_YES_NO_VAL([$enableval], [--enable-gdbtk])],
+	      [if test -d "$srcdir/gdbtk"; then
+		 enable_gdbtk=yes
+	       else
+		 enable_gdbtk=no
+	       fi])
 # We unconditionally disable gdbtk tests on selected platforms.
 case $host_os in
   go32* | windows*)
@@ -323,8 +351,10 @@ case $host_os in
     enable_gdbtk=no ;;
 esac
 
-# Libunwind support for ia64.
+# Handle optional debuginfod support
+AC_DEBUGINFOD
 
+# Libunwind support for ia64.
 AC_ARG_WITH(libunwind-ia64,
 AS_HELP_STRING([--with-libunwind-ia64],
 	       [use libunwind frame unwinding for ia64 targets]),,
@@ -372,50 +402,65 @@ if test "$opt_curses" = "yes"; then
 fi
 
 # Profiling support.
-AC_ARG_ENABLE(profiling,
-AS_HELP_STRING([--enable-profiling], [enable profiling of GDB]),
-  [case $enableval in
-    yes | no)
-      ;;
-    *)
-      AC_MSG_ERROR([bad value $enableval for --enable-profile]) ;;
-  esac],
- [enable_profiling=no])
+AC_ARG_ENABLE([profiling],
+	      [AS_HELP_STRING([--enable-profiling], [enable profiling of GDB])],
+	      [GDB_CHECK_YES_NO_VAL([$enableval], [--enable-profiling])],
+	      [enable_profiling=no])
 
 AC_CHECK_FUNCS(monstartup _mcleanup)
-AC_CACHE_CHECK([for _etext], ac_cv_var__etext,
-[AC_TRY_LINK(
-[#include <stdlib.h>
-extern char _etext;
-],
-[free (&_etext);], ac_cv_var__etext=yes, ac_cv_var__etext=no)])
-if test $ac_cv_var__etext = yes; then
+AC_CACHE_CHECK(
+  [for _etext],
+  [ac_cv_var__etext],
+  [AC_LINK_IFELSE(
+     [AC_LANG_PROGRAM(
+	[#include <stdlib.h>
+	 extern char _etext;],
+	[free (&_etext);]
+      )],
+     [ac_cv_var__etext=yes],
+     [ac_cv_var__etext=no]
+   )]
+)
+if test "$ac_cv_var__etext" = yes; then
   AC_DEFINE(HAVE__ETEXT, 1,
             [Define to 1 if your system has the _etext variable. ])
 fi
-AC_CACHE_CHECK([for etext], ac_cv_var_etext,
-[AC_TRY_LINK(
-[#include <stdlib.h>
-extern char etext;
-],
-[free (&etext);], ac_cv_var_etext=yes, ac_cv_var_etext=no)])
-if test $ac_cv_var_etext = yes; then
+AC_CACHE_CHECK(
+  [for etext],
+  [ac_cv_var_etext],
+  [AC_LINK_IFELSE(
+     [AC_LANG_PROGRAM(
+	[#include <stdlib.h>
+	 extern char etext;],
+	[free (&etext);]
+      )],
+     [ac_cv_var_etext=yes],
+     [ac_cv_var_etext=no]
+   )]
+)
+if test "$ac_cv_var_etext" = yes; then
   AC_DEFINE(HAVE_ETEXT, 1,
             [Define to 1 if your system has the etext variable. ])
 fi
 if test "$enable_profiling" = yes ; then
-  if test $ac_cv_func_monstartup = no || test $ac_cv_func__mcleanup = no; then
+  if test "$ac_cv_func_monstartup" = no || test "$ac_cv_func__mcleanup" = no; then
     AC_MSG_ERROR(--enable-profiling requires monstartup and _mcleanup)
   fi
   PROFILE_CFLAGS=-pg
   OLD_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $PROFILE_CFLAGS"
 
-  AC_CACHE_CHECK([whether $CC supports -pg], ac_cv_cc_supports_pg,
-    [AC_TRY_COMPILE([], [int x;], ac_cv_cc_supports_pg=yes,
-     ac_cv_cc_supports_pg=no)])
+  AC_CACHE_CHECK(
+    [whether $CC supports -pg],
+    [ac_cv_cc_supports_pg],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([], [int x;])],
+       [ac_cv_cc_supports_pg=yes],
+       [ac_cv_cc_supports_pg=no]
+     )]
+  )
 
-  if test $ac_cv_cc_supports_pg = no; then
+  if test "$ac_cv_cc_supports_pg" = no; then
     AC_MSG_ERROR(--enable-profiling requires a compiler which supports -pg)
   fi
 
@@ -430,7 +475,7 @@ AC_ARG_ENABLE([codesign],
 AC_SUBST([CODESIGN_CERT])
 
 ACX_PKGVERSION([GDB])
-ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/])
+ACX_BUGURL([https://www.gnu.org/software/gdb/bugs/])
 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description])
 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address])
 
@@ -468,22 +513,10 @@ AC_CHECK_LIB(m, main)
 # Some systems (e.g. Solaris) have `gethostbyname' in libnsl.
 AC_SEARCH_LIBS(gethostbyname, nsl)
 
-# Some systems (e.g. Solaris) have `socketpair' in libsocket.
-AC_SEARCH_LIBS(socketpair, socket)
-
-# Link in zlib if we can.  This allows us to read compressed debug sections.
+# Link in zlib/zstd if we can.  This allows us to read compressed debug
+# sections.
 AM_ZLIB
-
-# On FreeBSD we may need libutil for kinfo_getvmmap (used by fbsd-nat.c).
-# On GNU/kFreeBSD systems, FreeBSD libutil is renamed to libutil-freebsd.
-AC_SEARCH_LIBS(kinfo_getvmmap, util util-freebsd,
-  [AC_DEFINE(HAVE_KINFO_GETVMMAP, 1,
-            [Define to 1 if your system has the kinfo_getvmmap function. ])])
-
-# fbsd-nat.c can also use kinfo_getfile.
-AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd,
-  [AC_DEFINE(HAVE_KINFO_GETFILE, 1,
-            [Define to 1 if your system has the kinfo_getfile function. ])])
+AC_ZSTD
 
 AM_ICONV
 
@@ -524,28 +557,26 @@ if test x"$prefer_curses" = xyes; then
   # search /usr/local/include, if ncurses is installed in /usr/local.  A
   # default installation of ncurses on alpha*-dec-osf* will lead to such
   # a situation.
-  AC_SEARCH_LIBS(waddstr, [ncursesw ncurses cursesX curses])
-
-  if test "$ac_cv_search_waddstr" != no; then
-    curses_found=yes
-  fi
+  AC_SEARCH_LIBS(waddstr, [ncursesw ncurses cursesX curses],
+                 [curses_found=yes
+                  AC_DEFINE([HAVE_LIBCURSES], [1],
+                            [Define to 1 if curses is enabled.])
+                 ])
 fi
 
 # Check whether we should enable the TUI, but only do so if we really
 # can.
 if test x"$enable_tui" != xno; then
-  if test -d $srcdir/tui; then
-    if test "$curses_found" != no; then
-      CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_TUI_OBS)"
-      CONFIG_DEPS="$CONFIG_DEPS \$(SUBDIR_TUI_DEPS)"
-      CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_TUI_SRCS)"
-      ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_TUI_CFLAGS)"
+  if test "$curses_found" != no; then
+    CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_TUI_OBS)"
+    CONFIG_DEPS="$CONFIG_DEPS \$(SUBDIR_TUI_DEPS)"
+    CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_TUI_SRCS)"
+    ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_TUI_CFLAGS)"
+  else
+    if test x"$enable_tui" = xyes; then
+      AC_MSG_ERROR([no enhanced curses library found; disable TUI])
     else
-      if test x"$enable_tui" = xyes; then
-	AC_MSG_ERROR([no enhanced curses library found; disable TUI])
-      else
-	AC_MSG_WARN([no enhanced curses library found; disabling TUI])
-      fi
+      AC_MSG_WARN([no enhanced curses library found; disabling TUI])
     fi
   fi
 fi
@@ -556,7 +587,7 @@ fi
 
 case $host_os in
   cygwin*)
-    if test -d $srcdir/libtermcap; then
+    if test -d "$srcdir/libtermcap"; then
       LIBS="../libtermcap/libtermcap.a $LIBS"
       ac_cv_search_tgetent="../libtermcap/libtermcap.a"
     fi ;;
@@ -577,16 +608,25 @@ AC_ARG_WITH([system-readline],
                   [use installed readline library])])
 
 if test "$with_system_readline" = yes; then
-   AC_CACHE_CHECK([whether system readline is new enough],
-     [gdb_cv_readline_ok],
-     [AC_TRY_COMPILE(
-       [#include <stdio.h>
-#include <readline/readline.h>],
-       [#if RL_VERSION_MAJOR < 7
-# error "readline version 7 required"
-#endif],
-    gdb_cv_readline_ok=yes,
-    gdb_cv_readline_ok=no)])
+  AC_CHECK_HEADERS(readline/readline.h, [readline_h=yes], [readline_h=no])
+  if test "$readline_h" = "no"; then
+    AC_MSG_ERROR([readline development packages are probably missing])
+  fi
+  AC_CACHE_CHECK(
+    [whether system readline is new enough],
+    [gdb_cv_readline_ok],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+	  [#include <stdio.h>
+	   #include <readline/readline.h>],
+	  [#if RL_VERSION_MAJOR < 7
+	   # error "readline version 7 required"
+	   #endif]
+	)],
+       [gdb_cv_readline_ok=yes],
+       [gdb_cv_readline_ok=no]
+     )]
+  )
   if test "$gdb_cv_readline_ok" != yes; then
     AC_MSG_ERROR([system readline is not new enough])
   fi
@@ -595,16 +635,19 @@ if test "$with_system_readline" = yes; t
   READLINE_DEPS=
   READLINE_CFLAGS=
   READLINE_TEXI_INCFLAG=
+  READLINE_DOC_SOURCE_INCLUDES='$(READLINE_SYSTEM_DOC_INCLUDES)'
 else
   READLINE='$(READLINE_DIR)/libreadline.a'
   READLINE_DEPS='$(READLINE)'
   READLINE_CFLAGS='-I$(READLINE_SRC)/..'
   READLINE_TEXI_INCFLAG='-I $(READLINE_DIR)'
+  READLINE_DOC_SOURCE_INCLUDES='$(READLINE_INTREE_DOC_INCLUDES)'
 fi
 AC_SUBST(READLINE)
 AC_SUBST(READLINE_DEPS)
 AC_SUBST(READLINE_CFLAGS)
 AC_SUBST(READLINE_TEXI_INCFLAG)
+AC_SUBST(READLINE_DOC_SOURCE_INCLUDES)
 
 # Generate jit-reader.h
 
@@ -660,27 +703,8 @@ else
   fi
 fi
 
-AC_ARG_WITH(mpfr,
-  AS_HELP_STRING([--with-mpfr], [include MPFR support (auto/yes/no)]),
-  [], [with_mpfr=auto])
-AC_MSG_CHECKING([whether to use MPFR])
-AC_MSG_RESULT([$with_mpfr])
-
-if test "${with_mpfr}" = no; then
-  AC_MSG_WARN([MPFR support disabled; some features may be unavailable.])
-  HAVE_LIBMPFR=no
-else
-  AC_LIB_HAVE_LINKFLAGS([mpfr], [gmp], [#include <mpfr.h>],
-			[mpfr_exp_t exp; mpfr_t x;
-			 mpfr_frexp (&exp, x, x, MPFR_RNDN);])
-  if test "$HAVE_LIBMPFR" != yes; then
-    if test "$with_mpfr" = yes; then
-      AC_MSG_ERROR([MPFR is missing or unusable])
-    else
-      AC_MSG_WARN([MPFR is missing or unusable; some features may be unavailable.])
-    fi
-  fi
-fi
+AC_ARG_VAR(GMPLIBS,[How to link GMP])
+AC_ARG_VAR(GMPINC,[How to find GMP include files])
 
 # --------------------- #
 # Check for libpython.  #
@@ -704,7 +728,12 @@ AC_DEFUN([AC_TRY_LIBPYTHON],
   LIBS="$new_LIBS $LIBS"
   found_usable_python=no
   AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "Python.h"]],
-                                 [[Py_Initialize ();]])],
+                                 [[
+				    #if PY_MAJOR_VERSION != 3
+				    # error "We only support Python 3"
+				    #endif
+				    Py_Initialize ();
+				 ]])],
                  [have_libpython_var=yes
                   found_usable_python=yes
                   PYTHON_CPPFLAGS=$new_CPPFLAGS
@@ -720,7 +749,6 @@ dnl no -   Don't include python support.
 dnl yes -  Include python support, error if it's missing.
 dnl        If we find python in $PATH, use it to fetch configure options,
 dnl        otherwise assume the compiler can find it with no help from us.
-dnl        Python 2.7 and 2.6 are tried in turn.
 dnl auto - Same as "yes", but if python is missing from the system,
 dnl        fall back to "no".
 dnl /path/to/python/exec-prefix -
@@ -729,7 +757,6 @@ dnl        If /path/to/python/exec-prefi
 dnl        the compilation parameters.  Otherwise use
 dnl        -I/path/to/python/exec-prefix/include,
 dnl        -L/path/to/python/exec-prefix/lib.
-dnl        Python 2.7 and 2.6 are tried in turn.
 dnl        NOTE: This case is historical.  It is what was done for 7.0/7.1
 dnl        but is deprecated.
 dnl /path/to/python/executable -
@@ -758,7 +785,7 @@ if test "${with_python}" = no; then
 else
   case "${with_python}" in
   [[\\/]]* | ?:[[\\/]]*)
-    if test -d ${with_python}; then
+    if test -d "${with_python}"; then
       # Assume the python binary is ${with_python}/bin/python.
       python_prog="${with_python}/bin/python"
       python_prefix=
@@ -781,12 +808,12 @@ else
       python_prog=${with_python}
       python_prefix=
     else
-      AC_ERROR(invalid value for --with-python)
+      AC_MSG_ERROR(invalid value for --with-python)
     fi
     ;;
   */*)
     # Disallow --with-python=foo/bar.
-    AC_ERROR(invalid value for --with-python)
+    AC_MSG_ERROR(invalid value for --with-python)
     ;;
   *)
     # The user has either specified auto, yes, or the name of the python
@@ -794,8 +821,9 @@ else
     python_prefix=
     case "${with_python}" in
     yes | auto)
-      if test ${build} = ${host}; then
-        AC_PATH_PROG(python_prog_path, python, missing)
+      if test "${build}" = "${host}"; then
+        # Look first for 'python', then 'python3'.
+        AC_PATH_PROGS(python_prog_path, [python python3], missing)
         if test "${python_prog_path}" = missing; then
           python_prog=missing
         else
@@ -814,7 +842,7 @@ else
       python_prog="${with_python}"
       AC_PATH_PROG(python_prog_path, ${python_prog}, missing)
       if test "${python_prog_path}" = missing; then
-        AC_ERROR(unable to find python program ${python_prog})
+	AC_MSG_ERROR(unable to find python program ${python_prog})
       fi
       ;;
     esac
@@ -828,21 +856,21 @@ else
     if test $? != 0; then
       have_python_config=failed
       if test "${with_python}" != auto; then
-        AC_ERROR(failure running python-config --includes)
+	AC_MSG_ERROR(failure running python-config --includes)
       fi
     fi
     python_libs=`${python_prog} ${srcdir}/python/python-config.py --ldflags`
     if test $? != 0; then
       have_python_config=failed
       if test "${with_python}" != auto; then
-        AC_ERROR(failure running python-config --ldflags)
+	AC_MSG_ERROR(failure running python-config --ldflags)
       fi
     fi
     python_prefix=`${python_prog} ${srcdir}/python/python-config.py --exec-prefix`
     if test $? != 0; then
       have_python_config=failed
       if test "${with_python}" != auto; then
-        AC_ERROR(failure running python-config --exec-prefix)
+	AC_MSG_ERROR(failure running python-config --exec-prefix)
       fi
     fi
   else
@@ -864,15 +892,6 @@ else
   if test "${have_python_config}" = yes; then
     AC_TRY_LIBPYTHON(have_libpython,
                      ${python_includes}, ${python_libs})
-  elif test "${have_python_config}" != failed; then
-    if test "${have_libpython}" = no; then
-      AC_TRY_LIBPYTHON(have_libpython,
-                       ${python_includes}, "-lpython2.7 ${python_libs}")
-    fi
-    if test "${have_libpython}" = no; then
-      AC_TRY_LIBPYTHON(have_libpython,
-                       ${python_includes}, "-lpython2.6 ${python_libs}")
-    fi
   fi
 
   if test "${have_libpython}" = no; then
@@ -896,6 +915,24 @@ else
   fi
 fi
 
+dnl Use --with-python-libdir to control where GDB looks for the Python
+dnl libraries.
+dnl
+dnl If this is not given then the default will be based on the value
+dnl passed to --with-python, which is in the python_prefix variable.
+dnl If the --with-python option wasn't given then the default value in
+dnl python_prefix is based on running the 'gdb/python/python-config
+dnl --exec-prefix' script.
+AC_ARG_WITH(python-libdir,
+  AS_HELP_STRING([--with-python-libdir@<:@=DIR@:>@], [search for python's libraries in DIR]),
+  [],[
+    # If no python libdir is specified then select one based on
+    # python's prefix path.
+    if test -n "${python_prefix}"; then
+      with_python_libdir=${python_prefix}/lib
+    fi
+  ])
+
 if test "${have_libpython}" != no; then
   AC_DEFINE(HAVE_PYTHON, 1, [Define if Python interpreter is being linked in.])
   CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_PYTHON_OBS)"
@@ -904,6 +941,12 @@ if test "${have_libpython}" != no; then
   CONFIG_INSTALL="$CONFIG_INSTALL install-python"
   ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_PYTHON_CFLAGS)"
 
+  if test -n "${with_python_libdir}"; then
+    AC_DEFINE_UNQUOTED(WITH_PYTHON_LIBDIR, "${with_python_libdir}",
+		       [Directory containing Python's standard libraries from --with-python-libdir.])
+    GDB_AC_DEFINE_RELOCATABLE(PYTHON_LIBDIR, [python lib], ${with_python_libdir})
+  fi
+
   # Flags needed to compile Python code (taken from python-config --cflags).
   # We cannot call python-config directly because it will output whatever was
   # used when compiling the Python interpreter itself, including flags which
@@ -923,7 +966,11 @@ if test "${have_libpython}" != no; then
       # Check that the compiler accepts it
       saved_CFLAGS="$CFLAGS"
       CFLAGS="$CFLAGS $flag"
-      AC_TRY_COMPILE([],[],PYTHON_CFLAGS="${PYTHON_CFLAGS} $flag",)
+      AC_COMPILE_IFELSE(
+	[AC_LANG_PROGRAM([], [])],
+	[PYTHON_CFLAGS="${PYTHON_CFLAGS} $flag"],
+	[]
+      )
       CFLAGS="$saved_CFLAGS"
     done
     AC_MSG_RESULT(${PYTHON_CFLAGS})
@@ -1069,7 +1116,7 @@ AC_MSG_RESULT([$with_guile])
 dnl We check guile with pkg-config.
 AC_PATH_PROG(pkg_config_prog_path, pkg-config, missing)
 
-try_guile_versions="guile-2.0"
+try_guile_versions="guile-3.0 guile-2.2 guile-2.0"
 have_libguile=no
 case "${with_guile}" in
 no)
@@ -1161,15 +1208,11 @@ AM_CONDITIONAL(HAVE_GUILE, test "${have_
 SRCHIGH_LIBS=
 SRCHIGH_CFLAGS=
 
-AC_ARG_ENABLE(source-highlight,
-  AS_HELP_STRING([--enable-source-highlight],
-    [enable source-highlight for source listings]),
-  [case "${enableval}" in
-  yes)  enable_source_highlight=yes ;;
-  no)   enable_source_highlight=no  ;;
-  *)    AC_MSG_ERROR(bad value ${enableval} for source-highlight option) ;;
-esac],
-[enable_source_highlight=auto])
+AC_ARG_ENABLE([source-highlight],
+	      [AS_HELP_STRING([--enable-source-highlight],
+			      [enable source-highlight for source listings])],
+	      [GDB_CHECK_YES_NO_AUTO_VAL([$enableval], [--enable-source-highlight])],
+	      [enable_source_highlight=auto])
 
 if test "${enable_source_highlight}" != "no"; then
   AC_MSG_CHECKING([for the source-highlight library])
@@ -1179,20 +1222,57 @@ if test "${enable_source_highlight}" !=
       AC_MSG_ERROR([pkg-config was not found in your system])
     fi
   else
-    case "$LDFLAGS" in
-      *static-libstdc*)
-        AC_MSG_ERROR([source highlight is incompatible with -static-libstdc++; dnl
+    if ${pkg_config_prog_path} --exists source-highlight; then
+      case "$LDFLAGS" in
+        *static-libstdc*)
+          AC_MSG_ERROR([source highlight is incompatible with -static-libstdc++; dnl
 either use --disable-source-highlight or dnl
 --without-static-standard-libraries])
-        ;;
-    esac
+          ;;
+      esac
 
-    if ${pkg_config_prog_path} --exists source-highlight; then
-      SRCHIGH_CFLAGS=`${pkg_config_prog_path} --cflags source-highlight`
-      SRCHIGH_LIBS=`${pkg_config_prog_path} --libs source-highlight`
-      AC_DEFINE([HAVE_SOURCE_HIGHLIGHT], 1,
-                [Define to 1 if the source-highlight library is available])
-      AC_MSG_RESULT([yes])
+      srchigh_pkg_cflags=`${pkg_config_prog_path} --cflags source-highlight`
+      srchigh_pkg_libs=`${pkg_config_prog_path} --libs source-highlight`
+
+      # Now that we have found a source-highlight library, check if we can use
+      # it.  In particular, we're trying to detect the situation that the
+      # library is using the new libstdc++ library abi ( see
+      # https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html )
+      # while the compiler being used to compile gdb is using the old abi.
+      # Such a situation will result in an undefined reference to
+      # srchilite::SourceHighlight::SourceHighlight(std::string const&).
+      # This situation can occur for instance when using a source highlight
+      # library compiled with g++ 7.5.0 while building gdb with g++ 4.8.5.
+      AC_LANG_PUSH(C++)
+      save_CXXFLAGS="$CXXFLAGS"
+      save_LIBS="$LIBS"
+      CXXFLAGS="$CXXFLAGS $srchigh_pkg_cflags"
+      LIBS="$LIBS $srchigh_pkg_libs"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+          [#include <srchilite/sourcehighlight.h>],
+          [std::string outlang = "esc.outlang";
+           new srchilite::SourceHighlight (outlang);]
+        )],
+        [have_usable_source_highlight=yes],
+        [have_usable_source_highlight=no]
+      )
+      CXXFLAGS="$save_CXXFLAGS"
+      LIBS="$save_LIBS"
+      AC_LANG_POP(C++)
+
+      if test "${have_usable_source_highlight}" = "yes"; then
+        AC_DEFINE([HAVE_SOURCE_HIGHLIGHT], 1,
+                  [Define to 1 if the source-highlight library is available])
+        AC_MSG_RESULT([yes])
+        SRCHIGH_CFLAGS="$srchigh_pkg_cflags"
+        SRCHIGH_LIBS="$srchigh_pkg_libs"
+      else
+        AC_MSG_RESULT([no])
+        if test "${enable_source_highlight}" = "yes"; then
+          AC_MSG_ERROR([source-highlight in your system could not be used])
+        fi
+      fi
     else
       AC_MSG_RESULT([no])
       if test "${enable_source_highlight}" = "yes"; then
@@ -1204,58 +1284,17 @@ fi
 AC_SUBST(SRCHIGH_LIBS)
 AC_SUBST(SRCHIGH_CFLAGS)
 
-AC_ARG_WITH(intel_pt,
-  AS_HELP_STRING([--with-intel-pt], [include Intel Processor Trace support (auto/yes/no)]),
-  [], [with_intel_pt=auto])
-AC_MSG_CHECKING([whether to use intel pt])
-AC_MSG_RESULT([$with_intel_pt])
-
-if test "${with_intel_pt}" = no; then
-  AC_MSG_WARN([Intel Processor Trace support disabled; some features may be unavailable.])
-  HAVE_LIBIPT=no
-else
-  AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
-#include <linux/perf_event.h>
-#ifndef PERF_ATTR_SIZE_VER5
-# error
-#endif
-  ]])], [perf_event=yes], [perf_event=no])
-  if test "$perf_event" != yes; then
-    if test "$with_intel_pt" = yes; then
-      AC_MSG_ERROR([linux/perf_event.h missing or too old])
-    else
-      AC_MSG_WARN([linux/perf_event.h missing or too old; some features may be unavailable.])
-    fi
-  fi
-
-  AC_LIB_HAVE_LINKFLAGS([ipt], [], [#include "intel-pt.h"], [pt_insn_alloc_decoder (0);])
-  if test "$HAVE_LIBIPT" != yes; then
-    if test "$with_intel_pt" = yes; then
-      AC_MSG_ERROR([libipt is missing or unusable])
-    else
-      AC_MSG_WARN([libipt is missing or unusable; some features may be unavailable.])
-    fi
-  else
-    save_LIBS=$LIBS
-    LIBS="$LIBS $LIBIPT"
-    AC_CHECK_FUNCS(pt_insn_event)
-    AC_CHECK_MEMBERS([struct pt_insn.enabled, struct pt_insn.resynced], [], [],
-                     [#include <intel-pt.h>])
-    LIBS=$save_LIBS
-  fi
-fi
-
 # ------------------------- #
 # Checks for header files.  #
 # ------------------------- #
 
 AC_HEADER_STDC
 # elf_hp.h is for HP/UX 64-bit shared library support.
-AC_CHECK_HEADERS([nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \
-                  thread_db.h linux/elf.h \
+AC_CHECK_HEADERS([nlist.h machine/reg.h \
+                  thread_db.h \
 		  sys/file.h sys/filio.h sys/ioctl.h sys/param.h \
-		  sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \
-		  sys/reg.h sys/debugreg.h sys/select.h \
+		  sys/procctl.h sys/resource.h sys/ptrace.h ptrace.h \
+		  sys/reg.h sys/debugreg.h \
 		  termios.h elf_hp.h])
 AC_CHECK_HEADERS(sys/user.h, [], [],
 [#if HAVE_SYS_PARAM_H
@@ -1270,6 +1309,10 @@ AC_CHECK_HEADERS(term.h, [], [],
 #endif
 ])
 
+AC_CHECK_HEADERS([sys/socket.h])
+AC_CHECK_HEADERS([ws2tcpip.h])
+AC_CHECK_HEADERS([execinfo.h])
+
 # ------------------------- #
 # Checks for declarations.  #
 # ------------------------- #
@@ -1279,19 +1322,17 @@ libiberty_INIT
 AC_CHECK_DECLS([snprintf])
 AM_LC_MESSAGES
 
-# ----------------------- #
-# Checks for structures.  #
-# ----------------------- #
-
-AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize])
-
 # ------------------ #
 # Checks for types.  #
 # ------------------ #
 
 AC_CHECK_TYPES(socklen_t, [], [],
 [#include <sys/types.h>
-#include <sys/socket.h>
+#if HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#elif HAVE_WS2TCPIP_H
+# include <ws2tcpip.h>
+#endif
 ])
 
 # ------------------------------------- #
@@ -1306,17 +1347,14 @@ AC_C_BIGENDIAN
 # Checks for library functions.  #
 # ------------------------------ #
 
-AC_FUNC_MMAP
-AC_FUNC_VFORK
-AC_CHECK_FUNCS([getauxval getrusage getuid getgid \
-		pipe poll pread pread64 pwrite resize_term \
-		sbrk getpgid setpgid setpgrp setsid \
-		sigaction sigsetmask socketpair \
-		ttrace wborder wresize setlocale iconvlist libiconvlist btowc \
+AC_CHECK_FUNCS([getuid getgid \
+		pread pread64 pwrite resize_term \
+		getpgid setsid \
+		sigsetmask \
+		ttrace wresize setlocale iconvlist libiconvlist btowc \
 		setrlimit getrlimit posix_madvise waitpid \
-		ptrace64 sigaltstack setns use_default_colors])
+		use_default_colors])
 AM_LANGINFO_CODESET
-GDB_AC_COMMON
 
 # Check the return and argument types of ptrace.
 GDB_AC_PTRACE
@@ -1326,49 +1364,26 @@ dnl Instead, assume we will have a proto
 if test "$cross_compiling" = no; then
   AC_FUNC_SETPGRP
 else
-  AC_CACHE_CHECK([whether setpgrp takes no argument], ac_cv_func_setpgrp_void,
-    [AC_TRY_COMPILE([
-#include <unistd.h>
-], [
-  if (setpgrp(1,1) == -1)
-    exit (0);
-  else
-    exit (1);
-], ac_cv_func_setpgrp_void=no, ac_cv_func_setpgrp_void=yes)])
-if test $ac_cv_func_setpgrp_void = yes; then
+  AC_CACHE_CHECK(
+    [whether setpgrp takes no argument],
+    [ac_cv_func_setpgrp_void],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+	  [#include <unistd.h>],
+	  [if (setpgrp(1,1) == -1)
+	     exit (0);
+	   else
+	     exit (1);]
+	)],
+       [ac_cv_func_setpgrp_void=no],
+       [ac_cv_func_setpgrp_void=yes]
+     )]
+  )
+if test "$ac_cv_func_setpgrp_void" = yes; then
   AC_DEFINE(SETPGRP_VOID, 1)
 fi
 fi
 
-# Assume we'll default to using the included libiberty regex.
-gdb_use_included_regex=yes
-
-# However, if the system regex is GNU regex, then default to *not*
-# using the included regex.
-AC_CACHE_CHECK(
-  [for GNU regex],
-  [gdb_cv_have_gnu_regex],
-  [AC_TRY_COMPILE(
-    [#include <gnu-versions.h>],
-    [#define REGEX_INTERFACE_VERSION 1
-#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
-# error "Version mismatch"
-#endif],
-    gdb_cv_have_gnu_regex=yes,
-    gdb_cv_have_gnu_regex=no)])
-if test $gdb_cv_have_gnu_regex = yes; then
-  gdb_use_included_regex=no
-fi
-
-AC_ARG_WITH(included-regex,
-  AS_HELP_STRING([--without-included-regex], [don't use included regex; this is the default on systems with version 2 of the GNU C library (use with caution on other system)]),
-  gdb_with_regex=$withval,
-  gdb_with_regex=$gdb_use_included_regex)
-if test "$gdb_with_regex" = yes; then
-  AC_DEFINE(USE_INCLUDED_REGEX, 1,
-    [Define to 1 if the regex included in libiberty should be used.])
-fi
-
 # Check if <sys/proc.h> defines `struct thread' with a td_pcb member.
 AC_CHECK_MEMBERS([struct thread.td_pcb], [], [],
 [#include <sys/param.h>
@@ -1376,22 +1391,40 @@ AC_CHECK_MEMBERS([struct thread.td_pcb],
 ])
 
 # See if <sys/lwp.h> defines `struct lwp`.
-AC_CACHE_CHECK([for struct lwp], gdb_cv_struct_lwp,
-[AC_TRY_COMPILE([#include <sys/param.h>
-#define _KMEMUSER
-#include <sys/lwp.h>], [struct lwp l;],
-gdb_cv_struct_lwp=yes, gdb_cv_struct_lwp=no)])
-if test $gdb_cv_struct_lwp = yes; then
+AC_CACHE_CHECK(
+  [for struct lwp],
+  [gdb_cv_struct_lwp],
+  [AC_COMPILE_IFELSE(
+     [AC_LANG_PROGRAM(
+	[#include <sys/param.h>
+	 #define _KMEMUSER
+	 #include <sys/lwp.h>],
+	[struct lwp l;]
+      )],
+     [gdb_cv_struct_lwp=yes],
+     [gdb_cv_struct_lwp=no]
+   )]
+)
+if test "$gdb_cv_struct_lwp" = yes; then
   AC_DEFINE(HAVE_STRUCT_LWP, 1,
             [Define to 1 if your system has struct lwp.])
 fi
 
 # See if <machine/reg.h> degines `struct reg'.
-AC_CACHE_CHECK([for struct reg in machine/reg.h], gdb_cv_struct_reg,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <machine/reg.h>], [struct reg r;],
-gdb_cv_struct_reg=yes, gdb_cv_struct_reg=no)])
-if test $gdb_cv_struct_reg = yes; then
+AC_CACHE_CHECK(
+  [for struct reg in machine/reg.h],
+  [gdb_cv_struct_reg],
+  [AC_COMPILE_IFELSE(
+     [AC_LANG_PROGRAM(
+	[#include <sys/types.h>
+	 #include <machine/reg.h>],
+	[struct reg r;]
+      )],
+     [gdb_cv_struct_reg=yes],
+     [gdb_cv_struct_reg=no]
+   )]
+)
+if test "$gdb_cv_struct_reg" = yes; then
   AC_DEFINE(HAVE_STRUCT_REG, 1,
             [Define to 1 if your system has struct reg in <machine/reg.h>.])
 fi
@@ -1402,67 +1435,58 @@ AC_CHECK_MEMBERS([struct reg.r_fs, struc
                  [#include <sys/types.h>
 #include <machine/reg.h>])
 
-# See if <sys/user.h> supports the %fs_base and %gs_bas amd64 segment registers.
-# Older amd64 Linux's don't have the fs_base and gs_base members of
-# `struct user_regs_struct'.
-AC_CHECK_MEMBERS([struct user_regs_struct.fs_base, struct user_regs_struct.gs_base],
-     [], [], [#include <sys/types.h>
-#include <sys/user.h>])
-
 # See if <sys/ptrace.h> provides the PTRACE_GETREGS request.
 AC_MSG_CHECKING(for PTRACE_GETREGS)
-AC_CACHE_VAL(gdb_cv_have_ptrace_getregs,
-[AC_TRY_COMPILE([#include <sys/ptrace.h>],
-		[PTRACE_GETREGS;],
-		[gdb_cv_have_ptrace_getregs=yes],
-		[gdb_cv_have_ptrace_getregs=no])])
+AC_CACHE_VAL(
+  [gdb_cv_have_ptrace_getregs],
+  [AC_COMPILE_IFELSE(
+    [AC_LANG_PROGRAM([#include <sys/ptrace.h>], [PTRACE_GETREGS;])],
+    [gdb_cv_have_ptrace_getregs=yes],
+    [gdb_cv_have_ptrace_getregs=no]
+   )]
+)
 AC_MSG_RESULT($gdb_cv_have_ptrace_getregs)
-if test $gdb_cv_have_ptrace_getregs = yes; then
+if test "$gdb_cv_have_ptrace_getregs" = yes; then
   AC_DEFINE(HAVE_PTRACE_GETREGS, 1,
   [Define if sys/ptrace.h defines the PTRACE_GETREGS request.])
 fi
 
 # See if <sys/ptrace.h> provides the PTRACE_GETFPXREGS request.
 AC_MSG_CHECKING(for PTRACE_GETFPXREGS)
-AC_CACHE_VAL(gdb_cv_have_ptrace_getfpxregs,
-[AC_TRY_COMPILE([#include <sys/ptrace.h>],
-		[PTRACE_GETFPXREGS;],
-		[gdb_cv_have_ptrace_getfpxregs=yes],
-		[gdb_cv_have_ptrace_getfpxregs=no])])
+AC_CACHE_VAL(
+  [gdb_cv_have_ptrace_getfpxregs],
+  [AC_COMPILE_IFELSE(
+     [AC_LANG_PROGRAM([#include <sys/ptrace.h>], [PTRACE_GETFPXREGS;])],
+     [gdb_cv_have_ptrace_getfpxregs=yes],
+     [gdb_cv_have_ptrace_getfpxregs=no]
+   )]
+)
 AC_MSG_RESULT($gdb_cv_have_ptrace_getfpxregs)
-if test $gdb_cv_have_ptrace_getfpxregs = yes; then
+if test "$gdb_cv_have_ptrace_getfpxregs" = yes; then
   AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1,
   [Define if sys/ptrace.h defines the PTRACE_GETFPXREGS request.])
 fi
 
 # See if <sys/ptrace.h> provides the PT_GETDBREGS request.
 AC_MSG_CHECKING(for PT_GETDBREGS)
-AC_CACHE_VAL(gdb_cv_have_pt_getdbregs,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/ptrace.h>],
-		[PT_GETDBREGS;],
-		[gdb_cv_have_pt_getdbregs=yes],
-		[gdb_cv_have_pt_getdbregs=no])])
+AC_CACHE_VAL(
+  [gdb_cv_have_pt_getdbregs],
+  [AC_COMPILE_IFELSE(
+     [AC_LANG_PROGRAM(
+	[#include <sys/types.h>
+	 #include <sys/ptrace.h>],
+	[PT_GETDBREGS;]
+      )],
+     [gdb_cv_have_pt_getdbregs=yes],
+     [gdb_cv_have_pt_getdbregs=no]
+   )]
+)
 AC_MSG_RESULT($gdb_cv_have_pt_getdbregs)
-if test $gdb_cv_have_pt_getdbregs = yes; then
+if test "$gdb_cv_have_pt_getdbregs" = yes; then
   AC_DEFINE(HAVE_PT_GETDBREGS, 1,
   [Define if sys/ptrace.h defines the PT_GETDBREGS request.])
 fi
 
-# See if <sys/ptrace.h> provides the PT_GETXMMREGS request.
-AC_MSG_CHECKING(for PT_GETXMMREGS)
-AC_CACHE_VAL(gdb_cv_have_pt_getxmmregs,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/ptrace.h>],
-		[PT_GETXMMREGS;],
-		[gdb_cv_have_pt_getxmmregs=yes],
-		[gdb_cv_have_pt_getxmmregs=no])])
-AC_MSG_RESULT($gdb_cv_have_pt_getxmmregs)
-if test $gdb_cv_have_pt_getxmmregs = yes; then
-  AC_DEFINE(HAVE_PT_GETXMMREGS, 1,
-  [Define if sys/ptrace.h defines the PT_GETXMMREGS request.])
-fi
-
 # See if <sys/ptrace.h> supports LWP names on FreeBSD
 # Older FreeBSD versions don't have the pl_tdname member of
 # `struct ptrace_lwpinfo'.
@@ -1475,17 +1499,6 @@ AC_CHECK_MEMBERS([struct ptrace_lwpinfo.
 AC_CHECK_MEMBERS([struct ptrace_lwpinfo.pl_syscall_code], [], [],
                  [#include <sys/ptrace.h>])
 
-if test "$ac_cv_header_sys_procfs_h" = yes; then
-  BFD_HAVE_SYS_PROCFS_TYPE(gregset_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(fpregset_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(prgregset32_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
-fi
-
 # Check if the compiler supports the `long long' type.
 
 AC_CACHE_CHECK([for long long support in compiler], gdb_cv_c_long_long,
@@ -1494,32 +1507,11 @@ AC_CACHE_CHECK([for long long support in
 [[switch (foo & 2) { case 0: return 1; }]])],
                                   gdb_cv_c_long_long=yes,
                                   gdb_cv_c_long_long=no)])
-if test $gdb_cv_c_long_long != yes; then
+if test "$gdb_cv_c_long_long" != yes; then
   # libdecnumber requires long long.
   AC_MSG_ERROR([Compiler must support long long for GDB.])
 fi
 
-# Check if the compiler and runtime support printing long longs.
-
-AC_CACHE_CHECK([for long long support in printf],
-               gdb_cv_printf_has_long_long,
-               [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
-[[char buf[32];
-  long long l = 0;
-  l = (l << 16) + 0x0123;
-  l = (l << 16) + 0x4567;
-  l = (l << 16) + 0x89ab;
-  l = (l << 16) + 0xcdef;
-  sprintf (buf, "0x%016llx", l);
-  return (strcmp ("0x0123456789abcdef", buf));]])],
-                              gdb_cv_printf_has_long_long=yes,
-                              gdb_cv_printf_has_long_long=no,
-                              gdb_cv_printf_has_long_long=no)])
-if test $gdb_cv_printf_has_long_long = yes; then
-  AC_DEFINE(PRINTF_HAS_LONG_LONG, 1,
-            [Define to 1 if the "%ll" format works to print long longs.])
-fi
-
 # Check if the compiler and runtime support printing decfloats.
 
 AC_CACHE_CHECK([for decfloat support in printf],
@@ -1534,7 +1526,7 @@ AC_CACHE_CHECK([for decfloat support in
                               gdb_cv_printf_has_decfloat=yes,
                               gdb_cv_printf_has_decfloat=no,
                               gdb_cv_printf_has_decfloat=no)])
-if test $gdb_cv_printf_has_decfloat = yes; then
+if test "$gdb_cv_printf_has_decfloat" = yes; then
   AC_DEFINE(PRINTF_HAS_DECFLOAT, 1,
             [Define to 1 if the "%H, %D and %DD" formats work to print decfloats.])
 fi
@@ -1548,7 +1540,7 @@ AC_CACHE_CHECK([for long double support
                [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[long double foo;]])],
                                   gdb_cv_c_long_double=yes,
                                   gdb_cv_c_long_double=no)])
-if test $gdb_cv_c_long_double = yes; then
+if test "$gdb_cv_c_long_double" = yes; then
   AC_DEFINE(HAVE_LONG_DOUBLE, 1,
            [Define to 1 if the compiler supports long double.])
 fi
@@ -1565,7 +1557,7 @@ AC_CACHE_CHECK([for long double support
                               gdb_cv_printf_has_long_double=yes,
                               gdb_cv_printf_has_long_double=no,
                               gdb_cv_printf_has_long_double=no)])
-if test $gdb_cv_printf_has_long_double = yes; then
+if test "$gdb_cv_printf_has_long_double" = yes; then
   AC_DEFINE(PRINTF_HAS_LONG_DOUBLE, 1,
             [Define to 1 if the "%Lg" format works to print long doubles.])
 fi
@@ -1583,25 +1575,30 @@ AC_CACHE_CHECK([for long double support
                               gdb_cv_scanf_has_long_double=yes,
                               gdb_cv_scanf_has_long_double=no,
                               gdb_cv_scanf_has_long_double=no)])
-if test $gdb_cv_scanf_has_long_double = yes; then
+if test "$gdb_cv_scanf_has_long_double" = yes; then
   AC_DEFINE(SCANF_HAS_LONG_DOUBLE, 1,
             [Define to 1 if the "%Lg" format works to scan long doubles.])
 fi
 
 case ${host_os} in
 aix*)
-  AC_CACHE_CHECK([for -bbigtoc option], [gdb_cv_bigtoc], [
-    SAVE_LDFLAGS=$LDFLAGS
-
-    case $GCC in
-    yes) gdb_cv_bigtoc=-Wl,-bbigtoc ;;
-    *) gdb_cv_bigtoc=-bbigtoc ;;
-    esac
-
-    LDFLAGS=$LDFLAGS\ $gdb_cv_bigtoc
-    AC_TRY_LINK([], [int i;], [], [gdb_cv_bigtoc=])
-    LDFLAGS="${SAVE_LDFLAGS}"
-  ])
+  AC_CACHE_CHECK(
+    [for -bbigtoc option], [gdb_cv_bigtoc],
+    [SAVE_LDFLAGS=$LDFLAGS
+
+     case $GCC in
+       yes) gdb_cv_bigtoc=-Wl,-bbigtoc ;;
+       *) gdb_cv_bigtoc=-bbigtoc ;;
+     esac
+
+     LDFLAGS=$LDFLAGS\ $gdb_cv_bigtoc
+     AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM([], [int i;])],
+       [],
+       [gdb_cv_bigtoc=]
+     )
+     LDFLAGS="${SAVE_LDFLAGS}"]
+  )
   CONFIG_LDFLAGS="${CONFIG_LDFLAGS} ${gdb_cv_bigtoc}"
   ;;
 esac
@@ -1617,7 +1614,11 @@ if test "${gdb_native}" = yes; then
    RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
    LDFLAGS="$LDFLAGS $RDYNAMIC"
    if test "${have_libpython}" = no; then
-     AC_TRY_LINK([], [], [dynamic_list=true])
+     AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM([], [])],
+       [dynamic_list=true],
+       []
+     )
    else
      # Workaround http://bugs.python.org/issue4434 where static
      # libpythonX.Y.a would get its symbols required for
@@ -1640,7 +1641,7 @@ if test "${gdb_native}" = yes; then
          [#include "Python.h"],
          [int err;
           Py_Initialize ();
-          err = PyRun_SimpleString ("import itertools\n");
+          err = PyRun_SimpleString ("import ctypes\n");
           Py_Finalize ();
           return err == 0 ? 0 : 1;])],
        [dynamic_list=true], [], [true])
@@ -1660,25 +1661,52 @@ fi
 AC_SUBST(RDYNAMIC)
 AC_MSG_RESULT($found)
 
+AC_CACHE_CHECK(
+  [whether execinfo.h backtrace is available],
+  gdb_cv_execinfo_backtrace,
+  [AC_LINK_IFELSE(
+     [AC_LANG_PROGRAM(
+        [
+         #include <execinfo.h>
+        ],
+        [
+         int f;
+         void *b[[2]];
+         f = backtrace (b, 2);
+         backtrace_symbols_fd (b, f, 2);
+        ])],
+   [gdb_cv_execinfo_backtrace=yes],
+   [gdb_cv_execinfo_backtrace=no])])
+if test "$gdb_cv_execinfo_backtrace" = yes; then
+  AC_DEFINE(HAVE_EXECINFO_BACKTRACE, 1,
+            [Define to 1 if execinfo.h backtrace functions are available.])
+fi
+
 dnl For certain native configurations, we need to check whether thread
 dnl support can be built in or not.
 dnl
 dnl Note that we only want this if we are both native (host == target),
 dnl and not doing a canadian cross build (build == host).
 
-if test ${build} = ${host} -a ${host} = ${target} ; then
+if test "${build}" = "${host}" -a "${host}" = "${target}" ; then
    case ${host_os} in
    aix*)
       AC_MSG_CHECKING(for AiX thread debugging library)
-      AC_CACHE_VAL(gdb_cv_have_aix_thread_debug,
-                   [AC_TRY_COMPILE([#include <sys/pthdebug.h>],
-                                   [#ifndef PTHDB_VERSION_3
-                                    #error
-                                    #endif],
-                                   gdb_cv_have_aix_thread_debug=yes,
-                                   gdb_cv_have_aix_thread_debug=no)])
+      AC_CACHE_VAL(
+	[gdb_cv_have_aix_thread_debug],
+	[AC_COMPILE_IFELSE(
+	   [AC_LANG_PROGRAM(
+	      [#include <sys/pthdebug.h>],
+	      [#ifndef PTHDB_VERSION_3
+	       #error
+	       #endif]
+	    )],
+	   [gdb_cv_have_aix_thread_debug=yes],
+	   [gdb_cv_have_aix_thread_debug=no]
+	 )]
+      )
       AC_MSG_RESULT($gdb_cv_have_aix_thread_debug)
-      if test $gdb_cv_have_aix_thread_debug = yes; then
+      if test "$gdb_cv_have_aix_thread_debug" = yes; then
          CONFIG_SRCS="${CONFIG_SRCS} aix-thread.c"
          CONFIG_OBS="${CONFIG_OBS} aix-thread.o"
          LIBS="$LIBS -lpthdebug"
@@ -1696,33 +1724,44 @@ fi
 dnl See if we have a thread_db header file that has TD_NOTALLOC and
 dnl other error codes.
 if test "x$ac_cv_header_thread_db_h" = "xyes"; then
-   AC_CACHE_CHECK([whether <thread_db.h> has TD_NOTALLOC],
-                  gdb_cv_thread_db_h_has_td_notalloc,
-     AC_TRY_COMPILE(
-       [#include <thread_db.h>],
-       [int i = TD_NOTALLOC;],
-       gdb_cv_thread_db_h_has_td_notalloc=yes,
-       gdb_cv_thread_db_h_has_td_notalloc=no
-     )
-   )
-   AC_CACHE_CHECK([whether <thread_db.h> has TD_VERSION],
-                  gdb_cv_thread_db_h_has_td_version,
-     AC_TRY_COMPILE(
-       [#include <thread_db.h>],
-       [int i = TD_VERSION;],
-       gdb_cv_thread_db_h_has_td_version=yes,
-       gdb_cv_thread_db_h_has_td_version=no
-     )
-   )
-   AC_CACHE_CHECK([whether <thread_db.h> has TD_NOTLS],
-                  gdb_cv_thread_db_h_has_td_notls,
-     AC_TRY_COMPILE(
-       [#include <thread_db.h>],
-       [int i = TD_NOTLS;],
-       gdb_cv_thread_db_h_has_td_notls=yes,
-       gdb_cv_thread_db_h_has_td_notls=no
-     )
-   )
+  AC_CACHE_CHECK(
+    [whether <thread_db.h> has TD_NOTALLOC],
+    [gdb_cv_thread_db_h_has_td_notalloc],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+	  [#include <thread_db.h>],
+	  [int i = TD_NOTALLOC;]
+	)],
+       [gdb_cv_thread_db_h_has_td_notalloc=yes],
+       [gdb_cv_thread_db_h_has_td_notalloc=no]
+     )]
+  )
+
+  AC_CACHE_CHECK(
+    [whether <thread_db.h> has TD_VERSION],
+    [gdb_cv_thread_db_h_has_td_version],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+	  [#include <thread_db.h>],
+	  [int i = TD_VERSION;]
+	)],
+       [gdb_cv_thread_db_h_has_td_version=yes],
+       [gdb_cv_thread_db_h_has_td_version=no]
+     )]
+  )
+
+  AC_CACHE_CHECK(
+    [whether <thread_db.h> has TD_NOTLS],
+    [gdb_cv_thread_db_h_has_td_notls],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+	  [#include <thread_db.h>],
+	  [int i = TD_NOTLS;]
+	)],
+       [gdb_cv_thread_db_h_has_td_notls=yes],
+       [gdb_cv_thread_db_h_has_td_notls=no]
+     )]
+  )
 fi
 if test "x$gdb_cv_thread_db_h_has_td_notalloc" = "xyes"; then
   AC_DEFINE(THREAD_DB_HAS_TD_NOTALLOC, 1,
@@ -1737,29 +1776,6 @@ if test "x$gdb_cv_thread_db_h_has_td_not
             [Define if <thread_db.h> has the TD_NOTLS error code.])
 fi
 
-dnl Check if we can disable the virtual address space randomization.
-dnl The functionality of setarch -R.
-AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
-define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [
-#      if !HAVE_DECL_ADDR_NO_RANDOMIZE
-#       define ADDR_NO_RANDOMIZE 0x0040000
-#      endif
-       /* Test the flag could be set and stays set.  */
-       personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
-       if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
-	   return 1])])
-AC_RUN_IFELSE([PERSONALITY_TEST],
-	      [have_personality=true],
-	      [have_personality=false],
-	      [AC_LINK_IFELSE([PERSONALITY_TEST],
-			      [have_personality=true],
-			      [have_personality=false])])
-if $have_personality
-then
-    AC_DEFINE([HAVE_PERSONALITY], 1,
-	      [Define if you support the personality syscall.])
-fi
-
 dnl Set the host's .gdbinit filename.
 case $host_os in
   go32* | *djgpp*)
@@ -1771,6 +1787,9 @@ case $host_os in
 esac
 AC_DEFINE_UNQUOTED(GDBINIT,"$gdbinit",[The .gdbinit filename.])
 
+dnl Set the host's .gdbearlyinit filename
+AC_DEFINE_UNQUOTED(GDBEARLYINIT,".gdbearlyinit",[The .gdbearlyinit filename.])
+
 dnl Handle optional features that can be enabled.
 
 # Support for --with-sysroot is a copy of GDB_AC_WITH_DIR,
@@ -1795,6 +1814,7 @@ GDB_AC_WITH_DIR(SYSTEM_GDBINIT_DIR, syst
     [automatically load system-wide gdbinit files from this directory],
     [])
 
+AM_GDB_COMPILER_TYPE
 AM_GDB_WARNINGS
 AM_GDB_UBSAN
 
@@ -1818,7 +1838,7 @@ AC_SUBST(SER_HARDWIRE)
 
 # libreadline needs libuser32.a in a cygwin environment
 WIN32LIBS=
-if test x$gdb_cv_os_cygwin = xyes; then
+if test x"$gdb_cv_os_cygwin" = xyes; then
     WIN32LIBS="-luser32"
     case "${target}" in
 	*cygwin*) WIN32LIBS="$WIN32LIBS -limagehlp"
@@ -1827,23 +1847,15 @@ if test x$gdb_cv_os_cygwin = xyes; then
 fi
 
 # The ser-tcp.c module requires sockets.
-case ${host} in
-  *mingw32*)
-    AC_DEFINE(USE_WIN32API, 1,
-              [Define if we should use the Windows API, instead of the
-	       POSIX API.  On Windows, we use the Windows API when
-	       building for MinGW, but the POSIX API when building
-	       for Cygwin.])
-    WIN32LIBS="$WIN32LIBS -lws2_32"
-    ;;
-esac
-AC_SUBST(WIN32LIBS)
+# Note that WIN32APILIBS is set by GDB_AC_COMMON.
+WIN32LIBS="$WIN32LIBS $WIN32APILIBS"
 
 # Add ELF support to GDB, but only if BFD includes ELF support.
 GDB_AC_CHECK_BFD([for ELF support in BFD], gdb_cv_var_elf,
                  [bfd_get_elf_phdr_upper_bound (NULL)], elf-bfd.h)
-if test $gdb_cv_var_elf = yes; then
-  CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o dtrace-probe.o"
+if test "$gdb_cv_var_elf" = yes; then
+  CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o dtrace-probe.o \
+		gcore-elf.o elf-none-tdep.o"
   AC_DEFINE(HAVE_ELF, 1,
 	    [Define if ELF support should be included.])
   # -ldl is provided by bfd/Makfile.am (LIBDL) <PLUGINS>.
@@ -1855,7 +1867,7 @@ fi
 # Add macho support to GDB, but only if BFD includes it.
 GDB_AC_CHECK_BFD([for Mach-O support in BFD], gdb_cv_var_macho,
                  [bfd_mach_o_lookup_command (NULL, 0, NULL)], mach-o.h)
-if test $gdb_cv_var_macho = yes; then
+if test "$gdb_cv_var_macho" = yes; then
   CONFIG_OBS="$CONFIG_OBS machoread.o"
 fi
 
@@ -1863,7 +1875,7 @@ fi
 CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}"
 
 # If building on ELF, look for lzma support for embedded compressed debug info.
-if test $gdb_cv_var_elf = yes; then
+if test "$gdb_cv_var_elf" = yes; then
   AC_ARG_WITH(lzma,
     AS_HELP_STRING([--with-lzma], [support lzma compression (auto/yes/no)]),
     [], [with_lzma=auto])
@@ -1992,7 +2004,7 @@ if test "${enable_gdbtk}" = "yes"; then
 	CONFIG_INSTALL="${CONFIG_INSTALL} install-gdbtk"
 	CONFIG_UNINSTALL="${CONFIG_UNINSTALL} uninstall-gdbtk"
 
-	if test x$gdb_cv_os_cygwin = xyes; then
+	if test x"$gdb_cv_os_cygwin" = xyes; then
 	  WIN32LIBS="${WIN32LIBS} -lshell32 -lgdi32 -lcomdlg32 -ladvapi32"
 	  WIN32LDAPP="-Wl,--subsystem,console"
 	  CONFIG_OBS="${CONFIG_OBS} gdbres.o"
@@ -2039,7 +2051,6 @@ if test "${ignore_sim}" = "false"; then
   if test x"${gdb_sim}" != x ; then
     SIM="${gdb_sim}"
     SIM_OBS="remote-sim.o"
-    AC_DEFINE(WITH_SIM, 1, [Define if the simulator is being linked in.])
 
     # Some tdep code should only be compiled in when the ppc sim is
     # built.  PR sim/13418.
@@ -2098,36 +2109,28 @@ if test x"${gdb_osabi}" != x ; then
 		       [Define to the default OS ABI for this configuration.])
 fi
 
-AC_ARG_ENABLE(gdbserver,
-AS_HELP_STRING([--enable-gdbserver],
-               [automatically build gdbserver (yes/no/auto, default is auto)]),
-[case "${enableval}" in
-  yes| no|auto) ;;
-  *) AC_MSG_ERROR(bad value ${enableval} for --enable-gdbserver option) ;;
-esac],[enable_gdbserver=auto])
-
-# We only build gdbserver automatically in a native configuration, and
-# only if the user did not explicitly disable its build.
-if test "$gdb_native" = "yes" -a "$enable_gdbserver" != "no"; then
-  AC_MSG_CHECKING(whether gdbserver is supported on this host)
-  if test "x$build_gdbserver" = xyes; then
-    AC_MSG_RESULT(yes)
-    AC_CONFIG_SUBDIRS(gdbserver)
-    gdbserver_build_enabled=yes
-  else
-    AC_MSG_RESULT(no)
-  fi
+# Setup possible use of libbacktrace.
+AC_ARG_ENABLE([libbacktrace],
+	      [AS_HELP_STRING([--enable-libbacktrace],
+			      [use libbacktrace to write a backtrace after a fatal signal.])],
+	      [GDB_CHECK_YES_NO_VAL([$enableval], [--enable-libbacktrace])],
+	      [enable_libbacktrace=yes])
+
+if test "${enable_libbacktrace}" = "yes"; then
+  LIBBACKTRACE_INC="-I$srcdir/../libbacktrace/ -I../libbacktrace/"
+  LIBBACKTRACE_LIB=../libbacktrace/libbacktrace.la
+  AC_DEFINE(HAVE_LIBBACKTRACE, 1, [Define if libbacktrace is being used.])
+else
+  LIBBACKTRACE_INC=
+  LIBBACKTRACE_LIB=
 fi
 
-# If the user explicitly request the gdbserver to be built, verify that
-# we were in fact able to enable it.
-if test "$enable_gdbserver" = "yes" -a "$gdbserver_build_enabled" != "yes"; then
-  AC_MSG_ERROR(Automatic gdbserver build is not supported for this configuration)
-fi
+AC_SUBST(LIBBACKTRACE_INC)
+AC_SUBST(LIBBACKTRACE_LIB)
 
 # Check for babeltrace and babeltrace-ctf
 AC_ARG_WITH(babeltrace,
-  AC_HELP_STRING([--with-babeltrace], [include babeltrace support (auto/yes/no)]),
+  AS_HELP_STRING([--with-babeltrace], [include babeltrace support (auto/yes/no)]),
   [], [with_babeltrace=auto])
 AC_MSG_CHECKING([whether to use babeltrace])
 AC_MSG_RESULT([$with_babeltrace])
@@ -2168,28 +2171,20 @@ else
   fi
 fi
 
-# Check for xxhash
-AC_ARG_WITH(xxhash,
-  AC_HELP_STRING([--with-xxhash], [use libxxhash for hashing (faster) (auto/yes/no)]),
-  [], [with_xxhash=auto])
-
-if test "x$with_xxhash" != "xno"; then
-  AC_LIB_HAVE_LINKFLAGS([xxhash], [],
-			[#include <xxhash.h>],
-			[XXH32("foo", 3, 0);
-			])
-  if test "$HAVE_LIBXXHASH" != yes; then
-    if test "$with_xxhash" = yes; then
-      AC_MSG_ERROR([xxhash is missing or unusable])
-    fi
-  fi
-  if test "x$with_xxhash" = "xauto"; then
-    with_xxhash="$HAVE_LIBXXHASH"
-  fi
+GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections])
+if test "${enable_libctf}" = yes; then
+  AC_DEFINE(ENABLE_LIBCTF, 1, [Handle .ctf type-info sections])
+  LIBCTF="../libctf/libctf.la"
+  CTF_DEPS="../libctf/libctf.la"
+else
+  LIBCTF=
+  CTF_DEPS=
 fi
+AC_SUBST(LIBCTF)
+AC_SUBST(CTF_DEPS)
 
-AC_MSG_CHECKING([whether to use xxhash])
-AC_MSG_RESULT([$with_xxhash])
+# If nativefile (NAT_FILE) is not set in configure.nat, we link to an
+# empty version.
 
 NM_H=
 rm -f nm.h
@@ -2210,7 +2205,7 @@ dnl Add dependency for xsltproc if build
 AC_PATH_PROGS(XSLTPROC, xsltproc, missing)
 if test "x$USE_MAINTAINER_MODE" = xyes; then
   if test "${XSLTPROC}" = missing; then
-    AC_ERROR(unable to find xsltproc.  maintainer-mode requires xsltproc.)
+    AC_MSG_ERROR(unable to find xsltproc.  maintainer-mode requires xsltproc.)
   fi
 fi
 AC_SUBST(XSLTPROC)
@@ -2224,8 +2219,8 @@ AC_DEFINE(GDB_DEFAULT_HOST_CHARSET, "UTF
           [Define to be a string naming the default host character set.])
 
 GDB_AC_SELFTEST([
-  CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) gdbsupport/selftest.o selftest-arch.o"
-  CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) gdbsupport/selftest.c selftest-arch.c"
+  CONFIG_OBS="$CONFIG_OBS \$(SELFTESTS_OBS)"
+  CONFIG_SRCS="$CONFIG_SRCS \$(SELFTESTS_SRCS)"
 ])
 
 GDB_AC_TRANSFORM([gdb], [GDB_TRANSFORM_NAME])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure.host ./gdb/configure.host
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure.host	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/configure.host	2024-02-01 01:47:15.000000000 +0000
@@ -13,23 +13,17 @@
 # The default is $host_cpu.
 
 case $host in
- arm*-*-netbsdelf* | \
- i[34567]86-*-netbsdelf* | \
- m68*-*-netbsdelf* | \
- sparc-*-netbsdelf* | \
- vax-*-netbsdelf*)
-    ;;
  *-*-irix* | \
  *-*-solaris2.[01] | *-*-solaris2.[2-9]* | *-*-solaris2.10* | \
  alpha*-*-osf* | \
  alpha*-*-freebsd* | \
  alpha*-*-kfreebsd*-gnu | \
- arm*-*-netbsd* | \
+ arm*-*-netbsdaout* | \
  hppa*-*-hiux* | \
  i[34567]86-ncr-* | \
  i[34567]86-*-dgux* | \
  i[34567]86-*-lynxos* | \
- i[34567]86-*-netbsd* | \
+ i[34567]86-*-netbsdaout* | \
  i[34567]86-*-openbsd[0-2].* | i[34567]86-*-openbsd3.[0-3] | \
  i[34567]86-*-sco3.2v5* | \
  i[34567]86-*-sco3.2v4* | \
@@ -41,11 +35,11 @@ case $host in
  i[34567]86-*-unixware* | \
  i[34567]86-*-sysv* | \
  i[34567]86-*-isc* | \
- m68*-*-netbsd* | \
- sparc-*-netbsd* | \
+ m68*-*-netbsdaout* | \
+ sparc-*-netbsdaout* | \
  rs6000-*-lynxos* | \
  vax-*-bsd* | \
- vax-*-netbsd* | \
+ vax-*-netbsdaout* | \
  vax-*-ultrix* | \
  hppa*-*-hpux* | \
  ia64-*-hpux* | \
@@ -60,9 +54,11 @@ case "${host_cpu}" in
 
 aarch64*)		gdb_host_cpu=aarch64 ;;
 alpha*)			gdb_host_cpu=alpha ;;
+arc*)			gdb_host_cpu=arc ;;
 arm*)			gdb_host_cpu=arm ;;
 hppa*)			gdb_host_cpu=pa ;;
 i[34567]86*)		gdb_host_cpu=i386 ;;
+loongarch*)		gdb_host_cpu=loongarch ;;
 m68*)			gdb_host_cpu=m68k ;;
 mips*)			gdb_host_cpu=mips ;;
 powerpc* | rs6000)	gdb_host_cpu=powerpc ;;
@@ -87,13 +83,15 @@ aarch64*-*-linux*)	gdb_host=linux ;;
 aarch64*-*-freebsd*)	gdb_host=fbsd ;;
 
 alpha*-*-linux*)	gdb_host=alpha-linux ;;
-alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu)
+alpha*-*-netbsdaout* | alpha*-*-knetbsdaout*-gnu)
 			gdb_host=nbsd ;;
 alpha*-*-openbsd*)	gdb_host=nbsd ;;
 
+arc*-*-linux*)		gdb_host=linux ;;
+
 arm*-*-freebsd*)	gdb_host=fbsd ;;
 arm*-*-linux*)		gdb_host=linux ;;
-arm*-*-netbsdelf* | arm*-*-knetbsd*-gnu)
+arm*-*-netbsd* | arm*-*-knetbsd*-gnu)
 			gdb_host=nbsdelf ;;
 arm*-*-openbsd*)	gdb_host=nbsdelf ;;
 
@@ -103,7 +101,7 @@ hppa*-*-openbsd*)	gdb_host=obsd ;;
 
 i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
 			gdb_host=fbsd ;;
-i[34567]86-*-netbsdelf* | i[34567]86-*-knetbsd*-gnu)
+i[34567]86-*-netbsd* | i[34567]86-*-knetbsd*-gnu)
 			gdb_host=nbsdelf ;;
 i[34567]86-*-go32*)	gdb_host=go32 ;;
 i[34567]86-*-mingw32*)	gdb_host=mingw
@@ -120,23 +118,27 @@ i[34567]86-*-cygwin*)	gdb_host=cygwin ;;
 
 ia64-*-linux*)		gdb_host=linux ;;
 
+loongarch*-linux*)	gdb_host=linux ;;
+
 m68*-*-linux*)		gdb_host=linux ;;
-m68*-*-netbsdelf* | m68*-*-knetbsd*-gnu)
+m68*-*-netbsd* | m68*-*-knetbsd*-gnu)
 			gdb_host=nbsdelf ;;
 m68*-*-openbsd*)	gdb_host=obsd ;;
 
 m88*-*-openbsd*)	gdb_host=obsd ;;
 
 mips*-*-linux*)		gdb_host=linux ;;
-mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
+mips*-*-netbsdaout* | mips*-*-knetbsd*-gnu)
 			gdb_host=nbsd ;;
 mips*-*-freebsd*)	gdb_host=fbsd ;;
 mips64*-*-openbsd*)	gdb_host=obsd64 ;;
 
+or1k-*-linux*)		gdb_host=linux ;;
+
 powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
 			gdb_host=aix ;;
 powerpc*-*-freebsd*)	gdb_host=fbsd ;;
-powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
+powerpc-*-netbsdaout* | powerpc-*-knetbsd*-gnu)
 			gdb_host=nbsd ;;
 powerpc-*-openbsd*)	gdb_host=obsd ;;
 
@@ -148,7 +150,7 @@ riscv*-*-linux*)	gdb_host=linux ;;
 
 s390*-*-linux*)		gdb_host=linux ;;
 
-sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu)
+sh*-*-netbsd* | sh*-*-knetbsd*-gnu)
 			gdb_host=nbsd ;;
 sh*-*-openbsd*)		gdb_host=nbsd ;;
 
@@ -156,7 +158,7 @@ sparc64-*-freebsd* | sparc64-*-kfreebsd*
 			gdb_host=fbsd ;;
 sparc-*-linux*)		gdb_host=linux ;;
 sparc64-*-linux*)	gdb_host=linux64 ;;
-sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu)
+sparc-*-netbsd* | sparc-*-knetbsd*-gnu)
 			gdb_host=nbsdelf ;;
 sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu)
 			gdb_host=nbsd64 ;;
@@ -168,7 +170,7 @@ sparc-*-solaris2* | sparcv9-*-solaris2*
 
 tilegx-*-linux*)	gdb_host=linux ;;
 
-vax-*-netbsdelf* | vax-*-knetbsd*-gnu)
+vax-*-netbsd* | vax-*-knetbsd*-gnu)
 			gdb_host=nbsdelf ;;
 vax-*-openbsd*)		gdb_host=obsd ;;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure.nat ./gdb/configure.nat
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure.nat	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/configure.nat	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 # ; -*- mode: sh ; -*-
-# Copyright (C) 2013-2019 Free Software Foundation, Inc.
+# Copyright (C) 2013-2024 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
@@ -68,17 +68,17 @@ case ${gdb_host} in
 	LOADLIBES='-lkvm'
 	;;
     nbsd*)
-	NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o'
+	NATDEPFILES='fork-child.o nat/fork-inferior.o nat/netbsd-nat.o inf-ptrace.o'
 	HAVE_NATIVE_GCORE_HOST=1
 	;;
     obsd*)
 	NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o'
 	;;
     cygwin*)
-	NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o'
+	NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o nat/windows-nat.o'
 	;;
     mingw*)
-	NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o'
+	NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o nat/windows-nat.o'
 	;;
     aix)
 	NATDEPFILES='nat/fork-inferior.o fork-child.o inf-ptrace.o'
@@ -103,7 +103,7 @@ case ${gdb_host} in
 		# Host: IBM PowerPC running AIX aix-thread.o is not
 		# listed in NATDEPFILES as it is pulled in by
 		# configure.
-		NATDEPFILES="${NATDEPFILES} rs6000-nat.o"
+		NATDEPFILES="${NATDEPFILES} rs6000-aix-nat.o"
 
 		# When compiled with cc, for debugging, this argument
 		# should be passed.  We have no idea who our current
@@ -137,7 +137,7 @@ case ${gdb_host} in
 	    i386)
 		# Native config information for GDB on amd64
 		# systems running Cygwin.
-		NATDEPFILES="${NATDEPFILES} amd64-windows-nat.o"
+		NATDEPFILES="${NATDEPFILES} i386-windows-nat.o amd64-windows-nat.o"
 		;;
 	esac
 	;;
@@ -154,7 +154,8 @@ case ${gdb_host} in
 	case ${gdb_host_cpu} in
 	    aarch64)
 		# Host: FreeBSD/aarch64
-		NATDEPFILES="${NATDEPFILES} aarch64-fbsd-nat.o"
+		NATDEPFILES="${NATDEPFILES} aarch64-nat.o \
+		nat/aarch64-hw-point.o aarch64-fbsd-nat.o"
 		LOADLIBES=
 		;;
 	    arm)
@@ -165,7 +166,8 @@ case ${gdb_host} in
 	    i386)
 		# Host: FreeBSD/i386
 		NATDEPFILES="${NATDEPFILES} x86-nat.o nat/x86-dregs.o \
-		x86-bsd-nat.o i386-bsd-nat.o i386-fbsd-nat.o bsd-kvm.o"
+		nat/x86-xstate.o x86-bsd-nat.o x86-fbsd-nat.o i386-fbsd-nat.o \
+		bsd-kvm.o"
 		;;
 	    mips)
 		# Host: FreeBSD/mips
@@ -192,9 +194,9 @@ case ${gdb_host} in
 	case ${gdb_host_cpu} in
 	    i386)
 		# Host: FreeBSD/amd64
-		NATDEPFILES="${NATDEPFILES} amd64-nat.o amd64-bsd-nat.o \
+		NATDEPFILES="${NATDEPFILES} amd64-nat.o \
 		amd64-fbsd-nat.o bsd-kvm.o x86-nat.o nat/x86-dregs.o \
-		x86-bsd-nat.o"
+		nat/x86-xstate.o x86-bsd-nat.o x86-fbsd-nat.o"
 		;;
 	esac
 	;;
@@ -233,10 +235,16 @@ case ${gdb_host} in
 	case ${gdb_host_cpu} in
 	    aarch64)
 		#  Host: AArch64 based machine running GNU/Linux
-		NATDEPFILES="${NATDEPFILES} aarch64-linux-nat.o \
-		aarch32-linux-nat.o nat/aarch64-linux-hw-point.o \
+		NATDEPFILES="${NATDEPFILES} aarch64-nat.o aarch64-linux-nat.o \
+		aarch32-linux-nat.o nat/aarch64-hw-point.o \
+		nat/aarch64-linux-hw-point.o \
 		nat/aarch64-linux.o \
-		nat/aarch64-sve-linux-ptrace.o"
+		nat/aarch64-scalable-linux-ptrace.o \
+		nat/aarch64-mte-linux-ptrace.o"
+		;;
+	    arc)
+		# Host: ARC based machine running GNU/Linux
+		NATDEPFILES="${NATDEPFILES} arc-linux-nat.o"
 		;;
 	    arm)
 		# Host: ARM based machine running GNU/Linux
@@ -246,6 +254,7 @@ case ${gdb_host} in
 	    i386)
 		# Host: Intel 386 running GNU/Linux.
 		NATDEPFILES="${NATDEPFILES} x86-nat.o nat/x86-dregs.o \
+		nat/x86-xstate.o \
 		i386-linux-nat.o x86-linux-nat.o nat/linux-btrace.o \
 		nat/x86-linux.o nat/x86-linux-dregs.o"
 		;;
@@ -253,6 +262,10 @@ case ${gdb_host} in
 		# Host: Intel IA-64 running GNU/Linux
 		NATDEPFILES="${NATDEPFILES} ia64-linux-nat.o"
 		;;
+	    loongarch)
+		# Host: LoongArch, running GNU/Linux.
+		NATDEPFILES="${NATDEPFILES} loongarch-linux-nat.o linux-nat-trad.o"
+		;;
 	    m32r)
 		# Host: M32R based machine running GNU/Linux
 		NATDEPFILES="${NATDEPFILES} m32r-linux-nat.o"
@@ -266,6 +279,10 @@ case ${gdb_host} in
 		NATDEPFILES="${NATDEPFILES} linux-nat-trad.o \
 		mips-linux-nat.o nat/mips-linux-watch.o"
 		;;
+	    or1k)
+		# Host: Linux/OpenRISC
+		NATDEPFILES="${NATDEPFILES} or1k-linux-nat.o"
+		;;
 	    pa)
 		# Host: Hewlett-Packard PA-RISC machine, running Linux
 		NATDEPFILES="${NATDEPFILES} hppa-linux-nat.o"
@@ -276,7 +293,8 @@ case ${gdb_host} in
 		;;
 	    riscv*)
 		# Host: RISC-V, running Linux
-		NATDEPFILES="${NATDEPFILES} riscv-linux-nat.o"
+		NATDEPFILES="${NATDEPFILES} riscv-linux-nat.o \
+		nat/riscv-linux-tdesc.o"
 		;;
 	    s390)
 		# Host: S390, running Linux
@@ -302,7 +320,7 @@ case ${gdb_host} in
 	    i386)
 		# Host: GNU/Linux x86-64
 		NATDEPFILES="${NATDEPFILES} x86-nat.o nat/x86-dregs.o \
-		amd64-nat.o amd64-linux-nat.o x86-linux-nat.o \
+		nat/x86-xstate.o amd64-nat.o amd64-linux-nat.o x86-linux-nat.o \
 		nat/linux-btrace.o \
 		nat/x86-linux.o nat/x86-linux-dregs.o \
 		nat/amd64-linux-siginfo.o"
@@ -324,7 +342,7 @@ case ${gdb_host} in
     mingw64)
 	case ${gdb_host_cpu} in
 	    i386)
-		NATDEPFILES="${NATDEPFILES} amd64-windows-nat.o"
+		NATDEPFILES="${NATDEPFILES} i386-windows-nat.o amd64-windows-nat.o"
 		;;
 	esac
 	;;
@@ -337,20 +355,20 @@ case ${gdb_host} in
 		;;
 	    mips)
 		# Host: NetBSD/mips
-		NATDEPFILES="${NATDEPFILES} mips-nbsd-nat.o"
+		NATDEPFILES="${NATDEPFILES} mips-netbsd-nat.o"
 		;;
 	    pa)
 		# Host: NetBSD/hppa
-		NATDEPFILES="${NATDEPFILES} nbsd-nat.o hppa-nbsd-nat.o"
+		NATDEPFILES="${NATDEPFILES} netbsd-nat.o hppa-netbsd-nat.o"
 		;;
 	    powerpc)
 		# Host: NetBSD/powerpc
-		NATDEPFILES="${NATDEPFILES} ppc-nbsd-nat.o bsd-kvm.o"
+		NATDEPFILES="${NATDEPFILES} ppc-netbsd-nat.o bsd-kvm.o"
 		LOADLIBES='-lkvm'
 		;;
 	    sh)
 		# Host: NetBSD/sh
-		NATDEPFILES="${NATDEPFILES} sh-nbsd-nat.o"
+		NATDEPFILES="${NATDEPFILES} sh-netbsd-nat.o"
 		;;
 
 	esac
@@ -359,12 +377,12 @@ case ${gdb_host} in
 	case ${gdb_host_cpu} in
 	    i386)
 		# Host: NetBSD/amd64
-		NATDEPFILES="${NATDEPFILES} nbsd-nat.o amd64-nat.o x86-nat.o \
-		nat/x86-dregs.o x86-bsd-nat.o amd64-bsd-nat.o amd64-nbsd-nat.o"
+		NATDEPFILES="${NATDEPFILES} netbsd-nat.o amd64-nat.o x86-nat.o \
+		nat/x86-dregs.o x86-bsd-nat.o amd64-bsd-nat.o amd64-netbsd-nat.o"
 		;;
 	    sparc)
 		# Host: NetBSD/sparc64
-		NATDEPFILES="${NATDEPFILES} sparc64-nbsd-nat.o sparc-nat.o \
+		NATDEPFILES="${NATDEPFILES} sparc64-netbsd-nat.o sparc-nat.o \
 		bsd-kvm.o"
 		LOADLIBES='-lkvm'
 		;;
@@ -375,13 +393,13 @@ case ${gdb_host} in
 	case ${gdb_host_cpu} in
 	    arm)
 		# Host: NetBSD/arm
-		NATDEPFILES="${NATDEPFILES} arm-nbsd-nat.o"
+		NATDEPFILES="${NATDEPFILES} arm-netbsd-nat.o"
 		;;
 	    i386)
 		# Host: NetBSD/i386 ELF
-		NATDEPFILES="${NATDEPFILES} nbsd-nat.o x86-nat.o \
+		NATDEPFILES="${NATDEPFILES} netbsd-nat.o x86-nat.o \
 		nat/x86-dregs.o \
-		x86-bsd-nat.o i386-bsd-nat.o i386-nbsd-nat.o bsd-kvm.o"
+		x86-bsd-nat.o i386-bsd-nat.o i386-netbsd-nat.o bsd-kvm.o"
 		LOADLIBES='-lkvm'
 		;;
 	    m68k)
@@ -391,7 +409,7 @@ case ${gdb_host} in
 		;;
 	    sparc)
 		# Host: NetBSD/sparc ELF
-		NATDEPFILES="${NATDEPFILES} sparc-nat.o sparc-nbsd-nat.o \
+		NATDEPFILES="${NATDEPFILES} sparc-nat.o sparc-netbsd-nat.o \
 		bsd-kvm.o"
 		LOADLIBES='-lkvm'
 		;;
@@ -445,9 +463,8 @@ case ${gdb_host} in
 	case ${gdb_host_cpu} in
 	    i386)
 		# Host: OpenBSD/amd64
-		NATDEPFILES="${NATDEPFILES} obsd-nat.o amd64-nat.o x86-nat.o \
-		x86-bsd-nat.o amd64-bsd-nat.o amd64-obsd-nat.o bsd-kvm.o \
-		nat/x86-dregs.o"
+		NATDEPFILES="${NATDEPFILES} obsd-nat.o amd64-nat.o \
+		x86-bsd-nat.o amd64-bsd-nat.o amd64-obsd-nat.o bsd-kvm.o"
 		LOADLIBES='-lkvm'
 		;;
 	    mips)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure.tgt ./gdb/configure.tgt
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/configure.tgt	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/configure.tgt	2024-02-01 01:47:15.000000000 +0000
@@ -2,19 +2,26 @@
 # invoked from the autoconf generated configure script.
 
 # This file sets the following shell variables:
-#  gdb_target_obs	target-specific object files to use
-#  gdb_sim		simulator library for target
-#  gdb_osabi		default OS ABI to use with target
-#  build_gdbserver	set to "yes" if gdbserver supports target
-#  gdb_have_gcore	set to "true"/"false" if this target can run gcore
+#  gdb_target_obs         target-specific object files to use
+#  gdb_sim                simulator library for target
+#  gdb_osabi              default OS ABI to use with target
+#  gdb_have_gcore         set to "true"/"false" if this target can run gcore
+#  gdb_require_amd_dbgapi set to "true" if this target requires the amd-dbgapi
+#                         target
 
 # NOTE: Every file added to a gdb_target_obs variable for any target here
-#       must also be added to either ALL_TARGET_OBS or ALL_64_TARGET_OBS
+#       must also be added to either:
+#
+#         - ALL_TARGET_OBS
+#         - ALL_64_TARGET_OBS
+#         - ALL_AMD_DBGAPI_TARGET_OBS
+#
 #	in Makefile.in!
 
 case $targ in
  *-*-irix* | \
  *-*-solaris2.[01] | *-*-solaris2.[2-9]* | *-*-solaris2.10* | \
+ *-*-netbsdpe* | \
  alpha*-*-osf* | \
  alpha*-*-freebsd* | \
  alpha*-*-kfreebsd*-gnu | \
@@ -26,6 +33,7 @@ case $targ in
  m68*-*-os68k* | \
  mips*-*-pe | \
  rs6000-*-lynxos* | \
+ score-*-* | \
  sh*-*-pe | \
  hppa*-*-hpux* | \
  ia64-*-hpux* | \
@@ -40,7 +48,8 @@ esac
 
 x86_tobjs="x86-tdep.o"
 i386_tobjs="i386-tdep.o arch/i386.o i387-tdep.o ${x86_tobjs}"
-amd64_tobjs="amd64-tdep.o arch/amd64.o ${x86_tobjs}"
+amd64_tobjs="ravenscar-thread.o amd64-ravenscar-thread.o \
+    amd64-tdep.o arch/amd64.o ${x86_tobjs}"
 
 # Here are three sections to get a list of target specific object
 # files according to target triplet $TARG.
@@ -60,12 +69,13 @@ alpha*-*-*)
 
 arc*-*-*)
 	# Target: Unidentified ARC target
-	cpu_obs="arc-tdep.o"
+	cpu_obs="arc-tdep.o arch/arc.o"
 	;;
 
 arm*-*-*)
 	cpu_obs="aarch32-tdep.o arch/aarch32.o arch/arm.o \
-		 arch/arm-get-next-pcs.o arm-tdep.o";;
+		 arch/arm-get-next-pcs.o arm-tdep.o arm-none-tdep.o"
+	;;
 
 hppa*-*-*)
 	# Target: HP PA-RISC
@@ -79,13 +89,24 @@ i[34567]86-*-*)
 	fi
 	;;
 
+ia16*-*-*)
+	# Target: Intel IA-16
+	cpu_obs="${i386_tobjs}"
+	;;
+
 ia64*-*-*)
 	# Target: Intel IA-64
 	cpu_obs="ia64-tdep.o"
 	;;
 
+loongarch*-*-*)
+	# Target: LoongArch baremetal
+	cpu_obs="loongarch-tdep.o arch/loongarch.o"
+	;;
+
 riscv*-*-*)
-	cpu_obs="riscv-tdep.o arch/riscv.o";;
+	cpu_obs="riscv-tdep.o riscv-none-tdep.o arch/riscv.o \
+	         ravenscar-thread.o riscv-ravenscar-thread.o";;
 
 x86_64-*-*)
 	cpu_obs="${i386_tobjs} ${amd64_tobjs}";;
@@ -103,7 +124,7 @@ case "${targ}" in
 *-*-freebsd* | *-*-kfreebsd*-gnu)
 	os_obs="fbsd-tdep.o solib-svr4.o";;
 *-*-netbsd* | *-*-knetbsd*-gnu)
-	os_obs="nbsd-tdep.o solib-svr4.o";;
+	os_obs="netbsd-tdep.o solib-svr4.o";;
 *-*-openbsd*)
 	os_obs="obsd-tdep.o solib-svr4.o";;
 esac
@@ -124,11 +145,12 @@ aarch64*-*-freebsd*)
 aarch64*-*-linux*)
 	# Target: AArch64 linux
 	gdb_target_obs="aarch64-linux-tdep.o arch/aarch64.o\
+			arch/aarch64-mte-linux.o \
+			arch/aarch64-scalable-linux.o \
 			arch/arm.o arch/arm-linux.o arch/arm-get-next-pcs.o \
 			arm-tdep.o arm-linux-tdep.o \
 			glibc-tdep.o linux-tdep.o solib-svr4.o \
 			symfile-mem.o linux-record.o"
-	build_gdbserver=yes
 	;;
 
 alpha*-*-linux*)
@@ -139,12 +161,18 @@ alpha*-*-linux*)
 alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu)
 	# Target: NetBSD/alpha
 	gdb_target_obs="alpha-mdebug-tdep.o alpha-bsd-tdep.o \
-			alpha-nbsd-tdep.o"
+			alpha-netbsd-tdep.o"
 	;;
 alpha*-*-openbsd*)
 	# Target: OpenBSD/alpha
 	gdb_target_obs="alpha-mdebug-tdep.o alpha-bsd-tdep.o \
-			alpha-nbsd-tdep.o alpha-obsd-tdep.o nbsd-tdep.o"
+			alpha-netbsd-tdep.o alpha-obsd-tdep.o netbsd-tdep.o"
+	;;
+
+amdgcn*-*-*)
+	# Target: AMDGPU
+	gdb_require_amd_dbgapi=true
+	gdb_target_obs="amdgpu-tdep.o solib-rocm.o"
 	;;
 
 am33_2.0*-*-linux*)
@@ -158,16 +186,19 @@ arc*-*-elf32)
 	gdb_target_obs="arc-newlib-tdep.o"
 	;;
 
+arc*-*-linux*)
+	# Target: ARC machine running Linux
+	gdb_target_obs="arc-linux-tdep.o linux-tdep.o solib-svr4.o"
+	;;
+
 arm*-wince-pe | arm*-*-mingw32ce*)
 	# Target: ARM based machine running Windows CE (win32)
 	gdb_target_obs="arm-wince-tdep.o windows-tdep.o"
-	build_gdbserver=yes
 	;;
 arm*-*-linux*)
 	# Target: ARM based machine running GNU/Linux
 	gdb_target_obs="arch/arm-linux.o arm-linux-tdep.o glibc-tdep.o \
 			solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o"
-	build_gdbserver=yes
 	;;
 arm*-*-freebsd*)
 	# Target: FreeBSD/arm
@@ -175,38 +206,34 @@ arm*-*-freebsd*)
 	;;
 arm*-*-netbsd* | arm*-*-knetbsd*-gnu)
 	# Target: NetBSD/arm
-	gdb_target_obs="arm-nbsd-tdep.o"
+	gdb_target_obs="arm-netbsd-tdep.o"
 	;;
 arm*-*-openbsd*)
 	# Target: OpenBSD/arm
 	gdb_target_obs="arm-bsd-tdep.o arm-obsd-tdep.o"
 	;;
-arm*-*-symbianelf*)
-	# Target: SymbianOS/arm
-	gdb_target_obs="arm-symbian-tdep.o"
-	;;
 arm*-*-*)
 	# Target: ARM embedded system
 	gdb_target_obs="arm-pikeos-tdep.o"
-	gdb_sim=../sim/arm/libsim.a
 	;;
 
 avr-*-*)
 	# Target: AVR
 	gdb_target_obs="avr-tdep.o"
-	gdb_sim=../sim/avr/libsim.a
 	;;
 
 bfin-*-*linux*)
 	# Target: Blackfin Linux
 	gdb_target_obs="bfin-tdep.o bfin-linux-tdep.o linux-tdep.o"
-	gdb_sim=../sim/bfin/libsim.a
-	build_gdbserver=yes
 	;;
 bfin-*-*)
 	# Target: Blackfin processor
 	gdb_target_obs="bfin-tdep.o"
-	gdb_sim=../sim/bfin/libsim.a
+	;;
+
+bpf-*-*)
+	# Target: eBPF
+	gdb_target_obs="bpf-tdep.o"
 	;;
 
 cris*)
@@ -228,18 +255,15 @@ csky*-*-*)
 frv-*-*)
 	# Target: Fujitsu FRV processor
 	gdb_target_obs="frv-tdep.o frv-linux-tdep.o linux-tdep.o solib-frv.o"
-	gdb_sim=../sim/frv/libsim.a
 	;;
 
 moxie-*-elf | moxie-*-moxiebox | moxie-*-rtems*)
 	gdb_target_obs="moxie-tdep.o"
-	gdb_sim=../sim/moxie/libsim.a
 	;;
 
 h8300-*-*)
 	# Target: H8300 processor
 	gdb_target_obs="h8300-tdep.o"
-	gdb_sim=../sim/h8300/libsim.a
 	;;
 
 hppa*-*-linux*)
@@ -249,7 +273,7 @@ hppa*-*-linux*)
 	;;
 hppa*-*-netbsd*)
 	# Target: NetBSD/hppa
-	gdb_target_obs="hppa-bsd-tdep.o hppa-nbsd-tdep.o solib-svr4.o"
+	gdb_target_obs="hppa-bsd-tdep.o hppa-netbsd-tdep.o solib-svr4.o"
 	;;
 hppa*-*-openbsd*)
 	# Target: OpenBSD/hppa
@@ -274,7 +298,7 @@ i[34567]86-*-freebsd* | i[34567]86-*-kfr
 	;;
 i[34567]86-*-netbsd* | i[34567]86-*-knetbsd*-gnu)
 	# Target: NetBSD/i386
-	gdb_target_obs="i386-bsd-tdep.o i386-nbsd-tdep.o "
+	gdb_target_obs="i386-bsd-tdep.o i386-netbsd-tdep.o "
 	;;
 i[34567]86-*-openbsd*)
 	# Target: OpenBSD/i386
@@ -284,7 +308,6 @@ i[34567]86-*-nto*)
 	# Target: Intel 386 running qnx6.
 	gdb_target_obs="solib-svr4.o \
 			i386-nto-tdep.o nto-tdep.o"
-	build_gdbserver=yes
 	;;
 i[34567]86-*-solaris2* | x86_64-*-solaris2*)
 	# Target: Solaris x86_64
@@ -302,7 +325,6 @@ i[34567]86-*-linux*)
 	    # Target: GNU/Linux x86-64
 	    gdb_target_obs="amd64-linux-tdep.o ${gdb_target_obs}"
 	fi
-	build_gdbserver=yes
 	;;
 i[34567]86-*-gnu*)
 	# Target: Intel 386 running the GNU Hurd
@@ -310,13 +332,11 @@ i[34567]86-*-gnu*)
 	;;
 i[34567]86-*-cygwin*)
 	# Target: Intel 386 running win32
-	gdb_target_obs="i386-cygwin-tdep.o windows-tdep.o"
-	build_gdbserver=yes
+	gdb_target_obs="i386-windows-tdep.o windows-tdep.o"
 	;;
 i[34567]86-*-mingw32*)
 	# Target: Intel 386 running win32
-	gdb_target_obs="i386-cygwin-tdep.o windows-tdep.o"
-	build_gdbserver=yes
+	gdb_target_obs="i386-windows-tdep.o windows-tdep.o"
 	;;
 i[34567]86-*-go32* | i[34567]86-*-msdosdjgpp*)
 	# Target: i386 running DJGPP/go32.
@@ -327,7 +347,6 @@ ia64-*-linux*)
 	# Target: Intel IA-64 running GNU/Linux
 	gdb_target_obs="ia64-linux-tdep.o linux-tdep.o \
 			solib-svr4.o symfile-mem.o"
-	build_gdbserver=yes
 	;;
 ia64-*-*vms*)
 	# Target: Intel IA-64 running OpenVMS
@@ -336,20 +355,21 @@ ia64-*-*vms*)
 
 iq2000-*-*)
 	gdb_target_obs="iq2000-tdep.o"
-	gdb_sim=../sim/iq2000/libsim.a
 	;;
 
 lm32-*-*)		
 	gdb_target_obs="lm32-tdep.o" 
-	gdb_sim=../sim/lm32/libsim.a
+	;;
+
+loongarch*-*-linux*)
+	# Target: LoongArch running Linux
+	gdb_target_obs="loongarch-linux-tdep.o glibc-tdep.o \
+			linux-tdep.o solib-svr4.o"
 	;;
 
 m32c-*-*)
 	# Target: Renesas M32C family
 	gdb_target_obs="m32c-tdep.o"
-	# There may also be a SID / CGEN simulator for this,
-	# but we do have DJ Delorie's mini-sim.
-	gdb_sim=../sim/m32c/libsim.a
 	;;
 
 m32r*-*-linux*)
@@ -357,19 +377,15 @@ m32r*-*-linux*)
 	gdb_target_obs="m32r-tdep.o m32r-linux-tdep.o \
 			glibc-tdep.o solib-svr4.o symfile-mem.o \
 			linux-tdep.o"
-	gdb_sim=../sim/m32r/libsim.a
-	build_gdbserver=yes
 	;;
 m32r*-*-*)
 	# Target: Renesas m32r processor
 	gdb_target_obs="m32r-tdep.o"
-	gdb_sim=../sim/m32r/libsim.a
 	;;
 
 m68hc11*-*-*|m6811*-*-*)
 	# Target: Motorola 68HC11 processor
 	gdb_target_obs="m68hc11-tdep.o"
-	gdb_sim=../sim/m68hc11/libsim.a
 	;;
 
 m68*-*-aout* | m68*-*-coff* | m68*-*-elf* | m68*-*-rtems* | m68*-*-uclinux* | \
@@ -381,7 +397,6 @@ m68*-*-linux*)
 	# Target: Motorola m68k with a.out and ELF
 	gdb_target_obs="m68k-tdep.o m68k-linux-tdep.o solib-svr4.o \
 			linux-tdep.o glibc-tdep.o symfile-mem.o"
-	build_gdbserver=yes
 	;;
 m68*-*-netbsd* | m68*-*-knetbsd*-gnu)
 	# Target: NetBSD/m68k
@@ -402,30 +417,24 @@ microblaze*-linux-*|microblaze*-*-linux*
 	# Target: Xilinx MicroBlaze running Linux
 	gdb_target_obs="microblaze-tdep.o microblaze-linux-tdep.o solib-svr4.o \
 			symfile-mem.o linux-tdep.o"
-	gdb_sim=../sim/microblaze/libsim.a
 	;;
 microblaze*-*-*)
 	# Target: Xilinx MicroBlaze running standalone
 	gdb_target_obs="microblaze-tdep.o"
-	gdb_sim=../sim/microblaze/libsim.a
 	;;
 
 mips*-*-linux*)
 	# Target: Linux/MIPS
 	gdb_target_obs="mips-tdep.o mips-linux-tdep.o glibc-tdep.o \
 			solib-svr4.o symfile-mem.o linux-tdep.o"
-	gdb_sim=../sim/mips/libsim.a
-	build_gdbserver=yes
 	;;
 mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
 	# Target: MIPS running NetBSD
-	gdb_target_obs="mips-tdep.o mips-nbsd-tdep.o"
-	gdb_sim=../sim/mips/libsim.a
+	gdb_target_obs="mips-tdep.o mips-netbsd-tdep.o"
 	;;
 mips*-*-freebsd*)
 	# Target: MIPS running FreeBSD
 	gdb_target_obs="mips-tdep.o mips-fbsd-tdep.o"
-	gdb_sim=../sim/mips/libsim.a
 	;;
 mips64*-*-openbsd*)
 	# Target: OpenBSD/mips64
@@ -434,28 +443,23 @@ mips64*-*-openbsd*)
 mips*-sde*-elf*)
 	# Target: MIPS SDE
 	gdb_target_obs="mips-tdep.o mips-sde-tdep.o"
-	gdb_sim=../sim/mips/libsim.a
 	;;
 mips*-*-elf)
 	# Target: MIPS ELF
 	gdb_target_obs="mips-tdep.o"
-	gdb_sim=../sim/mips/libsim.a
 	;;
 mips*-*-*)
 	# Target: MIPS
 	gdb_target_obs="mips-tdep.o"
-	gdb_sim=../sim/mips/libsim.a
 	;;
 
 mn10300-*-*)
 	# Target: Matsushita mn10300
 	gdb_target_obs="mn10300-tdep.o"
-	gdb_sim=../sim/mn10300/libsim.a
 	;;
 
-msp430*-*-elf)
+msp430-*-elf*)
 	gdb_target_obs="msp430-tdep.o"
-	gdb_sim=../sim/msp430/libsim.a
 	;;
 
 nds32*-*-elf)
@@ -478,14 +482,11 @@ or1k*-*-linux*)
 	# Target: OpenCores OpenRISC 1000 32-bit running Linux
 	gdb_target_obs="or1k-tdep.o or1k-linux-tdep.o solib-svr4.o \
 			symfile-mem.o glibc-tdep.o linux-tdep.o"
-	gdb_sim=../sim/or1k/libsim.a
-	build_gdbserver=yes
 	;;
 
 or1k-*-* | or1knd-*-*)
 	# Target: OpenCores OpenRISC 1000 32-bit implementation bare metal
 	gdb_target_obs="or1k-tdep.o"
-	gdb_sim=../sim/or1k/libsim.a
 	;;
 
 powerpc*-*-freebsd*)
@@ -497,9 +498,8 @@ powerpc*-*-freebsd*)
 
 powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
 	# Target: NetBSD/powerpc
-	gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppc-nbsd-tdep.o \
+	gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppc-netbsd-tdep.o \
 			ravenscar-thread.o ppc-ravenscar-thread.o"
-	gdb_sim=../sim/ppc/libsim.a
 	;;
 powerpc-*-openbsd*)
 	# Target: OpenBSD/powerpc
@@ -520,8 +520,6 @@ powerpc*-*-linux*)
 			ravenscar-thread.o ppc-ravenscar-thread.o \
 			linux-record.o \
 			arch/ppc-linux-common.o"
-	gdb_sim=../sim/ppc/libsim.a
-	build_gdbserver=yes
 	;;
 powerpc-*-lynx*178)
 	# Target: PowerPC running Lynx178.
@@ -533,14 +531,12 @@ powerpc*-*-*)
 	# Target: PowerPC running eabi
 	gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o solib-svr4.o \
 			ravenscar-thread.o ppc-ravenscar-thread.o"
-	gdb_sim=../sim/ppc/libsim.a
 	;;
 
 s390*-*-linux*)
 	# Target: S390 running Linux
 	gdb_target_obs="s390-linux-tdep.o s390-tdep.o solib-svr4.o \
 			linux-tdep.o linux-record.o symfile-mem.o"
-	build_gdbserver=yes
 	;;
 
 riscv*-*-freebsd*)
@@ -562,19 +558,11 @@ riscv*-*-*)
 rl78-*-elf)
 	# Target: Renesas rl78
 	gdb_target_obs="rl78-tdep.o"
-	gdb_sim=../sim/rl78/libsim.a
 	;;
 
-rx-*-elf)
+rx-*-*)
 	# Target: Renesas RX
 	gdb_target_obs="rx-tdep.o"
-	gdb_sim=../sim/rx/libsim.a
-	;;
-
-score-*-*)
-	# Target: S+core embedded system
-	gdb_target_obs="score-tdep.o"
-	build_gdbserver=yes
 	;;
 
 sh*-*-linux*)
@@ -582,44 +570,38 @@ sh*-*-linux*)
 	gdb_target_obs="sh-tdep.o sh-linux-tdep.o \
 			solib-svr4.o symfile-mem.o \
 			glibc-tdep.o linux-tdep.o"
-	gdb_sim=../sim/sh/libsim.a
-	build_gdbserver=yes
 	;;
-sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu)
+sh*-*-netbsd* | sh*-*-knetbsd*-gnu)
 	# Target: NetBSD/sh
-	gdb_target_obs="sh-tdep.o sh-nbsd-tdep.o"
-	gdb_sim=../sim/sh/libsim.a
+	gdb_target_obs="sh-tdep.o sh-netbsd-tdep.o"
 	;;
 sh*-*-openbsd*)
 	# Target: OpenBSD/sh
-	gdb_target_obs="sh-tdep.o sh-nbsd-tdep.o"
+	gdb_target_obs="sh-tdep.o sh-netbsd-tdep.o"
 	;;
 sh*)
 	# Target: Embedded Renesas Super-H processor
 	gdb_target_obs="sh-tdep.o"
-	gdb_sim=../sim/sh/libsim.a
 	;;
 
 sparc-*-linux*)
 	# Target: GNU/Linux SPARC
-	gdb_target_obs="sparc-tdep.o sparc-sol2-tdep.o sol2-tdep.o \
+	gdb_target_obs="sparc-tdep.o \
 			sparc-linux-tdep.o solib-svr4.o symfile-mem.o \
 			linux-tdep.o \
 			ravenscar-thread.o sparc-ravenscar-thread.o"
 	if test "x$enable_64_bit_bfd" = "xyes"; then
 	    # Target: GNU/Linux UltraSPARC
-	    gdb_target_obs="sparc64-tdep.o sparc64-sol2-tdep.o \
+	    gdb_target_obs="sparc64-tdep.o \
 			    sparc64-linux-tdep.o ${gdb_target_obs}"
 	fi
-	build_gdbserver=yes
 	;;
 sparc64-*-linux*)
 	# Target: GNU/Linux UltraSPARC
-	gdb_target_obs="sparc64-tdep.o sparc64-sol2-tdep.o sol2-tdep.o \
-			sparc64-linux-tdep.o sparc-tdep.o sparc-sol2-tdep.o \
+	gdb_target_obs="sparc64-tdep.o \
+			sparc64-linux-tdep.o sparc-tdep.o \
 			sparc-linux-tdep.o solib-svr4.o linux-tdep.o \
 			ravenscar-thread.o sparc-ravenscar-thread.o"
-	build_gdbserver=yes
 	;;
 sparc*-*-freebsd* | sparc*-*-kfreebsd*-gnu)
 	# Target: FreeBSD/sparc64
@@ -628,26 +610,26 @@ sparc*-*-freebsd* | sparc*-*-kfreebsd*-g
 	;;
 sparc-*-netbsd* | sparc-*-knetbsd*-gnu)
 	# Target: NetBSD/sparc
-	gdb_target_obs="sparc-tdep.o sparc-nbsd-tdep.o \
+	gdb_target_obs="sparc-tdep.o sparc-netbsd-tdep.o \
 			ravenscar-thread.o sparc-ravenscar-thread.o"
 	;;
 sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu)
 	# Target: NetBSD/sparc64
-	gdb_target_obs="sparc64-tdep.o sparc64-nbsd-tdep.o sparc-tdep.o \
-			sparc-nbsd-tdep.o \
+	gdb_target_obs="sparc64-tdep.o sparc64-netbsd-tdep.o sparc-tdep.o \
+			sparc-netbsd-tdep.o \
 			ravenscar-thread.o sparc-ravenscar-thread.o"
 	;;
 sparc-*-openbsd*)
 	# Target: OpenBSD/sparc
-	gdb_target_obs="sparc-tdep.o sparc-nbsd-tdep.o sparc-obsd-tdep.o \
-			nbsd-tdep.o bsd-uthread.o \
+	gdb_target_obs="sparc-tdep.o sparc-netbsd-tdep.o sparc-obsd-tdep.o \
+			netbsd-tdep.o bsd-uthread.o \
 			ravenscar-thread.o sparc-ravenscar-thread.o"
 	;;
 sparc64-*-openbsd*)
 	# Target: OpenBSD/sparc64
-	gdb_target_obs="sparc64-tdep.o sparc64-nbsd-tdep.o sparc64-obsd-tdep.o \
-			sparc-tdep.o sparc-nbsd-tdep.o sparc-obsd-tdep.o \
-			nbsd-tdep.o bsd-uthread.o \
+	gdb_target_obs="sparc64-tdep.o sparc64-netbsd-tdep.o sparc64-obsd-tdep.o \
+			sparc-tdep.o sparc-netbsd-tdep.o sparc-obsd-tdep.o \
+			netbsd-tdep.o bsd-uthread.o \
 			ravenscar-thread.o sparc-ravenscar-thread.o"
 	;;
 sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
@@ -660,7 +642,6 @@ sparc-*-*)
 	# Target: SPARC
 	gdb_target_obs="sparc-tdep.o \
 			ravenscar-thread.o sparc-ravenscar-thread.o"
-	gdb_sim=../sim/erc32/libsim.a
 	;;
 sparc64-*-*)
 	# Target: UltraSPARC
@@ -688,7 +669,6 @@ tilegx-*-linux*)
 	# Target: TILE-Gx
 	gdb_target_obs="tilegx-tdep.o tilegx-linux-tdep.o solib-svr4.o \
 			symfile-mem.o glibc-tdep.o linux-tdep.o"
-	build_gdbserver=yes
 	;;
 
 xstormy16-*-*)
@@ -699,13 +679,11 @@ xstormy16-*-*)
 
 ft32-*-elf)
 	gdb_target_obs="ft32-tdep.o"
-	gdb_sim=../sim/ft32/libsim.a
 	;;
 
 v850*-*-elf | v850*-*-rtems*)
 	# Target: NEC V850 processor
 	gdb_target_obs="v850-tdep.o"
-	gdb_sim=../sim/v850/libsim.a
 	;;
 
 vax-*-netbsd* | vax-*-knetbsd*-gnu)
@@ -741,7 +719,6 @@ x86_64-*-linux*)
 	gdb_target_obs="amd64-linux-tdep.o ${i386_tobjs}  \
 			i386-linux-tdep.o glibc-tdep.o \
 			solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o"
-	build_gdbserver=yes
 	;;
 x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
 	# Target: FreeBSD/amd64
@@ -751,13 +728,12 @@ x86_64-*-freebsd* | x86_64-*-kfreebsd*-g
 x86_64-*-mingw* | x86_64-*-cygwin*)
         # Target: MingW/amd64
 	gdb_target_obs="amd64-windows-tdep.o \
-                        ${i386_tobjs} i386-cygwin-tdep.o \
+                        ${i386_tobjs} i386-windows-tdep.o \
                         windows-tdep.o"
-	build_gdbserver=yes
         ;;
 x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu)
 	# Target: NetBSD/amd64
-	gdb_target_obs="amd64-nbsd-tdep.o ${i386_tobjs}"
+	gdb_target_obs="amd64-netbsd-tdep.o ${i386_tobjs}"
 	;;
 x86_64-*-openbsd*)
 	# Target: OpenBSD/amd64
@@ -771,7 +747,10 @@ x86_64-*-rtems*)
 xtensa*-*-*linux*)
 	# Target: GNU/Linux Xtensa
 	gdb_target_obs="xtensa-linux-tdep.o symfile-mem.o linux-tdep.o"
-	build_gdbserver=yes
+	;;
+z80*)
+	# Target: Z80
+	gdb_target_obs="z80-tdep.o"
 	;;
 
 esac
@@ -780,6 +759,43 @@ esac
 
 gdb_target_obs="${cpu_obs} ${os_obs} ${gdb_target_obs}"
 
+# Get the sim settings.
+# NB: Target matching is aligned with sim/configure.ac.  Changes must be kept
+# in sync with that file.
+
+case "${targ}" in
+aarch64*-*-*)		gdb_sim=aarch64 ;;
+arm*-*-*)		gdb_sim=arm ;;
+avr*-*-*)		gdb_sim=avr ;;
+bfin-*-*)		gdb_sim=bfin ;;
+bpf-*-*)		gdb_sim=bpf ;;
+cris-*-*|cris32-*-*)	gdb_sim=cris ;;
+frv-*-*)		gdb_sim=frv ;;
+ft32-*-*)		gdb_sim=ft32 ;;
+h8300*-*-*)		gdb_sim=h8300 ;;
+iq2000-*-*)		gdb_sim=iq2000 ;;
+lm32-*-*)		gdb_sim=lm32 ;;
+m32c-*-*)		gdb_sim=m32c ;;
+m32r-*-*)		gdb_sim=m32r ;;
+m68hc11-*-*|m6811-*-*)	gdb_sim=m68hc11 ;;
+microblaze*-*-*)	gdb_sim=microblaze ;;
+mips*-*-*)		gdb_sim=mips ;;
+mn10300*-*-*)		gdb_sim=mn10300 ;;
+moxie-*-*)		gdb_sim=moxie ;;
+msp430*-*-*)		gdb_sim=msp430 ;;
+or1k*-*-*)		gdb_sim=or1k ;;
+powerpc*-*-*)		gdb_sim=ppc ;;
+riscv*-*-*)		gdb_sim=riscv ;;
+rl78-*-*)		gdb_sim=rl78 ;;
+rx-*-*)			gdb_sim=rx ;;
+sh*-*-*)		gdb_sim=sh ;;
+sparc-*-*)		gdb_sim=erc32 ;;
+v850*-*-*)		gdb_sim=v850 ;;
+esac
+if test "x$gdb_sim" != "x"; then
+  gdb_sim="../sim/${gdb_sim}/libsim.a"
+fi
+
 # map target onto default OS ABI
 
 case "${targ}" in
@@ -794,11 +810,9 @@ m68*-*-openbsd* | m88*-*-openbsd* | vax-
 *-*-*-gnu*)	;; # prevent non-GNU kernels to match the Hurd rule below
 *-*-gnu*)	gdb_osabi=GDB_OSABI_HURD ;;
 *-*-mingw32ce*)	gdb_osabi=GDB_OSABI_WINCE ;;
-*-*-mingw* | *-*-cygwin*)
-		gdb_osabi=GDB_OSABI_CYGWIN ;;
+*-*-mingw*)	gdb_osabi=GDB_OSABI_WINDOWS ;;
+*-*-cygwin*)	gdb_osabi=GDB_OSABI_CYGWIN ;;
 *-*-dicos*)	gdb_osabi=GDB_OSABI_DICOS ;;
-*-*-symbianelf*)
-		gdb_osabi=GDB_OSABI_SYMBIAN ;;
 powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
                 gdb_osabi=GDB_OSABI_AIX ;;
 esac
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/continuations.c ./gdb/continuations.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/continuations.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/continuations.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,134 +0,0 @@
-/* Continuations for GDB, the GNU debugger.
-
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "gdbthread.h"
-#include "inferior.h"
-#include "continuations.h"
-
-struct continuation
-{
-  struct continuation *next;
-  continuation_ftype *function;
-  continuation_free_arg_ftype *free_arg;
-  void *arg;
-};
-
-/* Add a new continuation to the continuation chain.  Args are
-   FUNCTION to run the continuation up with, and ARG to pass to
-   it.  */
-
-static void
-make_continuation (struct continuation **pmy_chain,
-		   continuation_ftype *function,
-		   void *arg,  void (*free_arg) (void *))
-{
-  struct continuation *newobj = XNEW (struct continuation);
-
-  newobj->next = *pmy_chain;
-  newobj->function = function;
-  newobj->free_arg = free_arg;
-  newobj->arg = arg;
-  *pmy_chain = newobj;
-}
-
-static void
-do_my_continuations_1 (struct continuation **pmy_chain, int err)
-{
-  struct continuation *ptr;
-
-  while ((ptr = *pmy_chain) != NULL)
-    {
-      *pmy_chain = ptr->next;	/* Do this first in case of recursion.  */
-      (*ptr->function) (ptr->arg, err);
-      if (ptr->free_arg)
-	(*ptr->free_arg) (ptr->arg);
-      xfree (ptr);
-    }
-}
-
-static void
-do_my_continuations (struct continuation **list, int err)
-{
-  struct continuation *continuations;
-
-  if (*list == NULL)
-    return;
-
-  /* Copy the list header into another pointer, and set the global
-     list header to null, so that the global list can change as a side
-     effect of invoking the continuations and the processing of the
-     preexisting continuations will not be affected.  */
-
-  continuations = *list;
-  *list = NULL;
-
-  /* Work now on the list we have set aside.  */
-  do_my_continuations_1 (&continuations, err);
-}
-
-static void
-discard_my_continuations_1 (struct continuation **pmy_chain)
-{
-  struct continuation *ptr;
-
-  while ((ptr = *pmy_chain) != NULL)
-    {
-      *pmy_chain = ptr->next;
-      if (ptr->free_arg)
-	(*ptr->free_arg) (ptr->arg);
-      xfree (ptr);
-    }
-}
-
-static void
-discard_my_continuations (struct continuation **list)
-{
-  discard_my_continuations_1 (list);
-  *list = NULL;
-}
-
-/* Add a continuation to the continuation list of INFERIOR.  The new
-   continuation will be added at the front.  */
-
-void
-add_inferior_continuation (continuation_ftype *hook, void *args,
-			   continuation_free_arg_ftype *free_arg)
-{
-  struct inferior *inf = current_inferior ();
-
-  make_continuation (&inf->continuations, hook, args, free_arg);
-}
-
-/* Do all continuations of the current inferior.  */
-
-void
-do_all_inferior_continuations (int err)
-{
-  struct inferior *inf = current_inferior ();
-  do_my_continuations (&inf->continuations, err);
-}
-
-/* Get rid of all the inferior-wide continuations of INF.  */
-
-void
-discard_all_inferior_continuations (struct inferior *inf)
-{
-  discard_my_continuations (&inf->continuations);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/continuations.h ./gdb/continuations.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/continuations.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/continuations.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,55 +0,0 @@
-/* Continuations for GDB, the GNU debugger.
-
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef CONTINUATIONS_H
-#define CONTINUATIONS_H
-
-struct inferior;
-
-/* To continue the execution commands when running gdb asynchronously.
-   A continuation structure contains a pointer to a function to be called
-   to finish the command, once the target has stopped.  Such mechanism is
-   used by the finish and until commands, and in the remote protocol
-   when opening an extended-remote connection.  */
-
-/* Prototype of the continuation callback functions.  ARG is the
-   continuation argument registered in the corresponding
-   add_*_continuation call.  ERR is true when the command should be
-   cancelled instead of finished normally.  In that case, the
-   continuation should clean up whatever state had been set up for the
-   command in question (e.g., remove momentary breakpoints).  This
-   happens e.g., when an error was thrown while handling a target
-   event, or when the inferior thread the command was being executed
-   on exits.  */
-typedef void (continuation_ftype) (void *arg, int err);
-
-/* Prototype of the function responsible for releasing the argument
-   passed to the continuation callback functions, either when the
-   continuation is called, or discarded.  */
-typedef void (continuation_free_arg_ftype) (void *);
-
-/* Inferior specific (any thread) continuations.  */
-
-extern void add_inferior_continuation (continuation_ftype *,
-				       void *,
-				       continuation_free_arg_ftype *);
-extern void do_all_inferior_continuations (int err);
-extern void discard_all_inferior_continuations (struct inferior *inf);
-
-#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/ari/create-web-ari-in-src.sh ./gdb/contrib/ari/create-web-ari-in-src.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/ari/create-web-ari-in-src.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/ari/create-web-ari-in-src.sh	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
 
 # GDB script to create web ARI page directly from within gdb/ari directory.
 #
-# Copyright (C) 2012-2019 Free Software Foundation, Inc.
+# Copyright (C) 2012-2024 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/ari/gdb_ari.sh ./gdb/contrib/ari/gdb_ari.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/ari/gdb_ari.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/ari/gdb_ari.sh	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
 
 # GDB script to list of problems using awk.
 #
-# Copyright (C) 2002-2019 Free Software Foundation, Inc.
+# Copyright (C) 2002-2024 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
@@ -52,7 +52,7 @@ usage ()
 Error: $1
 
 Usage:
-    $0 --print-doc --print-idx -Wall -Werror -W<category> <file> ...
+    $0 --print-doc --print-idx -Wall -Werror -WCATEGORY FILE ...
 Options:
   --print-doc    Print a list of all potential problems, then exit.
   --print-idx    Include the problems IDX (index or key) in every message.
@@ -60,7 +60,8 @@ Options:
   -Werror        Treat all problems as errors.
   -Wall          Report all problems.
   -Wari          Report problems that should be fixed in new code.
-  -W<category>   Report problems in the specifed category.  Valid categories
+  -WCATEGORY     Report problems in the specifed category.  The category
+                 can be prefixed with "no-".  Valid categories
                  are: ${all}
 EOF
     exit 1
@@ -102,6 +103,10 @@ fi
 # Validate all errors and warnings.
 for w in ${warning} ${error}
 do
+    case "$w" in
+	no-*) w=`echo x$w | sed -e 's/xno-//'`;;
+    esac
+
     case " ${all} " in
     *" ${w} "* ) ;;
     * ) usage "Unknown option -W${w}" ;;
@@ -123,11 +128,19 @@ do
 done
 for w in ${warning}
 do
-    warnings="${warnings} warning[ari_${w}] = 1;"
+    val=1
+    case "$w" in
+	no-*) w=`echo x$w | sed -e 's/xno-//'`; val=0 ;;
+    esac
+    warnings="${warnings} warning[ari_${w}] = $val;"
 done
 for e in ${error}
 do
-    errors="${errors} error[ari_${e}]  = 1;"
+    val=1
+    case "$e" in
+	no-*) e=`echo x$e | sed -e 's/xno-//'`; val=0 ;;
+    esac
+    errors="${errors} error[ari_${e}]  = $val;"
 done
 
 if [ "$AWK" = "" ] ; then
@@ -574,24 +587,11 @@ Do not use strerror(), instead use safe_
 BEGIN { doc["long long"] = "\
 Do not use `long long'\'', instead use LONGEST"
     category["long long"] = ari_code
-    # defs.h needs two such patterns for LONGEST and ULONGEST definitions
-    fix("long long", "gdb/defs.h", 2)
 }
 /(^|[^_[:alnum:]])long[[:space:]]+long([^_[:alnum:]]|$)/ {
     fail("long long")
 }
 
-BEGIN { doc["ATTRIBUTE_UNUSED"] = "\
-Do not use ATTRIBUTE_UNUSED, do not bother (GDB is compiled with -Werror and, \
-consequently, is not able to tolerate false warnings.  Since -Wunused-param \
-produces such warnings, neither that warning flag nor ATTRIBUTE_UNUSED \
-are used by GDB"
-    category["ATTRIBUTE_UNUSED"] = ari_regression
-}
-/(^|[^_[:alnum:]])ATTRIBUTE_UNUSED([^_[:alnum:]]|$)/ {
-    fail("ATTRIBUTE_UNUSED")
-}
-
 BEGIN { doc["ATTR_FORMAT"] = "\
 Do not use ATTR_FORMAT, use ATTRIBUTE_PRINTF instead"
     category["ATTR_FORMAT"] = ari_regression
@@ -619,21 +619,6 @@ Do not use NORETURN, use ATTRIBUTE_NORET
 
 # General problems
 
-BEGIN { doc["multiple messages"] = "\
-Do not use multiple calls to warning or error, instead use a single call"
-    category["multiple messages"] = ari_gettext
-}
-FNR == 1 {
-    warning_fnr = -1
-}
-/(^|[^_[:alnum:]])(warning|error)[[:space:]]*\(/ {
-    if (FNR == warning_fnr + 1) {
-	fail("multiple messages")
-    } else {
-	warning_fnr = FNR
-    }
-}
-
 # Commented out, but left inside sources, just in case.
 # BEGIN { doc["inline"] = "\
 # Do not use the inline attribute; \
@@ -658,7 +643,6 @@ FNR == 1 {
 BEGIN { doc["abort"] = "\
 Do not use abort, instead use internal_error; GDB should never abort"
     category["abort"] = ari_regression
-    fix("abort", "gdb/utils.c", 3)
 }
 /(^|[^_[:alnum:]])abort[[:space:]]*\(/ {
     fail("abort")
@@ -822,7 +806,6 @@ get_frame_locals_address, or get_frame_a
 BEGIN { doc["floatformat_to_double"] = "\
 Do not use floatformat_to_double() from libierty, \
 instead use floatformat_to_doublest()"
-    fix("floatformat_to_double", "gdb/doublest.c", 1)
     category["floatformat_to_double"] = ari_regression
 }
 /(^|[^_[:alnum:]])floatformat_to_double[[:space:]]*\(/ {
@@ -831,7 +814,7 @@ instead use floatformat_to_doublest()"
 
 BEGIN { doc["floatformat_from_double"] = "\
 Do not use floatformat_from_double() from libierty, \
-instead use floatformat_from_doublest()"
+instead use host_float_ops<T>::from_target()"
     category["floatformat_from_double"] = ari_regression
 }
 /(^|[^_[:alnum:]])floatformat_from_double[[:space:]]*\(/ {
@@ -1110,18 +1093,6 @@ Do not use strnicmp(), instead use strnc
     fail("strnicmp")
 }
 
-# Boolean expressions and conditionals
-
-BEGIN { doc["boolean"] = "\
-Do not use `boolean'\'',  use `bool'\'' instead"
-    category["boolean"] = ari_regression
-}
-/(^|[^_[:alnum:]])boolean([^_[:alnum:]]|$)/ {
-    if (is_yacc_or_lex == 0) {
-       fail("boolean")
-    }
-}
-
 # Typedefs that are either redundant or can be reduced to `struct
 # type *''.
 # Must be placed before if assignment otherwise ARI exceptions
@@ -1143,20 +1114,6 @@ Do not use strlen dirent.d_name, instead
     fail("strlen d_name")
 }
 
-BEGIN { doc["var_boolean"] = "\
-Replace var_boolean with add_setshow_boolean_cmd"
-    category["var_boolean"] = ari_regression
-    fix("var_boolean", "gdb/command.h", 1)
-    # fix only uses the last directory level
-    fix("var_boolean", "cli/cli-decode.c", 2)
-}
-/(^|[^_[:alnum:]])var_boolean([^_[:alnum:]]|$)/ {
-    if (($0 !~ /(^|[^_[:alnum:]])case *var_boolean:/) \
-        && ($0 !~ /(^|[^_[:alnum:]])[=!]= *var_boolean/)) {
-	fail("var_boolean")
-    }
-}
-
 BEGIN { doc["generic_use_struct_convention"] = "\
 Replace generic_use_struct_convention with nothing, \
 EXTRACT_STRUCT_VALUE_ADDRESS is a predicate"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/ari/gdb_find.sh ./gdb/contrib/ari/gdb_find.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/ari/gdb_find.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/ari/gdb_find.sh	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
 
 # GDB script to create list of files to check using gdb_ari.sh.
 #
-# Copyright (C) 2003-2019 Free Software Foundation, Inc.
+# Copyright (C) 2003-2024 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/ari/update-web-ari.sh ./gdb/contrib/ari/update-web-ari.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/ari/update-web-ari.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/ari/update-web-ari.sh	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
 
 # GDB script to create GDB ARI web page.
 #
-# Copyright (C) 2001-2019 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/cc-with-tweaks.sh ./gdb/contrib/cc-with-tweaks.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/cc-with-tweaks.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/cc-with-tweaks.sh	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
 # Wrapper around gcc to tweak the output in various ways when running
 # the testsuite.
 
-# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+# Copyright (C) 2010-2024 Free Software Foundation, Inc.
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 3 of the License, or
@@ -43,8 +43,10 @@
 # -z compress using dwz
 # -m compress using dwz -m
 # -i make an index (.gdb_index)
+# -c make an index (currently .gdb_index) in a cache dir
 # -n make a dwarf5 index (.debug_names)
 # -p create .dwp files (Fission), you need to also use gcc option -gsplit-dwarf
+# -l creates separate debuginfo files linked to using .gnu_debuglink
 # If nothing is given, no changes are made
 
 myname=cc-with-tweaks.sh
@@ -73,16 +75,23 @@ READELF=${READELF:-readelf}
 DWZ=${DWZ:-dwz}
 DWP=${DWP:-dwp}
 
+# shellcheck disable=SC2206 # Allow word splitting.
+STRIP_ARGS_STRIP_DEBUG=(${STRIP_ARGS_STRIP_DEBUG:---strip-debug})
+# shellcheck disable=SC2206 # Allow word splitting.
+STRIP_ARGS_KEEP_DEBUG=(${STRIP_ARGS_KEEP_DEBUG:---only-keep-debug})
+
 have_link=unknown
 next_is_output_file=no
 output_file=a.out
 
 want_index=false
 index_options=""
+want_index_cache=false
 want_dwz=false
 want_multi=false
 want_dwp=false
 want_objcopy_compress=false
+want_gnu_debuglink=false
 
 while [ $# -gt 0 ]; do
     case "$1" in
@@ -90,8 +99,10 @@ while [ $# -gt 0 ]; do
 	-z) want_dwz=true ;;
 	-i) want_index=true ;;
 	-n) want_index=true; index_options=-dwarf-5;;
+	-c) want_index_cache=true ;;
 	-m) want_multi=true ;;
 	-p) want_dwp=true ;;
+	-l) want_gnu_debuglink=true ;;
 	*) break ;;
     esac
     shift
@@ -144,13 +155,6 @@ then
     exit $?
 fi
 
-index_file="${output_file}.gdb-index"
-if [ "$want_index" = true ] && [ -f "$index_file" ]
-then
-    echo "$myname: Index file $index_file exists, won't clobber." >&2
-    exit 1
-fi
-
 output_dir="${output_file%/*}"
 [ "$output_dir" = "$output_file" ] && output_dir="."
 
@@ -165,7 +169,12 @@ fi
 
 get_tmpdir ()
 {
-    tmpdir=$(dirname "$output_file")/.tmp
+    subdir="$1"
+    if [ "$subdir" = "" ]; then
+	subdir=.tmp
+    fi
+
+    tmpdir=$(dirname "$output_file")/"$subdir"
     mkdir -p "$tmpdir"
 }
 
@@ -176,15 +185,60 @@ if [ "$want_objcopy_compress" = true ];
 fi
 
 if [ "$want_index" = true ]; then
+    get_tmpdir
+    mv "$output_file" "$tmpdir"
+    output_dir=$(dirname "$output_file")
+
+    # Copy .dwo file alongside, to fix gdb.dwarf2/fission-relative-dwo.exp.
+    # Use copy instead of move to not break
+    # rtf=gdb.dwarf2/fission-absolute-dwo.exp.
+    dwo_pattern="$output_dir/*.dwo"
+    for f in $dwo_pattern; do
+	if [ "$f" = "$dwo_pattern" ]; then
+	    break
+	fi
+	cp "$f" "$tmpdir"
+    done
+
+    tmpfile="$tmpdir/$(basename $output_file)"
     # Filter out these messages which would stop dejagnu testcase run:
     # echo "$myname: No index was created for $file" 1>&2
     # echo "$myname: [Was there no debuginfo? Was there already an index?]" 1>&2
-    GDB=$GDB $GDB_ADD_INDEX $index_options "$output_file" 2>&1 \
+    GDB=$GDB $GDB_ADD_INDEX $index_options "$tmpfile" 2>&1 \
 	| grep -v "^${GDB_ADD_INDEX##*/}: " >&2
     rc=${PIPESTATUS[0]}
+    mv "$tmpfile" "$output_file"
+    rm -f "$tmpdir"/*.dwo
+    [ $rc != 0 ] && exit $rc
+fi
+
+if [ "$want_index_cache" = true ]; then
+    $GDB -q -batch \
+	-ex "set index-cache directory $INDEX_CACHE_DIR" \
+	-ex "set index-cache enabled on" \
+	-ex "file $output_file"
+    rc=$?
     [ $rc != 0 ] && exit $rc
 fi
 
+if [ "$want_dwz" = true ] || [ "$want_multi" = true ]; then
+    # Require dwz version with PR dwz/24468 fixed.
+    dwz_version_major_required=0
+    dwz_version_minor_required=13
+    dwz_version_line=$($DWZ --version 2>&1 | head -n 1)
+    dwz_version=${dwz_version_line//dwz version /}
+    dwz_version_major=${dwz_version//\.*/}
+    dwz_version_minor=${dwz_version//*\./}
+    if [ "$dwz_version_major" -lt "$dwz_version_major_required" ] \
+	   || { [ "$dwz_version_major" -eq "$dwz_version_major_required" ] \
+		    && [ "$dwz_version_minor" -lt "$dwz_version_minor_required" ]; }; then
+	detected="$dwz_version_major.$dwz_version_minor"
+	required="$dwz_version_major_required.$dwz_version_minor_required"
+	echo "$myname: dwz version $detected detected, version $required or higher required"
+	exit 1
+    fi
+fi
+
 if [ "$want_dwz" = true ]; then
     # Validate dwz's result by checking if the executable was modified.
     cp "$output_file" "${output_file}.copy"
@@ -237,5 +291,40 @@ if [ "$want_dwp" = true ]; then
     fi
 fi
 
-rm -f "$index_file"
+if [ "$want_gnu_debuglink" = true ]; then
+    # Based on gdb_gnu_strip_debug.
+
+    # Gdb looks for the .gnu_debuglink file in the .debug subdirectory
+    # of the directory of the executable.
+    get_tmpdir .debug
+
+    stripped_file="$tmpdir"/$(basename "$output_file").stripped
+    debug_file="$tmpdir"/$(basename "$output_file").debug
+
+    # Create stripped and debug versions of output_file.
+    strip "${STRIP_ARGS_STRIP_DEBUG[@]}" "${output_file}" \
+	  -o "${stripped_file}"
+    rc=$?
+    [ $rc != 0 ] && exit $rc
+    strip "${STRIP_ARGS_KEEP_DEBUG[@]}" "${output_file}" \
+	  -o "${debug_file}"
+    rc=$?
+    [ $rc != 0 ] && exit $rc
+
+    # The .gnu_debuglink is supposed to contain no leading directories.
+    link=$(basename "${debug_file}")
+
+    (
+	# Temporarily cd to tmpdir to allow objcopy to find $link
+	cd "$tmpdir" || exit 1
+
+	# Overwrite output_file with stripped version containing
+	# .gnu_debuglink to debug_file.
+	$OBJCOPY --add-gnu-debuglink="$link" "${stripped_file}" \
+		"${output_file}"
+	rc=$?
+	[ $rc != 0 ] && exit $rc
+    )
+fi
+
 exit $rc
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/expect-read1.c ./gdb/contrib/expect-read1.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/expect-read1.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/expect-read1.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2013-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/expect-read1.sh ./gdb/contrib/expect-read1.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/expect-read1.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/expect-read1.sh	2024-02-01 01:47:15.000000000 +0000
@@ -1,7 +1,7 @@
 #! /bin/sh
 # runtest wrapper to reliably reproduce racy incomplete reads in the testsuite.
 
-# Copyright (C) 2013-2019 Free Software Foundation, Inc.
+# Copyright (C) 2013-2024 Free Software Foundation, Inc.
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 3 of the License, or
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/gdb-add-index.sh ./gdb/contrib/gdb-add-index.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/gdb-add-index.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/gdb-add-index.sh	2024-02-01 01:47:15.000000000 +0000
@@ -2,7 +2,7 @@
 
 # Add a .gdb_index section to a file.
 
-# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+# Copyright (C) 2010-2024 Free Software Foundation, Inc.
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 3 of the License, or
@@ -37,6 +37,34 @@ fi
 
 file="$1"
 
+if test -L "$file"; then
+    if ! command -v readlink >/dev/null 2>&1; then
+	echo "$myname: 'readlink' missing.  Failed to follow symlink $1." 1>&2
+	exit 1
+    fi
+
+    # Count number of links followed in order to detect loops.
+    count=0
+    while test -L "$file"; do
+	target=$(readlink "$file")
+
+	case "$target" in
+	    /*)
+		file="$target"
+		;;
+	    *)
+		file="$(dirname "$file")/$target"
+		;;
+	esac
+
+	count="$((count + 1))"
+	if test "$count" -gt 10; then
+	    echo "$myname: Detected loop while following link $file"
+	    exit 1
+	fi
+    done
+fi
+
 if test ! -r "$file"; then
     echo "$myname: unable to access: $file" 1>&2
     exit 1
@@ -60,13 +88,13 @@ fi
 
 set_files ()
 {
-    local file="$1"
+    fpath="$1"
 
-    index4="${file}.gdb-index"
-    index5="${file}.debug_names"
-    debugstr="${file}.debug_str"
-    debugstrmerge="${file}.debug_str.merge"
-    debugstrerr="${file}.debug_str.err"
+    index4="${fpath}.gdb-index"
+    index5="${fpath}.debug_names"
+    debugstr="${fpath}.debug_str"
+    debugstrmerge="${fpath}.debug_str.merge"
+    debugstrerr="${fpath}.debug_str.err"
 }
 
 tmp_files=
@@ -84,6 +112,7 @@ rm -f $tmp_files
 trap "rm -f $tmp_files" 0
 
 $GDB --batch -nx -iex 'set auto-load no' \
+    -iex 'set debuginfod enabled off' \
     -ex "file $file" -ex "save gdb-index $dwarf5 $dir" || {
     # Just in case.
     status=$?
@@ -99,13 +128,12 @@ status=0
 
 handle_file ()
 {
-    local file
-    file="$1"
+    fpath="$1"
 
-    set_files "$file"
+    set_files "$fpath"
 
     if test -f "$index4" -a -f "$index5"; then
-	echo "$myname: Both index types were created for $file" 1>&2
+	echo "$myname: Both index types were created for $fpath" 1>&2
 	status=1
     elif test -f "$index4" -o -f "$index5"; then
 	if test -f "$index4"; then
@@ -118,7 +146,7 @@ handle_file ()
 	debugstradd=false
 	debugstrupdate=false
 	if test -s "$debugstr"; then
-	    if ! $OBJCOPY --dump-section .debug_str="$debugstrmerge" "$file" \
+	    if ! $OBJCOPY --dump-section .debug_str="$debugstrmerge" "$fpath" \
 		 /dev/null 2>$debugstrerr; then
 		cat >&2 $debugstrerr
 		exit 1
@@ -142,11 +170,11 @@ handle_file ()
 		   if $debugstrupdate; then \
 		       echo --update-section .debug_str="$debugstrmerge"; \
 		   fi) \
-		 "$file" "$file"
+		 "$fpath" "$fpath"
 
 	status=$?
     else
-	echo "$myname: No index was created for $file" 1>&2
+	echo "$myname: No index was created for $fpath" 1>&2
 	echo "$myname: [Was there no debuginfo? Was there already an index?]" \
 	     1>&2
     fi
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/test_pubnames_and_indexes.py ./gdb/contrib/test_pubnames_and_indexes.py
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/test_pubnames_and_indexes.py	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/test_pubnames_and_indexes.py	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 
-# Copyright (C) 2011-2019 Free Software Foundation, Inc.
+# Copyright (C) 2011-2024 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
@@ -39,7 +39,7 @@ to those that gdb produces.
 Finally, check that all strings are canonicalized identically.
 """
 
-__author__ = 'saugustine@google.com (Sterling Augustine)'
+__author__ = "saugustine@google.com (Sterling Augustine)"
 
 import os
 import subprocess
@@ -49,159 +49,176 @@ OBJCOPY = None
 READELF = None
 GDB = None
 
+
 def get_pub_info(filename, readelf_option):
-  """Parse and return all the pubnames or pubtypes produced by readelf with the
-  given option.
-  """
-  readelf = subprocess.Popen([READELF, '--debug-dump=' + readelf_option,
-                                       filename], stdout=subprocess.PIPE)
-  pubnames = []
-
-  in_list = False;
-  for line in readelf.stdout:
-    fields = line.split(None, 1)
-    if (len(fields) == 2 and fields[0] == 'Offset'
-        and fields[1].strip() == 'Name'):
-      in_list = True
-    # Either a blank-line or a new Length field terminates the current section.
-    elif (len(fields) == 0 or fields[0] == 'Length:'):
-      in_list = False;
-    elif (in_list):
-      pubnames.append(fields[1].strip())
+    """Parse and return all the pubnames or pubtypes produced by readelf with the
+    given option.
+    """
+    readelf = subprocess.Popen(
+        [READELF, "--debug-dump=" + readelf_option, filename], stdout=subprocess.PIPE
+    )
+    pubnames = []
+
+    in_list = False
+    for line in readelf.stdout:
+        fields = line.split(None, 1)
+        if len(fields) == 2 and fields[0] == "Offset" and fields[1].strip() == "Name":
+            in_list = True
+        # Either a blank-line or a new Length field terminates the current section.
+        elif len(fields) == 0 or fields[0] == "Length:":
+            in_list = False
+        elif in_list:
+            pubnames.append(fields[1].strip())
 
-  readelf.wait()
-  return pubnames
+    readelf.wait()
+    return pubnames
 
 
 def get_gdb_index(filename):
-  """Use readelf to dump the gdb index and collect the types and names"""
-  readelf = subprocess.Popen([READELF, '--debug-dump=gdb_index',
-                              filename], stdout=subprocess.PIPE)
-  index_symbols = []
-  symbol_table_started = False
-  for line in readelf.stdout:
-    if (line == 'Symbol table:\n'):
-      symbol_table_started = True;
-    elif (symbol_table_started):
-      # Readelf prints gdb-index lines formatted like so:
-      # [  4] two::c2<double>::c2: 0
-      # So take the string between the first close bracket and the last colon.
-      index_symbols.append(line[line.find(']') + 2: line.rfind(':')])
+    """Use readelf to dump the gdb index and collect the types and names"""
+    readelf = subprocess.Popen(
+        [READELF, "--debug-dump=gdb_index", filename], stdout=subprocess.PIPE
+    )
+    index_symbols = []
+    symbol_table_started = False
+    for line in readelf.stdout:
+        if line == "Symbol table:\n":
+            symbol_table_started = True
+        elif symbol_table_started:
+            # Readelf prints gdb-index lines formatted like so:
+            # [  4] two::c2<double>::c2: 0
+            # So take the string between the first close bracket and the last colon.
+            index_symbols.append(line[line.find("]") + 2 : line.rfind(":")])
 
-  readelf.wait()
-  return index_symbols
+    readelf.wait()
+    return index_symbols
 
 
 def CheckSets(list0, list1, name0, name1):
-  """Report any setwise differences between the two lists"""
+    """Report any setwise differences between the two lists"""
 
-  if len(list0) == 0 or len(list1) == 0:
-    return False
+    if len(list0) == 0 or len(list1) == 0:
+        return False
 
-  difference0 = set(list0) - set(list1)
-  if len(difference0) != 0:
-    print "Elements in " + name0 + " but not " + name1 + ": (",
-    print len(difference0),
-    print ")"
-    for element in difference0:
-      print "  " + element
-
-  difference1 = set(list1) - set(list0)
-  if len(difference1) != 0:
-    print "Elements in " + name1 + " but not " + name0 + ": (",
-    print len(difference1),
-    print ")"
-    for element in difference1:
-      print "  " + element
+    difference0 = set(list0) - set(list1)
+    if len(difference0) != 0:
+        print("Elements in " + name0 + " but not " + name1 + ": (", end=" ")
+        print(len(difference0), end=" ")
+        print(")")
+        for element in difference0:
+            print("  " + element)
+
+    difference1 = set(list1) - set(list0)
+    if len(difference1) != 0:
+        print("Elements in " + name1 + " but not " + name0 + ": (", end=" ")
+        print(len(difference1), end=" ")
+        print(")")
+        for element in difference1:
+            print("  " + element)
 
-  if (len(difference0) != 0 or len(difference1) != 0):
-    return True
+    if len(difference0) != 0 or len(difference1) != 0:
+        return True
 
-  print name0 + " and " + name1 + " are identical."
-  return False
+    print(name0 + " and " + name1 + " are identical.")
+    return False
 
 
 def find_executables():
-  """Find the copies of readelf, objcopy and gdb to use."""
-  # Executable finding logic follows cc-with-index.sh
-  global READELF
-  READELF = os.getenv('READELF')
-  if READELF is None:
-    READELF = 'readelf'
-  global OBJCOPY
-  OBJCOPY = os.getenv('OBJCOPY')
-  if OBJCOPY is None:
-    OBJCOPY = 'objcopy'
-
-  global GDB
-  GDB = os.getenv('GDB')
-  if (GDB is None):
-    if os.path.isfile('./gdb') and os.access('./gdb', os.X_OK):
-      GDB = './gdb'
-    elif os.path.isfile('../gdb') and os.access('../gdb', os.X_OK):
-      GDB = '../gdb'
-    elif os.path.isfile('../../gdb') and os.access('../../gdb', os.X_OK):
-      GDB = '../../gdb'
-    else:
-      # Punt and use the gdb in the path.
-      GDB = 'gdb'
+    """Find the copies of readelf, objcopy and gdb to use."""
+    # Executable finding logic follows cc-with-index.sh
+    global READELF
+    READELF = os.getenv("READELF")
+    if READELF is None:
+        READELF = "readelf"
+    global OBJCOPY
+    OBJCOPY = os.getenv("OBJCOPY")
+    if OBJCOPY is None:
+        OBJCOPY = "objcopy"
+
+    global GDB
+    GDB = os.getenv("GDB")
+    if GDB is None:
+        if os.path.isfile("./gdb") and os.access("./gdb", os.X_OK):
+            GDB = "./gdb"
+        elif os.path.isfile("../gdb") and os.access("../gdb", os.X_OK):
+            GDB = "../gdb"
+        elif os.path.isfile("../../gdb") and os.access("../../gdb", os.X_OK):
+            GDB = "../../gdb"
+        else:
+            # Punt and use the gdb in the path.
+            GDB = "gdb"
 
 
 def main(argv):
-  """The main subprogram."""
-  if len(argv) != 2:
-    print "Usage: test_pubnames_and_indexes.py <filename>"
-    sys.exit(2)
-
-  find_executables();
-
-  # Get the index produced by Gold--It should have been built into the binary.
-  gold_index = get_gdb_index(argv[1])
-
-  # Collect the pubnames and types list
-  pubs_list = get_pub_info(argv[1], "pubnames")
-  pubs_list = pubs_list + get_pub_info(argv[1], "pubtypes")
-
-  # Generate a .gdb_index with gdb
-  gdb_index_file = argv[1] + '.gdb-generated-index'
-  subprocess.check_call([OBJCOPY, '--remove-section', '.gdb_index',
-                         argv[1], gdb_index_file])
-  subprocess.check_call([GDB, '-batch', '-nx', gdb_index_file,
-                         '-ex', 'save gdb-index ' + os.path.dirname(argv[1]),
-                         '-ex', 'quit'])
-  subprocess.check_call([OBJCOPY, '--add-section',
-                         '.gdb_index=' + gdb_index_file + '.gdb-index',
-                         gdb_index_file])
-  gdb_index = get_gdb_index(gdb_index_file)
-  os.remove(gdb_index_file)
-  os.remove(gdb_index_file + '.gdb-index')
-
-  failed = False
-  gdb_index.sort()
-  gold_index.sort()
-  pubs_list.sort()
-
-  # Find the differences between the various indices.
-  if len(gold_index) == 0:
-    print "Gold index is empty"
-    failed |= True
-
-  if len(gdb_index) == 0:
-    print "Gdb index is empty"
-    failed |= True
-
-  if len(pubs_list) == 0:
-    print "Pubs list is empty"
-    failed |= True
-
-  failed |= CheckSets(gdb_index, gold_index, "gdb index", "gold index")
-  failed |= CheckSets(pubs_list, gold_index, "pubs list", "gold index")
-  failed |= CheckSets(pubs_list, gdb_index, "pubs list", "gdb index")
-
-  if failed:
-    print "Test failed"
-    sys.exit(1)
+    """The main subprogram."""
+    if len(argv) != 2:
+        print("Usage: test_pubnames_and_indexes.py <filename>")
+        sys.exit(2)
+
+    find_executables()
+
+    # Get the index produced by Gold--It should have been built into the binary.
+    gold_index = get_gdb_index(argv[1])
+
+    # Collect the pubnames and types list
+    pubs_list = get_pub_info(argv[1], "pubnames")
+    pubs_list = pubs_list + get_pub_info(argv[1], "pubtypes")
+
+    # Generate a .gdb_index with gdb
+    gdb_index_file = argv[1] + ".gdb-generated-index"
+    subprocess.check_call(
+        [OBJCOPY, "--remove-section", ".gdb_index", argv[1], gdb_index_file]
+    )
+    subprocess.check_call(
+        [
+            GDB,
+            "-batch",
+            "-nx",
+            gdb_index_file,
+            "-ex",
+            "save gdb-index " + os.path.dirname(argv[1]),
+            "-ex",
+            "quit",
+        ]
+    )
+    subprocess.check_call(
+        [
+            OBJCOPY,
+            "--add-section",
+            ".gdb_index=" + gdb_index_file + ".gdb-index",
+            gdb_index_file,
+        ]
+    )
+    gdb_index = get_gdb_index(gdb_index_file)
+    os.remove(gdb_index_file)
+    os.remove(gdb_index_file + ".gdb-index")
+
+    failed = False
+    gdb_index.sort()
+    gold_index.sort()
+    pubs_list.sort()
+
+    # Find the differences between the various indices.
+    if len(gold_index) == 0:
+        print("Gold index is empty")
+        failed |= True
+
+    if len(gdb_index) == 0:
+        print("Gdb index is empty")
+        failed |= True
+
+    if len(pubs_list) == 0:
+        print("Pubs list is empty")
+        failed |= True
+
+    failed |= CheckSets(gdb_index, gold_index, "gdb index", "gold index")
+    failed |= CheckSets(pubs_list, gold_index, "pubs list", "gold index")
+    failed |= CheckSets(pubs_list, gdb_index, "pubs list", "gdb index")
+
+    if failed:
+        print("Test failed")
+        sys.exit(1)
 
 
-if __name__ == '__main__':
-  main(sys.argv)
+if __name__ == "__main__":
+    main(sys.argv)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/words.sh ./gdb/contrib/words.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/contrib/words.sh	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/contrib/words.sh	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# Copyright (C) 2019 Free Software Foundation, Inc.
+# Copyright (C) 2019-2024 Free Software Foundation, Inc.
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 3 of the License, or
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/copying.awk ./gdb/copying.awk
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/copying.awk	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/copying.awk	2024-02-01 01:47:15.000000000 +0000
@@ -21,11 +21,11 @@ BEGIN	{
 NR == 1,/^[ 	]*15\. Disclaimer of Warranty\.[ 	]*$/	{
 	  if ($0 ~ //)
 	    {
-	      printf "  printf_filtered (\"\\n\");\n";
+	      printf "  gdb_printf (\"\\n\");\n";
 	    }
 	  else if ($0 !~ /^[ 	]*15\. Disclaimer of Warranty\.[ 	]*$/) 
 	    {
-	      printf "  printf_filtered (\"";
+	      printf "  gdb_printf (\"";
 	      for (i = 1; i < NF; i++)
 		printf "%s\\\"", $i;
 	      printf "%s\\n\");\n", $NF;
@@ -41,7 +41,7 @@ NR == 1,/^[ 	]*15\. Disclaimer of Warran
 /^[ 	]*15\. Disclaimer of Warranty\.[ 	]*$/, /^[ 	]*END OF TERMS AND CONDITIONS[ 	]*$/{  
 	  if (! ($0 ~ /^[ 	]*END OF TERMS AND CONDITIONS[ 	]*$/)) 
 	    {
-	      printf "  printf_filtered (\"";
+	      printf "  gdb_printf (\"";
 	      for (i = 1; i < NF; i++)
 		printf "%s\\\"", $i;
 	      printf "%s\\n\");\n", $NF;
@@ -50,8 +50,9 @@ NR == 1,/^[ 	]*15\. Disclaimer of Warran
 END	{
 	  print "}";
 	  print "";
+	  print "void _initialize_copying ();"
 	  print "void"
-	  print "_initialize_copying (void)";
+	  print "_initialize_copying ()";
 	  print "{";
 	  print "  add_cmd (\"copying\", no_set_class, show_copying_command,";
 	  print "	   _(\"Conditions for redistributing copies of GDB.\"),";
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/copying.c ./gdb/copying.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/copying.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/copying.c	2024-02-01 01:47:15.000000000 +0000
@@ -13,635 +13,636 @@ static void show_warranty_command (const
 static void
 show_copying_command (const char *ignore, int from_tty)
 {
-  printf_filtered ("                    GNU GENERAL PUBLIC LICENSE\n");
-  printf_filtered ("                       Version 3, 29 June 2007\n");
-  printf_filtered ("\n");
-  printf_filtered (" Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n");
-  printf_filtered (" Everyone is permitted to copy and distribute verbatim copies\n");
-  printf_filtered (" of this license document, but changing it is not allowed.\n");
-  printf_filtered ("\n");
-  printf_filtered ("                            Preamble\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The GNU General Public License is a free, copyleft license for\n");
-  printf_filtered ("software and other kinds of works.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The licenses for most software and other practical works are designed\n");
-  printf_filtered ("to take away your freedom to share and change the works.  By contrast,\n");
-  printf_filtered ("the GNU General Public License is intended to guarantee your freedom to\n");
-  printf_filtered ("share and change all versions of a program--to make sure it remains free\n");
-  printf_filtered ("software for all its users.  We, the Free Software Foundation, use the\n");
-  printf_filtered ("GNU General Public License for most of our software; it applies also to\n");
-  printf_filtered ("any other work released this way by its authors.  You can apply it to\n");
-  printf_filtered ("your programs, too.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  When we speak of free software, we are referring to freedom, not\n");
-  printf_filtered ("price.  Our General Public Licenses are designed to make sure that you\n");
-  printf_filtered ("have the freedom to distribute copies of free software (and charge for\n");
-  printf_filtered ("them if you wish), that you receive source code or can get it if you\n");
-  printf_filtered ("want it, that you can change the software or use pieces of it in new\n");
-  printf_filtered ("free programs, and that you know you can do these things.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  To protect your rights, we need to prevent others from denying you\n");
-  printf_filtered ("these rights or asking you to surrender the rights.  Therefore, you have\n");
-  printf_filtered ("certain responsibilities if you distribute copies of the software, or if\n");
-  printf_filtered ("you modify it: responsibilities to respect the freedom of others.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  For example, if you distribute copies of such a program, whether\n");
-  printf_filtered ("gratis or for a fee, you must pass on to the recipients the same\n");
-  printf_filtered ("freedoms that you received.  You must make sure that they, too, receive\n");
-  printf_filtered ("or can get the source code.  And you must show them these terms so they\n");
-  printf_filtered ("know their rights.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Developers that use the GNU GPL protect your rights with two steps:\n");
-  printf_filtered ("(1) assert copyright on the software, and (2) offer you this License\n");
-  printf_filtered ("giving you legal permission to copy, distribute and/or modify it.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  For the developers' and authors' protection, the GPL clearly explains\n");
-  printf_filtered ("that there is no warranty for this free software.  For both users' and\n");
-  printf_filtered ("authors' sake, the GPL requires that modified versions be marked as\n");
-  printf_filtered ("changed, so that their problems will not be attributed erroneously to\n");
-  printf_filtered ("authors of previous versions.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Some devices are designed to deny users access to install or run\n");
-  printf_filtered ("modified versions of the software inside them, although the manufacturer\n");
-  printf_filtered ("can do so.  This is fundamentally incompatible with the aim of\n");
-  printf_filtered ("protecting users' freedom to change the software.  The systematic\n");
-  printf_filtered ("pattern of such abuse occurs in the area of products for individuals to\n");
-  printf_filtered ("use, which is precisely where it is most unacceptable.  Therefore, we\n");
-  printf_filtered ("have designed this version of the GPL to prohibit the practice for those\n");
-  printf_filtered ("products.  If such problems arise substantially in other domains, we\n");
-  printf_filtered ("stand ready to extend this provision to those domains in future versions\n");
-  printf_filtered ("of the GPL, as needed to protect the freedom of users.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Finally, every program is threatened constantly by software patents.\n");
-  printf_filtered ("States should not allow patents to restrict development and use of\n");
-  printf_filtered ("software on general-purpose computers, but in those that do, we wish to\n");
-  printf_filtered ("avoid the special danger that patents applied to a free program could\n");
-  printf_filtered ("make it effectively proprietary.  To prevent this, the GPL assures that\n");
-  printf_filtered ("patents cannot be used to render the program non-free.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The precise terms and conditions for copying, distribution and\n");
-  printf_filtered ("modification follow.\n");
-  printf_filtered ("\n");
-  printf_filtered ("                       TERMS AND CONDITIONS\n");
-  printf_filtered ("\n");
-  printf_filtered ("  0. Definitions.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  \"This License\" refers to version 3 of the GNU General Public License.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  \"Copyright\" also means copyright-like laws that apply to other kinds of\n");
-  printf_filtered ("works, such as semiconductor masks.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  \"The Program\" refers to any copyrightable work licensed under this\n");
-  printf_filtered ("License.  Each licensee is addressed as \"you\".  \"Licensees\" and\n");
-  printf_filtered ("\"recipients\" may be individuals or organizations.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  To \"modify\" a work means to copy from or adapt all or part of the work\n");
-  printf_filtered ("in a fashion requiring copyright permission, other than the making of an\n");
-  printf_filtered ("exact copy.  The resulting work is called a \"modified version\" of the\n");
-  printf_filtered ("earlier work or a work \"based on\" the earlier work.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  A \"covered work\" means either the unmodified Program or a work based\n");
-  printf_filtered ("on the Program.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  To \"propagate\" a work means to do anything with it that, without\n");
-  printf_filtered ("permission, would make you directly or secondarily liable for\n");
-  printf_filtered ("infringement under applicable copyright law, except executing it on a\n");
-  printf_filtered ("computer or modifying a private copy.  Propagation includes copying,\n");
-  printf_filtered ("distribution (with or without modification), making available to the\n");
-  printf_filtered ("public, and in some countries other activities as well.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  To \"convey\" a work means any kind of propagation that enables other\n");
-  printf_filtered ("parties to make or receive copies.  Mere interaction with a user through\n");
-  printf_filtered ("a computer network, with no transfer of a copy, is not conveying.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  An interactive user interface displays \"Appropriate Legal Notices\"\n");
-  printf_filtered ("to the extent that it includes a convenient and prominently visible\n");
-  printf_filtered ("feature that (1) displays an appropriate copyright notice, and (2)\n");
-  printf_filtered ("tells the user that there is no warranty for the work (except to the\n");
-  printf_filtered ("extent that warranties are provided), that licensees may convey the\n");
-  printf_filtered ("work under this License, and how to view a copy of this License.  If\n");
-  printf_filtered ("the interface presents a list of user commands or options, such as a\n");
-  printf_filtered ("menu, a prominent item in the list meets this criterion.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  1. Source Code.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The \"source code\" for a work means the preferred form of the work\n");
-  printf_filtered ("for making modifications to it.  \"Object code\" means any non-source\n");
-  printf_filtered ("form of a work.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  A \"Standard Interface\" means an interface that either is an official\n");
-  printf_filtered ("standard defined by a recognized standards body, or, in the case of\n");
-  printf_filtered ("interfaces specified for a particular programming language, one that\n");
-  printf_filtered ("is widely used among developers working in that language.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The \"System Libraries\" of an executable work include anything, other\n");
-  printf_filtered ("than the work as a whole, that (a) is included in the normal form of\n");
-  printf_filtered ("packaging a Major Component, but which is not part of that Major\n");
-  printf_filtered ("Component, and (b) serves only to enable use of the work with that\n");
-  printf_filtered ("Major Component, or to implement a Standard Interface for which an\n");
-  printf_filtered ("implementation is available to the public in source code form.  A\n");
-  printf_filtered ("\"Major Component\", in this context, means a major essential component\n");
-  printf_filtered ("(kernel, window system, and so on) of the specific operating system\n");
-  printf_filtered ("(if any) on which the executable work runs, or a compiler used to\n");
-  printf_filtered ("produce the work, or an object code interpreter used to run it.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The \"Corresponding Source\" for a work in object code form means all\n");
-  printf_filtered ("the source code needed to generate, install, and (for an executable\n");
-  printf_filtered ("work) run the object code and to modify the work, including scripts to\n");
-  printf_filtered ("control those activities.  However, it does not include the work's\n");
-  printf_filtered ("System Libraries, or general-purpose tools or generally available free\n");
-  printf_filtered ("programs which are used unmodified in performing those activities but\n");
-  printf_filtered ("which are not part of the work.  For example, Corresponding Source\n");
-  printf_filtered ("includes interface definition files associated with source files for\n");
-  printf_filtered ("the work, and the source code for shared libraries and dynamically\n");
-  printf_filtered ("linked subprograms that the work is specifically designed to require,\n");
-  printf_filtered ("such as by intimate data communication or control flow between those\n");
-  printf_filtered ("subprograms and other parts of the work.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The Corresponding Source need not include anything that users\n");
-  printf_filtered ("can regenerate automatically from other parts of the Corresponding\n");
-  printf_filtered ("Source.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The Corresponding Source for a work in source code form is that\n");
-  printf_filtered ("same work.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  2. Basic Permissions.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  All rights granted under this License are granted for the term of\n");
-  printf_filtered ("copyright on the Program, and are irrevocable provided the stated\n");
-  printf_filtered ("conditions are met.  This License explicitly affirms your unlimited\n");
-  printf_filtered ("permission to run the unmodified Program.  The output from running a\n");
-  printf_filtered ("covered work is covered by this License only if the output, given its\n");
-  printf_filtered ("content, constitutes a covered work.  This License acknowledges your\n");
-  printf_filtered ("rights of fair use or other equivalent, as provided by copyright law.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  You may make, run and propagate covered works that you do not\n");
-  printf_filtered ("convey, without conditions so long as your license otherwise remains\n");
-  printf_filtered ("in force.  You may convey covered works to others for the sole purpose\n");
-  printf_filtered ("of having them make modifications exclusively for you, or provide you\n");
-  printf_filtered ("with facilities for running those works, provided that you comply with\n");
-  printf_filtered ("the terms of this License in conveying all material for which you do\n");
-  printf_filtered ("not control copyright.  Those thus making or running the covered works\n");
-  printf_filtered ("for you must do so exclusively on your behalf, under your direction\n");
-  printf_filtered ("and control, on terms that prohibit them from making any copies of\n");
-  printf_filtered ("your copyrighted material outside their relationship with you.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Conveying under any other circumstances is permitted solely under\n");
-  printf_filtered ("the conditions stated below.  Sublicensing is not allowed; section 10\n");
-  printf_filtered ("makes it unnecessary.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  No covered work shall be deemed part of an effective technological\n");
-  printf_filtered ("measure under any applicable law fulfilling obligations under article\n");
-  printf_filtered ("11 of the WIPO copyright treaty adopted on 20 December 1996, or\n");
-  printf_filtered ("similar laws prohibiting or restricting circumvention of such\n");
-  printf_filtered ("measures.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  When you convey a covered work, you waive any legal power to forbid\n");
-  printf_filtered ("circumvention of technological measures to the extent such circumvention\n");
-  printf_filtered ("is effected by exercising rights under this License with respect to\n");
-  printf_filtered ("the covered work, and you disclaim any intention to limit operation or\n");
-  printf_filtered ("modification of the work as a means of enforcing, against the work's\n");
-  printf_filtered ("users, your or third parties' legal rights to forbid circumvention of\n");
-  printf_filtered ("technological measures.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  4. Conveying Verbatim Copies.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  You may convey verbatim copies of the Program's source code as you\n");
-  printf_filtered ("receive it, in any medium, provided that you conspicuously and\n");
-  printf_filtered ("appropriately publish on each copy an appropriate copyright notice;\n");
-  printf_filtered ("keep intact all notices stating that this License and any\n");
-  printf_filtered ("non-permissive terms added in accord with section 7 apply to the code;\n");
-  printf_filtered ("keep intact all notices of the absence of any warranty; and give all\n");
-  printf_filtered ("recipients a copy of this License along with the Program.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  You may charge any price or no price for each copy that you convey,\n");
-  printf_filtered ("and you may offer support or warranty protection for a fee.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  5. Conveying Modified Source Versions.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  You may convey a work based on the Program, or the modifications to\n");
-  printf_filtered ("produce it from the Program, in the form of source code under the\n");
-  printf_filtered ("terms of section 4, provided that you also meet all of these conditions:\n");
-  printf_filtered ("\n");
-  printf_filtered ("    a) The work must carry prominent notices stating that you modified\n");
-  printf_filtered ("    it, and giving a relevant date.\n");
-  printf_filtered ("\n");
-  printf_filtered ("    b) The work must carry prominent notices stating that it is\n");
-  printf_filtered ("    released under this License and any conditions added under section\n");
-  printf_filtered ("    7.  This requirement modifies the requirement in section 4 to\n");
-  printf_filtered ("    \"keep intact all notices\".\n");
-  printf_filtered ("\n");
-  printf_filtered ("    c) You must license the entire work, as a whole, under this\n");
-  printf_filtered ("    License to anyone who comes into possession of a copy.  This\n");
-  printf_filtered ("    License will therefore apply, along with any applicable section 7\n");
-  printf_filtered ("    additional terms, to the whole of the work, and all its parts,\n");
-  printf_filtered ("    regardless of how they are packaged.  This License gives no\n");
-  printf_filtered ("    permission to license the work in any other way, but it does not\n");
-  printf_filtered ("    invalidate such permission if you have separately received it.\n");
-  printf_filtered ("\n");
-  printf_filtered ("    d) If the work has interactive user interfaces, each must display\n");
-  printf_filtered ("    Appropriate Legal Notices; however, if the Program has interactive\n");
-  printf_filtered ("    interfaces that do not display Appropriate Legal Notices, your\n");
-  printf_filtered ("    work need not make them do so.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  A compilation of a covered work with other separate and independent\n");
-  printf_filtered ("works, which are not by their nature extensions of the covered work,\n");
-  printf_filtered ("and which are not combined with it such as to form a larger program,\n");
-  printf_filtered ("in or on a volume of a storage or distribution medium, is called an\n");
-  printf_filtered ("\"aggregate\" if the compilation and its resulting copyright are not\n");
-  printf_filtered ("used to limit the access or legal rights of the compilation's users\n");
-  printf_filtered ("beyond what the individual works permit.  Inclusion of a covered work\n");
-  printf_filtered ("in an aggregate does not cause this License to apply to the other\n");
-  printf_filtered ("parts of the aggregate.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  6. Conveying Non-Source Forms.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  You may convey a covered work in object code form under the terms\n");
-  printf_filtered ("of sections 4 and 5, provided that you also convey the\n");
-  printf_filtered ("machine-readable Corresponding Source under the terms of this License,\n");
-  printf_filtered ("in one of these ways:\n");
-  printf_filtered ("\n");
-  printf_filtered ("    a) Convey the object code in, or embodied in, a physical product\n");
-  printf_filtered ("    (including a physical distribution medium), accompanied by the\n");
-  printf_filtered ("    Corresponding Source fixed on a durable physical medium\n");
-  printf_filtered ("    customarily used for software interchange.\n");
-  printf_filtered ("\n");
-  printf_filtered ("    b) Convey the object code in, or embodied in, a physical product\n");
-  printf_filtered ("    (including a physical distribution medium), accompanied by a\n");
-  printf_filtered ("    written offer, valid for at least three years and valid for as\n");
-  printf_filtered ("    long as you offer spare parts or customer support for that product\n");
-  printf_filtered ("    model, to give anyone who possesses the object code either (1) a\n");
-  printf_filtered ("    copy of the Corresponding Source for all the software in the\n");
-  printf_filtered ("    product that is covered by this License, on a durable physical\n");
-  printf_filtered ("    medium customarily used for software interchange, for a price no\n");
-  printf_filtered ("    more than your reasonable cost of physically performing this\n");
-  printf_filtered ("    conveying of source, or (2) access to copy the\n");
-  printf_filtered ("    Corresponding Source from a network server at no charge.\n");
-  printf_filtered ("\n");
-  printf_filtered ("    c) Convey individual copies of the object code with a copy of the\n");
-  printf_filtered ("    written offer to provide the Corresponding Source.  This\n");
-  printf_filtered ("    alternative is allowed only occasionally and noncommercially, and\n");
-  printf_filtered ("    only if you received the object code with such an offer, in accord\n");
-  printf_filtered ("    with subsection 6b.\n");
-  printf_filtered ("\n");
-  printf_filtered ("    d) Convey the object code by offering access from a designated\n");
-  printf_filtered ("    place (gratis or for a charge), and offer equivalent access to the\n");
-  printf_filtered ("    Corresponding Source in the same way through the same place at no\n");
-  printf_filtered ("    further charge.  You need not require recipients to copy the\n");
-  printf_filtered ("    Corresponding Source along with the object code.  If the place to\n");
-  printf_filtered ("    copy the object code is a network server, the Corresponding Source\n");
-  printf_filtered ("    may be on a different server (operated by you or a third party)\n");
-  printf_filtered ("    that supports equivalent copying facilities, provided you maintain\n");
-  printf_filtered ("    clear directions next to the object code saying where to find the\n");
-  printf_filtered ("    Corresponding Source.  Regardless of what server hosts the\n");
-  printf_filtered ("    Corresponding Source, you remain obligated to ensure that it is\n");
-  printf_filtered ("    available for as long as needed to satisfy these requirements.\n");
-  printf_filtered ("\n");
-  printf_filtered ("    e) Convey the object code using peer-to-peer transmission, provided\n");
-  printf_filtered ("    you inform other peers where the object code and Corresponding\n");
-  printf_filtered ("    Source of the work are being offered to the general public at no\n");
-  printf_filtered ("    charge under subsection 6d.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  A separable portion of the object code, whose source code is excluded\n");
-  printf_filtered ("from the Corresponding Source as a System Library, need not be\n");
-  printf_filtered ("included in conveying the object code work.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  A \"User Product\" is either (1) a \"consumer product\", which means any\n");
-  printf_filtered ("tangible personal property which is normally used for personal, family,\n");
-  printf_filtered ("or household purposes, or (2) anything designed or sold for incorporation\n");
-  printf_filtered ("into a dwelling.  In determining whether a product is a consumer product,\n");
-  printf_filtered ("doubtful cases shall be resolved in favor of coverage.  For a particular\n");
-  printf_filtered ("product received by a particular user, \"normally used\" refers to a\n");
-  printf_filtered ("typical or common use of that class of product, regardless of the status\n");
-  printf_filtered ("of the particular user or of the way in which the particular user\n");
-  printf_filtered ("actually uses, or expects or is expected to use, the product.  A product\n");
-  printf_filtered ("is a consumer product regardless of whether the product has substantial\n");
-  printf_filtered ("commercial, industrial or non-consumer uses, unless such uses represent\n");
-  printf_filtered ("the only significant mode of use of the product.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  \"Installation Information\" for a User Product means any methods,\n");
-  printf_filtered ("procedures, authorization keys, or other information required to install\n");
-  printf_filtered ("and execute modified versions of a covered work in that User Product from\n");
-  printf_filtered ("a modified version of its Corresponding Source.  The information must\n");
-  printf_filtered ("suffice to ensure that the continued functioning of the modified object\n");
-  printf_filtered ("code is in no case prevented or interfered with solely because\n");
-  printf_filtered ("modification has been made.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  If you convey an object code work under this section in, or with, or\n");
-  printf_filtered ("specifically for use in, a User Product, and the conveying occurs as\n");
-  printf_filtered ("part of a transaction in which the right of possession and use of the\n");
-  printf_filtered ("User Product is transferred to the recipient in perpetuity or for a\n");
-  printf_filtered ("fixed term (regardless of how the transaction is characterized), the\n");
-  printf_filtered ("Corresponding Source conveyed under this section must be accompanied\n");
-  printf_filtered ("by the Installation Information.  But this requirement does not apply\n");
-  printf_filtered ("if neither you nor any third party retains the ability to install\n");
-  printf_filtered ("modified object code on the User Product (for example, the work has\n");
-  printf_filtered ("been installed in ROM).\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The requirement to provide Installation Information does not include a\n");
-  printf_filtered ("requirement to continue to provide support service, warranty, or updates\n");
-  printf_filtered ("for a work that has been modified or installed by the recipient, or for\n");
-  printf_filtered ("the User Product in which it has been modified or installed.  Access to a\n");
-  printf_filtered ("network may be denied when the modification itself materially and\n");
-  printf_filtered ("adversely affects the operation of the network or violates the rules and\n");
-  printf_filtered ("protocols for communication across the network.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Corresponding Source conveyed, and Installation Information provided,\n");
-  printf_filtered ("in accord with this section must be in a format that is publicly\n");
-  printf_filtered ("documented (and with an implementation available to the public in\n");
-  printf_filtered ("source code form), and must require no special password or key for\n");
-  printf_filtered ("unpacking, reading or copying.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  7. Additional Terms.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  \"Additional permissions\" are terms that supplement the terms of this\n");
-  printf_filtered ("License by making exceptions from one or more of its conditions.\n");
-  printf_filtered ("Additional permissions that are applicable to the entire Program shall\n");
-  printf_filtered ("be treated as though they were included in this License, to the extent\n");
-  printf_filtered ("that they are valid under applicable law.  If additional permissions\n");
-  printf_filtered ("apply only to part of the Program, that part may be used separately\n");
-  printf_filtered ("under those permissions, but the entire Program remains governed by\n");
-  printf_filtered ("this License without regard to the additional permissions.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  When you convey a copy of a covered work, you may at your option\n");
-  printf_filtered ("remove any additional permissions from that copy, or from any part of\n");
-  printf_filtered ("it.  (Additional permissions may be written to require their own\n");
-  printf_filtered ("removal in certain cases when you modify the work.)  You may place\n");
-  printf_filtered ("additional permissions on material, added by you to a covered work,\n");
-  printf_filtered ("for which you have or can give appropriate copyright permission.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Notwithstanding any other provision of this License, for material you\n");
-  printf_filtered ("add to a covered work, you may (if authorized by the copyright holders of\n");
-  printf_filtered ("that material) supplement the terms of this License with terms:\n");
-  printf_filtered ("\n");
-  printf_filtered ("    a) Disclaiming warranty or limiting liability differently from the\n");
-  printf_filtered ("    terms of sections 15 and 16 of this License; or\n");
-  printf_filtered ("\n");
-  printf_filtered ("    b) Requiring preservation of specified reasonable legal notices or\n");
-  printf_filtered ("    author attributions in that material or in the Appropriate Legal\n");
-  printf_filtered ("    Notices displayed by works containing it; or\n");
-  printf_filtered ("\n");
-  printf_filtered ("    c) Prohibiting misrepresentation of the origin of that material, or\n");
-  printf_filtered ("    requiring that modified versions of such material be marked in\n");
-  printf_filtered ("    reasonable ways as different from the original version; or\n");
-  printf_filtered ("\n");
-  printf_filtered ("    d) Limiting the use for publicity purposes of names of licensors or\n");
-  printf_filtered ("    authors of the material; or\n");
-  printf_filtered ("\n");
-  printf_filtered ("    e) Declining to grant rights under trademark law for use of some\n");
-  printf_filtered ("    trade names, trademarks, or service marks; or\n");
-  printf_filtered ("\n");
-  printf_filtered ("    f) Requiring indemnification of licensors and authors of that\n");
-  printf_filtered ("    material by anyone who conveys the material (or modified versions of\n");
-  printf_filtered ("    it) with contractual assumptions of liability to the recipient, for\n");
-  printf_filtered ("    any liability that these contractual assumptions directly impose on\n");
-  printf_filtered ("    those licensors and authors.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  All other non-permissive additional terms are considered \"further\n");
-  printf_filtered ("restrictions\" within the meaning of section 10.  If the Program as you\n");
-  printf_filtered ("received it, or any part of it, contains a notice stating that it is\n");
-  printf_filtered ("governed by this License along with a term that is a further\n");
-  printf_filtered ("restriction, you may remove that term.  If a license document contains\n");
-  printf_filtered ("a further restriction but permits relicensing or conveying under this\n");
-  printf_filtered ("License, you may add to a covered work material governed by the terms\n");
-  printf_filtered ("of that license document, provided that the further restriction does\n");
-  printf_filtered ("not survive such relicensing or conveying.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  If you add terms to a covered work in accord with this section, you\n");
-  printf_filtered ("must place, in the relevant source files, a statement of the\n");
-  printf_filtered ("additional terms that apply to those files, or a notice indicating\n");
-  printf_filtered ("where to find the applicable terms.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Additional terms, permissive or non-permissive, may be stated in the\n");
-  printf_filtered ("form of a separately written license, or stated as exceptions;\n");
-  printf_filtered ("the above requirements apply either way.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  8. Termination.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  You may not propagate or modify a covered work except as expressly\n");
-  printf_filtered ("provided under this License.  Any attempt otherwise to propagate or\n");
-  printf_filtered ("modify it is void, and will automatically terminate your rights under\n");
-  printf_filtered ("this License (including any patent licenses granted under the third\n");
-  printf_filtered ("paragraph of section 11).\n");
-  printf_filtered ("\n");
-  printf_filtered ("  However, if you cease all violation of this License, then your\n");
-  printf_filtered ("license from a particular copyright holder is reinstated (a)\n");
-  printf_filtered ("provisionally, unless and until the copyright holder explicitly and\n");
-  printf_filtered ("finally terminates your license, and (b) permanently, if the copyright\n");
-  printf_filtered ("holder fails to notify you of the violation by some reasonable means\n");
-  printf_filtered ("prior to 60 days after the cessation.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Moreover, your license from a particular copyright holder is\n");
-  printf_filtered ("reinstated permanently if the copyright holder notifies you of the\n");
-  printf_filtered ("violation by some reasonable means, this is the first time you have\n");
-  printf_filtered ("received notice of violation of this License (for any work) from that\n");
-  printf_filtered ("copyright holder, and you cure the violation prior to 30 days after\n");
-  printf_filtered ("your receipt of the notice.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Termination of your rights under this section does not terminate the\n");
-  printf_filtered ("licenses of parties who have received copies or rights from you under\n");
-  printf_filtered ("this License.  If your rights have been terminated and not permanently\n");
-  printf_filtered ("reinstated, you do not qualify to receive new licenses for the same\n");
-  printf_filtered ("material under section 10.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  9. Acceptance Not Required for Having Copies.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  You are not required to accept this License in order to receive or\n");
-  printf_filtered ("run a copy of the Program.  Ancillary propagation of a covered work\n");
-  printf_filtered ("occurring solely as a consequence of using peer-to-peer transmission\n");
-  printf_filtered ("to receive a copy likewise does not require acceptance.  However,\n");
-  printf_filtered ("nothing other than this License grants you permission to propagate or\n");
-  printf_filtered ("modify any covered work.  These actions infringe copyright if you do\n");
-  printf_filtered ("not accept this License.  Therefore, by modifying or propagating a\n");
-  printf_filtered ("covered work, you indicate your acceptance of this License to do so.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  10. Automatic Licensing of Downstream Recipients.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Each time you convey a covered work, the recipient automatically\n");
-  printf_filtered ("receives a license from the original licensors, to run, modify and\n");
-  printf_filtered ("propagate that work, subject to this License.  You are not responsible\n");
-  printf_filtered ("for enforcing compliance by third parties with this License.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  An \"entity transaction\" is a transaction transferring control of an\n");
-  printf_filtered ("organization, or substantially all assets of one, or subdividing an\n");
-  printf_filtered ("organization, or merging organizations.  If propagation of a covered\n");
-  printf_filtered ("work results from an entity transaction, each party to that\n");
-  printf_filtered ("transaction who receives a copy of the work also receives whatever\n");
-  printf_filtered ("licenses to the work the party's predecessor in interest had or could\n");
-  printf_filtered ("give under the previous paragraph, plus a right to possession of the\n");
-  printf_filtered ("Corresponding Source of the work from the predecessor in interest, if\n");
-  printf_filtered ("the predecessor has it or can get it with reasonable efforts.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  You may not impose any further restrictions on the exercise of the\n");
-  printf_filtered ("rights granted or affirmed under this License.  For example, you may\n");
-  printf_filtered ("not impose a license fee, royalty, or other charge for exercise of\n");
-  printf_filtered ("rights granted under this License, and you may not initiate litigation\n");
-  printf_filtered ("(including a cross-claim or counterclaim in a lawsuit) alleging that\n");
-  printf_filtered ("any patent claim is infringed by making, using, selling, offering for\n");
-  printf_filtered ("sale, or importing the Program or any portion of it.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  11. Patents.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  A \"contributor\" is a copyright holder who authorizes use under this\n");
-  printf_filtered ("License of the Program or a work on which the Program is based.  The\n");
-  printf_filtered ("work thus licensed is called the contributor's \"contributor version\".\n");
-  printf_filtered ("\n");
-  printf_filtered ("  A contributor's \"essential patent claims\" are all patent claims\n");
-  printf_filtered ("owned or controlled by the contributor, whether already acquired or\n");
-  printf_filtered ("hereafter acquired, that would be infringed by some manner, permitted\n");
-  printf_filtered ("by this License, of making, using, or selling its contributor version,\n");
-  printf_filtered ("but do not include claims that would be infringed only as a\n");
-  printf_filtered ("consequence of further modification of the contributor version.  For\n");
-  printf_filtered ("purposes of this definition, \"control\" includes the right to grant\n");
-  printf_filtered ("patent sublicenses in a manner consistent with the requirements of\n");
-  printf_filtered ("this License.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Each contributor grants you a non-exclusive, worldwide, royalty-free\n");
-  printf_filtered ("patent license under the contributor's essential patent claims, to\n");
-  printf_filtered ("make, use, sell, offer for sale, import and otherwise run, modify and\n");
-  printf_filtered ("propagate the contents of its contributor version.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  In the following three paragraphs, a \"patent license\" is any express\n");
-  printf_filtered ("agreement or commitment, however denominated, not to enforce a patent\n");
-  printf_filtered ("(such as an express permission to practice a patent or covenant not to\n");
-  printf_filtered ("sue for patent infringement).  To \"grant\" such a patent license to a\n");
-  printf_filtered ("party means to make such an agreement or commitment not to enforce a\n");
-  printf_filtered ("patent against the party.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  If you convey a covered work, knowingly relying on a patent license,\n");
-  printf_filtered ("and the Corresponding Source of the work is not available for anyone\n");
-  printf_filtered ("to copy, free of charge and under the terms of this License, through a\n");
-  printf_filtered ("publicly available network server or other readily accessible means,\n");
-  printf_filtered ("then you must either (1) cause the Corresponding Source to be so\n");
-  printf_filtered ("available, or (2) arrange to deprive yourself of the benefit of the\n");
-  printf_filtered ("patent license for this particular work, or (3) arrange, in a manner\n");
-  printf_filtered ("consistent with the requirements of this License, to extend the patent\n");
-  printf_filtered ("license to downstream recipients.  \"Knowingly relying\" means you have\n");
-  printf_filtered ("actual knowledge that, but for the patent license, your conveying the\n");
-  printf_filtered ("covered work in a country, or your recipient's use of the covered work\n");
-  printf_filtered ("in a country, would infringe one or more identifiable patents in that\n");
-  printf_filtered ("country that you have reason to believe are valid.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  If, pursuant to or in connection with a single transaction or\n");
-  printf_filtered ("arrangement, you convey, or propagate by procuring conveyance of, a\n");
-  printf_filtered ("covered work, and grant a patent license to some of the parties\n");
-  printf_filtered ("receiving the covered work authorizing them to use, propagate, modify\n");
-  printf_filtered ("or convey a specific copy of the covered work, then the patent license\n");
-  printf_filtered ("you grant is automatically extended to all recipients of the covered\n");
-  printf_filtered ("work and works based on it.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  A patent license is \"discriminatory\" if it does not include within\n");
-  printf_filtered ("the scope of its coverage, prohibits the exercise of, or is\n");
-  printf_filtered ("conditioned on the non-exercise of one or more of the rights that are\n");
-  printf_filtered ("specifically granted under this License.  You may not convey a covered\n");
-  printf_filtered ("work if you are a party to an arrangement with a third party that is\n");
-  printf_filtered ("in the business of distributing software, under which you make payment\n");
-  printf_filtered ("to the third party based on the extent of your activity of conveying\n");
-  printf_filtered ("the work, and under which the third party grants, to any of the\n");
-  printf_filtered ("parties who would receive the covered work from you, a discriminatory\n");
-  printf_filtered ("patent license (a) in connection with copies of the covered work\n");
-  printf_filtered ("conveyed by you (or copies made from those copies), or (b) primarily\n");
-  printf_filtered ("for and in connection with specific products or compilations that\n");
-  printf_filtered ("contain the covered work, unless you entered into that arrangement,\n");
-  printf_filtered ("or that patent license was granted, prior to 28 March 2007.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Nothing in this License shall be construed as excluding or limiting\n");
-  printf_filtered ("any implied license or other defenses to infringement that may\n");
-  printf_filtered ("otherwise be available to you under applicable patent law.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  12. No Surrender of Others' Freedom.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  If conditions are imposed on you (whether by court order, agreement or\n");
-  printf_filtered ("otherwise) that contradict the conditions of this License, they do not\n");
-  printf_filtered ("excuse you from the conditions of this License.  If you cannot convey a\n");
-  printf_filtered ("covered work so as to satisfy simultaneously your obligations under this\n");
-  printf_filtered ("License and any other pertinent obligations, then as a consequence you may\n");
-  printf_filtered ("not convey it at all.  For example, if you agree to terms that obligate you\n");
-  printf_filtered ("to collect a royalty for further conveying from those to whom you convey\n");
-  printf_filtered ("the Program, the only way you could satisfy both those terms and this\n");
-  printf_filtered ("License would be to refrain entirely from conveying the Program.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  13. Use with the GNU Affero General Public License.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Notwithstanding any other provision of this License, you have\n");
-  printf_filtered ("permission to link or combine any covered work with a work licensed\n");
-  printf_filtered ("under version 3 of the GNU Affero General Public License into a single\n");
-  printf_filtered ("combined work, and to convey the resulting work.  The terms of this\n");
-  printf_filtered ("License will continue to apply to the part which is the covered work,\n");
-  printf_filtered ("but the special requirements of the GNU Affero General Public License,\n");
-  printf_filtered ("section 13, concerning interaction through a network will apply to the\n");
-  printf_filtered ("combination as such.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  14. Revised Versions of this License.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  The Free Software Foundation may publish revised and/or new versions of\n");
-  printf_filtered ("the GNU General Public License from time to time.  Such new versions will\n");
-  printf_filtered ("be similar in spirit to the present version, but may differ in detail to\n");
-  printf_filtered ("address new problems or concerns.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Each version is given a distinguishing version number.  If the\n");
-  printf_filtered ("Program specifies that a certain numbered version of the GNU General\n");
-  printf_filtered ("Public License \"or any later version\" applies to it, you have the\n");
-  printf_filtered ("option of following the terms and conditions either of that numbered\n");
-  printf_filtered ("version or of any later version published by the Free Software\n");
-  printf_filtered ("Foundation.  If the Program does not specify a version number of the\n");
-  printf_filtered ("GNU General Public License, you may choose any version ever published\n");
-  printf_filtered ("by the Free Software Foundation.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  If the Program specifies that a proxy can decide which future\n");
-  printf_filtered ("versions of the GNU General Public License can be used, that proxy's\n");
-  printf_filtered ("public statement of acceptance of a version permanently authorizes you\n");
-  printf_filtered ("to choose that version for the Program.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  Later license versions may give you additional or different\n");
-  printf_filtered ("permissions.  However, no additional obligations are imposed on any\n");
-  printf_filtered ("author or copyright holder as a result of your choosing to follow a\n");
-  printf_filtered ("later version.\n");
-  printf_filtered ("\n");
+  gdb_printf ("                    GNU GENERAL PUBLIC LICENSE\n");
+  gdb_printf ("                       Version 3, 29 June 2007\n");
+  gdb_printf ("\n");
+  gdb_printf (" Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n");
+  gdb_printf (" Everyone is permitted to copy and distribute verbatim copies\n");
+  gdb_printf (" of this license document, but changing it is not allowed.\n");
+  gdb_printf ("\n");
+  gdb_printf ("                            Preamble\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The GNU General Public License is a free, copyleft license for\n");
+  gdb_printf ("software and other kinds of works.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The licenses for most software and other practical works are designed\n");
+  gdb_printf ("to take away your freedom to share and change the works.  By contrast,\n");
+  gdb_printf ("the GNU General Public License is intended to guarantee your freedom to\n");
+  gdb_printf ("share and change all versions of a program--to make sure it remains free\n");
+  gdb_printf ("software for all its users.  We, the Free Software Foundation, use the\n");
+  gdb_printf ("GNU General Public License for most of our software; it applies also to\n");
+  gdb_printf ("any other work released this way by its authors.  You can apply it to\n");
+  gdb_printf ("your programs, too.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  When we speak of free software, we are referring to freedom, not\n");
+  gdb_printf ("price.  Our General Public Licenses are designed to make sure that you\n");
+  gdb_printf ("have the freedom to distribute copies of free software (and charge for\n");
+  gdb_printf ("them if you wish), that you receive source code or can get it if you\n");
+  gdb_printf ("want it, that you can change the software or use pieces of it in new\n");
+  gdb_printf ("free programs, and that you know you can do these things.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  To protect your rights, we need to prevent others from denying you\n");
+  gdb_printf ("these rights or asking you to surrender the rights.  Therefore, you have\n");
+  gdb_printf ("certain responsibilities if you distribute copies of the software, or if\n");
+  gdb_printf ("you modify it: responsibilities to respect the freedom of others.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  For example, if you distribute copies of such a program, whether\n");
+  gdb_printf ("gratis or for a fee, you must pass on to the recipients the same\n");
+  gdb_printf ("freedoms that you received.  You must make sure that they, too, receive\n");
+  gdb_printf ("or can get the source code.  And you must show them these terms so they\n");
+  gdb_printf ("know their rights.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Developers that use the GNU GPL protect your rights with two steps:\n");
+  gdb_printf ("(1) assert copyright on the software, and (2) offer you this License\n");
+  gdb_printf ("giving you legal permission to copy, distribute and/or modify it.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  For the developers' and authors' protection, the GPL clearly explains\n");
+  gdb_printf ("that there is no warranty for this free software.  For both users' and\n");
+  gdb_printf ("authors' sake, the GPL requires that modified versions be marked as\n");
+  gdb_printf ("changed, so that their problems will not be attributed erroneously to\n");
+  gdb_printf ("authors of previous versions.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Some devices are designed to deny users access to install or run\n");
+  gdb_printf ("modified versions of the software inside them, although the manufacturer\n");
+  gdb_printf ("can do so.  This is fundamentally incompatible with the aim of\n");
+  gdb_printf ("protecting users' freedom to change the software.  The systematic\n");
+  gdb_printf ("pattern of such abuse occurs in the area of products for individuals to\n");
+  gdb_printf ("use, which is precisely where it is most unacceptable.  Therefore, we\n");
+  gdb_printf ("have designed this version of the GPL to prohibit the practice for those\n");
+  gdb_printf ("products.  If such problems arise substantially in other domains, we\n");
+  gdb_printf ("stand ready to extend this provision to those domains in future versions\n");
+  gdb_printf ("of the GPL, as needed to protect the freedom of users.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Finally, every program is threatened constantly by software patents.\n");
+  gdb_printf ("States should not allow patents to restrict development and use of\n");
+  gdb_printf ("software on general-purpose computers, but in those that do, we wish to\n");
+  gdb_printf ("avoid the special danger that patents applied to a free program could\n");
+  gdb_printf ("make it effectively proprietary.  To prevent this, the GPL assures that\n");
+  gdb_printf ("patents cannot be used to render the program non-free.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The precise terms and conditions for copying, distribution and\n");
+  gdb_printf ("modification follow.\n");
+  gdb_printf ("\n");
+  gdb_printf ("                       TERMS AND CONDITIONS\n");
+  gdb_printf ("\n");
+  gdb_printf ("  0. Definitions.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  \"This License\" refers to version 3 of the GNU General Public License.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  \"Copyright\" also means copyright-like laws that apply to other kinds of\n");
+  gdb_printf ("works, such as semiconductor masks.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  \"The Program\" refers to any copyrightable work licensed under this\n");
+  gdb_printf ("License.  Each licensee is addressed as \"you\".  \"Licensees\" and\n");
+  gdb_printf ("\"recipients\" may be individuals or organizations.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  To \"modify\" a work means to copy from or adapt all or part of the work\n");
+  gdb_printf ("in a fashion requiring copyright permission, other than the making of an\n");
+  gdb_printf ("exact copy.  The resulting work is called a \"modified version\" of the\n");
+  gdb_printf ("earlier work or a work \"based on\" the earlier work.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  A \"covered work\" means either the unmodified Program or a work based\n");
+  gdb_printf ("on the Program.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  To \"propagate\" a work means to do anything with it that, without\n");
+  gdb_printf ("permission, would make you directly or secondarily liable for\n");
+  gdb_printf ("infringement under applicable copyright law, except executing it on a\n");
+  gdb_printf ("computer or modifying a private copy.  Propagation includes copying,\n");
+  gdb_printf ("distribution (with or without modification), making available to the\n");
+  gdb_printf ("public, and in some countries other activities as well.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  To \"convey\" a work means any kind of propagation that enables other\n");
+  gdb_printf ("parties to make or receive copies.  Mere interaction with a user through\n");
+  gdb_printf ("a computer network, with no transfer of a copy, is not conveying.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  An interactive user interface displays \"Appropriate Legal Notices\"\n");
+  gdb_printf ("to the extent that it includes a convenient and prominently visible\n");
+  gdb_printf ("feature that (1) displays an appropriate copyright notice, and (2)\n");
+  gdb_printf ("tells the user that there is no warranty for the work (except to the\n");
+  gdb_printf ("extent that warranties are provided), that licensees may convey the\n");
+  gdb_printf ("work under this License, and how to view a copy of this License.  If\n");
+  gdb_printf ("the interface presents a list of user commands or options, such as a\n");
+  gdb_printf ("menu, a prominent item in the list meets this criterion.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  1. Source Code.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The \"source code\" for a work means the preferred form of the work\n");
+  gdb_printf ("for making modifications to it.  \"Object code\" means any non-source\n");
+  gdb_printf ("form of a work.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  A \"Standard Interface\" means an interface that either is an official\n");
+  gdb_printf ("standard defined by a recognized standards body, or, in the case of\n");
+  gdb_printf ("interfaces specified for a particular programming language, one that\n");
+  gdb_printf ("is widely used among developers working in that language.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The \"System Libraries\" of an executable work include anything, other\n");
+  gdb_printf ("than the work as a whole, that (a) is included in the normal form of\n");
+  gdb_printf ("packaging a Major Component, but which is not part of that Major\n");
+  gdb_printf ("Component, and (b) serves only to enable use of the work with that\n");
+  gdb_printf ("Major Component, or to implement a Standard Interface for which an\n");
+  gdb_printf ("implementation is available to the public in source code form.  A\n");
+  gdb_printf ("\"Major Component\", in this context, means a major essential component\n");
+  gdb_printf ("(kernel, window system, and so on) of the specific operating system\n");
+  gdb_printf ("(if any) on which the executable work runs, or a compiler used to\n");
+  gdb_printf ("produce the work, or an object code interpreter used to run it.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The \"Corresponding Source\" for a work in object code form means all\n");
+  gdb_printf ("the source code needed to generate, install, and (for an executable\n");
+  gdb_printf ("work) run the object code and to modify the work, including scripts to\n");
+  gdb_printf ("control those activities.  However, it does not include the work's\n");
+  gdb_printf ("System Libraries, or general-purpose tools or generally available free\n");
+  gdb_printf ("programs which are used unmodified in performing those activities but\n");
+  gdb_printf ("which are not part of the work.  For example, Corresponding Source\n");
+  gdb_printf ("includes interface definition files associated with source files for\n");
+  gdb_printf ("the work, and the source code for shared libraries and dynamically\n");
+  gdb_printf ("linked subprograms that the work is specifically designed to require,\n");
+  gdb_printf ("such as by intimate data communication or control flow between those\n");
+  gdb_printf ("subprograms and other parts of the work.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The Corresponding Source need not include anything that users\n");
+  gdb_printf ("can regenerate automatically from other parts of the Corresponding\n");
+  gdb_printf ("Source.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The Corresponding Source for a work in source code form is that\n");
+  gdb_printf ("same work.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  2. Basic Permissions.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  All rights granted under this License are granted for the term of\n");
+  gdb_printf ("copyright on the Program, and are irrevocable provided the stated\n");
+  gdb_printf ("conditions are met.  This License explicitly affirms your unlimited\n");
+  gdb_printf ("permission to run the unmodified Program.  The output from running a\n");
+  gdb_printf ("covered work is covered by this License only if the output, given its\n");
+  gdb_printf ("content, constitutes a covered work.  This License acknowledges your\n");
+  gdb_printf ("rights of fair use or other equivalent, as provided by copyright law.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  You may make, run and propagate covered works that you do not\n");
+  gdb_printf ("convey, without conditions so long as your license otherwise remains\n");
+  gdb_printf ("in force.  You may convey covered works to others for the sole purpose\n");
+  gdb_printf ("of having them make modifications exclusively for you, or provide you\n");
+  gdb_printf ("with facilities for running those works, provided that you comply with\n");
+  gdb_printf ("the terms of this License in conveying all material for which you do\n");
+  gdb_printf ("not control copyright.  Those thus making or running the covered works\n");
+  gdb_printf ("for you must do so exclusively on your behalf, under your direction\n");
+  gdb_printf ("and control, on terms that prohibit them from making any copies of\n");
+  gdb_printf ("your copyrighted material outside their relationship with you.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Conveying under any other circumstances is permitted solely under\n");
+  gdb_printf ("the conditions stated below.  Sublicensing is not allowed; section 10\n");
+  gdb_printf ("makes it unnecessary.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  No covered work shall be deemed part of an effective technological\n");
+  gdb_printf ("measure under any applicable law fulfilling obligations under article\n");
+  gdb_printf ("11 of the WIPO copyright treaty adopted on 20 December 1996, or\n");
+  gdb_printf ("similar laws prohibiting or restricting circumvention of such\n");
+  gdb_printf ("measures.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  When you convey a covered work, you waive any legal power to forbid\n");
+  gdb_printf ("circumvention of technological measures to the extent such circumvention\n");
+  gdb_printf ("is effected by exercising rights under this License with respect to\n");
+  gdb_printf ("the covered work, and you disclaim any intention to limit operation or\n");
+  gdb_printf ("modification of the work as a means of enforcing, against the work's\n");
+  gdb_printf ("users, your or third parties' legal rights to forbid circumvention of\n");
+  gdb_printf ("technological measures.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  4. Conveying Verbatim Copies.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  You may convey verbatim copies of the Program's source code as you\n");
+  gdb_printf ("receive it, in any medium, provided that you conspicuously and\n");
+  gdb_printf ("appropriately publish on each copy an appropriate copyright notice;\n");
+  gdb_printf ("keep intact all notices stating that this License and any\n");
+  gdb_printf ("non-permissive terms added in accord with section 7 apply to the code;\n");
+  gdb_printf ("keep intact all notices of the absence of any warranty; and give all\n");
+  gdb_printf ("recipients a copy of this License along with the Program.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  You may charge any price or no price for each copy that you convey,\n");
+  gdb_printf ("and you may offer support or warranty protection for a fee.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  5. Conveying Modified Source Versions.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  You may convey a work based on the Program, or the modifications to\n");
+  gdb_printf ("produce it from the Program, in the form of source code under the\n");
+  gdb_printf ("terms of section 4, provided that you also meet all of these conditions:\n");
+  gdb_printf ("\n");
+  gdb_printf ("    a) The work must carry prominent notices stating that you modified\n");
+  gdb_printf ("    it, and giving a relevant date.\n");
+  gdb_printf ("\n");
+  gdb_printf ("    b) The work must carry prominent notices stating that it is\n");
+  gdb_printf ("    released under this License and any conditions added under section\n");
+  gdb_printf ("    7.  This requirement modifies the requirement in section 4 to\n");
+  gdb_printf ("    \"keep intact all notices\".\n");
+  gdb_printf ("\n");
+  gdb_printf ("    c) You must license the entire work, as a whole, under this\n");
+  gdb_printf ("    License to anyone who comes into possession of a copy.  This\n");
+  gdb_printf ("    License will therefore apply, along with any applicable section 7\n");
+  gdb_printf ("    additional terms, to the whole of the work, and all its parts,\n");
+  gdb_printf ("    regardless of how they are packaged.  This License gives no\n");
+  gdb_printf ("    permission to license the work in any other way, but it does not\n");
+  gdb_printf ("    invalidate such permission if you have separately received it.\n");
+  gdb_printf ("\n");
+  gdb_printf ("    d) If the work has interactive user interfaces, each must display\n");
+  gdb_printf ("    Appropriate Legal Notices; however, if the Program has interactive\n");
+  gdb_printf ("    interfaces that do not display Appropriate Legal Notices, your\n");
+  gdb_printf ("    work need not make them do so.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  A compilation of a covered work with other separate and independent\n");
+  gdb_printf ("works, which are not by their nature extensions of the covered work,\n");
+  gdb_printf ("and which are not combined with it such as to form a larger program,\n");
+  gdb_printf ("in or on a volume of a storage or distribution medium, is called an\n");
+  gdb_printf ("\"aggregate\" if the compilation and its resulting copyright are not\n");
+  gdb_printf ("used to limit the access or legal rights of the compilation's users\n");
+  gdb_printf ("beyond what the individual works permit.  Inclusion of a covered work\n");
+  gdb_printf ("in an aggregate does not cause this License to apply to the other\n");
+  gdb_printf ("parts of the aggregate.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  6. Conveying Non-Source Forms.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  You may convey a covered work in object code form under the terms\n");
+  gdb_printf ("of sections 4 and 5, provided that you also convey the\n");
+  gdb_printf ("machine-readable Corresponding Source under the terms of this License,\n");
+  gdb_printf ("in one of these ways:\n");
+  gdb_printf ("\n");
+  gdb_printf ("    a) Convey the object code in, or embodied in, a physical product\n");
+  gdb_printf ("    (including a physical distribution medium), accompanied by the\n");
+  gdb_printf ("    Corresponding Source fixed on a durable physical medium\n");
+  gdb_printf ("    customarily used for software interchange.\n");
+  gdb_printf ("\n");
+  gdb_printf ("    b) Convey the object code in, or embodied in, a physical product\n");
+  gdb_printf ("    (including a physical distribution medium), accompanied by a\n");
+  gdb_printf ("    written offer, valid for at least three years and valid for as\n");
+  gdb_printf ("    long as you offer spare parts or customer support for that product\n");
+  gdb_printf ("    model, to give anyone who possesses the object code either (1) a\n");
+  gdb_printf ("    copy of the Corresponding Source for all the software in the\n");
+  gdb_printf ("    product that is covered by this License, on a durable physical\n");
+  gdb_printf ("    medium customarily used for software interchange, for a price no\n");
+  gdb_printf ("    more than your reasonable cost of physically performing this\n");
+  gdb_printf ("    conveying of source, or (2) access to copy the\n");
+  gdb_printf ("    Corresponding Source from a network server at no charge.\n");
+  gdb_printf ("\n");
+  gdb_printf ("    c) Convey individual copies of the object code with a copy of the\n");
+  gdb_printf ("    written offer to provide the Corresponding Source.  This\n");
+  gdb_printf ("    alternative is allowed only occasionally and noncommercially, and\n");
+  gdb_printf ("    only if you received the object code with such an offer, in accord\n");
+  gdb_printf ("    with subsection 6b.\n");
+  gdb_printf ("\n");
+  gdb_printf ("    d) Convey the object code by offering access from a designated\n");
+  gdb_printf ("    place (gratis or for a charge), and offer equivalent access to the\n");
+  gdb_printf ("    Corresponding Source in the same way through the same place at no\n");
+  gdb_printf ("    further charge.  You need not require recipients to copy the\n");
+  gdb_printf ("    Corresponding Source along with the object code.  If the place to\n");
+  gdb_printf ("    copy the object code is a network server, the Corresponding Source\n");
+  gdb_printf ("    may be on a different server (operated by you or a third party)\n");
+  gdb_printf ("    that supports equivalent copying facilities, provided you maintain\n");
+  gdb_printf ("    clear directions next to the object code saying where to find the\n");
+  gdb_printf ("    Corresponding Source.  Regardless of what server hosts the\n");
+  gdb_printf ("    Corresponding Source, you remain obligated to ensure that it is\n");
+  gdb_printf ("    available for as long as needed to satisfy these requirements.\n");
+  gdb_printf ("\n");
+  gdb_printf ("    e) Convey the object code using peer-to-peer transmission, provided\n");
+  gdb_printf ("    you inform other peers where the object code and Corresponding\n");
+  gdb_printf ("    Source of the work are being offered to the general public at no\n");
+  gdb_printf ("    charge under subsection 6d.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  A separable portion of the object code, whose source code is excluded\n");
+  gdb_printf ("from the Corresponding Source as a System Library, need not be\n");
+  gdb_printf ("included in conveying the object code work.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  A \"User Product\" is either (1) a \"consumer product\", which means any\n");
+  gdb_printf ("tangible personal property which is normally used for personal, family,\n");
+  gdb_printf ("or household purposes, or (2) anything designed or sold for incorporation\n");
+  gdb_printf ("into a dwelling.  In determining whether a product is a consumer product,\n");
+  gdb_printf ("doubtful cases shall be resolved in favor of coverage.  For a particular\n");
+  gdb_printf ("product received by a particular user, \"normally used\" refers to a\n");
+  gdb_printf ("typical or common use of that class of product, regardless of the status\n");
+  gdb_printf ("of the particular user or of the way in which the particular user\n");
+  gdb_printf ("actually uses, or expects or is expected to use, the product.  A product\n");
+  gdb_printf ("is a consumer product regardless of whether the product has substantial\n");
+  gdb_printf ("commercial, industrial or non-consumer uses, unless such uses represent\n");
+  gdb_printf ("the only significant mode of use of the product.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  \"Installation Information\" for a User Product means any methods,\n");
+  gdb_printf ("procedures, authorization keys, or other information required to install\n");
+  gdb_printf ("and execute modified versions of a covered work in that User Product from\n");
+  gdb_printf ("a modified version of its Corresponding Source.  The information must\n");
+  gdb_printf ("suffice to ensure that the continued functioning of the modified object\n");
+  gdb_printf ("code is in no case prevented or interfered with solely because\n");
+  gdb_printf ("modification has been made.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  If you convey an object code work under this section in, or with, or\n");
+  gdb_printf ("specifically for use in, a User Product, and the conveying occurs as\n");
+  gdb_printf ("part of a transaction in which the right of possession and use of the\n");
+  gdb_printf ("User Product is transferred to the recipient in perpetuity or for a\n");
+  gdb_printf ("fixed term (regardless of how the transaction is characterized), the\n");
+  gdb_printf ("Corresponding Source conveyed under this section must be accompanied\n");
+  gdb_printf ("by the Installation Information.  But this requirement does not apply\n");
+  gdb_printf ("if neither you nor any third party retains the ability to install\n");
+  gdb_printf ("modified object code on the User Product (for example, the work has\n");
+  gdb_printf ("been installed in ROM).\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The requirement to provide Installation Information does not include a\n");
+  gdb_printf ("requirement to continue to provide support service, warranty, or updates\n");
+  gdb_printf ("for a work that has been modified or installed by the recipient, or for\n");
+  gdb_printf ("the User Product in which it has been modified or installed.  Access to a\n");
+  gdb_printf ("network may be denied when the modification itself materially and\n");
+  gdb_printf ("adversely affects the operation of the network or violates the rules and\n");
+  gdb_printf ("protocols for communication across the network.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Corresponding Source conveyed, and Installation Information provided,\n");
+  gdb_printf ("in accord with this section must be in a format that is publicly\n");
+  gdb_printf ("documented (and with an implementation available to the public in\n");
+  gdb_printf ("source code form), and must require no special password or key for\n");
+  gdb_printf ("unpacking, reading or copying.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  7. Additional Terms.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  \"Additional permissions\" are terms that supplement the terms of this\n");
+  gdb_printf ("License by making exceptions from one or more of its conditions.\n");
+  gdb_printf ("Additional permissions that are applicable to the entire Program shall\n");
+  gdb_printf ("be treated as though they were included in this License, to the extent\n");
+  gdb_printf ("that they are valid under applicable law.  If additional permissions\n");
+  gdb_printf ("apply only to part of the Program, that part may be used separately\n");
+  gdb_printf ("under those permissions, but the entire Program remains governed by\n");
+  gdb_printf ("this License without regard to the additional permissions.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  When you convey a copy of a covered work, you may at your option\n");
+  gdb_printf ("remove any additional permissions from that copy, or from any part of\n");
+  gdb_printf ("it.  (Additional permissions may be written to require their own\n");
+  gdb_printf ("removal in certain cases when you modify the work.)  You may place\n");
+  gdb_printf ("additional permissions on material, added by you to a covered work,\n");
+  gdb_printf ("for which you have or can give appropriate copyright permission.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Notwithstanding any other provision of this License, for material you\n");
+  gdb_printf ("add to a covered work, you may (if authorized by the copyright holders of\n");
+  gdb_printf ("that material) supplement the terms of this License with terms:\n");
+  gdb_printf ("\n");
+  gdb_printf ("    a) Disclaiming warranty or limiting liability differently from the\n");
+  gdb_printf ("    terms of sections 15 and 16 of this License; or\n");
+  gdb_printf ("\n");
+  gdb_printf ("    b) Requiring preservation of specified reasonable legal notices or\n");
+  gdb_printf ("    author attributions in that material or in the Appropriate Legal\n");
+  gdb_printf ("    Notices displayed by works containing it; or\n");
+  gdb_printf ("\n");
+  gdb_printf ("    c) Prohibiting misrepresentation of the origin of that material, or\n");
+  gdb_printf ("    requiring that modified versions of such material be marked in\n");
+  gdb_printf ("    reasonable ways as different from the original version; or\n");
+  gdb_printf ("\n");
+  gdb_printf ("    d) Limiting the use for publicity purposes of names of licensors or\n");
+  gdb_printf ("    authors of the material; or\n");
+  gdb_printf ("\n");
+  gdb_printf ("    e) Declining to grant rights under trademark law for use of some\n");
+  gdb_printf ("    trade names, trademarks, or service marks; or\n");
+  gdb_printf ("\n");
+  gdb_printf ("    f) Requiring indemnification of licensors and authors of that\n");
+  gdb_printf ("    material by anyone who conveys the material (or modified versions of\n");
+  gdb_printf ("    it) with contractual assumptions of liability to the recipient, for\n");
+  gdb_printf ("    any liability that these contractual assumptions directly impose on\n");
+  gdb_printf ("    those licensors and authors.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  All other non-permissive additional terms are considered \"further\n");
+  gdb_printf ("restrictions\" within the meaning of section 10.  If the Program as you\n");
+  gdb_printf ("received it, or any part of it, contains a notice stating that it is\n");
+  gdb_printf ("governed by this License along with a term that is a further\n");
+  gdb_printf ("restriction, you may remove that term.  If a license document contains\n");
+  gdb_printf ("a further restriction but permits relicensing or conveying under this\n");
+  gdb_printf ("License, you may add to a covered work material governed by the terms\n");
+  gdb_printf ("of that license document, provided that the further restriction does\n");
+  gdb_printf ("not survive such relicensing or conveying.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  If you add terms to a covered work in accord with this section, you\n");
+  gdb_printf ("must place, in the relevant source files, a statement of the\n");
+  gdb_printf ("additional terms that apply to those files, or a notice indicating\n");
+  gdb_printf ("where to find the applicable terms.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Additional terms, permissive or non-permissive, may be stated in the\n");
+  gdb_printf ("form of a separately written license, or stated as exceptions;\n");
+  gdb_printf ("the above requirements apply either way.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  8. Termination.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  You may not propagate or modify a covered work except as expressly\n");
+  gdb_printf ("provided under this License.  Any attempt otherwise to propagate or\n");
+  gdb_printf ("modify it is void, and will automatically terminate your rights under\n");
+  gdb_printf ("this License (including any patent licenses granted under the third\n");
+  gdb_printf ("paragraph of section 11).\n");
+  gdb_printf ("\n");
+  gdb_printf ("  However, if you cease all violation of this License, then your\n");
+  gdb_printf ("license from a particular copyright holder is reinstated (a)\n");
+  gdb_printf ("provisionally, unless and until the copyright holder explicitly and\n");
+  gdb_printf ("finally terminates your license, and (b) permanently, if the copyright\n");
+  gdb_printf ("holder fails to notify you of the violation by some reasonable means\n");
+  gdb_printf ("prior to 60 days after the cessation.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Moreover, your license from a particular copyright holder is\n");
+  gdb_printf ("reinstated permanently if the copyright holder notifies you of the\n");
+  gdb_printf ("violation by some reasonable means, this is the first time you have\n");
+  gdb_printf ("received notice of violation of this License (for any work) from that\n");
+  gdb_printf ("copyright holder, and you cure the violation prior to 30 days after\n");
+  gdb_printf ("your receipt of the notice.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Termination of your rights under this section does not terminate the\n");
+  gdb_printf ("licenses of parties who have received copies or rights from you under\n");
+  gdb_printf ("this License.  If your rights have been terminated and not permanently\n");
+  gdb_printf ("reinstated, you do not qualify to receive new licenses for the same\n");
+  gdb_printf ("material under section 10.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  9. Acceptance Not Required for Having Copies.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  You are not required to accept this License in order to receive or\n");
+  gdb_printf ("run a copy of the Program.  Ancillary propagation of a covered work\n");
+  gdb_printf ("occurring solely as a consequence of using peer-to-peer transmission\n");
+  gdb_printf ("to receive a copy likewise does not require acceptance.  However,\n");
+  gdb_printf ("nothing other than this License grants you permission to propagate or\n");
+  gdb_printf ("modify any covered work.  These actions infringe copyright if you do\n");
+  gdb_printf ("not accept this License.  Therefore, by modifying or propagating a\n");
+  gdb_printf ("covered work, you indicate your acceptance of this License to do so.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  10. Automatic Licensing of Downstream Recipients.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Each time you convey a covered work, the recipient automatically\n");
+  gdb_printf ("receives a license from the original licensors, to run, modify and\n");
+  gdb_printf ("propagate that work, subject to this License.  You are not responsible\n");
+  gdb_printf ("for enforcing compliance by third parties with this License.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  An \"entity transaction\" is a transaction transferring control of an\n");
+  gdb_printf ("organization, or substantially all assets of one, or subdividing an\n");
+  gdb_printf ("organization, or merging organizations.  If propagation of a covered\n");
+  gdb_printf ("work results from an entity transaction, each party to that\n");
+  gdb_printf ("transaction who receives a copy of the work also receives whatever\n");
+  gdb_printf ("licenses to the work the party's predecessor in interest had or could\n");
+  gdb_printf ("give under the previous paragraph, plus a right to possession of the\n");
+  gdb_printf ("Corresponding Source of the work from the predecessor in interest, if\n");
+  gdb_printf ("the predecessor has it or can get it with reasonable efforts.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  You may not impose any further restrictions on the exercise of the\n");
+  gdb_printf ("rights granted or affirmed under this License.  For example, you may\n");
+  gdb_printf ("not impose a license fee, royalty, or other charge for exercise of\n");
+  gdb_printf ("rights granted under this License, and you may not initiate litigation\n");
+  gdb_printf ("(including a cross-claim or counterclaim in a lawsuit) alleging that\n");
+  gdb_printf ("any patent claim is infringed by making, using, selling, offering for\n");
+  gdb_printf ("sale, or importing the Program or any portion of it.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  11. Patents.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  A \"contributor\" is a copyright holder who authorizes use under this\n");
+  gdb_printf ("License of the Program or a work on which the Program is based.  The\n");
+  gdb_printf ("work thus licensed is called the contributor's \"contributor version\".\n");
+  gdb_printf ("\n");
+  gdb_printf ("  A contributor's \"essential patent claims\" are all patent claims\n");
+  gdb_printf ("owned or controlled by the contributor, whether already acquired or\n");
+  gdb_printf ("hereafter acquired, that would be infringed by some manner, permitted\n");
+  gdb_printf ("by this License, of making, using, or selling its contributor version,\n");
+  gdb_printf ("but do not include claims that would be infringed only as a\n");
+  gdb_printf ("consequence of further modification of the contributor version.  For\n");
+  gdb_printf ("purposes of this definition, \"control\" includes the right to grant\n");
+  gdb_printf ("patent sublicenses in a manner consistent with the requirements of\n");
+  gdb_printf ("this License.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Each contributor grants you a non-exclusive, worldwide, royalty-free\n");
+  gdb_printf ("patent license under the contributor's essential patent claims, to\n");
+  gdb_printf ("make, use, sell, offer for sale, import and otherwise run, modify and\n");
+  gdb_printf ("propagate the contents of its contributor version.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  In the following three paragraphs, a \"patent license\" is any express\n");
+  gdb_printf ("agreement or commitment, however denominated, not to enforce a patent\n");
+  gdb_printf ("(such as an express permission to practice a patent or covenant not to\n");
+  gdb_printf ("sue for patent infringement).  To \"grant\" such a patent license to a\n");
+  gdb_printf ("party means to make such an agreement or commitment not to enforce a\n");
+  gdb_printf ("patent against the party.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  If you convey a covered work, knowingly relying on a patent license,\n");
+  gdb_printf ("and the Corresponding Source of the work is not available for anyone\n");
+  gdb_printf ("to copy, free of charge and under the terms of this License, through a\n");
+  gdb_printf ("publicly available network server or other readily accessible means,\n");
+  gdb_printf ("then you must either (1) cause the Corresponding Source to be so\n");
+  gdb_printf ("available, or (2) arrange to deprive yourself of the benefit of the\n");
+  gdb_printf ("patent license for this particular work, or (3) arrange, in a manner\n");
+  gdb_printf ("consistent with the requirements of this License, to extend the patent\n");
+  gdb_printf ("license to downstream recipients.  \"Knowingly relying\" means you have\n");
+  gdb_printf ("actual knowledge that, but for the patent license, your conveying the\n");
+  gdb_printf ("covered work in a country, or your recipient's use of the covered work\n");
+  gdb_printf ("in a country, would infringe one or more identifiable patents in that\n");
+  gdb_printf ("country that you have reason to believe are valid.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  If, pursuant to or in connection with a single transaction or\n");
+  gdb_printf ("arrangement, you convey, or propagate by procuring conveyance of, a\n");
+  gdb_printf ("covered work, and grant a patent license to some of the parties\n");
+  gdb_printf ("receiving the covered work authorizing them to use, propagate, modify\n");
+  gdb_printf ("or convey a specific copy of the covered work, then the patent license\n");
+  gdb_printf ("you grant is automatically extended to all recipients of the covered\n");
+  gdb_printf ("work and works based on it.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  A patent license is \"discriminatory\" if it does not include within\n");
+  gdb_printf ("the scope of its coverage, prohibits the exercise of, or is\n");
+  gdb_printf ("conditioned on the non-exercise of one or more of the rights that are\n");
+  gdb_printf ("specifically granted under this License.  You may not convey a covered\n");
+  gdb_printf ("work if you are a party to an arrangement with a third party that is\n");
+  gdb_printf ("in the business of distributing software, under which you make payment\n");
+  gdb_printf ("to the third party based on the extent of your activity of conveying\n");
+  gdb_printf ("the work, and under which the third party grants, to any of the\n");
+  gdb_printf ("parties who would receive the covered work from you, a discriminatory\n");
+  gdb_printf ("patent license (a) in connection with copies of the covered work\n");
+  gdb_printf ("conveyed by you (or copies made from those copies), or (b) primarily\n");
+  gdb_printf ("for and in connection with specific products or compilations that\n");
+  gdb_printf ("contain the covered work, unless you entered into that arrangement,\n");
+  gdb_printf ("or that patent license was granted, prior to 28 March 2007.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Nothing in this License shall be construed as excluding or limiting\n");
+  gdb_printf ("any implied license or other defenses to infringement that may\n");
+  gdb_printf ("otherwise be available to you under applicable patent law.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  12. No Surrender of Others' Freedom.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  If conditions are imposed on you (whether by court order, agreement or\n");
+  gdb_printf ("otherwise) that contradict the conditions of this License, they do not\n");
+  gdb_printf ("excuse you from the conditions of this License.  If you cannot convey a\n");
+  gdb_printf ("covered work so as to satisfy simultaneously your obligations under this\n");
+  gdb_printf ("License and any other pertinent obligations, then as a consequence you may\n");
+  gdb_printf ("not convey it at all.  For example, if you agree to terms that obligate you\n");
+  gdb_printf ("to collect a royalty for further conveying from those to whom you convey\n");
+  gdb_printf ("the Program, the only way you could satisfy both those terms and this\n");
+  gdb_printf ("License would be to refrain entirely from conveying the Program.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  13. Use with the GNU Affero General Public License.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Notwithstanding any other provision of this License, you have\n");
+  gdb_printf ("permission to link or combine any covered work with a work licensed\n");
+  gdb_printf ("under version 3 of the GNU Affero General Public License into a single\n");
+  gdb_printf ("combined work, and to convey the resulting work.  The terms of this\n");
+  gdb_printf ("License will continue to apply to the part which is the covered work,\n");
+  gdb_printf ("but the special requirements of the GNU Affero General Public License,\n");
+  gdb_printf ("section 13, concerning interaction through a network will apply to the\n");
+  gdb_printf ("combination as such.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  14. Revised Versions of this License.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  The Free Software Foundation may publish revised and/or new versions of\n");
+  gdb_printf ("the GNU General Public License from time to time.  Such new versions will\n");
+  gdb_printf ("be similar in spirit to the present version, but may differ in detail to\n");
+  gdb_printf ("address new problems or concerns.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Each version is given a distinguishing version number.  If the\n");
+  gdb_printf ("Program specifies that a certain numbered version of the GNU General\n");
+  gdb_printf ("Public License \"or any later version\" applies to it, you have the\n");
+  gdb_printf ("option of following the terms and conditions either of that numbered\n");
+  gdb_printf ("version or of any later version published by the Free Software\n");
+  gdb_printf ("Foundation.  If the Program does not specify a version number of the\n");
+  gdb_printf ("GNU General Public License, you may choose any version ever published\n");
+  gdb_printf ("by the Free Software Foundation.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  If the Program specifies that a proxy can decide which future\n");
+  gdb_printf ("versions of the GNU General Public License can be used, that proxy's\n");
+  gdb_printf ("public statement of acceptance of a version permanently authorizes you\n");
+  gdb_printf ("to choose that version for the Program.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  Later license versions may give you additional or different\n");
+  gdb_printf ("permissions.  However, no additional obligations are imposed on any\n");
+  gdb_printf ("author or copyright holder as a result of your choosing to follow a\n");
+  gdb_printf ("later version.\n");
+  gdb_printf ("\n");
 }
 
 static void
 show_warranty_command (const char *ignore, int from_tty)
 {
-  printf_filtered ("  15. Disclaimer of Warranty.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\n");
-  printf_filtered ("APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\n");
-  printf_filtered ("HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\n");
-  printf_filtered ("OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\n");
-  printf_filtered ("THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n");
-  printf_filtered ("PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\n");
-  printf_filtered ("IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n");
-  printf_filtered ("ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  16. Limitation of Liability.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n");
-  printf_filtered ("WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\n");
-  printf_filtered ("THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\n");
-  printf_filtered ("GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\n");
-  printf_filtered ("USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\n");
-  printf_filtered ("DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\n");
-  printf_filtered ("PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\n");
-  printf_filtered ("EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\n");
-  printf_filtered ("SUCH DAMAGES.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  17. Interpretation of Sections 15 and 16.\n");
-  printf_filtered ("\n");
-  printf_filtered ("  If the disclaimer of warranty and limitation of liability provided\n");
-  printf_filtered ("above cannot be given local legal effect according to their terms,\n");
-  printf_filtered ("reviewing courts shall apply local law that most closely approximates\n");
-  printf_filtered ("an absolute waiver of all civil liability in connection with the\n");
-  printf_filtered ("Program, unless a warranty or assumption of liability accompanies a\n");
-  printf_filtered ("copy of the Program in return for a fee.\n");
-  printf_filtered ("\n");
+  gdb_printf ("  15. Disclaimer of Warranty.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\n");
+  gdb_printf ("APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\n");
+  gdb_printf ("HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\n");
+  gdb_printf ("OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\n");
+  gdb_printf ("THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n");
+  gdb_printf ("PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\n");
+  gdb_printf ("IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n");
+  gdb_printf ("ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  16. Limitation of Liability.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n");
+  gdb_printf ("WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\n");
+  gdb_printf ("THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\n");
+  gdb_printf ("GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\n");
+  gdb_printf ("USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\n");
+  gdb_printf ("DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\n");
+  gdb_printf ("PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\n");
+  gdb_printf ("EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\n");
+  gdb_printf ("SUCH DAMAGES.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  17. Interpretation of Sections 15 and 16.\n");
+  gdb_printf ("\n");
+  gdb_printf ("  If the disclaimer of warranty and limitation of liability provided\n");
+  gdb_printf ("above cannot be given local legal effect according to their terms,\n");
+  gdb_printf ("reviewing courts shall apply local law that most closely approximates\n");
+  gdb_printf ("an absolute waiver of all civil liability in connection with the\n");
+  gdb_printf ("Program, unless a warranty or assumption of liability accompanies a\n");
+  gdb_printf ("copy of the Program in return for a fee.\n");
+  gdb_printf ("\n");
 }
 
+void _initialize_copying ();
 void
-_initialize_copying (void)
+_initialize_copying ()
 {
   add_cmd ("copying", no_set_class, show_copying_command,
 	   _("Conditions for redistributing copies of GDB."),
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/copyright.py ./gdb/copyright.py
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/copyright.py	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/copyright.py	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 
-# Copyright (C) 2011-2019 Free Software Foundation, Inc.
+# Copyright (C) 2011-2024 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
@@ -22,7 +22,7 @@
 This script updates the list of years in the copyright notices in
 most files maintained by the GDB project.
 
-Usage: cd src/gdb && python copyright.py
+Usage: cd src/gdb && ./copyright.py
 
 Always review the output of this script before committing it!
 A useful command to review the output is:
@@ -30,10 +30,14 @@ A useful command to review the output is
 This removes the bulk of the changes which are most likely to be correct.
 """
 
+import argparse
 import datetime
+import locale
 import os
 import os.path
 import subprocess
+import sys
+from typing import List, Optional
 
 
 def get_update_list():
@@ -44,22 +48,33 @@ def get_update_list():
     the files are relative to that root directory.
     """
     result = []
-    for gdb_dir in ('gdb', 'sim', 'include/gdb'):
+    for gdb_dir in (
+        "gdb",
+        "gdbserver",
+        "gdbsupport",
+        "gnulib",
+        "sim",
+        "include/gdb",
+    ):
         for root, dirs, files in os.walk(gdb_dir, topdown=True):
             for dirname in dirs:
                 reldirname = "%s/%s" % (root, dirname)
-                if (dirname in EXCLUDE_ALL_LIST
+                if (
+                    dirname in EXCLUDE_ALL_LIST
                     or reldirname in EXCLUDE_LIST
                     or reldirname in NOT_FSF_LIST
-                    or reldirname in BY_HAND):
+                    or reldirname in BY_HAND
+                ):
                     # Prune this directory from our search list.
                     dirs.remove(dirname)
             for filename in files:
                 relpath = "%s/%s" % (root, filename)
-                if (filename in EXCLUDE_ALL_LIST
+                if (
+                    filename in EXCLUDE_ALL_LIST
                     or relpath in EXCLUDE_LIST
                     or relpath in NOT_FSF_LIST
-                    or relpath in BY_HAND):
+                    or relpath in BY_HAND
+                ):
                     # Ignore this file.
                     pass
                 else:
@@ -76,14 +91,18 @@ def update_files(update_list):
     # all years should be collapsed to one single year interval,
     # even if there are "holes" in the list of years found in the
     # original copyright notice (OK'ed by the FSF, case [gnu.org #719834]).
-    os.environ['UPDATE_COPYRIGHT_USE_INTERVALS'] = '2'
+    os.environ["UPDATE_COPYRIGHT_USE_INTERVALS"] = "2"
 
     # Perform the update, and save the output in a string.
-    update_cmd = ['bash', 'gdb/gnulib/import/extra/update-copyright']
+    update_cmd = ["bash", "gnulib/import/extra/update-copyright"]
     update_cmd += update_list
 
-    p = subprocess.Popen(update_cmd, stdout=subprocess.PIPE,
-                         stderr=subprocess.STDOUT)
+    p = subprocess.Popen(
+        update_cmd,
+        stdout=subprocess.PIPE,
+        stderr=subprocess.STDOUT,
+        encoding=locale.getpreferredencoding(),
+    )
     update_out = p.communicate()[0]
 
     # Process the output.  Typically, a lot of files do not have
@@ -94,20 +113,18 @@ def update_files(update_list):
     # the line out from the output, since there is nothing more to do,
     # short of looking at each file and seeing which notice is appropriate.
     # Too much work! (~4,000 files listed as of 2012-01-03).
-    update_out = update_out.splitlines()
-    warning_string = ': warning: copyright statement not found'
+    update_out = update_out.splitlines(keepends=False)
+    warning_string = ": warning: copyright statement not found"
     warning_len = len(warning_string)
 
     for line in update_out:
-        if line.endswith('\n'):
-            line = line[:-1]
         if line.endswith(warning_string):
             filename = line[:-warning_len]
             if may_have_copyright_notice(filename):
-                print line
+                print(line)
         else:
             # Unrecognized file format. !?!
-            print "*** " + line
+            print("*** " + line)
 
 
 def may_have_copyright_notice(filename):
@@ -117,7 +134,7 @@ def may_have_copyright_notice(filename):
     This function assumes that the current working directory is that root
     directory.
 
-    The algorigthm is fairly crude, meaning that it might return
+    The algorithm is fairly crude, meaning that it might return
     some false positives.  I do not think it will return any false
     negatives...  We might improve this function to handle more
     complex cases later...
@@ -127,44 +144,62 @@ def may_have_copyright_notice(filename):
     # 50 lines...
     MAX_LINES = 50
 
-    fd = open(filename)
-
-    lineno = 1
-    for line in fd:
-        if 'Copyright' in line:
-            return True
-        lineno += 1
-        if lineno > 50:
-            return False
+    # We don't really know what encoding each file might be following,
+    # so just open the file as a byte stream. We only need to search
+    # for a pattern that should be the same regardless of encoding,
+    # so that should be good enough.
+    with open(filename, "rb") as fd:
+        for lineno, line in enumerate(fd, start=1):
+            if b"Copyright" in line:
+                return True
+            if lineno > MAX_LINES:
+                break
     return False
 
 
-def main ():
+def get_parser() -> argparse.ArgumentParser:
+    """Get a command line parser."""
+    parser = argparse.ArgumentParser(
+        description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
+    )
+    return parser
+
+
+def main(argv: List[str]) -> Optional[int]:
     """The main subprogram."""
-    if not os.path.isfile("gnulib/import/extra/update-copyright"):
-        print "Error: This script must be called from the gdb directory."
+    parser = get_parser()
+    _ = parser.parse_args(argv)
     root_dir = os.path.dirname(os.getcwd())
     os.chdir(root_dir)
 
+    if not (
+        os.path.isdir("gdb") and os.path.isfile("gnulib/import/extra/update-copyright")
+    ):
+        sys.exit("Error: This script must be called from the gdb directory.")
+
     update_list = get_update_list()
-    update_files (update_list)
+    update_files(update_list)
 
     # Remind the user that some files need to be updated by HAND...
 
     if MULTIPLE_COPYRIGHT_HEADERS:
-        print
-        print("\033[31m"
-              "REMINDER: Multiple copyright headers must be updated by hand:"
-              "\033[0m")
+        print()
+        print(
+            "\033[31m"
+            "REMINDER: Multiple copyright headers must be updated by hand:"
+            "\033[0m"
+        )
         for filename in MULTIPLE_COPYRIGHT_HEADERS:
-            print "  ", filename
+            print("  ", filename)
 
     if BY_HAND:
-        print
-        print "\033[31mREMINDER: The following files must be updated by hand." \
-              "\033[0m"
+        print()
+        print(
+            "\033[31mREMINDER: The following files must be updated by hand." "\033[0m"
+        )
         for filename in BY_HAND:
-            print "  ", filename
+            print("  ", filename)
+
 
 ############################################################################
 #
@@ -180,9 +215,14 @@ def main ():
 #
 # Filenames are relative to the root directory.
 EXCLUDE_LIST = (
-    'gdb/nat/glibc_thread_db.h',
-    'gdb/CONTRIBUTE',
-    'gdb/gnulib/import'
+    "gdb/nat/glibc_thread_db.h",
+    "gdb/CONTRIBUTE",
+    "gdbsupport/Makefile.in",
+    "gnulib/doc/gendocs_template",
+    "gnulib/doc/gendocs_template_min",
+    "gnulib/import",
+    "gnulib/config.in",
+    "gnulib/Makefile.in",
 )
 
 # Files which should not be modified, either because they are
@@ -194,8 +234,14 @@ EXCLUDE_LIST = (
 # Eg: We want all files named COPYING to be left untouched.
 
 EXCLUDE_ALL_LIST = (
-    "COPYING", "COPYING.LIB", "CVS", "configure", "copying.c",
-    "fdl.texi", "gpl.texi", "aclocal.m4",
+    "COPYING",
+    "COPYING.LIB",
+    "CVS",
+    "configure",
+    "copying.c",
+    "fdl.texi",
+    "gpl.texi",
+    "aclocal.m4",
 )
 
 # The list of files to update by hand.
@@ -209,75 +255,175 @@ BY_HAND = (
 MULTIPLE_COPYRIGHT_HEADERS = (
     "gdb/doc/gdb.texinfo",
     "gdb/doc/refcard.tex",
-    "gdb/gdbarch.sh",
+    "gdb/syscalls/update-netbsd.sh",
 )
 
-# The list of file which have a copyright, but not head by the FSF.
+# The list of file which have a copyright, but not held by the FSF.
 # Filenames are relative to the root directory.
 NOT_FSF_LIST = (
     "gdb/exc_request.defs",
     "gdb/gdbtk",
     "gdb/testsuite/gdb.gdbtk/",
-    "sim/arm/armemu.h", "sim/arm/armos.c", "sim/arm/gdbhost.c",
-    "sim/arm/dbg_hif.h", "sim/arm/dbg_conf.h", "sim/arm/communicate.h",
-    "sim/arm/armos.h", "sim/arm/armcopro.c", "sim/arm/armemu.c",
-    "sim/arm/kid.c", "sim/arm/thumbemu.c", "sim/arm/armdefs.h",
-    "sim/arm/armopts.h", "sim/arm/dbg_cp.h", "sim/arm/dbg_rdi.h",
-    "sim/arm/parent.c", "sim/arm/armsupp.c", "sim/arm/armrdi.c",
-    "sim/arm/bag.c", "sim/arm/armvirt.c", "sim/arm/main.c", "sim/arm/bag.h",
-    "sim/arm/communicate.c", "sim/arm/gdbhost.h", "sim/arm/armfpe.h",
+    "sim/arm/armemu.h",
+    "sim/arm/armos.c",
+    "sim/arm/gdbhost.c",
+    "sim/arm/dbg_hif.h",
+    "sim/arm/dbg_conf.h",
+    "sim/arm/communicate.h",
+    "sim/arm/armos.h",
+    "sim/arm/armcopro.c",
+    "sim/arm/armemu.c",
+    "sim/arm/kid.c",
+    "sim/arm/thumbemu.c",
+    "sim/arm/armdefs.h",
+    "sim/arm/armopts.h",
+    "sim/arm/dbg_cp.h",
+    "sim/arm/dbg_rdi.h",
+    "sim/arm/parent.c",
+    "sim/arm/armsupp.c",
+    "sim/arm/armrdi.c",
+    "sim/arm/bag.c",
+    "sim/arm/armvirt.c",
+    "sim/arm/main.c",
+    "sim/arm/bag.h",
+    "sim/arm/communicate.c",
+    "sim/arm/gdbhost.h",
+    "sim/arm/armfpe.h",
     "sim/arm/arminit.c",
-    "sim/common/cgen-fpu.c", "sim/common/cgen-fpu.h",
+    "sim/common/cgen-fpu.c",
+    "sim/common/cgen-fpu.h",
     "sim/common/cgen-accfp.c",
-    "sim/mips/m16run.c", "sim/mips/sim-main.c",
+    "sim/mips/m16run.c",
+    "sim/mips/sim-main.c",
     "sim/moxie/moxie-gdb.dts",
     # Not a single file in sim/ppc/ appears to be copyright FSF :-(.
-    "sim/ppc/filter.h", "sim/ppc/gen-support.h", "sim/ppc/ld-insn.h",
-    "sim/ppc/hw_sem.c", "sim/ppc/hw_disk.c", "sim/ppc/idecode_branch.h",
-    "sim/ppc/sim-endian.h", "sim/ppc/table.c", "sim/ppc/hw_core.c",
-    "sim/ppc/gen-support.c", "sim/ppc/gen-semantics.h", "sim/ppc/cpu.h",
-    "sim/ppc/sim_callbacks.h", "sim/ppc/RUN", "sim/ppc/Makefile.in",
-    "sim/ppc/emul_chirp.c", "sim/ppc/hw_nvram.c", "sim/ppc/dc-test.01",
-    "sim/ppc/hw_phb.c", "sim/ppc/hw_eeprom.c", "sim/ppc/bits.h",
-    "sim/ppc/hw_vm.c", "sim/ppc/cap.h", "sim/ppc/os_emul.h",
-    "sim/ppc/options.h", "sim/ppc/gen-idecode.c", "sim/ppc/filter.c",
-    "sim/ppc/corefile-n.h", "sim/ppc/std-config.h", "sim/ppc/ld-decode.h",
-    "sim/ppc/filter_filename.h", "sim/ppc/hw_shm.c",
-    "sim/ppc/pk_disklabel.c", "sim/ppc/dc-simple", "sim/ppc/misc.h",
-    "sim/ppc/device_table.h", "sim/ppc/ld-insn.c", "sim/ppc/inline.c",
-    "sim/ppc/emul_bugapi.h", "sim/ppc/hw_cpu.h", "sim/ppc/debug.h",
-    "sim/ppc/hw_ide.c", "sim/ppc/debug.c", "sim/ppc/gen-itable.h",
-    "sim/ppc/interrupts.c", "sim/ppc/hw_glue.c", "sim/ppc/emul_unix.c",
-    "sim/ppc/sim_calls.c", "sim/ppc/dc-complex", "sim/ppc/ld-cache.c",
-    "sim/ppc/registers.h", "sim/ppc/dc-test.02", "sim/ppc/options.c",
-    "sim/ppc/igen.h", "sim/ppc/registers.c", "sim/ppc/device.h",
-    "sim/ppc/emul_chirp.h", "sim/ppc/hw_register.c", "sim/ppc/hw_init.c",
-    "sim/ppc/sim-endian-n.h", "sim/ppc/filter_filename.c",
-    "sim/ppc/bits.c", "sim/ppc/idecode_fields.h", "sim/ppc/hw_memory.c",
-    "sim/ppc/misc.c", "sim/ppc/double.c", "sim/ppc/psim.h",
-    "sim/ppc/hw_trace.c", "sim/ppc/emul_netbsd.h", "sim/ppc/psim.c",
-    "sim/ppc/ppc-instructions", "sim/ppc/tree.h", "sim/ppc/README",
-    "sim/ppc/gen-icache.h", "sim/ppc/gen-model.h", "sim/ppc/ld-cache.h",
-    "sim/ppc/mon.c", "sim/ppc/corefile.h", "sim/ppc/vm.c",
-    "sim/ppc/INSTALL", "sim/ppc/gen-model.c", "sim/ppc/hw_cpu.c",
-    "sim/ppc/corefile.c", "sim/ppc/hw_opic.c", "sim/ppc/gen-icache.c",
-    "sim/ppc/events.h", "sim/ppc/os_emul.c", "sim/ppc/emul_generic.c",
-    "sim/ppc/main.c", "sim/ppc/hw_com.c", "sim/ppc/gen-semantics.c",
-    "sim/ppc/emul_bugapi.c", "sim/ppc/device.c", "sim/ppc/emul_generic.h",
-    "sim/ppc/tree.c", "sim/ppc/mon.h", "sim/ppc/interrupts.h",
-    "sim/ppc/cap.c", "sim/ppc/cpu.c", "sim/ppc/hw_phb.h",
-    "sim/ppc/device_table.c", "sim/ppc/lf.c", "sim/ppc/lf.c",
-    "sim/ppc/dc-stupid", "sim/ppc/hw_pal.c", "sim/ppc/ppc-spr-table",
-    "sim/ppc/emul_unix.h", "sim/ppc/words.h", "sim/ppc/basics.h",
-    "sim/ppc/hw_htab.c", "sim/ppc/lf.h", "sim/ppc/ld-decode.c",
-    "sim/ppc/sim-endian.c", "sim/ppc/gen-itable.c",
-    "sim/ppc/idecode_expression.h", "sim/ppc/table.h", "sim/ppc/dgen.c",
-    "sim/ppc/events.c", "sim/ppc/gen-idecode.h", "sim/ppc/emul_netbsd.c",
-    "sim/ppc/igen.c", "sim/ppc/vm_n.h", "sim/ppc/vm.h",
-    "sim/ppc/hw_iobus.c", "sim/ppc/inline.h",
-    "sim/testsuite/sim/bfin/s21.s", "sim/testsuite/sim/mips/mips32-dsp2.s",
+    "sim/ppc/filter.h",
+    "sim/ppc/gen-support.h",
+    "sim/ppc/ld-insn.h",
+    "sim/ppc/hw_sem.c",
+    "sim/ppc/hw_disk.c",
+    "sim/ppc/idecode_branch.h",
+    "sim/ppc/sim-endian.h",
+    "sim/ppc/table.c",
+    "sim/ppc/hw_core.c",
+    "sim/ppc/gen-support.c",
+    "sim/ppc/gen-semantics.h",
+    "sim/ppc/cpu.h",
+    "sim/ppc/sim_callbacks.h",
+    "sim/ppc/RUN",
+    "sim/ppc/Makefile.in",
+    "sim/ppc/emul_chirp.c",
+    "sim/ppc/hw_nvram.c",
+    "sim/ppc/dc-test.01",
+    "sim/ppc/hw_phb.c",
+    "sim/ppc/hw_eeprom.c",
+    "sim/ppc/bits.h",
+    "sim/ppc/hw_vm.c",
+    "sim/ppc/cap.h",
+    "sim/ppc/os_emul.h",
+    "sim/ppc/options.h",
+    "sim/ppc/gen-idecode.c",
+    "sim/ppc/filter.c",
+    "sim/ppc/corefile-n.h",
+    "sim/ppc/std-config.h",
+    "sim/ppc/ld-decode.h",
+    "sim/ppc/filter_filename.h",
+    "sim/ppc/hw_shm.c",
+    "sim/ppc/pk_disklabel.c",
+    "sim/ppc/dc-simple",
+    "sim/ppc/misc.h",
+    "sim/ppc/device_table.h",
+    "sim/ppc/ld-insn.c",
+    "sim/ppc/inline.c",
+    "sim/ppc/emul_bugapi.h",
+    "sim/ppc/hw_cpu.h",
+    "sim/ppc/debug.h",
+    "sim/ppc/hw_ide.c",
+    "sim/ppc/debug.c",
+    "sim/ppc/gen-itable.h",
+    "sim/ppc/interrupts.c",
+    "sim/ppc/hw_glue.c",
+    "sim/ppc/emul_unix.c",
+    "sim/ppc/sim_calls.c",
+    "sim/ppc/dc-complex",
+    "sim/ppc/ld-cache.c",
+    "sim/ppc/registers.h",
+    "sim/ppc/dc-test.02",
+    "sim/ppc/options.c",
+    "sim/ppc/igen.h",
+    "sim/ppc/registers.c",
+    "sim/ppc/device.h",
+    "sim/ppc/emul_chirp.h",
+    "sim/ppc/hw_register.c",
+    "sim/ppc/hw_init.c",
+    "sim/ppc/sim-endian-n.h",
+    "sim/ppc/filter_filename.c",
+    "sim/ppc/bits.c",
+    "sim/ppc/idecode_fields.h",
+    "sim/ppc/hw_memory.c",
+    "sim/ppc/misc.c",
+    "sim/ppc/double.c",
+    "sim/ppc/psim.h",
+    "sim/ppc/hw_trace.c",
+    "sim/ppc/emul_netbsd.h",
+    "sim/ppc/psim.c",
+    "sim/ppc/powerpc.igen",
+    "sim/ppc/tree.h",
+    "sim/ppc/README",
+    "sim/ppc/gen-icache.h",
+    "sim/ppc/gen-model.h",
+    "sim/ppc/ld-cache.h",
+    "sim/ppc/mon.c",
+    "sim/ppc/corefile.h",
+    "sim/ppc/vm.c",
+    "sim/ppc/INSTALL",
+    "sim/ppc/gen-model.c",
+    "sim/ppc/hw_cpu.c",
+    "sim/ppc/corefile.c",
+    "sim/ppc/hw_opic.c",
+    "sim/ppc/gen-icache.c",
+    "sim/ppc/events.h",
+    "sim/ppc/os_emul.c",
+    "sim/ppc/emul_generic.c",
+    "sim/ppc/main.c",
+    "sim/ppc/hw_com.c",
+    "sim/ppc/gen-semantics.c",
+    "sim/ppc/emul_bugapi.c",
+    "sim/ppc/device.c",
+    "sim/ppc/emul_generic.h",
+    "sim/ppc/tree.c",
+    "sim/ppc/mon.h",
+    "sim/ppc/interrupts.h",
+    "sim/ppc/cap.c",
+    "sim/ppc/cpu.c",
+    "sim/ppc/hw_phb.h",
+    "sim/ppc/device_table.c",
+    "sim/ppc/lf.c",
+    "sim/ppc/lf.c",
+    "sim/ppc/dc-stupid",
+    "sim/ppc/hw_pal.c",
+    "sim/ppc/ppc-spr-table",
+    "sim/ppc/emul_unix.h",
+    "sim/ppc/words.h",
+    "sim/ppc/basics.h",
+    "sim/ppc/hw_htab.c",
+    "sim/ppc/lf.h",
+    "sim/ppc/ld-decode.c",
+    "sim/ppc/sim-endian.c",
+    "sim/ppc/gen-itable.c",
+    "sim/ppc/idecode_expression.h",
+    "sim/ppc/table.h",
+    "sim/ppc/dgen.c",
+    "sim/ppc/events.c",
+    "sim/ppc/gen-idecode.h",
+    "sim/ppc/emul_netbsd.c",
+    "sim/ppc/igen.c",
+    "sim/ppc/vm_n.h",
+    "sim/ppc/vm.h",
+    "sim/ppc/hw_iobus.c",
+    "sim/ppc/inline.h",
+    "sim/testsuite/mips/mips32-dsp2.s",
 )
 
 if __name__ == "__main__":
-    main()
-
+    sys.exit(main(sys.argv[1:]))
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/corefile.c ./gdb/corefile.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/corefile.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/corefile.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Core dump and executable file functions above target vector, for GDB.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -33,95 +33,29 @@
 #include "observable.h"
 #include "cli/cli-utils.h"
 #include "gdbarch.h"
-
-/* You can have any number of hooks for `exec_file_command' command to
-   call.  If there's only one hook, it is set in exec_file_display
-   hook.  If there are two or more hooks, they are set in
-   exec_file_extra_hooks[], and deprecated_exec_file_display_hook is
-   set to a function that calls all of them.  This extra complexity is
-   needed to preserve compatibility with old code that assumed that
-   only one hook could be set, and which called
-   deprecated_exec_file_display_hook directly.  */
-
-typedef void (*hook_type) (const char *);
-
-hook_type deprecated_exec_file_display_hook;	/* The original hook.  */
-static hook_type *exec_file_extra_hooks;	/* Array of additional
-						   hooks.  */
-static int exec_file_hook_count = 0;		/* Size of array.  */
-
-
-
-/* If there are two or more functions that wish to hook into
-   exec_file_command, this function will call all of the hook
-   functions.  */
-
-static void
-call_extra_exec_file_hooks (const char *filename)
-{
-  int i;
-
-  for (i = 0; i < exec_file_hook_count; i++)
-    (*exec_file_extra_hooks[i]) (filename);
-}
-
-/* Call this to specify the hook for exec_file_command to call back.
-   This is called from the x-window display code.  */
-
-void
-specify_exec_file_hook (void (*hook) (const char *))
-{
-  hook_type *new_array;
-
-  if (deprecated_exec_file_display_hook != NULL)
-    {
-      /* There's already a hook installed.  Arrange to have both it
-	 and the subsequent hooks called.  */
-      if (exec_file_hook_count == 0)
-	{
-	  /* If this is the first extra hook, initialize the hook
-	     array.  */
-	  exec_file_extra_hooks = XNEW (hook_type);
-	  exec_file_extra_hooks[0] = deprecated_exec_file_display_hook;
-	  deprecated_exec_file_display_hook = call_extra_exec_file_hooks;
-	  exec_file_hook_count = 1;
-	}
-
-      /* Grow the hook array by one and add the new hook to the end.
-         Yes, it's inefficient to grow it by one each time but since
-         this is hardly ever called it's not a big deal.  */
-      exec_file_hook_count++;
-      new_array = (hook_type *)
-	xrealloc (exec_file_extra_hooks,
-		  exec_file_hook_count * sizeof (hook_type));
-      exec_file_extra_hooks = new_array;
-      exec_file_extra_hooks[exec_file_hook_count - 1] = hook;
-    }
-  else
-    deprecated_exec_file_display_hook = hook;
-}
+#include "interps.h"
 
 void
 reopen_exec_file (void)
 {
-  int res;
-  struct stat st;
+  bfd *exec_bfd = current_program_space->exec_bfd ();
 
   /* Don't do anything if there isn't an exec file.  */
-  if (exec_bfd == NULL)
+  if (exec_bfd == nullptr)
     return;
 
+  /* The main executable can't be an in-memory BFD object.  If it was then
+     the use of bfd_stat below would not work as expected.  */
+  gdb_assert ((exec_bfd->flags & BFD_IN_MEMORY) == 0);
+
   /* If the timestamp of the exec file has changed, reopen it.  */
-  std::string filename = bfd_get_filename (exec_bfd);
-  res = stat (filename.c_str (), &st);
+  struct stat st;
+  int res = bfd_stat (exec_bfd, &st);
 
-  if (res == 0 && exec_bfd_mtime && exec_bfd_mtime != st.st_mtime)
-    exec_file_attach (filename.c_str (), 0);
-  else
-    /* If we accessed the file since last opening it, close it now;
-       this stops GDB from holding the executable open after it
-       exits.  */
-    bfd_cache_close_all ();
+  if (res == 0
+      && current_program_space->ebfd_mtime != 0
+      && current_program_space->ebfd_mtime != st.st_mtime)
+    exec_file_attach (bfd_get_filename (exec_bfd), 0);
 }
 
 /* If we have both a core file and an exec file,
@@ -130,28 +64,29 @@ reopen_exec_file (void)
 void
 validate_files (void)
 {
-  if (exec_bfd && core_bfd)
+  if (current_program_space->exec_bfd () && core_bfd)
     {
-      if (!core_file_matches_executable_p (core_bfd, exec_bfd))
+      if (!core_file_matches_executable_p (core_bfd,
+					   current_program_space->exec_bfd ()))
 	warning (_("core file may not match specified executable file."));
-      else if (bfd_get_mtime (exec_bfd) > bfd_get_mtime (core_bfd))
+      else if (bfd_get_mtime (current_program_space->exec_bfd ())
+	       > bfd_get_mtime (core_bfd))
 	warning (_("exec file is newer than core file."));
     }
 }
 
 /* See gdbsupport/common-inferior.h.  */
 
-char *
+const char *
 get_exec_file (int err)
 {
-  if (exec_filename)
-    return exec_filename;
+  if (current_program_space->exec_filename != nullptr)
+    return current_program_space->exec_filename.get ();
   if (!err)
     return NULL;
 
   error (_("No executable file specified.\n\
 Use the \"file\" or \"exec-file\" command."));
-  return NULL;
 }
 
 
@@ -170,8 +105,7 @@ memory_error_message (enum target_xfer_s
       return string_printf (_("Memory at address %s unavailable."),
 			    paddress (gdbarch, memaddr));
     default:
-      internal_error (__FILE__, __LINE__,
-		      "unhandled target_xfer_status: %s (%s)",
+      internal_error ("unhandled target_xfer_status: %s (%s)",
 		      target_xfer_status_to_string (err),
 		      plongest (err));
     }
@@ -185,7 +119,8 @@ memory_error (enum target_xfer_status er
   enum errors exception = GDB_NO_ERROR;
 
   /* Build error string.  */
-  std::string str = memory_error_message (err, target_gdbarch (), memaddr);
+  std::string str
+    = memory_error_message (err, current_inferior ()->arch (), memaddr);
 
   /* Choose the right error to throw.  */
   switch (err)
@@ -215,8 +150,8 @@ read_memory_object (enum target_object o
       enum target_xfer_status status;
       ULONGEST xfered_len;
 
-      status = target_xfer_partial (current_top_target (), object, NULL,
-				    myaddr + xfered, NULL,
+      status = target_xfer_partial (current_inferior ()->top_target (), object,
+				    NULL, myaddr + xfered, NULL,
 				    memaddr + xfered, len - xfered,
 				    &xfered_len);
 
@@ -329,39 +264,12 @@ read_code_unsigned_integer (CORE_ADDR me
   return extract_unsigned_integer (buf, len, byte_order);
 }
 
-void
-read_memory_string (CORE_ADDR memaddr, char *buffer, int max_len)
-{
-  char *cp;
-  int i;
-  int cnt;
-
-  cp = buffer;
-  while (1)
-    {
-      if (cp - buffer >= max_len)
-	{
-	  buffer[max_len - 1] = '\0';
-	  break;
-	}
-      cnt = max_len - (cp - buffer);
-      if (cnt > 8)
-	cnt = 8;
-      read_memory (memaddr + (int) (cp - buffer), (gdb_byte *) cp, cnt);
-      for (i = 0; i < cnt && *cp; i++, cp++)
-	;			/* null body */
-
-      if (i < cnt && !*cp)
-	break;
-    }
-}
-
 CORE_ADDR
 read_memory_typed_address (CORE_ADDR addr, struct type *type)
 {
-  gdb_byte *buf = (gdb_byte *) alloca (TYPE_LENGTH (type));
+  gdb_byte *buf = (gdb_byte *) alloca (type->length ());
 
-  read_memory (addr, buf, TYPE_LENGTH (type));
+  read_memory (addr, buf, type->length ());
   return extract_typed_address (buf, type);
 }
 
@@ -378,6 +286,16 @@ write_memory (CORE_ADDR memaddr,
     memory_error (TARGET_XFER_E_IO, memaddr);
 }
 
+/* Notify interpreters and observers that INF's memory was changed.  */
+
+static void
+notify_memory_changed (inferior *inf, CORE_ADDR addr, ssize_t len,
+		       const bfd_byte *data)
+{
+  interps_notify_memory_changed (inf, addr, len, data);
+  gdb::observers::memory_changed.notify (inf, addr, len, data);
+}
+
 /* Same as write_memory, but notify 'memory_changed' observers.  */
 
 void
@@ -385,7 +303,7 @@ write_memory_with_notification (CORE_ADD
 				ssize_t len)
 {
   write_memory (memaddr, myaddr, len);
-  gdb::observers::memory_changed.notify (current_inferior (), memaddr, len, myaddr);
+  notify_memory_changed (current_inferior (), memaddr, len, myaddr);
 }
 
 /* Store VALUE at ADDR in the inferior as a LEN-byte unsigned
@@ -416,32 +334,32 @@ write_memory_signed_integer (CORE_ADDR a
 
 /* The current default bfd target.  Points to storage allocated for
    gnutarget_string.  */
-char *gnutarget;
+const char *gnutarget;
 
 /* Same thing, except it is "auto" not NULL for the default case.  */
-static char *gnutarget_string;
+static std::string gnutarget_string;
 static void
 show_gnutarget_string (struct ui_file *file, int from_tty,
 		       struct cmd_list_element *c,
 		       const char *value)
 {
-  fprintf_filtered (file,
-		    _("The current BFD target is \"%s\".\n"), value);
+  gdb_printf (file,
+	      _("The current BFD target is \"%s\".\n"), value);
 }
 
 static void
 set_gnutarget_command (const char *ignore, int from_tty,
 		       struct cmd_list_element *c)
 {
-  char *gend = gnutarget_string + strlen (gnutarget_string);
+  const char *gend = gnutarget_string.c_str () + gnutarget_string.size ();
+  gend = remove_trailing_whitespace (gnutarget_string.c_str (), gend);
+  gnutarget_string
+    = gnutarget_string.substr (0, gend - gnutarget_string.data ());
 
-  gend = remove_trailing_whitespace (gnutarget_string, gend);
-  *gend = '\0';
-
-  if (strcmp (gnutarget_string, "auto") == 0)
+  if (gnutarget_string == "auto")
     gnutarget = NULL;
   else
-    gnutarget = gnutarget_string;
+    gnutarget = gnutarget_string.c_str ();
 }
 
 /* A completion function for "set gnutarget".  */
@@ -473,26 +391,25 @@ complete_set_gnutarget (struct cmd_list_
 void
 set_gnutarget (const char *newtarget)
 {
-  if (gnutarget_string != NULL)
-    xfree (gnutarget_string);
-  gnutarget_string = xstrdup (newtarget);
+  gnutarget_string = newtarget;
   set_gnutarget_command (NULL, 0, NULL);
 }
 
+void _initialize_core ();
 void
-_initialize_core (void)
+_initialize_core ()
 {
-  struct cmd_list_element *c;
-
-  c = add_cmd ("core-file", class_files, core_file_command, _("\
+  cmd_list_element *core_file_cmd
+    = add_cmd ("core-file", class_files, core_file_command, _("\
 Use FILE as core dump for examining memory and registers.\n\
 Usage: core-file FILE\n\
 No arg means have no core file.  This command has been superseded by the\n\
 `target core' and `detach' commands."), &cmdlist);
-  set_cmd_completer (c, filename_completer);
+  set_cmd_completer (core_file_cmd, filename_completer);
 
   
-  c = add_setshow_string_noescape_cmd ("gnutarget", class_files,
+  set_show_commands set_show_gnutarget
+    = add_setshow_string_noescape_cmd ("gnutarget", class_files,
 				       &gnutarget_string, _("\
 Set the current BFD target."), _("\
 Show the current BFD target."), _("\
@@ -500,9 +417,9 @@ Use `set gnutarget auto' to specify auto
 				       set_gnutarget_command,
 				       show_gnutarget_string,
 				       &setlist, &showlist);
-  set_cmd_completer (c, complete_set_gnutarget);
+  set_cmd_completer (set_show_gnutarget.set, complete_set_gnutarget);
 
-  add_alias_cmd ("g", "gnutarget", class_files, 1, &setlist);
+  add_alias_cmd ("g", set_show_gnutarget.set, class_files, 1, &setlist);
 
   if (getenv ("GNUTARGET"))
     set_gnutarget (getenv ("GNUTARGET"));
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/corelow.c ./gdb/corelow.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/corelow.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/corelow.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Core dump and executable file functions below target vector, for GDB.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,7 @@
 #include "arch-utils.h"
 #include <signal.h>
 #include <fcntl.h>
-#include "frame.h"		/* required by inferior.h */
+#include "frame.h"
 #include "inferior.h"
 #include "infrun.h"
 #include "symtab.h"
@@ -37,6 +37,7 @@
 #include "exec.h"
 #include "readline/tilde.h"
 #include "solib.h"
+#include "solist.h"
 #include "filenames.h"
 #include "progspace.h"
 #include "objfiles.h"
@@ -44,14 +45,20 @@
 #include "completer.h"
 #include "gdbsupport/filestuff.h"
 #include "build-id.h"
+#include "gdbsupport/pathstuff.h"
+#include "gdbsupport/scoped_fd.h"
+#include "gdbsupport/x86-xstate.h"
+#include "debuginfod-support.h"
+#include <unordered_map>
+#include <unordered_set>
+#include "gdbcmd.h"
+#include "xml-tdesc.h"
+#include "memtag.h"
 
 #ifndef O_LARGEFILE
 #define O_LARGEFILE 0
 #endif
 
-static core_fns *sniff_core_bfd (gdbarch *core_gdbarch,
-				 bfd *abfd);
-
 /* The core file target.  */
 
 static const target_info core_target_info = {
@@ -65,7 +72,6 @@ class core_target final : public process
 {
 public:
   core_target ();
-  ~core_target () override;
 
   const target_info &info () const override
   { return core_target_info; }
@@ -89,14 +95,23 @@ public:
 
   const char *thread_name (struct thread_info *) override;
 
-  bool has_all_memory () override { return false; }
+  bool has_all_memory () override { return true; }
   bool has_memory () override;
   bool has_stack () override;
   bool has_registers () override;
-  bool has_execution (ptid_t) override { return false; }
+  bool has_execution (inferior *inf) override { return false; }
 
   bool info_proc (const char *, enum info_proc_what) override;
 
+  bool supports_memory_tagging () override;
+
+  /* Core file implementation of fetch_memtags.  Fetch the memory tags from
+     core file notes.  */
+  bool fetch_memtags (CORE_ADDR address, size_t len,
+		      gdb::byte_vector &tags, int type) override;
+
+  x86_xsave_layout fetch_x86_xsave_layout () override;
+
   /* A few helpers.  */
 
   /* Getter, see variable definition.  */
@@ -110,23 +125,43 @@ public:
 				  const struct regset *regset,
 				  const char *name,
 				  int section_min_size,
-				  int which,
 				  const char *human_name,
 				  bool required);
 
+  /* See definition.  */
+  void info_proc_mappings (struct gdbarch *gdbarch);
+
 private: /* per-core data */
 
+  /* Get rid of the core inferior.  */
+  void clear_core ();
+
   /* The core's section table.  Note that these target sections are
      *not* mapped in the current address spaces' set of target
      sections --- those should come only from pure executable or
      shared library bfds.  The core bfd sections are an implementation
      detail of the core target, just like ptrace is for unix child
      targets.  */
-  target_section_table m_core_section_table {};
+  std::vector<target_section> m_core_section_table;
 
-  /* The core_fns for a core file handler that is prepared to read the
-     core file currently open on core_bfd.  */
-  core_fns *m_core_vec = NULL;
+  /* File-backed address space mappings: some core files include
+     information about memory mapped files.  */
+  std::vector<target_section> m_core_file_mappings;
+
+  /* Unavailable mappings.  These correspond to pathnames which either
+     weren't found or could not be opened.  Knowing these addresses can
+     still be useful.  */
+  std::vector<mem_range> m_core_unavailable_mappings;
+
+  /* Build m_core_file_mappings.  Called from the constructor.  */
+  void build_file_mappings ();
+
+  /* Helper method for xfer_partial.  */
+  enum target_xfer_status xfer_memory_via_mappings (gdb_byte *readbuf,
+						    const gdb_byte *writebuf,
+						    ULONGEST offset,
+						    ULONGEST len,
+						    ULONGEST *xfered_len);
 
   /* FIXME: kettenis/20031023: Eventually this field should
      disappear.  */
@@ -135,123 +170,174 @@ private: /* per-core data */
 
 core_target::core_target ()
 {
+  /* Find a first arch based on the BFD.  We need the initial gdbarch so
+     we can setup the hooks to find a target description.  */
   m_core_gdbarch = gdbarch_from_bfd (core_bfd);
 
-  /* Find a suitable core file handler to munch on core_bfd */
-  m_core_vec = sniff_core_bfd (m_core_gdbarch, core_bfd);
+  /* If the arch is able to read a target description from the core, it
+     could yield a more specific gdbarch.  */
+  const struct target_desc *tdesc = read_description ();
+
+  if (tdesc != nullptr)
+    {
+      struct gdbarch_info info;
+      info.abfd = core_bfd;
+      info.target_desc = tdesc;
+      m_core_gdbarch = gdbarch_find_by_info (info);
+    }
+
+  if (!m_core_gdbarch
+      || !gdbarch_iterate_over_regset_sections_p (m_core_gdbarch))
+    error (_("\"%s\": Core file format not supported"),
+	   bfd_get_filename (core_bfd));
 
   /* Find the data section */
-  if (build_section_table (core_bfd,
-			   &m_core_section_table.sections,
-			   &m_core_section_table.sections_end))
-    error (_("\"%s\": Can't find sections: %s"),
-	   bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
-}
+  m_core_section_table = build_section_table (core_bfd);
 
-core_target::~core_target ()
-{
-  xfree (m_core_section_table.sections);
+  build_file_mappings ();
 }
 
-/* List of all available core_fns.  On gdb startup, each core file
-   register reader calls deprecated_add_core_fns() to register
-   information on each core format it is prepared to read.  */
-
-static struct core_fns *core_file_fns = NULL;
-
-static int gdb_check_format (bfd *);
+/* Construct the table for file-backed mappings if they exist.
 
-static void add_to_thread_list (bfd *, asection *, void *);
-
-/* An arbitrary identifier for the core inferior.  */
-#define CORELOW_PID 1
+   For each unique path in the note, we'll open a BFD with a bfd
+   target of "binary".  This is an unstructured bfd target upon which
+   we'll impose a structure from the mappings in the architecture-specific
+   mappings note.  A BFD section is allocated and initialized for each
+   file-backed mapping.
 
-/* Link a new core_fns into the global core_file_fns list.  Called on
-   gdb startup by the _initialize routine in each core file register
-   reader, to register information about each format the reader is
-   prepared to handle.  */
+   We take care to not share already open bfds with other parts of
+   GDB; in particular, we don't want to add new sections to existing
+   BFDs.  We do, however, ensure that the BFDs that we allocate here
+   will go away (be deallocated) when the core target is detached.  */
 
 void
-deprecated_add_core_fns (struct core_fns *cf)
+core_target::build_file_mappings ()
 {
-  cf->next = core_file_fns;
-  core_file_fns = cf;
-}
-
-/* The default function that core file handlers can use to examine a
-   core file BFD and decide whether or not to accept the job of
-   reading the core file.  */
+  std::unordered_map<std::string, struct bfd *> bfd_map;
+  std::unordered_set<std::string> unavailable_paths;
 
-int
-default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
-{
-  int result;
+  /* See linux_read_core_file_mappings() in linux-tdep.c for an example
+     read_core_file_mappings method.  */
+  gdbarch_read_core_file_mappings (m_core_gdbarch, core_bfd,
+
+    /* After determining the number of mappings, read_core_file_mappings
+       will invoke this lambda.  */
+    [&] (ULONGEST)
+      {
+      },
+
+    /* read_core_file_mappings will invoke this lambda for each mapping
+       that it finds.  */
+    [&] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs,
+	 const char *filename, const bfd_build_id *build_id)
+      {
+	/* Architecture-specific read_core_mapping methods are expected to
+	   weed out non-file-backed mappings.  */
+	gdb_assert (filename != nullptr);
+
+	if (unavailable_paths.find (filename) != unavailable_paths.end ())
+	  {
+	    /* We have already seen some mapping for FILENAME but failed to
+	       find/open the file.  There is no point in trying the same
+	       thing again so just record that the range [start, end) is
+	       unavailable.  */
+	    m_core_unavailable_mappings.emplace_back (start, end - start);
+	    return;
+	  }
+
+	struct bfd *bfd = bfd_map[filename];
+	if (bfd == nullptr)
+	  {
+	    /* Use exec_file_find() to do sysroot expansion.  It'll
+	       also strip the potential sysroot "target:" prefix.  If
+	       there is no sysroot, an equivalent (possibly more
+	       canonical) pathname will be provided.  */
+	    gdb::unique_xmalloc_ptr<char> expanded_fname
+	      = exec_file_find (filename, NULL);
+
+	    if (expanded_fname == nullptr && build_id != nullptr)
+	      debuginfod_exec_query (build_id->data, build_id->size,
+				     filename, &expanded_fname);
+
+	    if (expanded_fname == nullptr)
+	      {
+		m_core_unavailable_mappings.emplace_back (start, end - start);
+		unavailable_paths.insert (filename);
+		warning (_("Can't open file %s during file-backed mapping "
+			   "note processing"),
+			 filename);
+		return;
+	      }
+
+	    bfd = bfd_openr (expanded_fname.get (), "binary");
+
+	    if (bfd == nullptr || !bfd_check_format (bfd, bfd_object))
+	      {
+		m_core_unavailable_mappings.emplace_back (start, end - start);
+		unavailable_paths.insert (filename);
+		warning (_("Can't open file %s which was expanded to %s "
+			   "during file-backed mapping note processing"),
+			 filename, expanded_fname.get ());
+
+		if (bfd != nullptr)
+		  bfd_close (bfd);
+		return;
+	      }
+	    /* Ensure that the bfd will be closed when core_bfd is closed. 
+	       This can be checked before/after a core file detach via
+	       "maint info bfds".  */
+	    gdb_bfd_record_inclusion (core_bfd, bfd);
+	    bfd_map[filename] = bfd;
+	  }
+
+	/* Make new BFD section.  All sections have the same name,
+	   which is permitted by bfd_make_section_anyway().  */
+	asection *sec = bfd_make_section_anyway (bfd, "load");
+	if (sec == nullptr)
+	  error (_("Can't make section"));
+	sec->filepos = file_ofs;
+	bfd_set_section_flags (sec, SEC_READONLY | SEC_HAS_CONTENTS);
+	bfd_set_section_size (sec, end - start);
+	bfd_set_section_vma (sec, start);
+	bfd_set_section_lma (sec, start);
+	bfd_set_section_alignment (sec, 2);
+
+	/* Set target_section fields.  */
+	m_core_file_mappings.emplace_back (start, end, sec);
+
+	/* If this is a bfd of a shared library, record its soname
+	   and build id.  */
+	if (build_id != nullptr)
+	  {
+	    gdb::unique_xmalloc_ptr<char> soname
+	      = gdb_bfd_read_elf_soname (bfd->filename);
+	    if (soname != nullptr)
+	      set_cbfd_soname_build_id (current_program_space->cbfd,
+					soname.get (), build_id);
+	  }
+      });
 
-  result = (bfd_get_flavour (abfd) == our_fns -> core_flavour);
-  return (result);
+  normalize_mem_ranges (&m_core_unavailable_mappings);
 }
 
-/* Walk through the list of core functions to find a set that can
-   handle the core file open on ABFD.  Returns pointer to set that is
-   selected.  */
+/* An arbitrary identifier for the core inferior.  */
+#define CORELOW_PID 1
 
-static struct core_fns *
-sniff_core_bfd (struct gdbarch *core_gdbarch, bfd *abfd)
+void
+core_target::clear_core ()
 {
-  struct core_fns *cf;
-  struct core_fns *yummy = NULL;
-  int matches = 0;
-
-  /* Don't sniff if we have support for register sets in
-     CORE_GDBARCH.  */
-  if (core_gdbarch && gdbarch_iterate_over_regset_sections_p (core_gdbarch))
-    return NULL;
-
-  for (cf = core_file_fns; cf != NULL; cf = cf->next)
-    {
-      if (cf->core_sniffer (cf, abfd))
-	{
-	  yummy = cf;
-	  matches++;
-	}
-    }
-  if (matches > 1)
+  if (core_bfd)
     {
-      warning (_("\"%s\": ambiguous core format, %d handlers match"),
-	       bfd_get_filename (abfd), matches);
-    }
-  else if (matches == 0)
-    error (_("\"%s\": no core file handler recognizes format"),
-	   bfd_get_filename (abfd));
-
-  return (yummy);
-}
-
-/* The default is to reject every core file format we see.  Either
-   BFD has to recognize it, or we have to provide a function in the
-   core file handler that recognizes it.  */
-
-int
-default_check_format (bfd *abfd)
-{
-  return (0);
-}
+      switch_to_no_thread ();    /* Avoid confusion from thread
+				    stuff.  */
+      exit_inferior (current_inferior ());
 
-/* Attempt to recognize core file formats that BFD rejects.  */
-
-static int
-gdb_check_format (bfd *abfd)
-{
-  struct core_fns *cf;
+      /* Clear out solib state while the bfd is still open.  See
+	 comments in clear_solib in solib.c.  */
+      clear_solib ();
 
-  for (cf = core_file_fns; cf != NULL; cf = cf->next)
-    {
-      if (cf->check_format (abfd))
-	{
-	  return (1);
-	}
+      current_program_space->cbfd.reset (nullptr);
     }
-  return (0);
 }
 
 /* Close the core target.  */
@@ -259,18 +345,7 @@ gdb_check_format (bfd *abfd)
 void
 core_target::close ()
 {
-  if (core_bfd)
-    {
-      inferior_ptid = null_ptid;    /* Avoid confusion from thread
-				       stuff.  */
-      exit_inferior_silent (current_inferior ());
-
-      /* Clear out solib state while the bfd is still open.  See
-         comments in clear_solib in solib.c.  */
-      clear_solib ();
-
-      current_program_space->cbfd.reset (nullptr);
-    }
+  clear_core ();
 
   /* Core targets are heap-allocated (see core_target_open), so here
      we delete ourselves.  */
@@ -280,46 +355,28 @@ core_target::close ()
 /* Look for sections whose names start with `.reg/' so that we can
    extract the list of threads in a core file.  */
 
+/* If ASECT is a section whose name begins with '.reg/' then extract the
+   lwpid after the '/' and create a new thread in INF.
+
+   If REG_SECT is not nullptr, and the both ASECT and REG_SECT point at the
+   same position in the parent bfd object then switch to the newly created
+   thread, otherwise, the selected thread is left unchanged.  */
+
 static void
-add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
+add_to_thread_list (asection *asect, asection *reg_sect, inferior *inf)
 {
-  ptid_t ptid;
-  int core_tid;
-  int pid, lwpid;
-  asection *reg_sect = (asection *) reg_sect_arg;
-  bool fake_pid_p = false;
-  struct inferior *inf;
-
   if (!startswith (bfd_section_name (asect), ".reg/"))
     return;
 
-  core_tid = atoi (bfd_section_name (asect) + 5);
-
-  pid = bfd_core_file_pid (core_bfd);
-  if (pid == 0)
-    {
-      fake_pid_p = true;
-      pid = CORELOW_PID;
-    }
-
-  lwpid = core_tid;
-
-  inf = current_inferior ();
-  if (inf->pid == 0)
-    {
-      inferior_appeared (inf, pid);
-      inf->fake_pid_p = fake_pid_p;
-    }
-
-  ptid = ptid_t (pid, lwpid, 0);
-
-  add_thread (ptid);
+  int lwpid = atoi (bfd_section_name (asect) + 5);
+  ptid_t ptid (inf->pid, lwpid);
+  thread_info *thr = add_thread (inf->process_target (), ptid);
 
-/* Warning, Will Robinson, looking at BFD private data! */
+  /* Warning, Will Robinson, looking at BFD private data! */
 
   if (reg_sect != NULL
       && asect->filepos == reg_sect->filepos)	/* Did we find .reg?  */
-    inferior_ptid = ptid;			/* Yes, make it current.  */
+    switch_to_thread (thr);			/* Yes, make it current.  */
 }
 
 /* Issue a message saying we have no core to debug, if FROM_TTY.  */
@@ -328,7 +385,7 @@ static void
 maybe_say_no_core_file_now (int from_tty)
 {
   if (from_tty)
-    printf_filtered (_("No core file now.\n"));
+    gdb_printf (_("No core file now.\n"));
 }
 
 /* Backward compatibility with old way of specifying core files.  */
@@ -352,6 +409,153 @@ core_file_command (const char *filename,
     core_target_open (filename, from_tty);
 }
 
+/* A vmcore file is a core file created by the Linux kernel at the point of
+   a crash.  Each thread in the core file represents a real CPU core, and
+   the lwpid for each thread is the pid of the process that was running on
+   that core at the moment of the crash.
+
+   However, not every CPU core will have been running a process, some cores
+   will be idle.  For these idle cores the CPU writes an lwpid of 0.  And
+   of course, multiple cores might be idle, so there could be multiple
+   threads with an lwpid of 0.
+
+   The problem is GDB doesn't really like threads with an lwpid of 0; GDB
+   presents such a thread as a process rather than a thread.  And GDB
+   certainly doesn't like multiple threads having the same lwpid, each time
+   a new thread is seen with the same lwpid the earlier thread (with the
+   same lwpid) will be deleted.
+
+   This function addresses both of these problems by assigning a fake lwpid
+   to any thread with an lwpid of 0.
+
+   GDB finds the lwpid information by looking at the bfd section names
+   which include the lwpid, e.g. .reg/NN where NN is the lwpid.  This
+   function looks though all the section names looking for sections named
+   .reg/NN.  If any sections are found where NN == 0, then we assign a new
+   unique value of NN.  Then, in a second pass, any sections ending /0 are
+   assigned their new number.
+
+   Remember, a core file may contain multiple register sections for
+   different register sets, but the sets are always grouped by thread, so
+   we can figure out which registers should be assigned the same new
+   lwpid.  For example, consider a core file containing:
+
+     .reg/0, .reg2/0, .reg/0, .reg2/0
+
+   This represents two threads, each thread contains a .reg and .reg2
+   register set.  The .reg represents the start of each thread.  After
+   renaming the sections will now look like this:
+
+     .reg/1, .reg2/1, .reg/2, .reg2/2
+
+   After calling this function the rest of the core file handling code can
+   treat this core file just like any other core file.  */
+
+static void
+rename_vmcore_idle_reg_sections (bfd *abfd, inferior *inf)
+{
+  /* Map from the bfd section to its lwpid (the /NN number).  */
+  std::vector<std::pair<asection *, int>> sections_and_lwpids;
+
+  /* The set of all /NN numbers found.  Needed so we can easily find unused
+     numbers in the case that we need to rename some sections.  */
+  std::unordered_set<int> all_lwpids;
+
+  /* A count of how many sections called .reg/0 we have found.  */
+  unsigned zero_lwpid_count = 0;
+
+  /* Look for all the .reg sections.  Record the section object and the
+     lwpid which is extracted from the section name.  Spot if any have an
+     lwpid of zero.  */
+  for (asection *sect : gdb_bfd_sections (core_bfd))
+    {
+      if (startswith (bfd_section_name (sect), ".reg/"))
+	{
+	  int lwpid = atoi (bfd_section_name (sect) + 5);
+	  sections_and_lwpids.emplace_back (sect, lwpid);
+	  all_lwpids.insert (lwpid);
+	  if (lwpid == 0)
+	    zero_lwpid_count++;
+	}
+    }
+
+  /* If every ".reg/NN" section has a non-zero lwpid then we don't need to
+     do any renaming.  */
+  if (zero_lwpid_count == 0)
+    return;
+
+  /* Assign a new number to any .reg sections with an lwpid of 0.  */
+  int new_lwpid = 1;
+  for (auto &sect_and_lwpid : sections_and_lwpids)
+    if (sect_and_lwpid.second == 0)
+      {
+	while (all_lwpids.find (new_lwpid) != all_lwpids.end ())
+	  new_lwpid++;
+	sect_and_lwpid.second = new_lwpid;
+	new_lwpid++;
+      }
+
+  /* Now update the names of any sections with an lwpid of 0.  This is
+     more than just the .reg sections we originally found.  */
+  std::string replacement_lwpid_str;
+  auto iter = sections_and_lwpids.begin ();
+  int replacement_lwpid = 0;
+  for (asection *sect : gdb_bfd_sections (core_bfd))
+    {
+      if (iter != sections_and_lwpids.end () && sect == iter->first)
+	{
+	  gdb_assert (startswith (bfd_section_name (sect), ".reg/"));
+
+	  int lwpid = atoi (bfd_section_name (sect) + 5);
+	  if (lwpid == iter->second)
+	    {
+	      /* This section was not given a new number.  */
+	      gdb_assert (lwpid != 0);
+	      replacement_lwpid = 0;
+	    }
+	  else
+	    {
+	      replacement_lwpid = iter->second;
+	      ptid_t ptid (inf->pid, replacement_lwpid);
+	      if (!replacement_lwpid_str.empty ())
+		replacement_lwpid_str += ", ";
+	      replacement_lwpid_str += target_pid_to_str (ptid);
+	    }
+
+	  iter++;
+	}
+
+      if (replacement_lwpid != 0)
+	{
+	  const char *name = bfd_section_name (sect);
+	  size_t len = strlen (name);
+
+	  if (strncmp (name + len - 2, "/0", 2) == 0)
+	    {
+	      /* This section needs a new name.  */
+	      std::string name_str
+		= string_printf ("%.*s/%d",
+				 static_cast<int> (len - 2),
+				 name, replacement_lwpid);
+	      char *name_buf
+		= static_cast<char *> (bfd_alloc (abfd, name_str.size () + 1));
+	      if (name_buf == nullptr)
+		error (_("failed to allocate space for section name '%s'"),
+		       name_str.c_str ());
+	      memcpy (name_buf, name_str.c_str(), name_str.size () + 1);
+	      bfd_rename_section (sect, name_buf);
+	    }
+	}
+    }
+
+  if (zero_lwpid_count == 1)
+    warning (_("found thread with pid 0, assigned replacement Target Id: %s"),
+	     replacement_lwpid_str.c_str ());
+  else
+    warning (_("found threads with pid 0, assigned replacement Target Ids: %s"),
+	     replacement_lwpid_str.c_str ());
+}
+
 /* Locate (and load) an executable file (and symbols) given the core file
    BFD ABFD.  */
 
@@ -365,6 +569,27 @@ locate_exec_from_corefile_build_id (bfd
   gdb_bfd_ref_ptr execbfd
     = build_id_to_exec_bfd (build_id->size, build_id->data);
 
+  if (execbfd == nullptr)
+    {
+      /* Attempt to query debuginfod for the executable.  */
+      gdb::unique_xmalloc_ptr<char> execpath;
+      scoped_fd fd = debuginfod_exec_query (build_id->data, build_id->size,
+					    abfd->filename, &execpath);
+
+      if (fd.get () >= 0)
+	{
+	  execbfd = gdb_bfd_open (execpath.get (), gnutarget);
+
+	  if (execbfd == nullptr)
+	    warning (_("\"%s\" from debuginfod cannot be opened as bfd: %s"),
+		     execpath.get (),
+		     gdb_bfd_errmsg (bfd_get_error (), nullptr).c_str ());
+	  else if (!build_id_verify (execbfd.get (), build_id->size,
+				     build_id->data))
+	    execbfd.reset (nullptr);
+	}
+    }
+
   if (execbfd != nullptr)
     {
       exec_file_attach (bfd_get_filename (execbfd.get ()), from_tty);
@@ -394,16 +619,16 @@ core_target_open (const char *arg, int f
     }
 
   gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg));
-  if (!IS_ABSOLUTE_PATH (filename.get ()))
-    filename.reset (concat (current_directory, "/",
-			    filename.get (), (char *) NULL));
+  if (strlen (filename.get ()) != 0
+      && !IS_ABSOLUTE_PATH (filename.get ()))
+    filename = make_unique_xstrdup (gdb_abspath (filename.get ()).c_str ());
 
   flags = O_BINARY | O_LARGEFILE;
   if (write_files)
     flags |= O_RDWR;
   else
     flags |= O_RDONLY;
-  scratch_chan = gdb_open_cloexec (filename.get (), flags, 0);
+  scratch_chan = gdb_open_cloexec (filename.get (), flags, 0).release ();
   if (scratch_chan < 0)
     perror_with_name (filename.get ());
 
@@ -413,13 +638,12 @@ core_target_open (const char *arg, int f
   if (temp_bfd == NULL)
     perror_with_name (filename.get ());
 
-  if (!bfd_check_format (temp_bfd.get (), bfd_core)
-      && !gdb_check_format (temp_bfd.get ()))
+  if (!bfd_check_format (temp_bfd.get (), bfd_core))
     {
       /* Do it after the err msg */
       /* FIXME: should be checking for errors from bfd_close (for one
-         thing, on error it does not free all the storage associated
-         with the bfd).  */
+	 thing, on error it does not free all the storage associated
+	 with the bfd).  */
       error (_("\"%s\" is not a core dump: %s"),
 	     filename.get (), bfd_errmsg (bfd_get_error ()));
     }
@@ -437,12 +661,12 @@ core_target_open (const char *arg, int f
      core file.  We don't do this unconditionally since an exec file
      typically contains more information that helps us determine the
      architecture than a core file.  */
-  if (!exec_bfd)
+  if (!current_program_space->exec_bfd ())
     set_gdbarch_from_file (core_bfd);
 
-  push_target (std::move (target_holder));
+  current_inferior ()->push_target (std::move (target_holder));
 
-  inferior_ptid = null_ptid;
+  switch_to_no_thread ();
 
   /* Need to flush the register cache (and the frame cache) from a
      previous debug session.  If inferior_ptid ends up the same as the
@@ -452,11 +676,30 @@ core_target_open (const char *arg, int f
      previous session, and the frame cache being stale.  */
   registers_changed ();
 
+  /* Find (or fake) the pid for the process in this core file, and
+     initialise the current inferior with that pid.  */
+  bool fake_pid_p = false;
+  int pid = bfd_core_file_pid (core_bfd);
+  if (pid == 0)
+    {
+      fake_pid_p = true;
+      pid = CORELOW_PID;
+    }
+
+  inferior *inf = current_inferior ();
+  gdb_assert (inf->pid == 0);
+  inferior_appeared (inf, pid);
+  inf->fake_pid_p = fake_pid_p;
+
+  /* Rename any .reg/0 sections, giving them each a fake lwpid.  */
+  rename_vmcore_idle_reg_sections (core_bfd, inf);
+
   /* Build up thread list from BFD sections, and possibly set the
      current thread to the .reg/NN section matching the .reg
      section.  */
-  bfd_map_over_sections (core_bfd, add_to_thread_list,
-			 bfd_get_section_by_name (core_bfd, ".reg"));
+  asection *reg_sect = bfd_get_section_by_name (core_bfd, ".reg");
+  for (asection *sect : gdb_bfd_sections (core_bfd))
+    add_to_thread_list (sect, reg_sect, inf);
 
   if (inferior_ptid == null_ptid)
     {
@@ -466,22 +709,18 @@ core_target_open (const char *arg, int f
 	 which was the "main" thread.  The latter case shouldn't
 	 usually happen, but we're dealing with input here, which can
 	 always be broken in different ways.  */
-      thread_info *thread = first_thread_of_inferior (current_inferior ());
+      thread_info *thread = first_thread_of_inferior (inf);
 
       if (thread == NULL)
-	{
-	  inferior_appeared (current_inferior (), CORELOW_PID);
-	  inferior_ptid = ptid_t (CORELOW_PID);
-	  add_thread_silent (inferior_ptid);
-	}
-      else
-	switch_to_thread (thread);
+	thread = add_thread_silent (target, ptid_t (CORELOW_PID));
+
+      switch_to_thread (thread);
     }
 
-  if (exec_bfd == nullptr)
+  if (current_program_space->exec_bfd () == nullptr)
     locate_exec_from_corefile_build_id (core_bfd, from_tty);
 
-  post_create_inferior (target, from_tty);
+  post_create_inferior (from_tty);
 
   /* Now go through the target stack looking for threads since there
      may be a thread_stratum target loaded on top of target core by
@@ -499,7 +738,7 @@ core_target_open (const char *arg, int f
 
   p = bfd_core_file_failing_command (core_bfd);
   if (p)
-    printf_filtered (_("Core was generated by `%s'.\n"), p);
+    gdb_printf (_("Core was generated by `%s'.\n"), p);
 
   /* Clearing any previous state of convenience variables.  */
   clear_exit_convenience_vars ();
@@ -521,8 +760,11 @@ core_target_open (const char *arg, int f
 							       siggy)
 			     : gdb_signal_from_host (siggy));
 
-      printf_filtered (_("Program terminated with signal %s, %s.\n"),
-		       gdb_signal_to_name (sig), gdb_signal_to_string (sig));
+      gdb_printf (_("Program terminated with signal %s, %s"),
+		  gdb_signal_to_name (sig), gdb_signal_to_string (sig));
+      if (gdbarch_report_signal_info_p (core_gdbarch))
+	gdbarch_report_signal_info (core_gdbarch, current_uiout, sig);
+      gdb_printf (_(".\n"));
 
       /* Set the value of the internal variable $_exitsignal,
 	 which holds the signal uncaught by the inferior.  */
@@ -531,7 +773,7 @@ core_target_open (const char *arg, int f
     }
 
   /* Fetch all registers from core file.  */
-  target_fetch_registers (get_current_regcache (), -1);
+  target_fetch_registers (get_thread_regcache (inferior_thread ()), -1);
 
   /* Now, set up the frame cache, and print the top of stack.  */
   reinit_frame_cache ();
@@ -540,7 +782,7 @@ core_target_open (const char *arg, int f
   /* Current thread should be NUM 1 but the user does not know that.
      If a program is single threaded gdb in general does not mention
      anything about threads.  That is why the test is >= 2.  */
-  if (thread_count () >= 2)
+  if (thread_count (target) >= 2)
     {
       try
 	{
@@ -556,10 +798,16 @@ core_target_open (const char *arg, int f
 void
 core_target::detach (inferior *inf, int from_tty)
 {
-  /* Note that 'this' is dangling after this call.  unpush_target
-     closes the target, and our close implementation deletes
-     'this'.  */
-  unpush_target (this);
+  /* Get rid of the core.  Don't rely on core_target::close doing it,
+     because target_detach may be called with core_target's refcount > 1,
+     meaning core_target::close may not be called yet by the
+     unpush_target call below.  */
+  clear_core ();
+
+  /* Note that 'this' may be dangling after this call.  unpush_target
+     closes the target if the refcount reaches 0, and our close
+     implementation deletes 'this'.  */
+  inf->unpush_target (this);
 
   /* Clear the register cache and the frame cache.  */
   registers_changed ();
@@ -568,8 +816,7 @@ core_target::detach (inferior *inf, int
 }
 
 /* Try to retrieve registers from a section in core_bfd, and supply
-   them to m_core_vec->core_read_registers, as the register set
-   numbered WHICH.
+   them to REGSET.
 
    If ptid's lwp member is zero, do the single-threaded
    thing: look for a section named NAME.  If ptid's lwp
@@ -588,15 +835,14 @@ core_target::get_core_register_section (
 					const struct regset *regset,
 					const char *name,
 					int section_min_size,
-					int which,
 					const char *human_name,
 					bool required)
 {
+  gdb_assert (regset != nullptr);
+
   struct bfd_section *section;
   bfd_size_type size;
-  char *contents;
-  bool variable_size_section = (regset != NULL
-				&& regset->flags & REGSET_VARIABLE_SIZE);
+  bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE);
 
   thread_section_name section_name (name, regcache->ptid ());
 
@@ -622,24 +868,16 @@ core_target::get_core_register_section (
 	       section_name.c_str ());
     }
 
-  contents = (char *) alloca (size);
-  if (! bfd_get_section_contents (core_bfd, section, contents,
-				  (file_ptr) 0, size))
+  gdb::byte_vector contents (size);
+  if (!bfd_get_section_contents (core_bfd, section, contents.data (),
+				 (file_ptr) 0, size))
     {
       warning (_("Couldn't read %s registers from `%s' section in core file."),
 	       human_name, section_name.c_str ());
       return;
     }
 
-  if (regset != NULL)
-    {
-      regset->supply_regset (regset, regcache, -1, contents, size);
-      return;
-    }
-
-  gdb_assert (m_core_vec != nullptr);
-  m_core_vec->core_read_registers (regcache, contents, size, which,
-				   (CORE_ADDR) bfd_section_vma (section));
+  regset->supply_regset (regset, regcache, -1, contents.data (), size);
 }
 
 /* Data passed to gdbarch_iterate_over_regset_sections's callback.  */
@@ -657,10 +895,11 @@ get_core_registers_cb (const char *sect_
 		       const struct regset *regset,
 		       const char *human_name, void *cb_data)
 {
+  gdb_assert (regset != nullptr);
+
   auto *data = (get_core_registers_cb_data *) cb_data;
   bool required = false;
-  bool variable_size_section = (regset != NULL
-				&& regset->flags & REGSET_VARIABLE_SIZE);
+  bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE);
 
   if (!variable_size_section)
     gdb_assert (supply_size == collect_size);
@@ -677,11 +916,8 @@ get_core_registers_cb (const char *sect_
 	human_name = "floating-point";
     }
 
-  /* The 'which' parameter is only used when no regset is provided.
-     Thus we just set it to -1. */
   data->target->get_core_register_section (data->regcache, regset, sect_name,
-					   supply_size, -1, human_name,
-					   required);
+					   supply_size, human_name, required);
 }
 
 /* Get the registers out of a core file.  This is the machine-
@@ -694,36 +930,22 @@ get_core_registers_cb (const char *sect_
 void
 core_target::fetch_registers (struct regcache *regcache, int regno)
 {
-  int i;
-  struct gdbarch *gdbarch;
-
   if (!(m_core_gdbarch != nullptr
-	&& gdbarch_iterate_over_regset_sections_p (m_core_gdbarch))
-      && (m_core_vec == NULL || m_core_vec->core_read_registers == NULL))
+	&& gdbarch_iterate_over_regset_sections_p (m_core_gdbarch)))
     {
-      fprintf_filtered (gdb_stderr,
-		     "Can't fetch registers from this type of core file\n");
+      gdb_printf (gdb_stderr,
+		  "Can't fetch registers from this type of core file\n");
       return;
     }
 
-  gdbarch = regcache->arch ();
-  if (gdbarch_iterate_over_regset_sections_p (gdbarch))
-    {
-      get_core_registers_cb_data data = { this, regcache };
-      gdbarch_iterate_over_regset_sections (gdbarch,
-					    get_core_registers_cb,
-					    (void *) &data, NULL);
-    }
-  else
-    {
-      get_core_register_section (regcache, NULL,
-				 ".reg", 0, 0, "general-purpose", 1);
-      get_core_register_section (regcache, NULL,
-				 ".reg2", 0, 2, "floating-point", 0);
-    }
+  struct gdbarch *gdbarch = regcache->arch ();
+  get_core_registers_cb_data data = { this, regcache };
+  gdbarch_iterate_over_regset_sections (gdbarch,
+					get_core_registers_cb,
+					(void *) &data, NULL);
 
   /* Mark all registers not found in the core as unavailable.  */
-  for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
+  for (int i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
     if (regcache->get_register_status (i) == REG_UNKNOWN)
       regcache->raw_supply (i, NULL);
 }
@@ -734,6 +956,56 @@ core_target::files_info ()
   print_section_info (&m_core_section_table, core_bfd);
 }
 
+/* Helper method for core_target::xfer_partial.  */
+
+enum target_xfer_status
+core_target::xfer_memory_via_mappings (gdb_byte *readbuf,
+				       const gdb_byte *writebuf,
+				       ULONGEST offset, ULONGEST len,
+				       ULONGEST *xfered_len)
+{
+  enum target_xfer_status xfer_status;
+
+  xfer_status = (section_table_xfer_memory_partial
+		   (readbuf, writebuf,
+		    offset, len, xfered_len,
+		    m_core_file_mappings));
+
+  if (xfer_status == TARGET_XFER_OK || m_core_unavailable_mappings.empty ())
+    return xfer_status;
+
+  /* There are instances - e.g. when debugging within a docker
+     container using the AUFS storage driver - where the pathnames
+     obtained from the note section are incorrect.  Despite the path
+     being wrong, just knowing the start and end addresses of the
+     mappings is still useful; we can attempt an access of the file
+     stratum constrained to the address ranges corresponding to the
+     unavailable mappings.  */
+
+  ULONGEST memaddr = offset;
+  ULONGEST memend = offset + len;
+
+  for (const auto &mr : m_core_unavailable_mappings)
+    {
+      if (address_in_mem_range (memaddr, &mr))
+	{
+	  if (!address_in_mem_range (memend, &mr))
+	    len = mr.start + mr.length - memaddr;
+
+	  xfer_status = this->beneath ()->xfer_partial (TARGET_OBJECT_MEMORY,
+							NULL,
+							readbuf,
+							writebuf,
+							offset,
+							len,
+							xfered_len);
+	  break;
+	}
+    }
+
+  return xfer_status;
+}
+
 enum target_xfer_status
 core_target::xfer_partial (enum target_object object, const char *annex,
 			   gdb_byte *readbuf, const gdb_byte *writebuf,
@@ -742,13 +1014,59 @@ core_target::xfer_partial (enum target_o
   switch (object)
     {
     case TARGET_OBJECT_MEMORY:
-      return (section_table_xfer_memory_partial
-	      (readbuf, writebuf,
-	       offset, len, xfered_len,
-	       m_core_section_table.sections,
-	       m_core_section_table.sections_end,
-	       NULL));
+      {
+	enum target_xfer_status xfer_status;
+
+	/* Try accessing memory contents from core file data,
+	   restricting consideration to those sections for which
+	   the BFD section flag SEC_HAS_CONTENTS is set.  */
+	auto has_contents_cb = [] (const struct target_section *s)
+	  {
+	    return ((s->the_bfd_section->flags & SEC_HAS_CONTENTS) != 0);
+	  };
+	xfer_status = section_table_xfer_memory_partial
+			(readbuf, writebuf,
+			 offset, len, xfered_len,
+			 m_core_section_table,
+			 has_contents_cb);
+	if (xfer_status == TARGET_XFER_OK)
+	  return TARGET_XFER_OK;
 
+	/* Check file backed mappings.  If they're available, use
+	   core file provided mappings (e.g. from .note.linuxcore.file
+	   or the like) as this should provide a more accurate
+	   result.  If not, check the stratum beneath us, which should
+	   be the file stratum.
+
+	   We also check unavailable mappings due to Docker/AUFS driver
+	   issues.  */
+	if (!m_core_file_mappings.empty ()
+	    || !m_core_unavailable_mappings.empty ())
+	  {
+	    xfer_status = xfer_memory_via_mappings (readbuf, writebuf, offset,
+						    len, xfered_len);
+	  }
+	else
+	  xfer_status = this->beneath ()->xfer_partial (object, annex, readbuf,
+							writebuf, offset, len,
+							xfered_len);
+	if (xfer_status == TARGET_XFER_OK)
+	  return TARGET_XFER_OK;
+
+	/* Finally, attempt to access data in core file sections with
+	   no contents.  These will typically read as all zero.  */
+	auto no_contents_cb = [&] (const struct target_section *s)
+	  {
+	    return !has_contents_cb (s);
+	  };
+	xfer_status = section_table_xfer_memory_partial
+			(readbuf, writebuf,
+			 offset, len, xfered_len,
+			 m_core_section_table,
+			 no_contents_cb);
+
+	return xfer_status;
+      }
     case TARGET_OBJECT_AUXV:
       if (readbuf)
 	{
@@ -837,7 +1155,7 @@ core_target::xfer_partial (enum target_o
 		return TARGET_XFER_OK;
 	    }
 	}
-      /* FALL THROUGH */
+      return TARGET_XFER_E_IO;
 
     case TARGET_OBJECT_LIBRARIES_AIX:
       if (m_core_gdbarch != nullptr
@@ -858,7 +1176,7 @@ core_target::xfer_partial (enum target_o
 		return TARGET_XFER_OK;
 	    }
 	}
-      /* FALL THROUGH */
+      return TARGET_XFER_E_IO;
 
     case TARGET_OBJECT_SIGNAL_INFO:
       if (readbuf)
@@ -910,12 +1228,47 @@ core_target::thread_alive (ptid_t ptid)
 const struct target_desc *
 core_target::read_description ()
 {
+  /* First check whether the target wants us to use the corefile target
+     description notes.  */
+  if (gdbarch_use_target_description_from_corefile_notes (m_core_gdbarch,
+							  core_bfd))
+    {
+      /* If the core file contains a target description note then go ahead and
+	 use that.  */
+      bfd_size_type tdesc_note_size = 0;
+      struct bfd_section *tdesc_note_section
+	= bfd_get_section_by_name (core_bfd, ".gdb-tdesc");
+      if (tdesc_note_section != nullptr)
+	tdesc_note_size = bfd_section_size (tdesc_note_section);
+      if (tdesc_note_size > 0)
+	{
+	  gdb::char_vector contents (tdesc_note_size + 1);
+	  if (bfd_get_section_contents (core_bfd, tdesc_note_section,
+					contents.data (), (file_ptr) 0,
+					tdesc_note_size))
+	    {
+	      /* Ensure we have a null terminator.  */
+	      contents[tdesc_note_size] = '\0';
+	      const struct target_desc *result
+		= string_read_description_xml (contents.data ());
+	      if (result != nullptr)
+		return result;
+	    }
+	}
+    }
+
+  /* If the architecture provides a corefile target description hook, use
+     it now.  Even if the core file contains a target description in a note
+     section, it is not useful for targets that can potentially have distinct
+     descriptions for each thread.  One example is AArch64's SVE/SME
+     extensions that allow per-thread vector length changes, resulting in
+     registers with different sizes.  */
   if (m_core_gdbarch && gdbarch_core_read_description_p (m_core_gdbarch))
     {
       const struct target_desc *result;
 
       result = gdbarch_core_read_description (m_core_gdbarch, this, core_bfd);
-      if (result != NULL)
+      if (result != nullptr)
 	return result;
     }
 
@@ -944,7 +1297,7 @@ core_target::pid_to_str (ptid_t ptid)
 
   /* Otherwise, this isn't a "threaded" core -- use the PID field, but
      only if it isn't a fake PID.  */
-  inf = find_inferior_ptid (ptid);
+  inf = find_inferior_ptid (this, ptid);
   if (inf != NULL && !inf->fake_pid_p)
     return normal_pid_to_str (ptid);
 
@@ -994,8 +1347,162 @@ core_target::info_proc (const char *args
   return true;
 }
 
+/* Implementation of the "supports_memory_tagging" target_ops method.  */
+
+bool
+core_target::supports_memory_tagging ()
+{
+  /* Look for memory tag sections.  If they exist, that means this core file
+     supports memory tagging.  */
+
+  return (bfd_get_section_by_name (core_bfd, "memtag") != nullptr);
+}
+
+/* Implementation of the "fetch_memtags" target_ops method.  */
+
+bool
+core_target::fetch_memtags (CORE_ADDR address, size_t len,
+			    gdb::byte_vector &tags, int type)
+{
+  gdbarch *gdbarch = current_inferior ()->arch ();
+
+  /* Make sure we have a way to decode the memory tag notes.  */
+  if (!gdbarch_decode_memtag_section_p (gdbarch))
+    error (_("gdbarch_decode_memtag_section not implemented for this "
+	     "architecture."));
+
+  memtag_section_info info;
+  info.memtag_section = nullptr;
+
+  while (get_next_core_memtag_section (core_bfd, info.memtag_section,
+				       address, info))
+  {
+    size_t adjusted_length
+      = (address + len < info.end_address) ? len : (info.end_address - address);
+
+    /* Decode the memory tag note and return the tags.  */
+    gdb::byte_vector tags_read
+      = gdbarch_decode_memtag_section (gdbarch, info.memtag_section, type,
+				       address, adjusted_length);
+
+    /* Transfer over the tags that have been read.  */
+    tags.insert (tags.end (), tags_read.begin (), tags_read.end ());
+
+    /* ADDRESS + LEN may cross the boundaries of a particular memory tag
+       segment.  Check if we need to fetch tags from a different section.  */
+    if (!tags_read.empty () && (address + len) < info.end_address)
+      return true;
+
+    /* There are more tags to fetch.  Update ADDRESS and LEN.  */
+    len -= (info.end_address - address);
+    address = info.end_address;
+  }
+
+  return false;
+}
+
+/* Implementation of the "fetch_x86_xsave_layout" target_ops method.  */
+
+x86_xsave_layout
+core_target::fetch_x86_xsave_layout ()
+{
+  if (m_core_gdbarch != nullptr &&
+      gdbarch_core_read_x86_xsave_layout_p (m_core_gdbarch))
+    {
+      x86_xsave_layout layout;
+      if (!gdbarch_core_read_x86_xsave_layout (m_core_gdbarch, layout))
+	return {};
+
+      return layout;
+    }
+
+  return {};
+}
+
+/* Get a pointer to the current core target.  If not connected to a
+   core target, return NULL.  */
+
+static core_target *
+get_current_core_target ()
+{
+  target_ops *proc_target = current_inferior ()->process_target ();
+  return dynamic_cast<core_target *> (proc_target);
+}
+
+/* Display file backed mappings from core file.  */
+
+void
+core_target::info_proc_mappings (struct gdbarch *gdbarch)
+{
+  if (!m_core_file_mappings.empty ())
+    {
+      gdb_printf (_("Mapped address spaces:\n\n"));
+      if (gdbarch_addr_bit (gdbarch) == 32)
+	{
+	  gdb_printf ("\t%10s %10s %10s %10s %s\n",
+		      "Start Addr",
+		      "  End Addr",
+		      "      Size", "    Offset", "objfile");
+	}
+      else
+	{
+	  gdb_printf ("  %18s %18s %10s %10s %s\n",
+		      "Start Addr",
+		      "  End Addr",
+		      "      Size", "    Offset", "objfile");
+	}
+    }
+
+  for (const target_section &tsp : m_core_file_mappings)
+    {
+      ULONGEST start = tsp.addr;
+      ULONGEST end = tsp.endaddr;
+      ULONGEST file_ofs = tsp.the_bfd_section->filepos;
+      const char *filename = bfd_get_filename (tsp.the_bfd_section->owner);
+
+      if (gdbarch_addr_bit (gdbarch) == 32)
+	gdb_printf ("\t%10s %10s %10s %10s %s\n",
+		    paddress (gdbarch, start),
+		    paddress (gdbarch, end),
+		    hex_string (end - start),
+		    hex_string (file_ofs),
+		    filename);
+      else
+	gdb_printf ("  %18s %18s %10s %10s %s\n",
+		    paddress (gdbarch, start),
+		    paddress (gdbarch, end),
+		    hex_string (end - start),
+		    hex_string (file_ofs),
+		    filename);
+    }
+}
+
+/* Implement "maintenance print core-file-backed-mappings" command.  
+
+   If mappings are loaded, the results should be similar to the
+   mappings shown by "info proc mappings".  This command is mainly a
+   debugging tool for GDB developers to make sure that the expected
+   mappings are present after loading a core file.  For Linux, the
+   output provided by this command will be very similar (if not
+   identical) to that provided by "info proc mappings".  This is not
+   necessarily the case for other OSes which might provide
+   more/different information in the "info proc mappings" output.  */
+
+static void
+maintenance_print_core_file_backed_mappings (const char *args, int from_tty)
+{
+  core_target *targ = get_current_core_target ();
+  if (targ != nullptr)
+    targ->info_proc_mappings (targ->core_gdbarch ());
+}
+
+void _initialize_corelow ();
 void
-_initialize_corelow (void)
+_initialize_corelow ()
 {
   add_target (core_target_info, core_target_open, filename_completer);
+  add_cmd ("core-file-backed-mappings", class_maintenance,
+	   maintenance_print_core_file_backed_mappings,
+	   _("Print core file's file-backed mappings."),
+	   &maintenanceprintlist);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-abi.c ./gdb/cp-abi.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-abi.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cp-abi.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Generic code for supporting multiple C++ ABI's
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,6 +18,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include "language.h"
 #include "value.h"
 #include "cp-abi.h"
 #include "command.h"
@@ -110,7 +111,7 @@ value_rtti_type (struct value *v, int *f
   struct type *ret = NULL;
 
   if ((current_cp_abi.rtti_type) == NULL
-      || !HAVE_CPLUS_STRUCT (check_typedef (value_type (v))))
+      || !HAVE_CPLUS_STRUCT (check_typedef (v->type ())))
     return NULL;
   try
     {
@@ -152,7 +153,7 @@ cplus_make_method_ptr (struct type *type
 }
 
 CORE_ADDR
-cplus_skip_trampoline (struct frame_info *frame,
+cplus_skip_trampoline (frame_info_ptr frame,
 		       CORE_ADDR stop_pc)
 {
   if (current_cp_abi.skip_trampoline == NULL)
@@ -220,11 +221,13 @@ cplus_typename_from_type_info (struct va
   return (*current_cp_abi.get_typename_from_type_info) (value);
 }
 
-int
+/* See cp-abi.h.  */
+
+struct language_pass_by_ref_info
 cp_pass_by_reference (struct type *type)
 {
   if ((current_cp_abi.pass_by_reference) == NULL)
-    return 0;
+    return {};
   return (*current_cp_abi.pass_by_reference) (type);
 }
 
@@ -249,8 +252,7 @@ int
 register_cp_abi (struct cp_abi_ops *abi)
 {
   if (num_cp_abis == CP_ABI_MAX)
-    internal_error (__FILE__, __LINE__,
-		    _("Too many C++ ABIs, please increase "
+    internal_error (_("Too many C++ ABIs, please increase "
 		      "CP_ABI_MAX in cp-abi.c"));
 
   cp_abis[num_cp_abis++] = abi;
@@ -263,28 +265,22 @@ register_cp_abi (struct cp_abi_ops *abi)
 void
 set_cp_abi_as_auto_default (const char *short_name)
 {
-  char *new_longname, *new_doc;
   struct cp_abi_ops *abi = find_cp_abi (short_name);
 
   if (abi == NULL)
-    internal_error (__FILE__, __LINE__,
-		    _("Cannot find C++ ABI \"%s\" to set it as auto default."),
+    internal_error (_("Cannot find C++ ABI \"%s\" to set it as auto default."),
 		    short_name);
 
-  if (auto_cp_abi.longname != NULL)
-    xfree ((char *) auto_cp_abi.longname);
-  if (auto_cp_abi.doc != NULL)
-    xfree ((char *) auto_cp_abi.doc);
+  xfree ((char *) auto_cp_abi.longname);
+  xfree ((char *) auto_cp_abi.doc);
 
   auto_cp_abi = *abi;
 
   auto_cp_abi.shortname = "auto";
-  new_longname = xstrprintf ("currently \"%s\"", abi->shortname);
-  auto_cp_abi.longname = new_longname;
-
-  new_doc = xstrprintf ("Automatically selected; currently \"%s\"",
-	     abi->shortname);
-  auto_cp_abi.doc = new_doc;
+  auto_cp_abi.longname = xstrprintf ("currently \"%s\"",
+				     abi->shortname).release ();
+  auto_cp_abi.doc = xstrprintf ("Automatically selected; currently \"%s\"",
+				abi->shortname).release ();
 
   /* Since we copy the current ABI into current_cp_abi instead of
      using a pointer, if auto is currently the default, we need to
@@ -389,8 +385,9 @@ show_cp_abi_cmd (const char *args, int f
   uiout->text (").\n");
 }
 
+void _initialize_cp_abi ();
 void
-_initialize_cp_abi (void)
+_initialize_cp_abi ()
 {
   struct cmd_list_element *c;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-abi.h ./gdb/cp-abi.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-abi.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cp-abi.h	2024-02-01 01:47:15.000000000 +0000
@@ -3,7 +3,7 @@
 
    Contributed by Daniel Berlin <dberlin@redhat.com>
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,7 +27,7 @@ struct fn_field;
 struct type;
 struct value;
 struct ui_file;
-struct frame_info;
+class frame_info_ptr;
 
 /* The functions here that attempt to determine what sort of thing a
    mangled name refers to may well be revised in the future.  It would
@@ -123,19 +123,19 @@ extern struct value *value_virtual_fn_fi
      - If *USING_ENC is zero, then *TOP is the offset from the start
        of the complete object to the start of the embedded subobject
        VALUE represents.  In other words, the enclosing object starts
-       at VALUE_ADDR (VALUE) + VALUE_OFFSET (VALUE) +
-       value_embedded_offset (VALUE) + *TOP
+       at VALUE_ADDR (VALUE) + VALUE->offset () +
+       VALUE->embedded_offset () + *TOP
      - If *USING_ENC is non-zero, then *TOP is the offset from the
        address of the complete object to the enclosing object stored
        in VALUE.  In other words, the enclosing object starts at
-       VALUE_ADDR (VALUE) + VALUE_OFFSET (VALUE) + *TOP.
+       VALUE_ADDR (VALUE) + VALUE->offset () + *TOP.
      If VALUE's type and enclosing type are the same, then these two
      cases are equivalent.
 
    FULL, TOP, and USING_ENC can each be zero, in which case we don't
    provide the corresponding piece of information.  */
 extern struct type *value_rtti_type (struct value *value,
-                                     int *full, LONGEST *top,
+				     int *full, LONGEST *top,
 				     int *using_enc);
 
 /* Compute the offset of the baseclass which is the INDEXth baseclass
@@ -204,12 +204,14 @@ extern std::string cplus_typename_from_t
    address of the routine we are thunking to and continue to there
    instead.  */
 
-CORE_ADDR cplus_skip_trampoline (struct frame_info *frame,
+CORE_ADDR cplus_skip_trampoline (frame_info_ptr frame,
 				 CORE_ADDR stop_pc);
 
-/* Return non-zero if an argument of type TYPE should be passed by
-   reference instead of value.  */
-extern int cp_pass_by_reference (struct type *type);
+/* Return a struct that provides pass-by-reference information
+   about the given TYPE.  */
+
+extern struct language_pass_by_ref_info cp_pass_by_reference
+  (struct type *type);
 
 struct cp_abi_ops
 {
@@ -245,8 +247,8 @@ struct cp_abi_ops
   struct type *(*get_typeid_type) (struct gdbarch *gdbarch);
   struct type *(*get_type_from_type_info) (struct value *value);
   std::string (*get_typename_from_type_info) (struct value *value);
-  CORE_ADDR (*skip_trampoline) (struct frame_info *, CORE_ADDR);
-  int (*pass_by_reference) (struct type *type);
+  CORE_ADDR (*skip_trampoline) (frame_info_ptr, CORE_ADDR);
+  struct language_pass_by_ref_info (*pass_by_reference) (struct type *type);
 };
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-name-parser.c ./gdb/cp-name-parser.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-name-parser.c	2019-12-11 01:52:52.000000000 +0000
+++ ./gdb/cp-name-parser.c	2024-02-01 01:52:09.000000000 +0000
@@ -1,21 +1,19 @@
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* Bison implementation for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-   
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -28,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -46,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.0.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,21 +58,17 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
 /* Copy the first part of user declarations.  */
-
-/* Line 189 of yacc.c  */
-#line 38 "cp-name-parser.y"
+#line 38 "cp-name-parser.y" /* yacc.c:339  */
 
 
 #include "defs.h"
 
 #include <unistd.h>
-#include "safe-ctype.h"
+#include "gdbsupport/gdb-safe-ctype.h"
 #include "demangle.h"
 #include "cp-support.h"
 #include "c-support.h"
@@ -95,14 +89,15 @@ struct demangle_info {
 };
 
 
+#line 93 "cp-name-parser.c.tmp" /* yacc.c:339  */
 
-/* Line 189 of yacc.c  */
-#line 101 "cp-name-parser.c.tmp"
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULLPTRPTR nullptr
+#  else
+#   define YY_NULLPTRPTR 0
+#  endif
+# endif
 
 /* Enabling verbose error messages.  */
 #ifdef YYERROR_VERBOSE
@@ -112,69 +107,71 @@ struct demangle_info {
 # define YYERROR_VERBOSE 0
 #endif
 
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
 
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
 
-/* Tokens.  */
+/* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     INT = 258,
-     FLOAT = 259,
-     NAME = 260,
-     STRUCT = 261,
-     CLASS = 262,
-     UNION = 263,
-     ENUM = 264,
-     SIZEOF = 265,
-     UNSIGNED = 266,
-     COLONCOLON = 267,
-     TEMPLATE = 268,
-     ERROR = 269,
-     NEW = 270,
-     DELETE = 271,
-     OPERATOR = 272,
-     STATIC_CAST = 273,
-     REINTERPRET_CAST = 274,
-     DYNAMIC_CAST = 275,
-     SIGNED_KEYWORD = 276,
-     LONG = 277,
-     SHORT = 278,
-     INT_KEYWORD = 279,
-     CONST_KEYWORD = 280,
-     VOLATILE_KEYWORD = 281,
-     DOUBLE_KEYWORD = 282,
-     BOOL = 283,
-     ELLIPSIS = 284,
-     RESTRICT = 285,
-     VOID = 286,
-     FLOAT_KEYWORD = 287,
-     CHAR = 288,
-     WCHAR_T = 289,
-     ASSIGN_MODIFY = 290,
-     TRUEKEYWORD = 291,
-     FALSEKEYWORD = 292,
-     DEMANGLER_SPECIAL = 293,
-     CONSTRUCTION_VTABLE = 294,
-     CONSTRUCTION_IN = 295,
-     OROR = 296,
-     ANDAND = 297,
-     NOTEQUAL = 298,
-     EQUAL = 299,
-     GEQ = 300,
-     LEQ = 301,
-     RSH = 302,
-     LSH = 303,
-     DECREMENT = 304,
-     INCREMENT = 305,
-     UNARY = 306,
-     ARROW = 307
-   };
+  enum yytokentype
+  {
+    INT = 258,
+    FLOAT = 259,
+    NAME = 260,
+    STRUCT = 261,
+    CLASS = 262,
+    UNION = 263,
+    ENUM = 264,
+    SIZEOF = 265,
+    UNSIGNED = 266,
+    COLONCOLON = 267,
+    TEMPLATE = 268,
+    ERROR = 269,
+    NEW = 270,
+    DELETE = 271,
+    OPERATOR = 272,
+    STATIC_CAST = 273,
+    REINTERPRET_CAST = 274,
+    DYNAMIC_CAST = 275,
+    SIGNED_KEYWORD = 276,
+    LONG = 277,
+    SHORT = 278,
+    INT_KEYWORD = 279,
+    CONST_KEYWORD = 280,
+    VOLATILE_KEYWORD = 281,
+    DOUBLE_KEYWORD = 282,
+    BOOL = 283,
+    ELLIPSIS = 284,
+    RESTRICT = 285,
+    VOID = 286,
+    FLOAT_KEYWORD = 287,
+    CHAR = 288,
+    WCHAR_T = 289,
+    ASSIGN_MODIFY = 290,
+    TRUEKEYWORD = 291,
+    FALSEKEYWORD = 292,
+    DEMANGLER_SPECIAL = 293,
+    CONSTRUCTION_VTABLE = 294,
+    CONSTRUCTION_IN = 295,
+    OROR = 296,
+    ANDAND = 297,
+    EQUAL = 298,
+    NOTEQUAL = 299,
+    LEQ = 300,
+    GEQ = 301,
+    LSH = 302,
+    RSH = 303,
+    UNARY = 304,
+    INCREMENT = 305,
+    DECREMENT = 306,
+    ARROW = 307
+  };
 #endif
 /* Tokens.  */
 #define INT 258
@@ -217,26 +214,23 @@ struct demangle_info {
 #define CONSTRUCTION_IN 295
 #define OROR 296
 #define ANDAND 297
-#define NOTEQUAL 298
-#define EQUAL 299
-#define GEQ 300
-#define LEQ 301
-#define RSH 302
-#define LSH 303
-#define DECREMENT 304
+#define EQUAL 298
+#define NOTEQUAL 299
+#define LEQ 300
+#define GEQ 301
+#define LSH 302
+#define RSH 303
+#define UNARY 304
 #define INCREMENT 305
-#define UNARY 306
+#define DECREMENT 306
 #define ARROW 307
 
+/* Value type.  */
+#if ! defined cp_name_parser_YYSTYPE && ! defined cp_name_parser_YYSTYPE_IS_DECLARED
 
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union cp_name_parser_YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
-#line 66 "cp-name-parser.y"
+#line 66 "cp-name-parser.y" /* yacc.c:355  */
 
     struct demangle_component *comp;
     struct nested {
@@ -256,20 +250,22 @@ typedef union YYSTYPE
     const char *opname;
   
 
+#line 254 "cp-name-parser.c.tmp" /* yacc.c:355  */
+};
 
-/* Line 214 of yacc.c  */
-#line 262 "cp-name-parser.c.tmp"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
+typedef union cp_name_parser_YYSTYPE cp_name_parser_YYSTYPE;
+# define cp_name_parser_YYSTYPE_IS_TRIVIAL 1
+# define cp_name_parser_YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
 
-/* Line 264 of yacc.c  */
-#line 85 "cp-name-parser.y"
+int yyparse (struct cpname_state *state);
+
+
+
+/* Copy the second part of user declarations.  */
+#line 85 "cp-name-parser.y" /* yacc.c:358  */
 
 
 struct cpname_state
@@ -319,7 +315,7 @@ struct cpname_state
 				       struct demangle_component *lhs,
 				       struct demangle_component *rhs);
 
-  int parse_number (const char *p, int len, int parsed_float, YYSTYPE *lvalp);
+  int parse_number (const char *p, int len, int parsed_float, cp_name_parser_YYSTYPE *lvalp);
 };
 
 struct demangle_component *
@@ -434,12 +430,10 @@ cpname_state::make_name (const char *nam
 #define d_left(dc) (dc)->u.s_binary.left
 #define d_right(dc) (dc)->u.s_binary.right
 
-static int yylex (YYSTYPE *, cpname_state *);
+static int yylex (cp_name_parser_YYSTYPE *, cpname_state *);
 static void yyerror (cpname_state *, const char *);
 
-
-/* Line 264 of yacc.c  */
-#line 443 "cp-name-parser.c.tmp"
+#line 437 "cp-name-parser.c.tmp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -453,11 +447,8 @@ typedef unsigned char yytype_uint8;
 
 #ifdef YYTYPE_INT8
 typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
 #ifdef YYTYPE_UINT16
@@ -477,8 +468,7 @@ typedef short int yytype_int16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -489,42 +479,71 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
 #  endif
 # endif
 # ifndef YY_
-#  define YY_(msgid) msgid
+#  define YY_(Msgid) Msgid
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+#  define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
 # endif
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
+# define YYUSE(E) ((void) (E))
 #else
-# define YYUSE(e) /* empty */
+# define YYUSE(E) /* empty */
 #endif
 
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
 #else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
-    int yyi;
+# define YY_INITIAL_VALUE(Value) Value
 #endif
-{
-  return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
 #endif
 
+
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
 /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
@@ -541,11 +560,11 @@ YYID (yyi)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
+      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
 #     endif
 #    endif
 #   endif
@@ -553,8 +572,8 @@ YYID (yyi)
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+   /* Pacify GCC's 'empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -568,25 +587,23 @@ YYID (yyi)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined xmalloc) \
-	     && (defined YYFREE || defined xfree)))
+             && (defined YYFREE || defined xfree)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC xmalloc
-#   if ! defined xmalloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined xmalloc && ! defined EXIT_SUCCESS
 void *xmalloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE xfree
-#   if ! defined xfree && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined xfree && ! defined EXIT_SUCCESS
 void xfree (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -596,64 +613,68 @@ void xfree (void *); /* INFRINGES ON USE
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined cp_name_parser_YYSTYPE_IS_TRIVIAL && cp_name_parser_YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
-union yyalloc
+union cp_name_parser_yyalloc
 {
   yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
+  cp_name_parser_YYSTYPE yyvs_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (sizeof (union cp_name_parser_yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+     ((N) * (sizeof (yytype_int16) + sizeof (cp_name_parser_YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
+# define YYCOPY_NEEDED 1
 
 /* Relocate STACK from its old location to the new one.  The
    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
+    do                                                                  \
+      {                                                                 \
+        YYSIZE_T yynewbytes;                                            \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                 \
+    while (0)
 
 #endif
 
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(Dst, Src, Count) \
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYSIZE_T yyi;                         \
+          for (yyi = 0; yyi < (Count); yyi++)   \
+            (Dst)[yyi] = (Src)[yyi];            \
+        }                                       \
+      while (0)
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  84
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1152
+#define YYLAST   1137
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  75
@@ -661,29 +682,31 @@ union yyalloc
 #define YYNNTS  40
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  195
-/* YYNRULES -- Number of states.  */
+/* YYNSTATES -- Number of states.  */
 #define YYNSTATES  325
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   307
 
-#define YYTRANSLATE(YYX)						\
+#define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, without out-of-bounds checking.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,    72,     2,     2,     2,    63,    49,     2,
-      73,    41,    61,    59,    42,    60,    67,    62,     2,     2,
+      73,    41,    61,    59,    42,    60,    68,    62,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,    74,     2,
       52,    43,    53,    44,    58,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    68,     2,    70,    48,     2,     2,     2,     2,     2,
+       2,    69,     2,    70,    48,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,    47,     2,    71,     2,     2,     2,
@@ -704,131 +727,37 @@ static const yytype_uint8 yytranslate[]
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    45,    46,    50,    51,
-      54,    55,    56,    57,    64,    65,    66,    69
+      54,    55,    56,    57,    64,    65,    66,    67
 };
 
 #if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     5,     7,     9,    11,    12,    15,    18,
-      22,    26,    29,    32,    35,    40,    43,    46,    51,    56,
-      59,    62,    65,    68,    71,    74,    77,    80,    83,    86,
-      89,    92,    95,    98,   101,   104,   107,   110,   113,   116,
-     119,   122,   125,   128,   131,   135,   138,   142,   146,   149,
-     152,   154,   158,   161,   163,   168,   171,   173,   176,   179,
-     181,   184,   186,   188,   190,   192,   195,   198,   200,   203,
-     207,   210,   214,   219,   221,   225,   227,   230,   233,   238,
-     240,   242,   245,   249,   254,   258,   263,   268,   272,   273,
-     275,   277,   279,   281,   283,   286,   288,   290,   292,   294,
-     296,   298,   300,   303,   305,   307,   309,   312,   314,   316,
-     318,   321,   323,   325,   329,   334,   337,   341,   344,   346,
-     350,   353,   356,   358,   362,   365,   369,   372,   377,   381,
-     383,   386,   388,   392,   395,   398,   400,   402,   405,   407,
-     412,   415,   417,   420,   423,   425,   429,   432,   435,   437,
-     440,   442,   444,   449,   454,   459,   462,   465,   468,   471,
-     475,   477,   481,   484,   489,   492,   495,   498,   503,   511,
-     519,   527,   531,   535,   539,   543,   547,   551,   555,   559,
-     563,   567,   571,   575,   579,   583,   587,   591,   595,   599,
-     603,   609,   611,   613,   618,   620
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int8 yyrhs[] =
-{
-      76,     0,    -1,    77,    -1,   108,    -1,    80,    -1,    79,
-      -1,    -1,    12,    77,    -1,   104,   111,    -1,   104,    95,
-      78,    -1,    88,    95,    78,    -1,    83,    78,    -1,    83,
-     107,    -1,    38,    77,    -1,    39,    77,    40,    77,    -1,
-      17,    15,    -1,    17,    16,    -1,    17,    15,    68,    70,
-      -1,    17,    16,    68,    70,    -1,    17,    59,    -1,    17,
-      60,    -1,    17,    61,    -1,    17,    62,    -1,    17,    63,
-      -1,    17,    48,    -1,    17,    49,    -1,    17,    47,    -1,
-      17,    71,    -1,    17,    72,    -1,    17,    43,    -1,    17,
-      52,    -1,    17,    53,    -1,    17,    35,    -1,    17,    57,
-      -1,    17,    56,    -1,    17,    51,    -1,    17,    50,    -1,
-      17,    55,    -1,    17,    54,    -1,    17,    46,    -1,    17,
-      45,    -1,    17,    65,    -1,    17,    64,    -1,    17,    42,
-      -1,    17,    69,    61,    -1,    17,    69,    -1,    17,    73,
-      41,    -1,    17,    68,    70,    -1,    17,   104,    -1,    90,
-      82,    -1,    82,    -1,    12,    90,    82,    -1,    12,    82,
-      -1,    81,    -1,    81,    52,    92,    53,    -1,    71,     5,
-      -1,    86,    -1,    12,    86,    -1,    90,     5,    -1,     5,
-      -1,    90,    91,    -1,    91,    -1,    85,    -1,    88,    -1,
-      89,    -1,    12,    89,    -1,    90,    84,    -1,    84,    -1,
-       5,    12,    -1,    90,     5,    12,    -1,    91,    12,    -1,
-      90,    91,    12,    -1,     5,    52,    92,    53,    -1,    93,
-      -1,    92,    42,    93,    -1,   104,    -1,   104,   105,    -1,
-      49,    77,    -1,    49,    73,    77,    41,    -1,   113,    -1,
-     104,    -1,   104,   105,    -1,    94,    42,   104,    -1,    94,
-      42,   104,   105,    -1,    94,    42,    29,    -1,    73,    94,
-      41,    96,    -1,    73,    31,    41,    96,    -1,    73,    41,
-      96,    -1,    -1,    98,    -1,    30,    -1,    26,    -1,    25,
-      -1,    97,    -1,    97,    98,    -1,    24,    -1,    21,    -1,
-      11,    -1,    33,    -1,    22,    -1,    23,    -1,    99,    -1,
-     100,    99,    -1,   100,    -1,    32,    -1,    27,    -1,    22,
-      27,    -1,    28,    -1,    34,    -1,    31,    -1,    61,    96,
-      -1,    49,    -1,    46,    -1,    90,    61,    96,    -1,    12,
-      90,    61,    96,    -1,    68,    70,    -1,    68,     3,    70,
-      -1,   101,    98,    -1,   101,    -1,    98,   101,    98,    -1,
-      98,   101,    -1,    86,    98,    -1,    86,    -1,    98,    86,
-      98,    -1,    98,    86,    -1,    12,    86,    98,    -1,    12,
-      86,    -1,    98,    12,    86,    98,    -1,    98,    12,    86,
-      -1,   102,    -1,   102,   105,    -1,   106,    -1,    73,   105,
-      41,    -1,   106,    95,    -1,   106,   103,    -1,   103,    -1,
-     102,    -1,   102,   107,    -1,   106,    -1,   106,    95,    12,
-      77,    -1,    95,    78,    -1,   104,    -1,   104,   105,    -1,
-     102,   109,    -1,   110,    -1,    73,   109,    41,    -1,   110,
-      95,    -1,   110,   103,    -1,    87,    -1,   102,   111,    -1,
-      87,    -1,   112,    -1,    87,    95,    12,    77,    -1,   112,
-      95,    12,    77,    -1,    73,   102,   109,    41,    -1,   112,
-      95,    -1,   112,   103,    -1,    87,    95,    -1,    87,   103,
-      -1,    73,   114,    41,    -1,   113,    -1,   113,    53,   113,
-      -1,    49,    77,    -1,    49,    73,    77,    41,    -1,    60,
-     113,    -1,    72,   113,    -1,    71,   113,    -1,    73,   108,
-      41,   113,    -1,    18,    52,   108,    53,    73,   114,    41,
-      -1,    20,    52,   108,    53,    73,   114,    41,    -1,    19,
-      52,   108,    53,    73,   114,    41,    -1,   113,    61,   113,
-      -1,   113,    62,   113,    -1,   113,    63,   113,    -1,   113,
-      59,   113,    -1,   113,    60,   113,    -1,   113,    57,   113,
-      -1,   113,    56,   113,    -1,   113,    51,   113,    -1,   113,
-      50,   113,    -1,   113,    55,   113,    -1,   113,    54,   113,
-      -1,   113,    52,   113,    -1,   113,    49,   113,    -1,   113,
-      48,   113,    -1,   113,    47,   113,    -1,   113,    46,   113,
-      -1,   113,    45,   113,    -1,   113,    69,     5,    -1,   113,
-      67,     5,    -1,   113,    44,   113,    74,   113,    -1,     3,
-      -1,     4,    -1,    10,    73,   108,    41,    -1,    36,    -1,
-      37,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   348,   348,   352,   354,   356,   361,   362,   369,   378,
-     385,   389,   392,   411,   413,   417,   423,   429,   435,   441,
-     443,   445,   447,   449,   451,   453,   455,   457,   459,   461,
-     463,   465,   467,   469,   471,   473,   475,   477,   479,   481,
-     483,   485,   487,   489,   491,   493,   495,   497,   505,   510,
-     515,   519,   524,   532,   533,   535,   547,   548,   554,   556,
-     557,   559,   562,   563,   566,   567,   571,   573,   576,   580,
-     585,   589,   598,   602,   605,   616,   617,   621,   623,   625,
-     628,   632,   637,   642,   648,   658,   662,   666,   674,   675,
-     678,   680,   682,   686,   687,   694,   696,   698,   700,   702,
-     704,   708,   709,   713,   715,   717,   719,   721,   723,   725,
-     729,   734,   737,   740,   746,   754,   756,   770,   772,   773,
-     775,   778,   780,   781,   783,   786,   788,   790,   792,   797,
-     800,   805,   812,   816,   827,   833,   851,   854,   862,   864,
-     875,   882,   883,   889,   893,   897,   899,   904,   909,   921,
-     925,   929,   937,   942,   951,   955,   960,   965,   969,   975,
-     981,   984,   991,   993,   998,  1002,  1006,  1013,  1029,  1036,
-    1043,  1062,  1066,  1070,  1074,  1078,  1082,  1086,  1090,  1094,
-    1098,  1102,  1106,  1110,  1114,  1118,  1122,  1126,  1131,  1135,
-    1139,  1146,  1150,  1153,  1162,  1171
+       0,   348,   348,   357,   359,   361,   366,   367,   374,   383,
+     390,   394,   397,   416,   418,   422,   428,   434,   440,   446,
+     448,   450,   452,   454,   456,   458,   460,   462,   464,   466,
+     468,   470,   472,   474,   476,   478,   480,   482,   484,   486,
+     488,   490,   492,   494,   496,   498,   500,   502,   510,   515,
+     520,   524,   529,   537,   538,   540,   552,   553,   559,   561,
+     562,   564,   567,   568,   571,   572,   576,   578,   581,   585,
+     590,   594,   603,   607,   610,   621,   622,   626,   628,   630,
+     633,   637,   642,   647,   653,   663,   667,   671,   679,   680,
+     683,   685,   687,   691,   692,   699,   701,   703,   705,   707,
+     709,   713,   714,   718,   720,   722,   724,   726,   728,   730,
+     734,   739,   742,   745,   751,   759,   761,   775,   777,   778,
+     780,   783,   785,   786,   788,   791,   793,   795,   797,   802,
+     805,   810,   817,   821,   832,   838,   856,   859,   867,   869,
+     880,   887,   888,   894,   898,   902,   904,   909,   914,   926,
+     930,   934,   942,   947,   956,   960,   965,   970,   974,   980,
+     986,   989,   996,   998,  1003,  1007,  1011,  1018,  1034,  1041,
+    1048,  1067,  1071,  1075,  1079,  1083,  1087,  1091,  1095,  1099,
+    1103,  1107,  1111,  1115,  1119,  1123,  1127,  1131,  1136,  1140,
+    1144,  1151,  1155,  1158,  1167,  1176
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || 0
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
@@ -841,9 +770,9 @@ static const char *const yytname[] =
   "ELLIPSIS", "RESTRICT", "VOID", "FLOAT_KEYWORD", "CHAR", "WCHAR_T",
   "ASSIGN_MODIFY", "TRUEKEYWORD", "FALSEKEYWORD", "DEMANGLER_SPECIAL",
   "CONSTRUCTION_VTABLE", "CONSTRUCTION_IN", "')'", "','", "'='", "'?'",
-  "OROR", "ANDAND", "'|'", "'^'", "'&'", "NOTEQUAL", "EQUAL", "'<'", "'>'",
-  "GEQ", "LEQ", "RSH", "LSH", "'@'", "'+'", "'-'", "'*'", "'/'", "'%'",
-  "DECREMENT", "INCREMENT", "UNARY", "'.'", "'['", "ARROW", "']'", "'~'",
+  "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQUAL", "NOTEQUAL", "'<'", "'>'",
+  "LEQ", "GEQ", "LSH", "RSH", "'@'", "'+'", "'-'", "'*'", "'/'", "'%'",
+  "UNARY", "INCREMENT", "DECREMENT", "ARROW", "'.'", "'['", "']'", "'~'",
   "'!'", "'('", "':'", "$accept", "result", "start", "start_opt",
   "function", "demangler_special", "oper", "conversion_op",
   "conversion_op_name", "unqualified_name", "colon_name", "name",
@@ -853,13 +782,13 @@ static const char *const yytname[] =
   "int_part", "int_seq", "builtin_type", "ptr_operator", "array_indicator",
   "typespec_2", "abstract_declarator", "direct_abstract_declarator",
   "abstract_declarator_fn", "type", "declarator", "direct_declarator",
-  "declarator_1", "direct_declarator_1", "exp", "exp1", 0
+  "declarator_1", "direct_declarator_1", "exp", "exp1", YY_NULLPTRPTR
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
@@ -868,64 +797,63 @@ static const yytype_uint16 yytoknum[] =
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,    41,    44,    61,    63,   296,   297,   124,    94,    38,
      298,   299,    60,    62,   300,   301,   302,   303,    64,    43,
-      45,    42,    47,    37,   304,   305,   306,    46,    91,   307,
+      45,    42,    47,    37,   304,   305,   306,   307,    46,    91,
       93,   126,    33,    40,    58
 };
 # endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    75,    76,    77,    77,    77,    78,    78,    79,    79,
-      79,    79,    79,    80,    80,    81,    81,    81,    81,    81,
-      81,    81,    81,    81,    81,    81,    81,    81,    81,    81,
-      81,    81,    81,    81,    81,    81,    81,    81,    81,    81,
-      81,    81,    81,    81,    81,    81,    81,    81,    82,    83,
-      83,    83,    83,    84,    84,    84,    85,    85,    86,    86,
-      86,    86,    87,    87,    88,    88,    89,    89,    90,    90,
-      90,    90,    91,    92,    92,    93,    93,    93,    93,    93,
-      94,    94,    94,    94,    94,    95,    95,    95,    96,    96,
-      97,    97,    97,    98,    98,    99,    99,    99,    99,    99,
-      99,   100,   100,   101,   101,   101,   101,   101,   101,   101,
-     102,   102,   102,   102,   102,   103,   103,   104,   104,   104,
-     104,   104,   104,   104,   104,   104,   104,   104,   104,   105,
-     105,   105,   106,   106,   106,   106,   107,   107,   107,   107,
-     107,   108,   108,   109,   109,   110,   110,   110,   110,   111,
-     111,   111,   111,   111,   112,   112,   112,   112,   112,   113,
-     114,   114,   114,   114,   113,   113,   113,   113,   113,   113,
-     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
-     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
-     113,   113,   113,   113,   113,   113
-};
+#define YYPACT_NINF -187
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-187)))
+
+#define YYTABLE_NINF -1
+
+#define yytable_value_is_error(Yytable_value) \
+  0
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+static const yytype_int16 yypact[] =
 {
-       0,     2,     1,     1,     1,     1,     0,     2,     2,     3,
-       3,     2,     2,     2,     4,     2,     2,     4,     4,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     3,     2,     3,     3,     2,     2,
-       1,     3,     2,     1,     4,     2,     1,     2,     2,     1,
-       2,     1,     1,     1,     1,     2,     2,     1,     2,     3,
-       2,     3,     4,     1,     3,     1,     2,     2,     4,     1,
-       1,     2,     3,     4,     3,     4,     4,     3,     0,     1,
-       1,     1,     1,     1,     2,     1,     1,     1,     1,     1,
-       1,     1,     2,     1,     1,     1,     2,     1,     1,     1,
-       2,     1,     1,     3,     4,     2,     3,     2,     1,     3,
-       2,     2,     1,     3,     2,     3,     2,     4,     3,     1,
-       2,     1,     3,     2,     2,     1,     1,     2,     1,     4,
-       2,     1,     2,     2,     1,     3,     2,     2,     1,     2,
-       1,     1,     4,     4,     4,     2,     2,     2,     2,     3,
-       1,     3,     2,     4,     2,     2,     2,     4,     7,     7,
-       7,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       5,     1,     1,     4,     1,     1
+     833,    39,  -187,    42,   540,  -187,   -12,  -187,  -187,  -187,
+    -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,   833,   833,
+      27,    41,  -187,  -187,  -187,     5,  -187,   710,  -187,    36,
+      -5,  -187,    43,    65,    36,   506,  -187,   120,    36,   711,
+    -187,  -187,   329,  -187,    36,  -187,    43,    73,    16,    21,
+    -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,
+    -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,
+    -187,  -187,  -187,    34,    30,  -187,  -187,    64,   115,  -187,
+    -187,  -187,    83,  -187,  -187,   329,    39,   833,  -187,  -187,
+      36,     6,   603,  -187,    12,    65,    98,   750,  -187,   -49,
+    -187,  -187,   857,    98,    70,  -187,  -187,   124,  -187,  -187,
+      73,    36,    36,  -187,  -187,  -187,    48,   860,   603,  -187,
+    -187,   -49,  -187,    23,    98,   720,  -187,   -49,  -187,   -49,
+    -187,  -187,    53,    80,    87,    95,  -187,  -187,   656,   476,
+     476,   476,   428,    10,  -187,   780,   325,  -187,  -187,    79,
+      82,  -187,  -187,  -187,   833,    22,  -187,    28,  -187,  -187,
+      89,  -187,    73,   116,    36,   780,    37,   114,   780,   780,
+     123,    70,    36,   124,   833,  -187,   161,  -187,   166,  -187,
+    -187,  -187,  -187,    36,  -187,  -187,  -187,    50,   729,   168,
+    -187,  -187,   780,  -187,  -187,  -187,   169,  -187,   979,   979,
+     979,   979,   833,  -187,   105,   105,   105,   680,   780,   142,
+     970,   143,   329,  -187,  -187,   476,   476,   476,   476,   476,
+     476,   476,   476,   476,   476,   476,   476,   476,   476,   476,
+     476,   476,   476,   180,   181,  -187,  -187,  -187,  -187,    36,
+    -187,    45,    36,  -187,    36,   949,  -187,  -187,  -187,    51,
+     833,  -187,   729,  -187,   729,   148,   -49,   833,   833,   152,
+     138,   141,   144,   154,   833,  -187,   476,   476,  -187,  -187,
+     890,   993,  1015,  1036,  1056,   359,   753,   753,  1069,  1069,
+    1069,   241,   241,   178,   178,   105,   105,   105,  -187,  -187,
+    -187,  -187,  -187,  -187,   780,  -187,   157,  -187,  -187,  -187,
+    -187,  -187,  -187,  -187,   126,   128,   131,  -187,   164,   105,
+     325,   476,  -187,  -187,   471,   471,   471,  -187,   325,   188,
+     189,   192,  -187,  -187,  -187
 };
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+     Performed when YYTABLE does not specify something else to do.  Zero
+     means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
        0,    59,    97,     0,     0,    96,    99,   100,    95,    92,
@@ -933,9 +861,9 @@ static const yytype_uint8 yydefact[] =
        0,     0,     2,     5,     4,    53,    50,     6,    67,   122,
        0,    64,     0,    61,    93,     0,   101,   103,   118,   141,
        3,    68,     0,    52,   126,    65,     0,     0,    15,    16,
-      32,    43,    29,    40,    39,    26,    24,    25,    36,    35,
-      30,    31,    38,    37,    34,    33,    19,    20,    21,    22,
-      23,    42,    41,     0,    45,    27,    28,     0,     0,    48,
+      32,    43,    29,    40,    39,    26,    24,    25,    35,    36,
+      30,    31,    37,    38,    33,    34,    19,    20,    21,    22,
+      23,    41,    42,    45,     0,    27,    28,     0,     0,    48,
      106,    13,     0,    55,     1,     0,     0,     0,   112,   111,
       88,     0,     0,    11,     0,     0,     6,   136,   135,   138,
       12,   121,     0,     6,    58,    49,    66,    60,    70,    94,
@@ -943,7 +871,7 @@ static const yytype_uint8 yydefact[] =
       56,   150,    63,     0,     6,   129,   142,   131,     8,   151,
      191,   192,     0,     0,     0,     0,   194,   195,     0,     0,
        0,     0,     0,     0,    73,    75,    79,   125,    51,     0,
-       0,    47,    44,    46,     0,     0,     7,     0,   110,    89,
+       0,    44,    47,    46,     0,     0,     7,     0,   110,    89,
        0,   115,     0,   109,    88,     0,     0,     0,   129,    80,
        0,     0,    88,     0,     0,   140,     0,   137,   133,   134,
       10,    69,    71,   128,   123,   119,    57,     0,   129,   157,
@@ -955,15 +883,24 @@ static const yytype_uint8 yydefact[] =
      116,     0,    88,    87,    88,     0,    81,   132,   113,     0,
        0,   127,     0,   148,   129,     0,   144,     0,     0,     0,
        0,     0,     0,     0,     0,   162,     0,     0,   159,    74,
-       0,   187,   186,   185,   184,   183,   179,   178,   182,   181,
-     180,   177,   176,   174,   175,   171,   172,   173,   189,   188,
+       0,   187,   186,   185,   184,   183,   178,   179,   182,   180,
+     181,   176,   177,   174,   175,   171,   172,   173,   188,   189,
      114,    86,    85,    84,    82,   139,     0,   143,   154,   146,
      147,   152,   153,   193,     0,     0,     0,    78,     0,   167,
      161,     0,    83,   145,     0,     0,     0,   163,   190,     0,
        0,     0,   168,   170,   169
 };
 
-/* YYDEFGOTO[NTERM-NUM].  */
+  /* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
+{
+    -187,  -187,    25,   -66,  -187,  -187,  -187,     3,  -187,   -20,
+    -187,    -1,   -32,    15,     1,     0,   150,   149,    31,  -187,
+     -25,  -156,  -187,   234,   205,  -187,   213,   -17,   -98,   196,
+     -18,   -16,   158,  -129,  -106,  -187,   134,  -187,    -6,  -186
+};
+
+  /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,    21,   156,    93,    23,    24,    25,    26,    27,    28,
@@ -972,107 +909,56 @@ static const yytype_int16 yydefgoto[] =
      170,   127,   100,    40,   255,   256,   128,   129,   210,   211
 };
 
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -187
-static const yytype_int16 yypact[] =
-{
-     794,    39,  -187,    42,   540,  -187,    -3,  -187,  -187,  -187,
-    -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,   794,   794,
-      27,    41,  -187,  -187,  -187,     5,  -187,   369,  -187,    36,
-      -5,  -187,    43,    65,    36,   506,  -187,   120,    36,   713,
-    -187,  -187,   329,  -187,    36,  -187,    43,    73,    17,    32,
-    -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,
-    -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,
-    -187,  -187,  -187,    20,    34,  -187,  -187,    64,   105,  -187,
-    -187,  -187,    80,  -187,  -187,   329,    39,   794,  -187,  -187,
-      36,     6,   605,  -187,    12,    65,   111,   712,  -187,   -53,
-    -187,  -187,   818,   111,    70,  -187,  -187,   124,  -187,  -187,
-      73,    36,    36,  -187,  -187,  -187,    48,   821,   605,  -187,
-    -187,   -53,  -187,    23,   111,   721,  -187,   -53,  -187,   -53,
-    -187,  -187,    53,    87,   100,   107,  -187,  -187,   658,   476,
-     476,   476,   428,    10,  -187,   730,   957,  -187,  -187,    62,
-      94,  -187,  -187,  -187,   794,    22,  -187,    28,  -187,  -187,
-      96,  -187,    73,   116,    36,   730,    37,   114,   730,   730,
-     131,    70,    36,   124,   794,  -187,   168,  -187,   166,  -187,
-    -187,  -187,  -187,    36,  -187,  -187,  -187,    50,   722,   169,
-    -187,  -187,   730,  -187,  -187,  -187,   174,  -187,   940,   940,
-     940,   940,   794,  -187,    79,    79,    79,   682,   730,   139,
-     931,   152,   329,  -187,  -187,   476,   476,   476,   476,   476,
-     476,   476,   476,   476,   476,   476,   476,   476,   476,   476,
-     476,   476,   476,   189,   190,  -187,  -187,  -187,  -187,    36,
-    -187,    45,    36,  -187,    36,   910,  -187,  -187,  -187,    51,
-     794,  -187,   722,  -187,   722,   156,   -53,   794,   794,   157,
-     146,   148,   151,   164,   794,  -187,   476,   476,  -187,  -187,
-     851,   981,  1004,  1026,  1047,  1067,  1083,  1083,   323,   323,
-     323,   241,   241,   122,   122,    79,    79,    79,  -187,  -187,
-    -187,  -187,  -187,  -187,   730,  -187,   188,  -187,  -187,  -187,
-    -187,  -187,  -187,  -187,   160,   161,   167,  -187,   198,    79,
-     957,   476,  -187,  -187,   471,   471,   471,  -187,   957,   200,
-     201,   202,  -187,  -187,  -187
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-    -187,  -187,    25,   -66,  -187,  -187,  -187,     3,  -187,   -20,
-    -187,    -1,   -32,    15,     1,     0,   150,   145,    33,  -187,
-     -25,  -156,  -187,   234,   209,  -187,   213,   -17,   -98,   196,
-     -18,   -16,   158,  -129,  -105,  -187,   134,  -187,    -6,  -186
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -1
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule whose
+     number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint16 yytable[] =
 {
       32,   179,    44,    46,    45,   103,    43,   121,   243,   160,
-      97,    99,   106,   209,   124,    91,   248,   171,    32,    32,
-     102,   126,   125,   190,    80,    22,   106,    94,   104,   179,
+      97,    99,   106,   209,   124,    80,   248,   171,    32,    32,
+      91,   126,   125,   190,   102,    22,   106,    94,   104,   179,
      175,   197,    83,   104,   111,   105,   146,   180,   120,   123,
      117,    84,   104,    81,    82,     4,    44,     1,   104,   148,
      104,    41,   212,     1,   122,   104,   171,    85,   191,     4,
        4,     9,    10,   213,   212,   117,    13,   117,   102,   259,
      260,   261,   262,   172,   178,   238,   161,   108,     1,   146,
       97,    99,   181,   290,   172,   149,   291,   157,   292,   239,
-     151,    42,   166,   121,    20,   152,   189,    94,   172,    20,
-     150,   188,   195,   106,   196,   153,   239,   193,   125,   183,
-     104,   239,   239,    20,    20,   186,   187,    45,   166,    20,
-     154,    20,    42,   174,   120,   123,   198,   214,   319,   320,
-     321,     2,   235,   204,   205,   206,   182,   106,    32,   199,
-     122,     5,   113,     7,     8,    94,   233,   296,   234,   297,
-     193,   246,   200,    16,    32,   244,   245,   242,   300,   201,
-     105,    44,   241,   203,   236,    94,   240,   106,    94,    94,
-     193,   254,   247,    86,    32,   188,   249,    95,   250,   237,
-     266,   257,   107,   230,   231,   232,   258,   120,   123,   233,
-     126,   234,    94,   268,   288,   289,   107,   298,   303,   304,
-      79,   305,    32,   122,   306,   307,   146,    32,    94,   270,
+     150,    42,   166,   121,    20,   151,   189,    94,   172,    20,
+     152,   188,   195,   106,   196,   153,   239,   193,   125,   183,
+     174,   239,   239,    20,    20,   186,   187,    45,   166,    20,
+     104,    20,    42,   154,   120,   123,   198,   214,   319,   320,
+     321,     2,   199,   204,   205,   206,   182,   106,    32,   200,
+     122,     5,   113,     7,     8,    94,   296,   201,   297,   235,
+     193,   246,   236,    16,    32,   244,   245,   242,   300,   240,
+     105,    44,   241,   203,   247,    94,    86,   106,    94,    94,
+     193,   254,   233,   234,    32,   188,   249,    95,   250,   237,
+     257,   258,   107,   266,   268,   288,   289,   120,   123,   298,
+     126,   304,    94,   303,   305,   307,   107,   306,   313,   314,
+      79,   315,    32,   122,   316,   317,   146,    32,    94,   270,
      271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   263,   107,   313,
-     155,   299,   265,   314,   315,   254,   193,   254,   145,   317,
-     316,   322,   323,   324,   173,   269,   114,    95,   112,     0,
+     281,   282,   283,   284,   285,   286,   287,   263,   107,   322,
+     323,   299,   265,   324,   155,   254,   193,   254,   145,   230,
+     231,   232,   114,   269,   173,   233,   234,    95,   112,     0,
       32,   120,   123,   120,   123,   177,     0,    32,    32,   194,
      309,   310,     0,   101,    32,     0,     0,   122,   109,   122,
        0,     0,   115,   107,     0,   295,   312,     0,   147,     0,
        0,   145,   301,   302,     0,     0,     0,     0,   169,   308,
        0,     0,     0,     0,    94,    95,     0,     0,   169,     0,
-     228,   229,   230,   231,   232,   318,     0,   107,   233,     0,
-     234,     0,     0,     0,   169,    95,   107,     0,    95,    95,
+     228,   229,   230,   231,   232,   318,     0,   107,   233,   234,
+       0,     0,     0,     0,   169,    95,   107,     0,    95,    95,
        0,     0,     0,     0,   159,     0,    95,     0,     0,     0,
        0,     0,   130,   131,     1,     0,     0,   107,   208,   132,
        2,    47,    95,     0,     0,   184,   185,   133,   134,   135,
        5,     6,     7,     8,     9,    10,    11,    12,    95,    13,
-      14,    15,    16,    17,     0,   136,   137,     0,     0,     0,
-       0,     0,     0,     0,    86,     0,     0,     0,   138,   226,
-     227,    87,   228,   229,   230,   231,   232,     0,     0,   139,
-     233,   107,   234,     0,   208,   208,   208,   208,   159,   173,
-     140,   141,   142,     0,     0,     0,   159,     0,   145,     0,
-       0,     0,     0,     0,     0,    88,     0,   251,    89,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      90,   130,   131,     1,     0,     0,     0,    91,   132,     2,
-      47,   294,    92,     0,    95,     0,   133,   134,   135,     5,
+      14,    15,    16,    17,     0,   136,   137,     0,     0,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   138,   224,
+     225,   226,   227,     0,   228,   229,   230,   231,   232,   139,
+       0,   107,   233,   234,   208,   208,   208,   208,   159,   173,
+     140,   141,   142,     0,     0,     0,   159,     0,   145,   221,
+     222,   223,     0,   224,   225,   226,   227,   251,   228,   229,
+     230,   231,   232,     0,     0,     0,   233,   234,     0,     0,
+       0,   130,   131,     1,     0,     0,     0,     0,   132,     2,
+      47,   294,     0,     0,    95,     0,   133,   134,   135,     5,
        6,     7,     8,     9,    10,    11,    12,     0,    13,    14,
       15,    16,    17,     0,   136,   137,     0,     0,     0,     0,
        0,     0,     0,   159,   130,   131,   159,   207,   159,   130,
@@ -1088,111 +974,109 @@ static const yytype_uint16 yytable[] =
       13,    14,    15,    16,    17,    50,     0,     0,     0,     0,
        0,     0,    51,    52,     0,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
-      67,    68,    69,    70,    71,    72,     0,     0,    73,    74,
-       1,    75,    76,    77,     0,     0,     2,   162,     0,     0,
-       0,     0,     0,     0,     0,     0,     5,     6,     7,     8,
-       9,    10,    11,    12,     0,    13,   163,    15,    16,    17,
-       0,     0,     0,     0,     0,     0,   164,     0,     0,     0,
-       0,    88,     0,     0,    89,     0,     0,     0,     0,     0,
-       0,     0,     0,     1,     0,     0,    90,     0,     0,     2,
-       3,     0,     0,    91,     0,     4,     0,     0,   165,     5,
-       6,     7,     8,     9,    10,    11,    12,     1,    13,    14,
-      15,    16,    17,     2,     3,     0,    18,    19,     0,     4,
-       0,     0,     0,     5,     6,     7,     8,     9,    10,    11,
-      12,     0,    13,    14,    15,    16,    17,    86,     1,     0,
-      18,    19,     0,     0,   176,   116,     1,     1,     0,    20,
-     117,   202,     0,   116,   116,    86,     0,     0,   117,   117,
-       0,     0,   176,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    20,     0,   264,     0,     0,    88,    88,
-       0,    89,    89,     0,     0,     0,     0,    88,    88,     0,
-      89,    89,     0,    90,    90,     0,    88,     0,     0,    89,
-      91,    91,    90,    90,    20,    92,   118,     0,     0,    91,
-      91,    90,    20,    20,   192,   252,     0,     0,    91,     1,
-       0,     0,     0,   165,     0,     2,     3,     0,     0,     0,
-       0,     4,     0,     0,     0,     5,     6,     7,     8,     9,
-      10,    11,    12,     1,    13,    14,    15,    16,    17,     2,
-      47,     0,    18,    19,     0,     0,    48,    49,     0,     5,
-       6,     7,     8,     9,    10,    11,    12,     0,    13,   163,
-      15,    16,    17,     0,     0,     0,    50,     0,     0,   164,
-       0,     0,     0,    51,    52,    20,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,     0,
-      66,    67,    68,    69,    70,    71,    72,     0,     0,    73,
-      74,     0,    75,    76,    77,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,     0,   224,   225,   226,   227,     0,
-     228,   229,   230,   231,   232,     1,     0,     0,   233,     0,
-     234,     2,    47,     0,     0,   311,     0,     0,     0,     0,
-       0,     5,     6,     7,     8,     9,    10,    11,    12,   293,
-      13,    14,    15,    16,    17,     1,     0,     0,     0,     0,
-       0,     2,    47,     0,     0,     0,     0,     0,     0,     0,
+      67,    68,    69,    70,     0,    71,    72,    73,     1,    74,
+       0,    75,    76,    77,     2,   162,     0,     0,     0,     0,
+       0,     0,     0,     0,     5,     6,     7,     8,     9,    10,
+      11,    12,     0,    13,   163,    15,    16,    17,     0,     0,
+       0,     0,     0,     0,   164,     0,     0,     0,     0,    88,
+       0,     0,    89,     0,     0,     0,     0,     0,     0,     0,
+       0,     1,     0,     0,    90,     0,     0,     2,     3,     0,
+       0,     0,    91,     4,     0,     0,   165,     5,     6,     7,
+       8,     9,    10,    11,    12,     1,    13,    14,    15,    16,
+      17,     2,     3,     0,    18,    19,     0,     4,     0,     0,
        0,     5,     6,     7,     8,     9,    10,    11,    12,     0,
-      13,    14,    15,    16,    17,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   267,   224,   225,   226,   227,     0,
-     228,   229,   230,   231,   232,     0,     0,     0,   233,     0,
-     234,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-       0,   224,   225,   226,   227,     0,   228,   229,   230,   231,
-     232,     0,     0,     0,   233,     0,   234,   217,   218,   219,
-     220,   221,   222,   223,     0,   224,   225,   226,   227,     0,
-     228,   229,   230,   231,   232,     0,     0,     0,   233,     0,
-     234,   218,   219,   220,   221,   222,   223,     0,   224,   225,
-     226,   227,     0,   228,   229,   230,   231,   232,     0,     0,
-       0,   233,     0,   234,   219,   220,   221,   222,   223,     0,
-     224,   225,   226,   227,     0,   228,   229,   230,   231,   232,
-       0,     0,     0,   233,     0,   234,   220,   221,   222,   223,
-       0,   224,   225,   226,   227,     0,   228,   229,   230,   231,
-     232,     0,     0,     0,   233,     0,   234,   221,   222,   223,
-       0,   224,   225,   226,   227,     0,   228,   229,   230,   231,
-     232,     0,     0,     0,   233,   223,   234,   224,   225,   226,
+      13,    14,    15,    16,    17,    86,     1,     0,    18,    19,
+       0,     0,    87,   116,     0,     1,     0,    20,   117,   202,
+       0,     0,   116,     0,     1,     0,     0,   117,     0,     0,
+       0,   116,     0,     0,     0,     0,   117,     0,     0,     0,
+       0,    20,     0,   264,     0,    86,    88,    88,     0,    89,
+      89,     0,   176,     0,     0,     0,    88,     0,     0,    89,
+       0,    90,    90,     0,     0,    88,     0,     0,    89,    91,
+      91,    90,    20,    92,   118,    86,     0,     0,     0,    91,
+      90,    20,   176,   192,     0,     0,    88,     0,    91,    89,
+      20,     0,   252,     0,     0,   223,     0,   224,   225,   226,
+     227,    90,   228,   229,   230,   231,   232,     0,     0,    91,
+     233,   234,     0,    92,     0,     0,    88,     0,     0,    89,
+       0,     0,     0,     0,     0,     0,     0,     0,     1,     0,
+       0,    90,     0,     0,     2,     3,     0,     0,     0,    91,
+       4,     0,     0,   165,     5,     6,     7,     8,     9,    10,
+      11,    12,     1,    13,    14,    15,    16,    17,     2,    47,
+       0,    18,    19,     0,     0,    48,    49,     0,     5,     6,
+       7,     8,     9,    10,    11,    12,     0,    13,   163,    15,
+      16,    17,     0,     0,     0,    50,     0,     0,   164,     0,
+       0,     0,    51,    52,    20,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
+      67,    68,    69,    70,     0,    71,    72,    73,     0,    74,
+       0,    75,    76,    77,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,     0,   224,   225,   226,   227,     0,   228,
+     229,   230,   231,   232,     1,     0,     0,   233,   234,     0,
+       2,    47,     0,     0,   311,     0,     0,     0,     0,     0,
+       5,     6,     7,     8,     9,    10,    11,    12,   293,    13,
+      14,    15,    16,    17,     1,     0,     0,     0,     0,     0,
+       2,    47,     0,     0,     0,     0,     0,     0,     0,     0,
+       5,     6,     7,     8,     9,    10,    11,    12,     0,    13,
+      14,    15,    16,    17,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   267,   224,   225,   226,   227,     0,   228,
+     229,   230,   231,   232,     0,     0,     0,   233,   234,   217,
+     218,   219,   220,   221,   222,   223,     0,   224,   225,   226,
      227,     0,   228,   229,   230,   231,   232,     0,     0,     0,
-     233,     0,   234
+     233,   234,   218,   219,   220,   221,   222,   223,     0,   224,
+     225,   226,   227,     0,   228,   229,   230,   231,   232,     0,
+       0,     0,   233,   234,   219,   220,   221,   222,   223,     0,
+     224,   225,   226,   227,     0,   228,   229,   230,   231,   232,
+       0,     0,     0,   233,   234,   220,   221,   222,   223,     0,
+     224,   225,   226,   227,     0,   228,   229,   230,   231,   232,
+       0,     0,     0,   233,   234,   226,   227,     0,   228,   229,
+     230,   231,   232,     0,     0,     0,   233,   234
 };
 
 static const yytype_int16 yycheck[] =
 {
        0,    99,     3,     3,     3,    30,     3,    39,   164,     3,
-      27,    27,    32,   142,    39,    68,   172,     5,    18,    19,
-      73,    39,    39,   121,    27,     0,    46,    27,     5,   127,
+      27,    27,    32,   142,    39,    27,   172,     5,    18,    19,
+      69,    39,    39,   121,    73,     0,    46,    27,     5,   127,
       96,   129,     5,     5,    35,    32,    42,   103,    39,    39,
       17,     0,     5,    18,    19,    17,    47,     5,     5,    46,
        5,    12,    42,     5,    39,     5,     5,    52,   124,    17,
       17,    25,    26,    53,    42,    17,    30,    17,    73,   198,
      199,   200,   201,    61,    99,    53,    70,    12,     5,    85,
-      97,    97,    12,   239,    61,    68,   242,    87,   244,    61,
-      70,    52,    92,   125,    71,    61,   121,    97,    61,    71,
-      68,   118,   127,   123,   129,    41,    61,   125,   125,   110,
-       5,    61,    61,    71,    71,   116,   116,   116,   118,    71,
-      40,    71,    52,    12,   125,   125,    73,   145,   314,   315,
-     316,    11,    70,   139,   140,   141,    12,   157,   138,    52,
-     125,    21,    22,    23,    24,   145,    67,   252,    69,   254,
-     168,   169,    52,    33,   154,    41,    42,    41,   256,    52,
-     157,   162,   162,   138,    70,   165,    70,   187,   168,   169,
-     188,   188,    41,     5,   174,   192,   176,    27,    12,   154,
-      41,    12,    32,    61,    62,    63,    12,   188,   188,    67,
-     208,    69,   192,    41,     5,     5,    46,    41,    41,    53,
-       4,    53,   202,   188,    53,    41,   212,   207,   208,   215,
+      97,    97,    12,   239,    61,    69,   242,    87,   244,    61,
+      69,    52,    92,   125,    71,    61,   121,    97,    61,    71,
+      70,   118,   127,   123,   129,    41,    61,   125,   125,   110,
+      12,    61,    61,    71,    71,   116,   116,   116,   118,    71,
+       5,    71,    52,    40,   125,   125,    73,   145,   314,   315,
+     316,    11,    52,   139,   140,   141,    12,   157,   138,    52,
+     125,    21,    22,    23,    24,   145,   252,    52,   254,    70,
+     168,   169,    70,    33,   154,    41,    42,    41,   256,    70,
+     157,   162,   162,   138,    41,   165,     5,   187,   168,   169,
+     188,   188,    67,    68,   174,   192,   176,    27,    12,   154,
+      12,    12,    32,    41,    41,     5,     5,   188,   188,    41,
+     208,    53,   192,    41,    53,    41,    46,    53,    41,    73,
+       4,    73,   202,   188,    73,    41,   212,   207,   208,   215,
      216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
      226,   227,   228,   229,   230,   231,   232,   202,    78,    41,
-      85,   256,   207,    73,    73,   252,   254,   254,    42,    41,
-      73,    41,    41,    41,    94,   212,    37,    97,    35,    -1,
+      41,   256,   207,    41,    85,   252,   254,   254,    42,    61,
+      62,    63,    37,   212,    94,    67,    68,    97,    35,    -1,
      250,   252,   252,   254,   254,    97,    -1,   257,   258,   125,
      266,   267,    -1,    29,   264,    -1,    -1,   252,    34,   254,
       -1,    -1,    38,   123,    -1,   250,   294,    -1,    44,    -1,
       -1,    85,   257,   258,    -1,    -1,    -1,    -1,    92,   264,
       -1,    -1,    -1,    -1,   294,   145,    -1,    -1,   102,    -1,
-      59,    60,    61,    62,    63,   311,    -1,   157,    67,    -1,
-      69,    -1,    -1,    -1,   118,   165,   166,    -1,   168,   169,
+      59,    60,    61,    62,    63,   311,    -1,   157,    67,    68,
+      -1,    -1,    -1,    -1,   118,   165,   166,    -1,   168,   169,
       -1,    -1,    -1,    -1,    90,    -1,   176,    -1,    -1,    -1,
       -1,    -1,     3,     4,     5,    -1,    -1,   187,   142,    10,
       11,    12,   192,    -1,    -1,   111,   112,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,   208,    30,
-      31,    32,    33,    34,    -1,    36,    37,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     5,    -1,    -1,    -1,    49,    56,
-      57,    12,    59,    60,    61,    62,    63,    -1,    -1,    60,
-      67,   241,    69,    -1,   198,   199,   200,   201,   164,   249,
-      71,    72,    73,    -1,    -1,    -1,   172,    -1,   212,    -1,
-      -1,    -1,    -1,    -1,    -1,    46,    -1,   183,    49,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      61,     3,     4,     5,    -1,    -1,    -1,    68,    10,    11,
-      12,   245,    73,    -1,   294,    -1,    18,    19,    20,    21,
+      31,    32,    33,    34,    -1,    36,    37,    -1,    -1,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    49,    54,
+      55,    56,    57,    -1,    59,    60,    61,    62,    63,    60,
+      -1,   241,    67,    68,   198,   199,   200,   201,   164,   249,
+      71,    72,    73,    -1,    -1,    -1,   172,    -1,   212,    50,
+      51,    52,    -1,    54,    55,    56,    57,   183,    59,    60,
+      61,    62,    63,    -1,    -1,    -1,    67,    68,    -1,    -1,
+      -1,     3,     4,     5,    -1,    -1,    -1,    -1,    10,    11,
+      12,   245,    -1,    -1,   294,    -1,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    -1,    30,    31,
       32,    33,    34,    -1,    36,    37,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   239,     3,     4,   242,    49,   244,     3,
@@ -1208,66 +1092,64 @@ static const yytype_int16 yycheck[] =
       30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,
       -1,    -1,    42,    43,    -1,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
-      60,    61,    62,    63,    64,    65,    -1,    -1,    68,    69,
-       5,    71,    72,    73,    -1,    -1,    11,    12,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    21,    22,    23,    24,
-      25,    26,    27,    28,    -1,    30,    31,    32,    33,    34,
-      -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
-      -1,    46,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     5,    -1,    -1,    61,    -1,    -1,    11,
-      12,    -1,    -1,    68,    -1,    17,    -1,    -1,    73,    21,
-      22,    23,    24,    25,    26,    27,    28,     5,    30,    31,
-      32,    33,    34,    11,    12,    -1,    38,    39,    -1,    17,
-      -1,    -1,    -1,    21,    22,    23,    24,    25,    26,    27,
-      28,    -1,    30,    31,    32,    33,    34,     5,     5,    -1,
-      38,    39,    -1,    -1,    12,    12,     5,     5,    -1,    71,
-      17,    73,    -1,    12,    12,     5,    -1,    -1,    17,    17,
-      -1,    -1,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    71,    -1,    73,    -1,    -1,    46,    46,
-      -1,    49,    49,    -1,    -1,    -1,    -1,    46,    46,    -1,
-      49,    49,    -1,    61,    61,    -1,    46,    -1,    -1,    49,
-      68,    68,    61,    61,    71,    73,    73,    -1,    -1,    68,
-      68,    61,    71,    71,    73,    73,    -1,    -1,    68,     5,
-      -1,    -1,    -1,    73,    -1,    11,    12,    -1,    -1,    -1,
-      -1,    17,    -1,    -1,    -1,    21,    22,    23,    24,    25,
-      26,    27,    28,     5,    30,    31,    32,    33,    34,    11,
-      12,    -1,    38,    39,    -1,    -1,    15,    16,    -1,    21,
-      22,    23,    24,    25,    26,    27,    28,    -1,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    35,    -1,    -1,    41,
-      -1,    -1,    -1,    42,    43,    71,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
-      59,    60,    61,    62,    63,    64,    65,    -1,    -1,    68,
-      69,    -1,    71,    72,    73,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    -1,    54,    55,    56,    57,    -1,
-      59,    60,    61,    62,    63,     5,    -1,    -1,    67,    -1,
-      69,    11,    12,    -1,    -1,    74,    -1,    -1,    -1,    -1,
-      -1,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,     5,    -1,    -1,    -1,    -1,
-      -1,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      60,    61,    62,    63,    -1,    65,    66,    67,     5,    69,
+      -1,    71,    72,    73,    11,    12,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
+      27,    28,    -1,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    46,
+      -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     5,    -1,    -1,    61,    -1,    -1,    11,    12,    -1,
+      -1,    -1,    69,    17,    -1,    -1,    73,    21,    22,    23,
+      24,    25,    26,    27,    28,     5,    30,    31,    32,    33,
+      34,    11,    12,    -1,    38,    39,    -1,    17,    -1,    -1,
       -1,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
-      30,    31,    32,    33,    34,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
-      59,    60,    61,    62,    63,    -1,    -1,    -1,    67,    -1,
-      69,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      -1,    54,    55,    56,    57,    -1,    59,    60,    61,    62,
-      63,    -1,    -1,    -1,    67,    -1,    69,    46,    47,    48,
-      49,    50,    51,    52,    -1,    54,    55,    56,    57,    -1,
-      59,    60,    61,    62,    63,    -1,    -1,    -1,    67,    -1,
-      69,    47,    48,    49,    50,    51,    52,    -1,    54,    55,
-      56,    57,    -1,    59,    60,    61,    62,    63,    -1,    -1,
-      -1,    67,    -1,    69,    48,    49,    50,    51,    52,    -1,
-      54,    55,    56,    57,    -1,    59,    60,    61,    62,    63,
-      -1,    -1,    -1,    67,    -1,    69,    49,    50,    51,    52,
-      -1,    54,    55,    56,    57,    -1,    59,    60,    61,    62,
-      63,    -1,    -1,    -1,    67,    -1,    69,    50,    51,    52,
-      -1,    54,    55,    56,    57,    -1,    59,    60,    61,    62,
-      63,    -1,    -1,    -1,    67,    52,    69,    54,    55,    56,
+      30,    31,    32,    33,    34,     5,     5,    -1,    38,    39,
+      -1,    -1,    12,    12,    -1,     5,    -1,    71,    17,    73,
+      -1,    -1,    12,    -1,     5,    -1,    -1,    17,    -1,    -1,
+      -1,    12,    -1,    -1,    -1,    -1,    17,    -1,    -1,    -1,
+      -1,    71,    -1,    73,    -1,     5,    46,    46,    -1,    49,
+      49,    -1,    12,    -1,    -1,    -1,    46,    -1,    -1,    49,
+      -1,    61,    61,    -1,    -1,    46,    -1,    -1,    49,    69,
+      69,    61,    71,    73,    73,     5,    -1,    -1,    -1,    69,
+      61,    71,    12,    73,    -1,    -1,    46,    -1,    69,    49,
+      71,    -1,    73,    -1,    -1,    52,    -1,    54,    55,    56,
+      57,    61,    59,    60,    61,    62,    63,    -1,    -1,    69,
+      67,    68,    -1,    73,    -1,    -1,    46,    -1,    -1,    49,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,    -1,
+      -1,    61,    -1,    -1,    11,    12,    -1,    -1,    -1,    69,
+      17,    -1,    -1,    73,    21,    22,    23,    24,    25,    26,
+      27,    28,     5,    30,    31,    32,    33,    34,    11,    12,
+      -1,    38,    39,    -1,    -1,    15,    16,    -1,    21,    22,
+      23,    24,    25,    26,    27,    28,    -1,    30,    31,    32,
+      33,    34,    -1,    -1,    -1,    35,    -1,    -1,    41,    -1,
+      -1,    -1,    42,    43,    71,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
+      60,    61,    62,    63,    -1,    65,    66,    67,    -1,    69,
+      -1,    71,    72,    73,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    -1,    54,    55,    56,    57,    -1,    59,
+      60,    61,    62,    63,     5,    -1,    -1,    67,    68,    -1,
+      11,    12,    -1,    -1,    74,    -1,    -1,    -1,    -1,    -1,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,     5,    -1,    -1,    -1,    -1,    -1,
+      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      21,    22,    23,    24,    25,    26,    27,    28,    -1,    30,
+      31,    32,    33,    34,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
+      60,    61,    62,    63,    -1,    -1,    -1,    67,    68,    46,
+      47,    48,    49,    50,    51,    52,    -1,    54,    55,    56,
       57,    -1,    59,    60,    61,    62,    63,    -1,    -1,    -1,
-      67,    -1,    69
+      67,    68,    47,    48,    49,    50,    51,    52,    -1,    54,
+      55,    56,    57,    -1,    59,    60,    61,    62,    63,    -1,
+      -1,    -1,    67,    68,    48,    49,    50,    51,    52,    -1,
+      54,    55,    56,    57,    -1,    59,    60,    61,    62,    63,
+      -1,    -1,    -1,    67,    68,    49,    50,    51,    52,    -1,
+      54,    55,    56,    57,    -1,    59,    60,    61,    62,    63,
+      -1,    -1,    -1,    67,    68,    56,    57,    -1,    59,    60,
+      61,    62,    63,    -1,    -1,    -1,    67,    68
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
        0,     5,    11,    12,    17,    21,    22,    23,    24,    25,
@@ -1277,15 +1159,15 @@ static const yytype_uint8 yystos[] =
      108,    12,    52,    82,    86,    89,    90,    12,    15,    16,
       35,    42,    43,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    59,    60,    61,    62,
-      63,    64,    65,    68,    69,    71,    72,    73,    90,   104,
+      63,    65,    66,    67,    69,    71,    72,    73,    90,   104,
       27,    77,    77,     5,     0,    52,     5,    12,    46,    49,
-      61,    68,    73,    78,    90,    91,    95,   102,   103,   106,
+      61,    69,    73,    78,    90,    91,    95,   102,   103,   106,
      107,    98,    73,    95,     5,    82,    84,    91,    12,    98,
       12,    86,   101,    22,    99,    98,    12,    17,    73,    85,
       86,    87,    88,    90,    95,   102,   105,   106,   111,   112,
        3,     4,    10,    18,    19,    20,    36,    37,    49,    60,
-      71,    72,    73,    92,    93,   104,   113,    98,    82,    68,
-      68,    70,    61,    41,    40,    92,    77,    90,    96,    98,
+      71,    72,    73,    92,    93,   104,   113,    98,    82,    69,
+      69,    61,    70,    41,    40,    92,    77,    90,    96,    98,
        3,    70,    12,    31,    41,    73,    90,    94,   102,   104,
      105,     5,    61,    91,    12,    78,    12,   107,    95,   103,
       78,    12,    12,    86,    98,    98,    86,    90,   102,    95,
@@ -1293,7 +1175,7 @@ static const yytype_uint8 yystos[] =
       52,    52,    73,    77,   113,   113,   113,    49,   104,   108,
      113,   114,    42,    53,   105,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    54,    55,    56,    57,    59,    60,
-      61,    62,    63,    67,    69,    70,    70,    77,    53,    61,
+      61,    62,    63,    67,    68,    70,    70,    77,    53,    61,
       70,    90,    41,    96,    41,    42,   105,    41,    96,    90,
       12,    98,    73,    87,   102,   109,   110,    12,    12,   108,
      108,   108,   108,    77,    73,    77,    41,    53,    41,    93,
@@ -1305,96 +1187,92 @@ static const yytype_uint8 yystos[] =
      114,   114,    41,    41,    41
 };
 
-#define yyerrok		(yyerrstatus = 0)
-#define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
-#define YYEOF		0
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    75,    76,    77,    77,    77,    78,    78,    79,    79,
+      79,    79,    79,    80,    80,    81,    81,    81,    81,    81,
+      81,    81,    81,    81,    81,    81,    81,    81,    81,    81,
+      81,    81,    81,    81,    81,    81,    81,    81,    81,    81,
+      81,    81,    81,    81,    81,    81,    81,    81,    82,    83,
+      83,    83,    83,    84,    84,    84,    85,    85,    86,    86,
+      86,    86,    87,    87,    88,    88,    89,    89,    90,    90,
+      90,    90,    91,    92,    92,    93,    93,    93,    93,    93,
+      94,    94,    94,    94,    94,    95,    95,    95,    96,    96,
+      97,    97,    97,    98,    98,    99,    99,    99,    99,    99,
+      99,   100,   100,   101,   101,   101,   101,   101,   101,   101,
+     102,   102,   102,   102,   102,   103,   103,   104,   104,   104,
+     104,   104,   104,   104,   104,   104,   104,   104,   104,   105,
+     105,   105,   106,   106,   106,   106,   107,   107,   107,   107,
+     107,   108,   108,   109,   109,   110,   110,   110,   110,   111,
+     111,   111,   111,   111,   112,   112,   112,   112,   112,   113,
+     114,   114,   114,   114,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113
+};
 
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     1,     1,     1,     0,     2,     2,     3,
+       3,     2,     2,     2,     4,     2,     2,     4,     4,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     3,     2,     3,     3,     2,     2,
+       1,     3,     2,     1,     4,     2,     1,     2,     2,     1,
+       2,     1,     1,     1,     1,     2,     2,     1,     2,     3,
+       2,     3,     4,     1,     3,     1,     2,     2,     4,     1,
+       1,     2,     3,     4,     3,     4,     4,     3,     0,     1,
+       1,     1,     1,     1,     2,     1,     1,     1,     1,     1,
+       1,     1,     2,     1,     1,     1,     2,     1,     1,     1,
+       2,     1,     1,     3,     4,     2,     3,     2,     1,     3,
+       2,     2,     1,     3,     2,     3,     2,     4,     3,     1,
+       2,     1,     3,     2,     2,     1,     1,     2,     1,     4,
+       2,     1,     2,     2,     1,     3,     2,     2,     1,     2,
+       1,     1,     4,     4,     4,     2,     2,     2,     2,     3,
+       1,     3,     2,     4,     2,     2,     2,     4,     7,     7,
+       7,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       5,     1,     1,     4,     1,     1
+};
 
 
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
+#define YYEMPTY         (-2)
+#define YYEOF           0
+
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-#define YYFAIL		goto yyerrlab
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
+#define YYBACKUP(Token, Value)                                  \
+do                                                              \
+  if (yychar == YYEMPTY)                                        \
+    {                                                           \
+      yychar = (Token);                                         \
+      yylval = (Value);                                         \
+      YYPOPSTACK (yylen);                                       \
+      yystate = *yyssp;                                         \
+      goto yybackup;                                            \
+    }                                                           \
+  else                                                          \
+    {                                                           \
       yyerror (state, YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
-while (YYID (0))
-
-
-#define YYTERROR	1
-#define YYERRCODE	256
-
+      YYERROR;                                                  \
+    }                                                           \
+while (0)
+
+/* Error token number */
+#define YYTERROR        1
+#define YYERRCODE       256
 
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))                                                    \
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (YYID (0))
-#endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-	      (Loc).first_line, (Loc).first_column,	\
-	      (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
 
 
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval, state)
-#endif
-
 /* Enable debugging if requested.  */
 #if YYDEBUG
 
@@ -1403,56 +1281,47 @@ while (YYID (0))
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-do {									  \
-  if (yydebug)								  \
-    {									  \
-      YYFPRINTF (stderr, "%s ", Title);					  \
-      yy_symbol_print (stderr,						  \
-		  Type, Value, state); \
-      YYFPRINTF (stderr, "\n");						  \
-    }									  \
-} while (YYID (0))
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
+} while (0)
 
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct cpname_state *state)
-#else
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Type, Value, state); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT.  |
+`----------------------------------------*/
+
 static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep, state)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-    struct cpname_state *state;
-#endif
+yy_symbol_value_print (FILE *yyoutput, int yytype, cp_name_parser_YYSTYPE const * const yyvaluep, struct cpname_state *state)
 {
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
+  YYUSE (state);
   if (!yyvaluep)
     return;
-  YYUSE (state);
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YYUSE (yytype);
 }
 
 
@@ -1460,23 +1329,11 @@ yy_symbol_value_print (yyoutput, yytype,
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct cpname_state *state)
-#else
 static void
-yy_symbol_print (yyoutput, yytype, yyvaluep, state)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-    struct cpname_state *state;
-#endif
+yy_symbol_print (FILE *yyoutput, int yytype, cp_name_parser_YYSTYPE const * const yyvaluep, struct cpname_state *state)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyoutput, "%s %s (",
+             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
   yy_symbol_value_print (yyoutput, yytype, yyvaluep, state);
   YYFPRINTF (yyoutput, ")");
@@ -1487,16 +1344,8 @@ yy_symbol_print (yyoutput, yytype, yyval
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1507,50 +1356,42 @@ yy_stack_print (yybottom, yytop)
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top)                            \
+do {                                                            \
+  if (yydebug)                                                  \
+    yy_stack_print ((Bottom), (Top));                           \
+} while (0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct cpname_state *state)
-#else
 static void
-yy_reduce_print (yyvsp, yyrule, state)
-    YYSTYPE *yyvsp;
-    int yyrule;
-    struct cpname_state *state;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, cp_name_parser_YYSTYPE *yyvsp, int yyrule, struct cpname_state *state)
 {
+  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned long int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
+             yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       		       , state);
+      yy_symbol_print (stderr,
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                                              , state);
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, Rule, state); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print (yyssp, yyvsp, Rule, state); \
+} while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -1564,7 +1405,7 @@ int yydebug;
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1579,7 +1420,6 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
 
 #if YYERROR_VERBOSE
 
@@ -1588,15 +1428,8 @@ int yydebug;
 #   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static YYSIZE_T
 yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
 {
   YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
@@ -1612,16 +1445,8 @@ yystrlen (yystr)
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static char *
 yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
 {
   char *yyd = yydest;
   const char *yys = yysrc;
@@ -1651,27 +1476,27 @@ yytnamerr (char *yyres, const char *yyst
       char const *yyp = yystr;
 
       for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
+        switch (*++yyp)
+          {
+          case '\'':
+          case ',':
+            goto do_not_strip_quotes;
+
+          case '\\':
+            if (*++yyp != '\\')
+              goto do_not_strip_quotes;
+            /* Fall through.  */
+          default:
+            if (yyres)
+              yyres[yyn] = *yyp;
+            yyn++;
+            break;
+
+          case '"':
+            if (yyres)
+              yyres[yyn] = '\0';
+            return yyn;
+          }
     do_not_strip_quotes: ;
     }
 
@@ -1682,199 +1507,179 @@ yytnamerr (char *yyres, const char *yyst
 }
 # endif
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
 {
-  int yyn = yypact[yystate];
-
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = YY_NULLPTRPTR;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
     {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                {
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]);
+                  if (! (yysize <= yysize1
+                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                    return 2;
+                  yysize = yysize1;
+                }
+              }
+        }
+    }
 
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
 
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
+  {
+    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+      return 2;
+    yysize = yysize1;
+  }
 
-      if (yyresult)
-	{
-	  /* Avoid sprintf, as that infringes on the user's name space.
-	     Don't have undefined behavior even if the translation
-	     produced a string with the wrong number of "%s"s.  */
-	  char *yyp = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
     }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct cpname_state *state)
-#else
 static void
-yydestruct (yymsg, yytype, yyvaluep, state)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-    struct cpname_state *state;
-#endif
+yydestruct (const char *yymsg, int yytype, cp_name_parser_YYSTYPE *yyvaluep, struct cpname_state *state)
 {
   YYUSE (yyvaluep);
   YYUSE (state);
-
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
-/* Prevent warnings from -Wmissing-prototypes.  */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (struct cpname_state *state);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
 
 
 
-/*-------------------------.
-| yyparse or yypush_parse.  |
-`-------------------------*/
+/*----------.
+| yyparse.  |
+`----------*/
 
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 int
 yyparse (struct cpname_state *state)
-#else
-int
-yyparse (state)
-    struct cpname_state *state;
-#endif
-#endif
 {
 /* The lookahead symbol.  */
 int yychar;
 
+
 /* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
+/* Default value used for initialization, for pacifying older GCCs
+   or non-GCC compilers.  */
+YY_INITIAL_VALUE (static cp_name_parser_YYSTYPE yyval_default;)
+cp_name_parser_YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
 
     /* Number of syntax errors so far.  */
     int yynerrs;
@@ -1884,10 +1689,10 @@ YYSTYPE yylval;
     int yyerrstatus;
 
     /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
+       'yyss': related to states.
+       'yyvs': related to semantic values.
 
-       Refer to the stacks thru separate pointers, to allow yyoverflow
+       Refer to the stacks through separate pointers, to allow yyoverflow
        to xreallocate them elsewhere.  */
 
     /* The state stack.  */
@@ -1896,19 +1701,19 @@ YYSTYPE yylval;
     yytype_int16 *yyssp;
 
     /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
+    cp_name_parser_YYSTYPE yyvsa[YYINITDEPTH];
+    cp_name_parser_YYSTYPE *yyvs;
+    cp_name_parser_YYSTYPE *yyvsp;
 
     YYSIZE_T yystacksize;
 
   int yyn;
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  int yytoken = 0;
   /* The variables used to return semantic value and location from the
      action routines.  */
-  YYSTYPE yyval;
+  cp_name_parser_YYSTYPE yyval;
 
 #if YYERROR_VERBOSE
   /* Buffer for error messages, and its allocated size.  */
@@ -1923,9 +1728,8 @@ YYSTYPE yylval;
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
   yystacksize = YYINITDEPTH;
 
   YYDPRINTF ((stderr, "Starting parse\n"));
@@ -1934,14 +1738,6 @@ YYSTYPE yylval;
   yyerrstatus = 0;
   yynerrs = 0;
   yychar = YYEMPTY; /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-  yyssp = yyss;
-  yyvsp = yyvs;
-
   goto yysetstate;
 
 /*------------------------------------------------------------.
@@ -1962,23 +1758,23 @@ YYSTYPE yylval;
 
 #ifdef yyoverflow
       {
-	/* Give user a chance to xreallocate the stack.  Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
-
-	/* Each stack pointer address is followed by the size of the
-	   data in use in that stack, in bytes.  This used to be a
-	   conditional around just the two extra args, but that might
-	   be undefined if yyoverflow is a macro.  */
-	yyoverflow (YY_("memory exhausted"),
-		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-		    &yystacksize);
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        cp_name_parser_YYSTYPE *yyvs1 = yyvs;
+        yytype_int16 *yyss1 = yyss;
+
+        /* Each stack pointer address is followed by the size of the
+           data in use in that stack, in bytes.  This used to be a
+           conditional around just the two extra args, but that might
+           be undefined if yyoverflow is a macro.  */
+        yyoverflow (YY_("memory exhausted"),
+                    &yyss1, yysize * sizeof (*yyssp),
+                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yystacksize);
 
-	yyss = yyss1;
-	yyvs = yyvs1;
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
@@ -1986,22 +1782,22 @@ YYSTYPE yylval;
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
+        goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-	yystacksize = YYMAXDEPTH;
+        yystacksize = YYMAXDEPTH;
 
       {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss_alloc, yyss);
-	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+        yytype_int16 *yyss1 = yyss;
+        union cp_name_parser_yyalloc *yyptr =
+          (union cp_name_parser_yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+        if (! yyptr)
+          goto yyexhaustedlab;
+        YYSTACK_RELOCATE (yyss_alloc, yyss);
+        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
+        if (yyss1 != yyssa)
+          YYSTACK_FREE (yyss1);
       }
 # endif
 #endif /* no yyoverflow */
@@ -2010,10 +1806,10 @@ YYSTYPE yylval;
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+                  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -2033,7 +1829,7 @@ yybackup:
 
   /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
   /* Not known => get a lookahead token if don't already have one.  */
@@ -2042,7 +1838,7 @@ yybackup:
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      yychar = yylex (&yylval, state);
     }
 
   if (yychar <= YYEOF)
@@ -2064,8 +1860,8 @@ yybackup:
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-	goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
@@ -2082,7 +1878,9 @@ yybackup:
   yychar = YYEMPTY;
 
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
   goto yynewstate;
 
@@ -2105,7 +1903,7 @@ yyreduce:
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
+     '$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -2119,1416 +1917,1260 @@ yyreduce:
   switch (yyn)
     {
         case 2:
+#line 349 "cp-name-parser.y" /* yacc.c:1646  */
+    {
+			  state->global_result = (yyvsp[0].comp);
 
-/* Line 1455 of yacc.c  */
-#line 349 "cp-name-parser.y"
-    { state->global_result = (yyvsp[(1) - (1)].comp); }
+			  /* Avoid warning about "yynerrs" being unused.  */
+			  (void) yynerrs;
+			}
+#line 1929 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 6:
-
-/* Line 1455 of yacc.c  */
-#line 361 "cp-name-parser.y"
+#line 366 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = NULL; }
+#line 1935 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 7:
-
-/* Line 1455 of yacc.c  */
-#line 363 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].comp); }
+#line 368 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[0].comp); }
+#line 1941 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 8:
-
-/* Line 1455 of yacc.c  */
-#line 370 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].nested).comp;
-			  *(yyvsp[(2) - (2)].nested).last = (yyvsp[(1) - (2)].comp);
+#line 375 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[0].nested).comp;
+			  *(yyvsp[0].nested).last = (yyvsp[-1].comp);
 			}
+#line 1949 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 9:
-
-/* Line 1455 of yacc.c  */
-#line 379 "cp-name-parser.y"
+#line 384 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME,
-					  (yyvsp[(1) - (3)].comp), (yyvsp[(2) - (3)].nested).comp);
-			  if ((yyvsp[(3) - (3)].comp))
+					  (yyvsp[-2].comp), (yyvsp[-1].nested).comp);
+			  if ((yyvsp[0].comp))
 			    (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME,
-						   (yyval.comp), (yyvsp[(3) - (3)].comp));
+						   (yyval.comp), (yyvsp[0].comp));
 			}
+#line 1960 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 10:
-
-/* Line 1455 of yacc.c  */
-#line 386 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[(1) - (3)].comp), (yyvsp[(2) - (3)].nested).comp);
-			  if ((yyvsp[(3) - (3)].comp)) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[(3) - (3)].comp)); }
+#line 391 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-2].comp), (yyvsp[-1].nested).comp);
+			  if ((yyvsp[0].comp)) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[0].comp)); }
+#line 1967 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 11:
-
-/* Line 1455 of yacc.c  */
-#line 390 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(1) - (2)].nested).comp;
-			  if ((yyvsp[(2) - (2)].comp)) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[(2) - (2)].comp)); }
+#line 395 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[-1].nested).comp;
+			  if ((yyvsp[0].comp)) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[0].comp)); }
+#line 1974 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 12:
-
-/* Line 1455 of yacc.c  */
-#line 393 "cp-name-parser.y"
-    { if ((yyvsp[(2) - (2)].abstract).last)
+#line 398 "cp-name-parser.y" /* yacc.c:1646  */
+    { if ((yyvsp[0].abstract).last)
 			    {
 			       /* First complete the abstract_declarator's type using
 				  the typespec from the conversion_op_name.  */
-			      *(yyvsp[(2) - (2)].abstract).last = *(yyvsp[(1) - (2)].nested).last;
+			      *(yyvsp[0].abstract).last = *(yyvsp[-1].nested).last;
 			      /* Then complete the conversion_op_name with the type.  */
-			      *(yyvsp[(1) - (2)].nested).last = (yyvsp[(2) - (2)].abstract).comp;
+			      *(yyvsp[-1].nested).last = (yyvsp[0].abstract).comp;
 			    }
 			  /* If we have an arglist, build a function type.  */
-			  if ((yyvsp[(2) - (2)].abstract).fn.comp)
-			    (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[(1) - (2)].nested).comp, (yyvsp[(2) - (2)].abstract).fn.comp);
+			  if ((yyvsp[0].abstract).fn.comp)
+			    (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-1].nested).comp, (yyvsp[0].abstract).fn.comp);
 			  else
-			    (yyval.comp) = (yyvsp[(1) - (2)].nested).comp;
-			  if ((yyvsp[(2) - (2)].abstract).start) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[(2) - (2)].abstract).start);
+			    (yyval.comp) = (yyvsp[-1].nested).comp;
+			  if ((yyvsp[0].abstract).start) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[0].abstract).start);
 			}
+#line 1994 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 13:
-
-/* Line 1455 of yacc.c  */
-#line 412 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp ((enum demangle_component_type) (yyvsp[(1) - (2)].lval), (yyvsp[(2) - (2)].comp), NULL); }
+#line 417 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp ((enum demangle_component_type) (yyvsp[-1].lval), (yyvsp[0].comp), NULL); }
+#line 2000 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 14:
-
-/* Line 1455 of yacc.c  */
-#line 414 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, (yyvsp[(2) - (4)].comp), (yyvsp[(4) - (4)].comp)); }
+#line 419 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 2006 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 15:
-
-/* Line 1455 of yacc.c  */
-#line 418 "cp-name-parser.y"
+#line 423 "cp-name-parser.y" /* yacc.c:1646  */
     {
 			  /* Match the whitespacing of cplus_demangle_operators.
 			     It would abort on unrecognized string otherwise.  */
 			  (yyval.comp) = state->make_operator ("new", 3);
 			}
+#line 2016 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 16:
-
-/* Line 1455 of yacc.c  */
-#line 424 "cp-name-parser.y"
+#line 429 "cp-name-parser.y" /* yacc.c:1646  */
     {
 			  /* Match the whitespacing of cplus_demangle_operators.
 			     It would abort on unrecognized string otherwise.  */
 			  (yyval.comp) = state->make_operator ("delete ", 1);
 			}
+#line 2026 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 17:
-
-/* Line 1455 of yacc.c  */
-#line 430 "cp-name-parser.y"
+#line 435 "cp-name-parser.y" /* yacc.c:1646  */
     {
 			  /* Match the whitespacing of cplus_demangle_operators.
 			     It would abort on unrecognized string otherwise.  */
 			  (yyval.comp) = state->make_operator ("new[]", 3);
 			}
+#line 2036 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 18:
-
-/* Line 1455 of yacc.c  */
-#line 436 "cp-name-parser.y"
+#line 441 "cp-name-parser.y" /* yacc.c:1646  */
     {
 			  /* Match the whitespacing of cplus_demangle_operators.
 			     It would abort on unrecognized string otherwise.  */
 			  (yyval.comp) = state->make_operator ("delete[] ", 1);
 			}
+#line 2046 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 19:
-
-/* Line 1455 of yacc.c  */
-#line 442 "cp-name-parser.y"
+#line 447 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("+", 2); }
+#line 2052 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 20:
-
-/* Line 1455 of yacc.c  */
-#line 444 "cp-name-parser.y"
+#line 449 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("-", 2); }
+#line 2058 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 21:
-
-/* Line 1455 of yacc.c  */
-#line 446 "cp-name-parser.y"
+#line 451 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("*", 2); }
+#line 2064 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 22:
-
-/* Line 1455 of yacc.c  */
-#line 448 "cp-name-parser.y"
+#line 453 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("/", 2); }
+#line 2070 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 23:
-
-/* Line 1455 of yacc.c  */
-#line 450 "cp-name-parser.y"
+#line 455 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("%", 2); }
+#line 2076 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 24:
-
-/* Line 1455 of yacc.c  */
-#line 452 "cp-name-parser.y"
+#line 457 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("^", 2); }
+#line 2082 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 25:
-
-/* Line 1455 of yacc.c  */
-#line 454 "cp-name-parser.y"
+#line 459 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("&", 2); }
+#line 2088 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 26:
-
-/* Line 1455 of yacc.c  */
-#line 456 "cp-name-parser.y"
+#line 461 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("|", 2); }
+#line 2094 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 27:
-
-/* Line 1455 of yacc.c  */
-#line 458 "cp-name-parser.y"
+#line 463 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("~", 1); }
+#line 2100 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 28:
-
-/* Line 1455 of yacc.c  */
-#line 460 "cp-name-parser.y"
+#line 465 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("!", 1); }
+#line 2106 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
-#line 462 "cp-name-parser.y"
+#line 467 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("=", 2); }
+#line 2112 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
-#line 464 "cp-name-parser.y"
+#line 469 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("<", 2); }
+#line 2118 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 31:
-
-/* Line 1455 of yacc.c  */
-#line 466 "cp-name-parser.y"
+#line 471 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator (">", 2); }
+#line 2124 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 32:
-
-/* Line 1455 of yacc.c  */
-#line 468 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ((yyvsp[(2) - (2)].opname), 2); }
+#line 473 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->make_operator ((yyvsp[0].opname), 2); }
+#line 2130 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 33:
-
-/* Line 1455 of yacc.c  */
-#line 470 "cp-name-parser.y"
+#line 475 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("<<", 2); }
+#line 2136 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 34:
-
-/* Line 1455 of yacc.c  */
-#line 472 "cp-name-parser.y"
+#line 477 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator (">>", 2); }
+#line 2142 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 35:
-
-/* Line 1455 of yacc.c  */
-#line 474 "cp-name-parser.y"
+#line 479 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("==", 2); }
+#line 2148 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
-#line 476 "cp-name-parser.y"
+#line 481 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("!=", 2); }
+#line 2154 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 37:
-
-/* Line 1455 of yacc.c  */
-#line 478 "cp-name-parser.y"
+#line 483 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("<=", 2); }
+#line 2160 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
-#line 480 "cp-name-parser.y"
+#line 485 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator (">=", 2); }
+#line 2166 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 39:
-
-/* Line 1455 of yacc.c  */
-#line 482 "cp-name-parser.y"
+#line 487 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("&&", 2); }
+#line 2172 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
-#line 484 "cp-name-parser.y"
+#line 489 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("||", 2); }
+#line 2178 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 41:
-
-/* Line 1455 of yacc.c  */
-#line 486 "cp-name-parser.y"
+#line 491 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("++", 1); }
+#line 2184 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
-#line 488 "cp-name-parser.y"
+#line 493 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("--", 1); }
+#line 2190 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 43:
-
-/* Line 1455 of yacc.c  */
-#line 490 "cp-name-parser.y"
+#line 495 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator (",", 2); }
+#line 2196 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 44:
-
-/* Line 1455 of yacc.c  */
-#line 492 "cp-name-parser.y"
+#line 497 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("->*", 2); }
+#line 2202 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 45:
-
-/* Line 1455 of yacc.c  */
-#line 494 "cp-name-parser.y"
+#line 499 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("->", 2); }
+#line 2208 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 46:
-
-/* Line 1455 of yacc.c  */
-#line 496 "cp-name-parser.y"
+#line 501 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("()", 2); }
+#line 2214 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 47:
-
-/* Line 1455 of yacc.c  */
-#line 498 "cp-name-parser.y"
+#line 503 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_operator ("[]", 2); }
+#line 2220 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 48:
-
-/* Line 1455 of yacc.c  */
-#line 506 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONVERSION, (yyvsp[(2) - (2)].comp), NULL); }
+#line 511 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONVERSION, (yyvsp[0].comp), NULL); }
+#line 2226 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 49:
-
-/* Line 1455 of yacc.c  */
-#line 511 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(1) - (2)].nested1).comp;
-			  d_right ((yyvsp[(1) - (2)].nested1).last) = (yyvsp[(2) - (2)].comp);
-			  (yyval.nested).last = &d_left ((yyvsp[(2) - (2)].comp));
+#line 516 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[-1].nested1).comp;
+			  d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_left ((yyvsp[0].comp));
 			}
+#line 2235 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 50:
-
-/* Line 1455 of yacc.c  */
-#line 516 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(1) - (1)].comp);
-			  (yyval.nested).last = &d_left ((yyvsp[(1) - (1)].comp));
+#line 521 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_left ((yyvsp[0].comp));
 			}
+#line 2243 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 51:
-
-/* Line 1455 of yacc.c  */
-#line 520 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(2) - (3)].nested1).comp;
-			  d_right ((yyvsp[(2) - (3)].nested1).last) = (yyvsp[(3) - (3)].comp);
-			  (yyval.nested).last = &d_left ((yyvsp[(3) - (3)].comp));
+#line 525 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[-1].nested1).comp;
+			  d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_left ((yyvsp[0].comp));
 			}
+#line 2252 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 52:
-
-/* Line 1455 of yacc.c  */
-#line 525 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(2) - (2)].comp);
-			  (yyval.nested).last = &d_left ((yyvsp[(2) - (2)].comp));
+#line 530 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_left ((yyvsp[0].comp));
 			}
+#line 2260 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 54:
-
-/* Line 1455 of yacc.c  */
-#line 534 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[(1) - (4)].comp), (yyvsp[(3) - (4)].nested).comp); }
+#line 539 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[-3].comp), (yyvsp[-1].nested).comp); }
+#line 2266 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 55:
-
-/* Line 1455 of yacc.c  */
-#line 536 "cp-name-parser.y"
-    { (yyval.comp) = state->make_dtor (gnu_v3_complete_object_dtor, (yyvsp[(2) - (2)].comp)); }
+#line 541 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->make_dtor (gnu_v3_complete_object_dtor, (yyvsp[0].comp)); }
+#line 2272 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 57:
-
-/* Line 1455 of yacc.c  */
-#line 549 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].comp); }
+#line 554 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[0].comp); }
+#line 2278 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 58:
-
-/* Line 1455 of yacc.c  */
-#line 555 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(1) - (2)].nested1).comp; d_right ((yyvsp[(1) - (2)].nested1).last) = (yyvsp[(2) - (2)].comp); }
+#line 560 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); }
+#line 2284 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 60:
-
-/* Line 1455 of yacc.c  */
-#line 558 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(1) - (2)].nested1).comp; d_right ((yyvsp[(1) - (2)].nested1).last) = (yyvsp[(2) - (2)].comp); }
+#line 563 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); }
+#line 2290 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 65:
-
-/* Line 1455 of yacc.c  */
-#line 568 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].comp); }
+#line 573 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[0].comp); }
+#line 2296 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 66:
-
-/* Line 1455 of yacc.c  */
-#line 572 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(1) - (2)].nested1).comp; d_right ((yyvsp[(1) - (2)].nested1).last) = (yyvsp[(2) - (2)].comp); }
+#line 577 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); }
+#line 2302 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 68:
-
-/* Line 1455 of yacc.c  */
-#line 577 "cp-name-parser.y"
-    { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[(1) - (2)].comp), NULL);
+#line 582 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL);
 			  (yyval.nested1).last = (yyval.nested1).comp;
 			}
+#line 2310 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 69:
-
-/* Line 1455 of yacc.c  */
-#line 581 "cp-name-parser.y"
-    { (yyval.nested1).comp = (yyvsp[(1) - (3)].nested1).comp;
-			  d_right ((yyvsp[(1) - (3)].nested1).last) = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[(2) - (3)].comp), NULL);
-			  (yyval.nested1).last = d_right ((yyvsp[(1) - (3)].nested1).last);
+#line 586 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested1).comp = (yyvsp[-2].nested1).comp;
+			  d_right ((yyvsp[-2].nested1).last) = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL);
+			  (yyval.nested1).last = d_right ((yyvsp[-2].nested1).last);
 			}
+#line 2319 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 70:
-
-/* Line 1455 of yacc.c  */
-#line 586 "cp-name-parser.y"
-    { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[(1) - (2)].comp), NULL);
+#line 591 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL);
 			  (yyval.nested1).last = (yyval.nested1).comp;
 			}
+#line 2327 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 71:
-
-/* Line 1455 of yacc.c  */
-#line 590 "cp-name-parser.y"
-    { (yyval.nested1).comp = (yyvsp[(1) - (3)].nested1).comp;
-			  d_right ((yyvsp[(1) - (3)].nested1).last) = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[(2) - (3)].comp), NULL);
-			  (yyval.nested1).last = d_right ((yyvsp[(1) - (3)].nested1).last);
+#line 595 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested1).comp = (yyvsp[-2].nested1).comp;
+			  d_right ((yyvsp[-2].nested1).last) = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL);
+			  (yyval.nested1).last = d_right ((yyvsp[-2].nested1).last);
 			}
+#line 2336 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 72:
-
-/* Line 1455 of yacc.c  */
-#line 599 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[(1) - (4)].comp), (yyvsp[(3) - (4)].nested).comp); }
+#line 604 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[-3].comp), (yyvsp[-1].nested).comp); }
+#line 2342 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 73:
-
-/* Line 1455 of yacc.c  */
-#line 603 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, (yyvsp[(1) - (1)].comp), NULL);
+#line 608 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, (yyvsp[0].comp), NULL);
 			(yyval.nested).last = &d_right ((yyval.nested).comp); }
+#line 2349 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 74:
-
-/* Line 1455 of yacc.c  */
-#line 606 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(1) - (3)].nested).comp;
-			  *(yyvsp[(1) - (3)].nested).last = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, (yyvsp[(3) - (3)].comp), NULL);
-			  (yyval.nested).last = &d_right (*(yyvsp[(1) - (3)].nested).last);
+#line 611 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[-2].nested).comp;
+			  *(yyvsp[-2].nested).last = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, (yyvsp[0].comp), NULL);
+			  (yyval.nested).last = &d_right (*(yyvsp[-2].nested).last);
 			}
+#line 2358 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 76:
-
-/* Line 1455 of yacc.c  */
-#line 618 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].abstract).comp;
-			  *(yyvsp[(2) - (2)].abstract).last = (yyvsp[(1) - (2)].comp);
+#line 623 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[0].abstract).comp;
+			  *(yyvsp[0].abstract).last = (yyvsp[-1].comp);
 			}
+#line 2366 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 77:
-
-/* Line 1455 of yacc.c  */
-#line 622 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[(2) - (2)].comp)); }
+#line 627 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[0].comp)); }
+#line 2372 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 78:
-
-/* Line 1455 of yacc.c  */
-#line 624 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[(3) - (4)].comp)); }
+#line 629 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[-1].comp)); }
+#line 2378 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 80:
-
-/* Line 1455 of yacc.c  */
-#line 629 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[(1) - (1)].comp), NULL);
+#line 634 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].comp), NULL);
 			  (yyval.nested).last = &d_right ((yyval.nested).comp);
 			}
+#line 2386 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 81:
-
-/* Line 1455 of yacc.c  */
-#line 633 "cp-name-parser.y"
-    { *(yyvsp[(2) - (2)].abstract).last = (yyvsp[(1) - (2)].comp);
-			  (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[(2) - (2)].abstract).comp, NULL);
+#line 638 "cp-name-parser.y" /* yacc.c:1646  */
+    { *(yyvsp[0].abstract).last = (yyvsp[-1].comp);
+			  (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].abstract).comp, NULL);
 			  (yyval.nested).last = &d_right ((yyval.nested).comp);
 			}
+#line 2395 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 82:
-
-/* Line 1455 of yacc.c  */
-#line 638 "cp-name-parser.y"
-    { *(yyvsp[(1) - (3)].nested).last = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[(3) - (3)].comp), NULL);
-			  (yyval.nested).comp = (yyvsp[(1) - (3)].nested).comp;
-			  (yyval.nested).last = &d_right (*(yyvsp[(1) - (3)].nested).last);
+#line 643 "cp-name-parser.y" /* yacc.c:1646  */
+    { *(yyvsp[-2].nested).last = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].comp), NULL);
+			  (yyval.nested).comp = (yyvsp[-2].nested).comp;
+			  (yyval.nested).last = &d_right (*(yyvsp[-2].nested).last);
 			}
+#line 2404 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 83:
-
-/* Line 1455 of yacc.c  */
-#line 643 "cp-name-parser.y"
-    { *(yyvsp[(4) - (4)].abstract).last = (yyvsp[(3) - (4)].comp);
-			  *(yyvsp[(1) - (4)].nested).last = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[(4) - (4)].abstract).comp, NULL);
-			  (yyval.nested).comp = (yyvsp[(1) - (4)].nested).comp;
-			  (yyval.nested).last = &d_right (*(yyvsp[(1) - (4)].nested).last);
+#line 648 "cp-name-parser.y" /* yacc.c:1646  */
+    { *(yyvsp[0].abstract).last = (yyvsp[-1].comp);
+			  *(yyvsp[-3].nested).last = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].abstract).comp, NULL);
+			  (yyval.nested).comp = (yyvsp[-3].nested).comp;
+			  (yyval.nested).last = &d_right (*(yyvsp[-3].nested).last);
 			}
+#line 2414 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 84:
-
-/* Line 1455 of yacc.c  */
-#line 649 "cp-name-parser.y"
-    { *(yyvsp[(1) - (3)].nested).last
+#line 654 "cp-name-parser.y" /* yacc.c:1646  */
+    { *(yyvsp[-2].nested).last
 			    = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST,
 					   state->make_builtin_type ("..."),
 					   NULL);
-			  (yyval.nested).comp = (yyvsp[(1) - (3)].nested).comp;
-			  (yyval.nested).last = &d_right (*(yyvsp[(1) - (3)].nested).last);
+			  (yyval.nested).comp = (yyvsp[-2].nested).comp;
+			  (yyval.nested).last = &d_right (*(yyvsp[-2].nested).last);
 			}
+#line 2426 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 85:
-
-/* Line 1455 of yacc.c  */
-#line 659 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, (yyvsp[(2) - (4)].nested).comp);
+#line 664 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, (yyvsp[-2].nested).comp);
 			  (yyval.nested).last = &d_left ((yyval.nested).comp);
-			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[(4) - (4)].lval), 1); }
+			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 1); }
+#line 2434 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 86:
-
-/* Line 1455 of yacc.c  */
-#line 663 "cp-name-parser.y"
+#line 668 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL);
 			  (yyval.nested).last = &d_left ((yyval.nested).comp);
-			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[(4) - (4)].lval), 1); }
+			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 1); }
+#line 2442 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 87:
-
-/* Line 1455 of yacc.c  */
-#line 667 "cp-name-parser.y"
+#line 672 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL);
 			  (yyval.nested).last = &d_left ((yyval.nested).comp);
-			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[(3) - (3)].lval), 1); }
+			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 1); }
+#line 2450 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 88:
-
-/* Line 1455 of yacc.c  */
-#line 674 "cp-name-parser.y"
+#line 679 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = 0; }
+#line 2456 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 90:
-
-/* Line 1455 of yacc.c  */
-#line 679 "cp-name-parser.y"
+#line 684 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = QUAL_RESTRICT; }
+#line 2462 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 91:
-
-/* Line 1455 of yacc.c  */
-#line 681 "cp-name-parser.y"
+#line 686 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = QUAL_VOLATILE; }
+#line 2468 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 92:
-
-/* Line 1455 of yacc.c  */
-#line 683 "cp-name-parser.y"
+#line 688 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = QUAL_CONST; }
+#line 2474 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 94:
-
-/* Line 1455 of yacc.c  */
-#line 688 "cp-name-parser.y"
-    { (yyval.lval) = (yyvsp[(1) - (2)].lval) | (yyvsp[(2) - (2)].lval); }
+#line 693 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[-1].lval) | (yyvsp[0].lval); }
+#line 2480 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 95:
-
-/* Line 1455 of yacc.c  */
-#line 695 "cp-name-parser.y"
+#line 700 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = 0; }
+#line 2486 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 96:
-
-/* Line 1455 of yacc.c  */
-#line 697 "cp-name-parser.y"
+#line 702 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = INT_SIGNED; }
+#line 2492 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 97:
-
-/* Line 1455 of yacc.c  */
-#line 699 "cp-name-parser.y"
+#line 704 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = INT_UNSIGNED; }
+#line 2498 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 98:
-
-/* Line 1455 of yacc.c  */
-#line 701 "cp-name-parser.y"
+#line 706 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = INT_CHAR; }
+#line 2504 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 99:
-
-/* Line 1455 of yacc.c  */
-#line 703 "cp-name-parser.y"
+#line 708 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = INT_LONG; }
+#line 2510 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 100:
-
-/* Line 1455 of yacc.c  */
-#line 705 "cp-name-parser.y"
+#line 710 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.lval) = INT_SHORT; }
+#line 2516 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 102:
-
-/* Line 1455 of yacc.c  */
-#line 710 "cp-name-parser.y"
-    { (yyval.lval) = (yyvsp[(1) - (2)].lval) | (yyvsp[(2) - (2)].lval); if ((yyvsp[(1) - (2)].lval) & (yyvsp[(2) - (2)].lval) & INT_LONG) (yyval.lval) = (yyvsp[(1) - (2)].lval) | INT_LLONG; }
+#line 715 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.lval) = (yyvsp[-1].lval) | (yyvsp[0].lval); if ((yyvsp[-1].lval) & (yyvsp[0].lval) & INT_LONG) (yyval.lval) = (yyvsp[-1].lval) | INT_LLONG; }
+#line 2522 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 103:
-
-/* Line 1455 of yacc.c  */
-#line 714 "cp-name-parser.y"
-    { (yyval.comp) = state->d_int_type ((yyvsp[(1) - (1)].lval)); }
+#line 719 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_int_type ((yyvsp[0].lval)); }
+#line 2528 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 104:
-
-/* Line 1455 of yacc.c  */
-#line 716 "cp-name-parser.y"
+#line 721 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_builtin_type ("float"); }
+#line 2534 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 105:
-
-/* Line 1455 of yacc.c  */
-#line 718 "cp-name-parser.y"
+#line 723 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_builtin_type ("double"); }
+#line 2540 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 106:
-
-/* Line 1455 of yacc.c  */
-#line 720 "cp-name-parser.y"
+#line 725 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_builtin_type ("long double"); }
+#line 2546 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 107:
-
-/* Line 1455 of yacc.c  */
-#line 722 "cp-name-parser.y"
+#line 727 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_builtin_type ("bool"); }
+#line 2552 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 108:
-
-/* Line 1455 of yacc.c  */
-#line 724 "cp-name-parser.y"
+#line 729 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_builtin_type ("wchar_t"); }
+#line 2558 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 109:
-
-/* Line 1455 of yacc.c  */
-#line 726 "cp-name-parser.y"
+#line 731 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->make_builtin_type ("void"); }
+#line 2564 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 110:
-
-/* Line 1455 of yacc.c  */
-#line 730 "cp-name-parser.y"
+#line 735 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_POINTER, NULL, NULL);
 			  (yyval.nested).last = &d_left ((yyval.nested).comp);
-			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[(2) - (2)].lval), 0); }
+			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 0); }
+#line 2572 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 111:
-
-/* Line 1455 of yacc.c  */
-#line 735 "cp-name-parser.y"
+#line 740 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_REFERENCE, NULL, NULL);
 			  (yyval.nested).last = &d_left ((yyval.nested).comp); }
+#line 2579 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 112:
-
-/* Line 1455 of yacc.c  */
-#line 738 "cp-name-parser.y"
+#line 743 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_RVALUE_REFERENCE, NULL, NULL);
 			  (yyval.nested).last = &d_left ((yyval.nested).comp); }
+#line 2586 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 113:
-
-/* Line 1455 of yacc.c  */
-#line 741 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_PTRMEM_TYPE, (yyvsp[(1) - (3)].nested1).comp, NULL);
+#line 746 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_PTRMEM_TYPE, (yyvsp[-2].nested1).comp, NULL);
 			  /* Convert the innermost DEMANGLE_COMPONENT_QUAL_NAME to a DEMANGLE_COMPONENT_NAME.  */
-			  *(yyvsp[(1) - (3)].nested1).last = *d_left ((yyvsp[(1) - (3)].nested1).last);
+			  *(yyvsp[-2].nested1).last = *d_left ((yyvsp[-2].nested1).last);
 			  (yyval.nested).last = &d_right ((yyval.nested).comp);
-			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[(3) - (3)].lval), 0); }
+			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 0); }
+#line 2596 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 114:
-
-/* Line 1455 of yacc.c  */
-#line 747 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_PTRMEM_TYPE, (yyvsp[(2) - (4)].nested1).comp, NULL);
+#line 752 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_PTRMEM_TYPE, (yyvsp[-2].nested1).comp, NULL);
 			  /* Convert the innermost DEMANGLE_COMPONENT_QUAL_NAME to a DEMANGLE_COMPONENT_NAME.  */
-			  *(yyvsp[(2) - (4)].nested1).last = *d_left ((yyvsp[(2) - (4)].nested1).last);
+			  *(yyvsp[-2].nested1).last = *d_left ((yyvsp[-2].nested1).last);
 			  (yyval.nested).last = &d_right ((yyval.nested).comp);
-			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[(4) - (4)].lval), 0); }
+			  (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 0); }
+#line 2606 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 115:
-
-/* Line 1455 of yacc.c  */
-#line 755 "cp-name-parser.y"
+#line 760 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, NULL, NULL); }
+#line 2612 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 116:
-
-/* Line 1455 of yacc.c  */
-#line 757 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, (yyvsp[(2) - (3)].comp), NULL); }
+#line 762 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, (yyvsp[-1].comp), NULL); }
+#line 2618 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 117:
-
-/* Line 1455 of yacc.c  */
-#line 771 "cp-name-parser.y"
-    { (yyval.comp) = state->d_qualify ((yyvsp[(1) - (2)].comp), (yyvsp[(2) - (2)].lval), 0); }
+#line 776 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); }
+#line 2624 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 119:
-
-/* Line 1455 of yacc.c  */
-#line 774 "cp-name-parser.y"
-    { (yyval.comp) = state->d_qualify ((yyvsp[(2) - (3)].comp), (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval), 0); }
+#line 779 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-2].lval) | (yyvsp[0].lval), 0); }
+#line 2630 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 120:
-
-/* Line 1455 of yacc.c  */
-#line 776 "cp-name-parser.y"
-    { (yyval.comp) = state->d_qualify ((yyvsp[(2) - (2)].comp), (yyvsp[(1) - (2)].lval), 0); }
+#line 781 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-1].lval), 0); }
+#line 2636 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 121:
-
-/* Line 1455 of yacc.c  */
-#line 779 "cp-name-parser.y"
-    { (yyval.comp) = state->d_qualify ((yyvsp[(1) - (2)].comp), (yyvsp[(2) - (2)].lval), 0); }
+#line 784 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); }
+#line 2642 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 123:
-
-/* Line 1455 of yacc.c  */
-#line 782 "cp-name-parser.y"
-    { (yyval.comp) = state->d_qualify ((yyvsp[(2) - (3)].comp), (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval), 0); }
+#line 787 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-2].lval) | (yyvsp[0].lval), 0); }
+#line 2648 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 124:
-
-/* Line 1455 of yacc.c  */
-#line 784 "cp-name-parser.y"
-    { (yyval.comp) = state->d_qualify ((yyvsp[(2) - (2)].comp), (yyvsp[(1) - (2)].lval), 0); }
+#line 789 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-1].lval), 0); }
+#line 2654 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 125:
-
-/* Line 1455 of yacc.c  */
-#line 787 "cp-name-parser.y"
-    { (yyval.comp) = state->d_qualify ((yyvsp[(2) - (3)].comp), (yyvsp[(3) - (3)].lval), 0); }
+#line 792 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); }
+#line 2660 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 126:
-
-/* Line 1455 of yacc.c  */
-#line 789 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].comp); }
+#line 794 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[0].comp); }
+#line 2666 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 127:
-
-/* Line 1455 of yacc.c  */
-#line 791 "cp-name-parser.y"
-    { (yyval.comp) = state->d_qualify ((yyvsp[(3) - (4)].comp), (yyvsp[(1) - (4)].lval) | (yyvsp[(4) - (4)].lval), 0); }
+#line 796 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-3].lval) | (yyvsp[0].lval), 0); }
+#line 2672 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 128:
-
-/* Line 1455 of yacc.c  */
-#line 793 "cp-name-parser.y"
-    { (yyval.comp) = state->d_qualify ((yyvsp[(3) - (3)].comp), (yyvsp[(1) - (3)].lval), 0); }
+#line 798 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-2].lval), 0); }
+#line 2678 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 129:
-
-/* Line 1455 of yacc.c  */
-#line 798 "cp-name-parser.y"
-    { (yyval.abstract).comp = (yyvsp[(1) - (1)].nested).comp; (yyval.abstract).last = (yyvsp[(1) - (1)].nested).last;
+#line 803 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.abstract).comp = (yyvsp[0].nested).comp; (yyval.abstract).last = (yyvsp[0].nested).last;
 			  (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; }
+#line 2685 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 130:
-
-/* Line 1455 of yacc.c  */
-#line 801 "cp-name-parser.y"
-    { (yyval.abstract) = (yyvsp[(2) - (2)].abstract); (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL;
-			  if ((yyvsp[(2) - (2)].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[(2) - (2)].abstract).fn.last; *(yyvsp[(2) - (2)].abstract).last = (yyvsp[(2) - (2)].abstract).fn.comp; }
-			  *(yyval.abstract).last = (yyvsp[(1) - (2)].nested).comp;
-			  (yyval.abstract).last = (yyvsp[(1) - (2)].nested).last; }
+#line 806 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.abstract) = (yyvsp[0].abstract); (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL;
+			  if ((yyvsp[0].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[0].abstract).fn.last; *(yyvsp[0].abstract).last = (yyvsp[0].abstract).fn.comp; }
+			  *(yyval.abstract).last = (yyvsp[-1].nested).comp;
+			  (yyval.abstract).last = (yyvsp[-1].nested).last; }
+#line 2694 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 131:
-
-/* Line 1455 of yacc.c  */
-#line 806 "cp-name-parser.y"
+#line 811 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL;
-			  if ((yyvsp[(1) - (1)].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[(1) - (1)].abstract).fn.last; *(yyvsp[(1) - (1)].abstract).last = (yyvsp[(1) - (1)].abstract).fn.comp; }
+			  if ((yyvsp[0].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[0].abstract).fn.last; *(yyvsp[0].abstract).last = (yyvsp[0].abstract).fn.comp; }
 			}
+#line 2702 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 132:
-
-/* Line 1455 of yacc.c  */
-#line 813 "cp-name-parser.y"
-    { (yyval.abstract) = (yyvsp[(2) - (3)].abstract); (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 1;
-			  if ((yyvsp[(2) - (3)].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[(2) - (3)].abstract).fn.last; *(yyvsp[(2) - (3)].abstract).last = (yyvsp[(2) - (3)].abstract).fn.comp; }
+#line 818 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.abstract) = (yyvsp[-1].abstract); (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 1;
+			  if ((yyvsp[-1].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[-1].abstract).fn.last; *(yyvsp[-1].abstract).last = (yyvsp[-1].abstract).fn.comp; }
 			}
+#line 2710 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 133:
-
-/* Line 1455 of yacc.c  */
-#line 817 "cp-name-parser.y"
+#line 822 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.abstract).fold_flag = 0;
-			  if ((yyvsp[(1) - (2)].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[(1) - (2)].abstract).fn.last; *(yyvsp[(1) - (2)].abstract).last = (yyvsp[(1) - (2)].abstract).fn.comp; }
-			  if ((yyvsp[(1) - (2)].abstract).fold_flag)
+			  if ((yyvsp[-1].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[-1].abstract).fn.last; *(yyvsp[-1].abstract).last = (yyvsp[-1].abstract).fn.comp; }
+			  if ((yyvsp[-1].abstract).fold_flag)
 			    {
-			      *(yyval.abstract).last = (yyvsp[(2) - (2)].nested).comp;
-			      (yyval.abstract).last = (yyvsp[(2) - (2)].nested).last;
+			      *(yyval.abstract).last = (yyvsp[0].nested).comp;
+			      (yyval.abstract).last = (yyvsp[0].nested).last;
 			    }
 			  else
-			    (yyval.abstract).fn = (yyvsp[(2) - (2)].nested);
+			    (yyval.abstract).fn = (yyvsp[0].nested);
 			}
+#line 2725 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 134:
-
-/* Line 1455 of yacc.c  */
-#line 828 "cp-name-parser.y"
+#line 833 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 0;
-			  if ((yyvsp[(1) - (2)].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[(1) - (2)].abstract).fn.last; *(yyvsp[(1) - (2)].abstract).last = (yyvsp[(1) - (2)].abstract).fn.comp; }
-			  *(yyvsp[(1) - (2)].abstract).last = (yyvsp[(2) - (2)].comp);
-			  (yyval.abstract).last = &d_right ((yyvsp[(2) - (2)].comp));
+			  if ((yyvsp[-1].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[-1].abstract).fn.last; *(yyvsp[-1].abstract).last = (yyvsp[-1].abstract).fn.comp; }
+			  *(yyvsp[-1].abstract).last = (yyvsp[0].comp);
+			  (yyval.abstract).last = &d_right ((yyvsp[0].comp));
 			}
+#line 2735 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 135:
-
-/* Line 1455 of yacc.c  */
-#line 834 "cp-name-parser.y"
+#line 839 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 0;
-			  (yyval.abstract).comp = (yyvsp[(1) - (1)].comp);
-			  (yyval.abstract).last = &d_right ((yyvsp[(1) - (1)].comp));
+			  (yyval.abstract).comp = (yyvsp[0].comp);
+			  (yyval.abstract).last = &d_right ((yyvsp[0].comp));
 			}
+#line 2744 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 136:
-
-/* Line 1455 of yacc.c  */
-#line 852 "cp-name-parser.y"
-    { (yyval.abstract).comp = (yyvsp[(1) - (1)].nested).comp; (yyval.abstract).last = (yyvsp[(1) - (1)].nested).last;
+#line 857 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.abstract).comp = (yyvsp[0].nested).comp; (yyval.abstract).last = (yyvsp[0].nested).last;
 			  (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).start = NULL; }
+#line 2751 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 137:
-
-/* Line 1455 of yacc.c  */
-#line 855 "cp-name-parser.y"
-    { (yyval.abstract) = (yyvsp[(2) - (2)].abstract);
-			  if ((yyvsp[(2) - (2)].abstract).last)
-			    *(yyval.abstract).last = (yyvsp[(1) - (2)].nested).comp;
+#line 860 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.abstract) = (yyvsp[0].abstract);
+			  if ((yyvsp[0].abstract).last)
+			    *(yyval.abstract).last = (yyvsp[-1].nested).comp;
 			  else
-			    (yyval.abstract).comp = (yyvsp[(1) - (2)].nested).comp;
-			  (yyval.abstract).last = (yyvsp[(1) - (2)].nested).last;
+			    (yyval.abstract).comp = (yyvsp[-1].nested).comp;
+			  (yyval.abstract).last = (yyvsp[-1].nested).last;
 			}
+#line 2763 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 138:
-
-/* Line 1455 of yacc.c  */
-#line 863 "cp-name-parser.y"
-    { (yyval.abstract).comp = (yyvsp[(1) - (1)].abstract).comp; (yyval.abstract).last = (yyvsp[(1) - (1)].abstract).last; (yyval.abstract).fn = (yyvsp[(1) - (1)].abstract).fn; (yyval.abstract).start = NULL; }
+#line 868 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.abstract).comp = (yyvsp[0].abstract).comp; (yyval.abstract).last = (yyvsp[0].abstract).last; (yyval.abstract).fn = (yyvsp[0].abstract).fn; (yyval.abstract).start = NULL; }
+#line 2769 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 139:
-
-/* Line 1455 of yacc.c  */
-#line 865 "cp-name-parser.y"
-    { (yyval.abstract).start = (yyvsp[(4) - (4)].comp);
-			  if ((yyvsp[(1) - (4)].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[(1) - (4)].abstract).fn.last; *(yyvsp[(1) - (4)].abstract).last = (yyvsp[(1) - (4)].abstract).fn.comp; }
-			  if ((yyvsp[(1) - (4)].abstract).fold_flag)
+#line 870 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.abstract).start = (yyvsp[0].comp);
+			  if ((yyvsp[-3].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[-3].abstract).fn.last; *(yyvsp[-3].abstract).last = (yyvsp[-3].abstract).fn.comp; }
+			  if ((yyvsp[-3].abstract).fold_flag)
 			    {
-			      *(yyval.abstract).last = (yyvsp[(2) - (4)].nested).comp;
-			      (yyval.abstract).last = (yyvsp[(2) - (4)].nested).last;
+			      *(yyval.abstract).last = (yyvsp[-2].nested).comp;
+			      (yyval.abstract).last = (yyvsp[-2].nested).last;
 			    }
 			  else
-			    (yyval.abstract).fn = (yyvsp[(2) - (4)].nested);
+			    (yyval.abstract).fn = (yyvsp[-2].nested);
 			}
+#line 2784 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 140:
-
-/* Line 1455 of yacc.c  */
-#line 876 "cp-name-parser.y"
-    { (yyval.abstract).fn = (yyvsp[(1) - (2)].nested);
-			  (yyval.abstract).start = (yyvsp[(2) - (2)].comp);
+#line 881 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.abstract).fn = (yyvsp[-1].nested);
+			  (yyval.abstract).start = (yyvsp[0].comp);
 			  (yyval.abstract).comp = NULL; (yyval.abstract).last = NULL;
 			}
+#line 2793 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 142:
-
-/* Line 1455 of yacc.c  */
-#line 884 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].abstract).comp;
-			  *(yyvsp[(2) - (2)].abstract).last = (yyvsp[(1) - (2)].comp);
+#line 889 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[0].abstract).comp;
+			  *(yyvsp[0].abstract).last = (yyvsp[-1].comp);
 			}
+#line 2801 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 143:
-
-/* Line 1455 of yacc.c  */
-#line 890 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(2) - (2)].nested).comp;
-			  (yyval.nested).last = (yyvsp[(1) - (2)].nested).last;
-			  *(yyvsp[(2) - (2)].nested).last = (yyvsp[(1) - (2)].nested).comp; }
+#line 895 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[0].nested).comp;
+			  (yyval.nested).last = (yyvsp[-1].nested).last;
+			  *(yyvsp[0].nested).last = (yyvsp[-1].nested).comp; }
+#line 2809 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 145:
-
-/* Line 1455 of yacc.c  */
-#line 898 "cp-name-parser.y"
-    { (yyval.nested) = (yyvsp[(2) - (3)].nested); }
+#line 903 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested) = (yyvsp[-1].nested); }
+#line 2815 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 146:
-
-/* Line 1455 of yacc.c  */
-#line 900 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(1) - (2)].nested).comp;
-			  *(yyvsp[(1) - (2)].nested).last = (yyvsp[(2) - (2)].nested).comp;
-			  (yyval.nested).last = (yyvsp[(2) - (2)].nested).last;
+#line 905 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  *(yyvsp[-1].nested).last = (yyvsp[0].nested).comp;
+			  (yyval.nested).last = (yyvsp[0].nested).last;
 			}
+#line 2824 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 147:
-
-/* Line 1455 of yacc.c  */
-#line 905 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(1) - (2)].nested).comp;
-			  *(yyvsp[(1) - (2)].nested).last = (yyvsp[(2) - (2)].comp);
-			  (yyval.nested).last = &d_right ((yyvsp[(2) - (2)].comp));
+#line 910 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  *(yyvsp[-1].nested).last = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_right ((yyvsp[0].comp));
 			}
+#line 2833 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 148:
-
-/* Line 1455 of yacc.c  */
-#line 910 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[(1) - (1)].comp), NULL);
+#line 915 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[0].comp), NULL);
 			  (yyval.nested).last = &d_right ((yyval.nested).comp);
 			}
+#line 2841 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 149:
-
-/* Line 1455 of yacc.c  */
-#line 922 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(2) - (2)].nested).comp;
-			  (yyval.nested).last = (yyvsp[(1) - (2)].nested).last;
-			  *(yyvsp[(2) - (2)].nested).last = (yyvsp[(1) - (2)].nested).comp; }
+#line 927 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[0].nested).comp;
+			  (yyval.nested).last = (yyvsp[-1].nested).last;
+			  *(yyvsp[0].nested).last = (yyvsp[-1].nested).comp; }
+#line 2849 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 150:
-
-/* Line 1455 of yacc.c  */
-#line 926 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[(1) - (1)].comp), NULL);
+#line 931 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[0].comp), NULL);
 			  (yyval.nested).last = &d_right ((yyval.nested).comp);
 			}
+#line 2857 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 152:
-
-/* Line 1455 of yacc.c  */
-#line 938 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[(1) - (4)].comp), (yyvsp[(2) - (4)].nested).comp);
-			  (yyval.nested).last = (yyvsp[(2) - (4)].nested).last;
-			  (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.nested).comp, (yyvsp[(4) - (4)].comp));
+#line 943 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-3].comp), (yyvsp[-2].nested).comp);
+			  (yyval.nested).last = (yyvsp[-2].nested).last;
+			  (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.nested).comp, (yyvsp[0].comp));
 			}
+#line 2866 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 153:
-
-/* Line 1455 of yacc.c  */
-#line 943 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(1) - (4)].nested).comp;
-			  *(yyvsp[(1) - (4)].nested).last = (yyvsp[(2) - (4)].nested).comp;
-			  (yyval.nested).last = (yyvsp[(2) - (4)].nested).last;
-			  (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.nested).comp, (yyvsp[(4) - (4)].comp));
+#line 948 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[-3].nested).comp;
+			  *(yyvsp[-3].nested).last = (yyvsp[-2].nested).comp;
+			  (yyval.nested).last = (yyvsp[-2].nested).last;
+			  (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.nested).comp, (yyvsp[0].comp));
 			}
+#line 2876 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 154:
-
-/* Line 1455 of yacc.c  */
-#line 952 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(3) - (4)].nested).comp;
-			  (yyval.nested).last = (yyvsp[(2) - (4)].nested).last;
-			  *(yyvsp[(3) - (4)].nested).last = (yyvsp[(2) - (4)].nested).comp; }
+#line 957 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  (yyval.nested).last = (yyvsp[-2].nested).last;
+			  *(yyvsp[-1].nested).last = (yyvsp[-2].nested).comp; }
+#line 2884 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 155:
-
-/* Line 1455 of yacc.c  */
-#line 956 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(1) - (2)].nested).comp;
-			  *(yyvsp[(1) - (2)].nested).last = (yyvsp[(2) - (2)].nested).comp;
-			  (yyval.nested).last = (yyvsp[(2) - (2)].nested).last;
+#line 961 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  *(yyvsp[-1].nested).last = (yyvsp[0].nested).comp;
+			  (yyval.nested).last = (yyvsp[0].nested).last;
 			}
+#line 2893 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 156:
-
-/* Line 1455 of yacc.c  */
-#line 961 "cp-name-parser.y"
-    { (yyval.nested).comp = (yyvsp[(1) - (2)].nested).comp;
-			  *(yyvsp[(1) - (2)].nested).last = (yyvsp[(2) - (2)].comp);
-			  (yyval.nested).last = &d_right ((yyvsp[(2) - (2)].comp));
+#line 966 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  *(yyvsp[-1].nested).last = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_right ((yyvsp[0].comp));
 			}
+#line 2902 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 157:
-
-/* Line 1455 of yacc.c  */
-#line 966 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[(1) - (2)].comp), (yyvsp[(2) - (2)].nested).comp);
-			  (yyval.nested).last = (yyvsp[(2) - (2)].nested).last;
+#line 971 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-1].comp), (yyvsp[0].nested).comp);
+			  (yyval.nested).last = (yyvsp[0].nested).last;
 			}
+#line 2910 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 158:
-
-/* Line 1455 of yacc.c  */
-#line 970 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[(1) - (2)].comp), (yyvsp[(2) - (2)].comp));
-			  (yyval.nested).last = &d_right ((yyvsp[(2) - (2)].comp));
+#line 975 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-1].comp), (yyvsp[0].comp));
+			  (yyval.nested).last = &d_right ((yyvsp[0].comp));
 			}
+#line 2918 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 159:
-
-/* Line 1455 of yacc.c  */
-#line 976 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (3)].comp); }
+#line 981 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = (yyvsp[-1].comp); }
+#line 2924 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 161:
-
-/* Line 1455 of yacc.c  */
-#line 985 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary (">", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 990 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary (">", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 2930 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 162:
-
-/* Line 1455 of yacc.c  */
-#line 992 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[(2) - (2)].comp)); }
+#line 997 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[0].comp)); }
+#line 2936 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 163:
-
-/* Line 1455 of yacc.c  */
-#line 994 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[(3) - (4)].comp)); }
+#line 999 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[-1].comp)); }
+#line 2942 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 164:
-
-/* Line 1455 of yacc.c  */
-#line 999 "cp-name-parser.y"
-    { (yyval.comp) = state->d_unary ("-", (yyvsp[(2) - (2)].comp)); }
+#line 1004 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_unary ("-", (yyvsp[0].comp)); }
+#line 2948 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 165:
-
-/* Line 1455 of yacc.c  */
-#line 1003 "cp-name-parser.y"
-    { (yyval.comp) = state->d_unary ("!", (yyvsp[(2) - (2)].comp)); }
+#line 1008 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_unary ("!", (yyvsp[0].comp)); }
+#line 2954 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 166:
-
-/* Line 1455 of yacc.c  */
-#line 1007 "cp-name-parser.y"
-    { (yyval.comp) = state->d_unary ("~", (yyvsp[(2) - (2)].comp)); }
+#line 1012 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_unary ("~", (yyvsp[0].comp)); }
+#line 2960 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 167:
-
-/* Line 1455 of yacc.c  */
-#line 1014 "cp-name-parser.y"
-    { if ((yyvsp[(4) - (4)].comp)->type == DEMANGLE_COMPONENT_LITERAL
-		      || (yyvsp[(4) - (4)].comp)->type == DEMANGLE_COMPONENT_LITERAL_NEG)
+#line 1019 "cp-name-parser.y" /* yacc.c:1646  */
+    { if ((yyvsp[0].comp)->type == DEMANGLE_COMPONENT_LITERAL
+		      || (yyvsp[0].comp)->type == DEMANGLE_COMPONENT_LITERAL_NEG)
 		    {
-		      (yyval.comp) = (yyvsp[(4) - (4)].comp);
-		      d_left ((yyvsp[(4) - (4)].comp)) = (yyvsp[(2) - (4)].comp);
+		      (yyval.comp) = (yyvsp[0].comp);
+		      d_left ((yyvsp[0].comp)) = (yyvsp[-2].comp);
 		    }
 		  else
 		    (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
-				      state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[(2) - (4)].comp), NULL),
-				      (yyvsp[(4) - (4)].comp));
+				      state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-2].comp), NULL),
+				      (yyvsp[0].comp));
 		}
+#line 2976 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 168:
-
-/* Line 1455 of yacc.c  */
-#line 1030 "cp-name-parser.y"
+#line 1035 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
-				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[(3) - (7)].comp), NULL),
-				    (yyvsp[(6) - (7)].comp));
+				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-4].comp), NULL),
+				    (yyvsp[-1].comp));
 		}
+#line 2985 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 169:
-
-/* Line 1455 of yacc.c  */
-#line 1037 "cp-name-parser.y"
+#line 1042 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
-				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[(3) - (7)].comp), NULL),
-				    (yyvsp[(6) - (7)].comp));
+				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-4].comp), NULL),
+				    (yyvsp[-1].comp));
 		}
+#line 2994 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 170:
-
-/* Line 1455 of yacc.c  */
-#line 1044 "cp-name-parser.y"
+#line 1049 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
-				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[(3) - (7)].comp), NULL),
-				    (yyvsp[(6) - (7)].comp));
+				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-4].comp), NULL),
+				    (yyvsp[-1].comp));
 		}
+#line 3003 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 171:
-
-/* Line 1455 of yacc.c  */
-#line 1063 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("*", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1068 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("*", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3009 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 172:
-
-/* Line 1455 of yacc.c  */
-#line 1067 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("/", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1072 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("/", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3015 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 173:
-
-/* Line 1455 of yacc.c  */
-#line 1071 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("%", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1076 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("%", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3021 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 174:
-
-/* Line 1455 of yacc.c  */
-#line 1075 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("+", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1080 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("+", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3027 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 175:
-
-/* Line 1455 of yacc.c  */
-#line 1079 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("-", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1084 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("-", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3033 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 176:
-
-/* Line 1455 of yacc.c  */
-#line 1083 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("<<", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1088 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("<<", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3039 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 177:
-
-/* Line 1455 of yacc.c  */
-#line 1087 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary (">>", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1092 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary (">>", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3045 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 178:
-
-/* Line 1455 of yacc.c  */
-#line 1091 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("==", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1096 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("==", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3051 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 179:
-
-/* Line 1455 of yacc.c  */
-#line 1095 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("!=", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1100 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("!=", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3057 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 180:
-
-/* Line 1455 of yacc.c  */
-#line 1099 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("<=", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1104 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("<=", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3063 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 181:
-
-/* Line 1455 of yacc.c  */
-#line 1103 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary (">=", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1108 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary (">=", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3069 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 182:
-
-/* Line 1455 of yacc.c  */
-#line 1107 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("<", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1112 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("<", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3075 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 183:
-
-/* Line 1455 of yacc.c  */
-#line 1111 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("&", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1116 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("&", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3081 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 184:
-
-/* Line 1455 of yacc.c  */
-#line 1115 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("^", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1120 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("^", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3087 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 185:
-
-/* Line 1455 of yacc.c  */
-#line 1119 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("|", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1124 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("|", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3093 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 186:
-
-/* Line 1455 of yacc.c  */
-#line 1123 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("&&", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1128 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("&&", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3099 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 187:
-
-/* Line 1455 of yacc.c  */
-#line 1127 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("||", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1132 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("||", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3105 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 188:
-
-/* Line 1455 of yacc.c  */
-#line 1132 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary ("->", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1137 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary ("->", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3111 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 189:
-
-/* Line 1455 of yacc.c  */
-#line 1136 "cp-name-parser.y"
-    { (yyval.comp) = state->d_binary (".", (yyvsp[(1) - (3)].comp), (yyvsp[(3) - (3)].comp)); }
+#line 1141 "cp-name-parser.y" /* yacc.c:1646  */
+    { (yyval.comp) = state->d_binary (".", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3117 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 190:
-
-/* Line 1455 of yacc.c  */
-#line 1140 "cp-name-parser.y"
+#line 1145 "cp-name-parser.y" /* yacc.c:1646  */
     { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TRINARY, state->make_operator ("?", 3),
-				    state->fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG1, (yyvsp[(1) - (5)].comp),
-						 state->fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG2, (yyvsp[(3) - (5)].comp), (yyvsp[(5) - (5)].comp))));
+				    state->fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG1, (yyvsp[-4].comp),
+						 state->fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG2, (yyvsp[-2].comp), (yyvsp[0].comp))));
 		}
+#line 3126 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 193:
-
-/* Line 1455 of yacc.c  */
-#line 1154 "cp-name-parser.y"
+#line 1159 "cp-name-parser.y" /* yacc.c:1646  */
     {
 		  /* Match the whitespacing of cplus_demangle_operators.
 		     It would abort on unrecognized string otherwise.  */
-		  (yyval.comp) = state->d_unary ("sizeof ", (yyvsp[(3) - (4)].comp));
+		  (yyval.comp) = state->d_unary ("sizeof ", (yyvsp[-1].comp));
 		}
+#line 3136 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 194:
-
-/* Line 1455 of yacc.c  */
-#line 1163 "cp-name-parser.y"
+#line 1168 "cp-name-parser.y" /* yacc.c:1646  */
     { struct demangle_component *i;
 		  i = state->make_name ("1", 1);
 		  (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LITERAL,
 				    state->make_builtin_type ( "bool"),
 				    i);
 		}
+#line 3147 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
   case 195:
-
-/* Line 1455 of yacc.c  */
-#line 1172 "cp-name-parser.y"
+#line 1177 "cp-name-parser.y" /* yacc.c:1646  */
     { struct demangle_component *i;
 		  i = state->make_name ("0", 1);
 		  (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LITERAL,
 				    state->make_builtin_type ("bool"),
 				    i);
 		}
+#line 3158 "cp-name-parser.c.tmp" /* yacc.c:1646  */
     break;
 
 
-
-/* Line 1455 of yacc.c  */
-#line 3531 "cp-name-parser.c.tmp"
+#line 3162 "cp-name-parser.c.tmp" /* yacc.c:1646  */
       default: break;
     }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
@@ -3537,7 +3179,7 @@ yyreduce:
 
   *++yyvsp = yyval;
 
-  /* Now `shift' the result of the reduction.  Determine what state
+  /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
 
@@ -3552,10 +3194,14 @@ yyreduce:
   goto yynewstate;
 
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error.  |
+`--------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -3563,37 +3209,36 @@ yyerrlab:
 #if ! YYERROR_VERBOSE
       yyerror (state, YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
       {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
-
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (state, yymsg);
-	  }
-	else
-	  {
-	    yyerror (state, YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (state, yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
@@ -3602,20 +3247,20 @@ yyerrlab:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-	 error, discard it.  */
+         error, discard it.  */
 
       if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
       else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval, state);
-	  yychar = YYEMPTY;
-	}
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval, state);
+          yychar = YYEMPTY;
+        }
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -3634,7 +3279,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -3647,35 +3292,37 @@ yyerrorlab:
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
+      if (!yypact_value_is_default (yyn))
+        {
+          yyn += YYTERROR;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+            {
+              yyn = yytable[yyn];
+              if (0 < yyn)
+                break;
+            }
+        }
 
       /* Pop the current state because it cannot handle the error token.  */
       if (yyssp == yyss)
-	YYABORT;
+        YYABORT;
 
 
       yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp, state);
+                  yystos[yystate], yyvsp, state);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
     }
 
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
 
   /* Shift the error token.  */
@@ -3699,7 +3346,7 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+#if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -3711,16 +3358,21 @@ yyexhaustedlab:
 
 yyreturn:
   if (yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval, state);
-  /* Do not reclaim the symbols of the rule which action triggered
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval, state);
+    }
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp, state);
+                  yystos[*yyssp], yyvsp, state);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -3731,14 +3383,9 @@ yyreturn:
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
-
-
-
-/* Line 1675 of yacc.c  */
-#line 1182 "cp-name-parser.y"
+#line 1187 "cp-name-parser.y" /* yacc.c:1906  */
 
 
 /* Apply QUALIFIERS to LHS and return a qualified component.  IS_METHOD
@@ -3870,7 +3517,7 @@ symbol_end (const char *lexptr)
 
 int
 cpname_state::parse_number (const char *p, int len, int parsed_float,
-			    YYSTYPE *lvalp)
+			    cp_name_parser_YYSTYPE *lvalp)
 {
   int unsigned_p = 0;
 
@@ -3897,8 +3544,8 @@ cpname_state::parse_number (const char *
       char c;
 
       /* The GDB lexer checks the result of scanf at this point.  Not doing
-         this leaves our error checking slightly weaker but only for invalid
-         data.  */
+	 this leaves our error checking slightly weaker but only for invalid
+	 data.  */
 
       /* See if it has `f' or `l' suffix (float or long double).  */
 
@@ -4071,7 +3718,7 @@ cp_parse_escape (const char **string_ptr
 }
 
 #define HANDLE_SPECIAL(string, comp)				\
-  if (strncmp (tokstart, string, sizeof (string) - 1) == 0)	\
+  if (startswith (tokstart, string))				\
     {								\
       state->lexptr = tokstart + sizeof (string) - 1;			\
       lvalp->lval = comp;					\
@@ -4097,7 +3744,7 @@ cp_parse_escape (const char **string_ptr
 /* Read one token, getting characters through LEXPTR.  */
 
 static int
-yylex (YYSTYPE *lvalp, cpname_state *state)
+yylex (cp_name_parser_YYSTYPE *lvalp, cpname_state *state)
 {
   int c;
   int namelen;
@@ -4152,14 +3799,14 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
       return INT;
 
     case '(':
-      if (strncmp (tokstart, "(anonymous namespace)", 21) == 0)
+      if (startswith (tokstart, "(anonymous namespace)"))
 	{
 	  state->lexptr += 21;
 	  lvalp->comp = state->make_name ("(anonymous namespace)",
 					  sizeof "(anonymous namespace)" - 1);
 	  return NAME;
 	}
-	/* FALL THROUGH */
+	[[fallthrough]];
 
     case ')':
     case ',':
@@ -4185,7 +3832,7 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
       HANDLE_TOKEN2 ("->", ARROW);
 
       /* For construction vtables.  This is kind of hokey.  */
-      if (strncmp (tokstart, "-in-", 4) == 0)
+      if (startswith (tokstart, "-in-"))
 	{
 	  state->lexptr += 4;
 	  return CONSTRUCTION_IN;
@@ -4196,9 +3843,9 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
 	  state->lexptr++;
 	  return '-';
 	}
-      /* FALL THRU.  */
 
     try_number:
+      [[fallthrough]];
     case '0':
     case '1':
     case '2':
@@ -4256,7 +3903,7 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
 	  }
 	toktype = state->parse_number (tokstart, p - tokstart, got_dot|got_e,
 				       lvalp);
-        if (toktype == ERROR)
+	if (toktype == ERROR)
 	  {
 	    char *err_copy = (char *) alloca (p - tokstart + 1);
 
@@ -4363,21 +4010,21 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
   switch (namelen)
     {
     case 16:
-      if (strncmp (tokstart, "reinterpret_cast", 16) == 0)
-        return REINTERPRET_CAST;
+      if (startswith (tokstart, "reinterpret_cast"))
+	return REINTERPRET_CAST;
       break;
     case 12:
-      if (strncmp (tokstart, "construction vtable for ", 24) == 0)
+      if (startswith (tokstart, "construction vtable for "))
 	{
 	  state->lexptr = tokstart + 24;
 	  return CONSTRUCTION_VTABLE;
 	}
-      if (strncmp (tokstart, "dynamic_cast", 12) == 0)
-        return DYNAMIC_CAST;
+      if (startswith (tokstart, "dynamic_cast"))
+	return DYNAMIC_CAST;
       break;
     case 11:
-      if (strncmp (tokstart, "static_cast", 11) == 0)
-        return STATIC_CAST;
+      if (startswith (tokstart, "static_cast"))
+	return STATIC_CAST;
       break;
     case 9:
       HANDLE_SPECIAL ("covariant return thunk to ", DEMANGLE_COMPONENT_COVARIANT_THUNK);
@@ -4387,24 +4034,24 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
       HANDLE_SPECIAL ("typeinfo for ", DEMANGLE_COMPONENT_TYPEINFO);
       HANDLE_SPECIAL ("typeinfo fn for ", DEMANGLE_COMPONENT_TYPEINFO_FN);
       HANDLE_SPECIAL ("typeinfo name for ", DEMANGLE_COMPONENT_TYPEINFO_NAME);
-      if (strncmp (tokstart, "operator", 8) == 0)
+      if (startswith (tokstart, "operator"))
 	return OPERATOR;
-      if (strncmp (tokstart, "restrict", 8) == 0)
+      if (startswith (tokstart, "restrict"))
 	return RESTRICT;
-      if (strncmp (tokstart, "unsigned", 8) == 0)
+      if (startswith (tokstart, "unsigned"))
 	return UNSIGNED;
-      if (strncmp (tokstart, "template", 8) == 0)
+      if (startswith (tokstart, "template"))
 	return TEMPLATE;
-      if (strncmp (tokstart, "volatile", 8) == 0)
+      if (startswith (tokstart, "volatile"))
 	return VOLATILE_KEYWORD;
       break;
     case 7:
       HANDLE_SPECIAL ("virtual thunk to ", DEMANGLE_COMPONENT_VIRTUAL_THUNK);
-      if (strncmp (tokstart, "wchar_t", 7) == 0)
+      if (startswith (tokstart, "wchar_t"))
 	return WCHAR_T;
       break;
     case 6:
-      if (strncmp (tokstart, "global constructors keyed to ", 29) == 0)
+      if (startswith (tokstart, "global constructors keyed to "))
 	{
 	  const char *p;
 	  state->lexptr = tokstart + 29;
@@ -4415,7 +4062,7 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
 	  state->lexptr = p;
 	  return DEMANGLER_SPECIAL;
 	}
-      if (strncmp (tokstart, "global destructors keyed to ", 28) == 0)
+      if (startswith (tokstart, "global destructors keyed to "))
 	{
 	  const char *p;
 	  state->lexptr = tokstart + 28;
@@ -4428,52 +4075,52 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
 	}
 
       HANDLE_SPECIAL ("vtable for ", DEMANGLE_COMPONENT_VTABLE);
-      if (strncmp (tokstart, "delete", 6) == 0)
+      if (startswith (tokstart, "delete"))
 	return DELETE;
-      if (strncmp (tokstart, "struct", 6) == 0)
+      if (startswith (tokstart, "struct"))
 	return STRUCT;
-      if (strncmp (tokstart, "signed", 6) == 0)
+      if (startswith (tokstart, "signed"))
 	return SIGNED_KEYWORD;
-      if (strncmp (tokstart, "sizeof", 6) == 0)
+      if (startswith (tokstart, "sizeof"))
 	return SIZEOF;
-      if (strncmp (tokstart, "double", 6) == 0)
+      if (startswith (tokstart, "double"))
 	return DOUBLE_KEYWORD;
       break;
     case 5:
       HANDLE_SPECIAL ("guard variable for ", DEMANGLE_COMPONENT_GUARD);
-      if (strncmp (tokstart, "false", 5) == 0)
+      if (startswith (tokstart, "false"))
 	return FALSEKEYWORD;
-      if (strncmp (tokstart, "class", 5) == 0)
+      if (startswith (tokstart, "class"))
 	return CLASS;
-      if (strncmp (tokstart, "union", 5) == 0)
+      if (startswith (tokstart, "union"))
 	return UNION;
-      if (strncmp (tokstart, "float", 5) == 0)
+      if (startswith (tokstart, "float"))
 	return FLOAT_KEYWORD;
-      if (strncmp (tokstart, "short", 5) == 0)
+      if (startswith (tokstart, "short"))
 	return SHORT;
-      if (strncmp (tokstart, "const", 5) == 0)
+      if (startswith (tokstart, "const"))
 	return CONST_KEYWORD;
       break;
     case 4:
-      if (strncmp (tokstart, "void", 4) == 0)
+      if (startswith (tokstart, "void"))
 	return VOID;
-      if (strncmp (tokstart, "bool", 4) == 0)
+      if (startswith (tokstart, "bool"))
 	return BOOL;
-      if (strncmp (tokstart, "char", 4) == 0)
+      if (startswith (tokstart, "char"))
 	return CHAR;
-      if (strncmp (tokstart, "enum", 4) == 0)
+      if (startswith (tokstart, "enum"))
 	return ENUM;
-      if (strncmp (tokstart, "long", 4) == 0)
+      if (startswith (tokstart, "long"))
 	return LONG;
-      if (strncmp (tokstart, "true", 4) == 0)
+      if (startswith (tokstart, "true"))
 	return TRUEKEYWORD;
       break;
     case 3:
       HANDLE_SPECIAL ("VTT for ", DEMANGLE_COMPONENT_VTT);
       HANDLE_SPECIAL ("non-virtual thunk to ", DEMANGLE_COMPONENT_THUNK);
-      if (strncmp (tokstart, "new", 3) == 0)
+      if (startswith (tokstart, "new"))
 	return NEW;
-      if (strncmp (tokstart, "int", 3) == 0)
+      if (startswith (tokstart, "int"))
 	return INT_KEYWORD;
       break;
     default:
@@ -4508,19 +4155,15 @@ allocate_info (void)
   return info;
 }
 
-/* Convert RESULT to a string.  The return value is allocated
-   using xmalloc.  ESTIMATED_LEN is used only as a guide to the
-   length of the result.  This functions handles a few cases that
-   cplus_demangle_print does not, specifically the global destructor
-   and constructor labels.  */
+/* See cp-support.h.  */
 
 gdb::unique_xmalloc_ptr<char>
 cp_comp_to_string (struct demangle_component *result, int estimated_len)
 {
   size_t err;
 
-  char *res = cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI,
-				    result, estimated_len, &err);
+  char *res = gdb_cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI,
+					result, estimated_len, &err);
   return gdb::unique_xmalloc_ptr<char> (res);
 }
 
@@ -4597,7 +4240,7 @@ cp_demangled_name_to_comp (const char *d
 
   state.demangle_info = allocate_info ();
 
-  std::unique_ptr<demangle_parse_info> result (new demangle_parse_info);
+  auto result = std::make_unique<demangle_parse_info> ();
   result->info = state.demangle_info;
 
   if (yyparse (&state))
@@ -4620,7 +4263,7 @@ cp_print (struct demangle_component *res
   char *str;
   size_t err = 0;
 
-  str = cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI, result, 64, &err);
+  str = gdb_cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI, result, 64, &err);
   if (str == NULL)
     return;
 
@@ -4741,4 +4384,3 @@ main (int argc, char **argv)
 }
 
 #endif
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-name-parser.y ./gdb/cp-name-parser.y
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-name-parser.y	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cp-name-parser.y	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* YACC parser for C++ names, for GDB.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    Parts of the lexer are based on c-exp.y from GDB.
 
@@ -40,7 +40,7 @@
 #include "defs.h"
 
 #include <unistd.h>
-#include "safe-ctype.h"
+#include "gdbsupport/gdb-safe-ctype.h"
 #include "demangle.h"
 #include "cp-support.h"
 #include "c-support.h"
@@ -346,7 +346,12 @@ static void yyerror (cpname_state *, con
 %%
 
 result		:	start
-			{ state->global_result = $1; }
+			{
+			  state->global_result = $1;
+
+			  /* Avoid warning about "yynerrs" being unused.  */
+			  (void) yynerrs;
+			}
 		;
 
 start		:	type
@@ -1337,8 +1342,8 @@ cpname_state::parse_number (const char *
       char c;
 
       /* The GDB lexer checks the result of scanf at this point.  Not doing
-         this leaves our error checking slightly weaker but only for invalid
-         data.  */
+	 this leaves our error checking slightly weaker but only for invalid
+	 data.  */
 
       /* See if it has `f' or `l' suffix (float or long double).  */
 
@@ -1511,7 +1516,7 @@ cp_parse_escape (const char **string_ptr
 }
 
 #define HANDLE_SPECIAL(string, comp)				\
-  if (strncmp (tokstart, string, sizeof (string) - 1) == 0)	\
+  if (startswith (tokstart, string))				\
     {								\
       state->lexptr = tokstart + sizeof (string) - 1;			\
       lvalp->lval = comp;					\
@@ -1592,14 +1597,14 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
       return INT;
 
     case '(':
-      if (strncmp (tokstart, "(anonymous namespace)", 21) == 0)
+      if (startswith (tokstart, "(anonymous namespace)"))
 	{
 	  state->lexptr += 21;
 	  lvalp->comp = state->make_name ("(anonymous namespace)",
 					  sizeof "(anonymous namespace)" - 1);
 	  return NAME;
 	}
-	/* FALL THROUGH */
+	[[fallthrough]];
 
     case ')':
     case ',':
@@ -1625,7 +1630,7 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
       HANDLE_TOKEN2 ("->", ARROW);
 
       /* For construction vtables.  This is kind of hokey.  */
-      if (strncmp (tokstart, "-in-", 4) == 0)
+      if (startswith (tokstart, "-in-"))
 	{
 	  state->lexptr += 4;
 	  return CONSTRUCTION_IN;
@@ -1636,9 +1641,9 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
 	  state->lexptr++;
 	  return '-';
 	}
-      /* FALL THRU.  */
 
     try_number:
+      [[fallthrough]];
     case '0':
     case '1':
     case '2':
@@ -1696,7 +1701,7 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
 	  }
 	toktype = state->parse_number (tokstart, p - tokstart, got_dot|got_e,
 				       lvalp);
-        if (toktype == ERROR)
+	if (toktype == ERROR)
 	  {
 	    char *err_copy = (char *) alloca (p - tokstart + 1);
 
@@ -1803,21 +1808,21 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
   switch (namelen)
     {
     case 16:
-      if (strncmp (tokstart, "reinterpret_cast", 16) == 0)
-        return REINTERPRET_CAST;
+      if (startswith (tokstart, "reinterpret_cast"))
+	return REINTERPRET_CAST;
       break;
     case 12:
-      if (strncmp (tokstart, "construction vtable for ", 24) == 0)
+      if (startswith (tokstart, "construction vtable for "))
 	{
 	  state->lexptr = tokstart + 24;
 	  return CONSTRUCTION_VTABLE;
 	}
-      if (strncmp (tokstart, "dynamic_cast", 12) == 0)
-        return DYNAMIC_CAST;
+      if (startswith (tokstart, "dynamic_cast"))
+	return DYNAMIC_CAST;
       break;
     case 11:
-      if (strncmp (tokstart, "static_cast", 11) == 0)
-        return STATIC_CAST;
+      if (startswith (tokstart, "static_cast"))
+	return STATIC_CAST;
       break;
     case 9:
       HANDLE_SPECIAL ("covariant return thunk to ", DEMANGLE_COMPONENT_COVARIANT_THUNK);
@@ -1827,24 +1832,24 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
       HANDLE_SPECIAL ("typeinfo for ", DEMANGLE_COMPONENT_TYPEINFO);
       HANDLE_SPECIAL ("typeinfo fn for ", DEMANGLE_COMPONENT_TYPEINFO_FN);
       HANDLE_SPECIAL ("typeinfo name for ", DEMANGLE_COMPONENT_TYPEINFO_NAME);
-      if (strncmp (tokstart, "operator", 8) == 0)
+      if (startswith (tokstart, "operator"))
 	return OPERATOR;
-      if (strncmp (tokstart, "restrict", 8) == 0)
+      if (startswith (tokstart, "restrict"))
 	return RESTRICT;
-      if (strncmp (tokstart, "unsigned", 8) == 0)
+      if (startswith (tokstart, "unsigned"))
 	return UNSIGNED;
-      if (strncmp (tokstart, "template", 8) == 0)
+      if (startswith (tokstart, "template"))
 	return TEMPLATE;
-      if (strncmp (tokstart, "volatile", 8) == 0)
+      if (startswith (tokstart, "volatile"))
 	return VOLATILE_KEYWORD;
       break;
     case 7:
       HANDLE_SPECIAL ("virtual thunk to ", DEMANGLE_COMPONENT_VIRTUAL_THUNK);
-      if (strncmp (tokstart, "wchar_t", 7) == 0)
+      if (startswith (tokstart, "wchar_t"))
 	return WCHAR_T;
       break;
     case 6:
-      if (strncmp (tokstart, "global constructors keyed to ", 29) == 0)
+      if (startswith (tokstart, "global constructors keyed to "))
 	{
 	  const char *p;
 	  state->lexptr = tokstart + 29;
@@ -1855,7 +1860,7 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
 	  state->lexptr = p;
 	  return DEMANGLER_SPECIAL;
 	}
-      if (strncmp (tokstart, "global destructors keyed to ", 28) == 0)
+      if (startswith (tokstart, "global destructors keyed to "))
 	{
 	  const char *p;
 	  state->lexptr = tokstart + 28;
@@ -1868,52 +1873,52 @@ yylex (YYSTYPE *lvalp, cpname_state *sta
 	}
 
       HANDLE_SPECIAL ("vtable for ", DEMANGLE_COMPONENT_VTABLE);
-      if (strncmp (tokstart, "delete", 6) == 0)
+      if (startswith (tokstart, "delete"))
 	return DELETE;
-      if (strncmp (tokstart, "struct", 6) == 0)
+      if (startswith (tokstart, "struct"))
 	return STRUCT;
-      if (strncmp (tokstart, "signed", 6) == 0)
+      if (startswith (tokstart, "signed"))
 	return SIGNED_KEYWORD;
-      if (strncmp (tokstart, "sizeof", 6) == 0)
+      if (startswith (tokstart, "sizeof"))
 	return SIZEOF;
-      if (strncmp (tokstart, "double", 6) == 0)
+      if (startswith (tokstart, "double"))
 	return DOUBLE_KEYWORD;
       break;
     case 5:
       HANDLE_SPECIAL ("guard variable for ", DEMANGLE_COMPONENT_GUARD);
-      if (strncmp (tokstart, "false", 5) == 0)
+      if (startswith (tokstart, "false"))
 	return FALSEKEYWORD;
-      if (strncmp (tokstart, "class", 5) == 0)
+      if (startswith (tokstart, "class"))
 	return CLASS;
-      if (strncmp (tokstart, "union", 5) == 0)
+      if (startswith (tokstart, "union"))
 	return UNION;
-      if (strncmp (tokstart, "float", 5) == 0)
+      if (startswith (tokstart, "float"))
 	return FLOAT_KEYWORD;
-      if (strncmp (tokstart, "short", 5) == 0)
+      if (startswith (tokstart, "short"))
 	return SHORT;
-      if (strncmp (tokstart, "const", 5) == 0)
+      if (startswith (tokstart, "const"))
 	return CONST_KEYWORD;
       break;
     case 4:
-      if (strncmp (tokstart, "void", 4) == 0)
+      if (startswith (tokstart, "void"))
 	return VOID;
-      if (strncmp (tokstart, "bool", 4) == 0)
+      if (startswith (tokstart, "bool"))
 	return BOOL;
-      if (strncmp (tokstart, "char", 4) == 0)
+      if (startswith (tokstart, "char"))
 	return CHAR;
-      if (strncmp (tokstart, "enum", 4) == 0)
+      if (startswith (tokstart, "enum"))
 	return ENUM;
-      if (strncmp (tokstart, "long", 4) == 0)
+      if (startswith (tokstart, "long"))
 	return LONG;
-      if (strncmp (tokstart, "true", 4) == 0)
+      if (startswith (tokstart, "true"))
 	return TRUEKEYWORD;
       break;
     case 3:
       HANDLE_SPECIAL ("VTT for ", DEMANGLE_COMPONENT_VTT);
       HANDLE_SPECIAL ("non-virtual thunk to ", DEMANGLE_COMPONENT_THUNK);
-      if (strncmp (tokstart, "new", 3) == 0)
+      if (startswith (tokstart, "new"))
 	return NEW;
-      if (strncmp (tokstart, "int", 3) == 0)
+      if (startswith (tokstart, "int"))
 	return INT_KEYWORD;
       break;
     default:
@@ -1948,19 +1953,15 @@ allocate_info (void)
   return info;
 }
 
-/* Convert RESULT to a string.  The return value is allocated
-   using xmalloc.  ESTIMATED_LEN is used only as a guide to the
-   length of the result.  This functions handles a few cases that
-   cplus_demangle_print does not, specifically the global destructor
-   and constructor labels.  */
+/* See cp-support.h.  */
 
 gdb::unique_xmalloc_ptr<char>
 cp_comp_to_string (struct demangle_component *result, int estimated_len)
 {
   size_t err;
 
-  char *res = cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI,
-				    result, estimated_len, &err);
+  char *res = gdb_cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI,
+					result, estimated_len, &err);
   return gdb::unique_xmalloc_ptr<char> (res);
 }
 
@@ -2037,7 +2038,7 @@ cp_demangled_name_to_comp (const char *d
 
   state.demangle_info = allocate_info ();
 
-  std::unique_ptr<demangle_parse_info> result (new demangle_parse_info);
+  auto result = std::make_unique<demangle_parse_info> ();
   result->info = state.demangle_info;
 
   if (yyparse (&state))
@@ -2060,7 +2061,7 @@ cp_print (struct demangle_component *res
   char *str;
   size_t err = 0;
 
-  str = cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI, result, 64, &err);
+  str = gdb_cplus_demangle_print (DMGL_PARAMS | DMGL_ANSI, result, 64, &err);
   if (str == NULL)
     return;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-namespace.c ./gdb/cp-namespace.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-namespace.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cp-namespace.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Helper routines for C++ support in GDB.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    Contributed by David Carlton and by Kealia, Inc.
 
@@ -20,7 +20,7 @@
 
 #include "defs.h"
 #include "cp-support.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "symtab.h"
 #include "symfile.h"
 #include "block.h"
@@ -32,14 +32,17 @@
 #include "buildsym.h"
 #include "language.h"
 #include "namespace.h"
+#include "inferior.h"
+#include <map>
 #include <string>
+#include <string.h>
 
 static struct block_symbol
   cp_lookup_nested_symbol_1 (struct type *container_type,
 			     const char *nested_name,
 			     const char *concatenated_name,
 			     const struct block *block,
-			     const domain_enum domain,
+			     const domain_search_flags domain,
 			     int basic_lookup, int is_in_anonymous);
 
 static struct type *cp_lookup_transparent_type_loop (const char *name,
@@ -93,10 +96,12 @@ cp_scan_for_anonymous_namespaces (struct
 	      /* We've found a component of the name that's an
 		 anonymous namespace.  So add symbols in it to the
 		 namespace given by the previous component if there is
-		 one, or to the global namespace if there isn't.  */
+		 one, or to the global namespace if there isn't.
+		 The declared line of this using directive can be set
+		 to 0, this way it is always considered valid.  */
 	      std::vector<const char *> excludes;
 	      add_using_directive (compunit->get_local_using_directives (),
-				   dest, src, NULL, NULL, excludes,
+				   dest, src, NULL, NULL, excludes, 0,
 				   1, &objfile->objfile_obstack);
 	    }
 	  /* The "+ 2" is for the "::".  */
@@ -124,7 +129,7 @@ cp_is_in_anonymous (const char *symbol_n
 
 static struct block_symbol
 cp_basic_lookup_symbol (const char *name, const struct block *block,
-			const domain_enum domain, int is_in_anonymous)
+			const domain_search_flags domain, int is_in_anonymous)
 {
   struct block_symbol sym;
 
@@ -138,7 +143,7 @@ cp_basic_lookup_symbol (const char *name
 	 but should be treated as local to a single file nonetheless.
 	 So we only search the current file's global block.  */
 
-      const struct block *global_block = block_global_block (block);
+      const struct block *global_block = block->global_block ();
 
       if (global_block != NULL)
 	{
@@ -167,15 +172,15 @@ cp_basic_lookup_symbol (const char *name
 static struct block_symbol
 cp_lookup_bare_symbol (const struct language_defn *langdef,
 		       const char *name, const struct block *block,
-		       const domain_enum domain, int search)
+		       const domain_search_flags domain, int search)
 {
   struct block_symbol sym;
 
   /* Note: We can't do a simple assert for ':' not being in NAME because
      ':' may be in the args of a template spec.  This isn't intended to be
      a complete test, just cheap and documentary.  */
-  if (strchr (name, '<') == NULL && strchr (name, '(') == NULL)
-    gdb_assert (strstr (name, "::") == NULL);
+  gdb_assert (strpbrk ("<>()", name) != nullptr
+	      || strstr (name, "::") == nullptr);
 
   sym = lookup_symbol_in_static_block (name, block, domain);
   if (sym.symbol != NULL)
@@ -187,14 +192,14 @@ cp_lookup_bare_symbol (const struct lang
      shared libraries we could search all of them only to find out the
      builtin type isn't defined in any of them.  This is common for types
      like "void".  */
-  if (langdef != NULL && domain == VAR_DOMAIN)
+  if (langdef != nullptr && (domain & SEARCH_TYPE_DOMAIN) != 0)
     {
       struct gdbarch *gdbarch;
 
       if (block == NULL)
-	gdbarch = target_gdbarch ();
+	gdbarch = current_inferior ()->arch ();
       else
-	gdbarch = block_gdbarch (block);
+	gdbarch = block->gdbarch ();
       sym.symbol
 	= language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
       sym.block = NULL;
@@ -220,11 +225,11 @@ cp_lookup_bare_symbol (const struct lang
 	return {};
 
 
-      type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (lang_this.symbol)));
+      type = check_typedef (lang_this.symbol->type ()->target_type ());
       /* If TYPE_NAME is NULL, abandon trying to find this symbol.
 	 This can happen for lambda functions compiled with clang++,
 	 which outputs no name for the container class.  */
-      if (TYPE_NAME (type) == NULL)
+      if (type->name () == NULL)
 	return {};
 
       /* Look for symbol NAME in this class.  */
@@ -246,7 +251,7 @@ cp_lookup_bare_symbol (const struct lang
 static struct block_symbol
 cp_search_static_and_baseclasses (const char *name,
 				  const struct block *block,
-				  const domain_enum domain,
+				  const domain_search_flags domain,
 				  unsigned int prefix_len,
 				  int is_in_anonymous)
 {
@@ -263,26 +268,31 @@ cp_search_static_and_baseclasses (const
   const char *nested = name + prefix_len + 2;
 
   /* Lookup the scope symbol.  If none is found, there is nothing more
-     that can be done.  SCOPE could be a namespace, so always look in
-     VAR_DOMAIN.  This works for classes too because of
-     symbol_matches_domain (which should be replaced with something
-     else, but it's what we have today).  */
-  block_symbol scope_sym = lookup_symbol_in_static_block (scope.c_str (),
-							  block, VAR_DOMAIN);
+     that can be done.  SCOPE could be a namespace, a class, or even a
+     function.  This code is also used by Fortran, so modules are
+     included in the search as well.  */
+  block_symbol scope_sym
+    = lookup_symbol_in_static_block (scope.c_str (), block,
+				     SEARCH_TYPE_DOMAIN
+				     | SEARCH_FUNCTION_DOMAIN
+				     | SEARCH_MODULE_DOMAIN);
   if (scope_sym.symbol == NULL)
-    scope_sym = lookup_global_symbol (scope.c_str (), block, VAR_DOMAIN);
+    scope_sym = lookup_global_symbol (scope.c_str (), block,
+				      SEARCH_TYPE_DOMAIN
+				      | SEARCH_FUNCTION_DOMAIN
+				      | SEARCH_MODULE_DOMAIN);
   if (scope_sym.symbol == NULL)
     return {};
 
-  struct type *scope_type = SYMBOL_TYPE (scope_sym.symbol);
+  struct type *scope_type = scope_sym.symbol->type ();
 
   /* If the scope is a function/method, then look up NESTED as a local
      static variable.  E.g., "print 'function()::static_var'".  */
-  if ((TYPE_CODE (scope_type) == TYPE_CODE_FUNC
-       || TYPE_CODE (scope_type) == TYPE_CODE_METHOD)
-      && domain == VAR_DOMAIN)
-    return lookup_symbol (nested, SYMBOL_BLOCK_VALUE (scope_sym.symbol),
-			  VAR_DOMAIN, NULL);
+  if ((scope_type->code () == TYPE_CODE_FUNC
+       || scope_type->code () == TYPE_CODE_METHOD)
+      && (domain & SEARCH_VAR_DOMAIN) != 0)
+    return lookup_symbol (nested, scope_sym.symbol->value_block (),
+			  domain, NULL);
 
   /* Look for a symbol named NESTED in this class/namespace.
      The caller is assumed to have already have done a basic lookup of NAME.
@@ -303,7 +313,7 @@ cp_search_static_and_baseclasses (const
 static struct block_symbol
 cp_lookup_symbol_in_namespace (const char *the_namespace, const char *name,
 			       const struct block *block,
-			       const domain_enum domain, int search)
+			       const domain_search_flags domain, int search)
 {
   char *concatenated_name = NULL;
   int is_in_anonymous;
@@ -342,7 +352,10 @@ cp_lookup_symbol_in_namespace (const cha
   return sym;
 }
 
-/* Search for NAME by applying all import statements belonging to
+/* This version of the function is internal, use the wrapper unless
+   the list of ambiguous symbols is needed.
+
+   Search for NAME by applying all import statements belonging to
    BLOCK which are applicable in SCOPE.  If DECLARATION_ONLY the
    search is restricted to using declarations.
    Example:
@@ -359,7 +372,7 @@ cp_lookup_symbol_in_namespace (const cha
      namespace A {
        using namespace X;
        namespace B {
-         using namespace Y;
+	 using namespace Y;
        }
      }
 
@@ -370,48 +383,63 @@ cp_lookup_symbol_in_namespace (const cha
    SEARCH_SCOPE_FIRST is an internal implementation detail: Callers must
    pass 0 for it.  Internally we pass 1 when recursing.  */
 
-static struct block_symbol
+static void
 cp_lookup_symbol_via_imports (const char *scope,
 			      const char *name,
 			      const struct block *block,
-			      const domain_enum domain,
+			      const domain_search_flags domain,
 			      const int search_scope_first,
 			      const int declaration_only,
-			      const int search_parents)
+			      const int search_parents,
+			      std::map<std::string,
+				       struct block_symbol>& found_symbols)
 {
   struct using_direct *current;
   struct block_symbol sym = {};
   int len;
   int directive_match;
 
+  /* All the symbols we found will be kept in this relational map between
+     the mangled name and the block_symbol found.  We do this so that GDB
+     won't incorrectly report an ambiguous symbol for finding the same
+     thing twice.  */
+
   /* First, try to find the symbol in the given namespace if requested.  */
   if (search_scope_first)
-    sym = cp_lookup_symbol_in_namespace (scope, name,
-					 block, domain, 1);
+    {
+      sym = cp_lookup_symbol_in_namespace (scope, name,
+					   block, domain, 1);
+      if (sym.symbol != nullptr)
+	found_symbols[sym.symbol->m_name] = sym;
+    }
 
-  if (sym.symbol != NULL)
-    return sym;
+  /* Due to a GCC bug, we need to know the boundaries of the current block
+     to know if a certain using directive is valid.  */
+  symtab_and_line boundary_sal = find_pc_line (block->end () - 1, 0);
 
   /* Go through the using directives.  If any of them add new names to
      the namespace we're searching in, see if we can find a match by
      applying them.  */
-
-  for (current = block_using (block);
+  for (current = block->get_using ();
        current != NULL;
        current = current->next)
     {
       const char **excludep;
 
+      /* If the using directive was below the place we are stopped at,
+	 do not use this directive.  */
+      if (!current->valid_line (boundary_sal.line))
+	continue;
       len = strlen (current->import_dest);
       directive_match = (search_parents
-                         ? (startswith (scope, current->import_dest)
-                            && (len == 0
-                                || scope[len] == ':'
+			 ? (startswith (scope, current->import_dest)
+			    && (len == 0
+				|| scope[len] == ':'
 				|| scope[len] == '\0'))
-                         : strcmp (scope, current->import_dest) == 0);
+			 : strcmp (scope, current->import_dest) == 0);
 
       /* If the import destination is the current scope or one of its
-         ancestors then it is applicable.  */
+	 ancestors then it is applicable.  */
       if (directive_match && !current->searched)
 	{
 	  /* Mark this import as searched so that the recursive call
@@ -437,7 +465,7 @@ cp_lookup_symbol_via_imports (const char
 	  if (declaration_only || sym.symbol != NULL || current->declaration)
 	    {
 	      if (sym.symbol != NULL)
-		return sym;
+		found_symbols[sym.symbol->m_name] = sym;
 
 	      continue;
 	    }
@@ -458,23 +486,57 @@ cp_lookup_symbol_via_imports (const char
 	      sym = cp_lookup_symbol_in_namespace (scope,
 						   current->import_src,
 						   block, domain, 1);
+	      found_symbols[sym.symbol->m_name] = sym;
 	    }
 	  else if (current->alias == NULL)
 	    {
 	      /* If this import statement creates no alias, pass
 		 current->inner as NAMESPACE to direct the search
 		 towards the imported namespace.  */
-	      sym = cp_lookup_symbol_via_imports (current->import_src,
-						  name, block,
-						  domain, 1, 0, 0);
+	      cp_lookup_symbol_via_imports (current->import_src, name,
+					    block, domain, 1, 0, 0,
+					    found_symbols);
 	    }
 
-	  if (sym.symbol != NULL)
-	    return sym;
 	}
     }
+}
 
-  return {};
+/* Wrapper for the actual cp_lookup_symbol_via_imports.  This wrapper sets
+   search_scope_first correctly and handles errors if needed.  */
+static struct block_symbol
+cp_lookup_symbol_via_imports (const char *scope,
+			      const char *name,
+			      const struct block *block,
+			      const domain_search_flags domain,
+			      const int declaration_only,
+			      const int search_parents)
+{
+  std::map<std::string, struct block_symbol> found_symbols;
+
+  cp_lookup_symbol_via_imports(scope, name, block, domain, 0,
+			       declaration_only, search_parents,
+			       found_symbols);
+
+  if (found_symbols.size () > 1)
+    {
+      auto itr = found_symbols.cbegin ();
+      std::string error_str = "Reference to \"";
+      error_str += name;
+      error_str += "\" is ambiguous, possibilities are: ";
+      error_str += itr->second.symbol->print_name ();
+      for (itr++; itr != found_symbols.end (); itr++)
+	{
+	  error_str += " and ";
+	  error_str += itr->second.symbol->print_name ();
+	}
+      error (_("%s"), error_str.c_str ());
+    }
+
+  if (found_symbols.size() == 1)
+    return found_symbols.cbegin ()->second;
+  else
+    return {};
 }
 
 /* Helper function that searches an array of symbols for one named NAME.  */
@@ -494,32 +556,28 @@ search_symbol_list (const char *name, in
   return NULL;
 }
 
-/* Like cp_lookup_symbol_via_imports, but if BLOCK is a function, it
-   searches through the template parameters of the function and the
-   function's type.  */
+/* Search for symbols whose name match NAME in the given SCOPE.
+   if BLOCK is a function, we'll search first through the template
+   parameters and function type. Afterwards (or if BLOCK is not a function)
+   search through imported directives using cp_lookup_symbol_via_imports.  */
 
 struct block_symbol
 cp_lookup_symbol_imports_or_template (const char *scope,
 				      const char *name,
 				      const struct block *block,
-				      const domain_enum domain)
+				      const domain_search_flags domain)
 {
-  struct symbol *function = BLOCK_FUNCTION (block);
-  struct block_symbol result;
+  struct symbol *function = block->function ();
 
-  if (symbol_lookup_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "cp_lookup_symbol_imports_or_template"
-			  " (%s, %s, %s, %s)\n",
-			  scope, name, host_address_to_string (block),
-			  domain_name (domain));
-    }
+  symbol_lookup_debug_printf
+    ("cp_lookup_symbol_imports_or_template (%s, %s, %s, %s)",
+     scope, name, host_address_to_string (block),
+     domain_name (domain).c_str ());
 
-  if (function != NULL && SYMBOL_LANGUAGE (function) == language_cplus)
+  if (function != NULL && function->language () == language_cplus)
     {
       /* Search the function's template parameters.  */
-      if (SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION (function))
+      if (function->is_cplus_template_function ())
 	{
 	  struct template_symbol *templ
 	    = (struct template_symbol *) function;
@@ -529,13 +587,9 @@ cp_lookup_symbol_imports_or_template (co
 
 	  if (sym != NULL)
 	    {
-	      if (symbol_lookup_debug)
-		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "cp_lookup_symbol_imports_or_template"
-				      " (...) = %s\n",
-				      host_address_to_string (sym));
-		}
+	      symbol_lookup_debug_printf
+		("cp_lookup_symbol_imports_or_template (...) = %s",
+		 host_address_to_string (sym));
 	      return (struct block_symbol) {sym, block};
 	    }
 	}
@@ -547,7 +601,7 @@ cp_lookup_symbol_imports_or_template (co
 	  struct type *context;
 	  std::string name_copy (function->natural_name ());
 	  const struct language_defn *lang = language_def (language_cplus);
-	  const struct block *parent = BLOCK_SUPERBLOCK (block);
+	  const struct block *parent = block->superblock ();
 	  struct symbol *sym;
 
 	  while (1)
@@ -574,27 +628,20 @@ cp_lookup_symbol_imports_or_template (co
 				      TYPE_TEMPLATE_ARGUMENTS (context));
 	      if (sym != NULL)
 		{
-		  if (symbol_lookup_debug)
-		    {
-		      fprintf_unfiltered
-			(gdb_stdlog,
-			 "cp_lookup_symbol_imports_or_template (...) = %s\n",
-			 host_address_to_string (sym));
-		    }
+		  symbol_lookup_debug_printf
+		    ("cp_lookup_symbol_imports_or_template (...) = %s",
+		     host_address_to_string (sym));
 		  return (struct block_symbol) {sym, parent};
 		}
 	    }
 	}
     }
 
-  result = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 1, 1);
-  if (symbol_lookup_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "cp_lookup_symbol_imports_or_template (...) = %s\n",
-			  result.symbol != NULL
-			  ? host_address_to_string (result.symbol) : "NULL");
-    }
+  struct block_symbol result
+    = cp_lookup_symbol_via_imports (scope, name, block, domain, 1, 1);
+  symbol_lookup_debug_printf ("cp_lookup_symbol_imports_or_template (...) = %s\n",
+		  result.symbol != nullptr
+		  ? host_address_to_string (result.symbol) : "NULL");
   return result;
 }
 
@@ -605,17 +652,17 @@ cp_lookup_symbol_imports_or_template (co
 static struct block_symbol
 cp_lookup_symbol_via_all_imports (const char *scope, const char *name,
 				  const struct block *block,
-				  const domain_enum domain)
+				  const domain_search_flags domain)
 {
   struct block_symbol sym;
 
   while (block != NULL)
     {
-      sym = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 0, 1);
-      if (sym.symbol)
+      sym = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 1);
+      if (sym.symbol != nullptr)
 	return sym;
 
-      block = BLOCK_SUPERBLOCK (block);
+      block = block->superblock ();
     }
 
   return {};
@@ -628,19 +675,15 @@ cp_lookup_symbol_via_all_imports (const
 
 struct block_symbol
 cp_lookup_symbol_namespace (const char *scope,
-                            const char *name,
-                            const struct block *block,
-                            const domain_enum domain)
+			    const char *name,
+			    const struct block *block,
+			    const domain_search_flags domain)
 {
   struct block_symbol sym;
 
-  if (symbol_lookup_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "cp_lookup_symbol_namespace (%s, %s, %s, %s)\n",
-			  scope, name, host_address_to_string (block),
-			  domain_name (domain));
-    }
+  symbol_lookup_debug_printf ("cp_lookup_symbol_namespace (%s, %s, %s, %s)",
+			      scope, name, host_address_to_string (block),
+			      domain_name (domain).c_str ());
 
   /* First, try to find the symbol in the given namespace.  */
   sym = cp_lookup_symbol_in_namespace (scope, name, block, domain, 1);
@@ -649,13 +692,9 @@ cp_lookup_symbol_namespace (const char *
   if (sym.symbol == NULL)
     sym = cp_lookup_symbol_via_all_imports (scope, name, block, domain);
 
-  if (symbol_lookup_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "cp_lookup_symbol_namespace (...) = %s\n",
-			  sym.symbol != NULL
-			    ? host_address_to_string (sym.symbol) : "NULL");
-    }
+  symbol_lookup_debug_printf ("cp_lookup_symbol_namespace (...) = %s",
+			      sym.symbol != NULL
+			      ? host_address_to_string (sym.symbol) : "NULL");
   return sym;
 }
 
@@ -678,7 +717,7 @@ static struct block_symbol
 lookup_namespace_scope (const struct language_defn *langdef,
 			const char *name,
 			const struct block *block,
-			const domain_enum domain,
+			const domain_search_flags domain,
 			const char *scope,
 			int scope_len)
 {
@@ -735,19 +774,15 @@ struct block_symbol
 cp_lookup_symbol_nonlocal (const struct language_defn *langdef,
 			   const char *name,
 			   const struct block *block,
-			   const domain_enum domain)
+			   const domain_search_flags domain)
 {
   struct block_symbol sym;
-  const char *scope = block_scope (block);
+  const char *scope = block == nullptr ? "" : block->scope ();
 
-  if (symbol_lookup_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "cp_lookup_symbol_non_local"
-			  " (%s, %s (scope %s), %s)\n",
-			  name, host_address_to_string (block), scope,
-			  domain_name (domain));
-    }
+  symbol_lookup_debug_printf
+    ("cp_lookup_symbol_non_local (%s, %s (scope %s), %s)",
+     name, host_address_to_string (block), scope,
+     domain_name (domain).c_str ());
 
   /* First, try to find the symbol in the given namespace, and all
      containing namespaces.  */
@@ -757,14 +792,10 @@ cp_lookup_symbol_nonlocal (const struct
   if (sym.symbol == NULL)
     sym = cp_lookup_symbol_via_all_imports (scope, name, block, domain);
 
-  if (symbol_lookup_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "cp_lookup_symbol_nonlocal (...) = %s\n",
-			  (sym.symbol != NULL
-			   ? host_address_to_string (sym.symbol)
-			   : "NULL"));
-    }
+  symbol_lookup_debug_printf ("cp_lookup_symbol_nonlocal (...) = %s",
+			      (sym.symbol != NULL
+			       ? host_address_to_string (sym.symbol)
+			       : "NULL"));
   return sym;
 }
 
@@ -780,12 +811,13 @@ cp_find_type_baseclass_by_name (struct t
   for (i = 0; i < TYPE_N_BASECLASSES (parent_type); ++i)
     {
       struct type *type = check_typedef (TYPE_BASECLASS (parent_type, i));
-      const char *base_name = TYPE_BASECLASS_NAME (parent_type, i);
+      const char *tdef_name = TYPE_BASECLASS_NAME (parent_type, i);
+      const char *base_name = type->name ();
 
       if (base_name == NULL)
 	continue;
 
-      if (streq (base_name, name))
+      if (streq (tdef_name, name) || streq (base_name, name))
 	return type;
 
       type = cp_find_type_baseclass_by_name (type, name);
@@ -801,7 +833,8 @@ cp_find_type_baseclass_by_name (struct t
 
 static struct block_symbol
 find_symbol_in_baseclass (struct type *parent_type, const char *name,
-			  const struct block *block, const domain_enum domain,
+			  const struct block *block,
+			  const domain_search_flags domain,
 			  int is_in_anonymous)
 {
   int i;
@@ -844,7 +877,7 @@ cp_lookup_nested_symbol_1 (struct type *
 			   const char *nested_name,
 			   const char *concatenated_name,
 			   const struct block *block,
-			   const domain_enum domain,
+			   const domain_search_flags domain,
 			   int basic_lookup, int is_in_anonymous)
 {
   struct block_symbol sym;
@@ -908,7 +941,7 @@ struct block_symbol
 cp_lookup_nested_symbol (struct type *parent_type,
 			 const char *nested_name,
 			 const struct block *block,
-			 const domain_enum domain)
+			 const domain_search_flags domain)
 {
   /* type_name_or_error provides better error reporting using the
      original type.  */
@@ -918,16 +951,15 @@ cp_lookup_nested_symbol (struct type *pa
 
   if (symbol_lookup_debug)
     {
-      const char *type_name = TYPE_NAME (saved_parent_type);
+      const char *type_name = saved_parent_type->name ();
 
-      fprintf_unfiltered (gdb_stdlog,
-			  "cp_lookup_nested_symbol (%s, %s, %s, %s)\n",
-			  type_name != NULL ? type_name : "unnamed",
-			  nested_name, host_address_to_string (block),
-			  domain_name (domain));
+      symbol_lookup_debug_printf ("cp_lookup_nested_symbol (%s, %s, %s, %s)",
+				  type_name != NULL ? type_name : "unnamed",
+				  nested_name, host_address_to_string (block),
+				  domain_name (domain).c_str ());
     }
 
-  switch (TYPE_CODE (parent_type))
+  switch (parent_type->code ())
     {
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_NAMESPACE:
@@ -935,7 +967,7 @@ cp_lookup_nested_symbol (struct type *pa
     case TYPE_CODE_ENUM:
     /* NOTE: Handle modules here as well, because Fortran is re-using the C++
        specific code to lookup nested symbols in modules, by calling the
-       function pointer la_lookup_symbol_nonlocal, which ends up here.  */
+       method lookup_symbol_nonlocal, which ends up here.  */
     case TYPE_CODE_MODULE:
       {
 	int size;
@@ -954,30 +986,21 @@ cp_lookup_nested_symbol (struct type *pa
 					 concatenated_name, block, domain,
 					 1, is_in_anonymous);
 
-	if (symbol_lookup_debug)
-	  {
-	    fprintf_unfiltered (gdb_stdlog,
-				"cp_lookup_nested_symbol (...) = %s\n",
-				(sym.symbol != NULL
-				 ? host_address_to_string (sym.symbol)
-				 : "NULL"));
-	  }
+	symbol_lookup_debug_printf ("cp_lookup_nested_symbol (...) = %s",
+				    (sym.symbol != NULL
+				     ? host_address_to_string (sym.symbol)
+				     : "NULL"));
 	return sym;
       }
 
     case TYPE_CODE_FUNC:
     case TYPE_CODE_METHOD:
-      if (symbol_lookup_debug)
-	{
-	  fprintf_unfiltered (gdb_stdlog,
-			      "cp_lookup_nested_symbol (...) = NULL"
-			      " (func/method)\n");
-	}
+      symbol_lookup_debug_printf
+	("cp_lookup_nested_symbol (...) = NULL (func/method)");
       return {};
 
     default:
-      internal_error (__FILE__, __LINE__,
-		      _("cp_lookup_nested_symbol called "
+      internal_error (_("cp_lookup_nested_symbol called "
 			"on a non-aggregate type."));
     }
 }
@@ -1012,7 +1035,11 @@ cp_lookup_transparent_type (const char *
 
   /* If that doesn't work and we're within a namespace, look there
      instead.  */
-  scope = block_scope (get_selected_block (0));
+  const block *block = get_selected_block (0);
+  if (block == nullptr)
+    return nullptr;
+
+  scope = block->scope ();
 
   if (scope[0] == '\0')
     return NULL;
@@ -1058,11 +1085,12 @@ cp_lookup_transparent_type_loop (const c
 static void
 maintenance_cplus_namespace (const char *args, int from_tty)
 {
-  printf_unfiltered (_("The `maint namespace' command was removed.\n"));
+  gdb_printf (_("The `maint namespace' command was removed.\n"));
 }
 
+void _initialize_cp_namespace ();
 void
-_initialize_cp_namespace (void)
+_initialize_cp_namespace ()
 {
   struct cmd_list_element *cmd;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-support.c ./gdb/cp-support.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-support.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cp-support.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Helper routines for C++ support in GDB.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    Contributed by MontaVista Software.
 
@@ -20,6 +20,7 @@
 
 #include "defs.h"
 #include "cp-support.h"
+#include "language.h"
 #include "demangle.h"
 #include "gdbcmd.h"
 #include "dictionary.h"
@@ -35,12 +36,14 @@
 #include "namespace.h"
 #include <signal.h>
 #include "gdbsupport/gdb_setjmp.h"
-#include "safe-ctype.h"
+#include "gdbsupport/gdb-safe-ctype.h"
 #include "gdbsupport/selftest.h"
 #include "gdbsupport/gdb-sigmask.h"
 #include <atomic>
 #include "event-top.h"
 #include "run-on-main-thread.h"
+#include "typeprint.h"
+#include "inferior.h"
 
 #define d_left(dc) (dc)->u.s_binary.left
 #define d_right(dc) (dc)->u.s_binary.right
@@ -70,18 +73,16 @@ static void add_symbol_overload_list_qua
 
 struct cmd_list_element *maint_cplus_cmd_list = NULL;
 
-/* A list of typedefs which should not be substituted by replace_typedefs.  */
-static const char * const ignore_typedefs[] =
-  {
-    "std::istream", "std::iostream", "std::ostream", "std::string"
-  };
-
 static void
   replace_typedefs (struct demangle_parse_info *info,
 		    struct demangle_component *ret_comp,
 		    canonicalization_ftype *finder,
 		    void *data);
 
+static struct demangle_component *
+  gdb_cplus_demangle_v3_components (const char *mangled,
+				    int options, void **mem);
+
 /* A convenience function to copy STRING into OBSTACK, returning a pointer
    to the newly allocated string and saving the number of bytes saved in LEN.
 
@@ -146,18 +147,11 @@ inspect_type (struct demangle_parse_info
   memcpy (name, ret_comp->u.s_name.s, ret_comp->u.s_name.len);
   name[ret_comp->u.s_name.len] = '\0';
 
-  /* Ignore any typedefs that should not be substituted.  */
-  for (int i = 0; i < ARRAY_SIZE (ignore_typedefs); ++i)
-    {
-      if (strcmp (name, ignore_typedefs[i]) == 0)
-	return 0;
-    }
-
   sym = NULL;
 
   try
     {
-      sym = lookup_symbol (name, 0, VAR_DOMAIN, 0).symbol;
+      sym = lookup_symbol (name, 0, SEARCH_VFT, 0).symbol;
     }
   catch (const gdb_exception &except)
     {
@@ -166,7 +160,7 @@ inspect_type (struct demangle_parse_info
 
   if (sym != NULL)
     {
-      struct type *otype = SYMBOL_TYPE (sym);
+      struct type *otype = sym->type ();
 
       if (finder != NULL)
 	{
@@ -183,8 +177,8 @@ inspect_type (struct demangle_parse_info
 	}
 
       /* If the type is a typedef or namespace alias, replace it.  */
-      if (TYPE_CODE (otype) == TYPE_CODE_TYPEDEF
-	  || TYPE_CODE (otype) == TYPE_CODE_NAMESPACE)
+      if (otype->code () == TYPE_CODE_TYPEDEF
+	  || otype->code () == TYPE_CODE_NAMESPACE)
 	{
 	  long len;
 	  int is_anon;
@@ -207,23 +201,23 @@ inspect_type (struct demangle_parse_info
 
 	     If the symbol is typedef and its type name is the same
 	     as the symbol's name, e.g., "typedef struct foo foo;".  */
-	  if (TYPE_NAME (type) != nullptr
-	      && strcmp (TYPE_NAME (type), name) == 0)
+	  if (type->name () != nullptr
+	      && strcmp (type->name (), name) == 0)
 	    return 0;
 
-	  is_anon = (TYPE_NAME (type) == NULL
-		     && (TYPE_CODE (type) == TYPE_CODE_ENUM
-			 || TYPE_CODE (type) == TYPE_CODE_STRUCT
-			 || TYPE_CODE (type) == TYPE_CODE_UNION));
+	  is_anon = (type->name () == NULL
+		     && (type->code () == TYPE_CODE_ENUM
+			 || type->code () == TYPE_CODE_STRUCT
+			 || type->code () == TYPE_CODE_UNION));
 	  if (is_anon)
 	    {
 	      struct type *last = otype;
 
 	      /* Find the last typedef for the type.  */
-	      while (TYPE_TARGET_TYPE (last) != NULL
-		     && (TYPE_CODE (TYPE_TARGET_TYPE (last))
+	      while (last->target_type () != NULL
+		     && (last->target_type ()->code ()
 			 == TYPE_CODE_TYPEDEF))
-		last = TYPE_TARGET_TYPE (last);
+		last = last->target_type ();
 
 	      /* If there is only one typedef for this anonymous type,
 		 do not substitute it.  */
@@ -238,7 +232,14 @@ inspect_type (struct demangle_parse_info
 	  string_file buf;
 	  try
 	    {
-	      type_print (type, "", &buf, -1);
+	      /* Avoid using the current language.  If the language is
+		 C, and TYPE is a struct/class, the printed type is
+		 prefixed with "struct " or "class ", which we don't
+		 want when we're expanding a C++ typedef.  Print using
+		 the type symbol's language to expand a C++ typedef
+		 the C++ way even if the current language is C.  */
+	      const language_defn *lang = language_def (sym->language ());
+	      lang->print_type (type, "", &buf, -1, 0, &type_print_raw_options);
 	    }
 	  /* If type_print threw an exception, there is little point
 	     in continuing, so just bow out gracefully.  */
@@ -274,12 +275,13 @@ inspect_type (struct demangle_parse_info
 
 		 Canonicalize the name again, and store it in the
 		 current node (RET_COMP).  */
-	      std::string canon = cp_canonicalize_string_no_typedefs (name);
+	      gdb::unique_xmalloc_ptr<char> canon
+		= cp_canonicalize_string_no_typedefs (name);
 
-	      if (!canon.empty ())
+	      if (canon != nullptr)
 		{
 		  /* Copy the canonicalization into the obstack.  */
-		  name = copy_string_to_obstack (&info->obstack, canon.c_str (), &len);
+		  name = copy_string_to_obstack (&info->obstack, canon.get (), &len);
 		}
 
 	      ret_comp->u.s_name.s = name;
@@ -293,6 +295,42 @@ inspect_type (struct demangle_parse_info
   return 0;
 }
 
+/* Helper for replace_typedefs_qualified_name to handle
+   DEMANGLE_COMPONENT_TEMPLATE.  TMPL is the template node.  BUF is
+   the buffer that holds the qualified name being built by
+   replace_typedefs_qualified_name.  REPL is the node that will be
+   rewritten as a DEMANGLE_COMPONENT_NAME node holding the 'template
+   plus template arguments' name with typedefs replaced.  */
+
+static bool
+replace_typedefs_template (struct demangle_parse_info *info,
+			   string_file &buf,
+			   struct demangle_component *tmpl,
+			   struct demangle_component *repl,
+			   canonicalization_ftype *finder,
+			   void *data)
+{
+  demangle_component *tmpl_arglist = d_right (tmpl);
+
+  /* Replace typedefs in the template argument list.  */
+  replace_typedefs (info, tmpl_arglist, finder, data);
+
+  /* Convert 'template + replaced template argument list' to a string
+     and replace the REPL node.  */
+  gdb::unique_xmalloc_ptr<char> tmpl_str = cp_comp_to_string (tmpl, 100);
+  if (tmpl_str == nullptr)
+    {
+      /* If something went astray, abort typedef substitutions.  */
+      return false;
+    }
+  buf.puts (tmpl_str.get ());
+
+  repl->type = DEMANGLE_COMPONENT_NAME;
+  repl->u.s_name.s = obstack_strdup (&info->obstack, buf.string ());
+  repl->u.s_name.len = buf.size ();
+  return true;
+}
+
 /* Replace any typedefs appearing in the qualified name
    (DEMANGLE_COMPONENT_QUAL_NAME) represented in RET_COMP for the name parse
    given in INFO.  */
@@ -313,6 +351,29 @@ replace_typedefs_qualified_name (struct
      substituted name.  */
   while (comp->type == DEMANGLE_COMPONENT_QUAL_NAME)
     {
+      if (d_left (comp)->type == DEMANGLE_COMPONENT_TEMPLATE)
+	{
+	  /* Convert 'template + replaced template argument list' to a
+	     string and replace the top DEMANGLE_COMPONENT_QUAL_NAME
+	     node.  */
+	  if (!replace_typedefs_template (info, buf,
+					  d_left (comp), d_left (ret_comp),
+					  finder, data))
+	    return;
+
+	  buf.clear ();
+	  d_right (ret_comp) = d_right (comp);
+	  comp = ret_comp;
+
+	  /* Fallback to DEMANGLE_COMPONENT_NAME processing.  We want
+	     to call inspect_type for this template, in case we have a
+	     template alias, like:
+	       template<typename T> using alias = base<int, t>;
+	     in which case we want inspect_type to do a replacement like:
+	       alias<int> -> base<int, int>
+	  */
+	}
+
       if (d_left (comp)->type == DEMANGLE_COMPONENT_NAME)
 	{
 	  struct demangle_component newobj;
@@ -369,11 +430,20 @@ replace_typedefs_qualified_name (struct
       comp = d_right (comp);
     }
 
-  /* If the next component is DEMANGLE_COMPONENT_NAME, save the qualified
-     name assembled above and append the name given by COMP.  Then use this
-     reassembled name to check for a typedef.  */
-
-  if (comp->type == DEMANGLE_COMPONENT_NAME)
+  /* If the next component is DEMANGLE_COMPONENT_TEMPLATE or
+     DEMANGLE_COMPONENT_NAME, save the qualified name assembled above
+     and append the name given by COMP.  Then use this reassembled
+     name to check for a typedef.  */
+
+  if (comp->type == DEMANGLE_COMPONENT_TEMPLATE)
+    {
+      /* Replace the top (DEMANGLE_COMPONENT_QUAL_NAME) node with a
+	 DEMANGLE_COMPONENT_NAME node containing the whole name.  */
+      if (!replace_typedefs_template (info, buf, comp, ret_comp, finder, data))
+	return;
+      inspect_type (info, ret_comp, finder, data);
+    }
+  else if (comp->type == DEMANGLE_COMPONENT_NAME)
     {
       buf.write (comp->u.s_name.s, comp->u.s_name.len);
 
@@ -435,7 +505,7 @@ replace_typedefs (struct demangle_parse_
 	      try
 		{
 		  sym = lookup_symbol (local_name.get (), 0,
-				       VAR_DOMAIN, 0).symbol;
+				       SEARCH_VFT, 0).symbol;
 		}
 	      catch (const gdb_exception &except)
 		{
@@ -443,7 +513,7 @@ replace_typedefs (struct demangle_parse_
 
 	      if (sym != NULL)
 		{
-		  struct type *otype = SYMBOL_TYPE (sym);
+		  struct type *otype = sym->type ();
 		  const char *new_name = (*finder) (otype, data);
 
 		  if (new_name != NULL)
@@ -461,7 +531,7 @@ replace_typedefs (struct demangle_parse_
 	{
 	case DEMANGLE_COMPONENT_ARGLIST:
 	  check_cv_qualifiers (ret_comp);
-	  /* Fall through */
+	  [[fallthrough]];
 
 	case DEMANGLE_COMPONENT_FUNCTION_TYPE:
 	case DEMANGLE_COMPONENT_TEMPLATE:
@@ -506,16 +576,15 @@ replace_typedefs (struct demangle_parse_
 
 /* Parse STRING and convert it to canonical form, resolving any
    typedefs.  If parsing fails, or if STRING is already canonical,
-   return the empty string.  Otherwise return the canonical form.  If
+   return nullptr.  Otherwise return the canonical form.  If
    FINDER is not NULL, then type components are passed to FINDER to be
    looked up.  DATA is passed verbatim to FINDER.  */
 
-std::string
+gdb::unique_xmalloc_ptr<char>
 cp_canonicalize_string_full (const char *string,
 			     canonicalization_ftype *finder,
 			     void *data)
 {
-  std::string ret;
   unsigned int estimated_len;
   std::unique_ptr<demangle_parse_info> info;
 
@@ -531,41 +600,42 @@ cp_canonicalize_string_full (const char
 							    estimated_len);
       gdb_assert (us);
 
-      ret = us.get ();
       /* Finally, compare the original string with the computed
 	 name, returning NULL if they are the same.  */
-      if (ret == string)
-	return std::string ();
+      if (strcmp (us.get (), string) == 0)
+	return nullptr;
+
+      return us;
     }
 
-  return ret;
+  return nullptr;
 }
 
 /* Like cp_canonicalize_string_full, but always passes NULL for
    FINDER.  */
 
-std::string
+gdb::unique_xmalloc_ptr<char>
 cp_canonicalize_string_no_typedefs (const char *string)
 {
   return cp_canonicalize_string_full (string, NULL, NULL);
 }
 
 /* Parse STRING and convert it to canonical form.  If parsing fails,
-   or if STRING is already canonical, return the empty string.
+   or if STRING is already canonical, return nullptr.
    Otherwise return the canonical form.  */
 
-std::string
+gdb::unique_xmalloc_ptr<char>
 cp_canonicalize_string (const char *string)
 {
   std::unique_ptr<demangle_parse_info> info;
   unsigned int estimated_len;
 
   if (cp_already_canonical (string))
-    return std::string ();
+    return nullptr;
 
   info = cp_demangled_name_to_comp (string, NULL);
   if (info == NULL)
-    return std::string ();
+    return nullptr;
 
   estimated_len = strlen (string) * 2;
   gdb::unique_xmalloc_ptr<char> us (cp_comp_to_string (info->tree,
@@ -575,15 +645,13 @@ cp_canonicalize_string (const char *stri
     {
       warning (_("internal error: string \"%s\" failed to be canonicalized"),
 	       string);
-      return std::string ();
+      return nullptr;
     }
 
-  std::string ret (us.get ());
-
-  if (ret == string)
-    return std::string ();
+  if (strcmp (us.get (), string) == 0)
+    return nullptr;
 
-  return ret;
+  return us;
 }
 
 /* Convert a mangled name to a demangle_component tree.  *MEMORY is
@@ -594,21 +662,20 @@ cp_canonicalize_string (const char *stri
 
 static std::unique_ptr<demangle_parse_info>
 mangled_name_to_comp (const char *mangled_name, int options,
-		      void **memory, char **demangled_p)
+		      void **memory,
+		      gdb::unique_xmalloc_ptr<char> *demangled_p)
 {
-  char *demangled_name;
-
   /* If it looks like a v3 mangled name, then try to go directly
      to trees.  */
   if (mangled_name[0] == '_' && mangled_name[1] == 'Z')
     {
       struct demangle_component *ret;
 
-      ret = cplus_demangle_v3_components (mangled_name,
-					  options, memory);
+      ret = gdb_cplus_demangle_v3_components (mangled_name,
+					      options, memory);
       if (ret)
 	{
-	  std::unique_ptr<demangle_parse_info> info (new demangle_parse_info);
+	  auto info = std::make_unique<demangle_parse_info> ();
 	  info->tree = ret;
 	  *demangled_p = NULL;
 	  return info;
@@ -617,22 +684,20 @@ mangled_name_to_comp (const char *mangle
 
   /* If it doesn't, or if that failed, then try to demangle the
      name.  */
-  demangled_name = gdb_demangle (mangled_name, options);
+  gdb::unique_xmalloc_ptr<char> demangled_name = gdb_demangle (mangled_name,
+							       options);
   if (demangled_name == NULL)
    return NULL;
   
   /* If we could demangle the name, parse it to build the component
      tree.  */
   std::unique_ptr<demangle_parse_info> info
-    = cp_demangled_name_to_comp (demangled_name, NULL);
+    = cp_demangled_name_to_comp (demangled_name.get (), NULL);
 
   if (info == NULL)
-    {
-      xfree (demangled_name);
-      return NULL;
-    }
+    return NULL;
 
-  *demangled_p = demangled_name;
+  *demangled_p = std::move (demangled_name);
   return info;
 }
 
@@ -642,7 +707,7 @@ char *
 cp_class_name_from_physname (const char *physname)
 {
   void *storage = NULL;
-  char *demangled_name = NULL;
+  gdb::unique_xmalloc_ptr<char> demangled_name;
   gdb::unique_xmalloc_ptr<char> ret;
   struct demangle_component *ret_comp, *prev_comp, *cur_comp;
   std::unique_ptr<demangle_parse_info> info;
@@ -668,8 +733,8 @@ cp_class_name_from_physname (const char
       case DEMANGLE_COMPONENT_RESTRICT_THIS:
       case DEMANGLE_COMPONENT_VOLATILE_THIS:
       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
-        ret_comp = d_left (ret_comp);
-        break;
+	ret_comp = d_left (ret_comp);
+	break;
       default:
 	done = 1;
 	break;
@@ -696,8 +761,8 @@ cp_class_name_from_physname (const char
       case DEMANGLE_COMPONENT_QUAL_NAME:
       case DEMANGLE_COMPONENT_LOCAL_NAME:
 	prev_comp = cur_comp;
-        cur_comp = d_right (cur_comp);
-        break;
+	cur_comp = d_right (cur_comp);
+	break;
       case DEMANGLE_COMPONENT_TEMPLATE:
       case DEMANGLE_COMPONENT_NAME:
       case DEMANGLE_COMPONENT_CTOR:
@@ -722,7 +787,6 @@ cp_class_name_from_physname (const char
     }
 
   xfree (storage);
-  xfree (demangled_name);
   return ret.release ();
 }
 
@@ -744,11 +808,11 @@ unqualified_name_from_comp (struct deman
       {
       case DEMANGLE_COMPONENT_QUAL_NAME:
       case DEMANGLE_COMPONENT_LOCAL_NAME:
-        ret_comp = d_right (ret_comp);
-        break;
+	ret_comp = d_right (ret_comp);
+	break;
       case DEMANGLE_COMPONENT_TYPED_NAME:
-        ret_comp = d_left (ret_comp);
-        break;
+	ret_comp = d_left (ret_comp);
+	break;
       case DEMANGLE_COMPONENT_TEMPLATE:
 	gdb_assert (last_template == NULL);
 	last_template = ret_comp;
@@ -761,8 +825,8 @@ unqualified_name_from_comp (struct deman
       case DEMANGLE_COMPONENT_RESTRICT_THIS:
       case DEMANGLE_COMPONENT_VOLATILE_THIS:
       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
-        ret_comp = d_left (ret_comp);
-        break;
+	ret_comp = d_left (ret_comp);
+	break;
       case DEMANGLE_COMPONENT_NAME:
       case DEMANGLE_COMPONENT_CTOR:
       case DEMANGLE_COMPONENT_DTOR:
@@ -790,7 +854,7 @@ char *
 method_name_from_physname (const char *physname)
 {
   void *storage = NULL;
-  char *demangled_name = NULL;
+  gdb::unique_xmalloc_ptr<char> demangled_name;
   gdb::unique_xmalloc_ptr<char> ret;
   struct demangle_component *ret_comp;
   std::unique_ptr<demangle_parse_info> info;
@@ -808,7 +872,6 @@ method_name_from_physname (const char *p
     ret = cp_comp_to_string (ret_comp, 10);
 
   xfree (storage);
-  xfree (demangled_name);
   return ret.release ();
 }
 
@@ -869,8 +932,8 @@ cp_remove_params_1 (const char *demangle
       case DEMANGLE_COMPONENT_RESTRICT_THIS:
       case DEMANGLE_COMPONENT_VOLATILE_THIS:
       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
-        ret_comp = d_left (ret_comp);
-        break;
+	ret_comp = d_left (ret_comp);
+	break;
       default:
 	done = true;
 	break;
@@ -1153,7 +1216,7 @@ overload_list_add_symbol (struct symbol
 {
   /* If there is no type information, we can't do anything, so
      skip.  */
-  if (SYMBOL_TYPE (sym) == NULL)
+  if (sym->type () == NULL)
     return;
 
   /* skip any symbols that we've already considered.  */
@@ -1212,12 +1275,9 @@ add_symbol_overload_list_block (const ch
 				const struct block *block,
 				std::vector<symbol *> *overload_list)
 {
-  struct block_iterator iter;
-  struct symbol *sym;
-
   lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
 
-  ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
+  for (struct symbol *sym : block_iterator_range (block, &lookup_name))
     overload_list_add_symbol (sym, name, overload_list);
 }
 
@@ -1245,15 +1305,17 @@ add_symbol_overload_list_namespace (cons
     }
 
   /* Look in the static block.  */
-  block = block_static_block (get_selected_block (0));
-  if (block)
-    add_symbol_overload_list_block (name, block, overload_list);
-
-  /* Look in the global block.  */
-  block = block_global_block (block);
-  if (block)
-    add_symbol_overload_list_block (name, block, overload_list);
-
+  block = get_selected_block (0);
+  block = block == nullptr ? nullptr : block->static_block ();
+  if (block != nullptr)
+    {
+      add_symbol_overload_list_block (name, block, overload_list);
+
+      /* Look in the global block.  */
+      block = block->global_block ();
+      if (block)
+	add_symbol_overload_list_block (name, block, overload_list);
+    }
 }
 
 /* Search the namespace of the given type and namespace of and public
@@ -1268,18 +1330,17 @@ add_symbol_overload_list_adl_namespace (
   const char *type_name;
   int i, prefix_len;
 
-  while (TYPE_CODE (type) == TYPE_CODE_PTR
-	 || TYPE_IS_REFERENCE (type)
-         || TYPE_CODE (type) == TYPE_CODE_ARRAY
-         || TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
+  while (type->is_pointer_or_reference ()
+	 || type->code () == TYPE_CODE_ARRAY
+	 || type->code () == TYPE_CODE_TYPEDEF)
     {
-      if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
-	type = check_typedef(type);
+      if (type->code () == TYPE_CODE_TYPEDEF)
+	type = check_typedef (type);
       else
-	type = TYPE_TARGET_TYPE (type);
+	type = type->target_type ();
     }
 
-  type_name = TYPE_NAME (type);
+  type_name = type->name ();
 
   if (type_name == NULL)
     return;
@@ -1297,7 +1358,7 @@ add_symbol_overload_list_adl_namespace (
     }
 
   /* Check public base type */
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+  if (type->code () == TYPE_CODE_STRUCT)
     for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
       {
 	if (BASETYPE_VIA_PUBLIC (type, i))
@@ -1339,8 +1400,8 @@ add_symbol_overload_list_using (const ch
 
   for (block = get_selected_block (0);
        block != NULL;
-       block = BLOCK_SUPERBLOCK (block))
-    for (current = block_using (block);
+       block = block->superblock ())
+    for (current = block->get_using ();
 	current != NULL;
 	current = current->next)
       {
@@ -1348,12 +1409,12 @@ add_symbol_overload_list_using (const ch
 	if (current->searched)
 	  continue;
 
-        /* If this is a namespace alias or imported declaration ignore
+	/* If this is a namespace alias or imported declaration ignore
 	   it.  */
-        if (current->alias != NULL || current->declaration != NULL)
-          continue;
+	if (current->alias != NULL || current->declaration != NULL)
+	  continue;
 
-        if (strcmp (the_namespace, current->import_dest) == 0)
+	if (strcmp (the_namespace, current->import_dest) == 0)
 	  {
 	    /* Mark this import as searched so that the recursive call
 	       does not search it again.  */
@@ -1379,50 +1440,54 @@ static void
 add_symbol_overload_list_qualified (const char *func_name,
 				    std::vector<symbol *> *overload_list)
 {
-  const struct block *b, *surrounding_static_block = 0;
+  const struct block *surrounding_static_block = 0;
 
   /* Look through the partial symtabs for all symbols which begin by
      matching FUNC_NAME.  Make sure we read that symbol table in.  */
 
   for (objfile *objf : current_program_space->objfiles ())
-    {
-      if (objf->sf)
-	objf->sf->qf->expand_symtabs_for_function (objf, func_name);
-    }
+    objf->expand_symtabs_for_function (func_name);
 
   /* Search upwards from currently selected frame (so that we can
      complete on local vars.  */
 
-  for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
+  for (const block *b = get_selected_block (0);
+       b != nullptr;
+       b = b->superblock ())
     add_symbol_overload_list_block (func_name, b, overload_list);
 
-  surrounding_static_block = block_static_block (get_selected_block (0));
+  surrounding_static_block = get_selected_block (0);
+  surrounding_static_block = (surrounding_static_block == nullptr
+			      ? nullptr
+			      : surrounding_static_block->static_block ());
 
   /* Go through the symtabs and check the externs and statics for
      symbols which match.  */
 
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      for (compunit_symtab *cust : objfile->compunits ())
-	{
-	  QUIT;
-	  b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), GLOBAL_BLOCK);
-	  add_symbol_overload_list_block (func_name, b, overload_list);
-	}
-    }
+  const block *block = get_selected_block (0);
+  struct objfile *current_objfile = block ? block->objfile () : nullptr;
 
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      for (compunit_symtab *cust : objfile->compunits ())
-	{
-	  QUIT;
-	  b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), STATIC_BLOCK);
-	  /* Don't do this block twice.  */
-	  if (b == surrounding_static_block)
-	    continue;
-	  add_symbol_overload_list_block (func_name, b, overload_list);
-	}
-    }
+  gdbarch_iterate_over_objfiles_in_search_order
+    (current_objfile ? current_objfile->arch () : current_inferior ()->arch (),
+     [func_name, surrounding_static_block, &overload_list]
+     (struct objfile *obj)
+       {
+	 for (compunit_symtab *cust : obj->compunits ())
+	   {
+	     QUIT;
+	     const struct block *b = cust->blockvector ()->global_block ();
+	     add_symbol_overload_list_block (func_name, b, overload_list);
+
+	     b = cust->blockvector ()->static_block ();
+	     /* Don't do this block twice.  */
+	     if (b == surrounding_static_block)
+	       continue;
+
+	     add_symbol_overload_list_block (func_name, b, overload_list);
+	   }
+
+	 return 0;
+       }, current_objfile);
 }
 
 /* Lookup the rtti type for a class name.  */
@@ -1433,9 +1498,9 @@ cp_lookup_rtti_type (const char *name, c
   struct symbol * rtti_sym;
   struct type * rtti_type;
 
-  /* Use VAR_DOMAIN here as NAME may be a typedef.  PR 18141, 18417.
-     Classes "live" in both STRUCT_DOMAIN and VAR_DOMAIN.  */
-  rtti_sym = lookup_symbol (name, block, VAR_DOMAIN, NULL).symbol;
+  rtti_sym = lookup_symbol (name, block,
+			    SEARCH_TYPE_DOMAIN | SEARCH_STRUCT_DOMAIN,
+			    nullptr).symbol;
 
   if (rtti_sym == NULL)
     {
@@ -1443,15 +1508,15 @@ cp_lookup_rtti_type (const char *name, c
       return NULL;
     }
 
-  if (SYMBOL_CLASS (rtti_sym) != LOC_TYPEDEF)
+  if (rtti_sym->aclass () != LOC_TYPEDEF)
     {
       warning (_("RTTI symbol for class '%s' is not a type"), name);
       return NULL;
     }
 
-  rtti_type = check_typedef (SYMBOL_TYPE (rtti_sym));
+  rtti_type = check_typedef (rtti_sym->type ());
 
-  switch (TYPE_CODE (rtti_type))
+  switch (rtti_type->code ())
     {
     case TYPE_CODE_STRUCT:
       break;
@@ -1525,9 +1590,9 @@ report_failed_demangle (const char *name
 
       begin_line ();
       if (core_dump_allowed)
-	fprintf_unfiltered (gdb_stderr,
-			    _("%s\nAttempting to dump core.\n"),
-			    long_msg.c_str ());
+	gdb_printf (gdb_stderr,
+		    _("%s\nAttempting to dump core.\n"),
+		    long_msg.c_str ());
       else
 	warn_cant_dump_core (long_msg.c_str ());
 
@@ -1541,18 +1606,17 @@ report_failed_demangle (const char *name
 
 /* A wrapper for bfd_demangle.  */
 
-char *
+gdb::unique_xmalloc_ptr<char>
 gdb_demangle (const char *name, int options)
 {
-  char *result = NULL;
+  gdb::unique_xmalloc_ptr<char> result;
   int crash_signal = 0;
 
 #ifdef HAVE_WORKING_FORK
-  scoped_restore restore_segv
-    = make_scoped_restore (&thread_local_segv_handler,
-			   catch_demangler_crashes
-			   ? gdb_demangle_signal_handler
-			   : nullptr);
+  scoped_segv_handler_restore restore_segv
+    (catch_demangler_crashes
+     ? gdb_demangle_signal_handler
+     : nullptr);
 
   bool core_dump_allowed = gdb_demangle_attempt_core_dump;
   SIGJMP_BUF jmp_buf;
@@ -1561,7 +1625,7 @@ gdb_demangle (const char *name, int opti
   if (catch_demangler_crashes)
     {
       /* The signal handler may keep the signal blocked when we longjmp out
-         of it.  If we have sigprocmask, we can use it to unblock the signal
+	 of it.  If we have sigprocmask, we can use it to unblock the signal
 	 afterwards and we can avoid the performance overhead of saving the
 	 signal mask just in case the signal gets triggered.  Otherwise, just
 	 tell sigsetjmp to save the mask.  */
@@ -1574,13 +1638,13 @@ gdb_demangle (const char *name, int opti
 #endif
 
   if (crash_signal == 0)
-    result = bfd_demangle (NULL, name, options);
+    result.reset (bfd_demangle (NULL, name, options | DMGL_VERBOSE));
 
 #ifdef HAVE_WORKING_FORK
   if (catch_demangler_crashes)
     {
       if (crash_signal != 0)
-        {
+	{
 #ifdef HAVE_SIGPROCMASK
 	  /* If we got the signal, SIGSEGV may still be blocked; restore it.  */
 	  sigset_t segv_sig_set;
@@ -1592,15 +1656,15 @@ gdb_demangle (const char *name, int opti
 	  /* If there was a failure, we can't report it here, because
 	     we might be in a background thread.  Instead, arrange for
 	     the reporting to happen on the main thread.  */
-          std::string copy = name;
-          run_on_main_thread ([=] ()
-            {
-              report_failed_demangle (copy.c_str (), core_dump_allowed,
-                                      crash_signal);
-            });
+	  std::string copy = name;
+	  run_on_main_thread ([=, copy = std::move (copy)] ()
+	    {
+	      report_failed_demangle (copy.c_str (), core_dump_allowed,
+				      crash_signal);
+	    });
 
-          result = NULL;
-        }
+	  result = NULL;
+	}
     }
 #endif
 
@@ -1609,11 +1673,24 @@ gdb_demangle (const char *name, int opti
 
 /* See cp-support.h.  */
 
-int
-gdb_sniff_from_mangled_name (const char *mangled, char **demangled)
+char *
+gdb_cplus_demangle_print (int options,
+			  struct demangle_component *tree,
+			  int estimated_length,
+			  size_t *p_allocated_size)
 {
-  *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI);
-  return *demangled != NULL;
+  return cplus_demangle_print (options | DMGL_VERBOSE, tree,
+			       estimated_length, p_allocated_size);
+}
+
+/* A wrapper for cplus_demangle_v3_components that forces
+   DMGL_VERBOSE.  */
+
+static struct demangle_component *
+gdb_cplus_demangle_v3_components (const char *mangled,
+				  int options, void **mem)
+{
+  return cplus_demangle_v3_components (mangled, options | DMGL_VERBOSE, mem);
 }
 
 /* See cp-support.h.  */
@@ -1644,6 +1721,12 @@ cp_search_name_hash (const char *search_
 	  && string[5] != ':')
 	break;
 
+      /* Ignore template parameter lists.  */
+      if (string[0] == '<'
+	  && string[1] != '(' && string[1] != '<' && string[1] != '='
+	  && string[1] != ' ' && string[1] != '\0')
+	break;
+
       hash = SYMBOL_HASH_NEXT (hash, *string);
     }
   return hash;
@@ -1694,10 +1777,12 @@ cp_symbol_name_matches_1 (const char *sy
   completion_match_for_lcd *match_for_lcd
     = (comp_match_res != NULL ? &comp_match_res->match_for_lcd : NULL);
 
+  gdb_assert (match_for_lcd == nullptr || match_for_lcd->empty ());
+
   while (true)
     {
       if (strncmp_iw_with_mode (sname, lookup_name, lookup_name_len,
-				mode, language_cplus, match_for_lcd) == 0)
+				mode, language_cplus, match_for_lcd, true) == 0)
 	{
 	  if (comp_match_res != NULL)
 	    {
@@ -1727,6 +1812,11 @@ cp_symbol_name_matches_1 (const char *sy
 	  return true;
 	}
 
+      /* Clear match_for_lcd so the next strncmp_iw_with_mode call starts
+	 from scratch.  */
+      if (match_for_lcd != nullptr)
+	match_for_lcd->clear ();
+
       unsigned int len = cp_find_first_component (sname);
 
       if (sname[len] == '\0')
@@ -2014,7 +2104,7 @@ quote (const char *str)
 /* Check that removing parameter info out of NAME produces EXPECTED.
    COMPLETION_MODE indicates whether we're testing normal and
    completion mode.  FILE and LINE are used to provide better test
-   location information in case ithe check fails.  */
+   location information in case the check fails.  */
 
 static void
 check_remove_params (const char *file, int line,
@@ -2118,18 +2208,6 @@ test_cp_remove_params ()
 
 #endif /* GDB_SELF_CHECK */
 
-/* Don't allow just "maintenance cplus".  */
-
-static  void
-maint_cplus_command (const char *arg, int from_tty)
-{
-  printf_unfiltered (_("\"maintenance cplus\" must be followed "
-		       "by the name of a command.\n"));
-  help_list (maint_cplus_cmd_list,
-	     "maintenance cplus ",
-	     all_commands, gdb_stdout);
-}
-
 /* This is a front end for cp_find_first_component, for unit testing.
    Be careful when using it: see the NOTE above
    cp_find_first_component.  */
@@ -2149,7 +2227,7 @@ first_component_command (const char *arg
   memcpy (prefix, arg, len);
   prefix[len] = '\0';
 
-  printf_unfiltered ("%s\n", prefix);
+  gdb_printf ("%s\n", prefix);
 }
 
 /* Implement "info vtbl".  */
@@ -2163,17 +2241,90 @@ info_vtbl_command (const char *arg, int
   cplus_print_vtable (value);
 }
 
+/* See description in cp-support.h.  */
+
+const char *
+find_toplevel_char (const char *s, char c)
+{
+  int quoted = 0;		/* zero if we're not in quotes;
+				   '"' if we're in a double-quoted string;
+				   '\'' if we're in a single-quoted string.  */
+  int depth = 0;		/* Number of unclosed parens we've seen.  */
+  const char *scan;
+
+  for (scan = s; *scan; scan++)
+    {
+      if (quoted)
+	{
+	  if (*scan == quoted)
+	    quoted = 0;
+	  else if (*scan == '\\' && *(scan + 1))
+	    scan++;
+	}
+      else if (*scan == c && ! quoted && depth == 0)
+	return scan;
+      else if (*scan == '"' || *scan == '\'')
+	quoted = *scan;
+      else if (*scan == '(' || *scan == '<')
+	depth++;
+      else if ((*scan == ')' || *scan == '>') && depth > 0)
+	depth--;
+      else if (*scan == 'o' && !quoted && depth == 0)
+	{
+	  /* Handle C++ operator names.  */
+	  if (strncmp (scan, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0)
+	    {
+	      scan += CP_OPERATOR_LEN;
+	      if (*scan == c)
+		return scan;
+	      while (ISSPACE (*scan))
+		{
+		  ++scan;
+		  if (*scan == c)
+		    return scan;
+		}
+	      if (*scan == '\0')
+		break;
+
+	      switch (*scan)
+		{
+		  /* Skip over one less than the appropriate number of
+		     characters: the for loop will skip over the last
+		     one.  */
+		case '<':
+		  if (scan[1] == '<')
+		    {
+		      scan++;
+		      if (*scan == c)
+			return scan;
+		    }
+		  break;
+		case '>':
+		  if (scan[1] == '>')
+		    {
+		      scan++;
+		      if (*scan == c)
+			return scan;
+		    }
+		  break;
+		}
+	    }
+	}
+    }
+
+  return 0;
+}
+
+void _initialize_cp_support ();
 void
-_initialize_cp_support (void)
+_initialize_cp_support ()
 {
-  add_prefix_cmd ("cplus", class_maintenance,
-		  maint_cplus_command,
-		  _("C++ maintenance commands."),
-		  &maint_cplus_cmd_list,
-		  "maintenance cplus ",
-		  0, &maintenancelist);
-  add_alias_cmd ("cp", "cplus",
-		 class_maintenance, 1,
+  cmd_list_element *maintenance_cplus
+    = add_basic_prefix_cmd ("cplus", class_maintenance,
+			    _("C++ maintenance commands."),
+			    &maint_cplus_cmd_list,
+			    0, &maintenancelist);
+  add_alias_cmd ("cp", maintenance_cplus, class_maintenance, 1,
 		 &maintenancelist);
 
   add_cmd ("first_component",
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-support.h ./gdb/cp-support.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-support.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cp-support.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Helper routines for C++ support in GDB.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    Contributed by MontaVista Software.
    Namespace support contributed by David Carlton.
@@ -22,11 +22,9 @@
 #ifndef CP_SUPPORT_H
 #define CP_SUPPORT_H
 
-/* We need this for 'domain_enum', alas...  */
-
 #include "symtab.h"
 #include "gdbsupport/gdb_vecs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "gdbsupport/array-view.h"
 #include <vector>
 
@@ -77,15 +75,16 @@ struct demangle_parse_info
 
 /* Functions from cp-support.c.  */
 
-extern std::string cp_canonicalize_string (const char *string);
+extern gdb::unique_xmalloc_ptr<char> cp_canonicalize_string
+  (const char *string);
 
-extern std::string cp_canonicalize_string_no_typedefs (const char *string);
+extern gdb::unique_xmalloc_ptr<char> cp_canonicalize_string_no_typedefs
+  (const char *string);
 
 typedef const char *(canonicalization_ftype) (struct type *, void *);
 
-extern std::string cp_canonicalize_string_full (const char *string,
-						canonicalization_ftype *finder,
-						void *data);
+extern gdb::unique_xmalloc_ptr<char> cp_canonicalize_string_full
+  (const char *string, canonicalization_ftype *finder, void *data);
 
 extern char *cp_class_name_from_physname (const char *physname);
 
@@ -98,7 +97,7 @@ extern unsigned int cp_entire_prefix_len
 extern gdb::unique_xmalloc_ptr<char> cp_func_name (const char *full_name);
 
 extern gdb::unique_xmalloc_ptr<char> cp_remove_params
-  (const char *demanged_name);
+  (const char *demangled_name);
 
 /* DEMANGLED_NAME is the name of a function, (optionally) including
    parameters and (optionally) a return type.  Return the name of the
@@ -126,8 +125,7 @@ extern struct type *cp_lookup_rtti_type
    "function" or "bar::function" in all namespaces is possible.  */
 extern unsigned int cp_search_name_hash (const char *search_name);
 
-/* Implement the "la_get_symbol_name_matcher" language_defn method for
-   C++.  */
+/* Implement the "get_symbol_name_matcher" language_defn method for C++.  */
 extern symbol_name_matcher_ftype *cp_get_symbol_name_matcher
   (const lookup_name_info &lookup_name);
 
@@ -143,25 +141,25 @@ extern struct block_symbol cp_lookup_sym
      (const struct language_defn *langdef,
       const char *name,
       const struct block *block,
-      const domain_enum domain);
+      const domain_search_flags domain);
 
 extern struct block_symbol
   cp_lookup_symbol_namespace (const char *the_namespace,
 			      const char *name,
 			      const struct block *block,
-			      const domain_enum domain);
+			      const domain_search_flags domain);
 
 extern struct block_symbol cp_lookup_symbol_imports_or_template
      (const char *scope,
       const char *name,
       const struct block *block,
-      const domain_enum domain);
+      const domain_search_flags domain);
 
 extern struct block_symbol
   cp_lookup_nested_symbol (struct type *parent_type,
 			   const char *nested_name,
 			   const struct block *block,
-			   const domain_enum domain);
+			   const domain_search_flags domain);
 
 struct type *cp_lookup_transparent_type (const char *name);
 
@@ -175,6 +173,9 @@ struct type *cp_find_type_baseclass_by_n
 extern std::unique_ptr<demangle_parse_info> cp_demangled_name_to_comp
      (const char *demangled_name, std::string *errmsg);
 
+/* Convert RESULT to a string.  ESTIMATED_LEN is used only as a guide
+   to the length of the result.  */
+
 extern gdb::unique_xmalloc_ptr<char> cp_comp_to_string
   (struct demangle_component *result, int estimated_len);
 
@@ -186,12 +187,28 @@ extern void cp_merge_demangle_parse_info
 
 extern struct cmd_list_element *maint_cplus_cmd_list;
 
+/* Wrappers for bfd and libiberty demangling entry points.  Note they
+   all force DMGL_VERBOSE so that callers don't need to.  This is so
+   that GDB consistently uses DMGL_VERBOSE throughout -- we want
+   libiberty's demangler to expand standard substitutions to their
+   full template name.  */
+
 /* A wrapper for bfd_demangle.  */
 
-char *gdb_demangle (const char *name, int options);
+gdb::unique_xmalloc_ptr<char> gdb_demangle (const char *name, int options);
+
+/* A wrapper for cplus_demangle_print.  */
+
+extern char *gdb_cplus_demangle_print (int options,
+				       struct demangle_component *tree,
+				       int estimated_length,
+				       size_t *p_allocated_size);
 
-/* Like gdb_demangle, but suitable for use as la_sniff_from_mangled_name.  */
+/* Find an instance of the character C in the string S that is outside
+   of all parenthesis pairs, single-quoted strings, and double-quoted
+   strings.  Also, ignore the char within a template name, like a ','
+   within foo<int, int>.  */
 
-int gdb_sniff_from_mangled_name (const char *mangled, char **demangled);
+extern const char *find_toplevel_char (const char *s, char c);
 
 #endif /* CP_SUPPORT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-valprint.c ./gdb/cp-valprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cp-valprint.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cp-valprint.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing C++ values for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,7 +18,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "expression.h"
@@ -38,6 +38,8 @@
 #include "gdbsupport/byte-vector.h"
 #include "gdbarch.h"
 #include "cli/cli-style.h"
+#include "gdbsupport/selftest.h"
+#include "selftest-arch.h"
 
 static struct obstack dont_print_vb_obstack;
 static struct obstack dont_print_statmem_obstack;
@@ -47,11 +49,8 @@ static void cp_print_static_field (struc
 				   struct ui_file *, int,
 				   const struct value_print_options *);
 
-static void cp_print_value (struct type *, struct type *,
-			    LONGEST,
-			    CORE_ADDR, struct ui_file *,
-			    int, struct value *,
-			    const struct value_print_options *,
+static void cp_print_value (struct value *, struct ui_file *,
+			    int, const struct value_print_options *,
 			    struct type **);
 
 
@@ -64,7 +63,7 @@ const char vtbl_ptr_name[] = "__vtbl_ptr
 int
 cp_is_vtbl_ptr_type (struct type *type)
 {
-  const char *type_name = TYPE_NAME (type);
+  const char *type_name = type->name ();
 
   return (type_name != NULL && !strcmp (type_name, vtbl_ptr_name));
 }
@@ -77,25 +76,25 @@ cp_is_vtbl_member (struct type *type)
 {
   /* With older versions of g++, the vtbl field pointed to an array of
      structures.  Nowadays it points directly to the structure.  */
-  if (TYPE_CODE (type) == TYPE_CODE_PTR)
+  if (type->code () == TYPE_CODE_PTR)
     {
-      type = TYPE_TARGET_TYPE (type);
-      if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
+      type = type->target_type ();
+      if (type->code () == TYPE_CODE_ARRAY)
 	{
-	  type = TYPE_TARGET_TYPE (type);
-	  if (TYPE_CODE (type) == TYPE_CODE_STRUCT    /* if not using thunks */
-	      || TYPE_CODE (type) == TYPE_CODE_PTR)   /* if using thunks */
+	  type = type->target_type ();
+	  if (type->code () == TYPE_CODE_STRUCT    /* if not using thunks */
+	      || type->code () == TYPE_CODE_PTR)   /* if using thunks */
 	    {
 	      /* Virtual functions tables are full of pointers
-	         to virtual functions.  */
+		 to virtual functions.  */
 	      return cp_is_vtbl_ptr_type (type);
 	    }
 	}
-      else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)  /* if not using thunks */
+      else if (type->code () == TYPE_CODE_STRUCT)  /* if not using thunks */
 	{
 	  return cp_is_vtbl_ptr_type (type);
 	}
-      else if (TYPE_CODE (type) == TYPE_CODE_PTR)     /* if using thunks */
+      else if (type->code () == TYPE_CODE_PTR)     /* if using thunks */
 	{
 	  /* The type name of the thunk pointer is NULL when using
 	     dwarf2.  We could test for a pointer to a function, but
@@ -121,11 +120,8 @@ cp_is_vtbl_member (struct type *type)
    or zero if called from top level.  */
 
 void
-cp_print_value_fields (struct type *type, struct type *real_type,
-		       LONGEST offset,
-		       CORE_ADDR address, struct ui_file *stream,
-		       int recurse, struct value *val,
-		       const struct value_print_options *options,
+cp_print_value_fields (struct value *val, struct ui_file *stream,
+		       int recurse, const struct value_print_options *options,
 		       struct type **dont_print_vb,
 		       int dont_print_statmem)
 {
@@ -133,8 +129,8 @@ cp_print_value_fields (struct type *type
   int fields_seen = 0;
   static int last_set_recurse = -1;
 
-  type = check_typedef (type);
-  
+  struct type *type = check_typedef (val->type ());
+
   if (recurse == 0)
     {
       /* Any object can be left on obstacks only during an unexpected
@@ -154,18 +150,15 @@ cp_print_value_fields (struct type *type
 	}
     }
 
-  fprintf_filtered (stream, "{");
-  len = TYPE_NFIELDS (type);
+  gdb_printf (stream, "{");
+  len = type->num_fields ();
   n_baseclasses = TYPE_N_BASECLASSES (type);
 
   /* First, print out baseclasses such that we don't print
      duplicates of virtual baseclasses.  */
 
   if (n_baseclasses > 0)
-    cp_print_value (type, real_type,
-		    offset, address, stream,
-		    recurse + 1, val, options,
-		    dont_print_vb);
+    cp_print_value (val, stream, recurse + 1, options, dont_print_vb);
 
   /* Second, print out data fields */
 
@@ -196,50 +189,55 @@ cp_print_value_fields (struct type *type
       vptr_fieldno = get_vptr_fieldno (type, &vptr_basetype);
       for (i = n_baseclasses; i < len; i++)
 	{
-	  const gdb_byte *valaddr = value_contents_for_printing (val);
+	  const gdb_byte *valaddr = val->contents_for_printing ().data ();
 
 	  /* If requested, skip printing of static fields.  */
 	  if (!options->static_field_print
-	      && field_is_static (&TYPE_FIELD (type, i)))
+	      && type->field (i).is_static ())
 	    continue;
 
 	  if (fields_seen)
 	    {
-	      fputs_filtered (",", stream);
+	      gdb_puts (",", stream);
 	      if (!options->prettyformat)
-		fputs_filtered (" ", stream);
+		gdb_puts (" ", stream);
 	    }
 	  else if (n_baseclasses > 0)
 	    {
 	      if (options->prettyformat)
 		{
-		  fprintf_filtered (stream, "\n");
-		  print_spaces_filtered (2 + 2 * recurse, stream);
-		  fputs_filtered ("members of ", stream);
-		  fputs_filtered (TYPE_NAME (type), stream);
-		  fputs_filtered (":", stream);
+		  gdb_printf (stream, "\n");
+		  print_spaces (2 + 2 * recurse, stream);
+		  gdb_puts ("members of ", stream);
+		  gdb_puts (type->name (), stream);
+		  gdb_puts (":", stream);
 		}
 	    }
 	  fields_seen = 1;
 
 	  if (options->prettyformat)
 	    {
-	      fprintf_filtered (stream, "\n");
-	      print_spaces_filtered (2 + 2 * recurse, stream);
+	      gdb_printf (stream, "\n");
+	      print_spaces (2 + 2 * recurse, stream);
 	    }
 	  else
 	    {
-	      wrap_here (n_spaces (2 + 2 * recurse));
+	      stream->wrap_here (2 + 2 * recurse);
 	    }
 
-	  annotate_field_begin (TYPE_FIELD_TYPE (type, i));
+	  annotate_field_begin (type->field (i).type ());
 
-	  if (field_is_static (&TYPE_FIELD (type, i)))
-	    fputs_filtered ("static ", stream);
-	  fprintf_symbol_filtered (stream,
-				   TYPE_FIELD_NAME (type, i),
-				   current_language->la_language,
-				   DMGL_PARAMS | DMGL_ANSI);
+	  if (type->field (i).is_static ())
+	    {
+	      gdb_puts ("static ", stream);
+	      fprintf_symbol (stream,
+			      type->field (i).name (),
+			      current_language->la_language,
+			      DMGL_PARAMS | DMGL_ANSI);
+	    }
+	  else
+	    fputs_styled (type->field (i).name (),
+			  variable_name_style.style (), stream);
 	  annotate_field_name_end ();
 
 	  /* We tweak various options in a few cases below.  */
@@ -248,8 +246,8 @@ cp_print_value_fields (struct type *type
 
 	  /* Do not print leading '=' in case of anonymous
 	     unions.  */
-	  if (strcmp (TYPE_FIELD_NAME (type, i), ""))
-	    fputs_filtered (" = ", stream);
+	  if (strcmp (type->field (i).name (), ""))
+	    gdb_puts (" = ", stream);
 	  else
 	    {
 	      /* If this is an anonymous field then we want to consider it
@@ -260,32 +258,31 @@ cp_print_value_fields (struct type *type
 	    }
 	  annotate_field_value ();
 
-	  if (!field_is_static (&TYPE_FIELD (type, i))
-	      && TYPE_FIELD_PACKED (type, i))
+	  if (!type->field (i).is_static ()
+	      && type->field (i).is_packed ())
 	    {
 	      struct value *v;
 
 	      /* Bitfields require special handling, especially due to
-	         byte order problems.  */
-	      if (TYPE_FIELD_IGNORE (type, i))
+		 byte order problems.  */
+	      if (type->field (i).is_ignored ())
 		{
 		  fputs_styled ("<optimized out or zero length>",
 				metadata_style.style (), stream);
 		}
-	      else if (value_bits_synthetic_pointer (val,
-						     TYPE_FIELD_BITPOS (type,
-									i),
-						     TYPE_FIELD_BITSIZE (type,
-									 i)))
+	      else if (val->bits_synthetic_pointer
+		       (type->field (i).loc_bitpos (),
+			type->field (i).bitsize ()))
 		{
 		  fputs_styled (_("<synthetic pointer>"),
 				metadata_style.style (), stream);
 		}
 	      else
 		{
-		  opts->deref_ref = 0;
+		  opts->deref_ref = false;
 
-		  v = value_field_bitfield (type, i, valaddr, offset, val);
+		  v = value_field_bitfield (type, i, valaddr,
+					    val->embedded_offset (), val);
 
 		  common_val_print (v, stream, recurse + 1,
 				    opts, current_language);
@@ -293,18 +290,18 @@ cp_print_value_fields (struct type *type
 	    }
 	  else
 	    {
-	      if (TYPE_FIELD_IGNORE (type, i))
+	      if (type->field (i).is_ignored ())
 		{
 		  fputs_styled ("<optimized out or zero length>",
 				metadata_style.style (), stream);
 		}
-	      else if (field_is_static (&TYPE_FIELD (type, i)))
+	      else if (type->field (i).is_static ())
 		{
 		  try
 		    {
 		      struct value *v = value_static_field (type, i);
 
-		      cp_print_static_field (TYPE_FIELD_TYPE (type, i),
+		      cp_print_static_field (type->field (i).type (),
 					     v, stream, recurse + 1,
 					     opts);
 		    }
@@ -317,27 +314,26 @@ cp_print_value_fields (struct type *type
 		}
 	      else if (i == vptr_fieldno && type == vptr_basetype)
 		{
-		  int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
-		  struct type *i_type = TYPE_FIELD_TYPE (type, i);
+		  int i_offset = type->field (i).loc_bitpos () / 8;
+		  struct type *i_type = type->field (i).type ();
 
 		  if (valprint_check_validity (stream, i_type, i_offset, val))
 		    {
 		      CORE_ADDR addr;
-		      
+
+		      i_offset += val->embedded_offset ();
 		      addr = extract_typed_address (valaddr + i_offset, i_type);
 		      print_function_pointer_address (opts,
-						      get_type_arch (type),
+						      type->arch (),
 						      addr, stream);
 		    }
 		}
 	      else
 		{
-		  opts->deref_ref = 0;
-		  val_print (TYPE_FIELD_TYPE (type, i),
-			     offset + TYPE_FIELD_BITPOS (type, i) / 8,
-			     address,
-			     stream, recurse + 1, val, opts,
-			     current_language);
+		  struct value *v = val->primitive_field (0, i, type);
+		  opts->deref_ref = false;
+		  common_val_print (v, stream, recurse + 1, opts,
+				    current_language);
 		}
 	    }
 	  annotate_field_end ();
@@ -346,7 +342,7 @@ cp_print_value_fields (struct type *type
       if (dont_print_statmem == 0)
 	{
 	  size_t obstack_final_size =
-           obstack_object_size (&dont_print_statmem_obstack);
+	   obstack_object_size (&dont_print_statmem_obstack);
 
 	  if (obstack_final_size > statmem_obstack_initial_size)
 	    {
@@ -360,7 +356,7 @@ cp_print_value_fields (struct type *type
 	    {
 	      obstack_final_size =
 		obstack_object_size (&dont_print_stat_array_obstack);
-	      
+
 	      if (obstack_final_size > stat_array_obstack_initial_size)
 		{
 		  void *free_to_ptr =
@@ -377,84 +373,61 @@ cp_print_value_fields (struct type *type
 
       if (options->prettyformat)
 	{
-	  fprintf_filtered (stream, "\n");
-	  print_spaces_filtered (2 * recurse, stream);
+	  gdb_printf (stream, "\n");
+	  print_spaces (2 * recurse, stream);
 	}
     }				/* if there are data fields */
 
-  fprintf_filtered (stream, "}");
+  gdb_printf (stream, "}");
 }
 
-/* Like cp_print_value_fields, but find the runtime type of the object
-   and pass it as the `real_type' argument to cp_print_value_fields.
-   This function is a hack to work around the fact that
-   common_val_print passes the embedded offset to val_print, but not
-   the enclosing type.  */
+/* A wrapper for cp_print_value_fields that tries to apply a
+   pretty-printer first.  */
 
-void
-cp_print_value_fields_rtti (struct type *type,
-			    const gdb_byte *valaddr, LONGEST offset,
-			    CORE_ADDR address,
-			    struct ui_file *stream, int recurse,
-			    struct value *val,
-			    const struct value_print_options *options,
-			    struct type **dont_print_vb, 
-			    int dont_print_statmem)
+static void
+cp_print_value_fields_pp (struct value *val,
+			  struct ui_file *stream,
+			  int recurse,
+			  const struct value_print_options *options,
+			  struct type **dont_print_vb,
+			  int dont_print_statmem)
 {
-  struct type *real_type = NULL;
+  int result = 0;
 
-  /* We require all bits to be valid in order to attempt a
-     conversion.  */
-  if (!value_bits_any_optimized_out (val,
-				     TARGET_CHAR_BIT * offset,
-				     TARGET_CHAR_BIT * TYPE_LENGTH (type)))
-    {
-      struct value *value;
-      int full, using_enc;
-      LONGEST top;
-
-      /* Ugh, we have to convert back to a value here.  */
-      value = value_from_contents_and_address (type, valaddr + offset,
-					       address + offset);
-      type = value_type (value);
-      /* We don't actually care about most of the result here -- just
-	 the type.  We already have the correct offset, due to how
-	 val_print was initially called.  */
-      real_type = value_rtti_type (value, &full, &top, &using_enc);
-    }
-
-  if (!real_type)
-    real_type = type;
-
-  cp_print_value_fields (type, real_type, offset,
-			 address, stream, recurse, val, options,
-			 dont_print_vb, dont_print_statmem);
+  /* Attempt to run an extension language pretty-printer if
+     possible.  */
+  if (!options->raw)
+    result
+      = apply_ext_lang_val_pretty_printer (val, stream,
+					   recurse, options,
+					   current_language);
+
+  if (!result)
+    cp_print_value_fields (val, stream, recurse, options, dont_print_vb,
+			   dont_print_statmem);
 }
 
 /* Special val_print routine to avoid printing multiple copies of
    virtual baseclasses.  */
 
 static void
-cp_print_value (struct type *type, struct type *real_type,
-		LONGEST offset,
-		CORE_ADDR address, struct ui_file *stream,
-		int recurse, struct value *val,
-		const struct value_print_options *options,
+cp_print_value (struct value *val, struct ui_file *stream,
+		int recurse, const struct value_print_options *options,
 		struct type **dont_print_vb)
 {
+  struct type *type = check_typedef (val->type ());
+  CORE_ADDR address = val->address ();
   struct type **last_dont_print
     = (struct type **) obstack_next_free (&dont_print_vb_obstack);
   struct obstack tmp_obstack = dont_print_vb_obstack;
   int i, n_baseclasses = TYPE_N_BASECLASSES (type);
-  LONGEST thisoffset;
-  struct type *thistype;
-  const gdb_byte *valaddr = value_contents_for_printing (val);
+  const gdb_byte *valaddr = val->contents_for_printing ().data ();
 
   if (dont_print_vb == 0)
     {
       /* If we're at top level, carve out a completely fresh chunk of
-         the obstack and use that until this particular invocation
-         returns.  */
+	 the obstack and use that until this particular invocation
+	 returns.  */
       /* Bump up the high-water mark.  Now alpha is omega.  */
       obstack_finish (&dont_print_vb_obstack);
     }
@@ -464,7 +437,7 @@ cp_print_value (struct type *type, struc
       LONGEST boffset = 0;
       int skip = 0;
       struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
-      const char *basename = TYPE_NAME (baseclass);
+      const char *basename = baseclass->name ();
       struct value *base_val = NULL;
 
       if (BASETYPE_VIA_VIRTUAL (type, i))
@@ -482,12 +455,11 @@ cp_print_value (struct type *type, struc
 	  obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
 	}
 
-      thisoffset = offset;
-      thistype = real_type;
-
       try
 	{
-	  boffset = baseclass_offset (type, i, valaddr, offset, address, val);
+	  boffset = baseclass_offset (type, i, valaddr,
+				      val->embedded_offset (),
+				      address, val);
 	}
       catch (const gdb_exception_error &ex)
 	{
@@ -505,21 +477,18 @@ cp_print_value (struct type *type, struc
 		 clobbered by the user program. Make sure that it
 		 still points to a valid memory location.  */
 
-	      if ((boffset + offset) < 0
-		  || (boffset + offset) >= TYPE_LENGTH (real_type))
+	      if (boffset < 0 || boffset >= type->length ())
 		{
-		  gdb::byte_vector buf (TYPE_LENGTH (baseclass));
+		  gdb::byte_vector buf (baseclass->length ());
 
 		  if (target_read_memory (address + boffset, buf.data (),
-					  TYPE_LENGTH (baseclass)) != 0)
+					  baseclass->length ()) != 0)
 		    skip = 1;
 		  base_val = value_from_contents_and_address (baseclass,
 							      buf.data (),
 							      address + boffset);
-		  baseclass = value_type (base_val);
-		  thisoffset = 0;
+		  baseclass = base_val->type ();
 		  boffset = 0;
-		  thistype = baseclass;
 		}
 	      else
 		{
@@ -535,14 +504,14 @@ cp_print_value (struct type *type, struc
       /* Now do the printing.  */
       if (options->prettyformat)
 	{
-	  fprintf_filtered (stream, "\n");
-	  print_spaces_filtered (2 * recurse, stream);
+	  gdb_printf (stream, "\n");
+	  print_spaces (2 * recurse, stream);
 	}
-      fputs_filtered ("<", stream);
+      gdb_puts ("<", stream);
       /* Not sure what the best notation is in the case where there is
-         no baseclass name.  */
-      fputs_filtered (basename ? basename : "", stream);
-      fputs_filtered ("> = ", stream);
+	 no baseclass name.  */
+      gdb_puts (basename ? basename : "", stream);
+      gdb_puts ("> = ", stream);
 
       if (skip < 0)
 	val_print_unavailable (stream);
@@ -550,39 +519,19 @@ cp_print_value (struct type *type, struc
 	val_print_invalid_address (stream);
       else
 	{
-	  int result = 0;
-
-	  if (options->max_depth > -1
-	      && recurse >= options->max_depth)
-	    {
-	      const struct language_defn *language = current_language;
-	      gdb_assert (language->la_struct_too_deep_ellipsis != NULL);
-	      fputs_filtered (language->la_struct_too_deep_ellipsis, stream);
-	    }
-	  else
+	  if (!val_print_check_max_depth (stream, recurse, options,
+					  current_language))
 	    {
-	      /* Attempt to run an extension language pretty-printer on the
-		 baseclass if possible.  */
-	      if (!options->raw)
-		result
-		  = apply_ext_lang_val_pretty_printer (baseclass,
-						       thisoffset + boffset,
-						       value_address (base_val),
-						       stream, recurse,
-						       base_val, options,
-						       current_language);
-
-	      if (!result)
-		cp_print_value_fields (baseclass, thistype,
-				       thisoffset + boffset,
-				       value_address (base_val),
-				       stream, recurse, base_val, options,
-				       ((struct type **)
-					obstack_base (&dont_print_vb_obstack)),
-				       0);
+	      struct value *baseclass_val = val->primitive_field (0,
+								  i, type);
+
+	      cp_print_value_fields_pp
+		(baseclass_val, stream, recurse, options,
+		 (struct type **) obstack_base (&dont_print_vb_obstack),
+		 0);
 	    }
 	}
-      fputs_filtered (", ", stream);
+      gdb_puts (", ", stream);
 
     flush_it:
       ;
@@ -591,10 +540,10 @@ cp_print_value (struct type *type, struc
   if (dont_print_vb == 0)
     {
       /* Free the space used to deal with the printing
-         of this type from top level.  */
+	 of this type from top level.  */
       obstack_free (&dont_print_vb_obstack, last_dont_print);
       /* Reset watermark so that we can continue protecting
-         ourselves from whatever we were protecting ourselves.  */
+	 ourselves from whatever we were protecting ourselves.  */
       dont_print_vb_obstack = tmp_obstack;
     }
 }
@@ -616,17 +565,17 @@ cp_print_static_field (struct type *type
 {
   struct value_print_options opts;
 
-  if (value_entirely_optimized_out (val))
+  if (val->entirely_optimized_out ())
     {
       val_print_optimized_out (val, stream);
       return;
     }
 
   struct type *real_type = check_typedef (type);
-  if (TYPE_CODE (real_type) == TYPE_CODE_STRUCT)
+  if (real_type->code () == TYPE_CODE_STRUCT)
     {
       CORE_ADDR *first_dont_print;
-      CORE_ADDR addr;
+      CORE_ADDR addr = val->address ();
       int i;
 
       first_dont_print
@@ -636,7 +585,7 @@ cp_print_static_field (struct type *type
 
       while (--i >= 0)
 	{
-	  if (value_address (val) == first_dont_print[i])
+	  if (addr == first_dont_print[i])
 	    {
 	      fputs_styled (_("<same as static member of an already"
 			      " seen type>"),
@@ -645,21 +594,17 @@ cp_print_static_field (struct type *type
 	    }
 	}
 
-      addr = value_address (val);
       obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
 		    sizeof (CORE_ADDR));
-      cp_print_value_fields (type, value_enclosing_type (val),
-			     value_embedded_offset (val), addr,
-			     stream, recurse, val,
-			     options, NULL, 1);
+      cp_print_value_fields_pp (val, stream, recurse, options, nullptr, 1);
       return;
     }
 
-  if (TYPE_CODE (real_type) == TYPE_CODE_ARRAY)
+  if (real_type->code () == TYPE_CODE_ARRAY)
     {
       struct type **first_dont_print;
       int i;
-      struct type *target_type = TYPE_TARGET_TYPE (type);
+      struct type *target_type = type->target_type ();
 
       first_dont_print
 	= (struct type **) obstack_base (&dont_print_stat_array_obstack);
@@ -683,12 +628,8 @@ cp_print_static_field (struct type *type
     }
 
   opts = *options;
-  opts.deref_ref = 0;
-  val_print (type,
-	     value_embedded_offset (val),
-	     value_address (val),
-	     stream, recurse, val,
-	     &opts, current_language);
+  opts.deref_ref = false;
+  common_val_print (val, stream, recurse, &opts, current_language);
 }
 
 /* Find the field in *SELF, or its non-virtual base classes, with
@@ -706,11 +647,14 @@ cp_find_class_member (struct type **self
 
   *self_p = check_typedef (*self_p);
   self = *self_p;
-  len = TYPE_NFIELDS (self);
+  len = self->num_fields ();
 
   for (i = TYPE_N_BASECLASSES (self); i < len; i++)
     {
-      LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
+      field &f = self->field (i);
+      if (f.is_static ())
+	continue;
+      LONGEST bitpos = f.loc_bitpos ();
 
       QUIT;
       if (offset == bitpos)
@@ -722,12 +666,12 @@ cp_find_class_member (struct type **self
 
   for (i = 0; i < TYPE_N_BASECLASSES (self); i++)
     {
-      LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
-      LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (self, i));
+      LONGEST bitpos = self->field (i).loc_bitpos ();
+      LONGEST bitsize = 8 * self->field (i).type ()->length ();
 
       if (offset >= bitpos && offset < bitpos + bitsize)
 	{
-	  *self_p = TYPE_FIELD_TYPE (self, i);
+	  *self_p = self->field (i).type ();
 	  cp_find_class_member (self_p, fieldno, offset - bitpos);
 	  return;
 	}
@@ -750,7 +694,7 @@ cp_print_class_member (const gdb_byte *v
   int fieldno;
 
   val = extract_signed_integer (valaddr,
-				TYPE_LENGTH (type),
+				type->length (),
 				byte_order);
 
   /* Pointers to data members are usually byte offsets into an object.
@@ -765,7 +709,7 @@ cp_print_class_member (const gdb_byte *v
 
   if (val == -1)
     {
-      fprintf_filtered (stream, "NULL");
+      gdb_printf (stream, "NULL");
       return;
     }
 
@@ -775,23 +719,91 @@ cp_print_class_member (const gdb_byte *v
     {
       const char *name;
 
-      fputs_filtered (prefix, stream);
-      name = TYPE_NAME (self_type);
+      gdb_puts (prefix, stream);
+      name = self_type->name ();
       if (name)
-	fputs_filtered (name, stream);
+	gdb_puts (name, stream);
       else
 	c_type_print_base (self_type, stream, 0, 0, &type_print_raw_options);
-      fprintf_filtered (stream, "::");
-      fputs_filtered (TYPE_FIELD_NAME (self_type, fieldno), stream);
+      gdb_printf (stream, "::");
+      fputs_styled (self_type->field (fieldno).name (),
+		    variable_name_style.style (), stream);
     }
   else
-    fprintf_filtered (stream, "%ld", (long) val);
+    gdb_printf (stream, "%ld", (long) val);
 }
 
+#if GDB_SELF_TEST
+
+/* Test printing of TYPE_CODE_STRUCT values.  */
+
+static void
+test_print_fields (gdbarch *arch)
+{
+  struct field *f;
+  type *uint8_type = builtin_type (arch)->builtin_uint8;
+  type *bool_type = builtin_type (arch)->builtin_bool;
+  type *the_struct = arch_composite_type (arch, NULL, TYPE_CODE_STRUCT);
+  the_struct->set_length (4);
+
+  /* Value:  1110 1001
+     Fields: C-BB B-A- */
+  if (gdbarch_byte_order (arch) == BFD_ENDIAN_LITTLE)
+    {
+      f = append_composite_type_field_raw (the_struct, "A", bool_type);
+      f->set_loc_bitpos (1);
+      f->set_bitsize (1);
+      f = append_composite_type_field_raw (the_struct, "B", uint8_type);
+      f->set_loc_bitpos (3);
+      f->set_bitsize (3);
+      f = append_composite_type_field_raw (the_struct, "C", bool_type);
+      f->set_loc_bitpos (7);
+      f->set_bitsize (1);
+    }
+  /* According to the logic commented in "make_gdb_type_struct ()" of
+   * target-descriptions.c, bit positions are numbered differently for
+   * little and big endians.  */
+  else
+    {
+      f = append_composite_type_field_raw (the_struct, "A", bool_type);
+      f->set_loc_bitpos (30);
+      f->set_bitsize (1);
+      f = append_composite_type_field_raw (the_struct, "B", uint8_type);
+      f->set_loc_bitpos (26);
+      f->set_bitsize (3);
+      f = append_composite_type_field_raw (the_struct, "C", bool_type);
+      f->set_loc_bitpos (24);
+      f->set_bitsize (1);
+    }
+
+  value *val = value::allocate (the_struct);
+  gdb_byte *contents = val->contents_writeable ().data ();
+  store_unsigned_integer (contents, val->enclosing_type ()->length (),
+			  gdbarch_byte_order (arch), 0xe9);
 
+  string_file out;
+  struct value_print_options opts;
+  get_no_prettyformat_print_options (&opts);
+  cp_print_value_fields(val, &out, 0, &opts, NULL, 0);
+  SELF_CHECK (out.string () == "{A = false, B = 5, C = true}");
+
+  out.clear();
+  opts.format = 'x';
+  cp_print_value_fields(val, &out, 0, &opts, NULL, 0);
+  SELF_CHECK (out.string () == "{A = 0x0, B = 0x5, C = 0x1}");
+}
+
+#endif
+
+
+void _initialize_cp_valprint ();
 void
-_initialize_cp_valprint (void)
+_initialize_cp_valprint ()
 {
+#if GDB_SELF_TEST
+  selftests::register_test_foreach_arch ("print-fields", test_print_fields);
+#endif
+
   obstack_begin (&dont_print_stat_array_obstack,
 		 32 * sizeof (struct type *));
   obstack_begin (&dont_print_statmem_obstack,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cris-linux-tdep.c ./gdb/cris-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cris-linux-tdep.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cris-linux-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux on CRIS processors, for GDB.
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    Contributed by Axis Communications AB.
    Written by Hendrik Ruijter, Stefan Andersson, Orjan Friberg,
@@ -33,22 +33,23 @@
 static void
 cris_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
 
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, 0);
 
   if (tdep->cris_version == 32)
     /* Threaded debugging is only supported on CRISv32 for now.  */
     set_gdbarch_fetch_tls_load_module_address (gdbarch,
-                                               svr4_fetch_objfile_link_map);
+					       svr4_fetch_objfile_link_map);
 
   set_solib_svr4_fetch_link_map_offsets (gdbarch,
-					 svr4_ilp32_fetch_link_map_offsets);
+					 linux_ilp32_fetch_link_map_offsets);
 
 }
 
+void _initialize_cris_linux_tdep ();
 void
-_initialize_cris_linux_tdep (void)
+_initialize_cris_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_cris, 0, GDB_OSABI_LINUX,
 			  cris_linux_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cris-tdep.c ./gdb/cris-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cris-tdep.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cris-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target dependent code for CRIS, for GDB, the GNU debugger.
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    Contributed by Axis Communications AB.
    Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg.
@@ -25,7 +25,7 @@
 #include "frame-unwind.h"
 #include "frame-base.h"
 #include "trad-frame.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "symtab.h"
 #include "inferior.h"
 #include "gdbtypes.h"
@@ -37,10 +37,11 @@
 #include "osabi.h"
 #include "arch-utils.h"
 #include "regcache.h"
+#include "regset.h"
 
 #include "objfiles.h"
 
-#include "solib.h"              /* Support for shared libraries.  */
+#include "solib.h"
 #include "solib-svr4.h"
 #include "dis-asm.h"
 
@@ -192,12 +193,12 @@ static const unsigned short rt_sigtramp_
    the routine.  Otherwise, return 0.  */
 
 static CORE_ADDR
-cris_sigtramp_start (struct frame_info *this_frame)
+cris_sigtramp_start (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   gdb_byte buf[SIGTRAMP_LEN];
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (((buf[1] << 8) + buf[0]) != SIGTRAMP_INSN0)
@@ -206,7 +207,7 @@ cris_sigtramp_start (struct frame_info *
 	return 0;
 
       pc -= SIGTRAMP_OFFSET1;
-      if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
+      if (!safe_frame_unwind_memory (this_frame, pc, buf))
 	return 0;
     }
 
@@ -220,12 +221,12 @@ cris_sigtramp_start (struct frame_info *
    the routine.  Otherwise, return 0.  */
 
 static CORE_ADDR
-cris_rt_sigtramp_start (struct frame_info *this_frame)
+cris_rt_sigtramp_start (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   gdb_byte buf[SIGTRAMP_LEN];
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (((buf[1] << 8) + buf[0]) != SIGTRAMP_INSN0)
@@ -234,7 +235,7 @@ cris_rt_sigtramp_start (struct frame_inf
 	return 0;
 
       pc -= SIGTRAMP_OFFSET1;
-      if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
+      if (!safe_frame_unwind_memory (this_frame, pc, buf))
 	return 0;
     }
 
@@ -248,7 +249,7 @@ cris_rt_sigtramp_start (struct frame_inf
    return the address of the associated sigcontext structure.  */
 
 static CORE_ADDR
-cris_sigcontext_addr (struct frame_info *this_frame)
+cris_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -304,15 +305,15 @@ struct cris_unwind_cache
   int leaf_function;
 
   /* Table indicating the location of each and every register.  */
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
 static struct cris_unwind_cache *
-cris_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
+cris_sigtramp_frame_unwind_cache (frame_info_ptr this_frame,
 				  void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   struct cris_unwind_cache *info;
   CORE_ADDR addr;
@@ -353,18 +354,18 @@ cris_sigtramp_frame_unwind_cache (struct
       /* R0 to R13 are stored in reverse order at offset (2 * 4) in 
 	 struct pt_regs.  */
       for (i = 0; i <= 13; i++)
-	info->saved_regs[i].addr = addr + ((15 - i) * 4);
+	info->saved_regs[i].set_addr (addr + ((15 - i) * 4));
 
-      info->saved_regs[MOF_REGNUM].addr = addr + (16 * 4);
-      info->saved_regs[DCCR_REGNUM].addr = addr + (17 * 4);
-      info->saved_regs[SRP_REGNUM].addr = addr + (18 * 4);
+      info->saved_regs[MOF_REGNUM].set_addr (addr + (16 * 4));
+      info->saved_regs[DCCR_REGNUM].set_addr (addr + (17 * 4));
+      info->saved_regs[SRP_REGNUM].set_addr (addr + (18 * 4));
       /* Note: IRP is off by 2 at this point.  There's no point in correcting
 	 it though since that will mean that the backtrace will show a PC 
 	 different from what is shown when stopped.  */
-      info->saved_regs[IRP_REGNUM].addr = addr + (19 * 4);
+      info->saved_regs[IRP_REGNUM].set_addr (addr + (19 * 4));
       info->saved_regs[gdbarch_pc_regnum (gdbarch)]
 	= info->saved_regs[IRP_REGNUM];
-      info->saved_regs[gdbarch_sp_regnum (gdbarch)].addr = addr + (24 * 4);
+      info->saved_regs[gdbarch_sp_regnum (gdbarch)].set_addr (addr + (24 * 4));
     }
   else
     {
@@ -372,17 +373,17 @@ cris_sigtramp_frame_unwind_cache (struct
       /* R0 to R13 are stored in order at offset (1 * 4) in 
 	 struct pt_regs.  */
       for (i = 0; i <= 13; i++)
-	info->saved_regs[i].addr = addr + ((i + 1) * 4);
+	info->saved_regs[i].set_addr (addr + ((i + 1) * 4));
 
-      info->saved_regs[ACR_REGNUM].addr = addr + (15 * 4);
-      info->saved_regs[SRS_REGNUM].addr = addr + (16 * 4);
-      info->saved_regs[MOF_REGNUM].addr = addr + (17 * 4);
-      info->saved_regs[SPC_REGNUM].addr = addr + (18 * 4);
-      info->saved_regs[CCS_REGNUM].addr = addr + (19 * 4);
-      info->saved_regs[SRP_REGNUM].addr = addr + (20 * 4);
-      info->saved_regs[ERP_REGNUM].addr = addr + (21 * 4);
-      info->saved_regs[EXS_REGNUM].addr = addr + (22 * 4);
-      info->saved_regs[EDA_REGNUM].addr = addr + (23 * 4);
+      info->saved_regs[ACR_REGNUM].set_addr (addr + (15 * 4));
+      info->saved_regs[SRS_REGNUM].set_addr (addr + (16 * 4));
+      info->saved_regs[MOF_REGNUM].set_addr (addr + (17 * 4));
+      info->saved_regs[SPC_REGNUM].set_addr (addr + (18 * 4));
+      info->saved_regs[CCS_REGNUM].set_addr (addr + (19 * 4));
+      info->saved_regs[SRP_REGNUM].set_addr (addr + (20 * 4));
+      info->saved_regs[ERP_REGNUM].set_addr (addr + (21 * 4));
+      info->saved_regs[EXS_REGNUM].set_addr (addr + (22 * 4));
+      info->saved_regs[EDA_REGNUM].set_addr (addr + (23 * 4));
 
       /* FIXME: If ERP is in a delay slot at this point then the PC will
 	 be wrong at this point.  This problem manifests itself in the
@@ -394,16 +395,15 @@ cris_sigtramp_frame_unwind_cache (struct
       info->saved_regs[gdbarch_pc_regnum (gdbarch)]
 	= info->saved_regs[ERP_REGNUM];
 
-      info->saved_regs[gdbarch_sp_regnum (gdbarch)].addr
-	= addr + (25 * 4);
+      info->saved_regs[gdbarch_sp_regnum (gdbarch)].set_addr (addr + (25 * 4));
     }
   
   return info;
 }
 
 static void
-cris_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
-                             struct frame_id *this_id)
+cris_sigtramp_frame_this_id (frame_info_ptr this_frame, void **this_cache,
+			     struct frame_id *this_id)
 {
   struct cris_unwind_cache *cache =
     cris_sigtramp_frame_unwind_cache (this_frame, this_cache);
@@ -412,11 +412,11 @@ cris_sigtramp_frame_this_id (struct fram
 
 /* Forward declaration.  */
 
-static struct value *cris_frame_prev_register (struct frame_info *this_frame,
+static struct value *cris_frame_prev_register (frame_info_ptr this_frame,
 					       void **this_cache, int regnum);
 static struct value *
-cris_sigtramp_frame_prev_register (struct frame_info *this_frame,
-                                   void **this_cache, int regnum)
+cris_sigtramp_frame_prev_register (frame_info_ptr this_frame,
+				   void **this_cache, int regnum)
 {
   /* Make sure we've initialized the cache.  */
   cris_sigtramp_frame_unwind_cache (this_frame, this_cache);
@@ -425,7 +425,7 @@ cris_sigtramp_frame_prev_register (struc
 
 static int
 cris_sigtramp_frame_sniffer (const struct frame_unwind *self,
-			     struct frame_info *this_frame,
+			     frame_info_ptr this_frame,
 			     void **this_cache)
 {
   if (cris_sigtramp_start (this_frame) 
@@ -437,6 +437,7 @@ cris_sigtramp_frame_sniffer (const struc
 
 static const struct frame_unwind cris_sigtramp_frame_unwind =
 {
+  "cris sigtramp",
   SIGTRAMP_FRAME,
   default_frame_unwind_stop_reason,
   cris_sigtramp_frame_this_id,
@@ -447,9 +448,9 @@ static const struct frame_unwind cris_si
 
 static int
 crisv32_single_step_through_delay (struct gdbarch *gdbarch,
-				   struct frame_info *this_frame)
+				   frame_info_ptr this_frame)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
   ULONGEST erp;
   int ret = 0;
 
@@ -533,9 +534,9 @@ enum cris_opcode_masks
 /* Functions for opcodes.  The general form of the ETRAX 16-bit instruction:
    Bit 15 - 12   Operand2
        11 - 10   Mode
-        9 -  6   Opcode
-        5 -  4   Size
-        3 -  0   Operand1  */
+	9 -  6   Opcode
+	5 -  4   Size
+	3 -  0   Operand1  */
 
 static int 
 cris_get_operand2 (unsigned short insn)
@@ -630,7 +631,7 @@ static void cris_gdb_func (struct gdbarc
 			   inst_env_type *);
 
 static struct gdbarch *cris_gdbarch_init (struct gdbarch_info,
-                                          struct gdbarch_list *);
+					  struct gdbarch_list *);
 
 static void cris_dump_tdep (struct gdbarch *, struct ui_file *);
 
@@ -644,28 +645,29 @@ static void set_cris_dwarf2_cfi (const c
 				 struct cmd_list_element *c);
 
 static CORE_ADDR cris_scan_prologue (CORE_ADDR pc, 
-				     struct frame_info *this_frame,
+				     frame_info_ptr this_frame,
 				     struct cris_unwind_cache *info);
 
 static CORE_ADDR crisv32_scan_prologue (CORE_ADDR pc, 
-					struct frame_info *this_frame,
+					frame_info_ptr this_frame,
 					struct cris_unwind_cache *info);
 
 /* When arguments must be pushed onto the stack, they go on in reverse
    order.  The below implements a FILO (stack) to do this.
    Copied from d10v-tdep.c.  */
 
-struct stack_item
+struct cris_stack_item
 {
   int len;
-  struct stack_item *prev;
+  struct cris_stack_item *prev;
   gdb_byte *data;
 };
 
-static struct stack_item *
-push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len)
+static struct cris_stack_item *
+push_stack_item (struct cris_stack_item *prev, const gdb_byte *contents,
+		 int len)
 {
-  struct stack_item *si = XNEW (struct stack_item);
+  struct cris_stack_item *si = XNEW (struct cris_stack_item);
   si->data = (gdb_byte *) xmalloc (len);
   si->len = len;
   si->prev = prev;
@@ -673,10 +675,10 @@ push_stack_item (struct stack_item *prev
   return si;
 }
 
-static struct stack_item *
-pop_stack_item (struct stack_item *si)
+static struct cris_stack_item *
+pop_stack_item (struct cris_stack_item *si)
 {
-  struct stack_item *dead = si;
+  struct cris_stack_item *dead = si;
   si = si->prev;
   xfree (dead->data);
   xfree (dead);
@@ -690,11 +692,11 @@ pop_stack_item (struct stack_item *si)
    for it IS the sp for the next frame.  */
 
 static struct cris_unwind_cache *
-cris_frame_unwind_cache (struct frame_info *this_frame,
+cris_frame_unwind_cache (frame_info_ptr this_frame,
 			 void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
   struct cris_unwind_cache *info;
 
   if ((*this_prologue_cache))
@@ -727,7 +729,7 @@ cris_frame_unwind_cache (struct frame_in
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-cris_frame_this_id (struct frame_info *this_frame,
+cris_frame_this_id (frame_info_ptr this_frame,
 		    void **this_prologue_cache,
 		    struct frame_id *this_id)
 {
@@ -753,7 +755,7 @@ cris_frame_this_id (struct frame_info *t
 }
 
 static struct value *
-cris_frame_prev_register (struct frame_info *this_frame,
+cris_frame_prev_register (frame_info_ptr this_frame,
 			  void **this_prologue_cache, int regnum)
 {
   struct cris_unwind_cache *info
@@ -771,10 +773,10 @@ cris_frame_align (struct gdbarch *gdbarc
 
 static CORE_ADDR
 cris_push_dummy_code (struct gdbarch *gdbarch,
-                      CORE_ADDR sp, CORE_ADDR funaddr,
-                      struct value **args, int nargs,
-                      struct type *value_type,
-                      CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
+		      CORE_ADDR sp, CORE_ADDR funaddr,
+		      struct value **args, int nargs,
+		      struct type *value_type,
+		      CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
 		      struct regcache *regcache)
 {
   /* Allocate space sufficient for a breakpoint.  */
@@ -797,7 +799,7 @@ cris_push_dummy_call (struct gdbarch *gd
   int argreg;
   int argnum;
 
-  struct stack_item *si = NULL;
+  struct cris_stack_item *si = NULL;
 
   /* Push the return address.  */
   regcache_cooked_write_unsigned (regcache, SRP_REGNUM, bp_addr);
@@ -819,45 +821,45 @@ cris_push_dummy_call (struct gdbarch *gd
       int reg_demand;
       int i;
       
-      len = TYPE_LENGTH (value_type (args[argnum]));
-      val = value_contents (args[argnum]);
+      len = args[argnum]->type ()->length ();
+      val = args[argnum]->contents ().data ();
       
       /* How may registers worth of storage do we need for this argument?  */
       reg_demand = (len / 4) + (len % 4 != 0 ? 1 : 0);
-        
+	
       if (len <= (2 * 4) && (argreg + reg_demand - 1 <= ARG4_REGNUM))
-        {
-          /* Data passed by value.  Fits in available register(s).  */
-          for (i = 0; i < reg_demand; i++)
-            {
-              regcache->cooked_write (argreg, val);
-              argreg++;
-              val += 4;
-            }
-        }
+	{
+	  /* Data passed by value.  Fits in available register(s).  */
+	  for (i = 0; i < reg_demand; i++)
+	    {
+	      regcache->cooked_write (argreg, val);
+	      argreg++;
+	      val += 4;
+	    }
+	}
       else if (len <= (2 * 4) && argreg <= ARG4_REGNUM)
-        {
-          /* Data passed by value. Does not fit in available register(s).
-             Use the register(s) first, then the stack.  */
-          for (i = 0; i < reg_demand; i++)
-            {
-              if (argreg <= ARG4_REGNUM)
-                {
-        	  regcache->cooked_write (argreg, val);
-                  argreg++;
-                  val += 4;
-                }
-              else
-                {
+	{
+	  /* Data passed by value. Does not fit in available register(s).
+	     Use the register(s) first, then the stack.  */
+	  for (i = 0; i < reg_demand; i++)
+	    {
+	      if (argreg <= ARG4_REGNUM)
+		{
+		  regcache->cooked_write (argreg, val);
+		  argreg++;
+		  val += 4;
+		}
+	      else
+		{
 		  /* Push item for later so that pushed arguments
 		     come in the right order.  */
 		  si = push_stack_item (si, val, 4);
-                  val += 4;
-                }
-            }
-        }
+		  val += 4;
+		}
+	    }
+	}
       else if (len > (2 * 4))
-        {
+	{
 	  /* Data passed by reference.  Push copy of data onto stack
 	     and pass pointer to this copy as argument.  */
 	  sp = (sp - len) & ~3;
@@ -874,13 +876,13 @@ cris_push_dummy_call (struct gdbarch *gd
 	      store_unsigned_integer (buf, 4, byte_order, sp);
 	      si = push_stack_item (si, buf, 4);
 	    }
-        }
+	}
       else
-        {
-          /* Data passed by value.  No available registers.  Put it on
-             the stack.  */
+	{
+	  /* Data passed by value.  No available registers.  Put it on
+	     the stack.  */
 	   si = push_stack_item (si, val, len);
-        }
+	}
     }
 
   while (si)
@@ -900,6 +902,7 @@ cris_push_dummy_call (struct gdbarch *gd
 
 static const struct frame_unwind cris_frame_unwind = 
 {
+  "cris prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   cris_frame_this_id,
@@ -909,7 +912,7 @@ static const struct frame_unwind cris_fr
 };
 
 static CORE_ADDR
-cris_frame_base_address (struct frame_info *this_frame, void **this_cache)
+cris_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct cris_unwind_cache *info
     = cris_frame_unwind_cache (this_frame, this_cache);
@@ -1001,7 +1004,7 @@ static const struct frame_base cris_fram
    determine that it is a prologue (1).  */
 
 static CORE_ADDR 
-cris_scan_prologue (CORE_ADDR pc, struct frame_info *this_frame,
+cris_scan_prologue (CORE_ADDR pc, frame_info_ptr this_frame,
 		    struct cris_unwind_cache *info)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -1048,165 +1051,165 @@ cris_scan_prologue (CORE_ADDR pc, struct
       insn = read_memory_unsigned_integer (pc, 2, byte_order);
       pc += 2;
       if (insn == 0xE1FC)
-        {
-          /* push <reg> 32 bit instruction.  */
-          insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
-          pc += 2;
-          regno = cris_get_operand2 (insn_next);
+	{
+	  /* push <reg> 32 bit instruction.  */
+	  insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
+	  pc += 2;
+	  regno = cris_get_operand2 (insn_next);
 	  if (info)
 	    {
 	      info->sp_offset += 4;
 	    }
-          /* This check, meant to recognize srp, used to be regno == 
-             (SRP_REGNUM - NUM_GENREGS), but that covers r11 also.  */
-          if (insn_next == 0xBE7E)
-            {
+	  /* This check, meant to recognize srp, used to be regno == 
+	     (SRP_REGNUM - NUM_GENREGS), but that covers r11 also.  */
+	  if (insn_next == 0xBE7E)
+	    {
 	      if (info)
 		{
 		  info->leaf_function = 0;
 		}
-            }
+	    }
 	  else if (insn_next == 0x8FEE)
-            {
+	    {
 	      /* push $r8 */
 	      if (info)
 		{
 		  info->r8_offset = info->sp_offset;
 		}
-            }
-        }
+	    }
+	}
       else if (insn == 0x866E)
-        {
-          /* move.d sp,r8 */
+	{
+	  /* move.d sp,r8 */
 	  if (info)
 	    {
 	      info->uses_frame = 1;
 	    }
-          continue;
-        }
+	  continue;
+	}
       else if (cris_get_operand2 (insn) == gdbarch_sp_regnum (gdbarch)
-               && cris_get_mode (insn) == 0x0000
-               && cris_get_opcode (insn) == 0x000A)
-        {
-          /* subq <val>,sp */
+	       && cris_get_mode (insn) == 0x0000
+	       && cris_get_opcode (insn) == 0x000A)
+	{
+	  /* subq <val>,sp */
 	  if (info)
 	    {
 	      info->sp_offset += cris_get_quick_value (insn);
 	    }
-        }
+	}
       else if (cris_get_mode (insn) == 0x0002 
-               && cris_get_opcode (insn) == 0x000F
-               && cris_get_size (insn) == 0x0003
-               && cris_get_operand1 (insn) == gdbarch_sp_regnum (gdbarch))
-        {
-          /* movem r<regsave>,[sp] */
-          regsave = cris_get_operand2 (insn);
-        }
+	       && cris_get_opcode (insn) == 0x000F
+	       && cris_get_size (insn) == 0x0003
+	       && cris_get_operand1 (insn) == gdbarch_sp_regnum (gdbarch))
+	{
+	  /* movem r<regsave>,[sp] */
+	  regsave = cris_get_operand2 (insn);
+	}
       else if (cris_get_operand2 (insn) == gdbarch_sp_regnum (gdbarch)
-               && ((insn & 0x0F00) >> 8) == 0x0001
-               && (cris_get_signed_offset (insn) < 0))
-        {
-          /* Immediate byte offset addressing prefix word with sp as base 
-             register.  Used for CRIS v8 i.e. ETRAX 100 and newer if <val> 
-             is between 64 and 128. 
-             movem r<regsave>,[sp=sp-<val>] */
+	       && ((insn & 0x0F00) >> 8) == 0x0001
+	       && (cris_get_signed_offset (insn) < 0))
+	{
+	  /* Immediate byte offset addressing prefix word with sp as base 
+	     register.  Used for CRIS v8 i.e. ETRAX 100 and newer if <val> 
+	     is between 64 and 128. 
+	     movem r<regsave>,[sp=sp-<val>] */
 	  if (info)
 	    {
 	      info->sp_offset += -cris_get_signed_offset (insn);
 	    }
 	  insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
-          pc += 2;
-          if (cris_get_mode (insn_next) == PREFIX_ASSIGN_MODE
-              && cris_get_opcode (insn_next) == 0x000F
-              && cris_get_size (insn_next) == 0x0003
-              && cris_get_operand1 (insn_next) == gdbarch_sp_regnum
+	  pc += 2;
+	  if (cris_get_mode (insn_next) == PREFIX_ASSIGN_MODE
+	      && cris_get_opcode (insn_next) == 0x000F
+	      && cris_get_size (insn_next) == 0x0003
+	      && cris_get_operand1 (insn_next) == gdbarch_sp_regnum
 						  (gdbarch))
-            {
-              regsave = cris_get_operand2 (insn_next);
-            }
-          else
-            {
-              /* The prologue ended before the limit was reached.  */
-              pc -= 4;
-              break;
-            }
-        }
+	    {
+	      regsave = cris_get_operand2 (insn_next);
+	    }
+	  else
+	    {
+	      /* The prologue ended before the limit was reached.  */
+	      pc -= 4;
+	      break;
+	    }
+	}
       else if (cris_get_mode (insn) == 0x0001
-               && cris_get_opcode (insn) == 0x0009
-               && cris_get_size (insn) == 0x0002)
-        {
-          /* move.d r<10..13>,r<0..15> */
-          source_register = cris_get_operand1 (insn);
-
-          /* FIXME?  In the glibc solibs, the prologue might contain something
-             like (this example taken from relocate_doit):
-             move.d $pc,$r0
-             sub.d 0xfffef426,$r0
-             which isn't covered by the source_register check below.  Question
-             is whether to add a check for this combo, or make better use of
-             the limit variable instead.  */
-          if (source_register < ARG1_REGNUM || source_register > ARG4_REGNUM)
-            {
-              /* The prologue ended before the limit was reached.  */
-              pc -= 2;
-              break;
-            }
-        }
+	       && cris_get_opcode (insn) == 0x0009
+	       && cris_get_size (insn) == 0x0002)
+	{
+	  /* move.d r<10..13>,r<0..15> */
+	  source_register = cris_get_operand1 (insn);
+
+	  /* FIXME?  In the glibc solibs, the prologue might contain something
+	     like (this example taken from relocate_doit):
+	     move.d $pc,$r0
+	     sub.d 0xfffef426,$r0
+	     which isn't covered by the source_register check below.  Question
+	     is whether to add a check for this combo, or make better use of
+	     the limit variable instead.  */
+	  if (source_register < ARG1_REGNUM || source_register > ARG4_REGNUM)
+	    {
+	      /* The prologue ended before the limit was reached.  */
+	      pc -= 2;
+	      break;
+	    }
+	}
       else if (cris_get_operand2 (insn) == CRIS_FP_REGNUM 
-               /* The size is a fixed-size.  */
-               && ((insn & 0x0F00) >> 8) == 0x0001 
-               /* A negative offset.  */
-               && (cris_get_signed_offset (insn) < 0))  
-        {
-          /* move.S rZ,[r8-U] (?) */
-          insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
-          pc += 2;
-          regno = cris_get_operand2 (insn_next);
-          if ((regno >= 0 && regno < gdbarch_sp_regnum (gdbarch))
-              && cris_get_mode (insn_next) == PREFIX_OFFSET_MODE
-              && cris_get_opcode (insn_next) == 0x000F)
-            {
-              /* move.S rZ,[r8-U] */
-              continue;
-            }
-          else
-            {
-              /* The prologue ended before the limit was reached.  */
-              pc -= 4;
-              break;
-            }
-        }
+	       /* The size is a fixed-size.  */
+	       && ((insn & 0x0F00) >> 8) == 0x0001 
+	       /* A negative offset.  */
+	       && (cris_get_signed_offset (insn) < 0))  
+	{
+	  /* move.S rZ,[r8-U] (?) */
+	  insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
+	  pc += 2;
+	  regno = cris_get_operand2 (insn_next);
+	  if ((regno >= 0 && regno < gdbarch_sp_regnum (gdbarch))
+	      && cris_get_mode (insn_next) == PREFIX_OFFSET_MODE
+	      && cris_get_opcode (insn_next) == 0x000F)
+	    {
+	      /* move.S rZ,[r8-U] */
+	      continue;
+	    }
+	  else
+	    {
+	      /* The prologue ended before the limit was reached.  */
+	      pc -= 4;
+	      break;
+	    }
+	}
       else if (cris_get_operand2 (insn) == CRIS_FP_REGNUM 
-               /* The size is a fixed-size.  */
-               && ((insn & 0x0F00) >> 8) == 0x0001 
-               /* A positive offset.  */
-               && (cris_get_signed_offset (insn) > 0))  
-        {
-          /* move.S [r8+U],rZ (?) */
+	       /* The size is a fixed-size.  */
+	       && ((insn & 0x0F00) >> 8) == 0x0001 
+	       /* A positive offset.  */
+	       && (cris_get_signed_offset (insn) > 0))  
+	{
+	  /* move.S [r8+U],rZ (?) */
 	  insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
-          pc += 2;
-          regno = cris_get_operand2 (insn_next);
-          if ((regno >= 0 && regno < gdbarch_sp_regnum (gdbarch))
-              && cris_get_mode (insn_next) == PREFIX_OFFSET_MODE
-              && cris_get_opcode (insn_next) == 0x0009
-              && cris_get_operand1 (insn_next) == regno)
-            {
-              /* move.S [r8+U],rZ */
-              continue;
-            }
-          else
-            {
-              /* The prologue ended before the limit was reached.  */
-              pc -= 4;
-              break;
-            }
-        }
+	  pc += 2;
+	  regno = cris_get_operand2 (insn_next);
+	  if ((regno >= 0 && regno < gdbarch_sp_regnum (gdbarch))
+	      && cris_get_mode (insn_next) == PREFIX_OFFSET_MODE
+	      && cris_get_opcode (insn_next) == 0x0009
+	      && cris_get_operand1 (insn_next) == regno)
+	    {
+	      /* move.S [r8+U],rZ */
+	      continue;
+	    }
+	  else
+	    {
+	      /* The prologue ended before the limit was reached.  */
+	      pc -= 4;
+	      break;
+	    }
+	}
       else
-        {
-          /* The prologue ended before the limit was reached.  */
-          pc -= 2;
-          break;
-        }
+	{
+	  /* The prologue ended before the limit was reached.  */
+	  pc -= 2;
+	  break;
+	}
     }
 
   /* We only want to know the end of the prologue when this_frame and info
@@ -1224,21 +1227,21 @@ cris_scan_prologue (CORE_ADDR pc, struct
     {
       ULONGEST this_base;
       /* The SP was moved to the FP.  This indicates that a new frame
-         was created.  Get THIS frame's FP value by unwinding it from
-         the next frame.  */
+	 was created.  Get THIS frame's FP value by unwinding it from
+	 the next frame.  */
       this_base = get_frame_register_unsigned (this_frame, CRIS_FP_REGNUM);
       info->base = this_base;
-      info->saved_regs[CRIS_FP_REGNUM].addr = info->base;
+      info->saved_regs[CRIS_FP_REGNUM].set_addr (info->base);
   
       /* The FP points at the last saved register.  Adjust the FP back
-         to before the first saved register giving the SP.  */
+	 to before the first saved register giving the SP.  */
       info->prev_sp = info->base + info->r8_offset;
     }
   else
     {
       ULONGEST this_base;      
       /* Assume that the FP is this frame's SP but with that pushed
-         stack space added back.  */
+	 stack space added back.  */
       this_base = get_frame_register_unsigned (this_frame,
 					       gdbarch_sp_regnum (gdbarch));
       info->base = this_base;
@@ -1253,14 +1256,13 @@ cris_scan_prologue (CORE_ADDR pc, struct
 
   for (regno = regsave; regno >= 0; regno--)
     {
-      info->saved_regs[regno].addr = info->base + info->r8_offset - val;
+      info->saved_regs[regno].set_addr (info->base + info->r8_offset - val);
       val -= 4;
     }
 
   /* The previous frame's SP needed to be computed.  Save the computed
      value.  */
-  trad_frame_set_value (info->saved_regs,
-			gdbarch_sp_regnum (gdbarch), info->prev_sp);
+  info->saved_regs[gdbarch_sp_regnum (gdbarch)].set_value (info->prev_sp);
 
   if (!info->leaf_function)
     {
@@ -1268,12 +1270,12 @@ cris_scan_prologue (CORE_ADDR pc, struct
       if (info->r8_offset == 0)
 	{
 	  /* R8 not pushed yet.  */
-	  info->saved_regs[SRP_REGNUM].addr = info->base;
+	  info->saved_regs[SRP_REGNUM].set_addr (info->base);
 	}
       else
 	{
 	  /* R8 pushed, but SP may or may not be moved to R8 yet.  */
-	  info->saved_regs[SRP_REGNUM].addr = info->base + 4;
+	  info->saved_regs[SRP_REGNUM].set_addr (info->base + 4);
 	}
     }
 
@@ -1285,7 +1287,7 @@ cris_scan_prologue (CORE_ADDR pc, struct
 }
 
 static CORE_ADDR 
-crisv32_scan_prologue (CORE_ADDR pc, struct frame_info *this_frame,
+crisv32_scan_prologue (CORE_ADDR pc, frame_info_ptr this_frame,
 		    struct cris_unwind_cache *info)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -1332,7 +1334,7 @@ crisv32_scan_prologue (CORE_ADDR pc, str
 static CORE_ADDR
 cris_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
   CORE_ADDR func_addr, func_end;
   struct symtab_and_line sal;
   CORE_ADDR pc_after_prologue;
@@ -1367,7 +1369,7 @@ cris_breakpoint_kind_from_pc (struct gdb
 static const gdb_byte *
 cris_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
   static unsigned char break8_insn[] = {0x38, 0xe9};
   static unsigned char break15_insn[] = {0x3f, 0xe9};
 
@@ -1386,7 +1388,7 @@ static int
 cris_spec_reg_applicable (struct gdbarch *gdbarch,
 			  struct cris_spec_reg spec_reg)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
   unsigned int version = tdep->cris_version;
   
   switch (spec_reg.applicable_version)
@@ -1439,16 +1441,16 @@ cris_register_size (struct gdbarch *gdba
   else if (regno >= NUM_GENREGS && regno < (NUM_GENREGS + NUM_SPECREGS))
     {
       /* Special register (R16 - R31).  cris_spec_regs is zero-based. 
-         Adjust regno accordingly.  */
+	 Adjust regno accordingly.  */
       spec_regno = regno - NUM_GENREGS;
       
       for (i = 0; cris_spec_regs[i].name != NULL; i++)
-        {
-          if (cris_spec_regs[i].number == spec_regno 
-              && cris_spec_reg_applicable (gdbarch, cris_spec_regs[i]))
-            /* Go with the first applicable register.  */
-            return cris_spec_regs[i].reg_size;
-        }
+	{
+	  if (cris_spec_regs[i].number == spec_regno 
+	      && cris_spec_reg_applicable (gdbarch, cris_spec_regs[i]))
+	    /* Go with the first applicable register.  */
+	    return cris_spec_regs[i].reg_size;
+	}
       /* Special register not applicable to this CRIS version.  */
       return 0;
     }
@@ -1471,7 +1473,7 @@ static int
 cris_cannot_fetch_register (struct gdbarch *gdbarch, int regno)
 {
   return ((regno < 0 || regno >= gdbarch_num_regs (gdbarch))
-          || (cris_register_size (gdbarch, regno) == 0));
+	  || (cris_register_size (gdbarch, regno) == 0));
 }
 
 /* Nonzero if regno should not be written to the target, for various 
@@ -1512,7 +1514,7 @@ static int
 crisv32_cannot_fetch_register (struct gdbarch *gdbarch, int regno)
 {
   return ((regno < 0 || regno >= gdbarch_num_regs (gdbarch))
-          || (cris_register_size (gdbarch, regno) == 0));
+	  || (cris_register_size (gdbarch, regno) == 0));
 }
 
 /* Nonzero if regno should not be written to the target, for various 
@@ -1609,7 +1611,7 @@ cris_store_return_value (struct type *ty
   struct gdbarch *gdbarch = regcache->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   ULONGEST val;
-  int len = TYPE_LENGTH (type);
+  int len = type->length ();
   
   if (len <= 4)
     {
@@ -1652,7 +1654,7 @@ cris_special_register_name (struct gdbar
 	return cris_spec_regs[i].name;
     }
   /* Special register not applicable to this CRIS version.  */
-  return NULL;
+  return "";
 }
 
 static const char *
@@ -1664,9 +1666,10 @@ cris_register_name (struct gdbarch *gdba
     "r8",  "r9",  "r10", "r11", \
     "r12", "r13", "sp",  "pc" };
 
-  if (regno >= 0 && regno < NUM_GENREGS)
+  if (regno < NUM_GENREGS)
     {
       /* General register.  */
+      static_assert (ARRAY_SIZE (cris_genreg_names) == NUM_GENREGS);
       return cris_genreg_names[regno];
     }
   else if (regno >= NUM_GENREGS && regno < gdbarch_num_regs (gdbarch))
@@ -1676,7 +1679,7 @@ cris_register_name (struct gdbarch *gdba
   else
     {
       /* Invalid register.  */
-      return NULL;
+      return "";
     }
 }
 
@@ -1752,8 +1755,8 @@ cris_dwarf2_reg_to_regnum (struct gdbarc
 
 static void
 cris_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
-                            struct dwarf2_frame_state_reg *reg,
-			    struct frame_info *this_frame)
+			    struct dwarf2_frame_state_reg *reg,
+			    frame_info_ptr this_frame)
 {
   /* The return address column.  */
   if (regnum == gdbarch_pc_regnum (gdbarch))
@@ -1777,7 +1780,7 @@ cris_extract_return_value (struct type *
   struct gdbarch *gdbarch = regcache->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   ULONGEST val;
-  int len = TYPE_LENGTH (type);
+  int len = type->length ();
   
   if (len <= 4)
     {
@@ -1804,9 +1807,9 @@ cris_return_value (struct gdbarch *gdbar
 		   struct type *type, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT 
-      || TYPE_CODE (type) == TYPE_CODE_UNION
-      || TYPE_LENGTH (type) > 8)
+  if (type->code () == TYPE_CODE_STRUCT
+      || type->code () == TYPE_CODE_UNION
+      || type->length () > 8)
     /* Structs, unions, and anything larger than 8 bytes (2 registers)
        goes on the stack.  */
     return RETURN_VALUE_STRUCT_CONVENTION;
@@ -1824,7 +1827,7 @@ cris_return_value (struct gdbarch *gdbar
 
 static int
 constraint (unsigned int insn, const char *inst_args,
-            inst_env_type *inst_env)
+	    inst_env_type *inst_env)
 {
   int retval = 0;
   int tmp, i;
@@ -1835,61 +1838,61 @@ constraint (unsigned int insn, const cha
     switch (*s) 
       {
       case 'm':
-        if ((insn & 0x30) == 0x30)
-          return -1;
-        break;
-        
+	if ((insn & 0x30) == 0x30)
+	  return -1;
+	break;
+	
       case 'S':
-        /* A prefix operand.  */
-        if (inst_env->prefix_found)
-          break;
-        else
-          return -1;
+	/* A prefix operand.  */
+	if (inst_env->prefix_found)
+	  break;
+	else
+	  return -1;
 
       case 'B':
-        /* A "push" prefix.  (This check was REMOVED by san 970921.)  Check for
-           valid "push" size.  In case of special register, it may be != 4.  */
-        if (inst_env->prefix_found)
-          break;
-        else
-          return -1;
+	/* A "push" prefix.  (This check was REMOVED by san 970921.)  Check for
+	   valid "push" size.  In case of special register, it may be != 4.  */
+	if (inst_env->prefix_found)
+	  break;
+	else
+	  return -1;
 
       case 'D':
-        retval = (((insn >> 0xC) & 0xF) == (insn & 0xF));
-        if (!retval)
-          return -1;
-        else 
-          retval += 4;
-        break;
+	retval = (((insn >> 0xC) & 0xF) == (insn & 0xF));
+	if (!retval)
+	  return -1;
+	else 
+	  retval += 4;
+	break;
 
       case 'P':
-        tmp = (insn >> 0xC) & 0xF;
+	tmp = (insn >> 0xC) & 0xF;
 
-        for (i = 0; cris_spec_regs[i].name != NULL; i++)
-          {
-            /* Since we match four bits, we will give a value of
-               4 - 1 = 3 in a match.  If there is a corresponding
-               exact match of a special register in another pattern, it
-               will get a value of 4, which will be higher.  This should
-               be correct in that an exact pattern would match better that
-               a general pattern.
-               Note that there is a reason for not returning zero; the
-               pattern for "clear" is partly  matched in the bit-pattern
-               (the two lower bits must be zero), while the bit-pattern
-               for a move from a special register is matched in the
-               register constraint.
-               This also means we will will have a race condition if
-               there is a partly match in three bits in the bit pattern.  */
-            if (tmp == cris_spec_regs[i].number)
-              {
-                retval += 3;
-                break;
-              }
-          }
-        
-        if (cris_spec_regs[i].name == NULL)
-          return -1;
-        break;
+	for (i = 0; cris_spec_regs[i].name != NULL; i++)
+	  {
+	    /* Since we match four bits, we will give a value of
+	       4 - 1 = 3 in a match.  If there is a corresponding
+	       exact match of a special register in another pattern, it
+	       will get a value of 4, which will be higher.  This should
+	       be correct in that an exact pattern would match better that
+	       a general pattern.
+	       Note that there is a reason for not returning zero; the
+	       pattern for "clear" is partly  matched in the bit-pattern
+	       (the two lower bits must be zero), while the bit-pattern
+	       for a move from a special register is matched in the
+	       register constraint.
+	       This also means we will will have a race condition if
+	       there is a partly match in three bits in the bit pattern.  */
+	    if (tmp == cris_spec_regs[i].number)
+	      {
+		retval += 3;
+		break;
+	      }
+	  }
+	
+	if (cris_spec_regs[i].name == NULL)
+	  return -1;
+	break;
       }
   return retval;
 }
@@ -1923,27 +1926,27 @@ find_cris_op (unsigned short insn, inst_
   for (i = 0; cris_opcodes[i].name != NULL; i++)
     {
       if (((cris_opcodes[i].match & insn) == cris_opcodes[i].match) 
-          && ((cris_opcodes[i].lose & insn) == 0)
+	  && ((cris_opcodes[i].lose & insn) == 0)
 	  /* Only CRISv10 instructions, please.  */
 	  && (cris_opcodes[i].applicable_version != cris_ver_v32p))
-        {
-          level_of_match = constraint (insn, cris_opcodes[i].args, inst_env);
-          if (level_of_match >= 0)
-            {
-              level_of_match +=
-                number_of_bits (cris_opcodes[i].match | cris_opcodes[i].lose);
-              if (level_of_match > max_level_of_match)
-                {
-                  max_matched = i;
-                  max_level_of_match = level_of_match;
-                  if (level_of_match == 16)
-                    {
-                      /* All bits matched, cannot find better.  */
-                      break;
-                    }
-                }
-            }
-        }
+	{
+	  level_of_match = constraint (insn, cris_opcodes[i].args, inst_env);
+	  if (level_of_match >= 0)
+	    {
+	      level_of_match +=
+		number_of_bits (cris_opcodes[i].match | cris_opcodes[i].lose);
+	      if (level_of_match > max_level_of_match)
+		{
+		  max_matched = i;
+		  max_level_of_match = level_of_match;
+		  if (level_of_match == 16)
+		    {
+		      /* All bits matched, cannot find better.  */
+		      break;
+		    }
+		}
+	    }
+	}
     }
   return max_matched;
 }
@@ -1989,33 +1992,33 @@ find_step_target (struct regcache *regca
 	     (inst_env->reg[gdbarch_pc_regnum (gdbarch)], 2, byte_order);
 
       /* If the instruction is not in a delay slot the new content of the
-         PC is [PC] + 2.  If the instruction is in a delay slot it is not
-         that simple.  Since a instruction in a delay slot cannot change 
-         the content of the PC, it does not matter what value PC will have. 
-         Just make sure it is a valid instruction.  */
+	 PC is [PC] + 2.  If the instruction is in a delay slot it is not
+	 that simple.  Since a instruction in a delay slot cannot change 
+	 the content of the PC, it does not matter what value PC will have. 
+	 Just make sure it is a valid instruction.  */
       if (!inst_env->delay_slot_pc_active)
-        {
-          inst_env->reg[gdbarch_pc_regnum (gdbarch)] += 2;
-        }
+	{
+	  inst_env->reg[gdbarch_pc_regnum (gdbarch)] += 2;
+	}
       else
-        {
-          inst_env->delay_slot_pc_active = 0;
-          inst_env->reg[gdbarch_pc_regnum (gdbarch)]
+	{
+	  inst_env->delay_slot_pc_active = 0;
+	  inst_env->reg[gdbarch_pc_regnum (gdbarch)]
 	    = inst_env->delay_slot_pc;
-        }
+	}
       /* Analyse the present instruction.  */
       i = find_cris_op (insn, inst_env);
       if (i == -1)
-        {
-          inst_env->invalid = 1;
-        }
+	{
+	  inst_env->invalid = 1;
+	}
       else
-        {
-          cris_gdb_func (gdbarch, cris_opcodes[i].op, insn, inst_env);
-        }
+	{
+	  cris_gdb_func (gdbarch, cris_opcodes[i].op, insn, inst_env);
+	}
     } while (!inst_env->invalid 
-             && (inst_env->prefix_found || inst_env->xflag_found 
-                 || inst_env->slot_needed));
+	     && (inst_env->prefix_found || inst_env->xflag_found 
+		 || inst_env->slot_needed));
   return i;
 }
 
@@ -2042,7 +2045,7 @@ cris_software_single_step (struct regcac
   else
     {
       /* Insert at most two breakpoints.  One for the next PC content
-         and possibly another one for a branch, jump, etc.  */
+	 and possibly another one for a branch, jump, etc.  */
       CORE_ADDR next_pc
 	= (CORE_ADDR) inst_env.reg[gdbarch_pc_regnum (gdbarch)];
 
@@ -2094,11 +2097,11 @@ process_autoincrement (int size, unsigne
       inst_env->reg[cris_get_operand1 (inst)] += 1;
 
       /* The PC must be word aligned, so increase the PC with one
-         word even if the size is byte.  */
+	 word even if the size is byte.  */
       if (cris_get_operand1 (inst) == REG_PC)
-        {
-          inst_env->reg[REG_PC] += 1;
-        }
+	{
+	  inst_env->reg[REG_PC] += 1;
+	}
     }
   else if (size == INST_WORD_SIZE)
     {
@@ -2315,19 +2318,19 @@ abs_op (unsigned short inst, inst_env_ty
     
       /* It's invalid to change to the PC if we are in a delay slot.  */
       if (inst_env->slot_needed)
-        {
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  inst_env->invalid = 1;
+	  return;
+	}
 
       value = (long) inst_env->reg[REG_PC];
 
       /* The value of abs (SIGNED_DWORD_MASK) is SIGNED_DWORD_MASK.  */
       if (value != SIGNED_DWORD_MASK)
-        {
-          value = -value;
-          inst_env->reg[REG_PC] = (long) value;
-        }
+	{
+	  value = -value;
+	  inst_env->reg[REG_PC] = (long) value;
+	}
     }
 
   inst_env->slot_needed = 0;
@@ -2376,10 +2379,10 @@ asr_op (unsigned short inst, inst_env_ty
     {
       /* It's invalid to change the PC in a delay slot.  */
       if (inst_env->slot_needed)
-        {
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  inst_env->invalid = 1;
+	  return;
+	}
       /* Get the number of bits to shift.  */
       shift_steps
 	= cris_get_asr_shift_steps (inst_env->reg[cris_get_operand1 (inst)]);
@@ -2387,45 +2390,45 @@ asr_op (unsigned short inst, inst_env_ty
 
       /* Find out how many bits the operation should apply to.  */
       if (cris_get_size (inst) == INST_BYTE_SIZE)
-        {
-          if (value & SIGNED_BYTE_MASK)
-            {
-              signed_extend_mask = 0xFF;
-              signed_extend_mask = signed_extend_mask >> shift_steps;
-              signed_extend_mask = ~signed_extend_mask;
-            }
-          value = value >> shift_steps;
-          value |= signed_extend_mask;
-          value &= 0xFF;
-          inst_env->reg[REG_PC] &= 0xFFFFFF00;
-          inst_env->reg[REG_PC] |= value;
-        }
+	{
+	  if (value & SIGNED_BYTE_MASK)
+	    {
+	      signed_extend_mask = 0xFF;
+	      signed_extend_mask = signed_extend_mask >> shift_steps;
+	      signed_extend_mask = ~signed_extend_mask;
+	    }
+	  value = value >> shift_steps;
+	  value |= signed_extend_mask;
+	  value &= 0xFF;
+	  inst_env->reg[REG_PC] &= 0xFFFFFF00;
+	  inst_env->reg[REG_PC] |= value;
+	}
       else if (cris_get_size (inst) == INST_WORD_SIZE)
-        {
-          if (value & SIGNED_WORD_MASK)
-            {
-              signed_extend_mask = 0xFFFF;
-              signed_extend_mask = signed_extend_mask >> shift_steps;
-              signed_extend_mask = ~signed_extend_mask;
-            }
-          value = value >> shift_steps;
-          value |= signed_extend_mask;
-          value &= 0xFFFF;
-          inst_env->reg[REG_PC] &= 0xFFFF0000;
-          inst_env->reg[REG_PC] |= value;
-        }
+	{
+	  if (value & SIGNED_WORD_MASK)
+	    {
+	      signed_extend_mask = 0xFFFF;
+	      signed_extend_mask = signed_extend_mask >> shift_steps;
+	      signed_extend_mask = ~signed_extend_mask;
+	    }
+	  value = value >> shift_steps;
+	  value |= signed_extend_mask;
+	  value &= 0xFFFF;
+	  inst_env->reg[REG_PC] &= 0xFFFF0000;
+	  inst_env->reg[REG_PC] |= value;
+	}
       else if (cris_get_size (inst) == INST_DWORD_SIZE)
-        {
-          if (value & SIGNED_DWORD_MASK)
-            {
-              signed_extend_mask = 0xFFFFFFFF;
-              signed_extend_mask = signed_extend_mask >> shift_steps;
-              signed_extend_mask = ~signed_extend_mask;
-            }
-          value = value >> shift_steps;
-          value |= signed_extend_mask;
-          inst_env->reg[REG_PC]  = value;
-        }
+	{
+	  if (value & SIGNED_DWORD_MASK)
+	    {
+	      signed_extend_mask = 0xFFFFFFFF;
+	      signed_extend_mask = signed_extend_mask >> shift_steps;
+	      signed_extend_mask = ~signed_extend_mask;
+	    }
+	  value = value >> shift_steps;
+	  value |= signed_extend_mask;
+	  inst_env->reg[REG_PC]  = value;
+	}
     }
   inst_env->slot_needed = 0;
   inst_env->prefix_found = 0;
@@ -2456,20 +2459,20 @@ asrq_op (unsigned short inst, inst_env_t
 
       /* It's invalid to change the PC in a delay slot.  */
       if (inst_env->slot_needed)
-        {
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  inst_env->invalid = 1;
+	  return;
+	}
       /* The shift size is given as a 5 bit quick value, i.e. we don't
-         want the sign bit of the quick value.  */
+	 want the sign bit of the quick value.  */
       shift_steps = cris_get_asr_shift_steps (inst);
       value = inst_env->reg[REG_PC];
       if (value & SIGNED_DWORD_MASK)
-        {
-          signed_extend_mask = 0xFFFFFFFF;
-          signed_extend_mask = signed_extend_mask >> shift_steps;
-          signed_extend_mask = ~signed_extend_mask;
-        }
+	{
+	  signed_extend_mask = 0xFFFFFFFF;
+	  signed_extend_mask = signed_extend_mask >> shift_steps;
+	  signed_extend_mask = ~signed_extend_mask;
+	}
       value = value >> shift_steps;
       value |= signed_extend_mask;
       inst_env->reg[REG_PC]  = value;
@@ -2540,10 +2543,10 @@ two_operand_bound_op (unsigned short ins
     {
       /* It's invalid to change the PC in a delay slot.  */
       if (inst_env->slot_needed)
-        {
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  inst_env->invalid = 1;
+	  return;
+	}
       process_autoincrement (cris_get_size (inst), inst, inst_env);
     }
   inst_env->slot_needed = 0;
@@ -2617,19 +2620,19 @@ reg_mode_clear_op (unsigned short inst,
       /* The instruction will clear the instruction's size bits.  */
       int clear_size = cris_get_clear_size (inst);
       if (clear_size == INST_BYTE_SIZE)
-        {
-          inst_env->delay_slot_pc = inst_env->reg[REG_PC] & 0xFFFFFF00;
-        }
+	{
+	  inst_env->delay_slot_pc = inst_env->reg[REG_PC] & 0xFFFFFF00;
+	}
       if (clear_size == INST_WORD_SIZE)
-        {
-          inst_env->delay_slot_pc = inst_env->reg[REG_PC] & 0xFFFF0000;
-        }
+	{
+	  inst_env->delay_slot_pc = inst_env->reg[REG_PC] & 0xFFFF0000;
+	}
       if (clear_size == INST_DWORD_SIZE)
-        {
-          inst_env->delay_slot_pc = 0x0;
-        }
+	{
+	  inst_env->delay_slot_pc = 0x0;
+	}
       /* The jump will be delayed with one delay slot.  So we need a delay 
-         slot.  */
+	 slot.  */
       inst_env->slot_needed = 1;
       inst_env->delay_slot_pc_active = 1;
     }
@@ -2671,7 +2674,7 @@ none_reg_mode_clear_test_op (unsigned sh
   if (inst_env->prefix_found)
     {
       /* The only way the PC can change is if this instruction is in
-         assign addressing mode.  */
+	 assign addressing mode.  */
       check_assign (inst, inst_env);
     }
   /* Indirect mode can't change the PC so just check if the mode is
@@ -2782,27 +2785,27 @@ none_reg_mode_jump_op (unsigned short in
     {
       /* Check if we have a prefix.  */
       if (inst_env->prefix_found)
-        {
-          check_assign (inst, inst_env);
+	{
+	  check_assign (inst, inst_env);
 
-          /* Get the new value for the PC.  */
-          newpc = 
-            read_memory_unsigned_integer ((CORE_ADDR) inst_env->prefix_value,
-                                          4, inst_env->byte_order);
-        }
+	  /* Get the new value for the PC.  */
+	  newpc = 
+	    read_memory_unsigned_integer ((CORE_ADDR) inst_env->prefix_value,
+					  4, inst_env->byte_order);
+	}
       else
-        {
-          /* Get the new value for the PC.  */
-          address = (CORE_ADDR) inst_env->reg[cris_get_operand1 (inst)];
-          newpc = read_memory_unsigned_integer (address,
+	{
+	  /* Get the new value for the PC.  */
+	  address = (CORE_ADDR) inst_env->reg[cris_get_operand1 (inst)];
+	  newpc = read_memory_unsigned_integer (address,
 						4, inst_env->byte_order);
 
-          /* Check if we should increment a register.  */
-          if (cris_get_mode (inst) == AUTOINC_MODE)
-            {
-              inst_env->reg[cris_get_operand1 (inst)] += 4;
-            }
-        }
+	  /* Check if we should increment a register.  */
+	  if (cris_get_mode (inst) == AUTOINC_MODE)
+	    {
+	      inst_env->reg[cris_get_operand1 (inst)] += 4;
+	    }
+	}
       inst_env->reg[REG_PC] = newpc;
     }
   inst_env->slot_needed = 0;
@@ -2820,45 +2823,45 @@ move_to_preg_op (struct gdbarch *gdbarch
   if (inst_env->prefix_found)
     {
       /* The instruction has a prefix that means we are only interested if
-         the instruction is in assign mode.  */
+	 the instruction is in assign mode.  */
       if (cris_get_mode (inst) == PREFIX_ASSIGN_MODE)
-        {
-          /* The prefix handles the problem if we are in a delay slot.  */
-          if (cris_get_operand1 (inst) == REG_PC)
-            {
-              /* Just take care of the assign.  */
-              check_assign (inst, inst_env);
-            }
-        }
+	{
+	  /* The prefix handles the problem if we are in a delay slot.  */
+	  if (cris_get_operand1 (inst) == REG_PC)
+	    {
+	      /* Just take care of the assign.  */
+	      check_assign (inst, inst_env);
+	    }
+	}
     }
   else if (cris_get_mode (inst) == AUTOINC_MODE)
     {
       /* The instruction doesn't have a prefix, the only case left that we
-         are interested in is the autoincrement mode.  */
+	 are interested in is the autoincrement mode.  */
       if (cris_get_operand1 (inst) == REG_PC)
-        {
-          /* If the PC is to be incremented it's invalid to be in a 
-             delay slot.  */
-          if (inst_env->slot_needed)
-            {
-              inst_env->invalid = 1;
-              return;
-            }
-
-          /* The increment depends on the size of the special register.  */
-          if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 1)
-            {
-              process_autoincrement (INST_BYTE_SIZE, inst, inst_env);
-            }
-          else if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 2)
-            {
-              process_autoincrement (INST_WORD_SIZE, inst, inst_env);
-            }
-          else
-            {
-              process_autoincrement (INST_DWORD_SIZE, inst, inst_env);
-            }
-        }
+	{
+	  /* If the PC is to be incremented it's invalid to be in a 
+	     delay slot.  */
+	  if (inst_env->slot_needed)
+	    {
+	      inst_env->invalid = 1;
+	      return;
+	    }
+
+	  /* The increment depends on the size of the special register.  */
+	  if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 1)
+	    {
+	      process_autoincrement (INST_BYTE_SIZE, inst, inst_env);
+	    }
+	  else if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 2)
+	    {
+	      process_autoincrement (INST_WORD_SIZE, inst, inst_env);
+	    }
+	  else
+	    {
+	      process_autoincrement (INST_DWORD_SIZE, inst, inst_env);
+	    }
+	}
     }
   inst_env->slot_needed = 0;
   inst_env->prefix_found = 0;
@@ -2876,45 +2879,45 @@ none_reg_mode_move_from_preg_op (struct
   if (inst_env->prefix_found)
     {
       /* The instruction has a prefix that means we are only interested if
-         the instruction is in assign mode.  */
+	 the instruction is in assign mode.  */
       if (cris_get_mode (inst) == PREFIX_ASSIGN_MODE)
-        {
-          /* The prefix handles the problem if we are in a delay slot.  */
-          if (cris_get_operand1 (inst) == REG_PC)
-            {
-              /* Just take care of the assign.  */
-              check_assign (inst, inst_env);
-            }
-        }
+	{
+	  /* The prefix handles the problem if we are in a delay slot.  */
+	  if (cris_get_operand1 (inst) == REG_PC)
+	    {
+	      /* Just take care of the assign.  */
+	      check_assign (inst, inst_env);
+	    }
+	}
     }    
   /* The instruction doesn't have a prefix, the only case left that we
      are interested in is the autoincrement mode.  */
   else if (cris_get_mode (inst) == AUTOINC_MODE)
     {
       if (cris_get_operand1 (inst) == REG_PC)
-        {
-          /* If the PC is to be incremented it's invalid to be in a 
-             delay slot.  */
-          if (inst_env->slot_needed)
-            {
-              inst_env->invalid = 1;
-              return;
-            }
-          
-          /* The increment depends on the size of the special register.  */
-          if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 1)
-            {
-              process_autoincrement (INST_BYTE_SIZE, inst, inst_env);
-            }
-          else if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 2)
-            {
-              process_autoincrement (INST_WORD_SIZE, inst, inst_env);
-            }
-          else
-            {
-              process_autoincrement (INST_DWORD_SIZE, inst, inst_env);
-            }
-        }
+	{
+	  /* If the PC is to be incremented it's invalid to be in a 
+	     delay slot.  */
+	  if (inst_env->slot_needed)
+	    {
+	      inst_env->invalid = 1;
+	      return;
+	    }
+	  
+	  /* The increment depends on the size of the special register.  */
+	  if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 1)
+	    {
+	      process_autoincrement (INST_BYTE_SIZE, inst, inst_env);
+	    }
+	  else if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 2)
+	    {
+	      process_autoincrement (INST_WORD_SIZE, inst, inst_env);
+	    }
+	  else
+	    {
+	      process_autoincrement (INST_DWORD_SIZE, inst, inst_env);
+	    }
+	}
     }
   inst_env->slot_needed = 0;
   inst_env->prefix_found = 0;
@@ -2939,10 +2942,10 @@ reg_mode_move_from_preg_op (unsigned sho
     {
       /* It's invalid to change the PC in a delay slot.  */
       if (inst_env->slot_needed)
-        {
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  inst_env->invalid = 1;
+	  return;
+	}
       /* The destination is the PC, the jump will have a delay slot.  */
       inst_env->delay_slot_pc = inst_env->preg[cris_get_operand2 (inst)];
       inst_env->slot_needed = 1;
@@ -2966,50 +2969,50 @@ move_mem_to_reg_movem_op (unsigned short
   if (inst_env->prefix_found)
     {
       /* The prefix handles the problem if we are in a delay slot.  Is the
-         MOVEM instruction going to change the PC?  */
+	 MOVEM instruction going to change the PC?  */
       if (cris_get_operand2 (inst) >= REG_PC)
-        {
-          inst_env->reg[REG_PC] = 
-            read_memory_unsigned_integer (inst_env->prefix_value,
+	{
+	  inst_env->reg[REG_PC] = 
+	    read_memory_unsigned_integer (inst_env->prefix_value,
 					  4, inst_env->byte_order);
-        }
+	}
       /* The assign value is the value after the increment.  Normally, the   
-         assign value is the value before the increment.  */
+	 assign value is the value before the increment.  */
       if ((cris_get_operand1 (inst) == REG_PC) 
-          && (cris_get_mode (inst) == PREFIX_ASSIGN_MODE))
-        {
-          inst_env->reg[REG_PC] = inst_env->prefix_value;
-          inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
-        }
+	  && (cris_get_mode (inst) == PREFIX_ASSIGN_MODE))
+	{
+	  inst_env->reg[REG_PC] = inst_env->prefix_value;
+	  inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
+	}
     }
   else
     {
       /* Is the MOVEM instruction going to change the PC?  */
       if (cris_get_operand2 (inst) == REG_PC)
-        {
-          /* It's invalid to change the PC in a delay slot.  */
-          if (inst_env->slot_needed)
-            {
-              inst_env->invalid = 1;
-              return;
-            }
-          inst_env->reg[REG_PC] =
-            read_memory_unsigned_integer (inst_env->reg[cris_get_operand1 (inst)], 
-                                          4, inst_env->byte_order);
-        }
+	{
+	  /* It's invalid to change the PC in a delay slot.  */
+	  if (inst_env->slot_needed)
+	    {
+	      inst_env->invalid = 1;
+	      return;
+	    }
+	  inst_env->reg[REG_PC] =
+	    read_memory_unsigned_integer (inst_env->reg[cris_get_operand1 (inst)], 
+					  4, inst_env->byte_order);
+	}
       /* The increment is not depending on the size, instead it's depending
-         on the number of registers loaded from memory.  */
+	 on the number of registers loaded from memory.  */
       if ((cris_get_operand1 (inst) == REG_PC)
 	  && (cris_get_mode (inst) == AUTOINC_MODE))
-        {
-          /* It's invalid to change the PC in a delay slot.  */
-          if (inst_env->slot_needed)
-            {
-              inst_env->invalid = 1;
-              return;
-            }
-          inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1); 
-        }
+	{
+	  /* It's invalid to change the PC in a delay slot.  */
+	  if (inst_env->slot_needed)
+	    {
+	      inst_env->invalid = 1;
+	      return;
+	    }
+	  inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1); 
+	}
     }
   inst_env->slot_needed = 0;
   inst_env->prefix_found = 0;
@@ -3025,30 +3028,30 @@ move_reg_to_mem_movem_op (unsigned short
   if (inst_env->prefix_found)
     {
       /* The assign value is the value after the increment.  Normally, the
-         assign value is the value before the increment.  */
+	 assign value is the value before the increment.  */
       if ((cris_get_operand1 (inst) == REG_PC)
-          && (cris_get_mode (inst) == PREFIX_ASSIGN_MODE))
-        {
-          /* The prefix handles the problem if we are in a delay slot.  */
-          inst_env->reg[REG_PC] = inst_env->prefix_value;
-          inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
-        }
+	  && (cris_get_mode (inst) == PREFIX_ASSIGN_MODE))
+	{
+	  /* The prefix handles the problem if we are in a delay slot.  */
+	  inst_env->reg[REG_PC] = inst_env->prefix_value;
+	  inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
+	}
     }
   else
     {
       /* The increment is not depending on the size, instead it's depending
-         on the number of registers loaded to memory.  */
+	 on the number of registers loaded to memory.  */
       if ((cris_get_operand1 (inst) == REG_PC)
 	  && (cris_get_mode (inst) == AUTOINC_MODE))
-        {
-          /* It's invalid to change the PC in a delay slot.  */
-          if (inst_env->slot_needed)
-            {
-              inst_env->invalid = 1;
-              return;
-            }
-          inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
-        }
+	{
+	  /* It's invalid to change the PC in a delay slot.  */
+	  if (inst_env->slot_needed)
+	    {
+	      inst_env->invalid = 1;
+	      return;
+	    }
+	  inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
+	}
     }
   inst_env->slot_needed = 0;
   inst_env->prefix_found = 0;
@@ -3082,10 +3085,10 @@ xor_op (unsigned short inst, inst_env_ty
     {
       /* It's invalid to change the PC in a delay slot.  */
       if (inst_env->slot_needed)
-        {
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  inst_env->invalid = 1;
+	  return;
+	}
       inst_env->reg[REG_PC] ^= inst_env->reg[cris_get_operand1 (inst)];
     }
   inst_env->slot_needed = 0;
@@ -3147,7 +3150,7 @@ mulu_op (unsigned short inst, inst_env_t
 
 static void 
 add_sub_cmp_and_or_move_action (unsigned short inst, inst_env_type *inst_env, 
-                                unsigned long source1, unsigned long source2)
+				unsigned long source1, unsigned long source2)
 {
   unsigned long pc_mask;
   unsigned long operation_mask;
@@ -3239,11 +3242,11 @@ do_sign_or_zero_extend (unsigned long va
       value &= 0xFFFF;
 
       /* Check if the instruction is signed extend.  If so, check if value has
-         the sign bit on.  */
+	 the sign bit on.  */
       if (cris_is_signed_extend_bit_on (*inst) && (value & SIGNED_WORD_MASK))
-        {
-          value |= SIGNED_WORD_EXTEND_MASK;
-        } 
+	{
+	  value |= SIGNED_WORD_EXTEND_MASK;
+	} 
     }
   else
     {
@@ -3251,11 +3254,11 @@ do_sign_or_zero_extend (unsigned long va
       value &= 0xFF;
 
       /* Check if the instruction is signed extend.  If so, check if value has
-         the sign bit on.  */
+	 the sign bit on.  */
       if (cris_is_signed_extend_bit_on (*inst) && (value & SIGNED_BYTE_MASK))
-        {
-          value |= SIGNED_BYTE_EXTEND_MASK;
-        }
+	{
+	  value |= SIGNED_BYTE_EXTEND_MASK;
+	}
     }
   /* The size should now be dword.  */
   cris_set_size_to_dword (inst);
@@ -3267,7 +3270,7 @@ do_sign_or_zero_extend (unsigned long va
 
 static void 
 reg_mode_add_sub_cmp_and_or_move_op (unsigned short inst,
-                                     inst_env_type *inst_env)
+				     inst_env_type *inst_env)
 {
   unsigned long operand1;
   unsigned long operand2;
@@ -3283,21 +3286,21 @@ reg_mode_add_sub_cmp_and_or_move_op (uns
   if (cris_get_operand2 (inst) == REG_PC)
     {
       if (inst_env->slot_needed)
-        {
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  inst_env->invalid = 1;
+	  return;
+	}
       /* The instruction has the PC as its target register.  */
       operand1 = inst_env->reg[cris_get_operand1 (inst)]; 
       operand2 = inst_env->reg[REG_PC];
 
       /* Check if it's a extend, signed or zero instruction.  */
       if (cris_get_opcode (inst) < 4)
-        {
-          operand1 = do_sign_or_zero_extend (operand1, &inst);
-        }
+	{
+	  operand1 = do_sign_or_zero_extend (operand1, &inst);
+	}
       /* Calculate the PC value after the instruction, i.e. where the
-         breakpoint should be.  The order of the udw_operands is vital.  */
+	 breakpoint should be.  The order of the udw_operands is vital.  */
       add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand1); 
     }
   inst_env->slot_needed = 0;
@@ -3341,7 +3344,7 @@ get_data_from_address (unsigned short *i
 
 static void 
 handle_prefix_assign_mode_for_aritm_op (unsigned short inst, 
-                                        inst_env_type *inst_env)
+					inst_env_type *inst_env)
 {
   unsigned long operand2;
   unsigned long operand3;
@@ -3356,7 +3359,7 @@ handle_prefix_assign_mode_for_aritm_op (
 					inst_env->byte_order);
 
       /* Calculate the PC value after the instruction, i.e. where the
-         breakpoint should be.  The order of the udw_operands is vital.  */
+	 breakpoint should be.  The order of the udw_operands is vital.  */
       add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand3);
     }
   inst_env->slot_needed = 0;
@@ -3371,7 +3374,7 @@ handle_prefix_assign_mode_for_aritm_op (
 
 static void 
 three_operand_add_sub_cmp_and_or_op (unsigned short inst, 
-                                     inst_env_type *inst_env)
+				     inst_env_type *inst_env)
 {
   unsigned long operand2;
   unsigned long operand3;
@@ -3386,7 +3389,7 @@ three_operand_add_sub_cmp_and_or_op (uns
 					inst_env->byte_order);
 
       /* Calculate the PC value after the instruction, i.e. where the
-         breakpoint should be.  */
+	 breakpoint should be.  */
       add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand3);
     }
   inst_env->slot_needed = 0;
@@ -3400,20 +3403,20 @@ three_operand_add_sub_cmp_and_or_op (uns
 
 static void 
 handle_prefix_index_mode_for_aritm_op (unsigned short inst, 
-                                       inst_env_type *inst_env)
+				       inst_env_type *inst_env)
 {
   if (cris_get_operand1 (inst) != cris_get_operand2 (inst))
     {
       /* If the instruction is MOVE it's invalid.  If the instruction is ADD,
-         SUB, AND or OR something weird is going on (if everything works these
-         instructions should end up in the three operand version).  */
+	 SUB, AND or OR something weird is going on (if everything works these
+	 instructions should end up in the three operand version).  */
       inst_env->invalid = 1;
       return;
     }
   else
     {
       /* three_operand_add_sub_cmp_and_or does the same as we should do here
-         so use it.  */
+	 so use it.  */
       three_operand_add_sub_cmp_and_or_op (inst, inst_env);
     }
   inst_env->slot_needed = 0;
@@ -3428,7 +3431,7 @@ handle_prefix_index_mode_for_aritm_op (u
 
 static void 
 handle_inc_and_index_mode_for_aritm_op (unsigned short inst, 
-                                        inst_env_type *inst_env)
+					inst_env_type *inst_env)
 {
   unsigned long operand1;
   unsigned long operand2;
@@ -3440,7 +3443,7 @@ handle_inc_and_index_mode_for_aritm_op (
   if (cris_get_operand2 (inst) == REG_PC)
     {
       /* Must be done here, get_data_from_address may change the size 
-         field.  */
+	 field.  */
       size = cris_get_size (inst);
       operand2 = inst_env->reg[REG_PC];
 
@@ -3449,7 +3452,7 @@ handle_inc_and_index_mode_for_aritm_op (
       operand3 = get_data_from_address (&inst, operand1, inst_env->byte_order);
 
       /* Calculate the PC value after the instruction, i.e. where the
-         breakpoint should be.  The order of the udw_operands is vital.  */
+	 breakpoint should be.  The order of the udw_operands is vital.  */
       add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand3); 
     }
   /* If this is an autoincrement addressing mode, check if the increment
@@ -3461,11 +3464,11 @@ handle_inc_and_index_mode_for_aritm_op (
       size = cris_get_size (inst);
 
       /* If it's an extend instruction we don't want the signed extend bit,
-         because it influences the size.  */
+	 because it influences the size.  */
       if (cris_get_opcode (inst) < 4)
-        {
-          size &= ~SIGNED_EXTEND_BIT_MASK;
-        }
+	{
+	  size &= ~SIGNED_EXTEND_BIT_MASK;
+	}
       process_autoincrement (size, inst, inst_env);
     } 
   inst_env->slot_needed = 0;
@@ -3479,24 +3482,24 @@ handle_inc_and_index_mode_for_aritm_op (
 
 static void 
 none_reg_mode_add_sub_cmp_and_or_move_op (unsigned short inst, 
-                                          inst_env_type *inst_env)
+					  inst_env_type *inst_env)
 {
   if (inst_env->prefix_found)
     {
       if (cris_get_mode (inst) == PREFIX_INDEX_MODE)
-        {
-          handle_prefix_index_mode_for_aritm_op (inst, inst_env);
-        }
+	{
+	  handle_prefix_index_mode_for_aritm_op (inst, inst_env);
+	}
       else if (cris_get_mode (inst) == PREFIX_ASSIGN_MODE)
-        {
-          handle_prefix_assign_mode_for_aritm_op (inst, inst_env);
-        }
+	{
+	  handle_prefix_assign_mode_for_aritm_op (inst, inst_env);
+	}
       else
-        {
-          /* The mode is invalid for a prefixed base instruction.  */
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  /* The mode is invalid for a prefixed base instruction.  */
+	  inst_env->invalid = 1;
+	  return;
+	}
     }
   else
     {
@@ -3524,10 +3527,10 @@ quick_mode_add_sub_op (unsigned short in
   if (cris_get_operand2 (inst) == REG_PC)
     {
       if (inst_env->slot_needed)
-        {
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  inst_env->invalid = 1;
+	  return;
+	}
       operand1 = cris_get_quick_value (inst);
       operand2 = inst_env->reg[REG_PC];
 
@@ -3535,7 +3538,7 @@ quick_mode_add_sub_op (unsigned short in
       cris_set_size_to_dword (&inst);
 
       /* Calculate the PC value after the instruction, i.e. where the
-         breakpoint should be.  */
+	 breakpoint should be.  */
       add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand1);
     }
   inst_env->slot_needed = 0;
@@ -3563,25 +3566,25 @@ quick_mode_and_cmp_move_or_op (unsigned
   if (cris_get_operand2 (inst) == REG_PC)
     {
       if (inst_env->slot_needed)
-        {
-          inst_env->invalid = 1;
-          return;
-        }
+	{
+	  inst_env->invalid = 1;
+	  return;
+	}
       /* The instruction has the PC as its target register.  */
       operand1 = cris_get_quick_value (inst);
       operand2 = inst_env->reg[REG_PC];
 
       /* The quick value is signed, so check if we must do a signed extend.  */
       if (operand1 & SIGNED_QUICK_VALUE_MASK)
-        {
-          /* sign extend  */
-          operand1 |= SIGNED_QUICK_VALUE_EXTEND_MASK;
-        }
+	{
+	  /* sign extend  */
+	  operand1 |= SIGNED_QUICK_VALUE_EXTEND_MASK;
+	}
       /* The size should now be dword.  */
       cris_set_size_to_dword (&inst);
 
       /* Calculate the PC value after the instruction, i.e. where the
-         breakpoint should be.  */
+	 breakpoint should be.  */
       add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand1);
     }
   inst_env->slot_needed = 0;
@@ -3761,21 +3764,28 @@ typedef cris_elf_greg_t crisv32_elf_greg
 /* Unpack a cris_elf_gregset_t into GDB's register cache.  */
 
 static void 
-cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp)
+cris_supply_gregset (const struct regset *regset, struct regcache *regcache,
+		     int regnum, const void *gregs, size_t len)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
   int i;
-  cris_elf_greg_t *regp = *gregsetp;
+  const cris_elf_greg_t *regp = static_cast<const cris_elf_greg_t *>(gregs);
+
+  if (len != sizeof (cris_elf_gregset_t)
+      && len != sizeof (crisv32_elf_gregset_t))
+    warning (_("wrong size gregset struct in core file"));
+  gdb_assert (len >= sizeof (crisv32_elf_gregset_t));
 
   /* The kernel dumps all 32 registers as unsigned longs, but supply_register
      knows about the actual size of each register so that's no problem.  */
   for (i = 0; i < NUM_GENREGS + NUM_SPECREGS; i++)
     {
-      regcache->raw_supply (i, (char *)&regp[i]);
+      if (regnum == -1 || regnum == i)
+	regcache->raw_supply (i, (char *)&regp[i]);
     }
 
-  if (tdep->cris_version == 32)
+  if (tdep->cris_version == 32 && (regnum == -1 || regnum == ERP_REGNUM))
     {
       /* Needed to set pseudo-register PC for CRISv32.  */
       /* FIXME: If ERP is in a delay slot at this point then the PC will
@@ -3784,53 +3794,31 @@ cris_supply_gregset (struct regcache *re
 			    (char *)&regp[ERP_REGNUM]);
 
       if (*(char *)&regp[ERP_REGNUM] & 0x1)
-	fprintf_unfiltered (gdb_stderr, "Warning: PC in delay slot\n");
+	gdb_printf (gdb_stderr, "Warning: PC in delay slot\n");
     }
 }
 
-/*  Use a local version of this function to get the correct types for
-    regsets, until multi-arch core support is ready.  */
+static const struct regset cris_regset = {
+  nullptr,
+  cris_supply_gregset,
+  /* We don't need a collect function because we only use this for core files
+     (via iterate_over_regset_sections).  */
+  nullptr,
+  REGSET_VARIABLE_SIZE
+};
 
-static void
-fetch_core_registers (struct regcache *regcache,
-		      char *core_reg_sect, unsigned core_reg_size,
-                      int which, CORE_ADDR reg_addr)
+static void cris_iterate_over_regset_sections (struct gdbarch *gdbarch,
+					       iterate_over_regset_sections_cb *cb,
+					       void *cb_data,
+					       const struct regcache *regcache)
 {
-  cris_elf_gregset_t gregset;
-
-  switch (which)
-    {
-    case 0:
-      if (core_reg_size != sizeof (cris_elf_gregset_t)
-	  && core_reg_size != sizeof (crisv32_elf_gregset_t))
-        {
-          warning (_("wrong size gregset struct in core file"));
-        }
-      else
-        {
-          memcpy (&gregset, core_reg_sect, sizeof (gregset));
-          cris_supply_gregset (regcache, &gregset);
-        }
-
-    default:
-      /* We've covered all the kinds of registers we know about here,
-         so this must be something we wouldn't know what to do with
-         anyway.  Just ignore it.  */
-      break;
-    }
+  cb (".reg", sizeof (crisv32_elf_gregset_t), sizeof (crisv32_elf_gregset_t),
+      &cris_regset, NULL, cb_data);
 }
 
-static struct core_fns cris_elf_core_fns =
-{
-  bfd_target_elf_flavour,               /* core_flavour */
-  default_check_format,                 /* check_format */
-  default_core_sniffer,                 /* core_sniffer */
-  fetch_core_registers,                 /* core_read_registers */
-  NULL                                  /* next */
-};
-
+void _initialize_cris_tdep ();
 void
-_initialize_cris_tdep (void)
+_initialize_cris_tdep ()
 {
   gdbarch_register (bfd_arch_cris, cris_gdbarch_init, cris_dump_tdep);
   
@@ -3867,8 +3855,6 @@ Makes GDB use the NRP register instead o
 			   NULL, /* FIXME: i18n: Usage of Dwarf-2 CFI
 				    for CRIS is %d.  */
 			   &setlist, &showlist);
-
-  deprecated_add_core_fns (&cris_elf_core_fns);
 }
 
 /* Prints out all target specific values.  */
@@ -3876,15 +3862,15 @@ Makes GDB use the NRP register instead o
 static void
 cris_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
   if (tdep != NULL)
     {
-      fprintf_unfiltered (file, "cris_dump_tdep: tdep->cris_version = %i\n",
-                          tdep->cris_version);
-      fprintf_unfiltered (file, "cris_dump_tdep: tdep->cris_mode = %s\n",
-                          tdep->cris_mode);
-      fprintf_unfiltered (file, "cris_dump_tdep: tdep->cris_dwarf2_cfi = %i\n",
-                          tdep->cris_dwarf2_cfi);
+      gdb_printf (file, "cris_dump_tdep: tdep->cris_version = %i\n",
+		  tdep->cris_version);
+      gdb_printf (file, "cris_dump_tdep: tdep->cris_mode = %s\n",
+		  tdep->cris_mode);
+      gdb_printf (file, "cris_dump_tdep: tdep->cris_dwarf2_cfi = %i\n",
+		  tdep->cris_dwarf2_cfi);
     }
 }
 
@@ -3897,10 +3883,8 @@ set_cris_version (const char *ignore_arg
   usr_cmd_cris_version_valid = 1;
   
   /* Update the current architecture, if needed.  */
-  gdbarch_info_init (&info);
   if (!gdbarch_update_p (info))
-    internal_error (__FILE__, __LINE__, 
-		    _("cris_gdbarch_update: failed to update architecture."));
+    internal_error (_("cris_gdbarch_update: failed to update architecture."));
 }
 
 static void
@@ -3910,10 +3894,8 @@ set_cris_mode (const char *ignore_args,
   struct gdbarch_info info;
 
   /* Update the current architecture, if needed.  */
-  gdbarch_info_init (&info);
   if (!gdbarch_update_p (info))
-    internal_error (__FILE__, __LINE__, 
-		    "cris_gdbarch_update: failed to update architecture.");
+    internal_error ("cris_gdbarch_update: failed to update architecture.");
 }
 
 static void
@@ -3923,17 +3905,13 @@ set_cris_dwarf2_cfi (const char *ignore_
   struct gdbarch_info info;
 
   /* Update the current architecture, if needed.  */
-  gdbarch_info_init (&info);
   if (!gdbarch_update_p (info))
-    internal_error (__FILE__, __LINE__, 
-		    _("cris_gdbarch_update: failed to update architecture."));
+    internal_error (_("cris_gdbarch_update: failed to update architecture."));
 }
 
 static struct gdbarch *
 cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
-  struct gdbarch *gdbarch;
-  struct gdbarch_tdep *tdep;
   unsigned int cris_version;
 
   if (usr_cmd_cris_version_valid)
@@ -3959,19 +3937,20 @@ cris_gdbarch_init (struct gdbarch_info i
        arches != NULL;
        arches = gdbarch_list_lookup_by_info (arches->next, &info))
     {
-      if ((gdbarch_tdep (arches->gdbarch)->cris_version 
-	   == usr_cmd_cris_version)
-	  && (gdbarch_tdep (arches->gdbarch)->cris_mode 
-	   == usr_cmd_cris_mode)
-	  && (gdbarch_tdep (arches->gdbarch)->cris_dwarf2_cfi 
-	      == usr_cmd_cris_dwarf2_cfi))
-        return arches->gdbarch;
+      cris_gdbarch_tdep *tdep
+	= gdbarch_tdep<cris_gdbarch_tdep> (arches->gdbarch);
+
+      if (tdep->cris_version == usr_cmd_cris_version
+	  && tdep->cris_mode == usr_cmd_cris_mode
+	  && tdep->cris_dwarf2_cfi == usr_cmd_cris_dwarf2_cfi)
+	return arches->gdbarch;
     }
 
   /* No matching architecture was found.  Create a new one.  */
-  tdep = XCNEW (struct gdbarch_tdep);
   info.byte_order = BFD_ENDIAN_LITTLE;
-  gdbarch = gdbarch_alloc (&info, tdep);
+  gdbarch *gdbarch
+    = gdbarch_alloc (&info, gdbarch_tdep_up (new cris_gdbarch_tdep));
+  cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
 
   tdep->cris_version = usr_cmd_cris_version;
   tdep->cris_mode = usr_cmd_cris_mode;
@@ -4007,7 +3986,7 @@ cris_gdbarch_init (struct gdbarch_info i
     case 10:
     case 11: 
       /* CRIS v10 and v11, a.k.a. ETRAX 100LX.  In addition to ETRAX 100, 
-         P7 (32 bits), and P15 (32 bits) have been implemented.  */
+	 P7 (32 bits), and P15 (32 bits) have been implemented.  */
       set_gdbarch_pc_regnum (gdbarch, 15);
       set_gdbarch_register_type (gdbarch, cris_register_type);
       /* There are 32 registers (some of which may not be implemented).  */
@@ -4058,6 +4037,7 @@ cris_gdbarch_init (struct gdbarch_info i
 
   set_gdbarch_breakpoint_kind_from_pc (gdbarch, cris_breakpoint_kind_from_pc);
   set_gdbarch_sw_breakpoint_from_kind (gdbarch, cris_sw_breakpoint_from_kind);
+  set_gdbarch_iterate_over_regset_sections (gdbarch, cris_iterate_over_regset_sections);
   
   if (tdep->cris_dwarf2_cfi == 1)
     {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cris-tdep.h ./gdb/cris-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/cris-tdep.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/cris-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target dependent code for CRIS, for GDB, the GNU debugger.
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2024 Free Software Foundation, Inc.
 
    Contributed by Axis Communications AB.
    Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg.
@@ -23,12 +23,14 @@
 #ifndef CRIS_TDEP_H
 #define CRIS_TDEP_H
 
+#include "gdbarch.h"
+
 /* CRIS architecture specific information.  */
-struct gdbarch_tdep
+struct cris_gdbarch_tdep : gdbarch_tdep_base
 {
-  unsigned int cris_version;
-  const char *cris_mode;
-  int cris_dwarf2_cfi;
+  unsigned int cris_version = 0;
+  const char *cris_mode = nullptr;
+  int cris_dwarf2_cfi = 0;
 };
 
 #endif /* CRIS_TDEP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/csky-linux-tdep.c ./gdb/csky-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/csky-linux-tdep.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/csky-linux-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux on CSKY.
 
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
    Contributed by C-SKY Microsystems and Mentor Graphics.
 
@@ -36,6 +36,8 @@
 #define SIZEOF_CSKY_GREGSET 34*4
 /* Float regset fesr fsr fr0-fr31 for CK810.  */
 #define SIZEOF_CSKY_FREGSET 34*4
+/* Float regset vr0~vr15 fr15~fr31, reserved for CK810 when kernel 4.x.  */
+#define SIZEOF_CSKY_FREGSET_K4X  400
 
 /* Offset mapping table from core_section to regcache of general
    registers for ck810.  */
@@ -118,16 +120,80 @@ csky_supply_fregset (const struct regset
   int fregset_num = ARRAY_SIZE (csky_fregset_offset);
 
   gdb_assert (len >= SIZEOF_CSKY_FREGSET);
-  for (i = 0; i < fregset_num; i++)
+  if (len == SIZEOF_CSKY_FREGSET)
     {
-      if ((regnum == csky_fregset_offset[i] || regnum == -1)
-	  && csky_fregset_offset[i] != -1)
+      for (i = 0; i < fregset_num; i++)
 	{
-	  int num = csky_fregset_offset[i];
-	  offset += register_size (gdbarch, num);
-	  regcache->raw_supply (csky_fregset_offset[i], fregs + offset);
+	  if ((regnum == csky_fregset_offset[i] || regnum == -1)
+	      && csky_fregset_offset[i] != -1)
+	    {
+	      int num = csky_fregset_offset[i];
+	      offset += register_size (gdbarch, num);
+	      regcache->raw_supply (csky_fregset_offset[i], fregs + offset);
+	    }
 	}
     }
+  else if (len == SIZEOF_CSKY_FREGSET_K4X)
+    {
+      /* When kernel version >= 4.x, .reg2 size will be 400.
+	 Contents is {
+	  unsigned long vr[96];
+	  unsigned long fcr;
+	  unsigned long fesr;
+	  unsigned long fid;
+	  unsigned long reserved;
+	 }
+	 VR[96] means: (vr0~vr15) + (fr16~fr31), each Vector register is
+	 128-bits, each Float register is 64 bits, the total size is
+	 (4*96).
+
+	 In addition, for fr0~fr15, each FRx is the lower 64 bits of the
+	 corresponding VRx. So fr0~fr15 and vr0~vr15 regisetrs use the same
+	 offset.  */
+      int fcr_regno[] = {122, 123, 121}; /* fcr, fesr, fid.  */
+
+      /* Supply vr0~vr15.  */
+      for (i = 0; i < 16; i ++)
+	{
+	  if (*gdbarch_register_name (gdbarch, (CSKY_VR0_REGNUM + i)) != '\0')
+	    {
+	      offset = 16 * i;
+	      regcache->raw_supply (CSKY_VR0_REGNUM + i, fregs + offset);
+	    }
+	}
+      /* Supply fr0~fr15.  */
+      for (i = 0; i < 16; i ++)
+	{
+	  if (*gdbarch_register_name (gdbarch, (CSKY_FR0_REGNUM + i)) != '\0')
+	    {
+	      offset = 16 * i;
+	      regcache->raw_supply (CSKY_FR0_REGNUM + i, fregs + offset);
+	    }
+	}
+      /* Supply fr16~fr31.  */
+      for (i = 0; i < 16; i ++)
+	{
+	  if (*gdbarch_register_name (gdbarch, (CSKY_FR16_REGNUM + i)) != '\0')
+	    {
+	      offset = (16 * 16) + (8 * i);
+	      regcache->raw_supply (CSKY_FR16_REGNUM + i, fregs + offset);
+	    }
+	}
+     /* Supply fcr, fesr, fid.  */
+      for (i = 0; i < 3; i ++)
+	{
+	  if (*gdbarch_register_name (gdbarch, fcr_regno[i]) != '\0')
+	    {
+	      offset = (16 * 16) + (16 * 8) + (4 * i);
+	      regcache->raw_supply (fcr_regno[i], fregs + offset);
+	    }
+	}
+    }
+  else
+    {
+      warning (_("Unknow size %s of section .reg2, can not get value"
+		 " of float registers."), pulongest (len));
+    }
 }
 
 /* Implement the collect_regset hook for FP registers in core files.  */
@@ -144,15 +210,71 @@ csky_collect_fregset (const struct regse
   int offset = 0;
 
   gdb_assert (len >= SIZEOF_CSKY_FREGSET);
-  for (regno = 0; regno < fregset_num; regno++)
+  if (len == SIZEOF_CSKY_FREGSET)
     {
-      if ((regnum == csky_fregset_offset[regno] || regnum == -1)
-	  && csky_fregset_offset[regno] != -1)
+      for (regno = 0; regno < fregset_num; regno++)
 	{
-	  offset += register_size (gdbarch, csky_fregset_offset[regno]);
-	  regcache->raw_collect (regno, fregs + offset);
+	  if ((regnum == csky_fregset_offset[regno] || regnum == -1)
+	       && csky_fregset_offset[regno] != -1)
+	    {
+	      offset += register_size (gdbarch, csky_fregset_offset[regno]);
+	      regcache->raw_collect (regno, fregs + offset);
+	    }
 	}
     }
+  else if (len == SIZEOF_CSKY_FREGSET_K4X)
+    {
+      /* When kernel version >= 4.x, .reg2 size will be 400.
+	 Contents is {
+	   unsigned long vr[96];
+	   unsigned long fcr;
+	   unsigned long fesr;
+	   unsigned long fid;
+	   unsigned long reserved;
+	 }
+	 VR[96] means: (vr0~vr15) + (fr16~fr31), each Vector register is$
+	 128-bits, each Float register is 64 bits, the total size is$
+	 (4*96).$
+
+	 In addition, for fr0~fr15, each FRx is the lower 64 bits of the$
+	 corresponding VRx. So fr0~fr15 and vr0~vr15 regisetrs use the same$
+	 offset.  */
+      int i = 0;
+      int fcr_regno[] = {122, 123, 121}; /* fcr, fesr, fid.  */
+
+      /* Supply vr0~vr15.  */
+      for (i = 0; i < 16; i ++)
+	{
+	  if (*gdbarch_register_name (gdbarch, (CSKY_VR0_REGNUM + i)) != '\0')
+	    {
+	      offset = 16 * i;
+	      regcache ->raw_collect (CSKY_VR0_REGNUM + i, fregs + offset);
+	    }
+	}
+      /* Supply fr16~fr31.  */
+      for (i = 0; i < 16; i ++)
+	{
+	  if (*gdbarch_register_name (gdbarch, (CSKY_FR16_REGNUM + i)) != '\0')
+	    {
+	      offset = (16 * 16) + (8 * i);
+	      regcache ->raw_collect (CSKY_FR16_REGNUM + i, fregs + offset);
+	    }
+	}
+      /* Supply fcr, fesr, fid.  */
+      for (i = 0; i < 3; i ++)
+	{
+	  if (*gdbarch_register_name (gdbarch, fcr_regno[i]) != '\0')
+	    {
+	      offset = (16 * 16) + (16 * 8) + (4 * i);
+	      regcache ->raw_collect (fcr_regno[i], fregs + offset);
+	    }
+	}
+    }
+  else
+    {
+      warning (_("Unknow size %s of section .reg2, will not set value"
+		 " of float registers."), pulongest (len));
+    }
 }
 
 static const struct regset csky_regset_general =
@@ -166,7 +288,10 @@ static const struct regset csky_regset_f
 {
   NULL,
   csky_supply_fregset,
-  csky_collect_fregset
+  csky_collect_fregset,
+  /* Allow .reg2 to have a different size, and the size of .reg2 should
+     always be bigger than SIZEOF_CSKY_FREGSET.  */
+  1
 };
 
 /* Iterate over core file register note sections.  */
@@ -185,7 +310,7 @@ csky_linux_iterate_over_regset_sections
 
 static void
 csky_linux_rt_sigreturn_init (const struct tramp_frame *self,
-			      struct frame_info *this_frame,
+			      frame_info_ptr this_frame,
 			      struct trad_frame_cache *this_cache,
 			      CORE_ADDR func)
 {
@@ -228,18 +353,63 @@ csky_linux_rt_sigreturn_tramp_frame = {
   csky_linux_rt_sigreturn_init
 };
 
+static void
+csky_linux_rt_sigreturn_init_pt_regs (const struct tramp_frame *self,
+				      frame_info_ptr this_frame,
+				      struct trad_frame_cache *this_cache,
+				      CORE_ADDR func)
+{
+  int i;
+  CORE_ADDR sp = get_frame_register_unsigned (this_frame, CSKY_SP_REGNUM);
+
+  CORE_ADDR base = sp + CSKY_SIGINFO_OFFSET + CSKY_SIGINFO_SIZE
+		   + CSKY_UCONTEXT_SIGCONTEXT
+		   + CSKY_SIGCONTEXT_PT_REGS_TLS;
+
+  /* LR */
+  trad_frame_set_reg_addr (this_cache, CSKY_R15_REGNUM, base);
+
+  /* PC */
+  trad_frame_set_reg_addr (this_cache, CSKY_PC_REGNUM, base + 4);
+
+  /* PSR */
+  trad_frame_set_reg_addr (this_cache, CSKY_CR0_REGNUM, base + 8);
+
+  /* SP */
+  trad_frame_set_reg_addr (this_cache, CSKY_SP_REGNUM, base + 12);
+
+  /* Set addrs of R0 ~ R13.  */
+  for (i = 0; i < 14; i++)
+    trad_frame_set_reg_addr (this_cache, i, base + i * 4 + 20);
+
+  trad_frame_set_id (this_cache, frame_id_build (sp, func));
+}
+
+
+static struct tramp_frame
+csky_linux_rt_sigreturn_tramp_frame_kernel_4x = {
+  SIGTRAMP_FRAME,
+  4,
+  {
+    { CSKY_MOVI_R7_139, ULONGEST_MAX },
+    { CSKY_TRAP_0, ULONGEST_MAX },
+    { TRAMP_SENTINEL_INSN }
+  },
+  csky_linux_rt_sigreturn_init_pt_regs
+};
+
 /* Hook function for gdbarch_register_osabi.  */
 
 static void
 csky_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, 0);
 
   /* Shared library handling.  */
   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
   set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
   set_solib_svr4_fetch_link_map_offsets (gdbarch,
-					 svr4_ilp32_fetch_link_map_offsets);
+					 linux_ilp32_fetch_link_map_offsets);
 
   /* Enable TLS support.  */
   set_gdbarch_fetch_tls_load_module_address (gdbarch,
@@ -253,10 +423,13 @@ csky_linux_init_abi (struct gdbarch_info
 
   tramp_frame_prepend_unwinder (gdbarch,
 				&csky_linux_rt_sigreturn_tramp_frame);
+  tramp_frame_prepend_unwinder (gdbarch,
+				&csky_linux_rt_sigreturn_tramp_frame_kernel_4x);
 }
 
+void _initialize_csky_linux_tdep ();
 void
-_initialize_csky_linux_tdep (void)
+_initialize_csky_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_csky, 0, GDB_OSABI_LINUX,
 			  csky_linux_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/csky-tdep.c ./gdb/csky-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/csky-tdep.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/csky-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the CSKY architecture, for GDB.
 
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2024 Free Software Foundation, Inc.
 
    Contributed by C-SKY Microsystems and Mentor Graphics.
 
@@ -49,7 +49,7 @@
 #include "floatformat.h"
 #include "remote.h"
 #include "target-descriptions.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "user-regs.h"
 #include "valprint.h"
 #include "csky-tdep.h"
@@ -59,23 +59,448 @@
 #include <vector>
 
 /* Control debugging information emitted in this file.  */
+
 static bool csky_debug = false;
 
-static struct reggroup *cr_reggroup;
-static struct reggroup *fr_reggroup;
-static struct reggroup *vr_reggroup;
-static struct reggroup *mmu_reggroup;
-static struct reggroup *prof_reggroup;
+static const reggroup *cr_reggroup;
+static const reggroup *fr_reggroup;
+static const reggroup *vr_reggroup;
+static const reggroup *mmu_reggroup;
+static const reggroup *prof_reggroup;
+
+static const char *csky_supported_tdesc_feature_names[] = {
+  (const char *)"org.gnu.csky.abiv2.gpr",
+  (const char *)"org.gnu.csky.abiv2.fpu",
+  (const char *)"org.gnu.csky.abiv2.cr",
+  (const char *)"org.gnu.csky.abiv2.fvcr",
+  (const char *)"org.gnu.csky.abiv2.mmu",
+  (const char *)"org.gnu.csky.abiv2.tee",
+  (const char *)"org.gnu.csky.abiv2.fpu2",
+  (const char *)"org.gnu.csky.abiv2.bank0",
+  (const char *)"org.gnu.csky.abiv2.bank1",
+  (const char *)"org.gnu.csky.abiv2.bank2",
+  (const char *)"org.gnu.csky.abiv2.bank3",
+  (const char *)"org.gnu.csky.abiv2.bank4",
+  (const char *)"org.gnu.csky.abiv2.bank5",
+  (const char *)"org.gnu.csky.abiv2.bank6",
+  (const char *)"org.gnu.csky.abiv2.bank7",
+  (const char *)"org.gnu.csky.abiv2.bank8",
+  (const char *)"org.gnu.csky.abiv2.bank9",
+  (const char *)"org.gnu.csky.abiv2.bank10",
+  (const char *)"org.gnu.csky.abiv2.bank11",
+  (const char *)"org.gnu.csky.abiv2.bank12",
+  (const char *)"org.gnu.csky.abiv2.bank13",
+  (const char *)"org.gnu.csky.abiv2.bank14",
+  (const char *)"org.gnu.csky.abiv2.bank15",
+  (const char *)"org.gnu.csky.abiv2.bank16",
+  (const char *)"org.gnu.csky.abiv2.bank17",
+  (const char *)"org.gnu.csky.abiv2.bank18",
+  (const char *)"org.gnu.csky.abiv2.bank19",
+  (const char *)"org.gnu.csky.abiv2.bank20",
+  (const char *)"org.gnu.csky.abiv2.bank21",
+  (const char *)"org.gnu.csky.abiv2.bank22",
+  (const char *)"org.gnu.csky.abiv2.bank23",
+  (const char *)"org.gnu.csky.abiv2.bank24",
+  (const char *)"org.gnu.csky.abiv2.bank25",
+  (const char *)"org.gnu.csky.abiv2.bank26",
+  (const char *)"org.gnu.csky.abiv2.bank27",
+  (const char *)"org.gnu.csky.abiv2.bank28",
+  (const char *)"org.gnu.csky.abiv2.bank29",
+  (const char *)"org.gnu.csky.abiv2.bank30",
+  (const char *)"org.gnu.csky.abiv2.bank31"
+};
+
+struct csky_supported_tdesc_register
+{
+  char name[16];
+  int num;
+};
+
+static const struct csky_supported_tdesc_register csky_supported_gpr_regs[] = {
+  {"r0", 0},
+  {"r1", 1},
+  {"r2", 2},
+  {"r3", 3},
+  {"r4", 4},
+  {"r5", 5},
+  {"r6", 6},
+  {"r7", 7},
+  {"r8", 8},
+  {"r9", 9},
+  {"r10", 10},
+  {"r11", 11},
+  {"r12", 12},
+  {"r13", 13},
+  {"r14", 14},
+  {"r15", 15},
+  {"r16", 16},
+  {"r17", 17},
+  {"r18", 18},
+  {"r19", 19},
+  {"r20", 20},
+  {"r21", 21},
+  {"r22", 22},
+  {"r23", 23},
+  {"r24", 24},
+  {"r25", 25},
+  {"r26", 26},
+  {"r27", 27},
+  {"r28", 28},
+  {"r28", 28},
+  {"r29", 29},
+  {"r30", 30},
+  {"r31", 31},
+  {"hi", CSKY_HI_REGNUM},
+  {"lo", CSKY_LO_REGNUM},
+  {"pc", CSKY_PC_REGNUM}
+};
+
+static const struct csky_supported_tdesc_register csky_supported_fpu_regs[] = {
+  /* fr0~fr15.  */
+  {"fr0",  CSKY_FR0_REGNUM + 0},
+  {"fr1",  CSKY_FR0_REGNUM + 1},
+  {"fr2",  CSKY_FR0_REGNUM + 2},
+  {"fr3",  CSKY_FR0_REGNUM + 3},
+  {"fr4",  CSKY_FR0_REGNUM + 4},
+  {"fr5",  CSKY_FR0_REGNUM + 5},
+  {"fr6",  CSKY_FR0_REGNUM + 6},
+  {"fr7",  CSKY_FR0_REGNUM + 7},
+  {"fr8",  CSKY_FR0_REGNUM + 8},
+  {"fr9",  CSKY_FR0_REGNUM + 9},
+  {"fr10", CSKY_FR0_REGNUM + 10},
+  {"fr11", CSKY_FR0_REGNUM + 11},
+  {"fr12", CSKY_FR0_REGNUM + 12},
+  {"fr13", CSKY_FR0_REGNUM + 13},
+  {"fr14", CSKY_FR0_REGNUM + 14},
+  {"fr15", CSKY_FR0_REGNUM + 15},
+  /* fr16~fr31.  */
+  {"fr16", CSKY_FR16_REGNUM + 0},
+  {"fr17", CSKY_FR16_REGNUM + 1},
+  {"fr18", CSKY_FR16_REGNUM + 2},
+  {"fr19", CSKY_FR16_REGNUM + 3},
+  {"fr20", CSKY_FR16_REGNUM + 4},
+  {"fr21", CSKY_FR16_REGNUM + 5},
+  {"fr22", CSKY_FR16_REGNUM + 6},
+  {"fr23", CSKY_FR16_REGNUM + 7},
+  {"fr24", CSKY_FR16_REGNUM + 8},
+  {"fr25", CSKY_FR16_REGNUM + 9},
+  {"fr26", CSKY_FR16_REGNUM + 10},
+  {"fr27", CSKY_FR16_REGNUM + 11},
+  {"fr28", CSKY_FR16_REGNUM + 12},
+  {"fr29", CSKY_FR16_REGNUM + 13},
+  {"fr30", CSKY_FR16_REGNUM + 14},
+  {"fr31", CSKY_FR16_REGNUM + 15},
+  /* vr0~vr15.  */
+  {"vr0",  CSKY_VR0_REGNUM + 0},
+  {"vr1",  CSKY_VR0_REGNUM + 1},
+  {"vr2",  CSKY_VR0_REGNUM + 2},
+  {"vr3",  CSKY_VR0_REGNUM + 3},
+  {"vr4",  CSKY_VR0_REGNUM + 4},
+  {"vr5",  CSKY_VR0_REGNUM + 5},
+  {"vr6",  CSKY_VR0_REGNUM + 6},
+  {"vr7",  CSKY_VR0_REGNUM + 7},
+  {"vr8",  CSKY_VR0_REGNUM + 8},
+  {"vr9",  CSKY_VR0_REGNUM + 9},
+  {"vr10", CSKY_VR0_REGNUM + 10},
+  {"vr11", CSKY_VR0_REGNUM + 11},
+  {"vr12", CSKY_VR0_REGNUM + 12},
+  {"vr13", CSKY_VR0_REGNUM + 13},
+  {"vr14", CSKY_VR0_REGNUM + 14},
+  {"vr15", CSKY_VR0_REGNUM + 15},
+  /* fpu control registers.  */
+  {"fcr",  CSKY_FCR_REGNUM + 0},
+  {"fid",  CSKY_FCR_REGNUM + 1},
+  {"fesr", CSKY_FCR_REGNUM + 2},
+};
+
+static const struct csky_supported_tdesc_register csky_supported_ar_regs[] = {
+  {"ar0",  CSKY_AR0_REGNUM + 0},
+  {"ar1",  CSKY_AR0_REGNUM + 1},
+  {"ar2",  CSKY_AR0_REGNUM + 2},
+  {"ar3",  CSKY_AR0_REGNUM + 3},
+  {"ar4",  CSKY_AR0_REGNUM + 4},
+  {"ar5",  CSKY_AR0_REGNUM + 5},
+  {"ar6",  CSKY_AR0_REGNUM + 6},
+  {"ar7",  CSKY_AR0_REGNUM + 7},
+  {"ar8",  CSKY_AR0_REGNUM + 8},
+  {"ar9",  CSKY_AR0_REGNUM + 9},
+  {"ar10", CSKY_AR0_REGNUM + 10},
+  {"ar11", CSKY_AR0_REGNUM + 11},
+  {"ar12", CSKY_AR0_REGNUM + 12},
+  {"ar13", CSKY_AR0_REGNUM + 13},
+  {"ar14", CSKY_AR0_REGNUM + 14},
+  {"ar15", CSKY_AR0_REGNUM + 15},
+};
+
+static const struct csky_supported_tdesc_register csky_supported_bank0_regs[] = {
+  {"cr0",  CSKY_CR0_REGNUM + 0},
+  {"cr1",  CSKY_CR0_REGNUM + 1},
+  {"cr2",  CSKY_CR0_REGNUM + 2},
+  {"cr3",  CSKY_CR0_REGNUM + 3},
+  {"cr4",  CSKY_CR0_REGNUM + 4},
+  {"cr5",  CSKY_CR0_REGNUM + 5},
+  {"cr6",  CSKY_CR0_REGNUM + 6},
+  {"cr7",  CSKY_CR0_REGNUM + 7},
+  {"cr8",  CSKY_CR0_REGNUM + 8},
+  {"cr9",  CSKY_CR0_REGNUM + 9},
+  {"cr10", CSKY_CR0_REGNUM + 10},
+  {"cr11", CSKY_CR0_REGNUM + 11},
+  {"cr12", CSKY_CR0_REGNUM + 12},
+  {"cr13", CSKY_CR0_REGNUM + 13},
+  {"cr14", CSKY_CR0_REGNUM + 14},
+  {"cr15", CSKY_CR0_REGNUM + 15},
+  {"cr16", CSKY_CR0_REGNUM + 16},
+  {"cr17", CSKY_CR0_REGNUM + 17},
+  {"cr18", CSKY_CR0_REGNUM + 18},
+  {"cr19", CSKY_CR0_REGNUM + 19},
+  {"cr20", CSKY_CR0_REGNUM + 20},
+  {"cr21", CSKY_CR0_REGNUM + 21},
+  {"cr22", CSKY_CR0_REGNUM + 22},
+  {"cr23", CSKY_CR0_REGNUM + 23},
+  {"cr24", CSKY_CR0_REGNUM + 24},
+  {"cr25", CSKY_CR0_REGNUM + 25},
+  {"cr26", CSKY_CR0_REGNUM + 26},
+  {"cr27", CSKY_CR0_REGNUM + 27},
+  {"cr28", CSKY_CR0_REGNUM + 28},
+  {"cr29", CSKY_CR0_REGNUM + 29},
+  {"cr30", CSKY_CR0_REGNUM + 30},
+  {"cr31", CSKY_CR0_REGNUM + 31}
+};
+
+static const struct csky_supported_tdesc_register csky_supported_mmu_regs[] = {
+  {"mcr0",  128},
+  {"mcr2",  129},
+  {"mcr3",  130},
+  {"mcr4",  131},
+  {"mcr6",  132},
+  {"mcr8",  133},
+  {"mcr29", 134},
+  {"mcr30", 135},
+  {"mcr31", 136}
+};
+
+static const struct csky_supported_tdesc_register csky_supported_bank15_regs[] = {
+  {"cp15cp1",   253},
+  {"cp15cp5",   254},
+  {"cp15cp7",   255},
+  {"cp15cp9",   256},
+  {"cp15cp10",  257},
+  {"cp15cp11",  258},
+  {"cp15cp12",  259},
+  {"cp15cp13",  260},
+  {"cp15cp14",  261},
+  {"cp15cp15",  262},
+  {"cp15cp16",  263},
+  {"cp15cp17",  264},
+  {"cp15cp18",  265},
+  {"cp15cp19",  266},
+  {"cp15cp20",  267},
+  {"cp15cp21",  268},
+  {"cp15cp22",  269},
+  {"cp15cp23",  270},
+  {"cp15cp24",  271},
+  {"cp15cp25",  272},
+  {"cp15cp26",  273},
+  {"cp15cp27",  274},
+  {"cp15cp28",  275},
+};
+
+static const struct csky_supported_tdesc_register csky_supported_alias_regs[] = {
+  /* Alias register names for Bank0.  */
+  {"psr",   CSKY_CR0_REGNUM + 0},
+  {"vbr",   CSKY_CR0_REGNUM + 1},
+  {"epsr",  CSKY_CR0_REGNUM + 2},
+  {"fpsr",  CSKY_CR0_REGNUM + 3},
+  {"epc",   CSKY_CR0_REGNUM + 4},
+  {"fpc",   CSKY_CR0_REGNUM + 5},
+  {"ss0",   CSKY_CR0_REGNUM + 6},
+  {"ss1",   CSKY_CR0_REGNUM + 7},
+  {"ss2",   CSKY_CR0_REGNUM + 8},
+  {"ss3",   CSKY_CR0_REGNUM + 9},
+  {"ss4",   CSKY_CR0_REGNUM + 10},
+  {"gcr",   CSKY_CR0_REGNUM + 11},
+  {"gsr",   CSKY_CR0_REGNUM + 12},
+  {"cpuid", CSKY_CR0_REGNUM + 13},
+  {"ccr",   CSKY_CR0_REGNUM + 18},
+  {"capr",  CSKY_CR0_REGNUM + 19},
+  {"pacr",  CSKY_CR0_REGNUM + 20},
+  {"prsr",  CSKY_CR0_REGNUM + 21},
+  {"chr",   CSKY_CR0_REGNUM + 31},
+  /* Alias register names for MMU.  */
+  {"mir",   128},
+  {"mel0",  129},
+  {"mel1",  130},
+  {"meh",   131},
+  {"mpr",   132},
+  {"mcir",  133},
+  {"mpgd",  134},
+  {"msa0",  135},
+  {"msa1",  136},
+  /* Alias register names for Bank1.  */
+  {"ebr",     190},
+  {"errlc",   195},
+  {"erraddr", 196},
+  {"errsts",  197},
+  {"errinj",  198},
+  {"usp",     203},
+  {"int_sp",  204},
+  {"itcmcr",  211},
+  {"dtcmcr",  212},
+  {"cindex",  215},
+  {"cdata0",  216},
+  {"cdata1",  217},
+  {"cdata2",  218},
+  {"cins",    220},
+  /* Alias register names for Bank3.  */
+  {"sepsr",   221},
+  {"t_wssr",  221},
+  {"sevbr",   222},
+  {"t_wrcr",  222},
+  {"seepsr",  223},
+  {"seepc",   225},
+  {"nsssp",   227},
+  {"t_usp",   228},
+  {"dcr",     229},
+  {"t_pcr",   230},
+};
+
+/* Functions declaration.  */
+
+static const char *
+csky_pseudo_register_name (struct gdbarch *gdbarch, int regno);
+
+/* Get csky supported registers's count for tdesc xml.  */
+
+static int
+csky_get_supported_tdesc_registers_count()
+{
+  int count = 0;
+  count += ARRAY_SIZE (csky_supported_gpr_regs);
+  count += ARRAY_SIZE (csky_supported_fpu_regs);
+  count += ARRAY_SIZE (csky_supported_ar_regs);
+  count += ARRAY_SIZE (csky_supported_bank0_regs);
+  count += ARRAY_SIZE (csky_supported_mmu_regs);
+  count += ARRAY_SIZE (csky_supported_bank15_regs);
+  count += ARRAY_SIZE (csky_supported_alias_regs);
+  /* Bank1~Bank14, Bank16~Bank31. */
+  count += 32 * (14 + 16);
+  return count;
+}
+
+/* Return a supported register according to index.  */
+
+static const struct csky_supported_tdesc_register *
+csky_get_supported_register_by_index (int index)
+{
+  static struct csky_supported_tdesc_register tdesc_reg;
+  int count = 0;
+  int multi, remain;
+  int count_gpr = ARRAY_SIZE (csky_supported_gpr_regs);
+  int count_fpu = ARRAY_SIZE (csky_supported_fpu_regs);
+  int count_ar = ARRAY_SIZE (csky_supported_ar_regs);
+  int count_bank0 = ARRAY_SIZE (csky_supported_bank0_regs);
+  int count_mmu = ARRAY_SIZE (csky_supported_mmu_regs);
+  int count_bank15 = ARRAY_SIZE (csky_supported_bank15_regs);
+  int count_alias = ARRAY_SIZE (csky_supported_alias_regs);
+
+  count = count_gpr;
+  if (index < count)
+    return &csky_supported_gpr_regs[index];
+  if (index < (count + count_fpu))
+    return &csky_supported_fpu_regs[index - count];
+  count += count_fpu;
+  if (index < (count + count_ar))
+    return &csky_supported_ar_regs[index - count];
+  count += count_ar;
+  if (index < (count + count_bank0))
+    return &csky_supported_bank0_regs[index - count];
+  count += count_bank0;
+  if (index < (count + count_mmu))
+    return &csky_supported_mmu_regs[index - count];
+  count += count_mmu;
+  if (index < (count + count_bank15))
+    return &csky_supported_bank15_regs[index - count];
+  count += count_bank15;
+  if (index < (count + count_alias))
+    return &csky_supported_alias_regs[index - count];
+  count += count_alias;
+  index -= count;
+  multi = index / 32;
+  remain = index % 32;
+  switch (multi)
+    {
+      case 0: /* Bank1.  */
+	{
+	  sprintf (tdesc_reg.name, "cp1cr%d", remain);
+	  tdesc_reg.num = 189 + remain;
+	}
+	break;
+      case 1: /* Bank2.  */
+	{
+	  sprintf (tdesc_reg.name, "cp2cr%d", remain);
+	  tdesc_reg.num = 276 + remain;
+	}
+	break;
+      case 2: /* Bank3.  */
+	{
+	  sprintf (tdesc_reg.name, "cp3cr%d", remain);
+	  tdesc_reg.num = 221 + remain;
+	}
+	break;
+      case 3:  /* Bank4.  */
+      case 4:  /* Bank5.  */
+      case 5:  /* Bank6.  */
+      case 6:  /* Bank7.  */
+      case 7:  /* Bank8.  */
+      case 8:  /* Bank9.  */
+      case 9:  /* Bank10.  */
+      case 10: /* Bank11.  */
+      case 11: /* Bank12.  */
+      case 12: /* Bank13.  */
+      case 13: /* Bank14.  */
+	{
+	  /* Regitsers in Bank4~14 have continuous regno with start 308.  */
+	  sprintf (tdesc_reg.name, "cp%dcr%d", (multi + 1), remain);
+	  tdesc_reg.num = 308 + ((multi - 3) * 32) + remain;
+	}
+	break;
+      case 14: /* Bank16.  */
+      case 15: /* Bank17.  */
+      case 16: /* Bank18.  */
+      case 17: /* Bank19.  */
+      case 18: /* Bank20.  */
+      case 19: /* Bank21.  */
+      case 20: /* Bank22.  */
+      case 21: /* Bank23.  */
+      case 22: /* Bank24.  */
+      case 23: /* Bank25.  */
+      case 24: /* Bank26.  */
+      case 25: /* Bank27.  */
+      case 26: /* Bank28.  */
+      case 27: /* Bank29.  */
+      case 28: /* Bank30.  */
+      case 29: /* Bank31.  */
+	{
+	  /* Regitsers in Bank16~31 have continuous regno with start 660.  */
+	  sprintf (tdesc_reg.name, "cp%dcr%d", (multi + 2), remain);
+	  tdesc_reg.num = 660 + ((multi - 14) * 32) + remain;
+	}
+	break;
+      default:
+	return NULL;
+    }
+  return &tdesc_reg;
+}
 
 /* Convenience function to print debug messages in prologue analysis.  */
 
 static void
 print_savedreg_msg (int regno, int offsets[], bool print_continuing)
 {
-  fprintf_unfiltered (gdb_stdlog, "csky: r%d saved at offset 0x%x\n",
-		      regno, offsets[regno]);
+  gdb_printf (gdb_stdlog, "csky: r%d saved at offset 0x%x\n",
+	      regno, offsets[regno]);
   if (print_continuing)
-    fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+    gdb_printf (gdb_stdlog, "csky: continuing\n");
 }
 
 /*  Check whether the instruction at ADDR is 16-bit or not.  */
@@ -162,7 +587,7 @@ csky_write_pc (regcache *regcache, CORE_
 
 /* C-Sky ABI register names.  */
 
-static const char *csky_register_names[] =
+static const char * const csky_register_names[] =
 {
   /* General registers 0 - 31.  */
   "r0",  "r1",  "r2",  "r3",  "r4",  "r5",  "r6",  "r7",
@@ -235,15 +660,12 @@ static const char *csky_register_names[]
 static const char *
 csky_register_name (struct gdbarch *gdbarch, int reg_nr)
 {
+  if (reg_nr >= gdbarch_num_regs (gdbarch))
+    return csky_pseudo_register_name (gdbarch, reg_nr);
+
   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
     return tdesc_register_name (gdbarch, reg_nr);
 
-  if (reg_nr < 0)
-    return NULL;
-
-  if (reg_nr >= gdbarch_num_regs (gdbarch))
-    return NULL;
-
   return csky_register_names[reg_nr];
 }
 
@@ -266,8 +688,8 @@ csky_vector_type (struct gdbarch *gdbarc
   append_composite_type_field (t, "u8",
 			       init_vector_type (bt->builtin_int8, 16));
 
-  TYPE_VECTOR (t) = 1;
-  TYPE_NAME (t) = "builtin_type_vec128i";
+  t->set_is_vector (true);
+  t->set_name ("builtin_type_vec128i");
 
   return t;
 }
@@ -278,6 +700,32 @@ csky_vector_type (struct gdbarch *gdbarc
 static struct type *
 csky_register_type (struct gdbarch *gdbarch, int reg_nr)
 {
+  int num_regs = gdbarch_num_regs (gdbarch);
+  csky_gdbarch_tdep *tdep
+    = gdbarch_tdep<csky_gdbarch_tdep> (gdbarch);
+
+  if (tdep->fv_pseudo_registers_count)
+    {
+      if ((reg_nr >= num_regs)
+	  && (reg_nr < (num_regs + tdep->fv_pseudo_registers_count)))
+	return builtin_type (gdbarch)->builtin_int32;
+    }
+
+  /* Vector register has 128 bits, and only in ck810. Just return
+     csky_vector_type(), not check tdesc_has_registers(), is in case
+     of some GDB stub does not describe type for Vector registers
+     in the target-description-xml.  */
+  if ((reg_nr >= CSKY_VR0_REGNUM) && (reg_nr <= CSKY_VR0_REGNUM + 15))
+    return csky_vector_type (gdbarch);
+
+  /* If type has been described in tdesc-xml, use it.  */
+  if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
+    {
+      struct type *tdesc_t = tdesc_register_type (gdbarch, reg_nr);
+      if (tdesc_t)
+	return tdesc_t;
+    }
+
   /* PC, EPC, FPC is a text pointer.  */
   if ((reg_nr == CSKY_PC_REGNUM)  || (reg_nr == CSKY_EPC_REGNUM)
       || (reg_nr == CSKY_FPC_REGNUM))
@@ -289,12 +737,11 @@ csky_register_type (struct gdbarch *gdba
 
   /* Float register has 64 bits, and only in ck810.  */
   if ((reg_nr >=CSKY_FR0_REGNUM) && (reg_nr <= CSKY_FR0_REGNUM + 15))
-      return arch_float_type (gdbarch, 64, "builtin_type_csky_ext",
+    {
+      type_allocator alloc (gdbarch);
+      return init_float_type (alloc, 64, "builtin_type_csky_ext",
 			      floatformats_ieee_double);
-
-  /* Vector register has 128 bits, and only in ck810.  */
-  if ((reg_nr >= CSKY_VR0_REGNUM) && (reg_nr <= CSKY_VR0_REGNUM + 15))
-    return csky_vector_type (gdbarch);
+    }
 
   /* Profiling general register has 48 bits, we use 64bit.  */
   if ((reg_nr >= CSKY_PROFGR_REGNUM) && (reg_nr <= CSKY_PROFGR_REGNUM + 44))
@@ -310,9 +757,9 @@ csky_register_type (struct gdbarch *gdba
 /* Data structure to marshall items in a dummy stack frame when
    calling a function in the inferior.  */
 
-struct stack_item
+struct csky_stack_item
 {
-  stack_item (int len_, const gdb_byte *data_)
+  csky_stack_item (int len_, const gdb_byte *data_)
   : len (len_), data (data_)
   {}
 
@@ -332,9 +779,8 @@ csky_push_dummy_call (struct gdbarch *gd
   int argnum;
   int argreg = CSKY_ABI_A0_REGNUM;
   int last_arg_regnum = CSKY_ABI_LAST_ARG_REGNUM;
-  int need_dummy_stack = 0;
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  std::vector<stack_item> stack_items;
+  std::vector<csky_stack_item> stack_items;
 
   /* Set the return address.  For CSKY, the return breakpoint is
      always at BP_ADDR.  */
@@ -346,10 +792,10 @@ csky_push_dummy_call (struct gdbarch *gd
     {
       if (csky_debug)
 	{
-	  fprintf_unfiltered (gdb_stdlog,
-			      "csky: struct return in %s = %s\n",
-			      gdbarch_register_name (gdbarch, argreg),
-			      paddress (gdbarch, struct_addr));
+	  gdb_printf (gdb_stdlog,
+		      "csky: struct return in %s = %s\n",
+		      gdbarch_register_name (gdbarch, argreg),
+		      paddress (gdbarch, struct_addr));
 	}
       regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
       argreg++;
@@ -363,9 +809,9 @@ csky_push_dummy_call (struct gdbarch *gd
       struct type *arg_type;
       const gdb_byte *val;
 
-      arg_type = check_typedef (value_type (args[argnum]));
-      len = TYPE_LENGTH (arg_type);
-      val = value_contents (args[argnum]);
+      arg_type = check_typedef (args[argnum]->type ());
+      len = arg_type->length ();
+      val = args[argnum]->contents ().data ();
 
       /* Copy the argument to argument registers or the dummy stack.
 	 Large arguments are split between registers and stack.
@@ -402,7 +848,6 @@ csky_push_dummy_call (struct gdbarch *gd
 		{
 		  /* The argument should be pushed onto the dummy stack.  */
 		  stack_items.emplace_back (4, val);
-		  need_dummy_stack += 4;
 		}
 	      len -= partial_len;
 	      val += partial_len;
@@ -411,7 +856,7 @@ csky_push_dummy_call (struct gdbarch *gd
     }
 
   /* Transfer the dummy stack frame to the target.  */
-  std::vector<stack_item>::reverse_iterator iter;
+  std::vector<csky_stack_item>::reverse_iterator iter;
   for (iter = stack_items.rbegin (); iter != stack_items.rend (); ++iter)
     {
       sp -= iter->len;
@@ -432,7 +877,7 @@ csky_return_value (struct gdbarch *gdbar
 {
   CORE_ADDR regval;
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  int len = TYPE_LENGTH (valtype);
+  int len = valtype->length ();
   unsigned int ret_regnum = CSKY_RET_REGNUM;
 
   /* Csky abi specifies that return values larger than 8 bytes
@@ -502,7 +947,7 @@ struct csky_unwind_cache
   int framereg;
 
   /* Saved register offsets.  */
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
 /* Do prologue analysis, returning the PC of the first instruction
@@ -513,7 +958,7 @@ csky_analyze_prologue (struct gdbarch *g
 		       CORE_ADDR start_pc,
 		       CORE_ADDR limit_pc,
 		       CORE_ADDR end_pc,
-		       struct frame_info *this_frame,
+		       frame_info_ptr this_frame,
 		       struct csky_unwind_cache *this_cache,
 		       lr_type_t lr_type)
 {
@@ -538,10 +983,10 @@ csky_analyze_prologue (struct gdbarch *g
      saved (and where).  */
   if (csky_debug)
     {
-      fprintf_unfiltered (gdb_stdlog,
-			  "csky: Scanning prologue: start_pc = 0x%x,"
-			  "limit_pc = 0x%x\n", (unsigned int) start_pc,
-			  (unsigned int) limit_pc);
+      gdb_printf (gdb_stdlog,
+		  "csky: Scanning prologue: start_pc = 0x%x,"
+		  "limit_pc = 0x%x\n", (unsigned int) start_pc,
+		  (unsigned int) limit_pc);
     }
 
   /* Default to 16 bit instruction.  */
@@ -562,9 +1007,9 @@ csky_analyze_prologue (struct gdbarch *g
 	      int offset = CSKY_32_SUBI_IMM (insn);
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: got subi sp,%d; continuing\n",
-				      offset);
+		  gdb_printf (gdb_stdlog,
+			      "csky: got subi sp,%d; continuing\n",
+			      offset);
 		}
 	      stacksize += offset;
 	      continue;
@@ -588,10 +1033,10 @@ csky_analyze_prologue (struct gdbarch *g
 	      reg_count = CSKY_32_STM_SIZE (insn);
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: got stm r%d-r%d,(sp)\n",
-				      start_register,
-				      start_register + reg_count);
+		  gdb_printf (gdb_stdlog,
+			      "csky: got stm r%d-r%d,(sp)\n",
+			      start_register,
+			      start_register + reg_count);
 		}
 
 	      for (rn = start_register, offset = 0;
@@ -601,15 +1046,15 @@ csky_analyze_prologue (struct gdbarch *g
 		  register_offsets[rn] = stacksize - offset;
 		  if (csky_debug)
 		    {
-		      fprintf_unfiltered (gdb_stdlog,
-					  "csky: r%d saved at 0x%x"
-					  " (offset %d)\n",
-					  rn, register_offsets[rn],
-					  offset);
+		      gdb_printf (gdb_stdlog,
+				  "csky: r%d saved at 0x%x"
+				  " (offset %d)\n",
+				  rn, register_offsets[rn],
+				  offset);
 		    }
 		}
 	      if (csky_debug)
-		fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+		gdb_printf (gdb_stdlog, "csky: continuing\n");
 	      continue;
 	    }
 	  /* stw ry,(sp,disp).  */
@@ -805,36 +1250,33 @@ csky_analyze_prologue (struct gdbarch *g
 	  else if (CSKY_32_IS_PUSH (insn))
 	    {
 	      /* Push for 32_bit.  */
-	      int offset = 0;
 	      if (CSKY_32_IS_PUSH_R29 (insn))
 		{
 		  stacksize += 4;
 		  register_offsets[29] = stacksize;
 		  if (csky_debug)
 		    print_savedreg_msg (29, register_offsets, false);
-		  offset += 4;
 		}
 	      if (CSKY_32_PUSH_LIST2 (insn))
 		{
 		  int num = CSKY_32_PUSH_LIST2 (insn);
 		  int tmp = 0;
 		  stacksize += num * 4;
-		  offset += num * 4;
 		  if (csky_debug)
 		    {
-		      fprintf_unfiltered (gdb_stdlog,
-					  "csky: push regs_array: r16-r%d\n",
-					  16 + num - 1);
+		      gdb_printf (gdb_stdlog,
+				  "csky: push regs_array: r16-r%d\n",
+				  16 + num - 1);
 		    }
 		  for (rn = 16; rn <= 16 + num - 1; rn++)
 		    {
 		       register_offsets[rn] = stacksize - tmp;
 		       if (csky_debug)
 			 {
-			   fprintf_unfiltered (gdb_stdlog,
-					       "csky: r%d saved at 0x%x"
-					       " (offset %d)\n", rn,
-					       register_offsets[rn], tmp);
+			   gdb_printf (gdb_stdlog,
+				       "csky: r%d saved at 0x%x"
+				       " (offset %d)\n", rn,
+				       register_offsets[rn], tmp);
 			 }
 		       tmp += 4;
 		    }
@@ -845,29 +1287,27 @@ csky_analyze_prologue (struct gdbarch *g
 		  register_offsets[15] = stacksize;
 		  if (csky_debug)
 		    print_savedreg_msg (15, register_offsets, false);
-		  offset += 4;
 		}
 	      if (CSKY_32_PUSH_LIST1 (insn))
 		{
 		  int num = CSKY_32_PUSH_LIST1 (insn);
 		  int tmp = 0;
 		  stacksize += num * 4;
-		  offset += num * 4;
 		  if (csky_debug)
 		    {
-		      fprintf_unfiltered (gdb_stdlog,
-					  "csky: push regs_array: r4-r%d\n",
-					  4 + num - 1);
+		      gdb_printf (gdb_stdlog,
+				  "csky: push regs_array: r4-r%d\n",
+				  4 + num - 1);
 		    }
 		  for (rn = 4; rn <= 4 + num - 1; rn++)
 		    {
 		       register_offsets[rn] = stacksize - tmp;
 		       if (csky_debug)
 			 {
-			   fprintf_unfiltered (gdb_stdlog,
-					       "csky: r%d saved at 0x%x"
-					       " (offset %d)\n", rn,
-					       register_offsets[rn], tmp);
+			   gdb_printf (gdb_stdlog,
+				       "csky: r%d saved at 0x%x"
+				       " (offset %d)\n", rn,
+				       register_offsets[rn], tmp);
 			 }
 			tmp += 4;
 		    }
@@ -875,7 +1315,7 @@ csky_analyze_prologue (struct gdbarch *g
 
 	      framesize = stacksize;
 	      if (csky_debug)
-		fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+		gdb_printf (gdb_stdlog, "csky: continuing\n");
 	      continue;
 	    }
 	  else if (CSKY_32_IS_LRW4 (insn) || CSKY_32_IS_MOVI4 (insn)
@@ -887,8 +1327,8 @@ csky_analyze_prologue (struct gdbarch *g
 
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: looking at large frame\n");
+		  gdb_printf (gdb_stdlog,
+			      "csky: looking at large frame\n");
 		}
 	      if (CSKY_32_IS_LRW4 (insn))
 		{
@@ -910,12 +1350,12 @@ csky_analyze_prologue (struct gdbarch *g
 
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: base stacksize=0x%x\n", adjust);
+		  gdb_printf (gdb_stdlog,
+			      "csky: base stacksize=0x%x\n", adjust);
 
 		  /* May have zero or more insns which modify r4.  */
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: looking for r4 adjusters...\n");
+		  gdb_printf (gdb_stdlog,
+			      "csky: looking for r4 adjusters...\n");
 		}
 
 	      offset = 4;
@@ -928,8 +1368,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust += imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: addi r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: addi r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_SUBI4 (insn2))
@@ -938,8 +1378,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust -= imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: subi r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: subi r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_NOR4 (insn2))
@@ -947,8 +1387,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust = ~adjust;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: nor r4,r4,r4\n");
+			  gdb_printf (gdb_stdlog,
+				      "csky: nor r4,r4,r4\n");
 			}
 		    }
 		  else if (CSKY_32_IS_ROTLI4 (insn2))
@@ -959,8 +1399,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust |= temp;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: rotli r4,r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: rotli r4,r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_LISI4 (insn2))
@@ -969,8 +1409,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust <<= imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: lsli r4,r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: lsli r4,r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_BSETI4 (insn2))
@@ -979,8 +1419,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust |= (1 << imm);
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: bseti r4,r4 %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: bseti r4,r4 %d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_BCLRI4 (insn2))
@@ -989,8 +1429,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust &= ~(1 << imm);
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: bclri r4,r4 %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: bclri r4,r4 %d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_IXH4 (insn2))
@@ -998,8 +1438,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust *= 3;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: ixh r4,r4,r4\n");
+			  gdb_printf (gdb_stdlog,
+				      "csky: ixh r4,r4,r4\n");
 			}
 		    }
 		  else if (CSKY_32_IS_IXW4 (insn2))
@@ -1007,8 +1447,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust *= 5;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: ixw r4,r4,r4\n");
+			  gdb_printf (gdb_stdlog,
+				      "csky: ixw r4,r4,r4\n");
 			}
 		    }
 		  else if (CSKY_16_IS_ADDI4 (insn2))
@@ -1017,8 +1457,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust += imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: addi r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: addi r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_16_IS_SUBI4 (insn2))
@@ -1027,8 +1467,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust -= imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: subi r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: subi r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_16_IS_NOR4 (insn2))
@@ -1036,8 +1476,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust = ~adjust;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: nor r4,r4\n");
+			  gdb_printf (gdb_stdlog,
+				      "csky: nor r4,r4\n");
 			}
 		    }
 		  else if (CSKY_16_IS_BSETI4 (insn2))
@@ -1046,8 +1486,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust |= (1 << imm);
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: bseti r4, %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: bseti r4, %d\n", imm);
 			}
 		    }
 		  else if (CSKY_16_IS_BCLRI4 (insn2))
@@ -1056,8 +1496,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust &= ~(1 << imm);
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: bclri r4, %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: bclri r4, %d\n", imm);
 			}
 		    }
 		  else if (CSKY_16_IS_LSLI4 (insn2))
@@ -1066,8 +1506,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust <<= imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: lsli r4,r4, %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: lsli r4,r4, %d\n", imm);
 			}
 		    }
 
@@ -1077,8 +1517,8 @@ csky_analyze_prologue (struct gdbarch *g
 
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog, "csky: done looking for"
-				      " r4 adjusters\n");
+		  gdb_printf (gdb_stdlog, "csky: done looking for"
+			      " r4 adjusters\n");
 		}
 
 	      /* If the next insn adjusts the stack pointer, we keep
@@ -1090,14 +1530,14 @@ csky_analyze_prologue (struct gdbarch *g
 		  stacksize += adjust;
 		  if (csky_debug)
 		    {
-		      fprintf_unfiltered (gdb_stdlog,
-					  "csky: found stack adjustment of"
-					  " 0x%x bytes.\n", adjust);
-		      fprintf_unfiltered (gdb_stdlog,
-					  "csky: skipping to new address %s\n",
-					  core_addr_to_string_nz (addr));
-		      fprintf_unfiltered (gdb_stdlog,
-					  "csky: continuing\n");
+		      gdb_printf (gdb_stdlog,
+				  "csky: found stack adjustment of"
+				  " 0x%x bytes.\n", adjust);
+		      gdb_printf (gdb_stdlog,
+				  "csky: skipping to new address %s\n",
+				  core_addr_to_string_nz (addr));
+		      gdb_printf (gdb_stdlog,
+				  "csky: continuing\n");
 		    }
 		  continue;
 		}
@@ -1106,9 +1546,9 @@ csky_analyze_prologue (struct gdbarch *g
 		 anything.  */
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: no subu sp,sp,r4; NOT altering"
-				      " stacksize.\n");
+		  gdb_printf (gdb_stdlog,
+			      "csky: no subu sp,sp,r4; NOT altering"
+			      " stacksize.\n");
 		}
 	      break;
 	    }
@@ -1123,9 +1563,9 @@ csky_analyze_prologue (struct gdbarch *g
 	      int offset = CSKY_16_SUBI_IMM (insn);
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: got subi r0,%d; continuing\n",
-				      offset);
+		  gdb_printf (gdb_stdlog,
+			      "csky: got subi r0,%d; continuing\n",
+			      offset);
 		}
 	      stacksize += offset;
 	      continue;
@@ -1170,19 +1610,19 @@ csky_analyze_prologue (struct gdbarch *g
 		  offset += num * 4;
 		  if (csky_debug)
 		    {
-		      fprintf_unfiltered (gdb_stdlog,
-					  "csky: push regs_array: r4-r%d\n",
-					  4 + num - 1);
+		      gdb_printf (gdb_stdlog,
+				  "csky: push regs_array: r4-r%d\n",
+				  4 + num - 1);
 		    }
 		  for (rn = 4; rn <= 4 + num - 1; rn++)
 		    {
 		       register_offsets[rn] = stacksize - tmp;
 		       if (csky_debug)
 			 {
-			   fprintf_unfiltered (gdb_stdlog,
-					       "csky: r%d saved at 0x%x"
-					       " (offset %d)\n", rn,
-					       register_offsets[rn], offset);
+			   gdb_printf (gdb_stdlog,
+				       "csky: r%d saved at 0x%x"
+				       " (offset %d)\n", rn,
+				       register_offsets[rn], offset);
 			 }
 		       tmp += 4;
 		    }
@@ -1190,7 +1630,7 @@ csky_analyze_prologue (struct gdbarch *g
 
 	      framesize = stacksize;
 	      if (csky_debug)
-		fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+		gdb_printf (gdb_stdlog, "csky: continuing\n");
 	      continue;
 	    }
 	  else if (CSKY_16_IS_LRW4 (insn) || CSKY_16_IS_MOVI4 (insn))
@@ -1200,8 +1640,8 @@ csky_analyze_prologue (struct gdbarch *g
 
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: looking at large frame\n");
+		  gdb_printf (gdb_stdlog,
+			      "csky: looking at large frame\n");
 		}
 	      if (CSKY_16_IS_LRW4 (insn))
 		{
@@ -1219,15 +1659,15 @@ csky_analyze_prologue (struct gdbarch *g
 
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: base stacksize=0x%x\n", adjust);
+		  gdb_printf (gdb_stdlog,
+			      "csky: base stacksize=0x%x\n", adjust);
 		}
 
 	      /* May have zero or more instructions which modify r4.  */
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "csky: looking for r4 adjusters...\n");
+		  gdb_printf (gdb_stdlog,
+			      "csky: looking for r4 adjusters...\n");
 		}
 	      int offset = 2;
 	      insn_len = csky_get_insn (gdbarch, addr + offset, &insn2);
@@ -1239,8 +1679,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust += imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: addi r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: addi r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_SUBI4 (insn2))
@@ -1249,8 +1689,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust -= imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: subi r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: subi r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_NOR4 (insn2))
@@ -1258,8 +1698,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust = ~adjust;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: nor r4,r4,r4\n");
+			  gdb_printf (gdb_stdlog,
+				      "csky: nor r4,r4,r4\n");
 			}
 		    }
 		  else if (CSKY_32_IS_ROTLI4 (insn2))
@@ -1270,8 +1710,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust |= temp;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: rotli r4,r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: rotli r4,r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_LISI4 (insn2))
@@ -1280,8 +1720,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust <<= imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: lsli r4,r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: lsli r4,r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_BSETI4 (insn2))
@@ -1290,8 +1730,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust |= (1 << imm);
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: bseti r4,r4 %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: bseti r4,r4 %d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_BCLRI4 (insn2))
@@ -1300,8 +1740,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust &= ~(1 << imm);
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: bclri r4,r4 %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: bclri r4,r4 %d\n", imm);
 			}
 		    }
 		  else if (CSKY_32_IS_IXH4 (insn2))
@@ -1309,8 +1749,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust *= 3;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: ixh r4,r4,r4\n");
+			  gdb_printf (gdb_stdlog,
+				      "csky: ixh r4,r4,r4\n");
 			}
 		    }
 		  else if (CSKY_32_IS_IXW4 (insn2))
@@ -1318,8 +1758,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust *= 5;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: ixw r4,r4,r4\n");
+			  gdb_printf (gdb_stdlog,
+				      "csky: ixw r4,r4,r4\n");
 			}
 		    }
 		  else if (CSKY_16_IS_ADDI4 (insn2))
@@ -1328,8 +1768,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust += imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: addi r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: addi r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_16_IS_SUBI4 (insn2))
@@ -1338,8 +1778,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust -= imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: subi r4,%d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: subi r4,%d\n", imm);
 			}
 		    }
 		  else if (CSKY_16_IS_NOR4 (insn2))
@@ -1347,8 +1787,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust = ~adjust;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: nor r4,r4\n");
+			  gdb_printf (gdb_stdlog,
+				      "csky: nor r4,r4\n");
 			}
 		    }
 		  else if (CSKY_16_IS_BSETI4 (insn2))
@@ -1357,8 +1797,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust |= (1 << imm);
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: bseti r4, %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: bseti r4, %d\n", imm);
 			}
 		    }
 		  else if (CSKY_16_IS_BCLRI4 (insn2))
@@ -1367,8 +1807,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust &= ~(1 << imm);
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: bclri r4, %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: bclri r4, %d\n", imm);
 			}
 		    }
 		  else if (CSKY_16_IS_LSLI4 (insn2))
@@ -1377,8 +1817,8 @@ csky_analyze_prologue (struct gdbarch *g
 		      adjust <<= imm;
 		      if (csky_debug)
 			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "csky: lsli r4,r4, %d\n", imm);
+			  gdb_printf (gdb_stdlog,
+				      "csky: lsli r4,r4, %d\n", imm);
 			}
 		    }
 
@@ -1388,8 +1828,8 @@ csky_analyze_prologue (struct gdbarch *g
 
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog, "csky: "
-				      "done looking for r4 adjusters\n");
+		  gdb_printf (gdb_stdlog, "csky: "
+			      "done looking for r4 adjusters\n");
 		}
 
 	      /* If the next instruction adjusts the stack pointer, we keep
@@ -1401,13 +1841,13 @@ csky_analyze_prologue (struct gdbarch *g
 		  stacksize += adjust;
 		  if (csky_debug)
 		    {
-		      fprintf_unfiltered (gdb_stdlog, "csky: "
-					  "found stack adjustment of 0x%x"
-					  " bytes.\n", adjust);
-		      fprintf_unfiltered (gdb_stdlog, "csky: "
-					  "skipping to new address %s\n",
-					  core_addr_to_string_nz (addr));
-		      fprintf_unfiltered (gdb_stdlog, "csky: continuing\n");
+		      gdb_printf (gdb_stdlog, "csky: "
+				  "found stack adjustment of 0x%x"
+				  " bytes.\n", adjust);
+		      gdb_printf (gdb_stdlog, "csky: "
+				  "skipping to new address %s\n",
+				  core_addr_to_string_nz (addr));
+		      gdb_printf (gdb_stdlog, "csky: continuing\n");
 		    }
 		  continue;
 		}
@@ -1416,8 +1856,8 @@ csky_analyze_prologue (struct gdbarch *g
 		 anything.  */
 	      if (csky_debug)
 		{
-		  fprintf_unfiltered (gdb_stdlog, "csky: no subu sp,r4; "
-				      "NOT altering stacksize.\n");
+		  gdb_printf (gdb_stdlog, "csky: no subu sp,r4; "
+			      "NOT altering stacksize.\n");
 		}
 	      break;
 	    }
@@ -1426,8 +1866,8 @@ csky_analyze_prologue (struct gdbarch *g
       /* This is not a prologue instruction, so stop here.  */
       if (csky_debug)
 	{
-	  fprintf_unfiltered (gdb_stdlog, "csky: insn is not a prologue"
-			      " insn -- ending scan\n");
+	  gdb_printf (gdb_stdlog, "csky: insn is not a prologue"
+		      " insn -- ending scan\n");
 	}
       break;
     }
@@ -1459,18 +1899,18 @@ csky_analyze_prologue (struct gdbarch *g
 	{
 	  if (register_offsets[rn] >= 0)
 	    {
-	      this_cache->saved_regs[rn].addr
-		= this_cache->prev_sp - register_offsets[rn];
+	      this_cache->saved_regs[rn].set_addr (this_cache->prev_sp
+						   - register_offsets[rn]);
 	      if (csky_debug)
 		{
 		  CORE_ADDR rn_value = read_memory_unsigned_integer (
-		    this_cache->saved_regs[rn].addr, 4, byte_order);
-		  fprintf_unfiltered (gdb_stdlog, "Saved register %s "
-				      "stored at 0x%08lx, value=0x%08lx\n",
-				      csky_register_names[rn],
-				      (unsigned long)
-					this_cache->saved_regs[rn].addr,
-				      (unsigned long) rn_value);
+		    this_cache->saved_regs[rn].addr (), 4, byte_order);
+		  gdb_printf (gdb_stdlog, "Saved register %s "
+			      "stored at 0x%08lx, value=0x%08lx\n",
+			      csky_register_names[rn],
+			      (unsigned long)
+			      this_cache->saved_regs[rn].addr (),
+			      (unsigned long) rn_value);
 		}
 	    }
 	}
@@ -1536,7 +1976,6 @@ static CORE_ADDR
 csky_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   CORE_ADDR func_addr, func_end;
-  struct symtab_and_line sal;
   const int default_search_limit = 128;
 
   /* See if we can find the end of the prologue using the symbol table.  */
@@ -1585,201 +2024,6 @@ csky_sw_breakpoint_from_kind (struct gdb
     }
 }
 
-/* Implement the memory_insert_breakpoint gdbarch method.  */
-
-static int
-csky_memory_insert_breakpoint (struct gdbarch *gdbarch,
-			       struct bp_target_info *bp_tgt)
-{
-  int val;
-  const unsigned char *bp;
-  gdb_byte bp_write_record1[] = { 0, 0, 0, 0 };
-  gdb_byte bp_write_record2[] = { 0, 0, 0, 0 };
-  gdb_byte bp_record[] = { 0, 0, 0, 0 };
-
-  /* Sanity-check bp_address.  */
-  if (bp_tgt->reqstd_address % 2)
-    warning (_("Invalid breakpoint address 0x%x is an odd number."),
-	     (unsigned int) bp_tgt->reqstd_address);
-  scoped_restore restore_memory
-    = make_scoped_restore_show_memory_breakpoints (1);
-
-  /* Determine appropriate breakpoint_kind for this address.  */
-  bp_tgt->kind = csky_breakpoint_kind_from_pc (gdbarch,
-					       &bp_tgt->reqstd_address);
-
-  /* Save the memory contents.  */
-  bp_tgt->shadow_len = bp_tgt->kind;
-
-  /* Fill bp_tgt->placed_address.  */
-  bp_tgt->placed_address = bp_tgt->reqstd_address;
-
-  if (bp_tgt->kind == CSKY_INSN_SIZE16)
-    {
-      if ((bp_tgt->reqstd_address % 4) == 0)
-	{
-	  /* Read two bytes.  */
-	  val = target_read_memory (bp_tgt->reqstd_address,
-				    bp_tgt->shadow_contents, 2);
-	  if (val)
-	    return val;
-
-	  /* Read two bytes.  */
-	  val = target_read_memory (bp_tgt->reqstd_address + 2,
-				    bp_record, 2);
-	  if (val)
-	    return val;
-
-	  /* Write the breakpoint.  */
-	  bp_write_record1[2] = bp_record[0];
-	  bp_write_record1[3] = bp_record[1];
-	  bp = bp_write_record1;
-	  val = target_write_raw_memory (bp_tgt->reqstd_address, bp,
-					 CSKY_WR_BKPT_MODE);
-	}
-      else
-	{
-	  val = target_read_memory (bp_tgt->reqstd_address,
-				    bp_tgt->shadow_contents, 2);
-	  if (val)
-	    return val;
-
-	  val = target_read_memory (bp_tgt->reqstd_address - 2,
-				    bp_record, 2);
-	  if (val)
-	    return val;
-
-	  /* Write the breakpoint.  */
-	  bp_write_record1[0] = bp_record[0];
-	  bp_write_record1[1] = bp_record[1];
-	  bp = bp_write_record1;
-	  val = target_write_raw_memory (bp_tgt->reqstd_address - 2,
-					 bp, CSKY_WR_BKPT_MODE);
-	}
-    }
-  else
-    {
-      if (bp_tgt->placed_address % 4 == 0)
-	{
-	  val = target_read_memory (bp_tgt->reqstd_address,
-				    bp_tgt->shadow_contents,
-				    CSKY_WR_BKPT_MODE);
-	  if (val)
-	    return val;
-
-	  /* Write the breakpoint.  */
-	  bp = bp_write_record1;
-	  val = target_write_raw_memory (bp_tgt->reqstd_address,
-					 bp, CSKY_WR_BKPT_MODE);
-	}
-      else
-	{
-	  val = target_read_memory (bp_tgt->reqstd_address,
-				    bp_tgt->shadow_contents,
-				    CSKY_WR_BKPT_MODE);
-	  if (val)
-	    return val;
-
-	  val = target_read_memory (bp_tgt->reqstd_address - 2,
-				    bp_record, 2);
-	  if (val)
-	    return val;
-
-	  val = target_read_memory (bp_tgt->reqstd_address + 4,
-				    bp_record + 2, 2);
-	  if (val)
-	    return val;
-
-	  bp_write_record1[0] = bp_record[0];
-	  bp_write_record1[1] = bp_record[1];
-	  bp_write_record2[2] = bp_record[2];
-	  bp_write_record2[3] = bp_record[3];
-
-	  /* Write the breakpoint.  */
-	  bp = bp_write_record1;
-	  val = target_write_raw_memory (bp_tgt->reqstd_address - 2, bp,
-					 CSKY_WR_BKPT_MODE);
-	  if (val)
-	    return val;
-
-	  /* Write the breakpoint.  */
-	  bp = bp_write_record2;
-	  val = target_write_raw_memory (bp_tgt->reqstd_address + 2, bp,
-					 CSKY_WR_BKPT_MODE);
-	}
-    }
-  return val;
-}
-
-/* Restore the breakpoint shadow_contents to the target.  */
-
-static int
-csky_memory_remove_breakpoint (struct gdbarch *gdbarch,
-			       struct bp_target_info *bp_tgt)
-{
-  int val;
-  gdb_byte bp_record[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
-  /* Different for shadow_len 2 or 4.  */
-  if (bp_tgt->shadow_len == 2)
-    {
-      /* Do word-sized writes on word-aligned boundaries and read
-	 padding bytes as necessary.  */
-      if (bp_tgt->reqstd_address % 4 == 0)
-	{
-	  val = target_read_memory (bp_tgt->reqstd_address + 2,
-				    bp_record + 2, 2);
-	  if (val)
-	    return val;
-	  bp_record[0] = bp_tgt->shadow_contents[0];
-	  bp_record[1] = bp_tgt->shadow_contents[1];
-	  return target_write_raw_memory (bp_tgt->reqstd_address,
-					  bp_record, CSKY_WR_BKPT_MODE);
-	}
-      else
-	{
-	  val = target_read_memory (bp_tgt->reqstd_address - 2,
-				    bp_record, 2);
-	  if (val)
-	    return val;
-	  bp_record[2] = bp_tgt->shadow_contents[0];
-	  bp_record[3] = bp_tgt->shadow_contents[1];
-	  return target_write_raw_memory (bp_tgt->reqstd_address - 2,
-					  bp_record, CSKY_WR_BKPT_MODE);
-	}
-    }
-  else
-    {
-      /* Do word-sized writes on word-aligned boundaries and read
-	 padding bytes as necessary.  */
-      if (bp_tgt->placed_address % 4 == 0)
-	{
-	  return target_write_raw_memory (bp_tgt->reqstd_address,
-					  bp_tgt->shadow_contents,
-					  CSKY_WR_BKPT_MODE);
-	}
-      else
-	{
-	  val = target_read_memory (bp_tgt->reqstd_address - 2,
-				    bp_record, 2);
-	  if (val)
-	    return val;
-	  val = target_read_memory (bp_tgt->reqstd_address + 4,
-				    bp_record+6, 2);
-	  if (val)
-	    return val;
-
-	  bp_record[2] = bp_tgt->shadow_contents[0];
-	  bp_record[3] = bp_tgt->shadow_contents[1];
-	  bp_record[4] = bp_tgt->shadow_contents[2];
-	  bp_record[5] = bp_tgt->shadow_contents[3];
-
-	  return target_write_raw_memory (bp_tgt->reqstd_address - 2,
-					  bp_record,
-					  CSKY_WR_BKPT_MODE * 2);
-	}
-    }
-}
-
 /* Determine link register type.  */
 
 static lr_type_t
@@ -1819,7 +2063,7 @@ csky_analyze_lr_type (struct gdbarch *gd
 /* Heuristic unwinder.  */
 
 static struct csky_unwind_cache *
-csky_frame_unwind_cache (struct frame_info *this_frame)
+csky_frame_unwind_cache (frame_info_ptr this_frame)
 {
   CORE_ADDR prologue_start, prologue_end, func_end, prev_pc, block_addr;
   struct csky_unwind_cache *cache;
@@ -1850,13 +2094,13 @@ csky_frame_unwind_cache (struct frame_in
   /* Get the (function) symbol matching prologue_start.  */
   bl = block_for_pc (prologue_start);
   if (bl != NULL)
-    func_size = bl->endaddr - bl->startaddr;
+    func_size = bl->end () - bl->start ();
   else
     {
       struct bound_minimal_symbol msymbol
 	= lookup_minimal_symbol_by_pc (prologue_start);
       if (msymbol.minsym != NULL)
-	func_size = MSYMBOL_SIZE (msymbol.minsym);
+	func_size = msymbol.minsym->size ();
     }
 
   /* If FUNC_SIZE is 0 we may have a special-case use of lr
@@ -1871,14 +2115,14 @@ csky_frame_unwind_cache (struct frame_in
 			    func_end, this_frame, cache, lr_type);
 
   /* gdbarch_sp_regnum contains the value and not the address.  */
-  trad_frame_set_value (cache->saved_regs, sp_regnum, cache->prev_sp);
+  cache->saved_regs[sp_regnum].set_value (cache->prev_sp);
   return cache;
 }
 
 /* Implement the this_id function for the normal unwinder.  */
 
 static void
-csky_frame_this_id (struct frame_info *this_frame,
+csky_frame_this_id (frame_info_ptr this_frame,
 		    void **this_prologue_cache, struct frame_id *this_id)
 {
   struct csky_unwind_cache *cache;
@@ -1899,7 +2143,7 @@ csky_frame_this_id (struct frame_info *t
 /* Implement the prev_register function for the normal unwinder.  */
 
 static struct value *
-csky_frame_prev_register (struct frame_info *this_frame,
+csky_frame_prev_register (frame_info_ptr this_frame,
 			  void **this_prologue_cache, int regnum)
 {
   struct csky_unwind_cache *cache;
@@ -1916,6 +2160,7 @@ csky_frame_prev_register (struct frame_i
    unwinder.  */
 
 static const struct frame_unwind csky_unwind_cache = {
+  "cski prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   csky_frame_this_id,
@@ -1926,26 +2171,76 @@ static const struct frame_unwind csky_un
   NULL
 };
 
+static CORE_ADDR
+csky_check_long_branch (frame_info_ptr frame, CORE_ADDR pc)
+{
+  gdb_byte buf[8];
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+  enum bfd_endian byte_order_for_code
+	= gdbarch_byte_order_for_code (gdbarch);
+
+  if (target_read_memory (pc, buf, 8) == 0)
+    {
+      unsigned int data0
+	= extract_unsigned_integer (buf, 4, byte_order_for_code);
+      unsigned int data1
+	= extract_unsigned_integer (buf + 4, 4, byte_order_for_code);
+
+      /* Case: jmpi [pc+4] : 0xeac00001
+	 .long addr   */
+      if (data0 == CSKY_JMPI_PC_4)
+	return data1;
 
+      /* Case: lrw t1, [pc+8] : 0xea8d0002
+	       jmp t1         : 0x7834
+	       nop            : 0x6c03
+	       .long addr  */
+      if ((data0 == CSKY_LRW_T1_PC_8) && (data1 == CSKY_JMP_T1_VS_NOP))
+	{
+	  if (target_read_memory (pc + 8, buf, 4) == 0)
+	    return  extract_unsigned_integer (buf, 4, byte_order_for_code);
+	}
+
+      return 0;
+    }
+
+  return 0;
+}
 
 static int
 csky_stub_unwind_sniffer (const struct frame_unwind *self,
-			 struct frame_info *this_frame,
-			 void **this_prologue_cache)
+			  frame_info_ptr this_frame,
+			  void **this_prologue_cache)
 {
-  CORE_ADDR addr_in_block;
+  CORE_ADDR addr_in_block, pc;
+  gdb_byte dummy[4];
+  const char *name;
+  CORE_ADDR start_addr;
 
+  /* Get pc */
   addr_in_block = get_frame_address_in_block (this_frame);
+  pc = get_frame_pc (this_frame);
 
-  if (find_pc_partial_function (addr_in_block, NULL, NULL, NULL) == 0
-      || in_plt_section (addr_in_block))
+  if (in_plt_section (addr_in_block)
+      || target_read_memory (pc, dummy, 4) != 0)
     return 1;
 
+  /* Find the starting address and name of the function containing the PC.  */
+  if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
+    {
+      start_addr = csky_check_long_branch (this_frame, pc);
+      /* if not long branch, return 0.  */
+      if (start_addr != 0)
+	return 1;
+
+      return 0;
+    }
+
   return 0;
 }
 
 static struct csky_unwind_cache *
-csky_make_stub_cache (struct frame_info *this_frame)
+csky_make_stub_cache (frame_info_ptr this_frame)
 {
   struct csky_unwind_cache *cache;
 
@@ -1957,7 +2252,7 @@ csky_make_stub_cache (struct frame_info
 }
 
 static void
-csky_stub_this_id (struct frame_info *this_frame,
+csky_stub_this_id (frame_info_ptr this_frame,
 		  void **this_cache,
 		  struct frame_id *this_id)
 {
@@ -1972,7 +2267,7 @@ csky_stub_this_id (struct frame_info *th
 }
 
 static struct value *
-csky_stub_prev_register (struct frame_info *this_frame,
+csky_stub_prev_register (frame_info_ptr this_frame,
 			    void **this_cache,
 			    int prev_regnum)
 {
@@ -1998,7 +2293,8 @@ csky_stub_prev_register (struct frame_in
 				       prev_regnum);
 }
 
-struct frame_unwind csky_stub_unwind = {
+static frame_unwind csky_stub_unwind = {
+  "csky stub",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   csky_stub_this_id,
@@ -2011,7 +2307,7 @@ struct frame_unwind csky_stub_unwind = {
    for the normal unwinder.  */
 
 static CORE_ADDR
-csky_frame_base_address (struct frame_info *this_frame, void **this_cache)
+csky_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct csky_unwind_cache *cache;
 
@@ -2034,7 +2330,7 @@ static const struct frame_base csky_fram
 static void
 csky_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
 			    struct dwarf2_frame_state_reg *reg,
-			    struct frame_info *this_frame)
+			    frame_info_ptr this_frame)
 {
   if (regnum == gdbarch_pc_regnum (gdbarch))
     reg->how = DWARF2_FRAME_REG_RA;
@@ -2059,8 +2355,6 @@ csky_init_reggroup ()
 static void
 csky_add_reggroups (struct gdbarch *gdbarch)
 {
-  reggroup_add (gdbarch, all_reggroup);
-  reggroup_add (gdbarch, general_reggroup);
   reggroup_add (gdbarch, cr_reggroup);
   reggroup_add (gdbarch, fr_reggroup);
   reggroup_add (gdbarch, vr_reggroup);
@@ -2072,12 +2366,11 @@ csky_add_reggroups (struct gdbarch *gdba
 
 static int
 csky_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
-			  struct reggroup *reggroup)
+			  const struct reggroup *reggroup)
 {
   int raw_p;
 
-  if (gdbarch_register_name (gdbarch, regnum) == NULL
-      || gdbarch_register_name (gdbarch, regnum)[0] == '\0')
+  if (gdbarch_register_name (gdbarch, regnum)[0] == '\0')
     return 0;
 
   if (reggroup == all_reggroup)
@@ -2087,7 +2380,11 @@ csky_register_reggroup_p (struct gdbarch
   if (reggroup == save_reggroup || reggroup == restore_reggroup)
     return raw_p;
 
-  if (((regnum >= CSKY_R0_REGNUM) && (regnum <= CSKY_R0_REGNUM + 31))
+  if ((((regnum >= CSKY_R0_REGNUM) && (regnum <= CSKY_R0_REGNUM + 31))
+       || (regnum == CSKY_PC_REGNUM)
+       || (regnum == CSKY_EPC_REGNUM)
+       || (regnum == CSKY_CR0_REGNUM)
+       || (regnum == CSKY_EPSR_REGNUM))
       && (reggroup == general_reggroup))
     return 1;
 
@@ -2098,8 +2395,8 @@ csky_register_reggroup_p (struct gdbarch
     return 2;
 
   if ((((regnum >= CSKY_VR0_REGNUM) && (regnum <= CSKY_VR0_REGNUM + 15))
-       || ((regnum >= CSKY_VCR0_REGNUM)
-	   && (regnum <= CSKY_VCR0_REGNUM + 2)))
+       || ((regnum >= CSKY_FCR_REGNUM)
+	   && (regnum <= CSKY_FCR_REGNUM + 2)))
       && (reggroup == vr_reggroup))
     return 3;
 
@@ -2113,10 +2410,16 @@ csky_register_reggroup_p (struct gdbarch
     return 5;
 
   if ((((regnum >= CSKY_FR0_REGNUM) && (regnum <= CSKY_FR0_REGNUM + 15))
-       || ((regnum >= CSKY_VCR0_REGNUM) && (regnum <= CSKY_VCR0_REGNUM + 2)))
+       || ((regnum >= CSKY_FCR_REGNUM) && (regnum <= CSKY_FCR_REGNUM + 2)))
       && (reggroup == fr_reggroup))
     return 6;
 
+  if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
+    {
+      if (tdesc_register_in_reggroup_p (gdbarch, regnum, reggroup) > 0)
+	return 7;
+    }
+
   return 0;
 }
 
@@ -2125,32 +2428,239 @@ csky_register_reggroup_p (struct gdbarch
 static int
 csky_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dw_reg)
 {
-  if (dw_reg < 0 || dw_reg >= CSKY_NUM_REGS)
-    return -1;
-  return dw_reg;
+  /* For GPRs.  */
+  if (dw_reg >= CSKY_R0_REGNUM && dw_reg <= CSKY_R0_REGNUM + 31)
+    return dw_reg;
+
+  /* For Hi, Lo, PC.  */
+  if (dw_reg == CSKY_HI_REGNUM || dw_reg == CSKY_LO_REGNUM
+      || dw_reg == CSKY_PC_REGNUM)
+    return dw_reg;
+
+  /* For Float and Vector pseudo registers.  */
+  if (dw_reg >= FV_PSEUDO_REGNO_FIRST && dw_reg <= FV_PSEUDO_REGNO_LAST)
+    {
+      char name_buf[4];
+
+      xsnprintf (name_buf, sizeof (name_buf), "s%d",
+		 dw_reg - FV_PSEUDO_REGNO_FIRST);
+      return user_reg_map_name_to_regnum (gdbarch, name_buf,
+					  strlen (name_buf));
+    }
+
+  /* Others, unknown.  */
+  return -1;
+}
+
+/* Check whether xml has discribled the essential regs.  */
+
+static int
+csky_essential_reg_check (const struct csky_supported_tdesc_register *reg)
+{
+  if ((strcmp (reg->name , "pc") == 0)
+      && (reg->num == CSKY_PC_REGNUM))
+    return CSKY_TDESC_REGS_PC_NUMBERED;
+  else if ((strcmp (reg->name , "r14") == 0)
+      && (reg->num == CSKY_SP_REGNUM))
+    return CSKY_TDESC_REGS_SP_NUMBERED;
+  else if ((strcmp (reg->name , "r15") == 0)
+      && (reg->num == CSKY_LR_REGNUM))
+    return CSKY_TDESC_REGS_LR_NUMBERED;
+  else
+    return 0;
+}
+
+/* Check whether xml has discribled the fr0~fr15 regs.  */
+
+static int
+csky_fr0_fr15_reg_check (const struct csky_supported_tdesc_register *reg) {
+  int i = 0;
+  for (i = 0; i < 16; i++)
+    {
+      if ((strcmp (reg->name, csky_supported_fpu_regs[i].name) == 0)
+	  && (csky_supported_fpu_regs[i].num == reg->num))
+	return (1 << i);
+    }
+
+  return 0;
+};
+
+/* Check whether xml has discribled the fr16~fr31 regs.  */
+
+static int
+csky_fr16_fr31_reg_check (const struct csky_supported_tdesc_register *reg) {
+  int i = 0;
+  for (i = 0; i < 16; i++)
+    {
+      if ((strcmp (reg->name, csky_supported_fpu_regs[i + 16].name) == 0)
+	  && (csky_supported_fpu_regs[i + 16].num == reg->num))
+	return (1 << i);
+    }
+
+  return 0;
+};
+
+/* Check whether xml has discribled the vr0~vr15 regs.  */
+
+static int
+csky_vr0_vr15_reg_check (const struct csky_supported_tdesc_register *reg) {
+  int i = 0;
+  for (i = 0; i < 16; i++)
+    {
+      if ((strcmp (reg->name, csky_supported_fpu_regs[i + 32].name) == 0)
+	  && (csky_supported_fpu_regs[i + 32].num == reg->num))
+	return (1 << i);
+    }
+
+  return 0;
+};
+
+/* Return pseudo reg's name.  */
+
+static const char *
+csky_pseudo_register_name (struct gdbarch *gdbarch, int regno)
+{
+  int num_regs = gdbarch_num_regs (gdbarch);
+  csky_gdbarch_tdep *tdep
+    = gdbarch_tdep<csky_gdbarch_tdep> (gdbarch);
+
+  regno -= num_regs;
+
+  if (tdep->fv_pseudo_registers_count)
+    {
+      static const char *const fv_pseudo_names[] = {
+	"s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
+	"s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
+	"s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
+	"s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
+	"s32", "s33", "s34", "s35", "s36", "s37", "s38", "s39",
+	"s40", "s41", "s42", "s43", "s44", "s45", "s46", "s47",
+	"s48", "s49", "s50", "s51", "s52", "s53", "s54", "s55",
+	"s56", "s57", "s58", "s59", "s60", "s61", "s62", "s63",
+	"s64", "s65", "s66", "s67", "s68", "s69", "s70", "s71",
+	"s72", "s73", "s74", "s75", "s76", "s77", "s78", "s79",
+	"s80", "s81", "s82", "s83", "s84", "s85", "s86", "s87",
+	"s88", "s89", "s90", "s91", "s92", "s93", "s94", "s95",
+	"s96", "s97", "s98", "s99", "s100", "s101", "s102", "s103",
+	"s104", "s105", "s106", "s107", "s108", "s109", "s110", "s111",
+	"s112", "s113", "s114", "s115", "s116", "s117", "s118", "s119",
+	"s120", "s121", "s122", "s123", "s124", "s125", "s126", "s127",
+      };
+
+      if (regno < tdep->fv_pseudo_registers_count)
+	{
+	  if ((regno < 64) && ((regno % 4) >= 2) && !tdep->has_vr0)
+	    return "";
+	  else if ((regno >= 64) && ((regno % 4) >= 2))
+	    return "";
+	  else
+	    return fv_pseudo_names[regno];
+	}
+    }
+
+  return "";
+}
+
+/* Read for csky pseudo regs.  */
+
+static enum register_status
+csky_pseudo_register_read (struct gdbarch *gdbarch,
+			   struct readable_regcache *regcache,
+			   int regnum, gdb_byte *buf)
+{
+  int num_regs = gdbarch_num_regs (gdbarch);
+  csky_gdbarch_tdep *tdep
+    = gdbarch_tdep<csky_gdbarch_tdep> (gdbarch);
+
+  regnum -= num_regs;
+
+  if (regnum < tdep->fv_pseudo_registers_count)
+    {
+      enum register_status status;
+      int gdb_regnum = 0;
+      int offset = 0;
+      gdb_byte reg_buf[16];
+
+      /* Ensure getting s0~s63 from vrx if tdep->has_vr0 is true.  */
+      if (tdep->has_vr0)
+	{
+	  if (regnum < 64)
+	    {
+	      gdb_regnum = CSKY_VR0_REGNUM + (regnum / 4);
+	      offset = (regnum % 4) * 4;
+	    }
+	  else
+	    {
+	      gdb_regnum = CSKY_FR16_REGNUM + ((regnum - 64) / 4);
+	      if ((regnum % 4) >= 2)
+		return REG_UNAVAILABLE;
+	      offset = (regnum % 2) * 4;
+	    }
+	}
+      else
+	{
+	  gdb_regnum = CSKY_FR0_REGNUM + (regnum / 4);
+	  if ((regnum % 4) >= 2)
+	    return REG_UNAVAILABLE;
+	  offset = (regnum % 2) * 4;
+	}
+
+      status = regcache->raw_read (gdb_regnum, reg_buf);
+      if (status == REG_VALID)
+	memcpy (buf, reg_buf + offset, 4);
+      return status;
+    }
+
+  return REG_UNKNOWN;
 }
 
-/* Override interface for command: info register.  */
+/* Write for csky pseudo regs.  */
 
 static void
-csky_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
-			   struct frame_info *frame, int regnum, int all)
+csky_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
+			    int regnum, const gdb_byte *buf)
 {
-  /* Call default print_registers_info function.  */
-  default_print_registers_info (gdbarch, file, frame, regnum, all);
+  int num_regs = gdbarch_num_regs (gdbarch);
+  csky_gdbarch_tdep *tdep
+    = gdbarch_tdep<csky_gdbarch_tdep> (gdbarch);
 
-  /* For command: info register.  */
-  if (regnum == -1 && all == 0)
+  regnum -= num_regs;
+
+  if (regnum < tdep->fv_pseudo_registers_count)
     {
-      default_print_registers_info (gdbarch, file, frame,
-				    CSKY_PC_REGNUM, 0);
-      default_print_registers_info (gdbarch, file, frame,
-				    CSKY_EPC_REGNUM, 0);
-      default_print_registers_info (gdbarch, file, frame,
-				    CSKY_CR0_REGNUM, 0);
-      default_print_registers_info (gdbarch, file, frame,
-				    CSKY_EPSR_REGNUM, 0);
+      gdb_byte reg_buf[16];
+      int gdb_regnum = 0;
+      int offset = 0;
+
+      if (tdep->has_vr0)
+	{
+	  if (regnum < 64)
+	    {
+	      gdb_regnum = CSKY_VR0_REGNUM + (regnum / 4);
+	      offset = (regnum % 4) * 4;
+	    }
+	  else
+	    {
+	      gdb_regnum = CSKY_FR16_REGNUM + ((regnum - 64) / 4);
+	      if ((regnum % 4) >= 2)
+		return;
+	      offset = (regnum % 2) * 4;
+	    }
+	}
+      else
+	{
+	  gdb_regnum = CSKY_FR0_REGNUM + (regnum / 4);
+	  if ((regnum % 4) >= 2)
+	    return;
+	  offset = (regnum % 2) * 4;
+	}
+
+      regcache->raw_read (gdb_regnum, reg_buf);
+      memcpy (reg_buf + offset, buf, 4);
+      regcache->raw_write (gdb_regnum, reg_buf);
+      return;
     }
+
   return;
 }
 
@@ -2164,18 +2674,134 @@ csky_print_registers_info (struct gdbarc
 static struct gdbarch *
 csky_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
-  struct gdbarch *gdbarch;
-  struct gdbarch_tdep *tdep;
+  /* Analyze info.abfd.  */
+  unsigned int fpu_abi = 0;
+  unsigned int vdsp_version = 0;
+  unsigned int fpu_hardfp = 0;
+  /* Analyze info.target_desc */
+  int num_regs = 0;
+  int has_fr0 = 0;
+  int has_fr16 = 0;
+  int has_vr0 = 0;
+  tdesc_arch_data_up tdesc_data;
+
+  if (tdesc_has_registers (info.target_desc))
+    {
+      int valid_p = 0;
+      int numbered = 0;
+      int index = 0;
+      int i = 0;
+      int feature_names_count = ARRAY_SIZE (csky_supported_tdesc_feature_names);
+      int support_tdesc_regs_count
+	= csky_get_supported_tdesc_registers_count();
+      const struct csky_supported_tdesc_register *tdesc_reg;
+      const struct tdesc_feature *feature;
+
+      tdesc_data = tdesc_data_alloc ();
+      for (index = 0; index < feature_names_count; index ++)
+	{
+	  feature = tdesc_find_feature (info.target_desc,
+					csky_supported_tdesc_feature_names[index]);
+	  if (feature != NULL)
+	    {
+	      for (i = 0; i < support_tdesc_regs_count; i++)
+		{
+		  tdesc_reg = csky_get_supported_register_by_index (i);
+		  if (!tdesc_reg)
+		    break;
+		  numbered = tdesc_numbered_register (feature, tdesc_data.get(),
+						      tdesc_reg->num,
+						      tdesc_reg->name);
+		  if (numbered) {
+		      valid_p |= csky_essential_reg_check (tdesc_reg);
+		      has_fr0 |= csky_fr0_fr15_reg_check (tdesc_reg);
+		      has_fr16 |= csky_fr16_fr31_reg_check (tdesc_reg);
+		      has_vr0 |= csky_vr0_vr15_reg_check (tdesc_reg);
+		      if (num_regs < tdesc_reg->num)
+			num_regs = tdesc_reg->num;
+		  }
+		}
+	    }
+	}
+      if (valid_p != CSKY_TDESC_REGS_ESSENTIAL_VALUE)
+	return NULL;
+    }
+
+  /* When the type of bfd file is srec(or any files are not elf),
+     the E_FLAGS will be not credible.  */
+  if (info.abfd != NULL && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
+    {
+      /* Get FPU, VDSP build options.  */
+      fpu_abi = bfd_elf_get_obj_attr_int (info.abfd,
+					  OBJ_ATTR_PROC,
+					  Tag_CSKY_FPU_ABI);
+      vdsp_version = bfd_elf_get_obj_attr_int (info.abfd,
+					       OBJ_ATTR_PROC,
+					       Tag_CSKY_VDSP_VERSION);
+      fpu_hardfp = bfd_elf_get_obj_attr_int (info.abfd,
+					     OBJ_ATTR_PROC,
+					     Tag_CSKY_FPU_HARDFP);
+    }
 
   /* Find a candidate among the list of pre-declared architectures.  */
-  arches = gdbarch_list_lookup_by_info (arches, &info);
-  if (arches != NULL)
-    return arches->gdbarch;
+  for (arches = gdbarch_list_lookup_by_info (arches, &info);
+       arches != NULL;
+       arches = gdbarch_list_lookup_by_info (arches->next, &info))
+    {
+      csky_gdbarch_tdep *tdep
+	= gdbarch_tdep<csky_gdbarch_tdep> (arches->gdbarch);
+      if (fpu_abi != tdep->fpu_abi)
+	continue;
+      if (vdsp_version != tdep->vdsp_version)
+	continue;
+      if (fpu_hardfp != tdep->fpu_hardfp)
+	continue;
+
+      /* Found a match.  */
+      return arches->gdbarch;
+    }
 
   /* None found, create a new architecture from the information
      provided.  */
-  tdep = XCNEW (struct gdbarch_tdep);
-  gdbarch = gdbarch_alloc (&info, tdep);
+  gdbarch *gdbarch
+    = gdbarch_alloc (&info, gdbarch_tdep_up (new csky_gdbarch_tdep));
+  csky_gdbarch_tdep *tdep = gdbarch_tdep<csky_gdbarch_tdep> (gdbarch);
+
+  tdep->fpu_abi = fpu_abi;
+  tdep->vdsp_version = vdsp_version;
+  tdep->fpu_hardfp = fpu_hardfp;
+
+  if (tdesc_data != NULL)
+    {
+      if ((has_vr0 == CSKY_FULL16_ONEHOT_VALUE)
+	  && (has_fr16 == CSKY_FULL16_ONEHOT_VALUE))
+	{
+	  tdep->has_vr0 = 1;
+	  tdep->fv_pseudo_registers_count = 128;
+	}
+      else if ((has_vr0 == CSKY_FULL16_ONEHOT_VALUE)
+	       && (has_fr16 != CSKY_FULL16_ONEHOT_VALUE))
+	{
+	  tdep->has_vr0 = 1;
+	  tdep->fv_pseudo_registers_count = 64;
+	}
+      else if ((has_fr0 == CSKY_FULL16_ONEHOT_VALUE)
+	       && (has_vr0 != CSKY_FULL16_ONEHOT_VALUE))
+	{
+	  tdep->has_vr0 = 0;
+	  tdep->fv_pseudo_registers_count = 64;
+	}
+      else
+	{
+	  tdep->has_vr0 = 0;
+	  tdep->fv_pseudo_registers_count = 0;
+	}
+    }
+  else
+    {
+      tdep->has_vr0 = 1;
+      tdep->fv_pseudo_registers_count = 64;
+    }
 
   /* Target data types.  */
   set_gdbarch_ptr_bit (gdbarch, 32);
@@ -2202,7 +2828,6 @@ csky_gdbarch_init (struct gdbarch_info i
   set_gdbarch_register_type (gdbarch, csky_register_type);
   set_gdbarch_read_pc (gdbarch, csky_read_pc);
   set_gdbarch_write_pc (gdbarch, csky_write_pc);
-  set_gdbarch_print_registers_info (gdbarch, csky_print_registers_info);
   csky_add_reggroups (gdbarch);
   set_gdbarch_register_reggroup_p (gdbarch, csky_register_reggroup_p);
   set_gdbarch_stab_reg_to_regnum (gdbarch, csky_dwarf_reg_to_regnum);
@@ -2225,26 +2850,42 @@ csky_gdbarch_init (struct gdbarch_info i
   frame_unwind_append_unwinder (gdbarch, &csky_stub_unwind);
   frame_unwind_append_unwinder (gdbarch, &csky_unwind_cache);
 
-  /* Breakpoints.  */
-  set_gdbarch_memory_insert_breakpoint (gdbarch,
-					csky_memory_insert_breakpoint);
-  set_gdbarch_memory_remove_breakpoint (gdbarch,
-					csky_memory_remove_breakpoint);
-
   /* Hook in ABI-specific overrides, if they have been registered.  */
   gdbarch_init_osabi (info, gdbarch);
 
   /* Support simple overlay manager.  */
   set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
   set_gdbarch_char_signed (gdbarch, 0);
+
+  if (tdesc_data != nullptr)
+    {
+      set_gdbarch_num_regs (gdbarch, (num_regs + 1));
+      tdesc_use_registers (gdbarch, info.target_desc, std::move (tdesc_data));
+      set_gdbarch_register_type (gdbarch, csky_register_type);
+      set_gdbarch_register_reggroup_p (gdbarch,
+				       csky_register_reggroup_p);
+    }
+
+  if (tdep->fv_pseudo_registers_count)
+    {
+      set_gdbarch_num_pseudo_regs (gdbarch,
+				   tdep->fv_pseudo_registers_count);
+      set_gdbarch_pseudo_register_read (gdbarch,
+					csky_pseudo_register_read);
+      set_gdbarch_deprecated_pseudo_register_write
+	(gdbarch, csky_pseudo_register_write);
+      set_tdesc_pseudo_register_name (gdbarch, csky_pseudo_register_name);
+    }
+
   return gdbarch;
 }
 
+void _initialize_csky_tdep ();
 void
-_initialize_csky_tdep (void)
+_initialize_csky_tdep ()
 {
 
-  register_gdbarch_init (bfd_arch_csky, csky_gdbarch_init);
+  gdbarch_register (bfd_arch_csky, csky_gdbarch_init);
 
   csky_init_reggroup ();
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/csky-tdep.h ./gdb/csky-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/csky-tdep.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/csky-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the CSKY architecture, for GDB.
 
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,6 +20,8 @@
 #ifndef CSKY_TDEP_H
 #define CSKY_TDEP_H
 
+#include "gdbarch.h"
+
 /* How to interpret the contents of the link register.  */
 enum lr_type_t
 {
@@ -29,9 +31,16 @@ enum lr_type_t
 };
 
 /* Target-dependent structure in gdbarch.  */
-struct gdbarch_tdep
+struct csky_gdbarch_tdep : gdbarch_tdep_base
 {
-  /* This is Unused.  */
+  /* Save FPU, VDSP ABI.  */
+  unsigned int fpu_abi;
+  unsigned int fpu_hardfp;
+  unsigned int vdsp_version;
+
+  /* Save fv_pseudo_registers_count.  */
+  unsigned int has_vr0;
+  unsigned int fv_pseudo_registers_count;
 };
 
 /* Instruction sizes.  */
@@ -46,9 +55,10 @@ enum csky_regnum
 {
   CSKY_R0_REGNUM = 0, /* General registers.  */
   CSKY_R15_REGNUM = 15,
+  CSKY_HI_REGNUM = 36,
+  CSKY_LO_REGNUM = 37,
   CSKY_PC_REGNUM = 72,
-  CSKY_HI_REGNUM = 20,
-  CSKY_LO_REGNUM = 21,
+  CSKY_AR0_REGNUM = 73,
   CSKY_CR0_REGNUM = 89,
   CSKY_VBR_REGNUM = CSKY_CR0_REGNUM + 1,
   CSKY_EPSR_REGNUM = CSKY_CR0_REGNUM + 2,
@@ -58,7 +68,8 @@ enum csky_regnum
 
   /* Float register 0.  */
   CSKY_FR0_REGNUM = 40,
-  CSKY_VCR0_REGNUM = 121,
+  CSKY_FR16_REGNUM = 1172,
+  CSKY_FCR_REGNUM = 121,
   CSKY_MMU_REGNUM = 128,
   CSKY_PROFCR_REGNUM = 140,
   CSKY_PROFGR_REGNUM = 144,
@@ -82,12 +93,28 @@ enum csky_regnum
   CSKY_PSR_REGNUM = CSKY_CR0_REGNUM,
 
   CSKY_MAX_REGISTER_SIZE = 16,
+
+  /* Actually, the max regs number should be 1187. But if the
+     gdb stub does not send a tdesc-xml file to gdb, 253 works. */
   CSKY_MAX_REGS = 253
 };
 
 /* ICE registers.  */
 #define CSKY_CRBANK_NUM_REGS 32
 
+/* Tdesc registers essential check.  */
+#define CSKY_TDESC_REGS_PC_NUMBERED             (1 << 0)
+#define CSKY_TDESC_REGS_SP_NUMBERED             (1 << 1)
+#define CSKY_TDESC_REGS_LR_NUMBERED             (1 << 2)
+#define CSKY_TDESC_REGS_ESSENTIAL_VALUE         (7)
+
+/* For fr0~fr15, fr16~fr31, vr0~vr15 check.  */
+#define CSKY_FULL16_ONEHOT_VALUE   0xffff
+
+/* Define for CSKY FV pseudo regs for dwarf regs. */
+#define FV_PSEUDO_REGNO_FIRST  74
+#define FV_PSEUDO_REGNO_LAST   201
+
 /* Number of processor registers w/o ICE registers.  */
 #define CSKY_NUM_REGS (CSKY_MAX_REGS - CSKY_CRBANK_NUM_REGS)
 
@@ -352,4 +379,15 @@ enum csky_regnum
 #define CSKY_MOVI_R7_173 0x00adea07
 #define CSKY_TRAP_0 0x2020c000
 
+/* Sizeof (tls) */
+#define CSKY_SIGCONTEXT_PT_REGS_TLS  4
+
+/* Macro for kernel 4.x  */
+#define CSKY_MOVI_R7_139 0x008bea07
+
+/* Macro for check long branch.  */
+#define CSKY_JMPI_PC_4      0x1eac0
+#define CSKY_LRW_T1_PC_8    0x2ea8d
+#define CSKY_JMP_T1_VS_NOP  0x6c037834
+
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-support.h ./gdb/c-support.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-support.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/c-support.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Helper routines for C support in GDB.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ctfread.c ./gdb/ctfread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ctfread.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/ctfread.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Compact ANSI-C Type Format (CTF) support in GDB.
 
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -45,7 +45,7 @@
    The file header stores a magic number and version information, encoding
    flags, and the byte offset of each of the sections relative to the end of the
    header itself.  If the CTF data has been uniquified against another set of
-   CTF data, a reference to that data also appears in the the header.  This
+   CTF data, a reference to that data also appears in the header.  This
    reference is the name of the label corresponding to the types uniquified
    against.
 
@@ -80,21 +80,63 @@
 #include "complaints.h"
 #include "block.h"
 #include "ctfread.h"
-#include "psympriv.h"
+#include "psymtab.h"
+
+#if ENABLE_LIBCTF
+
 #include "ctf.h"
 #include "ctf-api.h"
 
-static const struct objfile_key<htab, htab_deleter> ctf_tid_key;
-static const struct objfile_data *ctf_file_key;
+static const registry<objfile>::key<htab, htab_deleter> ctf_tid_key;
+
+struct ctf_fp_info
+{
+  explicit ctf_fp_info (ctf_dict_t *cfp) : fp (cfp) {}
+  ~ctf_fp_info ();
+  ctf_dict_t *fp;
+};
+
+/* Cleanup function for the ctf_dict_key data.  */
+ctf_fp_info::~ctf_fp_info ()
+{
+  if (fp == nullptr)
+    return;
+
+  ctf_archive_t *arc = ctf_get_arc (fp);
+  ctf_dict_close (fp);
+  ctf_close (arc);
+}
+
+static const registry<objfile>::key<ctf_fp_info> ctf_dict_key;
 
 /* A CTF context consists of a file pointer and an objfile pointer.  */
 
-typedef struct ctf_context
+struct ctf_context
 {
-  ctf_file_t *fp;
+  ctf_dict_t *fp;
   struct objfile *of;
+  psymtab_storage *partial_symtabs;
+  partial_symtab *pst;
+  ctf_archive_t *arc;
   struct buildsym_compunit *builder;
-} ctf_context_t;
+};
+
+/* A partial symtab, specialized for this module.  */
+struct ctf_psymtab : public standard_psymtab
+{
+  ctf_psymtab (const char *filename,
+	       psymtab_storage *partial_symtabs,
+	       objfile_per_bfd_storage *objfile_per_bfd,
+	       unrelocated_addr addr)
+    : standard_psymtab (filename, partial_symtabs, objfile_per_bfd, addr)
+  {
+  }
+
+  void read_symtab (struct objfile *) override;
+  void expand_psymtab (struct objfile *) override;
+
+  struct ctf_context context;
+};
 
 /* The routines that read and process fields/members of a C struct, union,
    or enumeration, pass lists of data member fields in an instance of a
@@ -111,7 +153,7 @@ struct ctf_field_info
   std::vector<struct ctf_nextfield> fields;
 
   /* Context.  */
-  ctf_context_t *cur_context;
+  struct ctf_context *cur_context;
 
   /* Parent type.  */
   struct type *ptype;
@@ -125,33 +167,43 @@ struct ctf_field_info
   std::vector<struct decl_field> nested_types_list;
 };
 
+/* Data held for a translation unit.  */
 
-/* Local function prototypes */
+struct ctf_per_tu_data
+{
+  ctf_dict_t *fp;
+  struct objfile *of;
+  ctf_archive_t *arc;
+  psymtab_storage *pss;
+  psymbol_functions *psf;
+};
 
-static void psymtab_to_symtab (struct partial_symtab *);
+/* Local function prototypes */
 
 static int ctf_add_type_cb (ctf_id_t tid, void *arg);
 
-static struct type *read_array_type (ctf_context_t *ccp, ctf_id_t tid);
+static struct type *read_array_type (struct ctf_context *cp, ctf_id_t tid);
 
-static struct type *read_pointer_type (ctf_context_t *ccp, ctf_id_t tid,
+static struct type *read_pointer_type (struct ctf_context *cp, ctf_id_t tid,
 				       ctf_id_t btid);
 
-static struct type *read_structure_type (ctf_context_t *ccp, ctf_id_t tid);
+static struct type *read_structure_type (struct ctf_context *cp, ctf_id_t tid);
 
-static struct type *read_enum_type (ctf_context_t *ccp, ctf_id_t tid);
+static struct type *read_enum_type (struct ctf_context *cp, ctf_id_t tid);
 
-static struct type *read_typedef_type (ctf_context_t *ccp, ctf_id_t tid,
+static struct type *read_typedef_type (struct ctf_context *cp, ctf_id_t tid,
 				       ctf_id_t btid, const char *name);
 
-static struct type *read_type_record (ctf_context_t *ccp, ctf_id_t tid);
+static struct type *read_type_record (struct ctf_context *cp, ctf_id_t tid);
 
-static void process_structure_type (ctf_context_t *ccp, ctf_id_t tid);
+static void process_structure_type (struct ctf_context *cp, ctf_id_t tid);
 
-static void process_struct_members (ctf_context_t *ccp, ctf_id_t tid,
+static void process_struct_members (struct ctf_context *cp, ctf_id_t tid,
 				    struct type *type);
 
-static struct symbol *new_symbol (ctf_context_t *ccp, struct type *type,
+static struct type *read_forward_type (struct ctf_context *cp, ctf_id_t tid);
+
+static struct symbol *new_symbol (struct ctf_context *cp, struct type *type,
 				  ctf_id_t tid);
 
 struct ctf_tid_and_type
@@ -191,7 +243,7 @@ set_tid_type (struct objfile *of, ctf_id
 {
   htab_t htab;
 
-  htab = (htab_t) ctf_tid_key.get (of);
+  htab = ctf_tid_key.get (of);
   if (htab == NULL)
     {
       htab = htab_create_alloc (1, tid_and_type_hash,
@@ -204,10 +256,8 @@ set_tid_type (struct objfile *of, ctf_id
   ids.tid = tid;
   ids.type = typ;
   slot = (struct ctf_tid_and_type **) htab_find_slot (htab, &ids, INSERT);
-  if (*slot)
-    complaint (_("An internal GDB problem: ctf_ id_t %ld type already set"),
-	       (tid));
-  *slot = XOBNEW (&of->objfile_obstack, struct ctf_tid_and_type);
+  if (*slot == nullptr)
+    *slot = XOBNEW (&of->objfile_obstack, struct ctf_tid_and_type);
   **slot = ids;
   return typ;
 }
@@ -221,23 +271,42 @@ get_tid_type (struct objfile *of, ctf_id
   struct ctf_tid_and_type *slot, ids;
   htab_t htab;
 
-  htab = (htab_t) ctf_tid_key.get (of);
+  htab = ctf_tid_key.get (of);
   if (htab == NULL)
-    return NULL;
+    return nullptr;
 
   ids.tid = tid;
-  ids.type = NULL;
+  ids.type = nullptr;
   slot = (struct ctf_tid_and_type *) htab_find (htab, &ids);
   if (slot)
     return slot->type;
   else
-    return NULL;
+    return nullptr;
+}
+
+/* Fetch the type for TID in CCP OF's tid_and_type hash, add the type to
+ *    context CCP if hash is empty or TID does not have a saved type.  */
+
+static struct type *
+fetch_tid_type (struct ctf_context *ccp, ctf_id_t tid)
+{
+  struct objfile *of = ccp->of;
+  struct type *typ;
+
+  typ = get_tid_type (of, tid);
+  if (typ == nullptr)
+    {
+      ctf_add_type_cb (tid, ccp);
+      typ = get_tid_type (of, tid);
+    }
+
+  return typ;
 }
 
 /* Return the size of storage in bits for INTEGER, FLOAT, or ENUM.  */
 
 static int
-get_bitsize (ctf_file_t *fp, ctf_id_t tid, uint32_t kind)
+get_bitsize (ctf_dict_t *fp, ctf_id_t tid, uint32_t kind)
 {
   ctf_encoding_t cet;
 
@@ -257,12 +326,12 @@ set_symbol_address (struct objfile *of,
 {
   struct bound_minimal_symbol msym;
 
-  msym = lookup_minimal_symbol (name, NULL, of);
+  msym = lookup_minimal_symbol (name, nullptr, of);
   if (msym.minsym != NULL)
     {
-      SET_SYMBOL_VALUE_ADDRESS (sym, BMSYMBOL_VALUE_ADDRESS (msym));
-      SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
-      SYMBOL_SECTION (sym) = MSYMBOL_SECTION (msym.minsym);
+      sym->set_value_address (msym.value_address ());
+      sym->set_aclass_index (LOC_STATIC);
+      sym->set_section_index (msym.minsym->section_index ());
     }
 }
 
@@ -277,15 +346,13 @@ attach_fields_to_type (struct ctf_field_
     return;
 
   /* Record the field count, allocate space for the array of fields.  */
-  TYPE_NFIELDS (type) = nfields;
-  TYPE_FIELDS (type)
-    = (struct field *) TYPE_ZALLOC (type, sizeof (struct field) * nfields);
+  type->alloc_fields (nfields);
 
   /* Copy the saved-up fields into the field vector.  */
   for (int i = 0; i < nfields; ++i)
     {
       struct ctf_nextfield &field = fip->fields[i];
-      TYPE_FIELD (type, i) = field.field;
+      type->field (i) = field.field;
     }
 }
 
@@ -299,15 +366,16 @@ ctf_init_float_type (struct objfile *obj
 		     const char *name,
 		     const char *name_hint)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   const struct floatformat **format;
   struct type *type;
 
+  type_allocator alloc (objfile, language_c);
   format = gdbarch_floatformat_for_type (gdbarch, name_hint, bits);
-  if (format != NULL)
-    type = init_float_type (objfile, bits, name, format);
+  if (format != nullptr)
+    type = init_float_type (alloc, bits, name, format);
   else
-    type = init_type (objfile, TYPE_CODE_ERROR, bits, name);
+    type = alloc.new_type (TYPE_CODE_ERROR, bits, name);
 
   return type;
 }
@@ -323,24 +391,24 @@ ctf_add_member_cb (const char *name,
 		   void *arg)
 {
   struct ctf_field_info *fip = (struct ctf_field_info *) arg;
-  ctf_context_t *ccp = fip->cur_context;
+  struct ctf_context *ccp = fip->cur_context;
   struct ctf_nextfield new_field;
   struct field *fp;
   struct type *t;
   uint32_t kind;
 
   fp = &new_field.field;
-  FIELD_NAME (*fp) = name;
+  fp->set_name (name);
 
   kind = ctf_type_kind (ccp->fp, tid);
-  t = get_tid_type (ccp->of, tid);
-  if (t == NULL)
+  t = fetch_tid_type (ccp, tid);
+  if (t == nullptr)
     {
       t = read_type_record (ccp, tid);
-      if (t == NULL)
+      if (t == nullptr)
 	{
 	  complaint (_("ctf_add_member_cb: %s has NO type (%ld)"), name, tid);
-	  t = objfile_type (ccp->of)->builtin_error;
+	  t = builtin_type (ccp->of)->builtin_error;
 	  set_tid_type (ccp->of, tid, t);
 	}
     }
@@ -348,9 +416,9 @@ ctf_add_member_cb (const char *name,
   if (kind == CTF_K_STRUCT || kind == CTF_K_UNION)
     process_struct_members (ccp, tid, t);
 
-  FIELD_TYPE (*fp) = t;
-  SET_FIELD_BITPOS (*fp, offset / TARGET_CHAR_BIT);
-  FIELD_BITSIZE (*fp) = get_bitsize (ccp->fp, tid, kind);
+  fp->set_type (t);
+  fp->set_loc_bitpos (offset / TARGET_CHAR_BIT);
+  fp->set_bitsize (get_bitsize (ccp->fp, tid, kind));
 
   fip->fields.emplace_back (new_field);
 
@@ -366,24 +434,24 @@ ctf_add_enum_member_cb (const char *name
   struct ctf_field_info *fip = (struct ctf_field_info *) arg;
   struct ctf_nextfield new_field;
   struct field *fp;
-  ctf_context_t *ccp = fip->cur_context;
+  struct ctf_context *ccp = fip->cur_context;
 
   fp = &new_field.field;
-  FIELD_NAME (*fp) = name;
-  FIELD_TYPE (*fp) = NULL;
-  SET_FIELD_ENUMVAL (*fp, enum_value);
-  FIELD_BITSIZE (*fp) = 0;
+  fp->set_name (name);
+  fp->set_type (nullptr);
+  fp->set_loc_enumval (enum_value);
+  fp->set_bitsize (0);
 
-  if (name != NULL)
+  if (name != nullptr)
     {
-      struct symbol *sym = allocate_symbol (ccp->of);
+      struct symbol *sym = new (&ccp->of->objfile_obstack) symbol;
       OBJSTAT (ccp->of, n_syms++);
 
-      SYMBOL_SET_LANGUAGE (sym, language_c, &ccp->of->objfile_obstack);
-      SYMBOL_SET_NAMES (sym, name, false, ccp->of);
-      SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
-      SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      SYMBOL_TYPE (sym) = fip->ptype;
+      sym->set_language (language_c, &ccp->of->objfile_obstack);
+      sym->compute_and_set_names (name, false, ccp->of->per_bfd);
+      sym->set_aclass_index (LOC_CONST);
+      sym->set_domain (VAR_DOMAIN);
+      sym->set_type (fip->ptype);
       add_symbol_to_list (sym, ccp->builder->get_global_symbols ());
     }
 
@@ -396,25 +464,25 @@ ctf_add_enum_member_cb (const char *name
    domain from TID's kind, and its type from TYPE.  */
 
 static struct symbol *
-new_symbol (ctf_context_t *ccp, struct type *type, ctf_id_t tid)
+new_symbol (struct ctf_context *ccp, struct type *type, ctf_id_t tid)
 {
   struct objfile *objfile = ccp->of;
-  ctf_file_t *fp = ccp->fp;
-  struct symbol *sym = NULL;
+  ctf_dict_t *fp = ccp->fp;
+  struct symbol *sym = nullptr;
 
-  gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (fp, tid));
-  if (name != NULL)
+  const char *name = ctf_type_name_raw (fp, tid);
+  if (name != nullptr)
     {
-      sym = allocate_symbol (objfile);
+      sym = new (&objfile->objfile_obstack) symbol;
       OBJSTAT (objfile, n_syms++);
 
-      SYMBOL_SET_LANGUAGE (sym, language_c, &objfile->objfile_obstack);
-      SYMBOL_SET_NAMES (sym, name.get (), true, objfile);
-      SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
+      sym->set_language (language_c, &objfile->objfile_obstack);
+      sym->compute_and_set_names (name, false, objfile->per_bfd);
+      sym->set_domain (VAR_DOMAIN);
+      sym->set_aclass_index (LOC_OPTIMIZED_OUT);
 
-      if (type != NULL)
-	SYMBOL_TYPE (sym) = type;
+      if (type != nullptr)
+	sym->set_type (type);
 
       uint32_t kind = ctf_type_kind (fp, tid);
       switch (kind)
@@ -422,21 +490,22 @@ new_symbol (ctf_context_t *ccp, struct t
 	  case CTF_K_STRUCT:
 	  case CTF_K_UNION:
 	  case CTF_K_ENUM:
-	    SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-	    SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
+	    sym->set_aclass_index (LOC_TYPEDEF);
+	    sym->set_domain (STRUCT_DOMAIN);
 	    break;
 	  case CTF_K_FUNCTION:
-	    SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
+	    sym->set_aclass_index (LOC_STATIC);
+	    set_symbol_address (objfile, sym, sym->linkage_name ());
 	    break;
 	  case CTF_K_CONST:
-	    if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_VOID)
-	      SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_int;
+	    if (sym->type ()->code () == TYPE_CODE_VOID)
+	      sym->set_type (builtin_type (objfile)->builtin_int);
 	    break;
 	  case CTF_K_TYPEDEF:
 	  case CTF_K_INTEGER:
 	  case CTF_K_FLOAT:
-	    SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-	    SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+	    sym->set_aclass_index (LOC_TYPEDEF);
+	    sym->set_domain (TYPE_DOMAIN);
 	    break;
 	  case CTF_K_POINTER:
 	    break;
@@ -449,7 +518,7 @@ new_symbol (ctf_context_t *ccp, struct t
 	    break;
 	}
 
-      add_symbol_to_list (sym, ccp->builder->get_global_symbols ());
+      add_symbol_to_list (sym, ccp->builder->get_file_symbols ());
     }
 
   return sym;
@@ -459,46 +528,45 @@ new_symbol (ctf_context_t *ccp, struct t
    and create the symbol for it.  */
 
 static struct type *
-read_base_type (ctf_context_t *ccp, ctf_id_t tid)
+read_base_type (struct ctf_context *ccp, ctf_id_t tid)
 {
   struct objfile *of = ccp->of;
-  ctf_file_t *fp = ccp->fp;
+  ctf_dict_t *fp = ccp->fp;
   ctf_encoding_t cet;
-  struct type *type = NULL;
-  char *name;
+  struct type *type = nullptr;
+  const char *name;
   uint32_t kind;
 
   if (ctf_type_encoding (fp, tid, &cet))
     {
       complaint (_("ctf_type_encoding read_base_type failed - %s"),
 		 ctf_errmsg (ctf_errno (fp)));
-      return NULL;
+      return nullptr;
     }
 
-  gdb::unique_xmalloc_ptr<char> copied_name (ctf_type_aname_raw (fp, tid));
-  if (copied_name == NULL || strlen (copied_name.get ()) == 0)
+  name = ctf_type_name_raw (fp, tid);
+  if (name == nullptr || strlen (name) == 0)
     {
       name = ctf_type_aname (fp, tid);
-      if (name == NULL)
+      if (name == nullptr)
 	complaint (_("ctf_type_aname read_base_type failed - %s"),
 		   ctf_errmsg (ctf_errno (fp)));
     }
-  else
-    name = obstack_strdup (&of->objfile_obstack, copied_name.get ());
 
+  type_allocator alloc (of, language_c);
   kind = ctf_type_kind (fp, tid);
   if (kind == CTF_K_INTEGER)
     {
       uint32_t issigned, ischar, isbool;
-      struct gdbarch *gdbarch = get_objfile_arch (of);
+      struct gdbarch *gdbarch = of->arch ();
 
       issigned = cet.cte_format & CTF_INT_SIGNED;
       ischar = cet.cte_format & CTF_INT_CHAR;
       isbool = cet.cte_format & CTF_INT_BOOL;
       if (ischar)
-	type = init_character_type (of, TARGET_CHAR_BIT, !issigned, name);
+	type = init_character_type (alloc, TARGET_CHAR_BIT, !issigned, name);
       else if (isbool)
-	type = init_boolean_type (of, gdbarch_int_bit (gdbarch),
+	type = init_boolean_type (alloc, gdbarch_int_bit (gdbarch),
 				  !issigned, name);
       else
 	{
@@ -507,7 +575,7 @@ read_base_type (ctf_context_t *ccp, ctf_
 	    bits = cet.cte_bits;
 	  else
 	    bits = gdbarch_int_bit (gdbarch);
-	  type = init_integer_type (of, bits, !issigned, name);
+	  type = init_integer_type (alloc, bits, !issigned, name);
 	}
     }
   else if (kind == CTF_K_FLOAT)
@@ -522,23 +590,23 @@ read_base_type (ctf_context_t *ccp, ctf_
 	{
 	  struct type *t
 	    = ctf_init_float_type (of, cet.cte_bits / 2, NULL, name);
-	  type = init_complex_type (of, name, t);
+	  type = init_complex_type (name, t);
 	}
     }
   else
     {
       complaint (_("read_base_type: unsupported base kind (%d)"), kind);
-      type = init_type (of, TYPE_CODE_ERROR, cet.cte_bits, name);
+      type = alloc.new_type (TYPE_CODE_ERROR, cet.cte_bits, name);
     }
 
-  if (name != NULL && strcmp (name, "char") == 0)
-    TYPE_NOSIGN (type) = 1;
+  if (name != nullptr && strcmp (name, "char") == 0)
+    type->set_has_no_signedness (true);
 
   return set_tid_type (of, tid, type);
 }
 
 static void
-process_base_type (ctf_context_t *ccp, ctf_id_t tid)
+process_base_type (struct ctf_context *ccp, ctf_id_t tid)
 {
   struct type *type;
 
@@ -554,26 +622,26 @@ process_base_type (ctf_context_t *ccp, c
    (assuming the type has a name).  */
 
 static struct type *
-read_structure_type (ctf_context_t *ccp, ctf_id_t tid)
+read_structure_type (struct ctf_context *ccp, ctf_id_t tid)
 {
   struct objfile *of = ccp->of;
-  ctf_file_t *fp = ccp->fp;
+  ctf_dict_t *fp = ccp->fp;
   struct type *type;
   uint32_t kind;
 
-  type = alloc_type (of);
+  type = type_allocator (of, language_c).new_type ();
 
-  gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (fp, tid));
-  if (name != NULL && strlen (name.get() ) != 0)
-    TYPE_NAME (type) = obstack_strdup (&of->objfile_obstack, name.get ());
+  const char *name = ctf_type_name_raw (fp, tid);
+  if (name != nullptr && strlen (name) != 0)
+    type->set_name (name);
 
   kind = ctf_type_kind (fp, tid);
   if (kind == CTF_K_UNION)
-    TYPE_CODE (type) = TYPE_CODE_UNION;
+    type->set_code (TYPE_CODE_UNION);
   else
-    TYPE_CODE (type) = TYPE_CODE_STRUCT;
+    type->set_code (TYPE_CODE_STRUCT);
 
-  TYPE_LENGTH (type) = ctf_type_size (fp, tid);
+  type->set_length (ctf_type_size (fp, tid));
   set_type_align (type, ctf_type_align (fp, tid));
 
   return set_tid_type (ccp->of, tid, type);
@@ -583,7 +651,7 @@ read_structure_type (ctf_context_t *ccp,
    and create the symbol for it.  */
 
 static void
-process_struct_members (ctf_context_t *ccp,
+process_struct_members (struct ctf_context *ccp,
 			ctf_id_t tid,
 			struct type *type)
 {
@@ -601,7 +669,7 @@ process_struct_members (ctf_context_t *c
 }
 
 static void
-process_structure_type (ctf_context_t *ccp, ctf_id_t tid)
+process_structure_type (struct ctf_context *ccp, ctf_id_t tid)
 {
   struct type *type;
 
@@ -612,25 +680,52 @@ process_structure_type (ctf_context_t *c
 /* Create a function type for TID and set its return type.  */
 
 static struct type *
-read_func_kind_type (ctf_context_t *ccp, ctf_id_t tid)
+read_func_kind_type (struct ctf_context *ccp, ctf_id_t tid)
 {
   struct objfile *of = ccp->of;
-  ctf_file_t *fp = ccp->fp;
-  struct type *type, *rettype;
+  ctf_dict_t *fp = ccp->fp;
+  struct type *type, *rettype, *atype;
   ctf_funcinfo_t cfi;
+  uint32_t argc;
 
-  type = alloc_type (of);
+  type = type_allocator (of, language_c).new_type ();
 
-  gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (fp, tid));
-  if (name != NULL && strlen (name.get ()) != 0)
-    TYPE_NAME (type) = obstack_strdup (&of->objfile_obstack, name.get ());
-
-  TYPE_CODE (type) = TYPE_CODE_FUNC;
-  ctf_func_type_info (fp, tid, &cfi);
-  rettype = get_tid_type (of, cfi.ctc_return);
-  TYPE_TARGET_TYPE (type) = rettype;
+  type->set_code (TYPE_CODE_FUNC);
+  if (ctf_func_type_info (fp, tid, &cfi) < 0)
+    {
+      const char *fname = ctf_type_name_raw (fp, tid);
+      error (_("Error getting function type info: %s"),
+	     fname == nullptr ? "noname" : fname);
+    }
+  rettype = fetch_tid_type (ccp, cfi.ctc_return);
+  type->set_target_type (rettype);
   set_type_align (type, ctf_type_align (fp, tid));
 
+  /* Set up function's arguments.  */
+  argc = cfi.ctc_argc;
+  type->set_num_fields (argc);
+  if ((cfi.ctc_flags & CTF_FUNC_VARARG) != 0)
+    type->set_has_varargs (true);
+
+  if (argc != 0)
+    {
+      std::vector<ctf_id_t> argv (argc);
+      if (ctf_func_type_args (fp, tid, argc, argv.data ()) == CTF_ERR)
+	return nullptr;
+
+      type->alloc_fields (argc);
+      struct type *void_type = builtin_type (of)->builtin_void;
+      /* If failed to find the argument type, fill it with void_type.  */
+      for (int iparam = 0; iparam < argc; iparam++)
+	{
+	  atype = fetch_tid_type (ccp, argv[iparam]);
+	  if (atype != nullptr)
+	    type->field (iparam).set_type (atype);
+	  else
+	    type->field (iparam).set_type (void_type);
+	}
+    }
+
   return set_tid_type (of, tid, type);
 }
 
@@ -638,31 +733,29 @@ read_func_kind_type (ctf_context_t *ccp,
    enumeration, and create the symbol for the enumeration type.  */
 
 static struct type *
-read_enum_type (ctf_context_t *ccp, ctf_id_t tid)
+read_enum_type (struct ctf_context *ccp, ctf_id_t tid)
 {
   struct objfile *of = ccp->of;
-  ctf_file_t *fp = ccp->fp;
-  struct type *type, *target_type;
-  ctf_funcinfo_t fi;
-
-  type = alloc_type (of);
-
-  gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (fp, tid));
-  if (name != NULL && strlen (name.get ()) != 0)
-    TYPE_NAME (type) = obstack_strdup (&of->objfile_obstack, name.get ());
-
-  TYPE_CODE (type) = TYPE_CODE_ENUM;
-  TYPE_LENGTH (type) = ctf_type_size (fp, tid);
-  ctf_func_type_info (fp, tid, &fi);
-  target_type = get_tid_type (of, fi.ctc_return);
-  TYPE_TARGET_TYPE (type) = target_type;
+  ctf_dict_t *fp = ccp->fp;
+  struct type *type;
+
+  type = type_allocator (of, language_c).new_type ();
+
+  const char *name = ctf_type_name_raw (fp, tid);
+  if (name != nullptr && strlen (name) != 0)
+    type->set_name (name);
+
+  type->set_code (TYPE_CODE_ENUM);
+  type->set_length (ctf_type_size (fp, tid));
+  /* Set the underlying type based on its ctf_type_size bits.  */
+  type->set_target_type (objfile_int_type (of, type->length (), false));
   set_type_align (type, ctf_type_align (fp, tid));
 
   return set_tid_type (of, tid, type);
 }
 
 static void
-process_enum_type (ctf_context_t *ccp, ctf_id_t tid)
+process_enum_type (struct ctf_context *ccp, ctf_id_t tid)
 {
   struct type *type;
   struct ctf_field_info fi;
@@ -684,7 +777,7 @@ process_enum_type (ctf_context_t *ccp, c
 /* Add given cv-qualifiers CNST+VOLTL to the BASE_TYPE of array TID.  */
 
 static struct type *
-add_array_cv_type (ctf_context_t *ccp,
+add_array_cv_type (struct ctf_context *ccp,
 		   ctf_id_t tid,
 		   struct type *base_type,
 		   int cnst,
@@ -695,17 +788,16 @@ add_array_cv_type (ctf_context_t *ccp,
   base_type = copy_type (base_type);
   inner_array = base_type;
 
-  while (TYPE_CODE (TYPE_TARGET_TYPE (inner_array)) == TYPE_CODE_ARRAY)
+  while (inner_array->target_type ()->code () == TYPE_CODE_ARRAY)
     {
-      TYPE_TARGET_TYPE (inner_array)
-	= copy_type (TYPE_TARGET_TYPE (inner_array));
-      inner_array = TYPE_TARGET_TYPE (inner_array);
+      inner_array->set_target_type (copy_type (inner_array->target_type ()));
+      inner_array = inner_array->target_type ();
     }
 
-  el_type = TYPE_TARGET_TYPE (inner_array);
+  el_type = inner_array->target_type ();
   cnst |= TYPE_CONST (el_type);
   voltl |= TYPE_VOLATILE (el_type);
-  TYPE_TARGET_TYPE (inner_array) = make_cv_type (cnst, voltl, el_type, NULL);
+  inner_array->set_target_type (make_cv_type (cnst, voltl, el_type, nullptr));
 
   return set_tid_type (ccp->of, tid, base_type);
 }
@@ -713,10 +805,10 @@ add_array_cv_type (ctf_context_t *ccp,
 /* Read all information from a TID of CTF_K_ARRAY.  */
 
 static struct type *
-read_array_type (ctf_context_t *ccp, ctf_id_t tid)
+read_array_type (struct ctf_context *ccp, ctf_id_t tid)
 {
   struct objfile *objfile = ccp->of;
-  ctf_file_t *fp = ccp->fp;
+  ctf_dict_t *fp = ccp->fp;
   struct type *element_type, *range_type, *idx_type;
   struct type *type;
   ctf_arinfo_t ar;
@@ -725,27 +817,28 @@ read_array_type (ctf_context_t *ccp, ctf
     {
       complaint (_("ctf_array_info read_array_type failed - %s"),
 		 ctf_errmsg (ctf_errno (fp)));
-      return NULL;
+      return nullptr;
     }
 
-  element_type = get_tid_type (objfile, ar.ctr_contents);
-  if (element_type == NULL)
-    return NULL;
+  element_type = fetch_tid_type (ccp, ar.ctr_contents);
+  if (element_type == nullptr)
+    return nullptr;
 
-  idx_type = get_tid_type (objfile, ar.ctr_index);
-  if (idx_type == NULL)
-    idx_type = objfile_type (objfile)->builtin_int;
+  idx_type = fetch_tid_type (ccp, ar.ctr_index);
+  if (idx_type == nullptr)
+    idx_type = builtin_type (objfile)->builtin_int;
 
-  range_type = create_static_range_type (NULL, idx_type, 0, ar.ctr_nelems - 1);
-  type = create_array_type (NULL, element_type, range_type);
+  type_allocator alloc (objfile, language_c);
+  range_type = create_static_range_type (alloc, idx_type, 0, ar.ctr_nelems - 1);
+  type = create_array_type (alloc, element_type, range_type);
   if (ar.ctr_nelems <= 1)	/* Check if undefined upper bound.  */
     {
-      TYPE_HIGH_BOUND_KIND (range_type) = PROP_UNDEFINED;
-      TYPE_LENGTH (type) = 0;
-      TYPE_TARGET_STUB (type) = 1;
+      range_type->bounds ()->high.set_undefined ();
+      type->set_length (0);
+      type->set_target_is_stub (true);
     }
   else
-    TYPE_LENGTH (type) = ctf_type_size (fp, tid);
+    type->set_length (ctf_type_size (fp, tid));
 
   set_type_align (type, ctf_type_align (fp, tid));
 
@@ -755,19 +848,19 @@ read_array_type (ctf_context_t *ccp, ctf
 /* Read TID of kind CTF_K_CONST with base type BTID.  */
 
 static struct type *
-read_const_type (ctf_context_t *ccp, ctf_id_t tid, ctf_id_t btid)
+read_const_type (struct ctf_context *ccp, ctf_id_t tid, ctf_id_t btid)
 {
   struct objfile *objfile = ccp->of;
   struct type *base_type, *cv_type;
 
-  base_type = get_tid_type (objfile, btid);
-  if (base_type == NULL)
+  base_type = fetch_tid_type (ccp, btid);
+  if (base_type == nullptr)
     {
       base_type = read_type_record (ccp, btid);
-      if (base_type == NULL)
+      if (base_type == nullptr)
 	{
 	  complaint (_("read_const_type: NULL base type (%ld)"), btid);
-	  base_type = objfile_type (objfile)->builtin_error;
+	  base_type = builtin_type (objfile)->builtin_error;
 	}
     }
   cv_type = make_cv_type (1, TYPE_VOLATILE (base_type), base_type, 0);
@@ -778,20 +871,20 @@ read_const_type (ctf_context_t *ccp, ctf
 /* Read TID of kind CTF_K_VOLATILE with base type BTID.  */
 
 static struct type *
-read_volatile_type (ctf_context_t *ccp, ctf_id_t tid, ctf_id_t btid)
+read_volatile_type (struct ctf_context *ccp, ctf_id_t tid, ctf_id_t btid)
 {
   struct objfile *objfile = ccp->of;
-  ctf_file_t *fp = ccp->fp;
+  ctf_dict_t *fp = ccp->fp;
   struct type *base_type, *cv_type;
 
-  base_type = get_tid_type (objfile, btid);
-  if (base_type == NULL)
+  base_type = fetch_tid_type (ccp, btid);
+  if (base_type == nullptr)
     {
       base_type = read_type_record (ccp, btid);
-      if (base_type == NULL)
+      if (base_type == nullptr)
 	{
 	  complaint (_("read_volatile_type: NULL base type (%ld)"), btid);
-	  base_type = objfile_type (objfile)->builtin_error;
+	  base_type = builtin_type (objfile)->builtin_error;
 	}
     }
 
@@ -805,19 +898,19 @@ read_volatile_type (ctf_context_t *ccp,
 /* Read TID of kind CTF_K_RESTRICT with base type BTID.  */
 
 static struct type *
-read_restrict_type (ctf_context_t *ccp, ctf_id_t tid, ctf_id_t btid)
+read_restrict_type (struct ctf_context *ccp, ctf_id_t tid, ctf_id_t btid)
 {
   struct objfile *objfile = ccp->of;
   struct type *base_type, *cv_type;
 
-  base_type = get_tid_type (objfile, btid);
-  if (base_type == NULL)
+  base_type = fetch_tid_type (ccp, btid);
+  if (base_type == nullptr)
     {
       base_type = read_type_record (ccp, btid);
-      if (base_type == NULL)
+      if (base_type == nullptr)
 	{
 	  complaint (_("read_restrict_type: NULL base type (%ld)"), btid);
-	  base_type = objfile_type (objfile)->builtin_error;
+	  base_type = builtin_type (objfile)->builtin_error;
 	}
     }
   cv_type = make_restrict_type (base_type);
@@ -828,21 +921,23 @@ read_restrict_type (ctf_context_t *ccp,
 /* Read TID of kind CTF_K_TYPEDEF with its NAME and base type BTID.  */
 
 static struct type *
-read_typedef_type (ctf_context_t *ccp, ctf_id_t tid,
+read_typedef_type (struct ctf_context *ccp, ctf_id_t tid,
 		   ctf_id_t btid, const char *name)
 {
   struct objfile *objfile = ccp->of;
   struct type *this_type, *target_type;
 
   char *aname = obstack_strdup (&objfile->objfile_obstack, name);
-  this_type = init_type (objfile, TYPE_CODE_TYPEDEF, 0, aname);
+  this_type = type_allocator (objfile, language_c).new_type (TYPE_CODE_TYPEDEF,
+							     0, aname);
   set_tid_type (objfile, tid, this_type);
-  target_type = get_tid_type (objfile, btid);
+  target_type = fetch_tid_type (ccp, btid);
   if (target_type != this_type)
-    TYPE_TARGET_TYPE (this_type) = target_type;
+    this_type->set_target_type (target_type);
   else
-    TYPE_TARGET_TYPE (this_type) = NULL;
-  TYPE_TARGET_STUB (this_type) = TYPE_TARGET_TYPE (this_type) ? 1 : 0;
+    this_type->set_target_type (nullptr);
+
+  this_type->set_target_is_stub (this_type->target_type () != nullptr);
 
   return set_tid_type (objfile, tid, this_type);
 }
@@ -850,19 +945,19 @@ read_typedef_type (ctf_context_t *ccp, c
 /* Read TID of kind CTF_K_POINTER with base type BTID.  */
 
 static struct type *
-read_pointer_type (ctf_context_t *ccp, ctf_id_t tid, ctf_id_t btid)
+read_pointer_type (struct ctf_context *ccp, ctf_id_t tid, ctf_id_t btid)
 {
   struct objfile *of = ccp->of;
   struct type *target_type, *type;
 
-  target_type = get_tid_type (of, btid);
-  if (target_type == NULL)
+  target_type = fetch_tid_type (ccp, btid);
+  if (target_type == nullptr)
     {
       target_type = read_type_record (ccp, btid);
-      if (target_type == NULL)
+      if (target_type == nullptr)
 	{
 	  complaint (_("read_pointer_type: NULL target type (%ld)"), btid);
-	  target_type = objfile_type (ccp->of)->builtin_error;
+	  target_type = builtin_type (ccp->of)->builtin_error;
 	}
     }
 
@@ -872,14 +967,42 @@ read_pointer_type (ctf_context_t *ccp, c
   return set_tid_type (of, tid, type);
 }
 
+/* Read information from a TID of CTF_K_FORWARD.  */
+
+static struct type *
+read_forward_type (struct ctf_context *ccp, ctf_id_t tid)
+{
+  struct objfile *of = ccp->of;
+  ctf_dict_t *fp = ccp->fp;
+  struct type *type;
+  uint32_t kind;
+
+  type = type_allocator (of, language_c).new_type ();
+
+  const char *name = ctf_type_name_raw (fp, tid);
+  if (name != nullptr && strlen (name) != 0)
+    type->set_name (name);
+
+  kind = ctf_type_kind_forwarded (fp, tid);
+  if (kind == CTF_K_UNION)
+    type->set_code (TYPE_CODE_UNION);
+  else
+    type->set_code (TYPE_CODE_STRUCT);
+
+  type->set_length (0);
+  type->set_is_stub (true);
+
+  return set_tid_type (of, tid, type);
+}
+
 /* Read information associated with type TID.  */
 
 static struct type *
-read_type_record (ctf_context_t *ccp, ctf_id_t tid)
+read_type_record (struct ctf_context *ccp, ctf_id_t tid)
 {
-  ctf_file_t *fp = ccp->fp;
+  ctf_dict_t *fp = ccp->fp;
   uint32_t kind;
-  struct type *type = NULL;
+  struct type *type = nullptr;
   ctf_id_t btid;
 
   kind = ctf_type_kind (fp, tid);
@@ -901,9 +1024,9 @@ read_type_record (ctf_context_t *ccp, ct
 	break;
       case CTF_K_TYPEDEF:
 	{
-	  gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (fp, tid));
+	  const char *name = ctf_type_name_raw (fp, tid);
 	  btid = ctf_type_reference (fp, tid);
-	  type = read_typedef_type (ccp, tid, btid, name.get ());
+	  type = read_typedef_type (ccp, tid, btid, name);
 	}
 	break;
       case CTF_K_VOLATILE:
@@ -925,6 +1048,9 @@ read_type_record (ctf_context_t *ccp, ct
       case CTF_K_ARRAY:
 	type = read_array_type (ccp, tid);
 	break;
+      case CTF_K_FORWARD:
+	type = read_forward_type (ccp, tid);
+	break;
       case CTF_K_UNKNOWN:
 	break;
       default:
@@ -939,13 +1065,13 @@ read_type_record (ctf_context_t *ccp, ct
 static int
 ctf_add_type_cb (ctf_id_t tid, void *arg)
 {
-  ctf_context_t *ccp = (ctf_context_t *) arg;
+  struct ctf_context *ccp = (struct ctf_context *) arg;
   struct type *type;
   uint32_t kind;
 
   /* Check if tid's type has already been defined.  */
   type = get_tid_type (ccp->of, tid);
-  if (type != NULL)
+  if (type != nullptr)
     return 0;
 
   ctf_id_t btid = ctf_type_reference (ccp->fp, tid);
@@ -1004,8 +1130,8 @@ ctf_add_type_cb (ctf_id_t tid, void *arg
 static int
 ctf_add_var_cb (const char *name, ctf_id_t id, void *arg)
 {
-  ctf_context_t *ccp = (ctf_context_t *) arg;
-  struct symbol *sym = NULL;
+  struct ctf_context *ccp = (struct ctf_context *) arg;
+  struct symbol *sym = nullptr;
   struct type *type;
   uint32_t kind;
 
@@ -1015,7 +1141,7 @@ ctf_add_var_cb (const char *name, ctf_id
   switch (kind)
     {
       case CTF_K_FUNCTION:
-	if (name && !strcmp(name, "main"))
+	if (name != nullptr && strcmp (name, "main") == 0)
 	  set_objfile_main_name (ccp->of, name, language_c);
 	break;
       case CTF_K_INTEGER:
@@ -1026,184 +1152,222 @@ ctf_add_var_cb (const char *name, ctf_id
       case CTF_K_CONST:
       case CTF_K_POINTER:
       case CTF_K_ARRAY:
-	if (type)
+	if (type != nullptr)
 	  {
 	    sym = new_symbol (ccp, type, id);
-	    SYMBOL_SET_NAMES (sym, name, false, ccp->of);
+	    if (sym != nullptr)
+	      sym->compute_and_set_names (name, false, ccp->of->per_bfd);
 	  }
 	break;
       case CTF_K_STRUCT:
       case CTF_K_UNION:
       case CTF_K_ENUM:
-	if (type == NULL)
-	{
-	  complaint (_("ctf_add_var_cb: %s has NO type (%ld)"), name, id);
-	  type = objfile_type (ccp->of)->builtin_error;
-	}
-	sym = allocate_symbol (ccp->of);
+	if (type == nullptr)
+	  {
+	    complaint (_("ctf_add_var_cb: %s has NO type (%ld)"), name, id);
+	    type = builtin_type (ccp->of)->builtin_error;
+	  }
+	sym = new (&ccp->of->objfile_obstack) symbol;
 	OBJSTAT (ccp->of, n_syms++);
-	SYMBOL_TYPE (sym) = type;
-	SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-	SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
-	SYMBOL_SET_NAMES (sym, name, false, ccp->of);
-	add_symbol_to_list (sym, ccp->builder->get_global_symbols ());
+	sym->set_type (type);
+	sym->set_domain (VAR_DOMAIN);
+	sym->set_aclass_index (LOC_OPTIMIZED_OUT);
+	sym->compute_and_set_names (name, false, ccp->of->per_bfd);
+	add_symbol_to_list (sym, ccp->builder->get_file_symbols ());
 	break;
       default:
 	complaint (_("ctf_add_var_cb: kind unsupported (%d)"), kind);
 	break;
     }
 
-  if (sym)
+  if (sym != nullptr)
     set_symbol_address (ccp->of, sym, name);
 
   return 0;
 }
 
-/* Add an ELF STT_OBJ symbol with index IDX to the symbol table.  */
+/* Add entries in either data objects or function info section, controlled
+   by FUNCTIONS.  */
 
-static struct symbol *
-add_stt_obj (ctf_context_t *ccp, unsigned long idx)
+static void
+add_stt_entries (struct ctf_context *ccp, int functions)
 {
-  struct symbol *sym;
-  struct type *type;
+  ctf_next_t *i = nullptr;
+  const char *tname;
   ctf_id_t tid;
+  struct symbol *sym = nullptr;
+  struct type *type;
 
-  if ((tid = ctf_lookup_by_symbol (ccp->fp, idx)) == CTF_ERR)
-    return NULL;
-
-  type = get_tid_type (ccp->of, tid);
-  if (type == NULL)
-    return NULL;
-
-  sym = new_symbol (ccp, type, tid);
-
-  return sym;
+  while ((tid = ctf_symbol_next (ccp->fp, &i, &tname, functions)) != CTF_ERR)
+    {
+      type = get_tid_type (ccp->of, tid);
+      if (type == nullptr)
+	continue;
+      sym = new (&ccp->of->objfile_obstack) symbol;
+      OBJSTAT (ccp->of, n_syms++);
+      sym->set_type (type);
+      sym->set_domain (VAR_DOMAIN);
+      sym->set_aclass_index (LOC_STATIC);
+      sym->compute_and_set_names (tname, false, ccp->of->per_bfd);
+      add_symbol_to_list (sym, ccp->builder->get_global_symbols ());
+      set_symbol_address (ccp->of, sym, tname);
+    }
 }
 
-/* Add an ELF STT_FUNC symbol with index IDX to the symbol table.  */
+/* Add entries in data objects section.  */
 
-static struct symbol *
-add_stt_func (ctf_context_t *ccp, unsigned long idx)
+static void
+add_stt_obj (struct ctf_context *ccp)
 {
-  struct type *ftype, *atyp, *rettyp;
-  struct symbol *sym;
-  ctf_funcinfo_t finfo;
-  ctf_id_t argv[32];
-  uint32_t argc;
-  ctf_id_t tid;
-  struct type *void_type = objfile_type (ccp->of)->builtin_void;
-
-  if (ctf_func_info (ccp->fp, idx, &finfo) == CTF_ERR)
-    return NULL;
-
-  argc = finfo.ctc_argc;
-  if (ctf_func_args (ccp->fp, idx, argc, argv) == CTF_ERR)
-    return NULL;
-
-  gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (ccp->fp, idx));
-  if (name == NULL)
-    return NULL;
-
-  tid = ctf_lookup_by_symbol (ccp->fp, idx);
-  ftype = get_tid_type (ccp->of, tid);
-  if (finfo.ctc_flags & CTF_FUNC_VARARG)
-    TYPE_VARARGS (ftype) = 1;
-  TYPE_NFIELDS (ftype) = argc;
-
-  /* If argc is 0, it has a "void" type.  */
-  if (argc != 0)
-    TYPE_FIELDS (ftype)
-      = (struct field *) TYPE_ZALLOC (ftype, argc * sizeof (struct field));
-
-  /* TYPE_FIELD_TYPE must never be NULL.  Fill it with void_type, if failed
-     to find the argument type.  */
-  for (int iparam = 0; iparam < argc; iparam++)
-    {
-      atyp = get_tid_type (ccp->of, argv[iparam]);
-      if (atyp)
-	TYPE_FIELD_TYPE (ftype, iparam) = atyp;
-      else
-	TYPE_FIELD_TYPE (ftype, iparam) = void_type;
-    }
+  add_stt_entries (ccp, 0);
+}
 
-  sym = new_symbol (ccp, ftype, tid);
-  rettyp = get_tid_type (ccp->of, finfo.ctc_return);
-  if (rettyp != NULL)
-    SYMBOL_TYPE (sym) = rettyp;
-  else
-    SYMBOL_TYPE (sym) = void_type;
+/* Add entries in function info section.  */
 
-  return sym;
+static void
+add_stt_func (struct ctf_context *ccp)
+{
+  add_stt_entries (ccp, 1);
 }
 
-/* Get text segment base for OBJFILE, TSIZE contains the segment size.  */
+/* Get text section base for OBJFILE, TSIZE contains the size.  */
 
 static CORE_ADDR
-get_objfile_text_range (struct objfile *of, int *tsize)
+get_objfile_text_range (struct objfile *of, size_t *tsize)
 {
-  CORE_ADDR text_base;
-  bfd *abfd = of->obfd;
+  bfd *abfd = of->obfd.get ();
   const asection *codes;
 
   codes = bfd_get_section_by_name (abfd, ".text");
-  if (codes == NULL)
-    {
-      text_base = 0;
-      *tsize = 0;
-    }
-  else
-    {
-      text_base = bfd_section_vma (codes);
-      *tsize = codes->size;
-    }
-
-  return text_base;
+  *tsize = codes ? bfd_section_size (codes) : 0;
+  return of->text_section_offset ();
 }
 
 /* Start a symtab for OBJFILE in CTF format.  */
 
 static void
-ctf_start_symtab (struct partial_symtab *pst,
-		  struct objfile *of, CORE_ADDR text_offset)
+ctf_start_compunit_symtab (ctf_psymtab *pst,
+			   struct objfile *of, CORE_ADDR text_offset)
 {
-  ctf_context_t *ccp;
+  struct ctf_context *ccp;
 
-  ccp = (ctf_context_t *) pst->read_symtab_private;
+  ccp = &pst->context;
   ccp->builder = new buildsym_compunit
-		       (of, of->original_name, NULL,
+		       (of, pst->filename, nullptr,
 		       language_c, text_offset);
   ccp->builder->record_debugformat ("ctf");
 }
 
 /* Finish reading symbol/type definitions in CTF format.
-   END_ADDR is the end address of the file's text.  SECTION is
-   the .text section number.  */
+   END_ADDR is the end address of the file's text.  */
 
 static struct compunit_symtab *
-ctf_end_symtab (struct partial_symtab *pst,
-		CORE_ADDR end_addr, int section)
+ctf_end_compunit_symtab (ctf_psymtab *pst,
+			 CORE_ADDR end_addr)
 {
-  ctf_context_t *ccp;
+  struct ctf_context *ccp;
 
-  ccp = (ctf_context_t *) pst->read_symtab_private;
+  ccp = &pst->context;
   struct compunit_symtab *result
-    = ccp->builder->end_symtab (end_addr, section);
+    = ccp->builder->end_compunit_symtab (end_addr);
   delete ccp->builder;
-  ccp->builder = NULL;
+  ccp->builder = nullptr;
   return result;
 }
 
-/* Read in full symbols for PST, and anything it depends on.  */
+/* Add all members of an enum with type TID to partial symbol table.  */
 
 static void
-psymtab_to_symtab (struct partial_symtab *pst)
+ctf_psymtab_add_enums (struct ctf_context *ccp, ctf_id_t tid)
 {
-  struct symbol *sym;
-  ctf_context_t *ccp;
+  int val;
+  const char *ename;
+  ctf_next_t *i = nullptr;
+
+  while ((ename = ctf_enum_next (ccp->fp, tid, &i, &val)) != nullptr)
+    {
+      ccp->pst->add_psymbol (ename, true,
+			     VAR_DOMAIN, LOC_CONST, -1,
+			     psymbol_placement::GLOBAL,
+			     unrelocated_addr (0),
+			     language_c, ccp->partial_symtabs, ccp->of);
+    }
+  if (ctf_errno (ccp->fp) != ECTF_NEXT_END)
+    complaint (_("ctf_enum_next ctf_psymtab_add_enums failed - %s"),
+	       ctf_errmsg (ctf_errno (ccp->fp)));
+}
+
+/* Add entries in either data objects or function info section, controlled
+   by FUNCTIONS, to psymtab.  */
+
+static void
+ctf_psymtab_add_stt_entries (ctf_dict_t *cfp, ctf_psymtab *pst,
+			     struct objfile *of, int functions)
+{
+  ctf_next_t *i = nullptr;
+  ctf_id_t tid;
+  const char *tname;
+
+  while ((tid = ctf_symbol_next (cfp, &i, &tname, functions)) != CTF_ERR)
+    {
+      uint32_t kind = ctf_type_kind (cfp, tid);
+      address_class aclass;
+      domain_enum tdomain;
+      switch (kind)
+	{
+	  case CTF_K_STRUCT:
+	  case CTF_K_UNION:
+	  case CTF_K_ENUM:
+	    tdomain = STRUCT_DOMAIN;
+	    break;
+	  default:
+	    tdomain = VAR_DOMAIN;
+	    break;
+	}
+
+      if (kind == CTF_K_FUNCTION)
+	aclass = LOC_STATIC;
+      else if (kind == CTF_K_CONST)
+	aclass = LOC_CONST;
+      else
+	aclass = LOC_TYPEDEF;
+
+      pst->add_psymbol (tname, true,
+			tdomain, aclass, -1,
+			psymbol_placement::GLOBAL,
+			unrelocated_addr (0),
+			language_c, pst->context.partial_symtabs, of);
+    }
+}
+
+/* Add entries in data objects section to psymtab.  */
+
+static void
+ctf_psymtab_add_stt_obj (ctf_dict_t *cfp, ctf_psymtab *pst,
+			 struct objfile *of)
+{
+  ctf_psymtab_add_stt_entries (cfp, pst, of, 0);
+}
+
+/* Add entries in function info section to psymtab.  */
+
+static void
+ctf_psymtab_add_stt_func (ctf_dict_t *cfp, ctf_psymtab *pst,
+			  struct objfile *of)
+{
+  ctf_psymtab_add_stt_entries (cfp, pst, of, 1);
+}
 
-  gdb_assert (!pst->readin);
+/* Read in full symbols for PST, and anything it depends on.  */
 
-  ccp = (ctf_context_t *) pst->read_symtab_private;
+void
+ctf_psymtab::expand_psymtab (struct objfile *objfile)
+{
+  struct ctf_context *ccp;
+
+  gdb_assert (!readin);
+
+  ccp = &context;
 
   /* Iterate over entries in data types section.  */
   if (ctf_type_iter (ccp->fp, ctf_add_type_cb, ccp) == CTF_ERR)
@@ -1217,71 +1381,46 @@ psymtab_to_symtab (struct partial_symtab
 	       ctf_errmsg (ctf_errno (ccp->fp)));
 
   /* Add entries in data objects and function info sections.  */
-  for (unsigned long i = 0; ; i++)
-    {
-      sym = add_stt_obj (ccp, i);
-      if (sym == NULL)
-	{
-	  if (ctf_errno (ccp->fp) == EINVAL
-	      || ctf_errno (ccp->fp) == ECTF_NOSYMTAB)
-	    break;
-	  sym = add_stt_func (ccp, i);
-	}
-      if (sym == NULL)
-	continue;
+  add_stt_obj (ccp);
+  add_stt_func (ccp);
 
-      set_symbol_address (ccp->of, sym, sym->linkage_name ());
-    }
-
-  pst->readin = 1;
+  readin = true;
 }
 
 /* Expand partial symbol table PST into a full symbol table.
    PST is not NULL.  */
 
-static void
-ctf_read_symtab (struct partial_symtab *pst, struct objfile *objfile)
+void
+ctf_psymtab::read_symtab (struct objfile *objfile)
 {
-  if (pst->readin)
-    warning (_("bug: psymtab for %s is already read in."), pst->filename);
+  if (readin)
+    warning (_("bug: psymtab for %s is already read in."), filename);
   else
     {
       if (info_verbose)
 	{
-	  printf_filtered (_("Reading in CTF data for %s..."), pst->filename);
+	  gdb_printf (_("Reading in CTF data for %s..."), filename);
 	  gdb_flush (gdb_stdout);
 	}
 
       /* Start a symtab.  */
-      CORE_ADDR text_offset;        /* Start of text segment.  */
-      int tsize;
+      CORE_ADDR offset;        /* Start of text segment.  */
+      size_t tsize;
 
-      text_offset = get_objfile_text_range (objfile, &tsize);
-      ctf_start_symtab (pst, objfile, text_offset);
-      psymtab_to_symtab (pst);
-
-      pst->set_text_low (text_offset);
-      pst->set_text_high (text_offset + tsize);
-      pst->compunit_symtab = ctf_end_symtab (pst, text_offset + tsize,
-					     SECT_OFF_TEXT (objfile));
+      offset = get_objfile_text_range (objfile, &tsize);
+      ctf_start_compunit_symtab (this, objfile, offset);
+      expand_psymtab (objfile);
+
+      set_text_low (unrelocated_addr (0));
+      set_text_high (unrelocated_addr (tsize));
+      compunit_symtab = ctf_end_compunit_symtab (this, offset + tsize);
 
       /* Finish up the debug error message.  */
       if (info_verbose)
-	printf_filtered (_("done.\n"));
+	gdb_printf (_("done.\n"));
     }
 }
 
-/* Cleanup function for the ctf_file_key data.  */
-
-static void
-ctf_close_objfile (struct objfile *of, void *datum)
-{
-  ctf_file_t *fp = static_cast<ctf_file_t *> (datum);
-  ctf_archive_t *arc = ctf_get_arc (fp);
-  ctf_file_close (fp);
-  ctf_close (arc);
-}
-
 /* Allocate a new partial_symtab NAME.
 
    Each source file that has not been fully read in is represented by
@@ -1294,21 +1433,24 @@ ctf_close_objfile (struct objfile *of, v
    partial_symtab remains around.  They are allocated on an obstack,
    objfile_obstack.  */
 
-static struct partial_symtab *
+static ctf_psymtab *
 create_partial_symtab (const char *name,
-		       ctf_file_t *cfp,
+		       ctf_archive_t *arc,
+		       ctf_dict_t *cfp,
+		       psymtab_storage *partial_symtabs,
 		       struct objfile *objfile)
 {
-  struct partial_symtab *pst;
-  ctf_context_t *ccx;
+  ctf_psymtab *pst;
 
-  pst = start_psymtab_common (objfile, name, 0);
+  pst = new ctf_psymtab (name, partial_symtabs, objfile->per_bfd,
+			 unrelocated_addr (0));
 
-  ccx = XOBNEW (&objfile->objfile_obstack, ctf_context_t);
-  ccx->fp = cfp;
-  ccx->of = objfile;
-  pst->read_symtab_private = (void *) ccx;
-  pst->read_symtab = ctf_read_symtab;
+  pst->context.arc = arc;
+  pst->context.fp = cfp;
+  pst->context.of = objfile;
+  pst->context.partial_symtabs = partial_symtabs;
+  pst->context.pst = pst;
+  pst->context.builder = nullptr;
 
   return pst;
 }
@@ -1318,23 +1460,22 @@ create_partial_symtab (const char *name,
 static int
 ctf_psymtab_type_cb (ctf_id_t tid, void *arg)
 {
-  ctf_context_t *ccp;
+  struct ctf_context *ccp;
   uint32_t kind;
   short section = -1;
 
-  ccp = (ctf_context_t *) arg;
-  gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (ccp->fp, tid));
-  if (name == NULL || strlen (name.get ()) == 0)
-    return 0;
+  ccp = (struct ctf_context *) arg;
 
   domain_enum domain = UNDEF_DOMAIN;
   enum address_class aclass = LOC_UNDEF;
   kind = ctf_type_kind (ccp->fp, tid);
   switch (kind)
     {
+      case CTF_K_ENUM:
+	ctf_psymtab_add_enums (ccp, tid);
+	[[fallthrough]];
       case CTF_K_STRUCT:
       case CTF_K_UNION:
-      case CTF_K_ENUM:
 	domain = STRUCT_DOMAIN;
 	aclass = LOC_TYPEDEF;
 	break;
@@ -1365,10 +1506,15 @@ ctf_psymtab_type_cb (ctf_id_t tid, void
 	return 0;
     }
 
-    add_psymbol_to_list (name.get (), true,
+  const char *name = ctf_type_name_raw (ccp->fp, tid);
+  if (name == nullptr || strlen (name) == 0)
+    return 0;
+
+  ccp->pst->add_psymbol (name, false,
 			 domain, aclass, section,
-			 psymbol_placement::GLOBAL,
-			 0, language_c, ccp->of);
+			 psymbol_placement::STATIC,
+			 unrelocated_addr (0),
+			 language_c, ccp->partial_symtabs, ccp->of);
 
   return 0;
 }
@@ -1378,12 +1524,13 @@ ctf_psymtab_type_cb (ctf_id_t tid, void
 static int
 ctf_psymtab_var_cb (const char *name, ctf_id_t id, void *arg)
 {
-  ctf_context_t *ccp = (ctf_context_t *) arg;
+  struct ctf_context *ccp = (struct ctf_context *) arg;
 
-  add_psymbol_to_list (name, true,
-		       VAR_DOMAIN, LOC_STATIC, -1,
-		       psymbol_placement::GLOBAL,
-		       0, language_c, ccp->of);
+  ccp->pst->add_psymbol (name, true,
+			 VAR_DOMAIN, LOC_STATIC, -1,
+			 psymbol_placement::GLOBAL,
+			 unrelocated_addr (0),
+			 language_c, ccp->partial_symtabs, ccp->of);
   return 0;
 }
 
@@ -1391,67 +1538,63 @@ ctf_psymtab_var_cb (const char *name, ct
    debugging information is available.  */
 
 static void
-scan_partial_symbols (ctf_file_t *cfp, struct objfile *of)
+scan_partial_symbols (ctf_dict_t *cfp, psymtab_storage *partial_symtabs,
+		      struct ctf_per_tu_data *tup, const char *fname)
 {
-  ctf_context_t ccx;
-  bfd *abfd = of->obfd;
-  const char *name = bfd_get_filename (abfd);
-  struct partial_symtab *pst = create_partial_symtab (name, cfp, of);
+  struct objfile *of = tup->of;
+  bool isparent = false;
+
+  if (strcmp (fname, ".ctf") == 0)
+    {
+      fname = bfd_get_filename (of->obfd.get ());
+      isparent = true;
+    }
 
-  ccx.fp = cfp;
-  ccx.of = of;
+  ctf_psymtab *pst = create_partial_symtab (fname, tup->arc, cfp,
+					    partial_symtabs, of);
 
-  if (ctf_type_iter (cfp, ctf_psymtab_type_cb, &ccx) == CTF_ERR)
+  struct ctf_context *ccx = &pst->context;
+  if (isparent == false)
+    ccx->pst = pst;
+
+  if (ctf_type_iter (cfp, ctf_psymtab_type_cb, ccx) == CTF_ERR)
     complaint (_("ctf_type_iter scan_partial_symbols failed - %s"),
 	       ctf_errmsg (ctf_errno (cfp)));
 
-  if (ctf_variable_iter (cfp, ctf_psymtab_var_cb, &ccx) == CTF_ERR)
+  if (ctf_variable_iter (cfp, ctf_psymtab_var_cb, ccx) == CTF_ERR)
     complaint (_("ctf_variable_iter scan_partial_symbols failed - %s"),
 	       ctf_errmsg (ctf_errno (cfp)));
 
   /* Scan CTF object and function sections which correspond to each
      STT_FUNC or STT_OBJECT entry in the symbol table,
      pick up what init_symtab has done.  */
-  for (unsigned long idx = 0; ; idx++)
-    {
-      ctf_id_t tid;
-      if ((tid = ctf_lookup_by_symbol (cfp, idx)) == CTF_ERR)
-	{
-	if (ctf_errno (cfp) == EINVAL || ctf_errno (cfp) == ECTF_NOSYMTAB)
-	  break;	// Done, reach end of the section.
-	else
-	  continue;
-	}
-      gdb::unique_xmalloc_ptr<char> tname (ctf_type_aname_raw (cfp, tid));
-      uint32_t kind = ctf_type_kind (cfp, tid);
-      address_class aclass;
-      domain_enum tdomain;
-      switch (kind)
-	{
-	  case CTF_K_STRUCT:
-	  case CTF_K_UNION:
-	  case CTF_K_ENUM:
-	    tdomain = STRUCT_DOMAIN;
-	    break;
-	  default:
-	    tdomain = VAR_DOMAIN;
-	    break;
-	}
+  ctf_psymtab_add_stt_obj (cfp, pst, of);
+  ctf_psymtab_add_stt_func (cfp, pst, of);
 
-      if (kind == CTF_K_FUNCTION)
-	aclass = LOC_STATIC;
-      else if (kind == CTF_K_CONST)
-	aclass = LOC_CONST;
-      else
-	aclass = LOC_TYPEDEF;
+  pst->end ();
+}
+
+/* Callback to build the psymtab for archive member NAME.  */
 
-      add_psymbol_to_list (tname.get (), true,
-			   tdomain, aclass, -1,
-			   psymbol_placement::STATIC,
-			   0, language_c, of);
+static int
+build_ctf_archive_member (ctf_dict_t *ctf, const char *name, void *arg)
+{
+  struct ctf_per_tu_data *tup = (struct ctf_per_tu_data *) arg;
+  ctf_dict_t *parent = tup->fp;
+
+  if (strcmp (name, ".ctf") != 0)
+    ctf_import (ctf, parent);
+
+  if (info_verbose)
+    {
+      gdb_printf (_("Scanning archive member %s..."), name);
+      gdb_flush (gdb_stdout);
     }
 
-  end_psymtab_common (of, pst);
+  psymtab_storage *pss = tup->psf->get_partial_symtabs ().get ();
+  scan_partial_symbols (ctf, pss, tup, name);
+
+  return 0;
 }
 
 /* Read CTF debugging information from a BFD section.  This is
@@ -1461,26 +1604,40 @@ scan_partial_symbols (ctf_file_t *cfp, s
 void
 elfctf_build_psymtabs (struct objfile *of)
 {
-  bfd *abfd = of->obfd;
+  struct ctf_per_tu_data pcu;
+  bfd *abfd = of->obfd.get ();
   int err;
 
   ctf_archive_t *arc = ctf_bfdopen (abfd, &err);
-  if (arc == NULL)
+  if (arc == nullptr)
     error (_("ctf_bfdopen failed on %s - %s"),
 	   bfd_get_filename (abfd), ctf_errmsg (err));
 
-  ctf_file_t *fp = ctf_arc_open_by_name (arc, NULL, &err);
-  if (fp == NULL)
-    error (_("ctf_arc_open_by_name failed on %s - %s"),
+  ctf_dict_t *fp = ctf_dict_open (arc, NULL, &err);
+  if (fp == nullptr)
+    error (_("ctf_dict_open failed on %s - %s"),
 	   bfd_get_filename (abfd), ctf_errmsg (err));
-  set_objfile_data (of, ctf_file_key, fp);
+  ctf_dict_key.emplace (of, fp);
 
-  scan_partial_symbols (fp, of);
+  pcu.fp = fp;
+  pcu.of = of;
+  pcu.arc = arc;
+
+  psymbol_functions *psf = new psymbol_functions ();
+  of->qf.emplace_front (psf);
+  pcu.psf = psf;
+
+  if (ctf_archive_iter (arc, build_ctf_archive_member, &pcu) < 0)
+    error (_("ctf_archive_iter failed in input file %s: - %s"),
+	   bfd_get_filename (abfd), ctf_errmsg (err));
 }
 
+#else
+
 void
-_initialize_ctfread (void)
+elfctf_build_psymtabs (struct objfile *of)
 {
-  ctf_file_key
-    = register_objfile_data_with_cleanup (NULL, ctf_close_objfile);
+  /* Nothing to do if CTF is disabled.  */
 }
+
+#endif /* ENABLE_LIBCTF */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ctfread.h ./gdb/ctfread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/ctfread.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/ctfread.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* CTF debugging format support for GDB.
 
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-typeprint.c ./gdb/c-typeprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-typeprint.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/c-typeprint.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for printing C and C++ types for GDB, the GNU debugger.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -17,8 +17,8 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "gdb_obstack.h"
-#include "bfd.h"		/* Binary File Description.  */
+#include "gdbsupport/gdb_obstack.h"
+#include "bfd.h"
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "expression.h"
@@ -33,16 +33,6 @@
 #include "cp-abi.h"
 #include "cp-support.h"
 
-/* A list of access specifiers used for printing.  */
-
-enum access_specifier
-{
-  s_none,
-  s_public,
-  s_private,
-  s_protected
-};
-
 static void c_type_print_varspec_suffix (struct type *, struct ui_file *, int,
 					 int, int,
 					 enum language,
@@ -58,7 +48,7 @@ static void c_type_print_varspec_prefix
 /* Print "const", "volatile", or address space modifiers.  */
 static void c_type_print_modifier (struct type *,
 				   struct ui_file *,
-				   int, int);
+				   int, int, enum language);
 
 static void c_type_print_base_1 (struct type *type, struct ui_file *stream,
 				 int show, int level, enum language language,
@@ -84,14 +74,14 @@ print_name_maybe_canonical (const char *
 			    const struct type_print_options *flags,
 			    struct ui_file *stream)
 {
-  std::string s;
+  gdb::unique_xmalloc_ptr<char> s;
 
   if (!flags->raw)
     s = cp_canonicalize_string_full (name,
 				     find_typedef_for_canonicalize,
 				     (void *) flags);
 
-  fputs_filtered (!s.empty () ? s.c_str () : name, stream);
+  gdb_puts (s != nullptr ? s.get () : name, stream);
 }
 
 
@@ -116,12 +106,13 @@ c_print_type_1 (struct type *type,
     type = check_typedef (type);
 
   local_name = typedef_hash_table::find_typedef (flags, type);
-  code = TYPE_CODE (type);
+  code = type->code ();
   if (local_name != NULL)
     {
-      fputs_filtered (local_name, stream);
+      c_type_print_modifier (type, stream, 0, 1, language);
+      gdb_puts (local_name, stream);
       if (varstring != NULL && *varstring != '\0')
-	fputs_filtered (" ", stream);
+	gdb_puts (" ", stream);
     }
   else
     {
@@ -129,15 +120,15 @@ c_print_type_1 (struct type *type,
       if ((varstring != NULL && *varstring != '\0')
 	  /* Need a space if going to print stars or brackets;
 	     but not if we will print just a type name.  */
-	  || ((show > 0 || TYPE_NAME (type) == 0)
+	  || ((show > 0 || type->name () == 0)
 	      && (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
 		  || code == TYPE_CODE_METHOD
 		  || (code == TYPE_CODE_ARRAY
-		      && !TYPE_VECTOR (type))
+		      && !type->is_vector ())
 		  || code == TYPE_CODE_MEMBERPTR
 		  || code == TYPE_CODE_METHODPTR
 		  || TYPE_IS_REFERENCE (type))))
-	fputs_filtered (" ", stream);
+	gdb_puts (" ", stream);
       need_post_space = (varstring != NULL && strcmp (varstring, "") != 0);
       c_type_print_varspec_prefix (type, stream, show, 0, need_post_space,
 				   language, flags, podata);
@@ -148,10 +139,10 @@ c_print_type_1 (struct type *type,
       if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
 	fputs_styled (varstring, function_name_style.style (), stream);
       else
-	fputs_filtered (varstring, stream);
+	fputs_styled (varstring, variable_name_style.style (), stream);
 
       /* For demangled function names, we have the arglist as part of
-         the name, so don't print an additional pair of ()'s.  */
+	 the name, so don't print an additional pair of ()'s.  */
       if (local_name == NULL)
 	{
 	  demangled_args = strchr (varstring, '(') != NULL;
@@ -162,22 +153,6 @@ c_print_type_1 (struct type *type,
     }
 }
 
-/* LEVEL is the depth to indent lines by.  */
-
-void
-c_print_type (struct type *type,
-	      const char *varstring,
-	      struct ui_file *stream,
-	      int show, int level,
-	      const struct type_print_options *flags)
-{
-  struct print_offset_data podata;
-
-  c_print_type_1 (type, varstring, stream, show, level,
-		  current_language->la_language, flags, &podata);
-}
-
-
 /* See c-lang.h.  */
 
 void
@@ -188,7 +163,7 @@ c_print_type (struct type *type,
 	      enum language language,
 	      const struct type_print_options *flags)
 {
-  struct print_offset_data podata;
+  struct print_offset_data podata (flags);
 
   c_print_type_1 (type, varstring, stream, show, level, language, flags,
 		  &podata);
@@ -204,14 +179,14 @@ c_print_typedef (struct type *type,
 		 struct ui_file *stream)
 {
   type = check_typedef (type);
-  fprintf_filtered (stream, "typedef ");
+  gdb_printf (stream, "typedef ");
   type_print (type, "", stream, -1);
-  if (TYPE_NAME ((SYMBOL_TYPE (new_symbol))) == 0
-      || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))),
+  if ((new_symbol->type ())->name () == 0
+      || strcmp ((new_symbol->type ())->name (),
 		 new_symbol->linkage_name ()) != 0
-      || TYPE_CODE (SYMBOL_TYPE (new_symbol)) == TYPE_CODE_TYPEDEF)
-    fprintf_filtered (stream, " %s", new_symbol->print_name ());
-  fprintf_filtered (stream, ";");
+      || new_symbol->type ()->code () == TYPE_CODE_TYPEDEF)
+    gdb_printf (stream, " %s", new_symbol->print_name ());
+  gdb_printf (stream, ";");
 }
 
 /* If TYPE is a derived type, then print out derivation information.
@@ -249,22 +224,22 @@ cp_type_print_derivation_info (struct ui
 
   for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
     {
-      wrap_here ("        ");
-      fputs_filtered (i == 0 ? ": " : ", ", stream);
-      fprintf_filtered (stream, "%s%s ",
-			BASETYPE_VIA_PUBLIC (type, i)
-			? "public" : (TYPE_FIELD_PROTECTED (type, i)
-				      ? "protected" : "private"),
-			BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
-      name = TYPE_NAME (TYPE_BASECLASS (type, i));
+      stream->wrap_here (8);
+      gdb_puts (i == 0 ? ": " : ", ", stream);
+      gdb_printf (stream, "%s%s ",
+		  BASETYPE_VIA_PUBLIC (type, i)
+		  ? "public" : (type->field (i).is_protected ()
+				? "protected" : "private"),
+		  BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
+      name = TYPE_BASECLASS (type, i)->name ();
       if (name)
 	print_name_maybe_canonical (name, flags, stream);
       else
-	fprintf_filtered (stream, "(null)");
+	gdb_printf (stream, "(null)");
     }
   if (i > 0)
     {
-      fputs_filtered (" ", stream);
+      gdb_puts (" ", stream);
     }
 }
 
@@ -277,48 +252,57 @@ cp_type_print_method_args (struct type *
 			   enum language language,
 			   const struct type_print_options *flags)
 {
-  struct field *args = TYPE_FIELDS (mtype);
-  int nargs = TYPE_NFIELDS (mtype);
-  int varargs = TYPE_VARARGS (mtype);
+  struct field *args = mtype->fields ();
+  int nargs = mtype->num_fields ();
+  int varargs = mtype->has_varargs ();
   int i;
 
-  fprintf_symbol_filtered (stream, prefix,
-			   language_cplus, DMGL_ANSI);
-  fprintf_symbol_filtered (stream, varstring,
-			   language_cplus, DMGL_ANSI);
-  fputs_filtered ("(", stream);
-
-  /* Skip the class variable.  We keep this here to accommodate older
-     compilers and debug formats which may not support artificial
-     parameters.  */
-  i = staticp ? 0 : 1;
-  if (nargs > i)
-    {
-      while (i < nargs)
-	{
-	  struct field arg = args[i++];
+  fprintf_symbol (stream, prefix,
+		  language_cplus, DMGL_ANSI);
+  fprintf_symbol (stream, varstring,
+		  language_cplus, DMGL_ANSI);
+  gdb_puts ("(", stream);
+
+  int printed_args = 0;
+  for (i = 0; i < nargs; ++i)
+    {
+      if (i == 0 && !staticp)
+	{
+	  /* Skip the class variable.  We keep this here to accommodate older
+	     compilers and debug formats which may not support artificial
+	     parameters.  */
+	  continue;
+	}
+
+      struct field arg = args[i];
+      /* Skip any artificial arguments.  */
+      if (arg.is_artificial ())
+	continue;
 
-	  /* Skip any artificial arguments.  */
-	  if (FIELD_ARTIFICIAL (arg))
-	    continue;
+      if (printed_args > 0)
+	{
+	  gdb_printf (stream, ", ");
+	  stream->wrap_here (8);
+	}
 
-	  c_print_type (arg.type, "", stream, 0, 0, flags);
+      c_print_type (arg.type (), "", stream, 0, 0, language, flags);
+      printed_args++;
+    }
 
-	  if (i == nargs && varargs)
-	    fprintf_filtered (stream, ", ...");
-	  else if (i < nargs)
-	    {
-	      fprintf_filtered (stream, ", ");
-	      wrap_here ("        ");
-	    }
-	}
+  if (varargs)
+    {
+      if (printed_args == 0)
+	gdb_printf (stream, "...");
+      else
+	gdb_printf (stream, ", ...");
+    }
+  else if (printed_args == 0)
+    {
+      if (language == language_cplus)
+	gdb_printf (stream, "void");
     }
-  else if (varargs)
-    fprintf_filtered (stream, "...");
-  else if (language == language_cplus)
-    fprintf_filtered (stream, "void");
 
-  fprintf_filtered (stream, ")");
+  gdb_printf (stream, ")");
 
   /* For non-static methods, read qualifiers from the type of
      THIS.  */
@@ -327,20 +311,22 @@ cp_type_print_method_args (struct type *
       struct type *domain;
 
       gdb_assert (nargs > 0);
-      gdb_assert (TYPE_CODE (args[0].type) == TYPE_CODE_PTR);
-      domain = TYPE_TARGET_TYPE (args[0].type);
+      gdb_assert (args[0].type ()->code () == TYPE_CODE_PTR);
+      domain = args[0].type ()->target_type ();
 
       if (TYPE_CONST (domain))
-	fprintf_filtered (stream, " const");
+	gdb_printf (stream, " const");
 
       if (TYPE_VOLATILE (domain))
-	fprintf_filtered (stream, " volatile");
+	gdb_printf (stream, " volatile");
 
       if (TYPE_RESTRICT (domain))
-	fprintf_filtered (stream, " restrict");
+	gdb_printf (stream, (language == language_cplus
+			     ? " __restrict__"
+			     : " restrict"));
 
       if (TYPE_ATOMIC (domain))
-	fprintf_filtered (stream, " _Atomic");
+	gdb_printf (stream, " _Atomic");
     }
 }
 
@@ -371,104 +357,80 @@ c_type_print_varspec_prefix (struct type
   if (type == 0)
     return;
 
-  if (TYPE_NAME (type) && show <= 0)
+  if (type->name () && show <= 0)
     return;
 
   QUIT;
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_PTR:
-      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
+      c_type_print_varspec_prefix (type->target_type (),
 				   stream, show, 1, 1, language, flags,
 				   podata);
-      fprintf_filtered (stream, "*");
-      c_type_print_modifier (type, stream, 1, need_post_space);
+      gdb_printf (stream, "*");
+      c_type_print_modifier (type, stream, 1, need_post_space, language);
       break;
 
     case TYPE_CODE_MEMBERPTR:
-      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
+      c_type_print_varspec_prefix (type->target_type (),
 				   stream, show, 0, 0, language, flags, podata);
-      name = TYPE_NAME (TYPE_SELF_TYPE (type));
+      name = TYPE_SELF_TYPE (type)->name ();
       if (name)
 	print_name_maybe_canonical (name, flags, stream);
       else
 	c_type_print_base_1 (TYPE_SELF_TYPE (type),
 			     stream, -1, passed_a_ptr, language, flags,
 			     podata);
-      fprintf_filtered (stream, "::*");
+      gdb_printf (stream, "::*");
       break;
 
     case TYPE_CODE_METHODPTR:
-      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
+      c_type_print_varspec_prefix (type->target_type (),
 				   stream, show, 0, 0, language, flags,
 				   podata);
-      fprintf_filtered (stream, "(");
-      name = TYPE_NAME (TYPE_SELF_TYPE (type));
+      gdb_printf (stream, "(");
+      name = TYPE_SELF_TYPE (type)->name ();
       if (name)
 	print_name_maybe_canonical (name, flags, stream);
       else
 	c_type_print_base_1 (TYPE_SELF_TYPE (type),
 			     stream, -1, passed_a_ptr, language, flags,
 			     podata);
-      fprintf_filtered (stream, "::*");
+      gdb_printf (stream, "::*");
       break;
 
     case TYPE_CODE_REF:
     case TYPE_CODE_RVALUE_REF:
-      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
+      c_type_print_varspec_prefix (type->target_type (),
 				   stream, show, 1, 0, language, flags,
 				   podata);
-      fprintf_filtered (stream, TYPE_CODE(type) == TYPE_CODE_REF ? "&" : "&&");
-      c_type_print_modifier (type, stream, 1, need_post_space);
+      gdb_printf (stream, type->code () == TYPE_CODE_REF ? "&" : "&&");
+      c_type_print_modifier (type, stream, 1, need_post_space, language);
       break;
 
     case TYPE_CODE_METHOD:
     case TYPE_CODE_FUNC:
-      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
+      c_type_print_varspec_prefix (type->target_type (),
 				   stream, show, 0, 0, language, flags,
 				   podata);
       if (passed_a_ptr)
-	fprintf_filtered (stream, "(");
+	gdb_printf (stream, "(");
       break;
 
     case TYPE_CODE_ARRAY:
-      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
-				   stream, show, 0, 0, language, flags,
-				   podata);
+      c_type_print_varspec_prefix (type->target_type (),
+				   stream, show, 0, need_post_space,
+				   language, flags, podata);
       if (passed_a_ptr)
-	fprintf_filtered (stream, "(");
+	gdb_printf (stream, "(");
       break;
 
     case TYPE_CODE_TYPEDEF:
-      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
+      c_type_print_varspec_prefix (type->target_type (),
 				   stream, show, passed_a_ptr, 0,
 				   language, flags, podata);
       break;
-
-    case TYPE_CODE_UNDEF:
-    case TYPE_CODE_STRUCT:
-    case TYPE_CODE_UNION:
-    case TYPE_CODE_ENUM:
-    case TYPE_CODE_FLAGS:
-    case TYPE_CODE_INT:
-    case TYPE_CODE_FLT:
-    case TYPE_CODE_VOID:
-    case TYPE_CODE_ERROR:
-    case TYPE_CODE_CHAR:
-    case TYPE_CODE_BOOL:
-    case TYPE_CODE_SET:
-    case TYPE_CODE_RANGE:
-    case TYPE_CODE_STRING:
-    case TYPE_CODE_COMPLEX:
-    case TYPE_CODE_NAMESPACE:
-    case TYPE_CODE_DECFLOAT:
-      /* These types need no prefix.  They are listed here so that
-         gcc -Wall will reveal any types that haven't been handled.  */
-      break;
-    default:
-      error (_("type not handled in c_type_print_varspec_prefix()"));
-      break;
     }
 }
 
@@ -481,7 +443,8 @@ c_type_print_varspec_prefix (struct type
 
 static void
 c_type_print_modifier (struct type *type, struct ui_file *stream,
-		       int need_pre_space, int need_post_space)
+		       int need_pre_space, int need_post_space,
+		       enum language language)
 {
   int did_print_modifier = 0;
   const char *address_space_id;
@@ -492,47 +455,50 @@ c_type_print_modifier (struct type *type
   if (TYPE_CONST (type) && !TYPE_IS_REFERENCE (type))
     {
       if (need_pre_space)
-	fprintf_filtered (stream, " ");
-      fprintf_filtered (stream, "const");
+	gdb_printf (stream, " ");
+      gdb_printf (stream, "const");
       did_print_modifier = 1;
     }
 
   if (TYPE_VOLATILE (type))
     {
       if (did_print_modifier || need_pre_space)
-	fprintf_filtered (stream, " ");
-      fprintf_filtered (stream, "volatile");
+	gdb_printf (stream, " ");
+      gdb_printf (stream, "volatile");
       did_print_modifier = 1;
     }
 
   if (TYPE_RESTRICT (type))
     {
       if (did_print_modifier || need_pre_space)
-	fprintf_filtered (stream, " ");
-      fprintf_filtered (stream, "restrict");
+	gdb_printf (stream, " ");
+      gdb_printf (stream, (language == language_cplus
+			   ? "__restrict__"
+			   : "restrict"));
       did_print_modifier = 1;
     }
 
   if (TYPE_ATOMIC (type))
     {
       if (did_print_modifier || need_pre_space)
-	fprintf_filtered (stream, " ");
-      fprintf_filtered (stream, "_Atomic");
+	gdb_printf (stream, " ");
+      gdb_printf (stream, "_Atomic");
       did_print_modifier = 1;
     }
 
-  address_space_id = address_space_int_to_name (get_type_arch (type),
-						TYPE_INSTANCE_FLAGS (type));
+  address_space_id
+    = address_space_type_instance_flags_to_name (type->arch (),
+						 type->instance_flags ());
   if (address_space_id)
     {
       if (did_print_modifier || need_pre_space)
-	fprintf_filtered (stream, " ");
-      fprintf_filtered (stream, "@%s", address_space_id);
+	gdb_printf (stream, " ");
+      gdb_printf (stream, "@%s", address_space_id);
       did_print_modifier = 1;
     }
 
   if (did_print_modifier && need_post_space)
-    fprintf_filtered (stream, " ");
+    gdb_printf (stream, " ");
 }
 
 
@@ -553,22 +519,22 @@ c_type_print_args (struct type *type, st
   int i;
   int printed_any = 0;
 
-  fprintf_filtered (stream, "(");
+  gdb_printf (stream, "(");
 
-  for (i = 0; i < TYPE_NFIELDS (type); i++)
+  for (i = 0; i < type->num_fields (); i++)
     {
       struct type *param_type;
 
-      if (TYPE_FIELD_ARTIFICIAL (type, i) && linkage_name)
+      if (type->field (i).is_artificial () && linkage_name)
 	continue;
 
       if (printed_any)
 	{
-	  fprintf_filtered (stream, ", ");
-	  wrap_here ("    ");
+	  gdb_printf (stream, ", ");
+	  stream->wrap_here (4);
 	}
 
-      param_type = TYPE_FIELD_TYPE (type, i);
+      param_type = type->field (i).type ();
 
       if (language == language_cplus && linkage_name)
 	{
@@ -586,23 +552,23 @@ c_type_print_args (struct type *type, st
       printed_any = 1;
     }
 
-  if (printed_any && TYPE_VARARGS (type))
+  if (printed_any && type->has_varargs ())
     {
       /* Print out a trailing ellipsis for varargs functions.  Ignore
 	 TYPE_VARARGS if the function has no named arguments; that
 	 represents unprototyped (K&R style) C functions.  */
-      if (printed_any && TYPE_VARARGS (type))
+      if (printed_any && type->has_varargs ())
 	{
-	  fprintf_filtered (stream, ", ");
-	  wrap_here ("    ");
-	  fprintf_filtered (stream, "...");
+	  gdb_printf (stream, ", ");
+	  stream->wrap_here (4);
+	  gdb_printf (stream, "...");
 	}
     }
   else if (!printed_any
-	   && (TYPE_PROTOTYPED (type) || language == language_cplus))
-    fprintf_filtered (stream, "void");
+	   && (type->is_prototyped () || language == language_cplus))
+    gdb_printf (stream, "void");
 
-  fprintf_filtered (stream, ")");
+  gdb_printf (stream, ")");
 }
 
 /* Return true iff the j'th overloading of the i'th method of TYPE
@@ -667,16 +633,16 @@ is_type_conversion_operator (struct type
    form.  Even the author of this function feels that writing little
    parsers like this everywhere is stupid.  */
 
-static char *
-remove_qualifiers (char *qid)
+static const char *
+remove_qualifiers (const char *qid)
 {
   int quoted = 0;	/* Zero if we're not in quotes;
 			   '"' if we're in a double-quoted string;
 			   '\'' if we're in a single-quoted string.  */
   int depth = 0;	/* Number of unclosed parens we've seen.  */
   char *parenstack = (char *) alloca (strlen (qid));
-  char *scan;
-  char *last = 0;	/* The character after the rightmost
+  const char *scan;
+  const char *last = 0;	/* The character after the rightmost
 			   `::' token we've seen so far.  */
 
   for (scan = qid; *scan; scan++)
@@ -757,94 +723,69 @@ c_type_print_varspec_suffix (struct type
   if (type == 0)
     return;
 
-  if (TYPE_NAME (type) && show <= 0)
+  if (type->name () && show <= 0)
     return;
 
   QUIT;
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_ARRAY:
       {
 	LONGEST low_bound, high_bound;
-	int is_vector = TYPE_VECTOR (type);
+	int is_vector = type->is_vector ();
 
 	if (passed_a_ptr)
-	  fprintf_filtered (stream, ")");
+	  gdb_printf (stream, ")");
 
-	fprintf_filtered (stream, (is_vector ?
-				   " __attribute__ ((vector_size(" : "["));
+	gdb_printf (stream, (is_vector ?
+			     " __attribute__ ((vector_size(" : "["));
 	/* Bounds are not yet resolved, print a bounds placeholder instead.  */
-	if (TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCEXPR
-	    || TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCLIST)
-	  fprintf_filtered (stream, "variable length");
+	if (type->bounds ()->high.kind () == PROP_LOCEXPR
+	    || type->bounds ()->high.kind () == PROP_LOCLIST)
+	  gdb_printf (stream, "variable length");
 	else if (get_array_bounds (type, &low_bound, &high_bound))
-	  fprintf_filtered (stream, "%s", 
-			    plongest (high_bound - low_bound + 1));
-	fprintf_filtered (stream, (is_vector ? ")))" : "]"));
+	  gdb_printf (stream, "%s", 
+		      plongest (high_bound - low_bound + 1));
+	gdb_printf (stream, (is_vector ? ")))" : "]"));
 
-	c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
+	c_type_print_varspec_suffix (type->target_type (), stream,
 				     show, 0, 0, language, flags);
       }
       break;
 
     case TYPE_CODE_MEMBERPTR:
-      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
+      c_type_print_varspec_suffix (type->target_type (), stream,
 				   show, 0, 0, language, flags);
       break;
 
     case TYPE_CODE_METHODPTR:
-      fprintf_filtered (stream, ")");
-      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
+      gdb_printf (stream, ")");
+      c_type_print_varspec_suffix (type->target_type (), stream,
 				   show, 0, 0, language, flags);
       break;
 
     case TYPE_CODE_PTR:
     case TYPE_CODE_REF:
     case TYPE_CODE_RVALUE_REF:
-      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
+      c_type_print_varspec_suffix (type->target_type (), stream,
 				   show, 1, 0, language, flags);
       break;
 
     case TYPE_CODE_METHOD:
     case TYPE_CODE_FUNC:
       if (passed_a_ptr)
-	fprintf_filtered (stream, ")");
+	gdb_printf (stream, ")");
       if (!demangled_args)
 	c_type_print_args (type, stream, 0, language, flags);
-      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
+      c_type_print_varspec_suffix (type->target_type (), stream,
 				   show, passed_a_ptr, 0, language, flags);
       break;
 
     case TYPE_CODE_TYPEDEF:
-      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
+      c_type_print_varspec_suffix (type->target_type (), stream,
 				   show, passed_a_ptr, 0, language, flags);
       break;
-
-    case TYPE_CODE_UNDEF:
-    case TYPE_CODE_STRUCT:
-    case TYPE_CODE_UNION:
-    case TYPE_CODE_FLAGS:
-    case TYPE_CODE_ENUM:
-    case TYPE_CODE_INT:
-    case TYPE_CODE_FLT:
-    case TYPE_CODE_VOID:
-    case TYPE_CODE_ERROR:
-    case TYPE_CODE_CHAR:
-    case TYPE_CODE_BOOL:
-    case TYPE_CODE_SET:
-    case TYPE_CODE_RANGE:
-    case TYPE_CODE_STRING:
-    case TYPE_CODE_COMPLEX:
-    case TYPE_CODE_NAMESPACE:
-    case TYPE_CODE_DECFLOAT:
-      /* These types do not need a suffix.  They are listed so that
-         gcc -Wall will report types that may not have been
-         considered.  */
-      break;
-    default:
-      error (_("type not handled in c_type_print_varspec_suffix()"));
-      break;
     }
 }
 
@@ -863,7 +804,8 @@ c_type_print_varspec_suffix (struct type
 
 static void
 c_type_print_template_args (const struct type_print_options *flags,
-			    struct type *type, struct ui_file *stream)
+			    struct type *type, struct ui_file *stream,
+			    enum language language)
 {
   int first = 1, i;
 
@@ -874,30 +816,30 @@ c_type_print_template_args (const struct
     {
       struct symbol *sym = TYPE_TEMPLATE_ARGUMENT (type, i);
 
-      if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
+      if (sym->aclass () != LOC_TYPEDEF)
 	continue;
 
       if (first)
 	{
-	  wrap_here ("    ");
-	  fprintf_filtered (stream, _("[with %s = "), sym->linkage_name ());
+	  stream->wrap_here (4);
+	  gdb_printf (stream, _("[with %s = "), sym->linkage_name ());
 	  first = 0;
 	}
       else
 	{
-	  fputs_filtered (", ", stream);
-	  wrap_here ("         ");
-	  fprintf_filtered (stream, "%s = ", sym->linkage_name ());
+	  gdb_puts (", ", stream);
+	  stream->wrap_here (9);
+	  gdb_printf (stream, "%s = ", sym->linkage_name ());
 	}
 
-      c_print_type (SYMBOL_TYPE (sym), "", stream, -1, 0, flags);
+      c_print_type (sym->type (), "", stream, -1, 0, language, flags);
     }
 
   if (!first)
-    fputs_filtered (_("] "), stream);
+    gdb_puts (_("] "), stream);
 }
 
-/* Use 'print_spaces_filtered', but take into consideration the
+/* Use 'print_spaces', but take into consideration the
    type_print_options FLAGS in order to determine how many whitespaces
    will be printed.  */
 
@@ -906,100 +848,40 @@ print_spaces_filtered_with_print_options
   (int level, struct ui_file *stream, const struct type_print_options *flags)
 {
   if (!flags->print_offsets)
-    print_spaces_filtered (level, stream);
+    print_spaces (level, stream);
   else
-    print_spaces_filtered (level + print_offset_data::indentation, stream);
+    print_spaces (level + print_offset_data::indentation, stream);
 }
 
 /* Output an access specifier to STREAM, if needed.  LAST_ACCESS is the
    last access specifier output (typically returned by this function).  */
 
-static enum access_specifier
+static accessibility
 output_access_specifier (struct ui_file *stream,
-			 enum access_specifier last_access,
-			 int level, bool is_protected, bool is_private,
+			 accessibility last_access,
+			 int level, accessibility new_access,
 			 const struct type_print_options *flags)
 {
-  if (is_protected)
-    {
-      if (last_access != s_protected)
-	{
-	  last_access = s_protected;
-	  print_spaces_filtered_with_print_options (level + 2, stream, flags);
-	  fprintf_filtered (stream, "protected:\n");
-	}
-    }
-  else if (is_private)
-    {
-      if (last_access != s_private)
-	{
-	  last_access = s_private;
-	  print_spaces_filtered_with_print_options (level + 2, stream, flags);
-	  fprintf_filtered (stream, "private:\n");
-	}
-    }
-  else
+  if (last_access == new_access)
+    return new_access;
+
+  if (new_access == accessibility::PROTECTED)
     {
-      if (last_access != s_public)
-	{
-	  last_access = s_public;
-	  print_spaces_filtered_with_print_options (level + 2, stream, flags);
-	  fprintf_filtered (stream, "public:\n");
-	}
+      print_spaces_filtered_with_print_options (level + 2, stream, flags);
+      gdb_printf (stream, "protected:\n");
     }
-
-  return last_access;
-}
-
-/* Return true if an access label (i.e., "public:", "private:",
-   "protected:") needs to be printed for TYPE.  */
-
-static bool
-need_access_label_p (struct type *type)
-{
-  if (TYPE_DECLARED_CLASS (type))
+  else if (new_access == accessibility::PRIVATE)
     {
-      QUIT;
-      for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
-	if (!TYPE_FIELD_PRIVATE (type, i))
-	  return true;
-      QUIT;
-      for (int j = 0; j < TYPE_NFN_FIELDS (type); j++)
-	for (int i = 0; i < TYPE_FN_FIELDLIST_LENGTH (type, j); i++)
-	  if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type,
-							  j), i))
-	    return true;
-      QUIT;
-      for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); ++i)
-	if (!TYPE_TYPEDEF_FIELD_PRIVATE (type, i))
-	  return true;
+      print_spaces_filtered_with_print_options (level + 2, stream, flags);
+      gdb_printf (stream, "private:\n");
     }
   else
     {
-      QUIT;
-      for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
-	if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i))
-	  return true;
-      QUIT;
-      for (int j = 0; j < TYPE_NFN_FIELDS (type); j++)
-	{
-	  QUIT;
-	  for (int i = 0; i < TYPE_FN_FIELDLIST_LENGTH (type, j); i++)
-	    if (TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type,
-							     j), i)
-		|| TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type,
-							      j),
-					  i))
-	      return true;
-	}
-      QUIT;
-      for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); ++i)
-	if (TYPE_TYPEDEF_FIELD_PROTECTED (type, i)
-	    || TYPE_TYPEDEF_FIELD_PRIVATE (type, i))
-	  return true;
+      print_spaces_filtered_with_print_options (level + 2, stream, flags);
+      gdb_printf (stream, "public:\n");
     }
 
-  return false;
+  return new_access;
 }
 
 /* Helper function that temporarily disables FLAGS->PRINT_OFFSETS,
@@ -1050,42 +932,42 @@ c_type_print_base_struct_union (struct t
       hash_holder.reset (local_flags.local_typedefs);
     }
 
-  c_type_print_modifier (type, stream, 0, 1);
-  if (TYPE_CODE (type) == TYPE_CODE_UNION)
-    fprintf_filtered (stream, "union ");
-  else if (TYPE_DECLARED_CLASS (type))
-    fprintf_filtered (stream, "class ");
+  c_type_print_modifier (type, stream, 0, 1, language);
+  if (type->code () == TYPE_CODE_UNION)
+    gdb_printf (stream, "union ");
+  else if (type->is_declared_class ())
+    gdb_printf (stream, "class ");
   else
-    fprintf_filtered (stream, "struct ");
+    gdb_printf (stream, "struct ");
 
   /* Print the tag if it exists.  The HP aCC compiler emits a
      spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed
      enum}" tag for unnamed struct/union/enum's, which we don't
      want to print.  */
-  if (TYPE_NAME (type) != NULL
-      && !startswith (TYPE_NAME (type), "{unnamed"))
+  if (type->name () != NULL
+      && !startswith (type->name (), "{unnamed"))
     {
       /* When printing the tag name, we are still effectively
 	 printing in the outer context, hence the use of FLAGS
 	 here.  */
-      print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
+      print_name_maybe_canonical (type->name (), flags, stream);
       if (show > 0)
-	fputs_filtered (" ", stream);
+	gdb_puts (" ", stream);
     }
 
   if (show < 0)
     {
       /* If we just printed a tag name, no need to print anything
 	 else.  */
-      if (TYPE_NAME (type) == NULL)
-	fprintf_filtered (stream, "{...}");
+      if (type->name () == NULL)
+	gdb_printf (stream, "{...}");
     }
-  else if (show > 0 || TYPE_NAME (type) == NULL)
+  else if (show > 0 || type->name () == NULL)
     {
       struct type *basetype;
       int vptr_fieldno;
 
-      c_type_print_template_args (&local_flags, type, stream);
+      c_type_print_template_args (&local_flags, type, stream, language);
 
       /* Add in template parameters when printing derivation info.  */
       if (local_flags.local_typedefs != NULL)
@@ -1108,40 +990,31 @@ c_type_print_base_struct_union (struct t
 	  local_flags.local_typedefs->recursively_update (type);
 	}
 
-      fprintf_filtered (stream, "{\n");
+      gdb_printf (stream, "{\n");
 
-      if (TYPE_NFIELDS (type) == 0 && TYPE_NFN_FIELDS (type) == 0
+      if (type->num_fields () == 0 && TYPE_NFN_FIELDS (type) == 0
 	  && TYPE_TYPEDEF_FIELD_COUNT (type) == 0)
 	{
-	  if (TYPE_STUB (type))
-	    fprintfi_filtered (level + 4, stream,
-			       _("%p[<incomplete type>%p]\n"),
-			       metadata_style.style ().ptr (), nullptr);
+	  print_spaces_filtered_with_print_options (level + 4, stream, flags);
+	  if (type->is_stub ())
+	    gdb_printf (stream, _("%p[<incomplete type>%p]\n"),
+			metadata_style.style ().ptr (), nullptr);
 	  else
-	    fprintfi_filtered (level + 4, stream,
-			       _("%p[<no data fields>%p]\n"),
-			       metadata_style.style ().ptr (), nullptr);
-	}
-
-      /* Start off with no specific section type, so we can print
-	 one for the first field we find, and use that section type
-	 thereafter until we find another type.  */
-
-      enum access_specifier section_type = s_none;
-
-      /* For a class, if all members are private, there's no need
-	 for a "private:" label; similarly, for a struct or union
-	 masquerading as a class, if all members are public, there's
-	 no need for a "public:" label.  */
-      bool need_access_label = need_access_label_p (type);
+	    gdb_printf (stream, _("%p[<no data fields>%p]\n"),
+			metadata_style.style ().ptr (), nullptr);
+	}
+
+      accessibility section_type = (type->is_declared_class ()
+				    ? accessibility::PRIVATE
+				    : accessibility::PUBLIC);
 
       /* If there is a base class for this type,
 	 do not print the field that it occupies.  */
 
-      int len = TYPE_NFIELDS (type);
+      int len = type->num_fields ();
       vptr_fieldno = get_vptr_fieldno (type, &basetype);
 
-      struct print_offset_data local_podata;
+      struct print_offset_data local_podata (flags);
 
       for (int i = TYPE_N_BASECLASSES (type); i < len; i++)
 	{
@@ -1151,31 +1024,28 @@ c_type_print_base_struct_union (struct t
 	     virtual table pointers are not specifically marked in
 	     the debug info, they should be artificial.  */
 	  if ((i == vptr_fieldno && type == basetype)
-	      || TYPE_FIELD_ARTIFICIAL (type, i))
+	      || type->field (i).is_artificial ())
 	    continue;
 
-	  if (need_access_label)
-	    {
-	      section_type = output_access_specifier
-		(stream, section_type, level,
-		 TYPE_FIELD_PROTECTED (type, i),
-		 TYPE_FIELD_PRIVATE (type, i), flags);
-	    }
+	  section_type
+	    = output_access_specifier (stream, section_type, level,
+				       type->field (i).accessibility (),
+				       flags);
 
-	  bool is_static = field_is_static (&TYPE_FIELD (type, i));
+	  bool is_static = type->field (i).is_static ();
 
 	  if (flags->print_offsets)
 	    podata->update (type, i, stream);
 
-	  print_spaces_filtered (level + 4, stream);
+	  print_spaces (level + 4, stream);
 	  if (is_static)
-	    fprintf_filtered (stream, "static ");
+	    gdb_printf (stream, "static ");
 
 	  int newshow = show - 1;
 
 	  if (!is_static && flags->print_offsets
-	      && (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_STRUCT
-		  || TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION))
+	      && (type->field (i).type ()->code () == TYPE_CODE_STRUCT
+		  || type->field (i).type ()->code () == TYPE_CODE_UNION))
 	    {
 	      /* If we're printing offsets and this field's type is
 		 either a struct or an union, then we're interested in
@@ -1185,7 +1055,7 @@ c_type_print_base_struct_union (struct t
 	      /* Make sure we carry our offset when we expand the
 		 struct/union.  */
 	      local_podata.offset_bitpos
-		= podata->offset_bitpos + TYPE_FIELD_BITPOS (type, i);
+		= podata->offset_bitpos + type->field (i).loc_bitpos ();
 	      /* We're entering a struct/union.  Right now,
 		 PODATA->END_BITPOS points right *after* the
 		 struct/union.  However, when printing the first field
@@ -1195,25 +1065,24 @@ c_type_print_base_struct_union (struct t
 		 the whole struct/union.  */
 	      local_podata.end_bitpos
 		= podata->end_bitpos
-		  - TYPE_LENGTH (TYPE_FIELD_TYPE (type, i)) * TARGET_CHAR_BIT;
+		  - type->field (i).type ()->length () * TARGET_CHAR_BIT;
 	    }
 
-	  c_print_type_1 (TYPE_FIELD_TYPE (type, i),
-			  TYPE_FIELD_NAME (type, i),
+	  c_print_type_1 (type->field (i).type (),
+			  type->field (i).name (),
 			  stream, newshow, level + 4,
 			  language, &local_flags, &local_podata);
 
-	  if (!is_static && TYPE_FIELD_PACKED (type, i))
+	  if (!is_static && type->field (i).is_packed ())
 	    {
 	      /* It is a bitfield.  This code does not attempt
 		 to look at the bitpos and reconstruct filler,
 		 unnamed fields.  This would lead to misleading
 		 results if the compiler does not put out fields
 		 for such things (I don't know what it does).  */
-	      fprintf_filtered (stream, " : %d",
-				TYPE_FIELD_BITSIZE (type, i));
+	      gdb_printf (stream, " : %d", type->field (i).bitsize ());
 	    }
-	  fprintf_filtered (stream, ";\n");
+	  gdb_printf (stream, ";\n");
 	}
 
       /* If there are both fields and methods, put a blank line
@@ -1233,8 +1102,8 @@ c_type_print_base_struct_union (struct t
 	    if (!TYPE_FN_FIELD_ARTIFICIAL (f, j))
 	      real_len++;
 	}
-      if (real_len > 0 && section_type != s_none)
-	fprintf_filtered (stream, "\n");
+      if (real_len > 0)
+	gdb_printf (stream, "\n");
 
       /* C++: print out the methods.  */
       for (int i = 0; i < len; i++)
@@ -1242,7 +1111,7 @@ c_type_print_base_struct_union (struct t
 	  struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
 	  int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
 	  const char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
-	  const char *name = TYPE_NAME (type);
+	  const char *name = type->name ();
 	  int is_constructor = name && strcmp (method_name,
 					       name) == 0;
 
@@ -1250,7 +1119,6 @@ c_type_print_base_struct_union (struct t
 	    {
 	      const char *mangled_name;
 	      gdb::unique_xmalloc_ptr<char> mangled_name_holder;
-	      char *demangled_name;
 	      const char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
 	      int is_full_physname_constructor =
 		TYPE_FN_FIELD_CONSTRUCTOR (f, j)
@@ -1265,22 +1133,22 @@ c_type_print_base_struct_union (struct t
 	      QUIT;
 	      section_type = output_access_specifier
 		(stream, section_type, level,
-		 TYPE_FN_FIELD_PROTECTED (f, j),
-		 TYPE_FN_FIELD_PRIVATE (f, j), flags);
+		 TYPE_FN_FIELD (f, j).accessibility,
+		 flags);
 
 	      print_spaces_filtered_with_print_options (level + 4, stream,
 							flags);
 	      if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
-		fprintf_filtered (stream, "virtual ");
+		gdb_printf (stream, "virtual ");
 	      else if (TYPE_FN_FIELD_STATIC_P (f, j))
-		fprintf_filtered (stream, "static ");
-	      if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
+		gdb_printf (stream, "static ");
+	      if (TYPE_FN_FIELD_TYPE (f, j)->target_type () == 0)
 		{
 		  /* Keep GDB from crashing here.  */
-		  fprintf_filtered (stream,
-				    _("%p[<undefined type>%p] %s;\n"),
-				    metadata_style.style ().ptr (), nullptr,
-				    TYPE_FN_FIELD_PHYSNAME (f, j));
+		  gdb_printf (stream,
+			      _("%p[<undefined type>%p] %s;\n"),
+			      metadata_style.style ().ptr (), nullptr,
+			      TYPE_FN_FIELD_PHYSNAME (f, j));
 		  break;
 		}
 	      else if (!is_constructor	/* Constructors don't
@@ -1290,10 +1158,10 @@ c_type_print_base_struct_union (struct t
 		       && !is_type_conversion_operator (type, i, j))
 		{
 		  c_print_type_no_offsets
-		    (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
+		    (TYPE_FN_FIELD_TYPE (f, j)->target_type (),
 		     "", stream, -1, 0, language, &local_flags, podata);
 
-		  fputs_filtered (" ", stream);
+		  gdb_puts (" ", stream);
 		}
 	      if (TYPE_FN_FIELD_STUB (f, j))
 		{
@@ -1304,9 +1172,9 @@ c_type_print_base_struct_union (struct t
 	      else
 		mangled_name = TYPE_FN_FIELD_PHYSNAME (f, j);
 
-	      demangled_name =
-		gdb_demangle (mangled_name,
-			      DMGL_ANSI | DMGL_PARAMS);
+	      gdb::unique_xmalloc_ptr<char> demangled_name
+		= gdb_demangle (mangled_name,
+				DMGL_ANSI | DMGL_PARAMS);
 	      if (demangled_name == NULL)
 		{
 		  /* In some cases (for instance with the HP
@@ -1333,9 +1201,9 @@ c_type_print_base_struct_union (struct t
 		}
 	      else
 		{
-		  char *p;
-		  char *demangled_no_class
-		    = remove_qualifiers (demangled_name);
+		  const char *p;
+		  const char *demangled_no_class
+		    = remove_qualifiers (demangled_name.get ());
 
 		  /* Get rid of the `static' appended by the
 		     demangler.  */
@@ -1343,22 +1211,15 @@ c_type_print_base_struct_union (struct t
 		  if (p != NULL)
 		    {
 		      int length = p - demangled_no_class;
-		      char *demangled_no_static;
-
-		      demangled_no_static
-			= (char *) xmalloc (length + 1);
-		      strncpy (demangled_no_static,
-			       demangled_no_class, length);
-		      *(demangled_no_static + length) = '\0';
-		      fputs_filtered (demangled_no_static, stream);
-		      xfree (demangled_no_static);
+		      std::string demangled_no_static (demangled_no_class,
+						       length);
+		      gdb_puts (demangled_no_static.c_str (), stream);
 		    }
 		  else
-		    fputs_filtered (demangled_no_class, stream);
-		  xfree (demangled_name);
+		    gdb_puts (demangled_no_class, stream);
 		}
 
-	      fprintf_filtered (stream, ";\n");
+	      gdb_printf (stream, ";\n");
 	    }
 	}
 
@@ -1369,8 +1230,8 @@ c_type_print_base_struct_union (struct t
 	  if (semi_local_flags.print_nested_type_limit > 0)
 	    --semi_local_flags.print_nested_type_limit;
 
-	  if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0)
-	    fprintf_filtered (stream, "\n");
+	  if (type->num_fields () != 0 || TYPE_NFN_FIELDS (type) != 0)
+	    gdb_printf (stream, "\n");
 
 	  for (int i = 0; i < TYPE_NESTED_TYPES_COUNT (type); ++i)
 	    {
@@ -1379,7 +1240,7 @@ c_type_print_base_struct_union (struct t
 	      c_print_type_no_offsets (TYPE_NESTED_TYPES_FIELD_TYPE (type, i),
 				       "", stream, show, level + 4,
 				       language, &semi_local_flags, podata);
-	      fprintf_filtered (stream, ";\n");
+	      gdb_printf (stream, ";\n");
 	    }
 	}
 
@@ -1387,28 +1248,26 @@ c_type_print_base_struct_union (struct t
 
       if (TYPE_TYPEDEF_FIELD_COUNT (type) != 0 && flags->print_typedefs)
 	{
-	  if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0
+	  if (type->num_fields () != 0 || TYPE_NFN_FIELDS (type) != 0
 	      || TYPE_NESTED_TYPES_COUNT (type) != 0)
-	    fprintf_filtered (stream, "\n");
+	    gdb_printf (stream, "\n");
 
 	  for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); i++)
 	    {
 	      struct type *target = TYPE_TYPEDEF_FIELD_TYPE (type, i);
 
 	      /* Dereference the typedef declaration itself.  */
-	      gdb_assert (TYPE_CODE (target) == TYPE_CODE_TYPEDEF);
-	      target = TYPE_TARGET_TYPE (target);
+	      gdb_assert (target->code () == TYPE_CODE_TYPEDEF);
+	      target = target->target_type ();
+
+	      section_type = (output_access_specifier
+			      (stream, section_type, level,
+			       TYPE_TYPEDEF_FIELD (type, i).accessibility,
+			       flags));
 
-	      if (need_access_label)
-		{
-		  section_type = output_access_specifier
-		    (stream, section_type, level,
-		     TYPE_TYPEDEF_FIELD_PROTECTED (type, i),
-		     TYPE_TYPEDEF_FIELD_PRIVATE (type, i), flags);
-		}
 	      print_spaces_filtered_with_print_options (level + 4, stream,
 							flags);
-	      fprintf_filtered (stream, "typedef ");
+	      gdb_printf (stream, "typedef ");
 
 	      /* We want to print typedefs with substitutions
 		 from the template parameters or globally-known
@@ -1417,7 +1276,7 @@ c_type_print_base_struct_union (struct t
 				       TYPE_TYPEDEF_FIELD_NAME (type, i),
 				       stream, show - 1, level + 4,
 				       language, &semi_local_flags, podata);
-	      fprintf_filtered (stream, ";\n");
+	      gdb_printf (stream, ";\n");
 	    }
 	}
 
@@ -1426,12 +1285,12 @@ c_type_print_base_struct_union (struct t
 	  if (show > 0)
 	    podata->finish (type, level, stream);
 
-	  print_spaces_filtered (print_offset_data::indentation, stream);
+	  print_spaces (print_offset_data::indentation, stream);
 	  if (level == 0)
-	    print_spaces_filtered (2, stream);
+	    print_spaces (2, stream);
 	}
 
-      fprintfi_filtered (level, stream, "}");
+      gdb_printf (stream, "%*s}", level, "");
     }
 }
 
@@ -1475,9 +1334,9 @@ c_type_print_base_1 (struct type *type,
      always just print the type name directly from the type.  */
 
   if (show <= 0
-      && TYPE_NAME (type) != NULL)
+      && type->name () != NULL)
     {
-      c_type_print_modifier (type, stream, 0, 1);
+      c_type_print_modifier (type, stream, 0, 1, language);
 
       /* If we have "typedef struct foo {. . .} bar;" do we want to
 	 print it as "struct foo" or as "bar"?  Pick the latter for
@@ -1487,42 +1346,42 @@ c_type_print_base_1 (struct type *type,
 	 way. */
       if (language == language_c || language == language_minimal)
 	{
-	  if (TYPE_CODE (type) == TYPE_CODE_UNION)
-	    fprintf_filtered (stream, "union ");
-	  else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+	  if (type->code () == TYPE_CODE_UNION)
+	    gdb_printf (stream, "union ");
+	  else if (type->code () == TYPE_CODE_STRUCT)
 	    {
-	      if (TYPE_DECLARED_CLASS (type))
-		fprintf_filtered (stream, "class ");
+	      if (type->is_declared_class ())
+		gdb_printf (stream, "class ");
 	      else
-		fprintf_filtered (stream, "struct ");
+		gdb_printf (stream, "struct ");
 	    }
-	  else if (TYPE_CODE (type) == TYPE_CODE_ENUM)
-	    fprintf_filtered (stream, "enum ");
+	  else if (type->code () == TYPE_CODE_ENUM)
+	    gdb_printf (stream, "enum ");
 	}
 
-      print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
+      print_name_maybe_canonical (type->name (), flags, stream);
       return;
     }
 
   type = check_typedef (type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_TYPEDEF:
       /* If we get here, the typedef doesn't have a name, and we
-	 couldn't resolve TYPE_TARGET_TYPE.  Not much we can do.  */
-      gdb_assert (TYPE_NAME (type) == NULL);
-      gdb_assert (TYPE_TARGET_TYPE (type) == NULL);
+	 couldn't resolve type::target_type.  Not much we can do.  */
+      gdb_assert (type->name () == NULL);
+      gdb_assert (type->target_type () == NULL);
       fprintf_styled (stream, metadata_style.style (),
 		      _("<unnamed typedef>"));
       break;
 
     case TYPE_CODE_FUNC:
     case TYPE_CODE_METHOD:
-      if (TYPE_TARGET_TYPE (type) == NULL)
+      if (type->target_type () == NULL)
 	type_print_unknown_return_type (stream);
       else
-	c_type_print_base_1 (TYPE_TARGET_TYPE (type),
+	c_type_print_base_1 (type->target_type (),
 			     stream, show, level, language, flags, podata);
       break;
     case TYPE_CODE_ARRAY:
@@ -1531,7 +1390,7 @@ c_type_print_base_1 (struct type *type,
     case TYPE_CODE_REF:
     case TYPE_CODE_RVALUE_REF:
     case TYPE_CODE_METHODPTR:
-      c_type_print_base_1 (TYPE_TARGET_TYPE (type),
+      c_type_print_base_1 (type->target_type (),
 			   stream, show, level, language, flags, podata);
       break;
 
@@ -1542,32 +1401,32 @@ c_type_print_base_1 (struct type *type,
       break;
 
     case TYPE_CODE_ENUM:
-      c_type_print_modifier (type, stream, 0, 1);
-      fprintf_filtered (stream, "enum ");
-      if (TYPE_DECLARED_CLASS (type))
-	fprintf_filtered (stream, "class ");
+      c_type_print_modifier (type, stream, 0, 1, language);
+      gdb_printf (stream, "enum ");
+      if (type->is_declared_class ())
+	gdb_printf (stream, "class ");
       /* Print the tag name if it exists.
-         The aCC compiler emits a spurious 
-         "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
-         tag for unnamed struct/union/enum's, which we don't
-         want to print.  */
-      if (TYPE_NAME (type) != NULL
-	  && !startswith (TYPE_NAME (type), "{unnamed"))
+	 The aCC compiler emits a spurious 
+	 "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
+	 tag for unnamed struct/union/enum's, which we don't
+	 want to print.  */
+      if (type->name () != NULL
+	  && !startswith (type->name (), "{unnamed"))
 	{
-	  print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
+	  print_name_maybe_canonical (type->name (), flags, stream);
 	  if (show > 0)
-	    fputs_filtered (" ", stream);
+	    gdb_puts (" ", stream);
 	}
 
-      wrap_here ("    ");
+      stream->wrap_here (4);
       if (show < 0)
 	{
 	  /* If we just printed a tag name, no need to print anything
 	     else.  */
-	  if (TYPE_NAME (type) == NULL)
-	    fprintf_filtered (stream, "{...}");
+	  if (type->name () == NULL)
+	    gdb_printf (stream, "{...}");
 	}
-      else if (show > 0 || TYPE_NAME (type) == NULL)
+      else if (show > 0 || type->name () == NULL)
 	{
 	  LONGEST lastval = 0;
 
@@ -1579,32 +1438,33 @@ c_type_print_base_1 (struct type *type,
 	     print too much than too little; but conversely not to
 	     print something egregiously outside the current
 	     language's syntax.  */
-	  if (language == language_cplus && TYPE_TARGET_TYPE (type) != NULL)
+	  if (language == language_cplus && type->target_type () != NULL)
 	    {
-	      struct type *underlying = check_typedef (TYPE_TARGET_TYPE (type));
+	      struct type *underlying = check_typedef (type->target_type ());
 
-	      if (TYPE_NAME (underlying) != NULL)
-		fprintf_filtered (stream, ": %s ", TYPE_NAME (underlying));
+	      if (underlying->name () != NULL)
+		gdb_printf (stream, ": %s ", underlying->name ());
 	    }
 
-	  fprintf_filtered (stream, "{");
-	  len = TYPE_NFIELDS (type);
+	  gdb_printf (stream, "{");
+	  len = type->num_fields ();
 	  for (i = 0; i < len; i++)
 	    {
 	      QUIT;
 	      if (i)
-		fprintf_filtered (stream, ", ");
-	      wrap_here ("    ");
-	      fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
-	      if (lastval != TYPE_FIELD_ENUMVAL (type, i))
+		gdb_printf (stream, ", ");
+	      stream->wrap_here (4);
+	      fputs_styled (type->field (i).name (),
+			    variable_name_style.style (), stream);
+	      if (lastval != type->field (i).loc_enumval ())
 		{
-		  fprintf_filtered (stream, " = %s",
-				    plongest (TYPE_FIELD_ENUMVAL (type, i)));
-		  lastval = TYPE_FIELD_ENUMVAL (type, i);
+		  gdb_printf (stream, " = %s",
+			      plongest (type->field (i).loc_enumval ()));
+		  lastval = type->field (i).loc_enumval ();
 		}
 	      lastval++;
 	    }
-	  fprintf_filtered (stream, "}");
+	  gdb_printf (stream, "}");
 	}
       break;
 
@@ -1614,61 +1474,63 @@ c_type_print_base_1 (struct type *type,
 
 	local_flags.local_typedefs = NULL;
 
-	c_type_print_modifier (type, stream, 0, 1);
-	fprintf_filtered (stream, "flag ");
-	print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
+	c_type_print_modifier (type, stream, 0, 1, language);
+	gdb_printf (stream, "flag ");
+	print_name_maybe_canonical (type->name (), flags, stream);
 	if (show > 0)
 	  {
-	    fputs_filtered (" ", stream);
-	    fprintf_filtered (stream, "{\n");
-	    if (TYPE_NFIELDS (type) == 0)
+	    gdb_puts (" ", stream);
+	    gdb_printf (stream, "{\n");
+	    if (type->num_fields () == 0)
 	      {
-		if (TYPE_STUB (type))
-		  fprintfi_filtered (level + 4, stream,
-				     _("%p[<incomplete type>%p]\n"),
-				     metadata_style.style ().ptr (), nullptr);
+		if (type->is_stub ())
+		  gdb_printf (stream,
+			      _("%*s%p[<incomplete type>%p]\n"),
+			      level + 4, "",
+			      metadata_style.style ().ptr (), nullptr);
 		else
-		  fprintfi_filtered (level + 4, stream,
-				     _("%p[<no data fields>%p]\n"),
-				     metadata_style.style ().ptr (), nullptr);
+		  gdb_printf (stream,
+			      _("%*s%p[<no data fields>%p]\n"),
+			      level + 4, "",
+			      metadata_style.style ().ptr (), nullptr);
 	      }
-	    len = TYPE_NFIELDS (type);
+	    len = type->num_fields ();
 	    for (i = 0; i < len; i++)
 	      {
 		QUIT;
-		print_spaces_filtered (level + 4, stream);
+		print_spaces (level + 4, stream);
 		/* We pass "show" here and not "show - 1" to get enum types
 		   printed.  There's no other way to see them.  */
-		c_print_type_1 (TYPE_FIELD_TYPE (type, i),
-				TYPE_FIELD_NAME (type, i),
+		c_print_type_1 (type->field (i).type (),
+				type->field (i).name (),
 				stream, show, level + 4,
 				language, &local_flags, podata);
-		fprintf_filtered (stream, " @%s",
-				  plongest (TYPE_FIELD_BITPOS (type, i)));
-		if (TYPE_FIELD_BITSIZE (type, i) > 1)
+		gdb_printf (stream, " @%s",
+			    plongest (type->field (i).loc_bitpos ()));
+		if (type->field (i).bitsize () > 1)
 		  {
-		    fprintf_filtered (stream, "-%s",
-				      plongest (TYPE_FIELD_BITPOS (type, i)
-						+ TYPE_FIELD_BITSIZE (type, i)
-						- 1));
+		    gdb_printf (stream, "-%s",
+				plongest (type->field (i).loc_bitpos ()
+					  + type->field (i).bitsize ()
+					  - 1));
 		  }
-		fprintf_filtered (stream, ";\n");
+		gdb_printf (stream, ";\n");
 	      }
-	    fprintfi_filtered (level, stream, "}");
+	    gdb_printf (stream, "%*s}", level, "");
 	  }
       }
       break;
 
     case TYPE_CODE_VOID:
-      fprintf_filtered (stream, "void");
+      gdb_printf (stream, "void");
       break;
 
     case TYPE_CODE_UNDEF:
-      fprintf_filtered (stream, _("struct <unknown>"));
+      gdb_printf (stream, _("struct <unknown>"));
       break;
 
     case TYPE_CODE_ERROR:
-      fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
+      gdb_printf (stream, "%s", TYPE_ERROR_NAME (type));
       break;
 
     case TYPE_CODE_RANGE:
@@ -1676,27 +1538,31 @@ c_type_print_base_1 (struct type *type,
       fprintf_styled (stream, metadata_style.style (), _("<range type>"));
       break;
 
+    case TYPE_CODE_FIXED_POINT:
+      print_type_fixed_point (type, stream);
+      break;
+
     case TYPE_CODE_NAMESPACE:
-      fputs_filtered ("namespace ", stream);
-      fputs_filtered (TYPE_NAME (type), stream);
+      gdb_puts ("namespace ", stream);
+      gdb_puts (type->name (), stream);
       break;
 
     default:
       /* Handle types not explicitly handled by the other cases, such
-         as fundamental types.  For these, just print whatever the
-         type name is, as recorded in the type itself.  If there is no
-         type name, then complain.  */
-      if (TYPE_NAME (type) != NULL)
+	 as fundamental types.  For these, just print whatever the
+	 type name is, as recorded in the type itself.  If there is no
+	 type name, then complain.  */
+      if (type->name () != NULL)
 	{
-	  c_type_print_modifier (type, stream, 0, 1);
-	  print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
+	  c_type_print_modifier (type, stream, 0, 1, language);
+	  print_name_maybe_canonical (type->name (), flags, stream);
 	}
       else
 	{
 	  /* At least for dump_symtab, it is important that this not
 	     be an error ().  */
 	  fprintf_styled (stream, metadata_style.style (),
-			  _("<invalid type code %d>"), TYPE_CODE (type));
+			  _("<invalid type code %d>"), type->code ());
 	}
       break;
     }
@@ -1709,7 +1575,7 @@ c_type_print_base (struct type *type, st
 		   int show, int level,
 		   const struct type_print_options *flags)
 {
-  struct print_offset_data podata;
+  struct print_offset_data podata (flags);
 
   c_type_print_base_1 (type, stream, show, level,
 		       current_language->la_language, flags, &podata);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-valprint.c ./gdb/c-valprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-valprint.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/c-valprint.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing C values for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -66,11 +66,11 @@ c_textual_element_type (struct type *typ
   true_type = check_typedef (type);
 
   /* TYPE_CODE_CHAR is always textual.  */
-  if (TYPE_CODE (true_type) == TYPE_CODE_CHAR)
+  if (true_type->code () == TYPE_CODE_CHAR)
     return 1;
 
   /* Any other character-like types must be integral.  */
-  if (TYPE_CODE (true_type) != TYPE_CODE_INT)
+  if (true_type->code () != TYPE_CODE_INT)
     return 0;
 
   /* We peel typedefs one by one, looking for a match.  */
@@ -78,17 +78,17 @@ c_textual_element_type (struct type *typ
   while (iter_type)
     {
       /* Check the name of the type.  */
-      if (TYPE_NAME (iter_type) && textual_name (TYPE_NAME (iter_type)))
+      if (iter_type->name () && textual_name (iter_type->name ()))
 	return 1;
 
-      if (TYPE_CODE (iter_type) != TYPE_CODE_TYPEDEF)
+      if (iter_type->code () != TYPE_CODE_TYPEDEF)
 	break;
 
       /* Peel a single typedef.  If the typedef doesn't have a target
 	 type, we use check_typedef and hope the result is ok -- it
 	 might be for C++, where wchar_t is a built-in type.  */
-      if (TYPE_TARGET_TYPE (iter_type))
-	iter_type = TYPE_TARGET_TYPE (iter_type);
+      if (iter_type->target_type ())
+	iter_type = iter_type->target_type ();
       else
 	iter_type = check_typedef (iter_type);
     }
@@ -97,8 +97,8 @@ c_textual_element_type (struct type *typ
     {
       /* Print this as a string if we can manage it.  For now, no wide
 	 character support.  */
-      if (TYPE_CODE (true_type) == TYPE_CODE_INT
-	  && TYPE_LENGTH (true_type) == 1)
+      if (true_type->code () == TYPE_CODE_INT
+	  && true_type->length () == 1)
 	return 1;
     }
   else
@@ -106,8 +106,8 @@ c_textual_element_type (struct type *typ
       /* If a one-byte TYPE_CODE_INT is missing the not-a-character
 	 flag, then we treat it as text; otherwise, we assume it's
 	 being used as data.  */
-      if (TYPE_CODE (true_type) == TYPE_CODE_INT
-	  && TYPE_LENGTH (true_type) == 1
+      if (true_type->code () == TYPE_CODE_INT
+	  && true_type->length () == 1
 	  && !TYPE_NOTTEXT (true_type))
 	return 1;
     }
@@ -121,7 +121,7 @@ static const struct generic_val_print_de
 {
   "",
   " + ",
-  " * I",
+  "i",
   "true",
   "false",
   "void",
@@ -144,9 +144,9 @@ print_unpacked_pointer (struct type *typ
 			const struct value_print_options *options)
 {
   int want_space = 0;
-  struct gdbarch *gdbarch = get_type_arch (type);
+  struct gdbarch *gdbarch = type->arch ();
 
-  if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
+  if (elttype->code () == TYPE_CODE_FUNC)
     {
       /* Try to print what function it points to.  */
       print_function_pointer_address (options, gdbarch, address, stream);
@@ -158,7 +158,7 @@ print_unpacked_pointer (struct type *typ
 					 demangle);
   else if (options->addressprint)
     {
-      fputs_filtered (paddress (gdbarch, address), stream);
+      gdb_puts (paddress (gdbarch, address), stream);
       want_space = 1;
     }
 
@@ -169,7 +169,7 @@ print_unpacked_pointer (struct type *typ
       && address != 0)
     {
       if (want_space)
-	fputs_filtered (" ", stream);
+	gdb_puts (" ", stream);
       val_print_string (unresolved_elttype, NULL, address, -1, stream, options);
     }
   else if (cp_is_vtbl_member (type))
@@ -182,13 +182,13 @@ print_unpacked_pointer (struct type *typ
       /* If 'symbol_print' is set, we did the work above.  */
       if (!options->symbol_print
 	  && (msymbol.minsym != NULL)
-	  && (vt_address == BMSYMBOL_VALUE_ADDRESS (msymbol)))
+	  && (vt_address == msymbol.value_address ()))
 	{
 	  if (want_space)
-	    fputs_filtered (" ", stream);
-	  fputs_filtered (" <", stream);
-	  fputs_filtered (msymbol.minsym->print_name (), stream);
-	  fputs_filtered (">", stream);
+	    gdb_puts (" ", stream);
+	  gdb_puts (" <", stream);
+	  gdb_puts (msymbol.minsym->print_name (), stream);
+	  gdb_puts (">", stream);
 	  want_space = 1;
 	}
 
@@ -199,18 +199,18 @@ print_unpacked_pointer (struct type *typ
 	  struct type *wtype;
 
 	  if (want_space)
-	    fputs_filtered (" ", stream);
+	    gdb_puts (" ", stream);
 
 	  if (msymbol.minsym != NULL)
 	    {
 	      const char *search_name = msymbol.minsym->search_name ();
 	      wsym = lookup_symbol_search_name (search_name, NULL,
-						VAR_DOMAIN).symbol;
+						SEARCH_VAR_DOMAIN).symbol;
 	    }
 
 	  if (wsym)
 	    {
-	      wtype = SYMBOL_TYPE (wsym);
+	      wtype = wsym->type ();
 	    }
 	  else
 	    {
@@ -221,53 +221,45 @@ print_unpacked_pointer (struct type *typ
 			    current_language);
 	  if (options->prettyformat)
 	    {
-	      fprintf_filtered (stream, "\n");
-	      print_spaces_filtered (2 + 2 * recurse, stream);
+	      gdb_printf (stream, "\n");
+	      print_spaces (2 + 2 * recurse, stream);
 	    }
 	}
     }
 }
 
-/* c_val_print helper for TYPE_CODE_ARRAY.  */
+/* c_value_print helper for TYPE_CODE_ARRAY.  */
 
 static void
-c_val_print_array (struct type *type, const gdb_byte *valaddr,
-		   int embedded_offset, CORE_ADDR address,
-		   struct ui_file *stream, int recurse,
-		   struct value *original_value,
-		   const struct value_print_options *options)
-{
-  struct type *unresolved_elttype = TYPE_TARGET_TYPE (type);
+c_value_print_array (struct value *val,
+		     struct ui_file *stream, int recurse,
+		     const struct value_print_options *options)
+{
+  struct type *type = check_typedef (val->type ());
+  CORE_ADDR address = val->address ();
+  const gdb_byte *valaddr = val->contents_for_printing ().data ();
+  struct type *unresolved_elttype = type->target_type ();
   struct type *elttype = check_typedef (unresolved_elttype);
-  struct gdbarch *arch = get_type_arch (type);
-  int unit_size = gdbarch_addressable_memory_unit_size (arch);
 
-  if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (unresolved_elttype) > 0)
+  if (type->length () > 0 && unresolved_elttype->length () > 0)
     {
       LONGEST low_bound, high_bound;
       int eltlen, len;
       enum bfd_endian byte_order = type_byte_order (type);
-      unsigned int i = 0;	/* Number of characters printed.  */
 
       if (!get_array_bounds (type, &low_bound, &high_bound))
 	error (_("Could not determine the array high bound"));
 
-      eltlen = TYPE_LENGTH (elttype);
+      eltlen = elttype->length ();
       len = high_bound - low_bound + 1;
-      if (options->prettyformat_arrays)
-	{
-	  print_spaces_filtered (2 + 2 * recurse, stream);
-	}
 
       /* Print arrays of textual chars with a string syntax, as
 	 long as the entire array is valid.  */
       if (c_textual_element_type (unresolved_elttype,
 				  options->format)
-	  && value_bytes_available (original_value, embedded_offset,
-				    TYPE_LENGTH (type))
-	  && !value_bits_any_optimized_out (original_value,
-					    TARGET_CHAR_BIT * embedded_offset,
-					    TARGET_CHAR_BIT * TYPE_LENGTH (type)))
+	  && val->bytes_available (0, type->length ())
+	  && !val->bits_any_optimized_out (0,
+					   TARGET_CHAR_BIT * type->length ()))
 	{
 	  int force_ellipses = 0;
 
@@ -275,271 +267,186 @@ c_val_print_array (struct type *type, co
 	     print elements up to it.  */
 	  if (options->stop_print_at_null)
 	    {
+	      unsigned int print_max_chars = get_print_max_chars (options);
 	      unsigned int temp_len;
 
 	      for (temp_len = 0;
 		   (temp_len < len
-		    && temp_len < options->print_max
-		    && extract_unsigned_integer (valaddr
-						 + embedded_offset * unit_size
-						 + temp_len * eltlen,
+		    && temp_len < print_max_chars
+		    && extract_unsigned_integer (valaddr + temp_len * eltlen,
 						 eltlen, byte_order) != 0);
 		   ++temp_len)
 		;
 
-	      /* Force LA_PRINT_STRING to print ellipses if
+	      /* Force printstr to print ellipses if
 		 we've printed the maximum characters and
 		 the next character is not \000.  */
-	      if (temp_len == options->print_max && temp_len < len)
+	      if (temp_len == print_max_chars && temp_len < len)
 		{
-		  ULONGEST val
-		    = extract_unsigned_integer (valaddr
-						+ embedded_offset * unit_size
-						+ temp_len * eltlen,
+		  ULONGEST ival
+		    = extract_unsigned_integer (valaddr + temp_len * eltlen,
 						eltlen, byte_order);
-		  if (val != 0)
+		  if (ival != 0)
 		    force_ellipses = 1;
 		}
 
 	      len = temp_len;
 	    }
 
-	  LA_PRINT_STRING (stream, unresolved_elttype,
-			   valaddr + embedded_offset * unit_size, len,
-			   NULL, force_ellipses, options);
-	  i = len;
+	  current_language->printstr (stream, unresolved_elttype, valaddr, len,
+				      NULL, force_ellipses, options);
 	}
       else
 	{
-	  fprintf_filtered (stream, "{");
+	  unsigned int i = 0;
+	  gdb_printf (stream, "{");
 	  /* If this is a virtual function table, print the 0th
 	     entry specially, and the rest of the members
 	     normally.  */
 	  if (cp_is_vtbl_ptr_type (elttype))
 	    {
 	      i = 1;
-	      fprintf_filtered (stream, _("%d vtable entries"),
-				len - 1);
-	    }
-	  else
-	    {
-	      i = 0;
+	      gdb_printf (stream, _("%d vtable entries"),
+			  len - 1);
 	    }
-	  val_print_array_elements (type, embedded_offset,
-				    address, stream,
-				    recurse, original_value, options, i);
-	  fprintf_filtered (stream, "}");
+	  value_print_array_elements (val, stream, recurse, options, i);
+	  gdb_printf (stream, "}");
 	}
     }
   else
     {
       /* Array of unspecified length: treat like pointer to first elt.  */
       print_unpacked_pointer (type, elttype, unresolved_elttype, valaddr,
-			      embedded_offset, address + embedded_offset,
-			      stream, recurse, options);
+			      0, address, stream, recurse, options);
     }
 }
 
-/* c_val_print helper for TYPE_CODE_PTR.  */
+/* c_value_print_inner helper for TYPE_CODE_PTR.  */
 
 static void
-c_val_print_ptr (struct type *type, const gdb_byte *valaddr,
-		 int embedded_offset, struct ui_file *stream, int recurse,
-		 struct value *original_value,
-		 const struct value_print_options *options)
+c_value_print_ptr (struct value *val, struct ui_file *stream, int recurse,
+		   const struct value_print_options *options)
 {
-  struct gdbarch *arch = get_type_arch (type);
-  int unit_size = gdbarch_addressable_memory_unit_size (arch);
-
   if (options->format && options->format != 's')
     {
-      val_print_scalar_formatted (type, embedded_offset,
-				  original_value, options, 0, stream);
+      value_print_scalar_formatted (val, options, 0, stream);
+      return;
     }
-  else if (options->vtblprint && cp_is_vtbl_ptr_type (type))
+
+  struct type *type = check_typedef (val->type ());
+  const gdb_byte *valaddr = val->contents_for_printing ().data ();
+
+  if (options->vtblprint && cp_is_vtbl_ptr_type (type))
     {
       /* Print the unmangled name if desired.  */
       /* Print vtable entry - we only get here if we ARE using
 	 -fvtable_thunks.  (Otherwise, look under
 	 TYPE_CODE_STRUCT.)  */
-      CORE_ADDR addr
-	= extract_typed_address (valaddr + embedded_offset, type);
-      struct gdbarch *gdbarch = get_type_arch (type);
+      CORE_ADDR addr = extract_typed_address (valaddr, type);
 
-      print_function_pointer_address (options, gdbarch, addr, stream);
+      print_function_pointer_address (options, type->arch (), addr, stream);
     }
   else
     {
-      struct type *unresolved_elttype = TYPE_TARGET_TYPE (type);
+      struct type *unresolved_elttype = type->target_type ();
       struct type *elttype = check_typedef (unresolved_elttype);
-      CORE_ADDR addr = unpack_pointer (type,
-				       valaddr + embedded_offset * unit_size);
+      CORE_ADDR addr = unpack_pointer (type, valaddr);
 
       print_unpacked_pointer (type, elttype, unresolved_elttype, valaddr,
-			      embedded_offset, addr, stream, recurse, options);
+			      0, addr, stream, recurse, options);
     }
 }
 
-/* c_val_print helper for TYPE_CODE_STRUCT.  */
+/* c_value_print helper for TYPE_CODE_STRUCT and TYPE_CODE_UNION.  */
 
 static void
-c_val_print_struct (struct type *type, const gdb_byte *valaddr,
-		    int embedded_offset, CORE_ADDR address,
-		    struct ui_file *stream, int recurse,
-		    struct value *original_value,
-		    const struct value_print_options *options)
+c_value_print_struct (struct value *val, struct ui_file *stream, int recurse,
+		      const struct value_print_options *options)
 {
-  if (options->vtblprint && cp_is_vtbl_ptr_type (type))
+  struct type *type = check_typedef (val->type ());
+
+  if (type->code () == TYPE_CODE_UNION && recurse && !options->unionprint)
+    gdb_printf (stream, "{...}");
+  else if (options->vtblprint && cp_is_vtbl_ptr_type (type))
     {
       /* Print the unmangled name if desired.  */
       /* Print vtable entry - we only get here if NOT using
 	 -fvtable_thunks.  (Otherwise, look under
 	 TYPE_CODE_PTR.)  */
-      struct gdbarch *gdbarch = get_type_arch (type);
-      int offset = (embedded_offset
-		    + TYPE_FIELD_BITPOS (type,
-					 VTBL_FNADDR_OFFSET) / 8);
-      struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET);
+      int offset = type->field (VTBL_FNADDR_OFFSET).loc_bitpos () / 8;
+      struct type *field_type = type->field (VTBL_FNADDR_OFFSET).type ();
+      const gdb_byte *valaddr = val->contents_for_printing ().data ();
       CORE_ADDR addr = extract_typed_address (valaddr + offset, field_type);
 
-      print_function_pointer_address (options, gdbarch, addr, stream);
+      print_function_pointer_address (options, type->arch (), addr, stream);
     }
   else
-    cp_print_value_fields_rtti (type, valaddr,
-				embedded_offset, address,
-				stream, recurse,
-				original_value, options,
-				NULL, 0);
+    cp_print_value_fields (val, stream, recurse, options, NULL, 0);
 }
 
-/* c_val_print helper for TYPE_CODE_UNION.  */
+/* c_value_print helper for TYPE_CODE_INT.  */
 
 static void
-c_val_print_union (struct type *type, const gdb_byte *valaddr,
-		   int embedded_offset, CORE_ADDR address,
-		   struct ui_file *stream, int recurse,
-		   struct value *original_value,
+c_value_print_int (struct value *val, struct ui_file *stream,
 		   const struct value_print_options *options)
 {
-  if (recurse && !options->unionprint)
-    {
-      fprintf_filtered (stream, "{...}");
-     }
-  else
-    {
-      c_val_print_struct (type, valaddr, embedded_offset, address, stream,
-			  recurse, original_value, options);
-    }
-}
-
-/* c_val_print helper for TYPE_CODE_INT.  */
-
-static void
-c_val_print_int (struct type *type, struct type *unresolved_type,
-		 const gdb_byte *valaddr, int embedded_offset,
-		 struct ui_file *stream, struct value *original_value,
-		 const struct value_print_options *options)
-{
-  struct gdbarch *arch = get_type_arch (type);
-  int unit_size = gdbarch_addressable_memory_unit_size (arch);
-
   if (options->format || options->output_format)
     {
       struct value_print_options opts = *options;
 
       opts.format = (options->format ? options->format
 		     : options->output_format);
-      val_print_scalar_formatted (type, embedded_offset,
-				  original_value, &opts, 0, stream);
+      value_print_scalar_formatted (val, &opts, 0, stream);
     }
   else
     {
-      val_print_scalar_formatted (type, embedded_offset,
-				  original_value, options, 0, stream);
+      value_print_scalar_formatted (val, options, 0, stream);
       /* C and C++ has no single byte int type, char is used
 	 instead.  Since we don't know whether the value is really
 	 intended to be used as an integer or a character, print
 	 the character equivalent as well.  */
-      if (c_textual_element_type (unresolved_type, options->format))
+      struct type *type = val->type ();
+      const gdb_byte *valaddr = val->contents_for_printing ().data ();
+      if (c_textual_element_type (type, options->format))
 	{
-	  fputs_filtered (" ", stream);
-	  LA_PRINT_CHAR (unpack_long (type,
-				      valaddr + embedded_offset * unit_size),
-			 unresolved_type, stream);
+	  gdb_puts (" ", stream);
+	  current_language->printchar (unpack_long (type, valaddr), type,
+				       stream);
 	}
     }
 }
 
-/* c_val_print helper for TYPE_CODE_MEMBERPTR.  */
-
-static void
-c_val_print_memberptr (struct type *type, const gdb_byte *valaddr,
-		       int embedded_offset, CORE_ADDR address,
-		       struct ui_file *stream, int recurse,
-		       struct value *original_value,
-		       const struct value_print_options *options)
-{
-  if (!options->format)
-    {
-      cp_print_class_member (valaddr + embedded_offset, type, stream, "&");
-    }
-  else
-    {
-      generic_val_print (type, embedded_offset, address, stream,
-			 recurse, original_value, options, &c_decorations);
-    }
-}
-
-/* See val_print for a description of the various parameters of this
-   function; they are identical.  */
+/* See c-lang.h.  */
 
 void
-c_val_print (struct type *type,
-	     int embedded_offset, CORE_ADDR address,
-	     struct ui_file *stream, int recurse,
-	     struct value *original_value,
-	     const struct value_print_options *options)
+c_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
+		     const struct value_print_options *options)
 {
-  struct type *unresolved_type = type;
-  const gdb_byte *valaddr = value_contents_for_printing (original_value);
+  struct type *type = val->type ();
 
   type = check_typedef (type);
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_ARRAY:
-      c_val_print_array (type, valaddr, embedded_offset, address, stream,
-			 recurse, original_value, options);
-      break;
-
-    case TYPE_CODE_METHODPTR:
-      cplus_print_method_ptr (valaddr + embedded_offset, type, stream);
+      c_value_print_array (val, stream, recurse, options);
       break;
 
     case TYPE_CODE_PTR:
-      c_val_print_ptr (type, valaddr, embedded_offset, stream, recurse,
-		       original_value, options);
+      c_value_print_ptr (val, stream, recurse, options);
       break;
 
     case TYPE_CODE_UNION:
-      c_val_print_union (type, valaddr, embedded_offset, address, stream,
-			 recurse, original_value, options);
-      break;
-
     case TYPE_CODE_STRUCT:
-      c_val_print_struct (type, valaddr, embedded_offset, address, stream,
-			  recurse, original_value, options);
+      c_value_print_struct (val, stream, recurse, options);
       break;
 
+    case TYPE_CODE_CHAR:
     case TYPE_CODE_INT:
-      c_val_print_int (type, unresolved_type, valaddr, embedded_offset, stream,
-		       original_value, options);
+      c_value_print_int (val, stream, options);
       break;
 
+    case TYPE_CODE_METHODPTR:
     case TYPE_CODE_MEMBERPTR:
-      c_val_print_memberptr (type, valaddr, embedded_offset, address, stream,
-			     recurse, original_value, options);
-      break;
-
     case TYPE_CODE_REF:
     case TYPE_CODE_RVALUE_REF:
     case TYPE_CODE_ENUM:
@@ -554,25 +461,23 @@ c_val_print (struct type *type,
     case TYPE_CODE_ERROR:
     case TYPE_CODE_UNDEF:
     case TYPE_CODE_COMPLEX:
-    case TYPE_CODE_CHAR:
     default:
-      generic_val_print (type, embedded_offset, address,
-			 stream, recurse, original_value, options,
-			 &c_decorations);
+      generic_value_print (val, stream, recurse, options, &c_decorations);
       break;
     }
 }
+
 
 void
 c_value_print (struct value *val, struct ui_file *stream, 
 	       const struct value_print_options *options)
 {
-  struct type *type, *real_type, *val_type;
+  struct type *type, *real_type;
   int full, using_enc;
   LONGEST top;
   struct value_print_options opts = *options;
 
-  opts.deref_ref = 1;
+  opts.deref_ref = true;
 
   /* If it is a pointer, indicate what it points to.
 
@@ -581,29 +486,27 @@ c_value_print (struct value *val, struct
      C++: if it is a member pointer, we will take care
      of that when we print it.  */
 
-  /* Preserve the original type before stripping typedefs.  We prefer
-     to pass down the original type when possible, but for local
-     checks it is better to look past the typedefs.  */
-  val_type = value_type (val);
-  type = check_typedef (val_type);
+  type = check_typedef (val->type ());
 
-  if (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type))
+  if (type->is_pointer_or_reference ())
     {
+      struct type *original_type = val->type ();
+
       /* Hack:  remove (char *) for char strings.  Their
-         type is indicated by the quoted string anyway.
-         (Don't use c_textual_element_type here; quoted strings
-         are always exactly (char *), (wchar_t *), or the like.  */
-      if (TYPE_CODE (val_type) == TYPE_CODE_PTR
-	  && TYPE_NAME (val_type) == NULL
-	  && TYPE_NAME (TYPE_TARGET_TYPE (val_type)) != NULL
-	  && (strcmp (TYPE_NAME (TYPE_TARGET_TYPE (val_type)),
+	 type is indicated by the quoted string anyway.
+	 (Don't use c_textual_element_type here; quoted strings
+	 are always exactly (char *), (wchar_t *), or the like.  */
+      if (original_type->code () == TYPE_CODE_PTR
+	  && original_type->name () == NULL
+	  && original_type->target_type ()->name () != NULL
+	  && (strcmp (original_type->target_type ()->name (),
 		      "char") == 0
-	      || textual_name (TYPE_NAME (TYPE_TARGET_TYPE (val_type)))))
+	      || textual_name (original_type->target_type ()->name ())))
 	{
 	  /* Print nothing.  */
 	}
       else if (options->objectprint
-	       && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
+	       && (type->target_type ()->code () == TYPE_CODE_STRUCT))
 	{
 	  int is_ref = TYPE_IS_REFERENCE (type);
 	  enum type_code refcode = TYPE_CODE_UNDEF;
@@ -611,20 +514,19 @@ c_value_print (struct value *val, struct
 	  if (is_ref)
 	    {
 	      val = value_addr (val);
-	      refcode = TYPE_CODE (type);
+	      refcode = type->code ();
 	    }
 
 	  /* Pointer to class, check real type of object.  */
-	  fprintf_filtered (stream, "(");
+	  gdb_printf (stream, "(");
 
-	  if (value_entirely_available (val))
+	  if (val->entirely_available ())
 	    {
 	      real_type = value_rtti_indirect_type (val, &full, &top,
 						    &using_enc);
 	      if (real_type)
 		{
 		  /* RTTI entry found.  */
-		  type = real_type;
 
 		  /* Need to adjust pointer value.  */
 		  val = value_from_pointer (real_type,
@@ -637,28 +539,25 @@ c_value_print (struct value *val, struct
 	    }
 
 	  if (is_ref)
-	    {
-	      val = value_ref (value_ind (val), refcode);
-	      type = value_type (val);
-	    }
+	    val = value_ref (value_ind (val), refcode);
 
+	  type = val->type ();
 	  type_print (type, "", stream, -1);
-	  fprintf_filtered (stream, ") ");
-	  val_type = type;
+	  gdb_printf (stream, ") ");
 	}
       else
 	{
 	  /* normal case */
-	  fprintf_filtered (stream, "(");
-	  type_print (value_type (val), "", stream, -1);
-	  fprintf_filtered (stream, ") ");
+	  gdb_printf (stream, "(");
+	  type_print (val->type (), "", stream, -1);
+	  gdb_printf (stream, ") ");
 	}
     }
 
-  if (!value_initialized (val))
-    fprintf_filtered (stream, " [uninitialized] ");
+  if (!val->initialized ())
+    gdb_printf (stream, " [uninitialized] ");
 
-  if (options->objectprint && (TYPE_CODE (type) == TYPE_CODE_STRUCT))
+  if (options->objectprint && (type->code () == TYPE_CODE_STRUCT))
     {
       /* Attempt to determine real type of object.  */
       real_type = value_rtti_type (val, &full, &top, &using_enc);
@@ -667,36 +566,25 @@ c_value_print (struct value *val, struct
 	  /* We have RTTI information, so use it.  */
 	  val = value_full_object (val, real_type, 
 				   full, top, using_enc);
-	  fprintf_filtered (stream, "(%s%s) ",
-			    TYPE_NAME (real_type),
-			    full ? "" : _(" [incomplete object]"));
-	  /* Print out object: enclosing type is same as real_type if
-	     full.  */
-	  val_print (value_enclosing_type (val),
-		     0,
-		     value_address (val), stream, 0,
-		     val, &opts, current_language);
-	  return;
-          /* Note: When we look up RTTI entries, we don't get any
-             information on const or volatile attributes.  */
+	  /* In a destructor we might see a real type that is a
+	     superclass of the object's type.  In this case it is
+	     better to leave the object as-is.  */
+	  if (!(full
+		&& (real_type->length ()
+		    < val->enclosing_type ()->length ())))
+	    val = value_cast (real_type, val);
+	  gdb_printf (stream, "(%s%s) ",
+		      real_type->name (),
+		      full ? "" : _(" [incomplete object]"));
 	}
-      else if (type != check_typedef (value_enclosing_type (val)))
+      else if (type != check_typedef (val->enclosing_type ()))
 	{
 	  /* No RTTI information, so let's do our best.  */
-	  fprintf_filtered (stream, "(%s ?) ",
-			    TYPE_NAME (value_enclosing_type (val)));
-	  val_print (value_enclosing_type (val),
-		     0,
-		     value_address (val), stream, 0,
-		     val, &opts, current_language);
-	  return;
+	  gdb_printf (stream, "(%s ?) ",
+		      val->enclosing_type ()->name ());
+	  val = value_cast (val->enclosing_type (), val);
 	}
-      /* Otherwise, we end up at the return outside this "if".  */
     }
 
-  val_print (val_type,
-	     value_embedded_offset (val),
-	     value_address (val),
-	     stream, 0,
-	     val, &opts, current_language);
+  common_val_print (val, stream, 0, &opts, current_language);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-varobj.c ./gdb/c-varobj.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/c-varobj.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/c-varobj.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* varobj support for C and C++.
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -83,11 +83,11 @@ adjust_value_for_child_access (struct va
   /* Pointers to structures are treated just like
      structures when accessing children.  Don't
      dereference pointers to other types.  */
-  if (TYPE_CODE (*type) == TYPE_CODE_PTR)
+  if ((*type)->code () == TYPE_CODE_PTR)
     {
       struct type *target_type = get_target_type (*type);
-      if (TYPE_CODE (target_type) == TYPE_CODE_STRUCT
-	  || TYPE_CODE (target_type) == TYPE_CODE_UNION)
+      if (target_type->code () == TYPE_CODE_STRUCT
+	  || target_type->code () == TYPE_CODE_UNION)
 	{
 	  if (value && *value)
 	    {
@@ -120,10 +120,10 @@ adjust_value_for_child_access (struct va
 
       enclosing_type = value_actual_type (*value, 1, &real_type_found);
       if (real_type_found)
-        {
-          *type = enclosing_type;
-          *value = value_cast (enclosing_type, *value);
-        }
+	{
+	  *type = enclosing_type;
+	  *value = value_cast (enclosing_type, *value);
+	}
     }
 }
 
@@ -142,9 +142,9 @@ c_is_path_expr_parent (const struct varo
   type = varobj_get_gdb_type (var);
 
   /* Anonymous unions and structs are also not path_expr parents.  */
-  if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
-       || TYPE_CODE (type) == TYPE_CODE_UNION)
-      && TYPE_NAME (type) == NULL)
+  if ((type->code () == TYPE_CODE_STRUCT
+       || type->code () == TYPE_CODE_UNION)
+      && type->name () == NULL)
     {
       const struct varobj *parent = var->parent;
 
@@ -159,13 +159,13 @@ c_is_path_expr_parent (const struct varo
 	  parent_type = varobj_get_value_type (parent);
 	  adjust_value_for_child_access (NULL, &parent_type, &was_ptr, 0);
 
-	  if (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT
-	      || TYPE_CODE (parent_type) == TYPE_CODE_UNION)
+	  if (parent_type->code () == TYPE_CODE_STRUCT
+	      || parent_type->code () == TYPE_CODE_UNION)
 	    {
 	      const char *field_name;
 
-	      gdb_assert (var->index < TYPE_NFIELDS (parent_type));
-	      field_name = TYPE_FIELD_NAME (parent_type, var->index);
+	      gdb_assert (var->index < parent_type->num_fields ());
+	      field_name = parent_type->field (var->index).name ();
 	      return !(field_name == NULL || *field_name == '\0');
 	    }
 	}
@@ -188,12 +188,12 @@ c_number_of_children (const struct varob
   adjust_value_for_child_access (NULL, &type, NULL, 0);
   target = get_target_type (type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_ARRAY:
-      if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (target) > 0
-	  && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
-	children = TYPE_LENGTH (type) / TYPE_LENGTH (target);
+      if (type->length () > 0 && target->length () > 0
+	  && (type->bounds ()->high.kind () != PROP_UNDEFINED))
+	children = type->length () / target->length ();
       else
 	/* If we don't know how many elements there are, don't display
 	   any.  */
@@ -202,7 +202,7 @@ c_number_of_children (const struct varob
 
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
-      children = TYPE_NFIELDS (type);
+      children = type->num_fields ();
       break;
 
     case TYPE_CODE_PTR:
@@ -210,12 +210,12 @@ c_number_of_children (const struct varob
 	 have one child, except for function ptrs, which have no children,
 	 and except for void*, as we don't know what to show.
 
-         We can show char* so we allow it to be dereferenced.  If you decide
-         to test for it, please mind that a little magic is necessary to
-         properly identify it: char* has TYPE_CODE == TYPE_CODE_INT and 
-         TYPE_NAME == "char".  */
-      if (TYPE_CODE (target) == TYPE_CODE_FUNC
-	  || TYPE_CODE (target) == TYPE_CODE_VOID)
+	 We can show char* so we allow it to be dereferenced.  If you decide
+	 to test for it, please mind that a little magic is necessary to
+	 properly identify it: char* has TYPE_CODE == TYPE_CODE_INT and 
+	 TYPE_NAME == "char".  */
+      if (target->code () == TYPE_CODE_FUNC
+	  || target->code () == TYPE_CODE_VOID)
 	children = 0;
       else
 	children = 1;
@@ -245,19 +245,19 @@ static struct value *
 value_struct_element_index (struct value *value, int type_index)
 {
   struct value *result = NULL;
-  struct type *type = value_type (value);
+  struct type *type = value->type ();
 
   type = check_typedef (type);
 
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT
-	      || TYPE_CODE (type) == TYPE_CODE_UNION);
+  gdb_assert (type->code () == TYPE_CODE_STRUCT
+	      || type->code () == TYPE_CODE_UNION);
 
   try
     {
-      if (field_is_static (&TYPE_FIELD (type, type_index)))
+      if (type->field (type_index).is_static ())
 	result = value_static_field (type, type_index);
       else
-	result = value_primitive_field (value, 0, type_index, type);
+	result = value->primitive_field (0, type_index, type);
     }
   catch (const gdb_exception_error &e)
     {
@@ -302,17 +302,17 @@ c_describe_child (const struct varobj *p
     }
   adjust_value_for_child_access (&value, &type, &was_ptr, 0);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_ARRAY:
       if (cname)
-	*cname = int_string (index
-			     + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)),
+	*cname = int_string (index + type->bounds ()->low.const_val (),
 			     10, 1, 0, 0);
 
       if (cvalue && value)
 	{
-	  int real_index = index + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
+	  int real_index
+	    = index + type->bounds ()->low.const_val ();
 
 	  try
 	    {
@@ -327,12 +327,10 @@ c_describe_child (const struct varobj *p
 	*ctype = get_target_type (type);
 
       if (cfull_expression)
-	*cfull_expression = 
-	  string_printf ("(%s)[%s]", parent_expression.c_str (),
-			 int_string (index
-				     + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)),
-				     10, 1, 0, 0));
-
+	*cfull_expression = string_printf
+	  ("(%s)[%s]", parent_expression.c_str (),
+	   int_string (index + type->bounds ()->low.const_val (),
+		       10, 1, 0, 0));
 
       break;
 
@@ -343,12 +341,12 @@ c_describe_child (const struct varobj *p
 
 	/* If the type is anonymous and the field has no name,
 	   set an appropriate name.  */
-	field_name = TYPE_FIELD_NAME (type, index);
+	field_name = type->field (index).name ();
 	if (field_name == NULL || *field_name == '\0')
 	  {
 	    if (cname)
 	      {
-		if (TYPE_CODE (TYPE_FIELD_TYPE (type, index))
+		if (type->field (index).type ()->code ()
 		    == TYPE_CODE_STRUCT)
 		  *cname = ANONYMOUS_STRUCT_NAME;
 		else
@@ -380,7 +378,7 @@ c_describe_child (const struct varobj *p
 	  }
 
 	if (ctype)
-	  *ctype = TYPE_FIELD_TYPE (type, index);
+	  *ctype = type->field (index).type ();
       }
       break;
 
@@ -405,7 +403,7 @@ c_describe_child (const struct varobj *p
 	 check_typedef and here, we want to show the true
 	 declared type of the variable.  */
       if (ctype)
-	*ctype = TYPE_TARGET_TYPE (type);
+	*ctype = type->target_type ();
 
       if (cfull_expression)
 	*cfull_expression = string_printf ("*(%s)", parent_expression.c_str ());
@@ -484,9 +482,9 @@ c_value_of_variable (const struct varobj
 
   /* Strip top-level references.  */
   while (TYPE_IS_REFERENCE (type))
-    type = check_typedef (TYPE_TARGET_TYPE (type));
+    type = check_typedef (type->target_type ());
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
@@ -508,14 +506,14 @@ c_value_of_variable (const struct varobj
 	  }
 	else
 	  {
-	    if (var->not_fetched && value_lazy (var->value.get ()))
+	    if (var->not_fetched && var->value->lazy ())
 	      /* Frozen variable and no value yet.  We don't
 		 implicitly fetch the value.  MI response will
 		 use empty string for the value, which is OK.  */
 	      return std::string ();
 
 	    gdb_assert (varobj_value_is_changeable_p (var));
-	    gdb_assert (!value_lazy (var->value.get ()));
+	    gdb_assert (!var->value->lazy ());
 	    
 	    /* If the specified format is the current one,
 	       we can reuse print_value.  */
@@ -574,15 +572,14 @@ cplus_number_of_children (const struct v
 
       /* It is necessary to access a real type (via RTTI).  */
       if (opts.objectprint)
-        {
-          value = var->value.get ();
-          lookup_actual_type = (TYPE_IS_REFERENCE (var->type)
-				|| TYPE_CODE (var->type) == TYPE_CODE_PTR);
-        }
+	{
+	  value = var->value.get ();
+	  lookup_actual_type = var->type->is_pointer_or_reference ();
+	}
       adjust_value_for_child_access (&value, &type, NULL, lookup_actual_type);
 
-      if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT)
-	  || ((TYPE_CODE (type)) == TYPE_CODE_UNION))
+      if (((type->code ()) == TYPE_CODE_STRUCT)
+	  || ((type->code ()) == TYPE_CODE_UNION))
 	{
 	  int kids[3];
 
@@ -609,13 +606,12 @@ cplus_number_of_children (const struct v
 
       /* It is necessary to access a real type (via RTTI).  */
       if (opts.objectprint)
-        {
+	{
 	  const struct varobj *parent = var->parent;
 
 	  value = parent->value.get ();
-	  lookup_actual_type = (TYPE_IS_REFERENCE (parent->type)
-				|| TYPE_CODE (parent->type) == TYPE_CODE_PTR);
-        }
+	  lookup_actual_type = parent->type->is_pointer_or_reference ();
+	}
       adjust_value_for_child_access (&value, &type, NULL, lookup_actual_type);
 
       cplus_class_num_children (type, kids);
@@ -649,18 +645,20 @@ cplus_class_num_children (struct type *t
   children[v_protected] = 0;
 
   vptr_fieldno = get_vptr_fieldno (type, &basetype);
-  for (i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
+  for (i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++)
     {
+      field &fld = type->field (i);
+
       /* If we have a virtual table pointer, omit it.  Even if virtual
 	 table pointers are not specifically marked in the debug info,
 	 they should be artificial.  */
       if ((type == basetype && i == vptr_fieldno)
-	  || TYPE_FIELD_ARTIFICIAL (type, i))
+	  || fld.is_artificial ())
 	continue;
 
-      if (TYPE_FIELD_PROTECTED (type, i))
+      if (fld.is_protected ())
 	children[v_protected]++;
-      else if (TYPE_FIELD_PRIVATE (type, i))
+      else if (fld.is_private ())
 	children[v_private]++;
       else
 	children[v_public]++;
@@ -673,25 +671,6 @@ cplus_name_of_variable (const struct var
   return c_name_of_variable (parent);
 }
 
-enum accessibility { private_field, protected_field, public_field };
-
-/* Check if field INDEX of TYPE has the specified accessibility.
-   Return 0 if so and 1 otherwise.  */
-
-static int 
-match_accessibility (struct type *type, int index, enum accessibility acc)
-{
-  if (acc == private_field && TYPE_FIELD_PRIVATE (type, index))
-    return 1;
-  else if (acc == protected_field && TYPE_FIELD_PROTECTED (type, index))
-    return 1;
-  else if (acc == public_field && !TYPE_FIELD_PRIVATE (type, index)
-	   && !TYPE_FIELD_PROTECTED (type, index))
-    return 1;
-  else
-    return 0;
-}
-
 static void
 cplus_describe_child (const struct varobj *parent, int index,
 		      std::string *cname, struct value **cvalue, struct type **ctype,
@@ -718,8 +697,7 @@ cplus_describe_child (const struct varob
 
   var = (CPLUS_FAKE_CHILD (parent)) ? parent->parent : parent;
   if (opts.objectprint)
-    lookup_actual_type = (TYPE_IS_REFERENCE (var->type)
-			  || TYPE_CODE (var->type) == TYPE_CODE_PTR);
+    lookup_actual_type = var->type->is_pointer_or_reference ();
   value = var->value.get ();
   type = varobj_get_value_type (var);
   if (cfull_expression)
@@ -728,8 +706,8 @@ cplus_describe_child (const struct varob
 
   adjust_value_for_child_access (&value, &type, &was_ptr, lookup_actual_type);
 
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT
-      || TYPE_CODE (type) == TYPE_CODE_UNION)
+  if (type->code () == TYPE_CODE_STRUCT
+      || type->code () == TYPE_CODE_UNION)
     {
       const char *join = was_ptr ? "->" : ".";
 
@@ -742,39 +720,39 @@ cplus_describe_child (const struct varob
 	     have the access control we are looking for to properly
 	     find the indexed field.  */
 	  int type_index = TYPE_N_BASECLASSES (type);
-	  enum accessibility acc = public_field;
+	  enum accessibility acc = accessibility::PUBLIC;
 	  int vptr_fieldno;
 	  struct type *basetype = NULL;
 	  const char *field_name;
 
 	  vptr_fieldno = get_vptr_fieldno (type, &basetype);
 	  if (parent->name == "private")
-	    acc = private_field;
+	    acc = accessibility::PRIVATE;
 	  else if (parent->name == "protected")
-	    acc = protected_field;
+	    acc = accessibility::PROTECTED;
 
 	  while (index >= 0)
 	    {
 	      if ((type == basetype && type_index == vptr_fieldno)
-		  || TYPE_FIELD_ARTIFICIAL (type, type_index))
+		  || type->field (type_index).is_artificial ())
 		; /* ignore vptr */
-	      else if (match_accessibility (type, type_index, acc))
-		    --index;
-		  ++type_index;
+	      else if (type->field (type_index).accessibility () == acc)
+		--index;
+	      ++type_index;
 	    }
 	  --type_index;
 
 	  /* If the type is anonymous and the field has no name,
 	     set an appropriate name.  */
-	  field_name = TYPE_FIELD_NAME (type, type_index);
+	  field_name = type->field (type_index).name ();
 	  if (field_name == NULL || *field_name == '\0')
 	    {
 	      if (cname)
 		{
-		  if (TYPE_CODE (TYPE_FIELD_TYPE (type, type_index))
+		  if (type->field (type_index).type ()->code ()
 		      == TYPE_CODE_STRUCT)
 		    *cname = ANONYMOUS_STRUCT_NAME;
-		  else if (TYPE_CODE (TYPE_FIELD_TYPE (type, type_index))
+		  else if (type->field (type_index).type ()->code ()
 			   == TYPE_CODE_UNION)
 		    *cname = ANONYMOUS_UNION_NAME;
 		}
@@ -785,7 +763,7 @@ cplus_describe_child (const struct varob
 	  else
 	    {
 	      if (cname)
-		*cname = TYPE_FIELD_NAME (type, type_index);
+		*cname = type->field (type_index).name ();
 
 	      if (cfull_expression)
 		*cfull_expression
@@ -797,20 +775,20 @@ cplus_describe_child (const struct varob
 	    *cvalue = value_struct_element_index (value, type_index);
 
 	  if (ctype)
-	    *ctype = TYPE_FIELD_TYPE (type, type_index);
+	    *ctype = type->field (type_index).type ();
 	}
       else if (index < TYPE_N_BASECLASSES (type))
 	{
 	  /* This is a baseclass.  */
 	  if (cname)
-	    *cname = TYPE_FIELD_NAME (type, index);
+	    *cname = type->field (index).name ();
 
 	  if (cvalue && value)
-	    *cvalue = value_cast (TYPE_FIELD_TYPE (type, index), value);
+	    *cvalue = value_cast (type->field (index).type (), value);
 
 	  if (ctype)
 	    {
-	      *ctype = TYPE_FIELD_TYPE (type, index);
+	      *ctype = type->field (index).type ();
 	    }
 
 	  if (cfull_expression)
@@ -819,10 +797,10 @@ cplus_describe_child (const struct varob
 
 	      /* Cast the parent to the base' type.  Note that in gdb,
 		 expression like 
-		         (Base1)d
-		 will create an lvalue, for all appearences, so we don't
+			 (Base1)d
+		 will create an lvalue, for all appearances, so we don't
 		 need to use more fancy:
-		         *(Base1*)(&d)
+			 *(Base1*)(&d)
 		 construct.
 
 		 When we are in the scope of the base class or of one
@@ -832,7 +810,7 @@ cplus_describe_child (const struct varob
 		 'class' keyword.  See PR mi/11912  */
 	      *cfull_expression = string_printf ("(%s(class %s%s) %s)",
 						 ptr,
-						 TYPE_FIELD_NAME (type, index),
+						 type->field (index).name (),
 						 ptr,
 						 parent_expression);
 	    }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/darwin-nat.c ./gdb/darwin-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/darwin-nat.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/darwin-nat.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Darwin support for GDB, the GNU debugger.
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2024 Free Software Foundation, Inc.
 
    Contributed by AdaCore.
 
@@ -89,12 +89,8 @@
 #define PTRACE(CMD, PID, ADDR, SIG) \
  darwin_ptrace(#CMD, CMD, (PID), (ADDR), (SIG))
 
-static ptid_t darwin_wait (ptid_t ptid, struct target_waitstatus *status);
-
 static void darwin_ptrace_me (void);
 
-static void darwin_ptrace_him (int pid);
-
 static void darwin_encode_reply (mig_reply_error_t *reply,
 				 mach_msg_header_t *hdr, integer_t code);
 
@@ -173,14 +169,14 @@ inferior_debug (int level, const char *f
     return;
 
   va_start (ap, fmt);
-  printf_unfiltered (_("[%d inferior]: "), getpid ());
-  vprintf_unfiltered (fmt, ap);
+  gdb_printf (gdb_stdlog, _("[%d inferior]: "), getpid ());
+  gdb_vprintf (gdb_stdlog, fmt, ap);
   va_end (ap);
 }
 
 void
 mach_check_error (kern_return_t ret, const char *file,
-                  unsigned int line, const char *func)
+		  unsigned int line, const char *func)
 {
   if (ret == KERN_SUCCESS)
     return;
@@ -245,8 +241,8 @@ darwin_ptrace (const char *name,
     ret = 0;
 
   inferior_debug (4, _("ptrace (%s, %d, 0x%lx, %d): %d (%s)\n"),
-                  name, pid, (unsigned long) arg3, arg4, ret,
-                  (ret != 0) ? safe_strerror (errno) : _("no error"));
+		  name, pid, (unsigned long) arg3, arg4, ret,
+		  (ret != 0) ? safe_strerror (errno) : _("no error"));
   return ret;
 }
 
@@ -258,8 +254,8 @@ cmp_thread_t (const void *l, const void
   return (int)(tl - tr);
 }
 
-static void
-darwin_check_new_threads (struct inferior *inf)
+void
+darwin_nat_target::check_new_threads (inferior *inf)
 {
   kern_return_t kret;
   thread_array_t thread_list;
@@ -355,7 +351,8 @@ darwin_check_new_threads (struct inferio
 	  pti->msg_state = DARWIN_RUNNING;
 
 	  /* Add the new thread.  */
-	  add_thread_with_info (ptid_t (inf->pid, 0, new_id), pti);
+	  add_thread_with_info (this, ptid_t (inf->pid, 0, new_id),
+				private_thread_info_up (pti));
 	  new_thread_vec.push_back (pti);
 	  new_ix++;
 	  continue;
@@ -364,7 +361,7 @@ darwin_check_new_threads (struct inferio
 	{
 	  /* A thread was removed.  */
 	  struct thread_info *thr
-	    = find_thread_ptid (ptid_t (inf->pid, 0, old_id));
+	    = this->find_thread (ptid_t (inf->pid, 0, old_id));
 	  delete_thread (thr);
 	  kret = mach_port_deallocate (gdb_task, old_id);
 	  MACH_CHECK_ERROR (kret);
@@ -382,32 +379,30 @@ darwin_check_new_threads (struct inferio
   MACH_CHECK_ERROR (kret);
 }
 
-static int
-find_inferior_task_it (struct inferior *inf, void *port_ptr)
-{
-  darwin_inferior *priv = get_darwin_inferior (inf);
-
-  return priv != nullptr && priv->task == *(task_t *)port_ptr;
-}
-
-static int
-find_inferior_pid_it (struct inferior *inf, void *pid_ptr)
-{
-  return inf->pid == *(int *)pid_ptr;
-}
-
 /* Return an inferior by task port.  */
 static struct inferior *
 darwin_find_inferior_by_task (task_t port)
 {
-  return iterate_over_inferiors (&find_inferior_task_it, &port);
+  for (inferior *inf : all_inferiors ())
+    {
+      darwin_inferior *priv = get_darwin_inferior (inf);
+
+      if (priv != nullptr && priv->task == port)
+	return inf;
+    }
+  return nullptr;
 }
 
 /* Return an inferior by pid port.  */
 static struct inferior *
 darwin_find_inferior_by_pid (int pid)
 {
-  return iterate_over_inferiors (&find_inferior_pid_it, &pid);
+  for (inferior *inf : all_inferiors ())
+    {
+      if (inf->pid == pid)
+	return inf;
+    }
+  return nullptr;
 }
 
 /* Return a thread by port.  */
@@ -462,33 +457,23 @@ darwin_resume_inferior (struct inferior
     }
 }
 
-/* Iterator functions.  */
-
-static int
-darwin_suspend_inferior_it (struct inferior *inf, void *arg)
-{
-  darwin_suspend_inferior (inf);
-  darwin_check_new_threads (inf);
-  return 0;
-}
-
-static int
-darwin_resume_inferior_it (struct inferior *inf, void *arg)
-{
-  darwin_resume_inferior (inf);
-  return 0;
-}
-
 static void
 darwin_dump_message (mach_msg_header_t *hdr, int disp_body)
 {
-  printf_unfiltered (_("message header:\n"));
-  printf_unfiltered (_(" bits: 0x%x\n"), hdr->msgh_bits);
-  printf_unfiltered (_(" size: 0x%x\n"), hdr->msgh_size);
-  printf_unfiltered (_(" remote-port: 0x%x\n"), hdr->msgh_remote_port);
-  printf_unfiltered (_(" local-port: 0x%x\n"), hdr->msgh_local_port);
-  printf_unfiltered (_(" reserved: 0x%x\n"), hdr->msgh_reserved);
-  printf_unfiltered (_(" id: 0x%x\n"), hdr->msgh_id);
+  gdb_printf (gdb_stdlog,
+	      _("message header:\n"));
+  gdb_printf (gdb_stdlog,
+	      _(" bits: 0x%x\n"), hdr->msgh_bits);
+  gdb_printf (gdb_stdlog,
+	      _(" size: 0x%x\n"), hdr->msgh_size);
+  gdb_printf (gdb_stdlog,
+	      _(" remote-port: 0x%x\n"), hdr->msgh_remote_port);
+  gdb_printf (gdb_stdlog,
+	      _(" local-port: 0x%x\n"), hdr->msgh_local_port);
+  gdb_printf (gdb_stdlog,
+	      _(" reserved: 0x%x\n"), hdr->msgh_reserved);
+  gdb_printf (gdb_stdlog,
+	      _(" id: 0x%x\n"), hdr->msgh_id);
 
   if (disp_body)
     {
@@ -507,21 +492,24 @@ darwin_dump_message (mach_msg_header_t *
 	    (mach_msg_port_descriptor_t *)(bod + 1);
 	  int k;
 	  NDR_record_t *ndr;
-	  printf_unfiltered (_("body: descriptor_count=%u\n"),
-			     bod->msgh_descriptor_count);
+	  gdb_printf (gdb_stdlog,
+		      _("body: descriptor_count=%u\n"),
+		      bod->msgh_descriptor_count);
 	  data += sizeof (mach_msg_body_t);
 	  size -= sizeof (mach_msg_body_t);
 	  for (k = 0; k < bod->msgh_descriptor_count; k++)
 	    switch (desc[k].type)
 	      {
 	      case MACH_MSG_PORT_DESCRIPTOR:
-		printf_unfiltered
-		  (_(" descr %d: type=%u (port) name=0x%x, dispo=%d\n"),
+		gdb_printf
+		  (gdb_stdlog,
+		   _(" descr %d: type=%u (port) name=0x%x, dispo=%d\n"),
 		   k, desc[k].type, desc[k].name, desc[k].disposition);
 		break;
 	      default:
-		printf_unfiltered (_(" descr %d: type=%u\n"),
-				   k, desc[k].type);
+		gdb_printf (gdb_stdlog,
+			    _(" descr %d: type=%u\n"),
+			    k, desc[k].type);
 		break;
 	      }
 	  data += bod->msgh_descriptor_count
@@ -529,8 +517,9 @@ darwin_dump_message (mach_msg_header_t *
 	  size -= bod->msgh_descriptor_count
 	    * sizeof (mach_msg_port_descriptor_t);
 	  ndr = (NDR_record_t *)(desc + bod->msgh_descriptor_count);
-	  printf_unfiltered
-	    (_("NDR: mig=%02x if=%02x encod=%02x "
+	  gdb_printf
+	    (gdb_stdlog,
+	     _("NDR: mig=%02x if=%02x encod=%02x "
 	       "int=%02x char=%02x float=%02x\n"),
 	     ndr->mig_vers, ndr->if_vers, ndr->mig_encoding,
 	     ndr->int_rep, ndr->char_rep, ndr->float_rep);
@@ -538,11 +527,11 @@ darwin_dump_message (mach_msg_header_t *
 	  size -= sizeof (NDR_record_t);
 	}
 
-      printf_unfiltered (_("  data:"));
+      gdb_printf (gdb_stdlog, _("  data:"));
       ldata = (const unsigned int *)data;
       for (i = 0; i < size / sizeof (unsigned int); i++)
-	printf_unfiltered (" %08x", ldata[i]);
-      printf_unfiltered (_("\n"));
+	gdb_printf (gdb_stdlog, " %08x", ldata[i]);
+      gdb_printf (gdb_stdlog, _("\n"));
     }
 }
 
@@ -611,10 +600,10 @@ darwin_check_message_ndr (NDR_record_t *
 
 /* Decode an exception message.  */
 
-static int
-darwin_decode_exception_message (mach_msg_header_t *hdr,
-				 struct inferior **pinf,
-				 darwin_thread_t **pthread)
+int
+darwin_nat_target::decode_exception_message (mach_msg_header_t *hdr,
+					     inferior **pinf,
+					     darwin_thread_t **pthread)
 {
   mach_msg_body_t *bod = (mach_msg_body_t*)(hdr + 1);
   mach_msg_port_descriptor_t *desc = (mach_msg_port_descriptor_t *)(bod + 1);
@@ -712,7 +701,7 @@ darwin_decode_exception_message (mach_ms
   /* Find thread by port.  */
   /* Check for new threads.  Do it early so that the port in the exception
      message can be deallocated.  */
-  darwin_check_new_threads (inf);
+  check_new_threads (inf);
 
   /* Free the thread port (as gdb knows the thread, it has already has a right
      for it, so this just decrement a reference counter).  */
@@ -898,23 +887,6 @@ darwin_resume_inferior_threads (struct i
       darwin_resume_thread (inf, thread, step, nsignal);
 }
 
-struct resume_inferior_threads_param
-{
-  int step;
-  int nsignal;
-};
-
-static int
-darwin_resume_inferior_threads_it (struct inferior *inf, void *param)
-{
-  int step = ((struct resume_inferior_threads_param *)param)->step;
-  int nsignal = ((struct resume_inferior_threads_param *)param)->nsignal;
-
-  darwin_resume_inferior_threads (inf, step, nsignal);
-
-  return 0;
-}
-
 /* Suspend all threads of INF.  */
 
 static void
@@ -943,13 +915,11 @@ darwin_suspend_inferior_threads (struct
 void
 darwin_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
 {
-  struct target_waitstatus status;
-
   int nsignal;
 
   inferior_debug
-    (2, _("darwin_resume: pid=%d, tid=0x%lx, step=%d, signal=%d\n"),
-     ptid.pid (), ptid.tid (), step, signal);
+    (2, _("darwin_resume: ptid=%s, step=%d, signal=%d\n"),
+     ptid.to_string ().c_str (), step, signal);
 
   if (signal == GDB_SIGNAL_0)
     nsignal = 0;
@@ -963,49 +933,47 @@ darwin_nat_target::resume (ptid_t ptid,
   /* minus_one_ptid is RESUME_ALL.  */
   if (ptid == minus_one_ptid)
     {
-      struct resume_inferior_threads_param param;
-
-      param.nsignal = nsignal;
-      param.step = step;
-
       /* Resume threads.  */
-      iterate_over_inferiors (darwin_resume_inferior_threads_it, &param);
+      for (inferior *inf : all_inferiors ())
+	darwin_resume_inferior_threads (inf, step, nsignal);
+
       /* Resume tasks.  */
-      iterate_over_inferiors (darwin_resume_inferior_it, NULL);
+      for (inferior *inf : all_inferiors ())
+	darwin_resume_inferior (inf);
     }
   else
     {
-      struct inferior *inf = find_inferior_ptid (ptid);
+      inferior *inf = find_inferior_ptid (this, ptid);
       long tid = ptid.tid ();
 
       /* Stop the inferior (should be useless).  */
       darwin_suspend_inferior (inf);
 
       if (tid == 0)
-        darwin_resume_inferior_threads (inf, step, nsignal);
+	darwin_resume_inferior_threads (inf, step, nsignal);
       else
-        {
-          darwin_thread_t *thread;
+	{
+	  darwin_thread_t *thread;
 
-          /* Suspend threads of the task.  */
-          darwin_suspend_inferior_threads (inf);
+	  /* Suspend threads of the task.  */
+	  darwin_suspend_inferior_threads (inf);
 
-          /* Resume the selected thread.  */
-          thread = darwin_find_thread (inf, tid);
-          gdb_assert (thread);
-          darwin_resume_thread (inf, thread, step, nsignal);
-        }
+	  /* Resume the selected thread.  */
+	  thread = darwin_find_thread (inf, tid);
+	  gdb_assert (thread);
+	  darwin_resume_thread (inf, thread, step, nsignal);
+	}
 
       /* Resume the task.  */
       darwin_resume_inferior (inf);
     }
 }
 
-static ptid_t
-darwin_decode_message (mach_msg_header_t *hdr,
-		       darwin_thread_t **pthread,
-		       struct inferior **pinf,
-		       struct target_waitstatus *status)
+ptid_t
+darwin_nat_target::decode_message (mach_msg_header_t *hdr,
+				   darwin_thread_t **pthread,
+				   inferior **pinf,
+				   target_waitstatus *status)
 {
   darwin_thread_t *thread;
   struct inferior *inf;
@@ -1016,20 +984,20 @@ darwin_decode_message (mach_msg_header_t
       int res;
 
       /* Decode message.  */
-      res = darwin_decode_exception_message (hdr, &inf, &thread);
+      res = decode_exception_message (hdr, &inf, &thread);
 
       if (res < 0)
 	{
 	  /* Should not happen...  */
-	  printf_unfiltered
-	    (_("darwin_wait: ill-formatted message (id=0x%x)\n"), hdr->msgh_id);
+	  warning (_("darwin_wait: ill-formatted message (id=0x%x)\n"),
+		   hdr->msgh_id);
 	  /* FIXME: send a failure reply?  */
-	  status->kind = TARGET_WAITKIND_IGNORE;
+	  status->set_ignore ();
 	  return minus_one_ptid;
 	}
       if (inf == NULL)
 	{
-	  status->kind = TARGET_WAITKIND_IGNORE;
+	  status->set_ignore ();
 	  return minus_one_ptid;
 	}
       *pinf = inf;
@@ -1039,7 +1007,6 @@ darwin_decode_message (mach_msg_header_t
 
       priv->pending_messages++;
 
-      status->kind = TARGET_WAITKIND_STOPPED;
       thread->msg_state = DARWIN_MESSAGE;
 
       inferior_debug (4, _("darwin_wait: thread=0x%x, got %s\n"),
@@ -1049,25 +1016,25 @@ darwin_decode_message (mach_msg_header_t
       switch (thread->event.ex_type)
 	{
 	case EXC_BAD_ACCESS:
-	  status->value.sig = GDB_EXC_BAD_ACCESS;
+	  status->set_stopped (GDB_EXC_BAD_ACCESS);
 	  break;
 	case EXC_BAD_INSTRUCTION:
-	  status->value.sig = GDB_EXC_BAD_INSTRUCTION;
+	  status->set_stopped (GDB_EXC_BAD_INSTRUCTION);
 	  break;
 	case EXC_ARITHMETIC:
-	  status->value.sig = GDB_EXC_ARITHMETIC;
+	  status->set_stopped (GDB_EXC_ARITHMETIC);
 	  break;
 	case EXC_EMULATION:
-	  status->value.sig = GDB_EXC_EMULATION;
+	  status->set_stopped (GDB_EXC_EMULATION);
 	  break;
 	case EXC_SOFTWARE:
 	  if (thread->event.ex_data[0] == EXC_SOFT_SIGNAL)
 	    {
-	      status->value.sig =
-		gdb_signal_from_host (thread->event.ex_data[1]);
+	      status->set_stopped
+		(gdb_signal_from_host (thread->event.ex_data[1]));
 	      inferior_debug (5, _("  (signal %d: %s)\n"),
 			      thread->event.ex_data[1],
-			      gdb_signal_to_name (status->value.sig));
+			      gdb_signal_to_name (status->sig ()));
 
 	      /* If the thread is stopped because it has received a signal
 		 that gdb has just sent, continue.  */
@@ -1076,20 +1043,20 @@ darwin_decode_message (mach_msg_header_t
 		  thread->signaled = 0;
 		  darwin_send_reply (inf, thread);
 		  thread->msg_state = DARWIN_RUNNING;
-		  status->kind = TARGET_WAITKIND_IGNORE;
+		  status->set_ignore ();
 		}
 	    }
 	  else
-	    status->value.sig = GDB_EXC_SOFTWARE;
+	    status->set_stopped (GDB_EXC_SOFTWARE);
 	  break;
 	case EXC_BREAKPOINT:
 	  /* Many internal GDB routines expect breakpoints to be reported
 	     as GDB_SIGNAL_TRAP, and will report GDB_EXC_BREAKPOINT
 	     as a spurious signal.  */
-	  status->value.sig = GDB_SIGNAL_TRAP;
+	  status->set_stopped (GDB_SIGNAL_TRAP);
 	  break;
 	default:
-	  status->value.sig = GDB_SIGNAL_UNKNOWN;
+	  status->set_stopped (GDB_SIGNAL_UNKNOWN);
 	  break;
 	}
 
@@ -1097,7 +1064,7 @@ darwin_decode_message (mach_msg_header_t
     }
   else if (hdr->msgh_id == 0x48)
     {
-      /* MACH_NOTIFY_DEAD_NAME: notification for exit.  */
+      /* MACH_NOTIFY_DEAD_NAME: notification for exit *or* WIFSTOPPED.  */
       int res;
 
       res = darwin_decode_notify_message (hdr, &inf);
@@ -1105,7 +1072,7 @@ darwin_decode_message (mach_msg_header_t
       if (res < 0)
 	{
 	  /* Should not happen...  */
-	  printf_unfiltered
+	  warning
 	    (_("darwin_wait: ill-formatted message (id=0x%x, res=%d)\n"),
 	     hdr->msgh_id, res);
 	}
@@ -1115,7 +1082,7 @@ darwin_decode_message (mach_msg_header_t
 
       if (res < 0 || inf == NULL)
 	{
-	  status->kind = TARGET_WAITKIND_IGNORE;
+	  status->set_ignore ();
 	  return minus_one_ptid;
 	}
 
@@ -1131,36 +1098,47 @@ darwin_decode_message (mach_msg_header_t
 	      res_pid = wait4 (inf->pid, &wstatus, 0, NULL);
 	      if (res_pid < 0 || res_pid != inf->pid)
 		{
-		  printf_unfiltered (_("wait4: res=%d: %s\n"),
-				     res_pid, safe_strerror (errno));
-		  status->kind = TARGET_WAITKIND_IGNORE;
+		  warning (_("wait4: res=%d: %s\n"),
+			   res_pid, safe_strerror (errno));
+		  status->set_ignore ();
 		  return minus_one_ptid;
 		}
 	      if (WIFEXITED (wstatus))
 		{
-		  status->kind = TARGET_WAITKIND_EXITED;
-		  status->value.integer = WEXITSTATUS (wstatus);
+		  status->set_exited (WEXITSTATUS (wstatus));
+		  inferior_debug (4, _("darwin_wait: pid=%d exit, status=0x%x\n"),
+				  res_pid, wstatus);
+		}
+	      else if (WIFSTOPPED (wstatus))
+		{
+		  /* Ignore stopped state, it will be handled by the next
+		     exception.  */
+		  status->set_ignore ();
+		  inferior_debug (4, _("darwin_wait: pid %d received WIFSTOPPED\n"),
+				  res_pid);
+		  return minus_one_ptid;
+		}
+	      else if (WIFSIGNALED (wstatus))
+		{
+		  status->set_signalled
+		    (gdb_signal_from_host (WTERMSIG (wstatus)));
+		  inferior_debug (4, _("darwin_wait: pid=%d received signal %d\n"),
+				  res_pid, status->sig());
 		}
 	      else
 		{
-		  status->kind = TARGET_WAITKIND_SIGNALLED;
-		  status->value.sig = gdb_signal_from_host (WTERMSIG (wstatus));
+		  status->set_ignore ();
+		  warning (_("Unexpected wait status after MACH_NOTIFY_DEAD_NAME "
+			     "notification: 0x%x"), wstatus);
+		  return minus_one_ptid;
 		}
 
-	      inferior_debug (4, _("darwin_wait: pid=%d exit, status=0x%x\n"),
-			      res_pid, wstatus);
-
-	      /* Looks necessary on Leopard and harmless...  */
-	      wait4 (inf->pid, &wstatus, 0, NULL);
-
-	      inferior_ptid = ptid_t (inf->pid, 0, 0);
-	      return inferior_ptid;
+	      return ptid_t (inf->pid);
 	    }
 	  else
 	    {
 	      inferior_debug (4, _("darwin_wait: pid=%d\n"), inf->pid);
-	      status->kind = TARGET_WAITKIND_EXITED;
-	      status->value.integer = 0; /* Don't know.  */
+	      status->set_exited (0 /* Don't know.  */);
 	      return ptid_t (inf->pid, 0, 0);
 	    }
 	}
@@ -1168,12 +1146,12 @@ darwin_decode_message (mach_msg_header_t
 
   /* Unknown message.  */
   warning (_("darwin: got unknown message, id: 0x%x"), hdr->msgh_id);
-  status->kind = TARGET_WAITKIND_IGNORE;
+  status->set_ignore ();
   return minus_one_ptid;
 }
 
-static int
-cancel_breakpoint (ptid_t ptid)
+int
+darwin_nat_target::cancel_breakpoint (inferior *inf, ptid_t ptid)
 {
   /* Arrange for a breakpoint to be hit again later.  We will handle
      the current event, eventually we will resume this thread, and this
@@ -1183,12 +1161,12 @@ cancel_breakpoint (ptid_t ptid)
      delete or disable the breakpoint, but the thread will have already
      tripped on it.  */
 
-  struct regcache *regcache = get_thread_regcache (ptid);
+  struct regcache *regcache = get_thread_regcache (this, ptid);
   struct gdbarch *gdbarch = regcache->arch ();
   CORE_ADDR pc;
 
   pc = regcache_read_pc (regcache) - gdbarch_decr_pc_after_break (gdbarch);
-  if (breakpoint_inserted_here_p (regcache->aspace (), pc))
+  if (breakpoint_inserted_here_p (inf->aspace.get (), pc))
     {
       inferior_debug (4, "cancel_breakpoint for thread 0x%lx\n",
 		      (unsigned long) ptid.tid ());
@@ -1202,8 +1180,8 @@ cancel_breakpoint (ptid_t ptid)
   return 0;
 }
 
-static ptid_t
-darwin_wait (ptid_t ptid, struct target_waitstatus *status)
+ptid_t
+darwin_nat_target::wait_1 (ptid_t ptid, struct target_waitstatus *status)
 {
   kern_return_t kret;
   union
@@ -1214,22 +1192,20 @@ darwin_wait (ptid_t ptid, struct target_
   mach_msg_header_t *hdr = &msgin.hdr;
   ptid_t res;
   darwin_thread_t *thread;
-  struct inferior *inf;
 
   inferior_debug
-    (2, _("darwin_wait: waiting for a message pid=%d thread=%lx\n"),
-     ptid.pid (), ptid.tid ());
+    (2, _("darwin_wait: waiting for a message ptid=%s\n"),
+     ptid.to_string ().c_str ());
 
   /* Handle fake stop events at first.  */
   if (darwin_inf_fake_stop != NULL)
     {
-      inf = darwin_inf_fake_stop;
+      inferior *inf = darwin_inf_fake_stop;
       darwin_inf_fake_stop = NULL;
 
       darwin_inferior *priv = get_darwin_inferior (inf);
 
-      status->kind = TARGET_WAITKIND_STOPPED;
-      status->value.sig = GDB_SIGNAL_TRAP;
+      status->set_stopped (GDB_SIGNAL_TRAP);
       thread = priv->threads[0];
       thread->msg_state = DARWIN_STOPPED;
       return ptid_t (inf->pid, 0, thread->gdb_port);
@@ -1247,14 +1223,14 @@ darwin_wait (ptid_t ptid, struct target_
 
       if (kret == MACH_RCV_INTERRUPTED)
 	{
-	  status->kind = TARGET_WAITKIND_IGNORE;
+	  status->set_ignore ();
 	  return minus_one_ptid;
 	}
 
       if (kret != MACH_MSG_SUCCESS)
 	{
 	  inferior_debug (5, _("mach_msg: ret=0x%x\n"), kret);
-	  status->kind = TARGET_WAITKIND_SPURIOUS;
+	  status->set_spurious ();
 	  return minus_one_ptid;
 	}
 
@@ -1262,7 +1238,8 @@ darwin_wait (ptid_t ptid, struct target_
       if (darwin_debug_flag > 10)
 	darwin_dump_message (hdr, darwin_debug_flag > 11);
 
-      res = darwin_decode_message (hdr, &thread, &inf, status);
+      inferior *inf;
+      res = decode_message (hdr, &thread, &inf, status);
       if (res == minus_one_ptid)
 	continue;
 
@@ -1270,10 +1247,14 @@ darwin_wait (ptid_t ptid, struct target_
       if (inf == NULL)
 	return res;
     }
-  while (status->kind == TARGET_WAITKIND_IGNORE);
+  while (status->kind () == TARGET_WAITKIND_IGNORE);
 
   /* Stop all tasks.  */
-  iterate_over_inferiors (darwin_suspend_inferior_it, NULL);
+  for (inferior *inf : all_inferiors (this))
+    {
+      darwin_suspend_inferior (inf);
+      check_new_threads (inf);
+    }
 
   /* Read pending messages.  */
   while (1)
@@ -1298,13 +1279,15 @@ darwin_wait (ptid_t ptid, struct target_
       if (darwin_debug_flag > 10)
 	darwin_dump_message (hdr, darwin_debug_flag > 11);
 
-      ptid2 = darwin_decode_message (hdr, &thread, &inf, &status2);
+      inferior *inf;
+      ptid2 = decode_message (hdr, &thread, &inf, &status2);
 
       if (inf != NULL && thread != NULL
 	  && thread->event.ex_type == EXC_BREAKPOINT)
 	{
 	  if (thread->single_step
-	      || cancel_breakpoint (ptid_t (inf->pid, 0, thread->gdb_port)))
+	      || cancel_breakpoint (inf,
+				    ptid_t (inf->pid, 0, thread->gdb_port)))
 	    {
 	      gdb_assert (thread->msg_state == DARWIN_MESSAGE);
 	      darwin_send_reply (inf, thread);
@@ -1323,9 +1306,9 @@ darwin_wait (ptid_t ptid, struct target_
 
 ptid_t
 darwin_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
-			 int options)
+			 target_wait_flags options)
 {
-  return darwin_wait (ptid, status);
+  return wait_1 (ptid, status);
 }
 
 void
@@ -1415,8 +1398,8 @@ darwin_reply_to_all_pending_messages (st
     }
 }
 
-static void
-darwin_stop_inferior (struct inferior *inf)
+void
+darwin_nat_target::stop_inferior (inferior *inf)
 {
   struct target_waitstatus wstatus;
   ptid_t ptid;
@@ -1432,16 +1415,16 @@ darwin_stop_inferior (struct inferior *i
   if (priv->no_ptrace)
     return;
 
-  res = kill (inf->pid, SIGSTOP);
+  res = ::kill (inf->pid, SIGSTOP);
   if (res != 0)
     warning (_("cannot kill: %s"), safe_strerror (errno));
 
   /* Wait until the process is really stopped.  */
   while (1)
     {
-      ptid = darwin_wait (inferior_ptid, &wstatus);
-      if (wstatus.kind == TARGET_WAITKIND_STOPPED
-	  && wstatus.value.sig == GDB_SIGNAL_STOP)
+      ptid = wait_1 (ptid_t (inf->pid), &wstatus);
+      if (wstatus.kind () == TARGET_WAITKIND_STOPPED
+	  && wstatus.sig () == GDB_SIGNAL_STOP)
 	break;
     }
 }
@@ -1470,10 +1453,10 @@ darwin_restore_exception_ports (darwin_i
   for (i = 0; i < inf->exception_info.count; i++)
     {
       kret = task_set_exception_ports
-        (inf->task, inf->exception_info.masks[i], inf->exception_info.ports[i],
+	(inf->task, inf->exception_info.masks[i], inf->exception_info.ports[i],
 	 inf->exception_info.behaviors[i], inf->exception_info.flavors[i]);
       if (kret != KERN_SUCCESS)
-        return kret;
+	return kret;
     }
 
   return KERN_SUCCESS;
@@ -1546,31 +1529,31 @@ darwin_nat_target::kill ()
   if (res == 0)
     {
       /* On MacOS version Sierra, the darwin_restore_exception_ports call
-         does not work as expected.
-         When the kill function is called, the SIGKILL signal is received
-         by gdb whereas it should have been received by the kernel since
-         the exception ports have been restored.
-         This behavior is not the expected one thus gdb does not reply to
-         the received SIGKILL message. This situation leads to a "busy"
-         resource from the kernel point of view and the inferior is never
-         released, causing it to remain as a zombie process, even after
+	 does not work as expected.
+	 When the kill function is called, the SIGKILL signal is received
+	 by gdb whereas it should have been received by the kernel since
+	 the exception ports have been restored.
+	 This behavior is not the expected one thus gdb does not reply to
+	 the received SIGKILL message. This situation leads to a "busy"
+	 resource from the kernel point of view and the inferior is never
+	 released, causing it to remain as a zombie process, even after
 	 GDB exits.
-         To work around this, we mark all the threads of the inferior as
-         signaled thus darwin_decode_message function knows that the kill
-         signal was sent by gdb and will take the appropriate action
-         (cancel signal and reply to the signal message).  */
+	 To work around this, we mark all the threads of the inferior as
+	 signaled thus darwin_decode_message function knows that the kill
+	 signal was sent by gdb and will take the appropriate action
+	 (cancel signal and reply to the signal message).  */
       for (darwin_thread_t *thread : priv->threads)
-        thread->signaled = 1;
+	thread->signaled = 1;
 
       darwin_resume_inferior (inf);
 
-      ptid = darwin_wait (inferior_ptid, &wstatus);
+      ptid = wait_1 (ptid_t (inf->pid), &wstatus);
     }
   else if (errno != ESRCH)
     warning (_("Failed to kill inferior: kill (%d, 9) returned [%s]"),
 	     inf->pid, safe_strerror (errno));
 
-  target_mourn_inferior (inferior_ptid);
+  target_mourn_inferior (ptid_t (inf->pid));
 }
 
 static void
@@ -1690,14 +1673,14 @@ darwin_attach_pid (struct inferior *inf)
   catch (const gdb_exception &ex)
     {
       exit_inferior (inf);
-      inferior_ptid = null_ptid;
+      switch_to_no_thread ();
 
       throw;
     }
 
   target_ops *darwin_ops = get_native_target ();
-  if (!target_is_pushed (darwin_ops))
-    push_target (darwin_ops);
+  if (!inf->target_is_pushed (darwin_ops))
+    inf->push_target (darwin_ops);
 }
 
 /* Get the thread_info object corresponding to this darwin_thread_info.  */
@@ -1716,10 +1699,10 @@ thread_info_from_private_thread_info (da
   gdb_assert_not_reached ("did not find gdb thread for darwin thread");
 }
 
-static void
-darwin_init_thread_list (struct inferior *inf)
+void
+darwin_nat_target::init_thread_list (inferior *inf)
 {
-  darwin_check_new_threads (inf);
+  check_new_threads (inf);
 
   darwin_inferior *priv = get_darwin_inferior (inf);
 
@@ -1729,7 +1712,7 @@ darwin_init_thread_list (struct inferior
   struct thread_info *first_thread
     = thread_info_from_private_thread_info (first_pti);
 
-  inferior_ptid = first_thread->ptid;
+  switch_to_thread (first_thread);
 }
 
 /* The child must synchronize with gdb: gdb must set the exception port
@@ -1783,21 +1766,21 @@ darwin_pre_ptrace (void)
   mark_fd_no_cloexec (ptrace_fds[1]);
 }
 
-static void
-darwin_ptrace_him (int pid)
+void
+darwin_nat_target::ptrace_him (int pid)
 {
   struct inferior *inf = current_inferior ();
 
   darwin_attach_pid (inf);
 
   /* Let's the child run.  */
-  close (ptrace_fds[0]);
-  close (ptrace_fds[1]);
+  ::close (ptrace_fds[0]);
+  ::close (ptrace_fds[1]);
 
   unmark_fd_no_cloexec (ptrace_fds[0]);
   unmark_fd_no_cloexec (ptrace_fds[1]);
 
-  darwin_init_thread_list (inf);
+  init_thread_list (inf);
 
   gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED);
 }
@@ -1812,8 +1795,8 @@ darwin_execvp (const char *file, char *
   res = posix_spawnattr_init (&attr);
   if (res != 0)
     {
-      fprintf_unfiltered
-        (gdb_stderr, "Cannot initialize attribute for posix_spawn\n");
+      gdb_printf
+	(gdb_stderr, "Cannot initialize attribute for posix_spawn\n");
       return;
     }
 
@@ -1829,7 +1812,7 @@ darwin_execvp (const char *file, char *
   res = posix_spawnattr_setflags (&attr, ps_flags);
   if (res != 0)
     {
-      fprintf_unfiltered (gdb_stderr, "Cannot set posix_spawn flags\n");
+      gdb_printf (gdb_stderr, "Cannot set posix_spawn flags\n");
       return;
     }
 
@@ -1851,7 +1834,7 @@ may_have_sip ()
     {
       unsigned long ver = strtoul (str, NULL, 10);
       if (ver >= 16)
-        return true;
+	return true;
     }
   return false;
 }
@@ -1862,7 +1845,7 @@ may_have_sip ()
 static void
 copy_shell_to_cache (const char *shell, const std::string &new_name)
 {
-  scoped_fd from_fd (gdb_open_cloexec (shell, O_RDONLY, 0));
+  scoped_fd from_fd = gdb_open_cloexec (shell, O_RDONLY, 0);
   if (from_fd.get () < 0)
     error (_("Could not open shell (%s) for reading: %s"),
 	   shell, safe_strerror (errno));
@@ -1873,7 +1856,7 @@ copy_shell_to_cache (const char *shell,
 	   new_dir.c_str (), safe_strerror (errno));
 
   gdb::char_vector temp_name = make_temp_filename (new_name);
-  scoped_fd to_fd (gdb_mkostemp_cloexec (&temp_name[0]));
+  scoped_fd to_fd = gdb_mkostemp_cloexec (&temp_name[0]);
   gdb::unlinker unlink_file_on_error (temp_name.data ());
 
   if (to_fd.get () < 0)
@@ -1964,11 +1947,11 @@ you \"run\".  To prevent these attempts,
 	  return false;
 	}
 
-      printf_filtered (_("Note: this version of macOS has System Integrity Protection.\n\
+      gdb_printf (_("Note: this version of macOS has System Integrity Protection.\n\
 Because `startup-with-shell' is enabled, gdb has worked around this by\n\
 caching a copy of your shell.  The shell used by \"run\" is now:\n\
     %s\n"),
-		       new_name.c_str ());
+		  new_name.c_str ());
     }
 
   /* We need to make sure that the new name has the correct lifetime.  */
@@ -1985,7 +1968,8 @@ darwin_nat_target::create_inferior (cons
 				    const std::string &allargs,
 				    char **env, int from_tty)
 {
-  gdb::optional<scoped_restore_tmpl<bool>> restore_startup_with_shell;
+  std::optional<scoped_restore_tmpl<bool>> restore_startup_with_shell;
+  darwin_nat_target *the_target = this;
 
   if (startup_with_shell && may_have_sip ())
     {
@@ -1998,7 +1982,11 @@ darwin_nat_target::create_inferior (cons
 
   /* Do the hard work.  */
   fork_inferior (exec_file, allargs, env, darwin_ptrace_me,
-		 darwin_ptrace_him, darwin_pre_ptrace, copied_shell,
+		 [the_target] (int pid)
+		   {
+		     the_target->ptrace_him (pid);
+		   },
+		 darwin_pre_ptrace, copied_shell,
 		 darwin_execvp);
 }
 
@@ -2043,32 +2031,21 @@ darwin_nat_target::attach (const char *a
   if (pid == getpid ())		/* Trying to masturbate?  */
     error (_("I refuse to debug myself!"));
 
-  if (from_tty)
-    {
-      char *exec_file = get_exec_file (0);
-
-      if (exec_file)
-	printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
-			   target_pid_to_str (ptid_t (pid)).c_str ());
-      else
-	printf_unfiltered (_("Attaching to %s\n"),
-			   target_pid_to_str (ptid_t (pid)).c_str ());
-    }
+  target_announce_attach (from_tty, pid);
 
   if (pid == 0 || ::kill (pid, 0) < 0)
     error (_("Can't attach to process %d: %s (%d)"),
-           pid, safe_strerror (errno), errno);
+	   pid, safe_strerror (errno), errno);
 
-  inferior_ptid = ptid_t (pid);
   inf = current_inferior ();
   inferior_appeared (inf, pid);
-  inf->attach_flag = 1;
+  inf->attach_flag = true;
 
   darwin_attach_pid (inf);
 
   darwin_suspend_inferior (inf);
 
-  darwin_init_thread_list (inf);
+  init_thread_list (inf);
 
   darwin_inferior *priv = get_darwin_inferior (inf);
 
@@ -2099,7 +2076,7 @@ darwin_nat_target::detach (inferior *inf
 
   /* If ptrace() is in use, stop the process.  */
   if (!priv->no_ptrace)
-    darwin_stop_inferior (inf);
+    stop_inferior (inf);
 
   kret = darwin_restore_exception_ports (priv);
   MACH_CHECK_ERROR (kret);
@@ -2108,8 +2085,8 @@ darwin_nat_target::detach (inferior *inf
     {
       res = PTRACE (PT_DETACH, inf->pid, 0, 0);
       if (res != 0)
-	printf_unfiltered (_("Unable to detach from process-id %d: %s (%d)"),
-			   inf->pid, safe_strerror (errno), errno);
+	warning (_("Unable to detach from process-id %d: %s (%d)"),
+		 inf->pid, safe_strerror (errno), errno);
     }
 
   darwin_reply_to_all_pending_messages (inf);
@@ -2361,10 +2338,10 @@ darwin_nat_target::xfer_partial (enum ta
 #ifdef TASK_DYLD_INFO_COUNT
     case TARGET_OBJECT_DARWIN_DYLD_INFO:
       if (writebuf != NULL || readbuf == NULL)
-        {
-          /* Support only read.  */
-          return TARGET_XFER_E_IO;
-        }
+	{
+	  /* Support only read.  */
+	  return TARGET_XFER_E_IO;
+	}
       return darwin_read_dyld_info (priv->task, offset, readbuf, len,
 				    xfered_len);
 #endif
@@ -2398,7 +2375,7 @@ set_enable_mach_exceptions (const char *
     }
 }
 
-char *
+const char *
 darwin_nat_target::pid_to_exec_file (int pid)
 {
   static char path[PATH_MAX];
@@ -2412,7 +2389,7 @@ darwin_nat_target::pid_to_exec_file (int
 }
 
 ptid_t
-darwin_nat_target::get_ada_task_ptid (long lwp, long thread)
+darwin_nat_target::get_ada_task_ptid (long lwp, ULONGEST thread)
 {
   struct inferior *inf = current_inferior ();
   darwin_inferior *priv = get_darwin_inferior (inf);
@@ -2468,10 +2445,10 @@ darwin_nat_target::get_ada_task_ptid (lo
     }
 
   vm_deallocate (gdb_task, (vm_address_t) names,
-                 names_count * sizeof (mach_port_t));
+		 names_count * sizeof (mach_port_t));
 
   if (res)
-    return ptid_t (inferior_ptid.pid (), 0, res);
+    return ptid_t (current_inferior ()->pid, 0, res);
   else
     return null_ptid;
 }
@@ -2482,6 +2459,7 @@ darwin_nat_target::supports_multi_proces
   return true;
 }
 
+void _initialize_darwin_nat ();
 void
 _initialize_darwin_nat ()
 {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/darwin-nat.h ./gdb/darwin-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/darwin-nat.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/darwin-nat.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common things used by the various darwin files
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -21,6 +21,59 @@
 #include <mach/mach.h>
 #include "gdbthread.h"
 
+struct darwin_exception_msg
+{
+  mach_msg_header_t header;
+
+  /* Thread and task taking the exception.  */
+  mach_port_t thread_port;
+  mach_port_t task_port;
+
+  /* Type of the exception.  */
+  exception_type_t ex_type;
+
+  /* Machine dependent details.  */
+  mach_msg_type_number_t data_count;
+  integer_t ex_data[2];
+};
+
+enum darwin_msg_state
+{
+  /* The thread is running.  */
+  DARWIN_RUNNING,
+
+  /* The thread is stopped.  */
+  DARWIN_STOPPED,
+
+  /* The thread has sent a message and waits for a reply.  */
+  DARWIN_MESSAGE
+};
+
+struct darwin_thread_info : public private_thread_info
+{
+  /* The thread port from a GDB point of view.  */
+  thread_t gdb_port = 0;
+
+  /* The thread port from the inferior point of view.  Not to be used inside
+     gdb except for get_ada_task_ptid.  */
+  thread_t inf_port = 0;
+
+  /* Current message state.
+     If the kernel has sent a message it expects a reply and the inferior
+     can't be killed before.  */
+  enum darwin_msg_state msg_state = DARWIN_RUNNING;
+
+  /* True if this thread is single-stepped.  */
+  bool single_step = false;
+
+  /* True if a signal was manually sent to the thread.  */
+  bool signaled = false;
+
+  /* The last exception received.  */
+  struct darwin_exception_msg event {};
+};
+typedef struct darwin_thread_info darwin_thread_t;
+
 /* This needs to be overridden by the platform specific nat code.  */
 
 class darwin_nat_target : public inf_child_target
@@ -33,7 +86,7 @@ class darwin_nat_target : public inf_chi
 
   void detach (inferior *, int) override;
 
-  ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
+  ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
 
   void mourn_inferior () override;
 
@@ -47,7 +100,7 @@ class darwin_nat_target : public inf_chi
 
   std::string pid_to_str (ptid_t) override;
 
-  char *pid_to_exec_file (int pid) override;
+  const char *pid_to_exec_file (int pid) override;
 
   enum target_xfer_status xfer_partial (enum target_object object,
 					const char *annex,
@@ -58,7 +111,22 @@ class darwin_nat_target : public inf_chi
 
   bool supports_multi_process () override;
 
-  ptid_t get_ada_task_ptid (long lwp, long thread) override;
+  ptid_t get_ada_task_ptid (long lwp, ULONGEST thread) override;
+
+private:
+  ptid_t wait_1 (ptid_t, struct target_waitstatus *);
+  void check_new_threads (inferior *inf);
+  int decode_exception_message (mach_msg_header_t *hdr,
+				inferior **pinf,
+				darwin_thread_t **pthread);
+  ptid_t decode_message (mach_msg_header_t *hdr,
+			 darwin_thread_t **pthread,
+			 inferior **pinf,
+			 target_waitstatus *status);
+  void stop_inferior (inferior *inf);
+  void init_thread_list (inferior *inf);
+  void ptrace_him (int pid);
+  int cancel_breakpoint (inferior *inf, ptid_t ptid);
 };
 
 /* Describe the mach exception handling state for a task.  This state is saved
@@ -83,63 +151,10 @@ struct darwin_exception_info
   mach_msg_type_number_t count = 0;
 };
 
-struct darwin_exception_msg
-{
-  mach_msg_header_t header;
-
-  /* Thread and task taking the exception.  */
-  mach_port_t thread_port;
-  mach_port_t task_port;
-
-  /* Type of the exception.  */
-  exception_type_t ex_type;
-
-  /* Machine dependent details.  */
-  mach_msg_type_number_t data_count;
-  integer_t ex_data[2];
-};
-
-enum darwin_msg_state
-{
-  /* The thread is running.  */
-  DARWIN_RUNNING,
-
-  /* The thread is stopped.  */
-  DARWIN_STOPPED,
-
-  /* The thread has sent a message and waits for a reply.  */
-  DARWIN_MESSAGE
-};
-
-struct darwin_thread_info : public private_thread_info
-{
-  /* The thread port from a GDB point of view.  */
-  thread_t gdb_port = 0;
-
-  /* The thread port from the inferior point of view.  Not to be used inside
-     gdb except for get_ada_task_ptid.  */
-  thread_t inf_port = 0;
-
-  /* Current message state.
-     If the kernel has sent a message it expects a reply and the inferior
-     can't be killed before.  */
-  enum darwin_msg_state msg_state = DARWIN_RUNNING;
-
-  /* True if this thread is single-stepped.  */
-  bool single_step = false;
-
-  /* True if a signal was manually sent to the thread.  */
-  bool signaled = false;
-
-  /* The last exception received.  */
-  struct darwin_exception_msg event {};
-};
-typedef struct darwin_thread_info darwin_thread_t;
-
 static inline darwin_thread_info *
 get_darwin_thread_info (class thread_info *thread)
 {
-  return static_cast<darwin_thread_info *> (thread->priv.get ());
+  return gdb::checked_static_cast<darwin_thread_info *> (thread->priv.get ());
 }
 
 /* Describe an inferior.  */
@@ -173,7 +188,7 @@ struct darwin_inferior : public private_
 static inline darwin_inferior *
 get_darwin_inferior (inferior *inf)
 {
-  return static_cast<darwin_inferior *> (inf->priv.get ());
+  return gdb::checked_static_cast<darwin_inferior *> (inf->priv.get ());
 }
 
 /* Exception port.  */
@@ -185,14 +200,8 @@ extern mach_port_t darwin_port_set;
 /* A copy of mach_host_self ().  */
 extern mach_port_t darwin_host_self;
 
-/* FUNCTION_NAME is defined in common-utils.h (or not).  */
-#ifdef FUNCTION_NAME
-#define MACH_CHECK_ERROR(ret) \
-  mach_check_error (ret, __FILE__, __LINE__, FUNCTION_NAME)
-#else
 #define MACH_CHECK_ERROR(ret) \
-  mach_check_error (ret, __FILE__, __LINE__, "??")
-#endif
+  mach_check_error (ret, __FILE__, __LINE__, __func__)
 
 extern void mach_check_error (kern_return_t ret, const char *file,
 			      unsigned int line, const char *func);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/darwin-nat-info.c ./gdb/darwin-nat-info.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/darwin-nat-info.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/darwin-nat-info.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Darwin support for GDB, the GNU debugger.
-   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+   Copyright (C) 1997-2024 Free Software Foundation, Inc.
 
    Contributed by Apple Computer, Inc.
 
@@ -54,12 +54,12 @@
 } while (0)
 
 #define PRINT_FIELD(structure, field) \
-  printf_unfiltered(_(#field":\t%#lx\n"), (unsigned long) (structure)->field)
+  gdb_printf(_(#field":\t%#lx\n"), (unsigned long) (structure)->field)
 
 #define PRINT_TV_FIELD(structure, field) \
-  printf_unfiltered(_(#field":\t%u.%06u sec\n"),	\
-  (unsigned) (structure)->field.seconds, \
-  (unsigned) (structure)->field.microseconds)
+  gdb_printf(_(#field":\t%u.%06u sec\n"),			\
+	     (unsigned) (structure)->field.seconds,		\
+	     (unsigned) (structure)->field.microseconds)
 
 #define task_self mach_task_self
 #define task_by_unix_pid task_for_pid
@@ -83,27 +83,27 @@ info_mach_tasks_command (const char *arg
   sysctl (sysControl, 3, procInfo, &length, NULL, 0);
 
   count = (length / sizeof (struct kinfo_proc));
-  printf_unfiltered (_("%d processes:\n"), count);
+  gdb_printf (_("%d processes:\n"), count);
   for (index = 0; index < count; ++index)
     {
       kern_return_t result;
       mach_port_t taskPort;
 
       result =
-        task_by_unix_pid (mach_task_self (), procInfo[index].kp_proc.p_pid,
-                          &taskPort);
+	task_by_unix_pid (mach_task_self (), procInfo[index].kp_proc.p_pid,
+			  &taskPort);
       if (KERN_SUCCESS == result)
-        {
-          printf_unfiltered (_("    %s is %d has task %#x\n"),
-                             procInfo[index].kp_proc.p_comm,
-                             procInfo[index].kp_proc.p_pid, taskPort);
-        }
+	{
+	  gdb_printf (_("    %s is %d has task %#x\n"),
+		      procInfo[index].kp_proc.p_comm,
+		      procInfo[index].kp_proc.p_pid, taskPort);
+	}
       else
-        {
-          printf_unfiltered (_("    %s is %d unknown task port\n"),
-                             procInfo[index].kp_proc.p_comm,
-                             procInfo[index].kp_proc.p_pid);
-        }
+	{
+	  gdb_printf (_("    %s is %d unknown task port\n"),
+		      procInfo[index].kp_proc.p_comm,
+		      procInfo[index].kp_proc.p_pid);
+	}
     }
 
   xfree (procInfo);
@@ -118,7 +118,7 @@ get_task_from_args (const char *args)
   if (args == NULL || *args == 0)
     {
       if (inferior_ptid == null_ptid)
-	printf_unfiltered (_("No inferior running\n"));
+	gdb_printf (_("No inferior running\n"));
 
       darwin_inferior *priv = get_darwin_inferior (current_inferior ());
 
@@ -129,7 +129,7 @@ get_task_from_args (const char *args)
   task = strtoul (args, &eptr, 0);
   if (*eptr)
     {
-      printf_unfiltered (_("cannot parse task id '%s'\n"), args);
+      gdb_printf (_("cannot parse task id '%s'\n"), args);
       return TASK_NULL;
     }
   return task;
@@ -153,11 +153,11 @@ info_mach_task_command (const char *args
   if (task == TASK_NULL)
     return;
 
-  printf_unfiltered (_("TASK_BASIC_INFO for 0x%x:\n"), task);
+  gdb_printf (_("TASK_BASIC_INFO for 0x%x:\n"), task);
   info_count = TASK_BASIC_INFO_COUNT;
   result = task_info (task,
-                      TASK_BASIC_INFO,
-                      (task_info_t) & task_info_data.basic, &info_count);
+		      TASK_BASIC_INFO,
+		      (task_info_t) & task_info_data.basic, &info_count);
   MACH_CHECK_ERROR (result);
 
   PRINT_FIELD (&task_info_data.basic, suspend_count);
@@ -165,11 +165,11 @@ info_mach_task_command (const char *args
   PRINT_FIELD (&task_info_data.basic, resident_size);
   PRINT_TV_FIELD (&task_info_data.basic, user_time);
   PRINT_TV_FIELD (&task_info_data.basic, system_time);
-  printf_unfiltered (_("\nTASK_EVENTS_INFO:\n"));
+  gdb_printf (_("\nTASK_EVENTS_INFO:\n"));
   info_count = TASK_EVENTS_INFO_COUNT;
   result = task_info (task,
-                      TASK_EVENTS_INFO,
-                      (task_info_t) & task_info_data.events, &info_count);
+		      TASK_EVENTS_INFO,
+		      (task_info_t) & task_info_data.events, &info_count);
   MACH_CHECK_ERROR (result);
 
   PRINT_FIELD (&task_info_data.events, faults);
@@ -181,12 +181,12 @@ info_mach_task_command (const char *args
   PRINT_FIELD (&task_info_data.events, cow_faults);
   PRINT_FIELD (&task_info_data.events, messages_sent);
   PRINT_FIELD (&task_info_data.events, messages_received);
-  printf_unfiltered (_("\nTASK_THREAD_TIMES_INFO:\n"));
+  gdb_printf (_("\nTASK_THREAD_TIMES_INFO:\n"));
   info_count = TASK_THREAD_TIMES_INFO_COUNT;
   result = task_info (task,
-                      TASK_THREAD_TIMES_INFO,
-                      (task_info_t) & task_info_data.thread_times,
-                      &info_count);
+		      TASK_THREAD_TIMES_INFO,
+		      (task_info_t) & task_info_data.thread_times,
+		      &info_count);
   MACH_CHECK_ERROR (result);
   PRINT_TV_FIELD (&task_info_data.thread_times, user_time);
   PRINT_TV_FIELD (&task_info_data.thread_times, system_time);
@@ -211,8 +211,8 @@ info_mach_ports_command (const char *arg
 
   gdb_assert (name_count == type_count);
 
-  printf_unfiltered (_("Ports for task 0x%x:\n"), task);
-  printf_unfiltered (_("port   type\n"));
+  gdb_printf (_("Ports for task 0x%x:\n"), task);
+  gdb_printf (_("port   type\n"));
   for (index = 0; index < name_count; ++index)
     {
       mach_port_t port = names[index];
@@ -232,47 +232,47 @@ info_mach_ports_command (const char *arg
 	  {MACH_PORT_TYPE_DEAD_NAME, "dead", MACH_PORT_RIGHT_DEAD_NAME}
 	};
 
-      printf_unfiltered (_("%04x: %08x "), port, types[index]);
+      gdb_printf (_("%04x: %08x "), port, types[index]);
       for (j = 0; j < sizeof(descrs) / sizeof(*descrs); j++)
 	if (types[index] & descrs[j].type)
 	  {
 	    mach_port_urefs_t ref;
 	    kern_return_t ret;
 
-	    printf_unfiltered (_(" %s("), descrs[j].name);
+	    gdb_printf (_(" %s("), descrs[j].name);
 	    ret = mach_port_get_refs (task, port, descrs[j].right, &ref);
 	    if (ret != KERN_SUCCESS)
-	      printf_unfiltered (_("??"));
+	      gdb_printf (_("??"));
 	    else
-	      printf_unfiltered (_("%u"), ref);
-	    printf_unfiltered (_(" refs)"));
+	      gdb_printf (_("%u"), ref);
+	    gdb_printf (_(" refs)"));
 	  }
       
       if (task == task_self ())
 	{
 	  if (port == task_self())
-	    printf_unfiltered (_(" gdb-task"));
+	    gdb_printf (_(" gdb-task"));
 	  else if (port == darwin_host_self)
-	    printf_unfiltered (_(" host-self"));
+	    gdb_printf (_(" host-self"));
 	  else if (port == darwin_ex_port)
-	    printf_unfiltered (_(" gdb-exception"));
+	    gdb_printf (_(" gdb-exception"));
 	  else if (port == darwin_port_set)
-	    printf_unfiltered (_(" gdb-port_set"));
+	    gdb_printf (_(" gdb-port_set"));
 	  else if (inferior_ptid != null_ptid)
 	    {
 	      struct inferior *inf = current_inferior ();
 	      darwin_inferior *priv = get_darwin_inferior (inf);
 
 	      if (port == priv->task)
-		printf_unfiltered (_(" inferior-task"));
+		gdb_printf (_(" inferior-task"));
 	      else if (port == priv->notify_port)
-		printf_unfiltered (_(" inferior-notify"));
+		gdb_printf (_(" inferior-notify"));
 	      else
 		{
 		  for (int k = 0; k < priv->exception_info.count; k++)
 		    if (port == priv->exception_info.ports[k])
 		      {
-			printf_unfiltered (_(" inferior-excp-port"));
+			gdb_printf (_(" inferior-excp-port"));
 			break;
 		      }
 
@@ -280,8 +280,8 @@ info_mach_ports_command (const char *arg
 		    {
 		      if (port == t->gdb_port)
 			{
-			  printf_unfiltered (_(" inferior-thread for 0x%x"),
-					     priv->task);
+			  gdb_printf (_(" inferior-thread for 0x%x"),
+				      priv->task);
 			  break;
 			}
 		    }
@@ -289,13 +289,13 @@ info_mach_ports_command (const char *arg
 		}
 	    }
 	}
-      printf_unfiltered (_("\n"));
+      gdb_printf (_("\n"));
     }
 
   vm_deallocate (task_self (), (vm_address_t) names,
-                 (name_count * sizeof (mach_port_t)));
+		 (name_count * sizeof (mach_port_t)));
   vm_deallocate (task_self (), (vm_address_t) types,
-                 (type_count * sizeof (mach_port_type_t)));
+		 (type_count * sizeof (mach_port_type_t)));
 }
 
 
@@ -310,18 +310,18 @@ darwin_debug_port_info (task_t task, mac
     (task, port, MACH_PORT_RECEIVE_STATUS, (mach_port_info_t)&status, &len);
   MACH_CHECK_ERROR (kret);
 
-  printf_unfiltered (_("Port 0x%lx in task 0x%lx:\n"), (unsigned long) port,
-                     (unsigned long) task);
-  printf_unfiltered (_("  port set: 0x%x\n"), status.mps_pset);
-  printf_unfiltered (_("     seqno: 0x%x\n"), status.mps_seqno);
-  printf_unfiltered (_("   mscount: 0x%x\n"), status.mps_mscount);
-  printf_unfiltered (_("    qlimit: 0x%x\n"), status.mps_qlimit);
-  printf_unfiltered (_("  msgcount: 0x%x\n"), status.mps_msgcount);
-  printf_unfiltered (_("  sorights: 0x%x\n"), status.mps_sorights);
-  printf_unfiltered (_("   srights: 0x%x\n"), status.mps_srights);
-  printf_unfiltered (_(" pdrequest: 0x%x\n"), status.mps_pdrequest);
-  printf_unfiltered (_(" nsrequest: 0x%x\n"), status.mps_nsrequest);
-  printf_unfiltered (_("     flags: 0x%x\n"), status.mps_flags);
+  gdb_printf (_("Port 0x%lx in task 0x%lx:\n"), (unsigned long) port,
+	      (unsigned long) task);
+  gdb_printf (_("  port set: 0x%x\n"), status.mps_pset);
+  gdb_printf (_("     seqno: 0x%x\n"), status.mps_seqno);
+  gdb_printf (_("   mscount: 0x%x\n"), status.mps_mscount);
+  gdb_printf (_("    qlimit: 0x%x\n"), status.mps_qlimit);
+  gdb_printf (_("  msgcount: 0x%x\n"), status.mps_msgcount);
+  gdb_printf (_("  sorights: 0x%x\n"), status.mps_sorights);
+  gdb_printf (_("   srights: 0x%x\n"), status.mps_srights);
+  gdb_printf (_(" pdrequest: 0x%x\n"), status.mps_pdrequest);
+  gdb_printf (_(" nsrequest: 0x%x\n"), status.mps_nsrequest);
+  gdb_printf (_("     flags: 0x%x\n"), status.mps_flags);
 }
 
 static void
@@ -352,15 +352,15 @@ info_mach_threads_command (const char *a
   result = task_threads (task, &threads, &thread_count);
   MACH_CHECK_ERROR (result);
 
-  printf_unfiltered (_("Threads in task %#x:\n"), task);
+  gdb_printf (_("Threads in task %#x:\n"), task);
   for (i = 0; i < thread_count; ++i)
     {
-      printf_unfiltered (_("    %#x\n"), threads[i]);
+      gdb_printf (_("    %#x\n"), threads[i]);
       mach_port_deallocate (task_self (), threads[i]);
     }
 
   vm_deallocate (task_self (), (vm_address_t) threads,
-                 (thread_count * sizeof (thread_t)));
+		 (thread_count * sizeof (thread_t)));
 }
 
 static void
@@ -378,7 +378,7 @@ info_mach_thread_command (const char *ar
   CHECK_ARGS (_("Thread"), args);
   sscanf (args, "0x%x", &thread);
 
-  printf_unfiltered (_("THREAD_BASIC_INFO\n"));
+  gdb_printf (_("THREAD_BASIC_INFO\n"));
   info_count = THREAD_BASIC_INFO_COUNT;
   result = thread_info (thread,
 			THREAD_BASIC_INFO,
@@ -526,7 +526,7 @@ darwin_debug_regions (task_t task, mach_
 			 (vm_region_info_t) &info, &count, &object_name);
   if (kret != KERN_SUCCESS)
     {
-      printf_filtered (_("No memory regions."));
+      gdb_printf (_("No memory regions."));
       return;
     }
   memcpy (&prev_info, &info, sizeof (vm_region_basic_info_data_64_t));
@@ -543,65 +543,66 @@ darwin_debug_regions (task_t task, mach_
 
       /* Check to see if address space has wrapped around.  */
       if (address == 0)
-        print = done = 1;
+	print = done = 1;
 
       if (!done)
-        {
-          count = VM_REGION_BASIC_INFO_COUNT_64;
-          kret =
-            mach_vm_region (task, &address, &size, VM_REGION_BASIC_INFO_64,
-                 	      (vm_region_info_t) &info, &count, &object_name);
-          if (kret != KERN_SUCCESS)
-            {
-              size = 0;
-              print = done = 1;
-            }
-        }
+	{
+	  count = VM_REGION_BASIC_INFO_COUNT_64;
+	  kret =
+	    mach_vm_region (task, &address, &size, VM_REGION_BASIC_INFO_64,
+		 	      (vm_region_info_t) &info, &count, &object_name);
+	  if (kret != KERN_SUCCESS)
+	    {
+	      size = 0;
+	      print = done = 1;
+	    }
+	}
 
       if (address != prev_address + prev_size)
-        print = 1;
+	print = 1;
 
       if ((info.protection != prev_info.protection)
-          || (info.max_protection != prev_info.max_protection)
-          || (info.inheritance != prev_info.inheritance)
-          || (info.shared != prev_info.reserved)
-          || (info.reserved != prev_info.reserved))
-        print = 1;
+	  || (info.max_protection != prev_info.max_protection)
+	  || (info.inheritance != prev_info.inheritance)
+	  || (info.shared != prev_info.reserved)
+	  || (info.reserved != prev_info.reserved))
+	print = 1;
 
       if (print)
-        {
-          printf_filtered (_("%s-%s %s/%s  %s %s %s"),
-                           paddress (target_gdbarch (), prev_address),
-                           paddress (target_gdbarch (), prev_address + prev_size),
-                           unparse_protection (prev_info.protection),
-                           unparse_protection (prev_info.max_protection),
-                           unparse_inheritance (prev_info.inheritance),
-                           prev_info.shared ? _("shrd") : _("priv"),
-                           prev_info.reserved ? _("reserved") : _("not-rsvd"));
-
-          if (nsubregions > 1)
-            printf_filtered (_(" (%d sub-rgn)"), nsubregions);
-
-          printf_filtered (_("\n"));
-
-          prev_address = address;
-          prev_size = size;
-          memcpy (&prev_info, &info, sizeof (vm_region_basic_info_data_64_t));
-          nsubregions = 1;
+	{
+	  gdbarch *arch = current_inferior ()->arch ();
+	  gdb_printf (_("%s-%s %s/%s  %s %s %s"),
+		      paddress (arch, prev_address),
+		      paddress (arch, prev_address + prev_size),
+		      unparse_protection (prev_info.protection),
+		      unparse_protection (prev_info.max_protection),
+		      unparse_inheritance (prev_info.inheritance),
+		      prev_info.shared ? _("shrd") : _("priv"),
+		      prev_info.reserved ? _("reserved") : _("not-rsvd"));
+
+	  if (nsubregions > 1)
+	    gdb_printf (_(" (%d sub-rgn)"), nsubregions);
+
+	  gdb_printf (_("\n"));
+
+	  prev_address = address;
+	  prev_size = size;
+	  memcpy (&prev_info, &info, sizeof (vm_region_basic_info_data_64_t));
+	  nsubregions = 1;
 
-          num_printed++;
-        }
+	  num_printed++;
+	}
       else
-        {
-          prev_size += size;
-          nsubregions++;
-        }
+	{
+	  prev_size += size;
+	  nsubregions++;
+	}
 
       if ((max > 0) && (num_printed >= max))
-        done = 1;
+	done = 1;
 
       if (done)
-        break;
+	break;
     }
 }
 
@@ -618,7 +619,7 @@ darwin_debug_regions_recurse (task_t tas
 
   ui_out_emit_table table_emitter (uiout, 9, -1, "regions");
 
-  if (gdbarch_addr_bit (target_gdbarch ()) <= 32)
+  if (gdbarch_addr_bit (current_inferior ()->arch ()) <= 32)
     {
       uiout->table_header (10, ui_left, "start", "Start");
       uiout->table_header (10, ui_left, "end", "End");
@@ -654,9 +655,10 @@ darwin_debug_regions_recurse (task_t tas
 
       {
 	ui_out_emit_tuple tuple_emitter (uiout, "regions-row");
+	gdbarch *arch = current_inferior ()->arch ();
 
-	uiout->field_core_addr ("start", target_gdbarch (), r_start);
-	uiout->field_core_addr ("end", target_gdbarch (), r_start + r_size);
+	uiout->field_core_addr ("start", arch, r_start);
+	uiout->field_core_addr ("end", arch, r_start + r_size);
 	uiout->field_string ("min-prot",
 			     unparse_protection (r_info.protection));
 	uiout->field_string ("max-prot",
@@ -723,8 +725,8 @@ info_mach_region_command (const char *ex
   struct inferior *inf;
 
   expression_up expr = parse_expression (exp);
-  val = evaluate_expression (expr.get ());
-  if (TYPE_IS_REFERENCE (value_type (val)))
+  val = expr->evaluate ();
+  if (TYPE_IS_REFERENCE (val->type ()))
     {
       val = value_ind (val);
     }
@@ -743,48 +745,48 @@ disp_exception (const darwin_exception_i
 {
   int i;
 
-  printf_filtered (_("%d exceptions:\n"), info->count);
+  gdb_printf (_("%d exceptions:\n"), info->count);
   for (i = 0; i < info->count; i++)
     {
       exception_mask_t mask = info->masks[i];
 
-      printf_filtered (_("port 0x%04x, behavior: "), info->ports[i]);
+      gdb_printf (_("port 0x%04x, behavior: "), info->ports[i]);
       switch (info->behaviors[i])
 	{
 	case EXCEPTION_DEFAULT:
-	  printf_unfiltered (_("default"));
+	  gdb_printf (_("default"));
 	  break;
 	case EXCEPTION_STATE:
-	  printf_unfiltered (_("state"));
+	  gdb_printf (_("state"));
 	  break;
 	case EXCEPTION_STATE_IDENTITY:
-	  printf_unfiltered (_("state-identity"));
+	  gdb_printf (_("state-identity"));
 	  break;
 	default:
-	  printf_unfiltered (_("0x%x"), info->behaviors[i]);
+	  gdb_printf (_("0x%x"), info->behaviors[i]);
 	}
-      printf_unfiltered (_(", masks:"));
+      gdb_printf (_(", masks:"));
       if (mask & EXC_MASK_BAD_ACCESS)
-	printf_unfiltered (_(" BAD_ACCESS"));
+	gdb_printf (_(" BAD_ACCESS"));
       if (mask & EXC_MASK_BAD_INSTRUCTION)
-	printf_unfiltered (_(" BAD_INSTRUCTION"));
+	gdb_printf (_(" BAD_INSTRUCTION"));
       if (mask & EXC_MASK_ARITHMETIC)
-	printf_unfiltered (_(" ARITHMETIC"));
+	gdb_printf (_(" ARITHMETIC"));
       if (mask & EXC_MASK_EMULATION)
-	printf_unfiltered (_(" EMULATION"));
+	gdb_printf (_(" EMULATION"));
       if (mask & EXC_MASK_SOFTWARE)
-	printf_unfiltered (_(" SOFTWARE"));
+	gdb_printf (_(" SOFTWARE"));
       if (mask & EXC_MASK_BREAKPOINT)
-	printf_unfiltered (_(" BREAKPOINT"));
+	gdb_printf (_(" BREAKPOINT"));
       if (mask & EXC_MASK_SYSCALL)
-	printf_unfiltered (_(" SYSCALL"));
+	gdb_printf (_(" SYSCALL"));
       if (mask & EXC_MASK_MACH_SYSCALL)
-	printf_unfiltered (_(" MACH_SYSCALL"));
+	gdb_printf (_(" MACH_SYSCALL"));
       if (mask & EXC_MASK_RPC_ALERT)
-	printf_unfiltered (_(" RPC_ALERT"));
+	gdb_printf (_(" RPC_ALERT"));
       if (mask & EXC_MASK_CRASH)
-	printf_unfiltered (_(" CRASH"));
-      printf_unfiltered (_("\n"));
+	gdb_printf (_(" CRASH"));
+      gdb_printf (_("\n"));
     }
 }
 
@@ -801,7 +803,7 @@ info_mach_exceptions_command (const char
       if (strcmp (args, "saved") == 0)
 	{
 	  if (inferior_ptid == null_ptid)
-	    printf_unfiltered (_("No inferior running\n"));
+	    gdb_printf (_("No inferior running\n"));
 
 	  darwin_inferior *priv = get_darwin_inferior (current_inferior ());
 
@@ -825,7 +827,7 @@ info_mach_exceptions_command (const char
       struct inferior *inf;
 
       if (inferior_ptid == null_ptid)
-	printf_unfiltered (_("No inferior running\n"));
+	gdb_printf (_("No inferior running\n"));
       inf = current_inferior ();
       
       darwin_inferior *priv = get_darwin_inferior (inf);
@@ -838,29 +840,30 @@ info_mach_exceptions_command (const char
     }
 }
 
+void _initialize_darwin_info_commands ();
 void
-_initialize_darwin_info_commands (void)
+_initialize_darwin_info_commands ()
 {
   add_info ("mach-tasks", info_mach_tasks_command,
-            _("Get list of tasks in system."));
+	    _("Get list of tasks in system."));
   add_info ("mach-ports", info_mach_ports_command,
-            _("Get list of ports in a task."));
+	    _("Get list of ports in a task."));
   add_info ("mach-port", info_mach_port_command,
-            _("Get info on a specific port."));
+	    _("Get info on a specific port."));
   add_info ("mach-task", info_mach_task_command,
-            _("Get info on a specific task."));
+	    _("Get info on a specific task."));
   add_info ("mach-threads", info_mach_threads_command,
-            _("Get list of threads in a task."));
+	    _("Get list of threads in a task."));
   add_info ("mach-thread", info_mach_thread_command,
-            _("Get info on a specific thread."));
+	    _("Get info on a specific thread."));
 
   add_info ("mach-regions", info_mach_regions_command,
-            _("Get information on all mach region for the task."));
+	    _("Get information on all mach region for the task."));
   add_info ("mach-regions-rec", info_mach_regions_recurse_command,
-            _("Get information on all mach sub region for the task."));
+	    _("Get information on all mach sub region for the task."));
   add_info ("mach-region", info_mach_region_command,
-            _("Get information on mach region at given address."));
+	    _("Get information on mach region at given address."));
 
   add_info ("mach-exceptions", info_mach_exceptions_command,
-            _("Disp mach exceptions."));
+	    _("Disp mach exceptions."));
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/data-directory/Makefile.in ./gdb/data-directory/Makefile.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/data-directory/Makefile.in	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/data-directory/Makefile.in	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+# Copyright (C) 2010-2024 Free Software Foundation, Inc.
 
 # Makefile for building a staged copy of the data-directory.
 # This file is part of GDB.
@@ -63,28 +63,54 @@ GEN_SYSCALLS_FILES = \
 	sparc-linux.xml \
 	sparc64-linux.xml
 
-SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml $(GEN_SYSCALLS_FILES)
+SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml netbsd.xml $(GEN_SYSCALLS_FILES)
 
 PYTHON_DIR = python
 PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR)
 PYTHON_FILE_LIST = \
 	gdb/__init__.py \
+	gdb/disassembler.py \
 	gdb/FrameDecorator.py \
 	gdb/FrameIterator.py \
 	gdb/frames.py \
+	gdb/missing_debug.py \
 	gdb/printing.py \
 	gdb/prompt.py \
+	gdb/styling.py \
 	gdb/types.py \
 	gdb/unwinder.py \
 	gdb/xmethod.py \
 	gdb/command/__init__.py \
 	gdb/command/explore.py \
 	gdb/command/frame_filters.py \
+	gdb/command/missing_debug.py \
 	gdb/command/pretty_printers.py \
 	gdb/command/prompt.py \
 	gdb/command/type_printers.py \
 	gdb/command/unwinders.py \
 	gdb/command/xmethods.py \
+	gdb/dap/breakpoint.py \
+	gdb/dap/bt.py \
+	gdb/dap/disassemble.py \
+	gdb/dap/evaluate.py \
+	gdb/dap/events.py \
+	gdb/dap/frames.py \
+	gdb/dap/__init__.py \
+	gdb/dap/io.py \
+	gdb/dap/launch.py \
+	gdb/dap/locations.py \
+	gdb/dap/memory.py \
+	gdb/dap/modules.py \
+	gdb/dap/next.py \
+	gdb/dap/pause.py \
+	gdb/dap/scopes.py \
+	gdb/dap/server.py \
+	gdb/dap/sources.py \
+	gdb/dap/startup.py \
+	gdb/dap/state.py \
+	gdb/dap/threads.py \
+	gdb/dap/typecheck.py \
+	gdb/dap/varref.py \
 	gdb/function/__init__.py \
 	gdb/function/as_string.py \
 	gdb/function/caller_is.py \
@@ -411,7 +437,7 @@ clean-info:
 MAKEOVERRIDES=
 
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	cd $(top_builddir) && $(MAKE) data-directory/Makefile
+	cd .. && $(SHELL) ./config.status data-directory/Makefile
 
 # Disable implicit make rules.
 include $(srcdir)/../disable-implicit-rules.mk
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dbxread.c ./gdb/dbxread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dbxread.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/dbxread.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Read dbx symbol tables and convert to internal format, for GDB.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -31,18 +31,14 @@
    for real.  dbx_psymtab_to_symtab() is the function that does this */
 
 #include "defs.h"
-#if defined(__CYGNUSCLIB__)
-#include <sys/types.h>
-#include <fcntl.h>
-#endif
 
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include <sys/stat.h>
 #include "symtab.h"
 #include "breakpoint.h"
 #include "target.h"
-#include "gdbcore.h"		/* for bfd stuff */
-#include "libaout.h"		/* FIXME Secret internal BFD stuff for a.out */
+#include "gdbcore.h"
+#include "libaout.h"
 #include "filenames.h"
 #include "objfiles.h"
 #include "buildsym-legacy.h"
@@ -52,16 +48,16 @@
 #include "complaints.h"
 #include "cp-abi.h"
 #include "cp-support.h"
-#include "psympriv.h"
+#include "c-lang.h"
+#include "psymtab.h"
 #include "block.h"
 #include "aout/aout64.h"
-#include "aout/stab_gnu.h"	/* We always use GNU stabs, not
-				   native, now.  */
+#include "aout/stab_gnu.h"
 
 
 /* Key for dbx-associated data.  */
 
-objfile_key<dbx_symfile_info> dbx_objfile_data_key;
+const registry<objfile>::key<dbx_symfile_info> dbx_objfile_data_key;
 
 /* We put a pointer to this structure in the read_symtab_private field
    of the psymtab.  */
@@ -160,7 +156,7 @@ static unsigned char processing_acc_comp
    need to make guesses based on the symbols (which *are* relocated to
    reflect the address it will be loaded at).  */
 
-static CORE_ADDR lowest_text_address;
+static unrelocated_addr lowest_text_address;
 
 /* Non-zero if there is any line number info in the objfile.  Prevents
    dbx_end_psymtab from discarding an otherwise empty psymtab.  */
@@ -245,7 +241,7 @@ find_text_range (bfd * sym_bfd, struct o
 struct header_file_location
 {
   header_file_location (const char *name_, int instance_,
-			struct partial_symtab *pst_)
+			legacy_psymtab *pst_)
     : name (name_),
       instance (instance_),
       pst (pst_)
@@ -254,7 +250,7 @@ struct header_file_location
 
   const char *name;		/* Name of header file */
   int instance;			/* See above */
-  struct partial_symtab *pst;	/* Partial symtab that has the
+  legacy_psymtab *pst;	/* Partial symtab that has the
 				   BINCL/EINCL defs for this file.  */
 };
 
@@ -263,16 +259,17 @@ static std::vector<struct header_file_lo
 
 /* Local function prototypes.  */
 
-static void read_ofile_symtab (struct objfile *, struct partial_symtab *);
+static void read_ofile_symtab (struct objfile *, legacy_psymtab *);
 
-static void dbx_read_symtab (struct partial_symtab *self,
+static void dbx_read_symtab (legacy_psymtab *self,
 			     struct objfile *objfile);
 
-static void dbx_psymtab_to_symtab_1 (struct objfile *, struct partial_symtab *);
+static void dbx_expand_psymtab (legacy_psymtab *, struct objfile *);
 
-static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *);
+static void read_dbx_symtab (minimal_symbol_reader &, psymtab_storage *,
+			     struct objfile *);
 
-static struct partial_symtab *find_corresponding_bincl_psymtab (const char *,
+static legacy_psymtab *find_corresponding_bincl_psymtab (const char *,
 								int);
 
 static const char *dbx_next_symbol_text (struct objfile *);
@@ -288,7 +285,7 @@ static void dbx_symfile_read (struct obj
 static void dbx_symfile_finish (struct objfile *);
 
 static void record_minimal_symbol (minimal_symbol_reader &,
-				   const char *, CORE_ADDR, int,
+				   const char *, unrelocated_addr, int,
 				   struct objfile *);
 
 static void add_new_header_file (const char *, int);
@@ -297,8 +294,8 @@ static void add_old_header_file (const c
 
 static void add_this_object_header_file (int);
 
-static struct partial_symtab *start_psymtab (struct objfile *, const char *,
-					     CORE_ADDR, int);
+static legacy_psymtab *start_psymtab (psymtab_storage *, struct objfile *,
+				      const char *, unrelocated_addr, int);
 
 /* Free up old header file tables.  */
 
@@ -430,7 +427,7 @@ explicit_lookup_type (int real_filenum,
 
 static void
 record_minimal_symbol (minimal_symbol_reader &reader,
-		       const char *name, CORE_ADDR address, int type,
+		       const char *name, unrelocated_addr address, int type,
 		       struct objfile *objfile)
 {
   enum minimal_symbol_type ms_type;
@@ -461,8 +458,8 @@ record_minimal_symbol (minimal_symbol_re
       break;
     case N_SETV:
       /* I don't think this type actually exists; since a N_SETV is the result
-         of going over many .o files, it doesn't make sense to have one
-         file local.  */
+	 of going over many .o files, it doesn't make sense to have one
+	 file local.  */
       ms_type = mst_file_data;
       section = SECT_OFF_DATA (objfile);
       break;
@@ -478,17 +475,18 @@ record_minimal_symbol (minimal_symbol_re
       ms_type = mst_file_data;
 
       /* Check for __DYNAMIC, which is used by Sun shared libraries. 
-         Record it as global even if it's local, not global, so
-         lookup_minimal_symbol can find it.  We don't check symbol_leading_char
-         because for SunOS4 it always is '_'.  */
-      if (name[8] == 'C' && strcmp ("__DYNAMIC", name) == 0)
+	 Record it as global even if it's local, not global, so
+	 lookup_minimal_symbol can find it.  We don't check symbol_leading_char
+	 because for SunOS4 it always is '_'.  */
+      if (strcmp ("__DYNAMIC", name) == 0)
 	ms_type = mst_data;
 
       /* Same with virtual function tables, both global and static.  */
       {
 	const char *tempstring = name;
 
-	if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
+	if (*tempstring != '\0'
+	    && *tempstring == bfd_get_symbol_leading_char (objfile->obfd.get ()))
 	  ++tempstring;
 	if (is_vtable_name (tempstring))
 	  ms_type = mst_data;
@@ -523,7 +521,7 @@ dbx_symfile_read (struct objfile *objfil
   bfd *sym_bfd;
   int val;
 
-  sym_bfd = objfile->obfd;
+  sym_bfd = objfile->obfd.get ();
 
   /* .o and .nlm files are relocatables with text, data and bss segs based at
      0.  This flag disables special (Solaris stabs-in-elf only) fixups for
@@ -535,9 +533,6 @@ dbx_symfile_read (struct objfile *objfil
   if (val < 0)
     perror_with_name (objfile_name (objfile));
 
-  /* Size the symbol table.  */
-  init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
-
   symbol_size = DBX_SYMBOL_SIZE (objfile);
   symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
 
@@ -547,7 +542,10 @@ dbx_symfile_read (struct objfile *objfil
 
   /* Read stabs data from executable file and define symbols.  */
 
-  read_dbx_symtab (reader, objfile);
+  psymbol_functions *psf = new psymbol_functions ();
+  psymtab_storage *partial_symtabs = psf->get_partial_symtabs ().get ();
+  objfile->qf.emplace_front (psf);
+  read_dbx_symtab (reader, partial_symtabs, objfile);
 
   /* Install any minimal symbols that have been collected as the current
      minimal symbols for this objfile.  */
@@ -586,7 +584,7 @@ static void
 dbx_symfile_init (struct objfile *objfile)
 {
   int val;
-  bfd *sym_bfd = objfile->obfd;
+  bfd *sym_bfd = objfile->obfd.get ();
   const char *name = bfd_get_filename (sym_bfd);
   asection *text_sect;
   unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
@@ -630,8 +628,8 @@ dbx_symfile_init (struct objfile *objfil
   if (STRING_TABLE_OFFSET == 0)
     {
       /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
-         will never be zero, even when there is no string table.  This
-         would appear to be a bug in bfd.  */
+	 will never be zero, even when there is no string table.  This
+	 would appear to be a bug in bfd.  */
       DBX_STRINGTAB_SIZE (objfile) = 0;
       DBX_STRINGTAB (objfile) = NULL;
     }
@@ -642,7 +640,7 @@ dbx_symfile_init (struct objfile *objfil
 	perror_with_name (name);
 
       memset (size_temp, 0, sizeof (size_temp));
-      val = bfd_bread (size_temp, sizeof (size_temp), sym_bfd);
+      val = bfd_read (size_temp, sizeof (size_temp), sym_bfd);
       if (val < 0)
 	{
 	  perror_with_name (name);
@@ -681,9 +679,9 @@ dbx_symfile_init (struct objfile *objfil
 	  val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
 	  if (val < 0)
 	    perror_with_name (name);
-	  val = bfd_bread (DBX_STRINGTAB (objfile),
-			   DBX_STRINGTAB_SIZE (objfile),
-			   sym_bfd);
+	  val = bfd_read (DBX_STRINGTAB (objfile),
+			  DBX_STRINGTAB_SIZE (objfile),
+			  sym_bfd);
 	  if (val != DBX_STRINGTAB_SIZE (objfile))
 	    perror_with_name (name);
 	}
@@ -765,13 +763,13 @@ fill_symbuf (bfd *sym_bfd)
     {
       nbytes = sizeof (symbuf);
       if (nbytes > symbuf_left)
-        nbytes = symbuf_left;
+	nbytes = symbuf_left;
       memcpy (symbuf, stabs_data + symbuf_read, nbytes);
     }
   else if (symbuf_sections == NULL)
     {
       count = sizeof (symbuf);
-      nbytes = bfd_bread (symbuf, count, sym_bfd);
+      nbytes = bfd_read (symbuf, count, sym_bfd);
     }
   else
     {
@@ -789,7 +787,7 @@ fill_symbuf (bfd *sym_bfd)
       count = symbuf_left;
       if (count > sizeof (symbuf))
 	count = sizeof (symbuf);
-      nbytes = bfd_bread (symbuf, count, sym_bfd);
+      nbytes = bfd_read (symbuf, count, sym_bfd);
     }
 
   if (nbytes < 0)
@@ -811,7 +809,8 @@ stabs_seek (int sym_offset)
       symbuf_left -= sym_offset;
     }
   else
-    bfd_seek (symfile_bfd, sym_offset, SEEK_CUR);
+    if (bfd_seek (symfile_bfd, sym_offset, SEEK_CUR) != 0)
+      perror_with_name (bfd_get_filename (symfile_bfd));
 }
 
 #define INTERNALIZE_SYMBOL(intern, extern, abfd)			\
@@ -857,7 +856,7 @@ dbx_next_symbol_text (struct objfile *ob
    bincl in the list.  Return the partial symtab associated
    with that header_file_location.  */
 
-static struct partial_symtab *
+static legacy_psymtab *
 find_corresponding_bincl_psymtab (const char *name, int instance)
 {
   for (const header_file_location &bincl : *bincl_list)
@@ -866,7 +865,7 @@ find_corresponding_bincl_psymtab (const
       return bincl.pst;
 
   repeated_header_complaint (name, symnum);
-  return (struct partial_symtab *) 0;
+  return (legacy_psymtab *) 0;
 }
 
 /* Set namestring based on nlist.  If the string table index is invalid, 
@@ -913,8 +912,8 @@ find_stab_function (const char *namestri
   if (msym.minsym == NULL)
     {
       /* Sun Fortran appends an underscore to the minimal symbol name,
-         try again with an appended underscore if the minimal symbol
-         was not found.  */
+	 try again with an appended underscore if the minimal symbol
+	 was not found.  */
       p[n] = '_';
       p[n + 1] = 0;
       msym = lookup_minimal_symbol (p, filename, objfile);
@@ -949,9 +948,11 @@ function_outside_compilation_unit_compla
    debugging information is available.  */
 
 static void
-read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
+read_dbx_symtab (minimal_symbol_reader &reader,
+		 psymtab_storage *partial_symtabs,
+		 struct objfile *objfile)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   struct external_nlist *bufp = 0;	/* =0 avoids gcc -Wall glitch.  */
   struct internal_nlist nlist;
   CORE_ADDR text_addr;
@@ -968,7 +969,7 @@ read_dbx_symtab (minimal_symbol_reader &
   int data_sect_index;
 
   /* Current partial symtab.  */
-  struct partial_symtab *pst;
+  legacy_psymtab *pst;
 
   /* List of current psymtab's include files.  */
   const char **psymtab_include_list;
@@ -976,7 +977,7 @@ read_dbx_symtab (minimal_symbol_reader &
   int includes_used;
 
   /* Index within current psymtab dependency list.  */
-  struct partial_symtab **dependency_list;
+  legacy_psymtab **dependency_list;
   int dependencies_used, dependencies_allocated;
 
   text_addr = DBX_TEXT_ADDR (objfile);
@@ -989,7 +990,7 @@ read_dbx_symtab (minimal_symbol_reader &
 
   stringtab_global = DBX_STRINGTAB (objfile);
 
-  pst = (struct partial_symtab *) 0;
+  pst = (legacy_psymtab *) 0;
 
   includes_allocated = 30;
   includes_used = 0;
@@ -999,8 +1000,8 @@ read_dbx_symtab (minimal_symbol_reader &
   dependencies_allocated = 30;
   dependencies_used = 0;
   dependency_list =
-    (struct partial_symtab **) alloca (dependencies_allocated *
-				       sizeof (struct partial_symtab *));
+    (legacy_psymtab **) alloca (dependencies_allocated *
+				sizeof (legacy_psymtab *));
 
   /* Init bincl list */
   std::vector<struct header_file_location> bincl_storage;
@@ -1009,10 +1010,10 @@ read_dbx_symtab (minimal_symbol_reader &
 
   set_last_source_file (NULL);
 
-  lowest_text_address = (CORE_ADDR) -1;
+  lowest_text_address = (unrelocated_addr) -1;
 
-  symfile_bfd = objfile->obfd;	/* For next_text_symbol.  */
-  abfd = objfile->obfd;
+  symfile_bfd = objfile->obfd.get ();	/* For next_text_symbol.  */
+  abfd = objfile->obfd.get ();
   symbuf_end = symbuf_idx = 0;
   next_symbol_text_func = dbx_next_symbol_text;
   textlow_not_set = 1;
@@ -1046,9 +1047,7 @@ read_dbx_symtab (minimal_symbol_reader &
 
   /* If data_sect_index is still -1, that's okay.  It's perfectly fine
      for the file to have no .data, no .bss, and no .text at all, if
-     it also has no global or static variables.  If it does, we will
-     get an internal error from an ANOFFSET macro below when we try to
-     use data_sect_index.  */
+     it also has no global or static variables.  */
 
   for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
     {
@@ -1071,15 +1070,15 @@ read_dbx_symtab (minimal_symbol_reader &
       OBJSTAT (objfile, n_stabs++);
 
       /* Ok.  There is a lot of code duplicated in the rest of this
-         switch statement (for efficiency reasons).  Since I don't
-         like duplicating code, I will do my penance here, and
-         describe the code which is duplicated:
-
-         *) The assignment to namestring.
-         *) The call to strchr.
-         *) The addition of a partial symbol the two partial
-         symbol lists.  This last is a large section of code, so
-         I've imbedded it in the following macro.  */
+	 switch statement (for efficiency reasons).  Since I don't
+	 like duplicating code, I will do my penance here, and
+	 describe the code which is duplicated:
+
+	 *) The assignment to namestring.
+	 *) The call to strchr.
+	 *) The addition of a partial symbol the two partial
+	 symbol lists.  This last is a large section of code, so
+	 I've embedded it in the following macro.  */
 
       switch (nlist.n_type)
 	{
@@ -1105,7 +1104,8 @@ read_dbx_symtab (minimal_symbol_reader &
 	  record_it:
 	  namestring = set_namestring (objfile, &nlist);
 
-	  record_minimal_symbol (reader, namestring, nlist.n_value,
+	  record_minimal_symbol (reader, namestring,
+				 unrelocated_addr (nlist.n_value),
 				 nlist.n_type, objfile);	/* Always */
 	  continue;
 
@@ -1127,18 +1127,21 @@ read_dbx_symtab (minimal_symbol_reader &
 	      || (namestring[(nsl = strlen (namestring)) - 1] == 'o'
 		  && namestring[nsl - 2] == '.'))
 	    {
+	      unrelocated_addr unrel_val = unrelocated_addr (nlist.n_value);
+
 	      if (past_first_source_file && pst
 		  /* The gould NP1 uses low values for .o and -l symbols
 		     which are not the address.  */
-		  && nlist.n_value >= pst->raw_text_low ())
+		  && unrel_val >= pst->unrelocated_text_low ())
 		{
-		  dbx_end_psymtab (objfile, pst, psymtab_include_list,
+		  dbx_end_psymtab (objfile, partial_symtabs,
+				   pst, psymtab_include_list,
 				   includes_used, symnum * symbol_size,
-				   nlist.n_value > pst->raw_text_high ()
-				   ? nlist.n_value : pst->raw_text_high (),
+				   unrel_val > pst->unrelocated_text_high ()
+				   ? unrel_val : pst->unrelocated_text_high (),
 				   dependency_list, dependencies_used,
 				   textlow_not_set);
-		  pst = (struct partial_symtab *) 0;
+		  pst = (legacy_psymtab *) 0;
 		  includes_used = 0;
 		  dependencies_used = 0;
 		  has_line_numbers = 0;
@@ -1247,13 +1250,16 @@ read_dbx_symtab (minimal_symbol_reader &
 
 		if (pst)
 		  {
-		    dbx_end_psymtab (objfile, pst, psymtab_include_list,
+		    unrelocated_addr unrel_value = unrelocated_addr (valu);
+		    dbx_end_psymtab (objfile, partial_symtabs,
+				     pst, psymtab_include_list,
 				     includes_used, symnum * symbol_size,
-				     (valu > pst->raw_text_high ()
-				      ? valu : pst->raw_text_high ()),
+				     unrel_value > pst->unrelocated_text_high ()
+				     ? unrel_value
+				     : pst->unrelocated_text_high (),
 				     dependency_list, dependencies_used,
 				     prev_textlow_not_set);
-		    pst = (struct partial_symtab *) 0;
+		    pst = (legacy_psymtab *) 0;
 		    includes_used = 0;
 		    dependencies_used = 0;
 		    has_line_numbers = 0;
@@ -1280,8 +1286,8 @@ read_dbx_symtab (minimal_symbol_reader &
 	      {
 		/* Save the directory name SOs locally, then save it into
 		   the psymtab when it's created below.  */
-	        dirname_nso = namestring;
-	        continue;		
+		dirname_nso = namestring;
+		continue;		
 	      }
 
 	    /* Some other compilers (C++ ones in particular) emit useless
@@ -1290,8 +1296,9 @@ read_dbx_symtab (minimal_symbol_reader &
 
 	    if (!pst)
 	      {
-		pst = start_psymtab (objfile,
-				     namestring, valu,
+		pst = start_psymtab (partial_symtabs, objfile,
+				     namestring,
+				     unrelocated_addr (valu),
 				     first_so_symnum * symbol_size);
 		pst->dirname = dirname_nso;
 		dirname_nso = NULL;
@@ -1416,13 +1423,14 @@ read_dbx_symtab (minimal_symbol_reader &
 	  /* See if this is an end of function stab.  */
 	  if (pst && nlist.n_type == N_FUN && *namestring == '\000')
 	    {
-	      CORE_ADDR valu;
+	      unrelocated_addr valu;
 
 	      /* It's value is the size (in bytes) of the function for
 		 function relative stabs, or the address of the function's
 		 end for old style stabs.  */
-	      valu = nlist.n_value + last_function_start;
-	      if (pst->raw_text_high () == 0 || valu > pst->raw_text_high ())
+	      valu = unrelocated_addr (nlist.n_value + last_function_start);
+	      if (pst->unrelocated_text_high () == unrelocated_addr (0)
+		  || valu > pst->unrelocated_text_high ())
 		pst->set_text_high (valu);
 	      break;
 	    }
@@ -1431,25 +1439,38 @@ read_dbx_symtab (minimal_symbol_reader &
 	  if (!p)
 	    continue;		/* Not a debugging symbol.   */
 
- 	  sym_len = 0;
+	  sym_len = 0;
 	  sym_name = NULL;	/* pacify "gcc -Werror" */
- 	  if (psymtab_language == language_cplus)
- 	    {
+	  if (psymtab_language == language_cplus)
+	    {
 	      std::string name (namestring, p - namestring);
-	      std::string new_name = cp_canonicalize_string (name.c_str ());
-	      if (!new_name.empty ())
+	      gdb::unique_xmalloc_ptr<char> new_name
+		= cp_canonicalize_string (name.c_str ());
+	      if (new_name != nullptr)
 		{
-		  sym_len = new_name.length ();
+		  sym_len = strlen (new_name.get ());
 		  sym_name = obstack_strdup (&objfile->objfile_obstack,
-					     new_name);
+					     new_name.get ());
+		}
+	    }
+	  else if (psymtab_language == language_c)
+	    {
+	      std::string name (namestring, p - namestring);
+	      gdb::unique_xmalloc_ptr<char> new_name
+		= c_canonicalize_name (name.c_str ());
+	      if (new_name != nullptr)
+		{
+		  sym_len = strlen (new_name.get ());
+		  sym_name = obstack_strdup (&objfile->objfile_obstack,
+					     new_name.get ());
 		}
 	    }
 
- 	  if (sym_len == 0)
- 	    {
- 	      sym_name = namestring;
- 	      sym_len = p - namestring;
- 	    }
+	  if (sym_len == 0)
+	    {
+	      sym_name = namestring;
+	      sym_len = p - namestring;
+	    }
 
 	  /* Main processing section for debugging symbols which
 	     the initial read through the symbol tables needs to worry
@@ -1461,24 +1482,35 @@ read_dbx_symtab (minimal_symbol_reader &
 	  switch (p[1])
 	    {
 	    case 'S':
-	      if (gdbarch_static_transform_name_p (gdbarch))
-		gdbarch_static_transform_name (gdbarch, namestring);
-
-	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
-				   VAR_DOMAIN, LOC_STATIC,
-				   data_sect_index,
-				   psymbol_placement::STATIC,
-				   nlist.n_value, psymtab_language, objfile);
+	      if (pst != nullptr)
+		pst->add_psymbol (std::string_view (sym_name, sym_len), true,
+				  VAR_DOMAIN, LOC_STATIC,
+				  data_sect_index,
+				  psymbol_placement::STATIC,
+				  unrelocated_addr (nlist.n_value),
+				  psymtab_language,
+				  partial_symtabs, objfile);
+	      else
+		complaint (_("static `%*s' appears to be defined "
+			     "outside of all compilation units"),
+			   sym_len, sym_name);
 	      continue;
 
 	    case 'G':
 	      /* The addresses in these entries are reported to be
 		 wrong.  See the code that reads 'G's for symtabs.  */
-	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
-				   VAR_DOMAIN, LOC_STATIC,
-				   data_sect_index,
-				   psymbol_placement::GLOBAL,
-				   nlist.n_value, psymtab_language, objfile);
+	      if (pst != nullptr)
+		pst->add_psymbol (std::string_view (sym_name, sym_len), true,
+				  VAR_DOMAIN, LOC_STATIC,
+				  data_sect_index,
+				  psymbol_placement::GLOBAL,
+				  unrelocated_addr (nlist.n_value),
+				  psymtab_language,
+				  partial_symtabs, objfile);
+	      else
+		complaint (_("global `%*s' appears to be defined "
+			     "outside of all compilation units"),
+			   sym_len, sym_name);
 	      continue;
 
 	    case 'T':
@@ -1492,17 +1524,32 @@ read_dbx_symtab (minimal_symbol_reader &
 		  || (p == namestring + 1
 		      && namestring[0] != ' '))
 		{
-		  add_psymbol_to_list (gdb::string_view (sym_name, sym_len),
-				       true, STRUCT_DOMAIN, LOC_TYPEDEF, -1,
-				       psymbol_placement::STATIC,
-				       0, psymtab_language, objfile);
+		  if (pst != nullptr)
+		    pst->add_psymbol (std::string_view (sym_name, sym_len),
+				      true, STRUCT_DOMAIN, LOC_TYPEDEF, -1,
+				      psymbol_placement::STATIC,
+				      unrelocated_addr (0),
+				      psymtab_language,
+				      partial_symtabs, objfile);
+		  else
+		    complaint (_("enum, struct, or union `%*s' appears "
+				 "to be defined outside of all "
+				 "compilation units"),
+			       sym_len, sym_name);
 		  if (p[2] == 't')
 		    {
 		      /* Also a typedef with the same name.  */
-		      add_psymbol_to_list (gdb::string_view (sym_name, sym_len),
-					   true, VAR_DOMAIN, LOC_TYPEDEF, -1,
-					   psymbol_placement::STATIC,
-					   0, psymtab_language, objfile);
+		      if (pst != nullptr)
+			pst->add_psymbol (std::string_view (sym_name, sym_len),
+					  true, VAR_DOMAIN, LOC_TYPEDEF, -1,
+					  psymbol_placement::STATIC,
+					  unrelocated_addr (0),
+					  psymtab_language,
+					  partial_symtabs, objfile);
+		      else
+			complaint (_("typedef `%*s' appears to be defined "
+				     "outside of all compilation units"),
+				   sym_len, sym_name);
 		      p += 1;
 		    }
 		}
@@ -1511,10 +1558,17 @@ read_dbx_symtab (minimal_symbol_reader &
 	    case 't':
 	      if (p != namestring)	/* a name is there, not just :T...  */
 		{
-		  add_psymbol_to_list (gdb::string_view (sym_name, sym_len),
-				       true, VAR_DOMAIN, LOC_TYPEDEF, -1,
-				       psymbol_placement::STATIC,
-				       0, psymtab_language, objfile);
+		  if (pst != nullptr)
+		    pst->add_psymbol (std::string_view (sym_name, sym_len),
+				      true, VAR_DOMAIN, LOC_TYPEDEF, -1,
+				      psymbol_placement::STATIC,
+				      unrelocated_addr (0),
+				      psymtab_language,
+				      partial_symtabs, objfile);
+		  else
+		    complaint (_("typename `%*s' appears to be defined "
+				 "outside of all compilation units"),
+			       sym_len, sym_name);
 		}
 	    check_enum:
 	      /* If this is an enumerated type, we need to
@@ -1572,10 +1626,17 @@ read_dbx_symtab (minimal_symbol_reader &
 			;
 		      /* Note that the value doesn't matter for
 			 enum constants in psymtabs, just in symtabs.  */
-		      add_psymbol_to_list (gdb::string_view (p, q - p), true,
-					   VAR_DOMAIN, LOC_CONST, -1,
-					   psymbol_placement::STATIC, 0,
-					   psymtab_language, objfile);
+		      if (pst != nullptr)
+			pst->add_psymbol (std::string_view (p, q - p), true,
+					  VAR_DOMAIN, LOC_CONST, -1,
+					  psymbol_placement::STATIC,
+					  unrelocated_addr (0),
+					  psymtab_language,
+					  partial_symtabs, objfile);
+		      else
+			complaint (_("enum constant `%*s' appears to be defined "
+				     "outside of all compilation units"),
+				   ((int) (q - p)), p);
 		      /* Point past the name.  */
 		      p = q;
 		      /* Skip over the value.  */
@@ -1590,22 +1651,25 @@ read_dbx_symtab (minimal_symbol_reader &
 
 	    case 'c':
 	      /* Constant, e.g. from "const" in Pascal.  */
-	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
-				   VAR_DOMAIN, LOC_CONST, -1,
-				   psymbol_placement::STATIC, 0,
-				   psymtab_language, objfile);
+	      if (pst != nullptr)
+		pst->add_psymbol (std::string_view (sym_name, sym_len), true,
+				  VAR_DOMAIN, LOC_CONST, -1,
+				  psymbol_placement::STATIC,
+				  unrelocated_addr (0),
+				  psymtab_language,
+				  partial_symtabs, objfile);
+	      else
+		complaint (_("constant `%*s' appears to be defined "
+			     "outside of all compilation units"),
+			   sym_len, sym_name);
+
 	      continue;
 
 	    case 'f':
 	      if (! pst)
 		{
-		  int name_len = p - namestring;
-		  char *name = (char *) xmalloc (name_len + 1);
-
-		  memcpy (name, namestring, name_len);
-		  name[name_len] = '\0';
-		  function_outside_compilation_unit_complaint (name);
-		  xfree (name);
+		  std::string name (namestring, (p - namestring));
+		  function_outside_compilation_unit_complaint (name.c_str ());
 		}
 	      /* Kludges for ELF/STABS with Sun ACC.  */
 	      last_function_name = namestring;
@@ -1619,12 +1683,13 @@ read_dbx_symtab (minimal_symbol_reader &
 					  pst ? pst->filename : NULL,
 					  objfile);
 		  if (minsym.minsym != NULL)
-		    nlist.n_value = MSYMBOL_VALUE_RAW_ADDRESS (minsym.minsym);
+		    nlist.n_value
+		      = CORE_ADDR (minsym.minsym->unrelocated_address ());
 		}
 	      if (pst && textlow_not_set
 		  && gdbarch_sofun_address_maybe_missing (gdbarch))
 		{
-		  pst->set_text_low (nlist.n_value);
+		  pst->set_text_low (unrelocated_addr (nlist.n_value));
 		  textlow_not_set = 0;
 		}
 	      /* End kludge.  */
@@ -1639,17 +1704,21 @@ read_dbx_symtab (minimal_symbol_reader &
 		 the partial symbol table.  */
 	      if (pst
 		  && (textlow_not_set
-		      || (nlist.n_value < pst->raw_text_low ()
+		      || (unrelocated_addr (nlist.n_value)
+			  < pst->unrelocated_text_low ()
 			  && (nlist.n_value != 0))))
 		{
-		  pst->set_text_low (nlist.n_value);
+		  pst->set_text_low (unrelocated_addr (nlist.n_value));
 		  textlow_not_set = 0;
 		}
-	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
-				   VAR_DOMAIN, LOC_BLOCK,
-				   SECT_OFF_TEXT (objfile),
-				   psymbol_placement::STATIC,
-				   nlist.n_value, psymtab_language, objfile);
+	      if (pst != nullptr)
+		pst->add_psymbol (std::string_view (sym_name, sym_len), true,
+				  VAR_DOMAIN, LOC_BLOCK,
+				  SECT_OFF_TEXT (objfile),
+				  psymbol_placement::STATIC,
+				  unrelocated_addr (nlist.n_value),
+				  psymtab_language,
+				  partial_symtabs, objfile);
 	      continue;
 
 	      /* Global functions were ignored here, but now they
@@ -1658,13 +1727,8 @@ read_dbx_symtab (minimal_symbol_reader &
 	    case 'F':
 	      if (! pst)
 		{
-		  int name_len = p - namestring;
-		  char *name = (char *) xmalloc (name_len + 1);
-
-		  memcpy (name, namestring, name_len);
-		  name[name_len] = '\0';
-		  function_outside_compilation_unit_complaint (name);
-		  xfree (name);
+		  std::string name (namestring, (p - namestring));
+		  function_outside_compilation_unit_complaint (name.c_str ());
 		}
 	      /* Kludges for ELF/STABS with Sun ACC.  */
 	      last_function_name = namestring;
@@ -1678,12 +1742,13 @@ read_dbx_symtab (minimal_symbol_reader &
 					  pst ? pst->filename : NULL,
 					  objfile);
 		  if (minsym.minsym != NULL)
-		    nlist.n_value = MSYMBOL_VALUE_RAW_ADDRESS (minsym.minsym);
+		    nlist.n_value
+		      = CORE_ADDR (minsym.minsym->unrelocated_address ());
 		}
 	      if (pst && textlow_not_set
 		  && gdbarch_sofun_address_maybe_missing (gdbarch))
 		{
-		  pst->set_text_low (nlist.n_value);
+		  pst->set_text_low (unrelocated_addr (nlist.n_value));
 		  textlow_not_set = 0;
 		}
 	      /* End kludge.  */
@@ -1698,17 +1763,21 @@ read_dbx_symtab (minimal_symbol_reader &
 		 the partial symbol table.  */
 	      if (pst
 		  && (textlow_not_set
-		      || (nlist.n_value < pst->raw_text_low ()
+		      || (unrelocated_addr (nlist.n_value)
+			  < pst->unrelocated_text_low ()
 			  && (nlist.n_value != 0))))
 		{
-		  pst->set_text_low (nlist.n_value);
+		  pst->set_text_low (unrelocated_addr (nlist.n_value));
 		  textlow_not_set = 0;
 		}
-	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
-				   VAR_DOMAIN, LOC_BLOCK,
-				   SECT_OFF_TEXT (objfile),
-				   psymbol_placement::GLOBAL,
-				   nlist.n_value, psymtab_language, objfile);
+	      if (pst != nullptr)
+		pst->add_psymbol (std::string_view (sym_name, sym_len), true,
+				  VAR_DOMAIN, LOC_BLOCK,
+				  SECT_OFF_TEXT (objfile),
+				  psymbol_placement::GLOBAL,
+				  unrelocated_addr (nlist.n_value),
+				  psymtab_language,
+				  partial_symtabs, objfile);
 	      continue;
 
 	      /* Two things show up here (hopefully); static symbols of
@@ -1764,7 +1833,7 @@ read_dbx_symtab (minimal_symbol_reader &
 	  /* Find the corresponding bincl and mark that psymtab on the
 	     psymtab dependency list.  */
 	  {
-	    struct partial_symtab *needed_pst =
+	    legacy_psymtab *needed_pst =
 	      find_corresponding_bincl_psymtab (namestring, nlist.n_value);
 
 	    /* If this include file was defined earlier in this file,
@@ -1791,22 +1860,22 @@ read_dbx_symtab (minimal_symbol_reader &
 		dependency_list[dependencies_used++] = needed_pst;
 		if (dependencies_used >= dependencies_allocated)
 		  {
-		    struct partial_symtab **orig = dependency_list;
+		    legacy_psymtab **orig = dependency_list;
 
 		    dependency_list =
-		      (struct partial_symtab **)
+		      (legacy_psymtab **)
 		      alloca ((dependencies_allocated *= 2)
-			      * sizeof (struct partial_symtab *));
+			      * sizeof (legacy_psymtab *));
 		    memcpy (dependency_list, orig,
 			    (dependencies_used
-			     * sizeof (struct partial_symtab *)));
+			     * sizeof (legacy_psymtab *)));
 #ifdef DEBUG_INFO
-		    fprintf_unfiltered (gdb_stderr,
-					"Had to reallocate "
-					"dependency list.\n");
-		    fprintf_unfiltered (gdb_stderr,
-					"New dependencies allocated: %d\n",
-					dependencies_allocated);
+		    gdb_printf (gdb_stderr,
+				"Had to reallocate "
+				"dependency list.\n");
+		    gdb_printf (gdb_stderr,
+				"New dependencies allocated: %d\n",
+				dependencies_allocated);
 #endif
 		  }
 	      }
@@ -1820,12 +1889,12 @@ read_dbx_symtab (minimal_symbol_reader &
 	     compiled without debugging info follows this module.  */
 	  if (pst && gdbarch_sofun_address_maybe_missing (gdbarch))
 	    {
-	      dbx_end_psymtab (objfile, pst,
+	      dbx_end_psymtab (objfile, partial_symtabs, pst,
 			       psymtab_include_list, includes_used,
 			       symnum * symbol_size,
-			       (CORE_ADDR) 0, dependency_list,
+			       (unrelocated_addr) 0, dependency_list,
 			       dependencies_used, textlow_not_set);
-	      pst = (struct partial_symtab *) 0;
+	      pst = (legacy_psymtab *) 0;
 	      includes_used = 0;
 	      dependencies_used = 0;
 	      has_line_numbers = 0;
@@ -1880,16 +1949,18 @@ read_dbx_symtab (minimal_symbol_reader &
     {
       /* Don't set high text address of PST lower than it already
 	 is.  */
-      CORE_ADDR text_end =
-	(lowest_text_address == (CORE_ADDR) -1
-	 ? text_addr
-	 : lowest_text_address)
-	+ text_size;
+      unrelocated_addr text_end
+	= (unrelocated_addr
+	   ((lowest_text_address == (unrelocated_addr) -1
+	     ? text_addr
+	     : CORE_ADDR (lowest_text_address))
+	    + text_size));
 
-      dbx_end_psymtab (objfile, pst, psymtab_include_list, includes_used,
+      dbx_end_psymtab (objfile, partial_symtabs,
+		       pst, psymtab_include_list, includes_used,
 		       symnum * symbol_size,
-		       (text_end > pst->raw_text_high ()
-			? text_end : pst->raw_text_high ()),
+		       (text_end > pst->unrelocated_text_high ()
+			? text_end : pst->unrelocated_text_high ()),
 		       dependency_list, dependencies_used, textlow_not_set);
     }
 }
@@ -1901,17 +1972,18 @@ read_dbx_symtab (minimal_symbol_reader &
    is the address relative to which its symbols are (incremental) or 0
    (normal).  */
 
-static struct partial_symtab *
-start_psymtab (struct objfile *objfile, const char *filename, CORE_ADDR textlow,
-	       int ldsymoff)
+static legacy_psymtab *
+start_psymtab (psymtab_storage *partial_symtabs, struct objfile *objfile,
+	       const char *filename, unrelocated_addr textlow, int ldsymoff)
 {
-  struct partial_symtab *result =
-    start_psymtab_common (objfile, filename, textlow);
+  legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs,
+					       objfile->per_bfd, textlow);
 
   result->read_symtab_private =
     XOBNEW (&objfile->objfile_obstack, struct symloc);
   LDSYMOFF (result) = ldsymoff;
-  result->read_symtab = dbx_read_symtab;
+  result->legacy_read_symtab = dbx_read_symtab;
+  result->legacy_expand_psymtab = dbx_expand_psymtab;
   SYMBOL_SIZE (result) = symbol_size;
   SYMBOL_OFFSET (result) = symbol_table_offset;
   STRING_OFFSET (result) = string_table_offset;
@@ -1929,16 +2001,17 @@ start_psymtab (struct objfile *objfile,
 
    FIXME:  List variables and peculiarities of same.  */
 
-struct partial_symtab *
-dbx_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
+legacy_psymtab *
+dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs,
+		 legacy_psymtab *pst,
 		 const char **include_list, int num_includes,
-		 int capping_symbol_offset, CORE_ADDR capping_text,
-		 struct partial_symtab **dependency_list,
+		 int capping_symbol_offset, unrelocated_addr capping_text,
+		 legacy_psymtab **dependency_list,
 		 int number_dependencies,
 		 int textlow_not_set)
 {
   int i;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
 
   if (capping_symbol_offset != -1)
     LDSYMLEN (pst) = capping_symbol_offset - LDSYMOFF (pst);
@@ -1986,8 +2059,9 @@ dbx_end_psymtab (struct objfile *objfile
 	}
 
       if (minsym.minsym)
-	pst->set_text_high (MSYMBOL_VALUE_RAW_ADDRESS (minsym.minsym)
-			    + MSYMBOL_SIZE (minsym.minsym));
+	pst->set_text_high
+	  (unrelocated_addr (CORE_ADDR (minsym.minsym->unrelocated_address ())
+			     + minsym.minsym->size ()));
 
       last_function_name = NULL;
     }
@@ -1996,38 +2070,38 @@ dbx_end_psymtab (struct objfile *objfile
     ;
   /* This test will be true if the last .o file is only data.  */
   else if (textlow_not_set)
-    pst->set_text_low (pst->raw_text_high ());
+    pst->set_text_low (pst->unrelocated_text_high ());
   else
     {
       /* If we know our own starting text address, then walk through all other
-         psymtabs for this objfile, and if any didn't know their ending text
-         address, set it to our starting address.  Take care to not set our
-         own ending address to our starting address.  */
+	 psymtabs for this objfile, and if any didn't know their ending text
+	 address, set it to our starting address.  Take care to not set our
+	 own ending address to our starting address.  */
 
-      for (partial_symtab *p1 : objfile->psymtabs ())
+      for (partial_symtab *p1 : partial_symtabs->range ())
 	if (!p1->text_high_valid && p1->text_low_valid && p1 != pst)
-	  p1->set_text_high (pst->raw_text_low ());
+	  p1->set_text_high (pst->unrelocated_text_low ());
     }
 
   /* End of kludge for patching Solaris textlow and texthigh.  */
 
-  end_psymtab_common (objfile, pst);
+  pst->end ();
 
   pst->number_of_dependencies = number_dependencies;
   if (number_dependencies)
     {
       pst->dependencies
-	= objfile->partial_symtabs->allocate_dependencies (number_dependencies);
+	= partial_symtabs->allocate_dependencies (number_dependencies);
       memcpy (pst->dependencies, dependency_list,
-	      number_dependencies * sizeof (struct partial_symtab *));
+	      number_dependencies * sizeof (legacy_psymtab *));
     }
   else
     pst->dependencies = 0;
 
   for (i = 0; i < num_includes; i++)
     {
-      struct partial_symtab *subpst =
-	allocate_psymtab (include_list[i], objfile);
+      legacy_psymtab *subpst =
+	new legacy_psymtab (include_list[i], partial_symtabs, objfile->per_bfd);
 
       subpst->read_symtab_private =
 	XOBNEW (&objfile->objfile_obstack, struct symloc);
@@ -2035,30 +2109,29 @@ dbx_end_psymtab (struct objfile *objfile
 	LDSYMLEN (subpst) = 0;
 
       /* We could save slight bits of space by only making one of these,
-         shared by the entire set of include files.  FIXME-someday.  */
+	 shared by the entire set of include files.  FIXME-someday.  */
       subpst->dependencies =
-	objfile->partial_symtabs->allocate_dependencies (1);
+	partial_symtabs->allocate_dependencies (1);
       subpst->dependencies[0] = pst;
       subpst->number_of_dependencies = 1;
 
-      subpst->read_symtab = pst->read_symtab;
+      subpst->legacy_read_symtab = pst->legacy_read_symtab;
+      subpst->legacy_expand_psymtab = pst->legacy_expand_psymtab;
     }
 
   if (num_includes == 0
       && number_dependencies == 0
-      && pst->n_global_syms == 0
-      && pst->n_static_syms == 0
+      && pst->empty ()
       && has_line_numbers == 0)
     {
-      /* Throw away this psymtab, it's empty.  We can't deallocate it, since
-         it is on the obstack, but we can forget to chain it on the list.  */
+      /* Throw away this psymtab, it's empty.  */
       /* Empty psymtabs happen as a result of header files which don't have
-         any symbols in them.  There can be a lot of them.  But this check
-         is wrong, in that a psymtab with N_SLINE entries but nothing else
-         is not empty, but we don't realize that.  Fixing that without slowing
-         things down might be tricky.  */
+	 any symbols in them.  There can be a lot of them.  But this check
+	 is wrong, in that a psymtab with N_SLINE entries but nothing else
+	 is not empty, but we don't realize that.  Fixing that without slowing
+	 things down might be tricky.  */
 
-      discard_psymtab (objfile, pst);
+      partial_symtabs->discard_psymtab (pst);
 
       /* Indicate that psymtab was thrown away.  */
       pst = NULL;
@@ -2067,35 +2140,12 @@ dbx_end_psymtab (struct objfile *objfile
 }
 
 static void
-dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst)
+dbx_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
 {
-  int i;
-
-  if (pst->readin)
-    {
-      fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  "
-			  "Shouldn't happen.\n",
-			  pst->filename);
-      return;
-    }
+  gdb_assert (!pst->readin);
 
   /* Read in all partial symtabs on which this one is dependent.  */
-  for (i = 0; i < pst->number_of_dependencies; i++)
-    if (!pst->dependencies[i]->readin)
-      {
-	/* Inform about additional files that need to be read in.  */
-	if (info_verbose)
-	  {
-	    fputs_filtered (" ", gdb_stdout);
-	    wrap_here ("");
-	    fputs_filtered ("and ", gdb_stdout);
-	    wrap_here ("");
-	    printf_filtered ("%s...", pst->dependencies[i]->filename);
-	    wrap_here ("");	/* Flush output.  */
-	    gdb_flush (gdb_stdout);
-	  }
-	dbx_psymtab_to_symtab_1 (objfile, pst->dependencies[i]);
-      }
+  pst->expand_dependencies (objfile);
 
   if (LDSYMLEN (pst))		/* Otherwise it's a dummy.  */
     {
@@ -2106,37 +2156,23 @@ dbx_psymtab_to_symtab_1 (struct objfile
       symbol_size = SYMBOL_SIZE (pst);
 
       /* Read in this file's symbols.  */
-      bfd_seek (objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET);
-      read_ofile_symtab (objfile, pst);
+      if (bfd_seek (objfile->obfd.get (), SYMBOL_OFFSET (pst), SEEK_SET) == 0)
+	read_ofile_symtab (objfile, pst);
     }
 
-  pst->readin = 1;
+  pst->readin = true;
 }
 
 /* Read in all of the symbols for a given psymtab for real.
    Be verbose about it if the user wants that.  SELF is not NULL.  */
 
 static void
-dbx_read_symtab (struct partial_symtab *self, struct objfile *objfile)
+dbx_read_symtab (legacy_psymtab *self, struct objfile *objfile)
 {
-  if (self->readin)
-    {
-      fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  "
-			  "Shouldn't happen.\n",
-			  self->filename);
-      return;
-    }
+  gdb_assert (!self->readin);
 
   if (LDSYMLEN (self) || self->number_of_dependencies)
     {
-      /* Print the message now, before reading the string table,
-         to avoid disconcerting pauses.  */
-      if (info_verbose)
-	{
-	  printf_filtered ("Reading in symbols for %s...", self->filename);
-	  gdb_flush (gdb_stdout);
-	}
-
       next_symbol_text_func = dbx_next_symbol_text;
 
       {
@@ -2151,23 +2187,19 @@ dbx_read_symtab (struct partial_symtab *
 	    data_holder.reset (stabs_data);
 	  }
 
-	dbx_psymtab_to_symtab_1 (objfile, self);
+	self->expand_psymtab (objfile);
       }
 
       /* Match with global symbols.  This only needs to be done once,
-         after all of the symtabs and dependencies have been read in.   */
+	 after all of the symtabs and dependencies have been read in.   */
       scan_file_globals (objfile);
-
-      /* Finish up the debug error message.  */
-      if (info_verbose)
-	printf_filtered ("done.\n");
     }
 }
 
 /* Read in a defined section of a specific object file's symbols.  */
 
 static void
-read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst)
+read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst)
 {
   const char *namestring;
   struct external_nlist *bufp;
@@ -2179,21 +2211,20 @@ read_ofile_symtab (struct objfile *objfi
   int sym_size;			/* Size of symbols to read */
   CORE_ADDR text_offset;	/* Start of text segment for symbols */
   int text_size;		/* Size of text segment for symbols */
-  struct section_offsets *section_offsets;
 
   sym_offset = LDSYMOFF (pst);
   sym_size = LDSYMLEN (pst);
   text_offset = pst->text_low (objfile);
   text_size = pst->text_high (objfile) - pst->text_low (objfile);
-  section_offsets = objfile->section_offsets;
+  const section_offsets &section_offsets = objfile->section_offsets;
 
   dbxread_objfile = objfile;
 
   stringtab_global = DBX_STRINGTAB (objfile);
   set_last_source_file (NULL);
 
-  abfd = objfile->obfd;
-  symfile_bfd = objfile->obfd;	/* Implicit param to next_text_symbol.  */
+  abfd = objfile->obfd.get ();
+  symfile_bfd = objfile->obfd.get ();	/* Implicit param to next_text_symbol.  */
   symbuf_end = symbuf_idx = 0;
   symbuf_read = 0;
   symbuf_left = sym_offset + sym_size;
@@ -2223,7 +2254,8 @@ read_ofile_symtab (struct objfile *objfi
 	    processing_gcc_compilation = 1;
 	  else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
 	    processing_gcc_compilation = 2;
-	  if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
+	  if (*tempstring != '\0'
+	      && *tempstring == bfd_get_symbol_leading_char (symfile_bfd))
 	    ++tempstring;
 	  if (startswith (tempstring, "__gnu_compiled"))
 	    processing_gcc_compilation = 2;
@@ -2232,8 +2264,8 @@ read_ofile_symtab (struct objfile *objfi
   else
     {
       /* The N_SO starting this symtab is the first symbol, so we
-         better not check the symbol before it.  I'm not this can
-         happen, but it doesn't hurt to check for it.  */
+	 better not check the symbol before it.  I'm not this can
+	 happen, but it doesn't hurt to check for it.  */
       stabs_seek (sym_offset);
       processing_gcc_compilation = 0;
     }
@@ -2281,7 +2313,7 @@ read_ofile_symtab (struct objfile *objfi
 			      PST_LANGUAGE (pst));
 	}
       /* We skip checking for a new .o or -l file; that should never
-         happen in this routine.  */
+	 happen in this routine.  */
       else if (type == N_TEXT)
 	{
 	  /* I don't think this code will ever be executed, because
@@ -2323,8 +2355,7 @@ read_ofile_symtab (struct objfile *objfi
   if (get_last_source_start_addr () > text_offset)
     set_last_source_start_addr (text_offset);
 
-  pst->compunit_symtab = end_symtab (text_offset + text_size,
-				     SECT_OFF_TEXT (objfile));
+  pst->compunit_symtab = end_compunit_symtab (text_offset + text_size);
 
   end_stabs ();
 
@@ -2354,8 +2385,8 @@ cp_set_block_scope (const struct symbol
       const char *name = symbol->demangled_name ();
       unsigned int prefix_len = cp_entire_prefix_len (name);
 
-      block_set_scope (block, obstack_strndup (obstack, name, prefix_len),
-		       obstack);
+      block->set_scope (obstack_strndup (obstack, name, prefix_len),
+			obstack);
     }
 }
 
@@ -2372,16 +2403,16 @@ cp_set_block_scope (const struct symbol
    the pst->section_offsets.  All symbols that refer to memory
    locations need to be offset by these amounts.
    OBJFILE is the object file from which we are reading symbols.  It
-   is used in end_symtab.
+   is used in end_compunit_symtab.
    LANGUAGE is the language of the symtab.
 */
 
 void
 process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
-		    const struct section_offsets *section_offsets,
+		    const section_offsets &section_offsets,
 		    struct objfile *objfile, enum language language)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   struct context_stack *newobj;
   struct context_stack cstk;
   /* This remembers the address of the start of a function.  It is
@@ -2406,15 +2437,18 @@ process_one_symbol (int type, int desc,
      source file.  Used to detect the SunPRO solaris compiler.  */
   static int n_opt_found;
 
+  /* The section index for this symbol.  */
+  int section_index = -1;
+
   /* Something is wrong if we see real data before seeing a source
      file name.  */
 
   if (get_last_source_file () == NULL && type != (unsigned char) N_SO)
     {
       /* Ignore any symbols which appear before an N_SO symbol.
-         Currently no one puts symbols there, but we should deal
-         gracefully with the case.  A complain()t might be in order,
-         but this should not be an error ().  */
+	 Currently no one puts symbols there, but we should deal
+	 gracefully with the case.  A complain()t might be in order,
+	 but this should not be an error ().  */
       return;
     }
 
@@ -2430,10 +2464,10 @@ process_one_symbol (int type, int desc,
 	  struct block *block;
 
 	  if (outermost_context_p ())
- 	    {
+	    {
 	      lbrac_mismatch_complaint (symnum);
- 	      break;
- 	    }
+	      break;
+	    }
 
 	  /* The following check is added before recording line 0 at
 	     end of function so as to handle hand-generated stabs
@@ -2443,8 +2477,10 @@ process_one_symbol (int type, int desc,
 	    {
 	      CORE_ADDR addr = last_function_start + valu;
 
-	      record_line (get_current_subfile (), 0,
-			   gdbarch_addr_bits_remove (gdbarch, addr));
+	      record_line
+		(get_current_subfile (), 0,
+		 unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, addr)
+				   - objfile->text_section_offset ()));
 	    }
 
 	  within_function = 0;
@@ -2456,7 +2492,7 @@ process_one_symbol (int type, int desc,
 				cstk.start_addr, cstk.start_addr + valu);
 
 	  /* For C++, set the block's scope.  */
-	  if (SYMBOL_LANGUAGE (cstk.name) == language_cplus)
+	  if (cstk.name->language () == language_cplus)
 	    cp_set_block_scope (cstk.name, block, &objfile->objfile_obstack);
 
 	  /* May be switching to an assembler file which may not be using
@@ -2469,7 +2505,8 @@ process_one_symbol (int type, int desc,
       sline_found_in_function = 0;
 
       /* Relocate for dynamic loading.  */
-      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+      section_index = SECT_OFF_TEXT (objfile);
+      valu += section_offsets[SECT_OFF_TEXT (objfile)];
       valu = gdbarch_addr_bits_remove (gdbarch, valu);
       last_function_start = valu;
 
@@ -2477,7 +2514,7 @@ process_one_symbol (int type, int desc,
 
     case N_LBRAC:
       /* This "symbol" just indicates the start of an inner lexical
-         context within a function.  */
+	 context within a function.  */
 
       /* Ignore extra outermost context from SunPRO cc and acc.  */
       if (n_opt_found && desc == 1)
@@ -2490,7 +2527,7 @@ process_one_symbol (int type, int desc,
 
     case N_RBRAC:
       /* This "symbol" just indicates the end of an inner lexical
-         context that was started with N_LBRAC.  */
+	 context that was started with N_LBRAC.  */
 
       /* Ignore extra outermost context from SunPRO cc and acc.  */
       if (n_opt_found && desc == 1)
@@ -2556,16 +2593,18 @@ process_one_symbol (int type, int desc,
     case N_FN:
     case N_FN_SEQ:
       /* This kind of symbol indicates the start of an object file.
-         Relocate for dynamic loading.  */
-      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+	 Relocate for dynamic loading.  */
+      section_index = SECT_OFF_TEXT (objfile);
+      valu += section_offsets[SECT_OFF_TEXT (objfile)];
       break;
 
     case N_SO:
       /* This type of symbol indicates the start of data for one
-         source file.  Finish the symbol table of the previous source
-         file (if any) and start accumulating a new symbol table.
-         Relocate for dynamic loading.  */
-      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+	 source file.  Finish the symbol table of the previous source
+	 file (if any) and start accumulating a new symbol table.
+	 Relocate for dynamic loading.  */
+      section_index = SECT_OFF_TEXT (objfile);
+      valu += section_offsets[SECT_OFF_TEXT (objfile)];
 
       n_opt_found = 0;
 
@@ -2580,28 +2619,29 @@ process_one_symbol (int type, int desc,
 	      patch_subfile_names (get_current_subfile (), name);
 	      break;		/* Ignore repeated SOs.  */
 	    }
-	  end_symtab (valu, SECT_OFF_TEXT (objfile));
+	  end_compunit_symtab (valu);
 	  end_stabs ();
 	}
 
       /* Null name means this just marks the end of text for this .o
-         file.  Don't start a new symtab in this case.  */
+	 file.  Don't start a new symtab in this case.  */
       if (*name == '\000')
 	break;
 
       function_start_offset = 0;
 
       start_stabs ();
-      start_symtab (objfile, name, NULL, valu, language);
+      start_compunit_symtab (objfile, name, NULL, valu, language);
       record_debugformat ("stabs");
       break;
 
     case N_SOL:
       /* This type of symbol indicates the start of data for a
-         sub-source-file, one whose contents were copied or included
-         in the compilation of the main source file (whose name was
-         given in the N_SO symbol).  Relocate for dynamic loading.  */
-      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+	 sub-source-file, one whose contents were copied or included
+	 in the compilation of the main source file (whose name was
+	 given in the N_SO symbol).  Relocate for dynamic loading.  */
+      section_index = SECT_OFF_TEXT (objfile);
+      valu += section_offsets[SECT_OFF_TEXT (objfile)];
       start_subfile (name);
       break;
 
@@ -2621,11 +2661,11 @@ process_one_symbol (int type, int desc,
 
     case N_SLINE:
       /* This type of "symbol" really just records one line-number --
-         core-address correspondence.  Enter it in the line list for
-         this symbol table.  */
+	 core-address correspondence.  Enter it in the line list for
+	 this symbol table.  */
 
       /* Relocate for dynamic loading and for ELF acc
-         function-relative symbols.  */
+	 function-relative symbols.  */
       valu += function_start_offset;
 
       /* GCC 2.95.3 emits the first N_SLINE stab somewhere in the
@@ -2647,13 +2687,17 @@ process_one_symbol (int type, int desc,
 	  CORE_ADDR addr = processing_gcc_compilation == 2 ?
 			   last_function_start : valu;
 
-	  record_line (get_current_subfile (), desc,
-		       gdbarch_addr_bits_remove (gdbarch, addr));
+	  record_line
+	    (get_current_subfile (), desc,
+	     unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, addr)
+			       - objfile->text_section_offset ()));
 	  sline_found_in_function = 1;
 	}
       else
-	record_line (get_current_subfile (), desc,
-		     gdbarch_addr_bits_remove (gdbarch, valu));
+	record_line
+	  (get_current_subfile (), desc,
+	   unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, valu)
+			     - objfile->text_section_offset ()));
       break;
 
     case N_BCOMM:
@@ -2665,22 +2709,22 @@ process_one_symbol (int type, int desc,
       break;
 
       /* The following symbol types need to have the appropriate
-         offset added to their value; then we process symbol
-         definitions in the name.  */
+	 offset added to their value; then we process symbol
+	 definitions in the name.  */
 
     case N_STSYM:		/* Static symbol in data segment.  */
     case N_LCSYM:		/* Static symbol in BSS segment.  */
     case N_ROSYM:		/* Static symbol in read-only data segment.  */
       /* HORRID HACK DEPT.  However, it's Sun's furgin' fault.
-         Solaris 2's stabs-in-elf makes *most* symbols relative but
-         leaves a few absolute (at least for Solaris 2.1 and version
-         2.0.1 of the SunPRO compiler).  N_STSYM and friends sit on
-         the fence.  .stab "foo:S...",N_STSYM is absolute (ld
-         relocates it) .stab "foo:V...",N_STSYM is relative (section
-         base subtracted).  This leaves us no choice but to search for
-         the 'S' or 'V'...  (or pass the whole section_offsets stuff
-         down ONE MORE function call level, which we really don't want
-         to do).  */
+	 Solaris 2's stabs-in-elf makes *most* symbols relative but
+	 leaves a few absolute (at least for Solaris 2.1 and version
+	 2.0.1 of the SunPRO compiler).  N_STSYM and friends sit on
+	 the fence.  .stab "foo:S...",N_STSYM is absolute (ld
+	 relocates it) .stab "foo:V...",N_STSYM is relative (section
+	 base subtracted).  This leaves us no choice but to search for
+	 the 'S' or 'V'...  (or pass the whole section_offsets stuff
+	 down ONE MORE function call level, which we really don't want
+	 to do).  */
       {
 	const char *p;
 
@@ -2701,12 +2745,13 @@ process_one_symbol (int type, int desc,
 		   symbol_file_add as addr (this is known to affect
 		   SunOS 4, and I suspect ELF too).  Since there is no
 		   Ttext.text symbol, we can get addr from the text offset.  */
-		valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+		section_index = SECT_OFF_TEXT (objfile);
+		valu += section_offsets[SECT_OFF_TEXT (objfile)];
 		goto define_a_symbol;
 	      }
 	  }
 	/* Since it's not the kludge case, re-dispatch to the right
-           handler.  */
+	   handler.  */
 	switch (type)
 	  {
 	  case N_STSYM:
@@ -2716,34 +2761,37 @@ process_one_symbol (int type, int desc,
 	  case N_ROSYM:
 	    goto case_N_ROSYM;
 	  default:
-	    internal_error (__FILE__, __LINE__,
-			    _("failed internal consistency check"));
+	    internal_error (_("failed internal consistency check"));
 	  }
       }
 
     case_N_STSYM:		/* Static symbol in data segment.  */
     case N_DSLINE:		/* Source line number, data segment.  */
-      valu += ANOFFSET (section_offsets, SECT_OFF_DATA (objfile));
+      section_index = SECT_OFF_DATA (objfile);
+      valu += section_offsets[SECT_OFF_DATA (objfile)];
       goto define_a_symbol;
 
     case_N_LCSYM:		/* Static symbol in BSS segment.  */
     case N_BSLINE:		/* Source line number, BSS segment.  */
       /* N_BROWS: overlaps with N_BSLINE.  */
-      valu += ANOFFSET (section_offsets, SECT_OFF_BSS (objfile));
+      section_index = SECT_OFF_BSS (objfile);
+      valu += section_offsets[SECT_OFF_BSS (objfile)];
       goto define_a_symbol;
 
     case_N_ROSYM:		/* Static symbol in read-only data segment.  */
-      valu += ANOFFSET (section_offsets, SECT_OFF_RODATA (objfile));
+      section_index = SECT_OFF_RODATA (objfile);
+      valu += section_offsets[SECT_OFF_RODATA (objfile)];
       goto define_a_symbol;
 
     case N_ENTRY:		/* Alternate entry point.  */
       /* Relocate for dynamic loading.  */
-      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+      section_index = SECT_OFF_TEXT (objfile);
+      valu += section_offsets[SECT_OFF_TEXT (objfile)];
       goto define_a_symbol;
 
       /* The following symbol types we don't know how to process.
-         Handle them in a "default" way, but complain to people who
-         care.  */
+	 Handle them in a "default" way, but complain to people who
+	 care.  */
     default:
     case N_CATCH:		/* Exception handler catcher.  */
     case N_EHDECL:		/* Exception handler name.  */
@@ -2758,11 +2806,11 @@ process_one_symbol (int type, int desc,
     case N_NBSTS:
     case N_NBLCS:
       unknown_symtype_complaint (hex_string (type));
-      /* FALLTHROUGH */
 
     define_a_symbol:
+      [[fallthrough]];
       /* These symbol types don't need the address field relocated,
-         since it is either unused, or is absolute.  */
+	 since it is either unused, or is absolute.  */
     case N_GSYM:		/* Global variable.  */
     case N_NSYMS:		/* Number of symbols (Ultrix).  */
     case N_NOMAP:		/* No map?  (Ultrix).  */
@@ -2787,17 +2835,16 @@ process_one_symbol (int type, int desc,
 	    case 'f':
 	    case 'F':
 	      /* Deal with the SunPRO 3.0 compiler which omits the
-	         address from N_FUN symbols.  */
+		 address from N_FUN symbols.  */
 	      if (type == N_FUN
-		  && valu == ANOFFSET (section_offsets,
-				       SECT_OFF_TEXT (objfile))
+		  && valu == section_offsets[SECT_OFF_TEXT (objfile)]
 		  && gdbarch_sofun_address_maybe_missing (gdbarch))
 		{
 		  struct bound_minimal_symbol minsym
 		    = find_stab_function (name, get_last_source_file (),
 					  objfile);
 		  if (minsym.minsym != NULL)
-		    valu = BMSYMBOL_VALUE_ADDRESS (minsym);
+		    valu = minsym.value_address ();
 		}
 
 	      /* These addresses are absolute.  */
@@ -2823,25 +2870,32 @@ process_one_symbol (int type, int desc,
 					cstk.start_addr, valu);
 
 		  /* For C++, set the block's scope.  */
-		  if (SYMBOL_LANGUAGE (cstk.name) == language_cplus)
+		  if (cstk.name->language () == language_cplus)
 		    cp_set_block_scope (cstk.name, block,
 					&objfile->objfile_obstack);
 		}
 
 	      newobj = push_context (0, valu);
 	      newobj->name = define_symbol (valu, name, desc, type, objfile);
+	      if (newobj->name != nullptr)
+		newobj->name->set_section_index (section_index);
 	      break;
 
 	    default:
-	      define_symbol (valu, name, desc, type, objfile);
+	      {
+		struct symbol *sym = define_symbol (valu, name, desc, type,
+						    objfile);
+		if (sym != nullptr)
+		  sym->set_section_index (section_index);
+	      }
 	      break;
 	    }
 	}
       break;
 
       /* We use N_OPT to carry the gcc2_compiled flag.  Sun uses it
-         for a bunch of other flags, too.  Someday we may parse their
-         flags; for now we ignore theirs and hope they'll ignore ours.  */
+	 for a bunch of other flags, too.  Someday we may parse their
+	 flags; for now we ignore theirs and hope they'll ignore ours.  */
     case N_OPT:			/* Solaris 2: Compiler options.  */
       if (name)
 	{
@@ -2872,7 +2926,7 @@ process_one_symbol (int type, int desc,
     case N_PATCH:		/* Solaris 2: Patch Run Time Checker.  */
       /* N_UNDF:                   Solaris 2: File separator mark.  */
       /* N_UNDF: -- we will never encounter it, since we only process
-         one file's symbols at once.  */
+	 one file's symbols at once.  */
     case N_ENDM:		/* Solaris 2: End of module.  */
     case N_ALIAS:		/* SunPro F77: alias name, ignore for now.  */
       break;
@@ -2887,17 +2941,17 @@ process_one_symbol (int type, int desc,
   if (name[0] == '#')
     {
       /* Initialize symbol reference names and determine if this is a
-         definition.  If a symbol reference is being defined, go ahead
-         and add it.  Otherwise, just return.  */
+	 definition.  If a symbol reference is being defined, go ahead
+	 and add it.  Otherwise, just return.  */
 
       const char *s = name;
       int refnum;
 
       /* If this stab defines a new reference ID that is not on the
-         reference list, then put it on the reference list.
+	 reference list, then put it on the reference list.
 
-         We go ahead and advance NAME past the reference, even though
-         it is not strictly necessary at this time.  */
+	 We go ahead and advance NAME past the reference, even though
+	 it is not strictly necessary at this time.  */
       refnum = symbol_reference_defined (&s);
       if (refnum >= 0)
 	if (!ref_search (refnum))
@@ -2938,7 +2992,7 @@ coffstab_build_psymtabs (struct objfile
 			 file_ptr stabstroffset, unsigned int stabstrsize)
 {
   int val;
-  bfd *sym_bfd = objfile->obfd;
+  bfd *sym_bfd = objfile->obfd.get ();
   const char *name = bfd_get_filename (sym_bfd);
   unsigned int stabsize;
 
@@ -2963,7 +3017,7 @@ coffstab_build_psymtabs (struct objfile
   val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
   if (val < 0)
     perror_with_name (name);
-  val = bfd_bread (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
+  val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
   if (val != stabstrsize)
     perror_with_name (name);
 
@@ -3025,7 +3079,7 @@ elfstab_build_psymtabs (struct objfile *
 			file_ptr stabstroffset, unsigned int stabstrsize)
 {
   int val;
-  bfd *sym_bfd = objfile->obfd;
+  bfd *sym_bfd = objfile->obfd.get ();
   const char *name = bfd_get_filename (sym_bfd);
 
   stabsread_new_init ();
@@ -3056,7 +3110,7 @@ elfstab_build_psymtabs (struct objfile *
   val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
   if (val < 0)
     perror_with_name (name);
-  val = bfd_bread (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
+  val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
   if (val != stabstrsize)
     perror_with_name (name);
 
@@ -3106,7 +3160,7 @@ stabsect_build_psymtabs (struct objfile
 			 char *stabstr_name, char *text_name)
 {
   int val;
-  bfd *sym_bfd = objfile->obfd;
+  bfd *sym_bfd = objfile->obfd.get ();
   const char *name = bfd_get_filename (sym_bfd);
   asection *stabsect;
   asection *stabstrsect;
@@ -3174,18 +3228,17 @@ static const struct sym_fns aout_sym_fns
   dbx_new_init,			/* init anything gbl to entire symtab */
   dbx_symfile_init,		/* read initial info, setup for sym_read() */
   dbx_symfile_read,		/* read a symbol file into symtab */
-  NULL,				/* sym_read_psymbols */
   dbx_symfile_finish,		/* finished with file, cleanup */
   default_symfile_offsets, 	/* parse user's offsets to internal form */
   default_symfile_segments,	/* Get segment information from a file.  */
   NULL,
   default_symfile_relocate,	/* Relocate a debug section.  */
   NULL,				/* sym_probe_fns */
-  &psym_functions
 };
 
+void _initialize_dbxread ();
 void
-_initialize_dbxread (void)
+_initialize_dbxread ()
 {
   add_symtab_fns (bfd_target_aout_flavour, &aout_sym_fns);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dcache.c ./gdb/dcache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dcache.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/dcache.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Caching code for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -116,6 +116,10 @@ struct dcache_struct
 
   /* The ptid of last inferior to use cache or null_ptid.  */
   ptid_t ptid;
+
+  /* The process target of last inferior to use the cache or
+     nullptr.  */
+  process_stratum_target *proc_target;
 };
 
 typedef void (block_func) (struct dcache_block *block, void *param);
@@ -132,7 +136,7 @@ static void
 show_dcache_enabled_p (struct ui_file *file, int from_tty,
 		       struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("Deprecated remotecache flag is %s.\n"), value);
+  gdb_printf (file, _("Deprecated remotecache flag is %s.\n"), value);
 }
 
 /* Add BLOCK to circular block list BLIST, behind the block at *BLIST.
@@ -249,6 +253,7 @@ dcache_invalidate (DCACHE *dcache)
   dcache->oldest = NULL;
   dcache->size = 0;
   dcache->ptid = null_ptid;
+  dcache->proc_target = nullptr;
 
   if (dcache->line_size != dcache_line_size)
     {
@@ -324,7 +329,7 @@ dcache_read_line (DCACHE *dcache, struct
 	reg_len = region->hi - memaddr;
 
       /* Skip non-readable regions.  The cache attribute can be ignored,
-         since we may be loading this for a stack access.  */
+	 since we may be loading this for a stack access.  */
       if (region->attrib.mode == MEM_WO)
 	{
 	  memaddr += reg_len;
@@ -401,7 +406,7 @@ dcache_peek_byte (DCACHE *dcache, CORE_A
       db = dcache_alloc (dcache, addr);
 
       if (!dcache_read_line (dcache, db))
-         return 0;
+	 return 0;
     }
 
   *ptr = db->data[XFORM (dcache, addr)];
@@ -453,6 +458,7 @@ dcache_init (void)
   dcache->size = 0;
   dcache->line_size = dcache_line_size;
   dcache->ptid = null_ptid;
+  dcache->proc_target = nullptr;
 
   return dcache;
 }
@@ -470,13 +476,15 @@ dcache_read_memory_partial (struct targe
 {
   ULONGEST i;
 
-  /* If this is a different inferior from what we've recorded,
-     flush the cache.  */
+  /* If this is a different thread from what we've recorded, flush the
+     cache.  */
 
-  if (inferior_ptid != dcache->ptid)
+  process_stratum_target *proc_target = current_inferior ()->process_target ();
+  if (proc_target != dcache->proc_target || inferior_ptid != dcache->ptid)
     {
       dcache_invalidate (dcache);
       dcache->ptid = inferior_ptid;
+      dcache->proc_target = proc_target;
     }
 
   for (i = 0; i < len; i++)
@@ -546,7 +554,7 @@ dcache_print_line (DCACHE *dcache, int i
 
   if (dcache == NULL)
     {
-      printf_filtered (_("No data cache available.\n"));
+      gdb_printf (_("No data cache available.\n"));
       return;
     }
 
@@ -561,24 +569,25 @@ dcache_print_line (DCACHE *dcache, int i
 
   if (!n)
     {
-      printf_filtered (_("No such cache line exists.\n"));
+      gdb_printf (_("No such cache line exists.\n"));
       return;
     }
     
   db = (struct dcache_block *) n->value;
 
-  printf_filtered (_("Line %d: address %s [%d hits]\n"),
-		   index, paddress (target_gdbarch (), db->addr), db->refs);
+  gdb_printf (_("Line %d: address %s [%d hits]\n"),
+	      index, paddress (current_inferior ()->arch (), db->addr),
+	      db->refs);
 
   for (j = 0; j < dcache->line_size; j++)
     {
-      printf_filtered ("%02x ", db->data[j]);
+      gdb_printf ("%02x ", db->data[j]);
 
       /* Print a newline every 16 bytes (48 characters).  */
       if ((j % 16 == 15) && (j != dcache->line_size - 1))
-	printf_filtered ("\n");
+	gdb_printf ("\n");
     }
-  printf_filtered ("\n");
+  gdb_printf ("\n");
 }
 
 /* Parse EXP and show the info about DCACHE.  */
@@ -596,27 +605,27 @@ dcache_info_1 (DCACHE *dcache, const cha
       i = strtol (exp, &linestart, 10);
       if (linestart == exp || i < 0)
 	{
-	  printf_filtered (_("Usage: info dcache [LINENUMBER]\n"));
-          return;
+	  gdb_printf (_("Usage: info dcache [LINENUMBER]\n"));
+	  return;
 	}
 
       dcache_print_line (dcache, i);
       return;
     }
 
-  printf_filtered (_("Dcache %u lines of %u bytes each.\n"),
-		   dcache_size,
-		   dcache ? (unsigned) dcache->line_size
-		   : dcache_line_size);
+  gdb_printf (_("Dcache %u lines of %u bytes each.\n"),
+	      dcache_size,
+	      dcache ? (unsigned) dcache->line_size
+	      : dcache_line_size);
 
   if (dcache == NULL || dcache->ptid == null_ptid)
     {
-      printf_filtered (_("No data cache available.\n"));
+      gdb_printf (_("No data cache available.\n"));
       return;
     }
 
-  printf_filtered (_("Contains data for %s\n"),
-		   target_pid_to_str (dcache->ptid).c_str ());
+  gdb_printf (_("Contains data for %s\n"),
+	      target_pid_to_str (dcache->ptid).c_str ());
 
   refcount = 0;
 
@@ -627,21 +636,22 @@ dcache_info_1 (DCACHE *dcache, const cha
     {
       struct dcache_block *db = (struct dcache_block *) n->value;
 
-      printf_filtered (_("Line %d: address %s [%d hits]\n"),
-		       i, paddress (target_gdbarch (), db->addr), db->refs);
+      gdb_printf (_("Line %d: address %s [%d hits]\n"),
+		  i, paddress (current_inferior ()->arch (), db->addr),
+		  db->refs);
       i++;
       refcount += db->refs;
 
       n = splay_tree_successor (dcache->tree, n->key);
     }
 
-  printf_filtered (_("Cache state: %d active lines, %d hits\n"), i, refcount);
+  gdb_printf (_("Cache state: %d active lines, %d hits\n"), i, refcount);
 }
 
 static void
 info_dcache_command (const char *exp, int tty)
 {
-  dcache_info_1 (target_dcache_get (), exp);
+  dcache_info_1 (target_dcache_get (current_program_space->aspace), exp);
 }
 
 static void
@@ -653,7 +663,7 @@ set_dcache_size (const char *args, int f
       dcache_size = DCACHE_DEFAULT_SIZE;
       error (_("Dcache size must be greater than 0."));
     }
-  target_dcache_invalidate ();
+  target_dcache_invalidate (current_program_space->aspace);
 }
 
 static void
@@ -667,25 +677,12 @@ set_dcache_line_size (const char *args,
       dcache_line_size = DCACHE_DEFAULT_LINE_SIZE;
       error (_("Invalid dcache line size: %u (must be power of 2)."), d);
     }
-  target_dcache_invalidate ();
-}
-
-static void
-set_dcache_command (const char *arg, int from_tty)
-{
-  printf_unfiltered (
-     "\"set dcache\" must be followed by the name of a subcommand.\n");
-  help_list (dcache_set_list, "set dcache ", all_commands, gdb_stdout);
-}
-
-static void
-show_dcache_command (const char *args, int from_tty)
-{
-  cmd_show_list (dcache_show_list, from_tty, "");
+  target_dcache_invalidate (current_program_space->aspace);
 }
 
+void _initialize_dcache ();
 void
-_initialize_dcache (void)
+_initialize_dcache ()
 {
   add_setshow_boolean_cmd ("remotecache", class_support,
 			   &dcache_enabled_p, _("\
@@ -707,12 +704,12 @@ With no arguments, this command prints t
 summary of each line in the cache.  With an argument, dump\"\n\
 the contents of the given line."));
 
-  add_prefix_cmd ("dcache", class_obscure, set_dcache_command, _("\
+  add_setshow_prefix_cmd ("dcache", class_obscure,
+			  _("\
 Use this command to set number of lines in dcache and line-size."),
-		  &dcache_set_list, "set dcache ", /*allow_unknown*/0, &setlist);
-  add_prefix_cmd ("dcache", class_obscure, show_dcache_command, _("\
-Show dcachesettings."),
-		  &dcache_show_list, "show dcache ", /*allow_unknown*/0, &showlist);
+			  ("Show dcache settings."),
+			  &dcache_set_list, &dcache_show_list,
+			  &setlist, &showlist);
 
   add_setshow_zuinteger_cmd ("line-size", class_obscure,
 			     &dcache_line_size, _("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dcache.h ./gdb/dcache.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dcache.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/dcache.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,7 +1,7 @@
 /* Declarations for caching.  Typically used by remote back ends for
    caching remote memory.
 
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,7 @@
 #ifndef DCACHE_H
 #define DCACHE_H
 
-#include "target.h"	/* for enum target_xfer_status */
+#include "target.h"
 
 typedef struct dcache_struct DCACHE;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/debug.c ./gdb/debug.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/debug.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/debug.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Debug printing functions.
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,10 +19,16 @@
 
 #include "defs.h"
 
+#include "gdbsupport/common-debug.h"
+
+/* See gdbsupport/common-debug.h.  */
+
+int debug_print_depth = 0;
+
 /* See gdbsupport/common-debug.h.  */
 
 void
 debug_vprintf (const char *fmt, va_list ap)
 {
-  vfprintf_unfiltered (gdb_stdlog, fmt, ap);
+  gdb_vprintf (gdb_stdlog, fmt, ap);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/debuginfod-support.c ./gdb/debuginfod-support.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/debuginfod-support.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/debuginfod-support.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,675 @@
+/* debuginfod utilities for GDB.
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "diagnostics.h"
+#include <errno.h>
+#include "gdbsupport/scoped_fd.h"
+#include "debuginfod-support.h"
+#include <optional>
+#include "cli/cli-cmds.h"
+#include "cli/cli-style.h"
+#include "cli-out.h"
+#include "target.h"
+
+/* Set/show debuginfod commands.  */
+static cmd_list_element *set_debuginfod_prefix_list;
+static cmd_list_element *show_debuginfod_prefix_list;
+
+/* maint set/show debuginfod commands.  */
+static cmd_list_element *maint_set_debuginfod_cmdlist;
+static cmd_list_element *maint_show_debuginfod_cmdlist;
+
+static const char debuginfod_on[] = "on";
+static const char debuginfod_off[] = "off";
+static const char debuginfod_ask[] = "ask";
+
+static const char *debuginfod_enabled_enum[] =
+{
+  debuginfod_on,
+  debuginfod_off,
+  debuginfod_ask,
+  nullptr
+};
+
+static const char *debuginfod_enabled =
+#if defined(HAVE_LIBDEBUGINFOD)
+  debuginfod_ask;
+#else
+  debuginfod_off;
+#endif
+
+/* Controls whether ELF/DWARF section downloading is enabled.  */
+static bool debuginfod_download_sections =
+#if defined(HAVE_LIBDEBUGINFOD_FIND_SECTION)
+  true;
+#else
+  false;
+#endif
+
+static unsigned int debuginfod_verbose = 1;
+
+#ifndef HAVE_LIBDEBUGINFOD
+scoped_fd
+debuginfod_source_query (const unsigned char *build_id,
+			 int build_id_len,
+			 const char *srcpath,
+			 gdb::unique_xmalloc_ptr<char> *destname)
+{
+  return scoped_fd (-ENOSYS);
+}
+
+scoped_fd
+debuginfod_debuginfo_query (const unsigned char *build_id,
+			    int build_id_len,
+			    const char *filename,
+			    gdb::unique_xmalloc_ptr<char> *destname)
+{
+  return scoped_fd (-ENOSYS);
+}
+
+scoped_fd
+debuginfod_exec_query (const unsigned char *build_id,
+		       int build_id_len,
+		       const char *filename,
+		       gdb::unique_xmalloc_ptr<char> *destname)
+{
+  return scoped_fd (-ENOSYS);
+}
+
+scoped_fd
+debuginfod_section_query (const unsigned char *build_id,
+			  int build_id_len,
+			  const char *filename,
+			  const char *section_name,
+			  gdb::unique_xmalloc_ptr<char> *destname)
+{
+  return scoped_fd (-ENOSYS);
+}
+#define NO_IMPL _("Support for debuginfod is not compiled into GDB.")
+
+#else
+#include <elfutils/debuginfod.h>
+
+struct user_data
+{
+  user_data (const char *desc, const char *fname)
+    : desc (desc), fname (fname)
+  { }
+
+  const char * const desc;
+  const char * const fname;
+  ui_out::progress_update progress;
+};
+
+/* Convert SIZE into a unit suitable for use with progress updates.
+   SIZE should in given in bytes and will be converted into KB, MB, GB
+   or remain unchanged. UNIT will be set to "B", "KB", "MB" or "GB"
+   accordingly.  */
+
+static const char *
+get_size_and_unit (double &size)
+{
+  if (size < 1024)
+    /* If size is less than 1 KB then set unit to B.  */
+    return "B";
+
+  size /= 1024;
+  if (size < 1024)
+    /* If size is less than 1 MB then set unit to KB.  */
+    return "K";
+
+  size /= 1024;
+  if (size < 1024)
+    /* If size is less than 1 GB then set unit to MB.  */
+    return "M";
+
+  size /= 1024;
+  return "G";
+}
+
+static int
+progressfn (debuginfod_client *c, long cur, long total)
+{
+  user_data *data = static_cast<user_data *> (debuginfod_get_user_data (c));
+  gdb_assert (data != nullptr);
+
+  string_file styled_fname (current_uiout->can_emit_style_escape ());
+  fprintf_styled (&styled_fname, file_name_style.style (), "%s",
+		  data->fname);
+
+  if (check_quit_flag ())
+    {
+      ui_file *outstream = get_unbuffered (gdb_stdout);
+      gdb_printf (outstream, _("Cancelling download of %s %s...\n"),
+		  data->desc, styled_fname.c_str ());
+      return 1;
+    }
+
+  if (debuginfod_verbose == 0)
+    return 0;
+
+  /* Print progress update.  Include the transfer size if available.  */
+  if (total > 0)
+    {
+      /* Transfer size is known.  */
+      double howmuch = (double) cur / (double) total;
+
+      if (howmuch >= 0.0 && howmuch <= 1.0)
+	{
+	  double d_total = (double) total;
+	  const char *unit =  get_size_and_unit (d_total);
+	  std::string msg = string_printf ("Downloading %0.2f %s %s %s",
+					   d_total, unit, data->desc,
+					   styled_fname.c_str ());
+	  data->progress.update_progress (msg, unit, howmuch, d_total);
+	  return 0;
+	}
+    }
+
+  std::string msg = string_printf ("Downloading %s %s",
+				   data->desc, styled_fname.c_str ());
+  data->progress.update_progress (msg);
+  return 0;
+}
+
+/* Cleanup ARG, which is a debuginfod_client pointer.  */
+
+static void
+cleanup_debuginfod_client (void *arg)
+{
+  debuginfod_client *client = static_cast<debuginfod_client *> (arg);
+  debuginfod_end (client);
+}
+
+/* Return a pointer to the single global debuginfod_client, initialising it
+   first if needed.  */
+
+static debuginfod_client *
+get_debuginfod_client ()
+{
+  static debuginfod_client *global_client = nullptr;
+
+  if (global_client == nullptr)
+    {
+      global_client = debuginfod_begin ();
+
+      if (global_client != nullptr)
+	{
+	  /* It is important that we cleanup the debuginfod_client object
+	     before calling exit.  Some of the libraries used by debuginfod
+	     make use of at_exit handlers to perform cleanup.
+
+	     If we wrapped the debuginfod_client in a unique_ptr and relied
+	     on its destructor to cleanup then this would be run as part of
+	     the global C++ object destructors, which is after the at_exit
+	     handlers, which is too late.
+
+	     So instead, we make use of GDB's final cleanup mechanism.  */
+	  make_final_cleanup (cleanup_debuginfod_client, global_client);
+	  debuginfod_set_progressfn (global_client, progressfn);
+	}
+    }
+
+  return global_client;
+}
+
+/* Check if debuginfod is enabled.  If configured to do so, ask the user
+   whether to enable debuginfod.  */
+
+static bool
+debuginfod_is_enabled ()
+{
+  const char *urls = skip_spaces (getenv (DEBUGINFOD_URLS_ENV_VAR));
+
+  if (debuginfod_enabled == debuginfod_off
+      || urls == nullptr
+      || *urls == '\0')
+    return false;
+
+  if (debuginfod_enabled == debuginfod_ask)
+    {
+      gdb_printf (_("\nThis GDB supports auto-downloading debuginfo " \
+		    "from the following URLs:\n"));
+
+      std::string_view url_view (urls);
+      while (true)
+	{
+	  size_t off = url_view.find_first_not_of (' ');
+	  if (off == std::string_view::npos)
+	    break;
+	  url_view = url_view.substr (off);
+	  /* g++ 11.2.1 on s390x, g++ 11.3.1 on ppc64le and g++ 11 on
+	     hppa seem convinced url_view might be of SIZE_MAX length.
+	     And so complains because the length of an array can only
+	     be PTRDIFF_MAX.  */
+	  DIAGNOSTIC_PUSH
+	  DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD
+	  off = url_view.find_first_of (' ');
+	  DIAGNOSTIC_POP
+	  gdb_printf
+	    (_("  <%ps>\n"),
+	     styled_string (file_name_style.style (),
+			    std::string (url_view.substr (0, off)).c_str ()));
+	  if (off == std::string_view::npos)
+	    break;
+	  url_view = url_view.substr (off);
+	}
+
+      int resp = nquery (_("Enable debuginfod for this session? "));
+      if (!resp)
+	{
+	  gdb_printf (_("Debuginfod has been disabled.\nTo make this " \
+			"setting permanent, add \'set debuginfod " \
+			"enabled off\' to .gdbinit.\n"));
+	  debuginfod_enabled = debuginfod_off;
+	  return false;
+	}
+
+      gdb_printf (_("Debuginfod has been enabled.\nTo make this " \
+		    "setting permanent, add \'set debuginfod enabled " \
+		    "on\' to .gdbinit.\n"));
+      debuginfod_enabled = debuginfod_on;
+    }
+
+  return true;
+}
+
+/* Print the result of the most recent attempted download.  */
+
+static void
+print_outcome (int fd, const char *desc, const char *fname)
+{
+  if (fd < 0 && fd != -ENOENT)
+    {
+      ui_file *outstream = get_unbuffered (gdb_stdout);
+      gdb_printf (outstream,
+		  _("Download failed: %s.  Continuing without %s %ps.\n"),
+		  safe_strerror (-fd),
+		  desc,
+		  styled_string (file_name_style.style (), fname));
+    }
+}
+
+/* See debuginfod-support.h  */
+
+scoped_fd
+debuginfod_source_query (const unsigned char *build_id,
+			 int build_id_len,
+			 const char *srcpath,
+			 gdb::unique_xmalloc_ptr<char> *destname)
+{
+  if (!debuginfod_is_enabled ())
+    return scoped_fd (-ENOSYS);
+
+  debuginfod_client *c = get_debuginfod_client ();
+
+  if (c == nullptr)
+    return scoped_fd (-ENOMEM);
+
+  char *dname = nullptr;
+  scoped_fd fd;
+  std::optional<target_terminal::scoped_restore_terminal_state> term_state;
+
+  {
+    user_data data ("source file", srcpath);
+
+    debuginfod_set_user_data (c, &data);
+    if (target_supports_terminal_ours ())
+      {
+	term_state.emplace ();
+	target_terminal::ours ();
+      }
+
+    fd = scoped_fd (debuginfod_find_source (c,
+					    build_id,
+					    build_id_len,
+					    srcpath,
+					    &dname));
+    debuginfod_set_user_data (c, nullptr);
+  }
+
+  print_outcome (fd.get (), "source file", srcpath);
+
+  if (fd.get () >= 0)
+    destname->reset (dname);
+
+  return fd;
+}
+
+/* See debuginfod-support.h  */
+
+scoped_fd
+debuginfod_debuginfo_query (const unsigned char *build_id,
+			    int build_id_len,
+			    const char *filename,
+			    gdb::unique_xmalloc_ptr<char> *destname)
+{
+  if (!debuginfod_is_enabled ())
+    return scoped_fd (-ENOSYS);
+
+  debuginfod_client *c = get_debuginfod_client ();
+
+  if (c == nullptr)
+    return scoped_fd (-ENOMEM);
+
+  char *dname = nullptr;
+  scoped_fd fd;
+  std::optional<target_terminal::scoped_restore_terminal_state> term_state;
+
+  {
+    user_data data ("separate debug info for", filename);
+
+    debuginfod_set_user_data (c, &data);
+    if (target_supports_terminal_ours ())
+      {
+	term_state.emplace ();
+	target_terminal::ours ();
+      }
+
+    fd = scoped_fd (debuginfod_find_debuginfo (c, build_id, build_id_len,
+					       &dname));
+    debuginfod_set_user_data (c, nullptr);
+  }
+
+  print_outcome (fd.get (), "separate debug info for", filename);
+
+  if (fd.get () >= 0)
+    destname->reset (dname);
+
+  return fd;
+}
+
+/* See debuginfod-support.h  */
+
+scoped_fd
+debuginfod_exec_query (const unsigned char *build_id,
+		       int build_id_len,
+		       const char *filename,
+		       gdb::unique_xmalloc_ptr<char> *destname)
+{
+  if (!debuginfod_is_enabled ())
+    return scoped_fd (-ENOSYS);
+
+  debuginfod_client *c = get_debuginfod_client ();
+
+  if (c == nullptr)
+    return scoped_fd (-ENOMEM);
+
+  char *dname = nullptr;
+  scoped_fd fd;
+  std::optional<target_terminal::scoped_restore_terminal_state> term_state;
+
+  {
+    user_data data ("executable for", filename);
+
+    debuginfod_set_user_data (c, &data);
+    if (target_supports_terminal_ours ())
+      {
+	term_state.emplace ();
+	target_terminal::ours ();
+      }
+
+    fd = scoped_fd (debuginfod_find_executable (c, build_id, build_id_len,
+						&dname));
+    debuginfod_set_user_data (c, nullptr);
+  }
+
+  print_outcome (fd.get (), "executable for", filename);
+
+  if (fd.get () >= 0)
+    destname->reset (dname);
+
+  return fd;
+}
+
+/* See debuginfod-support.h  */
+
+scoped_fd
+debuginfod_section_query (const unsigned char *build_id,
+			  int build_id_len,
+			  const char *filename,
+			  const char *section_name,
+			  gdb::unique_xmalloc_ptr<char> *destname)
+{
+#if !defined (HAVE_LIBDEBUGINFOD_FIND_SECTION)
+  return scoped_fd (-ENOSYS);
+#else
+
+  if (!debuginfod_download_sections || !debuginfod_is_enabled ())
+    return scoped_fd (-ENOSYS);
+
+  debuginfod_client *c = get_debuginfod_client ();
+
+  if (c == nullptr)
+    return scoped_fd (-ENOMEM);
+
+  char *dname = nullptr;
+  std::string desc = std::string ("section ") + section_name + " for";
+  scoped_fd fd;
+  std::optional<target_terminal::scoped_restore_terminal_state> term_state;
+
+  {
+    user_data data (desc.c_str (), filename);
+    debuginfod_set_user_data (c, &data);
+    if (target_supports_terminal_ours ())
+      {
+	term_state.emplace ();
+	target_terminal::ours ();
+      }
+
+    fd = scoped_fd (debuginfod_find_section (c, build_id, build_id_len,
+					     section_name, &dname));
+    debuginfod_set_user_data (c, nullptr);
+  }
+
+  print_outcome (fd.get (), desc.c_str (), filename);
+  gdb_assert (destname != nullptr);
+
+  if (fd.get () >= 0)
+    destname->reset (dname);
+
+  return fd;
+#endif /* HAVE_LIBDEBUGINFOD_FIND_SECTION */
+}
+
+#endif
+
+/* Set callback for "set debuginfod enabled".  */
+
+static void
+set_debuginfod_enabled (const char *value)
+{
+#if defined(HAVE_LIBDEBUGINFOD)
+  debuginfod_enabled = value;
+#else
+  /* Disabling debuginfod when gdb is not built with it is a no-op.  */
+  if (value != debuginfod_off)
+    error (NO_IMPL);
+#endif
+}
+
+/* Get callback for "set debuginfod enabled".  */
+
+static const char *
+get_debuginfod_enabled ()
+{
+  return debuginfod_enabled;
+}
+
+/* Show callback for "set debuginfod enabled".  */
+
+static void
+show_debuginfod_enabled (ui_file *file, int from_tty, cmd_list_element *cmd,
+			 const char *value)
+{
+  gdb_printf (file,
+	      _("Debuginfod functionality is currently set to "
+		"\"%s\".\n"), debuginfod_enabled);
+}
+
+/* Set callback for "set debuginfod urls".  */
+
+static void
+set_debuginfod_urls (const std::string &urls)
+{
+#if defined(HAVE_LIBDEBUGINFOD)
+  if (setenv (DEBUGINFOD_URLS_ENV_VAR, urls.c_str (), 1) != 0)
+    warning (_("Unable to set debuginfod URLs: %s"), safe_strerror (errno));
+#else
+  error (NO_IMPL);
+#endif
+}
+
+/* Get callback for "set debuginfod urls".  */
+
+static const std::string&
+get_debuginfod_urls ()
+{
+  static std::string urls;
+#if defined(HAVE_LIBDEBUGINFOD)
+  const char *envvar = getenv (DEBUGINFOD_URLS_ENV_VAR);
+
+  if (envvar != nullptr)
+    urls = envvar;
+  else
+    urls.clear ();
+#endif
+
+  return urls;
+}
+
+/* Show callback for "set debuginfod urls".  */
+
+static void
+show_debuginfod_urls (ui_file *file, int from_tty, cmd_list_element *cmd,
+		      const char *value)
+{
+  if (value[0] == '\0')
+    gdb_printf (file, _("Debuginfod URLs have not been set.\n"));
+  else
+    gdb_printf (file, _("Debuginfod URLs are currently set to:\n%s\n"),
+		value);
+}
+
+/* Show callback for "set debuginfod verbose".  */
+
+static void
+show_debuginfod_verbose_command (ui_file *file, int from_tty,
+				 cmd_list_element *cmd, const char *value)
+{
+  gdb_printf (file, _("Debuginfod verbose output is set to %s.\n"),
+	      value);
+}
+
+/* Set callback for "maint set debuginfod download-sections".  */
+
+static void
+maint_set_debuginfod_download_sections (bool value)
+{
+#if !defined(HAVE_LIBDEBUGINFOD_FIND_SECTION)
+  if (value)
+    error (_("Support for section downloading is not compiled into GDB. " \
+"Defaulting to \"off\"."));
+#endif
+
+  debuginfod_download_sections = value;
+}
+
+/* Get callback for "maint set debuginfod download-sections".  */
+
+static bool
+maint_get_debuginfod_download_sections ()
+{
+  return debuginfod_download_sections;
+}
+
+/* Register debuginfod commands.  */
+
+void _initialize_debuginfod ();
+void
+_initialize_debuginfod ()
+{
+  /* set/show debuginfod */
+  add_setshow_prefix_cmd ("debuginfod", class_run,
+			  _("Set debuginfod options."),
+			  _("Show debuginfod options."),
+			  &set_debuginfod_prefix_list,
+			  &show_debuginfod_prefix_list,
+			  &setlist, &showlist);
+
+  add_setshow_enum_cmd ("enabled", class_run, debuginfod_enabled_enum,
+			_("Set whether to use debuginfod."),
+			_("Show whether to use debuginfod."),
+			_("\
+When set to \"on\", enable the use of debuginfod to download missing\n\
+debug info and source files.  GDB may also download components of debug\n\
+info instead of entire files.  \"off\" disables the use of debuginfod.\n\
+When set to \"ask\", prompt whether to enable or disable debuginfod." ),
+			set_debuginfod_enabled,
+			get_debuginfod_enabled,
+			show_debuginfod_enabled,
+			&set_debuginfod_prefix_list,
+			&show_debuginfod_prefix_list);
+
+  /* set/show debuginfod urls */
+  add_setshow_string_noescape_cmd ("urls", class_run, _("\
+Set the list of debuginfod server URLs."), _("\
+Show the list of debuginfod server URLs."), _("\
+Manage the space-separated list of debuginfod server URLs that GDB will query \
+when missing debuginfo, executables or source files.\nThe default value is \
+copied from the DEBUGINFOD_URLS environment variable."),
+				   set_debuginfod_urls,
+				   get_debuginfod_urls,
+				   show_debuginfod_urls,
+				   &set_debuginfod_prefix_list,
+				   &show_debuginfod_prefix_list);
+
+  /* set/show debuginfod verbose */
+  add_setshow_zuinteger_cmd ("verbose", class_support,
+			     &debuginfod_verbose, _("\
+Set verbosity of debuginfod output."), _("\
+Show debuginfod debugging."), _("\
+When set to a non-zero value, display verbose output for each debuginfod \
+query.\nTo disable, set to zero.  Verbose output is displayed by default."),
+			     nullptr,
+			     show_debuginfod_verbose_command,
+			     &set_debuginfod_prefix_list,
+			     &show_debuginfod_prefix_list);
+
+  /* maint set/show debuginfod.  */
+  add_setshow_prefix_cmd ("debuginfod", class_maintenance,
+			  _("Set debuginfod specific variables."),
+			  _("Show debuginfod specific variables."),
+			  &maint_set_debuginfod_cmdlist,
+			  &maint_show_debuginfod_cmdlist,
+			  &maintenance_set_cmdlist, &maintenance_show_cmdlist);
+
+  /* maint set/show debuginfod download-sections.  */
+  add_setshow_boolean_cmd ("download-sections", class_maintenance, _("\
+Set whether debuginfod may download individual ELF/DWARF sections."), _("\
+Show whether debuginfod may download individual ELF/DWARF sections."), _("\
+When enabled, debuginfod may attempt to download individual ELF/DWARF \
+sections from debug info files.\nIf disabled, only whole debug info files \
+may be downloaded."),
+			   maint_set_debuginfod_download_sections,
+			   maint_get_debuginfod_download_sections,
+			   nullptr,
+			   &maint_set_debuginfod_cmdlist,
+			   &maint_show_debuginfod_cmdlist);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/debuginfod-support.h ./gdb/debuginfod-support.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/debuginfod-support.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/debuginfod-support.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,108 @@
+/* debuginfod utilities for GDB.
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef DEBUGINFOD_SUPPORT_H
+#define DEBUGINFOD_SUPPORT_H
+
+#include "gdbsupport/scoped_fd.h"
+
+/* Query debuginfod servers for a source file associated with an
+   executable with BUILD_ID.  BUILD_ID can be given as a binary blob or
+   a null-terminated string.  If given as a binary blob, BUILD_ID_LEN
+   should be the number of bytes.  If given as a null-terminated string,
+   BUILD_ID_LEN should be 0.
+
+   SRC_PATH should be the source file's absolute path that includes the
+   compilation directory of the CU associated with the source file.
+   For example if a CU's compilation directory is `/my/build` and the
+   source file path is `/my/source/foo.c`, then SRC_PATH should be
+   `/my/build/../source/foo.c`.
+
+   If the file is successfully retrieved, return a file descriptor and store
+   the file's local path in DESTNAME.  If unsuccessful, print an error message
+   and return a negative errno.  If GDB is not built with debuginfod, this
+   function returns -ENOSYS.  */
+
+extern scoped_fd
+debuginfod_source_query (const unsigned char *build_id,
+			 int build_id_len,
+			 const char *src_path,
+			 gdb::unique_xmalloc_ptr<char> *destname);
+
+/* Query debuginfod servers for a debug info file with BUILD_ID.
+   BUILD_ID can be given as a binary blob or a null-terminated string.
+   If given as a binary blob, BUILD_ID_LEN should be the number of bytes.
+   If given as a null-terminated string, BUILD_ID_LEN should be 0.
+
+   FILENAME should be the name or path of the main binary associated with
+   the separate debug info.  It is used for printing messages to the user.
+
+   If the file is successfully retrieved, return a file descriptor and store
+   the file's local path in DESTNAME.  If unsuccessful, print an error message
+   and return a negative errno.  If GDB is not built with debuginfod, this
+   function returns -ENOSYS.  */
+
+extern scoped_fd
+debuginfod_debuginfo_query (const unsigned char *build_id,
+			    int build_id_len,
+			    const char *filename,
+			    gdb::unique_xmalloc_ptr<char> *destname);
+
+/* Query debuginfod servers for an executable file with BUILD_ID.
+   BUILD_ID can be given as a binary blob or a null-terminated string.
+   If given as a binary blob, BUILD_ID_LEN should be the number of bytes.
+   If given as a null-terminated string, BUILD_ID_LEN should be 0.
+
+   FILENAME should be the name or path associated with the executable.
+   It is used for printing messages to the user.
+
+   If the file is successfully retrieved, return a file descriptor and store
+   the file's local path in DESTNAME.  If unsuccessful, print an error message
+   and return a negative errno.  If GDB is not built with debuginfod, this
+   function returns -ENOSYS.  */
+
+extern scoped_fd debuginfod_exec_query (const unsigned char *build_id,
+					int build_id_len,
+					const char *filename,
+					gdb::unique_xmalloc_ptr<char>
+					  *destname);
+
+/* Query debuginfod servers for the binary contents of a ELF/DWARF section
+   from a file matching BUILD_ID.  BUILD_ID can be given as a binary blob
+   or a null-terminated string.  If given as a binary blob, BUILD_ID_LEN
+   should be the number of bytes.  If given as a null-terminated string,
+   BUILD_ID_LEN should be 0.
+
+   FILENAME should be the name or path associated with the file matching
+   BUILD_ID.  It is used for printing messages to the user.
+
+   SECTION_NAME should be the name of an ELF/DWARF section.
+
+   If the file is successfully retrieved, return a file descriptor and store
+   the file's local path in DESTNAME.  If unsuccessful, print an error message
+   and return a negative errno.  If GDB is not built with debuginfod or
+   libdebuginfod does not support section queries, this function returns
+   -ENOSYS.  */
+
+extern scoped_fd debuginfod_section_query (const unsigned char *build_id,
+					   int build_id_len,
+					   const char *filename,
+					   const char *section_name,
+					   gdb::unique_xmalloc_ptr<char>
+					     *destname);
+#endif /* DEBUGINFOD_SUPPORT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/defs.h ./gdb/defs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/defs.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/defs.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,7 +1,5 @@
-/* *INDENT-OFF* */ /* ATTRIBUTE_PRINTF confuses indent, avoid running it
-		      for now.  */
 /* Basic, host-specific, and target-specific definitions for GDB.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,8 +25,17 @@
 
 #include "gdbsupport/common-defs.h"
 
+#undef PACKAGE
+#undef PACKAGE_NAME
+#undef PACKAGE_VERSION
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+
+#include <config.h>
+#include "bfd.h"
+
 #include <sys/types.h>
-#include <limits.h>
+#include <climits>
 
 /* The libdecnumber library, on which GDB depends, includes a header file
    called gstdint.h instead of relying directly on stdint.h.  GDB, on the
@@ -54,6 +61,7 @@
 
 #include "gdbsupport/host-defs.h"
 #include "gdbsupport/enum-flags.h"
+#include "gdbsupport/array-view.h"
 
 /* Scope types enumerator.  List the types of scopes the compiler will
    accept.  */
@@ -108,11 +116,8 @@ using RequireLongest = gdb::Requires<gdb
 
 #include "hashtab.h"
 
-/* * Enable dbx commands if set.  */
-extern int dbx_commands;
-
 /* * System root path, used to find libraries etc.  */
-extern char *gdb_sysroot;
+extern std::string gdb_sysroot;
 
 /* * GDB datadir, used to store data files.  */
 extern std::string gdb_datadir;
@@ -122,7 +127,7 @@ extern std::string gdb_datadir;
 extern std::string python_libdir;
 
 /* * Search path for separate debug files.  */
-extern char *debug_file_directory;
+extern std::string debug_file_directory;
 
 /* GDB's SIGINT handler basically sets a flag; code that might take a
    long time before it gets back to the event loop, and which ought to
@@ -166,7 +171,10 @@ extern quit_handler_ftype *quit_handler;
 extern void default_quit_handler (void);
 
 /* Flag that function quit should call quit_force.  */
-extern volatile int sync_quit_force_run;
+extern volatile bool sync_quit_force_run;
+
+/* Set sync_quit_force_run and also call set_quit_flag().  */
+extern void set_force_quit_flag ();
 
 extern void quit (void);
 
@@ -196,16 +204,15 @@ extern void quit_serial_event_clear (voi
    these languages, so some symbols could be successfully demangled by
    several languages.  For that reason, the constants here are sorted
    in the order we'll attempt demangling them.  For example: Rust uses
-   C++ mangling, so must come after C++; Ada must come last (see
-   ada_sniff_from_mangled_name).  (Keep this order in sync with the
-   'languages' array in language.c.)  */
+   a C++-compatible mangling, so must come before C++; Ada must come
+   last (see ada_sniff_from_mangled_name).  */
 
 enum language
   {
     language_unknown,		/* Language not known */
-    language_auto,		/* Placeholder for automatic setting */
     language_c,			/* C */
     language_objc,		/* Objective-C */
+    language_rust,		/* Rust */
     language_cplus,		/* C++ */
     language_d,			/* D */
     language_go,		/* Go */
@@ -214,7 +221,6 @@ enum language
     language_asm,		/* Assembly language */
     language_pascal,		/* Pascal */
     language_opencl,		/* OpenCL */
-    language_rust,		/* Rust */
     language_minimal,		/* All other languages, minimal support only */
     language_ada,		/* Ada */
     nr_languages
@@ -223,7 +229,10 @@ enum language
 /* The number of bits needed to represent all languages, with enough
    padding to allow for reasonable growth.  */
 #define LANGUAGE_BITS 5
-gdb_static_assert (nr_languages <= (1 << LANGUAGE_BITS));
+static_assert (nr_languages <= (1 << LANGUAGE_BITS));
+
+/* The number of bytes needed to represent all languages.  */
+#define LANGUAGE_BYTES ((LANGUAGE_BITS + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
 
 enum precision_type
   {
@@ -274,7 +283,7 @@ enum return_value_convention
 
 struct symtab;
 struct breakpoint;
-struct frame_info;
+class frame_info_ptr;
 struct gdbarch;
 struct value;
 
@@ -290,12 +299,6 @@ extern std::string relocate_gdb_director
 extern int annotation_level;	/* in stack.c */
 
 
-/* From regex.c or libc.  BSD 4.4 declares this with the argument type as
-   "const char *" in unistd.h, so we can't declare the argument
-   as "char *".  */
-
-EXTERN_C char *re_comp (const char *);
-
 /* From symfile.c */
 
 extern void symbol_file_command (const char *, int);
@@ -306,14 +309,13 @@ typedef void initialize_file_ftype (void
 
 extern char *gdb_readline_wrapper (const char *);
 
-extern const char *command_line_input (const char *, const char *);
+extern const char *command_line_input (std::string &cmd_line_buffer,
+				       const char *, const char *);
 
 extern void print_prompt (void);
 
 struct ui;
 
-extern int input_interactive_p (struct ui *);
-
 extern bool info_verbose;
 
 /* From printcmd.c */
@@ -332,12 +334,17 @@ extern const char *pc_prefix (CORE_ADDR)
 /* * Process memory area starting at ADDR with length SIZE.  Area is
    readable iff READ is non-zero, writable if WRITE is non-zero,
    executable if EXEC is non-zero.  Area is possibly changed against
-   its original file based copy if MODIFIED is non-zero.  DATA is
-   passed without changes from a caller.  */
+   its original file based copy if MODIFIED is non-zero.
+
+   MEMORY_TAGGED is true if the memory region contains memory tags, false
+   otherwise.
+
+   DATA is passed without changes from a caller.  */
 
 typedef int (*find_memory_region_ftype) (CORE_ADDR addr, unsigned long size,
 					 int read, int write, int exec,
-					 int modified, void *data);
+					 int modified, bool memory_tagged,
+					 void *data);
 
 /* * Possible lvalue types.  Like enum language, this should be in
    value.h, but needs to be here for the same reason.  */
@@ -397,20 +404,6 @@ enum info_proc_what
 extern unsigned input_radix;
 extern unsigned output_radix;
 
-/* * Possibilities for prettyformat parameters to routines which print
-   things.  Like enum language, this should be in value.h, but needs
-   to be here for the same reason.  FIXME:  If we can eliminate this
-   as an arg to LA_VAL_PRINT, then we can probably move it back to
-   value.h.  */
-
-enum val_prettyformat
-  {
-    Val_no_prettyformat = 0,
-    Val_prettyformat,
-    /* * Use the default setting which the user has specified.  */
-    Val_prettyformat_default
-  };
-
 /* * Optional native machine support.  Non-native (and possibly pure
    multi-arch) targets do not need a "nm.h" file.  This will be a
    symlink to one of the nm-*.h files, built by the `configure'
@@ -432,74 +425,12 @@ enum val_prettyformat
 # include "fopen-bin.h"
 #endif
 
-/* Defaults for system-wide constants (if not defined by xm.h, we fake it).
-   FIXME: Assumes 2's complement arithmetic.  */
-
-#if !defined (UINT_MAX)
-#define	UINT_MAX ((unsigned int)(~0))	    /* 0xFFFFFFFF for 32-bits */
-#endif
-
-#if !defined (INT_MAX)
-#define	INT_MAX ((int)(UINT_MAX >> 1))	    /* 0x7FFFFFFF for 32-bits */
-#endif
-
-#if !defined (INT_MIN)
-#define INT_MIN ((int)((int) ~0 ^ INT_MAX)) /* 0x80000000 for 32-bits */
-#endif
-
-#if !defined (ULONG_MAX)
-#define	ULONG_MAX ((unsigned long)(~0L))    /* 0xFFFFFFFF for 32-bits */
-#endif
-
-#if !defined (LONG_MAX)
-#define	LONG_MAX ((long)(ULONG_MAX >> 1))   /* 0x7FFFFFFF for 32-bits */
-#endif
-
-#if !defined (ULONGEST_MAX)
-#define	ULONGEST_MAX (~(ULONGEST)0)        /* 0xFFFFFFFFFFFFFFFF for 64-bits */
-#endif
-
-#if !defined (LONGEST_MAX)                 /* 0x7FFFFFFFFFFFFFFF for 64-bits */
-#define	LONGEST_MAX ((LONGEST)(ULONGEST_MAX >> 1))
-#endif
-
 /* * Convert a LONGEST to an int.  This is used in contexts (e.g. number of
    arguments to a function, number in a value history, register number, etc.)
    where the value must not be larger than can fit in an int.  */
 
 extern int longest_to_int (LONGEST);
 
-/* * List of known OS ABIs.  If you change this, make sure to update the
-   table in osabi.c.  */
-enum gdb_osabi
-{
-  GDB_OSABI_UNKNOWN = 0,	/* keep this zero */
-  GDB_OSABI_NONE,
-
-  GDB_OSABI_SVR4,
-  GDB_OSABI_HURD,
-  GDB_OSABI_SOLARIS,
-  GDB_OSABI_LINUX,
-  GDB_OSABI_FREEBSD,
-  GDB_OSABI_NETBSD,
-  GDB_OSABI_OPENBSD,
-  GDB_OSABI_WINCE,
-  GDB_OSABI_GO32,
-  GDB_OSABI_QNXNTO,
-  GDB_OSABI_CYGWIN,
-  GDB_OSABI_AIX,
-  GDB_OSABI_DICOS,
-  GDB_OSABI_DARWIN,
-  GDB_OSABI_SYMBIAN,
-  GDB_OSABI_OPENVMS,
-  GDB_OSABI_LYNXOS178,
-  GDB_OSABI_NEWLIB,
-  GDB_OSABI_SDE,
-  GDB_OSABI_PIKEOS,
-
-  GDB_OSABI_INVALID		/* keep this last */
-};
-
 /* Enumerate the requirements a symbol has in order to be evaluated.
    These are listed in order of "strength" -- a later entry subsumes
    earlier ones.  This fine-grained distinction is important because
@@ -522,20 +453,36 @@ enum symbol_needs_kind
 /* In findvar.c.  */
 
 template<typename T, typename = RequireLongest<T>>
-T extract_integer (const gdb_byte *addr, int len, enum bfd_endian byte_order);
+T extract_integer (gdb::array_view<const gdb_byte>, enum bfd_endian byte_order);
+
+static inline LONGEST
+extract_signed_integer (gdb::array_view<const gdb_byte> buf,
+			enum bfd_endian byte_order)
+{
+  return extract_integer<LONGEST> (buf, byte_order);
+}
 
 static inline LONGEST
 extract_signed_integer (const gdb_byte *addr, int len,
 			enum bfd_endian byte_order)
 {
-  return extract_integer<LONGEST> (addr, len, byte_order);
+  return extract_signed_integer (gdb::array_view<const gdb_byte> (addr, len),
+				 byte_order);
+}
+
+static inline ULONGEST
+extract_unsigned_integer (gdb::array_view<const gdb_byte> buf,
+			  enum bfd_endian byte_order)
+{
+  return extract_integer<ULONGEST> (buf, byte_order);
 }
 
 static inline ULONGEST
 extract_unsigned_integer (const gdb_byte *addr, int len,
 			  enum bfd_endian byte_order)
 {
-  return extract_integer<ULONGEST> (addr, len, byte_order);
+  return extract_unsigned_integer (gdb::array_view<const gdb_byte> (addr, len),
+				   byte_order);
 }
 
 extern int extract_long_unsigned_integer (const gdb_byte *, int,
@@ -548,21 +495,44 @@ extern CORE_ADDR extract_typed_address (
    target-format integer at ADDR which is LEN bytes long.  */
 
 template<typename T, typename = RequireLongest<T>>
-extern void store_integer (gdb_byte *addr, int len, enum bfd_endian byte_order,
-			   T val);
+extern void store_integer (gdb::array_view<gdb_byte> dst,
+			   bfd_endian byte_order, T val);
+
+template<typename T>
+static inline void
+store_integer (gdb_byte *addr, int len, bfd_endian byte_order, T val)
+{
+  return store_integer (gdb::make_array_view (addr, len), byte_order, val);
+}
+
+static inline void
+store_signed_integer (gdb::array_view<gdb_byte> dst, bfd_endian byte_order,
+		      LONGEST val)
+{
+  return store_integer (dst, byte_order, val);
+}
 
 static inline void
-store_signed_integer (gdb_byte *addr, int len,
-		      enum bfd_endian byte_order, LONGEST val)
+store_signed_integer (gdb_byte *addr, int len, bfd_endian byte_order,
+		      LONGEST val)
 {
-  return store_integer (addr, len, byte_order, val);
+  return store_signed_integer (gdb::make_array_view (addr, len), byte_order,
+			       val);
 }
 
 static inline void
-store_unsigned_integer (gdb_byte *addr, int len,
-			enum bfd_endian byte_order, ULONGEST val)
+store_unsigned_integer (gdb::array_view<gdb_byte> dst, bfd_endian byte_order,
+			ULONGEST val)
 {
-  return store_integer (addr, len, byte_order, val);
+  return store_integer (dst, byte_order, val);
+}
+
+static inline void
+store_unsigned_integer (gdb_byte *addr, int len, bfd_endian byte_order,
+			ULONGEST val)
+{
+  return store_unsigned_integer (gdb::make_array_view (addr, len), byte_order,
+				 val);
 }
 
 extern void store_typed_address (gdb_byte *buf, struct type *type,
@@ -592,8 +562,6 @@ extern void (*deprecated_print_frame_inf
 							 int noerror);
 extern int (*deprecated_query_hook) (const char *, va_list)
      ATTRIBUTE_FPTR_PRINTF(1,0);
-extern void (*deprecated_warning_hook) (const char *, va_list)
-     ATTRIBUTE_FPTR_PRINTF(1,0);
 extern void (*deprecated_readline_begin_hook) (const char *, ...)
      ATTRIBUTE_FPTR_PRINTF_1;
 extern char *(*deprecated_readline_hook) (const char *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-exp.c ./gdb/d-exp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-exp.c	2019-12-11 01:52:52.000000000 +0000
+++ ./gdb/d-exp.c	2024-02-01 01:52:09.000000000 +0000
@@ -1,21 +1,19 @@
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* Bison implementation for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-   
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -28,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -46,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.0.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,15 +58,11 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
 /* Copy the first part of user declarations.  */
-
-/* Line 189 of yacc.c  */
-#line 39 "d-exp.y"
+#line 39 "d-exp.y" /* yacc.c:339  */
 
 
 #include "defs.h"
@@ -79,12 +73,10 @@
 #include "language.h"
 #include "c-lang.h"
 #include "d-lang.h"
-#include "bfd.h" /* Required by objfiles.h.  */
-#include "symfile.h" /* Required by objfiles.h.  */
-#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
 #include "charset.h"
 #include "block.h"
 #include "type-stack.h"
+#include "expop.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 #define parse_d_type(ps) builtin_d_type (ps->gdbarch ())
@@ -110,15 +102,18 @@ static void yyerror (const char *);
 
 static int type_aggregate_p (struct type *);
 
+using namespace expr;
 
 
-/* Line 189 of yacc.c  */
-#line 117 "d-exp.c.tmp"
+#line 109 "d-exp.c.tmp" /* yacc.c:339  */
 
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULLPTRPTR nullptr
+#  else
+#   define YY_NULLPTRPTR 0
+#  endif
+# endif
 
 /* Enabling verbose error messages.  */
 #ifdef YYERROR_VERBOSE
@@ -128,66 +123,68 @@ static int type_aggregate_p (struct type
 # define YYERROR_VERBOSE 0
 #endif
 
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
 
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
 
-/* Tokens.  */
+/* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     IDENTIFIER = 258,
-     UNKNOWN_NAME = 259,
-     TYPENAME = 260,
-     COMPLETE = 261,
-     NAME_OR_INT = 262,
-     INTEGER_LITERAL = 263,
-     FLOAT_LITERAL = 264,
-     CHARACTER_LITERAL = 265,
-     STRING_LITERAL = 266,
-     ENTRY = 267,
-     ERROR = 268,
-     TRUE_KEYWORD = 269,
-     FALSE_KEYWORD = 270,
-     NULL_KEYWORD = 271,
-     SUPER_KEYWORD = 272,
-     CAST_KEYWORD = 273,
-     SIZEOF_KEYWORD = 274,
-     TYPEOF_KEYWORD = 275,
-     TYPEID_KEYWORD = 276,
-     INIT_KEYWORD = 277,
-     IMMUTABLE_KEYWORD = 278,
-     CONST_KEYWORD = 279,
-     SHARED_KEYWORD = 280,
-     STRUCT_KEYWORD = 281,
-     UNION_KEYWORD = 282,
-     CLASS_KEYWORD = 283,
-     INTERFACE_KEYWORD = 284,
-     ENUM_KEYWORD = 285,
-     TEMPLATE_KEYWORD = 286,
-     DELEGATE_KEYWORD = 287,
-     FUNCTION_KEYWORD = 288,
-     DOLLAR_VARIABLE = 289,
-     ASSIGN_MODIFY = 290,
-     OROR = 291,
-     ANDAND = 292,
-     GEQ = 293,
-     LEQ = 294,
-     NOTEQUAL = 295,
-     EQUAL = 296,
-     RSH = 297,
-     LSH = 298,
-     HATHAT = 299,
-     NOTIDENTITY = 300,
-     IDENTITY = 301,
-     DECREMENT = 302,
-     INCREMENT = 303,
-     DOTDOT = 304
-   };
+  enum yytokentype
+  {
+    IDENTIFIER = 258,
+    UNKNOWN_NAME = 259,
+    TYPENAME = 260,
+    COMPLETE = 261,
+    NAME_OR_INT = 262,
+    INTEGER_LITERAL = 263,
+    FLOAT_LITERAL = 264,
+    CHARACTER_LITERAL = 265,
+    STRING_LITERAL = 266,
+    ENTRY = 267,
+    ERROR = 268,
+    TRUE_KEYWORD = 269,
+    FALSE_KEYWORD = 270,
+    NULL_KEYWORD = 271,
+    SUPER_KEYWORD = 272,
+    CAST_KEYWORD = 273,
+    SIZEOF_KEYWORD = 274,
+    TYPEOF_KEYWORD = 275,
+    TYPEID_KEYWORD = 276,
+    INIT_KEYWORD = 277,
+    IMMUTABLE_KEYWORD = 278,
+    CONST_KEYWORD = 279,
+    SHARED_KEYWORD = 280,
+    STRUCT_KEYWORD = 281,
+    UNION_KEYWORD = 282,
+    CLASS_KEYWORD = 283,
+    INTERFACE_KEYWORD = 284,
+    ENUM_KEYWORD = 285,
+    TEMPLATE_KEYWORD = 286,
+    DELEGATE_KEYWORD = 287,
+    FUNCTION_KEYWORD = 288,
+    DOLLAR_VARIABLE = 289,
+    ASSIGN_MODIFY = 290,
+    OROR = 291,
+    ANDAND = 292,
+    EQUAL = 293,
+    NOTEQUAL = 294,
+    LEQ = 295,
+    GEQ = 296,
+    LSH = 297,
+    RSH = 298,
+    HATHAT = 299,
+    IDENTITY = 300,
+    NOTIDENTITY = 301,
+    INCREMENT = 302,
+    DECREMENT = 303,
+    DOTDOT = 304
+  };
 #endif
 /* Tokens.  */
 #define IDENTIFIER 258
@@ -225,28 +222,25 @@ static int type_aggregate_p (struct type
 #define ASSIGN_MODIFY 290
 #define OROR 291
 #define ANDAND 292
-#define GEQ 293
-#define LEQ 294
-#define NOTEQUAL 295
-#define EQUAL 296
-#define RSH 297
-#define LSH 298
+#define EQUAL 293
+#define NOTEQUAL 294
+#define LEQ 295
+#define GEQ 296
+#define LSH 297
+#define RSH 298
 #define HATHAT 299
-#define NOTIDENTITY 300
-#define IDENTITY 301
-#define DECREMENT 302
-#define INCREMENT 303
+#define IDENTITY 300
+#define NOTIDENTITY 301
+#define INCREMENT 302
+#define DECREMENT 303
 #define DOTDOT 304
 
+/* Value type.  */
+#if ! defined d_exp_YYSTYPE && ! defined d_exp_YYSTYPE_IS_DECLARED
 
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union d_exp_YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
-#line 87 "d-exp.y"
+#line 87 "d-exp.y" /* yacc.c:355  */
 
     struct {
       LONGEST val;
@@ -268,28 +262,29 @@ typedef union YYSTYPE
     struct stoken_vector svec;
   
 
+#line 266 "d-exp.c.tmp" /* yacc.c:355  */
+};
 
-/* Line 214 of yacc.c  */
-#line 274 "d-exp.c.tmp"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
+typedef union d_exp_YYSTYPE d_exp_YYSTYPE;
+# define d_exp_YYSTYPE_IS_TRIVIAL 1
+# define d_exp_YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
+extern d_exp_YYSTYPE yylval;
+
+int yyparse (void);
 
-/* Line 264 of yacc.c  */
-#line 108 "d-exp.y"
 
-/* YYSTYPE gets defined by %union */
-static int parse_number (struct parser_state *, const char *,
-			 int, int, YYSTYPE *);
 
+/* Copy the second part of user declarations.  */
+#line 108 "d-exp.y" /* yacc.c:358  */
 
-/* Line 264 of yacc.c  */
-#line 293 "d-exp.c.tmp"
+/* d_exp_YYSTYPE gets defined by %union */
+static int parse_number (struct parser_state *, const char *,
+			 int, int, d_exp_YYSTYPE *);
+
+#line 288 "d-exp.c.tmp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -303,11 +298,8 @@ typedef unsigned char yytype_uint8;
 
 #ifdef YYTYPE_INT8
 typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
 #ifdef YYTYPE_UINT16
@@ -327,8 +319,7 @@ typedef short int yytype_int16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -339,42 +330,71 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
 #  endif
 # endif
 # ifndef YY_
-#  define YY_(msgid) msgid
+#  define YY_(Msgid) Msgid
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+#  define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
 # endif
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
+# define YYUSE(E) ((void) (E))
 #else
-# define YYUSE(e) /* empty */
+# define YYUSE(E) /* empty */
 #endif
 
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
 #else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
-    int yyi;
+# define YY_INITIAL_VALUE(Value) Value
 #endif
-{
-  return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
 #endif
 
+
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
 /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
@@ -391,11 +411,11 @@ YYID (yyi)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
+      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
 #     endif
 #    endif
 #   endif
@@ -403,8 +423,8 @@ YYID (yyi)
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+   /* Pacify GCC's 'empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -418,25 +438,23 @@ YYID (yyi)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined xmalloc) \
-	     && (defined YYFREE || defined xfree)))
+             && (defined YYFREE || defined xfree)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC xmalloc
-#   if ! defined xmalloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined xmalloc && ! defined EXIT_SUCCESS
 void *xmalloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE xfree
-#   if ! defined xfree && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined xfree && ! defined EXIT_SUCCESS
 void xfree (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -446,60 +464,64 @@ void xfree (void *); /* INFRINGES ON USE
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined d_exp_YYSTYPE_IS_TRIVIAL && d_exp_YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
-union yyalloc
+union d_exp_yyalloc
 {
   yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
+  d_exp_YYSTYPE yyvs_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (sizeof (union d_exp_yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+     ((N) * (sizeof (yytype_int16) + sizeof (d_exp_YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
+# define YYCOPY_NEEDED 1
 
 /* Relocate STACK from its old location to the new one.  The
    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
+    do                                                                  \
+      {                                                                 \
+        YYSIZE_T yynewbytes;                                            \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                 \
+    while (0)
 
 #endif
 
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(Dst, Src, Count) \
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYSIZE_T yyi;                         \
+          for (yyi = 0; yyi < (Count); yyi++)   \
+            (Dst)[yyi] = (Src)[yyi];            \
+        }                                       \
+      while (0)
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  70
 /* YYLAST -- Last index in YYTABLE.  */
@@ -511,17 +533,19 @@ union yyalloc
 #define YYNNTS  35
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  104
-/* YYNRULES -- Number of states.  */
+/* YYNSTATES -- Number of states.  */
 #define YYNSTATES  169
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   304
 
-#define YYTRANSLATE(YYX)						\
+#define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, without out-of-bounds checking.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -530,7 +554,7 @@ static const yytype_uint8 yytranslate[]
        2,     2,     2,    68,     2,     2,     2,    56,    43,     2,
       64,    69,    54,    52,    36,    53,    62,    55,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,    66,     2,
-      44,    37,    45,    38,     2,     2,     2,     2,     2,     2,
+      46,    37,    47,    38,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,    63,     2,    70,    42,     2,     2,     2,     2,     2,
@@ -553,84 +577,29 @@ static const yytype_uint8 yytranslate[]
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    39,    40,    46,    47,    48,    49,    50,    51,    57,
+      35,    39,    40,    44,    45,    48,    49,    50,    51,    57,
       58,    59,    60,    61,    65
 };
 
 #if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     5,     7,     9,    11,    15,    17,    21,
-      25,    27,    33,    35,    39,    41,    45,    47,    51,    53,
-      57,    59,    63,    65,    67,    69,    71,    75,    79,    83,
-      87,    91,    95,    99,   103,   105,   109,   113,   115,   119,
-     123,   127,   129,   133,   137,   141,   144,   147,   150,   153,
-     156,   159,   162,   165,   169,   171,   173,   179,   184,   186,
-     190,   192,   196,   200,   205,   209,   212,   215,   217,   219,
-     221,   223,   227,   228,   230,   231,   237,   242,   246,   253,
-     257,   259,   263,   265,   267,   269,   271,   273,   275,   277,
-     279,   281,   283,   288,   292,   294,   296,   299,   303,   305,
-     308,   310,   313,   317,   322
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int8 yyrhs[] =
-{
-      72,     0,    -1,    73,    -1,   103,    -1,    74,    -1,    75,
-      -1,    75,    36,    74,    -1,    76,    -1,    76,    37,    75,
-      -1,    76,    35,    75,    -1,    77,    -1,    77,    38,    73,
-      66,    76,    -1,    78,    -1,    77,    39,    78,    -1,    79,
-      -1,    78,    40,    79,    -1,    80,    -1,    79,    41,    80,
-      -1,    81,    -1,    80,    42,    81,    -1,    82,    -1,    81,
-      43,    82,    -1,    86,    -1,    83,    -1,    84,    -1,    85,
-      -1,    86,    49,    86,    -1,    86,    48,    86,    -1,    86,
-      59,    86,    -1,    86,    58,    86,    -1,    86,    44,    86,
-      -1,    86,    47,    86,    -1,    86,    45,    86,    -1,    86,
-      46,    86,    -1,    87,    -1,    86,    51,    87,    -1,    86,
-      50,    87,    -1,    88,    -1,    87,    52,    88,    -1,    87,
-      53,    88,    -1,    87,    67,    88,    -1,    89,    -1,    88,
-      54,    89,    -1,    88,    55,    89,    -1,    88,    56,    89,
-      -1,    43,    89,    -1,    61,    89,    -1,    60,    89,    -1,
-      54,    89,    -1,    53,    89,    -1,    52,    89,    -1,    68,
-      89,    -1,    67,    89,    -1,   103,    62,    19,    -1,    90,
-      -1,    91,    -1,    18,    64,   103,    69,    89,    -1,    64,
-     103,    69,    89,    -1,    92,    -1,    92,    57,    89,    -1,
-      99,    -1,    92,    62,     6,    -1,    92,    62,     3,    -1,
-      92,    62,     3,     6,    -1,    92,    62,    19,    -1,    92,
-      61,    -1,    92,    60,    -1,    95,    -1,    97,    -1,    98,
-      -1,    75,    -1,    93,    36,    75,    -1,    -1,    93,    -1,
-      -1,    92,    64,    96,    94,    69,    -1,    92,    63,    93,
-      70,    -1,    92,    63,    70,    -1,    92,    63,    75,    65,
-      75,    70,    -1,    64,    73,    69,    -1,   101,    -1,   103,
-      62,   101,    -1,    34,    -1,     7,    -1,    16,    -1,    14,
-      -1,    15,    -1,     8,    -1,     9,    -1,    10,    -1,   102,
-      -1,   100,    -1,    20,    64,    73,    69,    -1,    63,    94,
-      70,    -1,     3,    -1,    11,    -1,   102,    11,    -1,    64,
-     103,    69,    -1,   105,    -1,   105,   104,    -1,    54,    -1,
-      54,   104,    -1,    63,     8,    70,    -1,    63,     8,    70,
-     104,    -1,     5,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
        0,   181,   181,   182,   188,   192,   193,   198,   199,   201,
-     208,   209,   214,   215,   220,   221,   226,   227,   232,   233,
-     238,   239,   244,   245,   246,   247,   251,   253,   258,   260,
-     265,   267,   269,   271,   276,   277,   279,   284,   285,   287,
-     289,   294,   295,   297,   299,   303,   305,   307,   309,   311,
-     313,   315,   317,   319,   321,   322,   326,   330,   336,   337,
-     342,   343,   351,   355,   360,   362,   364,   366,   367,   368,
-     372,   374,   380,   381,   386,   385,   394,   407,   409,   414,
-     416,   459,   510,   512,   520,   527,   531,   535,   540,   545,
-     550,   556,   561,   566,   571,   575,   590,   608,   610,   614,
-     623,   625,   627,   630,   636
+     211,   212,   224,   225,   230,   231,   236,   237,   242,   243,
+     248,   249,   254,   255,   256,   257,   261,   263,   268,   270,
+     275,   277,   279,   281,   286,   287,   289,   294,   295,   297,
+     299,   304,   305,   307,   309,   313,   315,   317,   319,   321,
+     323,   325,   327,   329,   331,   332,   336,   340,   345,   346,
+     351,   352,   359,   364,   371,   373,   375,   377,   378,   379,
+     383,   385,   391,   392,   397,   396,   408,   422,   424,   436,
+     438,   477,   511,   513,   518,   522,   524,   526,   528,   535,
+     540,   546,   553,   558,   563,   567,   582,   600,   602,   604,
+     611,   613,   615,   618,   624
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || 0
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
@@ -644,9 +613,9 @@ static const char *const yytname[] =
   "UNION_KEYWORD", "CLASS_KEYWORD", "INTERFACE_KEYWORD", "ENUM_KEYWORD",
   "TEMPLATE_KEYWORD", "DELEGATE_KEYWORD", "FUNCTION_KEYWORD",
   "DOLLAR_VARIABLE", "ASSIGN_MODIFY", "','", "'='", "'?'", "OROR",
-  "ANDAND", "'|'", "'^'", "'&'", "'<'", "'>'", "GEQ", "LEQ", "NOTEQUAL",
-  "EQUAL", "RSH", "LSH", "'+'", "'-'", "'*'", "'/'", "'%'", "HATHAT",
-  "NOTIDENTITY", "IDENTITY", "DECREMENT", "INCREMENT", "'.'", "'['", "'('",
+  "ANDAND", "'|'", "'^'", "'&'", "EQUAL", "NOTEQUAL", "'<'", "'>'", "LEQ",
+  "GEQ", "LSH", "RSH", "'+'", "'-'", "'*'", "'/'", "'%'", "HATHAT",
+  "IDENTITY", "NOTIDENTITY", "INCREMENT", "DECREMENT", "'.'", "'['", "'('",
   "DOTDOT", "':'", "'~'", "'!'", "')'", "']'", "$accept", "start",
   "Expression", "CommaExpression", "AssignExpression",
   "ConditionalExpression", "OrOrExpression", "AndAndExpression",
@@ -656,94 +625,38 @@ static const char *const yytname[] =
   "CastExpression", "PowExpression", "PostfixExpression", "ArgumentList",
   "ArgumentList_opt", "CallExpression", "$@1", "IndexExpression",
   "SliceExpression", "PrimaryExpression", "ArrayLiteral", "IdentifierExp",
-  "StringExp", "TypeExp", "BasicType2", "BasicType", 0
+  "StringExp", "TypeExp", "BasicType2", "BasicType", YY_NULLPTRPTR
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,    44,    61,    63,   291,
-     292,   124,    94,    38,    60,    62,   293,   294,   295,   296,
+     292,   124,    94,    38,   293,   294,    60,    62,   295,   296,
      297,   298,    43,    45,    42,    47,    37,   299,   300,   301,
      302,   303,    46,    91,    40,   304,    58,   126,    33,    41,
       93
 };
 # endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    71,    72,    72,    73,    74,    74,    75,    75,    75,
-      76,    76,    77,    77,    78,    78,    79,    79,    80,    80,
-      81,    81,    82,    82,    82,    82,    83,    83,    84,    84,
-      85,    85,    85,    85,    86,    86,    86,    87,    87,    87,
-      87,    88,    88,    88,    88,    89,    89,    89,    89,    89,
-      89,    89,    89,    89,    89,    89,    90,    90,    91,    91,
-      92,    92,    92,    92,    92,    92,    92,    92,    92,    92,
-      93,    93,    94,    94,    96,    95,    97,    98,    98,    99,
-      99,    99,    99,    99,    99,    99,    99,    99,    99,    99,
-      99,    99,    99,   100,   101,   102,   102,   103,   103,   103,
-     104,   104,   104,   104,   105
-};
+#define YYPACT_NINF -91
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     1,     1,     1,     3,     1,     3,     3,
-       1,     5,     1,     3,     1,     3,     1,     3,     1,     3,
-       1,     3,     1,     1,     1,     1,     3,     3,     3,     3,
-       3,     3,     3,     3,     1,     3,     3,     1,     3,     3,
-       3,     1,     3,     3,     3,     2,     2,     2,     2,     2,
-       2,     2,     2,     3,     1,     1,     5,     4,     1,     3,
-       1,     3,     3,     4,     3,     2,     2,     1,     1,     1,
-       1,     3,     0,     1,     0,     5,     4,     3,     6,     3,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     4,     3,     1,     1,     2,     3,     1,     2,
-       1,     2,     3,     4,     1
-};
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-91)))
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       0,    94,   104,    83,    87,    88,    89,    95,    85,    86,
-      84,     0,     0,    82,     0,     0,     0,     0,     0,     0,
-      72,     0,     0,     0,     0,     2,     4,     5,     7,    10,
-      12,    14,    16,    18,    20,    23,    24,    25,    22,    34,
-      37,    41,    54,    55,    58,    67,    68,    69,    60,    91,
-      80,    90,     3,    98,     0,     0,    45,     0,    50,    49,
-      48,    47,    46,    70,    73,     0,     0,     0,    52,    51,
-       1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    66,    65,     0,
-       0,    74,    96,     0,   100,     0,    99,     0,     0,     0,
-       0,    93,    79,    97,     6,     9,     8,     0,    13,    15,
-      17,    19,    21,    30,    32,    33,    31,    27,    26,    36,
-      35,    29,    28,    38,    39,    40,    42,    43,    44,    59,
-      62,    61,    64,    77,    70,     0,    72,    53,    81,   101,
-       0,     0,     0,    92,    71,    57,     0,    63,     0,    76,
-       0,   102,    97,    56,    11,     0,    75,   103,    78
-};
+#define YYTABLE_NINF -1
 
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    64,    65,    45,   146,    46,    47,    48,    49,
-      50,    51,    57,   106,    53
-};
+#define yytable_value_is_error(Yytable_value) \
+  0
 
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -91
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
      132,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,
@@ -765,7 +678,31 @@ static const yytype_int16 yypact[] =
       33,   -37,   -91,   -91,   -91,    38,   -91,   -91,   -91
 };
 
-/* YYPGOTO[NTERM-NUM].  */
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+     Performed when YYTABLE does not specify something else to do.  Zero
+     means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,    94,   104,    83,    87,    88,    89,    95,    85,    86,
+      84,     0,     0,    82,     0,     0,     0,     0,     0,     0,
+      72,     0,     0,     0,     0,     2,     4,     5,     7,    10,
+      12,    14,    16,    18,    20,    23,    24,    25,    22,    34,
+      37,    41,    54,    55,    58,    67,    68,    69,    60,    91,
+      80,    90,     3,    98,     0,     0,    45,     0,    50,    49,
+      48,    46,    47,    70,    73,     0,     0,     0,    52,    51,
+       1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    65,    66,     0,
+       0,    74,    96,     0,   100,     0,    99,     0,     0,     0,
+       0,    93,    79,    97,     6,     9,     8,     0,    13,    15,
+      17,    19,    21,    26,    27,    30,    32,    31,    33,    35,
+      36,    28,    29,    38,    39,    40,    42,    43,    44,    59,
+      62,    61,    64,    77,    70,     0,    72,    53,    81,   101,
+       0,     0,     0,    92,    71,    57,     0,    63,     0,    76,
+       0,   102,    97,    56,    11,     0,    75,   103,    78
+};
+
+  /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
      -91,   -91,     1,    42,   -13,   -47,   -91,    39,    40,    46,
@@ -774,11 +711,18 @@ static const yytype_int8 yypgoto[] =
       48,   -91,    10,   -90,   -91
 };
 
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -1
+  /* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    64,    65,    45,   146,    46,    47,    48,    49,
+      50,    51,    57,   106,    53
+};
+
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule whose
+     number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
       56,    58,    59,    60,    61,    62,   110,    63,    68,    69,
@@ -829,8 +773,8 @@ static const yytype_int16 yycheck[] =
       68
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
        0,     3,     5,     7,     8,     9,    10,    11,    14,    15,
@@ -852,95 +796,73 @@ static const yytype_uint8 yystos[] =
       94,    70,    69,    89,    76,    75,    69,   104,    70
 };
 
-#define yyerrok		(yyerrstatus = 0)
-#define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
-#define YYEOF		0
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    71,    72,    72,    73,    74,    74,    75,    75,    75,
+      76,    76,    77,    77,    78,    78,    79,    79,    80,    80,
+      81,    81,    82,    82,    82,    82,    83,    83,    84,    84,
+      85,    85,    85,    85,    86,    86,    86,    87,    87,    87,
+      87,    88,    88,    88,    88,    89,    89,    89,    89,    89,
+      89,    89,    89,    89,    89,    89,    90,    90,    91,    91,
+      92,    92,    92,    92,    92,    92,    92,    92,    92,    92,
+      93,    93,    94,    94,    96,    95,    97,    98,    98,    99,
+      99,    99,    99,    99,    99,    99,    99,    99,    99,    99,
+      99,    99,    99,   100,   101,   102,   102,   103,   103,   103,
+     104,   104,   104,   104,   105
+};
 
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     1,     1,     1,     3,     1,     3,     3,
+       1,     5,     1,     3,     1,     3,     1,     3,     1,     3,
+       1,     3,     1,     1,     1,     1,     3,     3,     3,     3,
+       3,     3,     3,     3,     1,     3,     3,     1,     3,     3,
+       3,     1,     3,     3,     3,     2,     2,     2,     2,     2,
+       2,     2,     2,     3,     1,     1,     5,     4,     1,     3,
+       1,     3,     3,     4,     3,     2,     2,     1,     1,     1,
+       1,     3,     0,     1,     0,     5,     4,     3,     6,     3,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     4,     3,     1,     1,     2,     3,     1,     2,
+       1,     2,     3,     4,     1
+};
 
 
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
+#define YYEMPTY         (-2)
+#define YYEOF           0
+
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-#define YYFAIL		goto yyerrlab
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
+#define YYBACKUP(Token, Value)                                  \
+do                                                              \
+  if (yychar == YYEMPTY)                                        \
+    {                                                           \
+      yychar = (Token);                                         \
+      yylval = (Value);                                         \
+      YYPOPSTACK (yylen);                                       \
+      yystate = *yyssp;                                         \
+      goto yybackup;                                            \
+    }                                                           \
+  else                                                          \
+    {                                                           \
       yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
-while (YYID (0))
-
-
-#define YYTERROR	1
-#define YYERRCODE	256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))                                                    \
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (YYID (0))
-#endif
+      YYERROR;                                                  \
+    }                                                           \
+while (0)
+
+/* Error token number */
+#define YYTERROR        1
+#define YYERRCODE       256
 
 
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-	      (Loc).first_line, (Loc).first_column,	\
-	      (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -950,54 +872,46 @@ while (YYID (0))
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-do {									  \
-  if (yydebug)								  \
-    {									  \
-      YYFPRINTF (stderr, "%s ", Title);					  \
-      yy_symbol_print (stderr,						  \
-		  Type, Value); \
-      YYFPRINTF (stderr, "\n");						  \
-    }									  \
-} while (YYID (0))
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
+} while (0)
 
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Type, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT.  |
+`----------------------------------------*/
+
 static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_value_print (FILE *yyoutput, int yytype, d_exp_YYSTYPE const * const yyvaluep)
 {
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YYUSE (yytype);
 }
 
 
@@ -1005,22 +919,11 @@ yy_symbol_value_print (yyoutput, yytype,
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_print (FILE *yyoutput, int yytype, d_exp_YYSTYPE const * const yyvaluep)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyoutput, "%s %s (",
+             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
   YYFPRINTF (yyoutput, ")");
@@ -1031,16 +934,8 @@ yy_symbol_print (yyoutput, yytype, yyval
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1051,49 +946,42 @@ yy_stack_print (yybottom, yytop)
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top)                            \
+do {                                                            \
+  if (yydebug)                                                  \
+    yy_stack_print ((Bottom), (Top));                           \
+} while (0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
 static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, d_exp_YYSTYPE *yyvsp, int yyrule)
 {
+  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned long int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
+             yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       		       );
+      yy_symbol_print (stderr,
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                                              );
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -1107,7 +995,7 @@ int yydebug;
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1122,7 +1010,6 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
 
 #if YYERROR_VERBOSE
 
@@ -1131,15 +1018,8 @@ int yydebug;
 #   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static YYSIZE_T
 yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
 {
   YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
@@ -1155,16 +1035,8 @@ yystrlen (yystr)
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static char *
 yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
 {
   char *yyd = yydest;
   const char *yys = yysrc;
@@ -1194,27 +1066,27 @@ yytnamerr (char *yyres, const char *yyst
       char const *yyp = yystr;
 
       for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
+        switch (*++yyp)
+          {
+          case '\'':
+          case ',':
+            goto do_not_strip_quotes;
+
+          case '\\':
+            if (*++yyp != '\\')
+              goto do_not_strip_quotes;
+            /* Fall through.  */
+          default:
+            if (yyres)
+              yyres[yyn] = *yyp;
+            yyn++;
+            break;
+
+          case '"':
+            if (yyres)
+              yyres[yyn] = '\0';
+            return yyn;
+          }
     do_not_strip_quotes: ;
     }
 
@@ -1225,211 +1097,187 @@ yytnamerr (char *yyres, const char *yyst
 }
 # endif
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
 {
-  int yyn = yypact[yystate];
-
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
-    {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-	{
-	  /* Avoid sprintf, as that infringes on the user's name space.
-	     Don't have undefined behavior even if the translation
-	     produced a string with the wrong number of "%s"s.  */
-	  char *yyp = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = YY_NULLPTRPTR;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
+    {
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                {
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]);
+                  if (! (yysize <= yysize1
+                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                    return 2;
+                  yysize = yysize1;
+                }
+              }
+        }
+    }
+
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
     }
+
+  {
+    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+      return 2;
+    yysize = yysize1;
+  }
+
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
+    }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
+yydestruct (const char *yymsg, int yytype, d_exp_YYSTYPE *yyvaluep)
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
-/* Prevent warnings from -Wmissing-prototypes.  */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
+
 
 
 /* The lookahead symbol.  */
 int yychar;
 
 /* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-
+d_exp_YYSTYPE yylval;
 /* Number of syntax errors so far.  */
 int yynerrs;
 
 
+/*----------.
+| yyparse.  |
+`----------*/
 
-/*-------------------------.
-| yyparse or yypush_parse.  |
-`-------------------------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
-
-
     int yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
     /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
+       'yyss': related to states.
+       'yyvs': related to semantic values.
 
-       Refer to the stacks thru separate pointers, to allow yyoverflow
+       Refer to the stacks through separate pointers, to allow yyoverflow
        to xreallocate them elsewhere.  */
 
     /* The state stack.  */
@@ -1438,19 +1286,19 @@ yyparse ()
     yytype_int16 *yyssp;
 
     /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
+    d_exp_YYSTYPE yyvsa[YYINITDEPTH];
+    d_exp_YYSTYPE *yyvs;
+    d_exp_YYSTYPE *yyvsp;
 
     YYSIZE_T yystacksize;
 
   int yyn;
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  int yytoken = 0;
   /* The variables used to return semantic value and location from the
      action routines.  */
-  YYSTYPE yyval;
+  d_exp_YYSTYPE yyval;
 
 #if YYERROR_VERBOSE
   /* Buffer for error messages, and its allocated size.  */
@@ -1465,9 +1313,8 @@ yyparse ()
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
   yystacksize = YYINITDEPTH;
 
   YYDPRINTF ((stderr, "Starting parse\n"));
@@ -1476,14 +1323,6 @@ yyparse ()
   yyerrstatus = 0;
   yynerrs = 0;
   yychar = YYEMPTY; /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-  yyssp = yyss;
-  yyvsp = yyvs;
-
   goto yysetstate;
 
 /*------------------------------------------------------------.
@@ -1504,23 +1343,23 @@ yyparse ()
 
 #ifdef yyoverflow
       {
-	/* Give user a chance to xreallocate the stack.  Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
-
-	/* Each stack pointer address is followed by the size of the
-	   data in use in that stack, in bytes.  This used to be a
-	   conditional around just the two extra args, but that might
-	   be undefined if yyoverflow is a macro.  */
-	yyoverflow (YY_("memory exhausted"),
-		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-		    &yystacksize);
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        d_exp_YYSTYPE *yyvs1 = yyvs;
+        yytype_int16 *yyss1 = yyss;
+
+        /* Each stack pointer address is followed by the size of the
+           data in use in that stack, in bytes.  This used to be a
+           conditional around just the two extra args, but that might
+           be undefined if yyoverflow is a macro.  */
+        yyoverflow (YY_("memory exhausted"),
+                    &yyss1, yysize * sizeof (*yyssp),
+                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yystacksize);
 
-	yyss = yyss1;
-	yyvs = yyvs1;
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
@@ -1528,22 +1367,22 @@ yyparse ()
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
+        goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-	yystacksize = YYMAXDEPTH;
+        yystacksize = YYMAXDEPTH;
 
       {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss_alloc, yyss);
-	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+        yytype_int16 *yyss1 = yyss;
+        union d_exp_yyalloc *yyptr =
+          (union d_exp_yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+        if (! yyptr)
+          goto yyexhaustedlab;
+        YYSTACK_RELOCATE (yyss_alloc, yyss);
+        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
+        if (yyss1 != yyssa)
+          YYSTACK_FREE (yyss1);
       }
 # endif
 #endif /* no yyoverflow */
@@ -1552,10 +1391,10 @@ yyparse ()
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+                  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -1575,7 +1414,7 @@ yybackup:
 
   /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
   /* Not known => get a lookahead token if don't already have one.  */
@@ -1584,7 +1423,7 @@ yybackup:
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
@@ -1606,8 +1445,8 @@ yybackup:
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-	goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
@@ -1624,7 +1463,9 @@ yybackup:
   yychar = YYEMPTY;
 
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
   goto yynewstate;
 
@@ -1647,7 +1488,7 @@ yyreduce:
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
+     '$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -1661,431 +1502,396 @@ yyreduce:
   switch (yyn)
     {
         case 6:
-
-/* Line 1455 of yacc.c  */
-#line 194 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_COMMA); }
+#line 194 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<comma_operation> (); }
+#line 1509 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 8:
-
-/* Line 1455 of yacc.c  */
-#line 200 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+#line 200 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<assign_operation> (); }
+#line 1515 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 9:
-
-/* Line 1455 of yacc.c  */
-#line 202 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
-		  write_exp_elt_opcode (pstate, (yyvsp[(2) - (3)].opcode));
-		  write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); }
+#line 202 "d-exp.y" /* yacc.c:1646  */
+    {
+		  operation_up rhs = pstate->pop ();
+		  operation_up lhs = pstate->pop ();
+		  pstate->push_new<assign_modify_operation>
+		    ((yyvsp[-1].opcode), std::move (lhs), std::move (rhs));
+		}
+#line 1526 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 11:
-
-/* Line 1455 of yacc.c  */
-#line 210 "d-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_COND); }
+#line 213 "d-exp.y" /* yacc.c:1646  */
+    {
+		  operation_up last = pstate->pop ();
+		  operation_up mid = pstate->pop ();
+		  operation_up first = pstate->pop ();
+		  pstate->push_new<ternop_cond_operation>
+		    (std::move (first), std::move (mid),
+		     std::move (last));
+		}
+#line 1539 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 13:
-
-/* Line 1455 of yacc.c  */
-#line 216 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 226 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<logical_or_operation> (); }
+#line 1545 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 15:
-
-/* Line 1455 of yacc.c  */
-#line 222 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 232 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<logical_and_operation> (); }
+#line 1551 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 17:
-
-/* Line 1455 of yacc.c  */
-#line 228 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 238 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<bitwise_ior_operation> (); }
+#line 1557 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 19:
-
-/* Line 1455 of yacc.c  */
-#line 234 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 244 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<bitwise_xor_operation> (); }
+#line 1563 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 21:
-
-/* Line 1455 of yacc.c  */
-#line 240 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 250 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<bitwise_and_operation> (); }
+#line 1569 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 26:
-
-/* Line 1455 of yacc.c  */
-#line 252 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 262 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<equal_operation> (); }
+#line 1575 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 27:
-
-/* Line 1455 of yacc.c  */
-#line 254 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 264 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<notequal_operation> (); }
+#line 1581 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 28:
-
-/* Line 1455 of yacc.c  */
-#line 259 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 269 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<equal_operation> (); }
+#line 1587 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
-#line 261 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 271 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<notequal_operation> (); }
+#line 1593 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
-#line 266 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LESS); }
+#line 276 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<less_operation> (); }
+#line 1599 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 31:
-
-/* Line 1455 of yacc.c  */
-#line 268 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LEQ); }
+#line 278 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<leq_operation> (); }
+#line 1605 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 32:
-
-/* Line 1455 of yacc.c  */
-#line 270 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GTR); }
+#line 280 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<gtr_operation> (); }
+#line 1611 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 33:
-
-/* Line 1455 of yacc.c  */
-#line 272 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GEQ); }
+#line 282 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<geq_operation> (); }
+#line 1617 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 35:
-
-/* Line 1455 of yacc.c  */
-#line 278 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LSH); }
+#line 288 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<lsh_operation> (); }
+#line 1623 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
-#line 280 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_RSH); }
+#line 290 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<rsh_operation> (); }
+#line 1629 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
-#line 286 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ADD); }
+#line 296 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<add_operation> (); }
+#line 1635 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 39:
-
-/* Line 1455 of yacc.c  */
-#line 288 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUB); }
+#line 298 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<sub_operation> (); }
+#line 1641 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
-#line 290 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_CONCAT); }
+#line 300 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<concat_operation> (); }
+#line 1647 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
-#line 296 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MUL); }
+#line 306 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<mul_operation> (); }
+#line 1653 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 43:
-
-/* Line 1455 of yacc.c  */
-#line 298 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_DIV); }
+#line 308 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<div_operation> (); }
+#line 1659 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 44:
-
-/* Line 1455 of yacc.c  */
-#line 300 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REM); }
+#line 310 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<rem_operation> (); }
+#line 1665 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 45:
-
-/* Line 1455 of yacc.c  */
-#line 304 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
+#line 314 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unop_addr_operation> (); }
+#line 1671 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 46:
-
-/* Line 1455 of yacc.c  */
-#line 306 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
+#line 316 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<preinc_operation> (); }
+#line 1677 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 47:
-
-/* Line 1455 of yacc.c  */
-#line 308 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
+#line 318 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<predec_operation> (); }
+#line 1683 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 48:
-
-/* Line 1455 of yacc.c  */
-#line 310 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
+#line 320 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unop_ind_operation> (); }
+#line 1689 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 49:
-
-/* Line 1455 of yacc.c  */
-#line 312 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_NEG); }
+#line 322 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unary_neg_operation> (); }
+#line 1695 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 50:
-
-/* Line 1455 of yacc.c  */
-#line 314 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PLUS); }
+#line 324 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unary_plus_operation> (); }
+#line 1701 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 51:
-
-/* Line 1455 of yacc.c  */
-#line 316 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+#line 326 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unary_logical_not_operation> (); }
+#line 1707 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 52:
-
-/* Line 1455 of yacc.c  */
-#line 318 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+#line 328 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unary_complement_operation> (); }
+#line 1713 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 53:
-
-/* Line 1455 of yacc.c  */
-#line 320 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+#line 330 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unop_sizeof_operation> (); }
+#line 1719 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 56:
-
-/* Line 1455 of yacc.c  */
-#line 327 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+#line 337 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<unop_cast_type_operation> (); }
+#line 1725 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 57:
-
-/* Line 1455 of yacc.c  */
-#line 331 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+#line 341 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<unop_cast_type_operation> (); }
+#line 1731 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 59:
-
-/* Line 1455 of yacc.c  */
-#line 338 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EXP); }
+#line 347 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap2<exp_operation> (); }
+#line 1737 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 61:
-
-/* Line 1455 of yacc.c  */
-#line 344 "d-exp.y"
-    { struct stoken s;
-		  pstate->mark_struct_expression ();
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-		  s.ptr = "";
-		  s.length = 0;
-		  write_exp_string (pstate, s);
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 353 "d-exp.y" /* yacc.c:1646  */
+    {
+		  structop_base_operation *op
+		    = new structop_ptr_operation (pstate->pop (), "");
+		  pstate->mark_struct_expression (op);
+		  pstate->push (operation_up (op));
+		}
+#line 1748 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 62:
-
-/* Line 1455 of yacc.c  */
-#line 352 "d-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-		  write_exp_string (pstate, (yyvsp[(3) - (3)].sval));
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 360 "d-exp.y" /* yacc.c:1646  */
+    {
+		  pstate->push_new<structop_operation>
+		    (pstate->pop (), copy_name ((yyvsp[0].sval)));
+		}
+#line 1757 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 63:
-
-/* Line 1455 of yacc.c  */
-#line 356 "d-exp.y"
-    { pstate->mark_struct_expression ();
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-		  write_exp_string (pstate, (yyvsp[(3) - (4)].sval));
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 365 "d-exp.y" /* yacc.c:1646  */
+    {
+		  structop_base_operation *op
+		    = new structop_operation (pstate->pop (), copy_name ((yyvsp[-1].sval)));
+		  pstate->mark_struct_expression (op);
+		  pstate->push (operation_up (op));
+		}
+#line 1768 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 64:
-
-/* Line 1455 of yacc.c  */
-#line 361 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+#line 372 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<unop_sizeof_operation> (); }
+#line 1774 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 65:
-
-/* Line 1455 of yacc.c  */
-#line 363 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
+#line 374 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<postinc_operation> (); }
+#line 1780 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 66:
-
-/* Line 1455 of yacc.c  */
-#line 365 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
+#line 376 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<postdec_operation> (); }
+#line 1786 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 70:
-
-/* Line 1455 of yacc.c  */
-#line 373 "d-exp.y"
+#line 384 "d-exp.y" /* yacc.c:1646  */
     { pstate->arglist_len = 1; }
+#line 1792 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 71:
-
-/* Line 1455 of yacc.c  */
-#line 375 "d-exp.y"
+#line 386 "d-exp.y" /* yacc.c:1646  */
     { pstate->arglist_len++; }
+#line 1798 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 72:
-
-/* Line 1455 of yacc.c  */
-#line 380 "d-exp.y"
+#line 391 "d-exp.y" /* yacc.c:1646  */
     { pstate->arglist_len = 0; }
+#line 1804 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 74:
-
-/* Line 1455 of yacc.c  */
-#line 386 "d-exp.y"
+#line 397 "d-exp.y" /* yacc.c:1646  */
     { pstate->start_arglist (); }
+#line 1810 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 75:
-
-/* Line 1455 of yacc.c  */
-#line 388 "d-exp.y"
-    { write_exp_elt_opcode (pstate, OP_FUNCALL);
-		  write_exp_elt_longcst (pstate, pstate->end_arglist ());
-		  write_exp_elt_opcode (pstate, OP_FUNCALL); }
+#line 399 "d-exp.y" /* yacc.c:1646  */
+    {
+		  std::vector<operation_up> args
+		    = pstate->pop_vector (pstate->end_arglist ());
+		  pstate->push_new<funcall_operation>
+		    (pstate->pop (), std::move (args));
+		}
+#line 1821 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 76:
-
-/* Line 1455 of yacc.c  */
-#line 395 "d-exp.y"
+#line 409 "d-exp.y" /* yacc.c:1646  */
     { if (pstate->arglist_len > 0)
 		    {
-		      write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT);
-		      write_exp_elt_longcst (pstate, pstate->arglist_len);
-		      write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT);
+		      std::vector<operation_up> args
+			= pstate->pop_vector (pstate->arglist_len);
+		      pstate->push_new<multi_subscript_operation>
+			(pstate->pop (), std::move (args));
 		    }
 		  else
-		    write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT);
+		    pstate->wrap2<subscript_operation> ();
 		}
+#line 1836 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 77:
-
-/* Line 1455 of yacc.c  */
-#line 408 "d-exp.y"
+#line 423 "d-exp.y" /* yacc.c:1646  */
     { /* Do nothing.  */ }
+#line 1842 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 78:
-
-/* Line 1455 of yacc.c  */
-#line 410 "d-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_SLICE); }
+#line 425 "d-exp.y" /* yacc.c:1646  */
+    {
+		  operation_up last = pstate->pop ();
+		  operation_up mid = pstate->pop ();
+		  operation_up first = pstate->pop ();
+		  pstate->push_new<ternop_slice_operation>
+		    (std::move (first), std::move (mid),
+		     std::move (last));
+		}
+#line 1855 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 79:
-
-/* Line 1455 of yacc.c  */
-#line 415 "d-exp.y"
+#line 437 "d-exp.y" /* yacc.c:1646  */
     { /* Do nothing.  */ }
+#line 1861 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 80:
-
-/* Line 1455 of yacc.c  */
-#line 417 "d-exp.y"
+#line 439 "d-exp.y" /* yacc.c:1646  */
     { struct bound_minimal_symbol msymbol;
-		  std::string copy = copy_name ((yyvsp[(1) - (1)].sval));
+		  std::string copy = copy_name ((yyvsp[0].sval));
 		  struct field_of_this_result is_a_field_of_this;
 		  struct block_symbol sym;
 
 		  /* Handle VAR, which could be local or global.  */
 		  sym = lookup_symbol (copy.c_str (),
 				       pstate->expression_context_block,
-				       VAR_DOMAIN, &is_a_field_of_this);
-		  if (sym.symbol && SYMBOL_CLASS (sym.symbol) != LOC_TYPEDEF)
+				       SEARCH_VFT, &is_a_field_of_this);
+		  if (sym.symbol && sym.symbol->aclass () != LOC_TYPEDEF)
 		    {
 		      if (symbol_read_needs_frame (sym.symbol))
 			pstate->block_tracker->update (sym);
-		      write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-		      write_exp_elt_block (pstate, sym.block);
-		      write_exp_elt_sym (pstate, sym.symbol);
-		      write_exp_elt_opcode (pstate, OP_VAR_VALUE);
+		      pstate->push_new<var_value_operation> (sym);
 		    }
 		  else if (is_a_field_of_this.type != NULL)
 		     {
 		      /* It hangs off of `this'.  Must not inadvertently convert from a
 			 method call to data ref.  */
 		      pstate->block_tracker->update (sym);
-		      write_exp_elt_opcode (pstate, OP_THIS);
-		      write_exp_elt_opcode (pstate, OP_THIS);
-		      write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-		      write_exp_string (pstate, (yyvsp[(1) - (1)].sval));
-		      write_exp_elt_opcode (pstate, STRUCTOP_PTR);
+		      operation_up thisop
+			= make_operation<op_this_operation> ();
+		      pstate->push_new<structop_ptr_operation>
+			(std::move (thisop), std::move (copy));
 		    }
 		  else
 		    {
 		      /* Lookup foreign name in global static symbols.  */
 		      msymbol = lookup_bound_minimal_symbol (copy.c_str ());
 		      if (msymbol.minsym != NULL)
-			write_exp_msymbol (pstate, msymbol);
+			pstate->push_new<var_msym_value_operation> (msymbol);
 		      else if (!have_full_symbols () && !have_partial_symbols ())
 			error (_("No symbol table is loaded.  Use the \"file\" command"));
 		      else
@@ -2093,183 +1899,143 @@ yyreduce:
 			       copy.c_str ());
 		    }
 		  }
+#line 1904 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 81:
-
-/* Line 1455 of yacc.c  */
-#line 460 "d-exp.y"
-    { struct type *type = check_typedef ((yyvsp[(1) - (3)].tval));
+#line 478 "d-exp.y" /* yacc.c:1646  */
+    { struct type *type = check_typedef ((yyvsp[-2].tval));
 
 			  /* Check if the qualified name is in the global
 			     context.  However if the symbol has not already
 			     been resolved, it's not likely to be found.  */
-			  if (TYPE_CODE (type) == TYPE_CODE_MODULE)
+			  if (type->code () == TYPE_CODE_MODULE)
 			    {
-			      struct bound_minimal_symbol msymbol;
 			      struct block_symbol sym;
 			      const char *type_name = TYPE_SAFE_NAME (type);
 			      int type_name_len = strlen (type_name);
 			      std::string name
 				= string_printf ("%.*s.%.*s",
 						 type_name_len, type_name,
-						 (yyvsp[(3) - (3)].sval).length, (yyvsp[(3) - (3)].sval).ptr);
+						 (yyvsp[0].sval).length, (yyvsp[0].sval).ptr);
 
 			      sym =
 				lookup_symbol (name.c_str (),
 					       (const struct block *) NULL,
-					       VAR_DOMAIN, NULL);
-			      if (sym.symbol)
-				{
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				  write_exp_elt_block (pstate, sym.block);
-				  write_exp_elt_sym (pstate, sym.symbol);
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				  break;
-				}
-
-			      msymbol = lookup_bound_minimal_symbol (name.c_str ());
-			      if (msymbol.minsym != NULL)
-				write_exp_msymbol (pstate, msymbol);
-			      else if (!have_full_symbols () && !have_partial_symbols ())
-				error (_("No symbol table is loaded.  Use the \"file\" command."));
-			      else
-				error (_("No symbol \"%s\" in current context."),
-				       name.c_str ());
+					       SEARCH_VFT, NULL);
+			      pstate->push_symbol (name.c_str (), sym);
 			    }
+			  else
+			    {
+			      /* Check if the qualified name resolves as a member
+				 of an aggregate or an enum type.  */
+			      if (!type_aggregate_p (type))
+				error (_("`%s' is not defined as an aggregate type."),
+				       TYPE_SAFE_NAME (type));
 
-			  /* Check if the qualified name resolves as a member
-			     of an aggregate or an enum type.  */
-			  if (!type_aggregate_p (type))
-			    error (_("`%s' is not defined as an aggregate type."),
-				   TYPE_SAFE_NAME (type));
-
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
-			  write_exp_elt_type (pstate, type);
-			  write_exp_string (pstate, (yyvsp[(3) - (3)].sval));
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
+			      pstate->push_new<scope_operation>
+				(type, copy_name ((yyvsp[0].sval)));
+			    }
 			}
+#line 1942 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 82:
-
-/* Line 1455 of yacc.c  */
-#line 511 "d-exp.y"
-    { write_dollar_variable (pstate, (yyvsp[(1) - (1)].sval)); }
+#line 512 "d-exp.y" /* yacc.c:1646  */
+    { pstate->push_dollar ((yyvsp[0].sval)); }
+#line 1948 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 83:
-
-/* Line 1455 of yacc.c  */
-#line 513 "d-exp.y"
-    { YYSTYPE val;
-                  parse_number (pstate, (yyvsp[(1) - (1)].sval).ptr, (yyvsp[(1) - (1)].sval).length, 0, &val);
-		  write_exp_elt_opcode (pstate, OP_LONG);
-		  write_exp_elt_type (pstate, val.typed_val_int.type);
-		  write_exp_elt_longcst (pstate,
-					 (LONGEST) val.typed_val_int.val);
-		  write_exp_elt_opcode (pstate, OP_LONG); }
+#line 514 "d-exp.y" /* yacc.c:1646  */
+    { d_exp_YYSTYPE val;
+		  parse_number (pstate, (yyvsp[0].sval).ptr, (yyvsp[0].sval).length, 0, &val);
+		  pstate->push_new<long_const_operation>
+		    (val.typed_val_int.type, val.typed_val_int.val); }
+#line 1957 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 84:
-
-/* Line 1455 of yacc.c  */
-#line 521 "d-exp.y"
+#line 519 "d-exp.y" /* yacc.c:1646  */
     { struct type *type = parse_d_type (pstate)->builtin_void;
 		  type = lookup_pointer_type (type);
-		  write_exp_elt_opcode (pstate, OP_LONG);
-		  write_exp_elt_type (pstate, type);
-		  write_exp_elt_longcst (pstate, (LONGEST) 0);
-		  write_exp_elt_opcode (pstate, OP_LONG); }
+		  pstate->push_new<long_const_operation> (type, 0); }
+#line 1965 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 85:
-
-/* Line 1455 of yacc.c  */
-#line 528 "d-exp.y"
-    { write_exp_elt_opcode (pstate, OP_BOOL);
-		  write_exp_elt_longcst (pstate, (LONGEST) 1);
-		  write_exp_elt_opcode (pstate, OP_BOOL); }
+#line 523 "d-exp.y" /* yacc.c:1646  */
+    { pstate->push_new<bool_operation> (true); }
+#line 1971 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 86:
-
-/* Line 1455 of yacc.c  */
-#line 532 "d-exp.y"
-    { write_exp_elt_opcode (pstate, OP_BOOL);
-		  write_exp_elt_longcst (pstate, (LONGEST) 0);
-		  write_exp_elt_opcode (pstate, OP_BOOL); }
+#line 525 "d-exp.y" /* yacc.c:1646  */
+    { pstate->push_new<bool_operation> (false); }
+#line 1977 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 87:
-
-/* Line 1455 of yacc.c  */
-#line 536 "d-exp.y"
-    { write_exp_elt_opcode (pstate, OP_LONG);
-		  write_exp_elt_type (pstate, (yyvsp[(1) - (1)].typed_val_int).type);
-		  write_exp_elt_longcst (pstate, (LONGEST)((yyvsp[(1) - (1)].typed_val_int).val));
-		  write_exp_elt_opcode (pstate, OP_LONG); }
+#line 527 "d-exp.y" /* yacc.c:1646  */
+    { pstate->push_new<long_const_operation> ((yyvsp[0].typed_val_int).type, (yyvsp[0].typed_val_int).val); }
+#line 1983 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 88:
-
-/* Line 1455 of yacc.c  */
-#line 541 "d-exp.y"
-    { write_exp_elt_opcode (pstate, OP_FLOAT);
-		  write_exp_elt_type (pstate, (yyvsp[(1) - (1)].typed_val_float).type);
-		  write_exp_elt_floatcst (pstate, (yyvsp[(1) - (1)].typed_val_float).val);
-		  write_exp_elt_opcode (pstate, OP_FLOAT); }
+#line 529 "d-exp.y" /* yacc.c:1646  */
+    {
+		  float_data data;
+		  std::copy (std::begin ((yyvsp[0].typed_val_float).val), std::end ((yyvsp[0].typed_val_float).val),
+			     std::begin (data));
+		  pstate->push_new<float_const_operation> ((yyvsp[0].typed_val_float).type, data);
+		}
+#line 1994 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 89:
-
-/* Line 1455 of yacc.c  */
-#line 546 "d-exp.y"
+#line 536 "d-exp.y" /* yacc.c:1646  */
     { struct stoken_vector vec;
 		  vec.len = 1;
-		  vec.tokens = &(yyvsp[(1) - (1)].tsval);
-		  write_exp_string_vector (pstate, (yyvsp[(1) - (1)].tsval).type, &vec); }
+		  vec.tokens = &(yyvsp[0].tsval);
+		  pstate->push_c_string (0, &vec); }
+#line 2003 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 90:
-
-/* Line 1455 of yacc.c  */
-#line 551 "d-exp.y"
+#line 541 "d-exp.y" /* yacc.c:1646  */
     { int i;
-		  write_exp_string_vector (pstate, 0, &(yyvsp[(1) - (1)].svec));
-		  for (i = 0; i < (yyvsp[(1) - (1)].svec).len; ++i)
-		    xfree ((yyvsp[(1) - (1)].svec).tokens[i].ptr);
-		  xfree ((yyvsp[(1) - (1)].svec).tokens); }
+		  pstate->push_c_string (0, &(yyvsp[0].svec));
+		  for (i = 0; i < (yyvsp[0].svec).len; ++i)
+		    xfree ((yyvsp[0].svec).tokens[i].ptr);
+		  xfree ((yyvsp[0].svec).tokens); }
+#line 2013 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 91:
-
-/* Line 1455 of yacc.c  */
-#line 557 "d-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ARRAY);
-		  write_exp_elt_longcst (pstate, (LONGEST) 0);
-		  write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[(1) - (1)].ival) - 1);
-		  write_exp_elt_opcode (pstate, OP_ARRAY); }
+#line 547 "d-exp.y" /* yacc.c:1646  */
+    {
+		  std::vector<operation_up> args
+		    = pstate->pop_vector ((yyvsp[0].ival));
+		  pstate->push_new<array_operation>
+		    (0, (yyvsp[0].ival) - 1, std::move (args));
+		}
+#line 2024 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 92:
-
-/* Line 1455 of yacc.c  */
-#line 562 "d-exp.y"
-    { write_exp_elt_opcode (pstate, OP_TYPEOF); }
+#line 554 "d-exp.y" /* yacc.c:1646  */
+    { pstate->wrap<typeof_operation> (); }
+#line 2030 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 93:
-
-/* Line 1455 of yacc.c  */
-#line 567 "d-exp.y"
+#line 559 "d-exp.y" /* yacc.c:1646  */
     { (yyval.ival) = pstate->arglist_len; }
+#line 2036 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 95:
-
-/* Line 1455 of yacc.c  */
-#line 576 "d-exp.y"
+#line 568 "d-exp.y" /* yacc.c:1646  */
     { /* We copy the string here, and not in the
 		     lexer, to guarantee that we do not leak a
 		     string.  Note that we follow the
@@ -2279,17 +2045,16 @@ yyreduce:
 		  (yyval.svec).len = 1;
 		  (yyval.svec).tokens = vec;
 
-		  vec->type = (yyvsp[(1) - (1)].tsval).type;
-		  vec->length = (yyvsp[(1) - (1)].tsval).length;
-		  vec->ptr = (char *) xmalloc ((yyvsp[(1) - (1)].tsval).length + 1);
-		  memcpy (vec->ptr, (yyvsp[(1) - (1)].tsval).ptr, (yyvsp[(1) - (1)].tsval).length + 1);
+		  vec->type = (yyvsp[0].tsval).type;
+		  vec->length = (yyvsp[0].tsval).length;
+		  vec->ptr = (char *) xmalloc ((yyvsp[0].tsval).length + 1);
+		  memcpy (vec->ptr, (yyvsp[0].tsval).ptr, (yyvsp[0].tsval).length + 1);
 		}
+#line 2055 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 96:
-
-/* Line 1455 of yacc.c  */
-#line 591 "d-exp.y"
+#line 583 "d-exp.y" /* yacc.c:1646  */
     { /* Note that we NUL-terminate here, but just
 		     for convenience.  */
 		  char *p;
@@ -2297,85 +2062,83 @@ yyreduce:
 		  (yyval.svec).tokens
 		    = XRESIZEVEC (struct typed_stoken, (yyval.svec).tokens, (yyval.svec).len);
 
-		  p = (char *) xmalloc ((yyvsp[(2) - (2)].tsval).length + 1);
-		  memcpy (p, (yyvsp[(2) - (2)].tsval).ptr, (yyvsp[(2) - (2)].tsval).length + 1);
+		  p = (char *) xmalloc ((yyvsp[0].tsval).length + 1);
+		  memcpy (p, (yyvsp[0].tsval).ptr, (yyvsp[0].tsval).length + 1);
 
-		  (yyval.svec).tokens[(yyval.svec).len - 1].type = (yyvsp[(2) - (2)].tsval).type;
-		  (yyval.svec).tokens[(yyval.svec).len - 1].length = (yyvsp[(2) - (2)].tsval).length;
+		  (yyval.svec).tokens[(yyval.svec).len - 1].type = (yyvsp[0].tsval).type;
+		  (yyval.svec).tokens[(yyval.svec).len - 1].length = (yyvsp[0].tsval).length;
 		  (yyval.svec).tokens[(yyval.svec).len - 1].ptr = p;
 		}
+#line 2074 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 97:
-
-/* Line 1455 of yacc.c  */
-#line 609 "d-exp.y"
+#line 601 "d-exp.y" /* yacc.c:1646  */
     { /* Do nothing.  */ }
+#line 2080 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 98:
-
-/* Line 1455 of yacc.c  */
-#line 611 "d-exp.y"
-    { write_exp_elt_opcode (pstate, OP_TYPE);
-		  write_exp_elt_type (pstate, (yyvsp[(1) - (1)].tval));
-		  write_exp_elt_opcode (pstate, OP_TYPE); }
+#line 603 "d-exp.y" /* yacc.c:1646  */
+    { pstate->push_new<type_operation> ((yyvsp[0].tval)); }
+#line 2086 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 99:
-
-/* Line 1455 of yacc.c  */
-#line 615 "d-exp.y"
-    { (yyval.tval) = type_stack->follow_types ((yyvsp[(1) - (2)].tval));
-		  write_exp_elt_opcode (pstate, OP_TYPE);
-		  write_exp_elt_type (pstate, (yyval.tval));
-		  write_exp_elt_opcode (pstate, OP_TYPE);
+#line 605 "d-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = type_stack->follow_types ((yyvsp[-1].tval));
+		  pstate->push_new<type_operation> ((yyval.tval));
 		}
+#line 2094 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 100:
-
-/* Line 1455 of yacc.c  */
-#line 624 "d-exp.y"
+#line 612 "d-exp.y" /* yacc.c:1646  */
     { type_stack->push (tp_pointer); }
+#line 2100 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 101:
-
-/* Line 1455 of yacc.c  */
-#line 626 "d-exp.y"
+#line 614 "d-exp.y" /* yacc.c:1646  */
     { type_stack->push (tp_pointer); }
+#line 2106 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 102:
-
-/* Line 1455 of yacc.c  */
-#line 628 "d-exp.y"
-    { type_stack->push ((yyvsp[(2) - (3)].typed_val_int).val);
+#line 616 "d-exp.y" /* yacc.c:1646  */
+    { type_stack->push ((yyvsp[-1].typed_val_int).val);
 		  type_stack->push (tp_array); }
+#line 2113 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 103:
-
-/* Line 1455 of yacc.c  */
-#line 631 "d-exp.y"
-    { type_stack->push ((yyvsp[(2) - (4)].typed_val_int).val);
+#line 619 "d-exp.y" /* yacc.c:1646  */
+    { type_stack->push ((yyvsp[-2].typed_val_int).val);
 		  type_stack->push (tp_array); }
+#line 2120 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
   case 104:
-
-/* Line 1455 of yacc.c  */
-#line 637 "d-exp.y"
-    { (yyval.tval) = (yyvsp[(1) - (1)].tsym).type; }
+#line 625 "d-exp.y" /* yacc.c:1646  */
+    { (yyval.tval) = (yyvsp[0].tsym).type; }
+#line 2126 "d-exp.c.tmp" /* yacc.c:1646  */
     break;
 
 
-
-/* Line 1455 of yacc.c  */
-#line 2378 "d-exp.c.tmp"
+#line 2130 "d-exp.c.tmp" /* yacc.c:1646  */
       default: break;
     }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
@@ -2384,7 +2147,7 @@ yyreduce:
 
   *++yyvsp = yyval;
 
-  /* Now `shift' the result of the reduction.  Determine what state
+  /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
 
@@ -2399,10 +2162,14 @@ yyreduce:
   goto yynewstate;
 
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error.  |
+`--------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -2410,37 +2177,36 @@ yyerrlab:
 #if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
       {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
-
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (yymsg);
-	  }
-	else
-	  {
-	    yyerror (YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
@@ -2449,20 +2215,20 @@ yyerrlab:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-	 error, discard it.  */
+         error, discard it.  */
 
       if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
       else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval);
-	  yychar = YYEMPTY;
-	}
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval);
+          yychar = YYEMPTY;
+        }
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -2481,7 +2247,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -2494,35 +2260,37 @@ yyerrorlab:
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
+      if (!yypact_value_is_default (yyn))
+        {
+          yyn += YYTERROR;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+            {
+              yyn = yytable[yyn];
+              if (0 < yyn)
+                break;
+            }
+        }
 
       /* Pop the current state because it cannot handle the error token.  */
       if (yyssp == yyss)
-	YYABORT;
+        YYABORT;
 
 
       yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp);
+                  yystos[yystate], yyvsp);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
     }
 
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
 
   /* Shift the error token.  */
@@ -2546,7 +2314,7 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+#if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2558,16 +2326,21 @@ yyexhaustedlab:
 
 yyreturn:
   if (yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval);
-  /* Do not reclaim the symbols of the rule which action triggered
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval);
+    }
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp);
+                  yystos[*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -2578,14 +2351,9 @@ yyreturn:
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
-
-
-
-/* Line 1675 of yacc.c  */
-#line 640 "d-exp.y"
+#line 628 "d-exp.y" /* yacc.c:1906  */
 
 
 /* Return true if the type is aggregate-like.  */
@@ -2593,11 +2361,11 @@ yyreturn:
 static int
 type_aggregate_p (struct type *type)
 {
-  return (TYPE_CODE (type) == TYPE_CODE_STRUCT
-	  || TYPE_CODE (type) == TYPE_CODE_UNION
-	  || TYPE_CODE (type) == TYPE_CODE_MODULE
-	  || (TYPE_CODE (type) == TYPE_CODE_ENUM
-	      && TYPE_DECLARED_CLASS (type)));
+  return (type->code () == TYPE_CODE_STRUCT
+	  || type->code () == TYPE_CODE_UNION
+	  || type->code () == TYPE_CODE_MODULE
+	  || (type->code () == TYPE_CODE_ENUM
+	      && type->is_declared_class ()));
 }
 
 /* Take care of parsing a number (anything that starts with a digit).
@@ -2608,7 +2376,7 @@ type_aggregate_p (struct type *type)
 
 static int
 parse_number (struct parser_state *ps, const char *p,
-	      int len, int parsed_float, YYSTYPE *putithere)
+	      int len, int parsed_float, d_exp_YYSTYPE *putithere)
 {
   ULONGEST n = 0;
   ULONGEST prevn = 0;
@@ -2742,7 +2510,7 @@ parse_number (struct parser_state *ps, c
 	  if (base > 10 && c >= 'a' && c <= 'f')
 	    {
 	      if (found_suffix)
-	        return ERROR;
+		return ERROR;
 	      n += i = c - 'a' + 10;
 	    }
 	  else if (c == 'l' && long_p == 0)
@@ -2897,21 +2665,21 @@ parse_string_or_char (const char *tokptr
   return quote == '\'' ? CHARACTER_LITERAL : STRING_LITERAL;
 }
 
-struct token
+struct d_token
 {
   const char *oper;
   int token;
   enum exp_opcode opcode;
 };
 
-static const struct token tokentab3[] =
+static const struct d_token tokentab3[] =
   {
     {"^^=", ASSIGN_MODIFY, BINOP_EXP},
     {"<<=", ASSIGN_MODIFY, BINOP_LSH},
     {">>=", ASSIGN_MODIFY, BINOP_RSH},
   };
 
-static const struct token tokentab2[] =
+static const struct d_token tokentab2[] =
   {
     {"+=", ASSIGN_MODIFY, BINOP_ADD},
     {"-=", ASSIGN_MODIFY, BINOP_SUB},
@@ -2921,25 +2689,25 @@ static const struct token tokentab2[] =
     {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
     {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
     {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
-    {"++", INCREMENT, BINOP_END},
-    {"--", DECREMENT, BINOP_END},
-    {"&&", ANDAND, BINOP_END},
-    {"||", OROR, BINOP_END},
-    {"^^", HATHAT, BINOP_END},
-    {"<<", LSH, BINOP_END},
-    {">>", RSH, BINOP_END},
-    {"==", EQUAL, BINOP_END},
-    {"!=", NOTEQUAL, BINOP_END},
-    {"<=", LEQ, BINOP_END},
-    {">=", GEQ, BINOP_END},
-    {"..", DOTDOT, BINOP_END},
+    {"++", INCREMENT, OP_NULL},
+    {"--", DECREMENT, OP_NULL},
+    {"&&", ANDAND, OP_NULL},
+    {"||", OROR, OP_NULL},
+    {"^^", HATHAT, OP_NULL},
+    {"<<", LSH, OP_NULL},
+    {">>", RSH, OP_NULL},
+    {"==", EQUAL, OP_NULL},
+    {"!=", NOTEQUAL, OP_NULL},
+    {"<=", LEQ, OP_NULL},
+    {">=", GEQ, OP_NULL},
+    {"..", DOTDOT, OP_NULL},
   };
 
 /* Identifier-like tokens.  */
-static const struct token ident_tokens[] =
+static const struct d_token ident_tokens[] =
   {
-    {"is", IDENTITY, BINOP_END},
-    {"!is", NOTIDENTITY, BINOP_END},
+    {"is", IDENTITY, OP_NULL},
+    {"!is", NOTIDENTITY, OP_NULL},
 
     {"cast", CAST_KEYWORD, OP_NULL},
     {"const", CONST_KEYWORD, OP_NULL},
@@ -2985,7 +2753,6 @@ lex_one_token (struct parser_state *par_
 {
   int c;
   int namelen;
-  unsigned int i;
   const char *tokstart;
   int saw_structop = last_was_structop;
 
@@ -2997,21 +2764,21 @@ lex_one_token (struct parser_state *par_
 
   tokstart = pstate->lexptr;
   /* See if it is a special token of length 3.  */
-  for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
-    if (strncmp (tokstart, tokentab3[i].oper, 3) == 0)
+  for (const auto &token : tokentab3)
+    if (strncmp (tokstart, token.oper, 3) == 0)
       {
 	pstate->lexptr += 3;
-	yylval.opcode = tokentab3[i].opcode;
-	return tokentab3[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   /* See if it is a special token of length 2.  */
-  for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
-    if (strncmp (tokstart, tokentab2[i].oper, 2) == 0)
+  for (const auto &token : tokentab2)
+    if (strncmp (tokstart, token.oper, 2) == 0)
       {
 	pstate->lexptr += 2;
-	yylval.opcode = tokentab2[i].opcode;
-	return tokentab2[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   switch (c = *tokstart)
@@ -3029,7 +2796,7 @@ lex_one_token (struct parser_state *par_
       else if (saw_structop)
 	return COMPLETE;
       else
-        return 0;
+	return 0;
 
     case ' ':
     case '\t':
@@ -3065,7 +2832,7 @@ lex_one_token (struct parser_state *par_
 	    last_was_structop = 1;
 	  goto symbol;		/* Nope, must be a symbol.  */
 	}
-      /* FALL THRU.  */
+      [[fallthrough]];
 
     case '0':
     case '1':
@@ -3142,7 +2909,7 @@ lex_one_token (struct parser_state *par_
 	    return ENTRY;
 	  }
       }
-      /* FALLTHRU */
+      [[fallthrough]];
     case '+':
     case '-':
     case '*':
@@ -3218,9 +2985,9 @@ lex_one_token (struct parser_state *par_
       const char *p = tokstart + namelen + 1;
 
       while (*p == ' ' || *p == '\t')
-        p++;
+	p++;
       if (*p >= '0' && *p <= '9')
-        return 0;
+	return 0;
     }
 
   pstate->lexptr += namelen;
@@ -3232,13 +2999,13 @@ lex_one_token (struct parser_state *par_
 
   /* Catch specific keywords.  */
   std::string copy = copy_name (yylval.sval);
-  for (i = 0; i < sizeof ident_tokens / sizeof ident_tokens[0]; i++)
-    if (copy == ident_tokens[i].oper)
+  for (const auto &token : ident_tokens)
+    if (copy == token.oper)
       {
 	/* It is ok to always set this, even though we don't always
 	   strictly need to.  */
-	yylval.opcode = ident_tokens[i].opcode;
-	return ident_tokens[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   if (*tokstart == '$')
@@ -3256,7 +3023,7 @@ lex_one_token (struct parser_state *par_
   if ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10)
       || (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10))
     {
-      YYSTYPE newlval;	/* Its value is ignored.  */
+      d_exp_YYSTYPE newlval;	/* Its value is ignored.  */
       int hextype = parse_number (par_state, tokstart, namelen, 0, &newlval);
       if (hextype == INTEGER_LITERAL)
 	return NAME_OR_INT;
@@ -3269,16 +3036,16 @@ lex_one_token (struct parser_state *par_
 }
 
 /* An object of this type is pushed on a FIFO by the "outer" lexer.  */
-struct token_and_value
+struct d_token_and_value
 {
   int token;
-  YYSTYPE value;
+  d_exp_YYSTYPE value;
 };
 
 
 /* A FIFO of tokens that have been read but not yet returned to the
    parser.  */
-static std::vector<token_and_value> token_fifo;
+static std::vector<d_token_and_value> token_fifo;
 
 /* Non-zero if the lexer should return tokens from the FIFO.  */
 static int popping;
@@ -3299,22 +3066,24 @@ classify_name (struct parser_state *par_
 
   std::string copy = copy_name (yylval.sval);
 
-  sym = lookup_symbol (copy.c_str (), block, VAR_DOMAIN, &is_a_field_of_this);
-  if (sym.symbol && SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF)
+  sym = lookup_symbol (copy.c_str (), block, SEARCH_VFT, &is_a_field_of_this);
+  if (sym.symbol && sym.symbol->aclass () == LOC_TYPEDEF)
     {
-      yylval.tsym.type = SYMBOL_TYPE (sym.symbol);
+      yylval.tsym.type = sym.symbol->type ();
       return TYPENAME;
     }
   else if (sym.symbol == NULL)
     {
       /* Look-up first for a module name, then a type.  */
-      sym = lookup_symbol (copy.c_str (), block, MODULE_DOMAIN, NULL);
+      sym = lookup_symbol (copy.c_str (), block, SEARCH_MODULE_DOMAIN,
+			   nullptr);
       if (sym.symbol == NULL)
-	sym = lookup_symbol (copy.c_str (), block, STRUCT_DOMAIN, NULL);
+	sym = lookup_symbol (copy.c_str (), block, SEARCH_STRUCT_DOMAIN,
+			     nullptr);
 
       if (sym.symbol != NULL)
 	{
-	  yylval.tsym.type = SYMBOL_TYPE (sym.symbol);
+	  yylval.tsym.type = sym.symbol->type ();
 	  return TYPENAME;
 	}
 
@@ -3347,9 +3116,9 @@ classify_inner_name (struct parser_state
   if (yylval.ssym.sym.symbol == NULL)
     return ERROR;
 
-  if (SYMBOL_CLASS (yylval.ssym.sym.symbol) == LOC_TYPEDEF)
+  if (yylval.ssym.sym.symbol->aclass () == LOC_TYPEDEF)
     {
-      yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym.symbol);
+      yylval.tsym.type = yylval.ssym.sym.symbol->type ();
       return TYPENAME;
     }
 
@@ -3366,7 +3135,7 @@ classify_inner_name (struct parser_state
 static int
 yylex (void)
 {
-  token_and_value current;
+  d_token_and_value current;
   int last_was_dot;
   struct type *context_type = NULL;
   int last_to_examine, next_to_examine, checkpoint;
@@ -3429,7 +3198,7 @@ yylex (void)
 
       while (next_to_examine <= last_to_examine)
 	{
-	  token_and_value next;
+	  d_token_and_value next;
 
 	  next = token_fifo[next_to_examine];
 	  ++next_to_examine;
@@ -3437,7 +3206,7 @@ yylex (void)
 	  if (next.token == IDENTIFIER && last_was_dot)
 	    {
 	      /* Update the partial name we are constructing.  */
-              obstack_grow_str (&name_obstack, ".");
+	      obstack_grow_str (&name_obstack, ".");
 	      obstack_grow (&name_obstack, next.value.sval.ptr,
 			    next.value.sval.length);
 
@@ -3493,7 +3262,7 @@ yylex (void)
 
   while (next_to_examine <= last_to_examine)
     {
-      token_and_value next;
+      d_token_and_value next;
 
       next = token_fifo[next_to_examine];
       ++next_to_examine;
@@ -3517,7 +3286,7 @@ yylex (void)
 	  if (context_type != NULL)
 	    {
 	      /* We don't want to put a leading "." into the name.  */
-              obstack_grow_str (&name_obstack, ".");
+	      obstack_grow_str (&name_obstack, ".");
 	    }
 	  obstack_grow (&name_obstack, next.value.sval.ptr,
 			next.value.sval.length);
@@ -3569,7 +3338,7 @@ d_parse (struct parser_state *par_state)
   pstate = par_state;
 
   scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
-							parser_debug);
+							par_state->debug);
 
   struct type_stack stack;
   scoped_restore restore_type_stack = make_scoped_restore (&type_stack,
@@ -3584,16 +3353,15 @@ d_parse (struct parser_state *par_state)
   popping = 0;
   name_obstack.clear ();
 
-  return yyparse ();
+  int result = yyparse ();
+  if (!result)
+    pstate->set_operation (pstate->pop ());
+  return result;
 }
 
 static void
 yyerror (const char *msg)
 {
-  if (pstate->prev_lexptr)
-    pstate->lexptr = pstate->prev_lexptr;
-
-  error (_("A %s in expression, near `%s'."), msg, pstate->lexptr);
+  pstate->parse_error (msg);
 }
 
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-exp.y ./gdb/d-exp.y
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-exp.y	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/d-exp.y	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* YACC parser for D expressions, for GDB.
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -46,12 +46,10 @@
 #include "language.h"
 #include "c-lang.h"
 #include "d-lang.h"
-#include "bfd.h" /* Required by objfiles.h.  */
-#include "symfile.h" /* Required by objfiles.h.  */
-#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
 #include "charset.h"
 #include "block.h"
 #include "type-stack.h"
+#include "expop.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 #define parse_d_type(ps) builtin_d_type (ps->gdbarch ())
@@ -77,6 +75,8 @@ static void yyerror (const char *);
 
 static int type_aggregate_p (struct type *);
 
+using namespace expr;
+
 %}
 
 /* Although the yacc "value" of an expression is not used,
@@ -191,53 +191,63 @@ Expression:
 CommaExpression:
 	AssignExpression
 |	AssignExpression ',' CommaExpression
-		{ write_exp_elt_opcode (pstate, BINOP_COMMA); }
+		{ pstate->wrap2<comma_operation> (); }
 ;
 
 AssignExpression:
 	ConditionalExpression
 |	ConditionalExpression '=' AssignExpression
-		{ write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+		{ pstate->wrap2<assign_operation> (); }
 |	ConditionalExpression ASSIGN_MODIFY AssignExpression
-		{ write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
-		  write_exp_elt_opcode (pstate, $2);
-		  write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); }
+		{
+		  operation_up rhs = pstate->pop ();
+		  operation_up lhs = pstate->pop ();
+		  pstate->push_new<assign_modify_operation>
+		    ($2, std::move (lhs), std::move (rhs));
+		}
 ;
 
 ConditionalExpression:
 	OrOrExpression
 |	OrOrExpression '?' Expression ':' ConditionalExpression
-		{ write_exp_elt_opcode (pstate, TERNOP_COND); }
+		{
+		  operation_up last = pstate->pop ();
+		  operation_up mid = pstate->pop ();
+		  operation_up first = pstate->pop ();
+		  pstate->push_new<ternop_cond_operation>
+		    (std::move (first), std::move (mid),
+		     std::move (last));
+		}
 ;
 
 OrOrExpression:
 	AndAndExpression
 |	OrOrExpression OROR AndAndExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+		{ pstate->wrap2<logical_or_operation> (); }
 ;
 
 AndAndExpression:
 	OrExpression
 |	AndAndExpression ANDAND OrExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+		{ pstate->wrap2<logical_and_operation> (); }
 ;
 
 OrExpression:
 	XorExpression
 |	OrExpression '|' XorExpression
-		{ write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+		{ pstate->wrap2<bitwise_ior_operation> (); }
 ;
 
 XorExpression:
 	AndExpression
 |	XorExpression '^' AndExpression
-		{ write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+		{ pstate->wrap2<bitwise_xor_operation> (); }
 ;
 
 AndExpression:
 	CmpExpression
 |	AndExpression '&' CmpExpression
-		{ write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+		{ pstate->wrap2<bitwise_and_operation> (); }
 ;
 
 CmpExpression:
@@ -249,120 +259,121 @@ CmpExpression:
 
 EqualExpression:
 	ShiftExpression EQUAL ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+		{ pstate->wrap2<equal_operation> (); }
 |	ShiftExpression NOTEQUAL ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+		{ pstate->wrap2<notequal_operation> (); }
 ;
 
 IdentityExpression:
 	ShiftExpression IDENTITY ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+		{ pstate->wrap2<equal_operation> (); }
 |	ShiftExpression NOTIDENTITY ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+		{ pstate->wrap2<notequal_operation> (); }
 ;
 
 RelExpression:
 	ShiftExpression '<' ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LESS); }
+		{ pstate->wrap2<less_operation> (); }
 |	ShiftExpression LEQ ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LEQ); }
+		{ pstate->wrap2<leq_operation> (); }
 |	ShiftExpression '>' ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_GTR); }
+		{ pstate->wrap2<gtr_operation> (); }
 |	ShiftExpression GEQ ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_GEQ); }
+		{ pstate->wrap2<geq_operation> (); }
 ;
 
 ShiftExpression:
 	AddExpression
 |	ShiftExpression LSH AddExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LSH); }
+		{ pstate->wrap2<lsh_operation> (); }
 |	ShiftExpression RSH AddExpression
-		{ write_exp_elt_opcode (pstate, BINOP_RSH); }
+		{ pstate->wrap2<rsh_operation> (); }
 ;
 
 AddExpression:
 	MulExpression
 |	AddExpression '+' MulExpression
-		{ write_exp_elt_opcode (pstate, BINOP_ADD); }
+		{ pstate->wrap2<add_operation> (); }
 |	AddExpression '-' MulExpression
-		{ write_exp_elt_opcode (pstate, BINOP_SUB); }
+		{ pstate->wrap2<sub_operation> (); }
 |	AddExpression '~' MulExpression
-		{ write_exp_elt_opcode (pstate, BINOP_CONCAT); }
+		{ pstate->wrap2<concat_operation> (); }
 ;
 
 MulExpression:
 	UnaryExpression
 |	MulExpression '*' UnaryExpression
-		{ write_exp_elt_opcode (pstate, BINOP_MUL); }
+		{ pstate->wrap2<mul_operation> (); }
 |	MulExpression '/' UnaryExpression
-		{ write_exp_elt_opcode (pstate, BINOP_DIV); }
+		{ pstate->wrap2<div_operation> (); }
 |	MulExpression '%' UnaryExpression
-		{ write_exp_elt_opcode (pstate, BINOP_REM); }
+		{ pstate->wrap2<rem_operation> (); }
 
 UnaryExpression:
 	'&' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_ADDR); }
+		{ pstate->wrap<unop_addr_operation> (); }
 |	INCREMENT UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
+		{ pstate->wrap<preinc_operation> (); }
 |	DECREMENT UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
+		{ pstate->wrap<predec_operation> (); }
 |	'*' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_IND); }
+		{ pstate->wrap<unop_ind_operation> (); }
 |	'-' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_NEG); }
+		{ pstate->wrap<unary_neg_operation> (); }
 |	'+' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_PLUS); }
+		{ pstate->wrap<unary_plus_operation> (); }
 |	'!' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+		{ pstate->wrap<unary_logical_not_operation> (); }
 |	'~' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+		{ pstate->wrap<unary_complement_operation> (); }
 |	TypeExp '.' SIZEOF_KEYWORD
-		{ write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+		{ pstate->wrap<unop_sizeof_operation> (); }
 |	CastExpression
 |	PowExpression
 ;
 
 CastExpression:
 	CAST_KEYWORD '(' TypeExp ')' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+		{ pstate->wrap2<unop_cast_type_operation> (); }
 	/* C style cast is illegal D, but is still recognised in
 	   the grammar, so we keep this around for convenience.  */
 |	'(' TypeExp ')' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
-
+		{ pstate->wrap2<unop_cast_type_operation> (); }
 ;
 
 PowExpression:
 	PostfixExpression
 |	PostfixExpression HATHAT UnaryExpression
-		{ write_exp_elt_opcode (pstate, BINOP_EXP); }
+		{ pstate->wrap2<exp_operation> (); }
 ;
 
 PostfixExpression:
 	PrimaryExpression
 |	PostfixExpression '.' COMPLETE
-		{ struct stoken s;
-		  pstate->mark_struct_expression ();
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-		  s.ptr = "";
-		  s.length = 0;
-		  write_exp_string (pstate, s);
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+		{
+		  structop_base_operation *op
+		    = new structop_ptr_operation (pstate->pop (), "");
+		  pstate->mark_struct_expression (op);
+		  pstate->push (operation_up (op));
+		}
 |	PostfixExpression '.' IDENTIFIER
-		{ write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-		  write_exp_string (pstate, $3);
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+		{
+		  pstate->push_new<structop_operation>
+		    (pstate->pop (), copy_name ($3));
+		}
 |	PostfixExpression '.' IDENTIFIER COMPLETE
-		{ pstate->mark_struct_expression ();
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-		  write_exp_string (pstate, $3);
-		  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+		{
+		  structop_base_operation *op
+		    = new structop_operation (pstate->pop (), copy_name ($3));
+		  pstate->mark_struct_expression (op);
+		  pstate->push (operation_up (op));
+		}
 |	PostfixExpression '.' SIZEOF_KEYWORD
-		{ write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+		{ pstate->wrap<unop_sizeof_operation> (); }
 |	PostfixExpression INCREMENT
-		{ write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
+		{ pstate->wrap<postinc_operation> (); }
 |	PostfixExpression DECREMENT
-		{ write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
+		{ pstate->wrap<postdec_operation> (); }
 |	CallExpression
 |	IndexExpression
 |	SliceExpression
@@ -385,21 +396,25 @@ CallExpression:
 	PostfixExpression '('
 		{ pstate->start_arglist (); }
 	ArgumentList_opt ')'
-		{ write_exp_elt_opcode (pstate, OP_FUNCALL);
-		  write_exp_elt_longcst (pstate, pstate->end_arglist ());
-		  write_exp_elt_opcode (pstate, OP_FUNCALL); }
+		{
+		  std::vector<operation_up> args
+		    = pstate->pop_vector (pstate->end_arglist ());
+		  pstate->push_new<funcall_operation>
+		    (pstate->pop (), std::move (args));
+		}
 ;
 
 IndexExpression:
 	PostfixExpression '[' ArgumentList ']'
 		{ if (pstate->arglist_len > 0)
 		    {
-		      write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT);
-		      write_exp_elt_longcst (pstate, pstate->arglist_len);
-		      write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT);
+		      std::vector<operation_up> args
+			= pstate->pop_vector (pstate->arglist_len);
+		      pstate->push_new<multi_subscript_operation>
+			(pstate->pop (), std::move (args));
 		    }
 		  else
-		    write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT);
+		    pstate->wrap2<subscript_operation> ();
 		}
 ;
 
@@ -407,7 +422,14 @@ SliceExpression:
 	PostfixExpression '[' ']'
 		{ /* Do nothing.  */ }
 |	PostfixExpression '[' AssignExpression DOTDOT AssignExpression ']'
-		{ write_exp_elt_opcode (pstate, TERNOP_SLICE); }
+		{
+		  operation_up last = pstate->pop ();
+		  operation_up mid = pstate->pop ();
+		  operation_up first = pstate->pop ();
+		  pstate->push_new<ternop_slice_operation>
+		    (std::move (first), std::move (mid),
+		     std::move (last));
+		}
 ;
 
 PrimaryExpression:
@@ -422,33 +444,29 @@ PrimaryExpression:
 		  /* Handle VAR, which could be local or global.  */
 		  sym = lookup_symbol (copy.c_str (),
 				       pstate->expression_context_block,
-				       VAR_DOMAIN, &is_a_field_of_this);
-		  if (sym.symbol && SYMBOL_CLASS (sym.symbol) != LOC_TYPEDEF)
+				       SEARCH_VFT, &is_a_field_of_this);
+		  if (sym.symbol && sym.symbol->aclass () != LOC_TYPEDEF)
 		    {
 		      if (symbol_read_needs_frame (sym.symbol))
 			pstate->block_tracker->update (sym);
-		      write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-		      write_exp_elt_block (pstate, sym.block);
-		      write_exp_elt_sym (pstate, sym.symbol);
-		      write_exp_elt_opcode (pstate, OP_VAR_VALUE);
+		      pstate->push_new<var_value_operation> (sym);
 		    }
 		  else if (is_a_field_of_this.type != NULL)
 		     {
 		      /* It hangs off of `this'.  Must not inadvertently convert from a
 			 method call to data ref.  */
 		      pstate->block_tracker->update (sym);
-		      write_exp_elt_opcode (pstate, OP_THIS);
-		      write_exp_elt_opcode (pstate, OP_THIS);
-		      write_exp_elt_opcode (pstate, STRUCTOP_PTR);
-		      write_exp_string (pstate, $1);
-		      write_exp_elt_opcode (pstate, STRUCTOP_PTR);
+		      operation_up thisop
+			= make_operation<op_this_operation> ();
+		      pstate->push_new<structop_ptr_operation>
+			(std::move (thisop), std::move (copy));
 		    }
 		  else
 		    {
 		      /* Lookup foreign name in global static symbols.  */
 		      msymbol = lookup_bound_minimal_symbol (copy.c_str ());
 		      if (msymbol.minsym != NULL)
-			write_exp_msymbol (pstate, msymbol);
+			pstate->push_new<var_msym_value_operation> (msymbol);
 		      else if (!have_full_symbols () && !have_partial_symbols ())
 			error (_("No symbol table is loaded.  Use the \"file\" command"));
 		      else
@@ -462,9 +480,8 @@ PrimaryExpression:
 			  /* Check if the qualified name is in the global
 			     context.  However if the symbol has not already
 			     been resolved, it's not likely to be found.  */
-			  if (TYPE_CODE (type) == TYPE_CODE_MODULE)
+			  if (type->code () == TYPE_CODE_MODULE)
 			    {
-			      struct bound_minimal_symbol msymbol;
 			      struct block_symbol sym;
 			      const char *type_name = TYPE_SAFE_NAME (type);
 			      int type_name_len = strlen (type_name);
@@ -476,90 +493,65 @@ PrimaryExpression:
 			      sym =
 				lookup_symbol (name.c_str (),
 					       (const struct block *) NULL,
-					       VAR_DOMAIN, NULL);
-			      if (sym.symbol)
-				{
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				  write_exp_elt_block (pstate, sym.block);
-				  write_exp_elt_sym (pstate, sym.symbol);
-				  write_exp_elt_opcode (pstate, OP_VAR_VALUE);
-				  break;
-				}
-
-			      msymbol = lookup_bound_minimal_symbol (name.c_str ());
-			      if (msymbol.minsym != NULL)
-				write_exp_msymbol (pstate, msymbol);
-			      else if (!have_full_symbols () && !have_partial_symbols ())
-				error (_("No symbol table is loaded.  Use the \"file\" command."));
-			      else
-				error (_("No symbol \"%s\" in current context."),
-				       name.c_str ());
+					       SEARCH_VFT, NULL);
+			      pstate->push_symbol (name.c_str (), sym);
 			    }
+			  else
+			    {
+			      /* Check if the qualified name resolves as a member
+				 of an aggregate or an enum type.  */
+			      if (!type_aggregate_p (type))
+				error (_("`%s' is not defined as an aggregate type."),
+				       TYPE_SAFE_NAME (type));
 
-			  /* Check if the qualified name resolves as a member
-			     of an aggregate or an enum type.  */
-			  if (!type_aggregate_p (type))
-			    error (_("`%s' is not defined as an aggregate type."),
-				   TYPE_SAFE_NAME (type));
-
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
-			  write_exp_elt_type (pstate, type);
-			  write_exp_string (pstate, $3);
-			  write_exp_elt_opcode (pstate, OP_SCOPE);
+			      pstate->push_new<scope_operation>
+				(type, copy_name ($3));
+			    }
 			}
 |	DOLLAR_VARIABLE
-		{ write_dollar_variable (pstate, $1); }
+		{ pstate->push_dollar ($1); }
 |	NAME_OR_INT
 		{ YYSTYPE val;
-                  parse_number (pstate, $1.ptr, $1.length, 0, &val);
-		  write_exp_elt_opcode (pstate, OP_LONG);
-		  write_exp_elt_type (pstate, val.typed_val_int.type);
-		  write_exp_elt_longcst (pstate,
-					 (LONGEST) val.typed_val_int.val);
-		  write_exp_elt_opcode (pstate, OP_LONG); }
+		  parse_number (pstate, $1.ptr, $1.length, 0, &val);
+		  pstate->push_new<long_const_operation>
+		    (val.typed_val_int.type, val.typed_val_int.val); }
 |	NULL_KEYWORD
 		{ struct type *type = parse_d_type (pstate)->builtin_void;
 		  type = lookup_pointer_type (type);
-		  write_exp_elt_opcode (pstate, OP_LONG);
-		  write_exp_elt_type (pstate, type);
-		  write_exp_elt_longcst (pstate, (LONGEST) 0);
-		  write_exp_elt_opcode (pstate, OP_LONG); }
+		  pstate->push_new<long_const_operation> (type, 0); }
 |	TRUE_KEYWORD
-		{ write_exp_elt_opcode (pstate, OP_BOOL);
-		  write_exp_elt_longcst (pstate, (LONGEST) 1);
-		  write_exp_elt_opcode (pstate, OP_BOOL); }
+		{ pstate->push_new<bool_operation> (true); }
 |	FALSE_KEYWORD
-		{ write_exp_elt_opcode (pstate, OP_BOOL);
-		  write_exp_elt_longcst (pstate, (LONGEST) 0);
-		  write_exp_elt_opcode (pstate, OP_BOOL); }
+		{ pstate->push_new<bool_operation> (false); }
 |	INTEGER_LITERAL
-		{ write_exp_elt_opcode (pstate, OP_LONG);
-		  write_exp_elt_type (pstate, $1.type);
-		  write_exp_elt_longcst (pstate, (LONGEST)($1.val));
-		  write_exp_elt_opcode (pstate, OP_LONG); }
+		{ pstate->push_new<long_const_operation> ($1.type, $1.val); }
 |	FLOAT_LITERAL
-		{ write_exp_elt_opcode (pstate, OP_FLOAT);
-		  write_exp_elt_type (pstate, $1.type);
-		  write_exp_elt_floatcst (pstate, $1.val);
-		  write_exp_elt_opcode (pstate, OP_FLOAT); }
+		{
+		  float_data data;
+		  std::copy (std::begin ($1.val), std::end ($1.val),
+			     std::begin (data));
+		  pstate->push_new<float_const_operation> ($1.type, data);
+		}
 |	CHARACTER_LITERAL
 		{ struct stoken_vector vec;
 		  vec.len = 1;
 		  vec.tokens = &$1;
-		  write_exp_string_vector (pstate, $1.type, &vec); }
+		  pstate->push_c_string (0, &vec); }
 |	StringExp
 		{ int i;
-		  write_exp_string_vector (pstate, 0, &$1);
+		  pstate->push_c_string (0, &$1);
 		  for (i = 0; i < $1.len; ++i)
 		    free ($1.tokens[i].ptr);
 		  free ($1.tokens); }
 |	ArrayLiteral
-		{ write_exp_elt_opcode (pstate, OP_ARRAY);
-		  write_exp_elt_longcst (pstate, (LONGEST) 0);
-		  write_exp_elt_longcst (pstate, (LONGEST) $1 - 1);
-		  write_exp_elt_opcode (pstate, OP_ARRAY); }
+		{
+		  std::vector<operation_up> args
+		    = pstate->pop_vector ($1);
+		  pstate->push_new<array_operation>
+		    (0, $1 - 1, std::move (args));
+		}
 |	TYPEOF_KEYWORD '(' Expression ')'
-		{ write_exp_elt_opcode (pstate, OP_TYPEOF); }
+		{ pstate->wrap<typeof_operation> (); }
 ;
 
 ArrayLiteral:
@@ -608,14 +600,10 @@ TypeExp:
 	'(' TypeExp ')'
 		{ /* Do nothing.  */ }
 |	BasicType
-		{ write_exp_elt_opcode (pstate, OP_TYPE);
-		  write_exp_elt_type (pstate, $1);
-		  write_exp_elt_opcode (pstate, OP_TYPE); }
+		{ pstate->push_new<type_operation> ($1); }
 |	BasicType BasicType2
 		{ $$ = type_stack->follow_types ($1);
-		  write_exp_elt_opcode (pstate, OP_TYPE);
-		  write_exp_elt_type (pstate, $$);
-		  write_exp_elt_opcode (pstate, OP_TYPE);
+		  pstate->push_new<type_operation> ($$);
 		}
 ;
 
@@ -644,11 +632,11 @@ BasicType:
 static int
 type_aggregate_p (struct type *type)
 {
-  return (TYPE_CODE (type) == TYPE_CODE_STRUCT
-	  || TYPE_CODE (type) == TYPE_CODE_UNION
-	  || TYPE_CODE (type) == TYPE_CODE_MODULE
-	  || (TYPE_CODE (type) == TYPE_CODE_ENUM
-	      && TYPE_DECLARED_CLASS (type)));
+  return (type->code () == TYPE_CODE_STRUCT
+	  || type->code () == TYPE_CODE_UNION
+	  || type->code () == TYPE_CODE_MODULE
+	  || (type->code () == TYPE_CODE_ENUM
+	      && type->is_declared_class ()));
 }
 
 /* Take care of parsing a number (anything that starts with a digit).
@@ -793,7 +781,7 @@ parse_number (struct parser_state *ps, c
 	  if (base > 10 && c >= 'a' && c <= 'f')
 	    {
 	      if (found_suffix)
-	        return ERROR;
+		return ERROR;
 	      n += i = c - 'a' + 10;
 	    }
 	  else if (c == 'l' && long_p == 0)
@@ -948,21 +936,21 @@ parse_string_or_char (const char *tokptr
   return quote == '\'' ? CHARACTER_LITERAL : STRING_LITERAL;
 }
 
-struct token
+struct d_token
 {
   const char *oper;
   int token;
   enum exp_opcode opcode;
 };
 
-static const struct token tokentab3[] =
+static const struct d_token tokentab3[] =
   {
     {"^^=", ASSIGN_MODIFY, BINOP_EXP},
     {"<<=", ASSIGN_MODIFY, BINOP_LSH},
     {">>=", ASSIGN_MODIFY, BINOP_RSH},
   };
 
-static const struct token tokentab2[] =
+static const struct d_token tokentab2[] =
   {
     {"+=", ASSIGN_MODIFY, BINOP_ADD},
     {"-=", ASSIGN_MODIFY, BINOP_SUB},
@@ -972,25 +960,25 @@ static const struct token tokentab2[] =
     {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
     {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
     {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
-    {"++", INCREMENT, BINOP_END},
-    {"--", DECREMENT, BINOP_END},
-    {"&&", ANDAND, BINOP_END},
-    {"||", OROR, BINOP_END},
-    {"^^", HATHAT, BINOP_END},
-    {"<<", LSH, BINOP_END},
-    {">>", RSH, BINOP_END},
-    {"==", EQUAL, BINOP_END},
-    {"!=", NOTEQUAL, BINOP_END},
-    {"<=", LEQ, BINOP_END},
-    {">=", GEQ, BINOP_END},
-    {"..", DOTDOT, BINOP_END},
+    {"++", INCREMENT, OP_NULL},
+    {"--", DECREMENT, OP_NULL},
+    {"&&", ANDAND, OP_NULL},
+    {"||", OROR, OP_NULL},
+    {"^^", HATHAT, OP_NULL},
+    {"<<", LSH, OP_NULL},
+    {">>", RSH, OP_NULL},
+    {"==", EQUAL, OP_NULL},
+    {"!=", NOTEQUAL, OP_NULL},
+    {"<=", LEQ, OP_NULL},
+    {">=", GEQ, OP_NULL},
+    {"..", DOTDOT, OP_NULL},
   };
 
 /* Identifier-like tokens.  */
-static const struct token ident_tokens[] =
+static const struct d_token ident_tokens[] =
   {
-    {"is", IDENTITY, BINOP_END},
-    {"!is", NOTIDENTITY, BINOP_END},
+    {"is", IDENTITY, OP_NULL},
+    {"!is", NOTIDENTITY, OP_NULL},
 
     {"cast", CAST_KEYWORD, OP_NULL},
     {"const", CONST_KEYWORD, OP_NULL},
@@ -1036,7 +1024,6 @@ lex_one_token (struct parser_state *par_
 {
   int c;
   int namelen;
-  unsigned int i;
   const char *tokstart;
   int saw_structop = last_was_structop;
 
@@ -1048,21 +1035,21 @@ lex_one_token (struct parser_state *par_
 
   tokstart = pstate->lexptr;
   /* See if it is a special token of length 3.  */
-  for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
-    if (strncmp (tokstart, tokentab3[i].oper, 3) == 0)
+  for (const auto &token : tokentab3)
+    if (strncmp (tokstart, token.oper, 3) == 0)
       {
 	pstate->lexptr += 3;
-	yylval.opcode = tokentab3[i].opcode;
-	return tokentab3[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   /* See if it is a special token of length 2.  */
-  for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
-    if (strncmp (tokstart, tokentab2[i].oper, 2) == 0)
+  for (const auto &token : tokentab2)
+    if (strncmp (tokstart, token.oper, 2) == 0)
       {
 	pstate->lexptr += 2;
-	yylval.opcode = tokentab2[i].opcode;
-	return tokentab2[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   switch (c = *tokstart)
@@ -1080,7 +1067,7 @@ lex_one_token (struct parser_state *par_
       else if (saw_structop)
 	return COMPLETE;
       else
-        return 0;
+	return 0;
 
     case ' ':
     case '\t':
@@ -1116,7 +1103,7 @@ lex_one_token (struct parser_state *par_
 	    last_was_structop = 1;
 	  goto symbol;		/* Nope, must be a symbol.  */
 	}
-      /* FALL THRU.  */
+      [[fallthrough]];
 
     case '0':
     case '1':
@@ -1193,7 +1180,7 @@ lex_one_token (struct parser_state *par_
 	    return ENTRY;
 	  }
       }
-      /* FALLTHRU */
+      [[fallthrough]];
     case '+':
     case '-':
     case '*':
@@ -1269,9 +1256,9 @@ lex_one_token (struct parser_state *par_
       const char *p = tokstart + namelen + 1;
 
       while (*p == ' ' || *p == '\t')
-        p++;
+	p++;
       if (*p >= '0' && *p <= '9')
-        return 0;
+	return 0;
     }
 
   pstate->lexptr += namelen;
@@ -1283,13 +1270,13 @@ lex_one_token (struct parser_state *par_
 
   /* Catch specific keywords.  */
   std::string copy = copy_name (yylval.sval);
-  for (i = 0; i < sizeof ident_tokens / sizeof ident_tokens[0]; i++)
-    if (copy == ident_tokens[i].oper)
+  for (const auto &token : ident_tokens)
+    if (copy == token.oper)
       {
 	/* It is ok to always set this, even though we don't always
 	   strictly need to.  */
-	yylval.opcode = ident_tokens[i].opcode;
-	return ident_tokens[i].token;
+	yylval.opcode = token.opcode;
+	return token.token;
       }
 
   if (*tokstart == '$')
@@ -1320,7 +1307,7 @@ lex_one_token (struct parser_state *par_
 }
 
 /* An object of this type is pushed on a FIFO by the "outer" lexer.  */
-struct token_and_value
+struct d_token_and_value
 {
   int token;
   YYSTYPE value;
@@ -1329,7 +1316,7 @@ struct token_and_value
 
 /* A FIFO of tokens that have been read but not yet returned to the
    parser.  */
-static std::vector<token_and_value> token_fifo;
+static std::vector<d_token_and_value> token_fifo;
 
 /* Non-zero if the lexer should return tokens from the FIFO.  */
 static int popping;
@@ -1350,22 +1337,24 @@ classify_name (struct parser_state *par_
 
   std::string copy = copy_name (yylval.sval);
 
-  sym = lookup_symbol (copy.c_str (), block, VAR_DOMAIN, &is_a_field_of_this);
-  if (sym.symbol && SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF)
+  sym = lookup_symbol (copy.c_str (), block, SEARCH_VFT, &is_a_field_of_this);
+  if (sym.symbol && sym.symbol->aclass () == LOC_TYPEDEF)
     {
-      yylval.tsym.type = SYMBOL_TYPE (sym.symbol);
+      yylval.tsym.type = sym.symbol->type ();
       return TYPENAME;
     }
   else if (sym.symbol == NULL)
     {
       /* Look-up first for a module name, then a type.  */
-      sym = lookup_symbol (copy.c_str (), block, MODULE_DOMAIN, NULL);
+      sym = lookup_symbol (copy.c_str (), block, SEARCH_MODULE_DOMAIN,
+			   nullptr);
       if (sym.symbol == NULL)
-	sym = lookup_symbol (copy.c_str (), block, STRUCT_DOMAIN, NULL);
+	sym = lookup_symbol (copy.c_str (), block, SEARCH_STRUCT_DOMAIN,
+			     nullptr);
 
       if (sym.symbol != NULL)
 	{
-	  yylval.tsym.type = SYMBOL_TYPE (sym.symbol);
+	  yylval.tsym.type = sym.symbol->type ();
 	  return TYPENAME;
 	}
 
@@ -1398,9 +1387,9 @@ classify_inner_name (struct parser_state
   if (yylval.ssym.sym.symbol == NULL)
     return ERROR;
 
-  if (SYMBOL_CLASS (yylval.ssym.sym.symbol) == LOC_TYPEDEF)
+  if (yylval.ssym.sym.symbol->aclass () == LOC_TYPEDEF)
     {
-      yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym.symbol);
+      yylval.tsym.type = yylval.ssym.sym.symbol->type ();
       return TYPENAME;
     }
 
@@ -1417,7 +1406,7 @@ classify_inner_name (struct parser_state
 static int
 yylex (void)
 {
-  token_and_value current;
+  d_token_and_value current;
   int last_was_dot;
   struct type *context_type = NULL;
   int last_to_examine, next_to_examine, checkpoint;
@@ -1480,7 +1469,7 @@ yylex (void)
 
       while (next_to_examine <= last_to_examine)
 	{
-	  token_and_value next;
+	  d_token_and_value next;
 
 	  next = token_fifo[next_to_examine];
 	  ++next_to_examine;
@@ -1488,7 +1477,7 @@ yylex (void)
 	  if (next.token == IDENTIFIER && last_was_dot)
 	    {
 	      /* Update the partial name we are constructing.  */
-              obstack_grow_str (&name_obstack, ".");
+	      obstack_grow_str (&name_obstack, ".");
 	      obstack_grow (&name_obstack, next.value.sval.ptr,
 			    next.value.sval.length);
 
@@ -1544,7 +1533,7 @@ yylex (void)
 
   while (next_to_examine <= last_to_examine)
     {
-      token_and_value next;
+      d_token_and_value next;
 
       next = token_fifo[next_to_examine];
       ++next_to_examine;
@@ -1568,7 +1557,7 @@ yylex (void)
 	  if (context_type != NULL)
 	    {
 	      /* We don't want to put a leading "." into the name.  */
-              obstack_grow_str (&name_obstack, ".");
+	      obstack_grow_str (&name_obstack, ".");
 	    }
 	  obstack_grow (&name_obstack, next.value.sval.ptr,
 			next.value.sval.length);
@@ -1620,7 +1609,7 @@ d_parse (struct parser_state *par_state)
   pstate = par_state;
 
   scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
-							parser_debug);
+							par_state->debug);
 
   struct type_stack stack;
   scoped_restore restore_type_stack = make_scoped_restore (&type_stack,
@@ -1635,15 +1624,15 @@ d_parse (struct parser_state *par_state)
   popping = 0;
   name_obstack.clear ();
 
-  return yyparse ();
+  int result = yyparse ();
+  if (!result)
+    pstate->set_operation (pstate->pop ());
+  return result;
 }
 
 static void
 yyerror (const char *msg)
 {
-  if (pstate->prev_lexptr)
-    pstate->lexptr = pstate->prev_lexptr;
-
-  error (_("A %s in expression, near `%s'."), msg, pstate->lexptr);
+  pstate->parse_error (msg);
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dicos-tdep.c ./gdb/dicos-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dicos-tdep.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/dicos-tdep.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent, architecture-independent code for DICOS, for GDB.
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,7 +28,7 @@
 void
 dicos_init_abi (struct gdbarch *gdbarch)
 {
-  set_solib_ops (gdbarch, &solib_target_so_ops);
+  set_gdbarch_so_ops (gdbarch, &solib_target_so_ops);
 
   /* Every process, although has its own address space, sees the same
      list of shared libraries.  There's no "main executable" in DICOS,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dicos-tdep.h ./gdb/dicos-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dicos-tdep.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/dicos-tdep.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent, architecture-independent code for DICOS, for GDB.
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dictionary.c ./gdb/dictionary.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dictionary.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/dictionary.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Routines for name->symbol lookups in GDB.
    
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    Contributed by David Carlton <carlton@bactrian.org> and by Kealia,
    Inc.
@@ -22,11 +22,11 @@
 
 #include "defs.h"
 #include <ctype.h>
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "symtab.h"
 #include "buildsym.h"
 #include "dictionary.h"
-#include "safe-ctype.h"
+#include "gdbsupport/gdb-safe-ctype.h"
 #include <unordered_map>
 #include "language.h"
 
@@ -522,8 +522,7 @@ free_obstack (struct dictionary *dict)
 static void
 add_symbol_nonexpandable (struct dictionary *dict, struct symbol *sym)
 {
-  internal_error (__FILE__, __LINE__,
-		  _("dict_add_symbol: non-expandable dictionary"));
+  internal_error (_("dict_add_symbol: non-expandable dictionary"));
 }
 
 /* Functions for DICT_HASHED and DICT_HASHED_EXPANDABLE.  */
@@ -584,7 +583,7 @@ iter_match_first_hashed (const struct di
   unsigned int hash_index = (name.search_name_hash (lang->la_language)
 			     % DICT_HASHED_NBUCKETS (dict));
   symbol_name_matcher_ftype *matches_name
-    = get_symbol_name_matcher (lang, name);
+    = lang->get_symbol_name_matcher (name);
   struct symbol *sym;
 
   DICT_ITERATOR_DICT (iterator) = dict;
@@ -612,7 +611,7 @@ iter_match_next_hashed (const lookup_nam
 {
   const language_defn *lang = DICT_LANGUAGE (DICT_ITERATOR_DICT (iterator));
   symbol_name_matcher_ftype *matches_name
-    = get_symbol_name_matcher (lang, name);
+    = lang->get_symbol_name_matcher (name);
   struct symbol *next;
 
   for (next = DICT_ITERATOR_CURRENT (iterator)->hash_next;
@@ -640,9 +639,9 @@ insert_symbol_hashed (struct dictionary
 
   /* We don't want to insert a symbol into a dictionary of a different
      language.  The two may not use the same hashing algorithm.  */
-  gdb_assert (SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language);
+  gdb_assert (sym->language () == DICT_LANGUAGE (dict)->la_language);
 
-  hash = search_name_hash (SYMBOL_LANGUAGE (sym), sym->search_name ());
+  hash = search_name_hash (sym->language (), sym->search_name ());
   hash_index = hash % DICT_HASHED_NBUCKETS (dict);
   sym->hash_next = buckets[hash_index];
   buckets[hash_index] = sym;
@@ -651,7 +650,18 @@ insert_symbol_hashed (struct dictionary
 static int
 size_hashed (const struct dictionary *dict)
 {
-  return DICT_HASHED_NBUCKETS (dict);
+  int nbuckets = DICT_HASHED_NBUCKETS (dict);
+  int total = 0;
+
+  for (int i = 0; i < nbuckets; ++i)
+    {
+      for (struct symbol *sym = DICT_HASHED_BUCKET (dict, i);
+	   sym != nullptr;
+	   sym = sym->hash_next)
+	total++;
+    }
+
+  return total;
 }
 
 /* Functions only for DICT_HASHED_EXPANDABLE.  */
@@ -719,7 +729,7 @@ expand_hashtable (struct dictionary *dic
 /* See dictionary.h.  */
 
 unsigned int
-default_search_name_hash (const char *string0)
+language_defn::search_name_hash (const char *string0) const
 {
   /* The Ada-encoded version of a name P1.P2...Pn has either the form
      P1__P2__...Pn<suffix> or _ada_P1__P2__...Pn<suffix> (where the Pi
@@ -761,6 +771,13 @@ default_search_name_hash (const char *st
 	    {
 	      int c = string[2];
 
+	      if (c == 'B' && string[3] == '_')
+		{
+		  for (string += 4; ISDIGIT (*string); ++string)
+		    ;
+		  continue;
+		}
+
 	      if ((c < 'a' || c > 'z') && c != 'O')
 		return hash;
 	      hash = 0;
@@ -828,7 +845,7 @@ iter_match_next_linear (const lookup_nam
   const struct dictionary *dict = DICT_ITERATOR_DICT (iterator);
   const language_defn *lang = DICT_LANGUAGE (dict);
   symbol_name_matcher_ftype *matches_name
-    = get_symbol_name_matcher (lang, name);
+    = lang->get_symbol_name_matcher (name);
 
   int i, nsyms = DICT_LINEAR_NSYMS (dict);
   struct symbol *sym, *retval = NULL;
@@ -928,7 +945,7 @@ collate_pending_symbols_by_language (con
     {
       for (int i = list_counter->nsyms - 1; i >= 0; --i)
 	{
-	  enum language language = SYMBOL_LANGUAGE (list_counter->symbol[i]);
+	  enum language language = list_counter->symbol[i]->language ();
 	  nsyms[language].push_back (list_counter->symbol[i]);
 	}
     }
@@ -1087,8 +1104,7 @@ create_new_language_dictionary (struct m
     {
     case DICT_HASHED:
     case DICT_LINEAR:
-      internal_error (__FILE__, __LINE__,
-		      _("create_new_language_dictionary: attempted to expand "
+      internal_error (_("create_new_language_dictionary: attempted to expand "
 			"non-expandable multidictionary"));
 
     case DICT_HASHED_EXPANDABLE:
@@ -1116,13 +1132,13 @@ void
 mdict_add_symbol (struct multidictionary *mdict, struct symbol *sym)
 {
   struct dictionary *dict
-    = find_language_dictionary (mdict, SYMBOL_LANGUAGE (sym));
+    = find_language_dictionary (mdict, sym->language ());
 
   if (dict == nullptr)
     {
       /* SYM is of a new language that we haven't previously seen.
 	 Create a new dictionary for it.  */
-      dict = create_new_language_dictionary (mdict, SYMBOL_LANGUAGE (sym));
+      dict = create_new_language_dictionary (mdict, sym->language ());
     }
 
   dict_add_symbol (dict, sym);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dictionary.h ./gdb/dictionary.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/dictionary.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/dictionary.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Routines for name->symbol lookups in GDB.
    
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    Contributed by David Carlton <carlton@bactrian.org> and by Kealia,
    Inc.
@@ -159,21 +159,53 @@ extern struct symbol *
 extern struct symbol *mdict_iter_match_next (const lookup_name_info &name,
 					     struct mdict_iterator *miterator);
 
-/* Return some notion of the size of the multidictionary: the number of
-   symbols if we have that, the number of hash buckets otherwise.  */
+/* Return the number of symbols in multidictionary MDICT.  */
 
 extern int mdict_size (const struct multidictionary *mdict);
 
-/* Macro to loop through all symbols in a dictionary DICT, in no
-   particular order.  ITER is a struct dict_iterator (NOTE: __not__ a
-   struct dict_iterator *), and SYM points to the current symbol.
-
-   It's implemented as a single loop, so you can terminate the loop
-   early by a break if you desire.  */
-
-#define ALL_DICT_SYMBOLS(dict, iter, sym)			\
-	for ((sym) = mdict_iterator_first ((dict), &(iter));	\
-	     (sym);						\
-	     (sym) = mdict_iterator_next (&(iter)))
+/* An iterator that wraps an mdict_iterator.  The naming here is
+   unfortunate, but mdict_iterator was named before gdb switched to
+   C++.  */
+struct mdict_iterator_wrapper
+{
+  typedef mdict_iterator_wrapper self_type;
+  typedef struct symbol *value_type;
+
+  explicit mdict_iterator_wrapper (const struct multidictionary *mdict)
+    : m_sym (mdict_iterator_first (mdict, &m_iter))
+  {
+  }
+
+  mdict_iterator_wrapper ()
+    : m_sym (nullptr)
+  {
+  }
+
+  value_type operator* () const
+  {
+    return m_sym;
+  }
+
+  bool operator== (const self_type &other) const
+  {
+    return m_sym == other.m_sym;
+  }
+
+  bool operator!= (const self_type &other) const
+  {
+    return m_sym != other.m_sym;
+  }
+
+  self_type &operator++ ()
+  {
+    m_sym = mdict_iterator_next (&m_iter);
+    return *this;
+  }
+
+private:
+
+  struct symbol *m_sym;
+  struct mdict_iterator m_iter;
+};
 
 #endif /* DICTIONARY_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/.dir-locals.el ./gdb/.dir-locals.el
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/.dir-locals.el	2019-12-11 01:49:18.000000000 +0000
+++ ./gdb/.dir-locals.el	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 ;; Emacs settings.
-;; Copyright (C) 2012-2019 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2024 Free Software Foundation, Inc.
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -14,16 +14,22 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+;; There are three copies of this file, one in each of gdb/,
+;; gdbserver/, and gdbsupport/.  If you edit any one of these then
+;; please replicate the changes in the other two copies.
+
 (
  (tcl-mode . ((tcl-indent-level . 4)
 	      (tcl-continued-indent-level . 4)
 	      (indent-tabs-mode . t)))
- (nil . ((bug-reference-url-format . "http://sourceware.org/bugzilla/show_bug.cgi?id=%s")))
+ (nil . ((bug-reference-url-format . "http://sourceware.org/bugzilla/show_bug.cgi?id=%s")
+	 (sentence-end-double-space . t)))
  (c-mode . ((c-file-style . "GNU")
 	    (mode . c++)
 	    (indent-tabs-mode . t)
 	    (tab-width . 8)
 	    (c-basic-offset . 2)
+	    (eval . (c-set-offset 'brace-list-open 0))
 	    (eval . (c-set-offset 'innamespace 0))
 	    ))
  (c++-mode . ((eval . (when (fboundp 'c-toggle-comment-style)
@@ -32,6 +38,7 @@
 	      (tab-width . 8)
 	      (c-file-style . "GNU")
 	      (c-basic-offset . 2)
+	      (eval . (c-set-offset 'brace-list-open 0))
 	      (eval . (c-set-offset 'innamespace 0))
 	      ))
 )
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disable-implicit-rules.mk ./gdb/disable-implicit-rules.mk
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disable-implicit-rules.mk	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/disable-implicit-rules.mk	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Copyright (C) 2016-2024 Free Software Foundation, Inc.
 
 # This file is part of GDB.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disasm.c ./gdb/disasm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disasm.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/disasm.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Disassemble support for GDB.
 
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,11 +27,13 @@
 #include "gdbcmd.h"
 #include "dis-asm.h"
 #include "source.h"
-#include "safe-ctype.h"
+#include "gdbsupport/gdb-safe-ctype.h"
 #include <algorithm>
-#include "gdbsupport/gdb_optional.h"
+#include <optional>
 #include "valprint.h"
 #include "cli/cli-style.h"
+#include "objfiles.h"
+#include "inferior.h"
 
 /* Disassemble functions.
    FIXME: We should get rid of all the duplicate code in gdb that does
@@ -39,7 +41,66 @@
 
 /* This variable is used to hold the prospective disassembler_options value
    which is set by the "set disassembler_options" command.  */
-static char *prospective_options = NULL;
+static std::string prospective_options;
+
+/* When this is true we will try to use libopcodes to provide styling to
+   the disassembler output.  */
+
+static bool use_libopcodes_styling = true;
+
+/* To support the set_use_libopcodes_styling function we have a second
+   variable which is connected to the actual set/show option.  */
+
+static bool use_libopcodes_styling_option = use_libopcodes_styling;
+
+/* The "maint show libopcodes-styling enabled" command.  */
+
+static void
+show_use_libopcodes_styling  (struct ui_file *file, int from_tty,
+			      struct cmd_list_element *c,
+			      const char *value)
+{
+  gdbarch *arch = current_inferior ()->arch ();
+  gdb_non_printing_memory_disassembler dis (arch);
+  bool supported = dis.disasm_info ()->created_styled_output;
+
+  if (supported || !use_libopcodes_styling)
+    gdb_printf (file, _("Use of libopcodes styling support is \"%s\".\n"),
+		value);
+  else
+    {
+      /* Use of libopcodes styling is not supported, and the user has this
+	 turned on!  */
+      gdb_printf (file, _("Use of libopcodes styling support is \"off\""
+			  " (not supported on architecture \"%s\")\n"),
+		  gdbarch_bfd_arch_info (arch)->printable_name);
+    }
+}
+
+/* The "maint set libopcodes-styling enabled" command.  */
+
+static void
+set_use_libopcodes_styling (const char *args, int from_tty,
+			    struct cmd_list_element *c)
+{
+  gdbarch *arch = current_inferior ()->arch ();
+  gdb_non_printing_memory_disassembler dis (arch);
+  bool supported = dis.disasm_info ()->created_styled_output;
+
+  /* If the current architecture doesn't support libopcodes styling then we
+     give an error here, but leave the underlying setting enabled.  This
+     means that if the user switches to an architecture that does support
+     libopcodes styling the setting will be enabled.  */
+
+  if (use_libopcodes_styling_option && !supported)
+    {
+      use_libopcodes_styling_option = use_libopcodes_styling;
+      error (_("Use of libopcodes styling not supported on architecture \"%s\"."),
+	     gdbarch_bfd_arch_info (arch)->printable_name);
+    }
+  else
+    use_libopcodes_styling = use_libopcodes_styling_option;
+}
 
 /* This structure is used to store line number information for the
    deprecated /m option.
@@ -132,9 +193,9 @@ line_has_code_p (htab_t table, struct sy
 /* Wrapper of target_read_code.  */
 
 int
-gdb_disassembler::dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr,
-				       unsigned int len,
-				       struct disassemble_info *info)
+gdb_disassembler_memory_reader::dis_asm_read_memory
+  (bfd_vma memaddr, gdb_byte *myaddr, unsigned int len,
+   struct disassemble_info *info) noexcept
 {
   return target_read_code (memaddr, myaddr, len);
 }
@@ -142,25 +203,135 @@ gdb_disassembler::dis_asm_read_memory (b
 /* Wrapper of memory_error.  */
 
 void
-gdb_disassembler::dis_asm_memory_error (int err, bfd_vma memaddr,
-					struct disassemble_info *info)
+gdb_disassembler::dis_asm_memory_error
+  (int err, bfd_vma memaddr, struct disassemble_info *info) noexcept
 {
   gdb_disassembler *self
     = static_cast<gdb_disassembler *>(info->application_data);
 
-  self->m_err_memaddr = memaddr;
+  self->m_err_memaddr.emplace (memaddr);
 }
 
 /* Wrapper of print_address.  */
 
 void
-gdb_disassembler::dis_asm_print_address (bfd_vma addr,
-					 struct disassemble_info *info)
+gdb_disassembler::dis_asm_print_address
+  (bfd_vma addr, struct disassemble_info *info) noexcept
 {
   gdb_disassembler *self
     = static_cast<gdb_disassembler *>(info->application_data);
 
-  print_address (self->arch (), addr, self->stream ());
+  if (self->in_comment_p ())
+    {
+      /* Calling 'print_address' might add styling to the output (based on
+	 the properties of the stream we're writing too).  This is usually
+	 fine, but if we are in an assembler comment then we'd prefer to
+	 have the comment style, rather than the default address style.
+
+	 Print the address into a temporary buffer which doesn't support
+	 styling, then reprint this unstyled address with the default text
+	 style.
+
+	 As we are inside a comment right now, the standard print routine
+	 will ensure that the comment is printed to the user with a
+	 suitable comment style.  */
+      string_file tmp;
+      print_address (self->arch (), addr, &tmp);
+      self->fprintf_styled_func (self, dis_style_text, "%s", tmp.c_str ());
+    }
+  else
+    print_address (self->arch (), addr, self->stream ());
+}
+
+/* See disasm.h.  */
+
+ui_file *
+gdb_printing_disassembler::stream_from_gdb_disassemble_info (void *dis_info)
+{
+  gdb_disassemble_info *di = (gdb_disassemble_info *) dis_info;
+  gdb_printing_disassembler *dis
+    = gdb::checked_static_cast<gdb_printing_disassembler *> (di);
+  ui_file *stream = dis->stream ();
+  gdb_assert (stream != nullptr);
+  return stream;
+}
+
+/* Format disassembler output to STREAM.  */
+
+int
+gdb_printing_disassembler::fprintf_func (void *dis_info,
+					 const char *format, ...) noexcept
+{
+  ui_file *stream = stream_from_gdb_disassemble_info (dis_info);
+
+  va_list args;
+  va_start (args, format);
+  gdb_vprintf (stream, format, args);
+  va_end (args);
+
+  /* Something non -ve.  */
+  return 0;
+}
+
+/* See disasm.h.  */
+
+int
+gdb_printing_disassembler::fprintf_styled_func
+  (void *dis_info, enum disassembler_style style,
+   const char *format, ...) noexcept
+{
+  ui_file *stream = stream_from_gdb_disassemble_info (dis_info);
+  gdb_printing_disassembler *dis = (gdb_printing_disassembler *) dis_info;
+
+  va_list args;
+  va_start (args, format);
+  std::string content = string_vprintf (format, args);
+  va_end (args);
+
+  /* Once in a comment then everything should be styled as a comment.  */
+  if (style == dis_style_comment_start)
+    dis->set_in_comment (true);
+  if (dis->in_comment_p ())
+    style = dis_style_comment_start;
+
+  /* Now print the content with the correct style.  */
+  const char *txt = content.c_str ();
+  switch (style)
+    {
+    case dis_style_mnemonic:
+    case dis_style_sub_mnemonic:
+    case dis_style_assembler_directive:
+      fputs_styled (txt, disasm_mnemonic_style.style (), stream);
+      break;
+
+    case dis_style_register:
+      fputs_styled (txt, disasm_register_style.style (), stream);
+      break;
+
+    case dis_style_immediate:
+    case dis_style_address_offset:
+      fputs_styled (txt, disasm_immediate_style.style (), stream);
+      break;
+
+    case dis_style_address:
+      fputs_styled (txt, address_style.style (), stream);
+      break;
+
+    case dis_style_symbol:
+      fputs_styled (txt, function_name_style.style (), stream);
+      break;
+
+    case dis_style_comment_start:
+      fputs_styled (txt, disasm_comment_style.style (), stream);
+      break;
+
+    case dis_style_text:
+      gdb_puts (txt, stream);
+      break;
+    }
+
+  /* Something non -ve.  */
+  return 0;
 }
 
 static bool
@@ -175,15 +346,15 @@ line_is_less_than (const deprecated_dis_
     {
       if (mle1.start_pc != mle2.start_pc)
 	val = mle1.start_pc < mle2.start_pc;
-    else
-        val = mle1.line < mle2.line;
+      else
+	val = mle1.line < mle2.line;
     }
   else
     {
       if (mle1.line != mle2.line)
 	val = mle1.line < mle2.line;
       else
-        val = mle1.start_pc < mle2.start_pc;
+	val = mle1.start_pc < mle2.start_pc;
     }
   return val;
 }
@@ -238,13 +409,13 @@ gdb_pretty_print_disassembler::pretty_pr
     std::string name, filename;
     bool omit_fname = ((flags & DISASSEMBLY_OMIT_FNAME) != 0);
     if (!build_address_symbolic (gdbarch, pc, false, omit_fname, &name,
-                                 &offset, &filename, &line, &unmapped))
+				 &offset, &filename, &line, &unmapped))
       {
 	/* We don't care now about line, filename and unmapped.  But we might in
 	   the future.  */
 	m_uiout->text (" <");
 	if (!omit_fname)
-	  m_uiout->field_string ("func-name", name.c_str (),
+	  m_uiout->field_string ("func-name", name,
 				 function_name_style.style ());
 	/* For negative offsets, avoid displaying them as +-N; the sign of
 	   the offset takes the place of the "+" here.  */
@@ -256,37 +427,101 @@ gdb_pretty_print_disassembler::pretty_pr
     else
       m_uiout->text (":\t");
 
+    /* Clear the buffer into which we will disassemble the instruction.  */
     m_insn_stb.clear ();
 
-    if (flags & DISASSEMBLY_RAW_INSN)
+    /* A helper function to write the M_INSN_STB buffer, followed by a
+       newline.  This can be called in a couple of situations.  */
+    auto write_out_insn_buffer = [&] ()
+    {
+      m_uiout->field_stream ("inst", m_insn_stb);
+      m_uiout->text ("\n");
+    };
+
+    try
+      {
+	/* Now we can disassemble the instruction.  If the disassembler
+	   returns a negative value this indicates an error and is handled
+	   within the print_insn call, resulting in an exception being
+	   thrown.  Returning zero makes no sense, as this indicates we
+	   disassembled something successfully, but it was something of no
+	   size?  */
+	size = m_di.print_insn (pc);
+	gdb_assert (size > 0);
+      }
+    catch (const gdb_exception &)
       {
-	CORE_ADDR end_pc;
-	bfd_byte data;
-	const char *spacer = "";
+	/* An exception was thrown while disassembling the instruction.
+	   However, the disassembler might still have written something
+	   out, so ensure that we flush the instruction buffer before
+	   rethrowing the exception.  We can't perform this write from an
+	   object destructor as the write itself might throw an exception
+	   if the pager kicks in, and the user selects quit.  */
+	write_out_insn_buffer ();
+	throw;
+      }
 
+    if ((flags & (DISASSEMBLY_RAW_INSN | DISASSEMBLY_RAW_BYTES)) != 0)
+      {
 	/* Build the opcodes using a temporary stream so we can
 	   write them out in a single go for the MI.  */
 	m_opcode_stb.clear ();
 
-	size = m_di.print_insn (pc);
-	end_pc = pc + size;
+	/* Read the instruction opcode data.  */
+	m_opcode_data.resize (size);
+	read_code (pc, m_opcode_data.data (), size);
+
+	/* The disassembler provides information about the best way to
+	   display the instruction bytes to the user.  We provide some sane
+	   defaults in case the disassembler gets it wrong.  */
+	const struct disassemble_info *di = m_di.disasm_info ();
+	int bytes_per_line = std::max (di->bytes_per_line, size);
+	int bytes_per_chunk = std::max (di->bytes_per_chunk, 1);
+
+	/* If the user has requested the instruction bytes be displayed
+	   byte at a time, then handle that here.  Also, if the instruction
+	   is not a multiple of the chunk size (which probably indicates a
+	   disassembler problem) then avoid that causing display problems
+	   by switching to byte at a time mode.  */
+	if ((flags & DISASSEMBLY_RAW_BYTES) != 0
+	    || (size % bytes_per_chunk) != 0)
+	  bytes_per_chunk = 1;
+
+	/* Print the instruction opcodes bytes, grouped into chunks.  */
+	for (int i = 0; i < size; i += bytes_per_chunk)
+	  {
+	    if (i > 0)
+	      m_opcode_stb.puts (" ");
+
+	    if (di->display_endian == BFD_ENDIAN_LITTLE)
+	      {
+		for (int k = bytes_per_chunk; k-- != 0; )
+		  m_opcode_stb.printf ("%02x", (unsigned) m_opcode_data[i + k]);
+	      }
+	    else
+	      {
+		for (int k = 0; k < bytes_per_chunk; k++)
+		  m_opcode_stb.printf ("%02x", (unsigned) m_opcode_data[i + k]);
+	      }
+	  }
 
-	for (;pc < end_pc; ++pc)
+	/* Calculate required padding.  */
+	int nspaces = 0;
+	for (int i = size; i < bytes_per_line; i += bytes_per_chunk)
 	  {
-	    read_code (pc, &data, 1);
-	    m_opcode_stb.printf ("%s%02x", spacer, (unsigned) data);
-	    spacer = " ";
+	    if (i > size)
+	      nspaces++;
+	    nspaces += bytes_per_chunk * 2;
 	  }
 
 	m_uiout->field_stream ("opcodes", m_opcode_stb);
+	m_uiout->spaces (nspaces);
 	m_uiout->text ("\t");
       }
-    else
-      size = m_di.print_insn (pc);
 
-    m_uiout->field_stream ("inst", m_insn_stb);
+    /* Disassembly was a success, write out the instruction buffer.  */
+    write_out_insn_buffer ();
   }
-  m_uiout->text ("\n");
 
   return size;
 }
@@ -341,7 +576,7 @@ do_mixed_source_and_assembly_deprecated
 {
   int newlines = 0;
   int nlines;
-  struct linetable_entry *le;
+  const struct linetable_entry *le;
   struct deprecated_dis_line_entry *mle;
   struct symtab_and_line sal;
   int i;
@@ -350,10 +585,10 @@ do_mixed_source_and_assembly_deprecated
   int num_displayed = 0;
   print_source_lines_flags psl_flags = 0;
 
-  gdb_assert (symtab != NULL && SYMTAB_LINETABLE (symtab) != NULL);
+  gdb_assert (symtab != nullptr && symtab->linetable () != nullptr);
 
-  nlines = SYMTAB_LINETABLE (symtab)->nitems;
-  le = SYMTAB_LINETABLE (symtab)->item;
+  nlines = symtab->linetable ()->nitems;
+  le = symtab->linetable ()->item;
 
   if (flags & DISASSEMBLY_FILENAME)
     psl_flags |= PRINT_SOURCE_LINES_FILENAME;
@@ -361,19 +596,26 @@ do_mixed_source_and_assembly_deprecated
   mle = (struct deprecated_dis_line_entry *)
     alloca (nlines * sizeof (struct deprecated_dis_line_entry));
 
+  struct objfile *objfile = symtab->compunit ()->objfile ();
+
+  unrelocated_addr unrel_low
+    = unrelocated_addr (low - objfile->text_section_offset ());
+  unrelocated_addr unrel_high
+    = unrelocated_addr (high - objfile->text_section_offset ());
+
   /* Copy linetable entries for this function into our data
      structure, creating end_pc's and setting out_of_order as
      appropriate.  */
 
   /* First, skip all the preceding functions.  */
 
-  for (i = 0; i < nlines - 1 && le[i].pc < low; i++);
+  for (i = 0; i < nlines - 1 && le[i].unrelocated_pc () < unrel_low; i++);
 
   /* Now, copy all entries before the end of this function.  */
 
-  for (; i < nlines - 1 && le[i].pc < high; i++)
+  for (; i < nlines - 1 && le[i].unrelocated_pc () < unrel_high; i++)
     {
-      if (le[i].line == le[i + 1].line && le[i].pc == le[i + 1].pc)
+      if (le[i] == le[i + 1])
 	continue;		/* Ignore duplicates.  */
 
       /* Skip any end-of-function markers.  */
@@ -383,19 +625,19 @@ do_mixed_source_and_assembly_deprecated
       mle[newlines].line = le[i].line;
       if (le[i].line > le[i + 1].line)
 	out_of_order = 1;
-      mle[newlines].start_pc = le[i].pc;
-      mle[newlines].end_pc = le[i + 1].pc;
+      mle[newlines].start_pc = le[i].pc (objfile);
+      mle[newlines].end_pc = le[i + 1].pc (objfile);
       newlines++;
     }
 
   /* If we're on the last line, and it's part of the function,
      then we need to get the end pc in a special way.  */
 
-  if (i == nlines - 1 && le[i].pc < high)
+  if (i == nlines - 1 && le[i].unrelocated_pc () < unrel_high)
     {
       mle[newlines].line = le[i].line;
-      mle[newlines].start_pc = le[i].pc;
-      sal = find_pc_line (le[i].pc, 0);
+      mle[newlines].start_pc = le[i].pc (objfile);
+      sal = find_pc_line (le[i].pc (objfile), 0);
       mle[newlines].end_pc = sal.end;
       newlines++;
     }
@@ -411,8 +653,8 @@ do_mixed_source_and_assembly_deprecated
 
   ui_out_emit_list asm_insns_list (uiout, "asm_insns");
 
-  gdb::optional<ui_out_emit_tuple> outer_tuple_emitter;
-  gdb::optional<ui_out_emit_list> inner_list_emitter;
+  std::optional<ui_out_emit_tuple> outer_tuple_emitter;
+  std::optional<ui_out_emit_list> inner_list_emitter;
 
   for (i = 0; i < newlines; i++)
     {
@@ -460,7 +702,7 @@ do_mixed_source_and_assembly_deprecated
 				   how_many, flags, NULL);
 
       /* When we've reached the end of the mle array, or we've seen the last
-         assembly range for this source line, close out the list/tuple.  */
+	 assembly range for this source line, close out the list/tuple.  */
       if (i == (newlines - 1) || mle[i + 1].line > mle[i].line)
 	{
 	  inner_list_emitter.reset ();
@@ -492,7 +734,7 @@ do_mixed_source_and_assembly (struct gdb
   struct symtab *last_symtab;
   int last_line;
 
-  gdb_assert (main_symtab != NULL && SYMTAB_LINETABLE (main_symtab) != NULL);
+  gdb_assert (main_symtab != NULL && main_symtab->linetable () != NULL);
 
   /* First pass: collect the list of all source files and lines.
      We do this so that we can only print lines containing code once.
@@ -502,6 +744,13 @@ do_mixed_source_and_assembly (struct gdb
 
   htab_up dis_line_table (allocate_dis_line_table ());
 
+  struct objfile *objfile = main_symtab->compunit ()->objfile ();
+
+  unrelocated_addr unrel_low
+    = unrelocated_addr (low - objfile->text_section_offset ());
+  unrelocated_addr unrel_high
+    = unrelocated_addr (high - objfile->text_section_offset ());
+
   pc = low;
 
   /* The prologue may be empty, but there may still be a line number entry
@@ -510,15 +759,15 @@ do_mixed_source_and_assembly (struct gdb
      line after the opening brace.  We still want to print this opening brace.
      first_le is used to implement this.  */
 
-  nlines = SYMTAB_LINETABLE (main_symtab)->nitems;
-  le = SYMTAB_LINETABLE (main_symtab)->item;
+  nlines = main_symtab->linetable ()->nitems;
+  le = main_symtab->linetable ()->item;
   first_le = NULL;
 
   /* Skip all the preceding functions.  */
-  for (i = 0; i < nlines && le[i].pc < low; i++)
+  for (i = 0; i < nlines && le[i].unrelocated_pc () < unrel_low; i++)
     continue;
 
-  if (i < nlines && le[i].pc < high)
+  if (i < nlines && le[i].unrelocated_pc () < unrel_high)
     first_le = &le[i];
 
   /* Add lines for every pc value.  */
@@ -561,8 +810,8 @@ do_mixed_source_and_assembly (struct gdb
 
   ui_out_emit_list asm_insns_emitter (uiout, "asm_insns");
 
-  gdb::optional<ui_out_emit_tuple> tuple_emitter;
-  gdb::optional<ui_out_emit_list> list_emitter;
+  std::optional<ui_out_emit_tuple> tuple_emitter;
+  std::optional<ui_out_emit_list> list_emitter;
 
   last_symtab = NULL;
   last_line = 0;
@@ -711,21 +960,6 @@ do_assembly_only (struct gdbarch *gdbarc
   dump_insns (gdbarch, uiout, low, high, how_many, flags, NULL);
 }
 
-/* Initialize the disassemble info struct ready for the specified
-   stream.  */
-
-static int ATTRIBUTE_PRINTF (2, 3)
-fprintf_disasm (void *stream, const char *format, ...)
-{
-  va_list args;
-
-  va_start (args, format);
-  vfprintf_filtered ((struct ui_file *) stream, format, args);
-  va_end (args);
-  /* Something non -ve.  */
-  return 0;
-}
-
 /* Combine implicit and user disassembler options and return them
    in a newly-created string.  */
 
@@ -753,23 +987,80 @@ get_all_disassembler_options (struct gdb
 
 gdb_disassembler::gdb_disassembler (struct gdbarch *gdbarch,
 				    struct ui_file *file,
-				    di_read_memory_ftype read_memory_func)
-  : m_gdbarch (gdbarch),
-    m_err_memaddr (0)
+				    read_memory_ftype func)
+  : gdb_printing_disassembler (gdbarch, &m_buffer, func,
+			       dis_asm_memory_error, dis_asm_print_address),
+    m_dest (file),
+    m_buffer (!use_ext_lang_for_styling () && use_libopcodes_for_styling ())
+{ /* Nothing.  */ }
+
+/* See disasm.h.  */
+
+bool
+gdb_disassembler::use_ext_lang_for_styling () const
 {
-  init_disassemble_info (&m_di, file, fprintf_disasm);
+  /* The use of m_di.created_styled_output here is a bit of a cheat, but
+     it works fine for now.
+
+     This function is called in situations after m_di has been initialized,
+     but before the instruction has been disassembled.
+
+     Currently, every target that supports libopcodes styling sets the
+     created_styled_output field in disassemble_init_for_target, which was
+     called as part of the initialization of gdb_printing_disassembler.
+
+     This means that we are OK to check the created_styled_output field
+     here.
+
+     If, in the future, there's ever a target that only sets the
+     created_styled_output field during the actual instruction disassembly
+     phase, then we will need to update this code.  */
+  return (disassembler_styling
+	  && (!m_di.created_styled_output || !use_libopcodes_styling)
+	  && use_ext_lang_colorization_p
+	  && m_dest->can_emit_style_escape ());
+}
+
+/* See disasm.h.  */
+
+bool
+gdb_disassembler::use_libopcodes_for_styling () const
+{
+  /* See the comment on the use of m_di.created_styled_output in the
+     gdb_disassembler::use_ext_lang_for_styling function.  */
+  return (disassembler_styling
+	  && m_di.created_styled_output
+	  && use_libopcodes_styling
+	  && m_dest->can_emit_style_escape ());
+}
+
+/* See disasm.h.  */
+
+gdb_disassemble_info::gdb_disassemble_info
+  (struct gdbarch *gdbarch,
+   read_memory_ftype read_memory_func, memory_error_ftype memory_error_func,
+   print_address_ftype print_address_func, fprintf_ftype fprintf_func,
+   fprintf_styled_ftype fprintf_styled_func)
+    : m_gdbarch (gdbarch)
+{
+  gdb_assert (fprintf_func != nullptr);
+  gdb_assert (fprintf_styled_func != nullptr);
+  init_disassemble_info (&m_di, (void *) this, fprintf_func,
+			 fprintf_styled_func);
   m_di.flavour = bfd_target_unknown_flavour;
-  m_di.memory_error_func = dis_asm_memory_error;
-  m_di.print_address_func = dis_asm_print_address;
-  /* NOTE: cagney/2003-04-28: The original code, from the old Insight
-     disassembler had a local optimization here.  By default it would
-     access the executable file, instead of the target memory (there
-     was a growing list of exceptions though).  Unfortunately, the
-     heuristic was flawed.  Commands like "disassemble &variable"
-     didn't work as they relied on the access going to the target.
-     Further, it has been superseeded by trust-read-only-sections
-     (although that should be superseeded by target_trust..._p()).  */
-  m_di.read_memory_func = read_memory_func;
+
+  /* The memory_error_func, print_address_func, and read_memory_func are
+     all initialized to a default (non-nullptr) value by the call to
+     init_disassemble_info above.  If the user is overriding these fields
+     (by passing non-nullptr values) then do that now, otherwise, leave
+     these fields as the defaults.  */
+  if (memory_error_func != nullptr)
+    m_di.memory_error_func = memory_error_func;
+  if (print_address_func != nullptr)
+    m_di.print_address_func = print_address_func;
+  if (read_memory_func != nullptr)
+    m_di.read_memory_func = read_memory_func;
+
   m_di.arch = gdbarch_bfd_arch_info (gdbarch)->arch;
   m_di.mach = gdbarch_bfd_arch_info (gdbarch)->mach;
   m_di.endian = gdbarch_byte_order (gdbarch);
@@ -781,16 +1072,106 @@ gdb_disassembler::gdb_disassembler (stru
   disassemble_init_for_target (&m_di);
 }
 
+/* See disasm.h.  */
+
+gdb_disassemble_info::~gdb_disassemble_info ()
+{
+  disassemble_free_target (&m_di);
+}
+
+/* Wrapper around calling gdbarch_print_insn.  This function takes care of
+   first calling the extension language hooks for print_insn, and, if none
+   of the extension languages can print this instruction, calls
+   gdbarch_print_insn to do the work.
+
+   GDBARCH is the architecture to disassemble in, VMA is the address of the
+   instruction being disassembled, and INFO is the libopcodes disassembler
+   related information.  */
+
+static int
+gdb_print_insn_1 (struct gdbarch *gdbarch, CORE_ADDR vma,
+		  struct disassemble_info *info)
+{
+  /* Call into the extension languages to do the disassembly.  */
+  std::optional<int> length = ext_lang_print_insn (gdbarch, vma, info);
+  if (length.has_value ())
+    return *length;
+
+  /* No extension language wanted to do the disassembly, so do it
+     manually.  */
+  return gdbarch_print_insn (gdbarch, vma, info);
+}
+
+/* See disasm.h.  */
+
+bool gdb_disassembler::use_ext_lang_colorization_p = true;
+
+/* See disasm.h.  */
+
 int
 gdb_disassembler::print_insn (CORE_ADDR memaddr,
 			      int *branch_delay_insns)
 {
-  m_err_memaddr = 0;
+  m_err_memaddr.reset ();
+  m_buffer.clear ();
+  this->set_in_comment (false);
+
+  int length = gdb_print_insn_1 (arch (), memaddr, &m_di);
+
+  /* If we have successfully disassembled an instruction, disassembler
+     styling using the extension language is on, and libopcodes hasn't
+     already styled the output for us, and, if the destination can support
+     styling, then lets call into the extension languages in order to style
+     this output.  */
+  if (length > 0 && use_ext_lang_for_styling ())
+    {
+      std::optional<std::string> ext_contents;
+      ext_contents = ext_lang_colorize_disasm (m_buffer.string (), arch ());
+      if (ext_contents.has_value ())
+	m_buffer = std::move (*ext_contents);
+      else
+	{
+	  /* The extension language failed to add styling to the
+	     disassembly output.  Set the static flag so that next time we
+	     disassemble we don't even bother attempting to use the
+	     extension language for styling.  */
+	  use_ext_lang_colorization_p = false;
+
+	  /* We're about to disassemble this instruction again, reset the
+	     in-comment state.  */
+	  this->set_in_comment (false);
+
+	  /* The instruction we just disassembled, and the extension
+	     languages failed to style, might have otherwise had some
+	     minimal styling applied by GDB.  To regain that styling we
+	     need to recreate m_buffer, but this time with styling support.
+
+	     To do this we perform an in-place new, but this time turn on
+	     the styling support, then we can re-disassembly the
+	     instruction, and gain any minimal styling GDB might add.  */
+	  static_assert ((std::is_same<decltype (m_buffer),
+			      string_file>::value));
+	  gdb_assert (!m_buffer.term_out ());
+	  m_buffer.~string_file ();
+	  new (&m_buffer) string_file (use_libopcodes_for_styling ());
+	  length = gdb_print_insn_1 (arch (), memaddr, &m_di);
+	  gdb_assert (length > 0);
+	}
+    }
 
-  int length = gdbarch_print_insn (arch (), memaddr, &m_di);
+  /* Push any disassemble output to the real destination stream.  We do
+     this even if the disassembler reported failure (-1) as the
+     disassembler may have printed something to its output stream.  */
+  gdb_printf (m_dest, "%s", m_buffer.c_str ());
 
+  /* If the disassembler failed then report an appropriate error.  */
   if (length < 0)
-    memory_error (TARGET_XFER_E_IO, m_err_memaddr);
+    {
+      if (m_err_memaddr.has_value ())
+	memory_error (TARGET_XFER_E_IO, *m_err_memaddr);
+      else
+	error (_("unknown disassembler error (error = %d)"), length);
+    }
 
   if (branch_delay_insns != NULL)
     {
@@ -813,8 +1194,8 @@ gdb_disassembly (struct gdbarch *gdbarch
   /* Assume symtab is valid for whole PC range.  */
   symtab = find_pc_line_symtab (low);
 
-  if (symtab != NULL && SYMTAB_LINETABLE (symtab) != NULL)
-    nlines = SYMTAB_LINETABLE (symtab)->nitems;
+  if (symtab != NULL && symtab->linetable () != NULL)
+    nlines = symtab->linetable ()->nitems;
 
   if (!(flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
       || nlines <= 0)
@@ -854,47 +1235,48 @@ gdb_insn_length (struct gdbarch *gdbarch
   return gdb_print_insn (gdbarch, addr, &null_stream, NULL);
 }
 
-/* fprintf-function for gdb_buffered_insn_length.  This function is a
-   nop, we don't want to print anything, we just want to compute the
-   length of the insn.  */
+/* See disasm.h.  */
 
-static int ATTRIBUTE_PRINTF (2, 3)
-gdb_buffered_insn_length_fprintf (void *stream, const char *format, ...)
+int
+gdb_non_printing_disassembler::null_fprintf_func
+  (void *stream, const char *format, ...) noexcept
 {
   return 0;
 }
 
-/* Initialize a struct disassemble_info for gdb_buffered_insn_length.
-   Upon return, *DISASSEMBLER_OPTIONS_HOLDER owns the string pointed
-   to by DI.DISASSEMBLER_OPTIONS.  */
+/* See disasm.h.  */
 
-static void
-gdb_buffered_insn_length_init_dis (struct gdbarch *gdbarch,
-				   struct disassemble_info *di,
-				   const gdb_byte *insn, int max_len,
-				   CORE_ADDR addr,
-				   std::string *disassembler_options_holder)
-{
-  init_disassemble_info (di, NULL, gdb_buffered_insn_length_fprintf);
-
-  /* init_disassemble_info installs buffer_read_memory, etc.
-     so we don't need to do that here.
-     The cast is necessary until disassemble_info is const-ified.  */
-  di->buffer = (gdb_byte *) insn;
-  di->buffer_length = max_len;
-  di->buffer_vma = addr;
-
-  di->arch = gdbarch_bfd_arch_info (gdbarch)->arch;
-  di->mach = gdbarch_bfd_arch_info (gdbarch)->mach;
-  di->endian = gdbarch_byte_order (gdbarch);
-  di->endian_code = gdbarch_byte_order_for_code (gdbarch);
-
-  *disassembler_options_holder = get_all_disassembler_options (gdbarch);
-  if (!disassembler_options_holder->empty ())
-    di->disassembler_options = disassembler_options_holder->c_str ();
-  disassemble_init_for_target (di);
+int
+gdb_non_printing_disassembler::null_fprintf_styled_func
+  (void *stream, enum disassembler_style style,
+   const char *format, ...) noexcept
+{
+  return 0;
 }
 
+/* A non-printing disassemble_info management class.  The disassemble_info
+   setup by this class will not print anything to the output stream (there
+   is no output stream), and the instruction to be disassembled will be
+   read from a buffer passed to the constructor.  */
+
+struct gdb_non_printing_buffer_disassembler
+  : public gdb_non_printing_disassembler
+{
+  /* Constructor.  GDBARCH is the architecture to disassemble for, BUFFER
+     contains the instruction to disassemble, and INSN_ADDRESS is the
+     address (in target memory) of the instruction to disassemble.  */
+  gdb_non_printing_buffer_disassembler (struct gdbarch *gdbarch,
+					gdb::array_view<const gdb_byte> buffer,
+					CORE_ADDR insn_address)
+    : gdb_non_printing_disassembler (gdbarch, nullptr)
+  {
+    /* The cast is necessary until disassemble_info is const-ified.  */
+    m_di.buffer = (gdb_byte *) buffer.data ();
+    m_di.buffer_length = buffer.size ();
+    m_di.buffer_vma = insn_address;
+  }
+};
+
 /* Return the length in bytes of INSN.  MAX_LEN is the size of the
    buffer containing INSN.  */
 
@@ -902,13 +1284,11 @@ int
 gdb_buffered_insn_length (struct gdbarch *gdbarch,
 			  const gdb_byte *insn, int max_len, CORE_ADDR addr)
 {
-  struct disassemble_info di;
-  std::string disassembler_options_holder;
-
-  gdb_buffered_insn_length_init_dis (gdbarch, &di, insn, max_len, addr,
-				     &disassembler_options_holder);
-
-  return gdbarch_print_insn (gdbarch, addr, &di);
+  gdb::array_view<const gdb_byte> buffer
+    = gdb::make_array_view (insn, max_len);
+  gdb_non_printing_buffer_disassembler dis (gdbarch, buffer, addr);
+  int result = gdb_print_insn_1 (gdbarch, addr, dis.disasm_info ());
+  return result;
 }
 
 char *
@@ -921,13 +1301,16 @@ get_disassembler_options (struct gdbarch
 }
 
 void
-set_disassembler_options (char *prospective_options)
+set_disassembler_options (const char *prospective_options)
 {
   struct gdbarch *gdbarch = get_current_arch ();
   char **disassembler_options = gdbarch_disassembler_options (gdbarch);
   const disasm_options_and_args_t *valid_options_and_args;
   const disasm_options_t *valid_options;
-  char *options = remove_whitespace_and_extra_commas (prospective_options);
+  gdb::unique_xmalloc_ptr<char> prospective_options_local
+    = make_unique_xstrdup (prospective_options);
+  char *options = remove_whitespace_and_extra_commas
+    (prospective_options_local.get ());
   const char *opt;
 
   /* Allow all architectures, even ones that do not support 'set disassembler',
@@ -945,7 +1328,7 @@ set_disassembler_options (char *prospect
   valid_options_and_args = gdbarch_valid_disassembler_options (gdbarch);
   if (valid_options_and_args == NULL)
     {
-      fprintf_filtered (gdb_stderr, _("\
+      gdb_printf (gdb_stderr, _("\
 'set disassembler-options ...' is not supported on this architecture.\n"));
       return;
     }
@@ -967,6 +1350,8 @@ set_disassembler_options (char *prospect
 	    if (memcmp (opt, valid_options->name[i], len) != 0)
 	      continue;
 	    arg = opt + len;
+	    if (valid_options->arg[i]->values == NULL)
+	      break;
 	    for (j = 0; valid_options->arg[i]->values[j] != NULL; j++)
 	      if (disassembler_options_cmp
 		    (arg, valid_options->arg[i]->values[j]) == 0)
@@ -981,9 +1366,9 @@ set_disassembler_options (char *prospect
 	  break;
       if (valid_options->name[i] == NULL)
 	{
-	  fprintf_filtered (gdb_stderr,
-			    _("Invalid disassembler option value: '%s'.\n"),
-			    opt);
+	  gdb_printf (gdb_stderr,
+		      _("Invalid disassembler option value: '%s'.\n"),
+		      opt);
 	  return;
 	}
     }
@@ -996,7 +1381,7 @@ static void
 set_disassembler_options_sfunc (const char *args, int from_tty,
 				struct cmd_list_element *c)
 {
-  set_disassembler_options (prospective_options);
+  set_disassembler_options (prospective_options.c_str ());
 }
 
 static void
@@ -1012,22 +1397,22 @@ show_disassembler_options_sfunc (struct
   if (options == NULL)
     options = "";
 
-  fprintf_filtered (file, _("The current disassembler options are '%s'\n\n"),
-		    options);
+  gdb_printf (file, _("The current disassembler options are '%s'\n\n"),
+	      options);
 
   valid_options_and_args = gdbarch_valid_disassembler_options (gdbarch);
 
   if (valid_options_and_args == NULL)
     {
-      fputs_filtered (_("There are no disassembler options available "
-			"for this architecture.\n"),
-		      file);
+      gdb_puts (_("There are no disassembler options available "
+		  "for this architecture.\n"),
+		file);
       return;
     }
 
   valid_options = &valid_options_and_args->options;
 
-  fprintf_filtered (file, _("\
+  gdb_printf (file, _("\
 The following disassembler options are supported for use with the\n\
 'set disassembler-options OPTION [,OPTION]...' command:\n"));
 
@@ -1035,7 +1420,7 @@ The following disassembler options are s
     {
       size_t i, max_len = 0;
 
-      fprintf_filtered (file, "\n");
+      gdb_printf (file, "\n");
 
       /* Compute the length of the longest option name.  */
       for (i = 0; valid_options->name[i] != NULL; i++)
@@ -1050,35 +1435,35 @@ The following disassembler options are s
 
       for (i = 0, max_len++; valid_options->name[i] != NULL; i++)
 	{
-	  fprintf_filtered (file, "  %s", valid_options->name[i]);
+	  gdb_printf (file, "  %s", valid_options->name[i]);
 	  if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
-	    fprintf_filtered (file, "%s", valid_options->arg[i]->name);
+	    gdb_printf (file, "%s", valid_options->arg[i]->name);
 	  if (valid_options->description[i] != NULL)
 	    {
 	      size_t len = strlen (valid_options->name[i]);
 
 	      if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
 		len += strlen (valid_options->arg[i]->name);
-	      fprintf_filtered (file, "%*c %s", (int) (max_len - len), ' ',
-				valid_options->description[i]);
+	      gdb_printf (file, "%*c %s", (int) (max_len - len), ' ',
+			  valid_options->description[i]);
 	    }
-	  fprintf_filtered (file, "\n");
+	  gdb_printf (file, "\n");
 	}
     }
   else
     {
       size_t i;
-      fprintf_filtered (file, "  ");
+      gdb_printf (file, "  ");
       for (i = 0; valid_options->name[i] != NULL; i++)
 	{
-	  fprintf_filtered (file, "%s", valid_options->name[i]);
+	  gdb_printf (file, "%s", valid_options->name[i]);
 	  if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
-	    fprintf_filtered (file, "%s", valid_options->arg[i]->name);
+	    gdb_printf (file, "%s", valid_options->arg[i]->name);
 	  if (valid_options->name[i + 1] != NULL)
-	    fprintf_filtered (file, ", ");
-	  wrap_here ("  ");
+	    gdb_printf (file, ", ");
+	  file->wrap_here (2);
 	}
-      fprintf_filtered (file, "\n");
+      gdb_printf (file, "\n");
     }
 
   valid_args = valid_options_and_args->args;
@@ -1088,15 +1473,17 @@ The following disassembler options are s
 
       for (i = 0; valid_args[i].name != NULL; i++)
 	{
-	  fprintf_filtered (file, _("\n\
+	  if (valid_args[i].values == NULL)
+	    continue;
+	  gdb_printf (file, _("\n\
   For the options above, the following values are supported for \"%s\":\n   "),
-			    valid_args[i].name);
+		      valid_args[i].name);
 	  for (j = 0; valid_args[i].values[j] != NULL; j++)
 	    {
-	      fprintf_filtered (file, " %s", valid_args[i].values[j]);
-	      wrap_here ("   ");
+	      gdb_printf (file, " %s", valid_args[i].values[j]);
+	      file->wrap_here (3);
 	    }
-	  fprintf_filtered (file, "\n");
+	  gdb_printf (file, "\n");
 	}
     }
 }
@@ -1128,14 +1515,14 @@ disassembler_options_completer (struct c
 
 /* Initialization code.  */
 
+void _initialize_disasm ();
 void
-_initialize_disasm (void)
+_initialize_disasm ()
 {
-  struct cmd_list_element *cmd;
-
   /* Add the command that controls the disassembler options.  */
-  cmd = add_setshow_string_noescape_cmd ("disassembler-options", no_class,
-					 &prospective_options, _("\
+  set_show_commands set_show_disas_opts
+    = add_setshow_string_noescape_cmd ("disassembler-options", no_class,
+				       &prospective_options, _("\
 Set the disassembler options.\n\
 Usage: set disassembler-options OPTION [,OPTION]...\n\n\
 See: 'show disassembler-options' for valid option values."), _("\
@@ -1143,5 +1530,40 @@ Show the disassembler options."), NULL,
 					 set_disassembler_options_sfunc,
 					 show_disassembler_options_sfunc,
 					 &setlist, &showlist);
-  set_cmd_completer (cmd, disassembler_options_completer);
+  set_cmd_completer (set_show_disas_opts.set, disassembler_options_completer);
+
+
+  /* All the 'maint set|show libopcodes-styling' sub-commands.  */
+  static struct cmd_list_element *maint_set_libopcodes_styling_cmdlist;
+  static struct cmd_list_element *maint_show_libopcodes_styling_cmdlist;
+
+  /* Adds 'maint set|show libopcodes-styling'.  */
+  add_setshow_prefix_cmd ("libopcodes-styling", class_maintenance,
+			  _("Set libopcodes-styling specific variables."),
+			  _("Show libopcodes-styling specific variables."),
+			  &maint_set_libopcodes_styling_cmdlist,
+			  &maint_show_libopcodes_styling_cmdlist,
+			  &maintenance_set_cmdlist,
+			  &maintenance_show_cmdlist);
+
+  /* Adds 'maint set|show gnu-source-highlight enabled'.  */
+  add_setshow_boolean_cmd ("enabled", class_maintenance,
+			   &use_libopcodes_styling_option, _("\
+Set whether the libopcodes styling support should be used."), _("\
+Show whether the libopcodes styling support should be used."),_("\
+When enabled, GDB will try to make use of the builtin libopcodes styling\n\
+support, to style the disassembler output.  Not every architecture has\n\
+styling support within libopcodes, so enabling this is not a guarantee\n\
+that libopcodes styling will be available.\n\
+\n\
+When this option is disabled, GDB will make use of the Python Pygments\n\
+package (if available) to style the disassembler output.\n\
+\n\
+All disassembler styling can be disabled with:\n\
+\n\
+  set style disassembler enabled off"),
+			   set_use_libopcodes_styling,
+			   show_use_libopcodes_styling,
+			   &maint_set_libopcodes_styling_cmdlist,
+			   &maint_show_libopcodes_styling_cmdlist);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disasm-flags.h ./gdb/disasm-flags.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disasm-flags.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/disasm-flags.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,41 @@
+/* Disassemble flags for GDB.
+
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef DISASM_FLAGS_H
+#define DISASM_FLAGS_H
+
+#include "gdbsupport/enum-flags.h"
+
+/* Flags used to control how GDB's disassembler behaves.  */
+
+enum gdb_disassembly_flag : unsigned
+  {
+    DISASSEMBLY_SOURCE_DEPRECATED = (0x1 << 0),
+    DISASSEMBLY_RAW_INSN = (0x1 << 1),
+    DISASSEMBLY_OMIT_FNAME = (0x1 << 2),
+    DISASSEMBLY_FILENAME = (0x1 << 3),
+    DISASSEMBLY_OMIT_PC = (0x1 << 4),
+    DISASSEMBLY_SOURCE = (0x1 << 5),
+    DISASSEMBLY_SPECULATIVE = (0x1 << 6),
+    DISASSEMBLY_RAW_BYTES = (0x1 << 7),
+  };
+DEF_ENUM_FLAGS_TYPE (enum gdb_disassembly_flag, gdb_disassembly_flags);
+
+#endif /* DISASM_FLAGS_H */
+
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disasm.h ./gdb/disasm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disasm.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/disasm.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,5 +1,5 @@
 /* Disassemble support for GDB.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,66 +20,292 @@
 #define DISASM_H
 
 #include "dis-asm.h"
-#include "gdbsupport/enum-flags.h"
-
-enum gdb_disassembly_flag
-  {
-    DISASSEMBLY_SOURCE_DEPRECATED = (0x1 << 0),
-    DISASSEMBLY_RAW_INSN = (0x1 << 1),
-    DISASSEMBLY_OMIT_FNAME = (0x1 << 2),
-    DISASSEMBLY_FILENAME = (0x1 << 3),
-    DISASSEMBLY_OMIT_PC = (0x1 << 4),
-    DISASSEMBLY_SOURCE = (0x1 << 5),
-    DISASSEMBLY_SPECULATIVE = (0x1 << 6),
-  };
-DEF_ENUM_FLAGS_TYPE (enum gdb_disassembly_flag, gdb_disassembly_flags);
+#include "disasm-flags.h"
 
 struct gdbarch;
 struct ui_out;
 struct ui_file;
 
-class gdb_disassembler
-{
-  using di_read_memory_ftype = decltype (disassemble_info::read_memory_func);
-
-public:
-  gdb_disassembler (struct gdbarch *gdbarch, struct ui_file *file)
-    : gdb_disassembler (gdbarch, file, dis_asm_read_memory)
-  {}
+/* A wrapper around a disassemble_info and a gdbarch.  This is the core
+   set of data that all disassembler sub-classes will need.  This class
+   doesn't actually implement the disassembling process, that is something
+   that sub-classes will do, with each sub-class doing things slightly
+   differently.
+
+   The constructor of this class is protected, you should not create
+   instances of this class directly, instead create an instance of an
+   appropriate sub-class.  */
 
-  int print_insn (CORE_ADDR memaddr, int *branch_delay_insns = NULL);
+struct gdb_disassemble_info
+{
+  DISABLE_COPY_AND_ASSIGN (gdb_disassemble_info);
 
-  /* Return the gdbarch of gdb_disassembler.  */
+  /* Return the gdbarch we are disassembling for.  */
   struct gdbarch *arch ()
   { return m_gdbarch; }
 
+  /* Return a pointer to the disassemble_info, this will be needed for
+     passing into the libopcodes disassembler.  */
+  struct disassemble_info *disasm_info ()
+  { return &m_di; }
+
 protected:
-  gdb_disassembler (struct gdbarch *gdbarch, struct ui_file *file,
-		    di_read_memory_ftype func);
 
-  struct ui_file *stream ()
-  { return (struct ui_file *) m_di.stream; }
+  /* Types for the function callbacks within m_di.  The actual function
+     signatures here are taken from include/dis-asm.h.  */
+  using read_memory_ftype
+    = int (*) (bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *)
+	noexcept;
+  using memory_error_ftype
+    = void (*) (int, bfd_vma, struct disassemble_info *) noexcept;
+  using print_address_ftype
+    = void (*) (bfd_vma, struct disassemble_info *) noexcept;
+  using fprintf_ftype
+    = int (*) (void *, const char *, ...) noexcept;
+  using fprintf_styled_ftype
+    = int (*) (void *, enum disassembler_style, const char *, ...) noexcept;
+
+  /* Constructor, many fields in m_di are initialized from GDBARCH.  The
+     remaining arguments are function callbacks that are written into m_di.
+     Of these function callbacks FPRINTF_FUNC and FPRINTF_STYLED_FUNC must
+     not be nullptr.  If READ_MEMORY_FUNC, MEMORY_ERROR_FUNC, or
+     PRINT_ADDRESS_FUNC are nullptr, then that field within m_di is left
+     with its default value (see the libopcodes function
+     init_disassemble_info for the defaults).  */
+  gdb_disassemble_info (struct gdbarch *gdbarch,
+			read_memory_ftype read_memory_func,
+			memory_error_ftype memory_error_func,
+			print_address_ftype print_address_func,
+			fprintf_ftype fprintf_func,
+			fprintf_styled_ftype fprintf_styled_func);
 
-private:
-  struct gdbarch *m_gdbarch;
+  /* Destructor.  */
+  virtual ~gdb_disassemble_info ();
 
   /* Stores data required for disassembling instructions in
      opcodes.  */
   struct disassemble_info m_di;
 
+private:
+  /* The architecture we are disassembling for.  */
+  struct gdbarch *m_gdbarch;
+
   /* If we own the string in `m_di.disassembler_options', we do so
      using this field.  */
   std::string m_disassembler_options_holder;
+};
+
+/* A wrapper around gdb_disassemble_info.  This class adds default
+   print functions that are supplied to the disassemble_info within the
+   parent class.  These default print functions write to the stream, which
+   is also contained in the parent class.
+
+   As with the parent class, the constructor for this class is protected,
+   you should not create instances of this class, but create an
+   appropriate sub-class instead.  */
 
-  CORE_ADDR m_err_memaddr;
+struct gdb_printing_disassembler : public gdb_disassemble_info
+{
+  DISABLE_COPY_AND_ASSIGN (gdb_printing_disassembler);
+
+  /* The stream that disassembler output is being written too.  */
+  struct ui_file *stream ()
+  { return m_stream; }
 
+protected:
+
+  /* Constructor.  All the arguments are just passed to the parent class.
+     We also add the two print functions to the arguments passed to the
+     parent.  See gdb_disassemble_info for a description of how the
+     arguments are handled.  */
+  gdb_printing_disassembler (struct gdbarch *gdbarch,
+			     struct ui_file *stream,
+			     read_memory_ftype read_memory_func,
+			     memory_error_ftype memory_error_func,
+			     print_address_ftype print_address_func)
+    : gdb_disassemble_info (gdbarch, read_memory_func,
+			    memory_error_func, print_address_func,
+			    fprintf_func, fprintf_styled_func),
+      m_stream (stream)
+  {
+    gdb_assert (stream != nullptr);
+  }
+
+  /* Callback used as the disassemble_info's fprintf_func callback.  The
+     DIS_INFO pointer is a pointer to a gdb_printing_disassembler object.
+     Content is written to the m_stream extracted from DIS_INFO.  */
+  static int fprintf_func (void *dis_info, const char *format, ...) noexcept
+    ATTRIBUTE_PRINTF (2, 3);
+
+  /* Callback used as the disassemble_info's fprintf_styled_func callback.
+     The DIS_INFO pointer is a pointer to a gdb_printing_disassembler
+     object.  Content is written to the m_stream extracted from DIS_INFO.  */
+  static int fprintf_styled_func (void *dis_info,
+				  enum disassembler_style style,
+				  const char *format, ...) noexcept
+    ATTRIBUTE_PRINTF(3,4);
+
+  /* Return true if the disassembler is considered inside a comment, false
+     otherwise.  */
+  bool in_comment_p () const
+  { return m_in_comment; }
+
+  /* Set whether the disassembler should be considered as within comment
+     text or not.  */
+  void set_in_comment (bool c)
+  { m_in_comment = c; }
+
+private:
+
+  /* When libopcodes calls the fprintf_func and fprintf_styled_func
+     callbacks, a 'void *' argument is passed.  We arrange, through our
+     call to init_disassemble_info that this argument will be a pointer to
+     a gdb_disassemble_info sub-class, specifically, a
+     gdb_printing_disassembler pointer.  This helper function casts
+     DIS_INFO to the correct type (with some asserts), and then returns the
+     m_stream member variable.  */
+  static ui_file *stream_from_gdb_disassemble_info (void *dis_info);
+
+  /* The stream to which output should be sent.  */
+  struct ui_file *m_stream;
+
+  /* Are we inside a comment?  This will be set true if the disassembler
+     uses styled output and emits a start of comment character.  It is up
+     to the code that uses this disassembler class to reset this flag back
+     to false at a suitable time (e.g. at the end of every line).  */
+  bool m_in_comment = false;
+};
+
+/* A basic disassembler that doesn't actually print anything.  */
+
+struct gdb_non_printing_disassembler : public gdb_disassemble_info
+{
+  gdb_non_printing_disassembler (struct gdbarch *gdbarch,
+				 read_memory_ftype read_memory_func)
+    : gdb_disassemble_info (gdbarch,
+			    read_memory_func,
+			    nullptr /* memory_error_func */,
+			    nullptr /* print_address_func */,
+			    null_fprintf_func,
+			    null_fprintf_styled_func)
+  { /* Nothing.  */ }
+
+private:
+
+  /* Callback used as the disassemble_info's fprintf_func callback, this
+     doesn't write anything to STREAM, but just returns 0.  */
+  static int null_fprintf_func (void *stream, const char *format, ...) noexcept
+    ATTRIBUTE_PRINTF(2,3);
+
+  /* Callback used as the disassemble_info's fprintf_styled_func callback,
+     , this doesn't write anything to STREAM, but just returns 0.  */
+  static int null_fprintf_styled_func (void *stream,
+				       enum disassembler_style style,
+				       const char *format, ...) noexcept
+    ATTRIBUTE_PRINTF(3,4);
+};
+
+/* This is a helper class, for use as an additional base-class, by some of
+   the disassembler classes below.  This class just defines a static method
+   for reading from target memory, which can then be used by the various
+   disassembler sub-classes.  */
+
+struct gdb_disassembler_memory_reader
+{
+  /* Implements the read_memory_func disassemble_info callback.  */
   static int dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr,
 				  unsigned int len,
-				  struct disassemble_info *info);
+				  struct disassemble_info *info) noexcept;
+};
+
+/* A non-printing disassemble_info management class.  The disassemble_info
+   setup by this class will not print anything to the output stream (there
+   is no output stream), and the instruction to be disassembled will be
+   read from target memory.  */
+
+struct gdb_non_printing_memory_disassembler
+  : public gdb_non_printing_disassembler,
+    private gdb_disassembler_memory_reader
+{
+  /* Constructor.  GDBARCH is the architecture to disassemble for.  */
+  gdb_non_printing_memory_disassembler (struct gdbarch *gdbarch)
+    :gdb_non_printing_disassembler (gdbarch, dis_asm_read_memory)
+  { /* Nothing.  */ }
+};
+
+/* A disassembler class that provides 'print_insn', a method for
+   disassembling a single instruction to the output stream.  */
+
+struct gdb_disassembler : public gdb_printing_disassembler,
+			  private gdb_disassembler_memory_reader
+{
+  gdb_disassembler (struct gdbarch *gdbarch, struct ui_file *file)
+    : gdb_disassembler (gdbarch, file, dis_asm_read_memory)
+  { /* Nothing.  */ }
+
+  DISABLE_COPY_AND_ASSIGN (gdb_disassembler);
+
+  /* Disassemble a single instruction at MEMADDR to the ui_file* that was
+     passed to the constructor.  If a memory error occurs while
+     disassembling this instruction then an error will be thrown.  */
+  int print_insn (CORE_ADDR memaddr, int *branch_delay_insns = NULL);
+
+protected:
+  gdb_disassembler (struct gdbarch *gdbarch, struct ui_file *file,
+		    read_memory_ftype func);
+
+private:
+  /* This member variable is given a value by calling dis_asm_memory_error.
+     If after calling into the libopcodes disassembler we get back a
+     negative value (which indicates an error), then, if this variable has
+     a value, we report a memory error to the user, otherwise, we report a
+     non-memory error.  */
+  std::optional<CORE_ADDR> m_err_memaddr;
+
+  /* The stream to which disassembler output will be written.  */
+  ui_file *m_dest;
+
+  /* Disassembler output is built up into this buffer.  Whether this
+     string_file is created with styling support or not depends on the
+     value of use_ext_lang_colorization_p, as well as whether disassembler
+     styling in general is turned on, and also, whether *m_dest supports
+     styling or not.  */
+  string_file m_buffer;
+
+  /* When true, m_buffer will be created without styling support,
+     otherwise, m_buffer will be created with styling support.
+
+     This field will initially be true, but will be set to false if
+     ext_lang_colorize_disasm fails to add styling at any time.
+
+     If the extension language is going to add the styling then m_buffer
+     should be created without styling support, the extension language will
+     then add styling at the end of the disassembly process.
+
+     If the extension language is not going to add the styling, then we
+     create m_buffer with styling support, and GDB will add minimal styling
+     (currently just to addresses and symbols) as it goes.  */
+  static bool use_ext_lang_colorization_p;
+
   static void dis_asm_memory_error (int err, bfd_vma memaddr,
-				    struct disassemble_info *info);
+				    struct disassemble_info *info) noexcept;
   static void dis_asm_print_address (bfd_vma addr,
-				     struct disassemble_info *info);
+				     struct disassemble_info *info) noexcept;
+
+  /* Return true if we should use the extension language to apply
+     disassembler styling.  This requires disassembler styling to be on
+     (i.e. 'set style disassembler enabled on'), the output stream needs to
+     support styling, and libopcode styling needs to be either off, or not
+     supported for the current architecture (libopcodes is used in
+     preference to the extension language method).  */
+  bool use_ext_lang_for_styling () const;
+
+  /* Return true if we should use libopcodes to apply disassembler styling.
+     This requires disassembler styling to be on (i.e. 'set style
+     disassembler enabled on'), the output stream needs to support styling,
+     and libopcodes styling needs to be supported for the current
+     architecture, and not disabled by the user.  */
+  bool use_libopcodes_for_styling () const;
 };
 
 /* An instruction to be disassembled.  */
@@ -140,6 +366,9 @@ private:
 
   /* The buffer used to build the raw opcodes string.  */
   string_file m_opcode_stb;
+
+  /* The buffer used to hold the opcode bytes (if required).  */
+  gdb::byte_vector m_opcode_data;
 };
 
 /* Return the length in bytes of the instruction at address MEMADDR in
@@ -160,6 +389,6 @@ extern char *get_disassembler_options (s
 
 /* Sets the active gdbarch's disassembler options to OPTIONS.  */
 
-extern void set_disassembler_options (char *options);
+extern void set_disassembler_options (const char *options);
 
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disasm-selftests.c ./gdb/disasm-selftests.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/disasm-selftests.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/disasm-selftests.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Self tests for disassembler for GDB, the GNU debugger.
 
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,21 +19,25 @@
 
 #include "defs.h"
 #include "disasm.h"
-
-#if GDB_SELF_TEST
 #include "gdbsupport/selftest.h"
 #include "selftest-arch.h"
 #include "gdbarch.h"
 
 namespace selftests {
 
-/* Test disassembly of one instruction.  */
+/* Return a pointer to a buffer containing an instruction that can be
+   disassembled for architecture GDBARCH.  *LEN will be set to the length
+   of the returned buffer.
+
+   If there's no known instruction to disassemble for GDBARCH (because we
+   haven't figured on out, not because no instructions exist) then nullptr
+   is returned, and *LEN is set to 0.  */
 
-static void
-print_one_insn_test (struct gdbarch *gdbarch)
+static const gdb_byte *
+get_test_insn (struct gdbarch *gdbarch, size_t *len)
 {
-  size_t len = 0;
-  const gdb_byte *insn = NULL;
+  *len = 0;
+  const gdb_byte *insn = nullptr;
 
   switch (gdbarch_bfd_arch_info (gdbarch)->arch)
     {
@@ -42,40 +46,53 @@ print_one_insn_test (struct gdbarch *gdb
       static const gdb_byte bfin_insn[] = {0x17, 0xe1, 0xff, 0xff};
 
       insn = bfin_insn;
-      len = sizeof (bfin_insn);
+      *len = sizeof (bfin_insn);
       break;
     case bfd_arch_arm:
       /* mov     r0, #0 */
       static const gdb_byte arm_insn[] = {0x0, 0x0, 0xa0, 0xe3};
 
       insn = arm_insn;
-      len = sizeof (arm_insn);
+      *len = sizeof (arm_insn);
       break;
     case bfd_arch_ia64:
+      /* We get:
+	 internal-error: gdbarch_sw_breakpoint_from_kind:
+	 Assertion `gdbarch->sw_breakpoint_from_kind != NULL' failed.  */
+      return insn;
     case bfd_arch_mep:
+      /* Disassembles as '*unknown*' insn, then len self-check fails.  */
+      return insn;
     case bfd_arch_mips:
+      if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_mips16)
+	/* Disassembles insn, but len self-check fails.  */
+	return insn;
+      goto generic_case;
     case bfd_arch_tic6x:
+      /* Disassembles as '<undefined instruction 0x56454314>' insn, but len
+	 self-check passes, so let's allow it.  */
+      goto generic_case;
     case bfd_arch_xtensa:
-      return;
+      /* Disassembles insn, but len self-check fails.  */
+      return insn;
+    case bfd_arch_or1k:
+      /* Disassembles as '*unknown*' insn, but len self-check passes, so let's
+	 allow it.  */
+      goto generic_case;
     case bfd_arch_s390:
       /* nopr %r7 */
       static const gdb_byte s390_insn[] = {0x07, 0x07};
 
       insn = s390_insn;
-      len = sizeof (s390_insn);
+      *len = sizeof (s390_insn);
       break;
     case bfd_arch_xstormy16:
       /* nop */
       static const gdb_byte xstormy16_insn[] = {0x0, 0x0};
 
       insn = xstormy16_insn;
-      len = sizeof (xstormy16_insn);
+      *len = sizeof (xstormy16_insn);
       break;
-    case bfd_arch_arc:
-      /* PR 21003 */
-      if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_arc_arc601)
-	return;
-      /* fall through */
     case bfd_arch_nios2:
     case bfd_arch_score:
     case bfd_arch_riscv:
@@ -85,28 +102,104 @@ print_one_insn_test (struct gdbarch *gdb
       {
 	int bplen;
 	insn = gdbarch_sw_breakpoint_from_kind (gdbarch, 4, &bplen);
-	len = bplen;
+	*len = bplen;
       }
       break;
+    case bfd_arch_arc:
+      /* PR 21003 */
+      if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_arc_arc601)
+	return insn;
+      goto generic_case;
+    case bfd_arch_z80:
+      {
+	int bplen;
+	insn = gdbarch_sw_breakpoint_from_kind (gdbarch, 0x0008, &bplen);
+	*len = bplen;
+      }
+      break;
+    case bfd_arch_i386:
+      {
+	const struct bfd_arch_info *info = gdbarch_bfd_arch_info (gdbarch);
+	/* The disassembly tests will fail on x86-linux because
+	   opcodes rejects an attempt to disassemble for an arch with
+	   a 64-bit address size when bfd_vma is 32-bit.  */
+	if (info->bits_per_address > sizeof (bfd_vma) * CHAR_BIT)
+	  return insn;
+      }
+      [[fallthrough]];
     default:
+    generic_case:
       {
 	/* Test disassemble breakpoint instruction.  */
 	CORE_ADDR pc = 0;
-	int kind = gdbarch_breakpoint_kind_from_pc (gdbarch, &pc);
+	int kind;
 	int bplen;
 
-	insn = gdbarch_sw_breakpoint_from_kind (gdbarch, kind, &bplen);
-	len = bplen;
+	struct gdbarch_info info;
+	info.bfd_arch_info = gdbarch_bfd_arch_info (gdbarch);
+
+	enum gdb_osabi it;
+	bool found = false;
+	for (it = GDB_OSABI_UNKNOWN; it != GDB_OSABI_INVALID;
+	     it = static_cast<enum gdb_osabi>(static_cast<int>(it) + 1))
+	  {
+	    if (it == GDB_OSABI_UNKNOWN)
+	      continue;
+
+	    info.osabi = it;
+
+	    if (it != GDB_OSABI_NONE)
+	      {
+		if (!has_gdb_osabi_handler (info))
+		  /* Unsupported.  Skip to prevent warnings like:
+		     A handler for the OS ABI <x> is not built into this
+		     configuration of GDB.  Attempting to continue with the
+		     default <y> settings.  */
+		  continue;
+	      }
+
+	    gdbarch = gdbarch_find_by_info (info);
+	    SELF_CHECK (gdbarch != NULL);
+
+	    try
+	      {
+		kind = gdbarch_breakpoint_kind_from_pc (gdbarch, &pc);
+		insn = gdbarch_sw_breakpoint_from_kind (gdbarch, kind, &bplen);
+	      }
+	    catch (...)
+	      {
+		continue;
+	      }
+	    found = true;
+	    break;
+	  }
+
+	/* Assert that we have found an instruction to disassemble.  */
+	SELF_CHECK (found);
 
+	*len = bplen;
 	break;
       }
     }
-  SELF_CHECK (len > 0);
+  SELF_CHECK (*len > 0);
+
+  return insn;
+}
+
+/* Test disassembly of one instruction.  */
+
+static void
+print_one_insn_test (struct gdbarch *gdbarch)
+{
+  size_t len;
+  const gdb_byte *insn = get_test_insn (gdbarch, &len);
+
+  if (insn == nullptr)
+    return;
 
   /* Test gdb_disassembler for a given gdbarch by reading data from a
      pre-allocated buffer.  If you want to see the disassembled
-     instruction printed to gdb_stdout, set verbose to true.  */
-  static const bool verbose = false;
+     instruction printed to gdb_stdout, use maint selftest -verbose.  */
 
   class gdb_disassembler_test : public gdb_disassembler
   {
@@ -116,7 +209,7 @@ print_one_insn_test (struct gdbarch *gdb
 				    const gdb_byte *insn,
 				    size_t len)
       : gdb_disassembler (gdbarch,
-			  (verbose ? gdb_stdout : &null_stream),
+			  (run_verbose () ? gdb_stdlog : &null_stream),
 			  gdb_disassembler_test::read_memory),
 	m_insn (insn), m_len (len)
     {
@@ -125,16 +218,10 @@ print_one_insn_test (struct gdbarch *gdb
     int
     print_insn (CORE_ADDR memaddr)
     {
-      if (verbose)
-	{
-	  fprintf_unfiltered (stream (), "%s ",
-			      gdbarch_bfd_arch_info (arch ())->arch_name);
-	}
-
       int len = gdb_disassembler::print_insn (memaddr);
 
-      if (verbose)
-	fprintf_unfiltered (stream (), "\n");
+      if (run_verbose ())
+	debug_printf ("\n");
 
       return len;
     }
@@ -147,7 +234,8 @@ print_one_insn_test (struct gdbarch *gdb
     size_t m_len;
 
     static int read_memory (bfd_vma memaddr, gdb_byte *myaddr,
-			    unsigned int len, struct disassemble_info *info)
+			    unsigned int len,
+			    struct disassemble_info *info) noexcept
     {
       gdb_disassembler_test *self
 	= static_cast<gdb_disassembler_test *>(info->application_data);
@@ -167,6 +255,32 @@ print_one_insn_test (struct gdbarch *gdb
   SELF_CHECK (di.print_insn (0) == len);
 }
 
+/* Test the gdb_buffered_insn_length function.  */
+
+static void
+buffered_insn_length_test (struct gdbarch *gdbarch)
+{
+  size_t buf_len;
+  const gdb_byte *insn = get_test_insn (gdbarch, &buf_len);
+
+  if (insn == nullptr)
+    return;
+
+  /* The tic6x architecture is VLIW.  Disassembling requires that the
+     entire instruction bundle be available.  However, the buffer we got
+     back from get_test_insn only contains a single instruction, which is
+     just part of an instruction bundle.  As a result, the disassemble will
+     fail.  To avoid this, skip tic6x tests now.  */
+  if (gdbarch_bfd_arch_info (gdbarch)->arch == bfd_arch_tic6x)
+    return;
+
+  CORE_ADDR insn_address = 0;
+  int calculated_len = gdb_buffered_insn_length (gdbarch, insn, buf_len,
+						 insn_address);
+
+  SELF_CHECK (calculated_len == buf_len);
+}
+
 /* Test disassembly on memory error.  */
 
 static void
@@ -183,13 +297,23 @@ memory_error_test (struct gdbarch *gdbar
 
     static int read_memory (bfd_vma memaddr, gdb_byte *myaddr,
 			    unsigned int len,
-			    struct disassemble_info *info)
+			    struct disassemble_info *info) noexcept
     {
       /* Always return an error.  */
       return -1;
     }
   };
 
+  if (gdbarch_bfd_arch_info (gdbarch)->arch == bfd_arch_i386)
+    {
+      const struct bfd_arch_info *info = gdbarch_bfd_arch_info (gdbarch);
+      /* This test will fail on x86-linux because opcodes rejects an
+	 attempt to disassemble for an arch with a 64-bit address size
+	 when bfd_vma is 32-bit.  */
+      if (info->bits_per_address > sizeof (bfd_vma) * CHAR_BIT)
+	return;
+    }
+
   gdb_disassembler_test di (gdbarch);
   bool saw_memory_error = false;
 
@@ -208,15 +332,15 @@ memory_error_test (struct gdbarch *gdbar
 }
 
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
+void _initialize_disasm_selftests ();
 void
-_initialize_disasm_selftests (void)
+_initialize_disasm_selftests ()
 {
-#if GDB_SELF_TEST
   selftests::register_test_foreach_arch ("print_one_insn",
 					 selftests::print_one_insn_test);
   selftests::register_test_foreach_arch ("memory_error",
 					 selftests::memory_error_test);
-#endif
+  selftests::register_test_foreach_arch ("buffered_insn_length",
+					 selftests::buffered_insn_length_test);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/displaced-stepping.c ./gdb/displaced-stepping.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/displaced-stepping.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/displaced-stepping.c	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,331 @@
+/* Displaced stepping related things.
+
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "displaced-stepping.h"
+
+#include "cli/cli-cmds.h"
+#include "command.h"
+#include "gdbarch.h"
+#include "gdbcore.h"
+#include "gdbthread.h"
+#include "inferior.h"
+#include "regcache.h"
+#include "target/target.h"
+
+/* Default destructor for displaced_step_copy_insn_closure.  */
+
+displaced_step_copy_insn_closure::~displaced_step_copy_insn_closure ()
+  = default;
+
+bool debug_displaced = false;
+
+static void
+show_debug_displaced (struct ui_file *file, int from_tty,
+		      struct cmd_list_element *c, const char *value)
+{
+  gdb_printf (file, _("Displace stepping debugging is %s.\n"), value);
+}
+
+displaced_step_prepare_status
+displaced_step_buffers::prepare (thread_info *thread, CORE_ADDR &displaced_pc)
+{
+  gdb_assert (!thread->displaced_step_state.in_progress ());
+
+  /* Sanity check: the thread should not be using a buffer at this point.  */
+  for (displaced_step_buffer &buf : m_buffers)
+    gdb_assert (buf.current_thread != thread);
+
+  regcache *regcache = get_thread_regcache (thread);
+  gdbarch *arch = regcache->arch ();
+  ULONGEST len = gdbarch_displaced_step_buffer_length (arch);
+
+  /* Search for an unused buffer.  */
+  displaced_step_buffer *buffer = nullptr;
+  displaced_step_prepare_status fail_status
+    = DISPLACED_STEP_PREPARE_STATUS_CANT;
+
+  for (displaced_step_buffer &candidate : m_buffers)
+    {
+      bool bp_in_range = breakpoint_in_range_p (thread->inf->aspace.get (),
+						candidate.addr, len);
+      bool is_free = candidate.current_thread == nullptr;
+
+      if (!bp_in_range)
+	{
+	  if (is_free)
+	    {
+	      buffer = &candidate;
+	      break;
+	    }
+	  else
+	    {
+	      /* This buffer would be suitable, but it's used right now.  */
+	      fail_status = DISPLACED_STEP_PREPARE_STATUS_UNAVAILABLE;
+	    }
+	}
+      else
+	{
+	  /* There's a breakpoint set in the scratch pad location range
+	     (which is usually around the entry point).  We'd either
+	     install it before resuming, which would overwrite/corrupt the
+	     scratch pad, or if it was already inserted, this displaced
+	     step would overwrite it.  The latter is OK in the sense that
+	     we already assume that no thread is going to execute the code
+	     in the scratch pad range (after initial startup) anyway, but
+	     the former is unacceptable.  Simply punt and fallback to
+	     stepping over this breakpoint in-line.  */
+	  displaced_debug_printf ("breakpoint set in displaced stepping "
+				  "buffer at %s, can't use.",
+				  paddress (arch, candidate.addr));
+	}
+    }
+
+  if (buffer == nullptr)
+    return fail_status;
+
+  displaced_debug_printf ("selected buffer at %s",
+			  paddress (arch, buffer->addr));
+
+  /* Save the original PC of the thread.  */
+  buffer->original_pc = regcache_read_pc (regcache);
+
+  /* Return displaced step buffer address to caller.  */
+  displaced_pc = buffer->addr;
+
+  /* Save the original contents of the displaced stepping buffer.  */
+  buffer->saved_copy.resize (len);
+
+  int status = target_read_memory (buffer->addr,
+				    buffer->saved_copy.data (), len);
+  if (status != 0)
+    throw_error (MEMORY_ERROR,
+		 _("Error accessing memory address %s (%s) for "
+		   "displaced-stepping scratch space."),
+		 paddress (arch, buffer->addr), safe_strerror (status));
+
+  displaced_debug_printf ("saved %s: %s",
+			  paddress (arch, buffer->addr),
+			  bytes_to_string (buffer->saved_copy).c_str ());
+
+  /* Save this in a local variable first, so it's released if code below
+     throws.  */
+  displaced_step_copy_insn_closure_up copy_insn_closure
+    = gdbarch_displaced_step_copy_insn (arch, buffer->original_pc,
+					buffer->addr, regcache);
+
+  if (copy_insn_closure == nullptr)
+    {
+      /* The architecture doesn't know how or want to displaced step
+	 this instruction or instruction sequence.  Fallback to
+	 stepping over the breakpoint in-line.  */
+      return DISPLACED_STEP_PREPARE_STATUS_CANT;
+    }
+
+  /* This marks the buffer as being in use.  */
+  buffer->current_thread = thread;
+
+  /* Save this, now that we know everything went fine.  */
+  buffer->copy_insn_closure = std::move (copy_insn_closure);
+
+  /* Reset the displaced step buffer state if we failed to write PC.
+     Otherwise we will prevent this buffer from being used, as it will
+     always have a thread in buffer->current_thread.  */
+  auto reset_buffer = make_scope_exit
+    ([buffer] ()
+      {
+	buffer->current_thread = nullptr;
+	buffer->copy_insn_closure.reset ();
+      });
+
+  /* Adjust the PC so it points to the displaced step buffer address that will
+     be used.  This needs to be done after we save the copy_insn_closure, as
+     some architectures (Arm, for one) need that information so they can adjust
+     other data as needed.  In particular, Arm needs to know if the instruction
+     being executed in the displaced step buffer is thumb or not.  Without that
+     information, things will be very wrong in a random way.  */
+  regcache_write_pc (regcache, buffer->addr);
+
+  /* PC update successful.  Discard the displaced step state rollback.  */
+  reset_buffer.release ();
+
+  /* Tell infrun not to try preparing a displaced step again for this inferior if
+     all buffers are taken.  */
+  thread->inf->displaced_step_state.unavailable = true;
+  for (const displaced_step_buffer &buf : m_buffers)
+    {
+      if (buf.current_thread == nullptr)
+	{
+	  thread->inf->displaced_step_state.unavailable = false;
+	  break;
+	}
+    }
+
+  return DISPLACED_STEP_PREPARE_STATUS_OK;
+}
+
+static void
+write_memory_ptid (ptid_t ptid, CORE_ADDR memaddr,
+		   const gdb_byte *myaddr, int len)
+{
+  scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
+
+  inferior_ptid = ptid;
+  write_memory (memaddr, myaddr, len);
+}
+
+static bool
+displaced_step_instruction_executed_successfully
+  (gdbarch *arch, const target_waitstatus &status)
+{
+  if (status.kind () == TARGET_WAITKIND_STOPPED
+      && status.sig () != GDB_SIGNAL_TRAP)
+    return false;
+
+  /* All other (thread event) waitkinds can only happen if the
+     instruction fully executed.  For example, a fork, or a syscall
+     entry can only happen if the syscall instruction actually
+     executed.  */
+
+  if (target_stopped_by_watchpoint ())
+    {
+      if (gdbarch_have_nonsteppable_watchpoint (arch)
+	  || target_have_steppable_watchpoint ())
+	return false;
+    }
+
+  return true;
+}
+
+displaced_step_finish_status
+displaced_step_buffers::finish (gdbarch *arch, thread_info *thread,
+				const target_waitstatus &status)
+{
+  gdb_assert (thread->displaced_step_state.in_progress ());
+
+  /* Find the buffer this thread was using.  */
+  displaced_step_buffer *buffer = nullptr;
+
+  for (displaced_step_buffer &candidate : m_buffers)
+    {
+      if (candidate.current_thread == thread)
+	{
+	  buffer = &candidate;
+	  break;
+	}
+    }
+
+  gdb_assert (buffer != nullptr);
+
+  /* Move this to a local variable so it's released in case something goes
+     wrong.  */
+  displaced_step_copy_insn_closure_up copy_insn_closure
+    = std::move (buffer->copy_insn_closure);
+  gdb_assert (copy_insn_closure != nullptr);
+
+  /* Reset BUFFER->CURRENT_THREAD immediately to mark the buffer as available,
+     in case something goes wrong below.  */
+  buffer->current_thread = nullptr;
+
+  /* Now that a buffer gets freed, tell infrun it can ask us to prepare a displaced
+     step again for this inferior.  Do that here in case something goes wrong
+     below.  */
+  thread->inf->displaced_step_state.unavailable = false;
+
+  ULONGEST len = gdbarch_displaced_step_buffer_length (arch);
+
+  /* Restore memory of the buffer.  */
+  write_memory_ptid (thread->ptid, buffer->addr,
+		     buffer->saved_copy.data (), len);
+
+  displaced_debug_printf ("restored %s %s",
+			  thread->ptid.to_string ().c_str (),
+			  paddress (arch, buffer->addr));
+
+  /* If the thread exited while stepping, we are done.  The code above
+     made the buffer available again, and we restored the bytes in the
+     buffer.  We don't want to run the fixup: since the thread is now
+     dead there's nothing to adjust.  */
+  if (status.kind () == TARGET_WAITKIND_THREAD_EXITED)
+    return DISPLACED_STEP_FINISH_STATUS_OK;
+
+  regcache *rc = get_thread_regcache (thread);
+
+  bool instruction_executed_successfully
+    = displaced_step_instruction_executed_successfully (arch, status);
+
+  gdbarch_displaced_step_fixup (arch, copy_insn_closure.get (),
+				buffer->original_pc, buffer->addr,
+				rc, instruction_executed_successfully);
+
+  return (instruction_executed_successfully
+	  ? DISPLACED_STEP_FINISH_STATUS_OK
+	  : DISPLACED_STEP_FINISH_STATUS_NOT_EXECUTED);
+}
+
+const displaced_step_copy_insn_closure *
+displaced_step_buffers::copy_insn_closure_by_addr (CORE_ADDR addr)
+{
+  for (const displaced_step_buffer &buffer : m_buffers)
+    {
+      /* Make sure we have active buffers to compare to.  */
+      if (buffer.current_thread != nullptr && addr == buffer.addr)
+      {
+	/* The closure information should always be available. */
+	gdb_assert (buffer.copy_insn_closure.get () != nullptr);
+	return buffer.copy_insn_closure.get ();
+      }
+    }
+
+  return nullptr;
+}
+
+void
+displaced_step_buffers::restore_in_ptid (ptid_t ptid)
+{
+  for (const displaced_step_buffer &buffer : m_buffers)
+    {
+      if (buffer.current_thread == nullptr)
+	continue;
+
+      regcache *regcache = get_thread_regcache (buffer.current_thread);
+      gdbarch *arch = regcache->arch ();
+      ULONGEST len = gdbarch_displaced_step_buffer_length (arch);
+
+      write_memory_ptid (ptid, buffer.addr, buffer.saved_copy.data (), len);
+
+      displaced_debug_printf ("restored in ptid %s %s",
+			      ptid.to_string ().c_str (),
+			      paddress (arch, buffer.addr));
+    }
+}
+
+void _initialize_displaced_stepping ();
+void
+_initialize_displaced_stepping ()
+{
+  add_setshow_boolean_cmd ("displaced", class_maintenance,
+			   &debug_displaced, _("\
+Set displaced stepping debugging."), _("\
+Show displaced stepping debugging."), _("\
+When non-zero, displaced stepping specific debugging is enabled."),
+			    NULL,
+			    show_debug_displaced,
+			    &setdebuglist, &showdebuglist);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/displaced-stepping.h ./gdb/displaced-stepping.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/displaced-stepping.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/displaced-stepping.h	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,210 @@
+/* Displaced stepping related things.
+
+   Copyright (C) 2020-2024 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef DISPLACED_STEPPING_H
+#define DISPLACED_STEPPING_H
+
+#include "gdbsupport/array-view.h"
+#include "gdbsupport/byte-vector.h"
+
+struct gdbarch;
+struct thread_info;
+
+/* True if we are debugging displaced stepping.  */
+
+extern bool debug_displaced;
+
+/* Print a "displaced" debug statement.  */
+
+#define displaced_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (debug_displaced, "displaced",fmt, ##__VA_ARGS__)
+
+enum displaced_step_prepare_status
+{
+  /* A displaced stepping buffer was successfully allocated and prepared.  */
+  DISPLACED_STEP_PREPARE_STATUS_OK,
+
+  /* This particular instruction can't be displaced stepped, GDB should fall
+     back on in-line stepping.  */
+  DISPLACED_STEP_PREPARE_STATUS_CANT,
+
+  /* Not enough resources are available at this time, try again later.  */
+  DISPLACED_STEP_PREPARE_STATUS_UNAVAILABLE,
+};
+
+enum displaced_step_finish_status
+{
+  /* Either the instruction was stepped and fixed up, or the specified thread
+     wasn't executing a displaced step (in which case there's nothing to
+     finish). */
+  DISPLACED_STEP_FINISH_STATUS_OK,
+
+  /* The thread started a displaced step, but didn't complete it.  */
+  DISPLACED_STEP_FINISH_STATUS_NOT_EXECUTED,
+};
+
+/* Data returned by a gdbarch displaced_step_copy_insn method, to be passed to
+   the matching displaced_step_fixup method.  */
+
+struct displaced_step_copy_insn_closure
+{
+  virtual ~displaced_step_copy_insn_closure () = 0;
+};
+
+using displaced_step_copy_insn_closure_up
+  = std::unique_ptr<displaced_step_copy_insn_closure>;
+
+/* A simple displaced step closure that contains only a byte buffer.  */
+
+struct buf_displaced_step_copy_insn_closure : displaced_step_copy_insn_closure
+{
+  buf_displaced_step_copy_insn_closure (int buf_size)
+  : buf (buf_size)
+  {}
+
+  /* The content of this buffer is up to the user of the class, but typically
+     original instruction bytes, used during fixup to determine what needs to
+     be fixed up.  */
+  gdb::byte_vector buf;
+};
+
+/* Per-inferior displaced stepping state.  */
+
+struct displaced_step_inferior_state
+{
+  displaced_step_inferior_state ()
+  {
+    reset ();
+  }
+
+  /* Put this object back in its original state.  */
+  void reset ()
+  {
+    failed_before = false;
+    in_progress_count = 0;
+    unavailable = false;
+  }
+
+  /* True if preparing a displaced step ever failed.  If so, we won't
+     try displaced stepping for this inferior again.  */
+  bool failed_before;
+
+  /* Number of displaced steps in progress for this inferior.  */
+  unsigned int in_progress_count;
+
+  /* If true, this tells GDB that it's not worth asking the gdbarch displaced
+     stepping implementation to prepare a displaced step, because it would
+     return UNAVAILABLE.  This is set and reset by the gdbarch in the
+     displaced_step_prepare and displaced_step_finish methods.  */
+  bool unavailable;
+};
+
+/* Per-thread displaced stepping state.  */
+
+struct displaced_step_thread_state
+{
+  /* Return true if this thread is currently executing a displaced step.  */
+  bool in_progress () const
+  {
+    return m_original_gdbarch != nullptr;
+  }
+
+  /* Return the gdbarch of the thread prior to the step.  */
+  gdbarch *get_original_gdbarch () const
+  {
+    return m_original_gdbarch;
+  }
+
+  /* Mark this thread as currently executing a displaced step.
+
+     ORIGINAL_GDBARCH is the current gdbarch of the thread (before the step
+     is executed).  */
+  void set (gdbarch *original_gdbarch)
+  {
+    m_original_gdbarch = original_gdbarch;
+  }
+
+  /* Mark this thread as no longer executing a displaced step.  */
+  void reset ()
+  {
+    m_original_gdbarch = nullptr;
+  }
+
+private:
+  gdbarch *m_original_gdbarch = nullptr;
+};
+
+/* Control access to multiple displaced stepping buffers at fixed addresses.  */
+
+struct displaced_step_buffers
+{
+  explicit displaced_step_buffers (gdb::array_view<CORE_ADDR> buffer_addrs)
+  {
+    gdb_assert (buffer_addrs.size () > 0);
+
+    m_buffers.reserve (buffer_addrs.size ());
+
+    for (CORE_ADDR buffer_addr : buffer_addrs)
+      m_buffers.emplace_back (buffer_addr);
+  }
+
+  displaced_step_prepare_status prepare (thread_info *thread,
+					 CORE_ADDR &displaced_pc);
+
+  displaced_step_finish_status finish (gdbarch *arch, thread_info *thread,
+				       const target_waitstatus &status);
+
+  const displaced_step_copy_insn_closure *
+    copy_insn_closure_by_addr (CORE_ADDR addr);
+
+  void restore_in_ptid (ptid_t ptid);
+
+private:
+
+  /* State of a single buffer.  */
+
+  struct displaced_step_buffer
+  {
+    explicit displaced_step_buffer (CORE_ADDR addr)
+      : addr (addr)
+    {}
+
+    /* Address of the buffer.  */
+    const CORE_ADDR addr;
+
+    /* The original PC of the instruction currently being stepped.  */
+    CORE_ADDR original_pc = 0;
+
+    /* If set, the thread currently using the buffer.  If unset, the buffer is not
+       used.  */
+    thread_info *current_thread = nullptr;
+
+    /* Saved copy of the bytes in the displaced buffer, to be restored once the
+       buffer is no longer used.  */
+    gdb::byte_vector saved_copy;
+
+    /* Closure obtained from gdbarch_displaced_step_copy_insn, to be passed to
+       gdbarch_displaced_step_fixup_insn.  */
+    displaced_step_copy_insn_closure_up copy_insn_closure;
+  };
+
+  std::vector<displaced_step_buffer> m_buffers;
+};
+
+#endif /* DISPLACED_STEPPING_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-lang.c ./gdb/d-lang.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-lang.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/d-lang.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* D language support routines for GDB, the GNU debugger.
 
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,6 +26,7 @@
 #include "demangle.h"
 #include "cp-support.h"
 #include "gdbarch.h"
+#include "parser-defs.h"
 
 /* The name of the symbol to use to get the name of the main subprogram.  */
 static const char D_MAIN[] = "D main";
@@ -50,302 +51,239 @@ d_main_name (void)
 
 /* Implements the la_demangle language_defn routine for language D.  */
 
-char *
+gdb::unique_xmalloc_ptr<char>
 d_demangle (const char *symbol, int options)
 {
   return gdb_demangle (symbol, options | DMGL_DLANG);
 }
 
-/* la_sniff_from_mangled_name implementation for D.  */
+/* Class representing the D language.  */
 
-static int
-d_sniff_from_mangled_name (const char *mangled, char **demangled)
+class d_language : public language_defn
 {
-  *demangled = d_demangle (mangled, 0);
-  return *demangled != NULL;
-}
-
-/* Table mapping opcodes into strings for printing operators
-   and precedences of the operators.  */
-static const struct op_print d_op_print_tab[] =
-{
-  {",", BINOP_COMMA, PREC_COMMA, 0},
-  {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
-  {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
-  {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
-  {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
-  {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
-  {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
-  {"==", BINOP_EQUAL, PREC_ORDER, 0},
-  {"!=", BINOP_NOTEQUAL, PREC_ORDER, 0},
-  {"<=", BINOP_LEQ, PREC_ORDER, 0},
-  {">=", BINOP_GEQ, PREC_ORDER, 0},
-  {">", BINOP_GTR, PREC_ORDER, 0},
-  {"<", BINOP_LESS, PREC_ORDER, 0},
-  {">>", BINOP_RSH, PREC_SHIFT, 0},
-  {"<<", BINOP_LSH, PREC_SHIFT, 0},
-  {"+", BINOP_ADD, PREC_ADD, 0},
-  {"-", BINOP_SUB, PREC_ADD, 0},
-  {"~", BINOP_CONCAT, PREC_ADD, 0},
-  {"*", BINOP_MUL, PREC_MUL, 0},
-  {"/", BINOP_DIV, PREC_MUL, 0},
-  {"%", BINOP_REM, PREC_MUL, 0},
-  {"^^", BINOP_EXP, PREC_REPEAT, 0},
-  {"@", BINOP_REPEAT, PREC_REPEAT, 0},
-  {"-", UNOP_NEG, PREC_PREFIX, 0},
-  {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
-  {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
-  {"*", UNOP_IND, PREC_PREFIX, 0},
-  {"&", UNOP_ADDR, PREC_PREFIX, 0},
-  {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
-  {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
-  {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
-  {NULL, OP_NULL, PREC_PREFIX, 0}
-};
+public:
+  d_language ()
+    : language_defn (language_d)
+  { /* Nothing.  */ }
+
+  /* See language.h.  */
+
+  const char *name () const override
+  { return "d"; }
+
+  /* See language.h.  */
+
+  const char *natural_name () const override
+  { return "D"; }
+
+  /* See language.h.  */
+
+  const std::vector<const char *> &filename_extensions () const override
+  {
+    static const std::vector<const char *> extensions = { ".d" };
+    return extensions;
+  }
+
+  /* See language.h.  */
+  void language_arch_info (struct gdbarch *gdbarch,
+			   struct language_arch_info *lai) const override
+  {
+    const struct builtin_d_type *builtin = builtin_d_type (gdbarch);
+
+    /* Helper function to allow shorter lines below.  */
+    auto add  = [&] (struct type * t)
+    {
+      lai->add_primitive_type (t);
+    };
+
+    add (builtin->builtin_void);
+    add (builtin->builtin_bool);
+    add (builtin->builtin_byte);
+    add (builtin->builtin_ubyte);
+    add (builtin->builtin_short);
+    add (builtin->builtin_ushort);
+    add (builtin->builtin_int);
+    add (builtin->builtin_uint);
+    add (builtin->builtin_long);
+    add (builtin->builtin_ulong);
+    add (builtin->builtin_cent);
+    add (builtin->builtin_ucent);
+    add (builtin->builtin_float);
+    add (builtin->builtin_double);
+    add (builtin->builtin_real);
+    add (builtin->builtin_ifloat);
+    add (builtin->builtin_idouble);
+    add (builtin->builtin_ireal);
+    add (builtin->builtin_cfloat);
+    add (builtin->builtin_cdouble);
+    add (builtin->builtin_creal);
+    add (builtin->builtin_char);
+    add (builtin->builtin_wchar);
+    add (builtin->builtin_dchar);
+
+    lai->set_string_char_type (builtin->builtin_char);
+    lai->set_bool_type (builtin->builtin_bool, "bool");
+  }
+
+  /* See language.h.  */
+  bool sniff_from_mangled_name
+       (const char *mangled,
+	gdb::unique_xmalloc_ptr<char> *demangled) const override
+  {
+    *demangled = d_demangle (mangled, 0);
+    return *demangled != NULL;
+  }
+
+  /* See language.h.  */
+
+  gdb::unique_xmalloc_ptr<char> demangle_symbol (const char *mangled,
+						 int options) const override
+  {
+    return d_demangle (mangled, options);
+  }
+
+  /* See language.h.  */
+
+  bool can_print_type_offsets () const override
+  {
+    return true;
+  }
+
+  /* See language.h.  */
+
+  void print_type (struct type *type, const char *varstring,
+		   struct ui_file *stream, int show, int level,
+		   const struct type_print_options *flags) const override
+  {
+    c_print_type (type, varstring, stream, show, level, la_language, flags);
+  }
+
+  /* See language.h.  */
+
+  void value_print_inner
+	(struct value *val, struct ui_file *stream, int recurse,
+	 const struct value_print_options *options) const override
+  {
+    return d_value_print_inner (val, stream, recurse, options);
+  }
+
+  /* See language.h.  */
+
+  struct block_symbol lookup_symbol_nonlocal
+	(const char *name, const struct block *block,
+	 const domain_search_flags domain) const override
+  {
+    return d_lookup_symbol_nonlocal (this, name, block, domain);
+  }
+
+  /* See language.h.  */
+
+  int parser (struct parser_state *ps) const override
+  {
+    return d_parse (ps);
+  }
 
-/* Mapping of all D basic data types into the language vector.  */
+  /* See language.h.  */
 
-enum d_primitive_types {
-  d_primitive_type_void,
-  d_primitive_type_bool,
-  d_primitive_type_byte,
-  d_primitive_type_ubyte,
-  d_primitive_type_short,
-  d_primitive_type_ushort,
-  d_primitive_type_int,
-  d_primitive_type_uint,
-  d_primitive_type_long,
-  d_primitive_type_ulong,
-  d_primitive_type_cent,    /* Signed 128 bit integer.  */
-  d_primitive_type_ucent,   /* Unsigned 128 bit integer.  */
-  d_primitive_type_float,
-  d_primitive_type_double,
-  d_primitive_type_real,
-  d_primitive_type_ifloat,  /* Imaginary float types.  */
-  d_primitive_type_idouble,
-  d_primitive_type_ireal,
-  d_primitive_type_cfloat,  /* Complex number of two float values.  */
-  d_primitive_type_cdouble,
-  d_primitive_type_creal,
-  d_primitive_type_char,    /* Unsigned character types.  */
-  d_primitive_type_wchar,
-  d_primitive_type_dchar,
-  nr_d_primitive_types
+  const char *name_of_this () const override
+  { return "this"; }
 };
 
-/* Implements the la_language_arch_info language_defn routine
-   for language D.  */
-
-static void
-d_language_arch_info (struct gdbarch *gdbarch,
-		      struct language_arch_info *lai)
-{
-  const struct builtin_d_type *builtin = builtin_d_type (gdbarch);
-
-  lai->string_char_type = builtin->builtin_char;
-  lai->primitive_type_vector
-    = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_d_primitive_types + 1,
-			      struct type *);
-
-  lai->primitive_type_vector [d_primitive_type_void]
-    = builtin->builtin_void;
-  lai->primitive_type_vector [d_primitive_type_bool]
-    = builtin->builtin_bool;
-  lai->primitive_type_vector [d_primitive_type_byte]
-    = builtin->builtin_byte;
-  lai->primitive_type_vector [d_primitive_type_ubyte]
-    = builtin->builtin_ubyte;
-  lai->primitive_type_vector [d_primitive_type_short]
-    = builtin->builtin_short;
-  lai->primitive_type_vector [d_primitive_type_ushort]
-    = builtin->builtin_ushort;
-  lai->primitive_type_vector [d_primitive_type_int]
-    = builtin->builtin_int;
-  lai->primitive_type_vector [d_primitive_type_uint]
-    = builtin->builtin_uint;
-  lai->primitive_type_vector [d_primitive_type_long]
-    = builtin->builtin_long;
-  lai->primitive_type_vector [d_primitive_type_ulong]
-    = builtin->builtin_ulong;
-  lai->primitive_type_vector [d_primitive_type_cent]
-    = builtin->builtin_cent;
-  lai->primitive_type_vector [d_primitive_type_ucent]
-    = builtin->builtin_ucent;
-  lai->primitive_type_vector [d_primitive_type_float]
-    = builtin->builtin_float;
-  lai->primitive_type_vector [d_primitive_type_double]
-    = builtin->builtin_double;
-  lai->primitive_type_vector [d_primitive_type_real]
-    = builtin->builtin_real;
-  lai->primitive_type_vector [d_primitive_type_ifloat]
-    = builtin->builtin_ifloat;
-  lai->primitive_type_vector [d_primitive_type_idouble]
-    = builtin->builtin_idouble;
-  lai->primitive_type_vector [d_primitive_type_ireal]
-    = builtin->builtin_ireal;
-  lai->primitive_type_vector [d_primitive_type_cfloat]
-    = builtin->builtin_cfloat;
-  lai->primitive_type_vector [d_primitive_type_cdouble]
-    = builtin->builtin_cdouble;
-  lai->primitive_type_vector [d_primitive_type_creal]
-    = builtin->builtin_creal;
-  lai->primitive_type_vector [d_primitive_type_char]
-    = builtin->builtin_char;
-  lai->primitive_type_vector [d_primitive_type_wchar]
-    = builtin->builtin_wchar;
-  lai->primitive_type_vector [d_primitive_type_dchar]
-    = builtin->builtin_dchar;
-
-  lai->bool_type_symbol = "bool";
-  lai->bool_type_default = builtin->builtin_bool;
-}
-
-static const char *d_extensions[] =
-{
-  ".d", NULL
-};
+/* Single instance of the D language class.  */
 
-extern const struct language_defn d_language_defn =
-{
-  "d",
-  "D",
-  language_d,
-  range_check_off,
-  case_sensitive_on,
-  array_row_major,
-  macro_expansion_no,
-  d_extensions,
-  &exp_descriptor_c,
-  d_parse,
-  null_post_parser,
-  c_printchar,			/* Print a character constant.  */
-  c_printstr,			/* Function to print string constant.  */
-  c_emit_char,			/* Print a single char.  */
-  c_print_type,			/* Print a type using appropriate syntax.  */
-  c_print_typedef,		/* Print a typedef using appropriate
-				   syntax.  */
-  d_val_print,			/* Print a value using appropriate syntax.  */
-  c_value_print,		/* Print a top-level value.  */
-  default_read_var_value,	/* la_read_var_value */
-  NULL,				/* Language specific skip_trampoline.  */
-  "this",
-  false,			/* la_store_sym_names_in_linkage_form_p */
-  d_lookup_symbol_nonlocal,
-  basic_lookup_transparent_type,
-  d_demangle,			/* Language specific symbol demangler.  */
-  d_sniff_from_mangled_name,
-  NULL,				/* Language specific
-				   class_name_from_physname.  */
-  d_op_print_tab,		/* Expression operators for printing.  */
-  1,				/* C-style arrays.  */
-  0,				/* String lower bound.  */
-  default_word_break_characters,
-  default_collect_symbol_completion_matches,
-  d_language_arch_info,
-  default_print_array_index,
-  default_pass_by_reference,
-  c_watch_location_expression,
-  NULL,				/* la_get_symbol_name_matcher */
-  iterate_over_symbols,
-  default_search_name_hash,
-  &default_varobj_ops,
-  NULL,
-  NULL,
-  c_is_string_type_p,
-  "{...}"			/* la_struct_too_deep_ellipsis */
-};
+static d_language d_language_defn;
 
 /* Build all D language types for the specified architecture.  */
 
-static void *
+static struct builtin_d_type *
 build_d_types (struct gdbarch *gdbarch)
 {
-  struct builtin_d_type *builtin_d_type
-    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_d_type);
+  struct builtin_d_type *builtin_d_type = new struct builtin_d_type;
 
   /* Basic types.  */
-  builtin_d_type->builtin_void
-    = arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, "void");
+  type_allocator alloc (gdbarch);
+  builtin_d_type->builtin_void = builtin_type (gdbarch)->builtin_void;
   builtin_d_type->builtin_bool
-    = arch_boolean_type (gdbarch, 8, 1, "bool");
+    = init_boolean_type (alloc, 8, 1, "bool");
   builtin_d_type->builtin_byte
-    = arch_integer_type (gdbarch, 8, 0, "byte");
+    = init_integer_type (alloc, 8, 0, "byte");
   builtin_d_type->builtin_ubyte
-    = arch_integer_type (gdbarch, 8, 1, "ubyte");
+    = init_integer_type (alloc, 8, 1, "ubyte");
   builtin_d_type->builtin_short
-    = arch_integer_type (gdbarch, 16, 0, "short");
+    = init_integer_type (alloc, 16, 0, "short");
   builtin_d_type->builtin_ushort
-    = arch_integer_type (gdbarch, 16, 1, "ushort");
+    = init_integer_type (alloc, 16, 1, "ushort");
   builtin_d_type->builtin_int
-    = arch_integer_type (gdbarch, 32, 0, "int");
+    = init_integer_type (alloc, 32, 0, "int");
   builtin_d_type->builtin_uint
-    = arch_integer_type (gdbarch, 32, 1, "uint");
+    = init_integer_type (alloc, 32, 1, "uint");
   builtin_d_type->builtin_long
-    = arch_integer_type (gdbarch, 64, 0, "long");
+    = init_integer_type (alloc, 64, 0, "long");
   builtin_d_type->builtin_ulong
-    = arch_integer_type (gdbarch, 64, 1, "ulong");
+    = init_integer_type (alloc, 64, 1, "ulong");
   builtin_d_type->builtin_cent
-    = arch_integer_type (gdbarch, 128, 0, "cent");
+    = init_integer_type (alloc, 128, 0, "cent");
   builtin_d_type->builtin_ucent
-    = arch_integer_type (gdbarch, 128, 1, "ucent");
+    = init_integer_type (alloc, 128, 1, "ucent");
   builtin_d_type->builtin_float
-    = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
+    = init_float_type (alloc, gdbarch_float_bit (gdbarch),
 		       "float", gdbarch_float_format (gdbarch));
   builtin_d_type->builtin_double
-    = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
+    = init_float_type (alloc, gdbarch_double_bit (gdbarch),
 		       "double", gdbarch_double_format (gdbarch));
   builtin_d_type->builtin_real
-    = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
+    = init_float_type (alloc, gdbarch_long_double_bit (gdbarch),
 		       "real", gdbarch_long_double_format (gdbarch));
 
-  TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_byte)
-    |= TYPE_INSTANCE_FLAG_NOTTEXT;
-  TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_ubyte)
-    |= TYPE_INSTANCE_FLAG_NOTTEXT;
+  builtin_d_type->builtin_byte->set_instance_flags
+    (builtin_d_type->builtin_byte->instance_flags ()
+     | TYPE_INSTANCE_FLAG_NOTTEXT);
+
+  builtin_d_type->builtin_ubyte->set_instance_flags
+    (builtin_d_type->builtin_ubyte->instance_flags ()
+     | TYPE_INSTANCE_FLAG_NOTTEXT);
 
   /* Imaginary and complex types.  */
   builtin_d_type->builtin_ifloat
-    = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
+    = init_float_type (alloc, gdbarch_float_bit (gdbarch),
 		       "ifloat", gdbarch_float_format (gdbarch));
   builtin_d_type->builtin_idouble
-    = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
+    = init_float_type (alloc, gdbarch_double_bit (gdbarch),
 		       "idouble", gdbarch_double_format (gdbarch));
   builtin_d_type->builtin_ireal
-    = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
+    = init_float_type (alloc, gdbarch_long_double_bit (gdbarch),
 		       "ireal", gdbarch_long_double_format (gdbarch));
   builtin_d_type->builtin_cfloat
-    = arch_complex_type (gdbarch, "cfloat",
-			 builtin_d_type->builtin_float);
+    = init_complex_type ("cfloat", builtin_d_type->builtin_float);
   builtin_d_type->builtin_cdouble
-    = arch_complex_type (gdbarch, "cdouble",
-			 builtin_d_type->builtin_double);
+    = init_complex_type ("cdouble", builtin_d_type->builtin_double);
   builtin_d_type->builtin_creal
-    = arch_complex_type (gdbarch, "creal",
-			 builtin_d_type->builtin_real);
+    = init_complex_type ("creal", builtin_d_type->builtin_real);
 
   /* Character types.  */
   builtin_d_type->builtin_char
-    = arch_character_type (gdbarch, 8, 1, "char");
+    = init_character_type (alloc, 8, 1, "char");
   builtin_d_type->builtin_wchar
-    = arch_character_type (gdbarch, 16, 1, "wchar");
+    = init_character_type (alloc, 16, 1, "wchar");
   builtin_d_type->builtin_dchar
-    = arch_character_type (gdbarch, 32, 1, "dchar");
+    = init_character_type (alloc, 32, 1, "dchar");
 
   return builtin_d_type;
 }
 
-static struct gdbarch_data *d_type_data;
+static const registry<gdbarch>::key<struct builtin_d_type> d_type_data;
 
 /* Return the D type table for the specified architecture.  */
 
 const struct builtin_d_type *
 builtin_d_type (struct gdbarch *gdbarch)
 {
-  return (const struct builtin_d_type *) gdbarch_data (gdbarch, d_type_data);
-}
+  struct builtin_d_type *result = d_type_data.get (gdbarch);
+  if (result == nullptr)
+    {
+      result = build_d_types (gdbarch);
+      d_type_data.set (gdbarch, result);
+    }
 
-void
-_initialize_d_language (void)
-{
-  d_type_data = gdbarch_data_register_post_init (build_d_types);
+  return result;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-lang.h ./gdb/d-lang.h
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-lang.h	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/d-lang.h	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* D language support definitions for GDB, the GNU debugger.
 
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,30 +28,30 @@
 
 struct builtin_d_type
 {
-  struct type *builtin_void;
-  struct type *builtin_bool;
-  struct type *builtin_byte;
-  struct type *builtin_ubyte;
-  struct type *builtin_short;
-  struct type *builtin_ushort;
-  struct type *builtin_int;
-  struct type *builtin_uint;
-  struct type *builtin_long;
-  struct type *builtin_ulong;
-  struct type *builtin_cent;
-  struct type *builtin_ucent;
-  struct type *builtin_float;
-  struct type *builtin_double;
-  struct type *builtin_real;
-  struct type *builtin_ifloat;
-  struct type *builtin_idouble;
-  struct type *builtin_ireal;
-  struct type *builtin_cfloat;
-  struct type *builtin_cdouble;
-  struct type *builtin_creal;
-  struct type *builtin_char;
-  struct type *builtin_wchar;
-  struct type *builtin_dchar;
+  struct type *builtin_void = nullptr;
+  struct type *builtin_bool = nullptr;
+  struct type *builtin_byte = nullptr;
+  struct type *builtin_ubyte = nullptr;
+  struct type *builtin_short = nullptr;
+  struct type *builtin_ushort = nullptr;
+  struct type *builtin_int = nullptr;
+  struct type *builtin_uint = nullptr;
+  struct type *builtin_long = nullptr;
+  struct type *builtin_ulong = nullptr;
+  struct type *builtin_cent = nullptr;
+  struct type *builtin_ucent = nullptr;
+  struct type *builtin_float = nullptr;
+  struct type *builtin_double = nullptr;
+  struct type *builtin_real = nullptr;
+  struct type *builtin_ifloat = nullptr;
+  struct type *builtin_idouble = nullptr;
+  struct type *builtin_ireal = nullptr;
+  struct type *builtin_cfloat = nullptr;
+  struct type *builtin_cdouble = nullptr;
+  struct type *builtin_creal = nullptr;
+  struct type *builtin_char = nullptr;
+  struct type *builtin_wchar = nullptr;
+  struct type *builtin_dchar = nullptr;
 };
 
 /* Defined in d-exp.y.  */
@@ -62,26 +62,26 @@ extern int d_parse (struct parser_state
 
 extern const char *d_main_name (void);
 
-extern char *d_demangle (const char *mangled, int options);
+extern gdb::unique_xmalloc_ptr<char> d_demangle (const char *mangled,
+						 int options);
 
 extern const struct builtin_d_type *builtin_d_type (struct gdbarch *);
 
 /* Defined in d-namespace.c  */
 
-extern struct block_symbol d_lookup_symbol_nonlocal (const struct language_defn *,
-						     const char *,
-						     const struct block *,
-						     const domain_enum);
+extern struct block_symbol d_lookup_symbol_nonlocal
+     (const struct language_defn *,
+      const char *,
+      const struct block *,
+      const domain_search_flags);
 
 extern struct block_symbol d_lookup_nested_symbol (struct type *, const char *,
 						   const struct block *);
 
-/* Defined in d-valprint.c  */
+/* Implement la_value_print_inner for D.  */
 
-extern void d_val_print (struct type *type,
-			 int embedded_offset, CORE_ADDR address,
-			 struct ui_file *stream, int recurse,
-			 struct value *val,
-			 const struct value_print_options *options);
+extern void d_value_print_inner (struct value *val,
+				 struct ui_file *stream, int recurse,
+				 const struct value_print_options *options);
 
 #endif /* !defined (D_LANG_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-namespace.c ./gdb/d-namespace.c
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/d-namespace.c	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/d-namespace.c	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 /* Helper routines for D support in GDB.
 
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,8 +23,9 @@
 #include "language.h"
 #include "namespace.h"
 #include "d-lang.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "gdbarch.h"
+#include "inferior.h"
 
 /* This returns the length of first component of NAME, which should be
    the demangled name of a D variable/function/method/etc.
@@ -77,7 +78,7 @@ d_entire_prefix_len (const char *name)
 static struct block_symbol
 d_lookup_symbol (const struct language_defn *langdef,
 		 const char *name, const struct block *block,
-		 const domain_enum domain, int search)
+		 const domain_search_flags domain, int search)
 {
   struct block_symbol sym;
 
@@ -87,14 +88,14 @@ d_lookup_symbol (const struct language_d
 
   /* If we didn't find a definition for a builtin type in the static block,
      such as "ucent" which is a specialist type, search for it now.  */
-  if (langdef != NULL && domain == VAR_DOMAIN)
+  if (langdef != nullptr && (domain & SEARCH_TYPE_DOMAIN) != 0)
     {
       struct gdbarch *gdbarch;
 
       if (block == NULL)
-	gdbarch = target_gdbarch ();
+	gdbarch = current_inferior ()->arch ();
       else
-	gdbarch = block_gdbarch (block);
+	gdbarch = block->gdbarch ();
       sym.symbol
 	= language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
       sym.block = NULL;
@@ -130,8 +131,8 @@ d_lookup_symbol (const struct language_d
 	  if (lang_this.symbol == NULL)
 	    return {};
 
-	  type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (lang_this.symbol)));
-	  classname = TYPE_NAME (type);
+	  type = check_typedef (lang_this.symbol->type ()->target_type ());
+	  classname = type->name ();
 	  nested = name;
 	}
       else
@@ -151,7 +152,7 @@ d_lookup_symbol (const struct language_d
 	return {};
 
       /* Look for a symbol named NESTED in this class.  */
-      sym = d_lookup_nested_symbol (SYMBOL_TYPE (class_sym.symbol),
+      sym = d_lookup_nested_symbol (class_sym.symbol->type (),
 				    nested.c_str (), block);
     }
 
@@ -165,7 +166,7 @@ d_lookup_symbol (const struct language_d
 static struct block_symbol
 d_lookup_symbol_in_module (const char *module, const char *name,
 			   const struct block *block,
-			   const domain_enum domain, int search)
+			   const domain_search_flags domain, int search)
 {
   char *concatenated_name = NULL;
 
@@ -197,7 +198,7 @@ d_lookup_symbol_in_module (const char *m
 static struct block_symbol
 lookup_module_scope (const struct language_defn *langdef,
 		     const char *name, const struct block *block,
-		     const domain_enum domain, const char *scope,
+		     const domain_search_flags domain, const char *scope,
 		     int scope_len)
 {
   char *module;
@@ -260,7 +261,7 @@ find_symbol_in_baseclass (struct type *p
 
       /* Search this particular base class.  */
       sym = d_lookup_symbol_in_module (base_name, name, block,
-				       VAR_DOMAIN, 0);
+				       SEARCH_VFT, 0);
       if (sym.symbol != NULL)
 	break;
 
@@ -269,14 +270,14 @@ find_symbol_in_baseclass (struct type *p
 	 what we want is possibly there.  */
       std::string concatenated_name = std::string (base_name) + "." + name;
       sym = lookup_symbol_in_static_block (concatenated_name.c_str (), block,
-					   VAR_DOMAIN);
+					   SEARCH_VFT);
       if (sym.symbol != NULL)
 	break;
 
       /* Nope.  We now have to search all static blocks in all objfiles,
 	 even if block != NULL, because there's no guarantees as to which
 	 symtab the symbol we want is in.  */
-      sym = lookup_static_symbol (concatenated_name.c_str (), VAR_DOMAIN);
+      sym = lookup_static_symbol (concatenated_name.c_str (), SEARCH_VFT);
       if (sym.symbol != NULL)
 	break;
 
@@ -308,7 +309,7 @@ d_lookup_nested_symbol (struct type *par
 
   parent_type = check_typedef (parent_type);
 
-  switch (TYPE_CODE (parent_type))
+  switch (parent_type->code ())
     {
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
@@ -319,7 +320,7 @@ d_lookup_nested_symbol (struct type *par
 	  const char *parent_name = type_name_or_error (saved_parent_type);
 	  struct block_symbol sym
 	    = d_lookup_symbol_in_module (parent_name, nested_name,
-					 block, VAR_DOMAIN, 0);
+					 block, SEARCH_VFT, 0);
 	  char *concatenated_name;
 
 	  if (sym.symbol != NULL)
@@ -336,7 +337,7 @@ d_lookup_nested_symbol (struct type *par
 	  xsnprintf (concatenated_name, size, "%s.%s",
 		     parent_name, nested_name);
 
-	  sym = lookup_static_symbol (concatenated_name, VAR_DOMAIN);
+	  sym = lookup_static_symbol (concatenated_name, SEARCH_VFT);
 	  if (sym.symbol != NULL)
 	    return sym;
 
@@ -360,7 +361,7 @@ d_lookup_nested_symbol (struct type *par
 static struct block_symbol
 d_lookup_symbol_imports (const char *scope, const char *name,
 			 const struct block *block,
-			 const domain_enum domain)
+			 const domain_search_flags domain)
 {
   struct using_direct *current;
   struct block_symbol sym;
@@ -375,7 +376,7 @@ d_lookup_symbol_imports (const char *sco
      the module we're searching in, see if we can find a match by
      applying them.  */
 
-  for (current = block_using (block);
+  for (current = block->get_using ();
        current != NULL;
        current = current->next)
     {
@@ -472,7 +473,7 @@ d_lookup_symbol_imports (const char *sco
 static struct block_symbol
 d_lookup_symbol_module (const char *scope, const char *name,
 			const struct block *block,
-			const domain_enum domain)
+			const domain_search_flags domain)
 {
   struct block_symbol sym;
 
@@ -491,7 +492,7 @@ d_lookup_symbol_module (const char *scop
       if (sym.symbol != NULL)
 	return sym;
 
-      block = BLOCK_SUPERBLOCK (block);
+      block = block->superblock ();
     }
 
   return {};
@@ -508,10 +509,10 @@ struct block_symbol
 d_lookup_symbol_nonlocal (const struct language_defn *langdef,
 			  const char *name,
 			  const struct block *block,
-			  const domain_enum domain)
+			  const domain_search_flags domain)
 {
   struct block_symbol sym;
-  const char *scope = block_scope (block);
+  const char *scope = block == nullptr ? "" : block->scope ();
 
   sym = lookup_module_scope (langdef, name, block, domain, scope, 0);
   if (sym.symbol != NULL)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/agentexpr.texi ./gdb/doc/agentexpr.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/agentexpr.texi	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/doc/agentexpr.texi	2024-02-01 01:47:15.000000000 +0000
@@ -7,7 +7,7 @@
 
 @c This file is part of the GDB manual.
 @c
-@c Copyright (C) 2003-2019 Free Software Foundation, Inc.
+@c Copyright (C) 2003--2024 Free Software Foundation, Inc.
 @c
 @c See the file gdb.texinfo for copying conditions.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/all-cfg.texi ./gdb/doc/all-cfg.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/all-cfg.texi	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/doc/all-cfg.texi	2024-02-01 01:47:15.000000000 +0000
@@ -1,6 +1,6 @@
 @c GDB MANUAL configuration file.  
 @c
-@c Copyright (C) 1993-2019 Free Software Foundation, Inc.
+@c Copyright (C) 1993--2024 Free Software Foundation, Inc.
 @c
 @c NOTE: While the GDB manual is configurable (by changing these
 @c switches), its configuration is ***NOT*** automatically tied in to
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/annotate.info ./gdb/doc/annotate.info
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/annotate.info	2019-12-11 01:53:22.000000000 +0000
+++ ./gdb/doc/annotate.info	2024-02-01 01:52:29.000000000 +0000
@@ -1,7 +1,7 @@
-This is annotate.info, produced by makeinfo version 6.3 from
+This is annotate.info, produced by makeinfo version 6.5 from
 annotate.texinfo.
 
-Copyright (C) 1994-2019 Free Software Foundation, Inc.
+Copyright (C) 1994-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -16,7 +16,7 @@ END-INFO-DIR-ENTRY
 
    This file documents GDB's obsolete annotations.
 
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/annotate.texinfo ./gdb/doc/annotate.texinfo
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/annotate.texinfo	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/doc/annotate.texinfo	2024-02-01 01:47:15.000000000 +0000
@@ -27,7 +27,7 @@
 @c cost.  Having a smaller cheaper manual helps the GNU Press with its sales.
 
 @copying
-Copyright @copyright{} 1994-2019 Free Software Foundation, Inc.
+Copyright @copyright{} 1994--2024 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/ChangeLog ./gdb/doc/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/ChangeLog	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/doc/ChangeLog	1970-01-01 00:00:00.000000000 +0000
@@ -1,13171 +0,0 @@
-2019-12-10  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (gdb.prompt): Use correct quotes in example.
-	Shorten sample text.
-
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* doc/gdb.texinfo (GDB/MI Symbol Query): Add documentation of
-	-max-results to some -symbol-info-* commands.
-
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command
-	-symbol-info-module-functions and -symbol-info-module-variables.
-
-2019-12-01  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (TUI Configuration): Mention TUI border styles.
-	(Output Styling): Document new settings.
-
-2019-12-01  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (TUI Configuration): Document new setting.
-
-2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Define): Indicate that user-defined prefix can
-	be used in 'define' command.  Document 'define-prefix' command.
-
-2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command
-	-symbol-info-modules.
-
-2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command
-	-symbol-info-functions, -symbol-info-types, and
-	-symbol-info-variables.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Maintenance Commands): Document new maint
-	commands.
-
-2019-11-25  Luis Machado  <luis.machado@linaro.org>
-
-	* gdb.texinfo (Debugging Output): Document set debug
-	remote-packet-max-chars.
-
-2019-11-14  Tom de Vries  <tdevries@suse.de>
-
-	* gdb.texinfo: Fix typos.
-	* python.texi: Same.
-	* stabs.texinfo: Same.
-
-2019-11-12  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Maintenance Commands): Document new command.
-
-2019-11-11  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (TUI Keys): Document readline function names.
-
-2019-11-11  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Editing): Document operate-and-get-next.
-
-2019-11-11  Tom Tromey  <tromey@adacore.com>
-
-	* gdb.texinfo (Host I/O Packets): Fix typo in "vFile:pwrite".
-
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* python.texi (Symbols In Python): Add documentation for
-	gdb.lookup_static_symbols.
-
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* python.texi (Symbols In Python): Extend documentation for
-	gdb.lookup_static_symbol.
-
-2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Symbols): Document new 'info module variables' and
-	'info module functions' commands.
-
-2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Symbols): Document new 'info modules' command.
-
-2019-10-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Convenience Funs): Document the new
-	$_gdb_setting_str, $_gdb_maint_setting and $_gdb_maint_setting_str
-	convenience functions.
-
-2019-10-29  Christian Biesinger  <cbiesinger@google.com>
-
-	* Makefile.in: Also set SYSTEM_GDBINIT_DIR for the info manual
-	generation.
-	* gdb.texinfo (many sections): Document new --with-system-gdbinit-dir
-	option.
-
-2019-10-23  Tom Tromey  <tom@tromey.com>
-
-	* Makefile.in (READLINE_DIR): Update.
-
-2019-10-23  Christian Biesinger  <cbiesinger@google.com>
-
-	* python.texi (Threads In Python): Add a note for how to get the
-	list of threads.
-
-2019-10-07  Tom de Vries  <tdevries@suse.de>
-
-	* gdb.texinfo: Fix typo.
-	* guile.texi: Same.
-	* python.texi: Same.
-
-2019-10-03  Bernhard Heckel  <bernhard.heckel@intel.com>
-
-	* doc/gdb.texinfo (Fortran Operators): Describe scope operator.
-
-2019-10-02  Tom Tromey  <tromey@adacore.com>
-
-	* gdb.texinfo (Set Catchpoints, Convenience Vars): Document
-	$_ada_exception.
-
-2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* doc/gdb.texinfo (Remote Configuration): Remove documentation for
-	qXfer:spu:read and qXfer:spu:write.
-	(General Query Packets): Likewise.
-	(Cell Broadband Engine SPU architecture): Remove subsection.
-
-2019-09-18  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Editing): Document readline application name.
-	(TUI Single Key Mode): Document TUI SingleKey keymap name.
-
-2019-09-17  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Source Path): Additional text to better describe
-	how the source path directory list is used when searching for
-	source files.
-
-2019-09-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Ada Tasks): Tell the task name is printed, update
-	examples.
-
-2019-09-10  Tom Tromey  <tromey@adacore.com>
-
-	* gdb.texinfo (Index Files): Update Ada text.
-
-2019-08-27  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Symbols): Add information about the -n flag to
-	"info variables" and "info functions".
-
-2019-08-25  Yoshinori Sato <ysato@users.sourceforge.jp>
-
-        * gdb.texinfo (Standard Target Features): Add RX Features sub-section.
-
-2019-08-16  Alan Hayward  <alan.hayward@arm.com>
-
-	* gdb.texinfo (AArch64 Pointer Authentication)
-	(GDB/MI Breakpoint Information) (Frame Information): Document
-	addr_field.
-
-2019-08-12  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Configure Options): Document minimum version of
-	readline.
-
-2019-08-09  Alan Hayward  <alan.hayward@arm.com>
-
-        * gdb.texinfo (AArch64 Pointer Authentication): Fix typo.
-
-2019-08-07  Alan Hayward  <alan.hayward@arm.com>
-
-	* gdb.texinfo (AArch64 Pointer Authentication): New subsection.
-
-2019-08-05  Christian Biesinger  <cbiesinger@google.com>
-
-	* python.texi (Blocks In Python): Document dictionary access on blocks.
-
-2019-08-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-        * gdb.texinfo (Symbols): Document new args -dirname and -basename
-        of "info sources" command.
-
-2019-07-30  Christian Biesinger  <cbiesinger@google.com>
-
-	* python.texi (Symbols In Python): Document new function
-	gdb.lookup_static_symbol.
-
-2019-07-29  Christian Biesinger  <cbiesinger@google.com>
-
-	* python.texi (Objfiles In Python): Document new functions
-	  Objfile.lookup_{global,static}_symbol.
-
-2019-07-29  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Backtrace): Document the new '-frame-info'
-	backtrace option.  Reference 'set print frame-info'.
-	(Print Settings): Document 'set|show print frame-info'.
-	Document new 'presence' value for 'set print frame-arguments.
-
-2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Symbols): Add information about -q flag to "info
-	types".
-
-2019-07-20  Kevin Buettner  <kevinb@redhat.com>
-
-	* python.texi (python command): Revise example to match
-	command behavior.
-
-2019-07-09  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (C++ Exception GDB/MI Catchpoint Commands): Adjust
-	examples to show type=catchpoint instead of type=breakpoint and an
-	address.
-
-2019-07-03  Pedro Alves  <palves@redhat.com>
-	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Command Settings): New node documenting the general
-	concept of settings, how to change them, and the new "with"
-	command.
-	(Maintenance Commands): Document "maint with".
-
-2019-07-03  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint set/show
-	test-settings" instead of "maint test-settings set/show".
-
-2019-06-18  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdb.texinfo (Invoking GDB): Remove sentence about how GDB
-	deals with a file that has the same name as the specified pid to
-	attach to.  Add example using -p option.
-	(gdb man): Remove same sentence as in previous item.
-
-2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (GDB/MI Catchpoint Commands): Add menu entry to new
-	node.
-	(C++ Exception GDB/MI Catchpoint Commands): New node to describe
-	new MI commands.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Command Completion): Mention command options too.
-	(Command Options): New node.
-	(Threads): Add anchors.  Extend descriptions of the "taas" and
-	"tfaas" commands.
-	(Backtrace): Describe new options of the "backtrace" command.  Add
-	anchors.
-	(Frame Apply): Describe new options of the "frame apply" and
-	"faas" commands.  Add anchors.
-	(Data): Describe new options of the "print" command.  Add anchors.
-	(Compiling and Injecting Code): Mention options of the "compile
-	print" command.
-	(Maintenance Commands): Mention "maint test-options" subcommands
-	and the "maint show test-options-completion-result" command.
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Print Settings): Document "set/show print
-	raw-frame-arguments" instead of "set/show print raw
-	frame-arguments".
-
-2019-06-13  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint
-	test-settings" commands.
-
-2019-06-06  Amos Bird  <amosbird@gmail.com>
-
-	* annotate.texinfo (Multi-threaded Apps): Add entry for thread-exited
-	annotation.
-
-2019-06-04  Christian Biesinger  <cbiesinger@google.com>
-
-	* python.texi: Document new gdb.Type.objfile property.
-
-2019-06-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Help): Document the new -v apropos flag.
-	(Output Styling): Document the style name styling done by "show style".
-	Document the new title and highlight styles.
-
-2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Shell Commands): Document pipe command.
-	(Logging Output): Add a reference to pipe command.
-	(Convenience Variables): Document $_shell_exitcode and
-	$_shell_exitstatus.
-
-2019-05-29  Tom Tromey  <tromey@adacore.com>
-
-	* gdb.texinfo (Continuing and Stepping): Document new
-	commands.
-
-2019-05-22  Alan Hayward  <alan.hayward@arm.com>
-
-	* gdb.texinfo (Shell Commands): Add debugredirect.
-
-2019-05-22  Jan Vrany  <jan.vrany@fit.cvut.cz>
-
-	* gdb.texinfo: Minor formatting fixes.
-
-2019-01-28  Jan Vrany  <jan.vrany@fit.cvut.cz>
-
-	* gdb.texinfo (Miscellaneous GDB/MI Commands): Document new
-	MI command -complete.
-
-2019-05-14  Tom de Vries  <tdevries@suse.de>
-
-	* gdb.texinfo (Automatic symbol index cache): Add concept and command
-	index entries.
-
-2019-05-14  Tom de Vries  <tdevries@suse.de>
-
-	* gdb.texinfo (Maintenance Commands): Remove superfluous
-	quoting on command index entry for "maint info selftests".
-
-2019-05-10  Tom Tromey  <tromey@adacore.com>
-
-	* python.texi (Pretty Printing API): Mention lazy computation for
-	"children".
-
-2019-05-10  Tom Tromey  <tromey@adacore.com>
-
-	* gdb.texinfo (Set Catchpoints): Add text for parameter to "catch
-	exception" and "catch handlers".  Move "catch exception unhandled"
-	text.  Use @var for "catch load" and "catch unload"
-
-2019-05-08  Tom Tromey  <tromey@adacore.com>
-
-	* gdb.texinfo (Symbols): Document change to ptype/o.
-
-2019-05-03  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Separate Debug Files): Document how the
-	subdirectory of the global debug directory is computed on
-	MS-Windows/MS-DOS.
-
-2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Print Settings): Document 'print max-depth'.
-	* guile.texi (Guile Pretty Printing API): Document that 'print
-	max-depth' can effect the display of a values children.
-	* python.texi (Pretty Printing API): Likewise.
-	(Values From Inferior): Document max_depth keyword.
-
-2019-04-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Calling): Document the new
-	set|show may-call-functions.
-
-2019-04-22  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Reverse Execution): Mention and xref process record
-	and replay.  Mention remote and system emulators.
-	(Process Record and Replay): List supported architectures.
-	Mention that "record btrace" is only supported on Intel
-	processors.
-
-2019-04-17  Alan Hayward  <alan.hayward@arm.com>
-
-	* gdb.texinfo (Other Command-Line Arguments for gdbserver)
-	(Monitor Commands for gdbserver)
-	(gdbserver man): Add debug-file option.
-
-2019-04-08  Kevin Buettner  <kevinb@redhat.com>
-
-	* python.texi (Inferiors In Python): Rename
-	Inferior.thread_from_thread_handle to Inferior.thread_from_handle.
-	Add note about the former being deprecated.
-
-2019-04-08  Kevin Buettner  <kevinb@redhat.com>
-
-	* python.texi (Threads In Python): Add description for method
-	InferiorThread.handle.
-
-2019-04-07  Tom Tromey  <tom@tromey.com>
-
-	* Makefile.in (all): Depend on "info".
-
-2019-04-01  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Convenience Funs): Document '$_creal' and
-	'$_cimag'.
-
-2019-03-30  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Convenience Vars): Document $_gdb_major and
-	$_gdb_minor.
-
-2019-03-26  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* python.texi (Pretty Printing API): Document use of None for the
-	display_hint.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* gdb.texinfo (AArch64 Features): Describe pauth feature.
-
-2019-03-20  Tom Tromey  <tromey@adacore.com>
-
-	* python.texi (Selecting Pretty-Printers): Use @defvar for
-	gdb.pretty_printers.
-
-2019-03-14  Simon Marchi  <simon.marchi@efficios.com>
-
-	* gdb.texinfo (GDB/MI Development and Front Ends): Fix closing
-	of table, "@end @table" -> "@end table".
-
-2019-03-14  Tom Tromey  <tromey@adacore.com>
-
-	* gdb.texinfo (Output Styling): Document "set style source" and
-	"show style source".
-
-2019-03-13  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Mode Options): Mention mi3.
-	(Interpreters): Likewise.
-	(GDB/MI Development and Front Ends): Add entry for MI 3 in
-	version table.  Document -fix-multi-location-breakpoint-output.
-	(GDB/MI Breakpoint Information): Document format of breakpoint
-	location output.
-
-2019-03-05  Simon Marchi  <simon.marchi@efficios.com>
-
-	* python.texi (Values From Inferior): Change synopsys of the
-	second form of Value.__init__.
-
-2019-03-02  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Output Styling): Fix typos.  Document the default
-	foreground colors of the available styles.
-
-2019-02-27  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdb.texinfo (Configure Options): Document minimum python
-	version.
-
-2019-02-26  Kevin Buettner  <kevinb@redhat.com>
-
-	* python.texi (Values From Inferior): Document second form
-	of Value.__init__.
-
-2019-02-23  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo: Update copyright year ranges.
-	* refcard.tex: Likewise.
-
-2019-02-21  Alan Hayward  <alan.hayward@arm.com>
-
-	* gdb.texinfo: Update style defaults.
-
-2019-02-21  Tom Tromey  <tromey@adacore.com>
-
-	* gdb.texinfo (Remote Configuration): Remove trailing "." from
-	@item.
-
-2019-01-16  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Development and Front Ends): Add table of
-	MI versions.  Update text around it.
-
-2019-01-14  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* gdb.texinfo (PowerPC Features): Document the alias
-	pseudo-registers for the org.gnu.gdb.power.altivec feature.
-
-2019-01-09  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Print Settings): Remove mention of specific
-	demangle-style values, just refer to the in-process help.
-
-2018-12-28  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Output Styling): New node.
-
-2018-12-13  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (Set Catchpoints): Add an anchor for 'catch syscall'.
-	(Native): Add a FreeBSD subsection.
-	(FreeBSD): Document use of system call aliases for compatibility
-	system calls.
-
-2018-11-21  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Standard Target Features): Add RISC-V Features
-	sub-section.
-
-2018-11-20  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Examining the Symbol Table): Document language choice
-	for 'info types|functions|variables' commands.
-	(Setting Breakpoints): Document language choice to print
-	the functions in which a breakpoint is set.
-
-2018-11-09  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* gdb.texinfo (PowerPC Features): Document the altivec and fpu
-	requirements for the org.gnu.gdb.power.vsx feature.
-
-2018-11-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ada Tasks): Update the "info task 2" example
-	output to match the current implementation.
-
-2018-10-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Information About a Frame): Document changes
-	to 'info args' and 'info locals'.
-	(Examining the Symbol Table): Document changes to 'info functions'
-	and 'info variables'.
-
-2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* gdb.texinfo (PowerPC Features): Describe new features
-	"org.gnu.gdb.power.htm.spr", "org.gnu.gdb.power.htm.core",
-	"org.gnu.gdb.power.htm.fpu", "org.gnu.gdb.power.htm.altivec",
-	"org.gnu.gdb.power.htm.vsx", "org.gnu.gdb.power.htm.ppr",
-	"org.gnu.gdb.power.htm.dscr", "org.gnu.gdb.power.htm.tar".
-
-2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* gdb.texinfo (PowerPC Features): Describe new features
-	"org.gnu.gdb.power.ebb" and "org.gnu.gdb.power.linux.pmu".
-
-2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* gdb.texinfo (PowerPC Features): Describe new feature
-	"org.gnu.gdb.power.tar".
-
-2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* gdb.texinfo (PowerPC Features): Describe new features
-	"org.gnu.gdb.power.ppr" and "org.gnu.gdb.power.dscr".
-
-2018-10-20  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (TUI Commands): Add @end table.
-	(TUI Configuration): Remove stray @end table.
-
-2018-10-19  Tom Tromey  <tom@tromey.com>
-
-	PR tui/18388:
-	* gdb.texinfo (TUI Commands): Remove tabset documentation.
-	(TUI Configuration): Document "set tui tab-width".
-
-2018-10-09  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Inferiors In Python): Link to "Frames In Python",
-	not "Unwinding Frames in Python".
-
-2018-10-09  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Configure Options): Update --enable-ubsan
-	documentation.
-
-2018-10-08  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (Contributors): Add SRI International and University
-	of Cambridge for FreeBSD/riscv.
-
-2018-10-06  Tom Tromey  <tom@tromey.com>
-
-	PR python/19399:
-	* python.texi (Inferiors In Python): Document
-	Inferior.Architecture.
-
-2018-10-06  Tom Tromey  <tom@tromey.com>
-
-	PR python/21765:
-	* python.texi (Symbols In Python): Document the module and
-	common-block domains.  Remove documentation for incorrect
-	domains.
-
-2018-10-03  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Configure Options): Document --enable-ubsan.
-
-2018-10-02  John Darrington <john@darrington.wattle.id.au>
-
-        * gdb.texinfo (Remote Connection Commands): Describe
-	  the changes to target remote and target extended-remote
-	  relating to Unix domain sockets.
-
-2018-10-01  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Configure Options): Document configure options.
-
-2018-09-29  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Requirements): Mention C++, GNU make.
-	(Requirements): Sort the table.  Add more libraries.
-	(Running Configure): Remove obsolete text.
-	(Separate Objdir): Likewise.
-	(Configure Options): Likewise.
-
-2018-09-28  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Frames): Rewrite the description of 'frame number'
-	to highlight that the number is also the frame's level.
-	(Selection): Rewrite documentation for 'frame' and 'select-frame'
-	commands.
-	(Frame Info): Rewrite documentation for 'info frame' command.
-
-2018-09-23  Tom Tromey  <tom@tromey.com>
-
-	PR python/18852:
-	* python.texi (Parameters In Python): Document exception behavior
-	of get_set_string.
-
-2018-09-18  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (info proc): Remove "running".
-	(info proc mappings): Replace "program" with "process".
-
-2018-09-18  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (Process Information): Document "info proc files"
-	command.
-
-2018-09-17  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Index Files): Update for cache directory change on
-	macOS.
-
-2018-09-16  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Basic Python): Update docs for find_pc_line,
-	solib_name.
-	(Progspaces In Python): Update docs for current_progspace.
-	Document block_for_pc, find_pc_line, is_valid, nsolib_name.
-	Move method documentation before example.
-
-2018-09-13  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* python.texi (Objfiles In Python): Update gdb.objfiles() doc.
-
-2018-09-13  Simon Marchi  <simon.marchi@ericsson.com>
-2018-09-13  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Program Spaces In Python): Document the
-	Progspace.objfiles method.
-	(Objfiles In Python): Mention that gdb.objfiles() is identical
-	to gdb.selected_inferior().progspace.objfiles().
-
-2018-09-13  Simon Marchi  <simon.marchi@ericsson.com>
-2018-09-13  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Inferiors In Python): Document
-	Inferior.progspace.
-	(Program Spaces In Python): Document that
-	gdb.current_progspace() is the same as
-	gdb.selected_inferior().progspace.
-
-2018-09-13  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* python.texi (Basic Python): Mention the string representation
-	of GDB Python objects.
-
-2018-09-12  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Skipping Over Functions and Files): Document
-	set/show debug skip.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Frames In Python, Blocks In Python)
-	(Symbols In Python, Symbol Tables In Python)
-	(Lazy Strings In Python): Remove periods from section titles.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Pretty Printing API): Swap sentence order.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	PR python/16461:
-	* python.texi (Values From Inferior): Mention use of virtual
-	table.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Basic Python): Parenthesize argument to
-	decode_line.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Python): Mention Python versions.  Don't mention
-	execfile.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	PR python/19808:
-	* python.texi (Unwinding Frames in Python): Rewrite
-	create_unwind_info documentation.  Update read_register
-	documentation and add a note about unwinder caution.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	PR python/18909:
-	* python.texi (Events In Python): Fix inferior_call
-	documentation.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	PR python/17752:
-	* python.texi (Frame Filter API): Remove period from subsection
-	title.  Mention 100 as good default priority.
-	(Frame Decorator API): Remove period from subsection title.
-	Mention FrameDecorator module.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	PR python/23108:
-	* python.texi (Exception Handling): Rearrange gdb.GdbError text
-	and add a table.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Compilation): Use "gcc", not "gcc.info", in @xref.
-	(Machine Code): Use "binutils", not "binutils.info", in @pxref.
-	(Separate Debug Files): Use "ld", not "ld.info", in @ref.
-	* python.texi (Objfiles In Python): Use "ld", not "ld.info", in @ref.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	PR python/16484:
-	* python.texi (Frames In Python): Document that Frame.block can
-	throw.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	PR python/23487:
-	* gdb.texinfo (Pretty-Printer Commands): Fix typo in example.
-
-2018-09-10  Tom Tromey  <tom@tromey.com>
-
-	PR python/16033:
-	* python.texi (Blocks In Python): Document that Block.end is
-	exclusive.
-
-2018-08-29  Keith Seitz  <keiths@redhat.com>
-
-	* gdb.texinfo (Compiling and injecting code in GDB): Document
-	set/show "compile-oracle" and "compile-cplus-types" commands.
-
-2018-08-22  Jan Vrany  <jan.vrany@fit.cvut.cz>
-
-	* gdb.texinfo (The -stack-list-frames Command): Update description
-	to mention "arch".
-	Update MI examples throughout the document to contain "arch" in
-	frame output.
-
-2018-08-21  Alan Hayward  <alan.hayward@arm.com>
-
-	* gdb.texinfo (AArch64 SVE): New subsubsection.
-
-2018-08-14  Jan Vrany  <jan.vrany@fit.cvut.cz>
-
-	* gdb.texinfo (GDB/MI Data Manipulation): Document
-	"-data-disassemble -a addr".
-	(GDB/MI Support Commands): Document "data-disassemble-a-option"
-	feature.
-
-2018-08-07  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Index Files Speed Up GDB): Add section about
-	symbol index cache.
-
-2018-07-27  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (gcore man): Rewrite "Description" and "-o"
-	option sections to further clarify that gcore can take more
-	than one PID, and that "-o" is used to specify a prefix, not a
-	filename.
-
-2018-07-26  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Maintenance Commands): Add description of
-	maintenance command to control dwarf unwinders.
-
-2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Debugging Programs with Multiple Threads):
-	Document changes to 'thread apply'.  Document 'taas'.
-	Document 'tfaas'.
-	(Examining the Stack): Document 'frame apply'.  Document 'faas'.
-
-2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Paul Fertser  <fercerpav@gmail.com>
-	    Tsutomu Seki  <sekiriki@gmail.com>
-
-	* gdb.texinfo (Remote Connection Commands): Add explanation
-	about new IPv6 support.  Add new connection prefixes.
-
-2018-07-09  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Remote Configuration): Update descriptions for
-	set/show of hardware-watchpoint-limit, hardware-breakpoint-limit,
-	and hardware-watchpoint-length-limit variables.
-
-2018-07-02  Maciej W. Rozycki  <macro@mips.com>
-
-	PR tdep/8282
-	* gdb.texinfo (Source and Machine Code): Document `set
-	disassembler-options' support for the MIPS target.
-
-2018-06-28  Petr Tesarik  <ptesarik@suse.cz>
-
-	* gdb.texinfo (Files): Document "add-symbol-file -o offset".
-
-2018-06-28  Petr Tesarik  <ptesarik@suse.cz>
-
-	* gdb.texinfo (Files): The address argument for "add-symbol-file"
-	is no longer mandatory.
-
-2018-06-28  Petr Tesarik  <ptesarik@suse.cz>
-
-	* gdb.texinfo (Files): Document "symbol-file -o offset".
-
-2018-06-14  Tom de Vries  <tdevries@suse.de>
-
-	* gdb.texinfo (Background Execution): Add @cindex for '&'.
-
-2018-06-11  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Maintenance Commands): Add a missing @anchor.
-
-2018-06-08  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint check
-	libthread-db" and "maint set/show check-libthread-db".
-
-2018-06-05  Tom Tromey	<tom@tromey.com>
-
-	PR cli/12326:
-	* gdb.texinfo (Screen Size): Document "c" response to pagination
-	prompt.
-
-2018-05-31  Maciej W. Rozycki  <macro@mips.com>
-
-	* gdb.texinfo (Choosing Target Byte Order): Document endianness
-	selection details with the `set endian auto' mode.
-
-2018-05-04  Tom Tromey  <tom@tromey.com>
-
-	PR python/22731:
-	* python.texi (Breakpoints In Python): Mention that "commands" is
-	writable.
-
-2018-05-02  Tom Tromey  <tom@tromey.com>
-
-	PR python/20084:
-	* python.texi (Parameters In Python): Document PARAM_ZUINTEGER and
-	PARAM_ZUINTEGER_UNLIMITED.
-
-2018-04-30  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Types In Python): Document Type.align.
-
-2018-04-13  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* gdb.texinfo (Symbols): Mention the fact that "info
-	variables/functions/types" show source files and line numbers.
-
-2018-04-13  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo: Document set/show record btrace cpu.
-
-2018-03-27  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ada Settings): New subsubsection.
-
-2018-03-26  Tom Tromey  <tom@tromey.com>
-
-	PR backtrace/15582:
-	* gdb.texinfo (Backtrace): Mention "hide" argument.
-
-2018-03-26  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Backtrace): Describe options individually.
-
-2018-03-19  Tom Tromey  <tom@tromey.com>
-
-	* observer.texi: Remove.
-
-2018-03-04  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (Debugging Output): Document "set/show debug
-	fbsd-nat".
-
-2018-02-19  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Machine Code): Additional information about "info
-	line" command.
-
-2018-01-15  Szabolcs Nagy  <szabolcs.nagy@arm.com>
-
-	* gdb.texinfo (gdb-add-index man): Add pindex.
-
-2018-01-15  Szabolcs Nagy  <szabolcs.nagy@arm.com>
-
-	* gdb.texinfo (set cwd): Add period.
-	(gdb-add-index man): Move anchor.
-
-2017-01-12  Tom Tromey  <tom@tromey.com>
-	    Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (Index Files): Mention gdb-add-index.
-	(gdb-add-index man): New section.
-	* Makefile.in (gdb-add-index.1): New rule to generate manpage
-	from gdb.texinfo.
-
-2018-01-11  Szabolcs Nagy  <szabolcs.nagy@arm.com>
-
-	* gdb.texinfo (pwd): Fix whitespace.
-
-2018-01-09  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (pwd): Update cross-reference for Process Information
-	node and remove explicit /proc reference.
-	(Native): Rename subsection from SVR4 Process Information to
-	Process Information.
-	(Process Information): Reword introduction to be less /proc
-	centric.  Document support for "info proc" on FreeBSD.
-
-2018-01-03  Xavier Roirand  <roirand@adacore.com>
-
-	* gdb.texinfo (Set Catchpoints): Add documentation for new
-	"catch handlers" action.
-
-2017-12-27  Stafford Horne  <shorne@gmail.com>
-
-	* gdb.texinfo (Target Description Format): Explain that arbitrary
-	strings are now allowed for register groups.
-
-2017-12-27  Stafford Horne  <shorne@gmail.com>
-
-	* gdb.texinfo (Registers): Document info reg $reggroup feature.
-
-2017-12-15  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR cli/16224
-	* gdb.texinfo (ptype): Add documentation for new flag '/o'.
-
-2017-12-13  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* python.texi (Manipulating breakpoints using Python): Document
-	qualified parameter to gdb.Breakpoint.
-
-2017-12-13  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* python.texi (Manipulating breakpoints using Python): Split doc
-	of Breakpoint.__init__ in two, split text in multiple
-	paragraphs, don't nest parameter square brackets.
-
-2017-12-12  Stafford Horne  <shorne@gmail.com>
-	    Stefan Wallentowitz  <stefan@wallentowitz.de>
-	    Franck Jullien  <franck.jullien@gmail.com>
-	    Jeremy Bennett  <jeremy.bennett@embecosm.com>
-
-	* gdb.texinfo: Add OpenRISC documentation.
-
-2017-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Index Files): Document .debug_names and -dwarf-5.
-
-2017-12-07  Keith Seitz  <keiths@redhat.com>
-
-	* gdb.texinfo (Symbols): Document "set print type nested-type-limit"
-	and "show print type nested-type-limit".
-
-2017-12-07  Phil Muldoon  <pmuldoon@redhat.com>
-
-       * python.texi (Breakpoints In Python): Add text relating
-	to allowed explicit locations and keywords in gdb.Breakpoints.
-
-2017-12-04  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Rust): Update trait object status
-
-2017-12-01  Andrew Cagney  <cagney@redhat.com>
-	    Joel Brobecker  <brobecker@adacore.com>
-	    Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (File Options): Document --readnever.
-	(Commands to Specify Files): Likewise, for 'symbol-file' and
-	'add-symbol-file'.
-
-2017-11-29  Pedro Alves  <palves@redhat.com>
-
-	PR c++/19436
-	* gdb.texinfo (Debugging C Plus Plus): Document setting
-	breakpoints in functions with ABI tags.
-
-2017-11-29  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Linespec Locations): Document how "function" is
-	interpreted in C++ and Ada.  Document "-qualified".
-	(Explicit Locations): Document how "-function" is interpreted in
-	C++ and Ada.  Document "-qualified".
-
-2017-11-26  Dominik Czarnota  <dominik.b.czarnota@gmail.com>
-
-	PR gdb/21945
-	* gdb.texinfo (Search Memory): Update description and example
-	about how to search a string without NULL terminator.
-
-2017-11-24  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Ada Exception Information): Document
-	new "exception-message" field.
-
-2017-11-24  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Memory Map Format): Update gdb-memory-map.dtd.
-
-2017-11-24  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Completion): Update need-quoting examples.  Remove
-	false claim that GDB inserts quoting automatically.
-	(Symbols): Add anchor.
-
-2017-11-22  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdb.texinfo (Requirements): Document use of GNU MPFR.
-
-2017-11-16  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* python.texi (Basic Python): Add rbreak documentation.
-
-2017-11-07  Xavier Roirand  <roirand@adacore.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Set Breaks): Document support for breakpoint
-	location ranges in the enable/disable commands.
-
-2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (Starting your Program) <The working directory.>:
-	Mention remote debugging.
-	(Working Directory) <Your Program's Working Directory>:
-	Likewise.
-	(Connecting) <Remote Packet>: Add "set-working-dir"
-	and "QSetWorkingDir" to the table.
-	(Remote Protocol) <QSetWorkingDir>: New item, explaining the
-	packet.
-
-2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (Starting your Program) <The working directory.>:
-	Mention new "set cwd" command.
-	(Working Directory) <Your Program's Working Directory>:
-	Rephrase to explain that "set cwd" exists and is the default
-	way to change the inferior's cwd.
-
-2017-09-25  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* gdb.texinfo (S/390 and System z Features): Document the new
-	features org.gnu.gdb.s390.gs and org.gnu.gdb.s390.gsbc.
-
-2017-09-21  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdb.texinfo (qXfer:threads:read): Add documentation for handle
-	attribute.
-
-2017-09-21  Kevin Buettner  <kevinb@redhat.com>
-
-	* python.texi (Inferiors In Python): Add description for method
-	Inferior.thread_from_thread_handle.
-
-2017-09-19  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (Starting your Program): Add description of
-	starti command.  Mention starti command as an alternative for
-	debugging the elaboration phase.
-
-2017-09-16  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Maintenance Commands): Document filter parameter
-	of "maint selftest".  Document "maint info selftests" command.
-
-2017-09-11  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Events In Python): Document new events.
-
-2017-09-04  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Variables) <Program Variables>: Document inspecting
-	no-debug-info variables.
-	(Symbols) <Examining the Symbol Table>: Document inspecting
-	no-debug-info types.
-	(Calling) <Calling functions with no debug info>: New subsection,
-	documenting calling no-debug-info functions.
-	(Non-debug DLL Symbols) <Working with Minimal Symbols>: Update.
-
-2017-08-31  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (set environment): Add @anchor.  Explain that
-	environment variables set by the user are sent to GDBserver.
-	(unset environment): Likewise, but for unsetting variables.
-	(Connecting) <Remote Packet>: Add "environment-hex-encoded",
-	"QEnvironmentHexEncoded", "environment-unset", "QEnvironmentUnset",
-	"environment-reset" and "QEnvironmentReset" to the table.
-	(Remote Protocol) <QEnvironmentHexEncoded, QEnvironmentUnset,
-	QEnvironmentReset>: New item, explaining the packet.
-
-2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Compiling and Injecting Code): Add to subsection
-	"Compiler search for the compile command" descriptions of set
-	compile-gcc and show compile-gcc.
-
-2017-08-07  Weimin Pan  <weimin.pan@oracle.com>
-
-	* gdb.texinfo (Architectures): Add new Sparc64 section to document
-	ADI support.
-	* NEWS: Add "adi examine" and "adi assign" commands.
-
-2017-08-18  Yao Qi  <yao.qi@linaro.org>
-
-	* gdb.texinfo (Server): Document "--selftest".
-
-2017-08-16  Ruslan Kabatsayev  <b7.10110111@gmail.com>
-
-	* gdb.texinfo (TUI Single Key Mode): Document the new shortcuts in
-	Single-Key mode.
-
-2017-08-12  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR gdb/21925
-	* gdb.texinfo (Starting) <startup-with-shell>: Fix typo ("show
-	set...").
-
-2017-08-09  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Packets): Fix Z0 cmd_list doc referring to
-	conditional expression.
-
-2017-07-31  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* agentexpr.texi (rot): Fix symbolic description, improve
-	textual description.
-
-2017-07-26  Yao Qi  <yao.qi@linaro.org>
-
-	* gdb.texinfo (Maintenance Commands): Document command
-	"maint check xml-descriptions".
-
-2017-07-26  Yao Qi  <yao.qi@linaro.org>
-
-	* gdb.texinfo (Maintenance Commands): Document optional
-	argument of "maint print c-tdesc".
-
-2017-07-18  Yao Qi  <yao.qi@linaro.org>
-
-	* gdb.texinfo (Maintenance Commands): Improve the doc to
-	command "maint print c-tdesc".
-
-2017-06-20  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR gdb/21606
-	* python.texi (Python representation of Symbols.): Replace
-	SYMBOL_FUNCTION_DOMAIN by SYMBOL_FUNCTIONS_DOMAIN, fixing typo.
-	* guile.texi (Guile representation of Symbols.): Likewise.
-
-2017-06-11  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Optional Messages about Internal Happenings):
-	Document {set,show} debug separate-debug-file commands.
-
-2017-06-07  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (Starting) <startup-with-shell>: Add @anchor.
-	(Connecting) <Remote Packet>: Add "startup-with-shell"
-	and "QStartupWithShell" to the table.
-	(Remote Protocol) <QStartupWithShell>: New item, explaining the
-	packet.
-
-2017-05-22  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Packets): Document vMustReplyEmpty packet.
-
-2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
-
-	* python.texi (Recording in Python): Factor out the documentation of
-	gdb.RecordInstruction's super class.
-
-2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
-
-	* python.texi (Recording in Python): Replace gdb.BtraceFunction with
-	gdb.RecordFunctionSegment.  Rename prev_sibling and next_sibling to
-	prev and next.
-
-2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
-
-	* python.texi (Recording in Python): Replace gdb.BtraceInstruction with
-	gdb.RecordInstruction
-
-2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
-
-	* python.texi (Recording in Python): Add documentation for
-	gdb.RecordGap and remove documentation of special cases for
-	gdb.BtraceInstruction.
-
-2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
-
-	* python.texi (Recording in Python): Remove Record.ptid defvar.
-
-2017-04-21  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Thread Information): Add missing
-	fields, re-word some things.
-	(GDB/MI Thread Commands): Describe fields found in the output of
-	-thread-info, remove description of fields in the
-	thread output tuple, replace with a cross-reference to "GDB/MI
-	Thread Information".
-
-2017-04-21  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Thread Commands): Remove "current" field
-	from -thread-info output.
-
-2017-03-28  Anton Kolesov  <anton.kolesov@synopsys.com>
-
-	* gdb.texinfo (Synopsys ARC): Document "set debug arc 2".
-
-2017-03-28  Anton Kolesov  <anton.kolesov@synopsys.com>
-
-	* gdb.texinfo (Synopsys ARC): Add "maint print arc arc-instruction".
-
-2017-03-22  Yao Qi  <yao.qi@linaro.org>
-
-	* python.texi (Inferiors In Python): Remove @code from Python.
-
-2017-03-21  Tim Wiederhake  <tim.wiederhake@intel.com>
-
-	* python.texi (Recordings In Python): Document return type of
-	gdb.BtraceInstruction.data.
-
-2017-03-20  Marc-Andre Laperle  <marc-andre.laperle@ericsson.com>
-
-	* gdb.texinfo (gdb/mi Symbol Query Commands): Document new MI
-	command file-list-shared-libraries
-	(GDB/MI Async Records): Update documentation of library-loaded with new
-	field.
-
-2017-03-16  Doug Evans  <dje@google.com>
-
-	* guile.texi (Lazy Strings In Guile): Mention arrays.
-	* python.texi (Lazy Strings In Python): Ditto.
-
-2017-03-08  Jiong Wang  <jiong.wang@arm.com>
-
-        * gdb.texinfo (Memory Protection Extensions): Add missing escape
-	character "@".
-
-2017-03-07  Walfred Tedeschi <walfred.tedeschi@intel.com>
-
-	* Memory Protection Extensions: Add information about inferior
-	calls.
-
-2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Print Settings, Tail Call Frames): Rename DW_OP_GNU_*,
-	DW_TAG_GNU_* and DW_AT_GNU_*.
-
-2017-02-14  Tim Wiederhake  <tim.wiederhake@intel.com>
-
-	* python.texi (Recordings In Python): New section.
-
-2017-02-14  Tom Tromey  <tom@tromey.com>
-
-	PR python/13598:
-	* python.texi (Events In Python): Document events.before_prompt.
-
-2017-02-13  Luis Machado  <lgustavo@codesourcery.com>
-
-	* gdb.texinfo (Target Commands): Document the optional offset
-	argument for the load command.
-
-2017-02-10  Martin Galvan  <martingalvan@sourceware.org>
-
-	PR gdb/21122
-	* gdb.texinfo (Breakpoints): Reword documentation to speak in terms of
-	space-separated breakpoint lists.  Also add a missing @table command
-	and @cindex for breakpoint lists.
-
-2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>
-
-	PR tdep/20936
-	* gdb.texinfo: (Standard Target Features): Document SPARC features.
-	(Sparc Features): New node.
-
-2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* gdb.texinfo (i386 Features): Add system segment registers
-	as feature.
-
-2017-01-24  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* python.texi (Events In Python): Fix typo.
-
-2017-01-20  Mike Wrighton  <mike_wrighton@codesourcery.com>
-	    Luis Machado  <lgustavo@codesourcery.com>
-
-	* gdb.texinfo (-target-flash-erase): New MI command description.
-	(flash-erase): New CLI command description.
-
-2017-01-04  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (Contributors): Add SRI International and University
-	of Cambridge for FreeBSD/mips.
-
-2016-12-22  Doug Evans  <xdje42@gmail.com>
-
-	* gdb.texinfo (Symbols): Update docs for symbol printing maintenance
-	commands.
-
-2016-12-02  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (User-defined Commands): Limit on number of
-	arguments passed to user-defined commands removed; update.
-
-2016-12-02  Pedro Alves  <palves@redhat.com>
-
-	PR cli/20559
-	* gdb.texinfo (Define): Add example of using "eval" to process a
-	variable number of arguments.
-	(Output) <eval>: Add anchor.
-
-2016-11-30  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in: Likewise.
-
-2016-11-18  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Add missing comma after
-	xref.
-
-2016-10-29  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Packets) <vCont>: Remove mention of default
-	actions.
-
-2016-10-26  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Packets): Clarify vCont packets with multiple
-	actions that match a thread, and what happens when an action
-	matches a thread that is already running.
-
-2016-10-14  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Using Trace Files): Fix typo.
-	(GDB/MI Tracepoint Commands): Likewise.
-
-2016-10-14  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Tracepoint Commands): Document -ctf switch
-	of -trace-save.
-
-2016-10-06  Tom Tromey  <tom@tromey.com>
-
-	* guile.texi (Types In Guile): Remove Java mentions.
-	* python.texi (Types In Python): Remove Java mentions.
-	* gdb.texinfo (Address Locations, Supported Languages)
-	(Index Section Format): Remove Java mentions.
-
-2016-08-15  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Target Description Format): Update docs on "end"
-	field spec and field default type.
-
-2016-10-03  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-2016-10-03  Simon Marchi  <simon.marchi@ericsson.com>
-
-	PR gdb/20487
-	* gdb.texinfo (Context management): Update mention of frame
-	change notifications.
-	(gdb/mi Async Records): Document frame field in
-	=thread-select event.
-	* observer.texi (GDB Observers): New user_selected_context_changed
-	observer.
-
-2016-09-28  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Packets) <z0>: Use "software breakpoint" rather
-	than "memory breakpoint".  Further document "kind".  Move
-	protocol-details link earlier.
-	<z1>: Document the cmd_list argument.  Fix typo.
-	<g>: Remove incorrect sentence.
-	(Stop Reply Packets): Document "OK" response to requests when in
-	non-stop mode.
-	<swbreak>: Use "software breakpoint" rather than "memory
-	breakpoint".
-	<create>: Document that "R" is ignored.
-	<W, X, w>: Document formatting of "AA".
-	(Notification Packets): Use "%Stop", not "%%Stop".
-
-2016-09-21  Anton Kolesov  <anton.kolesov@synopsys.com>
-
-	* gdb.texinfo (Embedded Processors): Document ARC.
-	(Synopsys ARC): New section.
-	(Standard Target Features): Document ARC features.
-	(ARC Features): New section.
-
-2016-09-21  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* .gitignore: New file.
-
-2016-08-24  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Input/Output): Mention possibility to unset
-	inferior-tty.
-
-2016-07-25  Tim Wiederhake  <tim.wiederhake@intel.com>
-
-	* gdb.texinfo: Resume btrace on reconnect.
-
-2016-07-23  Gabriel Krisman Bertazi  <gabriel@krisman.be>
-
-	* gdb.texinfo (Set Catchpoints): Add 'group' argument to catch
-	syscall.
-
-2016-06-30  Ð ÑƒÑ�Ð»Ð°Ð½ Ð˜Ð¶Ð±ÑƒÐ»Ð°Ñ‚Ð¾Ð²  <lrn1986@gmail.com>
-
-	* gdb.texinfo (Cygwin Native): Document the new 'signal-event'
-	command.
-
-2016-07-13  Tom Tromey  <tom@tromey.com>
-
-	PR python/15620, PR python/18620:
-	* python.texi (Events In Python): Document new breakpoint events.
-
-2016-07-13  Tom Tromey  <tom@tromey.com>
-
-	PR python/17698:
-	* python.texi (Breakpoints In Python): Document
-	Breakpoint.pending.
-
-2016-07-13  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Breakpoints In Python): Move table of types and
-	table of watchpoint types earlier in node.
-
-2016-07-12  Tom Tromey  <tom@tromey.com>
-
-	PR python/19293:
-	* python.texi (Frames In Python): Document
-	gdb.invalidate_cached_frames.
-
-2016-06-21  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Interpreters): Update intepreter-exec section,
-	document new-ui and explain use case.
-
-2016-06-17  Yan-Ting Lin  <currygt52@gmail.com>
-
-	* gdb.texinfo (Standard Target Features): Document NDS32 features.
-	(NDS32 Features): New Section.
-
-2016-06-09  Toshihito Kikuchi  <k.toshihito@yahoo.de>
-
-	* gdb.texinfo (Examining Memory): Document negative repeat
-	count in the 'x' command.
-
-2016-06-06  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Document method and
-	format fields in =record-started.
-	* observer.texi (record_changed): Add method and format
-	parameters.
-
-2016-05-27  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (General Query Packets): Move the description of the
-	response before the long list of the specific 'read' and 'write'
-	requests.
-
-2016-05-23  Tom Tromey  <tom@tromey.com>
-
-	* python.texi (Basic Python): Document gdb.breakpoints return.
-
-2016-05-24  Tom Tromey  <tom@tromey.com>
-
-	PR gdb/19194:
-	* gdb.texinfo (gdb man): Fix typo.
-
-2016-05-17  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Supported Languages): Mention Rust.  Update menu.
-	(Rust): New node.
-
-2016-05-17  Tom Tromey  <tom@tromey.com>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint selftest".
-
-2016-04-27  Yao Qi  <yao.qi@linaro.org>
-
-	* gdb.texinfo (tfind): Complete doc about tfind without
-	argument.
-
-2016-04-13  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* agentexpr.texi (byte): Fix zero_ext description.
-
-2016-03-31  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (M32R/SDI): Delete node.
-	(MIPS Embedded): Remove references to the MIPS remote debugging
-	protocol, PMON and variants, and the associated commands.
-
-2016-03-15  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Target Descriptions): New menu item "Enum Target Types".
-	(Target Description Format): Mention enum types.  Update docs on
-	flags types.
-	(Predefined Target Types): Add "bool".
-	(Enum Target Types): New node.
-
-2016-03-15  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Tracepoint Actions): Fix typo.
-
-2016-03-15  Pedro Alves  <palves@redhat.com>
-	    Andreas Arnez  <arnez@linux.vnet.ibm.com>
-	    Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* gdb.texinfo (Tracepoint Actions): Document possible
-	unreliability of '$_ret'.
-
-2016-03-11  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Symbols): Document new 'maint info line-table'
-	command.
-
-2016-03-10  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* gdb.texinfo (Convenience Functions): Document $_as_string.
-
-2016-02-23  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Skipping Over Functions and Files): Document new
-	options to "skip" command.  Update docs of output of "info skip".
-
-2016-02-18  Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* gdb.texinfo (Signals): Add bound violation display hints for
-	a SIGSEGV.
-
-2016-02-18  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* gdb.texinfo (Trace File Format): Add documentation for description
-	section lines.
-
-2016-02-10  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* gdb.texinfo (Trace File Format): Remove misleading information
-	about register block ordering.
-
-2016-02-01  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Value Sizes): Fix typo.
-
-2016-02-01  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Skipping Over Functions and Files): Fix typo.
-
-2016-02-01  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Value Sizes): New section.
-	(Data): Add the 'Value Sizes' node to the menu.
-
-2016-01-26  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (Debugging Output): Fix subject verb disagreements.
-
-2016-01-19  John Baldwin  <jhb@FreeBSD.org>
-
-	* gdb.texinfo (Debugging Output): Document "set/show debug fbsd-lwp".
-
-2016-01-18  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Threads): Mention that GDB displays the ID and name
-	of the thread that hit a breakpoint or received a signal.
-
-2016-01-15  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Threads) <thread ID lists>: Document star ranges.
-
-2016-01-13  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Threads): Document the $_gthread convenience
-	variable.
-	(Convenience Vars): Likewise.
-
-2016-01-13  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Threads): Document "info threads -gid".
-
-2016-01-13  Pedro Alves  <palves@redhat.com>
-
-	* python.texi (Breakpoints In Python) <Breakpoint.thread>: Add
-	anchor.
-	(Threads In Python): Document new InferiorThread.global_num
-	attribute.
-
-2016-01-07  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Threads): Document per-inferior thread IDs,
-	qualified thread IDs, global thread IDs and thread ID lists.
-	(Set Watchpoints, Thread-Specific Breakpoints): Adjust to refer to
-	thread IDs.
-	(Convenience Vars): Document the $_thread convenience variable.
-	(Ada Tasks): Adjust to refer to thread IDs.
-	(GDB/MI Async Records, GDB/MI Thread Commands, GDB/MI Ada Tasking
-	Commands, GDB/MI Variable Objects): Update to mention global
-	thread IDs.
-	* guile.texi (Breakpoints In Guile)
-	<breakpoint-thread/set-breakpoint-thread breakpoint>: Mention
-	global thread IDs instead of thread IDs.
-	* python.texi (Threads In Python): Adjust documentation of
-	InferiorThread.num.
-	(Breakpoint.thread): Mention global thread IDs instead of thread
-	IDs.
-
-2016-01-13  Pedro Alves  <palves@redhat.com>
-
-	* python.texi (Threads In Python): Document
-	InferiorThread.inferior.
-
-2016-01-13  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Inferiors and Programs): Document the $_inferior
-	convenience variable.
-	(Convenience Vars): Likewise.
-
-2016-01-12  Josh Stone  <jistone@redhat.com>
-	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* gdb.texinfo (Remote Configuration): List the QCatchSyscalls packet.
-	(Stop Reply Packets): List the syscall entry and return stop reasons.
-	(General Query Packets): Describe QCatchSyscalls, and add it to the
-	table and the detailed list of stub features.
-
-2016-01-12  Pedro Alves  <palves@redhat.com>
-
-	Remove use of the registered trademark symbol throughout.
-
-2016-01-12  Yao Qi  <yao.qi@linaro.org>
-
-	* gdb.texinfo (Interrupts): Update the document on handling
-	interrupt when program is stopped.
-
-2015-12-11  Don Breazeal  <donb@codesourcery.com>
-
-	* gdb.texinfo (Forks): Correct Linux kernel version where
-	fork and exec events are supported, add notes about support
-	of these events in target remote mode.
-	(Connecting): Reorganize and clarify distinctions between
-	target remote, extended-remote, and multiprocess.
-	Reorganize related text from separate sections into new
-	sections.
-	(Server): Note effects of target extended-remote mode.
-	Delete section on Multi-Process Mode for gdbserver.
-	Move some text to "Connecting" node.
-
-2015-12-10  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Threads): Replace warning with explanation
-	about single-threaded programs.
-
-2015-12-10  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Threads): Remove mention of SGI.
-	(Forks): Remove mention of HP-UX.
-	(Breakpoints): Remove mention of HP-UX.
-	(Set Watchpoints) <hardware watchpoints>: Don't mention HP-UX.
-	Reword in terms of architectures.
-	(Set Catchpoints) <catch exec, catch fork, catch vfork>: Don't
-	mention supported systems.
-	(Convenience Vars): Don't mention HP-UX.
-	(Jumping): Remove mention of HP-UX in comment.
-	(Files) <shared libraries>: Update supported shared library types
-	list.  Remove mention of HP-UX.
-	(Native): Remove HP-UX subsection.
-	(SVR4 Process Information): Remove mention of HP-UX.
-
-2015-12-10  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Stack): Reorder menu.
-
-2015-12-09  Luis Machado  <lgustavo@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Update text to mention
-	-var-set-format's new zero-hexadecimal format.
-
-2015-12-08  Pierre-Marie de Rodat  <derodat@adacore.com>
-
-	* gdb.texinfo (Ada Mode Into): Move overloading support
-	description to its own node.
-	(Overloading support for Ada): New node.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	PR 14618
-	* gdb.texinfo (Stop Reply Packets): Document the N stop reply.
-	(Remote Configuration): Add the "set/show remote
-	no-resumed-stop-reply" to the available settings table.
-	(General Query Packets): Document the "no-resumed" qSupported
-	feature.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Remote Configuration): List "set/show remote
-	thread-events" command in configuration table.
-	(Stop Reply Packets): Document "T05 create" stop
-	reason and 'w' stop reply.
-	(General Query Packets): Document QThreadEvents packet.  Document
-	QThreadEvents qSupported feature.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Bootstrapping): Add "interrupting remote targets"
-	anchor.
-	(Packets): Document vCtrlC.
-
-2015-11-26  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Thread List Format): Mention thread names.
-
-2015-11-24  Pedro Alves  <palves@redhat.com>
-
-	PR 17539
-	* gdb.texinfo (Inferiors and Programs): Adjust "maint info
-	program-spaces" example to ascending order listing.
-	(Threads): Adjust "info threads" example to ascending order
-	listing.
-	(Forks): Adjust "info inferiors" example to ascending order
-	listing.
-
-2015-11-04  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Process Record and Replay): Document "record
-	instruction-history" modifiers.
-
-2015-10-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Frames): Remove 'frame' and 'select-frame'
-	description.
-	(Frame Filter Management): Move to later in the 'Examining the
-	Stack' chapter.
-	(Selection): Add entry for 'select-frame'.
-
-2015-09-25  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Process Record and Replay): Fix syntax of
-	"record instruction-history begin, end" and
-	"record function-call-history begin, end".
-
-2015-09-22  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Specifying Source Directories): Fix
-	substitute-path example.
-
-2015-09-18  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (All-Stop Mode): Describe new scheduler-locking mode.
-
-2015-09-15  Pedro Alves  <palves@redhat.com>
-
-	PR remote/18965
-	* gdb.texinfo (Stop Reply Packets): Revert previous change to
-	the vforkdone description.
-
-2015-09-15  Pedro Alves  <palves@redhat.com>
-
-	PR remote/18965
-	* gdb.texinfo (Stop Reply Packets): Explain that vforkdone's 'r'
-	part indicates the thread ID of the parent process.
-
-2015-09-15  Yao Qi  <yao.qi@linaro.org>
-
-	* gdb.texinfo (General Query Packets): Add vContSupported to
-	tables of 'gdbfeatures' and 'stub features' supported in the
-	qSupported packet, as well as to the list containing stub
-	feature details.
-
-2015-09-11  Don Breazeal  <donb@codesourcery.com>
-
-	* gdb.texinfo (Remote Configuration): Add exec event
-	feature to table of packet settings.
-	(Stop Reply Packets): Add exec events to the list of stop
-	reasons.
-	(General Query Packets): Add exec events to tables of
-	'gdbfeatures' and 'stub features' supported in the qSupported
-	packet, as well as to the list containing stub feature
-	details.
-
-2015-08-24  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Remote Configuration): Document the "set/show
-	remote multiprocess-extensions-packet" commands.
-
-2015-08-24  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Embedded Processors) <ARM>: Remove references to RDI.
-	<M32R>: Remove references to M32R/D.
-	<M68K>: Remove references to target dbug.
-	<MIPS Embedded>: Remove references to target r3900 and target
-	array.
-	<PowerPC Embedded>: Remove references to target dink32 and target
-	ppcbug, target sds
-	<PA, Sparclet, Sparclite, Z8000>: Delete nodes.
-
-2015-08-18  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (GDB Files): Add 'File Caching' menu entry.
-
-2015-08-18  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (File Caching): Document "set/show debug bfd-cache".
-
-2015-08-18  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Maintenance Commands): Move documentation of "main
-	info bfds" to...
-	(File Caching): A New section.  Outline bfd caching, and add new
-	description for "main set/show bfd-sharing".
-
-2015-08-14  Doug Evans  <xdje42@gmail.com>
-
-	* gdb.texinfo (Machine Code): Update docs for mixed source/assembly
-	disassembly.
-	(GDB/MI Data Manipulation): Update docs for new disassembly modes.
-
-2015-08-11  Keith Seitz  <keiths@redhat.com>
-
-	* gdb.texinfo (Thread-Specific Breakpoints, Printing Source Lines):
-	Use "location(s)"instead of "linespec(s)".
-	(Specifying a Location): Rewrite.
-	Add subsections describing linespec, address, and explicit locations.
-	Add node/menu for each subsection.
-	(Source and Machine Code, C Preprocessor Macros)
-	(Create and Delete Trace points)
-	(Extensions for Ada Tasks): Use "location(s)" instead of "linespec(s)".
-	(Continuing at a Different Address): Remove "linespec" examples.
-	Add reference to "Specify a Location"
-	(The -break-insert Command): Rewrite.  Add anchor.
-	Add reference to appropriate manual section discussing locations.
-	(The -dprintf-insert Command): Refer to -break-insert for
-	specification of 'location'.
-
-2015-08-07  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint set/show
-	target-non-stop".
-
-2015-08-07  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Process Record and Replay): Document prefixing of
-	speculatively executed instructions in the "record instruction-history"
-	command.
-
-2015-07-20  Doug Evans  <dje@google.com>
-
-	* Makefile.in (STABS_DOC_BUILD_INCLUDES): Add gdb-cfg.texi, GDBvn.texi.
-
-2015-07-16  Doug Evans  <dje@google.com>
-
-	* stabs.texinfo: @include gdb-cfg.texi.
-
-2015-07-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Revert the previous 2 commits:
-	gdbserver build-id attribute generator
-	Validate symbol file using build-id
-
-2015-07-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Files): Add 'set validate-build-id'
-	and 'show validate-build-id'.
-
-2015-07-15  Aleksandar Ristovski  <aristovski@qnx.com
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	gdbserver build-id attribute generator.
-	* gdb.texinfo (Library List Format for SVR4 Targets): Add
-	'build-id' in description, example, new attribute in dtd.
-
-2015-07-08  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Selection): Update documentation for 'frame'
-	command.
-
-2015-07-02  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint btrace"
-	commands.
-
-2015-07-02  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Process Record and Replay): Spell out that variables
-	and registers are not available during btrace replay.
-	Describe the new "record btrace pt" command.
-	Describe the new "set|show record btrace pt buffer-size" options.
-	(General Query Packets): Describe the new Qbtrace:pt and
-	Qbtrace-conf:pt:size packets.
-	Expand "bts" to "Branch Trace Store".
-	Update the branch trace DTD.
-
-2015-06-26  Patrick Palka  <patrick@parcs.ath.cx>
-
-	* gdb.texinfo (Command History): Document the new option
-	"history remove-duplicates".
-
-2015-06-19  Doug Evans  <dje@google.com>
-
-	* stabs.texinfo (ELF Linker Relocation): Mention Sun stabs is no
-	longer supported.
-
-2015-06-17  Patrick Palka  <patrick@parcs.ath.cx>
-
-	* gdb.texinfo (Command History): Mention that setting
-	GDBHISTSIZE to the empty string disables history truncation.
-
-2015-06-17  Patrick Palka  <patrick@parcs.ath.cx>
-
-	PR gdb/16999
-	* gdb.texinfo (Command History): Mention new GDBHISTSIZE
-	behavior.
-
-2015-06-17  Patrick Palka  <patrick@parcs.ath.cx>
-
-	* gdb.texinfo (Command History): Replace occurrences of HISTSIZE
-	with GDBHISTSIZE.
-
-2015-06-15  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Data Manipulation): Clarify usage of
-	bytes and memory units for -data-{read,write}-memory-bytes.
-	(Packets): Same for m, M and X packets.
-	* python.texi (Inferiors In Python): Same for read_memory and
-	write_memory.
-
-2015-06-10  Jon Turney  <jon.turney@dronecode.org.uk>
-
-	* gdb.texinfo (Separate Debug Files): Document that PE is also
-	supported.
-
-2015-06-13  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (TUI Commands): Bring all 'tui reg' commands into a
-	single table entry.
-
-2015-06-10  Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* gdb.textinfo (i386): Fix "@end table" end and "@table" placement.
-
-
-2015-06-10  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (Remote Configuration): Document the
-	"set/show remote hostio-setfs-packet" command.
-	(Host I/O Packets): Document the vFile:setfs packet.
-
-2015-06-10  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (Debugging Output): Document the "set/show debug
-	linux-namespaces" command.
-
-2015-06-10  Walfred Tedeschi  <walfred.tedeschi@intel.com>
-	    Mircea Gherzan  <mircea.gherzan@intel.com>
-
-	* gdb.texinfo (i386): Add documentation about "show mpx bound"
-	and "set mpx bound".
-
-2015-05-27  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Debugging Output): Mention set/show debug dwarf-line.
-
-2015-05-26  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Debugging Output): Update for DWARF "set debug"
-	command renamings.
-	(Maintenance Commands): Update for DWARF "set debug" command renamings.
-
-2015-05-26  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (TUI Commands): Add 'tui reg prev' details.
-
-2015-05-22  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (TUI): Include 'tui enable' in the introduction.
-	(TUI Commands): Add 'tui enable' and 'tui disable' details.
-
-2015-05-16  Doug Evans  <xdje42@gmail.com>
-
-	* guile.texi (Memory Ports in Guile): Document support for unbuffered
-	memory ports.
-
-2015-05-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Compiling and Injecting Code): Add compile print.
-
-2015-05-12  Don Breazeal  <donb@codesourcery.com>
-
-	* gdb.texinfo (Forks): Note that fork debugging is
-	supported in extended mode.
-	(Remote Configuration): Add fork event features to table
-	of packet settings.
-	(Stop Reply Packets): Add fork events to list of stop reasons.
-	(General Query Packets): Add fork events to tables of
-	'gdbfeatures' and 'stub features' supported in the qSupported
-	packet, as well as to the list containing stub feature
-	details.
-
-2015-05-12  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (General Query Packets): Document
-	qXfer:exec-file:read with empty annex.
-
-2015-05-09  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* python.texi (Values From Inferior): Add descriptions of new
-	methods gdb.Value.reference_value and gdb.Value.const_value.
-
-2015-05-06  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Files): Add "info dll" documentation.
-	(Cygwin Native): Remove "info dll" documentation.
-
-2015-04-29  Doug Evans  <dje@google.com>
-
-	* python.texi (Xmethod API) <gdb.XMethodWorker.get_result_type>:
-	Document.
-	(Writing an Xmethod): Add get_result_type to example.
-
-2015-04-28  Sasha Smundak  <asmundak@google.com>
-
-	* python.texi: New method documented.
-
-2015-04-24  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* gdb.texinfo (Dump/Restore Files): Add detail about verilog dump
-	format.
-
-2015-04-24  Doug Evans  <dje@google.com>
-
-	* python.texi (Xmethods In Python): Fix name of method to call the
-	xmethod.
-
-2015-04-17  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (Connecting to a Remote Target): Mention that
-	GDB can access program files from remote targets that support
-	qXfer:exec-file:read and Host I/O packets.
-
-2015-04-17  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (Remote Configuration): Document the "set/show
-	remote pid-to-exec-file-packet" command.
-	(General Query Packets): Document the qXfer:exec-file:read
-	qSupported features.  Document the qXfer:exec-file:read packet.
-
-2015-04-17  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (set sysroot): Document that "set sysroot" also
-	applies to executable paths if supplied to GDB as absolute.
-
-2015-04-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Mode Options): Remove -xdb.
-
-2015-04-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Compiling and Injecting Code): Describe set debug
-	compile, show debug compile.  New subsection Compilation options for
-	the compile command.  New subsection Compiler search for the compile
-	command.
-
-2015-04-09  Andy Wingo  <wingo@igalia.com>
-
-	* guile.texi (Frames In Guile): Describe frame-read-register.
-
-2015-04-02  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (set sysroot): Document "target:".
-
-2015-04-01  Sasha Smundak  <asmundak@google.com>
-
-	* doc/python.texi (Writing a Frame Unwinder in Python): Add
-	section.
-
-2015-03-31  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR corefiles/16092
-	* gdb.texinfo (gcore): Mention new command 'set
-	use-coredump-filter'.
-	(set use-coredump-filter): Document new command.
-
-2015-03-31  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* gdb.texinfo (Operating System Auxiliary Information): Add info os cpus
-	documentation, reorder the info os entries in alphabetical order.
-
-2015-03-26  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Data Manipulation): Fix copy-paste typo in
-	-data-write-memory-bytes.
-
-2015-03-24  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (test_step) <set scheduler-locking step>: No longer
-	mention that threads may sometimes run unlocked.
-
-2015-03-23  Yurij Grechishhev  <yurij.grechishhev@gmail.com>
-
-	* gdb.texinfo (Remote configuration): Document "set/show
-	serial parity" command.
-
-2015-03-18  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (General Query Packets): Remove documentation
-	for now-removed vFile:fstat qSupported features.
-
-2015-03-11  Gary Benson <gbenson@redhat.com>
-
-	* gdb.texinfo (Remote Configuration): Document the
-	"set/show remote hostio-fstat-packet" command.
-	(General Query Packets): Document the vFile:fstat
-	qSupported features.
-	(Host I/O Packets): Document the vFile:fstat packet.
-
-2015-03-11  Andy Wingo  <wingo@igalia.com>
-
-	* guile.texi (Objfiles In Guile): Document objfile-progspace.
-
-2015-03-04  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Remote Configuration): Document the "set/show
-	remote swbreak-feature-packet" and "set/show remote
-	hwbreak-feature-packet" commands.
-	(Packets) <Z0>: Add cross link to the "swbreak" stop reason's
-	decription.
-	(Stop Reply Packets): Document the swbreak and hwbreak stop
-	reasons.
-	(General Query Packets): Document the swbreak and hwbreak
-	qSupported features.
-	(Remote Non-Stop): Explain that swbreak and hwbreak are required.
-
-2015-03-03  Philippe Proulx  <eeppeliteloop@gmail.com>
-
-	* gdb.texinfo (gdb/mi Async Records): Fix duplicate syscall-entry
-	under *stopped.
-
-2015-03-02  Doug Evans  <xdje42@gmail.com>
-
-	* gdb.texinfo (Specify Location): Fix syntax of filename:function.
-
-2015-03-02  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* gdb.texinfo (S/390 and System z Features): Describe new feature
-	"org.gnu.gdb.s390.vx".
-
-2015-02-23  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR gdb/18008
-	* gdb.texinfo (maint internal-error, maint internal-warning, maint
-	demangler-warning): Fix typo ("problam").
-
-2015-02-19  David Taylor  <dtaylor@emc.com>
-
-	* agentexpr.texi (Bytecode Descriptions): Fix summary line for setv.
-
-2015-02-17  Jose E. Marchesi  <jose.marchesi@oracle.com>
-
-	* gdb.texinfo (Static Probe Points): Add cindex `static probe
-	point, DTrace'.
-	(Static Probe Points): Modified to cover DTrace probes in addition
-	to SystemTap probes.  Also modified to cover the `enable probe'
-	and `disable probe' commands.
-
-2015-02-17  Jose E. Marchesi  <jose.marchesi@oracle.com>
-
-	* gdb.texinfo (Static Probe Points): Cover the `enable probe' and
-	`disable probe' commands.
-
-2015-02-12  David Taylor  <dtaylor@emc.com>
-
-	* gdb.texinfo (Tracepoint Packets): Document the builtin and name
-	fields of the QTDV packet.
-
-2015-02-09  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Branch Trace Configuration Format): Add size.
-	(Process Record and Replay): Describe new set|show commands.
-	(General Query Packets): Describe Qbtrace-conf:bts:size packet.
-
-2015-02-09  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Process Record and Replay): Describe the "record
-	btrace bts" command.
-	(General Query Packets): Describe qXfer:btrace-conf:read packet.
-	(Branch Trace Configuration Format): New.
-
-2015-01-31  Gary Benson <gbenson@redhat.com>
-	    Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Command Completion): Document new
-	"set/show max-completions" option.
-
-2015-01-31  Doug Evans  <xdje42@gmail.com>
-
-	* gdb.texinfo (Symbols): Document new commands
-	"maint print symbol-cache", "maint print symbol-cache-statistics",
-	"maint flush-symbol-cache".  Document new option
-	"maint set symbol-cache-size".
-
-2015-01-31  Doug Evans  <xdje42@gmail.com>
-
-	* gdb.texinfo (dotdebug_gdb_scripts section): Update docs to
-	distinguish script files vs inlined scripts.
-	* python.texi (Python Auto-loading): Ditto.
-
-2015-01-30  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Symbols) <info source>: Output now contains producer
-	string if present.
-
-2015-01-27  Doug Evans  <dje@google.com>
-
-	* python.texi (Objfiles In Python): Document Objfile.username.
-
-2015-01-27  Doug Evans  <dje@google.com>
-
-	* python.texi (Objfiles In Python) <Objfile.filename>: Improve docs.
-	* guile.texi (Objfiles In Guile) <objfile-filename>: Improve docs.
-
-2015-01-22  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Threads): Describe -ascending for thread apply all.
-
-2015-01-16  Eli Zaretskii  <eliz@gnu.org>
-
-	* doc/gdb.texinfo (TUI Commands): Document the possible
-	values of NAME argument to 'winheight' command.  Explain the
-	effect of 'tabset' setting better.
-
-2015-01-11  Doug Evans  <xdje42@gmail.com>
-
-	PR gdb/15830
-	* gdb.texinfo (Debugging C Plus Plus): Mention "demangle".
-	(Symbols): Ditto.
-	(Maintenance Commands): Delete docs for "maint demangle".
-
-2014-12-31  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Files): Remove documentation of the
-	"add-shared-symbol-files" and "assf" commands.
-	(Cygwin Native): Remove documentation of the "dll-symbols"
-	command.
-
-2014-12-17  Doug Evans  <xdje42@gmail.com>
-
-	* gdb.texinfo (Debugging Output): Document "debug symbol-lookup".
-
-2014-12-12  Phil Muldoon  <pmuldoon@redhat.com>
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Altering): Update.
-	(Compiling and Injecting Code): New node.
-
-2014-12-12  Doug Evans  <dje@google.com>
-
-	* python.texi (Objfiles In Python): Document gdb.lookup_objfile.
-
-2014-12-12  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* gdb.texinfo: Document "maint print user-registers".
-
-2014-12-08  Doug Evans  <dje@google.com>
-
-	* python.texi (Objfiles In Python): Document Objfile.owner.
-
-2014-12-04  Doug Evans  <dje@google.com>
-
-	* python.texi (Objfiles In Python): Document
-	Objfile.add_separate_debug_file.
-
-2014-12-04  Doug Evans  <dje@google.com>
-
-	* python.texi (Objfiles In Python): Document Objfile.build_id.
-
-2014-12-02  Nick Bull  <nicholaspbull@gmail.com>
-
-	* python.texi (Events In Python): Document new events
-	InferiorCallPreEvent, InferiorCallPostEvent, MemoryChangedEvent
-	and RegisterChangedEvent.
-
-2014-11-30  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Add add-auto-load-scripts-directory.
-	* gdb.texinfo (Auto-loading): Add add-auto-load-scripts-directory link.
-	(objfile-gdbdotext file): Add add-auto-load-scripts-directory.
-
-2014-11-30  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading safe path): Fix add-auto-load-safe-path
-	description typo.
-
-2014-10-30  Doug Evans  <dje@google.com>
-
-	* python.texi (Progspaces In Python): Document ability to add
-	random attributes to gdb.Progspace objects.
-	(Objfiles In Python): Document ability to add random attributes to
-	gdb.objfile objects.
-
-2014-10-27  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Continuing and Stepping): Add cross reference to
-	info on stepping and signal handlers.
-	(Signals): Explain stepping and signal handlers.  Add context
-	index entry, and cross references.
-
-2014-10-20  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* python.texi (Breakpoints In Python): Add parenthesis after
-	Breakpoint.delete.  Clarify Breakpoint.enabled description so
-	that it contains "disable".
-
-2014-10-17  Doug Evans  <dje@google.com>
-
-	* python.texi (Events In Python): Document clear_objfiles event.
-
-2014-10-17  Doug Evans  <dje@google.com>
-
-	* python.texi (Objfiles In Python): Document new progspace attribute.
-
-2014-10-17  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Ada Tasks and Core Files): Delete mention of Tru64.
-	(SVR4 Process Information): Delete mention of OSF/1.
-
-2014-10-01  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdb.texinfo (Miscellaneous gdb/mi Commands): Document new
-	exit-code field in -list-thread-groups output.
-
-2014-09-22  Jan-Benedict Glaw  <jbglaw@lug-owl.de>
-
-	* gdb.texinfo (Set Breaks): Add missing "@end table".
-
-2014-09-22  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Set Breaks): Document that "set breakpoint
-	always-inserted off" is the default mode now.  Delete
-	documentation of "set breakpoint always-inserted auto".
-
-2014-09-18  Doug Evans  <dje@google.com>
-
-	* python.texi (Symbol Tables In Python): Document "producer"
-	attribute of gdb.Symtab objects.
-
-2014-09-16  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Starting) <run command>: Don't mention VxWorks.
-	(Embedded OS): Remove VxWorks menu entry.
-	(VxWorks): Remove node.
-
-2014-09-13  Doug Evans  <xdje42@gmail.com>
-
-	* gdb.texinfo (Signaling): Document new queue-signal command.
-
-2014-09-06  Doug Evans  <xdje42@gmail.com>
-
-	PR 15276
-	* gdb.texinfo (Convenience Funs): Document $_caller_is,
-	$_caller_matches, $_any_caller_is, $_any_caller_matches.
-
-2014-09-03  Justin Lebar <jlebar@google.com>
-
-	* python.texi (Types In Python): Type.template_argument(n) returns a
-	gdb.Value or a gdb.Type and throws an exception if n is out of
-	range.
-
-2014-09-03  Sasha Smundak  <asmundak@google.com>
-
-	* python.texi (Frames in Python): Add read_register description.
-
-2014-08-04  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Debugging Output): Update for change to "set debug
-	target".
-
-2014-08-01  Masaki Muranaka  <monaka@monami-software.com>
-
-	Pushed by Joel Brobecker  <brobecker@adacore.com>.
-	* Makefile.in (transform): New variable.
-	(install-man1, install-man5): Apply $(transform) to man file names.
-
-2014-07-26  Doug Evans  <xdje42@gmail.com>
-
-	PR guile/17177
-	* guile.texi (Guile Pretty Printing API): Fix typo.
-	Document set-pretty-printers!, pretty-printers.
-	(Selecting Guile Pretty-Printers): Update.
-	Mention program-space based pretty-printers.
-
-2014-07-25  Pedro Alves  <palves@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Signaling) <signal command>: Explain what happens
-	with multi-threaded programs.
-
-2014-06-27  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Maintenance Commands): Update the output of
-	'maint print dummy-frames' command.
-
-2014-06-24  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Screen Size): Improve indexing.
-
-2014-06-19  Gary Benson  <gbenson@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document new
-	"maint set/show catch-demangler-crashes" option.
-
-2014-06-19  Gary Benson  <gbenson@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document new
-	"maint demangler-warning" command and new
-	"maint set/show demangler-warning" option.
-
-2014-06-09  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* python.texi (Xmethod API): Add space before the opening
-	parenthesis in function descriptions.
-
-2014-06-06  Doug Evans  <xdje42@gmail.com>
-
-	* guile.texi (Guile Configuration): Document guile-data-directory.
-
-2014-06-06  Mingjie Xing  <mingjie.xing@gmail.com>
-
-	* gdb.texinfo (Invoking GDB): Add -q and --quiet.
-
-2014-06-04  Doug Evans  <xdje42@gmail.com>
-
-	* guile.texi (Breakpoints In Guile): Update.
-
-2014-06-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* python.texi (Xmethod API): Fix reference to "Progspaces In
-	Python".
-
-2014-06-03  Siva Chandra Reddy  <sivachandra@google.com>
-
-	*  python.texi (Xmethods In Python, XMethod API)
-	(Writing an Xmethod): New nodes.
-	(Python API): New menu entries "Xmethods In Python",
-	"Xmethod API", "Writing an Xmethod".
-
-2014-06-02  Doug Evans  <xdje42@gmail.com>
-
-	* guile.texi (Guile API): Add entry for Parameters In Guile.
-	(GDB Scheme Data Types): Mention <gdb:parameter> object.
-	(Parameters In Guile): New node.
-
-2014-06-02  Doug Evans  <xdje42@gmail.com>
-
-	* guile.texi (Guile API): Add entry for Commands In Guile.
-	(Basic Guile) <parse-and-eval>: Add reference.
-	(Basic Guile) <string->argv>: Move definition to Commands In Guile.
-	(GDB Scheme Data Types): Mention <gdb:command> object.
-	(Commands In Guile): New node.
-
-2014-06-02  Doug Evans  <xdje42@gmail.com>
-
-	* guile.texi (Guile API): Add entry for Progspaces In Guile.
-	(GDB Scheme Data Types): Mention <gdb:progspace> object.
-	(Progspaces In Guile): New node.
-
-2014-05-30  Andrew Burgess  <aburgess@broadcom.com>
-
-	* guile.texi (Frames In Guile): Mention FRAME_UNWIND_MEMORY_ERROR.
-	* python.texi (Frames In Python): Mention
-	gdb.FRAME_UNWIND_MEMORY_ERROR.
-
-2014-05-29  Pedro Alves  <palves@redhat.com>
-	    Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Non-Stop Mode): Remove "set target-async 1"
-	from example.
-	(Asynchronous and non-stop modes): Document '-gdb-set mi-async'.
-	Mention that target-async is now deprecated.
-	(Maintenance Commands): Document maint set/show target-async.
-
-2014-05-29  Pedro Alves  <palves@redhat.com>
-
-	* observer.texi (sync_execution_done, command_error): New
-	subjects.
-
-2014-05-29  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/13860
-	* observer.texi (signal_received, end_stepping_range)
-	(signal_exited, exited, no_history): New observer subjects.
-
-2014-05-26  Andy Wingo  <wingo@igalia.com>
-
-	* guile.texi (GDB Scheme Data Types): Remove documentation for
-	removed interfaces.  Update spelling of gdb-object-kind.
-
-2014-05-26  Andy Wingo  <wingo@igalia.com>
-
-	* guile.texi (Basic Guile): Fix some typos.
-
-2014-05-26  Andy Wingo  <wingo@igalia.com>
-
-	* guile.texi (Writing a Guile Pretty-Printer)
-	(Guile Types Module): Fix excess parentheses in use-modules forms.
-
-2014-05-24  Eli Zaretskii  <eliz@gnu.org>
-
-	* guile.texi (Types In Guile, Basic Guile, Frames In Guile)
-	(Breakpoints In Guile, Guile Printing Module)
-	(Guile Exception Handling, Values From Inferior In Guile)
-	(Objfiles In Guile, Breakpoints In Guile, Memory Ports in Guile):
-	Don't use @var at the beginning of a sentence.
-
-	* gdb.texinfo (Frame Filter Management, Trace Files)
-	(C Operators, Ada Tasks, Calling, Bootstrapping, ARM)
-	(PowerPC Embedded, Define, Annotations for Running)
-	(IPA Protocol Commands, Packets, General Query Packets)
-	(Tracepoint Packets, Notification Packets, Environment)
-	(Inferiors and Programs, Set Breaks, Set Catchpoints)
-	(Continuing and Stepping, Signals, Thread-Specific Breakpoints)
-	(Frames, Backtrace, Selection, Expressions, Registers)
-	(Trace State Variables, Built-In Func/Proc, Signaling, Files)
-	(Numbers, GDB/MI Async Records, GDB/MI Data Manipulation)
-	(Source Annotations, Using JIT Debug Info Readers, Packets)
-	(Stop Reply Packets, Host I/O Packets)
-	(Target Description Format): Don't use @var at the beginning of a
-	sentence.
-
-	* python.texi (Basic Python, Types In Python)
-	(Commands In Python, Frames In Python, Line Tables In Python)
-	(Breakpoints In Python, gdb.printing, gdb.types)
-	(Type Printing API): Don't use @var at the beginning of a
-	sentence.
-
-2014-05-23  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Process Record and Replay): Document "set/show btrace
-	replay-memory-access".
-
-2014-05-21  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Starting): Document "set/show
-	auto-connect-native-target".
-	(Target Commands): Document "target native".
-
-2014-05-20  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Memory) <compare-sections>: Generalize comments to
-	not be remote specific.  Add cross reference to the qCRC packet.
-	(Separate Debug Files): Update cross reference to the qCRC packet.
-	(General Query Packets) <qCRC packet>: Add anchor.
-
-2014-05-17  Doug Evans  <xdje42@gmail.com>
-
-	Copy over changes from guile.texi.
-	* python.texi (Basic Python) <gdb.execute>: Add text.
-	(Basic Python) <gdb.post_event>: Remove "main" from "main GDB thread".
-	(Values From Inferior) <Python string>: Add text.
-	(Values From Inferior) <Value.string>: Clarify string length handling.
-	(Pretty Printing API): Add cindex.
-	(Types In Python) <TYPE_CODE_*>: Use vtable instead of table.
-	Remove unnecessary index of gdb.TYPE_CODE_*.  Replace @findex with
-	@vindex.
-	(Commands In Python) <COMPLETE_*>: Similarly.
-	(Symbols In Python) <SYMBOL_*>: Similarly.
-	(Breakpoints In Python) <WP_*>: Similarly.
-	(Breakpoints In Python) <BP_*>: Similarly.
-
-2014-05-17  David Taylor <dtaylor@emc.com>
-
-	* gdb.texinfo (General Query Packets): Add a note about thread IDs
-	mentioned in the qfThreadInfo reply.
-
-2014-05-16  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Mode Options): Add -D.
-
-2014-05-09  Samuel Bronson  <naesten@gmail.com>
-
-	* Makefile.in (PACKAGE): Copy from ../Makefile.in in case of
-	"make -C".
-
-2014-04-29  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Debugging Output): Rename to "set debug varobj" and
-	"show debug varobj".
-
-2014-05-01  David Taylor  <dtaylor@emc.com>
-
-	* gdb.texinfo (compare-sections): Document the new -r (read-only)
-	option.
-
-2014-04-24  Michael Sturm  <michael.sturm@mintel.com>
-	    Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* gdb.texinfo (i386 Features): Add description of AVX512
-	registers.
-
-2014-03-31  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Symbols): Document set/show print symbol-loading.
-
-2014-03-30  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Non-Stop Mode): Remove trailing whitespace.
-	(Background Execution): Ditto.
-
-2014-03-21  Pedro Alves  <palves@redhat.com>
-	    Stan Shebs  <stan@codesourcery.com>
-	    Hui Zhu  <hui@codesourcery.com>
-
-	* gdb.texinfo (Packets): Add anchor to "? packet".
-	Remove fixme and update introduction of "k packet".
-	Add anchor to "vKill packet".
-
-2014-03-12  Stan Shebs  <stan@codesourcery.com>
-
-	* Doxyfile-gdb-api.in (INPUT): Add gdbtypes.h.
-
-2014-02-26  Ludovic CourtÃ¨s  <ludo@gnu.org>
-
-	* guile.texi (Basic Guile): Document 'history-append!'.
-
-2014-02-20  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Files): Document "add-shared-symbol-files"
-	and "assf" as being deprecated.
-	(Cygwin Native): Likewise for "dll-symbols".
-	(Non-debug DLL Symbols): Remove reference to "dll-symbols"
-	as a way to force the loading of symbols from a DLL.
-
-2014-02-19  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* python.texi (Values From Inferior): Add description about the
-	new feature.
-
-2014-02-17  Doug Evans  <xdje42@gmail.com>
-
-	* Makefile.in (GDB_DOC_FILES): Add python.texi.
-	* gdb.texinfo (Python): Moved to ...
-	* python.texi: ... here.  New file.
-
-2014-02-17  Ludovic CourtÃ¨s  <ludo@gnu.org>
-
-	* guile.texi (Writing a Guile Pretty-Printer) <example>:
-	Remove 'string-begins-with' procedure.  Add 'pretty-printer'
-	parameter to 'str-lookup-function' procedure.  Look for
-	the "std::string<" prefix.
-	(Frames In Guile): Add 'frame' parameter to 'frame-read-var'.
-	Adjust description.
-
-2014-02-11  Tejas Belagod  <tejas.belagod@arm.com>
-
-	* guile.texi (Values From Inferior In Guile): Remove stray
-	parantheses for deffn.
-	(Disassembly In Guile): Ditto.
-
-2014-02-10  Stan Shebs  <stan@codesourcery.com>
-
-	Add Doxygen support.
-	* Makefile.in (doxy): New action, generates Doxygen files.
-	(DOXYGEN): New.
-	(doxyedit): New.
-	* Doxyfile-base.in: New file.
-	* Doxyfile-gdb-api.in: New file.
-	* Doxyfile-gdb-xref.in: New file.
-	* Doxyfile-gdbserver.in: New file.
-	* doxy-index.in: New file.
-	* filter-for-doxygen: New file.
-	* filter-params.pl: New file.
-
-2014-02-10  Doug Evans  <xdje42@gmail.com>
-
-	* Makefile.in (GDB_DOC_FILES): Add guile.texi.
-	* gdb.texinfo (Auto-loading): Add set/show auto-load guile-scripts.
-	(Extending GDB): New menu entries Guile, Multiple Extension Languages.
-	(Guile docs): Include guile.texi.
-	(objfile-gdbdotext file): Add objfile-gdb.scm.
-	(dotdebug_gdb_scripts section): Mention Guile scripts.
-	(Multiple Extension Languages): New node.
-	* guile.texi: New file.
-
-2014-01-28  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ada Glitches): Document the new "maint ada set/show
-	ignore-descriptive-types". commands.
-
-2014-01-22  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Server): Mention --debug-format=all|none|timestamp.
-	(gdbserver man): Ditto.
-
-2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo: Document limited reverse/replay support
-	for target record-btrace.
-
-2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Process Record and Replay): Update documentation.
-
-2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Process Record and Replay): Document new /c
-	modifier accepted by "record function-call-history".
-	Add /i modifier to "record function-call-history" example.
-
-2014-01-15  Yuanhui Zhang  <asmwarrior@gmail.com>
-	    Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Output Syntax): Add some missing "nl"
-	markers.  Remove one that was misplaced.
-
-2014-01-10  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Your Program's Environment) <set environment>:
-	Mention the shell, and point at 'set exec-wrapper'.
-
-2014-01-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Types In Python): Document new attribute Types.name.
-
-2013-12-30  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Types In Python): Clarify the documentation
-	of attribute gdb.Field.bitpos.
-
-2013-12-28  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Types In Python): Fix the documentation of
-	attribute "bitpos" in class gdb.Field for enum types.  Add
-	documentation for attribute "enumval" in that same class.
-
-2013-12-28  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Support Commands): Change @table into
-	@ftable.
-
-2013-12-23  Doug Evans  <xdje42@gmail.com>
-
-	* gdb.texinfo (Auto-loading): Move menu up.  Move discussion of
-	auto-loaded objfile scripts and .debug_gdb_scripts section to their
-	corresponding section in Extending GDB.
-	(Extending GDB): Move menu up.  New menu item "Auto-loading
-	extensions".
-	(Sequences): New menu item "Auto-loading sequences".
-	(Auto-loading sequences): New node.
-	(Python): Rename section from Scripting GDB to Extending GDB.
-	(Python Auto-loading): Update xref, refer to "Auto-loading extensions".
-	Move docs on ways to auto-load extensions to ...
-	(Auto-loading extensions): ... here.  New node.
-
-2013-12-23  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI): Add "GDB/MI Support Commands" entry
-	in menu.
-	(GDB/MI Variable Objects): Adjust reference to "-list-features"
-	command, now in a new node.
-	(GDB/MI Support Commands): New node, with its contents being
-	extracted from the "GDB/MI Miscellaneous Commands" node.
-	A small paragraph introducing the section is also added at
-	the start.
-	(GDB/MI Miscellaneous Commands): Delete the description of the
-	-info-gdb-mi-command, -list-features and -list-target-features
-	commands, now hosted in the "GDB/MI Support Commands" node.
-
-2013-12-12  Siva Chandra Reddy  <sivachandra@google.com>
-
-	PR python/16113
-	* gdb.texinfo (Values From Inferior): Add a note about using
-	gdb.Field objects as subscripts on gdb.Value objects.
-	(Types In Python): Add description about the new attribute
-	"parent_type" of gdb.Field objects.
-
-2013-12-12  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Add @cindex
-	entry for section docuumenting the -list-features GDB/MI command.
-
-2013-12-10  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document the new
-	"exec-run-start-option" entry in the output of the "-list-features"
-	command.
-
-2013-12-04  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (i386): Fix yesterday's commit.
-
-2013-12-03  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Catchpoints): Add @kindex for each command
-	documented here.
-
-2013-12-03  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (@direntry): Add menu item for gdbserver.
-
-2013-12-03  Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* gdb.texinfo (i386 Features): Add MPX feature registers.
-	(x86 Specific featuresx86 Architecture-specific Issues): Adds
-	a subsubsection for MPX and describes the display of the
-	boundary registers.
-
-2013-12-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Remove the
-	documentation of the "ada-exceptions" entry.
-
-2013-12-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Result Records): Fix the syntax of the
-	"^error" result record concerning the error message.  Document
-	the error code that may also be part of that result record.
-	(GDB/MI Miscellaneous Commands): Document the
-	"undefined-command-error-code" element in the output of
-	the "-list-features" GDB/MI command.
-
-2013-12-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document
-	the new -info-gdb-mi-command GDB/MI command.  Document
-	the meaning of "-info-gdb-mi-command" in the output of
-	-list-features.
-
-2013-11-29  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Frames In Python) <gdb.FRAME_UNWIND_NULL_ID>:
-	Update comment.
-
-2013-11-24  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Caching Remote Data): Document new
-	"set/show stack-cache" option.
-
-2013-11-24  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Caching Target Data): Replace "ON" with "on".
-	(Maintenance Commands): Replace "ON" and "OFF" with "on" and
-	"off" respectively.
-
-2013-11-23  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Add the description
-	of "displayhint" to the table about child results.
-
-2013-11-21  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Add attribute
-	'dynamic' for the output of command -var-list-children.
-
-2013-11-21  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Caching Target Data): Remove "see" before
-	@pxref.
-
-2013-11-20  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Caching Target Data): Update doc for
-	per-address-space dcache.
-
-2013-11-20  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Data): Rename menu item.
-	(Caching Remote Data): Rename to ...
-	(Caching Target Data): ... it.  Update.
-
-2013-11-18  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document the new
-	"language-option" entry in the output of the "-list-features"
-	command.
-
-2013-11-15  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Variables): Note gdb rules for ambiguous cases.
-	Add example.
-
-2013-11-14  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Breakpoints In Python): Replace "as" with "in".
-
-2013-11-14  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Show): Add xref anchor for "show language" command.
-	(Context management): Place current subsection text into its own
-	subsubsection.  Add new subsubsection describing the "--language"
-	command option.
-
-2013-11-13  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Delete
-	the documentation of "info-ada-exceptions" in the output
-	of the "-list-features" command.  Add the documentation
-	of the "ada-exception" entry instead.
-
-2013-11-12  Joel Brobecker  <brobecker@adacore.com>
-
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Fix the first
-	word of a couple of sentences to start with a capital letter.
-
-2013-11-12  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ada): Add entry in menu for new "Ada Exceptions" node.
-	(Ada Exceptions): New node.
-	(GDB/MI): Add entry in menu for new "GDB/MI Ada Exceptions
-	Commands" node.
-	(GDB/MI Ada Exceptions Commands): New node.
-	(GDB/MI Miscellaneous Commands): Document new "info-ada-exceptions"
-	field in the output of the "-list-features" command.
-	* NEWS: Add entry for the new "info exceptions" CLI command,
-	and for the new "-info-ada-exceptions" GDB/MI command.
-
-2013-11-11  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Symbol Tables In Python): Add linetable method entry.
-	(Line Tables In Python): New node.
-
-2013-11-08  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Debugging Output): Update text for
-	"set debug dwarf2-read".
-
-2013-11-08  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Debugging Output): Update text for
-	"set debug symtab-create".
-
-2013-11-07  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Commands In Python): Document COMPLETE_EXPRESSION
-	constant.
-
-2013-11-07  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Breakpoints In Python): Document temporary
-	option in breakpoint constructor, and add documentation to the
-	temporary attribute.
-
-2013-11-07  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Update doc about the
-	output of "-var-info-expression".
-
-2013-11-06  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Starting) <set/show startup-with-shell>: Mention
-	non-interactive mode.
-	(Environment) <shell startup files warning>: Mention
-	non-interactive mode.  Mention .zshenv for Z shell, and talk about
-	BASH_ENV instead of .bashrc for BASH.
-
-2013-10-29  Nicolas Blanc  <nicolas.blanc@intel.com>
-
-	* gdb.texinfo (Commands to Specify Files): Add description
-	of the remove-symbol-file command.
-	* observer.texi: New free_objfile event
-
-2013-10-24  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Starting): Document set/show startup-with-shell.
-
-2013-10-11  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Shared Library GDB/MI Catchpoint Commands):
-	New subsection inside which the "-catch-load" and "-catch-unload"
-	commands documentation is now placed.
-	(Ada Exception GDB/MI Catchpoint Commands): New subsection
-	documenting the "-catch-assert" and "-catch-exception" new
-	GDB/MI commands.
-
-2013-10-10  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Connecting): Remove unnecessary @w{}.
-
-2013-10-10  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Connecting): Replace "set remotebaud" by "set
-	serial baud".
-	(Remote Configuration): Replace "set remotebaud" by "set serial
-	baud".  Replace "show remotebaud" by "show serial baud".
-
-2013-10-07  Pedro Alves  <palves@redhat.com>
-
-	PR breakpoints/11568
-	* gdb.texinfo (Thread-Specific Breakpoints): Mention what happens
-	when the thread is removed from the thread list.
-
-2013-10-06  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (Convenience Variables): Document $_exitsignal.
-	Update entry for $_exitcode.
-
-2013-10-04  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Program Execution): Document "-exec-run"'s
-	new "--start" option.
-
-2013-10-02  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Registers): Expand description of saved registers
-	in frames.  Explain <not saved>.
-
-2013-09-25  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Debugging Output): Document set/show debug symfile.
-
-2013-09-16  Stan Shebs  <stan@codesourcery.com>
-
-	Remove the internals manual gdbint.texinfo.
-	* Makefile.in (INFO_DEPS): Remove gdbint.info.
-	(PDFFILES): Remove gdbint.pdf.
-	(HTMLFILES): Remove gdbint/index.html.
-	(HTMLFILES_INSTALL): Remove gdbint.
-	(GDBINT_DOC_FILES): Remove.
-	(dvi): Remove gdbint.dvi.
-	(ps): Remove gdbint.ps.
-	* gdbint.texinfo: Remove file.
-	* gdb.texinfo (Maintenance Commands): Remove reference to gdbint.
-
-2013-09-16  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (Convenience Functions): Mention new convenience
-	function $_isvoid.
-
-2013-09-13  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* gdb.texinfo (Decimal Floating Point format): Mention S/390.
-	(Standard Target Features): Add new node to menu.
-	(S/390 and System z Features): New node.
-
-2013-09-13  Sanimir Agovic  <sanimir.agovic@intel.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Use
-	-list-target-features in the example.
-
-2013-09-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (MiniDebugInfo): Prepare file debug and use it to create
-	mini_debuginfo.  Strip binary before adding mini_debuginfo to it.
-
-2013-09-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Sync documentation with gdb.base/gnu-debugdata.exp.
-	* gdb.texinfo (MiniDebugInfo): Add comment and "D" in the example.
-
-2013-09-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (MiniDebugInfo): Fix two trailing dots.
-
-2013-08-27  Pedro Alves  <pedro@codesourcery.com>
-	    Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Stack Manipulation) <-stack-list-locals>:
-	Document new --skip-unavailable option.
-	<-stack-list-variables>: Document new --skip-unavailable option.
-
-2013-08-26  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Maintenance Commands): "maint print objfiles" now takes
-	an optional regexp.
-
-2013-08-13  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (Testsuite): Use @table, not @itemize.
-	Document GDB_PARALLEL and GDB_INOTIFY.
-
-2013-08-09  Stan Shebs  <stan@codesourcery.com>
-
-	* LRS: Remove file, describes a long-abandoned live-range
-	splitting extension to stabs.
-
-2013-07-25  Andrew Burgess  <aburgess@broadcom.com>
-
-	* gdb.texinfo (Output Formats): Mention the new 'z' formatter.
-
-2013-07-17  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Print Settings): Document "print raw frame-arguments".
-
-2013-07-02  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Target Commands): Don't mention "target nrom".
-
-2013-06-28  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (version.subst): Use version.in, not
-	common/version.in.
-	* gdbint.texinfo (Versions and Branches, Releasing GDB):
-	Likewise.
-
-2013-06-27  Pedro Alves  <palves@redhat.com>
-
-	* gdbint.texinfo (Algorithms) <Stepping over runtime loader
-	dynamic symbol resolution code>: New section, based on infrun.c
-	comment.
-
-2013-06-26  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (Versions and Branches): Use common/version.in.
-	Update.
-	(Releasing GDB): Likewise.
-
-2013-06-26  Pedro Alves  <pedro@codesourcery.com>
-	    Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Tracepoint Commands): Document
-	-trace-frame-collected.
-
-2013-06-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Traceframe Info Format): Document tvar element
-	and its attributes.
-
-2013-06-25  Yao Qi  <yao@codesourcery.com>
-
-	* gdbint.texinfo (Testsuite): Document 'gdb,predefined_tsv'.
-
-2013-06-24  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (POD2MAN1, POD2MAN5): Use version.subst.
-	(GDBvn.texi): Use version.subst.
-	(version.subst): New target.
-	(mostlyclean): Remove version.subst.
-
-2013-06-20  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Data Manipulation)
-	<-data-list-register-values>: Document the --skip-unavailable
-	option.
-
-2013-06-07  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Symbols): Add kindex and cindex for
-	'maint print msymbols'.
-
-2013-06-05  Simon Marchi  <simon.marchi@ericsson.com>  (tiny change)
-
-	* gdb.texinfo (Miscellaneous gdb/mi Commands): Fix -add-inferior
-	response field name (thread-group to inferior).
-
-2013-06-04 Gary Benson  <gbenson@redhat.com>
-
-	* gdb.texinfo (General Query Packets/qSupported): Added
-	"qXfer:libraries-svr4:read" and "augmented-libraries-svr4-read".
-	to the table of currently defined stub features.
-	Added a more detailed entry for "augmented-libraries-svr4-read".
-	(General Query Packets/qXfer:libraries-svr4:read): Documented
-	the augmented form of this packet.
-
-2013-05-23  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (System-wide Configuration Scripts): Renames
-	"Installed System-wide Configuration Scripts". Add associated
-	@menu block.
-
-2013-05-23  Yao Qi  <yao@codesourcery.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Packets): Document 'vCont;r'.
-	(Continuing and Stepping): Document target-assisted range
-	stepping, and the 'set range-stepping' and 'show range-stepping'
-	commands.
-
-2013-05-23  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Installed System-wide Configuration Scripts):
-	Add subsection describing the scripts now available under
-	the data-dir's system-gdbbinit subdirectory.
-	* NEWS: Add entry announcing the availability of system-wide
-	configuration scripts for ElinOS and Wind River Linux.
-
-2013-05-21  Hui Zhu  <hui@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Breakpoint Commands): Describe the
-	"-dprintf-insert" command.
-
-2013-05-17  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Maintenance Commands): Update doc for
-	"maint check-psymtabs".  Add doc for "maint check-symtabs",
-	"maint expand-symtabs".
-
-2013-05-15  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Process Record and Replay): Document the
-	"record goto" command and its sub-commands.
-
-2013-05-10 Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Backtrace): Add "no-filter" argument.
-	(Python API): Add Frame	Filters API, Frame Wrapper API,
-	Writing a Frame Filter/Wrapper,	Managing Management of Frame
-	Filters chapter entries.
-	(Frame Filters API): New Node.
-	(Frame Wrapper API): New Node.
-	(Writing a Frame Filter): New Node.
-	(Managing Frame Filters): New Node.
-	(Progspaces In Python): Add note about frame_filters attribute.
-	(Objfiles in Python): Ditto.
-	(GDB/MI Stack Manipulation): Add -enable-frame-filters command,
-	@anchors and --no-frame-filters option to -stack-list-variables,
-	-stack-list-frames, -stack-list-locals and -stack-list-arguments
-	commands.
-
-2013-05-08  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Native Debugging): Add "AIX Shared Library
-	Support" subsection documenting the XML format used to transfer
-	shared library info on AIX.
-
-2013-05-08  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Debugging Output): Add documentation of
-	"set debug aix-solib" and "show debug aix-solib" commands.
-
-2013-05-06  Sandra Loosemore  <sandra@codesourcery.com>
-
-	* gdb.texinfo (Nios II): New section.
-	(Nios II Features): New section.
-
-2013-05-06  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Algorithms): Remove entries documenting
-	DEPRECATED_IBM6000_TARGET, SOLIB_ADD, and
-	SOLIB_CREATE_INFERIOR_HOOK.
-
-2013-04-29  Tom Tromey  <tromey@redhat.com>
-
-	PR python/14204:
-	* gdb.texinfo (Python API): Fix menu entry.
-	(Blocks In Python): Fix subsubsection text.  Rewrite intro.
-	Define global and static block.  Add example.  Clarify
-	block relationship for inline functions.
-
-2013-04-29  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Python API): Mention Python help and keyword
-	arguments.  Move pagination text to Basic Python.
-	(Basic Python): Put pagination text here.  Document
-	close-on-exec, SIGCHLD, and SIGINT.
-
-2013-04-19  Pedro Alves  <palves@redhat.com>
-
-	* gdbint.texinfo (Misc Guidelines) <Compiler Warnings>: Write
-	"signedness" instead of "signness".
-
-2013-04-19  Pedro Alves  <palves@redhat.com>
-
-	* gdbint.texinfo (Misc Guidelines) <Compiler Warnings>: Replace
-	-Wno-pointer-sign text with text on -Wpointer-sign.
-
-2013-04-16  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Catchpoints): Mention earliest version of
-	GCC that has the SDT probe points.
-
-2013-04-15  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Catchpoints): Document regexp syntax for
-	exception catchpoints.
-
-2013-04-15  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Catchpoints): Document $_exception.
-	(Convenience Vars): Mention $_exception.
-
-2013-04-15  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Catchpoints): Reorganize exception
-	catchpoints.  Document "catch rethrow".
-	(Debugging C Plus Plus): Mention "catch rethrow".
-
-2013-04-15  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Catchpoints): Remove obsolete text.
-
-2013-04-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Auto-loading safe path): Add quick -iex using command
-	line below the sample output.
-
-2013-04-12  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Mode Options): Document '-configuration'.
-	(Help): Document "show configuration".
-	(Bug Reporting): Add requirements to include the configuration
-	details in bug reports.
-
-2013-04-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* Makefile.in (MAN1S): Add gcore.1.
-	Remove "Host, target, and site specific Makefile fragments" comment.
-	(@host_makefile_frag@, HAVE_NATIVE_GCORE_TARGET): New.
-	(install-man1, uninstall-man1): Conditionalize gcore.1.
-	(gcore.1): New.
-	* gdb.texinfo (Man Pages): Add gcore man.
-	(gcore man): New node.
-
-2013-04-10  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Process Record and Replay): Document that "set
-	record full insn-number-max", "set record
-	instruction-history-size" and "set record
-	function-call-history-size" accept "unlimited".
-	(Backtrace): Document that "set backtrace limit" accepts
-	"unlimited".
-	(List): Document that "set listsize" accepts "unlimited".
-	(Print Settings)" Document that "set print max-symbolic-offset",
-	"set print elements" and "set print repeats" accept "unlimited".
-	(Starting and Stopping Trace Experiments): Document that "set
-	trace-buffer-size" accepts "unlimited".
-	(Remote Configuration): Document that "set tcp connect-timeout"
-	accepts "unlimited".
-	(Command History): Document that "set history size" accepts
-	"unlimited".
-	(Screen Size): Document that "set height" and "set width" accepts
-	"unlimited".  Adjust "set pagination"'s description to suggest
-	"set height unlimited" instead of "set height 0".
-
-2013-04-10  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Trace Files): Add "target ctf".
-
-2013-04-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* Makefile.in (POD2MAN1, POD2MAN5): Replace $(VERSION) by ../version.in.
-
-	* Makefile.in (install-man1, install-man5, uninstall-man1)
-	(uninstall-man5): Replace $(MANS) by $(MAN1S) and $(MAN5S) respectively.
-
-	* Makefile.in (gdb.1, gdbserver.1, gdbinit.5): Use $(srcdir).
-
-2013-04-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (gdbserver man): Rename tty to comm.  Swap --attach
-	parameters order.  Remove "On some targets" for --attach.  Document the
-	--multi parameter and extended-remote command.  Document all the
-	options.
-
-2013-04-05  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (gdb man): Mention option -p.  Include Fortran to
-	the list of supported languages.
-
-2013-04-05  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Convert man pages to texinfo, new gdbinit.5 texinfo page.
-	* Makefile.in (mandir, man1dir, man5dir, SYSTEM_GDBINIT, MANCONF,
-	(TEXI2POD, POD2MAN1, POD2MAN5, MAN1S, MAN5S, MANS, man): New.
-	(diststuff): Add man.
-	(install-man, install-man1, install-man5, uninstall-man, uninstall-man1)
-	(uninstall-man5): New.
-	(STAGESTUFF): Add *.1 and *.5.
-	(GDBvn.texi): Add SYSTEM_GDBINIT.
-	(gdb.1, gdbserver.1, gdbinit.5): New.
-	(maintainer-clean realclean): Add $(MANS).
-	(install): Add install-man.
-	(uninstall): Add uninstall-man.
-	* gdb.texinfo (@include gdb-cfg.texi): Wrap it by @c man begin INCLUDE.
-	(@copying): Wrap it by @c man begin COPYRIGHT.
-	(Top): Add Man Pages.
-	(Man Pages, gdb man, gdbserver man, gdbinit man): New.
-
-2013-04-02  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Debugging Output): Document "set/show debug
-	aarch64", "set/show debug coff-pe-read" and "set/show debug
-	mach-o".
-
-2013-04-02  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Remote Configuration) <set remote @var{name}-packet
-	table>: Add entry for "trace-buffer-size".
-
-2013-03-28  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (Remote Configuration) <set remote @var{name}-packet
-	table>: Add entry for "trace-status".
-
-2013-03-28  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Maintenance Commands): Use @enumerate, not "@table
-	@bullet", which is invalid (makeinfo 5.1 barfs).
-
-2013-03-28  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/15294
-
-	* gdb.texinfo (List) <set listsize>: Adjust to document that
-	listsize 0 means no limit, and remove mention of -1.
-
-2013-03-22  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Embedded Processors): Remove menu item
-	"OpenRISC 1000".
-	(OpenRISC 1000): Remove.
-
-2013-03-21  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Maintenance Commands): Add docs for
-	"mt set per-command {space,time,symtab} {on,off}".
-
-2013-03-14  Hui Zhu  <hui@codesourcery.com>
-	    Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Trace Files): Add "tsave -ctf".
-
-2013-03-13  Keith Seitz  <keiths@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Add missing ')' for
-	"maint agent" reference to Dynamic printf.
-
-2013-03-11  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (General Query Packets): Don't use colon in index
-	entries visible to Info format.
-
-2013-03-11  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Process Record and Replay): Document record
-	changes.
-
-2013-03-11  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* gdb.texinfo (Requirements): List qXfer:btrace:read requiring expat.
-	(General Query Packets): Describe Qbtrace:bts, Qbtrace:off, and
-	qXfer:btrace:read.
-
-2013-03-09  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (General Query Packets, Tracepoint Packets): Don't
-	use colons in @anchor and @cindex entries.
-
-2013-03-09  Hafiz Abid Qadeer  <abidh@codesourcery.com>
-
-	* gdb.texinfo (QTBuffer:size): Add cindex and anchor.
-
-2013-03-08  Stan Shebs  <stan@codesourcery.com>
-	    Hafiz Abid Qadeer  <abidh@codesourcery.com>
-
-	* gdb.texinfo (Starting and Stopping Trace Experiments): Document
-	trace-buffer-size set and show commands.
-	(Tracepoint Packets): Document QTBuffer:size.
-	(General Query Packets): Document QTBuffer:size.
-
-2013-02-21  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo: Remove bad @syncodeindex.
-	(Values From Inferior, Types In Python, Inferiors In Python)
-	(Events In Python, Threads In Python, Frames In Python, Blocks In
-	Python, Symbols In Python, Symbol Tables In Python): Remove
-	@tables.
-	(Packets, General Query Packets, Tracepoint Packets)
-	(Host I/O Packets): Use @w{} for empty @item.
-
-2013-02-20  Siva Chandra Reddy <sivachandra@google.com>
-
-	* gdb.texinfo (Architectures In Python): Add description about
-	the new method gdb.Architecture.disassemble.
-
-2013-02-15  Pedro Alves  <pedro@codesourcery.com>
-	    Hafiz Abid Qadeer  <abidh@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Tracepoint Commands) <-trace-status>:
-	Document the "trace-file" field.
-
-2013-02-07  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Machine Code): Clarify argument to disassemble
-	command.
-
-2013-02-06  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Document new MI
-	notification "=tsv-modified".  Update the document of MI
-	notification "=tsv-created".
-	* observer.texi (GDB Observers): New observer tsv_modified.
-	Update observer tsv_created and tsv_delete.
-
-2013-02-05  Yufeng Zhang  <yufeng.zhang@arm.com>
-
-	* gdb.texinfo (AArch64 Features): New section; document
-	org.gnu.gdb.aarch64.core and org.gnu.gdb.aarch64.fpu.
-	(Architectures): Add new AArch64 section to document AArch64
-	architecture specific commands.
-	(ABI): Add description of the new OS ABI "Newlib" and its influence
-	on the longjmp handling.
-
-2013-02-03  Eldar Gaynetdinov <hal9000ed2k@gmail.com>
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Backtrace): Added description of 'filename-display'
-	variable in 'set/show backtrace' section.
-
-2013-01-31  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Target Commands): Fix typo.
-
-2013-01-23  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* doc/gdb.texinfo (Architectures In Python): New sub-sub-section
-	describing the gdb.Architecture class.
-	(Frames In Python): Add description about the new method
-	gdb.Frame.architecture().
-
-2013-01-23  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Index Section Format): Document .gdb_index version 8.
-
-2013-01-21  Marc Khouzam  <marc.khouzam@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Breakpoint Commands): Document new
-	'thread-groups' field when printing a breakpoint in MI.
-
-2012-01-17  Sanjoy Das <sanjoy@playingwithpointers.com>
-	* gdb.texinfo (Using JIT Debug Info Readers): Change documentation
-	to reflect that jit-reader-load now supports absolute file-names.
-
-2013-01-16  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Catchpoints): Document "catch signal".
-	(Signals): Likewise.
-
-2013-01-16  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Breakpoint Information): Document
-	"catch-type" field.
-	(GDB/MI Catchpoint Commands): Add "catch-type" to examples.
-
-2013-01-07  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Mode Options): Don't mention -epoch.
-	(Data, Emacs): Remove obsolete comments.
-
-2013-01-02  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Output Records): Update menu.
-	(GDB/MI Breakpoint Information): New node.
-	(GDB/MI Breakpoint Commands) <-break-info>: Link to new node.
-	<-break-insert>: Likewise.
-
-2012-12-31  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Remote Non-Stop): Move paragraphs to ...
-	(Packets): Move "vStopped" packet to ...
-	(Notification Packets): ... here.  Describe the components
-	of notification.  Add a table of supported notifications.
-	Add an example on the process of he async notification.
-
-2012-12-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (GDB/MI Data Manipulation) (fullname): Make it always
-	present.
-	(GDB/MI File Commands) (-file-list-exec-source-files): Make the
-	fullname output always present.
-
-2012-12-23  Pierre Muller  <muller@sourceware.org>
-
-	* gdbint.texinfo (Function prototypes): Require use of "extern"
-	modifier for function prototypes in headers.
-
-2012-12-19  Joel Brobecker  <brobecker@adacore.com>
-
-	* refcard.tex: Update copyright notice to GPL v3 or later.
-	Update contact info.
-
-2012-12-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdbint.texinfo (Coding Standards) (C Usage): New rule for 0 vs. NULL.
-
-2012-12-15  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Debugging Output): Document 'set debug
-	notification' and 'show debug notification'.
-
-2012-12-15  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Listing Tracepoints): New item and example about
-	'installed on target' output.
-	Add more in the example about 'installed on target'.
-	(GDB/MI Breakpoint Commands): Doc about 'installed field.
-
-2012-12-14  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (SVR4 Process Information): Mention core files.
-
-2012-12-12 Mircea Gherzan <mircea.gherzan@intel.com>
-
-	* gdb.texinfo (GDB/MI Catchpoint Commands): New section.
-
-2012-12-11  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo: Remove all mentions of Unixware throughout.
-
-2012-12-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdbint.texinfo (Host Definition): Remove CC_HAS_LONG_LONG.
-
-2012-11-29  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (SVR4 Process Information): Document missing
-	"info proc" subcommands.
-
-2012-11-29  Yao Qi  <yao@codesourcery.com>
-
-	PR gdb/1477.
-	* gdb.texinfo (Print Settings): Correct the default 'demangle-style'
-	to 'auto' instead of 'gnu'.
-
-2012-11-26  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (MiniDebugInfo): New node.
-	(GDB Files): Update.
-
-2012-11-16  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (System-wide configuration): If the system-wide init
-	file lives in the data-directory, and --data-directory is provided,
-	look for it there.
-
-2012-11-15  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Signaling): Fix typo.
-
-2012-11-13  Giuseppe Montalto  <giuseppe.montalto@st.com>
-
-	* gdb.texinfo (GDB/MI Data Manipulation): Document new optional
-	parameter "count" of -data-write-memory-bytes, and add an example.
-
-2012-11-12  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Symbols): Document "info type-printers",
-	"enable type-printer" and "disable type-printer".
-	(Python API): Add new node to menu.
-	(Type Printing API): New node.
-	(Progspaces In Python): Document type_printers field.
-	(Objfiles In Python): Likewise.
-	(gdb.types) <get_type_recognizers, apply_type_recognizers,
-	register_type_printer, TypePrinter>: Document.
-
-2012-11-12  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Symbols): Document "set print type methods",
-	"set print type typedefs", and flags to ptype and whatis.
-
-2012-11-09  Andrew Burgess  <aburgess@broadcom.com>
-
-	* gdb.texinfo (GDB/MI Data Manipulation): Add fullname field to
-	the example -data-disassemble output.  Extend the description of
-	the -data-disassemble results to document all fields.  Document
-	the cli disassemble command as being related to -data-disassemble.
-
-2012-11-09  Yao Qi  <yao@codesourcery.com>
-
-	PR gdb/14777.
-	* gdb.texinfo (OS Information): Remove doc on command
-	'info udot'.
-
-2012-11-08  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Startup): Minor rewording, and clarify scope of
-	gdb.ini warning for Windows port.
-
-2012-11-08  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Search): Add kindex for 'fo'.
-
-2012-11-05  Tom Tromey  <tromey@redhat.com>
-
-	PR python/14802:
-	* gdb.texinfo (Functions In Python): Add example.
-
-2012-11-03  Yao Qi  <yao@codesourcery.com>
-
-	* observer.texi (GDB Observers): Remove observer
-	'tracepoint_modified', 'tracepoint_created' and
-	'tracepoint_deleted'.
-
-2012-10-26  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (General Query Packets): Use @itemx for QAgent.
-
-2012-10-25  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (General Query Packets): Use @itemx.
-
-2012-10-17  Yao Qi  <yao@codesourcery.com>
-
-	* observer.texi (GDB Observers): Update observer
-	'memory_changed'.
-	* gdb.texinfo (GDB/MI Async Records): Document for
-	"memory-changed" notification.
-
-2012-10-15  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Mode Options): Document -nh.
-	Elaborate on docs for -nx.
-
-2012-09-26  Siddhesh Poyarekar  <siddhesh@redhat.com>
-
-	* observer.texi (memory_changed): Expand parameter LEN to ssize_t.
-
-2012-09-21  Yao Qi  <yao@codesourcery.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Document notification
-	'record-started' and 'record-stopped'.
-	* observer.texi (GDB Observers): New observer 'record-changed'.
-
-2012-09-19  Thomas Schwinge  <thomas@codesourcery.com>
-
-	* gdb.texinfo: Document the removal of SH's 'regs' command.
-
-2012-09-18  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdb.texinfo (jump): Mention new alias `j' for `jump'.
-
-2012-09-18  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Document new MI
-	notifications '=tsv-created' and '=tsv-deleted'.
-	* observer.texi (GDB Observers): New observer tsv_created and
-	tsv_deleted.
-
-2012-09-18  Yao Qi  <yao@codesourcery.com>
-
-	* observer.texi (GDB Observers): New observer 'traceframe_changed'.
-	* gdb.texinfo (GDB/MI Async Records): Mention new MI notification
-	'=traceframe-changed'.
-
-2012-09-17  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (List): Describe the meaning of 0 and -1 in
-	'set listsize'.
-
-2012-09-13  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo (Defining Other Architecture Features): Clarify *pcptr
-	encoding for gdbarch_breakpoint_from_pc, bp_addr for
-	gdbarch_push_dummy_call and bp_addr for gdbarch_push_dummy_code.
-
-2012-08-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (objfile-gdb.py file): New paragraph for .exe stripping.
-
-2012-08-23  Khoo Yit Phang <khooyp@cs.umd.edu>
-
-	Document how to return from "python-interactive" to GDB.
-	* gdb.texinfo (Python Commands): Update documentation.
-
-2012-08-22  Khoo Yit Phang <khooyp@cs.umd.edu>
-
-	Add a new "python-interactive" command that starts a standard
-	Python interactive prompt with "pi" as alias, and add "py" as
-	an alias to "python".
-	* gdb.texinfo (Python Commands): Document the new commands.
-
-2012-08-22  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (Host Definition): Remove documentation for
-	SIGWINCH_HANDLER and SIGWINCH_HANDLER_BODY.
-
-2012-08-17  Keith Seitz  <keiths@redhat.com>
-
-	PR c++/13356
-	* gdb.texinfo (Type and Range Checking): Remove warning.
-	Remove spurious commas.
-	Update text and examples for re-implementation of set/show
-	check type.
-	(C and C++ Type and Range Checks): Likewise.
-
-2012-08-16  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Types In Python): Mention gdb.TYPE_CODE_BITSTRING
-	is deprecated.
-
-2012-08-13  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Convenience Vars): Update text for "show convenience"
-	to include functions.
-
-2012-08-10  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Convenience Funs): New node.
-	(Types In Python): Document Type.vector.
-
-2012-08-09  Yao Qi  <yao@codesourcery.com>
-
-	* observer.texi: New observer command_param_changed.
-	* gdb.texinfo (GDB/MI Async Records): Doc for '=cmd-param-changed'.
-
-2012-08-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdbint.texinfo (Debugging GDB): In section
-	'Debugging @value{GDBN} with itself' change .gdbinit for gdb-gdb.gdb.
-	Mention also gdb-gdb.py.
-
-2012-08-07  Yao Qi  <yao@codesourcery.com>
-
-	Revert the folloing patch:
-	2012-08-06  Yao Qi  <yao@codesourcery.com>
-	* gdb.texinfo (Remote Configuration): Add kindex for 'set
-	remote hardware-watchpoint-limit' and 'set
-	remote hardware-breakpoint-limit'.
-
-2012-08-06  Nathaniel Flath  <flat0103@gmail.com>
-
-	* gdb.texinfo (Working Directory): Added information about new
-	default argument for 'cd' command.
-
-2012-08-06  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Remote Configuration): Add kindex for 'set
-	remote hardware-watchpoint-limit' and 'set
-	remote hardware-breakpoint-limit'.
-
-2012-08-06  Yao Qi  <yao@codesourcery.com>
-
-	Fix PR14371.
-
-	* gdb.texinfo (GDB/MI Async Records): Fix the doc for
-	'=breakpoint-deleted'.
-
-2012-08-02  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Native): Remove node Neutrino.
-
-2012-07-27  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (IPA Protocol Commands): Document new command
-	'close'.
-
-2012-07-25  Tom Tromey  <tromey@redhat.com>
-
-    	* gdb.texinfo (Maintenance Commands): Document maint info bfds.
-
-2012-07-20  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Mode Options): Delete --use-deprecated-index-sections.
-	(Index Files): Document how to control the use of deprecated index
-	sections.
-	(Index Section Format): Replace --use-deprecated-index-sections with
-	"set use-deprecated-index-sections on".
-
-2012-07-12  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo: Remove @syncodeindex directives that put all the
-	indices into a single node "Index".  Instead, join function and
-	variable indices into a single index, separate from the concept
-	index.  Requested in
-	http://sourceware.org/ml/gdb-patches/2012-07/msg00146.html.
-	(Top): Update the top-level menu: instead of one "Index" there are
-	now separate entries "Concept Index" and "Function and Variable
-	Index".
-	(Concept Index, Function and Variable Index): New nodes.
-	(Index): Node deleted.
-
-2012-07-05  Hui Zhu  <hui_zhu@mentor.com>
-
-	* gdb.texinfo (Maintenance Commands): Change help for "maint agent"
-	and "maint agent-eval".
-
-2012-07-03  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: Separate the index into 2 indices, cp and fn, to
-	avoid file-name clashes between Index.html and index.html on
-	case-insensitive filesystems.  See the discussion starting in
-	http://sourceware.org/ml/gdb-patches/2012-06/msg00457.html for the
-	details of the problem.
-	(Top): Update the master menu for the above.
-	(Concept Index, Command and Variable Index): New nodes, instead of
-	the old "Index" node that was deleted.  All cross-references
-	updated.
-
-2012-07-02  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Dynamic Printf): Mention agent style and
-	disconnected dprintf.
-	(Maintenance Commands): Describe maint agent-printf.
-	(General Query Packets): Mention BreakpointCommands feature.
-	(Packets): Document commands extension to Z0 packet.
-	* agentexpr.texi (Bytecode Descriptions): Document printf
-	bytecode.
-
-2012-07-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (File Options): Change -ix and -iex commands that apply
-	only after gdbinit files.
-	(Startup): Move -iex and -iex commands down after gdbinit files.
-
-2012-07-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading safe path): Note the shell wildcard
-	possibility.
-
-2012-06-29  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Index Section Format): Update for version 7.
-
-2012-06-28  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Miscellaneous GDB/MI Commands): Update -info-os
-	example, add note about title column.
-
-2012-06-26  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* gdb.texinfo (Symbol Tables In Python): Add description about
-	the new 'last' attribute of gdb.Symtab_and line.
-
-2012-06-26  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* gdb.texinfo (Symbol Tables In Python): Correct the description
-	of the 'pc' attribute of gdb.Symtab_and_line.
-
-2012-06-26  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Debugging Output): Document debug options dwarf2-read
-	and symtab-create.
-
-2012-06-25  Keith Seitz  <keiths@redhat.com>
-
-	* gdb.texinfo (GDB/MI Breakpoint Commands): Remove "-r" option
-	from example.  Remove "rbreak" from list of corresponding
-	gdb commands.
-
-2012-06-23  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Index Section Format): Document version 7 format.
-
-2012-06-22  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo: Add missing cindex for some packets.
-
-2012-06-20  Keith Seitz  <keiths@redhat.com>
-
-	* gdb.texinfo (GDB/MI Breakpoint Commands): Re-order options
-	for -break-insert and document -p.
-
-2012-06-20  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Inferiors In Python): Replace "gdb.read_memory"
-	and "gdb.write_memory" with "Inferior.read_memory" and
-	"Inferior.write_memory".
-
-2012-06-15  Patrice Dumas  <pertusus@free.fr>  (tiny change)
-
-	* gdb.texinfo (Summary): Add a link to "Free Documentation".
-	(Free Documentation): Add @node line.
-	(Continuing and Stepping) <advance location>: Use @item instead of
-	@itemx.
-	(Reverse Execution) <set exec-direction reverse>: Use @item instead of
-	@itemx.
-	(Embedded Processors): Put the link to "PA" to its correct place,
-	according to document structure.
-	(Python API): Put the link to "Lazy Strings In Python" to its
-	correct place.
-	(Index): Use @@ in @tex block to get a literal @.
-
-	* gdbint.texinfo: Fix the @subtitle line.
-
-	* stabs.texinfo (Top): Put the link to "Symbol Types Index" to its
-	correct place.
-
-2012-06-08  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (In-Process Agent): Add 'In-Process Agent
-	Protocol'.
-	(In-Process Agent Protocol, IPA Protocol Objects)
-	(IPA Protocol Commands): New nodes.
-	(Tracepoint Packets): Add anchors.
-
-2012-06-06  Thomas Schwinge  <thomas@codesourcery.com>
-
-	* gdb.texinfo: Document the deprecation of SH's 'regs' command.
-
-2012-06-06  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo: Update copyright year.
-
-2012-05-23  Stan Shebs  <stan@codesourcery.com>
-	    Kwok Cheung Yeung  <kcy@codesourcery.com>
-
-	* gdb.texinfo (Miscellaneous GDB/MI Commands): Document -info-os.
-
-2012-05-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Separate Debug Files): New anchor debug-file-directory.
-	Mention also --with-separate-debug-dir.
-	(Auto-loading): Prepend $debugdir in the sample output.
-	(Auto-loading safe path): Likewise.  Mention also $debugdir for the
-	auto-load safe-path variable.
-	(objfile-gdb.py file): Remove the extra debug-file-directory paragraph.
-	Mention also $debugdir for 'set auto-load scripts-directory'.
-
-2012-05-19  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Continuing and Stepping, Selection, Byte Order)
-	(MIPS Embedded, MIPS, MIPS Register packet Format)
-	(Target Descriptions, MIPS Features): Use @acronym{MIPS} where
-	appropriate.
-
-2012-05-18  Sandra Loosemore  <sandra@codesourcery.com>
-	    Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* gdb.texinfo (MIPS): Document "set mips compression" and "show
-	mips compression".
-	(MIPS Breakpoint Kinds): New subsubsection.
-
-2012-05-18  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Architecture-Specific Protocol Details): Define
-	nodes for subsections.  Add @acronym mark-ups and adjust
-	formatting.
-
-2012-05-18  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Rename $ddir to $datadir.
-	* gdb.texinfo (Auto-loading, Auto-loading safe path)
-	(objfile-gdb.py file): Rename $ddir to $datadir.
-
-2012-05-18  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Print Settings): Document 'set print symbol'.
-
-2012-05-14  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Dynamic Printf): New subsection.
-
-2012-05-13  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* gdb.texinfo (Basic Python): Add description about the function
-	gdb.find_pc_line
-
-2012-05-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Separate Debug Files): Use plural form for global
-	debugging information directory.
-
-2012-05-11  Stan Shebs  <stan@codesourcery.com>
-	    Kwok Cheung Yeung  <kcy@codesourcery.com>
-
-	* gdb.texinfo (Operating System Auxiliary Information): Document new
-	'info os' subcommands.
-
-2012-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading, Init File in the Current Directory)
-	(libthread_db.so.1 file, objfile-gdb.gdb file, objfile-gdb.py file)
-	(dotdebug_gdb_scripts section): Add reference
-	to 'Auto-loading safe path'.
-
-2012-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Implement multi-component --with-auto-load-dir.
-	* gdb.texinfo (Auto-loading): New references
-	for 'set auto-load scripts-directory'
-	and 'show auto-load scripts-directory'.
-	(Auto-loading safe path): Describe the new default.  Move $ddir
-	substituation reference to 'objfile-gdb.py file'.
-	(objfile-gdb.py file): Describe script-name alias.  Change real-name to
-	script-name.  Describe new 'set auto-load scripts-directory'
-	and 'show auto-load scripts-directory'.
-
-2012-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Provide $ddir substitution for --with-auto-load-safe-path.
-	* gdb.texinfo (Auto-loading): Replace /usr/local by $ddir/auto-load.
-	(Auto-loading safe path): Likewise.  Mention the default value,
-	$ddir substitution, --with-auto-load-safe-path and
-	--without-auto-load-safe-path.
-	* observer.texi (gdb_datadir_changed): New.
-
-2012-05-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading): Wrap too long lines in @smallexample.
-	Twice.
-
-	* gdb.texinfo (Separate Debug Files, Auto-loading safe path): Replace
-	directory separator by path separator.
-
-2012-05-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading safe path): Make 'directories'
-	for 'set auto-load safe-path' optional.  Mention if it is omitted.
-	Change disabling security protection condition to "/", twice.
-
-2012-05-03  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* gdb.texinfo (Symbol Tables In Python): Add documentation about
-	the new methods global_block and static_block on gdb.Symtab
-	objects.
-
-2012-05-02  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* gdb.texinfo (Blocks In Python): Add a note saying that future
-	improvements to GDB and its infrastructure can move symbols
-	across blocks within a symbol table.
-
-2012-04-29  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Architectures): Remove menu entry `A29K'.
-	(A29K): Remove.
-
-2012-04-27  Sergio Durigan Junior  <sergiodj@redhat.com>
-	    Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Static Probe Points): New entry, explaining SystemTap
-	and generic static probe support on GDB.
-
-2012-04-25  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Go): Fix thinko.
-
-	* gdb.texinfo (Supported Languages): Add Go.
-	(Go): New node.
-
-2012-04-25  Yao Qi  <yao@codesourcery.com>
-
-	* gdbint.texinfo (Testsuite): New section `Board settings'.
-
-2012-04-23  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading safe path): Remove trailing [@dots{}].
-	Three times.
-
-	* gdb.texinfo (Auto-loading safe path): Add trailing @dots{}.
-	Three times.
-
-2012-04-22  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading safe path): Replace @itemize @bullet
-	by @table @asis.  Fix formatting of one item.
-
-2012-04-18  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading verbose mode): Fix smallexample typo.
-
-2012-04-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	New option "set debug auto-load".
-	* gdb.texinfo (Auto-loading): New menu item for auto-load verbose mode.
-	(auto-load verbose mode): New node.
-
-2012-04-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	New option "set auto-load safe-path".
-	* gdb.texinfo (Auto-loading): Extend the "show auto-load"
-	and "info auto-load" examples for safe-path.  Put there also references
-	for "set auto-load safe-path" and "show auto-load safe-path".
-	New menu item for Auto-loading safe path.
-	(Auto-loading safe path): New node.
-	(Python Auto-loading): Update the expected output from "Missing"
-	to "No".
-
-2012-04-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	auto-load: Implementation.
-	* gdb.texinfo (Mode Options): New anchor for -nx.
-	(Startup): New anchors for Option -init-eval-command,
-	Home Directory Init File
-	and Init File in the Current Directory during Startup.
-	Mention set auto-load local-gdbinit with a reference.
-	Change the sample code to "set auto-load python-scripts".
-	(Threads): New anchor set libthread-db-search-path.
-	Provide references to libthread_db.so.1 file.
-	(Controlling GDB): New menu item for Auto-loading.
-	(Auto-loading, Init File in the Current Directory)
-	(libthread_db.so.1 file, objfile-gdb.gdb file): New nodes.
-	(Python): Rename the menu item Auto-loading to Python Auto-loading.
-	(Writing a Pretty-Printer, Objfiles In Python): Update the renamed
-	reference.
-	(Auto-loading): Rename to ...
-	(Python Auto-loading): ... here.  Change "set auto-load-scripts" to
-	"set auto-load python-scripts", new anchor for it.  Change
-	"show auto-load-scripts" to "show auto-load python-scripts", new anchor
-	for it.  Change "info auto-load-scripts"
-	to "info auto-load python-scripts", new anchor for it.  Change "scripts"
-	to "Python scripts".
-
-2012-04-14  Anton Gorenkov <xgsa@yandex.ru>
-
-	PR mi/13393
-	* gdb.texinfo (Print Settings): Extend the description for "set print
-	object".
-	(GDB/MI Variable Objects): Extend the description for -var-create and
-	-var-list-children.
-
-2012-04-11  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* gdb.texinfo (Examining Data): Document the 'explore' command.
-
-2012-03-28  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Document what happens
-	to the children of a varobj and its update range when -var-update
-	returns that the varobj's type changed.
-
-2012-03-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading): Move @menu to the end of @node.
-	Create two new links fir 'objfile-gdb.py file'
-	and 'dotdebug_gdb_scripts section'.
-
-2012-03-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Auto-loading): Rename node reference
-	'.debug_gdb_scripts section' to 'dotdebug_gdb_scripts section'.
-	Twice.
-	(.debug_gdb_scripts section): Rename the node ...
-	(dotdebug_gdb_scripts section): ... here.
-	(Maintenance Commands): Also rename this node reference.
-
-2012-03-22  Siva Chandra Reddy  <sivachandra@google.com>
-
-	* gdb.texinfo (Python API/Values From Inferior): Add description
-	about the new method Value.referenced_value.  Add description on
-	how Value.dereference is different (and similar) to
-	Value.referenced_value.
-
-2012-03-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (File Options): Describe --init-command=FILE, -ix and
-	--init-eval-command=COMMAND, -iex.
-	(Startup): Describe -iex and -ix.  Simplify the example
-	for "set auto-load-scripts off".
-
-2012-03-16  Gary Benson  <gbenson@redhat.com>
-
-	PR breakpoints/10738
-	* gdb.texinfo (Inline Functions): Remove the now-unnecessary @item
-	stating that GDB cannot set breakpoints on inlined functions.
-	(Mode Options): Document --use-deprecated-index-sections.
-	(Index Section Format): Document new index section version format.
-
-2012-03-15  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Debugging C Plus Plus): Document "info vtbl".
-
-2012-03-13  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Help): Change apropos example to use "alias" instead
-	of "reload".
-	(Symbols): Delete docs for set/show symbol-reloading.
-	* gdbint.texinfo (Defining Other Architecture Features): Delete
-	SYMBOL_RELOADING_DEFAULT.
-	* refcard.tex: Delete reference to symbol-reloading.
-
-2012-03-07  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (General Query Packets): Document new
-	QProgramSignals packet.
-	* gdb.texinfo (Remote configuration): Mention
-	"program-signals-packet".
-
-2012-03-05  Tristan Gingold  <gingold@adacore.com>
-
-	* gdb.texinfo (General Query Packets): Document xfer:uib:read.
-
-2012-03-03  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (In-Process Agent): New node.
-	Document new commands.
-	(General Query Packets): Add packet `QAgent'.
-
-2012-03-01  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* gdb.texinfo (MIPS Features): Add org.gnu.gdb.mips.dsp.
-
-2012-03-01  Scott J. Goldman <scottjg@vmware.com>
-
-	* gdb.texinfo (Commands In Python): Put example python macro in
-	COMMAND_USER category rather than COMMAND_OBSCURE.
-	Document gdb.COMMAND_USER.
-	(User-defined Commands): Update documentation to clarify
-	"set/show max-user-call-depth" and "show user" don't apply to python
-	commands.  Update documentation to clarify "help user-defined" may
-	also include python commands defined as COMMAND_USER.
-
-2012-02-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Startup): Add option -ex description to the option -x
-	description.
-
-2012-02-24  Luis Machado  <lgustavo@codesourcery.com>
-
-	* gdb.texinfo (Setting Breakpoints): Mention and explain the
-	condition-evaluation breakpoint parameter.
-	Mention condition-evaluation mode being shown in "info break".
-	(Break Conditions): Add description for target-side
-	conditional breakpoints.
-	(Remote Configuration): Mention conditional-breakpoints-packet.
-	(Packets): Add cond-expr parameter to Z0/Z1 packets and explain
-	cond-expr.
-	(General Query Packets): Mention new ConditionalBreakpoint feature.
-
-2012-02-22  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Blocks In Python): Clarify block iteration.
-
-2012-02-17  Tom Tromey  <tromey@redhat.com>
-
-	PR python/10753:
-	* gdb.texinfo (objfile-gdb.py file): Fix location of auto-load
-	directory.
-
-2012-02-14  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Disabling Breakpoints): Document enable count.
-
-2012-02-13  Pedro Alves  <palves@redhat.com>
-
-	* gdb.texinfo (MIPS boards): Refer to mips-elf instead of
-	mips-idt-ecoff.
-
-2012-02-09  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Symbols In Python): Add missing `@end defvar'.
-
-2012-02-07  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Symbols In Python): Document Symbol.needs_frame and
-	Symbol.value.
-
-2012-02-07  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Symbols In Python): Document Symbol.line.
-
-2012-01-27  Thomas Schwinge  <thomas@codesourcery.com>
-
-	* gdb.textinfo (Packets): Move vCont paragraph to the correct place.
-
-2012-01-24  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Catchpoints): Document "catch load" and "catch
-	unload".
-	(Files): Mention new catch commands.
-	(GDB/MI Async Records): Likewise.
-
-2012-01-24  Gary Benson  <gbenson@redhat.com>
-
-	Delete #if 0'd out code.
-	* gdb.texinfo (Frame Info): Remove "info catch".
-
-2012-01-20  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* gdb.texinfo (Remote Configuration): Document
-	"set remote hostio-readlink-packet" command.
-	(General Query Packets): Document vFile:readlink packet.
-
-2012-01-16  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Specify Location): Document relative file name
-	handling.
-
-2012-01-16  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (gdb.printing): Document FlagEnumerationPrinter.
-
-2012-01-13  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo (Coding Standards): Require braces for two lines of
-	code.
-
-2012-01-11  Paul Hilfinger  <hilfingr@adacore.com>
-
-	* gdb.texinfo (Variables): Document use of :: for non-static
-	variables.
-
-2012-01-05  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Start of New Year Procedure): Update
-	to replace use of copyright.sh by use of copyright.py.
-
-2012-01-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Remove the gdbtui binary.
-	* all-cfg.texi (GDBTUI): Remove.
-	* gdb.texinfo (Mode Options): Remove the GDBTUI reference.
-	(TUI): Remove GDBTUI pindex.  Remove the GDBTUI reference.
-	* gdbint.texinfo (Testsuite): Replace `gdbtui' by `gdb -tui'.
-
-2011-12-23  Kevin Pouget  <kevin.pouget@st.com>
-
-	Introduce gdb.FinishBreakpoint in Python.
-	* gdb.texinfo (Finish Breakpoints in Python): New subsection.
-	(Python API): Add menu entry for Finish Breakpoints.
-
-2011-12-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdbint.texinfo (Testsuite): Describe KFAIL and XFAIL in Writing
-	tests.
-
-2011-12-16  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Server): Document -/stdio argument to gdbserver.
-
-2011-12-16  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Python Commands): Remove "maint set/show print
-	stack".  Add documentation for "set/show python print-stack".
-
-2011-12-14  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Implementing a Remote Stub): Explain that you
-	should transfer control to the stub in the startup code instead of
-	in main.  Mention the need to get past the initial breakpoint.
-
-2011-12-06  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Breaks): Update for new behavior.
-
-2011-12-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Requirements, Remote Protocol): Reference also `Library
-	List Format for SVR4 Targets'.
-	(General Query Packets): New item qXfer:libraries-svr4:read.
-	(Library List Format for SVR4 Targets): New node.
-
-2011-12-01  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Writing a Pretty-Printer): Use append method, not
-	add.
-
-2011-11-22  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Document new *stopped
-	reasons.
-
-2011-11-20  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Starting and Stopping Trace Experiments): Document
-	note-related options and variables.
-	(Tracepoint Packets): Document packet changes.
-
-2011-11-20  Sanjoy Das  <sdas@igalia.com>
-
-	* gdb.texinfo (JIT Interface): Add documentation on writing and
-	usind JIT debug info readers.
-	(Custom Debug Info, Using JIT Debug Info Readers, Writing JIT
-	Debug Info Readers): New nodes.
-
-2011-11-18  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Create and Delete Tracepoints): Mention pending
-	tracepoint.
-
-2011-11-15  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Files): Document basenames-may-differ.
-
-2011-11-14  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Shell Commands): Document "!".
-
-2011-11-14  Stan Shebs  <stan@codesourcery.com>
-	    Kwok Cheung Yeung  <kcy@codesourcery.com>
-
-	* gdb.texinfo (Create and Delete Tracepoints): Describe what is
-	needed to get shorter fast tracepoints.
-	(Tracepoint Packets): Document new qTMinFTPILen packet.
-
-2011-11-14  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Create and Delete Tracepoints): Describe changed
-	behavior of tracepoint.
-	(General Query Packets): New feature InstallInTrace.
-	(Remote Configuration): Document "set remote
-	install-in-trace-packet".
-
-2011-11-12  Matt Rice  <ratmice@gmail.com>
-
-	* gdb.texinfo (C Preprocessor Macros): Remove info definitions.
-	Add arguments to info macro.
-
-2011-11-10  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Compilation): Don't mention -gdwarf-2.  Link to GCC
-	manual.
-	(Variables): Don't mention -gdwarf-2.  Link to Compilation node.
-	(Macros): Add a footnote.
-	(C): Remove paragraph about compiler options.
-	(C Constants): Mention wide character and string constants.
-	(C Plus Plus Expressions): Update compiler option advice.  Mention
-	using declarations.  Mention ADL.  Remove old HP compiler
-	information.
-
-2011-11-10  Tom Tromey  <tromey@redhat.com>
-
-	PR c++/9257:
-	* gdb.texinfo (Print Settings): Add an extra note about the need
-	for a vtable.
-
-2011-11-08  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* gdb.texinfo (MIPS): Remove duplicate "auto" reference from
-	"set mips abi" documentation.
-
-2011-11-04  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Maintenance Commands): Update docs of "maint time".
-
-2011-11-03  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Stopping): Add menu entry.
-	(Continuing and Stepping): Restore @node.  Use @section, not
-	@subsection.
-
-2011-11-03  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* gdb.texinfo (Skipping Over Functions and Files): Remove node
-	designation.  Fix "Specify Location" cross-reference.
-
-2011-11-02  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Action Lists): Document collect/s.
-	(General Query Packets): Describe tracenz feature.
-	* agentexpr.texi (Bytecode Descriptions): Describe tracenz.
-
-2011-10-28  Paul Koning  <paul_koning@dell.com>
-
-	* gdb.texinfo (gdb.types): Rename deepitems to deep_items.
-
-2011-10-27  Kevin Pouget  <kevin.pouget@st.com>
-
-	* gdb.texinfo ((Frames In Python): Document
-	gdb.FRAME_UNWIND_FIRST_ERROR contant.
-
-2011-10-26  Paul Koning  <paul_koning@dell.com>
-
-	* gdb.texinfo (gdb.types): Document new deepitems function.
-
-2011-10-25  Paul Koning  <paul_koning@dell.com>
-
-	PR python/13327
-
-	* gdb.texinfo (Values From Inferior): Add is_lazy attribute,
-	fetch_lazy method.
-
-2011-10-20  Phil Muldoon  <pmuldoon@redhat.com>
-
-	PR python/12656
-
-	* gdb.texinfo (Blocks In Python): Document is_static, is_global,
-	global_block, static_block function.
-
-2011-10-19  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Commands In Python): Add missing "@"s.
-
-2011-10-13  Kevin Pouget  <kevin.pouget@st.com>
-
-	PR python/13285 Document named constants for frame unwind stop reasons
-	* gdb.texinfo (Frames In Python): Document gdb.FRAME_UNWIND_*
-	constants.
-
-2011-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Fix compatibility with texinfo versions older than 4.12.
-	* Makefile.in (MAKEINFO): Set to @MAKEINFO@.
-	(MAKEINFOFLAGS, MAKEINFO_EXTRA_FLAGS, MAKEINFO_CMD): New.
-	(MAKEHTMLFLAGS): Use MAKEINFO_CMD.
-	(gdb.info, gdbint.info, stabs.info, annotate.info): Use MAKEINFO_CMD.
-	* gdb.texinfo (Tail Call Frames): Convert @arrow{} to @click, when possible.
-	Make the conversion conditional on HAVE_MAKEINFO_CLICK, using variables
-	CALLSEQ1A, CALLSEQ1B, CALLSEQ2A and CALLSEQ2B.
-
-2011-10-09  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Extending GDB): Document alias command.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Support @entry in input expressions.
-	* gdb.texinfo (Variables): Describe @entry names suffix.
-	(Print Settings): Add anchor for `set print entry-values'.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	Display @entry parameter values (without references).
-	* gdb.texinfo (Tail Call Frames): Add anchor.  Add self tail call
-	example.
-	(Print Settings): New description of set print entry-values and show
-	print entry-values.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	Recognize virtual tail call frames.
-	* gdb.texinfo (Optimized Code): Add reference to Tail Call Frames.
-	(Tail Call Frames): New node.
-	(Frames In Python): Add gdb.TAILCALL_FRAME.
-
-2011-10-07  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (gdb.printing): Document new `replace' arg to
-	register_pretty_printer.
-
-2011-10-07  Phil Muldoon  <pmuldoon@redhat.com>
-
-	PR python/12930
-	PR python/12802
-
-	* gdb.texinfo (Breakpoints In Python): Clarify behavior in the
-	stop method.
-
-2011-10-07  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* gdb.texinfo (Starting your Program): "set disable-randomization"
-	is no longer Linux-specific.
-	(Remote Configuration): Document "set remote
-	disable-randomization-packet".
-	(General Query Packets): Document "QDisableRandomization" packet
-	and add it to "qSupported" list.
-
-2011-10-07  Kevin Pouget  <kevin.pouget@st.com>
-
-	Allow Python notification of new object-file loadings.
-	* gdb.texinfo (Events In Python): Document `gdb.NewObjFileEvent'
-	event type.
-
-2011-10-04  Kevin Pouget  <kevin.pouget@st.com>
-
-	PR python/12691: Add the inferior to Python exited event
-	* gdb.texinfo (Events In Python): Describe exited inferior attribute.
-
-2011-10-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Minor
-	rephasing.
-
-2011-10-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Ada Tasking Commands): New node.
-	(GDB/MI Miscellaneous Commands): Add `ada-task-info'
-	as possible feature returned by the `-list-features'
-	command.
-
-2011-09-28  Paul Koning  <paul_koning@dell.com>
-
-	* gdb.texinfo (gdb.Type): Document field access by dictionary
-	key syntax.
-
-2011-09-28  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Files): Update options for `add-symbol-file'.
-	Add one space after option `-s'.  Remove @r{} markup.
-
-2011-09-27  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Action Lists): Document $_ret.
-
-2011-09-16  Hui Zhu  <teawater@gmail.com>
-
-	* gdb.texinfo (Tracepoint Restrictions): Change *$esp@300
-	to *(unsigned char *)$esp@300.
-
-2011-09-15  Paul Koning  <paul_koning@dell.com>
-
-	* gdb.texinfo: Make style of Python functions and methods match
-	the syntax of Python.  Also put class and module names explicitly
-	on function, member, and variable names, matching Python
-	documentation conventions.
-
-2011-09-15  Kevin Pouget  <kevin.pouget@st.com>
-
-	PR Python/12692 Add gdb.selected_inferior() to Python interface.
-	* gdb.texinfo (Inferiors In Python): Describe new
-	gdb.selected_inferior() function.
-
-2011-09-15  Kevin Pouget  <kevin.pouget@st.com>
-
-	Handle multiple breakpoint hits in Python interface:
-	* gdb.texinfo (Events In Python): New function documentation:
-	gdb.BreakpointEvent.breakpoints. Indicate that
-	gdb.BreakpointEvent.breakpoint is now deprecated.
-
-2011-09-04  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo: Set EDITION to "Tenth" and change ISBN.
-
-2011-08-25  Andrew Oakley  <andrew@ado.is-a-geek.net>
-
-	* gdb.texinfo (Types In Python): Document 'bitpos' for enums.
-
-2011-08-17  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Prompt): Add set/show extended-prompt
-	documentation
-	(Basic Python): Add prompt_hook anchor.
-	(Python modules): Reword module text to reflect multiple modules.
-	(gdb.prompt): Document gdb.prompt module.
-
-2011-08-14  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (General Query Packets): Document qXfer:fdpic:read packet.
-
-2011-08-14  Yao Qi  <yao@codesourcery.com>
-
-	* gdb.texinfo (Standard Target Features): Document C6x features.
-	(TIC6x Features): New node.
-
-2011-08-12  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Symbols In Python): Document symbol.type.
-
-2011-08-09  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Python): Document command and function
-	auto-loading.
-
-2011-07-26  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (whatis, ptype): Highlight their differences.  Describe
-	typedefs unrolling.  Extend the sample code by an inner typedef and
-	outer typedefs unrolling.
-
-2011-07-26  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (Caching Remote Data): Document {set,show} dcache
-	size and line-size.
-
-2011-07-21  Matt Rice  <ratmice@gmail.com>
-
-	PR macros/12999
-	* gdb.texinfo (Macros): Add info definitions and info macros commands.
-	Update text and cindex entries for info macro command.
-
-2011-07-21  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* observer.texi (GDB Observers): Add before_prompt observer.
-	* gdb.texinfo (Basic Python): Add documentation for prompt
-	substitution.
-
-2011-07-11  Phil Muldoon  <pmuldoon@redhat.com>
-
-	PR python/12438
-	* gdb.texinfo (Python Commands): Add deprecate note to maint
-	  set/show python print-stack.  Document set/show python
-	  print-backtrace.
-
-2011-07-05  Thiago Jung Bauermann  <bauerman.ibm.com>
-
-	* gdb.texinfo: Fix typos.
-
-2011-07-01  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Debugging Output): Document set debug
-	check-physname.
-
-2011-06-29  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document
-	breakpoint-notifications feature.
-
-2011-06-29  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* gdb.texinfo (Target Description): Remove warning about
-	possibly unstable format.
-
-2011-06-03  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Document 'exit-code' field.
-	(Events In Python): Note that exit_code is optional.
-
-2011-05-17  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Remote Protocol) <Overview>: Mention vCont is
-	required for multi-threading support.
-	(Remote Protocol) <Packets>: Mention that 'c', 's', 'C', 'S' and
-	Hc are deprecated for multi-threading debugging.  Point readers at
-	the vCont packet.
-
-2011-05-15  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Auto-loading): Document printing of missing scripts.
-
-2011-05-13  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Threads): Document $sdir,$pdir.
-	(Server): Document $pdir exception.
-
-	* gdb.texinfo (Auto-loading): Document "info auto-load-scripts".
-
-	* gdb.texinfo (Threads): Clarify default value for
-	libthread-db-search-path.
-
-	* gdb.texinfo (Completion): Update example.
-	(Debugging Output): Delete `set/show debug lin-lwp-async'.
-
-2011-05-12  Kwok Cheung Yeung  <kcy@codesourcery.com>
-
-	* gdb.texinfo: Document change in the behaviour of the enable and
-	disable GDB commands when applied to tracepoints.
-	Document the EnableDisableTracepoints remote stub feature.
-	Document QTEnable and QTDisable in the list of tracepoint packets.
-
-2011-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* Makefile.in (GDB_DOC_SOURCE_INCLUDES): Rename inc-hist.texinfo to
-	hsuser.texi.
-	* gdb.texinfo <!SYSTEM_READLINE>: Rename inc-hist.texinfo inclusion and
-	comment to hsuser.texi.  Change rluser.texi name in the comment.
-
-2011-05-10  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Threads): If an empty path is provided for
-	libthread-db-search-path it is reset to its default value.
-	(Server): Ditto.
-
-2011-05-09  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Requirements): Fix typo.  Mention --with-iconv-bin.
-
-2011-05-06  Sergio Durigan Junior  <sergiodj@linux.vnet.ibm.com>
-	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	Implement support for PowerPC BookE masked watchpoints.
-	* gdb.texinfo (Set Watchpoints): Document mask parameter.
-	(PowerPC Embedded): Mention support of masked watchpoints.
-
-2011-05-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (In Memoriam): Replace litteral uses of `GDB' with
-	`@value{GDBN}'.
-
-2011-05-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (titlepage): Remove dedication.
-	(In Memoriam): New appendix.
-
-2011-04-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Index Section Format): Change the version to 5.
-	Describe the different formula.
-
-2011-04-24  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Starting and Stopping Trace Experiments): New anchor
-	for disconnected tracing.
-	(Multi-Process Mode for @code{gdbserver}): Mention --multi and
-	extended-remote relationship.  Mention --once.
-	(TCP port allocation lifecycle of @code{gdbserver}): New.
-
-2011-04-23  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Server): Improve indexing.  Index all optional
-	switches to gdbserver.
-
-2011-04-20  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Index Section Format): New node.
-	(Top): Add new node to menu.
-
-2011-04-20  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Maintenance Commands): Document `maint print
-	remote-registers'.
-
-2011-04-20  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Trace File Format): Move node later.
-
-2011-04-19  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (Register Information Functions): Remove
-	duplicate "the".
-	* gdb.texinfo (Emacs): Remove duplicate "to".
-	(GDB/MI Variable Objects): Remove duplicate "the".
-	(General Query Packets): Likewise.
-
-2011-04-02  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Output Records): Fix menu entry for
-	"GDB/MI Ada Exception Information" node.
-
-2011-04-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (GDB/MI Ada Exception Information): Document
-	the "exception-name" field in the *stopped async record.
-
-2011-03-31  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-	    Sergio Durigan Junior  <sergiodj@linux.vnet.ibm.com>
-
-	Implement support for PowerPC BookE ranged breakpoints.
-	* gdb.texinfo (PowerPC Embedded): Document ranged breakpoints.
-
-2011-03-28  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Tracepoints): Fix typo.
-
-2011-03-24  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Specify Location): Document `function:label'
-	linespec.
-
-2011-03-18  Phil Muldoon  <pmuldoon@redhat.com>
-
-	PR python/12149
-
-	* gdb.texinfo (Basic Python): Update gdb.write and flush text.
-
-2011-03-17  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Blocks In Python): Add is_valid method description.
-	(Inferiors In Python): Likewise.
-	(Threads In Python): Likewise.
-	(Symbols In Python): Likewise.
-	(Objfiles In Python): Likewise.
-	(Symbol Tables In Python): Likewise.
-
-2011-03-15  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Auto Display) <undisplay, enable display, disable
-	display>: Explain that the commands accept number ranges.
-
-2011-03-14  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Breakpoints In Python): Add description and example
-	of Python stop function operation.
-
-2011-03-10  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Parameters In Python): Document get_set_string and
-	get_show_string methods.
-
-2011-02-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Tracepoint Conditions): Fix missing parenthesis.
-
-	* gdb.texinfo (Starting and Stopping Trace Experiments): Fix
-	circular-trace-buffer name.
-
-2011-02-28  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Inferiors and Programs): Fix small error introduced
-	in the previous change.
-
-2011-02-27  Michael Snyder  <msnyder@vmware.com>
-
-	* gdb.texinfo (Inferiors and Programs): Update commands to show
-	that they can accept multiple arguments.
-
-2011-02-24  Joel Brobecker  <brobecker@adacore.com>
-
-	Revert the following patch (code patch was not approved):
-	2011-02-21  Hui Zhu  <teawater@gmail.com>
-	* agentexpr.texi (bytecode descriptions): add printf.
-	* gdb.texinfo (tracepoint action lists): add printf.
-
-2011-02-23  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Symbols In Python): Fix mention of C++, use C@t{++}.
-
-2011-02-23  Michael Snyder  <msnyder@vmware.com>
-
-	* gdb.texinfo (Set Breaks): Add @dots{} to arguments of info break.
-	(Set Watchpoints): Add @dots{} to argument of info watchpoints.
-	(Listing Tracepoints): Add @dots{} to argument of info tracepoints.
-
-2011-02-22  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Symbols In Python): Document lookup_global_symbol.
-	Clarify behaviour of lookup_symbol when `block' argument is omitted,
-	add description of result, fix @defun formatting.
-
-2011-02-21  Hui Zhu  <teawater@gmail.com>
-
-	* agentexpr.texi (Bytecode Descriptions): Add printf.
-	* gdb.texinfo (Tracepoint Action Lists): Add printf.
-
-2011-02-18  Tom Tromey  <tromey@redhat.com>
-
-	* agentexpr.texi (Bytecode Descriptions): Document pick and rot.
-
-2011-02-14  Michael Snyder  <msnyder@vmware.com>
-
-	* gdb.texinfo (threads): Document argument for "info threads" cmd.
-	Document new command "thread find".
-
-2011-02-14  Michael Snyder  <msnyder@vmware.com>
-
-	* gdb.texinfo (Threads): Update example of new thread message.
-
-2011-02-14  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Remote Configuration): Mention set/show remote
-	traceframe-info.
-	(Tools/Packages Optional for Building GDB): Mention that expat is
-	used for traceframe info.
-	(Remote Protocol) <Menu>: Add "Traceframe Info Format".
-	(General Query Packets) <qSupported>: Describe the
-	qXfer:traceframe-info:read feature.
-	(qXfer::read): Describe qXfer:traceframe-info:read.
-	(Traceframe Info Format): New section.
-
-2011-02-04  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdbint.texinfo (Formatting): Mention some formatting guidelines
-	for casts and unary operators.
-
-2011-02-04  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Document that symbols-loaded
-	is not useful.
-
-2011-01-25  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo: s/value optimized out/optimized out/g
-
-2011-01-21  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Other Misc Settings): Rework part of the
-	documentation of the "set interactive mode" command.
-
-2011-01-19  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Threads): Document thread name output and `thread
-	name' command.
-	(Threads In Python): Document Thread.name attribute.
-	(GDB/MI Thread Commands): Document thread attributes.
-
-2011-01-12  Andrew Burgess  <aburgess@broadcom.com>
-
-	* gdb.texinfo (GDB/MI Data Manipulation): Update to reflect
-	changes in mi/mi-cmd-disas.c
-
-2011-01-12  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Threads): Remove duplicate text.  Update examples.
-	Fix "thread apply" text.
-
-2011-01-11  Sergio Durigan Junior  <sergiodj@linux.vnet.ibm.com>
-	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	Implement support for PowerPC BookE ranged watchpoints.
-	* gdb.texinfo (PowerPC Embedded): Document ranged watchpoints and
-	the "set powerpc exact-watchpoints" flag.
-
-2011-01-07  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Python API): Add descriptions to @menu items.
-
-2011-01-06  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Frames In Python): Document gdb.newest_thread.
-
-2010-01-06  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (Debugging Output): Document "set debug jit".
-
-2011-01-06  Tom Tromey  <tromey@redhat.com>
-
-	PR python/12133:
-	* gdb.texinfo (Frames In Python): Document various frame
-	constants.
-
-2011-01-05  Joel Brobecker  <brobecker@adacore.com>
-
-	* doc/agentexpr.texi, doc/all-cfg.texi, doc/annotate.texinfo,
-	doc/gdb.texinfo, doc/gdbint.texinfo, doc/observer.texi,
-	doc/refcard.tex, doc/stabs.texinfo: Copyright year update.
-
-2011-01-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* Makefile.in (diststuff): Remove gdb-cfg.texi and GDBvn.texi.
-	(clean): Add GDBvn.texi.
-
-2010-12-29  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ada Glitches): Remove paragraph describing the
-	occasional case where the debugger prints an array address
-	instead of the array itself.
-
-2010-12-23  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Packets) <read registers packet>: Document support
-	for registers that were not collected.
-
-2010-12-15  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Startup): Document auto-loading of scripts during
-	startup.
-	(Auto-loading): Delete "maint set python auto-load on|off".
-	Add "set auto-load-scripts on|off".
-
-2010-12-07  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Mode Options): Document -data-directory.
-	(Data Files): Add reference to -data-directory.
-
-2010-11-29  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Pretty-Printer Introduction): Change
-	printer-name:subprinter-name to printer-name;subprinter-name.
-
-2010-11-29  Phil Muldoon  <pmuldoon@redhat.com>
-
-	PR python/12199
-
-	* gdb.texinfo (Breakpoints In Python): Document "delete" method.
-
-2010-11-23  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Top): Check SYSTEM_READLINE.
-	(Editing): Likewise.
-	(Command History): Likewise.
-	(TUI Keys): Likewise.
-	(Bug Reporting): Conditionally include rluser.texi and
-	inc-history.texinfo.
-	* Makefile.in (READLINE_TEXI_INCFLAG): New variable.
-	(GDB_DOC_SOURCE_INCLUDES): Add comment.
-	(GDBvn.texi): Set SYSTEM_READLINE when appropriate.
-	(gdb.dvi): Use READLINE_TEXI_INCFLAG.
-	(gdb.pdf): Likewise.
-	(gdb.info): Likewise.
-	(gdb/index.html): Likewise.
-
-2010-11-23  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (Makefile): Run ../config.status.
-	(distclean): Update.
-	* configure: Remove.
-	* configure.ac: Remove.
-
-2010-11-12  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Basic Python): Update.  Add xref.
-	(Exception Handling): Document new exception classes.
-	(Types In Python): Update.
-	(Frames In Python): Update.
-
-2010-11-11  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Breakpoints In Python): Document "internal"
-	parameter, and visible attribute.
-
-2010-11-05  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Source Path): Document "set directories".
-
-2010-11-05  Ken Werner  <ken.werner@de.ibm.com>
-
-	* gdb.texinfo: (Summary) Add mention about OpenCL C language support.
-	(OpenCL C): New node.
-
-2010-11-02  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Pretty Printing): Expand into three sections,
-	introduction, example, and commands.
-	(Python API): Delete section Disabling Pretty-Printers, merge into
-	Selecting Pretty-Printers.
-	(Writing a Pretty-Printer): New section.  Move the pretty-printer
-	example here, and reformat to match python coding style.  Add a second
-	example using the gdb.printing module.
-	(Python modules): Add gdb.printing.
-
-2010-10-29  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Python): Fix long line.
-
-2010-10-20  Doug Evans  <dje@google.com>
-
-	* gdbint.texinfo (Misc Guidelines): Renamed from Coding.
-	All references updated.  Correct sections marked as subsections.
-	(Coding Standards): New chapter.  Move the coding standard related
-	subsections here.  Add section on Python coding standards.
-
-2010-10-13  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Python): Add "Python modules".
-	(Types in Python): Add reference to gdb.types section.
-	(Python modules): New node.
-
-2010-10-11  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Values From Inferior): Add reference to "Types in
-	Python" from gdb.Value.type description.
-
-2010-09-28  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ravenscar Profile): New node.
-
-2010-09-22  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Values From Inferior): Mention Value.__init__.
-
-2010-09-22  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Values From Inferior): Clarify that
-	value.dynamic_type works only in C++ programs with RTTI.
-
-2010-09-15  Paul Bolle  <pebolle@tiscali.nl>
-
-	* gdb.texinfo (Character Sets): Correctly reference host-charset
-	in example.
-
-2010-09-13  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Stack Manipulation) <-stack-list-frames>:
-	Document "fullname" and "from".
-
-2010-09-01  Marc Khouzam  <marc.khouzam@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document new
-	feature `reverse' output by -list-target-features.
-
-2010-08-31  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* gdb.texinfo (i386 Features): Remove an extra "@item".
-
-2010-08-30  Tom Tromey  <tromey@redhat.com>
-
-	PR python/11792:
-	* gdb.texinfo (Values From Inferior): Document dynamic_type.
-
-2010-08-24  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (ARM Features): Document
-	org.gnu.gdb.arm.m-profile.
-
-2010-08-23  Tom Tromey  <tromey@redhat.com>
-
-	PR python/11145:
-	* gdb.texinfo (Values From Inferior): Document dynamic_cast and
-	reinterpret_cast methods.
-
-2010-08-23  Tom Tromey  <tromey@redhat.com>
-
-	PR python/11915:
-	* gdb.texinfo (Types In Python): Document array method.
-
-2010-08-18  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo (PowerPC Embedded): Mention support for the DVC register.
-
-2010-08-16   Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Set Watchpoints): Document -location option.
-
-2010-08-13  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (.debug_gdb_scripts section): Fix typo.
-
-2010-08-13  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Data Manipulation): Document
-	-data-read-memory-raw and -data-write-memory-raw.
-
-2010-08-11  Tom Tromey  <tromey@redhat.com>
-	    Phil Muldoon <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Basic Python): Describe post_event API.
-
-2010-08-11  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Basic Python): Describe solib_address and
-	decode_line Python APIs
-
-2010-08-10  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Pretty Printing API): Document
-	gdb.default_visualizer.
-
-2010-08-10  Tom Tromey  <tromey@redhat.com>
-
-	Revert gdb-add-index addition:
-	* gdb.texinfo (Index Files): Don't document gdb-add-index.
-
-2010-08-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii <eliz@gnu.org>
-
-	* gdb.texinfo (Mode Options) <-batch>
-	(Basic Python) <gdb.execute>: Describe setting width and height.
-
-2010-07-31  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (Threads): Document 'debug libthread-db'.
-
-2010-07-30  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Index Files): Mention gdb-add-index.
-
-2010-07-30  Hui Zhu  <teawater@gmail.com>
-
-	* gdb.texinfo (Inferiors and Programs): Update the introduce of
-	"detach inferior" and "kill inferior".
-
-2010-07-28  CHENG Renquan  <rqcheng@smu.edu.sg>
-
-	* gdb.texinfo (Machine Code): Update description of two forms of
-	arguments, and add new example to demonstrate the new form.
-
-2010-07-27  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Values From Inferior): Add value inferior function
-	call description.
-
-2010-07-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Active Targets): Fix wrong comma placement.
-
-2010-07-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	Make core files the process_stratum.
-	* gdb.texinfo (Active Targets): Remove core_stratum.  Include
-	record_stratum example.
-
-2010-07-13  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Index Files): New node.
-
-2010-07-13  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Remove extra 'for'.
-
-2010-07-13  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Specify Location): Document labels.
-
-2010-07-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Create and Delete Tracepoints): Add more index
-	entries for fast tracepoints and static tracepoints.
-
-2010-07-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (General Query Packets) <qfThreadInfo,
-	qsThreadInfo>: Spell out `l' as ell.
-
-2010-07-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Convenience Variables): Document $_sdata.
-	(Commands to Set Tracepoints): Describe static tracepoints.  Add
-	`Listing Static Tracepoint Markers' menu entry.  Document
-	"strace".
-	(Tracepoint Action Lists): Document collecting $_sdata.
-	(Listing Static Tracepoint Markers): New subsection.
-	(Tracepoints support in gdbserver): Mention static tracepoints.
-	(remote packets, enabling and disabling): Mention
-	read-sdata-object.
-	(General Query Packets) <qSupported>: Document qXfer:sdata:read
-	and StaticTracepoint.
-	Mention qTfSTM, qTsSTM and qTSTMat as tracepoint packets.
-	Document qXfer:sdata:read.
-	(Tracepoint packets): Document qTfSTM, qTsSTM and qTSTMat.
-
-2010-06-29  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Threads In Python): Fix unmatched @end table.
-
-2010-06-28  Phil Muldoon  <pmuldoon@redhat.com>
-	    Tom Tromey  <tromey@redhat.com>
-	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo (Inferiors In Python): New node.
-	* gdb.texinfo (Threads In Python): New node.
-
-2010-06-28  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Python): Document what the python directory is
-	and what its location is.
-	(Basic Python): Document the gdb.PYTHONDIR constant.
-
-2010-06-25  Tom Tromey  <tromey@redhat.com>
-
-	PR python/10808:
-	* gdb.texinfo (Basic Python): Document new gdb.execute argument.
-
-2010-06-24  Hui Zhu  <teawater@gmail.com>
-
-	* gdb.texinfo: (Commands for Controlled Output): Add
-	documentation for command "eval".
-
-2010-06-21  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo: Add explicit @node and @appendix for GFDL.
-	* annotate.texinfo: Ditto.
-	* gdbint.texinfo: Ditto.
-	* stabs.texinfo: Ditto.
-
-2010-06-22  Hui Zhu  <teawater@gmail.com>
-
-	* gdb.texinfo: (Process Record and Replay): Add documentation
-	for command "set record memory-query".
-
-2010-06-21  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo: Relicense under GFDL version 1.3.
-	* annotate.texinfo: Relicense under GFDL version 1.3.
-	* gdbint.texinfo: Relicense under GFDL version 1.3.
-	* stabs.texinfo: Relicense under GFDL version 1.3.
-	* fdl.texi: Update to version 1.3.
-
-2010-06-18  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Operating System Auxiliary Information): Describe
-	"info os" when no arguments given.
-
-	* gdb.texinfo (Debugging Programs with Multiple Threads): Describe
-	$_thread.
-
-2010-06-18  Hui Zhu  <teawater@gmail.com>
-
-	* gdb.texinfo: (Process Record and Replay): Add documentation
-	for commands "record save" and "record restore".
-
-2010-06-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo: Include information about the correct use
-	of addresses in the `watch' command.
-
-2010-06-11  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Observer Mode): New section.
-	(General Query Packets): Document QAllow.
-
-2010-06-04  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Python API): New node `Disabling Pretty-Printers'.
-
-2010-06-03  Doug Evans  <dje@google.com>
-
-	* gdbint.texinfo (Coding): Add subsection on command names.
-
-2010-06-02  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document maint set dwarf2
-	always-disassemble.
-
-2010-06-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Set Tracepoints): Mention tracepoints support in
-	gdbserver, and add cross reference.
-	(Tracepoints support in gdbserver): New subsection.
-
-2010-05-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (General Query Packets) <qSupported>: Describe the
-	`qRelocInsn' feature.
-	(Relocate instruction reply packet): New subsection
-	of `Tracepoint Packets'.
-	(Tracepoint Packets): Mention that packets QTDP and QTStart
-	support the qRelocInsn request, and add cross reference to new
-	subsection.
-
-2010-05-25  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Exception Handling): Document gdb.GdbError.
-	(Commands In Python): Document gdb.string_to_argv.
-
-2010-05-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdbint.texinfo (Host Definition): Remove items NORETURN and
-	ATTR_NORETURN.
-
-2010-04-29  Phil Muldoon  <pmuldoon@redhat.com>
-	    Tom Tromey  <tromey@redhat.com>
-	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo (Parameters In Python): New Node.
-
-2010-04-29  Mihail Zenkov  <mihail.zenkov@gmail.com>
-
-	* gdb.texinfo: (Summary) Add mention about D language support.
-	(Filenames): Add D suffixes.
-	(D): New node.
-
-2010-04-26  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* gdbint.texinfo (CANNOT_STEP_HW_WATCHPOINTS): Remove explanation
-	of macro deleted from GDB code.
-
-2010-04-24  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Commands to specify files): Describe what how GDB
-	looks up DOS-based filesystem paths on the system root.  Document
-	the new `set/show target-file-system-kind' commands.
-
-2010-04-23  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Python): Move Auto-loading section here ...
-	(Python API): from here.
-	(Auto-loading): Add docs for .debug_gdb_scripts auto-loaded scripts.
-	(Maintenance Commands): Add docs for "maint print section-scripts".
-
-2010-04-20  Chris Moller  <cmoller@redhat.com>
-
-	* gdb.texinfo (Setting Breakpoints): Added description of
-	filename-qualified rbreak.
-	* refcard.tex (Breakpoints and Watchpoints): Added brief
-	description of filename-qualified rbreak.
-
-2010-04-22  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Data): New @menu reference to Pretty Printing.
-	(Python API): Change the reference to Pretty Printing API.
-	(Pretty Printing): Move the user part under the Data node.  Reformat
-	the sample output to 72 columns.  Create a new reference to Pretty
-	Printing API.  Rename the API part ...
-	(Pretty Printing API): To a new node name.
-	(Selecting Pretty-Printers, Progspaces In Python, Objfiles In Python)
-	(GDB/MI Variable Objects): Change references to Pretty Printing API.
-
-2010-04-21  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Actions): Mention synonymy of actions
-	and commands.
-	(Listing Tracepoints): Update to reflect current behavior.
-
-2010-04-22  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* gdb.texinfo (Examining memory): Update for change in string
-	display with explicit size.
-
-2010-04-19  Pedro Alves  <pedro@codesourcery.com>
-
-	PR breakpoints/8554.
-
-	* gdb.texinfo (Save Breakpoints): New node.
-	(save-tracepoints): Rename to ...
-	(save tracepoints): ... this.  Mention that `save-tracepoints' is
-	a deprecated alias to `save tracepoints'.
-
-2010-04-16  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* gdb.texinfo ($_tlb): Document new automatic convinience variable.
-	(info w32 thread-information-block): Document new command.
-	(qGetTIBAddress): Document new gdbserver query.
-	(maint set/show show-all-tib): Document new command.
-
-2010-04-15  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Python API): Add progspaces section.
-	(Selecting Pretty-Printers): Progspace pretty-printers are
-	searched too.
-	(Progspaces In Python): New section.
-
-	* gdb.texinfo (Command Files): Add docs for new "source -s" option.
-
-2010-04-14  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Pretty Printing): Document behaviour when to_string
-	returns None.
-
-2010-04-09  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (gdb/mi Tracepoint Commands) <-trace-status>:
-	Describe the `frames-created' field, tweak grammar.
-
-2010-04-09  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (gdb/mi Tracepoint Commands) <-trace-status>:
-	Describe the `circular' and `disconnected' fields.
-
-2010-04-09  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* gdb.texinfo (maint print registers): Mention unavailable and
-	invisible registers.
-
-2010-04-09  Phil Muldoon  <pmuldoon@redhat.com>
-	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
-	    Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Breakpoints In Python): New Node.
-
-2010-04-08  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Packets): Describe disconn and circular
-	trace status fields.
-
-2010-04-08  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* gdb.texinfo (i386 Features): Make org.gnu.gdb.i386.avx
-	optional.  Make org.gnu.gdb.i386.avx requires
-	org.gnu.gdb.i386.avx.
-
-2010-04-08  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Command Files): Document that gdb skips $cdir in
-	search path, and document that gdb only scans the search path if
-	the script's path doesn't specify a directory.
-
-2010-04-05  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (maint show python auto-load): Fix typo.
-
-2010-04-04  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Setting Breakpoints): "info watch" no longer a synonym.
-	(Setting Watchpoints): Update description of "info watch".
-	(Disabling Breakpoints): Only "info break" lists all.
-
-	* gdb.texinfo (Tracepoint Restrictions): Document PC inference.
-	(tdump): Explain how tdump works.
-
-2010-04-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Break Commands): Clarify `commands' changes, and
-	add cross reference.
-
-2010-03-31  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (TUI Commands): Mention that in some cases, these
-	commands error out.
-
-2010-03-30  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* gdb.texinfo (i386 Features): Add org.gnu.gdb.i386.avx.
-
-2010-03-30  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* gdb.texinfo (General Query Packets): Add xmlRegisters.
-
-2010-03-29  Stan Shebs  <stan@codesourcery.com>
-	    Nathan Sidwell  <nathan@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Tracepoint Commands): Add notes about the
-	GDBN equivalent.
-	(Set Tracepoints): Remove mention that conditional tracepoints
-	don't exist.
-	(Tracepoint Actions): Clarify when while-stepping collection
-	happens, note that while-stepping does not automatically collect
-	$pc.
-
-2010-03-29  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Packets): Describe QTDPsrc.
-	(General Query Packets): Describe TracepointSource.
-
-2010-03-27  Matt Rice  <ratmice@gmail.com>
-
-	* gdb.texinfo (ARM): Document arguments to "target sim".
-	(Set Catchpoints): Use @dots{} instead of @r{...}.
-
-2010-03-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Packets): Remove mention that
-	terror:string may be plain text, and drop mention of X prefix.
-
-2010-03-26  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Tracepoint Commands): Add comma after @xref.
-
-2010-03-24  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Packets): Document trace error status.
-
-2010-03-24  Tom Tromey  <tromey@redhat.com>
-
-	PR breakpoints/9352:
-	* gdb.texinfo (Break Commands): Update.
-
-2010-03-24  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Tracepoint Commands): Document MI tracepoint
-	commands.
-
-2010-03-16  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Starting and Stopping Trace Experiments): Describe
-	circular-trace-buffer.
-	(Tracepoint Packets): Describe QTBuffer, and details of the
-	qTStatus reply.
-
-2010-03-12  Stan Shebs  <stan@codesourcery.com>
-	    Nathan Sidwell  <nathan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Actions): Clarify that while-stepping is
-	doing instruction stepping.
-	(Tracepoint Restrictions): New node.
-
-2010-03-10  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (Symbol Handling): Update.
-
-2010-03-08  Tom Tromey  <tromey@redhat.com>
-
-	PR cli/9591:
-	* gdb.texinfo (Mode Options): Mention lack of pagination and
-	confirmation with --batch.
-	(Screen Size): Mention --batch.
-	(Messages/Warnings): Likewise.
-
-2010-03-05  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Basic Python): Document target_charset and
-	target_wide_charset.
-
-2010-03-05  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Data): Link to pretty-printing.
-	(Output Formats): Likewise.  Correct text.
-
-2010-03-01  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Types): Describe <struct> and <flags>.
-
-2010-02-28  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Frames In Python): Add block parameter and
-	description to read_var text.
-
-2010-02-26  Phil Muldoon  <pmuldoon@redhat.com>
-	    Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Types In Python): Describe block argument in
-	template_argument and gdb.lookup_type.
-
-2010-02-24  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Cygwin Native): Fix typo.
-
-2010-02-24  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Frames In Python): Add block, find_sal, function
-	and select method descriptions.
-	(Python API): Add Blocks In Python, Symbols in Python and Symbol
-	Tables in Python to menu.
-	(Blocks In Python): New node.
-	(Symbols In Python): New node.
-	(Symbol Tables in Python): New node.
-
-2010-02-24  Vladimir Prus  <vladimir@codesourcery.com>
-
-	Multiexec MI
-
-	gdb/
-	* breakpoint.c (clear_syscall_counts): Take struct inferior*.
-
-	gdb/doc/
-	* gdb.texinfo (GDB/MI Command Syntax): Document notification
-	changes.
-	(GDB/MI Program Execution): Document current behaviour of
-	--all and --thread-group.
-	(GDB/MI Miscellaneous Commands): Document -add-inferior and
-	-remove-inferior.
-	* observer.texi (inferior_added, inferior_removed): New
-	observers.
-
-2010-02-19  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (Getting Started): Fix @node.
-	(Debugging GDB): Likewise.
-
-2010-02-13  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Testsuite): New section "Testsuite Configuration",
-	documenting the gdb_test_timeout variable.
-
-2010-02-12  Jakob Engblom  <jakob@virtutech.com>
-
-	* gdb.texinfo (MI commands): Added documentation of --reverse
-	option to a set of MI commands. Restructured documentation of MI
-	commands --exec-continue to reflect the complexity of reverse
-	execution.
-
-2010-02-12  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Using the Collected Data): Specify that the address
-	range of `tfind outsize' is exclusive, and that the address range
-	of `tfind range' is inclusive.
-	(Tracepoint Packets): Specify that the address range of
-	`QTFrame:range' is inclusive, and that the address range of
-	`QTFrame:outside' is exclusive
-
-2010-02-12  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Result Records): Clarify ^running.
-
-2010-02-10  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Debugging Output): Document set debug parser and
-	show debug parser.
-
-2010-02-09  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* gdb.texinfo (Predefined Target Types): Add i387_ext,
-	i386_eflags and i386_mxcsr.
-
-2010-02-08  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* gdb.texinfo: Document i386 target features.
-
-2010-02-05  Doug Evans  <dje@google.com>
-
-	* gdbint.texinfo (Testsuite): Add a new section to document the
-	various DejaGnu variables that may be overridden.
-	Document INTERNAL_GDBFLAGS.
-
-2010-02-04  Tom Tromey  <tromey@redhat.com>
-
-	PR cli/8830:
-	* gdb.texinfo (Files): -readnow comes before the filename for file
-	and symbol-file.
-
-2010-02-01  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Architecture-Specific Protocol Details): New section.
-	Document ARM breakpoint types.
-	(Register Packet Format): Move into the new section.
-	(Packets): Describe the KIND argument for Z0, z0, Z1, and z1 packets.
-
-2010-01-21  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (File Options): Adjust the documentation of this
-	switch to refer to the "source" command rather than partially
-	duplicating some of the relevant information.
-	(Extending GDB): Introduce and document the set/show script-extension
-	setting.
-	(Command Files): Add note explaining that the "source" command
-	is also used to evalute scripts written in other languages.
-	Remove the short slightly incorrect reference to sourcing Python
-	scripts.
-	(Python Commands): Document how to execute a Python script from GDB.
-
-2010-01-19  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Command Files): Fix typo.
-
-2010-01-18  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (File Options): Document -x on .py files.
-	(Command Files): Document handling of Python scripts.
-
-2010-01-18  Jie Zhang  <jie.zhang@analog.com>
-
-	* Makefile.in (ANNOTATE_DOC_BUILD_INCLUDES): Add GDBvn.texi.
-
-2010-01-15  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Trace Files): New section.
-	(Tracepoint Packets): Document QTSave and qTBuffer.
-	(Trace File Format): New appendix.
-
-2010-01-13  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Values From Inferior): Document lazy_string value
-	method.
-	(Python API): Add Lazy strings menu item.
-	(Lazy Strings In Python): New node.
-
-2010-01-13  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Thread Information): New.
-	(GDB/MI Async Records): Document the core field in *stopped.
-	(GDB/MI Miscellaneous Commands): Expand -list-thread-groups
-	documentation
-	(Process list): Document that osdata document may contain
-	threads.
-	(Remote Serial Protocol): Document qXfer:threads.
-
-2010-01-06  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Starting and Stopping Trace Experiments): Document
-	disconnected tracing.
-	(Tracepoint Packets): Document new protocol.
-
-2010-01-05  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Create and Delete Tracepoints): Describe fast
-	tracepoints.
-	(Tracepoint Packets): Describe remote protocol for fast
-	tracepoints.
-
-2010-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	Update the "Start of New Year Procedure".
-	* gdbint.texinfo: Add the list of files that need to be updated
-	manually.  Minor reformatting.
-
-2010-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* refcard.tex: Update copyright year in header and text.
-
-2010-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* agentexpr.texi: Add 2010 to the list of copyright years.
-	* annotate.texinfo: Likewise.
-	* gdb.texinfo: Likewise.
-	* gdbint.texinfo: Likewise.
-	* observer.texi: Likewise.
-	* stabs.texinfo: Likewise.
-
-2009-12-31  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Actions): Describe teval.
-
-2009-12-29  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Actions): Describe default-collect.
-
-2009-12-28  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Trace State Variables): New section.
-	(Tracepoint Packets): Describe trace state variable packets.
-	* agentexpr.texi (Bytecode Descriptions): Describe trace state
-	variable bytecodes.
-
-2009-12-28  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Symbols): "info variables" prints definitions, not
-	declarations.
-
-2009-12-21  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Clarify that
-	-gdb-exit behaviour.
-
-2009-12-20  Joel Brobecker  <brobecker@adacore.com>
-
-	* gpl.texi: Update to version 3 of the GPL.
-
-2009-12-20  Joel Brobecker  <brobecker@adacore.com>
-
-	* Makefile.in: Update copyright header.
-	* observer.texi: Fix the copyright header of the generated files.
-
-2009-12-08  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Types In Python): Describe range function.
-
-2009-12-03  Richard Ward  <richard.j.ward1@googlemail.com>
-
-	* gdb.texinfo (Types In Python): Describe "is_base_class".
-
-2009-12-03  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Basic Python): Document gdb.parse_and_eval.
-
-2009-12-02  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* observer.texi: New memory_changed observer.
-
-2009-12-01  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Reverse Execution): Fix typo.
-
-2009-11-24  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	PR gdb/8704
-
-	* gdb.texinfo (Thread-Specific Breakpoints): Thread specifiers
-	are allowed after the breakpoint condition.
-
-2009-11-23  Tom Tromey  <tromey@redhat.com>
-
-	PR python/10782:
-	* gdb.texinfo (Types In Python): Document Type.pointer.
-
-2009-11-23  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (Machine Code): Adjust.
-
-2009-11-11  Pedro Alves  <pedro@codesourcery.com>
-
-	* agentexpr.texi (Tracing On Symmetrix): Delete section.
-	(Using Agent Expressions): Delete cross reference.
-
-2009-11-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo, stabs.texinfo: Move the @setchapternewpage
-	and @settitle directives up to help makeinfo find them.
-
-2009-11-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (set debug-file-directory, show debug-file-directory)
-	(Auto-loading): Use plural and note one can use multiple components now.
-
-2009-11-01  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Stack Manipulation): Make
-	-stack-list-arguments have the same documentation for parameter
-	as -stack-list-locals. Add comas.
-
-2009-10-27  Tom Tromey <tromey@redhat.com>
-	    Eli Zaretskii <eliz@gnu.org>
-
-	PR python/10781
-
-	* gdb.texinfo (Values From Inferior): Document cast method.
-
-2009-10-22  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (Machine Code): Mention function name in disasssembly
-	and adjust example.
-
-2009-10-22  Michael Snyder  <msnyder@vmware.com>
-
-	* gdb.texinfo (Process Record and Replay): Document new form of
-	info record command.  Also document the new save and restore
-	commands.
-
-2009-10-21  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (Machine Code): Mention current pc marker.
-	(Memory): Likewise.
-
-2009-10-19  Pedro Alves  <pedro@codesourcery.com>
-	    Stan Shebs  <stan@codesourcery.com>
-
-	* observer.texi (new_inferior): Rename to...
-	(inferior_appeared): ... this.
-
-	* gdb.texinfo (Inferiors): Rename node to ...
-	(Inferiors and Programs): ... this.  Mention running multiple
-	programs in the same debug session.
-	<info inferiors>: Mention the new 'Executable' column if "info
-	inferiors".  Update examples.  Document the "add-inferior",
-	"clone-inferior", "remove-inferior" and "maint info
-	program-spaces" commands.
-	(Process): Rename node to...
-	(Forks): ... this.  Document "set|show follow-exec-mode".
-
-2009-10-11  Michael Snyder  <msnyder@vmware.com>
-
-	* gdb.texinfo (ReverseStep): Show default as "unsupported".
-	(ReverseContinue): Ditto.
-
-2009-10-08  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (Server): Document libthread-db-search-path.
-
-2009-10-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdbint.texinfo (i386_stopped_by_hwbp): Remove.
-
-2009-10-06  Michael Eager  <eager@eagercon.com>
-
-	* gdb.texinfo (Contributors): Add self for Xilinx MicroBlaze.
-	(Embedded Processors): Add MicroBlaze.
-	(MicroBlaze): New.  Describe Xilinx MicroBlaze
-
-2009-10-04  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Remote Protocol): Don't mention vCont;T.
-
-2009-09-26  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* gdb.texinfo (Cygwin Native): Mention support for Ctrl-BREAK.
-
-2009-09-23  Joel Brobecker  <brobecker@adacore.com>
-
-	* observer.texi (solib_unloaded): Document explicitly the fact that
-	this observer is called before the associated symbols are unloaded.
-
-2009-09-19  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Stack Manipulation): Document
-	-stack-list-variables.
-
-2009-09-18  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): -enable-pretty-printing
-	is experimental.
-
-2009-09-17  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (convenince variables): Mention
-	$_siginfo could be empty.
-
-2009-09-15  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Document
-	-enable-pretty-printing, -var-set-update-range, dynamic varobjs.
-	Expand -var-update documentation.
-
-2009-09-14  Sergio Durigan Junior <sergiodj@linux.vnet.ibm.com>
-
-	* gdb.texinfo (Set Catchpoints): Documentation about the catch syscall
-	feature.
-
-2009-09-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Unwinding the Frame ID): Reference outer_frame_id.
-
-2009-09-10  Michael Snyder  <msnyder@vmware.com>
-
-	* gdb.texinfo (qSupported): Mention new ReverseContinue and
-	ReverseStep replies to the qSupported query.
-
-2009-09-10  Joel Brobecker  <brobecker@adacore.com>
-
-	Add documentation for set/show interactive-mode.
-	* gdb.texinfo (Other Misc Settings): New node.
-
-2009-09-01  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Caching Data of Remote Targets): Add note on
-	non-stop mode's affect on remote caching.
-
-2009-08-31  Jacob Potter  <jdpotter@google.com>
-	    Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Caching Data of Remote Targets): Update text.
-	Mark `set/show remotecache' options as obsolete.
-	Document new `set/show stack-cache' option.
-	Update text for `info dcache'.
-
-2009-08-27  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Symbols): Delete `set print symbol-loading'.
-	(Files): Add note on new optional regex arg to `info sharedlibrary'.
-
-2009-08-26  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
-
-	* gdbint.texinfo (Releasing GDB): Fix confusing sentence
-	about autoconf.
-
-2009-08-25  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Debugging Multiple Inferiors): Add "info inferiors"
-	small example, and describe its columns.  Replace "inferior-id" by
-	"infno" throughout.
-
-2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
-
-	* gdbint.texinfo (Releasing GDB): Point to
-	README-maintainer-mode file for required autoconf version.
-	* configure.ac: Do not substitute datarootdir, htmldir,
-	pdfdir, docdir.  Do not process --with-datarootdir,
-	--with-htmldir, --with-pdfdir, --with-docdir.
-	* configure: Regenerate.
-
-	* configure: Regenerate.
-
-2009-08-20  Reid Kleckner  <reid@kleckner.net>
-
-	* gdb.texinfo: Add chapter on JIT interface.
-
-2009-08-07  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (Server Prefix): Explain that server prefix suppresses
-	confirmation request.
-
-2009-08-05  Jeremy Bennett  <jeremy.bennett@embecosm.com>
-
-	* gdb.texinfo (Separate Debug Files, Remote Protocol): Clarified
-	CRC definitions.
-
-2009-08-03  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Breakpoint Commands): Document
-	-break-commands.
-
-2009-07-31  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdb.texinfo (Cell Broadband Engine SPU architecture): Document the
-	"set spu auto-flush-cache" and "show spu auto-flush-cache" commands.
-
-2009-07-31  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdb.texinfo (Cell Broadband Engine SPU architecture): Document the
-	"set spu stop-on-load" and "show spu stop-on-load" commands.
-
-2009-07-31  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdb.texinfo (Target Descriptions): Document <compatible> element.
-
-2009-07-28  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (ARM Features): Document org.gnu.gdb.arm.vfp and
-	org.gnu.gdb.arm.neon.
-
-2009-07-20  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Target Description Format): Mention the new <osabi>
-	optional element.
-	(subsection OS ABI): New subsection.
-
-2009-07-14  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoint Conditions): New section.
-	(General Query Packets): Describe ConditionalTracepoints.
-	(Tracepoint Packets): Describe condition field.
-	(Maintenance Commands): Describe maint agent-eval.
-	* agentexpr.texi (Using Agent Expressions): Mention eval usage.
-
-2009-07-11  Hui Zhu  <teawater@gmail.com>
-
-	* gdb.texinfo (disassemble): Add a new modifier /r
-	to "disassemble" command to make it print the raw instructions
-	in hex as well as in symbolic form.
-
-2009-07-09  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (Testsuite): Document parallel make check.
-
-2009-07-09  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (Testsuite): Document test transcripts.
-
-2009-07-10  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Values From Inferior): Add length parameter
-	description.
-
-2009-07-04  Chris Genly  <chris@genly.us>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Document child definition
-	in -var-list-children.  Fix example according to what the code
-	does.
-
-2009-07-02  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Debugging multiple inferiors): Document the
-	"inferior", "detach inferior" and "kill inferior" commands.
-	(Debugging Programs with Multiple Processes): Adjust to mention
-	generic "inferior" commands.  Delete mention of "detach fork" and
-	"delete fork".  Cross reference to "Debugging multiple inferiors"
-	section.
-
-2009-07-02  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texinfo (Item Output Functions): Update signature
-	for ui_out_field_core_addr.
-
-2009-07-02  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texinfo (Examples of Use of @code{ui_out} functions):
-	Update example code extrated from breakpoint.c.
-
-2009-06-28  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (GDB/MI Program Context): @ignore unimplemented
-	MI commands.
-	(GDB/MI Symbol Query): Likewise.
-	(GDB/MI File Commands): Likewise.
-	(GDB/MI File Transfer Commands): Likewise.
-	(GDB/MI Target Manipulation): Likewise.
-	(GDB/MI Miscellaneous Commands): Likewise.
-
-2009-06-27  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Debugging Optimized Code): New chapter.
-	(Compiling for Debugging): Reference it.  Move some
-	text to the new section.
-
-2009-06-15  Phil Muldoon  <pmuldoon@redhat.com>
-
-	* doc/gdb.texinfo (Calling): Document
-	set-unwind-on-terminating-exception usage.
-
-2009-06-11  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (All-Stop): Document new 'set schedule-multiple'
-	command.
-
-2009-06-07  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdbint.texinfo (TARGET_HAS_HARDWARE_WATCHPOINTS): Delete all
-	references.
-
-2009-06-04  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texinfo: Rename formal parameters to gdbarch function
-	protoypes from "current_gdbarch" to "gdbarch".
-
-2009-05-28  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Basic Python): Change get_parameter to parameter.
-
-2009-05-27  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document "python"
-	feature.
-	(GDB/MI Variable Objects): Document -var-set-visualizer.
-
-2009-04-02  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document "python"
-	feature.
-	(GDB/MI Variable Objects): Document -var-set-visualizer.
-
-2009-05-27  Tom Tromey  <tromey@redhat.com>
-	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
-	    Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo (Objfiles In Python): Reference pretty printing.
-	(Pretty Printing): New node.
-	(Selecting Pretty-Printers): Likewise.
-	(Python API): Update.
-	(Output Formats): Document /r format.
-
-2009-05-27  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-	    Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Types In Python): New node.
-	(Values From Inferior): "type" is now an attribute.
-	(Python API): Update.
-
-2009-05-27  Tom Tromey  <tromey@redhat.com>
-	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
-	    Phil Muldoon  <pmuldoon@redhat.com>
-
-	* gdb.texinfo: Add @syncodeindex for `tp'.
-	(Python API): Update.
-	(Auto-loading): New node.
-	(Objfiles In Python): New node.
-
-2009-05-15  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (Threads): Document libthread-db-search-path.
-
-2009-05-15  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI General Design): Break up into four nodes.
-
-2009-05-12  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo: Document 'set/show debug gnu-nat'.  Replace 'maint
-	show-debug-regs' docs by 'maint set show-debug-regs' and 'maint
-	show show-debug-regs' docs.
-
-2009-05-08  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Process Record and Replay): Add description of
-	reverse execution.
-
-2009-05-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Adding support for debugging core files): New node.
-	(Native Debugging): Remove the ``Native core file Support'' section.
-
-2009-05-01  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Process Record and Replay): Improve and clarify.
-	Add index entries.
-
-2009-04-30  Hui Zhu  <teawater@gmail.com>
-	    Michael Snyder  <msnyder@vmware.com>
-
-	* gdb.texinfo: (Process Record and Replay): Add documentation for
-	process record and replay.
-
-2009-04-29  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Macros): Note command-line for `info macro'.  Append
-	a new part on command-line defined macros.
-
-2009-04-25  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Machine Code) <disassemble-next-line>: Improve and
-	clarify the wording.
-
-2009-04-23  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Data Files): New node.
-	(GDB Files): Update menu.
-
-2009-04-23  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Defining Other Architecture Features): Remove
-	entry for PROCESS_LINENUMBER_HOOK.
-
-2009-04-22  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Program Execution): Document -exec-jump.
-
-2009-04-22  Hui Zhu  <teawater@gmail.com>
-
-	* gdb.texinfo (disassemble-next-line): Set the default of
-	disassemble-next-line to off.
-
-2009-04-21  Joseph Myers  <joseph@codesourcery.com>
-
-	* configure.ac (--with-datarootdir, --with-docdir, --with-pdfdir,
-	--with-htmldir): New.
-	* configure: Regenerate.
-	* Makefile.in (datarootdir, docdir): Define.
-	(gdb.dvi, gdb.pdf): Use same -I options as for building gdb.info
-	instead of $(SET_TEXINPUTS).
-	(gdbint.dvi, gdbint.pdf): Use same -I options as for building
-	gdbint.info instead of $(SET_TEXINPUTS).
-	(gdbint/index.html): Use same -I options as for building
-	gdbint.info.
-	(stabs.dvi, stabs.pdf): Use same -I options as for building
-	stabs.info instead of $(SET_TEXINPUTS).
-	(stabs/index.html): Use same -I options as for building
-	stabs.info.
-	(annotate.dvi, annotate.pdf): Use same -I options as for building
-	annotate.info instead of $(SET_TEXINPUTS).
-	(annotate/index.html): Use same -I options as for building
-	annotate.info.
-
-2009-04-21  David Daney  <ddaney@caviumnetworks.com>
-
-	* gdb.texinfo (maint show-debug-regs): Remove mention of x86.
-
-2009-04-21  Joseph Myers  <joseph@codesourcery.com>
-
-	* gdb.texinfo (Source Path): Document --with-relocated-sources.
-
-2009-04-18  Carlos O'Donell  <carlos@codesourcery.com>
-	    Joseph Myers  <joseph@codesourcery.com>
-
-	* Makefile.in (MAKEHTML): Set to makeinfo --html.
-	(MAKEHTMLFLAGS): Set to empty.
-	(html__strip_dir): Define.
-	(HTMLFILES): Define.
-	(HTMLFILES_INSTALL): Define.
-	(install-html): Copy new automake rule.
-	(html): Depend on $(HTMLFILES).
-	(gdb_toc.html): Rename to gdb/index.html.
-	(gdbint_toc.html): Rename to gdbint/index.html.
-	(stabs_toc.html): Rename to stabs/index.html.
-	(annotate_toc.html): Rename to annotate/index.html.
-
-2009-04-17  Carlos O'Donell  <carlos@codesourcery.com>
-
-	* Makefile.in: Set pdfdir and htmldir from configure
-	substitutions.
-	* configure.ac: AC_SUBST datarootdir, docdir, htmldir, pdfdir.
-	* configure: Regenerate.
-
-2009-04-16  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Native Debugging): Remove entry for PROC_NAME_FMT.
-	This macro is no longer used.
-
-2009-04-15  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Character Sets): Document default character set.
-
-2009-04-14  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* gdbint.texinfo: Change server name from sources.redhat.com to
-	sourceware.org throughout.
-
-2009-04-09  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Set Breaks): Rewrite a paragraph to avoid a warning
-	about a missing dot or coma after @xref.
-
-2009-04-02  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Backtrace): Add a parameter in frame 1 of the first
-	example, and add a small explanation about it.
-	(Print Settings): Change the documentation of the "set print
-	frame-arguments" to reflect the fact that the default is now "scalars".
-
-2009-04-02  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Print Settings): Add kindex for command "set
-	print frame-arguments".
-
-2009-03-31  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ada Tasks): Add documentation about task-specific
-	breakpoints.
-	(Set Breaks): Add reference to thread-specific and task-specific
-	breakpoints.
-
-2009-03-31  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ada Tasks): Remove the documentation about
-	the "Running" state, as this state has been eliminated.
-	Now all runnable tasks are shown as "Runnable".
-
-2009-03-30  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Tracepoints): Describe tracepoints as a
-	special case of breakpoints.
-	(Enable and Disable Tracepoints): Mention deprecation.
-	(Listing Tracepoints): Update description and example.
-
-2009-03-30  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo (Frames in Python): New node.
-	(Python API): Update.
-
-2009-03-29  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo (Values From Inferior): Change gdb.Value.address
-	from a method to an attribute.
-
-2009-03-26  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo (Values From Inferior): Document is_optimized_out
-	attribute.
-
-2009-03-25  Pedro Alves  <pedro@codesourcery.com>
-
-	* observer.texi (thread_exit): Add "silent" parameter.
-
-2009-03-22  Pedro Alves  <pedro@codesourcery.com>
-
-	* observer.texi (about_to_proceed): New.
-
-2009-03-21  Jeremy Bennett  <jeremy.bennett@embecosm.com>
-
-	* gdbint.texinfo (everywhere): Use braces {} in @deftypeXX type
-	field throughout to handle types with spaces in them.  Fix typos
-	found by aspell.
-	(Summary, Requirements, Contributors): New first chapter,
-	"Summary" added, old Requirements section moved there, and new
-	section, "Contributors" added.
-	(Initializing a New Architecture, Register Representation)
-	(Frame Interpretation, Inferior Call Setup, Adding a New Target)
-	(Porting gdb): These sections extended and updated.
-	(Compiler Characteristics): This section (empty) deleted.
-	(Defining Other Architecture Features): This section renamed and
-	duplicate material removed from (formerly "Target Conditionals").
-	Use braces {} in @deftypeXX type field throughout to handle types
-	with spaces in them. Typos found by aspell fixed.
-
-	* stack_frame.svg: New file, source of image for gdbint.texinfo.
-	* stack_frame.pdf: Version of image for PDF output.
-	* stack_frame.png: Version of image for HTML output and for Emacs.
-	* stack_frame.txt: Version of image for Info output.
-	* stack_frame.eps: Version of image for TeX DVI output.
-
-2009-03-21  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Character Sets): Fix last change.
-
-2009-03-21  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo (Values From Inferior): Fix optional arguments
-	markup.
-	(Commands In Python): Adjust argument names of gdb.Command.__init__
-	to what the function accepts as keywords.
-
-2008-03-20  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Convenience Vars): Document convenience functions.
-	(Functions In Python): New node.
-	(Python API): Update.
-
-2009-03-20  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Character Sets): Remove obsolete text.  Document
-	set target-wide-charset.
-	(Requirements): Mention iconv.
-
-2009-03-17  Hui Zhu  <teawater@gmail.com>
-
-	* gdb.texinfo: Change the introduce of "disassemble-next-line".
-
-2009-03-17  Hui Zhu  <teawater@gmail.com>
-
-	* gdb.texinfo: Add documentation for disassemble-next-line.
-
-2009-03-16  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo (Commands In Python): Remove tindex entries.
-
-2009-03-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Returning): New description for missing debug info.
-
-2009-03-14  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Remote Configuration): Document query-attached.
-	(General Query Packets): Document qAttached.
-
-2009-03-05  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Background Execution): Better describe the set
-	target-async command.
-	(Maintenance Commands): Delete description of the `maint set/show
-	linux-async' and `maint set/show remote-async' commands.
-
-2009-02-18  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Add double-spaces
-	between sentences.
-
-2009-02-18  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Document the
-	=library-loaded and =library-unloaded notifications.
-
-2009-02-17  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* observer.texi (test_notification): New observer.
-
-2009-02-14  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* observer.texi: Add parameter 'print_frame' to normal_stop
-	observer.
-
-2009-02-07  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Basic Python): Fix change from 2009-02-04.
-	(Commands In Python): Fix COMMAND_* constants in last change.  Use
-	@kbd for interactive input.  Add cross-references and index
-	entries.
-
-2009-02-06  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Signals): Document $_siginfo.
-	(Convenience Variables): Mention $_siginfo.
-	(Remote Configuration): Document qXfer:siginfo:read,
-	qXfer:siginfo:write packets, and the read-siginfo-object,
-	write-siginfo-object commands.
-
-2009-02-06  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdbint.texinfo (Values): New chapter.
-
-2009-02-06  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Python API): Add entry for Commands In Python.
-	(Commands In Python): New node.
-
-2009-02-05  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Values From Inferior): Document Value.string.
-
-2009-02-05  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Basic Python): Document execute's from_tty
-	argument.
-
-2009-02-04  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Basic Python): Document gdb.history.
-
-2009-01-30  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Thread Commands): Document the
-	'current-thread-id' field.  Remove the example with zero threads,
-	since current GDB won't ever report that if there's inferior.
-
-2009-01-30  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Breakpoint Commands): Document the -d
-	option to -break-insert.
-
-2009-01-28  Daniel Jacobowitz  <dan@codesourcery.com>
-	    Jerome Guitton  <guitton@adacore.com>
-
-	* gdb.texinfo (Startup): Document --with-system-gdbinit.
-	(System-wide configuration): New section.
-
-2009-01-26  Pedro Alves  <pedro@codesourcery.com>
-
-	PR gdb/7580:
-	* gdb.texinfo (Maintenance Commands): Document "maint set|show
-	internal-error|internal-warning quit|corefile ask|yes|no".
-
-2009-01-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Using the `gdbserver' Program): Document
-	--remote-debug.
-
-2009-01-23  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo: Add nexti to list of commands that support
-	background execution.
-
-2009-01-14  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Define, Hooks): Document prefix command support.
-
-2009-01-14  Joseph Myers  <joseph@codesourcery.com>
-	    Carlos O'Donell  <carlos@codesourcery.com>
-
-	Fixes for makeinfo --html.
-
-	* annotate.texinfo: Use @copying and @insertcopying.  Use
-	@ifnottex in place of @ifinfo.
-	* gdb.texinfo: Use @copying and @insertcopying.  Use @ifnottex in
-	place of @ifinfo.  Use @ifnotinfo for one index entry.
-	* gdbint.texinfo: Use @copying and @insertcopying.  Use @ifnottex
-	in place of @ifinfo.
-	* stabs.texinfo: Use @copying and @insertcopying.  Use @ifnottex
-	in place of @ifinfo.  Include contents at start unconditionally.
-
-2009-01-13  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (General Query Packets): Remove @var{} around the
-	"spu" literal string.
-
-2009-01-07  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Error in Breakpoints): Delete mention of "The same
-	program may be running in another process" errors.
-	* gdbint.texinfo (Native Conditionals): Delete
-	ONE_PROCESS_WRITETEXT description.
-
-2009-01-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Start of New Year Procedure): Add the "coding"
-	emacs local variable to be placed at the end of the ChangeLog.
-	Add server.c and gdbreplay.c to the list of files where the
-	copyright year needs to be updated.
-
-2009-01-06  Sandra Loosemore  <sandra@codesourcery.com>
-
-	* gdb.texinfo (Remote Configuration): Document new
-	"set/show tcp auto-retry" and "set/show tcp connect-timeout"
-	commands.
-
-2008-12-28  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdbint.texinfo (gdbarch_cannot_fetch_register): Don't mention
-	FETCH_INFERIOR_REGISTERS.
-	(Native Conditionals): Remove obsolete CHILD_PREPARE_TO_STORE,
-	FETCH_INFERIOR_REGISTERS descriptions.  Remove
-	gdbarch_get_longjmp_target descrition, since already described in
-	Target Conditionals.  Move gdbarch_fp0_regnum description to ...
-	(Target Conditionals): ... here.
-
-2008-12-16  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Omissions from Ada): Add missing GDB prompt in
-	examples.
-	(Additions to Ada): Likewise.  Add the missing opening and closing
-	parenthesis of the GDB prompt in one of the examples.
-
-2008-12-14  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Omissions from Ada): Remove incorrect documentation
-	about the result of 'Address not being of type System.Address.
-	This problem has been fixed a while ago.
-
-2008-12-02  Vladimir Prus  <vladimir@codesourcery.com>
-
-	MI non-stop and multiprocess docs.
-
-	* gdb.texinfo (GDB/MI): New section 'GDB/MI General Design'
-	(GDB/MI Output Records): New section 'GDB/MI Frame Information'
-	Adjust documentation for *stopped, document =thread-created,
-	=thread-exited, =thread-group-created and =thread-group-exited.
-	(GDB/MI Thread Commands): Document the 'state' field in
-	-thread-info output.
-	(GDB/MI Program Execution): Mention --all and --thread-group
-	options.
-	(GDB/MI Variable Objects): Describe floating and fixed variable
-	objects.
-	(GDB/MI Miscellaneous Commands): Document -list-thread-groups.
-
-2008-12-02  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Operating System Information): New appendix.
-	(Operating System Auxiliary Information): Document 'info os processes'
-	(Remote Configuration): Document 'osdata'
-	(General Query Packets): Document qXfer:osdata:read.
-
-2008-11-27  Tristan Gingold  <gingold@adacore.com>
-
-	* gdb.texinfo (Darwin): Document Darwin specific features.
-
-2008-11-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdbint.texinfo (Target Conditionals): Extend the
-	gdbarch_breakpoint_from_pc description.
-
-2008-11-22  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (M68K Features): Fix typo.
-
-2008-11-18  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* gdb.texinfo (Symbols): Mention printing containing
-	image name in "info symbol".
-	(Maint translate-address): Likewise.
-
-2008-11-18  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Set Catchpoints): Remove the documentation of
-	commands "catch load" and "catch unload".
-
-2008-11-17  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Async Records): Document
-	=thread-selected.
-
-2008-11-17  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* observer.texi (new_inferior, inferior_exit): New observers.
-
-2008-10-27  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdbint.texinfo (Adding a New Target): Don't mention TDEPFILES,
-	.mt files, TM_CLIBS or TM_CDEPS.
-	(x86 Watchpoints): Don't mention TDEPFILES.
-
-2008-10-24  Sandra Loosemore  <sandra@codesourcery.com>
-
-	* gdb.texinfo (Remote Protocol): Add new nodes to menu.
-	(Overview): Mention notifications and non-stop mode behavior.
-	(Packets): Update documentation of ?, vAttach, vCont, and vRun
-	with non-stop mode behavior.  Add vStopped description.
-	(Stop Reply Packets):  Update list of packets that return
-	stop replies.  Mention non-stop behavior.
-	(General Query Packets): Document QNonStop packet and associated
-	qSupported query response.
-	(Interrupts): Clarify multi-threaded behavior.  Mention non-stop
-	behavior.
-	(Notification Packets): New section.
-	(Remote Non-Stop): New section.
-	(File-I/O Overview): Mention non-stop behavior.
-
-2008-10-24  Hui Zhu  <teawater@gmail.com>
-	    Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (displaced-stepping): Describe the auto mode
-	setting, and say it's the default.  This is now a mainstream
-	setting instead of a maintenance setting.
-
-2008-10-23  Pedro Alves  <pedro@codesourcery.com>
-
-	* observer.texi (thread_stop_requested): New.
-
-2008-10-22  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ada Tasks, Ada Tasks and Core Files): New nodes.
-	(Patching): Replace incorrect usage of @samp by @kbd.
-
-2008-10-17  Michael Snyder  <msnyder@vmware.com>
-
-	* gdb.texinfo: Add documentation for reverse execution.
-
-2008-10-16  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo. (Values From Inferior): New subsubsection.
-
-2008-10-06  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (set debug dwarf2-die): Document it.
-
-2008-10-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (catch) [exception]: Document how to insert
-	a breakpoint on user-defined exceptions when the exception
-	name is identical to one of the language-defined ones.
-
-2008-09-27  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Macros): Remove text about stringification,
-	varargs, and splicing.
-
-2008-09-27  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (Language Support): Remove text about omitting
-	support for a language.
-
-2008-09-23  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (info dcache): Update.
-
-2008-09-22  Sandra Loosemore  <sandra@codesourcery.com>
-
-	* gdb.texinfo (Packets): Add info on thread-id syntax and
-	multiprocess extensions.
-	<D>: Document multiprocess form of packet.
-	<H>: Use thread-id syntax.
-	<T>: Likewise.
-	<vCont>: Likewise.  Note this is required for multiprocess.
-	<vKill>: New packet.
-	(Stop Reply Packets) <T>: Use thread-id syntax.
-	<W>: Document multiprocess form of reply.
-	<X>: Likewise.
-	(General Query Packets) <qC>: Use thread-id syntax.
-	<qfThreadInfo>: Likewise.
-	<qGetTLSAddr>: Likewise.
-	<qP>: Likewise.
-	<qSupported>: Add "multiprocess" feature.
-	<qThreadExtraInfo>: Use thread-id syntax.
-
-2008-09-22  Stan Shebs  <stan@codesourcery.com>
-
-	* gdb.texinfo (Inferiors): New section.
-
-2008-09-12  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdbint.texinfo (Native Debugging): Mention NAT_GENERATED_FILES.
-
-2008-09-11  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texinfo (Target Conditionals): Remove documentation
-	for gdbarch_name_of_malloc.
-
-2008-09-03  Angela Marie Thomas <angela@releasedominatrix.com>
-
-	* gdb.texinfo (Interrupts): Mention TCP interface for
-	sending BREAK.
-
-2008-08-26  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdb.texinfo (Commands to Specify Files): Document "remote:"
-	argument prefix to "set sysroot".
-
-2008-08-21  Paul N. Hilfinger  <hilfinger@adacore.com>
-
-	* gdb.texinfo (Omissions from Ada): Describe new treatment of True
-	and False.
-
-2008-08-20  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.textinfo (GDB/MI Miscellaneous Commands): Use @table
-	for possible features of -list-features.
-
-2008-08-19  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Background execution): Adjust example
-	(GDB/MI Miscellaneous Commands): Document -list-target-features.
-
-2008-08-19  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* doc/gdb.texinfo (PowerPC): Fix typo.
-	(PowerPC features): Fix typo.
-
-2008-08-18  Pedro Alves  <pedro@codesourcery.com>
-
-	* observer.texi (thread_ptid_changed): New.
-
-2008-08-18  Luis Machado  <luisgpm@br.ibm.com>
-
-	* doc/gdb.texinfo (PowerPC): Mention Extended FPR's for POWER7.
-	(PowerPC features): Mention feature set for VSX registers.
-
-2008-08-13  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Ada Mode Intro): Improve the documentation regarding
-	the direct visibility of all names in user-written packages.
-
-2008-08-13  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (breakpoint always-inserted) Describe the auto mode
-	setting, and make it the default.
-	(Non-Stop Mode): Remove "set breakpoints always-inserted 1" from
-	non-stop script example.
-
-2008-08-12  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdbint.texinfo (Raw and Virtual Register Representations): Fix
-	reference to the "Using Different Register and Memory Data
-	Representation" section.
-
-2008-08-12  Sandra Loosemore  <sandra@codesourcery.com>
-
-	* gdb.texinfo (Remote Configuration): Document set remote noack-packet.
-	(Remote Protocol): Add Packet Acknowledgment to menu.
-	(Overview): Mention +/- can be disabled, and point to new section
-	where this is discussed in detail.
-	(General Query Packets): Document QStartNoAckMode packet, and
-	corresponding qSupported reply.
-	(Packet Acknowledgment): New section.
-
-2008-08-11  Sandra Loosemore  <sandra@codesourcery.com>
-	    Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Threads): Move paragraph about automatic thread
-	selection to All-Stop Mode subsection.
-	(Thread Stops): Reorganize existing material into subsections.
-	Add introductory blurb and menu.
-	(Non-Stop Mode): New subsection.
-	(Background Execution): New subsection.
-	(Maintenance Commands): Add cross-references from async mode
-	commands to the new Background Execution section.
-
-2008-08-06  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Extending GDB): New chapter.
-	(Sequences): Demoted chapter, now a section under the new
-	Extending GDB chapter.
-	(Python): New section.
-
-2008-07-31  Stan Shebs  <stan@codesourcery.com>
-
-	* gdbint.texinfo: Remove FUNCTION_EPILOGUE_SIZE.
-
-2008-07-29  Stan Shebs  <stan@codesourcery.com>
-
-	* gdbint.texinfo: General round of cleanup and minor
-	clarifications.
-	(Breakpoint Handling): Remove mention of BREAKPOINT macro.
-	(Longjmp Support): Update description to reflect how it is done
-	for targets without using native header.
-	(Symbol Handling): Add a little more general explanation.
-	(COFF, ELF): Mention stabs encapsulation.
-	(DWARF 3): New section.
-	(Adding a New Host): Scrub out some obsolete bits.
-	(Generic Host Support Files): Mention ser-pipe.c, ser-mingw.c.
-	(Host Conditionals): Remove descriptions of NO_STD_REGS,
-	HAVE_MMAP, HAVE_TERMIO, INT_MAX etc, LONGEST, HAVE_LONG_DOUBLE,
-	PRINTF_HAS_LONG_DOUBLE, SCANF_HAS_LONG_DOUBLE, L_SET, SEEK_CUR,
-	SEEK_SET, STOP_SIGNAL, USG.
-	(Raw and Virtual Register Representations): Ditto for
-	DEPRECATED_REGISTER_RAW_SIZE, DEPRECATED_REGISTER_VIRTUAL_SIZE,
-	DEPRECATED_REGISTER_VIRTUAL_TYPE, REGISTER_CONVERT_TO_TYPE.
-	(Target Conditionals): Ditto for DEPRECATED_FP_REGNUM,
-	DEPRECATED_FRAMELESS_FUNCTION_INVOCATION, DEPRECATED_FRAME_CHAIN,
-	DEPRECATED_FRAME_CHAIN_VALID, DEPRECATED_FRAME_INIT_SAVED_REGS,
-	DEPRECATED_FRAME_SAVED_PC, DEPRECATED_FUNCTION_START_OFFSET,
-	DEPRECATED_REGISTER_VIRTUAL_SIZE,
-	DEPRECATED_REGISTER_VIRTUAL_TYPE,
-	DEPRECATED_USE_STRUCT_CONVENTION.
-	Describe gdbarch_deprecated_fp_regnum.
-	Update description of gdbarch_print_insn.
-	(Adding a New Target): Scrub out obsolete bits.
-	(Obsolete Conditionals): Remove entire section.
-
-2008-07-25  Tom Tromey  <tromey@redhat.com>
-
-	* observer.texi (GDB Observers): Document new observers:
-	breakpoint_created, breakpoint_deleted, breakpoint_modified,
-	tracepoint_created, tracepoint_deleted, tracepoint_modified,
-	architecture_changed.
-
-2008-07-21  Stan Shebs  <stan@codesourcery.com>
-
-	* gdbint.texinfo: Refer to target_so_ops.in_dynsym_resolve_code
-	instead of IN_SOLIB_DYNSYM_RESOLVE_CODE.
-
-2008-07-21  Tom Tromey  <tromey@redhat.com>
-
-	* observer.texi (GDB Observers): Remove obsolete comment.
-	<executable_changed>: Remove argument.
-
-2008-07-18  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Macros): Update.  Use @code rather than @command.
-
-2008-07-10  Doug Evans  <dje@google.com>
-
-	* doc/gdb.texinfo: Document "set print symbol-loading on|off".
-
-2008-07-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Starting): Document "set disable-randomization".
-
-2008-07-07  Andreas Schwab  <schwab@suse.de>
-
-	* gdb.texinfo (GDB/MI Target Manipulation): Fix last change.
-
-2008-07-06  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Target Manipulation): Add
-	example of -target-attach.
-
-2008-06-10  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* observer.texi (target_resumed): New observer.
-	* gdb.texinfo (GDB/MI Output Records): Document *running.
-
-2008-06-06  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Completion): Add field name example.
-
-2008-06-06  Marc Khouzam  <marc.khouzam@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Program Context): Added example
-	to -exec-arguments
-
-2008-06-05  Nick Roberts  <nickrob@snap.net.nz>
-
-	* annotate.texinfo (Multi-threaded Apps): Add entry for thread-changed
-	annotation.
-
-2008-06-05  Vladimir Prus  <vladimir@codesourcery.com>
-	    Nathan Sidwell  <nathan@codesourcery.com>
-	    Joseph Myers  <joseph@codesourcery.com>
-
-	* configure.ac: Include ../../config/acx.m4.  Use ACX_PKGVERSION
-	and ACX_BUGURL.
-	* configure: Regenerate.
-	* Makefile.in (PKGVERSION, BUGURL_TEXI): Define.
-	(GDBvn.texi): Define VERSION_PACKAGE, BUGURL and BUGURL_DEFAULT.
-	* gdb.texinfo: Use VERSION_PACKAGE and BUGURL.  Remove
-	mailing-list-specific text about bug reporting unless
-	BUGURL_DEFAULT.
-
-2008-06-05  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (-target-select): Remove reference to target async.
-	(Maintenance Commands): Document "maint set/show remote-async".
-
-2008-06-04  Marc Khouzam  <marc.khouzam@ericsson.com>
-
-	* gdb.texinfo (GDB/MI File Transfer Commands): Typo
-	in -target-file-get section.
-
-2008-05-22  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (vAttach, vRun): Re-remove requirement of the stub
-	killing the inferior when it is already debugging a process.
-
-2008-05-21  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Continuing and Stepping): Document the new "fin"
-	abbreviation for "finish".
-
-2008-05-21  Nick Roberts  <nickrob@snap.net.nz>
-
-	* annotate.texinfo (Multi-threaded Apps): New node for new annotation.
-
-2008-05-15  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Target Conditionals): Delete entry for
-	gdbarch_dwarf_reg_to_regnum.
-
-2008-05-09  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo: Document "find" command, qSearch:memory packet.
-
-2008-05-05  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (disassemble): Document /m modifier.
-
-2008-05-05  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Maintenance Commands): Clarify that "maint time"
-	will not report the time of commands that run the target.
-
-2008-05-03  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Output Records): Add
-	missing semicolon.
-
-2008-05-03  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Output Records):
-	Document =thread-create and =thread-exited.
-
-2008-05-03  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Development and Front Ends):
-	Remove mention of dmi-discuss.
-
-2008-05-03  Pedro Alves  <pedro@codesourcery.com>
-
-	* observer.texi (thread_exit): New.
-
-2008-05-02  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Debugging Output): Document "set/show debug
-	displaced".
-	(Maintenance Commands): Document "maint set/show
-	can-use-displaced-stepping".
-
-2008-05-02  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (ARM): Document set/show arm fallback-mode
-	and set/show arm force-mode.
-
-2008-05-02  Andreas Schwab  <schwab@suse.de>
-
-	* gdbint.texinfo (Algorithms): Describe
-	target_watchpoint_addr_within_range.
-
-2008-04-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Stack Frames): New chapter.
-	(Algorithms): Move Frames text to the new chapter.
-	(Target Conditionals): Delete SAVE_DUMMY_FRAME_TOS.  Document
-	gdbarch_dummy_id instead of gdbarch_unwind_dummy_id.
-
-2008-04-24  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Output Syntax): Clarify that async
-	output does not necessary include any tokens.
-
-2008-04-22  Corinna Vinschen  <vinschen@redhat.com>
-
-	* gdb.texinfo (Set SH Calling convention): New @item.
-	(Show SH Calling convention): Ditto.
-
-2008-04-22  Markus Deuling  <deuling@de.ibm.com>
-
-	* gdb.texinfo (Fortran Operators): Describe '%' operator.
-
-2008-04-20  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Set Breaks): Mention that multiple location
-	breakpoints need line number info.  Add index entries.
-
-2008-04-19  Craig Silverstein  <csilvers@google.com>
-
-	* gdb.texinfo (Requirements): Add an optional requirement on
-	zlib.
-	* gdbint.texinfo (Debugging File Formats): Add new subsection for
-	Compressed DWARF 2.
-
-2008-04-16  Aleksandar Ristovski  <aristovski@qnx.com>
-
-	* gdb.texinfo (GDB/MI Simple Examples): Added 'disp' field to the
-	sample output for 'stopped,reason="breakpoint-hit"' message.
-	(GDB/MI Program Execution): Likewise.
-
-2008-04-09  Marc Khouzam  <marc.khouzam@ericsson.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Add anchor to
-	-var-set-format.  Add -f option to -var-evaluate-expression.
-
-2008-04-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Breakpoint Menus): Delete. Contents moved inside
-	new node "Ambiguous Expressions".  Replace references to this
-	node by references to "Ambiguous Expressions" throughout.
-	(Ambiguous Expressions): New node.
-
-2008-03-26  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (MIPS Features, PowerPC Features): Add @node.
-
-2008-03-21  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (Debugging Output): Document
-	"set/show debug lin-lwp-async".
-	(Maintenance Commands): Document "maint set/show linux-async".
-
-2008-03-21  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Expressions): Update description of malloced arrays.
-
-2008-03-15  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Thread Commands): Document
-	-thread-info.  Remove -thread-list-all-threads.
-
-2008-03-14  Pedro Alves  <pedro@codesourcery.com>
-	    Sandra Loosemore  <sandra@codesourcery.com>
-
-	* gdb.texinfo (Library List Format): Update to mention the
-	possibility to pass section addresses instead of segment
-	addresses.
-
-2008-03-10  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Starting): Document "set exec-wrapper".
-	(Server): Document gdbserver --wrapper.
-
-2008-03-03  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Set Watchpoints): Mention watchpoints on
-	unreadable memory.  Delete obsolete SPARClite reference.
-
-2008-02-28  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Starting): Mention always-running targets.
-	(Target Commands): Add an anchor for load.
-	(Connecting): Explain continue instead of run.
-
-2008-02-27  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Debugging Output): Document "set debug timestamp".
-
-2008-02-26  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (Set Breaks): Revert description of Enb column of
-	breakpoint table.
-
-2008-02-19  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (vAttach, vRun): Remove requirement of the stub
-	killing the inferior when it is already debugging a process.
-
-2008-02-13  Markus Deuling  <deuling@de.ibm.com>
-
-	* gdbint.texinfo (Build Script): New section. Mention new build script
-	gdb_buildall.sh.
-
-2008-02-01  Jim Blandy  <jimb@red-bean.com>
-
-	* gdb.texinfo (Help): Summarize 'info args' correctly.
-
-2008-01-30  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo: (Decimal Floating Point): Mention pseudo-registers
-	available in PowerPC architecture.
-	(Embedded Processors): Change node name of PowerPC item in menu.
-	(PowerPC): Rename to...
-	(PowerPC Embedded): this.
-	(Architectures): Add new PowerPC item in menu.
-	(PowerPC): New node.
-
-2008-01-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Multi-Process Mode for gdbserver): Use @kbd for
-	commands.
-
-2008-01-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Setting Catchpoints): Mention features
-	supported on GNU/Linux.
-
-2008-01-30  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI File Commands): Describe new output
-	field for MI command -file-list-exec-source-file.
-
-2008-01-29  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Using the `gdbserver' Program): Add security
-	warning.  Rearrange into subsections and subsubsections.  Document
-	--multi and --debug.  Correct --with-sysroot typo.  Update --attach
-	usage.  Make load reference clearer.  Document monitor exit.
-	(Remote Configuration): Document set remote exec-file, attach-packet,
-	and run-packet.
-	(Packets): Document vAttach and vRun.
-
-2008-01-29  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (Processes): Mention process command.
-	detach-on-follow -> detach-on-fork.
-
-2008-01-28  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Native Conditionals): Remove
-	SHELL_COMMAND_CONCAT and SHELL_FILE.
-
-2008-01-26  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Specify Location): Improve wording.
-
-2008-01-23  Chris Demetriou  <cgd@google.com>
-
-	* gdb.texinfo (Threads): Document new "set print thread-events"
-	and "show print thread-events" commands.
-
-2008-01-19  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Specify Location): New section.
-	(Delete Breaks, Edit, Set Breaks): Remove description of
-	locations.  Instead, add a reference to "Specify Location".
-	(Machine Code, Jumping, Thread Stops, Continuing and Stepping)
-	(Symbols): Refer to "Specify Location" for the valid forms of
-	linespecs and locations.
-
-2008-01-18  Markus Deuling  <deuling@de.ibm.com>
-
-	* gdbint.texinfo (Target Conditionals): Replace the description of
-	BITS_BIG_ENDIAN with a description of gdbarch_bits_big_endian.
-
-2008-01-12  Paul Hilfinger  <hilfinger@adacore.com>
-
-	* gdb.texinfo (C Operators): Remove incorrect parenthetical comment
-	about &&var, which is rejected by the expression parser.
-
-2008-01-09  Luis Machado  <luisgpm@br.ibm.com>
-
-	* gdb.texinfo (Output): Update documentation on using printf with DFP
-	types.
-
-2008-01-07  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* gdb.texinfo (C and C++): Add Decimal Floating Point format
-	subsubsection.
-	(Decimal Floating Point format): New subsubsection.
-
-2008-01-05  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdb.texinfo (File Options): Remove mention of the attempt to
-	open a core file with the -p option.  Don't list -c as a valid
-	option to attach to a process.
-
-2008-01-05  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdbint.texinfo (Host Conditionals): Remove mention of
-	ALIGN_STACK_ON_ENTRY.
-
-2008-01-05  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Start of New Year Procedure): Add item
-	describing how to update the source and documentation copyright
-	notices.
-
-2007-12-18  Jim Blandy  <jimb@codesourcery.com>
-
-	* gdb.texinfo (Set Watchpoints): Integrate per-thread
-	watchpoint explanation into the main description of the watchpoint
-	command; update synopses of 'watch', 'rwatch', and 'awatch'
-	commands.
-
-2007-12-18  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Miscellaneous gdb/mi Commands):
-	Document 'pending-breakpoints' feature of
-	-list-features.
-
-2007-12-17  Luis Machado  <luisgpm@br.ibm.com>
-
-	* gdb.texinfo: Add new parameter's description.
-
-2007-12-16  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Overview): Clarify run-length encoding
-	example.  Remove the restriction on "+" and "-" characters.
-
-2007-12-15  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Host I/O Packets): Fix xref syntax.
-
-2007-12-14  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Breakpoint Commands): Document
-	the -f option for -break-insert, remove -r option,
-	and clarify specification of location.
-
-2007-11-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Debugging Programs with Multiple Processes): Correct
-	formatting.
-	(Remote Debugging): Add File Transfer section.
-	(Remote Configuration): Document Host I/O packets.
-	(GDB/MI): Add GDB/MI File Transfer Commands section.
-	(Host I/O Packets): New section in "Remote Protocol".
-	(Packets): Add vFile.
-
-2007-11-17  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Set Breaks, Disabling): Clarify behavior of
-	breakpoints with multiple locations.
-	(Breakpoint Menus): Improve wording.
-	(Output): Fix last change.
-
-2007-11-17  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* Makefile.in (Makefile): Do not depend on target_makefile_frag.
-
-2007-11-15  Doug Evans  <dje@google.com>
-
-	* gdb.texinfo (Symbols): Update output of "maint info symtabs".
-
-2007-11-15  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdbint.texinfo (Native Conditionals): Remove
-	mention of CLEAR_SOLIB.
-
-2007-11-11  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Print Settings): Add documentation for "set/show
-	print frame-arguments".
-
-2007-11-05  Luis Machado  <luisgpm@br.ibm.com>
-
-	* gdb.texinfo (Output): Update printf command's description.
-
-2007-10-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (PowerPC): Document "set powerpc vector-abi" and "set
-	powerpc soft-float".
-
-2007-10-24  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Files): Correct formatting.  Mention Expat
-	requirement.
-	(Requirements for Building GDB): Expand the list of Expat
-	uses.
-	(Library List Format, Memory Map Format): Mention Expat.
-	(Target Descriptions): Update Expat wording.
-
-2007-10-24  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Register and Memory Data, Target Conditionals):
-	Document that gdbarch_convert_register_p should return zero for no-op
-	conversions.
-
-2007-10-22  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texi (Compiler Characteristics): Move documentation
-	of set_gdbarch_sofun_address_maybe_missing back to ...
-	(Target Conditionals): ... here to fix build break.
-
-2007-10-19  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texi (Target Conditionals): Remove documentation of
-	SOFUN_ADDRESS_MAYBE_MISSING, replaced by ...
-	(Compiler Characteristics): ... documentation of
-	set_gdbarch_sofun_address_maybe_missing.
-
-2007-10-17  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Target Conditionals): Use
-	frame_unwind_register_unsigned in examples instead of
-	frame_unwind_unsigned_register.
-
-2007-10-15  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Predefined Target Types): Add int128
-	and uint128.
-	(Standard Target Features): Add PowerPC features.
-
-2007-10-15  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint print c-tdesc".
-
-2007-10-12  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texi (Target Conditionals): Remove documentation
-	of and references to DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS,
-	gdbarch_extract_return_value, and gdbarch_store_return_value.
-
-2007-10-12  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texi (Target Conditionals): Remove documentation of
-	and references to DEPRECATED_REG_STRUCT_HAS_ADDR.
-
-2007-10-11  Kazu Hirata  <kazu@codesourcery.com>
-
-	* gdb.texinfo: Mention that inaccessible-by-default is on by
-	default.
-
-2007-10-11  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Target Conditionals): Remove VARIABLES_INSIDE_BLOCK.
-
-2007-09-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Setting Watchpoints): Adjust warning text about
-	multi-threaded watchpoints.
-	* gdbint.texinfo (Watchpoints): Describe how watchpoints are
-	checked.  Describe sticky notification.  Expand description
-	of steppable and continuable watchpoints.
-	(Watchpoints and Threads): New subsection.
-
-2007-09-28  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Setting Breakpoints): Revise
-	documentation for pending breakpoints.  Document
-	breakpoints with multiple locations.
-
-2007-09-19  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Miscellaneous gdb/mi Commands):
-	Document -list-features.
-
-2007-09-15  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Output): Spell out which features of C's printf are
-	not supported by GDB's printf.
-	(Separate Debug Files): More accurate wording regarding build ID
-	and a reference to the ld manual rather than the Fedora wiki.
-
-2007-09-04  Daniel Jacobowitz  <dan@codesourcery.com>
-	    Jim Blandy  <jimb@codesourcery.com>
-
-	* gdb.texinfo (Output Formats): Update 'c' description.  Describe 's'.
-	(Examining Memory): Update mentions of the 's' format.
-	(Automatic Display): Likewise.
-
-2007-09-02  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo: Update the FSF's Back-Cover Text.
-
-2007-09-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Separate Debug Files): Cosmetic quoting removal.
-	Fixed the ``build ID'' name.  New binaries build instructions for the
-	build ID inclusion.  Explain how the commands are specific to the build
-	ID vs. debug link.
-
-2007-09-01  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Separate Debug Files): Fix last change.  Add
-	indexing for ``build ID'' support.
-
-2007-09-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Separate Debug Files): Included a BUILD ID description.
-	Enlisted BUILD ID to the debug file searching example.
-	Included a BUILD ID `.note.gnu.build-id' section description.
-	Updated/added the debug files splitting instructions for OBJCOPY.
-
-2007-08-31  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Variable Objects): Adjust docs
-	for -var-info-expression and document
-	-var-info-path-expression.
-
-2007-08-20  Jim Blandy  <jimb@codesourcery.com>
-
-	* gdb.texinfo (Top): Dedicate manual to the memory of Fred Fish.
-	(title page): Include the dedication in the printed manual, as a
-	separate page after the copyright notice.
-
-	* gdb.texinfo (The F Reply Packet): Avoid confusing texi2html:
-	don't break a @var across a line.
-
-2007-07-25  Maciej W. Rozycki  <macro@mips.com>
-
-	* Makefile.in (MAKEHTMLFLAGS): Also search the current directory
-	for include files.
-
-2007-07-12  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (Server Prefix): New node.  Adapt from existing node
-	in annotate.texinfo.
-	(Command History): Link to new node.
-
-2007-07-05  Markus Deuling  <deuling@de.ibm.com>
-
-	* gdbint.texinfo (PC_LOAD_SEGMENT): Remove description.
-
-2007-07-05  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo (Target Conditionals): Fix last change.
-
-2007-07-03  Markus Deuling  <deuling@de.ibm.com>
-
-	* gdb.texinfo: Replace following macros by their appropriate gdbarch
-	routines:
-	(TARGET_CHAR_SIGNED, CALL_DUMMY_LOCATION, CANNOT_FETCH_REGISTER)
-	(CANNOT_STORE_REGISTER, GET_LONGJMP_TARGET, POINTER_TO_ADDRESS)
-	(ADDRESS_TO_POINTER, INNER_THAN, FRAME_NUM_ARGS)
-	(HAVE_NONSTEPPABLE_WATCHPOINT, TARGET_SHORT_BIT, TARGET_INT_BIT)
-	(TARGET_LONG_BIT, TARGET_LONG_LONG_BIT, TARGET_FLOAT_BIT)
-	(TARGET_DOUBLE_BIT, TARGET_LONG_DOUBLE_BIT, TARGET_PTR_BIT
-	(TARGET_ADDR_BIT, SP_REGNUM, PC_REGNUM, PS_REGNUM, FP0_REGNUM)
-	(STAB_REG_TO_REGNUM, ECOFF_REG_TO_REGNUM, DWARF_REG_TO_REGNUM)
-	(SDB_REG_TO_REGNUM, DWARF2_REG_TO_REGNUM, BELIEVE_PCC_PROMOTION)
-	(CONVERT_REGISTER_P, REGISTER_TO_VALUE, VALUE_TO_REGISTER)
-	(POINTER_TO_ADDRESS, ADDRESS_TO_POINTER, EXTRACT_RETURN_VALUE)
-	(STORE_RETURN_VALUE, SKIP_PROLOGUE, MEMORY_INSERT_BREAKPOINT)
-	(BREAKPOINT_FROM_PC, MEMORY_REMOVE_BREAKPOINT, DECR_PC_AFTER_BREAK)
-	(ADDR_BITS_REMOVE, TARGET_PRINT_INSN, SKIP_TRAMPOLINE_CODE)
-	(IN_SOLIB_RETURN_TRAMPOLINE, NAME_OF_MALLOC, ADDRESS_CLASS_TYPE_FLAGS)
-	(ADDRESS_CLASS_TYPE_FLAGS_TO_NAME, ADDRESS_CLASS_TYPE_FLAGS_P).
-	(ADDRESS_CLASS_NAME_to_TYPE_FLAGS, ADJUST_BREAKPOINT_ADDRESS)
-	(PRINT_FLOAT_INFO, PRINT_VECTOR_INFO, INTEGER_TO_ADDRESS)
-	(SKIP_PERMANENT_BREAKPOINT, TARGET_VIRTUAL_FRAME_POINTER)
-	(SOFTWARE_SINGLE_STEP_P)
-
-	(push_dummy_call, stabs_argument_has_addr, unwind_sp, unwind_pc)
-	(print_registers_info, push_dummy_code, unwind_dummy_id): Rework
-
-	(REGISTER_CONVERT_TO_TYPE, END_OF_TEXT_DEFAULT, GDB_MULTI_ARCH)
-	(GDB_TARGET_IS_HPPA, DEPRECATED_GET_SAVED_REGISTER)
-	(SYMBOLS_CAN_START_WITH_DOLLAR, DEPRECATED_INIT_EXTRA_FRAME_INFO)
-	(DEPRECATED_INIT_FRAME_PC, DEPRECATED_SIGTRAMP_START)
-	(IN_SOLIB_CALL_TRAMPOLINE, NO_HIF_SUPPORT, REGISTER_CONVERTIBLE)
-	(DEPRECATED_REGISTER_RAW_SIZE, PARM_BOUNDARY, DEPRECATED_STACK_ALIGN)
-	(PROLOGUE_FIRSTLINE_OVERLAP, DEPRECATED_POP_FRAME, STEP_SKIPS_DELAY)
-	(TARGET_COMPLEX_BIT, TARGET_DOUBLE_COMPLEX_BIT)
-	(OS9K_VARIABLES_INSIDE_BLOCK, KERNEL_U_ADDR, KERNEL_U_ADDR_HPUX)
-	(REGISTER_U_ADDR, U_REGS_OFFSET, DEBUG_PTRACE): Remove description.
-
-	(Converting an existing Target Architecture to Multi-arch): Remove
-	 section.
-
-	(gdbarch_unwind_pc, gdbarch_unwind_sp): Renew code example.
-	(gdbarch_addr_bits_remove): Add code example.
-
-	* gdb.texinfo: Replace REGISTER_NAME by gdbarch_register_name.
-
-2007-07-02  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Remote Configuration): Document library-info-packet.
-	Add other missing entries.  Adjust the table size to fit.
-	(Stop Reply Packets): Use @itemize instead of @enumerate.  Document
-	stop reasons including the new "library" event.
-	(General Query Packets): Adjust table widths for qSupported.  Mention
-	qXfer:libraries:read reply to qSupported and document the new packet.
-	(Library List Format): New section.
-
-2007-07-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdb.texinfo (Attach): Fixed GDB exit inferior detachment.
-
-2007-06-28  Michael Snyder  <msnyder@svkmacdonelllnx>
-
-	* gdbint.texinfo (Table, Tuple and List Functions) Fix typo.
-
-2007-06-25  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdbint.texinfo (Register and Memory Data): Break sections
-	into nodes and add a menu.
-
-2007-06-21  Maciej W. Rozycki  <macro@mips.com>
-
-	* gdb.texinfo (Examining Memory): Document the new behaviour.
-
-2007-06-21  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Standard Target Features): Document
-	m68k features.
-
-2007-06-18  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (General Query Packets): Document qOffsets changes.
-
-2007-06-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Target Description Format): Add version attribute
-	for <target>.
-
-2007-06-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (MIPS Features): Document org.gnu.gdb.mips.linux.
-
-2007-06-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (MIPS Features): New subsection.
-
-2007-06-12  Ulrich Weigand  <uweigand@de.ibm.com>
-	    Markus Deuling  <deuling@de.ibm.com>
-
-	* gdb.texinfo (General Query Packets): Document qXfer:spu:read
-	and qXfer:spu:write packets and mention them under qSupported.
-
-2007-06-12  Ulrich Weigand  <uweigand@de.ibm.com>
-	    Markus Deuling  <deuling@de.ibm.com>
-
-	* gdb.texinfo (Architectures): Add new SPU section to document
-	Cell Broadband Engine SPU architecture specific commands.
-
-2007-06-09  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Editorial
-	comments.
-
-2007-06-07  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (Emacs): Describe GDB under Emacs 22.1.
-
-2007-05-29  Jim Blandy  <jimb@codesourcery.com>
-
-	* gdb.texinfo (Overview): Doc fix.
-
-2007-05-22  Maciej W. Rozycki  <macro@mips.com>
-
-	* gdb.texinfo (Remote Configuration): Document "set/show
-	remoteflow".
-
-2007-05-16  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (MIPS): Remove documentation for set mips
-	saved-gpreg-size, show mips saved-gpreg-size, and set mips
-	stack-arg-size.
-
-2007-05-14  Bob Wilson  <bob.wilson@acm.org>
-
-	* all-cfg.texi (GDBTUI): New.
-	* gdb.texinfo (Mode Options): Use GDBTUI variable.
-	(TUI, TUI Overview, TUI Keys, TUI Single Key Mode, TUI Commands)
-	(TUI Configuration): Edit to improve clarity and fix problems of
-	both style and content.
-
-2007-05-11  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* observer.texi (GDB Observers): New observer "new_objfile".
-
-2007-05-08  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texinfo (Native Conditionals): Remove USE_PROC_FS.
-
-2007-04-14  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Document
-	frozen variables objects.
-
-2007-04-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Memory): Reference Remote Debugging chapter.
-	(Character Sets, Caching Data of Remote Targets): Likewise.
-	(Targets): Delete Remote node.  Move its text...
-	(Debugging Remote Programs): ...to here.  Delete description
-	of the "remote" command.
-	(Remote configuration): Delete description of "set remotedevice"
-	and "show remotedevice".
-	(Embedded Processors): Delete H8/300, H8/500, and SH nodes.
-
-2007-04-11  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (Contributors, Continuing and Stepping)
-	(Fortran Defaults, HPPA, TUI, TUI Commands, Configure Options)
-	(General Query Packets, File-I/O Remote Protocol Extension)
-	(Protocol Basics, The F Reply Packet, Write)
-	(Protocol-specific Representation of Datatypes, Memory Transfer):
-	Fix hyphenation, punctuation and grammar problems.
-	(Cygwin Native): Likewise.  Also fix misuse of @pxref and use
-	'section' instead of 'subsection' in the text.
-	(Non-debug DLL Symbols): Avoid 'subsubsection' in the text.
-	(i386): Remove period from section name.
-	(Installing GDB, Requirements, Running Configure,  Separate Objdir)
-	(Config Names, Configure Options): Use @file{configure}.
-
-2007-04-11  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Writing Tests): Mention gdb_test_multiple
-	and tab expansion.
-
-2007-04-10  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (SOM): Correct location of the SOM reader.
-
-2007-04-02  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo: Consistently capitalize all significant words in
-	node names, chapter titles, section titles, and headings.  Update
-	cross references to match.
-	(Starting and Stopping Trace Experiment): Make node name plural.
-	(Breakpoint related warnings): Hyphenate "Breakpoint-related".
-
-2007-03-30  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* gdb.texinfo (WinCE): Delete obsolete subsection.
-
-2007-03-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (M68K): Remove obsolete ROM monitors.
-	* gdbint.texinfo (DWARF 1): Delete section and other dwarfread.c
-	references.
-
-2007-03-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Startup): Delete references to some alternate
-	names for .gdbinit.
-	(Thread): Remove LynxOS reference.
-	(Tandem ST2000): Delete target-specific documentation.
-	* gdbint.texinfo (Symbol Handling): Remove mention of NLM.
-	(Target Architecture Definition): Remove mention of GDB_OSABI_NETWARE
-	and GDB_OSABI_LYNXOS.
-
-2007-03-29  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texi (Native Conditionals): Remove PTRACE_ARG3_TYPE.
-
-2007-03-27  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* gdbint.texinfo (Target Conditionals): Remove mention of
-	DEPRECATED_REMOTE_BREAKPOINT, DEPRECATED_BIG_REMOTE_BREAKPOINT,
-	and DEPRECATED_LITTLE_REMOTE_BREAKPOINT.
-
-2007-03-27  Brooks Moses  <brooks.moses@codesourcery.com>
-
-	* Makefile.in: Add "pdfdir" installation
-	directory, PDFTEX macro, support for "install-pdf" target,
-	and rules for making a pdf version of refcard.texi.
-	* refcard.tex: Specify paper size for PDF output.
-
-2007-03-26  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (Omissions from Ada, Additions to Ada): Wrap long lines.
-
-2007-03-26  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (Invoking GDB): Use @value{GDBP}.
-	(Source Path, Character Sets, Macros, Define)
-	(GDB/MI Result Records, GDB/MI Simple Examples)
-	(GDB/MI Program Execution, GDB/MI File Commands)
-	(Maintenance Commands, Packets, File-I/O Overview): Use @value{GDBN}.
-	(Bug Reporting): Use @value{GCC}.
-
-2007-03-26  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (Help): Fix formatting of examples.
-	(Variables): Use @ifnotinfo instead of @iftex.
-	(Non-debug DLL symbols): Use @ref instead of @pxref.
-	(Sparclet File): Use @samp instead of quotes.
-
-2007-03-26  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (Variables, C): Update cross reference to GCC docs.
-
-2007-03-26  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (Top): Move TUI and Annotations menu entries to match
-	the order of the nodes.
-	(C Operators, C Constants, Debugging C): Remove extra menus.
-	(Method Names in Commands): Do not specify next/prev/up nodes.
-
-2007-03-26  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (File Options): Add missing parenthesis.
-	(Breakpoints, Special Fortran commands, PowerPC): Fix typos.
-
-2007-02-26  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Monitor commands for gdbserver): New subsection.
-
-2007-02-26  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Standard Target Features): Mention
-	case insensitivity.
-	(ARM Features): Describe org.gnu.gdb.xscale.iwmmxt.
-
-2007-02-18  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (Top): Put Appendix A after numbered sections.
-	(Files): Add section name to argument list for pxref.
-	(Non-debug DLL symbols): Don't use `see' for pxref.
-	(Embedded Processors): Fix typo.
-	(GDB/MI Breakpoint Commands): Execution commands generate
-	*stopped not ^done.
-
-2007-02-13  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Describe meanings of
-	values for in_scope.  Mention that only root variables can be
-	updated.
-	(GDB/MI Development and Front Ends): Explain new values may be
-	added to existing fields.
-
-2007-02-08  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (-target-disconnect): Use @smallexample.
-	(Requirements): Add anchor for Expat.  Update description.
-	(Target Descriptions): Mention Expat.
-	(Target Description Format): Document new elements.  Use
-	@smallexample.
-	(Predefined Target Types, Standard Target Features): New sections.
-	* gdbint.texinfo (Target Descriptions): New section.
-
-2007-02-07  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Target Description Format): Add section on XInclude.
-
-2006-02-03  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Describe the new
-	command -enable-timings.
-
-2007-02-02  Markus Deuling  <deuling@de.ibm.com>  (tiny change)
-
-	* gdbint.texinfo (Operation System ABI Variant Handling): Update
-	descriptions for new/deleted elements in gdb_osabi.  Add missing
-	description for function generic_elf_osabi_sniff_abi_tag_sections.
-
-2007-01-29  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Maintenance Commands): Add documentation for
-	the new "maint print target-stack" command.
-
-2007-01-26  Jan Kratochvil <jan.kratochvil@redhat.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: Describe CHAR array vs. string identification rules.
-
-2007-01-26  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Compilation, Files, Bootstrapping, Bug Reporting):
-	Use @value{NGCC} instead of @value{GCC}.
-
-2007-01-20  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>  (tiny change)
-
-	* agentexpr.texi: Fix typos.
-	* annotate.texinfo: Likewise.
-	* gdb.texinfo: Likewise.
-	* gdbint.texinfo: Likewise.
-	* observer.texi: Likewise.
-	* stabs.texinfo: Likewise.
-
-2007-01-20  Markus Deuling  <deuling@de.ibm.com>  (tiny change)
-
-	* gdbint.texinfo (Support Libraries): Remove mmalloc
-	entry.  Describe readline library.
-
-2007-01-09  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Target Descriptions): New section.
-	(General Query Packets): Add QPassSignals anchor.  Mention
-	qXfer:features:read under qSupported.  Expand mentions of
-	qXfer:memory-map:read and QPassSignals.  Document
-	qXfer:features:read.
-
-2007-01-08  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Commands to specify files): Describe
-	"set sysroot" and "show sysroot".
-	(Using the `gdbserver' program): Lowercase argument
-	to @var.  Expand description of setting up GDB on the
-	host.
-
-2007-01-05  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Set Catchpoints): Add documentation for the new
-	catch exception, catch exception unhandled, and catch assert
-	commands.
-
-2007-01-04  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Debugging Output): Document "set debug xml"
-	and "show debug xml".
-
-2007-01-04  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Compiler Warnings): Update for -Wall use.
-
-2007-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Start of New Year Procedure): Add missing item.
-
-2006-12-08  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Wrap historical
-	note in @ignore, to be removed later if nobody complains.
-
-2006-12-04  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Describe -c option
-	of -var-delete.
-
-2006-11-22  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Setting breakpoints): Document
-	automatic software/hardware breakpoint usage and
-	the "set breakpoint auto-hw" command.
-
-2006-11-21  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Memory Access Checking): New.
-
-2006-11-16  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Remote configuration): Mention
-	"pass-signals-packet".
-	(General Query Packets): Document QPassSignals.  Fix
-	a typo.
-
-2006-11-14  Maxim Grigoriev  <maxim@tensilica.com>
-
-	* gdb.texinfo (Contributors): Add contributors of Xtensa port.
-
-2006-11-14  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Remote configuration): Rewrite documentation for
-	packet configuration commands.
-	(OS Information): Adjust reference to qXfer:auxv:read.
-	(General Query Packets): Remove references to read-aux-vector-packet
-	and set remote get-thread-local-storage-address.
-
-2006-11-10  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Add new
-	Initializing a New Architecture section.
-
-2006-10-31  David Taylor  <dtaylor@emc.com>
-
-	* stabs.texinfo (Macro define and undefine): New node describing
-	stabs for #define and #undef.
-
-2006-10-27  Andreas Schwab  <schwab@suse.de>
-
-	* gdb.texinfo (Processes): Rename "detach-fork" to "detach fork".
-
-2006-10-21  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Breakpoints, Set Watchpoints): Elaborate and
-	clarify on the possible meanings of ``expression'' watched by
-	watchpoints.  Add indexing.
-	(Prompting, Errors, Invalidation, Annotations for Running)
-	(Source Annotations): Fix index entries by adding "annotation" to
-	them, to discriminate from index entries that point to the more
-	general topic descriptions.
-
-2006-10-17  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Target Vector Definition): Move most
-	content into Existing Targets.  Add a menu.
-	(Existing Targets): New section, moved from Target Vector
-	Definition.  Use @subsection.
-	(Managing Execution State): New section.
-
-2006-10-16  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (ST2000): Use Ctrl- instead of C-.
-
-2006-10-15  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Sample Session, Invocation, Quitting GDB)
-	(Command Syntax, Signals, Backtrace, Connecting)
-	(Remote configuration, Renesas Boards, Console I/O): Fix last
-	change: use Ctrl- instead of C-, except wrt Emacs.
-	(File-I/O Examples): Put Ctrl-c in @kbd.
-	(Cygwin Native, File-I/O Overview, The Ctrl-C message)
-	(Console I/O): Use @samp with Ctrl-.
-	(Signals, Set Breaks, Set Watchpoints): Document optional
-	arguments to `info signals'  `handle', `info breakpoints', and
-	`info watchpoints'.
-
-2006-10-14  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Backtrace): Fix last change.
-
-2006-10-14  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (Backtrace): Order correctly and add other cases.
-
-2006-10-10  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (Command Syntax, Connecting, Remote configuration)
-	(Renesas Boards, ST2000, TUI Keys, TUI Single Key Mode)
-	(TUI Commands, Emacs, Console I/O): Fix @key and @kbd usage.
-
-2006-09-21  Vladimir Prus  <vladimir@codesourcery.com>
-	    Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Packets): Document vFlashErase,
-	vFlashWrite and vFlashDone packets.
-	(General Query Packets): Document qXfer:memory-map:read.
-	Add a new feature for qXfer:memory-map:read.
-	(Memory map format): New section.
-	(Target Commands): Mention that gdb can write flash.
-
-2006-09-21  Vladimir Prus  <vladimir@codesourcery.com>
-	    Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Memory Region Attributes): Mention target-supplied
-	memory regions and "mem auto".
-
-2006-09-21  Nathan Sidwell  <nathan@codesourcery.com>
-
-	* gdbint.texinfo (Array Containers): New section.
-
-2006-09-17  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Stack Manipulation): Mention that
-	-stack-list-arguments HIGH_FRAME argument can be larger then the
-	actual number of frames.
-
-2006-09-07  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (GDB/MI Stack Manipulation): Mention that
-	-stack-list-locals HIGH_FRAME argument can be larger then the
-	actual number of frames.
-
-2006-09-02  Bob Wilson  <bob.wilson@acm.org>
-
-	* gdb.texinfo (Packets, Stop Reply Packets, General Query Packets,
-	Register Packet Format, Tracepoint Packets): Fix spelling errors.
-
-2006-09-02  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo (Overall Structure): New section "Source Tree
-	Structure".
-
-2006-08-17  Jim Blandy  <jimb@codesourcery.com>
-
-	* gdb.texinfo (Stop Reply Packets): Note similarity of 'S' and 'T'
-	responses.
-
-2006-08-08  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Source Path): Add documentation for new
-	substitute-path commands.
-
-2006-08-08  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Installing GDB): Update menu.  Move text to...
-	(Running Configure): ...here.
-	(Requirements): New node.  Mention expat.
-
-2006-08-08  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* gdb.texinfo (Target Commands): Remove
-	'set download-write-size' and 'show download-write-size'.
-
-2006-08-01  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* stabs.texinfo (Member Type Descriptor): Correct example for
-	pointer to member types.
-
-2006-07-21  Andrew Stubbs  <andrew.stubbs@st.com>
-
-	* gdb.texinfo (Optional warnings and messages): Add
-	'set/show trace-commands'.
-	(Command files): Add '-v' to source command.
-
-2006-07-12  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (OS Information): Update qPart reference to
-	qXfer.
-	(Remote configuration): Likewise.
-	(Overview): Move @cindex to the start of a paragraph.  Talk
-	about binary data encoding.
-	(Packets): Refer to the overview for the details of the X
-	packet encoding.
-	(General Query Packets): Remove qPart description.  Add qXfer
-	description.  Add an anchor to qSupported.  Correct feature
-	table title.  Add a new feature for qXfer:auxv:read.
-	(Interrupts): Add a missing parenthesis.
-
-2006-07-05  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (KOD): Remove node.
-	(GDB/MI Kod Commands): Remove commented out node.
-
-2006-07-01  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (GDB/MI Output Syntax, GDB/MI Simple Examples)
-	(GDB/MI Breakpoint Commands, GDB/MI Program Context)
-	(GDB/MI Thread Commands, GDB/MI Program Execution)
-	(GDB/MI Stack Manipulation, GDB/MI Variable Objects)
-	(GDB/MI Data Manipulation, GDB/MI Symbol Query)
-	(GDB/MI File Commands, GDB/MI Target Manipulation)
-	(GDB/MI Miscellaneous Commands): Change (@value{GDBP})->(gdb),
-	since the MI prompt is hard-wired into the code.
-
-2006-07-01  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Compatibility with CLI): Qualify more carefully.
-	(GDB/MI Simple Examples): Use @subheading for "A Bad Command".
-	(GDB/MI Data Manipulation): Remove description of unimplemented
-	display related commands as variable objects perform this function
-	and are superior: -display-delete, -display-disable,
-	-display-enable, -display-insert and -display-list.  Move
-	-environment-cd, -environment-directory, -environment-path
-	and -environment-pwd to "Program Context".
-	(GDB/MI Program Control): Rename to "Program Execution".  Move
-	-exec-arguments -exec-abort to...
-	(GDB/MI Program Context): ...here.  New node split from "Data
-	 Manipulation".
-
-2006-06-21  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Remote configuration): Document set / show
-	remote supported-packets.
-	(General Query Packets): Document qSupported packet.
-
-2006-06-10  Sandra Loosemore <sandra@codesourcery.com>
-
-	* gdb.texinfo (File-I/O overview): Copy edit for grammar, spelling,
-	and font markup.
-	(Protocol basics): Likewise.
-	(The F request packet): Likewise.
-	(The F reply packet): Likewise.
-	(Memory transfer): Move this node to be a subsubsection of
-	"Protocol specific representation of datatypes".
-	(The Ctrl-C message): More copy editing.
-	(Console I/O): Likewise.
-	(The isatty call): Delete this node, and merge its content into
-	the "isatty" node.  Fixed references elsewhere.
-	(The system call): Delete this node, and merge its content into
-	the "system" node.  Fixed references elsewhere.
-	(open): Reformat to use @table, and add appropriate font markup.
-	(close): Likewise.
-	(read): Likewise.
-	(write): Likewise.
-	(lseek): Likewise.
-	(rename): Likewise.
-	(unlink): Likewise.
-	(stat/fstat): Likewise.
-	(gettimeofday): Likewise.
-	(isatty): Likewise.
-	(system): Likewise, plus minor changes to fix confusing wording.
-	(Integral datatypes): Fix font markup.
-	(Pointer values): Likewise.
-	(struct stat): Fix markup to use @table, plus minor copy editing.
-	(struct timeval): Fix font markup, plus minor copy editing.
-	(Constants): Minor copy editing.
-	(Errno values): Add font markup.
-	(File-I/O Examples): Likewise.
-
-2006-06-10  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI): Remove duplicate acknowledgements.
-	(GDB/MI Simple Examples): Move node up one level.  Use real
-	examples.
-	(GDB/MI Compatibility with CLI): Update.
-	(GDB/MI Result Records): Add "connected" and "exit" result
-	classes.
-	(GDB/MI Stream Records): Clarify target output.
-	(GDB/MI Command Description Format): Modify example description.
-	(GDB/MI Breakpoint Table Commands): Rename to...
-	(GDB/MI Breakpoint Commands): ...this
-	(GDB/MI Breakpoint Commands): Add optional thread field.
-	(GDB/MI Program Control): Add an introduction.  Move "Program
-	termination" examples into exec-run description.
-	(GDB/MI File Commands): Mention similar CLI commands.
-	(GDB/MI Miscellaneous Commands): Move to end.  Mention "show version"
-	is similar to "-gdb-version".
-
-2006-06-09  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Symbols): Fix "(gdb)"=>"(@value{GDBP})".
-
-2006-06-02  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Development and Front Ends): Use
-	sourceware.org for mailing lists.
-	(GDB/MI File Commands): New node split from Program Control.
-
-2006-06-01  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Development and Front Ends): New node.
-
-2006-05-22  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Cygwin Native): Fix last change.
-
-2006-05-22  Christopher Faylor  <cgf@timesys.com>
-
-	* gdb.texinfo (Cygwin Native): Document set/show cygwin-exceptions.
-
-2006-05-15  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdbint.texinfo (Algorithms): Correct spelling and punctuation.
-	(Releasing GDB, Testsuite): Remove details for including DejaGnu.
-
-2006-05-14  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (General Query Packets): Recommend not starting
-	new packets with qC and clarify.
-
-2006-05-13  Gaius Mulley  <gaius@glam.ac.uk>
-
-	* gdb.texinfo (M2 Types): New section.
-
-2006-05-10  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* agentexpr.texi: Add a copyright and license notice.
-	* observer.texi: Likewise, with GPL clause for function prototypes.
-	Remove trailing whitespace.
-
-2006-05-05  Jim Blandy  <jimb@codesourcery.com>
-
-	* gdb.texinfo (General Query Packets): Document conventions for
-	terminating packet names, and their violations.
-
-2006-05-05  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (GDB_DOC_SOURCE_INCLUDES): Update for readline 5.1.
-	* gdb.texinfo: Likewise.
-
-2006-05-05  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Remote Configuration): Remove "set remotedebug"
-	and "show remotedebug".
-	(Debugging Output): Add additional index entries.
-
-2006-04-27  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (delete-fork): Command renamed to "delete fork".
-
-2006-04-22  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Contributors): Credit frame unwinder contributors.
-	* gdbint.texinfo (Algorithms): Fix errors in frame documentation.
-
-2006-04-18  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (x86 Watchpoints, Target Conditionals): Update insert
-	and remove breakpoint prototypes.
-	(Watchpoints): Move description of target_insert_hw_breakpoint and
-	target_remove_hw_breakpoint ...
-	(Breakpoints): ... to here.  Document target_insert_breakpoint and
-	target_remove_breakpoint.
-
-2006-04-17  Jim Blandy  <jimb@codesourcery.com>
-
-	* gdb.texinfo (Packets): Note that 'addr' arguments to s, S, c,
-	and C packets are optional.
-
-2006-04-14  Frederic Riss  <frederic.riss@st.com>
-
-	* gdb.texinfo (Specifying source directories): Update the description
-	of the source file search to reflect the fact that the source path
-	always contains at least $cdir and $cwd.
-
-2006-03-31  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo: Update copyright dates.
-
-2006-03-31  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Overview): Add an index entry to "empty response".
-
-2006-03-28  Jim Blandy  <jimb@codesourcery.com>
-
-	* gdbint.texinfo (Prologue Analysis): New section.
-
-2006-03-07  Jim Blandy  <jimb@red-bean.com>
-
-	* gdb.texinfo (Connecting): Document 'target remote pipe'.
-
-	* gdb.texinfo (Target Commands): Update text describing how to
-	specify a target.  Refer to the detailed section on remote
-	debugging, not the brief mention.
-
-	* gdb.texinfo (Connecting): Organize the different 'target remote'
-	connection methods into a table.  Add a 'target remote' index
-	entry. (!!!)
-
-2006-02-17  Fred Fish  <fnf@specifix.com>
-
-	* gdb.texinfo (Symbols): Update descriptions of 'whatis' and
-	'ptype' commands to reflect the fact that the only significant
-	difference between them is that ptype prints the complete type
-	description instead of just the name.
-
-2006-02-13  Wu Zhou  <woodzltc@cn.ibm.com>
-
-	* gdbint.texinfo (Watchpoints): Delete
-	TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT.
-
-2006-02-10  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Breakpoint Table Commands): Add fullname and
-	times fields where needed.  Fix typos.  Update general form given
-	for output of -break-insert.
-	(GDB/MI): Abbreviate some unnecessarily long fullnames.
-
-2006-02-06  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdbint.texinfo (Symbol Handling): Add a section
-	on memory management.
-
-2006-02-06  Vladimir Prus  <ghost@cs.msu.su>
-
-	* gdb.texinfo (Breakpoint table commands): Document the fullname
-	field in -break-list output.
-
-2006-02-03  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Cygwin Native): Fix typos.  Clarify the types of
-	debugging information produced by the various "set debug..."
-	options.
-
-2006-02-01  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Files): Remove obsolete bits from the description
-	of "symbol-file".
-
-2006-01-25  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (Testsuite): Explain how to run selected tests.
-
-2006-01-24  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (Frames): Document the basics of GDB's register
-	unwinding model, and explain the existence of the "sentinel" frame.
-
-2006-01-23  Andrew Stubbs  <andrew.stubbs@st.com>
-
-	* gdb.texinfo (Choosing files): Mention that -directory is used
-	for script files.
-	(Specifying source directories): Likewise.
-	(Command files): Explain how script files are found.
-
-2006-01-21  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Backtrace): Describe how to get backtrace of all
-	the threads in a multi-threaded program.
-	(Threads): The threadno argument of "thread apply" can be a range
-	of numbers.
-
-2006-01-18  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (Coding): Add entry for -Wno-pointer-sign to list
-	of warning flags.
-
-2006-01-13  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Sequences): Improve menu annotations.
-	(Define): Add index entries for arguments of user-defined
-	commands.  Move the description of flow-control commands...
-	(Command Files): ...to here.  Document loop_break and
-	loop_continue.
-	(Define, Command Files): Document `end' and add index entries for
-	it.
-
-2006-01-04  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo: Add documentation for linux-fork.
-	* gdbint.texinfo: Add internal documentation for checkpoints.
-
-2006-01-02  Paul N. Hilfinger  <hilfinger@gnat.com>
-
-	* gdb.texinfo (Omissions from Ada): Document that there is now
-	limited aggregate support.
-
-2005-12-28  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Registers): Describe how to refer to SSE and MMX
-	registers and the likes.
-
-2005-12-24  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Target Commands, Bug Reporting, File Options)
-	(Symbols): Fix usage of "e.g.".
-	(Memory Region Attributes): Fix usage of "etc."
-
-	* gdbint.texinfo (libgdb, Symbol Handling, Native Debugging)
-	(Coding): Fix usage of "e.g.".
-
-2005-12-23  Eli Zaretskii  <eliz@gnu.org>
-
-	* stabs.texinfo:
-	* refcard.tex:
-	* gpl.texi:
-	* gdbint.texinfo:
-	* gdb.texinfo:
-	* gdb-cfg.texi:
-	* fdl.texi:
-	* annotate.texinfo:
-	* all-cfg.texi:
-	* Makefile.in: Add (C) after Copyright.  Update the FSF
-	address.
-
-2005-12-03  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Connecting): Explain that `monitor' is a way to
-	extend GDB with commands for external monitor.
-
-2005-12-02  Andrew Stubbs  <andrew.stubbs@st.com>
-
-	* gdb.texinfo (Convenience variables): Add init-if-undefined command.
-
-2005-11-25  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbint.texinfo (Start of New Year Procedure): New chapter.
-
-2005-11-21  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Tracepoint Packets): Document restrictions on
-	placement of 'R' actions in tracepoint action packets; document
-	dependence of 'X' and 'M' actions on a preceding 'R' action for
-	their registers.
-
-2005-11-19  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Tracepoint Packets): New node.
-	(General Query Packets): Add entries for the tracepoint packets,
-	referring to the "Tracepoint Packets" node.
-	(Tracepoints): Add reference to "Tracepoint Packets".
-
-2005-11-18  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdb.texinfo (set remotebreak): Add anchor.
-	(X packet): Likewise.
-	(Remote Protocol): Add new section `Interrupts' and new index
-	entry `interrupts (remote protocol)'.
-
-2005-11-18  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Packets): Move information out of 'q' and 'Q'
-	entries into the General Query Packets section.  Add a
-	cross-reference to that section.  Drop description of replies, as
-	these are covered in the descriptions of each packet.
-	(General Query Packets): Add introductory text.  Explain naming
-	conventions, and how the end of a name is recognized.
-
-2005-11-17  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdb.texinfo (Remote configuration): Fix typo in description of
-	"set remotebreak" command.
-
-2005-11-16  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Packets, Stop Reply Packets)
-	(General Query Packets): Various formatting cleanups.
-	- Use @samp for packet contents.
-	- Drop summaries from packet @item lines; the same information appears
-	  immediately below in the description.
-	- Delete paragraph breaks after packet @item commands, so that the
-	  description appears directly to the right of the packet prototype
-	  in the printed manual, if it fits.
-	- Place spaces in packet prototypes between @vars and non-@var
-	  letters, and explain that they're just for formatting.
-	- Use @dots{} instead of '...'.
-	- Fix uses of @code where @var was needed.
-	- Replace "deprecated" markers with English text spelling out the
-	  packet's status and the preferred alternatives.
-	- Remove "(reserved)" markers on 'A' and 'I' packets; it's unclear
-	  what this ever meant.
-	- Remove "(draft)" markers on 'i' packets; nobody has commented on
-	  this for a long time.
-	- Remove "(draft)" markers on 'z' and 'Z' packets; these have been
-	  implemented several times, and have been in use for years.
-
-2005-11-15  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Packets): Add index entries for 'm' packet
-	disclaimers.
-
-	* gdb.texinfo (Packets): Clarify lack of restrictions on behavior
-	of stub when processing an 'm' packet.
-
-	* gdb.texinfo (Packets): Mention that packets beginning with
-	letters are reserved once, at the top, instead of actually listing
-	them all and saying "reserved".
-
-2005-11-15  Andrew Stubbs  <andrew.stubbs@st.com>
-
-	* gdb.texinfo (User-defined commands): Add $argc. Add missing 'end'.
-	Change @var{$arg0 to @code{$arg0.
-
-2005-11-14  Wu Zhou  <woodzltc@cn.ibm.com>
-
-	* gdb.texinfo (Fortran): Add some words about Fortran debugging.
-
-2005-11-12  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (General Query Packets): Put packets in alphabetical
-	order.  Remove extraneous 'z'.
-
-2005-11-07  Andrew Stubbs  <andrew.stubbs@st.com>
-
-	* gdb.texinfo (Choosing files): Add --eval-command.
-
-2005-11-04  Andrew Stubbs  <andrew.stubbs@st.com>
-
-	* gdb.texinfo (Choosing modes): Add --return-child-result.
-
-
-2005-11-01  Andrew Stubbs  <andrew.stubbs@st.com>
-
-	* gdb.texinfo (Choosing modes): Add --batch-silent.
-
-2005-10-28  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Fix @pxref usage under
-	"The -var-update Command".
-
-2005-10-03  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdb.texinfo (Print Settings): Add documentation for set/show
-	print array-indexes.
-
-2005-09-17  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* gdb.texinfo (Contributors): Thank Andrew Cagney for releases
-	6.2 and 6.3.
-
-2005-08-27  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (File Options): Don't document --mapped, it's gone
-	since 19-Jan-2004.
-	(Files): Likewise.
-	(Variables, Symbols): Document the "<incomplete type>" message and
-	its reasons.
-
-2005-08-01  Fred Fish  <fnf@specifix.com>
-
-	* gdb.texinfo (SETUP_ARBITRARY_FRAME): Remove obsolete reference.
-
-2005-07-15  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Describe print-values
-	option for -var-list-children and -var-update.
-	(GDB/MI Stack Manipulation): Simplify description of
-	print-values option for -stack-list-locals.
-	(GDB/MI Command Description Format): Clarify.
-	(Mode Options): Spelling of superseded.
-
-2005-07-12  Bob Rossi  <bob@brasko.net>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Fix -inferior-tty-show
-	corresponding GDB command comment.
-
-2005-07-06  Bob Rossi  <bob@brasko.net>
-
-	* gdb.texinfo (GDB/MI Miscellaneous Commands): Add -inferior-tty-set
-	and -inferior-tty-show.
-	(Input/Output): Document "set/show inferior-tty" and tty alias.
-
-2005-07-02  Nathan J. Williams  <nathanw@wasabisystems.com>
-
-	* gdb.texinfo (Packets): Change description of 'D' packet to note
-	that GDB does wait for a response.
-
-2005-06-22  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (History) Rename "Command History".
-	(Command History): Move node "Server Prefix" from section on
-	Annotations here.
-
-2005-06-19  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Stack Manipulation):
-	Re-instate -stack-info-frame with example.  Say that it gets
-	info on selected frame, not current frame.
-
-2005-06-18  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Server): Clarify that `file' should be used before
-	connecting to the server.
-	(Files): Add an xref to the above description.
-	(Output Formats): More detailed description of the `c' format.
-	(Memory): List explicitly all the formats supported by `x'.
-	(Threads): Add an @cindex entry for "thread apply".
-	(Files): Document the possibility of loading unlinked object
-	files.  Add more indexing for solib-absolute-prefix and
-	--with-sysroot.
-	(Machine Code): Document possible problems with locations in
-	shared libraries.
-	(Backtrace): Document that free-standing environments do not need
-	to have a `main' function.
-
-2005-06-18  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (GDB/MI Stack Manipulation): Remove reference to
-	-stack-info-frame.
-
-2005-06-07  Andrew Cagney  <cagney@gnu.org>
-
-	* gdb.texinfo (Contributors): Note the original multi-arch
-	contributors.
-
-2005-06-03  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Registers): Add index entries for the standard
-	registers.
-	(Frames): Add cross-reference from frame pointer description to
-	the Registers node.
-	(Annotations Overview): Fix the reference to GDB name.
-
-2005-06-01  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Set Watchpoints): Remove @vindex entry for
-	can-use-hw-watchpoints.
-
-2005-05-28  Bob Rossi  <bob@brasko.net>
-
-	* gdb.texinfo (GDB/MI Out-of-band Records): Add bullet enumerating
-	the possible reasons why an exec async record would be returned to FE.
-
-2005-05-26  Andrew Cagney  <cagney@gnu.org>
-
-	* gdb.texinfo: Note that Elena Zannoni, Fernando Nasser, and
-	Andrew Cagney implemented the original GDB/MI.
-
-2005-05-23  Orjan Friberg  <orjanf@axis.com>
-
-	* gdb.texinfo (CRIS): Update the cris-version and cris-dwarf2-cfi
-	documentation.  Add documentation for cris-mode.
-
-2005-05-20  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Numbers): Explain the example and make the wording
-	more acurate.
-
-2005-05-17  Daniel Jacobowitz  <dan@codesourcery.com>
-	    Dennis Brueni  <dennis@slickedit.com>
-
-	* gdb.texinfo (GDB/MI Breakpoint Table Commands)
-	(GDB/MI Data Manipulation, GDB/MI Program Control)
-	(GDB/MI Stack Manipulation): Update examples to include the fullname
-	attribute in stack frames.
-
-2005-05-12  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Startup): Fix last change.  Treat gdb.ini like we
-	do with other non-standard names of init files.
-
-2005-05-11  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Command Files): Move the description of the startup
-	from here...
-	(Startup): ...to this new subsection of the Invocation chapter.
-	Rearrange the description of init files more logically and add a
-	cross-reference to "Command Files".  Document the special gdbinit
-	name for CISCO 68k.  Expand the description of what GDB does
-	during startup.
-	(History): Add index entry for HISTSIZE.
-
-2005-05-02  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdb.texinfo (Files): Remove documentation for auto-solib-limit.
-
-2005-05-02  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (SVR4 Process Information, The isatty call)
-	(The system call): Don't use foo(N) notation for man pages and
-	functions.
-	(Compilation, DJGPP Native): Improve wording.
-
-2005-04-27  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Backtrace): Describe backtraces with arguments that
-	were optimized away.
-
-2005-04-22  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Remote configuration): Document "set/show
-	get-thread-local-storage-address".  Add cross-reference to the
-	description of the qGetTLSAddr packet.
-	(General Query Packets): Mention "set remote
-	get-thread-local-storage-address" and add a reference to its
-	description.
-
-2005-04-19  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (Backtrace): Describe 'bt full'.
-
-2005-04-17  Nick Roberts  <nickrob@snap.net.nz>
-
-	* gdb.texinfo (Mode Options): Fix typo.
-	(GDB/MI): Describe how to invoke GDB/MI.
-
-2005-04-16  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (OS Information): Renamed from Auxiliary Vector; all
-	references changed.  Add description of "info udot".
-	(Files): Document "set/show stop-on-solib-events".
-	(M32R/D): Document "set/show download-path", "set/show
-	board-address", "set/show server-address", "upload", "tload".
-	Document "sdireset", "sdistatus", "debug_chaos", "use_debug_dma",
-	"use_mon_code", "use_ib_break", "use_dbt_break".
-	(Maintenance Commands): Improve indexing.
-	(Target Commands): Document "set/show hash", "set/show debug
-	monitor".
-	(SVR4 Process Information): Document "info pidlist" and "info
-	meminfo".  Document "set/show procfs-tarce" and "set/show
-	procfs-file".  Document "proc-trace-*" and "proc-untrace-*".
-	(Symbols, The Print Command with Objective-C): Improve indexing.
-	(Objective-C): Add references to "info classes" and "info
-	selectors".
-	(Debugging Output): Improve wording.  Document "set/show debug
-	solib-frv".  Fix "set/show debugvarobj".
-	(Set Breaks): Add index entry for "hardware breakpoints".
-	(Renesas ICE): Document "e7000", "ftplogin", "ftpload", "drain",
-	and "set/show usehardbreakpoints".
-	(MIPS Embedded): Document "se/show syn-garbage-limit", "set/show
-	monitor-prompt", "set/show monitor-warnings", "pmon".
-	(ARM): Document "rdilogfile", "rdilogenable", "set/show
-	rdiromatzero", "set/show rdiheartbeat".
-	(PowerPC): Document SDS-specific commands "set/show sdstimeout",
-	"sds".
-	(Embedded Processors): Document the "sim" command.
-	(Remote): Document the "remote" command.
-	(DJGPP Native): Document the "info serial" command.
-	(Threads): Document "maint info sol-threads".
-	(Files): Document "nosharedlibrary", "add-symbol-file-from-memory".
-	(Set Breaks): Improve indexing.
-	(Command Syntax): Add a reference to dont-repeat.
-	(Define): Document "dont-repeat".
-	(TUI Commands): Document "tabset".
-	(WinCE): New subsection.  Document "set/show remotedirectory",
-	"set/show remoteupload", "set/show remoteaddhost".
-
-2005-04-15  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Hurd Native): New subsection, documents
-	Hurd-specific commands.
-	(Maintenance Commands): Add cross-reference to "Debugging Output".
-	(Debugging Output): Document "set/show debug lin-lwp".
-	(MIPS): Improve documentation of heuristic-fence-post.  Document
-	"set/show mips abi", "set/show mips saved-gpreg-size", "set/show
-	mips stack-arg-size", "set/show mips mask-address", "set/show mips
-	remote-mips64-transfers-32bit-regs", "set/show debug mips".
-	(ARM): Document ARM-specific commands.
-	(AVR): New section.  Document "info io_registers".
-	(CRIS): New section.  Document "set/show cris-version" and
-	"set/show cris-dwarf2-cfi".
-	(HPPA): New section.  Document "set/show debug hppa" and "maint
-	print unwind".
-	(Neutrino): New subsection.  Document "set/show debug nto-debug".
-	(Super-H): New section.  Document the "regs" command.
-	(Debugging Output): Document "set/show debug aix-thread".
-
-2005-04-09  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Print Settings): Document "set/show print
-	pascal_static-members", "set print repeats", "show print
-	null-stop".  Improve indexing.  Fix documentation of "set print
-	union".
-	(Pascal): New section.
-	(Supported languages): Rename from "Support"; all references
-	updated.  Add a menu item for Pascal.
-	(Numbers): Document "set radix.
-	(Screen Size): Document "set/show pagination".
-	(MIPS Embedded): Remove "set processor" documentation.
-	(Remote configuration): Document "set/show X/P/Z-packet",
-	"set/show read-aux-vector-packet", "set/show remote
-	symbol-lookup-packet", "set/show remote verbose-resume-packet",
-	"set/show remoteaddresssize", "set/show remotebaud", "set/show
-	remotedebug", "set/show remotebreak", "set/show remotedevice",
-	"set/show remotelogfile".
-	(Auxiliary Vector): Add reference to the description of the
-	read-aux-vector-packet setting.
-	(Set Watchpoints): Add a cross-reference to "set remote
-	hardware-breakpoint-limit".
-	(General Query Packets): Add indexing of requests and
-	cross-references to related commands in "Remote configuration".
-	(File-I/O Overview, The system call): Fix wording and typos.
-	(Thread Stops): Add index entries.
-	(Continuing and Stepping): Document "show step-mode".
-	(i386): New node.  Document "set/show struct-convention".
-	(Files): Document "show trust-readonly-sections".
-	(Calling): Document "set/show unwindonsignal".
-	(Messages/Warnings): Add index entries.
-	(Maintenance Commands): Document "set/show watchdog".
-	(Annotations Overview): Document "show annotate".
-	(Set Watchpoints): Add index entries.
-	(Symbols): Fix doc of case-sensitive.
-	(ABI): Document "show coerce-float-to-double".
-	(Convenience Vars, Help): Improve indexing.
-	(Machine Code): Document "show disassembly-flavor".
-	(Debugging C plus plus): Document "show overload-resolution".
-	(Value History, Signaling): Add index entries.
-
-2005-04-08  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Show): Move @kindex entries to their proper places.
-	(Processes): Fix wording.
-	(History, List, Logging output, Define, Symbols, Print Settings):
-	Improve indexing.
-
-2005-04-03  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Targets): Document "set/show architecture".  Remove
-	redundant index entry for "target" command.
-	(Backtrace): Add index entries.
-	(Symbols, Fortran): Document the "set case-sensitive" command.
-	(DJGPP Native): Document "set com1base", "set com1irq", etc.
-	(Print Settings): Add index entry for "set demangle-style".
-	(Target Commands): Document "set download-write-size".
-	(Debugging Output): Document "set exec-done-display".
-
-2005-04-02  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Files): Fix the name and documentation of
-	add-shared-symbol-files.  Document its alias assf.  Update the
-	list of OSs where GDB supports shared libraries.  Fix markup.
-	(Continuing and Stepping): Add reference to @var{location} in the
-	text.
-	(Dump/Restore Files): Fix reference to @{filename}.
-	(Help): Fix wording.
-	(Attach): Ditto.
-	(Set Watchpoints): Ditto.
-	(Backtrace): Remove redundant index entries.  Improve index
-	entries.
-	(Delete Breaks): Fix wording.
-	(Memory): Document the compare-sections command.
-	(Memory Region Attributes): Improve wording.
-	(Disabling): Improve wording.
-	(Fortran): New subsection.  Document the "info common" command.
-	(Help): Document aliases "info copying" and "info warranty".
-	(Caching Remote Data): New section.  Document the "set/show
-	remotecache" and "info dcache" commands.
-	(Show): Fix wording of the documentation of the "set
-	extension-language" command.
-	(Signals): Add index entry for "info handle".
-	(Memory Region Attributes): Fix punctuation.
-	(Symbols): Change the arg name to "location" and refer to it in
-	the text.  Fix wording of "info types" doc.
-	(Threads): Fix usage of @enumerate @item's.
-	(Listing Tracepoints): Add index entry for "info tp".
-	(Set Watchpoints): Add xref to "info break" description.
-	(Macros): Add an index entry for "macro exp1".  Document the
-	"macro list" command.
-	(Maintenance Commands): Document "flushregs", "maint agent",
-	"maint check-symtabs", "maint cplus", "maint demangle", "maint
-	deprecate", "maint undeprecate", "maint dump-me", "maint packet",
-	"maint print architecture", "maint print objfiles", "maint print
-	statistics", "maint print type", "maint show-debug-regs", "maint
-	space", "maint time", and "maint translate-address".
-	(Connecting): Document the "monitor" command.
-	(Annotations Overview): Describe the "set annotate" command.
-
-2005-04-01  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Set Watchpoints): Document can-use-hw-watchpoints.
-	Rearrange index entries and improve wording about support for
-	hardware watchpoints.
-
-2005-03-10  Bob Rossi  <bob@brasko.net>
-
-	* gdb.texinfo: Update copyright
-
-2005-02-09  Theodore A. Roth  <troth@openavr.org>
-
-	* gdb.texinfo (General Query Packets): Fix texinfo compile warning and
-	error.
-
-2005-02-03  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdb.texinfo (General Query Packets): Document qGetTLSAddr packet.
-
-2005-01-17  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo: Fix spelling, infinte  ->  infinite.
-
-2005-01-08  Mark Kettenis  <kettenis@gnu.org>
-
-	* observer.texi (GDB Observers): Document "solib_loaded".
-
-2005-01-07  Andrew Cagney  <cagney@gnu.org>
-
-	* configure.ac: Rename configure.in, require autoconf 2.59.
-	* configure: Re-generate.
-
-	* configure.in: Replace configdirs with multiple references to
-	AC_CONFIG_SUBDIRS.
-	* configure: Re-generate.
-
-2005-01-04  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Versions and Branches): Make the date (YYYYMMDD)
-	part of the version number.
-
-2004-12-24  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Algorithms): Remove description of
-	TARGET_DISABLE_HW_WATCHPOINTS and TARGET_ENABLE_HW_WATCHPOINTS.
-
-2004-12-07  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (General Query Packets): Specify that thread ID's in
-	the 'qC' and 'qThreadInfo' packets are unsigned hexidecimal
-	numbers.
-
-2004-12-07  Andreas Schwab  <schwab@suse.de>
-
-	* gdb.texinfo (Mode Options): Document -l option.
-
-2004-12-04  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo (Algorithms): More accurate description of
-	STOPPED_BY_WATCHPOINT.  Point out that target_stopped_data_address
-	is not needed unless data-read and data-access watchpoints are
-	supported.  Add a description of how GDB checks whether the
-	inferior stopped because a watchpoint was hit.
-
-2004-11-23  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Files): Add cross-reference to description of
-	-readnow command-line switch.
-
-2004-11-10  Randolph Chung  <tausq@debian.org>
-
-	* gdb.texinfo: Document set/show backtrace past-entry commands.
-	Rearrange index entries for set/show backtrace past-main.
-
-2004-11-10  Jon Beniston <jon@beniston.com>
-
-	Committed by Andrew Cagney  <cagney@gnu.org>.
-	* gdb.texinfo (Remote Serial Protocol): Further describe
-	binary transfer escaping mechanism .
-
-2004-11-08  Randolph Chung  <tausq@debian.org>
-
-	* gdb.texinfo (inferior_debugging info): Document "set debug infrun"
-	and "show debug infrun".  Add index entries.
-
-2004-10-23  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (SVR4 Process Information): Document subcommands of
-	"info proc" that are already implemented.  Add index entries.
-	(Working Directory): Add a cross-reference to "info proc" command.
-	(Files): Add a tip for decreasing memory used for symtabs from
-	shared libraries.
-	(Starting): Fix whitespace; make "elaboration" stand out where it
-	is first used, and add an index entry for the term.
-	(Calling): Expand and elaborate text.  Add "print".  Add the
-	description of problems with weak aliases.
-	(Core File Generation): New section.
-
-2004-10-12  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Versions and Branches): New chapter.
-	(Releasing GDB): Delete "Versions and Branches" section.
-	(Top): Add "Versions and Branches".
-
-2004-10-08  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Editing, History): Add cross-references to the
-	included Readline and History user documentation.  Remove
-	references to the symbol have-readline-appendices which is unused
-	and undefined.
-	(History): Fix indexing.
-
-2004-10-08  Jeff Johnston  <jjohnstn@redhat.com>
-
-	* gdbint.texinfo (target_stopped_data_address): Update to
-	new prototype.
-	(i386_stopped_data_address): Update prototype and description.
-	(i386_stopped_by_watchpoint): New function and description.
-
-2004-10-03  Paul N. Hilfinger  <hilfinger@gnat.com>
-
-	* gdb.texinfo (Filenames): Add Ada suffixes.
-	(Ada) New section.
-
-2004-09-27  Andrew Cagney  <cagney@gnu.org>
-	    Robert Picco  <Robert.Picco@hp.com>
-
-	* gdb.texinfo (Packets): Document the "p" packet.
-
-2004-09-21  Jason Molenda  (jmolenda@apple.com)
-
-	* gdb.texinfo (Paths and Names of the Source Files): Document the
-	meaning of values in the 'desc' field of a SO stab.
-
-2004-09-20  Daniel Jacobowitz  <dan@debian.org>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint set dwarf2
-	max-cache-age" and "maint show dwarf2 max-cache-age".
-
-2004-09-16  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Set Breaks): Add index entry for setting
-	breakpoints on overloaded C++ functions that are not members of
-	any classes.  Add an example and an index entry for setting
-	breakpoints on all program functions.
-	(Character Sets, Macros, Overlay Commands)
-	(Non-debug DLL symbols, GDB/MI Output Syntax)
-	(Annotations Overview, Maintenance Commands, File-I/O Overview):
-	Use "(@value{GDBP})" instead of a literal "(gdb)".
-
-2004-09-12  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Native Debugging): Delete description of
-	FILES_INFO_HOOK.
-
-2004-09-11  Paul Hilfinger  <hilfinger@gnat.com>
-
-	* gdbint.texinfo (User Interface): Change local_hex_string_custom
-	to hex_string_custom (not historically correct, but more
-	understandable, given the current code).
-
-2004-09-03  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Native Debugging): Delete SVR4_SHARED_LIBS.
-
-2004-09-01  Jeff Johnston  <jjohnstn@redhat.com>
-
-	* observer.texi (solib_unloaded): New observer.
-
-2004-08-24  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Add missing
-	comma.
-
-2004-08-20  Michael Chastain  <mec.gnu@mindspring.com>
-
-	* (Using the Testsuite): build != host is supported,
-	but some test scripts do not support build != host.
-
-2004-08-14  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Host Definition): Delete description of
-	FCLOSE_PROVIDED and GETENV_PROVIDED.
-
-2004-08-05  Mark Kettenis  <kettenis@chello.nl>
-
-	* gdbint.texinfo (Host Definition): Delete description of
-	NO_SYS_FILE.
-	(Native Debugging): Delete description of KERNEL_U_ADDR_BSD and
-	PTRACE_FP_BUG.
-
-2004-08-05  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	reference to deprecated_read_fp.
-
-2004-08-02  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of DEPRECATED_REGISTER_BYTES.
-
-2004-07-30  Baurjan Ismagulov  <ibr@ata.cs.hun.edu.tr>
-
-	* gdb.texinfo (Source Path): Document the new behavior of
-	searching for the source files.
-
-2004-07-17  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Edit): Fix markup of EDITOR and improve wording.
-	(Search, Expressions, Arrays, Variables, Data, Machine Code)
-	(Auto Display): Improve indexing.
-
-2004-07-16  Andrew Cagney  <cagney@gnu.org>
-
-	* gdb.texinfo (Mode Options): Delete documentation on "-async" and
-	"-noasync".
-
-2004-07-09  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: Fix @kindex entries so that multiple commands that
-	have the same prefix have only their prefix in the index.
-
-2004-07-03  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdb.texinfo (BSD libkvm Interface): New node (section)
-	(Native): Add it to the menu.
-
-2004-07-01  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Remove
-	PCC_SOL_BROKEN.
-
-2004-06-24  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Remove
-	SUN_FIXED_LBRAC_BUG.
-
-2004-06-26  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Coding): Replace xasprintf with xstrprintf.
-
-2004-06-20  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Deprecate
-	USE_STRUCT_CONVENTION.
-
-2004-06-19  Michael Chastain  <mec.gnu@mindspring.com>
-
-	gdb.texinfo (Bug Reporting): Mention session recording,
-	with the script command or Emacs.
-
-2004-06-18  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Deprecate
-	FUNCTION_START_OFFSET.
-
-2004-06-14  Andrew Cagney  <cagney@gnu.org>
-
-	Based on changes from Karl Berry.
-	* gdb.texinfo: Do not use @sc in a direntry.
-	* stabs.texinfo: Change @dircateogry to "Software development".
-	* gdbint.texinfo, gdb.texinfo, annotate.texinfo: Ditto.
-
-2004-06-13  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of RETURN_VALUE_ON_STACK.
-
-2004-06-09  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Native Debugging): Restore "@table @code"
-	deleted by previous patch.
-
-2004-06-08  Andrew Cagney  <cagney@gnu.org>
-
-	* gdbint.texinfo (Native Debugging): Delete documentation on
-	ATTACH_DETACH.
-
-2004-06-06  Randolph Chung  <tausq@debian.org>
-
-	* gdb.texinfo (push_dummy_call): Use @code{struct value}.
-
-2004-06-06  Randolph Chung  <tausq@debian.org>
-
-	* gdb.texinfo (push_dummy_call): Update argument list to match
-	the new push_dummy_call method signature.  Describe the function
-	argument.
-
-2004-05-24  Joel Brobecker  <brobecker@gnat.com>
-
-	* gdb.texinfo (Starting): Document new start command.
-
-2004-05-21  Andrew Cagney  <cagney@redhat.com>
-
-	* observer.texi (GDB Observers): Document "inferior_created".
-
-2004-05-08  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of DO_DEFERRED_STORES.
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	references to DEPRECATED_FIX_CALL_DUMMY.
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of DEPRECATED_CALL_DUMMY_WORDS,
-	DEPRECATED_SIZEOF_CALL_DUMMY_WORDS, and CALL_DUMMY.
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of DEPRECATED_PUSH_DUMMY_FRAME.
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	reference to DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET.
-
-2004-05-07  Andrew Cagney  <cagney@redhat.com>
-
-	* observer.texi (GDB Observers): Add "Debugging" section.  Include
-	cross reference to "set/show debug observer".
-	* gdb.texinfo (Debugging Output): Document "set/show debug
-	observer".
-
-2004-05-01  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of DEPRECATED_PC_IN_SIGTRAMP.
-
-2004-04-30  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	documentation for BELIEVE_PCC_PROMOTION_TYPE, no longer defined.
-
-2004-04-30  Orjan Friberg  <orjanf@axis.com>
-
-	* observer.texi (GDB Observers): Correct spelling.
-
-2004-04-26  Orjan Friberg  <orjanf@axis.com>
-
-	* observer.texi (GDB Observers): Add target_changed event.
-
-2004-04-08  Andrew Cagney  <cagney@redhat.com>
-
-	* observer.texi (GDB Observers): Rework, provide generic observer
-	definitions and then a list of observable events.
-
-2004-04-04  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Host Definition): Delete reference to
-	NO_SIGINTERRUPT.
-
-2004-04-02  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	reference to DEPRECATED_CALL_DUMMY_LENGTH.
-
-2004-03-28  Stephane Carrez  <stcarrez@nerim.fr>
-
-	* gdb.texinfo (TUI Commands): Document tui reg commands.
-
-2004-03-26  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (TUI): Delete reference to --enable-tui.  Mention
-	"gdbtui".
-	(Mode Options): Mention "gdbtui".  Use "Text" not "Terminal".
-	(Contributors): Mention both Text and Terminal User Interface.
-
-2004-03-23  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Deprecate
-	references to SIGTRAMP_START and SIGTRAMP_END.
-
-2004-03-23  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Deprecate
-	references to PC_IN_SIGTRAMP.
-
-2004-03-19  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	reference to GDB_TARGET_IS_HPPA.
-
-2004-03-18  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Coding): Update section on gdbarch_data,
-	describe pre_init and post_init.
-
-2004-03-09  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Debugging Output): Document values for "set debug
-	target".
-
-2004-02-28  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Contributors): Mention GDB 6.1 release engineer.
-
-2004-02-26  Jeff Johnston  <jjohnstn@redhat.com>
-
-	* gdb.texinfo (breakpoints): Add information about the
-	new "set breakpoint pending" and "show breakpoint pending"
-	commands.
-
-2004-02-26  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Coding): Document use of gdbarch_obstack_zalloc
-	in Per-architecture module data section.
-
-2004-02-25  Roland McGrath  <roland@redhat.com>
-
-	* gdb.texinfo (General Query Packets): Document qPart:... packets.
-
-2004-02-24  Andrew Cagney  <cagney@redhat.com>
-
-	* annotate.texinfo: Wrap fdl.texi include in raise/lower sections.
-	* gdb.texinfo, gdbint.texinfo, stabs.texinfo: Ditto.
-	* fdl.texi: Import Version 1.2, November 2002.
-
-2004-02-17  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Mode Options): Note that "mi1" is deprecated.
-
-2004-02-16  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Deprecate
-	FRAMELESS_FUNCTION_INVOCATION.
-
-2004-02-16  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Coding): Mention -Wunused-function.
-
-2004-02-14  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of DEPRECATED_CALL_DUMMY_STACK_ADJUST.
-
-2004-02-12  Elena Zannoni  <ezannoni@redhat.com>
-
-	* gdb.texinfo: Properly quote the name "C++".
-	* gdbint.texinfo: Ditto.
-	* stabs.texinfo: Ditto.
-
-2004-02-11  Elena Zannoni  <ezannoni@redhat.com>
-
-	* gdbint.texinfo (Support Libraries): Add doco about obstacks and
-	minimal information about libiberty.
-
-2004-02-06  Michael Chastain  <mec.gnu@mindspring.com>
-
-	* gdb.texinfo (Auxiliary Vector): Fix thinko with @value{GDBN}.
-
-2004-02-04  Roland McGrath  <roland@redhat.com>
-
-	* gdb.texinfo (Auxiliary Vector): New node (section).
-	(Data): Add it to the menu.
-
-2004-02-02  Jeff Johnston  <jjohnstn@redhat.com>
-
-	* gdb.texinfo (Breakpoints): Add information about pending
-	breakpoint support.
-
-2004-01-26  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Overview): Delete references to the cisco protocol
-	including the "N" response.
-
-2004-01-26  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Rename
-	EXTRACT_STRUCT_VALUE_ADDRESS to
-	DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS.
-
-2004-01-24  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (KOD): Document "show os".  Add index entries for
-	"set/show os" and "info cisco" commands.
-
-2004-01-21  Eli Zaretskii  <eliz@gnu.org>
-
-	* Makefile.in (install-info): Prepend $(DESTDIR) to $(infodir).
-
-2004-01-19  Michael Chastain  <mec.gnu@mindspring.com>
-
-	* gdbint.texinfo: Delete USE_MMALLOC, NO_MMCHECK, MMCHECK_FORCE,
-	MMAP_BASE_ADDRESS, MMAP_INCREMENT.
-
-2004-01-19  Nick Roberts  <nick@nick.uklinux.net>
-
-	* gdb.texinfo (GDB/MI Stack Manipulation): Describe extension to
-	-stack-list-locals.
-	(GDB/MI Variable Objects): Describe extension to
-	-var-list-children.
-
-2004-01-17  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdbint.texinfo (DECR_PC_AFTER_HW_BREAK): Don't document.
-
-2004-01-17  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	documentation on DEPRECATED_NPC_REGNUM.
-
-2004-01-13  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo: Update copyright year.  Mention that set
-	follow-fork-mode is supported on GNU/Linux.  Remove documentation of
-	"set follow-fork-mode ask".
-
-2004-01-13  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo: Update copyright year.
-	(Coding): Add -Wunused-label to list of -Werror warnings.
-
-2004-01-08  Jason Molenda  <jmolenda@apple.com>
-	    Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: Update copyright.
-	(Objective-C): "methodName" typeo fixed.  Add @code/@var markup
-	around names, as appropriate.  Minor syntax cleanup of
-	_NSPrintForDebugger explanation.  Two spaces after periods.
-	GDBN used instead of lit. "gdb".  Index entries added for
-	print-object and _NSPrintForDebugger.  @noindent added in one spot.
-
-2003-11-11  Elena Zannoni  <ezannoni@redhat.com>
-
-	* stabs.texinfo: Add dircategory and direntry commands.
-	* annotate.texinfo: Ditto.
-
-2003-11-10  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace the
-	return_value method's "inval" and "outval" parameters with
-	"readbuf" and "writebuf".
-
-2003-10-28  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (The F request packet, The F reply packet): Renamed
-	from "The `F' request packet" and "The `F' reply packet", to make
-	texi2dvi happy.
-	(File-I/O remote protocol extension): Update menu entries, too.
-
-2003-10-26  Michael Chastain  <mec@shout.net>
-
-	* gdb.texinfo (Thread Stops): Document the issue with
-	premature return from system calls in multi-threaded programs.
-
-2003-10-24  Andrew Cagney  <cagney@redhat.com>
-
-	* annotate.texinfo: Fix "fortunatly"[sic].
-
-2003-10-23  Kei Sakamoto  <sakamoto.kei@renesas.com>
-
-	* gdb.texinfo (Contributors to GDB): Replace "Renesas"
-	with "Hitachi" and "Mitsubishi".
-
-2003-10-20  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	gdbarch_return_value.  Add cross references from
-	USE_STRUCT_CONVENTION, EXTRACT_RETURN_VALUE, and
-	STORE_RETURN_VALUE, and from/to EXTRACT_STRUCT_VALUE_ADDRESS.
-
-2003-10-18  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	regset_from_core_section.
-
-2003-10-16  Kei Sakamot Sakamoto  <sakamoto.kei@renesas.com>
-
-	* gdb.texinfo (M32R/D): Mention m32rsdi target.
-
-2003-10-15  Kevin Buettner  <kevinb@redhat.com>
-
-	From Anthony Green  <green@redhat.com>:
-	* gdb.texinfo (Breakpoints related warnings): Insert into menu.
-
-2003-10-14  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdb.texinfo (Breakpoint related warnings): New node.
-	* gdbint.texinfo (ADJUST_BREAKPOINT_ADDRESS): Document.
-
-2003-10-13  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Remote Protocol): Document v and vCont.
-
-2003-10-10  Kei Sakamoto  <sakamoto.kei@renesas.com>
-
-	* gdb.texinfo: Replace "Hitachi" and "Mitsubishi" with "Renesas".
-	* gdbint.texinfo: Ditto.
-
-2003-10-09  Andrew Cagney  <cagney@redhat.com>
-
-	From 2003-09-18 David Anderson <davea@sgi.com>:
-	* gdb.texinfo (GDB/MI Symbol Query): Replace "comamnd" with
-	"command".
-
-2003-10-03  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Deprecate
-	IBM6000_TARGET.  Mention that it implies an RS/6000 system and not
-	just target.
-
-2003-10-02  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Rename
-	REGISTER_RAW_SIZE to DEPRECATED_REGISTER_RAW_SIZE.
-	* gdb.texinfo (Packets, Stop Reply Packets): Ditto.
-	* gdbint.texinfo (Target Architecture Definition): Rename
-
-2003-09-30  Andrew Cagney  <cagney@redhat.com>
-
-	REGISTER_VIRTUAL_SIZE to DEPRECATED_REGISTER_VIRTUAL_SIZE.
-	(Target Architecture Definition):
-
-	* gdbint.texinfo (Target Architecture Definition): Rename
-	REGISTER_VIRTUAL_TYPE to DEPRECATED_REGISTER_VIRTUAL_TYPE.
-
-2003-09-29  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	documentation for NEED_TEXT_START_END.
-
-	* gdbint.texinfo (Target Architecture Definition): Rename
-	NPC_REGNUM to DEPRECATED_NPC_REGNUM.  Add cross reference to
-	TARGET_WRITE_PC.
-
-2003-09-22  Michael Chastain  <mec@shout.net>
-
-	* gdbint.texinfo (Testsuite Organization): Change gdb.c++ to gdb.cp.
-
-2003-09-21  Anthony Green  <green@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Fix typos.
-
-2003-09-21  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	stabs_argument_has_addr.
-
-2003-09-18  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	documentation on REGISTER_NAMES.
-
-2003-09-13  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	REG_STRUCT_HAS_ADDR with DEPRECATED_REG_STRUCT_HAS_ADDR.
-
-2003-09-11  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	STACK_ALIGN with DEPRECATED_STACK_ALIGN.
-
-2003-08-18  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	"frame_red_zone_size".
-
-2003-08-09  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Backtrace): Replace "set/show backtrace-below-main"
-	with "set/show backtrace past-main" and "set/show backtrace
-	limit".
-
-2003-08-08  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* Makefile.in (install-info): Support DESTDIR.
-	(install-html): Likewise.
-
-2003-08-07  Andrew Cagney  <cagney@redhat.com>
-
-	Patch from Nick Roberts.
-	* gdb.texinfo (Using GDB under GNU Emacs): Fix/update key
-	bindings.  Remove description of send-gdb-command.
-
-2003-08-07  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Mode Options): Mention that "mi2" was included in
-	GDB 6.0.
-
-2003-08-06  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Mode Options): Mention that level three is the
-	highest available and that level 2 is deprecated.
-	(Annotations Overview): Mention annotation levels. Cross reference
-	to "Limitations of the Annotation Interface" in annotate.texi.
-	(TODO, Value Annotations, Frame Annotations): Delete section.
-	(Displays, Breakpoint Info): Delete.
-
-2003-08-04  Andrew Cagney  <cagney@redhat.com>
-
-	* agentexpr.texi: Delete @bye.
-	* Makefile.in (STABS_DOC_SOURCE_INCLUDES): Add "fdl.texi"
-	(stabs.info): Add $(srcdir) to include search path.
-	(html): Depend on "annotate_toc.html", and not "annotate.html".
-	* stabs.texinfo: Ditto.  Include "fdl.texi".
-	* gdbint.texinfo: Update copyright statement's list of invariant
-	sections.
-
-2003-07-28  Andrew Cagney  <cagney@redhat.com>
-
-	* Makefile.in (INFO_DEPS): Add annotate.info.
-	(dvi, ps, html, pdf): Add annotate.
-	(ANNOTATE_DOC_SOURCE_INCLUDES): New macro.
-	(ANNOTATE_DOC_BUILD_INCLUDES): New macro.
-	(ANNOTATE_DOC_FILES): New macro.
-	(ANNOTATE_TEX_TMPS): New macro.
-	(annotate.info, annotate_toc.html): Specify dependencies.
-	(annotate.ps, annotate.pdf, annotate.dvi): Ditto.
-	* annotate.texinfo: Rename annotate.texi.  Get building.  Add
-	"Migrating to GDB/MI" and "Limitations of the Annotation
-	Interface" chapters.  Mention why it is not part of the user
-	guide.  Update copyright notice.  Include "fdl.texi".
-
-2003-07-26  Stephane Carrez  <stcarrez@nerim.fr>
-
-	* gdb.texinfo (TUI Keys): Document C-x o key to switch active window.
-
-2003-07-24  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdbint.texinfo (libgdb components): Correct a GDB to GDBN.
-
-2003-07-24  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Server): Mention pidof.
-
-2003-07-22  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Coding): Add -Wformat-nonliteral to -Werror
-	list.
-
-2003-06-28  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Logging output): New chapter.
-
-2003-06-24  Joel Brobecker  <brobecker@gnat.com>
-
-	* gdb.texinfo (Unsupported languages): New section.
-	(Languages): Add link to new section.
-
-2003-06-22  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Contributors): Mention 6.0 release engineer.
-
-2003-06-22  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdbint.texinfo (Coding): Clarify use of gdb_XXX.h headers.
-
-2003-06-22  Daniel Jacobowitz  <drow@mvista.com>
-
-	* Makefile.in (SFILES_INCLUDED): Add agentexpr.texi.
-	* agentexpr.texi: Retitle section, and change it to an appendix.
-	Comment out texinfo initialization.  Factor a @var{} into two
-	pieces to prevent makeinfo warnings.
-	* gdb.texinfo: Add Agent Expressions appendix.
-
-2003-06-19  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdbint.texinfo (Native Conditionals): Remove PREPARE_TO_PROCEED.
-
-2003-06-18  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Remote Debugging): New section "Connecting to a
-	remote target".  Document the "detach" and "disconnect" commands.
-	(Server, Netware, Debug Session): Reference "Connecting to a
-	remote target".
-	(GDB/MI Target Manipulation): Document "-target-disconnect".
-
-2003-06-13  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Deprecate
-	REMOTE_BREAKPOINT, LITTLE_REMOTE_BREAKPOINT, and
-	BIG_REMOTE_BREAKPOINT.  Cross reference BREAKPOINT_FROM_PC.
-
-2003-06-09  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Separate Debug Files): Remove extra semicolon.
-
-2003-06-08  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	documentation on FRAME_ARGS_ADDRESS_CORRECT.
-
-2003-06-08  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	"unwind_sp".  Cross reference "unwind_sp" and TARGET_READ_SP.
-
-2003-06-07  Adam Fedor  <fedor@gnu.org>
-
-	* gdb.texinfo: Add Objective-C documentation.
-
-2003-06-01  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Add "func_addr"
-	parameter to "push_dummy_call".  Rename "dummy_addr" to "bp_addr".
-
-2003-05-21  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	references to "extract_address" and "store_address".
-
-2003-05-16  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	REGISTER_BYTES with DEPRECATED_REGISTER_BYTES.  Fix typo,
-	DEPRECATED_REGISTER_SIZE instead of REGISTER_BYTE.
-
-2003-05-14  Theodore A. Roth  <troth@openavr.org>
-
-	* gdbint.texinfo (Breakpoint Handling): Correct a double negative.
-
-2003-05-10  H.J. Lu <hongjiu.lu@intel.com>
-
-	* Makefile.in (gdb-cfg.texi): Replace $$LN_S with $(LN_S).
-	(gdb.dvi): Likewise.
-	(gdb.pdf): Likewise.
-	(links2roff): Likewise.
-
-2003-05-08  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Dump/Restore Files): Update documentation for
-	'dump', 'append', and 'restore': note that format argument is
-	optional; simplify presentation of the command variants; and be
-	more precise about the formats.
-
-2003-05-07  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Symbols): Update documentation: 'maint list
-	symtabs' and 'maint list psymtabs' have been renamed 'maint info
-	symtabs' and 'maint info psymtabs'.
-
-2003-05-05  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Make
-	CALL_DUMMY_WORDS, SIZEOF_CALL_DUMMY_WORDS, CALL_DUMMY_LENGTH,
-	FIX_CALL_DUMMY, CALL_DUMMY_BREAKPOINT_OFFSET and
-	CALL_DUMMY_BREAKPOINT_OFFSET deprecated.
-
-2003-05-04  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint print
-	dummy-frames".
-
-2003-05-04  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (GDB/MI Symbol Query): Use @{ and @}.
-
-2003-05-03  J. Brobecker  <brobecker@gnat.com>
-
-	Thierry Schneider  <tpschneider1@yahoo.com>
-	* gdb.texinfo (section GDB/MI Symbol Query): Add documentation
-	for new MI command.
-
-2003-05-03  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	push_dummy_code.  Add cross references.
-
-2003-05-02  Elena Zannoni  <ezannoni@redhat.com>
-
-	* gdb.texinfo (Character Sets): Update to reflect new behavior of
-	set/show charsets commands.
-
-2003-04-28  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	read_fp, TARGET_READ_FP and FP_REGNUM, with deprecated_read_fp,
-	DEPRECATED_TARGET_READ_FP and DEPRECATED_REGNUM.
-
-2003-04-28  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Rename
-	"tm_print_insn" to "deprecated_tm_print_insn".
-
-2003-04-09  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Symbols): Document 'maint list symtabs' and 'maint
-	list psymtabs'.
-
-2003-04-08  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	references to EXTRA_FRAME_INFO.
-
-2003-04-08  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	PRINT_TYPELESS_INTEGER.
-
-2003-04-02  J. Brobecker  <brobecker@gnat.com>
-
-	* observer.texi (GDB Observers): Adjust the documentation for the
-	normal_stop notification to better describe reality. Fix a couple
-	of minor typos.
-
-2003-04-02  Bob Rossi  <bob_rossi@cox.net>
-
-	* gdb.texinfo (GDB/MI Program Control): Add
-	'-file-list-exec-source-file'
-
-2003-03-31  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	references to CALL_DUMMY_P.
-
-2003-03-30  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Remove
-	reference to TARGET_WRITE_SP.
-
-2003-03-27  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Remove
-	references to write_sp.
-
-2003-03-27  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (GDB/MI Variable Objects): Replace @include with
-	chapter body.  Use @smallexample instead of @example.
-	(Annotations): Ditto.
-	* Makefile.in (GDB_DOC_SOURCE_INCLUDES): Remove gdbmi.texinfo and
-	annotate.texi.
-
-2003-03-26  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	PUSH_ARGUMENTS with push_dummy_call, add gdbarch, regcache and
-	dummy_addr parameters.
-
-2003-03-25  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	reference to CALL_DUMMY_STACK_ADJUST_P.  Rename
-	CALL_DUMMY_STACK_ADJUST to DEPRECATED_CALL_DUMMY_STACK_ADJUST.
-	Add reference to PUSH_ARGUMENTS.
-
-2003-03-23  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Algorithms, Target Architecture Definition):
-	Deprecate FRAME_CHAIN and FRAME_CHAIN_VALID.
-
-2003-03-18  J. Brobecker  <brobecker@gnat.com>
-
-	* gdbint.texinfo (Algorithms): Add new section describing the
-	Observer paradigm.
-	(Top): Add menu entry to new observer appendix.
-	* observer.texi: New file.
-	* Makefile.in (GDBINT_DOC_SOURCE_INCLUDES): Add dependency on
-	new observer.texi file.
-
-2003-03-17  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (DATE): Delete.  Remove date from titles.  Mention
-	that GNU Press update the manual version number.
-
-2003-03-12  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	references to get_saved_register.  Rename GET_SAVED_REGISTER to
-	DEPRECATED_GET_SAVED_REGISTER.
-
-2003-03-13  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	POP_FRAME with DEPRECATED_POP_FRAME.  Update description.
-
-2003-03-12  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Rename
-	FRAME_SAVED_PC to DEPRECATED_FRAME_SAVED_PC.
-
-2003-03-10  Corinna Vinschen  <vinschen@redhat.com>
-
-	* gdb.texinfo: Add File-I/O documentation.
-
-2003-03-10  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Cross reference
-	FRAME_SAVED_PC to unwind_pc.  Document unwind_pc.
-
-2003-03-07  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo (Debugging Output): Mention the "set/show debug
-	frame" command.
-
-2003-03-05  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	unwind_dummy_id.  Cross reference unwind_dummy_id and
-	SAVE_DUMMY_FRAME_TOS.
-
-2003-03-05  James Ingham <jingham@apple.com>
-	    Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Configuring the current ABI): Document "set cp-abi"
-	and "show cp-abi".
-
-2003-03-03  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	register_type.
-
-2003-03-03  Andrew Cagney  <cagney@redhat.com>
-
-	* stabs.texinfo (Structures): Use @samp and separate @var's
-	instead of a single @var containing a comma separated list.
-	(Unions): Ditto.
-
-2003-03-02  Daniel Jacobowitz  <drow@mvista.com>
-
-	* Makefile.in (distclean): Remove config.log.
-
-2003-03-01  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Rename
-	FRAME_INIT_SAVED_REGS to DEPRECATED_FRAME_INIT_SAVED_REGS.
-
-2003-03-01  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo: Rename INIT_EXTRA_FRAME_INFO to
-	DEPRECATED_INIT_EXTRA_FRAME_INFO.
-
-2003-02-23  Raoul Gough  <RaoulGough@yahoo.co.uk>
-
-	* gdb.texinfo (Cygwin Native): Links to Non-debug DLL symbols.
-	(Non-debug DLL symbols): New node, describing the minimal symbols
-	loaded from DLLs without real debugging symbols.
-
-2003-02-20  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Set Breaks): Add cross reference to "set remote
-	hardware-breakpoint-limit".
-	(Set Watchpoints): Add cross reference to "set remote
-	hardware-watchpoint-limit".
-	(Remote configuration options): New section.
-
-2003-02-04  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	descrption of IS_TRAPPED_INTERNALVAR.
-
-	From Keith Seitz <keiths@redhat.com>:
-	* gdb.texinfo (Interpreters): New chapter.  Refer the command-line
-	option "-i"/"--interpreter" to this chapter.  Include index
-	entries.
-
-2003-02-04  David Carlton  <carlton@math.stanford.edu>
-
-	* gdb.texinfo (C@t{++}): Recommend DWARF 2, then stabs+.
-	(Variables): Recommend stabs+ and DWARF 2.
-	(C plus plus expressions): Correct info about
-	compiler versions, debug formats.
-	(Contributors): Change 'DWARF2' to 'DWARF 2'.
-	PR symtab/874.
-
-2003-02-01  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of ADDITIONAL_OPTIONS, ADDITIONAL_OPTION_CASES,
-	ADDITIONAL_OPTION_HANDLER, and ADDITIONAL_OPTION_HELP, and
-	BEFORE_MAIN_LOOP_HOOK, and DBX_PARM_SYMBOL_CLASS along with
-	references to nindy and i960.
-	* gdb.texinfo (i960): Delete all references to i960 and nindy.
-
-2003-02-01  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	FLOAT_INFO.
-
-2003-01-30  Andrew Cagney  <ac131313@redhat.com>
-
-	* stabs.texinfo (Member Type Descriptor): Clarify description of
-	`@'.  Suggested by Ben Hutchings.
-
-2003-01-29  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (M68K): Delete reference to es1800.
-
-2003-01-29  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document `maint print
-	reggroups' and `maint print register-groups'.
-	* gdbint.texinfo (Target Architecture Definition): Document
-	register_reggroup_p.
-
-2003-01-23  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Separate Debug Files): New section.
-
-2003-01-22  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Maintenance Commands): Add "maint set profile"
-	and "maint show profile".
-
-2003-01-16  Michael Chastain  <mec@shout.net>
-
-	* gdb.texinfo (Installing GDB): Warn against
-	".../gdb-VERSION/gdb/configure".
-	(Separate Objdir): Likewise.
-
-2003-01-15  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	definition of PRINT_REGISTER_HOOK.
-
-2003-01-15  Elena Zannoni  <ezannoni@redhat.com>
-
-	(OpenRISC 1000): Fix formatting of command names.
-
-2003-01-15  Elena Zannoni  <ezannoni@redhat.com>
-
-	* gdb.texinfo (Continuing and Stepping): Add new command
-	'advance'. Clarify behavior of 'until'.
-
-2003-01-13  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Files): Document solib-absolute-prefix and
-	solib-search-path.
-
-2003-01-09  Michael Chastain  <mec@shout.net>
-
-	* gdbint.texinfo (Configuring @value{GDBN} for Release): Delete.
-	(Create a Release): Add new instructions for new @file{src-release}.
-	Document existing instructions for @file{Makefile.in} as
-	being for @value{GDBN} 5.3.1 or earlier.
-
-2003-01-09  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Mention
-	frame_saved_regs_zalloc and frame_extra_info_zalloc as the way to
-	allocate memory.
-
-2003-01-04  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Controlling GDB): Add @kindex for
-	"show osabi".
-	(Backtraces): Add @kindex's for backtrace-below-main.
-
-2003-01-04  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Controlling GDB): Document "set osabi".
-
-2003-01-04  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Backtraces): Document "set backtrace-below-main".
-	* gdbint.texinfo (FRAME_CHAIN_VALID): Update documentation.
-
-2003-01-04  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Controlling GDB): Add ABI section.  Document
-	"set coerce-float-to-double".
-	* gdbint.texinfo (COERCE_FLOAT_TO_DOUBLE): Remove documentation.
-
-2003-01-02  Andrew Cagney  <ac131313@redhat.com>
-
-	* stabs.texinfo: Remove obsolete text.
-	* gdbint.texinfo: Ditto.
-	* gdb.texinfo: Ditto.
-
-2002-12-22  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Update
-	description of gdbarch_register_osabi.
-
-2002-12-20  Kazu Hirata  <kazu@cs.umass.edu>
-
-	* agentexpr.texi: Fix typos.
-	* annotate.texi: Likewise.
-	* fdl.texi: Likewise.
-
-2002-12-10  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Algorithms): Replace INIT_FRAME_PC with
-	DEPRECATED_INIT_FRAME_PC.
-
-2002-12-01  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	PC_IN_CALL_DUMMY.
-
-2002-11-28  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Host Definition): Delete documentation on
-	USE_GENERIC_DUMMY_FRAMES.
-
-2002-11-26  Elena Zannoni  <ezannoni@redhat.com>
-
-	Fix PR gdb/723 and PR gdb/245.
-	* Makefile.in (install-info): Run the install-info command as part
-	of the post install steps only.
-	(uninstall-info): New target.
-	(uninstall): New target.
-
-2002-11-22  Elena Zannoni  <ezannoni@redhat.com>
-
-	* Makefile.in (install): Make install do some real work.
-
-2002-11-19  Andrew Cagney  <ac131313@redhat.com>
-
-	Fix POSIX problem reported by Paul Eggert.
-	* Makefile.in (GDBvn.texi): Use `sed q' instead of `head -1'.
-	Fix PR gdb/527.
-
-2002-10-26  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	definition of DO_REGISTERS_INFO.
-
-2002-10-18  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdbint.texinfo (Address Classes): Fix problems with insertion
-	of ``{'' and ``}'' in example.
-
-2002-10-17  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdbint.texinfo (Address Classes): New section.
-	(Target Conditionals): Document ADDRESS_CLASS_NAME_TO_TYPE_FLAGS,
-	ADDRESS_CLASS_NAME_TO_TYPE_FLAGS_P, ADDRESS_CLASS_TYPE_FLAGS,
-	ADDRESS_CLASS_TYPE_FLAGS_P, ADDRESS_CLASS_TYPE_FLAGS_TO_NAME, and
-	ADDRESS_CLASS_TYPE_FLAGS_TO_NAME_P.
-
-2002-10-11  Klee Dienes  <kdienes@apple.com>
-
-	* gdb.texinfo (Registers): Mention vector registers as well as
-	floating registers in the documentation for 'info registers' and
-	'info all-registers'.
-
-2002-10-11  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdbint.texinfo (CPLUS_MARKER): Remove item.
-
-2002-10-03  Jeff Johnston  <jjohnstn@redhat.com>
-
-	* gdbint.texinfo (Item Output Functions): Add new ui_out_field_fmt_int
-	interface definition.
-
-2002-10-03  Marko Mlinar   <markom@opencores.org>
-
-	* gdb.texinfo (Target Commands): Add or1k target specific
-	commands.
-	* gdb.texinfo (Contributors): Add myself to the contributors list.
-
-2002-10-01  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Mode Options): Update --interpreter option.  "mi2"
-	and "mi1" instead of "mi1" and "mi0".
-
-2002-09-29  Hans-Peter Nilsson  <hp@bitrange.com>
-
-	* gdb.texinfo (Packets): Fix typos "alligned".
-	Correct z3/Z3 description.  Correct z4/Z4 title.
-
-2002-09-27  Andrew Cagney  <ac131313@redhat.com>
-
-	* all-cfg.texi: Use @sc for GDB and GCC.  Update copyright.
-
-2002-09-25  Kevin Buettner  <kevinb@redhat.com>
-
-	* gdb.texinfo: Use GNU/Linux instead of Linux.
-
-2002-09-25  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Packets): Replace @samp{} with ``an empty string''.
-
-2002-09-24  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo: Replace @example with @smallexample.
-
-2002-09-20  Kevin Buettner  <kevinb@redhat.com>
-
-	From Eli Zaretskii  <eliz@gnu.org>:
-	* gdb.texinfo (Character Sets): Use @smallexample instead of
-	@example.  Use GNU/Linux instead of Linux.
-
-2002-09-20  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo: Add character set documentation.
-
-2002-09-19  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Packets): Revise `z' and `Z' packet documentation.
-	(Packets): Add cross reference from `b' packet to `z' packets.
-
-2002-09-19  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document ``maint
-	internal-error'' and ``maint internal-warning''.
-
-	* gdbint.texinfo (Target Architecture Definition): Revise
-	description of STACK_ALIGN.  Add description of FRAME_ALIGN.
-
-2002-09-19  Joel Brobecker  <brobecker@gnat.com>
-
-	* gdbint.texinfo (Target Conditionals): Document the new
-	NAME_OF_MALLOC macro.
-
-2002-09-05  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Contributors): Mention 5.2 and 5.3 release
-	engineer.
-
-2002-09-02  Stephane Carrez  <stcarrez@nerim.fr>
-
-	* gdb.texinfo (TUI Overview): Document status line fields.
-
-2002-09-02  Stephane Carrez  <stcarrez@nerim.fr>
-
-	* gdb.texinfo (TUI Commands): Document info win command.
-
-2002-09-01  Stephane Carrez  <stcarrez@nerim.fr>
-
-	* gdb.texinfo (TUI Overview): Document breakpoint markers.
-
-2002-09-01  Stephane Carrez  <stcarrez@nerim.fr>
-
-	* gdb.texinfo (TUI Single Key Mode): Document new SingleKey mode.
-	(TUI Keys): Likewise.
-
-2002-08-25  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Examples): Use ``->'' for a packet send and ``<-''
-	for a packet receive.
-
-2002-08-25  Andrew Cagney  <ac131313@redhat.com>
-
-	* Makefile.in (clean): Move to end of file.
-	(distclean, maintainer-clean, realclean): Ditto.
-	(mostlyclean): Move rule to end of file.  Use GDB_TEX_TMPS,
-	GDBINT_TEX_TMPS, STABS_TEX_TMPS.
-	(gdb.dvi, gdb.pdf): Do not cleanup TeX temp files after texi2dvi.
-	(gdbint.dvi, gdbint.pdf, stabs.dvi, stabs.pdf): Ditto.
-
-2002-08-24  Andrew Cagney  <ac131313@redhat.com>
-
-	* Makefile.in (GDBINT_TEX_TMPS): Define.
-	(gdbint.dvi, gdbint.pdf): Use
-	(GDB_TEX_TMPS): Define.
-	(gdb.dvi, gdb.pdf): Use.
-	(STABS_TEX_TMPS): Define.
-	(stabs.dvi, stabs.pdf): Use.
-	(GDB_DOC_SOURCE_INCLUDES): New macros.
-	(GDB_DOC_BUILD_INCLUDES, GDB_DOC_FILES): New macros.
-	(GDBINT_DOC_FILES_INCLUDES): New macros.
-	(GDBINT_DOC_BUILD_INCLUDES): New macros.
-	(GDBINT_DOC_FILES, STABS_DOC_SOURCE_INCLUDES): New macros.
-	(STABS_DOC_BUILD_INCLUDES, STABS_DOC_FILES): New macros.
-	(SFILES_DOC, SFILES_INCLUDED, SFILES_LOCAL): Delete macros.
-	(links2roff): Replace SFILES_INCLUDED with
-	GDB_DOC_SOURCE_INCLUDES.
-	(gdb.dvi, gdb_toc.html, gdb.pdf, gdb.info): Update dependencies.
-	(gdb.me, gdb.mm, gdb.ms): Update dependencies.
-	(gdbint.dvi, gdbint_toc.html, gdbint.pdf, gdbint.info): Update
-	dependencies.
-	(stabs.info, stabs_toc.html, stabs.pdf, stabs.dvi): Update
-	dependencies.
-	(gdbmi.texinfo): Delete rule.
-	(inc-hist.texinfo): Delete rule.
-	(rluser.texinfo): Delete rule.
-
-2002-08-23  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Update
-	STORE_RETURN_VALUE, mention regcache.
-
-2002-08-21  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	print_registers_info.  Note that DO_REGISTERS_INFO is deprecated.
-
-2002-08-19  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Remote Protocol): Reformat.  Use cross references.
-	Fix minor typos.  Add index entries.
-
-2002-08-18  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Data): Add ``Vector Unit'' to menu.
-
-2002-08-15  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	PRINT_VECTOR_INFO.
-	* gdb.texinfo (Vector Unit): Document "info vectors" command.
-
-2002-08-13  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Document "maint print
-	registers", "maint print raw-registers" and "maint print
-	cooked-registers".
-
-2002-08-08  Grace Sainsbury  <graces@redhat.com>
-
-	From Mark Salter:
-	* gdb.texinfo (Protocol): Document T packet extension to
-	allow watchpoint address reporting.
-
-2002-08-03  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Dump/Restore Files): Move `[]' to outside of @var.
-
-2002-08-01  Andrew Cagney  <cagney@redhat.com>
-
-	* stabs.texinfo, gdb.texinfo, gdbint.texinfo: Obsolete references
-	to CHILL.
-
-2002-08-01  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Coding): Revise section "Include Files".
-
-2002-07-24  Andrew Cagney  <cagney@redhat.com>
-
-	* gdbint.texinfo: Obsolete references to m88k.
-	* gdb.texinfo: Ditto.
-
-2002-07-10  Joel Brobecker  <brobecker@gnat.com>
-
-	* gdbint.texinfo (Create a release candiate): Add the location
-	where the proper version of autoconf can be retrieved.
-
-2002-07-09  Don Howard  <dhoward@redhat.com>
-
-	* gdb.texinfo (Command Files): Further describe the behavior of
-	sourced command files.
-
-2002-06-27  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (User Interface): ISO C rather than ISO-C.
-	(Coding): Clarify ISO C version that GDB assumes.
-
-2002-06-26  Tom Tromey  <tromey@redhat.com>
-
-	* gdbint.texinfo (User Interface): Mention add_setshow_cmd and
-	add_setshow_cmd_full.
-
-2002-06-25  Don Howard  <dhoward@redhat.com>
-
-	* gdb.texinfo (Memory Region Attributes): Document new behavior
-	for 'mem' command.
-
-2002-06-11  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Symbols): Update documentation for `info source'
-	command.
-
-	* gdb.texinfo (Macros): Call the command `info macro', not
-	`show macro'.
-
-2002-06-09  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Coding): Add section ``Per-architecture module
-	data''.
-
-2002-06-09  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	GDB_OSABI_GO32 and GDB_OSABI_NETWARE.
-
-2002-06-08  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Releasing GDB): Fix typos in @itemize @bullet
-	lists.
-
-2002-06-08  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Releasing GDB): Revise the section ``Cut the
-	Branch''.
-
-2002-06-01  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Add section
-	``Converting an existing Target Architecture to Multi-arch''.
-
-2002-05-30  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Releasing GDB): Rename ``Obsoleting any code''
-	to ``Obsoleting code''.  Revise.
-
-2002-05-17  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (C Preprocessor Macros): New chapter.
-	Include it in the main menu.
-	(Contributors): Credit Jim Blandy with macro support.
-	(Compilation): Explain how to get macro information into the
-	executable.
-	(Expressions): Note that preprocessor macros are expanded.
-
-2002-05-14  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo (Debug Session): Document new `udp:' and `tcp:'
-	options for `target remote'.
-
-2002-05-13  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	documentation on NNPC_REGNUM.
-
-2002-05-11  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document
-	REGISTER_TO_VALUE and VALUE_TO_REGISTER and CONVERT_REGISTER_P.
-	(Target Architecture Definition): Revise section `Using Different
-	Register and Memory Data Representations'.  Add section `Raw and
-	Virtual Register Representations'.
-
-2002-05-11  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Mention
-	defaults for REGISTER_VIRTUAL_SIZE and REGISTER_RAW_SIZE.
-	(Target Architecture Definition): Mention same.  Add references to
-	web pages.
-
-2002-05-08  Michael Snyder  <msnyder@redhat.com>
-
-	* stabs.texinfo (Attributes): Document new "vector" attribute.
-
-2002-05-04  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Releasing GDB): Revise `Create a Release'.
-
-2002-05-04  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo: Delete obsolete references to a29k.
-
-2002-04-24  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	IN_SIGTRAMP with PC_IN_SIGTRAMP.
-
-2002-04-24  David S. Miller  <davem@redhat.com>
-
-	* gdbint.texinfo (REGISTER_IN_WINDOW): Delete definition.
-
-2002-04-21  David S. Miller  <davem@redhat.com>
-
-	* gdbint.texinfo (SKIP_PROLOGUE_FRAMELESS_P): Delete definition.
-
-2002-04-21  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	definition of HAVE_REGISTER_WINDOWS.
-
-2002-04-19  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo (Releasing GDB, Coding): Fix typos.  Reported by
-	"Theodore A. Roth" <troth@verinet.com>.
-
-2002-04-15  Don Howard  <dhoward@redhat.com>
-
-	From Eli Zaretskii <eliz@gnu.org>
-	* gdb.texinfo (show max-user-call-depth): Correct formatting.
-	Provide a better explaination of this feature.
-
-2002-04-14  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Remove
-	FRAME_CHAIN_COMBINE.
-
-2002-04-12  Michael Chastain  <mec@shout.net>
-
-	* gdbint.texinfo (Obsolete Conditionals): Remove reference to
-	REG_STACK_SEGMENT.
-
-2002-04-09  Michael Chastain  <mec@shout.net>
-
-	* gdbint.texinfo (Obsolete Conditionals): Remove references to
-	PYRAMID_* macros.
-
-2002-04-07  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Bug Reporting): Document that the web is the
-	prefered way of submitting bug reports.
-	(Bug Reporting): Delete the s-mail address as the last resort.
-
-2002-04-05  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	references to TARGET_WRITE_FP and write_fp.
-
-2002-03-27  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo: Document new commands dump, append, and restore.
-
-2002-03-27  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Releasing GDB): Revise the section `Before the
-	Branch'.
-
-2002-03-18  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo: Change all examples to @smallexample.
-	* gdbint.texinfo: Ditto.
-
-2002-03-18  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Releasing GDB): Add section ``Versions and
-	Branches''.
-
-2002-03-18  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Releasing GDB): Add the section``Branch Commit
-	Policy''.
-
-2002-03-04  Fred Fish  <fnf@redhat.com>
-
-	* gdbint.texinfo: Fix a bunch of typos (alsways, mirrorred,
-	expresson, suports, dependant, trhe, perhaphs, situtations,
-	explictily, taged, oportunity, unfortunatly).
-
-2002-02-24  Andrew Cagney  <ac131313@redhat.com>
-
-	* Makefile.in (gdb.info): Add explicit path to gdb.texinfo.
-	Remove reference to 3.12.
-
-2002-02-23  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo: Include fdl.texi.
-	(Top): Add GNU Free Documentation License.
-	* Makefile.in (SFILES_INCLUDED): Add gpl.texi.
-	(gdbint.dvi, gdbint.pdf, gdbint.info): Add dependency on fdl.texi.
-	(gdbint_toc.html): Add dependency on gdb-cfg.texi and fdl.texi.
-	(gdbint.info): Add srcdir to include path.
-	* gdb.texinfo: Include gpl.texi.
-	(Top): Add Copying.
-	* gpl.texi: New file.
-
-2002-02-23  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Debugging GDB): Remove references to cygnus.com.
-
-2002-02-19  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* gdb.texinfo: Document Cygwin native specific commands.
-
-2002-02-15  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdb.texinfo: Document gdbserver ``--attach'' command.
-
-2002-02-07  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (overlays): Change @var(_ovly_debug_event)
-	to @code(_ovly_debug_event).
-
-2002-02-07  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (How Overlays Work): Shrink the overlay diagram.
-
-2002-02-06  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (overlays): Mention new magic symbol
-	'_ovly_debug_event', which allows GDB to keep better track
-	of overlays.
-
-2002-02-03  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Memory Region Attributes): Fix the wording.
-	Suggested by Dmitry Sivachenko.
-
-	* (<many nodes>): Fix the spelling and punctuation of "i.e.".
-
-2002-02-01  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (set trust-readonly): Change value{gdbn} to value{GDBN}.
-
-2002-01-30  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo: (remote protocol): Gramatical fix-up.
-	(set trust-readonly-sections): Document.
-
-2002-01-29  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Releasing GDB): Revise and update.
-
-2002-01-28  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of TARGET_BYTE_ORDER_DEFAULT.
-
-2002-01-27  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: Fix typos and markup.  From Dmitry Sivachenko
-	<mitya@cavia.pp.ru>.
-
-2002-01-23  Andrew Cagney  <ac131313@redhat.com>
-
-	* libgdb.texinfo: Delete file.
-
-2002-01-22  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo: Remove makeinfo 3.12 hacks.
-	* gdbint.texinfo: Ditto.
-
-Tue Jan 22 11:57:38 2002  Andrew Cagney  <cagney@redhat.com>
-
-	* gdb.texinfo: Fix typo ``Remove' -> ``Remote''.
-
-2002-01-22  Andrew Cagney  <ac131313@redhat.com>
-
-	* Makefile.in: Update copyright.
-	(TEXI2DVI): Define.
-	(gdb.dvi, gdb.pdf, stabs.dvi, stabs.pdf): Use TEXI2DVI.
-	(gdbint.dvi, gdbint.pdf): Use TEXI2DVI.  Add dependency on
-	gdb-cfg.texi.
-	(TEXINDEX, PDFTEX): Delete makefile variables.
-
-2002-01-22  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Protocol): Move section to appendix.
-
-2002-01-21  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Remote Debugging): Create a menu.
-	(Top): Add ``Remote Debugging'' to menu.
-
-2002-01-21  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Remote): Move the sub-section ``The GDB remote
-	serial protocol'' from here.
-	(Remote Debugging): To here.  New chapter.
-
-2002-01-20  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Delete
-	description of TARGET_BYTE_ORDER_SELECTABLE_P.
-
-2002-01-20  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Host Definition): Revise.  xm-xyz.h and xyz.mh
-	are no longer needed.
-	(Porting GDB): Add maintainer note about configure.host.
-
-2002-01-20  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Remove
-	definition of IEEE_FLOAT.
-
-2002-01-20  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: Beautify copyright years; fix a typo.
-	(DJGPP Native): Fix overfull hboxes in examples.  From Brian Youmans
-	<3diff@gnu.org>
-
-2002-01-19  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Host Definition): Remove references to
-	MALLOC_INCOMPATIBLE.
-
-2002-01-17  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Host Definition): Remove references to XDEPFILES
-	and xyz-xdep.o.
-
-2002-01-17  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Maintenance Commands): Add appendix.
-	(Set Breaks): Copy ``maint info breakpoint'' doco to
-	``Maintenance Commands'' appendix.  Add reference.
-
-2002-01-17  Andrew Cagney  <ac131313@redhat.com>
-
-	* fdl.texi: Remove next/prev from @node.
-
-2002-01-17  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: @include fdl.texi.  Fixes for overfull hboxes and
-	for monstrous @multitable (from Brian Youmans).
-
-	* fdl.texi: New file.
-
-	* Makefile.in (SFILES_INCLUDED): Add fdl.texi.
-
-2002-01-15  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Releasing GDB): New chapter.
-
-2002-01-14  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Embedded Processors, Calling program functions):
-	Obsolete references to a29k.
-
-2002-01-13  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Coding): Review Cleanups section.  Examples
-	examples.  Document that a code-block should do or discard its
-	cleanups before exit.
-
-2002-01-11  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (Choosing files): Change @samp to @file.
-
-2002-01-05  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (--pid): Document new command line option (attach).
-
-2002-01-07  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Tracepoints): Clarify that tracepoints need support
-	in the stub.
-
-2002-01-04  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	BIG_ENDIAN with BFD_ENDIAN_BIG.
-
-2002-01-03  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	value_ptr with struct value pointer.
-
-2002-01-02  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Free Software): Fix wording.
-
-2001-12-31  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Free Software): New section ``Free Software Needs
-	Free Documentation''.
-
-2001-12-30  Eli Zaretskii  <eliz@gnu.org>
-
-	* stabs.texinfo:
-	* gdb.texinfo:
-	* gdbint.texinfo:
-	* libgdb.texinfo:
-	* annotate.texi: Fix the application of GFDL in the Copyright notice.
-
-2001-12-29  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (maint info sections): Fix typo.
-
-2001-12-26  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (maint info sections): Document.
-
-	* gdb.texinfo (info proc): Comment out documentation for
-	'info proc' sub-options that are currently not implemented.
-
-2001-12-20  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (TARGET_CHAR_SIGNED): Document.
-
-2001-12-15  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Replace
-	LITTLE_ENDIAN with BFD_ENDIAN_LITTLE.
-
-2001-12-01  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Host Definition): Delete documentation on
-	HOST_BYTE_ORDER.
-
-2001-11-30  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (Overlays): New chapter, documenting GDB's
-	overlay support.  Add to top-level menu.
-
-2001-11-26  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Command Syntax): Document C-o binding.
-
-2001-07-26  Christopher Faylor  <cgf@redhat.com>
-
-	* gdb.texinfo (Options): Eliminate attempt to explain .gdbinit/gdb.ini
-	use since it is described in the referenced section.
-
-	From Eli Zaretskii <eliz@gnu.org>
-	* gdb.texinfo (Command Files): Reword to make gdb.ini requirement
-	clearer when using DJGPP.
-
-2001-11-24  Christopher Faylor  <cgf@redhat.com>
-
-	* gdb.texinfo (File Options): Change description of -nx and gdb.ini to
-	specifically refer to MS-DOS.
-	(command files): Mention gdb.ini is only used on MS-DOS.
-
-2001-11-21  Tom Tromey  <tromey@redhat.com>
-
-	* gdb.texinfo (Invoking GDB): Document --args.
-	(Mode Options): Likewise.
-
-2001-11-21  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (TARGET_RANGE_PROFITABLE_FOR_HW_WATCHPOINT):
-	Delete documentation; this macro has been removed from the
-	sources.
-
-2001-11-13  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (COERCE_FLOAT_TO_DOUBLE): Clarify.
-
-2001-11-06  Corinna Vinschen  <vinschen@redhat.com>
-
-	* gdb.texinfo (gdbarch_in_function_epilogue_p): Add documentation.
-
-2001-11-05  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (info functions): Document use of backslash to
-	quote regexp chars in function names such as "operator*()".
-
-2001-11-01  Fred Fish  <fnf@redhat.com>
-
-	* gdbint.texinfo (SOLIB_ADD): Document additional new
-	"readsyms" arg.
-
-2001-10-30  Don Howard  <dhoward@redhat.com>
-
-	* gdb.texinfo: (Command Files) Added documentation for the
-	behavior of gdb with input redirected from a file.
-
-2001-10-28  Fred Fish  <fnf@redhat.com>
-
-	* gdb.texinfo (auto-solib-add): Change docs to match
-	implementation change.
-	(auto-solib-limit): Add docs for new variable.
-
-2001-10-15  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Function
-	value_as_pointer renamed to value_as_address.
-
-2001-10-15  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Default
-	POINTER_TO_ADDRESS functions assume unsigned addresses.
-	(INTEGER_TO_ADDRESS): Document.  Derive pragmatics section from a
-	posting by Jim Blandy.
-
-2001-10-12  Jim Blandy  <jimb@redhat.com>
-
-	* Makefile.in (MAKEHTMLFLAGS): Remove -glossary; the most recent
-	version of texi2html (1.64) doesn't support this flag any more.
-
-2001-09-08  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Host Definition): Remove description of
-	MEM_FNS_DECLARED.
-
-	* gdbint.texinfo (Host Definition): Remove description of R_OK.
-
-	* gdbint.texinfo (Host Definition): Remove description of
-	HAVE_SIGSETMASK.
-
-2001-09-04  Elena Zannoni  <ezannoni@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Add
-	explanation of TARGET_PRINT_INSN macro.
-
-2001-08-30  Jim Blandy  <jimb@redhat.com>
-
-	* gdb.texinfo (`add-symbol-file'): Correct synopsis.
-	Explain what it means to load relocatable files.
-
-2001-08-28  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo: Bring the HTML `top' menu into sync with the
-	info `top' menu.
-
-Wed Aug 15 10:47:28 2001  Christopher Faylor <cgf@cygnus.com>
-
-	* gdbint.texinfo: Add a cautionary note about macro use.
-
-2001-08-02  Corinna Vinschen  <vinschen@redhat.com>
-
-	* gdb.texinfo: Explain omitting the hostname in the
-	`target remote' command.
-
-2001-07-30  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdbint.texinfo: Remove extraneous START-INFO-DIR-ENTRY
-	and END-INFO-DIR-ENTRY.
-
-2001-07-28  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
-
-	* gdb.texinfo (TUI Configuration): Rename tui configuration variables.
-
-2001-07-25  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (libgdb): Rewrite.
-
-2001-07-26  Eli Zaretskii  <eliz@gnu.org>
-
-	* Makefile.in (gdbgui.dvi, gdb-gui, gdbgui.info): Targets deleted.
-
-2001-07-24  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
-
-	* gdb.texinfo (TUI): New chapter, document the TUI.
-	(Mode Options): Document the -tui option.
-
-2001-07-23  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Host Definition): Remove description of
-	NEED_POSIX_SETPGID.
-
-2001-07-23  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.tex (DJGPP Native): New node, with descriptions of
-	DJGPP-specific commands.
-
-2001-07-19  John R. Moore  <jmoore@redhat.com>
-
-	* gdbint.texinfo: Three misspellings.
-
-2001-07-06  Andrew Cagney  <ac131313@redhat.com>
-
-	* Makefile.in (refcard.dvi): Rewrite to avoid problems with empty
-	`test` expressions on bash.  Problem reported by Colin Walters.
-
-2001-07-04  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (User Interface): Update ui-out documentation to
-	refelect recent UI/MI updates.
-
-2001-07-04  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Mode Options): Mention the mi0 and mi1
-	interpreters.
-
-2001-06-15  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): GDBARCH is a C
-	structure and not macros.
-	(Host Definition): Document that much of this chapter is obsolete.
-	(Target Architecture Definition): Update list of files that make
-	up a target architecture.
-	(Coding): Update.
-
-2001-06-28  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Update
-	EXTRACT_STRUCT_VALUE_ADDRESS and EXTRACT_STRUCT_VALUE_ADDRESS_P.
-	The latter has been changed to a true predicate.
-
-2001-06-17  Eli Zaretskii  <eliz@gnu.org>
-
-	* annotate.texi: Add @noindent where needed.  From Dmitry
-	Sivachenko <dima@Chg.RU>.
-	* gdb.texinfo: Indexing fix.  From Dmitry Sivachenko.
-
-2001-06-16  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Protocol): Fix typo.  Extra parenthesis.
-
-2001-06-14  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdb.texinfo (Remote Protocol): Document that the ``!'' packet
-	returns ``OK''.  Document that the ``R'' packet does not reply.
-
-2001-06-13  Michael Snyder  <msnyder@redhat.com>
-
-	* gdb.texinfo (Protocol): Add doc for new packet "qSymbol:".
-
-2001-06-13  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Signals): Clarify the default setting of signal
-	handling.
-
-2001-05-14  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (CLEAR_DEFERRED_STORES): Delete stray @item
-	(FRAME_ARGS_ADDRESS_CORRECT): Ditto.
-
-2001-05-12  Andrew Cagney  <ac131313@redhat.com>
-
-	* Makefile.in (GDBvn.texi): Set GDBVN from ../version.in.
-
-2001-05-10  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo (Clean Design and Portable Implementation):
-	Renamed from "Clean Design".
-	(Clean Design and Portable Implementation): Document portable
-	methods of handling file names, and the associated macros.
-
-2001-04-02  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Tracepoint Actions): Mention the "info scope"
-	command and provide a cross-reference to its description.
-	(Symbols): Note that "info scope" is useful for trace experiments.
-
-2001-04-01  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Symbols): Document "info scope".
-	(Tracepoints): New chapter.
-	(Contributors): Update for v5.1.
-	<All nodes>: Change "C++" to "C@t{++}".
-
-	* gdbint.texinfo (User Interface): A new section about ui_out
-	functions, based on text written by Fernando Nasser.
-
-	* stabs.texinfo: Change Permissions to GFDL.  Update Copyright.
-
-2001-03-26  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: Change Permissions to GFDL.  Update Copyright.
-
-	* gdbint.texinfo: Change Permissions to GFDL.  Update Copyright.
-
-	* gdbgui.texinfo: Change Permissions to GFDL.  Update Copyright.
-	Replace "GDB" with "@value{GDBN}".  Fix markup.
-
-	* annotate.texi: Change Permissions to GFDL.  Update Copyright.
-
-	* gdb.texinfo (Output Formats): Mention "info symbol" and provide
-	a cross-reference to its description.
-	(Symbols): Document "info symbol".
-
-2001-03-21  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo (Algorithms): New section "Watchpoints" and new
-	subsection "x86 Watchpoints".
-	(Target Architecture Definition): Document the macros
-	I386_USE_GENERIC_WATCHPOINTS and TARGET_HAS_HARDWARE_WATCHPOINTS.
-	(Native Debugging): Document I386_USE_GENERIC_WATCHPOINTS.
-
-2001-03-20  Andrew Cagney  <ac131313@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Update
-	definition of SOFTWARE_SINGLE_STEP_P to include empty parameter
-	list.
-
-2001-03-06  Kevin Buettner  <kevinb@redhat.com>
-
-	* Makefile.in, all-cfg.texi, annotate.texi, gdb.texinfo,
-	gdbint.texinfo, refcard.tex: Update/correct copyright notices.
-
-2001-02-21  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Signals): Document "ignore", "noignore", and "all".
-
-2001-02-11  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Environment): Document that `path' does not change
-	the value of PATH in GDB's own environment (it did in the past,
-	but that was changed on March 15, 1994).  Reported by Doug Evans
-	<dje@transmeta.com>.
-
-	* gdbint.texinfo: Fix up @itemize lists so that @item is alone on
-	its line.  Fix markup of commands and macros.  Add an Index node
-	and index entries.
-
-2001-01-23  J.T. Conklin  <jtc@redback.com>
-
-	* gdb.texinfo (Memory region attributes): New manual section.
-
-2001-01-04  Nicholas Duffek  <nsd@redhat.com>
-
-	* gdbint.texinfo (POP_FRAME): Document use by return_command.
-
-2000-12-25  Eli Zaretskii  <eliz@gnu.org>
-
-	* refcard.tex: Version and copyright fixed.  From Phil Edwards
-	<pedwards@disaster.jaj.com>.
-
-Thu Nov 30 16:57:19 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (ECOFF_REG_TO_REGNUM, DWARF_REG_TO_REGNUM,
-	DWARF2_REG_TO_REGNUM): Document.
-
-Mon Nov 20 21:29:35 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (Coding): Update current value of
-	--enable-build-warnings.  Mention --enable-gdb-build-warnings.
-
-2000-11-19  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Continuing and Stepping):  Fixed markup and typos,
-	as suggested by Dmitry Sivachenko <dima@Chg.RU>.
-
-2000-11-10  Christopher Faylor <cgf@cygnus.com>
-
-	* gdb.texinfo: Document new 'set step-mode' command.
-
-2000-10-16  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Contributors, MIPS Embedded): Minor spelling
-	changes from Dmitry Sivachenko <dima@Chg.RU>.
-
-2000-09-26  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Hooks): Document the new post-hook functionality.
-	From Steven Johnson <sbjohnson@ozemail.com.au>.
-
-2000-08-10  Mark Kettenis  <kettenis@gnu.org>
-
-	* gdbint.texinfo (Overall Structure): Spelling fix.
-
-2000-08-10  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdbint.texinfo (Target Architecture Definition): Document that
-	REGISTER_CONVERT_TO_VIRTUAL should only be called on a register
-	for which REGISTER_CONVERTIBLE returns a zero value.
-
-2000-07-08  Christopher Faylor <cgf@cygnus.com>
-
-	* Makefile.in (install-info): Find files to install in either the
-	build or source directories (adapted from Makefile.am).
-
-2000-07-07  Nicholas Duffek  <nsd@redhat.com>
-
-	* stabs.texinfo: Fix spelling errors.
-	(String Field): FILE-NUMBER starts from 0, not 1.
-
-2000-07-05  Eli Zaretskii <eliz@gnu.org>
-
-	* refcard.tex: Remove \centerline from the blurb.  Patch from
-	Brian Youmans.
-
-2000-06-25  Eli Zaretskii <eliz@gnu.org>
-
-	* Makefile.in (install-info): Support installation from outside of
-	the source directory.  Reported by Mark Harig
-	<markh@frazier.landmark.com>.
-
-2000-06-20  J.T. Conklin  <jtc@redback.com>
-
-	* gdb.texinfo: Fix typo, $bpnum is set to last breakpoint number.
-
-Fri May 26 15:55:33 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* Makefile.in (pdf, gdbint.pdf, gdb.pdf, stabs.pdf): New targets.
-	Generate using pdftex.
-	(PDFTEX): Define.
-	(STAGESTUFF, maintainer-clean realclean): Add *.pdf.
-	(gdb.texinfo, gdbint.texinfo, stabs.texinfo): When TeX insert the
-	@contents at the start.
-
-2000-05-24  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: Remove duplicate @syncodeindex.  From Brian
-	Youmans.
-
-Wed May 24 21:27:58 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	From Brian Youmans:
-	* gdb.texinfo: Fix ``et al.''.
-
-Tue May 23 22:57:41 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* Makefile.in (refcard.dvi): Remove quotes around REFEDITS in for
-	loop.
-
-2000-05-19  Jimmy Guo  <guo@cup.hp.com>
-
-	* configure: Regenerate.
-
-2000-05-17  Eli Zaretskii  <eliz@gnu.org>
-
-	* Makefile.in (install-info): Run install-info on installed Info
-	files.
-
-Fri May 12 20:18:04 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdb.texinfo: Add Stan Shebs, et.al. as authors.  Mention
-	Andrew Cagney.
-
-2000-05-09  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo: Proofreading changes from Brian Youmans.
-
-2000-05-01  Nick Duffek  <nsd@cygnus.com>
-
-	* gdb.texinfo (Command Files): Mention -x, use @enumerate for
-	startup sequence, minor edits.
-
-2000-05-01  Eli Zaretskii  <eliz@gnu.org>
-
-	* annotate.texi: Remove "@syncodeindex fn cp", it causes grief in
-	TeX.
-
-	* gdb.texinfo: Add "@syncodeindex fn cp".  Convert all entries
-	"@kindex f" into "@kindex f (foo)", otherwise we get index entries
-	like `n' and `s' which look weird.  Convert some of the @kindex to
-	@vindex, when they refer to variables, not commands.
-
-Sat Apr 29 17:01:04 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (Hints): Do not use @value{GDBN in @nodes.
-
-2000-04-23  Eli Zaretskii  <eliz@gnu.org>
-
-	* Makefile.in (GDBMI_DIR): New variable.
-	(SET_TEXINPUTS): Add $(GDBMI_DIR).
-	(SFILES_DOC): Add $(GDBMI_DIR)/gdbmi.texinfo.
-	(gdbmi.texinfo): New target, for texi2roff.
-	(gdb.me, gdb.ms, gdb.mm): Depend on gdbmi.texinfo.
-	(gdb.info, gdb_toc.html): Add "-I ${GDBMI_DIR}".
-
-	* gdb.texinfo (Top): Add GDB/MI to the main menu and @include
-	gdbmi.texinfo.
-	(Mode Options): Add xref to GDB/MI docs and remove a FIXME
-	comment.
-
-2000-04-17  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
-
-	* gdb.texinfo (Files): Update description of add-symbol-file
-	command.
-
-2000-04-17  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Porting GDB): Don't use @value in the node name, it
-	prevents the build (and is generally a Bad Idea).
-
-2000-04-17  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Protocol): Prevent makeinfo from complaining about
-	a comma inside @var.
-	(Command Files): Index markup changes from Dmitry Sivachenko
-	<dima@Chg.RU>.
-
-2000-04-16  Eli Zaretskii  <eliz@gnu.org>
-
-	* Makefile.in (LN_S): Define.
-	(gdb-cfg.texi, gdb.dvi, links2roff, inc-hist.texinfo): Don't
-	invoke "ln -s" unless it is known to work.
-
-	* configure.in (AC_PROG_LN_S): Add.
-
-2000-04-14  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (Pointers Are Not Always Addresses): New manual
-	section.
-	(Target Conditionals): Document ADDRESS_TO_POINTER,
-	POINTER_TO_ADDRESS.
-
-2000-04-11  Daniel Berlin  <dan@cgsoftware.com>
-
-	* gdbint.texinfo: Replaced GDB with @value{GDBN}, @include
-	gdb-cfg.texi to get the value.
-
-2000-04-10  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Fix
-	cross-references.
-
-2000-04-08  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (Using Different Register and Memory Data
-	Representations): New section.
-	(REGISTER_CONVERTIBLE, REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE,
-	REGISTER_VIRTUAL_TYPE, REGISTER_CONVERT_TO_VIRTUAL,
-	REGISTER_CONVERT_TO_RAW): Document.
-
-Mon Apr  3 19:16:32 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdb.texinfo (Protocol): Deprecate the sequence-id.  Add cindex
-	for acknowledgments.
-
-Tue Mar 28 18:28:45 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdb.texinfo (Protocol): Replace ``qfThreadExtraInfo'' with
-	qThreadExtraInfo.
-
-2000-03-28  J.T. Conklin  <jtc@redback.com>
-
-	* gdb.texinfo: Clarify which remote debug protocol commands are
-	required and which are optional.
-
-Tue Mar 28 16:06:22 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdb.texinfo: Revert remainder of Fri Mar 24 18:06:34 2000 Andrew
-	Cagney <cagney@b1.cygnus.com>.  Move @chapter and @node entries
-	back to annotate.texi, rluser.texinfo and inc-hist.texinfo.
-	* annotate.texi: Update.
-
-2000-03-28  Stan Shebs  <shebs@apple.com>
-
-	* gdb.texinfo: Update dates, bump to Eighth Edition (note
-	expectation of additional changes before release), update
-	ISBN, add copy of top-level menu for @ifhtml, remove explicit
-	node links, rephrase and/or shorten lines to fix formatting
-	problem in both regular and @smallbook formats.
-	* annotate.texi: Shorten lines in example, use smallexample
-	consistently everywhere.
-	* Makefile.in: Add comment about texinfo 4.0 html generation.
-	(SFILES_INCLUDED): Add annotate.texi.
-
-2000-03-27  Daniel Berlin  <dan@cgsoftware.com>
-
-	* gdb.texinfo (Debugging Output): Added new section, documenting
-	the "set/show debug" commands.
-
-Fri Mar 24 18:06:34 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* annotate.texi (Annotations): When GDBN omit @chapter and @node
-	entry.
-
-	* gdb.texinfo: Check for @ifinfo instead of @ifnottex.
-	(rluser.texinfo, inc-hist.texinfo, annotate.texi): Add local
-	@chapter and @node entries.
-
-	* gdb.texinfo: Link all top-level nodes.
-
-Fri Mar 24 17:56:48 2000  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* Makefile.in (install-info): Create $(infodir) before installing
-	files.
-
-2000-03-23  Fernando Nasser  <fnasser@totem.to.cygnus.com>
-
-	From David Whedon <dwhedon@gordian.com>
-	* gdbint.texinfo : Added paragraphs about command deprecation.
-
-2000-03-22  Daniel Berlin  <dan@cgsoftware.com>
-
-      * gdb.texinfo: Add documentation for the apropos command.
-
-2000-03-20  Michael Snyder  <msnyder@cleaver.cygnus.com>
-
-	* gdb.texinfo: Add new queries ThreadInfo and ThreadExtraInfo.
-
-2000-03-20  Michael Snyder  <msnyder@cleaver.cygnus.com>
-
-	* gdb.texinfo: Add white space to prevent overprinting in
-	two places.
-
-2000-03-17  Stan Shebs  <shebs@apple.com>
-
-	* gdb.texinfo: Many minor changes from Dmitry Sivachenko
-	<dima@Chg.RU>, also clarification of allowed content for
-	string constants.
-
-2000-03-16  Eli Zaretskii <eliz@gnu.org>
-
-	* gdb.texinfo (main menu): Add Annotations.
-	(File Options): Add @cindex entries for each command-line option.
-	Document --epoch, --annotate, --async, --interpreter, --write,
-	--statistics, and --version.
-
-	* annotate.texi: Convert to a chapter.  Use @value{GDBN} instead
-	of GDB.
-
-2000-02-23  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo (FUNCTION_START_OFFSET): Document.
-
-2000-02-22  Jim Blandy  <jimb@redhat.com>
-
-	* gdbint.texinfo: Document COERCE_FLOAT_TO_DOUBLE --- the new form.
-
-2000-02-15  Jason Molenda  (jsm@bugshack.cygnus.com)
-
-	* Makefile.in (diststuff): New target.
-
-2000-02-15  Kevin Buettner  <kevinb@redhat.com>
-
-	* agentexpr.texi: Fix wording regarding Intel's IA-64
-	architecture.  [From Jim Wilson.]
-
-2000-01-16  Tom Tromey  <tromey@cygnus.com>
-
-	* gdb.texinfo (Breakpoints): Mention breakpoint ranges.
-	(Delete Breaks): Mention range arguments.
-	(Disabling): Likewise.
-
-2000-01-05  Dmitry Sivachenko <dima@Chg.RU>
-
-	* gdb.texinfo:  Wrap "ASCII" in @sc{}; clarify a few sentences.
-
-Wed Dec  8 19:53:08 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (FRAME_CHAIN_VALID): Add the generic frame-chain
-	valid functions.
-
-1999-11-05  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo: Clarify regular expressions used in rbreak.
-
-1999-10-15  Kevin Buettner  <kevinb@cygnus.com>
-
-	* gdbint.texinfo (MEMORY_INSERT_BREAKPOINT,
-	MEMORY_REMOVE_BREAKPOINT):  Document.
-
-Thu Oct 14 21:17:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdb.texinfo (remote): Document how GDB ignores the qOffsets BSS
-	offset re-using the DATA offset instead.
-
-1999-10-11  Jim Kingdon  <kingdon@redhat.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Add PARM_BOUNDARY.
-
-1999-10-05  Stan Shebs  <shebs@andros.cygnus.com>
-
-	From Dmitry Sivachenko <demon@gpad.ac.ru>:
-	* gdb.texinfo: Use GDBP and GDBN everywhere, fix a couple other
-	typos.
-
-	* gdb.texinfo: Various minor wording and formatting improvements,
-	mentions of additional command-line options.
-
-1999-09-30  Fred Fish  <fnf@cygnus.com>
-
-	* gdb.texinfo:  Document additional forms of specifying section
-	names and addresses for the add-symbol-file command.
-
-1999-09-14  Michael Snyder  <msnyder@cleaver.cygnus.com>
-
-	* gdbint.texinfo: Fix typo, add the word "have".
-
-1999-09-14  Jim Blandy  <jimb@cris.red-bean.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Document the
-	SKIP_PERMANENT_BREAKPOINT macro.
-
-1999-09-07  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo: Fiks speling errers.
-
-	* gdb.texinfo: Fix uses of @multitable.
-
-	From Eli Zaretskii  <eliz@gnu.org>:
-	* gdb.texinfo: Include details specific to DOS host, clarify
-	some confusing language, fix @ref/@xref/@pxref usages, add
-	comments about using with optimization, add more indexing,
-	fix info about disassembly-flavor.
-
-Tue Sep  7 09:11:24 1999  Kevin Buettner  <kevinb@cygnus.com>
-
-	* gdbint.texinfo (IN_SOLIB_DYNSYM_RESOLVE_CODE,
-	SKIP_SOLIB_RESOLVER): Define.
-
-Fri Sep  3 18:05:14 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdb.texinfo (Protocol): Review.  Add tables describing ``q'' and
-	``g'' packets.
-
-1999-08-30  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo: Create a new "Configurations" chapter with
-	platform-specific info, inline remote.texi and move sections of it
-	into the new chapter, move bits about info proc, heuristic search,
-	and register stack into the new chapter.
-	* remote.texi: Remove, now part of gdb.texinfo.
-	* Makefile.in (SFILES_INCLUDED): Remove ref to remote.texi.
-
-1999-08-27  Jason Molenda  (jsm@bugshack.cygnus.com)
-
-	* gdbint.texinfo (GDB_TARGET_IS_SUN3, GDB_TARGET_IS_SUN386,
-	GDB_TARGET_IS_MACH386): These kludges have gone away.
-
-Wed Aug 25 10:47:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (Target Architecture Definition): Mention
-	TDEPLIBS.
-
-1999-08-20  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo: Remove remaining "HPPA" conditionals, rewrite
-	surrounding text to fit HP-UX bits into general info.
-	(HPPA-cfg.texi): Remove, no longer useful.
-
-	* gdb.texinfo: Remove explicit links from @node lines, remove
-	HP-added "Detailed Node Listing" from main menu which confuses
-	things.
-
-	From Dmitry Sivachenko <dima@Chg.RU>:
-	* gdb.texinfo: Use @value{GDBN} instead of plain GDB, fix grouping
-	in description of `set environment'.
-
-1999-08-17  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdbint.texinfo: Update coding standard to allow pure ANSI/ISO C.
-
-1999-08-12  Ben Elliston  <bje@cygnus.com>
-
-	* gdbint.texinfo (Breakpoint Handling): Add missing words.
-
-1999-08-10  Eli Zaretskii  <eliz@gnu.org>
-
-	* gdb.texinfo (Set Watchpoints): Explain some subtleties about
-	watch, awatch, and rwatch.  Explain why the latter two cannot be
-	set as software watchpoints.  Document that watchpoints for local
-	variables are deleted when the debuggee terminates.
-
-Wed Aug 11 13:18:14 1999  Andrew Cagney  <cagney@amy.cygnus.com>
-
-	* remote.texi (Protocol): Further clarification of the "qRcmd"
-	packet.  Allow E.. response packet.  "qRcmd" packet is no longer
-	reserved.
-
-1999-08-10  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
-
-	* Makefile.in: Rename inc-hist.texi to inc-hist.texinfo.
-	* gdb.texinfo: Ditto.
-
-1999-08-06  Tom Tromey  <tromey@cygnus.com>
-
-	* gdb.texinfo (KOD): New node.
-
-Fri Aug  6 17:05:48 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* remote.texi (Rcmd): Fix minor formatting typos.
-
-Thu Aug  5 17:57:41 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* remote.texi (protocol qRcmd): Allow ``OK'' and ``O...'' response
-	packets.
-
-1999-07-14  Jim Blandy  <jimb@zwingli.cygnus.com>
-
-	* gdbint.texinfo (PREPARE_TO_PROCEED, ADDR_BITS_REMOVE): Doc
-	fixes.
-
-Tue Jun 29 11:43:55 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (SAVE_DUMMY_FRAME_TOS): Define.
-
-Fri Jun 25 11:47:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* remote.texi (Communication Protocol): ``v'' is in use. Fix
-	numerous formatting errors.  Clarify ``i''.  Mark ``i'', ``Z'',
-	``z'' and ``qRcmd'' as draft instead of reserved.  Identify
-	packets that are not supported on all hosts. Expand examples.
-	Spell check.
-
-1999-06-24  Jason Molenda  (jsm@bugshack.cygnus.com)
-
-	* Makefile.in: Recognize html, install-html.  Add targets
-	to build HTML versions of documentation via texi2html.
-
-Thu Jun 24 15:59:03 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdbint.texinfo (Testsuite): New chapter, information about the
-	testsuite.
-
-Fri Jun 25 02:40:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* remote.texi (Communication Protocol): Rewrite.
-
-Thu Jun 24 16:59:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* stabs.texinfo: Fix uses of xref.
-
-Thu Jun 17 17:23:25 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdbint.texinfo: Add an anti-printf exhortation, and update the
-	info about patch submission.
-
-Mon Jun  7 15:49:40 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	From Per Bothner  <bothner@cygnus.com>:
-	* gdb.texinfo: Document Chill support.
-
-Fri Jun  4 16:58:22 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (SP_REGNUM, FP_REGNUM, PC_REGNUM): Add reference
-	to corresponding TARGET_READ_reg TARGET_WRITE_reg macros.
-	Document that the value should be greater-than or equal-to zero.
-	(NO_STD_REGS): Document. Deprecate.
-
-Tue Jun  1 15:04:15 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (TARGET_COMPLEX_BIT, TARGET_DOUBLE_COMPLEX_BIT):
-	Document that these are not used.
-
-Thu May 27 09:28:15 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (EXTRACT_STRUCT_VALUE_ADDRESS_P): Document.
-
-Mon May 24 10:07:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (FRAME_NUM_ARGS): Update definition.  Parameter
-	numargs was dropped.
-
-Thu May 20 12:26:59 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (FRAMELESS_FUNCTION_INVOCATION): Update.
-
-Tue Apr 27 19:14:20 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (SKIP_PROLOGUE, SKIP_PROLOGUE_FRAMELESS_P):
-	Update.
-
-Thu Apr 22 13:07:37 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (USE_GENERIC_DUMMY_FRAMES): Document.
-	(GET_SAVED_REGISTER): Update, not just the a29k uses this.
-
-Wed Apr 21 13:59:01 1999  Dave Brolley  <brolley@cygnus.com>
-
-	* gdbint.texinfo: Fix typos: $ -> @.
-
-Tue Apr 20 11:59:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (REGISTER_NAMES, BREAKPOINT, BIG_BREAKPOINT,
-	LITTLE_BREAKPOINT, LITTLE_REMOTE_BREAKPOINT,
-	BIG_REMOTE_BREAKPOINT): Deprecate in favor of REGISTER_NAME and
-	BREAKPOINT_FROM_PC.
-
-Mon Apr 12 16:00:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (CALL_DUMMY_STACK_ADJUST_P,
-	CALL_DUMMY_STACK_ADJUST): Document.
-
-Thu Apr  8 17:23:15 1999  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (CALL_DUMMY_P, CALL_DUMMY_WORDS,
-	SIZEOF_CALL_DUMMY_WORDS, CALL_DUMMY): Define.
-
-1999-04-02  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdbint.texinfo (MAINTENANCE_CMDS): Remove ref, since it no
-	longer exists.
-
-Tue Mar  9 19:25:11 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo, remote.texi, all-cfg.texi, HPPA-cfg.texi: Remove
-	nearly all @ifset/@ifclear conditionals; nobody uses them, and
-	they make the manual source incomprehensible.
-	* h8-cfg.texi: Remove, hasn't been used in years.
-
-Thu Feb 11 18:00:59 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo: Update the credits.
-
-Mon Feb  8 17:33:57 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo: Fix mistakes noticed in printout of last
-	draft, add Alpha to discussion of heuristic fence post.
-
-Fri Feb  5 17:20:00 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo, remote.texi: Many changes; update to Seventh
-	Edition, merge some HP changes into mainline, describe some
-	previously undocumented features, describe more of the target
-	commands available, eliminate obsolete section on renamed
-	commands.
-	* all-cfg.texi, HPPA-cfg.texi: Remove some obsolete conditionals.
-
-Wed Jan 20 17:47:45 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo: Make many HPPA conditionals unconditional,
-	including catchpoint description, since now on for all configs.
-	* all-cfg.texi: @clear HPPA, since is mainly for very HP-specific
-	specializations.
-
-Thu Jan 14 17:10:12 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* Makefile.in (GDBvn.texi): Fix match expression to work with
-	current format of VERSION in gdb/Makefile.in.
-	* gdb.texinfo: Fix node ref to match new readline.
-
-Wed Jan 13 10:38:40 1999  Edith Epstein  <eepstein@sophia.cygnus.com>
-
-	* gdb.texinfo: Changes made as part of a project to merge in
-	  changes made by HP. Documentation makes extensive use of
-	  @ifclear HPPA and @ifset HPPA. The HP manual omits doumentation
-	  on remote debugging. There are differences in documentation
-	  (HP vs.  non-HP) on C++ support (aCC vs. gnu gcc++). Also,
-	  the HP manual discusses catchpoints, hardware watchpoints, and
-	  some HPUX specific limitations for shared library support.
-
-	  There are also a number of @node changes.
-
-1999-01-12  Jason Molenda  (jsm@bugshack.cygnus.com)
-
-	* gdbint.texinfo (Formatting): Disambiguate a sentence.
-	(C Usage): Same.
-
-Wed Jan  6 11:55:34 1999  David Taylor  <taylor@texas.cygnus.com>
-
-	The following changes were made by Edith Epstein
-	<eepstein@cygnus.com> as part of a project to merge in changes
-	made by HP.
-
-	* HPPA-cfg.texi: new file.
-
-	* all-cfg.texi: set HPPA for HP PA-RISC targets.
-
-	* refcard.tex: change documentation about catch.
-	  removed info catch.
-
-Mon Jan  4 18:29:18 1999  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdbint.texinfo: Expand on GDB's coding standards,
-	specify the use of arg names with prototypes.
-
-1998-12-14  J.T. Conklin  <jtc@redbacknetworks.com>
-
-	* gdb.texinfo: Fix tipo.
-
-Sun Dec 13 10:27:59 1998  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo: Document TARGET_BYTE_ORDER_DEFAULT and
-	TARGET_BYTE_ORDER_SELECTABLE_P.
-
-Thu Dec 10 16:07:09 1998  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (FRAME_FIND_SAVED_REGS): Document.
-
-1998-12-09  Jim Blandy  <jimb@zwingli.cygnus.com>
-
-	* agentexpr.texi: New file.
-
-Wed Dec  9 21:13:57 1998  Andrew Cagney  <cagney@chook>
-
-	* gdbint.texinfo (REGISTER_NAME): Replace REGISTER_NAMES.
-
-1998-12-03  J.T. Conklin  <jtc@redbacknetworks.com>
-
-	* remote.texi: Changed wording that implied that the GDB remote
-	protocol caches register values instead of GDB itself.
-
-Tue Dec  1 17:45:43 1998  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdbint.texinfo: Add some info about symbol readers.
-	(CHILL_PRODUCER, etc): Comment out descriptions, not useful.
-	(IN_SOLIB_CALL_TRAMPOLINE): Rename info from IN_SOLIB_TRAMPOLINE.
-	(IN_SOLIB_RETURN_TRAMPOLINE): Describe.
-	(KERNEL_DEBUGGING, MIPSEL): No info about these, remove.
-
-Mon Nov 30 11:32:21 1998  Andrew Cagney  <cagney@chook>
-
-	* gdbint.texinfo (FRAME_CHAIN_VALID_ALTERNATE):
-
-Sat Nov 28 13:45:53 1998  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (INNER_THAN): Update, now takes parameters.
-
-Fri Nov 27 12:39:45 1998  Andrew Cagney  <cagney@chook>
-
-	* gdbint.texinfo (NO_SINGLE_STEP): Replace with
-	SOFTWARE_SINGLE_STEP_P and SOFTWARE_SINGLE_STEP.
-
-Wed Oct 14 10:02:40 1998  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo: Fix minor typos.
-
-Wed Sep 30 18:03:19 1998  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdbint.texinfo: Complete overhaul.  Group descriptions more
-	logically, add more info on generic algorithms, remove much
-	obsolete and/or wrong material.
-
-Fri Jul 24 17:51:38 1998  Ian Lance Taylor  <ian@cygnus.com>
-
-	* stabs.texinfo (Method Type Descriptor): Expand and correct.
-
-Mon May  4 10:37:12 1998  Brian Youmans (3diff@gnu.org)
-
-	* refcard.tex:  Copyright, address updates.
-
-Tue Apr 21 18:09:56 1998  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo (EDITION, DATE): Update and change to use ordinals
-	for the edition instead of confusing GDB-version-like numbers.
-
-Mon Apr 13 14:05:00 1998  Fred Fish  <fnf@cygnus.com>
-
-	* gdb.texinfo (hbreak, watch): Fix typo, "date" -> "data".
-
-Thu Apr  2 16:52:44 1998  Jason Molenda  (crash@bugshack.cygnus.com)
-
-	* LRS: Reformat a bit to keep text under 80 columns.
-
-Thu Apr  2 16:10:36 1998  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo: Add some credits, mention bug monitor.
-	* remote.texi: Mention mips monitor targets.
-	* gdbint.texinfo: Describe SP_REGNUM, STEP_SKIPS_DELAY.
-
-Mon Feb  2 17:13:03 1998  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdbint.texinfo: Remove obsolete mentions of pinsn.c and opcode.h
-	files, finish sorting of host vs target vs native macros, describe
-	some more of them.
-
-Tue Jan 13 16:44:50 1998  Fred Fish  <fnf@cygnus.com>
-
-	* gdbint.texinfo (Host Conditionals): Document change from
-	using NO_MMALLOC to it's inverse, USE_MMALLOC.
-
-Mon Nov 24 13:55:21 1997  Andrew Cagney  <cagney@b1.cygnus.com>
-
-	* gdbint.texinfo (Host Conditionals): Document
-	PRINTF_HAS_LONG_DOUBLE, SCANF_HAS_LONG_DOUBLE, HAVE_LONG_DOUBLE.
-
-Fri Jul  4 14:52:31 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* gdbint.texinfo (Host Conditionals): Add CRLF_SOURCE_LINES.
-	Document LSEEK_NOT_LINEAR.
-
-Tue Mar 25 14:44:09 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* stabs.texinfo (Stab Section Basics): Make it clear that only
-	some versions of the GNU linker remove the leading N_UNDF symbol.
-
-Thu Feb 27 17:45:19 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* stabs.texinfo (String Field): Document type number pairs here,
-	instead of in the Sun specific section.
-	(Include Files): The GNU linker supports the N_BINCL
-	optimization.  Clarify the N_BINCL value, and what it is used
-	for.
-	(Procedures): Document N_FUN with an empty string to mark the end
-	of a function.
-	(Typedefs): Mention that Sun compilers may use N_GSYM for a type.
-	(Sun Differences): Remove this node, as the information is now
-	elsewhere in the main document.
-	(Stab Section Basics): Mention that the GNU linker may optimize
-	stabs and remove the leading N_UNDF symbol.
-
-Mon Dec  9 12:23:32 1996  Roland Pesch  <roland@wrs.com>
-
-	* gdb.texinfo, refcard.tex: Restore author credit
-
-Wed Oct  2 22:01:36 1996  Fred Fish  <fnf@fishfood.ninemoons.com>
-
-	* gdbint.texinfo (SIGTRAMP_START, SIGTRAMP_END): Update
-	documentation to account for START and END macros taking
-	one arg.
-
-Thu Aug 22 17:59:03 1996  Fred Fish  <fnf@cygnus.com>
-
-	From: Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
-	* gdb.texinfo (Frames): Fix typo.
-
-Tue Jul 23 10:06:20 1996  Fred Fish  <fnf@cygnus.com>
-
-	* gdbint.texinfo (NO_SINGLE_STEP): Document that single_step takes
-	a target_signal as arg type, not a pid.
-
-Fri Jul 12 11:10:05 1996  Stu Grossman  (grossman@critters.cygnus.com)
-
-	* gdb.texinfo:  Document `set assembly-language'.
-
-Thu Jul 11 13:50:28 1996  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* remote.texi: Update list of stubs in the GDB distribution.
-
-Fri Jul  5 15:38:54 1996  Fred Fish  <fnf@cygnus.com>
-
-	* gdbint.texinfo (NO_MMCHECK): Renamed from NO_MMALLOC_CHECK.
-	Also document that some systems can use mmalloc but must define
-	this if their C runtime allocates memory that is later freed.
-	(MMCHECK_FORCE): Document new macro.
-
-Fri Jun 28 22:17:10 1996  Dawn Perchik  <dawn@cygnus.com>
-
-	* remote.texi: Add documentation for target Sparclet.
-
-Mon Jun 24 18:12:22 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)
-
-	* Makefile.in (srcdir, VPATH, prefix, infodir, INSTALL,
-	INSTALL_PROGRAM, INSTALL_DATA): Use autoconf set values.
-	* configure.in: Rewritten for autoconf.
-	* configure: New.
-
-Mon Jun 17 10:43:41 1996  Fred Fish  <fnf@cygnus.com>
-
-	* Makefile.in (DVIPS): New define, set to dvips.
-	(dvi): Add stabs.dvi.
-	(ps): New target.
-	(all-doc): Depend on info, dvi, and ps targets.
-	(STAGESTUFF): Add *.ps and *.dvi files.
-	(clean-info, clean-dvi): Remove.
-	(mostlyclean): Does not depend upon clean-info or clean-dvi,
-	rules completely rewritten.
-	(maintainer-clean): Remove clean-info and clean-dvi
-	dependencies and put their actions in the rules.
-	(gdb.ps): New target
-	(gdb.dvi, gdbgui.dvi, gdbint.dvi, stabs.dvi): Remove
-	intermediate TeX files, whether they have 2 or 3 character
-	extensions.
-	(gdbint.ps): Add target and rules.
-	(gdb-internals): Delete unused target.
-	(Makefile): Depends upon config.status also.
-
-Sat Mar 30 15:46:58 1996  Fred Fish  <fnf@cygnus.com>
-
-	* gdbint.texinfo (CC_HAS_LONG_LONG): Clarify when/how this is
-	set.
-
-Sat Mar 16 15:10:20 1996  Fred Fish  <fnf@cygnus.com>
-
-	From Peter Schauer <Peter.Schauer@Regent.E-Technik.TU-Muenchen.DE>
-	* gdb.texinfo (Expressions): Fix erroneous array constant example.
-
-Sat Mar 16 13:28:45 1996  Fred Fish  <fnf@cygnus.com>
-
-	* gdb.texinfo: Add missing "@bullet" to some "@itemize" commands.
-
-Sat Feb 10 03:28:36 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
-
-	* gdb.texinfo (Print settings):  Document
-	`set/show print static-members' commands.
-
-Wed Jan 10 14:16:37 1996  Fred Fish  <fnf@cygnus.com>
-
-	* gdbint.texinfo (Native): Document name change, coredep.c to
-	core-aout.c.
-
-Wed Dec 13 12:35:28 1995  Ian Lance Taylor  <ian@cygnus.com>
-
-	* stabs.texinfo (Include Files): Document the values the SunOS4
-	linker creates for N_BINCL/N_EINCL/N_EXCL stabs.
-
-Fri Dec  8 21:08:44 1995  Fred Fish  <fnf@cygnus.com>
-
-	* gdbint.texinfo (Releases): Change gdb.tar.Z to gdb.tar.gz.
-	Fix typo.
-
-Fri Dec  1 11:07:50 1995  Fred Fish  <fnf@cygnus.com>
-
-	* gdbint.texinfo (Releases): Make "gdb.tar.gz" rather than
-	"gdb.tar.Z".
-
-Wed Sep 20 13:14:10 1995  Ian Lance Taylor  <ian@cygnus.com>
-
-	* Makefile.in (maintainer-clean): New target, synonym for
-	realclean.
-
-Thu Aug  3 10:45:37 1995  Fred Fish  <fnf@cygnus.com>
-
-	* Update all FSF addresses except those in COPYING* files.
-
-Wed Jul 19 18:43:03 1995  Stan Shebs  <shebs@andros.cygnus.com>
-
-	From Richard Earnshaw (rearnsha@armltd.co.uk):
-	* gdb.texinfo (convenience variables): Document $_exitcode.
-	(quit): Document optional expression to use as exit code.
-
-Thu Jun 22 21:27:33 1995  Victoria Mixon  <victoria@cygnus.com>
-
-	* gdb.texinfo, remote.texi: Brought up to date with various
-	GDB changes.
-
-Tue Jun 20 14:35:38 1995  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdb.texinfo: Update dates and versions, fix comments about
-	hardware watchpoints in future releases and about the
-	sharedlibrary command.
-
-Mon May  8 09:30:36 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Remove node `XCOFF differences'.  Describe value of
-	C_FUN stab.  Other cleanups.
-
-Wed Apr 19 07:02:19 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* remote.texi (Bootstrapping): Clarify that flush_i_cache is only
-	for the sparc stub.
-
-Tue Apr 11 11:41:49 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* annotate.texi: Clarify which addresses have differing formats
-	depending on the language and which do not.
-
-Tue Mar 28 16:56:22 1995  J.T. Conklin  <jtc@rtl.cygnus.com>
-
-	* remote.texi (NetWare): Changed example to use BOARD= instead of
-	  NODE= argument to reflect correspoding change to gdbserve.nlm.
-
-Fri Mar 17 06:47:02 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Negative Type Numbers): Mention the fact that
-	GDB, as well as AIX dbx, supports the size type attribute.
-
-Thu Mar 16 12:11:32 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Negative Type Numbers): Document types -31 to -34.
-
-Mon Mar 13 16:49:13 1995  Per Bothner  <bothner@kalessin.cygnus.com>
-
-	* gdb.texinfo (Define):  Document $arg0... arguments to commands,
-	and new 'if' and 'while' commands.
-
-Fri Feb 17 15:24:35 1995  Per Bothner  <bothner@kalessin.cygnus.com>
-
-	* gdb.texinfo (Artificial arrays):  Note use of coerce-to-array-type.
-
-Wed Feb 15 11:59:18 1995  J.T. Conklin  <jtc@rtl.cygnus.com>
-
-	* all-cfg.texi: New flag, GDBSERVE, for NetWare's gdbserve.nlm.
-	* remote.texi (NetWare): New node, how to use gdbserve.nlm on
-	  NetWare targets.  Mostly stolen from the Server node.
-
-Fri Feb 10 20:20:08 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Setting): Talk about the language of a source file
-	versus the working language.  The old documentation did not match
-	what GDB did.
-
-Wed Feb  1 20:26:36 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Source Files): Document N_SO used to mark the end
-	of a source file.
-
-Mon Jan 23 14:23:37 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Processes): New node.
-
-Tue Jan 17 14:09:03 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>
-
-	* remote.texi: Update documentation of set/show mipsfpu.
-
-Fri Jan  6 17:17:28 1995  Stan Shebs  <shebs@andros.cygnus.com>
-
-	* gdbgui.texinfo: New file, manual for GUI (gdbtk) users.
-	* Makefile.in (gdbgui.dvi, gdbgui.info): New actions.
-
-Sun Sep  4 16:47:21 1994  Stan Shebs  (shebs@andros.cygnus.com)
-
-	* gdbint.texinfo: Removed mentions of some incorrectly placed and
-	obsolete conditionals, described some others.
-
-Mon Aug  1 15:42:39 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdbint.texinfo: Remove references to BROKEN_LARGE_ALLOCA and
-	SET_STACK_LIMIT_HUGE; they were removed from GDB 14 May 1994.
-
-Mon Aug  1 15:12:02 1994  Stan Shebs  (shebs@andros.cygnus.com)
-
-	* gdbint.texinfo: Put regex conditionals in their own table.
-
-Tue Jul 26 18:32:52 1994  Stan Shebs  (shebs@andros.cygnus.com)
-
-	* gdbint.texinfo: Removed mentions of many obsolete conditionals,
-	described or fixed the descriptions of many others.
-
-Sun Jul 17 14:14:03 1994  Stan Shebs  (shebs@andros.cygnus.com)
-
-	* gdb.texinfo: Add some more credits.
-	* gdbint.texinfo: Capitalize GDB consistently, describe some
-	macros and remove some.
-
-Thu Jul 14 18:43:17 1994  Stan Shebs  (shebs@andros.cygnus.com)
-
-	* gdbint.texinfo: Removed mentions of many incorrectly placed and
-	obsolete conditionals, described some others.
-
-Tue Jul 12 12:23:15 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
-
-	* gdb.texinfo (help targets):  Changed to `help target', which
-	is the correct gdb command.
-
-Wed Jun 22 18:00:51 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* annotate.texi (TODO): New node, for keeping track of annotations
-	suggested but not yet implemented.
-
-Wed Jun  1 16:10:45 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Statics): Value of xcoff C_BSTAT points to
-	another symbol, it is not the address itself.
-
-Thu May  5 20:23:36 1994  Stan Shebs  (shebs@andros.cygnus.com)
-
-	* stabs.texinfo (Stab Section Basics): Add comment about alignment
-	of stabs-in-coff sections.
-
-Wed May  4 06:26:11 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* annotate.texi: Change edition to 0.5 and date to May 1994.
-	Add index.
-	(Frames): New node, for frame annotation.
-	(Displays): New node, for display annotation.
-
-	* remote.texi (MIPS Remote): Say that set timeout doesn't apply
-	when waiting for your program to stop.
-
-Fri Apr 29 18:24:46 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* annotate.texi (Breakpoint Info): Document annotation of header
-	fields and record annotation.
-
-Thu Apr 28 07:44:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* annotate.texi: New file, to document annotations.
-
-Thu Apr 21 14:20:51 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* Makefile.in (clean): Don't remove GDBvn.texi (apparently on Jan
-	16 I meant to make this change but did not).  Do remove gdb-cfg.texi.
-
-Wed Apr 20 11:22:48 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Stab Section Basics): Say what is in .stab
-	section, and say n_strx field is compilation unit relative.
-	* stabs.texinfo: Don't use @code for a.out when it is the name of
-	an object file format.
-
-Wed Apr 13 20:29:54 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
-
-	* gdb.texinfo: Refer to file names, not path names, per rms
-	convention.
-	(Arguments): Fix typo.
-
-Thu Mar 24 08:09:12 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Global Variables): Talk about stabs in files
-	where variables are referenced, but not defined.
-
-Wed Mar 23 07:16:36 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Move stuff on @ and # type descriptors from node
-	Cplusplus to new nodes Member Type Descriptor and Method Type
-	Descriptor.  Re-write stuff for #.
-
-Wed Mar 16 08:20:19 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Print Settings): Don't document "set print
-	fast-symbolic-addr off".  The bug which it worked around was fixed
-	on 25 Feb 94 in coffread.c, so I'm nuking the command.
-
-	* stabs.texinfo (Alternate Entry Points): New node, rewritten from
-	N_ENTRY node.
-
-	* stabs.texinfo (Type Descriptors): Add 'Y' type descriptor.
-
-Tue Mar 15 08:43:02 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdbint.texinfo (Host Conditionals, Target Conditionals): Remove
-	references to ieee-float.c.
-
-Fri Mar 11 08:09:40 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Set Breaks): Update documentation for tbreak to
-	match what the code actually does.
-
-Wed Mar  9 19:43:05 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Symbol Descriptors): Add OS9000 symbol descriptor s.
-
-Tue Mar  1 17:04:43 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
-
-	* stabs.texinfo (Type Descriptors): Add OS9000 type descriptors c,
-	i, and b.
-
-Wed Feb 23 10:44:18 1994  Jim Kingdon  (kingdon@rtl.cygnus.com)
-
-	* stabs.texinfo: Document N_RBRAC as function relative for COFF as
-	well as for ELF and SOM.  Unify the descriptions of ELF and SOM
-	as "stabs in sections" rather than just saying "ELF and SOM".
-	Also make that stuff apply to COFF.
-
-Fri Feb 18 08:25:58 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Formatting Documentation): Change GhostScript to
-	Ghostscript.
-
-Fri Feb  4 06:31:31 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Continuing and Stepping): When talking about "step"
-	versus functions without line numbers, also mention stepping into
-	them as well as "step" when you are in them.  Tell the user how to
-	deal with the situation.  Add comment about "debugging information".
-
-Thu Feb  3 11:39:59 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Enumerations): Document restriction on where
-	enumeration types can appear and still win with GDB.
-
-Wed Feb  2 11:29:17 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Negative Type Numbers): Document format for type
-	-16.
-
-Thu Jan 27 16:53:56 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Selection, Frame Info): Update information about
-	arbitrary frame specficiations.
-
-Wed Jan 26 15:31:57 1994  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo, remote.texi: general editing pass prior to Net release
-
-Tue Jan 25 12:12:04 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (String Field): Discuss continuing stabs with ?.
-
-Wed Jan 19 06:39:24 1994  David J. Mackenzie  (djm@thepub.cygnus.com)
-
-	* stabs.texinfo (Non-Stab Symbol Types): Mention N_SET* | N_EXT.
-
-Sun Jan 16 12:43:32 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Re-do stuff about C_BSTAT and move from XCOFF
-	Differences node to Statics node.
-	(Statics): Discuss XCOFF use of V symbol descriptor.
-
-	* Makefile.in: Remove refcard.dvi and GDBvn.texi in realclean,
-	not clean.
-
-Wed Jan 12 21:29:54 1994  John Gilmore  (gnu@cygnus.com)
-
-	* gdb.texinfo (Print Settings): Document `set print
-	fast-symbolic-addr' and improve the doc for some other
-	`set print's.
-
-Mon Jan  3 17:23:07 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (String Field): Talk about defining several type
-	numbers at once.
-	Fix lint regarding changing node ELF Transformations to
-	ELF and SOM Transformations.
-
-Fri Dec 31 00:42:43 1993  John Gilmore  (gnu@cygnus.com)
-
-	* stabs.texinfo:  Insert Peter Kessler's name as inventor (I think).
-
-Tue Dec 28 09:30:40 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Cross-References): `::' is for nested types only
-	within <>.
-	(Structures): Document static members.
-
-Mon Dec 27 13:55:04 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Document S type attribute.
-
-Sun Dec 26 20:46:36 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)
-
-	* stabs.texinfo: Add notes about stabs-in-som where appropriate.
-
-Fri Dec  3 19:13:19 1993  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Fix a few typos.
-
-Sun Nov 28 18:06:25 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo, remote.texi: formatting improvements
-
-	* gdb.texinfo (New Features): mention threads.
-	(Summary, C): fix xrefs in newly contributed text.
-	(Threads): index entries, clarifications, example
-	(passim): minor typos fixed, phrasing improvements
-
-	* remote.texi (Bootstrapping): rephrase text on ^C and add index
-	entries; (Server): explain use of gdbserver w/real-time systems,
-	add example of conflicting TCP port; (MIPS Remote) break up
-	running text into table, highlighting commands, and add example.
-
-Wed Nov 24 14:15:56 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* refcard.tex: avoid bad linebreaks even when REFEDITS=psrc.sed
-
-Fri Nov 12 16:10:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Nested Symbols): New node.
-	(String Field, Symbol Descriptors, Cross-References): Refer to it.
-
-Thu Nov 11 13:26:45 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Stabs in ELF): Clarify how Bbss.bss work with respect
-	to picking which Bbss.bss symbol to use, and (because there seems to
-	be no good way of doing it) re-write some of the text to make it
-	sound like Bbss.bss isn't such a great idea after all (as currently
-	designed).
-
-	* gdb.texinfo (C): In addition to saying people have to use g++ for
-	good results, say they have to use stabs.  Specifically say cfront
-	doesn't work well.
-	(Summary): Merge in information on Modula-2, Pascal, and Chill from
-	the gdb README.  Add xrefs to places where the support for the various
-	languages is described in detail.
-
-Mon Nov  8 11:47:34 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Clean up stuff about visibility and virtual
-	characters.
-
-	* stabs.texinfo (N_M2C): Cite Sun doc.
-
-Fri Nov  5 16:27:27 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo: updates re threads.
-	* remote.texinfo: avoid index entries starting with digits.
-
-Tue Nov  2 09:08:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Enumerations): Talk about large, negative and
-	octal values.  Clean up cross reference to type attributes.
-	(String Field): Say that GDB 4.11 supports size attribute.
-
-Sun Oct 31 13:31:10 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* remote.texi (VxWorks Remote): Clarify that rebuilding VxWorks kernel
-	is a mandatory step.  Make the stuff about that more concise.
-
-Wed Oct 27 00:25:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Class Names): New node.
-
-	* gdb.texinfo (Command Files): Explain order of init file reading.
-
-	* remote.texi (Bootstrapping): Talk about getting the serial driver
-	to deal with ^C sent by gdb to stop the remote system.
-
-Mon Oct 25 03:25:41 1993  Tom Lord  (lord@cygnus.com)
-
-	* libgdb.texinfo (I/O): incorporated better phrasing from rich.
-
-	* libgdb.texinfo (Defining Commands): made the DOC arg
-	to gdb_define_app_command a char * instead of char **
-	per a suggestion from kingdon.
-
-	* libgdb.texinfo: total rewrite from a different starting
-	premise.
-
-Wed Oct 20 18:07:44 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Local Variable Parameters): Re-write paragraph on
-	floats passed as doubles (to improve clarity).
-
-Tue Oct 19 14:21:18 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo (Source Path): index entries for $cwd, $pdir
-
-	* a4rc.sed: update to work with Andreas Vogel papersize params
-
-	* refcard.tex: use Andreas Vogel simplifications of papersize
-	params; remove useless version info; update copyright date.
-
-Tue Oct 19 10:46:22 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Symbols): Add class NAME to doc for ptype.
-
-Tue Oct 12 09:11:45 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Files): Say what address the load command loads it at.
-
-	* stabs.texinfo (Common Blocks): Minor cleanups.
-
-	* stabs.texinfo: Update ld stabs in elf relocation to reflect the fact
-	that Sun has backed away from the linker kludge and thus the relevant
-	issue is changes to the SunPRO tools, not the Solaris linker.
-
-	* stabs.texinfo (Traditional Integer Types): Clean up description
-	of octal bounds a little bit.  Document extra leading zeroes.
-
-Thu Oct  7 16:15:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Signaling): Update for symbolic symbol names
-	and add a section explaining the difference between the GDB
-	signal command and the shell kill utility.
-
-Wed Oct  6 13:23:01 1993  Tom Lord  (lord@rtl.cygnus.com)
-
-	* libgdb.texinfo: added `@' to braces that were unescaped.
-
-Mon Oct  4 10:42:18 1993  Tom Lord  (lord@rtl.cygnus.com)
-
-	* libgdb.texinfo: new file.  Spec for the gdb library.
-
-Sun Oct  3 15:26:56 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Include Files): Fix typo (start -> end).
-
-Thu Sep 30 18:24:56 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo, remote.texi: assorted small improvements, mostly
-	from Melissa at FSF's editing pass.
-
-Thu Sep 30 11:54:38 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo: Remove stuff about ar and 14 character filenames.
-	I believe this was fixed by the 13 Sep 89 change to print_frame_info.
-	Also, modern versions of ar like BSD 4.4 or SVR4 don't have this bug.
-
-Wed Sep 22 21:22:11 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* remote.texi (Bootstrapping): Discuss 386 call gates.
-
-Sat Sep 18 17:10:44 1993  Jim Kingdon  (kingdon@poseidon.cygnus.com)
-
-	* stabs.texinfo (Based Variables): New node.
-
-Thu Sep 16 17:48:55 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)
-
-	* stabs.texinfo (Negative Type Numbers): Re-write discussions of
-	names, sizes, and formats to suggest how not to lose.
-
-Sat Sep 11 09:35:11 1993  Jim Kingdon  (kingdon@poseidon.cygnus.com)
-
-	* stabs.texinfo (Methods): Fix typo.
-
-Fri Sep 10 06:34:20 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
-
-	* gdb.texinfo: Fix a few typos.
-
-Wed Sep  8 09:11:52 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo: Clarify how well it works with Fortran.
-
-	* stabs.texinfo (Stabs In ELF, Statics, ELF Transformations):
-	More on relocating stabs in ELF files.
-
-Tue Sep  7 13:45:02 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Stabs In ELF): Talk about N_FUN value.
-
-Mon Sep  6 19:23:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Local Variable Parameters): Talk about nameless
-	parameters on VAX.
-
-Fri Sep  3 17:06:08 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo: @up/@down -> @raisesections/@lowersections
-
-Fri Sep  3 12:04:15 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Make info author notice match the TeX author notice.
-
-Tue Aug 31 13:21:06 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
-
-	* stabs.texinfo: Initial-caps all words in node names and
-	non-trivial words in section names.
-
-Mon Aug 30 11:13:16 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Many minor cleanups.
-
-	* stabs.texinfo: Remove @deffn except from Expanded Reference node.
-
-Sat Aug 28 12:08:09 1993  David J. MacKenzie  (djm@edison.eng.umd.edu)
-
-	* stabs.texinfo: Remove full description of big example.
-	It's not really helpful; just use pieces of it where appropriate.
-	Add more Texinfo formatting directives (@samp, etc.).
-	Use @deffn to define stab types.
-	Eliminate some wordiness.  Break up some nodes.
-	Add an (alphabetized) index of symbol types.
-	Use consistent capitalization style in node and section names.
-
-Thu Aug 26 06:36:31 1993  Fred Fish  (fnf@deneb.cygnus.com)
-
-	* gdb.texinfo:  Change typo "Two two" to "The two".
-
-Sun Aug 22 12:15:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (XCOFF-differences): Remove references to
-	non-existent types N_DECL and N_RPSYM.
-
-	* stabs.texinfo (String Field): Say that type attributes bug is
-	fixed in GDB 4.10, since it is.
-
-	* stabs.texinfo: Clean up djm cleanups, and more cleanups of my own.
-
-Sat Aug 21 04:32:28 1993  David MacKenzie  (djm@cygnus.com)
-
-	* stabs.texinfo: Formatting cleanups.
-
-Fri Aug 20 20:49:53 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: When explaining the n_type of a stab, standardize
-	how we do it ('#' as a comment indicator, "36 is N_FUN" as text,
-	no tabs, use @r).
-	(Global Variables): Clean up.
-
-Tue Aug 17 15:57:27 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Stack Variables): Re-write.
-
-Mon Aug 16 21:20:08 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Stabs-in-elf): Talk about getting the start
-	addresses of a source file.  Also revise formatting.
-	Change "object module" or "object file" to "source file".
-	Various: Miscellaneous cleanups.
-
-Thu Aug 12 15:11:51 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Point to mangling info in gcc's gpcompare.texi.
-
-Tue Aug 10 16:57:49 1993  Stan Shebs  (shebs@rtl.cygnus.com)
-
-	* gdbint.texinfo: Removed many nonsensical machine-collected
-	host and target conditionals, described some of the remainder.
-
-Tue Aug 10 13:28:30 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdbint.texinfo (Getting Started): Use @itemize, not @table.
-
-	* gdbint.texinfo (Top): Add name to @top line, and re-write the
-	paragraph which follows.
-
-	* gdbint.texinfo (Host): Use @code not @samp for Makefile
-	variables.  Looks better and avoids overful hbox.
-
-Fri Jul 30 18:26:21 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Procedures): Improve stuff on nested functions.
-
-Thu Jul 29 15:10:58 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* remote.texi: (MIPS Remote) clearer doc for set/show timeout,
-	retransmit-timeout
-
-Thu Jul 29 13:16:09 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdbint.texinfo: Update statement about `some ancient Unix
-	systems, like Ultrix 4.0' to Ultrix 4.2.
-
-Wed Jul 28 15:26:53 1993  Roland H. Pesch  (pesch@el_bosque.cygnus.com)
-
-	* h8-cfg.texi, all-cfg.texi: new flag GDBSERVER
-
-	* Makefile.in: depend on remote.texi rather than gdbinv-s.texi
-
-	* remote.texi: (Server) New node on gdbserver.  (Remote Serial,
-	ST2000 Remote, MIPS Remote): mention `host:port' syntax for TCP.
-
-	* remote.texi: new name for former gdbinv-s.texi
-
-	* gdb.texinfo: use remote.texi rather than gdbinv-s.texi
-
-Wed Jul 28 08:26:24 1993  Ian Lance Taylor  (ian@cygnus.com)
-
-	* gdbinv-s.texi: Documented timeout and retransmit-timeout
-	variables for MIPS remote debugging protocol.
-
-Mon Jul 26 13:00:09 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Negative Type Numbers): FORTRAN LOGICAL fix.
-
-Tue Jul 20 16:30:41 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)
-
-	* Makefile.in (refcard.dvi): Use srcdir where necessary.
-
-Mon Jul 19 12:02:50 1993  Roland H. Pesch  (pesch@cygnus.com)
-
-	* gdb.texinfo: repair conditional bugs in text markup
-
-Fri Jul 16 18:57:50 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo, all-cfg.texi, h8-cfg.texi: introduce MOD2 switch
-	to select Modula-2 material.
-
-Thu Jul 15 13:15:01 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Cleanups regarding statics.
-
-	* gdbinv-s.texi (Bootstrapping): Document exceptionHandler.
-	(Debug Session): Mention exceptionHandler.  Add xref to Bootstrapping.
-
-Mon Jul 12 13:37:02 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: N_MAIN is sometimes used for C.
-
-Fri Jul  9 09:47:02 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
-
-	* gdbint.texinfo (Host, Target Conditionals): Remove TM_FILE_OVERRIDE.
-
-Tue Jul  6 12:41:28 1993  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo (Target Conditionals): Remove NO_TYPEDEFS,
-	removed from the code by Kingdon.
-
-Tue Jul  6 12:24:34 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* gdb.texinfo (Break Commands): Remove stuff about flushing terminal
-	input when evaluating breakpoint conditions; the bug has been fixed.
-
-	* gdb.texinfo (Continuing and Stepping): Argument to "continue"
-	sets the ignore count to N-1, not to N.
-
-Thu Jul  1 14:57:42 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* refcard.tex (\hoffset): correct longstanding error to match
-	  intended offset; avoids cutting off edge on some printers
-
-Wed Jun 30 18:23:06 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Parameters): Say that order of stabs is significant.
-
-Fri Jun 25 21:34:52 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Common Blocks): Say what Sun FORTRAN does.
-
-Fri Jun 25 16:15:10 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* Makefile.in: (REFEDITS) new var to control whether PS or CM
-	fonts and whether US or A4 paper for GDB refcard; (refcard.dvi)
-	collect sed edits if any, apply to refcard before formatting;
-	(refcard.ps) stop implying PS fonts if PS output requested;
-	(lrefcard.ps) delete extra target for variant PS fonts
-
-	* refcard.tex: parametrize papersize dependent info, collect
-	  in easily replaced spot
-
-	* a4rc.sed: new file, edits to refcard for A4 paper
-
-Fri Jun 25 14:21:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Negative Type Numbers): Type -16 is 4 bytes.
-
-Wed Jun 23 15:02:50 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Negative Type Numbers): Minor character cleanups.
-
-Tue Jun 22 16:31:52 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Express disapproval of 'D' symbol descriptor
-	politely rather than rudely.
-
-Fri Jun 18 19:42:09 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Document common blocks.
-
-Fri Jun 18 12:12:57 1993  Fred Fish  (fnf@cygnus.com)
-
-	* stabs.texinfo:  Add some basic info about stabs-in-elf.
-
-Fri Jun 18 13:57:09 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Top): Minor cleanup.
-
-Mon Jun 14 16:16:51 1993  david d `zoo' zuhn  (zoo at rtl.cygnus.com)
-
-	* Makefile.in (install-info): remove parentdir support
-
-Tue Jun 15 18:11:39 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo (Copying): delete this node and references to it;
-	RMS says this manual need not carry GPL. (passim): Improvements
-	from last round at FSF, largely due to Ian Taylor review, and
-	minor formatting improvements.
-
-	* gdbinv-s.texi (passim): Improvements from last round at FSF,
-	largely due to Ian Taylor review. (Debug Session): minor edits to
-	new text.
-
-Sun Jun 13 12:52:39 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* Makefile.in (realclean): Remove info and dvi files too.
-
-Sat Jun 12 16:09:22 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* {all,h8}-config.texi: Rename to *-cfg.texi for 14 char filenames.
-	* Makefile.in: Change accordingly.  gdb-config.texi -> gdb-cfg.texi.
-	* gdb.texinfo: Change accordingly.
-
-	* stabs.texinfo: Clean up N_{L,R}BRAC.  Discuss what addresses of
-	N_{L,R}BRAC,N_SLINE are relative to.
-
-Fri Jun 11 15:15:55 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* Makefile.in (GDBvn.texi): Update atomically.
-
-Wed Jun  9 10:58:16 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* gdbinv-s.texi (Debug Session): Document exceptionHook.
-
-Tue Jun  8 13:42:04 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* gdb.texinfo (Print Settings): Move all stuff relating to symbolic
-	addresses together.  Also motivate the set print symbol-filename
-	command and suggest other solutions.
-
-Tue Jun  1 22:46:43 1993  Fred Fish  (fnf@cygnus.com)
-
-	* gdb.texinfo (set print elements):  Note that the number of
-	elements is set to unlimited by "set print elements 0".
-
-Mon May 31 08:06:55 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* stabs.texinfo (Builtin Type Descriptors): Try to clarify what
-	NF_LDOUBLE means.
-	(Stab Types): Include Solaris stab types.
-	(Procedures): Document Solaris extensions.
-
-Thu May 27 06:20:42 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
-
-	* gdb.texinfo:  Add `set print symbol-filename' doc.
-
-Wed May 26 00:26:42 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Arrays): Talk about type definition vs. type
-	information.
-
-	* stabs.texinfo (Builtin Type Descriptors): Talk about omitting
-	the trailing semicolon.
-
-Tue May 25 14:49:42 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Line Numbers, Source Files): Re-write these two nodes
-	and merge in other parts of the document addressing these subjects.
-	gdbint.texinfo (XCOFF): Remove info which is now in stabs.texinfo.
-
-	* stabs.texinfo (Subranges, Arrays): Try to explain about the semicolon
-	at the end of a range type.
-
-	* stabs.texinfo (Subranges): "A offset" and "T offset" are not
-	AIX extensions.
-
-Mon May 24 09:00:33 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Stabs Format):  Misc fixes.
-
-Sat May 22 10:40:56 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Constants):  Allow an `e' constant to be non-enum.
-	(Traditional builtin types): Document convex convention for long long.
-	(Negative builtin types): Discuss type names, and misc fixes.
-
-Fri May 21 11:20:31 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Builtin Type Descriptors): Document the floating
-	point types used with @samp{R} type descriptor.
-	(Symbol Descriptors): Describe how to handle conflict between
-	different meanings of @samp{P} symbol descriptor.
-
-Thu May 20 13:35:10 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo: Remove node Quick Reference and put its children
-	directly under the main menu.
-
-	* stabs.texinfo: Many more changes to bring it into line with
-	AIX documentation and reality.  I think it now has all the
-	information from the AIX documentation, except that I burned
-	out when I got to variant records (Pascal and Modula-2) and
-	all the COBOL types.  Oh well, we can add them later when we're
-	worrying more about those languages.
-
-	* stabs.texinfo (Automatic variables): Talk about what it means
-	to omit the symbol descriptor.
-
-Tue May 18 17:59:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
-
-	* stabs.texinfo (Parameters): Add "(sometimes)" when describing
-	gcc2 behavior with promoted args.
-
-Fri May 14 21:35:29 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo: include readline appendices in info version of manual
-
-Fri May  7 11:56:18 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdbinv-s.texi (Remote Serial): describe new ^C behavior in
-	target remote.
-
-	* gdb.texinfo (Machine Code): more index entries for disassemble
-
-Fri May  7 10:12:30 1993  Fred Fish  (fnf@cygnus.com)
-
-	* Clarify the intended use of the gdb-testers and gdb-patches
-	mailing lists, and shrink gzip comment.
-
-Thu May  6 16:39:50 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo (Shell Commands): do not mention SHELL env var in
-	DOSHOST configuration of manual.
-
-	* gdb.texinfo (MIPS Stack): new node.
-
-	* all-config.texi (MIPS) new switch.
-
-	* gdbinv-s.texi (Nindy Options) Remove two instances of future
-	tense; (MIPS Remote) new node.
-
-	* gdb.texinfo (passim) rephrases to work around makeinfo @value
-	bug; (Environment) less passive, other small cleanups in text about
-	.cshrc/.bashrc; (Invoking GDB) new MIPS Remote menu entry;
-	(Remote) new MIPS Remote menu entry.
-
-Thu Apr 29 09:36:25 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* stabs.texinfo: Many changes to include information from the
-	AIX documentation.
-
-	* gdb.texinfo (Environment): Mention pitfall with .cshrc.
-
-Tue Apr 27 14:02:57 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* gdbint.texinfo (new node Debugging GDB, elsewhere):
-	Move a bunch of information from ../README.
-	(Getting Started): New node.
-
-Fri Apr 23 17:21:13 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdbinv-s.texi, gdb.texinfo: include Hitachi SH target
-
-	* gdb.texinfo: advance manual revision dates to present
-
-	* gdbinv-s.texi, gdb.texinfo, all-config.texi, h8-config.texi:
-	stop using silly Roman numerals in @set variable names
-
-Fri Apr 23 07:30:01 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* stabs.texinfo (Parameters): Keep trying to get this right.
-
-Wed Apr 21 15:18:47 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* stabs.texinfo (Parameters): More on "local parameters".
-
-Mon Apr 19 08:00:51 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* stabs.texinfo (Parameters): Re-do "local parameters" section.
-
-Sun Apr 18 09:47:45 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* stabs.texinfo (Symbol descriptors): Re-do using @table and @xref.
-	(Parameters): Rewrite.
-	(xcoff-differences, Sun-differences): Minor changes.
-
-Thu Apr 15 02:35:24 1993  John Gilmore  (gnu@cacophony.cygnus.com)
-
-	* stabs.texinfo:  Minor cleanup.
-
-Wed Apr 14 17:31:00 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* gdbint.texinfo: Minor xcoff stuff.
-
-Wed Apr  7 14:11:07 1993  Fred Fish  (fnf@cygnus.com)
-
-	* gdbint.texinfo:  Update for new config directory structure.
-	Add info about internal type data structures.
-
-Mon Apr  5 09:06:30 1993  Ian Lance Taylor  (ian@cygnus.com)
-
-	* Makefile.in (SFILES_INCLUDED): gdb-config.texi is no longer in
-	$(srcdir).
-	(gdb-config.texi): Depend on file in $(srcdir).
-
-Fri Apr  2 16:55:13 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* stabs.texinfo: Fixes about N_SO.
-
-Fri Mar 26 18:00:35 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo: include list of nonstandard init file names
-
-	* *-config.texi: new switch GENERIC for text that applies *only*
-	to (usual) multiple-target version of manual
-
-	* gdb.texinfo, gdbinv-s.texi: Update conditional markup to correct
-	h8 config
-
-	* gdb.texinfo: depend on latest fixed makeinfo, use conditionals
-	in menus (rather than conditionally selected multiple alternative
-	menus).
-
-	* Makefile.in: define and use DOC_CONFIG var to select
-	configuration for GDB user manual.
-
-	* gdb-config.texi: delete from repository, generate from Makefile.
-
-	* all-config.texi: normal `generic' configuration file, formerly
-	stored as gdb-config.texi
-
-Wed Mar 24 14:03:19 1993  david d `zoo' zuhn  (zoo at poseidon.cygnus.com)
-
-	* Makefile.in: add dvi target to build all .dvi files
-
-Tue Mar 23 16:03:24 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo, gdvinv-s.texinfo: formatting improvements.
-
-Fri Mar 19 21:46:50 1993  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Doc NO_MMALLOC and NO_MMALLOC_CHECK as
-	host conditionals.
-	* stabs.texinfo:  More array fixes inspired by Jim's.
-
-Fri Mar 19 10:23:34 1993  Jim Kingdon  (kingdon@cygnus.com)
-
-	* stabs.texinfo: Fixes re arrays and continuations.
-
-	* gdbint.texinfo: Add XCOFF node.
-
-Mon Mar  8 15:52:18 1993  John Gilmore  (gnu@cygnus.com)
-
-	* gdb.texinfo:  Add `set print max-symbolic-offset' doc.
-
-Sun Feb 21 17:09:38 1993  Per Bothner  (bothner@rtl.cygnus.com)
-
-	* stabs.texinfo:  Fix for array types to mention lower bounds.
-
-Thu Feb 18 01:19:49 1993  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Update PTRACE_ARG3_TYPE doc, pull PT_*.
-
-Wed Feb 17 08:15:24 1993  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Remove SET_STACK_LIMIT_HUGE from target defines.
-
-Thu Feb 11 10:38:40 1993  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Fix thinko (NM_FILE => NAT_FILE).  Found
-	by Michael Ben-Gershon <mybg@CS.HUJI.AC.IL>.
-
-Wed Feb 10 23:59:19 1993  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Eliminate IBM6000_HOST, document IBM6000_TARGET.
-
-Tue Feb  9 18:26:21 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo, gdbinv-s.texi: misc updates
-
-Sat Feb  6 10:25:47 1993  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Brief documentation for longjmp support,
-	from an email msg by Stu.
-
-Fri Feb  5 14:10:15 1993  John Gilmore  (gnu@cygnus.com)
-
-	* stabs.texinfo:  Fix description of floating point "range"
-	types (which really define basic types).  Reported by Jim Meehan,
-	<meehan@src.dec.com>.
-
-	* gdbint.texinfo:  Remove COFF_NO_LONG_FILE_NAMES define, now gone.
-
-Thu Feb  4 13:56:46 1993  Ian Lance Taylor  (ian@cygnus.com)
-
-	* gdbint.texinfo: Slightly expand section on supporting a new
-	object file format.
-
-Thu Feb  4 01:49:04 1993  John Gilmore  (gnu@cygnus.com)
-
-	* Makefile.in (refcard.ps, lrefcard.ps):  Remove psref.tex
-	intermediate file.
-
-Tue Feb  2 12:18:06 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo, gdbinv-s.texi: miscellaneous stylistic cleanups
-
-Mon Feb  1 15:35:47 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdbinv-s.texi: z8000 simulator target name is just "sim"
-
-	* gdbinv-s.texi:  Mention that Z8000 simulator can simulate Z8001
-	as well as Z8002.
-
-Sat Nov 28 06:51:35 1992  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Add sections on clean design and on how to send
-	in changes.
-
-Mon Nov  9 23:57:02 1992  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Add how to declare the result of make_cleanup.
-
-Mon Oct 26 11:09:47 1992  John Gilmore  (gnu@cygnus.com)
-
-	* gdb.texinfo:  Fix typo, reported by Karl Berry.
-
-Fri Oct 23 00:41:21 1992  John Gilmore  (gnu@cygnus.com)
-
-	* gdb.texinfo:  Add opcodes dir to GDB distribution description.
-
-Sat Oct 10 18:04:58 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)
-
-	* gdbint.texinfo: fixed a stray email address (needs @@),
-	added @table @code to node "Native Conditionals"
-
-Tue Sep 22 00:34:15 1992  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Describe coding style of GDB.
-
-Mon Sep 21 19:32:16 1992  John Gilmore  (gnu@cygnus.com)
-
-	* stabs.texinfo:  Minor wording changes.
-
-Tue Sep 15 02:57:09 1992  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Improve release doc slightly.
-
-Fri Sep 11 01:34:25 1992  John Gilmore  (gnu@sphagnum.cygnus.com)
-
-	* gdbint.texinfo:  Improve doc of GDB config macros.
-
-Wed Sep  9 16:52:06 1992  John Gilmore  (gnu@cygnus.com)
-
-	* stabs.texinfo:  Remove Bothner's changes for C++ nested types.
-	These will be reinserted when examined.
-
-Mon Aug 24 01:17:55 1992  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Make a start at documenting all the #if macros
-	in GDB.  At least list them all, and start separating them into
-	host-specific and target-specific.
-
-Tue Aug 18 15:59:13 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdbinv-s.m4.in: refrain from using @cartouche for just a few
-	examples (not consistent w others).
-	gdb.texinfo: issue disclaimer paragraph on cmdline options only
-	for generic vn of doc
-
-Tue Aug 18 14:53:27 1992  Ian Lance Taylor  (ian@cygnus.com)
-
-	* Makefile.in: always create installation directories.
-
-Tue Aug 18 14:11:50 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo: in h8 config, do not describe searching commands.
-
-Mon Aug 17 18:07:59 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo, none.m4, h8.m4, gdbinv-s.m4.in: improve H8/300
-	  conditionals; introduce a few generic switches that may be
-	  useful for other cross-dev or dos-hosted configs.
-
-	* gdb.texinfo: fix typo in "info reg" description
-
-Sun Aug 16 01:16:18 1992  John Gilmore  (gnu@cygnus.com)
-
-	* stabs.texinfo:  Minor updates from running TeX over it.
-	* Makefile.in (stabs.dvi, stabs.ps):  Add.
-
-Sat Aug 15 20:52:24 1992  Per Bothner  (bothner@rtl.cygnus.com)
-
-	* stabs.texinfo:  Stabs documentation, written by Julia Menapace.
-	First pass at converting it to texinfo.
-
-Sat Aug 15 03:14:59 1992  John Gilmore  (gnu@cygnus.com)
-
-	* gdb.texinfo, refcard.tex:  Document mult args on `info reg'.
-	* Makefile.in (refcard.ps, lrefcard.ps):  Add missing $(srdir).
-
-Fri Aug 14 21:08:47 1992  John Gilmore  (gnu@cygnus.com)
-
-	* gdbint.texinfo:  Add section on partial symbol tables.
-
-Sat Jun 20 16:31:10 1992  John Gilmore  (gnu at cygnus.com)
-
-	* gdb.texinfo:  document `set remotedebug' and `set
-	rstack_high_address'.
-
-Thu May 14 17:09:48 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
-
-	* gdb.texinfo: slight expansion of new text on reading info files
-	* gdbinv-s.m4.in: correct and expand info on cross-debugging
-	H8/300 from DOS.
-
-Tue May 12 12:22:47 1992  John Gilmore  (gnu at cygnus.com)
-
-	* gdb.texinfo:  `info user' => `show user'.  Noticed by David Taylor.
-
-Mon May 11 19:06:27 1992  John Gilmore  (gnu at cygnus.com)
-
-	* gdb.texinfo:  Say how to read the `info' files.
-
-Tue May  5 12:11:38 1992  K. Richard Pixley  (rich@cygnus.com)
-
-	* Makefile.in: gm4 -> m4.
-
-Fri Apr 10 17:50:43 1992  John Gilmore  (gnu at rtl.cygnus.com)
-
-	* gdb.texinfo:  Update for GDB-4.5.  Move `Formatting
-	Documentation' ahead of `Installing GDB' to match README.
-	Update shared library doc, -readnow and -mapped, and directory
-	structure (add glob and mmalloc).  Update configure doc.
-
-Tue Mar 24 23:28:38 1992  K. Richard Pixley  (rich@cygnus.com)
-
-	* Makefile.in: remove $(srcdir) from gdb.info rule.
-
-Sat Mar  7 18:44:50 1992  K. Richard Pixley  (rich@rtl.cygnus.com)
-
-	* Makefile.in: commented out gdb-all.texinfo rule.  This is
-	  temporary.
-
-Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)
-
-	* Makefile.in, configure.in: removed traces of namesubdir,
-	  -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
-	  copyrights to '92, '13, changed some from Cygnus to FSF.
-
-Fri Dec 13 09:47:31 1991  John Gilmore  (gnu at cygnus.com)
-
-	* gdb.texinfo:  Improve how we ask for bug reports.
-
-Tue Dec 10 04:07:21 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
-
-	* Makefile.in: infodir belongs in datadir.
-
-Fri Dec  6 23:57:34 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
-
-	* Makefile.in: remove spaces following hyphens, bsd make can't
-	  cope.  install using INSTALL_DATA.  added clean-info.  added
-	  standards.text support.
-
-Thu Dec  5 22:46:12 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
-
-	* Makefile.in: idestdir and ddestdir go away.  Added copyrights
-	  and shift gpl to v2.  Added ChangeLog if it didn't exist. docdir
-	  and mandir now keyed off datadir by default.
-
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-coding: utf-8
-End:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/ChangeLog-1991-2021 ./gdb/doc/ChangeLog-1991-2021
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/ChangeLog-1991-2021	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/doc/ChangeLog-1991-2021	2024-02-01 01:47:15.000000000 +0000
@@ -0,0 +1,14036 @@
+2021-07-02  Pedro Alves  <pedro@palves.net>
+
+	* gdb.texinfo (TUI): <TUI Mouse Support>: New node/section.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Symbols): Document new output format for 'info
+	sources'.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (GDB/MI File Commands): Document --group-by-objfile
+	extension for -file-list-exec-source-files.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (GDB/MI File Commands): Document extensions to
+	-file-list-exec-source-files.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texinfo (Breakpoints In Python): Add BP_CATCHPOINT
+	description.
+
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* guile.texinfo (Breakpoints In Guile): Add BP_CATCHPOINT
+	description.
+
+2021-06-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (RISC-V Features): Mention vector register feature.
+
+2021-06-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texi (Unwinding Frames in Python): Mention
+	PendingFrame.level.
+	(Frames In Python): Mention Frame.level.
+
+2021-06-16  Felix Willgerodt  <felix.willgerodt@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Stop mentioning lines
+	for "record function-call-history" and
+	"set record function-call-history-size".
+
+2021-06-08  Lancelot Six  <lsix@lancelotsix.com>
+
+	* python.texi (Writing a Pretty-Printer): Use 'is None' instead of
+	'== None'.
+
+2021-06-05  Shahab Vahedi  <shahab@synopsys.com>
+
+	* gdb.texinfo (Source and Machine Code): Document 'set
+	disassembler-options' support for the ARC target.
+
+2021-06-04  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python.texi (TUI Windows In Python): Document Window.click.
+
+2021-05-29  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python.texi (Writing a Frame Filter): Fix example.
+
+2021-05-27  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python.texi (TUI Windows In Python): Document "full_window"
+	argument.
+
+2021-05-27  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python.texi (Symbols In Python): Document gdb.SYMBOL_LOC_LABEL.
+
+2021-05-25  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python.texi (Symbols In Python): Fix gdb.SYMBOL_LOC_COMMON_BLOCK.
+
+2021-05-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texi (Initialization Files): Add '@:' after 'e.g.'.
+	(Source Path): Likewise.
+	(GDB/MI Development and Front Ends): Likewise.
+	(ARM Features): Likewise.
+	(gdb man): Likewise.
+
+2021-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* python.texi (Inferiors In Python): Mention the 'connection_num'
+	attribute.
+
+2021-05-12  George Barrett  <bob@bob131.so>
+
+	* guile.texi (Values From Inferior In Guile): Add documentation
+	for value-const-value.
+
+2021-05-12  George Barrett  <bob@bob131.so>
+
+	* guile.texi (Values From Inferior In Guile): Add documentation
+	for value-reference-value.  Add documentation for
+	value-rvalue-reference-value.
+
+2021-05-12  George Barrett  <bob@bob131.so>
+
+	* guile.texi (Types In Guile): Add documentation for
+	TYPE_CODE_RVALUE_REF.
+
+2021-05-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* guile.texinfo (Breakpoints In Guile): Reword sentence.
+	* python.texinfo (Breakpoints In Python): Reword sentence.
+
+2021-05-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texinfo (Python Commands): Document 'set debug
+	py-unwind' and 'show debug py-unwind'.
+
+2021-05-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texinfo (Python Commands): Document 'set debug
+	py-breakpoint' and 'show debug py-breakpoint'.
+
+2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Mention the
+	'--force' flag of the '-break-condition' command.
+
+2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Mention the
+	'--force-condition' flag of the '-break-insert' and
+	'-dprintf-insert' commands.
+
+2021-05-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* python.texi (Types In Python): Re-organize Type.fields doc.
+	Mention handling of array types.  Correct doc for when calling
+	the method on another type.
+
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Initialization Files): Use @env when referencing
+	environment variables.
+	(Shell Commands): Likewise.
+	(Starting): Likewise.
+	(Arguments): Likewise.
+	(Environment): Likewise.
+	(Edit): Likewise.
+	(Compiling and Injecting Code): Likewise.
+	(Files): Likewise.
+	(Command History): Likewise.
+	(Screen Size): Likewise.
+	(Emacs): Likewise.
+
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texinfo (Python Commands): Mention new commands.
+
+2021-04-25  Lancelot Six  <lsix@lancelotsix.com>
+
+	PR gdb/22640
+	* gdb.texinfo (Symbols): Describe the 'x' and 'd' flags of the
+	ptype command, describe 'set print type hex' and 'show print
+	type hex' commands.  Update 'ptype/o' examples.
+
+2021-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Information): Update the
+	description for the 'enabled' field of breakpoint locations.
+
+2021-04-15  Tom Tromey  <tom@tromey.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Mode Options): Mention "set startup-quietly".
+
+2021-04-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR cli/25956
+	* gdb.texinfo (File Options): Mention new command line options.
+	(Startup): Discuss when early init files are processed.
+	(Initialization Files): Add description of early init files.
+	(Output Styling): Update description of 'version' style.
+	(gdb man): Mention early init files.
+
+2021-04-14  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Add missing
+	parentheses to GDB prompt in example, and replace '(gdb)' with
+	'(@value{GDBP})' in one example where the latter was already in
+	use.
+
+2021-03-29  Luis Machado  <luis.machado@linaro.org>
+
+	* gdb.textinfo (Memory Tagging): Make it a @section.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* gdb.texinfo (Data): Document memory tagging changes to the "print"
+	command.
+	(Examining Memory): Document memory tagging changes to the "x"
+	command.
+	(Memory Tagging): Update with more information on changes to the "x"
+	and "print" commands.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* gdb.texinfo (Memory Tagging): New subsection and node.
+	(AArch64 Memory Tagging Extension): New subsection.
+
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+	* gdb.texinfo (General Query Packets): Document qMemTags and
+	QMemTags.  Document the "memory-tagging" feature.
+	(ARM-Specific Protocol Details): Document memory tag types.
+
+2021-03-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texinfo (Parameters In Python): Return empty string in
+	small example code.
+
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Files): Document new 'maint info target-sections'
+	command.
+
+2021-02-17  Lancelot Six  <lsix@lancelotsix.com>
+
+	PR cli/17290
+	* gdb.texinfo (Remote Configuration): Fix show remote
+	interrupt-sequence and show remote interrupt-on-connect.
+
+2021-02-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Files): Update documentation for 'maint info
+	sections'.
+
+2021-02-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texinfo (TUI Windows In Python): Extend description of
+	TuiWindow.is_valid.
+
+2021-02-02  Lancelot SIX  <lsix@lancelotsix.com>
+
+	* gdb.texinfo (Inferiors Connections and Programs): Document the
+	inferior command when used without argument.
+
+2021-01-27  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Auto-loading extensions): Remove extraneous space.
+
+2021-01-25  Marco Barisione  <mbarisione@undo.io>
+
+	* python.texi: Add parentheses to print statements/functions.
+
+2021-01-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Specify Location): Move menu to the end of the
+	node.
+	(Auto-loading): Likewise.
+	(Extending GDB): Likewise.
+	(TUI): Likewise.
+	(Operating System Information): Likewise.
+
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	PR cli/25956
+	* gdb.texinfo (Output Styling): Document version style.
+
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Auto-loading extensions): Add additional cross
+	references and move @menu to the end of the node.
+
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Aliases): Move @menu to the end of the node.
+
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (PowerPC Embedded): Down case contents of @var.
+
+2021-01-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Commands): Update menu.
+	(Extending GDB): Likewise.
+	(Command aliases default args): Moved later into the document,
+	added a cindex entry.  Renamed the section 'Automatically prepend
+	default arguments to user-defined aliases' to 'Default Arguments'.
+	(Aliases): Moved earlier in the document.  Minor rewording of the
+	first paragraph, down-cased the text inside all uses of @var, and
+	added a cross reference to the Python code.  Renamed the section
+	'Creating new spellings of existing commands' to 'Command
+	Aliases'.
+
+2021-01-21  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR python/19151
+	* python.texi (Breakpoints In Python): Document
+	gdb.BP_HARDWARE_BREAKPOINT.
+
+2021-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo, refcard.tex: Update copyright year range.
+
+2020-12-29  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python.texi (Frame Decorator API): Fix method name.
+
+2020-12-23  Alex BennÃ©e  <alex.bennee@linaro.org>
+
+	* gdb.texinfo (Packets): Clarify language for ? packet.
+
+2020-12-21  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Requirements): Add GMP to list of requirements.
+
+2020-12-18  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python.texi (TUI Windows In Python): Remove erroneous 'a'.
+
+2020-12-18  Hannes Domani  <ssbssa@yahoo.de>
+
+	* python.texi (Values From Inferior): Document the address keyword.
+
+2020-12-17  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	PR gdb/27088
+	* gdb.texinfo (Range Checking): Fix "show check range" command
+	name.
+
+2020-12-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Caching Target Data): Document 'maint flush
+	dcache'.
+
+2020-12-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Symbols): Document 'maint flush symbol-cache'.
+	(Maintenance Commands): Document 'maint flush register-cache'.
+
+2020-12-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+	* Makefile.in: Delete GDBvn.texi and version.subst only in
+	the maintainer-clean target.
+
+2020-11-29  Hannes Domani  <ssbssa@yahoo.de>
+
+	PR python/26974
+	* python.texi: Fix docu for static members argument.
+
+2020-11-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Debugging Output): Document 'set/show debug
+	fortran-array-slicing'.
+	(Special Fortran Commands): Document 'set/show fortran
+	repack-array-slices'.
+
+2020-11-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Maintenance Commands): Update description of 'maint
+	print c-tdesc'.
+
+2020-11-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Mode Options): Descriptions of initialization files
+	has been moved to 'Initialization Files'.
+	(Startup): Likewise.
+	(Initialization Files): New node.
+	(gdb man): Update to mention alternative file paths.
+	(gdbinit man): Likewise.
+
+2020-10-27  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* gdb.texinfo (Set Breaks): Document the '-force-condition' flag
+	of the 'break'command.
+	* gdb.texinfo (Conditions): Document the '-force' flag of the
+	'condition' command.
+
+2020-10-27  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	* gdb.texinfo (Set Breaks): Document disabling of breakpoint
+	locations for which the breakpoint condition is invalid.
+
+2020-10-06  Michael Forney  <mforney@mforney.org>
+
+	* Makefile.in (HAVE_NATIVE_GCORE_HOST): Add for gcore.1
+	install condition.
+
+2020-10-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdb.texinfo (Debugging Output): Add set/show debug event-loop.
+
+2020-10-04  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdb.texinfo (Debugging Output): Add empty lines, fix typo.
+
+2020-09-13  Pedro Alves  <pedro@palves.net>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Document
+	"-break-insert --qualified" and "-dprintf-insert --qualified".
+
+2020-08-25  Shahab Vahedi  <shahab@synopsys.com>
+
+	* gdb.texinfo (Synopsys ARC): Document LP_START, LP_END and BTA.
+
+2020-08-25  Shahab Vahedi  <shahab@synopsys.com>
+
+	* gdb.texinfo (Synopsys ARC): Update the documentation for ARC
+	Features.
+
+2020-08-07  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Ravenscar Profile): Add examples.
+	Document runtime initialization limitation.
+
+2020-08-04  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* gdb.texinfo (Contributors): Add information for the eBPF
+	support.
+	(BPF): New section.
+
+2020-07-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texi (Unwinding Frames in Python): Update descriptions
+	for PendingFrame.read_register and
+	gdb.UnwindInfo.add_saved_register.
+	(Frames In Python): Update description of Frame.read_register.
+
+2020-07-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texi (Registers In Python): Document new find function.
+
+2020-07-22  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Add documentation for
+	new command "maintenance print core-file-backed-mappings".
+
+2020-07-22  Reuben Thomas  <rrt@sc3d.org>
+
+	* gdb.texinfo (Remote Protocol, Overview): Correct the description
+	of which remote protocol commands are mandatory for a stub to
+	implement.
+
+2020-07-20  Ludovic CourtÃ¨s  <ludo@gnu.org>
+
+	* doc/guile.texi (Guile Introduction): Mention Guile 3.0.
+
+2020-07-20  Ludovic CourtÃ¨s  <ludo@gnu.org>
+
+	* guile.texi (Memory Ports in Guile): Mark
+	'memory-port-read-buffer-size',
+	'set-memory-port-read-buffer-size!',
+	'memory-port-write-buffer-size',
+	'set-memory-port-read-buffer-size!' as deprecated.
+	(Guile Introduction): Clarify which Guile
+	versions are supported.
+
+2020-07-13 Paul Carroll <pcarroll@codesourcery.com>
+
+	PR gdb/25716
+
+	* gdb.texinfo (Frame Apply): Remove anchor for 'frame
+	apply' and adjust xrefs to it.
+
+2020-07-11  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Attach): Update exec-file-mismatch doc.
+
+2020-07-08  Hannes Domani  <ssbssa@yahoo.de>
+
+	* gdb.texinfo: Document Windows drive conversion of
+	'set auto-load scripts-directory'.
+
+2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texi (Registers): Add @anchor for 'info registers
+	<reggroup>' command.
+	* python.texi (Architectures In Python): Document new
+	register_groups method.
+	(Registers In Python): Document two new object types related to
+	register groups.
+
+2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texi (Python API): Add new section to the menu.
+	(Frames In Python): Add new @anchor.
+	(Architectures In Python): Document new registers method.
+	(Registers In Python): New section.
+
+2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texi (Unwinding Frames in Python): Document
+	PendingFrame.architecture method.
+
+2020-06-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Shell Commands): More accurate description of use
+	of $SHELL.  Reported by Sandra Loosemore <sandra@codesourcery.com>.
+
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Maintenance Commands): Document new 'maint print
+	xml-desc' command.
+
+2020-06-22  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Command aliases default args): New node documenting
+	how to use default args for a command using aliases.
+	(Aliases): Document the new 'DEFAULT-ARGS...' option.
+	(Help): Update help aliases text and describe when full alias
+	definition is provided.
+
+2020-06-11  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Index Files): Reword.  Remove Ada limitation.
+
+2020-06-10  Jonny Grant  <jg@jguk.org>
+
+	* gdb.texinfo: Remove broken links Previous and Up from
+	contents.
+
+2020-05-23  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Output Styling): Don't mention completion styling.
+	(Editing): Don't mention readline completion styling.
+
+2020-05-23  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Output Styling): Mention completion styling.
+	(Editing): Mention readline completion styling.
+
+2020-05-19  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Attach): Update exec-file-mismatch description to
+	mention build IDs.
+	(Separate Debug Files): Add "build id" anchor.
+
+2020-05-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Help): Document the help and apropos changes.
+	(Aliases): Document new meaning of -a abbreviation flag.
+
+2020-05-05  Kamil Rytarowski  <n54@gmx.com>
+
+	* gdb.texinfo (info proc, info proc cmdline, info proc cwd)
+	(info proc exe, info proc mappings, info proc stat): Mention
+	NetBSD support.
+
+2020-04-28  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Commands In Python): Document gdb.COMMAND_TUI.
+
+2020-04-27  Tom Tromey  <tromey@adacore.com>
+
+	* python.texi (Types In Python): Mention missing fields.  Add
+	dynamic type example.
+
+2020-04-24  Tom Tromey  <tromey@adacore.com>
+
+	PR python/23662:
+	* python.texi (Types In Python): Document new features.
+
+2020-04-15  Artur Shepilko  <nomadbyte@gmail.com>
+
+	* gdb.texinfo: Transform @var{[host]} to [@var{host}]; this
+	clears makeinfo warnings.
+	* python.texi: Add a missing period trailing an @xref{} clause;
+	this clears a makeinfo warning.
+
+2020-03-06  Tom de Vries  <tdevries@suse.de>
+
+	* gdb.texinfo: Fix "the the".
+
+2020-03-04  Tom de Vries  <tdevries@suse.de>
+
+	* gdb.texinfo: Remove trailing "done." in "Reading symbols from" lines.
+	* python.texi: Same.
+
+2020-03-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Command History): Extend description for
+	GDBHISTFILE and GDBHISTSIZE, add detail about the filename for
+	'set history filename' being optional.  Describe the effect of an
+	empty history filename on 'set history save on'.
+
+2020-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Threads): Fix alignment in 'info threads' example
+	output.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Python API): Add menu item.
+	(TUI Windows In Python): New node.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	PR tui/17850:
+	* gdb.texinfo (TUI Commands): Document horizontal layouts.
+
+2020-02-22  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (TUI Overview): Mention user layouts.
+	(TUI Commands): Document "tui new-layout".
+
+2020-01-26  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (M68K Features): Document floating-point feature
+	correspondence.
+
+2020-01-25  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Attach): Document the new option and the
+	set/show commands.
+	(Connecting): Reference the exec-file-mismatch option.
+
+2020-01-10  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Starting): Say "current inferior not connected"
+	instead of "GDB not connected".
+	(Inferiors and Programs): Rename node to ...
+	(Inferiors Connections and Programs): ... this.  Update all
+	references.  Talk about multiple target connections.  Update "info
+	inferiors" info to mention the connections column.  Describe "info
+	connections".  Document "add-inferior -no-connection".
+	* guile.texi, python.texi: Update cross references.
+
+2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo, refcard.tex: Update copyright year range.
+
+2019-12-14  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texi (Symbols In Python): Remove duplicate description of
+	gdb.lookup_global_symbol.
+
+2019-12-11  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdb.texinfo (Writing JIT Debug Info Readers): Fix typo.
+
+2019-12-11  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Command Options): Use -p and -pretty in the example,
+	as -r is ambiguous.  Update the print - TAB TAB completion result.
+	(Data): Document new option -raw-values.  Use -p and -pretty in the
+	 example, as -r is ambiguous.
+	(Print Settings): Document set print raw values.
+	(Pretty-Printer Commands): Document interaction between enabled
+	pretty printers and -raw-values/-raw-frame-arguments.
+
+2019-12-10  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (gdb.prompt): Use correct quotes in example.
+	Shorten sample text.
+
+2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* doc/gdb.texinfo (GDB/MI Symbol Query): Add documentation of
+	-max-results to some -symbol-info-* commands.
+
+2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command
+	-symbol-info-module-functions and -symbol-info-module-variables.
+
+2019-12-01  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (TUI Configuration): Mention TUI border styles.
+	(Output Styling): Document new settings.
+
+2019-12-01  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (TUI Configuration): Document new setting.
+
+2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Define): Indicate that user-defined prefix can
+	be used in 'define' command.  Document 'define-prefix' command.
+
+2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command
+	-symbol-info-modules.
+
+2019-11-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command
+	-symbol-info-functions, -symbol-info-types, and
+	-symbol-info-variables.
+
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Maintenance Commands): Document new maint
+	commands.
+
+2019-11-25  Luis Machado  <luis.machado@linaro.org>
+
+	* gdb.texinfo (Debugging Output): Document set debug
+	remote-packet-max-chars.
+
+2019-11-14  Tom de Vries  <tdevries@suse.de>
+
+	* gdb.texinfo: Fix typos.
+	* python.texi: Same.
+	* stabs.texinfo: Same.
+
+2019-11-12  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Maintenance Commands): Document new command.
+
+2019-11-11  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (TUI Keys): Document readline function names.
+
+2019-11-11  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Editing): Document operate-and-get-next.
+
+2019-11-11  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Host I/O Packets): Fix typo in "vFile:pwrite".
+
+2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texi (Symbols In Python): Add documentation for
+	gdb.lookup_static_symbols.
+
+2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texi (Symbols In Python): Extend documentation for
+	gdb.lookup_static_symbol.
+
+2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Symbols): Document new 'info module variables' and
+	'info module functions' commands.
+
+2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Symbols): Document new 'info modules' command.
+
+2019-10-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Convenience Funs): Document the new
+	$_gdb_setting_str, $_gdb_maint_setting and $_gdb_maint_setting_str
+	convenience functions.
+
+2019-10-29  Christian Biesinger  <cbiesinger@google.com>
+
+	* Makefile.in: Also set SYSTEM_GDBINIT_DIR for the info manual
+	generation.
+	* gdb.texinfo (many sections): Document new --with-system-gdbinit-dir
+	option.
+
+2019-10-23  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in (READLINE_DIR): Update.
+
+2019-10-23  Christian Biesinger  <cbiesinger@google.com>
+
+	* python.texi (Threads In Python): Add a note for how to get the
+	list of threads.
+
+2019-10-07  Tom de Vries  <tdevries@suse.de>
+
+	* gdb.texinfo: Fix typo.
+	* guile.texi: Same.
+	* python.texi: Same.
+
+2019-10-03  Bernhard Heckel  <bernhard.heckel@intel.com>
+
+	* doc/gdb.texinfo (Fortran Operators): Describe scope operator.
+
+2019-10-02  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Set Catchpoints, Convenience Vars): Document
+	$_ada_exception.
+
+2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* doc/gdb.texinfo (Remote Configuration): Remove documentation for
+	qXfer:spu:read and qXfer:spu:write.
+	(General Query Packets): Likewise.
+	(Cell Broadband Engine SPU architecture): Remove subsection.
+
+2019-09-18  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Editing): Document readline application name.
+	(TUI Single Key Mode): Document TUI SingleKey keymap name.
+
+2019-09-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Source Path): Additional text to better describe
+	how the source path directory list is used when searching for
+	source files.
+
+2019-09-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Ada Tasks): Tell the task name is printed, update
+	examples.
+
+2019-09-10  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Index Files): Update Ada text.
+
+2019-08-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Symbols): Add information about the -n flag to
+	"info variables" and "info functions".
+
+2019-08-25  Yoshinori Sato <ysato@users.sourceforge.jp>
+
+        * gdb.texinfo (Standard Target Features): Add RX Features sub-section.
+
+2019-08-16  Alan Hayward  <alan.hayward@arm.com>
+
+	* gdb.texinfo (AArch64 Pointer Authentication)
+	(GDB/MI Breakpoint Information) (Frame Information): Document
+	addr_field.
+
+2019-08-12  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Configure Options): Document minimum version of
+	readline.
+
+2019-08-09  Alan Hayward  <alan.hayward@arm.com>
+
+        * gdb.texinfo (AArch64 Pointer Authentication): Fix typo.
+
+2019-08-07  Alan Hayward  <alan.hayward@arm.com>
+
+	* gdb.texinfo (AArch64 Pointer Authentication): New subsection.
+
+2019-08-05  Christian Biesinger  <cbiesinger@google.com>
+
+	* python.texi (Blocks In Python): Document dictionary access on blocks.
+
+2019-08-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+        * gdb.texinfo (Symbols): Document new args -dirname and -basename
+        of "info sources" command.
+
+2019-07-30  Christian Biesinger  <cbiesinger@google.com>
+
+	* python.texi (Symbols In Python): Document new function
+	gdb.lookup_static_symbol.
+
+2019-07-29  Christian Biesinger  <cbiesinger@google.com>
+
+	* python.texi (Objfiles In Python): Document new functions
+	  Objfile.lookup_{global,static}_symbol.
+
+2019-07-29  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Backtrace): Document the new '-frame-info'
+	backtrace option.  Reference 'set print frame-info'.
+	(Print Settings): Document 'set|show print frame-info'.
+	Document new 'presence' value for 'set print frame-arguments.
+
+2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Symbols): Add information about -q flag to "info
+	types".
+
+2019-07-20  Kevin Buettner  <kevinb@redhat.com>
+
+	* python.texi (python command): Revise example to match
+	command behavior.
+
+2019-07-09  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (C++ Exception GDB/MI Catchpoint Commands): Adjust
+	examples to show type=catchpoint instead of type=breakpoint and an
+	address.
+
+2019-07-03  Pedro Alves  <palves@redhat.com>
+	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Command Settings): New node documenting the general
+	concept of settings, how to change them, and the new "with"
+	command.
+	(Maintenance Commands): Document "maint with".
+
+2019-07-03  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint set/show
+	test-settings" instead of "maint test-settings set/show".
+
+2019-06-18  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdb.texinfo (Invoking GDB): Remove sentence about how GDB
+	deals with a file that has the same name as the specified pid to
+	attach to.  Add example using -p option.
+	(gdb man): Remove same sentence as in previous item.
+
+2019-06-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (GDB/MI Catchpoint Commands): Add menu entry to new
+	node.
+	(C++ Exception GDB/MI Catchpoint Commands): New node to describe
+	new MI commands.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Command Completion): Mention command options too.
+	(Command Options): New node.
+	(Threads): Add anchors.  Extend descriptions of the "taas" and
+	"tfaas" commands.
+	(Backtrace): Describe new options of the "backtrace" command.  Add
+	anchors.
+	(Frame Apply): Describe new options of the "frame apply" and
+	"faas" commands.  Add anchors.
+	(Data): Describe new options of the "print" command.  Add anchors.
+	(Compiling and Injecting Code): Mention options of the "compile
+	print" command.
+	(Maintenance Commands): Mention "maint test-options" subcommands
+	and the "maint show test-options-completion-result" command.
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Print Settings): Document "set/show print
+	raw-frame-arguments" instead of "set/show print raw
+	frame-arguments".
+
+2019-06-13  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint
+	test-settings" commands.
+
+2019-06-06  Amos Bird  <amosbird@gmail.com>
+
+	* annotate.texinfo (Multi-threaded Apps): Add entry for thread-exited
+	annotation.
+
+2019-06-04  Christian Biesinger  <cbiesinger@google.com>
+
+	* python.texi: Document new gdb.Type.objfile property.
+
+2019-06-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Help): Document the new -v apropos flag.
+	(Output Styling): Document the style name styling done by "show style".
+	Document the new title and highlight styles.
+
+2019-05-31  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Shell Commands): Document pipe command.
+	(Logging Output): Add a reference to pipe command.
+	(Convenience Variables): Document $_shell_exitcode and
+	$_shell_exitstatus.
+
+2019-05-29  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Continuing and Stepping): Document new
+	commands.
+
+2019-05-22  Alan Hayward  <alan.hayward@arm.com>
+
+	* gdb.texinfo (Shell Commands): Add debugredirect.
+
+2019-05-22  Jan Vrany  <jan.vrany@fit.cvut.cz>
+
+	* gdb.texinfo: Minor formatting fixes.
+
+2019-01-28  Jan Vrany  <jan.vrany@fit.cvut.cz>
+
+	* gdb.texinfo (Miscellaneous GDB/MI Commands): Document new
+	MI command -complete.
+
+2019-05-14  Tom de Vries  <tdevries@suse.de>
+
+	* gdb.texinfo (Automatic symbol index cache): Add concept and command
+	index entries.
+
+2019-05-14  Tom de Vries  <tdevries@suse.de>
+
+	* gdb.texinfo (Maintenance Commands): Remove superfluous
+	quoting on command index entry for "maint info selftests".
+
+2019-05-10  Tom Tromey  <tromey@adacore.com>
+
+	* python.texi (Pretty Printing API): Mention lazy computation for
+	"children".
+
+2019-05-10  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Set Catchpoints): Add text for parameter to "catch
+	exception" and "catch handlers".  Move "catch exception unhandled"
+	text.  Use @var for "catch load" and "catch unload"
+
+2019-05-08  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Symbols): Document change to ptype/o.
+
+2019-05-03  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Separate Debug Files): Document how the
+	subdirectory of the global debug directory is computed on
+	MS-Windows/MS-DOS.
+
+2019-04-29  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Print Settings): Document 'print max-depth'.
+	* guile.texi (Guile Pretty Printing API): Document that 'print
+	max-depth' can effect the display of a values children.
+	* python.texi (Pretty Printing API): Likewise.
+	(Values From Inferior): Document max_depth keyword.
+
+2019-04-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Calling): Document the new
+	set|show may-call-functions.
+
+2019-04-22  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Reverse Execution): Mention and xref process record
+	and replay.  Mention remote and system emulators.
+	(Process Record and Replay): List supported architectures.
+	Mention that "record btrace" is only supported on Intel
+	processors.
+
+2019-04-17  Alan Hayward  <alan.hayward@arm.com>
+
+	* gdb.texinfo (Other Command-Line Arguments for gdbserver)
+	(Monitor Commands for gdbserver)
+	(gdbserver man): Add debug-file option.
+
+2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+
+	* python.texi (Inferiors In Python): Rename
+	Inferior.thread_from_thread_handle to Inferior.thread_from_handle.
+	Add note about the former being deprecated.
+
+2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+
+	* python.texi (Threads In Python): Add description for method
+	InferiorThread.handle.
+
+2019-04-07  Tom Tromey  <tom@tromey.com>
+
+	* Makefile.in (all): Depend on "info".
+
+2019-04-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Convenience Funs): Document '$_creal' and
+	'$_cimag'.
+
+2019-03-30  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Convenience Vars): Document $_gdb_major and
+	$_gdb_minor.
+
+2019-03-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* python.texi (Pretty Printing API): Document use of None for the
+	display_hint.
+
+2019-03-22  Alan Hayward  <alan.hayward@arm.com>
+	    Jiong Wang  <jiong.wang@arm.com>
+
+	* gdb.texinfo (AArch64 Features): Describe pauth feature.
+
+2019-03-20  Tom Tromey  <tromey@adacore.com>
+
+	* python.texi (Selecting Pretty-Printers): Use @defvar for
+	gdb.pretty_printers.
+
+2019-03-14  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdb.texinfo (GDB/MI Development and Front Ends): Fix closing
+	of table, "@end @table" -> "@end table".
+
+2019-03-14  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Output Styling): Document "set style source" and
+	"show style source".
+
+2019-03-13  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Mode Options): Mention mi3.
+	(Interpreters): Likewise.
+	(GDB/MI Development and Front Ends): Add entry for MI 3 in
+	version table.  Document -fix-multi-location-breakpoint-output.
+	(GDB/MI Breakpoint Information): Document format of breakpoint
+	location output.
+
+2019-03-05  Simon Marchi  <simon.marchi@efficios.com>
+
+	* python.texi (Values From Inferior): Change synopsys of the
+	second form of Value.__init__.
+
+2019-03-02  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Output Styling): Fix typos.  Document the default
+	foreground colors of the available styles.
+
+2019-02-27  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdb.texinfo (Configure Options): Document minimum python
+	version.
+
+2019-02-26  Kevin Buettner  <kevinb@redhat.com>
+
+	* python.texi (Values From Inferior): Document second form
+	of Value.__init__.
+
+2019-02-23  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo: Update copyright year ranges.
+	* refcard.tex: Likewise.
+
+2019-02-21  Alan Hayward  <alan.hayward@arm.com>
+
+	* gdb.texinfo: Update style defaults.
+
+2019-02-21  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Remote Configuration): Remove trailing "." from
+	@item.
+
+2019-01-16  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Development and Front Ends): Add table of
+	MI versions.  Update text around it.
+
+2019-01-14  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* gdb.texinfo (PowerPC Features): Document the alias
+	pseudo-registers for the org.gnu.gdb.power.altivec feature.
+
+2019-01-09  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Print Settings): Remove mention of specific
+	demangle-style values, just refer to the in-process help.
+
+2018-12-28  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Output Styling): New node.
+
+2018-12-13  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (Set Catchpoints): Add an anchor for 'catch syscall'.
+	(Native): Add a FreeBSD subsection.
+	(FreeBSD): Document use of system call aliases for compatibility
+	system calls.
+
+2018-11-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Standard Target Features): Add RISC-V Features
+	sub-section.
+
+2018-11-20  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Examining the Symbol Table): Document language choice
+	for 'info types|functions|variables' commands.
+	(Setting Breakpoints): Document language choice to print
+	the functions in which a breakpoint is set.
+
+2018-11-09  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* gdb.texinfo (PowerPC Features): Document the altivec and fpu
+	requirements for the org.gnu.gdb.power.vsx feature.
+
+2018-11-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ada Tasks): Update the "info task 2" example
+	output to match the current implementation.
+
+2018-10-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Information About a Frame): Document changes
+	to 'info args' and 'info locals'.
+	(Examining the Symbol Table): Document changes to 'info functions'
+	and 'info variables'.
+
+2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* gdb.texinfo (PowerPC Features): Describe new features
+	"org.gnu.gdb.power.htm.spr", "org.gnu.gdb.power.htm.core",
+	"org.gnu.gdb.power.htm.fpu", "org.gnu.gdb.power.htm.altivec",
+	"org.gnu.gdb.power.htm.vsx", "org.gnu.gdb.power.htm.ppr",
+	"org.gnu.gdb.power.htm.dscr", "org.gnu.gdb.power.htm.tar".
+
+2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* gdb.texinfo (PowerPC Features): Describe new features
+	"org.gnu.gdb.power.ebb" and "org.gnu.gdb.power.linux.pmu".
+
+2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* gdb.texinfo (PowerPC Features): Describe new feature
+	"org.gnu.gdb.power.tar".
+
+2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+	* gdb.texinfo (PowerPC Features): Describe new features
+	"org.gnu.gdb.power.ppr" and "org.gnu.gdb.power.dscr".
+
+2018-10-20  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (TUI Commands): Add @end table.
+	(TUI Configuration): Remove stray @end table.
+
+2018-10-19  Tom Tromey  <tom@tromey.com>
+
+	PR tui/18388:
+	* gdb.texinfo (TUI Commands): Remove tabset documentation.
+	(TUI Configuration): Document "set tui tab-width".
+
+2018-10-09  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Inferiors In Python): Link to "Frames In Python",
+	not "Unwinding Frames in Python".
+
+2018-10-09  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Configure Options): Update --enable-ubsan
+	documentation.
+
+2018-10-08  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (Contributors): Add SRI International and University
+	of Cambridge for FreeBSD/riscv.
+
+2018-10-06  Tom Tromey  <tom@tromey.com>
+
+	PR python/19399:
+	* python.texi (Inferiors In Python): Document
+	Inferior.Architecture.
+
+2018-10-06  Tom Tromey  <tom@tromey.com>
+
+	PR python/21765:
+	* python.texi (Symbols In Python): Document the module and
+	common-block domains.  Remove documentation for incorrect
+	domains.
+
+2018-10-03  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Configure Options): Document --enable-ubsan.
+
+2018-10-02  John Darrington <john@darrington.wattle.id.au>
+
+        * gdb.texinfo (Remote Connection Commands): Describe
+	  the changes to target remote and target extended-remote
+	  relating to Unix domain sockets.
+
+2018-10-01  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Configure Options): Document configure options.
+
+2018-09-29  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Requirements): Mention C++, GNU make.
+	(Requirements): Sort the table.  Add more libraries.
+	(Running Configure): Remove obsolete text.
+	(Separate Objdir): Likewise.
+	(Configure Options): Likewise.
+
+2018-09-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Frames): Rewrite the description of 'frame number'
+	to highlight that the number is also the frame's level.
+	(Selection): Rewrite documentation for 'frame' and 'select-frame'
+	commands.
+	(Frame Info): Rewrite documentation for 'info frame' command.
+
+2018-09-23  Tom Tromey  <tom@tromey.com>
+
+	PR python/18852:
+	* python.texi (Parameters In Python): Document exception behavior
+	of get_set_string.
+
+2018-09-18  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (info proc): Remove "running".
+	(info proc mappings): Replace "program" with "process".
+
+2018-09-18  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (Process Information): Document "info proc files"
+	command.
+
+2018-09-17  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Index Files): Update for cache directory change on
+	macOS.
+
+2018-09-16  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Basic Python): Update docs for find_pc_line,
+	solib_name.
+	(Progspaces In Python): Update docs for current_progspace.
+	Document block_for_pc, find_pc_line, is_valid, nsolib_name.
+	Move method documentation before example.
+
+2018-09-13  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* python.texi (Objfiles In Python): Update gdb.objfiles() doc.
+
+2018-09-13  Simon Marchi  <simon.marchi@ericsson.com>
+2018-09-13  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Program Spaces In Python): Document the
+	Progspace.objfiles method.
+	(Objfiles In Python): Mention that gdb.objfiles() is identical
+	to gdb.selected_inferior().progspace.objfiles().
+
+2018-09-13  Simon Marchi  <simon.marchi@ericsson.com>
+2018-09-13  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Inferiors In Python): Document
+	Inferior.progspace.
+	(Program Spaces In Python): Document that
+	gdb.current_progspace() is the same as
+	gdb.selected_inferior().progspace.
+
+2018-09-13  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* python.texi (Basic Python): Mention the string representation
+	of GDB Python objects.
+
+2018-09-12  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Skipping Over Functions and Files): Document
+	set/show debug skip.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Frames In Python, Blocks In Python)
+	(Symbols In Python, Symbol Tables In Python)
+	(Lazy Strings In Python): Remove periods from section titles.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Pretty Printing API): Swap sentence order.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	PR python/16461:
+	* python.texi (Values From Inferior): Mention use of virtual
+	table.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Basic Python): Parenthesize argument to
+	decode_line.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Python): Mention Python versions.  Don't mention
+	execfile.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	PR python/19808:
+	* python.texi (Unwinding Frames in Python): Rewrite
+	create_unwind_info documentation.  Update read_register
+	documentation and add a note about unwinder caution.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	PR python/18909:
+	* python.texi (Events In Python): Fix inferior_call
+	documentation.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	PR python/17752:
+	* python.texi (Frame Filter API): Remove period from subsection
+	title.  Mention 100 as good default priority.
+	(Frame Decorator API): Remove period from subsection title.
+	Mention FrameDecorator module.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	PR python/23108:
+	* python.texi (Exception Handling): Rearrange gdb.GdbError text
+	and add a table.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Compilation): Use "gcc", not "gcc.info", in @xref.
+	(Machine Code): Use "binutils", not "binutils.info", in @pxref.
+	(Separate Debug Files): Use "ld", not "ld.info", in @ref.
+	* python.texi (Objfiles In Python): Use "ld", not "ld.info", in @ref.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	PR python/16484:
+	* python.texi (Frames In Python): Document that Frame.block can
+	throw.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	PR python/23487:
+	* gdb.texinfo (Pretty-Printer Commands): Fix typo in example.
+
+2018-09-10  Tom Tromey  <tom@tromey.com>
+
+	PR python/16033:
+	* python.texi (Blocks In Python): Document that Block.end is
+	exclusive.
+
+2018-08-29  Keith Seitz  <keiths@redhat.com>
+
+	* gdb.texinfo (Compiling and injecting code in GDB): Document
+	set/show "compile-oracle" and "compile-cplus-types" commands.
+
+2018-08-22  Jan Vrany  <jan.vrany@fit.cvut.cz>
+
+	* gdb.texinfo (The -stack-list-frames Command): Update description
+	to mention "arch".
+	Update MI examples throughout the document to contain "arch" in
+	frame output.
+
+2018-08-21  Alan Hayward  <alan.hayward@arm.com>
+
+	* gdb.texinfo (AArch64 SVE): New subsubsection.
+
+2018-08-14  Jan Vrany  <jan.vrany@fit.cvut.cz>
+
+	* gdb.texinfo (GDB/MI Data Manipulation): Document
+	"-data-disassemble -a addr".
+	(GDB/MI Support Commands): Document "data-disassemble-a-option"
+	feature.
+
+2018-08-07  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Index Files Speed Up GDB): Add section about
+	symbol index cache.
+
+2018-07-27  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (gcore man): Rewrite "Description" and "-o"
+	option sections to further clarify that gcore can take more
+	than one PID, and that "-o" is used to specify a prefix, not a
+	filename.
+
+2018-07-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Maintenance Commands): Add description of
+	maintenance command to control dwarf unwinders.
+
+2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Debugging Programs with Multiple Threads):
+	Document changes to 'thread apply'.  Document 'taas'.
+	Document 'tfaas'.
+	(Examining the Stack): Document 'frame apply'.  Document 'faas'.
+
+2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Paul Fertser  <fercerpav@gmail.com>
+	    Tsutomu Seki  <sekiriki@gmail.com>
+
+	* gdb.texinfo (Remote Connection Commands): Add explanation
+	about new IPv6 support.  Add new connection prefixes.
+
+2018-07-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Remote Configuration): Update descriptions for
+	set/show of hardware-watchpoint-limit, hardware-breakpoint-limit,
+	and hardware-watchpoint-length-limit variables.
+
+2018-07-02  Maciej W. Rozycki  <macro@mips.com>
+
+	PR tdep/8282
+	* gdb.texinfo (Source and Machine Code): Document `set
+	disassembler-options' support for the MIPS target.
+
+2018-06-28  Petr Tesarik  <ptesarik@suse.cz>
+
+	* gdb.texinfo (Files): Document "add-symbol-file -o offset".
+
+2018-06-28  Petr Tesarik  <ptesarik@suse.cz>
+
+	* gdb.texinfo (Files): The address argument for "add-symbol-file"
+	is no longer mandatory.
+
+2018-06-28  Petr Tesarik  <ptesarik@suse.cz>
+
+	* gdb.texinfo (Files): Document "symbol-file -o offset".
+
+2018-06-14  Tom de Vries  <tdevries@suse.de>
+
+	* gdb.texinfo (Background Execution): Add @cindex for '&'.
+
+2018-06-11  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Maintenance Commands): Add a missing @anchor.
+
+2018-06-08  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint check
+	libthread-db" and "maint set/show check-libthread-db".
+
+2018-06-05  Tom Tromey	<tom@tromey.com>
+
+	PR cli/12326:
+	* gdb.texinfo (Screen Size): Document "c" response to pagination
+	prompt.
+
+2018-05-31  Maciej W. Rozycki  <macro@mips.com>
+
+	* gdb.texinfo (Choosing Target Byte Order): Document endianness
+	selection details with the `set endian auto' mode.
+
+2018-05-31  Alan Hayward  <alan.hayward@arm.com>
+
+	* gdb.texinfo: Describe SVE feature.
+
+2018-05-04  Tom Tromey  <tom@tromey.com>
+
+	PR python/22731:
+	* python.texi (Breakpoints In Python): Mention that "commands" is
+	writable.
+
+2018-05-02  Tom Tromey  <tom@tromey.com>
+
+	PR python/20084:
+	* python.texi (Parameters In Python): Document PARAM_ZUINTEGER and
+	PARAM_ZUINTEGER_UNLIMITED.
+
+2018-04-30  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Types In Python): Document Type.align.
+
+2018-04-13  Andreas Arnez  <arnez@linux.vnet.ibm.com>
+
+	* gdb.texinfo (Symbols): Mention the fact that "info
+	variables/functions/types" show source files and line numbers.
+
+2018-04-13  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo: Document set/show record btrace cpu.
+
+2018-03-27  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ada Settings): New subsubsection.
+
+2018-03-26  Tom Tromey  <tom@tromey.com>
+
+	PR backtrace/15582:
+	* gdb.texinfo (Backtrace): Mention "hide" argument.
+
+2018-03-26  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Backtrace): Describe options individually.
+
+2018-03-19  Tom Tromey  <tom@tromey.com>
+
+	* observer.texi: Remove.
+
+2018-03-04  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (Debugging Output): Document "set/show debug
+	fbsd-nat".
+
+2018-02-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Machine Code): Additional information about "info
+	line" command.
+
+2018-01-15  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* gdb.texinfo (gdb-add-index man): Add pindex.
+
+2018-01-15  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* gdb.texinfo (set cwd): Add period.
+	(gdb-add-index man): Move anchor.
+
+2017-01-12  Tom Tromey  <tom@tromey.com>
+	    Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (Index Files): Mention gdb-add-index.
+	(gdb-add-index man): New section.
+	* Makefile.in (gdb-add-index.1): New rule to generate manpage
+	from gdb.texinfo.
+
+2018-01-11  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* gdb.texinfo (pwd): Fix whitespace.
+
+2018-01-09  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (pwd): Update cross-reference for Process Information
+	node and remove explicit /proc reference.
+	(Native): Rename subsection from SVR4 Process Information to
+	Process Information.
+	(Process Information): Reword introduction to be less /proc
+	centric.  Document support for "info proc" on FreeBSD.
+
+2018-01-03  Xavier Roirand  <roirand@adacore.com>
+
+	* gdb.texinfo (Set Catchpoints): Add documentation for new
+	"catch handlers" action.
+
+2017-12-27  Stafford Horne  <shorne@gmail.com>
+
+	* gdb.texinfo (Target Description Format): Explain that arbitrary
+	strings are now allowed for register groups.
+
+2017-12-27  Stafford Horne  <shorne@gmail.com>
+
+	* gdb.texinfo (Registers): Document info reg $reggroup feature.
+
+2017-12-15  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR cli/16224
+	* gdb.texinfo (ptype): Add documentation for new flag '/o'.
+
+2017-12-13  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* python.texi (Manipulating breakpoints using Python): Document
+	qualified parameter to gdb.Breakpoint.
+
+2017-12-13  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* python.texi (Manipulating breakpoints using Python): Split doc
+	of Breakpoint.__init__ in two, split text in multiple
+	paragraphs, don't nest parameter square brackets.
+
+2017-12-12  Stafford Horne  <shorne@gmail.com>
+	    Stefan Wallentowitz  <stefan@wallentowitz.de>
+	    Franck Jullien  <franck.jullien@gmail.com>
+	    Jeremy Bennett  <jeremy.bennett@embecosm.com>
+
+	* gdb.texinfo: Add OpenRISC documentation.
+
+2017-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Index Files): Document .debug_names and -dwarf-5.
+
+2017-12-07  Keith Seitz  <keiths@redhat.com>
+
+	* gdb.texinfo (Symbols): Document "set print type nested-type-limit"
+	and "show print type nested-type-limit".
+
+2017-12-07  Phil Muldoon  <pmuldoon@redhat.com>
+
+       * python.texi (Breakpoints In Python): Add text relating
+	to allowed explicit locations and keywords in gdb.Breakpoints.
+
+2017-12-04  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Rust): Update trait object status
+
+2017-12-01  Andrew Cagney  <cagney@redhat.com>
+	    Joel Brobecker  <brobecker@adacore.com>
+	    Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (File Options): Document --readnever.
+	(Commands to Specify Files): Likewise, for 'symbol-file' and
+	'add-symbol-file'.
+
+2017-11-29  Pedro Alves  <palves@redhat.com>
+
+	PR c++/19436
+	* gdb.texinfo (Debugging C Plus Plus): Document setting
+	breakpoints in functions with ABI tags.
+
+2017-11-29  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Linespec Locations): Document how "function" is
+	interpreted in C++ and Ada.  Document "-qualified".
+	(Explicit Locations): Document how "-function" is interpreted in
+	C++ and Ada.  Document "-qualified".
+
+2017-11-26  Dominik Czarnota  <dominik.b.czarnota@gmail.com>
+
+	PR gdb/21945
+	* gdb.texinfo (Search Memory): Update description and example
+	about how to search a string without NULL terminator.
+
+2017-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Ada Exception Information): Document
+	new "exception-message" field.
+
+2017-11-24  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Memory Map Format): Update gdb-memory-map.dtd.
+
+2017-11-24  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Completion): Update need-quoting examples.  Remove
+	false claim that GDB inserts quoting automatically.
+	(Symbols): Add anchor.
+
+2017-11-22  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdb.texinfo (Requirements): Document use of GNU MPFR.
+
+2017-11-16  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* python.texi (Basic Python): Add rbreak documentation.
+
+2017-11-07  Xavier Roirand  <roirand@adacore.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Set Breaks): Document support for breakpoint
+	location ranges in the enable/disable commands.
+
+2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (Starting your Program) <The working directory.>:
+	Mention remote debugging.
+	(Working Directory) <Your Program's Working Directory>:
+	Likewise.
+	(Connecting) <Remote Packet>: Add "set-working-dir"
+	and "QSetWorkingDir" to the table.
+	(Remote Protocol) <QSetWorkingDir>: New item, explaining the
+	packet.
+
+2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (Starting your Program) <The working directory.>:
+	Mention new "set cwd" command.
+	(Working Directory) <Your Program's Working Directory>:
+	Rephrase to explain that "set cwd" exists and is the default
+	way to change the inferior's cwd.
+
+2017-09-25  Andreas Arnez  <arnez@linux.vnet.ibm.com>
+
+	* gdb.texinfo (S/390 and System z Features): Document the new
+	features org.gnu.gdb.s390.gs and org.gnu.gdb.s390.gsbc.
+
+2017-09-21  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdb.texinfo (qXfer:threads:read): Add documentation for handle
+	attribute.
+
+2017-09-21  Kevin Buettner  <kevinb@redhat.com>
+
+	* python.texi (Inferiors In Python): Add description for method
+	Inferior.thread_from_thread_handle.
+
+2017-09-19  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (Starting your Program): Add description of
+	starti command.  Mention starti command as an alternative for
+	debugging the elaboration phase.
+
+2017-09-16  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Maintenance Commands): Document filter parameter
+	of "maint selftest".  Document "maint info selftests" command.
+
+2017-09-11  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Events In Python): Document new events.
+
+2017-09-04  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Variables) <Program Variables>: Document inspecting
+	no-debug-info variables.
+	(Symbols) <Examining the Symbol Table>: Document inspecting
+	no-debug-info types.
+	(Calling) <Calling functions with no debug info>: New subsection,
+	documenting calling no-debug-info functions.
+	(Non-debug DLL Symbols) <Working with Minimal Symbols>: Update.
+
+2017-08-31  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (set environment): Add @anchor.  Explain that
+	environment variables set by the user are sent to GDBserver.
+	(unset environment): Likewise, but for unsetting variables.
+	(Connecting) <Remote Packet>: Add "environment-hex-encoded",
+	"QEnvironmentHexEncoded", "environment-unset", "QEnvironmentUnset",
+	"environment-reset" and "QEnvironmentReset" to the table.
+	(Remote Protocol) <QEnvironmentHexEncoded, QEnvironmentUnset,
+	QEnvironmentReset>: New item, explaining the packet.
+
+2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Compiling and Injecting Code): Add to subsection
+	"Compiler search for the compile command" descriptions of set
+	compile-gcc and show compile-gcc.
+
+2017-08-07  Weimin Pan  <weimin.pan@oracle.com>
+
+	* gdb.texinfo (Architectures): Add new Sparc64 section to document
+	ADI support.
+	* NEWS: Add "adi examine" and "adi assign" commands.
+
+2017-08-18  Yao Qi  <yao.qi@linaro.org>
+
+	* gdb.texinfo (Server): Document "--selftest".
+
+2017-08-16  Ruslan Kabatsayev  <b7.10110111@gmail.com>
+
+	* gdb.texinfo (TUI Single Key Mode): Document the new shortcuts in
+	Single-Key mode.
+
+2017-08-12  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR gdb/21925
+	* gdb.texinfo (Starting) <startup-with-shell>: Fix typo ("show
+	set...").
+
+2017-08-09  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Packets): Fix Z0 cmd_list doc referring to
+	conditional expression.
+
+2017-07-31  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* agentexpr.texi (rot): Fix symbolic description, improve
+	textual description.
+
+2017-07-26  Yao Qi  <yao.qi@linaro.org>
+
+	* gdb.texinfo (Maintenance Commands): Document command
+	"maint check xml-descriptions".
+
+2017-07-26  Yao Qi  <yao.qi@linaro.org>
+
+	* gdb.texinfo (Maintenance Commands): Document optional
+	argument of "maint print c-tdesc".
+
+2017-07-18  Yao Qi  <yao.qi@linaro.org>
+
+	* gdb.texinfo (Maintenance Commands): Improve the doc to
+	command "maint print c-tdesc".
+
+2017-06-20  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR gdb/21606
+	* python.texi (Python representation of Symbols.): Replace
+	SYMBOL_FUNCTION_DOMAIN by SYMBOL_FUNCTIONS_DOMAIN, fixing typo.
+	* guile.texi (Guile representation of Symbols.): Likewise.
+
+2017-06-11  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Optional Messages about Internal Happenings):
+	Document {set,show} debug separate-debug-file commands.
+
+2017-06-07  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (Starting) <startup-with-shell>: Add @anchor.
+	(Connecting) <Remote Packet>: Add "startup-with-shell"
+	and "QStartupWithShell" to the table.
+	(Remote Protocol) <QStartupWithShell>: New item, explaining the
+	packet.
+
+2017-05-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Packets): Document vMustReplyEmpty packet.
+
+2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
+
+	* python.texi (Recording in Python): Factor out the documentation of
+	gdb.RecordInstruction's super class.
+
+2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
+
+	* python.texi (Recording in Python): Replace gdb.BtraceFunction with
+	gdb.RecordFunctionSegment.  Rename prev_sibling and next_sibling to
+	prev and next.
+
+2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
+
+	* python.texi (Recording in Python): Replace gdb.BtraceInstruction with
+	gdb.RecordInstruction
+
+2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
+
+	* python.texi (Recording in Python): Add documentation for
+	gdb.RecordGap and remove documentation of special cases for
+	gdb.BtraceInstruction.
+
+2017-05-01  Tim Wiederhake  <tim.wiederhake@intel.com>
+
+	* python.texi (Recording in Python): Remove Record.ptid defvar.
+
+2017-04-21  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Thread Information): Add missing
+	fields, re-word some things.
+	(GDB/MI Thread Commands): Describe fields found in the output of
+	-thread-info, remove description of fields in the
+	thread output tuple, replace with a cross-reference to "GDB/MI
+	Thread Information".
+
+2017-04-21  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Thread Commands): Remove "current" field
+	from -thread-info output.
+
+2017-03-28  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* gdb.texinfo (Synopsys ARC): Document "set debug arc 2".
+
+2017-03-28  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* gdb.texinfo (Synopsys ARC): Add "maint print arc arc-instruction".
+
+2017-03-22  Yao Qi  <yao.qi@linaro.org>
+
+	* python.texi (Inferiors In Python): Remove @code from Python.
+
+2017-03-21  Tim Wiederhake  <tim.wiederhake@intel.com>
+
+	* python.texi (Recordings In Python): Document return type of
+	gdb.BtraceInstruction.data.
+
+2017-03-20  Marc-Andre Laperle  <marc-andre.laperle@ericsson.com>
+
+	* gdb.texinfo (gdb/mi Symbol Query Commands): Document new MI
+	command file-list-shared-libraries
+	(GDB/MI Async Records): Update documentation of library-loaded with new
+	field.
+
+2017-03-20  Artemiy Volkov  <artemiyv@acm.org>
+
+	PR gdb/14441
+	* doc/gdb.texinfo (C Plus Plus Expressions): Mention that GDB
+	supports both lvalue and rvalue references.
+
+2017-03-20  Artemiy Volkov  <artemiyv@acm.org>
+
+	PR gdb/14441
+	* python.texi (Types in Python): Add TYPE_CODE_RVALUE_REF to
+	table of constants.
+
+2017-03-16  Doug Evans  <dje@google.com>
+
+	* guile.texi (Lazy Strings In Guile): Mention arrays.
+	* python.texi (Lazy Strings In Python): Ditto.
+
+2017-03-08  Jiong Wang  <jiong.wang@arm.com>
+
+        * gdb.texinfo (Memory Protection Extensions): Add missing escape
+	character "@".
+
+2017-03-07  Walfred Tedeschi <walfred.tedeschi@intel.com>
+
+	* Memory Protection Extensions: Add information about inferior
+	calls.
+
+2017-02-28  Peter Bergner  <bergner@vnet.ibm.com>
+
+	* gdb.texinfo: Document new set/show disassembler-options
+	commands.
+
+2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Print Settings, Tail Call Frames): Rename DW_OP_GNU_*,
+	DW_TAG_GNU_* and DW_AT_GNU_*.
+
+2017-02-14  Tim Wiederhake  <tim.wiederhake@intel.com>
+
+	* python.texi (Recordings In Python): New section.
+
+2017-02-14  Tom Tromey  <tom@tromey.com>
+
+	PR python/13598:
+	* python.texi (Events In Python): Document events.before_prompt.
+
+2017-02-13  Luis Machado  <lgustavo@codesourcery.com>
+
+	* gdb.texinfo (Target Commands): Document the optional offset
+	argument for the load command.
+
+2017-02-10  Martin Galvan  <martingalvan@sourceware.org>
+
+	PR gdb/21122
+	* gdb.texinfo (Breakpoints): Reword documentation to speak in terms of
+	space-separated breakpoint lists.  Also add a missing @table command
+	and @cindex for breakpoint lists.
+
+2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>
+
+	PR tdep/20936
+	* gdb.texinfo: (Standard Target Features): Document SPARC features.
+	(Sparc Features): New node.
+
+2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
+
+	* gdb.texinfo (i386 Features): Add system segment registers
+	as feature.
+
+2017-01-24  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* python.texi (Events In Python): Fix typo.
+
+2017-01-20  Mike Wrighton  <mike_wrighton@codesourcery.com>
+	    Luis Machado  <lgustavo@codesourcery.com>
+
+	* gdb.texinfo (-target-flash-erase): New MI command description.
+	(flash-erase): New CLI command description.
+
+2017-01-04  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (Contributors): Add SRI International and University
+	of Cambridge for FreeBSD/mips.
+
+2016-12-22  Doug Evans  <xdje42@gmail.com>
+
+	* gdb.texinfo (Symbols): Update docs for symbol printing maintenance
+	commands.
+
+2016-12-02  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (User-defined Commands): Limit on number of
+	arguments passed to user-defined commands removed; update.
+
+2016-12-02  Pedro Alves  <palves@redhat.com>
+
+	PR cli/20559
+	* gdb.texinfo (Define): Add example of using "eval" to process a
+	variable number of arguments.
+	(Output) <eval>: Add anchor.
+
+2016-11-30  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* Makefile.in: Likewise.
+
+2016-11-18  Andreas Arnez  <arnez@linux.vnet.ibm.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Add missing comma after
+	xref.
+
+2016-10-29  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Packets) <vCont>: Remove mention of default
+	actions.
+
+2016-10-26  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Packets): Clarify vCont packets with multiple
+	actions that match a thread, and what happens when an action
+	matches a thread that is already running.
+
+2016-10-14  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Using Trace Files): Fix typo.
+	(GDB/MI Tracepoint Commands): Likewise.
+
+2016-10-14  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Tracepoint Commands): Document -ctf switch
+	of -trace-save.
+
+2016-10-06  Tom Tromey  <tom@tromey.com>
+
+	* guile.texi (Types In Guile): Remove Java mentions.
+	* python.texi (Types In Python): Remove Java mentions.
+	* gdb.texinfo (Address Locations, Supported Languages)
+	(Index Section Format): Remove Java mentions.
+
+2016-08-15  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Target Description Format): Update docs on "end"
+	field spec and field default type.
+
+2016-10-03  Antoine Tremblay  <antoine.tremblay@ericsson.com>
+2016-10-03  Simon Marchi  <simon.marchi@ericsson.com>
+
+	PR gdb/20487
+	* gdb.texinfo (Context management): Update mention of frame
+	change notifications.
+	(gdb/mi Async Records): Document frame field in
+	=thread-select event.
+	* observer.texi (GDB Observers): New user_selected_context_changed
+	observer.
+
+2016-09-28  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Packets) <z0>: Use "software breakpoint" rather
+	than "memory breakpoint".  Further document "kind".  Move
+	protocol-details link earlier.
+	<z1>: Document the cmd_list argument.  Fix typo.
+	<g>: Remove incorrect sentence.
+	(Stop Reply Packets): Document "OK" response to requests when in
+	non-stop mode.
+	<swbreak>: Use "software breakpoint" rather than "memory
+	breakpoint".
+	<create>: Document that "R" is ignored.
+	<W, X, w>: Document formatting of "AA".
+	(Notification Packets): Use "%Stop", not "%%Stop".
+
+2016-09-21  Anton Kolesov  <anton.kolesov@synopsys.com>
+
+	* gdb.texinfo (Embedded Processors): Document ARC.
+	(Synopsys ARC): New section.
+	(Standard Target Features): Document ARC features.
+	(ARC Features): New section.
+
+2016-09-21  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* .gitignore: New file.
+
+2016-08-24  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Input/Output): Mention possibility to unset
+	inferior-tty.
+
+2016-07-25  Tim Wiederhake  <tim.wiederhake@intel.com>
+
+	* gdb.texinfo: Resume btrace on reconnect.
+
+2016-07-23  Gabriel Krisman Bertazi  <gabriel@krisman.be>
+
+	* gdb.texinfo (Set Catchpoints): Add 'group' argument to catch
+	syscall.
+
+2016-06-30  Ð ÑƒÑ�Ð»Ð°Ð½ Ð˜Ð¶Ð±ÑƒÐ»Ð°Ñ‚Ð¾Ð²  <lrn1986@gmail.com>
+
+	* gdb.texinfo (Cygwin Native): Document the new 'signal-event'
+	command.
+
+2016-07-13  Tom Tromey  <tom@tromey.com>
+
+	PR python/15620, PR python/18620:
+	* python.texi (Events In Python): Document new breakpoint events.
+
+2016-07-13  Tom Tromey  <tom@tromey.com>
+
+	PR python/17698:
+	* python.texi (Breakpoints In Python): Document
+	Breakpoint.pending.
+
+2016-07-13  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Breakpoints In Python): Move table of types and
+	table of watchpoint types earlier in node.
+
+2016-07-12  Tom Tromey  <tom@tromey.com>
+
+	PR python/19293:
+	* python.texi (Frames In Python): Document
+	gdb.invalidate_cached_frames.
+
+2016-06-21  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Interpreters): Update intepreter-exec section,
+	document new-ui and explain use case.
+
+2016-06-17  Yan-Ting Lin  <currygt52@gmail.com>
+
+	* gdb.texinfo (Standard Target Features): Document NDS32 features.
+	(NDS32 Features): New Section.
+
+2016-06-09  Toshihito Kikuchi  <k.toshihito@yahoo.de>
+
+	* gdb.texinfo (Examining Memory): Document negative repeat
+	count in the 'x' command.
+
+2016-06-06  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Document method and
+	format fields in =record-started.
+	* observer.texi (record_changed): Add method and format
+	parameters.
+
+2016-05-27  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (General Query Packets): Move the description of the
+	response before the long list of the specific 'read' and 'write'
+	requests.
+
+2016-05-23  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Basic Python): Document gdb.breakpoints return.
+
+2016-05-24  Tom Tromey  <tom@tromey.com>
+
+	PR gdb/19194:
+	* gdb.texinfo (gdb man): Fix typo.
+
+2016-05-17  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Supported Languages): Mention Rust.  Update menu.
+	(Rust): New node.
+
+2016-05-17  Tom Tromey  <tom@tromey.com>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint selftest".
+
+2016-04-27  Yao Qi  <yao.qi@linaro.org>
+
+	* gdb.texinfo (tfind): Complete doc about tfind without
+	argument.
+
+2016-04-13  Antoine Tremblay  <antoine.tremblay@ericsson.com>
+
+	* agentexpr.texi (byte): Fix zero_ext description.
+
+2016-03-31  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (M32R/SDI): Delete node.
+	(MIPS Embedded): Remove references to the MIPS remote debugging
+	protocol, PMON and variants, and the associated commands.
+
+2016-03-15  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Target Descriptions): New menu item "Enum Target Types".
+	(Target Description Format): Mention enum types.  Update docs on
+	flags types.
+	(Predefined Target Types): Add "bool".
+	(Enum Target Types): New node.
+
+2016-03-15  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Tracepoint Actions): Fix typo.
+
+2016-03-15  Pedro Alves  <palves@redhat.com>
+	    Andreas Arnez  <arnez@linux.vnet.ibm.com>
+	    Marcin KoÅ›cielnicki  <koriakin@0x04.net>
+
+	* gdb.texinfo (Tracepoint Actions): Document possible
+	unreliability of '$_ret'.
+
+2016-03-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Symbols): Document new 'maint info line-table'
+	command.
+
+2016-03-10  Simon Marchi  <simon.marchi@polymtl.ca>
+
+	* gdb.texinfo (Convenience Functions): Document $_as_string.
+
+2016-02-23  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Skipping Over Functions and Files): Document new
+	options to "skip" command.  Update docs of output of "info skip".
+
+2016-02-18  Walfred Tedeschi  <walfred.tedeschi@intel.com>
+
+	* gdb.texinfo (Signals): Add bound violation display hints for
+	a SIGSEGV.
+
+2016-02-18  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
+
+	* gdb.texinfo (Trace File Format): Add documentation for description
+	section lines.
+
+2016-02-10  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
+
+	* gdb.texinfo (Trace File Format): Remove misleading information
+	about register block ordering.
+
+2016-02-01  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Value Sizes): Fix typo.
+
+2016-02-01  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Skipping Over Functions and Files): Fix typo.
+
+2016-02-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Value Sizes): New section.
+	(Data): Add the 'Value Sizes' node to the menu.
+
+2016-01-26  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (Debugging Output): Fix subject verb disagreements.
+
+2016-01-19  John Baldwin  <jhb@FreeBSD.org>
+
+	* gdb.texinfo (Debugging Output): Document "set/show debug fbsd-lwp".
+
+2016-01-18  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Threads): Mention that GDB displays the ID and name
+	of the thread that hit a breakpoint or received a signal.
+
+2016-01-15  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Threads) <thread ID lists>: Document star ranges.
+
+2016-01-13  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Threads): Document the $_gthread convenience
+	variable.
+	(Convenience Vars): Likewise.
+
+2016-01-13  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Threads): Document "info threads -gid".
+
+2016-01-13  Pedro Alves  <palves@redhat.com>
+
+	* python.texi (Breakpoints In Python) <Breakpoint.thread>: Add
+	anchor.
+	(Threads In Python): Document new InferiorThread.global_num
+	attribute.
+
+2016-01-07  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Threads): Document per-inferior thread IDs,
+	qualified thread IDs, global thread IDs and thread ID lists.
+	(Set Watchpoints, Thread-Specific Breakpoints): Adjust to refer to
+	thread IDs.
+	(Convenience Vars): Document the $_thread convenience variable.
+	(Ada Tasks): Adjust to refer to thread IDs.
+	(GDB/MI Async Records, GDB/MI Thread Commands, GDB/MI Ada Tasking
+	Commands, GDB/MI Variable Objects): Update to mention global
+	thread IDs.
+	* guile.texi (Breakpoints In Guile)
+	<breakpoint-thread/set-breakpoint-thread breakpoint>: Mention
+	global thread IDs instead of thread IDs.
+	* python.texi (Threads In Python): Adjust documentation of
+	InferiorThread.num.
+	(Breakpoint.thread): Mention global thread IDs instead of thread
+	IDs.
+
+2016-01-13  Pedro Alves  <palves@redhat.com>
+
+	* python.texi (Threads In Python): Document
+	InferiorThread.inferior.
+
+2016-01-13  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Inferiors and Programs): Document the $_inferior
+	convenience variable.
+	(Convenience Vars): Likewise.
+
+2016-01-12  Josh Stone  <jistone@redhat.com>
+	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+
+	* gdb.texinfo (Remote Configuration): List the QCatchSyscalls packet.
+	(Stop Reply Packets): List the syscall entry and return stop reasons.
+	(General Query Packets): Describe QCatchSyscalls, and add it to the
+	table and the detailed list of stub features.
+
+2016-01-12  Pedro Alves  <palves@redhat.com>
+
+	Remove use of the registered trademark symbol throughout.
+
+2016-01-12  Yao Qi  <yao.qi@linaro.org>
+
+	* gdb.texinfo (Interrupts): Update the document on handling
+	interrupt when program is stopped.
+
+2015-12-11  Don Breazeal  <donb@codesourcery.com>
+
+	* gdb.texinfo (Forks): Correct Linux kernel version where
+	fork and exec events are supported, add notes about support
+	of these events in target remote mode.
+	(Connecting): Reorganize and clarify distinctions between
+	target remote, extended-remote, and multiprocess.
+	Reorganize related text from separate sections into new
+	sections.
+	(Server): Note effects of target extended-remote mode.
+	Delete section on Multi-Process Mode for gdbserver.
+	Move some text to "Connecting" node.
+
+2015-12-10  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Threads): Replace warning with explanation
+	about single-threaded programs.
+
+2015-12-10  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Threads): Remove mention of SGI.
+	(Forks): Remove mention of HP-UX.
+	(Breakpoints): Remove mention of HP-UX.
+	(Set Watchpoints) <hardware watchpoints>: Don't mention HP-UX.
+	Reword in terms of architectures.
+	(Set Catchpoints) <catch exec, catch fork, catch vfork>: Don't
+	mention supported systems.
+	(Convenience Vars): Don't mention HP-UX.
+	(Jumping): Remove mention of HP-UX in comment.
+	(Files) <shared libraries>: Update supported shared library types
+	list.  Remove mention of HP-UX.
+	(Native): Remove HP-UX subsection.
+	(SVR4 Process Information): Remove mention of HP-UX.
+
+2015-12-10  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Stack): Reorder menu.
+
+2015-12-09  Luis Machado  <lgustavo@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Update text to mention
+	-var-set-format's new zero-hexadecimal format.
+
+2015-12-08  Pierre-Marie de Rodat  <derodat@adacore.com>
+
+	* gdb.texinfo (Ada Mode Into): Move overloading support
+	description to its own node.
+	(Overloading support for Ada): New node.
+
+2015-11-30  Pedro Alves  <palves@redhat.com>
+
+	PR 14618
+	* gdb.texinfo (Stop Reply Packets): Document the N stop reply.
+	(Remote Configuration): Add the "set/show remote
+	no-resumed-stop-reply" to the available settings table.
+	(General Query Packets): Document the "no-resumed" qSupported
+	feature.
+
+2015-11-30  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Remote Configuration): List "set/show remote
+	thread-events" command in configuration table.
+	(Stop Reply Packets): Document "T05 create" stop
+	reason and 'w' stop reply.
+	(General Query Packets): Document QThreadEvents packet.  Document
+	QThreadEvents qSupported feature.
+
+2015-11-30  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Bootstrapping): Add "interrupting remote targets"
+	anchor.
+	(Packets): Document vCtrlC.
+
+2015-11-26  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Thread List Format): Mention thread names.
+
+2015-11-24  Pedro Alves  <palves@redhat.com>
+
+	PR 17539
+	* gdb.texinfo (Inferiors and Programs): Adjust "maint info
+	program-spaces" example to ascending order listing.
+	(Threads): Adjust "info threads" example to ascending order
+	listing.
+	(Forks): Adjust "info inferiors" example to ascending order
+	listing.
+
+2015-11-04  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Document "record
+	instruction-history" modifiers.
+
+2015-10-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Frames): Remove 'frame' and 'select-frame'
+	description.
+	(Frame Filter Management): Move to later in the 'Examining the
+	Stack' chapter.
+	(Selection): Add entry for 'select-frame'.
+
+2015-09-25  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Process Record and Replay): Fix syntax of
+	"record instruction-history begin, end" and
+	"record function-call-history begin, end".
+
+2015-09-22  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Specifying Source Directories): Fix
+	substitute-path example.
+
+2015-09-18  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (All-Stop Mode): Describe new scheduler-locking mode.
+
+2015-09-15  Pedro Alves  <palves@redhat.com>
+
+	PR remote/18965
+	* gdb.texinfo (Stop Reply Packets): Revert previous change to
+	the vforkdone description.
+
+2015-09-15  Pedro Alves  <palves@redhat.com>
+
+	PR remote/18965
+	* gdb.texinfo (Stop Reply Packets): Explain that vforkdone's 'r'
+	part indicates the thread ID of the parent process.
+
+2015-09-15  Yao Qi  <yao.qi@linaro.org>
+
+	* gdb.texinfo (General Query Packets): Add vContSupported to
+	tables of 'gdbfeatures' and 'stub features' supported in the
+	qSupported packet, as well as to the list containing stub
+	feature details.
+
+2015-09-11  Don Breazeal  <donb@codesourcery.com>
+
+	* gdb.texinfo (Remote Configuration): Add exec event
+	feature to table of packet settings.
+	(Stop Reply Packets): Add exec events to the list of stop
+	reasons.
+	(General Query Packets): Add exec events to tables of
+	'gdbfeatures' and 'stub features' supported in the qSupported
+	packet, as well as to the list containing stub feature
+	details.
+
+2015-08-24  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Remote Configuration): Document the "set/show
+	remote multiprocess-extensions-packet" commands.
+
+2015-08-24  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Embedded Processors) <ARM>: Remove references to RDI.
+	<M32R>: Remove references to M32R/D.
+	<M68K>: Remove references to target dbug.
+	<MIPS Embedded>: Remove references to target r3900 and target
+	array.
+	<PowerPC Embedded>: Remove references to target dink32 and target
+	ppcbug, target sds
+	<PA, Sparclet, Sparclite, Z8000>: Delete nodes.
+
+2015-08-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (GDB Files): Add 'File Caching' menu entry.
+
+2015-08-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (File Caching): Document "set/show debug bfd-cache".
+
+2015-08-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Maintenance Commands): Move documentation of "main
+	info bfds" to...
+	(File Caching): A New section.  Outline bfd caching, and add new
+	description for "main set/show bfd-sharing".
+
+2015-08-14  Doug Evans  <xdje42@gmail.com>
+
+	* gdb.texinfo (Machine Code): Update docs for mixed source/assembly
+	disassembly.
+	(GDB/MI Data Manipulation): Update docs for new disassembly modes.
+
+2015-08-11  Keith Seitz  <keiths@redhat.com>
+
+	* gdb.texinfo (Thread-Specific Breakpoints, Printing Source Lines):
+	Use "location(s)"instead of "linespec(s)".
+	(Specifying a Location): Rewrite.
+	Add subsections describing linespec, address, and explicit locations.
+	Add node/menu for each subsection.
+	(Source and Machine Code, C Preprocessor Macros)
+	(Create and Delete Trace points)
+	(Extensions for Ada Tasks): Use "location(s)" instead of "linespec(s)".
+	(Continuing at a Different Address): Remove "linespec" examples.
+	Add reference to "Specify a Location"
+	(The -break-insert Command): Rewrite.  Add anchor.
+	Add reference to appropriate manual section discussing locations.
+	(The -dprintf-insert Command): Refer to -break-insert for
+	specification of 'location'.
+
+2015-08-07  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint set/show
+	target-non-stop".
+
+2015-08-07  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Document prefixing of
+	speculatively executed instructions in the "record instruction-history"
+	command.
+
+2015-07-20  Doug Evans  <dje@google.com>
+
+	* Makefile.in (STABS_DOC_BUILD_INCLUDES): Add gdb-cfg.texi, GDBvn.texi.
+
+2015-07-16  Doug Evans  <dje@google.com>
+
+	* stabs.texinfo: @include gdb-cfg.texi.
+
+2015-07-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Revert the previous 2 commits:
+	gdbserver build-id attribute generator
+	Validate symbol file using build-id
+
+2015-07-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Files): Add 'set validate-build-id'
+	and 'show validate-build-id'.
+
+2015-07-15  Aleksandar Ristovski  <aristovski@qnx.com
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	gdbserver build-id attribute generator.
+	* gdb.texinfo (Library List Format for SVR4 Targets): Add
+	'build-id' in description, example, new attribute in dtd.
+
+2015-07-08  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Selection): Update documentation for 'frame'
+	command.
+
+2015-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (TUI): Restructure documentation on TUI layout and
+	focus commands.
+
+2015-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (TUI): Add comma after @xref.
+
+2015-07-02  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint btrace"
+	commands.
+
+2015-07-02  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Spell out that variables
+	and registers are not available during btrace replay.
+	Describe the new "record btrace pt" command.
+	Describe the new "set|show record btrace pt buffer-size" options.
+	(General Query Packets): Describe the new Qbtrace:pt and
+	Qbtrace-conf:pt:size packets.
+	Expand "bts" to "Branch Trace Store".
+	Update the branch trace DTD.
+
+2015-06-26  Patrick Palka  <patrick@parcs.ath.cx>
+
+	* gdb.texinfo (Command History): Document the new option
+	"history remove-duplicates".
+
+2015-06-19  Doug Evans  <dje@google.com>
+
+	* stabs.texinfo (ELF Linker Relocation): Mention Sun stabs is no
+	longer supported.
+
+2015-06-17  Patrick Palka  <patrick@parcs.ath.cx>
+
+	* gdb.texinfo (Command History): Mention that setting
+	GDBHISTSIZE to the empty string disables history truncation.
+
+2015-06-17  Patrick Palka  <patrick@parcs.ath.cx>
+
+	PR gdb/16999
+	* gdb.texinfo (Command History): Mention new GDBHISTSIZE
+	behavior.
+
+2015-06-17  Patrick Palka  <patrick@parcs.ath.cx>
+
+	* gdb.texinfo (Command History): Replace occurrences of HISTSIZE
+	with GDBHISTSIZE.
+
+2015-06-15  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Data Manipulation): Clarify usage of
+	bytes and memory units for -data-{read,write}-memory-bytes.
+	(Packets): Same for m, M and X packets.
+	* python.texi (Inferiors In Python): Same for read_memory and
+	write_memory.
+
+2015-06-10  Jon Turney  <jon.turney@dronecode.org.uk>
+
+	* gdb.texinfo (Separate Debug Files): Document that PE is also
+	supported.
+
+2015-06-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (TUI Commands): Bring all 'tui reg' commands into a
+	single table entry.
+
+2015-06-10  Walfred Tedeschi  <walfred.tedeschi@intel.com>
+
+	* gdb.textinfo (i386): Fix "@end table" end and "@table" placement.
+
+
+2015-06-10  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (Remote Configuration): Document the
+	"set/show remote hostio-setfs-packet" command.
+	(Host I/O Packets): Document the vFile:setfs packet.
+
+2015-06-10  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (Debugging Output): Document the "set/show debug
+	linux-namespaces" command.
+
+2015-06-10  Walfred Tedeschi  <walfred.tedeschi@intel.com>
+	    Mircea Gherzan  <mircea.gherzan@intel.com>
+
+	* gdb.texinfo (i386): Add documentation about "show mpx bound"
+	and "set mpx bound".
+
+2015-05-27  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Debugging Output): Mention set/show debug dwarf-line.
+
+2015-05-26  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Debugging Output): Update for DWARF "set debug"
+	command renamings.
+	(Maintenance Commands): Update for DWARF "set debug" command renamings.
+
+2015-05-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (TUI Commands): Add 'tui reg prev' details.
+
+2015-05-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (TUI): Include 'tui enable' in the introduction.
+	(TUI Commands): Add 'tui enable' and 'tui disable' details.
+
+2015-05-16  Doug Evans  <xdje42@gmail.com>
+
+	* guile.texi (Memory Ports in Guile): Document support for unbuffered
+	memory ports.
+
+2015-05-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Compiling and Injecting Code): Add compile print.
+
+2015-05-12  Don Breazeal  <donb@codesourcery.com>
+
+	* gdb.texinfo (Forks): Note that fork debugging is
+	supported in extended mode.
+	(Remote Configuration): Add fork event features to table
+	of packet settings.
+	(Stop Reply Packets): Add fork events to list of stop reasons.
+	(General Query Packets): Add fork events to tables of
+	'gdbfeatures' and 'stub features' supported in the qSupported
+	packet, as well as to the list containing stub feature
+	details.
+
+2015-05-12  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (General Query Packets): Document
+	qXfer:exec-file:read with empty annex.
+
+2015-05-09  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* python.texi (Values From Inferior): Add descriptions of new
+	methods gdb.Value.reference_value and gdb.Value.const_value.
+
+2015-05-06  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Files): Add "info dll" documentation.
+	(Cygwin Native): Remove "info dll" documentation.
+
+2015-04-29  Doug Evans  <dje@google.com>
+
+	* python.texi (Xmethod API) <gdb.XMethodWorker.get_result_type>:
+	Document.
+	(Writing an Xmethod): Add get_result_type to example.
+
+2015-04-28  Sasha Smundak  <asmundak@google.com>
+
+	* python.texi: New method documented.
+
+2015-04-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (Dump/Restore Files): Add detail about verilog dump
+	format.
+
+2015-04-24  Doug Evans  <dje@google.com>
+
+	* python.texi (Xmethods In Python): Fix name of method to call the
+	xmethod.
+
+2015-04-17  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (Connecting to a Remote Target): Mention that
+	GDB can access program files from remote targets that support
+	qXfer:exec-file:read and Host I/O packets.
+
+2015-04-17  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (Remote Configuration): Document the "set/show
+	remote pid-to-exec-file-packet" command.
+	(General Query Packets): Document the qXfer:exec-file:read
+	qSupported features.  Document the qXfer:exec-file:read packet.
+
+2015-04-17  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (set sysroot): Document that "set sysroot" also
+	applies to executable paths if supplied to GDB as absolute.
+
+2015-04-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Mode Options): Remove -xdb.
+
+2015-04-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Compiling and Injecting Code): Describe set debug
+	compile, show debug compile.  New subsection Compilation options for
+	the compile command.  New subsection Compiler search for the compile
+	command.
+
+2015-04-09  Andy Wingo  <wingo@igalia.com>
+
+	* guile.texi (Frames In Guile): Describe frame-read-register.
+
+2015-04-02  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (set sysroot): Document "target:".
+
+2015-04-01  Sasha Smundak  <asmundak@google.com>
+
+	* doc/python.texi (Writing a Frame Unwinder in Python): Add
+	section.
+
+2015-03-31  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR corefiles/16092
+	* gdb.texinfo (gcore): Mention new command 'set
+	use-coredump-filter'.
+	(set use-coredump-filter): Document new command.
+
+2015-03-31  Antoine Tremblay  <antoine.tremblay@ericsson.com>
+
+	* gdb.texinfo (Operating System Auxiliary Information): Add info os cpus
+	documentation, reorder the info os entries in alphabetical order.
+
+2015-03-26  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Data Manipulation): Fix copy-paste typo in
+	-data-write-memory-bytes.
+
+2015-03-24  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (test_step) <set scheduler-locking step>: No longer
+	mention that threads may sometimes run unlocked.
+
+2015-03-23  Yurij Grechishhev  <yurij.grechishhev@gmail.com>
+
+	* gdb.texinfo (Remote configuration): Document "set/show
+	serial parity" command.
+
+2015-03-18  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (General Query Packets): Remove documentation
+	for now-removed vFile:fstat qSupported features.
+
+2015-03-11  Gary Benson <gbenson@redhat.com>
+
+	* gdb.texinfo (Remote Configuration): Document the
+	"set/show remote hostio-fstat-packet" command.
+	(General Query Packets): Document the vFile:fstat
+	qSupported features.
+	(Host I/O Packets): Document the vFile:fstat packet.
+
+2015-03-11  Andy Wingo  <wingo@igalia.com>
+
+	* guile.texi (Objfiles In Guile): Document objfile-progspace.
+
+2015-03-04  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Remote Configuration): Document the "set/show
+	remote swbreak-feature-packet" and "set/show remote
+	hwbreak-feature-packet" commands.
+	(Packets) <Z0>: Add cross link to the "swbreak" stop reason's
+	decription.
+	(Stop Reply Packets): Document the swbreak and hwbreak stop
+	reasons.
+	(General Query Packets): Document the swbreak and hwbreak
+	qSupported features.
+	(Remote Non-Stop): Explain that swbreak and hwbreak are required.
+
+2015-03-03  Philippe Proulx  <eeppeliteloop@gmail.com>
+
+	* gdb.texinfo (gdb/mi Async Records): Fix duplicate syscall-entry
+	under *stopped.
+
+2015-03-02  Doug Evans  <xdje42@gmail.com>
+
+	* gdb.texinfo (Specify Location): Fix syntax of filename:function.
+
+2015-03-02  Andreas Arnez  <arnez@linux.vnet.ibm.com>
+
+	* gdb.texinfo (S/390 and System z Features): Describe new feature
+	"org.gnu.gdb.s390.vx".
+
+2015-02-23  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR gdb/18008
+	* gdb.texinfo (maint internal-error, maint internal-warning, maint
+	demangler-warning): Fix typo ("problam").
+
+2015-02-19  David Taylor  <dtaylor@emc.com>
+
+	* agentexpr.texi (Bytecode Descriptions): Fix summary line for setv.
+
+2015-02-17  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* gdb.texinfo (Static Probe Points): Add cindex `static probe
+	point, DTrace'.
+	(Static Probe Points): Modified to cover DTrace probes in addition
+	to SystemTap probes.  Also modified to cover the `enable probe'
+	and `disable probe' commands.
+
+2015-02-17  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* gdb.texinfo (Static Probe Points): Cover the `enable probe' and
+	`disable probe' commands.
+
+2015-02-12  David Taylor  <dtaylor@emc.com>
+
+	* gdb.texinfo (Tracepoint Packets): Document the builtin and name
+	fields of the QTDV packet.
+
+2015-02-09  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Branch Trace Configuration Format): Add size.
+	(Process Record and Replay): Describe new set|show commands.
+	(General Query Packets): Describe Qbtrace-conf:bts:size packet.
+
+2015-02-09  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Describe the "record
+	btrace bts" command.
+	(General Query Packets): Describe qXfer:btrace-conf:read packet.
+	(Branch Trace Configuration Format): New.
+
+2015-01-31  Gary Benson <gbenson@redhat.com>
+	    Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Command Completion): Document new
+	"set/show max-completions" option.
+
+2015-01-31  Doug Evans  <xdje42@gmail.com>
+
+	* gdb.texinfo (Symbols): Document new commands
+	"maint print symbol-cache", "maint print symbol-cache-statistics",
+	"maint flush-symbol-cache".  Document new option
+	"maint set symbol-cache-size".
+
+2015-01-31  Doug Evans  <xdje42@gmail.com>
+
+	* gdb.texinfo (dotdebug_gdb_scripts section): Update docs to
+	distinguish script files vs inlined scripts.
+	* python.texi (Python Auto-loading): Ditto.
+
+2015-01-30  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Symbols) <info source>: Output now contains producer
+	string if present.
+
+2015-01-27  Doug Evans  <dje@google.com>
+
+	* python.texi (Objfiles In Python): Document Objfile.username.
+
+2015-01-27  Doug Evans  <dje@google.com>
+
+	* python.texi (Objfiles In Python) <Objfile.filename>: Improve docs.
+	* guile.texi (Objfiles In Guile) <objfile-filename>: Improve docs.
+
+2015-01-22  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Threads): Describe -ascending for thread apply all.
+
+2015-01-16  Eli Zaretskii  <eliz@gnu.org>
+
+	* doc/gdb.texinfo (TUI Commands): Document the possible
+	values of NAME argument to 'winheight' command.  Explain the
+	effect of 'tabset' setting better.
+
+2015-01-11  Doug Evans  <xdje42@gmail.com>
+
+	PR gdb/15830
+	* gdb.texinfo (Debugging C Plus Plus): Mention "demangle".
+	(Symbols): Ditto.
+	(Maintenance Commands): Delete docs for "maint demangle".
+
+2014-12-31  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Files): Remove documentation of the
+	"add-shared-symbol-files" and "assf" commands.
+	(Cygwin Native): Remove documentation of the "dll-symbols"
+	command.
+
+2014-12-17  Doug Evans  <xdje42@gmail.com>
+
+	* gdb.texinfo (Debugging Output): Document "debug symbol-lookup".
+
+2014-12-12  Phil Muldoon  <pmuldoon@redhat.com>
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Altering): Update.
+	(Compiling and Injecting Code): New node.
+
+2014-12-12  Doug Evans  <dje@google.com>
+
+	* python.texi (Objfiles In Python): Document gdb.lookup_objfile.
+
+2014-12-12  Andreas Arnez  <arnez@linux.vnet.ibm.com>
+
+	* gdb.texinfo: Document "maint print user-registers".
+
+2014-12-08  Doug Evans  <dje@google.com>
+
+	* python.texi (Objfiles In Python): Document Objfile.owner.
+
+2014-12-04  Doug Evans  <dje@google.com>
+
+	* python.texi (Objfiles In Python): Document
+	Objfile.add_separate_debug_file.
+
+2014-12-04  Doug Evans  <dje@google.com>
+
+	* python.texi (Objfiles In Python): Document Objfile.build_id.
+
+2014-12-02  Nick Bull  <nicholaspbull@gmail.com>
+
+	* observer.texi (inferior_call_pre, inferior_call_post)
+	(memory_changed, register_changed): New observers.
+
+2014-12-02  Nick Bull  <nicholaspbull@gmail.com>
+
+	* python.texi (Events In Python): Document new events
+	InferiorCallPreEvent, InferiorCallPostEvent, MemoryChangedEvent
+	and RegisterChangedEvent.
+
+2014-11-30  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Add add-auto-load-scripts-directory.
+	* gdb.texinfo (Auto-loading): Add add-auto-load-scripts-directory link.
+	(objfile-gdbdotext file): Add add-auto-load-scripts-directory.
+
+2014-11-30  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading safe path): Fix add-auto-load-safe-path
+	description typo.
+
+2014-10-30  Doug Evans  <dje@google.com>
+
+	* python.texi (Progspaces In Python): Document ability to add
+	random attributes to gdb.Progspace objects.
+	(Objfiles In Python): Document ability to add random attributes to
+	gdb.objfile objects.
+
+2014-10-27  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Continuing and Stepping): Add cross reference to
+	info on stepping and signal handlers.
+	(Signals): Explain stepping and signal handlers.  Add context
+	index entry, and cross references.
+
+2014-10-20  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* python.texi (Breakpoints In Python): Add parenthesis after
+	Breakpoint.delete.  Clarify Breakpoint.enabled description so
+	that it contains "disable".
+
+2014-10-17  Doug Evans  <dje@google.com>
+
+	* python.texi (Events In Python): Document clear_objfiles event.
+
+2014-10-17  Doug Evans  <dje@google.com>
+
+	* python.texi (Objfiles In Python): Document new progspace attribute.
+
+2014-10-17  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Ada Tasks and Core Files): Delete mention of Tru64.
+	(SVR4 Process Information): Delete mention of OSF/1.
+
+2014-10-01  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* gdb.texinfo (Miscellaneous gdb/mi Commands): Document new
+	exit-code field in -list-thread-groups output.
+
+2014-09-22  Jan-Benedict Glaw  <jbglaw@lug-owl.de>
+
+	* gdb.texinfo (Set Breaks): Add missing "@end table".
+
+2014-09-22  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Set Breaks): Document that "set breakpoint
+	always-inserted off" is the default mode now.  Delete
+	documentation of "set breakpoint always-inserted auto".
+
+2014-09-18  Doug Evans  <dje@google.com>
+
+	* python.texi (Symbol Tables In Python): Document "producer"
+	attribute of gdb.Symtab objects.
+
+2014-09-16  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Starting) <run command>: Don't mention VxWorks.
+	(Embedded OS): Remove VxWorks menu entry.
+	(VxWorks): Remove node.
+
+2014-09-13  Doug Evans  <xdje42@gmail.com>
+
+	* gdb.texinfo (Signaling): Document new queue-signal command.
+
+2014-09-06  Doug Evans  <xdje42@gmail.com>
+
+	PR 15276
+	* gdb.texinfo (Convenience Funs): Document $_caller_is,
+	$_caller_matches, $_any_caller_is, $_any_caller_matches.
+
+2014-09-03  Justin Lebar <jlebar@google.com>
+
+	* python.texi (Types In Python): Type.template_argument(n) returns a
+	gdb.Value or a gdb.Type and throws an exception if n is out of
+	range.
+
+2014-09-03  Sasha Smundak  <asmundak@google.com>
+
+	* python.texi (Frames in Python): Add read_register description.
+
+2014-08-04  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Debugging Output): Update for change to "set debug
+	target".
+
+2014-08-01  Masaki Muranaka  <monaka@monami-software.com>
+
+	Pushed by Joel Brobecker  <brobecker@adacore.com>.
+	* Makefile.in (transform): New variable.
+	(install-man1, install-man5): Apply $(transform) to man file names.
+
+2014-07-26  Doug Evans  <xdje42@gmail.com>
+
+	PR guile/17177
+	* guile.texi (Guile Pretty Printing API): Fix typo.
+	Document set-pretty-printers!, pretty-printers.
+	(Selecting Guile Pretty-Printers): Update.
+	Mention program-space based pretty-printers.
+
+2014-07-25  Pedro Alves  <palves@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Signaling) <signal command>: Explain what happens
+	with multi-threaded programs.
+
+2014-07-19  Ajit Agarwal  <ajitkum@xilinx.com>
+
+	* gdb.texinfo (MicroBlaze Features): Added.
+
+2014-06-27  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Maintenance Commands): Update the output of
+	'maint print dummy-frames' command.
+
+2014-06-24  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Screen Size): Improve indexing.
+
+2014-06-19  Gary Benson  <gbenson@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document new
+	"maint set/show catch-demangler-crashes" option.
+
+2014-06-19  Gary Benson  <gbenson@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document new
+	"maint demangler-warning" command and new
+	"maint set/show demangler-warning" option.
+
+2014-06-09  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* python.texi (Xmethod API): Add space before the opening
+	parenthesis in function descriptions.
+
+2014-06-06  Doug Evans  <xdje42@gmail.com>
+
+	* guile.texi (Guile Configuration): Document guile-data-directory.
+
+2014-06-06  Mingjie Xing  <mingjie.xing@gmail.com>
+
+	* gdb.texinfo (Invoking GDB): Add -q and --quiet.
+
+2014-06-04  Doug Evans  <xdje42@gmail.com>
+
+	* guile.texi (Breakpoints In Guile): Update.
+
+2014-06-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* python.texi (Xmethod API): Fix reference to "Progspaces In
+	Python".
+
+2014-06-03  Siva Chandra Reddy  <sivachandra@google.com>
+
+	*  python.texi (Xmethods In Python, XMethod API)
+	(Writing an Xmethod): New nodes.
+	(Python API): New menu entries "Xmethods In Python",
+	"Xmethod API", "Writing an Xmethod".
+
+2014-06-02  Doug Evans  <xdje42@gmail.com>
+
+	* guile.texi (Guile API): Add entry for Parameters In Guile.
+	(GDB Scheme Data Types): Mention <gdb:parameter> object.
+	(Parameters In Guile): New node.
+
+2014-06-02  Doug Evans  <xdje42@gmail.com>
+
+	* guile.texi (Guile API): Add entry for Commands In Guile.
+	(Basic Guile) <parse-and-eval>: Add reference.
+	(Basic Guile) <string->argv>: Move definition to Commands In Guile.
+	(GDB Scheme Data Types): Mention <gdb:command> object.
+	(Commands In Guile): New node.
+
+2014-06-02  Doug Evans  <xdje42@gmail.com>
+
+	* guile.texi (Guile API): Add entry for Progspaces In Guile.
+	(GDB Scheme Data Types): Mention <gdb:progspace> object.
+	(Progspaces In Guile): New node.
+
+2014-05-30  Andrew Burgess  <aburgess@broadcom.com>
+
+	* guile.texi (Frames In Guile): Mention FRAME_UNWIND_MEMORY_ERROR.
+	* python.texi (Frames In Python): Mention
+	gdb.FRAME_UNWIND_MEMORY_ERROR.
+
+2014-05-29  Pedro Alves  <palves@redhat.com>
+	    Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Non-Stop Mode): Remove "set target-async 1"
+	from example.
+	(Asynchronous and non-stop modes): Document '-gdb-set mi-async'.
+	Mention that target-async is now deprecated.
+	(Maintenance Commands): Document maint set/show target-async.
+
+2014-05-29  Pedro Alves  <palves@redhat.com>
+
+	* observer.texi (sync_execution_done, command_error): New
+	subjects.
+
+2014-05-29  Pedro Alves  <palves@redhat.com>
+
+	PR gdb/13860
+	* observer.texi (signal_received, end_stepping_range)
+	(signal_exited, exited, no_history): New observer subjects.
+
+2014-05-26  Andy Wingo  <wingo@igalia.com>
+
+	* guile.texi (GDB Scheme Data Types): Remove documentation for
+	removed interfaces.  Update spelling of gdb-object-kind.
+
+2014-05-26  Andy Wingo  <wingo@igalia.com>
+
+	* guile.texi (Basic Guile): Fix some typos.
+
+2014-05-26  Andy Wingo  <wingo@igalia.com>
+
+	* guile.texi (Writing a Guile Pretty-Printer)
+	(Guile Types Module): Fix excess parentheses in use-modules forms.
+
+2014-05-24  Eli Zaretskii  <eliz@gnu.org>
+
+	* guile.texi (Types In Guile, Basic Guile, Frames In Guile)
+	(Breakpoints In Guile, Guile Printing Module)
+	(Guile Exception Handling, Values From Inferior In Guile)
+	(Objfiles In Guile, Breakpoints In Guile, Memory Ports in Guile):
+	Don't use @var at the beginning of a sentence.
+
+	* gdb.texinfo (Frame Filter Management, Trace Files)
+	(C Operators, Ada Tasks, Calling, Bootstrapping, ARM)
+	(PowerPC Embedded, Define, Annotations for Running)
+	(IPA Protocol Commands, Packets, General Query Packets)
+	(Tracepoint Packets, Notification Packets, Environment)
+	(Inferiors and Programs, Set Breaks, Set Catchpoints)
+	(Continuing and Stepping, Signals, Thread-Specific Breakpoints)
+	(Frames, Backtrace, Selection, Expressions, Registers)
+	(Trace State Variables, Built-In Func/Proc, Signaling, Files)
+	(Numbers, GDB/MI Async Records, GDB/MI Data Manipulation)
+	(Source Annotations, Using JIT Debug Info Readers, Packets)
+	(Stop Reply Packets, Host I/O Packets)
+	(Target Description Format): Don't use @var at the beginning of a
+	sentence.
+
+	* python.texi (Basic Python, Types In Python)
+	(Commands In Python, Frames In Python, Line Tables In Python)
+	(Breakpoints In Python, gdb.printing, gdb.types)
+	(Type Printing API): Don't use @var at the beginning of a
+	sentence.
+
+2014-05-23  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Document "set/show btrace
+	replay-memory-access".
+
+2014-05-21  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Starting): Document "set/show
+	auto-connect-native-target".
+	(Target Commands): Document "target native".
+
+2014-05-20  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Memory) <compare-sections>: Generalize comments to
+	not be remote specific.  Add cross reference to the qCRC packet.
+	(Separate Debug Files): Update cross reference to the qCRC packet.
+	(General Query Packets) <qCRC packet>: Add anchor.
+
+2014-05-17  Doug Evans  <xdje42@gmail.com>
+
+	Copy over changes from guile.texi.
+	* python.texi (Basic Python) <gdb.execute>: Add text.
+	(Basic Python) <gdb.post_event>: Remove "main" from "main GDB thread".
+	(Values From Inferior) <Python string>: Add text.
+	(Values From Inferior) <Value.string>: Clarify string length handling.
+	(Pretty Printing API): Add cindex.
+	(Types In Python) <TYPE_CODE_*>: Use vtable instead of table.
+	Remove unnecessary index of gdb.TYPE_CODE_*.  Replace @findex with
+	@vindex.
+	(Commands In Python) <COMPLETE_*>: Similarly.
+	(Symbols In Python) <SYMBOL_*>: Similarly.
+	(Breakpoints In Python) <WP_*>: Similarly.
+	(Breakpoints In Python) <BP_*>: Similarly.
+
+2014-05-17  David Taylor <dtaylor@emc.com>
+
+	* gdb.texinfo (General Query Packets): Add a note about thread IDs
+	mentioned in the qfThreadInfo reply.
+
+2014-05-16  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Mode Options): Add -D.
+
+2014-05-09  Samuel Bronson  <naesten@gmail.com>
+
+	* Makefile.in (PACKAGE): Copy from ../Makefile.in in case of
+	"make -C".
+
+2014-04-29  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Debugging Output): Rename to "set debug varobj" and
+	"show debug varobj".
+
+2014-05-01  David Taylor  <dtaylor@emc.com>
+
+	* gdb.texinfo (compare-sections): Document the new -r (read-only)
+	option.
+
+2014-04-24  Michael Sturm  <michael.sturm@mintel.com>
+	    Walfred Tedeschi  <walfred.tedeschi@intel.com>
+
+	* gdb.texinfo (i386 Features): Add description of AVX512
+	registers.
+
+2014-03-31  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Symbols): Document set/show print symbol-loading.
+
+2014-03-30  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Non-Stop Mode): Remove trailing whitespace.
+	(Background Execution): Ditto.
+
+2014-03-21  Pedro Alves  <palves@redhat.com>
+	    Stan Shebs  <stan@codesourcery.com>
+	    Hui Zhu  <hui@codesourcery.com>
+
+	* gdb.texinfo (Packets): Add anchor to "? packet".
+	Remove fixme and update introduction of "k packet".
+	Add anchor to "vKill packet".
+
+2014-03-12  Stan Shebs  <stan@codesourcery.com>
+
+	* Doxyfile-gdb-api.in (INPUT): Add gdbtypes.h.
+
+2014-02-26  Ludovic CourtÃ¨s  <ludo@gnu.org>
+
+	* guile.texi (Basic Guile): Document 'history-append!'.
+
+2014-02-20  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Files): Document "add-shared-symbol-files"
+	and "assf" as being deprecated.
+	(Cygwin Native): Likewise for "dll-symbols".
+	(Non-debug DLL Symbols): Remove reference to "dll-symbols"
+	as a way to force the loading of symbols from a DLL.
+
+2014-02-19  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* python.texi (Values From Inferior): Add description about the
+	new feature.
+
+2014-02-17  Doug Evans  <xdje42@gmail.com>
+
+	* Makefile.in (GDB_DOC_FILES): Add python.texi.
+	* gdb.texinfo (Python): Moved to ...
+	* python.texi: ... here.  New file.
+
+2014-02-17  Ludovic CourtÃ¨s  <ludo@gnu.org>
+
+	* guile.texi (Writing a Guile Pretty-Printer) <example>:
+	Remove 'string-begins-with' procedure.  Add 'pretty-printer'
+	parameter to 'str-lookup-function' procedure.  Look for
+	the "std::string<" prefix.
+	(Frames In Guile): Add 'frame' parameter to 'frame-read-var'.
+	Adjust description.
+
+2014-02-11  Tejas Belagod  <tejas.belagod@arm.com>
+
+	* guile.texi (Values From Inferior In Guile): Remove stray
+	parantheses for deffn.
+	(Disassembly In Guile): Ditto.
+
+2014-02-10  Stan Shebs  <stan@codesourcery.com>
+
+	Add Doxygen support.
+	* Makefile.in (doxy): New action, generates Doxygen files.
+	(DOXYGEN): New.
+	(doxyedit): New.
+	* Doxyfile-base.in: New file.
+	* Doxyfile-gdb-api.in: New file.
+	* Doxyfile-gdb-xref.in: New file.
+	* Doxyfile-gdbserver.in: New file.
+	* doxy-index.in: New file.
+	* filter-for-doxygen: New file.
+	* filter-params.pl: New file.
+
+2014-02-10  Doug Evans  <xdje42@gmail.com>
+
+	* Makefile.in (GDB_DOC_FILES): Add guile.texi.
+	* gdb.texinfo (Auto-loading): Add set/show auto-load guile-scripts.
+	(Extending GDB): New menu entries Guile, Multiple Extension Languages.
+	(Guile docs): Include guile.texi.
+	(objfile-gdbdotext file): Add objfile-gdb.scm.
+	(dotdebug_gdb_scripts section): Mention Guile scripts.
+	(Multiple Extension Languages): New node.
+	* guile.texi: New file.
+
+2014-01-28  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ada Glitches): Document the new "maint ada set/show
+	ignore-descriptive-types". commands.
+
+2014-01-22  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Server): Mention --debug-format=all|none|timestamp.
+	(gdbserver man): Ditto.
+
+2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo: Document limited reverse/replay support
+	for target record-btrace.
+
+2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Update documentation.
+
+2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Document new /c
+	modifier accepted by "record function-call-history".
+	Add /i modifier to "record function-call-history" example.
+
+2014-01-15  Yuanhui Zhang  <asmwarrior@gmail.com>
+	    Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Output Syntax): Add some missing "nl"
+	markers.  Remove one that was misplaced.
+
+2014-01-10  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Your Program's Environment) <set environment>:
+	Mention the shell, and point at 'set exec-wrapper'.
+
+2014-01-07  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Types In Python): Document new attribute Types.name.
+
+2013-12-30  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Types In Python): Clarify the documentation
+	of attribute gdb.Field.bitpos.
+
+2013-12-28  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Types In Python): Fix the documentation of
+	attribute "bitpos" in class gdb.Field for enum types.  Add
+	documentation for attribute "enumval" in that same class.
+
+2013-12-28  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Support Commands): Change @table into
+	@ftable.
+
+2013-12-23  Doug Evans  <xdje42@gmail.com>
+
+	* gdb.texinfo (Auto-loading): Move menu up.  Move discussion of
+	auto-loaded objfile scripts and .debug_gdb_scripts section to their
+	corresponding section in Extending GDB.
+	(Extending GDB): Move menu up.  New menu item "Auto-loading
+	extensions".
+	(Sequences): New menu item "Auto-loading sequences".
+	(Auto-loading sequences): New node.
+	(Python): Rename section from Scripting GDB to Extending GDB.
+	(Python Auto-loading): Update xref, refer to "Auto-loading extensions".
+	Move docs on ways to auto-load extensions to ...
+	(Auto-loading extensions): ... here.  New node.
+
+2013-12-23  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI): Add "GDB/MI Support Commands" entry
+	in menu.
+	(GDB/MI Variable Objects): Adjust reference to "-list-features"
+	command, now in a new node.
+	(GDB/MI Support Commands): New node, with its contents being
+	extracted from the "GDB/MI Miscellaneous Commands" node.
+	A small paragraph introducing the section is also added at
+	the start.
+	(GDB/MI Miscellaneous Commands): Delete the description of the
+	-info-gdb-mi-command, -list-features and -list-target-features
+	commands, now hosted in the "GDB/MI Support Commands" node.
+
+2013-12-12  Siva Chandra Reddy  <sivachandra@google.com>
+
+	PR python/16113
+	* gdb.texinfo (Values From Inferior): Add a note about using
+	gdb.Field objects as subscripts on gdb.Value objects.
+	(Types In Python): Add description about the new attribute
+	"parent_type" of gdb.Field objects.
+
+2013-12-12  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Add @cindex
+	entry for section docuumenting the -list-features GDB/MI command.
+
+2013-12-10  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document the new
+	"exec-run-start-option" entry in the output of the "-list-features"
+	command.
+
+2013-12-04  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (i386): Fix yesterday's commit.
+
+2013-12-03  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Catchpoints): Add @kindex for each command
+	documented here.
+
+2013-12-03  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (@direntry): Add menu item for gdbserver.
+
+2013-12-03  Walfred Tedeschi  <walfred.tedeschi@intel.com>
+
+	* gdb.texinfo (i386 Features): Add MPX feature registers.
+	(x86 Specific featuresx86 Architecture-specific Issues): Adds
+	a subsubsection for MPX and describes the display of the
+	boundary registers.
+
+2013-12-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Remove the
+	documentation of the "ada-exceptions" entry.
+
+2013-12-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Result Records): Fix the syntax of the
+	"^error" result record concerning the error message.  Document
+	the error code that may also be part of that result record.
+	(GDB/MI Miscellaneous Commands): Document the
+	"undefined-command-error-code" element in the output of
+	the "-list-features" GDB/MI command.
+
+2013-12-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document
+	the new -info-gdb-mi-command GDB/MI command.  Document
+	the meaning of "-info-gdb-mi-command" in the output of
+	-list-features.
+
+2013-11-29  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Frames In Python) <gdb.FRAME_UNWIND_NULL_ID>:
+	Update comment.
+
+2013-11-24  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Caching Remote Data): Document new
+	"set/show stack-cache" option.
+
+2013-11-24  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Caching Target Data): Replace "ON" with "on".
+	(Maintenance Commands): Replace "ON" and "OFF" with "on" and
+	"off" respectively.
+
+2013-11-23  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Add the description
+	of "displayhint" to the table about child results.
+
+2013-11-21  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Add attribute
+	'dynamic' for the output of command -var-list-children.
+
+2013-11-21  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Caching Target Data): Remove "see" before
+	@pxref.
+
+2013-11-20  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Caching Target Data): Update doc for
+	per-address-space dcache.
+
+2013-11-20  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Data): Rename menu item.
+	(Caching Remote Data): Rename to ...
+	(Caching Target Data): ... it.  Update.
+
+2013-11-18  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document the new
+	"language-option" entry in the output of the "-list-features"
+	command.
+
+2013-11-15  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Variables): Note gdb rules for ambiguous cases.
+	Add example.
+
+2013-11-14  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Breakpoints In Python): Replace "as" with "in".
+
+2013-11-14  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Show): Add xref anchor for "show language" command.
+	(Context management): Place current subsection text into its own
+	subsubsection.  Add new subsubsection describing the "--language"
+	command option.
+
+2013-11-13  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Delete
+	the documentation of "info-ada-exceptions" in the output
+	of the "-list-features" command.  Add the documentation
+	of the "ada-exception" entry instead.
+
+2013-11-12  Joel Brobecker  <brobecker@adacore.com>
+
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Fix the first
+	word of a couple of sentences to start with a capital letter.
+
+2013-11-12  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ada): Add entry in menu for new "Ada Exceptions" node.
+	(Ada Exceptions): New node.
+	(GDB/MI): Add entry in menu for new "GDB/MI Ada Exceptions
+	Commands" node.
+	(GDB/MI Ada Exceptions Commands): New node.
+	(GDB/MI Miscellaneous Commands): Document new "info-ada-exceptions"
+	field in the output of the "-list-features" command.
+	* NEWS: Add entry for the new "info exceptions" CLI command,
+	and for the new "-info-ada-exceptions" GDB/MI command.
+
+2013-11-11  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Symbol Tables In Python): Add linetable method entry.
+	(Line Tables In Python): New node.
+
+2013-11-08  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Debugging Output): Update text for
+	"set debug dwarf2-read".
+
+2013-11-08  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Debugging Output): Update text for
+	"set debug symtab-create".
+
+2013-11-07  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Commands In Python): Document COMPLETE_EXPRESSION
+	constant.
+
+2013-11-07  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Breakpoints In Python): Document temporary
+	option in breakpoint constructor, and add documentation to the
+	temporary attribute.
+
+2013-11-07  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Update doc about the
+	output of "-var-info-expression".
+
+2013-11-06  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Starting) <set/show startup-with-shell>: Mention
+	non-interactive mode.
+	(Environment) <shell startup files warning>: Mention
+	non-interactive mode.  Mention .zshenv for Z shell, and talk about
+	BASH_ENV instead of .bashrc for BASH.
+
+2013-10-29  Nicolas Blanc  <nicolas.blanc@intel.com>
+
+	* gdb.texinfo (Commands to Specify Files): Add description
+	of the remove-symbol-file command.
+	* observer.texi: New free_objfile event
+
+2013-10-24  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Starting): Document set/show startup-with-shell.
+
+2013-10-11  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Shared Library GDB/MI Catchpoint Commands):
+	New subsection inside which the "-catch-load" and "-catch-unload"
+	commands documentation is now placed.
+	(Ada Exception GDB/MI Catchpoint Commands): New subsection
+	documenting the "-catch-assert" and "-catch-exception" new
+	GDB/MI commands.
+
+2013-10-10  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Connecting): Remove unnecessary @w{}.
+
+2013-10-10  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Connecting): Replace "set remotebaud" by "set
+	serial baud".
+	(Remote Configuration): Replace "set remotebaud" by "set serial
+	baud".  Replace "show remotebaud" by "show serial baud".
+
+2013-10-07  Pedro Alves  <palves@redhat.com>
+
+	PR breakpoints/11568
+	* gdb.texinfo (Thread-Specific Breakpoints): Mention what happens
+	when the thread is removed from the thread list.
+
+2013-10-06  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (Convenience Variables): Document $_exitsignal.
+	Update entry for $_exitcode.
+
+2013-10-04  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Program Execution): Document "-exec-run"'s
+	new "--start" option.
+
+2013-10-02  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Registers): Expand description of saved registers
+	in frames.  Explain <not saved>.
+
+2013-09-25  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Debugging Output): Document set/show debug symfile.
+
+2013-09-16  Stan Shebs  <stan@codesourcery.com>
+
+	Remove the internals manual gdbint.texinfo.
+	* Makefile.in (INFO_DEPS): Remove gdbint.info.
+	(PDFFILES): Remove gdbint.pdf.
+	(HTMLFILES): Remove gdbint/index.html.
+	(HTMLFILES_INSTALL): Remove gdbint.
+	(GDBINT_DOC_FILES): Remove.
+	(dvi): Remove gdbint.dvi.
+	(ps): Remove gdbint.ps.
+	* gdbint.texinfo: Remove file.
+	* gdb.texinfo (Maintenance Commands): Remove reference to gdbint.
+
+2013-09-16  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (Convenience Functions): Mention new convenience
+	function $_isvoid.
+
+2013-09-13  Andreas Arnez  <arnez@linux.vnet.ibm.com>
+
+	* gdb.texinfo (Decimal Floating Point format): Mention S/390.
+	(Standard Target Features): Add new node to menu.
+	(S/390 and System z Features): New node.
+
+2013-09-13  Sanimir Agovic  <sanimir.agovic@intel.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Use
+	-list-target-features in the example.
+
+2013-09-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (MiniDebugInfo): Prepare file debug and use it to create
+	mini_debuginfo.  Strip binary before adding mini_debuginfo to it.
+
+2013-09-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Sync documentation with gdb.base/gnu-debugdata.exp.
+	* gdb.texinfo (MiniDebugInfo): Add comment and "D" in the example.
+
+2013-09-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (MiniDebugInfo): Fix two trailing dots.
+
+2013-08-27  Pedro Alves  <pedro@codesourcery.com>
+	    Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Stack Manipulation) <-stack-list-locals>:
+	Document new --skip-unavailable option.
+	<-stack-list-variables>: Document new --skip-unavailable option.
+
+2013-08-26  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Maintenance Commands): "maint print objfiles" now takes
+	an optional regexp.
+
+2013-08-13  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (Testsuite): Use @table, not @itemize.
+	Document GDB_PARALLEL and GDB_INOTIFY.
+
+2013-08-09  Stan Shebs  <stan@codesourcery.com>
+
+	* LRS: Remove file, describes a long-abandoned live-range
+	splitting extension to stabs.
+
+2013-07-25  Andrew Burgess  <aburgess@broadcom.com>
+
+	* gdb.texinfo (Output Formats): Mention the new 'z' formatter.
+
+2013-07-17  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Print Settings): Document "print raw frame-arguments".
+
+2013-07-02  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Target Commands): Don't mention "target nrom".
+
+2013-06-28  Tom Tromey  <tromey@redhat.com>
+
+	* Makefile.in (version.subst): Use version.in, not
+	common/version.in.
+	* gdbint.texinfo (Versions and Branches, Releasing GDB):
+	Likewise.
+
+2013-06-27  Pedro Alves  <palves@redhat.com>
+
+	* gdbint.texinfo (Algorithms) <Stepping over runtime loader
+	dynamic symbol resolution code>: New section, based on infrun.c
+	comment.
+
+2013-06-26  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (Versions and Branches): Use common/version.in.
+	Update.
+	(Releasing GDB): Likewise.
+
+2013-06-26  Pedro Alves  <pedro@codesourcery.com>
+	    Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Tracepoint Commands): Document
+	-trace-frame-collected.
+
+2013-06-26  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Traceframe Info Format): Document tvar element
+	and its attributes.
+
+2013-06-25  Yao Qi  <yao@codesourcery.com>
+
+	* gdbint.texinfo (Testsuite): Document 'gdb,predefined_tsv'.
+
+2013-06-24  Tom Tromey  <tromey@redhat.com>
+
+	* Makefile.in (POD2MAN1, POD2MAN5): Use version.subst.
+	(GDBvn.texi): Use version.subst.
+	(version.subst): New target.
+	(mostlyclean): Remove version.subst.
+
+2013-06-20  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Data Manipulation)
+	<-data-list-register-values>: Document the --skip-unavailable
+	option.
+
+2013-06-07  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Symbols): Add kindex and cindex for
+	'maint print msymbols'.
+
+2013-06-05  Simon Marchi  <simon.marchi@ericsson.com>  (tiny change)
+
+	* gdb.texinfo (Miscellaneous gdb/mi Commands): Fix -add-inferior
+	response field name (thread-group to inferior).
+
+2013-06-04 Gary Benson  <gbenson@redhat.com>
+
+	* gdb.texinfo (General Query Packets/qSupported): Added
+	"qXfer:libraries-svr4:read" and "augmented-libraries-svr4-read".
+	to the table of currently defined stub features.
+	Added a more detailed entry for "augmented-libraries-svr4-read".
+	(General Query Packets/qXfer:libraries-svr4:read): Documented
+	the augmented form of this packet.
+
+2013-05-23  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (System-wide Configuration Scripts): Renames
+	"Installed System-wide Configuration Scripts". Add associated
+	@menu block.
+
+2013-05-23  Yao Qi  <yao@codesourcery.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Packets): Document 'vCont;r'.
+	(Continuing and Stepping): Document target-assisted range
+	stepping, and the 'set range-stepping' and 'show range-stepping'
+	commands.
+
+2013-05-23  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Installed System-wide Configuration Scripts):
+	Add subsection describing the scripts now available under
+	the data-dir's system-gdbbinit subdirectory.
+	* NEWS: Add entry announcing the availability of system-wide
+	configuration scripts for ElinOS and Wind River Linux.
+
+2013-05-21  Hui Zhu  <hui@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Describe the
+	"-dprintf-insert" command.
+
+2013-05-17  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Maintenance Commands): Update doc for
+	"maint check-psymtabs".  Add doc for "maint check-symtabs",
+	"maint expand-symtabs".
+
+2013-05-15  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Document the
+	"record goto" command and its sub-commands.
+
+2013-05-10 Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Backtrace): Add "no-filter" argument.
+	(Python API): Add Frame	Filters API, Frame Wrapper API,
+	Writing a Frame Filter/Wrapper,	Managing Management of Frame
+	Filters chapter entries.
+	(Frame Filters API): New Node.
+	(Frame Wrapper API): New Node.
+	(Writing a Frame Filter): New Node.
+	(Managing Frame Filters): New Node.
+	(Progspaces In Python): Add note about frame_filters attribute.
+	(Objfiles in Python): Ditto.
+	(GDB/MI Stack Manipulation): Add -enable-frame-filters command,
+	@anchors and --no-frame-filters option to -stack-list-variables,
+	-stack-list-frames, -stack-list-locals and -stack-list-arguments
+	commands.
+
+2013-05-08  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Native Debugging): Add "AIX Shared Library
+	Support" subsection documenting the XML format used to transfer
+	shared library info on AIX.
+
+2013-05-08  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Debugging Output): Add documentation of
+	"set debug aix-solib" and "show debug aix-solib" commands.
+
+2013-05-06  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* gdb.texinfo (Nios II): New section.
+	(Nios II Features): New section.
+
+2013-05-06  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Algorithms): Remove entries documenting
+	DEPRECATED_IBM6000_TARGET, SOLIB_ADD, and
+	SOLIB_CREATE_INFERIOR_HOOK.
+
+2013-04-29  Tom Tromey  <tromey@redhat.com>
+
+	PR python/14204:
+	* gdb.texinfo (Python API): Fix menu entry.
+	(Blocks In Python): Fix subsubsection text.  Rewrite intro.
+	Define global and static block.  Add example.  Clarify
+	block relationship for inline functions.
+
+2013-04-29  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Python API): Mention Python help and keyword
+	arguments.  Move pagination text to Basic Python.
+	(Basic Python): Put pagination text here.  Document
+	close-on-exec, SIGCHLD, and SIGINT.
+
+2013-04-19  Pedro Alves  <palves@redhat.com>
+
+	* gdbint.texinfo (Misc Guidelines) <Compiler Warnings>: Write
+	"signedness" instead of "signness".
+
+2013-04-19  Pedro Alves  <palves@redhat.com>
+
+	* gdbint.texinfo (Misc Guidelines) <Compiler Warnings>: Replace
+	-Wno-pointer-sign text with text on -Wpointer-sign.
+
+2013-04-16  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Catchpoints): Mention earliest version of
+	GCC that has the SDT probe points.
+
+2013-04-15  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Catchpoints): Document regexp syntax for
+	exception catchpoints.
+
+2013-04-15  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Catchpoints): Document $_exception.
+	(Convenience Vars): Mention $_exception.
+
+2013-04-15  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Catchpoints): Reorganize exception
+	catchpoints.  Document "catch rethrow".
+	(Debugging C Plus Plus): Mention "catch rethrow".
+
+2013-04-15  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Catchpoints): Remove obsolete text.
+
+2013-04-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Auto-loading safe path): Add quick -iex using command
+	line below the sample output.
+
+2013-04-12  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Mode Options): Document '-configuration'.
+	(Help): Document "show configuration".
+	(Bug Reporting): Add requirements to include the configuration
+	details in bug reports.
+
+2013-04-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* Makefile.in (MAN1S): Add gcore.1.
+	Remove "Host, target, and site specific Makefile fragments" comment.
+	(@host_makefile_frag@, HAVE_NATIVE_GCORE_TARGET): New.
+	(install-man1, uninstall-man1): Conditionalize gcore.1.
+	(gcore.1): New.
+	* gdb.texinfo (Man Pages): Add gcore man.
+	(gcore man): New node.
+
+2013-04-10  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Process Record and Replay): Document that "set
+	record full insn-number-max", "set record
+	instruction-history-size" and "set record
+	function-call-history-size" accept "unlimited".
+	(Backtrace): Document that "set backtrace limit" accepts
+	"unlimited".
+	(List): Document that "set listsize" accepts "unlimited".
+	(Print Settings)" Document that "set print max-symbolic-offset",
+	"set print elements" and "set print repeats" accept "unlimited".
+	(Starting and Stopping Trace Experiments): Document that "set
+	trace-buffer-size" accepts "unlimited".
+	(Remote Configuration): Document that "set tcp connect-timeout"
+	accepts "unlimited".
+	(Command History): Document that "set history size" accepts
+	"unlimited".
+	(Screen Size): Document that "set height" and "set width" accepts
+	"unlimited".  Adjust "set pagination"'s description to suggest
+	"set height unlimited" instead of "set height 0".
+
+2013-04-10  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Trace Files): Add "target ctf".
+
+2013-04-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* Makefile.in (POD2MAN1, POD2MAN5): Replace $(VERSION) by ../version.in.
+
+	* Makefile.in (install-man1, install-man5, uninstall-man1)
+	(uninstall-man5): Replace $(MANS) by $(MAN1S) and $(MAN5S) respectively.
+
+	* Makefile.in (gdb.1, gdbserver.1, gdbinit.5): Use $(srcdir).
+
+2013-04-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (gdbserver man): Rename tty to comm.  Swap --attach
+	parameters order.  Remove "On some targets" for --attach.  Document the
+	--multi parameter and extended-remote command.  Document all the
+	options.
+
+2013-04-05  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (gdb man): Mention option -p.  Include Fortran to
+	the list of supported languages.
+
+2013-04-05  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Convert man pages to texinfo, new gdbinit.5 texinfo page.
+	* Makefile.in (mandir, man1dir, man5dir, SYSTEM_GDBINIT, MANCONF,
+	(TEXI2POD, POD2MAN1, POD2MAN5, MAN1S, MAN5S, MANS, man): New.
+	(diststuff): Add man.
+	(install-man, install-man1, install-man5, uninstall-man, uninstall-man1)
+	(uninstall-man5): New.
+	(STAGESTUFF): Add *.1 and *.5.
+	(GDBvn.texi): Add SYSTEM_GDBINIT.
+	(gdb.1, gdbserver.1, gdbinit.5): New.
+	(maintainer-clean realclean): Add $(MANS).
+	(install): Add install-man.
+	(uninstall): Add uninstall-man.
+	* gdb.texinfo (@include gdb-cfg.texi): Wrap it by @c man begin INCLUDE.
+	(@copying): Wrap it by @c man begin COPYRIGHT.
+	(Top): Add Man Pages.
+	(Man Pages, gdb man, gdbserver man, gdbinit man): New.
+
+2013-04-02  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Debugging Output): Document "set/show debug
+	aarch64", "set/show debug coff-pe-read" and "set/show debug
+	mach-o".
+
+2013-04-02  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Remote Configuration) <set remote @var{name}-packet
+	table>: Add entry for "trace-buffer-size".
+
+2013-03-28  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (Remote Configuration) <set remote @var{name}-packet
+	table>: Add entry for "trace-status".
+
+2013-03-28  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Maintenance Commands): Use @enumerate, not "@table
+	@bullet", which is invalid (makeinfo 5.1 barfs).
+
+2013-03-28  Pedro Alves  <palves@redhat.com>
+
+	PR gdb/15294
+
+	* gdb.texinfo (List) <set listsize>: Adjust to document that
+	listsize 0 means no limit, and remove mention of -1.
+
+2013-03-22  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Embedded Processors): Remove menu item
+	"OpenRISC 1000".
+	(OpenRISC 1000): Remove.
+
+2013-03-21  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Maintenance Commands): Add docs for
+	"mt set per-command {space,time,symtab} {on,off}".
+
+2013-03-14  Hui Zhu  <hui@codesourcery.com>
+	    Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Trace Files): Add "tsave -ctf".
+
+2013-03-13  Keith Seitz  <keiths@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Add missing ')' for
+	"maint agent" reference to Dynamic printf.
+
+2013-03-11  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (General Query Packets): Don't use colon in index
+	entries visible to Info format.
+
+2013-03-11  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Process Record and Replay): Document record
+	changes.
+
+2013-03-11  Markus Metzger  <markus.t.metzger@intel.com>
+
+	* gdb.texinfo (Requirements): List qXfer:btrace:read requiring expat.
+	(General Query Packets): Describe Qbtrace:bts, Qbtrace:off, and
+	qXfer:btrace:read.
+
+2013-03-09  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (General Query Packets, Tracepoint Packets): Don't
+	use colons in @anchor and @cindex entries.
+
+2013-03-09  Hafiz Abid Qadeer  <abidh@codesourcery.com>
+
+	* gdb.texinfo (QTBuffer:size): Add cindex and anchor.
+
+2013-03-08  Stan Shebs  <stan@codesourcery.com>
+	    Hafiz Abid Qadeer  <abidh@codesourcery.com>
+
+	* gdb.texinfo (Starting and Stopping Trace Experiments): Document
+	trace-buffer-size set and show commands.
+	(Tracepoint Packets): Document QTBuffer:size.
+	(General Query Packets): Document QTBuffer:size.
+
+2013-02-21  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo: Remove bad @syncodeindex.
+	(Values From Inferior, Types In Python, Inferiors In Python)
+	(Events In Python, Threads In Python, Frames In Python, Blocks In
+	Python, Symbols In Python, Symbol Tables In Python): Remove
+	@tables.
+	(Packets, General Query Packets, Tracepoint Packets)
+	(Host I/O Packets): Use @w{} for empty @item.
+
+2013-02-20  Siva Chandra Reddy <sivachandra@google.com>
+
+	* gdb.texinfo (Architectures In Python): Add description about
+	the new method gdb.Architecture.disassemble.
+
+2013-02-15  Pedro Alves  <pedro@codesourcery.com>
+	    Hafiz Abid Qadeer  <abidh@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Tracepoint Commands) <-trace-status>:
+	Document the "trace-file" field.
+
+2013-02-07  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Machine Code): Clarify argument to disassemble
+	command.
+
+2013-02-06  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Document new MI
+	notification "=tsv-modified".  Update the document of MI
+	notification "=tsv-created".
+	* observer.texi (GDB Observers): New observer tsv_modified.
+	Update observer tsv_created and tsv_delete.
+
+2013-02-05  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+	* gdb.texinfo (AArch64 Features): New section; document
+	org.gnu.gdb.aarch64.core and org.gnu.gdb.aarch64.fpu.
+	(Architectures): Add new AArch64 section to document AArch64
+	architecture specific commands.
+	(ABI): Add description of the new OS ABI "Newlib" and its influence
+	on the longjmp handling.
+
+2013-02-03  Eldar Gaynetdinov <hal9000ed2k@gmail.com>
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Backtrace): Added description of 'filename-display'
+	variable in 'set/show backtrace' section.
+
+2013-01-31  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Target Commands): Fix typo.
+
+2013-01-23  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* doc/gdb.texinfo (Architectures In Python): New sub-sub-section
+	describing the gdb.Architecture class.
+	(Frames In Python): Add description about the new method
+	gdb.Frame.architecture().
+
+2013-01-23  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Index Section Format): Document .gdb_index version 8.
+
+2013-01-21  Marc Khouzam  <marc.khouzam@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Document new
+	'thread-groups' field when printing a breakpoint in MI.
+
+2012-01-17  Sanjoy Das <sanjoy@playingwithpointers.com>
+	* gdb.texinfo (Using JIT Debug Info Readers): Change documentation
+	to reflect that jit-reader-load now supports absolute file-names.
+
+2013-01-16  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Catchpoints): Document "catch signal".
+	(Signals): Likewise.
+
+2013-01-16  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Information): Document
+	"catch-type" field.
+	(GDB/MI Catchpoint Commands): Add "catch-type" to examples.
+
+2013-01-07  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Mode Options): Don't mention -epoch.
+	(Data, Emacs): Remove obsolete comments.
+
+2013-01-02  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Output Records): Update menu.
+	(GDB/MI Breakpoint Information): New node.
+	(GDB/MI Breakpoint Commands) <-break-info>: Link to new node.
+	<-break-insert>: Likewise.
+
+2012-12-31  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Remote Non-Stop): Move paragraphs to ...
+	(Packets): Move "vStopped" packet to ...
+	(Notification Packets): ... here.  Describe the components
+	of notification.  Add a table of supported notifications.
+	Add an example on the process of he async notification.
+
+2012-12-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (GDB/MI Data Manipulation) (fullname): Make it always
+	present.
+	(GDB/MI File Commands) (-file-list-exec-source-files): Make the
+	fullname output always present.
+
+2012-12-23  Pierre Muller  <muller@sourceware.org>
+
+	* gdbint.texinfo (Function prototypes): Require use of "extern"
+	modifier for function prototypes in headers.
+
+2012-12-19  Joel Brobecker  <brobecker@adacore.com>
+
+	* refcard.tex: Update copyright notice to GPL v3 or later.
+	Update contact info.
+
+2012-12-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdbint.texinfo (Coding Standards) (C Usage): New rule for 0 vs. NULL.
+
+2012-12-15  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Debugging Output): Document 'set debug
+	notification' and 'show debug notification'.
+
+2012-12-15  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Listing Tracepoints): New item and example about
+	'installed on target' output.
+	Add more in the example about 'installed on target'.
+	(GDB/MI Breakpoint Commands): Doc about 'installed field.
+
+2012-12-14  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (SVR4 Process Information): Mention core files.
+
+2012-12-12 Mircea Gherzan <mircea.gherzan@intel.com>
+
+	* gdb.texinfo (GDB/MI Catchpoint Commands): New section.
+
+2012-12-12  Paul Koning  <paul_koning@dell.com>
+
+	Add support for Python 3.
+	* gdb.texinfo (Inferior.read_memory): Mention that the return
+	value is a memoryview object if Python 3.
+
+2012-12-11  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo: Remove all mentions of Unixware throughout.
+
+2012-12-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdbint.texinfo (Host Definition): Remove CC_HAS_LONG_LONG.
+
+2012-11-29  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (SVR4 Process Information): Document missing
+	"info proc" subcommands.
+
+2012-11-29  Yao Qi  <yao@codesourcery.com>
+
+	PR gdb/1477.
+	* gdb.texinfo (Print Settings): Correct the default 'demangle-style'
+	to 'auto' instead of 'gnu'.
+
+2012-11-26  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (MiniDebugInfo): New node.
+	(GDB Files): Update.
+
+2012-11-16  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (System-wide configuration): If the system-wide init
+	file lives in the data-directory, and --data-directory is provided,
+	look for it there.
+
+2012-11-15  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Signaling): Fix typo.
+
+2012-11-13  Giuseppe Montalto  <giuseppe.montalto@st.com>
+
+	* gdb.texinfo (GDB/MI Data Manipulation): Document new optional
+	parameter "count" of -data-write-memory-bytes, and add an example.
+
+2012-11-12  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Symbols): Document "info type-printers",
+	"enable type-printer" and "disable type-printer".
+	(Python API): Add new node to menu.
+	(Type Printing API): New node.
+	(Progspaces In Python): Document type_printers field.
+	(Objfiles In Python): Likewise.
+	(gdb.types) <get_type_recognizers, apply_type_recognizers,
+	register_type_printer, TypePrinter>: Document.
+
+2012-11-12  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Symbols): Document "set print type methods",
+	"set print type typedefs", and flags to ptype and whatis.
+
+2012-11-09  Andrew Burgess  <aburgess@broadcom.com>
+
+	* gdb.texinfo (GDB/MI Data Manipulation): Add fullname field to
+	the example -data-disassemble output.  Extend the description of
+	the -data-disassemble results to document all fields.  Document
+	the cli disassemble command as being related to -data-disassemble.
+
+2012-11-09  Yao Qi  <yao@codesourcery.com>
+
+	PR gdb/14777.
+	* gdb.texinfo (OS Information): Remove doc on command
+	'info udot'.
+
+2012-11-08  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Startup): Minor rewording, and clarify scope of
+	gdb.ini warning for Windows port.
+
+2012-11-08  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Search): Add kindex for 'fo'.
+
+2012-11-05  Tom Tromey  <tromey@redhat.com>
+
+	PR python/14802:
+	* gdb.texinfo (Functions In Python): Add example.
+
+2012-11-03  Yao Qi  <yao@codesourcery.com>
+
+	* observer.texi (GDB Observers): Remove observer
+	'tracepoint_modified', 'tracepoint_created' and
+	'tracepoint_deleted'.
+
+2012-10-26  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (General Query Packets): Use @itemx for QAgent.
+
+2012-10-25  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (General Query Packets): Use @itemx.
+
+2012-10-17  Yao Qi  <yao@codesourcery.com>
+
+	* observer.texi (GDB Observers): Update observer
+	'memory_changed'.
+	* gdb.texinfo (GDB/MI Async Records): Document for
+	"memory-changed" notification.
+
+2012-10-15  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Mode Options): Document -nh.
+	Elaborate on docs for -nx.
+
+2012-09-26  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+	* observer.texi (memory_changed): Expand parameter LEN to ssize_t.
+
+2012-09-21  Yao Qi  <yao@codesourcery.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Document notification
+	'record-started' and 'record-stopped'.
+	* observer.texi (GDB Observers): New observer 'record-changed'.
+
+2012-09-19  Thomas Schwinge  <thomas@codesourcery.com>
+
+	* gdb.texinfo: Document the removal of SH's 'regs' command.
+
+2012-09-18  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* gdb.texinfo (jump): Mention new alias `j' for `jump'.
+
+2012-09-18  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Document new MI
+	notifications '=tsv-created' and '=tsv-deleted'.
+	* observer.texi (GDB Observers): New observer tsv_created and
+	tsv_deleted.
+
+2012-09-18  Yao Qi  <yao@codesourcery.com>
+
+	* observer.texi (GDB Observers): New observer 'traceframe_changed'.
+	* gdb.texinfo (GDB/MI Async Records): Mention new MI notification
+	'=traceframe-changed'.
+
+2012-09-17  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (List): Describe the meaning of 0 and -1 in
+	'set listsize'.
+
+2012-09-13  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo (Defining Other Architecture Features): Clarify *pcptr
+	encoding for gdbarch_breakpoint_from_pc, bp_addr for
+	gdbarch_push_dummy_call and bp_addr for gdbarch_push_dummy_code.
+
+2012-08-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (objfile-gdb.py file): New paragraph for .exe stripping.
+
+2012-08-23  Khoo Yit Phang <khooyp@cs.umd.edu>
+
+	Document how to return from "python-interactive" to GDB.
+	* gdb.texinfo (Python Commands): Update documentation.
+
+2012-08-22  Khoo Yit Phang <khooyp@cs.umd.edu>
+
+	Add a new "python-interactive" command that starts a standard
+	Python interactive prompt with "pi" as alias, and add "py" as
+	an alias to "python".
+	* gdb.texinfo (Python Commands): Document the new commands.
+
+2012-08-22  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (Host Definition): Remove documentation for
+	SIGWINCH_HANDLER and SIGWINCH_HANDLER_BODY.
+
+2012-08-17  Keith Seitz  <keiths@redhat.com>
+
+	PR c++/13356
+	* gdb.texinfo (Type and Range Checking): Remove warning.
+	Remove spurious commas.
+	Update text and examples for re-implementation of set/show
+	check type.
+	(C and C++ Type and Range Checks): Likewise.
+
+2012-08-16  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Types In Python): Mention gdb.TYPE_CODE_BITSTRING
+	is deprecated.
+
+2012-08-13  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Convenience Vars): Update text for "show convenience"
+	to include functions.
+
+2012-08-10  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Convenience Funs): New node.
+	(Types In Python): Document Type.vector.
+
+2012-08-09  Yao Qi  <yao@codesourcery.com>
+
+	* observer.texi: New observer command_param_changed.
+	* gdb.texinfo (GDB/MI Async Records): Doc for '=cmd-param-changed'.
+
+2012-08-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdbint.texinfo (Debugging GDB): In section
+	'Debugging @value{GDBN} with itself' change .gdbinit for gdb-gdb.gdb.
+	Mention also gdb-gdb.py.
+
+2012-08-07  Yao Qi  <yao@codesourcery.com>
+
+	Revert the folloing patch:
+	2012-08-06  Yao Qi  <yao@codesourcery.com>
+	* gdb.texinfo (Remote Configuration): Add kindex for 'set
+	remote hardware-watchpoint-limit' and 'set
+	remote hardware-breakpoint-limit'.
+
+2012-08-06  Nathaniel Flath  <flat0103@gmail.com>
+
+	* gdb.texinfo (Working Directory): Added information about new
+	default argument for 'cd' command.
+
+2012-08-06  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Remote Configuration): Add kindex for 'set
+	remote hardware-watchpoint-limit' and 'set
+	remote hardware-breakpoint-limit'.
+
+2012-08-06  Yao Qi  <yao@codesourcery.com>
+
+	Fix PR14371.
+
+	* gdb.texinfo (GDB/MI Async Records): Fix the doc for
+	'=breakpoint-deleted'.
+
+2012-08-02  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Native): Remove node Neutrino.
+
+2012-07-27  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (IPA Protocol Commands): Document new command
+	'close'.
+
+2012-07-25  Tom Tromey  <tromey@redhat.com>
+
+    	* gdb.texinfo (Maintenance Commands): Document maint info bfds.
+
+2012-07-20  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Mode Options): Delete --use-deprecated-index-sections.
+	(Index Files): Document how to control the use of deprecated index
+	sections.
+	(Index Section Format): Replace --use-deprecated-index-sections with
+	"set use-deprecated-index-sections on".
+
+2012-07-12  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo: Remove @syncodeindex directives that put all the
+	indices into a single node "Index".  Instead, join function and
+	variable indices into a single index, separate from the concept
+	index.  Requested in
+	http://sourceware.org/ml/gdb-patches/2012-07/msg00146.html.
+	(Top): Update the top-level menu: instead of one "Index" there are
+	now separate entries "Concept Index" and "Function and Variable
+	Index".
+	(Concept Index, Function and Variable Index): New nodes.
+	(Index): Node deleted.
+
+2012-07-05  Hui Zhu  <hui_zhu@mentor.com>
+
+	* gdb.texinfo (Maintenance Commands): Change help for "maint agent"
+	and "maint agent-eval".
+
+2012-07-03  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: Separate the index into 2 indices, cp and fn, to
+	avoid file-name clashes between Index.html and index.html on
+	case-insensitive filesystems.  See the discussion starting in
+	http://sourceware.org/ml/gdb-patches/2012-06/msg00457.html for the
+	details of the problem.
+	(Top): Update the master menu for the above.
+	(Concept Index, Command and Variable Index): New nodes, instead of
+	the old "Index" node that was deleted.  All cross-references
+	updated.
+
+2012-07-02  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Dynamic Printf): Mention agent style and
+	disconnected dprintf.
+	(Maintenance Commands): Describe maint agent-printf.
+	(General Query Packets): Mention BreakpointCommands feature.
+	(Packets): Document commands extension to Z0 packet.
+	* agentexpr.texi (Bytecode Descriptions): Document printf
+	bytecode.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (File Options): Change -ix and -iex commands that apply
+	only after gdbinit files.
+	(Startup): Move -iex and -iex commands down after gdbinit files.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading safe path): Note the shell wildcard
+	possibility.
+
+2012-06-29  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Index Section Format): Update for version 7.
+
+2012-06-28  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Miscellaneous GDB/MI Commands): Update -info-os
+	example, add note about title column.
+
+2012-06-26  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* gdb.texinfo (Symbol Tables In Python): Add description about
+	the new 'last' attribute of gdb.Symtab_and line.
+
+2012-06-26  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* gdb.texinfo (Symbol Tables In Python): Correct the description
+	of the 'pc' attribute of gdb.Symtab_and_line.
+
+2012-06-26  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Debugging Output): Document debug options dwarf2-read
+	and symtab-create.
+
+2012-06-25  Keith Seitz  <keiths@redhat.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Remove "-r" option
+	from example.  Remove "rbreak" from list of corresponding
+	gdb commands.
+
+2012-06-23  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Index Section Format): Document version 7 format.
+
+2012-06-22  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo: Add missing cindex for some packets.
+
+2012-06-20  Keith Seitz  <keiths@redhat.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Re-order options
+	for -break-insert and document -p.
+
+2012-06-20  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Inferiors In Python): Replace "gdb.read_memory"
+	and "gdb.write_memory" with "Inferior.read_memory" and
+	"Inferior.write_memory".
+
+2012-06-15  Patrice Dumas  <pertusus@free.fr>  (tiny change)
+
+	* gdb.texinfo (Summary): Add a link to "Free Documentation".
+	(Free Documentation): Add @node line.
+	(Continuing and Stepping) <advance location>: Use @item instead of
+	@itemx.
+	(Reverse Execution) <set exec-direction reverse>: Use @item instead of
+	@itemx.
+	(Embedded Processors): Put the link to "PA" to its correct place,
+	according to document structure.
+	(Python API): Put the link to "Lazy Strings In Python" to its
+	correct place.
+	(Index): Use @@ in @tex block to get a literal @.
+
+	* gdbint.texinfo: Fix the @subtitle line.
+
+	* stabs.texinfo (Top): Put the link to "Symbol Types Index" to its
+	correct place.
+
+2012-06-08  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (In-Process Agent): Add 'In-Process Agent
+	Protocol'.
+	(In-Process Agent Protocol, IPA Protocol Objects)
+	(IPA Protocol Commands): New nodes.
+	(Tracepoint Packets): Add anchors.
+
+2012-06-06  Thomas Schwinge  <thomas@codesourcery.com>
+
+	* gdb.texinfo: Document the deprecation of SH's 'regs' command.
+
+2012-06-06  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo: Update copyright year.
+
+2012-05-23  Stan Shebs  <stan@codesourcery.com>
+	    Kwok Cheung Yeung  <kcy@codesourcery.com>
+
+	* gdb.texinfo (Miscellaneous GDB/MI Commands): Document -info-os.
+
+2012-05-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Separate Debug Files): New anchor debug-file-directory.
+	Mention also --with-separate-debug-dir.
+	(Auto-loading): Prepend $debugdir in the sample output.
+	(Auto-loading safe path): Likewise.  Mention also $debugdir for the
+	auto-load safe-path variable.
+	(objfile-gdb.py file): Remove the extra debug-file-directory paragraph.
+	Mention also $debugdir for 'set auto-load scripts-directory'.
+
+2012-05-19  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Continuing and Stepping, Selection, Byte Order)
+	(MIPS Embedded, MIPS, MIPS Register packet Format)
+	(Target Descriptions, MIPS Features): Use @acronym{MIPS} where
+	appropriate.
+
+2012-05-18  Sandra Loosemore  <sandra@codesourcery.com>
+	    Maciej W. Rozycki  <macro@codesourcery.com>
+
+	* gdb.texinfo (MIPS): Document "set mips compression" and "show
+	mips compression".
+	(MIPS Breakpoint Kinds): New subsubsection.
+
+2012-05-18  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Architecture-Specific Protocol Details): Define
+	nodes for subsections.  Add @acronym mark-ups and adjust
+	formatting.
+
+2012-05-18  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Rename $ddir to $datadir.
+	* gdb.texinfo (Auto-loading, Auto-loading safe path)
+	(objfile-gdb.py file): Rename $ddir to $datadir.
+
+2012-05-18  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Print Settings): Document 'set print symbol'.
+
+2012-05-14  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Dynamic Printf): New subsection.
+
+2012-05-13  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* gdb.texinfo (Basic Python): Add description about the function
+	gdb.find_pc_line
+
+2012-05-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Separate Debug Files): Use plural form for global
+	debugging information directory.
+
+2012-05-11  Stan Shebs  <stan@codesourcery.com>
+	    Kwok Cheung Yeung  <kcy@codesourcery.com>
+
+	* gdb.texinfo (Operating System Auxiliary Information): Document new
+	'info os' subcommands.
+
+2012-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading, Init File in the Current Directory)
+	(libthread_db.so.1 file, objfile-gdb.gdb file, objfile-gdb.py file)
+	(dotdebug_gdb_scripts section): Add reference
+	to 'Auto-loading safe path'.
+
+2012-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Implement multi-component --with-auto-load-dir.
+	* gdb.texinfo (Auto-loading): New references
+	for 'set auto-load scripts-directory'
+	and 'show auto-load scripts-directory'.
+	(Auto-loading safe path): Describe the new default.  Move $ddir
+	substituation reference to 'objfile-gdb.py file'.
+	(objfile-gdb.py file): Describe script-name alias.  Change real-name to
+	script-name.  Describe new 'set auto-load scripts-directory'
+	and 'show auto-load scripts-directory'.
+
+2012-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Provide $ddir substitution for --with-auto-load-safe-path.
+	* gdb.texinfo (Auto-loading): Replace /usr/local by $ddir/auto-load.
+	(Auto-loading safe path): Likewise.  Mention the default value,
+	$ddir substitution, --with-auto-load-safe-path and
+	--without-auto-load-safe-path.
+	* observer.texi (gdb_datadir_changed): New.
+
+2012-05-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading): Wrap too long lines in @smallexample.
+	Twice.
+
+	* gdb.texinfo (Separate Debug Files, Auto-loading safe path): Replace
+	directory separator by path separator.
+
+2012-05-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading safe path): Make 'directories'
+	for 'set auto-load safe-path' optional.  Mention if it is omitted.
+	Change disabling security protection condition to "/", twice.
+
+2012-05-03  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* gdb.texinfo (Symbol Tables In Python): Add documentation about
+	the new methods global_block and static_block on gdb.Symtab
+	objects.
+
+2012-05-02  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* gdb.texinfo (Blocks In Python): Add a note saying that future
+	improvements to GDB and its infrastructure can move symbols
+	across blocks within a symbol table.
+
+2012-04-29  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Architectures): Remove menu entry `A29K'.
+	(A29K): Remove.
+
+2012-04-27  Sergio Durigan Junior  <sergiodj@redhat.com>
+	    Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Static Probe Points): New entry, explaining SystemTap
+	and generic static probe support on GDB.
+
+2012-04-25  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Go): Fix thinko.
+
+	* gdb.texinfo (Supported Languages): Add Go.
+	(Go): New node.
+
+2012-04-25  Yao Qi  <yao@codesourcery.com>
+
+	* gdbint.texinfo (Testsuite): New section `Board settings'.
+
+2012-04-23  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading safe path): Remove trailing [@dots{}].
+	Three times.
+
+	* gdb.texinfo (Auto-loading safe path): Add trailing @dots{}.
+	Three times.
+
+2012-04-22  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading safe path): Replace @itemize @bullet
+	by @table @asis.  Fix formatting of one item.
+
+2012-04-18  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading verbose mode): Fix smallexample typo.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	New option "set debug auto-load".
+	* gdb.texinfo (Auto-loading): New menu item for auto-load verbose mode.
+	(auto-load verbose mode): New node.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	New option "set auto-load safe-path".
+	* gdb.texinfo (Auto-loading): Extend the "show auto-load"
+	and "info auto-load" examples for safe-path.  Put there also references
+	for "set auto-load safe-path" and "show auto-load safe-path".
+	New menu item for Auto-loading safe path.
+	(Auto-loading safe path): New node.
+	(Python Auto-loading): Update the expected output from "Missing"
+	to "No".
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	auto-load: Implementation.
+	* gdb.texinfo (Mode Options): New anchor for -nx.
+	(Startup): New anchors for Option -init-eval-command,
+	Home Directory Init File
+	and Init File in the Current Directory during Startup.
+	Mention set auto-load local-gdbinit with a reference.
+	Change the sample code to "set auto-load python-scripts".
+	(Threads): New anchor set libthread-db-search-path.
+	Provide references to libthread_db.so.1 file.
+	(Controlling GDB): New menu item for Auto-loading.
+	(Auto-loading, Init File in the Current Directory)
+	(libthread_db.so.1 file, objfile-gdb.gdb file): New nodes.
+	(Python): Rename the menu item Auto-loading to Python Auto-loading.
+	(Writing a Pretty-Printer, Objfiles In Python): Update the renamed
+	reference.
+	(Auto-loading): Rename to ...
+	(Python Auto-loading): ... here.  Change "set auto-load-scripts" to
+	"set auto-load python-scripts", new anchor for it.  Change
+	"show auto-load-scripts" to "show auto-load python-scripts", new anchor
+	for it.  Change "info auto-load-scripts"
+	to "info auto-load python-scripts", new anchor for it.  Change "scripts"
+	to "Python scripts".
+
+2012-04-14  Anton Gorenkov <xgsa@yandex.ru>
+
+	PR mi/13393
+	* gdb.texinfo (Print Settings): Extend the description for "set print
+	object".
+	(GDB/MI Variable Objects): Extend the description for -var-create and
+	-var-list-children.
+
+2012-04-11  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* gdb.texinfo (Examining Data): Document the 'explore' command.
+
+2012-03-28  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Document what happens
+	to the children of a varobj and its update range when -var-update
+	returns that the varobj's type changed.
+
+2012-03-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading): Move @menu to the end of @node.
+	Create two new links fir 'objfile-gdb.py file'
+	and 'dotdebug_gdb_scripts section'.
+
+2012-03-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Auto-loading): Rename node reference
+	'.debug_gdb_scripts section' to 'dotdebug_gdb_scripts section'.
+	Twice.
+	(.debug_gdb_scripts section): Rename the node ...
+	(dotdebug_gdb_scripts section): ... here.
+	(Maintenance Commands): Also rename this node reference.
+
+2012-03-22  Siva Chandra Reddy  <sivachandra@google.com>
+
+	* gdb.texinfo (Python API/Values From Inferior): Add description
+	about the new method Value.referenced_value.  Add description on
+	how Value.dereference is different (and similar) to
+	Value.referenced_value.
+
+2012-03-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (File Options): Describe --init-command=FILE, -ix and
+	--init-eval-command=COMMAND, -iex.
+	(Startup): Describe -iex and -ix.  Simplify the example
+	for "set auto-load-scripts off".
+
+2012-03-16  Gary Benson  <gbenson@redhat.com>
+
+	PR breakpoints/10738
+	* gdb.texinfo (Inline Functions): Remove the now-unnecessary @item
+	stating that GDB cannot set breakpoints on inlined functions.
+	(Mode Options): Document --use-deprecated-index-sections.
+	(Index Section Format): Document new index section version format.
+
+2012-03-15  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Debugging C Plus Plus): Document "info vtbl".
+
+2012-03-13  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Help): Change apropos example to use "alias" instead
+	of "reload".
+	(Symbols): Delete docs for set/show symbol-reloading.
+	* gdbint.texinfo (Defining Other Architecture Features): Delete
+	SYMBOL_RELOADING_DEFAULT.
+	* refcard.tex: Delete reference to symbol-reloading.
+
+2012-03-07  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (General Query Packets): Document new
+	QProgramSignals packet.
+	* gdb.texinfo (Remote configuration): Mention
+	"program-signals-packet".
+
+2012-03-05  Tristan Gingold  <gingold@adacore.com>
+
+	* gdb.texinfo (General Query Packets): Document xfer:uib:read.
+
+2012-03-03  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (In-Process Agent): New node.
+	Document new commands.
+	(General Query Packets): Add packet `QAgent'.
+
+2012-03-01  Maciej W. Rozycki  <macro@codesourcery.com>
+
+	* gdb.texinfo (MIPS Features): Add org.gnu.gdb.mips.dsp.
+
+2012-03-01  Scott J. Goldman <scottjg@vmware.com>
+
+	* gdb.texinfo (Commands In Python): Put example python macro in
+	COMMAND_USER category rather than COMMAND_OBSCURE.
+	Document gdb.COMMAND_USER.
+	(User-defined Commands): Update documentation to clarify
+	"set/show max-user-call-depth" and "show user" don't apply to python
+	commands.  Update documentation to clarify "help user-defined" may
+	also include python commands defined as COMMAND_USER.
+
+2012-02-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Startup): Add option -ex description to the option -x
+	description.
+
+2012-02-24  Luis Machado  <lgustavo@codesourcery.com>
+
+	* gdb.texinfo (Setting Breakpoints): Mention and explain the
+	condition-evaluation breakpoint parameter.
+	Mention condition-evaluation mode being shown in "info break".
+	(Break Conditions): Add description for target-side
+	conditional breakpoints.
+	(Remote Configuration): Mention conditional-breakpoints-packet.
+	(Packets): Add cond-expr parameter to Z0/Z1 packets and explain
+	cond-expr.
+	(General Query Packets): Mention new ConditionalBreakpoint feature.
+
+2012-02-22  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Blocks In Python): Clarify block iteration.
+
+2012-02-17  Tom Tromey  <tromey@redhat.com>
+
+	PR python/10753:
+	* gdb.texinfo (objfile-gdb.py file): Fix location of auto-load
+	directory.
+
+2012-02-14  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Disabling Breakpoints): Document enable count.
+
+2012-02-13  Pedro Alves  <palves@redhat.com>
+
+	* gdb.texinfo (MIPS boards): Refer to mips-elf instead of
+	mips-idt-ecoff.
+
+2012-02-09  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Symbols In Python): Add missing `@end defvar'.
+
+2012-02-07  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Symbols In Python): Document Symbol.needs_frame and
+	Symbol.value.
+
+2012-02-07  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Symbols In Python): Document Symbol.line.
+
+2012-01-27  Thomas Schwinge  <thomas@codesourcery.com>
+
+	* gdb.textinfo (Packets): Move vCont paragraph to the correct place.
+
+2012-01-24  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Catchpoints): Document "catch load" and "catch
+	unload".
+	(Files): Mention new catch commands.
+	(GDB/MI Async Records): Likewise.
+
+2012-01-24  Gary Benson  <gbenson@redhat.com>
+
+	Delete #if 0'd out code.
+	* gdb.texinfo (Frame Info): Remove "info catch".
+
+2012-01-20  Ulrich Weigand  <ulrich.weigand@linaro.org>
+
+	* gdb.texinfo (Remote Configuration): Document
+	"set remote hostio-readlink-packet" command.
+	(General Query Packets): Document vFile:readlink packet.
+
+2012-01-16  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Specify Location): Document relative file name
+	handling.
+
+2012-01-16  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (gdb.printing): Document FlagEnumerationPrinter.
+
+2012-01-13  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo (Coding Standards): Require braces for two lines of
+	code.
+
+2012-01-11  Paul Hilfinger  <hilfingr@adacore.com>
+
+	* gdb.texinfo (Variables): Document use of :: for non-static
+	variables.
+
+2012-01-05  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Start of New Year Procedure): Update
+	to replace use of copyright.sh by use of copyright.py.
+
+2012-01-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Remove the gdbtui binary.
+	* all-cfg.texi (GDBTUI): Remove.
+	* gdb.texinfo (Mode Options): Remove the GDBTUI reference.
+	(TUI): Remove GDBTUI pindex.  Remove the GDBTUI reference.
+	* gdbint.texinfo (Testsuite): Replace `gdbtui' by `gdb -tui'.
+
+2011-12-23  Kevin Pouget  <kevin.pouget@st.com>
+
+	Introduce gdb.FinishBreakpoint in Python.
+	* gdb.texinfo (Finish Breakpoints in Python): New subsection.
+	(Python API): Add menu entry for Finish Breakpoints.
+
+2011-12-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdbint.texinfo (Testsuite): Describe KFAIL and XFAIL in Writing
+	tests.
+
+2011-12-16  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Server): Document -/stdio argument to gdbserver.
+
+2011-12-16  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Python Commands): Remove "maint set/show print
+	stack".  Add documentation for "set/show python print-stack".
+
+2011-12-14  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Implementing a Remote Stub): Explain that you
+	should transfer control to the stub in the startup code instead of
+	in main.  Mention the need to get past the initial breakpoint.
+
+2011-12-06  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Breaks): Update for new behavior.
+
+2011-12-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Requirements, Remote Protocol): Reference also `Library
+	List Format for SVR4 Targets'.
+	(General Query Packets): New item qXfer:libraries-svr4:read.
+	(Library List Format for SVR4 Targets): New node.
+
+2011-12-01  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Writing a Pretty-Printer): Use append method, not
+	add.
+
+2011-11-22  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Document new *stopped
+	reasons.
+
+2011-11-20  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Starting and Stopping Trace Experiments): Document
+	note-related options and variables.
+	(Tracepoint Packets): Document packet changes.
+
+2011-11-20  Sanjoy Das  <sdas@igalia.com>
+
+	* gdb.texinfo (JIT Interface): Add documentation on writing and
+	usind JIT debug info readers.
+	(Custom Debug Info, Using JIT Debug Info Readers, Writing JIT
+	Debug Info Readers): New nodes.
+
+2011-11-18  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Create and Delete Tracepoints): Mention pending
+	tracepoint.
+
+2011-11-15  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Files): Document basenames-may-differ.
+
+2011-11-14  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Shell Commands): Document "!".
+
+2011-11-14  Stan Shebs  <stan@codesourcery.com>
+	    Kwok Cheung Yeung  <kcy@codesourcery.com>
+
+	* gdb.texinfo (Create and Delete Tracepoints): Describe what is
+	needed to get shorter fast tracepoints.
+	(Tracepoint Packets): Document new qTMinFTPILen packet.
+
+2011-11-14  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Create and Delete Tracepoints): Describe changed
+	behavior of tracepoint.
+	(General Query Packets): New feature InstallInTrace.
+	(Remote Configuration): Document "set remote
+	install-in-trace-packet".
+
+2011-11-12  Matt Rice  <ratmice@gmail.com>
+
+	* gdb.texinfo (C Preprocessor Macros): Remove info definitions.
+	Add arguments to info macro.
+
+2011-11-10  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Compilation): Don't mention -gdwarf-2.  Link to GCC
+	manual.
+	(Variables): Don't mention -gdwarf-2.  Link to Compilation node.
+	(Macros): Add a footnote.
+	(C): Remove paragraph about compiler options.
+	(C Constants): Mention wide character and string constants.
+	(C Plus Plus Expressions): Update compiler option advice.  Mention
+	using declarations.  Mention ADL.  Remove old HP compiler
+	information.
+
+2011-11-10  Tom Tromey  <tromey@redhat.com>
+
+	PR c++/9257:
+	* gdb.texinfo (Print Settings): Add an extra note about the need
+	for a vtable.
+
+2011-11-08  Maciej W. Rozycki  <macro@codesourcery.com>
+
+	* gdb.texinfo (MIPS): Remove duplicate "auto" reference from
+	"set mips abi" documentation.
+
+2011-11-04  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Maintenance Commands): Update docs of "maint time".
+
+2011-11-03  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Stopping): Add menu entry.
+	(Continuing and Stepping): Restore @node.  Use @section, not
+	@subsection.
+
+2011-11-03  Maciej W. Rozycki  <macro@codesourcery.com>
+
+	* gdb.texinfo (Skipping Over Functions and Files): Remove node
+	designation.  Fix "Specify Location" cross-reference.
+
+2011-11-02  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Action Lists): Document collect/s.
+	(General Query Packets): Describe tracenz feature.
+	* agentexpr.texi (Bytecode Descriptions): Describe tracenz.
+
+2011-10-28  Paul Koning  <paul_koning@dell.com>
+
+	* gdb.texinfo (gdb.types): Rename deepitems to deep_items.
+
+2011-10-27  Kevin Pouget  <kevin.pouget@st.com>
+
+	* gdb.texinfo ((Frames In Python): Document
+	gdb.FRAME_UNWIND_FIRST_ERROR contant.
+
+2011-10-26  Paul Koning  <paul_koning@dell.com>
+
+	* gdb.texinfo (gdb.types): Document new deepitems function.
+
+2011-10-25  Paul Koning  <paul_koning@dell.com>
+
+	PR python/13327
+
+	* gdb.texinfo (Values From Inferior): Add is_lazy attribute,
+	fetch_lazy method.
+
+2011-10-20  Phil Muldoon  <pmuldoon@redhat.com>
+
+	PR python/12656
+
+	* gdb.texinfo (Blocks In Python): Document is_static, is_global,
+	global_block, static_block function.
+
+2011-10-19  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Commands In Python): Add missing "@"s.
+
+2011-10-13  Kevin Pouget  <kevin.pouget@st.com>
+
+	PR python/13285 Document named constants for frame unwind stop reasons
+	* gdb.texinfo (Frames In Python): Document gdb.FRAME_UNWIND_*
+	constants.
+
+2011-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Fix compatibility with texinfo versions older than 4.12.
+	* Makefile.in (MAKEINFO): Set to @MAKEINFO@.
+	(MAKEINFOFLAGS, MAKEINFO_EXTRA_FLAGS, MAKEINFO_CMD): New.
+	(MAKEHTMLFLAGS): Use MAKEINFO_CMD.
+	(gdb.info, gdbint.info, stabs.info, annotate.info): Use MAKEINFO_CMD.
+	* gdb.texinfo (Tail Call Frames): Convert @arrow{} to @click, when possible.
+	Make the conversion conditional on HAVE_MAKEINFO_CLICK, using variables
+	CALLSEQ1A, CALLSEQ1B, CALLSEQ2A and CALLSEQ2B.
+
+2011-10-09  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Extending GDB): Document alias command.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Support @entry in input expressions.
+	* gdb.texinfo (Variables): Describe @entry names suffix.
+	(Print Settings): Add anchor for `set print entry-values'.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	Display @entry parameter values (without references).
+	* gdb.texinfo (Tail Call Frames): Add anchor.  Add self tail call
+	example.
+	(Print Settings): New description of set print entry-values and show
+	print entry-values.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	Recognize virtual tail call frames.
+	* gdb.texinfo (Optimized Code): Add reference to Tail Call Frames.
+	(Tail Call Frames): New node.
+	(Frames In Python): Add gdb.TAILCALL_FRAME.
+
+2011-10-07  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (gdb.printing): Document new `replace' arg to
+	register_pretty_printer.
+
+2011-10-07  Phil Muldoon  <pmuldoon@redhat.com>
+
+	PR python/12930
+	PR python/12802
+
+	* gdb.texinfo (Breakpoints In Python): Clarify behavior in the
+	stop method.
+
+2011-10-07  Ulrich Weigand  <ulrich.weigand@linaro.org>
+
+	* gdb.texinfo (Starting your Program): "set disable-randomization"
+	is no longer Linux-specific.
+	(Remote Configuration): Document "set remote
+	disable-randomization-packet".
+	(General Query Packets): Document "QDisableRandomization" packet
+	and add it to "qSupported" list.
+
+2011-10-07  Kevin Pouget  <kevin.pouget@st.com>
+
+	Allow Python notification of new object-file loadings.
+	* gdb.texinfo (Events In Python): Document `gdb.NewObjFileEvent'
+	event type.
+
+2011-10-04  Kevin Pouget  <kevin.pouget@st.com>
+
+	PR python/12691: Add the inferior to Python exited event
+	* gdb.texinfo (Events In Python): Describe exited inferior attribute.
+
+2011-10-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Minor
+	rephasing.
+
+2011-10-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Ada Tasking Commands): New node.
+	(GDB/MI Miscellaneous Commands): Add `ada-task-info'
+	as possible feature returned by the `-list-features'
+	command.
+
+2011-09-28  Paul Koning  <paul_koning@dell.com>
+
+	* gdb.texinfo (gdb.Type): Document field access by dictionary
+	key syntax.
+
+2011-09-28  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Files): Update options for `add-symbol-file'.
+	Add one space after option `-s'.  Remove @r{} markup.
+
+2011-09-27  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Action Lists): Document $_ret.
+
+2011-09-16  Hui Zhu  <teawater@gmail.com>
+
+	* gdb.texinfo (Tracepoint Restrictions): Change *$esp@300
+	to *(unsigned char *)$esp@300.
+
+2011-09-15  Paul Koning  <paul_koning@dell.com>
+
+	* gdb.texinfo: Make style of Python functions and methods match
+	the syntax of Python.  Also put class and module names explicitly
+	on function, member, and variable names, matching Python
+	documentation conventions.
+
+2011-09-15  Kevin Pouget  <kevin.pouget@st.com>
+
+	PR Python/12692 Add gdb.selected_inferior() to Python interface.
+	* gdb.texinfo (Inferiors In Python): Describe new
+	gdb.selected_inferior() function.
+
+2011-09-15  Kevin Pouget  <kevin.pouget@st.com>
+
+	Handle multiple breakpoint hits in Python interface:
+	* gdb.texinfo (Events In Python): New function documentation:
+	gdb.BreakpointEvent.breakpoints. Indicate that
+	gdb.BreakpointEvent.breakpoint is now deprecated.
+
+2011-09-04  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo: Set EDITION to "Tenth" and change ISBN.
+
+2011-08-25  Andrew Oakley  <andrew@ado.is-a-geek.net>
+
+	* gdb.texinfo (Types In Python): Document 'bitpos' for enums.
+
+2011-08-17  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Prompt): Add set/show extended-prompt
+	documentation
+	(Basic Python): Add prompt_hook anchor.
+	(Python modules): Reword module text to reflect multiple modules.
+	(gdb.prompt): Document gdb.prompt module.
+
+2011-08-14  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (General Query Packets): Document qXfer:fdpic:read packet.
+
+2011-08-14  Yao Qi  <yao@codesourcery.com>
+
+	* gdb.texinfo (Standard Target Features): Document C6x features.
+	(TIC6x Features): New node.
+
+2011-08-12  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Symbols In Python): Document symbol.type.
+
+2011-08-09  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Python): Document command and function
+	auto-loading.
+
+2011-07-26  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (whatis, ptype): Highlight their differences.  Describe
+	typedefs unrolling.  Extend the sample code by an inner typedef and
+	outer typedefs unrolling.
+
+2011-07-26  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (Caching Remote Data): Document {set,show} dcache
+	size and line-size.
+
+2011-07-21  Matt Rice  <ratmice@gmail.com>
+
+	PR macros/12999
+	* gdb.texinfo (Macros): Add info definitions and info macros commands.
+	Update text and cindex entries for info macro command.
+
+2011-07-21  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* observer.texi (GDB Observers): Add before_prompt observer.
+	* gdb.texinfo (Basic Python): Add documentation for prompt
+	substitution.
+
+2011-07-11  Phil Muldoon  <pmuldoon@redhat.com>
+
+	PR python/12438
+	* gdb.texinfo (Python Commands): Add deprecate note to maint
+	  set/show python print-stack.  Document set/show python
+	  print-backtrace.
+
+2011-07-05  Thiago Jung Bauermann  <bauerman.ibm.com>
+
+	* gdb.texinfo: Fix typos.
+
+2011-07-01  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Debugging Output): Document set debug
+	check-physname.
+
+2011-06-29  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document
+	breakpoint-notifications feature.
+
+2011-06-29  Ulrich Weigand  <ulrich.weigand@linaro.org>
+
+	* gdb.texinfo (Target Description): Remove warning about
+	possibly unstable format.
+
+2011-06-03  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Document 'exit-code' field.
+	(Events In Python): Note that exit_code is optional.
+
+2011-05-17  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Remote Protocol) <Overview>: Mention vCont is
+	required for multi-threading support.
+	(Remote Protocol) <Packets>: Mention that 'c', 's', 'C', 'S' and
+	Hc are deprecated for multi-threading debugging.  Point readers at
+	the vCont packet.
+
+2011-05-15  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Auto-loading): Document printing of missing scripts.
+
+2011-05-13  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Threads): Document $sdir,$pdir.
+	(Server): Document $pdir exception.
+
+	* gdb.texinfo (Auto-loading): Document "info auto-load-scripts".
+
+	* gdb.texinfo (Threads): Clarify default value for
+	libthread-db-search-path.
+
+	* gdb.texinfo (Completion): Update example.
+	(Debugging Output): Delete `set/show debug lin-lwp-async'.
+
+2011-05-12  Kwok Cheung Yeung  <kcy@codesourcery.com>
+
+	* gdb.texinfo: Document change in the behaviour of the enable and
+	disable GDB commands when applied to tracepoints.
+	Document the EnableDisableTracepoints remote stub feature.
+	Document QTEnable and QTDisable in the list of tracepoint packets.
+
+2011-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* Makefile.in (GDB_DOC_SOURCE_INCLUDES): Rename inc-hist.texinfo to
+	hsuser.texi.
+	* gdb.texinfo <!SYSTEM_READLINE>: Rename inc-hist.texinfo inclusion and
+	comment to hsuser.texi.  Change rluser.texi name in the comment.
+
+2011-05-10  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Threads): If an empty path is provided for
+	libthread-db-search-path it is reset to its default value.
+	(Server): Ditto.
+
+2011-05-09  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Requirements): Fix typo.  Mention --with-iconv-bin.
+
+2011-05-06  Sergio Durigan Junior  <sergiodj@linux.vnet.ibm.com>
+	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	Implement support for PowerPC BookE masked watchpoints.
+	* gdb.texinfo (Set Watchpoints): Document mask parameter.
+	(PowerPC Embedded): Mention support of masked watchpoints.
+
+2011-05-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (In Memoriam): Replace litteral uses of `GDB' with
+	`@value{GDBN}'.
+
+2011-05-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (titlepage): Remove dedication.
+	(In Memoriam): New appendix.
+
+2011-04-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Index Section Format): Change the version to 5.
+	Describe the different formula.
+
+2011-04-24  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Starting and Stopping Trace Experiments): New anchor
+	for disconnected tracing.
+	(Multi-Process Mode for @code{gdbserver}): Mention --multi and
+	extended-remote relationship.  Mention --once.
+	(TCP port allocation lifecycle of @code{gdbserver}): New.
+
+2011-04-23  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Server): Improve indexing.  Index all optional
+	switches to gdbserver.
+
+2011-04-20  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Index Section Format): New node.
+	(Top): Add new node to menu.
+
+2011-04-20  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Maintenance Commands): Document `maint print
+	remote-registers'.
+
+2011-04-20  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Trace File Format): Move node later.
+
+2011-04-19  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (Register Information Functions): Remove
+	duplicate "the".
+	* gdb.texinfo (Emacs): Remove duplicate "to".
+	(GDB/MI Variable Objects): Remove duplicate "the".
+	(General Query Packets): Likewise.
+
+2011-04-02  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Output Records): Fix menu entry for
+	"GDB/MI Ada Exception Information" node.
+
+2011-04-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (GDB/MI Ada Exception Information): Document
+	the "exception-name" field in the *stopped async record.
+
+2011-03-31  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+	    Sergio Durigan Junior  <sergiodj@linux.vnet.ibm.com>
+
+	Implement support for PowerPC BookE ranged breakpoints.
+	* gdb.texinfo (PowerPC Embedded): Document ranged breakpoints.
+
+2011-03-28  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Tracepoints): Fix typo.
+
+2011-03-24  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Specify Location): Document `function:label'
+	linespec.
+
+2011-03-18  Phil Muldoon  <pmuldoon@redhat.com>
+
+	PR python/12149
+
+	* gdb.texinfo (Basic Python): Update gdb.write and flush text.
+
+2011-03-17  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Blocks In Python): Add is_valid method description.
+	(Inferiors In Python): Likewise.
+	(Threads In Python): Likewise.
+	(Symbols In Python): Likewise.
+	(Objfiles In Python): Likewise.
+	(Symbol Tables In Python): Likewise.
+
+2011-03-15  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Auto Display) <undisplay, enable display, disable
+	display>: Explain that the commands accept number ranges.
+
+2011-03-14  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Breakpoints In Python): Add description and example
+	of Python stop function operation.
+
+2011-03-10  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Parameters In Python): Document get_set_string and
+	get_show_string methods.
+
+2011-02-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Tracepoint Conditions): Fix missing parenthesis.
+
+	* gdb.texinfo (Starting and Stopping Trace Experiments): Fix
+	circular-trace-buffer name.
+
+2011-02-28  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Inferiors and Programs): Fix small error introduced
+	in the previous change.
+
+2011-02-27  Michael Snyder  <msnyder@vmware.com>
+
+	* gdb.texinfo (Inferiors and Programs): Update commands to show
+	that they can accept multiple arguments.
+
+2011-02-24  Joel Brobecker  <brobecker@adacore.com>
+
+	Revert the following patch (code patch was not approved):
+	2011-02-21  Hui Zhu  <teawater@gmail.com>
+	* agentexpr.texi (bytecode descriptions): add printf.
+	* gdb.texinfo (tracepoint action lists): add printf.
+
+2011-02-23  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Symbols In Python): Fix mention of C++, use C@t{++}.
+
+2011-02-23  Michael Snyder  <msnyder@vmware.com>
+
+	* gdb.texinfo (Set Breaks): Add @dots{} to arguments of info break.
+	(Set Watchpoints): Add @dots{} to argument of info watchpoints.
+	(Listing Tracepoints): Add @dots{} to argument of info tracepoints.
+
+2011-02-22  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Symbols In Python): Document lookup_global_symbol.
+	Clarify behaviour of lookup_symbol when `block' argument is omitted,
+	add description of result, fix @defun formatting.
+
+2011-02-21  Hui Zhu  <teawater@gmail.com>
+
+	* agentexpr.texi (Bytecode Descriptions): Add printf.
+	* gdb.texinfo (Tracepoint Action Lists): Add printf.
+
+2011-02-18  Tom Tromey  <tromey@redhat.com>
+
+	* agentexpr.texi (Bytecode Descriptions): Document pick and rot.
+
+2011-02-14  Michael Snyder  <msnyder@vmware.com>
+
+	* gdb.texinfo (threads): Document argument for "info threads" cmd.
+	Document new command "thread find".
+
+2011-02-14  Michael Snyder  <msnyder@vmware.com>
+
+	* gdb.texinfo (Threads): Update example of new thread message.
+
+2011-02-14  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Remote Configuration): Mention set/show remote
+	traceframe-info.
+	(Tools/Packages Optional for Building GDB): Mention that expat is
+	used for traceframe info.
+	(Remote Protocol) <Menu>: Add "Traceframe Info Format".
+	(General Query Packets) <qSupported>: Describe the
+	qXfer:traceframe-info:read feature.
+	(qXfer::read): Describe qXfer:traceframe-info:read.
+	(Traceframe Info Format): New section.
+
+2011-02-04  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdbint.texinfo (Formatting): Mention some formatting guidelines
+	for casts and unary operators.
+
+2011-02-04  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Document that symbols-loaded
+	is not useful.
+
+2011-01-25  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo: s/value optimized out/optimized out/g
+
+2011-01-21  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Other Misc Settings): Rework part of the
+	documentation of the "set interactive mode" command.
+
+2011-01-19  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Threads): Document thread name output and `thread
+	name' command.
+	(Threads In Python): Document Thread.name attribute.
+	(GDB/MI Thread Commands): Document thread attributes.
+
+2011-01-12  Andrew Burgess  <aburgess@broadcom.com>
+
+	* gdb.texinfo (GDB/MI Data Manipulation): Update to reflect
+	changes in mi/mi-cmd-disas.c
+
+2011-01-12  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Threads): Remove duplicate text.  Update examples.
+	Fix "thread apply" text.
+
+2011-01-11  Sergio Durigan Junior  <sergiodj@linux.vnet.ibm.com>
+	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	Implement support for PowerPC BookE ranged watchpoints.
+	* gdb.texinfo (PowerPC Embedded): Document ranged watchpoints and
+	the "set powerpc exact-watchpoints" flag.
+
+2011-01-07  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Python API): Add descriptions to @menu items.
+
+2011-01-06  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Frames In Python): Document gdb.newest_thread.
+
+2010-01-06  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (Debugging Output): Document "set debug jit".
+
+2011-01-06  Tom Tromey  <tromey@redhat.com>
+
+	PR python/12133:
+	* gdb.texinfo (Frames In Python): Document various frame
+	constants.
+
+2011-01-05  Joel Brobecker  <brobecker@adacore.com>
+
+	* doc/agentexpr.texi, doc/all-cfg.texi, doc/annotate.texinfo,
+	doc/gdb.texinfo, doc/gdbint.texinfo, doc/observer.texi,
+	doc/refcard.tex, doc/stabs.texinfo: Copyright year update.
+
+2011-01-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* Makefile.in (diststuff): Remove gdb-cfg.texi and GDBvn.texi.
+	(clean): Add GDBvn.texi.
+
+2010-12-29  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ada Glitches): Remove paragraph describing the
+	occasional case where the debugger prints an array address
+	instead of the array itself.
+
+2010-12-23  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Packets) <read registers packet>: Document support
+	for registers that were not collected.
+
+2010-12-15  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Startup): Document auto-loading of scripts during
+	startup.
+	(Auto-loading): Delete "maint set python auto-load on|off".
+	Add "set auto-load-scripts on|off".
+
+2010-12-07  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Mode Options): Document -data-directory.
+	(Data Files): Add reference to -data-directory.
+
+2010-11-29  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Pretty-Printer Introduction): Change
+	printer-name:subprinter-name to printer-name;subprinter-name.
+
+2010-11-29  Phil Muldoon  <pmuldoon@redhat.com>
+
+	PR python/12199
+
+	* gdb.texinfo (Breakpoints In Python): Document "delete" method.
+
+2010-11-23  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Top): Check SYSTEM_READLINE.
+	(Editing): Likewise.
+	(Command History): Likewise.
+	(TUI Keys): Likewise.
+	(Bug Reporting): Conditionally include rluser.texi and
+	inc-history.texinfo.
+	* Makefile.in (READLINE_TEXI_INCFLAG): New variable.
+	(GDB_DOC_SOURCE_INCLUDES): Add comment.
+	(GDBvn.texi): Set SYSTEM_READLINE when appropriate.
+	(gdb.dvi): Use READLINE_TEXI_INCFLAG.
+	(gdb.pdf): Likewise.
+	(gdb.info): Likewise.
+	(gdb/index.html): Likewise.
+
+2010-11-23  Tom Tromey  <tromey@redhat.com>
+
+	* Makefile.in (Makefile): Run ../config.status.
+	(distclean): Update.
+	* configure: Remove.
+	* configure.ac: Remove.
+
+2010-11-12  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Basic Python): Update.  Add xref.
+	(Exception Handling): Document new exception classes.
+	(Types In Python): Update.
+	(Frames In Python): Update.
+
+2010-11-11  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Breakpoints In Python): Document "internal"
+	parameter, and visible attribute.
+
+2010-11-05  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Source Path): Document "set directories".
+
+2010-11-05  Ken Werner  <ken.werner@de.ibm.com>
+
+	* gdb.texinfo: (Summary) Add mention about OpenCL C language support.
+	(OpenCL C): New node.
+
+2010-11-02  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Pretty Printing): Expand into three sections,
+	introduction, example, and commands.
+	(Python API): Delete section Disabling Pretty-Printers, merge into
+	Selecting Pretty-Printers.
+	(Writing a Pretty-Printer): New section.  Move the pretty-printer
+	example here, and reformat to match python coding style.  Add a second
+	example using the gdb.printing module.
+	(Python modules): Add gdb.printing.
+
+2010-10-29  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Python): Fix long line.
+
+2010-10-20  Doug Evans  <dje@google.com>
+
+	* gdbint.texinfo (Misc Guidelines): Renamed from Coding.
+	All references updated.  Correct sections marked as subsections.
+	(Coding Standards): New chapter.  Move the coding standard related
+	subsections here.  Add section on Python coding standards.
+
+2010-10-13  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Python): Add "Python modules".
+	(Types in Python): Add reference to gdb.types section.
+	(Python modules): New node.
+
+2010-10-11  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Values From Inferior): Add reference to "Types in
+	Python" from gdb.Value.type description.
+
+2010-09-28  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ravenscar Profile): New node.
+
+2010-09-22  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Values From Inferior): Mention Value.__init__.
+
+2010-09-22  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Values From Inferior): Clarify that
+	value.dynamic_type works only in C++ programs with RTTI.
+
+2010-09-15  Paul Bolle  <pebolle@tiscali.nl>
+
+	* gdb.texinfo (Character Sets): Correctly reference host-charset
+	in example.
+
+2010-09-13  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Stack Manipulation) <-stack-list-frames>:
+	Document "fullname" and "from".
+
+2010-09-01  Marc Khouzam  <marc.khouzam@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document new
+	feature `reverse' output by -list-target-features.
+
+2010-08-31  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gdb.texinfo (i386 Features): Remove an extra "@item".
+
+2010-08-30  Tom Tromey  <tromey@redhat.com>
+
+	PR python/11792:
+	* gdb.texinfo (Values From Inferior): Document dynamic_type.
+
+2010-08-24  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (ARM Features): Document
+	org.gnu.gdb.arm.m-profile.
+
+2010-08-23  Tom Tromey  <tromey@redhat.com>
+
+	PR python/11145:
+	* gdb.texinfo (Values From Inferior): Document dynamic_cast and
+	reinterpret_cast methods.
+
+2010-08-23  Tom Tromey  <tromey@redhat.com>
+
+	PR python/11915:
+	* gdb.texinfo (Types In Python): Document array method.
+
+2010-08-18  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo (PowerPC Embedded): Mention support for the DVC register.
+
+2010-08-16   Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Set Watchpoints): Document -location option.
+
+2010-08-13  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (.debug_gdb_scripts section): Fix typo.
+
+2010-08-13  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Data Manipulation): Document
+	-data-read-memory-raw and -data-write-memory-raw.
+
+2010-08-11  Tom Tromey  <tromey@redhat.com>
+	    Phil Muldoon <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Basic Python): Describe post_event API.
+
+2010-08-11  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Basic Python): Describe solib_address and
+	decode_line Python APIs
+
+2010-08-10  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Pretty Printing API): Document
+	gdb.default_visualizer.
+
+2010-08-10  Tom Tromey  <tromey@redhat.com>
+
+	Revert gdb-add-index addition:
+	* gdb.texinfo (Index Files): Don't document gdb-add-index.
+
+2010-08-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii <eliz@gnu.org>
+
+	* gdb.texinfo (Mode Options) <-batch>
+	(Basic Python) <gdb.execute>: Describe setting width and height.
+
+2010-07-31  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (Threads): Document 'debug libthread-db'.
+
+2010-07-30  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Index Files): Mention gdb-add-index.
+
+2010-07-30  Hui Zhu  <teawater@gmail.com>
+
+	* gdb.texinfo (Inferiors and Programs): Update the introduce of
+	"detach inferior" and "kill inferior".
+
+2010-07-28  CHENG Renquan  <rqcheng@smu.edu.sg>
+
+	* gdb.texinfo (Machine Code): Update description of two forms of
+	arguments, and add new example to demonstrate the new form.
+
+2010-07-27  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Values From Inferior): Add value inferior function
+	call description.
+
+2010-07-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Active Targets): Fix wrong comma placement.
+
+2010-07-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	Make core files the process_stratum.
+	* gdb.texinfo (Active Targets): Remove core_stratum.  Include
+	record_stratum example.
+
+2010-07-13  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Index Files): New node.
+
+2010-07-13  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Remove extra 'for'.
+
+2010-07-13  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Specify Location): Document labels.
+
+2010-07-01  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Create and Delete Tracepoints): Add more index
+	entries for fast tracepoints and static tracepoints.
+
+2010-07-01  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (General Query Packets) <qfThreadInfo,
+	qsThreadInfo>: Spell out `l' as ell.
+
+2010-07-01  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Convenience Variables): Document $_sdata.
+	(Commands to Set Tracepoints): Describe static tracepoints.  Add
+	`Listing Static Tracepoint Markers' menu entry.  Document
+	"strace".
+	(Tracepoint Action Lists): Document collecting $_sdata.
+	(Listing Static Tracepoint Markers): New subsection.
+	(Tracepoints support in gdbserver): Mention static tracepoints.
+	(remote packets, enabling and disabling): Mention
+	read-sdata-object.
+	(General Query Packets) <qSupported>: Document qXfer:sdata:read
+	and StaticTracepoint.
+	Mention qTfSTM, qTsSTM and qTSTMat as tracepoint packets.
+	Document qXfer:sdata:read.
+	(Tracepoint packets): Document qTfSTM, qTsSTM and qTSTMat.
+
+2010-06-29  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Threads In Python): Fix unmatched @end table.
+
+2010-06-28  Phil Muldoon  <pmuldoon@redhat.com>
+	    Tom Tromey  <tromey@redhat.com>
+	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo (Inferiors In Python): New node.
+	* gdb.texinfo (Threads In Python): New node.
+
+2010-06-28  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Python): Document what the python directory is
+	and what its location is.
+	(Basic Python): Document the gdb.PYTHONDIR constant.
+
+2010-06-25  Tom Tromey  <tromey@redhat.com>
+
+	PR python/10808:
+	* gdb.texinfo (Basic Python): Document new gdb.execute argument.
+
+2010-06-24  Hui Zhu  <teawater@gmail.com>
+
+	* gdb.texinfo: (Commands for Controlled Output): Add
+	documentation for command "eval".
+
+2010-06-21  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo: Add explicit @node and @appendix for GFDL.
+	* annotate.texinfo: Ditto.
+	* gdbint.texinfo: Ditto.
+	* stabs.texinfo: Ditto.
+
+2010-06-22  Hui Zhu  <teawater@gmail.com>
+
+	* gdb.texinfo: (Process Record and Replay): Add documentation
+	for command "set record memory-query".
+
+2010-06-21  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo: Relicense under GFDL version 1.3.
+	* annotate.texinfo: Relicense under GFDL version 1.3.
+	* gdbint.texinfo: Relicense under GFDL version 1.3.
+	* stabs.texinfo: Relicense under GFDL version 1.3.
+	* fdl.texi: Update to version 1.3.
+
+2010-06-18  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Operating System Auxiliary Information): Describe
+	"info os" when no arguments given.
+
+	* gdb.texinfo (Debugging Programs with Multiple Threads): Describe
+	$_thread.
+
+2010-06-18  Hui Zhu  <teawater@gmail.com>
+
+	* gdb.texinfo: (Process Record and Replay): Add documentation
+	for commands "record save" and "record restore".
+
+2010-06-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo: Include information about the correct use
+	of addresses in the `watch' command.
+
+2010-06-11  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Observer Mode): New section.
+	(General Query Packets): Document QAllow.
+
+2010-06-04  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Python API): New node `Disabling Pretty-Printers'.
+
+2010-06-03  Doug Evans  <dje@google.com>
+
+	* gdbint.texinfo (Coding): Add subsection on command names.
+
+2010-06-02  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document maint set dwarf2
+	always-disassemble.
+
+2010-06-01  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Set Tracepoints): Mention tracepoints support in
+	gdbserver, and add cross reference.
+	(Tracepoints support in gdbserver): New subsection.
+
+2010-05-26  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (General Query Packets) <qSupported>: Describe the
+	`qRelocInsn' feature.
+	(Relocate instruction reply packet): New subsection
+	of `Tracepoint Packets'.
+	(Tracepoint Packets): Mention that packets QTDP and QTStart
+	support the qRelocInsn request, and add cross reference to new
+	subsection.
+
+2010-05-25  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Exception Handling): Document gdb.GdbError.
+	(Commands In Python): Document gdb.string_to_argv.
+
+2010-05-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdbint.texinfo (Host Definition): Remove items NORETURN and
+	ATTR_NORETURN.
+
+2010-04-29  Phil Muldoon  <pmuldoon@redhat.com>
+	    Tom Tromey  <tromey@redhat.com>
+	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo (Parameters In Python): New Node.
+
+2010-04-29  Mihail Zenkov  <mihail.zenkov@gmail.com>
+
+	* gdb.texinfo: (Summary) Add mention about D language support.
+	(Filenames): Add D suffixes.
+	(D): New node.
+
+2010-04-26  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+	* gdbint.texinfo (CANNOT_STEP_HW_WATCHPOINTS): Remove explanation
+	of macro deleted from GDB code.
+
+2010-04-24  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Commands to specify files): Describe what how GDB
+	looks up DOS-based filesystem paths on the system root.  Document
+	the new `set/show target-file-system-kind' commands.
+
+2010-04-23  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Python): Move Auto-loading section here ...
+	(Python API): from here.
+	(Auto-loading): Add docs for .debug_gdb_scripts auto-loaded scripts.
+	(Maintenance Commands): Add docs for "maint print section-scripts".
+
+2010-04-20  Chris Moller  <cmoller@redhat.com>
+
+	* gdb.texinfo (Setting Breakpoints): Added description of
+	filename-qualified rbreak.
+	* refcard.tex (Breakpoints and Watchpoints): Added brief
+	description of filename-qualified rbreak.
+
+2010-04-22  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Data): New @menu reference to Pretty Printing.
+	(Python API): Change the reference to Pretty Printing API.
+	(Pretty Printing): Move the user part under the Data node.  Reformat
+	the sample output to 72 columns.  Create a new reference to Pretty
+	Printing API.  Rename the API part ...
+	(Pretty Printing API): To a new node name.
+	(Selecting Pretty-Printers, Progspaces In Python, Objfiles In Python)
+	(GDB/MI Variable Objects): Change references to Pretty Printing API.
+
+2010-04-21  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Actions): Mention synonymy of actions
+	and commands.
+	(Listing Tracepoints): Update to reflect current behavior.
+
+2010-04-22  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+	* gdb.texinfo (Examining memory): Update for change in string
+	display with explicit size.
+
+2010-04-19  Pedro Alves  <pedro@codesourcery.com>
+
+	PR breakpoints/8554.
+
+	* gdb.texinfo (Save Breakpoints): New node.
+	(save-tracepoints): Rename to ...
+	(save tracepoints): ... this.  Mention that `save-tracepoints' is
+	a deprecated alias to `save tracepoints'.
+
+2010-04-16  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+	* gdb.texinfo ($_tlb): Document new automatic convinience variable.
+	(info w32 thread-information-block): Document new command.
+	(qGetTIBAddress): Document new gdbserver query.
+	(maint set/show show-all-tib): Document new command.
+
+2010-04-15  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Python API): Add progspaces section.
+	(Selecting Pretty-Printers): Progspace pretty-printers are
+	searched too.
+	(Progspaces In Python): New section.
+
+	* gdb.texinfo (Command Files): Add docs for new "source -s" option.
+
+2010-04-14  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Pretty Printing): Document behaviour when to_string
+	returns None.
+
+2010-04-09  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (gdb/mi Tracepoint Commands) <-trace-status>:
+	Describe the `frames-created' field, tweak grammar.
+
+2010-04-09  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (gdb/mi Tracepoint Commands) <-trace-status>:
+	Describe the `circular' and `disconnected' fields.
+
+2010-04-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gdb.texinfo (maint print registers): Mention unavailable and
+	invisible registers.
+
+2010-04-09  Phil Muldoon  <pmuldoon@redhat.com>
+	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
+	    Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Breakpoints In Python): New Node.
+
+2010-04-08  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Packets): Describe disconn and circular
+	trace status fields.
+
+2010-04-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gdb.texinfo (i386 Features): Make org.gnu.gdb.i386.avx
+	optional.  Make org.gnu.gdb.i386.avx requires
+	org.gnu.gdb.i386.avx.
+
+2010-04-08  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Command Files): Document that gdb skips $cdir in
+	search path, and document that gdb only scans the search path if
+	the script's path doesn't specify a directory.
+
+2010-04-05  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (maint show python auto-load): Fix typo.
+
+2010-04-04  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Setting Breakpoints): "info watch" no longer a synonym.
+	(Setting Watchpoints): Update description of "info watch".
+	(Disabling Breakpoints): Only "info break" lists all.
+
+	* gdb.texinfo (Tracepoint Restrictions): Document PC inference.
+	(tdump): Explain how tdump works.
+
+2010-04-01  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Break Commands): Clarify `commands' changes, and
+	add cross reference.
+
+2010-03-31  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (TUI Commands): Mention that in some cases, these
+	commands error out.
+
+2010-03-30  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gdb.texinfo (i386 Features): Add org.gnu.gdb.i386.avx.
+
+2010-03-30  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gdb.texinfo (General Query Packets): Add xmlRegisters.
+
+2010-03-29  Stan Shebs  <stan@codesourcery.com>
+	    Nathan Sidwell  <nathan@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Tracepoint Commands): Add notes about the
+	GDBN equivalent.
+	(Set Tracepoints): Remove mention that conditional tracepoints
+	don't exist.
+	(Tracepoint Actions): Clarify when while-stepping collection
+	happens, note that while-stepping does not automatically collect
+	$pc.
+
+2010-03-29  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Packets): Describe QTDPsrc.
+	(General Query Packets): Describe TracepointSource.
+
+2010-03-27  Matt Rice  <ratmice@gmail.com>
+
+	* gdb.texinfo (ARM): Document arguments to "target sim".
+	(Set Catchpoints): Use @dots{} instead of @r{...}.
+
+2010-03-26  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Packets): Remove mention that
+	terror:string may be plain text, and drop mention of X prefix.
+
+2010-03-26  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Tracepoint Commands): Add comma after @xref.
+
+2010-03-24  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Packets): Document trace error status.
+
+2010-03-24  Tom Tromey  <tromey@redhat.com>
+
+	PR breakpoints/9352:
+	* gdb.texinfo (Break Commands): Update.
+
+2010-03-24  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Tracepoint Commands): Document MI tracepoint
+	commands.
+
+2010-03-16  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Starting and Stopping Trace Experiments): Describe
+	circular-trace-buffer.
+	(Tracepoint Packets): Describe QTBuffer, and details of the
+	qTStatus reply.
+
+2010-03-12  Stan Shebs  <stan@codesourcery.com>
+	    Nathan Sidwell  <nathan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Actions): Clarify that while-stepping is
+	doing instruction stepping.
+	(Tracepoint Restrictions): New node.
+
+2010-03-10  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (Symbol Handling): Update.
+
+2010-03-08  Tom Tromey  <tromey@redhat.com>
+
+	PR cli/9591:
+	* gdb.texinfo (Mode Options): Mention lack of pagination and
+	confirmation with --batch.
+	(Screen Size): Mention --batch.
+	(Messages/Warnings): Likewise.
+
+2010-03-05  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Basic Python): Document target_charset and
+	target_wide_charset.
+
+2010-03-05  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Data): Link to pretty-printing.
+	(Output Formats): Likewise.  Correct text.
+
+2010-03-01  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Types): Describe <struct> and <flags>.
+
+2010-02-28  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Frames In Python): Add block parameter and
+	description to read_var text.
+
+2010-02-26  Phil Muldoon  <pmuldoon@redhat.com>
+	    Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Types In Python): Describe block argument in
+	template_argument and gdb.lookup_type.
+
+2010-02-24  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Cygwin Native): Fix typo.
+
+2010-02-24  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Frames In Python): Add block, find_sal, function
+	and select method descriptions.
+	(Python API): Add Blocks In Python, Symbols in Python and Symbol
+	Tables in Python to menu.
+	(Blocks In Python): New node.
+	(Symbols In Python): New node.
+	(Symbol Tables in Python): New node.
+
+2010-02-24  Vladimir Prus  <vladimir@codesourcery.com>
+
+	Multiexec MI
+
+	gdb/
+	* breakpoint.c (clear_syscall_counts): Take struct inferior*.
+
+	gdb/doc/
+	* gdb.texinfo (GDB/MI Command Syntax): Document notification
+	changes.
+	(GDB/MI Program Execution): Document current behaviour of
+	--all and --thread-group.
+	(GDB/MI Miscellaneous Commands): Document -add-inferior and
+	-remove-inferior.
+	* observer.texi (inferior_added, inferior_removed): New
+	observers.
+
+2010-02-19  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (Getting Started): Fix @node.
+	(Debugging GDB): Likewise.
+
+2010-02-13  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Testsuite): New section "Testsuite Configuration",
+	documenting the gdb_test_timeout variable.
+
+2010-02-12  Jakob Engblom  <jakob@virtutech.com>
+
+	* gdb.texinfo (MI commands): Added documentation of --reverse
+	option to a set of MI commands. Restructured documentation of MI
+	commands --exec-continue to reflect the complexity of reverse
+	execution.
+
+2010-02-12  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Using the Collected Data): Specify that the address
+	range of `tfind outsize' is exclusive, and that the address range
+	of `tfind range' is inclusive.
+	(Tracepoint Packets): Specify that the address range of
+	`QTFrame:range' is inclusive, and that the address range of
+	`QTFrame:outside' is exclusive
+
+2010-02-12  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Result Records): Clarify ^running.
+
+2010-02-10  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Debugging Output): Document set debug parser and
+	show debug parser.
+
+2010-02-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gdb.texinfo (Predefined Target Types): Add i387_ext,
+	i386_eflags and i386_mxcsr.
+
+2010-02-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gdb.texinfo: Document i386 target features.
+
+2010-02-05  Doug Evans  <dje@google.com>
+
+	* gdbint.texinfo (Testsuite): Add a new section to document the
+	various DejaGnu variables that may be overridden.
+	Document INTERNAL_GDBFLAGS.
+
+2010-02-04  Tom Tromey  <tromey@redhat.com>
+
+	PR cli/8830:
+	* gdb.texinfo (Files): -readnow comes before the filename for file
+	and symbol-file.
+
+2010-02-01  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Architecture-Specific Protocol Details): New section.
+	Document ARM breakpoint types.
+	(Register Packet Format): Move into the new section.
+	(Packets): Describe the KIND argument for Z0, z0, Z1, and z1 packets.
+
+2010-01-21  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (File Options): Adjust the documentation of this
+	switch to refer to the "source" command rather than partially
+	duplicating some of the relevant information.
+	(Extending GDB): Introduce and document the set/show script-extension
+	setting.
+	(Command Files): Add note explaining that the "source" command
+	is also used to evalute scripts written in other languages.
+	Remove the short slightly incorrect reference to sourcing Python
+	scripts.
+	(Python Commands): Document how to execute a Python script from GDB.
+
+2010-01-19  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Command Files): Fix typo.
+
+2010-01-18  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (File Options): Document -x on .py files.
+	(Command Files): Document handling of Python scripts.
+
+2010-01-18  Jie Zhang  <jie.zhang@analog.com>
+
+	* Makefile.in (ANNOTATE_DOC_BUILD_INCLUDES): Add GDBvn.texi.
+
+2010-01-15  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Trace Files): New section.
+	(Tracepoint Packets): Document QTSave and qTBuffer.
+	(Trace File Format): New appendix.
+
+2010-01-13  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Values From Inferior): Document lazy_string value
+	method.
+	(Python API): Add Lazy strings menu item.
+	(Lazy Strings In Python): New node.
+
+2010-01-13  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Thread Information): New.
+	(GDB/MI Async Records): Document the core field in *stopped.
+	(GDB/MI Miscellaneous Commands): Expand -list-thread-groups
+	documentation
+	(Process list): Document that osdata document may contain
+	threads.
+	(Remote Serial Protocol): Document qXfer:threads.
+
+2010-01-06  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Starting and Stopping Trace Experiments): Document
+	disconnected tracing.
+	(Tracepoint Packets): Document new protocol.
+
+2010-01-05  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Create and Delete Tracepoints): Describe fast
+	tracepoints.
+	(Tracepoint Packets): Describe remote protocol for fast
+	tracepoints.
+
+2010-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	Update the "Start of New Year Procedure".
+	* gdbint.texinfo: Add the list of files that need to be updated
+	manually.  Minor reformatting.
+
+2010-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* refcard.tex: Update copyright year in header and text.
+
+2010-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* agentexpr.texi: Add 2010 to the list of copyright years.
+	* annotate.texinfo: Likewise.
+	* gdb.texinfo: Likewise.
+	* gdbint.texinfo: Likewise.
+	* observer.texi: Likewise.
+	* stabs.texinfo: Likewise.
+
+2009-12-31  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Actions): Describe teval.
+
+2009-12-29  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Actions): Describe default-collect.
+
+2009-12-28  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Trace State Variables): New section.
+	(Tracepoint Packets): Describe trace state variable packets.
+	* agentexpr.texi (Bytecode Descriptions): Describe trace state
+	variable bytecodes.
+
+2009-12-28  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Symbols): "info variables" prints definitions, not
+	declarations.
+
+2009-12-21  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Clarify that
+	-gdb-exit behaviour.
+
+2009-12-20  Joel Brobecker  <brobecker@adacore.com>
+
+	* gpl.texi: Update to version 3 of the GPL.
+
+2009-12-20  Joel Brobecker  <brobecker@adacore.com>
+
+	* Makefile.in: Update copyright header.
+	* observer.texi: Fix the copyright header of the generated files.
+
+2009-12-08  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Types In Python): Describe range function.
+
+2009-12-03  Richard Ward  <richard.j.ward1@googlemail.com>
+
+	* gdb.texinfo (Types In Python): Describe "is_base_class".
+
+2009-12-03  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Basic Python): Document gdb.parse_and_eval.
+
+2009-12-02  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* observer.texi: New memory_changed observer.
+
+2009-12-01  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Reverse Execution): Fix typo.
+
+2009-11-24  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	PR gdb/8704
+
+	* gdb.texinfo (Thread-Specific Breakpoints): Thread specifiers
+	are allowed after the breakpoint condition.
+
+2009-11-23  Tom Tromey  <tromey@redhat.com>
+
+	PR python/10782:
+	* gdb.texinfo (Types In Python): Document Type.pointer.
+
+2009-11-23  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (Machine Code): Adjust.
+
+2009-11-11  Pedro Alves  <pedro@codesourcery.com>
+
+	* agentexpr.texi (Tracing On Symmetrix): Delete section.
+	(Using Agent Expressions): Delete cross reference.
+
+2009-11-07  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo, stabs.texinfo: Move the @setchapternewpage
+	and @settitle directives up to help makeinfo find them.
+
+2009-11-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (set debug-file-directory, show debug-file-directory)
+	(Auto-loading): Use plural and note one can use multiple components now.
+
+2009-11-01  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Stack Manipulation): Make
+	-stack-list-arguments have the same documentation for parameter
+	as -stack-list-locals. Add comas.
+
+2009-10-27  Tom Tromey <tromey@redhat.com>
+	    Eli Zaretskii <eliz@gnu.org>
+
+	PR python/10781
+
+	* gdb.texinfo (Values From Inferior): Document cast method.
+
+2009-10-22  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (Machine Code): Mention function name in disasssembly
+	and adjust example.
+
+2009-10-22  Michael Snyder  <msnyder@vmware.com>
+
+	* gdb.texinfo (Process Record and Replay): Document new form of
+	info record command.  Also document the new save and restore
+	commands.
+
+2009-10-21  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (Machine Code): Mention current pc marker.
+	(Memory): Likewise.
+
+2009-10-19  Pedro Alves  <pedro@codesourcery.com>
+	    Stan Shebs  <stan@codesourcery.com>
+
+	* observer.texi (new_inferior): Rename to...
+	(inferior_appeared): ... this.
+
+	* gdb.texinfo (Inferiors): Rename node to ...
+	(Inferiors and Programs): ... this.  Mention running multiple
+	programs in the same debug session.
+	<info inferiors>: Mention the new 'Executable' column if "info
+	inferiors".  Update examples.  Document the "add-inferior",
+	"clone-inferior", "remove-inferior" and "maint info
+	program-spaces" commands.
+	(Process): Rename node to...
+	(Forks): ... this.  Document "set|show follow-exec-mode".
+
+2009-10-11  Michael Snyder  <msnyder@vmware.com>
+
+	* gdb.texinfo (ReverseStep): Show default as "unsupported".
+	(ReverseContinue): Ditto.
+
+2009-10-08  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (Server): Document libthread-db-search-path.
+
+2009-10-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdbint.texinfo (i386_stopped_by_hwbp): Remove.
+
+2009-10-06  Michael Eager  <eager@eagercon.com>
+
+	* gdb.texinfo (Contributors): Add self for Xilinx MicroBlaze.
+	(Embedded Processors): Add MicroBlaze.
+	(MicroBlaze): New.  Describe Xilinx MicroBlaze
+
+2009-10-04  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Remote Protocol): Don't mention vCont;T.
+
+2009-09-26  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+	* gdb.texinfo (Cygwin Native): Mention support for Ctrl-BREAK.
+
+2009-09-23  Joel Brobecker  <brobecker@adacore.com>
+
+	* observer.texi (solib_unloaded): Document explicitly the fact that
+	this observer is called before the associated symbols are unloaded.
+
+2009-09-21  Jie Zhang  <jie.zhang@analog.com>
+
+	* gdb.texinfo: Escape "{" and "}".
+
+2009-09-19  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Stack Manipulation): Document
+	-stack-list-variables.
+
+2009-09-18  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): -enable-pretty-printing
+	is experimental.
+
+2009-09-17  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (convenince variables): Mention
+	$_siginfo could be empty.
+
+2009-09-15  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Document
+	-enable-pretty-printing, -var-set-update-range, dynamic varobjs.
+	Expand -var-update documentation.
+
+2009-09-14  Sergio Durigan Junior <sergiodj@linux.vnet.ibm.com>
+
+	* gdb.texinfo (Set Catchpoints): Documentation about the catch syscall
+	feature.
+
+2009-09-13  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Unwinding the Frame ID): Reference outer_frame_id.
+
+2009-09-10  Michael Snyder  <msnyder@vmware.com>
+
+	* gdb.texinfo (qSupported): Mention new ReverseContinue and
+	ReverseStep replies to the qSupported query.
+
+2009-09-10  Joel Brobecker  <brobecker@adacore.com>
+
+	Add documentation for set/show interactive-mode.
+	* gdb.texinfo (Other Misc Settings): New node.
+
+2009-09-01  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Caching Data of Remote Targets): Add note on
+	non-stop mode's affect on remote caching.
+
+2009-08-31  Jacob Potter  <jdpotter@google.com>
+	    Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Caching Data of Remote Targets): Update text.
+	Mark `set/show remotecache' options as obsolete.
+	Document new `set/show stack-cache' option.
+	Update text for `info dcache'.
+
+2009-08-27  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Symbols): Delete `set print symbol-loading'.
+	(Files): Add note on new optional regex arg to `info sharedlibrary'.
+
+2009-08-26  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+	* gdbint.texinfo (Releasing GDB): Fix confusing sentence
+	about autoconf.
+
+2009-08-25  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Debugging Multiple Inferiors): Add "info inferiors"
+	small example, and describe its columns.  Replace "inferior-id" by
+	"infno" throughout.
+
+2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+	* gdbint.texinfo (Releasing GDB): Point to
+	README-maintainer-mode file for required autoconf version.
+	* configure.ac: Do not substitute datarootdir, htmldir,
+	pdfdir, docdir.  Do not process --with-datarootdir,
+	--with-htmldir, --with-pdfdir, --with-docdir.
+	* configure: Regenerate.
+
+	* configure: Regenerate.
+
+2009-08-20  Reid Kleckner  <reid@kleckner.net>
+
+	* gdb.texinfo: Add chapter on JIT interface.
+
+2009-08-07  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (Server Prefix): Explain that server prefix suppresses
+	confirmation request.
+
+2009-08-05  Jeremy Bennett  <jeremy.bennett@embecosm.com>
+
+	* gdb.texinfo (Separate Debug Files, Remote Protocol): Clarified
+	CRC definitions.
+
+2009-08-03  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Document
+	-break-commands.
+
+2009-07-31  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdb.texinfo (Cell Broadband Engine SPU architecture): Document the
+	"set spu auto-flush-cache" and "show spu auto-flush-cache" commands.
+
+2009-07-31  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdb.texinfo (Cell Broadband Engine SPU architecture): Document the
+	"set spu stop-on-load" and "show spu stop-on-load" commands.
+
+2009-07-31  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdb.texinfo (Target Descriptions): Document <compatible> element.
+
+2009-07-28  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (ARM Features): Document org.gnu.gdb.arm.vfp and
+	org.gnu.gdb.arm.neon.
+
+2009-07-20  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Target Description Format): Mention the new <osabi>
+	optional element.
+	(subsection OS ABI): New subsection.
+
+2009-07-14  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoint Conditions): New section.
+	(General Query Packets): Describe ConditionalTracepoints.
+	(Tracepoint Packets): Describe condition field.
+	(Maintenance Commands): Describe maint agent-eval.
+	* agentexpr.texi (Using Agent Expressions): Mention eval usage.
+
+2009-07-11  Hui Zhu  <teawater@gmail.com>
+
+	* gdb.texinfo (disassemble): Add a new modifier /r
+	to "disassemble" command to make it print the raw instructions
+	in hex as well as in symbolic form.
+
+2009-07-09  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (Testsuite): Document parallel make check.
+
+2009-07-09  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (Testsuite): Document test transcripts.
+
+2009-07-10  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Values From Inferior): Add length parameter
+	description.
+
+2009-07-04  Chris Genly  <chris@genly.us>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Document child definition
+	in -var-list-children.  Fix example according to what the code
+	does.
+
+2009-07-02  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Debugging multiple inferiors): Document the
+	"inferior", "detach inferior" and "kill inferior" commands.
+	(Debugging Programs with Multiple Processes): Adjust to mention
+	generic "inferior" commands.  Delete mention of "detach fork" and
+	"delete fork".  Cross reference to "Debugging multiple inferiors"
+	section.
+
+2009-07-02  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texinfo (Item Output Functions): Update signature
+	for ui_out_field_core_addr.
+
+2009-07-02  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texinfo (Examples of Use of @code{ui_out} functions):
+	Update example code extrated from breakpoint.c.
+
+2009-06-28  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (GDB/MI Program Context): @ignore unimplemented
+	MI commands.
+	(GDB/MI Symbol Query): Likewise.
+	(GDB/MI File Commands): Likewise.
+	(GDB/MI File Transfer Commands): Likewise.
+	(GDB/MI Target Manipulation): Likewise.
+	(GDB/MI Miscellaneous Commands): Likewise.
+
+2009-06-27  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Debugging Optimized Code): New chapter.
+	(Compiling for Debugging): Reference it.  Move some
+	text to the new section.
+
+2009-06-15  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* doc/gdb.texinfo (Calling): Document
+	set-unwind-on-terminating-exception usage.
+
+2009-06-11  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (All-Stop): Document new 'set schedule-multiple'
+	command.
+
+2009-06-07  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdbint.texinfo (TARGET_HAS_HARDWARE_WATCHPOINTS): Delete all
+	references.
+
+2009-06-04  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texinfo: Rename formal parameters to gdbarch function
+	protoypes from "current_gdbarch" to "gdbarch".
+
+2009-05-28  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Basic Python): Change get_parameter to parameter.
+
+2009-05-27  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document "python"
+	feature.
+	(GDB/MI Variable Objects): Document -var-set-visualizer.
+
+2009-04-02  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Document "python"
+	feature.
+	(GDB/MI Variable Objects): Document -var-set-visualizer.
+
+2009-05-27  Tom Tromey  <tromey@redhat.com>
+	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
+	    Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo (Objfiles In Python): Reference pretty printing.
+	(Pretty Printing): New node.
+	(Selecting Pretty-Printers): Likewise.
+	(Python API): Update.
+	(Output Formats): Document /r format.
+
+2009-05-27  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+	    Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Types In Python): New node.
+	(Values From Inferior): "type" is now an attribute.
+	(Python API): Update.
+
+2009-05-27  Tom Tromey  <tromey@redhat.com>
+	    Thiago Jung Bauermann  <bauerman@br.ibm.com>
+	    Phil Muldoon  <pmuldoon@redhat.com>
+
+	* gdb.texinfo: Add @syncodeindex for `tp'.
+	(Python API): Update.
+	(Auto-loading): New node.
+	(Objfiles In Python): New node.
+
+2009-05-15  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (Threads): Document libthread-db-search-path.
+
+2009-05-15  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI General Design): Break up into four nodes.
+
+2009-05-12  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo: Document 'set/show debug gnu-nat'.  Replace 'maint
+	show-debug-regs' docs by 'maint set show-debug-regs' and 'maint
+	show show-debug-regs' docs.
+
+2009-05-08  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Process Record and Replay): Add description of
+	reverse execution.
+
+2009-05-07  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Adding support for debugging core files): New node.
+	(Native Debugging): Remove the ``Native core file Support'' section.
+
+2009-05-01  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Process Record and Replay): Improve and clarify.
+	Add index entries.
+
+2009-04-30  Hui Zhu  <teawater@gmail.com>
+	    Michael Snyder  <msnyder@vmware.com>
+
+	* gdb.texinfo: (Process Record and Replay): Add documentation for
+	process record and replay.
+
+2009-04-29  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Macros): Note command-line for `info macro'.  Append
+	a new part on command-line defined macros.
+
+2009-04-25  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Machine Code) <disassemble-next-line>: Improve and
+	clarify the wording.
+
+2009-04-23  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Data Files): New node.
+	(GDB Files): Update menu.
+
+2009-04-23  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Defining Other Architecture Features): Remove
+	entry for PROCESS_LINENUMBER_HOOK.
+
+2009-04-22  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Program Execution): Document -exec-jump.
+
+2009-04-22  Hui Zhu  <teawater@gmail.com>
+
+	* gdb.texinfo (disassemble-next-line): Set the default of
+	disassemble-next-line to off.
+
+2009-04-21  Joseph Myers  <joseph@codesourcery.com>
+
+	* configure.ac (--with-datarootdir, --with-docdir, --with-pdfdir,
+	--with-htmldir): New.
+	* configure: Regenerate.
+	* Makefile.in (datarootdir, docdir): Define.
+	(gdb.dvi, gdb.pdf): Use same -I options as for building gdb.info
+	instead of $(SET_TEXINPUTS).
+	(gdbint.dvi, gdbint.pdf): Use same -I options as for building
+	gdbint.info instead of $(SET_TEXINPUTS).
+	(gdbint/index.html): Use same -I options as for building
+	gdbint.info.
+	(stabs.dvi, stabs.pdf): Use same -I options as for building
+	stabs.info instead of $(SET_TEXINPUTS).
+	(stabs/index.html): Use same -I options as for building
+	stabs.info.
+	(annotate.dvi, annotate.pdf): Use same -I options as for building
+	annotate.info instead of $(SET_TEXINPUTS).
+	(annotate/index.html): Use same -I options as for building
+	annotate.info.
+
+2009-04-21  David Daney  <ddaney@caviumnetworks.com>
+
+	* gdb.texinfo (maint show-debug-regs): Remove mention of x86.
+
+2009-04-21  Joseph Myers  <joseph@codesourcery.com>
+
+	* gdb.texinfo (Source Path): Document --with-relocated-sources.
+
+2009-04-18  Carlos O'Donell  <carlos@codesourcery.com>
+	    Joseph Myers  <joseph@codesourcery.com>
+
+	* Makefile.in (MAKEHTML): Set to makeinfo --html.
+	(MAKEHTMLFLAGS): Set to empty.
+	(html__strip_dir): Define.
+	(HTMLFILES): Define.
+	(HTMLFILES_INSTALL): Define.
+	(install-html): Copy new automake rule.
+	(html): Depend on $(HTMLFILES).
+	(gdb_toc.html): Rename to gdb/index.html.
+	(gdbint_toc.html): Rename to gdbint/index.html.
+	(stabs_toc.html): Rename to stabs/index.html.
+	(annotate_toc.html): Rename to annotate/index.html.
+
+2009-04-17  Carlos O'Donell  <carlos@codesourcery.com>
+
+	* Makefile.in: Set pdfdir and htmldir from configure
+	substitutions.
+	* configure.ac: AC_SUBST datarootdir, docdir, htmldir, pdfdir.
+	* configure: Regenerate.
+
+2009-04-16  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Native Debugging): Remove entry for PROC_NAME_FMT.
+	This macro is no longer used.
+
+2009-04-15  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Character Sets): Document default character set.
+
+2009-04-14  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+	* gdbint.texinfo: Change server name from sources.redhat.com to
+	sourceware.org throughout.
+
+2009-04-09  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Set Breaks): Rewrite a paragraph to avoid a warning
+	about a missing dot or coma after @xref.
+
+2009-04-02  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Backtrace): Add a parameter in frame 1 of the first
+	example, and add a small explanation about it.
+	(Print Settings): Change the documentation of the "set print
+	frame-arguments" to reflect the fact that the default is now "scalars".
+
+2009-04-02  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Print Settings): Add kindex for command "set
+	print frame-arguments".
+
+2009-03-31  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ada Tasks): Add documentation about task-specific
+	breakpoints.
+	(Set Breaks): Add reference to thread-specific and task-specific
+	breakpoints.
+
+2009-03-31  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ada Tasks): Remove the documentation about
+	the "Running" state, as this state has been eliminated.
+	Now all runnable tasks are shown as "Runnable".
+
+2009-03-30  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Tracepoints): Describe tracepoints as a
+	special case of breakpoints.
+	(Enable and Disable Tracepoints): Mention deprecation.
+	(Listing Tracepoints): Update description and example.
+
+2009-03-30  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo (Frames in Python): New node.
+	(Python API): Update.
+
+2009-03-29  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo (Values From Inferior): Change gdb.Value.address
+	from a method to an attribute.
+
+2009-03-26  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo (Values From Inferior): Document is_optimized_out
+	attribute.
+
+2009-03-25  Pedro Alves  <pedro@codesourcery.com>
+
+	* observer.texi (thread_exit): Add "silent" parameter.
+
+2009-03-22  Pedro Alves  <pedro@codesourcery.com>
+
+	* observer.texi (about_to_proceed): New.
+
+2009-03-21  Jeremy Bennett  <jeremy.bennett@embecosm.com>
+
+	* gdbint.texinfo (everywhere): Use braces {} in @deftypeXX type
+	field throughout to handle types with spaces in them.  Fix typos
+	found by aspell.
+	(Summary, Requirements, Contributors): New first chapter,
+	"Summary" added, old Requirements section moved there, and new
+	section, "Contributors" added.
+	(Initializing a New Architecture, Register Representation)
+	(Frame Interpretation, Inferior Call Setup, Adding a New Target)
+	(Porting gdb): These sections extended and updated.
+	(Compiler Characteristics): This section (empty) deleted.
+	(Defining Other Architecture Features): This section renamed and
+	duplicate material removed from (formerly "Target Conditionals").
+	Use braces {} in @deftypeXX type field throughout to handle types
+	with spaces in them. Typos found by aspell fixed.
+
+	* stack_frame.svg: New file, source of image for gdbint.texinfo.
+	* stack_frame.pdf: Version of image for PDF output.
+	* stack_frame.png: Version of image for HTML output and for Emacs.
+	* stack_frame.txt: Version of image for Info output.
+	* stack_frame.eps: Version of image for TeX DVI output.
+
+2009-03-21  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Character Sets): Fix last change.
+
+2009-03-21  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo (Values From Inferior): Fix optional arguments
+	markup.
+	(Commands In Python): Adjust argument names of gdb.Command.__init__
+	to what the function accepts as keywords.
+
+2008-03-20  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Convenience Vars): Document convenience functions.
+	(Functions In Python): New node.
+	(Python API): Update.
+
+2009-03-20  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Character Sets): Remove obsolete text.  Document
+	set target-wide-charset.
+	(Requirements): Mention iconv.
+
+2009-03-17  Hui Zhu  <teawater@gmail.com>
+
+	* gdb.texinfo: Change the introduce of "disassemble-next-line".
+
+2009-03-17  Hui Zhu  <teawater@gmail.com>
+
+	* gdb.texinfo: Add documentation for disassemble-next-line.
+
+2009-03-16  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo (Commands In Python): Remove tindex entries.
+
+2009-03-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Returning): New description for missing debug info.
+
+2009-03-14  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Remote Configuration): Document query-attached.
+	(General Query Packets): Document qAttached.
+
+2009-03-05  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Background Execution): Better describe the set
+	target-async command.
+	(Maintenance Commands): Delete description of the `maint set/show
+	linux-async' and `maint set/show remote-async' commands.
+
+2009-02-18  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Add double-spaces
+	between sentences.
+
+2009-02-18  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Document the
+	=library-loaded and =library-unloaded notifications.
+
+2009-02-17  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* observer.texi (test_notification): New observer.
+
+2009-02-14  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* observer.texi: Add parameter 'print_frame' to normal_stop
+	observer.
+
+2009-02-07  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Basic Python): Fix change from 2009-02-04.
+	(Commands In Python): Fix COMMAND_* constants in last change.  Use
+	@kbd for interactive input.  Add cross-references and index
+	entries.
+
+2009-02-06  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Signals): Document $_siginfo.
+	(Convenience Variables): Mention $_siginfo.
+	(Remote Configuration): Document qXfer:siginfo:read,
+	qXfer:siginfo:write packets, and the read-siginfo-object,
+	write-siginfo-object commands.
+
+2009-02-06  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdbint.texinfo (Values): New chapter.
+
+2009-02-06  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Python API): Add entry for Commands In Python.
+	(Commands In Python): New node.
+
+2009-02-05  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Values From Inferior): Document Value.string.
+
+2009-02-05  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Basic Python): Document execute's from_tty
+	argument.
+
+2009-02-04  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Basic Python): Document gdb.history.
+
+2009-01-30  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Thread Commands): Document the
+	'current-thread-id' field.  Remove the example with zero threads,
+	since current GDB won't ever report that if there's inferior.
+
+2009-01-30  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Document the -d
+	option to -break-insert.
+
+2009-01-28  Daniel Jacobowitz  <dan@codesourcery.com>
+	    Jerome Guitton  <guitton@adacore.com>
+
+	* gdb.texinfo (Startup): Document --with-system-gdbinit.
+	(System-wide configuration): New section.
+
+2009-01-26  Pedro Alves  <pedro@codesourcery.com>
+
+	PR gdb/7580:
+	* gdb.texinfo (Maintenance Commands): Document "maint set|show
+	internal-error|internal-warning quit|corefile ask|yes|no".
+
+2009-01-26  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Using the `gdbserver' Program): Document
+	--remote-debug.
+
+2009-01-23  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo: Add nexti to list of commands that support
+	background execution.
+
+2009-01-14  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Define, Hooks): Document prefix command support.
+
+2009-01-14  Joseph Myers  <joseph@codesourcery.com>
+	    Carlos O'Donell  <carlos@codesourcery.com>
+
+	Fixes for makeinfo --html.
+
+	* annotate.texinfo: Use @copying and @insertcopying.  Use
+	@ifnottex in place of @ifinfo.
+	* gdb.texinfo: Use @copying and @insertcopying.  Use @ifnottex in
+	place of @ifinfo.  Use @ifnotinfo for one index entry.
+	* gdbint.texinfo: Use @copying and @insertcopying.  Use @ifnottex
+	in place of @ifinfo.
+	* stabs.texinfo: Use @copying and @insertcopying.  Use @ifnottex
+	in place of @ifinfo.  Include contents at start unconditionally.
+
+2009-01-13  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (General Query Packets): Remove @var{} around the
+	"spu" literal string.
+
+2009-01-07  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Error in Breakpoints): Delete mention of "The same
+	program may be running in another process" errors.
+	* gdbint.texinfo (Native Conditionals): Delete
+	ONE_PROCESS_WRITETEXT description.
+
+2009-01-07  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Start of New Year Procedure): Add the "coding"
+	emacs local variable to be placed at the end of the ChangeLog.
+	Add server.c and gdbreplay.c to the list of files where the
+	copyright year needs to be updated.
+
+2009-01-06  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* gdb.texinfo (Remote Configuration): Document new
+	"set/show tcp auto-retry" and "set/show tcp connect-timeout"
+	commands.
+
+2008-12-28  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdbint.texinfo (gdbarch_cannot_fetch_register): Don't mention
+	FETCH_INFERIOR_REGISTERS.
+	(Native Conditionals): Remove obsolete CHILD_PREPARE_TO_STORE,
+	FETCH_INFERIOR_REGISTERS descriptions.  Remove
+	gdbarch_get_longjmp_target descrition, since already described in
+	Target Conditionals.  Move gdbarch_fp0_regnum description to ...
+	(Target Conditionals): ... here.
+
+2008-12-16  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Omissions from Ada): Add missing GDB prompt in
+	examples.
+	(Additions to Ada): Likewise.  Add the missing opening and closing
+	parenthesis of the GDB prompt in one of the examples.
+
+2008-12-14  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Omissions from Ada): Remove incorrect documentation
+	about the result of 'Address not being of type System.Address.
+	This problem has been fixed a while ago.
+
+2008-12-02  Vladimir Prus  <vladimir@codesourcery.com>
+
+	MI non-stop and multiprocess docs.
+
+	* gdb.texinfo (GDB/MI): New section 'GDB/MI General Design'
+	(GDB/MI Output Records): New section 'GDB/MI Frame Information'
+	Adjust documentation for *stopped, document =thread-created,
+	=thread-exited, =thread-group-created and =thread-group-exited.
+	(GDB/MI Thread Commands): Document the 'state' field in
+	-thread-info output.
+	(GDB/MI Program Execution): Mention --all and --thread-group
+	options.
+	(GDB/MI Variable Objects): Describe floating and fixed variable
+	objects.
+	(GDB/MI Miscellaneous Commands): Document -list-thread-groups.
+
+2008-12-02  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Operating System Information): New appendix.
+	(Operating System Auxiliary Information): Document 'info os processes'
+	(Remote Configuration): Document 'osdata'
+	(General Query Packets): Document qXfer:osdata:read.
+
+2008-11-27  Tristan Gingold  <gingold@adacore.com>
+
+	* gdb.texinfo (Darwin): Document Darwin specific features.
+
+2008-11-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdbint.texinfo (Target Conditionals): Extend the
+	gdbarch_breakpoint_from_pc description.
+
+2008-11-22  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (M68K Features): Fix typo.
+
+2008-11-18  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* gdb.texinfo (Symbols): Mention printing containing
+	image name in "info symbol".
+	(Maint translate-address): Likewise.
+
+2008-11-18  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Set Catchpoints): Remove the documentation of
+	commands "catch load" and "catch unload".
+
+2008-11-17  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Async Records): Document
+	=thread-selected.
+
+2008-11-17  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* observer.texi (new_inferior, inferior_exit): New observers.
+
+2008-10-27  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdbint.texinfo (Adding a New Target): Don't mention TDEPFILES,
+	.mt files, TM_CLIBS or TM_CDEPS.
+	(x86 Watchpoints): Don't mention TDEPFILES.
+
+2008-10-24  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* gdb.texinfo (Remote Protocol): Add new nodes to menu.
+	(Overview): Mention notifications and non-stop mode behavior.
+	(Packets): Update documentation of ?, vAttach, vCont, and vRun
+	with non-stop mode behavior.  Add vStopped description.
+	(Stop Reply Packets):  Update list of packets that return
+	stop replies.  Mention non-stop behavior.
+	(General Query Packets): Document QNonStop packet and associated
+	qSupported query response.
+	(Interrupts): Clarify multi-threaded behavior.  Mention non-stop
+	behavior.
+	(Notification Packets): New section.
+	(Remote Non-Stop): New section.
+	(File-I/O Overview): Mention non-stop behavior.
+
+2008-10-24  Hui Zhu  <teawater@gmail.com>
+	    Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (displaced-stepping): Describe the auto mode
+	setting, and say it's the default.  This is now a mainstream
+	setting instead of a maintenance setting.
+
+2008-10-23  Pedro Alves  <pedro@codesourcery.com>
+
+	* observer.texi (thread_stop_requested): New.
+
+2008-10-22  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ada Tasks, Ada Tasks and Core Files): New nodes.
+	(Patching): Replace incorrect usage of @samp by @kbd.
+
+2008-10-17  Michael Snyder  <msnyder@vmware.com>
+
+	* gdb.texinfo: Add documentation for reverse execution.
+
+2008-10-16  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo. (Values From Inferior): New subsubsection.
+
+2008-10-06  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (set debug dwarf2-die): Document it.
+
+2008-10-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (catch) [exception]: Document how to insert
+	a breakpoint on user-defined exceptions when the exception
+	name is identical to one of the language-defined ones.
+
+2008-09-27  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Macros): Remove text about stringification,
+	varargs, and splicing.
+
+2008-09-27  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (Language Support): Remove text about omitting
+	support for a language.
+
+2008-09-23  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (info dcache): Update.
+
+2008-09-22  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* gdb.texinfo (Packets): Add info on thread-id syntax and
+	multiprocess extensions.
+	<D>: Document multiprocess form of packet.
+	<H>: Use thread-id syntax.
+	<T>: Likewise.
+	<vCont>: Likewise.  Note this is required for multiprocess.
+	<vKill>: New packet.
+	(Stop Reply Packets) <T>: Use thread-id syntax.
+	<W>: Document multiprocess form of reply.
+	<X>: Likewise.
+	(General Query Packets) <qC>: Use thread-id syntax.
+	<qfThreadInfo>: Likewise.
+	<qGetTLSAddr>: Likewise.
+	<qP>: Likewise.
+	<qSupported>: Add "multiprocess" feature.
+	<qThreadExtraInfo>: Use thread-id syntax.
+
+2008-09-22  Stan Shebs  <stan@codesourcery.com>
+
+	* gdb.texinfo (Inferiors): New section.
+
+2008-09-12  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdbint.texinfo (Native Debugging): Mention NAT_GENERATED_FILES.
+
+2008-09-11  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texinfo (Target Conditionals): Remove documentation
+	for gdbarch_name_of_malloc.
+
+2008-09-03  Angela Marie Thomas <angela@releasedominatrix.com>
+
+	* gdb.texinfo (Interrupts): Mention TCP interface for
+	sending BREAK.
+
+2008-08-26  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdb.texinfo (Commands to Specify Files): Document "remote:"
+	argument prefix to "set sysroot".
+
+2008-08-21  Paul N. Hilfinger  <hilfinger@adacore.com>
+
+	* gdb.texinfo (Omissions from Ada): Describe new treatment of True
+	and False.
+
+2008-08-20  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.textinfo (GDB/MI Miscellaneous Commands): Use @table
+	for possible features of -list-features.
+
+2008-08-19  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Background execution): Adjust example
+	(GDB/MI Miscellaneous Commands): Document -list-target-features.
+
+2008-08-19  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* doc/gdb.texinfo (PowerPC): Fix typo.
+	(PowerPC features): Fix typo.
+
+2008-08-18  Pedro Alves  <pedro@codesourcery.com>
+
+	* observer.texi (thread_ptid_changed): New.
+
+2008-08-18  Luis Machado  <luisgpm@br.ibm.com>
+
+	* doc/gdb.texinfo (PowerPC): Mention Extended FPR's for POWER7.
+	(PowerPC features): Mention feature set for VSX registers.
+
+2008-08-13  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Ada Mode Intro): Improve the documentation regarding
+	the direct visibility of all names in user-written packages.
+
+2008-08-13  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (breakpoint always-inserted) Describe the auto mode
+	setting, and make it the default.
+	(Non-Stop Mode): Remove "set breakpoints always-inserted 1" from
+	non-stop script example.
+
+2008-08-12  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdbint.texinfo (Raw and Virtual Register Representations): Fix
+	reference to the "Using Different Register and Memory Data
+	Representation" section.
+
+2008-08-12  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* gdb.texinfo (Remote Configuration): Document set remote noack-packet.
+	(Remote Protocol): Add Packet Acknowledgment to menu.
+	(Overview): Mention +/- can be disabled, and point to new section
+	where this is discussed in detail.
+	(General Query Packets): Document QStartNoAckMode packet, and
+	corresponding qSupported reply.
+	(Packet Acknowledgment): New section.
+
+2008-08-11  Sandra Loosemore  <sandra@codesourcery.com>
+	    Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Threads): Move paragraph about automatic thread
+	selection to All-Stop Mode subsection.
+	(Thread Stops): Reorganize existing material into subsections.
+	Add introductory blurb and menu.
+	(Non-Stop Mode): New subsection.
+	(Background Execution): New subsection.
+	(Maintenance Commands): Add cross-references from async mode
+	commands to the new Background Execution section.
+
+2008-08-06  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Extending GDB): New chapter.
+	(Sequences): Demoted chapter, now a section under the new
+	Extending GDB chapter.
+	(Python): New section.
+
+2008-07-31  Stan Shebs  <stan@codesourcery.com>
+
+	* gdbint.texinfo: Remove FUNCTION_EPILOGUE_SIZE.
+
+2008-07-29  Stan Shebs  <stan@codesourcery.com>
+
+	* gdbint.texinfo: General round of cleanup and minor
+	clarifications.
+	(Breakpoint Handling): Remove mention of BREAKPOINT macro.
+	(Longjmp Support): Update description to reflect how it is done
+	for targets without using native header.
+	(Symbol Handling): Add a little more general explanation.
+	(COFF, ELF): Mention stabs encapsulation.
+	(DWARF 3): New section.
+	(Adding a New Host): Scrub out some obsolete bits.
+	(Generic Host Support Files): Mention ser-pipe.c, ser-mingw.c.
+	(Host Conditionals): Remove descriptions of NO_STD_REGS,
+	HAVE_MMAP, HAVE_TERMIO, INT_MAX etc, LONGEST, HAVE_LONG_DOUBLE,
+	PRINTF_HAS_LONG_DOUBLE, SCANF_HAS_LONG_DOUBLE, L_SET, SEEK_CUR,
+	SEEK_SET, STOP_SIGNAL, USG.
+	(Raw and Virtual Register Representations): Ditto for
+	DEPRECATED_REGISTER_RAW_SIZE, DEPRECATED_REGISTER_VIRTUAL_SIZE,
+	DEPRECATED_REGISTER_VIRTUAL_TYPE, REGISTER_CONVERT_TO_TYPE.
+	(Target Conditionals): Ditto for DEPRECATED_FP_REGNUM,
+	DEPRECATED_FRAMELESS_FUNCTION_INVOCATION, DEPRECATED_FRAME_CHAIN,
+	DEPRECATED_FRAME_CHAIN_VALID, DEPRECATED_FRAME_INIT_SAVED_REGS,
+	DEPRECATED_FRAME_SAVED_PC, DEPRECATED_FUNCTION_START_OFFSET,
+	DEPRECATED_REGISTER_VIRTUAL_SIZE,
+	DEPRECATED_REGISTER_VIRTUAL_TYPE,
+	DEPRECATED_USE_STRUCT_CONVENTION.
+	Describe gdbarch_deprecated_fp_regnum.
+	Update description of gdbarch_print_insn.
+	(Adding a New Target): Scrub out obsolete bits.
+	(Obsolete Conditionals): Remove entire section.
+
+2008-07-25  Tom Tromey  <tromey@redhat.com>
+
+	* observer.texi (GDB Observers): Document new observers:
+	breakpoint_created, breakpoint_deleted, breakpoint_modified,
+	tracepoint_created, tracepoint_deleted, tracepoint_modified,
+	architecture_changed.
+
+2008-07-21  Stan Shebs  <stan@codesourcery.com>
+
+	* gdbint.texinfo: Refer to target_so_ops.in_dynsym_resolve_code
+	instead of IN_SOLIB_DYNSYM_RESOLVE_CODE.
+
+2008-07-21  Tom Tromey  <tromey@redhat.com>
+
+	* observer.texi (GDB Observers): Remove obsolete comment.
+	<executable_changed>: Remove argument.
+
+2008-07-18  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Macros): Update.  Use @code rather than @command.
+
+2008-07-10  Doug Evans  <dje@google.com>
+
+	* doc/gdb.texinfo: Document "set print symbol-loading on|off".
+
+2008-07-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Starting): Document "set disable-randomization".
+
+2008-07-07  Andreas Schwab  <schwab@suse.de>
+
+	* gdb.texinfo (GDB/MI Target Manipulation): Fix last change.
+
+2008-07-06  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Target Manipulation): Add
+	example of -target-attach.
+
+2008-06-10  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* observer.texi (target_resumed): New observer.
+	* gdb.texinfo (GDB/MI Output Records): Document *running.
+
+2008-06-06  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Completion): Add field name example.
+
+2008-06-06  Marc Khouzam  <marc.khouzam@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Program Context): Added example
+	to -exec-arguments
+
+2008-06-05  Nick Roberts  <nickrob@snap.net.nz>
+
+	* annotate.texinfo (Multi-threaded Apps): Add entry for thread-changed
+	annotation.
+
+2008-06-05  Vladimir Prus  <vladimir@codesourcery.com>
+	    Nathan Sidwell  <nathan@codesourcery.com>
+	    Joseph Myers  <joseph@codesourcery.com>
+
+	* configure.ac: Include ../../config/acx.m4.  Use ACX_PKGVERSION
+	and ACX_BUGURL.
+	* configure: Regenerate.
+	* Makefile.in (PKGVERSION, BUGURL_TEXI): Define.
+	(GDBvn.texi): Define VERSION_PACKAGE, BUGURL and BUGURL_DEFAULT.
+	* gdb.texinfo: Use VERSION_PACKAGE and BUGURL.  Remove
+	mailing-list-specific text about bug reporting unless
+	BUGURL_DEFAULT.
+
+2008-06-05  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (-target-select): Remove reference to target async.
+	(Maintenance Commands): Document "maint set/show remote-async".
+
+2008-06-04  Marc Khouzam  <marc.khouzam@ericsson.com>
+
+	* gdb.texinfo (GDB/MI File Transfer Commands): Typo
+	in -target-file-get section.
+
+2008-05-22  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (vAttach, vRun): Re-remove requirement of the stub
+	killing the inferior when it is already debugging a process.
+
+2008-05-21  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Continuing and Stepping): Document the new "fin"
+	abbreviation for "finish".
+
+2008-05-21  Nick Roberts  <nickrob@snap.net.nz>
+
+	* annotate.texinfo (Multi-threaded Apps): New node for new annotation.
+
+2008-05-15  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Target Conditionals): Delete entry for
+	gdbarch_dwarf_reg_to_regnum.
+
+2008-05-09  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo: Document "find" command, qSearch:memory packet.
+
+2008-05-05  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (disassemble): Document /m modifier.
+
+2008-05-05  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Maintenance Commands): Clarify that "maint time"
+	will not report the time of commands that run the target.
+
+2008-05-03  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Output Records): Add
+	missing semicolon.
+
+2008-05-03  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Output Records):
+	Document =thread-create and =thread-exited.
+
+2008-05-03  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Development and Front Ends):
+	Remove mention of dmi-discuss.
+
+2008-05-03  Pedro Alves  <pedro@codesourcery.com>
+
+	* observer.texi (thread_exit): New.
+
+2008-05-02  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Debugging Output): Document "set/show debug
+	displaced".
+	(Maintenance Commands): Document "maint set/show
+	can-use-displaced-stepping".
+
+2008-05-02  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (ARM): Document set/show arm fallback-mode
+	and set/show arm force-mode.
+
+2008-05-02  Andreas Schwab  <schwab@suse.de>
+
+	* gdbint.texinfo (Algorithms): Describe
+	target_watchpoint_addr_within_range.
+
+2008-04-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Stack Frames): New chapter.
+	(Algorithms): Move Frames text to the new chapter.
+	(Target Conditionals): Delete SAVE_DUMMY_FRAME_TOS.  Document
+	gdbarch_dummy_id instead of gdbarch_unwind_dummy_id.
+
+2008-04-24  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Output Syntax): Clarify that async
+	output does not necessary include any tokens.
+
+2008-04-22  Corinna Vinschen  <vinschen@redhat.com>
+
+	* gdb.texinfo (Set SH Calling convention): New @item.
+	(Show SH Calling convention): Ditto.
+
+2008-04-22  Markus Deuling  <deuling@de.ibm.com>
+
+	* gdb.texinfo (Fortran Operators): Describe '%' operator.
+
+2008-04-20  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Set Breaks): Mention that multiple location
+	breakpoints need line number info.  Add index entries.
+
+2008-04-19  Craig Silverstein  <csilvers@google.com>
+
+	* gdb.texinfo (Requirements): Add an optional requirement on
+	zlib.
+	* gdbint.texinfo (Debugging File Formats): Add new subsection for
+	Compressed DWARF 2.
+
+2008-04-16  Aleksandar Ristovski  <aristovski@qnx.com>
+
+	* gdb.texinfo (GDB/MI Simple Examples): Added 'disp' field to the
+	sample output for 'stopped,reason="breakpoint-hit"' message.
+	(GDB/MI Program Execution): Likewise.
+
+2008-04-09  Marc Khouzam  <marc.khouzam@ericsson.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Add anchor to
+	-var-set-format.  Add -f option to -var-evaluate-expression.
+
+2008-04-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Breakpoint Menus): Delete. Contents moved inside
+	new node "Ambiguous Expressions".  Replace references to this
+	node by references to "Ambiguous Expressions" throughout.
+	(Ambiguous Expressions): New node.
+
+2008-03-26  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (MIPS Features, PowerPC Features): Add @node.
+
+2008-03-21  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (Debugging Output): Document
+	"set/show debug lin-lwp-async".
+	(Maintenance Commands): Document "maint set/show linux-async".
+
+2008-03-21  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Expressions): Update description of malloced arrays.
+
+2008-03-15  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Thread Commands): Document
+	-thread-info.  Remove -thread-list-all-threads.
+
+2008-03-14  Vladimir Prus  <vladimir@codesourcery.com>
+
+	Implement MI notification for new threads.
+	* observer.texi (new_thread): Document.
+
+2008-03-14  Pedro Alves  <pedro@codesourcery.com>
+	    Sandra Loosemore  <sandra@codesourcery.com>
+
+	* gdb.texinfo (Library List Format): Update to mention the
+	possibility to pass section addresses instead of segment
+	addresses.
+
+2008-03-10  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Starting): Document "set exec-wrapper".
+	(Server): Document gdbserver --wrapper.
+
+2008-03-03  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Set Watchpoints): Mention watchpoints on
+	unreadable memory.  Delete obsolete SPARClite reference.
+
+2008-02-28  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Starting): Mention always-running targets.
+	(Target Commands): Add an anchor for load.
+	(Connecting): Explain continue instead of run.
+
+2008-02-27  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Debugging Output): Document "set debug timestamp".
+
+2008-02-26  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (Set Breaks): Revert description of Enb column of
+	breakpoint table.
+
+2008-02-19  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (vAttach, vRun): Remove requirement of the stub
+	killing the inferior when it is already debugging a process.
+
+2008-02-13  Markus Deuling  <deuling@de.ibm.com>
+
+	* gdbint.texinfo (Build Script): New section. Mention new build script
+	gdb_buildall.sh.
+
+2008-02-01  Jim Blandy  <jimb@red-bean.com>
+
+	* gdb.texinfo (Help): Summarize 'info args' correctly.
+
+2008-01-30  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo: (Decimal Floating Point): Mention pseudo-registers
+	available in PowerPC architecture.
+	(Embedded Processors): Change node name of PowerPC item in menu.
+	(PowerPC): Rename to...
+	(PowerPC Embedded): this.
+	(Architectures): Add new PowerPC item in menu.
+	(PowerPC): New node.
+
+2008-01-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Multi-Process Mode for gdbserver): Use @kbd for
+	commands.
+
+2008-01-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Setting Catchpoints): Mention features
+	supported on GNU/Linux.
+
+2008-01-30  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI File Commands): Describe new output
+	field for MI command -file-list-exec-source-file.
+
+2008-01-29  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Using the `gdbserver' Program): Add security
+	warning.  Rearrange into subsections and subsubsections.  Document
+	--multi and --debug.  Correct --with-sysroot typo.  Update --attach
+	usage.  Make load reference clearer.  Document monitor exit.
+	(Remote Configuration): Document set remote exec-file, attach-packet,
+	and run-packet.
+	(Packets): Document vAttach and vRun.
+
+2008-01-29  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (Processes): Mention process command.
+	detach-on-follow -> detach-on-fork.
+
+2008-01-28  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Native Conditionals): Remove
+	SHELL_COMMAND_CONCAT and SHELL_FILE.
+
+2008-01-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Specify Location): Improve wording.
+
+2008-01-23  Chris Demetriou  <cgd@google.com>
+
+	* gdb.texinfo (Threads): Document new "set print thread-events"
+	and "show print thread-events" commands.
+
+2008-01-19  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Specify Location): New section.
+	(Delete Breaks, Edit, Set Breaks): Remove description of
+	locations.  Instead, add a reference to "Specify Location".
+	(Machine Code, Jumping, Thread Stops, Continuing and Stepping)
+	(Symbols): Refer to "Specify Location" for the valid forms of
+	linespecs and locations.
+
+2008-01-18  Markus Deuling  <deuling@de.ibm.com>
+
+	* gdbint.texinfo (Target Conditionals): Replace the description of
+	BITS_BIG_ENDIAN with a description of gdbarch_bits_big_endian.
+
+2008-01-12  Paul Hilfinger  <hilfinger@adacore.com>
+
+	* gdb.texinfo (C Operators): Remove incorrect parenthetical comment
+	about &&var, which is rejected by the expression parser.
+
+2008-01-09  Luis Machado  <luisgpm@br.ibm.com>
+
+	* gdb.texinfo (Output): Update documentation on using printf with DFP
+	types.
+
+2008-01-07  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+	* gdb.texinfo (C and C++): Add Decimal Floating Point format
+	subsubsection.
+	(Decimal Floating Point format): New subsubsection.
+
+2008-01-05  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdb.texinfo (File Options): Remove mention of the attempt to
+	open a core file with the -p option.  Don't list -c as a valid
+	option to attach to a process.
+
+2008-01-05  Pedro Alves  <pedro@codesourcery.com>
+
+	* gdbint.texinfo (Host Conditionals): Remove mention of
+	ALIGN_STACK_ON_ENTRY.
+
+2008-01-05  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Start of New Year Procedure): Add item
+	describing how to update the source and documentation copyright
+	notices.
+
+2007-12-18  Jim Blandy  <jimb@codesourcery.com>
+
+	* gdb.texinfo (Set Watchpoints): Integrate per-thread
+	watchpoint explanation into the main description of the watchpoint
+	command; update synopses of 'watch', 'rwatch', and 'awatch'
+	commands.
+
+2007-12-18  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Miscellaneous gdb/mi Commands):
+	Document 'pending-breakpoints' feature of
+	-list-features.
+
+2007-12-17  Luis Machado  <luisgpm@br.ibm.com>
+
+	* gdb.texinfo: Add new parameter's description.
+
+2007-12-16  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Overview): Clarify run-length encoding
+	example.  Remove the restriction on "+" and "-" characters.
+
+2007-12-15  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Host I/O Packets): Fix xref syntax.
+
+2007-12-14  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Document
+	the -f option for -break-insert, remove -r option,
+	and clarify specification of location.
+
+2007-11-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Debugging Programs with Multiple Processes): Correct
+	formatting.
+	(Remote Debugging): Add File Transfer section.
+	(Remote Configuration): Document Host I/O packets.
+	(GDB/MI): Add GDB/MI File Transfer Commands section.
+	(Host I/O Packets): New section in "Remote Protocol".
+	(Packets): Add vFile.
+
+2007-11-17  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Set Breaks, Disabling): Clarify behavior of
+	breakpoints with multiple locations.
+	(Breakpoint Menus): Improve wording.
+	(Output): Fix last change.
+
+2007-11-17  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* Makefile.in (Makefile): Do not depend on target_makefile_frag.
+
+2007-11-15  Doug Evans  <dje@google.com>
+
+	* gdb.texinfo (Symbols): Update output of "maint info symtabs".
+
+2007-11-15  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdbint.texinfo (Native Conditionals): Remove
+	mention of CLEAR_SOLIB.
+
+2007-11-11  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Print Settings): Add documentation for "set/show
+	print frame-arguments".
+
+2007-11-05  Luis Machado  <luisgpm@br.ibm.com>
+
+	* gdb.texinfo (Output): Update printf command's description.
+
+2007-10-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (PowerPC): Document "set powerpc vector-abi" and "set
+	powerpc soft-float".
+
+2007-10-24  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Files): Correct formatting.  Mention Expat
+	requirement.
+	(Requirements for Building GDB): Expand the list of Expat
+	uses.
+	(Library List Format, Memory Map Format): Mention Expat.
+	(Target Descriptions): Update Expat wording.
+
+2007-10-24  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Register and Memory Data, Target Conditionals):
+	Document that gdbarch_convert_register_p should return zero for no-op
+	conversions.
+
+2007-10-22  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texi (Compiler Characteristics): Move documentation
+	of set_gdbarch_sofun_address_maybe_missing back to ...
+	(Target Conditionals): ... here to fix build break.
+
+2007-10-19  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texi (Target Conditionals): Remove documentation of
+	SOFUN_ADDRESS_MAYBE_MISSING, replaced by ...
+	(Compiler Characteristics): ... documentation of
+	set_gdbarch_sofun_address_maybe_missing.
+
+2007-10-17  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Target Conditionals): Use
+	frame_unwind_register_unsigned in examples instead of
+	frame_unwind_unsigned_register.
+
+2007-10-16  Gaius Mulley  <gaius@glam.ac.uk>
+
+        * gdb.texinfo: Add TSIZE definition, removed statement about
+	unbounded arrays being unimplemented.
+
+2007-10-15  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Predefined Target Types): Add int128
+	and uint128.
+	(Standard Target Features): Add PowerPC features.
+
+2007-10-15  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint print c-tdesc".
+
+2007-10-12  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texi (Target Conditionals): Remove documentation
+	of and references to DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS,
+	gdbarch_extract_return_value, and gdbarch_store_return_value.
+
+2007-10-12  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texi (Target Conditionals): Remove documentation of
+	and references to DEPRECATED_REG_STRUCT_HAS_ADDR.
+
+2007-10-11  Kazu Hirata  <kazu@codesourcery.com>
+
+	* gdb.texinfo: Mention that inaccessible-by-default is on by
+	default.
+
+2007-10-11  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Target Conditionals): Remove VARIABLES_INSIDE_BLOCK.
+
+2007-09-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Setting Watchpoints): Adjust warning text about
+	multi-threaded watchpoints.
+	* gdbint.texinfo (Watchpoints): Describe how watchpoints are
+	checked.  Describe sticky notification.  Expand description
+	of steppable and continuable watchpoints.
+	(Watchpoints and Threads): New subsection.
+
+2007-09-28  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Setting Breakpoints): Revise
+	documentation for pending breakpoints.  Document
+	breakpoints with multiple locations.
+
+2007-09-19  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Miscellaneous gdb/mi Commands):
+	Document -list-features.
+
+2007-09-15  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Output): Spell out which features of C's printf are
+	not supported by GDB's printf.
+	(Separate Debug Files): More accurate wording regarding build ID
+	and a reference to the ld manual rather than the Fedora wiki.
+
+2007-09-04  Daniel Jacobowitz  <dan@codesourcery.com>
+	    Jim Blandy  <jimb@codesourcery.com>
+
+	* gdb.texinfo (Output Formats): Update 'c' description.  Describe 's'.
+	(Examining Memory): Update mentions of the 's' format.
+	(Automatic Display): Likewise.
+
+2007-09-02  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo: Update the FSF's Back-Cover Text.
+
+2007-09-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Separate Debug Files): Cosmetic quoting removal.
+	Fixed the ``build ID'' name.  New binaries build instructions for the
+	build ID inclusion.  Explain how the commands are specific to the build
+	ID vs. debug link.
+
+2007-09-01  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Separate Debug Files): Fix last change.  Add
+	indexing for ``build ID'' support.
+
+2007-09-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Separate Debug Files): Included a BUILD ID description.
+	Enlisted BUILD ID to the debug file searching example.
+	Included a BUILD ID `.note.gnu.build-id' section description.
+	Updated/added the debug files splitting instructions for OBJCOPY.
+
+2007-08-31  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Variable Objects): Adjust docs
+	for -var-info-expression and document
+	-var-info-path-expression.
+
+2007-08-20  Jim Blandy  <jimb@codesourcery.com>
+
+	* gdb.texinfo (Top): Dedicate manual to the memory of Fred Fish.
+	(title page): Include the dedication in the printed manual, as a
+	separate page after the copyright notice.
+
+	* gdb.texinfo (The F Reply Packet): Avoid confusing texi2html:
+	don't break a @var across a line.
+
+2007-07-25  Maciej W. Rozycki  <macro@mips.com>
+
+	* Makefile.in (MAKEHTMLFLAGS): Also search the current directory
+	for include files.
+
+2007-07-12  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (Server Prefix): New node.  Adapt from existing node
+	in annotate.texinfo.
+	(Command History): Link to new node.
+
+2007-07-05  Markus Deuling  <deuling@de.ibm.com>
+
+	* gdbint.texinfo (PC_LOAD_SEGMENT): Remove description.
+
+2007-07-05  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo (Target Conditionals): Fix last change.
+
+2007-07-03  Markus Deuling  <deuling@de.ibm.com>
+
+	* gdb.texinfo: Replace following macros by their appropriate gdbarch
+	routines:
+	(TARGET_CHAR_SIGNED, CALL_DUMMY_LOCATION, CANNOT_FETCH_REGISTER)
+	(CANNOT_STORE_REGISTER, GET_LONGJMP_TARGET, POINTER_TO_ADDRESS)
+	(ADDRESS_TO_POINTER, INNER_THAN, FRAME_NUM_ARGS)
+	(HAVE_NONSTEPPABLE_WATCHPOINT, TARGET_SHORT_BIT, TARGET_INT_BIT)
+	(TARGET_LONG_BIT, TARGET_LONG_LONG_BIT, TARGET_FLOAT_BIT)
+	(TARGET_DOUBLE_BIT, TARGET_LONG_DOUBLE_BIT, TARGET_PTR_BIT
+	(TARGET_ADDR_BIT, SP_REGNUM, PC_REGNUM, PS_REGNUM, FP0_REGNUM)
+	(STAB_REG_TO_REGNUM, ECOFF_REG_TO_REGNUM, DWARF_REG_TO_REGNUM)
+	(SDB_REG_TO_REGNUM, DWARF2_REG_TO_REGNUM, BELIEVE_PCC_PROMOTION)
+	(CONVERT_REGISTER_P, REGISTER_TO_VALUE, VALUE_TO_REGISTER)
+	(POINTER_TO_ADDRESS, ADDRESS_TO_POINTER, EXTRACT_RETURN_VALUE)
+	(STORE_RETURN_VALUE, SKIP_PROLOGUE, MEMORY_INSERT_BREAKPOINT)
+	(BREAKPOINT_FROM_PC, MEMORY_REMOVE_BREAKPOINT, DECR_PC_AFTER_BREAK)
+	(ADDR_BITS_REMOVE, TARGET_PRINT_INSN, SKIP_TRAMPOLINE_CODE)
+	(IN_SOLIB_RETURN_TRAMPOLINE, NAME_OF_MALLOC, ADDRESS_CLASS_TYPE_FLAGS)
+	(ADDRESS_CLASS_TYPE_FLAGS_TO_NAME, ADDRESS_CLASS_TYPE_FLAGS_P).
+	(ADDRESS_CLASS_NAME_to_TYPE_FLAGS, ADJUST_BREAKPOINT_ADDRESS)
+	(PRINT_FLOAT_INFO, PRINT_VECTOR_INFO, INTEGER_TO_ADDRESS)
+	(SKIP_PERMANENT_BREAKPOINT, TARGET_VIRTUAL_FRAME_POINTER)
+	(SOFTWARE_SINGLE_STEP_P)
+
+	(push_dummy_call, stabs_argument_has_addr, unwind_sp, unwind_pc)
+	(print_registers_info, push_dummy_code, unwind_dummy_id): Rework
+
+	(REGISTER_CONVERT_TO_TYPE, END_OF_TEXT_DEFAULT, GDB_MULTI_ARCH)
+	(GDB_TARGET_IS_HPPA, DEPRECATED_GET_SAVED_REGISTER)
+	(SYMBOLS_CAN_START_WITH_DOLLAR, DEPRECATED_INIT_EXTRA_FRAME_INFO)
+	(DEPRECATED_INIT_FRAME_PC, DEPRECATED_SIGTRAMP_START)
+	(IN_SOLIB_CALL_TRAMPOLINE, NO_HIF_SUPPORT, REGISTER_CONVERTIBLE)
+	(DEPRECATED_REGISTER_RAW_SIZE, PARM_BOUNDARY, DEPRECATED_STACK_ALIGN)
+	(PROLOGUE_FIRSTLINE_OVERLAP, DEPRECATED_POP_FRAME, STEP_SKIPS_DELAY)
+	(TARGET_COMPLEX_BIT, TARGET_DOUBLE_COMPLEX_BIT)
+	(OS9K_VARIABLES_INSIDE_BLOCK, KERNEL_U_ADDR, KERNEL_U_ADDR_HPUX)
+	(REGISTER_U_ADDR, U_REGS_OFFSET, DEBUG_PTRACE): Remove description.
+
+	(Converting an existing Target Architecture to Multi-arch): Remove
+	 section.
+
+	(gdbarch_unwind_pc, gdbarch_unwind_sp): Renew code example.
+	(gdbarch_addr_bits_remove): Add code example.
+
+	* gdb.texinfo: Replace REGISTER_NAME by gdbarch_register_name.
+
+2007-07-02  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Remote Configuration): Document library-info-packet.
+	Add other missing entries.  Adjust the table size to fit.
+	(Stop Reply Packets): Use @itemize instead of @enumerate.  Document
+	stop reasons including the new "library" event.
+	(General Query Packets): Adjust table widths for qSupported.  Mention
+	qXfer:libraries:read reply to qSupported and document the new packet.
+	(Library List Format): New section.
+
+2007-07-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.texinfo (Attach): Fixed GDB exit inferior detachment.
+
+2007-06-28  Michael Snyder  <msnyder@svkmacdonelllnx>
+
+	* gdbint.texinfo (Table, Tuple and List Functions) Fix typo.
+
+2007-06-25  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdbint.texinfo (Register and Memory Data): Break sections
+	into nodes and add a menu.
+
+2007-06-21  Maciej W. Rozycki  <macro@mips.com>
+
+	* gdb.texinfo (Examining Memory): Document the new behaviour.
+
+2007-06-21  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Standard Target Features): Document
+	m68k features.
+
+2007-06-18  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (General Query Packets): Document qOffsets changes.
+
+2007-06-13  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Target Description Format): Add version attribute
+	for <target>.
+
+2007-06-13  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (MIPS Features): Document org.gnu.gdb.mips.linux.
+
+2007-06-13  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (MIPS Features): New subsection.
+
+2007-06-12  Ulrich Weigand  <uweigand@de.ibm.com>
+	    Markus Deuling  <deuling@de.ibm.com>
+
+	* gdb.texinfo (General Query Packets): Document qXfer:spu:read
+	and qXfer:spu:write packets and mention them under qSupported.
+
+2007-06-12  Ulrich Weigand  <uweigand@de.ibm.com>
+	    Markus Deuling  <deuling@de.ibm.com>
+
+	* gdb.texinfo (Architectures): Add new SPU section to document
+	Cell Broadband Engine SPU architecture specific commands.
+
+2007-06-09  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Editorial
+	comments.
+
+2007-06-07  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (Emacs): Describe GDB under Emacs 22.1.
+
+2007-05-29  Jim Blandy  <jimb@codesourcery.com>
+
+	* gdb.texinfo (Overview): Doc fix.
+
+2007-05-22  Maciej W. Rozycki  <macro@mips.com>
+
+	* gdb.texinfo (Remote Configuration): Document "set/show
+	remoteflow".
+
+2007-05-16  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (MIPS): Remove documentation for set mips
+	saved-gpreg-size, show mips saved-gpreg-size, and set mips
+	stack-arg-size.
+
+2007-05-14  Bob Wilson  <bob.wilson@acm.org>
+
+	* all-cfg.texi (GDBTUI): New.
+	* gdb.texinfo (Mode Options): Use GDBTUI variable.
+	(TUI, TUI Overview, TUI Keys, TUI Single Key Mode, TUI Commands)
+	(TUI Configuration): Edit to improve clarity and fix problems of
+	both style and content.
+
+2007-05-11  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* observer.texi (GDB Observers): New observer "new_objfile".
+
+2007-05-08  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texinfo (Native Conditionals): Remove USE_PROC_FS.
+
+2007-04-14  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Document
+	frozen variables objects.
+
+2007-04-13  Paul Brook  <paul@codesourcery.com>
+
+	* gdb.texinfo: Document ieee_single and ieee_double target types.
+
+2007-04-13  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Memory): Reference Remote Debugging chapter.
+	(Character Sets, Caching Data of Remote Targets): Likewise.
+	(Targets): Delete Remote node.  Move its text...
+	(Debugging Remote Programs): ...to here.  Delete description
+	of the "remote" command.
+	(Remote configuration): Delete description of "set remotedevice"
+	and "show remotedevice".
+	(Embedded Processors): Delete H8/300, H8/500, and SH nodes.
+
+2007-04-11  Steve Ellcey  <sje@cup.hp.com>
+
+	* gdbint.texinfo (warning flags): Add -Wno-char-subscripts.
+
+2007-04-11  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (Contributors, Continuing and Stepping)
+	(Fortran Defaults, HPPA, TUI, TUI Commands, Configure Options)
+	(General Query Packets, File-I/O Remote Protocol Extension)
+	(Protocol Basics, The F Reply Packet, Write)
+	(Protocol-specific Representation of Datatypes, Memory Transfer):
+	Fix hyphenation, punctuation and grammar problems.
+	(Cygwin Native): Likewise.  Also fix misuse of @pxref and use
+	'section' instead of 'subsection' in the text.
+	(Non-debug DLL Symbols): Avoid 'subsubsection' in the text.
+	(i386): Remove period from section name.
+	(Installing GDB, Requirements, Running Configure,  Separate Objdir)
+	(Config Names, Configure Options): Use @file{configure}.
+
+2007-04-11  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Writing Tests): Mention gdb_test_multiple
+	and tab expansion.
+
+2007-04-10  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (SOM): Correct location of the SOM reader.
+
+2007-04-02  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo: Consistently capitalize all significant words in
+	node names, chapter titles, section titles, and headings.  Update
+	cross references to match.
+	(Starting and Stopping Trace Experiment): Make node name plural.
+	(Breakpoint related warnings): Hyphenate "Breakpoint-related".
+
+2007-03-30  Pedro Alves  <pedro_alves@portugalmail.pt>
+
+	* gdb.texinfo (WinCE): Delete obsolete subsection.
+
+2007-03-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (M68K): Remove obsolete ROM monitors.
+	* gdbint.texinfo (DWARF 1): Delete section and other dwarfread.c
+	references.
+
+2007-03-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Startup): Delete references to some alternate
+	names for .gdbinit.
+	(Thread): Remove LynxOS reference.
+	(Tandem ST2000): Delete target-specific documentation.
+	* gdbint.texinfo (Symbol Handling): Remove mention of NLM.
+	(Target Architecture Definition): Remove mention of GDB_OSABI_NETWARE
+	and GDB_OSABI_LYNXOS.
+
+2007-03-29  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texi (Native Conditionals): Remove PTRACE_ARG3_TYPE.
+
+2007-03-27  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* gdbint.texinfo (Target Conditionals): Remove mention of
+	DEPRECATED_REMOTE_BREAKPOINT, DEPRECATED_BIG_REMOTE_BREAKPOINT,
+	and DEPRECATED_LITTLE_REMOTE_BREAKPOINT.
+
+2007-03-27  Brooks Moses  <brooks.moses@codesourcery.com>
+
+	* Makefile.in: Add "pdfdir" installation
+	directory, PDFTEX macro, support for "install-pdf" target,
+	and rules for making a pdf version of refcard.texi.
+	* refcard.tex: Specify paper size for PDF output.
+
+2007-03-26  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (Omissions from Ada, Additions to Ada): Wrap long lines.
+
+2007-03-26  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (Invoking GDB): Use @value{GDBP}.
+	(Source Path, Character Sets, Macros, Define)
+	(GDB/MI Result Records, GDB/MI Simple Examples)
+	(GDB/MI Program Execution, GDB/MI File Commands)
+	(Maintenance Commands, Packets, File-I/O Overview): Use @value{GDBN}.
+	(Bug Reporting): Use @value{GCC}.
+
+2007-03-26  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (Help): Fix formatting of examples.
+	(Variables): Use @ifnotinfo instead of @iftex.
+	(Non-debug DLL symbols): Use @ref instead of @pxref.
+	(Sparclet File): Use @samp instead of quotes.
+
+2007-03-26  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (Variables, C): Update cross reference to GCC docs.
+
+2007-03-26  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (Top): Move TUI and Annotations menu entries to match
+	the order of the nodes.
+	(C Operators, C Constants, Debugging C): Remove extra menus.
+	(Method Names in Commands): Do not specify next/prev/up nodes.
+
+2007-03-26  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (File Options): Add missing parenthesis.
+	(Breakpoints, Special Fortran commands, PowerPC): Fix typos.
+
+2007-02-26  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Monitor commands for gdbserver): New subsection.
+
+2007-02-26  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Standard Target Features): Mention
+	case insensitivity.
+	(ARM Features): Describe org.gnu.gdb.xscale.iwmmxt.
+
+2007-02-18  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (Top): Put Appendix A after numbered sections.
+	(Files): Add section name to argument list for pxref.
+	(Non-debug DLL symbols): Don't use `see' for pxref.
+	(Embedded Processors): Fix typo.
+	(GDB/MI Breakpoint Commands): Execution commands generate
+	*stopped not ^done.
+
+2007-02-13  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Describe meanings of
+	values for in_scope.  Mention that only root variables can be
+	updated.
+	(GDB/MI Development and Front Ends): Explain new values may be
+	added to existing fields.
+
+2007-02-08  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (-target-disconnect): Use @smallexample.
+	(Requirements): Add anchor for Expat.  Update description.
+	(Target Descriptions): Mention Expat.
+	(Target Description Format): Document new elements.  Use
+	@smallexample.
+	(Predefined Target Types, Standard Target Features): New sections.
+	* gdbint.texinfo (Target Descriptions): New section.
+
+2007-02-07  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Target Description Format): Add section on XInclude.
+
+2006-02-03  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Describe the new
+	command -enable-timings.
+
+2007-02-02  Markus Deuling  <deuling@de.ibm.com>  (tiny change)
+
+	* gdbint.texinfo (Operation System ABI Variant Handling): Update
+	descriptions for new/deleted elements in gdb_osabi.  Add missing
+	description for function generic_elf_osabi_sniff_abi_tag_sections.
+
+2007-01-29  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Maintenance Commands): Add documentation for
+	the new "maint print target-stack" command.
+
+2007-01-26  Jan Kratochvil <jan.kratochvil@redhat.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: Describe CHAR array vs. string identification rules.
+
+2007-01-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Compilation, Files, Bootstrapping, Bug Reporting):
+	Use @value{NGCC} instead of @value{GCC}.
+
+2007-01-20  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>  (tiny change)
+
+	* agentexpr.texi: Fix typos.
+	* annotate.texinfo: Likewise.
+	* gdb.texinfo: Likewise.
+	* gdbint.texinfo: Likewise.
+	* observer.texi: Likewise.
+	* stabs.texinfo: Likewise.
+
+2007-01-20  Markus Deuling  <deuling@de.ibm.com>  (tiny change)
+
+	* gdbint.texinfo (Support Libraries): Remove mmalloc
+	entry.  Describe readline library.
+
+2007-01-09  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Target Descriptions): New section.
+	(General Query Packets): Add QPassSignals anchor.  Mention
+	qXfer:features:read under qSupported.  Expand mentions of
+	qXfer:memory-map:read and QPassSignals.  Document
+	qXfer:features:read.
+
+2007-01-08  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Commands to specify files): Describe
+	"set sysroot" and "show sysroot".
+	(Using the `gdbserver' program): Lowercase argument
+	to @var.  Expand description of setting up GDB on the
+	host.
+
+2007-01-05  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Set Catchpoints): Add documentation for the new
+	catch exception, catch exception unhandled, and catch assert
+	commands.
+
+2007-01-04  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Debugging Output): Document "set debug xml"
+	and "show debug xml".
+
+2007-01-04  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Compiler Warnings): Update for -Wall use.
+
+2007-01-01  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Start of New Year Procedure): Add missing item.
+
+2006-12-08  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Wrap historical
+	note in @ignore, to be removed later if nobody complains.
+
+2006-12-04  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Describe -c option
+	of -var-delete.
+
+2006-11-22  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Setting breakpoints): Document
+	automatic software/hardware breakpoint usage and
+	the "set breakpoint auto-hw" command.
+
+2006-11-21  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Memory Access Checking): New.
+
+2006-11-16  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Remote configuration): Mention
+	"pass-signals-packet".
+	(General Query Packets): Document QPassSignals.  Fix
+	a typo.
+
+2006-11-14  Maxim Grigoriev  <maxim@tensilica.com>
+
+	* gdb.texinfo (Contributors): Add contributors of Xtensa port.
+
+2006-11-14  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Remote configuration): Rewrite documentation for
+	packet configuration commands.
+	(OS Information): Adjust reference to qXfer:auxv:read.
+	(General Query Packets): Remove references to read-aux-vector-packet
+	and set remote get-thread-local-storage-address.
+
+2006-11-10  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Add new
+	Initializing a New Architecture section.
+
+2006-10-31  David Taylor  <dtaylor@emc.com>
+
+	* stabs.texinfo (Macro define and undefine): New node describing
+	stabs for #define and #undef.
+
+2006-10-27  Andreas Schwab  <schwab@suse.de>
+
+	* gdb.texinfo (Processes): Rename "detach-fork" to "detach fork".
+
+2006-10-21  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Breakpoints, Set Watchpoints): Elaborate and
+	clarify on the possible meanings of ``expression'' watched by
+	watchpoints.  Add indexing.
+	(Prompting, Errors, Invalidation, Annotations for Running)
+	(Source Annotations): Fix index entries by adding "annotation" to
+	them, to discriminate from index entries that point to the more
+	general topic descriptions.
+
+2006-10-17  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Target Vector Definition): Move most
+	content into Existing Targets.  Add a menu.
+	(Existing Targets): New section, moved from Target Vector
+	Definition.  Use @subsection.
+	(Managing Execution State): New section.
+
+2006-10-16  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (ST2000): Use Ctrl- instead of C-.
+
+2006-10-15  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Sample Session, Invocation, Quitting GDB)
+	(Command Syntax, Signals, Backtrace, Connecting)
+	(Remote configuration, Renesas Boards, Console I/O): Fix last
+	change: use Ctrl- instead of C-, except wrt Emacs.
+	(File-I/O Examples): Put Ctrl-c in @kbd.
+	(Cygwin Native, File-I/O Overview, The Ctrl-C message)
+	(Console I/O): Use @samp with Ctrl-.
+	(Signals, Set Breaks, Set Watchpoints): Document optional
+	arguments to `info signals'  `handle', `info breakpoints', and
+	`info watchpoints'.
+
+2006-10-14  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Backtrace): Fix last change.
+
+2006-10-14  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (Backtrace): Order correctly and add other cases.
+
+2006-10-10  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (Command Syntax, Connecting, Remote configuration)
+	(Renesas Boards, ST2000, TUI Keys, TUI Single Key Mode)
+	(TUI Commands, Emacs, Console I/O): Fix @key and @kbd usage.
+
+2006-09-21  Vladimir Prus  <vladimir@codesourcery.com>
+	    Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Packets): Document vFlashErase,
+	vFlashWrite and vFlashDone packets.
+	(General Query Packets): Document qXfer:memory-map:read.
+	Add a new feature for qXfer:memory-map:read.
+	(Memory map format): New section.
+	(Target Commands): Mention that gdb can write flash.
+
+2006-09-21  Vladimir Prus  <vladimir@codesourcery.com>
+	    Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Memory Region Attributes): Mention target-supplied
+	memory regions and "mem auto".
+
+2006-09-21  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* gdbint.texinfo (Array Containers): New section.
+
+2006-09-17  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Stack Manipulation): Mention that
+	-stack-list-arguments HIGH_FRAME argument can be larger then the
+	actual number of frames.
+
+2006-09-07  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (GDB/MI Stack Manipulation): Mention that
+	-stack-list-locals HIGH_FRAME argument can be larger then the
+	actual number of frames.
+
+2006-09-02  Bob Wilson  <bob.wilson@acm.org>
+
+	* gdb.texinfo (Packets, Stop Reply Packets, General Query Packets,
+	Register Packet Format, Tracepoint Packets): Fix spelling errors.
+
+2006-09-02  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo (Overall Structure): New section "Source Tree
+	Structure".
+
+2006-08-17  Jim Blandy  <jimb@codesourcery.com>
+
+	* gdb.texinfo (Stop Reply Packets): Note similarity of 'S' and 'T'
+	responses.
+
+2006-08-08  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Source Path): Add documentation for new
+	substitute-path commands.
+
+2006-08-08  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Installing GDB): Update menu.  Move text to...
+	(Running Configure): ...here.
+	(Requirements): New node.  Mention expat.
+
+2006-08-08  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.texinfo (Target Commands): Remove
+	'set download-write-size' and 'show download-write-size'.
+
+2006-08-01  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* stabs.texinfo (Member Type Descriptor): Correct example for
+	pointer to member types.
+
+2006-07-21  Andrew Stubbs  <andrew.stubbs@st.com>
+
+	* gdb.texinfo (Optional warnings and messages): Add
+	'set/show trace-commands'.
+	(Command files): Add '-v' to source command.
+
+2006-07-12  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (OS Information): Update qPart reference to
+	qXfer.
+	(Remote configuration): Likewise.
+	(Overview): Move @cindex to the start of a paragraph.  Talk
+	about binary data encoding.
+	(Packets): Refer to the overview for the details of the X
+	packet encoding.
+	(General Query Packets): Remove qPart description.  Add qXfer
+	description.  Add an anchor to qSupported.  Correct feature
+	table title.  Add a new feature for qXfer:auxv:read.
+	(Interrupts): Add a missing parenthesis.
+
+2006-07-05  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (KOD): Remove node.
+	(GDB/MI Kod Commands): Remove commented out node.
+
+2006-07-01  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (GDB/MI Output Syntax, GDB/MI Simple Examples)
+	(GDB/MI Breakpoint Commands, GDB/MI Program Context)
+	(GDB/MI Thread Commands, GDB/MI Program Execution)
+	(GDB/MI Stack Manipulation, GDB/MI Variable Objects)
+	(GDB/MI Data Manipulation, GDB/MI Symbol Query)
+	(GDB/MI File Commands, GDB/MI Target Manipulation)
+	(GDB/MI Miscellaneous Commands): Change (@value{GDBP})->(gdb),
+	since the MI prompt is hard-wired into the code.
+
+2006-07-01  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Compatibility with CLI): Qualify more carefully.
+	(GDB/MI Simple Examples): Use @subheading for "A Bad Command".
+	(GDB/MI Data Manipulation): Remove description of unimplemented
+	display related commands as variable objects perform this function
+	and are superior: -display-delete, -display-disable,
+	-display-enable, -display-insert and -display-list.  Move
+	-environment-cd, -environment-directory, -environment-path
+	and -environment-pwd to "Program Context".
+	(GDB/MI Program Control): Rename to "Program Execution".  Move
+	-exec-arguments -exec-abort to...
+	(GDB/MI Program Context): ...here.  New node split from "Data
+	 Manipulation".
+
+2006-06-21  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Remote configuration): Document set / show
+	remote supported-packets.
+	(General Query Packets): Document qSupported packet.
+
+2006-06-13  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* gdb.texinfo (system): Document behaviour with zero length
+	string.
+
+2006-06-10  Sandra Loosemore <sandra@codesourcery.com>
+
+	* gdb.texinfo (File-I/O overview): Copy edit for grammar, spelling,
+	and font markup.
+	(Protocol basics): Likewise.
+	(The F request packet): Likewise.
+	(The F reply packet): Likewise.
+	(Memory transfer): Move this node to be a subsubsection of
+	"Protocol specific representation of datatypes".
+	(The Ctrl-C message): More copy editing.
+	(Console I/O): Likewise.
+	(The isatty call): Delete this node, and merge its content into
+	the "isatty" node.  Fixed references elsewhere.
+	(The system call): Delete this node, and merge its content into
+	the "system" node.  Fixed references elsewhere.
+	(open): Reformat to use @table, and add appropriate font markup.
+	(close): Likewise.
+	(read): Likewise.
+	(write): Likewise.
+	(lseek): Likewise.
+	(rename): Likewise.
+	(unlink): Likewise.
+	(stat/fstat): Likewise.
+	(gettimeofday): Likewise.
+	(isatty): Likewise.
+	(system): Likewise, plus minor changes to fix confusing wording.
+	(Integral datatypes): Fix font markup.
+	(Pointer values): Likewise.
+	(struct stat): Fix markup to use @table, plus minor copy editing.
+	(struct timeval): Fix font markup, plus minor copy editing.
+	(Constants): Minor copy editing.
+	(Errno values): Add font markup.
+	(File-I/O Examples): Likewise.
+
+2006-06-10  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI): Remove duplicate acknowledgements.
+	(GDB/MI Simple Examples): Move node up one level.  Use real
+	examples.
+	(GDB/MI Compatibility with CLI): Update.
+	(GDB/MI Result Records): Add "connected" and "exit" result
+	classes.
+	(GDB/MI Stream Records): Clarify target output.
+	(GDB/MI Command Description Format): Modify example description.
+	(GDB/MI Breakpoint Table Commands): Rename to...
+	(GDB/MI Breakpoint Commands): ...this
+	(GDB/MI Breakpoint Commands): Add optional thread field.
+	(GDB/MI Program Control): Add an introduction.  Move "Program
+	termination" examples into exec-run description.
+	(GDB/MI File Commands): Mention similar CLI commands.
+	(GDB/MI Miscellaneous Commands): Move to end.  Mention "show version"
+	is similar to "-gdb-version".
+
+2006-06-09  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Symbols): Fix "(gdb)"=>"(@value{GDBP})".
+
+2006-06-02  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Development and Front Ends): Use
+	sourceware.org for mailing lists.
+	(GDB/MI File Commands): New node split from Program Control.
+
+2006-06-01  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Development and Front Ends): New node.
+
+2006-05-22  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Cygwin Native): Fix last change.
+
+2006-05-22  Christopher Faylor  <cgf@timesys.com>
+
+	* gdb.texinfo (Cygwin Native): Document set/show cygwin-exceptions.
+
+2006-05-15  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdbint.texinfo (Algorithms): Correct spelling and punctuation.
+	(Releasing GDB, Testsuite): Remove details for including DejaGnu.
+
+2006-05-14  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (General Query Packets): Recommend not starting
+	new packets with qC and clarify.
+
+2006-05-13  Gaius Mulley  <gaius@glam.ac.uk>
+
+	* gdb.texinfo (M2 Types): New section.
+
+2006-05-10  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* agentexpr.texi: Add a copyright and license notice.
+	* observer.texi: Likewise, with GPL clause for function prototypes.
+	Remove trailing whitespace.
+
+2006-05-05  Jim Blandy  <jimb@codesourcery.com>
+
+	* gdb.texinfo (General Query Packets): Document conventions for
+	terminating packet names, and their violations.
+
+2006-05-05  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* Makefile.in (GDB_DOC_SOURCE_INCLUDES): Update for readline 5.1.
+	* gdb.texinfo: Likewise.
+
+2006-05-05  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Remote Configuration): Remove "set remotedebug"
+	and "show remotedebug".
+	(Debugging Output): Add additional index entries.
+
+2006-04-27  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (delete-fork): Command renamed to "delete fork".
+
+2006-04-22  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Contributors): Credit frame unwinder contributors.
+	* gdbint.texinfo (Algorithms): Fix errors in frame documentation.
+
+2006-04-18  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (x86 Watchpoints, Target Conditionals): Update insert
+	and remove breakpoint prototypes.
+	(Watchpoints): Move description of target_insert_hw_breakpoint and
+	target_remove_hw_breakpoint ...
+	(Breakpoints): ... to here.  Document target_insert_breakpoint and
+	target_remove_breakpoint.
+
+2006-04-17  Jim Blandy  <jimb@codesourcery.com>
+
+	* gdb.texinfo (Packets): Note that 'addr' arguments to s, S, c,
+	and C packets are optional.
+
+2006-04-14  Frederic Riss  <frederic.riss@st.com>
+
+	* gdb.texinfo (Specifying source directories): Update the description
+	of the source file search to reflect the fact that the source path
+	always contains at least $cdir and $cwd.
+
+2006-03-31  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo: Update copyright dates.
+
+2006-03-31  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Overview): Add an index entry to "empty response".
+
+2006-03-29  Steve Ellcey  <sje@cup.hp.com>
+
+	* gdb.texinfo: Remove gdbserve.nlm documentation.
+
+2006-03-28  Jim Blandy  <jimb@codesourcery.com>
+
+	* gdbint.texinfo (Prologue Analysis): New section.
+
+2006-03-07  Jim Blandy  <jimb@red-bean.com>
+
+	* gdb.texinfo (Connecting): Document 'target remote pipe'.
+
+	* gdb.texinfo (Target Commands): Update text describing how to
+	specify a target.  Refer to the detailed section on remote
+	debugging, not the brief mention.
+
+	* gdb.texinfo (Connecting): Organize the different 'target remote'
+	connection methods into a table.  Add a 'target remote' index
+	entry. (!!!)
+
+2006-02-17  Fred Fish  <fnf@specifix.com>
+
+	* gdb.texinfo (Symbols): Update descriptions of 'whatis' and
+	'ptype' commands to reflect the fact that the only significant
+	difference between them is that ptype prints the complete type
+	description instead of just the name.
+
+2006-02-13  Wu Zhou  <woodzltc@cn.ibm.com>
+
+	* gdbint.texinfo (Watchpoints): Delete
+	TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT.
+
+2006-02-10  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Breakpoint Table Commands): Add fullname and
+	times fields where needed.  Fix typos.  Update general form given
+	for output of -break-insert.
+	(GDB/MI): Abbreviate some unnecessarily long fullnames.
+
+2006-02-06  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdbint.texinfo (Symbol Handling): Add a section
+	on memory management.
+
+2006-02-06  Vladimir Prus  <ghost@cs.msu.su>
+
+	* gdb.texinfo (Breakpoint table commands): Document the fullname
+	field in -break-list output.
+
+2006-02-03  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Cygwin Native): Fix typos.  Clarify the types of
+	debugging information produced by the various "set debug..."
+	options.
+
+2006-02-01  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Files): Remove obsolete bits from the description
+	of "symbol-file".
+
+2006-01-25  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (Testsuite): Explain how to run selected tests.
+
+2006-01-24  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (Frames): Document the basics of GDB's register
+	unwinding model, and explain the existence of the "sentinel" frame.
+
+2006-01-23  Andrew Stubbs  <andrew.stubbs@st.com>
+
+	* gdb.texinfo (Choosing files): Mention that -directory is used
+	for script files.
+	(Specifying source directories): Likewise.
+	(Command files): Explain how script files are found.
+
+2006-01-21  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Backtrace): Describe how to get backtrace of all
+	the threads in a multi-threaded program.
+	(Threads): The threadno argument of "thread apply" can be a range
+	of numbers.
+
+2006-01-18  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (Coding): Add entry for -Wno-pointer-sign to list
+	of warning flags.
+
+2006-01-13  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Sequences): Improve menu annotations.
+	(Define): Add index entries for arguments of user-defined
+	commands.  Move the description of flow-control commands...
+	(Command Files): ...to here.  Document loop_break and
+	loop_continue.
+	(Define, Command Files): Document `end' and add index entries for
+	it.
+
+2006-01-04  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo: Add documentation for linux-fork.
+	* gdbint.texinfo: Add internal documentation for checkpoints.
+
+2006-01-02  Paul N. Hilfinger  <hilfinger@gnat.com>
+
+	* gdb.texinfo (Omissions from Ada): Document that there is now
+	limited aggregate support.
+
+2005-12-28  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Registers): Describe how to refer to SSE and MMX
+	registers and the likes.
+
+2005-12-24  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Target Commands, Bug Reporting, File Options)
+	(Symbols): Fix usage of "e.g.".
+	(Memory Region Attributes): Fix usage of "etc."
+
+	* gdbint.texinfo (libgdb, Symbol Handling, Native Debugging)
+	(Coding): Fix usage of "e.g.".
+
+2005-12-23  Eli Zaretskii  <eliz@gnu.org>
+
+	* stabs.texinfo:
+	* refcard.tex:
+	* gpl.texi:
+	* gdbint.texinfo:
+	* gdb.texinfo:
+	* gdb-cfg.texi:
+	* fdl.texi:
+	* annotate.texinfo:
+	* all-cfg.texi:
+	* Makefile.in: Add (C) after Copyright.  Update the FSF
+	address.
+
+2005-12-03  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Connecting): Explain that `monitor' is a way to
+	extend GDB with commands for external monitor.
+
+2005-12-02  Andrew Stubbs  <andrew.stubbs@st.com>
+
+	* gdb.texinfo (Convenience variables): Add init-if-undefined command.
+
+2005-11-25  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdbint.texinfo (Start of New Year Procedure): New chapter.
+
+2005-11-21  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Tracepoint Packets): Document restrictions on
+	placement of 'R' actions in tracepoint action packets; document
+	dependence of 'X' and 'M' actions on a preceding 'R' action for
+	their registers.
+
+2005-11-19  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Tracepoint Packets): New node.
+	(General Query Packets): Add entries for the tracepoint packets,
+	referring to the "Tracepoint Packets" node.
+	(Tracepoints): Add reference to "Tracepoint Packets".
+
+2005-11-18  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdb.texinfo (set remotebreak): Add anchor.
+	(X packet): Likewise.
+	(Remote Protocol): Add new section `Interrupts' and new index
+	entry `interrupts (remote protocol)'.
+
+2005-11-18  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Packets): Move information out of 'q' and 'Q'
+	entries into the General Query Packets section.  Add a
+	cross-reference to that section.  Drop description of replies, as
+	these are covered in the descriptions of each packet.
+	(General Query Packets): Add introductory text.  Explain naming
+	conventions, and how the end of a name is recognized.
+
+2005-11-17  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdb.texinfo (Remote configuration): Fix typo in description of
+	"set remotebreak" command.
+
+2005-11-16  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Packets, Stop Reply Packets)
+	(General Query Packets): Various formatting cleanups.
+	- Use @samp for packet contents.
+	- Drop summaries from packet @item lines; the same information appears
+	  immediately below in the description.
+	- Delete paragraph breaks after packet @item commands, so that the
+	  description appears directly to the right of the packet prototype
+	  in the printed manual, if it fits.
+	- Place spaces in packet prototypes between @vars and non-@var
+	  letters, and explain that they're just for formatting.
+	- Use @dots{} instead of '...'.
+	- Fix uses of @code where @var was needed.
+	- Replace "deprecated" markers with English text spelling out the
+	  packet's status and the preferred alternatives.
+	- Remove "(reserved)" markers on 'A' and 'I' packets; it's unclear
+	  what this ever meant.
+	- Remove "(draft)" markers on 'i' packets; nobody has commented on
+	  this for a long time.
+	- Remove "(draft)" markers on 'z' and 'Z' packets; these have been
+	  implemented several times, and have been in use for years.
+
+2005-11-15  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Packets): Add index entries for 'm' packet
+	disclaimers.
+
+	* gdb.texinfo (Packets): Clarify lack of restrictions on behavior
+	of stub when processing an 'm' packet.
+
+	* gdb.texinfo (Packets): Mention that packets beginning with
+	letters are reserved once, at the top, instead of actually listing
+	them all and saying "reserved".
+
+2005-11-15  Andrew Stubbs  <andrew.stubbs@st.com>
+
+	* gdb.texinfo (User-defined commands): Add $argc. Add missing 'end'.
+	Change @var{$arg0 to @code{$arg0.
+
+2005-11-14  Wu Zhou  <woodzltc@cn.ibm.com>
+
+	* gdb.texinfo (Fortran): Add some words about Fortran debugging.
+
+2005-11-12  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (General Query Packets): Put packets in alphabetical
+	order.  Remove extraneous 'z'.
+
+2005-11-07  Andrew Stubbs  <andrew.stubbs@st.com>
+
+	* gdb.texinfo (Choosing files): Add --eval-command.
+
+2005-11-04  Andrew Stubbs  <andrew.stubbs@st.com>
+
+	* gdb.texinfo (Choosing modes): Add --return-child-result.
+
+
+2005-11-01  Andrew Stubbs  <andrew.stubbs@st.com>
+
+	* gdb.texinfo (Choosing modes): Add --batch-silent.
+
+2005-10-28  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Fix @pxref usage under
+	"The -var-update Command".
+
+2005-10-03  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.texinfo (Print Settings): Add documentation for set/show
+	print array-indexes.
+
+2005-09-17  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.texinfo (Contributors): Thank Andrew Cagney for releases
+	6.2 and 6.3.
+
+2005-08-27  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (File Options): Don't document --mapped, it's gone
+	since 19-Jan-2004.
+	(Files): Likewise.
+	(Variables, Symbols): Document the "<incomplete type>" message and
+	its reasons.
+
+2005-08-01  Fred Fish  <fnf@specifix.com>
+
+	* gdb.texinfo (SETUP_ARBITRARY_FRAME): Remove obsolete reference.
+
+2005-07-15  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Describe print-values
+	option for -var-list-children and -var-update.
+	(GDB/MI Stack Manipulation): Simplify description of
+	print-values option for -stack-list-locals.
+	(GDB/MI Command Description Format): Clarify.
+	(Mode Options): Spelling of superseded.
+
+2005-07-12  Bob Rossi  <bob@brasko.net>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Fix -inferior-tty-show
+	corresponding GDB command comment.
+
+2005-07-06  Bob Rossi  <bob@brasko.net>
+
+	* gdb.texinfo (GDB/MI Miscellaneous Commands): Add -inferior-tty-set
+	and -inferior-tty-show.
+	(Input/Output): Document "set/show inferior-tty" and tty alias.
+
+2005-07-02  Nathan J. Williams  <nathanw@wasabisystems.com>
+
+	* gdb.texinfo (Packets): Change description of 'D' packet to note
+	that GDB does wait for a response.
+
+2005-06-22  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (History) Rename "Command History".
+	(Command History): Move node "Server Prefix" from section on
+	Annotations here.
+
+2005-06-19  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Stack Manipulation):
+	Re-instate -stack-info-frame with example.  Say that it gets
+	info on selected frame, not current frame.
+
+2005-06-18  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Server): Clarify that `file' should be used before
+	connecting to the server.
+	(Files): Add an xref to the above description.
+	(Output Formats): More detailed description of the `c' format.
+	(Memory): List explicitly all the formats supported by `x'.
+	(Threads): Add an @cindex entry for "thread apply".
+	(Files): Document the possibility of loading unlinked object
+	files.  Add more indexing for solib-absolute-prefix and
+	--with-sysroot.
+	(Machine Code): Document possible problems with locations in
+	shared libraries.
+	(Backtrace): Document that free-standing environments do not need
+	to have a `main' function.
+
+2005-06-18  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (GDB/MI Stack Manipulation): Remove reference to
+	-stack-info-frame.
+
+2005-06-07  Andrew Cagney  <cagney@gnu.org>
+
+	* gdb.texinfo (Contributors): Note the original multi-arch
+	contributors.
+
+2005-06-03  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Registers): Add index entries for the standard
+	registers.
+	(Frames): Add cross-reference from frame pointer description to
+	the Registers node.
+	(Annotations Overview): Fix the reference to GDB name.
+
+2005-06-01  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Set Watchpoints): Remove @vindex entry for
+	can-use-hw-watchpoints.
+
+2005-05-28  Bob Rossi  <bob@brasko.net>
+
+	* gdb.texinfo (GDB/MI Out-of-band Records): Add bullet enumerating
+	the possible reasons why an exec async record would be returned to FE.
+
+2005-05-26  Andrew Cagney  <cagney@gnu.org>
+
+	* gdb.texinfo: Note that Elena Zannoni, Fernando Nasser, and
+	Andrew Cagney implemented the original GDB/MI.
+
+2005-05-23  Orjan Friberg  <orjanf@axis.com>
+
+	* gdb.texinfo (CRIS): Update the cris-version and cris-dwarf2-cfi
+	documentation.  Add documentation for cris-mode.
+
+2005-05-20  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Numbers): Explain the example and make the wording
+	more acurate.
+
+2005-05-17  Daniel Jacobowitz  <dan@codesourcery.com>
+	    Dennis Brueni  <dennis@slickedit.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Table Commands)
+	(GDB/MI Data Manipulation, GDB/MI Program Control)
+	(GDB/MI Stack Manipulation): Update examples to include the fullname
+	attribute in stack frames.
+
+2005-05-12  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Startup): Fix last change.  Treat gdb.ini like we
+	do with other non-standard names of init files.
+
+2005-05-11  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Command Files): Move the description of the startup
+	from here...
+	(Startup): ...to this new subsection of the Invocation chapter.
+	Rearrange the description of init files more logically and add a
+	cross-reference to "Command Files".  Document the special gdbinit
+	name for CISCO 68k.  Expand the description of what GDB does
+	during startup.
+	(History): Add index entry for HISTSIZE.
+
+2005-05-02  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdb.texinfo (Files): Remove documentation for auto-solib-limit.
+
+2005-05-02  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (SVR4 Process Information, The isatty call)
+	(The system call): Don't use foo(N) notation for man pages and
+	functions.
+	(Compilation, DJGPP Native): Improve wording.
+
+2005-04-27  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Backtrace): Describe backtraces with arguments that
+	were optimized away.
+
+2005-04-22  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Remote configuration): Document "set/show
+	get-thread-local-storage-address".  Add cross-reference to the
+	description of the qGetTLSAddr packet.
+	(General Query Packets): Mention "set remote
+	get-thread-local-storage-address" and add a reference to its
+	description.
+
+2005-04-19  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (Backtrace): Describe 'bt full'.
+
+2005-04-17  Nick Roberts  <nickrob@snap.net.nz>
+
+	* gdb.texinfo (Mode Options): Fix typo.
+	(GDB/MI): Describe how to invoke GDB/MI.
+
+2005-04-16  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (OS Information): Renamed from Auxiliary Vector; all
+	references changed.  Add description of "info udot".
+	(Files): Document "set/show stop-on-solib-events".
+	(M32R/D): Document "set/show download-path", "set/show
+	board-address", "set/show server-address", "upload", "tload".
+	Document "sdireset", "sdistatus", "debug_chaos", "use_debug_dma",
+	"use_mon_code", "use_ib_break", "use_dbt_break".
+	(Maintenance Commands): Improve indexing.
+	(Target Commands): Document "set/show hash", "set/show debug
+	monitor".
+	(SVR4 Process Information): Document "info pidlist" and "info
+	meminfo".  Document "set/show procfs-tarce" and "set/show
+	procfs-file".  Document "proc-trace-*" and "proc-untrace-*".
+	(Symbols, The Print Command with Objective-C): Improve indexing.
+	(Objective-C): Add references to "info classes" and "info
+	selectors".
+	(Debugging Output): Improve wording.  Document "set/show debug
+	solib-frv".  Fix "set/show debugvarobj".
+	(Set Breaks): Add index entry for "hardware breakpoints".
+	(Renesas ICE): Document "e7000", "ftplogin", "ftpload", "drain",
+	and "set/show usehardbreakpoints".
+	(MIPS Embedded): Document "se/show syn-garbage-limit", "set/show
+	monitor-prompt", "set/show monitor-warnings", "pmon".
+	(ARM): Document "rdilogfile", "rdilogenable", "set/show
+	rdiromatzero", "set/show rdiheartbeat".
+	(PowerPC): Document SDS-specific commands "set/show sdstimeout",
+	"sds".
+	(Embedded Processors): Document the "sim" command.
+	(Remote): Document the "remote" command.
+	(DJGPP Native): Document the "info serial" command.
+	(Threads): Document "maint info sol-threads".
+	(Files): Document "nosharedlibrary", "add-symbol-file-from-memory".
+	(Set Breaks): Improve indexing.
+	(Command Syntax): Add a reference to dont-repeat.
+	(Define): Document "dont-repeat".
+	(TUI Commands): Document "tabset".
+	(WinCE): New subsection.  Document "set/show remotedirectory",
+	"set/show remoteupload", "set/show remoteaddhost".
+
+2005-04-15  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Hurd Native): New subsection, documents
+	Hurd-specific commands.
+	(Maintenance Commands): Add cross-reference to "Debugging Output".
+	(Debugging Output): Document "set/show debug lin-lwp".
+	(MIPS): Improve documentation of heuristic-fence-post.  Document
+	"set/show mips abi", "set/show mips saved-gpreg-size", "set/show
+	mips stack-arg-size", "set/show mips mask-address", "set/show mips
+	remote-mips64-transfers-32bit-regs", "set/show debug mips".
+	(ARM): Document ARM-specific commands.
+	(AVR): New section.  Document "info io_registers".
+	(CRIS): New section.  Document "set/show cris-version" and
+	"set/show cris-dwarf2-cfi".
+	(HPPA): New section.  Document "set/show debug hppa" and "maint
+	print unwind".
+	(Neutrino): New subsection.  Document "set/show debug nto-debug".
+	(Super-H): New section.  Document the "regs" command.
+	(Debugging Output): Document "set/show debug aix-thread".
+
+2005-04-09  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Print Settings): Document "set/show print
+	pascal_static-members", "set print repeats", "show print
+	null-stop".  Improve indexing.  Fix documentation of "set print
+	union".
+	(Pascal): New section.
+	(Supported languages): Rename from "Support"; all references
+	updated.  Add a menu item for Pascal.
+	(Numbers): Document "set radix.
+	(Screen Size): Document "set/show pagination".
+	(MIPS Embedded): Remove "set processor" documentation.
+	(Remote configuration): Document "set/show X/P/Z-packet",
+	"set/show read-aux-vector-packet", "set/show remote
+	symbol-lookup-packet", "set/show remote verbose-resume-packet",
+	"set/show remoteaddresssize", "set/show remotebaud", "set/show
+	remotedebug", "set/show remotebreak", "set/show remotedevice",
+	"set/show remotelogfile".
+	(Auxiliary Vector): Add reference to the description of the
+	read-aux-vector-packet setting.
+	(Set Watchpoints): Add a cross-reference to "set remote
+	hardware-breakpoint-limit".
+	(General Query Packets): Add indexing of requests and
+	cross-references to related commands in "Remote configuration".
+	(File-I/O Overview, The system call): Fix wording and typos.
+	(Thread Stops): Add index entries.
+	(Continuing and Stepping): Document "show step-mode".
+	(i386): New node.  Document "set/show struct-convention".
+	(Files): Document "show trust-readonly-sections".
+	(Calling): Document "set/show unwindonsignal".
+	(Messages/Warnings): Add index entries.
+	(Maintenance Commands): Document "set/show watchdog".
+	(Annotations Overview): Document "show annotate".
+	(Set Watchpoints): Add index entries.
+	(Symbols): Fix doc of case-sensitive.
+	(ABI): Document "show coerce-float-to-double".
+	(Convenience Vars, Help): Improve indexing.
+	(Machine Code): Document "show disassembly-flavor".
+	(Debugging C plus plus): Document "show overload-resolution".
+	(Value History, Signaling): Add index entries.
+
+2005-04-08  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Show): Move @kindex entries to their proper places.
+	(Processes): Fix wording.
+	(History, List, Logging output, Define, Symbols, Print Settings):
+	Improve indexing.
+
+2005-04-03  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Targets): Document "set/show architecture".  Remove
+	redundant index entry for "target" command.
+	(Backtrace): Add index entries.
+	(Symbols, Fortran): Document the "set case-sensitive" command.
+	(DJGPP Native): Document "set com1base", "set com1irq", etc.
+	(Print Settings): Add index entry for "set demangle-style".
+	(Target Commands): Document "set download-write-size".
+	(Debugging Output): Document "set exec-done-display".
+
+2005-04-02  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Files): Fix the name and documentation of
+	add-shared-symbol-files.  Document its alias assf.  Update the
+	list of OSs where GDB supports shared libraries.  Fix markup.
+	(Continuing and Stepping): Add reference to @var{location} in the
+	text.
+	(Dump/Restore Files): Fix reference to @{filename}.
+	(Help): Fix wording.
+	(Attach): Ditto.
+	(Set Watchpoints): Ditto.
+	(Backtrace): Remove redundant index entries.  Improve index
+	entries.
+	(Delete Breaks): Fix wording.
+	(Memory): Document the compare-sections command.
+	(Memory Region Attributes): Improve wording.
+	(Disabling): Improve wording.
+	(Fortran): New subsection.  Document the "info common" command.
+	(Help): Document aliases "info copying" and "info warranty".
+	(Caching Remote Data): New section.  Document the "set/show
+	remotecache" and "info dcache" commands.
+	(Show): Fix wording of the documentation of the "set
+	extension-language" command.
+	(Signals): Add index entry for "info handle".
+	(Memory Region Attributes): Fix punctuation.
+	(Symbols): Change the arg name to "location" and refer to it in
+	the text.  Fix wording of "info types" doc.
+	(Threads): Fix usage of @enumerate @item's.
+	(Listing Tracepoints): Add index entry for "info tp".
+	(Set Watchpoints): Add xref to "info break" description.
+	(Macros): Add an index entry for "macro exp1".  Document the
+	"macro list" command.
+	(Maintenance Commands): Document "flushregs", "maint agent",
+	"maint check-symtabs", "maint cplus", "maint demangle", "maint
+	deprecate", "maint undeprecate", "maint dump-me", "maint packet",
+	"maint print architecture", "maint print objfiles", "maint print
+	statistics", "maint print type", "maint show-debug-regs", "maint
+	space", "maint time", and "maint translate-address".
+	(Connecting): Document the "monitor" command.
+	(Annotations Overview): Describe the "set annotate" command.
+
+2005-04-01  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Set Watchpoints): Document can-use-hw-watchpoints.
+	Rearrange index entries and improve wording about support for
+	hardware watchpoints.
+
+2005-03-10  Bob Rossi  <bob@brasko.net>
+
+	* gdb.texinfo: Update copyright
+
+2005-02-09  Theodore A. Roth  <troth@openavr.org>
+
+	* gdb.texinfo (General Query Packets): Fix texinfo compile warning and
+	error.
+
+2005-03-07  Joel Brobecker  <brobecker@adacore.com>
+
+	* observer.texi (executable_changed): New observer.
+
+2005-02-03  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdb.texinfo (General Query Packets): Document qGetTLSAddr packet.
+
+2005-01-17  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo: Fix spelling, infinte  ->  infinite.
+
+2005-01-08  Mark Kettenis  <kettenis@gnu.org>
+
+	* observer.texi (GDB Observers): Document "solib_loaded".
+
+2005-01-07  Andrew Cagney  <cagney@gnu.org>
+
+	* configure.ac: Rename configure.in, require autoconf 2.59.
+	* configure: Re-generate.
+
+	* configure.in: Replace configdirs with multiple references to
+	AC_CONFIG_SUBDIRS.
+	* configure: Re-generate.
+
+2005-01-04  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Versions and Branches): Make the date (YYYYMMDD)
+	part of the version number.
+
+2004-12-24  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Algorithms): Remove description of
+	TARGET_DISABLE_HW_WATCHPOINTS and TARGET_ENABLE_HW_WATCHPOINTS.
+
+2004-12-07  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (General Query Packets): Specify that thread ID's in
+	the 'qC' and 'qThreadInfo' packets are unsigned hexidecimal
+	numbers.
+
+2004-12-07  Andreas Schwab  <schwab@suse.de>
+
+	* gdb.texinfo (Mode Options): Document -l option.
+
+2004-12-04  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo (Algorithms): More accurate description of
+	STOPPED_BY_WATCHPOINT.  Point out that target_stopped_data_address
+	is not needed unless data-read and data-access watchpoints are
+	supported.  Add a description of how GDB checks whether the
+	inferior stopped because a watchpoint was hit.
+
+2004-11-23  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Files): Add cross-reference to description of
+	-readnow command-line switch.
+
+2004-11-10  Randolph Chung  <tausq@debian.org>
+
+	* gdb.texinfo: Document set/show backtrace past-entry commands.
+	Rearrange index entries for set/show backtrace past-main.
+
+2004-11-10  Jon Beniston <jon@beniston.com>
+
+	Committed by Andrew Cagney  <cagney@gnu.org>.
+	* gdb.texinfo (Remote Serial Protocol): Further describe
+	binary transfer escaping mechanism .
+
+2004-11-08  Randolph Chung  <tausq@debian.org>
+
+	* gdb.texinfo (inferior_debugging info): Document "set debug infrun"
+	and "show debug infrun".  Add index entries.
+
+2004-10-23  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (SVR4 Process Information): Document subcommands of
+	"info proc" that are already implemented.  Add index entries.
+	(Working Directory): Add a cross-reference to "info proc" command.
+	(Files): Add a tip for decreasing memory used for symtabs from
+	shared libraries.
+	(Starting): Fix whitespace; make "elaboration" stand out where it
+	is first used, and add an index entry for the term.
+	(Calling): Expand and elaborate text.  Add "print".  Add the
+	description of problems with weak aliases.
+	(Core File Generation): New section.
+
+2004-10-12  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Versions and Branches): New chapter.
+	(Releasing GDB): Delete "Versions and Branches" section.
+	(Top): Add "Versions and Branches".
+
+2004-10-08  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Editing, History): Add cross-references to the
+	included Readline and History user documentation.  Remove
+	references to the symbol have-readline-appendices which is unused
+	and undefined.
+	(History): Fix indexing.
+
+2004-10-08  Jeff Johnston  <jjohnstn@redhat.com>
+
+	* gdbint.texinfo (target_stopped_data_address): Update to
+	new prototype.
+	(i386_stopped_data_address): Update prototype and description.
+	(i386_stopped_by_watchpoint): New function and description.
+
+2004-10-03  Paul N. Hilfinger  <hilfinger@gnat.com>
+
+	* gdb.texinfo (Filenames): Add Ada suffixes.
+	(Ada) New section.
+
+2004-09-27  Andrew Cagney  <cagney@gnu.org>
+	    Robert Picco  <Robert.Picco@hp.com>
+
+	* gdb.texinfo (Packets): Document the "p" packet.
+
+2004-09-21  Jason Molenda  (jmolenda@apple.com)
+
+	* gdb.texinfo (Paths and Names of the Source Files): Document the
+	meaning of values in the 'desc' field of a SO stab.
+
+2004-09-20  Daniel Jacobowitz  <dan@debian.org>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint set dwarf2
+	max-cache-age" and "maint show dwarf2 max-cache-age".
+
+2004-09-16  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Set Breaks): Add index entry for setting
+	breakpoints on overloaded C++ functions that are not members of
+	any classes.  Add an example and an index entry for setting
+	breakpoints on all program functions.
+	(Character Sets, Macros, Overlay Commands)
+	(Non-debug DLL symbols, GDB/MI Output Syntax)
+	(Annotations Overview, Maintenance Commands, File-I/O Overview):
+	Use "(@value{GDBP})" instead of a literal "(gdb)".
+
+2004-09-12  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Native Debugging): Delete description of
+	FILES_INFO_HOOK.
+
+2004-09-11  Paul Hilfinger  <hilfinger@gnat.com>
+
+	* gdbint.texinfo (User Interface): Change local_hex_string_custom
+	to hex_string_custom (not historically correct, but more
+	understandable, given the current code).
+
+2004-09-03  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Native Debugging): Delete SVR4_SHARED_LIBS.
+
+2004-09-01  Jeff Johnston  <jjohnstn@redhat.com>
+
+	* observer.texi (solib_unloaded): New observer.
+
+2004-08-24  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Add missing
+	comma.
+
+2004-08-20  Michael Chastain  <mec.gnu@mindspring.com>
+
+	* (Using the Testsuite): build != host is supported,
+	but some test scripts do not support build != host.
+
+2004-08-14  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Host Definition): Delete description of
+	FCLOSE_PROVIDED and GETENV_PROVIDED.
+
+2004-08-11  Joel Brobecker  <brobecker@gnat.com>
+
+	* gdbint.texinfo (Host Definition): Remove documentation for
+	USE_O_NOCTTY, no longer used.
+
+2004-08-05  Mark Kettenis  <kettenis@chello.nl>
+
+	* gdbint.texinfo (Host Definition): Delete description of
+	NO_SYS_FILE.
+	(Native Debugging): Delete description of KERNEL_U_ADDR_BSD and
+	PTRACE_FP_BUG.
+
+2004-08-05  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	reference to deprecated_read_fp.
+
+2004-08-02  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of DEPRECATED_REGISTER_BYTES.
+
+2004-07-30  Baurjan Ismagulov  <ibr@ata.cs.hun.edu.tr>
+
+	* gdb.texinfo (Source Path): Document the new behavior of
+	searching for the source files.
+
+2004-07-17  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Edit): Fix markup of EDITOR and improve wording.
+	(Search, Expressions, Arrays, Variables, Data, Machine Code)
+	(Auto Display): Improve indexing.
+
+2004-07-16  Andrew Cagney  <cagney@gnu.org>
+
+	* gdb.texinfo (Mode Options): Delete documentation on "-async" and
+	"-noasync".
+
+2004-07-09  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: Fix @kindex entries so that multiple commands that
+	have the same prefix have only their prefix in the index.
+
+2004-07-03  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdb.texinfo (BSD libkvm Interface): New node (section)
+	(Native): Add it to the menu.
+
+2004-07-01  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Remove
+	PCC_SOL_BROKEN.
+
+2004-06-24  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Remove
+	SUN_FIXED_LBRAC_BUG.
+
+2004-06-26  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Coding): Replace xasprintf with xstrprintf.
+
+2004-06-20  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Deprecate
+	USE_STRUCT_CONVENTION.
+
+2004-06-19  Michael Chastain  <mec.gnu@mindspring.com>
+
+	gdb.texinfo (Bug Reporting): Mention session recording,
+	with the script command or Emacs.
+
+2004-06-18  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Deprecate
+	FUNCTION_START_OFFSET.
+
+2004-06-14  Andrew Cagney  <cagney@gnu.org>
+
+	Based on changes from Karl Berry.
+	* gdb.texinfo: Do not use @sc in a direntry.
+	* stabs.texinfo: Change @dircateogry to "Software development".
+	* gdbint.texinfo, gdb.texinfo, annotate.texinfo: Ditto.
+
+2004-06-13  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of RETURN_VALUE_ON_STACK.
+
+2004-06-09  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Native Debugging): Restore "@table @code"
+	deleted by previous patch.
+
+2004-06-08  Andrew Cagney  <cagney@gnu.org>
+
+	* gdbint.texinfo (Native Debugging): Delete documentation on
+	ATTACH_DETACH.
+
+2004-06-06  Randolph Chung  <tausq@debian.org>
+
+	* gdb.texinfo (push_dummy_call): Use @code{struct value}.
+
+2004-06-06  Randolph Chung  <tausq@debian.org>
+
+	* gdb.texinfo (push_dummy_call): Update argument list to match
+	the new push_dummy_call method signature.  Describe the function
+	argument.
+
+2004-05-24  Joel Brobecker  <brobecker@gnat.com>
+
+	* gdb.texinfo (Starting): Document new start command.
+
+2004-05-21  Andrew Cagney  <cagney@redhat.com>
+
+	* observer.texi (GDB Observers): Document "inferior_created".
+
+2004-05-08  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of DO_DEFERRED_STORES.
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	references to DEPRECATED_FIX_CALL_DUMMY.
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of DEPRECATED_CALL_DUMMY_WORDS,
+	DEPRECATED_SIZEOF_CALL_DUMMY_WORDS, and CALL_DUMMY.
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of DEPRECATED_PUSH_DUMMY_FRAME.
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	reference to DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET.
+
+2004-05-07  Andrew Cagney  <cagney@redhat.com>
+
+	* observer.texi (GDB Observers): Add "Debugging" section.  Include
+	cross reference to "set/show debug observer".
+	* gdb.texinfo (Debugging Output): Document "set/show debug
+	observer".
+
+2004-05-01  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of DEPRECATED_PC_IN_SIGTRAMP.
+
+2004-04-30  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	documentation for BELIEVE_PCC_PROMOTION_TYPE, no longer defined.
+
+2004-04-30  Orjan Friberg  <orjanf@axis.com>
+
+	* observer.texi (GDB Observers): Correct spelling.
+
+2004-04-26  Orjan Friberg  <orjanf@axis.com>
+
+	* observer.texi (GDB Observers): Add target_changed event.
+
+2004-04-08  Andrew Cagney  <cagney@redhat.com>
+
+	* observer.texi (GDB Observers): Rework, provide generic observer
+	definitions and then a list of observable events.
+
+2004-04-04  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Host Definition): Delete reference to
+	NO_SIGINTERRUPT.
+
+2004-04-02  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	reference to DEPRECATED_CALL_DUMMY_LENGTH.
+
+2004-03-28  Stephane Carrez  <stcarrez@nerim.fr>
+
+	* gdb.texinfo (TUI Commands): Document tui reg commands.
+
+2004-03-26  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (TUI): Delete reference to --enable-tui.  Mention
+	"gdbtui".
+	(Mode Options): Mention "gdbtui".  Use "Text" not "Terminal".
+	(Contributors): Mention both Text and Terminal User Interface.
+
+2004-03-23  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Deprecate
+	references to SIGTRAMP_START and SIGTRAMP_END.
+
+2004-03-23  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Deprecate
+	references to PC_IN_SIGTRAMP.
+
+2004-03-19  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	reference to GDB_TARGET_IS_HPPA.
+
+2004-03-18  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Coding): Update section on gdbarch_data,
+	describe pre_init and post_init.
+
+2004-03-09  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Debugging Output): Document values for "set debug
+	target".
+
+2004-02-28  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Contributors): Mention GDB 6.1 release engineer.
+
+2004-02-26  Jeff Johnston  <jjohnstn@redhat.com>
+
+	* gdb.texinfo (breakpoints): Add information about the
+	new "set breakpoint pending" and "show breakpoint pending"
+	commands.
+
+2004-02-26  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Coding): Document use of gdbarch_obstack_zalloc
+	in Per-architecture module data section.
+
+2004-02-25  Roland McGrath  <roland@redhat.com>
+
+	* gdb.texinfo (General Query Packets): Document qPart:... packets.
+
+2004-02-24  Andrew Cagney  <cagney@redhat.com>
+
+	* annotate.texinfo: Wrap fdl.texi include in raise/lower sections.
+	* gdb.texinfo, gdbint.texinfo, stabs.texinfo: Ditto.
+	* fdl.texi: Import Version 1.2, November 2002.
+
+2004-02-17  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Mode Options): Note that "mi1" is deprecated.
+
+2004-02-16  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Deprecate
+	FRAMELESS_FUNCTION_INVOCATION.
+
+2004-02-16  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Coding): Mention -Wunused-function.
+
+2004-02-14  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of DEPRECATED_CALL_DUMMY_STACK_ADJUST.
+
+2004-02-12  Elena Zannoni  <ezannoni@redhat.com>
+
+	* gdb.texinfo: Properly quote the name "C++".
+	* gdbint.texinfo: Ditto.
+	* stabs.texinfo: Ditto.
+
+2004-02-11  Elena Zannoni  <ezannoni@redhat.com>
+
+	* gdbint.texinfo (Support Libraries): Add doco about obstacks and
+	minimal information about libiberty.
+
+2004-02-06  Michael Chastain  <mec.gnu@mindspring.com>
+
+	* gdb.texinfo (Auxiliary Vector): Fix thinko with @value{GDBN}.
+
+2004-02-04  Roland McGrath  <roland@redhat.com>
+
+	* gdb.texinfo (Auxiliary Vector): New node (section).
+	(Data): Add it to the menu.
+
+2004-02-02  Jeff Johnston  <jjohnstn@redhat.com>
+
+	* gdb.texinfo (Breakpoints): Add information about pending
+	breakpoint support.
+
+2004-01-26  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Overview): Delete references to the cisco protocol
+	including the "N" response.
+
+2004-01-26  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Rename
+	EXTRACT_STRUCT_VALUE_ADDRESS to
+	DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS.
+
+2004-01-24  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (KOD): Document "show os".  Add index entries for
+	"set/show os" and "info cisco" commands.
+
+2004-01-21  Eli Zaretskii  <eliz@gnu.org>
+
+	* Makefile.in (install-info): Prepend $(DESTDIR) to $(infodir).
+
+2004-01-19  Michael Chastain  <mec.gnu@mindspring.com>
+
+	* gdbint.texinfo: Delete USE_MMALLOC, NO_MMCHECK, MMCHECK_FORCE,
+	MMAP_BASE_ADDRESS, MMAP_INCREMENT.
+
+2004-01-19  Nick Roberts  <nick@nick.uklinux.net>
+
+	* gdb.texinfo (GDB/MI Stack Manipulation): Describe extension to
+	-stack-list-locals.
+	(GDB/MI Variable Objects): Describe extension to
+	-var-list-children.
+
+2004-01-17  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdbint.texinfo (DECR_PC_AFTER_HW_BREAK): Don't document.
+
+2004-01-17  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	documentation on DEPRECATED_NPC_REGNUM.
+
+2004-01-13  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo: Update copyright year.  Mention that set
+	follow-fork-mode is supported on GNU/Linux.  Remove documentation of
+	"set follow-fork-mode ask".
+
+2004-01-13  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo: Update copyright year.
+	(Coding): Add -Wunused-label to list of -Werror warnings.
+
+2004-01-08  Jason Molenda  <jmolenda@apple.com>
+	    Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: Update copyright.
+	(Objective-C): "methodName" typeo fixed.  Add @code/@var markup
+	around names, as appropriate.  Minor syntax cleanup of
+	_NSPrintForDebugger explanation.  Two spaces after periods.
+	GDBN used instead of lit. "gdb".  Index entries added for
+	print-object and _NSPrintForDebugger.  @noindent added in one spot.
+
+2003-11-11  Elena Zannoni  <ezannoni@redhat.com>
+
+	* stabs.texinfo: Add dircategory and direntry commands.
+	* annotate.texinfo: Ditto.
+
+2003-11-10  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace the
+	return_value method's "inval" and "outval" parameters with
+	"readbuf" and "writebuf".
+
+2003-10-28  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (The F request packet, The F reply packet): Renamed
+	from "The `F' request packet" and "The `F' reply packet", to make
+	texi2dvi happy.
+	(File-I/O remote protocol extension): Update menu entries, too.
+
+2003-10-26  Michael Chastain  <mec@shout.net>
+
+	* gdb.texinfo (Thread Stops): Document the issue with
+	premature return from system calls in multi-threaded programs.
+
+2003-10-24  Andrew Cagney  <cagney@redhat.com>
+
+	* annotate.texinfo: Fix "fortunatly"[sic].
+
+2003-10-23  Kei Sakamoto  <sakamoto.kei@renesas.com>
+
+	* gdb.texinfo (Contributors to GDB): Replace "Renesas"
+	with "Hitachi" and "Mitsubishi".
+
+2003-10-20  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	gdbarch_return_value.  Add cross references from
+	USE_STRUCT_CONVENTION, EXTRACT_RETURN_VALUE, and
+	STORE_RETURN_VALUE, and from/to EXTRACT_STRUCT_VALUE_ADDRESS.
+
+2003-10-18  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	regset_from_core_section.
+
+2003-10-16  Kei Sakamot Sakamoto  <sakamoto.kei@renesas.com>
+
+	* gdb.texinfo (M32R/D): Mention m32rsdi target.
+
+2003-10-15  Kevin Buettner  <kevinb@redhat.com>
+
+	From Anthony Green  <green@redhat.com>:
+	* gdb.texinfo (Breakpoints related warnings): Insert into menu.
+
+2003-10-14  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdb.texinfo (Breakpoint related warnings): New node.
+	* gdbint.texinfo (ADJUST_BREAKPOINT_ADDRESS): Document.
+
+2003-10-13  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Remote Protocol): Document v and vCont.
+
+2003-10-10  Kei Sakamoto  <sakamoto.kei@renesas.com>
+
+	* gdb.texinfo: Replace "Hitachi" and "Mitsubishi" with "Renesas".
+	* gdbint.texinfo: Ditto.
+
+2003-10-09  Andrew Cagney  <cagney@redhat.com>
+
+	From 2003-09-18 David Anderson <davea@sgi.com>:
+	* gdb.texinfo (GDB/MI Symbol Query): Replace "comamnd" with
+	"command".
+
+2003-10-03  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Deprecate
+	IBM6000_TARGET.  Mention that it implies an RS/6000 system and not
+	just target.
+
+2003-10-02  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Rename
+	REGISTER_RAW_SIZE to DEPRECATED_REGISTER_RAW_SIZE.
+	* gdb.texinfo (Packets, Stop Reply Packets): Ditto.
+	* gdbint.texinfo (Target Architecture Definition): Rename
+
+2003-09-30  Andrew Cagney  <cagney@redhat.com>
+
+	REGISTER_VIRTUAL_SIZE to DEPRECATED_REGISTER_VIRTUAL_SIZE.
+	(Target Architecture Definition):
+
+	* gdbint.texinfo (Target Architecture Definition): Rename
+	REGISTER_VIRTUAL_TYPE to DEPRECATED_REGISTER_VIRTUAL_TYPE.
+
+2003-09-29  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	documentation for NEED_TEXT_START_END.
+
+	* gdbint.texinfo (Target Architecture Definition): Rename
+	NPC_REGNUM to DEPRECATED_NPC_REGNUM.  Add cross reference to
+	TARGET_WRITE_PC.
+
+2003-09-22  Michael Chastain  <mec@shout.net>
+
+	* gdbint.texinfo (Testsuite Organization): Change gdb.c++ to gdb.cp.
+
+2003-09-21  Anthony Green  <green@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Fix typos.
+
+2003-09-21  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	stabs_argument_has_addr.
+
+2003-09-18  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	documentation on REGISTER_NAMES.
+
+2003-09-13  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	REG_STRUCT_HAS_ADDR with DEPRECATED_REG_STRUCT_HAS_ADDR.
+
+2003-09-11  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	STACK_ALIGN with DEPRECATED_STACK_ALIGN.
+
+2003-08-18  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	"frame_red_zone_size".
+
+2003-08-09  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Backtrace): Replace "set/show backtrace-below-main"
+	with "set/show backtrace past-main" and "set/show backtrace
+	limit".
+
+2003-08-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* Makefile.in (install-info): Support DESTDIR.
+	(install-html): Likewise.
+
+2003-08-07  Andrew Cagney  <cagney@redhat.com>
+
+	Patch from Nick Roberts.
+	* gdb.texinfo (Using GDB under GNU Emacs): Fix/update key
+	bindings.  Remove description of send-gdb-command.
+
+2003-08-07  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Mode Options): Mention that "mi2" was included in
+	GDB 6.0.
+
+2003-08-06  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Mode Options): Mention that level three is the
+	highest available and that level 2 is deprecated.
+	(Annotations Overview): Mention annotation levels. Cross reference
+	to "Limitations of the Annotation Interface" in annotate.texi.
+	(TODO, Value Annotations, Frame Annotations): Delete section.
+	(Displays, Breakpoint Info): Delete.
+
+2003-08-04  Andrew Cagney  <cagney@redhat.com>
+
+	* agentexpr.texi: Delete @bye.
+	* Makefile.in (STABS_DOC_SOURCE_INCLUDES): Add "fdl.texi"
+	(stabs.info): Add $(srcdir) to include search path.
+	(html): Depend on "annotate_toc.html", and not "annotate.html".
+	* stabs.texinfo: Ditto.  Include "fdl.texi".
+	* gdbint.texinfo: Update copyright statement's list of invariant
+	sections.
+
+2003-07-28  Andrew Cagney  <cagney@redhat.com>
+
+	* Makefile.in (INFO_DEPS): Add annotate.info.
+	(dvi, ps, html, pdf): Add annotate.
+	(ANNOTATE_DOC_SOURCE_INCLUDES): New macro.
+	(ANNOTATE_DOC_BUILD_INCLUDES): New macro.
+	(ANNOTATE_DOC_FILES): New macro.
+	(ANNOTATE_TEX_TMPS): New macro.
+	(annotate.info, annotate_toc.html): Specify dependencies.
+	(annotate.ps, annotate.pdf, annotate.dvi): Ditto.
+	* annotate.texinfo: Rename annotate.texi.  Get building.  Add
+	"Migrating to GDB/MI" and "Limitations of the Annotation
+	Interface" chapters.  Mention why it is not part of the user
+	guide.  Update copyright notice.  Include "fdl.texi".
+
+2003-07-26  Stephane Carrez  <stcarrez@nerim.fr>
+
+	* gdb.texinfo (TUI Keys): Document C-x o key to switch active window.
+
+2003-07-24  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdbint.texinfo (libgdb components): Correct a GDB to GDBN.
+
+2003-07-24  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Server): Mention pidof.
+
+2003-07-22  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Coding): Add -Wformat-nonliteral to -Werror
+	list.
+
+2003-06-28  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Logging output): New chapter.
+
+2003-06-24  Joel Brobecker  <brobecker@gnat.com>
+
+	* gdb.texinfo (Unsupported languages): New section.
+	(Languages): Add link to new section.
+
+2003-06-22  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Contributors): Mention 6.0 release engineer.
+
+2003-06-22  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdbint.texinfo (Coding): Clarify use of gdb_XXX.h headers.
+
+2003-06-22  Daniel Jacobowitz  <drow@mvista.com>
+
+	* Makefile.in (SFILES_INCLUDED): Add agentexpr.texi.
+	* agentexpr.texi: Retitle section, and change it to an appendix.
+	Comment out texinfo initialization.  Factor a @var{} into two
+	pieces to prevent makeinfo warnings.
+	* gdb.texinfo: Add Agent Expressions appendix.
+
+2003-06-19  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdbint.texinfo (Native Conditionals): Remove PREPARE_TO_PROCEED.
+
+2003-06-18  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Remote Debugging): New section "Connecting to a
+	remote target".  Document the "detach" and "disconnect" commands.
+	(Server, Netware, Debug Session): Reference "Connecting to a
+	remote target".
+	(GDB/MI Target Manipulation): Document "-target-disconnect".
+
+2003-06-13  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Deprecate
+	REMOTE_BREAKPOINT, LITTLE_REMOTE_BREAKPOINT, and
+	BIG_REMOTE_BREAKPOINT.  Cross reference BREAKPOINT_FROM_PC.
+
+2003-06-09  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Separate Debug Files): Remove extra semicolon.
+
+2003-06-08  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	documentation on FRAME_ARGS_ADDRESS_CORRECT.
+
+2003-06-08  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	"unwind_sp".  Cross reference "unwind_sp" and TARGET_READ_SP.
+
+2003-06-07  Adam Fedor  <fedor@gnu.org>
+
+	* gdb.texinfo: Add Objective-C documentation.
+
+2003-06-01  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Add "func_addr"
+	parameter to "push_dummy_call".  Rename "dummy_addr" to "bp_addr".
+
+2003-05-21  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	references to "extract_address" and "store_address".
+
+2003-05-16  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	REGISTER_BYTES with DEPRECATED_REGISTER_BYTES.  Fix typo,
+	DEPRECATED_REGISTER_SIZE instead of REGISTER_BYTE.
+
+2003-05-14  Theodore A. Roth  <troth@openavr.org>
+
+	* gdbint.texinfo (Breakpoint Handling): Correct a double negative.
+
+2003-05-10  H.J. Lu <hongjiu.lu@intel.com>
+
+	* Makefile.in (gdb-cfg.texi): Replace $$LN_S with $(LN_S).
+	(gdb.dvi): Likewise.
+	(gdb.pdf): Likewise.
+	(links2roff): Likewise.
+
+2003-05-08  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Dump/Restore Files): Update documentation for
+	'dump', 'append', and 'restore': note that format argument is
+	optional; simplify presentation of the command variants; and be
+	more precise about the formats.
+
+2003-05-07  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Symbols): Update documentation: 'maint list
+	symtabs' and 'maint list psymtabs' have been renamed 'maint info
+	symtabs' and 'maint info psymtabs'.
+
+2003-05-05  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Make
+	CALL_DUMMY_WORDS, SIZEOF_CALL_DUMMY_WORDS, CALL_DUMMY_LENGTH,
+	FIX_CALL_DUMMY, CALL_DUMMY_BREAKPOINT_OFFSET and
+	CALL_DUMMY_BREAKPOINT_OFFSET deprecated.
+
+2003-05-04  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint print
+	dummy-frames".
+
+2003-05-04  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (GDB/MI Symbol Query): Use @{ and @}.
+
+2003-05-03  J. Brobecker  <brobecker@gnat.com>
+
+	Thierry Schneider  <tpschneider1@yahoo.com>
+	* gdb.texinfo (section GDB/MI Symbol Query): Add documentation
+	for new MI command.
+
+2003-05-03  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	push_dummy_code.  Add cross references.
+
+2003-05-02  Elena Zannoni  <ezannoni@redhat.com>
+
+	* gdb.texinfo (Character Sets): Update to reflect new behavior of
+	set/show charsets commands.
+
+2003-04-28  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	read_fp, TARGET_READ_FP and FP_REGNUM, with deprecated_read_fp,
+	DEPRECATED_TARGET_READ_FP and DEPRECATED_REGNUM.
+
+2003-04-28  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Rename
+	"tm_print_insn" to "deprecated_tm_print_insn".
+
+2003-04-09  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Symbols): Document 'maint list symtabs' and 'maint
+	list psymtabs'.
+
+2003-04-08  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	references to EXTRA_FRAME_INFO.
+
+2003-04-08  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	PRINT_TYPELESS_INTEGER.
+
+2003-04-02  J. Brobecker  <brobecker@gnat.com>
+
+	* observer.texi (GDB Observers): Adjust the documentation for the
+	normal_stop notification to better describe reality. Fix a couple
+	of minor typos.
+
+2003-04-02  Bob Rossi  <bob_rossi@cox.net>
+
+	* gdb.texinfo (GDB/MI Program Control): Add
+	'-file-list-exec-source-file'
+
+2003-03-31  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	references to CALL_DUMMY_P.
+
+2003-03-30  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Remove
+	reference to TARGET_WRITE_SP.
+
+2003-03-27  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Remove
+	references to write_sp.
+
+2003-03-27  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Replace @include with
+	chapter body.  Use @smallexample instead of @example.
+	(Annotations): Ditto.
+	* Makefile.in (GDB_DOC_SOURCE_INCLUDES): Remove gdbmi.texinfo and
+	annotate.texi.
+
+2003-03-26  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	PUSH_ARGUMENTS with push_dummy_call, add gdbarch, regcache and
+	dummy_addr parameters.
+
+2003-03-25  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	reference to CALL_DUMMY_STACK_ADJUST_P.  Rename
+	CALL_DUMMY_STACK_ADJUST to DEPRECATED_CALL_DUMMY_STACK_ADJUST.
+	Add reference to PUSH_ARGUMENTS.
+
+2003-03-23  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Algorithms, Target Architecture Definition):
+	Deprecate FRAME_CHAIN and FRAME_CHAIN_VALID.
+
+2003-03-18  J. Brobecker  <brobecker@gnat.com>
+
+	* gdbint.texinfo (Algorithms): Add new section describing the
+	Observer paradigm.
+	(Top): Add menu entry to new observer appendix.
+	* observer.texi: New file.
+	* Makefile.in (GDBINT_DOC_SOURCE_INCLUDES): Add dependency on
+	new observer.texi file.
+
+2003-03-17  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (DATE): Delete.  Remove date from titles.  Mention
+	that GNU Press update the manual version number.
+
+2003-03-12  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	references to get_saved_register.  Rename GET_SAVED_REGISTER to
+	DEPRECATED_GET_SAVED_REGISTER.
+
+2003-03-13  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	POP_FRAME with DEPRECATED_POP_FRAME.  Update description.
+
+2003-03-12  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Rename
+	FRAME_SAVED_PC to DEPRECATED_FRAME_SAVED_PC.
+
+2003-03-10  Corinna Vinschen  <vinschen@redhat.com>
+
+	* gdb.texinfo: Add File-I/O documentation.
+
+2003-03-10  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Cross reference
+	FRAME_SAVED_PC to unwind_pc.  Document unwind_pc.
+
+2003-03-07  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo (Debugging Output): Mention the "set/show debug
+	frame" command.
+
+2003-03-05  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	unwind_dummy_id.  Cross reference unwind_dummy_id and
+	SAVE_DUMMY_FRAME_TOS.
+
+2003-03-05  James Ingham <jingham@apple.com>
+	    Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Configuring the current ABI): Document "set cp-abi"
+	and "show cp-abi".
+
+2003-03-03  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	register_type.
+
+2003-03-03  Andrew Cagney  <cagney@redhat.com>
+
+	* stabs.texinfo (Structures): Use @samp and separate @var's
+	instead of a single @var containing a comma separated list.
+	(Unions): Ditto.
+
+2003-03-02  Daniel Jacobowitz  <drow@mvista.com>
+
+	* Makefile.in (distclean): Remove config.log.
+
+2003-03-01  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Rename
+	FRAME_INIT_SAVED_REGS to DEPRECATED_FRAME_INIT_SAVED_REGS.
+
+2003-03-01  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo: Rename INIT_EXTRA_FRAME_INFO to
+	DEPRECATED_INIT_EXTRA_FRAME_INFO.
+
+2003-02-23  Raoul Gough  <RaoulGough@yahoo.co.uk>
+
+	* gdb.texinfo (Cygwin Native): Links to Non-debug DLL symbols.
+	(Non-debug DLL symbols): New node, describing the minimal symbols
+	loaded from DLLs without real debugging symbols.
+
+2003-02-20  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Set Breaks): Add cross reference to "set remote
+	hardware-breakpoint-limit".
+	(Set Watchpoints): Add cross reference to "set remote
+	hardware-watchpoint-limit".
+	(Remote configuration options): New section.
+
+2003-02-04  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	descrption of IS_TRAPPED_INTERNALVAR.
+
+	From Keith Seitz <keiths@redhat.com>:
+	* gdb.texinfo (Interpreters): New chapter.  Refer the command-line
+	option "-i"/"--interpreter" to this chapter.  Include index
+	entries.
+
+2003-02-04  David Carlton  <carlton@math.stanford.edu>
+
+	* gdb.texinfo (C@t{++}): Recommend DWARF 2, then stabs+.
+	(Variables): Recommend stabs+ and DWARF 2.
+	(C plus plus expressions): Correct info about
+	compiler versions, debug formats.
+	(Contributors): Change 'DWARF2' to 'DWARF 2'.
+	PR symtab/874.
+
+2003-02-01  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of ADDITIONAL_OPTIONS, ADDITIONAL_OPTION_CASES,
+	ADDITIONAL_OPTION_HANDLER, and ADDITIONAL_OPTION_HELP, and
+	BEFORE_MAIN_LOOP_HOOK, and DBX_PARM_SYMBOL_CLASS along with
+	references to nindy and i960.
+	* gdb.texinfo (i960): Delete all references to i960 and nindy.
+
+2003-02-01  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	FLOAT_INFO.
+
+2003-01-30  Andrew Cagney  <ac131313@redhat.com>
+
+	* stabs.texinfo (Member Type Descriptor): Clarify description of
+	`@'.  Suggested by Ben Hutchings.
+
+2003-01-29  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (M68K): Delete reference to es1800.
+
+2003-01-29  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document `maint print
+	reggroups' and `maint print register-groups'.
+	* gdbint.texinfo (Target Architecture Definition): Document
+	register_reggroup_p.
+
+2003-01-23  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Separate Debug Files): New section.
+
+2003-01-22  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Maintenance Commands): Add "maint set profile"
+	and "maint show profile".
+
+2003-01-16  Michael Chastain  <mec@shout.net>
+
+	* gdb.texinfo (Installing GDB): Warn against
+	".../gdb-VERSION/gdb/configure".
+	(Separate Objdir): Likewise.
+
+2003-01-15  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	definition of PRINT_REGISTER_HOOK.
+
+2003-01-15  Elena Zannoni  <ezannoni@redhat.com>
+
+	(OpenRISC 1000): Fix formatting of command names.
+
+2003-01-15  Elena Zannoni  <ezannoni@redhat.com>
+
+	* gdb.texinfo (Continuing and Stepping): Add new command
+	'advance'. Clarify behavior of 'until'.
+
+2003-01-13  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Files): Document solib-absolute-prefix and
+	solib-search-path.
+
+2003-01-09  Michael Chastain  <mec@shout.net>
+
+	* gdbint.texinfo (Configuring @value{GDBN} for Release): Delete.
+	(Create a Release): Add new instructions for new @file{src-release}.
+	Document existing instructions for @file{Makefile.in} as
+	being for @value{GDBN} 5.3.1 or earlier.
+
+2003-01-09  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Mention
+	frame_saved_regs_zalloc and frame_extra_info_zalloc as the way to
+	allocate memory.
+
+2003-01-04  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Controlling GDB): Add @kindex for
+	"show osabi".
+	(Backtraces): Add @kindex's for backtrace-below-main.
+
+2003-01-04  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Controlling GDB): Document "set osabi".
+
+2003-01-04  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Backtraces): Document "set backtrace-below-main".
+	* gdbint.texinfo (FRAME_CHAIN_VALID): Update documentation.
+
+2003-01-04  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Controlling GDB): Add ABI section.  Document
+	"set coerce-float-to-double".
+	* gdbint.texinfo (COERCE_FLOAT_TO_DOUBLE): Remove documentation.
+
+2003-01-02  Andrew Cagney  <ac131313@redhat.com>
+
+	* stabs.texinfo: Remove obsolete text.
+	* gdbint.texinfo: Ditto.
+	* gdb.texinfo: Ditto.
+
+2002-12-29  Kazu Hirata  <kazu@cs.umass.edu>
+
+	* fdl.texi: Revert the last change.
+
+2002-12-22  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Update
+	description of gdbarch_register_osabi.
+
+2002-12-20  Kazu Hirata  <kazu@cs.umass.edu>
+
+	* agentexpr.texi: Fix typos.
+	* annotate.texi: Likewise.
+	* fdl.texi: Likewise.
+
+2002-12-10  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Algorithms): Replace INIT_FRAME_PC with
+	DEPRECATED_INIT_FRAME_PC.
+
+2002-12-01  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	PC_IN_CALL_DUMMY.
+
+2002-11-28  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Host Definition): Delete documentation on
+	USE_GENERIC_DUMMY_FRAMES.
+
+2002-11-26  Elena Zannoni  <ezannoni@redhat.com>
+
+	Fix PR gdb/723 and PR gdb/245.
+	* Makefile.in (install-info): Run the install-info command as part
+	of the post install steps only.
+	(uninstall-info): New target.
+	(uninstall): New target.
+
+2002-11-22  Elena Zannoni  <ezannoni@redhat.com>
+
+	* Makefile.in (install): Make install do some real work.
+
+2002-11-19  Andrew Cagney  <ac131313@redhat.com>
+
+	Fix POSIX problem reported by Paul Eggert.
+	* Makefile.in (GDBvn.texi): Use `sed q' instead of `head -1'.
+	Fix PR gdb/527.
+
+2002-10-26  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	definition of DO_REGISTERS_INFO.
+
+2002-10-18  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdbint.texinfo (Address Classes): Fix problems with insertion
+	of ``{'' and ``}'' in example.
+
+2002-10-17  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdbint.texinfo (Address Classes): New section.
+	(Target Conditionals): Document ADDRESS_CLASS_NAME_TO_TYPE_FLAGS,
+	ADDRESS_CLASS_NAME_TO_TYPE_FLAGS_P, ADDRESS_CLASS_TYPE_FLAGS,
+	ADDRESS_CLASS_TYPE_FLAGS_P, ADDRESS_CLASS_TYPE_FLAGS_TO_NAME, and
+	ADDRESS_CLASS_TYPE_FLAGS_TO_NAME_P.
+
+2002-10-11  Klee Dienes  <kdienes@apple.com>
+
+	* gdb.texinfo (Registers): Mention vector registers as well as
+	floating registers in the documentation for 'info registers' and
+	'info all-registers'.
+
+2002-10-11  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdbint.texinfo (CPLUS_MARKER): Remove item.
+
+2002-10-03  Jeff Johnston  <jjohnstn@redhat.com>
+
+	* gdbint.texinfo (Item Output Functions): Add new ui_out_field_fmt_int
+	interface definition.
+
+2002-10-03  Marko Mlinar   <markom@opencores.org>
+
+	* gdb.texinfo (Target Commands): Add or1k target specific
+	commands.
+	* gdb.texinfo (Contributors): Add myself to the contributors list.
+
+2002-10-01  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Mode Options): Update --interpreter option.  "mi2"
+	and "mi1" instead of "mi1" and "mi0".
+
+2002-09-29  Hans-Peter Nilsson  <hp@bitrange.com>
+
+	* gdb.texinfo (Packets): Fix typos "alligned".
+	Correct z3/Z3 description.  Correct z4/Z4 title.
+
+2002-09-27  Andrew Cagney  <ac131313@redhat.com>
+
+	* all-cfg.texi: Use @sc for GDB and GCC.  Update copyright.
+
+2002-09-25  Kevin Buettner  <kevinb@redhat.com>
+
+	* gdb.texinfo: Use GNU/Linux instead of Linux.
+
+2002-09-25  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Packets): Replace @samp{} with ``an empty string''.
+
+2002-09-24  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo: Replace @example with @smallexample.
+
+2002-09-20  Kevin Buettner  <kevinb@redhat.com>
+
+	From Eli Zaretskii  <eliz@gnu.org>:
+	* gdb.texinfo (Character Sets): Use @smallexample instead of
+	@example.  Use GNU/Linux instead of Linux.
+
+2002-09-20  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo: Add character set documentation.
+
+2002-09-20  George Helffrich  <george@gly.bris.ac.uk>
+
+	* gdb.texinfo: Document edit command.
+
+2002-09-19  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Packets): Revise `z' and `Z' packet documentation.
+	(Packets): Add cross reference from `b' packet to `z' packets.
+
+2002-09-19  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document ``maint
+	internal-error'' and ``maint internal-warning''.
+
+	* gdbint.texinfo (Target Architecture Definition): Revise
+	description of STACK_ALIGN.  Add description of FRAME_ALIGN.
+
+2002-09-19  Joel Brobecker  <brobecker@gnat.com>
+
+	* gdbint.texinfo (Target Conditionals): Document the new
+	NAME_OF_MALLOC macro.
+
+2002-09-05  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Contributors): Mention 5.2 and 5.3 release
+	engineer.
+
+2002-09-02  Stephane Carrez  <stcarrez@nerim.fr>
+
+	* gdb.texinfo (TUI Overview): Document status line fields.
+
+2002-09-02  Stephane Carrez  <stcarrez@nerim.fr>
+
+	* gdb.texinfo (TUI Commands): Document info win command.
+
+2002-09-01  Stephane Carrez  <stcarrez@nerim.fr>
+
+	* gdb.texinfo (TUI Overview): Document breakpoint markers.
+
+2002-09-01  Stephane Carrez  <stcarrez@nerim.fr>
+
+	* gdb.texinfo (TUI Single Key Mode): Document new SingleKey mode.
+	(TUI Keys): Likewise.
+
+2002-08-25  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Examples): Use ``->'' for a packet send and ``<-''
+	for a packet receive.
+
+2002-08-25  Andrew Cagney  <ac131313@redhat.com>
+
+	* Makefile.in (clean): Move to end of file.
+	(distclean, maintainer-clean, realclean): Ditto.
+	(mostlyclean): Move rule to end of file.  Use GDB_TEX_TMPS,
+	GDBINT_TEX_TMPS, STABS_TEX_TMPS.
+	(gdb.dvi, gdb.pdf): Do not cleanup TeX temp files after texi2dvi.
+	(gdbint.dvi, gdbint.pdf, stabs.dvi, stabs.pdf): Ditto.
+
+2002-08-24  Andrew Cagney  <ac131313@redhat.com>
+
+	* Makefile.in (GDBINT_TEX_TMPS): Define.
+	(gdbint.dvi, gdbint.pdf): Use
+	(GDB_TEX_TMPS): Define.
+	(gdb.dvi, gdb.pdf): Use.
+	(STABS_TEX_TMPS): Define.
+	(stabs.dvi, stabs.pdf): Use.
+	(GDB_DOC_SOURCE_INCLUDES): New macros.
+	(GDB_DOC_BUILD_INCLUDES, GDB_DOC_FILES): New macros.
+	(GDBINT_DOC_FILES_INCLUDES): New macros.
+	(GDBINT_DOC_BUILD_INCLUDES): New macros.
+	(GDBINT_DOC_FILES, STABS_DOC_SOURCE_INCLUDES): New macros.
+	(STABS_DOC_BUILD_INCLUDES, STABS_DOC_FILES): New macros.
+	(SFILES_DOC, SFILES_INCLUDED, SFILES_LOCAL): Delete macros.
+	(links2roff): Replace SFILES_INCLUDED with
+	GDB_DOC_SOURCE_INCLUDES.
+	(gdb.dvi, gdb_toc.html, gdb.pdf, gdb.info): Update dependencies.
+	(gdb.me, gdb.mm, gdb.ms): Update dependencies.
+	(gdbint.dvi, gdbint_toc.html, gdbint.pdf, gdbint.info): Update
+	dependencies.
+	(stabs.info, stabs_toc.html, stabs.pdf, stabs.dvi): Update
+	dependencies.
+	(gdbmi.texinfo): Delete rule.
+	(inc-hist.texinfo): Delete rule.
+	(rluser.texinfo): Delete rule.
+
+2002-08-23  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Update
+	STORE_RETURN_VALUE, mention regcache.
+
+2002-08-21  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	print_registers_info.  Note that DO_REGISTERS_INFO is deprecated.
+
+2002-08-19  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Remote Protocol): Reformat.  Use cross references.
+	Fix minor typos.  Add index entries.
+
+2002-08-18  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Data): Add ``Vector Unit'' to menu.
+
+2002-08-15  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	PRINT_VECTOR_INFO.
+	* gdb.texinfo (Vector Unit): Document "info vectors" command.
+
+2002-08-13  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Document "maint print
+	registers", "maint print raw-registers" and "maint print
+	cooked-registers".
+
+2002-08-08  Grace Sainsbury  <graces@redhat.com>
+
+	From Mark Salter:
+	* gdb.texinfo (Protocol): Document T packet extension to
+	allow watchpoint address reporting.
+
+2002-08-03  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Dump/Restore Files): Move `[]' to outside of @var.
+
+2002-08-01  Andrew Cagney  <cagney@redhat.com>
+
+	* stabs.texinfo, gdb.texinfo, gdbint.texinfo: Obsolete references
+	to CHILL.
+
+2002-08-01  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Coding): Revise section "Include Files".
+
+2002-07-24  Andrew Cagney  <cagney@redhat.com>
+
+	* gdbint.texinfo: Obsolete references to m88k.
+	* gdb.texinfo: Ditto.
+
+2002-07-10  Joel Brobecker  <brobecker@gnat.com>
+
+	* gdbint.texinfo (Create a release candiate): Add the location
+	where the proper version of autoconf can be retrieved.
+
+2002-07-09  Don Howard  <dhoward@redhat.com>
+
+	* gdb.texinfo (Command Files): Further describe the behavior of
+	sourced command files.
+
+2002-06-27  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (User Interface): ISO C rather than ISO-C.
+	(Coding): Clarify ISO C version that GDB assumes.
+
+2002-06-26  Tom Tromey  <tromey@redhat.com>
+
+	* gdbint.texinfo (User Interface): Mention add_setshow_cmd and
+	add_setshow_cmd_full.
+
+2002-06-25  Don Howard  <dhoward@redhat.com>
+
+	* gdb.texinfo (Memory Region Attributes): Document new behavior
+	for 'mem' command.
+
+2002-06-11  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Symbols): Update documentation for `info source'
+	command.
+
+	* gdb.texinfo (Macros): Call the command `info macro', not
+	`show macro'.
+
+2002-06-09  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Coding): Add section ``Per-architecture module
+	data''.
+
+2002-06-09  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	GDB_OSABI_GO32 and GDB_OSABI_NETWARE.
+
+2002-06-08  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Releasing GDB): Fix typos in @itemize @bullet
+	lists.
+
+2002-06-08  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Releasing GDB): Revise the section ``Cut the
+	Branch''.
+
+2002-06-01  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Add section
+	``Converting an existing Target Architecture to Multi-arch''.
+
+2002-05-30  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Releasing GDB): Rename ``Obsoleting any code''
+	to ``Obsoleting code''.  Revise.
+
+2002-05-21  Jason Thorpe  <thorpej@wasabisystems.com>
+
+	* gdbint.texinfo: Document new generic OS ABI framework.
+
+2002-05-17  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (C Preprocessor Macros): New chapter.
+	Include it in the main menu.
+	(Contributors): Credit Jim Blandy with macro support.
+	(Compilation): Explain how to get macro information into the
+	executable.
+	(Expressions): Note that preprocessor macros are expanded.
+
+2002-05-14  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo (Debug Session): Document new `udp:' and `tcp:'
+	options for `target remote'.
+
+2002-05-13  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	documentation on NNPC_REGNUM.
+
+2002-05-11  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document
+	REGISTER_TO_VALUE and VALUE_TO_REGISTER and CONVERT_REGISTER_P.
+	(Target Architecture Definition): Revise section `Using Different
+	Register and Memory Data Representations'.  Add section `Raw and
+	Virtual Register Representations'.
+
+2002-05-11  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Mention
+	defaults for REGISTER_VIRTUAL_SIZE and REGISTER_RAW_SIZE.
+	(Target Architecture Definition): Mention same.  Add references to
+	web pages.
+
+2002-05-08  Michael Snyder  <msnyder@redhat.com>
+
+	* stabs.texinfo (Attributes): Document new "vector" attribute.
+
+2002-05-04  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Releasing GDB): Revise `Create a Release'.
+
+2002-05-04  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo: Delete obsolete references to a29k.
+
+2002-04-24  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	IN_SIGTRAMP with PC_IN_SIGTRAMP.
+
+2002-04-24  David S. Miller  <davem@redhat.com>
+
+	* gdbint.texinfo (REGISTER_IN_WINDOW): Delete definition.
+
+2002-04-21  David S. Miller  <davem@redhat.com>
+
+	* gdbint.texinfo (SKIP_PROLOGUE_FRAMELESS_P): Delete definition.
+
+2002-04-21  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	definition of HAVE_REGISTER_WINDOWS.
+
+2002-04-19  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo (Releasing GDB, Coding): Fix typos.  Reported by
+	"Theodore A. Roth" <troth@verinet.com>.
+
+2002-04-15  Don Howard  <dhoward@redhat.com>
+
+	From Eli Zaretskii <eliz@gnu.org>
+	* gdb.texinfo (show max-user-call-depth): Correct formatting.
+	Provide a better explaination of this feature.
+
+2002-04-14  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Remove
+	FRAME_CHAIN_COMBINE.
+
+2002-04-12  Michael Chastain  <mec@shout.net>
+
+	* gdbint.texinfo (Obsolete Conditionals): Remove reference to
+	REG_STACK_SEGMENT.
+
+2002-04-09  Michael Chastain  <mec@shout.net>
+
+	* gdbint.texinfo (Obsolete Conditionals): Remove references to
+	PYRAMID_* macros.
+
+2002-04-07  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Bug Reporting): Document that the web is the
+	prefered way of submitting bug reports.
+	(Bug Reporting): Delete the s-mail address as the last resort.
+
+2002-04-05  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	references to TARGET_WRITE_FP and write_fp.
+
+2002-03-27  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo: Document new commands dump, append, and restore.
+
+2002-03-27  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Releasing GDB): Revise the section `Before the
+	Branch'.
+
+2002-03-18  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo: Change all examples to @smallexample.
+	* gdbint.texinfo: Ditto.
+
+2002-03-18  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Releasing GDB): Add section ``Versions and
+	Branches''.
+
+2002-03-18  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Releasing GDB): Add the section``Branch Commit
+	Policy''.
+
+2002-03-04  Fred Fish  <fnf@redhat.com>
+
+	* gdbint.texinfo: Fix a bunch of typos (alsways, mirrorred,
+	expresson, suports, dependant, trhe, perhaphs, situtations,
+	explictily, taged, oportunity, unfortunatly).
+
+2002-02-24  Andrew Cagney  <ac131313@redhat.com>
+
+	* Makefile.in (gdb.info): Add explicit path to gdb.texinfo.
+	Remove reference to 3.12.
+
+2002-02-23  Paul Eggert  <eggert@twinsun.com>
+
+	* Makefile.in (GDBvn.texi): Change "head -1" to "sed q", since
+	POSIX 1003.1-2001 no longer allows "head -1".
+
+2002-02-23  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo: Include fdl.texi.
+	(Top): Add GNU Free Documentation License.
+	* Makefile.in (SFILES_INCLUDED): Add gpl.texi.
+	(gdbint.dvi, gdbint.pdf, gdbint.info): Add dependency on fdl.texi.
+	(gdbint_toc.html): Add dependency on gdb-cfg.texi and fdl.texi.
+	(gdbint.info): Add srcdir to include path.
+	* gdb.texinfo: Include gpl.texi.
+	(Top): Add Copying.
+	* gpl.texi: New file.
+
+2002-02-23  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Debugging GDB): Remove references to cygnus.com.
+
+2002-02-19  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+	* gdb.texinfo: Document Cygwin native specific commands.
+
+2002-02-15  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdb.texinfo: Document gdbserver ``--attach'' command.
+
+2002-02-07  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (overlays): Change @var(_ovly_debug_event)
+	to @code(_ovly_debug_event).
+
+2002-02-07  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (How Overlays Work): Shrink the overlay diagram.
+
+2002-02-06  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (overlays): Mention new magic symbol
+	'_ovly_debug_event', which allows GDB to keep better track
+	of overlays.
+
+2002-02-06  Richard Earnshaw  <rearnsha@arm.com>
+
+	* gdbint.texinfo (FLOAT_INFO): Mark as deprecated.
+	(PRINT_FLOAT_INFO): Document it.
+
+2002-02-03  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Memory Region Attributes): Fix the wording.
+	Suggested by Dmitry Sivachenko.
+
+	* (<many nodes>): Fix the spelling and punctuation of "i.e.".
+
+2002-02-01  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (set trust-readonly): Change value{gdbn} to value{GDBN}.
+
+2002-01-30  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo: (remote protocol): Gramatical fix-up.
+	(set trust-readonly-sections): Document.
+
+2002-01-29  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Releasing GDB): Revise and update.
+
+2002-01-28  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of TARGET_BYTE_ORDER_DEFAULT.
+
+2002-01-27  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: Fix typos and markup.  From Dmitry Sivachenko
+	<mitya@cavia.pp.ru>.
+
+2002-01-23  Andrew Cagney  <ac131313@redhat.com>
+
+	* libgdb.texinfo: Delete file.
+
+2002-01-22  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo: Remove makeinfo 3.12 hacks.
+	* gdbint.texinfo: Ditto.
+
+Tue Jan 22 11:57:38 2002  Andrew Cagney  <cagney@redhat.com>
+
+	* gdb.texinfo: Fix typo ``Remove' -> ``Remote''.
+
+2002-01-22  Andrew Cagney  <ac131313@redhat.com>
+
+	* Makefile.in: Update copyright.
+	(TEXI2DVI): Define.
+	(gdb.dvi, gdb.pdf, stabs.dvi, stabs.pdf): Use TEXI2DVI.
+	(gdbint.dvi, gdbint.pdf): Use TEXI2DVI.  Add dependency on
+	gdb-cfg.texi.
+	(TEXINDEX, PDFTEX): Delete makefile variables.
+
+2002-01-22  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Protocol): Move section to appendix.
+
+2002-01-21  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Remote Debugging): Create a menu.
+	(Top): Add ``Remote Debugging'' to menu.
+
+2002-01-21  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Remote): Move the sub-section ``The GDB remote
+	serial protocol'' from here.
+	(Remote Debugging): To here.  New chapter.
+
+2002-01-20  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Delete
+	description of TARGET_BYTE_ORDER_SELECTABLE_P.
+
+2002-01-20  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Host Definition): Revise.  xm-xyz.h and xyz.mh
+	are no longer needed.
+	(Porting GDB): Add maintainer note about configure.host.
+
+2002-01-20  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Remove
+	definition of IEEE_FLOAT.
+
+2002-01-20  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: Beautify copyright years; fix a typo.
+	(DJGPP Native): Fix overfull hboxes in examples.  From Brian Youmans
+	<3diff@gnu.org>
+
+2002-01-19  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Host Definition): Remove references to
+	MALLOC_INCOMPATIBLE.
+
+2002-01-17  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Host Definition): Remove references to XDEPFILES
+	and xyz-xdep.o.
+
+2002-01-17  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Maintenance Commands): Add appendix.
+	(Set Breaks): Copy ``maint info breakpoint'' doco to
+	``Maintenance Commands'' appendix.  Add reference.
+
+2002-01-17  Andrew Cagney  <ac131313@redhat.com>
+
+	* fdl.texi: Remove next/prev from @node.
+
+2002-01-17  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: @include fdl.texi.  Fixes for overfull hboxes and
+	for monstrous @multitable (from Brian Youmans).
+
+	* fdl.texi: New file.
+
+	* Makefile.in (SFILES_INCLUDED): Add fdl.texi.
+
+2002-01-15  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Releasing GDB): New chapter.
+
+2002-01-14  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Embedded Processors, Calling program functions):
+	Obsolete references to a29k.
+
+2002-01-13  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Coding): Review Cleanups section.  Examples
+	examples.  Document that a code-block should do or discard its
+	cleanups before exit.
+
+2002-01-11  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (Choosing files): Change @samp to @file.
+
+2002-01-05  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (--pid): Document new command line option (attach).
+
+2002-01-07  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Tracepoints): Clarify that tracepoints need support
+	in the stub.
+
+2002-01-04  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	BIG_ENDIAN with BFD_ENDIAN_BIG.
+
+2002-01-03  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	value_ptr with struct value pointer.
+
+2002-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Free Software): Fix wording.
+
+2001-12-31  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Free Software): New section ``Free Software Needs
+	Free Documentation''.
+
+2001-12-30  Eli Zaretskii  <eliz@gnu.org>
+
+	* stabs.texinfo:
+	* gdb.texinfo:
+	* gdbint.texinfo:
+	* libgdb.texinfo:
+	* annotate.texi: Fix the application of GFDL in the Copyright notice.
+
+2001-12-29  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (maint info sections): Fix typo.
+
+2001-12-26  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (maint info sections): Document.
+
+	* gdb.texinfo (info proc): Comment out documentation for
+	'info proc' sub-options that are currently not implemented.
+
+2001-12-20  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (TARGET_CHAR_SIGNED): Document.
+
+2001-12-15  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Replace
+	LITTLE_ENDIAN with BFD_ENDIAN_LITTLE.
+
+2001-12-01  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Host Definition): Delete documentation on
+	HOST_BYTE_ORDER.
+
+2001-11-30  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (Overlays): New chapter, documenting GDB's
+	overlay support.  Add to top-level menu.
+
+2001-11-26  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Command Syntax): Document C-o binding.
+
+2001-07-26  Christopher Faylor  <cgf@redhat.com>
+
+	* gdb.texinfo (Options): Eliminate attempt to explain .gdbinit/gdb.ini
+	use since it is described in the referenced section.
+
+	From Eli Zaretskii <eliz@gnu.org>
+	* gdb.texinfo (Command Files): Reword to make gdb.ini requirement
+	clearer when using DJGPP.
+
+2001-11-24  Christopher Faylor  <cgf@redhat.com>
+
+	* gdb.texinfo (File Options): Change description of -nx and gdb.ini to
+	specifically refer to MS-DOS.
+	(command files): Mention gdb.ini is only used on MS-DOS.
+
+2001-11-21  Tom Tromey  <tromey@redhat.com>
+
+	* gdb.texinfo (Invoking GDB): Document --args.
+	(Mode Options): Likewise.
+
+2001-11-21  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (TARGET_RANGE_PROFITABLE_FOR_HW_WATCHPOINT):
+	Delete documentation; this macro has been removed from the
+	sources.
+
+2001-11-13  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (COERCE_FLOAT_TO_DOUBLE): Clarify.
+
+2001-11-06  Corinna Vinschen  <vinschen@redhat.com>
+
+	* gdb.texinfo (gdbarch_in_function_epilogue_p): Add documentation.
+
+2001-11-05  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (info functions): Document use of backslash to
+	quote regexp chars in function names such as "operator*()".
+
+2001-11-01  Fred Fish  <fnf@redhat.com>
+
+	* gdbint.texinfo (SOLIB_ADD): Document additional new
+	"readsyms" arg.
+
+2001-10-30  Don Howard  <dhoward@redhat.com>
+
+	* gdb.texinfo: (Command Files) Added documentation for the
+	behavior of gdb with input redirected from a file.
+
+2001-10-28  Fred Fish  <fnf@redhat.com>
+
+	* gdb.texinfo (auto-solib-add): Change docs to match
+	implementation change.
+	(auto-solib-limit): Add docs for new variable.
+
+2001-10-15  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Function
+	value_as_pointer renamed to value_as_address.
+
+2001-10-15  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Default
+	POINTER_TO_ADDRESS functions assume unsigned addresses.
+	(INTEGER_TO_ADDRESS): Document.  Derive pragmatics section from a
+	posting by Jim Blandy.
+
+2001-10-12  Jim Blandy  <jimb@redhat.com>
+
+	* Makefile.in (MAKEHTMLFLAGS): Remove -glossary; the most recent
+	version of texi2html (1.64) doesn't support this flag any more.
+
+2001-09-08  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Host Definition): Remove description of
+	MEM_FNS_DECLARED.
+
+	* gdbint.texinfo (Host Definition): Remove description of R_OK.
+
+	* gdbint.texinfo (Host Definition): Remove description of
+	HAVE_SIGSETMASK.
+
+2001-09-04  Elena Zannoni  <ezannoni@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Add
+	explanation of TARGET_PRINT_INSN macro.
+
+2001-08-30  Jim Blandy  <jimb@redhat.com>
+
+	* gdb.texinfo (`add-symbol-file'): Correct synopsis.
+	Explain what it means to load relocatable files.
+
+2001-08-28  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo: Bring the HTML `top' menu into sync with the
+	info `top' menu.
+
+Wed Aug 15 10:47:28 2001  Christopher Faylor <cgf@cygnus.com>
+
+	* gdbint.texinfo: Add a cautionary note about macro use.
+
+2001-08-02  Corinna Vinschen  <vinschen@redhat.com>
+
+	* gdb.texinfo: Explain omitting the hostname in the
+	`target remote' command.
+
+2001-07-30  Daniel Jacobowitz  <drow@mvista.com>
+
+	* gdbint.texinfo: Remove extraneous START-INFO-DIR-ENTRY
+	and END-INFO-DIR-ENTRY.
+
+2001-07-28  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+	* gdb.texinfo (TUI Configuration): Rename tui configuration variables.
+
+2001-07-25  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (libgdb): Rewrite.
+
+2001-07-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* Makefile.in (gdbgui.dvi, gdb-gui, gdbgui.info): Targets deleted.
+
+2001-07-24  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+	* gdb.texinfo (TUI): New chapter, document the TUI.
+	(Mode Options): Document the -tui option.
+
+2001-07-23  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Host Definition): Remove description of
+	NEED_POSIX_SETPGID.
+
+2001-07-23  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.tex (DJGPP Native): New node, with descriptions of
+	DJGPP-specific commands.
+
+2001-07-19  John R. Moore  <jmoore@redhat.com>
+
+	* gdbint.texinfo: Three misspellings.
+
+2001-07-06  Andrew Cagney  <ac131313@redhat.com>
+
+	* Makefile.in (refcard.dvi): Rewrite to avoid problems with empty
+	`test` expressions on bash.  Problem reported by Colin Walters.
+
+2001-07-04  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (User Interface): Update ui-out documentation to
+	refelect recent UI/MI updates.
+
+2001-07-04  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Mode Options): Mention the mi0 and mi1
+	interpreters.
+
+2001-06-15  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): GDBARCH is a C
+	structure and not macros.
+	(Host Definition): Document that much of this chapter is obsolete.
+	(Target Architecture Definition): Update list of files that make
+	up a target architecture.
+	(Coding): Update.
+
+2001-06-28  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Update
+	EXTRACT_STRUCT_VALUE_ADDRESS and EXTRACT_STRUCT_VALUE_ADDRESS_P.
+	The latter has been changed to a true predicate.
+
+2001-06-17  Eli Zaretskii  <eliz@gnu.org>
+
+	* annotate.texi: Add @noindent where needed.  From Dmitry
+	Sivachenko <dima@Chg.RU>.
+	* gdb.texinfo: Indexing fix.  From Dmitry Sivachenko.
+
+2001-06-16  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Protocol): Fix typo.  Extra parenthesis.
+
+2001-06-14  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdb.texinfo (Remote Protocol): Document that the ``!'' packet
+	returns ``OK''.  Document that the ``R'' packet does not reply.
+
+2001-06-13  Michael Snyder  <msnyder@redhat.com>
+
+	* gdb.texinfo (Protocol): Add doc for new packet "qSymbol:".
+
+2001-06-13  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Signals): Clarify the default setting of signal
+	handling.
+
+2001-05-14  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (CLEAR_DEFERRED_STORES): Delete stray @item
+	(FRAME_ARGS_ADDRESS_CORRECT): Ditto.
+
+2001-05-12  Andrew Cagney  <ac131313@redhat.com>
+
+	* Makefile.in (GDBvn.texi): Set GDBVN from ../version.in.
+
+2001-05-10  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo (Clean Design and Portable Implementation):
+	Renamed from "Clean Design".
+	(Clean Design and Portable Implementation): Document portable
+	methods of handling file names, and the associated macros.
+
+2001-04-02  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Tracepoint Actions): Mention the "info scope"
+	command and provide a cross-reference to its description.
+	(Symbols): Note that "info scope" is useful for trace experiments.
+
+2001-04-01  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Symbols): Document "info scope".
+	(Tracepoints): New chapter.
+	(Contributors): Update for v5.1.
+	<All nodes>: Change "C++" to "C@t{++}".
+
+	* gdbint.texinfo (User Interface): A new section about ui_out
+	functions, based on text written by Fernando Nasser.
+
+	* stabs.texinfo: Change Permissions to GFDL.  Update Copyright.
+
+2001-03-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: Change Permissions to GFDL.  Update Copyright.
+
+	* gdbint.texinfo: Change Permissions to GFDL.  Update Copyright.
+
+	* gdbgui.texinfo: Change Permissions to GFDL.  Update Copyright.
+	Replace "GDB" with "@value{GDBN}".  Fix markup.
+
+	* annotate.texi: Change Permissions to GFDL.  Update Copyright.
+
+	* gdb.texinfo (Output Formats): Mention "info symbol" and provide
+	a cross-reference to its description.
+	(Symbols): Document "info symbol".
+
+2001-03-21  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo (Algorithms): New section "Watchpoints" and new
+	subsection "x86 Watchpoints".
+	(Target Architecture Definition): Document the macros
+	I386_USE_GENERIC_WATCHPOINTS and TARGET_HAS_HARDWARE_WATCHPOINTS.
+	(Native Debugging): Document I386_USE_GENERIC_WATCHPOINTS.
+
+2001-03-20  Andrew Cagney  <ac131313@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Update
+	definition of SOFTWARE_SINGLE_STEP_P to include empty parameter
+	list.
+
+2001-03-06  Kevin Buettner  <kevinb@redhat.com>
+
+	* Makefile.in, all-cfg.texi, annotate.texi, gdb.texinfo,
+	gdbint.texinfo, refcard.tex: Update/correct copyright notices.
+
+2001-02-21  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Signals): Document "ignore", "noignore", and "all".
+
+2001-02-11  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Environment): Document that `path' does not change
+	the value of PATH in GDB's own environment (it did in the past,
+	but that was changed on March 15, 1994).  Reported by Doug Evans
+	<dje@transmeta.com>.
+
+	* gdbint.texinfo: Fix up @itemize lists so that @item is alone on
+	its line.  Fix markup of commands and macros.  Add an Index node
+	and index entries.
+
+2001-01-23  J.T. Conklin  <jtc@redback.com>
+
+	* gdb.texinfo (Memory region attributes): New manual section.
+
+2001-01-04  Nicholas Duffek  <nsd@redhat.com>
+
+	* gdbint.texinfo (POP_FRAME): Document use by return_command.
+
+2000-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+	* refcard.tex: Version and copyright fixed.  From Phil Edwards
+	<pedwards@disaster.jaj.com>.
+
+Thu Nov 30 16:57:19 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (ECOFF_REG_TO_REGNUM, DWARF_REG_TO_REGNUM,
+	DWARF2_REG_TO_REGNUM): Document.
+
+Mon Nov 20 21:29:35 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (Coding): Update current value of
+	--enable-build-warnings.  Mention --enable-gdb-build-warnings.
+
+2000-11-19  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Continuing and Stepping):  Fixed markup and typos,
+	as suggested by Dmitry Sivachenko <dima@Chg.RU>.
+
+2000-11-10  Christopher Faylor <cgf@cygnus.com>
+
+	* gdb.texinfo: Document new 'set step-mode' command.
+
+2000-10-16  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Contributors, MIPS Embedded): Minor spelling
+	changes from Dmitry Sivachenko <dima@Chg.RU>.
+
+2000-09-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Hooks): Document the new post-hook functionality.
+	From Steven Johnson <sbjohnson@ozemail.com.au>.
+
+2000-08-10  Mark Kettenis  <kettenis@gnu.org>
+
+	* gdbint.texinfo (Overall Structure): Spelling fix.
+
+2000-08-10  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdbint.texinfo (Target Architecture Definition): Document that
+	REGISTER_CONVERT_TO_VIRTUAL should only be called on a register
+	for which REGISTER_CONVERTIBLE returns a zero value.
+
+2000-07-08  Christopher Faylor <cgf@cygnus.com>
+
+	* Makefile.in (install-info): Find files to install in either the
+	build or source directories (adapted from Makefile.am).
+
+2000-07-07  Nicholas Duffek  <nsd@redhat.com>
+
+	* stabs.texinfo: Fix spelling errors.
+	(String Field): FILE-NUMBER starts from 0, not 1.
+
+2000-07-05  Eli Zaretskii <eliz@gnu.org>
+
+	* refcard.tex: Remove \centerline from the blurb.  Patch from
+	Brian Youmans.
+
+2000-06-25  Eli Zaretskii <eliz@gnu.org>
+
+	* Makefile.in (install-info): Support installation from outside of
+	the source directory.  Reported by Mark Harig
+	<markh@frazier.landmark.com>.
+
+2000-06-20  J.T. Conklin  <jtc@redback.com>
+
+	* gdb.texinfo: Fix typo, $bpnum is set to last breakpoint number.
+
+Fri May 26 15:55:33 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* Makefile.in (pdf, gdbint.pdf, gdb.pdf, stabs.pdf): New targets.
+	Generate using pdftex.
+	(PDFTEX): Define.
+	(STAGESTUFF, maintainer-clean realclean): Add *.pdf.
+	(gdb.texinfo, gdbint.texinfo, stabs.texinfo): When TeX insert the
+	@contents at the start.
+
+2000-05-24  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: Remove duplicate @syncodeindex.  From Brian
+	Youmans.
+
+Wed May 24 21:27:58 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	From Brian Youmans:
+	* gdb.texinfo: Fix ``et al.''.
+
+Tue May 23 22:57:41 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* Makefile.in (refcard.dvi): Remove quotes around REFEDITS in for
+	loop.
+
+2000-05-19  Jimmy Guo  <guo@cup.hp.com>
+
+	* configure: Regenerate.
+
+2000-05-17  Eli Zaretskii  <eliz@gnu.org>
+
+	* Makefile.in (install-info): Run install-info on installed Info
+	files.
+
+Fri May 12 20:18:04 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdb.texinfo: Add Stan Shebs, et.al. as authors.  Mention
+	Andrew Cagney.
+
+2000-05-09  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo: Proofreading changes from Brian Youmans.
+
+2000-05-01  Nick Duffek  <nsd@cygnus.com>
+
+	* gdb.texinfo (Command Files): Mention -x, use @enumerate for
+	startup sequence, minor edits.
+
+2000-05-01  Eli Zaretskii  <eliz@gnu.org>
+
+	* annotate.texi: Remove "@syncodeindex fn cp", it causes grief in
+	TeX.
+
+	* gdb.texinfo: Add "@syncodeindex fn cp".  Convert all entries
+	"@kindex f" into "@kindex f (foo)", otherwise we get index entries
+	like `n' and `s' which look weird.  Convert some of the @kindex to
+	@vindex, when they refer to variables, not commands.
+
+Sat Apr 29 17:01:04 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (Hints): Do not use @value{GDBN in @nodes.
+
+2000-04-23  Eli Zaretskii  <eliz@gnu.org>
+
+	* Makefile.in (GDBMI_DIR): New variable.
+	(SET_TEXINPUTS): Add $(GDBMI_DIR).
+	(SFILES_DOC): Add $(GDBMI_DIR)/gdbmi.texinfo.
+	(gdbmi.texinfo): New target, for texi2roff.
+	(gdb.me, gdb.ms, gdb.mm): Depend on gdbmi.texinfo.
+	(gdb.info, gdb_toc.html): Add "-I ${GDBMI_DIR}".
+
+	* gdb.texinfo (Top): Add GDB/MI to the main menu and @include
+	gdbmi.texinfo.
+	(Mode Options): Add xref to GDB/MI docs and remove a FIXME
+	comment.
+
+2000-04-17  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+	* gdb.texinfo (Files): Update description of add-symbol-file
+	command.
+
+2000-04-17  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Porting GDB): Don't use @value in the node name, it
+	prevents the build (and is generally a Bad Idea).
+
+2000-04-17  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Protocol): Prevent makeinfo from complaining about
+	a comma inside @var.
+	(Command Files): Index markup changes from Dmitry Sivachenko
+	<dima@Chg.RU>.
+
+2000-04-16  Eli Zaretskii  <eliz@gnu.org>
+
+	* Makefile.in (LN_S): Define.
+	(gdb-cfg.texi, gdb.dvi, links2roff, inc-hist.texinfo): Don't
+	invoke "ln -s" unless it is known to work.
+
+	* configure.in (AC_PROG_LN_S): Add.
+
+2000-04-14  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (Pointers Are Not Always Addresses): New manual
+	section.
+	(Target Conditionals): Document ADDRESS_TO_POINTER,
+	POINTER_TO_ADDRESS.
+
+2000-04-11  Daniel Berlin  <dan@cgsoftware.com>
+
+	* gdbint.texinfo: Replaced GDB with @value{GDBN}, @include
+	gdb-cfg.texi to get the value.
+
+2000-04-10  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Fix
+	cross-references.
+
+2000-04-08  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (Using Different Register and Memory Data
+	Representations): New section.
+	(REGISTER_CONVERTIBLE, REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE,
+	REGISTER_VIRTUAL_TYPE, REGISTER_CONVERT_TO_VIRTUAL,
+	REGISTER_CONVERT_TO_RAW): Document.
+
+Mon Apr  3 19:16:32 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdb.texinfo (Protocol): Deprecate the sequence-id.  Add cindex
+	for acknowledgments.
+
+Tue Mar 28 18:28:45 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdb.texinfo (Protocol): Replace ``qfThreadExtraInfo'' with
+	qThreadExtraInfo.
+
+2000-03-28  J.T. Conklin  <jtc@redback.com>
+
+	* gdb.texinfo: Clarify which remote debug protocol commands are
+	required and which are optional.
+
+Tue Mar 28 16:06:22 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdb.texinfo: Revert remainder of Fri Mar 24 18:06:34 2000 Andrew
+	Cagney <cagney@b1.cygnus.com>.  Move @chapter and @node entries
+	back to annotate.texi, rluser.texinfo and inc-hist.texinfo.
+	* annotate.texi: Update.
+
+2000-03-28  Stan Shebs  <shebs@apple.com>
+
+	* gdb.texinfo: Update dates, bump to Eighth Edition (note
+	expectation of additional changes before release), update
+	ISBN, add copy of top-level menu for @ifhtml, remove explicit
+	node links, rephrase and/or shorten lines to fix formatting
+	problem in both regular and @smallbook formats.
+	* annotate.texi: Shorten lines in example, use smallexample
+	consistently everywhere.
+	* Makefile.in: Add comment about texinfo 4.0 html generation.
+	(SFILES_INCLUDED): Add annotate.texi.
+
+2000-03-27  Daniel Berlin  <dan@cgsoftware.com>
+
+	* gdb.texinfo (Debugging Output): Added new section, documenting
+	the "set/show debug" commands.
+
+Fri Mar 24 18:06:34 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* annotate.texi (Annotations): When GDBN omit @chapter and @node
+	entry.
+
+	* gdb.texinfo: Check for @ifinfo instead of @ifnottex.
+	(rluser.texinfo, inc-hist.texinfo, annotate.texi): Add local
+	@chapter and @node entries.
+
+	* gdb.texinfo: Link all top-level nodes.
+
+Fri Mar 24 17:56:48 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* Makefile.in (install-info): Create $(infodir) before installing
+	files.
+
+2000-03-23  Fernando Nasser  <fnasser@totem.to.cygnus.com>
+
+	From David Whedon <dwhedon@gordian.com>
+	* gdbint.texinfo : Added paragraphs about command deprecation.
+
+2000-03-22  Daniel Berlin  <dan@cgsoftware.com>
+
+      * gdb.texinfo: Add documentation for the apropos command.
+
+2000-03-20  Michael Snyder  <msnyder@cleaver.cygnus.com>
+
+	* gdb.texinfo: Add new queries ThreadInfo and ThreadExtraInfo.
+
+2000-03-20  Michael Snyder  <msnyder@cleaver.cygnus.com>
+
+	* gdb.texinfo: Add white space to prevent overprinting in
+	two places.
+
+2000-03-17  Stan Shebs  <shebs@apple.com>
+
+	* gdb.texinfo: Many minor changes from Dmitry Sivachenko
+	<dima@Chg.RU>, also clarification of allowed content for
+	string constants.
+
+2000-03-16  Eli Zaretskii <eliz@gnu.org>
+
+	* gdb.texinfo (main menu): Add Annotations.
+	(File Options): Add @cindex entries for each command-line option.
+	Document --epoch, --annotate, --async, --interpreter, --write,
+	--statistics, and --version.
+
+	* annotate.texi: Convert to a chapter.  Use @value{GDBN} instead
+	of GDB.
+
+2000-02-23  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo (FUNCTION_START_OFFSET): Document.
+
+2000-02-22  Jim Blandy  <jimb@redhat.com>
+
+	* gdbint.texinfo: Document COERCE_FLOAT_TO_DOUBLE --- the new form.
+
+2000-02-15  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+	* Makefile.in (diststuff): New target.
+
+2000-02-15  Kevin Buettner  <kevinb@redhat.com>
+
+	* agentexpr.texi: Fix wording regarding Intel's IA-64
+	architecture.  [From Jim Wilson.]
+
+2000-01-16  Tom Tromey  <tromey@cygnus.com>
+
+	* gdb.texinfo (Breakpoints): Mention breakpoint ranges.
+	(Delete Breaks): Mention range arguments.
+	(Disabling): Likewise.
+
+2000-01-05  Dmitry Sivachenko <dima@Chg.RU>
+
+	* gdb.texinfo:  Wrap "ASCII" in @sc{}; clarify a few sentences.
+
+Wed Dec  8 19:53:08 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (FRAME_CHAIN_VALID): Add the generic frame-chain
+	valid functions.
+
+1999-11-05  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo: Clarify regular expressions used in rbreak.
+
+1999-10-15  Kevin Buettner  <kevinb@cygnus.com>
+
+	* gdbint.texinfo (MEMORY_INSERT_BREAKPOINT,
+	MEMORY_REMOVE_BREAKPOINT):  Document.
+
+Thu Oct 14 21:17:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdb.texinfo (remote): Document how GDB ignores the qOffsets BSS
+	offset re-using the DATA offset instead.
+
+1999-10-11  Jim Kingdon  <kingdon@redhat.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Add PARM_BOUNDARY.
+
+1999-10-07  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+	* gdbint.texinfo (SYMBOLS_CAN_START_WITH_DOLLAR): Document.
+
+1999-10-05  Stan Shebs  <shebs@andros.cygnus.com>
+
+	From Dmitry Sivachenko <demon@gpad.ac.ru>:
+	* gdb.texinfo: Use GDBP and GDBN everywhere, fix a couple other
+	typos.
+
+	* gdb.texinfo: Various minor wording and formatting improvements,
+	mentions of additional command-line options.
+
+1999-09-30  Fred Fish  <fnf@cygnus.com>
+
+	* gdb.texinfo:  Document additional forms of specifying section
+	names and addresses for the add-symbol-file command.
+
+1999-09-14  Michael Snyder  <msnyder@cleaver.cygnus.com>
+
+	* gdbint.texinfo: Fix typo, add the word "have".
+
+1999-09-14  Jim Blandy  <jimb@cris.red-bean.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Document the
+	SKIP_PERMANENT_BREAKPOINT macro.
+
+1999-09-07  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo: Fiks speling errers.
+
+	* gdb.texinfo: Fix uses of @multitable.
+
+	From Eli Zaretskii  <eliz@gnu.org>:
+	* gdb.texinfo: Include details specific to DOS host, clarify
+	some confusing language, fix @ref/@xref/@pxref usages, add
+	comments about using with optimization, add more indexing,
+	fix info about disassembly-flavor.
+
+Tue Sep  7 09:11:24 1999  Kevin Buettner  <kevinb@cygnus.com>
+
+	* gdbint.texinfo (IN_SOLIB_DYNSYM_RESOLVE_CODE,
+	SKIP_SOLIB_RESOLVER): Define.
+
+Fri Sep  3 18:05:14 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdb.texinfo (Protocol): Review.  Add tables describing ``q'' and
+	``g'' packets.
+
+1999-08-30  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo: Create a new "Configurations" chapter with
+	platform-specific info, inline remote.texi and move sections of it
+	into the new chapter, move bits about info proc, heuristic search,
+	and register stack into the new chapter.
+	* remote.texi: Remove, now part of gdb.texinfo.
+	* Makefile.in (SFILES_INCLUDED): Remove ref to remote.texi.
+
+1999-08-27  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+	* gdbint.texinfo (GDB_TARGET_IS_SUN3, GDB_TARGET_IS_SUN386,
+	GDB_TARGET_IS_MACH386): These kludges have gone away.
+
+Wed Aug 25 10:47:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (Target Architecture Definition): Mention
+	TDEPLIBS.
+
+1999-08-20  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo: Remove remaining "HPPA" conditionals, rewrite
+	surrounding text to fit HP-UX bits into general info.
+	(HPPA-cfg.texi): Remove, no longer useful.
+
+	* gdb.texinfo: Remove explicit links from @node lines, remove
+	HP-added "Detailed Node Listing" from main menu which confuses
+	things.
+
+	From Dmitry Sivachenko <dima@Chg.RU>:
+	* gdb.texinfo: Use @value{GDBN} instead of plain GDB, fix grouping
+	in description of `set environment'.
+
+1999-08-17  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdbint.texinfo: Update coding standard to allow pure ANSI/ISO C.
+
+1999-08-12  Ben Elliston  <bje@cygnus.com>
+
+	* gdbint.texinfo (Breakpoint Handling): Add missing words.
+
+1999-08-10  Eli Zaretskii  <eliz@gnu.org>
+
+	* gdb.texinfo (Set Watchpoints): Explain some subtleties about
+	watch, awatch, and rwatch.  Explain why the latter two cannot be
+	set as software watchpoints.  Document that watchpoints for local
+	variables are deleted when the debuggee terminates.
+
+Wed Aug 11 13:18:14 1999  Andrew Cagney  <cagney@amy.cygnus.com>
+
+	* remote.texi (Protocol): Further clarification of the "qRcmd"
+	packet.  Allow E.. response packet.  "qRcmd" packet is no longer
+	reserved.
+
+1999-08-10  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+	* Makefile.in: Rename inc-hist.texi to inc-hist.texinfo.
+	* gdb.texinfo: Ditto.
+
+Sun Aug  8 12:06:47 1999  Fred Fish  <fnf@cygnus.com>
+
+	* gdbint.texinfo (find_sym_fns): This replaces symfile_init.
+
+1999-08-06  Tom Tromey  <tromey@cygnus.com>
+
+	* gdb.texinfo (KOD): New node.
+
+Fri Aug  6 17:05:48 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* remote.texi (Rcmd): Fix minor formatting typos.
+
+Thu Aug  5 17:57:41 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* remote.texi (protocol qRcmd): Allow ``OK'' and ``O...'' response
+	packets.
+
+1999-07-14  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+	* gdbint.texinfo (PREPARE_TO_PROCEED, ADDR_BITS_REMOVE): Doc
+	fixes.
+
+Tue Jun 29 11:43:55 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (SAVE_DUMMY_FRAME_TOS): Define.
+
+Fri Jun 25 11:47:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* remote.texi (Communication Protocol): ``v'' is in use. Fix
+	numerous formatting errors.  Clarify ``i''.  Mark ``i'', ``Z'',
+	``z'' and ``qRcmd'' as draft instead of reserved.  Identify
+	packets that are not supported on all hosts. Expand examples.
+	Spell check.
+
+1999-06-24  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+	* Makefile.in: Recognize html, install-html.  Add targets
+	to build HTML versions of documentation via texi2html.
+
+Thu Jun 24 15:59:03 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdbint.texinfo (Testsuite): New chapter, information about the
+	testsuite.
+
+Fri Jun 25 02:40:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* remote.texi (Communication Protocol): Rewrite.
+
+Thu Jun 24 16:59:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* stabs.texinfo: Fix uses of xref.
+
+Thu Jun 17 17:23:25 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdbint.texinfo: Add an anti-printf exhortation, and update the
+	info about patch submission.
+
+Mon Jun  7 15:49:40 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	From Per Bothner  <bothner@cygnus.com>:
+	* gdb.texinfo: Document Chill support.
+
+Fri Jun  4 16:58:22 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (SP_REGNUM, FP_REGNUM, PC_REGNUM): Add reference
+	to corresponding TARGET_READ_reg TARGET_WRITE_reg macros.
+	Document that the value should be greater-than or equal-to zero.
+	(NO_STD_REGS): Document. Deprecate.
+
+Tue Jun  1 15:04:15 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (TARGET_COMPLEX_BIT, TARGET_DOUBLE_COMPLEX_BIT):
+	Document that these are not used.
+
+Thu May 27 09:28:15 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (EXTRACT_STRUCT_VALUE_ADDRESS_P): Document.
+
+Mon May 24 10:07:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (FRAME_NUM_ARGS): Update definition.  Parameter
+	numargs was dropped.
+
+Thu May 20 12:26:59 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (FRAMELESS_FUNCTION_INVOCATION): Update.
+
+Tue Apr 27 19:14:20 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (SKIP_PROLOGUE, SKIP_PROLOGUE_FRAMELESS_P):
+	Update.
+
+Thu Apr 22 13:07:37 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (USE_GENERIC_DUMMY_FRAMES): Document.
+	(GET_SAVED_REGISTER): Update, not just the a29k uses this.
+
+Wed Apr 21 13:59:01 1999  Dave Brolley  <brolley@cygnus.com>
+
+	* gdbint.texinfo: Fix typos: $ -> @.
+
+Tue Apr 20 11:59:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (REGISTER_NAMES, BREAKPOINT, BIG_BREAKPOINT,
+	LITTLE_BREAKPOINT, LITTLE_REMOTE_BREAKPOINT,
+	BIG_REMOTE_BREAKPOINT): Deprecate in favor of REGISTER_NAME and
+	BREAKPOINT_FROM_PC.
+
+Mon Apr 12 16:00:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (CALL_DUMMY_STACK_ADJUST_P,
+	CALL_DUMMY_STACK_ADJUST): Document.
+
+Thu Apr  8 17:23:15 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (CALL_DUMMY_P, CALL_DUMMY_WORDS,
+	SIZEOF_CALL_DUMMY_WORDS, CALL_DUMMY): Define.
+
+1999-04-02  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdbint.texinfo (MAINTENANCE_CMDS): Remove ref, since it no
+	longer exists.
+
+Tue Mar  9 19:25:11 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo, remote.texi, all-cfg.texi, HPPA-cfg.texi: Remove
+	nearly all @ifset/@ifclear conditionals; nobody uses them, and
+	they make the manual source incomprehensible.
+	* h8-cfg.texi: Remove, hasn't been used in years.
+
+Thu Feb 11 18:00:59 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo: Update the credits.
+
+Mon Feb  8 17:33:57 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo: Fix mistakes noticed in printout of last
+	draft, add Alpha to discussion of heuristic fence post.
+
+Fri Feb  5 17:20:00 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo, remote.texi: Many changes; update to Seventh
+	Edition, merge some HP changes into mainline, describe some
+	previously undocumented features, describe more of the target
+	commands available, eliminate obsolete section on renamed
+	commands.
+	* all-cfg.texi, HPPA-cfg.texi: Remove some obsolete conditionals.
+
+Wed Jan 20 17:47:45 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo: Make many HPPA conditionals unconditional,
+	including catchpoint description, since now on for all configs.
+	* all-cfg.texi: @clear HPPA, since is mainly for very HP-specific
+	specializations.
+
+Thu Jan 14 17:10:12 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* Makefile.in (GDBvn.texi): Fix match expression to work with
+	current format of VERSION in gdb/Makefile.in.
+	* gdb.texinfo: Fix node ref to match new readline.
+
+Wed Jan 13 10:38:40 1999  Edith Epstein  <eepstein@sophia.cygnus.com>
+
+	* gdb.texinfo: Changes made as part of a project to merge in
+	  changes made by HP. Documentation makes extensive use of
+	  @ifclear HPPA and @ifset HPPA. The HP manual omits doumentation
+	  on remote debugging. There are differences in documentation
+	  (HP vs.  non-HP) on C++ support (aCC vs. gnu gcc++). Also,
+	  the HP manual discusses catchpoints, hardware watchpoints, and
+	  some HPUX specific limitations for shared library support.
+
+	  There are also a number of @node changes.
+
+1999-01-12  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+	* gdbint.texinfo (Formatting): Disambiguate a sentence.
+	(C Usage): Same.
+
+Wed Jan  6 11:55:34 1999  David Taylor  <taylor@texas.cygnus.com>
+
+	The following changes were made by Edith Epstein
+	<eepstein@cygnus.com> as part of a project to merge in changes
+	made by HP.
+
+	* HPPA-cfg.texi: new file.
+
+	* all-cfg.texi: set HPPA for HP PA-RISC targets.
+
+	* refcard.tex: change documentation about catch.
+	  removed info catch.
+
+Mon Jan  4 18:29:18 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdbint.texinfo: Expand on GDB's coding standards,
+	specify the use of arg names with prototypes.
+
+1998-12-14  J.T. Conklin  <jtc@redbacknetworks.com>
+
+	* gdb.texinfo: Fix tipo.
+
+Sun Dec 13 10:27:59 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo: Document TARGET_BYTE_ORDER_DEFAULT and
+	TARGET_BYTE_ORDER_SELECTABLE_P.
+
+Thu Dec 10 16:07:09 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (FRAME_FIND_SAVED_REGS): Document.
+
+1998-12-09  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+	* agentexpr.texi: New file.
+
+Wed Dec  9 21:13:57 1998  Andrew Cagney  <cagney@chook>
+
+	* gdbint.texinfo (REGISTER_NAME): Replace REGISTER_NAMES.
+
+1998-12-03  J.T. Conklin  <jtc@redbacknetworks.com>
+
+	* remote.texi: Changed wording that implied that the GDB remote
+	protocol caches register values instead of GDB itself.
+
+Tue Dec  1 17:45:43 1998  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdbint.texinfo: Add some info about symbol readers.
+	(CHILL_PRODUCER, etc): Comment out descriptions, not useful.
+	(IN_SOLIB_CALL_TRAMPOLINE): Rename info from IN_SOLIB_TRAMPOLINE.
+	(IN_SOLIB_RETURN_TRAMPOLINE): Describe.
+	(KERNEL_DEBUGGING, MIPSEL): No info about these, remove.
+
+Mon Nov 30 11:32:21 1998  Andrew Cagney  <cagney@chook>
+
+	* gdbint.texinfo (FRAME_CHAIN_VALID_ALTERNATE):
+
+Sat Nov 28 13:45:53 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (INNER_THAN): Update, now takes parameters.
+
+Fri Nov 27 12:39:45 1998  Andrew Cagney  <cagney@chook>
+
+	* gdbint.texinfo (NO_SINGLE_STEP): Replace with
+	SOFTWARE_SINGLE_STEP_P and SOFTWARE_SINGLE_STEP.
+
+Wed Oct 14 10:02:40 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo: Fix minor typos.
+
+Wed Sep 30 18:03:19 1998  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdbint.texinfo: Complete overhaul.  Group descriptions more
+	logically, add more info on generic algorithms, remove much
+	obsolete and/or wrong material.
+
+Fri Jul 24 17:51:38 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+	* stabs.texinfo (Method Type Descriptor): Expand and correct.
+
+Mon May  4 10:37:12 1998  Brian Youmans (3diff@gnu.org)
+
+	* refcard.tex:  Copyright, address updates.
+
+Tue Apr 21 18:09:56 1998  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo (EDITION, DATE): Update and change to use ordinals
+	for the edition instead of confusing GDB-version-like numbers.
+
+Mon Apr 13 14:05:00 1998  Fred Fish  <fnf@cygnus.com>
+
+	* gdb.texinfo (hbreak, watch): Fix typo, "date" -> "data".
+
+Thu Apr  2 16:52:44 1998  Jason Molenda  (crash@bugshack.cygnus.com)
+
+	* LRS: Reformat a bit to keep text under 80 columns.
+
+Thu Apr  2 16:10:36 1998  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo: Add some credits, mention bug monitor.
+	* remote.texi: Mention mips monitor targets.
+	* gdbint.texinfo: Describe SP_REGNUM, STEP_SKIPS_DELAY.
+
+Mon Feb  2 17:13:03 1998  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdbint.texinfo: Remove obsolete mentions of pinsn.c and opcode.h
+	files, finish sorting of host vs target vs native macros, describe
+	some more of them.
+
+Tue Jan 13 16:44:50 1998  Fred Fish  <fnf@cygnus.com>
+
+	* gdbint.texinfo (Host Conditionals): Document change from
+	using NO_MMALLOC to it's inverse, USE_MMALLOC.
+
+Mon Nov 24 13:55:21 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+	* gdbint.texinfo (Host Conditionals): Document
+	PRINTF_HAS_LONG_DOUBLE, SCANF_HAS_LONG_DOUBLE, HAVE_LONG_DOUBLE.
+
+Fri Jul  4 14:52:31 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+	* gdbint.texinfo (Host Conditionals): Add CRLF_SOURCE_LINES.
+	Document LSEEK_NOT_LINEAR.
+
+Tue Mar 25 14:44:09 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+	* stabs.texinfo (Stab Section Basics): Make it clear that only
+	some versions of the GNU linker remove the leading N_UNDF symbol.
+
+Thu Feb 27 17:45:19 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+	* stabs.texinfo (String Field): Document type number pairs here,
+	instead of in the Sun specific section.
+	(Include Files): The GNU linker supports the N_BINCL
+	optimization.  Clarify the N_BINCL value, and what it is used
+	for.
+	(Procedures): Document N_FUN with an empty string to mark the end
+	of a function.
+	(Typedefs): Mention that Sun compilers may use N_GSYM for a type.
+	(Sun Differences): Remove this node, as the information is now
+	elsewhere in the main document.
+	(Stab Section Basics): Mention that the GNU linker may optimize
+	stabs and remove the leading N_UNDF symbol.
+
+Mon Dec  9 12:23:32 1996  Roland Pesch  <roland@wrs.com>
+
+	* gdb.texinfo, refcard.tex: Restore author credit
+
+Wed Oct  2 22:07:16 1996  Fred Fish  <fnf@cygnus.com>
+
+	* gdbint.texinfo: Document that SIGTRAMP_START and SIGTRAMP_END
+	are macros that take an single argument.
+
+Wed Oct  2 22:01:36 1996  Fred Fish  <fnf@fishfood.ninemoons.com>
+
+	* gdbint.texinfo (SIGTRAMP_START, SIGTRAMP_END): Update
+	documentation to account for START and END macros taking
+	one arg.
+
+Thu Aug 22 17:59:03 1996  Fred Fish  <fnf@cygnus.com>
+
+	From: Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
+	* gdb.texinfo (Frames): Fix typo.
+
+Tue Jul 23 10:06:20 1996  Fred Fish  <fnf@cygnus.com>
+
+	* gdbint.texinfo (NO_SINGLE_STEP): Document that single_step takes
+	a target_signal as arg type, not a pid.
+
+Fri Jul 12 11:10:05 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+	* gdb.texinfo:  Document `set assembly-language'.
+
+Thu Jul 11 13:50:28 1996  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* remote.texi: Update list of stubs in the GDB distribution.
+
+Fri Jul  5 15:38:54 1996  Fred Fish  <fnf@cygnus.com>
+
+	* gdbint.texinfo (NO_MMCHECK): Renamed from NO_MMALLOC_CHECK.
+	Also document that some systems can use mmalloc but must define
+	this if their C runtime allocates memory that is later freed.
+	(MMCHECK_FORCE): Document new macro.
+
+Fri Jun 28 22:17:10 1996  Dawn Perchik  <dawn@cygnus.com>
+
+	* remote.texi: Add documentation for target Sparclet.
+
+Mon Jun 24 18:12:22 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)
+
+	* Makefile.in (srcdir, VPATH, prefix, infodir, INSTALL,
+	INSTALL_PROGRAM, INSTALL_DATA): Use autoconf set values.
+	* configure.in: Rewritten for autoconf.
+	* configure: New.
+
+Mon Jun 17 10:43:41 1996  Fred Fish  <fnf@cygnus.com>
+
+	* Makefile.in (DVIPS): New define, set to dvips.
+	(dvi): Add stabs.dvi.
+	(ps): New target.
+	(all-doc): Depend on info, dvi, and ps targets.
+	(STAGESTUFF): Add *.ps and *.dvi files.
+	(clean-info, clean-dvi): Remove.
+	(mostlyclean): Does not depend upon clean-info or clean-dvi,
+	rules completely rewritten.
+	(maintainer-clean): Remove clean-info and clean-dvi
+	dependencies and put their actions in the rules.
+	(gdb.ps): New target
+	(gdb.dvi, gdbgui.dvi, gdbint.dvi, stabs.dvi): Remove
+	intermediate TeX files, whether they have 2 or 3 character
+	extensions.
+	(gdbint.ps): Add target and rules.
+	(gdb-internals): Delete unused target.
+	(Makefile): Depends upon config.status also.
+
+Sat Mar 30 15:46:58 1996  Fred Fish  <fnf@cygnus.com>
+
+	* gdbint.texinfo (CC_HAS_LONG_LONG): Clarify when/how this is
+	set.
+
+Sat Mar 16 15:10:20 1996  Fred Fish  <fnf@cygnus.com>
+
+	From Peter Schauer <Peter.Schauer@Regent.E-Technik.TU-Muenchen.DE>
+	* gdb.texinfo (Expressions): Fix erroneous array constant example.
+
+Sat Mar 16 13:28:45 1996  Fred Fish  <fnf@cygnus.com>
+
+	* gdb.texinfo: Add missing "@bullet" to some "@itemize" commands.
+
+Sat Feb 10 03:28:36 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+	* gdb.texinfo (Print settings):  Document
+	`set/show print static-members' commands.
+
+Wed Jan 10 14:16:37 1996  Fred Fish  <fnf@cygnus.com>
+
+	* gdbint.texinfo (Native): Document name change, coredep.c to
+	core-aout.c.
+
+Wed Dec 13 12:35:28 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+	* stabs.texinfo (Include Files): Document the values the SunOS4
+	linker creates for N_BINCL/N_EINCL/N_EXCL stabs.
+
+Fri Dec  8 21:08:44 1995  Fred Fish  <fnf@cygnus.com>
+
+	* gdbint.texinfo (Releases): Change gdb.tar.Z to gdb.tar.gz.
+	Fix typo.
+
+Fri Dec  1 11:07:50 1995  Fred Fish  <fnf@cygnus.com>
+
+	* gdbint.texinfo (Releases): Make "gdb.tar.gz" rather than
+	"gdb.tar.Z".
+
+Wed Sep 20 13:14:10 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+	* Makefile.in (maintainer-clean): New target, synonym for
+	realclean.
+
+Wed Sep 20 08:16:03 1995  steve chamberlain  <sac@slash.cygnus.com>
+
+	* gdbint.texinfo (GETENV_PROVIDED, FCLOSE_PROVIDED): Document.
+
+Thu Aug  3 10:45:37 1995  Fred Fish  <fnf@cygnus.com>
+
+	* Update all FSF addresses except those in COPYING* files.
+
+Wed Jul 19 18:43:03 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+	From Richard Earnshaw (rearnsha@armltd.co.uk):
+	* gdb.texinfo (convenience variables): Document $_exitcode.
+	(quit): Document optional expression to use as exit code.
+
+Thu Jun 22 21:27:33 1995  Victoria Mixon  <victoria@cygnus.com>
+
+	* gdb.texinfo, remote.texi: Brought up to date with various
+	GDB changes.
+
+Tue Jun 20 14:35:38 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdb.texinfo: Update dates and versions, fix comments about
+	hardware watchpoints in future releases and about the
+	sharedlibrary command.
+
+Mon May  8 09:30:36 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Remove node `XCOFF differences'.  Describe value of
+	C_FUN stab.  Other cleanups.
+
+Wed Apr 19 07:02:19 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* remote.texi (Bootstrapping): Clarify that flush_i_cache is only
+	for the sparc stub.
+
+Tue Apr 11 11:41:49 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* annotate.texi: Clarify which addresses have differing formats
+	depending on the language and which do not.
+
+Tue Mar 28 16:56:22 1995  J.T. Conklin  <jtc@rtl.cygnus.com>
+
+	* remote.texi (NetWare): Changed example to use BOARD= instead of
+	  NODE= argument to reflect correspoding change to gdbserve.nlm.
+
+Fri Mar 17 06:47:02 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Negative Type Numbers): Mention the fact that
+	GDB, as well as AIX dbx, supports the size type attribute.
+
+Thu Mar 16 12:11:32 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Negative Type Numbers): Document types -31 to -34.
+
+Mon Mar 13 16:49:13 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+	* gdb.texinfo (Define):  Document $arg0... arguments to commands,
+	and new 'if' and 'while' commands.
+
+Fri Feb 17 15:24:35 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+	* gdb.texinfo (Artificial arrays):  Note use of coerce-to-array-type.
+
+Wed Feb 15 11:59:18 1995  J.T. Conklin  <jtc@rtl.cygnus.com>
+
+	* all-cfg.texi: New flag, GDBSERVE, for NetWare's gdbserve.nlm.
+	* remote.texi (NetWare): New node, how to use gdbserve.nlm on
+	  NetWare targets.  Mostly stolen from the Server node.
+
+Fri Feb 10 20:20:08 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Setting): Talk about the language of a source file
+	versus the working language.  The old documentation did not match
+	what GDB did.
+
+Wed Feb  1 20:26:36 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Source Files): Document N_SO used to mark the end
+	of a source file.
+
+Mon Jan 23 14:23:37 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Processes): New node.
+
+Tue Jan 17 14:09:03 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>
+
+	* remote.texi: Update documentation of set/show mipsfpu.
+
+Fri Jan  6 17:17:28 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+	* gdbgui.texinfo: New file, manual for GUI (gdbtk) users.
+	* Makefile.in (gdbgui.dvi, gdbgui.info): New actions.
+
+Sun Sep  4 16:47:21 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+	* gdbint.texinfo: Removed mentions of some incorrectly placed and
+	obsolete conditionals, described some others.
+
+Mon Aug  1 15:42:39 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdbint.texinfo: Remove references to BROKEN_LARGE_ALLOCA and
+	SET_STACK_LIMIT_HUGE; they were removed from GDB 14 May 1994.
+
+Mon Aug  1 15:12:02 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+	* gdbint.texinfo: Put regex conditionals in their own table.
+
+Tue Jul 26 18:32:52 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+	* gdbint.texinfo: Removed mentions of many obsolete conditionals,
+	described or fixed the descriptions of many others.
+
+Sun Jul 17 14:14:03 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+	* gdb.texinfo: Add some more credits.
+	* gdbint.texinfo: Capitalize GDB consistently, describe some
+	macros and remove some.
+
+Thu Jul 14 18:43:17 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+	* gdbint.texinfo: Removed mentions of many incorrectly placed and
+	obsolete conditionals, described some others.
+
+Tue Jul 12 12:23:15 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+	* gdb.texinfo (help targets):  Changed to `help target', which
+	is the correct gdb command.
+
+Wed Jun 22 18:00:51 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* annotate.texi (TODO): New node, for keeping track of annotations
+	suggested but not yet implemented.
+
+Wed Jun  1 16:10:45 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Statics): Value of xcoff C_BSTAT points to
+	another symbol, it is not the address itself.
+
+Thu May  5 20:23:36 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+	* stabs.texinfo (Stab Section Basics): Add comment about alignment
+	of stabs-in-coff sections.
+
+Wed May  4 06:26:11 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* annotate.texi: Change edition to 0.5 and date to May 1994.
+	Add index.
+	(Frames): New node, for frame annotation.
+	(Displays): New node, for display annotation.
+
+	* remote.texi (MIPS Remote): Say that set timeout doesn't apply
+	when waiting for your program to stop.
+
+Fri Apr 29 18:24:46 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* annotate.texi (Breakpoint Info): Document annotation of header
+	fields and record annotation.
+
+Thu Apr 28 07:44:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* annotate.texi: New file, to document annotations.
+
+Thu Apr 21 14:20:51 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* Makefile.in (clean): Don't remove GDBvn.texi (apparently on Jan
+	16 I meant to make this change but did not).  Do remove gdb-cfg.texi.
+
+Wed Apr 20 11:22:48 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Stab Section Basics): Say what is in .stab
+	section, and say n_strx field is compilation unit relative.
+	* stabs.texinfo: Don't use @code for a.out when it is the name of
+	an object file format.
+
+Wed Apr 13 20:29:54 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
+
+	* gdb.texinfo: Refer to file names, not path names, per rms
+	convention.
+	(Arguments): Fix typo.
+
+Thu Mar 24 08:09:12 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Global Variables): Talk about stabs in files
+	where variables are referenced, but not defined.
+
+Wed Mar 23 07:16:36 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Move stuff on @ and # type descriptors from node
+	Cplusplus to new nodes Member Type Descriptor and Method Type
+	Descriptor.  Re-write stuff for #.
+
+Wed Mar 16 08:20:19 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Print Settings): Don't document "set print
+	fast-symbolic-addr off".  The bug which it worked around was fixed
+	on 25 Feb 94 in coffread.c, so I'm nuking the command.
+
+	* stabs.texinfo (Alternate Entry Points): New node, rewritten from
+	N_ENTRY node.
+
+	* stabs.texinfo (Type Descriptors): Add 'Y' type descriptor.
+
+Tue Mar 15 08:43:02 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdbint.texinfo (Host Conditionals, Target Conditionals): Remove
+	references to ieee-float.c.
+
+Fri Mar 11 08:09:40 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Set Breaks): Update documentation for tbreak to
+	match what the code actually does.
+
+Wed Mar  9 19:43:05 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Symbol Descriptors): Add OS9000 symbol descriptor s.
+
+Tue Mar  1 17:04:43 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
+
+	* stabs.texinfo (Type Descriptors): Add OS9000 type descriptors c,
+	i, and b.
+
+Wed Feb 23 10:44:18 1994  Jim Kingdon  (kingdon@rtl.cygnus.com)
+
+	* stabs.texinfo: Document N_RBRAC as function relative for COFF as
+	well as for ELF and SOM.  Unify the descriptions of ELF and SOM
+	as "stabs in sections" rather than just saying "ELF and SOM".
+	Also make that stuff apply to COFF.
+
+Fri Feb 18 08:25:58 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Formatting Documentation): Change GhostScript to
+	Ghostscript.
+
+Fri Feb  4 06:31:31 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Continuing and Stepping): When talking about "step"
+	versus functions without line numbers, also mention stepping into
+	them as well as "step" when you are in them.  Tell the user how to
+	deal with the situation.  Add comment about "debugging information".
+
+Thu Feb  3 11:39:59 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Enumerations): Document restriction on where
+	enumeration types can appear and still win with GDB.
+
+Wed Feb  2 11:29:17 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Negative Type Numbers): Document format for type
+	-16.
+
+Thu Jan 27 16:53:56 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Selection, Frame Info): Update information about
+	arbitrary frame specficiations.
+
+Wed Jan 26 15:31:57 1994  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo, remote.texi: general editing pass prior to Net release
+
+Tue Jan 25 12:12:04 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (String Field): Discuss continuing stabs with ?.
+
+Wed Jan 19 06:39:24 1994  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+	* stabs.texinfo (Non-Stab Symbol Types): Mention N_SET* | N_EXT.
+
+Sun Jan 16 12:43:32 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Re-do stuff about C_BSTAT and move from XCOFF
+	Differences node to Statics node.
+	(Statics): Discuss XCOFF use of V symbol descriptor.
+
+	* Makefile.in: Remove refcard.dvi and GDBvn.texi in realclean,
+	not clean.
+
+Wed Jan 12 21:29:54 1994  John Gilmore  (gnu@cygnus.com)
+
+	* gdb.texinfo (Print Settings): Document `set print
+	fast-symbolic-addr' and improve the doc for some other
+	`set print's.
+
+Mon Jan  3 17:23:07 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (String Field): Talk about defining several type
+	numbers at once.
+	Fix lint regarding changing node ELF Transformations to
+	ELF and SOM Transformations.
+
+Fri Dec 31 00:42:43 1993  John Gilmore  (gnu@cygnus.com)
+
+	* stabs.texinfo:  Insert Peter Kessler's name as inventor (I think).
+
+Tue Dec 28 09:30:40 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Cross-References): `::' is for nested types only
+	within <>.
+	(Structures): Document static members.
+
+Mon Dec 27 13:55:04 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Document S type attribute.
+
+Sun Dec 26 20:46:36 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)
+
+	* stabs.texinfo: Add notes about stabs-in-som where appropriate.
+
+Fri Dec  3 19:13:19 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Fix a few typos.
+
+Sun Nov 28 18:06:25 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo, remote.texi: formatting improvements
+
+	* gdb.texinfo (New Features): mention threads.
+	(Summary, C): fix xrefs in newly contributed text.
+	(Threads): index entries, clarifications, example
+	(passim): minor typos fixed, phrasing improvements
+
+	* remote.texi (Bootstrapping): rephrase text on ^C and add index
+	entries; (Server): explain use of gdbserver w/real-time systems,
+	add example of conflicting TCP port; (MIPS Remote) break up
+	running text into table, highlighting commands, and add example.
+
+Wed Nov 24 14:15:56 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* refcard.tex: avoid bad linebreaks even when REFEDITS=psrc.sed
+
+Fri Nov 12 16:10:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Nested Symbols): New node.
+	(String Field, Symbol Descriptors, Cross-References): Refer to it.
+
+Thu Nov 11 13:26:45 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Stabs in ELF): Clarify how Bbss.bss work with respect
+	to picking which Bbss.bss symbol to use, and (because there seems to
+	be no good way of doing it) re-write some of the text to make it
+	sound like Bbss.bss isn't such a great idea after all (as currently
+	designed).
+
+	* gdb.texinfo (C): In addition to saying people have to use g++ for
+	good results, say they have to use stabs.  Specifically say cfront
+	doesn't work well.
+	(Summary): Merge in information on Modula-2, Pascal, and Chill from
+	the gdb README.  Add xrefs to places where the support for the various
+	languages is described in detail.
+
+Mon Nov  8 11:47:34 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Clean up stuff about visibility and virtual
+	characters.
+
+	* stabs.texinfo (N_M2C): Cite Sun doc.
+
+Fri Nov  5 16:27:27 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo: updates re threads.
+	* remote.texinfo: avoid index entries starting with digits.
+
+Tue Nov  2 09:08:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Enumerations): Talk about large, negative and
+	octal values.  Clean up cross reference to type attributes.
+	(String Field): Say that GDB 4.11 supports size attribute.
+
+Sun Oct 31 13:31:10 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* remote.texi (VxWorks Remote): Clarify that rebuilding VxWorks kernel
+	is a mandatory step.  Make the stuff about that more concise.
+
+Wed Oct 27 00:25:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Class Names): New node.
+
+	* gdb.texinfo (Command Files): Explain order of init file reading.
+
+	* remote.texi (Bootstrapping): Talk about getting the serial driver
+	to deal with ^C sent by gdb to stop the remote system.
+
+Mon Oct 25 03:25:41 1993  Tom Lord  (lord@cygnus.com)
+
+	* libgdb.texinfo (I/O): incorporated better phrasing from rich.
+
+	* libgdb.texinfo (Defining Commands): made the DOC arg
+	to gdb_define_app_command a char * instead of char **
+	per a suggestion from kingdon.
+
+	* libgdb.texinfo: total rewrite from a different starting
+	premise.
+
+Wed Oct 20 18:07:44 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Local Variable Parameters): Re-write paragraph on
+	floats passed as doubles (to improve clarity).
+
+Tue Oct 19 14:21:18 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo (Source Path): index entries for $cwd, $pdir
+
+	* a4rc.sed: update to work with Andreas Vogel papersize params
+
+	* refcard.tex: use Andreas Vogel simplifications of papersize
+	params; remove useless version info; update copyright date.
+
+Tue Oct 19 10:46:22 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Symbols): Add class NAME to doc for ptype.
+
+Tue Oct 12 09:11:45 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Files): Say what address the load command loads it at.
+
+	* stabs.texinfo (Common Blocks): Minor cleanups.
+
+	* stabs.texinfo: Update ld stabs in elf relocation to reflect the fact
+	that Sun has backed away from the linker kludge and thus the relevant
+	issue is changes to the SunPRO tools, not the Solaris linker.
+
+	* stabs.texinfo (Traditional Integer Types): Clean up description
+	of octal bounds a little bit.  Document extra leading zeroes.
+
+Thu Oct  7 16:15:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Signaling): Update for symbolic symbol names
+	and add a section explaining the difference between the GDB
+	signal command and the shell kill utility.
+
+Wed Oct  6 13:23:01 1993  Tom Lord  (lord@rtl.cygnus.com)
+
+	* libgdb.texinfo: added `@' to braces that were unescaped.
+
+Mon Oct  4 10:42:18 1993  Tom Lord  (lord@rtl.cygnus.com)
+
+	* libgdb.texinfo: new file.  Spec for the gdb library.
+
+Sun Oct  3 15:26:56 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Include Files): Fix typo (start -> end).
+
+Thu Sep 30 18:24:56 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo, remote.texi: assorted small improvements, mostly
+	from Melissa at FSF's editing pass.
+
+Thu Sep 30 11:54:38 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo: Remove stuff about ar and 14 character filenames.
+	I believe this was fixed by the 13 Sep 89 change to print_frame_info.
+	Also, modern versions of ar like BSD 4.4 or SVR4 don't have this bug.
+
+Wed Sep 22 21:22:11 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* remote.texi (Bootstrapping): Discuss 386 call gates.
+
+Sat Sep 18 17:10:44 1993  Jim Kingdon  (kingdon@poseidon.cygnus.com)
+
+	* stabs.texinfo (Based Variables): New node.
+
+Thu Sep 16 17:48:55 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)
+
+	* stabs.texinfo (Negative Type Numbers): Re-write discussions of
+	names, sizes, and formats to suggest how not to lose.
+
+Sat Sep 11 09:35:11 1993  Jim Kingdon  (kingdon@poseidon.cygnus.com)
+
+	* stabs.texinfo (Methods): Fix typo.
+
+Fri Sep 10 06:34:20 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+	* gdb.texinfo: Fix a few typos.
+
+Wed Sep  8 09:11:52 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo: Clarify how well it works with Fortran.
+
+	* stabs.texinfo (Stabs In ELF, Statics, ELF Transformations):
+	More on relocating stabs in ELF files.
+
+Tue Sep  7 13:45:02 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Stabs In ELF): Talk about N_FUN value.
+
+Mon Sep  6 19:23:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Local Variable Parameters): Talk about nameless
+	parameters on VAX.
+
+Fri Sep  3 17:06:08 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo: @up/@down -> @raisesections/@lowersections
+
+Fri Sep  3 12:04:15 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Make info author notice match the TeX author notice.
+
+Tue Aug 31 13:21:06 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+	* stabs.texinfo: Initial-caps all words in node names and
+	non-trivial words in section names.
+
+Mon Aug 30 11:13:16 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Many minor cleanups.
+
+	* stabs.texinfo: Remove @deffn except from Expanded Reference node.
+
+Sat Aug 28 12:08:09 1993  David J. MacKenzie  (djm@edison.eng.umd.edu)
+
+	* stabs.texinfo: Remove full description of big example.
+	It's not really helpful; just use pieces of it where appropriate.
+	Add more Texinfo formatting directives (@samp, etc.).
+	Use @deffn to define stab types.
+	Eliminate some wordiness.  Break up some nodes.
+	Add an (alphabetized) index of symbol types.
+	Use consistent capitalization style in node and section names.
+
+Thu Aug 26 06:36:31 1993  Fred Fish  (fnf@deneb.cygnus.com)
+
+	* gdb.texinfo:  Change typo "Two two" to "The two".
+
+Sun Aug 22 12:15:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (XCOFF-differences): Remove references to
+	non-existent types N_DECL and N_RPSYM.
+
+	* stabs.texinfo (String Field): Say that type attributes bug is
+	fixed in GDB 4.10, since it is.
+
+	* stabs.texinfo: Clean up djm cleanups, and more cleanups of my own.
+
+Sat Aug 21 04:32:28 1993  David MacKenzie  (djm@cygnus.com)
+
+	* stabs.texinfo: Formatting cleanups.
+
+Fri Aug 20 20:49:53 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: When explaining the n_type of a stab, standardize
+	how we do it ('#' as a comment indicator, "36 is N_FUN" as text,
+	no tabs, use @r).
+	(Global Variables): Clean up.
+
+Tue Aug 17 15:57:27 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Stack Variables): Re-write.
+
+Mon Aug 16 21:20:08 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Stabs-in-elf): Talk about getting the start
+	addresses of a source file.  Also revise formatting.
+	Change "object module" or "object file" to "source file".
+	Various: Miscellaneous cleanups.
+
+Thu Aug 12 15:11:51 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Point to mangling info in gcc's gpcompare.texi.
+
+Tue Aug 10 16:57:49 1993  Stan Shebs  (shebs@rtl.cygnus.com)
+
+	* gdbint.texinfo: Removed many nonsensical machine-collected
+	host and target conditionals, described some of the remainder.
+
+Tue Aug 10 13:28:30 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdbint.texinfo (Getting Started): Use @itemize, not @table.
+
+	* gdbint.texinfo (Top): Add name to @top line, and re-write the
+	paragraph which follows.
+
+	* gdbint.texinfo (Host): Use @code not @samp for Makefile
+	variables.  Looks better and avoids overful hbox.
+
+Fri Jul 30 18:26:21 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Procedures): Improve stuff on nested functions.
+
+Thu Jul 29 15:10:58 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* remote.texi: (MIPS Remote) clearer doc for set/show timeout,
+	retransmit-timeout
+
+Thu Jul 29 13:16:09 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdbint.texinfo: Update statement about `some ancient Unix
+	systems, like Ultrix 4.0' to Ultrix 4.2.
+
+Wed Jul 28 15:26:53 1993  Roland H. Pesch  (pesch@el_bosque.cygnus.com)
+
+	* h8-cfg.texi, all-cfg.texi: new flag GDBSERVER
+
+	* Makefile.in: depend on remote.texi rather than gdbinv-s.texi
+
+	* remote.texi: (Server) New node on gdbserver.  (Remote Serial,
+	ST2000 Remote, MIPS Remote): mention `host:port' syntax for TCP.
+
+	* remote.texi: new name for former gdbinv-s.texi
+
+	* gdb.texinfo: use remote.texi rather than gdbinv-s.texi
+
+Wed Jul 28 08:26:24 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+	* gdbinv-s.texi: Documented timeout and retransmit-timeout
+	variables for MIPS remote debugging protocol.
+
+Mon Jul 26 13:00:09 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Negative Type Numbers): FORTRAN LOGICAL fix.
+
+Tue Jul 20 16:30:41 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)
+
+	* Makefile.in (refcard.dvi): Use srcdir where necessary.
+
+Mon Jul 19 12:02:50 1993  Roland H. Pesch  (pesch@cygnus.com)
+
+	* gdb.texinfo: repair conditional bugs in text markup
+
+Fri Jul 16 18:57:50 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo, all-cfg.texi, h8-cfg.texi: introduce MOD2 switch
+	to select Modula-2 material.
+
+Thu Jul 15 13:15:01 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Cleanups regarding statics.
+
+	* gdbinv-s.texi (Bootstrapping): Document exceptionHandler.
+	(Debug Session): Mention exceptionHandler.  Add xref to Bootstrapping.
+
+Mon Jul 12 13:37:02 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: N_MAIN is sometimes used for C.
+
+Fri Jul  9 09:47:02 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+	* gdbint.texinfo (Host, Target Conditionals): Remove TM_FILE_OVERRIDE.
+
+Tue Jul  6 12:41:28 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo (Target Conditionals): Remove NO_TYPEDEFS,
+	removed from the code by Kingdon.
+
+Tue Jul  6 12:24:34 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* gdb.texinfo (Break Commands): Remove stuff about flushing terminal
+	input when evaluating breakpoint conditions; the bug has been fixed.
+
+	* gdb.texinfo (Continuing and Stepping): Argument to "continue"
+	sets the ignore count to N-1, not to N.
+
+Thu Jul  1 14:57:42 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* refcard.tex (\hoffset): correct longstanding error to match
+	  intended offset; avoids cutting off edge on some printers
+
+Wed Jun 30 18:23:06 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Parameters): Say that order of stabs is significant.
+
+Fri Jun 25 21:34:52 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Common Blocks): Say what Sun FORTRAN does.
+
+Fri Jun 25 16:15:10 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* Makefile.in: (REFEDITS) new var to control whether PS or CM
+	fonts and whether US or A4 paper for GDB refcard; (refcard.dvi)
+	collect sed edits if any, apply to refcard before formatting;
+	(refcard.ps) stop implying PS fonts if PS output requested;
+	(lrefcard.ps) delete extra target for variant PS fonts
+
+	* refcard.tex: parametrize papersize dependent info, collect
+	  in easily replaced spot
+
+	* a4rc.sed: new file, edits to refcard for A4 paper
+
+Fri Jun 25 14:21:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Negative Type Numbers): Type -16 is 4 bytes.
+
+Wed Jun 23 15:02:50 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Negative Type Numbers): Minor character cleanups.
+
+Tue Jun 22 16:31:52 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Express disapproval of 'D' symbol descriptor
+	politely rather than rudely.
+
+Fri Jun 18 19:42:09 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Document common blocks.
+
+Fri Jun 18 12:12:57 1993  Fred Fish  (fnf@cygnus.com)
+
+	* stabs.texinfo:  Add some basic info about stabs-in-elf.
+
+Fri Jun 18 13:57:09 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Top): Minor cleanup.
+
+Mon Jun 14 16:16:51 1993  david d `zoo' zuhn  (zoo at rtl.cygnus.com)
+
+	* Makefile.in (install-info): remove parentdir support
+
+Tue Jun 15 18:11:39 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo (Copying): delete this node and references to it;
+	RMS says this manual need not carry GPL. (passim): Improvements
+	from last round at FSF, largely due to Ian Taylor review, and
+	minor formatting improvements.
+
+	* gdbinv-s.texi (passim): Improvements from last round at FSF,
+	largely due to Ian Taylor review. (Debug Session): minor edits to
+	new text.
+
+Sun Jun 13 12:52:39 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* Makefile.in (realclean): Remove info and dvi files too.
+
+Sat Jun 12 16:09:22 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* {all,h8}-config.texi: Rename to *-cfg.texi for 14 char filenames.
+	* Makefile.in: Change accordingly.  gdb-config.texi -> gdb-cfg.texi.
+	* gdb.texinfo: Change accordingly.
+
+	* stabs.texinfo: Clean up N_{L,R}BRAC.  Discuss what addresses of
+	N_{L,R}BRAC,N_SLINE are relative to.
+
+Fri Jun 11 15:15:55 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* Makefile.in (GDBvn.texi): Update atomically.
+
+Wed Jun  9 10:58:16 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* gdbinv-s.texi (Debug Session): Document exceptionHook.
+
+Tue Jun  8 13:42:04 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* gdb.texinfo (Print Settings): Move all stuff relating to symbolic
+	addresses together.  Also motivate the set print symbol-filename
+	command and suggest other solutions.
+
+Tue Jun  1 22:46:43 1993  Fred Fish  (fnf@cygnus.com)
+
+	* gdb.texinfo (set print elements):  Note that the number of
+	elements is set to unlimited by "set print elements 0".
+
+Mon May 31 08:06:55 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* stabs.texinfo (Builtin Type Descriptors): Try to clarify what
+	NF_LDOUBLE means.
+	(Stab Types): Include Solaris stab types.
+	(Procedures): Document Solaris extensions.
+
+Thu May 27 06:20:42 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+	* gdb.texinfo:  Add `set print symbol-filename' doc.
+
+Wed May 26 00:26:42 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Arrays): Talk about type definition vs. type
+	information.
+
+	* stabs.texinfo (Builtin Type Descriptors): Talk about omitting
+	the trailing semicolon.
+
+Tue May 25 14:49:42 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Line Numbers, Source Files): Re-write these two nodes
+	and merge in other parts of the document addressing these subjects.
+	gdbint.texinfo (XCOFF): Remove info which is now in stabs.texinfo.
+
+	* stabs.texinfo (Subranges, Arrays): Try to explain about the semicolon
+	at the end of a range type.
+
+	* stabs.texinfo (Subranges): "A offset" and "T offset" are not
+	AIX extensions.
+
+Mon May 24 09:00:33 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Stabs Format):  Misc fixes.
+
+Sat May 22 10:40:56 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Constants):  Allow an `e' constant to be non-enum.
+	(Traditional builtin types): Document convex convention for long long.
+	(Negative builtin types): Discuss type names, and misc fixes.
+
+Fri May 21 11:20:31 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Builtin Type Descriptors): Document the floating
+	point types used with @samp{R} type descriptor.
+	(Symbol Descriptors): Describe how to handle conflict between
+	different meanings of @samp{P} symbol descriptor.
+
+Thu May 20 13:35:10 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo: Remove node Quick Reference and put its children
+	directly under the main menu.
+
+	* stabs.texinfo: Many more changes to bring it into line with
+	AIX documentation and reality.  I think it now has all the
+	information from the AIX documentation, except that I burned
+	out when I got to variant records (Pascal and Modula-2) and
+	all the COBOL types.  Oh well, we can add them later when we're
+	worrying more about those languages.
+
+	* stabs.texinfo (Automatic variables): Talk about what it means
+	to omit the symbol descriptor.
+
+Tue May 18 17:59:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* stabs.texinfo (Parameters): Add "(sometimes)" when describing
+	gcc2 behavior with promoted args.
+
+Fri May 14 21:35:29 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo: include readline appendices in info version of manual
+
+Fri May  7 11:56:18 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdbinv-s.texi (Remote Serial): describe new ^C behavior in
+	target remote.
+
+	* gdb.texinfo (Machine Code): more index entries for disassemble
+
+Fri May  7 10:12:30 1993  Fred Fish  (fnf@cygnus.com)
+
+	* Clarify the intended use of the gdb-testers and gdb-patches
+	mailing lists, and shrink gzip comment.
+
+Thu May  6 16:39:50 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo (Shell Commands): do not mention SHELL env var in
+	DOSHOST configuration of manual.
+
+	* gdb.texinfo (MIPS Stack): new node.
+
+	* all-config.texi (MIPS) new switch.
+
+	* gdbinv-s.texi (Nindy Options) Remove two instances of future
+	tense; (MIPS Remote) new node.
+
+	* gdb.texinfo (passim) rephrases to work around makeinfo @value
+	bug; (Environment) less passive, other small cleanups in text about
+	.cshrc/.bashrc; (Invoking GDB) new MIPS Remote menu entry;
+	(Remote) new MIPS Remote menu entry.
+
+Thu Apr 29 09:36:25 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* stabs.texinfo: Many changes to include information from the
+	AIX documentation.
+
+	* gdb.texinfo (Environment): Mention pitfall with .cshrc.
+
+Thu Apr 29 00:03:59 1993  Fred Fish  (fnf@cygnus.com)
+
+	* gdbint.texinfo (LONG_LONG):  Replace with CC_HAS_LONG_LONG.
+	Add PRINTF_HAS_LONG_LONG references.
+
+Wed Apr 28 11:39:18 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo: Make node "Shell Commands" unconditional; describe
+	`set demangle-style arm' (not cfront); mention can type `q' to
+	discard output, when gdb pages.
+
+Tue Apr 27 14:02:57 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* gdbint.texinfo (new node Debugging GDB, elsewhere):
+	Move a bunch of information from ../README.
+	(Getting Started): New node.
+
+Fri Apr 23 17:21:13 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdbinv-s.texi, gdb.texinfo: include Hitachi SH target
+
+	* gdb.texinfo: advance manual revision dates to present
+
+	* gdbinv-s.texi, gdb.texinfo, all-config.texi, h8-config.texi:
+	stop using silly Roman numerals in @set variable names
+
+Fri Apr 23 07:30:01 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* stabs.texinfo (Parameters): Keep trying to get this right.
+
+Wed Apr 21 15:18:47 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* stabs.texinfo (Parameters): More on "local parameters".
+
+Mon Apr 19 08:00:51 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* stabs.texinfo (Parameters): Re-do "local parameters" section.
+
+Sun Apr 18 09:47:45 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* stabs.texinfo (Symbol descriptors): Re-do using @table and @xref.
+	(Parameters): Rewrite.
+	(xcoff-differences, Sun-differences): Minor changes.
+
+Thu Apr 15 02:35:24 1993  John Gilmore  (gnu@cacophony.cygnus.com)
+
+	* stabs.texinfo:  Minor cleanup.
+
+Wed Apr 14 17:31:00 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* gdbint.texinfo: Minor xcoff stuff.
+
+Wed Apr  7 14:11:07 1993  Fred Fish  (fnf@cygnus.com)
+
+	* gdbint.texinfo:  Update for new config directory structure.
+	Add info about internal type data structures.
+
+Mon Apr  5 09:06:30 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+	* Makefile.in (SFILES_INCLUDED): gdb-config.texi is no longer in
+	$(srcdir).
+	(gdb-config.texi): Depend on file in $(srcdir).
+
+Fri Apr  2 16:55:13 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* stabs.texinfo: Fixes about N_SO.
+
+Mon Mar 29 15:03:25 1993  Fred Fish  (fnf@cygnus.com)
+
+	* gdbinit.texinfo:  Document renaming of tm-29k.h to tm-a29k.h.
+
+Fri Mar 26 18:00:35 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo: include list of nonstandard init file names
+
+	* *-config.texi: new switch GENERIC for text that applies *only*
+	to (usual) multiple-target version of manual
+
+	* gdb.texinfo, gdbinv-s.texi: Update conditional markup to correct
+	h8 config
+
+	* gdb.texinfo: depend on latest fixed makeinfo, use conditionals
+	in menus (rather than conditionally selected multiple alternative
+	menus).
+
+	* Makefile.in: define and use DOC_CONFIG var to select
+	configuration for GDB user manual.
+
+	* gdb-config.texi: delete from repository, generate from Makefile.
+
+	* all-config.texi: normal `generic' configuration file, formerly
+	stored as gdb-config.texi
+
+Wed Mar 24 14:03:19 1993  david d `zoo' zuhn  (zoo at poseidon.cygnus.com)
+
+	* Makefile.in: add dvi target to build all .dvi files
+
+Tue Mar 23 16:03:24 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo, gdvinv-s.texinfo: formatting improvements.
+
+Tue Feb 23 11:46:11 1993  Mike Stump  (mrs@cygnus.com)
+
+	* stabs.texi: The `this' pointer is now known by the name
+	`this' instead of `$t'.
+
+Fri Mar 19 21:46:50 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Doc NO_MMALLOC and NO_MMALLOC_CHECK as
+	host conditionals.
+	* stabs.texinfo:  More array fixes inspired by Jim's.
+
+Fri Mar 19 10:23:34 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* stabs.texinfo: Fixes re arrays and continuations.
+
+	* gdbint.texinfo: Add XCOFF node.
+
+Mon Mar  8 15:52:18 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdb.texinfo:  Add `set print max-symbolic-offset' doc.
+
+Sun Feb 21 17:09:38 1993  Per Bothner  (bothner@rtl.cygnus.com)
+
+	* stabs.texinfo:  Fix for array types to mention lower bounds.
+
+Thu Feb 18 01:19:49 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Update PTRACE_ARG3_TYPE doc, pull PT_*.
+
+Wed Feb 17 08:15:24 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Remove SET_STACK_LIMIT_HUGE from target defines.
+
+Thu Feb 11 10:38:40 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Fix thinko (NM_FILE => NAT_FILE).  Found
+	by Michael Ben-Gershon <mybg@CS.HUJI.AC.IL>.
+
+Wed Feb 10 23:59:19 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Eliminate IBM6000_HOST, document IBM6000_TARGET.
+
+Wed Feb 10 23:42:37 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo: Eliminate IBM6000_HOST, document IBM6000_TARGET.
+
+Tue Feb  9 18:26:21 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo, gdbinv-s.texi: misc updates
+
+Sat Feb  6 10:25:47 1993  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Brief documentation for longjmp support,
+	from an email msg by Stu.
+
+Fri Feb  5 14:10:15 1993  John Gilmore  (gnu@cygnus.com)
+
+	* stabs.texinfo:  Fix description of floating point "range"
+	types (which really define basic types).  Reported by Jim Meehan,
+	<meehan@src.dec.com>.
+
+	* gdbint.texinfo:  Remove COFF_NO_LONG_FILE_NAMES define, now gone.
+
+Thu Feb  4 13:56:46 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+	* gdbint.texinfo: Slightly expand section on supporting a new
+	object file format.
+
+Thu Feb  4 01:49:04 1993  John Gilmore  (gnu@cygnus.com)
+
+	* Makefile.in (refcard.ps, lrefcard.ps):  Remove psref.tex
+	intermediate file.
+
+Tue Feb  2 12:18:06 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo, gdbinv-s.texi: miscellaneous stylistic cleanups
+
+Mon Feb  1 15:35:47 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdbinv-s.texi: z8000 simulator target name is just "sim"
+
+	* gdbinv-s.texi:  Mention that Z8000 simulator can simulate Z8001
+	as well as Z8002.
+
+Thu Dec 17 00:44:57 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo (Host Conditionals): Remove
+	NAMES_HAVE_UNDERSCORE, SOME_NAMES_HAVE_DOT, document
+	MEM_FNS_DECLARED.
+	(Target Conditionals):  Remove all of the above.
+
+Tue Dec 15 02:01:00 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo: SWAP_HOST_AND_TARGET => SWAP_TARGET_AND_HOST.
+	Noticed by Andy Jackson, <arj@cam-orl.co.uk>.
+
+Sat Nov 28 06:51:35 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Add sections on clean design and on how to send
+	in changes.
+
+Mon Nov  9 23:57:02 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Add how to declare the result of make_cleanup.
+
+Tue Oct 27 17:08:45 1992  K. Richard Pixley  (rich@cygnus.com)
+
+	* gdbint.texinfo: nm.h now included in defs.h.
+
+Mon Oct 26 11:09:47 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdb.texinfo:  Fix typo, reported by Karl Berry.
+
+Fri Oct 23 00:41:21 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdb.texinfo:  Add opcodes dir to GDB distribution description.
+
+Wed Oct 21 03:51:01 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Improve REGISTER_U_ADDR and USE_PROC_FS doc.
+
+Tue Oct 20 23:27:56 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo: Document obsolete STACK_END_ADDR.
+	(all @node commands): Use new form to avoid nitpicking errors.
+	* gdbint.texinfo: Document host/native/target split.
+
+Tue Oct 20 21:32:18 1992  K. Richard Pixley  (rich@sendai.cygnus.com)
+
+	* gdbint.texinfo: add PUSH_DUMMY_FRAME, POP_FRAME.
+
+Fri Oct 16 03:34:01 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo: Update GET_LONGJMP_TARGET, L_SET doc.
+
+Sat Oct 10 18:04:58 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)
+
+	* gdbint.texinfo: fixed a stray email address (needs @@),
+	added @table @code to node "Native Conditionals"
+
+Thu Oct  8 16:27:45 1992  K. Richard Pixley  (rich@sendai.cygnus.com)
+
+	* gdbint.texinfo: document a few more macros, create new section
+	for native macros.
+
+Thu Oct  1 01:57:56 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdb.texinfo: Document command hooks.
+
+Tue Sep 22 00:34:15 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Describe coding style of GDB.
+
+Mon Sep 21 19:32:16 1992  John Gilmore  (gnu@cygnus.com)
+
+	* stabs.texinfo:  Minor wording changes.
+
+Tue Sep 15 02:57:09 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Improve release doc slightly.
+
+Fri Sep 11 18:28:28 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo, gdbinv-m.m4.in, gdbinv-s.m4.in: First pass at doc
+	for two new remote targets---29K using UDI, and Tandem ST2000
+	using STDBUG.
+
+	* all.m4, none.m4: new m4 switch, _ST2000__
+
+	* all.m4: turn on H8/300 stuff for generic manual
+
+	* gdbinv-s.m4.in: remove text on special procedures to continue
+	after explicit call to breakpoint() in serial stubs.
+
+Fri Sep 11 01:34:25 1992  John Gilmore  (gnu@sphagnum.cygnus.com)
+
+	* gdbint.texinfo:  Improve doc of GDB config macros.
+
+Wed Sep  9 16:52:06 1992  John Gilmore  (gnu@cygnus.com)
+
+	* stabs.texinfo:  Remove Bothner's changes for C++ nested types.
+	These will be reinserted when examined.
+
+Fri Sep  4 18:53:57 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo: fix shameful error of agreement reported by
+	jimb@occs.cs.oberlin.edu (Jim Blandy)
+	* gdb.texinfo: remove old partial discussion of remote serial
+	protocol (via serial debug stubs)
+	* gdbinv-m.m4.in, gdbinv-s.m4.in: new section discussing
+	use of serial debug stubs
+
+Mon Aug 24 01:17:55 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Make a start at documenting all the #if macros
+	in GDB.  At least list them all, and start separating them into
+	host-specific and target-specific.
+
+Tue Aug 18 15:59:13 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdbinv-s.m4.in: refrain from using @cartouche for just a few
+	examples (not consistent w others).
+	gdb.texinfo: issue disclaimer paragraph on cmdline options only
+	for generic vn of doc
+
+Tue Aug 18 14:53:27 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+	* Makefile.in: always create installation directories.
+
+Tue Aug 18 14:11:50 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo: in h8 config, do not describe searching commands.
+
+Mon Aug 17 18:07:59 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo, none.m4, h8.m4, gdbinv-s.m4.in: improve H8/300
+	  conditionals; introduce a few generic switches that may be
+	  useful for other cross-dev or dos-hosted configs.
+
+	* gdb.texinfo: fix typo in "info reg" description
+
+Sun Aug 16 01:16:18 1992  John Gilmore  (gnu@cygnus.com)
+
+	* stabs.texinfo:  Minor updates from running TeX over it.
+	* Makefile.in (stabs.dvi, stabs.ps):  Add.
+
+Sat Aug 15 20:52:24 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+	* stabs.texinfo:  Stabs documentation, written by Julia Menapace.
+	First pass at converting it to texinfo.
+
+Sat Aug 15 03:14:59 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdb.texinfo, refcard.tex:  Document mult args on `info reg'.
+	* Makefile.in (refcard.ps, lrefcard.ps):  Add missing $(srdir).
+
+Fri Aug 14 21:08:47 1992  John Gilmore  (gnu@cygnus.com)
+
+	* gdbint.texinfo:  Add section on partial symbol tables.
+
+Fri Jun 19 10:28:05 1992  John Gilmore  (gnu at cygnus.com)
+
+	* gdb.texinfo:  Document new am29k setting.
+
+Sat Jun 20 16:31:10 1992  John Gilmore  (gnu at cygnus.com)
+
+	* gdb.texinfo:  document `set remotedebug' and `set
+	rstack_high_address'.
+
+Thu May 14 17:09:48 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)
+
+	* gdb.texinfo: slight expansion of new text on reading info files
+	* gdbinv-s.m4.in: correct and expand info on cross-debugging
+	H8/300 from DOS.
+
+Tue May 12 12:22:47 1992  John Gilmore  (gnu at cygnus.com)
+
+	* gdb.texinfo:  `info user' => `show user'.  Noticed by David Taylor.
+
+Mon May 11 19:06:27 1992  John Gilmore  (gnu at cygnus.com)
+
+	* gdb.texinfo:  Say how to read the `info' files.
+
+Tue May  5 12:11:38 1992  K. Richard Pixley  (rich@cygnus.com)
+
+	* Makefile.in: gm4 -> m4.
+
+Fri Apr 10 17:50:43 1992  John Gilmore  (gnu at rtl.cygnus.com)
+
+	* gdb.texinfo:  Update for GDB-4.5.  Move `Formatting
+	Documentation' ahead of `Installing GDB' to match README.
+	Update shared library doc, -readnow and -mapped, and directory
+	structure (add glob and mmalloc).  Update configure doc.
+
+Tue Mar 24 23:28:38 1992  K. Richard Pixley  (rich@cygnus.com)
+
+	* Makefile.in: remove $(srcdir) from gdb.info rule.
+
+Sat Mar  7 18:44:50 1992  K. Richard Pixley  (rich@rtl.cygnus.com)
+
+	* Makefile.in: commented out gdb-all.texinfo rule.  This is
+	  temporary.
+
+Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)
+
+	* Makefile.in, configure.in: removed traces of namesubdir,
+	  -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
+	  copyrights to '92, '13, changed some from Cygnus to FSF.
+
+Fri Dec 13 09:47:31 1991  John Gilmore  (gnu at cygnus.com)
+
+	* gdb.texinfo:  Improve how we ask for bug reports.
+
+Tue Dec 10 04:07:21 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
+
+	* Makefile.in: infodir belongs in datadir.
+
+Fri Dec  6 23:57:34 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
+
+	* Makefile.in: remove spaces following hyphens, bsd make can't
+	  cope.  install using INSTALL_DATA.  added clean-info.  added
+	  standards.text support.
+
+Thu Dec  5 22:46:12 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
+
+	* Makefile.in: idestdir and ddestdir go away.  Added copyrights
+	  and shift gpl to v2.  Added ChangeLog if it didn't exist. docdir
+	  and mandir now keyed off datadir by default.
+
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+coding: utf-8
+End:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/Doxyfile-base.in ./gdb/doc/Doxyfile-base.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/Doxyfile-base.in	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/doc/Doxyfile-base.in	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2019 Free Software Foundation, Inc.
+# Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
 # Base doxyfile for GDB.
 # This file is part of GDB.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/Doxyfile-gdb-api.in ./gdb/doc/Doxyfile-gdb-api.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/Doxyfile-gdb-api.in	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/doc/Doxyfile-gdb-api.in	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2019 Free Software Foundation, Inc.
+# Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
 # Doxygen file for GDB internal API.
 # This file is part of GDB.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/Doxyfile-gdbserver.in ./gdb/doc/Doxyfile-gdbserver.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/Doxyfile-gdbserver.in	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/doc/Doxyfile-gdbserver.in	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2019 Free Software Foundation, Inc.
+# Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
 # Doxygen file for a GDBserver cross-reference.
 # This file is part of GDB.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/Doxyfile-gdb-xref.in ./gdb/doc/Doxyfile-gdb-xref.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/Doxyfile-gdb-xref.in	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/doc/Doxyfile-gdb-xref.in	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2019 Free Software Foundation, Inc.
+# Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
 # Doxygen file for a full GDB cross-reference.
 # This file is part of GDB.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/doxy-index.in ./gdb/doc/doxy-index.in
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/doxy-index.in	2019-12-11 01:49:19.000000000 +0000
+++ ./gdb/doc/doxy-index.in	2024-02-01 01:47:15.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2014-2019 Free Software Foundation, Inc.
+<!-- Copyright (C) 2014-2024 Free Software Foundation, Inc.
 
 Navigation page for Doxygen-generated GDB info.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gcore.1 ./gdb/doc/gcore.1
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gcore.1	2019-12-11 01:53:22.000000000 +0000
+++ ./gdb/doc/gcore.1	2024-02-01 01:52:29.000000000 +0000
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.13)
+.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,27 +38,36 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
 .ie \n(.g .ds Aq \(aq
 .el       .ds Aq '
 .\"
-.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" If the F register is >0, we'll generate index entries on stderr for
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+.    if \nF \{\
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{\
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GCORE 1"
-.TH GCORE 1 "2019-12-11" "gdb-9.0.50.20191211-git" "GNU Development Tools"
+.TH GCORE 1 "2024-02-01" "gdb-15.0.50.20240201-git" "GNU Development Tools"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -169,11 +178,11 @@ documentation are properly installed at
 .PP
 should give you access to the complete manual.
 .PP
-\&\fIUsing \s-1GDB:\s0 A Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
+\&\fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
 Richard M. Stallman and Roland H. Pesch, July 1991.
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (c) 1988\-2019 Free Software Foundation, Inc.
+Copyright (c) 1988\-2024 Free Software Foundation, Inc.
 .PP
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.1 ./gdb/doc/gdb.1
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.1	2019-12-11 01:53:22.000000000 +0000
+++ ./gdb/doc/gdb.1	2024-02-01 01:52:29.000000000 +0000
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.13)
+.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,27 +38,36 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
 .ie \n(.g .ds Aq \(aq
 .el       .ds Aq '
 .\"
-.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" If the F register is >0, we'll generate index entries on stderr for
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+.    if \nF \{\
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{\
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GDB 1"
-.TH GDB 1 "2019-12-11" "gdb-9.0.50.20191211-git" "GNU Development Tools"
+.TH GDB 1 "2024-02-01" "gdb-15.0.50.20240201-git" "GNU Development Tools"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -133,14 +142,7 @@
 gdb \- The GNU Debugger
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
-gdb [\fB\-help\fR] [\fB\-nh\fR] [\fB\-nx\fR] [\fB\-q\fR]
-[\fB\-batch\fR] [\fB\-cd=\fR\fIdir\fR] [\fB\-f\fR]
-[\fB\-b\fR\ \fIbps\fR]
-    [\fB\-tty=\fR\fIdev\fR] [\fB\-s\fR \fIsymfile\fR]
-[\fB\-e\fR\ \fIprog\fR] [\fB\-se\fR\ \fIprog\fR]
-[\fB\-c\fR\ \fIcore\fR] [\fB\-p\fR\ \fIprocID\fR]
-    [\fB\-x\fR\ \fIcmds\fR] [\fB\-d\fR\ \fIdir\fR]
-[\fIprog\fR|\fIprog\fR \fIprocID\fR|\fIprog\fR \fIcore\fR]
+gdb [\s-1OPTIONS\s0] [\fIprog\fR|\fIprog\fR \fIprocID\fR|\fIprog\fR \fIcore\fR]
 .SH "DESCRIPTION"
 .IX Header "DESCRIPTION"
 The purpose of a debugger such as \s-1GDB\s0 is to allow you to see what is
@@ -159,12 +161,12 @@ Examine what has happened, when your pro
 Change things in your program, so you can experiment with correcting the
 effects of one bug and go on to learn about another.
 .PP
-You can use \s-1GDB\s0 to debug programs written in C, C@t{++}, Fortran and
+You can use \s-1GDB\s0 to debug programs written in C, \*(C+, Fortran and
 Modula\-2.
 .PP
 \&\s-1GDB\s0 is invoked with the shell command \f(CW\*(C`gdb\*(C'\fR.  Once started, it reads
 commands from the terminal until you tell it to exit with the \s-1GDB\s0
-command \f(CW\*(C`quit\*(C'\fR.  You can get online help from \s-1GDB\s0 itself
+command \f(CW\*(C`quit\*(C'\fR or \f(CW\*(C`exit\*(C'\fR.  You can get online help from \s-1GDB\s0 itself
 by using the command \f(CW\*(C`help\*(C'\fR.
 .PP
 You can run \f(CW\*(C`gdb\*(C'\fR with no arguments or options; but the most
@@ -193,9 +195,9 @@ would attach \s-1GDB\s0 to process \f(CW
 can omit the \fIprogram\fR filename.
 .PP
 Here are some of the most frequently needed \s-1GDB\s0 commands:
-.IP "\fBbreak [\fR\fIfile\fR\fB:]\fR\fIfunction\fR" 4
-.IX Item "break [file:]function"
-Set a breakpoint at \fIfunction\fR (in \fIfile\fR).
+.IP "\fBbreak [\fR\fIfile\fR\fB:][\fR\fIfunction\fR\fB|\fR\fIline\fR\fB]\fR" 4
+.IX Item "break [file:][function|line]"
+Set a breakpoint at \fIfunction\fR or \fIline\fR (in \fIfile\fR).
 .IP "\fBrun [\fR\fIarglist\fR\fB]\fR" 4
 .IX Item "run [arglist]"
 Start your program (with \fIarglist\fR, if specified).
@@ -225,13 +227,17 @@ function calls in the line.
 .IP "\fBhelp [\fR\fIname\fR\fB]\fR" 4
 .IX Item "help [name]"
 Show information about \s-1GDB\s0 command \fIname\fR, or general information
-about using \s-1GDB\s0.
+about using \s-1GDB.\s0
 .IP "\fBquit\fR" 4
 .IX Item "quit"
-Exit from \s-1GDB\s0.
+.PD 0
+.IP "\fBexit\fR" 4
+.IX Item "exit"
+.PD
+Exit from \s-1GDB.\s0
 .PP
-For full details on \s-1GDB\s0,
-see \fIUsing \s-1GDB:\s0 A Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
+For full details on \s-1GDB,\s0
+see \fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
 by Richard M. Stallman and Roland H. Pesch.  The same text is available online
 as the \f(CW\*(C`gdb\*(C'\fR entry in the \f(CW\*(C`info\*(C'\fR program.
 .SH "OPTIONS"
@@ -239,92 +245,136 @@ as the \f(CW\*(C`gdb\*(C'\fR entry in th
 Any arguments other than options specify an executable
 file and core file (or process \s-1ID\s0); that is, the first argument
 encountered with no
-associated option flag is equivalent to a \fB\-se\fR option, and the second,
+associated option flag is equivalent to a \fB\-\-se\fR option, and the second,
 if any, is equivalent to a \fB\-c\fR option if it's the name of a file.
 Many options have
-both long and short forms; both are shown here.  The long forms are also
+both long and abbreviated forms; both are shown here.  The long forms are also
 recognized if you truncate them, so long as enough of the option is
-present to be unambiguous.  (If you prefer, you can flag option
-arguments with \fB+\fR rather than \fB\-\fR, though we illustrate the
-more usual convention.)
+present to be unambiguous.
+.PP
+The abbreviated forms are shown here with \fB\-\fR and long forms are shown
+with \fB\-\-\fR to reflect how they are shown in \fB\-\-help\fR. However,
+\&\s-1GDB\s0 recognizes all of the following conventions for most options:
+.ie n .IP """\-\-option=\fIvalue\fP""" 4
+.el .IP "\f(CW\-\-option=\f(CIvalue\f(CW\fR" 4
+.IX Item "--option=value"
+.PD 0
+.ie n .IP """\-\-option \fIvalue\fP""" 4
+.el .IP "\f(CW\-\-option \f(CIvalue\f(CW\fR" 4
+.IX Item "--option value"
+.ie n .IP """\-option=\fIvalue\fP""" 4
+.el .IP "\f(CW\-option=\f(CIvalue\f(CW\fR" 4
+.IX Item "-option=value"
+.ie n .IP """\-option \fIvalue\fP""" 4
+.el .IP "\f(CW\-option \f(CIvalue\f(CW\fR" 4
+.IX Item "-option value"
+.ie n .IP """\-\-o=\fIvalue\fP""" 4
+.el .IP "\f(CW\-\-o=\f(CIvalue\f(CW\fR" 4
+.IX Item "--o=value"
+.ie n .IP """\-\-o \fIvalue\fP""" 4
+.el .IP "\f(CW\-\-o \f(CIvalue\f(CW\fR" 4
+.IX Item "--o value"
+.ie n .IP """\-o=\fIvalue\fP""" 4
+.el .IP "\f(CW\-o=\f(CIvalue\f(CW\fR" 4
+.IX Item "-o=value"
+.ie n .IP """\-o \fIvalue\fP""" 4
+.el .IP "\f(CW\-o \f(CIvalue\f(CW\fR" 4
+.IX Item "-o value"
+.PD
 .PP
 All the options and command line arguments you give are processed
 in sequential order.  The order makes a difference when the \fB\-x\fR
 option is used.
-.IP "\fB\-help\fR" 4
-.IX Item "-help"
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
 .PD 0
 .IP "\fB\-h\fR" 4
 .IX Item "-h"
 .PD
 List all options, with brief explanations.
-.IP "\fB\-symbols=\fR\fIfile\fR" 4
-.IX Item "-symbols=file"
+.IP "\fB\-\-symbols=\fR\fIfile\fR" 4
+.IX Item "--symbols=file"
 .PD 0
 .IP "\fB\-s\fR \fIfile\fR" 4
 .IX Item "-s file"
 .PD
-Read symbol table from file \fIfile\fR.
-.IP "\fB\-write\fR" 4
-.IX Item "-write"
+Read symbol table from \fIfile\fR.
+.IP "\fB\-\-write\fR" 4
+.IX Item "--write"
 Enable writing into executable and core files.
-.IP "\fB\-exec=\fR\fIfile\fR" 4
-.IX Item "-exec=file"
+.IP "\fB\-\-exec=\fR\fIfile\fR" 4
+.IX Item "--exec=file"
 .PD 0
 .IP "\fB\-e\fR \fIfile\fR" 4
 .IX Item "-e file"
 .PD
-Use file \fIfile\fR as the executable file to execute when
+Use \fIfile\fR as the executable file to execute when
 appropriate, and for examining pure data in conjunction with a core
 dump.
-.IP "\fB\-se=\fR\fIfile\fR" 4
-.IX Item "-se=file"
-Read symbol table from file \fIfile\fR and use it as the executable
+.IP "\fB\-\-se=\fR\fIfile\fR" 4
+.IX Item "--se=file"
+Read symbol table from \fIfile\fR and use it as the executable
 file.
-.IP "\fB\-core=\fR\fIfile\fR" 4
-.IX Item "-core=file"
+.IP "\fB\-\-core=\fR\fIfile\fR" 4
+.IX Item "--core=file"
 .PD 0
 .IP "\fB\-c\fR \fIfile\fR" 4
 .IX Item "-c file"
 .PD
-Use file \fIfile\fR as a core dump to examine.
-.IP "\fB\-command=\fR\fIfile\fR" 4
-.IX Item "-command=file"
+Use \fIfile\fR as a core dump to examine.
+.IP "\fB\-\-command=\fR\fIfile\fR" 4
+.IX Item "--command=file"
 .PD 0
 .IP "\fB\-x\fR \fIfile\fR" 4
 .IX Item "-x file"
 .PD
-Execute \s-1GDB\s0 commands from file \fIfile\fR.
+Execute \s-1GDB\s0 commands from \fIfile\fR.
+.IP "\fB\-\-eval\-command=\fR\fIcommand\fR" 4
+.IX Item "--eval-command=command"
+.PD 0
 .IP "\fB\-ex\fR \fIcommand\fR" 4
 .IX Item "-ex command"
+.PD
 Execute given \s-1GDB\s0 \fIcommand\fR.
-.IP "\fB\-directory=\fR\fIdirectory\fR" 4
-.IX Item "-directory=directory"
+.IP "\fB\-\-init\-eval\-command=\fR\fIcommand\fR" 4
+.IX Item "--init-eval-command=command"
+.PD 0
+.IP "\fB\-iex\fR" 4
+.IX Item "-iex"
+.PD
+Execute \s-1GDB\s0 \fIcommand\fR before loading the inferior.
+.IP "\fB\-\-directory=\fR\fIdirectory\fR" 4
+.IX Item "--directory=directory"
 .PD 0
 .IP "\fB\-d\fR \fIdirectory\fR" 4
 .IX Item "-d directory"
 .PD
 Add \fIdirectory\fR to the path to search for source files.
-.IP "\fB\-nh\fR" 4
-.IX Item "-nh"
-Do not execute commands from \fI~/.gdbinit\fR.
-.IP "\fB\-nx\fR" 4
-.IX Item "-nx"
+.IP "\fB\-\-nh\fR" 4
+.IX Item "--nh"
+Do not execute commands from \fI~/.config/gdb/gdbinit\fR,
+\&\fI~/.gdbinit\fR, \fI~/.config/gdb/gdbearlyinit\fR, or
+\&\fI~/.gdbearlyinit\fR
+.IP "\fB\-\-nx\fR" 4
+.IX Item "--nx"
 .PD 0
 .IP "\fB\-n\fR" 4
 .IX Item "-n"
 .PD
-Do not execute commands from any \fI.gdbinit\fR initialization files.
-.IP "\fB\-quiet\fR" 4
-.IX Item "-quiet"
+Do not execute commands from any \fI.gdbinit\fR or
+\&\fI.gdbearlyinit\fR initialization files.
+.IP "\fB\-\-quiet\fR" 4
+.IX Item "--quiet"
 .PD 0
+.IP "\fB\-\-silent\fR" 4
+.IX Item "--silent"
 .IP "\fB\-q\fR" 4
 .IX Item "-q"
 .PD
 \&\*(L"Quiet\*(R".  Do not print the introductory and copyright messages.  These
 messages are also suppressed in batch mode.
-.IP "\fB\-batch\fR" 4
-.IX Item "-batch"
+.IP "\fB\-\-batch\fR" 4
+.IX Item "--batch"
 Run in batch mode.  Exit with status \f(CW0\fR after processing all the command
 files specified with \fB\-x\fR (and \fI.gdbinit\fR, if not inhibited).
 Exit with nonzero status if an error occurs in executing the \s-1GDB\s0
@@ -340,12 +390,70 @@ more useful, the message
 .Sp
 (which is ordinarily issued whenever a program running under \s-1GDB\s0 control
 terminates) is not issued when running in batch mode.
-.IP "\fB\-cd=\fR\fIdirectory\fR" 4
-.IX Item "-cd=directory"
+.IP "\fB\-\-batch\-silent\fR" 4
+.IX Item "--batch-silent"
+Run in batch mode, just like \fB\-\-batch\fR, but totally silent.  All \s-1GDB\s0
+output is suppressed (stderr is unaffected).  This is much quieter than
+\&\fB\-\-silent\fR and would be useless for an interactive session.
+.Sp
+This is particularly useful when using targets that give \fBLoading section\fR
+messages, for example.
+.Sp
+Note that targets that give their output via \s-1GDB,\s0 as opposed to writing
+directly to \f(CW\*(C`stdout\*(C'\fR, will also be made silent.
+.IP "\fB\-\-args\fR \fIprog\fR \fB[\fR\fIarglist\fR\fB]\fR" 4
+.IX Item "--args prog [arglist]"
+Change interpretation of command line so that arguments following this
+option are passed as arguments to the inferior.  As an example, take
+the following command:
+.Sp
+.Vb 1
+\&        gdb ./a.out \-q
+.Ve
+.Sp
+It would start \s-1GDB\s0 with \fB\-q\fR, not printing the introductory message.  On
+the other hand, using:
+.Sp
+.Vb 1
+\&        gdb \-\-args ./a.out \-q
+.Ve
+.Sp
+starts \s-1GDB\s0 with the introductory message, and passes the option to the inferior.
+.IP "\fB\-\-pid=\fR\fIpid\fR" 4
+.IX Item "--pid=pid"
+Attach \s-1GDB\s0 to an already running program, with the \s-1PID\s0 \fIpid\fR.
+.IP "\fB\-\-tui\fR" 4
+.IX Item "--tui"
+Open the terminal user interface.
+.IP "\fB\-\-readnow\fR" 4
+.IX Item "--readnow"
+Read all symbols from the given symfile on the first access.
+.IP "\fB\-\-readnever\fR" 4
+.IX Item "--readnever"
+Do not read symbol files.
+.IP "\fB\-\-return\-child\-result\fR" 4
+.IX Item "--return-child-result"
+\&\s-1GDB\s0's exit code will be the same as the child's exit code.
+.IP "\fB\-\-configuration\fR" 4
+.IX Item "--configuration"
+Print details about \s-1GDB\s0 configuration and then exit.
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+Print version information and then exit.
+.IP "\fB\-\-cd=\fR\fIdirectory\fR" 4
+.IX Item "--cd=directory"
 Run \s-1GDB\s0 using \fIdirectory\fR as its working directory,
 instead of the current directory.
-.IP "\fB\-fullname\fR" 4
-.IX Item "-fullname"
+.IP "\fB\-\-data\-directory=\fR\fIdirectory\fR" 4
+.IX Item "--data-directory=directory"
+.PD 0
+.IP "\fB\-D\fR" 4
+.IX Item "-D"
+.PD
+Run \s-1GDB\s0 using \fIdirectory\fR as its data directory.  The data
+directory is where \s-1GDB\s0 searches for its auxiliary files.
+.IP "\fB\-\-fullname\fR" 4
+.IX Item "--fullname"
 .PD 0
 .IP "\fB\-f\fR" 4
 .IX Item "-f"
@@ -358,12 +466,15 @@ like two \fB\e032\fR characters, followe
 and character position separated by colons, and a newline.  The
 Emacs-to-GDB interface program uses the two \fB\e032\fR
 characters as a signal to display the source code for the frame.
-.IP "\fB\-b\fR \fIbps\fR" 4
-.IX Item "-b bps"
+.IP "\fB\-b\fR \fIbaudrate\fR" 4
+.IX Item "-b baudrate"
 Set the line speed (baud rate or bits per second) of any serial
 interface used by \s-1GDB\s0 for remote debugging.
-.IP "\fB\-tty=\fR\fIdevice\fR" 4
-.IX Item "-tty=device"
+.IP "\fB\-l\fR \fItimeout\fR" 4
+.IX Item "-l timeout"
+Set timeout, in seconds, for remote debugging.
+.IP "\fB\-\-tty=\fR\fIdevice\fR" 4
+.IX Item "--tty=device"
 Run using \fIdevice\fR for your program's standard input and output.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
@@ -377,11 +488,11 @@ documentation are properly installed at
 .PP
 should give you access to the complete manual.
 .PP
-\&\fIUsing \s-1GDB:\s0 A Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
+\&\fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
 Richard M. Stallman and Roland H. Pesch, July 1991.
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (c) 1988\-2019 Free Software Foundation, Inc.
+Copyright (c) 1988\-2024 Free Software Foundation, Inc.
 .PP
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb-add-index.1 ./gdb/doc/gdb-add-index.1
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb-add-index.1	2019-12-11 01:53:23.000000000 +0000
+++ ./gdb/doc/gdb-add-index.1	2024-02-01 01:52:29.000000000 +0000
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.13)
+.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,27 +38,36 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
 .ie \n(.g .ds Aq \(aq
 .el       .ds Aq '
 .\"
-.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" If the F register is >0, we'll generate index entries on stderr for
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+.    if \nF \{\
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{\
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GDB-ADD-INDEX 1"
-.TH GDB-ADD-INDEX 1 "2019-12-11" "gdb-9.0.50.20191211-git" "GNU Development Tools"
+.TH GDB-ADD-INDEX 1 "2024-02-01" "gdb-15.0.50.20240201-git" "GNU Development Tools"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -170,11 +179,11 @@ documentation are properly installed at
 .PP
 should give you access to the complete manual.
 .PP
-\&\fIUsing \s-1GDB:\s0 A Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
+\&\fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
 Richard M. Stallman and Roland H. Pesch, July 1991.
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (c) 1988\-2019 Free Software Foundation, Inc.
+Copyright (c) 1988\-2024 Free Software Foundation, Inc.
 .PP
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info ./gdb/doc/gdb.info
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info	2019-12-11 01:53:19.000000000 +0000
+++ ./gdb/doc/gdb.info	2024-02-01 01:52:27.000000000 +0000
@@ -1,6 +1,6 @@
-This is gdb.info, produced by makeinfo version 6.3 from gdb.texinfo.
+This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo.
 
-Copyright (C) 1988-2019 Free Software Foundation, Inc.
+Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -21,9 +21,9 @@ END-INFO-DIR-ENTRY
    This file documents the GNU debugger GDB.
 
    This is the Tenth Edition, of 'Debugging with GDB: the GNU
-Source-Level Debugger' for GDB (GDB) Version 9.0.50.20191211-git.
+Source-Level Debugger' for GDB (GDB) Version 15.0.50.20240201-git.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -38,789 +38,884 @@ developing GNU and promoting software fr
 
 
 Indirect:
-gdb.info-1: 1716
-gdb.info-2: 302421
-gdb.info-3: 604551
-gdb.info-4: 902922
-gdb.info-5: 1212237
-gdb.info-6: 1511190
-gdb.info-7: 1840568
-gdb.info-8: 2229874
+gdb.info-1: 1717
+gdb.info-2: 303216
+gdb.info-3: 602095
+gdb.info-4: 903299
+gdb.info-5: 1208103
+gdb.info-6: 1505985
+gdb.info-7: 1801796
+gdb.info-8: 2113830
+gdb.info-9: 2517336
 
 Tag Table:
 (Indirect)
-Node: Top1716
-Node: Summary5188
-Node: Free Software7049
-Node: Free Documentation7789
-Node: Contributors12723
-Node: Sample Session21602
-Node: Invocation28454
-Node: Invoking GDB28997
-Node: File Options31339
-Ref: --readnever34410
-Node: Mode Options34884
-Ref: -nx35111
-Ref: -nh36868
-Node: Startup43192
-Ref: Home Directory Init File44038
-Ref: Option -init-eval-command44148
-Ref: Init File in the Current Directory during Startup44488
-Ref: Startup-Footnote-146684
-Node: Quitting GDB46793
-Node: Shell Commands47690
-Ref: pipe48617
-Node: Logging Output50131
-Node: Commands51257
-Node: Command Syntax52018
-Node: Command Settings54190
-Node: Completion57203
-Ref: Completion-Footnote-164143
-Node: Command Options64303
-Node: Help66635
-Node: Running73149
-Node: Compilation74378
-Node: Starting76457
-Ref: set exec-wrapper82247
-Ref: set startup-with-shell83336
-Ref: set auto-connect-native-target84397
-Node: Arguments88793
-Node: Environment90062
-Ref: set environment91944
-Ref: unset environment93126
-Node: Working Directory94132
-Ref: set cwd command94704
-Ref: cd command95644
-Node: Input/Output96338
-Node: Attach98398
-Node: Kill Process100864
-Node: Inferiors and Programs101845
-Node: Threads109577
-Ref: thread numbers111688
-Ref: thread ID lists112578
-Ref: global thread numbers113618
-Ref: thread apply all117470
-Ref: set libthread-db-search-path122309
-Node: Forks124363
-Node: Checkpoint/Restart130881
-Ref: Checkpoint/Restart-Footnote-1135409
-Node: Stopping135444
-Node: Breakpoints136707
-Node: Set Breaks139964
-Node: Set Watchpoints158923
-Node: Set Catchpoints168305
-Ref: catch syscall173803
-Node: Delete Breaks181568
-Node: Disabling183504
-Node: Conditions186884
-Node: Break Commands192531
-Node: Dynamic Printf195751
-Node: Save Breakpoints200055
-Node: Static Probe Points201230
-Ref: Static Probe Points-Footnote-1205408
-Ref: Static Probe Points-Footnote-2205568
-Node: Error in Breakpoints205708
-Node: Breakpoint-related Warnings206444
-Node: Continuing and Stepping208771
-Ref: range stepping218551
-Node: Skipping Over Functions and Files219631
-Node: Signals225480
-Ref: stepping and signal handlers229914
-Ref: stepping into signal handlers230710
-Ref: extra signal information231943
-Node: Thread Stops234409
-Node: All-Stop Mode235508
-Node: Non-Stop Mode239475
-Node: Background Execution242888
-Node: Thread-Specific Breakpoints245104
-Node: Interrupted System Calls247120
-Node: Observer Mode248634
-Node: Reverse Execution252070
-Ref: Reverse Execution-Footnote-1256988
-Ref: Reverse Execution-Footnote-2257615
-Node: Process Record and Replay257665
-Node: Stack279054
-Node: Frames280671
-Node: Backtrace283009
-Ref: backtrace-command283346
-Ref: set backtrace past-main289793
-Ref: set backtrace past-entry290121
-Ref: set backtrace limit290688
-Ref: Backtrace-Footnote-1291312
-Node: Selection291500
-Node: Frame Info296283
-Node: Frame Apply302421
-Ref: frame apply302607
-Node: Frame Filter Management306840
-Ref: disable frame-filter all307368
-Node: Source311676
-Node: List312742
-Node: Specify Location315444
-Node: Linespec Locations316065
-Node: Explicit Locations319464
-Node: Address Locations322676
-Node: Edit324427
-Ref: Edit-Footnote-1325903
-Node: Search326138
-Node: Source Path326946
-Ref: set substitute-path335887
-Node: Machine Code338107
-Node: Data348451
-Ref: print options349290
-Node: Expressions359094
-Node: Ambiguous Expressions361197
-Node: Variables364427
-Node: Arrays371025
-Node: Output Formats373556
-Ref: Output Formats-Footnote-1376929
-Node: Memory377086
-Ref: addressable memory unit383271
-Node: Auto Display384765
-Node: Print Settings389307
-Ref: set print address389605
-Ref: set print symbol393267
-Ref: set print array393755
-Ref: set print array-indexes394083
-Ref: set print elements394569
-Ref: set print frame-arguments395234
-Ref: set print raw-frame-arguments397403
-Ref: set print entry-values397819
-Ref: set print frame-info402198
-Ref: set print repeats403864
-Ref: set print max-depth404506
-Ref: set print null-stop406198
-Ref: set print pretty406522
-Ref: set print union407714
-Ref: set print object410020
-Ref: set print static-members410814
-Ref: set print vtbl411491
-Node: Pretty Printing411875
-Node: Pretty-Printer Introduction412389
-Node: Pretty-Printer Example414144
-Node: Pretty-Printer Commands414922
-Node: Value History417346
-Node: Convenience Vars419768
-Node: Convenience Funs427410
-Node: Registers435925
-Ref: standard registers437133
-Ref: Registers-Footnote-1442084
-Node: Floating Point Hardware442479
-Node: Vector Unit443011
-Node: OS Information443398
-Ref: linux info os infotypes445422
-Node: Memory Region Attributes450013
-Node: Dump/Restore Files454677
-Node: Core File Generation457080
-Ref: set use-coredump-filter458640
-Ref: set dump-excluded-mappings460088
-Node: Character Sets460370
-Node: Caching Target Data466735
-Ref: Caching Target Data-Footnote-1469463
-Node: Searching Memory469701
-Node: Value Sizes472844
-Node: Optimized Code474496
-Node: Inline Functions476173
-Node: Tail Call Frames478800
-Ref: set debug entry-values480937
-Node: Macros485001
-Ref: Macros-Footnote-1492577
-Node: Tracepoints492730
-Node: Set Tracepoints494792
-Node: Create and Delete Tracepoints497730
-Node: Enable and Disable Tracepoints504078
-Node: Tracepoint Passcounts505318
-Node: Tracepoint Conditions506729
-Node: Trace State Variables508423
-Node: Tracepoint Actions510618
-Node: Listing Tracepoints517401
-Node: Listing Static Tracepoint Markers519103
-Node: Starting and Stopping Trace Experiments520951
-Ref: disconnected tracing522696
-Node: Tracepoint Restrictions527116
-Node: Analyze Collected Data530885
-Node: tfind532191
-Node: tdump536673
-Node: save tracepoints539188
-Node: Tracepoint Variables539684
-Node: Trace Files540812
-Node: Overlays543188
-Node: How Overlays Work543908
-Ref: A code overlay546463
-Node: Overlay Commands549876
-Node: Automatic Overlay Debugging554058
-Node: Overlay Sample Program556197
-Node: Languages557934
-Node: Setting559097
-Node: Filenames560798
-Node: Manually561609
-Node: Automatically562818
-Node: Show563879
-Ref: show language564167
-Node: Checks565201
-Node: Type Checking566206
-Node: Range Checking568035
-Node: Supported Languages570436
-Node: C571773
-Node: C Operators572737
-Node: C Constants577076
-Node: C Plus Plus Expressions579955
-Node: C Defaults583315
-Node: C Checks583983
-Node: Debugging C584543
-Node: Debugging C Plus Plus585027
-Node: Decimal Floating Point589914
-Node: D591184
-Node: Go591442
-Node: Objective-C592536
-Node: Method Names in Commands592999
-Node: The Print Command with Objective-C594690
-Node: OpenCL C595341
-Node: OpenCL C Datatypes595616
-Node: OpenCL C Expressions595991
-Node: OpenCL C Operators596348
-Node: Fortran596580
-Node: Fortran Operators597301
-Node: Fortran Defaults598346
-Node: Special Fortran Commands598731
-Node: Pascal599237
-Node: Rust599748
-Node: Modula-2604551
-Node: M2 Operators605524
-Node: Built-In Func/Proc608522
-Node: M2 Constants611436
-Node: M2 Types613037
-Node: M2 Defaults616255
-Node: Deviations616856
-Node: M2 Checks617957
-Node: M2 Scope618774
-Node: GDB/M2619798
-Node: Ada620711
-Node: Ada Mode Intro622017
-Node: Omissions from Ada623519
-Node: Additions to Ada627874
-Node: Overloading support for Ada631802
-Node: Stopping Before Main Program633442
-Node: Ada Exceptions633989
-Node: Ada Tasks635188
-Node: Ada Tasks and Core Files641679
-Node: Ravenscar Profile642526
-Node: Ada Settings643597
-Node: Ada Glitches645019
-Node: Unsupported Languages649027
-Node: Symbols649717
-Ref: quoting names650320
-Node: Altering681235
-Node: Assignment682273
-Node: Jumping685379
-Node: Signaling687453
-Node: Returning690382
-Node: Calling693733
-Node: Patching699218
-Node: Compiling and Injecting Code700332
-Ref: set debug compile703959
-Ref: set debug compile-cplus-types704209
-Node: GDB Files714230
-Node: Files715019
-Ref: Shared Libraries728736
-Ref: Files-Footnote-1740934
-Node: File Caching741063
-Node: Separate Debug Files742197
-Ref: debug-file-directory745550
-Node: MiniDebugInfo754165
-Node: Index Files756616
-Node: Symbol Errors760787
-Node: Data Files764403
-Node: Targets765359
-Node: Active Targets766839
-Node: Target Commands767913
-Ref: load772302
-Ref: flash-erase773495
-Node: Byte Order773555
-Node: Remote Debugging774994
-Node: Connecting776256
-Ref: --multi Option in Types of Remote Connnections778482
-Ref: Attaching in Types of Remote Connections779897
-Ref: Host and target files780398
-Node: File Transfer789020
-Node: Server789959
-Ref: Running gdbserver791535
-Ref: Attaching to a program793753
-Ref: Other Command-Line Arguments for gdbserver796278
-Ref: Monitor Commands for gdbserver799597
-Ref: Server-Footnote-1804973
-Node: Remote Configuration805093
-Ref: set remotebreak806353
-Ref: set remote hardware-watchpoint-limit807815
-Ref: set remote hardware-breakpoint-limit807815
-Ref: set remote hardware-watchpoint-length-limit808317
-Ref: set remote exec-file808772
-Node: Remote Stub820577
-Node: Stub Contents823472
-Node: Bootstrapping825579
-Node: Debug Session829394
-Node: Configurations831435
-Node: Native832204
-Node: BSD libkvm Interface832773
-Node: Process Information833825
-Node: DJGPP Native839374
-Node: Cygwin Native845928
-Node: Non-debug DLL Symbols850849
-Node: Hurd Native855088
-Node: Darwin860344
-Node: FreeBSD861621
-Node: Embedded OS862341
-Node: Embedded Processors862752
-Node: ARC863742
-Node: ARM864289
-Node: M68K866836
-Node: MicroBlaze867009
-Node: MIPS Embedded868458
-Node: OpenRISC 1000869755
-Node: PowerPC Embedded870661
-Node: AVR873890
-Node: CRIS874262
-Node: Super-H875238
-Node: Architectures876297
-Node: AArch64876693
-Node: i386878266
-Ref: i386-Footnote-1882476
-Node: Alpha882562
-Node: MIPS882695
-Node: HPPA886589
-Node: PowerPC887111
-Node: Nios II887847
-Node: Sparc64888252
-Node: S12Z890620
-Node: Controlling GDB890913
-Node: Prompt891856
-Node: Editing893574
-Node: Command History894884
-Node: Screen Size899190
-Node: Output Styling902922
-Node: Numbers907005
-Node: ABI908987
-Node: Auto-loading912160
-Ref: set auto-load off913535
-Ref: show auto-load914171
-Ref: info auto-load914950
-Node: Init File in the Current Directory917917
-Ref: set auto-load local-gdbinit918492
-Ref: show auto-load local-gdbinit918674
-Ref: info auto-load local-gdbinit918838
-Node: libthread_db.so.1 file918986
-Ref: set auto-load libthread-db919925
-Ref: show auto-load libthread-db920056
-Ref: info auto-load libthread-db920193
-Node: Auto-loading safe path920377
-Ref: set auto-load safe-path921683
-Ref: show auto-load safe-path922422
-Ref: add-auto-load-safe-path922545
-Node: Auto-loading verbose mode925447
-Ref: set debug auto-load926610
-Ref: show debug auto-load926711
-Node: Messages/Warnings926833
-Ref: confirmation requests928267
-Node: Debugging Output929471
-Node: Other Misc Settings939888
-Node: Extending GDB940912
-Node: Sequences942765
-Node: Define943426
-Node: Hooks948911
-Node: Command Files951277
-Node: Output956350
-Ref: eval961152
-Node: Auto-loading sequences961314
-Ref: set auto-load gdb-scripts961809
-Ref: show auto-load gdb-scripts961933
-Ref: info auto-load gdb-scripts962063
-Node: Python962294
-Node: Python Commands963580
-Node: Python API965694
-Node: Basic Python968299
-Ref: prompt_hook979336
-Node: Exception Handling979934
-Node: Values From Inferior982836
-Node: Types In Python1000172
-Node: Pretty Printing API1010164
-Node: Selecting Pretty-Printers1014607
-Node: Writing a Pretty-Printer1017334
-Node: Type Printing API1022656
-Node: Frame Filter API1025272
-Node: Frame Decorator API1032584
-Ref: frame_args1036325
-Node: Writing a Frame Filter1039655
-Node: Unwinding Frames in Python1051129
-Node: Xmethods In Python1058768
-Node: Xmethod API1061664
-Node: Writing an Xmethod1065476
-Node: Inferiors In Python1071311
-Node: Events In Python1075070
-Node: Threads In Python1084278
-Node: Recordings In Python1087622
-Node: Commands In Python1094956
-Node: Parameters In Python1104369
-Node: Functions In Python1111307
-Node: Progspaces In Python1113524
-Node: Objfiles In Python1118429
-Node: Frames In Python1125091
-Node: Blocks In Python1132097
-Node: Symbols In Python1136764
-Node: Symbol Tables In Python1146753
-Node: Line Tables In Python1149974
-Node: Breakpoints In Python1152811
-Ref: python_breakpoint_thread1159134
-Node: Finish Breakpoints in Python1162167
-Node: Lazy Strings In Python1164273
-Node: Architectures In Python1166501
-Node: Python Auto-loading1168690
-Ref: set auto-load python-scripts1169319
-Ref: show auto-load python-scripts1169419
-Ref: info auto-load python-scripts1169525
-Node: Python modules1170659
-Node: gdb.printing1171045
-Node: gdb.types1172472
-Node: gdb.prompt1175484
-Node: Guile1177080
-Node: Guile Introduction1177739
-Node: Guile Commands1178610
-Node: Guile API1180464
-Node: Basic Guile1182461
-Node: Guile Configuration1188143
-Node: GDB Scheme Data Types1189119
-Node: Guile Exception Handling1190951
-Node: Values From Inferior In Guile1194985
-Node: Arithmetic In Guile1212237
-Node: Types In Guile1213868
-Ref: Fields of a type in Guile1221809
-Node: Guile Pretty Printing API1223197
-Node: Selecting Guile Pretty-Printers1228926
-Node: Writing a Guile Pretty-Printer1231302
-Node: Commands In Guile1236487
-Node: Parameters In Guile1247267
-Ref: Parameters In Guile-Footnote-11254148
-Node: Progspaces In Guile1254264
-Node: Objfiles In Guile1256852
-Node: Frames In Guile1259133
-Node: Blocks In Guile1265711
-Node: Symbols In Guile1270519
-Node: Symbol Tables In Guile1277854
-Node: Breakpoints In Guile1280817
-Node: Lazy Strings In Guile1291078
-Node: Architectures In Guile1293369
-Node: Disassembly In Guile1297676
-Node: I/O Ports in Guile1300878
-Node: Memory Ports in Guile1301434
-Node: Iterators In Guile1304700
-Node: Guile Auto-loading1308989
-Ref: set auto-load guile-scripts1309612
-Ref: show auto-load guile-scripts1309710
-Ref: info auto-load guile-scripts1309814
-Node: Guile Modules1310773
-Node: Guile Printing Module1311095
-Node: Guile Types Module1311914
-Node: Auto-loading extensions1313207
-Node: objfile-gdbdotext file1314405
-Ref: set auto-load scripts-directory1315841
-Ref: with-auto-load-dir1316217
-Ref: show auto-load scripts-directory1317035
-Ref: add-auto-load-scripts-directory1317115
-Node: dotdebug_gdb_scripts section1317591
-Node: Which flavor to choose?1321341
-Node: Multiple Extension Languages1323162
-Node: Aliases1324226
-Node: Interpreters1327091
-Node: TUI1330242
-Node: TUI Overview1331240
-Node: TUI Keys1333673
-Node: TUI Single Key Mode1336396
-Node: TUI Commands1337579
-Node: TUI Configuration1341346
-Node: Emacs1343368
-Node: GDB/MI1348805
-Node: GDB/MI General Design1350779
-Node: Context management1353299
-Node: Asynchronous and non-stop modes1357086
-Node: Thread groups1360059
-Node: GDB/MI Command Syntax1362337
-Node: GDB/MI Input Syntax1362580
-Node: GDB/MI Output Syntax1364130
-Node: GDB/MI Compatibility with CLI1367715
-Node: GDB/MI Development and Front Ends1368452
-Node: GDB/MI Output Records1371971
-Node: GDB/MI Result Records1372377
-Node: GDB/MI Stream Records1373727
-Node: GDB/MI Async Records1374992
-Node: GDB/MI Breakpoint Information1385429
-Node: GDB/MI Frame Information1391065
-Node: GDB/MI Thread Information1392347
-Node: GDB/MI Ada Exception Information1393817
-Node: GDB/MI Simple Examples1394367
-Node: GDB/MI Command Description Format1396603
-Node: GDB/MI Breakpoint Commands1397483
-Ref: -break-insert1404591
-Node: GDB/MI Catchpoint Commands1418165
-Node: Shared Library GDB/MI Catchpoint Commands1418578
-Node: Ada Exception GDB/MI Catchpoint Commands1420236
-Node: C++ Exception GDB/MI Catchpoint Commands1423786
-Node: GDB/MI Program Context1427802
-Node: GDB/MI Thread Commands1432070
-Node: GDB/MI Ada Tasking Commands1435371
-Node: GDB/MI Program Execution1437643
-Node: GDB/MI Stack Manipulation1449910
-Ref: -stack-list-arguments1451834
-Ref: -stack-list-frames1455664
-Ref: -stack-list-locals1459993
-Ref: -stack-list-variables1461483
-Node: GDB/MI Variable Objects1463017
-Ref: -var-set-format1472983
-Ref: -var-list-children1474364
-Ref: -var-update1483172
-Ref: -var-set-frozen1486170
-Ref: -var-set-update-range1486967
-Ref: -var-set-visualizer1487496
-Node: GDB/MI Data Manipulation1488986
-Node: GDB/MI Tracepoint Commands1511190
-Node: GDB/MI Symbol Query1522981
-Ref: -symbol-info-functions1523250
-Ref: -symbol-info-module-functions1527763
-Ref: -symbol-info-module-variables1530743
-Ref: -symbol-info-modules1534460
-Ref: -symbol-info-types1536364
-Ref: -symbol-info-variables1538357
-Node: GDB/MI File Commands1543381
-Node: GDB/MI Target Manipulation1547815
-Node: GDB/MI File Transfer Commands1554473
-Node: GDB/MI Ada Exceptions Commands1555796
-Node: GDB/MI Support Commands1557149
-Node: GDB/MI Miscellaneous Commands1561868
-Ref: -interpreter-exec1572221
-Node: Annotations1576193
-Node: Annotations Overview1577112
-Node: Server Prefix1579575
-Node: Prompting1580309
-Node: Errors1581826
-Node: Invalidation1582722
-Node: Annotations for Running1583201
-Node: Source Annotations1584735
-Node: JIT Interface1585664
-Node: Declarations1587464
-Node: Registering Code1588851
-Node: Unregistering Code1589823
-Node: Custom Debug Info1590450
-Node: Using JIT Debug Info Readers1591746
-Node: Writing JIT Debug Info Readers1592758
-Node: In-Process Agent1594953
-Ref: Control Agent1596896
-Node: In-Process Agent Protocol1597763
-Node: IPA Protocol Objects1598554
-Ref: agent expression object1599552
-Ref: tracepoint action object1599757
-Ref: tracepoint object1599837
-Node: IPA Protocol Commands1602367
-Node: GDB Bugs1603837
-Node: Bug Criteria1604569
-Node: Bug Reporting1605446
-Node: Command Line Editing1613275
-Node: Introduction and Notation1613927
-Node: Readline Interaction1615548
-Node: Readline Bare Essentials1616737
-Node: Readline Movement Commands1618518
-Node: Readline Killing Commands1619476
-Node: Readline Arguments1621392
-Node: Searching1622434
-Node: Readline Init File1624584
-Node: Readline Init File Syntax1625735
-Node: Conditional Init Constructs1645891
-Node: Sample Init File1650085
-Node: Bindable Readline Commands1653200
-Node: Commands For Moving1654252
-Node: Commands For History1655816
-Node: Commands For Text1660078
-Node: Commands For Killing1663517
-Node: Numeric Arguments1665681
-Node: Commands For Completion1666818
-Node: Keyboard Macros1668784
-Node: Miscellaneous Commands1669469
-Node: Readline vi Mode1673388
-Node: Using History Interactively1674298
-Node: History Interaction1674813
-Node: Event Designators1676709
-Node: Word Designators1677846
-Node: Modifiers1679481
-Node: In Memoriam1680702
-Node: Formatting Documentation1681585
-Ref: Formatting Documentation-Footnote-11684961
-Node: Installing GDB1685057
-Node: Requirements1685629
-Ref: Expat1686330
-Ref: MPFR1689623
-Node: Running Configure1691244
-Node: Separate Objdir1694115
-Node: Config Names1697089
-Node: Configure Options1698566
-Node: System-wide configuration1707917
-Node: System-wide Configuration Scripts1710454
-Node: Maintenance Commands1711638
-Ref: maint info breakpoints1713293
-Ref: maint check libthread-db1721758
-Node: Remote Protocol1738412
-Node: Overview1739104
-Ref: Binary Data1741649
-Node: Packets1744174
-Ref: thread-id syntax1745074
-Ref: extended mode1746519
-Ref: ? packet1746777
-Ref: bc1748243
-Ref: bs1748453
-Ref: read registers packet1750070
-Ref: cycle step packet1751925
-Ref: write register packet1754636
-Ref: step with signal packet1755615
-Ref: vCont packet1757091
-Ref: vCtrlC packet1760325
-Ref: vKill packet1762743
-Ref: X packet1764277
-Ref: insert breakpoint or watchpoint packet1764646
-Node: Stop Reply Packets1768972
-Ref: swbreak stop reason1772223
-Ref: thread create event1775820
-Ref: thread exit event1777023
-Node: General Query Packets1779232
-Ref: qCRC packet1782062
-Ref: QEnvironmentHexEncoded1785215
-Ref: QEnvironmentUnset1786445
-Ref: QEnvironmentReset1787389
-Ref: QSetWorkingDir packet1788333
-Ref: QNonStop1794784
-Ref: QCatchSyscalls1795460
-Ref: QPassSignals1796997
-Ref: QProgramSignals1798204
-Ref: QThreadEvents1799771
-Ref: qSearch memory1801789
-Ref: QStartNoAckMode1802297
-Ref: qSupported1802829
-Ref: multiprocess extensions1818349
-Ref: install tracepoint in tracing1820379
-Ref: qXfer read1824902
-Ref: qXfer auxiliary vector read1826509
-Ref: qXfer btrace read1826857
-Ref: qXfer btrace-conf read1827922
-Ref: qXfer executable filename read1828273
-Ref: qXfer target description read1828888
-Ref: qXfer library list read1829322
-Ref: qXfer svr4 library list read1829978
-Ref: qXfer memory map read1831831
-Ref: qXfer sdata read1832218
-Ref: qXfer siginfo read1832684
-Ref: qXfer threads read1833080
-Ref: qXfer traceframe info read1833483
-Ref: qXfer unwind info block1833901
-Ref: qXfer fdpic loadmap read1834135
-Ref: qXfer osdata read1834551
-Ref: qXfer write1834705
-Ref: qXfer siginfo write1835797
-Ref: General Query Packets-Footnote-11838525
-Node: Architecture-Specific Protocol Details1840568
-Node: ARM-Specific Protocol Details1841077
-Node: ARM Breakpoint Kinds1841325
-Node: MIPS-Specific Protocol Details1841656
-Node: MIPS Register packet Format1841939
-Node: MIPS Breakpoint Kinds1842866
-Node: Tracepoint Packets1843284
-Ref: QTEnable1852598
-Ref: QTDisable1852794
-Ref: qTfSTM1858331
-Ref: qTsSTM1858331
-Ref: qTSTMat1859408
-Ref: QTBuffer-size1860559
-Node: Host I/O Packets1862532
-Node: Interrupts1868113
-Ref: interrupting remote targets1868257
-Node: Notification Packets1870425
-Node: Remote Non-Stop1875850
-Node: Packet Acknowledgment1878966
-Node: Examples1881081
-Node: File-I/O Remote Protocol Extension1881675
-Node: File-I/O Overview1882137
-Node: Protocol Basics1884336
-Node: The F Request Packet1886565
-Node: The F Reply Packet1887466
-Node: The Ctrl-C Message1888384
-Node: Console I/O1890010
-Node: List of Supported Calls1891226
-Node: open1891588
-Node: close1894096
-Node: read1894479
-Node: write1895088
-Node: lseek1895859
-Node: rename1896743
-Node: unlink1898150
-Node: stat/fstat1899097
-Node: gettimeofday1899990
-Node: isatty1900426
-Node: system1901022
-Node: Protocol-specific Representation of Datatypes1902564
-Node: Integral Datatypes1902941
-Node: Pointer Values1903748
-Node: Memory Transfer1904452
-Node: struct stat1905072
-Node: struct timeval1907274
-Node: Constants1907791
-Node: Open Flags1908240
-Node: mode_t Values1908581
-Node: Errno Values1909073
-Node: Lseek Flags1909883
-Node: Limits1910068
-Node: File-I/O Examples1910428
-Node: Library List Format1911516
-Node: Library List Format for SVR4 Targets1914298
-Node: Memory Map Format1916765
-Node: Thread List Format1919289
-Node: Traceframe Info Format1920293
-Node: Branch Trace Format1921979
-Node: Branch Trace Configuration Format1923679
-Node: Agent Expressions1924853
-Node: General Bytecode Design1927674
-Node: Bytecode Descriptions1932468
-Node: Using Agent Expressions1945935
-Node: Varying Target Capabilities1947912
-Node: Rationale1949073
-Node: Target Descriptions1956462
-Node: Retrieving Descriptions1958405
-Node: Target Description Format1959490
-Node: Predefined Target Types1969365
-Node: Enum Target Types1970810
-Node: Standard Target Features1971805
-Node: AArch64 Features1973805
-Node: ARC Features1974511
-Node: ARM Features1976572
-Node: i386 Features1978086
-Node: MicroBlaze Features1980301
-Node: MIPS Features1980878
-Node: M68K Features1982069
-Node: NDS32 Features1982730
-Node: Nios II Features1983754
-Node: OpenRISC 1000 Features1984159
-Node: PowerPC Features1984525
-Node: RISC-V Features1988495
-Node: RX Features1990185
-Node: S/390 and System z Features1990547
-Node: Sparc Features1992687
-Node: TIC6x Features1993592
-Node: Operating System Information1994141
-Node: Process list1994977
-Node: Trace File Format1996040
-Node: Index Section Format1999254
-Node: Man Pages2007180
-Node: gdb man2007650
-Node: gdbserver man2013624
-Node: gcore man2021021
-Node: gdbinit man2022143
-Node: gdb-add-index man2023336
-Ref: gdb-add-index2023445
-Node: Copying2024319
-Node: GNU Free Documentation License2061880
-Node: Concept Index2087027
-Node: Command and Variable Index2229874
+Node: Top1717
+Node: Summary5350
+Node: Free Software7211
+Node: Free Documentation7951
+Node: Contributors12885
+Node: Sample Session21916
+Node: Invocation28769
+Node: Invoking GDB29320
+Node: File Options31715
+Ref: --readnever35341
+Node: Mode Options35815
+Ref: -nx36042
+Ref: -nh36154
+Node: Startup42929
+Ref: Option -init-eval-command44154
+Node: Initialization Files45930
+Ref: System Wide Init Files49537
+Ref: Home Directory Init File50818
+Ref: Init File in the Current Directory during Startup51981
+Ref: Initialization Files-Footnote-152704
+Ref: Initialization Files-Footnote-252813
+Node: Quitting GDB52922
+Node: Shell Commands53864
+Ref: pipe54985
+Node: Logging Output56499
+Node: Commands57618
+Node: Command Syntax58379
+Node: Command Settings60551
+Node: Completion63564
+Ref: Completion-Footnote-170904
+Node: Command Options71064
+Node: Help73478
+Node: Running81048
+Node: Compilation82301
+Node: Starting84380
+Ref: set exec-wrapper90170
+Ref: set startup-with-shell91259
+Ref: set auto-connect-native-target92320
+Node: Arguments96791
+Node: Environment98060
+Ref: set environment99942
+Ref: unset environment101124
+Node: Working Directory102130
+Ref: set cwd command102702
+Ref: cd command103642
+Node: Input/Output104336
+Node: Attach106396
+Ref: set exec-file-mismatch107613
+Node: Kill Process109749
+Node: Inferiors Connections and Programs110742
+Ref: add_inferior_cli115670
+Ref: remove_inferiors_cli117688
+Node: Inferior-Specific Breakpoints121624
+Node: Threads123333
+Ref: thread numbers125456
+Ref: thread ID lists126346
+Ref: global thread numbers127386
+Ref: info_threads128921
+Ref: thread apply all131579
+Ref: set libthread-db-search-path136429
+Node: Forks138627
+Node: Checkpoint/Restart145193
+Ref: Checkpoint/Restart-Footnote-1149721
+Node: Stopping149756
+Node: Breakpoints151019
+Node: Set Breaks154276
+Node: Set Watchpoints178141
+Node: Set Catchpoints187677
+Ref: catch syscall193175
+Node: Delete Breaks200940
+Node: Disabling203606
+Node: Conditions206986
+Node: Break Commands212895
+Node: Dynamic Printf216484
+Node: Save Breakpoints221544
+Node: Static Probe Points222719
+Ref: enable probes225267
+Ref: Static Probe Points-Footnote-1226897
+Ref: Static Probe Points-Footnote-2227057
+Node: Error in Breakpoints227197
+Node: Breakpoint-related Warnings227933
+Node: Continuing and Stepping230260
+Ref: range stepping240068
+Node: Skipping Over Functions and Files241148
+Node: Signals247018
+Ref: stepping and signal handlers251562
+Ref: stepping into signal handlers252358
+Ref: extra signal information253591
+Node: Thread Stops256057
+Node: All-Stop Mode257192
+Ref: set scheduler-locking258677
+Node: Non-Stop Mode261534
+Node: Background Execution264947
+Node: Thread-Specific Breakpoints267163
+Node: Interrupted System Calls269392
+Node: Observer Mode270906
+Node: Reverse Execution274342
+Ref: Reverse Execution-Footnote-1279260
+Ref: Reverse Execution-Footnote-2279887
+Node: Process Record and Replay279937
+Node: Stack303216
+Node: Frames304833
+Node: Backtrace307171
+Ref: backtrace-command307508
+Ref: set backtrace past-main313955
+Ref: set backtrace past-entry314283
+Ref: set backtrace limit314850
+Ref: Backtrace-Footnote-1315474
+Node: Selection315662
+Node: Frame Info320445
+Node: Frame Apply324867
+Node: Frame Filter Management329297
+Ref: disable frame-filter all329825
+Node: Source334133
+Node: List335259
+Node: Location Specifications338899
+Node: Linespec Locations343503
+Node: Explicit Locations346909
+Node: Address Locations350128
+Node: Edit351886
+Ref: Edit-Footnote-1353573
+Node: Search353808
+Node: Source Path354616
+Ref: set substitute-path363556
+Node: Machine Code365776
+Ref: disassemble367774
+Node: Disable Reading Source377762
+Node: Data378524
+Ref: print options379363
+Node: Expressions390405
+Node: Ambiguous Expressions392508
+Node: Variables395738
+Node: Arrays402336
+Node: Output Formats404867
+Ref: Output Formats-Footnote-1408436
+Node: Memory408593
+Ref: addressable memory unit415548
+Node: Memory Tagging417042
+Node: Auto Display419725
+Node: Print Settings424275
+Ref: set print address424573
+Ref: set print symbol428235
+Ref: set print array428723
+Ref: set print array-indexes429051
+Ref: set print nibbles429537
+Ref: set print characters430084
+Ref: set print elements431151
+Ref: set print frame-arguments432271
+Ref: set print raw-frame-arguments434440
+Ref: set print entry-values434856
+Ref: set print frame-info439235
+Ref: set print repeats440901
+Ref: set print max-depth441543
+Ref: set print memory-tag-violations443235
+Ref: set print null-stop443662
+Ref: set print pretty443986
+Ref: set print raw-values444573
+Ref: set print union445590
+Ref: set print object447896
+Ref: set print static-members448690
+Ref: set print vtbl449367
+Node: Pretty Printing449751
+Node: Pretty-Printer Introduction450267
+Node: Pretty-Printer Example452024
+Node: Pretty-Printer Commands452804
+Node: Value History455688
+Node: Convenience Vars458110
+Node: Convenience Funs465888
+Ref: $_shell convenience function470692
+Node: Registers476891
+Ref: info_registers_reggroup477548
+Ref: standard registers478099
+Ref: Registers-Footnote-1483050
+Node: Floating Point Hardware483445
+Node: Vector Unit483977
+Node: OS Information484364
+Ref: linux info os infotypes486388
+Node: Memory Region Attributes490979
+Node: Dump/Restore Files495643
+Node: Core File Generation498046
+Ref: set use-coredump-filter499606
+Ref: set dump-excluded-mappings501054
+Node: Character Sets501336
+Node: Caching Target Data507701
+Ref: Caching Target Data-Footnote-1510593
+Node: Searching Memory510831
+Node: Value Sizes513974
+Ref: set max-value-size514401
+Node: Optimized Code515626
+Node: Inline Functions517303
+Node: Tail Call Frames519930
+Ref: set debug entry-values522067
+Node: Macros526131
+Ref: Macros-Footnote-1533749
+Node: Tracepoints533902
+Node: Set Tracepoints535964
+Node: Create and Delete Tracepoints538902
+Node: Enable and Disable Tracepoints545357
+Node: Tracepoint Passcounts546597
+Node: Tracepoint Conditions548008
+Node: Trace State Variables549702
+Node: Tracepoint Actions551897
+Node: Listing Tracepoints558682
+Node: Listing Static Tracepoint Markers560384
+Node: Starting and Stopping Trace Experiments562232
+Ref: disconnected tracing563977
+Node: Tracepoint Restrictions568397
+Node: Analyze Collected Data572166
+Node: tfind573472
+Node: tdump577954
+Node: save tracepoints580469
+Node: Tracepoint Variables580965
+Node: Trace Files582093
+Node: Overlays584469
+Node: How Overlays Work585189
+Ref: A code overlay587724
+Node: Overlay Commands591157
+Node: Automatic Overlay Debugging595339
+Node: Overlay Sample Program597478
+Node: Languages599215
+Node: Setting602095
+Node: Filenames603796
+Node: Manually604607
+Node: Automatically605816
+Node: Show606877
+Ref: show language607165
+Node: Checks608199
+Node: Type Checking609204
+Node: Range Checking611033
+Node: Supported Languages613440
+Node: C614777
+Node: C Operators615741
+Node: C Constants620080
+Node: C Plus Plus Expressions622959
+Node: C Defaults626319
+Node: C Checks626987
+Node: Debugging C627547
+Node: Debugging C Plus Plus628031
+Node: Decimal Floating Point633637
+Node: D634907
+Node: Go635165
+Node: Objective-C636259
+Node: Method Names in Commands636722
+Node: The Print Command with Objective-C638413
+Node: OpenCL C639064
+Node: OpenCL C Datatypes639339
+Node: OpenCL C Expressions639714
+Node: OpenCL C Operators640071
+Node: Fortran640303
+Node: Fortran Types641294
+Node: Fortran Operators643211
+Node: Fortran Intrinsics644280
+Node: Special Fortran Commands646908
+Node: Pascal648309
+Node: Rust648820
+Node: Modula-2651914
+Node: M2 Operators652887
+Node: Built-In Func/Proc655885
+Node: M2 Constants658799
+Node: M2 Types660400
+Node: M2 Defaults663618
+Node: Deviations664219
+Node: M2 Checks665320
+Node: M2 Scope666137
+Node: GDB/M2667161
+Node: Ada668074
+Node: Ada Mode Intro669378
+Node: Omissions from Ada670880
+Node: Additions to Ada675170
+Node: Overloading support for Ada679541
+Node: Stopping Before Main Program681181
+Node: Ada Exceptions681728
+Node: Ada Tasks682927
+Node: Ada Tasks and Core Files691305
+Node: Ravenscar Profile692152
+Node: Ada Source Character Set694335
+Node: Ada Glitches695132
+Node: Unsupported Languages699152
+Node: Symbols699842
+Ref: quoting names700445
+Node: Altering735379
+Node: Assignment736417
+Node: Jumping739523
+Node: Signaling742339
+Node: Returning745268
+Node: Calling748619
+Ref: stack unwind settings750192
+Node: Patching755471
+Node: Compiling and Injecting Code756585
+Ref: set debug compile760212
+Ref: set debug compile-cplus-types760462
+Node: GDB Files770483
+Node: Files771331
+Ref: Shared Libraries785443
+Ref: Files-Footnote-1797622
+Node: File Caching797751
+Node: Separate Debug Files798885
+Ref: build ID800126
+Ref: debug-file-directory802594
+Node: MiniDebugInfo811326
+Node: Index Files813777
+Node: Debug Names817863
+Node: Symbol Errors819169
+Node: Data Files822785
+Node: Targets823741
+Node: Active Targets825221
+Node: Target Commands826295
+Ref: load830684
+Ref: flash-erase831877
+Node: Byte Order831937
+Node: Remote Debugging833376
+Node: Connecting834643
+Ref: --multi Option in Types of Remote Connnections836869
+Ref: Attaching in Types of Remote Connections838284
+Ref: Host and target files839164
+Node: File Transfer847786
+Node: Server848725
+Ref: Running gdbserver850301
+Ref: Attaching to a program852519
+Ref: Other Command-Line Arguments for gdbserver855044
+Ref: Monitor Commands for gdbserver859384
+Ref: Server-Footnote-1865441
+Node: Remote Configuration865561
+Ref: set remotebreak866821
+Ref: set remote hardware-watchpoint-limit868283
+Ref: set remote hardware-breakpoint-limit868283
+Ref: set remote hardware-watchpoint-length-limit868785
+Ref: set remote exec-file869240
+Node: Remote Stub882653
+Node: Stub Contents885548
+Node: Bootstrapping887655
+Node: Debug Session891470
+Node: Configurations893511
+Node: Native894280
+Node: BSD libkvm Interface894906
+Node: Process Information895958
+Node: DJGPP Native903299
+Node: Cygwin Native909853
+Node: Non-debug DLL Symbols914774
+Node: Hurd Native919013
+Node: Darwin924269
+Node: FreeBSD925546
+Node: Embedded OS926266
+Node: Embedded Processors926677
+Node: ARC927719
+Node: ARM928266
+Node: BPF931168
+Node: M68K931648
+Node: MicroBlaze931821
+Node: MIPS Embedded933270
+Node: OpenRISC 1000934567
+Node: PowerPC Embedded935473
+Node: AVR938880
+Node: CRIS939252
+Node: Super-H940230
+Node: Architectures941289
+Node: AArch64941729
+Ref: vl943006
+Ref: vq943117
+Ref: vg943227
+Ref: AArch64 SME943274
+Ref: svl945011
+Ref: svq945169
+Ref: svg945281
+Ref: aarch64 sme svcr946035
+Ref: AArch64 SME2951082
+Ref: AArch64 PAC952520
+Node: x86955141
+Ref: x86-Footnote-1959784
+Node: Alpha959870
+Node: MIPS960002
+Node: HPPA963896
+Node: PowerPC964418
+Node: Nios II965154
+Node: Sparc64965559
+Node: S12Z967927
+Node: AMD GPU968236
+Ref: AMD GPU Signals972378
+Ref: AMD GPU Attaching Restrictions978013
+Node: Controlling GDB978725
+Node: Prompt979668
+Node: Editing981386
+Node: Command History982696
+Node: Screen Size987890
+Node: Output Styling989906
+Ref: style_disassembler_enabled991689
+Node: Numbers999673
+Node: ABI1001655
+Node: Auto-loading1004828
+Ref: set auto-load off1005894
+Ref: show auto-load1006530
+Ref: info auto-load1007309
+Node: Init File in the Current Directory1010585
+Ref: set auto-load local-gdbinit1011160
+Ref: show auto-load local-gdbinit1011342
+Ref: info auto-load local-gdbinit1011506
+Node: libthread_db.so.1 file1011654
+Ref: set auto-load libthread-db1012593
+Ref: show auto-load libthread-db1012724
+Ref: info auto-load libthread-db1012861
+Node: Auto-loading safe path1013045
+Ref: set auto-load safe-path1014346
+Ref: show auto-load safe-path1015085
+Ref: add-auto-load-safe-path1015208
+Node: Auto-loading verbose mode1018110
+Ref: set debug auto-load1019273
+Ref: show debug auto-load1019374
+Node: Messages/Warnings1019496
+Ref: confirmation requests1020930
+Node: Debugging Output1022134
+Ref: set debug amd-dbgapi-lib1023521
+Ref: set debug amd-dbgapi1024142
+Node: Other Misc Settings1034383
+Node: Extending GDB1037577
+Node: Sequences1039402
+Node: Define1040064
+Node: Hooks1045921
+Node: Command Files1048287
+Node: Output1053360
+Ref: %V Format Specifier1058162
+Ref: eval1059047
+Node: Auto-loading sequences1059209
+Ref: set auto-load gdb-scripts1059704
+Ref: show auto-load gdb-scripts1059828
+Ref: info auto-load gdb-scripts1059958
+Node: Aliases1060189
+Node: Command aliases default args1063640
+Ref: Command aliases default args-Footnote-11067361
+Node: Python1067515
+Node: Python Commands1068686
+Ref: set_python_print_stack1070061
+Ref: Python Commands-Footnote-11073143
+Node: Python API1073233
+Node: Basic Python1076400
+Ref: prompt_hook1088440
+Ref: gdb_architecture_names1089038
+Ref: gdbpy_connections1089385
+Node: Threading in GDB1092050
+Node: Exception Handling1094617
+Node: Values From Inferior1097526
+Ref: Value.assign1104481
+Node: Types In Python1117789
+Ref: Type.is_array_like1121787
+Node: Pretty Printing API1130624
+Node: Selecting Pretty-Printers1137148
+Node: Writing a Pretty-Printer1139875
+Node: Type Printing API1145387
+Node: Frame Filter API1148003
+Node: Frame Decorator API1155317
+Ref: frame_args1159056
+Node: Writing a Frame Filter1162384
+Node: Unwinding Frames in Python1173858
+Ref: gdb.PendingFrame.create_unwind_info1177150
+Ref: gdb.unwinder.FrameId1182083
+Ref: Managing Registered Unwinders1185454
+Node: Xmethods In Python1186726
+Node: Xmethod API1189622
+Node: Writing an Xmethod1193434
+Node: Inferiors In Python1199266
+Ref: gdbpy_inferior_connection1200225
+Ref: gdbpy_inferior_read_memory1202839
+Ref: choosing attribute names1205247
+Node: Events In Python1208103
+Node: Threads In Python1221924
+Ref: inferior_thread_ptid1223446
+Node: Recordings In Python1227346
+Node: CLI Commands In Python1234639
+Node: GDB/MI Commands In Python1244354
+Node: GDB/MI Notifications In Python1251011
+Node: Parameters In Python1252696
+Node: Functions In Python1261356
+Node: Progspaces In Python1263573
+Node: Objfiles In Python1270494
+Node: Frames In Python1277494
+Ref: gdbpy_frame_read_register1283814
+Node: Blocks In Python1286138
+Node: Symbols In Python1290805
+Node: Symbol Tables In Python1301566
+Node: Line Tables In Python1304787
+Node: Breakpoints In Python1307626
+Ref: python_breakpoint_thread1314261
+Ref: python_breakpoint_inferior1314725
+Node: Finish Breakpoints in Python1321259
+Node: Lazy Strings In Python1323369
+Node: Architectures In Python1325597
+Ref: gdbpy_architecture_name1326058
+Ref: gdbpy_architecture_registers1328349
+Ref: gdbpy_architecture_reggroups1328670
+Node: Registers In Python1328869
+Node: Connections In Python1331139
+Node: TUI Windows In Python1335971
+Ref: python-window-click1340832
+Node: Disassembly In Python1341318
+Ref: DisassembleInfo Class1341710
+Ref: Disassembler Class1347391
+Ref: DisassemblerResult Class1349734
+Ref: Disassembler Styling Parts1353400
+Ref: Disassembler Style Constants1356689
+Ref: builtin_disassemble1364646
+Node: Missing Debug Info In Python1368245
+Node: Python Auto-loading1374206
+Ref: set auto-load python-scripts1374835
+Ref: show auto-load python-scripts1374935
+Ref: info auto-load python-scripts1375041
+Node: Python modules1376175
+Node: gdb.printing1376561
+Node: gdb.types1377988
+Node: gdb.prompt1381000
+Node: Guile1382596
+Node: Guile Introduction1383255
+Node: Guile Commands1384093
+Node: Guile API1385947
+Node: Basic Guile1387944
+Node: Guile Configuration1393626
+Node: GDB Scheme Data Types1394602
+Node: Guile Exception Handling1396434
+Node: Values From Inferior In Guile1400468
+Node: Arithmetic In Guile1416514
+Node: Types In Guile1418145
+Ref: Fields of a type in Guile1426390
+Node: Guile Pretty Printing API1427778
+Node: Selecting Guile Pretty-Printers1433507
+Node: Writing a Guile Pretty-Printer1435883
+Node: Commands In Guile1441068
+Node: Parameters In Guile1451853
+Ref: Parameters In Guile-Footnote-11458886
+Node: Progspaces In Guile1459002
+Node: Objfiles In Guile1461614
+Node: Frames In Guile1463895
+Node: Blocks In Guile1470474
+Node: Symbols In Guile1475282
+Node: Symbol Tables In Guile1483582
+Node: Breakpoints In Guile1486545
+Node: Lazy Strings In Guile1497670
+Node: Architectures In Guile1499961
+Node: Disassembly In Guile1505985
+Node: I/O Ports in Guile1509187
+Node: Memory Ports in Guile1509743
+Node: Iterators In Guile1513594
+Node: Guile Auto-loading1517883
+Ref: set auto-load guile-scripts1518506
+Ref: show auto-load guile-scripts1518604
+Ref: info auto-load guile-scripts1518708
+Node: Guile Modules1519667
+Node: Guile Printing Module1519989
+Node: Guile Types Module1520808
+Node: Auto-loading extensions1522101
+Node: objfile-gdbdotext file1523550
+Ref: set auto-load scripts-directory1525220
+Ref: with-auto-load-dir1525596
+Ref: show auto-load scripts-directory1526414
+Ref: add-auto-load-scripts-directory1526494
+Node: dotdebug_gdb_scripts section1526970
+Node: Which flavor to choose?1530720
+Node: Multiple Extension Languages1532541
+Node: Interpreters1533589
+Node: TUI1537071
+Node: TUI Overview1538119
+Node: TUI Keys1540878
+Node: TUI Single Key Mode1543601
+Node: TUI Mouse Support1544935
+Node: TUI Commands1545973
+Ref: info_win_command1546940
+Node: TUI Configuration1552881
+Ref: tui-mouse-events1554644
+Node: Emacs1555220
+Node: GDB/MI1560657
+Node: GDB/MI General Design1563446
+Node: Context management1565966
+Node: Asynchronous and non-stop modes1569753
+Node: Thread groups1572708
+Node: GDB/MI Command Syntax1574998
+Node: GDB/MI Input Syntax1575241
+Node: GDB/MI Output Syntax1576791
+Node: GDB/MI Compatibility with CLI1580376
+Node: GDB/MI Development and Front Ends1581113
+Node: GDB/MI Output Records1585492
+Node: GDB/MI Result Records1585898
+Node: GDB/MI Stream Records1587248
+Node: GDB/MI Async Records1588513
+Node: GDB/MI Breakpoint Information1599051
+Node: GDB/MI Frame Information1604913
+Node: GDB/MI Thread Information1606195
+Node: GDB/MI Ada Exception Information1607665
+Node: GDB/MI Simple Examples1608215
+Node: GDB/MI Command Description Format1610451
+Node: GDB/MI Breakpoint Commands1611331
+Ref: -break-insert1618605
+Node: GDB/MI Catchpoint Commands1633212
+Node: Shared Library GDB/MI Catchpoint Commands1633625
+Node: Ada Exception GDB/MI Catchpoint Commands1635283
+Node: C++ Exception GDB/MI Catchpoint Commands1638833
+Node: GDB/MI Program Context1642849
+Node: GDB/MI Thread Commands1647117
+Node: GDB/MI Ada Tasking Commands1650418
+Node: GDB/MI Program Execution1652690
+Node: GDB/MI Stack Manipulation1665376
+Ref: -stack-list-arguments1667300
+Ref: -stack-list-frames1671130
+Ref: -stack-list-locals1675392
+Ref: -stack-list-variables1676949
+Node: GDB/MI Variable Objects1678483
+Ref: -var-set-format1688425
+Ref: -var-list-children1689806
+Ref: -var-update1698614
+Ref: -var-set-frozen1701551
+Ref: -var-set-update-range1702336
+Ref: -var-set-visualizer1702869
+Node: GDB/MI Data Manipulation1704428
+Node: GDB/MI Tracepoint Commands1727293
+Node: GDB/MI Symbol Query1739263
+Ref: -symbol-info-functions1739457
+Ref: -symbol-info-module-functions1743956
+Ref: -symbol-info-module-variables1746936
+Ref: -symbol-info-modules1750671
+Ref: -symbol-info-types1752579
+Ref: -symbol-info-variables1754564
+Node: GDB/MI File Commands1759663
+Node: GDB/MI Target Manipulation1769502
+Node: GDB/MI File Transfer Commands1776160
+Node: GDB/MI Ada Exceptions Commands1777483
+Node: GDB/MI Support Commands1778836
+Node: GDB/MI Miscellaneous Commands1783942
+Ref: -interpreter-exec1796107
+Node: Annotations1801796
+Node: Annotations Overview1802727
+Node: Server Prefix1805190
+Node: Prompting1805924
+Node: Errors1807441
+Node: Invalidation1808337
+Node: Annotations for Running1808816
+Node: Source Annotations1810350
+Node: Debugger Adapter Protocol1811279
+Node: JIT Interface1815455
+Node: Declarations1817269
+Node: Registering Code1818656
+Node: Unregistering Code1819628
+Node: Custom Debug Info1820255
+Node: Using JIT Debug Info Readers1821551
+Node: Writing JIT Debug Info Readers1822563
+Node: In-Process Agent1824758
+Ref: Control Agent1826701
+Node: In-Process Agent Protocol1827568
+Node: IPA Protocol Objects1828359
+Ref: agent expression object1829357
+Ref: tracepoint action object1829562
+Ref: tracepoint object1829642
+Node: IPA Protocol Commands1832172
+Node: GDB Bugs1833642
+Node: Bug Criteria1834374
+Node: Bug Reporting1835251
+Node: Command Line Editing1842228
+Node: Introduction and Notation1842880
+Node: Readline Interaction1844501
+Node: Readline Bare Essentials1845690
+Node: Readline Movement Commands1847471
+Node: Readline Killing Commands1848429
+Node: Readline Arguments1850345
+Node: Searching1851387
+Node: Readline Init File1853537
+Node: Readline Init File Syntax1854688
+Node: Conditional Init Constructs1874943
+Node: Sample Init File1879137
+Node: Bindable Readline Commands1882259
+Node: Commands For Moving1883311
+Node: Commands For History1885067
+Node: Commands For Text1889827
+Node: Commands For Killing1893527
+Node: Numeric Arguments1896238
+Node: Commands For Completion1897375
+Node: Keyboard Macros1899341
+Node: Miscellaneous Commands1900026
+Node: Readline vi Mode1903945
+Node: Using History Interactively1904855
+Node: History Interaction1905370
+Node: Event Designators1907266
+Node: Word Designators1908538
+Node: Modifiers1910296
+Node: In Memoriam1911839
+Node: Formatting Documentation1912722
+Ref: Formatting Documentation-Footnote-11916102
+Node: Installing GDB1916200
+Node: Requirements1916772
+Ref: MPFR1918417
+Ref: Expat1920050
+Node: Running Configure1922929
+Node: Separate Objdir1925811
+Node: Config Names1928791
+Node: Configure Options1930270
+Node: System-wide configuration1939413
+Node: System-wide Configuration Scripts1941950
+Node: Maintenance Commands1943134
+Ref: maint info breakpoints1944859
+Ref: maint info python-disassemblers1947664
+Ref: maint packet1954780
+Ref: maint check libthread-db1956728
+Ref: maint_libopcodes_styling1974882
+Node: Remote Protocol1980433
+Node: Overview1981125
+Ref: Binary Data1983670
+Node: Packets1986326
+Ref: thread-id syntax1987226
+Ref: extended mode1988671
+Ref: ? packet1988929
+Ref: bc1990450
+Ref: bs1990660
+Ref: read registers packet1992277
+Ref: cycle step packet1994731
+Ref: write register packet1997442
+Ref: step with signal packet1998421
+Ref: vCont packet1999897
+Ref: vCtrlC packet2003131
+Ref: vKill packet2005549
+Ref: X packet2007083
+Ref: insert breakpoint or watchpoint packet2007452
+Node: Stop Reply Packets2011778
+Ref: swbreak stop reason2015029
+Ref: thread clone event2018562
+Ref: thread create event2018942
+Ref: thread exit event2020145
+Node: General Query Packets2022393
+Ref: qCRC packet2025223
+Ref: QEnvironmentHexEncoded2028376
+Ref: QEnvironmentUnset2029606
+Ref: QEnvironmentReset2030550
+Ref: QSetWorkingDir packet2031494
+Ref: qMemTags2036380
+Ref: QMemTags2037406
+Ref: QNonStop2040791
+Ref: QCatchSyscalls2041467
+Ref: QPassSignals2043004
+Ref: QProgramSignals2044211
+Ref: QThreadEvents2045778
+Ref: QThreadOptions2047080
+Ref: qSearch memory2051287
+Ref: QStartNoAckMode2051795
+Ref: qSupported2052327
+Ref: multiprocess extensions2068079
+Ref: install tracepoint in tracing2070109
+Ref: qThreadExtraInfo2074318
+Ref: qXfer read2075444
+Ref: qXfer auxiliary vector read2077051
+Ref: qXfer btrace read2077399
+Ref: qXfer btrace-conf read2078464
+Ref: qXfer executable filename read2078815
+Ref: qXfer target description read2079430
+Ref: qXfer library list read2079864
+Ref: qXfer svr4 library list read2080520
+Ref: qXfer memory map read2082775
+Ref: qXfer sdata read2083162
+Ref: qXfer siginfo read2083628
+Ref: qXfer threads read2084024
+Ref: qXfer traceframe info read2084427
+Ref: qXfer unwind info block2084845
+Ref: qXfer fdpic loadmap read2085079
+Ref: qXfer osdata read2085495
+Ref: qXfer write2085649
+Ref: qXfer siginfo write2086741
+Ref: General Query Packets-Footnote-12089469
+Node: Architecture-Specific Protocol Details2089796
+Node: ARM-Specific Protocol Details2090305
+Node: ARM Breakpoint Kinds2090578
+Node: ARM Memory Tag Types2090938
+Node: MIPS-Specific Protocol Details2091237
+Node: MIPS Register packet Format2091520
+Node: MIPS Breakpoint Kinds2092447
+Node: Tracepoint Packets2092865
+Ref: QTEnable2102179
+Ref: QTDisable2102375
+Ref: qTfSTM2107912
+Ref: qTsSTM2107912
+Ref: qTSTMat2108989
+Ref: QTBuffer-size2110140
+Node: Host I/O Packets2113830
+Node: Interrupts2119412
+Ref: interrupting remote targets2119556
+Node: Notification Packets2121724
+Node: Remote Non-Stop2127149
+Node: Packet Acknowledgment2130265
+Node: Examples2132380
+Node: File-I/O Remote Protocol Extension2132974
+Node: File-I/O Overview2133436
+Node: Protocol Basics2135635
+Node: The F Request Packet2137864
+Node: The F Reply Packet2138765
+Node: The Ctrl-C Message2139683
+Node: Console I/O2141309
+Node: List of Supported Calls2142525
+Node: open2142887
+Node: close2145395
+Node: read2145778
+Node: write2146387
+Node: lseek2147158
+Node: rename2148042
+Node: unlink2149449
+Node: stat/fstat2150396
+Node: gettimeofday2151289
+Node: isatty2151725
+Node: system2152321
+Node: Protocol-specific Representation of Datatypes2153863
+Node: Integral Datatypes2154240
+Node: Pointer Values2155047
+Node: Memory Transfer2155751
+Node: struct stat2156371
+Node: struct timeval2158573
+Node: Constants2159090
+Node: Open Flags2159539
+Node: mode_t Values2159880
+Node: Errno Values2160372
+Node: Lseek Flags2161182
+Node: Limits2161367
+Node: File-I/O Examples2161727
+Node: Library List Format2162815
+Node: Library List Format for SVR4 Targets2165597
+Node: Memory Map Format2168374
+Node: Thread List Format2170898
+Node: Traceframe Info Format2171902
+Node: Branch Trace Format2173588
+Node: Branch Trace Configuration Format2175288
+Node: Agent Expressions2176462
+Node: General Bytecode Design2179283
+Node: Bytecode Descriptions2184077
+Node: Using Agent Expressions2197544
+Node: Varying Target Capabilities2199521
+Node: Rationale2200682
+Node: Target Descriptions2208071
+Node: Retrieving Descriptions2210014
+Node: Target Description Format2211099
+Node: Predefined Target Types2220974
+Node: Enum Target Types2222557
+Node: Standard Target Features2223552
+Node: AArch64 Features2225575
+Node: ARC Features2235790
+Ref: ARC Features-Footnote-12237609
+Node: ARM Features2237642
+Node: i386 Features2247273
+Node: LoongArch Features2249487
+Node: MicroBlaze Features2250050
+Node: MIPS Features2250632
+Node: M68K Features2251823
+Node: NDS32 Features2252810
+Node: Nios II Features2253834
+Node: OpenRISC 1000 Features2254241
+Node: PowerPC Features2254607
+Node: RISC-V Features2258577
+Node: RX Features2260420
+Node: S/390 and System z Features2260782
+Node: Sparc Features2262922
+Node: TIC6x Features2263827
+Node: Operating System Information2264376
+Node: Process list2265212
+Node: Trace File Format2266275
+Node: Index Section Format2269489
+Node: Debuginfod2278104
+Node: Debuginfod Settings2278940
+Ref: set debuginfod enabled2279119
+Node: Man Pages2280802
+Node: gdb man2281262
+Node: gdbserver man2289172
+Node: gcore man2297094
+Node: gdbinit man2298216
+Node: gdb-add-index man2299455
+Ref: gdb-add-index2299564
+Node: Copying2300438
+Node: GNU Free Documentation License2337999
+Node: Concept Index2363146
+Node: Command and Variable Index2517336
 
 End Tag Table
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-1 ./gdb/doc/gdb.info-1
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-1	2019-12-11 01:53:06.000000000 +0000
+++ ./gdb/doc/gdb.info-1	2024-02-01 01:52:17.000000000 +0000
@@ -1,6 +1,6 @@
-This is gdb.info, produced by makeinfo version 6.3 from gdb.texinfo.
+This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo.
 
-Copyright (C) 1988-2019 Free Software Foundation, Inc.
+Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -21,9 +21,9 @@ END-INFO-DIR-ENTRY
    This file documents the GNU debugger GDB.
 
    This is the Tenth Edition, of 'Debugging with GDB: the GNU
-Source-Level Debugger' for GDB (GDB) Version 9.0.50.20191211-git.
+Source-Level Debugger' for GDB (GDB) Version 15.0.50.20240201-git.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -37,16 +37,17 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
-File: gdb.info,  Node: Top,  Next: Summary,  Prev: (dir),  Up: (dir)
+File: gdb.info,  Node: Top,  Next: Summary
 
 Debugging with GDB
 ******************
 
 This file describes GDB, the GNU symbolic debugger.
 
-   This is the Tenth Edition, for GDB (GDB) Version 9.0.50.20191211-git.
+   This is the Tenth Edition, for GDB (GDB) Version
+15.0.50.20240201-git.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    This edition of the GDB manual is dedicated to the memory of Fred
 Fish.  Fred was a long-standing contributor to GDB and to Free software
@@ -81,11 +82,12 @@ in general.  We will miss him.
 * Configurations::              Configuration-specific information
 * Controlling GDB::             Controlling GDB
 * Extending GDB::               Extending GDB
-* Interpreters::		Command Interpreters
+* Interpreters::                Command Interpreters
 * TUI::                         GDB Text User Interface
 * Emacs::                       Using GDB under GNU Emacs
 * GDB/MI::                      GDB's Machine Interface.
 * Annotations::                 GDB's annotation interface.
+* Debugger Adapter Protocol::	The Debugger Adapter Protocol.
 * JIT Interface::               Using the JIT debugging interface.
 * In-Process Agent::            In-Process Agent
 
@@ -105,13 +107,14 @@ in general.  We will miss him.
                                  the operating system
 * Trace File Format::		GDB trace file format
 * Index Section Format::        .gdb_index section format
-* Man Pages::			Manual pages
-* Copying::			GNU General Public License says
+* Debuginfod::                  Download debugging resources with 'debuginfod'
+* Man Pages::                   Manual pages
+* Copying::                     GNU General Public License says
                                 how you can copy and share GDB
 * GNU Free Documentation License::  The license for this documentation
 * Concept Index::               Index of GDB concepts
 * Command and Variable Index::  Index of GDB commands, variables,
-                                  functions, and Python data types
+                                functions, and Python data types
 
 
 File: gdb.info,  Node: Summary,  Next: Sample Session,  Up: Top
@@ -461,6 +464,10 @@ Alessandro Forin and Per Bothner.  More
 of Jeremy Bennett, Franck Jullien, Stefan Wallentowitz and Stafford
 Horne.
 
+   Weimin Pan, David Faust and Jose E. Marchesi contributed support for
+the Linux kernel BPF virtual architecture.  This work was sponsored by
+Oracle.
+
 
 File: gdb.info,  Node: Sample Session,  Next: Invocation,  Prev: Summary,  Up: Top
 
@@ -507,7 +514,7 @@ Let us use GDB to try to see what is goi
      There is absolutely no warranty for GDB; type "show warranty"
       for details.
 
-     GDB 9.0.50.20191211-git, Copyright 1999 Free Software Foundation, Inc...
+     GDB 15.0.50.20240201-git, Copyright 1999 Free Software Foundation, Inc...
      (gdb)
 
 GDB reads only enough symbol data to know where to find the rest when
@@ -680,7 +687,7 @@ File: gdb.info,  Node: Invocation,  Next
 This chapter discusses how to start GDB, and how to get out of it.  The
 essentials are:
    * type 'gdb' to start GDB.
-   * type 'quit' or 'Ctrl-d' to exit.
+   * type 'quit', 'exit' or 'Ctrl-d' to exit.
 
 * Menu:
 
@@ -762,6 +769,7 @@ used.
 * File Options::                Choosing files
 * Mode Options::                Choosing modes
 * Startup::                     What GDB does during startup
+* Initialization Files::        Initialization Files
 
 
 File: gdb.info,  Node: File Options,  Next: Mode Options,  Up: Invoking GDB
@@ -786,6 +794,11 @@ prefixing it with './', e.g. './12345'.
 for most embedded targets, then it will complain about a second argument
 and ignore it.
 
+   For the '-s', '-e', and '-se' options, and their long form
+equivalents, the method used to search the file system for the symbol
+and/or executable file is the same as that used by the 'file' command.
+*Note file: Files.
+
    Many options have both long and short forms; both are shown in the
 following list.  GDB also recognizes the long forms if you truncate
 them, so long as enough of the option is present to be unambiguous.  (If
@@ -838,6 +851,16 @@ though we illustrate the more usual conv
      Execute a single GDB command before loading the inferior (but after
      loading gdbinit files).  *Note Startup::.
 
+'-early-init-command FILE'
+'-eix FILE'
+     Execute commands from FILE very early in the initialization
+     process, before any output is produced.  *Note Startup::.
+
+'-early-init-eval-command COMMAND'
+'-eiex COMMAND'
+     Execute a single GDB command very early in the initialization
+     process, before any output is produced.
+
 '-directory DIRECTORY'
 '-d DIRECTORY'
      Add DIRECTORY to the path to search for source and script files.
@@ -869,42 +892,14 @@ or quiet mode.
 
 '-nx'
 '-n'
-     Do not execute commands found in any initialization file.  There
-     are three init files, loaded in the following order:
-
-     'system.gdbinit'
-          This is the system-wide init file.  Its location is specified
-          with the '--with-system-gdbinit' configure option (*note
-          System-wide configuration::).  It is loaded first when GDB
-          starts, before command line options have been processed.
-     'system.gdbinit.d'
-          This is the system-wide init directory.  Its location is
-          specified with the '--with-system-gdbinit-dir' configure
-          option (*note System-wide configuration::).  Files in this
-          directory are loaded in alphabetical order immediately after
-          system.gdbinit (if enabled) when GDB starts, before command
-          line options have been processed.  Files need to have a
-          recognized scripting language extension ('.py'/'.scm') or be
-          named with a '.gdb' extension to be interpreted as regular GDB
-          commands.  GDB will not recurse into any subdirectories of
-          this directory.
-     '~/.gdbinit'
-          This is the init file in your home directory.  It is loaded
-          next, after 'system.gdbinit', and before command options have
-          been processed.
-     './.gdbinit'
-          This is the init file in the current directory.  It is loaded
-          last, after command line options other than '-x' and '-ex'
-          have been processed.  Command line options '-x' and '-ex' are
-          processed last, after './.gdbinit' has been loaded.
-
-     For further documentation on startup processing, *Note Startup::.
-     For documentation on how to write command files, *Note Command
-     Files: Command Files.
+     Do not execute commands found in any initialization files (*note
+     Initialization Files::).
 
 '-nh'
-     Do not execute commands found in '~/.gdbinit', the init file in
-     your home directory.  *Note Startup::.
+     Do not execute commands found in any home directory initialization
+     file (*note Home directory initialization file: Initialization
+     Files.).  The system wide and current directory initialization
+     files are still loaded.
 
 '-quiet'
 '-silent'
@@ -912,6 +907,12 @@ or quiet mode.
      "Quiet".  Do not print the introductory and copyright messages.
      These messages are also suppressed in batch mode.
 
+     This can also be enabled using 'set startup-quietly on'.  The
+     default is 'off'.  Use 'show startup-quietly' to see the current
+     setting.  Place 'set startup-quietly on' into your early
+     initialization file (*note Initialization Files: Initialization
+     Files.) to have future GDB sessions startup quietly.
+
 '-batch'
      Run in batch mode.  Exit with status '0' after processing all the
      command files specified with '-x' (and all commands from
@@ -1058,44 +1059,54 @@ or quiet mode.
      important when reporting GDB bugs (*note GDB Bugs::).
 
 
-File: gdb.info,  Node: Startup,  Prev: Mode Options,  Up: Invoking GDB
+File: gdb.info,  Node: Startup,  Next: Initialization Files,  Prev: Mode Options,  Up: Invoking GDB
 
 2.1.3 What GDB Does During Startup
 ----------------------------------
 
 Here's the description of what GDB does during session startup:
 
-  1. Sets up the command interpreter as specified by the command line
-     (*note interpreter: Mode Options.).
+  1. Performs minimal setup required to initialize basic internal state.
+
+  2. Reads commands from the early initialization file (if any) in your
+     home directory.  Only a restricted set of commands can be placed
+     into an early initialization file, see *note Initialization
+     Files::, for details.
+
+  3. Executes commands and command files specified by the '-eiex' and
+     '-eix' command line options in their specified order.  Only a
+     restricted set of commands can be used with '-eiex' and 'eix', see
+     *note Initialization Files::, for details.
 
-  2. Reads the system-wide "init file" (if '--with-system-gdbinit' was
-     used when building GDB; *note System-wide configuration and
-     settings: System-wide configuration.) and the files in the
-     system-wide gdbinit directory (if '--with-system-gdbinit-dir' was
-     used) and executes all the commands in those files.  The files need
-     to be named with a '.gdb' extension to be interpreted as GDB
-     commands, or they can be written in a supported scripting language
-     with an appropriate file extension.
+  4. Sets up the command interpreter as specified by the command line
+     (*note interpreter: Mode Options.).
 
-  3. Reads the init file (if any) in your home directory(1) and executes
-     all the commands in that file.
+  5. Reads the system wide initialization file and the files from the
+     system wide initialization directory, *note System Wide Init
+     Files::.
+
+  6. Reads the initialization file (if any) in your home directory and
+     executes all the commands in that file, *note Home Directory Init
+     File::.
 
-  4. Executes commands and command files specified by the '-iex' and
+  7. Executes commands and command files specified by the '-iex' and
      '-ix' options in their specified order.  Usually you should use the
      '-ex' and '-x' options instead, but this way you can apply settings
      before GDB init files get executed and before inferior gets loaded.
 
-  5. Processes command line options and operands.
+  8. Processes command line options and operands.
 
-  6. Reads and executes the commands from init file (if any) in the
-     current working directory as long as 'set auto-load local-gdbinit'
-     is set to 'on' (*note Init File in the Current Directory::).  This
-     is only done if the current directory is different from your home
-     directory.  Thus, you can have more than one init file, one generic
-     in your home directory, and another, specific to the program you
-     are debugging, in the directory where you invoke GDB.
+  9. Reads and executes the commands from the initialization file (if
+     any) in the current working directory as long as 'set auto-load
+     local-gdbinit' is set to 'on' (*note Init File in the Current
+     Directory::).  This is only done if the current directory is
+     different from your home directory.  Thus, you can have more than
+     one init file, one generic in your home directory, and another,
+     specific to the program you are debugging, in the directory where
+     you invoke GDB.  *Note Init File in the Current Directory during
+     Startup::.
 
-  7. If the command line specified a program to debug, or a process to
+  10. If the command line specified a program to debug, or a process to
      attach to, or a core file, GDB loads any auto-loaded scripts
      provided for the program or for its loaded shared libraries.  *Note
      Auto-loading::.
@@ -1108,35 +1119,170 @@ Here's the description of what GDB does
      Option '-ex' does not work because the auto-loading is then turned
      off too late.
 
-  8. Executes commands and command files specified by the '-ex' and '-x'
-     options in their specified order.  *Note Command Files::, for more
-     details about GDB command files.
+  11. Executes commands and command files specified by the '-ex' and
+     '-x' options in their specified order.  *Note Command Files::, for
+     more details about GDB command files.
 
-  9. Reads the command history recorded in the "history file".  *Note
+  12. Reads the command history recorded in the "history file".  *Note
      Command History::, for more details about the command history and
      the files where GDB records it.
 
-   Init files use the same syntax as "command files" (*note Command
-Files::) and are processed by GDB in the same way.  The init file in
-your home directory can set options (such as 'set complaints') that
-affect subsequent processing of command line options and operands.  Init
-files are not executed if you use the '-nx' option (*note Choosing
-Modes: Mode Options.).
-
-   To display the list of init files loaded by gdb at startup, you can
-use 'gdb --help'.
-
-   The GDB init files are normally called '.gdbinit'.  The DJGPP port of
-GDB uses the name 'gdb.ini', due to the limitations of file names
-imposed by DOS filesystems.  The Windows port of GDB uses the standard
-name, but if it finds a 'gdb.ini' file in your home directory, it warns
-you about that and suggests to rename the file to the standard name.
+
+File: gdb.info,  Node: Initialization Files,  Prev: Startup,  Up: Invoking GDB
+
+2.1.4 Initialization Files
+--------------------------
+
+During startup (*note Startup::) GDB will execute commands from several
+initialization files.  These initialization files use the same syntax as
+"command files" (*note Command Files::) and are processed by GDB in the
+same way.
+
+   To display the list of initialization files loaded by GDB at startup,
+in the order they will be loaded, you can use 'gdb --help'.
+
+   The "early initialization" file is loaded very early in GDB's
+initialization process, before the interpreter (*note Interpreters::)
+has been initialized, and before the default target (*note Targets::) is
+initialized.  Only 'set' or 'source' commands should be placed into an
+early initialization file, and the only 'set' commands that can be used
+are those that control how GDB starts up.
+
+   Commands that can be placed into an early initialization file will be
+documented as such throughout this manual.  Any command that is not
+documented as being suitable for an early initialization file should
+instead be placed into a general initialization file.  Command files
+passed to '--early-init-command' or '-eix' are also early initialization
+files, with the same command restrictions.  Only commands that can
+appear in an early initialization file should be passed to
+'--early-init-eval-command' or '-eiex'.
+
+   In contrast, the "general initialization" files are processed later,
+after GDB has finished its own internal initialization process, any
+valid command can be used in these files.
+
+   Throughout the rest of this document the term "initialization file"
+refers to one of the general initialization files, not the early
+initialization file.  Any discussion of the early initialization file
+will specifically mention that it is the early initialization file being
+discussed.
+
+   As the system wide and home directory initialization files are
+processed before most command line options, changes to settings (e.g.
+'set complaints') can affect subsequent processing of command line
+options and operands.
+
+   The following sections describe where GDB looks for the early
+initialization and initialization files, and the order that the files
+are searched for.
+
+2.1.4.1 Home directory early initialization files
+.................................................
+
+GDB initially looks for an early initialization file in the users home
+directory(1).  There are a number of locations that GDB will search in
+the home directory, these locations are searched in order and GDB will
+load the first file that it finds, and subsequent locations will not be
+checked.
+
+   On non-macOS hosts the locations searched are:
+   * The file 'gdb/gdbearlyinit' within the directory pointed to by the
+     environment variable 'XDG_CONFIG_HOME', if it is defined.
+   * The file '.config/gdb/gdbearlyinit' within the directory pointed to
+     by the environment variable 'HOME', if it is defined.
+   * The file '.gdbearlyinit' within the directory pointed to by the
+     environment variable 'HOME', if it is defined.
+
+   By contrast, on macOS hosts the locations searched are:
+   * The file 'Library/Preferences/gdb/gdbearlyinit' within the
+     directory pointed to by the environment variable 'HOME', if it is
+     defined.
+   * The file '.gdbearlyinit' within the directory pointed to by the
+     environment variable 'HOME', if it is defined.
+
+   It is possible to prevent the home directory early initialization
+file from being loaded using the '-nx' or '-nh' command line options,
+*note Choosing Modes: Mode Options.
+
+2.1.4.2 System wide initialization files
+........................................
+
+There are two locations that are searched for system wide initialization
+files.  Both of these locations are always checked:
+
+'system.gdbinit'
+     This is a single system-wide initialization file.  Its location is
+     specified with the '--with-system-gdbinit' configure option (*note
+     System-wide configuration::).  It is loaded first when GDB starts,
+     before command line options have been processed.
+
+'system.gdbinit.d'
+     This is the system-wide initialization directory.  Its location is
+     specified with the '--with-system-gdbinit-dir' configure option
+     (*note System-wide configuration::).  Files in this directory are
+     loaded in alphabetical order immediately after 'system.gdbinit' (if
+     enabled) when GDB starts, before command line options have been
+     processed.  Files need to have a recognized scripting language
+     extension ('.py'/'.scm') or be named with a '.gdb' extension to be
+     interpreted as regular GDB commands.  GDB will not recurse into any
+     subdirectories of this directory.
+
+   It is possible to prevent the system wide initialization files from
+being loaded using the '-nx' command line option, *note Choosing Modes:
+Mode Options.
+
+2.1.4.3 Home directory initialization file
+..........................................
+
+After loading the system wide initialization files GDB will look for an
+initialization file in the users home directory(2).  There are a number
+of locations that GDB will search in the home directory, these locations
+are searched in order and GDB will load the first file that it finds,
+and subsequent locations will not be checked.
+
+   On non-Apple hosts the locations searched are:
+'$XDG_CONFIG_HOME/gdb/gdbinit'
+'$HOME/.config/gdb/gdbinit'
+'$HOME/.gdbinit'
+
+   While on Apple hosts the locations searched are:
+'$HOME/Library/Preferences/gdb/gdbinit'
+'$HOME/.gdbinit'
+
+   It is possible to prevent the home directory initialization file from
+being loaded using the '-nx' or '-nh' command line options, *note
+Choosing Modes: Mode Options.
+
+   The DJGPP port of GDB uses the name 'gdb.ini' instead of '.gdbinit'
+or 'gdbinit', due to the limitations of file names imposed by DOS
+filesystems.  The Windows port of GDB uses the standard name, but if it
+finds a 'gdb.ini' file in your home directory, it warns you about that
+and suggests to rename the file to the standard name.
+
+2.1.4.4 Local directory initialization file
+...........................................
+
+GDB will check the current directory for a file called '.gdbinit'.  It
+is loaded last, after command line options other than '-x' and '-ex'
+have been processed.  The command line options '-x' and '-ex' are
+processed last, after '.gdbinit' has been loaded, *note Choosing Files:
+File Options.
+
+   If the file in the current directory was already loaded as the home
+directory initialization file then it will not be loaded a second time.
+
+   It is possible to prevent the local directory initialization file
+from being loaded using the '-nx' command line option, *note Choosing
+Modes: Mode Options.
 
    ---------- Footnotes ----------
 
    (1) On DOS/Windows systems, the home directory is the one pointed to
 by the 'HOME' environment variable.
 
+   (2) On DOS/Windows systems, the home directory is the one pointed to
+by the 'HOME' environment variable.
+
 
 File: gdb.info,  Node: Quitting GDB,  Next: Shell Commands,  Prev: Invoking GDB,  Up: Invocation
 
@@ -1144,11 +1290,13 @@ File: gdb.info,  Node: Quitting GDB,  Ne
 ================
 
 'quit [EXPRESSION]'
+'exit [EXPRESSION]'
 'q'
-     To exit GDB, use the 'quit' command (abbreviated 'q'), or type an
-     end-of-file character (usually 'Ctrl-d').  If you do not supply
-     EXPRESSION, GDB will terminate normally; otherwise it will
-     terminate using the result of EXPRESSION as the error code.
+     To exit GDB, use the 'quit' command (abbreviated 'q'), the 'exit'
+     command, or type an end-of-file character (usually 'Ctrl-d').  If
+     you do not supply EXPRESSION, GDB will terminate normally;
+     otherwise it will terminate using the result of EXPRESSION as the
+     error code.
 
    An interrupt (often 'Ctrl-c') does not exit from GDB, but rather
 terminates the action of any GDB command that is in progress and returns
@@ -1172,11 +1320,15 @@ session, there is no need to leave or su
 
 'shell COMMAND-STRING'
 '!COMMAND-STRING'
-     Invoke a standard shell to execute COMMAND-STRING.  Note that no
-     space is needed between '!' and COMMAND-STRING.  If it exists, the
-     environment variable 'SHELL' determines which shell to run.
-     Otherwise GDB uses the default shell ('/bin/sh' on Unix systems,
-     'COMMAND.COM' on MS-DOS, etc.).
+     Invoke a shell to execute COMMAND-STRING.  Note that no space is
+     needed between '!' and COMMAND-STRING.  On GNU and Unix systems,
+     the environment variable 'SHELL', if it exists, determines which
+     shell to run.  Otherwise GDB uses the default shell ('/bin/sh' on
+     GNU and Unix systems, 'cmd.exe' on MS-Windows, 'COMMAND.COM' on
+     MS-DOS, etc.).
+
+   You may also invoke shell commands from expressions, using the
+'$_shell' convenience function.  *Note $_shell convenience function::.
 
    The utility 'make' is often needed in development environments.  You
 do not have to use the 'shell' command for this purpose in GDB:
@@ -1240,16 +1392,14 @@ File: gdb.info,  Node: Logging Output,
 You may want to save the output of GDB commands to a file.  There are
 several commands to control GDB's logging.
 
-'set logging on'
-     Enable logging.
-'set logging off'
-     Disable logging.
+'set logging enabled [on|off]'
+     Enable or disable logging.
 'set logging file FILE'
      Change the name of the current logfile.  The default logfile is
      'gdb.txt'.
 'set logging overwrite [on|off]'
      By default, GDB will append to the logfile.  Set 'overwrite' if you
-     want 'set logging on' to overwrite the logfile instead.
+     want 'set logging enabled on' to overwrite the logfile instead.
 'set logging redirect [on|off]'
      By default, GDB output will go to both the terminal and the
      logfile.  Set 'redirect' if you want output to go only to the log
@@ -1349,8 +1499,8 @@ loaded at GDB startup.  *Note Startup::.
    The settings can also be changed interactively during the debugging
 session.  For example, to change the limit of array elements to print,
 you can do the following:
-     (GDB) set print elements 10
-     (GDB) print some_array
+     (gdb) set print elements 10
+     (gdb) print some_array
      $1 = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90...}
 
    The above 'set print elements 10' command changes the number of
@@ -1363,7 +1513,7 @@ example, the 'print' command supports a
 overriding relevant global print settings as set by 'set print'
 subcommands.  *Note print options::.  The example above could be
 rewritten as:
-     (GDB) print -elements 10 -- some_array
+     (gdb) print -elements 10 -- some_array
      $1 = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90...}
 
    Alternatively, you can use the 'with' command to change a setting
@@ -1383,17 +1533,17 @@ temporarily, for the duration of a comma
      free-form arguments, such as expressions or filenames.
 
      For example, the command
-          (GDB) with print array on -- print some_array
+          (gdb) with print array on -- print some_array
      is equivalent to the following 3 commands:
-          (GDB) set print array on
-          (GDB) print some_array
-          (GDB) set print array off
+          (gdb) set print array on
+          (gdb) print some_array
+          (gdb) set print array off
 
      The 'with' command is particularly useful when you want to override
      a setting while running user-defined commands, or commands defined
      in Python or Guile.  *Note Extending GDB: Extending GDB.
 
-          (GDB) with print pretty on -- my_complex_command
+          (gdb) with print pretty on -- my_complex_command
 
      To change several settings for the same command, you can nest
      'with' commands.  For example, 'with language ada -- with print
@@ -1417,7 +1567,7 @@ word.  If there is only one possibility,
 waits for you to finish the command (or press <RET> to enter it).  For
 example, if you type
 
-     (gdb) info bre <TAB>
+     (gdb) info bre<TAB>
 
 GDB fills in the rest of the word 'breakpoints', since that is the only
 'info' subcommand beginning with 'bre':
@@ -1440,7 +1590,7 @@ you type 'b make_<TAB>' GDB just sounds
 displays all the function names in your program that begin with those
 characters, for example:
 
-     (gdb) b make_ <TAB>
+     (gdb) b make_<TAB>
 GDB sounds bell; press <TAB> again, to see:
      make_a_section_from_file     make_environ
      make_abs_section             make_function_type
@@ -1452,6 +1602,17 @@ GDB sounds bell; press <TAB> again, to s
 After displaying the available possibilities, GDB copies your partial
 input ('b make_' in the example) so you can finish the command.
 
+   If the command you are trying to complete expects either a keyword or
+a number to follow, then 'NUMBER' will be shown among the available
+completions, for example:
+
+     (gdb) print -elements <TAB><TAB>
+     NUMBER     unlimited
+     (gdb) print -elements 
+
+Here, the option expects a number (e.g., '100'), not literal 'NUMBER'.
+Such metasyntactical arguments are always presented in uppercase.
+
    If you just want to see the list of alternatives in the first place,
 you can press 'M-?' rather than pressing <TAB> twice.  'M-?' means
 '<META> ?'.  You can type this either by holding down a key designated
@@ -1503,15 +1664,15 @@ situation, type a single quote ''' at th
 name.  This alerts GDB that it may need to consider more information
 than usual when you press <TAB> or 'M-?' to request word completion:
 
-     (gdb) p 'func< M-?
+     (gdb) p 'func<M-?
      func<int>()    func<float>()
      (gdb) p 'func<
 
-   When setting breakpoints however (*note Specify Location::), you
-don't usually need to type a quote before the function name, because GDB
-understands that you want to set a breakpoint on a function:
+   When setting breakpoints however (*note Location Specifications::),
+you don't usually need to type a quote before the function name, because
+GDB understands that you want to set a breakpoint on a function:
 
-     (gdb) b func< M-?
+     (gdb) b func<M-?
      func<int>()    func<float>()
      (gdb) b func<
 
@@ -1522,9 +1683,9 @@ don't need to distinguish whether you me
 takes an 'int' parameter, 'name(int)', or the version that takes a
 'float' parameter, 'name(float)'.
 
-     (gdb) b bubble( M-?
+     (gdb) b bubble(M-?
      bubble(int)    bubble(double)
-     (gdb) b bubble(dou M-?
+     (gdb) b bubble(douM-?
      bubble(double)
 
    See *note quoting names:: for a description of other scenarios that
@@ -1586,8 +1747,8 @@ available, if there is more than one pos
 command processes arbitrary expressions in any of the languages
 supported by GDB.  With such commands, because raw input may start with
 a leading dash that would be confused with an option or any of its
-abbreviations, e.g. 'print -r' (short for 'print -raw' or printing
-negative 'r'?), if you specify any command option, then you must use a
+abbreviations, e.g. 'print -p' (short for 'print -pretty' or printing
+negative 'p'?), if you specify any command option, then you must use a
 double-dash ('--') delimiter to indicate the end of options.
 
    Some options are described as accepting an argument which can be
@@ -1606,10 +1767,10 @@ also omit a "true" value, as it is impli
 completing on '-' after the command name.  For example:
 
      (gdb) print -<TAB><TAB>
-     -address         -max-depth       -repeats         -vtbl
-     -array           -null-stop       -static-members
-     -array-indexes   -object          -symbol
-     -elements        -pretty          -union
+     -address         -max-depth               -object          -static-members
+     -array           -memory-tag-violations   -pretty          -symbol
+     -array-indexes   -nibbles                 -raw-values      -union
+     -elements        -null-stop               -repeats         -vtbl
 
    Completion will in some cases guide you with a suggestion of what
 kind of argument an option expects.  For example:
@@ -1617,9 +1778,8 @@ kind of argument an option expects.  For
      (gdb) print -elements <TAB><TAB>
      NUMBER     unlimited
 
-   Here, the option expects a number (e.g., '100'), not literal
-'NUMBER'.  Such metasyntactical arguments are always presented in
-uppercase.
+Here, the option expects a number (e.g., '100'), not literal 'NUMBER'.
+Such metasyntactical arguments are always presented in uppercase.
 
    (For more on using the 'print' command, see *note Examining Data:
 Data.)
@@ -1641,7 +1801,7 @@ command 'help'.
           (gdb) help
           List of classes of commands:
 
-          aliases -- Aliases of other commands
+          aliases -- User-defined aliases of other commands
           breakpoints -- Making program stop at certain points
           data -- Examining data
           files -- Specifying and examining files
@@ -1664,17 +1824,25 @@ command 'help'.
 
 'help CLASS'
      Using one of the general help classes as an argument, you can get a
-     list of the individual commands in that class.  For example, here
-     is the help display for the class 'status':
+     list of the individual commands in that class.  If a command has
+     aliases, the aliases are given after the command name, separated by
+     commas.  If an alias has default arguments, the full definition of
+     the alias is given after the first line.  For example, here is the
+     help display for the class 'status':
 
           (gdb) help status
           Status inquiries.
 
           List of commands:
 
-          info -- Generic command for showing things
+          info, inf, i -- Generic command for showing things
                   about the program being debugged
-          show -- Generic command for showing things
+          info address, iamain  -- Describe where symbol SYM is stored.
+            alias iamain = info address main
+          info all-registers -- List of all registers and their contents,
+                  for selected stack frame.
+          ...
+          show, info set -- Generic command for showing things
                   about the debugger
 
           Type "help" followed by command name for full
@@ -1684,25 +1852,34 @@ command 'help'.
 
 'help COMMAND'
      With a command name as 'help' argument, GDB displays a short
-     paragraph on how to use that command.
+     paragraph on how to use that command.  If that command has one or
+     more aliases, GDB will display a first line with the command name
+     and all its aliases separated by commas.  This first line will be
+     followed by the full definition of all aliases having default
+     arguments.  When asking the help for an alias, the documentation
+     for the aliased command is shown.
+
+     A user-defined alias can optionally be documented using the
+     'document' command (*note document: Define.).  GDB then considers
+     this alias as different from the aliased command: this alias is not
+     listed in the aliased command help output, and asking help for this
+     alias will show the documentation provided for the alias instead of
+     the documentation of the aliased command.
 
 'apropos [-v] REGEXP'
-     The 'apropos' command searches through all of the GDB commands, and
-     their documentation, for the regular expression specified in ARGS.
-     It prints out all matches found.  The optional flag '-v', which
-     stands for 'verbose', indicates to output the full documentation of
-     the matching commands and highlight the parts of the documentation
-     matching REGEXP.  For example:
+     The 'apropos' command searches through all of the GDB commands and
+     aliases, and their documentation, for the regular expression
+     specified in ARGS.  It prints out all matches found.  The optional
+     flag '-v', which stands for 'verbose', indicates to output the full
+     documentation of the matching commands and highlight the parts of
+     the documentation matching REGEXP.  For example:
 
           apropos alias
 
      results in:
 
           alias -- Define a new command that is an alias of an existing command
-          aliases -- Aliases of other commands
-          d -- Delete some breakpoints or auto-display expressions
-          del -- Delete some breakpoints or auto-display expressions
-          delete -- Delete some breakpoints or auto-display expressions
+          aliases -- User-defined aliases of other commands
 
      while
 
@@ -1823,8 +2000,8 @@ child process.
 * Input/Output::                Your program's input and output
 * Attach::                      Debugging an already-running process
 * Kill Process::                Killing the child process
-
-* Inferiors and Programs::      Debugging multiple inferiors and programs
+* Inferiors Connections and Programs:: Debugging multiple inferiors
+					 connections and programs
 * Threads::                     Debugging programs with multiple threads
 * Forks::                       Debugging forks
 * Checkpoint/Restart::          Setting a _bookmark_ to return to later
@@ -2049,25 +2226,25 @@ breakpoints.
 'set auto-connect-native-target off'
 'show auto-connect-native-target'
 
-     By default, if not connected to any target yet (e.g., with 'target
-     remote'), the 'run' command starts your program as a native process
-     under GDB, on your local machine.  If you're sure you don't want to
-     debug programs on your local machine, you can tell GDB to not
-     connect to the native target automatically with the 'set
-     auto-connect-native-target off' command.
-
-     If 'on', which is the default, and if GDB is not connected to a
-     target already, the 'run' command automaticaly connects to the
-     native target, if one is available.
+     By default, if the current inferior is not connected to any target
+     yet (e.g., with 'target remote'), the 'run' command starts your
+     program as a native process under GDB, on your local machine.  If
+     you're sure you don't want to debug programs on your local machine,
+     you can tell GDB to not connect to the native target automatically
+     with the 'set auto-connect-native-target off' command.
+
+     If 'on', which is the default, and if the current inferior is not
+     connected to a target already, the 'run' command automaticaly
+     connects to the native target, if one is available.
 
-     If 'off', and if GDB is not connected to a target already, the
-     'run' command fails with an error:
+     If 'off', and if the current inferior is not connected to a target
+     already, the 'run' command fails with an error:
 
           (gdb) run
           Don't know how to run.  Try "help target".
 
-     If GDB is already connected to a target, GDB always uses it with
-     the 'run' command.
+     If the current inferior is already connected to a target, GDB
+     always uses it with the 'run' command.
 
      In any case, you can explicitly connect to the native target with
      the 'target native' command.  For example,
@@ -2390,6 +2567,25 @@ Specifying Source Directories: Source Pa
 'file' command to load the program.  *Note Commands to Specify Files:
 Files.
 
+   If the debugger can determine that the executable file running in the
+process it is attaching to does not match the current exec-file loaded
+by GDB, the option 'exec-file-mismatch' specifies how to handle the
+mismatch.  GDB tries to compare the files by comparing their build IDs
+(*note build ID::), if available.
+
+'set exec-file-mismatch 'ask|warn|off''
+
+     Whether to detect mismatch between the current executable file
+     loaded by GDB and the executable file used to start the process.
+     If 'ask', the default, display a warning and ask the user whether
+     to load the process executable file; if 'warn', just display a
+     warning; if 'off', don't attempt to detect a mismatch.  If the user
+     confirms loading the process executable file, then its symbols will
+     be loaded as well.
+
+'show exec-file-mismatch'
+     Show the current value of 'exec-file-mismatch'.
+
    The first thing GDB does after arranging to debug the specified
 process is to stop it.  You can examine and modify an attached process
 with all the GDB commands that are ordinarily available when you start
@@ -2415,7 +2611,7 @@ things; you can control whether or not y
 Messages/Warnings.).
 
 
-File: gdb.info,  Node: Kill Process,  Next: Inferiors and Programs,  Prev: Attach,  Up: Running
+File: gdb.info,  Node: Kill Process,  Next: Inferiors Connections and Programs,  Prev: Attach,  Up: Running
 
 4.8 Killing the Child Process
 =============================
@@ -2440,17 +2636,19 @@ the symbol table again (while trying to
 settings).
 
 
-File: gdb.info,  Node: Inferiors and Programs,  Next: Threads,  Prev: Kill Process,  Up: Running
+File: gdb.info,  Node: Inferiors Connections and Programs,  Next: Threads,  Prev: Kill Process,  Up: Running
 
-4.9 Debugging Multiple Inferiors and Programs
-=============================================
+4.9 Debugging Multiple Inferiors Connections and Programs
+=========================================================
 
 GDB lets you run and debug multiple programs in a single session.  In
 addition, GDB on some systems may let you run several programs
 simultaneously (otherwise you have to exit from one before starting
-another).  In the most general case, you can have multiple threads of
-execution in each of multiple processes, launched from multiple
-executables.
+another).  On some systems GDB may even let you debug several programs
+simultaneously on different remote systems.  In the most general case,
+you can have multiple threads of execution in each of multiple
+processes, launched from multiple executables, running on different
+machines.
 
    GDB represents the state of each program execution with an object
 called an "inferior".  An inferior typically corresponds to a process,
@@ -2462,13 +2660,20 @@ its own distinct address space, although
 several inferiors running in different parts of a single address space.
 Each inferior may in turn have multiple threads running in it.
 
+   The commands 'info inferiors' and 'info connections', which will be
+introduced below, accept a space-separated "ID list" as their argument
+specifying one or more elements on which to operate.  A list element can
+be either a single non-negative number, like '5', or an ascending range
+of such numbers, like '5-7'.  A list can consist of any combination of
+such elements, even duplicates or overlapping ranges are valid.  E.g. '1
+4-6 5 4-4' or '1 2 4-7'.
+
    To find out what inferiors exist at any moment, use 'info inferiors':
 
 'info inferiors'
      Print a list of all inferiors currently being managed by GDB.  By
-     default all inferiors are printed, but the argument ID... - a space
-     separated list of inferior numbers - can be used to limit the
-     display to just the requested inferiors.
+     default all inferiors are printed, but the ID list ID... can be
+     used to limit the display to just the requested inferiors.
 
      GDB displays for each inferior (in this order):
 
@@ -2476,7 +2681,11 @@ Each inferior may in turn have multiple
 
        2. the target system's inferior identifier
 
-       3. the name of the executable the inferior is running.
+       3. the target connection the inferior is bound to, including the
+          unique connection number assigned by GDB, and the protocol
+          used by the connection.
+
+       4. the name of the executable the inferior is running.
 
      An asterisk '*' preceding the GDB inferior number indicates the
      current inferior.
@@ -2484,9 +2693,47 @@ Each inferior may in turn have multiple
      For example,
 
      (gdb) info inferiors
-       Num  Description       Executable
-       2    process 2307      hello
-     * 1    process 3401      goodbye
+       Num  Description       Connection                      Executable
+     * 1    process 3401      1 (native)                      goodbye
+       2    process 2307      2 (extended-remote host:10000)  hello
+
+   To get information about the current inferior, use 'inferior':
+
+'inferior'
+     Shows information about the current inferior.
+
+     For example,
+
+     (gdb) inferior
+     [Current inferior is 1 [process 3401] (helloworld)]
+
+   To find out what open target connections exist at any moment, use
+'info connections':
+
+'info connections'
+     Print a list of all open target connections currently being managed
+     by GDB.  By default all connections are printed, but the ID list
+     ID... can be used to limit the display to just the requested
+     connections.
+
+     GDB displays for each connection (in this order):
+
+       1. the connection number assigned by GDB.
+
+       2. the protocol used by the connection.
+
+       3. a textual description of the protocol used by the connection.
+
+     An asterisk '*' preceding the connection number indicates the
+     connection of the current inferior.
+
+     For example,
+
+     (gdb) info connections
+       Num  What                        Description
+     * 1    extended-remote host:10000  Extended remote serial target in gdb-specific protocol
+       2    native                      Native process
+       3    core                        Local core dump file
 
    To switch focus between inferiors, use the 'inferior' command:
 
@@ -2507,29 +2754,42 @@ add inferiors to the debug session autom
 'fork' and 'exec'.  To remove inferiors from the debugging session use
 the 'remove-inferiors' command.
 
-'add-inferior [ -copies N ] [ -exec EXECUTABLE ]'
+'add-inferior [ -copies N ] [ -exec EXECUTABLE ] [-no-connection ]'
      Adds N inferiors to be run using EXECUTABLE as the executable; N
      defaults to 1.  If no executable is specified, the inferiors begins
      empty, with no program.  You can still assign or change the program
      assigned to the inferior at any time by using the 'file' command
      with the executable name as its argument.
 
+     By default, the new inferior begins connected to the same target
+     connection as the current inferior.  For example, if the current
+     inferior was connected to 'gdbserver' with 'target remote', then
+     the new inferior will be connected to the same 'gdbserver'
+     instance.  The '-no-connection' option starts the new inferior with
+     no connection yet.  You can then for example use the 'target
+     remote' command to connect to some other 'gdbserver' instance, use
+     'run' to spawn a local program, etc.
+
 'clone-inferior [ -copies N ] [ INFNO ]'
      Adds N inferiors ready to execute the same program as inferior
      INFNO; N defaults to 1, and INFNO defaults to the number of the
-     current inferior.  This is a convenient command when you want to
-     run another instance of the inferior you are debugging.
+     current inferior.  This command copies the values of the ARGS,
+     INFERIOR-TTY and CWD properties from the current inferior to the
+     new one.  It also propagates changes the user made to environment
+     variables using the 'set environment' and 'unset environment'
+     commands.  This is a convenient command when you want to run
+     another instance of the inferior you are debugging.
 
           (gdb) info inferiors
-            Num  Description       Executable
-          * 1    process 29964     helloworld
+            Num  Description       Connection   Executable
+          * 1    process 29964     1 (native)   helloworld
           (gdb) clone-inferior
           Added inferior 2.
           1 inferiors added.
           (gdb) info inferiors
-            Num  Description       Executable
-            2    <null>            helloworld
-          * 1    process 29964     helloworld
+            Num  Description       Connection   Executable
+          * 1    process 29964     1 (native)   helloworld
+            2    <null>            1 (native)   helloworld
 
      You can now simply switch focus to inferior 2 and run it.
 
@@ -2569,7 +2829,7 @@ use 'set print inferior-events':
      The 'set print inferior-events' command allows you to enable or
      disable printing of messages when GDB notices that new inferiors
      have started or that inferiors have exited or have been detached.
-     By default, these messages will not be printed.
+     By default, these messages will be printed.
 
 'show print inferior-events'
      Show whether messages will be printed when GDB detects that
@@ -2594,6 +2854,9 @@ command.
        2. the name of the executable loaded into the program space, with
           e.g., the 'file' command.
 
+       3. the name of the core file loaded into the program space, with
+          e.g., the 'core-file' command.
+
      An asterisk '*' preceding the GDB program space number indicates
      the current program space.
 
@@ -2602,7 +2865,7 @@ command.
      example, the list of inferiors bound to the program space.
 
           (gdb) maint info program-spaces
-            Id   Executable
+            Id   Executable        Core File
           * 1    hello
             2    goodbye
                   Bound inferiors: ID 1 (process 21561)
@@ -2615,7 +2878,7 @@ command.
      example,
 
           (gdb) maint info program-spaces
-            Id   Executable
+            Id   Executable        Core File
           * 1    vfork-test
                   Bound inferiors: ID 2 (process 18050), ID 1 (process 18045)
 
@@ -2623,8 +2886,53 @@ command.
      program space as a result of inferior 1 having executed a 'vfork'
      call.
 
+* Menu:
+
+* Inferior-Specific Breakpoints::	Controlling breakpoints
+
+
+File: gdb.info,  Node: Inferior-Specific Breakpoints,  Up: Inferiors Connections and Programs
+
+4.9.1 Inferior-Specific Breakpoints
+-----------------------------------
+
+When debugging multiple inferiors, you can choose whether to set
+breakpoints for all inferiors, or for a particular inferior.
+
+'break LOCSPEC inferior INFERIOR-ID'
+'break LOCSPEC inferior INFERIOR-ID if ...'
+     LOCSPEC specifies a code location or locations in your program.
+     *Note Location Specifications::, for details.
+
+     Use the qualifier 'inferior INFERIOR-ID' with a breakpoint command
+     to specify that you only want GDB to stop when a particular
+     inferior reaches this breakpoint.  The INFERIOR-ID specifier is one
+     of the inferior identifiers assigned by GDB, shown in the first
+     column of the 'info inferiors' output.
+
+     If you do not specify 'inferior INFERIOR-ID' when you set a
+     breakpoint, the breakpoint applies to _all_ inferiors of your
+     program.
+
+     You can use the 'inferior' qualifier on conditional breakpoints as
+     well; in this case, place 'inferior INFERIOR-ID' before or after
+     the breakpoint condition, like this:
+
+          (gdb) break frik.c:13 inferior 2 if bartab > lim
+
+   Inferior-specific breakpoints are automatically deleted when the
+corresponding inferior is removed from GDB.  For example:
+
+     (gdb) remove-inferiors 2
+     Inferior-specific breakpoint 3 deleted - inferior 2 has been removed.
+
+   A breakpoint can't be both inferior-specific and thread-specific
+(*note Thread-Specific Breakpoints::), or task-specific (*note Ada
+Tasks::); using more than one of the 'inferior', 'thread', or 'task'
+keywords when creating a breakpoint will give an error.
+
 
-File: gdb.info,  Node: Threads,  Next: Forks,  Prev: Inferiors and Programs,  Up: Running
+File: gdb.info,  Node: Threads,  Next: Forks,  Prev: Inferiors Connections and Programs,  Up: Running
 
 4.10 Debugging Programs with Multiple Threads
 =============================================
@@ -2725,8 +3033,15 @@ even if the program is not multi-threade
 contain, respectively, the per-inferior thread number and the global
 thread number of the current thread.  You may find this useful in
 writing breakpoint conditional expressions, command scripts, and so
-forth.  *Note Convenience Variables: Convenience Vars, for general
-information on convenience variables.
+forth.  The convenience variable '$_inferior_thread_count' contains the
+number of live threads in the current inferior.  *Note Convenience
+Variables: Convenience Vars, for general information on convenience
+variables.
+
+   When running in non-stop mode (*note Non-Stop Mode::), where new
+threads can be created, and existing threads exit, at any time,
+'$_inferior_thread_count' could return a different value each time it is
+evaluated.
 
    If GDB detects the program is multi-threaded, it augments the usual
 message about stopping at a breakpoint with the ID and name of the
@@ -2738,7 +3053,7 @@ thread that hit the breakpoint.
 
      Thread 1 "main" received signal SIGINT, Interrupt.
 
-'info threads [THREAD-ID-LIST]'
+'info threads [-gid] [THREAD-ID-LIST]'
 
      Display information about one or more threads.  With no arguments
      displays information about all threads.  You can specify the list
@@ -2766,7 +3081,7 @@ thread that hit the breakpoint.
      For example,
 
      (gdb) info threads
-       Id   Target Id         Frame
+       Id   Target Id             Frame
      * 1    process 35 thread 13  main (argc=1, argv=0x7ffffff8)
        2    process 35 thread 23  0x34e5 in sigpause ()
        3    process 35 thread 27  0x34e5 in sigpause ()
@@ -2868,7 +3183,7 @@ a Solaris-specific command:
           (gdb) tfaas p some_local_var_i_do_not_remember_where_it_is
 
      The 'tfaas' command accepts the same options as the 'frame apply'
-     command.  *Note frame apply::.
+     command.  *Note frame apply: Frame Apply.
 
 'thread name [NAME]'
      This command assigns a name to the current thread.  If no argument
@@ -2889,9 +3204,9 @@ a Solaris-specific command:
      command also allows you to identify a thread by its target SYSTAG.
      For instance, on GNU/Linux, the target SYSTAG is the LWP id.
 
-          (GDB) thread find 26688
+          (gdb) thread find 26688
           Thread 4 has target id 'Thread 0x41e02940 (LWP 26688)'
-          (GDB) info thread 4
+          (gdb) info thread 4
             Id   Target Id         Frame
             4    Thread 0x41e02940 (LWP 26688) 0x00000031ca6cd372 in select ()
 
@@ -2959,6 +3274,11 @@ watchpoints in programs with multiple th
      Turns on or off display of 'libthread_db'-related events.  Use '1'
      to enable, '0' to disable.
 
+'set debug threads [on|off]'
+'show debug threads'
+     When 'on' GDB will print additional messages when threads are
+     created and deleted.
+
 
 File: gdb.info,  Node: Forks,  Next: Checkpoint/Restart,  Prev: Threads,  Up: Running
 
@@ -3039,13 +3359,14 @@ use the command 'set detach-on-fork'.
 control of all forked processes (including nested forks).  You can list
 the forked processes under the control of GDB by using the
 'info inferiors' command, and switch from one fork to another by using
-the 'inferior' command (*note Debugging Multiple Inferiors and Programs:
-Inferiors and Programs.).
+the 'inferior' command (*note Debugging Multiple Inferiors Connections
+and Programs: Inferiors Connections and Programs.).
 
    To quit debugging one of the forked processes, you can either detach
 from it by using the 'detach inferiors' command (allowing it to run
 independently), or kill it using the 'kill inferiors' command.  *Note
-Debugging Multiple Inferiors and Programs: Inferiors and Programs.
+Debugging Multiple Inferiors Connections and Programs: Inferiors
+Connections and Programs.
 
    If you ask to debug a child process and a 'vfork' is followed by an
 'exec', GDB executes the new target up to the first breakpoint in the
@@ -3322,25 +3643,81 @@ File: gdb.info,  Node: Set Breaks,  Next
 
 Breakpoints are set with the 'break' command (abbreviated 'b').  The
 debugger convenience variable '$bpnum' records the number of the
-breakpoint you've set most recently; see *note Convenience Variables:
-Convenience Vars, for a discussion of what you can do with convenience
-variables.
+breakpoint you've set most recently:
+     (gdb) b main
+     Breakpoint 1 at 0x11c6: file zeoes.c, line 24.
+     (gdb) p $bpnum
+     $1 = 1
+
+   A breakpoint may be mapped to multiple code locations for example
+with inlined functions, Ada generics, C++ templates or overloaded
+function names.  GDB then indicates the number of code locations in the
+breakpoint command output:
+     (gdb) b some_func
+     Breakpoint 2 at 0x1179: some_func. (3 locations)
+     (gdb) p $bpnum
+     $2 = 2
+     (gdb)
+
+   When your program stops on a breakpoint, the convenience variables
+'$_hit_bpnum' and '$_hit_locno' are respectively set to the number of
+the encountered breakpoint and the number of the breakpoint's code
+location:
+     Thread 1 "zeoes" hit Breakpoint 2.1, some_func () at zeoes.c:8
+     8	  printf("some func\n");
+     (gdb) p $_hit_bpnum
+     $5 = 2
+     (gdb) p $_hit_locno
+     $6 = 1
+     (gdb)
+
+   Note that '$_hit_bpnum' and '$bpnum' are not equivalent:
+'$_hit_bpnum' is set to the breakpoint number last hit, while '$bpnum'
+is set to the breakpoint number last set.
+
+   If the encountered breakpoint has only one code location,
+'$_hit_locno' is set to 1:
+     Breakpoint 1, main (argc=1, argv=0x7fffffffe018) at zeoes.c:24
+     24	  if (argc > 1)
+     (gdb) p $_hit_bpnum
+     $3 = 1
+     (gdb) p $_hit_locno
+     $4 = 1
+     (gdb)
 
-'break LOCATION'
-     Set a breakpoint at the given LOCATION, which can specify a
-     function name, a line number, or an address of an instruction.
-     (*Note Specify Location::, for a list of all the possible ways to
-     specify a LOCATION.)  The breakpoint will stop your program just
-     before it executes any of the code in the specified LOCATION.
+   The '$_hit_bpnum' and '$_hit_locno' variables can typically be used
+in a breakpoint command list.  (*note Breakpoint Command Lists: Break
+Commands.).  For example, as part of the breakpoint command list, you
+can disable completely the encountered breakpoint using 'disable
+$_hit_bpnum' or disable the specific encountered breakpoint location
+using 'disable $_hit_bpnum.$_hit_locno'.  If a breakpoint has only one
+location, '$_hit_locno' is set to 1 and the commands 'disable
+$_hit_bpnum' and 'disable $_hit_bpnum.$_hit_locno' both disable the
+breakpoint.
+
+   You can also define aliases to easily disable the last hit location
+or last hit breakpoint:
+     (gdb) alias lld = disable $_hit_bpnum.$_hit_locno
+     (gdb) alias lbd = disable $_hit_bpnum
+
+'break LOCSPEC'
+     Set a breakpoint at all the code locations in your program that
+     result from resolving the given LOCSPEC.  LOCSPEC can specify a
+     function name, a line number, an address of an instruction, and
+     more.  *Note Location Specifications::, for the various forms of
+     LOCSPEC.  The breakpoint will stop your program just before it
+     executes the instruction at the address of any of the breakpoint's
+     code locations.
 
      When using source languages that permit overloading of symbols,
-     such as C++, a function name may refer to more than one possible
-     place to break.  *Note Ambiguous Expressions: Ambiguous
-     Expressions, for a discussion of that situation.
+     such as C++, a function name may refer to more than one symbol, and
+     thus more than one place to break.  *Note Ambiguous Expressions:
+     Ambiguous Expressions, for a discussion of that situation.
 
      It is also possible to insert a breakpoint that will stop the
      program only if a specific thread (*note Thread-Specific
-     Breakpoints::) or a specific task (*note Ada Tasks::) hits that
+     Breakpoints::), specific inferior (*note Inferior-Specific
+     Breakpoints::), or a specific task (*note Ada Tasks::) hits that
      breakpoint.
 
 'break'
@@ -3368,6 +3745,61 @@ variables.
      specifying where to break.  *Note Break Conditions: Conditions, for
      more information on breakpoint conditions.
 
+     The breakpoint may be mapped to multiple locations.  If the
+     breakpoint condition COND is invalid at some but not all of the
+     locations, the locations for which the condition is invalid are
+     disabled.  For example, GDB reports below that two of the three
+     locations are disabled.
+
+          (gdb) break func if a == 10
+          warning: failed to validate condition at location 0x11ce, disabling:
+            No symbol "a" in current context.
+          warning: failed to validate condition at location 0x11b6, disabling:
+            No symbol "a" in current context.
+          Breakpoint 1 at 0x11b6: func. (3 locations)
+
+     Locations that are disabled because of the condition are denoted by
+     an uppercase 'N' in the output of the 'info breakpoints' command:
+
+          (gdb) info breakpoints
+          Num     Type           Disp Enb Address            What
+          1       breakpoint     keep y   <MULTIPLE>
+                  stop only if a == 10
+          1.1                         N*  0x00000000000011b6 in ...
+          1.2                         y   0x00000000000011c2 in ...
+          1.3                         N*  0x00000000000011ce in ...
+          (*): Breakpoint condition is invalid at this location.
+
+     If the breakpoint condition COND is invalid in the context of _all_
+     the locations of the breakpoint, GDB refuses to define the
+     breakpoint.  For example, if variable 'foo' is an undefined
+     variable:
+
+          (gdb) break func if foo
+          No symbol "foo" in current context.
+
+'break ... -force-condition if COND'
+     There may be cases where the condition COND is invalid at all the
+     current locations, but the user knows that it will be valid at a
+     future location; for example, because of a library load.  In such
+     cases, by using the '-force-condition' keyword before 'if', GDB can
+     be forced to define the breakpoint with the given condition
+     expression instead of refusing it.
+
+          (gdb) break func -force-condition if foo
+          warning: failed to validate condition at location 1, disabling:
+            No symbol "foo" in current context.
+          warning: failed to validate condition at location 2, disabling:
+            No symbol "foo" in current context.
+          warning: failed to validate condition at location 3, disabling:
+            No symbol "foo" in current context.
+          Breakpoint 1 at 0x1158: test.c:18. (3 locations)
+
+     This causes all the present locations where the breakpoint would
+     otherwise be inserted, to be disabled, as seen in the example
+     above.  However, if there exist locations at which the condition is
+     valid, the '-force-condition' keyword has no effect.
+
 'tbreak ARGS'
      Set a breakpoint enabled only for one stop.  The ARGS are the same
      as for the 'break' command, and the breakpoint is set in the same
@@ -3514,30 +3946,16 @@ your program.  There is nothing silly or
 the breakpoints are conditional, this is even useful (*note Break
 Conditions: Conditions.).
 
-   It is possible that a breakpoint corresponds to several locations in
-your program.  Examples of this situation are:
-
-   * Multiple functions in the program may have the same name.
-
-   * For a C++ constructor, the GCC compiler generates several instances
-     of the function body, used in different cases.
-
-   * For a C++ template function, a given line in the function can
-     correspond to any number of instantiations.
-
-   * For an inlined function, a given source line can correspond to
-     several places where that function is inlined.
-
-   In all those cases, GDB will insert a breakpoint at all the relevant
-locations.
-
-   A breakpoint with multiple locations is displayed in the breakpoint
-table using several rows--one header row, followed by one row for each
-breakpoint location.  The header row has '<MULTIPLE>' in the address
-column.  The rows for individual locations contain the actual addresses
-for locations, and show the functions to which those locations belong.
-The number column for a location is of the form
-BREAKPOINT-NUMBER.LOCATION-NUMBER.
+   It is possible that a single logical breakpoint is set at several
+code locations in your program.  *Note Location Specifications::, for
+examples.
+
+   A breakpoint with multiple code locations is displayed in the
+breakpoint table using several rows--one header row, followed by one row
+for each code location.  The header row has '<MULTIPLE>' in the address
+column.  Each code location row contains the actual address, source
+file, source line and function of its code location.  The number column
+for a code location is of the form BREAKPOINT-NUMBER.LOCATION-NUMBER.
 
    For example:
 
@@ -3559,6 +3977,17 @@ acts on all the locations in the range (
 enabling the parent breakpoint (*note Disabling::) affects all of the
 locations that belong to that breakpoint.
 
+   Locations that are enabled while their parent breakpoint is disabled
+won't trigger a break, and are denoted by 'y-' in the 'Enb' column.  For
+example:
+
+     (gdb) info breakpoints
+     Num     Type           Disp Enb Address            What
+     1       breakpoint     keep n   <MULTIPLE>
+     1.1                         y-  0x00000000000011b6 in ...
+     1.2                         y-  0x00000000000011c2 in ...
+     1.3                         n   0x00000000000011ce in ...
+
    It's quite common to have a breakpoint inside a shared library.
 Shared libraries can be loaded and unloaded explicitly, and possibly
 repeatedly, as the program is executed.  To support this use case, GDB
@@ -3586,28 +4015,29 @@ differ from regular breakpoints.  You ca
 enable and disable them and perform other breakpoint operations.
 
    GDB provides some additional commands for controlling what happens
-when the 'break' command cannot resolve breakpoint address specification
-to an address:
+when the 'break' command cannot resolve the location spec to any code
+location in your program (*note Location Specifications::):
 
 'set breakpoint pending auto'
-     This is the default behavior.  When GDB cannot find the breakpoint
-     location, it queries you whether a pending breakpoint should be
+     This is the default behavior.  When GDB cannot resolve the location
+     spec, it queries you whether a pending breakpoint should be
      created.
 
 'set breakpoint pending on'
-     This indicates that an unrecognized breakpoint location should
-     automatically result in a pending breakpoint being created.
+     This indicates that when GDB cannot resolve the location spec, it
+     should create a pending breakpoint without confirmation.
 
 'set breakpoint pending off'
-     This indicates that pending breakpoints are not to be created.  Any
-     unrecognized breakpoint location results in an error.  This setting
-     does not affect any pending breakpoints previously created.
+     This indicates that pending breakpoints are not to be created.  If
+     GDB cannot resolve the location spec, it aborts the breakpoint
+     creation with an error.  This setting does not affect any pending
+     breakpoints previously created.
 
 'show breakpoint pending'
      Show the current behavior setting for creating pending breakpoints.
 
    The settings above only affect the 'break' command and its variants.
-Once breakpoint is set, it will be automatically updated as shared
+Once a breakpoint is set, it will be automatically updated as shared
 libraries are loaded and unloaded.
 
    For some targets, GDB can automatically decide if hardware or
@@ -3737,7 +4167,7 @@ culprit.)
 includes support for hardware watchpoints, which do not slow down the
 running of your program.
 
-'watch [-l|-location] EXPR [thread THREAD-ID] [mask MASKVALUE]'
+'watch [-l|-location] EXPR [thread THREAD-ID] [mask MASKVALUE] [task TASK-ID]'
      Set a watchpoint for an expression.  GDB will break when the
      expression EXPR is written into by the program and its value
      changes.  The simplest (and the most popular) use of this command
@@ -3751,6 +4181,9 @@ running of your program.
      break.  Note that watchpoints restricted to a single thread in this
      way only work with Hardware Watchpoints.
 
+     Similarly, if the 'task' argument is given, then the watchpoint
+     will be specific to the indicated Ada task (*note Ada Tasks::).
+
      Ordinarily a watchpoint respects the scope of variables in EXPR
      (see below).  The '-location' argument tells GDB to instead watch
      the memory referred to by EXPR.  In this case, GDB will evaluate
@@ -4219,19 +4652,34 @@ address.
      When the innermost frame is selected, this is a good way to delete
      a breakpoint where your program just stopped.
 
-'clear LOCATION'
-     Delete any breakpoints set at the specified LOCATION.  *Note
-     Specify Location::, for the various forms of LOCATION; the most
-     useful ones are listed below:
-
-     'clear FUNCTION'
-     'clear FILENAME:FUNCTION'
-          Delete any breakpoints set at entry to the named FUNCTION.
-
-     'clear LINENUM'
-     'clear FILENAME:LINENUM'
-          Delete any breakpoints set at or within the code of the
-          specified LINENUM of the specified FILENAME.
+'clear LOCSPEC'
+     Delete any breakpoint with a code location that corresponds to
+     LOCSPEC.  *Note Location Specifications::, for the various forms of
+     LOCSPEC.  Which code locations correspond to LOCSPEC depends on the
+     form used in the location specification LOCSPEC:
+
+     'LINENUM'
+     'FILENAME:LINENUM'
+     '-line LINENUM'
+     '-source FILENAME -line LINENUM'
+          If LOCSPEC specifies a line number, with or without a file
+          name, the command deletes any breakpoint with a code location
+          that is at or within the specified line LINENUM in files that
+          match the specified FILENAME.  If FILENAME is omitted, it
+          defaults to the current source file.
+
+     '*ADDRESS'
+          If LOCSPEC specifies an address, the command deletes any
+          breakpoint with a code location that is at the given ADDRESS.
+
+     'FUNCTION'
+     '-function FUNCTION'
+          If LOCSPEC specifies a function, the command deletes any
+          breakpoint with a code location that is at the entry to any
+          function whose name matches FUNCTION.
+
+     Ambiguity in names of files and functions can be resolved as
+     described in *note Location Specifications::.
 
 'delete [breakpoints] [LIST...]'
      Delete the breakpoints, watchpoints, or catchpoints of the
@@ -4389,6 +4837,12 @@ only way to impose a further condition o
      condition, like 'break if ...') is given, however.  *Note
      Expressions: Expressions.
 
+'condition -force BNUM EXPRESSION'
+     When the '-force' flag is used, define the condition even if
+     EXPRESSION is invalid at all the current locations of breakpoint
+     BNUM.  This is similar to the '-force-condition' option of the
+     'break' command.
+
 'condition BNUM'
      Remove the condition from breakpoint number BNUM.  It becomes an
      ordinary unconditional breakpoint.
@@ -4462,6 +4916,14 @@ enable other breakpoints.
    Pressing <RET> as a means of repeating the last GDB command is
 disabled within a COMMAND-LIST.
 
+   Inside a command list, you can use the command 'disable $_hit_bpnum'
+to disable the encountered breakpoint.
+
+   If your breakpoint has several code locations, the command 'disable
+$_hit_bpnum.$_hit_locno' will disable the specific breakpoint code
+location encountered.  If the breakpoint has only one location, this
+command will disable the encountered breakpoint.
+
    You can use breakpoint commands to start your program up again.
 Simply use the 'continue' command, or 'step', or any other command that
 resumes execution.
@@ -4534,10 +4996,11 @@ dprintf remain active even after disconn
 Using the stub/agent is also more efficient, as it can do everything
 without needing to communicate with GDB.
 
-'dprintf LOCATION,TEMPLATE,EXPRESSION[,EXPRESSION...]'
-     Whenever execution reaches LOCATION, print the values of one or
-     more EXPRESSIONS under the control of the string TEMPLATE.  To
-     print several values, separate them with commas.
+'dprintf LOCSPEC,TEMPLATE,EXPRESSION[,EXPRESSION...]'
+     Whenever execution reaches a code location that results from
+     resolving LOCSPEC, print the values of one or more EXPRESSIONS
+     under the control of the string TEMPLATE.  To print several values,
+     separate them with commas.
 
 'set dprintf-style STYLE'
      Set the dprintf output to be handled in one of several different
@@ -4547,20 +5010,32 @@ without needing to communicate with GDB.
      explicitly-supplied command lists.)
 
      'gdb'
-          Handle the output using the GDB 'printf' command.
+          Handle the output using the GDB 'printf' command.  When using
+          this style, it is possible to use the '%V' format specifier
+          (*note %V Format Specifier::).
 
      'call'
           Handle the output by calling a function in your program
-          (normally 'printf').
+          (normally 'printf').  When using this style the supported
+          format specifiers depend entirely on the function being
+          called.
+
+          Most of GDB's format specifiers align with those supported by
+          the 'printf' function, however, GDB's '%V' format specifier
+          extension is not supported by 'printf'.  When using 'call'
+          style dprintf, care should be taken to ensure that only format
+          specifiers supported by the output function are used,
+          otherwise the results will be undefined.
 
      'agent'
           Have the remote debugging agent (such as 'gdbserver') handle
           the output itself.  This style is only available for agents
-          that support running commands on the target.
+          that support running commands on the target.  This style does
+          not support the '%V' format specifier.
 
 'set dprintf-function FUNCTION'
      Set the function to call if the dprintf style is 'call'.  By
-     default its value is 'printf'.  You may set it to any expression.
+     default its value is 'printf'.  You may set it to any expression
      that GDB can evaluate to a function, as per the 'call' command.
 
 'set dprintf-channel CHANNEL'
@@ -4965,19 +5440,19 @@ interesting, until you see the problem h
      'until' with no argument works by means of single instruction
      stepping, and hence is slower than 'until' with an argument.
 
-'until LOCATION'
-'u LOCATION'
-     Continue running your program until either the specified LOCATION
-     is reached, or the current stack frame returns.  The location is
-     any of the forms described in *note Specify Location::.  This form
-     of the command uses temporary breakpoints, and hence is quicker
-     than 'until' without an argument.  The specified location is
-     actually reached only if it is in the current frame.  This implies
-     that 'until' can be used to skip over recursive function
-     invocations.  For instance in the code below, if the current
-     location is line '96', issuing 'until 99' will execute the program
-     up to line '99' in the same invocation of factorial, i.e., after
-     the inner invocations have returned.
+'until LOCSPEC'
+'u LOCSPEC'
+     Continue running your program until either it reaches a code
+     location that results from resolving LOCSPEC, or the current stack
+     frame returns.  LOCSPEC is any of the forms described in *note
+     Location Specifications::.  This form of the command uses temporary
+     breakpoints, and hence is quicker than 'until' without an argument.
+     The specified location is actually reached only if it is in the
+     current frame.  This implies that 'until' can be used to skip over
+     recursive function invocations.  For instance in the code below, if
+     the current location is line '96', issuing 'until 99' will execute
+     the program up to line '99' in the same invocation of factorial,
+     i.e., after the inner invocations have returned.
 
           94	int factorial (int value)
           95	{
@@ -4987,14 +5462,14 @@ interesting, until you see the problem h
           99	    return (value);
           100     }
 
-'advance LOCATION'
-     Continue running the program up to the given LOCATION.  An argument
-     is required, which should be of one of the forms described in *note
-     Specify Location::.  Execution will also stop upon exit from the
-     current stack frame.  This command is similar to 'until', but
+'advance LOCSPEC'
+     Continue running your program until either it reaches a code
+     location that results from resolving LOCSPEC, or the current stack
+     frame returns.  LOCSPEC is any of the forms described in *note
+     Location Specifications::.  This command is similar to 'until', but
      'advance' will not skip over recursive function calls, and the
-     target location doesn't have to be in the same frame as the current
-     one.
+     target code location doesn't have to be in the same frame as the
+     current one.
 
 'stepi'
 'stepi ARG'
@@ -5070,9 +5545,9 @@ GDB never to step into 'boring'.  Now wh
 103, you'll step over 'boring' and directly into 'foo'.
 
    Functions may be skipped by providing either a function name,
-linespec (*note Specify Location::), regular expression that matches the
-function's name, file name or a 'glob'-style pattern that matches the
-file name.
+linespec (*note Location Specifications::), regular expression that
+matches the function's name, file name or a 'glob'-style pattern that
+matches the file name.
 
    On Posix systems the form of the regular expression is "Extended
 Regular Expressions".  See for example 'man 7 regex' on GNU/Linux
@@ -5101,7 +5576,7 @@ See for example 'man 7 glob' on GNU/Linu
      '-fu LINESPEC'
           Functions named by LINESPEC or the function containing the
           line named by LINESPEC will be skipped over when stepping.
-          *Note Specify Location::.
+          *Note Location Specifications::.
 
      '-rfunction REGEXP'
      '-rfu REGEXP'
@@ -5129,7 +5604,7 @@ See for example 'man 7 glob' on GNU/Linu
 'skip function [LINESPEC]'
      After running this command, the function named by LINESPEC or the
      function containing the line named by LINESPEC will be skipped over
-     when stepping.  *Note Specify Location::.
+     when stepping.  *Note Location Specifications::.
 
      If you do not specify LINESPEC, the function you're currently
      debugging will be skipped.
@@ -5243,12 +5718,14 @@ settings with the 'handle' command.
      Set a catchpoint for the indicated signals.  *Note Set
      Catchpoints::, for details about this command.
 
-'handle SIGNAL [KEYWORDS...]'
-     Change the way GDB handles signal SIGNAL.  The SIGNAL can be the
+'handle SIGNAL [ SIGNAL ... ] [KEYWORDS...]'
+     Change the way GDB handles each SIGNAL.  Each SIGNAL can be the
      number of a signal or its name (with or without the 'SIG' at the
      beginning); a list of signal numbers of the form 'LOW-HIGH'; or the
-     word 'all', meaning all the known signals.  Optional arguments
-     KEYWORDS, described below, say what change to make.
+     word 'all', meaning all the known signals, except 'SIGINT' and
+     'SIGTRAP', which are used by GDB.  Optional argument KEYWORDS,
+     described below, say what changes to make to all of the specified
+     signals.
 
    The keywords allowed by the 'handle' command can be abbreviated.
 Their full names are:
@@ -5428,11 +5905,11 @@ to run freely while you examine the stop
 
 * Menu:
 
-* All-Stop Mode::		All threads stop when GDB takes control
-* Non-Stop Mode::		Other threads continue to execute
-* Background Execution::	Running your program asynchronously
-* Thread-Specific Breakpoints::	Controlling breakpoints
-* Interrupted System Calls::	GDB may interfere with system calls
+* All-Stop Mode::               All threads stop when GDB takes control
+* Non-Stop Mode::               Other threads continue to execute
+* Background Execution::        Running your program asynchronously
+* Thread-Specific Breakpoints:: Controlling breakpoints
+* Interrupted System Calls::    GDB may interfere with system calls
 * Observer Mode::               GDB does not alter program behavior
 
 
@@ -5473,18 +5950,32 @@ scheduler to allow only a single thread
 
 'set scheduler-locking MODE'
      Set the scheduler locking mode.  It applies to normal execution,
-     record mode, and replay mode.  If it is 'off', then there is no
-     locking and any thread may run at any time.  If 'on', then only the
-     current thread may run when the inferior is resumed.  The 'step'
-     mode optimizes for single-stepping; it prevents other threads from
-     preempting the current thread while you are stepping, so that the
-     focus of debugging does not change unexpectedly.  Other threads
-     never get a chance to run when you step, and they are completely
-     free to run when you use commands like 'continue', 'until', or
-     'finish'.  However, unless another thread hits a breakpoint during
-     its timeslice, GDB does not change the current thread away from the
-     thread that you are debugging.  The 'replay' mode behaves like
-     'off' in record mode and like 'on' in replay mode.
+     record mode, and replay mode.  MODE can be one of the following:
+
+     'off'
+          There is no locking and any thread may run at any time.
+
+     'on'
+          Only the current thread may run when the inferior is resumed.
+          New threads created by the resumed thread are held stopped at
+          their entry point, before they execute any instruction.
+
+     'step'
+          Behaves like 'on' when stepping, and 'off' otherwise.  Threads
+          other than the current never get a chance to run when you
+          step, and they are completely free to run when you use
+          commands like 'continue', 'until', or 'finish'.
+
+          This mode optimizes for single-stepping; it prevents other
+          threads from preempting the current thread while you are
+          stepping, so that the focus of debugging does not change
+          unexpectedly.  However, unless another thread hits a
+          breakpoint during its timeslice, GDB does not change the
+          current thread away from the thread that you are debugging.
+
+     'replay'
+          Behaves like 'on' in replay mode, and 'off' in either record
+          mode or during normal execution.  This is the default mode.
 
 'show scheduler-locking'
      Display the current scheduler locking mode.
@@ -5666,11 +6157,10 @@ When your program has multiple threads (
 Multiple Threads: Threads.), you can choose whether to set breakpoints
 on all threads, or on a particular thread.
 
-'break LOCATION thread THREAD-ID'
-'break LOCATION thread THREAD-ID if ...'
-     LOCATION specifies source lines; there are several ways of writing
-     them (*note Specify Location::), but the effect is always to
-     specify some source line.
+'break LOCSPEC thread THREAD-ID'
+'break LOCSPEC thread THREAD-ID if ...'
+     LOCSPEC specifies a code location or locations in your program.
+     *Note Location Specifications::, for details.
 
      Use the qualifier 'thread THREAD-ID' with a breakpoint command to
      specify that you only want GDB to stop the program when a
@@ -5699,9 +6189,14 @@ thread exit, but also when you detach fr
 command (*note Debugging an Already-running Process: Attach.), or if GDB
 loses the remote connection (*note Remote Debugging::), etc.  Note that
 with some targets, GDB is only able to detect a thread has exited when
-the user explictly asks for the thread list with the 'info threads'
+the user explicitly asks for the thread list with the 'info threads'
 command.
 
+   A breakpoint can't be both thread-specific and inferior-specific
+(*note Inferior-Specific Breakpoints::), or task-specific (*note Ada
+Tasks::); using more than one of the 'thread', 'inferior', or 'task'
+keywords when creating a breakpoint will give an error.
+
 
 File: gdb.info,  Node: Interrupted System Calls,  Next: Observer Mode,  Prev: Thread-Specific Breakpoints,  Up: Thread Stops
 
@@ -6316,7 +6811,10 @@ GDB provides the following commands:
 
      It can also print mixed source+disassembly if you specify the the
      '/m' or '/s' modifier, and print the raw instructions in hex as
-     well as in symbolic form by specifying the '/r' modifier.
+     well as in symbolic form by specifying the '/r' or '/b' modifier.
+     The behaviour of the '/m', '/s', '/r', and '/b' modifiers are the
+     same as for the 'disassemble' command (*note 'disassemble':
+     disassemble.).
 
      The current position marker is printed for the instruction at the
      current program counter value.  This instruction can appear
@@ -6369,14 +6867,14 @@ GDB provides the following commands:
      instruction-history' command.
 
 'record function-call-history'
-     Prints the execution history at function granularity.  It prints
-     one line for each sequence of instructions that belong to the same
-     function giving the name of that function, the source lines for
-     this instruction sequence (if the '/l' modifier is specified), and
-     the instructions numbers that form the sequence (if the '/i'
-     modifier is specified).  The function names are indented to reflect
-     the call stack depth if the '/c' modifier is specified.  The '/l',
-     '/i', and '/c' modifiers can be given together.
+     Prints the execution history at function granularity.  For each
+     sequence of instructions that belong to the same function, it
+     prints the name of that function, the source lines for this
+     instruction sequence (if the '/l' modifier is specified), and the
+     instructions numbers that form the sequence (if the '/i' modifier
+     is specified).  The function names are indented to reflect the call
+     stack depth if the '/c' modifier is specified.  The '/l', '/i', and
+     '/c' modifiers can be given together.
 
           (gdb) list 1, 10
           1   void foo (void)
@@ -6394,8 +6892,8 @@ GDB provides the following commands:
           2    foo   inst 5,10    at foo.c:2,3
           3  bar     inst 11,13   at foo.c:9,10
 
-     By default, ten lines are printed.  This can be changed using the
-     'set record function-call-history-size' command.  Functions are
+     By default, ten functions are printed.  This can be changed using
+     the 'set record function-call-history-size' command.  Functions are
      printed in execution order.  There are several ways to specify what
      to print:
 
@@ -6409,10 +6907,10 @@ GDB provides the following commands:
           function number FUNC.
 
      'record function-call-history'
-          Prints ten more functions after the last ten-line print.
+          Prints ten more functions after the last ten-function print.
 
      'record function-call-history -'
-          Prints ten more functions before the last ten-line print.
+          Prints ten more functions before the last ten-function print.
 
      'record function-call-history BEGIN, END'
           Prints functions beginning with function number BEGIN until
@@ -6422,532 +6920,11 @@ GDB provides the following commands:
 
 'set record function-call-history-size SIZE'
 'set record function-call-history-size unlimited'
-     Define how many lines to print in the 'record
+     Define how many functions to print in the 'record
      function-call-history' command.  The default value is 10.  A size
-     of 'unlimited' means unlimited lines.
+     of 'unlimited' means unlimited functions.
 
 'show record function-call-history-size'
-     Show how many lines to print in the 'record function-call-history'
-     command.
-
-
-File: gdb.info,  Node: Stack,  Next: Source,  Prev: Process Record and Replay,  Up: Top
-
-8 Examining the Stack
-*********************
-
-When your program has stopped, the first thing you need to know is where
-it stopped and how it got there.
-
-   Each time your program performs a function call, information about
-the call is generated.  That information includes the location of the
-call in your program, the arguments of the call, and the local variables
-of the function being called.  The information is saved in a block of
-data called a "stack frame".  The stack frames are allocated in a region
-of memory called the "call stack".
-
-   When your program stops, the GDB commands for examining the stack
-allow you to see all of this information.
-
-   One of the stack frames is "selected" by GDB and many GDB commands
-refer implicitly to the selected frame.  In particular, whenever you ask
-GDB for the value of a variable in your program, the value is found in
-the selected frame.  There are special GDB commands to select whichever
-frame you are interested in.  *Note Selecting a Frame: Selection.
-
-   When your program stops, GDB automatically selects the currently
-executing frame and describes it briefly, similar to the 'frame' command
-(*note Information about a Frame: Frame Info.).
-
-* Menu:
-
-* Frames::                      Stack frames
-* Backtrace::                   Backtraces
-* Selection::                   Selecting a frame
-* Frame Info::                  Information on a frame
-* Frame Apply::                 Applying a command to several frames
-* Frame Filter Management::     Managing frame filters
-
-
-File: gdb.info,  Node: Frames,  Next: Backtrace,  Up: Stack
-
-8.1 Stack Frames
-================
-
-The call stack is divided up into contiguous pieces called "stack
-frames", or "frames" for short; each frame is the data associated with
-one call to one function.  The frame contains the arguments given to the
-function, the function's local variables, and the address at which the
-function is executing.
-
-   When your program is started, the stack has only one frame, that of
-the function 'main'.  This is called the "initial" frame or the
-"outermost" frame.  Each time a function is called, a new frame is made.
-Each time a function returns, the frame for that function invocation is
-eliminated.  If a function is recursive, there can be many frames for
-the same function.  The frame for the function in which execution is
-actually occurring is called the "innermost" frame.  This is the most
-recently created of all the stack frames that still exist.
-
-   Inside your program, stack frames are identified by their addresses.
-A stack frame consists of many bytes, each of which has its own address;
-each kind of computer has a convention for choosing one byte whose
-address serves as the address of the frame.  Usually this address is
-kept in a register called the "frame pointer register" (*note $fp:
-Registers.) while execution is going on in that frame.
-
-   GDB labels each existing stack frame with a "level", a number that is
-zero for the innermost frame, one for the frame that called it, and so
-on upward.  These level numbers give you a way of designating stack
-frames in GDB commands.  The terms "frame number" and "frame level" can
-be used interchangeably to describe this number.
-
-   Some compilers provide a way to compile functions so that they
-operate without stack frames.  (For example, the GCC option
-     '-fomit-frame-pointer'
-   generates functions without a frame.)  This is occasionally done with
-heavily used library functions to save the frame setup time.  GDB has
-limited facilities for dealing with these function invocations.  If the
-innermost function invocation has no stack frame, GDB nevertheless
-regards it as though it had a separate frame, which is numbered zero as
-usual, allowing correct tracing of the function call chain.  However,
-GDB has no provision for frameless functions elsewhere in the stack.
-
-
-File: gdb.info,  Node: Backtrace,  Next: Selection,  Prev: Frames,  Up: Stack
-
-8.2 Backtraces
-==============
-
-A backtrace is a summary of how your program got where it is.  It shows
-one line per frame, for many frames, starting with the currently
-executing frame (frame zero), followed by its caller (frame one), and on
-up the stack.
-
-   To print a backtrace of the entire stack, use the 'backtrace'
-command, or its alias 'bt'.  This command will print one line per frame
-for frames in the stack.  By default, all stack frames are printed.  You
-can stop the backtrace at any time by typing the system interrupt
-character, normally 'Ctrl-c'.
-
-'backtrace [OPTION]... [QUALIFIER]... [COUNT]'
-'bt [OPTION]... [QUALIFIER]... [COUNT]'
-     Print the backtrace of the entire stack.
-
-     The optional COUNT can be one of the following:
-
-     'N'
-     'N'
-          Print only the innermost N frames, where N is a positive
-          number.
-
-     '-N'
-     '-N'
-          Print only the outermost N frames, where N is a positive
-          number.
-
-     Options:
-
-     '-full'
-          Print the values of the local variables also.  This can be
-          combined with the optional COUNT to limit the number of frames
-          shown.
-
-     '-no-filters'
-          Do not run Python frame filters on this backtrace.  *Note
-          Frame Filter API::, for more information.  Additionally use
-          *note disable frame-filter all:: to turn off all frame
-          filters.  This is only relevant when GDB has been configured
-          with 'Python' support.
-
-     '-hide'
-          A Python frame filter might decide to "elide" some frames.
-          Normally such elided frames are still printed, but they are
-          indented relative to the filtered frames that cause them to be
-          elided.  The '-hide' option causes elided frames to not be
-          printed at all.
-
-     The 'backtrace' command also supports a number of options that
-     allow overriding relevant global print settings as set by 'set
-     backtrace' and 'set print' subcommands:
-
-     '-past-main [on|off]'
-          Set whether backtraces should continue past 'main'.  Related
-          setting: *note set backtrace past-main::.
-
-     '-past-entry [on|off]'
-          Set whether backtraces should continue past the entry point of
-          a program.  Related setting: *note set backtrace past-entry::.
-
-     '-entry-values no|only|preferred|if-needed|both|compact|default'
-          Set printing of function arguments at function entry.  Related
-          setting: *note set print entry-values::.
-
-     '-frame-arguments all|scalars|none'
-          Set printing of non-scalar frame arguments.  Related setting:
-          *note set print frame-arguments::.
-
-     '-raw-frame-arguments [on|off]'
-          Set whether to print frame arguments in raw form.  Related
-          setting: *note set print raw-frame-arguments::.
-
-     '-frame-info auto|source-line|location|source-and-location|location-and-address|short-location'
-          Set printing of frame information.  Related setting: *note set
-          print frame-info::.
-
-     The optional QUALIFIER is maintained for backward compatibility.
-     It can be one of the following:
-
-     'full'
-          Equivalent to the '-full' option.
-
-     'no-filters'
-          Equivalent to the '-no-filters' option.
-
-     'hide'
-          Equivalent to the '-hide' option.
-
-   The names 'where' and 'info stack' (abbreviated 'info s') are
-additional aliases for 'backtrace'.
-
-   In a multi-threaded program, GDB by default shows the backtrace only
-for the current thread.  To display the backtrace for several or all of
-the threads, use the command 'thread apply' (*note thread apply:
-Threads.).  For example, if you type 'thread apply all backtrace', GDB
-will display the backtrace for all the threads; this is handy when you
-debug a core dump of a multi-threaded program.
-
-   Each line in the backtrace shows the frame number and the function
-name.  The program counter value is also shown--unless you use 'set
-print address off'.  The backtrace also shows the source file name and
-line number, as well as the arguments to the function.  The program
-counter value is omitted if it is at the beginning of the code for that
-line number.
-
-   Here is an example of a backtrace.  It was made with the command 'bt
-3', so it shows the innermost three frames.
-
-     #0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
-         at builtin.c:993
-     #1  0x6e38 in expand_macro (sym=0x2b600, data=...) at macro.c:242
-     #2  0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08)
-         at macro.c:71
-     (More stack frames follow...)
-
-The display for frame zero does not begin with a program counter value,
-indicating that your program has stopped at the beginning of the code
-for line '993' of 'builtin.c'.
-
-The value of parameter 'data' in frame 1 has been replaced by '...'.  By
-default, GDB prints the value of a parameter only if it is a scalar
-(integer, pointer, enumeration, etc).  See command 'set print
-frame-arguments' in *note Print Settings:: for more details on how to
-configure the way function parameter values are printed.  The command
-'set print frame-info' (*note Print Settings::) controls what frame
-information is printed.
-
-   If your program was compiled with optimizations, some compilers will
-optimize away arguments passed to functions if those arguments are never
-used after the call.  Such optimizations generate code that passes
-arguments through registers, but doesn't store those arguments in the
-stack frame.  GDB has no way of displaying such arguments in stack
-frames other than the innermost one.  Here's what such a backtrace might
-look like:
-
-     #0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
-         at builtin.c:993
-     #1  0x6e38 in expand_macro (sym=<optimized out>) at macro.c:242
-     #2  0x6840 in expand_token (obs=0x0, t=<optimized out>, td=0xf7fffb08)
-         at macro.c:71
-     (More stack frames follow...)
-
-The values of arguments that were not saved in their stack frames are
-shown as '<optimized out>'.
-
-   If you need to display the values of such optimized-out arguments,
-either deduce that from other variables whose values depend on the one
-you are interested in, or recompile without optimizations.
-
-   Most programs have a standard user entry point--a place where system
-libraries and startup code transition into user code.  For C this is
-'main'(1).  When GDB finds the entry function in a backtrace it will
-terminate the backtrace, to avoid tracing into highly system-specific
-(and generally uninteresting) code.
-
-   If you need to examine the startup code, or limit the number of
-levels in a backtrace, you can change this behavior:
-
-'set backtrace past-main'
-'set backtrace past-main on'
-     Backtraces will continue past the user entry point.
-
-'set backtrace past-main off'
-     Backtraces will stop when they encounter the user entry point.
-     This is the default.
-
-'show backtrace past-main'
-     Display the current user entry point backtrace policy.
-
-'set backtrace past-entry'
-'set backtrace past-entry on'
-     Backtraces will continue past the internal entry point of an
-     application.  This entry point is encoded by the linker when the
-     application is built, and is likely before the user entry point
-     'main' (or equivalent) is called.
-
-'set backtrace past-entry off'
-     Backtraces will stop when they encounter the internal entry point
-     of an application.  This is the default.
-
-'show backtrace past-entry'
-     Display the current internal entry point backtrace policy.
-
-'set backtrace limit N'
-'set backtrace limit 0'
-'set backtrace limit unlimited'
-     Limit the backtrace to N levels.  A value of 'unlimited' or zero
-     means unlimited levels.
-
-'show backtrace limit'
-     Display the current limit on backtrace levels.
-
-   You can control how file names are displayed.
-
-'set filename-display'
-'set filename-display relative'
-     Display file names relative to the compilation directory.  This is
-     the default.
-
-'set filename-display basename'
-     Display only basename of a filename.
-
-'set filename-display absolute'
-     Display an absolute filename.
-
-'show filename-display'
-     Show the current way to display filenames.
-
-   ---------- Footnotes ----------
-
-   (1) Note that embedded programs (the so-called "free-standing"
-environment) are not required to have a 'main' function as the entry
-point.  They could even have multiple entry points.
-
-
-File: gdb.info,  Node: Selection,  Next: Frame Info,  Prev: Backtrace,  Up: Stack
-
-8.3 Selecting a Frame
-=====================
-
-Most commands for examining the stack and other data in your program
-work on whichever stack frame is selected at the moment.  Here are the
-commands for selecting a stack frame; all of them finish by printing a
-brief description of the stack frame just selected.
-
-'frame [ FRAME-SELECTION-SPEC ]'
-'f [ FRAME-SELECTION-SPEC ]'
-     The 'frame' command allows different stack frames to be selected.
-     The FRAME-SELECTION-SPEC can be any of the following:
-
-     'NUM'
-     'level NUM'
-          Select frame level NUM.  Recall that frame zero is the
-          innermost (currently executing) frame, frame one is the frame
-          that called the innermost one, and so on.  The highest level
-          frame is usually the one for 'main'.
-
-          As this is the most common method of navigating the frame
-          stack, the string 'level' can be omitted.  For example, the
-          following two commands are equivalent:
-
-               (gdb) frame 3
-               (gdb) frame level 3
-
-     'address STACK-ADDRESS'
-          Select the frame with stack address STACK-ADDRESS.  The
-          STACK-ADDRESS for a frame can be seen in the output of 'info
-          frame', for example:
-
-               (gdb) info frame
-               Stack level 1, frame at 0x7fffffffda30:
-                rip = 0x40066d in b (amd64-entry-value.cc:59); saved rip 0x4004c5
-                tail call frame, caller of frame at 0x7fffffffda30
-                source language c++.
-                Arglist at unknown address.
-                Locals at unknown address, Previous frame's sp is 0x7fffffffda30
-
-          The STACK-ADDRESS for this frame is '0x7fffffffda30' as
-          indicated by the line:
-
-               Stack level 1, frame at 0x7fffffffda30:
-
-     'function FUNCTION-NAME'
-          Select the stack frame for function FUNCTION-NAME.  If there
-          are multiple stack frames for function FUNCTION-NAME then the
-          inner most stack frame is selected.
-
-     'view STACK-ADDRESS [ PC-ADDR ]'
-          View a frame that is not part of GDB's backtrace.  The frame
-          viewed has stack address STACK-ADDR, and optionally, a program
-          counter address of PC-ADDR.
-
-          This is useful mainly if the chaining of stack frames has been
-          damaged by a bug, making it impossible for GDB to assign
-          numbers properly to all frames.  In addition, this can be
-          useful when your program has multiple stacks and switches
-          between them.
-
-          When viewing a frame outside the current backtrace using
-          'frame view' then you can always return to the original stack
-          using one of the previous stack frame selection instructions,
-          for example 'frame level 0'.
-
-'up N'
-     Move N frames up the stack; N defaults to 1.  For positive numbers
-     N, this advances toward the outermost frame, to higher frame
-     numbers, to frames that have existed longer.
-
-'down N'
-     Move N frames down the stack; N defaults to 1.  For positive
-     numbers N, this advances toward the innermost frame, to lower frame
-     numbers, to frames that were created more recently.  You may
-     abbreviate 'down' as 'do'.
-
-   All of these commands end by printing two lines of output describing
-the frame.  The first line shows the frame number, the function name,
-the arguments, and the source file and line number of execution in that
-frame.  The second line shows the text of that source line.
-
-   For example:
-
-     (gdb) up
-     #1  0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
-         at env.c:10
-     10              read_input_file (argv[i]);
-
-   After such a printout, the 'list' command with no arguments prints
-ten lines centered on the point of execution in the frame.  You can also
-edit the program at the point of execution with your favorite editing
-program by typing 'edit'.  *Note Printing Source Lines: List, for
-details.
-
-'select-frame [ FRAME-SELECTION-SPEC ]'
-     The 'select-frame' command is a variant of 'frame' that does not
-     display the new frame after selecting it.  This command is intended
-     primarily for use in GDB command scripts, where the output might be
-     unnecessary and distracting.  The FRAME-SELECTION-SPEC is as for
-     the 'frame' command described in *note Selecting a Frame:
-     Selection.
-
-'up-silently N'
-'down-silently N'
-     These two commands are variants of 'up' and 'down', respectively;
-     they differ in that they do their work silently, without causing
-     display of the new frame.  They are intended primarily for use in
-     GDB command scripts, where the output might be unnecessary and
-     distracting.
-
-
-File: gdb.info,  Node: Frame Info,  Next: Frame Apply,  Prev: Selection,  Up: Stack
-
-8.4 Information About a Frame
-=============================
-
-There are several other commands to print information about the selected
-stack frame.
-
-'frame'
-'f'
-     When used without any argument, this command does not change which
-     frame is selected, but prints a brief description of the currently
-     selected stack frame.  It can be abbreviated 'f'.  With an
-     argument, this command is used to select a stack frame.  *Note
-     Selecting a Frame: Selection.
-
-'info frame'
-'info f'
-     This command prints a verbose description of the selected stack
-     frame, including:
-
-        * the address of the frame
-        * the address of the next frame down (called by this frame)
-        * the address of the next frame up (caller of this frame)
-        * the language in which the source code corresponding to this
-          frame is written
-        * the address of the frame's arguments
-        * the address of the frame's local variables
-        * the program counter saved in it (the address of execution in
-          the caller frame)
-        * which registers were saved in the frame
-
-     The verbose description is useful when something has gone wrong
-     that has made the stack format fail to fit the usual conventions.
-
-'info frame [ FRAME-SELECTION-SPEC ]'
-'info f [ FRAME-SELECTION-SPEC ]'
-     Print a verbose description of the frame selected by
-     FRAME-SELECTION-SPEC.  The FRAME-SELECTION-SPEC is the same as for
-     the 'frame' command (*note Selecting a Frame: Selection.).  The
-     selected frame remains unchanged by this command.
-
-'info args [-q]'
-     Print the arguments of the selected frame, each on a separate line.
-
-     The optional flag '-q', which stands for 'quiet', disables printing
-     header information and messages explaining why no argument have
-     been printed.
-
-'info args [-q] [-t TYPE_REGEXP] [REGEXP]'
-     Like 'info args', but only print the arguments selected with the
-     provided regexp(s).
-
-     If REGEXP is provided, print only the arguments whose names match
-     the regular expression REGEXP.
-
-     If TYPE_REGEXP is provided, print only the arguments whose types,
-     as printed by the 'whatis' command, match the regular expression
-     TYPE_REGEXP.  If TYPE_REGEXP contains space(s), it should be
-     enclosed in quote characters.  If needed, use backslash to escape
-     the meaning of special characters or quotes.
-
-     If both REGEXP and TYPE_REGEXP are provided, an argument is printed
-     only if its name matches REGEXP and its type matches TYPE_REGEXP.
-
-'info locals [-q]'
-     Print the local variables of the selected frame, each on a separate
-     line.  These are all variables (declared either static or
-     automatic) accessible at the point of execution of the selected
-     frame.
-
-     The optional flag '-q', which stands for 'quiet', disables printing
-     header information and messages explaining why no local variables
-     have been printed.
-
-'info locals [-q] [-t TYPE_REGEXP] [REGEXP]'
-     Like 'info locals', but only print the local variables selected
-     with the provided regexp(s).
-
-     If REGEXP is provided, print only the local variables whose names
-     match the regular expression REGEXP.
-
-     If TYPE_REGEXP is provided, print only the local variables whose
-     types, as printed by the 'whatis' command, match the regular
-     expression TYPE_REGEXP.  If TYPE_REGEXP contains space(s), it
-     should be enclosed in quote characters.  If needed, use backslash
-     to escape the meaning of special characters or quotes.
-
-     If both REGEXP and TYPE_REGEXP are provided, a local variable is
-     printed only if its name matches REGEXP and its type matches
-     TYPE_REGEXP.
-
-     The command 'info locals -q -t TYPE_REGEXP' can usefully be
-     combined with the commands 'frame apply' and 'thread apply'.  For
-     example, your program might use Resource Acquisition Is
-     Initialization types (RAII) such as 'lock_something_t': each local
-     variable of type 'lock_something_t' automatically places a lock
-     that is destroyed when the variable goes out of scope.  You can
-     then list all acquired locks in your program by doing
-          thread apply all -s frame apply all -s info locals -q -t lock_something_t
-     or the equivalent shorter form
-          tfaas i lo -q -t lock_something_t
+     Show how many functions to print in the 'record
+     function-call-history' command.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-2 ./gdb/doc/gdb.info-2
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-2	2019-12-11 01:53:08.000000000 +0000
+++ ./gdb/doc/gdb.info-2	2024-02-01 01:52:18.000000000 +0000
@@ -1,6 +1,6 @@
-This is gdb.info, produced by makeinfo version 6.3 from gdb.texinfo.
+This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo.
 
-Copyright (C) 1988-2019 Free Software Foundation, Inc.
+Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -21,9 +21,9 @@ END-INFO-DIR-ENTRY
    This file documents the GNU debugger GDB.
 
    This is the Tenth Edition, of 'Debugging with GDB: the GNU
-Source-Level Debugger' for GDB (GDB) Version 9.0.50.20191211-git.
+Source-Level Debugger' for GDB (GDB) Version 15.0.50.20240201-git.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -37,6 +37,527 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+File: gdb.info,  Node: Stack,  Next: Source,  Prev: Process Record and Replay,  Up: Top
+
+8 Examining the Stack
+*********************
+
+When your program has stopped, the first thing you need to know is where
+it stopped and how it got there.
+
+   Each time your program performs a function call, information about
+the call is generated.  That information includes the location of the
+call in your program, the arguments of the call, and the local variables
+of the function being called.  The information is saved in a block of
+data called a "stack frame".  The stack frames are allocated in a region
+of memory called the "call stack".
+
+   When your program stops, the GDB commands for examining the stack
+allow you to see all of this information.
+
+   One of the stack frames is "selected" by GDB and many GDB commands
+refer implicitly to the selected frame.  In particular, whenever you ask
+GDB for the value of a variable in your program, the value is found in
+the selected frame.  There are special GDB commands to select whichever
+frame you are interested in.  *Note Selecting a Frame: Selection.
+
+   When your program stops, GDB automatically selects the currently
+executing frame and describes it briefly, similar to the 'frame' command
+(*note Information about a Frame: Frame Info.).
+
+* Menu:
+
+* Frames::                      Stack frames
+* Backtrace::                   Backtraces
+* Selection::                   Selecting a frame
+* Frame Info::                  Information on a frame
+* Frame Apply::                 Applying a command to several frames
+* Frame Filter Management::     Managing frame filters
+
+
+File: gdb.info,  Node: Frames,  Next: Backtrace,  Up: Stack
+
+8.1 Stack Frames
+================
+
+The call stack is divided up into contiguous pieces called "stack
+frames", or "frames" for short; each frame is the data associated with
+one call to one function.  The frame contains the arguments given to the
+function, the function's local variables, and the address at which the
+function is executing.
+
+   When your program is started, the stack has only one frame, that of
+the function 'main'.  This is called the "initial" frame or the
+"outermost" frame.  Each time a function is called, a new frame is made.
+Each time a function returns, the frame for that function invocation is
+eliminated.  If a function is recursive, there can be many frames for
+the same function.  The frame for the function in which execution is
+actually occurring is called the "innermost" frame.  This is the most
+recently created of all the stack frames that still exist.
+
+   Inside your program, stack frames are identified by their addresses.
+A stack frame consists of many bytes, each of which has its own address;
+each kind of computer has a convention for choosing one byte whose
+address serves as the address of the frame.  Usually this address is
+kept in a register called the "frame pointer register" (*note $fp:
+Registers.) while execution is going on in that frame.
+
+   GDB labels each existing stack frame with a "level", a number that is
+zero for the innermost frame, one for the frame that called it, and so
+on upward.  These level numbers give you a way of designating stack
+frames in GDB commands.  The terms "frame number" and "frame level" can
+be used interchangeably to describe this number.
+
+   Some compilers provide a way to compile functions so that they
+operate without stack frames.  (For example, the GCC option
+     '-fomit-frame-pointer'
+   generates functions without a frame.)  This is occasionally done with
+heavily used library functions to save the frame setup time.  GDB has
+limited facilities for dealing with these function invocations.  If the
+innermost function invocation has no stack frame, GDB nevertheless
+regards it as though it had a separate frame, which is numbered zero as
+usual, allowing correct tracing of the function call chain.  However,
+GDB has no provision for frameless functions elsewhere in the stack.
+
+
+File: gdb.info,  Node: Backtrace,  Next: Selection,  Prev: Frames,  Up: Stack
+
+8.2 Backtraces
+==============
+
+A backtrace is a summary of how your program got where it is.  It shows
+one line per frame, for many frames, starting with the currently
+executing frame (frame zero), followed by its caller (frame one), and on
+up the stack.
+
+   To print a backtrace of the entire stack, use the 'backtrace'
+command, or its alias 'bt'.  This command will print one line per frame
+for frames in the stack.  By default, all stack frames are printed.  You
+can stop the backtrace at any time by typing the system interrupt
+character, normally 'Ctrl-c'.
+
+'backtrace [OPTION]... [QUALIFIER]... [COUNT]'
+'bt [OPTION]... [QUALIFIER]... [COUNT]'
+     Print the backtrace of the entire stack.
+
+     The optional COUNT can be one of the following:
+
+     'N'
+     'N'
+          Print only the innermost N frames, where N is a positive
+          number.
+
+     '-N'
+     '-N'
+          Print only the outermost N frames, where N is a positive
+          number.
+
+     Options:
+
+     '-full'
+          Print the values of the local variables also.  This can be
+          combined with the optional COUNT to limit the number of frames
+          shown.
+
+     '-no-filters'
+          Do not run Python frame filters on this backtrace.  *Note
+          Frame Filter API::, for more information.  Additionally use
+          *note disable frame-filter all:: to turn off all frame
+          filters.  This is only relevant when GDB has been configured
+          with 'Python' support.
+
+     '-hide'
+          A Python frame filter might decide to "elide" some frames.
+          Normally such elided frames are still printed, but they are
+          indented relative to the filtered frames that cause them to be
+          elided.  The '-hide' option causes elided frames to not be
+          printed at all.
+
+     The 'backtrace' command also supports a number of options that
+     allow overriding relevant global print settings as set by 'set
+     backtrace' and 'set print' subcommands:
+
+     '-past-main [on|off]'
+          Set whether backtraces should continue past 'main'.  Related
+          setting: *note set backtrace past-main::.
+
+     '-past-entry [on|off]'
+          Set whether backtraces should continue past the entry point of
+          a program.  Related setting: *note set backtrace past-entry::.
+
+     '-entry-values no|only|preferred|if-needed|both|compact|default'
+          Set printing of function arguments at function entry.  Related
+          setting: *note set print entry-values::.
+
+     '-frame-arguments all|scalars|none'
+          Set printing of non-scalar frame arguments.  Related setting:
+          *note set print frame-arguments::.
+
+     '-raw-frame-arguments [on|off]'
+          Set whether to print frame arguments in raw form.  Related
+          setting: *note set print raw-frame-arguments::.
+
+     '-frame-info auto|source-line|location|source-and-location|location-and-address|short-location'
+          Set printing of frame information.  Related setting: *note set
+          print frame-info::.
+
+     The optional QUALIFIER is maintained for backward compatibility.
+     It can be one of the following:
+
+     'full'
+          Equivalent to the '-full' option.
+
+     'no-filters'
+          Equivalent to the '-no-filters' option.
+
+     'hide'
+          Equivalent to the '-hide' option.
+
+   The names 'where' and 'info stack' (abbreviated 'info s') are
+additional aliases for 'backtrace'.
+
+   In a multi-threaded program, GDB by default shows the backtrace only
+for the current thread.  To display the backtrace for several or all of
+the threads, use the command 'thread apply' (*note thread apply:
+Threads.).  For example, if you type 'thread apply all backtrace', GDB
+will display the backtrace for all the threads; this is handy when you
+debug a core dump of a multi-threaded program.
+
+   Each line in the backtrace shows the frame number and the function
+name.  The program counter value is also shown--unless you use 'set
+print address off'.  The backtrace also shows the source file name and
+line number, as well as the arguments to the function.  The program
+counter value is omitted if it is at the beginning of the code for that
+line number.
+
+   Here is an example of a backtrace.  It was made with the command 'bt
+3', so it shows the innermost three frames.
+
+     #0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
+         at builtin.c:993
+     #1  0x6e38 in expand_macro (sym=0x2b600, data=...) at macro.c:242
+     #2  0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08)
+         at macro.c:71
+     (More stack frames follow...)
+
+The display for frame zero does not begin with a program counter value,
+indicating that your program has stopped at the beginning of the code
+for line '993' of 'builtin.c'.
+
+The value of parameter 'data' in frame 1 has been replaced by '...'.  By
+default, GDB prints the value of a parameter only if it is a scalar
+(integer, pointer, enumeration, etc).  See command 'set print
+frame-arguments' in *note Print Settings:: for more details on how to
+configure the way function parameter values are printed.  The command
+'set print frame-info' (*note Print Settings::) controls what frame
+information is printed.
+
+   If your program was compiled with optimizations, some compilers will
+optimize away arguments passed to functions if those arguments are never
+used after the call.  Such optimizations generate code that passes
+arguments through registers, but doesn't store those arguments in the
+stack frame.  GDB has no way of displaying such arguments in stack
+frames other than the innermost one.  Here's what such a backtrace might
+look like:
+
+     #0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
+         at builtin.c:993
+     #1  0x6e38 in expand_macro (sym=<optimized out>) at macro.c:242
+     #2  0x6840 in expand_token (obs=0x0, t=<optimized out>, td=0xf7fffb08)
+         at macro.c:71
+     (More stack frames follow...)
+
+The values of arguments that were not saved in their stack frames are
+shown as '<optimized out>'.
+
+   If you need to display the values of such optimized-out arguments,
+either deduce that from other variables whose values depend on the one
+you are interested in, or recompile without optimizations.
+
+   Most programs have a standard user entry point--a place where system
+libraries and startup code transition into user code.  For C this is
+'main'(1).  When GDB finds the entry function in a backtrace it will
+terminate the backtrace, to avoid tracing into highly system-specific
+(and generally uninteresting) code.
+
+   If you need to examine the startup code, or limit the number of
+levels in a backtrace, you can change this behavior:
+
+'set backtrace past-main'
+'set backtrace past-main on'
+     Backtraces will continue past the user entry point.
+
+'set backtrace past-main off'
+     Backtraces will stop when they encounter the user entry point.
+     This is the default.
+
+'show backtrace past-main'
+     Display the current user entry point backtrace policy.
+
+'set backtrace past-entry'
+'set backtrace past-entry on'
+     Backtraces will continue past the internal entry point of an
+     application.  This entry point is encoded by the linker when the
+     application is built, and is likely before the user entry point
+     'main' (or equivalent) is called.
+
+'set backtrace past-entry off'
+     Backtraces will stop when they encounter the internal entry point
+     of an application.  This is the default.
+
+'show backtrace past-entry'
+     Display the current internal entry point backtrace policy.
+
+'set backtrace limit N'
+'set backtrace limit 0'
+'set backtrace limit unlimited'
+     Limit the backtrace to N levels.  A value of 'unlimited' or zero
+     means unlimited levels.
+
+'show backtrace limit'
+     Display the current limit on backtrace levels.
+
+   You can control how file names are displayed.
+
+'set filename-display'
+'set filename-display relative'
+     Display file names relative to the compilation directory.  This is
+     the default.
+
+'set filename-display basename'
+     Display only basename of a filename.
+
+'set filename-display absolute'
+     Display an absolute filename.
+
+'show filename-display'
+     Show the current way to display filenames.
+
+   ---------- Footnotes ----------
+
+   (1) Note that embedded programs (the so-called "free-standing"
+environment) are not required to have a 'main' function as the entry
+point.  They could even have multiple entry points.
+
+
+File: gdb.info,  Node: Selection,  Next: Frame Info,  Prev: Backtrace,  Up: Stack
+
+8.3 Selecting a Frame
+=====================
+
+Most commands for examining the stack and other data in your program
+work on whichever stack frame is selected at the moment.  Here are the
+commands for selecting a stack frame; all of them finish by printing a
+brief description of the stack frame just selected.
+
+'frame [ FRAME-SELECTION-SPEC ]'
+'f [ FRAME-SELECTION-SPEC ]'
+     The 'frame' command allows different stack frames to be selected.
+     The FRAME-SELECTION-SPEC can be any of the following:
+
+     'NUM'
+     'level NUM'
+          Select frame level NUM.  Recall that frame zero is the
+          innermost (currently executing) frame, frame one is the frame
+          that called the innermost one, and so on.  The highest level
+          frame is usually the one for 'main'.
+
+          As this is the most common method of navigating the frame
+          stack, the string 'level' can be omitted.  For example, the
+          following two commands are equivalent:
+
+               (gdb) frame 3
+               (gdb) frame level 3
+
+     'address STACK-ADDRESS'
+          Select the frame with stack address STACK-ADDRESS.  The
+          STACK-ADDRESS for a frame can be seen in the output of 'info
+          frame', for example:
+
+               (gdb) info frame
+               Stack level 1, frame at 0x7fffffffda30:
+                rip = 0x40066d in b (amd64-entry-value.cc:59); saved rip 0x4004c5
+                tail call frame, caller of frame at 0x7fffffffda30
+                source language c++.
+                Arglist at unknown address.
+                Locals at unknown address, Previous frame's sp is 0x7fffffffda30
+
+          The STACK-ADDRESS for this frame is '0x7fffffffda30' as
+          indicated by the line:
+
+               Stack level 1, frame at 0x7fffffffda30:
+
+     'function FUNCTION-NAME'
+          Select the stack frame for function FUNCTION-NAME.  If there
+          are multiple stack frames for function FUNCTION-NAME then the
+          inner most stack frame is selected.
+
+     'view STACK-ADDRESS [ PC-ADDR ]'
+          View a frame that is not part of GDB's backtrace.  The frame
+          viewed has stack address STACK-ADDR, and optionally, a program
+          counter address of PC-ADDR.
+
+          This is useful mainly if the chaining of stack frames has been
+          damaged by a bug, making it impossible for GDB to assign
+          numbers properly to all frames.  In addition, this can be
+          useful when your program has multiple stacks and switches
+          between them.
+
+          When viewing a frame outside the current backtrace using
+          'frame view' then you can always return to the original stack
+          using one of the previous stack frame selection instructions,
+          for example 'frame level 0'.
+
+'up N'
+     Move N frames up the stack; N defaults to 1.  For positive numbers
+     N, this advances toward the outermost frame, to higher frame
+     numbers, to frames that have existed longer.
+
+'down N'
+     Move N frames down the stack; N defaults to 1.  For positive
+     numbers N, this advances toward the innermost frame, to lower frame
+     numbers, to frames that were created more recently.  You may
+     abbreviate 'down' as 'do'.
+
+   All of these commands end by printing two lines of output describing
+the frame.  The first line shows the frame number, the function name,
+the arguments, and the source file and line number of execution in that
+frame.  The second line shows the text of that source line.
+
+   For example:
+
+     (gdb) up
+     #1  0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
+         at env.c:10
+     10              read_input_file (argv[i]);
+
+   After such a printout, the 'list' command with no arguments prints
+ten lines centered on the point of execution in the frame.  You can also
+edit the program at the point of execution with your favorite editing
+program by typing 'edit'.  *Note Printing Source Lines: List, for
+details.
+
+'select-frame [ FRAME-SELECTION-SPEC ]'
+     The 'select-frame' command is a variant of 'frame' that does not
+     display the new frame after selecting it.  This command is intended
+     primarily for use in GDB command scripts, where the output might be
+     unnecessary and distracting.  The FRAME-SELECTION-SPEC is as for
+     the 'frame' command described in *note Selecting a Frame:
+     Selection.
+
+'up-silently N'
+'down-silently N'
+     These two commands are variants of 'up' and 'down', respectively;
+     they differ in that they do their work silently, without causing
+     display of the new frame.  They are intended primarily for use in
+     GDB command scripts, where the output might be unnecessary and
+     distracting.
+
+
+File: gdb.info,  Node: Frame Info,  Next: Frame Apply,  Prev: Selection,  Up: Stack
+
+8.4 Information About a Frame
+=============================
+
+There are several other commands to print information about the selected
+stack frame.
+
+'frame'
+'f'
+     When used without any argument, this command does not change which
+     frame is selected, but prints a brief description of the currently
+     selected stack frame.  It can be abbreviated 'f'.  With an
+     argument, this command is used to select a stack frame.  *Note
+     Selecting a Frame: Selection.
+
+'info frame'
+'info f'
+     This command prints a verbose description of the selected stack
+     frame, including:
+
+        * the address of the frame
+        * the address of the next frame down (called by this frame)
+        * the address of the next frame up (caller of this frame)
+        * the language in which the source code corresponding to this
+          frame is written
+        * the address of the frame's arguments
+        * the address of the frame's local variables
+        * the program counter saved in it (the address of execution in
+          the caller frame)
+        * which registers were saved in the frame
+
+     The verbose description is useful when something has gone wrong
+     that has made the stack format fail to fit the usual conventions.
+
+'info frame [ FRAME-SELECTION-SPEC ]'
+'info f [ FRAME-SELECTION-SPEC ]'
+     Print a verbose description of the frame selected by
+     FRAME-SELECTION-SPEC.  The FRAME-SELECTION-SPEC is the same as for
+     the 'frame' command (*note Selecting a Frame: Selection.).  The
+     selected frame remains unchanged by this command.
+
+'info args [-q]'
+     Print the arguments of the selected frame, each on a separate line.
+
+     The optional flag '-q', which stands for 'quiet', disables printing
+     header information and messages explaining why no argument have
+     been printed.
+
+'info args [-q] [-t TYPE_REGEXP] [REGEXP]'
+     Like 'info args', but only print the arguments selected with the
+     provided regexp(s).
+
+     If REGEXP is provided, print only the arguments whose names match
+     the regular expression REGEXP.
+
+     If TYPE_REGEXP is provided, print only the arguments whose types,
+     as printed by the 'whatis' command, match the regular expression
+     TYPE_REGEXP.  If TYPE_REGEXP contains space(s), it should be
+     enclosed in quote characters.  If needed, use backslash to escape
+     the meaning of special characters or quotes.
+
+     If both REGEXP and TYPE_REGEXP are provided, an argument is printed
+     only if its name matches REGEXP and its type matches TYPE_REGEXP.
+
+'info locals [-q]'
+     Print the local variables of the selected frame, each on a separate
+     line.  These are all variables (declared either static or
+     automatic) accessible at the point of execution of the selected
+     frame.
+
+     The optional flag '-q', which stands for 'quiet', disables printing
+     header information and messages explaining why no local variables
+     have been printed.
+
+'info locals [-q] [-t TYPE_REGEXP] [REGEXP]'
+     Like 'info locals', but only print the local variables selected
+     with the provided regexp(s).
+
+     If REGEXP is provided, print only the local variables whose names
+     match the regular expression REGEXP.
+
+     If TYPE_REGEXP is provided, print only the local variables whose
+     types, as printed by the 'whatis' command, match the regular
+     expression TYPE_REGEXP.  If TYPE_REGEXP contains space(s), it
+     should be enclosed in quote characters.  If needed, use backslash
+     to escape the meaning of special characters or quotes.
+
+     If both REGEXP and TYPE_REGEXP are provided, a local variable is
+     printed only if its name matches REGEXP and its type matches
+     TYPE_REGEXP.
+
+     The command 'info locals -q -t TYPE_REGEXP' can usefully be
+     combined with the commands 'frame apply' and 'thread apply'.  For
+     example, your program might use Resource Acquisition Is
+     Initialization types (RAII) such as 'lock_something_t': each local
+     variable of type 'lock_something_t' automatically places a lock
+     that is destroyed when the variable goes out of scope.  You can
+     then list all acquired locks in your program by doing
+          thread apply all -s frame apply all -s info locals -q -t lock_something_t
+     or the equivalent shorter form
+          tfaas i lo -q -t lock_something_t
+
+
 File: gdb.info,  Node: Frame Apply,  Next: Frame Filter Management,  Prev: Frame Info,  Up: Stack
 
 8.5 Applying a Command to Several Frames.
@@ -142,7 +663,7 @@ File: gdb.info,  Node: Frame Apply,  Nex
           (gdb) faas p some_local_var_i_do_not_remember_where_it_is
 
      The 'faas' command accepts the same options as the 'frame apply'
-     command.  *Note frame apply::.
+     command.  *Note frame apply: Frame Apply.
 
      Note that the command 'tfaas COMMAND' applies COMMAND on all frames
      of all threads.  See *Note Threads: Threads.
@@ -298,22 +819,23 @@ Emacs.
 * Menu:
 
 * List::                        Printing source lines
-* Specify Location::            How to specify code locations
+* Location Specifications::     How to specify code locations
 * Edit::                        Editing source files
 * Search::                      Searching source files
 * Source Path::                 Specifying source directories
 * Machine Code::                Source and machine code
+* Disable Reading Source::      Disable Reading Source Code
 
 
-File: gdb.info,  Node: List,  Next: Specify Location,  Up: Source
+File: gdb.info,  Node: List,  Next: Location Specifications,  Up: Source
 
 9.1 Printing Source Lines
 =========================
 
 To print lines from a source file, use the 'list' command (abbreviated
 'l').  By default, ten lines are printed.  There are several ways to
-specify what part of the file you want to print; see *note Specify
-Location::, for the full list.
+specify what part of the file you want to print; see *note Location
+Specifications::, for the full list.
 
    Here are the forms of the 'list' command most commonly used:
 
@@ -329,11 +851,21 @@ Location::, for the full list.
      'list' command, this prints lines following the last lines printed;
      however, if the last line printed was a solitary line printed as
      part of displaying a stack frame (*note Examining the Stack:
-     Stack.), this prints lines centered around that line.
+     Stack.), this prints lines centered around that line.  If no 'list'
+     command has been used and no solitary line was printed, it prints
+     the lines around the function 'main'.
+
+'list +'
+     Same as using with no arguments.
 
 'list -'
      Print lines just before the lines last printed.
 
+'list .'
+     Print the lines surrounding the point of execution within the
+     currently selected frame.  If the inferior is not running, print
+     lines around the start of the main function instead.
+
    By default, GDB prints ten source lines with any of these forms of
 the 'list' command.  You can change this using 'set listsize':
 
@@ -353,24 +885,33 @@ argument is preserved in repetition so t
 the source file.
 
    In general, the 'list' command expects you to supply zero, one or two
-"locations".  Locations specify source lines; there are several ways of
-writing them (*note Specify Location::), but the effect is always to
-specify some source line.
+location specs.  These location specs are interpreted to resolve to
+source code lines; there are several ways of writing them (*note
+Location Specifications::), but the effect is always to resolve to some
+source lines to display.
 
    Here is a complete description of the possible arguments for 'list':
 
-'list LOCATION'
-     Print lines centered around the line specified by LOCATION.
+'list LOCSPEC'
+     Print lines centered around the line or lines of all the code
+     locations that result from resolving LOCSPEC.
 
 'list FIRST,LAST'
-     Print lines from FIRST to LAST.  Both arguments are locations.
-     When a 'list' command has two locations, and the source file of the
-     second location is omitted, this refers to the same source file as
-     the first location.
+     Print lines from FIRST to LAST.  Both arguments are location specs.
+     When a 'list' command has two location specs, and the source file
+     of the second location spec is omitted, this refers to the same
+     source file as the first location spec.  If either FIRST or LAST
+     resolve to more than one source line in the program, then the list
+     command shows the list of resolved source lines and does not
+     proceed with the source code listing.
 
 'list ,LAST'
      Print lines ending with LAST.
 
+     Likewise, if LAST resolves to more than one source line in the
+     program, then the list command prints the list of resolved source
+     lines and does not proceed with the source code listing.
+
 'list FIRST,'
      Print lines starting with FIRST.
 
@@ -384,10 +925,93 @@ specify some source line.
      As described in the preceding table.
 
 
-File: gdb.info,  Node: Specify Location,  Next: Edit,  Prev: List,  Up: Source
+File: gdb.info,  Node: Location Specifications,  Next: Edit,  Prev: List,  Up: Source
 
-9.2 Specifying a Location
-=========================
+9.2 Location Specifications
+===========================
+
+Several GDB commands accept arguments that specify a location or
+locations of your program's code.  Many times locations are specified
+using a source line number, but they can also be specified by a function
+name, an address, a label, etc.  The different forms of specifying a
+location that GDB recognizes are collectively known as forms of
+"location specification", or "location spec".  This section documents
+the forms of specifying locations that GDB recognizes.
+
+   When you specify a location, GDB needs to find the place in your
+program, known as "code location", that corresponds to the given
+location spec.  We call this process of finding actual code locations
+corresponding to a location spec "location resolution".
+
+   A concrete code location in your program is uniquely identifiable by
+a set of several attributes: its source line number, the name of its
+source file, the fully-qualified and prototyped function in which it is
+defined, and an instruction address.  Because each inferior has its own
+address space, the inferior number is also a necessary part of these
+attributes.
+
+   By contrast, location specs you type will many times omit some of
+these attributes.  For example, it is customary to specify just the
+source line number to mean a line in the current source file, or specify
+just the basename of the file, omitting its directories.  In other
+words, a location spec is usually incomplete, a kind of blueprint, and
+GDB needs to complete the missing attributes by using the implied
+defaults, and by considering the source code and the debug information
+available to it.  This is what location resolution is about.
+
+   The resolution of an incomplete location spec can produce more than a
+single code location, if the spec doesn't allow distinguishing between
+them.  Here are some examples of situations that result in a location
+spec matching multiple code locations in your program:
+
+   * The location spec specifies a function name, and there are several
+     functions in the program which have that name.  (To distinguish
+     between them, you can specify a fully-qualified and prototyped
+     function name, such as 'A::func(int)' instead of just 'func'.)
+
+   * The location spec specifies a source file name, and there are
+     several source files in the program that share the same name, for
+     example several files with the same basename in different
+     subdirectories.  (To distinguish between them, specify enough
+     leading directories with the file name.)
+
+   * For a C++ constructor, the GCC compiler generates several instances
+     of the function body, used in different cases, but their
+     source-level names are identical.
+
+   * For a C++ template function, a given line in the function can
+     correspond to any number of instantiations.
+
+   * For an inlined function, a given source line can correspond to
+     several actual code locations with that function's inlined code.
+
+   Resolution of a location spec can also fail to produce a complete
+code location, or even fail to produce any code location.  Here are some
+examples of such situations:
+
+   * Some parts of the program lack detailed enough debug info, so the
+     resolved code location lacks some attributes, like source file name
+     and line number, leaving just the instruction address and perhaps
+     also a function name.  Such an incomplete code location is only
+     usable in contexts that work with addresses and/or function names.
+     Some commands can only work with complete code locations.
+
+   * The location spec specifies a function name, and there are no
+     functions in the program by that name, or they only exist in a
+     yet-unloaded shared library.
+
+   * The location spec specifies a source file name, and there are no
+     source files in the program by that name, or they only exist in a
+     yet-unloaded shared library.
+
+   * The location spec specifies both a source file name and a source
+     line number, and even though there are source files in the program
+     that match the file name, none of those files has the specified
+     line number.
+
+   Locations may be specified using three different formats: linespec
+locations, explicit locations, or address locations.  The following
+subsections describe these formats.
 
 * Menu:
 
@@ -395,14 +1019,8 @@ File: gdb.info,  Node: Specify Location,
 * Explicit Locations::                Explicit locations
 * Address Locations::                 Address locations
 
-Several GDB commands accept arguments that specify a location of your
-program's code.  Since GDB is a source-level debugger, a location
-usually specifies some line in the source code.  Locations may be
-specified using three different formats: linespec locations, explicit
-locations, or address locations.
-
 
-File: gdb.info,  Node: Linespec Locations,  Next: Explicit Locations,  Up: Specify Location
+File: gdb.info,  Node: Linespec Locations,  Next: Explicit Locations,  Up: Location Specifications
 
 9.2.1 Linespec Locations
 ------------------------
@@ -479,7 +1097,7 @@ of specifying a linespec:
      breakpoint at each one of those probes.
 
 
-File: gdb.info,  Node: Explicit Locations,  Next: Address Locations,  Prev: Linespec Locations,  Up: Specify Location
+File: gdb.info,  Node: Explicit Locations,  Next: Address Locations,  Prev: Linespec Locations,  Up: Location Specifications
 
 9.2.2 Explicit Locations
 ------------------------
@@ -554,7 +1172,7 @@ non-unique trailing characters from the
 'break -s main.c -li 3'.
 
 
-File: gdb.info,  Node: Address Locations,  Prev: Explicit Locations,  Up: Specify Location
+File: gdb.info,  Node: Address Locations,  Prev: Explicit Locations,  Up: Location Specifications
 
 9.2.3 Address Locations
 -----------------------
@@ -596,7 +1214,7 @@ ADDRESS:
      functions with identical names in different source files.
 
 
-File: gdb.info,  Node: Edit,  Next: Search,  Prev: Specify Location,  Up: Source
+File: gdb.info,  Node: Edit,  Next: Search,  Prev: Location Specifications,  Up: Source
 
 9.3 Editing Source Files
 ========================
@@ -607,12 +1225,17 @@ active line in the program.  Alternative
 specify what part of the file you want to print if you want to see other
 parts of the program:
 
-'edit LOCATION'
-     Edit the source file specified by 'location'.  Editing starts at
-     that LOCATION, e.g., at the specified source line of the specified
-     file.  *Note Specify Location::, for all the possible forms of the
-     LOCATION argument; here are the forms of the 'edit' command most
-     commonly used:
+'edit LOCSPEC'
+     Edit the source file of the code location that results from
+     resolving 'locspec'.  Editing starts at the source file and source
+     line 'locspec' resolves to.  *Note Location Specifications::, for
+     all the possible forms of the LOCSPEC argument.
+
+     If 'locspec' resolves to more than one source line in your program,
+     then the command prints the list of resolved source lines and does
+     not proceed with the editing.
+
+     Here are the forms of the 'edit' command most commonly used:
 
      'edit NUMBER'
           Edit the current source file with NUMBER as the active line
@@ -747,7 +1370,7 @@ first look up would not have occurred, b
 would be similar.
 
    When searching for source files on MS-DOS and MS-Windows, where
-absolute paths start with a drive letter (e.g.  'C:/project/foo.c'), GDB
+absolute paths start with a drive letter (e.g. 'C:/project/foo.c'), GDB
 will remove the drive letter from the file name before appending it to a
 search directory from "source path"; for instance if the executable
 references the source file 'C:/project/foo.c' and "source path" is set
@@ -906,7 +1529,7 @@ versions of source.  You can correct the
      directories in one command.
 
 
-File: gdb.info,  Node: Machine Code,  Prev: Source Path,  Up: Source
+File: gdb.info,  Node: Machine Code,  Next: Disable Reading Source,  Prev: Source Path,  Up: Source
 
 9.6 Source and Machine Code
 ===========================
@@ -920,11 +1543,12 @@ line' command causes the arrow to point
 'info line' prints addresses in symbolic form as well as hex.
 
 'info line'
-'info line LOCATION'
+'info line LOCSPEC'
      Print the starting and ending addresses of the compiled code for
-     source line LOCATION.  You can specify source lines in any of the
-     ways documented in *note Specify Location::.  With no LOCATION
-     information about the current source line is printed.
+     the source lines of the code locations that result from resolving
+     LOCSPEC.  *Note Location Specifications::, for the various forms of
+     LOCSPEC.  With no LOCSPEC, information about the current source
+     line is printed.
 
    For example, we can use 'info line' to discover the location of the
 object code for the first line of function 'm4_changequote':
@@ -933,8 +1557,8 @@ object code for the first line of functi
      Line 895 of "builtin.c" starts at pc 0x634c <m4_changequote> and \
              ends at 0x6350 <m4_changequote+4>.
 
-We can also inquire (using '*ADDR' as the form for LOCATION) what source
-line covers a particular address:
+We can also inquire, using '*ADDR' as the form for LOCSPEC, what source
+line covers a particular address ADDR:
      (gdb) info line *0x63ff
      Line 926 of "builtin.c" starts at pc 0x63e4 <m4_changequote+152> and \
              ends at 0x6404 <m4_changequote+184>.
@@ -952,10 +1576,19 @@ location will display information about
 'disassemble /m'
 'disassemble /s'
 'disassemble /r'
+'disassemble /b'
      This specialized command dumps a range of memory as machine
      instructions.  It can also print mixed source+disassembly by
      specifying the '/m' or '/s' modifier and print the raw instructions
-     in hex as well as in symbolic form by specifying the '/r' modifier.
+     in hex as well as in symbolic form by specifying the '/r' or '/b'
+     modifier.
+
+     Only one of '/m' and '/s' can be used, attempting to use both flag
+     will give an error.
+
+     Only one of '/r' and '/b' can be used, attempting to use both flag
+     will give an error.
+
      The default memory range is the function surrounding the program
      counter of the selected frame.  A single argument to this command
      is a program counter value; GDB dumps the function surrounding this
@@ -995,6 +1628,30 @@ of HP PA-RISC 2.0 code:
         0x32e0 <main+232>:      ldil 0x3000,r31
      End of assembler dump.
 
+   The following two examples are for RISC-V, and demonstrates the
+difference between the '/r' and '/b' modifiers.  First with '/b', the
+bytes of the instruction are printed, in hex, in memory order:
+
+     (gdb) disassemble /b 0x00010150,0x0001015c
+     Dump of assembler code from 0x10150 to 0x1015c:
+        0x00010150 <call_me+4>:      22 dc                 	sw	s0,56(sp)
+        0x00010152 <call_me+6>:      80 00                 	addi	s0,sp,64
+        0x00010154 <call_me+8>:      23 26 a4 fe           	sw	a0,-20(s0)
+        0x00010158 <call_me+12>:     23 24 b4 fe           	sw	a1,-24(s0)
+     End of assembler dump.
+
+   In contrast, with '/r' the bytes of the instruction are displayed in
+the instruction order, for RISC-V this means that the bytes have been
+swapped to little-endian order:
+
+     (gdb) disassemble /r 0x00010150,0x0001015c
+     Dump of assembler code from 0x10150 to 0x1015c:
+        0x00010150 <call_me+4>:      dc22              	sw	s0,56(sp)
+        0x00010152 <call_me+6>:      0080              	addi	s0,sp,64
+        0x00010154 <call_me+8>:      fea42623        	sw	a0,-20(s0)
+        0x00010158 <call_me+12>:     feb42423        	sw	a1,-24(s0)
+     End of assembler dump.
+
    Here is an example showing mixed source+assembly for Intel x86 with
 '/m' or '/s', when the program is stopped just after function prologue
 in a non-optimized function with no inline code.
@@ -1113,10 +1770,12 @@ x86-64,
         0x0000000000400289:  2e 32 00       xor    %cs:(%rax),%al
      End of assembler dump.
 
-   Addresses cannot be specified as a location (*note Specify
-Location::).  So, for example, if you want to disassemble function 'bar'
-in file 'foo.c', you must type 'disassemble 'foo.c'::bar' and not
-'disassemble foo.c:bar'.
+   Note that the 'disassemble' command's address arguments are specified
+using expressions in your programming language (*note Expressions:
+Expressions.), not location specs (*note Location Specifications::).
+So, for example, if you want to disassemble function 'bar' in file
+'foo.c', you must type 'disassemble 'foo.c'::bar' and not 'disassemble
+foo.c:bar'.
 
    Some architectures have more than one commonly-used set of
 instruction mnemonics or other syntax.
@@ -1136,8 +1795,8 @@ able to resolve these to actual function
 
      If it is necessary to specify more than one disassembler option,
      then multiple options can be placed together into a comma separated
-     list.  Currently this command is only supported on targets ARM,
-     MIPS, PowerPC and S/390.
+     list.  Currently this command is only supported on targets ARC,
+     ARM, MIPS, PowerPC and S/390.
 
 'show disassembler-options'
      Show the current setting of the disassembler options.
@@ -1172,6 +1831,27 @@ able to resolve these to actual function
      disassembly of the next line or instruction.
 
 
+File: gdb.info,  Node: Disable Reading Source,  Prev: Machine Code,  Up: Source
+
+9.7 Disable Reading Source Code
+===============================
+
+In some cases it can be desirable to prevent GDB from accessing source
+code files.  One case where this might be desirable is if the source
+code files are located over a slow network connection.
+
+   The following command can be used to control whether GDB should
+access source code files or not:
+
+'set source open [on|off]'
+'show source open'
+     When this option is 'on', which is the default, GDB will access
+     source code files when needed, for example to print source lines
+     when GDB stops, or in response to the 'list' command.
+
+     When this option is 'off', GDB will not access source code files.
+
+
 File: gdb.info,  Node: Data,  Next: Optimized Code,  Prev: Source,  Up: Top
 
 10 Examining Data
@@ -1208,15 +1888,31 @@ Pretty Printing::).
           Set printing of array indexes.  Related setting: *note set
           print array-indexes::.
 
-     '-elements NUMBER-OF-ELEMENTS|unlimited'
-          Set limit on string chars or array elements to print.  The
+     '-characters NUMBER-OF-CHARACTERS|elements|unlimited'
+          Set limit on string characters to print.  The value 'elements'
+          causes the limit on array elements to print to be used.  The
           value 'unlimited' causes there to be no limit.  Related
-          setting: *note set print elements::.
+          setting: *note set print characters::.
+
+     '-elements NUMBER-OF-ELEMENTS|unlimited'
+          Set limit on array elements and optionally string characters
+          to print.  See *note set print characters::, and the
+          '-characters' option above for when this option applies to
+          strings.  The value 'unlimited' causes there to be no limit.
+          *Note set print elements::, for a related CLI command.
 
      '-max-depth DEPTH|unlimited'
           Set the threshold after which nested structures are replaced
           with ellipsis.  Related setting: *note set print max-depth::.
 
+     '-nibbles [on|off]'
+          Set whether to print binary values in groups of four bits,
+          known as "nibbles".  *Note set print nibbles::.
+
+     '-memory-tag-violations [on|off]'
+          Set printing of additional information about memory tag
+          violations.  *Note set print memory-tag-violations::.
+
      '-null-stop [on|off]'
           Set printing of char arrays to stop at first null char.
           Related setting: *note set print null-stop::.
@@ -1229,6 +1925,11 @@ Pretty Printing::).
           Set pretty formatting of structures.  Related setting: *note
           set print pretty::.
 
+     '-raw-values [on|off]'
+          Set whether to print values in raw form, bypassing any
+          pretty-printers for that value.  Related setting: *note set
+          print raw-values::.
+
      '-repeats NUMBER-OF-REPEATS|unlimited'
           Set threshold for repeated print elements.  'unlimited' causes
           all elements to be individually printed.  Related setting:
@@ -1255,14 +1956,14 @@ Pretty Printing::).
      command option, then you must use a double dash ('--') to mark the
      end of option processing.
 
-     For example, this prints the value of the '-r' expression:
+     For example, this prints the value of the '-p' expression:
 
-          (gdb) print -r
+          (gdb) print -p
 
      While this repeats the last value in the value history (see below)
-     with the '-raw' option in effect:
+     with the '-pretty' option in effect:
 
-          (gdb) print -r --
+          (gdb) print -p --
 
      Here is an example including both on option and an expression:
 
@@ -1283,12 +1984,16 @@ Pretty Printing::).
      you to conveniently inspect the same value in an alternative
      format.
 
+   If the architecture supports memory tagging, the 'print' command will
+display pointer/memory tag mismatches if what is being printed is a
+pointer or reference type.  *Note Memory Tagging::.
+
    A more low-level way of examining data is with the 'x' command.  It
 examines data in memory at a specified address and prints it in a
 specified format.  *Note Examining Memory: Memory.
 
    If you are interested in information about types, or about how the
-fields of a struct or a class are declared, use the 'ptype EXP' command
+fields of a struct or a class are declared, use the 'ptype EXPR' command
 rather than 'print'.  *Note Examining the Symbol Table: Symbols.
 
    Another way of examining values of expressions and type information
@@ -1418,6 +2123,7 @@ argument is being invoked.
 * Arrays::                      Artificial arrays
 * Output Formats::              Output formats
 * Memory::                      Examining memory
+* Memory Tagging::              Memory Tagging
 * Auto Display::                Automatic display
 * Print Settings::              Print settings
 * Pretty Printing::             Python pretty printing
@@ -1822,20 +2528,21 @@ command with a slash and a format letter
 are:
 
 'x'
-     Regard the bits of the value as an integer, and print the integer
-     in hexadecimal.
+     Print the binary representation of the value in hexadecimal.
 
 'd'
-     Print as integer in signed decimal.
+     Print the binary representation of the value in decimal.
 
 'u'
-     Print as integer in unsigned decimal.
+     Print the binary representation of the value as an decimal, as if
+     it were unsigned.
 
 'o'
-     Print as integer in octal.
+     Print the binary representation of the value in octal.
 
 't'
-     Print as integer in binary.  The letter 't' stands for "two".  (1)
+     Print the binary representation of the value in binary.  The letter
+     't' stands for "two".  (1)
 
 'a'
      Print as an address, both absolute in hexadecimal and as an offset
@@ -1849,10 +2556,11 @@ are:
      info symbol: Symbols.
 
 'c'
-     Regard as an integer and print it as a character constant.  This
-     prints both the numerical value and its character representation.
-     The character representation is replaced with the octal escape
-     '\nnn' for characters outside the 7-bit ASCII range.
+     Cast the value to an integer (unlike other formats, this does not
+     just reinterpret the underlying bits) and print it as a character
+     constant.  This prints both the numerical value and its character
+     representation.  The character representation is replaced with the
+     octal escape '\nnn' for characters outside the 7-bit ASCII range.
 
      Without this format, GDB displays 'char', 'unsigned char', and
      'signed char' data as character constants.  Single-byte members of
@@ -1903,7 +2611,7 @@ with the 'x' command, where 'b' stands f
 Memory: Memory.
 
 
-File: gdb.info,  Node: Memory,  Next: Auto Display,  Prev: Output Formats,  Up: Data
+File: gdb.info,  Node: Memory,  Next: Memory Tagging,  Prev: Output Formats,  Up: Data
 
 10.6 Examining Memory
 =====================
@@ -1930,9 +2638,10 @@ N, the repeat count
 
 F, the display format
      The display format is one of the formats used by 'print' ('x', 'd',
-     'u', 'o', 't', 'a', 'c', 'f', 's'), and in addition 'i' (for
-     machine instructions).  The default is 'x' (hexadecimal) initially.
-     The default changes each time you use either 'x' or 'print'.
+     'u', 'o', 't', 'a', 'c', 'f', 's'), 'i' (for machine instructions)
+     and 'm' (for displaying memory tags).  The default is 'x'
+     (hexadecimal) initially.  The default changes each time you use
+     either 'x' or 'print'.
 
 U, the unit size
      The unit size is any of
@@ -1977,7 +2686,7 @@ hexadecimal ('x').
 
    You can also specify a negative repeat count to examine memory
 backward from the given address.  For example, 'x/-3uh 0x54320' prints
-three halfwords ('h') at '0x54314', '0x54328', and '0x5431c'.
+three halfwords ('h') at '0x5431a', '0x5431c', and '0x5431e'.
 
    Since the letters indicating unit sizes are all distinct from the
 letters specifying output formats, you do not have to remember whether
@@ -2021,6 +2730,22 @@ program counter is shown with a '=>' mar
      => 0x8048385 <main+17>: movl   $0x8048460,(%esp)
         0x804838c <main+24>: call   0x80482d4 <puts@plt>
 
+   If the architecture supports memory tagging, the tags can be
+displayed by using 'm'.  *Note Memory Tagging::.
+
+   The information will be displayed once per granule size (the amount
+of bytes a particular memory tag covers).  For example, AArch64 has a
+granule size of 16 bytes, so it will display a tag every 16 bytes.
+
+   Due to the way GDB prints information with the 'x' command (not
+aligned to a particular boundary), the tag information will refer to the
+initial address displayed on a particular line.  If a memory tag
+boundary is crossed in the middle of a line displayed by the 'x'
+command, it will be displayed on the next line.
+
+   The 'm' format doesn't affect any other specified formats that were
+passed to the 'x' command.
+
    The addresses and contents printed by the 'x' command are not saved
 in the value history because there is often too much of them and they
 would get in the way.  Instead, GDB makes these values available for
@@ -2063,9 +2788,67 @@ whether the program has corrupted its ow
      (*note qCRC packet::).
 
 
-File: gdb.info,  Node: Auto Display,  Next: Print Settings,  Prev: Memory,  Up: Data
+File: gdb.info,  Node: Memory Tagging,  Next: Auto Display,  Prev: Memory,  Up: Data
+
+10.7 Memory Tagging
+===================
 
-10.7 Automatic Display
+Memory tagging is a memory protection technology that uses a pair of
+tags to validate memory accesses through pointers.  The tags are integer
+values usually comprised of a few bits, depending on the architecture.
+
+   There are two types of tags that are used in this setup: logical and
+allocation.  A logical tag is stored in the pointers themselves, usually
+at the higher bits of the pointers.  An allocation tag is the tag
+associated with particular ranges of memory in the physical address
+space, against which the logical tags from pointers are compared.
+
+   The pointer tag (logical tag) must match the memory tag (allocation
+tag) for the memory access to be valid.  If the logical tag does not
+match the allocation tag, that will raise a memory violation.
+
+   Allocation tags cover multiple contiguous bytes of physical memory.
+This range of bytes is called a memory tag granule and is
+architecture-specific.  For example, AArch64 has a tag granule of 16
+bytes, meaning each allocation tag spans 16 bytes of memory.
+
+   If the underlying architecture supports memory tagging, like AArch64
+MTE or SPARC ADI do, GDB can make use of it to validate pointers against
+memory allocation tags.
+
+   The 'print' (*note Data::) and 'x' (*note Memory::) commands will
+display tag information when appropriate, and a command prefix of
+'memory-tag' gives access to the various memory tagging commands.
+
+   The 'memory-tag' commands are the following:
+
+'memory-tag print-logical-tag POINTER_EXPRESSION'
+     Print the logical tag stored in POINTER_EXPRESSION.
+'memory-tag with-logical-tag POINTER_EXPRESSION TAG_BYTES'
+     Print the pointer given by POINTER_EXPRESSION, augmented with a
+     logical tag of TAG_BYTES.
+'memory-tag print-allocation-tag ADDRESS_EXPRESSION'
+     Print the allocation tag associated with the memory address given
+     by ADDRESS_EXPRESSION.
+'memory-tag setatag STARTING_ADDRESS LENGTH TAG_BYTES'
+     Set the allocation tag(s) for memory range [STARTING_ADDRESS,
+     STARTING_ADDRESS + LENGTH) to TAG_BYTES.
+'memory-tag check POINTER_EXPRESSION'
+     Check if the logical tag in the pointer given by POINTER_EXPRESSION
+     matches the allocation tag for the memory referenced by the
+     pointer.
+
+     This essentially emulates the hardware validation that is done when
+     tagged memory is accessed through a pointer, but does not cause a
+     memory fault as it would during hardware validation.
+
+     It can be used to inspect potential memory tagging violations in
+     the running process, before any faults get triggered.
+
+
+File: gdb.info,  Node: Auto Display,  Next: Print Settings,  Prev: Memory Tagging,  Up: Data
+
+10.8 Automatic Display
 ======================
 
 If you find that you want to print the value of an expression frequently
@@ -2162,7 +2945,7 @@ display expression once again.
 
 File: gdb.info,  Node: Print Settings,  Next: Pretty Printing,  Prev: Auto Display,  Up: Data
 
-10.8 Print Settings
+10.9 Print Settings
 ===================
 
 GDB provides the following ways to control how arrays, structures, and
@@ -2298,19 +3081,65 @@ print symbol on':
      Show whether the index of each element is printed when displaying
      arrays.
 
+'set print nibbles'
+'set print nibbles on'
+     Print binary values in groups of four bits, known as "nibbles",
+     when using the print command of GDB with the option '/t'.  For
+     example, this is what it looks like with 'set print nibbles on':
+
+          (gdb) print val_flags
+          $1 = 1230
+          (gdb) print/t val_flags
+          $2 = 0100 1100 1110
+
+'set print nibbles off'
+     Don't printing binary values in groups.  This is the default.
+
+'show print nibbles'
+     Show whether to print binary values in groups of four bits.
+
+'set print characters NUMBER-OF-CHARACTERS'
+'set print characters elements'
+'set print characters unlimited'
+     Set a limit on how many characters of a string GDB will print.  If
+     GDB is printing a large string, it stops printing after it has
+     printed the number of characters set by the 'set print characters'
+     command.  This equally applies to multi-byte and wide character
+     strings, that is for strings whose character type is 'wchar_t',
+     'char16_t', or 'char32_t' it is the number of actual characters
+     rather than underlying bytes the encoding uses that this setting
+     controls.  Setting NUMBER-OF-CHARACTERS to 'elements' means that
+     the limit on the number of characters to print follows one for
+     array elements; see *note set print elements::.  Setting
+     NUMBER-OF-CHARACTERS to 'unlimited' means that the number of
+     characters to print is unlimited.  When GDB starts, this limit is
+     set to 'elements'.
+
+'show print characters'
+     Display the number of characters of a large string that GDB will
+     print.
+
 'set print elements NUMBER-OF-ELEMENTS'
 'set print elements unlimited'
      Set a limit on how many elements of an array GDB will print.  If
      GDB is printing a large array, it stops printing after it has
      printed the number of elements set by the 'set print elements'
-     command.  This limit also applies to the display of strings.  When
-     GDB starts, this limit is set to 200.  Setting NUMBER-OF-ELEMENTS
-     to 'unlimited' or zero means that the number of elements to print
-     is unlimited.
+     command.  By default this limit also applies to the display of
+     strings; see *note set print characters::.  When GDB starts, this
+     limit is set to 200.  Setting NUMBER-OF-ELEMENTS to 'unlimited' or
+     zero means that the number of elements to print is unlimited.
+
+     When printing very large arrays, whose size is greater than
+     'max-value-size' (*note max-value-size: set max-value-size.), if
+     the 'print elements' is set such that the size of the elements
+     being printed is less than or equal to 'max-value-size', then GDB
+     will print the array (up to the 'print elements' limit), and only
+     'max-value-size' worth of data will be added into the value history
+     (*note Value History: Value History.).
 
 'show print elements'
      Display the number of elements of a large array that GDB will
-     print.  If the number is 0, then the printing is unlimited.
+     print.
 
 'set print frame-arguments VALUE'
      This command allows to control how the values of arguments are
@@ -2566,6 +3395,18 @@ print symbol on':
      Display the current threshold after which nested structures are
      replaces with ellipsis.
 
+'set print memory-tag-violations'
+'set print memory-tag-violations on'
+     Cause GDB to display additional information about memory tag
+     violations when printing pointers and addresses.
+
+'set print memory-tag-violations off'
+     Stop printing memory tag violation information.
+
+'show print memory-tag-violations'
+     Show whether memory tag violation information is displayed when
+     printing pointers and addresses.
+
 'set print null-stop'
      Cause GDB to stop printing the characters of an array when the
      first NULL is encountered.  This is useful when large arrays
@@ -2599,6 +3440,20 @@ print symbol on':
 'show print pretty'
      Show which format GDB is using to print structures.
 
+'set print raw-values on'
+     Print values in raw form, without applying the pretty printers for
+     the value.
+
+'set print raw-values off'
+     Print values in pretty-printed form, if there is a pretty-printer
+     for the value (*note Pretty Printing::), otherwise print the value
+     in raw form.
+
+     The default setting is "off".
+
+'show print raw-values'
+     Show whether to print values in raw form.
+
 'set print sevenbit-strings on'
      Print using only seven-bit characters; if this option is set, GDB
      displays any eight-bit characters (in strings or character values)
@@ -2740,8 +3595,8 @@ These settings are of interest when debu
 
 File: gdb.info,  Node: Pretty Printing,  Next: Value History,  Prev: Print Settings,  Up: Data
 
-10.9 Pretty Printing
-====================
+10.10 Pretty Printing
+=====================
 
 GDB provides a mechanism to allow pretty-printing of values using Python
 code.  It greatly simplifies the display of complex objects.  This
@@ -2756,8 +3611,8 @@ mechanism works for both MI and the CLI.
 
 File: gdb.info,  Node: Pretty-Printer Introduction,  Next: Pretty-Printer Example,  Up: Pretty Printing
 
-10.9.1 Pretty-Printer Introduction
-----------------------------------
+10.10.1 Pretty-Printer Introduction
+-----------------------------------
 
 When GDB prints a value, it first sees if there is a pretty-printer
 registered for the value.  If there is then GDB invokes the
@@ -2798,8 +3653,8 @@ for new types.
 
 File: gdb.info,  Node: Pretty-Printer Example,  Next: Pretty-Printer Commands,  Prev: Pretty-Printer Introduction,  Up: Pretty Printing
 
-10.9.2 Pretty-Printer Example
------------------------------
+10.10.2 Pretty-Printer Example
+------------------------------
 
 Here is how a C++ 'std::string' looks without a pretty-printer:
 
@@ -2826,8 +3681,8 @@ printed:
 
 File: gdb.info,  Node: Pretty-Printer Commands,  Prev: Pretty-Printer Example,  Up: Pretty Printing
 
-10.9.3 Pretty-Printer Commands
-------------------------------
+10.10.3 Pretty-Printer Commands
+-------------------------------
 
 'info pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]'
      Print the list of installed pretty-printers.  This includes
@@ -2884,8 +3739,6 @@ library2.so named 'bar' that prints two
      1 printer disabled
      1 of 3 printers enabled
      (gdb) info pretty-printer library2
-     library1.so:
-       foo [disabled]
      library2.so:
        bar
          bar1 [disabled]
@@ -2893,7 +3746,7 @@ library2.so named 'bar' that prints two
      (gdb) disable pretty-printer library2 bar
      1 printer disabled
      0 of 3 printers enabled
-     (gdb) info pretty-printer library2
+     (gdb) info pretty-printer
      library1.so:
        foo [disabled]
      library2.so:
@@ -2904,10 +3757,22 @@ library2.so named 'bar' that prints two
    Note that for 'bar' the entire printer can be disabled, as can each
 individual subprinter.
 
+   Printing values and frame arguments is done by default using the
+enabled pretty printers.
+
+   The print option '-raw-values' and GDB setting 'set print raw-values'
+(*note set print raw-values::) can be used to print values without
+applying the enabled pretty printers.
+
+   Similarly, the backtrace option '-raw-frame-arguments' and GDB
+setting 'set print raw-frame-arguments' (*note set print
+raw-frame-arguments::) can be used to ignore the enabled pretty printers
+when printing frame argument values.
+
 
 File: gdb.info,  Node: Value History,  Next: Convenience Vars,  Prev: Pretty Printing,  Up: Data
 
-10.10 Value History
+10.11 Value History
 ===================
 
 Values printed by the 'print' command are saved in the GDB "value
@@ -2969,7 +3834,7 @@ as 'show values +'.
 
 File: gdb.info,  Node: Convenience Vars,  Next: Convenience Funs,  Prev: Value History,  Up: Data
 
-10.11 Convenience Variables
+10.12 Convenience Variables
 ===========================
 
 GDB provides "convenience variables" that you can use within GDB to hold
@@ -3133,7 +3998,8 @@ values likely to be useful.
 
 '$_inferior'
      The number of the current inferior.  *Note Debugging Multiple
-     Inferiors and Programs: Inferiors and Programs.
+     Inferiors Connections and Programs: Inferiors Connections and
+     Programs.
 
 '$_thread'
      The thread number of the current thread.  *Note thread numbers::.
@@ -3142,6 +4008,10 @@ values likely to be useful.
      The global number of the current thread.  *Note global thread
      numbers::.
 
+'$_inferior_thread_count'
+     The number of live threads in the current inferior.  *Note
+     Threads::.
+
 '$_gdb_major'
 '$_gdb_minor'
      The major and minor version numbers of the running GDB.
@@ -3163,7 +4033,7 @@ values likely to be useful.
 
 File: gdb.info,  Node: Convenience Funs,  Next: Registers,  Prev: Convenience Vars,  Up: Data
 
-10.12 Convenience Functions
+10.13 Convenience Functions
 ===========================
 
 GDB also supplies some "convenience functions".  These have a syntax
@@ -3292,6 +4162,54 @@ support, which means that they are alway
      Like the '$_gdb_setting' function, but works with 'maintenance set'
      variables.
 
+'$_shell (COMMAND-STRING)'
+
+     Invoke a shell to execute COMMAND-STRING.  COMMAND-STRING must be a
+     string.  The shell runs on the host machine, the machine GDB is
+     running on.  Returns the command's exit status.  On Unix systems, a
+     command which exits with a zero exit status has succeeded, and
+     non-zero exit status indicates failure.  When a command terminates
+     on a fatal signal whose number is N, GDB uses the value 128+N as
+     the exit status, as is standard in Unix shells.  Note that N is a
+     host signal number, not a target signal number.  If you're native
+     debugging, they will be the same, but if cross debugging, the host
+     vs target signal numbers may be completely unrelated.  Please
+     consult your host operating system's documentation for the mapping
+     between host signal numbers and signal names.  The shell to run is
+     determined in the same way as for the 'shell' command.  *Note Shell
+     Commands: Shell Commands.
+
+          (gdb) print $_shell("true")
+          $1 = 0
+          (gdb) print $_shell("false")
+          $2 = 1
+          (gdb) p $_shell("echo hello")
+          hello
+          $3 = 0
+          (gdb) p $_shell("foobar")
+          bash: line 1: foobar: command not found
+          $4 = 127
+
+     This may also be useful in breakpoint conditions.  For example:
+
+          (gdb) break function if $_shell("some command") == 0
+
+     In this scenario, you'll want to make sure that the shell command
+     you run in the breakpoint condition takes the least amount of time
+     possible.  For example, avoid running a command that may block
+     indefinitely, or that sleeps for a while before exiting.  Prefer a
+     command or script which analyzes some state and exits immediately.
+     This is important because the debugged program stops for the
+     breakpoint every time, and then GDB evaluates the breakpoint
+     condition.  If the condition is false, the program is re-resumed
+     transparently, without informing you of the stop.  A quick shell
+     command thus avoids significantly slowing down the debugged program
+     unnecessarily.
+
+     Note: unlike the 'shell' command, the '$_shell' convenience
+     function does not affect the '$_shell_exitcode' and
+     '$_shell_exitsignal' convenience variables.
+
    The following functions require GDB to be configured with 'Python'
 support.
 
@@ -3366,6 +4284,10 @@ support.
      checks the frame specified by NUMBER_OF_FRAMES.
 
 '$_as_string(VALUE)'
+     This convenience function is considered deprecated, and could be
+     removed from future versions of GDB.  Use the '%V' format specifier
+     instead (*note %V Format Specifier::).
+
      Return the string representation of VALUE.
 
      This function is useful to obtain the textual label (enumerator) of
@@ -3393,7 +4315,7 @@ functions.
 
 File: gdb.info,  Node: Registers,  Next: Floating Point Hardware,  Prev: Convenience Funs,  Up: Data
 
-10.13 Registers
+10.14 Registers
 ===============
 
 You can refer to machine register contents, in expressions, as variables
@@ -3531,7 +4453,7 @@ Returning from a Function: Returning.
 
 File: gdb.info,  Node: Floating Point Hardware,  Next: Vector Unit,  Prev: Registers,  Up: Data
 
-10.14 Floating Point Hardware
+10.15 Floating Point Hardware
 =============================
 
 Depending on the configuration, GDB may be able to give you more
@@ -3546,7 +4468,7 @@ information about the status of the floa
 
 File: gdb.info,  Node: Vector Unit,  Next: OS Information,  Prev: Floating Point Hardware,  Up: Data
 
-10.15 Vector Unit
+10.16 Vector Unit
 =================
 
 Depending on the configuration, GDB may be able to give you more
@@ -3559,7 +4481,7 @@ information about the status of the vect
 
 File: gdb.info,  Node: OS Information,  Next: Memory Region Attributes,  Prev: Vector Unit,  Up: Data
 
-10.16 Operating System Auxiliary Information
+10.17 Operating System Auxiliary Information
 ============================================
 
 GDB provides interfaces to useful OS facilities that can help you debug
@@ -3691,7 +4613,7 @@ osdata read::.
 
 File: gdb.info,  Node: Memory Region Attributes,  Next: Dump/Restore Files,  Prev: OS Information,  Up: Data
 
-10.17 Memory Region Attributes
+10.18 Memory Region Attributes
 ==============================
 
 "Memory region attributes" allow you to describe special handling
@@ -3753,10 +4675,10 @@ to enable, disable, or remove a memory r
      _Attributes_
           The list of attributes set for this memory region.
 
-10.17.1 Attributes
+10.18.1 Attributes
 ------------------
 
-10.17.1.1 Memory Access Mode
+10.18.1.1 Memory Access Mode
 ............................
 
 The access mode attributes set whether GDB may make read or write
@@ -3773,7 +4695,7 @@ from accessing memory.
 'rw'
      Memory is read/write.  This is the default.
 
-10.17.1.2 Memory Access Size
+10.18.1.2 Memory Access Size
 ............................
 
 The access size attribute tells GDB to use specific sized accesses in
@@ -3790,7 +4712,7 @@ may use accesses of any size.
 '64'
      Use 64 bit memory accesses.
 
-10.17.1.3 Data Cache
+10.18.1.3 Data Cache
 ....................
 
 The data cache attributes set whether GDB will cache target memory.
@@ -3803,7 +4725,7 @@ about volatile variables or memory mappe
 'nocache'
      Disable GDB from caching target memory.  This is the default.
 
-10.17.2 Memory Access Checking
+10.18.2 Memory Access Checking
 ------------------------------
 
 GDB can be instructed to refuse accesses to memory that is not
@@ -3824,7 +4746,7 @@ checking.  The following commands contro
 
 File: gdb.info,  Node: Dump/Restore Files,  Next: Core File Generation,  Prev: Memory Region Attributes,  Up: Data
 
-10.18 Copy Between Memory and a File
+10.19 Copy Between Memory and a File
 ====================================
 
 You can use the commands 'dump', 'append', and 'restore' to copy data
@@ -3881,7 +4803,7 @@ can only append to binary files, and can
 
 File: gdb.info,  Node: Core File Generation,  Next: Character Sets,  Prev: Dump/Restore Files,  Up: Data
 
-10.19 How to Produce a Core File from Your Program
+10.20 How to Produce a Core File from Your Program
 ==================================================
 
 A "core file" or "core dump" is a file that records the memory image of
@@ -3949,7 +4871,7 @@ special command for that.
 
 File: gdb.info,  Node: Character Sets,  Next: Caching Target Data,  Prev: Core File Generation,  Up: Data
 
-10.20 Character Sets
+10.21 Character Sets
 ====================
 
 If the program you are debugging uses a different character set to
@@ -4132,13 +5054,13 @@ character.
 
 File: gdb.info,  Node: Caching Target Data,  Next: Searching Memory,  Prev: Character Sets,  Up: Data
 
-10.21 Caching Data of Targets
+10.22 Caching Data of Targets
 =============================
 
 GDB caches data exchanged between the debugger and a target.  Each cache
 is associated with the address space of the inferior.  *Note Inferiors
-and Programs::, about inferior and address space.  Such caching
-generally improves performance in remote debugging (*note Remote
+Connections and Programs::, about inferior and address space.  Such
+caching generally improves performance in remote debugging (*note Remote
 Debugging::), because it reduces the overhead of the remote protocol by
 bundling memory reads and writes into large chunks.  Unfortunately,
 simply caching everything would lead to incorrect results, since GDB
@@ -4199,6 +5121,10 @@ marked as cacheable; *note Memory Region
 'show dcache line-size'
      Show default size of dcache lines.
 
+'maint flush dcache'
+     Flush the contents (if any) of the dcache.  This maintainer command
+     is useful when debugging the dcache implementation.
+
    ---------- Footnotes ----------
 
    (1) In non-stop mode, it is moderately rare for a running thread to
@@ -4209,7 +5135,7 @@ of remote backtraces.
 
 File: gdb.info,  Node: Searching Memory,  Next: Value Sizes,  Prev: Caching Target Data,  Up: Data
 
-10.22 Search Memory
+10.23 Search Memory
 ===================
 
 Memory can be searched for a particular sequence of bytes with the
@@ -4302,7 +5228,7 @@ you get during debugging:
 
 File: gdb.info,  Node: Value Sizes,  Prev: Searching Memory,  Up: Data
 
-10.23 Value Sizes
+10.24 Value Sizes
 =================
 
 Whenever GDB prints a value memory will be allocated within GDB to hold
@@ -4619,10 +5545,11 @@ commands for working with macros explici
      signify the end of argument processing and the beginning of MACRO
      for non C-like macros where the macro may begin with a hyphen.
 
-'info macros LOCATION'
-     Show all macro definitions that are in effect at the location
-     specified by LOCATION, and describe the source location or compiler
-     command-line where those definitions were established.
+'info macros LOCSPEC'
+     Show all macro definitions that are in effect at the source line of
+     the code location that results from resolving LOCSPEC, and describe
+     the source location or compiler command-line where those
+     definitions were established.
 
 'macro define MACRO REPLACEMENT-LIST'
 'macro define MACRO(ARGLIST) REPLACEMENT-LIST'
@@ -4894,27 +5821,27 @@ File: gdb.info,  Node: Create and Delete
 13.1.1 Create and Delete Tracepoints
 ------------------------------------
 
-'trace LOCATION'
+'trace LOCSPEC'
      The 'trace' command is very similar to the 'break' command.  Its
-     argument LOCATION can be any valid location.  *Note Specify
-     Location::.  The 'trace' command defines a tracepoint, which is a
-     point in the target program where the debugger will briefly stop,
-     collect some data, and then allow the program to continue.  Setting
-     a tracepoint or changing its actions takes effect immediately if
-     the remote stub supports the 'InstallInTrace' feature (*note
-     install tracepoint in tracing::).  If remote stub doesn't support
-     the 'InstallInTrace' feature, all these changes don't take effect
-     until the next 'tstart' command, and once a trace experiment is
-     running, further changes will not have any effect until the next
-     trace experiment starts.  In addition, GDB supports "pending
-     tracepoints"--tracepoints whose address is not yet resolved.  (This
-     is similar to pending breakpoints.)  Pending tracepoints are not
-     downloaded to the target and not installed until they are resolved.
-     The resolution of pending tracepoints requires GDB support--when
-     debugging with the remote target, and GDB disconnects from the
-     remote stub (*note disconnected tracing::), pending tracepoints can
-     not be resolved (and downloaded to the remote stub) while GDB is
-     disconnected.
+     argument LOCSPEC can be any valid location specification.  *Note
+     Location Specifications::.  The 'trace' command defines a
+     tracepoint, which is a point in the target program where the
+     debugger will briefly stop, collect some data, and then allow the
+     program to continue.  Setting a tracepoint or changing its actions
+     takes effect immediately if the remote stub supports the
+     'InstallInTrace' feature (*note install tracepoint in tracing::).
+     If remote stub doesn't support the 'InstallInTrace' feature, all
+     these changes don't take effect until the next 'tstart' command,
+     and once a trace experiment is running, further changes will not
+     have any effect until the next trace experiment starts.  In
+     addition, GDB supports "pending tracepoints"--tracepoints whose
+     address is not yet resolved.  (This is similar to pending
+     breakpoints.)  Pending tracepoints are not downloaded to the target
+     and not installed until they are resolved.  The resolution of
+     pending tracepoints requires GDB support--when debugging with the
+     remote target, and GDB disconnects from the remote stub (*note
+     disconnected tracing::), pending tracepoints can not be resolved
+     (and downloaded to the remote stub) while GDB is disconnected.
 
      Here are some examples of using the 'trace' command:
 
@@ -4930,14 +5857,14 @@ File: gdb.info,  Node: Create and Delete
 
      You can abbreviate 'trace' as 'tr'.
 
-'trace LOCATION if COND'
+'trace LOCSPEC if COND'
      Set a tracepoint with condition COND; evaluate the expression COND
      each time the tracepoint is reached, and collect data only if the
      value is nonzero--that is, if COND evaluates as true.  *Note
      Tracepoint Conditions: Tracepoint Conditions, for more information
      on tracepoint conditions.
 
-'ftrace LOCATION [ if COND ]'
+'ftrace LOCSPEC [ if COND ]'
      The 'ftrace' command sets a fast tracepoint.  For targets that
      support them, fast tracepoints will use a more efficient but
      possibly less general technique to trigger data collection, such as
@@ -4962,22 +5889,24 @@ File: gdb.info,  Node: Create and Delete
      which sets the low address to 32K, which leaves plenty of room for
      trampolines.  The minimum address should be set to a page boundary.
 
-'strace LOCATION [ if COND ]'
+'strace [LOCSPEC | -m MARKER] [ if COND ]'
      The 'strace' command sets a static tracepoint.  For targets that
      support it, setting a static tracepoint probes a static
-     instrumentation point, or marker, found at LOCATION.  It may not be
-     possible to set a static tracepoint at the desired location, in
-     which case the command will exit with an explanatory message.
+     instrumentation point, or marker, found at the code locations that
+     result from resolving LOCSPEC.  It may not be possible to set a
+     static tracepoint at the desired code location, in which case the
+     command will exit with an explanatory message.
 
      GDB handles arguments to 'strace' exactly as for 'trace', with the
-     addition that the user can also specify '-m MARKER' as LOCATION.
-     This probes the marker identified by the MARKER string identifier.
-     This identifier depends on the static tracepoint backend library
-     your program is using.  You can find all the marker identifiers in
-     the 'ID' field of the 'info static-tracepoint-markers' command
-     output.  *Note Listing Static Tracepoint Markers: Listing Static
-     Tracepoint Markers.  For example, in the following small program
-     using the UST tracing engine:
+     addition that the user can also specify '-m MARKER' instead of a
+     location spec.  This probes the marker identified by the MARKER
+     string identifier.  This identifier depends on the static
+     tracepoint backend library your program is using.  You can find all
+     the marker identifiers in the 'ID' field of the 'info
+     static-tracepoint-markers' command output.  *Note Listing Static
+     Tracepoint Markers: Listing Static Tracepoint Markers.  For
+     example, in the following small program using the UST tracing
+     engine:
 
           main ()
           {
@@ -5274,7 +6203,7 @@ File: gdb.info,  Node: Tracepoint Action
      requests that pointers to chars be handled as strings, in
      particular collecting the contents of the memory being pointed at,
      up to the first zero.  The upper bound is by default the value of
-     the 'print elements' variable; if 's' is followed by a decimal
+     the 'print characters' variable; if 's' is followed by a decimal
      number, that is the upper bound instead.  So for instance
      'collect/s25 mystr' collects as many as 25 characters at 'mystr'.
 
@@ -6280,1162 +7209,3 @@ language you use to build expressions is
 * Supported Languages::         Supported languages
 * Unsupported Languages::       Unsupported languages
 
-
-File: gdb.info,  Node: Setting,  Next: Show,  Up: Languages
-
-15.1 Switching Between Source Languages
-=======================================
-
-There are two ways to control the working language--either have GDB set
-it automatically, or select it manually yourself.  You can use the 'set
-language' command for either purpose.  On startup, GDB defaults to
-setting the language automatically.  The working language is used to
-determine how expressions you type are interpreted, how values are
-printed, etc.
-
-   In addition to the working language, every source file that GDB knows
-about has its own working language.  For some object file formats, the
-compiler might indicate which language a particular source file is in.
-However, most of the time GDB infers the language from the name of the
-file.  The language of a source file controls whether C++ names are
-demangled--this way 'backtrace' can show each frame appropriately for
-its own language.  There is no way to set the language of a source file
-from within GDB, but you can set the language associated with a filename
-extension.  *Note Displaying the Language: Show.
-
-   This is most commonly a problem when you use a program, such as
-'cfront' or 'f2c', that generates C but is written in another language.
-In that case, make the program use '#line' directives in its C output;
-that way GDB will know the correct language of the source code of the
-original program, and will display that source code, not the generated C
-code.
-
-* Menu:
-
-* Filenames::                   Filename extensions and languages.
-* Manually::                    Setting the working language manually
-* Automatically::               Having GDB infer the source language
-
-
-File: gdb.info,  Node: Filenames,  Next: Manually,  Up: Setting
-
-15.1.1 List of Filename Extensions and Languages
-------------------------------------------------
-
-If a source file name ends in one of the following extensions, then GDB
-infers that its language is the one indicated.
-
-'.ada'
-'.ads'
-'.adb'
-'.a'
-     Ada source file.
-
-'.c'
-     C source file
-
-'.C'
-'.cc'
-'.cp'
-'.cpp'
-'.cxx'
-'.c++'
-     C++ source file
-
-'.d'
-     D source file
-
-'.m'
-     Objective-C source file
-
-'.f'
-'.F'
-     Fortran source file
-
-'.mod'
-     Modula-2 source file
-
-'.s'
-'.S'
-     Assembler source file.  This actually behaves almost like C, but
-     GDB does not skip over function prologues when stepping.
-
-   In addition, you may set the language associated with a filename
-extension.  *Note Displaying the Language: Show.
-
-
-File: gdb.info,  Node: Manually,  Next: Automatically,  Prev: Filenames,  Up: Setting
-
-15.1.2 Setting the Working Language
------------------------------------
-
-If you allow GDB to set the language automatically, expressions are
-interpreted the same way in your debugging session and your program.
-
-   If you wish, you may set the language manually.  To do this, issue
-the command 'set language LANG', where LANG is the name of a language,
-such as 'c' or 'modula-2'.  For a list of the supported languages, type
-'set language'.
-
-   Setting the language manually prevents GDB from updating the working
-language automatically.  This can lead to confusion if you try to debug
-a program when the working language is not the same as the source
-language, when an expression is acceptable to both languages--but means
-different things.  For instance, if the current source file were written
-in C, and GDB was parsing Modula-2, a command such as:
-
-     print a = b + c
-
-might not have the effect you intended.  In C, this means to add 'b' and
-'c' and place the result in 'a'.  The result printed would be the value
-of 'a'.  In Modula-2, this means to compare 'a' to the result of 'b+c',
-yielding a 'BOOLEAN' value.
-
-
-File: gdb.info,  Node: Automatically,  Prev: Manually,  Up: Setting
-
-15.1.3 Having GDB Infer the Source Language
--------------------------------------------
-
-To have GDB set the working language automatically, use 'set language
-local' or 'set language auto'.  GDB then infers the working language.
-That is, when your program stops in a frame (usually by encountering a
-breakpoint), GDB sets the working language to the language recorded for
-the function in that frame.  If the language for a frame is unknown
-(that is, if the function or block corresponding to the frame was
-defined in a source file that does not have a recognized extension), the
-current working language is not changed, and GDB issues a warning.
-
-   This may not seem necessary for most programs, which are written
-entirely in one source language.  However, program modules and libraries
-written in one source language can be used by a main program written in
-a different source language.  Using 'set language auto' in this case
-frees you from having to set the working language manually.
-
-
-File: gdb.info,  Node: Show,  Next: Checks,  Prev: Setting,  Up: Languages
-
-15.2 Displaying the Language
-============================
-
-The following commands help you find out which language is the working
-language, and also what language source files were written in.
-
-'show language'
-     Display the current working language.  This is the language you can
-     use with commands such as 'print' to build and compute expressions
-     that may involve variables in your program.
-
-'info frame'
-     Display the source language for this frame.  This language becomes
-     the working language if you use an identifier from this frame.
-     *Note Information about a Frame: Frame Info, to identify the other
-     information listed here.
-
-'info source'
-     Display the source language of this source file.  *Note Examining
-     the Symbol Table: Symbols, to identify the other information listed
-     here.
-
-   In unusual circumstances, you may have source files with extensions
-not in the standard list.  You can then set the extension associated
-with a language explicitly:
-
-'set extension-language EXT LANGUAGE'
-     Tell GDB that source files with extension EXT are to be assumed as
-     written in the source language LANGUAGE.
-
-'info extensions'
-     List all the filename extensions and the associated languages.
-
-
-File: gdb.info,  Node: Checks,  Next: Supported Languages,  Prev: Show,  Up: Languages
-
-15.3 Type and Range Checking
-============================
-
-Some languages are designed to guard you against making seemingly common
-errors through a series of compile- and run-time checks.  These include
-checking the type of arguments to functions and operators and making
-sure mathematical overflows are caught at run time.  Checks such as
-these help to ensure a program's correctness once it has been compiled
-by eliminating type mismatches and providing active checks for range
-errors when your program is running.
-
-   By default GDB checks for these errors according to the rules of the
-current source language.  Although GDB does not check the statements in
-your program, it can check expressions entered directly into GDB for
-evaluation via the 'print' command, for example.
-
-* Menu:
-
-* Type Checking::               An overview of type checking
-* Range Checking::              An overview of range checking
-
-
-File: gdb.info,  Node: Type Checking,  Next: Range Checking,  Up: Checks
-
-15.3.1 An Overview of Type Checking
------------------------------------
-
-Some languages, such as C and C++, are strongly typed, meaning that the
-arguments to operators and functions have to be of the correct type,
-otherwise an error occurs.  These checks prevent type mismatch errors
-from ever causing any run-time problems.  For example,
-
-     int klass::my_method(char *b) { return  b ? 1 : 2; }
-
-     (gdb) print obj.my_method (0)
-     $1 = 2
-but
-     (gdb) print obj.my_method (0x1234)
-     Cannot resolve method klass::my_method to any overloaded instance
-
-   The second example fails because in C++ the integer constant '0x1234'
-is not type-compatible with the pointer parameter type.
-
-   For the expressions you use in GDB commands, you can tell GDB to not
-enforce strict type checking or to treat any mismatches as errors and
-abandon the expression; When type checking is disabled, GDB successfully
-evaluates expressions like the second example above.
-
-   Even if type checking is off, there may be other reasons related to
-type that prevent GDB from evaluating an expression.  For instance, GDB
-does not know how to add an 'int' and a 'struct foo'.  These particular
-type errors have nothing to do with the language in use and usually
-arise from expressions which make little sense to evaluate anyway.
-
-   GDB provides some additional commands for controlling type checking:
-
-'set check type on'
-'set check type off'
-     Set strict type checking on or off.  If any type mismatches occur
-     in evaluating an expression while type checking is on, GDB prints a
-     message and aborts evaluation of the expression.
-
-'show check type'
-     Show the current setting of type checking and whether GDB is
-     enforcing strict type checking rules.
-
-
-File: gdb.info,  Node: Range Checking,  Prev: Type Checking,  Up: Checks
-
-15.3.2 An Overview of Range Checking
-------------------------------------
-
-In some languages (such as Modula-2), it is an error to exceed the
-bounds of a type; this is enforced with run-time checks.  Such range
-checking is meant to ensure program correctness by making sure
-computations do not overflow, or indices on an array element access do
-not exceed the bounds of the array.
-
-   For expressions you use in GDB commands, you can tell GDB to treat
-range errors in one of three ways: ignore them, always treat them as
-errors and abandon the expression, or issue warnings but evaluate the
-expression anyway.
-
-   A range error can result from numerical overflow, from exceeding an
-array index bound, or when you type a constant that is not a member of
-any type.  Some languages, however, do not treat overflows as an error.
-In many implementations of C, mathematical overflow causes the result to
-"wrap around" to lower values--for example, if M is the largest integer
-value, and S is the smallest, then
-
-     M + 1 => S
-
-   This, too, is specific to individual languages, and in some cases
-specific to individual compilers or machines.  *Note Supported
-Languages: Supported Languages, for further details on specific
-languages.
-
-   GDB provides some additional commands for controlling the range
-checker:
-
-'set check range auto'
-     Set range checking on or off based on the current working language.
-     *Note Supported Languages: Supported Languages, for the default
-     settings for each language.
-
-'set check range on'
-'set check range off'
-     Set range checking on or off, overriding the default setting for
-     the current working language.  A warning is issued if the setting
-     does not match the language default.  If a range error occurs and
-     range checking is on, then a message is printed and evaluation of
-     the expression is aborted.
-
-'set check range warn'
-     Output messages when the GDB range checker detects a range error,
-     but attempt to evaluate the expression anyway.  Evaluating the
-     expression may still be impossible for other reasons, such as
-     accessing memory that the process does not own (a typical example
-     from many Unix systems).
-
-'show range'
-     Show the current setting of the range checker, and whether or not
-     it is being set automatically by GDB.
-
-
-File: gdb.info,  Node: Supported Languages,  Next: Unsupported Languages,  Prev: Checks,  Up: Languages
-
-15.4 Supported Languages
-========================
-
-GDB supports C, C++, D, Go, Objective-C, Fortran, OpenCL C, Pascal,
-Rust, assembly, Modula-2, and Ada.  Some GDB features may be used in
-expressions regardless of the language you use: the GDB '@' and '::'
-operators, and the '{type}addr' construct (*note Expressions:
-Expressions.) can be used with the constructs of any supported language.
-
-   The following sections detail to what degree each source language is
-supported by GDB.  These sections are not meant to be language tutorials
-or references, but serve only as a reference guide to what the GDB
-expression parser accepts, and what input and output formats should look
-like for different languages.  There are many good books written on each
-of these languages; please look to these for a language reference or
-tutorial.
-
-* Menu:
-
-* C::                           C and C++
-* D::                           D
-* Go::                          Go
-* Objective-C::                 Objective-C
-* OpenCL C::                    OpenCL C
-* Fortran::                     Fortran
-* Pascal::                      Pascal
-* Rust::                        Rust
-* Modula-2::                    Modula-2
-* Ada::                         Ada
-
-
-File: gdb.info,  Node: C,  Next: D,  Up: Supported Languages
-
-15.4.1 C and C++
-----------------
-
-Since C and C++ are so closely related, many features of GDB apply to
-both languages.  Whenever this is the case, we discuss those languages
-together.
-
-   The C++ debugging facilities are jointly implemented by the C++
-compiler and GDB.  Therefore, to debug your C++ code effectively, you
-must compile your C++ programs with a supported C++ compiler, such as
-GNU 'g++', or the HP ANSI C++ compiler ('aCC').
-
-* Menu:
-
-* C Operators::                 C and C++ operators
-* C Constants::                 C and C++ constants
-* C Plus Plus Expressions::     C++ expressions
-* C Defaults::                  Default settings for C and C++
-* C Checks::                    C and C++ type and range checks
-* Debugging C::                 GDB and C
-* Debugging C Plus Plus::       GDB features for C++
-* Decimal Floating Point::      Numbers in Decimal Floating Point format
-
-
-File: gdb.info,  Node: C Operators,  Next: C Constants,  Up: C
-
-15.4.1.1 C and C++ Operators
-............................
-
-Operators must be defined on values of specific types.  For instance,
-'+' is defined on numbers, but not on structures.  Operators are often
-defined on groups of types.
-
-   For the purposes of C and C++, the following definitions hold:
-
-   * _Integral types_ include 'int' with any of its storage-class
-     specifiers; 'char'; 'enum'; and, for C++, 'bool'.
-
-   * _Floating-point types_ include 'float', 'double', and 'long double'
-     (if supported by the target platform).
-
-   * _Pointer types_ include all types defined as '(TYPE *)'.
-
-   * _Scalar types_ include all of the above.
-
-The following operators are supported.  They are listed here in order of
-increasing precedence:
-
-','
-     The comma or sequencing operator.  Expressions in a comma-separated
-     list are evaluated from left to right, with the result of the
-     entire expression being the last expression evaluated.
-
-'='
-     Assignment.  The value of an assignment expression is the value
-     assigned.  Defined on scalar types.
-
-'OP='
-     Used in an expression of the form 'A OP= B', and translated to
-     'A = A OP B'.  'OP=' and '=' have the same precedence.  The
-     operator OP is any one of the operators '|', '^', '&', '<<', '>>',
-     '+', '-', '*', '/', '%'.
-
-'?:'
-     The ternary operator.  'A ? B : C' can be thought of as: if A then
-     B else C.  The argument A should be of an integral type.
-
-'||'
-     Logical OR.  Defined on integral types.
-
-'&&'
-     Logical AND.  Defined on integral types.
-
-'|'
-     Bitwise OR.  Defined on integral types.
-
-'^'
-     Bitwise exclusive-OR.  Defined on integral types.
-
-'&'
-     Bitwise AND.  Defined on integral types.
-
-'==, !='
-     Equality and inequality.  Defined on scalar types.  The value of
-     these expressions is 0 for false and non-zero for true.
-
-'<, >, <=, >='
-     Less than, greater than, less than or equal, greater than or equal.
-     Defined on scalar types.  The value of these expressions is 0 for
-     false and non-zero for true.
-
-'<<, >>'
-     left shift, and right shift.  Defined on integral types.
-
-'@'
-     The GDB "artificial array" operator (*note Expressions:
-     Expressions.).
-
-'+, -'
-     Addition and subtraction.  Defined on integral types,
-     floating-point types and pointer types.
-
-'*, /, %'
-     Multiplication, division, and modulus.  Multiplication and division
-     are defined on integral and floating-point types.  Modulus is
-     defined on integral types.
-
-'++, --'
-     Increment and decrement.  When appearing before a variable, the
-     operation is performed before the variable is used in an
-     expression; when appearing after it, the variable's value is used
-     before the operation takes place.
-
-'*'
-     Pointer dereferencing.  Defined on pointer types.  Same precedence
-     as '++'.
-
-'&'
-     Address operator.  Defined on variables.  Same precedence as '++'.
-
-     For debugging C++, GDB implements a use of '&' beyond what is
-     allowed in the C++ language itself: you can use '&(&REF)' to
-     examine the address where a C++ reference variable (declared with
-     '&REF') is stored.
-
-'-'
-     Negative.  Defined on integral and floating-point types.  Same
-     precedence as '++'.
-
-'!'
-     Logical negation.  Defined on integral types.  Same precedence as
-     '++'.
-
-'~'
-     Bitwise complement operator.  Defined on integral types.  Same
-     precedence as '++'.
-
-'., ->'
-     Structure member, and pointer-to-structure member.  For
-     convenience, GDB regards the two as equivalent, choosing whether to
-     dereference a pointer based on the stored type information.
-     Defined on 'struct' and 'union' data.
-
-'.*, ->*'
-     Dereferences of pointers to members.
-
-'[]'
-     Array indexing.  'A[I]' is defined as '*(A+I)'.  Same precedence as
-     '->'.
-
-'()'
-     Function parameter list.  Same precedence as '->'.
-
-'::'
-     C++ scope resolution operator.  Defined on 'struct', 'union', and
-     'class' types.
-
-'::'
-     Doubled colons also represent the GDB scope operator (*note
-     Expressions: Expressions.).  Same precedence as '::', above.
-
-   If an operator is redefined in the user code, GDB usually attempts to
-invoke the redefined version instead of using the operator's predefined
-meaning.
-
-
-File: gdb.info,  Node: C Constants,  Next: C Plus Plus Expressions,  Prev: C Operators,  Up: C
-
-15.4.1.2 C and C++ Constants
-............................
-
-GDB allows you to express the constants of C and C++ in the following
-ways:
-
-   * Integer constants are a sequence of digits.  Octal constants are
-     specified by a leading '0' (i.e. zero), and hexadecimal constants
-     by a leading '0x' or '0X'.  Constants may also end with a letter
-     'l', specifying that the constant should be treated as a 'long'
-     value.
-
-   * Floating point constants are a sequence of digits, followed by a
-     decimal point, followed by a sequence of digits, and optionally
-     followed by an exponent.  An exponent is of the form:
-     'e[[+]|-]NNN', where NNN is another sequence of digits.  The '+' is
-     optional for positive exponents.  A floating-point constant may
-     also end with a letter 'f' or 'F', specifying that the constant
-     should be treated as being of the 'float' (as opposed to the
-     default 'double') type; or with a letter 'l' or 'L', which
-     specifies a 'long double' constant.
-
-   * Enumerated constants consist of enumerated identifiers, or their
-     integral equivalents.
-
-   * Character constants are a single character surrounded by single
-     quotes ('''), or a number--the ordinal value of the corresponding
-     character (usually its ASCII value).  Within quotes, the single
-     character may be represented by a letter or by "escape sequences",
-     which are of the form '\NNN', where NNN is the octal representation
-     of the character's ordinal value; or of the form '\X', where 'X' is
-     a predefined special character--for example, '\n' for newline.
-
-     Wide character constants can be written by prefixing a character
-     constant with 'L', as in C. For example, 'L'x'' is the wide form of
-     'x'.  The target wide character set is used when computing the
-     value of this constant (*note Character Sets::).
-
-   * String constants are a sequence of character constants surrounded
-     by double quotes ('"').  Any valid character constant (as described
-     above) may appear.  Double quotes within the string must be
-     preceded by a backslash, so for instance '"a\"b'c"' is a string of
-     five characters.
-
-     Wide string constants can be written by prefixing a string constant
-     with 'L', as in C. The target wide character set is used when
-     computing the value of this constant (*note Character Sets::).
-
-   * Pointer constants are an integral value.  You can also write
-     pointers to constants using the C operator '&'.
-
-   * Array constants are comma-separated lists surrounded by braces '{'
-     and '}'; for example, '{1,2,3}' is a three-element array of
-     integers, '{{1,2}, {3,4}, {5,6}}' is a three-by-two array, and
-     '{&"hi", &"there", &"fred"}' is a three-element array of pointers.
-
-
-File: gdb.info,  Node: C Plus Plus Expressions,  Next: C Defaults,  Prev: C Constants,  Up: C
-
-15.4.1.3 C++ Expressions
-........................
-
-GDB expression handling can interpret most C++ expressions.
-
-     _Warning:_ GDB can only debug C++ code if you use the proper
-     compiler and the proper debug format.  Currently, GDB works best
-     when debugging C++ code that is compiled with the most recent
-     version of GCC possible.  The DWARF debugging format is preferred;
-     GCC defaults to this on most popular platforms.  Other compilers
-     and/or debug formats are likely to work badly or not at all when
-     using GDB to debug C++ code.  *Note Compilation::.
-
-  1. Member function calls are allowed; you can use expressions like
-
-          count = aml->GetOriginal(x, y)
-
-  2. While a member function is active (in the selected stack frame),
-     your expressions have the same namespace available as the member
-     function; that is, GDB allows implicit references to the class
-     instance pointer 'this' following the same rules as C++.  'using'
-     declarations in the current scope are also respected by GDB.
-
-  3. You can call overloaded functions; GDB resolves the function call
-     to the right definition, with some restrictions.  GDB does not
-     perform overload resolution involving user-defined type
-     conversions, calls to constructors, or instantiations of templates
-     that do not exist in the program.  It also cannot handle ellipsis
-     argument lists or default arguments.
-
-     It does perform integral conversions and promotions, floating-point
-     promotions, arithmetic conversions, pointer conversions,
-     conversions of class objects to base classes, and standard
-     conversions such as those of functions or arrays to pointers; it
-     requires an exact match on the number of function arguments.
-
-     Overload resolution is always performed, unless you have specified
-     'set overload-resolution off'.  *Note GDB Features for C++:
-     Debugging C Plus Plus.
-
-     You must specify 'set overload-resolution off' in order to use an
-     explicit function signature to call an overloaded function, as in
-          p 'foo(char,int)'('x', 13)
-
-     The GDB command-completion facility can simplify this; see *note
-     Command Completion: Completion.
-
-  4. GDB understands variables declared as C++ lvalue or rvalue
-     references; you can use them in expressions just as you do in C++
-     source--they are automatically dereferenced.
-
-     In the parameter list shown when GDB displays a frame, the values
-     of reference variables are not displayed (unlike other variables);
-     this avoids clutter, since references are often used for large
-     structures.  The _address_ of a reference variable is always shown,
-     unless you have specified 'set print address off'.
-
-  5. GDB supports the C++ name resolution operator '::'--your
-     expressions can use it just as expressions in your program do.
-     Since one scope may be defined in another, you can use '::'
-     repeatedly if necessary, for example in an expression like
-     'SCOPE1::SCOPE2::NAME'.  GDB also allows resolving name scope by
-     reference to source files, in both C and C++ debugging (*note
-     Program Variables: Variables.).
-
-  6. GDB performs argument-dependent lookup, following the C++
-     specification.
-
-
-File: gdb.info,  Node: C Defaults,  Next: C Checks,  Prev: C Plus Plus Expressions,  Up: C
-
-15.4.1.4 C and C++ Defaults
-...........................
-
-If you allow GDB to set range checking automatically, it defaults to
-'off' whenever the working language changes to C or C++.  This happens
-regardless of whether you or GDB selects the working language.
-
-   If you allow GDB to set the language automatically, it recognizes
-source files whose names end with '.c', '.C', or '.cc', etc, and when
-GDB enters code compiled from one of these files, it sets the working
-language to C or C++.  *Note Having GDB Infer the Source Language:
-Automatically, for further details.
-
-
-File: gdb.info,  Node: C Checks,  Next: Debugging C,  Prev: C Defaults,  Up: C
-
-15.4.1.5 C and C++ Type and Range Checks
-........................................
-
-By default, when GDB parses C or C++ expressions, strict type checking
-is used.  However, if you turn type checking off, GDB will allow certain
-non-standard conversions, such as promoting integer constants to
-pointers.
-
-   Range checking, if turned on, is done on mathematical operations.
-Array indices are not checked, since they are often used to index a
-pointer that is not itself an array.
-
-
-File: gdb.info,  Node: Debugging C,  Next: Debugging C Plus Plus,  Prev: C Checks,  Up: C
-
-15.4.1.6 GDB and C
-..................
-
-The 'set print union' and 'show print union' commands apply to the
-'union' type.  When set to 'on', any 'union' that is inside a 'struct'
-or 'class' is also printed.  Otherwise, it appears as '{...}'.
-
-   The '@' operator aids in the debugging of dynamic arrays, formed with
-pointers and a memory allocation function.  *Note Expressions:
-Expressions.
-
-
-File: gdb.info,  Node: Debugging C Plus Plus,  Next: Decimal Floating Point,  Prev: Debugging C,  Up: C
-
-15.4.1.7 GDB Features for C++
-.............................
-
-Some GDB commands are particularly useful with C++, and some are
-designed specifically for use with C++.  Here is a summary:
-
-'breakpoint menus'
-     When you want a breakpoint in a function whose name is overloaded,
-     GDB has the capability to display a menu of possible breakpoint
-     locations to help you specify which function definition you want.
-     *Note Ambiguous Expressions: Ambiguous Expressions.
-
-'rbreak REGEX'
-     Setting breakpoints using regular expressions is helpful for
-     setting breakpoints on overloaded functions that are not members of
-     any special classes.  *Note Setting Breakpoints: Set Breaks.
-
-'catch throw'
-'catch rethrow'
-'catch catch'
-     Debug C++ exception handling using these commands.  *Note Setting
-     Catchpoints: Set Catchpoints.
-
-'ptype TYPENAME'
-     Print inheritance relationships as well as other information for
-     type TYPENAME.  *Note Examining the Symbol Table: Symbols.
-
-'info vtbl EXPRESSION.'
-     The 'info vtbl' command can be used to display the virtual method
-     tables of the object computed by EXPRESSION.  This shows one entry
-     per virtual table; there may be multiple virtual tables when
-     multiple inheritance is in use.
-
-'demangle NAME'
-     Demangle NAME.  *Note Symbols::, for a more complete description of
-     the 'demangle' command.
-
-'set print demangle'
-'show print demangle'
-'set print asm-demangle'
-'show print asm-demangle'
-     Control whether C++ symbols display in their source form, both when
-     displaying code as C++ source and when displaying disassemblies.
-     *Note Print Settings: Print Settings.
-
-'set print object'
-'show print object'
-     Choose whether to print derived (actual) or declared types of
-     objects.  *Note Print Settings: Print Settings.
-
-'set print vtbl'
-'show print vtbl'
-     Control the format for printing virtual function tables.  *Note
-     Print Settings: Print Settings.  (The 'vtbl' commands do not work
-     on programs compiled with the HP ANSI C++ compiler ('aCC').)
-
-'set overload-resolution on'
-     Enable overload resolution for C++ expression evaluation.  The
-     default is on.  For overloaded functions, GDB evaluates the
-     arguments and searches for a function whose signature matches the
-     argument types, using the standard C++ conversion rules (see *note
-     C++ Expressions: C Plus Plus Expressions, for details).  If it
-     cannot find a match, it emits a message.
-
-'set overload-resolution off'
-     Disable overload resolution for C++ expression evaluation.  For
-     overloaded functions that are not class member functions, GDB
-     chooses the first function of the specified name that it finds in
-     the symbol table, whether or not its arguments are of the correct
-     type.  For overloaded functions that are class member functions,
-     GDB searches for a function whose signature _exactly_ matches the
-     argument types.
-
-'show overload-resolution'
-     Show the current setting of overload resolution.
-
-'Overloaded symbol names'
-     You can specify a particular definition of an overloaded symbol,
-     using the same notation that is used to declare such symbols in
-     C++: type 'SYMBOL(TYPES)' rather than just SYMBOL.  You can also
-     use the GDB command-line word completion facilities to list the
-     available choices, or to finish the type list for you.  *Note
-     Command Completion: Completion, for details on how to do this.
-
-'Breakpoints in functions with ABI tags'
-
-     The GNU C++ compiler introduced the notion of ABI "tags", which
-     correspond to changes in the ABI of a type, function, or variable
-     that would not otherwise be reflected in a mangled name.  See
-     <https://developers.redhat.com/blog/2015/02/05/gcc5-and-the-c11-abi/>
-     for more detail.
-
-     The ABI tags are visible in C++ demangled names.  For example, a
-     function that returns a std::string:
-
-          std::string function(int);
-
-     when compiled for the C++11 ABI is marked with the 'cxx11' ABI tag,
-     and GDB displays the symbol like this:
-
-          function[abi:cxx11](int)
-
-     You can set a breakpoint on such functions simply as if they had no
-     tag.  For example:
-
-          (gdb) b function(int)
-          Breakpoint 2 at 0x40060d: file main.cc, line 10.
-          (gdb) info breakpoints
-          Num     Type           Disp Enb Address    What
-          1       breakpoint     keep y   0x0040060d in function[abi:cxx11](int)
-                                                     at main.cc:10
-
-     On the rare occasion you need to disambiguate between different ABI
-     tags, you can do so by simply including the ABI tag in the function
-     name, like:
-
-          (gdb) b ambiguous[abi:other_tag](int)
-
-
-File: gdb.info,  Node: Decimal Floating Point,  Prev: Debugging C Plus Plus,  Up: C
-
-15.4.1.8 Decimal Floating Point format
-......................................
-
-GDB can examine, set and perform computations with numbers in decimal
-floating point format, which in the C language correspond to the
-'_Decimal32', '_Decimal64' and '_Decimal128' types as specified by the
-extension to support decimal floating-point arithmetic.
-
-   There are two encodings in use, depending on the architecture: BID
-(Binary Integer Decimal) for x86 and x86-64, and DPD (Densely Packed
-Decimal) for PowerPC and S/390.  GDB will use the appropriate encoding
-for the configured target.
-
-   Because of a limitation in 'libdecnumber', the library used by GDB to
-manipulate decimal floating point numbers, it is not possible to convert
-(using a cast, for example) integers wider than 32-bit to decimal float.
-
-   In addition, in order to imitate GDB's behaviour with binary floating
-point computations, error checking in decimal float operations ignores
-underflow, overflow and divide by zero exceptions.
-
-   In the PowerPC architecture, GDB provides a set of pseudo-registers
-to inspect '_Decimal128' values stored in floating point registers.  See
-*note PowerPC: PowerPC. for more details.
-
-
-File: gdb.info,  Node: D,  Next: Go,  Prev: C,  Up: Supported Languages
-
-15.4.2 D
---------
-
-GDB can be used to debug programs written in D and compiled with GDC,
-LDC or DMD compilers.  Currently GDB supports only one D specific
-feature -- dynamic arrays.
-
-
-File: gdb.info,  Node: Go,  Next: Objective-C,  Prev: D,  Up: Supported Languages
-
-15.4.3 Go
----------
-
-GDB can be used to debug programs written in Go and compiled with
-'gccgo' or '6g' compilers.
-
-   Here is a summary of the Go-specific features and restrictions:
-
-'The current Go package'
-     The name of the current package does not need to be specified when
-     specifying global variables and functions.
-
-     For example, given the program:
-
-          package main
-          var myglob = "Shall we?"
-          func main () {
-            // ...
-          }
-
-     When stopped inside 'main' either of these work:
-
-          (gdb) p myglob
-          (gdb) p main.myglob
-
-'Builtin Go types'
-     The 'string' type is recognized by GDB and is printed as a string.
-
-'Builtin Go functions'
-     The GDB expression parser recognizes the 'unsafe.Sizeof' function
-     and handles it internally.
-
-'Restrictions on Go expressions'
-     All Go operators are supported except '&^'.  The Go '_' "blank
-     identifier" is not supported.  Automatic dereferencing of pointers
-     is not supported.
-
-
-File: gdb.info,  Node: Objective-C,  Next: OpenCL C,  Prev: Go,  Up: Supported Languages
-
-15.4.4 Objective-C
-------------------
-
-This section provides information about some commands and command
-options that are useful for debugging Objective-C code.  See also *note
-info classes: Symbols, and *note info selectors: Symbols, for a few more
-commands specific to Objective-C support.
-
-* Menu:
-
-* Method Names in Commands::
-* The Print Command with Objective-C::
-
-
-File: gdb.info,  Node: Method Names in Commands,  Next: The Print Command with Objective-C,  Up: Objective-C
-
-15.4.4.1 Method Names in Commands
-.................................
-
-The following commands have been extended to accept Objective-C method
-names as line specifications:
-
-   * 'clear'
-   * 'break'
-   * 'info line'
-   * 'jump'
-   * 'list'
-
-   A fully qualified Objective-C method name is specified as
-
-     -[CLASS METHODNAME]
-
-   where the minus sign is used to indicate an instance method and a
-plus sign (not shown) is used to indicate a class method.  The class
-name CLASS and method name METHODNAME are enclosed in brackets, similar
-to the way messages are specified in Objective-C source code.  For
-example, to set a breakpoint at the 'create' instance method of class
-'Fruit' in the program currently being debugged, enter:
-
-     break -[Fruit create]
-
-   To list ten program lines around the 'initialize' class method,
-enter:
-
-     list +[NSText initialize]
-
-   In the current version of GDB, the plus or minus sign is required.
-In future versions of GDB, the plus or minus sign will be optional, but
-you can use it to narrow the search.  It is also possible to specify
-just a method name:
-
-     break create
-
-   You must specify the complete method name, including any colons.  If
-your program's source files contain more than one 'create' method,
-you'll be presented with a numbered list of classes that implement that
-method.  Indicate your choice by number, or type '0' to exit if none
-apply.
-
-   As another example, to clear a breakpoint established at the
-'makeKeyAndOrderFront:' method of the 'NSWindow' class, enter:
-
-     clear -[NSWindow makeKeyAndOrderFront:]
-
-
-File: gdb.info,  Node: The Print Command with Objective-C,  Prev: Method Names in Commands,  Up: Objective-C
-
-15.4.4.2 The Print Command With Objective-C
-...........................................
-
-The print command has also been extended to accept methods.  For
-example:
-
-     print -[OBJECT hash]
-
-will tell GDB to send the 'hash' message to OBJECT and print the result.
-Also, an additional command has been added, 'print-object' or 'po' for
-short, which is meant to print the description of an object.  However,
-this command may only work with certain Objective-C libraries that have
-a particular hook function, '_NSPrintForDebugger', defined.
-
-
-File: gdb.info,  Node: OpenCL C,  Next: Fortran,  Prev: Objective-C,  Up: Supported Languages
-
-15.4.5 OpenCL C
----------------
-
-This section provides information about GDBs OpenCL C support.
-
-* Menu:
-
-* OpenCL C Datatypes::
-* OpenCL C Expressions::
-* OpenCL C Operators::
-
-
-File: gdb.info,  Node: OpenCL C Datatypes,  Next: OpenCL C Expressions,  Up: OpenCL C
-
-15.4.5.1 OpenCL C Datatypes
-...........................
-
-GDB supports the builtin scalar and vector datatypes specified by OpenCL
-1.1.  In addition the half- and double-precision floating point data
-types of the 'cl_khr_fp16' and 'cl_khr_fp64' OpenCL extensions are also
-known to GDB.
-
-
-File: gdb.info,  Node: OpenCL C Expressions,  Next: OpenCL C Operators,  Prev: OpenCL C Datatypes,  Up: OpenCL C
-
-15.4.5.2 OpenCL C Expressions
-.............................
-
-GDB supports accesses to vector components including the access as
-lvalue where possible.  Since OpenCL C is based on C99 most C
-expressions supported by GDB can be used as well.
-
-
-File: gdb.info,  Node: OpenCL C Operators,  Prev: OpenCL C Expressions,  Up: OpenCL C
-
-15.4.5.3 OpenCL C Operators
-...........................
-
-GDB supports the operators specified by OpenCL 1.1 for scalar and vector
-data types.
-
-
-File: gdb.info,  Node: Fortran,  Next: Pascal,  Prev: OpenCL C,  Up: Supported Languages
-
-15.4.6 Fortran
---------------
-
-GDB can be used to debug programs written in Fortran, but it currently
-supports only the features of Fortran 77 language.
-
-   Some Fortran compilers (GNU Fortran 77 and Fortran 95 compilers among
-them) append an underscore to the names of variables and functions.
-When you debug programs compiled by those compilers, you will need to
-refer to variables and functions with a trailing underscore.
-
-* Menu:
-
-* Fortran Operators::           Fortran operators and expressions
-* Fortran Defaults::            Default settings for Fortran
-* Special Fortran Commands::    Special GDB commands for Fortran
-
-
-File: gdb.info,  Node: Fortran Operators,  Next: Fortran Defaults,  Up: Fortran
-
-15.4.6.1 Fortran Operators and Expressions
-..........................................
-
-Operators must be defined on values of specific types.  For instance,
-'+' is defined on numbers, but not on characters or other non-
-arithmetic types.  Operators are often defined on groups of types.
-
-'**'
-     The exponentiation operator.  It raises the first operand to the
-     power of the second one.
-
-':'
-     The range operator.  Normally used in the form of array(low:high)
-     to represent a section of array.
-
-'%'
-     The access component operator.  Normally used to access elements in
-     derived types.  Also suitable for unions.  As unions aren't part of
-     regular Fortran, this can only happen when accessing a register
-     that uses a gdbarch-defined union type.
-'::'
-     The scope operator.  Normally used to access variables in modules
-     or to set breakpoints on subroutines nested in modules or in other
-     subroutines (internal subroutines).
-
-
-File: gdb.info,  Node: Fortran Defaults,  Next: Special Fortran Commands,  Prev: Fortran Operators,  Up: Fortran
-
-15.4.6.2 Fortran Defaults
-.........................
-
-Fortran symbols are usually case-insensitive, so GDB by default uses
-case-insensitive matches for Fortran symbols.  You can change that with
-the 'set case-insensitive' command, see *note Symbols::, for the
-details.
-
-
-File: gdb.info,  Node: Special Fortran Commands,  Prev: Fortran Defaults,  Up: Fortran
-
-15.4.6.3 Special Fortran Commands
-.................................
-
-GDB has some commands to support Fortran-specific features, such as
-displaying common blocks.
-
-'info common [COMMON-NAME]'
-     This command prints the values contained in the Fortran 'COMMON'
-     block whose name is COMMON-NAME.  With no argument, the names of
-     all 'COMMON' blocks visible at the current program location are
-     printed.
-
-
-File: gdb.info,  Node: Pascal,  Next: Rust,  Prev: Fortran,  Up: Supported Languages
-
-15.4.7 Pascal
--------------
-
-Debugging Pascal programs which use sets, subranges, file variables, or
-nested functions does not currently work.  GDB does not support entering
-expressions, printing values, or similar features using Pascal syntax.
-
-   The Pascal-specific command 'set print pascal_static-members'
-controls whether static members of Pascal objects are displayed.  *Note
-pascal_static-members: Print Settings.
-
-
-File: gdb.info,  Node: Rust,  Next: Modula-2,  Prev: Pascal,  Up: Supported Languages
-
-15.4.8 Rust
------------
-
-GDB supports the Rust Programming Language (https://www.rust-lang.org/).
-Type- and value-printing, and expression parsing, are reasonably
-complete.  However, there are a few peculiarities and holes to be aware
-of.
-
-   * Linespecs (*note Specify Location::) are never relative to the
-     current crate.  Instead, they act as if there were a global
-     namespace of crates, somewhat similar to the way 'extern crate'
-     behaves.
-
-     That is, if GDB is stopped at a breakpoint in a function in crate
-     'A', module 'B', then 'break B::f' will attempt to set a breakpoint
-     in a function named 'f' in a crate named 'B'.
-
-     As a consequence of this approach, linespecs also cannot refer to
-     items using 'self::' or 'super::'.
-
-   * Because GDB implements Rust name-lookup semantics in expressions,
-     it will sometimes prepend the current crate to a name.  For
-     example, if GDB is stopped at a breakpoint in the crate 'K', then
-     'print ::x::y' will try to find the symbol 'K::x::y'.
-
-     However, since it is useful to be able to refer to other crates
-     when debugging, GDB provides the 'extern' extension to circumvent
-     this.  To use the extension, just put 'extern' before a path
-     expression to refer to the otherwise unavailable "global" scope.
-
-     In the above example, if you wanted to refer to the symbol 'y' in
-     the crate 'x', you would use 'print extern x::y'.
-
-   * The Rust expression evaluator does not support "statement-like"
-     expressions such as 'if' or 'match', or lambda expressions.
-
-   * Tuple expressions are not implemented.
-
-   * The Rust expression evaluator does not currently implement the
-     'Drop' trait.  Objects that may be created by the evaluator will
-     never be destroyed.
-
-   * GDB does not implement type inference for generics.  In order to
-     call generic functions or otherwise refer to generic items, you
-     will have to specify the type parameters manually.
-
-   * GDB currently uses the C++ demangler for Rust.  In most cases this
-     does not cause any problems.  However, in an expression context,
-     completing a generic function name will give syntactically invalid
-     results.  This happens because Rust requires the '::' operator
-     between the function name and its generic arguments.  For example,
-     GDB might provide a completion like 'crate::f<u32>', where the
-     parser would require 'crate::f::<u32>'.
-
-   * As of this writing, the Rust compiler (version 1.8) has a few holes
-     in the debugging information it generates.  These holes prevent
-     certain features from being implemented by GDB:
-
-        * Method calls cannot be made via traits.
-
-        * Operator overloading is not implemented.
-
-        * When debugging in a monomorphized function, you cannot use the
-          generic type names.
-
-        * The type 'Self' is not available.
-
-        * 'use' statements are not available, so some names may not be
-          available in the crate.
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-3 ./gdb/doc/gdb.info-3
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-3	2019-12-11 01:53:09.000000000 +0000
+++ ./gdb/doc/gdb.info-3	2024-02-01 01:52:19.000000000 +0000
@@ -1,6 +1,6 @@
-This is gdb.info, produced by makeinfo version 6.3 from gdb.texinfo.
+This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo.
 
-Copyright (C) 1988-2019 Free Software Foundation, Inc.
+Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -21,9 +21,9 @@ END-INFO-DIR-ENTRY
    This file documents the GNU debugger GDB.
 
    This is the Tenth Edition, of 'Debugging with GDB: the GNU
-Source-Level Debugger' for GDB (GDB) Version 9.0.50.20191211-git.
+Source-Level Debugger' for GDB (GDB) Version 15.0.50.20240201-git.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -37,6 +37,1318 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+File: gdb.info,  Node: Setting,  Next: Show,  Up: Languages
+
+15.1 Switching Between Source Languages
+=======================================
+
+There are two ways to control the working language--either have GDB set
+it automatically, or select it manually yourself.  You can use the 'set
+language' command for either purpose.  On startup, GDB defaults to
+setting the language automatically.  The working language is used to
+determine how expressions you type are interpreted, how values are
+printed, etc.
+
+   In addition to the working language, every source file that GDB knows
+about has its own working language.  For some object file formats, the
+compiler might indicate which language a particular source file is in.
+However, most of the time GDB infers the language from the name of the
+file.  The language of a source file controls whether C++ names are
+demangled--this way 'backtrace' can show each frame appropriately for
+its own language.  There is no way to set the language of a source file
+from within GDB, but you can set the language associated with a filename
+extension.  *Note Displaying the Language: Show.
+
+   This is most commonly a problem when you use a program, such as
+'cfront' or 'f2c', that generates C but is written in another language.
+In that case, make the program use '#line' directives in its C output;
+that way GDB will know the correct language of the source code of the
+original program, and will display that source code, not the generated C
+code.
+
+* Menu:
+
+* Filenames::                   Filename extensions and languages.
+* Manually::                    Setting the working language manually
+* Automatically::               Having GDB infer the source language
+
+
+File: gdb.info,  Node: Filenames,  Next: Manually,  Up: Setting
+
+15.1.1 List of Filename Extensions and Languages
+------------------------------------------------
+
+If a source file name ends in one of the following extensions, then GDB
+infers that its language is the one indicated.
+
+'.ada'
+'.ads'
+'.adb'
+'.a'
+     Ada source file.
+
+'.c'
+     C source file
+
+'.C'
+'.cc'
+'.cp'
+'.cpp'
+'.cxx'
+'.c++'
+     C++ source file
+
+'.d'
+     D source file
+
+'.m'
+     Objective-C source file
+
+'.f'
+'.F'
+     Fortran source file
+
+'.mod'
+     Modula-2 source file
+
+'.s'
+'.S'
+     Assembler source file.  This actually behaves almost like C, but
+     GDB does not skip over function prologues when stepping.
+
+   In addition, you may set the language associated with a filename
+extension.  *Note Displaying the Language: Show.
+
+
+File: gdb.info,  Node: Manually,  Next: Automatically,  Prev: Filenames,  Up: Setting
+
+15.1.2 Setting the Working Language
+-----------------------------------
+
+If you allow GDB to set the language automatically, expressions are
+interpreted the same way in your debugging session and your program.
+
+   If you wish, you may set the language manually.  To do this, issue
+the command 'set language LANG', where LANG is the name of a language,
+such as 'c' or 'modula-2'.  For a list of the supported languages, type
+'set language'.
+
+   Setting the language manually prevents GDB from updating the working
+language automatically.  This can lead to confusion if you try to debug
+a program when the working language is not the same as the source
+language, when an expression is acceptable to both languages--but means
+different things.  For instance, if the current source file were written
+in C, and GDB was parsing Modula-2, a command such as:
+
+     print a = b + c
+
+might not have the effect you intended.  In C, this means to add 'b' and
+'c' and place the result in 'a'.  The result printed would be the value
+of 'a'.  In Modula-2, this means to compare 'a' to the result of 'b+c',
+yielding a 'BOOLEAN' value.
+
+
+File: gdb.info,  Node: Automatically,  Prev: Manually,  Up: Setting
+
+15.1.3 Having GDB Infer the Source Language
+-------------------------------------------
+
+To have GDB set the working language automatically, use 'set language
+local' or 'set language auto'.  GDB then infers the working language.
+That is, when your program stops in a frame (usually by encountering a
+breakpoint), GDB sets the working language to the language recorded for
+the function in that frame.  If the language for a frame is unknown
+(that is, if the function or block corresponding to the frame was
+defined in a source file that does not have a recognized extension), the
+current working language is not changed, and GDB issues a warning.
+
+   This may not seem necessary for most programs, which are written
+entirely in one source language.  However, program modules and libraries
+written in one source language can be used by a main program written in
+a different source language.  Using 'set language auto' in this case
+frees you from having to set the working language manually.
+
+
+File: gdb.info,  Node: Show,  Next: Checks,  Prev: Setting,  Up: Languages
+
+15.2 Displaying the Language
+============================
+
+The following commands help you find out which language is the working
+language, and also what language source files were written in.
+
+'show language'
+     Display the current working language.  This is the language you can
+     use with commands such as 'print' to build and compute expressions
+     that may involve variables in your program.
+
+'info frame'
+     Display the source language for this frame.  This language becomes
+     the working language if you use an identifier from this frame.
+     *Note Information about a Frame: Frame Info, to identify the other
+     information listed here.
+
+'info source'
+     Display the source language of this source file.  *Note Examining
+     the Symbol Table: Symbols, to identify the other information listed
+     here.
+
+   In unusual circumstances, you may have source files with extensions
+not in the standard list.  You can then set the extension associated
+with a language explicitly:
+
+'set extension-language EXT LANGUAGE'
+     Tell GDB that source files with extension EXT are to be assumed as
+     written in the source language LANGUAGE.
+
+'info extensions'
+     List all the filename extensions and the associated languages.
+
+
+File: gdb.info,  Node: Checks,  Next: Supported Languages,  Prev: Show,  Up: Languages
+
+15.3 Type and Range Checking
+============================
+
+Some languages are designed to guard you against making seemingly common
+errors through a series of compile- and run-time checks.  These include
+checking the type of arguments to functions and operators and making
+sure mathematical overflows are caught at run time.  Checks such as
+these help to ensure a program's correctness once it has been compiled
+by eliminating type mismatches and providing active checks for range
+errors when your program is running.
+
+   By default GDB checks for these errors according to the rules of the
+current source language.  Although GDB does not check the statements in
+your program, it can check expressions entered directly into GDB for
+evaluation via the 'print' command, for example.
+
+* Menu:
+
+* Type Checking::               An overview of type checking
+* Range Checking::              An overview of range checking
+
+
+File: gdb.info,  Node: Type Checking,  Next: Range Checking,  Up: Checks
+
+15.3.1 An Overview of Type Checking
+-----------------------------------
+
+Some languages, such as C and C++, are strongly typed, meaning that the
+arguments to operators and functions have to be of the correct type,
+otherwise an error occurs.  These checks prevent type mismatch errors
+from ever causing any run-time problems.  For example,
+
+     int klass::my_method(char *b) { return  b ? 1 : 2; }
+
+     (gdb) print obj.my_method (0)
+     $1 = 2
+but
+     (gdb) print obj.my_method (0x1234)
+     Cannot resolve method klass::my_method to any overloaded instance
+
+   The second example fails because in C++ the integer constant '0x1234'
+is not type-compatible with the pointer parameter type.
+
+   For the expressions you use in GDB commands, you can tell GDB to not
+enforce strict type checking or to treat any mismatches as errors and
+abandon the expression; When type checking is disabled, GDB successfully
+evaluates expressions like the second example above.
+
+   Even if type checking is off, there may be other reasons related to
+type that prevent GDB from evaluating an expression.  For instance, GDB
+does not know how to add an 'int' and a 'struct foo'.  These particular
+type errors have nothing to do with the language in use and usually
+arise from expressions which make little sense to evaluate anyway.
+
+   GDB provides some additional commands for controlling type checking:
+
+'set check type on'
+'set check type off'
+     Set strict type checking on or off.  If any type mismatches occur
+     in evaluating an expression while type checking is on, GDB prints a
+     message and aborts evaluation of the expression.
+
+'show check type'
+     Show the current setting of type checking and whether GDB is
+     enforcing strict type checking rules.
+
+
+File: gdb.info,  Node: Range Checking,  Prev: Type Checking,  Up: Checks
+
+15.3.2 An Overview of Range Checking
+------------------------------------
+
+In some languages (such as Modula-2), it is an error to exceed the
+bounds of a type; this is enforced with run-time checks.  Such range
+checking is meant to ensure program correctness by making sure
+computations do not overflow, or indices on an array element access do
+not exceed the bounds of the array.
+
+   For expressions you use in GDB commands, you can tell GDB to treat
+range errors in one of three ways: ignore them, always treat them as
+errors and abandon the expression, or issue warnings but evaluate the
+expression anyway.
+
+   A range error can result from numerical overflow, from exceeding an
+array index bound, or when you type a constant that is not a member of
+any type.  Some languages, however, do not treat overflows as an error.
+In many implementations of C, mathematical overflow causes the result to
+"wrap around" to lower values--for example, if M is the largest integer
+value, and S is the smallest, then
+
+     M + 1 => S
+
+   This, too, is specific to individual languages, and in some cases
+specific to individual compilers or machines.  *Note Supported
+Languages: Supported Languages, for further details on specific
+languages.
+
+   GDB provides some additional commands for controlling the range
+checker:
+
+'set check range auto'
+     Set range checking on or off based on the current working language.
+     *Note Supported Languages: Supported Languages, for the default
+     settings for each language.
+
+'set check range on'
+'set check range off'
+     Set range checking on or off, overriding the default setting for
+     the current working language.  A warning is issued if the setting
+     does not match the language default.  If a range error occurs and
+     range checking is on, then a message is printed and evaluation of
+     the expression is aborted.
+
+'set check range warn'
+     Output messages when the GDB range checker detects a range error,
+     but attempt to evaluate the expression anyway.  Evaluating the
+     expression may still be impossible for other reasons, such as
+     accessing memory that the process does not own (a typical example
+     from many Unix systems).
+
+'show check range'
+     Show the current setting of the range checker, and whether or not
+     it is being set automatically by GDB.
+
+
+File: gdb.info,  Node: Supported Languages,  Next: Unsupported Languages,  Prev: Checks,  Up: Languages
+
+15.4 Supported Languages
+========================
+
+GDB supports C, C++, D, Go, Objective-C, Fortran, OpenCL C, Pascal,
+Rust, assembly, Modula-2, and Ada.  Some GDB features may be used in
+expressions regardless of the language you use: the GDB '@' and '::'
+operators, and the '{type}addr' construct (*note Expressions:
+Expressions.) can be used with the constructs of any supported language.
+
+   The following sections detail to what degree each source language is
+supported by GDB.  These sections are not meant to be language tutorials
+or references, but serve only as a reference guide to what the GDB
+expression parser accepts, and what input and output formats should look
+like for different languages.  There are many good books written on each
+of these languages; please look to these for a language reference or
+tutorial.
+
+* Menu:
+
+* C::                           C and C++
+* D::                           D
+* Go::                          Go
+* Objective-C::                 Objective-C
+* OpenCL C::                    OpenCL C
+* Fortran::                     Fortran
+* Pascal::                      Pascal
+* Rust::                        Rust
+* Modula-2::                    Modula-2
+* Ada::                         Ada
+
+
+File: gdb.info,  Node: C,  Next: D,  Up: Supported Languages
+
+15.4.1 C and C++
+----------------
+
+Since C and C++ are so closely related, many features of GDB apply to
+both languages.  Whenever this is the case, we discuss those languages
+together.
+
+   The C++ debugging facilities are jointly implemented by the C++
+compiler and GDB.  Therefore, to debug your C++ code effectively, you
+must compile your C++ programs with a supported C++ compiler, such as
+GNU 'g++', or the HP ANSI C++ compiler ('aCC').
+
+* Menu:
+
+* C Operators::                 C and C++ operators
+* C Constants::                 C and C++ constants
+* C Plus Plus Expressions::     C++ expressions
+* C Defaults::                  Default settings for C and C++
+* C Checks::                    C and C++ type and range checks
+* Debugging C::                 GDB and C
+* Debugging C Plus Plus::       GDB features for C++
+* Decimal Floating Point::      Numbers in Decimal Floating Point format
+
+
+File: gdb.info,  Node: C Operators,  Next: C Constants,  Up: C
+
+15.4.1.1 C and C++ Operators
+............................
+
+Operators must be defined on values of specific types.  For instance,
+'+' is defined on numbers, but not on structures.  Operators are often
+defined on groups of types.
+
+   For the purposes of C and C++, the following definitions hold:
+
+   * _Integral types_ include 'int' with any of its storage-class
+     specifiers; 'char'; 'enum'; and, for C++, 'bool'.
+
+   * _Floating-point types_ include 'float', 'double', and 'long double'
+     (if supported by the target platform).
+
+   * _Pointer types_ include all types defined as '(TYPE *)'.
+
+   * _Scalar types_ include all of the above.
+
+The following operators are supported.  They are listed here in order of
+increasing precedence:
+
+','
+     The comma or sequencing operator.  Expressions in a comma-separated
+     list are evaluated from left to right, with the result of the
+     entire expression being the last expression evaluated.
+
+'='
+     Assignment.  The value of an assignment expression is the value
+     assigned.  Defined on scalar types.
+
+'OP='
+     Used in an expression of the form 'A OP= B', and translated to
+     'A = A OP B'.  'OP=' and '=' have the same precedence.  The
+     operator OP is any one of the operators '|', '^', '&', '<<', '>>',
+     '+', '-', '*', '/', '%'.
+
+'?:'
+     The ternary operator.  'A ? B : C' can be thought of as: if A then
+     B else C.  The argument A should be of an integral type.
+
+'||'
+     Logical OR.  Defined on integral types.
+
+'&&'
+     Logical AND.  Defined on integral types.
+
+'|'
+     Bitwise OR.  Defined on integral types.
+
+'^'
+     Bitwise exclusive-OR.  Defined on integral types.
+
+'&'
+     Bitwise AND.  Defined on integral types.
+
+'==, !='
+     Equality and inequality.  Defined on scalar types.  The value of
+     these expressions is 0 for false and non-zero for true.
+
+'<, >, <=, >='
+     Less than, greater than, less than or equal, greater than or equal.
+     Defined on scalar types.  The value of these expressions is 0 for
+     false and non-zero for true.
+
+'<<, >>'
+     left shift, and right shift.  Defined on integral types.
+
+'@'
+     The GDB "artificial array" operator (*note Expressions:
+     Expressions.).
+
+'+, -'
+     Addition and subtraction.  Defined on integral types,
+     floating-point types and pointer types.
+
+'*, /, %'
+     Multiplication, division, and modulus.  Multiplication and division
+     are defined on integral and floating-point types.  Modulus is
+     defined on integral types.
+
+'++, --'
+     Increment and decrement.  When appearing before a variable, the
+     operation is performed before the variable is used in an
+     expression; when appearing after it, the variable's value is used
+     before the operation takes place.
+
+'*'
+     Pointer dereferencing.  Defined on pointer types.  Same precedence
+     as '++'.
+
+'&'
+     Address operator.  Defined on variables.  Same precedence as '++'.
+
+     For debugging C++, GDB implements a use of '&' beyond what is
+     allowed in the C++ language itself: you can use '&(&REF)' to
+     examine the address where a C++ reference variable (declared with
+     '&REF') is stored.
+
+'-'
+     Negative.  Defined on integral and floating-point types.  Same
+     precedence as '++'.
+
+'!'
+     Logical negation.  Defined on integral types.  Same precedence as
+     '++'.
+
+'~'
+     Bitwise complement operator.  Defined on integral types.  Same
+     precedence as '++'.
+
+'., ->'
+     Structure member, and pointer-to-structure member.  For
+     convenience, GDB regards the two as equivalent, choosing whether to
+     dereference a pointer based on the stored type information.
+     Defined on 'struct' and 'union' data.
+
+'.*, ->*'
+     Dereferences of pointers to members.
+
+'[]'
+     Array indexing.  'A[I]' is defined as '*(A+I)'.  Same precedence as
+     '->'.
+
+'()'
+     Function parameter list.  Same precedence as '->'.
+
+'::'
+     C++ scope resolution operator.  Defined on 'struct', 'union', and
+     'class' types.
+
+'::'
+     Doubled colons also represent the GDB scope operator (*note
+     Expressions: Expressions.).  Same precedence as '::', above.
+
+   If an operator is redefined in the user code, GDB usually attempts to
+invoke the redefined version instead of using the operator's predefined
+meaning.
+
+
+File: gdb.info,  Node: C Constants,  Next: C Plus Plus Expressions,  Prev: C Operators,  Up: C
+
+15.4.1.2 C and C++ Constants
+............................
+
+GDB allows you to express the constants of C and C++ in the following
+ways:
+
+   * Integer constants are a sequence of digits.  Octal constants are
+     specified by a leading '0' (i.e. zero), and hexadecimal constants
+     by a leading '0x' or '0X'.  Constants may also end with a letter
+     'l', specifying that the constant should be treated as a 'long'
+     value.
+
+   * Floating point constants are a sequence of digits, followed by a
+     decimal point, followed by a sequence of digits, and optionally
+     followed by an exponent.  An exponent is of the form:
+     'e[[+]|-]NNN', where NNN is another sequence of digits.  The '+' is
+     optional for positive exponents.  A floating-point constant may
+     also end with a letter 'f' or 'F', specifying that the constant
+     should be treated as being of the 'float' (as opposed to the
+     default 'double') type; or with a letter 'l' or 'L', which
+     specifies a 'long double' constant.
+
+   * Enumerated constants consist of enumerated identifiers, or their
+     integral equivalents.
+
+   * Character constants are a single character surrounded by single
+     quotes ('''), or a number--the ordinal value of the corresponding
+     character (usually its ASCII value).  Within quotes, the single
+     character may be represented by a letter or by "escape sequences",
+     which are of the form '\NNN', where NNN is the octal representation
+     of the character's ordinal value; or of the form '\X', where 'X' is
+     a predefined special character--for example, '\n' for newline.
+
+     Wide character constants can be written by prefixing a character
+     constant with 'L', as in C. For example, 'L'x'' is the wide form of
+     'x'.  The target wide character set is used when computing the
+     value of this constant (*note Character Sets::).
+
+   * String constants are a sequence of character constants surrounded
+     by double quotes ('"').  Any valid character constant (as described
+     above) may appear.  Double quotes within the string must be
+     preceded by a backslash, so for instance '"a\"b'c"' is a string of
+     five characters.
+
+     Wide string constants can be written by prefixing a string constant
+     with 'L', as in C. The target wide character set is used when
+     computing the value of this constant (*note Character Sets::).
+
+   * Pointer constants are an integral value.  You can also write
+     pointers to constants using the C operator '&'.
+
+   * Array constants are comma-separated lists surrounded by braces '{'
+     and '}'; for example, '{1,2,3}' is a three-element array of
+     integers, '{{1,2}, {3,4}, {5,6}}' is a three-by-two array, and
+     '{&"hi", &"there", &"fred"}' is a three-element array of pointers.
+
+
+File: gdb.info,  Node: C Plus Plus Expressions,  Next: C Defaults,  Prev: C Constants,  Up: C
+
+15.4.1.3 C++ Expressions
+........................
+
+GDB expression handling can interpret most C++ expressions.
+
+     _Warning:_ GDB can only debug C++ code if you use the proper
+     compiler and the proper debug format.  Currently, GDB works best
+     when debugging C++ code that is compiled with the most recent
+     version of GCC possible.  The DWARF debugging format is preferred;
+     GCC defaults to this on most popular platforms.  Other compilers
+     and/or debug formats are likely to work badly or not at all when
+     using GDB to debug C++ code.  *Note Compilation::.
+
+  1. Member function calls are allowed; you can use expressions like
+
+          count = aml->GetOriginal(x, y)
+
+  2. While a member function is active (in the selected stack frame),
+     your expressions have the same namespace available as the member
+     function; that is, GDB allows implicit references to the class
+     instance pointer 'this' following the same rules as C++.  'using'
+     declarations in the current scope are also respected by GDB.
+
+  3. You can call overloaded functions; GDB resolves the function call
+     to the right definition, with some restrictions.  GDB does not
+     perform overload resolution involving user-defined type
+     conversions, calls to constructors, or instantiations of templates
+     that do not exist in the program.  It also cannot handle ellipsis
+     argument lists or default arguments.
+
+     It does perform integral conversions and promotions, floating-point
+     promotions, arithmetic conversions, pointer conversions,
+     conversions of class objects to base classes, and standard
+     conversions such as those of functions or arrays to pointers; it
+     requires an exact match on the number of function arguments.
+
+     Overload resolution is always performed, unless you have specified
+     'set overload-resolution off'.  *Note GDB Features for C++:
+     Debugging C Plus Plus.
+
+     You must specify 'set overload-resolution off' in order to use an
+     explicit function signature to call an overloaded function, as in
+          p 'foo(char,int)'('x', 13)
+
+     The GDB command-completion facility can simplify this; see *note
+     Command Completion: Completion.
+
+  4. GDB understands variables declared as C++ lvalue or rvalue
+     references; you can use them in expressions just as you do in C++
+     source--they are automatically dereferenced.
+
+     In the parameter list shown when GDB displays a frame, the values
+     of reference variables are not displayed (unlike other variables);
+     this avoids clutter, since references are often used for large
+     structures.  The _address_ of a reference variable is always shown,
+     unless you have specified 'set print address off'.
+
+  5. GDB supports the C++ name resolution operator '::'--your
+     expressions can use it just as expressions in your program do.
+     Since one scope may be defined in another, you can use '::'
+     repeatedly if necessary, for example in an expression like
+     'SCOPE1::SCOPE2::NAME'.  GDB also allows resolving name scope by
+     reference to source files, in both C and C++ debugging (*note
+     Program Variables: Variables.).
+
+  6. GDB performs argument-dependent lookup, following the C++
+     specification.
+
+
+File: gdb.info,  Node: C Defaults,  Next: C Checks,  Prev: C Plus Plus Expressions,  Up: C
+
+15.4.1.4 C and C++ Defaults
+...........................
+
+If you allow GDB to set range checking automatically, it defaults to
+'off' whenever the working language changes to C or C++.  This happens
+regardless of whether you or GDB selects the working language.
+
+   If you allow GDB to set the language automatically, it recognizes
+source files whose names end with '.c', '.C', or '.cc', etc, and when
+GDB enters code compiled from one of these files, it sets the working
+language to C or C++.  *Note Having GDB Infer the Source Language:
+Automatically, for further details.
+
+
+File: gdb.info,  Node: C Checks,  Next: Debugging C,  Prev: C Defaults,  Up: C
+
+15.4.1.5 C and C++ Type and Range Checks
+........................................
+
+By default, when GDB parses C or C++ expressions, strict type checking
+is used.  However, if you turn type checking off, GDB will allow certain
+non-standard conversions, such as promoting integer constants to
+pointers.
+
+   Range checking, if turned on, is done on mathematical operations.
+Array indices are not checked, since they are often used to index a
+pointer that is not itself an array.
+
+
+File: gdb.info,  Node: Debugging C,  Next: Debugging C Plus Plus,  Prev: C Checks,  Up: C
+
+15.4.1.6 GDB and C
+..................
+
+The 'set print union' and 'show print union' commands apply to the
+'union' type.  When set to 'on', any 'union' that is inside a 'struct'
+or 'class' is also printed.  Otherwise, it appears as '{...}'.
+
+   The '@' operator aids in the debugging of dynamic arrays, formed with
+pointers and a memory allocation function.  *Note Expressions:
+Expressions.
+
+
+File: gdb.info,  Node: Debugging C Plus Plus,  Next: Decimal Floating Point,  Prev: Debugging C,  Up: C
+
+15.4.1.7 GDB Features for C++
+.............................
+
+Some GDB commands are particularly useful with C++, and some are
+designed specifically for use with C++.  Here is a summary:
+
+'breakpoint menus'
+     When you want a breakpoint in a function whose name is overloaded,
+     GDB has the capability to display a menu of possible breakpoint
+     locations to help you specify which function definition you want.
+     *Note Ambiguous Expressions: Ambiguous Expressions.
+
+'rbreak REGEX'
+     Setting breakpoints using regular expressions is helpful for
+     setting breakpoints on overloaded functions that are not members of
+     any special classes.  *Note Setting Breakpoints: Set Breaks.
+
+'catch throw'
+'catch rethrow'
+'catch catch'
+     Debug C++ exception handling using these commands.  *Note Setting
+     Catchpoints: Set Catchpoints.
+
+'ptype TYPENAME'
+     Print inheritance relationships as well as other information for
+     type TYPENAME.  *Note Examining the Symbol Table: Symbols.
+
+'info vtbl EXPRESSION.'
+     The 'info vtbl' command can be used to display the virtual method
+     tables of the object computed by EXPRESSION.  This shows one entry
+     per virtual table; there may be multiple virtual tables when
+     multiple inheritance is in use.
+
+'demangle NAME'
+     Demangle NAME.  *Note Symbols::, for a more complete description of
+     the 'demangle' command.
+
+'set print demangle'
+'show print demangle'
+'set print asm-demangle'
+'show print asm-demangle'
+     Control whether C++ symbols display in their source form, both when
+     displaying code as C++ source and when displaying disassemblies.
+     *Note Print Settings: Print Settings.
+
+'set print object'
+'show print object'
+     Choose whether to print derived (actual) or declared types of
+     objects.  *Note Print Settings: Print Settings.
+
+'set print vtbl'
+'show print vtbl'
+     Control the format for printing virtual function tables.  *Note
+     Print Settings: Print Settings.  (The 'vtbl' commands do not work
+     on programs compiled with the HP ANSI C++ compiler ('aCC').)
+
+'set overload-resolution on'
+     Enable overload resolution for C++ expression evaluation.  The
+     default is on.  For overloaded functions, GDB evaluates the
+     arguments and searches for a function whose signature matches the
+     argument types, using the standard C++ conversion rules (see *note
+     C++ Expressions: C Plus Plus Expressions, for details).  If it
+     cannot find a match, it emits a message.
+
+'set overload-resolution off'
+     Disable overload resolution for C++ expression evaluation.  For
+     overloaded functions that are not class member functions, GDB
+     chooses the first function of the specified name that it finds in
+     the symbol table, whether or not its arguments are of the correct
+     type.  For overloaded functions that are class member functions,
+     GDB searches for a function whose signature _exactly_ matches the
+     argument types.
+
+'show overload-resolution'
+     Show the current setting of overload resolution.
+
+'Overloaded symbol names'
+     You can specify a particular definition of an overloaded symbol,
+     using the same notation that is used to declare such symbols in
+     C++: type 'SYMBOL(TYPES)' rather than just SYMBOL.  You can also
+     use the GDB command-line word completion facilities to list the
+     available choices, or to finish the type list for you.  *Note
+     Command Completion: Completion, for details on how to do this.
+
+'Breakpoints in template functions'
+
+     Similar to how overloaded symbols are handled, GDB will ignore
+     template parameter lists when it encounters a symbol which includes
+     a C++ template.  This permits setting breakpoints on families of
+     template functions or functions whose parameters include template
+     types.
+
+     The '-qualified' flag may be used to override this behavior,
+     causing GDB to search for a specific function or type.
+
+     The GDB command-line word completion facility also understands
+     template parameters and may be used to list available choices or
+     finish template parameter lists for you.  *Note Command Completion:
+     Completion, for details on how to do this.
+
+'Breakpoints in functions with ABI tags'
+
+     The GNU C++ compiler introduced the notion of ABI "tags", which
+     correspond to changes in the ABI of a type, function, or variable
+     that would not otherwise be reflected in a mangled name.  See
+     <https://developers.redhat.com/blog/2015/02/05/gcc5-and-the-c11-abi/>
+     for more detail.
+
+     The ABI tags are visible in C++ demangled names.  For example, a
+     function that returns a std::string:
+
+          std::string function(int);
+
+     when compiled for the C++11 ABI is marked with the 'cxx11' ABI tag,
+     and GDB displays the symbol like this:
+
+          function[abi:cxx11](int)
+
+     You can set a breakpoint on such functions simply as if they had no
+     tag.  For example:
+
+          (gdb) b function(int)
+          Breakpoint 2 at 0x40060d: file main.cc, line 10.
+          (gdb) info breakpoints
+          Num     Type           Disp Enb Address    What
+          1       breakpoint     keep y   0x0040060d in function[abi:cxx11](int)
+                                                     at main.cc:10
+
+     On the rare occasion you need to disambiguate between different ABI
+     tags, you can do so by simply including the ABI tag in the function
+     name, like:
+
+          (gdb) b ambiguous[abi:other_tag](int)
+
+
+File: gdb.info,  Node: Decimal Floating Point,  Prev: Debugging C Plus Plus,  Up: C
+
+15.4.1.8 Decimal Floating Point format
+......................................
+
+GDB can examine, set and perform computations with numbers in decimal
+floating point format, which in the C language correspond to the
+'_Decimal32', '_Decimal64' and '_Decimal128' types as specified by the
+extension to support decimal floating-point arithmetic.
+
+   There are two encodings in use, depending on the architecture: BID
+(Binary Integer Decimal) for x86 and x86-64, and DPD (Densely Packed
+Decimal) for PowerPC and S/390.  GDB will use the appropriate encoding
+for the configured target.
+
+   Because of a limitation in 'libdecnumber', the library used by GDB to
+manipulate decimal floating point numbers, it is not possible to convert
+(using a cast, for example) integers wider than 32-bit to decimal float.
+
+   In addition, in order to imitate GDB's behaviour with binary floating
+point computations, error checking in decimal float operations ignores
+underflow, overflow and divide by zero exceptions.
+
+   In the PowerPC architecture, GDB provides a set of pseudo-registers
+to inspect '_Decimal128' values stored in floating point registers.  See
+*note PowerPC: PowerPC. for more details.
+
+
+File: gdb.info,  Node: D,  Next: Go,  Prev: C,  Up: Supported Languages
+
+15.4.2 D
+--------
+
+GDB can be used to debug programs written in D and compiled with GDC,
+LDC or DMD compilers.  Currently GDB supports only one D specific
+feature -- dynamic arrays.
+
+
+File: gdb.info,  Node: Go,  Next: Objective-C,  Prev: D,  Up: Supported Languages
+
+15.4.3 Go
+---------
+
+GDB can be used to debug programs written in Go and compiled with
+'gccgo' or '6g' compilers.
+
+   Here is a summary of the Go-specific features and restrictions:
+
+'The current Go package'
+     The name of the current package does not need to be specified when
+     specifying global variables and functions.
+
+     For example, given the program:
+
+          package main
+          var myglob = "Shall we?"
+          func main () {
+            // ...
+          }
+
+     When stopped inside 'main' either of these work:
+
+          (gdb) p myglob
+          (gdb) p main.myglob
+
+'Builtin Go types'
+     The 'string' type is recognized by GDB and is printed as a string.
+
+'Builtin Go functions'
+     The GDB expression parser recognizes the 'unsafe.Sizeof' function
+     and handles it internally.
+
+'Restrictions on Go expressions'
+     All Go operators are supported except '&^'.  The Go '_' "blank
+     identifier" is not supported.  Automatic dereferencing of pointers
+     is not supported.
+
+
+File: gdb.info,  Node: Objective-C,  Next: OpenCL C,  Prev: Go,  Up: Supported Languages
+
+15.4.4 Objective-C
+------------------
+
+This section provides information about some commands and command
+options that are useful for debugging Objective-C code.  See also *note
+info classes: Symbols, and *note info selectors: Symbols, for a few more
+commands specific to Objective-C support.
+
+* Menu:
+
+* Method Names in Commands::
+* The Print Command with Objective-C::
+
+
+File: gdb.info,  Node: Method Names in Commands,  Next: The Print Command with Objective-C,  Up: Objective-C
+
+15.4.4.1 Method Names in Commands
+.................................
+
+The following commands have been extended to accept Objective-C method
+names as line specifications:
+
+   * 'clear'
+   * 'break'
+   * 'info line'
+   * 'jump'
+   * 'list'
+
+   A fully qualified Objective-C method name is specified as
+
+     -[CLASS METHODNAME]
+
+   where the minus sign is used to indicate an instance method and a
+plus sign (not shown) is used to indicate a class method.  The class
+name CLASS and method name METHODNAME are enclosed in brackets, similar
+to the way messages are specified in Objective-C source code.  For
+example, to set a breakpoint at the 'create' instance method of class
+'Fruit' in the program currently being debugged, enter:
+
+     break -[Fruit create]
+
+   To list ten program lines around the 'initialize' class method,
+enter:
+
+     list +[NSText initialize]
+
+   In the current version of GDB, the plus or minus sign is required.
+In future versions of GDB, the plus or minus sign will be optional, but
+you can use it to narrow the search.  It is also possible to specify
+just a method name:
+
+     break create
+
+   You must specify the complete method name, including any colons.  If
+your program's source files contain more than one 'create' method,
+you'll be presented with a numbered list of classes that implement that
+method.  Indicate your choice by number, or type '0' to exit if none
+apply.
+
+   As another example, to clear a breakpoint established at the
+'makeKeyAndOrderFront:' method of the 'NSWindow' class, enter:
+
+     clear -[NSWindow makeKeyAndOrderFront:]
+
+
+File: gdb.info,  Node: The Print Command with Objective-C,  Prev: Method Names in Commands,  Up: Objective-C
+
+15.4.4.2 The Print Command With Objective-C
+...........................................
+
+The print command has also been extended to accept methods.  For
+example:
+
+     print -[OBJECT hash]
+
+will tell GDB to send the 'hash' message to OBJECT and print the result.
+Also, an additional command has been added, 'print-object' or 'po' for
+short, which is meant to print the description of an object.  However,
+this command may only work with certain Objective-C libraries that have
+a particular hook function, '_NSPrintForDebugger', defined.
+
+
+File: gdb.info,  Node: OpenCL C,  Next: Fortran,  Prev: Objective-C,  Up: Supported Languages
+
+15.4.5 OpenCL C
+---------------
+
+This section provides information about GDBs OpenCL C support.
+
+* Menu:
+
+* OpenCL C Datatypes::
+* OpenCL C Expressions::
+* OpenCL C Operators::
+
+
+File: gdb.info,  Node: OpenCL C Datatypes,  Next: OpenCL C Expressions,  Up: OpenCL C
+
+15.4.5.1 OpenCL C Datatypes
+...........................
+
+GDB supports the builtin scalar and vector datatypes specified by OpenCL
+1.1.  In addition the half- and double-precision floating point data
+types of the 'cl_khr_fp16' and 'cl_khr_fp64' OpenCL extensions are also
+known to GDB.
+
+
+File: gdb.info,  Node: OpenCL C Expressions,  Next: OpenCL C Operators,  Prev: OpenCL C Datatypes,  Up: OpenCL C
+
+15.4.5.2 OpenCL C Expressions
+.............................
+
+GDB supports accesses to vector components including the access as
+lvalue where possible.  Since OpenCL C is based on C99 most C
+expressions supported by GDB can be used as well.
+
+
+File: gdb.info,  Node: OpenCL C Operators,  Prev: OpenCL C Expressions,  Up: OpenCL C
+
+15.4.5.3 OpenCL C Operators
+...........................
+
+GDB supports the operators specified by OpenCL 1.1 for scalar and vector
+data types.
+
+
+File: gdb.info,  Node: Fortran,  Next: Pascal,  Prev: OpenCL C,  Up: Supported Languages
+
+15.4.6 Fortran
+--------------
+
+GDB can be used to debug programs written in Fortran.  Note, that not
+all Fortran language features are available yet.
+
+   Some Fortran compilers (GNU Fortran 77 and Fortran 95 compilers among
+them) append an underscore to the names of variables and functions.
+When you debug programs compiled by those compilers, you will need to
+refer to variables and functions with a trailing underscore.
+
+   Fortran symbols are usually case-insensitive, so GDB by default uses
+case-insensitive matching for Fortran symbols.  You can change that with
+the 'set case-insensitive' command, see *note Symbols::, for the
+details.
+
+* Menu:
+
+* Fortran Types::               Fortran builtin types
+* Fortran Operators::           Fortran operators and expressions
+* Fortran Intrinsics::          Fortran intrinsic functions
+* Special Fortran Commands::    Special GDB commands for Fortran
+
+
+File: gdb.info,  Node: Fortran Types,  Next: Fortran Operators,  Up: Fortran
+
+15.4.6.1 Fortran Types
+......................
+
+In Fortran the primitive data-types have an associated 'KIND' type
+parameter, written as 'TYPE*KINDPARAM', 'TYPE*KINDPARAM', or in the
+GDB-only dialect 'TYPE_KINDPARAM'.  A concrete example would be
+''Real*4'', ''Real(kind=4)'', and ''Real_4''.  The kind of a type can be
+retrieved by using the intrinsic function 'KIND', see *note Fortran
+Intrinsics::.
+
+   Generally, the actual implementation of the 'KIND' type parameter is
+compiler specific.  In GDB the kind parameter is implemented in
+accordance with its use in the GNU 'gfortran' compiler.  Here, the kind
+parameter for a given TYPE specifies its size in memory -- a Fortran
+'Integer*4' or 'Integer(kind=4)' would be an integer type occupying 4
+bytes of memory.  An exception to this rule is the 'Complex' type for
+which the kind of the type does not specify its entire size, but the
+size of each of the two 'Real''s it is composed of.  A 'Complex*4' would
+thus consist of two 'Real*4's and occupy 8 bytes of memory.
+
+   For every type there is also a default kind associated with it,
+e.g. 'Integer' in GDB will internally be an 'Integer*4' (see the table
+below for default types).  The default types are the same as in GNU
+compilers but note, that the GNU default types can actually be changed
+by compiler flags such as '-fdefault-integer-8' and '-fdefault-real-8'.
+
+   Not every kind parameter is valid for every type and in GDB the
+following type kinds are available.
+
+'Integer'
+     'Integer*1', 'Integer*2', 'Integer*4', 'Integer*8', and 'Integer' =
+     'Integer*4'.
+
+'Logical'
+     'Logical*1', 'Logical*2', 'Logical*4', 'Logical*8', and 'Logical' =
+     'Logical*4'.
+
+'Real'
+     'Real*4', 'Real*8', 'Real*16', and 'Real' = 'Real*4'.
+
+'Complex'
+     'Complex*4', 'Complex*8', 'Complex*16', and 'Complex' =
+     'Complex*4'.
+
+
+File: gdb.info,  Node: Fortran Operators,  Next: Fortran Intrinsics,  Prev: Fortran Types,  Up: Fortran
+
+15.4.6.2 Fortran Operators and Expressions
+..........................................
+
+Operators must be defined on values of specific types.  For instance,
+'+' is defined on numbers, but not on characters or other non-
+arithmetic types.  Operators are often defined on groups of types.
+
+'**'
+     The exponentiation operator.  It raises the first operand to the
+     power of the second one.
+
+':'
+     The range operator.  Normally used in the form of array(low:high)
+     to represent a section of array.
+
+'%'
+     The access component operator.  Normally used to access elements in
+     derived types.  Also suitable for unions.  As unions aren't part of
+     regular Fortran, this can only happen when accessing a register
+     that uses a gdbarch-defined union type.
+'::'
+     The scope operator.  Normally used to access variables in modules
+     or to set breakpoints on subroutines nested in modules or in other
+     subroutines (internal subroutines).
+
+
+File: gdb.info,  Node: Fortran Intrinsics,  Next: Special Fortran Commands,  Prev: Fortran Operators,  Up: Fortran
+
+15.4.6.3 Fortran Intrinsics
+...........................
+
+Fortran provides a large set of intrinsic procedures.  GDB implements an
+incomplete subset of those procedures and their overloads.  Some of
+these procedures take an optional 'KIND' parameter, see *note Fortran
+Types::.
+
+'ABS(A)'
+     Computes the absolute value of its argument A.  Currently not
+     supported for 'Complex' arguments.
+
+'ALLOCATE(ARRAY)'
+     Returns whether ARRAY is allocated or not.
+
+'ASSOCIATED(POINTER [, TARGET])'
+     Returns the association status of the pointer POINTER or, if TARGET
+     is present, whether POINTER is associated with the target TARGET.
+
+'CEILING(A [, KIND])'
+     Computes the least integer greater than or equal to A.  The
+     optional parameter KIND specifies the kind of the return type
+     'Integer(KIND)'.
+
+'CMPLX(X [, Y [, KIND]])'
+     Returns a complex number where X is converted to the real
+     component.  If Y is present it is converted to the imaginary
+     component.  If Y is not present then the imaginary component is set
+     to '0.0' except if X itself is of 'Complex' type.  The optional
+     parameter KIND specifies the kind of the return type
+     'Complex(KIND)'.
+
+'FLOOR(A [, KIND])'
+     Computes the greatest integer less than or equal to A.  The
+     optional parameter KIND specifies the kind of the return type
+     'Integer(KIND)'.
+
+'KIND(A)'
+     Returns the kind value of the argument A, see *note Fortran
+     Types::.
+
+'LBOUND(ARRAY [, DIM [, KIND]])'
+     Returns the lower bounds of an ARRAY, or a single lower bound along
+     the DIM dimension if present.  The optional parameter KIND
+     specifies the kind of the return type 'Integer(KIND)'.
+
+'LOC(X)'
+     Returns the address of X as an 'Integer'.
+
+'MOD(A, P)'
+     Computes the remainder of the division of A by P.
+
+'MODULO(A, P)'
+     Computes the A modulo P.
+
+'RANK(A)'
+     Returns the rank of a scalar or array (scalars have rank '0').
+
+'SHAPE(A)'
+     Returns the shape of a scalar or array (scalars have shape '()').
+
+'SIZE(ARRAY[, DIM [, KIND]])'
+     Returns the extent of ARRAY along a specified dimension DIM, or the
+     total number of elements in ARRAY if DIM is absent.  The optional
+     parameter KIND specifies the kind of the return type
+     'Integer(KIND)'.
+
+'UBOUND(ARRAY [, DIM [, KIND]])'
+     Returns the upper bounds of an ARRAY, or a single upper bound along
+     the DIM dimension if present.  The optional parameter KIND
+     specifies the kind of the return type 'Integer(KIND)'.
+
+
+File: gdb.info,  Node: Special Fortran Commands,  Prev: Fortran Intrinsics,  Up: Fortran
+
+15.4.6.4 Special Fortran Commands
+.................................
+
+GDB has some commands to support Fortran-specific features, such as
+displaying common blocks.
+
+'info common [COMMON-NAME]'
+     This command prints the values contained in the Fortran 'COMMON'
+     block whose name is COMMON-NAME.  With no argument, the names of
+     all 'COMMON' blocks visible at the current program location are
+     printed.
+'set fortran repack-array-slices [on|off]'
+'show fortran repack-array-slices'
+     When taking a slice from an array, a Fortran compiler can choose to
+     either produce an array descriptor that describes the slice in
+     place, or it may repack the slice, copying the elements of the
+     slice into a new region of memory.
+
+     When this setting is on, then GDB will also repack array slices in
+     some situations.  When this setting is off, then GDB will create
+     array descriptors for slices that reference the original data in
+     place.
+
+     GDB will never repack an array slice if the data for the slice is
+     contiguous within the original array.
+
+     GDB will always repack string slices if the data for the slice is
+     non-contiguous within the original string as GDB does not support
+     printing non-contiguous strings.
+
+     The default for this setting is 'off'.
+
+
+File: gdb.info,  Node: Pascal,  Next: Rust,  Prev: Fortran,  Up: Supported Languages
+
+15.4.7 Pascal
+-------------
+
+Debugging Pascal programs which use sets, subranges, file variables, or
+nested functions does not currently work.  GDB does not support entering
+expressions, printing values, or similar features using Pascal syntax.
+
+   The Pascal-specific command 'set print pascal_static-members'
+controls whether static members of Pascal objects are displayed.  *Note
+pascal_static-members: Print Settings.
+
+
+File: gdb.info,  Node: Rust,  Next: Modula-2,  Prev: Pascal,  Up: Supported Languages
+
+15.4.8 Rust
+-----------
+
+GDB supports the Rust Programming Language (https://www.rust-lang.org/).
+Type- and value-printing, and expression parsing, are reasonably
+complete.  However, there are a few peculiarities and holes to be aware
+of.
+
+   * Linespecs (*note Location Specifications::) are never relative to
+     the current crate.  Instead, they act as if there were a global
+     namespace of crates, somewhat similar to the way 'extern crate'
+     behaves.
+
+     That is, if GDB is stopped at a breakpoint in a function in crate
+     'A', module 'B', then 'break B::f' will attempt to set a breakpoint
+     in a function named 'f' in a crate named 'B'.
+
+     As a consequence of this approach, linespecs also cannot refer to
+     items using 'self::' or 'super::'.
+
+   * Because GDB implements Rust name-lookup semantics in expressions,
+     it will sometimes prepend the current crate to a name.  For
+     example, if GDB is stopped at a breakpoint in the crate 'K', then
+     'print ::x::y' will try to find the symbol 'K::x::y'.
+
+     However, since it is useful to be able to refer to other crates
+     when debugging, GDB provides the 'extern' extension to circumvent
+     this.  To use the extension, just put 'extern' before a path
+     expression to refer to the otherwise unavailable "global" scope.
+
+     In the above example, if you wanted to refer to the symbol 'y' in
+     the crate 'x', you would use 'print extern x::y'.
+
+   * The Rust expression evaluator does not support "statement-like"
+     expressions such as 'if' or 'match', or lambda expressions.
+
+   * Tuple expressions are not implemented.
+
+   * The Rust expression evaluator does not currently implement the
+     'Drop' trait.  Objects that may be created by the evaluator will
+     never be destroyed.
+
+   * GDB does not implement type inference for generics.  In order to
+     call generic functions or otherwise refer to generic items, you
+     will have to specify the type parameters manually.
+
+   * GDB currently uses the C++ demangler for Rust.  In most cases this
+     does not cause any problems.  However, in an expression context,
+     completing a generic function name will give syntactically invalid
+     results.  This happens because Rust requires the '::' operator
+     between the function name and its generic arguments.  For example,
+     GDB might provide a completion like 'crate::f<u32>', where the
+     parser would require 'crate::f::<u32>'.
+
+   * As of this writing, the Rust compiler (version 1.8) has a few holes
+     in the debugging information it generates.  These holes prevent
+     certain features from being implemented by GDB:
+
+        * Method calls cannot be made via traits.
+
+        * Operator overloading is not implemented.
+
+        * When debugging in a monomorphized function, you cannot use the
+          generic type names.
+
+        * The type 'Self' is not available.
+
+        * 'use' statements are not available, so some names may not be
+          available in the crate.
+
+
 File: gdb.info,  Node: Modula-2,  Next: Ada,  Prev: Rust,  Up: Supported Languages
 
 15.4.9 Modula-2
@@ -589,7 +1901,7 @@ difficult.
 * Ada Tasks and Core Files::    Tasking Support when Debugging Core Files
 * Ravenscar Profile::           Tasking Support when using the Ravenscar
                                    Profile
-* Ada Settings::                New settable GDB parameters for Ada.
+* Ada Source Character Set::    Character set of Ada source files.
 * Ada Glitches::                Known peculiarities of Ada mode.
 
 
@@ -655,9 +1967,7 @@ Here are the notable omissions from the
 
         - 'Address.
 
-   * The names in 'Characters.Latin_1' are not available and
-     concatenation is not implemented.  Thus, escape characters in
-     strings are not currently available.
+   * The names in 'Characters.Latin_1' are not available.
 
    * Equality tests ('=' and '/=') on arrays test for bitwise equality
      of representations.  They will generally work correctly for strings
@@ -734,6 +2044,8 @@ Here are the notable omissions from the
      or procedure (at best a dubious practice), you will have to use
      fully qualified names to access their new definitions.
 
+   * Based real literals are not implemented.
+
 
 File: gdb.info,  Node: Additions to Ada,  Next: Overloading support for Ada,  Prev: Omissions from Ada,  Up: Ada
 
@@ -778,6 +2090,16 @@ additions specific to Ada:
           (gdb) break f
           (gdb) condition 1 (report(i); k += 1; A(k) > 100)
 
+   * An extension to based literals can be used to specify the exact
+     byte contents of a floating-point literal.  After the base, you can
+     use from zero to two 'l' characters, followed by an 'f'.  The
+     number of 'l' characters controls the width of the resulting real
+     constant: zero means 'Float' is used, one means 'Long_Float', and
+     two means 'Long_Long_Float'.
+
+          (gdb) print 16f#41b80000#
+          $1 = 23.0
+
    * Rather than use catenation and symbolic character names to
      introduce special characters into strings, one may instead use a
      special bracket notation, which is also used to print strings.  A
@@ -968,7 +2290,7 @@ Threads::).  GDB provides the following
                The task is waiting for created tasks to complete
                activation.
 
-          'Accept Statement'
+          'Accept or Select Term'
                The task is waiting on an accept or selective wait
                statement.
 
@@ -993,14 +2315,28 @@ Threads::).  GDB provides the following
                The task is sleeping waiting for tasks on terminate
                alternatives to finish terminating.
 
+          'Asynchronous Hold'
+               The task has been held by
+               'Ada.Asynchronous_Task_Control.Hold_Task'.
+
+          'Activating'
+               The task has been created and is being made runnable.
+
+          'Selective Wait'
+               The task is waiting in a selective wait statement.
+
           'Accepting RV with TASKNO'
                The task is accepting a rendez-vous with the task TASKNO.
 
+          'Waiting on RV with TASKNO'
+               The task is waiting for a rendez-vous with the task
+               TASKNO.
+
      Name
           Name of the task in the program.
 
 'info task TASKNO'
-     This command shows detailed informations on the specified task, as
+     This command shows detailed information on the specified task, as
      in the following example:
           (gdb) info tasks
             ID       TID P-ID Pri State                  Name
@@ -1044,11 +2380,43 @@ Threads::).  GDB provides the following
           #3  0x806153e in system.tasking.stages.activate_tasks ()
           #4  0x804aacc in un () at un.adb:5
 
-'break LOCATION task TASKNO'
-'break LOCATION task TASKNO if ...'
+'task apply [TASK-ID-LIST | all] [FLAG]... COMMAND'
+     The 'task apply' command is the Ada tasking analogue of 'thread
+     apply' (*note Threads::).  It allows you to apply the named COMMAND
+     to one or more tasks.  Specify the tasks that you want affected
+     using a list of task IDs, or specify 'all' to apply to all tasks.
+
+     The FLAG arguments control what output to produce and how to handle
+     errors raised when applying COMMAND to a task.  FLAG must start
+     with a '-' directly followed by one letter in 'qcs'.  If several
+     flags are provided, they must be given individually, such as '-c
+     -q'.
+
+     By default, GDB displays some task information before the output
+     produced by COMMAND, and an error raised during the execution of a
+     COMMAND will abort 'task apply'.  The following flags can be used
+     to fine-tune this behavior:
+
+     '-c'
+          The flag '-c', which stands for 'continue', causes any errors
+          in COMMAND to be displayed, and the execution of 'task apply'
+          then continues.
+     '-s'
+          The flag '-s', which stands for 'silent', causes any errors or
+          empty output produced by a COMMAND to be silently ignored.
+          That is, the execution continues, but the task information and
+          errors are not printed.
+     '-q'
+          The flag '-q' ('quiet') disables printing the task
+          information.
+
+     Flags '-c' and '-s' cannot be used together.
+
+'break LOCSPEC task TASKNO'
+'break LOCSPEC task TASKNO if ...'
      These commands are like the 'break ... thread ...' command (*note
-     Thread Stops::).  The LOCATION argument specifies source lines, as
-     described in *note Specify Location::.
+     Thread Stops::).  *Note Location Specifications::, for the various
+     forms of LOCSPEC.
 
      Use the qualifier 'task TASKNO' with a breakpoint command to
      specify that you only want GDB to stop the program when a
@@ -1106,7 +2474,7 @@ Under these circumstances, you should ma
 file before inspecting it with GDB.
 
 
-File: gdb.info,  Node: Ravenscar Profile,  Next: Ada Settings,  Prev: Ada Tasks and Core Files,  Up: Ada
+File: gdb.info,  Node: Ravenscar Profile,  Next: Ada Source Character Set,  Prev: Ada Tasks and Core Files,  Up: Ada
 
 15.4.10.9 Tasking Support when using the Ravenscar Profile
 ..........................................................
@@ -1131,38 +2499,51 @@ requirements.
      Show whether it is possible to switch from task to task in a
      program using the Ravenscar Profile.
 
+   When Ravenscar task-switching is enabled, Ravenscar tasks are
+announced by GDB as if they were threads:
+
+     (gdb) continue
+     [New Ravenscar Thread 0x2b8f0]
+
+   Both Ravenscar tasks and the underlying CPU threads will show up in
+the output of 'info threads':
+
+     (gdb) info threads
+       Id   Target Id                  Frame
+       1    Thread 1 (CPU#0 [running]) simple () at simple.adb:10
+       2    Thread 2 (CPU#1 [running]) 0x0000000000003d34 in __gnat_initialize_cpu_devices ()
+       3    Thread 3 (CPU#2 [running]) 0x0000000000003d28 in __gnat_initialize_cpu_devices ()
+       4    Thread 4 (CPU#3 [halted ]) 0x000000000000c6ec in system.task_primitives.operations.idle ()
+     * 5    Ravenscar Thread 0x2b8f0   simple () at simple.adb:10
+       6    Ravenscar Thread 0x2f150   0x000000000000c6ec in system.task_primitives.operations.idle ()
+
+   One known limitation of the Ravenscar support in GDB is that it isn't
+currently possible to single-step through the runtime initialization
+sequence.  If you need to debug this code, you should use 'set ravenscar
+task-switching off'.
+
 
-File: gdb.info,  Node: Ada Settings,  Next: Ada Glitches,  Prev: Ravenscar Profile,  Up: Ada
+File: gdb.info,  Node: Ada Source Character Set,  Next: Ada Glitches,  Prev: Ravenscar Profile,  Up: Ada
 
-15.4.10.10 Ada Settings
-.......................
+15.4.10.10 Ada Source Character Set
+...................................
+
+The GNAT compiler supports a number of character sets for source files.
+*Note Character Set Control: (gnat_ugn)Character Set Control.  GDB
+includes support for this as well.
+
+'set ada source-charset CHARSET'
+     Set the source character set for Ada.  The character set must be
+     supported by GNAT. Because this setting affects the decoding of
+     symbols coming from the debug information in your program, the
+     setting should be set as early as possible.  The default is
+     'ISO-8859-1', because that is also GNAT's default.
 
-'set varsize-limit SIZE'
-     Prevent GDB from attempting to evaluate objects whose size is above
-     the given limit (SIZE) when those sizes are computed from run-time
-     quantities.  This is typically the case when the object has a
-     variable size, such as an array whose bounds are not known at
-     compile time for example.  Setting SIZE to 'unlimited' removes the
-     size limitation.  By default, the limit is about 65KB.
-
-     The purpose of having such a limit is to prevent GDB from trying to
-     grab enormous chunks of virtual memory when asked to evaluate a
-     quantity whose bounds have been corrupted or have not yet been
-     fully initialized.  The limit applies to the results of some
-     subexpressions as well as to complete expressions.  For example, an
-     expression denoting a simple integer component, such as 'x.y.z',
-     may fail if the size of 'x.y' is variable and exceeds 'size'.  On
-     the other hand, GDB is sometimes clever; the expression 'A(i)',
-     where 'A' is an array variable with non-constant size, will
-     generally succeed regardless of the bounds on 'A', as long as the
-     component size is less than SIZE.
-
-'show varsize-limit'
-     Show the limit on types whose size is determined by run-time
-     quantities.
+'show ada source-charset'
+     Show the current source character set for Ada.
 
 
-File: gdb.info,  Node: Ada Glitches,  Prev: Ada Settings,  Up: Ada
+File: gdb.info,  Node: Ada Glitches,  Prev: Ada Source Character Set,  Up: Ada
 
 15.4.10.11 Known Peculiarities of Ada Mode
 ..........................................
@@ -1342,6 +2723,19 @@ looks up the value of 'x' in the scope o
      This command shows the current setting of typedef display when
      printing classes.
 
+'set print type hex'
+'set print type hex on'
+'set print type hex off'
+
+     When GDB prints sizes and offsets of struct members, it can use
+     either the decimal or hexadecimal notation.  You can select one or
+     the other either by passing the appropriate flag to 'ptype', or by
+     using the 'set print type hex' command.
+
+'show print type hex'
+     This command shows whether the sizes and offsets of struct members
+     are printed in decimal or hexadecimal notation.
+
 'info address SYMBOL'
      Describe where the data for SYMBOL is stored.  For a register
      variable, this says which register it is kept in.  For a
@@ -1442,6 +2836,14 @@ looks up the value of 'x' in the scope o
           what the 'pahole' tool does.  This option implies the '/tm'
           flags.
 
+     'x'
+          Use hexadecimal notation when printing offsets and sizes of
+          fields in a struct.
+
+     'd'
+          Use decimal notation when printing offsets and sizes of fields
+          in a struct.
+
           For example, given the following declarations:
 
                struct tuv
@@ -1479,14 +2881,14 @@ looks up the value of 'x' in the scope o
           Issuing a 'ptype /o struct tuv' command would print:
 
                (gdb) ptype /o struct tuv
-               /* offset    |  size */  type = struct tuv {
-               /*    0      |     4 */    int a1;
-               /* XXX  4-byte hole  */
-               /*    8      |     8 */    char *a2;
-               /*   16      |     4 */    int a3;
+               /* offset      |    size */  type = struct tuv {
+               /*      0      |       4 */    int a1;
+               /* XXX  4-byte hole      */
+               /*      8      |       8 */    char *a2;
+               /*     16      |       4 */    int a3;
 
-                                          /* total size (bytes):   24 */
-                                        }
+                                              /* total size (bytes):   24 */
+                                            }
 
           Notice the format of the first column of comments.  There, you
           can find two parts separated by the '|' character: the
@@ -1499,34 +2901,34 @@ looks up the value of 'x' in the scope o
           It is also possible to print offsets inside an union:
 
                (gdb) ptype /o union qwe
-               /* offset    |  size */  type = union qwe {
-               /*                24 */    struct tuv {
-               /*    0      |     4 */        int a1;
-               /* XXX  4-byte hole  */
-               /*    8      |     8 */        char *a2;
-               /*   16      |     4 */        int a3;
-
-                                              /* total size (bytes):   24 */
-                                          } fff1;
-               /*                40 */    struct xyz {
-               /*    0      |     4 */        int f1;
-               /*    4      |     1 */        char f2;
-               /* XXX  3-byte hole  */
-               /*    8      |     8 */        void *f3;
-               /*   16      |    24 */        struct tuv {
-               /*   16      |     4 */            int a1;
-               /* XXX  4-byte hole  */
-               /*   24      |     8 */            char *a2;
-               /*   32      |     4 */            int a3;
+               /* offset      |    size */  type = union qwe {
+               /*                    24 */    struct tuv {
+               /*      0      |       4 */        int a1;
+               /* XXX  4-byte hole      */
+               /*      8      |       8 */        char *a2;
+               /*     16      |       4 */        int a3;
 
                                                   /* total size (bytes):   24 */
-                                              } f4;
+                                              } fff1;
+               /*                    40 */    struct xyz {
+               /*      0      |       4 */        int f1;
+               /*      4      |       1 */        char f2;
+               /* XXX  3-byte hole      */
+               /*      8      |       8 */        void *f3;
+               /*     16      |      24 */        struct tuv {
+               /*     16      |       4 */            int a1;
+               /* XXX  4-byte hole      */
+               /*     24      |       8 */            char *a2;
+               /*     32      |       4 */            int a3;
 
-                                              /* total size (bytes):   40 */
-                                          } fff2;
+                                                      /* total size (bytes):   24 */
+                                                  } f4;
 
-                                          /* total size (bytes):   40 */
-                                        }
+                                                  /* total size (bytes):   40 */
+                                              } fff2;
+
+                                              /* total size (bytes):   40 */
+                                            }
 
           In this case, since 'struct tuv' and 'struct xyz' occupy the
           same space (because we are dealing with an union), the offset
@@ -1537,20 +2939,20 @@ looks up the value of 'x' in the scope o
           containing bitfields:
 
                (gdb) ptype /o struct tyu
-               /* offset    |  size */  type = struct tyu {
-               /*    0:31   |     4 */    int a1 : 1;
-               /*    0:28   |     4 */    int a2 : 3;
-               /*    0: 5   |     4 */    int a3 : 23;
-               /*    3: 3   |     1 */    signed char a4 : 2;
-               /* XXX  3-bit hole   */
-               /* XXX  4-byte hole  */
-               /*    8      |     8 */    int64_t a5;
-               /*   16: 0   |     4 */    int a6 : 5;
-               /*   16: 5   |     8 */    int64_t a7 : 3;
-               "/* XXX  7-byte padding  */
+               /* offset      |    size */  type = struct tyu {
+               /*      0:31   |       4 */    int a1 : 1;
+               /*      0:28   |       4 */    int a2 : 3;
+               /*      0: 5   |       4 */    int a3 : 23;
+               /*      3: 3   |       1 */    signed char a4 : 2;
+               /* XXX  3-bit hole       */
+               /* XXX  4-byte hole      */
+               /*      8      |       8 */    int64_t a5;
+               /*     16: 0   |       4 */    int a6 : 5;
+               /*     16: 5   |       8 */    int64_t a7 : 3;
+               /* XXX  7-byte padding   */
 
-                                          /* total size (bytes):   24 */
-                                        }
+                                              /* total size (bytes):   24 */
+                                            }
 
           Note how the offset information is now extended to also
           include the first bit of the bitfield.
@@ -1672,12 +3074,11 @@ looks up the value of 'x' in the scope o
 'disable type-printer NAME...'
      These commands can be used to enable or disable type printers.
 
-'info scope LOCATION'
-     List all the variables local to a particular scope.  This command
-     accepts a LOCATION argument--a function name, a source line, or an
-     address preceded by a '*', and prints all the variables local to
-     the scope defined by that location.  (*Note Specify Location::, for
-     details about supported forms of LOCATION.)  For example:
+'info scope LOCSPEC'
+     List all the variables local to the lexical scope of the code
+     location that results from resolving LOCSPEC.  *Note Location
+     Specifications::, for details about supported forms of LOCSPEC.
+     For example:
 
           (gdb) info scope command_line_handler
           Scope for command_line_handler:
@@ -1709,20 +3110,34 @@ looks up the value of 'x' in the scope o
         * whether the debugging information includes information about
           preprocessor macros.
 
-'info sources'
-     Print the names of all source files in your program for which there
-     is debugging information, organized into two lists: files whose
-     symbols have already been read, and files whose symbols will be
-     read when needed.
-
 'info sources [-dirname | -basename] [--] [REGEXP]'
-     Like 'info sources', but only print the names of the files matching
-     the provided REGEXP.  By default, the REGEXP is used to match
-     anywhere in the filename.  If '-dirname', only files having a
-     dirname matching REGEXP are shown.  If '-basename', only files
-     having a basename matching REGEXP are shown.  The matching is
+
+     With no options 'info sources' prints the names of all source files
+     in your program for which there is debugging information.  The
+     source files are presented based on a list of object files
+     (executables and libraries) currently loaded into GDB.  For each
+     object file all of the associated source files are listed.
+
+     Each source file will only be printed once for each object file,
+     but a single source file can be repeated in the output if it is
+     part of multiple object files.
+
+     If the optional REGEXP is provided, then only source files that
+     match the regular expression will be printed.  The matching is
      case-sensitive, except on operating systems that have
-     case-insensitive filesystem (e.g., MS-Windows).
+     case-insensitive filesystem (e.g., MS-Windows).  '--' can be used
+     before REGEXP to prevent GDB interpreting REGEXP as a command
+     option (e.g.  if REGEXP starts with '-').
+
+     By default, the REGEXP is used to match anywhere in the filename.
+     If '-dirname', only files having a dirname matching REGEXP are
+     shown.  If '-basename', only files having a basename matching
+     REGEXP are shown.
+
+     It is possible that an object file may be printed in the list with
+     no associated source files.  This can happen when either no source
+     files match REGEXP, or, the object file was compiled without debug
+     information and so GDB is unable to find any source file names.
 
 'info functions [-q] [-n]'
      Print the names and data types of all defined functions.  Similarly
@@ -1827,6 +3242,11 @@ looks up the value of 'x' in the scope o
      header information and messages explaining why no functions or
      variables have been printed.
 
+'info main'
+     Print the name of the starting function of the program.  This
+     serves primarily Fortran programs, which have a user-supplied name
+     for the main subroutine.
+
 'info classes'
 'info classes REGEXP'
      Display all Objective-C classes in your program, or (with the
@@ -1953,7 +3373,40 @@ looks up the value of 'x' in the scope o
 
      List the 'struct linetable' from all 'struct symtab' instances
      whose name matches REGEXP.  If REGEXP is not given, list the
-     'struct linetable' from all 'struct symtab'.
+     'struct linetable' from all 'struct symtab'.  For example:
+
+          (gdb) maint info line-table
+          objfile: /home/gnu/build/a.out ((struct objfile *) 0x6120000e0d40)
+          compunit_symtab: simple.cpp ((struct compunit_symtab *) 0x6210000ff450)
+          symtab: /home/gnu/src/simple.cpp ((struct symtab *) 0x6210000ff4d0)
+          linetable: ((struct linetable *) 0x62100012b760):
+          INDEX  LINE   ADDRESS            IS-STMT PROLOGUE-END EPILOGUE-BEGIN
+          0      3      0x0000000000401110 Y
+          1      4      0x0000000000401114 Y       Y            Y
+          2      9      0x0000000000401120 Y
+          3      10     0x0000000000401124 Y       Y
+          4      10     0x0000000000401129 Y                    Y
+          5      15     0x0000000000401130 Y
+          6      16     0x0000000000401134 Y       Y
+          7      16     0x0000000000401139
+          8      21     0x0000000000401140 Y                    Y
+          9      22     0x000000000040114f Y       Y
+          10     22     0x0000000000401154                      Y
+          11     END    0x000000000040115a Y
+     The 'IS-STMT' column indicates if the address is a recommended
+     breakpoint location to represent a line or a statement.  The
+     'PROLOGUE-END' column indicates that a given address is an adequate
+     place to set a breakpoint at the first instruction following a
+     function prologue.  The 'EPILOGUE-BEGIN' column indicates that a
+     given address marks the point where a block's frame is destroyed,
+     making local variables hard or impossible to find.
+
+'set always-read-ctf [on|off]'
+'show always-read-ctf'
+
+     When off, CTF debug info is only read if DWARF debug info is not
+     present.  When on, CTF debug info is read regardless of whether
+     DWARF debug info is present.  The default value is off.
 
 'maint set symbol-cache-size SIZE'
      Set the size of the symbol cache to SIZE.  The default size is
@@ -1971,10 +3424,23 @@ looks up the value of 'x' in the scope o
      Print symbol cache usage statistics.  This helps determine how well
      the cache is being utilized.
 
+'maint flush symbol-cache'
 'maint flush-symbol-cache'
      Flush the contents of the symbol cache, all entries are removed.
      This command is useful when debugging the symbol cache.  It is also
-     useful when collecting performance data.
+     useful when collecting performance data.  The command 'maint
+     flush-symbol-cache' is deprecated in favor of 'maint flush
+     symbol-cache'..
+
+'maint set ignore-prologue-end-flag [on|off]'
+     Enable or disable the use of the 'PROLOGUE-END' flag from the
+     line-table.  When 'off' (the default), GDB uses the 'PROLOGUE-END'
+     flag to place breakpoints past the end of a function prologue.
+     When 'on', GDB ignores the flag and relies on prologue analyzers to
+     skip function prologues.
+
+'maint show ignore-prologue-end-flag'
+     Show whether GDB will ignore the 'PROLOGUE-END' flag.
 
 
 File: gdb.info,  Node: Altering,  Next: GDB Files,  Prev: Symbols,  Up: Top
@@ -2096,24 +3562,29 @@ Ordinarily, when you continue your progr
 it stopped, with the 'continue' command.  You can instead continue at an
 address of your own choosing, with the following commands:
 
-'jump LOCATION'
-'j LOCATION'
-     Resume execution at LOCATION.  Execution stops again immediately if
-     there is a breakpoint there.  *Note Specify Location::, for a
-     description of the different forms of LOCATION.  It is common
-     practice to use the 'tbreak' command in conjunction with 'jump'.
-     *Note Setting Breakpoints: Set Breaks.
+'jump LOCSPEC'
+'j LOCSPEC'
+     Resume execution at the address of the code location that results
+     from resolving LOCSPEC.  *Note Location Specifications::, for a
+     description of the different forms of LOCSPEC.  If LOCSPEC resolves
+     to more than one address, those outside the current compilation
+     unit are ignored.  If considering just the addresses in the current
+     compilation unit still doesn't yield a unique address, the command
+     aborts before jumping.  Execution stops again immediately if there
+     is a breakpoint there.  It is common practice to use the 'tbreak'
+     command in conjunction with 'jump'.  *Note Setting Breakpoints: Set
+     Breaks.
 
      The 'jump' command does not change the current stack frame, or the
      stack pointer, or the contents of any memory location or any
-     register other than the program counter.  If LOCATION is in a
-     different function from the one currently executing, the results
-     may be bizarre if the two functions expect different patterns of
-     arguments or of local variables.  For this reason, the 'jump'
-     command requests confirmation if the specified line is not in the
-     function currently executing.  However, even bizarre results are
-     predictable if you are well acquainted with the machine-language
-     code of your program.
+     register other than the program counter.  If LOCSPEC resolves to an
+     address in a different function from the one currently executing,
+     the results may be bizarre if the two functions expect different
+     patterns of arguments or of local variables.  For this reason, the
+     'jump' command requests confirmation if the jump address is not in
+     the function currently executing.  However, even bizarre results
+     are predictable if you are well acquainted with the
+     machine-language code of your program.
 
    On many systems, you can get much the same effect as the 'jump'
 command by storing a new value into the register '$pc'.  The difference
@@ -2126,6 +3597,13 @@ makes the next 'continue' command or ste
 '0x485', rather than at the address where your program stopped.  *Note
 Continuing and Stepping: Continuing and Stepping.
 
+   However, writing directly to '$pc' will only change the value of the
+program-counter register, while using 'jump' will ensure that any
+additional auxiliary state is also updated.  For example, on SPARC,
+'jump' will update both '$pc' and '$npc' registers prior to resuming
+execution.  When using the approach of writing directly to '$pc' it is
+your job to also update the '$npc' register.
+
    The most common occasion to use the 'jump' command is to back
 up--perhaps with more breakpoints set--over a portion of a program that
 has already executed, in order to examine its execution in more detail.
@@ -2337,6 +3815,34 @@ controlled by the 'set unwind-on-termina
 'show may-call-functions'
      Show permission to call functions in the program.
 
+   When calling a function within a program, it is possible that the
+program could enter a state from which the called function may never
+return.  If this happens then it is possible to interrupt the function
+call by typing the interrupt character (often 'Ctrl-c').
+
+   If a called function is interrupted for any reason, including hitting
+a breakpoint, or triggering a watchpoint, and the stack is not unwound
+due to 'set unwind-on-terminating-exception on' or 'set unwindonsignal
+on' (*note stack unwind settings::), then the dummy-frame, created by
+GDB to facilitate the call to the program function, will be visible in
+the backtrace, for example frame '#3' in the following backtrace:
+
+     (gdb) backtrace
+     #0  0x00007ffff7b3d1e7 in nanosleep () from /lib64/libc.so.6
+     #1  0x00007ffff7b3d11e in sleep () from /lib64/libc.so.6
+     #2  0x000000000040113f in deadlock () at test.cc:13
+     #3  <function called from gdb>
+     #4  breakpt () at test.cc:20
+     #5  0x0000000000401151 in main () at test.cc:25
+
+   At this point it is possible to examine the state of the inferior
+just like any other stop.
+
+   Depending on why the function was interrupted then it may be possible
+to resume the inferior (using commands like 'continue', 'step', etc).
+In this case, when the inferior finally returns to the dummy-frame, GDB
+will once again halt the inferior.
+
 17.5.1 Calling functions with no debug info
 -------------------------------------------
 
@@ -2747,6 +4253,7 @@ the core dump file.
 * Separate Debug Files::        Debugging information in separate files
 * MiniDebugInfo::               Debugging information in a special section
 * Index Files::                 Index files speed up GDB
+* Debug Names::                 Extensions to .debug_names
 * Symbol Errors::               Errors reading symbol files
 * Data Files::                  GDB data files
 
@@ -2935,7 +4442,7 @@ files are useful.
           add symbol table from file "/home/user/gdb/mylib.so" at
               .text_addr = 0x7ffff7ff9480
           (y or n) y
-          Reading symbols from /home/user/gdb/mylib.so...done.
+          Reading symbols from /home/user/gdb/mylib.so...
           (gdb) remove-symbol-file -a 0x7ffff7ff9480
           Remove symbol table from file "/home/user/gdb/mylib.so"? (y or n) y
           (gdb)
@@ -2970,22 +4477,25 @@ files are useful.
      command 'help target' lists all possible targets rather than
      current ones.
 
-'maint info sections'
+'maint info sections [-all-objects] [FILTER-LIST]'
      Another command that can give you extra information about program
      sections is 'maint info sections'.  In addition to the section
      information displayed by 'info files', this command displays the
      flags and file offset of each section in the executable and core
-     dump files.  In addition, 'maint info sections' provides the
-     following command options (which may be arbitrarily combined):
+     dump files.
+
+     When '-all-objects' is passed then sections from all loaded object
+     files, including shared libraries, are printed.
 
-     'ALLOBJ'
-          Display sections for all loaded object files, including shared
-          libraries.
-     'SECTIONS'
-          Display info only for named SECTIONS.
-     'SECTION-FLAGS'
-          Display info only for sections for which SECTION-FLAGS are
-          true.  The section flags that GDB currently knows about are:
+     The optional FILTER-LIST is a space separated list of filter
+     keywords.  Sections that match any one of the filter criteria will
+     be printed.  There are two types of filter:
+
+     'SECTION-NAME'
+          Display information about any section named SECTION-NAME.
+     'SECTION-FLAG'
+          Display information for any section with SECTION-FLAG.  The
+          section flags that GDB currently knows about are:
           'ALLOC'
                Section will have space allocated in the process when
                loaded.  Set for all sections except those containing
@@ -3015,6 +4525,13 @@ files are useful.
                COFF shared library information.
           'IS_COMMON'
                Section contains common symbols.
+
+'maint info target-sections'
+     This command prints GDB's internal section table.  For each target
+     GDB maintains a table containing the allocatable sections from all
+     currently mapped objects, along with information about where the
+     section is mapped.
+
 'set trust-readonly-sections on'
      Tell GDB that readonly sections in your object file really are
      read-only (i.e. that their contents will not change).  In that
@@ -3107,9 +4624,9 @@ command:
 of shared library events happen.  The best way to do this is to use
 'catch load' and 'catch unload' (*note Set Catchpoints::).
 
-   GDB also supports the the 'set stop-on-solib-events' command for
-this.  This command exists for historical reasons.  It is less useful
-than setting a catchpoint, because it does not allow for conditions or
+   GDB also supports the 'set stop-on-solib-events' command for this.
+This command exists for historical reasons.  It is less useful than
+setting a catchpoint, because it does not allow for conditions or
 commands as a catchpoint does.
 
 'set stop-on-solib-events'
@@ -3160,11 +4677,11 @@ directories for target libraries.
      to be named 'target:' or 'remote:', you need to use some equivalent
      variant of the name like './target:'.
 
-     For targets with an MS-DOS based filesystem, such as MS-Windows and
-     SymbianOS, GDB tries prefixing a few variants of the target
-     absolute file name with PATH.  But first, on Unix hosts, GDB
-     converts all backslash directory separators into forward slashes,
-     because the backslash is not a directory separator on Unix:
+     For targets with an MS-DOS based filesystem, such as MS-Windows,
+     GDB tries prefixing a few variants of the target absolute file name
+     with PATH.  But first, on Unix hosts, GDB converts all backslash
+     directory separators into forward slashes, because the backslash is
+     not a directory separator on Unix:
 
             c:\foo\bar.dll => c:/foo/bar.dll
 
@@ -3378,7 +4895,9 @@ different methods of looking for the deb
      named 'NN/NNNNNNNN.debug', where NN are the first 2 hex characters
      of the build ID bit string, and NNNNNNNN are the rest of the bit
      string.  (Real build ID strings are 32 or more hex characters, not
-     10.)
+     10.)  GDB can automatically query 'debuginfod' servers using build
+     IDs in order to download separate debug files that cannot be found
+     locally.  For more information see *note Debuginfod::.
 
    So, for example, suppose you ask GDB to debug '/usr/bin/ls', which
 has a debug link that specifies the file 'ls.debug', and a build ID
@@ -3391,10 +4910,15 @@ following debug information files, in th
    - '/usr/bin/.debug/ls.debug'
    - '/usr/lib/debug/usr/bin/ls.debug'.
 
+   If the debug file still has not been found and 'debuginfod' (*note
+Debuginfod::) is enabled, GDB will attempt to download the file from
+'debuginfod' servers.
+
    Global debugging info directories default to what is set by GDB
-configure option '--with-separate-debug-dir'.  During GDB run you can
-also set the global debugging info directories, and view the list GDB is
-currently using.
+configure option '--with-separate-debug-dir' and augmented by the
+colon-separated list of directories provided via GDB configure option
+'--additional-debug-dirs'.  During GDB run you can also set the global
+debugging info directories, and view the list GDB is currently using.
 
 'set debug-file-directory DIRECTORIES'
      Set the directories which GDB searches for separate debugging
@@ -3616,7 +5140,7 @@ utilities:
      objcopy --add-section .gnu_debugdata=mini_debuginfo.xz BINARY
 
 
-File: gdb.info,  Node: Index Files,  Next: Symbol Errors,  Prev: MiniDebugInfo,  Up: GDB Files
+File: gdb.info,  Node: Index Files,  Next: Debug Names,  Prev: MiniDebugInfo,  Up: GDB Files
 
 18.5 Index Files Speed Up GDB
 =============================
@@ -3683,21 +5207,19 @@ done before gdb reads the file.  The fol
 
      $ gdb -iex "set use-deprecated-index-sections on" <program>
 
-   There are currently some limitation on indices.  They only work when
-using DWARF debugging information, not stabs.  And, only the '-dwarf-5'
-index works for programs using Ada.
+   Indices only work when using DWARF debugging information, not stabs.
 
 18.5.1 Automatic symbol index cache
 -----------------------------------
 
 It is possible for GDB to automatically save a copy of this index in a
 cache on disk and retrieve it from there when loading the same binary in
-the future.  This feature can be turned on with 'set index-cache on'.
-The following commands can be used to tweak the behavior of the index
-cache.
+the future.  This feature can be turned on with 'set index-cache enabled
+on'.  The following commands can be used to tweak the behavior of the
+index cache.
 
-'set index-cache on'
-'set index-cache off'
+'set index-cache enabled on'
+'set index-cache enabled off'
      Enable or disable the use of the symbol index cache.
 
 'set index-cache directory DIRECTORY'
@@ -3719,9 +5241,43 @@ cache.
      Print the number of cache hits and misses since the launch of GDB.
 
 
-File: gdb.info,  Node: Symbol Errors,  Next: Data Files,  Prev: Index Files,  Up: GDB Files
+File: gdb.info,  Node: Debug Names,  Next: Symbol Errors,  Prev: Index Files,  Up: GDB Files
+
+18.6 Extensions to '.debug_names'
+=================================
+
+The DWARF specification documents an optional index section called
+'.debug_names'.  GDB can both read and create this section.  However, in
+order to work with GDB, some extensions were necessary.
+
+   GDB uses the augmentation string 'GDB2'.  Earlier versions used the
+string 'GDB', but these versions of the index are no longer supported.
+
+   GDB does not use the specified hash table.  Therefore, because this
+hash table is optional, GDB also does not write it.
+
+   GDB also generates and uses some extra index attributes:
+'DW_IDX_GNU_internal'
+     This has the value '0x2000'.  It is a flag that, when set,
+     indicates that the associated entry has 'static' linkage.
+
+'DW_IDX_GNU_main'
+     This has the value '0x2002'.  It is a flag that, when set,
+     indicates that the associated entry is the program's 'main'.
+
+'DW_IDX_GNU_language'
+     This has the value '0x2003'.  It is 'DW_LANG_' constant, indicating
+     the language of the associated entry.
+
+'DW_IDX_GNU_linkage_name'
+     This has the value '0x2004'.  It is a flag that, when set,
+     indicates that the associated entry is a linkage name, and not a
+     source name.
+
+
+File: gdb.info,  Node: Symbol Errors,  Next: Data Files,  Prev: Debug Names,  Up: GDB Files
 
-18.6 Errors Reading Symbol Files
+18.7 Errors Reading Symbol Files
 ================================
 
 While reading a symbol file, GDB occasionally encounters problems, such
@@ -3808,7 +5364,7 @@ Optional Warnings and Messages: Messages
 
 File: gdb.info,  Node: Data Files,  Prev: Symbol Errors,  Up: GDB Files
 
-18.7 GDB Data Files
+18.8 GDB Data Files
 ===================
 
 GDB will sometimes read an auxiliary data file.  These files are kept in
@@ -4102,7 +5658,7 @@ use 'help target' to list them.
 
 * Connecting::                  Connecting to a remote target
 * File Transfer::               Sending files to a remote system
-* Server::	                Using the gdbserver program
+* Server::                      Using the gdbserver program
 * Remote Configuration::        Remote configuration
 * Remote Stub::                 Implementing a remote stub
 
@@ -4193,6 +5749,13 @@ Attaching
      'gdbserver' using the '--attach' option (*note Running
      gdbserver::).
 
+     Some remote targets allow GDB to determine the executable file
+     running in the process the debugger is attaching to.  In such a
+     case, GDB uses the value of 'exec-file-mismatch' to handle a
+     possible mismatch between the executable file name running in the
+     process and the name of the current exec-file loaded by GDB (*note
+     set exec-file-mismatch::).
+
 20.1.2 Host and Target Files
 ----------------------------
 
@@ -4557,11 +6120,36 @@ a program to debug or a process to attac
 'target extended-remote' mode and run or attach to a program.  For more
 information, *note --multi Option in Types of Remote Connnections::.
 
-   The '--debug' option tells 'gdbserver' to display extra status
-information about the debugging process.  The '--remote-debug' option
-tells 'gdbserver' to display remote protocol debug output.  The
-'--debug-file=FILENAME' option tells 'gdbserver' to write any debug
-output to the given FILENAME.  These options are intended for
+   The '--debug[=option1,option2,...]' option tells 'gdbserver' to
+display extra diagnostic information about the debugging process.  The
+options (OPTION1, OPTION2, etc) control for which areas of 'gdbserver'
+additional information will be displayed, possible values are:
+
+'all'
+     This enables all available diagnostic output.
+'threads'
+     This enables diagnostic output related to threading.  Currently
+     other general diagnostic output is included in this category, but
+     this could change in future releases of 'gdbserver'.
+'event-loop'
+     This enables event-loop specific diagnostic output.
+'remote'
+     This enables diagnostic output related to the transfer of remote
+     protocol packets too and from the debugger.
+
+If no options are passed to '--debug' then this is treated as equivalent
+to '--debug=threads'.  This could change in future releases of
+'gdbserver'.  The options passed to '--debug' are processed left to
+right, and individual options can be prefixed with the '-' (minus)
+character to disable diagnostic output from this area, so it is possible
+to use:
+
+       target> gdbserver --debug=all,-event-loop
+
+In order to enable all diagnostic output except that for the event-loop.
+
+   The '--debug-file=FILENAME' option tells 'gdbserver' to write any
+debug output to the given FILENAME.  These options are intended for
 'gdbserver' development and for bug reports to the developers.
 
    The '--debug-format=option1[,option2,...]' option tells 'gdbserver'
@@ -4636,15 +6224,31 @@ commands.
 'monitor help'
      List the available monitor commands.
 
-'monitor set debug 0'
-'monitor set debug 1'
-     Disable or enable general debugging messages.
-
-'monitor set remote-debug 0'
-'monitor set remote-debug 1'
-     Disable or enable specific debugging messages associated with the
+'monitor set debug off'
+     Disable all internal logging from gdbserver.
+
+'monitor set debug on'
+     Enable some general logging from within gdbserver.  Currently this
+     is equivalent to 'monitor set debug threads on', but this might
+     change in future releases of gdbserver.
+
+'monitor set debug threads off'
+'monitor set debug threads on'
+     Disable or enable specific logging messages associated with thread
+     handling in gdbserver.  Currently this category also includes
+     additional output not specifically related to thread handling, this
+     could change in future releases of gdbserver.
+
+'monitor set debug remote off'
+'monitor set debug remote on'
+     Disable or enable specific logging messages associated with the
      remote protocol (*note Remote Protocol::).
 
+'monitor set debug event-loop off'
+'monitor set debug event-loop on'
+     Disable or enable specific logging messages associated with
+     gdbserver's event-loop.
+
 'monitor set debug-file filename'
 'monitor set debug-file'
      Send any debug output to the given file, or to stderr.
@@ -4874,7 +6478,7 @@ system.
      kernel prefers 'BREAK-g', a.k.a Magic SysRq g.  It is 'BREAK'
      signal followed by character 'g'.
 
-'show interrupt-sequence'
+'show remote interrupt-sequence'
      Show which of 'Ctrl-C', 'BREAK' or 'BREAK-g' is sent by GDB to
      interrupt the remote program.  'BREAK-g' is BREAK signal followed
      by 'g' and also known as Magic SysRq g.
@@ -4885,7 +6489,7 @@ system.
      kernel.  Linux kernel expects 'BREAK' followed by 'g' which is
      known as Magic SysRq g in order to connect GDB.
 
-'show interrupt-on-connect'
+'show remote interrupt-on-connect'
      Show whether interrupt-sequence is sent to remote target when GDB
      connects to it.
 
@@ -4931,7 +6535,15 @@ If you do, that may be a bug in your rem
 GDB.  You may want to report the problem to the GDB developers.
 
    For each packet NAME, the command to enable or disable the packet is
-'set remote NAME-packet'.  The available settings are:
+'set remote NAME-packet'.  If you configure a packet, the configuration
+will apply for all future remote targets if no target is selected.  In
+case there is a target selected, only the configuration of the current
+target is changed.  All other existing remote targets' features are not
+affected.  The command to print the current configuration of a packet is
+'show remote NAME-packet'.  It displays the current remote target's
+configuration.  If no remote target is selected, the default
+configuration for future connections is shown.  The available settings
+are:
 
 Command Name         Remote Packet           Related Features
                                              
@@ -5090,10 +6702,29 @@ storage-address'
 'thread-events'      'QThreadEvents'         Tracking thread
                                              lifetime.
                                              
+'thread-options'     'QThreadOptions'        Set thread event
+                                             reporting
+                                             options.
+                                             
 'no-resumed-stop-reply''no resumed thread    Tracking thread
                      left stop reply'        lifetime.
                                              
 
+   The number of bytes per memory-read or memory-write packet for a
+remote target can be configured using the commands
+'set remote memory-read-packet-size' and
+'set remote memory-write-packet-size'.  If set to '0' (zero) the default
+packet size will be used.  The actual limit is further reduced depending
+on the target.  Specify 'fixed' to disable the target-dependent
+restriction and 'limit' to enable it.  Similar to the enabling and
+disabling of remote packets, the command applies to the currently
+selected target (if available).  If no remote target is selected, it
+applies to all future remote connections.  The configuration of the
+selected target can be displayed using the commands
+'show remote memory-read-packet-size' and
+'show remote memory-write-packet-size'.  If no remote target is
+selected, the default configuration for future connections is shown.
+
 
 File: gdb.info,  Node: Remote Stub,  Prev: Remote Configuration,  Up: Remote Debugging
 
@@ -5384,13 +7015,13 @@ configurations.
 
 * Menu:
 
-* BSD libkvm Interface::	Debugging BSD kernel memory images
+* BSD libkvm Interface::        Debugging BSD kernel memory images
 * Process Information::         Process information
 * DJGPP Native::                Features specific to the DJGPP port
-* Cygwin Native::		Features specific to the Cygwin port
+* Cygwin Native::               Features specific to the Cygwin port
 * Hurd Native::                 Features specific to GNU Hurd
-* Darwin::			Features specific to Darwin
-* FreeBSD::			Features specific to FreeBSD
+* Darwin::                      Features specific to Darwin
+* FreeBSD::                     Features specific to FreeBSD
 
 
 File: gdb.info,  Node: BSD libkvm Interface,  Next: Process Information,  Up: Native
@@ -5440,8 +7071,8 @@ running on your system.
 to examine the image of a running process using file-system subroutines.
 This facility is supported on GNU/Linux and Solaris systems.
 
-   On FreeBSD systems, system control nodes are used to query process
-information.
+   On FreeBSD and NetBSD systems, system control nodes are used to query
+process information.
 
    In addition, some systems may provide additional process information
 in core files.  Note that a core file may include a subset of the
@@ -5465,15 +7096,15 @@ currently available from cores created o
 
 'info proc cmdline'
      Show the original command line of the process.  This command is
-     supported on GNU/Linux and FreeBSD.
+     supported on GNU/Linux, FreeBSD and NetBSD.
 
 'info proc cwd'
      Show the current working directory of the process.  This command is
-     supported on GNU/Linux and FreeBSD.
+     supported on GNU/Linux, FreeBSD and NetBSD.
 
 'info proc exe'
      Show the name of executable of the process.  This command is
-     supported on GNU/Linux and FreeBSD.
+     supported on GNU/Linux, FreeBSD and NetBSD.
 
 'info proc files'
      Show the file descriptors open by the process.  For each open file
@@ -5504,10 +7135,11 @@ currently available from cores created o
 
 'info proc mappings'
      Report the memory address space ranges accessible in a process.  On
-     Solaris and FreeBSD systems, each memory range includes information
-     on whether the process has read, write, or execute access rights to
-     each range.  On GNU/Linux and FreeBSD systems, each memory range
-     includes the object file which is mapped to that range.
+     Solaris, FreeBSD and NetBSD systems, each memory range includes
+     information on whether the process has read, write, or execute
+     access rights to each range.  On GNU/Linux, FreeBSD and NetBSD
+     systems, each memory range includes the object file which is mapped
+     to that range.
 
 'info proc stat'
 'info proc status'
@@ -5515,13 +7147,13 @@ currently available from cores created o
      and group ID; virtual memory usage; the signals that are pending,
      blocked, and ignored; its TTY; its consumption of system and user
      time; its stack size; its 'nice' value; etc.  These commands are
-     supported on GNU/Linux and FreeBSD.
+     supported on GNU/Linux, FreeBSD and NetBSD.
 
      For GNU/Linux systems, see the 'proc' man page for more information
      (type 'man 5 proc' from your shell prompt).
 
-     For FreeBSD systems, 'info proc stat' is an alias for 'info proc
-     status'.
+     For FreeBSD and NetBSD systems, 'info proc stat' is an alias for
+     'info proc status'.
 
 'info proc all'
      Show all the information about the process described under all of
@@ -5556,1624 +7188,3 @@ currently available from cores created o
      For QNX Neutrino only, this command displays the list of all
      mapinfos.
 
-
-File: gdb.info,  Node: DJGPP Native,  Next: Cygwin Native,  Prev: Process Information,  Up: Native
-
-21.1.3 Features for Debugging DJGPP Programs
---------------------------------------------
-
-DJGPP is a port of the GNU development tools to MS-DOS and MS-Windows.
-DJGPP programs are 32-bit protected-mode programs that use the "DPMI"
-(DOS Protected-Mode Interface) API to run on top of real-mode DOS
-systems and their emulations.
-
-   GDB supports native debugging of DJGPP programs, and defines a few
-commands specific to the DJGPP port.  This subsection describes those
-commands.
-
-'info dos'
-     This is a prefix of DJGPP-specific commands which print information
-     about the target system and important OS structures.
-
-'info dos sysinfo'
-     This command displays assorted information about the underlying
-     platform: the CPU type and features, the OS version and flavor, the
-     DPMI version, and the available conventional and DPMI memory.
-
-'info dos gdt'
-'info dos ldt'
-'info dos idt'
-     These 3 commands display entries from, respectively, Global, Local,
-     and Interrupt Descriptor Tables (GDT, LDT, and IDT). The descriptor
-     tables are data structures which store a descriptor for each
-     segment that is currently in use.  The segment's selector is an
-     index into a descriptor table; the table entry for that index holds
-     the descriptor's base address and limit, and its attributes and
-     access rights.
-
-     A typical DJGPP program uses 3 segments: a code segment, a data
-     segment (used for both data and the stack), and a DOS segment
-     (which allows access to DOS/BIOS data structures and absolute
-     addresses in conventional memory).  However, the DPMI host will
-     usually define additional segments in order to support the DPMI
-     environment.
-
-     These commands allow to display entries from the descriptor tables.
-     Without an argument, all entries from the specified table are
-     displayed.  An argument, which should be an integer expression,
-     means display a single entry whose index is given by the argument.
-     For example, here's a convenient way to display information about
-     the debugged program's data segment:
-
-     (gdb) info dos ldt $ds
-     0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)
-
-     This comes in handy when you want to see whether a pointer is
-     outside the data segment's limit (i.e. "garbled").
-
-'info dos pde'
-'info dos pte'
-     These two commands display entries from, respectively, the Page
-     Directory and the Page Tables.  Page Directories and Page Tables
-     are data structures which control how virtual memory addresses are
-     mapped into physical addresses.  A Page Table includes an entry for
-     every page of memory that is mapped into the program's address
-     space; there may be several Page Tables, each one holding up to
-     4096 entries.  A Page Directory has up to 4096 entries, one each
-     for every Page Table that is currently in use.
-
-     Without an argument, 'info dos pde' displays the entire Page
-     Directory, and 'info dos pte' displays all the entries in all of
-     the Page Tables.  An argument, an integer expression, given to the
-     'info dos pde' command means display only that entry from the Page
-     Directory table.  An argument given to the 'info dos pte' command
-     means display entries from a single Page Table, the one pointed to
-     by the specified entry in the Page Directory.
-
-     These commands are useful when your program uses "DMA" (Direct
-     Memory Access), which needs physical addresses to program the DMA
-     controller.
-
-     These commands are supported only with some DPMI servers.
-
-'info dos address-pte ADDR'
-     This command displays the Page Table entry for a specified linear
-     address.  The argument ADDR is a linear address which should
-     already have the appropriate segment's base address added to it,
-     because this command accepts addresses which may belong to _any_
-     segment.  For example, here's how to display the Page Table entry
-     for the page where a variable 'i' is stored:
-
-     (gdb) info dos address-pte __djgpp_base_address + (char *)&i
-     Page Table entry for address 0x11a00d30:
-     Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30
-
-     This says that 'i' is stored at offset '0xd30' from the page whose
-     physical base address is '0x02698000', and shows all the attributes
-     of that page.
-
-     Note that you must cast the addresses of variables to a 'char *',
-     since otherwise the value of '__djgpp_base_address', the base
-     address of all variables and functions in a DJGPP program, will be
-     added using the rules of C pointer arithmetics: if 'i' is declared
-     an 'int', GDB will add 4 times the value of '__djgpp_base_address'
-     to the address of 'i'.
-
-     Here's another example, it displays the Page Table entry for the
-     transfer buffer:
-
-     (gdb) info dos address-pte *((unsigned *)&_go32_info_block + 3)
-     Page Table entry for address 0x29110:
-     Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110
-
-     (The '+ 3' offset is because the transfer buffer's address is the
-     3rd member of the '_go32_info_block' structure.)  The output
-     clearly shows that this DPMI server maps the addresses in
-     conventional memory 1:1, i.e. the physical ('0x00029000' + '0x110')
-     and linear ('0x29110') addresses are identical.
-
-     This command is supported only with some DPMI servers.
-
-   In addition to native debugging, the DJGPP port supports remote
-debugging via a serial data link.  The following commands are specific
-to remote serial debugging in the DJGPP port of GDB.
-
-'set com1base ADDR'
-     This command sets the base I/O port address of the 'COM1' serial
-     port.
-
-'set com1irq IRQ'
-     This command sets the "Interrupt Request" ('IRQ') line to use for
-     the 'COM1' serial port.
-
-     There are similar commands 'set com2base', 'set com3irq', etc. for
-     setting the port address and the 'IRQ' lines for the other 3 COM
-     ports.
-
-     The related commands 'show com1base', 'show com1irq' etc. display
-     the current settings of the base address and the 'IRQ' lines used
-     by the COM ports.
-
-'info serial'
-     This command prints the status of the 4 DOS serial ports.  For each
-     port, it prints whether it's active or not, its I/O base address
-     and IRQ number, whether it uses a 16550-style FIFO, its baudrate,
-     and the counts of various errors encountered so far.
-
-
-File: gdb.info,  Node: Cygwin Native,  Next: Hurd Native,  Prev: DJGPP Native,  Up: Native
-
-21.1.4 Features for Debugging MS Windows PE Executables
--------------------------------------------------------
-
-GDB supports native debugging of MS Windows programs, including DLLs
-with and without symbolic debugging information.
-
-   MS-Windows programs that call 'SetConsoleMode' to switch off the
-special meaning of the 'Ctrl-C' keystroke cannot be interrupted by
-typing 'C-c'.  For this reason, GDB on MS-Windows supports 'C-<BREAK>'
-as an alternative interrupt key sequence, which can be used to interrupt
-the debuggee even if it ignores 'C-c'.
-
-   There are various additional Cygwin-specific commands, described in
-this section.  Working with DLLs that have no debugging symbols is
-described in *note Non-debug DLL Symbols::.
-
-'info w32'
-     This is a prefix of MS Windows-specific commands which print
-     information about the target system and important OS structures.
-
-'info w32 selector'
-     This command displays information returned by the Win32 API
-     'GetThreadSelectorEntry' function.  It takes an optional argument
-     that is evaluated to a long value to give the information about
-     this given selector.  Without argument, this command displays
-     information about the six segment registers.
-
-'info w32 thread-information-block'
-     This command displays thread specific information stored in the
-     Thread Information Block (readable on the X86 CPU family using
-     '$fs' selector for 32-bit programs and '$gs' for 64-bit programs).
-
-'signal-event ID'
-     This command signals an event with user-provided ID.  Used to
-     resume crashing process when attached to it using MS-Windows JIT
-     debugging (AeDebug).
-
-     To use it, create or edit the following keys in
-     'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug' and/or
-     'HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows
-     NT\CurrentVersion\AeDebug' (for x86_64 versions):
-
-        - 'Debugger' (REG_SZ) -- a command to launch the debugger.
-          Suggested command is: 'FULLY-QUALIFIED-PATH-TO-GDB.EXE -ex
-          "attach %ld" -ex "signal-event %ld" -ex "continue"'.
-
-          The first '%ld' will be replaced by the process ID of the
-          crashing process, the second '%ld' will be replaced by the ID
-          of the event that blocks the crashing process, waiting for GDB
-          to attach.
-
-        - 'Auto' (REG_SZ) -- either '1' or '0'.  '1' will make the
-          system run debugger specified by the Debugger key
-          automatically, '0' will cause a dialog box with "OK" and
-          "Cancel" buttons to appear, which allows the user to either
-          terminate the crashing process (OK) or debug it (Cancel).
-
-'set cygwin-exceptions MODE'
-     If MODE is 'on', GDB will break on exceptions that happen inside
-     the Cygwin DLL. If MODE is 'off', GDB will delay recognition of
-     exceptions, and may ignore some exceptions which seem to be caused
-     by internal Cygwin DLL "bookkeeping".  This option is meant
-     primarily for debugging the Cygwin DLL itself; the default value is
-     'off' to avoid annoying GDB users with false 'SIGSEGV' signals.
-
-'show cygwin-exceptions'
-     Displays whether GDB will break on exceptions that happen inside
-     the Cygwin DLL itself.
-
-'set new-console MODE'
-     If MODE is 'on' the debuggee will be started in a new console on
-     next start.  If MODE is 'off', the debuggee will be started in the
-     same console as the debugger.
-
-'show new-console'
-     Displays whether a new console is used when the debuggee is
-     started.
-
-'set new-group MODE'
-     This boolean value controls whether the debuggee should start a new
-     group or stay in the same group as the debugger.  This affects the
-     way the Windows OS handles 'Ctrl-C'.
-
-'show new-group'
-     Displays current value of new-group boolean.
-
-'set debugevents'
-     This boolean value adds debug output concerning kernel events
-     related to the debuggee seen by the debugger.  This includes events
-     that signal thread and process creation and exit, DLL loading and
-     unloading, console interrupts, and debugging messages produced by
-     the Windows 'OutputDebugString' API call.
-
-'set debugexec'
-     This boolean value adds debug output concerning execute events
-     (such as resume thread) seen by the debugger.
-
-'set debugexceptions'
-     This boolean value adds debug output concerning exceptions in the
-     debuggee seen by the debugger.
-
-'set debugmemory'
-     This boolean value adds debug output concerning debuggee memory
-     reads and writes by the debugger.
-
-'set shell'
-     This boolean values specifies whether the debuggee is called via a
-     shell or directly (default value is on).
-
-'show shell'
-     Displays if the debuggee will be started with a shell.
-
-* Menu:
-
-* Non-debug DLL Symbols::  Support for DLLs without debugging symbols
-
-
-File: gdb.info,  Node: Non-debug DLL Symbols,  Up: Cygwin Native
-
-21.1.4.1 Support for DLLs without Debugging Symbols
-...................................................
-
-Very often on windows, some of the DLLs that your program relies on do
-not include symbolic debugging information (for example,
-'kernel32.dll').  When GDB doesn't recognize any debugging symbols in a
-DLL, it relies on the minimal amount of symbolic information contained
-in the DLL's export table.  This section describes working with such
-symbols, known internally to GDB as "minimal symbols".
-
-   Note that before the debugged program has started execution, no DLLs
-will have been loaded.  The easiest way around this problem is simply to
-start the program -- either by setting a breakpoint or letting the
-program run once to completion.
-
-21.1.4.2 DLL Name Prefixes
-..........................
-
-In keeping with the naming conventions used by the Microsoft debugging
-tools, DLL export symbols are made available with a prefix based on the
-DLL name, for instance 'KERNEL32!CreateFileA'.  The plain name is also
-entered into the symbol table, so 'CreateFileA' is often sufficient.  In
-some cases there will be name clashes within a program (particularly if
-the executable itself includes full debugging symbols) necessitating the
-use of the fully qualified name when referring to the contents of the
-DLL. Use single-quotes around the name to avoid the exclamation mark
-("!")  being interpreted as a language operator.
-
-   Note that the internal name of the DLL may be all upper-case, even
-though the file name of the DLL is lower-case, or vice-versa.  Since
-symbols within GDB are _case-sensitive_ this may cause some confusion.
-If in doubt, try the 'info functions' and 'info variables' commands or
-even 'maint print msymbols' (*note Symbols::).  Here's an example:
-
-     (gdb) info function CreateFileA
-     All functions matching regular expression "CreateFileA":
-
-     Non-debugging symbols:
-     0x77e885f4  CreateFileA
-     0x77e885f4  KERNEL32!CreateFileA
-
-     (gdb) info function !
-     All functions matching regular expression "!":
-
-     Non-debugging symbols:
-     0x6100114c  cygwin1!__assert
-     0x61004034  cygwin1!_dll_crt0@0
-     0x61004240  cygwin1!dll_crt0(per_process *)
-     [etc...]
-
-21.1.4.3 Working with Minimal Symbols
-.....................................
-
-Symbols extracted from a DLL's export table do not contain very much
-type information.  All that GDB can do is guess whether a symbol refers
-to a function or variable depending on the linker section that contains
-the symbol.  Also note that the actual contents of the memory contained
-in a DLL are not available unless the program is running.  This means
-that you cannot examine the contents of a variable or disassemble a
-function within a DLL without a running program.
-
-   Variables are generally treated as pointers and dereferenced
-automatically.  For this reason, it is often necessary to prefix a
-variable name with the address-of operator ("&") and provide explicit
-type information in the command.  Here's an example of the type of
-problem:
-
-     (gdb) print 'cygwin1!__argv'
-     'cygwin1!__argv' has unknown type; cast it to its declared type
-
-     (gdb) x 'cygwin1!__argv'
-     'cygwin1!__argv' has unknown type; cast it to its declared type
-
-   And two possible solutions:
-
-     (gdb) print ((char **)'cygwin1!__argv')[0]
-     $2 = 0x22fd98 "/cygdrive/c/mydirectory/myprogram"
-
-     (gdb) x/2x &'cygwin1!__argv'
-     0x610c0aa8 <cygwin1!__argv>:    0x10021608      0x00000000
-     (gdb) x/x 0x10021608
-     0x10021608:     0x0022fd98
-     (gdb) x/s 0x0022fd98
-     0x22fd98:        "/cygdrive/c/mydirectory/myprogram"
-
-   Setting a break point within a DLL is possible even before the
-program starts execution.  However, under these circumstances, GDB can't
-examine the initial instructions of the function in order to skip the
-function's frame set-up code.  You can work around this by using "*&" to
-set the breakpoint at a raw memory address:
-
-     (gdb) break *&'python22!PyOS_Readline'
-     Breakpoint 1 at 0x1e04eff0
-
-   The author of these extensions is not entirely convinced that setting
-a break point within a shared DLL like 'kernel32.dll' is completely
-safe.
-
-
-File: gdb.info,  Node: Hurd Native,  Next: Darwin,  Prev: Cygwin Native,  Up: Native
-
-21.1.5 Commands Specific to GNU Hurd Systems
---------------------------------------------
-
-This subsection describes GDB commands specific to the GNU Hurd native
-debugging.
-
-'set signals'
-'set sigs'
-     This command toggles the state of inferior signal interception by
-     GDB.  Mach exceptions, such as breakpoint traps, are not affected
-     by this command.  'sigs' is a shorthand alias for 'signals'.
-
-'show signals'
-'show sigs'
-     Show the current state of intercepting inferior's signals.
-
-'set signal-thread'
-'set sigthread'
-     This command tells GDB which thread is the 'libc' signal thread.
-     That thread is run when a signal is delivered to a running process.
-     'set sigthread' is the shorthand alias of 'set signal-thread'.
-
-'show signal-thread'
-'show sigthread'
-     These two commands show which thread will run when the inferior is
-     delivered a signal.
-
-'set stopped'
-     This commands tells GDB that the inferior process is stopped, as
-     with the 'SIGSTOP' signal.  The stopped process can be continued by
-     delivering a signal to it.
-
-'show stopped'
-     This command shows whether GDB thinks the debuggee is stopped.
-
-'set exceptions'
-     Use this command to turn off trapping of exceptions in the
-     inferior.  When exception trapping is off, neither breakpoints nor
-     single-stepping will work.  To restore the default, set exception
-     trapping on.
-
-'show exceptions'
-     Show the current state of trapping exceptions in the inferior.
-
-'set task pause'
-     This command toggles task suspension when GDB has control.  Setting
-     it to on takes effect immediately, and the task is suspended
-     whenever GDB gets control.  Setting it to off will take effect the
-     next time the inferior is continued.  If this option is set to off,
-     you can use 'set thread default pause on' or 'set thread pause on'
-     (see below) to pause individual threads.
-
-'show task pause'
-     Show the current state of task suspension.
-
-'set task detach-suspend-count'
-     This command sets the suspend count the task will be left with when
-     GDB detaches from it.
-
-'show task detach-suspend-count'
-     Show the suspend count the task will be left with when detaching.
-
-'set task exception-port'
-'set task excp'
-     This command sets the task exception port to which GDB will forward
-     exceptions.  The argument should be the value of the "send rights"
-     of the task.  'set task excp' is a shorthand alias.
-
-'set noninvasive'
-     This command switches GDB to a mode that is the least invasive as
-     far as interfering with the inferior is concerned.  This is the
-     same as using 'set task pause', 'set exceptions', and 'set signals'
-     to values opposite to the defaults.
-
-'info send-rights'
-'info receive-rights'
-'info port-rights'
-'info port-sets'
-'info dead-names'
-'info ports'
-'info psets'
-     These commands display information about, respectively, send
-     rights, receive rights, port rights, port sets, and dead names of a
-     task.  There are also shorthand aliases: 'info ports' for 'info
-     port-rights' and 'info psets' for 'info port-sets'.
-
-'set thread pause'
-     This command toggles current thread suspension when GDB has
-     control.  Setting it to on takes effect immediately, and the
-     current thread is suspended whenever GDB gets control.  Setting it
-     to off will take effect the next time the inferior is continued.
-     Normally, this command has no effect, since when GDB has control,
-     the whole task is suspended.  However, if you used 'set task pause
-     off' (see above), this command comes in handy to suspend only the
-     current thread.
-
-'show thread pause'
-     This command shows the state of current thread suspension.
-
-'set thread run'
-     This command sets whether the current thread is allowed to run.
-
-'show thread run'
-     Show whether the current thread is allowed to run.
-
-'set thread detach-suspend-count'
-     This command sets the suspend count GDB will leave on a thread when
-     detaching.  This number is relative to the suspend count found by
-     GDB when it notices the thread; use 'set thread
-     takeover-suspend-count' to force it to an absolute value.
-
-'show thread detach-suspend-count'
-     Show the suspend count GDB will leave on the thread when detaching.
-
-'set thread exception-port'
-'set thread excp'
-     Set the thread exception port to which to forward exceptions.  This
-     overrides the port set by 'set task exception-port' (see above).
-     'set thread excp' is the shorthand alias.
-
-'set thread takeover-suspend-count'
-     Normally, GDB's thread suspend counts are relative to the value GDB
-     finds when it notices each thread.  This command changes the
-     suspend counts to be absolute instead.
-
-'set thread default'
-'show thread default'
-     Each of the above 'set thread' commands has a 'set thread default'
-     counterpart (e.g., 'set thread default pause', 'set thread default
-     exception-port', etc.).  The 'thread default' variety of commands
-     sets the default thread properties for all threads; you can then
-     change the properties of individual threads with the non-default
-     commands.
-
-
-File: gdb.info,  Node: Darwin,  Next: FreeBSD,  Prev: Hurd Native,  Up: Native
-
-21.1.6 Darwin
--------------
-
-GDB provides the following commands specific to the Darwin target:
-
-'set debug darwin NUM'
-     When set to a non zero value, enables debugging messages specific
-     to the Darwin support.  Higher values produce more verbose output.
-
-'show debug darwin'
-     Show the current state of Darwin messages.
-
-'set debug mach-o NUM'
-     When set to a non zero value, enables debugging messages while GDB
-     is reading Darwin object files.  ("Mach-O" is the file format used
-     on Darwin for object and executable files.)  Higher values produce
-     more verbose output.  This is a command to diagnose problems
-     internal to GDB and should not be needed in normal usage.
-
-'show debug mach-o'
-     Show the current state of Mach-O file messages.
-
-'set mach-exceptions on'
-'set mach-exceptions off'
-     On Darwin, faults are first reported as a Mach exception and are
-     then mapped to a Posix signal.  Use this command to turn on
-     trapping of Mach exceptions in the inferior.  This might be
-     sometimes useful to better understand the cause of a fault.  The
-     default is off.
-
-'show mach-exceptions'
-     Show the current state of exceptions trapping.
-
-
-File: gdb.info,  Node: FreeBSD,  Prev: Darwin,  Up: Native
-
-21.1.7 FreeBSD
---------------
-
-When the ABI of a system call is changed in the FreeBSD kernel, this is
-implemented by leaving a compatibility system call using the old ABI at
-the existing number and allocating a new system call number for the
-version using the new ABI. As a convenience, when a system call is
-caught by name (*note catch syscall::), compatibility system calls are
-also caught.
-
-   For example, FreeBSD 12 introduced a new variant of the 'kevent'
-system call and catching the 'kevent' system call by name catches both
-variants:
-
-     (gdb) catch syscall kevent
-     Catchpoint 1 (syscalls 'freebsd11_kevent' [363] 'kevent' [560])
-     (gdb)
-
-
-File: gdb.info,  Node: Embedded OS,  Next: Embedded Processors,  Prev: Native,  Up: Configurations
-
-21.2 Embedded Operating Systems
-===============================
-
-This section describes configurations involving the debugging of
-embedded operating systems that are available for several different
-architectures.
-
-   GDB includes the ability to debug programs running on various
-real-time operating systems.
-
-
-File: gdb.info,  Node: Embedded Processors,  Next: Architectures,  Prev: Embedded OS,  Up: Configurations
-
-21.3 Embedded Processors
-========================
-
-This section goes into details specific to particular embedded
-configurations.
-
-   Whenever a specific embedded processor has a simulator, GDB allows to
-send an arbitrary command to the simulator.
-
-'sim COMMAND'
-     Send an arbitrary COMMAND string to the simulator.  Consult the
-     documentation for the specific simulator in use for information
-     about acceptable commands.
-
-* Menu:
-
-* ARC::                         Synopsys ARC
-* ARM::                         ARM
-* M68K::                        Motorola M68K
-* MicroBlaze::			Xilinx MicroBlaze
-* MIPS Embedded::               MIPS Embedded
-* OpenRISC 1000::               OpenRISC 1000 (or1k)
-* PowerPC Embedded::            PowerPC Embedded
-* AVR::                         Atmel AVR
-* CRIS::                        CRIS
-* Super-H::                     Renesas Super-H
-
-
-File: gdb.info,  Node: ARC,  Next: ARM,  Up: Embedded Processors
-
-21.3.1 Synopsys ARC
--------------------
-
-GDB provides the following ARC-specific commands:
-
-'set debug arc'
-     Control the level of ARC specific debug messages.  Use 0 for no
-     messages (the default), 1 for debug messages, and 2 for even more
-     debug messages.
-
-'show debug arc'
-     Show the level of ARC specific debugging in operation.
-
-'maint print arc arc-instruction ADDRESS'
-     Print internal disassembler information about instruction at a
-     given address.
-
-
-File: gdb.info,  Node: ARM,  Next: M68K,  Prev: ARC,  Up: Embedded Processors
-
-21.3.2 ARM
-----------
-
-GDB provides the following ARM-specific commands:
-
-'set arm disassembler'
-     This commands selects from a list of disassembly styles.  The
-     '"std"' style is the standard style.
-
-'show arm disassembler'
-     Show the current disassembly style.
-
-'set arm apcs32'
-     This command toggles ARM operation mode between 32-bit and 26-bit.
-
-'show arm apcs32'
-     Display the current usage of the ARM 32-bit mode.
-
-'set arm fpu FPUTYPE'
-     This command sets the ARM floating-point unit (FPU) type.  The
-     argument FPUTYPE can be one of these:
-
-     'auto'
-          Determine the FPU type by querying the OS ABI.
-     'softfpa'
-          Software FPU, with mixed-endian doubles on little-endian ARM
-          processors.
-     'fpa'
-          GCC-compiled FPA co-processor.
-     'softvfp'
-          Software FPU with pure-endian doubles.
-     'vfp'
-          VFP co-processor.
-
-'show arm fpu'
-     Show the current type of the FPU.
-
-'set arm abi'
-     This command forces GDB to use the specified ABI.
-
-'show arm abi'
-     Show the currently used ABI.
-
-'set arm fallback-mode (arm|thumb|auto)'
-     GDB uses the symbol table, when available, to determine whether
-     instructions are ARM or Thumb.  This command controls GDB's default
-     behavior when the symbol table is not available.  The default is
-     'auto', which causes GDB to use the current execution mode (from
-     the 'T' bit in the 'CPSR' register).
-
-'show arm fallback-mode'
-     Show the current fallback instruction mode.
-
-'set arm force-mode (arm|thumb|auto)'
-     This command overrides use of the symbol table to determine whether
-     instructions are ARM or Thumb.  The default is 'auto', which causes
-     GDB to use the symbol table and then the setting of 'set arm
-     fallback-mode'.
-
-'show arm force-mode'
-     Show the current forced instruction mode.
-
-'set debug arm'
-     Toggle whether to display ARM-specific debugging messages from the
-     ARM target support subsystem.
-
-'show debug arm'
-     Show whether ARM-specific debugging messages are enabled.
-
-'target sim [SIMARGS] ...'
-     The GDB ARM simulator accepts the following optional arguments.
-
-     '--swi-support=TYPE'
-          Tell the simulator which SWI interfaces to support.  The
-          argument TYPE may be a comma separated list of the following
-          values.  The default value is 'all'.
-
-          'none'
-          'demon'
-          'angel'
-          'redboot'
-          'all'
-
-
-File: gdb.info,  Node: M68K,  Next: MicroBlaze,  Prev: ARM,  Up: Embedded Processors
-
-21.3.3 M68k
------------
-
-The Motorola m68k configuration includes ColdFire support.
-
-
-File: gdb.info,  Node: MicroBlaze,  Next: MIPS Embedded,  Prev: M68K,  Up: Embedded Processors
-
-21.3.4 MicroBlaze
------------------
-
-The MicroBlaze is a soft-core processor supported on various Xilinx
-FPGAs, such as Spartan or Virtex series.  Boards with these processors
-usually have JTAG ports which connect to a host system running the
-Xilinx Embedded Development Kit (EDK) or Software Development Kit (SDK).
-This host system is used to download the configuration bitstream to the
-target FPGA. The Xilinx Microprocessor Debugger (XMD) program
-communicates with the target board using the JTAG interface and presents
-a 'gdbserver' interface to the board.  By default 'xmd' uses port
-'1234'.  (While it is possible to change this default port, it requires
-the use of undocumented 'xmd' commands.  Contact Xilinx support if you
-need to do this.)
-
-   Use these GDB commands to connect to the MicroBlaze target processor.
-
-'target remote :1234'
-     Use this command to connect to the target if you are running GDB on
-     the same system as 'xmd'.
-
-'target remote XMD-HOST:1234'
-     Use this command to connect to the target if it is connected to
-     'xmd' running on a different system named XMD-HOST.
-
-'load'
-     Use this command to download a program to the MicroBlaze target.
-
-'set debug microblaze N'
-     Enable MicroBlaze-specific debugging messages if non-zero.
-
-'show debug microblaze N'
-     Show MicroBlaze-specific debugging level.
-
-
-File: gdb.info,  Node: MIPS Embedded,  Next: OpenRISC 1000,  Prev: MicroBlaze,  Up: Embedded Processors
-
-21.3.5 MIPS Embedded
---------------------
-
-GDB supports these special commands for MIPS targets:
-
-'set mipsfpu double'
-'set mipsfpu single'
-'set mipsfpu none'
-'set mipsfpu auto'
-'show mipsfpu'
-     If your target board does not support the MIPS floating point
-     coprocessor, you should use the command 'set mipsfpu none' (if you
-     need this, you may wish to put the command in your GDB init file).
-     This tells GDB how to find the return value of functions which
-     return floating point values.  It also allows GDB to avoid saving
-     the floating point registers when calling functions on the board.
-     If you are using a floating point coprocessor with only single
-     precision floating point support, as on the R4650 processor, use
-     the command 'set mipsfpu single'.  The default double precision
-     floating point coprocessor may be selected using 'set mipsfpu
-     double'.
-
-     In previous versions the only choices were double precision or no
-     floating point, so 'set mipsfpu on' will select double precision
-     and 'set mipsfpu off' will select no floating point.
-
-     As usual, you can inquire about the 'mipsfpu' variable with 'show
-     mipsfpu'.
-
-
-File: gdb.info,  Node: OpenRISC 1000,  Next: PowerPC Embedded,  Prev: MIPS Embedded,  Up: Embedded Processors
-
-21.3.6 OpenRISC 1000
---------------------
-
-The OpenRISC 1000 provides a free RISC instruction set architecture.  It
-is mainly provided as a soft-core which can run on Xilinx, Altera and
-other FPGA's.
-
-   GDB for OpenRISC supports the below commands when connecting to a
-target:
-
-'target sim'
-
-     Runs the builtin CPU simulator which can run very basic programs
-     but does not support most hardware functions like MMU. For more
-     complex use cases the user is advised to run an external target,
-     and connect using 'target remote'.
-
-     Example: 'target sim'
-
-'set debug or1k'
-     Toggle whether to display OpenRISC-specific debugging messages from
-     the OpenRISC target support subsystem.
-
-'show debug or1k'
-     Show whether OpenRISC-specific debugging messages are enabled.
-
-
-File: gdb.info,  Node: PowerPC Embedded,  Next: AVR,  Prev: OpenRISC 1000,  Up: Embedded Processors
-
-21.3.7 PowerPC Embedded
------------------------
-
-GDB supports using the DVC (Data Value Compare) register to implement in
-hardware simple hardware watchpoint conditions of the form:
-
-     (gdb) watch ADDRESS|VARIABLE \
-       if  ADDRESS|VARIABLE == CONSTANT EXPRESSION
-
-   The DVC register will be automatically used when GDB detects such
-pattern in a condition expression, and the created watchpoint uses one
-debug register (either the 'exact-watchpoints' option is on and the
-variable is scalar, or the variable has a length of one byte).  This
-feature is available in native GDB running on a Linux kernel version
-2.6.34 or newer.
-
-   When running on PowerPC embedded processors, GDB automatically uses
-ranged hardware watchpoints, unless the 'exact-watchpoints' option is
-on, in which case watchpoints using only one debug register are created
-when watching variables of scalar types.
-
-   You can create an artificial array to watch an arbitrary memory
-region using one of the following commands (*note Expressions::):
-
-     (gdb) watch *((char *) ADDRESS)@LENGTH
-     (gdb) watch {char[LENGTH]} ADDRESS
-
-   PowerPC embedded processors support masked watchpoints.  See the
-discussion about the 'mask' argument in *note Set Watchpoints::.
-
-   PowerPC embedded processors support hardware accelerated "ranged
-breakpoints".  A ranged breakpoint stops execution of the inferior
-whenever it executes an instruction at any address within the range it
-specifies.  To set a ranged breakpoint in GDB, use the 'break-range'
-command.
-
-   GDB provides the following PowerPC-specific commands:
-
-'break-range START-LOCATION, END-LOCATION'
-     Set a breakpoint for an address range given by START-LOCATION and
-     END-LOCATION, which can specify a function name, a line number, an
-     offset of lines from the current line or from the start location,
-     or an address of an instruction (see *note Specify Location::, for
-     a list of all the possible ways to specify a LOCATION.)  The
-     breakpoint will stop execution of the inferior whenever it executes
-     an instruction at any address within the specified range,
-     (including START-LOCATION and END-LOCATION.)
-
-'set powerpc soft-float'
-'show powerpc soft-float'
-     Force GDB to use (or not use) a software floating point calling
-     convention.  By default, GDB selects the calling convention based
-     on the selected architecture and the provided executable file.
-
-'set powerpc vector-abi'
-'show powerpc vector-abi'
-     Force GDB to use the specified calling convention for vector
-     arguments and return values.  The valid options are 'auto';
-     'generic', to avoid vector registers even if they are present;
-     'altivec', to use AltiVec registers; and 'spe' to use SPE
-     registers.  By default, GDB selects the calling convention based on
-     the selected architecture and the provided executable file.
-
-'set powerpc exact-watchpoints'
-'show powerpc exact-watchpoints'
-     Allow GDB to use only one debug register when watching a variable
-     of scalar type, thus assuming that the variable is accessed through
-     the address of its first byte.
-
-
-File: gdb.info,  Node: AVR,  Next: CRIS,  Prev: PowerPC Embedded,  Up: Embedded Processors
-
-21.3.8 Atmel AVR
-----------------
-
-When configured for debugging the Atmel AVR, GDB supports the following
-AVR-specific commands:
-
-'info io_registers'
-     This command displays information about the AVR I/O registers.  For
-     each register, GDB prints its number and value.
-
-
-File: gdb.info,  Node: CRIS,  Next: Super-H,  Prev: AVR,  Up: Embedded Processors
-
-21.3.9 CRIS
------------
-
-When configured for debugging CRIS, GDB provides the following
-CRIS-specific commands:
-
-'set cris-version VER'
-     Set the current CRIS version to VER, either '10' or '32'.  The CRIS
-     version affects register names and sizes.  This command is useful
-     in case autodetection of the CRIS version fails.
-
-'show cris-version'
-     Show the current CRIS version.
-
-'set cris-dwarf2-cfi'
-     Set the usage of DWARF-2 CFI for CRIS debugging.  The default is
-     'on'.  Change to 'off' when using 'gcc-cris' whose version is below
-     'R59'.
-
-'show cris-dwarf2-cfi'
-     Show the current state of using DWARF-2 CFI.
-
-'set cris-mode MODE'
-     Set the current CRIS mode to MODE.  It should only be changed when
-     debugging in guru mode, in which case it should be set to 'guru'
-     (the default is 'normal').
-
-'show cris-mode'
-     Show the current CRIS mode.
-
-
-File: gdb.info,  Node: Super-H,  Prev: CRIS,  Up: Embedded Processors
-
-21.3.10 Renesas Super-H
------------------------
-
-For the Renesas Super-H processor, GDB provides these commands:
-
-'set sh calling-convention CONVENTION'
-     Set the calling-convention used when calling functions from GDB.
-     Allowed values are 'gcc', which is the default setting, and
-     'renesas'.  With the 'gcc' setting, functions are called using the
-     GCC calling convention.  If the DWARF-2 information of the called
-     function specifies that the function follows the Renesas calling
-     convention, the function is called using the Renesas calling
-     convention.  If the calling convention is set to 'renesas', the
-     Renesas calling convention is always used, regardless of the
-     DWARF-2 information.  This can be used to override the default of
-     'gcc' if debug information is missing, or the compiler does not
-     emit the DWARF-2 calling convention entry for a function.
-
-'show sh calling-convention'
-     Show the current calling convention setting.
-
-
-File: gdb.info,  Node: Architectures,  Prev: Embedded Processors,  Up: Configurations
-
-21.4 Architectures
-==================
-
-This section describes characteristics of architectures that affect all
-uses of GDB with the architecture, both native and cross.
-
-* Menu:
-
-* AArch64::
-* i386::
-* Alpha::
-* MIPS::
-* HPPA::               HP PA architecture
-* PowerPC::
-* Nios II::
-* Sparc64::
-* S12Z::
-
-
-File: gdb.info,  Node: AArch64,  Next: i386,  Up: Architectures
-
-21.4.1 AArch64
---------------
-
-When GDB is debugging the AArch64 architecture, it provides the
-following special commands:
-
-'set debug aarch64'
-     This command determines whether AArch64 architecture-specific
-     debugging messages are to be displayed.
-
-'show debug aarch64'
-     Show whether AArch64 debugging messages are displayed.
-
-21.4.1.1 AArch64 SVE.
-.....................
-
-When GDB is debugging the AArch64 architecture, if the Scalable Vector
-Extension (SVE) is present, then GDB will provide the vector registers
-'$z0' through '$z31', vector predicate registers '$p0' through '$p15',
-and the '$ffr' register.  In addition, the pseudo register '$vg' will be
-provided.  This is the vector granule for the current thread and
-represents the number of 64-bit chunks in an SVE 'z' register.
-
-   If the vector length changes, then the '$vg' register will be
-updated, but the lengths of the 'z' and 'p' registers will not change.
-This is a known limitation of GDB and does not affect the execution of
-the target process.
-
-21.4.1.2 AArch64 Pointer Authentication.
-........................................
-
-When GDB is debugging the AArch64 architecture, and the program is using
-the v8.3-A feature Pointer Authentication (PAC), then whenever the link
-register '$lr' is pointing to an PAC function its value will be masked.
-When GDB prints a backtrace, any addresses that required unmasking will
-be postfixed with the marker [PAC]. When using the MI, this is printed
-as part of the 'addr_flags' field.
-
-
-File: gdb.info,  Node: i386,  Next: Alpha,  Prev: AArch64,  Up: Architectures
-
-21.4.2 x86 Architecture-specific Issues
----------------------------------------
-
-'set struct-convention MODE'
-     Set the convention used by the inferior to return 'struct's and
-     'union's from functions to MODE.  Possible values of MODE are
-     '"pcc"', '"reg"', and '"default"' (the default).  '"default"' or
-     '"pcc"' means that 'struct's are returned on the stack, while
-     '"reg"' means that a 'struct' or a 'union' whose size is 1, 2, 4,
-     or 8 bytes will be returned in a register.
-
-'show struct-convention'
-     Show the current setting of the convention to return 'struct's from
-     functions.
-
-21.4.2.1 Intel "Memory Protection Extensions" (MPX).
-....................................................
-
-Memory Protection Extension (MPX) adds the bound registers 'BND0' (1)
-through 'BND3'.  Bound registers store a pair of 64-bit values which are
-the lower bound and upper bound.  Bounds are effective addresses or
-memory locations.  The upper bounds are architecturally represented in
-1's complement form.  A bound having lower bound = 0, and upper bound =
-0 (1's complement of all bits set) will allow access to the entire
-address space.
-
-   'BND0' through 'BND3' are represented in GDB as 'bnd0raw' through
-'bnd3raw'.  Pseudo registers 'bnd0' through 'bnd3' display the upper
-bound performing the complement of one operation on the upper bound
-value, i.e. when upper bound in 'bnd0raw' is 0 in the GDB 'bnd0' it will
-be '0xfff...'.  In this sense it can also be noted that the upper bounds
-are inclusive.
-
-   As an example, assume that the register BND0 holds bounds for a
-pointer having access allowed for the range between 0x32 and 0x71.  The
-values present on bnd0raw and bnd registers are presented as follows:
-
-     	bnd0raw = {0x32, 0xffffffff8e}
-     	bnd0 = {lbound = 0x32, ubound = 0x71} : size 64
-
-   This way the raw value can be accessed via bnd0raw...bnd3raw.  Any
-change on bnd0...bnd3 or bnd0raw...bnd3raw is reflect on its
-counterpart.  When the bnd0...bnd3 registers are displayed via Python,
-the display includes the memory size, in bits, accessible to the
-pointer.
-
-   Bounds can also be stored in bounds tables, which are stored in
-application memory.  These tables store bounds for pointers by
-specifying the bounds pointer's value along with its bounds.  Evaluating
-and changing bounds located in bound tables is therefore interesting
-while investigating bugs on MPX context.  GDB provides commands for this
-purpose:
-
-'show mpx bound POINTER'
-     Display bounds of the given POINTER.
-
-'set mpx bound POINTER, LBOUND, UBOUND'
-     Set the bounds of a pointer in the bound table.  This command takes
-     three parameters: POINTER is the pointers whose bounds are to be
-     changed, LBOUND and UBOUND are new values for lower and upper
-     bounds respectively.
-
-   When you call an inferior function on an Intel MPX enabled program,
-GDB sets the inferior's bound registers to the init (disabled) state
-before calling the function.  As a consequence, bounds checks for the
-pointer arguments passed to the function will always pass.
-
-   This is necessary because when you call an inferior function, the
-program is usually in the middle of the execution of other function.
-Since at that point bound registers are in an arbitrary state, not
-clearing them would lead to random bound violations in the called
-function.
-
-   You can still examine the influence of the bound registers on the
-execution of the called function by stopping the execution of the called
-function at its prologue, setting bound registers, and continuing the
-execution.  For example:
-
-     	$ break *upper
-     	Breakpoint 2 at 0x4009de: file i386-mpx-call.c, line 47.
-     	$ print upper (a, b, c, d, 1)
-     	Breakpoint 2, upper (a=0x0, b=0x6e0000005b, c=0x0, d=0x0, len=48)....
-     	$ print $bnd0
-	     {lbound = 0x0, ubound = ffffffff} : size -1
-
-   At this last step the value of bnd0 can be changed for investigation
-of bound violations caused along the execution of the call.  In order to
-know how to set the bound registers or bound table for the call consult
-the ABI.
-
-   ---------- Footnotes ----------
-
-   (1) The register named with capital letters represent the
-architecture registers.
-
-
-File: gdb.info,  Node: Alpha,  Next: MIPS,  Prev: i386,  Up: Architectures
-
-21.4.3 Alpha
-------------
-
-See the following section.
-
-
-File: gdb.info,  Node: MIPS,  Next: HPPA,  Prev: Alpha,  Up: Architectures
-
-21.4.4 MIPS
------------
-
-Alpha- and MIPS-based computers use an unusual stack frame, which
-sometimes requires GDB to search backward in the object code to find the
-beginning of a function.
-
-   To improve response time (especially for embedded applications, where
-GDB may be restricted to a slow serial line for this search) you may
-want to limit the size of this search, using one of these commands:
-
-'set heuristic-fence-post LIMIT'
-     Restrict GDB to examining at most LIMIT bytes in its search for the
-     beginning of a function.  A value of 0 (the default) means there is
-     no limit.  However, except for 0, the larger the limit the more
-     bytes 'heuristic-fence-post' must search and therefore the longer
-     it takes to run.  You should only need to use this command when
-     debugging a stripped executable.
-
-'show heuristic-fence-post'
-     Display the current limit.
-
-These commands are available _only_ when GDB is configured for debugging
-programs on Alpha or MIPS processors.
-
-   Several MIPS-specific commands are available when debugging MIPS
-programs:
-
-'set mips abi ARG'
-     Tell GDB which MIPS ABI is used by the inferior.  Possible values
-     of ARG are:
-
-     'auto'
-          The default ABI associated with the current binary (this is
-          the default).
-     'o32'
-     'o64'
-     'n32'
-     'n64'
-     'eabi32'
-     'eabi64'
-
-'show mips abi'
-     Show the MIPS ABI used by GDB to debug the inferior.
-
-'set mips compression ARG'
-     Tell GDB which MIPS compressed ISA (Instruction Set Architecture)
-     encoding is used by the inferior.  GDB uses this for code
-     disassembly and other internal interpretation purposes.  This
-     setting is only referred to when no executable has been associated
-     with the debugging session or the executable does not provide
-     information about the encoding it uses.  Otherwise this setting is
-     automatically updated from information provided by the executable.
-
-     Possible values of ARG are 'mips16' and 'micromips'.  The default
-     compressed ISA encoding is 'mips16', as executables containing
-     MIPS16 code frequently are not identified as such.
-
-     This setting is "sticky"; that is, it retains its value across
-     debugging sessions until reset either explicitly with this command
-     or implicitly from an executable.
-
-     The compiler and/or assembler typically add symbol table
-     annotations to identify functions compiled for the MIPS16 or
-     microMIPS ISAs.  If these function-scope annotations are present,
-     GDB uses them in preference to the global compressed ISA encoding
-     setting.
-
-'show mips compression'
-     Show the MIPS compressed ISA encoding used by GDB to debug the
-     inferior.
-
-'set mipsfpu'
-'show mipsfpu'
-     *Note set mipsfpu: MIPS Embedded.
-
-'set mips mask-address ARG'
-     This command determines whether the most-significant 32 bits of
-     64-bit MIPS addresses are masked off.  The argument ARG can be
-     'on', 'off', or 'auto'.  The latter is the default setting, which
-     lets GDB determine the correct value.
-
-'show mips mask-address'
-     Show whether the upper 32 bits of MIPS addresses are masked off or
-     not.
-
-'set remote-mips64-transfers-32bit-regs'
-     This command controls compatibility with 64-bit MIPS targets that
-     transfer data in 32-bit quantities.  If you have an old MIPS 64
-     target that transfers 32 bits for some registers, like SR and FSR,
-     and 64 bits for other registers, set this option to 'on'.
-
-'show remote-mips64-transfers-32bit-regs'
-     Show the current setting of compatibility with older MIPS 64
-     targets.
-
-'set debug mips'
-     This command turns on and off debugging messages for the
-     MIPS-specific target code in GDB.
-
-'show debug mips'
-     Show the current setting of MIPS debugging messages.
-
-
-File: gdb.info,  Node: HPPA,  Next: PowerPC,  Prev: MIPS,  Up: Architectures
-
-21.4.5 HPPA
------------
-
-When GDB is debugging the HP PA architecture, it provides the following
-special commands:
-
-'set debug hppa'
-     This command determines whether HPPA architecture-specific
-     debugging messages are to be displayed.
-
-'show debug hppa'
-     Show whether HPPA debugging messages are displayed.
-
-'maint print unwind ADDRESS'
-     This command displays the contents of the unwind table entry at the
-     given ADDRESS.
-
-
-File: gdb.info,  Node: PowerPC,  Next: Nios II,  Prev: HPPA,  Up: Architectures
-
-21.4.6 PowerPC
---------------
-
-When GDB is debugging the PowerPC architecture, it provides a set of
-pseudo-registers to enable inspection of 128-bit wide Decimal Floating
-Point numbers stored in the floating point registers.  These values must
-be stored in two consecutive registers, always starting at an even
-register like 'f0' or 'f2'.
-
-   The pseudo-registers go from '$dl0' through '$dl15', and are formed
-by joining the even/odd register pairs 'f0' and 'f1' for '$dl0', 'f2'
-and 'f3' for '$dl1' and so on.
-
-   For POWER7 processors, GDB provides a set of pseudo-registers, the
-64-bit wide Extended Floating Point Registers ('f32' through 'f63').
-
-
-File: gdb.info,  Node: Nios II,  Next: Sparc64,  Prev: PowerPC,  Up: Architectures
-
-21.4.7 Nios II
---------------
-
-When GDB is debugging the Nios II architecture, it provides the
-following special commands:
-
-'set debug nios2'
-     This command turns on and off debugging messages for the Nios II
-     target code in GDB.
-
-'show debug nios2'
-     Show the current setting of Nios II debugging messages.
-
-
-File: gdb.info,  Node: Sparc64,  Next: S12Z,  Prev: Nios II,  Up: Architectures
-
-21.4.8 Sparc64
---------------
-
-21.4.8.1 ADI Support
-....................
-
-The M7 processor supports an Application Data Integrity (ADI) feature
-that detects invalid data accesses.  When software allocates memory and
-enables ADI on the allocated memory, it chooses a 4-bit version number,
-sets the version in the upper 4 bits of the 64-bit pointer to that data,
-and stores the 4-bit version in every cacheline of that data.  Hardware
-saves the latter in spare bits in the cache and memory hierarchy.  On
-each load and store, the processor compares the upper 4 VA (virtual
-address) bits to the cacheline's version.  If there is a mismatch, the
-processor generates a version mismatch trap which can be either precise
-or disrupting.  The trap is an error condition which the kernel delivers
-to the process as a SIGSEGV signal.
-
-   Note that only 64-bit applications can use ADI and need to be built
-with ADI-enabled.
-
-   Values of the ADI version tags, which are in granularity of a
-cacheline (64 bytes), can be viewed or modified.
-
-'adi (examine | x) [ / N ] ADDR'
-
-     The 'adi examine' command displays the value of one ADI version tag
-     per cacheline.
-
-     N is a decimal integer specifying the number in bytes; the default
-     is 1.  It specifies how much ADI version information, at the ratio
-     of 1:ADI block size, to display.
-
-     ADDR is the address in user address space where you want GDB to
-     begin displaying the ADI version tags.
-
-     Below is an example of displaying ADI versions of variable
-     "shmaddr".
-
-          (gdb) adi x/100 shmaddr
-             0xfff800010002c000:     0 0
-
-'adi (assign | a) [ / N ] ADDR = TAG'
-
-     The 'adi assign' command is used to assign new ADI version tag to
-     an address.
-
-     N is a decimal integer specifying the number in bytes; the default
-     is 1.  It specifies how much ADI version information, at the ratio
-     of 1:ADI block size, to modify.
-
-     ADDR is the address in user address space where you want GDB to
-     begin modifying the ADI version tags.
-
-     TAG is the new ADI version tag.
-
-     For example, do the following to modify then verify ADI versions of
-     variable "shmaddr":
-
-          (gdb) adi a/100 shmaddr = 7
-          (gdb) adi x/100 shmaddr
-             0xfff800010002c000:     7 7
-
-
-File: gdb.info,  Node: S12Z,  Prev: Sparc64,  Up: Architectures
-
-21.4.9 S12Z
------------
-
-When GDB is debugging the S12Z architecture, it provides the following
-special command:
-
-'maint info bdccsr'
-     This command displays the current value of the microprocessor's
-     BDCCSR register.
-
-
-File: gdb.info,  Node: Controlling GDB,  Next: Extending GDB,  Prev: Configurations,  Up: Top
-
-22 Controlling GDB
-******************
-
-You can alter the way GDB interacts with you by using the 'set' command.
-For commands controlling how GDB displays data, see *note Print
-Settings: Print Settings.  Other settings are described here.
-
-* Menu:
-
-* Prompt::                      Prompt
-* Editing::                     Command editing
-* Command History::             Command history
-* Screen Size::                 Screen size
-* Output Styling::              Output styling
-* Numbers::                     Numbers
-* ABI::                         Configuring the current ABI
-* Auto-loading::                Automatically loading associated files
-* Messages/Warnings::           Optional warnings and messages
-* Debugging Output::            Optional messages about internal happenings
-* Other Misc Settings::         Other Miscellaneous Settings
-
-
-File: gdb.info,  Node: Prompt,  Next: Editing,  Up: Controlling GDB
-
-22.1 Prompt
-===========
-
-GDB indicates its readiness to read a command by printing a string
-called the "prompt".  This string is normally '(gdb)'.  You can change
-the prompt string with the 'set prompt' command.  For instance, when
-debugging GDB with GDB, it is useful to change the prompt in one of the
-GDB sessions so that you can always tell which one you are talking to.
-
-   _Note:_ 'set prompt' does not add a space for you after the prompt
-you set.  This allows you to set a prompt which ends in a space or a
-prompt that does not.
-
-'set prompt NEWPROMPT'
-     Directs GDB to use NEWPROMPT as its prompt string henceforth.
-
-'show prompt'
-     Prints a line of the form: 'Gdb's prompt is: YOUR-PROMPT'
-
-   Versions of GDB that ship with Python scripting enabled have prompt
-extensions.  The commands for interacting with these extensions are:
-
-'set extended-prompt PROMPT'
-     Set an extended prompt that allows for substitutions.  *Note
-     gdb.prompt::, for a list of escape sequences that can be used for
-     substitution.  Any escape sequences specified as part of the prompt
-     string are replaced with the corresponding strings each time the
-     prompt is displayed.
-
-     For example:
-
-          set extended-prompt Current working directory: \w (gdb)
-
-     Note that when an extended-prompt is set, it takes control of the
-     PROMPT_HOOK hook.  *Note prompt_hook::, for further information.
-
-'show extended-prompt'
-     Prints the extended prompt.  Any escape sequences specified as part
-     of the prompt string with 'set extended-prompt', are replaced with
-     the corresponding strings each time the prompt is displayed.
-
-
-File: gdb.info,  Node: Editing,  Next: Command History,  Prev: Prompt,  Up: Controlling GDB
-
-22.2 Command Editing
-====================
-
-GDB reads its input commands via the "Readline" interface.  This GNU
-library provides consistent behavior for programs which provide a
-command line interface to the user.  Advantages are GNU Emacs-style or
-"vi"-style inline editing of commands, 'csh'-like history substitution,
-and a storage and recall of command history across debugging sessions.
-
-   You may control the behavior of command line editing in GDB with the
-command 'set'.
-
-'set editing'
-'set editing on'
-     Enable command line editing (enabled by default).
-
-'set editing off'
-     Disable command line editing.
-
-'show editing'
-     Show whether command line editing is enabled.
-
-   *Note Command Line Editing::, for more details about the Readline
-interface.  Users unfamiliar with GNU Emacs or 'vi' are encouraged to
-read that chapter.
-
-   GDB sets the Readline application name to 'gdb'.  This is useful for
-conditions in '.inputrc'.
-
-   GDB defines a bindable Readline command, 'operate-and-get-next'.
-This is bound to 'C-o' by default.  This command accepts the current
-line for execution and fetches the next line relative to the current
-line from the history for editing.  Any argument is ignored.
-
-
-File: gdb.info,  Node: Command History,  Next: Screen Size,  Prev: Editing,  Up: Controlling GDB
-
-22.3 Command History
-====================
-
-GDB can keep track of the commands you type during your debugging
-sessions, so that you can be certain of precisely what happened.  Use
-these commands to manage the GDB command history facility.
-
-   GDB uses the GNU History library, a part of the Readline package, to
-provide the history facility.  *Note Using History Interactively::, for
-the detailed description of the History library.
-
-   To issue a command to GDB without affecting certain aspects of the
-state which is seen by users, prefix it with 'server ' (*note Server
-Prefix::).  This means that this command will not affect the command
-history, nor will it affect GDB's notion of which command to repeat if
-<RET> is pressed on a line by itself.
-
-   The server prefix does not affect the recording of values into the
-value history; to print a value without recording it into the value
-history, use the 'output' command instead of the 'print' command.
-
-   Here is the description of GDB commands related to command history.
-
-'set history filename FNAME'
-     Set the name of the GDB command history file to FNAME.  This is the
-     file where GDB reads an initial command history list, and where it
-     writes the command history from this session when it exits.  You
-     can access this list through history expansion or through the
-     history command editing characters listed below.  This file
-     defaults to the value of the environment variable 'GDBHISTFILE', or
-     to './.gdb_history' ('./_gdb_history' on MS-DOS) if this variable
-     is not set.
-
-'set history save'
-'set history save on'
-     Record command history in a file, whose name may be specified with
-     the 'set history filename' command.  By default, this option is
-     disabled.
-
-'set history save off'
-     Stop recording command history in a file.
-
-'set history size SIZE'
-'set history size unlimited'
-     Set the number of commands which GDB keeps in its history list.
-     This defaults to the value of the environment variable
-     'GDBHISTSIZE', or to 256 if this variable is not set.  Non-numeric
-     values of 'GDBHISTSIZE' are ignored.  If SIZE is 'unlimited' or if
-     'GDBHISTSIZE' is either a negative number or the empty string, then
-     the number of commands GDB keeps in the history list is unlimited.
-
-'set history remove-duplicates COUNT'
-'set history remove-duplicates unlimited'
-     Control the removal of duplicate history entries in the command
-     history list.  If COUNT is non-zero, GDB will look back at the last
-     COUNT history entries and remove the first entry that is a
-     duplicate of the current entry being added to the command history
-     list.  If COUNT is 'unlimited' then this lookbehind is unbounded.
-     If COUNT is 0, then removal of duplicate history entries is
-     disabled.
-
-     Only history entries added during the current session are
-     considered for removal.  This option is set to 0 by default.
-
-   History expansion assigns special meaning to the character '!'.
-*Note Event Designators::, for more details.
-
-   Since '!' is also the logical not operator in C, history expansion is
-off by default.  If you decide to enable history expansion with the 'set
-history expansion on' command, you may sometimes need to follow '!'
-(when it is used as logical not, in an expression) with a space or a tab
-to prevent it from being expanded.  The readline history facilities do
-not attempt substitution on the strings '!=' and '!(', even when history
-expansion is enabled.
-
-   The commands to control history expansion are:
-
-'set history expansion on'
-'set history expansion'
-     Enable history expansion.  History expansion is off by default.
-
-'set history expansion off'
-     Disable history expansion.
-
-'show history'
-'show history filename'
-'show history save'
-'show history size'
-'show history expansion'
-     These commands display the state of the GDB history parameters.
-     'show history' by itself displays all four states.
-
-'show commands'
-     Display the last ten commands in the command history.
-
-'show commands N'
-     Print ten commands centered on command number N.
-
-'show commands +'
-     Print ten commands just after the commands last printed.
-
-
-File: gdb.info,  Node: Screen Size,  Next: Output Styling,  Prev: Command History,  Up: Controlling GDB
-
-22.4 Screen Size
-================
-
-Certain commands to GDB may produce large amounts of information output
-to the screen.  To help you read all of it, GDB pauses and asks you for
-input at the end of each page of output.  Type <RET> when you want to
-see one more page of output, 'q' to discard the remaining output, or 'c'
-to continue without paging for the rest of the current command.  Also,
-the screen width setting determines when to wrap lines of output.
-Depending on what is being printed, GDB tries to break the line at a
-readable place, rather than simply letting it overflow onto the
-following line.
-
-   Normally GDB knows the size of the screen from the terminal driver
-software.  For example, on Unix GDB uses the termcap data base together
-with the value of the 'TERM' environment variable and the 'stty rows'
-and 'stty cols' settings.  If this is not correct, you can override it
-with the 'set height' and 'set width' commands:
-
-'set height LPP'
-'set height unlimited'
-'show height'
-'set width CPL'
-'set width unlimited'
-'show width'
-     These 'set' commands specify a screen height of LPP lines and a
-     screen width of CPL characters.  The associated 'show' commands
-     display the current settings.
-
-     If you specify a height of either 'unlimited' or zero lines, GDB
-     does not pause during output no matter how long the output is.
-     This is useful if output is to a file or to an editor buffer.
-
-     Likewise, you can specify 'set width unlimited' or 'set width 0' to
-     prevent GDB from wrapping its output.
-
-'set pagination on'
-'set pagination off'
-     Turn the output pagination on or off; the default is on.  Turning
-     pagination off is the alternative to 'set height unlimited'.  Note
-     that running GDB with the '--batch' option (*note -batch: Mode
-     Options.) also automatically disables pagination.
-
-'show pagination'
-     Show the current pagination mode.
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-4 ./gdb/doc/gdb.info-4
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-4	2019-12-11 01:53:12.000000000 +0000
+++ ./gdb/doc/gdb.info-4	2024-02-01 01:52:20.000000000 +0000
@@ -1,6 +1,6 @@
-This is gdb.info, produced by makeinfo version 6.3 from gdb.texinfo.
+This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo.
 
-Copyright (C) 1988-2019 Free Software Foundation, Inc.
+Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -21,9 +21,9 @@ END-INFO-DIR-ENTRY
    This file documents the GNU debugger GDB.
 
    This is the Tenth Edition, of 'Debugging with GDB: the GNU
-Source-Level Debugger' for GDB (GDB) Version 9.0.50.20191211-git.
+Source-Level Debugger' for GDB (GDB) Version 15.0.50.20240201-git.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -37,6 +37,2210 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+File: gdb.info,  Node: DJGPP Native,  Next: Cygwin Native,  Prev: Process Information,  Up: Native
+
+21.1.3 Features for Debugging DJGPP Programs
+--------------------------------------------
+
+DJGPP is a port of the GNU development tools to MS-DOS and MS-Windows.
+DJGPP programs are 32-bit protected-mode programs that use the "DPMI"
+(DOS Protected-Mode Interface) API to run on top of real-mode DOS
+systems and their emulations.
+
+   GDB supports native debugging of DJGPP programs, and defines a few
+commands specific to the DJGPP port.  This subsection describes those
+commands.
+
+'info dos'
+     This is a prefix of DJGPP-specific commands which print information
+     about the target system and important OS structures.
+
+'info dos sysinfo'
+     This command displays assorted information about the underlying
+     platform: the CPU type and features, the OS version and flavor, the
+     DPMI version, and the available conventional and DPMI memory.
+
+'info dos gdt'
+'info dos ldt'
+'info dos idt'
+     These 3 commands display entries from, respectively, Global, Local,
+     and Interrupt Descriptor Tables (GDT, LDT, and IDT). The descriptor
+     tables are data structures which store a descriptor for each
+     segment that is currently in use.  The segment's selector is an
+     index into a descriptor table; the table entry for that index holds
+     the descriptor's base address and limit, and its attributes and
+     access rights.
+
+     A typical DJGPP program uses 3 segments: a code segment, a data
+     segment (used for both data and the stack), and a DOS segment
+     (which allows access to DOS/BIOS data structures and absolute
+     addresses in conventional memory).  However, the DPMI host will
+     usually define additional segments in order to support the DPMI
+     environment.
+
+     These commands allow to display entries from the descriptor tables.
+     Without an argument, all entries from the specified table are
+     displayed.  An argument, which should be an integer expression,
+     means display a single entry whose index is given by the argument.
+     For example, here's a convenient way to display information about
+     the debugged program's data segment:
+
+     (gdb) info dos ldt $ds
+     0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)
+
+     This comes in handy when you want to see whether a pointer is
+     outside the data segment's limit (i.e. "garbled").
+
+'info dos pde'
+'info dos pte'
+     These two commands display entries from, respectively, the Page
+     Directory and the Page Tables.  Page Directories and Page Tables
+     are data structures which control how virtual memory addresses are
+     mapped into physical addresses.  A Page Table includes an entry for
+     every page of memory that is mapped into the program's address
+     space; there may be several Page Tables, each one holding up to
+     4096 entries.  A Page Directory has up to 4096 entries, one each
+     for every Page Table that is currently in use.
+
+     Without an argument, 'info dos pde' displays the entire Page
+     Directory, and 'info dos pte' displays all the entries in all of
+     the Page Tables.  An argument, an integer expression, given to the
+     'info dos pde' command means display only that entry from the Page
+     Directory table.  An argument given to the 'info dos pte' command
+     means display entries from a single Page Table, the one pointed to
+     by the specified entry in the Page Directory.
+
+     These commands are useful when your program uses "DMA" (Direct
+     Memory Access), which needs physical addresses to program the DMA
+     controller.
+
+     These commands are supported only with some DPMI servers.
+
+'info dos address-pte ADDR'
+     This command displays the Page Table entry for a specified linear
+     address.  The argument ADDR is a linear address which should
+     already have the appropriate segment's base address added to it,
+     because this command accepts addresses which may belong to _any_
+     segment.  For example, here's how to display the Page Table entry
+     for the page where a variable 'i' is stored:
+
+     (gdb) info dos address-pte __djgpp_base_address + (char *)&i
+     Page Table entry for address 0x11a00d30:
+     Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30
+
+     This says that 'i' is stored at offset '0xd30' from the page whose
+     physical base address is '0x02698000', and shows all the attributes
+     of that page.
+
+     Note that you must cast the addresses of variables to a 'char *',
+     since otherwise the value of '__djgpp_base_address', the base
+     address of all variables and functions in a DJGPP program, will be
+     added using the rules of C pointer arithmetics: if 'i' is declared
+     an 'int', GDB will add 4 times the value of '__djgpp_base_address'
+     to the address of 'i'.
+
+     Here's another example, it displays the Page Table entry for the
+     transfer buffer:
+
+     (gdb) info dos address-pte *((unsigned *)&_go32_info_block + 3)
+     Page Table entry for address 0x29110:
+     Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110
+
+     (The '+ 3' offset is because the transfer buffer's address is the
+     3rd member of the '_go32_info_block' structure.)  The output
+     clearly shows that this DPMI server maps the addresses in
+     conventional memory 1:1, i.e. the physical ('0x00029000' + '0x110')
+     and linear ('0x29110') addresses are identical.
+
+     This command is supported only with some DPMI servers.
+
+   In addition to native debugging, the DJGPP port supports remote
+debugging via a serial data link.  The following commands are specific
+to remote serial debugging in the DJGPP port of GDB.
+
+'set com1base ADDR'
+     This command sets the base I/O port address of the 'COM1' serial
+     port.
+
+'set com1irq IRQ'
+     This command sets the "Interrupt Request" ('IRQ') line to use for
+     the 'COM1' serial port.
+
+     There are similar commands 'set com2base', 'set com3irq', etc. for
+     setting the port address and the 'IRQ' lines for the other 3 COM
+     ports.
+
+     The related commands 'show com1base', 'show com1irq' etc. display
+     the current settings of the base address and the 'IRQ' lines used
+     by the COM ports.
+
+'info serial'
+     This command prints the status of the 4 DOS serial ports.  For each
+     port, it prints whether it's active or not, its I/O base address
+     and IRQ number, whether it uses a 16550-style FIFO, its baudrate,
+     and the counts of various errors encountered so far.
+
+
+File: gdb.info,  Node: Cygwin Native,  Next: Hurd Native,  Prev: DJGPP Native,  Up: Native
+
+21.1.4 Features for Debugging MS Windows PE Executables
+-------------------------------------------------------
+
+GDB supports native debugging of MS Windows programs, including DLLs
+with and without symbolic debugging information.
+
+   MS-Windows programs that call 'SetConsoleMode' to switch off the
+special meaning of the 'Ctrl-C' keystroke cannot be interrupted by
+typing 'C-c'.  For this reason, GDB on MS-Windows supports 'C-<BREAK>'
+as an alternative interrupt key sequence, which can be used to interrupt
+the debuggee even if it ignores 'C-c'.
+
+   There are various additional Cygwin-specific commands, described in
+this section.  Working with DLLs that have no debugging symbols is
+described in *note Non-debug DLL Symbols::.
+
+'info w32'
+     This is a prefix of MS Windows-specific commands which print
+     information about the target system and important OS structures.
+
+'info w32 selector'
+     This command displays information returned by the Win32 API
+     'GetThreadSelectorEntry' function.  It takes an optional argument
+     that is evaluated to a long value to give the information about
+     this given selector.  Without argument, this command displays
+     information about the six segment registers.
+
+'info w32 thread-information-block'
+     This command displays thread specific information stored in the
+     Thread Information Block (readable on the X86 CPU family using
+     '$fs' selector for 32-bit programs and '$gs' for 64-bit programs).
+
+'signal-event ID'
+     This command signals an event with user-provided ID.  Used to
+     resume crashing process when attached to it using MS-Windows JIT
+     debugging (AeDebug).
+
+     To use it, create or edit the following keys in
+     'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug' and/or
+     'HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows
+     NT\CurrentVersion\AeDebug' (for x86_64 versions):
+
+        - 'Debugger' (REG_SZ) -- a command to launch the debugger.
+          Suggested command is: 'FULLY-QUALIFIED-PATH-TO-GDB.EXE -ex
+          "attach %ld" -ex "signal-event %ld" -ex "continue"'.
+
+          The first '%ld' will be replaced by the process ID of the
+          crashing process, the second '%ld' will be replaced by the ID
+          of the event that blocks the crashing process, waiting for GDB
+          to attach.
+
+        - 'Auto' (REG_SZ) -- either '1' or '0'.  '1' will make the
+          system run debugger specified by the Debugger key
+          automatically, '0' will cause a dialog box with "OK" and
+          "Cancel" buttons to appear, which allows the user to either
+          terminate the crashing process (OK) or debug it (Cancel).
+
+'set cygwin-exceptions MODE'
+     If MODE is 'on', GDB will break on exceptions that happen inside
+     the Cygwin DLL. If MODE is 'off', GDB will delay recognition of
+     exceptions, and may ignore some exceptions which seem to be caused
+     by internal Cygwin DLL "bookkeeping".  This option is meant
+     primarily for debugging the Cygwin DLL itself; the default value is
+     'off' to avoid annoying GDB users with false 'SIGSEGV' signals.
+
+'show cygwin-exceptions'
+     Displays whether GDB will break on exceptions that happen inside
+     the Cygwin DLL itself.
+
+'set new-console MODE'
+     If MODE is 'on' the debuggee will be started in a new console on
+     next start.  If MODE is 'off', the debuggee will be started in the
+     same console as the debugger.
+
+'show new-console'
+     Displays whether a new console is used when the debuggee is
+     started.
+
+'set new-group MODE'
+     This boolean value controls whether the debuggee should start a new
+     group or stay in the same group as the debugger.  This affects the
+     way the Windows OS handles 'Ctrl-C'.
+
+'show new-group'
+     Displays current value of new-group boolean.
+
+'set debugevents'
+     This boolean value adds debug output concerning kernel events
+     related to the debuggee seen by the debugger.  This includes events
+     that signal thread and process creation and exit, DLL loading and
+     unloading, console interrupts, and debugging messages produced by
+     the Windows 'OutputDebugString' API call.
+
+'set debugexec'
+     This boolean value adds debug output concerning execute events
+     (such as resume thread) seen by the debugger.
+
+'set debugexceptions'
+     This boolean value adds debug output concerning exceptions in the
+     debuggee seen by the debugger.
+
+'set debugmemory'
+     This boolean value adds debug output concerning debuggee memory
+     reads and writes by the debugger.
+
+'set shell'
+     This boolean values specifies whether the debuggee is called via a
+     shell or directly (default value is on).
+
+'show shell'
+     Displays if the debuggee will be started with a shell.
+
+* Menu:
+
+* Non-debug DLL Symbols::  Support for DLLs without debugging symbols
+
+
+File: gdb.info,  Node: Non-debug DLL Symbols,  Up: Cygwin Native
+
+21.1.4.1 Support for DLLs without Debugging Symbols
+...................................................
+
+Very often on windows, some of the DLLs that your program relies on do
+not include symbolic debugging information (for example,
+'kernel32.dll').  When GDB doesn't recognize any debugging symbols in a
+DLL, it relies on the minimal amount of symbolic information contained
+in the DLL's export table.  This section describes working with such
+symbols, known internally to GDB as "minimal symbols".
+
+   Note that before the debugged program has started execution, no DLLs
+will have been loaded.  The easiest way around this problem is simply to
+start the program -- either by setting a breakpoint or letting the
+program run once to completion.
+
+21.1.4.2 DLL Name Prefixes
+..........................
+
+In keeping with the naming conventions used by the Microsoft debugging
+tools, DLL export symbols are made available with a prefix based on the
+DLL name, for instance 'KERNEL32!CreateFileA'.  The plain name is also
+entered into the symbol table, so 'CreateFileA' is often sufficient.  In
+some cases there will be name clashes within a program (particularly if
+the executable itself includes full debugging symbols) necessitating the
+use of the fully qualified name when referring to the contents of the
+DLL. Use single-quotes around the name to avoid the exclamation mark
+("!")  being interpreted as a language operator.
+
+   Note that the internal name of the DLL may be all upper-case, even
+though the file name of the DLL is lower-case, or vice-versa.  Since
+symbols within GDB are _case-sensitive_ this may cause some confusion.
+If in doubt, try the 'info functions' and 'info variables' commands or
+even 'maint print msymbols' (*note Symbols::).  Here's an example:
+
+     (gdb) info function CreateFileA
+     All functions matching regular expression "CreateFileA":
+
+     Non-debugging symbols:
+     0x77e885f4  CreateFileA
+     0x77e885f4  KERNEL32!CreateFileA
+
+     (gdb) info function !
+     All functions matching regular expression "!":
+
+     Non-debugging symbols:
+     0x6100114c  cygwin1!__assert
+     0x61004034  cygwin1!_dll_crt0@0
+     0x61004240  cygwin1!dll_crt0(per_process *)
+     [etc...]
+
+21.1.4.3 Working with Minimal Symbols
+.....................................
+
+Symbols extracted from a DLL's export table do not contain very much
+type information.  All that GDB can do is guess whether a symbol refers
+to a function or variable depending on the linker section that contains
+the symbol.  Also note that the actual contents of the memory contained
+in a DLL are not available unless the program is running.  This means
+that you cannot examine the contents of a variable or disassemble a
+function within a DLL without a running program.
+
+   Variables are generally treated as pointers and dereferenced
+automatically.  For this reason, it is often necessary to prefix a
+variable name with the address-of operator ("&") and provide explicit
+type information in the command.  Here's an example of the type of
+problem:
+
+     (gdb) print 'cygwin1!__argv'
+     'cygwin1!__argv' has unknown type; cast it to its declared type
+
+     (gdb) x 'cygwin1!__argv'
+     'cygwin1!__argv' has unknown type; cast it to its declared type
+
+   And two possible solutions:
+
+     (gdb) print ((char **)'cygwin1!__argv')[0]
+     $2 = 0x22fd98 "/cygdrive/c/mydirectory/myprogram"
+
+     (gdb) x/2x &'cygwin1!__argv'
+     0x610c0aa8 <cygwin1!__argv>:    0x10021608      0x00000000
+     (gdb) x/x 0x10021608
+     0x10021608:     0x0022fd98
+     (gdb) x/s 0x0022fd98
+     0x22fd98:        "/cygdrive/c/mydirectory/myprogram"
+
+   Setting a break point within a DLL is possible even before the
+program starts execution.  However, under these circumstances, GDB can't
+examine the initial instructions of the function in order to skip the
+function's frame set-up code.  You can work around this by using "*&" to
+set the breakpoint at a raw memory address:
+
+     (gdb) break *&'python22!PyOS_Readline'
+     Breakpoint 1 at 0x1e04eff0
+
+   The author of these extensions is not entirely convinced that setting
+a break point within a shared DLL like 'kernel32.dll' is completely
+safe.
+
+
+File: gdb.info,  Node: Hurd Native,  Next: Darwin,  Prev: Cygwin Native,  Up: Native
+
+21.1.5 Commands Specific to GNU Hurd Systems
+--------------------------------------------
+
+This subsection describes GDB commands specific to the GNU Hurd native
+debugging.
+
+'set signals'
+'set sigs'
+     This command toggles the state of inferior signal interception by
+     GDB.  Mach exceptions, such as breakpoint traps, are not affected
+     by this command.  'sigs' is a shorthand alias for 'signals'.
+
+'show signals'
+'show sigs'
+     Show the current state of intercepting inferior's signals.
+
+'set signal-thread'
+'set sigthread'
+     This command tells GDB which thread is the 'libc' signal thread.
+     That thread is run when a signal is delivered to a running process.
+     'set sigthread' is the shorthand alias of 'set signal-thread'.
+
+'show signal-thread'
+'show sigthread'
+     These two commands show which thread will run when the inferior is
+     delivered a signal.
+
+'set stopped'
+     This commands tells GDB that the inferior process is stopped, as
+     with the 'SIGSTOP' signal.  The stopped process can be continued by
+     delivering a signal to it.
+
+'show stopped'
+     This command shows whether GDB thinks the debuggee is stopped.
+
+'set exceptions'
+     Use this command to turn off trapping of exceptions in the
+     inferior.  When exception trapping is off, neither breakpoints nor
+     single-stepping will work.  To restore the default, set exception
+     trapping on.
+
+'show exceptions'
+     Show the current state of trapping exceptions in the inferior.
+
+'set task pause'
+     This command toggles task suspension when GDB has control.  Setting
+     it to on takes effect immediately, and the task is suspended
+     whenever GDB gets control.  Setting it to off will take effect the
+     next time the inferior is continued.  If this option is set to off,
+     you can use 'set thread default pause on' or 'set thread pause on'
+     (see below) to pause individual threads.
+
+'show task pause'
+     Show the current state of task suspension.
+
+'set task detach-suspend-count'
+     This command sets the suspend count the task will be left with when
+     GDB detaches from it.
+
+'show task detach-suspend-count'
+     Show the suspend count the task will be left with when detaching.
+
+'set task exception-port'
+'set task excp'
+     This command sets the task exception port to which GDB will forward
+     exceptions.  The argument should be the value of the "send rights"
+     of the task.  'set task excp' is a shorthand alias.
+
+'set noninvasive'
+     This command switches GDB to a mode that is the least invasive as
+     far as interfering with the inferior is concerned.  This is the
+     same as using 'set task pause', 'set exceptions', and 'set signals'
+     to values opposite to the defaults.
+
+'info send-rights'
+'info receive-rights'
+'info port-rights'
+'info port-sets'
+'info dead-names'
+'info ports'
+'info psets'
+     These commands display information about, respectively, send
+     rights, receive rights, port rights, port sets, and dead names of a
+     task.  There are also shorthand aliases: 'info ports' for 'info
+     port-rights' and 'info psets' for 'info port-sets'.
+
+'set thread pause'
+     This command toggles current thread suspension when GDB has
+     control.  Setting it to on takes effect immediately, and the
+     current thread is suspended whenever GDB gets control.  Setting it
+     to off will take effect the next time the inferior is continued.
+     Normally, this command has no effect, since when GDB has control,
+     the whole task is suspended.  However, if you used 'set task pause
+     off' (see above), this command comes in handy to suspend only the
+     current thread.
+
+'show thread pause'
+     This command shows the state of current thread suspension.
+
+'set thread run'
+     This command sets whether the current thread is allowed to run.
+
+'show thread run'
+     Show whether the current thread is allowed to run.
+
+'set thread detach-suspend-count'
+     This command sets the suspend count GDB will leave on a thread when
+     detaching.  This number is relative to the suspend count found by
+     GDB when it notices the thread; use 'set thread
+     takeover-suspend-count' to force it to an absolute value.
+
+'show thread detach-suspend-count'
+     Show the suspend count GDB will leave on the thread when detaching.
+
+'set thread exception-port'
+'set thread excp'
+     Set the thread exception port to which to forward exceptions.  This
+     overrides the port set by 'set task exception-port' (see above).
+     'set thread excp' is the shorthand alias.
+
+'set thread takeover-suspend-count'
+     Normally, GDB's thread suspend counts are relative to the value GDB
+     finds when it notices each thread.  This command changes the
+     suspend counts to be absolute instead.
+
+'set thread default'
+'show thread default'
+     Each of the above 'set thread' commands has a 'set thread default'
+     counterpart (e.g., 'set thread default pause', 'set thread default
+     exception-port', etc.).  The 'thread default' variety of commands
+     sets the default thread properties for all threads; you can then
+     change the properties of individual threads with the non-default
+     commands.
+
+
+File: gdb.info,  Node: Darwin,  Next: FreeBSD,  Prev: Hurd Native,  Up: Native
+
+21.1.6 Darwin
+-------------
+
+GDB provides the following commands specific to the Darwin target:
+
+'set debug darwin NUM'
+     When set to a non zero value, enables debugging messages specific
+     to the Darwin support.  Higher values produce more verbose output.
+
+'show debug darwin'
+     Show the current state of Darwin messages.
+
+'set debug mach-o NUM'
+     When set to a non zero value, enables debugging messages while GDB
+     is reading Darwin object files.  ("Mach-O" is the file format used
+     on Darwin for object and executable files.)  Higher values produce
+     more verbose output.  This is a command to diagnose problems
+     internal to GDB and should not be needed in normal usage.
+
+'show debug mach-o'
+     Show the current state of Mach-O file messages.
+
+'set mach-exceptions on'
+'set mach-exceptions off'
+     On Darwin, faults are first reported as a Mach exception and are
+     then mapped to a Posix signal.  Use this command to turn on
+     trapping of Mach exceptions in the inferior.  This might be
+     sometimes useful to better understand the cause of a fault.  The
+     default is off.
+
+'show mach-exceptions'
+     Show the current state of exceptions trapping.
+
+
+File: gdb.info,  Node: FreeBSD,  Prev: Darwin,  Up: Native
+
+21.1.7 FreeBSD
+--------------
+
+When the ABI of a system call is changed in the FreeBSD kernel, this is
+implemented by leaving a compatibility system call using the old ABI at
+the existing number and allocating a new system call number for the
+version using the new ABI. As a convenience, when a system call is
+caught by name (*note catch syscall::), compatibility system calls are
+also caught.
+
+   For example, FreeBSD 12 introduced a new variant of the 'kevent'
+system call and catching the 'kevent' system call by name catches both
+variants:
+
+     (gdb) catch syscall kevent
+     Catchpoint 1 (syscalls 'freebsd11_kevent' [363] 'kevent' [560])
+     (gdb)
+
+
+File: gdb.info,  Node: Embedded OS,  Next: Embedded Processors,  Prev: Native,  Up: Configurations
+
+21.2 Embedded Operating Systems
+===============================
+
+This section describes configurations involving the debugging of
+embedded operating systems that are available for several different
+architectures.
+
+   GDB includes the ability to debug programs running on various
+real-time operating systems.
+
+
+File: gdb.info,  Node: Embedded Processors,  Next: Architectures,  Prev: Embedded OS,  Up: Configurations
+
+21.3 Embedded Processors
+========================
+
+This section goes into details specific to particular embedded
+configurations.
+
+   Whenever a specific embedded processor has a simulator, GDB allows to
+send an arbitrary command to the simulator.
+
+'sim COMMAND'
+     Send an arbitrary COMMAND string to the simulator.  Consult the
+     documentation for the specific simulator in use for information
+     about acceptable commands.
+
+* Menu:
+
+* ARC::                         Synopsys ARC
+* ARM::                         ARM
+* BPF::                         eBPF
+* M68K::                        Motorola M68K
+* MicroBlaze::                  Xilinx MicroBlaze
+* MIPS Embedded::               MIPS Embedded
+* OpenRISC 1000::               OpenRISC 1000 (or1k)
+* PowerPC Embedded::            PowerPC Embedded
+* AVR::                         Atmel AVR
+* CRIS::                        CRIS
+* Super-H::                     Renesas Super-H
+
+
+File: gdb.info,  Node: ARC,  Next: ARM,  Up: Embedded Processors
+
+21.3.1 Synopsys ARC
+-------------------
+
+GDB provides the following ARC-specific commands:
+
+'set debug arc'
+     Control the level of ARC specific debug messages.  Use 0 for no
+     messages (the default), 1 for debug messages, and 2 for even more
+     debug messages.
+
+'show debug arc'
+     Show the level of ARC specific debugging in operation.
+
+'maint print arc arc-instruction ADDRESS'
+     Print internal disassembler information about instruction at a
+     given address.
+
+
+File: gdb.info,  Node: ARM,  Next: BPF,  Prev: ARC,  Up: Embedded Processors
+
+21.3.2 ARM
+----------
+
+GDB provides the following ARM-specific commands:
+
+'set arm disassembler'
+     This commands selects from a list of disassembly styles.  The
+     '"std"' style is the standard style.
+
+'show arm disassembler'
+     Show the current disassembly style.
+
+'set arm apcs32'
+     This command toggles ARM operation mode between 32-bit and 26-bit.
+
+'show arm apcs32'
+     Display the current usage of the ARM 32-bit mode.
+
+'set arm fpu FPUTYPE'
+     This command sets the ARM floating-point unit (FPU) type.  The
+     argument FPUTYPE can be one of these:
+
+     'auto'
+          Determine the FPU type by querying the OS ABI.
+     'softfpa'
+          Software FPU, with mixed-endian doubles on little-endian ARM
+          processors.
+     'fpa'
+          GCC-compiled FPA co-processor.
+     'softvfp'
+          Software FPU with pure-endian doubles.
+     'vfp'
+          VFP co-processor.
+
+'show arm fpu'
+     Show the current type of the FPU.
+
+'set arm abi'
+     This command forces GDB to use the specified ABI.
+
+'show arm abi'
+     Show the currently used ABI.
+
+'set arm fallback-mode (arm|thumb|auto)'
+     GDB uses the symbol table, when available, to determine whether
+     instructions are ARM or Thumb.  This command controls GDB's default
+     behavior when the symbol table is not available.  The default is
+     'auto', which causes GDB to use the current execution mode (from
+     the 'T' bit in the 'CPSR' register).
+
+'show arm fallback-mode'
+     Show the current fallback instruction mode.
+
+'set arm force-mode (arm|thumb|auto)'
+     This command overrides use of the symbol table to determine whether
+     instructions are ARM or Thumb.  The default is 'auto', which causes
+     GDB to use the symbol table and then the setting of 'set arm
+     fallback-mode'.
+
+'show arm force-mode'
+     Show the current forced instruction mode.
+
+'set arm unwind-secure-frames'
+     This command enables unwinding from Non-secure to Secure mode on
+     Cortex-M with Security extension.  This can trigger security
+     exceptions when unwinding the exception stack.  It is enabled by
+     default.
+
+'show arm unwind-secure-frames'
+     Show whether unwinding from Non-secure to Secure mode is enabled.
+
+'set debug arm'
+     Toggle whether to display ARM-specific debugging messages from the
+     ARM target support subsystem.
+
+'show debug arm'
+     Show whether ARM-specific debugging messages are enabled.
+
+'target sim [SIMARGS] ...'
+     The GDB ARM simulator accepts the following optional arguments.
+
+     '--swi-support=TYPE'
+          Tell the simulator which SWI interfaces to support.  The
+          argument TYPE may be a comma separated list of the following
+          values.  The default value is 'all'.
+
+          'none'
+          'demon'
+          'angel'
+          'redboot'
+          'all'
+
+
+File: gdb.info,  Node: BPF,  Next: M68K,  Prev: ARM,  Up: Embedded Processors
+
+21.3.3 BPF
+----------
+
+'target sim [SIMARGS] ...'
+     The GDB BPF simulator accepts the following optional arguments.
+
+     '--skb-data-offset=OFFSET'
+          Tell the simulator the offset, measured in bytes, of the
+          'skb_data' field in the kernel 'struct sk_buff' structure.
+          This offset is used by some BPF specific-purpose load/store
+          instructions.  Defaults to 0.
+
+
+File: gdb.info,  Node: M68K,  Next: MicroBlaze,  Prev: BPF,  Up: Embedded Processors
+
+21.3.4 M68k
+-----------
+
+The Motorola m68k configuration includes ColdFire support.
+
+
+File: gdb.info,  Node: MicroBlaze,  Next: MIPS Embedded,  Prev: M68K,  Up: Embedded Processors
+
+21.3.5 MicroBlaze
+-----------------
+
+The MicroBlaze is a soft-core processor supported on various Xilinx
+FPGAs, such as Spartan or Virtex series.  Boards with these processors
+usually have JTAG ports which connect to a host system running the
+Xilinx Embedded Development Kit (EDK) or Software Development Kit (SDK).
+This host system is used to download the configuration bitstream to the
+target FPGA. The Xilinx Microprocessor Debugger (XMD) program
+communicates with the target board using the JTAG interface and presents
+a 'gdbserver' interface to the board.  By default 'xmd' uses port
+'1234'.  (While it is possible to change this default port, it requires
+the use of undocumented 'xmd' commands.  Contact Xilinx support if you
+need to do this.)
+
+   Use these GDB commands to connect to the MicroBlaze target processor.
+
+'target remote :1234'
+     Use this command to connect to the target if you are running GDB on
+     the same system as 'xmd'.
+
+'target remote XMD-HOST:1234'
+     Use this command to connect to the target if it is connected to
+     'xmd' running on a different system named XMD-HOST.
+
+'load'
+     Use this command to download a program to the MicroBlaze target.
+
+'set debug microblaze N'
+     Enable MicroBlaze-specific debugging messages if non-zero.
+
+'show debug microblaze N'
+     Show MicroBlaze-specific debugging level.
+
+
+File: gdb.info,  Node: MIPS Embedded,  Next: OpenRISC 1000,  Prev: MicroBlaze,  Up: Embedded Processors
+
+21.3.6 MIPS Embedded
+--------------------
+
+GDB supports these special commands for MIPS targets:
+
+'set mipsfpu double'
+'set mipsfpu single'
+'set mipsfpu none'
+'set mipsfpu auto'
+'show mipsfpu'
+     If your target board does not support the MIPS floating point
+     coprocessor, you should use the command 'set mipsfpu none' (if you
+     need this, you may wish to put the command in your GDB init file).
+     This tells GDB how to find the return value of functions which
+     return floating point values.  It also allows GDB to avoid saving
+     the floating point registers when calling functions on the board.
+     If you are using a floating point coprocessor with only single
+     precision floating point support, as on the R4650 processor, use
+     the command 'set mipsfpu single'.  The default double precision
+     floating point coprocessor may be selected using 'set mipsfpu
+     double'.
+
+     In previous versions the only choices were double precision or no
+     floating point, so 'set mipsfpu on' will select double precision
+     and 'set mipsfpu off' will select no floating point.
+
+     As usual, you can inquire about the 'mipsfpu' variable with 'show
+     mipsfpu'.
+
+
+File: gdb.info,  Node: OpenRISC 1000,  Next: PowerPC Embedded,  Prev: MIPS Embedded,  Up: Embedded Processors
+
+21.3.7 OpenRISC 1000
+--------------------
+
+The OpenRISC 1000 provides a free RISC instruction set architecture.  It
+is mainly provided as a soft-core which can run on Xilinx, Altera and
+other FPGA's.
+
+   GDB for OpenRISC supports the below commands when connecting to a
+target:
+
+'target sim'
+
+     Runs the builtin CPU simulator which can run very basic programs
+     but does not support most hardware functions like MMU. For more
+     complex use cases the user is advised to run an external target,
+     and connect using 'target remote'.
+
+     Example: 'target sim'
+
+'set debug or1k'
+     Toggle whether to display OpenRISC-specific debugging messages from
+     the OpenRISC target support subsystem.
+
+'show debug or1k'
+     Show whether OpenRISC-specific debugging messages are enabled.
+
+
+File: gdb.info,  Node: PowerPC Embedded,  Next: AVR,  Prev: OpenRISC 1000,  Up: Embedded Processors
+
+21.3.8 PowerPC Embedded
+-----------------------
+
+GDB supports using the DVC (Data Value Compare) register to implement in
+hardware simple hardware watchpoint conditions of the form:
+
+     (gdb) watch ADDRESS|VARIABLE \
+       if  ADDRESS|VARIABLE == CONSTANT EXPRESSION
+
+   The DVC register will be automatically used when GDB detects such
+pattern in a condition expression, and the created watchpoint uses one
+debug register (either the 'exact-watchpoints' option is on and the
+variable is scalar, or the variable has a length of one byte).  This
+feature is available in native GDB running on a Linux kernel version
+2.6.34 or newer.
+
+   When running on PowerPC embedded processors, GDB automatically uses
+ranged hardware watchpoints, unless the 'exact-watchpoints' option is
+on, in which case watchpoints using only one debug register are created
+when watching variables of scalar types.
+
+   You can create an artificial array to watch an arbitrary memory
+region using one of the following commands (*note Expressions::):
+
+     (gdb) watch *((char *) ADDRESS)@LENGTH
+     (gdb) watch {char[LENGTH]} ADDRESS
+
+   PowerPC embedded processors support masked watchpoints.  See the
+discussion about the 'mask' argument in *note Set Watchpoints::.
+
+   PowerPC embedded processors support hardware accelerated "ranged
+breakpoints".  A ranged breakpoint stops execution of the inferior
+whenever it executes an instruction at any address within the range it
+was set at.  To set a ranged breakpoint in GDB, use the 'break-range'
+command.
+
+   GDB provides the following PowerPC-specific commands:
+
+'break-range START-LOCSPEC, END-LOCSPEC'
+     Set a breakpoint for an address range given by START-LOCSPEC and
+     END-LOCSPEC, which are location specs.  *Note Location
+     Specifications::, for a list of all the possible forms of location
+     specs.  GDB resolves both START-LOCSPEC and END-LOCSPEC, and uses
+     the addresses of the resolved code locations as start and end
+     addresses of the range to break at.  The breakpoint will stop
+     execution of the inferior whenever it executes an instruction at
+     any address between the start and end addresses, inclusive.  If
+     either START-LOCSPEC or END-LOCSPEC resolve to multiple code
+     locations in the program, then the command aborts with an error
+     without creating a breakpoint.
+
+'set powerpc soft-float'
+'show powerpc soft-float'
+     Force GDB to use (or not use) a software floating point calling
+     convention.  By default, GDB selects the calling convention based
+     on the selected architecture and the provided executable file.
+
+'set powerpc vector-abi'
+'show powerpc vector-abi'
+     Force GDB to use the specified calling convention for vector
+     arguments and return values.  The valid options are 'auto';
+     'generic', to avoid vector registers even if they are present;
+     'altivec', to use AltiVec registers; and 'spe' to use SPE
+     registers.  By default, GDB selects the calling convention based on
+     the selected architecture and the provided executable file.
+
+'set powerpc exact-watchpoints'
+'show powerpc exact-watchpoints'
+     Allow GDB to use only one debug register when watching a variable
+     of scalar type, thus assuming that the variable is accessed through
+     the address of its first byte.
+
+
+File: gdb.info,  Node: AVR,  Next: CRIS,  Prev: PowerPC Embedded,  Up: Embedded Processors
+
+21.3.9 Atmel AVR
+----------------
+
+When configured for debugging the Atmel AVR, GDB supports the following
+AVR-specific commands:
+
+'info io_registers'
+     This command displays information about the AVR I/O registers.  For
+     each register, GDB prints its number and value.
+
+
+File: gdb.info,  Node: CRIS,  Next: Super-H,  Prev: AVR,  Up: Embedded Processors
+
+21.3.10 CRIS
+------------
+
+When configured for debugging CRIS, GDB provides the following
+CRIS-specific commands:
+
+'set cris-version VER'
+     Set the current CRIS version to VER, either '10' or '32'.  The CRIS
+     version affects register names and sizes.  This command is useful
+     in case autodetection of the CRIS version fails.
+
+'show cris-version'
+     Show the current CRIS version.
+
+'set cris-dwarf2-cfi'
+     Set the usage of DWARF-2 CFI for CRIS debugging.  The default is
+     'on'.  Change to 'off' when using 'gcc-cris' whose version is below
+     'R59'.
+
+'show cris-dwarf2-cfi'
+     Show the current state of using DWARF-2 CFI.
+
+'set cris-mode MODE'
+     Set the current CRIS mode to MODE.  It should only be changed when
+     debugging in guru mode, in which case it should be set to 'guru'
+     (the default is 'normal').
+
+'show cris-mode'
+     Show the current CRIS mode.
+
+
+File: gdb.info,  Node: Super-H,  Prev: CRIS,  Up: Embedded Processors
+
+21.3.11 Renesas Super-H
+-----------------------
+
+For the Renesas Super-H processor, GDB provides these commands:
+
+'set sh calling-convention CONVENTION'
+     Set the calling-convention used when calling functions from GDB.
+     Allowed values are 'gcc', which is the default setting, and
+     'renesas'.  With the 'gcc' setting, functions are called using the
+     GCC calling convention.  If the DWARF-2 information of the called
+     function specifies that the function follows the Renesas calling
+     convention, the function is called using the Renesas calling
+     convention.  If the calling convention is set to 'renesas', the
+     Renesas calling convention is always used, regardless of the
+     DWARF-2 information.  This can be used to override the default of
+     'gcc' if debug information is missing, or the compiler does not
+     emit the DWARF-2 calling convention entry for a function.
+
+'show sh calling-convention'
+     Show the current calling convention setting.
+
+
+File: gdb.info,  Node: Architectures,  Prev: Embedded Processors,  Up: Configurations
+
+21.4 Architectures
+==================
+
+This section describes characteristics of architectures that affect all
+uses of GDB with the architecture, both native and cross.
+
+* Menu:
+
+* AArch64::
+* x86::
+* Alpha::
+* MIPS::
+* HPPA::               HP PA architecture
+* PowerPC::
+* Nios II::
+* Sparc64::
+* S12Z::
+* AMD GPU::            AMD GPU architectures
+
+
+File: gdb.info,  Node: AArch64,  Next: x86,  Up: Architectures
+
+21.4.1 AArch64
+--------------
+
+When GDB is debugging the AArch64 architecture, it provides the
+following special commands:
+
+'set debug aarch64'
+     This command determines whether AArch64 architecture-specific
+     debugging messages are to be displayed.
+
+'show debug aarch64'
+     Show whether AArch64 debugging messages are displayed.
+
+21.4.1.1 AArch64 SVE.
+.....................
+
+When GDB is debugging the AArch64 architecture, if the Scalable Vector
+Extension (SVE) is present, then GDB will provide the vector registers
+'$z0' through '$z31', vector predicate registers '$p0' through '$p15',
+and the '$ffr' register.  In addition, the pseudo register '$vg' will be
+provided.  This is the vector granule for the current thread and
+represents the number of 64-bit chunks in an SVE 'z' register.
+
+   If the vector length changes, then the '$vg' register will be
+updated, but the lengths of the 'z' and 'p' registers will not change.
+This is a known limitation of GDB and does not affect the execution of
+the target process.
+
+   For SVE, the following definitions are used throughout GDB's source
+code and in this document:
+
+   * VL: The vector length, in bytes.  It defines the size of each 'Z'
+     register.
+
+   * VQ: The number of 128 bit units in VL.  This is mostly used
+     internally by GDB and the Linux Kernel.
+
+   * VG: The number of 64 bit units in VL.  This is mostly used
+     internally by GDB and the Linux Kernel.
+
+21.4.1.2 AArch64 SME.
+.....................
+
+The Scalable Matrix Extension (SME
+(https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/scalable-matrix-extension-armv9-a-architecture))
+is an AArch64 architecture extension that expands on the concept of the
+Scalable Vector Extension (SVE
+(https://developer.arm.com/documentation/101726/4-0/Learn-about-the-Scalable-Vector-Extension--SVE-/What-is-the-Scalable-Vector-Extension-))
+by providing a 2-dimensional register 'ZA', which is a square matrix of
+variable size, just like SVE provides a group of vector registers of
+variable size.
+
+   Similarly to SVE, where the size of each 'Z' register is directly
+related to the vector length (VL for short), the SME 'ZA' matrix
+register's size is directly related to the streaming vector length (SVL
+for short).  *Note vl::.  *Note svl::.
+
+   The 'ZA' register state can be either active or inactive, if it is
+not in use.
+
+   SME also introduces a new execution mode called streaming SVE mode
+(streaming mode for short).  When streaming mode is enabled, the program
+supports execution of SVE2 instructions and the SVE registers will have
+vector length SVL.  When streaming mode is disabled, the SVE registers
+have vector length VL.
+
+   For more information about SME and SVE, please refer to official
+architecture documentation
+(https://developer.arm.com/documentation/ddi0487/latest).
+
+   The following definitions are used throughout GDB's source code and
+in this document:
+
+   * SVL: The streaming vector length, in bytes.  It defines the size of
+     each dimension of the 2-dimensional square 'ZA' matrix.  The total
+     size of 'ZA' is therefore SVL by SVL.
+
+     When streaming mode is enabled, it defines the size of the SVE
+     registers as well.
+
+   * SVQ: The number of 128 bit units in SVL, also known as streaming
+     vector granule.  This is mostly used internally by GDB and the
+     Linux Kernel.
+
+   * SVG: The number of 64 bit units in SVL.  This is mostly used
+     internally by GDB and the Linux Kernel.
+
+   When GDB is debugging the AArch64 architecture, if the Scalable
+Matrix Extension (SME) is present, then GDB will make the 'ZA' register
+available.  GDB will also make the 'SVG' register and 'SVCR'
+pseudo-register available.
+
+   The 'ZA' register is a 2-dimensional square SVL by SVL matrix of
+bytes.  To simplify the representation and access to the 'ZA' register
+in GDB, it is defined as a vector of SVLxSVL bytes.
+
+   If the user wants to index the 'ZA' register as a matrix, it is
+possible to reference 'ZA' as 'ZA[I][J]', where I is the row number and
+J is the column number.
+
+   The 'SVG' register always contains the streaming vector granule (SVG)
+for the current thread.  From the value of register 'SVG' we can easily
+derive the SVL value.
+
+   The 'SVCR' pseudo-register (streaming vector control register) is a
+status register that holds two state bits: SM in bit 0 and ZA in bit 1.
+
+   If the SM bit is 1, it means the current thread is in streaming mode,
+and the SVE registers will use SVL for their sizes.  If the SM bit is 0,
+the current thread is not in streaming mode, and the SVE registers will
+use VL for their sizes.  *Note vl::.
+
+   If the ZA bit is 1, it means the 'ZA' register is being used and has
+meaningful contents.  If the ZA bit is 0, the 'ZA' register is
+unavailable and its contents are undefined.
+
+   For convenience and simplicity, if the ZA bit is 0, the 'ZA' register
+and all of its pseudo-registers will read as zero.
+
+   If SVL changes during the execution of a program, then the 'ZA'
+register size and the bits in the 'SVCR' pseudo-register will be updated
+to reflect it.
+
+   It is possible for users to change SVL during the execution of a
+program by modifying the 'SVG' register value.
+
+   Whenever the 'SVG' register is modified with a new value, the
+following will be observed:
+
+   * The ZA and SM bits will be cleared in the 'SVCR' pseudo-register.
+
+   * The 'ZA' register will have a new size and its state will be
+     cleared, forcing its contents and the contents of all of its
+     pseudo-registers back to zero.
+
+   * If the SM bit was 1, the SVE registers will be reset to having
+     their sizes based on VL as opposed to SVL.  If the SM bit was 0
+     prior to modifying the 'SVG' register, there will be no observable
+     effect on the SVE registers.
+
+   The possible values for the 'SVG' register are 2, 4, 8, 16, 32.
+These numbers correspond to streaming vector length (SVL) values of 16
+bytes, 32 bytes, 64 bytes, 128 bytes and 256 bytes respectively.
+
+   The minimum size of the 'ZA' register is 16 x 16 (256) bytes, and the
+maximum size is 256 x 256 (65536) bytes.  In streaming mode, with bit SM
+set, the size of the 'ZA' register is the size of all the SVE 'Z'
+registers combined.
+
+   The 'ZA' register can also be accessed using tiles and tile slices.
+
+   Tile pseudo-registers are square, 2-dimensional sub-arrays of
+elements within the 'ZA' register.
+
+   The tile pseudo-registers have the following naming pattern: 'ZA<TILE
+NUMBER><QUALIFIER>'.
+
+   There is a total of 31 'ZA' tile pseudo-registers.  They are 'ZA0B',
+'ZA0H' through 'ZA1H', 'ZA0S' through 'ZA3S', 'ZA0D' through 'ZA7D' and
+'ZA0Q' through 'ZA15Q'.
+
+   Tile slice pseudo-registers are vectors of horizontally or vertically
+contiguous elements within the 'ZA' register.
+
+   The tile slice pseudo-registers have the following naming pattern:
+'ZA<TILE NUMBER><DIRECTION><QUALIFIER> <SLICE NUMBER>'.
+
+   There are up to 16 tiles (0 ~ 15), the direction can be either 'v'
+(vertical) or 'h' (horizontal), the qualifiers can be 'b' (byte), 'h'
+(halfword), 's' (word), 'd' (doubleword) and 'q' (quadword) and there
+are up to 256 slices (0 ~ 255) depending on the value of SVL.  The
+number of slices is the same as the value of SVL.
+
+   The number of available tile slice pseudo-registers can be large.
+For a minimum SVL of 16 bytes, there are 5 (number of qualifiers) x 2
+(number of directions) x 16 (SVL) pseudo-registers.  For the maximum SVL
+of 256 bytes, there are 5 x 2 x 256 pseudo-registers.
+
+   When listing all the available registers, users will see the
+currently-available 'ZA' pseudo-registers.  Pseudo-registers that don't
+exist for a given SVL value will not be displayed.
+
+   For more information on SME and its terminology, please refer to the
+Arm Architecture Reference Manual Supplement
+(https://developer.arm.com/documentation/ddi0616/aa/), The Scalable
+Matrix Extension (SME), for Armv9-A.
+
+   Some features are still under development and rely on ACLE
+(https://github.com/ARM-software/acle/releases/latest) and ABI
+(https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst)
+definitions, so there are known limitations to the current SME support
+in GDB.
+
+   One such example is calling functions in the program being debugged
+by GDB.  Such calls are not SME-aware and thus don't take into account
+the 'SVCR' pseudo-register bits nor the 'ZA' register contents.  *Note
+Calling::.
+
+   The lazy saving scheme
+(https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst#the-za-lazy-saving-scheme)
+involving the 'TPIDR2' register is not yet supported by GDB, though the
+'TPIDR2' register is known and supported by GDB.
+
+   Lastly, an important limitation for 'gdbserver' is its inability to
+communicate SVL changes to GDB.  This means 'gdbserver', even though it
+is capable of adjusting its internal caches to reflect a change in the
+value of SVL mid-execution, will operate with a potentially different
+SVL value compared to GDB.  This can lead to GDB showing incorrect
+values for the 'ZA' register and incorrect values for SVE registers
+(when in streaming mode).
+
+   This is the same limitation we have for the SVE registers, and there
+are plans to address this limitation going forward.
+
+21.4.1.3 AArch64 SME2.
+......................
+
+The Scalable Matrix Extension 2 is an AArch64 architecture extension
+that further expands the SME extension with the following:
+
+   * The ability to address the 'ZA' array through groups of
+     one-dimensional 'ZA' array vectors, as opposed to 'ZA' tiles with 2
+     dimensions.
+
+   * Instructions to operate on groups of SVE 'Z' registers and 'ZA'
+     array vectors.
+
+   * A new 512 bit 'ZT0' lookup table register, for data decompression.
+
+   When GDB is debugging the AArch64 architecture, if the Scalable
+Matrix Extension 2 (SME2) is present, then GDB will make the 'ZT0'
+register available.
+
+   The 'ZT0' register is only considered active when the 'ZA' register
+state is active, therefore when the ZA bit of the 'SVCR' is 1.
+
+   When the ZA bit of 'SVCR' is 0, that means the 'ZA' register state is
+not active, which means the 'ZT0' register state is also not active.
+
+   When 'ZT0' is not active, it is comprised of zeroes, just like 'ZA'.
+
+   Similarly to the 'ZA' register, if the 'ZT0' state is not active and
+the user attempts to modify its value such that any of its bytes is
+non-zero, then GDB will initialize the 'ZA' register state as well,
+which means the 'SVCR' ZA bit gets set to 1.
+
+   For more information about SME2, please refer to the official
+architecture documentation
+(https://developer.arm.com/documentation/ddi0487/latest).
+
+21.4.1.4 AArch64 Pointer Authentication.
+........................................
+
+When GDB is debugging the AArch64 architecture, and the program is using
+the v8.3-A feature Pointer Authentication (PAC), then whenever the link
+register '$lr' is pointing to an PAC function its value will be masked.
+When GDB prints a backtrace, any addresses that required unmasking will
+be postfixed with the marker [PAC]. When using the MI, this is printed
+as part of the 'addr_flags' field.
+
+21.4.1.5 AArch64 Memory Tagging Extension.
+..........................................
+
+When GDB is debugging the AArch64 architecture, the program is using the
+v8.5-A feature Memory Tagging Extension (MTE) and there is support in
+the kernel for MTE, GDB will make memory tagging functionality available
+for inspection and editing of logical and allocation tags.  *Note Memory
+Tagging::.
+
+   To aid debugging, GDB will output additional information when SIGSEGV
+signals are generated as a result of memory tag failures.
+
+   If the tag violation is synchronous, the following will be shown:
+
+     Program received signal SIGSEGV, Segmentation fault
+     Memory tag violation while accessing address 0x0500fffff7ff8000
+     Allocation tag 0x1
+     Logical tag 0x5.
+
+   If the tag violation is asynchronous, the fault address is not
+available.  In this case GDB will show the following:
+
+     Program received signal SIGSEGV, Segmentation fault
+     Memory tag violation
+     Fault address unavailable.
+
+   A special register, 'tag_ctl', is made available through the
+'org.gnu.gdb.aarch64.mte' feature.  This register exposes some options
+that can be controlled at runtime and emulates the 'prctl' option
+'PR_SET_TAGGED_ADDR_CTRL'.  For further information, see the
+documentation in the Linux kernel.
+
+   GDB supports dumping memory tag data to core files through the
+'gcore' command and reading memory tag data from core files generated by
+the 'gcore' command or the Linux kernel.
+
+   When a process uses memory-mapped pages protected by memory tags (for
+example, AArch64 MTE), this additional information will be recorded in
+the core file in the event of a crash or if GDB generates a core file
+from the current process state.
+
+   The memory tag data will be used so developers can display the memory
+tags from a particular memory region (using the 'm' modifier to the 'x'
+command, using the 'print' command or using the various 'memory-tag'
+subcommands.
+
+   In the case of a crash, GDB will attempt to retrieve the memory tag
+information automatically from the core file, and will show one of the
+above messages depending on whether the synchronous or asynchronous mode
+is selected.  *Note Memory Tagging::.  *Note Memory::.
+
+
+File: gdb.info,  Node: x86,  Next: Alpha,  Prev: AArch64,  Up: Architectures
+
+21.4.2 x86
+----------
+
+'set struct-convention MODE'
+     Set the convention used by the inferior to return 'struct's and
+     'union's from functions to MODE.  Possible values of MODE are
+     '"pcc"', '"reg"', and '"default"' (the default).  '"default"' or
+     '"pcc"' means that 'struct's are returned on the stack, while
+     '"reg"' means that a 'struct' or a 'union' whose size is 1, 2, 4,
+     or 8 bytes will be returned in a register.
+
+'show struct-convention'
+     Show the current setting of the convention to return 'struct's from
+     functions.
+
+21.4.2.1 Intel "Memory Protection Extensions" (MPX).
+....................................................
+
+Memory Protection Extension (MPX) adds the bound registers 'BND0' (1)
+through 'BND3'.  Bound registers store a pair of 64-bit values which are
+the lower bound and upper bound.  Bounds are effective addresses or
+memory locations.  The upper bounds are architecturally represented in
+1's complement form.  A bound having lower bound = 0, and upper bound =
+0 (1's complement of all bits set) will allow access to the entire
+address space.
+
+   'BND0' through 'BND3' are represented in GDB as 'bnd0raw' through
+'bnd3raw'.  Pseudo registers 'bnd0' through 'bnd3' display the upper
+bound performing the complement of one operation on the upper bound
+value, i.e. when upper bound in 'bnd0raw' is 0 in the GDB 'bnd0' it will
+be '0xfff...'.  In this sense it can also be noted that the upper bounds
+are inclusive.
+
+   As an example, assume that the register BND0 holds bounds for a
+pointer having access allowed for the range between 0x32 and 0x71.  The
+values present on bnd0raw and bnd registers are presented as follows:
+
+     	bnd0raw = {0x32, 0xffffffff8e}
+     	bnd0 = {lbound = 0x32, ubound = 0x71} : size 64
+
+   This way the raw value can be accessed via bnd0raw...bnd3raw.  Any
+change on bnd0...bnd3 or bnd0raw...bnd3raw is reflect on its
+counterpart.  When the bnd0...bnd3 registers are displayed via Python,
+the display includes the memory size, in bits, accessible to the
+pointer.
+
+   Bounds can also be stored in bounds tables, which are stored in
+application memory.  These tables store bounds for pointers by
+specifying the bounds pointer's value along with its bounds.  Evaluating
+and changing bounds located in bound tables is therefore interesting
+while investigating bugs on MPX context.  GDB provides commands for this
+purpose:
+
+'show mpx bound POINTER'
+     Display bounds of the given POINTER.
+
+'set mpx bound POINTER, LBOUND, UBOUND'
+     Set the bounds of a pointer in the bound table.  This command takes
+     three parameters: POINTER is the pointers whose bounds are to be
+     changed, LBOUND and UBOUND are new values for lower and upper
+     bounds respectively.
+
+   When you call an inferior function on an Intel MPX enabled program,
+GDB sets the inferior's bound registers to the init (disabled) state
+before calling the function.  As a consequence, bounds checks for the
+pointer arguments passed to the function will always pass.
+
+   This is necessary because when you call an inferior function, the
+program is usually in the middle of the execution of other function.
+Since at that point bound registers are in an arbitrary state, not
+clearing them would lead to random bound violations in the called
+function.
+
+   You can still examine the influence of the bound registers on the
+execution of the called function by stopping the execution of the called
+function at its prologue, setting bound registers, and continuing the
+execution.  For example:
+
+     	$ break *upper
+     	Breakpoint 2 at 0x4009de: file i386-mpx-call.c, line 47.
+     	$ print upper (a, b, c, d, 1)
+     	Breakpoint 2, upper (a=0x0, b=0x6e0000005b, c=0x0, d=0x0, len=48)....
+     	$ print $bnd0
+     	{lbound = 0x0, ubound = ffffffff} : size -1
+
+   At this last step the value of bnd0 can be changed for investigation
+of bound violations caused along the execution of the call.  In order to
+know how to set the bound registers or bound table for the call consult
+the ABI.
+
+21.4.2.2 x87 registers
+......................
+
+GDB provides access to the x87 state through the following registers:
+
+   * '$st0' to 'st7': 'ST(0)' to 'ST(7)' floating-point registers
+   * '$fctrl': control word register ('FCW')
+   * '$fstat': status word register ('FSW')
+   * '$ftag': tag word ('FTW')
+   * '$fiseg': last instruction pointer segment
+   * '$fioff': last instruction pointer
+   * '$foseg': last data pointer segment
+   * '$fooff': last data pointer
+   * '$fop': last opcode
+
+   ---------- Footnotes ----------
+
+   (1) The register named with capital letters represent the
+architecture registers.
+
+
+File: gdb.info,  Node: Alpha,  Next: MIPS,  Prev: x86,  Up: Architectures
+
+21.4.3 Alpha
+------------
+
+See the following section.
+
+
+File: gdb.info,  Node: MIPS,  Next: HPPA,  Prev: Alpha,  Up: Architectures
+
+21.4.4 MIPS
+-----------
+
+Alpha- and MIPS-based computers use an unusual stack frame, which
+sometimes requires GDB to search backward in the object code to find the
+beginning of a function.
+
+   To improve response time (especially for embedded applications, where
+GDB may be restricted to a slow serial line for this search) you may
+want to limit the size of this search, using one of these commands:
+
+'set heuristic-fence-post LIMIT'
+     Restrict GDB to examining at most LIMIT bytes in its search for the
+     beginning of a function.  A value of 0 (the default) means there is
+     no limit.  However, except for 0, the larger the limit the more
+     bytes 'heuristic-fence-post' must search and therefore the longer
+     it takes to run.  You should only need to use this command when
+     debugging a stripped executable.
+
+'show heuristic-fence-post'
+     Display the current limit.
+
+These commands are available _only_ when GDB is configured for debugging
+programs on Alpha or MIPS processors.
+
+   Several MIPS-specific commands are available when debugging MIPS
+programs:
+
+'set mips abi ARG'
+     Tell GDB which MIPS ABI is used by the inferior.  Possible values
+     of ARG are:
+
+     'auto'
+          The default ABI associated with the current binary (this is
+          the default).
+     'o32'
+     'o64'
+     'n32'
+     'n64'
+     'eabi32'
+     'eabi64'
+
+'show mips abi'
+     Show the MIPS ABI used by GDB to debug the inferior.
+
+'set mips compression ARG'
+     Tell GDB which MIPS compressed ISA (Instruction Set Architecture)
+     encoding is used by the inferior.  GDB uses this for code
+     disassembly and other internal interpretation purposes.  This
+     setting is only referred to when no executable has been associated
+     with the debugging session or the executable does not provide
+     information about the encoding it uses.  Otherwise this setting is
+     automatically updated from information provided by the executable.
+
+     Possible values of ARG are 'mips16' and 'micromips'.  The default
+     compressed ISA encoding is 'mips16', as executables containing
+     MIPS16 code frequently are not identified as such.
+
+     This setting is "sticky"; that is, it retains its value across
+     debugging sessions until reset either explicitly with this command
+     or implicitly from an executable.
+
+     The compiler and/or assembler typically add symbol table
+     annotations to identify functions compiled for the MIPS16 or
+     microMIPS ISAs.  If these function-scope annotations are present,
+     GDB uses them in preference to the global compressed ISA encoding
+     setting.
+
+'show mips compression'
+     Show the MIPS compressed ISA encoding used by GDB to debug the
+     inferior.
+
+'set mipsfpu'
+'show mipsfpu'
+     *Note set mipsfpu: MIPS Embedded.
+
+'set mips mask-address ARG'
+     This command determines whether the most-significant 32 bits of
+     64-bit MIPS addresses are masked off.  The argument ARG can be
+     'on', 'off', or 'auto'.  The latter is the default setting, which
+     lets GDB determine the correct value.
+
+'show mips mask-address'
+     Show whether the upper 32 bits of MIPS addresses are masked off or
+     not.
+
+'set remote-mips64-transfers-32bit-regs'
+     This command controls compatibility with 64-bit MIPS targets that
+     transfer data in 32-bit quantities.  If you have an old MIPS 64
+     target that transfers 32 bits for some registers, like SR and FSR,
+     and 64 bits for other registers, set this option to 'on'.
+
+'show remote-mips64-transfers-32bit-regs'
+     Show the current setting of compatibility with older MIPS 64
+     targets.
+
+'set debug mips'
+     This command turns on and off debugging messages for the
+     MIPS-specific target code in GDB.
+
+'show debug mips'
+     Show the current setting of MIPS debugging messages.
+
+
+File: gdb.info,  Node: HPPA,  Next: PowerPC,  Prev: MIPS,  Up: Architectures
+
+21.4.5 HPPA
+-----------
+
+When GDB is debugging the HP PA architecture, it provides the following
+special commands:
+
+'set debug hppa'
+     This command determines whether HPPA architecture-specific
+     debugging messages are to be displayed.
+
+'show debug hppa'
+     Show whether HPPA debugging messages are displayed.
+
+'maint print unwind ADDRESS'
+     This command displays the contents of the unwind table entry at the
+     given ADDRESS.
+
+
+File: gdb.info,  Node: PowerPC,  Next: Nios II,  Prev: HPPA,  Up: Architectures
+
+21.4.6 PowerPC
+--------------
+
+When GDB is debugging the PowerPC architecture, it provides a set of
+pseudo-registers to enable inspection of 128-bit wide Decimal Floating
+Point numbers stored in the floating point registers.  These values must
+be stored in two consecutive registers, always starting at an even
+register like 'f0' or 'f2'.
+
+   The pseudo-registers go from '$dl0' through '$dl15', and are formed
+by joining the even/odd register pairs 'f0' and 'f1' for '$dl0', 'f2'
+and 'f3' for '$dl1' and so on.
+
+   For POWER7 processors, GDB provides a set of pseudo-registers, the
+64-bit wide Extended Floating Point Registers ('f32' through 'f63').
+
+
+File: gdb.info,  Node: Nios II,  Next: Sparc64,  Prev: PowerPC,  Up: Architectures
+
+21.4.7 Nios II
+--------------
+
+When GDB is debugging the Nios II architecture, it provides the
+following special commands:
+
+'set debug nios2'
+     This command turns on and off debugging messages for the Nios II
+     target code in GDB.
+
+'show debug nios2'
+     Show the current setting of Nios II debugging messages.
+
+
+File: gdb.info,  Node: Sparc64,  Next: S12Z,  Prev: Nios II,  Up: Architectures
+
+21.4.8 Sparc64
+--------------
+
+21.4.8.1 ADI Support
+....................
+
+The M7 processor supports an Application Data Integrity (ADI) feature
+that detects invalid data accesses.  When software allocates memory and
+enables ADI on the allocated memory, it chooses a 4-bit version number,
+sets the version in the upper 4 bits of the 64-bit pointer to that data,
+and stores the 4-bit version in every cacheline of that data.  Hardware
+saves the latter in spare bits in the cache and memory hierarchy.  On
+each load and store, the processor compares the upper 4 VA (virtual
+address) bits to the cacheline's version.  If there is a mismatch, the
+processor generates a version mismatch trap which can be either precise
+or disrupting.  The trap is an error condition which the kernel delivers
+to the process as a SIGSEGV signal.
+
+   Note that only 64-bit applications can use ADI and need to be built
+with ADI-enabled.
+
+   Values of the ADI version tags, which are in granularity of a
+cacheline (64 bytes), can be viewed or modified.
+
+'adi (examine | x) [ / N ] ADDR'
+
+     The 'adi examine' command displays the value of one ADI version tag
+     per cacheline.
+
+     N is a decimal integer specifying the number in bytes; the default
+     is 1.  It specifies how much ADI version information, at the ratio
+     of 1:ADI block size, to display.
+
+     ADDR is the address in user address space where you want GDB to
+     begin displaying the ADI version tags.
+
+     Below is an example of displaying ADI versions of variable
+     "shmaddr".
+
+          (gdb) adi x/100 shmaddr
+             0xfff800010002c000:     0 0
+
+'adi (assign | a) [ / N ] ADDR = TAG'
+
+     The 'adi assign' command is used to assign new ADI version tag to
+     an address.
+
+     N is a decimal integer specifying the number in bytes; the default
+     is 1.  It specifies how much ADI version information, at the ratio
+     of 1:ADI block size, to modify.
+
+     ADDR is the address in user address space where you want GDB to
+     begin modifying the ADI version tags.
+
+     TAG is the new ADI version tag.
+
+     For example, do the following to modify then verify ADI versions of
+     variable "shmaddr":
+
+          (gdb) adi a/100 shmaddr = 7
+          (gdb) adi x/100 shmaddr
+             0xfff800010002c000:     7 7
+
+
+File: gdb.info,  Node: S12Z,  Next: AMD GPU,  Prev: Sparc64,  Up: Architectures
+
+21.4.9 S12Z
+-----------
+
+When GDB is debugging the S12Z architecture, it provides the following
+special command:
+
+'maint info bdccsr'
+     This command displays the current value of the microprocessor's
+     BDCCSR register.
+
+
+File: gdb.info,  Node: AMD GPU,  Prev: S12Z,  Up: Architectures
+
+21.4.10 AMD GPU
+---------------
+
+GDB supports debugging programs offloaded to AMD GPU devices using the
+AMD ROCm (https://docs.amd.com/) platform.  GDB presents host threads
+alongside GPU wavefronts, allowing debugging both the host and device
+parts of the program simultaneously.
+
+21.4.10.1 AMD GPU Architectures
+...............................
+
+The list of AMD GPU architectures supported by GDB depends on the
+version of the AMD Debugger API library used.  See its documentation
+(https://docs.amd.com/bundle/ROCDebugger_User_and_API) for more details.
+
+21.4.10.2 AMD GPU Device Driver and AMD ROCm Runtime
+....................................................
+
+GDB requires a compatible AMD GPU device driver to be installed.  A
+warning message is displayed if either the device driver version or the
+version of the debug support it implements is unsupported.  GDB will
+continue to function except no AMD GPU debugging will be possible.
+
+   GDB requires each agent to have compatible firmware installed by the
+device driver.  A warning message is displayed if unsupported firmware
+is detected.  GDB will continue to function except no AMD GPU debugging
+will be possible on the agent.
+
+   GDB requires a compatible AMD ROCm runtime to be loaded in order to
+detect AMD GPU code objects and wavefronts.  A warning message is
+displayed if an unsupported AMD ROCm runtime is detected, or there is an
+error or restriction that prevents debugging.  GDB will continue to
+function except no AMD GPU debugging will be possible.
+
+21.4.10.3 AMD GPU Wavefronts
+............................
+
+An AMD GPU wavefront is represented in GDB as a thread.
+
+   Note that some AMD GPU architectures may have restrictions on
+providing information about AMD GPU wavefronts created when GDB is not
+attached (*note AMD GPU Attaching Restrictions: AMD GPU Attaching
+Restrictions.).
+
+   When scheduler-locking is in effect (*note set scheduler-locking::),
+new wavefronts created by the resumed thread (either CPU thread or GPU
+wavefront) are held in the halt state.
+
+21.4.10.4 AMD GPU Code Objects
+..............................
+
+The 'info sharedlibrary' command will show the AMD GPU code objects as
+file or memory URIs, together with the host's shared libraries.  For
+example:
+
+     (gdb) info sharedlibrary
+     From    To      Syms Read   Shared Object Library
+     0x1111  0x2222  Yes (*)     /lib64/ld-linux-x86-64.so.2
+     ...
+     0x3333  0x4444  Yes (*)     /opt/rocm-4.5.0/.../libamd_comgr.so
+     0x5555  0x6666  Yes (*)     /lib/x86_64-linux-gnu/libtinfo.so.5
+     0x7777  0x8888  Yes         file:///tmp/a.out#offset=6477&size=10832
+     0x9999  0xaaaa  Yes (*)     memory://95557/mem#offset=0x1234&size=100
+     (*): Shared library is missing debugging information.
+     (gdb)
+
+   For a 'file' URI, the path portion is the file on disk containing the
+code object.  The OFFSET parameter is a 0-based offset in this file, to
+the start of the code object.  If omitted, it defaults to 0.  The SIZE
+parameter is the size of the code object in bytes.  If omitted, it
+defaults to the size of the file.
+
+   For a 'memory' URI, the path portion is the process id of the process
+owning the memory containing the code object.  The OFFSET parameter is
+the memory address where the code object is found, and the SIZE
+parameter is its size in bytes.
+
+   AMD GPU code objects are loaded into each AMD GPU device separately.
+The 'info sharedlibrary' command may therefore show the same code object
+loaded multiple times.  As a consequence, setting a breakpoint in AMD
+GPU code will result in multiple breakpoint locations if there are
+multiple AMD GPU devices.
+
+21.4.10.5 AMD GPU Entity Target Identifiers and Convenience Variables
+.....................................................................
+
+The AMD GPU entities have the following target identifier formats:
+
+Thread Target ID
+     The AMD GPU thread target identifier (SYSTAG) string has the
+     following format:
+
+          AMDGPU Wave AGENT-ID:QUEUE-ID:DISPATCH-ID:WAVE-ID (WORK-GROUP-X,WORK-GROUP-Y,WORK-GROUP-Z)/WORK-GROUP-THREAD-INDEX
+
+21.4.10.6 AMD GPU Signals
+.........................
+
+For AMD GPU wavefronts, GDB maps target conditions to stop signals in
+the following way:
+
+'SIGILL'
+     Execution of an illegal instruction.
+
+'SIGTRAP'
+     Execution of a 'S_TRAP' instruction other than:
+
+        * 'S_TRAP 1' which is used by GDB to insert breakpoints.
+
+        * 'S_TRAP 2' which raises 'SIGABRT'.
+
+'SIGABRT'
+     Execution of a 'S_TRAP 2' instruction.
+
+'SIGFPE'
+     Execution of a floating point or integer instruction detects a
+     condition that is enabled to raise a signal.  The conditions
+     include:
+
+        * Floating point operation is invalid.
+
+        * Floating point operation had subnormal input that was rounded
+          to zero.
+
+        * Floating point operation performed a division by zero.
+
+        * Floating point operation produced an overflow result.  The
+          result was rounded to infinity.
+
+        * Floating point operation produced an underflow result.  A
+          subnormal result was rounded to zero.
+
+        * Floating point operation produced an inexact result.
+
+        * Integer operation performed a division by zero.
+
+     By default, these conditions are not enabled to raise signals.  The
+     'set $mode' command can be used to change the AMD GPU wavefront's
+     register that has bits controlling which conditions are enabled to
+     raise signals.  The 'print $trapsts' command can be used to inspect
+     which conditions have been detected even if they are not enabled to
+     raise a signal.
+
+'SIGBUS'
+     Execution of an instruction that accessed global memory using an
+     address that is outside the virtual address range.
+
+'SIGSEGV'
+     Execution of an instruction that accessed a global memory page that
+     is either not mapped or accessed with incompatible permissions.
+
+   If a single instruction raises more than one signal, they will be
+reported one at a time each time the wavefront is continued.
+
+21.4.10.7 AMD GPU Memory Violation Reporting
+............................................
+
+A wavefront can report memory violation events.  However, the program
+location at which they are reported may be after the machine instruction
+that caused them.  This can result in the reported source statement
+being incorrect.  The following commands can be used to control this
+behavior:
+
+'set amdgpu precise-memory MODE'
+     Controls how AMD GPU devices detect memory violations, where MODE
+     can be:
+
+     'off'
+          The program location may not be immediately after the
+          instruction that caused the memory violation.  This is the
+          default.
+
+     'on'
+          Requests that the program location will be immediately after
+          the instruction that caused a memory violation.  Enabling this
+          mode may make the AMD GPU device execution significantly
+          slower as it has to wait for each memory operation to complete
+          before executing the next instruction.
+
+     The 'amdgpu precise-memory' parameter is per-inferior.  When an
+     inferior forks or execs, or the user uses the 'clone-inferior'
+     command, and an inferior is created as a result, the newly created
+     inferior inherits the parameter value of the original inferior.
+
+'show amdgpu precise-memory'
+     Displays the currently requested AMD GPU precise memory setting.
+
+21.4.10.8 AMD GPU Logging
+.........................
+
+The 'set debug amd-dbgapi' command can be used to enable diagnostic
+messages in the 'amd-dbgapi' target.  The 'show debug amd-dbgapi'
+command displays the current setting.  *Note set debug amd-dbgapi::.
+
+   The 'set debug amd-dbgapi-lib log-level LEVEL' command can be used to
+enable diagnostic messages from the 'amd-dbgapi' library (which GDB uses
+under the hood).  The 'show debug amd-dbgapi-lib log-level' command
+displays the current 'amd-dbgapi' library log level.  *Note set debug
+amd-dbgapi-lib::.
+
+21.4.10.9 AMD GPU Restrictions
+..............................
+
+  1. When in non-stop mode, wavefronts may not hit breakpoints inserted
+     while not stopped, nor see memory updates made while not stopped,
+     until the wavefront is next stopped.  Memory updated by non-stopped
+     wavefronts may not be visible until the wavefront is next stopped.
+
+  2. The HIP runtime performs deferred code object loading by default.
+     AMD GPU code objects are not loaded until the first kernel is
+     launched.  Before then, all breakpoints have to be set as pending
+     breakpoints.
+
+     If source line positions are used that only correspond to source
+     lines in unloaded code objects, then GDB may not set pending
+     breakpoints, and instead set breakpoints on the next following
+     source line that maps to host code.  This can result in unexpected
+     breakpoint hits being reported.  When the code object containing
+     the source lines is loaded, the incorrect breakpoints will be
+     removed and replaced by the correct ones.  This problem can be
+     avoided by only setting breakpoints in unloaded code objects using
+     symbol or function names.
+
+     Setting the 'HIP_ENABLE_DEFERRED_LOADING' environment variable to
+     '0' can be used to disable deferred code object loading by the HIP
+     runtime.  This ensures all code objects will be loaded when the
+     inferior reaches the beginning of the 'main' function.
+
+  3. If no CPU thread is running, then 'Ctrl-C' is not able to stop AMD
+     GPU threads.  This can happen for example if you enable
+     'scheduler-locking' after the whole program stopped, and then
+     resume an AMD GPU thread.  The only way to unblock the situation is
+     to kill the GDB process.
+
+  4. 
+     By default, for some architectures, the AMD GPU device driver
+     causes all AMD GPU wavefronts created when GDB is not attached to
+     be unable to report the dispatch associated with the wavefront, or
+     the wavefront's work-group position.  The 'info threads' command
+     will display this missing information with a '?'.
+
+     This does not affect wavefronts created while GDB is attached which
+     are always capable of reporting this information.
+
+     If the 'HSA_ENABLE_DEBUG' environment variable is set to '1' when
+     the AMD ROCm runtime is initialized, then this information will be
+     available for all architectures even for wavefronts created when
+     GDB was not attached.
+
+
+File: gdb.info,  Node: Controlling GDB,  Next: Extending GDB,  Prev: Configurations,  Up: Top
+
+22 Controlling GDB
+******************
+
+You can alter the way GDB interacts with you by using the 'set' command.
+For commands controlling how GDB displays data, see *note Print
+Settings: Print Settings.  Other settings are described here.
+
+* Menu:
+
+* Prompt::                      Prompt
+* Editing::                     Command editing
+* Command History::             Command history
+* Screen Size::                 Screen size
+* Output Styling::              Output styling
+* Numbers::                     Numbers
+* ABI::                         Configuring the current ABI
+* Auto-loading::                Automatically loading associated files
+* Messages/Warnings::           Optional warnings and messages
+* Debugging Output::            Optional messages about internal happenings
+* Other Misc Settings::         Other Miscellaneous Settings
+
+
+File: gdb.info,  Node: Prompt,  Next: Editing,  Up: Controlling GDB
+
+22.1 Prompt
+===========
+
+GDB indicates its readiness to read a command by printing a string
+called the "prompt".  This string is normally '(gdb)'.  You can change
+the prompt string with the 'set prompt' command.  For instance, when
+debugging GDB with GDB, it is useful to change the prompt in one of the
+GDB sessions so that you can always tell which one you are talking to.
+
+   _Note:_ 'set prompt' does not add a space for you after the prompt
+you set.  This allows you to set a prompt which ends in a space or a
+prompt that does not.
+
+'set prompt NEWPROMPT'
+     Directs GDB to use NEWPROMPT as its prompt string henceforth.
+
+'show prompt'
+     Prints a line of the form: 'Gdb's prompt is: YOUR-PROMPT'
+
+   Versions of GDB that ship with Python scripting enabled have prompt
+extensions.  The commands for interacting with these extensions are:
+
+'set extended-prompt PROMPT'
+     Set an extended prompt that allows for substitutions.  *Note
+     gdb.prompt::, for a list of escape sequences that can be used for
+     substitution.  Any escape sequences specified as part of the prompt
+     string are replaced with the corresponding strings each time the
+     prompt is displayed.
+
+     For example:
+
+          set extended-prompt Current working directory: \w (gdb)
+
+     Note that when an extended-prompt is set, it takes control of the
+     PROMPT_HOOK hook.  *Note prompt_hook::, for further information.
+
+'show extended-prompt'
+     Prints the extended prompt.  Any escape sequences specified as part
+     of the prompt string with 'set extended-prompt', are replaced with
+     the corresponding strings each time the prompt is displayed.
+
+
+File: gdb.info,  Node: Editing,  Next: Command History,  Prev: Prompt,  Up: Controlling GDB
+
+22.2 Command Editing
+====================
+
+GDB reads its input commands via the "Readline" interface.  This GNU
+library provides consistent behavior for programs which provide a
+command line interface to the user.  Advantages are GNU Emacs-style or
+"vi"-style inline editing of commands, 'csh'-like history substitution,
+and a storage and recall of command history across debugging sessions.
+
+   You may control the behavior of command line editing in GDB with the
+command 'set'.
+
+'set editing'
+'set editing on'
+     Enable command line editing (enabled by default).
+
+'set editing off'
+     Disable command line editing.
+
+'show editing'
+     Show whether command line editing is enabled.
+
+   *Note Command Line Editing::, for more details about the Readline
+interface.  Users unfamiliar with GNU Emacs or 'vi' are encouraged to
+read that chapter.
+
+   GDB sets the Readline application name to 'gdb'.  This is useful for
+conditions in '.inputrc'.
+
+   GDB defines a bindable Readline command, 'operate-and-get-next'.
+This is bound to 'C-o' by default.  This command accepts the current
+line for execution and fetches the next line relative to the current
+line from the history for editing.  Any argument is ignored.
+
+
+File: gdb.info,  Node: Command History,  Next: Screen Size,  Prev: Editing,  Up: Controlling GDB
+
+22.3 Command History
+====================
+
+GDB can keep track of the commands you type during your debugging
+sessions, so that you can be certain of precisely what happened.  Use
+these commands to manage the GDB command history facility.
+
+   GDB uses the GNU History library, a part of the Readline package, to
+provide the history facility.  *Note Using History Interactively::, for
+the detailed description of the History library.
+
+   To issue a command to GDB without affecting certain aspects of the
+state which is seen by users, prefix it with 'server ' (*note Server
+Prefix::).  This means that this command will not affect the command
+history, nor will it affect GDB's notion of which command to repeat if
+<RET> is pressed on a line by itself.
+
+   The server prefix does not affect the recording of values into the
+value history; to print a value without recording it into the value
+history, use the 'output' command instead of the 'print' command.
+
+   Here is the description of GDB commands related to command history.
+
+'set history filename [FNAME]'
+     Set the name of the GDB command history file to FNAME.  This is the
+     file where GDB reads an initial command history list, and where it
+     writes the command history from this session when it exits.  You
+     can access this list through history expansion or through the
+     history command editing characters listed below.  This file
+     defaults to the value of the environment variable 'GDBHISTFILE', or
+     to './.gdb_history' ('./_gdb_history' on MS-DOS) if this variable
+     is not set.
+
+     The 'GDBHISTFILE' environment variable is read after processing any
+     GDB initialization files (*note Startup::) and after processing any
+     commands passed using command line options (for example, '-ex').
+
+     If the FNAME argument is not given, or if the 'GDBHISTFILE' is the
+     empty string then GDB will neither try to load an existing history
+     file, nor will it try to save the history on exit.
+
+'set history save'
+'set history save on'
+     Record command history in a file, whose name may be specified with
+     the 'set history filename' command.  By default, this option is
+     disabled.  The command history will be recorded when GDB exits.  If
+     'set history filename' is set to the empty string then history
+     saving is disabled, even when 'set history save' is 'on'.
+
+'set history save off'
+     Don't record the command history into the file specified by 'set
+     history filename' when GDB exits.
+
+'set history size SIZE'
+'set history size unlimited'
+     Set the number of commands which GDB keeps in its history list.
+     This defaults to the value of the environment variable
+     'GDBHISTSIZE', or to 256 if this variable is not set.  Non-numeric
+     values of 'GDBHISTSIZE' are ignored.  If SIZE is 'unlimited' or if
+     'GDBHISTSIZE' is either a negative number or the empty string, then
+     the number of commands GDB keeps in the history list is unlimited.
+
+     The 'GDBHISTSIZE' environment variable is read after processing any
+     GDB initialization files (*note Startup::) and after processing any
+     commands passed using command line options (for example, '-ex').
+
+'set history remove-duplicates COUNT'
+'set history remove-duplicates unlimited'
+     Control the removal of duplicate history entries in the command
+     history list.  If COUNT is non-zero, GDB will look back at the last
+     COUNT history entries and remove the first entry that is a
+     duplicate of the current entry being added to the command history
+     list.  If COUNT is 'unlimited' then this lookbehind is unbounded.
+     If COUNT is 0, then removal of duplicate history entries is
+     disabled.
+
+     Only history entries added during the current session are
+     considered for removal.  This option is set to 0 by default.
+
+   History expansion assigns special meaning to the character '!'.
+*Note Event Designators::, for more details.
+
+   Since '!' is also the logical not operator in C, history expansion is
+off by default.  If you decide to enable history expansion with the 'set
+history expansion on' command, you may sometimes need to follow '!'
+(when it is used as logical not, in an expression) with a space or a tab
+to prevent it from being expanded.  The readline history facilities do
+not attempt substitution on the strings '!=' and '!(', even when history
+expansion is enabled.
+
+   The commands to control history expansion are:
+
+'set history expansion on'
+'set history expansion'
+     Enable history expansion.  History expansion is off by default.
+
+'set history expansion off'
+     Disable history expansion.
+
+'show history'
+'show history filename'
+'show history save'
+'show history size'
+'show history expansion'
+     These commands display the state of the GDB history parameters.
+     'show history' by itself displays all four states.
+
+'show commands'
+     Display the last ten commands in the command history.
+
+'show commands N'
+     Print ten commands centered on command number N.
+
+'show commands +'
+     Print ten commands just after the commands last printed.
+
+
+File: gdb.info,  Node: Screen Size,  Next: Output Styling,  Prev: Command History,  Up: Controlling GDB
+
+22.4 Screen Size
+================
+
+Certain commands to GDB may produce large amounts of information output
+to the screen.  To help you read all of it, GDB pauses and asks you for
+input at the end of each page of output.  Type <RET> when you want to
+see one more page of output, 'q' to discard the remaining output, or 'c'
+to continue without paging for the rest of the current command.  Also,
+the screen width setting determines when to wrap lines of output.
+Depending on what is being printed, GDB tries to break the line at a
+readable place, rather than simply letting it overflow onto the
+following line.
+
+   Normally GDB knows the size of the screen from the terminal driver
+software.  For example, on Unix GDB uses the termcap data base together
+with the value of the 'TERM' environment variable and the 'stty rows'
+and 'stty cols' settings.  If this is not correct, you can override it
+with the 'set height' and 'set width' commands:
+
+'set height LPP'
+'set height unlimited'
+'show height'
+'set width CPL'
+'set width unlimited'
+'show width'
+     These 'set' commands specify a screen height of LPP lines and a
+     screen width of CPL characters.  The associated 'show' commands
+     display the current settings.
+
+     If you specify a height of either 'unlimited' or zero lines, GDB
+     does not pause during output no matter how long the output is.
+     This is useful if output is to a file or to an editor buffer.
+
+     Likewise, you can specify 'set width unlimited' or 'set width 0' to
+     prevent GDB from wrapping its output.
+
+'set pagination on'
+'set pagination off'
+     Turn the output pagination on or off; the default is on.  Turning
+     pagination off is the alternative to 'set height unlimited'.  Note
+     that running GDB with the '--batch' option (*note -batch: Mode
+     Options.) also automatically disables pagination.
+
+'show pagination'
+     Show the current pagination mode.
+
+
 File: gdb.info,  Node: Output Styling,  Next: Numbers,  Prev: Screen Size,  Up: Controlling GDB
 
 22.5 Output Styling
@@ -51,19 +2255,68 @@ styles can also be disabled entirely.
      Enable or disable all styling.  The default is host-dependent, with
      most hosts defaulting to 'on'.
 
+     If the 'NO_COLOR' environment variable is set to a non-empty value,
+     then GDB will change this to 'off' at startup.
+
 'show style enabled'
      Show the current state of styling.
 
 'set style sources 'on|off''
      Enable or disable source code styling.  This affects whether source
-     code, such as the output of the 'list' command, is styled.  Note
-     that source styling only works if styling in general is enabled,
-     and if GDB was linked with the GNU Source Highlight library.  The
-     default is 'on'.
+     code, such as the output of the 'list' command, is styled.  The
+     default is 'on'.  Note that source styling only works if styling in
+     general is enabled, and if a source highlighting library is
+     available to GDB.
+
+     There are two ways that highlighting can be done.  First, if GDB
+     was linked with the GNU Source Highlight library, then it is used.
+     Otherwise, if GDB was configured with Python scripting support, and
+     if the Python Pygments package is available, then it will be used.
 
 'show style sources'
      Show the current state of source code styling.
 
+'set style tui-current-position 'on|off''
+     Enable or disable styling of the source and assembly code
+     highlighted by the TUI's current position indicator.  The default
+     is 'off'.  *Note GDB Text User Interface: TUI.
+
+'show style tui-current-position'
+     Show whether the source and assembly code highlighted by the TUI's
+     current position indicator is styled.
+
+'set style disassembler enabled 'on|off''
+     Enable or disable disassembler styling.  This affects whether
+     disassembler output, such as the output of the 'disassemble'
+     command, is styled.  Disassembler styling only works if styling in
+     general is enabled (with 'set style enabled on'), and if a source
+     highlighting library is available to GDB.
+
+     The two source highlighting libraries that GDB could use to style
+     disassembler output are; GDB's builtin disassembler, or the Python
+     Pygments package.
+
+     GDB's first choice will be to use the builtin disassembler for
+     styling, this usually provides better results, being able to style
+     different types of instruction operands differently.  However, the
+     builtin disassembler is not able to style all architectures.
+
+     For architectures that the builtin disassembler is unable to style,
+     GDB will fall back to use the Python Pygments package where
+     possible.  In order to use the Python Pygments package, GDB must be
+     built with Python support, and the Pygments package must be
+     installed.
+
+     If neither of these options are available then GDB will produce
+     unstyled disassembler output, even when this setting is 'on'.
+
+     To discover if the current architecture supports styling using the
+     builtin disassembler library see *note 'maint show
+     libopcodes-styling enabled': maint_libopcodes_styling.
+
+'show style disassembler enabled'
+     Show the current state of disassembler styling.
+
    Subcommands of 'set style' control specific forms of styling.  These
 subcommands all follow the same pattern: each style-able object can be
 styled with a foreground color, a background color, and an intensity.
@@ -92,14 +2345,19 @@ each style.
 
    The style-able objects are:
 'filename'
-     Control the styling of file names.  By default, this style's
-     foreground color is green.
+     Control the styling of file names and URLs.  By default, this
+     style's foreground color is green.
 
 'function'
      Control the styling of function names.  These are managed with the
      'set style function' family of commands.  By default, this style's
      foreground color is yellow.
 
+     This style is also used for symbol names in styled disassembler
+     output if GDB is using its builtin disassembler library for styling
+     (*note 'set style disassembler enabled':
+     style_disassembler_enabled.).
+
 'variable'
      Control the styling of variable names.  These are managed with the
      'set style variable' family of commands.  By default, this style's
@@ -110,6 +2368,20 @@ each style.
      style address' family of commands.  By default, this style's
      foreground color is blue.
 
+     This style is also used for addresses in styled disassembler output
+     if GDB is using its builtin disassembler library for styling (*note
+     'set style disassembler enabled': style_disassembler_enabled.).
+
+'version'
+     Control the styling of GDB's version number text.  By default, this
+     style's foreground color is magenta and it has bold intensity.  The
+     version number is displayed in two places, the output of 'show
+     version', and when GDB starts up.
+
+     In order to control how GDB styles the version number at startup,
+     add the 'set style version' family of commands to the early
+     initialization command file (*note Initialization Files::).
+
 'title'
      Control the styling of titles.  These are managed with the 'set
      style title' family of commands.  By default, this style's
@@ -126,6 +2398,16 @@ each style.
      For example, the command 'apropos -v REGEXP' uses the highlight
      style to mark the documentation parts matching REGEXP.
 
+'metadata'
+     Control the styling of data annotations added by GDB to data it
+     displays.  By default, this style's intensity is dim.  Metadata
+     annotations include the 'repeats N times' annotation for suppressed
+     display of repeated array elements (*note Print Settings::),
+     '<unavailable>' and '<error DESCR>' annotations for errors and
+     '<optimized-out>' annotations for optimized-out values in
+     displaying stack frame information in backtraces (*note
+     Backtrace::), etc.
+
 'tui-border'
      Control the styling of the TUI border.  Note that, unlike other
      styling options, only the color of the border can be controlled via
@@ -137,6 +2419,46 @@ each style.
      Control the styling of the active TUI border; that is, the TUI
      window that has the focus.
 
+'disassembler comment'
+     Control the styling of comments in the disassembler output.  These
+     are managed with the 'set style disassembler comment' family of
+     commands.  This style is only used when GDB is styling using its
+     builtin disassembler library (*note 'set style disassembler
+     enabled': style_disassembler_enabled.).  By default, this style's
+     intensity is dim, and its foreground color is white.
+
+'disassembler immediate'
+     Control the styling of numeric operands in the disassembler output.
+     These are managed with the 'set style disassembler immediate'
+     family of commands.  This style is not used for instruction
+     operands that represent addresses, in that case the 'disassembler
+     address' style is used.  This style is only used when GDB is
+     styling using its builtin disassembler library.  By default, this
+     style's foreground color is blue.
+
+'disassembler address'
+     Control the styling of address operands in the disassembler output.
+     This is an alias for the 'address' style.
+
+'disassembler symbol'
+     Control the styling of symbol names in the disassembler output.
+     This is an alias for the 'function' style.
+
+'disassembler mnemonic'
+     Control the styling of instruction mnemonics in the disassembler
+     output.  These are managed with the 'set style disassembler
+     mnemonic' family of commands.  This style is also used for
+     assembler directives, e.g. '.byte', '.word', etc.  This style is
+     only used when GDB is styling using its builtin disassembler
+     library.  By default, this style's foreground color is green.
+
+'disassembler register'
+     Control the styling of register operands in the disassembler
+     output.  These are managed with the 'set style disassembler
+     register' family of commands.  This style is only used when GDB is
+     styling using its builtin disassembler library.  By default, this
+     style's foreground color is red.
+
 
 File: gdb.info,  Node: Numbers,  Next: ABI,  Prev: Output Styling,  Up: Controlling GDB
 
@@ -275,14 +2597,6 @@ GDB to the needs of your project, it can
 results or introduce security risks (e.g., if the file comes from
 untrusted sources).
 
-* Menu:
-
-* Init File in the Current Directory:: 'set/show/info auto-load local-gdbinit'
-* libthread_db.so.1 file::             'set/show/info auto-load libthread-db'
-
-* Auto-loading safe path::             'set/show/info auto-load safe-path'
-* Auto-loading verbose mode::          'set/show debug auto-load'
-
    There are various kinds of files GDB can automatically load.  In
 addition to these files, GDB supports auto-loading code written in
 various extension languages.  *Note Auto-loading extensions::.
@@ -379,6 +2693,14 @@ control when to auto-load files and whic
 *Note add-auto-load-safe-path::.     Add directory trusted for
                                      automatic loading.
 
+* Menu:
+
+* Init File in the Current Directory:: 'set/show/info auto-load local-gdbinit'
+* libthread_db.so.1 file::             'set/show/info auto-load libthread-db'
+
+* Auto-loading safe path::             'set/show/info auto-load safe-path'
+* Auto-loading verbose mode::          'set/show debug auto-load'
+
 
 File: gdb.info,  Node: Init File in the Current Directory,  Next: libthread_db.so.1 file,  Up: Auto-loading
 
@@ -455,7 +2777,7 @@ user.  Each directory can also be a shel
 will not get loaded:
 
      $ ./gdb -q ./gdb
-     Reading symbols from /home/user/gdb/gdb...done.
+     Reading symbols from /home/user/gdb/gdb...
      warning: File "/home/user/gdb/gdb-gdb.gdb" auto-loading has been
               declined by your `auto-load safe-path' set
               to "$debugdir:$datadir/auto-load".
@@ -675,28 +2997,59 @@ commands.
 'show exec-done-display'
      Displays the current setting of asynchronous command completion
      notification.
+
 'set debug aarch64'
      Turns on or off display of debugging messages related to ARM
      AArch64.  The default is off.
 'show debug aarch64'
      Displays the current state of displaying debugging messages related
      to ARM AArch64.
+
 'set debug arch'
      Turns on or off display of gdbarch debugging info.  The default is
      off
 'show debug arch'
      Displays the current state of displaying gdbarch debugging info.
-'set debug aix-solib'
-     Control display of debugging messages from the AIX shared library
-     support module.  The default is off.
-'show debug aix-thread'
-     Show the current state of displaying AIX shared library debugging
-     messages.
+
 'set debug aix-thread'
      Display debugging messages about inner workings of the AIX thread
      module.
 'show debug aix-thread'
      Show the current state of AIX thread debugging info display.
+
+'set debug amd-dbgapi-lib'
+'show debug amd-dbgapi-lib'
+
+     The 'set debug amd-dbgapi-lib log-level LEVEL' command can be used
+     to enable diagnostic messages from the 'amd-dbgapi' library, where
+     LEVEL can be:
+
+     'off'
+          no logging is enabled
+
+     'error'
+          fatal errors are reported
+
+     'warning'
+          fatal errors and warnings are reported
+
+     'info'
+          fatal errors, warnings, and info messages are reported
+
+     'verbose'
+          all messages are reported
+
+     The 'show debug amd-dbgapi-lib log-level' command displays the
+     current amd-dbgapi library log level.
+
+'set debug amd-dbgapi'
+'show debug amd-dbgapi'
+
+     The 'set debug amd-dbgapi' command can be used to enable diagnostic
+     messages in the 'amd-dbgapi' target.  The 'show debug amd-dbgapi'
+     command displays the current setting.  *Note set debug
+     amd-dbgapi::.
+
 'set debug check-physname'
      Check the results of the "physname" computation.  When reading
      DWARF debugging information for C++, GDB attempts to compute each
@@ -706,17 +3059,20 @@ commands.
      any discrepancies.
 'show debug check-physname'
      Show the current state of "physname" checking.
+
 'set debug coff-pe-read'
      Control display of debugging messages related to reading of COFF/PE
      exported symbols.  The default is off.
 'show debug coff-pe-read'
      Displays the current state of displaying debugging messages related
      to reading of COFF/PE exported symbols.
+
 'set debug dwarf-die'
      Dump DWARF DIEs after they are read in.  The value is the number of
      nesting levels to print.  A value of zero turns off the display.
 'show debug dwarf-die'
      Show the current state of DWARF DIE debugging.
+
 'set debug dwarf-line'
      Turns on or off display of debugging messages related to reading
      DWARF line tables.  The default is 0 (off).  A value of 1 provides
@@ -724,6 +3080,7 @@ commands.
      information.
 'show debug dwarf-line'
      Show the current state of DWARF line table debugging.
+
 'set debug dwarf-read'
      Turns on or off display of debugging messages related to reading
      DWARF debug info.  The default is 0 (off).  A value of 1 provides
@@ -731,41 +3088,66 @@ commands.
      information.
 'show debug dwarf-read'
      Show the current state of DWARF reader debugging.
+
 'set debug displaced'
      Turns on or off display of GDB debugging info for the displaced
      stepping support.  The default is off.
 'show debug displaced'
      Displays the current state of displaying GDB debugging info related
      to displaced stepping.
+
 'set debug event'
      Turns on or off display of GDB event debugging info.  The default
      is off.
 'show debug event'
      Displays the current state of displaying GDB event debugging info.
+
+'set debug event-loop'
+     Controls output of debugging info about the event loop.  The
+     possible values are 'off', 'all' (shows all debugging info) and
+     'all-except-ui' (shows all debugging info except those about
+     UI-related events).
+'show debug event-loop'
+     Shows the current state of displaying debugging info about the
+     event loop.
+
 'set debug expression'
      Turns on or off display of debugging info about GDB expression
      parsing.  The default is off.
 'show debug expression'
      Displays the current state of displaying debugging info about GDB
      expression parsing.
+
 'set debug fbsd-lwp'
      Turns on or off debugging messages from the FreeBSD LWP debug
      support.
 'show debug fbsd-lwp'
      Show the current state of FreeBSD LWP debugging messages.
+
 'set debug fbsd-nat'
      Turns on or off debugging messages from the FreeBSD native target.
 'show debug fbsd-nat'
      Show the current state of FreeBSD native target debugging messages.
+
+'set debug fortran-array-slicing'
+     Turns on or off display of GDB Fortran array slicing debugging
+     info.  The default is off.
+
+'show debug fortran-array-slicing'
+     Displays the current state of displaying GDB Fortran array slicing
+     debugging info.
+
 'set debug frame'
      Turns on or off display of GDB frame debugging info.  The default
      is off.
 'show debug frame'
      Displays the current state of displaying GDB frame debugging info.
+
 'set debug gnu-nat'
      Turn on or off debugging messages from the GNU/Hurd debug support.
 'show debug gnu-nat'
      Show the current state of GNU/Hurd debugging messages.
+
 'set debug infrun'
      Turns on or off display of GDB debugging info for running the
      inferior.  The default is off.  'infrun.c' contains GDB's runtime
@@ -773,36 +3155,50 @@ commands.
      single-stepping the inferior.
 'show debug infrun'
      Displays the current state of GDB inferior debugging.
+
+'set debug infcall'
+     Turns on or off display of debugging info related to inferior
+     function calls made by GDB.
+'show debug infcall'
+     Displays the current state of GDB inferior function call debugging.
+
 'set debug jit'
      Turn on or off debugging messages from JIT debug support.
 'show debug jit'
      Displays the current state of GDB JIT debugging.
-'set debug lin-lwp'
-     Turn on or off debugging messages from the Linux LWP debug support.
-'show debug lin-lwp'
-     Show the current state of Linux LWP debugging messages.
+
+'set debug linux-nat [on|off]'
+     Turn on or off debugging messages from the Linux native target
+     debug support.
+'show debug linux-nat'
+     Show the current state of Linux native target debugging messages.
+
 'set debug linux-namespaces'
      Turn on or off debugging messages from the Linux namespaces debug
      support.
 'show debug linux-namespaces'
      Show the current state of Linux namespaces debugging messages.
+
 'set debug mach-o'
      Control display of debugging messages related to Mach-O symbols
      processing.  The default is off.
 'show debug mach-o'
      Displays the current state of displaying debugging messages related
      to reading of COFF/PE exported symbols.
+
 'set debug notification'
      Turn on or off debugging messages about remote async notification.
      The default is off.
 'show debug notification'
      Displays the current state of remote async notification debugging
      messages.
+
 'set debug observer'
      Turns on or off display of GDB observer debugging.  This includes
      info such as the notification of observable events.
 'show debug observer'
      Displays the current state of observer debugging.
+
 'set debug overload'
      Turns on or off display of GDB C++ overload debugging info.  This
      includes info such as ranking of functions, etc.  The default is
@@ -810,6 +3206,7 @@ commands.
 'show debug overload'
      Displays the current state of displaying GDB C++ overload debugging
      info.
+
 'set debug parser'
      Turns on or off the display of expression parser debugging output.
      Internally, this sets the 'yydebug' variable in the expression
@@ -817,6 +3214,7 @@ commands.
      The default is off.
 'show debug parser'
      Show the current state of expression parser debugging.
+
 'set debug remote'
      Turns on or off display of reports on all packets sent back and
      forth across the serial line to the remote machine.  The info is
@@ -849,11 +3247,13 @@ commands.
      is off.
 'show debug serial'
      Displays the current state of displaying GDB serial debugging info.
-'set debug solib-frv'
-     Turn on or off debugging messages for FR-V shared-library code.
-'show debug solib-frv'
-     Display the current state of FR-V shared-library code debugging
-     messages.
+
+'set debug solib'
+     Turns on or off display of debugging messages related to shared
+     libraries.  The default is off.
+'show debug solib'
+     Show the current state of solib debugging messages.
+
 'set debug symbol-lookup'
      Turns on or off display of debugging messages related to symbol
      lookup.  The default is 0 (off).  A value of 1 provides basic
@@ -861,11 +3261,13 @@ commands.
      information.
 'show debug symbol-lookup'
      Show the current state of symbol lookup debugging messages.
+
 'set debug symfile'
      Turns on or off display of debugging messages related to symbol
      file functions.  The default is off.  *Note Files::.
 'show debug symfile'
      Show the current state of symbol file debugging messages.
+
 'set debug symtab-create'
      Turns on or off display of debugging messages related to symbol
      table creation.  The default is 0 (off).  A value of 1 provides
@@ -873,6 +3275,7 @@ commands.
      information.
 'show debug symtab-create'
      Show the current state of symbol table creation debugging.
+
 'set debug target'
      Turns on or off display of GDB target debugging info.  This info
      includes what is going on at the target level of GDB, as it
@@ -880,6 +3283,7 @@ commands.
      to also track the value of large memory transfers.
 'show debug target'
      Displays the current state of displaying GDB target debugging info.
+
 'set debug timestamp'
      Turns on or off display of timestamps with GDB debugging info.
      When enabled, seconds and microseconds are displayed before each
@@ -887,17 +3291,26 @@ commands.
 'show debug timestamp'
      Displays the current state of displaying timestamps with GDB
      debugging info.
+
 'set debug varobj'
      Turns on or off display of GDB variable object debugging info.  The
      default is off.
 'show debug varobj'
      Displays the current state of displaying GDB variable object
      debugging info.
+
 'set debug xml'
      Turn on or off debugging messages for built-in XML parsers.
 'show debug xml'
      Displays the current state of XML debugging messages.
 
+'set debug breakpoints'
+     Turns on or off display of GDB debugging info for breakpoint
+     insertion and removal.  The default is off.
+'show debug breakpoints'
+     Displays the current state of displaying GDB debugging info for
+     breakpoint insertion and removal.
+
 
 File: gdb.info,  Node: Other Misc Settings,  Prev: Debugging Output,  Up: Controlling GDB
 
@@ -922,6 +3335,63 @@ File: gdb.info,  Node: Other Misc Settin
      Displays whether the debugger is operating in interactive mode or
      not.
 
+'set suppress-cli-notifications'
+     If 'on', command-line-interface (CLI) notifications that are
+     printed by GDB are suppressed.  If 'off', the notifications are
+     printed as usual.  The default value is 'off'.  CLI notifications
+     occur when you change the selected context or when the program
+     being debugged stops, as detailed below.
+
+     _User-selected context changes:_
+          When you change the selected context (i.e. the current
+          inferior, thread and/or the frame), GDB prints information
+          about the new context.  For example, the default behavior is
+          below:
+
+               (gdb) inferior 1
+               [Switching to inferior 1 [process 634] (/tmp/test)]
+               [Switching to thread 1 (process 634)]
+               #0  main () at test.c:3
+               3         return 0;
+               (gdb)
+
+          When the notifications are suppressed, the new context is not
+          printed:
+
+               (gdb) set suppress-cli-notifications on
+               (gdb) inferior 1
+               (gdb)
+
+     _The program being debugged stops:_
+          When the program you are debugging stops (e.g. because of
+          hitting a breakpoint, completing source-stepping, an
+          interrupt, etc.), GDB prints information about the stop event.
+          For example, below is a breakpoint hit:
+
+               (gdb) break test.c:3
+               Breakpoint 2 at 0x555555555155: file test.c, line 3.
+               (gdb) continue
+               Continuing.
+
+               Breakpoint 2, main () at test.c:3
+               3         return 0;
+               (gdb)
+
+          When the notifications are suppressed, the output becomes:
+
+               (gdb) break test.c:3
+               Breakpoint 2 at 0x555555555155: file test.c, line 3.
+               (gdb) set suppress-cli-notifications on
+               (gdb) continue
+               Continuing.
+               (gdb)
+
+          Suppressing CLI notifications may be useful in scripts to
+          obtain a reduced output from a list of commands.
+
+'show suppress-cli-notifications'
+     Displays whether printing CLI notifications is suppressed or not.
+
 
 File: gdb.info,  Node: Extending GDB,  Next: Interpreters,  Prev: Controlling GDB,  Up: Top
 
@@ -933,15 +3403,6 @@ ability to automatically load extensions
 debugging.  This allows the user to automatically customize GDB for the
 program being debugged.
 
-* Menu:
-
-* Sequences::                Canned Sequences of GDB Commands
-* Python::                   Extending GDB using Python
-* Guile::                    Extending GDB using Guile
-* Auto-loading extensions::  Automatically loading extensions
-* Multiple Extension Languages:: Working with multiple extension languages
-* Aliases::                  Creating new spellings of existing commands
-
    To facilitate the use of extension languages, GDB is capable of
 evaluating the contents of a file.  When doing so, GDB can recognize
 which extension language is being used by looking at the filename
@@ -968,8 +3429,17 @@ setting:
 'show script-extension'
      Display the current value of the 'script-extension' option.
 
+* Menu:
+
+* Sequences::                Canned Sequences of GDB Commands
+* Aliases::                  Command Aliases
+* Python::                   Extending GDB using Python
+* Guile::                    Extending GDB using Guile
+* Auto-loading extensions::  Automatically loading extensions
+* Multiple Extension Languages:: Working with multiple extension languages
+
 
-File: gdb.info,  Node: Sequences,  Next: Python,  Up: Extending GDB
+File: gdb.info,  Node: Sequences,  Next: Aliases,  Up: Extending GDB
 
 23.1 Canned Sequences of Commands
 =================================
@@ -1061,6 +3531,13 @@ process a variable number of arguments:
      documentation of a command.  Redefining the command with 'define'
      does not change the documentation.
 
+     It is also possible to document user-defined aliases.  The alias
+     documentation will then be used by the 'help' and 'apropos'
+     commands instead of the documentation of the aliased command.
+     Documenting a user-defined alias is particularly useful when
+     defining an alias as a set of nested 'with' commands (*note Command
+     aliases default args::).
+
 'define-prefix COMMANDNAME'
      Define or mark the command COMMANDNAME as a user-defined prefix
      command.  Once marked, COMMANDNAME can be used as prefix command by
@@ -1428,6 +3905,28 @@ want.
      letters:
           printf "D32: %Hf - D64: %Df - D128: %DDf\n",1.2345df,1.2E10dd,1.2E1dl
 
+     Additionally, 'printf' supports a special '%V' output format.  This
+     format prints the string representation of an expression just as
+     GDB would produce with the standard 'print' command (*note
+     Examining Data: Data.):
+
+          (gdb) print array
+          $1 = {0, 1, 2, 3, 4, 5}
+          (gdb) printf "Array is: %V\n", array
+          Array is: {0, 1, 2, 3, 4, 5}
+
+     It is possible to include print options with the '%V' format by
+     placing them in '[...]' immediately after the '%V', like this:
+
+          (gdb) printf "Array is: %V[-array-indexes on]\n", array
+          Array is: {[0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5}
+
+     If you need to print a literal '[' directly after a '%V', then just
+     include an empty print options list:
+
+          (gdb) printf "Array is: %V[][Hello]\n", array
+          Array is: {0, 1, 2, 3, 4, 5}[Hello]
+
 'eval TEMPLATE, EXPRESSIONS...'
      Convert the values of one or more EXPRESSIONS under the control of
      the string TEMPLATE to a command line, and call it.
@@ -1461,16 +3960,190 @@ scripts can be printed.
 matching names are printed.
 
 
-File: gdb.info,  Node: Python,  Next: Guile,  Prev: Sequences,  Up: Extending GDB
+File: gdb.info,  Node: Aliases,  Next: Python,  Prev: Sequences,  Up: Extending GDB
+
+23.2 Command Aliases
+====================
+
+Aliases allow you to define alternate spellings for existing commands.
+For example, if a new GDB command defined in Python (*note Python::) has
+a long name, it is handy to have an abbreviated version of it that
+involves less typing.
 
-23.2 Extending GDB using Python
+   GDB itself uses aliases.  For example 's' is an alias of the 'step'
+command even though it is otherwise an ambiguous abbreviation of other
+commands like 'set' and 'show'.
+
+   Aliases are also used to provide shortened or more common versions of
+multi-word commands.  For example, GDB provides the 'tty' alias of the
+'set inferior-tty' command.
+
+   You can define a new alias with the 'alias' command.
+
+'alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS]'
+
+   ALIAS specifies the name of the new alias.  Each word of ALIAS must
+consist of letters, numbers, dashes and underscores.
+
+   COMMAND specifies the name of an existing command that is being
+aliased.
+
+   COMMAND can also be the name of an existing alias.  In this case,
+COMMAND cannot be an alias that has default arguments.
+
+   The '-a' option specifies that the new alias is an abbreviation of
+the command.  Abbreviations are not used in command completion.
+
+   The '--' option specifies the end of options, and is useful when
+ALIAS begins with a dash.
+
+   You can specify DEFAULT-ARGS for your alias.  These DEFAULT-ARGS will
+be automatically added before the alias arguments typed explicitly on
+the command line.
+
+   For example, the below defines an alias 'btfullall' that shows all
+local variables and all frame arguments:
+     (gdb) alias btfullall = backtrace -full -frame-arguments all
+
+   For more information about DEFAULT-ARGS, see *note Default Arguments:
+Command aliases default args.
+
+   Here is a simple example showing how to make an abbreviation of a
+command so that there is less to type.  Suppose you were tired of typing
+'disas', the current shortest unambiguous abbreviation of the
+'disassemble' command and you wanted an even shorter version named 'di'.
+The following will accomplish this.
+
+     (gdb) alias -a di = disas
+
+   Note that aliases are different from user-defined commands.  With a
+user-defined command, you also need to write documentation for it with
+the 'document' command.  An alias automatically picks up the
+documentation of the existing command.
+
+   Here is an example where we make 'elms' an abbreviation of 'elements'
+in the 'set print elements' command.  This is to show that you can make
+an abbreviation of any part of a command.
+
+     (gdb) alias -a set print elms = set print elements
+     (gdb) alias -a show print elms = show print elements
+     (gdb) set p elms 200
+     (gdb) show p elms
+     Limit on string chars or array elements to print is 200.
+
+   Note that if you are defining an alias of a 'set' command, and you
+want to have an alias for the corresponding 'show' command, then you
+need to define the latter separately.
+
+   Unambiguously abbreviated commands are allowed in COMMAND and ALIAS,
+just as they are normally.
+
+     (gdb) alias -a set pr elms = set p ele
+
+   Finally, here is an example showing the creation of a one word alias
+for a more complex command.  This creates alias 'spe' of the command
+'set print elements'.
+
+     (gdb) alias spe = set print elements
+     (gdb) spe 20
+
+* Menu:
+
+* Command aliases default args::        Default arguments for aliases
+
+
+File: gdb.info,  Node: Command aliases default args,  Up: Aliases
+
+23.2.1 Default Arguments
+------------------------
+
+You can tell GDB to always prepend some default arguments to the list of
+arguments provided explicitly by the user when using a user-defined
+alias.
+
+   If you repeatedly use the same arguments or options for a command,
+you can define an alias for this command and tell GDB to automatically
+prepend these arguments or options to the list of arguments you type
+explicitly when using the alias(1).
+
+   For example, if you often use the command 'thread apply all'
+specifying to work on the threads in ascending order and to continue in
+case it encounters an error, you can tell GDB to automatically preprend
+the '-ascending' and '-c' options by using:
+
+     (gdb) alias thread apply asc-all = thread apply all -ascending -c
+
+   Once you have defined this alias with its default args, any time you
+type the 'thread apply asc-all' followed by 'some arguments', GDB will
+execute 'thread apply all -ascending -c some arguments'.
+
+   To have even less to type, you can also define a one word alias:
+     (gdb) alias t_a_c = thread apply all -ascending -c
+
+   As usual, unambiguous abbreviations can be used for ALIAS and
+DEFAULT-ARGS.
+
+   The different aliases of a command do not share their default args.
+For example, you define a new alias 'bt_ALL' showing all possible
+information and another alias 'bt_SMALL' showing very limited
+information using:
+     (gdb) alias bt_ALL = backtrace -entry-values both -frame-arg all \
+        -past-main -past-entry -full
+     (gdb) alias bt_SMALL = backtrace -entry-values no -frame-arg none \
+        -past-main off -past-entry off
+
+   (For more on using the 'alias' command, see *note Aliases::.)
+
+   Default args are not limited to the arguments and options of COMMAND,
+but can specify nested commands if COMMAND accepts such a nested command
+as argument.  For example, the below defines 'faalocalsoftype' that
+lists the frames having locals of a certain type, together with the
+matching local vars:
+     (gdb) alias faalocalsoftype = frame apply all info locals -q -t
+     (gdb) faalocalsoftype int
+     #1  0x55554f5e in sleeper_or_burner (v=0xdf50) at sleepers.c:86
+     i = 0
+     ret = 21845
+
+   This is also very useful to define an alias for a set of nested
+'with' commands to have a particular combination of temporary settings.
+For example, the below defines the alias 'pp10' that pretty prints an
+expression argument, with a maximum of 10 elements if the expression is
+a string or an array:
+     (gdb) alias pp10 = with print pretty -- with print elements 10 -- print
+   This defines the alias 'pp10' as being a sequence of 3 commands.  The
+first part 'with print pretty --' temporarily activates the setting 'set
+print pretty', then launches the command that follows the separator
+'--'.  The command following the first part is also a 'with' command
+that temporarily changes the setting 'set print elements' to 10, then
+launches the command that follows the second separator '--'.  The third
+part 'print' is the command the 'pp10' alias will launch, using the
+temporary values of the settings and the arguments explicitly given by
+the user.  For more information about the 'with' command usage, see
+*note Command Settings::.
+
+   By default, asking the help for an alias shows the documentation of
+the aliased command.  When the alias is a set of nested commands, 'help'
+of an alias shows the documentation of the first command.  This help is
+not particularly useful for an alias such as 'pp10'.  For such an alias,
+it is useful to give a specific documentation using the 'document'
+command (*note document: Define.).
+
+   ---------- Footnotes ----------
+
+   (1) GDB could easily accept default arguments for pre-defined
+commands and aliases, but it was deemed this would be confusing, and so
+is not allowed.
+
+
+File: gdb.info,  Node: Python,  Next: Guile,  Prev: Aliases,  Up: Extending GDB
+
+23.3 Extending GDB using Python
 ===============================
 
 You can extend GDB using the Python programming language
 (http://www.python.org/).  This feature is available only if GDB was
-configured using '--with-python'.  GDB can be built against either
-Python 2 or Python 3; which one you have depends on this configure-time
-option.
+configured using '--with-python'.
 
    Python scripts used by GDB should be installed in
 'DATA-DIRECTORY/python', where DATA-DIRECTORY is the data directory as
@@ -1495,7 +4168,7 @@ imported when GDB starts.
 
 File: gdb.info,  Node: Python Commands,  Next: Python API,  Up: Python
 
-23.2.1 Python Commands
+23.3.1 Python Commands
 ----------------------
 
 GDB provides two commands for accessing the Python interpreter, and one
@@ -1544,6 +4217,45 @@ related setting:
      message printing is disabled; if 'message', the default, only the
      message component of the error is printed.
 
+'set python ignore-environment [on|off]'
+     By default this option is 'off', and, when GDB initializes its
+     internal Python interpreter, the Python interpreter will check the
+     environment for variables that will effect how it behaves, for
+     example 'PYTHONHOME', and 'PYTHONPATH'(1).
+
+     If this option is set to 'on' before Python is initialized then
+     Python will ignore all such environment variables.  As Python is
+     initialized early during GDB's startup process, then this option
+     must be placed into the early initialization file (*note
+     Initialization Files::) to have the desired effect.
+
+     This option is equivalent to passing '-E' to the real 'python'
+     executable.
+
+'set python dont-write-bytecode [auto|on|off]'
+     When this option is 'off', then, once GDB has initialized the
+     Python interpreter, the interpreter will byte-compile any Python
+     modules that it imports and write the byte code to disk in '.pyc'
+     files.
+
+     If this option is set to 'on' before Python is initialized then
+     Python will no longer write the byte code to disk.  As Python is
+     initialized early during GDB's startup process, then this option
+     must be placed into the early initialization file (*note
+     Initialization Files::) to have the desired effect.
+
+     By default this option is set to 'auto'.  In this mode, provided
+     the 'python ignore-environment' setting is 'off', the environment
+     variable 'PYTHONDONTWRITEBYTECODE' is examined to see if it should
+     write out byte-code or not.  'PYTHONDONTWRITEBYTECODE' is
+     considered to be off/disabled either when set to the empty string
+     or when the environment variable doesn't exist.  All other
+     settings, including those which don't seem to make sense, indicate
+     that it's on/enabled.
+
+     This option is equivalent to passing '-B' to the real 'python'
+     executable.
+
    It is also possible to execute a Python script from the GDB
 interpreter:
 
@@ -1552,10 +4264,27 @@ interpreter:
      recognize the script language based on filename extension using the
      'script-extension' setting.  *Note Extending GDB: Extending GDB.
 
+   The following commands are intended to help debug GDB itself:
+
+'set debug py-breakpoint on|off'
+'show debug py-breakpoint'
+     When 'on', GDB prints debug messages related to the Python
+     breakpoint API. This is 'off' by default.
+
+'set debug py-unwind on|off'
+'show debug py-unwind'
+     When 'on', GDB prints debug messages related to the Python unwinder
+     API. This is 'off' by default.
+
+   ---------- Footnotes ----------
+
+   (1) See the ENVIRONMENT VARIABLES section of 'man 1 python' for a
+comprehensive list.
+
 
 File: gdb.info,  Node: Python API,  Next: Python Auto-loading,  Prev: Python Commands,  Up: Python
 
-23.2.2 Python API
+23.3.2 Python API
 -----------------
 
 You can get quick online help for GDB's Python API by issuing the
@@ -1569,13 +4298,14 @@ optional arguments while skipping others
 * Menu:
 
 * Basic Python::                Basic Python Functions.
+* Threading in GDB::		Using Python threads in GDB.
 * Exception Handling::          How Python exceptions are translated.
 * Values From Inferior::        Python representation of values.
 * Types In Python::             Python representation of types.
 * Pretty Printing API::         Pretty-printing values.
 * Selecting Pretty-Printers::   How GDB chooses a pretty-printer.
 * Writing a Pretty-Printer::    Writing a Pretty-Printer.
-* Type Printing API::		Pretty-printing types.
+* Type Printing API::           Pretty-printing types.
 * Frame Filter API::            Filtering Frames.
 * Frame Decorator API::         Decorating Frames.
 * Writing a Frame Filter::      Writing a Frame Filter.
@@ -1587,7 +4317,9 @@ optional arguments while skipping others
 * Events In Python::            Listening for events from GDB.
 * Threads In Python::           Accessing inferior threads from Python.
 * Recordings In Python::        Accessing recordings from Python.
-* Commands In Python::          Implementing new commands in Python.
+* CLI Commands In Python::      Implementing new CLI commands in Python.
+* GDB/MI Commands In Python::   Implementing new GDB/MI commands in Python.
+* GDB/MI Notifications In Python:: Implementing new GDB/MI notifications in Python.
 * Parameters In Python::        Adding new GDB parameters.
 * Functions In Python::         Writing new convenience functions.
 * Progspaces In Python::        Program spaces.
@@ -1602,11 +4334,16 @@ optional arguments while skipping others
                                 using Python.
 * Lazy Strings In Python::      Python representation of lazy strings.
 * Architectures In Python::     Python representation of architectures.
+* Registers In Python::         Python representation of registers.
+* Connections In Python::       Python representation of connections.
+* TUI Windows In Python::       Implementing new TUI windows.
+* Disassembly In Python::       Instruction Disassembly In Python
+* Missing Debug Info In Python:: Handle missing debug info from Python.
 
 
-File: gdb.info,  Node: Basic Python,  Next: Exception Handling,  Up: Python API
+File: gdb.info,  Node: Basic Python,  Next: Threading in GDB,  Up: Python API
 
-23.2.2.1 Basic Python
+23.3.2.1 Basic Python
 .....................
 
 At startup, GDB overrides Python's 'sys.stdout' and 'sys.stderr' to
@@ -1618,11 +4355,14 @@ exception is thrown.
    Some care must be taken when writing Python code to run in GDB.  Two
 things worth noting in particular:
 
-   * GDB install handlers for 'SIGCHLD' and 'SIGINT'.  Python code must
+   * GDB installs handlers for 'SIGCHLD' and 'SIGINT'.  Python code must
      not override these, or even change the options using 'sigaction'.
      If your program changes the handling of these signals, GDB will
      most likely stop working correctly.  Note that it is unfortunately
-     common for GUI toolkits to install a 'SIGCHLD' handler.
+     common for GUI toolkits to install a 'SIGCHLD' handler.  When
+     creating a new Python thread, you can use 'gdb.block_signals' or
+     'gdb.Thread' to handle this correctly; see *note Threading in
+     GDB::.
 
    * GDB takes care to mark its internal file descriptors as
      close-on-exec.  However, this cannot be done in a thread-safe way
@@ -1696,6 +4436,25 @@ for debugging purposes only, expect them
      parameter's value is converted to a Python value of the appropriate
      type, and returned.
 
+ -- Function: gdb.set_parameter (name, value)
+     Sets the gdb parameter NAME to VALUE.  As with 'gdb.parameter', the
+     parameter name string may contain spaces if the parameter has a
+     multi-part name.
+
+ -- Function: gdb.with_parameter (name, value)
+     Create a Python context manager (for use with the Python 'with'
+     statement) that temporarily sets the gdb parameter NAME to VALUE.
+     On exit from the context, the previous value will be restored.
+
+     This uses 'gdb.parameter' in its implementation, so it can throw
+     the same exceptions as that function.
+
+     For example, it's sometimes useful to evaluate some Python code
+     with a particular gdb language:
+
+          with gdb.with_parameter('language', 'pascal'):
+            ... language-specific operations
+
  -- Function: gdb.history (number)
      Return a value from GDB's value history (*note Value History::).
      The NUMBER argument indicates which history element to return.  If
@@ -1709,6 +4468,22 @@ for debugging purposes only, expect them
      If no exception is raised, the return value is always an instance
      of 'gdb.Value' (*note Values From Inferior::).
 
+ -- Function: gdb.add_history (value)
+     Takes VALUE, an instance of 'gdb.Value' (*note Values From
+     Inferior::), and appends the value this object represents to GDB's
+     value history (*note Value History::), and return an integer, its
+     history number.  If VALUE is not a 'gdb.Value', it is is converted
+     using the 'gdb.Value' constructor.  If VALUE can't be converted to
+     a 'gdb.Value' then a 'TypeError' is raised.
+
+     When a command implemented in Python prints a single 'gdb.Value' as
+     its result, then placing the value into the history will allow the
+     user convenient access to those values via CLI history facilities.
+
+ -- Function: gdb.history_count ()
+     Return an integer indicating the number of values in GDB's value
+     history (*note Value History::).
+
  -- Function: gdb.convenience_variable (name)
      Return the value of the convenience variable (*note Convenience
      Vars::) named NAME.  NAME must be a string.  The name should not
@@ -1725,15 +4500,20 @@ for debugging purposes only, expect them
      From Inferior::), it is is converted using the 'gdb.Value'
      constructor.
 
- -- Function: gdb.parse_and_eval (expression)
+ -- Function: gdb.parse_and_eval (expression [, global_context])
      Parse EXPRESSION, which must be a string, as an expression in the
      current language, evaluate it, and return the result as a
      'gdb.Value'.
 
+     GLOBAL_CONTEXT, if provided, is a boolean indicating whether the
+     parsing should be done in the global context.  The default is
+     'False', meaning that the current frame or current static context
+     should be used.
+
      This function can be useful when implementing a new command (*note
-     Commands In Python::), as it provides a way to parse the command's
-     argument as an expression.  It is also useful simply to compute
-     values.
+     CLI Commands In Python::, *note GDB/MI Commands In Python::), as it
+     provides a way to parse the command's argument as an expression.
+     It is also useful simply to compute values.
 
  -- Function: gdb.find_pc_line (pc)
      Return the 'gdb.Symtab_and_line' object corresponding to the PC
@@ -1744,40 +4524,6 @@ for debugging purposes only, expect them
      'gdb.current_progspace().find_pc_line(pc)' and is included for
      historical compatibility.
 
- -- Function: gdb.post_event (event)
-     Put EVENT, a callable object taking no arguments, into GDB's
-     internal event queue.  This callable will be invoked at some later
-     point, during GDB's event processing.  Events posted using
-     'post_event' will be run in the order in which they were posted;
-     however, there is no way to know when they will be processed
-     relative to other events inside GDB.
-
-     GDB is not thread-safe.  If your Python program uses multiple
-     threads, you must be careful to only call GDB-specific functions in
-     the GDB thread.  'post_event' ensures this.  For example:
-
-          (gdb) python
-          >import threading
-          >
-          >class Writer():
-          > def __init__(self, message):
-          >        self.message = message;
-          > def __call__(self):
-          >        gdb.write(self.message)
-          >
-          >class MyThread1 (threading.Thread):
-          > def run (self):
-          >        gdb.post_event(Writer("Hello "))
-          >
-          >class MyThread2 (threading.Thread):
-          > def run (self):
-          >        gdb.post_event(Writer("World\n"))
-          >
-          >MyThread1().start()
-          >MyThread2().start()
-          >end
-          (gdb) Hello World
-
  -- Function: gdb.write (string [, stream])
      Print a string to GDB's paginated output stream.  The optional
      STREAM determines the stream to print to.  The default stream is
@@ -1796,7 +4542,7 @@ for debugging purposes only, expect them
      this function and will automatically direct the output to the
      relevant stream.
 
- -- Function: gdb.flush ()
+ -- Function: gdb.flush ([, stream])
      Flush the buffer of a GDB paginated stream so that the contents are
      displayed immediately.  GDB will flush the contents of a stream
      automatically when it encounters a newline in the buffer.  The
@@ -1826,6 +4572,11 @@ for debugging purposes only, expect them
      'gdb.parameter('target-wide-charset')' in that 'auto' is never
      returned.
 
+ -- Function: gdb.host_charset ()
+     Return a string, the name of the current host character set (*note
+     Character Sets::).  This differs from
+     'gdb.parameter('host-charset')' in that 'auto' is never returned.
+
  -- Function: gdb.solib_name (address)
      Return the name of the shared library holding the given ADDRESS as
      a string, or 'None'.  This is identical to
@@ -1842,7 +4593,7 @@ for debugging purposes only, expect them
      match the expression represented as 'gdb.Symtab_and_line' objects
      (*note Symbol Tables In Python::).  If EXPRESSION is provided, it
      is decoded the way that GDB's inbuilt 'break' or 'edit' commands do
-     (*note Specify Location::).
+     (*note Location Specifications::).
 
  -- Function: gdb.prompt_hook (current_prompt)
 
@@ -1858,10 +4609,140 @@ for debugging purposes only, expect them
      as those used by readline for command input, and annotation related
      prompts are prohibited from being changed.
 
+ -- Function: gdb.architecture_names ()
+     Return a list containing all of the architecture names that the
+     current build of GDB supports.  Each architecture name is a string.
+     The names returned in this list are the same names as are returned
+     from 'gdb.Architecture.name' (*note Architecture.name:
+     gdbpy_architecture_name.).
+
+ -- Function: gdb.connections
+     Return a list of 'gdb.TargetConnection' objects, one for each
+     currently active connection (*note Connections In Python::).  The
+     connection objects are in no particular order in the returned list.
+
+ -- Function: gdb.format_address (address [, progspace, architecture])
+     Return a string in the format 'ADDR <SYMBOL+OFFSET>', where ADDR is
+     ADDRESS formatted in hexadecimal, SYMBOL is the symbol whose
+     address is the nearest to ADDRESS and below it in memory, and
+     OFFSET is the offset from SYMBOL to ADDRESS in decimal.
+
+     If no suitable SYMBOL was found, then the <SYMBOL+OFFSET> part is
+     not included in the returned string, instead the returned string
+     will just contain the ADDRESS formatted as hexadecimal.  How far
+     GDB looks back for a suitable symbol can be controlled with 'set
+     print max-symbolic-offset' (*note Print Settings::).
+
+     Additionally, the returned string can include file name and line
+     number information when 'set print symbol-filename on' (*note Print
+     Settings::), in this case the format of the returned string is
+     'ADDR <SYMBOL+OFFSET> at FILENAME:LINE-NUMBER'.
+
+     The PROGSPACE is the gdb.Progspace in which SYMBOL is looked up,
+     and ARCHITECTURE is used when formatting ADDR, e.g. in order to
+     determine the size of an address in bytes.
+
+     If neither PROGSPACE or ARCHITECTURE are passed, then by default
+     GDB will use the program space and architecture of the currently
+     selected inferior, thus, the following two calls are equivalent:
+
+          gdb.format_address(address)
+          gdb.format_address(address,
+                             gdb.selected_inferior().progspace,
+                             gdb.selected_inferior().architecture())
+
+     It is not valid to only pass one of PROGSPACE or ARCHITECTURE,
+     either they must both be provided, or neither must be provided (and
+     the defaults will be used).
+
+     This method uses the same mechanism for formatting address, symbol,
+     and offset information as core GDB does in commands such as
+     'disassemble'.
+
+     Here are some examples of the possible string formats:
+
+          0x00001042
+          0x00001042 <symbol+16>
+          0x00001042 <symbol+16 at file.c:123>
+
+ -- Function: gdb.current_language ()
+     Return the name of the current language as a string.  Unlike
+     'gdb.parameter('language')', this function will never return
+     'auto'.  If a 'gdb.Frame' object is available (*note Frames In
+     Python::), the 'language' method might be preferable in some cases,
+     as that is not affected by the user's language setting.
+
+
+File: gdb.info,  Node: Threading in GDB,  Next: Exception Handling,  Prev: Basic Python,  Up: Python API
+
+23.3.2.2 Threading in GDB
+.........................
+
+GDB is not thread-safe.  If your Python program uses multiple threads,
+you must be careful to only call GDB-specific functions in the GDB
+thread.  GDB provides some functions to help with this.
+
+ -- Function: gdb.block_signals ()
+     As mentioned earlier (*note Basic Python::), certain signals must
+     be delivered to the GDB main thread.  The 'block_signals' function
+     returns a context manager that will block these signals on entry.
+     This can be used when starting a new thread to ensure that the
+     signals are blocked there, like:
+
+          with gdb.block_signals():
+             start_new_thread()
+
+ -- class: gdb.Thread
+     This is a subclass of Python's 'threading.Thread' class.  It
+     overrides the 'start' method to call 'block_signals', making this
+     an easy-to-use drop-in replacement for creating threads that will
+     work well in GDB.
+
+ -- Function: gdb.interrupt ()
+     This causes GDB to react as if the user had typed a control-C
+     character at the terminal.  That is, if the inferior is running, it
+     is interrupted; if a GDB command is executing, it is stopped; and
+     if a Python command is running, 'KeyboardInterrupt' will be raised.
+
+     Unlike most Python APIs in GDB, 'interrupt' is thread-safe.
+
+ -- Function: gdb.post_event (event)
+     Put EVENT, a callable object taking no arguments, into GDB's
+     internal event queue.  This callable will be invoked at some later
+     point, during GDB's event processing.  Events posted using
+     'post_event' will be run in the order in which they were posted;
+     however, there is no way to know when they will be processed
+     relative to other events inside GDB.
+
+     Unlike most Python APIs in GDB, 'post_event' is thread-safe.  For
+     example:
+
+          (gdb) python
+          >import threading
+          >
+          >class Writer():
+          > def __init__(self, message):
+          >        self.message = message;
+          > def __call__(self):
+          >        gdb.write(self.message)
+          >
+          >class MyThread1 (threading.Thread):
+          > def run (self):
+          >        gdb.post_event(Writer("Hello "))
+          >
+          >class MyThread2 (threading.Thread):
+          > def run (self):
+          >        gdb.post_event(Writer("World\n"))
+          >
+          >MyThread1().start()
+          >MyThread2().start()
+          >end
+          (gdb) Hello World
+
 
-File: gdb.info,  Node: Exception Handling,  Next: Values From Inferior,  Prev: Basic Python,  Up: Python API
+File: gdb.info,  Node: Exception Handling,  Next: Values From Inferior,  Prev: Threading in GDB,  Up: Python API
 
-23.2.2.2 Exception Handling
+23.3.2.3 Exception Handling
 ...........................
 
 When executing the 'python' command, Python exceptions uncaught within
@@ -1898,7 +4779,7 @@ depends on the error.
 
    In all cases, your exception handler will see the GDB error message
 as its value and the Python call stack backtrace at the Python statement
-closest to where the GDB error occured as the traceback.
+closest to where the GDB error occurred as the traceback.
 
    When implementing GDB commands in Python via 'gdb.Command', or
 functions via 'gdb.Function', it is useful to be able to throw an
@@ -1921,7 +4802,7 @@ special exception class that can be used
           >    argv = gdb.string_to_argv (args)
           >    if len (argv) != 0:
           >      raise gdb.GdbError ("hello-world takes no arguments")
-          >    print "Hello, World!"
+          >    print ("Hello, World!")
           >HelloWorld ()
           >end
           (gdb) hello-world 42
@@ -1930,7 +4811,7 @@ special exception class that can be used
 
 File: gdb.info,  Node: Values From Inferior,  Next: Types In Python,  Prev: Exception Handling,  Up: Python API
 
-23.2.2.3 Values From Inferior
+23.3.2.4 Values From Inferior
 .............................
 
 GDB provides values it obtains from the inferior program in an object of
@@ -1976,6 +4857,11 @@ follows:
 
      bar = some_val[foo_field]
 
+   If a 'gdb.Value' has array or pointer type, an integer index can be
+used to access elements.
+
+     result = some_array[23]
+
    A 'gdb.Value' that represents a function can be executed via inferior
 function call.  Any arguments provided to the call must match the
 function's prototype, and must be provided in the order specified by
@@ -2032,9 +4918,23 @@ function, call it like so:
      fetched when the value is needed, or when the 'fetch_lazy' method
      is invoked.
 
+ -- Variable: Value.bytes
+     The value of this attribute is a 'bytes' object containing the
+     bytes that make up this 'Value''s complete value in little endian
+     order.  If the complete contents of this value are not available
+     then accessing this attribute will raise an exception.
+
+     This attribute can also be assigned to.  The new value should be a
+     buffer object (e.g. a 'bytes' object), the length of the new buffer
+     must exactly match the length of this 'Value''s type.  The bytes
+     values in the new buffer should be in little endian order.
+
+     As with 'Value.assign' (*note Value.assign::), if this value cannot
+     be assigned to, then an exception will be thrown.
+
    The following methods are provided:
 
- -- Function: Value.__init__ (VAL)
+ -- Function: Value.__init__ (val)
      Many Python values can be converted directly to a 'gdb.Value' via
      this object initializer.  Specifically:
 
@@ -2068,13 +4968,21 @@ function, call it like so:
           Python::), then the lazy string's 'value' method is called,
           and its result is used.
 
- -- Function: Value.__init__ (VAL, TYPE)
+ -- Function: Value.__init__ (val, type)
      This second form of the 'gdb.Value' constructor returns a
      'gdb.Value' of type TYPE where the value contents are taken from
      the Python buffer object specified by VAL.  The number of bytes in
      the Python buffer object must be greater than or equal to the size
      of TYPE.
 
+     If TYPE is 'None' then this version of '__init__' behaves as though
+     TYPE was not passed at all.
+
+ -- Function: Value.assign (rhs)
+     Assign RHS to this value, and return 'None'.  If this value cannot
+     be assigned to, or if the assignment is invalid for some reason
+     (for example a type-checking failure), an exception will be thrown.
+
  -- Function: Value.cast (type)
      Return a new instance of 'gdb.Value' that is the result of casting
      this instance to the type described by TYPE, which must be a
@@ -2218,6 +5126,16 @@ function, call it like so:
           unions should be expanded, 'False' if they shouldn't (see 'set
           print union' in *note Print Settings::).
 
+     'address'
+          'True' if the string representation of a pointer should
+          include the address, 'False' if it shouldn't (see 'set print
+          address' in *note Print Settings::).
+
+     'nibbles'
+          'True' if binary values should be displayed in groups of four
+          bits, known as nibbles.  'False' if it shouldn't (*note set
+          print nibbles: Print Settings.).
+
      'deref_refs'
           'True' if C++ references should be resolved to the value they
           refer to, 'False' (the default) if they shouldn't.  Note that,
@@ -2233,11 +5151,17 @@ function, call it like so:
           'False' if the _declared_ type should be used.  (See 'set
           print object' in *note Print Settings::).
 
-     'static_fields'
+     'static_members'
           'True' if static members should be included in the string
           representation of a C++ object, 'False' if they shouldn't (see
           'set print static-members' in *note Print Settings::).
 
+     'max_characters'
+          Number of string characters to print, '0' to follow
+          'max_elements', or 'UINT_MAX' to print an unlimited number of
+          characters (see 'set print characters' in *note Print
+          Settings::).
+
      'max_elements'
           Number of array elements to print, or '0' to print an
           unlimited number of elements (see 'set print elements' in
@@ -2259,6 +5183,30 @@ function, call it like so:
           equivalent to using the GDB command 'print' with the '/x'
           option and formats the value as a hexadecimal number.
 
+     'styling'
+          'True' if GDB should apply styling to the returned string.
+          When styling is applied, the returned string might contain
+          ANSI terminal escape sequences.  Escape sequences will only be
+          included if styling is turned on, see *note Output Styling::.
+          Additionally, GDB only styles some value contents, so not
+          every output string will contain escape sequences.
+
+          When 'False', which is the default, no output styling is
+          applied.
+
+     'summary'
+          'True' when just a summary should be printed.  In this mode,
+          scalar values are printed in their entirety, but aggregates
+          such as structures or unions are omitted.  This mode is used
+          by 'set print frame-arguments scalars' (*note Print
+          Settings::).
+
+ -- Function: Value.to_array ()
+     If this value is array-like (*note Type.is_array_like::), then this
+     method converts it to an array, which is returned.  If this value
+     is already an array, it is simply returned.  Otherwise, an
+     exception is throw.
+
  -- Function: Value.string ([encoding[, errors[, length]]])
      If this 'gdb.Value' represents a string, then this method converts
      the contents to a Python string.  Otherwise, this method will throw
@@ -2327,7 +5275,7 @@ function, call it like so:
 
 File: gdb.info,  Node: Types In Python,  Next: Pretty Printing API,  Prev: Values From Inferior,  Up: Python API
 
-23.2.2.4 Types In Python
+23.3.2.5 Types In Python
 ........................
 
 GDB represents types from the inferior using the class 'gdb.Type'.
@@ -2344,6 +5292,9 @@ module:
      Ordinarily, this function will return an instance of 'gdb.Type'.
      If the named type cannot be found, it will throw an exception.
 
+   Integer types can be found without looking them up by name.  *Note
+Architectures In Python::, for the 'integer_type' method.
+
    If the type is a structure or class type, or an enum type, the fields
 of that type can be accessed using the Python "dictionary syntax".  For
 example, if 'some_type' is a 'gdb.Type' instance holding a structure
@@ -2366,6 +5317,26 @@ of the 'Type.fields' method for a descri
      The type code for this type.  The type code will be one of the
      'TYPE_CODE_' constants defined below.
 
+ -- Variable: Type.dynamic
+     A boolean indicating whether this type is dynamic.  In some
+     situations, such as Rust 'enum' types or Ada variant records, the
+     concrete type of a value may vary depending on its contents.  That
+     is, the declared type of a variable, or the type returned by
+     'gdb.lookup_type' may be dynamic; while the type of the variable's
+     value will be a concrete instance of that dynamic type.
+
+     For example, consider this code:
+          int n;
+          int array[n];
+
+     Here, at least conceptually (whether your compiler actually does
+     this is a separate issue), examining
+     'gdb.lookup_symbol("array", ...).type' could yield a 'gdb.Type'
+     which reports a size of 'None'.  This is the dynamic type.
+
+     However, examining 'gdb.parse_and_eval("array").type' would yield a
+     concrete type, whose length would be known.
+
  -- Variable: Type.name
      The name of this type.  If this type has no name, then 'None' is
      returned.
@@ -2373,7 +5344,9 @@ of the 'Type.fields' method for a descri
  -- Variable: Type.sizeof
      The size of this type, in target 'char' units.  Usually, a target's
      'char' type will be an 8-bit byte.  However, on some unusual
-     platforms, this type may have a different size.
+     platforms, this type may have a different size.  A dynamic type may
+     not have a fixed size; in this case, this attribute's value will be
+     'None'.
 
  -- Variable: Type.tag
      The tag name for this type.  The tag name is the name after
@@ -2385,23 +5358,62 @@ of the 'Type.fields' method for a descri
      The 'gdb.Objfile' that this type was defined in, or 'None' if there
      is no associated objfile.
 
+ -- Variable: Type.is_scalar
+     This property is 'True' if the type is a scalar type, otherwise,
+     this property is 'False'.  Examples of non-scalar types include
+     structures, unions, and classes.
+
+ -- Variable: Type.is_signed
+     For scalar types (those for which 'Type.is_scalar' is 'True'), this
+     property is 'True' if the type is signed, otherwise this property
+     is 'False'.
+
+     Attempting to read this property for a non-scalar type (a type for
+     which 'Type.is_scalar' is 'False'), will raise a 'ValueError'.
+
+ -- Variable: Type.is_array_like
+     A boolean indicating whether this type is array-like.
+
+     Some languages have array-like objects that are represented
+     internally as structures.  For example, this is true for a Rust
+     slice type, or for an Ada unconstrained array.  GDB may know about
+     these types.  This determination is done based on the language from
+     which the type originated.
+
+ -- Variable: Type.is_string_like
+     A boolean indicating whether this type is string-like.  Like
+     'Type.is_array_like', this is determined based on the originating
+     language of the type.
+
    The following methods are provided:
 
  -- Function: Type.fields ()
-     For structure and union types, this method returns the fields.
-     Range types have two fields, the minimum and maximum values.  Enum
-     types have one field per enum constant.  Function and method types
-     have one field per parameter.  The base types of C++ classes are
-     also represented as fields.  If the type has no fields, or does not
-     fit into one of these categories, an empty sequence will be
-     returned.
+
+     Return the fields of this type.  The behavior depends on the type
+     code:
+
+        * For structure and union types, this method returns the fields.
+
+        * Enum types have one field per enum constant.
+
+        * Function and method types have one field per parameter.  The
+          base types of C++ classes are also represented as fields.
+
+        * Array types have one field representing the array's range.
+
+        * If the type does not fit into one of these categories, a
+          'TypeError' is raised.
 
      Each field is a 'gdb.Field' object, with some pre-defined
      attributes:
      'bitpos'
           This attribute is not available for 'enum' or 'static' (as in
           C++) fields.  The value is the position, counting in bits,
-          from the start of the containing type.
+          from the start of the containing type.  Note that, in a
+          dynamic type, the position of a field may not be constant.  In
+          this case, the value will be 'None'.  Also, a dynamic type may
+          have fields that do not appear in a corresponding concrete
+          type.
 
      'enumval'
           This attribute is only available for 'enum' fields, and its
@@ -2436,7 +5448,7 @@ of the 'Type.fields' method for a descri
           The type which contains this field.  This is an instance of
           'gdb.Type'.
 
- -- Function: Type.array (N1 [, N2])
+ -- Function: Type.array (n1 [, n2])
      Return a new 'gdb.Type' object which represents an array of this
      type.  If one argument is given, it is the inclusive upper bound of
      the array; in this case the lower bound is zero.  If two arguments
@@ -2444,7 +5456,7 @@ of the 'Type.fields' method for a descri
      the second argument is the upper bound of the array.  An array's
      length must not be negative, but the bounds can be.
 
- -- Function: Type.vector (N1 [, N2])
+ -- Function: Type.vector (n1 [, n2])
      Return a new 'gdb.Type' object which represents a vector of this
      type.  If one argument is given, it is the inclusive upper bound of
      the vector; in this case the lower bound is zero.  If two arguments
@@ -2607,19 +5619,43 @@ defined in the 'gdb' module:
      A function internal to GDB.  This is the type used to represent
      convenience functions.
 
+'gdb.TYPE_CODE_XMETHOD'
+     A method internal to GDB.  This is the type used to represent
+     xmethods (*note Writing an Xmethod::).
+
+'gdb.TYPE_CODE_FIXED_POINT'
+     A fixed-point number.
+
+'gdb.TYPE_CODE_NAMESPACE'
+     A Fortran namelist.
+
    Further support for types is provided in the 'gdb.types' Python
 module (*note gdb.types::).
 
 
 File: gdb.info,  Node: Pretty Printing API,  Next: Selecting Pretty-Printers,  Prev: Types In Python,  Up: Python API
 
-23.2.2.5 Pretty Printing API
+23.3.2.6 Pretty Printing API
 ............................
 
 A pretty-printer is just an object that holds a value and implements a
 specific interface, defined here.  An example output is provided (*note
 Pretty Printing::).
 
+   Because GDB did not document extensibility for pretty-printers, by
+default GDB will assume that only the basic pretty-printer methods may
+be available.  The basic methods are marked as such, below.
+
+   To allow extensibility, GDB provides the 'gdb.ValuePrinter' base
+class.  This class does not provide any attributes or behavior, but
+instead serves as a tag that can be recognized by GDB.  For such
+printers, GDB reserves all attributes starting with a lower-case letter.
+That is, in the future, GDB may add a new method or attribute to the
+pretty-printer protocol, and 'gdb.ValuePrinter'-based printers are
+expected to handle this gracefully.  A simple way to do this would be to
+use a leading underscore (or two, following the Python name-mangling
+scheme) to any attributes local to the implementation.
+
  -- Function: pretty_printer.children (self)
      GDB will call this method on a pretty-printer to compute the
      children of the pretty-printer's value.
@@ -2630,8 +5666,8 @@ Pretty Printing::).
      child; the second element is the child's value.  The value can be
      any Python object which is convertible to a GDB value.
 
-     This method is optional.  If it does not exist, GDB will act as
-     though the value has no children.
+     This is a basic method, and is optional.  If it does not exist, GDB
+     will act as though the value has no children.
 
      For efficiency, the 'children' method should lazily compute its
      results.  This will let GDB read as few elements as necessary, for
@@ -2648,8 +5684,8 @@ Pretty Printing::).
      consumer as a 'displayhint' attribute of the variable being
      printed.
 
-     This method is optional.  If it does exist, this method must return
-     a string or the special value 'None'.
+     This is a basic method, and is optional.  If it does exist, this
+     method must return a string or the special value 'None'.
 
      Some display hints are predefined by GDB:
 
@@ -2678,6 +5714,8 @@ Pretty Printing::).
      GDB will call this method to display the string representation of
      the value passed to the object's constructor.
 
+     This is a basic method, and is optional.
+
      When printing from the CLI, if the 'to_string' method exists, then
      GDB will prepend its result to the values returned by 'children'.
      Exactly how this formatting is done is dependent on the display
@@ -2703,6 +5741,20 @@ Pretty Printing::).
 
      If the result is not one of these types, an exception is raised.
 
+ -- Function: pretty_printer.num_children ()
+     This is not a basic method, so GDB will only ever call it for
+     objects derived from 'gdb.ValuePrinter'.
+
+     If available, this method should return the number of children.
+     'None' may be returned if the number can't readily be computed.
+
+ -- Function: pretty_printer.child (n)
+     This is not a basic method, so GDB will only ever call it for
+     objects derived from 'gdb.ValuePrinter'.
+
+     If available, this method should return the child value indicated
+     by N.  Indices start at zero.
+
    GDB provides a function which can be used to look up the default
 pretty-printer for a 'gdb.Value':
 
@@ -2711,10 +5763,24 @@ pretty-printer for a 'gdb.Value':
      pretty-printer for this value exists, then it is returned.  If no
      such printer exists, then this returns 'None'.
 
+   Normally, a pretty-printer can respect the user's print settings
+(including temporarily applied settings, such as '/x') simply by calling
+'Value.format_string' (*note Values From Inferior::).  However, these
+settings can also be queried directly:
+
+ -- Function: gdb.print_options ()
+     Return a dictionary whose keys are the valid keywords that can be
+     given to 'Value.format_string', and whose values are the user's
+     settings.  During a 'print' or other operation, the values will
+     reflect any flags that are temporarily in effect.
+
+          (gdb) python print (gdb.print_options ()['max_elements'])
+          200
+
 
 File: gdb.info,  Node: Selecting Pretty-Printers,  Next: Writing a Pretty-Printer,  Prev: Pretty Printing API,  Up: Python API
 
-23.2.2.6 Selecting Pretty-Printers
+23.3.2.7 Selecting Pretty-Printers
 ..................................
 
 GDB provides several ways to register a pretty-printer: globally, per
@@ -2769,7 +5835,7 @@ otherwise the printer is enabled.
 
 File: gdb.info,  Node: Writing a Pretty-Printer,  Next: Type Printing API,  Prev: Selecting Pretty-Printers,  Up: Python API
 
-23.2.2.7 Writing a Pretty-Printer
+23.3.2.8 Writing a Pretty-Printer
 .................................
 
 A pretty-printer consists of two parts: a lookup function to detect if
@@ -2777,16 +5843,17 @@ the type is supported, and the printer i
 
    Here is an example showing how a 'std::string' printer might be
 written.  *Note Pretty Printing API::, for details on the API this class
-must provide.
+must provide.  Note that this example uses the 'gdb.ValuePrinter' base
+class, and is careful to use a leading underscore for its local state.
 
-     class StdStringPrinter(object):
+     class StdStringPrinter(gdb.ValuePrinter):
          "Print a std::string"
 
          def __init__(self, val):
-             self.val = val
+             self.__val = val
 
          def to_string(self):
-             return self.val['_M_dataplus']['_M_p']
+             return self.__val['_M_dataplus']['_M_p']
 
          def display_hint(self):
              return 'string'
@@ -2796,7 +5863,7 @@ example above might be written.
 
      def str_lookup_function(val):
          lookup_tag = val.type.tag
-         if lookup_tag == None:
+         if lookup_tag is None:
              return None
          regex = re.compile("^std::basic_string<char,.*>$")
          if regex.match(lookup_tag):
@@ -2866,25 +5933,25 @@ multiple types.
 
    Here are the printers:
 
-     class fooPrinter:
+     class fooPrinter(gdb.ValuePrinter):
          """Print a foo object."""
 
          def __init__(self, val):
-             self.val = val
+             self.__val = val
 
          def to_string(self):
-             return ("a=<" + str(self.val["a"]) +
-                     "> b=<" + str(self.val["b"]) + ">")
+             return ("a=<" + str(self.__val["a"]) +
+                     "> b=<" + str(self.__val["b"]) + ">")
 
-     class barPrinter:
+     class barPrinter(gdb.ValuePrinter):
          """Print a bar object."""
 
          def __init__(self, val):
-             self.val = val
+             self.__val = val
 
          def to_string(self):
-             return ("x=<" + str(self.val["x"]) +
-                     "> y=<" + str(self.val["y"]) + ">")
+             return ("x=<" + str(self.__val["x"]) +
+                     "> y=<" + str(self.__val["y"]) + ">")
 
    This example doesn't need a lookup function, that is handled by the
 'gdb.printing' module.  Instead a function is provided to build up the
@@ -2919,7 +5986,7 @@ corresponding output of 'info pretty-pri
 
 File: gdb.info,  Node: Type Printing API,  Next: Frame Filter API,  Prev: Writing a Pretty-Printer,  Up: Python API
 
-23.2.2.8 Type Printing API
+23.3.2.9 Type Printing API
 ..........................
 
 GDB provides a way for Python code to customize type display.  This is
@@ -2974,8 +6041,8 @@ holding information that could become st
 
 File: gdb.info,  Node: Frame Filter API,  Next: Frame Decorator API,  Prev: Type Printing API,  Up: Python API
 
-23.2.2.9 Filtering Frames
-.........................
+23.3.2.10 Filtering Frames
+..........................
 
 Frame filters are Python objects that manipulate the visibility of a
 frame or frames when a backtrace (*note Backtrace::) is printed by GDB.
@@ -3117,7 +6184,7 @@ implement, defined here:
 
 File: gdb.info,  Node: Frame Decorator API,  Next: Writing a Frame Filter,  Prev: Frame Filter API,  Up: Python API
 
-23.2.2.10 Decorating Frames
+23.3.2.11 Decorating Frames
 ...........................
 
 Frame decorators are sister objects to frame filters (*note Frame Filter
@@ -3156,8 +6223,8 @@ and extend this object, and only to over
      must contain the frames that are being elided wrapped in a suitable
      frame decorator.  If no frames are being elided this function may
      return an empty iterable, or 'None'.  Elided frames are indented
-     from normal frames in a 'CLI' backtrace, or in the case of
-     'GDB/MI', are placed in the 'children' field of the eliding frame.
+     from normal frames in a 'CLI' backtrace, or in the case of GDB/MI,
+     are placed in the 'children' field of the eliding frame.
 
      It is the frame filter's task to also filter out the elided frames
      from the source iterator.  This will avoid printing the frame
@@ -3212,7 +6279,7 @@ and extend this object, and only to over
      this frame.  This iterable must contain objects that implement two
      methods, described here.
 
-     This object must implement a 'argument' method which takes a single
+     This object must implement a 'symbol' method which takes a single
      'self' parameter and must return a 'gdb.Symbol' (*note Symbols In
      Python::), or a Python string.  The object must also implement a
      'value' method which takes a single 'self' parameter and must
@@ -3300,7 +6367,7 @@ and extend this object, and only to over
 
 File: gdb.info,  Node: Writing a Frame Filter,  Next: Unwinding Frames in Python,  Prev: Frame Decorator API,  Up: Python API
 
-23.2.2.11 Writing a Frame Filter
+23.3.2.12 Writing a Frame Filter
 ................................
 
 There are three basic elements that a frame filter must implement: it
@@ -3443,7 +6510,7 @@ one.
              super(InlinedFrameDecorator, self).__init__(fobj)
 
          def function(self):
-             frame = fobj.inferior_frame()
+             frame = self.inferior_frame()
              name = str(frame.name())
 
              if frame.type() == gdb.INLINE_FRAME:
@@ -3561,7 +6628,7 @@ frame, and also show the hierarchical re
 
 File: gdb.info,  Node: Unwinding Frames in Python,  Next: Xmethods In Python,  Prev: Writing a Frame Filter,  Up: Python API
 
-23.2.2.12 Unwinding Frames in Python
+23.3.2.13 Unwinding Frames in Python
 ....................................
 
 In GDB terminology "unwinding" is the process of finding the previous
@@ -3590,8 +6657,8 @@ them.
 
    An unwinder should do as little work as possible.  Some otherwise
 innocuous operations can cause problems (even crashes, as this code is
-not not well-hardened yet).  For example, making an inferior call from
-an unwinder is unadvisable, as an inferior call will reset GDB's stack
+not well-hardened yet).  For example, making an inferior call from an
+unwinder is unadvisable, as an inferior call will reset GDB's stack
 unwinding process, potentially causing re-entrant unwinding.
 
 Unwinder Input
@@ -3600,13 +6667,12 @@ Unwinder Input
 An object passed to an unwinder (a 'gdb.PendingFrame' instance) provides
 a method to read frame's registers:
 
- -- Function: PendingFrame.read_register (reg)
-     This method returns the contents of the register REG in the frame
-     as a 'gdb.Value' object.  REG can be either a register number or a
-     register name; the values are platform-specific.  They are usually
-     found in the corresponding 'PLATFORM-tdep.h' file in the GDB source
-     tree.  If REG does not name a register for the current
-     architecture, this method will throw an exception.
+ -- Function: PendingFrame.read_register (register)
+     This method returns the contents of REGISTER in the frame as a
+     'gdb.Value' object.  For a description of the acceptable values of
+     REGISTER see *note Frame.read_register: gdbpy_frame_read_register.
+     If REGISTER does not name a register for the current architecture,
+     this method will throw an exception.
 
      Note that this method will always return a 'gdb.Value' for a valid
      register name.  This does not mean that the value will be valid.
@@ -3627,9 +6693,9 @@ instance to be returned to GDB:
 
  -- Function: PendingFrame.create_unwind_info (frame_id)
      Returns a new 'gdb.UnwindInfo' instance identified by given
-     FRAME_ID.  The argument is used to build GDB's frame ID using one
-     of functions provided by GDB.  FRAME_ID's attributes determine
-     which function will be used, as follows:
+     FRAME_ID.  The FRAME_ID is used internally by GDB to identify the
+     frames within the current thread's stack.  The attributes of
+     FRAME_ID determine what type of frame is created within GDB:
 
      'sp, pc'
           The frame is identified by the given stack address and PC. The
@@ -3656,7 +6722,53 @@ instance to be returned to GDB:
           this frame.  Inside gdb, this is called a "wild frame".  You
           will never need this.
 
-     Each attribute value should be an instance of 'gdb.Value'.
+     Each attribute value should either be an instance of 'gdb.Value' or
+     an integer.
+
+     A helper class is provided in the 'gdb.unwinder' module that can be
+     used to represent a frame-id (*note gdb.unwinder.FrameId::).
+
+ -- Function: PendingFrame.architecture ()
+     Return the 'gdb.Architecture' (*note Architectures In Python::) for
+     this 'gdb.PendingFrame'.  This represents the architecture of the
+     particular frame being unwound.
+
+ -- Function: PendingFrame.level ()
+     Return an integer, the stack frame level for this frame.  *Note
+     Stack Frames: Frames.
+
+ -- Function: PendingFrame.name ()
+     Returns the function name of this pending frame, or 'None' if it
+     can't be obtained.
+
+ -- Function: PendingFrame.is_valid ()
+     Returns true if the 'gdb.PendingFrame' object is valid, false if
+     not.  A pending frame object becomes invalid when the call to the
+     unwinder, for which the pending frame was created, returns.
+
+     All 'gdb.PendingFrame' methods, except this one, will raise an
+     exception if the pending frame object is invalid at the time the
+     method is called.
+
+ -- Function: PendingFrame.pc ()
+     Returns the pending frame's resume address.
+
+ -- Function: PendingFrame.block ()
+     Return the pending frame's code block (*note Blocks In Python::).
+     If the frame does not have a block - for example, if there is no
+     debugging information for the code in question - then this will
+     raise a 'RuntimeError' exception.
+
+ -- Function: PendingFrame.function ()
+     Return the symbol for the function corresponding to this pending
+     frame.  *Note Symbols In Python::.
+
+ -- Function: PendingFrame.find_sal ()
+     Return the pending frame's symtab and line object (*note Symbol
+     Tables In Python::).
+
+ -- Function: PendingFrame.language ()
+     Return the language of this frame, as a string, or None.
 
 Unwinder Output: UnwindInfo
 ---------------------------
@@ -3665,78 +6777,155 @@ Use 'PendingFrame.create_unwind_info' me
 'gdb.UnwindInfo' instance.  Use the following method to specify caller
 registers that have been saved in this frame:
 
- -- Function: gdb.UnwindInfo.add_saved_register (reg, value)
-     REG identifies the register.  It can be a number or a name, just as
-     for the 'PendingFrame.read_register' method above.  VALUE is a
-     register value (a 'gdb.Value' object).
+ -- Function: gdb.UnwindInfo.add_saved_register (register, value)
+     REGISTER identifies the register, for a description of the
+     acceptable values see *note Frame.read_register:
+     gdbpy_frame_read_register.  VALUE is a register value (a
+     'gdb.Value' object).
 
-Unwinder Skeleton Code
-----------------------
+The 'gdb.unwinder' Module
+-------------------------
+
+GDB comes with a 'gdb.unwinder' module which contains the following
+classes:
+
+ -- class: gdb.unwinder.Unwinder
+     The 'Unwinder' class is a base class from which user created
+     unwinders can derive, though it is not required that unwinders
+     derive from this class, so long as any user created unwinder has
+     the required 'name' and 'enabled' attributes.
+
+      -- Function: gdb.unwinder.Unwinder.__init__(name)
+          The NAME is a string used to reference this unwinder within
+          some GDB commands (*note Managing Registered Unwinders::).
+
+      -- Variable: gdb.unwinder.name
+          A read-only attribute which is a string, the name of this
+          unwinder.
+
+      -- Variable: gdb.unwinder.enabled
+          A modifiable attribute containing a boolean; when 'True', the
+          unwinder is enabled, and will be used by GDB.  When 'False',
+          the unwinder has been disabled, and will not be used.
+
+ -- class: gdb.unwinder.FrameId
+     This is a class suitable for being used as the frame-id when
+     calling 'gdb.PendingFrame.create_unwind_info'.  It is not required
+     to use this class, any class with the required attribute (*note
+     gdb.PendingFrame.create_unwind_info::) will be accepted, but in
+     most cases this class will be sufficient.
+
+     'gdb.unwinder.FrameId' has the following method:
+
+      -- Function: gdb.unwinder.FrameId.__init__(sp, pc, special =
+               'None')
+          The SP and PC arguments are required and should be either a
+          'gdb.Value' object, or an integer.
+
+          The SPECIAL argument is optional; if specified, it should be a
+          'gdb.Value' object, or an integer.
 
-GDB comes with the module containing the base 'Unwinder' class.  Derive
-your unwinder class from it and structure the code as follows:
+     'gdb.unwinder.FrameId' has the following read-only attributes:
 
-     from gdb.unwinders import Unwinder
+      -- Variable: gdb.unwinder.sp
+          The SP value passed to the constructor.
 
-     class FrameId(object):
-         def __init__(self, sp, pc):
-             self.sp = sp
-             self.pc = pc
+      -- Variable: gdb.unwinder.pc
+          The PC value passed to the constructor.
 
+      -- Variable: gdb.unwinder.special
+          The SPECIAL value passed to the constructor, or 'None' if no
+          such value was passed.
+
+Registering an Unwinder
+-----------------------
+
+Object files and program spaces can have unwinders registered with them.
+In addition, you can register unwinders globally.
+
+   The 'gdb.unwinders' module provides the function to register an
+unwinder:
+
+ -- Function: gdb.unwinder.register_unwinder (locus, unwinder,
+          replace=False)
+     LOCUS specifies to which unwinder list to prepend the UNWINDER.  It
+     can be either an object file (*note Objfiles In Python::), a
+     program space (*note Progspaces In Python::), or 'None', in which
+     case the unwinder is registered globally.  The newly added UNWINDER
+     will be called before any other unwinder from the same locus.  Two
+     unwinders in the same locus cannot have the same name.  An attempt
+     to add an unwinder with an already existing name raises an
+     exception unless REPLACE is 'True', in which case the old unwinder
+     is deleted and the new unwinder is registered in its place.
+
+     GDB first calls the unwinders from all the object files in no
+     particular order, then the unwinders from the current program
+     space, then the globally registered unwinders, and finally the
+     unwinders builtin to GDB.
+
+Unwinder Skeleton Code
+----------------------
+
+Here is an example of how to structure a user created unwinder:
+
+     from gdb.unwinder import Unwinder, FrameId
 
      class MyUnwinder(Unwinder):
-         def __init__(....):
-             super(MyUnwinder, self).__init___(<expects unwinder name argument>)
+         def __init__(self):
+             super().__init___("MyUnwinder_Name")
 
-         def __call__(pending_frame):
+         def __call__(self, pending_frame):
              if not <we recognize frame>:
                  return None
-             # Create UnwindInfo.  Usually the frame is identified by the stack
-             # pointer and the program counter.
-             sp = pending_frame.read_register(<SP number>)
-             pc = pending_frame.read_register(<PC number>)
+
+             # Create a FrameID.  Usually the frame is identified by a
+             # stack pointer and the function address.
+             sp = ... compute a stack address ...
+             pc = ... compute function address ...
              unwind_info = pending_frame.create_unwind_info(FrameId(sp, pc))
 
              # Find the values of the registers in the caller's frame and
              # save them in the result:
-             unwind_info.add_saved_register(<register>, <value>)
+             unwind_info.add_saved_register(<register-number>, <register-value>)
              ....
 
              # Return the result:
              return unwind_info
 
+     gdb.unwinder.register_unwinder(<locus>, MyUnwinder(), <replace>)
 
-Registering a Unwinder
-----------------------
-
-An object file, a program space, and the GDB proper can have unwinders
-registered with it.
-
-   The 'gdb.unwinders' module provides the function to register a
-unwinder:
+Managing Registered Unwinders
+-----------------------------
 
- -- Function: gdb.unwinder.register_unwinder (locus, unwinder,
-          replace=False)
-     LOCUS is specifies an object file or a program space to which
-     UNWINDER is added.  Passing 'None' or 'gdb' adds UNWINDER to the
-     GDB's global unwinder list.  The newly added UNWINDER will be
-     called before any other unwinder from the same locus.  Two
-     unwinders in the same locus cannot have the same name.  An attempt
-     to add a unwinder with already existing name raises an exception
-     unless REPLACE is 'True', in which case the old unwinder is
-     deleted.
+GDB defines 3 commands to manage registered unwinders.  These are:
 
-Unwinder Precedence
--------------------
-
-GDB first calls the unwinders from all the object files in no particular
-order, then the unwinders from the current program space, and finally
-the unwinders from GDB.
+'info unwinder [ LOCUS [ NAME-REGEXP ] ]'
+     Lists all registered unwinders.  Arguments LOCUS and NAME-REGEXP
+     are both optional and can be used to filter which unwinders are
+     listed.
+
+     The LOCUS argument should be either 'global', 'progspace', or the
+     name of an object file.  Only unwinders registered for the
+     specified locus will be listed.
+
+     The NAME-REGEXP is a regular expression used to match against
+     unwinder names.  When trying to match against unwinder names that
+     include a string enclose NAME-REGEXP in quotes.
+'disable unwinder [ LOCUS [ NAME-REGEXP ] ]'
+     The LOCUS and NAME-REGEXP are interpreted as in 'info unwinder'
+     above, but instead of listing the matching unwinders, all of the
+     matching unwinders are disabled.  The 'enabled' field of each
+     matching unwinder is set to 'False'.
+'enable unwinder [ LOCUS [ NAME-REGEXP ] ]'
+     The LOCUS and NAME-REGEXP are interpreted as in 'info unwinder'
+     above, but instead of listing the matching unwinders, all of the
+     matching unwinders are enabled.  The 'enabled' field of each
+     matching unwinder is set to 'True'.
 
 
 File: gdb.info,  Node: Xmethods In Python,  Next: Xmethod API,  Prev: Unwinding Frames in Python,  Up: Python API
 
-23.2.2.13 Xmethods In Python
+23.3.2.14 Xmethods In Python
 ............................
 
 "Xmethods" are additional methods or replacements for existing methods
@@ -3787,7 +6976,7 @@ Writing an Xmethod::, for implementing x
 
 File: gdb.info,  Node: Xmethod API,  Next: Writing an Xmethod,  Prev: Xmethods In Python,  Up: Python API
 
-23.2.2.14 Xmethod API
+23.3.2.15 Xmethod API
 .....................
 
 The GDB Python API provides classes, interfaces and functions to
@@ -3876,7 +7065,7 @@ using the following function defined in
 
 File: gdb.info,  Node: Writing an Xmethod,  Next: Inferiors In Python,  Prev: Xmethod API,  Up: Python API
 
-23.2.2.15 Writing an Xmethod
+23.3.2.16 Writing an Xmethod
 ............................
 
 Implementing xmethods in Python will require implementing xmethod
@@ -3991,8 +7180,8 @@ follows:
      MyClass obj(5);
 
 then, after loading the Python script defining the xmethod matchers and
-workers into 'GDBN', invoking the method 'geta' or using the operator
-'+' on 'obj' will invoke the xmethods defined above:
+workers into GDB, invoking the method 'geta' or using the operator '+'
+on 'obj' will invoke the xmethods defined above:
 
      (gdb) p obj.geta()
      $1 = 5
@@ -4057,13 +7246,13 @@ itself.
 
 File: gdb.info,  Node: Inferiors In Python,  Next: Events In Python,  Prev: Writing an Xmethod,  Up: Python API
 
-23.2.2.16 Inferiors In Python
+23.3.2.17 Inferiors In Python
 .............................
 
 Programs which are being run under GDB are called inferiors (*note
-Inferiors and Programs::).  Python scripts can access information about
-and manipulate inferiors controlled by GDB via objects of the
-'gdb.Inferior' class.
+Inferiors Connections and Programs::).  Python scripts can access
+information about and manipulate inferiors controlled by GDB via objects
+of the 'gdb.Inferior' class.
 
    The following inferior-related functions are available in the 'gdb'
 module:
@@ -4077,7 +7266,20 @@ module:
    A 'gdb.Inferior' object has the following attributes:
 
  -- Variable: Inferior.num
-     ID of inferior, as assigned by GDB.
+     ID of inferior, as assigned by GDB.  You can use this to make
+     Python breakpoints inferior-specific, for example (*note The
+     Breakpoint.inferior attribute: python_breakpoint_inferior.).
+
+ -- Variable: Inferior.connection
+     The 'gdb.TargetConnection' for this inferior (*note Connections In
+     Python::), or 'None' if this inferior has no connection.
+
+ -- Variable: Inferior.connection_num
+     ID of inferior's connection as assigned by GDB, or None if the
+     inferior is not connected to a target.  *Note Inferiors Connections
+     and Programs::.  This is equivalent to
+     'gdb.Inferior.connection.num' in the case where
+     'gdb.Inferior.connection' is not 'None'.
 
  -- Variable: Inferior.pid
      Process ID of the inferior, as assigned by the underlying operating
@@ -4087,9 +7289,27 @@ module:
      Boolean signaling whether the inferior was created using 'attach',
      or started by GDB itself.
 
+ -- Variable: Inferior.main_name
+     A string holding the name of this inferior's "main" function, if it
+     can be determined.  If the name of main is not known, this is
+     'None'.
+
  -- Variable: Inferior.progspace
      The inferior's program space.  *Note Progspaces In Python::.
 
+ -- Variable: Inferior.arguments
+     The inferior's command line arguments, if known.  This corresponds
+     to the 'set args' and 'show args' commands.  *Note Arguments::.
+
+     When accessed, the value is a string holding all the arguments.
+     The contents are quoted as they would be when passed to the shell.
+     If there are no arguments, the value is 'None'.
+
+     Either a string or a sequence of strings can be assigned to this
+     attribute.  When a string is assigned, it is assumed to have any
+     necessary quoting for the shell; when a sequence is assigned, the
+     quoting is applied by GDB.
+
    A 'gdb.Inferior' object has the following methods:
 
  -- Function: Inferior.is_valid ()
@@ -4113,10 +7333,9 @@ module:
 
  -- Function: Inferior.read_memory (address, length)
      Read LENGTH addressable memory units from the inferior, starting at
-     ADDRESS.  Returns a buffer object, which behaves much like an array
-     or a string.  It can be modified and given to the
-     'Inferior.write_memory' function.  In Python 3, the return value is
-     a 'memoryview' object.
+     ADDRESS.  Returns a 'memoryview' object, which behaves much like an
+     array or a string.  It can be modified and given to the
+     'Inferior.write_memory' function.
 
  -- Function: Inferior.write_memory (address, buffer [, length])
      Write the contents of BUFFER to the inferior, starting at ADDRESS.
@@ -4143,3347 +7362,55 @@ module:
      functionality, but use of 'Inferior.thread_from_thread_handle' is
      deprecated.
 
-
-File: gdb.info,  Node: Events In Python,  Next: Threads In Python,  Prev: Inferiors In Python,  Up: Python API
-
-23.2.2.17 Events In Python
-..........................
-
-GDB provides a general event facility so that Python code can be
-notified of various state changes, particularly changes that occur in
-the inferior.
-
-   An "event" is just an object that describes some state change.  The
-type of the object and its attributes will vary depending on the details
-of the change.  All the existing events are described below.
-
-   In order to be notified of an event, you must register an event
-handler with an "event registry".  An event registry is an object in the
-'gdb.events' module which dispatches particular events.  A registry
-provides methods to register and unregister event handlers:
-
- -- Function: EventRegistry.connect (object)
-     Add the given callable OBJECT to the registry.  This object will be
-     called when an event corresponding to this registry occurs.
-
- -- Function: EventRegistry.disconnect (object)
-     Remove the given OBJECT from the registry.  Once removed, the
-     object will no longer receive notifications of events.
-
-   Here is an example:
-
-     def exit_handler (event):
-         print "event type: exit"
-         print "exit code: %d" % (event.exit_code)
-
-     gdb.events.exited.connect (exit_handler)
-
-   In the above example we connect our handler 'exit_handler' to the
-registry 'events.exited'.  Once connected, 'exit_handler' gets called
-when the inferior exits.  The argument "event" in this example is of
-type 'gdb.ExitedEvent'.  As you can see in the example the 'ExitedEvent'
-object has an attribute which indicates the exit code of the inferior.
-
-   The following is a listing of the event registries that are available
-and details of the events they emit:
-
-'events.cont'
-     Emits 'gdb.ThreadEvent'.
-
-     Some events can be thread specific when GDB is running in non-stop
-     mode.  When represented in Python, these events all extend
-     'gdb.ThreadEvent'.  Note, this event is not emitted directly;
-     instead, events which are emitted by this or other modules might
-     extend this event.  Examples of these events are
-     'gdb.BreakpointEvent' and 'gdb.ContinueEvent'.
-
-      -- Variable: ThreadEvent.inferior_thread
-          In non-stop mode this attribute will be set to the specific
-          thread which was involved in the emitted event.  Otherwise, it
-          will be set to 'None'.
-
-     Emits 'gdb.ContinueEvent' which extends 'gdb.ThreadEvent'.
-
-     This event indicates that the inferior has been continued after a
-     stop.  For inherited attribute refer to 'gdb.ThreadEvent' above.
-
-'events.exited'
-     Emits 'events.ExitedEvent' which indicates that the inferior has
-     exited.  'events.ExitedEvent' has two attributes:
-      -- Variable: ExitedEvent.exit_code
-          An integer representing the exit code, if available, which the
-          inferior has returned.  (The exit code could be unavailable
-          if, for example, GDB detaches from the inferior.)  If the exit
-          code is unavailable, the attribute does not exist.
-      -- Variable: ExitedEvent.inferior
-          A reference to the inferior which triggered the 'exited'
-          event.
-
-'events.stop'
-     Emits 'gdb.StopEvent' which extends 'gdb.ThreadEvent'.
-
-     Indicates that the inferior has stopped.  All events emitted by
-     this registry extend StopEvent.  As a child of 'gdb.ThreadEvent',
-     'gdb.StopEvent' will indicate the stopped thread when GDB is
-     running in non-stop mode.  Refer to 'gdb.ThreadEvent' above for
-     more details.
-
-     Emits 'gdb.SignalEvent' which extends 'gdb.StopEvent'.
-
-     This event indicates that the inferior or one of its threads has
-     received as signal.  'gdb.SignalEvent' has the following
-     attributes:
-
-      -- Variable: SignalEvent.stop_signal
-          A string representing the signal received by the inferior.  A
-          list of possible signal values can be obtained by running the
-          command 'info signals' in the GDB command prompt.
-
-     Also emits 'gdb.BreakpointEvent' which extends 'gdb.StopEvent'.
-
-     'gdb.BreakpointEvent' event indicates that one or more breakpoints
-     have been hit, and has the following attributes:
-
-      -- Variable: BreakpointEvent.breakpoints
-          A sequence containing references to all the breakpoints (type
-          'gdb.Breakpoint') that were hit.  *Note Breakpoints In
-          Python::, for details of the 'gdb.Breakpoint' object.
-      -- Variable: BreakpointEvent.breakpoint
-          A reference to the first breakpoint that was hit.  This
-          function is maintained for backward compatibility and is now
-          deprecated in favor of the 'gdb.BreakpointEvent.breakpoints'
-          attribute.
-
-'events.new_objfile'
-     Emits 'gdb.NewObjFileEvent' which indicates that a new object file
-     has been loaded by GDB.  'gdb.NewObjFileEvent' has one attribute:
-
-      -- Variable: NewObjFileEvent.new_objfile
-          A reference to the object file ('gdb.Objfile') which has been
-          loaded.  *Note Objfiles In Python::, for details of the
-          'gdb.Objfile' object.
-
-'events.clear_objfiles'
-     Emits 'gdb.ClearObjFilesEvent' which indicates that the list of
-     object files for a program space has been reset.
-     'gdb.ClearObjFilesEvent' has one attribute:
-
-      -- Variable: ClearObjFilesEvent.progspace
-          A reference to the program space ('gdb.Progspace') whose
-          objfile list has been cleared.  *Note Progspaces In Python::.
-
-'events.inferior_call'
-     Emits events just before and after a function in the inferior is
-     called by GDB.  Before an inferior call, this emits an event of
-     type 'gdb.InferiorCallPreEvent', and after an inferior call, this
-     emits an event of type 'gdb.InferiorCallPostEvent'.
-
-     'gdb.InferiorCallPreEvent'
-          Indicates that a function in the inferior is about to be
-          called.
-
-           -- Variable: InferiorCallPreEvent.ptid
-               The thread in which the call will be run.
-
-           -- Variable: InferiorCallPreEvent.address
-               The location of the function to be called.
-
-     'gdb.InferiorCallPostEvent'
-          Indicates that a function in the inferior has just been
-          called.
-
-           -- Variable: InferiorCallPostEvent.ptid
-               The thread in which the call was run.
-
-           -- Variable: InferiorCallPostEvent.address
-               The location of the function that was called.
-
-'events.memory_changed'
-     Emits 'gdb.MemoryChangedEvent' which indicates that the memory of
-     the inferior has been modified by the GDB user, for instance via a
-     command like 'set *addr = value'.  The event has the following
-     attributes:
-
-      -- Variable: MemoryChangedEvent.address
-          The start address of the changed region.
-
-      -- Variable: MemoryChangedEvent.length
-          Length in bytes of the changed region.
-
-'events.register_changed'
-     Emits 'gdb.RegisterChangedEvent' which indicates that a register in
-     the inferior has been modified by the GDB user.
-
-      -- Variable: RegisterChangedEvent.frame
-          A gdb.Frame object representing the frame in which the
-          register was modified.
-      -- Variable: RegisterChangedEvent.regnum
-          Denotes which register was modified.
-
-'events.breakpoint_created'
-     This is emitted when a new breakpoint has been created.  The
-     argument that is passed is the new 'gdb.Breakpoint' object.
-
-'events.breakpoint_modified'
-     This is emitted when a breakpoint has been modified in some way.
-     The argument that is passed is the new 'gdb.Breakpoint' object.
-
-'events.breakpoint_deleted'
-     This is emitted when a breakpoint has been deleted.  The argument
-     that is passed is the 'gdb.Breakpoint' object.  When this event is
-     emitted, the 'gdb.Breakpoint' object will already be in its invalid
-     state; that is, the 'is_valid' method will return 'False'.
-
-'events.before_prompt'
-     This event carries no payload.  It is emitted each time GDB
-     presents a prompt to the user.
-
-'events.new_inferior'
-     This is emitted when a new inferior is created.  Note that the
-     inferior is not necessarily running; in fact, it may not even have
-     an associated executable.
-
-     The event is of type 'gdb.NewInferiorEvent'.  This has a single
-     attribute:
-
-      -- Variable: NewInferiorEvent.inferior
-          The new inferior, a 'gdb.Inferior' object.
-
-'events.inferior_deleted'
-     This is emitted when an inferior has been deleted.  Note that this
-     is not the same as process exit; it is notified when the inferior
-     itself is removed, say via 'remove-inferiors'.
-
-     The event is of type 'gdb.InferiorDeletedEvent'.  This has a single
-     attribute:
-
-      -- Variable: NewInferiorEvent.inferior
-          The inferior that is being removed, a 'gdb.Inferior' object.
-
-'events.new_thread'
-     This is emitted when GDB notices a new thread.  The event is of
-     type 'gdb.NewThreadEvent', which extends 'gdb.ThreadEvent'.  This
-     has a single attribute:
-
-      -- Variable: NewThreadEvent.inferior_thread
-          The new thread.
-
-
-File: gdb.info,  Node: Threads In Python,  Next: Recordings In Python,  Prev: Events In Python,  Up: Python API
-
-23.2.2.18 Threads In Python
-...........................
-
-Python scripts can access information about, and manipulate inferior
-threads controlled by GDB, via objects of the 'gdb.InferiorThread'
-class.
-
-   The following thread-related functions are available in the 'gdb'
-module:
-
- -- Function: gdb.selected_thread ()
-     This function returns the thread object for the selected thread.
-     If there is no selected thread, this will return 'None'.
-
-   To get the list of threads for an inferior, use the
-'Inferior.threads()' method.  *Note Inferiors In Python::
-
-   A 'gdb.InferiorThread' object has the following attributes:
-
- -- Variable: InferiorThread.name
-     The name of the thread.  If the user specified a name using 'thread
-     name', then this returns that name.  Otherwise, if an OS-supplied
-     name is available, then it is returned.  Otherwise, this returns
-     'None'.
-
-     This attribute can be assigned to.  The new value must be a string
-     object, which sets the new name, or 'None', which removes any
-     user-specified thread name.
-
- -- Variable: InferiorThread.num
-     The per-inferior number of the thread, as assigned by GDB.
-
- -- Variable: InferiorThread.global_num
-     The global ID of the thread, as assigned by GDB. You can use this
-     to make Python breakpoints thread-specific, for example (*note The
-     Breakpoint.thread attribute: python_breakpoint_thread.).
-
- -- Variable: InferiorThread.ptid
-     ID of the thread, as assigned by the operating system.  This
-     attribute is a tuple containing three integers.  The first is the
-     Process ID (PID); the second is the Lightweight Process ID (LWPID),
-     and the third is the Thread ID (TID). Either the LWPID or TID may
-     be 0, which indicates that the operating system does not use that
-     identifier.
-
- -- Variable: InferiorThread.inferior
-     The inferior this thread belongs to.  This attribute is represented
-     as a 'gdb.Inferior' object.  This attribute is not writable.
-
-   A 'gdb.InferiorThread' object has the following methods:
-
- -- Function: InferiorThread.is_valid ()
-     Returns 'True' if the 'gdb.InferiorThread' object is valid, 'False'
-     if not.  A 'gdb.InferiorThread' object will become invalid if the
-     thread exits, or the inferior that the thread belongs is deleted.
-     All other 'gdb.InferiorThread' methods will throw an exception if
-     it is invalid at the time the method is called.
-
- -- Function: InferiorThread.switch ()
-     This changes GDB's currently selected thread to the one represented
-     by this object.
-
- -- Function: InferiorThread.is_stopped ()
-     Return a Boolean indicating whether the thread is stopped.
-
- -- Function: InferiorThread.is_running ()
-     Return a Boolean indicating whether the thread is running.
-
- -- Function: InferiorThread.is_exited ()
-     Return a Boolean indicating whether the thread is exited.
-
- -- Function: InferiorThread.handle ()
-     Return the thread object's handle, represented as a Python 'bytes'
-     object.  A 'gdb.Value' representation of the handle may be
-     constructed via 'gdb.Value(bufobj, type)' where BUFOBJ is the
-     Python 'bytes' representation of the handle and TYPE is a
-     'gdb.Type' for the handle type.
-
-
-File: gdb.info,  Node: Recordings In Python,  Next: Commands In Python,  Prev: Threads In Python,  Up: Python API
-
-23.2.2.19 Recordings In Python
-..............................
-
-The following recordings-related functions (*note Process Record and
-Replay::) are available in the 'gdb' module:
-
- -- Function: gdb.start_recording ([method], [format])
-     Start a recording using the given METHOD and FORMAT.  If no FORMAT
-     is given, the default format for the recording method is used.  If
-     no METHOD is given, the default method will be used.  Returns a
-     'gdb.Record' object on success.  Throw an exception on failure.
-
-     The following strings can be passed as METHOD:
-
-        * '"full"'
-        * '"btrace"': Possible values for FORMAT: '"pt"', '"bts"' or
-          leave out for default format.
-
- -- Function: gdb.current_recording ()
-     Access a currently running recording.  Return a 'gdb.Record' object
-     on success.  Return 'None' if no recording is currently active.
-
- -- Function: gdb.stop_recording ()
-     Stop the current recording.  Throw an exception if no recording is
-     currently active.  All record objects become invalid after this
-     call.
-
-   A 'gdb.Record' object has the following attributes:
-
- -- Variable: Record.method
-     A string with the current recording method, e.g. 'full' or
-     'btrace'.
-
- -- Variable: Record.format
-     A string with the current recording format, e.g. 'bt', 'pts' or
-     'None'.
-
- -- Variable: Record.begin
-     A method specific instruction object representing the first
-     instruction in this recording.
-
- -- Variable: Record.end
-     A method specific instruction object representing the current
-     instruction, that is not actually part of the recording.
-
- -- Variable: Record.replay_position
-     The instruction representing the current replay position.  If there
-     is no replay active, this will be 'None'.
-
- -- Variable: Record.instruction_history
-     A list with all recorded instructions.
-
- -- Variable: Record.function_call_history
-     A list with all recorded function call segments.
-
-   A 'gdb.Record' object has the following methods:
-
- -- Function: Record.goto (instruction)
-     Move the replay position to the given INSTRUCTION.
-
-   The common 'gdb.Instruction' class that recording method specific
-instruction objects inherit from, has the following attributes:
-
- -- Variable: Instruction.pc
-     An integer representing this instruction's address.
-
- -- Variable: Instruction.data
-     A buffer with the raw instruction data.  In Python 3, the return
-     value is a 'memoryview' object.
-
- -- Variable: Instruction.decoded
-     A human readable string with the disassembled instruction.
-
- -- Variable: Instruction.size
-     The size of the instruction in bytes.
-
-   Additionally 'gdb.RecordInstruction' has the following attributes:
-
- -- Variable: RecordInstruction.number
-     An integer identifying this instruction.  'number' corresponds to
-     the numbers seen in 'record instruction-history' (*note Process
-     Record and Replay::).
-
- -- Variable: RecordInstruction.sal
-     A 'gdb.Symtab_and_line' object representing the associated symtab
-     and line of this instruction.  May be 'None' if no debug
-     information is available.
-
- -- Variable: RecordInstruction.is_speculative
-     A boolean indicating whether the instruction was executed
-     speculatively.
-
-   If an error occured during recording or decoding a recording, this
-error is represented by a 'gdb.RecordGap' object in the instruction
-list.  It has the following attributes:
-
- -- Variable: RecordGap.number
-     An integer identifying this gap.  'number' corresponds to the
-     numbers seen in 'record instruction-history' (*note Process Record
-     and Replay::).
-
- -- Variable: RecordGap.error_code
-     A numerical representation of the reason for the gap.  The value is
-     specific to the current recording method.
-
- -- Variable: RecordGap.error_string
-     A human readable string with the reason for the gap.
-
-   A 'gdb.RecordFunctionSegment' object has the following attributes:
-
- -- Variable: RecordFunctionSegment.number
-     An integer identifying this function segment.  'number' corresponds
-     to the numbers seen in 'record function-call-history' (*note
-     Process Record and Replay::).
-
- -- Variable: RecordFunctionSegment.symbol
-     A 'gdb.Symbol' object representing the associated symbol.  May be
-     'None' if no debug information is available.
-
- -- Variable: RecordFunctionSegment.level
-     An integer representing the function call's stack level.  May be
-     'None' if the function call is a gap.
-
- -- Variable: RecordFunctionSegment.instructions
-     A list of 'gdb.RecordInstruction' or 'gdb.RecordGap' objects
-     associated with this function call.
-
- -- Variable: RecordFunctionSegment.up
-     A 'gdb.RecordFunctionSegment' object representing the caller's
-     function segment.  If the call has not been recorded, this will be
-     the function segment to which control returns.  If neither the call
-     nor the return have been recorded, this will be 'None'.
-
- -- Variable: RecordFunctionSegment.prev
-     A 'gdb.RecordFunctionSegment' object representing the previous
-     segment of this function call.  May be 'None'.
-
- -- Variable: RecordFunctionSegment.next
-     A 'gdb.RecordFunctionSegment' object representing the next segment
-     of this function call.  May be 'None'.
-
-   The following example demonstrates the usage of these objects and
-functions to create a function that will rewind a record to the last
-time a function in a different file was executed.  This would typically
-be used to track the execution of user provided callback functions in a
-library which typically are not visible in a back trace.
-
-     def bringback ():
-         rec = gdb.current_recording ()
-         if not rec:
-             return
-
-         insn = rec.instruction_history
-         if len (insn) == 0:
-             return
-
-         try:
-             position = insn.index (rec.replay_position)
-         except:
-             position = -1
-         try:
-             filename = insn[position].sal.symtab.fullname ()
-         except:
-             filename = None
-
-         for i in reversed (insn[:position]):
-     	try:
-                 current = i.sal.symtab.fullname ()
-     	except:
-                 current = None
-
-             if filename == current:
-                 continue
-
-             rec.goto (i)
-             return
-
-   Another possible application is to write a function that counts the
-number of code executions in a given line range.  This line range can
-contain parts of functions or span across several functions and is not
-limited to be contiguous.
-
-     def countrange (filename, linerange):
-         count = 0
-
-         def filter_only (file_name):
-             for call in gdb.current_recording ().function_call_history:
-                 try:
-                     if file_name in call.symbol.symtab.fullname ():
-                         yield call
-                 except:
-                     pass
-
-         for c in filter_only (filename):
-             for i in c.instructions:
-                 try:
-                     if i.sal.line in linerange:
-                         count += 1
-                         break;
-                 except:
-                         pass
-
-         return count
+   The environment that will be passed to the inferior can be changed
+from Python by using the following methods.  These methods only take
+effect when the inferior is started - they will not affect an inferior
+that is already executing.
 
-
-File: gdb.info,  Node: Commands In Python,  Next: Parameters In Python,  Prev: Recordings In Python,  Up: Python API
-
-23.2.2.20 Commands In Python
-............................
-
-You can implement new GDB CLI commands in Python.  A CLI command is
-implemented using an instance of the 'gdb.Command' class, most commonly
-using a subclass.
-
- -- Function: Command.__init__ (name, COMMAND_CLASS [, COMPLETER_CLASS
-          [, PREFIX]])
-     The object initializer for 'Command' registers the new command with
-     GDB.  This initializer is normally invoked from the subclass' own
-     '__init__' method.
-
-     NAME is the name of the command.  If NAME consists of multiple
-     words, then the initial words are looked for as prefix commands.
-     In this case, if one of the prefix commands does not exist, an
-     exception is raised.
-
-     There is no support for multi-line commands.
-
-     COMMAND_CLASS should be one of the 'COMMAND_' constants defined
-     below.  This argument tells GDB how to categorize the new command
-     in the help system.
-
-     COMPLETER_CLASS is an optional argument.  If given, it should be
-     one of the 'COMPLETE_' constants defined below.  This argument
-     tells GDB how to perform completion for this command.  If not
-     given, GDB will attempt to complete using the object's 'complete'
-     method (see below); if no such method is found, an error will occur
-     when completion is attempted.
-
-     PREFIX is an optional argument.  If 'True', then the new command is
-     a prefix command; sub-commands of this command may be registered.
-
-     The help text for the new command is taken from the Python
-     documentation string for the command's class, if there is one.  If
-     no documentation string is provided, the default value "This
-     command is not documented."  is used.
-
- -- Function: Command.dont_repeat ()
-     By default, a GDB command is repeated when the user enters a blank
-     line at the command prompt.  A command can suppress this behavior
-     by invoking the 'dont_repeat' method.  This is similar to the user
-     command 'dont-repeat', see *note dont-repeat: Define.
-
- -- Function: Command.invoke (argument, from_tty)
-     This method is called by GDB when this command is invoked.
-
-     ARGUMENT is a string.  It is the argument to the command, after
-     leading and trailing whitespace has been stripped.
-
-     FROM_TTY is a boolean argument.  When true, this means that the
-     command was entered by the user at the terminal; when false it
-     means that the command came from elsewhere.
-
-     If this method throws an exception, it is turned into a GDB 'error'
-     call.  Otherwise, the return value is ignored.
-
-     To break ARGUMENT up into an argv-like string use
-     'gdb.string_to_argv'.  This function behaves identically to GDB's
-     internal argument lexer 'buildargv'.  It is recommended to use this
-     for consistency.  Arguments are separated by spaces and may be
-     quoted.  Example:
-
-          print gdb.string_to_argv ("1 2\ \\\"3 '4 \"5' \"6 '7\"")
-          ['1', '2 "3', '4 "5', "6 '7"]
-
- -- Function: Command.complete (text, word)
-     This method is called by GDB when the user attempts completion on
-     this command.  All forms of completion are handled by this method,
-     that is, the <TAB> and <M-?> key bindings (*note Completion::), and
-     the 'complete' command (*note complete: Help.).
-
-     The arguments TEXT and WORD are both strings; TEXT holds the
-     complete command line up to the cursor's location, while WORD holds
-     the last word of the command line; this is computed using a
-     word-breaking heuristic.
-
-     The 'complete' method can return several values:
-        * If the return value is a sequence, the contents of the
-          sequence are used as the completions.  It is up to 'complete'
-          to ensure that the contents actually do complete the word.  A
-          zero-length sequence is allowed, it means that there were no
-          completions available.  Only string elements of the sequence
-          are used; other elements in the sequence are ignored.
-
-        * If the return value is one of the 'COMPLETE_' constants
-          defined below, then the corresponding GDB-internal completion
-          function is invoked, and its result is used.
-
-        * All other results are treated as though there were no
-          available completions.
-
-   When a new command is registered, it must be declared as a member of
-some general class of commands.  This is used to classify top-level
-commands in the on-line help system; note that prefix commands are not
-listed under their own category but rather that of their top-level
-command.  The available classifications are represented by constants
-defined in the 'gdb' module:
-
-'gdb.COMMAND_NONE'
-     The command does not belong to any particular class.  A command in
-     this category will not be displayed in any of the help categories.
-
-'gdb.COMMAND_RUNNING'
-     The command is related to running the inferior.  For example,
-     'start', 'step', and 'continue' are in this category.  Type 'help
-     running' at the GDB prompt to see a list of commands in this
-     category.
-
-'gdb.COMMAND_DATA'
-     The command is related to data or variables.  For example, 'call',
-     'find', and 'print' are in this category.  Type 'help data' at the
-     GDB prompt to see a list of commands in this category.
-
-'gdb.COMMAND_STACK'
-     The command has to do with manipulation of the stack.  For example,
-     'backtrace', 'frame', and 'return' are in this category.  Type
-     'help stack' at the GDB prompt to see a list of commands in this
-     category.
-
-'gdb.COMMAND_FILES'
-     This class is used for file-related commands.  For example, 'file',
-     'list' and 'section' are in this category.  Type 'help files' at
-     the GDB prompt to see a list of commands in this category.
-
-'gdb.COMMAND_SUPPORT'
-     This should be used for "support facilities", generally meaning
-     things that are useful to the user when interacting with GDB, but
-     not related to the state of the inferior.  For example, 'help',
-     'make', and 'shell' are in this category.  Type 'help support' at
-     the GDB prompt to see a list of commands in this category.
-
-'gdb.COMMAND_STATUS'
-     The command is an 'info'-related command, that is, related to the
-     state of GDB itself.  For example, 'info', 'macro', and 'show' are
-     in this category.  Type 'help status' at the GDB prompt to see a
-     list of commands in this category.
-
-'gdb.COMMAND_BREAKPOINTS'
-     The command has to do with breakpoints.  For example, 'break',
-     'clear', and 'delete' are in this category.  Type 'help
-     breakpoints' at the GDB prompt to see a list of commands in this
-     category.
-
-'gdb.COMMAND_TRACEPOINTS'
-     The command has to do with tracepoints.  For example, 'trace',
-     'actions', and 'tfind' are in this category.  Type 'help
-     tracepoints' at the GDB prompt to see a list of commands in this
-     category.
-
-'gdb.COMMAND_USER'
-     The command is a general purpose command for the user, and
-     typically does not fit in one of the other categories.  Type 'help
-     user-defined' at the GDB prompt to see a list of commands in this
-     category, as well as the list of gdb macros (*note Sequences::).
-
-'gdb.COMMAND_OBSCURE'
-     The command is only used in unusual circumstances, or is not of
-     general interest to users.  For example, 'checkpoint', 'fork', and
-     'stop' are in this category.  Type 'help obscure' at the GDB prompt
-     to see a list of commands in this category.
-
-'gdb.COMMAND_MAINTENANCE'
-     The command is only useful to GDB maintainers.  The 'maintenance'
-     and 'flushregs' commands are in this category.  Type 'help
-     internals' at the GDB prompt to see a list of commands in this
-     category.
-
-   A new command can use a predefined completion function, either by
-specifying it via an argument at initialization, or by returning it from
-the 'complete' method.  These predefined completion constants are all
-defined in the 'gdb' module:
-
-'gdb.COMPLETE_NONE'
-     This constant means that no completion should be done.
-
-'gdb.COMPLETE_FILENAME'
-     This constant means that filename completion should be performed.
-
-'gdb.COMPLETE_LOCATION'
-     This constant means that location completion should be done.  *Note
-     Specify Location::.
-
-'gdb.COMPLETE_COMMAND'
-     This constant means that completion should examine GDB command
-     names.
-
-'gdb.COMPLETE_SYMBOL'
-     This constant means that completion should be done using symbol
-     names as the source.
-
-'gdb.COMPLETE_EXPRESSION'
-     This constant means that completion should be done on expressions.
-     Often this means completing on symbol names, but some language
-     parsers also have support for completing on field names.
-
-   The following code snippet shows how a trivial CLI command can be
-implemented in Python:
-
-     class HelloWorld (gdb.Command):
-       """Greet the whole world."""
-
-       def __init__ (self):
-         super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_USER)
-
-       def invoke (self, arg, from_tty):
-         print "Hello, World!"
-
-     HelloWorld ()
-
-   The last line instantiates the class, and is necessary to trigger the
-registration of the command with GDB.  Depending on how the Python code
-is read into GDB, you may need to import the 'gdb' module explicitly.
-
-
-File: gdb.info,  Node: Parameters In Python,  Next: Functions In Python,  Prev: Commands In Python,  Up: Python API
-
-23.2.2.21 Parameters In Python
-..............................
-
-You can implement new GDB parameters using Python.  A new parameter is
-implemented as an instance of the 'gdb.Parameter' class.
-
-   Parameters are exposed to the user via the 'set' and 'show' commands.
-*Note Help::.
-
-   There are many parameters that already exist and can be set in GDB.
-Two examples are: 'set follow fork' and 'set charset'.  Setting these
-parameters influences certain behavior in GDB.  Similarly, you can
-define parameters that can be used to influence behavior in custom
-Python scripts and commands.
-
- -- Function: Parameter.__init__ (name, COMMAND-CLASS, PARAMETER-CLASS
-          [, ENUM-SEQUENCE])
-     The object initializer for 'Parameter' registers the new parameter
-     with GDB.  This initializer is normally invoked from the subclass'
-     own '__init__' method.
-
-     NAME is the name of the new parameter.  If NAME consists of
-     multiple words, then the initial words are looked for as prefix
-     parameters.  An example of this can be illustrated with the 'set
-     print' set of parameters.  If NAME is 'print foo', then 'print'
-     will be searched as the prefix parameter.  In this case the
-     parameter can subsequently be accessed in GDB as 'set print foo'.
-
-     If NAME consists of multiple words, and no prefix parameter group
-     can be found, an exception is raised.
-
-     COMMAND-CLASS should be one of the 'COMMAND_' constants (*note
-     Commands In Python::).  This argument tells GDB how to categorize
-     the new parameter in the help system.
-
-     PARAMETER-CLASS should be one of the 'PARAM_' constants defined
-     below.  This argument tells GDB the type of the new parameter; this
-     information is used for input validation and completion.
-
-     If PARAMETER-CLASS is 'PARAM_ENUM', then ENUM-SEQUENCE must be a
-     sequence of strings.  These strings represent the possible values
-     for the parameter.
-
-     If PARAMETER-CLASS is not 'PARAM_ENUM', then the presence of a
-     fourth argument will cause an exception to be thrown.
-
-     The help text for the new parameter is taken from the Python
-     documentation string for the parameter's class, if there is one.
-     If there is no documentation string, a default value is used.
-
- -- Variable: Parameter.set_doc
-     If this attribute exists, and is a string, then its value is used
-     as the help text for this parameter's 'set' command.  The value is
-     examined when 'Parameter.__init__' is invoked; subsequent changes
-     have no effect.
-
- -- Variable: Parameter.show_doc
-     If this attribute exists, and is a string, then its value is used
-     as the help text for this parameter's 'show' command.  The value is
-     examined when 'Parameter.__init__' is invoked; subsequent changes
-     have no effect.
-
- -- Variable: Parameter.value
-     The 'value' attribute holds the underlying value of the parameter.
-     It can be read and assigned to just as any other attribute.  GDB
-     does validation when assignments are made.
-
-   There are two methods that may be implemented in any 'Parameter'
-class.  These are:
-
- -- Function: Parameter.get_set_string (self)
-     If this method exists, GDB will call it when a PARAMETER's value
-     has been changed via the 'set' API (for example, 'set foo off').
-     The 'value' attribute has already been populated with the new value
-     and may be used in output.  This method must return a string.  If
-     the returned string is not empty, GDB will present it to the user.
-
-     If this method raises the 'gdb.GdbError' exception (*note Exception
-     Handling::), then GDB will print the exception's string and the
-     'set' command will fail.  Note, however, that the 'value' attribute
-     will not be reset in this case.  So, if your parameter must
-     validate values, it should store the old value internally and reset
-     the exposed value, like so:
-
-          class ExampleParam (gdb.Parameter):
-             def __init__ (self, name):
-                super (ExampleParam, self).__init__ (name,
-                             gdb.COMMAND_DATA,
-                             gdb.PARAM_BOOLEAN)
-                self.value = True
-                self.saved_value = True
-             def validate(self):
-                return False
-             def get_set_string (self):
-                if not self.validate():
-                  self.value = self.saved_value
-                  raise gdb.GdbError('Failed to validate')
-                self.saved_value = self.value
-
- -- Function: Parameter.get_show_string (self, svalue)
-     GDB will call this method when a PARAMETER's 'show' API has been
-     invoked (for example, 'show foo').  The argument 'svalue' receives
-     the string representation of the current value.  This method must
-     return a string.
-
-   When a new parameter is defined, its type must be specified.  The
-available types are represented by constants defined in the 'gdb'
-module:
-
-'gdb.PARAM_BOOLEAN'
-     The value is a plain boolean.  The Python boolean values, 'True'
-     and 'False' are the only valid values.
-
-'gdb.PARAM_AUTO_BOOLEAN'
-     The value has three possible states: true, false, and 'auto'.  In
-     Python, true and false are represented using boolean constants, and
-     'auto' is represented using 'None'.
-
-'gdb.PARAM_UINTEGER'
-     The value is an unsigned integer.  The value of 0 should be
-     interpreted to mean "unlimited".
-
-'gdb.PARAM_INTEGER'
-     The value is a signed integer.  The value of 0 should be
-     interpreted to mean "unlimited".
-
-'gdb.PARAM_STRING'
-     The value is a string.  When the user modifies the string, any
-     escape sequences, such as '\t', '\f', and octal escapes, are
-     translated into corresponding characters and encoded into the
-     current host charset.
-
-'gdb.PARAM_STRING_NOESCAPE'
-     The value is a string.  When the user modifies the string, escapes
-     are passed through untranslated.
-
-'gdb.PARAM_OPTIONAL_FILENAME'
-     The value is a either a filename (a string), or 'None'.
-
-'gdb.PARAM_FILENAME'
-     The value is a filename.  This is just like
-     'PARAM_STRING_NOESCAPE', but uses file names for completion.
-
-'gdb.PARAM_ZINTEGER'
-     The value is an integer.  This is like 'PARAM_INTEGER', except 0 is
-     interpreted as itself.
-
-'gdb.PARAM_ZUINTEGER'
-     The value is an unsigned integer.  This is like 'PARAM_INTEGER',
-     except 0 is interpreted as itself, and the value cannot be
-     negative.
-
-'gdb.PARAM_ZUINTEGER_UNLIMITED'
-     The value is a signed integer.  This is like 'PARAM_ZUINTEGER',
-     except the special value -1 should be interpreted to mean
-     "unlimited".  Other negative values are not allowed.
-
-'gdb.PARAM_ENUM'
-     The value is a string, which must be one of a collection string
-     constants provided when the parameter is created.
-
-
-File: gdb.info,  Node: Functions In Python,  Next: Progspaces In Python,  Prev: Parameters In Python,  Up: Python API
-
-23.2.2.22 Writing new convenience functions
-...........................................
-
-You can implement new convenience functions (*note Convenience Vars::)
-in Python.  A convenience function is an instance of a subclass of the
-class 'gdb.Function'.
-
- -- Function: Function.__init__ (name)
-     The initializer for 'Function' registers the new function with GDB.
-     The argument NAME is the name of the function, a string.  The
-     function will be visible to the user as a convenience variable of
-     type 'internal function', whose name is the same as the given NAME.
-
-     The documentation for the new function is taken from the
-     documentation string for the new class.
-
- -- Function: Function.invoke (*ARGS)
-     When a convenience function is evaluated, its arguments are
-     converted to instances of 'gdb.Value', and then the function's
-     'invoke' method is called.  Note that GDB does not predetermine the
-     arity of convenience functions.  Instead, all available arguments
-     are passed to 'invoke', following the standard Python calling
-     convention.  In particular, a convenience function can have default
-     values for parameters without ill effect.
-
-     The return value of this method is used as its value in the
-     enclosing expression.  If an ordinary Python value is returned, it
-     is converted to a 'gdb.Value' following the usual rules.
-
-   The following code snippet shows how a trivial convenience function
-can be implemented in Python:
-
-     class Greet (gdb.Function):
-       """Return string to greet someone.
-     Takes a name as argument."""
-
-       def __init__ (self):
-         super (Greet, self).__init__ ("greet")
-
-       def invoke (self, name):
-         return "Hello, %s!" % name.string ()
-
-     Greet ()
-
-   The last line instantiates the class, and is necessary to trigger the
-registration of the function with GDB.  Depending on how the Python code
-is read into GDB, you may need to import the 'gdb' module explicitly.
-
-   Now you can use the function in an expression:
-
-     (gdb) print $greet("Bob")
-     $1 = "Hello, Bob!"
-
-
-File: gdb.info,  Node: Progspaces In Python,  Next: Objfiles In Python,  Prev: Functions In Python,  Up: Python API
-
-23.2.2.23 Program Spaces In Python
-..................................
-
-A program space, or "progspace", represents a symbolic view of an
-address space.  It consists of all of the objfiles of the program.
-*Note Objfiles In Python::.  *Note program spaces: Inferiors and
-Programs, for more details about program spaces.
-
-   The following progspace-related functions are available in the 'gdb'
-module:
-
- -- Function: gdb.current_progspace ()
-     This function returns the program space of the currently selected
-     inferior.  *Note Inferiors and Programs::.  This is identical to
-     'gdb.selected_inferior().progspace' (*note Inferiors In Python::)
-     and is included for historical compatibility.
-
- -- Function: gdb.progspaces ()
-     Return a sequence of all the progspaces currently known to GDB.
-
-   Each progspace is represented by an instance of the 'gdb.Progspace'
-class.
-
- -- Variable: Progspace.filename
-     The file name of the progspace as a string.
-
- -- Variable: Progspace.pretty_printers
-     The 'pretty_printers' attribute is a list of functions.  It is used
-     to look up pretty-printers.  A 'Value' is passed to each function
-     in order; if the function returns 'None', then the search
-     continues.  Otherwise, the return value should be an object which
-     is used to format the value.  *Note Pretty Printing API::, for more
-     information.
-
- -- Variable: Progspace.type_printers
-     The 'type_printers' attribute is a list of type printer objects.
-     *Note Type Printing API::, for more information.
-
- -- Variable: Progspace.frame_filters
-     The 'frame_filters' attribute is a dictionary of frame filter
-     objects.  *Note Frame Filter API::, for more information.
-
-   A program space has the following methods:
-
- -- Function: Progspace.block_for_pc (pc)
-     Return the innermost 'gdb.Block' containing the given PC value.  If
-     the block cannot be found for the PC value specified, the function
-     will return 'None'.
-
- -- Function: Progspace.find_pc_line (pc)
-     Return the 'gdb.Symtab_and_line' object corresponding to the PC
-     value.  *Note Symbol Tables In Python::.  If an invalid value of PC
-     is passed as an argument, then the 'symtab' and 'line' attributes
-     of the returned 'gdb.Symtab_and_line' object will be 'None' and 0
-     respectively.
+ -- Function: Inferior.clear_env ()
+     Clear the current environment variables that will be passed to this
+     inferior.
 
- -- Function: Progspace.is_valid ()
-     Returns 'True' if the 'gdb.Progspace' object is valid, 'False' if
-     not.  A 'gdb.Progspace' object can become invalid if the program
-     space file it refers to is not referenced by any inferior.  All
-     other 'gdb.Progspace' methods will throw an exception if it is
-     invalid at the time the method is called.
-
- -- Function: Progspace.objfiles ()
-     Return a sequence of all the objfiles referenced by this program
-     space.  *Note Objfiles In Python::.
+ -- Function: Inferior.set_env (name, value)
+     Set the environment variable NAME to have the indicated value.
+     Both parameters must be strings.
 
- -- Function: Progspace.solib_name (address)
-     Return the name of the shared library holding the given ADDRESS as
-     a string, or 'None'.
+ -- Function: Inferior.unset_env (name)
+     Unset the environment variable NAME.  NAME must be a string.
 
-   One may add arbitrary attributes to 'gdb.Progspace' objects in the
+   One may add arbitrary attributes to 'gdb.Inferior' objects in the
 usual Python way.  This is useful if, for example, one needs to do some
-extra record keeping associated with the program space.
-
-   In this contrived example, we want to perform some processing when an
-objfile with a certain symbol is loaded, but we only want to do this
-once because it is expensive.  To achieve this we record the results
-with the program space because we can't predict when the desired objfile
-will be loaded.
-
-     (gdb) python
-     def clear_objfiles_handler(event):
-         event.progspace.expensive_computation = None
-     def expensive(symbol):
-         """A mock routine to perform an "expensive" computation on symbol."""
-         print "Computing the answer to the ultimate question ..."
-         return 42
-     def new_objfile_handler(event):
-         objfile = event.new_objfile
-         progspace = objfile.progspace
-         if not hasattr(progspace, 'expensive_computation') or \
-                 progspace.expensive_computation is None:
-             # We use 'main' for the symbol to keep the example simple.
-             # Note: There's no current way to constrain the lookup
-             # to one objfile.
-             symbol = gdb.lookup_global_symbol('main')
-             if symbol is not None:
-                 progspace.expensive_computation = expensive(symbol)
-     gdb.events.clear_objfiles.connect(clear_objfiles_handler)
-     gdb.events.new_objfile.connect(new_objfile_handler)
-     end
-     (gdb) file /tmp/hello
-     Reading symbols from /tmp/hello...done.
-     Computing the answer to the ultimate question ...
-     (gdb) python print gdb.current_progspace().expensive_computation
-     42
-     (gdb) run
-     Starting program: /tmp/hello
-     Hello.
-     [Inferior 1 (process 4242) exited normally]
-
-
-File: gdb.info,  Node: Objfiles In Python,  Next: Frames In Python,  Prev: Progspaces In Python,  Up: Python API
-
-23.2.2.24 Objfiles In Python
-............................
-
-GDB loads symbols for an inferior from various symbol-containing files
-(*note Files::).  These include the primary executable file, any shared
-libraries used by the inferior, and any separate debug info files (*note
-Separate Debug Files::).  GDB calls these symbol-containing files
-"objfiles".
-
-   The following objfile-related functions are available in the 'gdb'
-module:
-
- -- Function: gdb.current_objfile ()
-     When auto-loading a Python script (*note Python Auto-loading::),
-     GDB sets the "current objfile" to the corresponding objfile.  This
-     function returns the current objfile.  If there is no current
-     objfile, this function returns 'None'.
-
- -- Function: gdb.objfiles ()
-     Return a sequence of objfiles referenced by the current program
-     space.  *Note Objfiles In Python::, and *note Progspaces In
-     Python::.  This is identical to
-     'gdb.selected_inferior().progspace.objfiles()' and is included for
-     historical compatibility.
-
- -- Function: gdb.lookup_objfile (name [, by_build_id])
-     Look up NAME, a file name or build ID, in the list of objfiles for
-     the current program space (*note Progspaces In Python::).  If the
-     objfile is not found throw the Python 'ValueError' exception.
-
-     If NAME is a relative file name, then it will match any source file
-     name with the same trailing components.  For example, if NAME is
-     'gcc/expr.c', then it will match source file name of
-     '/build/trunk/gcc/expr.c', but not '/build/trunk/libcpp/expr.c' or
-     '/build/trunk/gcc/x-expr.c'.
-
-     If BY_BUILD_ID is provided and is 'True' then NAME is the build ID
-     of the objfile.  Otherwise, NAME is a file name.  This is supported
-     only on some operating systems, notably those which use the ELF
-     format for binary files and the GNU Binutils.  For more details
-     about this feature, see the description of the '--build-id'
-     command-line option in *note Command Line Options: (ld)Options.
-
-   Each objfile is represented by an instance of the 'gdb.Objfile'
-class.
-
- -- Variable: Objfile.filename
-     The file name of the objfile as a string, with symbolic links
-     resolved.
-
-     The value is 'None' if the objfile is no longer valid.  See the
-     'gdb.Objfile.is_valid' method, described below.
-
- -- Variable: Objfile.username
-     The file name of the objfile as specified by the user as a string.
-
-     The value is 'None' if the objfile is no longer valid.  See the
-     'gdb.Objfile.is_valid' method, described below.
-
- -- Variable: Objfile.owner
-     For separate debug info objfiles this is the corresponding
-     'gdb.Objfile' object that debug info is being provided for.
-     Otherwise this is 'None'.  Separate debug info objfiles are added
-     with the 'gdb.Objfile.add_separate_debug_file' method, described
-     below.
-
- -- Variable: Objfile.build_id
-     The build ID of the objfile as a string.  If the objfile does not
-     have a build ID then the value is 'None'.
-
-     This is supported only on some operating systems, notably those
-     which use the ELF format for binary files and the GNU Binutils.
-     For more details about this feature, see the description of the
-     '--build-id' command-line option in *note Command Line Options:
-     (ld)Options.
-
- -- Variable: Objfile.progspace
-     The containing program space of the objfile as a 'gdb.Progspace'
-     object.  *Note Progspaces In Python::.
-
- -- Variable: Objfile.pretty_printers
-     The 'pretty_printers' attribute is a list of functions.  It is used
-     to look up pretty-printers.  A 'Value' is passed to each function
-     in order; if the function returns 'None', then the search
-     continues.  Otherwise, the return value should be an object which
-     is used to format the value.  *Note Pretty Printing API::, for more
-     information.
+extra record keeping associated with the inferior.
 
- -- Variable: Objfile.type_printers
-     The 'type_printers' attribute is a list of type printer objects.
-     *Note Type Printing API::, for more information.
-
- -- Variable: Objfile.frame_filters
-     The 'frame_filters' attribute is a dictionary of frame filter
-     objects.  *Note Frame Filter API::, for more information.
-
-   One may add arbitrary attributes to 'gdb.Objfile' objects in the
-usual Python way.  This is useful if, for example, one needs to do some
-extra record keeping associated with the objfile.
+   When selecting a name for a new attribute, avoid starting the new
+attribute name with a lower case letter; future attributes added by GDB
+will start with a lower case letter.  Additionally, avoid starting
+attribute names with two underscore characters, as these could clash
+with Python builtin attribute names.
 
-   In this contrived example we record the time when GDB loaded the
-objfile.
+   In this contrived example we record the time when an inferior last
+stopped:
 
      (gdb) python
      import datetime
-     def new_objfile_handler(event):
-         # Set the time_loaded attribute of the new objfile.
-         event.new_objfile.time_loaded = datetime.datetime.today()
-     gdb.events.new_objfile.connect(new_objfile_handler)
-     end
-     (gdb) file ./hello
-     Reading symbols from ./hello...done.
-     (gdb) python print gdb.objfiles()[0].time_loaded
-     2014-10-09 11:41:36.770345
-
-   A 'gdb.Objfile' object has the following methods:
-
- -- Function: Objfile.is_valid ()
-     Returns 'True' if the 'gdb.Objfile' object is valid, 'False' if
-     not.  A 'gdb.Objfile' object can become invalid if the object file
-     it refers to is not loaded in GDB any longer.  All other
-     'gdb.Objfile' methods will throw an exception if it is invalid at
-     the time the method is called.
-
- -- Function: Objfile.add_separate_debug_file (file)
-     Add FILE to the list of files that GDB will search for debug
-     information for the objfile.  This is useful when the debug info
-     has been removed from the program and stored in a separate file.
-     GDB has built-in support for finding separate debug info files
-     (*note Separate Debug Files::), but if the file doesn't live in one
-     of the standard places that GDB searches then this function can be
-     used to add a debug info file from a different place.
-
- -- Function: Objfile.lookup_global_symbol (name [, domain])
-     Search for a global symbol named NAME in this objfile.  Optionally,
-     the search scope can be restricted with the DOMAIN argument.  The
-     DOMAIN argument must be a domain constant defined in the 'gdb'
-     module and described in *note Symbols In Python::.  This function
-     is similar to 'gdb.lookup_global_symbol', except that the search is
-     limited to this objfile.
-
-     The result is a 'gdb.Symbol' object or 'None' if the symbol is not
-     found.
-
- -- Function: Objfile.lookup_static_symbol (name [, domain])
-     Like 'Objfile.lookup_global_symbol', but searches for a global
-     symbol with static linkage named NAME in this objfile.
-
-
-File: gdb.info,  Node: Frames In Python,  Next: Blocks In Python,  Prev: Objfiles In Python,  Up: Python API
-
-23.2.2.25 Accessing inferior stack frames from Python
-.....................................................
-
-When the debugged program stops, GDB is able to analyze its call stack
-(*note Stack frames: Frames.).  The 'gdb.Frame' class represents a frame
-in the stack.  A 'gdb.Frame' object is only valid while its
-corresponding frame exists in the inferior's stack.  If you try to use
-an invalid frame object, GDB will throw a 'gdb.error' exception (*note
-Exception Handling::).
-
-   Two 'gdb.Frame' objects can be compared for equality with the '=='
-operator, like:
-
-     (gdb) python print gdb.newest_frame() == gdb.selected_frame ()
-     True
-
-   The following frame-related functions are available in the 'gdb'
-module:
-
- -- Function: gdb.selected_frame ()
-     Return the selected frame object.  (*note Selecting a Frame:
-     Selection.).
-
- -- Function: gdb.newest_frame ()
-     Return the newest frame object for the selected thread.
-
- -- Function: gdb.frame_stop_reason_string (reason)
-     Return a string explaining the reason why GDB stopped unwinding
-     frames, as expressed by the given REASON code (an integer, see the
-     'unwind_stop_reason' method further down in this section).
-
- -- Function: gdb.invalidate_cached_frames
-     GDB internally keeps a cache of the frames that have been unwound.
-     This function invalidates this cache.
-
-     This function should not generally be called by ordinary Python
-     code.  It is documented for the sake of completeness.
-
-   A 'gdb.Frame' object has the following methods:
-
- -- Function: Frame.is_valid ()
-     Returns true if the 'gdb.Frame' object is valid, false if not.  A
-     frame object can become invalid if the frame it refers to doesn't
-     exist anymore in the inferior.  All 'gdb.Frame' methods will throw
-     an exception if it is invalid at the time the method is called.
-
- -- Function: Frame.name ()
-     Returns the function name of the frame, or 'None' if it can't be
-     obtained.
-
- -- Function: Frame.architecture ()
-     Returns the 'gdb.Architecture' object corresponding to the frame's
-     architecture.  *Note Architectures In Python::.
-
- -- Function: Frame.type ()
-     Returns the type of the frame.  The value can be one of:
-     'gdb.NORMAL_FRAME'
-          An ordinary stack frame.
-
-     'gdb.DUMMY_FRAME'
-          A fake stack frame that was created by GDB when performing an
-          inferior function call.
-
-     'gdb.INLINE_FRAME'
-          A frame representing an inlined function.  The function was
-          inlined into a 'gdb.NORMAL_FRAME' that is older than this one.
-
-     'gdb.TAILCALL_FRAME'
-          A frame representing a tail call.  *Note Tail Call Frames::.
-
-     'gdb.SIGTRAMP_FRAME'
-          A signal trampoline frame.  This is the frame created by the
-          OS when it calls into a signal handler.
-
-     'gdb.ARCH_FRAME'
-          A fake stack frame representing a cross-architecture call.
-
-     'gdb.SENTINEL_FRAME'
-          This is like 'gdb.NORMAL_FRAME', but it is only used for the
-          newest frame.
-
- -- Function: Frame.unwind_stop_reason ()
-     Return an integer representing the reason why it's not possible to
-     find more frames toward the outermost frame.  Use
-     'gdb.frame_stop_reason_string' to convert the value returned by
-     this function to a string.  The value can be one of:
-
-     'gdb.FRAME_UNWIND_NO_REASON'
-          No particular reason (older frames should be available).
-
-     'gdb.FRAME_UNWIND_NULL_ID'
-          The previous frame's analyzer returns an invalid result.  This
-          is no longer used by GDB, and is kept only for backward
-          compatibility.
-
-     'gdb.FRAME_UNWIND_OUTERMOST'
-          This frame is the outermost.
-
-     'gdb.FRAME_UNWIND_UNAVAILABLE'
-          Cannot unwind further, because that would require knowing the
-          values of registers or memory that have not been collected.
-
-     'gdb.FRAME_UNWIND_INNER_ID'
-          This frame ID looks like it ought to belong to a NEXT frame,
-          but we got it for a PREV frame.  Normally, this is a sign of
-          unwinder failure.  It could also indicate stack corruption.
-
-     'gdb.FRAME_UNWIND_SAME_ID'
-          This frame has the same ID as the previous one.  That means
-          that unwinding further would almost certainly give us another
-          frame with exactly the same ID, so break the chain.  Normally,
-          this is a sign of unwinder failure.  It could also indicate
-          stack corruption.
-
-     'gdb.FRAME_UNWIND_NO_SAVED_PC'
-          The frame unwinder did not find any saved PC, but we needed
-          one to unwind further.
-
-     'gdb.FRAME_UNWIND_MEMORY_ERROR'
-          The frame unwinder caused an error while trying to access
-          memory.
-
-     'gdb.FRAME_UNWIND_FIRST_ERROR'
-          Any stop reason greater or equal to this value indicates some
-          kind of error.  This special value facilitates writing code
-          that tests for errors in unwinding in a way that will work
-          correctly even if the list of the other values is modified in
-          future GDB versions.  Using it, you could write:
-               reason = gdb.selected_frame().unwind_stop_reason ()
-               reason_str =  gdb.frame_stop_reason_string (reason)
-               if reason >=  gdb.FRAME_UNWIND_FIRST_ERROR:
-                   print "An error occured: %s" % reason_str
-
- -- Function: Frame.pc ()
-     Returns the frame's resume address.
-
- -- Function: Frame.block ()
-     Return the frame's code block.  *Note Blocks In Python::.  If the
-     frame does not have a block - for example, if there is no debugging
-     information for the code in question - then this will throw an
-     exception.
-
- -- Function: Frame.function ()
-     Return the symbol for the function corresponding to this frame.
-     *Note Symbols In Python::.
-
- -- Function: Frame.older ()
-     Return the frame that called this frame.
-
- -- Function: Frame.newer ()
-     Return the frame called by this frame.
-
- -- Function: Frame.find_sal ()
-     Return the frame's symtab and line object.  *Note Symbol Tables In
-     Python::.
-
- -- Function: Frame.read_register (register)
-     Return the value of REGISTER in this frame.  The REGISTER argument
-     must be a string (e.g., ''sp'' or ''rax'').  Returns a 'Gdb.Value'
-     object.  Throws an exception if REGISTER does not exist.
-
- -- Function: Frame.read_var (variable [, block])
-     Return the value of VARIABLE in this frame.  If the optional
-     argument BLOCK is provided, search for the variable from that
-     block; otherwise start at the frame's current block (which is
-     determined by the frame's current program counter).  The VARIABLE
-     argument must be a string or a 'gdb.Symbol' object; BLOCK must be a
-     'gdb.Block' object.
-
- -- Function: Frame.select ()
-     Set this frame to be the selected frame.  *Note Examining the
-     Stack: Stack.
-
-
-File: gdb.info,  Node: Blocks In Python,  Next: Symbols In Python,  Prev: Frames In Python,  Up: Python API
-
-23.2.2.26 Accessing blocks from Python
-......................................
-
-In GDB, symbols are stored in blocks.  A block corresponds roughly to a
-scope in the source code.  Blocks are organized hierarchically, and are
-represented individually in Python as a 'gdb.Block'.  Blocks rely on
-debugging information being available.
-
-   A frame has a block.  Please see *note Frames In Python::, for a more
-in-depth discussion of frames.
-
-   The outermost block is known as the "global block".  The global block
-typically holds public global variables and functions.
-
-   The block nested just inside the global block is the "static block".
-The static block typically holds file-scoped variables and functions.
-
-   GDB provides a method to get a block's superblock, but there is
-currently no way to examine the sub-blocks of a block, or to iterate
-over all the blocks in a symbol table (*note Symbol Tables In Python::).
-
-   Here is a short example that should help explain blocks:
-
-     /* This is in the global block.  */
-     int global;
-
-     /* This is in the static block.  */
-     static int file_scope;
-
-     /* 'function' is in the global block, and 'argument' is
-        in a block nested inside of 'function'.  */
-     int function (int argument)
-     {
-       /* 'local' is in a block inside 'function'.  It may or may
-          not be in the same block as 'argument'.  */
-       int local;
-
-       {
-          /* 'inner' is in a block whose superblock is the one holding
-             'local'.  */
-          int inner;
-
-          /* If this call is expanded by the compiler, you may see
-             a nested block here whose function is 'inline_function'
-             and whose superblock is the one holding 'inner'.  */
-          inline_function ();
-       }
-     }
-
-   A 'gdb.Block' is iterable.  The iterator returns the symbols (*note
-Symbols In Python::) local to the block.  Python programs should not
-assume that a specific block object will always contain a given symbol,
-since changes in GDB features and infrastructure may cause symbols move
-across blocks in a symbol table.  You can also use Python's "dictionary
-syntax" to access variables in this block, e.g.:
-
-     symbol = some_block['variable']  # symbol is of type gdb.Symbol
-
-   The following block-related functions are available in the 'gdb'
-module:
-
- -- Function: gdb.block_for_pc (pc)
-     Return the innermost 'gdb.Block' containing the given PC value.  If
-     the block cannot be found for the PC value specified, the function
-     will return 'None'.  This is identical to
-     'gdb.current_progspace().block_for_pc(pc)' and is included for
-     historical compatibility.
-
-   A 'gdb.Block' object has the following methods:
-
- -- Function: Block.is_valid ()
-     Returns 'True' if the 'gdb.Block' object is valid, 'False' if not.
-     A block object can become invalid if the block it refers to doesn't
-     exist anymore in the inferior.  All other 'gdb.Block' methods will
-     throw an exception if it is invalid at the time the method is
-     called.  The block's validity is also checked during iteration over
-     symbols of the block.
-
-   A 'gdb.Block' object has the following attributes:
-
- -- Variable: Block.start
-     The start address of the block.  This attribute is not writable.
-
- -- Variable: Block.end
-     One past the last address that appears in the block.  This
-     attribute is not writable.
-
- -- Variable: Block.function
-     The name of the block represented as a 'gdb.Symbol'.  If the block
-     is not named, then this attribute holds 'None'.  This attribute is
-     not writable.
-
-     For ordinary function blocks, the superblock is the static block.
-     However, you should note that it is possible for a function block
-     to have a superblock that is not the static block - for instance
-     this happens for an inlined function.
-
- -- Variable: Block.superblock
-     The block containing this block.  If this parent block does not
-     exist, this attribute holds 'None'.  This attribute is not
-     writable.
-
- -- Variable: Block.global_block
-     The global block associated with this block.  This attribute is not
-     writable.
-
- -- Variable: Block.static_block
-     The static block associated with this block.  This attribute is not
-     writable.
-
- -- Variable: Block.is_global
-     'True' if the 'gdb.Block' object is a global block, 'False' if not.
-     This attribute is not writable.
-
- -- Variable: Block.is_static
-     'True' if the 'gdb.Block' object is a static block, 'False' if not.
-     This attribute is not writable.
-
-
-File: gdb.info,  Node: Symbols In Python,  Next: Symbol Tables In Python,  Prev: Blocks In Python,  Up: Python API
-
-23.2.2.27 Python representation of Symbols
-..........................................
-
-GDB represents every variable, function and type as an entry in a symbol
-table.  *Note Examining the Symbol Table: Symbols.  Similarly, Python
-represents these symbols in GDB with the 'gdb.Symbol' object.
-
-   The following symbol-related functions are available in the 'gdb'
-module:
-
- -- Function: gdb.lookup_symbol (name [, block [, domain]])
-     This function searches for a symbol by name.  The search scope can
-     be restricted to the parameters defined in the optional domain and
-     block arguments.
-
-     NAME is the name of the symbol.  It must be a string.  The optional
-     BLOCK argument restricts the search to symbols visible in that
-     BLOCK.  The BLOCK argument must be a 'gdb.Block' object.  If
-     omitted, the block for the current frame is used.  The optional
-     DOMAIN argument restricts the search to the domain type.  The
-     DOMAIN argument must be a domain constant defined in the 'gdb'
-     module and described later in this chapter.
-
-     The result is a tuple of two elements.  The first element is a
-     'gdb.Symbol' object or 'None' if the symbol is not found.  If the
-     symbol is found, the second element is 'True' if the symbol is a
-     field of a method's object (e.g., 'this' in C++), otherwise it is
-     'False'.  If the symbol is not found, the second element is
-     'False'.
-
- -- Function: gdb.lookup_global_symbol (name [, domain])
-     This function searches for a global symbol by name.  The search
-     scope can be restricted to by the domain argument.
-
-     NAME is the name of the symbol.  It must be a string.  The optional
-     DOMAIN argument restricts the search to the domain type.  The
-     DOMAIN argument must be a domain constant defined in the 'gdb'
-     module and described later in this chapter.
-
-     The result is a 'gdb.Symbol' object or 'None' if the symbol is not
-     found.
-
- -- Function: gdb.lookup_static_symbol (name [, domain])
-     This function searches for a global symbol with static linkage by
-     name.  The search scope can be restricted to by the domain
-     argument.
-
-     NAME is the name of the symbol.  It must be a string.  The optional
-     DOMAIN argument restricts the search to the domain type.  The
-     DOMAIN argument must be a domain constant defined in the 'gdb'
-     module and described later in this chapter.
-
-     The result is a 'gdb.Symbol' object or 'None' if the symbol is not
-     found.
-
-     Note that this function will not find function-scoped static
-     variables.  To look up such variables, iterate over the variables
-     of the function's 'gdb.Block' and check that 'block.addr_class' is
-     'gdb.SYMBOL_LOC_STATIC'.
-
-     There can be multiple global symbols with static linkage with the
-     same name.  This function will only return the first matching
-     symbol that it finds.  Which symbol is found depends on where GDB
-     is currently stopped, as GDB will first search for matching symbols
-     in the current object file, and then search all other object files.
-     If the application is not yet running then GDB will search all
-     object files in the order they appear in the debug information.
-
- -- Function: gdb.lookup_global_symbol (name [, domain])
-     This function searches for a global symbol by name.  The search
-     scope can be restricted to by the domain argument.
-
-     NAME is the name of the symbol.  It must be a string.  The optional
-     DOMAIN argument restricts the search to the domain type.  The
-     DOMAIN argument must be a domain constant defined in the 'gdb'
-     module and described later in this chapter.
-
-     The result is a 'gdb.Symbol' object or 'None' if the symbol is not
-     found.
-
- -- Function: gdb.lookup_static_symbols (name [, domain])
-     Similar to 'gdb.lookup_static_symbol', this function searches for
-     global symbols with static linkage by name, and optionally
-     restricted by the domain argument.  However, this function returns
-     a list of all matching symbols found, not just the first one.
-
-     NAME is the name of the symbol.  It must be a string.  The optional
-     DOMAIN argument restricts the search to the domain type.  The
-     DOMAIN argument must be a domain constant defined in the 'gdb'
-     module and described later in this chapter.
-
-     The result is a list of 'gdb.Symbol' objects which could be empty
-     if no matching symbols were found.
-
-     Note that this function will not find function-scoped static
-     variables.  To look up such variables, iterate over the variables
-     of the function's 'gdb.Block' and check that 'block.addr_class' is
-     'gdb.SYMBOL_LOC_STATIC'.
-
-   A 'gdb.Symbol' object has the following attributes:
-
- -- Variable: Symbol.type
-     The type of the symbol or 'None' if no type is recorded.  This
-     attribute is represented as a 'gdb.Type' object.  *Note Types In
-     Python::.  This attribute is not writable.
-
- -- Variable: Symbol.symtab
-     The symbol table in which the symbol appears.  This attribute is
-     represented as a 'gdb.Symtab' object.  *Note Symbol Tables In
-     Python::.  This attribute is not writable.
-
- -- Variable: Symbol.line
-     The line number in the source code at which the symbol was defined.
-     This is an integer.
-
- -- Variable: Symbol.name
-     The name of the symbol as a string.  This attribute is not
-     writable.
-
- -- Variable: Symbol.linkage_name
-     The name of the symbol, as used by the linker (i.e., may be
-     mangled).  This attribute is not writable.
-
- -- Variable: Symbol.print_name
-     The name of the symbol in a form suitable for output.  This is
-     either 'name' or 'linkage_name', depending on whether the user
-     asked GDB to display demangled or mangled names.
-
- -- Variable: Symbol.addr_class
-     The address class of the symbol.  This classifies how to find the
-     value of a symbol.  Each address class is a constant defined in the
-     'gdb' module and described later in this chapter.
-
- -- Variable: Symbol.needs_frame
-     This is 'True' if evaluating this symbol's value requires a frame
-     (*note Frames In Python::) and 'False' otherwise.  Typically, local
-     variables will require a frame, but other symbols will not.
-
- -- Variable: Symbol.is_argument
-     'True' if the symbol is an argument of a function.
-
- -- Variable: Symbol.is_constant
-     'True' if the symbol is a constant.
-
- -- Variable: Symbol.is_function
-     'True' if the symbol is a function or a method.
-
- -- Variable: Symbol.is_variable
-     'True' if the symbol is a variable.
-
-   A 'gdb.Symbol' object has the following methods:
-
- -- Function: Symbol.is_valid ()
-     Returns 'True' if the 'gdb.Symbol' object is valid, 'False' if not.
-     A 'gdb.Symbol' object can become invalid if the symbol it refers to
-     does not exist in GDB any longer.  All other 'gdb.Symbol' methods
-     will throw an exception if it is invalid at the time the method is
-     called.
-
- -- Function: Symbol.value ([frame])
-     Compute the value of the symbol, as a 'gdb.Value'.  For functions,
-     this computes the address of the function, cast to the appropriate
-     type.  If the symbol requires a frame in order to compute its
-     value, then FRAME must be given.  If FRAME is not given, or if
-     FRAME is invalid, then this method will throw an exception.
-
-   The available domain categories in 'gdb.Symbol' are represented as
-constants in the 'gdb' module:
-
-'gdb.SYMBOL_UNDEF_DOMAIN'
-     This is used when a domain has not been discovered or none of the
-     following domains apply.  This usually indicates an error either in
-     the symbol information or in GDB's handling of symbols.
-
-'gdb.SYMBOL_VAR_DOMAIN'
-     This domain contains variables, function names, typedef names and
-     enum type values.
-
-'gdb.SYMBOL_STRUCT_DOMAIN'
-     This domain holds struct, union and enum type names.
-
-'gdb.SYMBOL_LABEL_DOMAIN'
-     This domain contains names of labels (for gotos).
-
-'gdb.SYMBOL_MODULE_DOMAIN'
-     This domain contains names of Fortran module types.
-
-'gdb.SYMBOL_COMMON_BLOCK_DOMAIN'
-     This domain contains names of Fortran common blocks.
-
-   The available address class categories in 'gdb.Symbol' are
-represented as constants in the 'gdb' module:
-
-'gdb.SYMBOL_LOC_UNDEF'
-     If this is returned by address class, it indicates an error either
-     in the symbol information or in GDB's handling of symbols.
-
-'gdb.SYMBOL_LOC_CONST'
-     Value is constant int.
-
-'gdb.SYMBOL_LOC_STATIC'
-     Value is at a fixed address.
-
-'gdb.SYMBOL_LOC_REGISTER'
-     Value is in a register.
-
-'gdb.SYMBOL_LOC_ARG'
-     Value is an argument.  This value is at the offset stored within
-     the symbol inside the frame's argument list.
-
-'gdb.SYMBOL_LOC_REF_ARG'
-     Value address is stored in the frame's argument list.  Just like
-     'LOC_ARG' except that the value's address is stored at the offset,
-     not the value itself.
-
-'gdb.SYMBOL_LOC_REGPARM_ADDR'
-     Value is a specified register.  Just like 'LOC_REGISTER' except the
-     register holds the address of the argument instead of the argument
-     itself.
-
-'gdb.SYMBOL_LOC_LOCAL'
-     Value is a local variable.
-
-'gdb.SYMBOL_LOC_TYPEDEF'
-     Value not used.  Symbols in the domain 'SYMBOL_STRUCT_DOMAIN' all
-     have this class.
-
-'gdb.SYMBOL_LOC_BLOCK'
-     Value is a block.
-
-'gdb.SYMBOL_LOC_CONST_BYTES'
-     Value is a byte-sequence.
-
-'gdb.SYMBOL_LOC_UNRESOLVED'
-     Value is at a fixed address, but the address of the variable has to
-     be determined from the minimal symbol table whenever the variable
-     is referenced.
-
-'gdb.SYMBOL_LOC_OPTIMIZED_OUT'
-     The value does not actually exist in the program.
-
-'gdb.SYMBOL_LOC_COMPUTED'
-     The value's address is a computed location.
-
-'gdb.SYMBOL_LOC_COMPUTED'
-     The value's address is a symbol.  This is only used for Fortran
-     common blocks.
-
-
-File: gdb.info,  Node: Symbol Tables In Python,  Next: Line Tables In Python,  Prev: Symbols In Python,  Up: Python API
-
-23.2.2.28 Symbol table representation in Python
-...............................................
-
-Access to symbol table data maintained by GDB on the inferior is exposed
-to Python via two objects: 'gdb.Symtab_and_line' and 'gdb.Symtab'.
-Symbol table and line data for a frame is returned from the 'find_sal'
-method in 'gdb.Frame' object.  *Note Frames In Python::.
-
-   For more information on GDB's symbol table management, see *note
-Examining the Symbol Table: Symbols, for more information.
-
-   A 'gdb.Symtab_and_line' object has the following attributes:
-
- -- Variable: Symtab_and_line.symtab
-     The symbol table object ('gdb.Symtab') for this frame.  This
-     attribute is not writable.
-
- -- Variable: Symtab_and_line.pc
-     Indicates the start of the address range occupied by code for the
-     current source line.  This attribute is not writable.
-
- -- Variable: Symtab_and_line.last
-     Indicates the end of the address range occupied by code for the
-     current source line.  This attribute is not writable.
-
- -- Variable: Symtab_and_line.line
-     Indicates the current line number for this object.  This attribute
-     is not writable.
-
-   A 'gdb.Symtab_and_line' object has the following methods:
-
- -- Function: Symtab_and_line.is_valid ()
-     Returns 'True' if the 'gdb.Symtab_and_line' object is valid,
-     'False' if not.  A 'gdb.Symtab_and_line' object can become invalid
-     if the Symbol table and line object it refers to does not exist in
-     GDB any longer.  All other 'gdb.Symtab_and_line' methods will throw
-     an exception if it is invalid at the time the method is called.
-
-   A 'gdb.Symtab' object has the following attributes:
-
- -- Variable: Symtab.filename
-     The symbol table's source filename.  This attribute is not
-     writable.
-
- -- Variable: Symtab.objfile
-     The symbol table's backing object file.  *Note Objfiles In
-     Python::.  This attribute is not writable.
-
- -- Variable: Symtab.producer
-     The name and possibly version number of the program that compiled
-     the code in the symbol table.  The contents of this string is up to
-     the compiler.  If no producer information is available then 'None'
-     is returned.  This attribute is not writable.
-
-   A 'gdb.Symtab' object has the following methods:
-
- -- Function: Symtab.is_valid ()
-     Returns 'True' if the 'gdb.Symtab' object is valid, 'False' if not.
-     A 'gdb.Symtab' object can become invalid if the symbol table it
-     refers to does not exist in GDB any longer.  All other 'gdb.Symtab'
-     methods will throw an exception if it is invalid at the time the
-     method is called.
-
- -- Function: Symtab.fullname ()
-     Return the symbol table's source absolute file name.
-
- -- Function: Symtab.global_block ()
-     Return the global block of the underlying symbol table.  *Note
-     Blocks In Python::.
-
- -- Function: Symtab.static_block ()
-     Return the static block of the underlying symbol table.  *Note
-     Blocks In Python::.
-
- -- Function: Symtab.linetable ()
-     Return the line table associated with the symbol table.  *Note Line
-     Tables In Python::.
-
-
-File: gdb.info,  Node: Line Tables In Python,  Next: Breakpoints In Python,  Prev: Symbol Tables In Python,  Up: Python API
-
-23.2.2.29 Manipulating line tables using Python
-...............................................
-
-Python code can request and inspect line table information from a symbol
-table that is loaded in GDB.  A line table is a mapping of source lines
-to their executable locations in memory.  To acquire the line table
-information for a particular symbol table, use the 'linetable' function
-(*note Symbol Tables In Python::).
-
-   A 'gdb.LineTable' is iterable.  The iterator returns 'LineTableEntry'
-objects that correspond to the source line and address for each line
-table entry.  'LineTableEntry' objects have the following attributes:
-
- -- Variable: LineTableEntry.line
-     The source line number for this line table entry.  This number
-     corresponds to the actual line of source.  This attribute is not
-     writable.
-
- -- Variable: LineTableEntry.pc
-     The address that is associated with the line table entry where the
-     executable code for that source line resides in memory.  This
-     attribute is not writable.
-
-   As there can be multiple addresses for a single source line, you may
-receive multiple 'LineTableEntry' objects with matching 'line'
-attributes, but with different 'pc' attributes.  The iterator is sorted
-in ascending 'pc' order.  Here is a small example illustrating iterating
-over a line table.
-
-     symtab = gdb.selected_frame().find_sal().symtab
-     linetable = symtab.linetable()
-     for line in linetable:
-        print "Line: "+str(line.line)+" Address: "+hex(line.pc)
-
-   This will have the following output:
-
-     Line: 33 Address: 0x4005c8L
-     Line: 37 Address: 0x4005caL
-     Line: 39 Address: 0x4005d2L
-     Line: 40 Address: 0x4005f8L
-     Line: 42 Address: 0x4005ffL
-     Line: 44 Address: 0x400608L
-     Line: 42 Address: 0x40060cL
-     Line: 45 Address: 0x400615L
-
-   In addition to being able to iterate over a 'LineTable', it also has
-the following direct access methods:
-
- -- Function: LineTable.line (line)
-     Return a Python 'Tuple' of 'LineTableEntry' objects for any entries
-     in the line table for the given LINE, which specifies the source
-     code line.  If there are no entries for that source code LINE, the
-     Python 'None' is returned.
-
- -- Function: LineTable.has_line (line)
-     Return a Python 'Boolean' indicating whether there is an entry in
-     the line table for this source line.  Return 'True' if an entry is
-     found, or 'False' if not.
-
- -- Function: LineTable.source_lines ()
-     Return a Python 'List' of the source line numbers in the symbol
-     table.  Only lines with executable code locations are returned.
-     The contents of the 'List' will just be the source line entries
-     represented as Python 'Long' values.
-
-
-File: gdb.info,  Node: Breakpoints In Python,  Next: Finish Breakpoints in Python,  Prev: Line Tables In Python,  Up: Python API
-
-23.2.2.30 Manipulating breakpoints using Python
-...............................................
-
-Python code can manipulate breakpoints via the 'gdb.Breakpoint' class.
-
-   A breakpoint can be created using one of the two forms of the
-'gdb.Breakpoint' constructor.  The first one accepts a string like one
-would pass to the 'break' (*note Setting Breakpoints: Set Breaks.) and
-'watch' (*note Setting Watchpoints: Set Watchpoints.) commands, and can
-be used to create both breakpoints and watchpoints.  The second accepts
-separate Python arguments similar to *note Explicit Locations::, and can
-only be used to create breakpoints.
-
- -- Function: Breakpoint.__init__ (spec [, type ][, wp_class ][,
-          internal ][, temporary ][, qualified ])
-     Create a new breakpoint according to SPEC, which is a string naming
-     the location of a breakpoint, or an expression that defines a
-     watchpoint.  The string should describe a location in a format
-     recognized by the 'break' command (*note Setting Breakpoints: Set
-     Breaks.) or, in the case of a watchpoint, by the 'watch' command
-     (*note Setting Watchpoints: Set Watchpoints.).
-
-     The optional TYPE argument specifies the type of the breakpoint to
-     create, as defined below.
-
-     The optional WP_CLASS argument defines the class of watchpoint to
-     create, if TYPE is 'gdb.BP_WATCHPOINT'.  If WP_CLASS is omitted, it
-     defaults to 'gdb.WP_WRITE'.
-
-     The optional INTERNAL argument allows the breakpoint to become
-     invisible to the user.  The breakpoint will neither be reported
-     when created, nor will it be listed in the output from 'info
-     breakpoints' (but will be listed with the 'maint info breakpoints'
-     command).
-
-     The optional TEMPORARY argument makes the breakpoint a temporary
-     breakpoint.  Temporary breakpoints are deleted after they have been
-     hit.  Any further access to the Python breakpoint after it has been
-     hit will result in a runtime error (as that breakpoint has now been
-     automatically deleted).
-
-     The optional QUALIFIED argument is a boolean that allows
-     interpreting the function passed in 'spec' as a fully-qualified
-     name.  It is equivalent to 'break''s '-qualified' flag (*note
-     Linespec Locations:: and *note Explicit Locations::).
-
- -- Function: Breakpoint.__init__ ([ source ][, function ][, label ][,
-          line ], ][ internal ][, temporary ][, qualified ])
-     This second form of creating a new breakpoint specifies the
-     explicit location (*note Explicit Locations::) using keywords.  The
-     new breakpoint will be created in the specified source file SOURCE,
-     at the specified FUNCTION, LABEL and LINE.
 
-     INTERNAL, TEMPORARY and QUALIFIED have the same usage as explained
-     previously.
+     def thread_stopped(event):
+         if event.inferior_thread is not None:
+             thread = event.inferior_thread
+         else:
+             thread = gdb.selected_thread()
+         inferior = thread.inferior
+         inferior._last_stop_time = datetime.datetime.today()
 
-   The available types are represented by constants defined in the 'gdb'
-module:
-
-'gdb.BP_BREAKPOINT'
-     Normal code breakpoint.
-
-'gdb.BP_WATCHPOINT'
-     Watchpoint breakpoint.
-
-'gdb.BP_HARDWARE_WATCHPOINT'
-     Hardware assisted watchpoint.
-
-'gdb.BP_READ_WATCHPOINT'
-     Hardware assisted read watchpoint.
-
-'gdb.BP_ACCESS_WATCHPOINT'
-     Hardware assisted access watchpoint.
-
-   The available watchpoint types represented by constants are defined
-in the 'gdb' module:
-
-'gdb.WP_READ'
-     Read only watchpoint.
-
-'gdb.WP_WRITE'
-     Write only watchpoint.
-
-'gdb.WP_ACCESS'
-     Read/Write watchpoint.
-
- -- Function: Breakpoint.stop (self)
-     The 'gdb.Breakpoint' class can be sub-classed and, in particular,
-     you may choose to implement the 'stop' method.  If this method is
-     defined in a sub-class of 'gdb.Breakpoint', it will be called when
-     the inferior reaches any location of a breakpoint which
-     instantiates that sub-class.  If the method returns 'True', the
-     inferior will be stopped at the location of the breakpoint,
-     otherwise the inferior will continue.
-
-     If there are multiple breakpoints at the same location with a
-     'stop' method, each one will be called regardless of the return
-     status of the previous.  This ensures that all 'stop' methods have
-     a chance to execute at that location.  In this scenario if one of
-     the methods returns 'True' but the others return 'False', the
-     inferior will still be stopped.
-
-     You should not alter the execution state of the inferior (i.e.,
-     step, next, etc.), alter the current frame context (i.e., change
-     the current active frame), or alter, add or delete any breakpoint.
-     As a general rule, you should not alter any data within GDB or the
-     inferior at this time.
-
-     Example 'stop' implementation:
-
-          class MyBreakpoint (gdb.Breakpoint):
-                def stop (self):
-                  inf_val = gdb.parse_and_eval("foo")
-                  if inf_val == 3:
-                    return True
-                  return False
-
- -- Function: Breakpoint.is_valid ()
-     Return 'True' if this 'Breakpoint' object is valid, 'False'
-     otherwise.  A 'Breakpoint' object can become invalid if the user
-     deletes the breakpoint.  In this case, the object still exists, but
-     the underlying breakpoint does not.  In the cases of watchpoint
-     scope, the watchpoint remains valid even if execution of the
-     inferior leaves the scope of that watchpoint.
-
- -- Function: Breakpoint.delete ()
-     Permanently deletes the GDB breakpoint.  This also invalidates the
-     Python 'Breakpoint' object.  Any further access to this object's
-     attributes or methods will raise an error.
-
- -- Variable: Breakpoint.enabled
-     This attribute is 'True' if the breakpoint is enabled, and 'False'
-     otherwise.  This attribute is writable.  You can use it to enable
-     or disable the breakpoint.
-
- -- Variable: Breakpoint.silent
-     This attribute is 'True' if the breakpoint is silent, and 'False'
-     otherwise.  This attribute is writable.
-
-     Note that a breakpoint can also be silent if it has commands and
-     the first command is 'silent'.  This is not reported by the
-     'silent' attribute.
-
- -- Variable: Breakpoint.pending
-     This attribute is 'True' if the breakpoint is pending, and 'False'
-     otherwise.  *Note Set Breaks::.  This attribute is read-only.
-
- -- Variable: Breakpoint.thread
-     If the breakpoint is thread-specific, this attribute holds the
-     thread's global id.  If the breakpoint is not thread-specific, this
-     attribute is 'None'.  This attribute is writable.
-
- -- Variable: Breakpoint.task
-     If the breakpoint is Ada task-specific, this attribute holds the
-     Ada task id.  If the breakpoint is not task-specific (or the
-     underlying language is not Ada), this attribute is 'None'.  This
-     attribute is writable.
-
- -- Variable: Breakpoint.ignore_count
-     This attribute holds the ignore count for the breakpoint, an
-     integer.  This attribute is writable.
-
- -- Variable: Breakpoint.number
-     This attribute holds the breakpoint's number -- the identifier used
-     by the user to manipulate the breakpoint.  This attribute is not
-     writable.
-
- -- Variable: Breakpoint.type
-     This attribute holds the breakpoint's type -- the identifier used
-     to determine the actual breakpoint type or use-case.  This
-     attribute is not writable.
-
- -- Variable: Breakpoint.visible
-     This attribute tells whether the breakpoint is visible to the user
-     when set, or when the 'info breakpoints' command is run.  This
-     attribute is not writable.
-
- -- Variable: Breakpoint.temporary
-     This attribute indicates whether the breakpoint was created as a
-     temporary breakpoint.  Temporary breakpoints are automatically
-     deleted after that breakpoint has been hit.  Access to this
-     attribute, and all other attributes and functions other than the
-     'is_valid' function, will result in an error after the breakpoint
-     has been hit (as it has been automatically deleted).  This
-     attribute is not writable.
-
- -- Variable: Breakpoint.hit_count
-     This attribute holds the hit count for the breakpoint, an integer.
-     This attribute is writable, but currently it can only be set to
-     zero.
-
- -- Variable: Breakpoint.location
-     This attribute holds the location of the breakpoint, as specified
-     by the user.  It is a string.  If the breakpoint does not have a
-     location (that is, it is a watchpoint) the attribute's value is
-     'None'.  This attribute is not writable.
-
- -- Variable: Breakpoint.expression
-     This attribute holds a breakpoint expression, as specified by the
-     user.  It is a string.  If the breakpoint does not have an
-     expression (the breakpoint is not a watchpoint) the attribute's
-     value is 'None'.  This attribute is not writable.
-
- -- Variable: Breakpoint.condition
-     This attribute holds the condition of the breakpoint, as specified
-     by the user.  It is a string.  If there is no condition, this
-     attribute's value is 'None'.  This attribute is writable.
-
- -- Variable: Breakpoint.commands
-     This attribute holds the commands attached to the breakpoint.  If
-     there are commands, this attribute's value is a string holding all
-     the commands, separated by newlines.  If there are no commands,
-     this attribute is 'None'.  This attribute is writable.
-
-
-File: gdb.info,  Node: Finish Breakpoints in Python,  Next: Lazy Strings In Python,  Prev: Breakpoints In Python,  Up: Python API
-
-23.2.2.31 Finish Breakpoints
-............................
-
-A finish breakpoint is a temporary breakpoint set at the return address
-of a frame, based on the 'finish' command.  'gdb.FinishBreakpoint'
-extends 'gdb.Breakpoint'.  The underlying breakpoint will be disabled
-and deleted when the execution will run out of the breakpoint scope
-(i.e. 'Breakpoint.stop' or 'FinishBreakpoint.out_of_scope' triggered).
-Finish breakpoints are thread specific and must be create with the right
-thread selected.
-
- -- Function: FinishBreakpoint.__init__ ([frame] [, internal])
-     Create a finish breakpoint at the return address of the 'gdb.Frame'
-     object FRAME.  If FRAME is not provided, this defaults to the
-     newest frame.  The optional INTERNAL argument allows the breakpoint
-     to become invisible to the user.  *Note Breakpoints In Python::,
-     for further details about this argument.
-
- -- Function: FinishBreakpoint.out_of_scope (self)
-     In some circumstances (e.g. 'longjmp', C++ exceptions, GDB 'return'
-     command, ...), a function may not properly terminate, and thus
-     never hit the finish breakpoint.  When GDB notices such a
-     situation, the 'out_of_scope' callback will be triggered.
-
-     You may want to sub-class 'gdb.FinishBreakpoint' and override this
-     method:
-
-          class MyFinishBreakpoint (gdb.FinishBreakpoint)
-              def stop (self):
-                  print "normal finish"
-                  return True
-
-              def out_of_scope ():
-                  print "abnormal finish"
-
- -- Variable: FinishBreakpoint.return_value
-     When GDB is stopped at a finish breakpoint and the frame used to
-     build the 'gdb.FinishBreakpoint' object had debug symbols, this
-     attribute will contain a 'gdb.Value' object corresponding to the
-     return value of the function.  The value will be 'None' if the
-     function return type is 'void' or if the return value was not
-     computable.  This attribute is not writable.
-
-
-File: gdb.info,  Node: Lazy Strings In Python,  Next: Architectures In Python,  Prev: Finish Breakpoints in Python,  Up: Python API
-
-23.2.2.32 Python representation of lazy strings
-...............................................
-
-A "lazy string" is a string whose contents is not retrieved or encoded
-until it is needed.
-
-   A 'gdb.LazyString' is represented in GDB as an 'address' that points
-to a region of memory, an 'encoding' that will be used to encode that
-region of memory, and a 'length' to delimit the region of memory that
-represents the string.  The difference between a 'gdb.LazyString' and a
-string wrapped within a 'gdb.Value' is that a 'gdb.LazyString' will be
-treated differently by GDB when printing.  A 'gdb.LazyString' is
-retrieved and encoded during printing, while a 'gdb.Value' wrapping a
-string is immediately retrieved and encoded on creation.
-
-   A 'gdb.LazyString' object has the following functions:
-
- -- Function: LazyString.value ()
-     Convert the 'gdb.LazyString' to a 'gdb.Value'.  This value will
-     point to the string in memory, but will lose all the delayed
-     retrieval, encoding and handling that GDB applies to a
-     'gdb.LazyString'.
-
- -- Variable: LazyString.address
-     This attribute holds the address of the string.  This attribute is
-     not writable.
-
- -- Variable: LazyString.length
-     This attribute holds the length of the string in characters.  If
-     the length is -1, then the string will be fetched and encoded up to
-     the first null of appropriate width.  This attribute is not
-     writable.
-
- -- Variable: LazyString.encoding
-     This attribute holds the encoding that will be applied to the
-     string when the string is printed by GDB.  If the encoding is not
-     set, or contains an empty string, then GDB will select the most
-     appropriate encoding when the string is printed.  This attribute is
-     not writable.
-
- -- Variable: LazyString.type
-     This attribute holds the type that is represented by the lazy
-     string's type.  For a lazy string this is a pointer or array type.
-     To resolve this to the lazy string's character type, use the type's
-     'target' method.  *Note Types In Python::.  This attribute is not
-     writable.
-
-
-File: gdb.info,  Node: Architectures In Python,  Prev: Lazy Strings In Python,  Up: Python API
-
-23.2.2.33 Python representation of architectures
-................................................
-
-GDB uses architecture specific parameters and artifacts in a number of
-its various computations.  An architecture is represented by an instance
-of the 'gdb.Architecture' class.
-
-   A 'gdb.Architecture' class has the following methods:
-
- -- Function: Architecture.name ()
-     Return the name (string value) of the architecture.
-
- -- Function: Architecture.disassemble (START_PC [, END_PC [, COUNT]])
-     Return a list of disassembled instructions starting from the memory
-     address START_PC.  The optional arguments END_PC and COUNT
-     determine the number of instructions in the returned list.  If both
-     the optional arguments END_PC and COUNT are specified, then a list
-     of at most COUNT disassembled instructions whose start address
-     falls in the closed memory address interval from START_PC to END_PC
-     are returned.  If END_PC is not specified, but COUNT is specified,
-     then COUNT number of instructions starting from the address
-     START_PC are returned.  If COUNT is not specified but END_PC is
-     specified, then all instructions whose start address falls in the
-     closed memory address interval from START_PC to END_PC are
-     returned.  If neither END_PC nor COUNT are specified, then a single
-     instruction at START_PC is returned.  For all of these cases, each
-     element of the returned list is a Python 'dict' with the following
-     string keys:
-
-     'addr'
-          The value corresponding to this key is a Python long integer
-          capturing the memory address of the instruction.
-
-     'asm'
-          The value corresponding to this key is a string value which
-          represents the instruction with assembly language mnemonics.
-          The assembly language flavor used is the same as that
-          specified by the current CLI variable 'disassembly-flavor'.
-          *Note Machine Code::.
-
-     'length'
-          The value corresponding to this key is the length (integer
-          value) of the instruction in bytes.
-
-
-File: gdb.info,  Node: Python Auto-loading,  Next: Python modules,  Prev: Python API,  Up: Python
-
-23.2.3 Python Auto-loading
---------------------------
-
-When a new object file is read (for example, due to the 'file' command,
-or because the inferior has loaded a shared library), GDB will look for
-Python support scripts in several ways: 'OBJFILE-gdb.py' and
-'.debug_gdb_scripts' section.  *Note Auto-loading extensions::.
-
-   The auto-loading feature is useful for supplying application-specific
-debugging commands and scripts.
-
-   Auto-loading can be enabled or disabled, and the list of auto-loaded
-scripts can be printed.
-
-'set auto-load python-scripts [on|off]'
-     Enable or disable the auto-loading of Python scripts.
-
-'show auto-load python-scripts'
-     Show whether auto-loading of Python scripts is enabled or disabled.
-
-'info auto-load python-scripts [REGEXP]'
-     Print the list of all Python scripts that GDB auto-loaded.
-
-     Also printed is the list of Python scripts that were mentioned in
-     the '.debug_gdb_scripts' section and were either not found (*note
-     dotdebug_gdb_scripts section::) or were not auto-loaded due to
-     'auto-load safe-path' rejection (*note Auto-loading::).  This is
-     useful because their names are not printed when GDB tries to load
-     them and fails.  There may be many of them, and printing an error
-     message for each one is problematic.
-
-     If REGEXP is supplied only Python scripts with matching names are
-     printed.
-
-     Example:
-
-          (gdb) info auto-load python-scripts
-          Loaded Script
-          Yes    py-section-script.py
-                 full name: /tmp/py-section-script.py
-          No     my-foo-pretty-printers.py
-
-   When reading an auto-loaded file or script, GDB sets the "current
-objfile".  This is available via the 'gdb.current_objfile' function
-(*note Objfiles In Python::).  This can be useful for registering
-objfile-specific pretty-printers and frame-filters.
-
-
-File: gdb.info,  Node: Python modules,  Prev: Python Auto-loading,  Up: Python
-
-23.2.4 Python modules
----------------------
-
-GDB comes with several modules to assist writing Python code.
-
-* Menu:
-
-* gdb.printing::       Building and registering pretty-printers.
-* gdb.types::          Utilities for working with types.
-* gdb.prompt::         Utilities for prompt value substitution.
-
-
-File: gdb.info,  Node: gdb.printing,  Next: gdb.types,  Up: Python modules
-
-23.2.4.1 gdb.printing
-.....................
-
-This module provides a collection of utilities for working with
-pretty-printers.
-
-'PrettyPrinter (NAME, SUBPRINTERS=None)'
-     This class specifies the API that makes 'info pretty-printer',
-     'enable pretty-printer' and 'disable pretty-printer' work.
-     Pretty-printers should generally inherit from this class.
-
-'SubPrettyPrinter (NAME)'
-     For printers that handle multiple types, this class specifies the
-     corresponding API for the subprinters.
-
-'RegexpCollectionPrettyPrinter (NAME)'
-     Utility class for handling multiple printers, all recognized via
-     regular expressions.  *Note Writing a Pretty-Printer::, for an
-     example.
-
-'FlagEnumerationPrinter (NAME)'
-     A pretty-printer which handles printing of 'enum' values.  Unlike
-     GDB's built-in 'enum' printing, this printer attempts to work
-     properly when there is some overlap between the enumeration
-     constants.  The argument NAME is the name of the printer and also
-     the name of the 'enum' type to look up.
-
-'register_pretty_printer (OBJ, PRINTER, REPLACE=False)'
-     Register PRINTER with the pretty-printer list of OBJ.  If REPLACE
-     is 'True' then any existing copy of the printer is replaced.
-     Otherwise a 'RuntimeError' exception is raised if a printer with
-     the same name already exists.
-
-
-File: gdb.info,  Node: gdb.types,  Next: gdb.prompt,  Prev: gdb.printing,  Up: Python modules
-
-23.2.4.2 gdb.types
-..................
-
-This module provides a collection of utilities for working with
-'gdb.Type' objects.
-
-'get_basic_type (TYPE)'
-     Return TYPE with const and volatile qualifiers stripped, and with
-     typedefs and C++ references converted to the underlying type.
-
-     C++ example:
-
-          typedef const int const_int;
-          const_int foo (3);
-          const_int& foo_ref (foo);
-          int main () { return 0; }
-
-     Then in gdb:
-
-          (gdb) start
-          (gdb) python import gdb.types
-          (gdb) python foo_ref = gdb.parse_and_eval("foo_ref")
-          (gdb) python print gdb.types.get_basic_type(foo_ref.type)
-          int
-
-'has_field (TYPE, FIELD)'
-     Return 'True' if TYPE, assumed to be a type with fields (e.g., a
-     structure or union), has field FIELD.
-
-'make_enum_dict (ENUM_TYPE)'
-     Return a Python 'dictionary' type produced from ENUM_TYPE.
-
-'deep_items (TYPE)'
-     Returns a Python iterator similar to the standard
-     'gdb.Type.iteritems' method, except that the iterator returned by
-     'deep_items' will recursively traverse anonymous struct or union
-     fields.  For example:
-
-          struct A
-          {
-              int a;
-              union {
-                  int b0;
-                  int b1;
-              };
-          };
-
-     Then in GDB:
-          (gdb) python import gdb.types
-          (gdb) python struct_a = gdb.lookup_type("struct A")
-          (gdb) python print struct_a.keys ()
-          {['a', '']}
-          (gdb) python print [k for k,v in gdb.types.deep_items(struct_a)]
-          {['a', 'b0', 'b1']}
-
-'get_type_recognizers ()'
-     Return a list of the enabled type recognizers for the current
-     context.  This is called by GDB during the type-printing process
-     (*note Type Printing API::).
-
-'apply_type_recognizers (recognizers, type_obj)'
-     Apply the type recognizers, RECOGNIZERS, to the type object
-     TYPE_OBJ.  If any recognizer returns a string, return that string.
-     Otherwise, return 'None'.  This is called by GDB during the
-     type-printing process (*note Type Printing API::).
-
-'register_type_printer (locus, printer)'
-     This is a convenience function to register a type printer PRINTER.
-     The printer must implement the type printer protocol.  The LOCUS
-     argument is either a 'gdb.Objfile', in which case the printer is
-     registered with that objfile; a 'gdb.Progspace', in which case the
-     printer is registered with that progspace; or 'None', in which case
-     the printer is registered globally.
-
-'TypePrinter'
-     This is a base class that implements the type printer protocol.
-     Type printers are encouraged, but not required, to derive from this
-     class.  It defines a constructor:
-
-      -- Method on TypePrinter: __init__ (self, name)
-          Initialize the type printer with the given name.  The new
-          printer starts in the enabled state.
-
-
-File: gdb.info,  Node: gdb.prompt,  Prev: gdb.types,  Up: Python modules
-
-23.2.4.3 gdb.prompt
-...................
-
-This module provides a method for prompt value-substitution.
-
-'substitute_prompt (STRING)'
-     Return STRING with escape sequences substituted by values.  Some
-     escape sequences take arguments.  You can specify arguments inside
-     "{}" immediately following the escape sequence.
-
-     The escape sequences you can pass to this function are:
-
-     '\\'
-          Substitute a backslash.
-     '\e'
-          Substitute an ESC character.
-     '\f'
-          Substitute the selected frame; an argument names a frame
-          parameter.
-     '\n'
-          Substitute a newline.
-     '\p'
-          Substitute a parameter's value; the argument names the
-          parameter.
-     '\r'
-          Substitute a carriage return.
-     '\t'
-          Substitute the selected thread; an argument names a thread
-          parameter.
-     '\v'
-          Substitute the version of GDB.
-     '\w'
-          Substitute the current working directory.
-     '\['
-          Begin a sequence of non-printing characters.  These sequences
-          are typically used with the ESC character, and are not counted
-          in the string length.  Example: "\[\e[0;34m\](gdb)\[\e[0m\]"
-          will return a blue-colored "(gdb)" prompt where the length is
-          five.
-     '\]'
-          End a sequence of non-printing characters.
-
-     For example:
-
-          substitute_prompt ("frame: \f, args: \p{print frame-arguments}")
-
-will return the string:
-
-          "frame: main, args: scalars"
-
-
-File: gdb.info,  Node: Guile,  Next: Auto-loading extensions,  Prev: Python,  Up: Extending GDB
-
-23.3 Extending GDB using Guile
-==============================
-
-You can extend GDB using the Guile implementation of the Scheme
-programming language (http://www.gnu.org/software/guile/).  This feature
-is available only if GDB was configured using '--with-guile'.
-
-* Menu:
-
-* Guile Introduction::     Introduction to Guile scripting in GDB
-* Guile Commands::         Accessing Guile from GDB
-* Guile API::              Accessing GDB from Guile
-* Guile Auto-loading::     Automatically loading Guile code
-* Guile Modules::          Guile modules provided by GDB
-
-
-File: gdb.info,  Node: Guile Introduction,  Next: Guile Commands,  Up: Guile
-
-23.3.1 Guile Introduction
--------------------------
-
-Guile is an implementation of the Scheme programming language and is the
-GNU project's official extension language.
-
-   Guile support in GDB follows the Python support in GDB reasonably
-closely, so concepts there should carry over.  However, some things are
-done differently where it makes sense.
-
-   GDB requires Guile version 2.0 or greater.  Older versions are not
-supported.
-
-   Guile scripts used by GDB should be installed in
-'DATA-DIRECTORY/guile', where DATA-DIRECTORY is the data directory as
-determined at GDB startup (*note Data Files::).  This directory, known
-as the "guile directory", is automatically added to the Guile Search
-Path in order to allow the Guile interpreter to locate all scripts
-installed at this location.
-
-
-File: gdb.info,  Node: Guile Commands,  Next: Guile API,  Prev: Guile Introduction,  Up: Guile
-
-23.3.2 Guile Commands
----------------------
-
-GDB provides two commands for accessing the Guile interpreter:
-
-'guile-repl'
-'gr'
-     The 'guile-repl' command can be used to start an interactive Guile
-     prompt or "repl".  To return to GDB, type ',q' or the 'EOF'
-     character (e.g., 'Ctrl-D' on an empty prompt).  These commands do
-     not take any arguments.
-
-'guile [SCHEME-EXPRESSION]'
-'gu [SCHEME-EXPRESSION]'
-     The 'guile' command can be used to evaluate a Scheme expression.
-
-     If given an argument, GDB will pass the argument to the Guile
-     interpreter for evaluation.
-
-          (gdb) guile (display (+ 20 3)) (newline)
-          23
-
-     The result of the Scheme expression is displayed using normal Guile
-     rules.
-
-          (gdb) guile (+ 20 3)
-          23
-
-     If you do not provide an argument to 'guile', it will act as a
-     multi-line command, like 'define'.  In this case, the Guile script
-     is made up of subsequent command lines, given after the 'guile'
-     command.  This command list is terminated using a line containing
-     'end'.  For example:
-
-          (gdb) guile
-          >(display 23)
-          >(newline)
-          >end
-          23
-
-   It is also possible to execute a Guile script from the GDB
-interpreter:
-
-'source script-name'
-     The script name must end with '.scm' and GDB must be configured to
-     recognize the script language based on filename extension using the
-     'script-extension' setting.  *Note Extending GDB: Extending GDB.
-
-'guile (load "script-name")'
-     This method uses the 'load' Guile function.  It takes a string
-     argument that is the name of the script to load.  See the Guile
-     documentation for a description of this function.  (*note
-     (guile)Loading::).
-
-
-File: gdb.info,  Node: Guile API,  Next: Guile Auto-loading,  Prev: Guile Commands,  Up: Guile
-
-23.3.3 Guile API
-----------------
-
-You can get quick online help for GDB's Guile API by issuing the command
-'help guile', or by issuing the command ',help' from an interactive
-Guile session.  Furthermore, most Guile procedures provided by GDB have
-doc strings which can be obtained with ',describe PROCEDURE-NAME' or ',d
-PROCEDURE-NAME' from the Guile interactive prompt.
-
-* Menu:
-
-* Basic Guile::              Basic Guile Functions
-* Guile Configuration::      Guile configuration variables
-* GDB Scheme Data Types::    Scheme representations of GDB objects
-* Guile Exception Handling:: How Guile exceptions are translated
-* Values From Inferior In Guile:: Guile representation of values
-* Arithmetic In Guile::      Arithmetic in Guile
-* Types In Guile::           Guile representation of types
-* Guile Pretty Printing API:: Pretty-printing values with Guile
-* Selecting Guile Pretty-Printers:: How GDB chooses a pretty-printer
-* Writing a Guile Pretty-Printer:: Writing a pretty-printer
-* Commands In Guile::        Implementing new commands in Guile
-* Parameters In Guile::      Adding new GDB parameters
-* Progspaces In Guile::      Program spaces
-* Objfiles In Guile::        Object files in Guile
-* Frames In Guile::          Accessing inferior stack frames from Guile
-* Blocks In Guile::          Accessing blocks from Guile
-* Symbols In Guile::         Guile representation of symbols
-* Symbol Tables In Guile::   Guile representation of symbol tables
-* Breakpoints In Guile::     Manipulating breakpoints using Guile
-* Lazy Strings In Guile::    Guile representation of lazy strings
-* Architectures In Guile::   Guile representation of architectures
-* Disassembly In Guile::     Disassembling instructions from Guile
-* I/O Ports in Guile::       GDB I/O ports
-* Memory Ports in Guile::    Accessing memory through ports and bytevectors
-* Iterators In Guile::       Basic iterator support
-
-
-File: gdb.info,  Node: Basic Guile,  Next: Guile Configuration,  Up: Guile API
-
-23.3.3.1 Basic Guile
-....................
-
-At startup, GDB overrides Guile's 'current-output-port' and
-'current-error-port' to print using GDB's output-paging streams.  A
-Guile program which outputs to one of these streams may have its output
-interrupted by the user (*note Screen Size::).  In this situation, a
-Guile 'signal' exception is thrown with value 'SIGINT'.
-
-   Guile's history mechanism uses the same naming as GDB's, namely the
-user of dollar-variables (e.g., $1, $2, etc.).  The results of
-evaluations in Guile and in GDB are counted separately, '$1' in Guile is
-not the same value as '$1' in GDB.
-
-   GDB is not thread-safe.  If your Guile program uses multiple threads,
-you must be careful to only call GDB-specific functions in the GDB
-thread.
-
-   Some care must be taken when writing Guile code to run in GDB.  Two
-things are worth noting in particular:
-
-   * GDB installs handlers for 'SIGCHLD' and 'SIGINT'.  Guile code must
-     not override these, or even change the options using 'sigaction'.
-     If your program changes the handling of these signals, GDB will
-     most likely stop working correctly.  Note that it is unfortunately
-     common for GUI toolkits to install a 'SIGCHLD' handler.
-
-   * GDB takes care to mark its internal file descriptors as
-     close-on-exec.  However, this cannot be done in a thread-safe way
-     on all platforms.  Your Guile programs should be aware of this and
-     should both create new file descriptors with the close-on-exec flag
-     set and arrange to close unneeded file descriptors before starting
-     a child process.
-
-   GDB introduces a new Guile module, named 'gdb'.  All methods and
-classes added by GDB are placed in this module.  GDB does not
-automatically 'import' the 'gdb' module, scripts must do this
-themselves.  There are various options for how to import a module, so
-GDB leaves the choice of how the 'gdb' module is imported to the user.
-To simplify interactive use, it is recommended to add one of the
-following to your ~/.gdbinit.
-
-     guile (use-modules (gdb))
-
-     guile (use-modules ((gdb) #:renamer (symbol-prefix-proc 'gdb:)))
-
-   Which one to choose depends on your preference.  The second one adds
-'gdb:' as a prefix to all module functions and variables.
-
-   The rest of this manual assumes the 'gdb' module has been imported
-without any prefix.  See the Guile documentation for 'use-modules' for
-more information (*note (guile)Using Guile Modules::).
-
-   Example:
-
-     (gdb) guile (value-type (make-value 1))
-     ERROR: Unbound variable: value-type
-     Error while executing Scheme code.
-     (gdb) guile (use-modules (gdb))
-     (gdb) guile (value-type (make-value 1))
-     int
-     (gdb)
-
-   The '(gdb)' module provides these basic Guile functions.
-
- -- Scheme Procedure: execute command [#:from-tty boolean] [#:to-string
-          boolean]
-     Evaluate COMMAND, a string, as a GDB CLI command.  If a GDB
-     exception happens while COMMAND runs, it is translated as described
-     in *note Guile Exception Handling: Guile Exception Handling.
-
-     FROM-TTY specifies whether GDB ought to consider this command as
-     having originated from the user invoking it interactively.  It must
-     be a boolean value.  If omitted, it defaults to '#f'.
-
-     By default, any output produced by COMMAND is sent to GDB's
-     standard output (and to the log output if logging is turned on).
-     If the TO-STRING parameter is '#t', then output will be collected
-     by 'execute' and returned as a string.  The default is '#f', in
-     which case the return value is unspecified.  If TO-STRING is '#t',
-     the GDB virtual terminal will be temporarily set to unlimited width
-     and height, and its pagination will be disabled; *note Screen
-     Size::.
-
- -- Scheme Procedure: history-ref number
-     Return a value from GDB's value history (*note Value History::).
-     The NUMBER argument indicates which history element to return.  If
-     NUMBER is negative, then GDB will take its absolute value and count
-     backward from the last element (i.e., the most recent element) to
-     find the value to return.  If NUMBER is zero, then GDB will return
-     the most recent element.  If the element specified by NUMBER
-     doesn't exist in the value history, a 'gdb:error' exception will be
-     raised.
-
-     If no exception is raised, the return value is always an instance
-     of '<gdb:value>' (*note Values From Inferior In Guile::).
-
-     _Note:_ GDB's value history is independent of Guile's.  '$1' in
-     GDB's value history contains the result of evaluating an expression
-     from GDB's command line and '$1' from Guile's history contains the
-     result of evaluating an expression from Guile's command line.
-
- -- Scheme Procedure: history-append! value
-     Append VALUE, an instance of '<gdb:value>', to GDB's value history.
-     Return its index in the history.
-
-     Putting into history values returned by Guile extensions will allow
-     the user convenient access to those values via CLI history
-     facilities.
-
- -- Scheme Procedure: parse-and-eval expression
-     Parse EXPRESSION as an expression in the current language, evaluate
-     it, and return the result as a '<gdb:value>'.  The EXPRESSION must
-     be a string.
-
-     This function can be useful when implementing a new command (*note
-     Commands In Guile::), as it provides a way to parse the command's
-     arguments as an expression.  It is also is useful when computing
-     values.  For example, it is the only way to get the value of a
-     convenience variable (*note Convenience Vars::) as a '<gdb:value>'.
-
-
-File: gdb.info,  Node: Guile Configuration,  Next: GDB Scheme Data Types,  Prev: Basic Guile,  Up: Guile API
-
-23.3.3.2 Guile Configuration
-............................
-
-GDB provides these Scheme functions to access various configuration
-parameters.
-
- -- Scheme Procedure: data-directory
-     Return a string containing GDB's data directory.  This directory
-     contains GDB's ancillary files.
-
- -- Scheme Procedure: guile-data-directory
-     Return a string containing GDB's Guile data directory.  This
-     directory contains the Guile modules provided by GDB.
-
- -- Scheme Procedure: gdb-version
-     Return a string containing the GDB version.
-
- -- Scheme Procedure: host-config
-     Return a string containing the host configuration.  This is the
-     string passed to '--host' when GDB was configured.
-
- -- Scheme Procedure: target-config
-     Return a string containing the target configuration.  This is the
-     string passed to '--target' when GDB was configured.
-
-
-File: gdb.info,  Node: GDB Scheme Data Types,  Next: Guile Exception Handling,  Prev: Guile Configuration,  Up: Guile API
-
-23.3.3.3 GDB Scheme Data Types
-..............................
-
-The values exposed by GDB to Guile are known as "GDB objects".  There
-are several kinds of GDB object, and each is disjoint from all other
-types known to Guile.
-
- -- Scheme Procedure: gdb-object-kind object
-     Return the kind of the GDB object, e.g., '<gdb:breakpoint>', as a
-     symbol.
-
-   GDB defines the following object types:
-
-'<gdb:arch>'
-     *Note Architectures In Guile::.
-
-'<gdb:block>'
-     *Note Blocks In Guile::.
-
-'<gdb:block-symbols-iterator>'
-     *Note Blocks In Guile::.
-
-'<gdb:breakpoint>'
-     *Note Breakpoints In Guile::.
-
-'<gdb:command>'
-     *Note Commands In Guile::.
-
-'<gdb:exception>'
-     *Note Guile Exception Handling::.
-
-'<gdb:frame>'
-     *Note Frames In Guile::.
-
-'<gdb:iterator>'
-     *Note Iterators In Guile::.
-
-'<gdb:lazy-string>'
-     *Note Lazy Strings In Guile::.
-
-'<gdb:objfile>'
-     *Note Objfiles In Guile::.
-
-'<gdb:parameter>'
-     *Note Parameters In Guile::.
-
-'<gdb:pretty-printer>'
-     *Note Guile Pretty Printing API::.
-
-'<gdb:pretty-printer-worker>'
-     *Note Guile Pretty Printing API::.
-
-'<gdb:progspace>'
-     *Note Progspaces In Guile::.
-
-'<gdb:symbol>'
-     *Note Symbols In Guile::.
-
-'<gdb:symtab>'
-     *Note Symbol Tables In Guile::.
-
-'<gdb:sal>'
-     *Note Symbol Tables In Guile::.
-
-'<gdb:type>'
-     *Note Types In Guile::.
-
-'<gdb:field>'
-     *Note Types In Guile::.
-
-'<gdb:value>'
-     *Note Values From Inferior In Guile::.
-
-   The following GDB objects are managed internally so that the Scheme
-function 'eq?' may be applied to them.
-
-'<gdb:arch>'
-'<gdb:block>'
-'<gdb:breakpoint>'
-'<gdb:frame>'
-'<gdb:objfile>'
-'<gdb:progspace>'
-'<gdb:symbol>'
-'<gdb:symtab>'
-'<gdb:type>'
-
-
-File: gdb.info,  Node: Guile Exception Handling,  Next: Values From Inferior In Guile,  Prev: GDB Scheme Data Types,  Up: Guile API
-
-23.3.3.4 Guile Exception Handling
-.................................
-
-When executing the 'guile' command, Guile exceptions uncaught within the
-Guile code are translated to calls to the GDB error-reporting mechanism.
-If the command that called 'guile' does not handle the error, GDB will
-terminate it and report the error according to the setting of the 'guile
-print-stack' parameter.
-
-   The 'guile print-stack' parameter has three settings:
-
-'none'
-     Nothing is printed.
-
-'message'
-     An error message is printed containing the Guile exception name,
-     the associated value, and the Guile call stack backtrace at the
-     point where the exception was raised.  Example:
-
-          (gdb) guile (display foo)
-          ERROR: In procedure memoize-variable-access!:
-          ERROR: Unbound variable: foo
-          Error while executing Scheme code.
-
-'full'
-     In addition to an error message a full backtrace is printed.
-
-          (gdb) set guile print-stack full
-          (gdb) guile (display foo)
-          Guile Backtrace:
-          In ice-9/boot-9.scm:
-           157: 10 [catch #t #<catch-closure 2c76e20> ...]
-          In unknown file:
-             ?: 9 [apply-smob/1 #<catch-closure 2c76e20>]
-          In ice-9/boot-9.scm:
-           157: 8 [catch #t #<catch-closure 2c76d20> ...]
-          In unknown file:
-             ?: 7 [apply-smob/1 #<catch-closure 2c76d20>]
-             ?: 6 [call-with-input-string "(display foo)" ...]
-          In ice-9/boot-9.scm:
-          2320: 5 [save-module-excursion #<procedure 2c2dc30 ... ()>]
-          In ice-9/eval-string.scm:
-            44: 4 [read-and-eval #<input: string 27cb410> #:lang ...]
-            37: 3 [lp (display foo)]
-          In ice-9/eval.scm:
-           387: 2 [eval # ()]
-           393: 1 [eval #<memoized foo> ()]
-          In unknown file:
-             ?: 0 [memoize-variable-access! #<memoized foo> ...]
-
-          ERROR: In procedure memoize-variable-access!:
-          ERROR: Unbound variable: foo
-          Error while executing Scheme code.
-
-   GDB errors that happen in GDB commands invoked by Guile code are
-converted to Guile exceptions.  The type of the Guile exception depends
-on the error.
-
-   Guile procedures provided by GDB can throw the standard Guile
-exceptions like 'wrong-type-arg' and 'out-of-range'.
-
-   User interrupt (via 'C-c' or by typing 'q' at a pagination prompt) is
-translated to a Guile 'signal' exception with value 'SIGINT'.
-
-   GDB Guile procedures can also throw these exceptions:
-
-'gdb:error'
-     This exception is a catch-all for errors generated from within GDB.
-
-'gdb:invalid-object'
-     This exception is thrown when accessing Guile objects that wrap
-     underlying GDB objects have become invalid.  For example, a
-     '<gdb:breakpoint>' object becomes invalid if the user deletes it
-     from the command line.  The object still exists in Guile, but the
-     object it represents is gone.  Further operations on this
-     breakpoint will throw this exception.
-
-'gdb:memory-error'
-     This exception is thrown when an operation tried to access invalid
-     memory in the inferior.
-
-'gdb:pp-type-error'
-     This exception is thrown when a Guile pretty-printer passes a bad
-     object to GDB.
-
-   The following exception-related procedures are provided by the
-'(gdb)' module.
-
- -- Scheme Procedure: make-exception key args
-     Return a '<gdb:exception>' object given by its KEY and ARGS, which
-     are the standard Guile parameters of an exception.  See the Guile
-     documentation for more information (*note (guile)Exceptions::).
-
- -- Scheme Procedure: exception? object
-     Return '#t' if OBJECT is a '<gdb:exception>' object.  Otherwise
-     return '#f'.
-
- -- Scheme Procedure: exception-key exception
-     Return the ARGS field of a '<gdb:exception>' object.
-
- -- Scheme Procedure: exception-args exception
-     Return the ARGS field of a '<gdb:exception>' object.
-
-
-File: gdb.info,  Node: Values From Inferior In Guile,  Next: Arithmetic In Guile,  Prev: Guile Exception Handling,  Up: Guile API
-
-23.3.3.5 Values From Inferior In Guile
-......................................
-
-GDB provides values it obtains from the inferior program in an object of
-type '<gdb:value>'.  GDB uses this object for its internal bookkeeping
-of the inferior's values, and for fetching values when necessary.
-
-   GDB does not memoize '<gdb:value>' objects.  'make-value' always
-returns a fresh object.
-
-     (gdb) guile (eq? (make-value 1) (make-value 1))
-     $1 = #f
-     (gdb) guile (equal? (make-value 1) (make-value 1))
-     $1 = #t
-
-   A '<gdb:value>' that represents a function can be executed via
-inferior function call with 'value-call'.  Any arguments provided to the
-call must match the function's prototype, and must be provided in the
-order specified by that prototype.
-
-   For example, 'some-val' is a '<gdb:value>' instance representing a
-function that takes two integers as arguments.  To execute this
-function, call it like so:
-
-     (define result (value-call some-val 10 20))
-
-   Any values returned from a function call are '<gdb:value>' objects.
-
-   Note: Unlike Python scripting in GDB, inferior values that are simple
-scalars cannot be used directly in Scheme expressions that are valid for
-the value's data type.  For example, '(+ (parse-and-eval "int_variable")
-2)' does not work.  And inferior values that are structures or instances
-of some class cannot be accessed using any special syntax, instead
-'value-field' must be used.
-
-   The following value-related procedures are provided by the '(gdb)'
-module.
-
- -- Scheme Procedure: value? object
-     Return '#t' if OBJECT is a '<gdb:value>' object.  Otherwise return
-     '#f'.
-
- -- Scheme Procedure: make-value value [#:type type]
-     Many Scheme values can be converted directly to a '<gdb:value>'
-     with this procedure.  If TYPE is specified, the result is a value
-     of this type, and if VALUE can't be represented with this type an
-     exception is thrown.  Otherwise the type of the result is
-     determined from VALUE as described below.
-
-     *Note Architectures In Guile::, for a list of the builtin types for
-     an architecture.
-
-     Here's how Scheme values are converted when TYPE argument to
-     'make-value' is not specified:
-
-     Scheme boolean
-          A Scheme boolean is converted the boolean type for the current
-          language.
-
-     Scheme integer
-          A Scheme integer is converted to the first of a C 'int',
-          'unsigned int', 'long', 'unsigned long', 'long long' or
-          'unsigned long long' type for the current architecture that
-          can represent the value.
-
-          If the Scheme integer cannot be represented as a target
-          integer an 'out-of-range' exception is thrown.
-
-     Scheme real
-          A Scheme real is converted to the C 'double' type for the
-          current architecture.
-
-     Scheme string
-          A Scheme string is converted to a string in the current target
-          language using the current target encoding.  Characters that
-          cannot be represented in the current target encoding are
-          replaced with the corresponding escape sequence.  This is
-          Guile's 'SCM_FAILED_CONVERSION_ESCAPE_SEQUENCE' conversion
-          strategy (*note (guile)Strings::).
-
-          Passing TYPE is not supported in this case, if it is provided
-          a 'wrong-type-arg' exception is thrown.
-
-     '<gdb:lazy-string>'
-          If VALUE is a '<gdb:lazy-string>' object (*note Lazy Strings
-          In Guile::), then the 'lazy-string->value' procedure is
-          called, and its result is used.
-
-          Passing TYPE is not supported in this case, if it is provided
-          a 'wrong-type-arg' exception is thrown.
-
-     Scheme bytevector
-          If VALUE is a Scheme bytevector and TYPE is provided, VALUE
-          must be the same size, in bytes, of values of type TYPE, and
-          the result is essentially created by using 'memcpy'.
-
-          If VALUE is a Scheme bytevector and TYPE is not provided, the
-          result is an array of type 'uint8' of the same length.
-
- -- Scheme Procedure: value-optimized-out? value
-     Return '#t' if the compiler optimized out VALUE, thus it is not
-     available for fetching from the inferior.  Otherwise return '#f'.
-
- -- Scheme Procedure: value-address value
-     If VALUE is addressable, returns a '<gdb:value>' object
-     representing the address.  Otherwise, '#f' is returned.
-
- -- Scheme Procedure: value-type value
-     Return the type of VALUE as a '<gdb:type>' object (*note Types In
-     Guile::).
-
- -- Scheme Procedure: value-dynamic-type value
-     Return the dynamic type of VALUE.  This uses C++ run-time type
-     information (RTTI) to determine the dynamic type of the value.  If
-     the value is of class type, it will return the class in which the
-     value is embedded, if any.  If the value is of pointer or reference
-     to a class type, it will compute the dynamic type of the referenced
-     object, and return a pointer or reference to that type,
-     respectively.  In all other cases, it will return the value's
-     static type.
-
-     Note that this feature will only work when debugging a C++ program
-     that includes RTTI for the object in question.  Otherwise, it will
-     just return the static type of the value as in 'ptype foo'.  *Note
-     ptype: Symbols.
-
- -- Scheme Procedure: value-cast value type
-     Return a new instance of '<gdb:value>' that is the result of
-     casting VALUE to the type described by TYPE, which must be a
-     '<gdb:type>' object.  If the cast cannot be performed for some
-     reason, this method throws an exception.
-
- -- Scheme Procedure: value-dynamic-cast value type
-     Like 'value-cast', but works as if the C++ 'dynamic_cast' operator
-     were used.  Consult a C++ reference for details.
-
- -- Scheme Procedure: value-reinterpret-cast value type
-     Like 'value-cast', but works as if the C++ 'reinterpret_cast'
-     operator were used.  Consult a C++ reference for details.
-
- -- Scheme Procedure: value-dereference value
-     For pointer data types, this method returns a new '<gdb:value>'
-     object whose contents is the object pointed to by VALUE.  For
-     example, if 'foo' is a C pointer to an 'int', declared in your C
-     program as
-
-          int *foo;
-
-     then you can use the corresponding '<gdb:value>' to access what
-     'foo' points to like this:
-
-          (define bar (value-dereference foo))
-
-     The result 'bar' will be a '<gdb:value>' object holding the value
-     pointed to by 'foo'.
-
-     A similar function 'value-referenced-value' exists which also
-     returns '<gdb:value>' objects corresponding to the values pointed
-     to by pointer values (and additionally, values referenced by
-     reference values).  However, the behavior of 'value-dereference'
-     differs from 'value-referenced-value' by the fact that the behavior
-     of 'value-dereference' is identical to applying the C unary
-     operator '*' on a given value.  For example, consider a reference
-     to a pointer 'ptrref', declared in your C++ program as
-
-          typedef int *intptr;
-          ...
-          int val = 10;
-          intptr ptr = &val;
-          intptr &ptrref = ptr;
-
-     Though 'ptrref' is a reference value, one can apply the method
-     'value-dereference' to the '<gdb:value>' object corresponding to it
-     and obtain a '<gdb:value>' which is identical to that corresponding
-     to 'val'.  However, if you apply the method
-     'value-referenced-value', the result would be a '<gdb:value>'
-     object identical to that corresponding to 'ptr'.
-
-          (define scm-ptrref (parse-and-eval "ptrref"))
-          (define scm-val (value-dereference scm-ptrref))
-          (define scm-ptr (value-referenced-value scm-ptrref))
-
-     The '<gdb:value>' object 'scm-val' is identical to that
-     corresponding to 'val', and 'scm-ptr' is identical to that
-     corresponding to 'ptr'.  In general, 'value-dereference' can be
-     applied whenever the C unary operator '*' can be applied to the
-     corresponding C value.  For those cases where applying both
-     'value-dereference' and 'value-referenced-value' is allowed, the
-     results obtained need not be identical (as we have seen in the
-     above example).  The results are however identical when applied on
-     '<gdb:value>' objects corresponding to pointers ('<gdb:value>'
-     objects with type code 'TYPE_CODE_PTR') in a C/C++ program.
-
- -- Scheme Procedure: value-referenced-value value
-     For pointer or reference data types, this method returns a new
-     '<gdb:value>' object corresponding to the value referenced by the
-     pointer/reference value.  For pointer data types,
-     'value-dereference' and 'value-referenced-value' produce identical
-     results.  The difference between these methods is that
-     'value-dereference' cannot get the values referenced by reference
-     values.  For example, consider a reference to an 'int', declared in
-     your C++ program as
-
-          int val = 10;
-          int &ref = val;
-
-     then applying 'value-dereference' to the '<gdb:value>' object
-     corresponding to 'ref' will result in an error, while applying
-     'value-referenced-value' will result in a '<gdb:value>' object
-     identical to that corresponding to 'val'.
-
-          (define scm-ref (parse-and-eval "ref"))
-          (define err-ref (value-dereference scm-ref))      ;; error
-          (define scm-val (value-referenced-value scm-ref)) ;; ok
-
-     The '<gdb:value>' object 'scm-val' is identical to that
-     corresponding to 'val'.
-
- -- Scheme Procedure: value-field value field-name
-     Return field FIELD-NAME from '<gdb:value>' object VALUE.
-
- -- Scheme Procedure: value-subscript value index
-     Return the value of array VALUE at index INDEX.  The VALUE argument
-     must be a subscriptable '<gdb:value>' object.
-
- -- Scheme Procedure: value-call value arg-list
-     Perform an inferior function call, taking VALUE as a pointer to the
-     function to call.  Each element of list ARG-LIST must be a
-     <gdb:value> object or an object that can be converted to a value.
-     The result is the value returned by the function.
-
- -- Scheme Procedure: value->bool value
-     Return the Scheme boolean representing '<gdb:value>' VALUE.  The
-     value must be "integer like".  Pointers are ok.
-
- -- Scheme Procedure: value->integer
-     Return the Scheme integer representing '<gdb:value>' VALUE.  The
-     value must be "integer like".  Pointers are ok.
-
- -- Scheme Procedure: value->real
-     Return the Scheme real number representing '<gdb:value>' VALUE.
-     The value must be a number.
-
- -- Scheme Procedure: value->bytevector
-     Return a Scheme bytevector with the raw contents of '<gdb:value>'
-     VALUE.  No transformation, endian or otherwise, is performed.
-
- -- Scheme Procedure: value->string value [#:encoding encoding]
-          [#:errors errors] [#:length length]
-     If VALUE> represents a string, then this method converts the
-     contents to a Guile string.  Otherwise, this method will throw an
-     exception.
-
-     Values are interpreted as strings according to the rules of the
-     current language.  If the optional length argument is given, the
-     string will be converted to that length, and will include any
-     embedded zeroes that the string may contain.  Otherwise, for
-     languages where the string is zero-terminated, the entire string
-     will be converted.
-
-     For example, in C-like languages, a value is a string if it is a
-     pointer to or an array of characters or ints of type 'wchar_t',
-     'char16_t', or 'char32_t'.
-
-     If the optional ENCODING argument is given, it must be a string
-     naming the encoding of the string in the '<gdb:value>', such as
-     '"ascii"', '"iso-8859-6"' or '"utf-8"'.  It accepts the same
-     encodings as the corresponding argument to Guile's
-     'scm_from_stringn' function, and the Guile codec machinery will be
-     used to convert the string.  If ENCODING is not given, or if
-     ENCODING is the empty string, then either the 'target-charset'
-     (*note Character Sets::) will be used, or a language-specific
-     encoding will be used, if the current language is able to supply
-     one.
-
-     The optional ERRORS argument is one of '#f', 'error' or
-     'substitute'.  'error' and 'substitute' must be symbols.  If ERRORS
-     is not specified, or if its value is '#f', then the default
-     conversion strategy is used, which is set with the Scheme function
-     'set-port-conversion-strategy!'.  If the value is ''error' then an
-     exception is thrown if there is any conversion error.  If the value
-     is ''substitute' then any conversion error is replaced with
-     question marks.  *Note (guile)Strings::.
-
-     If the optional LENGTH argument is given, the string will be
-     fetched and converted to the given length.  The length must be a
-     Scheme integer and not a '<gdb:value>' integer.
-
- -- Scheme Procedure: value->lazy-string value [#:encoding encoding]
-          [#:length length]
-     If this '<gdb:value>' represents a string, then this method
-     converts VALUE to a '<gdb:lazy-string' (*note Lazy Strings In
-     Guile::).  Otherwise, this method will throw an exception.
-
-     If the optional ENCODING argument is given, it must be a string
-     naming the encoding of the '<gdb:lazy-string'.  Some examples are:
-     '"ascii"', '"iso-8859-6"' or '"utf-8"'.  If the ENCODING argument
-     is an encoding that GDB does not recognize, GDB will raise an
-     error.
-
-     When a lazy string is printed, the GDB encoding machinery is used
-     to convert the string during printing.  If the optional ENCODING
-     argument is not provided, or is an empty string, GDB will
-     automatically select the encoding most suitable for the string
-     type.  For further information on encoding in GDB please see *note
-     Character Sets::.
-
-     If the optional LENGTH argument is given, the string will be
-     fetched and encoded to the length of characters specified.  If the
-     LENGTH argument is not provided, the string will be fetched and
-     encoded until a null of appropriate width is found.  The length
-     must be a Scheme integer and not a '<gdb:value>' integer.
-
- -- Scheme Procedure: value-lazy? value
-     Return '#t' if VALUE has not yet been fetched from the inferior.
-     Otherwise return '#f'.  GDB does not fetch values until necessary,
-     for efficiency.  For example:
-
-          (define myval (parse-and-eval "somevar"))
-
-     The value of 'somevar' is not fetched at this time.  It will be
-     fetched when the value is needed, or when the 'fetch-lazy'
-     procedure is invoked.
+     gdb.events.stop.connect(thread_stopped)
+     (gdb) file /tmp/hello
+     Reading symbols from /tmp/hello...
+     (gdb) start
+     Temporary breakpoint 1 at 0x401198: file /tmp/hello.c, line 18.
+     Starting program: /tmp/hello
 
- -- Scheme Procedure: make-lazy-value type address
-     Return a '<gdb:value>' that will be lazily fetched from the target.
-     The object of type '<gdb:type>' whose value to fetch is specified
-     by its TYPE and its target memory ADDRESS, which is a Scheme
-     integer.
-
- -- Scheme Procedure: value-fetch-lazy! value
-     If VALUE is a lazy value ('(value-lazy? value)' is '#t'), then the
-     value is fetched from the inferior.  Any errors that occur in the
-     process will produce a Guile exception.
-
-     If VALUE is not a lazy value, this method has no effect.
-
-     The result of this function is unspecified.
-
- -- Scheme Procedure: value-print value
-     Return the string representation (print form) of '<gdb:value>'
-     VALUE.
+     Temporary breakpoint 1, main () at /tmp/hello.c:18
+     18	  printf ("Hello World\n");
+     (gdb) python print(gdb.selected_inferior()._last_stop_time)
+     2024-01-04 14:48:41.347036
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-5 ./gdb/doc/gdb.info-5
--- /sourceware/snapshot-tmp/gdb/snapshot/current-gdb/update-snapshot/old/gdb-9.0.50.20191211/gdb/doc/gdb.info-5	2019-12-11 01:53:14.000000000 +0000
+++ ./gdb/doc/gdb.info-5	2024-02-01 01:52:21.000000000 +0000
@@ -1,6 +1,6 @@
-This is gdb.info, produced by makeinfo version 6.3 from gdb.texinfo.
+This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo.
 
-Copyright (C) 1988-2019 Free Software Foundation, Inc.
+Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -21,9 +21,9 @@ END-INFO-DIR-ENTRY
    This file documents the GNU debugger GDB.
 
    This is the Tenth Edition, of 'Debugging with GDB: the GNU
-Source-Level Debugger' for GDB (GDB) Version 9.0.50.20191211-git.
+Source-Level Debugger' for GDB (GDB) Version 15.0.50.20240201-git.
 
-   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   Copyright (C) 1988-2024 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -37,9 +37,4957 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+File: gdb.info,  Node: Events In Python,  Next: Threads In Python,  Prev: Inferiors In Python,  Up: Python API
+
+23.3.2.18 Events In Python
+..........................
+
+GDB provides a general event facility so that Python code can be
+notified of various state changes, particularly changes that occur in
+the inferior.
+
+   An "event" is just an object that describes some state change.  The
+type of the object and its attributes will vary depending on the details
+of the change.  All the existing events are described below.
+
+   In order to be notified of an event, you must register an event
+handler with an "event registry".  An event registry is an object in the
+'gdb.events' module which dispatches particular events.  A registry
+provides methods to register and unregister event handlers:
+
+ -- Function: EventRegistry.connect (object)
+     Add the given callable OBJECT to the registry.  This object will be
+     called when an event corresponding to this registry occurs.
+
+ -- Function: EventRegistry.disconnect (object)
+     Remove the given OBJECT from the registry.  Once removed, the
+     object will no longer receive notifications of events.
+
+   Here is an example:
+
+     def exit_handler (event):
+         print ("event type: exit")
+         if hasattr (event, 'exit_code'):
+             print ("exit code: %d" % (event.exit_code))
+         else:
+             print ("exit code not available")
+
+     gdb.events.exited.connect (exit_handler)
+
+   In the above example we connect our handler 'exit_handler' to the
+registry 'events.exited'.  Once connected, 'exit_handler' gets called
+when the inferior exits.  The argument "event" in this example is of
+type 'gdb.ExitedEvent'.  As you can see in the example the 'ExitedEvent'
+object has an attribute which indicates the exit code of the inferior.
+
+   Some events can be thread specific when GDB is running in non-stop
+mode.  When represented in Python, these events all extend
+'gdb.ThreadEvent'.  This event is a base class and is never emitted
+directly; instead, events which are emitted by this or other modules
+might extend this event.  Examples of these events are
+'gdb.BreakpointEvent' and 'gdb.ContinueEvent'.  'gdb.ThreadEvent' holds
+the following attributes:
+
+ -- Variable: ThreadEvent.inferior_thread
+     In non-stop mode this attribute will be set to the specific thread
+     which was involved in the emitted event.  Otherwise, it will be set
+     to 'None'.
+
+   The following is a listing of the event registries that are available
+and details of the events they emit:
+
+'events.cont'
+     Emits 'gdb.ContinueEvent', which extends 'gdb.ThreadEvent'.  This
+     event indicates that the inferior has been continued after a stop.
+     For inherited attribute refer to 'gdb.ThreadEvent' above.
+
+'events.exited'
+     Emits 'events.ExitedEvent', which indicates that the inferior has
+     exited.  'events.ExitedEvent' has two attributes:
+
+      -- Variable: ExitedEvent.exit_code
+          An integer representing the exit code, if available, which the
+          inferior has returned.  (The exit code could be unavailable
+          if, for example, GDB detaches from the inferior.)  If the exit
+          code is unavailable, the attribute does not exist.
+
+      -- Variable: ExitedEvent.inferior
+          A reference to the inferior which triggered the 'exited'
+          event.
+
+'events.stop'
+     Emits 'gdb.StopEvent', which extends 'gdb.ThreadEvent'.
+
+     Indicates that the inferior has stopped.  All events emitted by
+     this registry extend 'gdb.StopEvent'.  As a child of
+     'gdb.ThreadEvent', 'gdb.StopEvent' will indicate the stopped thread
+     when GDB is running in non-stop mode.  Refer to 'gdb.ThreadEvent'
+     above for more details.
+
+     'gdb.StopEvent' has the following additional attributes:
+
+      -- Variable: StopEvent.details
+          A dictionary holding any details relevant to the stop.  The
+          exact keys and values depend on the type of stop, but are
+          identical to the corresponding MI output (*note GDB/MI Async
+          Records::).
+
+          A dictionary was used for this (rather than adding attributes
+          directly to the event object) so that the MI keys could be
+          used unchanged.
+
+     Emits 'gdb.SignalEvent', which extends 'gdb.StopEvent'.
+
+     This event indicates that the inferior or one of its threads has
+     received a signal.  'gdb.SignalEvent' has the following attributes:
+
+      -- Variable: SignalEvent.stop_signal
+          A string representing the signal received by the inferior.  A
+          list of possible signal values can be obtained by running the
+          command 'info signals' in the GDB command prompt.
+
+     Also emits 'gdb.BreakpointEvent', which extends 'gdb.StopEvent'.
+
+     'gdb.BreakpointEvent' event indicates that one or more breakpoints
+     have been hit, and has the following attributes:
+
+      -- Variable: BreakpointEvent.breakpoints
+          A sequence containing references to all the breakpoints (type
+          'gdb.Breakpoint') that were hit.  *Note Breakpoints In
+          Python::, for details of the 'gdb.Breakpoint' object.
+
+      -- Variable: BreakpointEvent.breakpoint
+          A reference to the first breakpoint that was hit.  This
+          attribute is maintained for backward compatibility and is now
+          deprecated in favor of the 'gdb.BreakpointEvent.breakpoints'
+          attribute.
+
+'events.new_objfile'
+     Emits 'gdb.NewObjFileEvent' which indicates that a new object file
+     has been loaded by GDB.  'gdb.NewObjFileEvent' has one attribute:
+
+      -- Variable: NewObjFileEvent.new_objfile
+          A reference to the object file ('gdb.Objfile') which has been
+          loaded.  *Note Objfiles In Python::, for details of the
+          'gdb.Objfile' object.
+
+'events.free_objfile'
+     Emits 'gdb.FreeObjFileEvent' which indicates that an object file is
+     about to be removed from GDB.  One reason this can happen is when
+     the inferior calls 'dlclose'.  'gdb.FreeObjFileEvent' has one
+     attribute:
+
+      -- Variable: FreeObjFileEvent.objfile
+          A reference to the object file ('gdb.Objfile') which will be
+          unloaded.  *Note Objfiles In Python::, for details of the
+          'gdb.Objfile' object.
+
+'events.clear_objfiles'
+     Emits 'gdb.ClearObjFilesEvent' which indicates that the list of
+     object files for a program space has been reset.
+     'gdb.ClearObjFilesEvent' has one attribute:
+
+      -- Variable: ClearObjFilesEvent.progspace
+          A reference to the program space ('gdb.Progspace') whose
+          objfile list has been cleared.  *Note Progspaces In Python::.
+
+'events.inferior_call'
+     Emits events just before and after a function in the inferior is
+     called by GDB.  Before an inferior call, this emits an event of
+     type 'gdb.InferiorCallPreEvent', and after an inferior call, this
+     emits an event of type 'gdb.InferiorCallPostEvent'.
+
+     'gdb.InferiorCallPreEvent'
+          Indicates that a function in the inferior is about to be
+          called.
+
+           -- Variable: InferiorCallPreEvent.ptid
+               The thread in which the call will be run.
+
+           -- Variable: InferiorCallPreEvent.address
+               The location of the function to be called.
+
+     'gdb.InferiorCallPostEvent'
+          Indicates that a function in the inferior has just been
+          called.
+
+           -- Variable: InferiorCallPostEvent.ptid
+               The thread in which the call was run.
+
+           -- Variable: InferiorCallPostEvent.address
+               The location of the function that was called.
+
+'events.memory_changed'
+     Emits 'gdb.MemoryChangedEvent' which indicates that the memory of
+     the inferior has been modified by the GDB user, for instance via a
+     command like 'set *addr = value'.  The event has the following
+     attributes:
+
+      -- Variable: MemoryChangedEvent.address
+          The start address of the changed region.
+
+      -- Variable: MemoryChangedEvent.length
+          Length in bytes of the changed region.
+
+'events.register_changed'
+     Emits 'gdb.RegisterChangedEvent' which indicates that a register in
+     the inferior has been modified by the GDB user.
+
+      -- Variable: RegisterChangedEvent.frame
+          A gdb.Frame object representing the frame in which the
+          register was modified.
+      -- Variable: RegisterChangedEvent.regnum
+          Denotes which register was modified.
+
+'events.breakpoint_created'
+     This is emitted when a new breakpoint has been created.  The
+     argument that is passed is the new 'gdb.Breakpoint' object.
+
+'events.breakpoint_modified'
+     This is emitted when a breakpoint has been modified in some way.
+     The argument that is passed is the new 'gdb.Breakpoint' object.
+
+'events.breakpoint_deleted'
+     This is emitted when a breakpoint has been deleted.  The argument
+     that is passed is the 'gdb.Breakpoint' object.  When this event is
+     emitted, the 'gdb.Breakpoint' object will already be in its invalid
+     state; that is, the 'is_valid' method will return 'False'.
+
+'events.before_prompt'
+     This event carries no payload.  It is emitted each time GDB
+     presents a prompt to the user.
+
+'events.new_inferior'
+     This is emitted when a new inferior is created.  Note that the
+     inferior is not necessarily running; in fact, it may not even have
+     an associated executable.
+
+     The event is of type 'gdb.NewInferiorEvent'.  This has a single
+     attribute:
+
+      -- Variable: NewInferiorEvent.inferior
+          The new inferior, a 'gdb.Inferior' object.
+
+'events.inferior_deleted'
+     This is emitted when an inferior has been deleted.  Note that this
+     is not the same as process exit; it is notified when the inferior
+     itself is removed, say via 'remove-inferiors'.
+
+     The event is of type 'gdb.InferiorDeletedEvent'.  This has a single
+     attribute:
+
+      -- Variable: InferiorDeletedEvent.inferior
+          The inferior that is being removed, a 'gdb.Inferior' object.
+
+'events.new_thread'
+     This is emitted when GDB notices a new thread.  The event is of
+     type 'gdb.NewThreadEvent', which extends 'gdb.ThreadEvent'.  This
+     has a single attribute:
+
+      -- Variable: NewThreadEvent.inferior_thread
+          The new thread.
+
+'events.thread_exited'
+     This is emitted when GDB notices a thread has exited.  The event is
+     of type 'gdb.ThreadExitedEvent' which extends 'gdb.ThreadEvent'.
+     This has a single attribute:
+
+      -- Variable: ThreadExitedEvent.inferior_thread
+          The exiting thread.
+
+'events.gdb_exiting'
+     This is emitted when GDB exits.  This event is not emitted if GDB
+     exits as a result of an internal error, or after an unexpected
+     signal.  The event is of type 'gdb.GdbExitingEvent', which has a
+     single attribute:
+
+      -- Variable: GdbExitingEvent.exit_code
+          An integer, the value of the exit code GDB will return.
+
+'events.connection_removed'
+     This is emitted when GDB removes a connection (*note Connections In
+     Python::).  The event is of type 'gdb.ConnectionEvent'.  This has a
+     single read-only attribute:
+
+      -- Variable: ConnectionEvent.connection
+          The 'gdb.TargetConnection' that is being removed.
+
+'events.executable_changed'
+     Emits 'gdb.ExecutableChangedEvent' which indicates that the
+     'gdb.Progspace.executable_filename' has changed.
+
+     This event is emitted when either the value of
+     'gdb.Progspace.executable_filename ' has changed to name a
+     different file, or the executable file named by
+     'gdb.Progspace.executable_filename' has changed on disk, and GDB
+     has therefore reloaded it.
+
+      -- Variable: ExecutableChangedEvent.progspace
+          The 'gdb.Progspace' in which the current executable has
+          changed.  The file name of the updated executable will be
+          visible in 'gdb.Progspace.executable_filename' (*note
+          Progspaces In Python::).
+      -- Variable: ExecutableChangedEvent.reload
+          This attribute will be 'True' if the value of
+          'gdb.Progspace.executable_filename' didn't change, but the
+          file it names changed on disk instead, and GDB reloaded it.
+
+          When this attribute is 'False', the value in
+          'gdb.Progspace.executable_filename' was changed to name a
+          different file.
+
+     Remember that GDB tracks the executable file and the symbol file
+     separately, these are visible as
+     'gdb.Progspace.executable_filename' and 'gdb.Progspace.filename'
+     respectively.  When using the 'file' command, GDB updates both of
+     these fields, but the executable file is updated first, so when
+     this event is emitted, the executable filename will have changed,
+     but the symbol filename might still hold its previous value.
+
+'events.new_progspace'
+     This is emitted when GDB adds a new program space (*note Program
+     Spaces In Python: Progspaces In Python.).  The event is of type
+     'gdb.NewProgspaceEvent', and has a single read-only attribute:
+
+      -- Variable: NewProgspaceEvent.progspace
+          The 'gdb.Progspace' that was added to GDB.
+
+     No 'NewProgspaceEvent' is emitted for the very first program space,
+     which is assigned to the first inferior.  This first program space
+     is created within GDB before any Python scripts are sourced.
+
+'events.free_progspace'
+     This is emitted when GDB removes a program space (*note Program
+     Spaces In Python: Progspaces In Python.), for example as a result
+     of the 'remove-inferiors' command (*note 'remove-inferiors':
+     remove_inferiors_cli.).  The event is of type
+     'gdb.FreeProgspaceEvent', and has a single read-only attribute:
+
+      -- Variable: FreeProgspaceEvent.progspace
+          The 'gdb.Progspace' that is about to be removed from GDB.
+
+
+File: gdb.info,  Node: Threads In Python,  Next: Recordings In Python,  Prev: Events In Python,  Up: Python API
+
+23.3.2.19 Threads In Python
+...........................
+
+Python scripts can access information about, and manipulate inferior
+threads controlled by GDB, via objects of the 'gdb.InferiorThread'
+class.
+
+   The following thread-related functions are available in the 'gdb'
+module:
+
+ -- Function: gdb.selected_thread ()
+     This function returns the thread object for the selected thread.
+     If there is no selected thread, this will return 'None'.
+
+   To get the list of threads for an inferior, use the
+'Inferior.threads()' method.  *Note Inferiors In Python::.
+
+   A 'gdb.InferiorThread' object has the following attributes:
+
+ -- Variable: InferiorThread.name
+     The name of the thread.  If the user specified a name using 'thread
+     name', then this returns that name.  Otherwise, if an OS-supplied
+     name is available, then it is returned.  Otherwise, this returns
+     'None'.
+
+     This attribute can be assigned to.  The new value must be a string
+     object, which sets the new name, or 'None', which removes any
+     user-specified thread name.
+
+ -- Variable: InferiorThread.num
+     The per-inferior number of the thread, as assigned by GDB.
+
+ -- Variable: InferiorThread.global_num
+     The global ID of the thread, as assigned by GDB. You can use this
+     to make Python breakpoints thread-specific, for example (*note The
+     Breakpoint.thread attribute: python_breakpoint_thread.).
+
+ -- Variable: InferiorThread.ptid
+     ID of the thread, as assigned by the operating system.  This
+     attribute is a tuple containing three integers.  The first is the
+     Process ID (PID); the second is the Lightweight Process ID (LWPID),
+     and the third is the Thread ID (TID). Either the LWPID or TID may
+     be 0, which indicates that the operating system does not use that
+     identifier.
+
+ -- Variable: InferiorThread.ptid_string
+     This read-only attribute contains a string representing
+     'InferiorThread.ptid'.  This is the string that GDB uses in the
+     'Target Id' column in the 'info threads' output (*note 'info
+     threads': info_threads.).
+
+ -- Variable: InferiorThread.inferior
+     The inferior this thread belongs to.  This attribute is represented
+     as a 'gdb.Inferior' object.  This attribute is not writable.
+
+ -- Variable: InferiorThread.details
+     A string containing target specific thread state information.  The
+     format of this string varies by target.  If there is no additional
+     state information for this thread, then this attribute contains
+     'None'.
+
+     For example, on a GNU/Linux system, a thread that is in the process
+     of exiting will return the string 'Exiting'.  For remote targets
+     the 'details' string will be obtained with the 'qThreadExtraInfo'
+     remote packet, if the target supports it (*note 'qThreadExtraInfo':
+     qThreadExtraInfo.).
+
+     GDB displays the 'details' string as part of the 'Target Id'
+     column, in the 'info threads' output (*note 'info threads':
+     info_threads.).
+
+   A 'gdb.InferiorThread' object has the following methods:
+
+ -- Function: InferiorThread.is_valid ()
+     Returns 'True' if the 'gdb.InferiorThread' object is valid, 'False'
+     if not.  A 'gdb.InferiorThread' object will become invalid if the
+     thread exits, or the inferior that the thread belongs is deleted.
+     All other 'gdb.InferiorThread' methods will throw an exception if
+     it is invalid at the time the method is called.
+
+ -- Function: InferiorThread.switch ()
+     This changes GDB's currently selected thread to the one represented
+     by this object.
+
+ -- Function: InferiorThread.is_stopped ()
+     Return a Boolean indicating whether the thread is stopped.
+
+ -- Function: InferiorThread.is_running ()
+     Return a Boolean indicating whether the thread is running.
+
+ -- Function: InferiorThread.is_exited ()
+     Return a Boolean indicating whether the thread is exited.
+
+ -- Function: InferiorThread.handle ()
+     Return the thread object's handle, represented as a Python 'bytes'
+     object.  A 'gdb.Value' representation of the handle may be
+     constructed via 'gdb.Value(bufobj, type)' where BUFOBJ is the
+     Python 'bytes' representation of the handle and TYPE is a
+     'gdb.Type' for the handle type.
+
+   One may add arbitrary attributes to 'gdb.InferiorThread' objects in
+the usual Python way.  This is useful if, for example, one needs to do
+some extra record keeping associated with the thread.
+
+   *Note choosing attribute names::, for guidance on selecting a
+suitable name for new attributes.
+
+   In this contrived example we record the time when a thread last
+stopped:
+
+     (gdb) python
+     import datetime
+
+     def thread_stopped(event):
+         if event.inferior_thread is not None:
+             thread = event.inferior_thread
+         else:
+             thread = gdb.selected_thread()
+         thread._last_stop_time = datetime.datetime.today()
+
+     gdb.events.stop.connect(thread_stopped)
+     (gdb) file /tmp/hello
+     Reading symbols from /tmp/hello...
+     (gdb) start
+     Temporary breakpoint 1 at 0x401198: file /tmp/hello.c, line 18.
+     Starting program: /tmp/hello
+
+     Temporary breakpoint 1, main () at /tmp/hello.c:18
+     18	  printf ("Hello World\n");
+     (gdb) python print(gdb.selected_thread()._last_stop_time)
+     2024-01-04 14:48:41.347036
+
+
+File: gdb.info,  Node: Recordings In Python,  Next: CLI Commands In Python,  Prev: Threads In Python,  Up: Python API
+
+23.3.2.20 Recordings In Python
+..............................
+
+The following recordings-related functions (*note Process Record and
+Replay::) are available in the 'gdb' module:
+
+ -- Function: gdb.start_recording ([method], [format])
+     Start a recording using the given METHOD and FORMAT.  If no FORMAT
+     is given, the default format for the recording method is used.  If
+     no METHOD is given, the default method will be used.  Returns a
+     'gdb.Record' object on success.  Throw an exception on failure.
+
+     The following strings can be passed as METHOD:
+
+        * '"full"'
+        * '"btrace"': Possible values for FORMAT: '"pt"', '"bts"' or
+          leave out for default format.
+
+ -- Function: gdb.current_recording ()
+     Access a currently running recording.  Return a 'gdb.Record' object
+     on success.  Return 'None' if no recording is currently active.
+
+ -- Function: gdb.stop_recording ()
+     Stop the current recording.  Throw an exception if no recording is
+     currently active.  All record objects become invalid after this
+     call.
+
+   A 'gdb.Record' object has the following attributes:
+
+ -- Variable: Record.method
+     A string with the current recording method, e.g. 'full' or
+     'btrace'.
+
+ -- Variable: Record.format
+     A string with the current recording format, e.g. 'bt', 'pts' or
+     'None'.
+
+ -- Variable: Record.begin
+     A method specific instruction object representing the first
+     instruction in this recording.
+
+ -- Variable: Record.end
+     A method specific instruction object representing the current
+     instruction, that is not actually part of the recording.
+
+ -- Variable: Record.replay_position
+     The instruction representing the current replay position.  If there
+     is no replay active, this will be 'None'.
+
+ -- Variable: Record.instruction_history
+     A list with all recorded instructions.
+
+ -- Variable: Record.function_call_history
+     A list with all recorded function call segments.
+
+   A 'gdb.Record' object has the following methods:
+
+ -- Function: Record.goto (instruction)
+     Move the replay position to the given INSTRUCTION.
+
+   The common 'gdb.Instruction' class that recording method specific
+instruction objects inherit from, has the following attributes:
+
+ -- Variable: Instruction.pc
+     An integer representing this instruction's address.
+
+ -- Variable: Instruction.data
+     A 'memoryview' object holding the raw instruction data.
+
+ -- Variable: Instruction.decoded
+     A human readable string with the disassembled instruction.
+
+ -- Variable: Instruction.size
+     The size of the instruction in bytes.
+
+   Additionally 'gdb.RecordInstruction' has the following attributes:
+
+ -- Variable: RecordInstruction.number
+     An integer identifying this instruction.  'number' corresponds to
+     the numbers seen in 'record instruction-history' (*note Process
+     Record and Replay::).
+
+ -- Variable: RecordInstruction.sal
+     A 'gdb.Symtab_and_line' object representing the associated symtab
+     and line of this instruction.  May be 'None' if no debug
+     information is available.
+
+ -- Variable: RecordInstruction.is_speculative
+     A boolean indicating whether the instruction was executed
+     speculatively.
+
+   If an error occurred during recording or decoding a recording, this
+error is represented by a 'gdb.RecordGap' object in the instruction
+list.  It has the following attributes:
+
+ -- Variable: RecordGap.number
+     An integer identifying this gap.  'number' corresponds to the
+     numbers seen in 'record instruction-history' (*note Process Record
+     and Replay::).
+
+ -- Variable: RecordGap.error_code
+     A numerical representation of the reason for the gap.  The value is
+     specific to the current recording method.
+
+ -- Variable: RecordGap.error_string
+     A human readable string with the reason for the gap.
+
+   A 'gdb.RecordFunctionSegment' object has the following attributes:
+
+ -- Variable: RecordFunctionSegment.number
+     An integer identifying this function segment.  'number' corresponds
+     to the numbers seen in 'record function-call-history' (*note
+     Process Record and Replay::).
+
+ -- Variable: RecordFunctionSegment.symbol
+     A 'gdb.Symbol' object representing the associated symbol.  May be
+     'None' if no debug information is available.
+
+ -- Variable: RecordFunctionSegment.level
+     An integer representing the function call's stack level.  May be
+     'None' if the function call is a gap.
+
+ -- Variable: RecordFunctionSegment.instructions
+     A list of 'gdb.RecordInstruction' or 'gdb.RecordGap' objects
+     associated with this function call.
+
+ -- Variable: RecordFunctionSegment.up
+     A 'gdb.RecordFunctionSegment' object representing the caller's
+     function segment.  If the call has not been recorded, this will be
+     the function segment to which control returns.  If neither the call
+     nor the return have been recorded, this will be 'None'.
+
+ -- Variable: RecordFunctionSegment.prev
+     A 'gdb.RecordFunctionSegment' object representing the previous
+     segment of this function call.  May be 'None'.
+
+ -- Variable: RecordFunctionSegment.next
+     A 'gdb.RecordFunctionSegment' object representing the next segment
+     of this function call.  May be 'None'.
+
+   The following example demonstrates the usage of these objects and
+functions to create a function that will rewind a record to the last
+time a function in a different file was executed.  This would typically
+be used to track the execution of user provided callback functions in a
+library which typically are not visible in a back trace.
+
+     def bringback ():
+         rec = gdb.current_recording ()
+         if not rec:
+             return
+
+         insn = rec.instruction_history
+         if len (insn) == 0:
+             return
+
+         try:
+             position = insn.index (rec.replay_position)
+         except:
+             position = -1
+         try:
+             filename = insn[position].sal.symtab.fullname ()
+         except:
+             filename = None
+
+         for i in reversed (insn[:position]):
+     	try:
+                 current = i.sal.symtab.fullname ()
+     	except:
+                 current = None
+
+             if filename == current:
+                 continue
+
+             rec.goto (i)
+             return
+
+   Another possible application is to write a function that counts the
+number of code executions in a given line range.  This line range can
+contain parts of functions or span across several functions and is not
+limited to be contiguous.
+
+     def countrange (filename, linerange):
+         count = 0
+
+         def filter_only (file_name):
+             for call in gdb.current_recording ().function_call_history:
+                 try:
+                     if file_name in call.symbol.symtab.fullname ():
+                         yield call
+                 except:
+                     pass
+
+         for c in filter_only (filename):
+             for i in c.instructions:
+                 try:
+                     if i.sal.line in linerange:
+                         count += 1
+                         break;
+                 except:
+                         pass
+
+         return count
+
+
+File: gdb.info,  Node: CLI Commands In Python,  Next: GDB/MI Commands In Python,  Prev: Recordings In Python,  Up: Python API
+
+23.3.2.21 CLI Commands In Python
+................................
+
+You can implement new GDB CLI commands in Python.  A CLI command is
+implemented using an instance of the 'gdb.Command' class, most commonly
+using a subclass.
+
+ -- Function: Command.__init__ (name, command_class [, completer_class
+          [, prefix]])
+     The object initializer for 'Command' registers the new command with
+     GDB.  This initializer is normally invoked from the subclass' own
+     '__init__' method.
+
+     NAME is the name of the command.  If NAME consists of multiple
+     words, then the initial words are looked for as prefix commands.
+     In this case, if one of the prefix commands does not exist, an
+     exception is raised.
+
+     There is no support for multi-line commands.
+
+     COMMAND_CLASS should be one of the 'COMMAND_' constants defined
+     below.  This argument tells GDB how to categorize the new command
+     in the help system.
+
+     COMPLETER_CLASS is an optional argument.  If given, it should be
+     one of the 'COMPLETE_' constants defined below.  This argument
+     tells GDB how to perform completion for this command.  If not
+     given, GDB will attempt to complete using the object's 'complete'
+     method (see below); if no such method is found, an error will occur
+     when completion is attempted.
+
+     PREFIX is an optional argument.  If 'True', then the new command is
+     a prefix command; sub-commands of this command may be registered.
+
+     The help text for the new command is taken from the Python
+     documentation string for the command's class, if there is one.  If
+     no documentation string is provided, the default value "This
+     command is not documented."  is used.
+
+ -- Function: Command.dont_repeat ()
+     By default, a GDB command is repeated when the user enters a blank
+     line at the command prompt.  A command can suppress this behavior
+     by invoking the 'dont_repeat' method at some point in its 'invoke'
+     method (normally this is done early in case of exception).  This is
+     similar to the user command 'dont-repeat', see *note dont-repeat:
+     Define.
+
+ -- Function: Command.invoke (argument, from_tty)
+     This method is called by GDB when this command is invoked.
+
+     ARGUMENT is a string.  It is the argument to the command, after
+     leading and trailing whitespace has been stripped.
+
+     FROM_TTY is a boolean argument.  When true, this means that the
+     command was entered by the user at the terminal; when false it
+     means that the command came from elsewhere.
+
+     If this method throws an exception, it is turned into a GDB 'error'
+     call.  Otherwise, the return value is ignored.
+
+     To break ARGUMENT up into an argv-like string use
+     'gdb.string_to_argv'.  This function behaves identically to GDB's
+     internal argument lexer 'buildargv'.  It is recommended to use this
+     for consistency.  Arguments are separated by spaces and may be
+     quoted.  Example:
+
+          print gdb.string_to_argv ("1 2\ \\\"3 '4 \"5' \"6 '7\"")
+          ['1', '2 "3', '4 "5', "6 '7"]
+
+ -- Function: Command.complete (text, word)
+     This method is called by GDB when the user attempts completion on
+     this command.  All forms of completion are handled by this method,
+     that is, the <TAB> and <M-?> key bindings (*note Completion::), and
+     the 'complete' command (*note complete: Help.).
+
+     The arguments TEXT and WORD are both strings; TEXT holds the
+     complete command line up to the cursor's location, while WORD holds
+     the last word of the command line; this is computed using a
+     word-breaking heuristic.
+
+     The 'complete' method can return several values:
+        * If the return value is a sequence, the contents of the
+          sequence are used as the completions.  It is up to 'complete'
+          to ensure that the contents actually do complete the word.  A
+          zero-length sequence is allowed, it means that there were no
+          completions available.  Only string elements of the sequence
+          are used; other elements in the sequence are ignored.
+
+        * If the return value is one of the 'COMPLETE_' constants
+          defined below, then the corresponding GDB-internal completion
+          function is invoked, and its result is used.
+
+        * All other results are treated as though there were no
+          available completions.
+
+   When a new command is registered, it must be declared as a member of
+some general class of commands.  This is used to classify top-level
+commands in the on-line help system; note that prefix commands are not
+listed under their own category but rather that of their top-level
+command.  The available classifications are represented by constants
+defined in the 'gdb' module:
+
+'gdb.COMMAND_NONE'
+     The command does not belong to any particular class.  A command in
+     this category will not be displayed in any of the help categories.
+
+'gdb.COMMAND_RUNNING'
+     The command is related to running the inferior.  For example,
+     'start', 'step', and 'continue' are in this category.  Type 'help
+     running' at the GDB prompt to see a list of commands in this
+     category.
+
+'gdb.COMMAND_DATA'
+     The command is related to data or variables.  For example, 'call',
+     'find', and 'print' are in this category.  Type 'help data' at the
+     GDB prompt to see a list of commands in this category.
+
+'gdb.COMMAND_STACK'
+     The command has to do with manipulation of the stack.  For example,
+     'backtrace', 'frame', and 'return' are in this category.  Type
+     'help stack' at the GDB prompt to see a list of commands in this
+     category.
+
+'gdb.COMMAND_FILES'
+     This class is used for file-related commands.  For example, 'file',
+     'list' and 'section' are in this category.  Type 'help files' at
+     the GDB prompt to see a list of commands in this category.
+
+'gdb.COMMAND_SUPPORT'
+     This should be used for "support facilities", generally meaning
+     things that are useful to the user when interacting with GDB, but
+     not related to the state of the inferior.  For example, 'help',
+     'make', and 'shell' are in this category.  Type 'help support' at
+     the GDB prompt to see a list of commands in this category.
+
+'gdb.COMMAND_STATUS'
+     The command is an 'info'-related command, that is, related to the
+     state of GDB itself.  For example, 'info', 'macro', and 'show' are
+     in this category.  Type 'help status' at the GDB prompt to see a
+     list of commands in this category.
+
+'gdb.COMMAND_BREAKPOINTS'
+     The command has to do with breakpoints.  For example, 'break',
+     'clear', and 'delete' are in this category.  Type 'help
+     breakpoints' at the GDB prompt to see a list of commands in this
+     category.
+
+'gdb.COMMAND_TRACEPOINTS'
+     The command has to do with tracepoints.  For example, 'trace',
+     'actions', and 'tfind' are in this category.  Type 'help
+     tracepoints' at the GDB prompt to see a list of commands in this
+     category.
+
+'gdb.COMMAND_TUI'
+     The command has to do with the text user interface (*note TUI::).
+     Type 'help tui' at the GDB prompt to see a list of commands in this
+     category.
+
+'gdb.COMMAND_USER'
+     The command is a general purpose command for the user, and
+     typically does not fit in one of the other categories.  Type 'help
+     user-defined' at the GDB prompt to see a list of commands in this
+     category, as well as the list of gdb macros (*note Sequences::).
+
+'gdb.COMMAND_OBSCURE'
+     The command is only used in unusual circumstances, or is not of
+     general interest to users.  For example, 'checkpoint', 'fork', and
+     'stop' are in this category.  Type 'help obscure' at the GDB prompt
+     to see a list of commands in this category.
+
+'gdb.COMMAND_MAINTENANCE'
+     The command is only useful to GDB maintainers.  The 'maintenance'
+     and 'flushregs' commands are in this category.  Type 'help
+     internals' at the GDB prompt to see a list of commands in this
+     category.
+
+   A new command can use a predefined completion function, either by
+specifying it via an argument at initialization, or by returning it from
+the 'complete' method.  These predefined completion constants are all
+defined in the 'gdb' module:
+
+'gdb.COMPLETE_NONE'
+     This constant means that no completion should be done.
+
+'gdb.COMPLETE_FILENAME'
+     This constant means that filename completion should be performed.
+
+'gdb.COMPLETE_LOCATION'
+     This constant means that location completion should be done.  *Note
+     Location Specifications::.
+
+'gdb.COMPLETE_COMMAND'
+     This constant means that completion should examine GDB command
+     names.
+
+'gdb.COMPLETE_SYMBOL'
+     This constant means that completion should be done using symbol
+     names as the source.
+
+'gdb.COMPLETE_EXPRESSION'
+     This constant means that completion should be done on expressions.
+     Often this means completing on symbol names, but some language
+     parsers also have support for completing on field names.
+
+   The following code snippet shows how a trivial CLI command can be
+implemented in Python:
+
+     class HelloWorld (gdb.Command):
+       """Greet the whole world."""
+
+       def __init__ (self):
+         super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_USER)
+
+       def invoke (self, arg, from_tty):
+         print ("Hello, World!")
+
+     HelloWorld ()
+
+   The last line instantiates the class, and is necessary to trigger the
+registration of the command with GDB.  Depending on how the Python code
+is read into GDB, you may need to import the 'gdb' module explicitly.
+
+
+File: gdb.info,  Node: GDB/MI Commands In Python,  Next: GDB/MI Notifications In Python,  Prev: CLI Commands In Python,  Up: Python API
+
+23.3.2.22 GDB/MI Commands In Python
+...................................
+
+It is possible to add GDB/MI (*note GDB/MI::) commands implemented in
+Python.  A GDB/MI command is implemented using an instance of the
+'gdb.MICommand' class, most commonly using a subclass.
+
+ -- Function: MICommand.__init__ (name)
+     The object initializer for 'MICommand' registers the new command
+     with GDB.  This initializer is normally invoked from the subclass'
+     own '__init__' method.
+
+     NAME is the name of the command.  It must be a valid name of a
+     GDB/MI command, and in particular must start with a hyphen ('-').
+     Reusing the name of a built-in GDB/MI is not allowed, and a
+     'RuntimeError' will be raised.  Using the name of an GDB/MI command
+     previously defined in Python is allowed, the previous command will
+     be replaced with the new command.
+
+ -- Function: MICommand.invoke (arguments)
+     This method is called by GDB when the new MI command is invoked.
+
+     ARGUMENTS is a list of strings.  Note, that '--thread' and
+     '--frame' arguments are handled by GDB itself therefore they do not
+     show up in 'arguments'.
+
+     If this method raises an exception, then it is turned into a GDB/MI
+     '^error' response.  Only 'gdb.GdbError' exceptions (or its
+     sub-classes) should be used for reporting errors to users, any
+     other exception type is treated as a failure of the 'invoke'
+     method, and the exception will be printed to the error stream
+     according to the 'set python print-stack' setting (*note 'set
+     python print-stack': set_python_print_stack.).
+
+     If this method returns 'None', then the GDB/MI command will return
+     a '^done' response with no additional values.
+
+     Otherwise, the return value must be a dictionary, which is
+     converted to a GDB/MI RESULT-RECORD (*note GDB/MI Output Syntax::).
+     The keys of this dictionary must be strings, and are used as
+     VARIABLE names in the RESULT-RECORD, these strings must comply with
+     the naming rules detailed below.  The values of this dictionary are
+     recursively handled as follows:
+
+        * If the value is Python sequence or iterator, it is converted
+          to GDB/MI LIST with elements converted recursively.
+
+        * If the value is Python dictionary, it is converted to GDB/MI
+          TUPLE.  Keys in that dictionary must be strings, which comply
+          with the VARIABLE naming rules detailed below.  Values are
+          converted recursively.
+
+        * Otherwise, value is first converted to a Python string using
+          'str ()' and then converted to GDB/MI CONST.
+
+     The strings used for VARIABLE names in the GDB/MI output must
+     follow the following rules; the string must be at least one
+     character long, the first character must be in the set '[a-zA-Z]',
+     while every subsequent character must be in the set
+     '[-_a-zA-Z0-9]'.
+
+   An instance of 'MICommand' has the following attributes:
+
+ -- Variable: MICommand.name
+     A string, the name of this GDB/MI command, as was passed to the
+     '__init__' method.  This attribute is read-only.
+
+ -- Variable: MICommand.installed
+     A boolean value indicating if this command is installed ready for a
+     user to call from the command line.  Commands are automatically
+     installed when they are instantiated, after which this attribute
+     will be 'True'.
+
+     If later, a new command is created with the same name, then the
+     original command will become uninstalled, and this attribute will
+     be 'False'.
+
+     This attribute is read-write, setting this attribute to 'False'
+     will uninstall the command, removing it from the set of available
+     commands.  Setting this attribute to 'True' will install the
+     command for use.  If there is already a Python command with this
+     name installed, the currently installed command will be
+     uninstalled, and this command installed in its stead.
+
+   The following code snippet shows how some trivial MI commands can be
+implemented in Python:
+
+     class MIEcho(gdb.MICommand):
+         """Echo arguments passed to the command."""
+
+         def __init__(self, name, mode):
+             self._mode = mode
+             super(MIEcho, self).__init__(name)
+
+         def invoke(self, argv):
+             if self._mode == 'dict':
+                 return { 'dict': { 'argv' : argv } }
+             elif self._mode == 'list':
+                 return { 'list': argv }
+             else:
+                 return { 'string': ", ".join(argv) }
+
+
+     MIEcho("-echo-dict", "dict")
+     MIEcho("-echo-list", "list")
+     MIEcho("-echo-string", "string")
+
+   The last three lines instantiate the class three times, creating
+three new GDB/MI commands '-echo-dict', '-echo-list', and
+'-echo-string'.  Each time a subclass of 'gdb.MICommand' is
+instantiated, the new command is automatically registered with GDB.
+
+   Depending on how the Python code is read into GDB, you may need to
+import the 'gdb' module explicitly.
+
+   The following example shows a GDB session in which the above commands
+have been added:
+
+     (gdb)
+     -echo-dict abc def ghi
+     ^done,dict={argv=["abc","def","ghi"]}
+     (gdb)
+     -echo-list abc def ghi
+     ^done,list=["abc","def","ghi"]
+     (gdb)
+     -echo-string abc def ghi
+     ^done,string="abc, def, ghi"
+     (gdb)
+
+   Conversely, it is possible to execute GDB/MI commands from Python,
+with the results being a Python object and not a specially-formatted
+string.  This is done with the 'gdb.execute_mi' function.
+
+ -- Function: gdb.execute_mi (command [, arg ]...)
+     Invoke a GDB/MI command.  COMMAND is the name of the command, a
+     string.  The arguments, ARG, are passed to the command.  Each
+     argument must also be a string.
+
+     This function returns a Python dictionary whose contents reflect
+     the corresponding GDB/MI command's output.  Refer to the
+     documentation for these commands for details.  Lists are
+     represented as Python lists, and tuples are represented as Python
+     dictionaries.
+
+     If the command fails, it will raise a Python exception.
+
+   Here is how this works using the commands from the example above:
+
+     (gdb) python print(gdb.execute_mi("-echo-dict", "abc", "def", "ghi"))
+     {'dict': {'argv': ['abc', 'def', 'ghi']}}
+     (gdb) python print(gdb.execute_mi("-echo-list", "abc", "def", "ghi"))
+     {'list': ['abc', 'def', 'ghi']}
+     (gdb) python print(gdb.execute_mi("-echo-string", "abc", "def", "ghi"))
+     {'string': 'abc, def, ghi'}
+
+
+File: gdb.info,  Node: GDB/MI Notifications In Python,  Next: Parameters In Python,  Prev: GDB/MI Commands In Python,  Up: Python API
+
+23.3.2.23 GDB/MI Notifications In Python
+........................................
+
+It is possible to emit GDB/MI notifications from Python.  Use the
+'gdb.notify_mi' function to do that.
+
+ -- Function: gdb.notify_mi (name [, data])
+     Emit a GDB/MI asynchronous notification.  NAME is the name of the
+     notification, consisting of alphanumeric characters and a hyphen
+     ('-').  DATA is any additional data to be emitted with the
+     notification, passed as a Python dictionary.  This argument is
+     optional.  The dictionary is converted to a GDB/MI RESULT records
+     (*note GDB/MI Output Syntax::) the same way as result of Python MI
+     command (*note GDB/MI Commands In Python::).
+
+     If DATA is 'None' then no additional values are emitted.
+
+   While using existing notification names (*note GDB/MI Async
+Records::) with 'gdb.notify_mi' is allowed, users are encouraged to
+prefix user-defined notification with a hyphen ('-') to avoid possible
+conflict.  GDB will never introduce notification starting with hyphen.
+
+   Here is how to emit '=-connection-removed' whenever a connection to
+remote GDB server is closed (*note Connections In Python::):
+
+     def notify_connection_removed(event):
+         data = {"id": event.connection.num, "type": event.connection.type}
+         gdb.notify_mi("-connection-removed", data)
+
+
+     gdb.events.connection_removed.connect(notify_connection_removed)
+
+   Then, each time a connection is closed, there will be a notification
+on MI channel:
+
+     =-connection-removed,id="1",type="remote"
+
+
+File: gdb.info,  Node: Parameters In Python,  Next: Functions In Python,  Prev: GDB/MI Notifications In Python,  Up: Python API
+
+23.3.2.24 Parameters In Python
+..............................
+
+You can implement new GDB parameters using Python.  A new parameter is
+implemented as an instance of the 'gdb.Parameter' class.
+
+   Parameters are exposed to the user via the 'set' and 'show' commands.
+*Note Help::.
+
+   There are many parameters that already exist and can be set in GDB.
+Two examples are: 'set follow fork' and 'set charset'.  Setting these
+parameters influences certain behavior in GDB.  Similarly, you can
+define parameters that can be used to influence behavior in custom
+Python scripts and commands.
+
+ -- Function: Parameter.__init__ (name, command_class, parameter_class
+          [, enum_sequence])
+     The object initializer for 'Parameter' registers the new parameter
+     with GDB.  This initializer is normally invoked from the subclass'
+     own '__init__' method.
+
+     NAME is the name of the new parameter.  If NAME consists of
+     multiple words, then the initial words are looked for as prefix
+     parameters.  An example of this can be illustrated with the 'set
+     print' set of parameters.  If NAME is 'print foo', then 'print'
+     will be searched as the prefix parameter.  In this case the
+     parameter can subsequently be accessed in GDB as 'set print foo'.
+
+     If NAME consists of multiple words, and no prefix parameter group
+     can be found, an exception is raised.
+
+     COMMAND_CLASS should be one of the 'COMMAND_' constants (*note CLI
+     Commands In Python::).  This argument tells GDB how to categorize
+     the new parameter in the help system.
+
+     PARAMETER_CLASS should be one of the 'PARAM_' constants defined
+     below.  This argument tells GDB the type of the new parameter; this
+     information is used for input validation and completion.
+
+     If PARAMETER_CLASS is 'PARAM_ENUM', then ENUM_SEQUENCE must be a
+     sequence of strings.  These strings represent the possible values
+     for the parameter.
+
+     If PARAMETER_CLASS is not 'PARAM_ENUM', then the presence of a
+     fourth argument will cause an exception to be thrown.
+
+     The help text for the new parameter includes the Python
+     documentation string from the parameter's class, if there is one.
+     If there is no documentation string, a default value is used.  The
+     documentation string is included in the output of the parameters
+     'help set' and 'help show' commands, and should be written taking
+     this into account.
+
+ -- Variable: Parameter.set_doc
+     If this attribute exists, and is a string, then its value is used
+     as the first part of the help text for this parameter's 'set'
+     command.  The second part of the help text is taken from the
+     documentation string for the parameter's class, if there is one.
+
+     The value of 'set_doc' should give a brief summary specific to the
+     set action, this text is only displayed when the user runs the
+     'help set' command for this parameter.  The class documentation
+     should be used to give a fuller description of what the parameter
+     does, this text is displayed for both the 'help set' and 'help
+     show' commands.
+
+     The 'set_doc' value is examined when 'Parameter.__init__' is
+     invoked; subsequent changes have no effect.
+
+ -- Variable: Parameter.show_doc
+     If this attribute exists, and is a string, then its value is used
+     as the first part of the help text for this parameter's 'show'
+     command.  The second part of the help text is taken from the
+     documentation string for the parameter's class, if there is one.
+
+     The value of 'show_doc' should give a brief summary specific to the
+     show action, this text is only displayed when the user runs the
+     'help show' command for this parameter.  The class documentation
+     should be used to give a fuller description of what the parameter
+     does, this text is displayed for both the 'help set' and 'help
+     show' commands.
+
+     The 'show_doc' value is examined when 'Parameter.__init__' is
+     invoked; subsequent changes have no effect.
+
+ -- Variable: Parameter.value
+     The 'value' attribute holds the underlying value of the parameter.
+     It can be read and assigned to just as any other attribute.  GDB
+     does validation when assignments are made.
+
+   There are two methods that may be implemented in any 'Parameter'
+class.  These are:
+
+ -- Function: Parameter.get_set_string (self)
+     If this method exists, GDB will call it when a PARAMETER's value
+     has been changed via the 'set' API (for example, 'set foo off').
+     The 'value' attribute has already been populated with the new value
+     and may be used in output.  This method must return a string.  If
+     the returned string is not empty, GDB will present it to the user.
+
+     If this method raises the 'gdb.GdbError' exception (*note Exception
+     Handling::), then GDB will print the exception's string and the
+     'set' command will fail.  Note, however, that the 'value' attribute
+     will not be reset in this case.  So, if your parameter must
+     validate values, it should store the old value internally and reset
+     the exposed value, like so:
+
+          class ExampleParam (gdb.Parameter):
+             def __init__ (self, name):
+                super (ExampleParam, self).__init__ (name,
+                             gdb.COMMAND_DATA,
+                             gdb.PARAM_BOOLEAN)
+                self.value = True
+                self.saved_value = True
+             def validate(self):
+                return False
+             def get_set_string (self):
+                if not self.validate():
+                  self.value = self.saved_value
+                  raise gdb.GdbError('Failed to validate')
+                self.saved_value = self.value
+                return ""
+
+ -- Function: Parameter.get_show_string (self, svalue)
+     GDB will call this method when a PARAMETER's 'show' API has been
+     invoked (for example, 'show foo').  The argument 'svalue' receives
+     the string representation of the current value.  This method must
+     return a string.
+
+   When a new parameter is defined, its type must be specified.  The
+available types are represented by constants defined in the 'gdb'
+module:
+
+'gdb.PARAM_BOOLEAN'
+     The value is a plain boolean.  The Python boolean values, 'True'
+     and 'False' are the only valid values.
+
+'gdb.PARAM_AUTO_BOOLEAN'
+     The value has three possible states: true, false, and 'auto'.  In
+     Python, true and false are represented using boolean constants, and
+     'auto' is represented using 'None'.
+
+'gdb.PARAM_UINTEGER'
+     The value is an unsigned integer.  The value of 'None' should be
+     interpreted to mean "unlimited" (literal ''unlimited'' can also be
+     used to set that value), and the value of 0 is reserved and should
+     not be used.
+
+'gdb.PARAM_INTEGER'
+     The value is a signed integer.  The value of 'None' should be
+     interpreted to mean "unlimited" (literal ''unlimited'' can also be
+     used to set that value), and the value of 0 is reserved and should
+     not be used.
+
+'gdb.PARAM_STRING'
+     The value is a string.  When the user modifies the string, any
+     escape sequences, such as '\t', '\f', and octal escapes, are
+     translated into corresponding characters and encoded into the
+     current host charset.
+
+'gdb.PARAM_STRING_NOESCAPE'
+     The value is a string.  When the user modifies the string, escapes
+     are passed through untranslated.
+
+'gdb.PARAM_OPTIONAL_FILENAME'
+     The value is a either a filename (a string), or 'None'.
+
+'gdb.PARAM_FILENAME'
+     The value is a filename.  This is just like
+     'PARAM_STRING_NOESCAPE', but uses file names for completion.
+
+'gdb.PARAM_ZINTEGER'
+     The value is a signed integer.  This is like 'PARAM_INTEGER',
+     except that 0 is allowed and the value of 'None' is not supported.
+
+'gdb.PARAM_ZUINTEGER'
+     The value is an unsigned integer.  This is like 'PARAM_UINTEGER',
+     except that 0 is allowed and the value of 'None' is not supported.
+
+'gdb.PARAM_ZUINTEGER_UNLIMITED'
+     The value is a signed integer.  This is like 'PARAM_INTEGER'
+     including that the value of 'None' should be interpreted to mean
+     "unlimited" (literal ''unlimited'' can also be used to set that
+     value), except that 0 is allowed, and the value cannot be negative,
+     except the special value -1 is returned for the setting of
+     "unlimited".
+
+'gdb.PARAM_ENUM'
+     The value is a string, which must be one of a collection string
+     constants provided when the parameter is created.
+
+
+File: gdb.info,  Node: Functions In Python,  Next: Progspaces In Python,  Prev: Parameters In Python,  Up: Python API
+
+23.3.2.25 Writing new convenience functions
+...........................................
+
+You can implement new convenience functions (*note Convenience Vars::)
+in Python.  A convenience function is an instance of a subclass of the
+class 'gdb.Function'.
+
+ -- Function: Function.__init__ (name)
+     The initializer for 'Function' registers the new function with GDB.
+     The argument NAME is the name of the function, a string.  The
+     function will be visible to the user as a convenience variable of
+     type 'internal function', whose name is the same as the given NAME.
+
+     The documentation for the new function is taken from the
+     documentation string for the new class.
+
+ -- Function: Function.invoke (*args)
+     When a convenience function is evaluated, its arguments are
+     converted to instances of 'gdb.Value', and then the function's
+     'invoke' method is called.  Note that GDB does not predetermine the
+     arity of convenience functions.  Instead, all available arguments
+     are passed to 'invoke', following the standard Python calling
+     convention.  In particular, a convenience function can have default
+     values for parameters without ill effect.
+
+     The return value of this method is used as its value in the
+     enclosing expression.  If an ordinary Python value is returned, it
+     is converted to a 'gdb.Value' following the usual rules.
+
+   The following code snippet shows how a trivial convenience function
+can be implemented in Python:
+
+     class Greet (gdb.Function):
+       """Return string to greet someone.
+     Takes a name as argument."""
+
+       def __init__ (self):
+         super (Greet, self).__init__ ("greet")
+
+       def invoke (self, name):
+         return "Hello, %s!" % name.string ()
+
+     Greet ()
+
+   The last line instantiates the class, and is necessary to trigger the
+registration of the function with GDB.  Depending on how the Python code
+is read into GDB, you may need to import the 'gdb' module explicitly.
+
+   Now you can use the function in an expression:
+
+     (gdb) print $greet("Bob")
+     $1 = "Hello, Bob!"
+
+
+File: gdb.info,  Node: Progspaces In Python,  Next: Objfiles In Python,  Prev: Functions In Python,  Up: Python API
+
+23.3.2.26 Program Spaces In Python
+..................................
+
+A program space, or "progspace", represents a symbolic view of an
+address space.  It consists of all of the objfiles of the program.
+*Note Objfiles In Python::.  *Note program spaces: Inferiors Connections
+and Programs, for more details about program spaces.
+
+   The following progspace-related functions are available in the 'gdb'
+module:
+
+ -- Function: gdb.current_progspace ()
+     This function returns the program space of the currently selected
+     inferior.  *Note Inferiors Connections and Programs::.  This is
+     identical to 'gdb.selected_inferior().progspace' (*note Inferiors
+     In Python::) and is included for historical compatibility.
+
+ -- Function: gdb.progspaces ()
+     Return a sequence of all the progspaces currently known to GDB.
+
+   Each progspace is represented by an instance of the 'gdb.Progspace'
+class.
+
+ -- Variable: Progspace.filename
+     The file name, as a string, of the main symbol file (from which
+     debug symbols have been loaded) for the progspace, e.g. the
+     argument to the 'symbol-file' or 'file' commands.
+
+     If there is no main symbol table currently loaded, then this
+     attribute will be 'None'.
+
+ -- Variable: Progspace.symbol_file
+     The 'gdb.Objfile' representing the main symbol file (from which
+     debug symbols have been loaded) for the 'gdb.Progspace'.  This is
+     the symbol file set by the 'symbol-file' or 'file' commands.
+
+     This will be the 'gdb.Objfile' representing 'Progspace.filename'
+     when 'Progspace.filename' is not 'None'.
+
+     If there is no main symbol table currently loaded, then this
+     attribute will be 'None'.
+
+     If the 'Progspace' is invalid, i.e., when 'Progspace.is_valid()'
+     returns 'False', then attempting to access this attribute will
+     raise a 'RuntimeError' exception.
+
+ -- Variable: Progspace.executable_filename
+     The file name, as a string, of the executable file in use by this
+     program space.  The executable file is the file that GDB will
+     invoke in order to start an inferior when using a native target.
+     The file name within this attribute is updated by the 'exec-file'
+     and 'file' commands.
+
+     If no executable is currently set within this 'Progspace' then this
+     attribute contains 'None'.
+
+     If the 'Progspace' is invalid, i.e., when 'Progspace.is_valid()'
+     returns 'False', then attempting to access this attribute will
+     raise a 'RuntimeError' exception.
+
+ -- Variable: Progspace.pretty_printers
+     The 'pretty_printers' attribute is a list of functions.  It is used
+     to look up pretty-printers.  A 'Value' is passed to each function
+     in order; if the function returns 'None', then the search
+     continues.  Otherwise, the return value should be an object which
+     is used to format the value.  *Note Pretty Printing API::, for more
+     information.
+
+ -- Variable: Progspace.type_printers
+     The 'type_printers' attribute is a list of type printer objects.
+     *Note Type Printing API::, for more information.
+
+ -- Variable: Progspace.frame_filters
+     The 'frame_filters' attribute is a dictionary of frame filter
+     objects.  *Note Frame Filter API::, for more information.
+
+ -- Variable: Progspace.missing_debug_handlers
+     The 'missing_debug_handlers' attribute is a list of the missing
+     debug handler objects for this program space.  *Note Missing Debug
+     Info In Python::, for more information.
+
+   A program space has the following methods:
+
+ -- Function: Progspace.block_for_pc (pc)
+     Return the innermost 'gdb.Block' containing the given PC value.  If
+     the block cannot be found for the PC value specified, the function
+     will return 'None'.
+
+ -- Function: Progspace.find_pc_line (pc)
+     Return the 'gdb.Symtab_and_line' object corresponding to the PC
+     value.  *Note Symbol Tables In Python::.  If an invalid value of PC
+     is passed as an argument, then the 'symtab' and 'line' attributes
+     of the returned 'gdb.Symtab_and_line' object will be 'None' and 0
+     respectively.
+
+ -- Function: Progspace.is_valid ()
+     Returns 'True' if the 'gdb.Progspace' object is valid, 'False' if
+     not.  A 'gdb.Progspace' object can become invalid if the program
+     space file it refers to is not referenced by any inferior.  All
+     other 'gdb.Progspace' methods will throw an exception if it is
+     invalid at the time the method is called.
+
+ -- Function: Progspace.objfiles ()
+     Return a sequence of all the objfiles referenced by this program
+     space.  *Note Objfiles In Python::.
+
+ -- Function: Progspace.solib_name (address)
+     Return the name of the shared library holding the given ADDRESS as
+     a string, or 'None'.
+
+ -- Function: Progspace.objfile_for_address (address)
+     Return the 'gdb.Objfile' holding the given address, or 'None' if no
+     objfile covers it.
+
+   One may add arbitrary attributes to 'gdb.Progspace' objects in the
+usual Python way.  This is useful if, for example, one needs to do some
+extra record keeping associated with the program space.
+
+   *Note choosing attribute names::, for guidance on selecting a
+suitable name for new attributes.
+
+   In this contrived example, we want to perform some processing when an
+objfile with a certain symbol is loaded, but we only want to do this
+once because it is expensive.  To achieve this we record the results
+with the program space because we can't predict when the desired objfile
+will be loaded.
+
+     (gdb) python
+     def clear_objfiles_handler(event):
+         event.progspace.expensive_computation = None
+     def expensive(symbol):
+         """A mock routine to perform an "expensive" computation on symbol."""
+         print ("Computing the answer to the ultimate question ...")
+         return 42
+     def new_objfile_handler(event):
+         objfile = event.new_objfile
+         progspace = objfile.progspace
+         if not hasattr(progspace, 'expensive_computation') or \
+                 progspace.expensive_computation is None:
+             # We use 'main' for the symbol to keep the example simple.
+             # Note: There's no current way to constrain the lookup
+             # to one objfile.
+             symbol = gdb.lookup_global_symbol('main')
+             if symbol is not None:
+                 progspace.expensive_computation = expensive(symbol)
+     gdb.events.clear_objfiles.connect(clear_objfiles_handler)
+     gdb.events.new_objfile.connect(new_objfile_handler)
+     end
+     (gdb) file /tmp/hello
+     Reading symbols from /tmp/hello...
+     Computing the answer to the ultimate question ...
+     (gdb) python print(gdb.current_progspace().expensive_computation)
+     42
+     (gdb) run
+     Starting program: /tmp/hello
+     Hello.
+     [Inferior 1 (process 4242) exited normally]
+
+
+File: gdb.info,  Node: Objfiles In Python,  Next: Frames In Python,  Prev: Progspaces In Python,  Up: Python API
+
+23.3.2.27 Objfiles In Python
+............................
+
+GDB loads symbols for an inferior from various symbol-containing files
+(*note Files::).  These include the primary executable file, any shared
+libraries used by the inferior, and any separate debug info files (*note
+Separate Debug Files::).  GDB calls these symbol-containing files
+"objfiles".
+
+   The following objfile-related functions are available in the 'gdb'
+module:
+
+ -- Function: gdb.current_objfile ()
+     When auto-loading a Python script (*note Python Auto-loading::),
+     GDB sets the "current objfile" to the corresponding objfile.  This
+     function returns the current objfile.  If there is no current
+     objfile, this function returns 'None'.
+
+ -- Function: gdb.objfiles ()
+     Return a sequence of objfiles referenced by the current program
+     space.  *Note Objfiles In Python::, and *note Progspaces In
+     Python::.  This is identical to
+     'gdb.selected_inferior().progspace.objfiles()' and is included for
+     historical compatibility.
+
+ -- Function: gdb.lookup_objfile (name [, by_build_id])
+     Look up NAME, a file name or build ID, in the list of objfiles for
+     the current program space (*note Progspaces In Python::).  If the
+     objfile is not found throw the Python 'ValueError' exception.
+
+     If NAME is a relative file name, then it will match any source file
+     name with the same trailing components.  For example, if NAME is
+     'gcc/expr.c', then it will match source file name of
+     '/build/trunk/gcc/expr.c', but not '/build/trunk/libcpp/expr.c' or
+     '/build/trunk/gcc/x-expr.c'.
+
+     If BY_BUILD_ID is provided and is 'True' then NAME is the build ID
+     of the objfile.  Otherwise, NAME is a file name.  This is supported
+     only on some operating systems, notably those which use the ELF
+     format for binary files and the GNU Binutils.  For more details
+     about this feature, see the description of the '--build-id'
+     command-line option in *note Command Line Options: (ld)Options.
+
+   Each objfile is represented by an instance of the 'gdb.Objfile'
+class.
+
+ -- Variable: Objfile.filename
+     The file name of the objfile as a string, with symbolic links
+     resolved.
+
+     The value is 'None' if the objfile is no longer valid.  See the
+     'gdb.Objfile.is_valid' method, described below.
+
+ -- Variable: Objfile.username
+     The file name of the objfile as specified by the user as a string.
+
+     The value is 'None' if the objfile is no longer valid.  See the
+     'gdb.Objfile.is_valid' method, described below.
+
+ -- Variable: Objfile.is_file
+     An objfile often comes from an ordinary file, but in some cases it
+     may be constructed from the contents of memory.  This attribute is
+     'True' for file-backed objfiles, and 'False' for other kinds.
+
+ -- Variable: Objfile.owner
+     For separate debug info objfiles this is the corresponding
+     'gdb.Objfile' object that debug info is being provided for.
+     Otherwise this is 'None'.  Separate debug info objfiles are added
+     with the 'gdb.Objfile.add_separate_debug_file' method, described
+     below.
+
+ -- Variable: Objfile.build_id
+     The build ID of the objfile as a string.  If the objfile does not
+     have a build ID then the value is 'None'.
+
+     This is supported only on some operating systems, notably those
+     which use the ELF format for binary files and the GNU Binutils.
+     For more details about this feature, see the description of the
+     '--build-id' command-line option in *note Command Line Options:
+     (ld)Options.
+
+ -- Variable: Objfile.progspace
+     The containing program space of the objfile as a 'gdb.Progspace'
+     object.  *Note Progspaces In Python::.
+
+ -- Variable: Objfile.pretty_printers
+     The 'pretty_printers' attribute is a list of functions.  It is used
+     to look up pretty-printers.  A 'Value' is passed to each function
+     in order; if the function returns 'None', then the search
+     continues.  Otherwise, the return value should be an object which
+     is used to format the value.  *Note Pretty Printing API::, for more
+     information.
+
+ -- Variable: Objfile.type_printers
+     The 'type_printers' attribute is a list of type printer objects.
+     *Note Type Printing API::, for more information.
+
+ -- Variable: Objfile.frame_filters
+     The 'frame_filters' attribute is a dictionary of frame filter
+     objects.  *Note Frame Filter API::, for more information.
+
+   One may add arbitrary attributes to 'gdb.Objfile' objects in the
+usual Python way.  This is useful if, for example, one needs to do some
+extra record keeping associated with the objfile.
+
+   *Note choosing attribute names::, for guidance on selecting a
+suitable name for new attributes.
+
+   In this contrived example we record the time when GDB loaded the
+objfile.
+
+     (gdb) python
+     import datetime
+     def new_objfile_handler(event):
+         # Set the time_loaded attribute of the new objfile.
+         event.new_objfile.time_loaded = datetime.datetime.today()
+     gdb.events.new_objfile.connect(new_objfile_handler)
+     end
+     (gdb) file ./hello
+     Reading symbols from ./hello...
+     (gdb) python print(gdb.objfiles()[0].time_loaded)
+     2014-10-09 11:41:36.770345
+
+   A 'gdb.Objfile' object has the following methods:
+
+ -- Function: Objfile.is_valid ()
+     Returns 'True' if the 'gdb.Objfile' object is valid, 'False' if
+     not.  A 'gdb.Objfile' object can become invalid if the object file
+     it refers to is not loaded in GDB any longer.  All other
+     'gdb.Objfile' methods will throw an exception if it is invalid at
+     the time the method is called.
+
+ -- Function: Objfile.add_separate_debug_file (file)
+     Add FILE to the list of files that GDB will search for debug
+     information for the objfile.  This is useful when the debug info
+     has been removed from the program and stored in a separate file.
+     GDB has built-in support for finding separate debug info files
+     (*note Separate Debug Files::), but if the file doesn't live in one
+     of the standard places that GDB searches then this function can be
+     used to add a debug info file from a different place.
+
+ -- Function: Objfile.lookup_global_symbol (name [, domain])
+     Search for a global symbol named NAME in this objfile.  Optionally,
+     the search scope can be restricted with the DOMAIN argument.  The
+     DOMAIN argument must be a domain constant defined in the 'gdb'
+     module and described in *note Symbols In Python::.  This function
+     is similar to 'gdb.lookup_global_symbol', except that the search is
+     limited to this objfile.
+
+     The result is a 'gdb.Symbol' object or 'None' if the symbol is not
+     found.
+
+ -- Function: Objfile.lookup_static_symbol (name [, domain])
+     Like 'Objfile.lookup_global_symbol', but searches for a global
+     symbol with static linkage named NAME in this objfile.
+
+
+File: gdb.info,  Node: Frames In Python,  Next: Blocks In Python,  Prev: Objfiles In Python,  Up: Python API
+
+23.3.2.28 Accessing inferior stack frames from Python
+.....................................................
+
+When the debugged program stops, GDB is able to analyze its call stack
+(*note Stack frames: Frames.).  The 'gdb.Frame' class represents a frame
+in the stack.  A 'gdb.Frame' object is only valid while its
+corresponding frame exists in the inferior's stack.  If you try to use
+an invalid frame object, GDB will throw a 'gdb.error' exception (*note
+Exception Handling::).
+
+   Two 'gdb.Frame' objects can be compared for equality with the '=='
+operator, like:
+
+     (gdb) python print gdb.newest_frame() == gdb.selected_frame ()
+     True
+
+   The following frame-related functions are available in the 'gdb'
+module:
+
+ -- Function: gdb.selected_frame ()
+     Return the selected frame object.  (*note Selecting a Frame:
+     Selection.).
+
+ -- Function: gdb.newest_frame ()
+     Return the newest frame object for the selected thread.
+
+ -- Function: gdb.frame_stop_reason_string (reason)
+     Return a string explaining the reason why GDB stopped unwinding
+     frames, as expressed by the given REASON code (an integer, see the
+     'unwind_stop_reason' method further down in this section).
+
+ -- Function: gdb.invalidate_cached_frames
+     GDB internally keeps a cache of the frames that have been unwound.
+     This function invalidates this cache.
+
+     This function should not generally be called by ordinary Python
+     code.  It is documented for the sake of completeness.
+
+   A 'gdb.Frame' object has the following methods:
+
+ -- Function: Frame.is_valid ()
+     Returns true if the 'gdb.Frame' object is valid, false if not.  A
+     frame object can become invalid if the frame it refers to doesn't
+     exist anymore in the inferior.  All 'gdb.Frame' methods will throw
+     an exception if it is invalid at the time the method is called.
+
+ -- Function: Frame.name ()
+     Returns the function name of the frame, or 'None' if it can't be
+     obtained.
+
+ -- Function: Frame.architecture ()
+     Returns the 'gdb.Architecture' object corresponding to the frame's
+     architecture.  *Note Architectures In Python::.
+
+ -- Function: Frame.type ()
+     Returns the type of the frame.  The value can be one of:
+     'gdb.NORMAL_FRAME'
+          An ordinary stack frame.
+
+     'gdb.DUMMY_FRAME'
+          A fake stack frame that was created by GDB when performing an
+          inferior function call.
+
+     'gdb.INLINE_FRAME'
+          A frame representing an inlined function.  The function was
+          inlined into a 'gdb.NORMAL_FRAME' that is older than this one.
+
+     'gdb.TAILCALL_FRAME'
+          A frame representing a tail call.  *Note Tail Call Frames::.
+
+     'gdb.SIGTRAMP_FRAME'
+          A signal trampoline frame.  This is the frame created by the
+          OS when it calls into a signal handler.
+
+     'gdb.ARCH_FRAME'
+          A fake stack frame representing a cross-architecture call.
+
+     'gdb.SENTINEL_FRAME'
+          This is like 'gdb.NORMAL_FRAME', but it is only used for the
+          newest frame.
+
+ -- Function: Frame.unwind_stop_reason ()
+     Return an integer representing the reason why it's not possible to
+     find more frames toward the outermost frame.  Use
+     'gdb.frame_stop_reason_string' to convert the value returned by
+     this function to a string.  The value can be one of:
+
+     'gdb.FRAME_UNWIND_NO_REASON'
+          No particular reason (older frames should be available).
+
+     'gdb.FRAME_UNWIND_NULL_ID'
+          The previous frame's analyzer returns an invalid result.  This
+          is no longer used by GDB, and is kept only for backward
+          compatibility.
+
+     'gdb.FRAME_UNWIND_OUTERMOST'
+          This frame is the outermost.
+
+     'gdb.FRAME_UNWIND_UNAVAILABLE'
+          Cannot unwind further, because that would require knowing the
+          values of registers or memory that have not been collected.
+
+     'gdb.FRAME_UNWIND_INNER_ID'
+          This frame ID looks like it ought to belong to a NEXT frame,
+          but we got it for a PREV frame.  Normally, this is a sign of
+          unwinder failure.  It could also indicate stack corruption.
+
+     'gdb.FRAME_UNWIND_SAME_ID'
+          This frame has the same ID as the previous one.  That means
+          that unwinding further would almost certainly give us another
+          frame with exactly the same ID, so break the chain.  Normally,
+          this is a sign of unwinder failure.  It could also indicate
+          stack corruption.
+
+     'gdb.FRAME_UNWIND_NO_SAVED_PC'
+          The frame unwinder did not find any saved PC, but we needed
+          one to unwind further.
+
+     'gdb.FRAME_UNWIND_MEMORY_ERROR'
+          The frame unwinder caused an error while trying to access
+          memory.
+
+     'gdb.FRAME_UNWIND_FIRST_ERROR'
+          Any stop reason greater or equal to this value indicates some
+          kind of error.  This special value facilitates writing code
+          that tests for errors in unwinding in a way that will work
+          correctly even if the list of the other values is modified in
+          future GDB versions.  Using it, you could write:
+               reason = gdb.selected_frame().unwind_stop_reason ()
+               reason_str =  gdb.frame_stop_reason_string (reason)
+               if reason >=  gdb.FRAME_UNWIND_FIRST_ERROR:
+                   print ("An error occurred: %s" % reason_str)
+
+ -- Function: Frame.pc ()
+     Returns the frame's resume address.
+
+ -- Function: Frame.block ()
+     Return the frame's code block.  *Note Blocks In Python::.  If the
+     frame does not have a block - for example, if there is no debugging
+     information for the code in question - then this will throw an
+     exception.
+
+ -- Function: Frame.function ()
+     Return the symbol for the function corresponding to this frame.
+     *Note Symbols In Python::.
+
+ -- Function: Frame.older ()
+     Return the frame that called this frame.  If this is the oldest
+     frame, return 'None'.
+
+ -- Function: Frame.newer ()
+     Return the frame called by this frame.  If this is the newest
+     frame, return 'None'.
+
+ -- Function: Frame.find_sal ()
+     Return the frame's symtab and line object.  *Note Symbol Tables In
+     Python::.
+
+ -- Function: Frame.read_register (register)
+     Return the value of REGISTER in this frame.  Returns a 'Gdb.Value'
+     object.  Throws an exception if REGISTER does not exist.  The
+     REGISTER argument must be one of the following:
+       1. A string that is the name of a valid register (e.g., ''sp'' or
+          ''rax'').
+       2. A 'gdb.RegisterDescriptor' object (*note Registers In
+          Python::).
+       3. A GDB internal, platform specific number.  Using these numbers
+          is supported for historic reasons, but is not recommended as
+          future changes to GDB could change the mapping between numbers
+          and the registers they represent, breaking any Python code
+          that uses the platform-specific numbers.  The numbers are
+          usually found in the corresponding 'PLATFORM-tdep.h' file in
+          the GDB source tree.
+     Using a string to access registers will be slightly slower than the
+     other two methods as GDB must look up the mapping between name and
+     internal register number.  If performance is critical consider
+     looking up and caching a 'gdb.RegisterDescriptor' object.
+
+ -- Function: Frame.read_var (variable [, block])
+     Return the value of VARIABLE in this frame.  If the optional
+     argument BLOCK is provided, search for the variable from that
+     block; otherwise start at the frame's current block (which is
+     determined by the frame's current program counter).  The VARIABLE
+     argument must be a string or a 'gdb.Symbol' object; BLOCK must be a
+     'gdb.Block' object.
+
+ -- Function: Frame.select ()
+     Set this frame to be the selected frame.  *Note Examining the
+     Stack: Stack.
+
+ -- Function: Frame.static_link ()
+     In some languages (e.g., Ada, but also a GNU C extension), a nested
+     function can access the variables in the outer scope.  This is done
+     via a "static link", which is a reference from the nested frame to
+     the appropriate outer frame.
+
+     This method returns this frame's static link frame, if one exists.
+     If there is no static link, this method returns 'None'.
+
+ -- Function: Frame.level ()
+     Return an integer, the stack frame level for this frame.  *Note
+     Stack Frames: Frames.
+
+ -- Function: Frame.language ()
+     Return a string, the source language for this frame.
+
+
+File: gdb.info,  Node: Blocks In Python,  Next: Symbols In Python,  Prev: Frames In Python,  Up: Python API
+
+23.3.2.29 Accessing blocks from Python
+......................................
+
+In GDB, symbols are stored in blocks.  A block corresponds roughly to a
+scope in the source code.  Blocks are organized hierarchically, and are
+represented individually in Python as a 'gdb.Block'.  Blocks rely on
+debugging information being available.
+
+   A frame has a block.  Please see *note Frames In Python::, for a more
+in-depth discussion of frames.
+
+   The outermost block is known as the "global block".  The global block
+typically holds public global variables and functions.
+
+   The block nested just inside the global block is the "static block".
+The static block typically holds file-scoped variables and functions.
+
+   GDB provides a method to get a block's superblock, but there is
+currently no way to examine the sub-blocks of a block, or to iterate
+over all the blocks in a symbol table (*note Symbol Tables In Python::).
+
+   Here is a short example that should help explain blocks:
+
+     /* This is in the global block.  */
+     int global;
+
+     /* This is in the static block.  */
+     static int file_scope;
+
+     /* 'function' is in the global block, and 'argument' is
+        in a block nested inside of 'function'.  */
+     int function (int argument)
+     {
+       /* 'local' is in a block inside 'function'.  It may or may
+          not be in the same block as 'argument'.  */
+       int local;
+
+       {
+          /* 'inner' is in a block whose superblock is the one holding
+             'local'.  */
+          int inner;
+
+          /* If this call is expanded by the compiler, you may see
+             a nested block here whose function is 'inline_function'
+             and whose superblock is the one holding 'inner'.  */
+          inline_function ();
+       }
+     }
+
+   A 'gdb.Block' is iterable.  The iterator returns the symbols (*note
+Symbols In Python::) local to the block.  Python programs should not
+assume that a specific block object will always contain a given symbol,
+since changes in GDB features and infrastructure may cause symbols move
+across blocks in a symbol table.  You can also use Python's "dictionary
+syntax" to access variables in this block, e.g.:
+
+     symbol = some_block['variable']  # symbol is of type gdb.Symbol
+
+   The following block-related functions are available in the 'gdb'
+module:
+
+ -- Function: gdb.block_for_pc (pc)
+     Return the innermost 'gdb.Block' containing the given PC value.  If
+     the block cannot be found for the PC value specified, the function
+     will return 'None'.  This is identical to
+     'gdb.current_progspace().block_for_pc(pc)' and is included for
+     historical compatibility.
+
+   A 'gdb.Block' object has the following methods:
+
+ -- Function: Block.is_valid ()
+     Returns 'True' if the 'gdb.Block' object is valid, 'False' if not.
+     A block object can become invalid if the block it refers to doesn't
+     exist anymore in the inferior.  All other 'gdb.Block' methods will
+     throw an exception if it is invalid at the time the method is
+     called.  The block's validity is also checked during iteration over
+     symbols of the block.
+
+   A 'gdb.Block' object has the following attributes:
+
+ -- Variable: Block.start
+     The start address of the block.  This attribute is not writable.
+
+ -- Variable: Block.end
+     One past the last address that appears in the block.  This
+     attribute is not writable.
+
+ -- Variable: Block.function
+     The name of the block represented as a 'gdb.Symbol'.  If the block
+     is not named, then this attribute holds 'None'.  This attribute is
+     not writable.
+
+     For ordinary function blocks, the superblock is the static block.
+     However, you should note that it is possible for a function block
+     to have a superblock that is not the static block - for instance
+     this happens for an inlined function.
+
+ -- Variable: Block.superblock
+     The block containing this block.  If this parent block does not
+     exist, this attribute holds 'None'.  This attribute is not
+     writable.
+
+ -- Variable: Block.global_block
+     The global block associated with this block.  This attribute is not
+     writable.
+
+ -- Variable: Block.static_block
+     The static block associated with this block.  This attribute is not
+     writable.
+
+ -- Variable: Block.is_global
+     'True' if the 'gdb.Block' object is a global block, 'False' if not.
+     This attribute is not writable.
+
+ -- Variable: Block.is_static
+     'True' if the 'gdb.Block' object is a static block, 'False' if not.
+     This attribute is not writable.
+
+
+File: gdb.info,  Node: Symbols In Python,  Next: Symbol Tables In Python,  Prev: Blocks In Python,  Up: Python API
+
+23.3.2.30 Python representation of Symbols
+..........................................
+
+GDB represents every variable, function and type as an entry in a symbol
+table.  *Note Examining the Symbol Table: Symbols.  Similarly, Python
+represents these symbols in GDB with the 'gdb.Symbol' object.
+
+   The following symbol-related functions are available in the 'gdb'
+module:
+
+ -- Function: gdb.lookup_symbol (name [, block [, domain]])
+     This function searches for a symbol by name.  The search scope can
+     be restricted to the parameters defined in the optional domain and
+     block arguments.
+
+     NAME is the name of the symbol.  It must be a string.  The optional
+     BLOCK argument restricts the search to symbols visible in that
+     BLOCK.  The BLOCK argument must be a 'gdb.Block' object.  If
+     omitted, the block for the current frame is used.  The optional
+     DOMAIN argument restricts the search to the domain type.  The
+     DOMAIN argument must be a domain constant defined in the 'gdb'
+     module and described later in this chapter.
+
+     The result is a tuple of two elements.  The first element is a
+     'gdb.Symbol' object or 'None' if the symbol is not found.  If the
+     symbol is found, the second element is 'True' if the symbol is a
+     field of a method's object (e.g., 'this' in C++), otherwise it is
+     'False'.  If the symbol is not found, the second element is
+     'False'.
+
+ -- Function: gdb.lookup_global_symbol (name [, domain])
+     This function searches for a global symbol by name.  The search
+     scope can be restricted to by the domain argument.
+
+     NAME is the name of the symbol.  It must be a string.  The optional
+     DOMAIN argument restricts the search to the domain type.  The
+     DOMAIN argument must be a domain constant defined in the 'gdb'
+     module and described later in this chapter.
+
+     The result is a 'gdb.Symbol' object or 'None' if the symbol is not
+     found.
+
+ -- Function: gdb.lookup_static_symbol (name [, domain])
+     This function searches for a global symbol with static linkage by
+     name.  The search scope can be restricted to by the domain
+     argument.
+
+     NAME is the name of the symbol.  It must be a string.  The optional
+     DOMAIN argument restricts the search to the domain type.  The
+     DOMAIN argument must be a domain constant defined in the 'gdb'
+     module and described later in this chapter.
+
+     The result is a 'gdb.Symbol' object or 'None' if the symbol is not
+     found.
+
+     Note that this function will not find function-scoped static
+     variables.  To look up such variables, iterate over the variables
+     of the function's 'gdb.Block' and check that 'block.addr_class' is
+     'gdb.SYMBOL_LOC_STATIC'.
+
+     There can be multiple global symbols with static linkage with the
+     same name.  This function will only return the first matching
+     symbol that it finds.  Which symbol is found depends on where GDB
+     is currently stopped, as GDB will first search for matching symbols
+     in the current object file, and then search all other object files.
+     If the application is not yet running then GDB will search all
+     object files in the order they appear in the debug information.
+
+ -- Function: gdb.lookup_static_symbols (name [, domain])
+     Similar to 'gdb.lookup_static_symbol', this function searches for
+     global symbols with static linkage by name, and optionally
+     restricted by the domain argument.  However, this function returns
+     a list of all matching symbols found, not just the first one.
+
+     NAME is the name of the symbol.  It must be a string.  The optional
+     DOMAIN argument restricts the search to the domain type.  The
+     DOMAIN argument must be a domain constant defined in the 'gdb'
+     module and described later in this chapter.
+
+     The result is a list of 'gdb.Symbol' objects which could be empty
+     if no matching symbols were found.
+
+     Note that this function will not find function-scoped static
+     variables.  To look up such variables, iterate over the variables
+     of the function's 'gdb.Block' and check that 'block.addr_class' is
+     'gdb.SYMBOL_LOC_STATIC'.
+
+   A 'gdb.Symbol' object has the following attributes:
+
+ -- Variable: Symbol.type
+     The type of the symbol or 'None' if no type is recorded.  This
+     attribute is represented as a 'gdb.Type' object.  *Note Types In
+     Python::.  This attribute is not writable.
+
+ -- Variable: Symbol.symtab
+     The symbol table in which the symbol appears.  This attribute is
+     represented as a 'gdb.Symtab' object.  *Note Symbol Tables In
+     Python::.  This attribute is not writable.
+
+ -- Variable: Symbol.line
+     The line number in the source code at which the symbol was defined.
+     This is an integer.
+
+ -- Variable: Symbol.name
+     The name of the symbol as a string.  This attribute is not
+     writable.
+
+ -- Variable: Symbol.linkage_name
+     The name of the symbol, as used by the linker (i.e., may be
+     mangled).  This attribute is not writable.
+
+ -- Variable: Symbol.print_name
+     The name of the symbol in a form suitable for output.  This is
+     either 'name' or 'linkage_name', depending on whether the user
+     asked GDB to display demangled or mangled names.
+
+ -- Variable: Symbol.addr_class
+     The address class of the symbol.  This classifies how to find the
+     value of a symbol.  Each address class is a constant defined in the
+     'gdb' module and described later in this chapter.
+
+ -- Variable: Symbol.needs_frame
+     This is 'True' if evaluating this symbol's value requires a frame
+     (*note Frames In Python::) and 'False' otherwise.  Typically, local
+     variables will require a frame, but other symbols will not.
+
+ -- Variable: Symbol.is_argument
+     'True' if the symbol is an argument of a function.
+
+ -- Variable: Symbol.is_constant
+     'True' if the symbol is a constant.
+
+ -- Variable: Symbol.is_function
+     'True' if the symbol is a function or a method.
+
+ -- Variable: Symbol.is_variable
+     'True' if the symbol is a variable, as opposed to something like a
+     function or type.  Note that this also returns 'False' for
+     arguments.
+
+   A 'gdb.Symbol' object has the following methods:
+
+ -- Function: Symbol.is_valid ()
+     Returns 'True' if the 'gdb.Symbol' object is valid, 'False' if not.
+     A 'gdb.Symbol' object can become invalid if the symbol it refers to
+     does not exist in GDB any longer.  All other 'gdb.Symbol' methods
+     will throw an exception if it is invalid at the time the method is
+     called.
+
+ -- Function: Symbol.value ([frame])
+     Compute the value of the symbol, as a 'gdb.Value'.  For functions,
+     this computes the address of the function, cast to the appropriate
+     type.  If the symbol requires a frame in order to compute its
+     value, then FRAME must be given.  If FRAME is not given, or if
+     FRAME is invalid, then this method will throw an exception.
+
+   The available domain categories in 'gdb.Symbol' are represented as
+constants in the 'gdb' module:
+
+'gdb.SYMBOL_UNDEF_DOMAIN'
+     This is used when a domain has not been discovered or none of the
+     following domains apply.  This usually indicates an error either in
+     the symbol information or in GDB's handling of symbols.
+
+'gdb.SYMBOL_VAR_DOMAIN'
+     This domain contains variables.
+
+'gdb.SYMBOL_FUNCTION_DOMAIN'
+     This domain contains functions.
+
+'gdb.SYMBOL_TYPE_DOMAIN'
+     This domain contains types.  In a C-like language, types using a
+     tag (the name appearing after a 'struct', 'union', or 'enum'
+     keyword) will not appear here; in other languages, all types are in
+     this domain.
+
+'gdb.SYMBOL_STRUCT_DOMAIN'
+     This domain holds struct, union and enum tag names.  This domain is
+     only used for C-like languages.  For example, in this code:
+          struct type_one { int x; };
+          typedef struct type_one type_two;
+     Here 'type_one' will be in 'SYMBOL_STRUCT_DOMAIN', but 'type_two'
+     will be in 'SYMBOL_TYPE_DOMAIN'.
+
+'gdb.SYMBOL_LABEL_DOMAIN'
+     This domain contains names of labels (for gotos).
+
+'gdb.SYMBOL_MODULE_DOMAIN'
+     This domain contains names of Fortran module types.
+
+'gdb.SYMBOL_COMMON_BLOCK_DOMAIN'
+     This domain contains names of Fortran common blocks.
+
+   When searching for a symbol, the desired domain constant can be
+passed verbatim to the lookup function.  For example:
+     symbol = gdb.lookup_symbol ("name", domain=gdb.SYMBOL_VAR_DOMAIN)
+
+   For more complex searches, there is a corresponding set of constants,
+each named after one of the preceding constants, but with the 'SEARCH'
+prefix replacing the 'SYMBOL' prefix; for example,
+'SEARCH_LABEL_DOMAIN'.  These may be or'd together to form a search
+constant, e.g.:
+     symbol = gdb.lookup_symbol ("name",
+                                 domain=gdb.SEARCH_VAR_DOMAIN | gdb.SEARCH_TYPE_DOMAIN)
+
+   The available address class categories in 'gdb.Symbol' are
+represented as constants in the 'gdb' module:
+
+'gdb.SYMBOL_LOC_UNDEF'
+     If this is returned by address class, it indicates an error either
+     in the symbol information or in GDB's handling of symbols.
+
+'gdb.SYMBOL_LOC_CONST'
+     Value is constant int.
+
+'gdb.SYMBOL_LOC_STATIC'
+     Value is at a fixed address.
+
+'gdb.SYMBOL_LOC_REGISTER'
+     Value is in a register.
+
+'gdb.SYMBOL_LOC_ARG'
+     Value is an argument.  This value is at the offset stored within
+     the symbol inside the frame's argument list.
+
+'gdb.SYMBOL_LOC_REF_ARG'
+     Value address is stored in the frame's argument list.  Just like
+     'LOC_ARG' except that the value's address is stored at the offset,
+     not the value itself.
+
+'gdb.SYMBOL_LOC_REGPARM_ADDR'
+     Value is a specified register.  Just like 'LOC_REGISTER' except the
+     register holds the address of the argument instead of the argument
+     itself.
+
+'gdb.SYMBOL_LOC_LOCAL'
+     Value is a local variable.
+
+'gdb.SYMBOL_LOC_TYPEDEF'
+     Value not used.  Symbols in the domain 'SYMBOL_STRUCT_DOMAIN' all
+     have this class.
+
+'gdb.SYMBOL_LOC_LABEL'
+     Value is a label.
+
+'gdb.SYMBOL_LOC_BLOCK'
+     Value is a block.
+
+'gdb.SYMBOL_LOC_CONST_BYTES'
+     Value is a byte-sequence.
+
+'gdb.SYMBOL_LOC_UNRESOLVED'
+     Value is at a fixed address, but the address of the variable has to
+     be determined from the minimal symbol table whenever the variable
+     is referenced.
+
+'gdb.SYMBOL_LOC_OPTIMIZED_OUT'
+     The value does not actually exist in the program.
+
+'gdb.SYMBOL_LOC_COMPUTED'
+     The value's address is a computed location.
+
+'gdb.SYMBOL_LOC_COMMON_BLOCK'
+     The value's address is a symbol.  This is only used for Fortran
+     common blocks.
+
+
+File: gdb.info,  Node: Symbol Tables In Python,  Next: Line Tables In Python,  Prev: Symbols In Python,  Up: Python API
+
+23.3.2.31 Symbol table representation in Python
+...............................................
+
+Access to symbol table data maintained by GDB on the inferior is exposed
+to Python via two objects: 'gdb.Symtab_and_line' and 'gdb.Symtab'.
+Symbol table and line data for a frame is returned from the 'find_sal'
+method in 'gdb.Frame' object.  *Note Frames In Python::.
+
+   For more information on GDB's symbol table management, see *note
+Examining the Symbol Table: Symbols, for more information.
+
+   A 'gdb.Symtab_and_line' object has the following attributes:
+
+ -- Variable: Symtab_and_line.symtab
+     The symbol table object ('gdb.Symtab') for this frame.  This
+     attribute is not writable.
+
+ -- Variable: Symtab_and_line.pc
+     Indicates the start of the address range occupied by code for the
+     current source line.  This attribute is not writable.
+
+ -- Variable: Symtab_and_line.last
+     Indicates the end of the address range occupied by code for the
+     current source line.  This attribute is not writable.
+
+ -- Variable: Symtab_and_line.line
+     Indicates the current line number for this object.  This attribute
+     is not writable.
+
+   A 'gdb.Symtab_and_line' object has the following methods:
+
+ -- Function: Symtab_and_line.is_valid ()
+     Returns 'True' if the 'gdb.Symtab_and_line' object is valid,
+     'False' if not.  A 'gdb.Symtab_and_line' object can become invalid
+     if the Symbol table and line object it refers to does not exist in
+     GDB any longer.  All other 'gdb.Symtab_and_line' methods will throw
+     an exception if it is invalid at the time the method is called.
+
+   A 'gdb.Symtab' object has the following attributes:
+
+ -- Variable: Symtab.filename
+     The symbol table's source filename.  This attribute is not
+     writable.
+
+ -- Variable: Symtab.objfile
+     The symbol table's backing object file.  *Note Objfiles In
+     Python::.  This attribute is not writable.
+
+ -- Variable: Symtab.producer
+     The name and possibly version number of the program that compiled
+     the code in the symbol table.  The contents of this string is up to
+     the compiler.  If no producer information is available then 'None'
+     is returned.  This attribute is not writable.
+
+   A 'gdb.Symtab' object has the following methods:
+
+ -- Function: Symtab.is_valid ()
+     Returns 'True' if the 'gdb.Symtab' object is valid, 'False' if not.
+     A 'gdb.Symtab' object can become invalid if the symbol table it
+     refers to does not exist in GDB any longer.  All other 'gdb.Symtab'
+     methods will throw an exception if it is invalid at the time the
+     method is called.
+
+ -- Function: Symtab.fullname ()
+     Return the symbol table's source absolute file name.
+
+ -- Function: Symtab.global_block ()
+     Return the global block of the underlying symbol table.  *Note
+     Blocks In Python::.
+
+ -- Function: Symtab.static_block ()
+     Return the static block of the underlying symbol table.  *Note
+     Blocks In Python::.
+
+ -- Function: Symtab.linetable ()
+     Return the line table associated with the symbol table.  *Note Line
+     Tables In Python::.
+
+
+File: gdb.info,  Node: Line Tables In Python,  Next: Breakpoints In Python,  Prev: Symbol Tables In Python,  Up: Python API
+
+23.3.2.32 Manipulating line tables using Python
+...............................................
+
+Python code can request and inspect line table information from a symbol
+table that is loaded in GDB.  A line table is a mapping of source lines
+to their executable locations in memory.  To acquire the line table
+information for a particular symbol table, use the 'linetable' function
+(*note Symbol Tables In Python::).
+
+   A 'gdb.LineTable' is iterable.  The iterator returns 'LineTableEntry'
+objects that correspond to the source line and address for each line
+table entry.  'LineTableEntry' objects have the following attributes:
+
+ -- Variable: LineTableEntry.line
+     The source line number for this line table entry.  This number
+     corresponds to the actual line of source.  This attribute is not
+     writable.
+
+ -- Variable: LineTableEntry.pc
+     The address that is associated with the line table entry where the
+     executable code for that source line resides in memory.  This
+     attribute is not writable.
+
+   As there can be multiple addresses for a single source line, you may
+receive multiple 'LineTableEntry' objects with matching 'line'
+attributes, but with different 'pc' attributes.  The iterator is sorted
+in ascending 'pc' order.  Here is a small example illustrating iterating
+over a line table.
+
+     symtab = gdb.selected_frame().find_sal().symtab
+     linetable = symtab.linetable()
+     for line in linetable:
+        print ("Line: "+str(line.line)+" Address: "+hex(line.pc))
+
+   This will have the following output:
+
+     Line: 33 Address: 0x4005c8L
+     Line: 37 Address: 0x4005caL
+     Line: 39 Address: 0x4005d2L
+     Line: 40 Address: 0x4005f8L
+     Line: 42 Address: 0x4005ffL
+     Line: 44 Address: 0x400608L
+     Line: 42 Address: 0x40060cL
+     Line: 45 Address: 0x400615L
+
+   In addition to being able to iterate over a 'LineTable', it also has
+the following direct access methods:
+
+ -- Function: LineTable.line (line)
+     Return a Python 'Tuple' of 'LineTableEntry' objects for any entries
+     in the line table for the given LINE, which specifies the source
+     code line.  If there are no entries for that source code LINE, the
+     Python 'None' is returned.
+
+ -- Function: LineTable.has_line (line)
+     Return a Python 'Boolean' indicating whether there is an entry in
+     the line table for this source line.  Return 'True' if an entry is
+     found, or 'False' if not.
+
+ -- Function: LineTable.source_lines ()
+     Return a Python 'List' of the source line numbers in the symbol
+     table.  Only lines with executable code locations are returned.
+     The contents of the 'List' will just be the source line entries
+     represented as Python 'Long' values.
+
+
+File: gdb.info,  Node: Breakpoints In Python,  Next: Finish Breakpoints in Python,  Prev: Line Tables In Python,  Up: Python API
+
+23.3.2.33 Manipulating breakpoints using Python
+...............................................
+
+Python code can manipulate breakpoints via the 'gdb.Breakpoint' class.
+
+   A breakpoint can be created using one of the two forms of the
+'gdb.Breakpoint' constructor.  The first one accepts a string like one
+would pass to the 'break' (*note Setting Breakpoints: Set Breaks.) and
+'watch' (*note Setting Watchpoints: Set Watchpoints.) commands, and can
+be used to create both breakpoints and watchpoints.  The second accepts
+separate Python arguments similar to *note Explicit Locations::, and can
+only be used to create breakpoints.
+
+ -- Function: Breakpoint.__init__ (spec [, type ][, wp_class ][,
+          internal ][, temporary ][, qualified ])
+     Create a new breakpoint according to SPEC, which is a string naming
+     the location of a breakpoint, or an expression that defines a
+     watchpoint.  The string should describe a location in a format
+     recognized by the 'break' command (*note Setting Breakpoints: Set
+     Breaks.) or, in the case of a watchpoint, by the 'watch' command
+     (*note Setting Watchpoints: Set Watchpoints.).
+
+     The optional TYPE argument specifies the type of the breakpoint to
+     create, as defined below.
+
+     The optional WP_CLASS argument defines the class of watchpoint to
+     create, if TYPE is 'gdb.BP_WATCHPOINT'.  If WP_CLASS is omitted, it
+     defaults to 'gdb.WP_WRITE'.
+
+     The optional INTERNAL argument allows the breakpoint to become
+     invisible to the user.  The breakpoint will neither be reported
+     when created, nor will it be listed in the output from 'info
+     breakpoints' (but will be listed with the 'maint info breakpoints'
+     command).
+
+     The optional TEMPORARY argument makes the breakpoint a temporary
+     breakpoint.  Temporary breakpoints are deleted after they have been
+     hit.  Any further access to the Python breakpoint after it has been
+     hit will result in a runtime error (as that breakpoint has now been
+     automatically deleted).
+
+     The optional QUALIFIED argument is a boolean that allows
+     interpreting the function passed in 'spec' as a fully-qualified
+     name.  It is equivalent to 'break''s '-qualified' flag (*note
+     Linespec Locations:: and *note Explicit Locations::).
+
+ -- Function: Breakpoint.__init__ ([ source ][, function ][, label ][,
+          line ], ][ internal ][, temporary ][, qualified ])
+     This second form of creating a new breakpoint specifies the
+     explicit location (*note Explicit Locations::) using keywords.  The
+     new breakpoint will be created in the specified source file SOURCE,
+     at the specified FUNCTION, LABEL and LINE.
+
+     INTERNAL, TEMPORARY and QUALIFIED have the same usage as explained
+     previously.
+
+   The available types are represented by constants defined in the 'gdb'
+module:
+
+'gdb.BP_BREAKPOINT'
+     Normal code breakpoint.
+
+'gdb.BP_HARDWARE_BREAKPOINT'
+     Hardware assisted code breakpoint.
+
+'gdb.BP_WATCHPOINT'
+     Watchpoint breakpoint.
+
+'gdb.BP_HARDWARE_WATCHPOINT'
+     Hardware assisted watchpoint.
+
+'gdb.BP_READ_WATCHPOINT'
+     Hardware assisted read watchpoint.
+
+'gdb.BP_ACCESS_WATCHPOINT'
+     Hardware assisted access watchpoint.
+
+'gdb.BP_CATCHPOINT'
+     Catchpoint.  Currently, this type can't be used when creating
+     'gdb.Breakpoint' objects, but will be present in 'gdb.Breakpoint'
+     objects reported from 'gdb.BreakpointEvent's (*note Events In
+     Python::).
+
+   The available watchpoint types are represented by constants defined
+in the 'gdb' module:
+
+'gdb.WP_READ'
+     Read only watchpoint.
+
+'gdb.WP_WRITE'
+     Write only watchpoint.
+
+'gdb.WP_ACCESS'
+     Read/Write watchpoint.
+
+ -- Function: Breakpoint.stop (self)
+     The 'gdb.Breakpoint' class can be sub-classed and, in particular,
+     you may choose to implement the 'stop' method.  If this method is
+     defined in a sub-class of 'gdb.Breakpoint', it will be called when
+     the inferior reaches any location of a breakpoint which
+     instantiates that sub-class.  If the method returns 'True', the
+     inferior will be stopped at the location of the breakpoint,
+     otherwise the inferior will continue.
+
+     If there are multiple breakpoints at the same location with a
+     'stop' method, each one will be called regardless of the return
+     status of the previous.  This ensures that all 'stop' methods have
+     a chance to execute at that location.  In this scenario if one of
+     the methods returns 'True' but the others return 'False', the
+     inferior will still be stopped.
+
+     You should not alter the execution state of the inferior (i.e.,
+     step, next, etc.), alter the current frame context (i.e., change
+     the current active frame), or alter, add or delete any breakpoint.
+     As a general rule, you should not alter any data within GDB or the
+     inferior at this time.
+
+     Example 'stop' implementation:
+
+          class MyBreakpoint (gdb.Breakpoint):
+                def stop (self):
+                  inf_val = gdb.parse_and_eval("foo")
+                  if inf_val == 3:
+                    return True
+                  return False
+
+ -- Function: Breakpoint.is_valid ()
+     Return 'True' if this 'Breakpoint' object is valid, 'False'
+     otherwise.  A 'Breakpoint' object can become invalid if the user
+     deletes the breakpoint.  In this case, the object still exists, but
+     the underlying breakpoint does not.  In the cases of watchpoint
+     scope, the watchpoint remains valid even if execution of the
+     inferior leaves the scope of that watchpoint.
+
+ -- Function: Breakpoint.delete ()
+     Permanently deletes the GDB breakpoint.  This also invalidates the
+     Python 'Breakpoint' object.  Any further access to this object's
+     attributes or methods will raise an error.
+
+ -- Variable: Breakpoint.enabled
+     This attribute is 'True' if the breakpoint is enabled, and 'False'
+     otherwise.  This attribute is writable.  You can use it to enable
+     or disable the breakpoint.
+
+ -- Variable: Breakpoint.silent
+     This attribute is 'True' if the breakpoint is silent, and 'False'
+     otherwise.  This attribute is writable.
+
+     Note that a breakpoint can also be silent if it has commands and
+     the first command is 'silent'.  This is not reported by the
+     'silent' attribute.
+
+ -- Variable: Breakpoint.pending
+     This attribute is 'True' if the breakpoint is pending, and 'False'
+     otherwise.  *Note Set Breaks::.  This attribute is read-only.
+
+ -- Variable: Breakpoint.thread
+     If the breakpoint is thread-specific (*note Thread-Specific
+     Breakpoints::), this attribute holds the thread's global id.  If
+     the breakpoint is not thread-specific, this attribute is 'None'.
+     This attribute is writable.
+
+     Only one of 'Breakpoint.thread' or 'Breakpoint.inferior' can be set
+     to a valid id at any time, that is, a breakpoint can be thread
+     specific, or inferior specific, but not both.
+
+ -- Variable: Breakpoint.inferior
+     If the breakpoint is inferior-specific (*note Inferior-Specific
+     Breakpoints::), this attribute holds the inferior's id.  If the
+     breakpoint is not inferior-specific, this attribute is 'None'.
+
+     This attribute can be written for breakpoints of type
+     'gdb.BP_BREAKPOINT' and 'gdb.BP_HARDWARE_BREAKPOINT'.
+
+ -- Variable: Breakpoint.task
+     If the breakpoint is Ada task-specific, this attribute holds the
+     Ada task id.  If the breakpoint is not task-specific (or the
+     underlying language is not Ada), this attribute is 'None'.  This
+     attribute is writable.
+
+ -- Variable: Breakpoint.ignore_count
+     This attribute holds the ignore count for the breakpoint, an
+     integer.  This attribute is writable.
+
+ -- Variable: Breakpoint.number
+     This attribute holds the breakpoint's number -- the identifier used
+     by the user to manipulate the breakpoint.  This attribute is not
+     writable.
+
+ -- Variable: Breakpoint.type
+     This attribute holds the breakpoint's type -- the identifier used
+     to determine the actual breakpoint type or use-case.  This
+     attribute is not writable.
+
+ -- Variable: Breakpoint.visible
+     This attribute tells whether the breakpoint is visible to the user
+     when set, or when the 'info breakpoints' command is run.  This
+     attribute is not writable.
+
+ -- Variable: Breakpoint.temporary
+     This attribute indicates whether the breakpoint was created as a
+     temporary breakpoint.  Temporary breakpoints are automatically
+     deleted after that breakpoint has been hit.  Access to this
+     attribute, and all other attributes and functions other than the
+     'is_valid' function, will result in an error after the breakpoint
+     has been hit (as it has been automatically deleted).  This
+     attribute is not writable.
+
+ -- Variable: Breakpoint.hit_count
+     This attribute holds the hit count for the breakpoint, an integer.
+     This attribute is writable, but currently it can only be set to
+     zero.
+
+ -- Variable: Breakpoint.location
+     This attribute holds the location of the breakpoint, as specified
+     by the user.  It is a string.  If the breakpoint does not have a
+     location (that is, it is a watchpoint) the attribute's value is
+     'None'.  This attribute is not writable.
+
+ -- Variable: Breakpoint.locations
+     Get the most current list of breakpoint locations that are inserted
+     for this breakpoint, with elements of type 'gdb.BreakpointLocation'
+     (described below).  This functionality matches that of the 'info
+     breakpoint' command (*note Set Breaks::), in that it only retrieves
+     the most current list of locations, thus the list itself when
+     returned is not updated behind the scenes.  This attribute is not
+     writable.
+
+ -- Variable: Breakpoint.expression
+     This attribute holds a breakpoint expression, as specified by the
+     user.  It is a string.  If the breakpoint does not have an
+     expression (the breakpoint is not a watchpoint) the attribute's
+     value is 'None'.  This attribute is not writable.
+
+ -- Variable: Breakpoint.condition
+     This attribute holds the condition of the breakpoint, as specified
+     by the user.  It is a string.  If there is no condition, this
+     attribute's value is 'None'.  This attribute is writable.
+
+ -- Variable: Breakpoint.commands
+     This attribute holds the commands attached to the breakpoint.  If
+     there are commands, this attribute's value is a string holding all
+     the commands, separated by newlines.  If there are no commands,
+     this attribute is 'None'.  This attribute is writable.
+
+Breakpoint Locations
+--------------------
+
+A breakpoint location is one of the actual places where a breakpoint has
+been set, represented in the Python API by the 'gdb.BreakpointLocation'
+type.  This type is never instantiated by the user directly, but is
+retrieved from 'Breakpoint.locations' which returns a list of breakpoint
+locations where it is currently set.  Breakpoint locations can become
+invalid if new symbol files are loaded or dynamically loaded libraries
+are closed.  Accessing the attributes of an invalidated breakpoint
+location will throw a 'RuntimeError' exception.  Access the
+'Breakpoint.locations' attribute again to retrieve the new and valid
+breakpoints location list.
+
+ -- Variable: BreakpointLocation.source
+     This attribute returns the source file path and line number where
+     this location was set.  The type of the attribute is a tuple of
+     STRING and LONG.  If the breakpoint location doesn't have a source
+     location, it returns None, which is the case for watchpoints and
+     catchpoints.  This will throw a 'RuntimeError' exception if the
+     location has been invalidated.  This attribute is not writable.
+
+ -- Variable: BreakpointLocation.address
+     This attribute returns the address where this location was set.
+     This attribute is of type long.  This will throw a 'RuntimeError'
+     exception if the location has been invalidated.  This attribute is
+     not writable.
+
+ -- Variable: BreakpointLocation.enabled
+     This attribute holds the value for whether or not this location is
+     enabled.  This attribute is writable (boolean).  This will throw a
+     'RuntimeError' exception if the location has been invalidated.
+
+ -- Variable: BreakpointLocation.owner
+     This attribute holds a reference to the 'gdb.Breakpoint' owner
+     object, from which this 'gdb.BreakpointLocation' was retrieved
+     from.  This will throw a 'RuntimeError' exception if the location
+     has been invalidated.  This attribute is not writable.
+
+ -- Variable: BreakpointLocation.function
+     This attribute gets the name of the function where this location
+     was set.  If no function could be found this attribute returns
+     'None'.  This will throw a 'RuntimeError' exception if the location
+     has been invalidated.  This attribute is not writable.
+
+ -- Variable: BreakpointLocation.fullname
+     This attribute gets the full name of where this location was set.
+     If no full name could be found, this attribute returns 'None'.
+     This will throw a 'RuntimeError' exception if the location has been
+     invalidated.  This attribute is not writable.
+
+ -- Variable: BreakpointLocation.thread_groups
+     This attribute gets the thread groups it was set in.  It returns a
+     'List' of the thread group ID's.  This will throw a 'RuntimeError'
+     exception if the location has been invalidated.  This attribute is
+     not writable.
+
+
+File: gdb.info,  Node: Finish Breakpoints in Python,  Next: Lazy Strings In Python,  Prev: Breakpoints In Python,  Up: Python API
+
+23.3.2.34 Finish Breakpoints
+............................
+
+A finish breakpoint is a temporary breakpoint set at the return address
+of a frame, based on the 'finish' command.  'gdb.FinishBreakpoint'
+extends 'gdb.Breakpoint'.  The underlying breakpoint will be disabled
+and deleted when the execution will run out of the breakpoint scope
+(i.e. 'Breakpoint.stop' or 'FinishBreakpoint.out_of_scope' triggered).
+Finish breakpoints are thread specific and must be create with the right
+thread selected.
+
+ -- Function: FinishBreakpoint.__init__ ([frame] [, internal])
+     Create a finish breakpoint at the return address of the 'gdb.Frame'
+     object FRAME.  If FRAME is not provided, this defaults to the
+     newest frame.  The optional INTERNAL argument allows the breakpoint
+     to become invisible to the user.  *Note Breakpoints In Python::,
+     for further details about this argument.
+
+ -- Function: FinishBreakpoint.out_of_scope (self)
+     In some circumstances (e.g. 'longjmp', C++ exceptions, GDB 'return'
+     command, ...), a function may not properly terminate, and thus
+     never hit the finish breakpoint.  When GDB notices such a
+     situation, the 'out_of_scope' callback will be triggered.
+
+     You may want to sub-class 'gdb.FinishBreakpoint' and override this
+     method:
+
+          class MyFinishBreakpoint (gdb.FinishBreakpoint)
+              def stop (self):
+                  print ("normal finish")
+                  return True
+
+              def out_of_scope ():
+                  print ("abnormal finish")
+
+ -- Variable: FinishBreakpoint.return_value
+     When GDB is stopped at a finish breakpoint and the frame used to
+     build the 'gdb.FinishBreakpoint' object had debug symbols, this
+     attribute will contain a 'gdb.Value' object corresponding to the
+     return value of the function.  The value will be 'None' if the
+     function return type is 'void' or if the return value was not
+     computable.  This attribute is not writable.
+
+
+File: gdb.info,  Node: Lazy Strings In Python,  Next: Architectures In Python,  Prev: Finish Breakpoints in Python,  Up: Python API
+
+23.3.2.35 Python representation of lazy strings
+...............................................
+
+A "lazy string" is a string whose contents is not retrieved or encoded
+until it is needed.
+
+   A 'gdb.LazyString' is represented in GDB as an 'address' that points
+to a region of memory, an 'encoding' that will be used to encode that
+region of memory, and a 'length' to delimit the region of memory that
+represents the string.  The difference between a 'gdb.LazyString' and a
+string wrapped within a 'gdb.Value' is that a 'gdb.LazyString' will be
+treated differently by GDB when printing.  A 'gdb.LazyString' is
+retrieved and encoded during printing, while a 'gdb.Value' wrapping a
+string is immediately retrieved and encoded on creation.
+
+   A 'gdb.LazyString' object has the following functions:
+
+ -- Function: LazyString.value ()
+     Convert the 'gdb.LazyString' to a 'gdb.Value'.  This value will
+     point to the string in memory, but will lose all the delayed
+     retrieval, encoding and handling that GDB applies to a
+     'gdb.LazyString'.
+
+ -- Variable: LazyString.address
+     This attribute holds the address of the string.  This attribute is
+     not writable.
+
+ -- Variable: LazyString.length
+     This attribute holds the length of the string in characters.  If
+     the length is -1, then the string will be fetched and encoded up to
+     the first null of appropriate width.  This attribute is not
+     writable.
+
+ -- Variable: LazyString.encoding
+     This attribute holds the encoding that will be applied to the
+     string when the string is printed by GDB.  If the encoding is not
+     set, or contains an empty string, then GDB will select the most
+     appropriate encoding when the string is printed.  This attribute is
+     not writable.
+
+ -- Variable: LazyString.type
+     This attribute holds the type that is represented by the lazy
+     string's type.  For a lazy string this is a pointer or array type.
+     To resolve this to the lazy string's character type, use the type's
+     'target' method.  *Note Types In Python::.  This attribute is not
+     writable.
+
+
+File: gdb.info,  Node: Architectures In Python,  Next: Registers In Python,  Prev: Lazy Strings In Python,  Up: Python API
+
+23.3.2.36 Python representation of architectures
+................................................
+
+GDB uses architecture specific parameters and artifacts in a number of
+its various computations.  An architecture is represented by an instance
+of the 'gdb.Architecture' class.
+
+   A 'gdb.Architecture' class has the following methods:
+
+ -- Function: Architecture.name ()
+     Return the name (string value) of the architecture.
+
+ -- Function: Architecture.disassemble (start_pc [, end_pc [, count]])
+     Return a list of disassembled instructions starting from the memory
+     address START_PC.  The optional arguments END_PC and COUNT
+     determine the number of instructions in the returned list.  If both
+     the optional arguments END_PC and COUNT are specified, then a list
+     of at most COUNT disassembled instructions whose start address
+     falls in the closed memory address interval from START_PC to END_PC
+     are returned.  If END_PC is not specified, but COUNT is specified,
+     then COUNT number of instructions starting from the address
+     START_PC are returned.  If COUNT is not specified but END_PC is
+     specified, then all instructions whose start address falls in the
+     closed memory address interval from START_PC to END_PC are
+     returned.  If neither END_PC nor COUNT are specified, then a single
+     instruction at START_PC is returned.  For all of these cases, each
+     element of the returned list is a Python 'dict' with the following
+     string keys:
+
+     'addr'
+          The value corresponding to this key is a Python long integer
+          capturing the memory address of the instruction.
+
+     'asm'
+          The value corresponding to this key is a string value which
+          represents the instruction with assembly language mnemonics.
+          The assembly language flavor used is the same as that
+          specified by the current CLI variable 'disassembly-flavor'.
+          *Note Machine Code::.
+
+     'length'
+          The value corresponding to this key is the length (integer
+          value) of the instruction in bytes.
+
+ -- Function: Architecture.integer_type (size [, signed])
+     This function looks up an integer type by its SIZE, and optionally
+     whether or not it is signed.
+
+     SIZE is the size, in bits, of the desired integer type.  Only
+     certain sizes are currently supported: 0, 8, 16, 24, 32, 64, and
+     128.
+
+     If SIGNED is not specified, it defaults to 'True'.  If SIGNED is
+     'False', the returned type will be unsigned.
+
+     If the indicated type cannot be found, this function will throw a
+     'ValueError' exception.
+
+ -- Function: Architecture.registers ([ reggroup ])
+     Return a 'gdb.RegisterDescriptorIterator' (*note Registers In
+     Python::) for all of the registers in REGGROUP, a string that is
+     the name of a register group.  If REGGROUP is omitted, or is the
+     empty string, then the register group 'all' is assumed.
+
+ -- Function: Architecture.register_groups ()
+     Return a 'gdb.RegisterGroupsIterator' (*note Registers In Python::)
+     for all of the register groups available for the
+     'gdb.Architecture'.
+
+
+File: gdb.info,  Node: Registers In Python,  Next: Connections In Python,  Prev: Architectures In Python,  Up: Python API
+
+23.3.2.37 Registers In Python
+.............................
+
+Python code can request from a 'gdb.Architecture' information about the
+set of registers available (*note 'Architecture.registers':
+gdbpy_architecture_registers.).  The register information is returned as
+a 'gdb.RegisterDescriptorIterator', which is an iterator that in turn
+returns 'gdb.RegisterDescriptor' objects.
+
+   A 'gdb.RegisterDescriptor' does not provide the value of a register
+(*note 'Frame.read_register': gdbpy_frame_read_register. for reading a
+register's value), instead the 'RegisterDescriptor' is a way to discover
+which registers are available for a particular architecture.
+
+   A 'gdb.RegisterDescriptor' has the following read-only properties:
+
+ -- Variable: RegisterDescriptor.name
+     The name of this register.
+
+   It is also possible to lookup a register descriptor based on its name
+using the following 'gdb.RegisterDescriptorIterator' function:
+
+ -- Function: RegisterDescriptorIterator.find (name)
+     Takes NAME as an argument, which must be a string, and returns a
+     'gdb.RegisterDescriptor' for the register with that name, or 'None'
+     if there is no register with that name.
+
+   Python code can also request from a 'gdb.Architecture' information
+about the set of register groups available on a given architecture
+(*note 'Architecture.register_groups': gdbpy_architecture_reggroups.).
+
+   Every register can be a member of zero or more register groups.  Some
+register groups are used internally within GDB to control things like
+which registers must be saved when calling into the program being
+debugged (*note Calling Program Functions: Calling.).  Other register
+groups exist to allow users to easily see related sets of registers in
+commands like 'info registers' (*note 'info registers REGGROUP':
+info_registers_reggroup.).
+
+   The register groups information is returned as a
+'gdb.RegisterGroupsIterator', which is an iterator that in turn returns
+'gdb.RegisterGroup' objects.
+
+   A 'gdb.RegisterGroup' object has the following read-only properties:
+
+ -- Variable: RegisterGroup.name
+     A string that is the name of this register group.
+
+
+File: gdb.info,  Node: Connections In Python,  Next: TUI Windows In Python,  Prev: Registers In Python,  Up: Python API
+
+23.3.2.38 Connections In Python
+...............................
+
+GDB lets you run and debug multiple programs in a single session.  Each
+program being debugged has a connection, the connection describes how
+GDB controls the program being debugged.  Examples of different
+connection types are 'native' and 'remote'.  *Note Inferiors Connections
+and Programs::.
+
+   Connections in GDB are represented as instances of
+'gdb.TargetConnection', or as one of its sub-classes.  To get a list of
+all connections use 'gdb.connections' (*note gdb.connections:
+gdbpy_connections.).
+
+   To get the connection for a single 'gdb.Inferior' read its
+'gdb.Inferior.connection' attribute (*note gdb.Inferior.connection:
+gdbpy_inferior_connection.).
+
+   Currently there is only a single sub-class of 'gdb.TargetConnection',
+'gdb.RemoteTargetConnection', however, additional sub-classes may be
+added in future releases of GDB.  As a result you should avoid writing
+code like:
+
+     conn = gdb.selected_inferior().connection
+     if type(conn) is gdb.RemoteTargetConnection:
+       print("This is a remote target connection")
+
+as this may fail when more connection types are added.  Instead, you
+should write:
+
+     conn = gdb.selected_inferior().connection
+     if isinstance(conn, gdb.RemoteTargetConnection):
+       print("This is a remote target connection")
+
+   A 'gdb.TargetConnection' has the following method:
+
+ -- Function: TargetConnection.is_valid ()
+     Return 'True' if the 'gdb.TargetConnection' object is valid,
+     'False' if not.  A 'gdb.TargetConnection' will become invalid if
+     the connection no longer exists within GDB, this might happen when
+     no inferiors are using the connection, but could be delayed until
+     the user replaces the current target.
+
+     Reading any of the 'gdb.TargetConnection' properties will throw an
+     exception if the connection is invalid.
+
+   A 'gdb.TargetConnection' has the following read-only properties:
+
+ -- Variable: TargetConnection.num
+     An integer assigned by GDB to uniquely identify this connection.
+     This is the same value as displayed in the 'Num' column of the
+     'info connections' command output (*note info connections:
+     Inferiors Connections and Programs.).
+
+ -- Variable: TargetConnection.type
+     A string that describes what type of connection this is.  This
+     string will be one of the valid names that can be passed to the
+     'target' command (*note target command: Target Commands.).
+
+ -- Variable: TargetConnection.description
+     A string that gives a short description of this target type.  This
+     is the same string that is displayed in the 'Description' column of
+     the 'info connection' command output (*note info connections:
+     Inferiors Connections and Programs.).
+
+ -- Variable: TargetConnection.details
+     An optional string that gives additional information about this
+     connection.  This attribute can be 'None' if there are no
+     additional details for this connection.
+
+     An example of a connection type that might have additional details
+     is the 'remote' connection, in this case the details string can
+     contain the 'HOSTNAME:PORT' that was used to connect to the remote
+     target.
+
+   The 'gdb.RemoteTargetConnection' class is a sub-class of
+'gdb.TargetConnection', and is used to represent 'remote' and
+'extended-remote' connections.  In addition to the attributes and
+methods available from the 'gdb.TargetConnection' base class, a
+'gdb.RemoteTargetConnection' has the following method:
+
+ -- Function: RemoteTargetConnection.send_packet (packet)
+     This method sends PACKET to the remote target and returns the
+     response.  The PACKET should either be a 'bytes' object, or a
+     'Unicode' string.
+
+     If PACKET is a 'Unicode' string, then the string is encoded to a
+     'bytes' object using the ASCII codec.  If the string can't be
+     encoded then an 'UnicodeError' is raised.
+
+     If PACKET is not a 'bytes' object, or a 'Unicode' string, then a
+     'TypeError' is raised.  If PACKET is empty then a 'ValueError' is
+     raised.
+
+     The response is returned as a 'bytes' object.  If it is known that
+     the response can be represented as a string then this can be
+     decoded from the buffer.  For example, if it is known that the
+     response is an ASCII string:
+
+          remote_connection.send_packet("some_packet").decode("ascii")
+
+     The prefix, suffix, and checksum (as required by the remote serial
+     protocol) are automatically added to the outgoing packet, and
+     removed from the incoming packet before the contents of the reply
+     are returned.
+
+     This is equivalent to the 'maintenance packet' command (*note maint
+     packet::).
+
+
+File: gdb.info,  Node: TUI Windows In Python,  Next: Disassembly In Python,  Prev: Connections In Python,  Up: Python API
+
+23.3.2.39 Implementing new TUI windows
+......................................
+
+New TUI (*note TUI::) windows can be implemented in Python.
+
+ -- Function: gdb.register_window_type (name, factory)
+     Because TUI windows are created and destroyed depending on the
+     layout the user chooses, new window types are implemented by
+     registering a factory function with GDB.
+
+     NAME is the name of the new window.  It's an error to try to
+     replace one of the built-in windows, but other window types can be
+     replaced.  The NAME should match the regular expression
+     '[a-zA-Z][-_.a-zA-Z0-9]*', it is an error to try and create a
+     window with an invalid name.
+
+     FUNCTION is a factory function that is called to create the TUI
+     window.  This is called with a single argument of type
+     'gdb.TuiWindow', described below.  It should return an object that
+     implements the TUI window protocol, also described below.
+
+   As mentioned above, when a factory function is called, it is passed
+an object of type 'gdb.TuiWindow'.  This object has these methods and
+attributes:
+
+ -- Function: TuiWindow.is_valid ()
+     This method returns 'True' when this window is valid.  When the
+     user changes the TUI layout, windows no longer visible in the new
+     layout will be destroyed.  At this point, the 'gdb.TuiWindow' will
+     no longer be valid, and methods (and attributes) other than
+     'is_valid' will throw an exception.
+
+     When the TUI is disabled using 'tui disable' (*note tui disable:
+     TUI Commands.) the window is hidden rather than destroyed, but
+     'is_valid' will still return 'False' and other methods (and
+     attributes) will still throw an exception.
+
+ -- Variable: TuiWindow.width
+     This attribute holds the width of the window.  It is not writable.
+
+ -- Variable: TuiWindow.height
+     This attribute holds the height of the window.  It is not writable.
+
+ -- Variable: TuiWindow.title
+     This attribute holds the window's title, a string.  This is
+     normally displayed above the window.  This attribute can be
+     modified.
+
+ -- Function: TuiWindow.erase ()
+     Remove all the contents of the window.
+
+ -- Function: TuiWindow.write (string [, full_window])
+     Write STRING to the window.  STRING can contain ANSI terminal
+     escape styling sequences; GDB will translate these as appropriate
+     for the terminal.
+
+     If the FULL_WINDOW parameter is 'True', then STRING contains the
+     full contents of the window.  This is similar to calling 'erase'
+     before 'write', but avoids the flickering.
+
+   The factory function that you supply should return an object
+conforming to the TUI window protocol.  These are the method that can be
+called on this object, which is referred to below as the "window
+object".  The methods documented below are optional; if the object does
+not implement one of these methods, GDB will not attempt to call it.
+Additional new methods may be added to the window protocol in the
+future.  GDB guarantees that they will begin with a lower-case letter,
+so you can start implementation methods with upper-case letters or
+underscore to avoid any future conflicts.
+
+ -- Function: Window.close ()
+     When the TUI window is closed, the 'gdb.TuiWindow' object will be
+     put into an invalid state.  At this time, GDB will call 'close'
+     method on the window object.
+
+     After this method is called, GDB will discard any references it
+     holds on this window object, and will no longer call methods on
+     this object.
+
+ -- Function: Window.render ()
+     In some situations, a TUI window can change size.  For example,
+     this can happen if the user resizes the terminal, or changes the
+     layout.  When this happens, GDB will call the 'render' method on
+     the window object.
+
+     If your window is intended to update in response to changes in the
+     inferior, you will probably also want to register event listeners
+     and send output to the 'gdb.TuiWindow'.
+
+ -- Function: Window.hscroll (num)
+     This is a request to scroll the window horizontally.  NUM is the
+     amount by which to scroll, with negative numbers meaning to scroll
+     right.  In the TUI mod